From 5c9dd41b032e798d55a6c6a0ce86587dfd2b1ee1 Mon Sep 17 00:00:00 2001 From: Vladislav Polyakov Date: Wed, 23 Oct 2024 22:26:12 +0300 Subject: [PATCH] =?UTF-8?q?=F0=9F=A7=AA=20Publish=20reports?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- init/main.js | 72 +- init/post.js | 3764 +-------------------------------------- init/src/jobs/main.ts | 14 +- init/src/jobs/post.ts | 28 +- report/main.js | 43 +- report/src/jobs/main.ts | 52 +- 6 files changed, 199 insertions(+), 3774 deletions(-) diff --git a/init/main.js b/init/main.js index 292430b..834cd21 100644 --- a/init/main.js +++ b/init/main.js @@ -22668,7 +22668,7 @@ var require_github = __commonJS((exports) => { }); // src/jobs/main.ts -var import_core = __toESM(require_core(), 1); +var import_core2 = __toESM(require_core(), 1); var import_exec = __toESM(require_exec(), 1); import * as fs from "node:fs"; import * as path from "node:path"; @@ -22933,40 +22933,80 @@ ${generateMonitoring()} `; // src/jobs/main.ts +var import_github2 = __toESM(require_github(), 1); + +// src/help/pulls.ts +var import_core = __toESM(require_core(), 1); var import_github = __toESM(require_github(), 1); +async function getPullRequestNumber() { + let token = import_core.getInput("github_token") || process.env.GITHUB_TOKEN; + let prNumber = import_core.getInput("github_pull_request_number"); + if (prNumber.length > 0) { + return parseInt(prNumber); + } + if (import_github.context.eventName === "pull_request") { + return import_github.context.payload.pull_request.number; + } + if (token) { + let octokit = import_github.getOctokit(token); + let branch = import_github.context.ref.replace("refs/heads/", ""); + const { data: pulls } = await octokit.rest.pulls.list({ + state: "open", + owner: import_github.context.repo.owner, + repo: import_github.context.repo.repo, + head: `${import_github.context.actor}:${branch}` + }); + if (pulls.length > 0) { + return pulls[0].number; + } + } + return null; +} + +// src/jobs/main.ts (async function main() { - import_core.debug(JSON.stringify(import_github.context, null, 4)); + import_core2.debug(JSON.stringify(import_github2.context, null, 4)); let cwd = path.join(process.cwd(), ".slo"); - import_core.saveState("CWD", cwd); - import_core.debug("Creating working directory..."); + import_core2.saveState("CWD", cwd); + import_core2.debug("Creating working directory..."); fs.mkdirSync(cwd, { recursive: true }); { - import_core.debug("Creating ydb config..."); + import_core2.debug("Aquire pull request number..."); + let prNumber = await getPullRequestNumber(); + import_core2.saveState("PRN", prNumber); + if (!prNumber) { + import_core2.setFailed("Pull Request number could not be determined."); + return; + } + import_core2.debug(`Pull request number: ${prNumber}`); + } + { + import_core2.debug("Creating ydb config..."); let configPath = path.join(cwd, "ydb.yaml"); let configContent = ydbConfig; fs.writeFileSync(configPath, configContent, { encoding: "utf-8" }); - import_core.debug(`Created config for ydb: ${configPath}`); + import_core2.debug(`Created config for ydb: ${configPath}`); } { - import_core.debug("Creating prometheus config..."); + import_core2.debug("Creating prometheus config..."); let configPath = path.join(cwd, "prometheus.yml"); let configContent = prometheusConfig; fs.writeFileSync(configPath, configContent, { encoding: "utf-8" }); - import_core.debug(`Created config for prometheus: ${configPath}`); + import_core2.debug(`Created config for prometheus: ${configPath}`); } { - import_core.debug("Creating compose config..."); + import_core2.debug("Creating compose config..."); let composePath = path.join(cwd, "compose.yaml"); - let composeContent = generateComposeFile(parseInt(import_core.getInput("YDB_DATABASE_NODE_COUNT", { required: true }))); + let composeContent = generateComposeFile(parseInt(import_core2.getInput("YDB_DATABASE_NODE_COUNT", { required: true }))); fs.writeFileSync(composePath, composeContent, { encoding: "utf-8" }); - import_core.debug(`Created compose.yaml: ${composePath}`); + import_core2.debug(`Created compose.yaml: ${composePath}`); } - import_core.debug("Starting YDB..."); + import_core2.debug("Starting YDB..."); await import_exec.exec(`docker`, [`compose`, `-f`, `compose.yaml`, `up`, `--quiet-pull`, `-d`], { cwd }); let start = new Date; - import_core.debug(`YDB started at ${start}`); - import_core.saveState("YDB_START_TIME", start.toISOString()); + import_core2.debug(`YDB started at ${start}`); + import_core2.saveState("YDB_START_TIME", start.toISOString()); })(); -//# debugId=665A96F2D681C44664756E2164756E21 -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2NvcmUvbGliL3V0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9jb3JlL2xpYi9jb21tYW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9jb3JlL2xpYi9maWxlLWNvbW1hbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2h0dHAtY2xpZW50L2xpYi9wcm94eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdHVubmVsL2xpYi90dW5uZWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29yZS9zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvZXJyb3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvY29uc3RhbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi90aW1lcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9kZXBzL3N0cmVhbXNlYXJjaC9zYm1oLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZmFzdGlmeS9idXNib3kvZGVwcy9kaWNlci9saWIvUGFydFN0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGZhc3RpZnkvYnVzYm95L2xpYi91dGlscy9nZXRMaW1pdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGZhc3RpZnkvYnVzYm95L2RlcHMvZGljZXIvbGliL0hlYWRlclBhcnNlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGZhc3RpZnkvYnVzYm95L2RlcHMvZGljZXIvbGliL0RpY2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZmFzdGlmeS9idXNib3kvbGliL3V0aWxzL2RlY29kZVRleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9saWIvdXRpbHMvcGFyc2VQYXJhbXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9saWIvdXRpbHMvYmFzZW5hbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9saWIvdHlwZXMvbXVsdGlwYXJ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZmFzdGlmeS9idXNib3kvbGliL3V0aWxzL0RlY29kZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9saWIvdHlwZXMvdXJsZW5jb2RlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGZhc3RpZnkvYnVzYm95L2xpYi9tYWluLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL2NvbnN0YW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9mZXRjaC9nbG9iYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9mZXRjaC9zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL3dlYmlkbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9mZXRjaC9kYXRhVVJMLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL2ZpbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvZm9ybWRhdGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvYm9keS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb3JlL3JlcXVlc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9kaXNwYXRjaGVyLWJhc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29yZS9jb25uZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2xsaHR0cC91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9sbGh0dHAvY29uc3RhbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2hhbmRsZXIvUmVkaXJlY3RIYW5kbGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ludGVyY2VwdG9yL3JlZGlyZWN0SW50ZXJjZXB0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbGxodHRwL2xsaHR0cC13YXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2xsaHR0cC9sbGh0dHBfc2ltZC13YXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NsaWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9ub2RlL2ZpeGVkLXF1ZXVlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3Bvb2wtc3RhdHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvcG9vbC1iYXNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3Bvb2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYmFsYW5jZWQtcG9vbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb21wYXQvZGlzcGF0Y2hlci13ZWFrcmVmLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FnZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9yZWFkYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvYWJvcnQtc2lnbmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hcGktcmVxdWVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvYXBpLXN0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvYXBpLXBpcGVsaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hcGktdXBncmFkZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvYXBpLWNvbm5lY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYXBpL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1lcnJvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbW9jay9tb2NrLXN5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbW9jay9tb2NrLXV0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1pbnRlcmNlcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL21vY2stY2xpZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1wb29sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svcGx1cmFsaXplci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL3BlbmRpbmctaW50ZXJjZXB0b3JzLWZvcm1hdHRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL21vY2stYWdlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvcHJveHktYWdlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaGFuZGxlci9SZXRyeUhhbmRsZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZ2xvYmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2hhbmRsZXIvRGVjb3JhdG9ySGFuZGxlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9mZXRjaC9oZWFkZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL3Jlc3BvbnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL3JlcXVlc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmlsZWFwaS9zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZpbGVhcGkvcHJvZ3Jlc3NldmVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9maWxlYXBpL2VuY29kaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZpbGVhcGkvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9maWxlYXBpL2ZpbGVyZWFkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY2FjaGUvc3ltYm9scy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jYWNoZS91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NhY2hlL2NhY2hlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NhY2hlL2NhY2hlc3RvcmFnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb29raWVzL2NvbnN0YW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb29raWVzL3V0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29va2llcy9wYXJzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb29raWVzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYnNvY2tldC9jb25zdGFudHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2Vic29ja2V0L3N5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2Vic29ja2V0L2V2ZW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWJzb2NrZXQvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWJzb2NrZXQvY29ubmVjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWJzb2NrZXQvZnJhbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2Vic29ja2V0L3JlY2VpdmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYnNvY2tldC93ZWJzb2NrZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvaHR0cC1jbGllbnQvbGliL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9odHRwLWNsaWVudC9saWIvYXV0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9saWIvb2lkYy11dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9saWIvc3VtbWFyeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9saWIvcGF0aC11dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvaW8vbGliL2lvLXV0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2lvL2xpYi9pby5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvZXhlYy9saWIvdG9vbHJ1bm5lci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvZXhlYy9saWIvZXhlYy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9saWIvcGxhdGZvcm0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2NvcmUvbGliL2NvcmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2dpdGh1Yi9saWIvY29udGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvZ2l0aHViL2xpYi9pbnRlcm5hbC91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5pdmVyc2FsLXVzZXItYWdlbnQvZGlzdC1ub2RlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9iZWZvcmUtYWZ0ZXItaG9vay9saWIvcmVnaXN0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2JlZm9yZS1hZnRlci1ob29rL2xpYi9hZGQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2JlZm9yZS1hZnRlci1ob29rL2xpYi9yZW1vdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2JlZm9yZS1hZnRlci1ob29rL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9naXRodWIvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2NvcmUvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3JlcXVlc3Qvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2VuZHBvaW50L2Rpc3Qtbm9kZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvZGVwcmVjYXRpb24vZGlzdC1ub2RlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy93cmFwcHkvd3JhcHB5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9vbmNlL29uY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3JlcXVlc3QtZXJyb3IvZGlzdC1ub2RlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9naXRodWIvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2NvcmUvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3JlcXVlc3QvZGlzdC1ub2RlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9naXRodWIvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2NvcmUvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2dyYXBocWwvZGlzdC1ub2RlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9naXRodWIvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2NvcmUvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2F1dGgtdG9rZW4vZGlzdC1ub2RlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9naXRodWIvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2NvcmUvZGlzdC1ub2RlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9wbHVnaW4tcmVzdC1lbmRwb2ludC1tZXRob2RzL2Rpc3Qtbm9kZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQG9jdG9raXQvcGx1Z2luLXBhZ2luYXRlLXJlc3QvZGlzdC1ub2RlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9naXRodWIvbGliL3V0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9naXRodWIvbGliL2dpdGh1Yi5qcyIsICJzcmMvam9icy9tYWluLnRzIiwgInNyYy9jb25zdGFudHMudHMiLCAic3JjL2NvbmZpZ3MudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBXZSB1c2UgYW55IGFzIGEgdmFsaWQgaW5wdXQgdHlwZVxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50b0NvbW1hbmRQcm9wZXJ0aWVzID0gZXhwb3J0cy50b0NvbW1hbmRWYWx1ZSA9IHZvaWQgMDtcbi8qKlxuICogU2FuaXRpemVzIGFuIGlucHV0IGludG8gYSBzdHJpbmcgc28gaXQgY2FuIGJlIHBhc3NlZCBpbnRvIGlzc3VlQ29tbWFuZCBzYWZlbHlcbiAqIEBwYXJhbSBpbnB1dCBpbnB1dCB0byBzYW5pdGl6ZSBpbnRvIGEgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIHRvQ29tbWFuZFZhbHVlKGlucHV0KSB7XG4gICAgaWYgKGlucHV0ID09PSBudWxsIHx8IGlucHV0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnIHx8IGlucHV0IGluc3RhbmNlb2YgU3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBpbnB1dDtcbiAgICB9XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGlucHV0KTtcbn1cbmV4cG9ydHMudG9Db21tYW5kVmFsdWUgPSB0b0NvbW1hbmRWYWx1ZTtcbi8qKlxuICpcbiAqIEBwYXJhbSBhbm5vdGF0aW9uUHJvcGVydGllc1xuICogQHJldHVybnMgVGhlIGNvbW1hbmQgcHJvcGVydGllcyB0byBzZW5kIHdpdGggdGhlIGFjdHVhbCBhbm5vdGF0aW9uIGNvbW1hbmRcbiAqIFNlZSBJc3N1ZUNvbW1hbmRQcm9wZXJ0aWVzOiBodHRwczovL2dpdGh1Yi5jb20vYWN0aW9ucy9ydW5uZXIvYmxvYi9tYWluL3NyYy9SdW5uZXIuV29ya2VyL0FjdGlvbkNvbW1hbmRNYW5hZ2VyLmNzI0w2NDZcbiAqL1xuZnVuY3Rpb24gdG9Db21tYW5kUHJvcGVydGllcyhhbm5vdGF0aW9uUHJvcGVydGllcykge1xuICAgIGlmICghT2JqZWN0LmtleXMoYW5ub3RhdGlvblByb3BlcnRpZXMpLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHRpdGxlOiBhbm5vdGF0aW9uUHJvcGVydGllcy50aXRsZSxcbiAgICAgICAgZmlsZTogYW5ub3RhdGlvblByb3BlcnRpZXMuZmlsZSxcbiAgICAgICAgbGluZTogYW5ub3RhdGlvblByb3BlcnRpZXMuc3RhcnRMaW5lLFxuICAgICAgICBlbmRMaW5lOiBhbm5vdGF0aW9uUHJvcGVydGllcy5lbmRMaW5lLFxuICAgICAgICBjb2w6IGFubm90YXRpb25Qcm9wZXJ0aWVzLnN0YXJ0Q29sdW1uLFxuICAgICAgICBlbmRDb2x1bW46IGFubm90YXRpb25Qcm9wZXJ0aWVzLmVuZENvbHVtblxuICAgIH07XG59XG5leHBvcnRzLnRvQ29tbWFuZFByb3BlcnRpZXMgPSB0b0NvbW1hbmRQcm9wZXJ0aWVzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbHMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc3N1ZSA9IGV4cG9ydHMuaXNzdWVDb21tYW5kID0gdm9pZCAwO1xuY29uc3Qgb3MgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIm9zXCIpKTtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi91dGlsc1wiKTtcbi8qKlxuICogQ29tbWFuZHNcbiAqXG4gKiBDb21tYW5kIEZvcm1hdDpcbiAqICAgOjpuYW1lIGtleT12YWx1ZSxrZXk9dmFsdWU6Om1lc3NhZ2VcbiAqXG4gKiBFeGFtcGxlczpcbiAqICAgOjp3YXJuaW5nOjpUaGlzIGlzIHRoZSBtZXNzYWdlXG4gKiAgIDo6c2V0LWVudiBuYW1lPU1ZX1ZBUjo6c29tZSB2YWx1ZVxuICovXG5mdW5jdGlvbiBpc3N1ZUNvbW1hbmQoY29tbWFuZCwgcHJvcGVydGllcywgbWVzc2FnZSkge1xuICAgIGNvbnN0IGNtZCA9IG5ldyBDb21tYW5kKGNvbW1hbmQsIHByb3BlcnRpZXMsIG1lc3NhZ2UpO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGNtZC50b1N0cmluZygpICsgb3MuRU9MKTtcbn1cbmV4cG9ydHMuaXNzdWVDb21tYW5kID0gaXNzdWVDb21tYW5kO1xuZnVuY3Rpb24gaXNzdWUobmFtZSwgbWVzc2FnZSA9ICcnKSB7XG4gICAgaXNzdWVDb21tYW5kKG5hbWUsIHt9LCBtZXNzYWdlKTtcbn1cbmV4cG9ydHMuaXNzdWUgPSBpc3N1ZTtcbmNvbnN0IENNRF9TVFJJTkcgPSAnOjonO1xuY2xhc3MgQ29tbWFuZCB7XG4gICAgY29uc3RydWN0b3IoY29tbWFuZCwgcHJvcGVydGllcywgbWVzc2FnZSkge1xuICAgICAgICBpZiAoIWNvbW1hbmQpIHtcbiAgICAgICAgICAgIGNvbW1hbmQgPSAnbWlzc2luZy5jb21tYW5kJztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbW1hbmQgPSBjb21tYW5kO1xuICAgICAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIH1cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgbGV0IGNtZFN0ciA9IENNRF9TVFJJTkcgKyB0aGlzLmNvbW1hbmQ7XG4gICAgICAgIGlmICh0aGlzLnByb3BlcnRpZXMgJiYgT2JqZWN0LmtleXModGhpcy5wcm9wZXJ0aWVzKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjbWRTdHIgKz0gJyAnO1xuICAgICAgICAgICAgbGV0IGZpcnN0ID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMucHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWwgPSB0aGlzLnByb3BlcnRpZXNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZFN0ciArPSAnLCc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjbWRTdHIgKz0gYCR7a2V5fT0ke2VzY2FwZVByb3BlcnR5KHZhbCl9YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjbWRTdHIgKz0gYCR7Q01EX1NUUklOR30ke2VzY2FwZURhdGEodGhpcy5tZXNzYWdlKX1gO1xuICAgICAgICByZXR1cm4gY21kU3RyO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGVzY2FwZURhdGEocykge1xuICAgIHJldHVybiAoMCwgdXRpbHNfMS50b0NvbW1hbmRWYWx1ZSkocylcbiAgICAgICAgLnJlcGxhY2UoLyUvZywgJyUyNScpXG4gICAgICAgIC5yZXBsYWNlKC9cXHIvZywgJyUwRCcpXG4gICAgICAgIC5yZXBsYWNlKC9cXG4vZywgJyUwQScpO1xufVxuZnVuY3Rpb24gZXNjYXBlUHJvcGVydHkocykge1xuICAgIHJldHVybiAoMCwgdXRpbHNfMS50b0NvbW1hbmRWYWx1ZSkocylcbiAgICAgICAgLnJlcGxhY2UoLyUvZywgJyUyNScpXG4gICAgICAgIC5yZXBsYWNlKC9cXHIvZywgJyUwRCcpXG4gICAgICAgIC5yZXBsYWNlKC9cXG4vZywgJyUwQScpXG4gICAgICAgIC5yZXBsYWNlKC86L2csICclM0EnKVxuICAgICAgICAucmVwbGFjZSgvLC9nLCAnJTJDJyk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb21tYW5kLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBGb3IgaW50ZXJuYWwgdXNlLCBzdWJqZWN0IHRvIGNoYW5nZS5cbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5wcmVwYXJlS2V5VmFsdWVNZXNzYWdlID0gZXhwb3J0cy5pc3N1ZUZpbGVDb21tYW5kID0gdm9pZCAwO1xuLy8gV2UgdXNlIGFueSBhcyBhIHZhbGlkIGlucHV0IHR5cGVcbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmNvbnN0IGNyeXB0byA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiY3J5cHRvXCIpKTtcbmNvbnN0IGZzID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJmc1wiKSk7XG5jb25zdCBvcyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwib3NcIikpO1xuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoXCIuL3V0aWxzXCIpO1xuZnVuY3Rpb24gaXNzdWVGaWxlQ29tbWFuZChjb21tYW5kLCBtZXNzYWdlKSB7XG4gICAgY29uc3QgZmlsZVBhdGggPSBwcm9jZXNzLmVudltgR0lUSFVCXyR7Y29tbWFuZH1gXTtcbiAgICBpZiAoIWZpbGVQYXRoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGZpbmQgZW52aXJvbm1lbnQgdmFyaWFibGUgZm9yIGZpbGUgY29tbWFuZCAke2NvbW1hbmR9YCk7XG4gICAgfVxuICAgIGlmICghZnMuZXhpc3RzU3luYyhmaWxlUGF0aCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIGZpbGUgYXQgcGF0aDogJHtmaWxlUGF0aH1gKTtcbiAgICB9XG4gICAgZnMuYXBwZW5kRmlsZVN5bmMoZmlsZVBhdGgsIGAkeygwLCB1dGlsc18xLnRvQ29tbWFuZFZhbHVlKShtZXNzYWdlKX0ke29zLkVPTH1gLCB7XG4gICAgICAgIGVuY29kaW5nOiAndXRmOCdcbiAgICB9KTtcbn1cbmV4cG9ydHMuaXNzdWVGaWxlQ29tbWFuZCA9IGlzc3VlRmlsZUNvbW1hbmQ7XG5mdW5jdGlvbiBwcmVwYXJlS2V5VmFsdWVNZXNzYWdlKGtleSwgdmFsdWUpIHtcbiAgICBjb25zdCBkZWxpbWl0ZXIgPSBgZ2hhZGVsaW1pdGVyXyR7Y3J5cHRvLnJhbmRvbVVVSUQoKX1gO1xuICAgIGNvbnN0IGNvbnZlcnRlZFZhbHVlID0gKDAsIHV0aWxzXzEudG9Db21tYW5kVmFsdWUpKHZhbHVlKTtcbiAgICAvLyBUaGVzZSBzaG91bGQgcmVhbGlzdGljYWxseSBuZXZlciBoYXBwZW4sIGJ1dCBqdXN0IGluIGNhc2Ugc29tZW9uZSBmaW5kcyBhXG4gICAgLy8gd2F5IHRvIGV4cGxvaXQgdXVpZCBnZW5lcmF0aW9uIGxldCdzIG5vdCBhbGxvdyBrZXlzIG9yIHZhbHVlcyB0aGF0IGNvbnRhaW5cbiAgICAvLyB0aGUgZGVsaW1pdGVyLlxuICAgIGlmIChrZXkuaW5jbHVkZXMoZGVsaW1pdGVyKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgaW5wdXQ6IG5hbWUgc2hvdWxkIG5vdCBjb250YWluIHRoZSBkZWxpbWl0ZXIgXCIke2RlbGltaXRlcn1cImApO1xuICAgIH1cbiAgICBpZiAoY29udmVydGVkVmFsdWUuaW5jbHVkZXMoZGVsaW1pdGVyKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgaW5wdXQ6IHZhbHVlIHNob3VsZCBub3QgY29udGFpbiB0aGUgZGVsaW1pdGVyIFwiJHtkZWxpbWl0ZXJ9XCJgKTtcbiAgICB9XG4gICAgcmV0dXJuIGAke2tleX08PCR7ZGVsaW1pdGVyfSR7b3MuRU9MfSR7Y29udmVydGVkVmFsdWV9JHtvcy5FT0x9JHtkZWxpbWl0ZXJ9YDtcbn1cbmV4cG9ydHMucHJlcGFyZUtleVZhbHVlTWVzc2FnZSA9IHByZXBhcmVLZXlWYWx1ZU1lc3NhZ2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1maWxlLWNvbW1hbmQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY2hlY2tCeXBhc3MgPSBleHBvcnRzLmdldFByb3h5VXJsID0gdm9pZCAwO1xuZnVuY3Rpb24gZ2V0UHJveHlVcmwocmVxVXJsKSB7XG4gICAgY29uc3QgdXNpbmdTc2wgPSByZXFVcmwucHJvdG9jb2wgPT09ICdodHRwczonO1xuICAgIGlmIChjaGVja0J5cGFzcyhyZXFVcmwpKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IHByb3h5VmFyID0gKCgpID0+IHtcbiAgICAgICAgaWYgKHVzaW5nU3NsKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvY2Vzcy5lbnZbJ2h0dHBzX3Byb3h5J10gfHwgcHJvY2Vzcy5lbnZbJ0hUVFBTX1BST1hZJ107XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvY2Vzcy5lbnZbJ2h0dHBfcHJveHknXSB8fCBwcm9jZXNzLmVudlsnSFRUUF9QUk9YWSddO1xuICAgICAgICB9XG4gICAgfSkoKTtcbiAgICBpZiAocHJveHlWYXIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGVjb2RlZFVSTChwcm94eVZhcik7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgICAgICBpZiAoIXByb3h5VmFyLnN0YXJ0c1dpdGgoJ2h0dHA6Ly8nKSAmJiAhcHJveHlWYXIuc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERlY29kZWRVUkwoYGh0dHA6Ly8ke3Byb3h5VmFyfWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbn1cbmV4cG9ydHMuZ2V0UHJveHlVcmwgPSBnZXRQcm94eVVybDtcbmZ1bmN0aW9uIGNoZWNrQnlwYXNzKHJlcVVybCkge1xuICAgIGlmICghcmVxVXJsLmhvc3RuYW1lKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgcmVxSG9zdCA9IHJlcVVybC5ob3N0bmFtZTtcbiAgICBpZiAoaXNMb29wYmFja0FkZHJlc3MocmVxSG9zdCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IG5vUHJveHkgPSBwcm9jZXNzLmVudlsnbm9fcHJveHknXSB8fCBwcm9jZXNzLmVudlsnTk9fUFJPWFknXSB8fCAnJztcbiAgICBpZiAoIW5vUHJveHkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBEZXRlcm1pbmUgdGhlIHJlcXVlc3QgcG9ydFxuICAgIGxldCByZXFQb3J0O1xuICAgIGlmIChyZXFVcmwucG9ydCkge1xuICAgICAgICByZXFQb3J0ID0gTnVtYmVyKHJlcVVybC5wb3J0KTtcbiAgICB9XG4gICAgZWxzZSBpZiAocmVxVXJsLnByb3RvY29sID09PSAnaHR0cDonKSB7XG4gICAgICAgIHJlcVBvcnQgPSA4MDtcbiAgICB9XG4gICAgZWxzZSBpZiAocmVxVXJsLnByb3RvY29sID09PSAnaHR0cHM6Jykge1xuICAgICAgICByZXFQb3J0ID0gNDQzO1xuICAgIH1cbiAgICAvLyBGb3JtYXQgdGhlIHJlcXVlc3QgaG9zdG5hbWUgYW5kIGhvc3RuYW1lIHdpdGggcG9ydFxuICAgIGNvbnN0IHVwcGVyUmVxSG9zdHMgPSBbcmVxVXJsLmhvc3RuYW1lLnRvVXBwZXJDYXNlKCldO1xuICAgIGlmICh0eXBlb2YgcmVxUG9ydCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgdXBwZXJSZXFIb3N0cy5wdXNoKGAke3VwcGVyUmVxSG9zdHNbMF19OiR7cmVxUG9ydH1gKTtcbiAgICB9XG4gICAgLy8gQ29tcGFyZSByZXF1ZXN0IGhvc3QgYWdhaW5zdCBub3Byb3h5XG4gICAgZm9yIChjb25zdCB1cHBlck5vUHJveHlJdGVtIG9mIG5vUHJveHlcbiAgICAgICAgLnNwbGl0KCcsJylcbiAgICAgICAgLm1hcCh4ID0+IHgudHJpbSgpLnRvVXBwZXJDYXNlKCkpXG4gICAgICAgIC5maWx0ZXIoeCA9PiB4KSkge1xuICAgICAgICBpZiAodXBwZXJOb1Byb3h5SXRlbSA9PT0gJyonIHx8XG4gICAgICAgICAgICB1cHBlclJlcUhvc3RzLnNvbWUoeCA9PiB4ID09PSB1cHBlck5vUHJveHlJdGVtIHx8XG4gICAgICAgICAgICAgICAgeC5lbmRzV2l0aChgLiR7dXBwZXJOb1Byb3h5SXRlbX1gKSB8fFxuICAgICAgICAgICAgICAgICh1cHBlck5vUHJveHlJdGVtLnN0YXJ0c1dpdGgoJy4nKSAmJlxuICAgICAgICAgICAgICAgICAgICB4LmVuZHNXaXRoKGAke3VwcGVyTm9Qcm94eUl0ZW19YCkpKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZXhwb3J0cy5jaGVja0J5cGFzcyA9IGNoZWNrQnlwYXNzO1xuZnVuY3Rpb24gaXNMb29wYmFja0FkZHJlc3MoaG9zdCkge1xuICAgIGNvbnN0IGhvc3RMb3dlciA9IGhvc3QudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gKGhvc3RMb3dlciA9PT0gJ2xvY2FsaG9zdCcgfHxcbiAgICAgICAgaG9zdExvd2VyLnN0YXJ0c1dpdGgoJzEyNy4nKSB8fFxuICAgICAgICBob3N0TG93ZXIuc3RhcnRzV2l0aCgnWzo6MV0nKSB8fFxuICAgICAgICBob3N0TG93ZXIuc3RhcnRzV2l0aCgnWzA6MDowOjA6MDowOjA6MV0nKSk7XG59XG5jbGFzcyBEZWNvZGVkVVJMIGV4dGVuZHMgVVJMIHtcbiAgICBjb25zdHJ1Y3Rvcih1cmwsIGJhc2UpIHtcbiAgICAgICAgc3VwZXIodXJsLCBiYXNlKTtcbiAgICAgICAgdGhpcy5fZGVjb2RlZFVzZXJuYW1lID0gZGVjb2RlVVJJQ29tcG9uZW50KHN1cGVyLnVzZXJuYW1lKTtcbiAgICAgICAgdGhpcy5fZGVjb2RlZFBhc3N3b3JkID0gZGVjb2RlVVJJQ29tcG9uZW50KHN1cGVyLnBhc3N3b3JkKTtcbiAgICB9XG4gICAgZ2V0IHVzZXJuYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVjb2RlZFVzZXJuYW1lO1xuICAgIH1cbiAgICBnZXQgcGFzc3dvcmQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWNvZGVkUGFzc3dvcmQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cHJveHkuanMubWFwIiwKICAgICIndXNlIHN0cmljdCc7XG5cbnZhciBuZXQgPSByZXF1aXJlKCduZXQnKTtcbnZhciB0bHMgPSByZXF1aXJlKCd0bHMnKTtcbnZhciBodHRwID0gcmVxdWlyZSgnaHR0cCcpO1xudmFyIGh0dHBzID0gcmVxdWlyZSgnaHR0cHMnKTtcbnZhciBldmVudHMgPSByZXF1aXJlKCdldmVudHMnKTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKTtcbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuXG5cbmV4cG9ydHMuaHR0cE92ZXJIdHRwID0gaHR0cE92ZXJIdHRwO1xuZXhwb3J0cy5odHRwc092ZXJIdHRwID0gaHR0cHNPdmVySHR0cDtcbmV4cG9ydHMuaHR0cE92ZXJIdHRwcyA9IGh0dHBPdmVySHR0cHM7XG5leHBvcnRzLmh0dHBzT3Zlckh0dHBzID0gaHR0cHNPdmVySHR0cHM7XG5cblxuZnVuY3Rpb24gaHR0cE92ZXJIdHRwKG9wdGlvbnMpIHtcbiAgdmFyIGFnZW50ID0gbmV3IFR1bm5lbGluZ0FnZW50KG9wdGlvbnMpO1xuICBhZ2VudC5yZXF1ZXN0ID0gaHR0cC5yZXF1ZXN0O1xuICByZXR1cm4gYWdlbnQ7XG59XG5cbmZ1bmN0aW9uIGh0dHBzT3Zlckh0dHAob3B0aW9ucykge1xuICB2YXIgYWdlbnQgPSBuZXcgVHVubmVsaW5nQWdlbnQob3B0aW9ucyk7XG4gIGFnZW50LnJlcXVlc3QgPSBodHRwLnJlcXVlc3Q7XG4gIGFnZW50LmNyZWF0ZVNvY2tldCA9IGNyZWF0ZVNlY3VyZVNvY2tldDtcbiAgYWdlbnQuZGVmYXVsdFBvcnQgPSA0NDM7XG4gIHJldHVybiBhZ2VudDtcbn1cblxuZnVuY3Rpb24gaHR0cE92ZXJIdHRwcyhvcHRpb25zKSB7XG4gIHZhciBhZ2VudCA9IG5ldyBUdW5uZWxpbmdBZ2VudChvcHRpb25zKTtcbiAgYWdlbnQucmVxdWVzdCA9IGh0dHBzLnJlcXVlc3Q7XG4gIHJldHVybiBhZ2VudDtcbn1cblxuZnVuY3Rpb24gaHR0cHNPdmVySHR0cHMob3B0aW9ucykge1xuICB2YXIgYWdlbnQgPSBuZXcgVHVubmVsaW5nQWdlbnQob3B0aW9ucyk7XG4gIGFnZW50LnJlcXVlc3QgPSBodHRwcy5yZXF1ZXN0O1xuICBhZ2VudC5jcmVhdGVTb2NrZXQgPSBjcmVhdGVTZWN1cmVTb2NrZXQ7XG4gIGFnZW50LmRlZmF1bHRQb3J0ID0gNDQzO1xuICByZXR1cm4gYWdlbnQ7XG59XG5cblxuZnVuY3Rpb24gVHVubmVsaW5nQWdlbnQob3B0aW9ucykge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHNlbGYub3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIHNlbGYucHJveHlPcHRpb25zID0gc2VsZi5vcHRpb25zLnByb3h5IHx8IHt9O1xuICBzZWxmLm1heFNvY2tldHMgPSBzZWxmLm9wdGlvbnMubWF4U29ja2V0cyB8fCBodHRwLkFnZW50LmRlZmF1bHRNYXhTb2NrZXRzO1xuICBzZWxmLnJlcXVlc3RzID0gW107XG4gIHNlbGYuc29ja2V0cyA9IFtdO1xuXG4gIHNlbGYub24oJ2ZyZWUnLCBmdW5jdGlvbiBvbkZyZWUoc29ja2V0LCBob3N0LCBwb3J0LCBsb2NhbEFkZHJlc3MpIHtcbiAgICB2YXIgb3B0aW9ucyA9IHRvT3B0aW9ucyhob3N0LCBwb3J0LCBsb2NhbEFkZHJlc3MpO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBzZWxmLnJlcXVlc3RzLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICB2YXIgcGVuZGluZyA9IHNlbGYucmVxdWVzdHNbaV07XG4gICAgICBpZiAocGVuZGluZy5ob3N0ID09PSBvcHRpb25zLmhvc3QgJiYgcGVuZGluZy5wb3J0ID09PSBvcHRpb25zLnBvcnQpIHtcbiAgICAgICAgLy8gRGV0ZWN0IHRoZSByZXF1ZXN0IHRvIGNvbm5lY3Qgc2FtZSBvcmlnaW4gc2VydmVyLFxuICAgICAgICAvLyByZXVzZSB0aGUgY29ubmVjdGlvbi5cbiAgICAgICAgc2VsZi5yZXF1ZXN0cy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIHBlbmRpbmcucmVxdWVzdC5vblNvY2tldChzb2NrZXQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIHNvY2tldC5kZXN0cm95KCk7XG4gICAgc2VsZi5yZW1vdmVTb2NrZXQoc29ja2V0KTtcbiAgfSk7XG59XG51dGlsLmluaGVyaXRzKFR1bm5lbGluZ0FnZW50LCBldmVudHMuRXZlbnRFbWl0dGVyKTtcblxuVHVubmVsaW5nQWdlbnQucHJvdG90eXBlLmFkZFJlcXVlc3QgPSBmdW5jdGlvbiBhZGRSZXF1ZXN0KHJlcSwgaG9zdCwgcG9ydCwgbG9jYWxBZGRyZXNzKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIG9wdGlvbnMgPSBtZXJnZU9wdGlvbnMoe3JlcXVlc3Q6IHJlcX0sIHNlbGYub3B0aW9ucywgdG9PcHRpb25zKGhvc3QsIHBvcnQsIGxvY2FsQWRkcmVzcykpO1xuXG4gIGlmIChzZWxmLnNvY2tldHMubGVuZ3RoID49IHRoaXMubWF4U29ja2V0cykge1xuICAgIC8vIFdlIGFyZSBvdmVyIGxpbWl0IHNvIHdlJ2xsIGFkZCBpdCB0byB0aGUgcXVldWUuXG4gICAgc2VsZi5yZXF1ZXN0cy5wdXNoKG9wdGlvbnMpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIElmIHdlIGFyZSB1bmRlciBtYXhTb2NrZXRzIGNyZWF0ZSBhIG5ldyBvbmUuXG4gIHNlbGYuY3JlYXRlU29ja2V0KG9wdGlvbnMsIGZ1bmN0aW9uKHNvY2tldCkge1xuICAgIHNvY2tldC5vbignZnJlZScsIG9uRnJlZSk7XG4gICAgc29ja2V0Lm9uKCdjbG9zZScsIG9uQ2xvc2VPclJlbW92ZSk7XG4gICAgc29ja2V0Lm9uKCdhZ2VudFJlbW92ZScsIG9uQ2xvc2VPclJlbW92ZSk7XG4gICAgcmVxLm9uU29ja2V0KHNvY2tldCk7XG5cbiAgICBmdW5jdGlvbiBvbkZyZWUoKSB7XG4gICAgICBzZWxmLmVtaXQoJ2ZyZWUnLCBzb2NrZXQsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9uQ2xvc2VPclJlbW92ZShlcnIpIHtcbiAgICAgIHNlbGYucmVtb3ZlU29ja2V0KHNvY2tldCk7XG4gICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ2ZyZWUnLCBvbkZyZWUpO1xuICAgICAgc29ja2V0LnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uQ2xvc2VPclJlbW92ZSk7XG4gICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ2FnZW50UmVtb3ZlJywgb25DbG9zZU9yUmVtb3ZlKTtcbiAgICB9XG4gIH0pO1xufTtcblxuVHVubmVsaW5nQWdlbnQucHJvdG90eXBlLmNyZWF0ZVNvY2tldCA9IGZ1bmN0aW9uIGNyZWF0ZVNvY2tldChvcHRpb25zLCBjYikge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciBwbGFjZWhvbGRlciA9IHt9O1xuICBzZWxmLnNvY2tldHMucHVzaChwbGFjZWhvbGRlcik7XG5cbiAgdmFyIGNvbm5lY3RPcHRpb25zID0gbWVyZ2VPcHRpb25zKHt9LCBzZWxmLnByb3h5T3B0aW9ucywge1xuICAgIG1ldGhvZDogJ0NPTk5FQ1QnLFxuICAgIHBhdGg6IG9wdGlvbnMuaG9zdCArICc6JyArIG9wdGlvbnMucG9ydCxcbiAgICBhZ2VudDogZmFsc2UsXG4gICAgaGVhZGVyczoge1xuICAgICAgaG9zdDogb3B0aW9ucy5ob3N0ICsgJzonICsgb3B0aW9ucy5wb3J0XG4gICAgfVxuICB9KTtcbiAgaWYgKG9wdGlvbnMubG9jYWxBZGRyZXNzKSB7XG4gICAgY29ubmVjdE9wdGlvbnMubG9jYWxBZGRyZXNzID0gb3B0aW9ucy5sb2NhbEFkZHJlc3M7XG4gIH1cbiAgaWYgKGNvbm5lY3RPcHRpb25zLnByb3h5QXV0aCkge1xuICAgIGNvbm5lY3RPcHRpb25zLmhlYWRlcnMgPSBjb25uZWN0T3B0aW9ucy5oZWFkZXJzIHx8IHt9O1xuICAgIGNvbm5lY3RPcHRpb25zLmhlYWRlcnNbJ1Byb3h5LUF1dGhvcml6YXRpb24nXSA9ICdCYXNpYyAnICtcbiAgICAgICAgbmV3IEJ1ZmZlcihjb25uZWN0T3B0aW9ucy5wcm94eUF1dGgpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgfVxuXG4gIGRlYnVnKCdtYWtpbmcgQ09OTkVDVCByZXF1ZXN0Jyk7XG4gIHZhciBjb25uZWN0UmVxID0gc2VsZi5yZXF1ZXN0KGNvbm5lY3RPcHRpb25zKTtcbiAgY29ubmVjdFJlcS51c2VDaHVua2VkRW5jb2RpbmdCeURlZmF1bHQgPSBmYWxzZTsgLy8gZm9yIHYwLjZcbiAgY29ubmVjdFJlcS5vbmNlKCdyZXNwb25zZScsIG9uUmVzcG9uc2UpOyAvLyBmb3IgdjAuNlxuICBjb25uZWN0UmVxLm9uY2UoJ3VwZ3JhZGUnLCBvblVwZ3JhZGUpOyAgIC8vIGZvciB2MC42XG4gIGNvbm5lY3RSZXEub25jZSgnY29ubmVjdCcsIG9uQ29ubmVjdCk7ICAgLy8gZm9yIHYwLjcgb3IgbGF0ZXJcbiAgY29ubmVjdFJlcS5vbmNlKCdlcnJvcicsIG9uRXJyb3IpO1xuICBjb25uZWN0UmVxLmVuZCgpO1xuXG4gIGZ1bmN0aW9uIG9uUmVzcG9uc2UocmVzKSB7XG4gICAgLy8gVmVyeSBoYWNreS4gVGhpcyBpcyBuZWNlc3NhcnkgdG8gYXZvaWQgaHR0cC1wYXJzZXIgbGVha3MuXG4gICAgcmVzLnVwZ3JhZGUgPSB0cnVlO1xuICB9XG5cbiAgZnVuY3Rpb24gb25VcGdyYWRlKHJlcywgc29ja2V0LCBoZWFkKSB7XG4gICAgLy8gSGFja3kuXG4gICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbigpIHtcbiAgICAgIG9uQ29ubmVjdChyZXMsIHNvY2tldCwgaGVhZCk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBvbkNvbm5lY3QocmVzLCBzb2NrZXQsIGhlYWQpIHtcbiAgICBjb25uZWN0UmVxLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgIHNvY2tldC5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcblxuICAgIGlmIChyZXMuc3RhdHVzQ29kZSAhPT0gMjAwKSB7XG4gICAgICBkZWJ1ZygndHVubmVsaW5nIHNvY2tldCBjb3VsZCBub3QgYmUgZXN0YWJsaXNoZWQsIHN0YXR1c0NvZGU9JWQnLFxuICAgICAgICByZXMuc3RhdHVzQ29kZSk7XG4gICAgICBzb2NrZXQuZGVzdHJveSgpO1xuICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKCd0dW5uZWxpbmcgc29ja2V0IGNvdWxkIG5vdCBiZSBlc3RhYmxpc2hlZCwgJyArXG4gICAgICAgICdzdGF0dXNDb2RlPScgKyByZXMuc3RhdHVzQ29kZSk7XG4gICAgICBlcnJvci5jb2RlID0gJ0VDT05OUkVTRVQnO1xuICAgICAgb3B0aW9ucy5yZXF1ZXN0LmVtaXQoJ2Vycm9yJywgZXJyb3IpO1xuICAgICAgc2VsZi5yZW1vdmVTb2NrZXQocGxhY2Vob2xkZXIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaGVhZC5sZW5ndGggPiAwKSB7XG4gICAgICBkZWJ1ZygnZ290IGlsbGVnYWwgcmVzcG9uc2UgYm9keSBmcm9tIHByb3h5Jyk7XG4gICAgICBzb2NrZXQuZGVzdHJveSgpO1xuICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKCdnb3QgaWxsZWdhbCByZXNwb25zZSBib2R5IGZyb20gcHJveHknKTtcbiAgICAgIGVycm9yLmNvZGUgPSAnRUNPTk5SRVNFVCc7XG4gICAgICBvcHRpb25zLnJlcXVlc3QuZW1pdCgnZXJyb3InLCBlcnJvcik7XG4gICAgICBzZWxmLnJlbW92ZVNvY2tldChwbGFjZWhvbGRlcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGRlYnVnKCd0dW5uZWxpbmcgY29ubmVjdGlvbiBoYXMgZXN0YWJsaXNoZWQnKTtcbiAgICBzZWxmLnNvY2tldHNbc2VsZi5zb2NrZXRzLmluZGV4T2YocGxhY2Vob2xkZXIpXSA9IHNvY2tldDtcbiAgICByZXR1cm4gY2Ioc29ja2V0KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uRXJyb3IoY2F1c2UpIHtcbiAgICBjb25uZWN0UmVxLnJlbW92ZUFsbExpc3RlbmVycygpO1xuXG4gICAgZGVidWcoJ3R1bm5lbGluZyBzb2NrZXQgY291bGQgbm90IGJlIGVzdGFibGlzaGVkLCBjYXVzZT0lc1xcbicsXG4gICAgICAgICAgY2F1c2UubWVzc2FnZSwgY2F1c2Uuc3RhY2spO1xuICAgIHZhciBlcnJvciA9IG5ldyBFcnJvcigndHVubmVsaW5nIHNvY2tldCBjb3VsZCBub3QgYmUgZXN0YWJsaXNoZWQsICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnY2F1c2U9JyArIGNhdXNlLm1lc3NhZ2UpO1xuICAgIGVycm9yLmNvZGUgPSAnRUNPTk5SRVNFVCc7XG4gICAgb3B0aW9ucy5yZXF1ZXN0LmVtaXQoJ2Vycm9yJywgZXJyb3IpO1xuICAgIHNlbGYucmVtb3ZlU29ja2V0KHBsYWNlaG9sZGVyKTtcbiAgfVxufTtcblxuVHVubmVsaW5nQWdlbnQucHJvdG90eXBlLnJlbW92ZVNvY2tldCA9IGZ1bmN0aW9uIHJlbW92ZVNvY2tldChzb2NrZXQpIHtcbiAgdmFyIHBvcyA9IHRoaXMuc29ja2V0cy5pbmRleE9mKHNvY2tldClcbiAgaWYgKHBvcyA9PT0gLTEpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdGhpcy5zb2NrZXRzLnNwbGljZShwb3MsIDEpO1xuXG4gIHZhciBwZW5kaW5nID0gdGhpcy5yZXF1ZXN0cy5zaGlmdCgpO1xuICBpZiAocGVuZGluZykge1xuICAgIC8vIElmIHdlIGhhdmUgcGVuZGluZyByZXF1ZXN0cyBhbmQgYSBzb2NrZXQgZ2V0cyBjbG9zZWQgYSBuZXcgb25lXG4gICAgLy8gbmVlZHMgdG8gYmUgY3JlYXRlZCB0byB0YWtlIG92ZXIgaW4gdGhlIHBvb2wgZm9yIHRoZSBvbmUgdGhhdCBjbG9zZWQuXG4gICAgdGhpcy5jcmVhdGVTb2NrZXQocGVuZGluZywgZnVuY3Rpb24oc29ja2V0KSB7XG4gICAgICBwZW5kaW5nLnJlcXVlc3Qub25Tb2NrZXQoc29ja2V0KTtcbiAgICB9KTtcbiAgfVxufTtcblxuZnVuY3Rpb24gY3JlYXRlU2VjdXJlU29ja2V0KG9wdGlvbnMsIGNiKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgVHVubmVsaW5nQWdlbnQucHJvdG90eXBlLmNyZWF0ZVNvY2tldC5jYWxsKHNlbGYsIG9wdGlvbnMsIGZ1bmN0aW9uKHNvY2tldCkge1xuICAgIHZhciBob3N0SGVhZGVyID0gb3B0aW9ucy5yZXF1ZXN0LmdldEhlYWRlcignaG9zdCcpO1xuICAgIHZhciB0bHNPcHRpb25zID0gbWVyZ2VPcHRpb25zKHt9LCBzZWxmLm9wdGlvbnMsIHtcbiAgICAgIHNvY2tldDogc29ja2V0LFxuICAgICAgc2VydmVybmFtZTogaG9zdEhlYWRlciA/IGhvc3RIZWFkZXIucmVwbGFjZSgvOi4qJC8sICcnKSA6IG9wdGlvbnMuaG9zdFxuICAgIH0pO1xuXG4gICAgLy8gMCBpcyBkdW1teSBwb3J0IGZvciB2MC42XG4gICAgdmFyIHNlY3VyZVNvY2tldCA9IHRscy5jb25uZWN0KDAsIHRsc09wdGlvbnMpO1xuICAgIHNlbGYuc29ja2V0c1tzZWxmLnNvY2tldHMuaW5kZXhPZihzb2NrZXQpXSA9IHNlY3VyZVNvY2tldDtcbiAgICBjYihzZWN1cmVTb2NrZXQpO1xuICB9KTtcbn1cblxuXG5mdW5jdGlvbiB0b09wdGlvbnMoaG9zdCwgcG9ydCwgbG9jYWxBZGRyZXNzKSB7XG4gIGlmICh0eXBlb2YgaG9zdCA9PT0gJ3N0cmluZycpIHsgLy8gc2luY2UgdjAuMTBcbiAgICByZXR1cm4ge1xuICAgICAgaG9zdDogaG9zdCxcbiAgICAgIHBvcnQ6IHBvcnQsXG4gICAgICBsb2NhbEFkZHJlc3M6IGxvY2FsQWRkcmVzc1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIGhvc3Q7IC8vIGZvciB2MC4xMSBvciBsYXRlclxufVxuXG5mdW5jdGlvbiBtZXJnZU9wdGlvbnModGFyZ2V0KSB7XG4gIGZvciAodmFyIGkgPSAxLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICB2YXIgb3ZlcnJpZGVzID0gYXJndW1lbnRzW2ldO1xuICAgIGlmICh0eXBlb2Ygb3ZlcnJpZGVzID09PSAnb2JqZWN0Jykge1xuICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvdmVycmlkZXMpO1xuICAgICAgZm9yICh2YXIgaiA9IDAsIGtleUxlbiA9IGtleXMubGVuZ3RoOyBqIDwga2V5TGVuOyArK2opIHtcbiAgICAgICAgdmFyIGsgPSBrZXlzW2pdO1xuICAgICAgICBpZiAob3ZlcnJpZGVzW2tdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0YXJnZXRba10gPSBvdmVycmlkZXNba107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuXG52YXIgZGVidWc7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9ERUJVRyAmJiAvXFxidHVubmVsXFxiLy50ZXN0KHByb2Nlc3MuZW52Lk5PREVfREVCVUcpKSB7XG4gIGRlYnVnID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgIGlmICh0eXBlb2YgYXJnc1swXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGFyZ3NbMF0gPSAnVFVOTkVMOiAnICsgYXJnc1swXTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXJncy51bnNoaWZ0KCdUVU5ORUw6Jyk7XG4gICAgfVxuICAgIGNvbnNvbGUuZXJyb3IuYXBwbHkoY29uc29sZSwgYXJncyk7XG4gIH1cbn0gZWxzZSB7XG4gIGRlYnVnID0gZnVuY3Rpb24oKSB7fTtcbn1cbmV4cG9ydHMuZGVidWcgPSBkZWJ1ZzsgLy8gZm9yIHRlc3RcbiIsCiAgICAibW9kdWxlLmV4cG9ydHMgPSB7XG4gIGtDbG9zZTogU3ltYm9sKCdjbG9zZScpLFxuICBrRGVzdHJveTogU3ltYm9sKCdkZXN0cm95JyksXG4gIGtEaXNwYXRjaDogU3ltYm9sKCdkaXNwYXRjaCcpLFxuICBrVXJsOiBTeW1ib2woJ3VybCcpLFxuICBrV3JpdGluZzogU3ltYm9sKCd3cml0aW5nJyksXG4gIGtSZXN1bWluZzogU3ltYm9sKCdyZXN1bWluZycpLFxuICBrUXVldWU6IFN5bWJvbCgncXVldWUnKSxcbiAga0Nvbm5lY3Q6IFN5bWJvbCgnY29ubmVjdCcpLFxuICBrQ29ubmVjdGluZzogU3ltYm9sKCdjb25uZWN0aW5nJyksXG4gIGtIZWFkZXJzTGlzdDogU3ltYm9sKCdoZWFkZXJzIGxpc3QnKSxcbiAga0tlZXBBbGl2ZURlZmF1bHRUaW1lb3V0OiBTeW1ib2woJ2RlZmF1bHQga2VlcCBhbGl2ZSB0aW1lb3V0JyksXG4gIGtLZWVwQWxpdmVNYXhUaW1lb3V0OiBTeW1ib2woJ21heCBrZWVwIGFsaXZlIHRpbWVvdXQnKSxcbiAga0tlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGQ6IFN5bWJvbCgna2VlcCBhbGl2ZSB0aW1lb3V0IHRocmVzaG9sZCcpLFxuICBrS2VlcEFsaXZlVGltZW91dFZhbHVlOiBTeW1ib2woJ2tlZXAgYWxpdmUgdGltZW91dCcpLFxuICBrS2VlcEFsaXZlOiBTeW1ib2woJ2tlZXAgYWxpdmUnKSxcbiAga0hlYWRlcnNUaW1lb3V0OiBTeW1ib2woJ2hlYWRlcnMgdGltZW91dCcpLFxuICBrQm9keVRpbWVvdXQ6IFN5bWJvbCgnYm9keSB0aW1lb3V0JyksXG4gIGtTZXJ2ZXJOYW1lOiBTeW1ib2woJ3NlcnZlciBuYW1lJyksXG4gIGtMb2NhbEFkZHJlc3M6IFN5bWJvbCgnbG9jYWwgYWRkcmVzcycpLFxuICBrSG9zdDogU3ltYm9sKCdob3N0JyksXG4gIGtOb1JlZjogU3ltYm9sKCdubyByZWYnKSxcbiAga0JvZHlVc2VkOiBTeW1ib2woJ3VzZWQnKSxcbiAga1J1bm5pbmc6IFN5bWJvbCgncnVubmluZycpLFxuICBrQmxvY2tpbmc6IFN5bWJvbCgnYmxvY2tpbmcnKSxcbiAga1BlbmRpbmc6IFN5bWJvbCgncGVuZGluZycpLFxuICBrU2l6ZTogU3ltYm9sKCdzaXplJyksXG4gIGtCdXN5OiBTeW1ib2woJ2J1c3knKSxcbiAga1F1ZXVlZDogU3ltYm9sKCdxdWV1ZWQnKSxcbiAga0ZyZWU6IFN5bWJvbCgnZnJlZScpLFxuICBrQ29ubmVjdGVkOiBTeW1ib2woJ2Nvbm5lY3RlZCcpLFxuICBrQ2xvc2VkOiBTeW1ib2woJ2Nsb3NlZCcpLFxuICBrTmVlZERyYWluOiBTeW1ib2woJ25lZWQgZHJhaW4nKSxcbiAga1Jlc2V0OiBTeW1ib2woJ3Jlc2V0JyksXG4gIGtEZXN0cm95ZWQ6IFN5bWJvbC5mb3IoJ25vZGVqcy5zdHJlYW0uZGVzdHJveWVkJyksXG4gIGtNYXhIZWFkZXJzU2l6ZTogU3ltYm9sKCdtYXggaGVhZGVycyBzaXplJyksXG4gIGtSdW5uaW5nSWR4OiBTeW1ib2woJ3J1bm5pbmcgaW5kZXgnKSxcbiAga1BlbmRpbmdJZHg6IFN5bWJvbCgncGVuZGluZyBpbmRleCcpLFxuICBrRXJyb3I6IFN5bWJvbCgnZXJyb3InKSxcbiAga0NsaWVudHM6IFN5bWJvbCgnY2xpZW50cycpLFxuICBrQ2xpZW50OiBTeW1ib2woJ2NsaWVudCcpLFxuICBrUGFyc2VyOiBTeW1ib2woJ3BhcnNlcicpLFxuICBrT25EZXN0cm95ZWQ6IFN5bWJvbCgnZGVzdHJveSBjYWxsYmFja3MnKSxcbiAga1BpcGVsaW5pbmc6IFN5bWJvbCgncGlwZWxpbmluZycpLFxuICBrU29ja2V0OiBTeW1ib2woJ3NvY2tldCcpLFxuICBrSG9zdEhlYWRlcjogU3ltYm9sKCdob3N0IGhlYWRlcicpLFxuICBrQ29ubmVjdG9yOiBTeW1ib2woJ2Nvbm5lY3RvcicpLFxuICBrU3RyaWN0Q29udGVudExlbmd0aDogU3ltYm9sKCdzdHJpY3QgY29udGVudCBsZW5ndGgnKSxcbiAga01heFJlZGlyZWN0aW9uczogU3ltYm9sKCdtYXhSZWRpcmVjdGlvbnMnKSxcbiAga01heFJlcXVlc3RzOiBTeW1ib2woJ21heFJlcXVlc3RzUGVyQ2xpZW50JyksXG4gIGtQcm94eTogU3ltYm9sKCdwcm94eSBhZ2VudCBvcHRpb25zJyksXG4gIGtDb3VudGVyOiBTeW1ib2woJ3NvY2tldCByZXF1ZXN0IGNvdW50ZXInKSxcbiAga0ludGVyY2VwdG9yczogU3ltYm9sKCdkaXNwYXRjaCBpbnRlcmNlcHRvcnMnKSxcbiAga01heFJlc3BvbnNlU2l6ZTogU3ltYm9sKCdtYXggcmVzcG9uc2Ugc2l6ZScpLFxuICBrSFRUUDJTZXNzaW9uOiBTeW1ib2woJ2h0dHAyU2Vzc2lvbicpLFxuICBrSFRUUDJTZXNzaW9uU3RhdGU6IFN5bWJvbCgnaHR0cDJTZXNzaW9uIHN0YXRlJyksXG4gIGtIVFRQMkJ1aWxkUmVxdWVzdDogU3ltYm9sKCdodHRwMiBidWlsZCByZXF1ZXN0JyksXG4gIGtIVFRQMUJ1aWxkUmVxdWVzdDogU3ltYm9sKCdodHRwMSBidWlsZCByZXF1ZXN0JyksXG4gIGtIVFRQMkNvcHlIZWFkZXJzOiBTeW1ib2woJ2h0dHAyIGNvcHkgaGVhZGVycycpLFxuICBrSFRUUENvbm5WZXJzaW9uOiBTeW1ib2woJ2h0dHAgY29ubmVjdGlvbiB2ZXJzaW9uJyksXG4gIGtSZXRyeUhhbmRsZXJEZWZhdWx0UmV0cnk6IFN5bWJvbCgncmV0cnkgYWdlbnQgZGVmYXVsdCByZXRyeScpLFxuICBrQ29uc3RydWN0OiBTeW1ib2woJ2NvbnN0cnVjdGFibGUnKVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY2xhc3MgVW5kaWNpRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICB0aGlzLm5hbWUgPSAnVW5kaWNpRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlInXG4gIH1cbn1cblxuY2xhc3MgQ29ubmVjdFRpbWVvdXRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIENvbm5lY3RUaW1lb3V0RXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0Nvbm5lY3RUaW1lb3V0RXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnQ29ubmVjdCBUaW1lb3V0IEVycm9yJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0NPTk5FQ1RfVElNRU9VVCdcbiAgfVxufVxuXG5jbGFzcyBIZWFkZXJzVGltZW91dEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgSGVhZGVyc1RpbWVvdXRFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnSGVhZGVyc1RpbWVvdXRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdIZWFkZXJzIFRpbWVvdXQgRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfSEVBREVSU19USU1FT1VUJ1xuICB9XG59XG5cbmNsYXNzIEhlYWRlcnNPdmVyZmxvd0Vycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgSGVhZGVyc092ZXJmbG93RXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0hlYWRlcnNPdmVyZmxvd0Vycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ0hlYWRlcnMgT3ZlcmZsb3cgRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfSEVBREVSU19PVkVSRkxPVydcbiAgfVxufVxuXG5jbGFzcyBCb2R5VGltZW91dEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgQm9keVRpbWVvdXRFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnQm9keVRpbWVvdXRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdCb2R5IFRpbWVvdXQgRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfQk9EWV9USU1FT1VUJ1xuICB9XG59XG5cbmNsYXNzIFJlc3BvbnNlU3RhdHVzQ29kZUVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSwgc3RhdHVzQ29kZSwgaGVhZGVycywgYm9keSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ1Jlc3BvbnNlU3RhdHVzQ29kZUVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1Jlc3BvbnNlIFN0YXR1cyBDb2RlIEVycm9yJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX1JFU1BPTlNFX1NUQVRVU19DT0RFJ1xuICAgIHRoaXMuYm9keSA9IGJvZHlcbiAgICB0aGlzLnN0YXR1cyA9IHN0YXR1c0NvZGVcbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBzdGF0dXNDb2RlXG4gICAgdGhpcy5oZWFkZXJzID0gaGVhZGVyc1xuICB9XG59XG5cbmNsYXNzIEludmFsaWRBcmd1bWVudEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgSW52YWxpZEFyZ3VtZW50RXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0ludmFsaWRBcmd1bWVudEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ0ludmFsaWQgQXJndW1lbnQgRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfSU5WQUxJRF9BUkcnXG4gIH1cbn1cblxuY2xhc3MgSW52YWxpZFJldHVyblZhbHVlRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnSW52YWxpZFJldHVyblZhbHVlRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnSW52YWxpZCBSZXR1cm4gVmFsdWUgRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfSU5WQUxJRF9SRVRVUk5fVkFMVUUnXG4gIH1cbn1cblxuY2xhc3MgUmVxdWVzdEFib3J0ZWRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFJlcXVlc3RBYm9ydGVkRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0Fib3J0RXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnUmVxdWVzdCBhYm9ydGVkJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0FCT1JURUQnXG4gIH1cbn1cblxuY2xhc3MgSW5mb3JtYXRpb25hbEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgSW5mb3JtYXRpb25hbEVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdJbmZvcm1hdGlvbmFsRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnUmVxdWVzdCBpbmZvcm1hdGlvbidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9JTkZPJ1xuICB9XG59XG5cbmNsYXNzIFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1JlcXVlc3QgYm9keSBsZW5ndGggZG9lcyBub3QgbWF0Y2ggY29udGVudC1sZW5ndGggaGVhZGVyJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX1JFUV9DT05URU5UX0xFTkdUSF9NSVNNQVRDSCdcbiAgfVxufVxuXG5jbGFzcyBSZXNwb25zZUNvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgUmVzcG9uc2VDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnUmVzcG9uc2VDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdSZXNwb25zZSBib2R5IGxlbmd0aCBkb2VzIG5vdCBtYXRjaCBjb250ZW50LWxlbmd0aCBoZWFkZXInXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfUkVTX0NPTlRFTlRfTEVOR1RIX01JU01BVENIJ1xuICB9XG59XG5cbmNsYXNzIENsaWVudERlc3Ryb3llZEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgQ2xpZW50RGVzdHJveWVkRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0NsaWVudERlc3Ryb3llZEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1RoZSBjbGllbnQgaXMgZGVzdHJveWVkJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0RFU1RST1lFRCdcbiAgfVxufVxuXG5jbGFzcyBDbGllbnRDbG9zZWRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIENsaWVudENsb3NlZEVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdDbGllbnRDbG9zZWRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdUaGUgY2xpZW50IGlzIGNsb3NlZCdcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9DTE9TRUQnXG4gIH1cbn1cblxuY2xhc3MgU29ja2V0RXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlLCBzb2NrZXQpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFNvY2tldEVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdTb2NrZXRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdTb2NrZXQgZXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfU09DS0VUJ1xuICAgIHRoaXMuc29ja2V0ID0gc29ja2V0XG4gIH1cbn1cblxuY2xhc3MgTm90U3VwcG9ydGVkRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBOb3RTdXBwb3J0ZWRFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnTm90U3VwcG9ydGVkRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnTm90IHN1cHBvcnRlZCBlcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9OT1RfU1VQUE9SVEVEJ1xuICB9XG59XG5cbmNsYXNzIEJhbGFuY2VkUG9vbE1pc3NpbmdVcHN0cmVhbUVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgTm90U3VwcG9ydGVkRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ01pc3NpbmdVcHN0cmVhbUVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ05vIHVwc3RyZWFtIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBCYWxhbmNlZFBvb2wnXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfQlBMX01JU1NJTkdfVVBTVFJFQU0nXG4gIH1cbn1cblxuY2xhc3MgSFRUUFBhcnNlckVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSwgY29kZSwgZGF0YSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgSFRUUFBhcnNlckVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdIVFRQUGFyc2VyRXJyb3InXG4gICAgdGhpcy5jb2RlID0gY29kZSA/IGBIUEVfJHtjb2RlfWAgOiB1bmRlZmluZWRcbiAgICB0aGlzLmRhdGEgPSBkYXRhID8gZGF0YS50b1N0cmluZygpIDogdW5kZWZpbmVkXG4gIH1cbn1cblxuY2xhc3MgUmVzcG9uc2VFeGNlZWRlZE1heFNpemVFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFJlc3BvbnNlRXhjZWVkZWRNYXhTaXplRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ1Jlc3BvbnNlRXhjZWVkZWRNYXhTaXplRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnUmVzcG9uc2UgY29udGVudCBleGNlZWRlZCBtYXggc2l6ZSdcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9SRVNfRVhDRUVERURfTUFYX1NJWkUnXG4gIH1cbn1cblxuY2xhc3MgUmVxdWVzdFJldHJ5RXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlLCBjb2RlLCB7IGhlYWRlcnMsIGRhdGEgfSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgUmVxdWVzdFJldHJ5RXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ1JlcXVlc3RSZXRyeUVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1JlcXVlc3QgcmV0cnkgZXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfUkVRX1JFVFJZJ1xuICAgIHRoaXMuc3RhdHVzQ29kZSA9IGNvZGVcbiAgICB0aGlzLmRhdGEgPSBkYXRhXG4gICAgdGhpcy5oZWFkZXJzID0gaGVhZGVyc1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBIVFRQUGFyc2VyRXJyb3IsXG4gIFVuZGljaUVycm9yLFxuICBIZWFkZXJzVGltZW91dEVycm9yLFxuICBIZWFkZXJzT3ZlcmZsb3dFcnJvcixcbiAgQm9keVRpbWVvdXRFcnJvcixcbiAgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yLFxuICBDb25uZWN0VGltZW91dEVycm9yLFxuICBSZXNwb25zZVN0YXR1c0NvZGVFcnJvcixcbiAgSW52YWxpZEFyZ3VtZW50RXJyb3IsXG4gIEludmFsaWRSZXR1cm5WYWx1ZUVycm9yLFxuICBSZXF1ZXN0QWJvcnRlZEVycm9yLFxuICBDbGllbnREZXN0cm95ZWRFcnJvcixcbiAgQ2xpZW50Q2xvc2VkRXJyb3IsXG4gIEluZm9ybWF0aW9uYWxFcnJvcixcbiAgU29ja2V0RXJyb3IsXG4gIE5vdFN1cHBvcnRlZEVycm9yLFxuICBSZXNwb25zZUNvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yLFxuICBCYWxhbmNlZFBvb2xNaXNzaW5nVXBzdHJlYW1FcnJvcixcbiAgUmVzcG9uc2VFeGNlZWRlZE1heFNpemVFcnJvcixcbiAgUmVxdWVzdFJldHJ5RXJyb3Jcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbi8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPn0gKi9cbmNvbnN0IGhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkID0ge31cblxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRUUC9IZWFkZXJzXG5jb25zdCB3ZWxsa25vd25IZWFkZXJOYW1lcyA9IFtcbiAgJ0FjY2VwdCcsXG4gICdBY2NlcHQtRW5jb2RpbmcnLFxuICAnQWNjZXB0LUxhbmd1YWdlJyxcbiAgJ0FjY2VwdC1SYW5nZXMnLFxuICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctQ3JlZGVudGlhbHMnLFxuICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycycsXG4gICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzJyxcbiAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbicsXG4gICdBY2Nlc3MtQ29udHJvbC1FeHBvc2UtSGVhZGVycycsXG4gICdBY2Nlc3MtQ29udHJvbC1NYXgtQWdlJyxcbiAgJ0FjY2Vzcy1Db250cm9sLVJlcXVlc3QtSGVhZGVycycsXG4gICdBY2Nlc3MtQ29udHJvbC1SZXF1ZXN0LU1ldGhvZCcsXG4gICdBZ2UnLFxuICAnQWxsb3cnLFxuICAnQWx0LVN2YycsXG4gICdBbHQtVXNlZCcsXG4gICdBdXRob3JpemF0aW9uJyxcbiAgJ0NhY2hlLUNvbnRyb2wnLFxuICAnQ2xlYXItU2l0ZS1EYXRhJyxcbiAgJ0Nvbm5lY3Rpb24nLFxuICAnQ29udGVudC1EaXNwb3NpdGlvbicsXG4gICdDb250ZW50LUVuY29kaW5nJyxcbiAgJ0NvbnRlbnQtTGFuZ3VhZ2UnLFxuICAnQ29udGVudC1MZW5ndGgnLFxuICAnQ29udGVudC1Mb2NhdGlvbicsXG4gICdDb250ZW50LVJhbmdlJyxcbiAgJ0NvbnRlbnQtU2VjdXJpdHktUG9saWN5JyxcbiAgJ0NvbnRlbnQtU2VjdXJpdHktUG9saWN5LVJlcG9ydC1Pbmx5JyxcbiAgJ0NvbnRlbnQtVHlwZScsXG4gICdDb29raWUnLFxuICAnQ3Jvc3MtT3JpZ2luLUVtYmVkZGVyLVBvbGljeScsXG4gICdDcm9zcy1PcmlnaW4tT3BlbmVyLVBvbGljeScsXG4gICdDcm9zcy1PcmlnaW4tUmVzb3VyY2UtUG9saWN5JyxcbiAgJ0RhdGUnLFxuICAnRGV2aWNlLU1lbW9yeScsXG4gICdEb3dubGluaycsXG4gICdFQ1QnLFxuICAnRVRhZycsXG4gICdFeHBlY3QnLFxuICAnRXhwZWN0LUNUJyxcbiAgJ0V4cGlyZXMnLFxuICAnRm9yd2FyZGVkJyxcbiAgJ0Zyb20nLFxuICAnSG9zdCcsXG4gICdJZi1NYXRjaCcsXG4gICdJZi1Nb2RpZmllZC1TaW5jZScsXG4gICdJZi1Ob25lLU1hdGNoJyxcbiAgJ0lmLVJhbmdlJyxcbiAgJ0lmLVVubW9kaWZpZWQtU2luY2UnLFxuICAnS2VlcC1BbGl2ZScsXG4gICdMYXN0LU1vZGlmaWVkJyxcbiAgJ0xpbmsnLFxuICAnTG9jYXRpb24nLFxuICAnTWF4LUZvcndhcmRzJyxcbiAgJ09yaWdpbicsXG4gICdQZXJtaXNzaW9ucy1Qb2xpY3knLFxuICAnUHJhZ21hJyxcbiAgJ1Byb3h5LUF1dGhlbnRpY2F0ZScsXG4gICdQcm94eS1BdXRob3JpemF0aW9uJyxcbiAgJ1JUVCcsXG4gICdSYW5nZScsXG4gICdSZWZlcmVyJyxcbiAgJ1JlZmVycmVyLVBvbGljeScsXG4gICdSZWZyZXNoJyxcbiAgJ1JldHJ5LUFmdGVyJyxcbiAgJ1NlYy1XZWJTb2NrZXQtQWNjZXB0JyxcbiAgJ1NlYy1XZWJTb2NrZXQtRXh0ZW5zaW9ucycsXG4gICdTZWMtV2ViU29ja2V0LUtleScsXG4gICdTZWMtV2ViU29ja2V0LVByb3RvY29sJyxcbiAgJ1NlYy1XZWJTb2NrZXQtVmVyc2lvbicsXG4gICdTZXJ2ZXInLFxuICAnU2VydmVyLVRpbWluZycsXG4gICdTZXJ2aWNlLVdvcmtlci1BbGxvd2VkJyxcbiAgJ1NlcnZpY2UtV29ya2VyLU5hdmlnYXRpb24tUHJlbG9hZCcsXG4gICdTZXQtQ29va2llJyxcbiAgJ1NvdXJjZU1hcCcsXG4gICdTdHJpY3QtVHJhbnNwb3J0LVNlY3VyaXR5JyxcbiAgJ1N1cHBvcnRzLUxvYWRpbmctTW9kZScsXG4gICdURScsXG4gICdUaW1pbmctQWxsb3ctT3JpZ2luJyxcbiAgJ1RyYWlsZXInLFxuICAnVHJhbnNmZXItRW5jb2RpbmcnLFxuICAnVXBncmFkZScsXG4gICdVcGdyYWRlLUluc2VjdXJlLVJlcXVlc3RzJyxcbiAgJ1VzZXItQWdlbnQnLFxuICAnVmFyeScsXG4gICdWaWEnLFxuICAnV1dXLUF1dGhlbnRpY2F0ZScsXG4gICdYLUNvbnRlbnQtVHlwZS1PcHRpb25zJyxcbiAgJ1gtRE5TLVByZWZldGNoLUNvbnRyb2wnLFxuICAnWC1GcmFtZS1PcHRpb25zJyxcbiAgJ1gtUGVybWl0dGVkLUNyb3NzLURvbWFpbi1Qb2xpY2llcycsXG4gICdYLVBvd2VyZWQtQnknLFxuICAnWC1SZXF1ZXN0ZWQtV2l0aCcsXG4gICdYLVhTUy1Qcm90ZWN0aW9uJ1xuXVxuXG5mb3IgKGxldCBpID0gMDsgaSA8IHdlbGxrbm93bkhlYWRlck5hbWVzLmxlbmd0aDsgKytpKSB7XG4gIGNvbnN0IGtleSA9IHdlbGxrbm93bkhlYWRlck5hbWVzW2ldXG4gIGNvbnN0IGxvd2VyQ2FzZWRLZXkgPSBrZXkudG9Mb3dlckNhc2UoKVxuICBoZWFkZXJOYW1lTG93ZXJDYXNlZFJlY29yZFtrZXldID0gaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmRbbG93ZXJDYXNlZEtleV0gPVxuICAgIGxvd2VyQ2FzZWRLZXlcbn1cblxuLy8gTm90ZTogb2JqZWN0IHByb3RvdHlwZXMgc2hvdWxkIG5vdCBiZSBhYmxlIHRvIGJlIHJlZmVyZW5jZWQuIGUuZy4gYE9iamVjdCNoYXNPd25Qcm9wZXJ0eWAuXG5PYmplY3Quc2V0UHJvdG90eXBlT2YoaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmQsIG51bGwpXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICB3ZWxsa25vd25IZWFkZXJOYW1lcyxcbiAgaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmRcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7IGtEZXN0cm95ZWQsIGtCb2R5VXNlZCB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgSW5jb21pbmdNZXNzYWdlIH0gPSByZXF1aXJlKCdodHRwJylcbmNvbnN0IHN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpXG5jb25zdCBuZXQgPSByZXF1aXJlKCduZXQnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi9lcnJvcnMnKVxuY29uc3QgeyBCbG9iIH0gPSByZXF1aXJlKCdidWZmZXInKVxuY29uc3Qgbm9kZVV0aWwgPSByZXF1aXJlKCd1dGlsJylcbmNvbnN0IHsgc3RyaW5naWZ5IH0gPSByZXF1aXJlKCdxdWVyeXN0cmluZycpXG5jb25zdCB7IGhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5cbmNvbnN0IFtub2RlTWFqb3IsIG5vZGVNaW5vcl0gPSBwcm9jZXNzLnZlcnNpb25zLm5vZGUuc3BsaXQoJy4nKS5tYXAodiA9PiBOdW1iZXIodikpXG5cbmZ1bmN0aW9uIG5vcCAoKSB7fVxuXG5mdW5jdGlvbiBpc1N0cmVhbSAob2JqKSB7XG4gIHJldHVybiBvYmogJiYgdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG9iai5waXBlID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBvYmoub24gPT09ICdmdW5jdGlvbidcbn1cblxuLy8gYmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL25vZGUtZmV0Y2gvZmV0Y2gtYmxvYi9ibG9iLzhhYjU4N2QzNDA4MGRlOTQxNDBiNTRmMDcxNjg0NTFlN2QwYjY1NWUvaW5kZXguanMjTDIyOS1MMjQxIChNSVQgTGljZW5zZSlcbmZ1bmN0aW9uIGlzQmxvYkxpa2UgKG9iamVjdCkge1xuICByZXR1cm4gKEJsb2IgJiYgb2JqZWN0IGluc3RhbmNlb2YgQmxvYikgfHwgKFxuICAgIG9iamVjdCAmJlxuICAgIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmXG4gICAgKHR5cGVvZiBvYmplY3Quc3RyZWFtID09PSAnZnVuY3Rpb24nIHx8XG4gICAgICB0eXBlb2Ygb2JqZWN0LmFycmF5QnVmZmVyID09PSAnZnVuY3Rpb24nKSAmJlxuICAgIC9eKEJsb2J8RmlsZSkkLy50ZXN0KG9iamVjdFtTeW1ib2wudG9TdHJpbmdUYWddKVxuICApXG59XG5cbmZ1bmN0aW9uIGJ1aWxkVVJMICh1cmwsIHF1ZXJ5UGFyYW1zKSB7XG4gIGlmICh1cmwuaW5jbHVkZXMoJz8nKSB8fCB1cmwuaW5jbHVkZXMoJyMnKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignUXVlcnkgcGFyYW1zIGNhbm5vdCBiZSBwYXNzZWQgd2hlbiB1cmwgYWxyZWFkeSBjb250YWlucyBcIj9cIiBvciBcIiNcIi4nKVxuICB9XG5cbiAgY29uc3Qgc3RyaW5naWZpZWQgPSBzdHJpbmdpZnkocXVlcnlQYXJhbXMpXG5cbiAgaWYgKHN0cmluZ2lmaWVkKSB7XG4gICAgdXJsICs9ICc/JyArIHN0cmluZ2lmaWVkXG4gIH1cblxuICByZXR1cm4gdXJsXG59XG5cbmZ1bmN0aW9uIHBhcnNlVVJMICh1cmwpIHtcbiAgaWYgKHR5cGVvZiB1cmwgPT09ICdzdHJpbmcnKSB7XG4gICAgdXJsID0gbmV3IFVSTCh1cmwpXG5cbiAgICBpZiAoIS9eaHR0cHM/Oi8udGVzdCh1cmwub3JpZ2luIHx8IHVybC5wcm90b2NvbCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkwgcHJvdG9jb2w6IHRoZSBVUkwgbXVzdCBzdGFydCB3aXRoIGBodHRwOmAgb3IgYGh0dHBzOmAuJylcbiAgICB9XG5cbiAgICByZXR1cm4gdXJsXG4gIH1cblxuICBpZiAoIXVybCB8fCB0eXBlb2YgdXJsICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkw6IFRoZSBVUkwgYXJndW1lbnQgbXVzdCBiZSBhIG5vbi1udWxsIG9iamVjdC4nKVxuICB9XG5cbiAgaWYgKCEvXmh0dHBzPzovLnRlc3QodXJsLm9yaWdpbiB8fCB1cmwucHJvdG9jb2wpKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIFVSTCBwcm90b2NvbDogdGhlIFVSTCBtdXN0IHN0YXJ0IHdpdGggYGh0dHA6YCBvciBgaHR0cHM6YC4nKVxuICB9XG5cbiAgaWYgKCEodXJsIGluc3RhbmNlb2YgVVJMKSkge1xuICAgIGlmICh1cmwucG9ydCAhPSBudWxsICYmIHVybC5wb3J0ICE9PSAnJyAmJiAhTnVtYmVyLmlzRmluaXRlKHBhcnNlSW50KHVybC5wb3J0KSkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkw6IHBvcnQgbXVzdCBiZSBhIHZhbGlkIGludGVnZXIgb3IgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gaW50ZWdlci4nKVxuICAgIH1cblxuICAgIGlmICh1cmwucGF0aCAhPSBudWxsICYmIHR5cGVvZiB1cmwucGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkwgcGF0aDogdGhlIHBhdGggbXVzdCBiZSBhIHN0cmluZyBvciBudWxsL3VuZGVmaW5lZC4nKVxuICAgIH1cblxuICAgIGlmICh1cmwucGF0aG5hbWUgIT0gbnVsbCAmJiB0eXBlb2YgdXJsLnBhdGhuYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIFVSTCBwYXRobmFtZTogdGhlIHBhdGhuYW1lIG11c3QgYmUgYSBzdHJpbmcgb3IgbnVsbC91bmRlZmluZWQuJylcbiAgICB9XG5cbiAgICBpZiAodXJsLmhvc3RuYW1lICE9IG51bGwgJiYgdHlwZW9mIHVybC5ob3N0bmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkwgaG9zdG5hbWU6IHRoZSBob3N0bmFtZSBtdXN0IGJlIGEgc3RyaW5nIG9yIG51bGwvdW5kZWZpbmVkLicpXG4gICAgfVxuXG4gICAgaWYgKHVybC5vcmlnaW4gIT0gbnVsbCAmJiB0eXBlb2YgdXJsLm9yaWdpbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkwgb3JpZ2luOiB0aGUgb3JpZ2luIG11c3QgYmUgYSBzdHJpbmcgb3IgbnVsbC91bmRlZmluZWQuJylcbiAgICB9XG5cbiAgICBjb25zdCBwb3J0ID0gdXJsLnBvcnQgIT0gbnVsbFxuICAgICAgPyB1cmwucG9ydFxuICAgICAgOiAodXJsLnByb3RvY29sID09PSAnaHR0cHM6JyA/IDQ0MyA6IDgwKVxuICAgIGxldCBvcmlnaW4gPSB1cmwub3JpZ2luICE9IG51bGxcbiAgICAgID8gdXJsLm9yaWdpblxuICAgICAgOiBgJHt1cmwucHJvdG9jb2x9Ly8ke3VybC5ob3N0bmFtZX06JHtwb3J0fWBcbiAgICBsZXQgcGF0aCA9IHVybC5wYXRoICE9IG51bGxcbiAgICAgID8gdXJsLnBhdGhcbiAgICAgIDogYCR7dXJsLnBhdGhuYW1lIHx8ICcnfSR7dXJsLnNlYXJjaCB8fCAnJ31gXG5cbiAgICBpZiAob3JpZ2luLmVuZHNXaXRoKCcvJykpIHtcbiAgICAgIG9yaWdpbiA9IG9yaWdpbi5zdWJzdHJpbmcoMCwgb3JpZ2luLmxlbmd0aCAtIDEpXG4gICAgfVxuXG4gICAgaWYgKHBhdGggJiYgIXBhdGguc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICBwYXRoID0gYC8ke3BhdGh9YFxuICAgIH1cbiAgICAvLyBuZXcgVVJMKHBhdGgsIG9yaWdpbikgaXMgdW5zYWZlIHdoZW4gYHBhdGhgIGNvbnRhaW5zIGFuIGFic29sdXRlIFVSTFxuICAgIC8vIEZyb20gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1VSTC9VUkw6XG4gICAgLy8gSWYgZmlyc3QgcGFyYW1ldGVyIGlzIGEgcmVsYXRpdmUgVVJMLCBzZWNvbmQgcGFyYW0gaXMgcmVxdWlyZWQsIGFuZCB3aWxsIGJlIHVzZWQgYXMgdGhlIGJhc2UgVVJMLlxuICAgIC8vIElmIGZpcnN0IHBhcmFtZXRlciBpcyBhbiBhYnNvbHV0ZSBVUkwsIGEgZ2l2ZW4gc2Vjb25kIHBhcmFtIHdpbGwgYmUgaWdub3JlZC5cbiAgICB1cmwgPSBuZXcgVVJMKG9yaWdpbiArIHBhdGgpXG4gIH1cblxuICByZXR1cm4gdXJsXG59XG5cbmZ1bmN0aW9uIHBhcnNlT3JpZ2luICh1cmwpIHtcbiAgdXJsID0gcGFyc2VVUkwodXJsKVxuXG4gIGlmICh1cmwucGF0aG5hbWUgIT09ICcvJyB8fCB1cmwuc2VhcmNoIHx8IHVybC5oYXNoKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIHVybCcpXG4gIH1cblxuICByZXR1cm4gdXJsXG59XG5cbmZ1bmN0aW9uIGdldEhvc3RuYW1lIChob3N0KSB7XG4gIGlmIChob3N0WzBdID09PSAnWycpIHtcbiAgICBjb25zdCBpZHggPSBob3N0LmluZGV4T2YoJ10nKVxuXG4gICAgYXNzZXJ0KGlkeCAhPT0gLTEpXG4gICAgcmV0dXJuIGhvc3Quc3Vic3RyaW5nKDEsIGlkeClcbiAgfVxuXG4gIGNvbnN0IGlkeCA9IGhvc3QuaW5kZXhPZignOicpXG4gIGlmIChpZHggPT09IC0xKSByZXR1cm4gaG9zdFxuXG4gIHJldHVybiBob3N0LnN1YnN0cmluZygwLCBpZHgpXG59XG5cbi8vIElQIGFkZHJlc3NlcyBhcmUgbm90IHZhbGlkIHNlcnZlciBuYW1lcyBwZXIgUkZDNjA2NlxuLy8gPiBDdXJyZW50bHksIHRoZSBvbmx5IHNlcnZlciBuYW1lcyBzdXBwb3J0ZWQgYXJlIEROUyBob3N0bmFtZXNcbmZ1bmN0aW9uIGdldFNlcnZlck5hbWUgKGhvc3QpIHtcbiAgaWYgKCFob3N0KSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgaG9zdCwgJ3N0cmluZycpXG5cbiAgY29uc3Qgc2VydmVybmFtZSA9IGdldEhvc3RuYW1lKGhvc3QpXG4gIGlmIChuZXQuaXNJUChzZXJ2ZXJuYW1lKSkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgcmV0dXJuIHNlcnZlcm5hbWVcbn1cblxuZnVuY3Rpb24gZGVlcENsb25lIChvYmopIHtcbiAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob2JqKSlcbn1cblxuZnVuY3Rpb24gaXNBc3luY0l0ZXJhYmxlIChvYmopIHtcbiAgcmV0dXJuICEhKG9iaiAhPSBudWxsICYmIHR5cGVvZiBvYmpbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID09PSAnZnVuY3Rpb24nKVxufVxuXG5mdW5jdGlvbiBpc0l0ZXJhYmxlIChvYmopIHtcbiAgcmV0dXJuICEhKG9iaiAhPSBudWxsICYmICh0eXBlb2Ygb2JqW1N5bWJvbC5pdGVyYXRvcl0gPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIG9ialtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPT09ICdmdW5jdGlvbicpKVxufVxuXG5mdW5jdGlvbiBib2R5TGVuZ3RoIChib2R5KSB7XG4gIGlmIChib2R5ID09IG51bGwpIHtcbiAgICByZXR1cm4gMFxuICB9IGVsc2UgaWYgKGlzU3RyZWFtKGJvZHkpKSB7XG4gICAgY29uc3Qgc3RhdGUgPSBib2R5Ll9yZWFkYWJsZVN0YXRlXG4gICAgcmV0dXJuIHN0YXRlICYmIHN0YXRlLm9iamVjdE1vZGUgPT09IGZhbHNlICYmIHN0YXRlLmVuZGVkID09PSB0cnVlICYmIE51bWJlci5pc0Zpbml0ZShzdGF0ZS5sZW5ndGgpXG4gICAgICA/IHN0YXRlLmxlbmd0aFxuICAgICAgOiBudWxsXG4gIH0gZWxzZSBpZiAoaXNCbG9iTGlrZShib2R5KSkge1xuICAgIHJldHVybiBib2R5LnNpemUgIT0gbnVsbCA/IGJvZHkuc2l6ZSA6IG51bGxcbiAgfSBlbHNlIGlmIChpc0J1ZmZlcihib2R5KSkge1xuICAgIHJldHVybiBib2R5LmJ5dGVMZW5ndGhcbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG5cbmZ1bmN0aW9uIGlzRGVzdHJveWVkIChzdHJlYW0pIHtcbiAgcmV0dXJuICFzdHJlYW0gfHwgISEoc3RyZWFtLmRlc3Ryb3llZCB8fCBzdHJlYW1ba0Rlc3Ryb3llZF0pXG59XG5cbmZ1bmN0aW9uIGlzUmVhZGFibGVBYm9ydGVkIChzdHJlYW0pIHtcbiAgY29uc3Qgc3RhdGUgPSBzdHJlYW0gJiYgc3RyZWFtLl9yZWFkYWJsZVN0YXRlXG4gIHJldHVybiBpc0Rlc3Ryb3llZChzdHJlYW0pICYmIHN0YXRlICYmICFzdGF0ZS5lbmRFbWl0dGVkXG59XG5cbmZ1bmN0aW9uIGRlc3Ryb3kgKHN0cmVhbSwgZXJyKSB7XG4gIGlmIChzdHJlYW0gPT0gbnVsbCB8fCAhaXNTdHJlYW0oc3RyZWFtKSB8fCBpc0Rlc3Ryb3llZChzdHJlYW0pKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAodHlwZW9mIHN0cmVhbS5kZXN0cm95ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKE9iamVjdC5nZXRQcm90b3R5cGVPZihzdHJlYW0pLmNvbnN0cnVjdG9yID09PSBJbmNvbWluZ01lc3NhZ2UpIHtcbiAgICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvMzg1MDUvZmlsZXNcbiAgICAgIHN0cmVhbS5zb2NrZXQgPSBudWxsXG4gICAgfVxuXG4gICAgc3RyZWFtLmRlc3Ryb3koZXJyKVxuICB9IGVsc2UgaWYgKGVycikge1xuICAgIHByb2Nlc3MubmV4dFRpY2soKHN0cmVhbSwgZXJyKSA9PiB7XG4gICAgICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcnIpXG4gICAgfSwgc3RyZWFtLCBlcnIpXG4gIH1cblxuICBpZiAoc3RyZWFtLmRlc3Ryb3llZCAhPT0gdHJ1ZSkge1xuICAgIHN0cmVhbVtrRGVzdHJveWVkXSA9IHRydWVcbiAgfVxufVxuXG5jb25zdCBLRUVQQUxJVkVfVElNRU9VVF9FWFBSID0gL3RpbWVvdXQ9KFxcZCspL1xuZnVuY3Rpb24gcGFyc2VLZWVwQWxpdmVUaW1lb3V0ICh2YWwpIHtcbiAgY29uc3QgbSA9IHZhbC50b1N0cmluZygpLm1hdGNoKEtFRVBBTElWRV9USU1FT1VUX0VYUFIpXG4gIHJldHVybiBtID8gcGFyc2VJbnQobVsxXSwgMTApICogMTAwMCA6IG51bGxcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgYSBoZWFkZXIgbmFtZSBhbmQgcmV0dXJucyBpdHMgbG93ZXJjYXNlIHZhbHVlLlxuICogQHBhcmFtIHtzdHJpbmcgfCBCdWZmZXJ9IHZhbHVlIEhlYWRlciBuYW1lXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBoZWFkZXJOYW1lVG9TdHJpbmcgKHZhbHVlKSB7XG4gIHJldHVybiBoZWFkZXJOYW1lTG93ZXJDYXNlZFJlY29yZFt2YWx1ZV0gfHwgdmFsdWUudG9Mb3dlckNhc2UoKVxufVxuXG5mdW5jdGlvbiBwYXJzZUhlYWRlcnMgKGhlYWRlcnMsIG9iaiA9IHt9KSB7XG4gIC8vIEZvciBIMiBzdXBwb3J0XG4gIGlmICghQXJyYXkuaXNBcnJheShoZWFkZXJzKSkgcmV0dXJuIGhlYWRlcnNcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICBjb25zdCBrZXkgPSBoZWFkZXJzW2ldLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKVxuICAgIGxldCB2YWwgPSBvYmpba2V5XVxuXG4gICAgaWYgKCF2YWwpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnNbaSArIDFdKSkge1xuICAgICAgICBvYmpba2V5XSA9IGhlYWRlcnNbaSArIDFdLm1hcCh4ID0+IHgudG9TdHJpbmcoJ3V0ZjgnKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9ialtrZXldID0gaGVhZGVyc1tpICsgMV0udG9TdHJpbmcoJ3V0ZjgnKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgICB2YWwgPSBbdmFsXVxuICAgICAgICBvYmpba2V5XSA9IHZhbFxuICAgICAgfVxuICAgICAgdmFsLnB1c2goaGVhZGVyc1tpICsgMV0udG9TdHJpbmcoJ3V0ZjgnKSlcbiAgICB9XG4gIH1cblxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvNDY1MjhcbiAgaWYgKCdjb250ZW50LWxlbmd0aCcgaW4gb2JqICYmICdjb250ZW50LWRpc3Bvc2l0aW9uJyBpbiBvYmopIHtcbiAgICBvYmpbJ2NvbnRlbnQtZGlzcG9zaXRpb24nXSA9IEJ1ZmZlci5mcm9tKG9ialsnY29udGVudC1kaXNwb3NpdGlvbiddKS50b1N0cmluZygnbGF0aW4xJylcbiAgfVxuXG4gIHJldHVybiBvYmpcbn1cblxuZnVuY3Rpb24gcGFyc2VSYXdIZWFkZXJzIChoZWFkZXJzKSB7XG4gIGNvbnN0IHJldCA9IFtdXG4gIGxldCBoYXNDb250ZW50TGVuZ3RoID0gZmFsc2VcbiAgbGV0IGNvbnRlbnREaXNwb3NpdGlvbklkeCA9IC0xXG5cbiAgZm9yIChsZXQgbiA9IDA7IG4gPCBoZWFkZXJzLmxlbmd0aDsgbiArPSAyKSB7XG4gICAgY29uc3Qga2V5ID0gaGVhZGVyc1tuICsgMF0udG9TdHJpbmcoKVxuICAgIGNvbnN0IHZhbCA9IGhlYWRlcnNbbiArIDFdLnRvU3RyaW5nKCd1dGY4JylcblxuICAgIGlmIChrZXkubGVuZ3RoID09PSAxNCAmJiAoa2V5ID09PSAnY29udGVudC1sZW5ndGgnIHx8IGtleS50b0xvd2VyQ2FzZSgpID09PSAnY29udGVudC1sZW5ndGgnKSkge1xuICAgICAgcmV0LnB1c2goa2V5LCB2YWwpXG4gICAgICBoYXNDb250ZW50TGVuZ3RoID0gdHJ1ZVxuICAgIH0gZWxzZSBpZiAoa2V5Lmxlbmd0aCA9PT0gMTkgJiYgKGtleSA9PT0gJ2NvbnRlbnQtZGlzcG9zaXRpb24nIHx8IGtleS50b0xvd2VyQ2FzZSgpID09PSAnY29udGVudC1kaXNwb3NpdGlvbicpKSB7XG4gICAgICBjb250ZW50RGlzcG9zaXRpb25JZHggPSByZXQucHVzaChrZXksIHZhbCkgLSAxXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldC5wdXNoKGtleSwgdmFsKVxuICAgIH1cbiAgfVxuXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvcHVsbC80NjUyOFxuICBpZiAoaGFzQ29udGVudExlbmd0aCAmJiBjb250ZW50RGlzcG9zaXRpb25JZHggIT09IC0xKSB7XG4gICAgcmV0W2NvbnRlbnREaXNwb3NpdGlvbklkeF0gPSBCdWZmZXIuZnJvbShyZXRbY29udGVudERpc3Bvc2l0aW9uSWR4XSkudG9TdHJpbmcoJ2xhdGluMScpXG4gIH1cblxuICByZXR1cm4gcmV0XG59XG5cbmZ1bmN0aW9uIGlzQnVmZmVyIChidWZmZXIpIHtcbiAgLy8gU2VlLCBodHRwczovL2dpdGh1Yi5jb20vbWNvbGxpbmEvdW5kaWNpL3B1bGwvMzE5XG4gIHJldHVybiBidWZmZXIgaW5zdGFuY2VvZiBVaW50OEFycmF5IHx8IEJ1ZmZlci5pc0J1ZmZlcihidWZmZXIpXG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlSGFuZGxlciAoaGFuZGxlciwgbWV0aG9kLCB1cGdyYWRlKSB7XG4gIGlmICghaGFuZGxlciB8fCB0eXBlb2YgaGFuZGxlciAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2hhbmRsZXIgbXVzdCBiZSBhbiBvYmplY3QnKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBoYW5kbGVyLm9uQ29ubmVjdCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkNvbm5lY3QgbWV0aG9kJylcbiAgfVxuXG4gIGlmICh0eXBlb2YgaGFuZGxlci5vbkVycm9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uRXJyb3IgbWV0aG9kJylcbiAgfVxuXG4gIGlmICh0eXBlb2YgaGFuZGxlci5vbkJvZHlTZW50ICE9PSAnZnVuY3Rpb24nICYmIGhhbmRsZXIub25Cb2R5U2VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uQm9keVNlbnQgbWV0aG9kJylcbiAgfVxuXG4gIGlmICh1cGdyYWRlIHx8IG1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSB7XG4gICAgaWYgKHR5cGVvZiBoYW5kbGVyLm9uVXBncmFkZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uVXBncmFkZSBtZXRob2QnKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAodHlwZW9mIGhhbmRsZXIub25IZWFkZXJzICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25IZWFkZXJzIG1ldGhvZCcpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBoYW5kbGVyLm9uRGF0YSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uRGF0YSBtZXRob2QnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaGFuZGxlci5vbkNvbXBsZXRlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25Db21wbGV0ZSBtZXRob2QnKVxuICAgIH1cbiAgfVxufVxuXG4vLyBBIGJvZHkgaXMgZGlzdHVyYmVkIGlmIGl0IGhhcyBiZWVuIHJlYWQgZnJvbSBhbmQgaXQgY2Fubm90XG4vLyBiZSByZS11c2VkIHdpdGhvdXQgbG9zaW5nIHN0YXRlIG9yIGRhdGEuXG5mdW5jdGlvbiBpc0Rpc3R1cmJlZCAoYm9keSkge1xuICByZXR1cm4gISEoYm9keSAmJiAoXG4gICAgc3RyZWFtLmlzRGlzdHVyYmVkXG4gICAgICA/IHN0cmVhbS5pc0Rpc3R1cmJlZChib2R5KSB8fCBib2R5W2tCb2R5VXNlZF0gLy8gVE9ETyAoZml4KTogV2h5IGlzIGJvZHlba0JvZHlVc2VkXSBuZWVkZWQ/XG4gICAgICA6IGJvZHlba0JvZHlVc2VkXSB8fFxuICAgICAgICBib2R5LnJlYWRhYmxlRGlkUmVhZCB8fFxuICAgICAgICAoYm9keS5fcmVhZGFibGVTdGF0ZSAmJiBib2R5Ll9yZWFkYWJsZVN0YXRlLmRhdGFFbWl0dGVkKSB8fFxuICAgICAgICBpc1JlYWRhYmxlQWJvcnRlZChib2R5KVxuICApKVxufVxuXG5mdW5jdGlvbiBpc0Vycm9yZWQgKGJvZHkpIHtcbiAgcmV0dXJuICEhKGJvZHkgJiYgKFxuICAgIHN0cmVhbS5pc0Vycm9yZWRcbiAgICAgID8gc3RyZWFtLmlzRXJyb3JlZChib2R5KVxuICAgICAgOiAvc3RhdGU6ICdlcnJvcmVkJy8udGVzdChub2RlVXRpbC5pbnNwZWN0KGJvZHkpXG4gICAgICApKSlcbn1cblxuZnVuY3Rpb24gaXNSZWFkYWJsZSAoYm9keSkge1xuICByZXR1cm4gISEoYm9keSAmJiAoXG4gICAgc3RyZWFtLmlzUmVhZGFibGVcbiAgICAgID8gc3RyZWFtLmlzUmVhZGFibGUoYm9keSlcbiAgICAgIDogL3N0YXRlOiAncmVhZGFibGUnLy50ZXN0KG5vZGVVdGlsLmluc3BlY3QoYm9keSlcbiAgICAgICkpKVxufVxuXG5mdW5jdGlvbiBnZXRTb2NrZXRJbmZvIChzb2NrZXQpIHtcbiAgcmV0dXJuIHtcbiAgICBsb2NhbEFkZHJlc3M6IHNvY2tldC5sb2NhbEFkZHJlc3MsXG4gICAgbG9jYWxQb3J0OiBzb2NrZXQubG9jYWxQb3J0LFxuICAgIHJlbW90ZUFkZHJlc3M6IHNvY2tldC5yZW1vdGVBZGRyZXNzLFxuICAgIHJlbW90ZVBvcnQ6IHNvY2tldC5yZW1vdGVQb3J0LFxuICAgIHJlbW90ZUZhbWlseTogc29ja2V0LnJlbW90ZUZhbWlseSxcbiAgICB0aW1lb3V0OiBzb2NrZXQudGltZW91dCxcbiAgICBieXRlc1dyaXR0ZW46IHNvY2tldC5ieXRlc1dyaXR0ZW4sXG4gICAgYnl0ZXNSZWFkOiBzb2NrZXQuYnl0ZXNSZWFkXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gKiBjb252ZXJ0SXRlcmFibGVUb0J1ZmZlciAoaXRlcmFibGUpIHtcbiAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBpdGVyYWJsZSkge1xuICAgIHlpZWxkIEJ1ZmZlci5pc0J1ZmZlcihjaHVuaykgPyBjaHVuayA6IEJ1ZmZlci5mcm9tKGNodW5rKVxuICB9XG59XG5cbmxldCBSZWFkYWJsZVN0cmVhbVxuZnVuY3Rpb24gUmVhZGFibGVTdHJlYW1Gcm9tIChpdGVyYWJsZSkge1xuICBpZiAoIVJlYWRhYmxlU3RyZWFtKSB7XG4gICAgUmVhZGFibGVTdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0vd2ViJykuUmVhZGFibGVTdHJlYW1cbiAgfVxuXG4gIGlmIChSZWFkYWJsZVN0cmVhbS5mcm9tKSB7XG4gICAgcmV0dXJuIFJlYWRhYmxlU3RyZWFtLmZyb20oY29udmVydEl0ZXJhYmxlVG9CdWZmZXIoaXRlcmFibGUpKVxuICB9XG5cbiAgbGV0IGl0ZXJhdG9yXG4gIHJldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oXG4gICAge1xuICAgICAgYXN5bmMgc3RhcnQgKCkge1xuICAgICAgICBpdGVyYXRvciA9IGl0ZXJhYmxlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpXG4gICAgICB9LFxuICAgICAgYXN5bmMgcHVsbCAoY29udHJvbGxlcikge1xuICAgICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCBpdGVyYXRvci5uZXh0KClcbiAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgICAgICBjb250cm9sbGVyLmNsb3NlKClcbiAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5pc0J1ZmZlcih2YWx1ZSkgPyB2YWx1ZSA6IEJ1ZmZlci5mcm9tKHZhbHVlKVxuICAgICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShuZXcgVWludDhBcnJheShidWYpKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb250cm9sbGVyLmRlc2lyZWRTaXplID4gMFxuICAgICAgfSxcbiAgICAgIGFzeW5jIGNhbmNlbCAocmVhc29uKSB7XG4gICAgICAgIGF3YWl0IGl0ZXJhdG9yLnJldHVybigpXG4gICAgICB9XG4gICAgfSxcbiAgICAwXG4gIClcbn1cblxuLy8gVGhlIGNodW5rIHNob3VsZCBiZSBhIEZvcm1EYXRhIGluc3RhbmNlIGFuZCBjb250YWluc1xuLy8gYWxsIHRoZSByZXF1aXJlZCBtZXRob2RzLlxuZnVuY3Rpb24gaXNGb3JtRGF0YUxpa2UgKG9iamVjdCkge1xuICByZXR1cm4gKFxuICAgIG9iamVjdCAmJlxuICAgIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmXG4gICAgdHlwZW9mIG9iamVjdC5hcHBlbmQgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2Ygb2JqZWN0LmRlbGV0ZSA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBvYmplY3QuZ2V0ID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIG9iamVjdC5nZXRBbGwgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2Ygb2JqZWN0LmhhcyA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBvYmplY3Quc2V0ID09PSAnZnVuY3Rpb24nICYmXG4gICAgb2JqZWN0W1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdGb3JtRGF0YSdcbiAgKVxufVxuXG5mdW5jdGlvbiB0aHJvd0lmQWJvcnRlZCAoc2lnbmFsKSB7XG4gIGlmICghc2lnbmFsKSB7IHJldHVybiB9XG4gIGlmICh0eXBlb2Ygc2lnbmFsLnRocm93SWZBYm9ydGVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgc2lnbmFsLnRocm93SWZBYm9ydGVkKClcbiAgfSBlbHNlIHtcbiAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgIC8vIERPTUV4Y2VwdGlvbiBub3QgYXZhaWxhYmxlIDwgdjE3LjAuMFxuICAgICAgY29uc3QgZXJyID0gbmV3IEVycm9yKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkJylcbiAgICAgIGVyci5uYW1lID0gJ0Fib3J0RXJyb3InXG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYWRkQWJvcnRMaXN0ZW5lciAoc2lnbmFsLCBsaXN0ZW5lcikge1xuICBpZiAoJ2FkZEV2ZW50TGlzdGVuZXInIGluIHNpZ25hbCkge1xuICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIGxpc3RlbmVyLCB7IG9uY2U6IHRydWUgfSlcbiAgICByZXR1cm4gKCkgPT4gc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgbGlzdGVuZXIpXG4gIH1cbiAgc2lnbmFsLmFkZExpc3RlbmVyKCdhYm9ydCcsIGxpc3RlbmVyKVxuICByZXR1cm4gKCkgPT4gc2lnbmFsLnJlbW92ZUxpc3RlbmVyKCdhYm9ydCcsIGxpc3RlbmVyKVxufVxuXG5jb25zdCBoYXNUb1dlbGxGb3JtZWQgPSAhIVN0cmluZy5wcm90b3R5cGUudG9XZWxsRm9ybWVkXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbFxuICovXG5mdW5jdGlvbiB0b1VTVlN0cmluZyAodmFsKSB7XG4gIGlmIChoYXNUb1dlbGxGb3JtZWQpIHtcbiAgICByZXR1cm4gYCR7dmFsfWAudG9XZWxsRm9ybWVkKClcbiAgfSBlbHNlIGlmIChub2RlVXRpbC50b1VTVlN0cmluZykge1xuICAgIHJldHVybiBub2RlVXRpbC50b1VTVlN0cmluZyh2YWwpXG4gIH1cblxuICByZXR1cm4gYCR7dmFsfWBcbn1cblxuLy8gUGFyc2VkIGFjY29yZGluZ2x5IHRvIFJGQyA5MTEwXG4vLyBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjOTExMCNmaWVsZC5jb250ZW50LXJhbmdlXG5mdW5jdGlvbiBwYXJzZVJhbmdlSGVhZGVyIChyYW5nZSkge1xuICBpZiAocmFuZ2UgPT0gbnVsbCB8fCByYW5nZSA9PT0gJycpIHJldHVybiB7IHN0YXJ0OiAwLCBlbmQ6IG51bGwsIHNpemU6IG51bGwgfVxuXG4gIGNvbnN0IG0gPSByYW5nZSA/IHJhbmdlLm1hdGNoKC9eYnl0ZXMgKFxcZCspLShcXGQrKVxcLyhcXGQrKT8kLykgOiBudWxsXG4gIHJldHVybiBtXG4gICAgPyB7XG4gICAgICAgIHN0YXJ0OiBwYXJzZUludChtWzFdKSxcbiAgICAgICAgZW5kOiBtWzJdID8gcGFyc2VJbnQobVsyXSkgOiBudWxsLFxuICAgICAgICBzaXplOiBtWzNdID8gcGFyc2VJbnQobVszXSkgOiBudWxsXG4gICAgICB9XG4gICAgOiBudWxsXG59XG5cbmNvbnN0IGtFbnVtZXJhYmxlUHJvcGVydHkgPSBPYmplY3QuY3JlYXRlKG51bGwpXG5rRW51bWVyYWJsZVByb3BlcnR5LmVudW1lcmFibGUgPSB0cnVlXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBub3AsXG4gIGlzRGlzdHVyYmVkLFxuICBpc0Vycm9yZWQsXG4gIGlzUmVhZGFibGUsXG4gIHRvVVNWU3RyaW5nLFxuICBpc1JlYWRhYmxlQWJvcnRlZCxcbiAgaXNCbG9iTGlrZSxcbiAgcGFyc2VPcmlnaW4sXG4gIHBhcnNlVVJMLFxuICBnZXRTZXJ2ZXJOYW1lLFxuICBpc1N0cmVhbSxcbiAgaXNJdGVyYWJsZSxcbiAgaXNBc3luY0l0ZXJhYmxlLFxuICBpc0Rlc3Ryb3llZCxcbiAgaGVhZGVyTmFtZVRvU3RyaW5nLFxuICBwYXJzZVJhd0hlYWRlcnMsXG4gIHBhcnNlSGVhZGVycyxcbiAgcGFyc2VLZWVwQWxpdmVUaW1lb3V0LFxuICBkZXN0cm95LFxuICBib2R5TGVuZ3RoLFxuICBkZWVwQ2xvbmUsXG4gIFJlYWRhYmxlU3RyZWFtRnJvbSxcbiAgaXNCdWZmZXIsXG4gIHZhbGlkYXRlSGFuZGxlcixcbiAgZ2V0U29ja2V0SW5mbyxcbiAgaXNGb3JtRGF0YUxpa2UsXG4gIGJ1aWxkVVJMLFxuICB0aHJvd0lmQWJvcnRlZCxcbiAgYWRkQWJvcnRMaXN0ZW5lcixcbiAgcGFyc2VSYW5nZUhlYWRlcixcbiAgbm9kZU1ham9yLFxuICBub2RlTWlub3IsXG4gIG5vZGVIYXNBdXRvU2VsZWN0RmFtaWx5OiBub2RlTWFqb3IgPiAxOCB8fCAobm9kZU1ham9yID09PSAxOCAmJiBub2RlTWlub3IgPj0gMTMpLFxuICBzYWZlSFRUUE1ldGhvZHM6IFsnR0VUJywgJ0hFQUQnLCAnT1BUSU9OUycsICdUUkFDRSddXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5sZXQgZmFzdE5vdyA9IERhdGUubm93KClcbmxldCBmYXN0Tm93VGltZW91dFxuXG5jb25zdCBmYXN0VGltZXJzID0gW11cblxuZnVuY3Rpb24gb25UaW1lb3V0ICgpIHtcbiAgZmFzdE5vdyA9IERhdGUubm93KClcblxuICBsZXQgbGVuID0gZmFzdFRpbWVycy5sZW5ndGhcbiAgbGV0IGlkeCA9IDBcbiAgd2hpbGUgKGlkeCA8IGxlbikge1xuICAgIGNvbnN0IHRpbWVyID0gZmFzdFRpbWVyc1tpZHhdXG5cbiAgICBpZiAodGltZXIuc3RhdGUgPT09IDApIHtcbiAgICAgIHRpbWVyLnN0YXRlID0gZmFzdE5vdyArIHRpbWVyLmRlbGF5XG4gICAgfSBlbHNlIGlmICh0aW1lci5zdGF0ZSA+IDAgJiYgZmFzdE5vdyA+PSB0aW1lci5zdGF0ZSkge1xuICAgICAgdGltZXIuc3RhdGUgPSAtMVxuICAgICAgdGltZXIuY2FsbGJhY2sodGltZXIub3BhcXVlKVxuICAgIH1cblxuICAgIGlmICh0aW1lci5zdGF0ZSA9PT0gLTEpIHtcbiAgICAgIHRpbWVyLnN0YXRlID0gLTJcbiAgICAgIGlmIChpZHggIT09IGxlbiAtIDEpIHtcbiAgICAgICAgZmFzdFRpbWVyc1tpZHhdID0gZmFzdFRpbWVycy5wb3AoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmFzdFRpbWVycy5wb3AoKVxuICAgICAgfVxuICAgICAgbGVuIC09IDFcbiAgICB9IGVsc2Uge1xuICAgICAgaWR4ICs9IDFcbiAgICB9XG4gIH1cblxuICBpZiAoZmFzdFRpbWVycy5sZW5ndGggPiAwKSB7XG4gICAgcmVmcmVzaFRpbWVvdXQoKVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlZnJlc2hUaW1lb3V0ICgpIHtcbiAgaWYgKGZhc3ROb3dUaW1lb3V0ICYmIGZhc3ROb3dUaW1lb3V0LnJlZnJlc2gpIHtcbiAgICBmYXN0Tm93VGltZW91dC5yZWZyZXNoKClcbiAgfSBlbHNlIHtcbiAgICBjbGVhclRpbWVvdXQoZmFzdE5vd1RpbWVvdXQpXG4gICAgZmFzdE5vd1RpbWVvdXQgPSBzZXRUaW1lb3V0KG9uVGltZW91dCwgMWUzKVxuICAgIGlmIChmYXN0Tm93VGltZW91dC51bnJlZikge1xuICAgICAgZmFzdE5vd1RpbWVvdXQudW5yZWYoKVxuICAgIH1cbiAgfVxufVxuXG5jbGFzcyBUaW1lb3V0IHtcbiAgY29uc3RydWN0b3IgKGNhbGxiYWNrLCBkZWxheSwgb3BhcXVlKSB7XG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrXG4gICAgdGhpcy5kZWxheSA9IGRlbGF5XG4gICAgdGhpcy5vcGFxdWUgPSBvcGFxdWVcblxuICAgIC8vICAtMiBub3QgaW4gdGltZXIgbGlzdFxuICAgIC8vICAtMSBpbiB0aW1lciBsaXN0IGJ1dCBpbmFjdGl2ZVxuICAgIC8vICAgMCBpbiB0aW1lciBsaXN0IHdhaXRpbmcgZm9yIHRpbWVcbiAgICAvLyA+IDAgaW4gdGltZXIgbGlzdCB3YWl0aW5nIGZvciB0aW1lIHRvIGV4cGlyZVxuICAgIHRoaXMuc3RhdGUgPSAtMlxuXG4gICAgdGhpcy5yZWZyZXNoKClcbiAgfVxuXG4gIHJlZnJlc2ggKCkge1xuICAgIGlmICh0aGlzLnN0YXRlID09PSAtMikge1xuICAgICAgZmFzdFRpbWVycy5wdXNoKHRoaXMpXG4gICAgICBpZiAoIWZhc3ROb3dUaW1lb3V0IHx8IGZhc3RUaW1lcnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJlZnJlc2hUaW1lb3V0KClcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnN0YXRlID0gMFxuICB9XG5cbiAgY2xlYXIgKCkge1xuICAgIHRoaXMuc3RhdGUgPSAtMVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXRUaW1lb3V0IChjYWxsYmFjaywgZGVsYXksIG9wYXF1ZSkge1xuICAgIHJldHVybiBkZWxheSA8IDFlM1xuICAgICAgPyBzZXRUaW1lb3V0KGNhbGxiYWNrLCBkZWxheSwgb3BhcXVlKVxuICAgICAgOiBuZXcgVGltZW91dChjYWxsYmFjaywgZGVsYXksIG9wYXF1ZSlcbiAgfSxcbiAgY2xlYXJUaW1lb3V0ICh0aW1lb3V0KSB7XG4gICAgaWYgKHRpbWVvdXQgaW5zdGFuY2VvZiBUaW1lb3V0KSB7XG4gICAgICB0aW1lb3V0LmNsZWFyKClcbiAgICB9IGVsc2Uge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpXG4gICAgfVxuICB9XG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG4vKipcbiAqIENvcHlyaWdodCBCcmlhbiBXaGl0ZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tc2NkZXgvc3RyZWFtc2VhcmNoXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG9cbiAqIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlXG4gKiByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3JcbiAqIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkdcbiAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1NcbiAqIElOIFRIRSBTT0ZUV0FSRS5cbiAqXG4gKiBCYXNlZCBoZWF2aWx5IG9uIHRoZSBTdHJlYW1pbmcgQm95ZXItTW9vcmUtSG9yc3Bvb2wgQysrIGltcGxlbWVudGF0aW9uXG4gKiBieSBIb25nbGkgTGFpIGF0OiBodHRwczovL2dpdGh1Yi5jb20vRm9vQmFyV2lkZ2V0L2JveWVyLW1vb3JlLWhvcnNwb29sXG4gKi9cbmNvbnN0IEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ25vZGU6ZXZlbnRzJykuRXZlbnRFbWl0dGVyXG5jb25zdCBpbmhlcml0cyA9IHJlcXVpcmUoJ25vZGU6dXRpbCcpLmluaGVyaXRzXG5cbmZ1bmN0aW9uIFNCTUggKG5lZWRsZSkge1xuICBpZiAodHlwZW9mIG5lZWRsZSA9PT0gJ3N0cmluZycpIHtcbiAgICBuZWVkbGUgPSBCdWZmZXIuZnJvbShuZWVkbGUpXG4gIH1cblxuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihuZWVkbGUpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIG5lZWRsZSBoYXMgdG8gYmUgYSBTdHJpbmcgb3IgYSBCdWZmZXIuJylcbiAgfVxuXG4gIGNvbnN0IG5lZWRsZUxlbmd0aCA9IG5lZWRsZS5sZW5ndGhcblxuICBpZiAobmVlZGxlTGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgbmVlZGxlIGNhbm5vdCBiZSBhbiBlbXB0eSBTdHJpbmcvQnVmZmVyLicpXG4gIH1cblxuICBpZiAobmVlZGxlTGVuZ3RoID4gMjU2KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgbmVlZGxlIGNhbm5vdCBoYXZlIGEgbGVuZ3RoIGJpZ2dlciB0aGFuIDI1Ni4nKVxuICB9XG5cbiAgdGhpcy5tYXhNYXRjaGVzID0gSW5maW5pdHlcbiAgdGhpcy5tYXRjaGVzID0gMFxuXG4gIHRoaXMuX29jYyA9IG5ldyBBcnJheSgyNTYpXG4gICAgLmZpbGwobmVlZGxlTGVuZ3RoKSAvLyBJbml0aWFsaXplIG9jY3VycmVuY2UgdGFibGUuXG4gIHRoaXMuX2xvb2tiZWhpbmRfc2l6ZSA9IDBcbiAgdGhpcy5fbmVlZGxlID0gbmVlZGxlXG4gIHRoaXMuX2J1ZnBvcyA9IDBcblxuICB0aGlzLl9sb29rYmVoaW5kID0gQnVmZmVyLmFsbG9jKG5lZWRsZUxlbmd0aClcblxuICAvLyBQb3B1bGF0ZSBvY2N1cnJlbmNlIHRhYmxlIHdpdGggYW5hbHlzaXMgb2YgdGhlIG5lZWRsZSxcbiAgLy8gaWdub3JpbmcgbGFzdCBsZXR0ZXIuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbmVlZGxlTGVuZ3RoIC0gMTsgKytpKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdmFyXG4gICAgdGhpcy5fb2NjW25lZWRsZVtpXV0gPSBuZWVkbGVMZW5ndGggLSAxIC0gaVxuICB9XG59XG5pbmhlcml0cyhTQk1ILCBFdmVudEVtaXR0ZXIpXG5cblNCTUgucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLl9sb29rYmVoaW5kX3NpemUgPSAwXG4gIHRoaXMubWF0Y2hlcyA9IDBcbiAgdGhpcy5fYnVmcG9zID0gMFxufVxuXG5TQk1ILnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGNodW5rLCBwb3MpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoY2h1bmspKSB7XG4gICAgY2h1bmsgPSBCdWZmZXIuZnJvbShjaHVuaywgJ2JpbmFyeScpXG4gIH1cbiAgY29uc3QgY2hsZW4gPSBjaHVuay5sZW5ndGhcbiAgdGhpcy5fYnVmcG9zID0gcG9zIHx8IDBcbiAgbGV0IHJcbiAgd2hpbGUgKHIgIT09IGNobGVuICYmIHRoaXMubWF0Y2hlcyA8IHRoaXMubWF4TWF0Y2hlcykgeyByID0gdGhpcy5fc2JtaF9mZWVkKGNodW5rKSB9XG4gIHJldHVybiByXG59XG5cblNCTUgucHJvdG90eXBlLl9zYm1oX2ZlZWQgPSBmdW5jdGlvbiAoZGF0YSkge1xuICBjb25zdCBsZW4gPSBkYXRhLmxlbmd0aFxuICBjb25zdCBuZWVkbGUgPSB0aGlzLl9uZWVkbGVcbiAgY29uc3QgbmVlZGxlTGVuZ3RoID0gbmVlZGxlLmxlbmd0aFxuICBjb25zdCBsYXN0TmVlZGxlQ2hhciA9IG5lZWRsZVtuZWVkbGVMZW5ndGggLSAxXVxuXG4gIC8vIFBvc2l0aXZlOiBwb2ludHMgdG8gYSBwb3NpdGlvbiBpbiBgZGF0YWBcbiAgLy8gICAgICAgICAgIHBvcyA9PSAzIHBvaW50cyB0byBkYXRhWzNdXG4gIC8vIE5lZ2F0aXZlOiBwb2ludHMgdG8gYSBwb3NpdGlvbiBpbiB0aGUgbG9va2JlaGluZCBidWZmZXJcbiAgLy8gICAgICAgICAgIHBvcyA9PSAtMiBwb2ludHMgdG8gbG9va2JlaGluZFtsb29rYmVoaW5kX3NpemUgLSAyXVxuICBsZXQgcG9zID0gLXRoaXMuX2xvb2tiZWhpbmRfc2l6ZVxuICBsZXQgY2hcblxuICBpZiAocG9zIDwgMCkge1xuICAgIC8vIExvb2tiZWhpbmQgYnVmZmVyIGlzIG5vdCBlbXB0eS4gUGVyZm9ybSBCb3llci1Nb29yZS1Ib3JzcG9vbFxuICAgIC8vIHNlYXJjaCB3aXRoIGNoYXJhY3RlciBsb29rdXAgY29kZSB0aGF0IGNvbnNpZGVycyBib3RoIHRoZVxuICAgIC8vIGxvb2tiZWhpbmQgYnVmZmVyIGFuZCB0aGUgY3VycmVudCByb3VuZCdzIGhheXN0YWNrIGRhdGEuXG4gICAgLy9cbiAgICAvLyBMb29wIHVudGlsXG4gICAgLy8gICB0aGVyZSBpcyBhIG1hdGNoLlxuICAgIC8vIG9yIHVudGlsXG4gICAgLy8gICB3ZSd2ZSBtb3ZlZCBwYXN0IHRoZSBwb3NpdGlvbiB0aGF0IHJlcXVpcmVzIHRoZVxuICAgIC8vICAgbG9va2JlaGluZCBidWZmZXIuIEluIHRoaXMgY2FzZSB3ZSBzd2l0Y2ggdG8gdGhlXG4gICAgLy8gICBvcHRpbWl6ZWQgbG9vcC5cbiAgICAvLyBvciB1bnRpbFxuICAgIC8vICAgdGhlIGNoYXJhY3RlciB0byBsb29rIGF0IGxpZXMgb3V0c2lkZSB0aGUgaGF5c3RhY2suXG4gICAgd2hpbGUgKHBvcyA8IDAgJiYgcG9zIDw9IGxlbiAtIG5lZWRsZUxlbmd0aCkge1xuICAgICAgY2ggPSB0aGlzLl9zYm1oX2xvb2t1cF9jaGFyKGRhdGEsIHBvcyArIG5lZWRsZUxlbmd0aCAtIDEpXG5cbiAgICAgIGlmIChcbiAgICAgICAgY2ggPT09IGxhc3ROZWVkbGVDaGFyICYmXG4gICAgICAgIHRoaXMuX3NibWhfbWVtY21wKGRhdGEsIHBvcywgbmVlZGxlTGVuZ3RoIC0gMSlcbiAgICAgICkge1xuICAgICAgICB0aGlzLl9sb29rYmVoaW5kX3NpemUgPSAwXG4gICAgICAgICsrdGhpcy5tYXRjaGVzXG4gICAgICAgIHRoaXMuZW1pdCgnaW5mbycsIHRydWUpXG5cbiAgICAgICAgcmV0dXJuICh0aGlzLl9idWZwb3MgPSBwb3MgKyBuZWVkbGVMZW5ndGgpXG4gICAgICB9XG4gICAgICBwb3MgKz0gdGhpcy5fb2NjW2NoXVxuICAgIH1cblxuICAgIC8vIE5vIG1hdGNoLlxuXG4gICAgaWYgKHBvcyA8IDApIHtcbiAgICAgIC8vIFRoZXJlJ3MgdG9vIGZldyBkYXRhIGZvciBCb3llci1Nb29yZS1Ib3JzcG9vbCB0byBydW4sXG4gICAgICAvLyBzbyBsZXQncyB1c2UgYSBkaWZmZXJlbnQgYWxnb3JpdGhtIHRvIHNraXAgYXMgbXVjaCBhc1xuICAgICAgLy8gd2UgY2FuLlxuICAgICAgLy8gRm9yd2FyZCBwb3MgdW50aWxcbiAgICAgIC8vICAgdGhlIHRyYWlsaW5nIHBhcnQgb2YgbG9va2JlaGluZCArIGRhdGFcbiAgICAgIC8vICAgbG9va3MgbGlrZSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZWVkbGVcbiAgICAgIC8vIG9yIHVudGlsXG4gICAgICAvLyAgIHBvcyA9PSAwXG4gICAgICB3aGlsZSAocG9zIDwgMCAmJiAhdGhpcy5fc2JtaF9tZW1jbXAoZGF0YSwgcG9zLCBsZW4gLSBwb3MpKSB7ICsrcG9zIH1cbiAgICB9XG5cbiAgICBpZiAocG9zID49IDApIHtcbiAgICAgIC8vIERpc2NhcmQgbG9va2JlaGluZCBidWZmZXIuXG4gICAgICB0aGlzLmVtaXQoJ2luZm8nLCBmYWxzZSwgdGhpcy5fbG9va2JlaGluZCwgMCwgdGhpcy5fbG9va2JlaGluZF9zaXplKVxuICAgICAgdGhpcy5fbG9va2JlaGluZF9zaXplID0gMFxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDdXQgb2ZmIHBhcnQgb2YgdGhlIGxvb2tiZWhpbmQgYnVmZmVyIHRoYXQgaGFzXG4gICAgICAvLyBiZWVuIHByb2Nlc3NlZCBhbmQgYXBwZW5kIHRoZSBlbnRpcmUgaGF5c3RhY2tcbiAgICAgIC8vIGludG8gaXQuXG4gICAgICBjb25zdCBieXRlc1RvQ3V0T2ZmID0gdGhpcy5fbG9va2JlaGluZF9zaXplICsgcG9zXG4gICAgICBpZiAoYnl0ZXNUb0N1dE9mZiA+IDApIHtcbiAgICAgICAgLy8gVGhlIGN1dCBvZmYgZGF0YSBpcyBndWFyYW50ZWVkIG5vdCB0byBjb250YWluIHRoZSBuZWVkbGUuXG4gICAgICAgIHRoaXMuZW1pdCgnaW5mbycsIGZhbHNlLCB0aGlzLl9sb29rYmVoaW5kLCAwLCBieXRlc1RvQ3V0T2ZmKVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9sb29rYmVoaW5kLmNvcHkodGhpcy5fbG9va2JlaGluZCwgMCwgYnl0ZXNUb0N1dE9mZixcbiAgICAgICAgdGhpcy5fbG9va2JlaGluZF9zaXplIC0gYnl0ZXNUb0N1dE9mZilcbiAgICAgIHRoaXMuX2xvb2tiZWhpbmRfc2l6ZSAtPSBieXRlc1RvQ3V0T2ZmXG5cbiAgICAgIGRhdGEuY29weSh0aGlzLl9sb29rYmVoaW5kLCB0aGlzLl9sb29rYmVoaW5kX3NpemUpXG4gICAgICB0aGlzLl9sb29rYmVoaW5kX3NpemUgKz0gbGVuXG5cbiAgICAgIHRoaXMuX2J1ZnBvcyA9IGxlblxuICAgICAgcmV0dXJuIGxlblxuICAgIH1cbiAgfVxuXG4gIHBvcyArPSAocG9zID49IDApICogdGhpcy5fYnVmcG9zXG5cbiAgLy8gTG9va2JlaGluZCBidWZmZXIgaXMgbm93IGVtcHR5LiBXZSBvbmx5IG5lZWQgdG8gY2hlY2sgaWYgdGhlXG4gIC8vIG5lZWRsZSBpcyBpbiB0aGUgaGF5c3RhY2suXG4gIGlmIChkYXRhLmluZGV4T2YobmVlZGxlLCBwb3MpICE9PSAtMSkge1xuICAgIHBvcyA9IGRhdGEuaW5kZXhPZihuZWVkbGUsIHBvcylcbiAgICArK3RoaXMubWF0Y2hlc1xuICAgIGlmIChwb3MgPiAwKSB7IHRoaXMuZW1pdCgnaW5mbycsIHRydWUsIGRhdGEsIHRoaXMuX2J1ZnBvcywgcG9zKSB9IGVsc2UgeyB0aGlzLmVtaXQoJ2luZm8nLCB0cnVlKSB9XG5cbiAgICByZXR1cm4gKHRoaXMuX2J1ZnBvcyA9IHBvcyArIG5lZWRsZUxlbmd0aClcbiAgfSBlbHNlIHtcbiAgICBwb3MgPSBsZW4gLSBuZWVkbGVMZW5ndGhcbiAgfVxuXG4gIC8vIFRoZXJlIHdhcyBubyBtYXRjaC4gSWYgdGhlcmUncyB0cmFpbGluZyBoYXlzdGFjayBkYXRhIHRoYXQgd2UgY2Fubm90XG4gIC8vIG1hdGNoIHlldCB1c2luZyB0aGUgQm95ZXItTW9vcmUtSG9yc3Bvb2wgYWxnb3JpdGhtIChiZWNhdXNlIHRoZSB0cmFpbGluZ1xuICAvLyBkYXRhIGlzIGxlc3MgdGhhbiB0aGUgbmVlZGxlIHNpemUpIHRoZW4gbWF0Y2ggdXNpbmcgYSBtb2RpZmllZFxuICAvLyBhbGdvcml0aG0gdGhhdCBzdGFydHMgbWF0Y2hpbmcgZnJvbSB0aGUgYmVnaW5uaW5nIGluc3RlYWQgb2YgdGhlIGVuZC5cbiAgLy8gV2hhdGV2ZXIgdHJhaWxpbmcgZGF0YSBpcyBsZWZ0IGFmdGVyIHJ1bm5pbmcgdGhpcyBhbGdvcml0aG0gaXMgYWRkZWQgdG9cbiAgLy8gdGhlIGxvb2tiZWhpbmQgYnVmZmVyLlxuICB3aGlsZSAoXG4gICAgcG9zIDwgbGVuICYmXG4gICAgKFxuICAgICAgZGF0YVtwb3NdICE9PSBuZWVkbGVbMF0gfHxcbiAgICAgIChcbiAgICAgICAgKEJ1ZmZlci5jb21wYXJlKFxuICAgICAgICAgIGRhdGEuc3ViYXJyYXkocG9zLCBwb3MgKyBsZW4gLSBwb3MpLFxuICAgICAgICAgIG5lZWRsZS5zdWJhcnJheSgwLCBsZW4gLSBwb3MpXG4gICAgICAgICkgIT09IDApXG4gICAgICApXG4gICAgKVxuICApIHtcbiAgICArK3Bvc1xuICB9XG4gIGlmIChwb3MgPCBsZW4pIHtcbiAgICBkYXRhLmNvcHkodGhpcy5fbG9va2JlaGluZCwgMCwgcG9zLCBwb3MgKyAobGVuIC0gcG9zKSlcbiAgICB0aGlzLl9sb29rYmVoaW5kX3NpemUgPSBsZW4gLSBwb3NcbiAgfVxuXG4gIC8vIEV2ZXJ5dGhpbmcgdW50aWwgcG9zIGlzIGd1YXJhbnRlZWQgbm90IHRvIGNvbnRhaW4gbmVlZGxlIGRhdGEuXG4gIGlmIChwb3MgPiAwKSB7IHRoaXMuZW1pdCgnaW5mbycsIGZhbHNlLCBkYXRhLCB0aGlzLl9idWZwb3MsIHBvcyA8IGxlbiA/IHBvcyA6IGxlbikgfVxuXG4gIHRoaXMuX2J1ZnBvcyA9IGxlblxuICByZXR1cm4gbGVuXG59XG5cblNCTUgucHJvdG90eXBlLl9zYm1oX2xvb2t1cF9jaGFyID0gZnVuY3Rpb24gKGRhdGEsIHBvcykge1xuICByZXR1cm4gKHBvcyA8IDApXG4gICAgPyB0aGlzLl9sb29rYmVoaW5kW3RoaXMuX2xvb2tiZWhpbmRfc2l6ZSArIHBvc11cbiAgICA6IGRhdGFbcG9zXVxufVxuXG5TQk1ILnByb3RvdHlwZS5fc2JtaF9tZW1jbXAgPSBmdW5jdGlvbiAoZGF0YSwgcG9zLCBsZW4pIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXZhclxuICAgIGlmICh0aGlzLl9zYm1oX2xvb2t1cF9jaGFyKGRhdGEsIHBvcyArIGkpICE9PSB0aGlzLl9uZWVkbGVbaV0pIHsgcmV0dXJuIGZhbHNlIH1cbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNCTUhcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGluaGVyaXRzID0gcmVxdWlyZSgnbm9kZTp1dGlsJykuaW5oZXJpdHNcbmNvbnN0IFJlYWRhYmxlU3RyZWFtID0gcmVxdWlyZSgnbm9kZTpzdHJlYW0nKS5SZWFkYWJsZVxuXG5mdW5jdGlvbiBQYXJ0U3RyZWFtIChvcHRzKSB7XG4gIFJlYWRhYmxlU3RyZWFtLmNhbGwodGhpcywgb3B0cylcbn1cbmluaGVyaXRzKFBhcnRTdHJlYW0sIFJlYWRhYmxlU3RyZWFtKVxuXG5QYXJ0U3RyZWFtLnByb3RvdHlwZS5fcmVhZCA9IGZ1bmN0aW9uIChuKSB7fVxuXG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRTdHJlYW1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0TGltaXQgKGxpbWl0cywgbmFtZSwgZGVmYXVsdExpbWl0KSB7XG4gIGlmIChcbiAgICAhbGltaXRzIHx8XG4gICAgbGltaXRzW25hbWVdID09PSB1bmRlZmluZWQgfHxcbiAgICBsaW1pdHNbbmFtZV0gPT09IG51bGxcbiAgKSB7IHJldHVybiBkZWZhdWx0TGltaXQgfVxuXG4gIGlmIChcbiAgICB0eXBlb2YgbGltaXRzW25hbWVdICE9PSAnbnVtYmVyJyB8fFxuICAgIGlzTmFOKGxpbWl0c1tuYW1lXSlcbiAgKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoJ0xpbWl0ICcgKyBuYW1lICsgJyBpcyBub3QgYSB2YWxpZCBudW1iZXInKSB9XG5cbiAgcmV0dXJuIGxpbWl0c1tuYW1lXVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnbm9kZTpldmVudHMnKS5FdmVudEVtaXR0ZXJcbmNvbnN0IGluaGVyaXRzID0gcmVxdWlyZSgnbm9kZTp1dGlsJykuaW5oZXJpdHNcbmNvbnN0IGdldExpbWl0ID0gcmVxdWlyZSgnLi4vLi4vLi4vbGliL3V0aWxzL2dldExpbWl0JylcblxuY29uc3QgU3RyZWFtU2VhcmNoID0gcmVxdWlyZSgnLi4vLi4vc3RyZWFtc2VhcmNoL3NibWgnKVxuXG5jb25zdCBCX0RDUkxGID0gQnVmZmVyLmZyb20oJ1xcclxcblxcclxcbicpXG5jb25zdCBSRV9DUkxGID0gL1xcclxcbi9nXG5jb25zdCBSRV9IRFIgPSAvXihbXjpdKyk6WyBcXHRdPyhbXFx4MDAtXFx4RkZdKyk/JC8gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb250cm9sLXJlZ2V4XG5cbmZ1bmN0aW9uIEhlYWRlclBhcnNlciAoY2ZnKSB7XG4gIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpXG5cbiAgY2ZnID0gY2ZnIHx8IHt9XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIHRoaXMubnJlYWQgPSAwXG4gIHRoaXMubWF4ZWQgPSBmYWxzZVxuICB0aGlzLm5wYWlycyA9IDBcbiAgdGhpcy5tYXhIZWFkZXJQYWlycyA9IGdldExpbWl0KGNmZywgJ21heEhlYWRlclBhaXJzJywgMjAwMClcbiAgdGhpcy5tYXhIZWFkZXJTaXplID0gZ2V0TGltaXQoY2ZnLCAnbWF4SGVhZGVyU2l6ZScsIDgwICogMTAyNClcbiAgdGhpcy5idWZmZXIgPSAnJ1xuICB0aGlzLmhlYWRlciA9IHt9XG4gIHRoaXMuZmluaXNoZWQgPSBmYWxzZVxuICB0aGlzLnNzID0gbmV3IFN0cmVhbVNlYXJjaChCX0RDUkxGKVxuICB0aGlzLnNzLm9uKCdpbmZvJywgZnVuY3Rpb24gKGlzTWF0Y2gsIGRhdGEsIHN0YXJ0LCBlbmQpIHtcbiAgICBpZiAoZGF0YSAmJiAhc2VsZi5tYXhlZCkge1xuICAgICAgaWYgKHNlbGYubnJlYWQgKyBlbmQgLSBzdGFydCA+PSBzZWxmLm1heEhlYWRlclNpemUpIHtcbiAgICAgICAgZW5kID0gc2VsZi5tYXhIZWFkZXJTaXplIC0gc2VsZi5ucmVhZCArIHN0YXJ0XG4gICAgICAgIHNlbGYubnJlYWQgPSBzZWxmLm1heEhlYWRlclNpemVcbiAgICAgICAgc2VsZi5tYXhlZCA9IHRydWVcbiAgICAgIH0gZWxzZSB7IHNlbGYubnJlYWQgKz0gKGVuZCAtIHN0YXJ0KSB9XG5cbiAgICAgIHNlbGYuYnVmZmVyICs9IGRhdGEudG9TdHJpbmcoJ2JpbmFyeScsIHN0YXJ0LCBlbmQpXG4gICAgfVxuICAgIGlmIChpc01hdGNoKSB7IHNlbGYuX2ZpbmlzaCgpIH1cbiAgfSlcbn1cbmluaGVyaXRzKEhlYWRlclBhcnNlciwgRXZlbnRFbWl0dGVyKVxuXG5IZWFkZXJQYXJzZXIucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoZGF0YSkge1xuICBjb25zdCByID0gdGhpcy5zcy5wdXNoKGRhdGEpXG4gIGlmICh0aGlzLmZpbmlzaGVkKSB7IHJldHVybiByIH1cbn1cblxuSGVhZGVyUGFyc2VyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5maW5pc2hlZCA9IGZhbHNlXG4gIHRoaXMuYnVmZmVyID0gJydcbiAgdGhpcy5oZWFkZXIgPSB7fVxuICB0aGlzLnNzLnJlc2V0KClcbn1cblxuSGVhZGVyUGFyc2VyLnByb3RvdHlwZS5fZmluaXNoID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5idWZmZXIpIHsgdGhpcy5fcGFyc2VIZWFkZXIoKSB9XG4gIHRoaXMuc3MubWF0Y2hlcyA9IHRoaXMuc3MubWF4TWF0Y2hlc1xuICBjb25zdCBoZWFkZXIgPSB0aGlzLmhlYWRlclxuICB0aGlzLmhlYWRlciA9IHt9XG4gIHRoaXMuYnVmZmVyID0gJydcbiAgdGhpcy5maW5pc2hlZCA9IHRydWVcbiAgdGhpcy5ucmVhZCA9IHRoaXMubnBhaXJzID0gMFxuICB0aGlzLm1heGVkID0gZmFsc2VcbiAgdGhpcy5lbWl0KCdoZWFkZXInLCBoZWFkZXIpXG59XG5cbkhlYWRlclBhcnNlci5wcm90b3R5cGUuX3BhcnNlSGVhZGVyID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5ucGFpcnMgPT09IHRoaXMubWF4SGVhZGVyUGFpcnMpIHsgcmV0dXJuIH1cblxuICBjb25zdCBsaW5lcyA9IHRoaXMuYnVmZmVyLnNwbGl0KFJFX0NSTEYpXG4gIGNvbnN0IGxlbiA9IGxpbmVzLmxlbmd0aFxuICBsZXQgbSwgaFxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby12YXJcbiAgICBpZiAobGluZXNbaV0ubGVuZ3RoID09PSAwKSB7IGNvbnRpbnVlIH1cbiAgICBpZiAobGluZXNbaV1bMF0gPT09ICdcXHQnIHx8IGxpbmVzW2ldWzBdID09PSAnICcpIHtcbiAgICAgIC8vIGZvbGRlZCBoZWFkZXIgY29udGVudFxuICAgICAgLy8gUkZDMjgyMiBzYXlzIHRvIGp1c3QgcmVtb3ZlIHRoZSBDUkxGIGFuZCBub3QgdGhlIHdoaXRlc3BhY2UgZm9sbG93aW5nXG4gICAgICAvLyBpdCwgc28gd2UgZm9sbG93IHRoZSBSRkMgYW5kIGluY2x1ZGUgdGhlIGxlYWRpbmcgd2hpdGVzcGFjZSAuLi5cbiAgICAgIGlmIChoKSB7XG4gICAgICAgIHRoaXMuaGVhZGVyW2hdW3RoaXMuaGVhZGVyW2hdLmxlbmd0aCAtIDFdICs9IGxpbmVzW2ldXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcG9zQ29sb24gPSBsaW5lc1tpXS5pbmRleE9mKCc6JylcbiAgICBpZiAoXG4gICAgICBwb3NDb2xvbiA9PT0gLTEgfHxcbiAgICAgIHBvc0NvbG9uID09PSAwXG4gICAgKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgbSA9IFJFX0hEUi5leGVjKGxpbmVzW2ldKVxuICAgIGggPSBtWzFdLnRvTG93ZXJDYXNlKClcbiAgICB0aGlzLmhlYWRlcltoXSA9IHRoaXMuaGVhZGVyW2hdIHx8IFtdXG4gICAgdGhpcy5oZWFkZXJbaF0ucHVzaCgobVsyXSB8fCAnJykpXG4gICAgaWYgKCsrdGhpcy5ucGFpcnMgPT09IHRoaXMubWF4SGVhZGVyUGFpcnMpIHsgYnJlYWsgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gSGVhZGVyUGFyc2VyXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBXcml0YWJsZVN0cmVhbSA9IHJlcXVpcmUoJ25vZGU6c3RyZWFtJykuV3JpdGFibGVcbmNvbnN0IGluaGVyaXRzID0gcmVxdWlyZSgnbm9kZTp1dGlsJykuaW5oZXJpdHNcblxuY29uc3QgU3RyZWFtU2VhcmNoID0gcmVxdWlyZSgnLi4vLi4vc3RyZWFtc2VhcmNoL3NibWgnKVxuXG5jb25zdCBQYXJ0U3RyZWFtID0gcmVxdWlyZSgnLi9QYXJ0U3RyZWFtJylcbmNvbnN0IEhlYWRlclBhcnNlciA9IHJlcXVpcmUoJy4vSGVhZGVyUGFyc2VyJylcblxuY29uc3QgREFTSCA9IDQ1XG5jb25zdCBCX09ORURBU0ggPSBCdWZmZXIuZnJvbSgnLScpXG5jb25zdCBCX0NSTEYgPSBCdWZmZXIuZnJvbSgnXFxyXFxuJylcbmNvbnN0IEVNUFRZX0ZOID0gZnVuY3Rpb24gKCkge31cblxuZnVuY3Rpb24gRGljZXIgKGNmZykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRGljZXIpKSB7IHJldHVybiBuZXcgRGljZXIoY2ZnKSB9XG4gIFdyaXRhYmxlU3RyZWFtLmNhbGwodGhpcywgY2ZnKVxuXG4gIGlmICghY2ZnIHx8ICghY2ZnLmhlYWRlckZpcnN0ICYmIHR5cGVvZiBjZmcuYm91bmRhcnkgIT09ICdzdHJpbmcnKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCdCb3VuZGFyeSByZXF1aXJlZCcpIH1cblxuICBpZiAodHlwZW9mIGNmZy5ib3VuZGFyeSA9PT0gJ3N0cmluZycpIHsgdGhpcy5zZXRCb3VuZGFyeShjZmcuYm91bmRhcnkpIH0gZWxzZSB7IHRoaXMuX2JwYXJzZXIgPSB1bmRlZmluZWQgfVxuXG4gIHRoaXMuX2hlYWRlckZpcnN0ID0gY2ZnLmhlYWRlckZpcnN0XG5cbiAgdGhpcy5fZGFzaGVzID0gMFxuICB0aGlzLl9wYXJ0cyA9IDBcbiAgdGhpcy5fZmluaXNoZWQgPSBmYWxzZVxuICB0aGlzLl9yZWFsRmluaXNoID0gZmFsc2VcbiAgdGhpcy5faXNQcmVhbWJsZSA9IHRydWVcbiAgdGhpcy5fanVzdE1hdGNoZWQgPSBmYWxzZVxuICB0aGlzLl9maXJzdFdyaXRlID0gdHJ1ZVxuICB0aGlzLl9pbkhlYWRlciA9IHRydWVcbiAgdGhpcy5fcGFydCA9IHVuZGVmaW5lZFxuICB0aGlzLl9jYiA9IHVuZGVmaW5lZFxuICB0aGlzLl9pZ25vcmVEYXRhID0gZmFsc2VcbiAgdGhpcy5fcGFydE9wdHMgPSB7IGhpZ2hXYXRlck1hcms6IGNmZy5wYXJ0SHdtIH1cbiAgdGhpcy5fcGF1c2UgPSBmYWxzZVxuXG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIHRoaXMuX2hwYXJzZXIgPSBuZXcgSGVhZGVyUGFyc2VyKGNmZylcbiAgdGhpcy5faHBhcnNlci5vbignaGVhZGVyJywgZnVuY3Rpb24gKGhlYWRlcikge1xuICAgIHNlbGYuX2luSGVhZGVyID0gZmFsc2VcbiAgICBzZWxmLl9wYXJ0LmVtaXQoJ2hlYWRlcicsIGhlYWRlcilcbiAgfSlcbn1cbmluaGVyaXRzKERpY2VyLCBXcml0YWJsZVN0cmVhbSlcblxuRGljZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiAoZXYpIHtcbiAgaWYgKGV2ID09PSAnZmluaXNoJyAmJiAhdGhpcy5fcmVhbEZpbmlzaCkge1xuICAgIGlmICghdGhpcy5fZmluaXNoZWQpIHtcbiAgICAgIGNvbnN0IHNlbGYgPSB0aGlzXG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2VsZi5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcignVW5leHBlY3RlZCBlbmQgb2YgbXVsdGlwYXJ0IGRhdGEnKSlcbiAgICAgICAgaWYgKHNlbGYuX3BhcnQgJiYgIXNlbGYuX2lnbm9yZURhdGEpIHtcbiAgICAgICAgICBjb25zdCB0eXBlID0gKHNlbGYuX2lzUHJlYW1ibGUgPyAnUHJlYW1ibGUnIDogJ1BhcnQnKVxuICAgICAgICAgIHNlbGYuX3BhcnQuZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IodHlwZSArICcgdGVybWluYXRlZCBlYXJseSBkdWUgdG8gdW5leHBlY3RlZCBlbmQgb2YgbXVsdGlwYXJ0IGRhdGEnKSlcbiAgICAgICAgICBzZWxmLl9wYXJ0LnB1c2gobnVsbClcbiAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHNlbGYuX3JlYWxGaW5pc2ggPSB0cnVlXG4gICAgICAgICAgICBzZWxmLmVtaXQoJ2ZpbmlzaCcpXG4gICAgICAgICAgICBzZWxmLl9yZWFsRmluaXNoID0gZmFsc2VcbiAgICAgICAgICB9KVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIHNlbGYuX3JlYWxGaW5pc2ggPSB0cnVlXG4gICAgICAgIHNlbGYuZW1pdCgnZmluaXNoJylcbiAgICAgICAgc2VsZi5fcmVhbEZpbmlzaCA9IGZhbHNlXG4gICAgICB9KVxuICAgIH1cbiAgfSBlbHNlIHsgV3JpdGFibGVTdHJlYW0ucHJvdG90eXBlLmVtaXQuYXBwbHkodGhpcywgYXJndW1lbnRzKSB9XG59XG5cbkRpY2VyLnByb3RvdHlwZS5fd3JpdGUgPSBmdW5jdGlvbiAoZGF0YSwgZW5jb2RpbmcsIGNiKSB7XG4gIC8vIGlnbm9yZSB1bmV4cGVjdGVkIGRhdGEgKGUuZy4gZXh0cmEgdHJhaWxlciBkYXRhIGFmdGVyIGZpbmlzaGVkKVxuICBpZiAoIXRoaXMuX2hwYXJzZXIgJiYgIXRoaXMuX2JwYXJzZXIpIHsgcmV0dXJuIGNiKCkgfVxuXG4gIGlmICh0aGlzLl9oZWFkZXJGaXJzdCAmJiB0aGlzLl9pc1ByZWFtYmxlKSB7XG4gICAgaWYgKCF0aGlzLl9wYXJ0KSB7XG4gICAgICB0aGlzLl9wYXJ0ID0gbmV3IFBhcnRTdHJlYW0odGhpcy5fcGFydE9wdHMpXG4gICAgICBpZiAodGhpcy5saXN0ZW5lckNvdW50KCdwcmVhbWJsZScpICE9PSAwKSB7IHRoaXMuZW1pdCgncHJlYW1ibGUnLCB0aGlzLl9wYXJ0KSB9IGVsc2UgeyB0aGlzLl9pZ25vcmUoKSB9XG4gICAgfVxuICAgIGNvbnN0IHIgPSB0aGlzLl9ocGFyc2VyLnB1c2goZGF0YSlcbiAgICBpZiAoIXRoaXMuX2luSGVhZGVyICYmIHIgIT09IHVuZGVmaW5lZCAmJiByIDwgZGF0YS5sZW5ndGgpIHsgZGF0YSA9IGRhdGEuc2xpY2UocikgfSBlbHNlIHsgcmV0dXJuIGNiKCkgfVxuICB9XG5cbiAgLy8gYWxsb3dzIGZvciBcImVhc2llclwiIHRlc3RpbmdcbiAgaWYgKHRoaXMuX2ZpcnN0V3JpdGUpIHtcbiAgICB0aGlzLl9icGFyc2VyLnB1c2goQl9DUkxGKVxuICAgIHRoaXMuX2ZpcnN0V3JpdGUgPSBmYWxzZVxuICB9XG5cbiAgdGhpcy5fYnBhcnNlci5wdXNoKGRhdGEpXG5cbiAgaWYgKHRoaXMuX3BhdXNlKSB7IHRoaXMuX2NiID0gY2IgfSBlbHNlIHsgY2IoKSB9XG59XG5cbkRpY2VyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5fcGFydCA9IHVuZGVmaW5lZFxuICB0aGlzLl9icGFyc2VyID0gdW5kZWZpbmVkXG4gIHRoaXMuX2hwYXJzZXIgPSB1bmRlZmluZWRcbn1cblxuRGljZXIucHJvdG90eXBlLnNldEJvdW5kYXJ5ID0gZnVuY3Rpb24gKGJvdW5kYXJ5KSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIHRoaXMuX2JwYXJzZXIgPSBuZXcgU3RyZWFtU2VhcmNoKCdcXHJcXG4tLScgKyBib3VuZGFyeSlcbiAgdGhpcy5fYnBhcnNlci5vbignaW5mbycsIGZ1bmN0aW9uIChpc01hdGNoLCBkYXRhLCBzdGFydCwgZW5kKSB7XG4gICAgc2VsZi5fb25pbmZvKGlzTWF0Y2gsIGRhdGEsIHN0YXJ0LCBlbmQpXG4gIH0pXG59XG5cbkRpY2VyLnByb3RvdHlwZS5faWdub3JlID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5fcGFydCAmJiAhdGhpcy5faWdub3JlRGF0YSkge1xuICAgIHRoaXMuX2lnbm9yZURhdGEgPSB0cnVlXG4gICAgdGhpcy5fcGFydC5vbignZXJyb3InLCBFTVBUWV9GTilcbiAgICAvLyB3ZSBtdXN0IHBlcmZvcm0gc29tZSBraW5kIG9mIHJlYWQgb24gdGhlIHN0cmVhbSBldmVuIHRob3VnaCB3ZSBhcmVcbiAgICAvLyBpZ25vcmluZyB0aGUgZGF0YSwgb3RoZXJ3aXNlIG5vZGUncyBSZWFkYWJsZSBzdHJlYW0gd2lsbCBub3QgZW1pdCAnZW5kJ1xuICAgIC8vIGFmdGVyIHB1c2hpbmcgbnVsbCB0byB0aGUgc3RyZWFtXG4gICAgdGhpcy5fcGFydC5yZXN1bWUoKVxuICB9XG59XG5cbkRpY2VyLnByb3RvdHlwZS5fb25pbmZvID0gZnVuY3Rpb24gKGlzTWF0Y2gsIGRhdGEsIHN0YXJ0LCBlbmQpIHtcbiAgbGV0IGJ1ZjsgY29uc3Qgc2VsZiA9IHRoaXM7IGxldCBpID0gMDsgbGV0IHI7IGxldCBzaG91bGRXcml0ZU1vcmUgPSB0cnVlXG5cbiAgaWYgKCF0aGlzLl9wYXJ0ICYmIHRoaXMuX2p1c3RNYXRjaGVkICYmIGRhdGEpIHtcbiAgICB3aGlsZSAodGhpcy5fZGFzaGVzIDwgMiAmJiAoc3RhcnQgKyBpKSA8IGVuZCkge1xuICAgICAgaWYgKGRhdGFbc3RhcnQgKyBpXSA9PT0gREFTSCkge1xuICAgICAgICArK2lcbiAgICAgICAgKyt0aGlzLl9kYXNoZXNcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLl9kYXNoZXMpIHsgYnVmID0gQl9PTkVEQVNIIH1cbiAgICAgICAgdGhpcy5fZGFzaGVzID0gMFxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5fZGFzaGVzID09PSAyKSB7XG4gICAgICBpZiAoKHN0YXJ0ICsgaSkgPCBlbmQgJiYgdGhpcy5saXN0ZW5lckNvdW50KCd0cmFpbGVyJykgIT09IDApIHsgdGhpcy5lbWl0KCd0cmFpbGVyJywgZGF0YS5zbGljZShzdGFydCArIGksIGVuZCkpIH1cbiAgICAgIHRoaXMucmVzZXQoKVxuICAgICAgdGhpcy5fZmluaXNoZWQgPSB0cnVlXG4gICAgICAvLyBubyBtb3JlIHBhcnRzIHdpbGwgYmUgYWRkZWRcbiAgICAgIGlmIChzZWxmLl9wYXJ0cyA9PT0gMCkge1xuICAgICAgICBzZWxmLl9yZWFsRmluaXNoID0gdHJ1ZVxuICAgICAgICBzZWxmLmVtaXQoJ2ZpbmlzaCcpXG4gICAgICAgIHNlbGYuX3JlYWxGaW5pc2ggPSBmYWxzZVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5fZGFzaGVzKSB7IHJldHVybiB9XG4gIH1cbiAgaWYgKHRoaXMuX2p1c3RNYXRjaGVkKSB7IHRoaXMuX2p1c3RNYXRjaGVkID0gZmFsc2UgfVxuICBpZiAoIXRoaXMuX3BhcnQpIHtcbiAgICB0aGlzLl9wYXJ0ID0gbmV3IFBhcnRTdHJlYW0odGhpcy5fcGFydE9wdHMpXG4gICAgdGhpcy5fcGFydC5fcmVhZCA9IGZ1bmN0aW9uIChuKSB7XG4gICAgICBzZWxmLl91bnBhdXNlKClcbiAgICB9XG4gICAgaWYgKHRoaXMuX2lzUHJlYW1ibGUgJiYgdGhpcy5saXN0ZW5lckNvdW50KCdwcmVhbWJsZScpICE9PSAwKSB7XG4gICAgICB0aGlzLmVtaXQoJ3ByZWFtYmxlJywgdGhpcy5fcGFydClcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2lzUHJlYW1ibGUgIT09IHRydWUgJiYgdGhpcy5saXN0ZW5lckNvdW50KCdwYXJ0JykgIT09IDApIHtcbiAgICAgIHRoaXMuZW1pdCgncGFydCcsIHRoaXMuX3BhcnQpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2lnbm9yZSgpXG4gICAgfVxuICAgIGlmICghdGhpcy5faXNQcmVhbWJsZSkgeyB0aGlzLl9pbkhlYWRlciA9IHRydWUgfVxuICB9XG4gIGlmIChkYXRhICYmIHN0YXJ0IDwgZW5kICYmICF0aGlzLl9pZ25vcmVEYXRhKSB7XG4gICAgaWYgKHRoaXMuX2lzUHJlYW1ibGUgfHwgIXRoaXMuX2luSGVhZGVyKSB7XG4gICAgICBpZiAoYnVmKSB7IHNob3VsZFdyaXRlTW9yZSA9IHRoaXMuX3BhcnQucHVzaChidWYpIH1cbiAgICAgIHNob3VsZFdyaXRlTW9yZSA9IHRoaXMuX3BhcnQucHVzaChkYXRhLnNsaWNlKHN0YXJ0LCBlbmQpKVxuICAgICAgaWYgKCFzaG91bGRXcml0ZU1vcmUpIHsgdGhpcy5fcGF1c2UgPSB0cnVlIH1cbiAgICB9IGVsc2UgaWYgKCF0aGlzLl9pc1ByZWFtYmxlICYmIHRoaXMuX2luSGVhZGVyKSB7XG4gICAgICBpZiAoYnVmKSB7IHRoaXMuX2hwYXJzZXIucHVzaChidWYpIH1cbiAgICAgIHIgPSB0aGlzLl9ocGFyc2VyLnB1c2goZGF0YS5zbGljZShzdGFydCwgZW5kKSlcbiAgICAgIGlmICghdGhpcy5faW5IZWFkZXIgJiYgciAhPT0gdW5kZWZpbmVkICYmIHIgPCBlbmQpIHsgdGhpcy5fb25pbmZvKGZhbHNlLCBkYXRhLCBzdGFydCArIHIsIGVuZCkgfVxuICAgIH1cbiAgfVxuICBpZiAoaXNNYXRjaCkge1xuICAgIHRoaXMuX2hwYXJzZXIucmVzZXQoKVxuICAgIGlmICh0aGlzLl9pc1ByZWFtYmxlKSB7IHRoaXMuX2lzUHJlYW1ibGUgPSBmYWxzZSB9IGVsc2Uge1xuICAgICAgaWYgKHN0YXJ0ICE9PSBlbmQpIHtcbiAgICAgICAgKyt0aGlzLl9wYXJ0c1xuICAgICAgICB0aGlzLl9wYXJ0Lm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKC0tc2VsZi5fcGFydHMgPT09IDApIHtcbiAgICAgICAgICAgIGlmIChzZWxmLl9maW5pc2hlZCkge1xuICAgICAgICAgICAgICBzZWxmLl9yZWFsRmluaXNoID0gdHJ1ZVxuICAgICAgICAgICAgICBzZWxmLmVtaXQoJ2ZpbmlzaCcpXG4gICAgICAgICAgICAgIHNlbGYuX3JlYWxGaW5pc2ggPSBmYWxzZVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2VsZi5fdW5wYXVzZSgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9wYXJ0LnB1c2gobnVsbClcbiAgICB0aGlzLl9wYXJ0ID0gdW5kZWZpbmVkXG4gICAgdGhpcy5faWdub3JlRGF0YSA9IGZhbHNlXG4gICAgdGhpcy5fanVzdE1hdGNoZWQgPSB0cnVlXG4gICAgdGhpcy5fZGFzaGVzID0gMFxuICB9XG59XG5cbkRpY2VyLnByb3RvdHlwZS5fdW5wYXVzZSA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKCF0aGlzLl9wYXVzZSkgeyByZXR1cm4gfVxuXG4gIHRoaXMuX3BhdXNlID0gZmFsc2VcbiAgaWYgKHRoaXMuX2NiKSB7XG4gICAgY29uc3QgY2IgPSB0aGlzLl9jYlxuICAgIHRoaXMuX2NiID0gdW5kZWZpbmVkXG4gICAgY2IoKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRGljZXJcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbi8vIE5vZGUgaGFzIGFsd2F5cyB1dGYtOFxuY29uc3QgdXRmOERlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoJ3V0Zi04JylcbmNvbnN0IHRleHREZWNvZGVycyA9IG5ldyBNYXAoW1xuICBbJ3V0Zi04JywgdXRmOERlY29kZXJdLFxuICBbJ3V0ZjgnLCB1dGY4RGVjb2Rlcl1cbl0pXG5cbmZ1bmN0aW9uIGdldERlY29kZXIgKGNoYXJzZXQpIHtcbiAgbGV0IGxjXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgc3dpdGNoIChjaGFyc2V0KSB7XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgICAgcmV0dXJuIGRlY29kZXJzLnV0ZjhcbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdhc2NpaSc6IC8vIFRPRE86IE1ha2UgdGhlc2UgYSBzZXBhcmF0ZSwgc3RyaWN0IGRlY29kZXI/XG4gICAgICBjYXNlICd1cy1hc2NpaSc6XG4gICAgICBjYXNlICdpc28tODg1OS0xJzpcbiAgICAgIGNhc2UgJ2lzbzg4NTktMSc6XG4gICAgICBjYXNlICdpc284ODU5MSc6XG4gICAgICBjYXNlICdpc29fODg1OS0xJzpcbiAgICAgIGNhc2UgJ3dpbmRvd3MtMTI1Mic6XG4gICAgICBjYXNlICdpc29fODg1OS0xOjE5ODcnOlxuICAgICAgY2FzZSAnY3AxMjUyJzpcbiAgICAgIGNhc2UgJ3gtY3AxMjUyJzpcbiAgICAgICAgcmV0dXJuIGRlY29kZXJzLmxhdGluMVxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgICAgcmV0dXJuIGRlY29kZXJzLnV0ZjE2bGVcbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIHJldHVybiBkZWNvZGVycy5iYXNlNjRcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsYyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbGMgPSB0cnVlXG4gICAgICAgICAgY2hhcnNldCA9IGNoYXJzZXQudG9Mb3dlckNhc2UoKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlY29kZXJzLm90aGVyLmJpbmQoY2hhcnNldClcbiAgICB9XG4gIH1cbn1cblxuY29uc3QgZGVjb2RlcnMgPSB7XG4gIHV0Zjg6IChkYXRhLCBzb3VyY2VFbmNvZGluZykgPT4ge1xuICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGRhdGEgPSBCdWZmZXIuZnJvbShkYXRhLCBzb3VyY2VFbmNvZGluZylcbiAgICB9XG4gICAgcmV0dXJuIGRhdGEudXRmOFNsaWNlKDAsIGRhdGEubGVuZ3RoKVxuICB9LFxuXG4gIGxhdGluMTogKGRhdGEsIHNvdXJjZUVuY29kaW5nKSA9PiB7XG4gICAgaWYgKGRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGRhdGFcbiAgICB9XG4gICAgcmV0dXJuIGRhdGEubGF0aW4xU2xpY2UoMCwgZGF0YS5sZW5ndGgpXG4gIH0sXG5cbiAgdXRmMTZsZTogKGRhdGEsIHNvdXJjZUVuY29kaW5nKSA9PiB7XG4gICAgaWYgKGRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgZGF0YSA9IEJ1ZmZlci5mcm9tKGRhdGEsIHNvdXJjZUVuY29kaW5nKVxuICAgIH1cbiAgICByZXR1cm4gZGF0YS51Y3MyU2xpY2UoMCwgZGF0YS5sZW5ndGgpXG4gIH0sXG5cbiAgYmFzZTY0OiAoZGF0YSwgc291cmNlRW5jb2RpbmcpID0+IHtcbiAgICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICBkYXRhID0gQnVmZmVyLmZyb20oZGF0YSwgc291cmNlRW5jb2RpbmcpXG4gICAgfVxuICAgIHJldHVybiBkYXRhLmJhc2U2NFNsaWNlKDAsIGRhdGEubGVuZ3RoKVxuICB9LFxuXG4gIG90aGVyOiAoZGF0YSwgc291cmNlRW5jb2RpbmcpID0+IHtcbiAgICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICBkYXRhID0gQnVmZmVyLmZyb20oZGF0YSwgc291cmNlRW5jb2RpbmcpXG4gICAgfVxuXG4gICAgaWYgKHRleHREZWNvZGVycy5oYXModGhpcy50b1N0cmluZygpKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHRleHREZWNvZGVycy5nZXQodGhpcykuZGVjb2RlKGRhdGEpXG4gICAgICB9IGNhdGNoIHt9XG4gICAgfVxuICAgIHJldHVybiB0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZydcbiAgICAgID8gZGF0YVxuICAgICAgOiBkYXRhLnRvU3RyaW5nKClcbiAgfVxufVxuXG5mdW5jdGlvbiBkZWNvZGVUZXh0ICh0ZXh0LCBzb3VyY2VFbmNvZGluZywgZGVzdEVuY29kaW5nKSB7XG4gIGlmICh0ZXh0KSB7XG4gICAgcmV0dXJuIGdldERlY29kZXIoZGVzdEVuY29kaW5nKSh0ZXh0LCBzb3VyY2VFbmNvZGluZylcbiAgfVxuICByZXR1cm4gdGV4dFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRlY29kZVRleHRcbiIsCiAgICAiLyogZXNsaW50LWRpc2FibGUgb2JqZWN0LXByb3BlcnR5LW5ld2xpbmUgKi9cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCBkZWNvZGVUZXh0ID0gcmVxdWlyZSgnLi9kZWNvZGVUZXh0JylcblxuY29uc3QgUkVfRU5DT0RFRCA9IC8lW2EtZkEtRjAtOV1bYS1mQS1GMC05XS9nXG5cbmNvbnN0IEVuY29kZWRMb29rdXAgPSB7XG4gICclMDAnOiAnXFx4MDAnLCAnJTAxJzogJ1xceDAxJywgJyUwMic6ICdcXHgwMicsICclMDMnOiAnXFx4MDMnLCAnJTA0JzogJ1xceDA0JyxcbiAgJyUwNSc6ICdcXHgwNScsICclMDYnOiAnXFx4MDYnLCAnJTA3JzogJ1xceDA3JywgJyUwOCc6ICdcXHgwOCcsICclMDknOiAnXFx4MDknLFxuICAnJTBhJzogJ1xceDBhJywgJyUwQSc6ICdcXHgwYScsICclMGInOiAnXFx4MGInLCAnJTBCJzogJ1xceDBiJywgJyUwYyc6ICdcXHgwYycsXG4gICclMEMnOiAnXFx4MGMnLCAnJTBkJzogJ1xceDBkJywgJyUwRCc6ICdcXHgwZCcsICclMGUnOiAnXFx4MGUnLCAnJTBFJzogJ1xceDBlJyxcbiAgJyUwZic6ICdcXHgwZicsICclMEYnOiAnXFx4MGYnLCAnJTEwJzogJ1xceDEwJywgJyUxMSc6ICdcXHgxMScsICclMTInOiAnXFx4MTInLFxuICAnJTEzJzogJ1xceDEzJywgJyUxNCc6ICdcXHgxNCcsICclMTUnOiAnXFx4MTUnLCAnJTE2JzogJ1xceDE2JywgJyUxNyc6ICdcXHgxNycsXG4gICclMTgnOiAnXFx4MTgnLCAnJTE5JzogJ1xceDE5JywgJyUxYSc6ICdcXHgxYScsICclMUEnOiAnXFx4MWEnLCAnJTFiJzogJ1xceDFiJyxcbiAgJyUxQic6ICdcXHgxYicsICclMWMnOiAnXFx4MWMnLCAnJTFDJzogJ1xceDFjJywgJyUxZCc6ICdcXHgxZCcsICclMUQnOiAnXFx4MWQnLFxuICAnJTFlJzogJ1xceDFlJywgJyUxRSc6ICdcXHgxZScsICclMWYnOiAnXFx4MWYnLCAnJTFGJzogJ1xceDFmJywgJyUyMCc6ICdcXHgyMCcsXG4gICclMjEnOiAnXFx4MjEnLCAnJTIyJzogJ1xceDIyJywgJyUyMyc6ICdcXHgyMycsICclMjQnOiAnXFx4MjQnLCAnJTI1JzogJ1xceDI1JyxcbiAgJyUyNic6ICdcXHgyNicsICclMjcnOiAnXFx4MjcnLCAnJTI4JzogJ1xceDI4JywgJyUyOSc6ICdcXHgyOScsICclMmEnOiAnXFx4MmEnLFxuICAnJTJBJzogJ1xceDJhJywgJyUyYic6ICdcXHgyYicsICclMkInOiAnXFx4MmInLCAnJTJjJzogJ1xceDJjJywgJyUyQyc6ICdcXHgyYycsXG4gICclMmQnOiAnXFx4MmQnLCAnJTJEJzogJ1xceDJkJywgJyUyZSc6ICdcXHgyZScsICclMkUnOiAnXFx4MmUnLCAnJTJmJzogJ1xceDJmJyxcbiAgJyUyRic6ICdcXHgyZicsICclMzAnOiAnXFx4MzAnLCAnJTMxJzogJ1xceDMxJywgJyUzMic6ICdcXHgzMicsICclMzMnOiAnXFx4MzMnLFxuICAnJTM0JzogJ1xceDM0JywgJyUzNSc6ICdcXHgzNScsICclMzYnOiAnXFx4MzYnLCAnJTM3JzogJ1xceDM3JywgJyUzOCc6ICdcXHgzOCcsXG4gICclMzknOiAnXFx4MzknLCAnJTNhJzogJ1xceDNhJywgJyUzQSc6ICdcXHgzYScsICclM2InOiAnXFx4M2InLCAnJTNCJzogJ1xceDNiJyxcbiAgJyUzYyc6ICdcXHgzYycsICclM0MnOiAnXFx4M2MnLCAnJTNkJzogJ1xceDNkJywgJyUzRCc6ICdcXHgzZCcsICclM2UnOiAnXFx4M2UnLFxuICAnJTNFJzogJ1xceDNlJywgJyUzZic6ICdcXHgzZicsICclM0YnOiAnXFx4M2YnLCAnJTQwJzogJ1xceDQwJywgJyU0MSc6ICdcXHg0MScsXG4gICclNDInOiAnXFx4NDInLCAnJTQzJzogJ1xceDQzJywgJyU0NCc6ICdcXHg0NCcsICclNDUnOiAnXFx4NDUnLCAnJTQ2JzogJ1xceDQ2JyxcbiAgJyU0Nyc6ICdcXHg0NycsICclNDgnOiAnXFx4NDgnLCAnJTQ5JzogJ1xceDQ5JywgJyU0YSc6ICdcXHg0YScsICclNEEnOiAnXFx4NGEnLFxuICAnJTRiJzogJ1xceDRiJywgJyU0Qic6ICdcXHg0YicsICclNGMnOiAnXFx4NGMnLCAnJTRDJzogJ1xceDRjJywgJyU0ZCc6ICdcXHg0ZCcsXG4gICclNEQnOiAnXFx4NGQnLCAnJTRlJzogJ1xceDRlJywgJyU0RSc6ICdcXHg0ZScsICclNGYnOiAnXFx4NGYnLCAnJTRGJzogJ1xceDRmJyxcbiAgJyU1MCc6ICdcXHg1MCcsICclNTEnOiAnXFx4NTEnLCAnJTUyJzogJ1xceDUyJywgJyU1Myc6ICdcXHg1MycsICclNTQnOiAnXFx4NTQnLFxuICAnJTU1JzogJ1xceDU1JywgJyU1Nic6ICdcXHg1NicsICclNTcnOiAnXFx4NTcnLCAnJTU4JzogJ1xceDU4JywgJyU1OSc6ICdcXHg1OScsXG4gICclNWEnOiAnXFx4NWEnLCAnJTVBJzogJ1xceDVhJywgJyU1Yic6ICdcXHg1YicsICclNUInOiAnXFx4NWInLCAnJTVjJzogJ1xceDVjJyxcbiAgJyU1Qyc6ICdcXHg1YycsICclNWQnOiAnXFx4NWQnLCAnJTVEJzogJ1xceDVkJywgJyU1ZSc6ICdcXHg1ZScsICclNUUnOiAnXFx4NWUnLFxuICAnJTVmJzogJ1xceDVmJywgJyU1Ric6ICdcXHg1ZicsICclNjAnOiAnXFx4NjAnLCAnJTYxJzogJ1xceDYxJywgJyU2Mic6ICdcXHg2MicsXG4gICclNjMnOiAnXFx4NjMnLCAnJTY0JzogJ1xceDY0JywgJyU2NSc6ICdcXHg2NScsICclNjYnOiAnXFx4NjYnLCAnJTY3JzogJ1xceDY3JyxcbiAgJyU2OCc6ICdcXHg2OCcsICclNjknOiAnXFx4NjknLCAnJTZhJzogJ1xceDZhJywgJyU2QSc6ICdcXHg2YScsICclNmInOiAnXFx4NmInLFxuICAnJTZCJzogJ1xceDZiJywgJyU2Yyc6ICdcXHg2YycsICclNkMnOiAnXFx4NmMnLCAnJTZkJzogJ1xceDZkJywgJyU2RCc6ICdcXHg2ZCcsXG4gICclNmUnOiAnXFx4NmUnLCAnJTZFJzogJ1xceDZlJywgJyU2Zic6ICdcXHg2ZicsICclNkYnOiAnXFx4NmYnLCAnJTcwJzogJ1xceDcwJyxcbiAgJyU3MSc6ICdcXHg3MScsICclNzInOiAnXFx4NzInLCAnJTczJzogJ1xceDczJywgJyU3NCc6ICdcXHg3NCcsICclNzUnOiAnXFx4NzUnLFxuICAnJTc2JzogJ1xceDc2JywgJyU3Nyc6ICdcXHg3NycsICclNzgnOiAnXFx4NzgnLCAnJTc5JzogJ1xceDc5JywgJyU3YSc6ICdcXHg3YScsXG4gICclN0EnOiAnXFx4N2EnLCAnJTdiJzogJ1xceDdiJywgJyU3Qic6ICdcXHg3YicsICclN2MnOiAnXFx4N2MnLCAnJTdDJzogJ1xceDdjJyxcbiAgJyU3ZCc6ICdcXHg3ZCcsICclN0QnOiAnXFx4N2QnLCAnJTdlJzogJ1xceDdlJywgJyU3RSc6ICdcXHg3ZScsICclN2YnOiAnXFx4N2YnLFxuICAnJTdGJzogJ1xceDdmJywgJyU4MCc6ICdcXHg4MCcsICclODEnOiAnXFx4ODEnLCAnJTgyJzogJ1xceDgyJywgJyU4Myc6ICdcXHg4MycsXG4gICclODQnOiAnXFx4ODQnLCAnJTg1JzogJ1xceDg1JywgJyU4Nic6ICdcXHg4NicsICclODcnOiAnXFx4ODcnLCAnJTg4JzogJ1xceDg4JyxcbiAgJyU4OSc6ICdcXHg4OScsICclOGEnOiAnXFx4OGEnLCAnJThBJzogJ1xceDhhJywgJyU4Yic6ICdcXHg4YicsICclOEInOiAnXFx4OGInLFxuICAnJThjJzogJ1xceDhjJywgJyU4Qyc6ICdcXHg4YycsICclOGQnOiAnXFx4OGQnLCAnJThEJzogJ1xceDhkJywgJyU4ZSc6ICdcXHg4ZScsXG4gICclOEUnOiAnXFx4OGUnLCAnJThmJzogJ1xceDhmJywgJyU4Ric6ICdcXHg4ZicsICclOTAnOiAnXFx4OTAnLCAnJTkxJzogJ1xceDkxJyxcbiAgJyU5Mic6ICdcXHg5MicsICclOTMnOiAnXFx4OTMnLCAnJTk0JzogJ1xceDk0JywgJyU5NSc6ICdcXHg5NScsICclOTYnOiAnXFx4OTYnLFxuICAnJTk3JzogJ1xceDk3JywgJyU5OCc6ICdcXHg5OCcsICclOTknOiAnXFx4OTknLCAnJTlhJzogJ1xceDlhJywgJyU5QSc6ICdcXHg5YScsXG4gICclOWInOiAnXFx4OWInLCAnJTlCJzogJ1xceDliJywgJyU5Yyc6ICdcXHg5YycsICclOUMnOiAnXFx4OWMnLCAnJTlkJzogJ1xceDlkJyxcbiAgJyU5RCc6ICdcXHg5ZCcsICclOWUnOiAnXFx4OWUnLCAnJTlFJzogJ1xceDllJywgJyU5Zic6ICdcXHg5ZicsICclOUYnOiAnXFx4OWYnLFxuICAnJWEwJzogJ1xceGEwJywgJyVBMCc6ICdcXHhhMCcsICclYTEnOiAnXFx4YTEnLCAnJUExJzogJ1xceGExJywgJyVhMic6ICdcXHhhMicsXG4gICclQTInOiAnXFx4YTInLCAnJWEzJzogJ1xceGEzJywgJyVBMyc6ICdcXHhhMycsICclYTQnOiAnXFx4YTQnLCAnJUE0JzogJ1xceGE0JyxcbiAgJyVhNSc6ICdcXHhhNScsICclQTUnOiAnXFx4YTUnLCAnJWE2JzogJ1xceGE2JywgJyVBNic6ICdcXHhhNicsICclYTcnOiAnXFx4YTcnLFxuICAnJUE3JzogJ1xceGE3JywgJyVhOCc6ICdcXHhhOCcsICclQTgnOiAnXFx4YTgnLCAnJWE5JzogJ1xceGE5JywgJyVBOSc6ICdcXHhhOScsXG4gICclYWEnOiAnXFx4YWEnLCAnJUFhJzogJ1xceGFhJywgJyVhQSc6ICdcXHhhYScsICclQUEnOiAnXFx4YWEnLCAnJWFiJzogJ1xceGFiJyxcbiAgJyVBYic6ICdcXHhhYicsICclYUInOiAnXFx4YWInLCAnJUFCJzogJ1xceGFiJywgJyVhYyc6ICdcXHhhYycsICclQWMnOiAnXFx4YWMnLFxuICAnJWFDJzogJ1xceGFjJywgJyVBQyc6ICdcXHhhYycsICclYWQnOiAnXFx4YWQnLCAnJUFkJzogJ1xceGFkJywgJyVhRCc6ICdcXHhhZCcsXG4gICclQUQnOiAnXFx4YWQnLCAnJWFlJzogJ1xceGFlJywgJyVBZSc6ICdcXHhhZScsICclYUUnOiAnXFx4YWUnLCAnJUFFJzogJ1xceGFlJyxcbiAgJyVhZic6ICdcXHhhZicsICclQWYnOiAnXFx4YWYnLCAnJWFGJzogJ1xceGFmJywgJyVBRic6ICdcXHhhZicsICclYjAnOiAnXFx4YjAnLFxuICAnJUIwJzogJ1xceGIwJywgJyViMSc6ICdcXHhiMScsICclQjEnOiAnXFx4YjEnLCAnJWIyJzogJ1xceGIyJywgJyVCMic6ICdcXHhiMicsXG4gICclYjMnOiAnXFx4YjMnLCAnJUIzJzogJ1xceGIzJywgJyViNCc6ICdcXHhiNCcsICclQjQnOiAnXFx4YjQnLCAnJWI1JzogJ1xceGI1JyxcbiAgJyVCNSc6ICdcXHhiNScsICclYjYnOiAnXFx4YjYnLCAnJUI2JzogJ1xceGI2JywgJyViNyc6ICdcXHhiNycsICclQjcnOiAnXFx4YjcnLFxuICAnJWI4JzogJ1xceGI4JywgJyVCOCc6ICdcXHhiOCcsICclYjknOiAnXFx4YjknLCAnJUI5JzogJ1xceGI5JywgJyViYSc6ICdcXHhiYScsXG4gICclQmEnOiAnXFx4YmEnLCAnJWJBJzogJ1xceGJhJywgJyVCQSc6ICdcXHhiYScsICclYmInOiAnXFx4YmInLCAnJUJiJzogJ1xceGJiJyxcbiAgJyViQic6ICdcXHhiYicsICclQkInOiAnXFx4YmInLCAnJWJjJzogJ1xceGJjJywgJyVCYyc6ICdcXHhiYycsICclYkMnOiAnXFx4YmMnLFxuICAnJUJDJzogJ1xceGJjJywgJyViZCc6ICdcXHhiZCcsICclQmQnOiAnXFx4YmQnLCAnJWJEJzogJ1xceGJkJywgJyVCRCc6ICdcXHhiZCcsXG4gICclYmUnOiAnXFx4YmUnLCAnJUJlJzogJ1xceGJlJywgJyViRSc6ICdcXHhiZScsICclQkUnOiAnXFx4YmUnLCAnJWJmJzogJ1xceGJmJyxcbiAgJyVCZic6ICdcXHhiZicsICclYkYnOiAnXFx4YmYnLCAnJUJGJzogJ1xceGJmJywgJyVjMCc6ICdcXHhjMCcsICclQzAnOiAnXFx4YzAnLFxuICAnJWMxJzogJ1xceGMxJywgJyVDMSc6ICdcXHhjMScsICclYzInOiAnXFx4YzInLCAnJUMyJzogJ1xceGMyJywgJyVjMyc6ICdcXHhjMycsXG4gICclQzMnOiAnXFx4YzMnLCAnJWM0JzogJ1xceGM0JywgJyVDNCc6ICdcXHhjNCcsICclYzUnOiAnXFx4YzUnLCAnJUM1JzogJ1xceGM1JyxcbiAgJyVjNic6ICdcXHhjNicsICclQzYnOiAnXFx4YzYnLCAnJWM3JzogJ1xceGM3JywgJyVDNyc6ICdcXHhjNycsICclYzgnOiAnXFx4YzgnLFxuICAnJUM4JzogJ1xceGM4JywgJyVjOSc6ICdcXHhjOScsICclQzknOiAnXFx4YzknLCAnJWNhJzogJ1xceGNhJywgJyVDYSc6ICdcXHhjYScsXG4gICclY0EnOiAnXFx4Y2EnLCAnJUNBJzogJ1xceGNhJywgJyVjYic6ICdcXHhjYicsICclQ2InOiAnXFx4Y2InLCAnJWNCJzogJ1xceGNiJyxcbiAgJyVDQic6ICdcXHhjYicsICclY2MnOiAnXFx4Y2MnLCAnJUNjJzogJ1xceGNjJywgJyVjQyc6ICdcXHhjYycsICclQ0MnOiAnXFx4Y2MnLFxuICAnJWNkJzogJ1xceGNkJywgJyVDZCc6ICdcXHhjZCcsICclY0QnOiAnXFx4Y2QnLCAnJUNEJzogJ1xceGNkJywgJyVjZSc6ICdcXHhjZScsXG4gICclQ2UnOiAnXFx4Y2UnLCAnJWNFJzogJ1xceGNlJywgJyVDRSc6ICdcXHhjZScsICclY2YnOiAnXFx4Y2YnLCAnJUNmJzogJ1xceGNmJyxcbiAgJyVjRic6ICdcXHhjZicsICclQ0YnOiAnXFx4Y2YnLCAnJWQwJzogJ1xceGQwJywgJyVEMCc6ICdcXHhkMCcsICclZDEnOiAnXFx4ZDEnLFxuICAnJUQxJzogJ1xceGQxJywgJyVkMic6ICdcXHhkMicsICclRDInOiAnXFx4ZDInLCAnJWQzJzogJ1xceGQzJywgJyVEMyc6ICdcXHhkMycsXG4gICclZDQnOiAnXFx4ZDQnLCAnJUQ0JzogJ1xceGQ0JywgJyVkNSc6ICdcXHhkNScsICclRDUnOiAnXFx4ZDUnLCAnJWQ2JzogJ1xceGQ2JyxcbiAgJyVENic6ICdcXHhkNicsICclZDcnOiAnXFx4ZDcnLCAnJUQ3JzogJ1xceGQ3JywgJyVkOCc6ICdcXHhkOCcsICclRDgnOiAnXFx4ZDgnLFxuICAnJWQ5JzogJ1xceGQ5JywgJyVEOSc6ICdcXHhkOScsICclZGEnOiAnXFx4ZGEnLCAnJURhJzogJ1xceGRhJywgJyVkQSc6ICdcXHhkYScsXG4gICclREEnOiAnXFx4ZGEnLCAnJWRiJzogJ1xceGRiJywgJyVEYic6ICdcXHhkYicsICclZEInOiAnXFx4ZGInLCAnJURCJzogJ1xceGRiJyxcbiAgJyVkYyc6ICdcXHhkYycsICclRGMnOiAnXFx4ZGMnLCAnJWRDJzogJ1xceGRjJywgJyVEQyc6ICdcXHhkYycsICclZGQnOiAnXFx4ZGQnLFxuICAnJURkJzogJ1xceGRkJywgJyVkRCc6ICdcXHhkZCcsICclREQnOiAnXFx4ZGQnLCAnJWRlJzogJ1xceGRlJywgJyVEZSc6ICdcXHhkZScsXG4gICclZEUnOiAnXFx4ZGUnLCAnJURFJzogJ1xceGRlJywgJyVkZic6ICdcXHhkZicsICclRGYnOiAnXFx4ZGYnLCAnJWRGJzogJ1xceGRmJyxcbiAgJyVERic6ICdcXHhkZicsICclZTAnOiAnXFx4ZTAnLCAnJUUwJzogJ1xceGUwJywgJyVlMSc6ICdcXHhlMScsICclRTEnOiAnXFx4ZTEnLFxuICAnJWUyJzogJ1xceGUyJywgJyVFMic6ICdcXHhlMicsICclZTMnOiAnXFx4ZTMnLCAnJUUzJzogJ1xceGUzJywgJyVlNCc6ICdcXHhlNCcsXG4gICclRTQnOiAnXFx4ZTQnLCAnJWU1JzogJ1xceGU1JywgJyVFNSc6ICdcXHhlNScsICclZTYnOiAnXFx4ZTYnLCAnJUU2JzogJ1xceGU2JyxcbiAgJyVlNyc6ICdcXHhlNycsICclRTcnOiAnXFx4ZTcnLCAnJWU4JzogJ1xceGU4JywgJyVFOCc6ICdcXHhlOCcsICclZTknOiAnXFx4ZTknLFxuICAnJUU5JzogJ1xceGU5JywgJyVlYSc6ICdcXHhlYScsICclRWEnOiAnXFx4ZWEnLCAnJWVBJzogJ1xceGVhJywgJyVFQSc6ICdcXHhlYScsXG4gICclZWInOiAnXFx4ZWInLCAnJUViJzogJ1xceGViJywgJyVlQic6ICdcXHhlYicsICclRUInOiAnXFx4ZWInLCAnJWVjJzogJ1xceGVjJyxcbiAgJyVFYyc6ICdcXHhlYycsICclZUMnOiAnXFx4ZWMnLCAnJUVDJzogJ1xceGVjJywgJyVlZCc6ICdcXHhlZCcsICclRWQnOiAnXFx4ZWQnLFxuICAnJWVEJzogJ1xceGVkJywgJyVFRCc6ICdcXHhlZCcsICclZWUnOiAnXFx4ZWUnLCAnJUVlJzogJ1xceGVlJywgJyVlRSc6ICdcXHhlZScsXG4gICclRUUnOiAnXFx4ZWUnLCAnJWVmJzogJ1xceGVmJywgJyVFZic6ICdcXHhlZicsICclZUYnOiAnXFx4ZWYnLCAnJUVGJzogJ1xceGVmJyxcbiAgJyVmMCc6ICdcXHhmMCcsICclRjAnOiAnXFx4ZjAnLCAnJWYxJzogJ1xceGYxJywgJyVGMSc6ICdcXHhmMScsICclZjInOiAnXFx4ZjInLFxuICAnJUYyJzogJ1xceGYyJywgJyVmMyc6ICdcXHhmMycsICclRjMnOiAnXFx4ZjMnLCAnJWY0JzogJ1xceGY0JywgJyVGNCc6ICdcXHhmNCcsXG4gICclZjUnOiAnXFx4ZjUnLCAnJUY1JzogJ1xceGY1JywgJyVmNic6ICdcXHhmNicsICclRjYnOiAnXFx4ZjYnLCAnJWY3JzogJ1xceGY3JyxcbiAgJyVGNyc6ICdcXHhmNycsICclZjgnOiAnXFx4ZjgnLCAnJUY4JzogJ1xceGY4JywgJyVmOSc6ICdcXHhmOScsICclRjknOiAnXFx4ZjknLFxuICAnJWZhJzogJ1xceGZhJywgJyVGYSc6ICdcXHhmYScsICclZkEnOiAnXFx4ZmEnLCAnJUZBJzogJ1xceGZhJywgJyVmYic6ICdcXHhmYicsXG4gICclRmInOiAnXFx4ZmInLCAnJWZCJzogJ1xceGZiJywgJyVGQic6ICdcXHhmYicsICclZmMnOiAnXFx4ZmMnLCAnJUZjJzogJ1xceGZjJyxcbiAgJyVmQyc6ICdcXHhmYycsICclRkMnOiAnXFx4ZmMnLCAnJWZkJzogJ1xceGZkJywgJyVGZCc6ICdcXHhmZCcsICclZkQnOiAnXFx4ZmQnLFxuICAnJUZEJzogJ1xceGZkJywgJyVmZSc6ICdcXHhmZScsICclRmUnOiAnXFx4ZmUnLCAnJWZFJzogJ1xceGZlJywgJyVGRSc6ICdcXHhmZScsXG4gICclZmYnOiAnXFx4ZmYnLCAnJUZmJzogJ1xceGZmJywgJyVmRic6ICdcXHhmZicsICclRkYnOiAnXFx4ZmYnXG59XG5cbmZ1bmN0aW9uIGVuY29kZWRSZXBsYWNlciAobWF0Y2gpIHtcbiAgcmV0dXJuIEVuY29kZWRMb29rdXBbbWF0Y2hdXG59XG5cbmNvbnN0IFNUQVRFX0tFWSA9IDBcbmNvbnN0IFNUQVRFX1ZBTFVFID0gMVxuY29uc3QgU1RBVEVfQ0hBUlNFVCA9IDJcbmNvbnN0IFNUQVRFX0xBTkcgPSAzXG5cbmZ1bmN0aW9uIHBhcnNlUGFyYW1zIChzdHIpIHtcbiAgY29uc3QgcmVzID0gW11cbiAgbGV0IHN0YXRlID0gU1RBVEVfS0VZXG4gIGxldCBjaGFyc2V0ID0gJydcbiAgbGV0IGlucXVvdGUgPSBmYWxzZVxuICBsZXQgZXNjYXBpbmcgPSBmYWxzZVxuICBsZXQgcCA9IDBcbiAgbGV0IHRtcCA9ICcnXG4gIGNvbnN0IGxlbiA9IHN0ci5sZW5ndGhcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdmFyXG4gICAgY29uc3QgY2hhciA9IHN0cltpXVxuICAgIGlmIChjaGFyID09PSAnXFxcXCcgJiYgaW5xdW90ZSkge1xuICAgICAgaWYgKGVzY2FwaW5nKSB7IGVzY2FwaW5nID0gZmFsc2UgfSBlbHNlIHtcbiAgICAgICAgZXNjYXBpbmcgPSB0cnVlXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjaGFyID09PSAnXCInKSB7XG4gICAgICBpZiAoIWVzY2FwaW5nKSB7XG4gICAgICAgIGlmIChpbnF1b3RlKSB7XG4gICAgICAgICAgaW5xdW90ZSA9IGZhbHNlXG4gICAgICAgICAgc3RhdGUgPSBTVEFURV9LRVlcbiAgICAgICAgfSBlbHNlIHsgaW5xdW90ZSA9IHRydWUgfVxuICAgICAgICBjb250aW51ZVxuICAgICAgfSBlbHNlIHsgZXNjYXBpbmcgPSBmYWxzZSB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChlc2NhcGluZyAmJiBpbnF1b3RlKSB7IHRtcCArPSAnXFxcXCcgfVxuICAgICAgZXNjYXBpbmcgPSBmYWxzZVxuICAgICAgaWYgKChzdGF0ZSA9PT0gU1RBVEVfQ0hBUlNFVCB8fCBzdGF0ZSA9PT0gU1RBVEVfTEFORykgJiYgY2hhciA9PT0gXCInXCIpIHtcbiAgICAgICAgaWYgKHN0YXRlID09PSBTVEFURV9DSEFSU0VUKSB7XG4gICAgICAgICAgc3RhdGUgPSBTVEFURV9MQU5HXG4gICAgICAgICAgY2hhcnNldCA9IHRtcC5zdWJzdHJpbmcoMSlcbiAgICAgICAgfSBlbHNlIHsgc3RhdGUgPSBTVEFURV9WQUxVRSB9XG4gICAgICAgIHRtcCA9ICcnXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9IGVsc2UgaWYgKHN0YXRlID09PSBTVEFURV9LRVkgJiZcbiAgICAgICAgKGNoYXIgPT09ICcqJyB8fCBjaGFyID09PSAnPScpICYmXG4gICAgICAgIHJlcy5sZW5ndGgpIHtcbiAgICAgICAgc3RhdGUgPSBjaGFyID09PSAnKidcbiAgICAgICAgICA/IFNUQVRFX0NIQVJTRVRcbiAgICAgICAgICA6IFNUQVRFX1ZBTFVFXG4gICAgICAgIHJlc1twXSA9IFt0bXAsIHVuZGVmaW5lZF1cbiAgICAgICAgdG1wID0gJydcbiAgICAgICAgY29udGludWVcbiAgICAgIH0gZWxzZSBpZiAoIWlucXVvdGUgJiYgY2hhciA9PT0gJzsnKSB7XG4gICAgICAgIHN0YXRlID0gU1RBVEVfS0VZXG4gICAgICAgIGlmIChjaGFyc2V0KSB7XG4gICAgICAgICAgaWYgKHRtcC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRtcCA9IGRlY29kZVRleHQodG1wLnJlcGxhY2UoUkVfRU5DT0RFRCwgZW5jb2RlZFJlcGxhY2VyKSxcbiAgICAgICAgICAgICAgJ2JpbmFyeScsXG4gICAgICAgICAgICAgIGNoYXJzZXQpXG4gICAgICAgICAgfVxuICAgICAgICAgIGNoYXJzZXQgPSAnJ1xuICAgICAgICB9IGVsc2UgaWYgKHRtcC5sZW5ndGgpIHtcbiAgICAgICAgICB0bXAgPSBkZWNvZGVUZXh0KHRtcCwgJ2JpbmFyeScsICd1dGY4JylcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzW3BdID09PSB1bmRlZmluZWQpIHsgcmVzW3BdID0gdG1wIH0gZWxzZSB7IHJlc1twXVsxXSA9IHRtcCB9XG4gICAgICAgIHRtcCA9ICcnXG4gICAgICAgICsrcFxuICAgICAgICBjb250aW51ZVxuICAgICAgfSBlbHNlIGlmICghaW5xdW90ZSAmJiAoY2hhciA9PT0gJyAnIHx8IGNoYXIgPT09ICdcXHQnKSkgeyBjb250aW51ZSB9XG4gICAgfVxuICAgIHRtcCArPSBjaGFyXG4gIH1cbiAgaWYgKGNoYXJzZXQgJiYgdG1wLmxlbmd0aCkge1xuICAgIHRtcCA9IGRlY29kZVRleHQodG1wLnJlcGxhY2UoUkVfRU5DT0RFRCwgZW5jb2RlZFJlcGxhY2VyKSxcbiAgICAgICdiaW5hcnknLFxuICAgICAgY2hhcnNldClcbiAgfSBlbHNlIGlmICh0bXApIHtcbiAgICB0bXAgPSBkZWNvZGVUZXh0KHRtcCwgJ2JpbmFyeScsICd1dGY4JylcbiAgfVxuXG4gIGlmIChyZXNbcF0gPT09IHVuZGVmaW5lZCkge1xuICAgIGlmICh0bXApIHsgcmVzW3BdID0gdG1wIH1cbiAgfSBlbHNlIHsgcmVzW3BdWzFdID0gdG1wIH1cblxuICByZXR1cm4gcmVzXG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyc2VQYXJhbXNcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYmFzZW5hbWUgKHBhdGgpIHtcbiAgaWYgKHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJykgeyByZXR1cm4gJycgfVxuICBmb3IgKHZhciBpID0gcGF0aC5sZW5ndGggLSAxOyBpID49IDA7IC0taSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXZhclxuICAgIHN3aXRjaCAocGF0aC5jaGFyQ29kZUF0KGkpKSB7XG4gICAgICBjYXNlIDB4MkY6IC8vICcvJ1xuICAgICAgY2FzZSAweDVDOiAvLyAnXFwnXG4gICAgICAgIHBhdGggPSBwYXRoLnNsaWNlKGkgKyAxKVxuICAgICAgICByZXR1cm4gKHBhdGggPT09ICcuLicgfHwgcGF0aCA9PT0gJy4nID8gJycgOiBwYXRoKVxuICAgIH1cbiAgfVxuICByZXR1cm4gKHBhdGggPT09ICcuLicgfHwgcGF0aCA9PT0gJy4nID8gJycgOiBwYXRoKVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuLy8gVE9ETzpcbi8vICAqIHN1cHBvcnQgMSBuZXN0ZWQgbXVsdGlwYXJ0IGxldmVsXG4vLyAgICAoc2VlIHNlY29uZCBtdWx0aXBhcnQgZXhhbXBsZSBoZXJlOlxuLy8gICAgIGh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0MDEvaW50ZXJhY3QvZm9ybXMuaHRtbCNkaWR4LW11bHRpcGFydGZvcm0tZGF0YSlcbi8vICAqIHN1cHBvcnQgbGltaXRzLmZpZWxkTmFtZVNpemVcbi8vICAgICAtLSB0aGlzIHdpbGwgcmVxdWlyZSBtb2RpZmljYXRpb25zIHRvIHV0aWxzLnBhcnNlUGFyYW1zXG5cbmNvbnN0IHsgUmVhZGFibGUgfSA9IHJlcXVpcmUoJ25vZGU6c3RyZWFtJylcbmNvbnN0IHsgaW5oZXJpdHMgfSA9IHJlcXVpcmUoJ25vZGU6dXRpbCcpXG5cbmNvbnN0IERpY2VyID0gcmVxdWlyZSgnLi4vLi4vZGVwcy9kaWNlci9saWIvRGljZXInKVxuXG5jb25zdCBwYXJzZVBhcmFtcyA9IHJlcXVpcmUoJy4uL3V0aWxzL3BhcnNlUGFyYW1zJylcbmNvbnN0IGRlY29kZVRleHQgPSByZXF1aXJlKCcuLi91dGlscy9kZWNvZGVUZXh0JylcbmNvbnN0IGJhc2VuYW1lID0gcmVxdWlyZSgnLi4vdXRpbHMvYmFzZW5hbWUnKVxuY29uc3QgZ2V0TGltaXQgPSByZXF1aXJlKCcuLi91dGlscy9nZXRMaW1pdCcpXG5cbmNvbnN0IFJFX0JPVU5EQVJZID0gL15ib3VuZGFyeSQvaVxuY29uc3QgUkVfRklFTEQgPSAvXmZvcm0tZGF0YSQvaVxuY29uc3QgUkVfQ0hBUlNFVCA9IC9eY2hhcnNldCQvaVxuY29uc3QgUkVfRklMRU5BTUUgPSAvXmZpbGVuYW1lJC9pXG5jb25zdCBSRV9OQU1FID0gL15uYW1lJC9pXG5cbk11bHRpcGFydC5kZXRlY3QgPSAvXm11bHRpcGFydFxcL2Zvcm0tZGF0YS9pXG5mdW5jdGlvbiBNdWx0aXBhcnQgKGJveSwgY2ZnKSB7XG4gIGxldCBpXG4gIGxldCBsZW5cbiAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgbGV0IGJvdW5kYXJ5XG4gIGNvbnN0IGxpbWl0cyA9IGNmZy5saW1pdHNcbiAgY29uc3QgaXNQYXJ0QUZpbGUgPSBjZmcuaXNQYXJ0QUZpbGUgfHwgKChmaWVsZE5hbWUsIGNvbnRlbnRUeXBlLCBmaWxlTmFtZSkgPT4gKGNvbnRlbnRUeXBlID09PSAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJyB8fCBmaWxlTmFtZSAhPT0gdW5kZWZpbmVkKSlcbiAgY29uc3QgcGFyc2VkQ29uVHlwZSA9IGNmZy5wYXJzZWRDb25UeXBlIHx8IFtdXG4gIGNvbnN0IGRlZkNoYXJzZXQgPSBjZmcuZGVmQ2hhcnNldCB8fCAndXRmOCdcbiAgY29uc3QgcHJlc2VydmVQYXRoID0gY2ZnLnByZXNlcnZlUGF0aFxuICBjb25zdCBmaWxlT3B0cyA9IHsgaGlnaFdhdGVyTWFyazogY2ZnLmZpbGVId20gfVxuXG4gIGZvciAoaSA9IDAsIGxlbiA9IHBhcnNlZENvblR5cGUubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJzZWRDb25UeXBlW2ldKSAmJlxuICAgICAgUkVfQk9VTkRBUlkudGVzdChwYXJzZWRDb25UeXBlW2ldWzBdKSkge1xuICAgICAgYm91bmRhcnkgPSBwYXJzZWRDb25UeXBlW2ldWzFdXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNoZWNrRmluaXNoZWQgKCkge1xuICAgIGlmIChuZW5kcyA9PT0gMCAmJiBmaW5pc2hlZCAmJiAhYm95Ll9kb25lKSB7XG4gICAgICBmaW5pc2hlZCA9IGZhbHNlXG4gICAgICBzZWxmLmVuZCgpXG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiBib3VuZGFyeSAhPT0gJ3N0cmluZycpIHsgdGhyb3cgbmV3IEVycm9yKCdNdWx0aXBhcnQ6IEJvdW5kYXJ5IG5vdCBmb3VuZCcpIH1cblxuICBjb25zdCBmaWVsZFNpemVMaW1pdCA9IGdldExpbWl0KGxpbWl0cywgJ2ZpZWxkU2l6ZScsIDEgKiAxMDI0ICogMTAyNClcbiAgY29uc3QgZmlsZVNpemVMaW1pdCA9IGdldExpbWl0KGxpbWl0cywgJ2ZpbGVTaXplJywgSW5maW5pdHkpXG4gIGNvbnN0IGZpbGVzTGltaXQgPSBnZXRMaW1pdChsaW1pdHMsICdmaWxlcycsIEluZmluaXR5KVxuICBjb25zdCBmaWVsZHNMaW1pdCA9IGdldExpbWl0KGxpbWl0cywgJ2ZpZWxkcycsIEluZmluaXR5KVxuICBjb25zdCBwYXJ0c0xpbWl0ID0gZ2V0TGltaXQobGltaXRzLCAncGFydHMnLCBJbmZpbml0eSlcbiAgY29uc3QgaGVhZGVyUGFpcnNMaW1pdCA9IGdldExpbWl0KGxpbWl0cywgJ2hlYWRlclBhaXJzJywgMjAwMClcbiAgY29uc3QgaGVhZGVyU2l6ZUxpbWl0ID0gZ2V0TGltaXQobGltaXRzLCAnaGVhZGVyU2l6ZScsIDgwICogMTAyNClcblxuICBsZXQgbmZpbGVzID0gMFxuICBsZXQgbmZpZWxkcyA9IDBcbiAgbGV0IG5lbmRzID0gMFxuICBsZXQgY3VyRmlsZVxuICBsZXQgY3VyRmllbGRcbiAgbGV0IGZpbmlzaGVkID0gZmFsc2VcblxuICB0aGlzLl9uZWVkRHJhaW4gPSBmYWxzZVxuICB0aGlzLl9wYXVzZSA9IGZhbHNlXG4gIHRoaXMuX2NiID0gdW5kZWZpbmVkXG4gIHRoaXMuX25wYXJ0cyA9IDBcbiAgdGhpcy5fYm95ID0gYm95XG5cbiAgY29uc3QgcGFyc2VyQ2ZnID0ge1xuICAgIGJvdW5kYXJ5LFxuICAgIG1heEhlYWRlclBhaXJzOiBoZWFkZXJQYWlyc0xpbWl0LFxuICAgIG1heEhlYWRlclNpemU6IGhlYWRlclNpemVMaW1pdCxcbiAgICBwYXJ0SHdtOiBmaWxlT3B0cy5oaWdoV2F0ZXJNYXJrLFxuICAgIGhpZ2hXYXRlck1hcms6IGNmZy5oaWdoV2F0ZXJNYXJrXG4gIH1cblxuICB0aGlzLnBhcnNlciA9IG5ldyBEaWNlcihwYXJzZXJDZmcpXG4gIHRoaXMucGFyc2VyLm9uKCdkcmFpbicsIGZ1bmN0aW9uICgpIHtcbiAgICBzZWxmLl9uZWVkRHJhaW4gPSBmYWxzZVxuICAgIGlmIChzZWxmLl9jYiAmJiAhc2VsZi5fcGF1c2UpIHtcbiAgICAgIGNvbnN0IGNiID0gc2VsZi5fY2JcbiAgICAgIHNlbGYuX2NiID0gdW5kZWZpbmVkXG4gICAgICBjYigpXG4gICAgfVxuICB9KS5vbigncGFydCcsIGZ1bmN0aW9uIG9uUGFydCAocGFydCkge1xuICAgIGlmICgrK3NlbGYuX25wYXJ0cyA+IHBhcnRzTGltaXQpIHtcbiAgICAgIHNlbGYucGFyc2VyLnJlbW92ZUxpc3RlbmVyKCdwYXJ0Jywgb25QYXJ0KVxuICAgICAgc2VsZi5wYXJzZXIub24oJ3BhcnQnLCBza2lwUGFydClcbiAgICAgIGJveS5oaXRQYXJ0c0xpbWl0ID0gdHJ1ZVxuICAgICAgYm95LmVtaXQoJ3BhcnRzTGltaXQnKVxuICAgICAgcmV0dXJuIHNraXBQYXJ0KHBhcnQpXG4gICAgfVxuXG4gICAgLy8gaGFjayBiZWNhdXNlIHN0cmVhbXMyIF9hbHdheXNfIGRvZXNuJ3QgZW1pdCAnZW5kJyB1bnRpbCBuZXh0VGljaywgc28gbGV0XG4gICAgLy8gdXMgZW1pdCAnZW5kJyBlYXJseSBzaW5jZSB3ZSBrbm93IHRoZSBwYXJ0IGhhcyBlbmRlZCBpZiB3ZSBhcmUgYWxyZWFkeVxuICAgIC8vIHNlZWluZyB0aGUgbmV4dCBwYXJ0XG4gICAgaWYgKGN1ckZpZWxkKSB7XG4gICAgICBjb25zdCBmaWVsZCA9IGN1ckZpZWxkXG4gICAgICBmaWVsZC5lbWl0KCdlbmQnKVxuICAgICAgZmllbGQucmVtb3ZlQWxsTGlzdGVuZXJzKCdlbmQnKVxuICAgIH1cblxuICAgIHBhcnQub24oJ2hlYWRlcicsIGZ1bmN0aW9uIChoZWFkZXIpIHtcbiAgICAgIGxldCBjb250eXBlXG4gICAgICBsZXQgZmllbGRuYW1lXG4gICAgICBsZXQgcGFyc2VkXG4gICAgICBsZXQgY2hhcnNldFxuICAgICAgbGV0IGVuY29kaW5nXG4gICAgICBsZXQgZmlsZW5hbWVcbiAgICAgIGxldCBuc2l6ZSA9IDBcblxuICAgICAgaWYgKGhlYWRlclsnY29udGVudC10eXBlJ10pIHtcbiAgICAgICAgcGFyc2VkID0gcGFyc2VQYXJhbXMoaGVhZGVyWydjb250ZW50LXR5cGUnXVswXSlcbiAgICAgICAgaWYgKHBhcnNlZFswXSkge1xuICAgICAgICAgIGNvbnR5cGUgPSBwYXJzZWRbMF0udG9Mb3dlckNhc2UoKVxuICAgICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IHBhcnNlZC5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgICAgICAgICAgaWYgKFJFX0NIQVJTRVQudGVzdChwYXJzZWRbaV1bMF0pKSB7XG4gICAgICAgICAgICAgIGNoYXJzZXQgPSBwYXJzZWRbaV1bMV0udG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoY29udHlwZSA9PT0gdW5kZWZpbmVkKSB7IGNvbnR5cGUgPSAndGV4dC9wbGFpbicgfVxuICAgICAgaWYgKGNoYXJzZXQgPT09IHVuZGVmaW5lZCkgeyBjaGFyc2V0ID0gZGVmQ2hhcnNldCB9XG5cbiAgICAgIGlmIChoZWFkZXJbJ2NvbnRlbnQtZGlzcG9zaXRpb24nXSkge1xuICAgICAgICBwYXJzZWQgPSBwYXJzZVBhcmFtcyhoZWFkZXJbJ2NvbnRlbnQtZGlzcG9zaXRpb24nXVswXSlcbiAgICAgICAgaWYgKCFSRV9GSUVMRC50ZXN0KHBhcnNlZFswXSkpIHsgcmV0dXJuIHNraXBQYXJ0KHBhcnQpIH1cbiAgICAgICAgZm9yIChpID0gMCwgbGVuID0gcGFyc2VkLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICAgICAgaWYgKFJFX05BTUUudGVzdChwYXJzZWRbaV1bMF0pKSB7XG4gICAgICAgICAgICBmaWVsZG5hbWUgPSBwYXJzZWRbaV1bMV1cbiAgICAgICAgICB9IGVsc2UgaWYgKFJFX0ZJTEVOQU1FLnRlc3QocGFyc2VkW2ldWzBdKSkge1xuICAgICAgICAgICAgZmlsZW5hbWUgPSBwYXJzZWRbaV1bMV1cbiAgICAgICAgICAgIGlmICghcHJlc2VydmVQYXRoKSB7IGZpbGVuYW1lID0gYmFzZW5hbWUoZmlsZW5hbWUpIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7IHJldHVybiBza2lwUGFydChwYXJ0KSB9XG5cbiAgICAgIGlmIChoZWFkZXJbJ2NvbnRlbnQtdHJhbnNmZXItZW5jb2RpbmcnXSkgeyBlbmNvZGluZyA9IGhlYWRlclsnY29udGVudC10cmFuc2Zlci1lbmNvZGluZyddWzBdLnRvTG93ZXJDYXNlKCkgfSBlbHNlIHsgZW5jb2RpbmcgPSAnN2JpdCcgfVxuXG4gICAgICBsZXQgb25EYXRhLFxuICAgICAgICBvbkVuZFxuXG4gICAgICBpZiAoaXNQYXJ0QUZpbGUoZmllbGRuYW1lLCBjb250eXBlLCBmaWxlbmFtZSkpIHtcbiAgICAgICAgLy8gZmlsZS9iaW5hcnkgZmllbGRcbiAgICAgICAgaWYgKG5maWxlcyA9PT0gZmlsZXNMaW1pdCkge1xuICAgICAgICAgIGlmICghYm95LmhpdEZpbGVzTGltaXQpIHtcbiAgICAgICAgICAgIGJveS5oaXRGaWxlc0xpbWl0ID0gdHJ1ZVxuICAgICAgICAgICAgYm95LmVtaXQoJ2ZpbGVzTGltaXQnKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gc2tpcFBhcnQocGFydClcbiAgICAgICAgfVxuXG4gICAgICAgICsrbmZpbGVzXG5cbiAgICAgICAgaWYgKGJveS5saXN0ZW5lckNvdW50KCdmaWxlJykgPT09IDApIHtcbiAgICAgICAgICBzZWxmLnBhcnNlci5faWdub3JlKClcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgICsrbmVuZHNcbiAgICAgICAgY29uc3QgZmlsZSA9IG5ldyBGaWxlU3RyZWFtKGZpbGVPcHRzKVxuICAgICAgICBjdXJGaWxlID0gZmlsZVxuICAgICAgICBmaWxlLm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLS1uZW5kc1xuICAgICAgICAgIHNlbGYuX3BhdXNlID0gZmFsc2VcbiAgICAgICAgICBjaGVja0ZpbmlzaGVkKClcbiAgICAgICAgICBpZiAoc2VsZi5fY2IgJiYgIXNlbGYuX25lZWREcmFpbikge1xuICAgICAgICAgICAgY29uc3QgY2IgPSBzZWxmLl9jYlxuICAgICAgICAgICAgc2VsZi5fY2IgPSB1bmRlZmluZWRcbiAgICAgICAgICAgIGNiKClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIGZpbGUuX3JlYWQgPSBmdW5jdGlvbiAobikge1xuICAgICAgICAgIGlmICghc2VsZi5fcGF1c2UpIHsgcmV0dXJuIH1cbiAgICAgICAgICBzZWxmLl9wYXVzZSA9IGZhbHNlXG4gICAgICAgICAgaWYgKHNlbGYuX2NiICYmICFzZWxmLl9uZWVkRHJhaW4pIHtcbiAgICAgICAgICAgIGNvbnN0IGNiID0gc2VsZi5fY2JcbiAgICAgICAgICAgIHNlbGYuX2NiID0gdW5kZWZpbmVkXG4gICAgICAgICAgICBjYigpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJveS5lbWl0KCdmaWxlJywgZmllbGRuYW1lLCBmaWxlLCBmaWxlbmFtZSwgZW5jb2RpbmcsIGNvbnR5cGUpXG5cbiAgICAgICAgb25EYXRhID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICBpZiAoKG5zaXplICs9IGRhdGEubGVuZ3RoKSA+IGZpbGVTaXplTGltaXQpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4dHJhbGVuID0gZmlsZVNpemVMaW1pdCAtIG5zaXplICsgZGF0YS5sZW5ndGhcbiAgICAgICAgICAgIGlmIChleHRyYWxlbiA+IDApIHsgZmlsZS5wdXNoKGRhdGEuc2xpY2UoMCwgZXh0cmFsZW4pKSB9XG4gICAgICAgICAgICBmaWxlLnRydW5jYXRlZCA9IHRydWVcbiAgICAgICAgICAgIGZpbGUuYnl0ZXNSZWFkID0gZmlsZVNpemVMaW1pdFxuICAgICAgICAgICAgcGFydC5yZW1vdmVBbGxMaXN0ZW5lcnMoJ2RhdGEnKVxuICAgICAgICAgICAgZmlsZS5lbWl0KCdsaW1pdCcpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9IGVsc2UgaWYgKCFmaWxlLnB1c2goZGF0YSkpIHsgc2VsZi5fcGF1c2UgPSB0cnVlIH1cblxuICAgICAgICAgIGZpbGUuYnl0ZXNSZWFkID0gbnNpemVcbiAgICAgICAgfVxuXG4gICAgICAgIG9uRW5kID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGN1ckZpbGUgPSB1bmRlZmluZWRcbiAgICAgICAgICBmaWxlLnB1c2gobnVsbClcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gbm9uLWZpbGUgZmllbGRcbiAgICAgICAgaWYgKG5maWVsZHMgPT09IGZpZWxkc0xpbWl0KSB7XG4gICAgICAgICAgaWYgKCFib3kuaGl0RmllbGRzTGltaXQpIHtcbiAgICAgICAgICAgIGJveS5oaXRGaWVsZHNMaW1pdCA9IHRydWVcbiAgICAgICAgICAgIGJveS5lbWl0KCdmaWVsZHNMaW1pdCcpXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBza2lwUGFydChwYXJ0KVxuICAgICAgICB9XG5cbiAgICAgICAgKytuZmllbGRzXG4gICAgICAgICsrbmVuZHNcbiAgICAgICAgbGV0IGJ1ZmZlciA9ICcnXG4gICAgICAgIGxldCB0cnVuY2F0ZWQgPSBmYWxzZVxuICAgICAgICBjdXJGaWVsZCA9IHBhcnRcblxuICAgICAgICBvbkRhdGEgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgIGlmICgobnNpemUgKz0gZGF0YS5sZW5ndGgpID4gZmllbGRTaXplTGltaXQpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4dHJhbGVuID0gKGZpZWxkU2l6ZUxpbWl0IC0gKG5zaXplIC0gZGF0YS5sZW5ndGgpKVxuICAgICAgICAgICAgYnVmZmVyICs9IGRhdGEudG9TdHJpbmcoJ2JpbmFyeScsIDAsIGV4dHJhbGVuKVxuICAgICAgICAgICAgdHJ1bmNhdGVkID0gdHJ1ZVxuICAgICAgICAgICAgcGFydC5yZW1vdmVBbGxMaXN0ZW5lcnMoJ2RhdGEnKVxuICAgICAgICAgIH0gZWxzZSB7IGJ1ZmZlciArPSBkYXRhLnRvU3RyaW5nKCdiaW5hcnknKSB9XG4gICAgICAgIH1cblxuICAgICAgICBvbkVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjdXJGaWVsZCA9IHVuZGVmaW5lZFxuICAgICAgICAgIGlmIChidWZmZXIubGVuZ3RoKSB7IGJ1ZmZlciA9IGRlY29kZVRleHQoYnVmZmVyLCAnYmluYXJ5JywgY2hhcnNldCkgfVxuICAgICAgICAgIGJveS5lbWl0KCdmaWVsZCcsIGZpZWxkbmFtZSwgYnVmZmVyLCBmYWxzZSwgdHJ1bmNhdGVkLCBlbmNvZGluZywgY29udHlwZSlcbiAgICAgICAgICAtLW5lbmRzXG4gICAgICAgICAgY2hlY2tGaW5pc2hlZCgpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLyogQXMgb2Ygbm9kZUAyZWZlNGFiNzYxNjY2ICh2MC4xMC4yOSsvdjAuMTEuMTQrKSwgYnVzYm95IGhhZCBiZWNvbWVcbiAgICAgICAgIGJyb2tlbi4gU3RyZWFtczIvc3RyZWFtczMgaXMgYSBodWdlIGJsYWNrIGJveCBvZiBjb25mdXNpb24sIGJ1dFxuICAgICAgICAgc29tZWhvdyBvdmVycmlkaW5nIHRoZSBzeW5jIHN0YXRlIHNlZW1zIHRvIGZpeCB0aGluZ3MgYWdhaW4gKGFuZCBzdGlsbFxuICAgICAgICAgc2VlbXMgdG8gd29yayBmb3IgcHJldmlvdXMgbm9kZSB2ZXJzaW9ucykuXG4gICAgICAqL1xuICAgICAgcGFydC5fcmVhZGFibGVTdGF0ZS5zeW5jID0gZmFsc2VcblxuICAgICAgcGFydC5vbignZGF0YScsIG9uRGF0YSlcbiAgICAgIHBhcnQub24oJ2VuZCcsIG9uRW5kKVxuICAgIH0pLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgIGlmIChjdXJGaWxlKSB7IGN1ckZpbGUuZW1pdCgnZXJyb3InLCBlcnIpIH1cbiAgICB9KVxuICB9KS5vbignZXJyb3InLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgYm95LmVtaXQoJ2Vycm9yJywgZXJyKVxuICB9KS5vbignZmluaXNoJywgZnVuY3Rpb24gKCkge1xuICAgIGZpbmlzaGVkID0gdHJ1ZVxuICAgIGNoZWNrRmluaXNoZWQoKVxuICB9KVxufVxuXG5NdWx0aXBhcnQucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKGNodW5rLCBjYikge1xuICBjb25zdCByID0gdGhpcy5wYXJzZXIud3JpdGUoY2h1bmspXG4gIGlmIChyICYmICF0aGlzLl9wYXVzZSkge1xuICAgIGNiKClcbiAgfSBlbHNlIHtcbiAgICB0aGlzLl9uZWVkRHJhaW4gPSAhclxuICAgIHRoaXMuX2NiID0gY2JcbiAgfVxufVxuXG5NdWx0aXBhcnQucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgY29uc3Qgc2VsZiA9IHRoaXNcblxuICBpZiAoc2VsZi5wYXJzZXIud3JpdGFibGUpIHtcbiAgICBzZWxmLnBhcnNlci5lbmQoKVxuICB9IGVsc2UgaWYgKCFzZWxmLl9ib3kuX2RvbmUpIHtcbiAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlbGYuX2JveS5fZG9uZSA9IHRydWVcbiAgICAgIHNlbGYuX2JveS5lbWl0KCdmaW5pc2gnKVxuICAgIH0pXG4gIH1cbn1cblxuZnVuY3Rpb24gc2tpcFBhcnQgKHBhcnQpIHtcbiAgcGFydC5yZXN1bWUoKVxufVxuXG5mdW5jdGlvbiBGaWxlU3RyZWFtIChvcHRzKSB7XG4gIFJlYWRhYmxlLmNhbGwodGhpcywgb3B0cylcblxuICB0aGlzLmJ5dGVzUmVhZCA9IDBcblxuICB0aGlzLnRydW5jYXRlZCA9IGZhbHNlXG59XG5cbmluaGVyaXRzKEZpbGVTdHJlYW0sIFJlYWRhYmxlKVxuXG5GaWxlU3RyZWFtLnByb3RvdHlwZS5fcmVhZCA9IGZ1bmN0aW9uIChuKSB7fVxuXG5tb2R1bGUuZXhwb3J0cyA9IE11bHRpcGFydFxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgUkVfUExVUyA9IC9cXCsvZ1xuXG5jb25zdCBIRVggPSBbXG4gIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsXG4gIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsXG4gIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsXG4gIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsXG4gIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsXG4gIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsXG4gIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsXG4gIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBcbl1cblxuZnVuY3Rpb24gRGVjb2RlciAoKSB7XG4gIHRoaXMuYnVmZmVyID0gdW5kZWZpbmVkXG59XG5EZWNvZGVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgLy8gUmVwbGFjZSAnKycgd2l0aCAnICcgYmVmb3JlIGRlY29kaW5nXG4gIHN0ciA9IHN0ci5yZXBsYWNlKFJFX1BMVVMsICcgJylcbiAgbGV0IHJlcyA9ICcnXG4gIGxldCBpID0gMDsgbGV0IHAgPSAwOyBjb25zdCBsZW4gPSBzdHIubGVuZ3RoXG4gIGZvciAoOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAodGhpcy5idWZmZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCFIRVhbc3RyLmNoYXJDb2RlQXQoaSldKSB7XG4gICAgICAgIHJlcyArPSAnJScgKyB0aGlzLmJ1ZmZlclxuICAgICAgICB0aGlzLmJ1ZmZlciA9IHVuZGVmaW5lZFxuICAgICAgICAtLWkgLy8gcmV0cnkgY2hhcmFjdGVyXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmJ1ZmZlciArPSBzdHJbaV1cbiAgICAgICAgKytwXG4gICAgICAgIGlmICh0aGlzLmJ1ZmZlci5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludCh0aGlzLmJ1ZmZlciwgMTYpKVxuICAgICAgICAgIHRoaXMuYnVmZmVyID0gdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHN0cltpXSA9PT0gJyUnKSB7XG4gICAgICBpZiAoaSA+IHApIHtcbiAgICAgICAgcmVzICs9IHN0ci5zdWJzdHJpbmcocCwgaSlcbiAgICAgICAgcCA9IGlcbiAgICAgIH1cbiAgICAgIHRoaXMuYnVmZmVyID0gJydcbiAgICAgICsrcFxuICAgIH1cbiAgfVxuICBpZiAocCA8IGxlbiAmJiB0aGlzLmJ1ZmZlciA9PT0gdW5kZWZpbmVkKSB7IHJlcyArPSBzdHIuc3Vic3RyaW5nKHApIH1cbiAgcmV0dXJuIHJlc1xufVxuRGVjb2Rlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuYnVmZmVyID0gdW5kZWZpbmVkXG59XG5cbm1vZHVsZS5leHBvcnRzID0gRGVjb2RlclxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgRGVjb2RlciA9IHJlcXVpcmUoJy4uL3V0aWxzL0RlY29kZXInKVxuY29uc3QgZGVjb2RlVGV4dCA9IHJlcXVpcmUoJy4uL3V0aWxzL2RlY29kZVRleHQnKVxuY29uc3QgZ2V0TGltaXQgPSByZXF1aXJlKCcuLi91dGlscy9nZXRMaW1pdCcpXG5cbmNvbnN0IFJFX0NIQVJTRVQgPSAvXmNoYXJzZXQkL2lcblxuVXJsRW5jb2RlZC5kZXRlY3QgPSAvXmFwcGxpY2F0aW9uXFwveC13d3ctZm9ybS11cmxlbmNvZGVkL2lcbmZ1bmN0aW9uIFVybEVuY29kZWQgKGJveSwgY2ZnKSB7XG4gIGNvbnN0IGxpbWl0cyA9IGNmZy5saW1pdHNcbiAgY29uc3QgcGFyc2VkQ29uVHlwZSA9IGNmZy5wYXJzZWRDb25UeXBlXG4gIHRoaXMuYm95ID0gYm95XG5cbiAgdGhpcy5maWVsZFNpemVMaW1pdCA9IGdldExpbWl0KGxpbWl0cywgJ2ZpZWxkU2l6ZScsIDEgKiAxMDI0ICogMTAyNClcbiAgdGhpcy5maWVsZE5hbWVTaXplTGltaXQgPSBnZXRMaW1pdChsaW1pdHMsICdmaWVsZE5hbWVTaXplJywgMTAwKVxuICB0aGlzLmZpZWxkc0xpbWl0ID0gZ2V0TGltaXQobGltaXRzLCAnZmllbGRzJywgSW5maW5pdHkpXG5cbiAgbGV0IGNoYXJzZXRcbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHBhcnNlZENvblR5cGUubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby12YXJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJzZWRDb25UeXBlW2ldKSAmJlxuICAgICAgICBSRV9DSEFSU0VULnRlc3QocGFyc2VkQ29uVHlwZVtpXVswXSkpIHtcbiAgICAgIGNoYXJzZXQgPSBwYXJzZWRDb25UeXBlW2ldWzFdLnRvTG93ZXJDYXNlKClcbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaWYgKGNoYXJzZXQgPT09IHVuZGVmaW5lZCkgeyBjaGFyc2V0ID0gY2ZnLmRlZkNoYXJzZXQgfHwgJ3V0ZjgnIH1cblxuICB0aGlzLmRlY29kZXIgPSBuZXcgRGVjb2RlcigpXG4gIHRoaXMuY2hhcnNldCA9IGNoYXJzZXRcbiAgdGhpcy5fZmllbGRzID0gMFxuICB0aGlzLl9zdGF0ZSA9ICdrZXknXG4gIHRoaXMuX2NoZWNraW5nQnl0ZXMgPSB0cnVlXG4gIHRoaXMuX2J5dGVzS2V5ID0gMFxuICB0aGlzLl9ieXRlc1ZhbCA9IDBcbiAgdGhpcy5fa2V5ID0gJydcbiAgdGhpcy5fdmFsID0gJydcbiAgdGhpcy5fa2V5VHJ1bmMgPSBmYWxzZVxuICB0aGlzLl92YWxUcnVuYyA9IGZhbHNlXG4gIHRoaXMuX2hpdExpbWl0ID0gZmFsc2Vcbn1cblxuVXJsRW5jb2RlZC5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiAoZGF0YSwgY2IpIHtcbiAgaWYgKHRoaXMuX2ZpZWxkcyA9PT0gdGhpcy5maWVsZHNMaW1pdCkge1xuICAgIGlmICghdGhpcy5ib3kuaGl0RmllbGRzTGltaXQpIHtcbiAgICAgIHRoaXMuYm95LmhpdEZpZWxkc0xpbWl0ID0gdHJ1ZVxuICAgICAgdGhpcy5ib3kuZW1pdCgnZmllbGRzTGltaXQnKVxuICAgIH1cbiAgICByZXR1cm4gY2IoKVxuICB9XG5cbiAgbGV0IGlkeGVxOyBsZXQgaWR4YW1wOyBsZXQgaTsgbGV0IHAgPSAwOyBjb25zdCBsZW4gPSBkYXRhLmxlbmd0aFxuXG4gIHdoaWxlIChwIDwgbGVuKSB7XG4gICAgaWYgKHRoaXMuX3N0YXRlID09PSAna2V5Jykge1xuICAgICAgaWR4ZXEgPSBpZHhhbXAgPSB1bmRlZmluZWRcbiAgICAgIGZvciAoaSA9IHA7IGkgPCBsZW47ICsraSkge1xuICAgICAgICBpZiAoIXRoaXMuX2NoZWNraW5nQnl0ZXMpIHsgKytwIH1cbiAgICAgICAgaWYgKGRhdGFbaV0gPT09IDB4M0QvKiA9ICovKSB7XG4gICAgICAgICAgaWR4ZXEgPSBpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhW2ldID09PSAweDI2LyogJiAqLykge1xuICAgICAgICAgIGlkeGFtcCA9IGlcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9jaGVja2luZ0J5dGVzICYmIHRoaXMuX2J5dGVzS2V5ID09PSB0aGlzLmZpZWxkTmFtZVNpemVMaW1pdCkge1xuICAgICAgICAgIHRoaXMuX2hpdExpbWl0ID0gdHJ1ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fY2hlY2tpbmdCeXRlcykgeyArK3RoaXMuX2J5dGVzS2V5IH1cbiAgICAgIH1cblxuICAgICAgaWYgKGlkeGVxICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8ga2V5IHdpdGggYXNzaWdubWVudFxuICAgICAgICBpZiAoaWR4ZXEgPiBwKSB7IHRoaXMuX2tleSArPSB0aGlzLmRlY29kZXIud3JpdGUoZGF0YS50b1N0cmluZygnYmluYXJ5JywgcCwgaWR4ZXEpKSB9XG4gICAgICAgIHRoaXMuX3N0YXRlID0gJ3ZhbCdcblxuICAgICAgICB0aGlzLl9oaXRMaW1pdCA9IGZhbHNlXG4gICAgICAgIHRoaXMuX2NoZWNraW5nQnl0ZXMgPSB0cnVlXG4gICAgICAgIHRoaXMuX3ZhbCA9ICcnXG4gICAgICAgIHRoaXMuX2J5dGVzVmFsID0gMFxuICAgICAgICB0aGlzLl92YWxUcnVuYyA9IGZhbHNlXG4gICAgICAgIHRoaXMuZGVjb2Rlci5yZXNldCgpXG5cbiAgICAgICAgcCA9IGlkeGVxICsgMVxuICAgICAgfSBlbHNlIGlmIChpZHhhbXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBrZXkgd2l0aCBubyBhc3NpZ25tZW50XG4gICAgICAgICsrdGhpcy5fZmllbGRzXG4gICAgICAgIGxldCBrZXk7IGNvbnN0IGtleVRydW5jID0gdGhpcy5fa2V5VHJ1bmNcbiAgICAgICAgaWYgKGlkeGFtcCA+IHApIHsga2V5ID0gKHRoaXMuX2tleSArPSB0aGlzLmRlY29kZXIud3JpdGUoZGF0YS50b1N0cmluZygnYmluYXJ5JywgcCwgaWR4YW1wKSkpIH0gZWxzZSB7IGtleSA9IHRoaXMuX2tleSB9XG5cbiAgICAgICAgdGhpcy5faGl0TGltaXQgPSBmYWxzZVxuICAgICAgICB0aGlzLl9jaGVja2luZ0J5dGVzID0gdHJ1ZVxuICAgICAgICB0aGlzLl9rZXkgPSAnJ1xuICAgICAgICB0aGlzLl9ieXRlc0tleSA9IDBcbiAgICAgICAgdGhpcy5fa2V5VHJ1bmMgPSBmYWxzZVxuICAgICAgICB0aGlzLmRlY29kZXIucmVzZXQoKVxuXG4gICAgICAgIGlmIChrZXkubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5ib3kuZW1pdCgnZmllbGQnLCBkZWNvZGVUZXh0KGtleSwgJ2JpbmFyeScsIHRoaXMuY2hhcnNldCksXG4gICAgICAgICAgICAnJyxcbiAgICAgICAgICAgIGtleVRydW5jLFxuICAgICAgICAgICAgZmFsc2UpXG4gICAgICAgIH1cblxuICAgICAgICBwID0gaWR4YW1wICsgMVxuICAgICAgICBpZiAodGhpcy5fZmllbGRzID09PSB0aGlzLmZpZWxkc0xpbWl0KSB7IHJldHVybiBjYigpIH1cbiAgICAgIH0gZWxzZSBpZiAodGhpcy5faGl0TGltaXQpIHtcbiAgICAgICAgLy8gd2UgbWF5IG5vdCBoYXZlIGhpdCB0aGUgYWN0dWFsIGxpbWl0IGlmIHRoZXJlIGFyZSBlbmNvZGVkIGJ5dGVzLi4uXG4gICAgICAgIGlmIChpID4gcCkgeyB0aGlzLl9rZXkgKz0gdGhpcy5kZWNvZGVyLndyaXRlKGRhdGEudG9TdHJpbmcoJ2JpbmFyeScsIHAsIGkpKSB9XG4gICAgICAgIHAgPSBpXG4gICAgICAgIGlmICgodGhpcy5fYnl0ZXNLZXkgPSB0aGlzLl9rZXkubGVuZ3RoKSA9PT0gdGhpcy5maWVsZE5hbWVTaXplTGltaXQpIHtcbiAgICAgICAgICAvLyB5ZXAsIHdlIGFjdHVhbGx5IGRpZCBoaXQgdGhlIGxpbWl0XG4gICAgICAgICAgdGhpcy5fY2hlY2tpbmdCeXRlcyA9IGZhbHNlXG4gICAgICAgICAgdGhpcy5fa2V5VHJ1bmMgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChwIDwgbGVuKSB7IHRoaXMuX2tleSArPSB0aGlzLmRlY29kZXIud3JpdGUoZGF0YS50b1N0cmluZygnYmluYXJ5JywgcCkpIH1cbiAgICAgICAgcCA9IGxlblxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZHhhbXAgPSB1bmRlZmluZWRcbiAgICAgIGZvciAoaSA9IHA7IGkgPCBsZW47ICsraSkge1xuICAgICAgICBpZiAoIXRoaXMuX2NoZWNraW5nQnl0ZXMpIHsgKytwIH1cbiAgICAgICAgaWYgKGRhdGFbaV0gPT09IDB4MjYvKiAmICovKSB7XG4gICAgICAgICAgaWR4YW1wID0gaVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2NoZWNraW5nQnl0ZXMgJiYgdGhpcy5fYnl0ZXNWYWwgPT09IHRoaXMuZmllbGRTaXplTGltaXQpIHtcbiAgICAgICAgICB0aGlzLl9oaXRMaW1pdCA9IHRydWVcbiAgICAgICAgICBicmVha1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2NoZWNraW5nQnl0ZXMpIHsgKyt0aGlzLl9ieXRlc1ZhbCB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpZHhhbXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICArK3RoaXMuX2ZpZWxkc1xuICAgICAgICBpZiAoaWR4YW1wID4gcCkgeyB0aGlzLl92YWwgKz0gdGhpcy5kZWNvZGVyLndyaXRlKGRhdGEudG9TdHJpbmcoJ2JpbmFyeScsIHAsIGlkeGFtcCkpIH1cbiAgICAgICAgdGhpcy5ib3kuZW1pdCgnZmllbGQnLCBkZWNvZGVUZXh0KHRoaXMuX2tleSwgJ2JpbmFyeScsIHRoaXMuY2hhcnNldCksXG4gICAgICAgICAgZGVjb2RlVGV4dCh0aGlzLl92YWwsICdiaW5hcnknLCB0aGlzLmNoYXJzZXQpLFxuICAgICAgICAgIHRoaXMuX2tleVRydW5jLFxuICAgICAgICAgIHRoaXMuX3ZhbFRydW5jKVxuICAgICAgICB0aGlzLl9zdGF0ZSA9ICdrZXknXG5cbiAgICAgICAgdGhpcy5faGl0TGltaXQgPSBmYWxzZVxuICAgICAgICB0aGlzLl9jaGVja2luZ0J5dGVzID0gdHJ1ZVxuICAgICAgICB0aGlzLl9rZXkgPSAnJ1xuICAgICAgICB0aGlzLl9ieXRlc0tleSA9IDBcbiAgICAgICAgdGhpcy5fa2V5VHJ1bmMgPSBmYWxzZVxuICAgICAgICB0aGlzLmRlY29kZXIucmVzZXQoKVxuXG4gICAgICAgIHAgPSBpZHhhbXAgKyAxXG4gICAgICAgIGlmICh0aGlzLl9maWVsZHMgPT09IHRoaXMuZmllbGRzTGltaXQpIHsgcmV0dXJuIGNiKCkgfVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9oaXRMaW1pdCkge1xuICAgICAgICAvLyB3ZSBtYXkgbm90IGhhdmUgaGl0IHRoZSBhY3R1YWwgbGltaXQgaWYgdGhlcmUgYXJlIGVuY29kZWQgYnl0ZXMuLi5cbiAgICAgICAgaWYgKGkgPiBwKSB7IHRoaXMuX3ZhbCArPSB0aGlzLmRlY29kZXIud3JpdGUoZGF0YS50b1N0cmluZygnYmluYXJ5JywgcCwgaSkpIH1cbiAgICAgICAgcCA9IGlcbiAgICAgICAgaWYgKCh0aGlzLl92YWwgPT09ICcnICYmIHRoaXMuZmllbGRTaXplTGltaXQgPT09IDApIHx8XG4gICAgICAgICAgICAodGhpcy5fYnl0ZXNWYWwgPSB0aGlzLl92YWwubGVuZ3RoKSA9PT0gdGhpcy5maWVsZFNpemVMaW1pdCkge1xuICAgICAgICAgIC8vIHllcCwgd2UgYWN0dWFsbHkgZGlkIGhpdCB0aGUgbGltaXRcbiAgICAgICAgICB0aGlzLl9jaGVja2luZ0J5dGVzID0gZmFsc2VcbiAgICAgICAgICB0aGlzLl92YWxUcnVuYyA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHAgPCBsZW4pIHsgdGhpcy5fdmFsICs9IHRoaXMuZGVjb2Rlci53cml0ZShkYXRhLnRvU3RyaW5nKCdiaW5hcnknLCBwKSkgfVxuICAgICAgICBwID0gbGVuXG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNiKClcbn1cblxuVXJsRW5jb2RlZC5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5ib3kuX2RvbmUpIHsgcmV0dXJuIH1cblxuICBpZiAodGhpcy5fc3RhdGUgPT09ICdrZXknICYmIHRoaXMuX2tleS5sZW5ndGggPiAwKSB7XG4gICAgdGhpcy5ib3kuZW1pdCgnZmllbGQnLCBkZWNvZGVUZXh0KHRoaXMuX2tleSwgJ2JpbmFyeScsIHRoaXMuY2hhcnNldCksXG4gICAgICAnJyxcbiAgICAgIHRoaXMuX2tleVRydW5jLFxuICAgICAgZmFsc2UpXG4gIH0gZWxzZSBpZiAodGhpcy5fc3RhdGUgPT09ICd2YWwnKSB7XG4gICAgdGhpcy5ib3kuZW1pdCgnZmllbGQnLCBkZWNvZGVUZXh0KHRoaXMuX2tleSwgJ2JpbmFyeScsIHRoaXMuY2hhcnNldCksXG4gICAgICBkZWNvZGVUZXh0KHRoaXMuX3ZhbCwgJ2JpbmFyeScsIHRoaXMuY2hhcnNldCksXG4gICAgICB0aGlzLl9rZXlUcnVuYyxcbiAgICAgIHRoaXMuX3ZhbFRydW5jKVxuICB9XG4gIHRoaXMuYm95Ll9kb25lID0gdHJ1ZVxuICB0aGlzLmJveS5lbWl0KCdmaW5pc2gnKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFVybEVuY29kZWRcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFdyaXRhYmxlU3RyZWFtID0gcmVxdWlyZSgnbm9kZTpzdHJlYW0nKS5Xcml0YWJsZVxuY29uc3QgeyBpbmhlcml0cyB9ID0gcmVxdWlyZSgnbm9kZTp1dGlsJylcbmNvbnN0IERpY2VyID0gcmVxdWlyZSgnLi4vZGVwcy9kaWNlci9saWIvRGljZXInKVxuXG5jb25zdCBNdWx0aXBhcnRQYXJzZXIgPSByZXF1aXJlKCcuL3R5cGVzL211bHRpcGFydCcpXG5jb25zdCBVcmxlbmNvZGVkUGFyc2VyID0gcmVxdWlyZSgnLi90eXBlcy91cmxlbmNvZGVkJylcbmNvbnN0IHBhcnNlUGFyYW1zID0gcmVxdWlyZSgnLi91dGlscy9wYXJzZVBhcmFtcycpXG5cbmZ1bmN0aW9uIEJ1c2JveSAob3B0cykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQnVzYm95KSkgeyByZXR1cm4gbmV3IEJ1c2JveShvcHRzKSB9XG5cbiAgaWYgKHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0J1c2JveSBleHBlY3RlZCBhbiBvcHRpb25zLU9iamVjdC4nKVxuICB9XG4gIGlmICh0eXBlb2Ygb3B0cy5oZWFkZXJzICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0J1c2JveSBleHBlY3RlZCBhbiBvcHRpb25zLU9iamVjdCB3aXRoIGhlYWRlcnMtYXR0cmlidXRlLicpXG4gIH1cbiAgaWYgKHR5cGVvZiBvcHRzLmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ01pc3NpbmcgQ29udGVudC1UeXBlLWhlYWRlci4nKVxuICB9XG5cbiAgY29uc3Qge1xuICAgIGhlYWRlcnMsXG4gICAgLi4uc3RyZWFtT3B0aW9uc1xuICB9ID0gb3B0c1xuXG4gIHRoaXMub3B0cyA9IHtcbiAgICBhdXRvRGVzdHJveTogZmFsc2UsXG4gICAgLi4uc3RyZWFtT3B0aW9uc1xuICB9XG4gIFdyaXRhYmxlU3RyZWFtLmNhbGwodGhpcywgdGhpcy5vcHRzKVxuXG4gIHRoaXMuX2RvbmUgPSBmYWxzZVxuICB0aGlzLl9wYXJzZXIgPSB0aGlzLmdldFBhcnNlckJ5SGVhZGVycyhoZWFkZXJzKVxuICB0aGlzLl9maW5pc2hlZCA9IGZhbHNlXG59XG5pbmhlcml0cyhCdXNib3ksIFdyaXRhYmxlU3RyZWFtKVxuXG5CdXNib3kucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiAoZXYpIHtcbiAgaWYgKGV2ID09PSAnZmluaXNoJykge1xuICAgIGlmICghdGhpcy5fZG9uZSkge1xuICAgICAgdGhpcy5fcGFyc2VyPy5lbmQoKVxuICAgICAgcmV0dXJuXG4gICAgfSBlbHNlIGlmICh0aGlzLl9maW5pc2hlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHRoaXMuX2ZpbmlzaGVkID0gdHJ1ZVxuICB9XG4gIFdyaXRhYmxlU3RyZWFtLnByb3RvdHlwZS5lbWl0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbn1cblxuQnVzYm95LnByb3RvdHlwZS5nZXRQYXJzZXJCeUhlYWRlcnMgPSBmdW5jdGlvbiAoaGVhZGVycykge1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZVBhcmFtcyhoZWFkZXJzWydjb250ZW50LXR5cGUnXSlcblxuICBjb25zdCBjZmcgPSB7XG4gICAgZGVmQ2hhcnNldDogdGhpcy5vcHRzLmRlZkNoYXJzZXQsXG4gICAgZmlsZUh3bTogdGhpcy5vcHRzLmZpbGVId20sXG4gICAgaGVhZGVycyxcbiAgICBoaWdoV2F0ZXJNYXJrOiB0aGlzLm9wdHMuaGlnaFdhdGVyTWFyayxcbiAgICBpc1BhcnRBRmlsZTogdGhpcy5vcHRzLmlzUGFydEFGaWxlLFxuICAgIGxpbWl0czogdGhpcy5vcHRzLmxpbWl0cyxcbiAgICBwYXJzZWRDb25UeXBlOiBwYXJzZWQsXG4gICAgcHJlc2VydmVQYXRoOiB0aGlzLm9wdHMucHJlc2VydmVQYXRoXG4gIH1cblxuICBpZiAoTXVsdGlwYXJ0UGFyc2VyLmRldGVjdC50ZXN0KHBhcnNlZFswXSkpIHtcbiAgICByZXR1cm4gbmV3IE11bHRpcGFydFBhcnNlcih0aGlzLCBjZmcpXG4gIH1cbiAgaWYgKFVybGVuY29kZWRQYXJzZXIuZGV0ZWN0LnRlc3QocGFyc2VkWzBdKSkge1xuICAgIHJldHVybiBuZXcgVXJsZW5jb2RlZFBhcnNlcih0aGlzLCBjZmcpXG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBDb250ZW50LVR5cGUuJylcbn1cblxuQnVzYm95LnByb3RvdHlwZS5fd3JpdGUgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICB0aGlzLl9wYXJzZXIud3JpdGUoY2h1bmssIGNiKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEJ1c2JveVxubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IEJ1c2JveVxubW9kdWxlLmV4cG9ydHMuQnVzYm95ID0gQnVzYm95XG5cbm1vZHVsZS5leHBvcnRzLkRpY2VyID0gRGljZXJcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgTWVzc2FnZUNoYW5uZWwsIHJlY2VpdmVNZXNzYWdlT25Qb3J0IH0gPSByZXF1aXJlKCd3b3JrZXJfdGhyZWFkcycpXG5cbmNvbnN0IGNvcnNTYWZlTGlzdGVkTWV0aG9kcyA9IFsnR0VUJywgJ0hFQUQnLCAnUE9TVCddXG5jb25zdCBjb3JzU2FmZUxpc3RlZE1ldGhvZHNTZXQgPSBuZXcgU2V0KGNvcnNTYWZlTGlzdGVkTWV0aG9kcylcblxuY29uc3QgbnVsbEJvZHlTdGF0dXMgPSBbMTAxLCAyMDQsIDIwNSwgMzA0XVxuXG5jb25zdCByZWRpcmVjdFN0YXR1cyA9IFszMDEsIDMwMiwgMzAzLCAzMDcsIDMwOF1cbmNvbnN0IHJlZGlyZWN0U3RhdHVzU2V0ID0gbmV3IFNldChyZWRpcmVjdFN0YXR1cylcblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2Jsb2NrLWJhZC1wb3J0XG5jb25zdCBiYWRQb3J0cyA9IFtcbiAgJzEnLCAnNycsICc5JywgJzExJywgJzEzJywgJzE1JywgJzE3JywgJzE5JywgJzIwJywgJzIxJywgJzIyJywgJzIzJywgJzI1JywgJzM3JywgJzQyJywgJzQzJywgJzUzJywgJzY5JywgJzc3JywgJzc5JyxcbiAgJzg3JywgJzk1JywgJzEwMScsICcxMDInLCAnMTAzJywgJzEwNCcsICcxMDknLCAnMTEwJywgJzExMScsICcxMTMnLCAnMTE1JywgJzExNycsICcxMTknLCAnMTIzJywgJzEzNScsICcxMzcnLFxuICAnMTM5JywgJzE0MycsICcxNjEnLCAnMTc5JywgJzM4OScsICc0MjcnLCAnNDY1JywgJzUxMicsICc1MTMnLCAnNTE0JywgJzUxNScsICc1MjYnLCAnNTMwJywgJzUzMScsICc1MzInLFxuICAnNTQwJywgJzU0OCcsICc1NTQnLCAnNTU2JywgJzU2MycsICc1ODcnLCAnNjAxJywgJzYzNicsICc5ODknLCAnOTkwJywgJzk5MycsICc5OTUnLCAnMTcxOScsICcxNzIwJywgJzE3MjMnLFxuICAnMjA0OScsICczNjU5JywgJzQwNDUnLCAnNTA2MCcsICc1MDYxJywgJzYwMDAnLCAnNjU2NicsICc2NjY1JywgJzY2NjYnLCAnNjY2NycsICc2NjY4JywgJzY2NjknLCAnNjY5NycsXG4gICcxMDA4MCdcbl1cblxuY29uc3QgYmFkUG9ydHNTZXQgPSBuZXcgU2V0KGJhZFBvcnRzKVxuXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLXJlZmVycmVyLXBvbGljeS8jcmVmZXJyZXItcG9saWNpZXNcbmNvbnN0IHJlZmVycmVyUG9saWN5ID0gW1xuICAnJyxcbiAgJ25vLXJlZmVycmVyJyxcbiAgJ25vLXJlZmVycmVyLXdoZW4tZG93bmdyYWRlJyxcbiAgJ3NhbWUtb3JpZ2luJyxcbiAgJ29yaWdpbicsXG4gICdzdHJpY3Qtb3JpZ2luJyxcbiAgJ29yaWdpbi13aGVuLWNyb3NzLW9yaWdpbicsXG4gICdzdHJpY3Qtb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luJyxcbiAgJ3Vuc2FmZS11cmwnXG5dXG5jb25zdCByZWZlcnJlclBvbGljeVNldCA9IG5ldyBTZXQocmVmZXJyZXJQb2xpY3kpXG5cbmNvbnN0IHJlcXVlc3RSZWRpcmVjdCA9IFsnZm9sbG93JywgJ21hbnVhbCcsICdlcnJvciddXG5cbmNvbnN0IHNhZmVNZXRob2RzID0gWydHRVQnLCAnSEVBRCcsICdPUFRJT05TJywgJ1RSQUNFJ11cbmNvbnN0IHNhZmVNZXRob2RzU2V0ID0gbmV3IFNldChzYWZlTWV0aG9kcylcblxuY29uc3QgcmVxdWVzdE1vZGUgPSBbJ25hdmlnYXRlJywgJ3NhbWUtb3JpZ2luJywgJ25vLWNvcnMnLCAnY29ycyddXG5cbmNvbnN0IHJlcXVlc3RDcmVkZW50aWFscyA9IFsnb21pdCcsICdzYW1lLW9yaWdpbicsICdpbmNsdWRlJ11cblxuY29uc3QgcmVxdWVzdENhY2hlID0gW1xuICAnZGVmYXVsdCcsXG4gICduby1zdG9yZScsXG4gICdyZWxvYWQnLFxuICAnbm8tY2FjaGUnLFxuICAnZm9yY2UtY2FjaGUnLFxuICAnb25seS1pZi1jYWNoZWQnXG5dXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXF1ZXN0LWJvZHktaGVhZGVyLW5hbWVcbmNvbnN0IHJlcXVlc3RCb2R5SGVhZGVyID0gW1xuICAnY29udGVudC1lbmNvZGluZycsXG4gICdjb250ZW50LWxhbmd1YWdlJyxcbiAgJ2NvbnRlbnQtbG9jYXRpb24nLFxuICAnY29udGVudC10eXBlJyxcbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8yMDIxXG4gIC8vICdDb250ZW50LUxlbmd0aCcgaXMgYSBmb3JiaWRkZW4gaGVhZGVyIG5hbWUsIHdoaWNoIGlzIHR5cGljYWxseVxuICAvLyByZW1vdmVkIGluIHRoZSBIZWFkZXJzIGltcGxlbWVudGF0aW9uLiBIb3dldmVyLCB1bmRpY2kgZG9lc24ndFxuICAvLyBmaWx0ZXIgb3V0IGhlYWRlcnMsIHNvIHdlIGFkZCBpdCBoZXJlLlxuICAnY29udGVudC1sZW5ndGgnXG5dXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNlbnVtZGVmLXJlcXVlc3RkdXBsZXhcbmNvbnN0IHJlcXVlc3REdXBsZXggPSBbXG4gICdoYWxmJ1xuXVxuXG4vLyBodHRwOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmb3JiaWRkZW4tbWV0aG9kXG5jb25zdCBmb3JiaWRkZW5NZXRob2RzID0gWydDT05ORUNUJywgJ1RSQUNFJywgJ1RSQUNLJ11cbmNvbnN0IGZvcmJpZGRlbk1ldGhvZHNTZXQgPSBuZXcgU2V0KGZvcmJpZGRlbk1ldGhvZHMpXG5cbmNvbnN0IHN1YnJlc291cmNlID0gW1xuICAnYXVkaW8nLFxuICAnYXVkaW93b3JrbGV0JyxcbiAgJ2ZvbnQnLFxuICAnaW1hZ2UnLFxuICAnbWFuaWZlc3QnLFxuICAncGFpbnR3b3JrbGV0JyxcbiAgJ3NjcmlwdCcsXG4gICdzdHlsZScsXG4gICd0cmFjaycsXG4gICd2aWRlbycsXG4gICd4c2x0JyxcbiAgJydcbl1cbmNvbnN0IHN1YnJlc291cmNlU2V0ID0gbmV3IFNldChzdWJyZXNvdXJjZSlcblxuLyoqIEB0eXBlIHtnbG9iYWxUaGlzWydET01FeGNlcHRpb24nXX0gKi9cbmNvbnN0IERPTUV4Y2VwdGlvbiA9IGdsb2JhbFRoaXMuRE9NRXhjZXB0aW9uID8/ICgoKSA9PiB7XG4gIC8vIERPTUV4Y2VwdGlvbiB3YXMgb25seSBtYWRlIGEgZ2xvYmFsIGluIE5vZGUgdjE3LjAuMCxcbiAgLy8gYnV0IGZldGNoIHN1cHBvcnRzID49IHYxNi44LlxuICB0cnkge1xuICAgIGF0b2IoJ34nKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKGVycikuY29uc3RydWN0b3JcbiAgfVxufSkoKVxuXG5sZXQgY2hhbm5lbFxuXG4vKiogQHR5cGUge2dsb2JhbFRoaXNbJ3N0cnVjdHVyZWRDbG9uZSddfSAqL1xuY29uc3Qgc3RydWN0dXJlZENsb25lID1cbiAgZ2xvYmFsVGhpcy5zdHJ1Y3R1cmVkQ2xvbmUgPz9cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvYjI3YWUyNGRjYzQyNTFiYWQ3MjZkOWQ4NGJhZjY3OGQxZjcwN2ZlZC9saWIvaW50ZXJuYWwvc3RydWN0dXJlZF9jbG9uZS5qc1xuICAvLyBzdHJ1Y3R1cmVkQ2xvbmUgd2FzIGFkZGVkIGluIHYxNy4wLjAsIGJ1dCBmZXRjaCBzdXBwb3J0cyB2MTYuOFxuICBmdW5jdGlvbiBzdHJ1Y3R1cmVkQ2xvbmUgKHZhbHVlLCBvcHRpb25zID0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ21pc3NpbmcgYXJndW1lbnQnKVxuICAgIH1cblxuICAgIGlmICghY2hhbm5lbCkge1xuICAgICAgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpXG4gICAgfVxuICAgIGNoYW5uZWwucG9ydDEudW5yZWYoKVxuICAgIGNoYW5uZWwucG9ydDIudW5yZWYoKVxuICAgIGNoYW5uZWwucG9ydDEucG9zdE1lc3NhZ2UodmFsdWUsIG9wdGlvbnM/LnRyYW5zZmVyKVxuICAgIHJldHVybiByZWNlaXZlTWVzc2FnZU9uUG9ydChjaGFubmVsLnBvcnQyKS5tZXNzYWdlXG4gIH1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIERPTUV4Y2VwdGlvbixcbiAgc3RydWN0dXJlZENsb25lLFxuICBzdWJyZXNvdXJjZSxcbiAgZm9yYmlkZGVuTWV0aG9kcyxcbiAgcmVxdWVzdEJvZHlIZWFkZXIsXG4gIHJlZmVycmVyUG9saWN5LFxuICByZXF1ZXN0UmVkaXJlY3QsXG4gIHJlcXVlc3RNb2RlLFxuICByZXF1ZXN0Q3JlZGVudGlhbHMsXG4gIHJlcXVlc3RDYWNoZSxcbiAgcmVkaXJlY3RTdGF0dXMsXG4gIGNvcnNTYWZlTGlzdGVkTWV0aG9kcyxcbiAgbnVsbEJvZHlTdGF0dXMsXG4gIHNhZmVNZXRob2RzLFxuICBiYWRQb3J0cyxcbiAgcmVxdWVzdER1cGxleCxcbiAgc3VicmVzb3VyY2VTZXQsXG4gIGJhZFBvcnRzU2V0LFxuICByZWRpcmVjdFN0YXR1c1NldCxcbiAgY29yc1NhZmVMaXN0ZWRNZXRob2RzU2V0LFxuICBzYWZlTWV0aG9kc1NldCxcbiAgZm9yYmlkZGVuTWV0aG9kc1NldCxcbiAgcmVmZXJyZXJQb2xpY3lTZXRcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbi8vIEluIGNhc2Ugb2YgYnJlYWtpbmcgY2hhbmdlcywgaW5jcmVhc2UgdGhlIHZlcnNpb25cbi8vIG51bWJlciB0byBhdm9pZCBjb25mbGljdHMuXG5jb25zdCBnbG9iYWxPcmlnaW4gPSBTeW1ib2wuZm9yKCd1bmRpY2kuZ2xvYmFsT3JpZ2luLjEnKVxuXG5mdW5jdGlvbiBnZXRHbG9iYWxPcmlnaW4gKCkge1xuICByZXR1cm4gZ2xvYmFsVGhpc1tnbG9iYWxPcmlnaW5dXG59XG5cbmZ1bmN0aW9uIHNldEdsb2JhbE9yaWdpbiAobmV3T3JpZ2luKSB7XG4gIGlmIChuZXdPcmlnaW4gPT09IHVuZGVmaW5lZCkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnbG9iYWxUaGlzLCBnbG9iYWxPcmlnaW4sIHtcbiAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZVxuICAgIH0pXG5cbiAgICByZXR1cm5cbiAgfVxuXG4gIGNvbnN0IHBhcnNlZFVSTCA9IG5ldyBVUkwobmV3T3JpZ2luKVxuXG4gIGlmIChwYXJzZWRVUkwucHJvdG9jb2wgIT09ICdodHRwOicgJiYgcGFyc2VkVVJMLnByb3RvY29sICE9PSAnaHR0cHM6Jykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE9ubHkgaHR0cCAmIGh0dHBzIHVybHMgYXJlIGFsbG93ZWQsIHJlY2VpdmVkICR7cGFyc2VkVVJMLnByb3RvY29sfWApXG4gIH1cblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZ2xvYmFsVGhpcywgZ2xvYmFsT3JpZ2luLCB7XG4gICAgdmFsdWU6IHBhcnNlZFVSTCxcbiAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IGZhbHNlXG4gIH0pXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRHbG9iYWxPcmlnaW4sXG4gIHNldEdsb2JhbE9yaWdpblxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyByZWRpcmVjdFN0YXR1c1NldCwgcmVmZXJyZXJQb2xpY3lTZXQ6IHJlZmVycmVyUG9saWN5VG9rZW5zLCBiYWRQb3J0c1NldCB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3QgeyBnZXRHbG9iYWxPcmlnaW4gfSA9IHJlcXVpcmUoJy4vZ2xvYmFsJylcbmNvbnN0IHsgcGVyZm9ybWFuY2UgfSA9IHJlcXVpcmUoJ3BlcmZfaG9va3MnKVxuY29uc3QgeyBpc0Jsb2JMaWtlLCB0b1VTVlN0cmluZywgUmVhZGFibGVTdHJlYW1Gcm9tIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbmNvbnN0IHsgaXNVaW50OEFycmF5IH0gPSByZXF1aXJlKCd1dGlsL3R5cGVzJylcblxubGV0IHN1cHBvcnRlZEhhc2hlcyA9IFtdXG5cbi8vIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvY3J5cHRvLmh0bWwjZGV0ZXJtaW5pbmctaWYtY3J5cHRvLXN1cHBvcnQtaXMtdW5hdmFpbGFibGVcbi8qKiBAdHlwZSB7aW1wb3J0KCdjcnlwdG8nKXx1bmRlZmluZWR9ICovXG5sZXQgY3J5cHRvXG5cbnRyeSB7XG4gIGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpXG4gIGNvbnN0IHBvc3NpYmxlUmVsZXZhbnRIYXNoZXMgPSBbJ3NoYTI1NicsICdzaGEzODQnLCAnc2hhNTEyJ11cbiAgc3VwcG9ydGVkSGFzaGVzID0gY3J5cHRvLmdldEhhc2hlcygpLmZpbHRlcigoaGFzaCkgPT4gcG9zc2libGVSZWxldmFudEhhc2hlcy5pbmNsdWRlcyhoYXNoKSlcbi8qIGM4IGlnbm9yZSBuZXh0IDMgKi9cbn0gY2F0Y2gge1xufVxuXG5mdW5jdGlvbiByZXNwb25zZVVSTCAocmVzcG9uc2UpIHtcbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3Jlc3BvbnNlc1xuICAvLyBBIHJlc3BvbnNlIGhhcyBhbiBhc3NvY2lhdGVkIFVSTC4gSXQgaXMgYSBwb2ludGVyIHRvIHRoZSBsYXN0IFVSTFxuICAvLyBpbiByZXNwb25zZeKAmXMgVVJMIGxpc3QgYW5kIG51bGwgaWYgcmVzcG9uc2XigJlzIFVSTCBsaXN0IGlzIGVtcHR5LlxuICBjb25zdCB1cmxMaXN0ID0gcmVzcG9uc2UudXJsTGlzdFxuICBjb25zdCBsZW5ndGggPSB1cmxMaXN0Lmxlbmd0aFxuICByZXR1cm4gbGVuZ3RoID09PSAwID8gbnVsbCA6IHVybExpc3RbbGVuZ3RoIC0gMV0udG9TdHJpbmcoKVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1yZXNwb25zZS1sb2NhdGlvbi11cmxcbmZ1bmN0aW9uIHJlc3BvbnNlTG9jYXRpb25VUkwgKHJlc3BvbnNlLCByZXF1ZXN0RnJhZ21lbnQpIHtcbiAgLy8gMS4gSWYgcmVzcG9uc2XigJlzIHN0YXR1cyBpcyBub3QgYSByZWRpcmVjdCBzdGF0dXMsIHRoZW4gcmV0dXJuIG51bGwuXG4gIGlmICghcmVkaXJlY3RTdGF0dXNTZXQuaGFzKHJlc3BvbnNlLnN0YXR1cykpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLy8gMi4gTGV0IGxvY2F0aW9uIGJlIHRoZSByZXN1bHQgb2YgZXh0cmFjdGluZyBoZWFkZXIgbGlzdCB2YWx1ZXMgZ2l2ZW5cbiAgLy8gYExvY2F0aW9uYCBhbmQgcmVzcG9uc2XigJlzIGhlYWRlciBsaXN0LlxuICBsZXQgbG9jYXRpb24gPSByZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ2xvY2F0aW9uJylcblxuICAvLyAzLiBJZiBsb2NhdGlvbiBpcyBhIGhlYWRlciB2YWx1ZSwgdGhlbiBzZXQgbG9jYXRpb24gdG8gdGhlIHJlc3VsdCBvZlxuICAvLyAgICBwYXJzaW5nIGxvY2F0aW9uIHdpdGggcmVzcG9uc2XigJlzIFVSTC5cbiAgaWYgKGxvY2F0aW9uICE9PSBudWxsICYmIGlzVmFsaWRIZWFkZXJWYWx1ZShsb2NhdGlvbikpIHtcbiAgICBsb2NhdGlvbiA9IG5ldyBVUkwobG9jYXRpb24sIHJlc3BvbnNlVVJMKHJlc3BvbnNlKSlcbiAgfVxuXG4gIC8vIDQuIElmIGxvY2F0aW9uIGlzIGEgVVJMIHdob3NlIGZyYWdtZW50IGlzIG51bGwsIHRoZW4gc2V0IGxvY2F0aW9u4oCZc1xuICAvLyBmcmFnbWVudCB0byByZXF1ZXN0RnJhZ21lbnQuXG4gIGlmIChsb2NhdGlvbiAmJiAhbG9jYXRpb24uaGFzaCkge1xuICAgIGxvY2F0aW9uLmhhc2ggPSByZXF1ZXN0RnJhZ21lbnRcbiAgfVxuXG4gIC8vIDUuIFJldHVybiBsb2NhdGlvbi5cbiAgcmV0dXJuIGxvY2F0aW9uXG59XG5cbi8qKiBAcmV0dXJucyB7VVJMfSAqL1xuZnVuY3Rpb24gcmVxdWVzdEN1cnJlbnRVUkwgKHJlcXVlc3QpIHtcbiAgcmV0dXJuIHJlcXVlc3QudXJsTGlzdFtyZXF1ZXN0LnVybExpc3QubGVuZ3RoIC0gMV1cbn1cblxuZnVuY3Rpb24gcmVxdWVzdEJhZFBvcnQgKHJlcXVlc3QpIHtcbiAgLy8gMS4gTGV0IHVybCBiZSByZXF1ZXN04oCZcyBjdXJyZW50IFVSTC5cbiAgY29uc3QgdXJsID0gcmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdClcblxuICAvLyAyLiBJZiB1cmzigJlzIHNjaGVtZSBpcyBhbiBIVFRQKFMpIHNjaGVtZSBhbmQgdXJs4oCZcyBwb3J0IGlzIGEgYmFkIHBvcnQsXG4gIC8vIHRoZW4gcmV0dXJuIGJsb2NrZWQuXG4gIGlmICh1cmxJc0h0dHBIdHRwc1NjaGVtZSh1cmwpICYmIGJhZFBvcnRzU2V0Lmhhcyh1cmwucG9ydCkpIHtcbiAgICByZXR1cm4gJ2Jsb2NrZWQnXG4gIH1cblxuICAvLyAzLiBSZXR1cm4gYWxsb3dlZC5cbiAgcmV0dXJuICdhbGxvd2VkJ1xufVxuXG5mdW5jdGlvbiBpc0Vycm9yTGlrZSAob2JqZWN0KSB7XG4gIHJldHVybiBvYmplY3QgaW5zdGFuY2VvZiBFcnJvciB8fCAoXG4gICAgb2JqZWN0Py5jb25zdHJ1Y3Rvcj8ubmFtZSA9PT0gJ0Vycm9yJyB8fFxuICAgIG9iamVjdD8uY29uc3RydWN0b3I/Lm5hbWUgPT09ICdET01FeGNlcHRpb24nXG4gIClcbn1cblxuLy8gQ2hlY2sgd2hldGhlciB8c3RhdHVzVGV4dHwgaXMgYSBCeXRlU3RyaW5nIGFuZFxuLy8gbWF0Y2hlcyB0aGUgUmVhc29uLVBocmFzZSB0b2tlbiBwcm9kdWN0aW9uLlxuLy8gUkZDIDI2MTY6IGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyNjE2XG4vLyBSRkMgNzIzMDogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzBcbi8vIFwicmVhc29uLXBocmFzZSA9ICooIEhUQUIgLyBTUCAvIFZDSEFSIC8gb2JzLXRleHQgKVwiXG4vLyBodHRwczovL2dpdGh1Yi5jb20vY2hyb21pdW0vY2hyb21pdW0vYmxvYi85NC4wLjQ2MDQuMS90aGlyZF9wYXJ0eS9ibGluay9yZW5kZXJlci9jb3JlL2ZldGNoL3Jlc3BvbnNlLmNjI0wxMTZcbmZ1bmN0aW9uIGlzVmFsaWRSZWFzb25QaHJhc2UgKHN0YXR1c1RleHQpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdGF0dXNUZXh0Lmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgYyA9IHN0YXR1c1RleHQuY2hhckNvZGVBdChpKVxuICAgIGlmIChcbiAgICAgICEoXG4gICAgICAgIChcbiAgICAgICAgICBjID09PSAweDA5IHx8IC8vIEhUQUJcbiAgICAgICAgICAoYyA+PSAweDIwICYmIGMgPD0gMHg3ZSkgfHwgLy8gU1AgLyBWQ0hBUlxuICAgICAgICAgIChjID49IDB4ODAgJiYgYyA8PSAweGZmKVxuICAgICAgICApIC8vIG9icy10ZXh0XG4gICAgICApXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4yLjZcbiAqIEBwYXJhbSB7bnVtYmVyfSBjXG4gKi9cbmZ1bmN0aW9uIGlzVG9rZW5DaGFyQ29kZSAoYykge1xuICBzd2l0Y2ggKGMpIHtcbiAgICBjYXNlIDB4MjI6XG4gICAgY2FzZSAweDI4OlxuICAgIGNhc2UgMHgyOTpcbiAgICBjYXNlIDB4MmM6XG4gICAgY2FzZSAweDJmOlxuICAgIGNhc2UgMHgzYTpcbiAgICBjYXNlIDB4M2I6XG4gICAgY2FzZSAweDNjOlxuICAgIGNhc2UgMHgzZDpcbiAgICBjYXNlIDB4M2U6XG4gICAgY2FzZSAweDNmOlxuICAgIGNhc2UgMHg0MDpcbiAgICBjYXNlIDB4NWI6XG4gICAgY2FzZSAweDVjOlxuICAgIGNhc2UgMHg1ZDpcbiAgICBjYXNlIDB4N2I6XG4gICAgY2FzZSAweDdkOlxuICAgICAgLy8gRFFVT1RFIGFuZCBcIigpLC86Ozw9Pj9AW1xcXXt9XCJcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBWQ0hBUiAleDIxLTdFXG4gICAgICByZXR1cm4gYyA+PSAweDIxICYmIGMgPD0gMHg3ZVxuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGNoYXJhY3RlcnNcbiAqL1xuZnVuY3Rpb24gaXNWYWxpZEhUVFBUb2tlbiAoY2hhcmFjdGVycykge1xuICBpZiAoY2hhcmFjdGVycy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGNoYXJhY3RlcnMubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoIWlzVG9rZW5DaGFyQ29kZShjaGFyYWN0ZXJzLmNoYXJDb2RlQXQoaSkpKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNoZWFkZXItbmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IHBvdGVudGlhbFZhbHVlXG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRIZWFkZXJOYW1lIChwb3RlbnRpYWxWYWx1ZSkge1xuICByZXR1cm4gaXNWYWxpZEhUVFBUb2tlbihwb3RlbnRpYWxWYWx1ZSlcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNoZWFkZXItdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBwb3RlbnRpYWxWYWx1ZVxuICovXG5mdW5jdGlvbiBpc1ZhbGlkSGVhZGVyVmFsdWUgKHBvdGVudGlhbFZhbHVlKSB7XG4gIC8vIC0gSGFzIG5vIGxlYWRpbmcgb3IgdHJhaWxpbmcgSFRUUCB0YWIgb3Igc3BhY2UgYnl0ZXMuXG4gIC8vIC0gQ29udGFpbnMgbm8gMHgwMCAoTlVMKSBvciBIVFRQIG5ld2xpbmUgYnl0ZXMuXG4gIGlmIChcbiAgICBwb3RlbnRpYWxWYWx1ZS5zdGFydHNXaXRoKCdcXHQnKSB8fFxuICAgIHBvdGVudGlhbFZhbHVlLnN0YXJ0c1dpdGgoJyAnKSB8fFxuICAgIHBvdGVudGlhbFZhbHVlLmVuZHNXaXRoKCdcXHQnKSB8fFxuICAgIHBvdGVudGlhbFZhbHVlLmVuZHNXaXRoKCcgJylcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBpZiAoXG4gICAgcG90ZW50aWFsVmFsdWUuaW5jbHVkZXMoJ1xcMCcpIHx8XG4gICAgcG90ZW50aWFsVmFsdWUuaW5jbHVkZXMoJ1xccicpIHx8XG4gICAgcG90ZW50aWFsVmFsdWUuaW5jbHVkZXMoJ1xcbicpXG4gICkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1yZWZlcnJlci1wb2xpY3kvI3NldC1yZXF1ZXN0cy1yZWZlcnJlci1wb2xpY3ktb24tcmVkaXJlY3RcbmZ1bmN0aW9uIHNldFJlcXVlc3RSZWZlcnJlclBvbGljeU9uUmVkaXJlY3QgKHJlcXVlc3QsIGFjdHVhbFJlc3BvbnNlKSB7XG4gIC8vICBHaXZlbiBhIHJlcXVlc3QgcmVxdWVzdCBhbmQgYSByZXNwb25zZSBhY3R1YWxSZXNwb25zZSwgdGhpcyBhbGdvcml0aG1cbiAgLy8gIHVwZGF0ZXMgcmVxdWVzdOKAmXMgcmVmZXJyZXIgcG9saWN5IGFjY29yZGluZyB0byB0aGUgUmVmZXJyZXItUG9saWN5XG4gIC8vICBoZWFkZXIgKGlmIGFueSkgaW4gYWN0dWFsUmVzcG9uc2UuXG5cbiAgLy8gMS4gTGV0IHBvbGljeSBiZSB0aGUgcmVzdWx0IG9mIGV4ZWN1dGluZyDCpyA4LjEgUGFyc2UgYSByZWZlcnJlciBwb2xpY3lcbiAgLy8gZnJvbSBhIFJlZmVycmVyLVBvbGljeSBoZWFkZXIgb24gYWN0dWFsUmVzcG9uc2UuXG5cbiAgLy8gOC4xIFBhcnNlIGEgcmVmZXJyZXIgcG9saWN5IGZyb20gYSBSZWZlcnJlci1Qb2xpY3kgaGVhZGVyXG4gIC8vIDEuIExldCBwb2xpY3ktdG9rZW5zIGJlIHRoZSByZXN1bHQgb2YgZXh0cmFjdGluZyBoZWFkZXIgbGlzdCB2YWx1ZXMgZ2l2ZW4gYFJlZmVycmVyLVBvbGljeWAgYW5kIHJlc3BvbnNl4oCZcyBoZWFkZXIgbGlzdC5cbiAgY29uc3QgeyBoZWFkZXJzTGlzdCB9ID0gYWN0dWFsUmVzcG9uc2VcbiAgLy8gMi4gTGV0IHBvbGljeSBiZSB0aGUgZW1wdHkgc3RyaW5nLlxuICAvLyAzLiBGb3IgZWFjaCB0b2tlbiBpbiBwb2xpY3ktdG9rZW5zLCBpZiB0b2tlbiBpcyBhIHJlZmVycmVyIHBvbGljeSBhbmQgdG9rZW4gaXMgbm90IHRoZSBlbXB0eSBzdHJpbmcsIHRoZW4gc2V0IHBvbGljeSB0byB0b2tlbi5cbiAgLy8gNC4gUmV0dXJuIHBvbGljeS5cbiAgY29uc3QgcG9saWN5SGVhZGVyID0gKGhlYWRlcnNMaXN0LmdldCgncmVmZXJyZXItcG9saWN5JykgPz8gJycpLnNwbGl0KCcsJylcblxuICAvLyBOb3RlOiBBcyB0aGUgcmVmZXJyZXItcG9saWN5IGNhbiBjb250YWluIG11bHRpcGxlIHBvbGljaWVzXG4gIC8vIHNlcGFyYXRlZCBieSBjb21tYSwgd2UgbmVlZCB0byBsb29wIHRocm91Z2ggYWxsIG9mIHRoZW1cbiAgLy8gYW5kIHBpY2sgdGhlIGZpcnN0IHZhbGlkIG9uZS5cbiAgLy8gUmVmOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvUmVmZXJyZXItUG9saWN5I3NwZWNpZnlfYV9mYWxsYmFja19wb2xpY3lcbiAgbGV0IHBvbGljeSA9ICcnXG4gIGlmIChwb2xpY3lIZWFkZXIubGVuZ3RoID4gMCkge1xuICAgIC8vIFRoZSByaWdodC1tb3N0IHBvbGljeSB0YWtlcyBwcmVjZWRlbmNlLlxuICAgIC8vIFRoZSBsZWZ0LW1vc3QgcG9saWN5IGlzIHRoZSBmYWxsYmFjay5cbiAgICBmb3IgKGxldCBpID0gcG9saWN5SGVhZGVyLmxlbmd0aDsgaSAhPT0gMDsgaS0tKSB7XG4gICAgICBjb25zdCB0b2tlbiA9IHBvbGljeUhlYWRlcltpIC0gMV0udHJpbSgpXG4gICAgICBpZiAocmVmZXJyZXJQb2xpY3lUb2tlbnMuaGFzKHRva2VuKSkge1xuICAgICAgICBwb2xpY3kgPSB0b2tlblxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIDIuIElmIHBvbGljeSBpcyBub3QgdGhlIGVtcHR5IHN0cmluZywgdGhlbiBzZXQgcmVxdWVzdOKAmXMgcmVmZXJyZXIgcG9saWN5IHRvIHBvbGljeS5cbiAgaWYgKHBvbGljeSAhPT0gJycpIHtcbiAgICByZXF1ZXN0LnJlZmVycmVyUG9saWN5ID0gcG9saWN5XG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2Nyb3NzLW9yaWdpbi1yZXNvdXJjZS1wb2xpY3ktY2hlY2tcbmZ1bmN0aW9uIGNyb3NzT3JpZ2luUmVzb3VyY2VQb2xpY3lDaGVjayAoKSB7XG4gIC8vIFRPRE9cbiAgcmV0dXJuICdhbGxvd2VkJ1xufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1jb3JzLWNoZWNrXG5mdW5jdGlvbiBjb3JzQ2hlY2sgKCkge1xuICAvLyBUT0RPXG4gIHJldHVybiAnc3VjY2Vzcydcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtdGFvLWNoZWNrXG5mdW5jdGlvbiBUQU9DaGVjayAoKSB7XG4gIC8vIFRPRE9cbiAgcmV0dXJuICdzdWNjZXNzJ1xufVxuXG5mdW5jdGlvbiBhcHBlbmRGZXRjaE1ldGFkYXRhIChodHRwUmVxdWVzdCkge1xuICAvLyAgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1mZXRjaC1tZXRhZGF0YS8jc2VjLWZldGNoLWRlc3QtaGVhZGVyXG4gIC8vICBUT0RPXG5cbiAgLy8gIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtZmV0Y2gtbWV0YWRhdGEvI3NlYy1mZXRjaC1tb2RlLWhlYWRlclxuXG4gIC8vICAxLiBBc3NlcnQ6IHLigJlzIHVybCBpcyBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTC5cbiAgLy8gIFRPRE9cblxuICAvLyAgMi4gTGV0IGhlYWRlciBiZSBhIFN0cnVjdHVyZWQgSGVhZGVyIHdob3NlIHZhbHVlIGlzIGEgdG9rZW4uXG4gIGxldCBoZWFkZXIgPSBudWxsXG5cbiAgLy8gIDMuIFNldCBoZWFkZXLigJlzIHZhbHVlIHRvIHLigJlzIG1vZGUuXG4gIGhlYWRlciA9IGh0dHBSZXF1ZXN0Lm1vZGVcblxuICAvLyAgNC4gU2V0IGEgc3RydWN0dXJlZCBmaWVsZCB2YWx1ZSBgU2VjLUZldGNoLU1vZGVgL2hlYWRlciBpbiBy4oCZcyBoZWFkZXIgbGlzdC5cbiAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3Quc2V0KCdzZWMtZmV0Y2gtbW9kZScsIGhlYWRlcilcblxuICAvLyAgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1mZXRjaC1tZXRhZGF0YS8jc2VjLWZldGNoLXNpdGUtaGVhZGVyXG4gIC8vICBUT0RPXG5cbiAgLy8gIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtZmV0Y2gtbWV0YWRhdGEvI3NlYy1mZXRjaC11c2VyLWhlYWRlclxuICAvLyAgVE9ET1xufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYXBwZW5kLWEtcmVxdWVzdC1vcmlnaW4taGVhZGVyXG5mdW5jdGlvbiBhcHBlbmRSZXF1ZXN0T3JpZ2luSGVhZGVyIChyZXF1ZXN0KSB7XG4gIC8vIDEuIExldCBzZXJpYWxpemVkT3JpZ2luIGJlIHRoZSByZXN1bHQgb2YgYnl0ZS1zZXJpYWxpemluZyBhIHJlcXVlc3Qgb3JpZ2luIHdpdGggcmVxdWVzdC5cbiAgbGV0IHNlcmlhbGl6ZWRPcmlnaW4gPSByZXF1ZXN0Lm9yaWdpblxuXG4gIC8vIDIuIElmIHJlcXVlc3TigJlzIHJlc3BvbnNlIHRhaW50aW5nIGlzIFwiY29yc1wiIG9yIHJlcXVlc3TigJlzIG1vZGUgaXMgXCJ3ZWJzb2NrZXRcIiwgdGhlbiBhcHBlbmQgKGBPcmlnaW5gLCBzZXJpYWxpemVkT3JpZ2luKSB0byByZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cbiAgaWYgKHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ2NvcnMnIHx8IHJlcXVlc3QubW9kZSA9PT0gJ3dlYnNvY2tldCcpIHtcbiAgICBpZiAoc2VyaWFsaXplZE9yaWdpbikge1xuICAgICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ29yaWdpbicsIHNlcmlhbGl6ZWRPcmlnaW4pXG4gICAgfVxuXG4gIC8vIDMuIE90aGVyd2lzZSwgaWYgcmVxdWVzdOKAmXMgbWV0aG9kIGlzIG5laXRoZXIgYEdFVGAgbm9yIGBIRUFEYCwgdGhlbjpcbiAgfSBlbHNlIGlmIChyZXF1ZXN0Lm1ldGhvZCAhPT0gJ0dFVCcgJiYgcmVxdWVzdC5tZXRob2QgIT09ICdIRUFEJykge1xuICAgIC8vIDEuIFN3aXRjaCBvbiByZXF1ZXN04oCZcyByZWZlcnJlciBwb2xpY3k6XG4gICAgc3dpdGNoIChyZXF1ZXN0LnJlZmVycmVyUG9saWN5KSB7XG4gICAgICBjYXNlICduby1yZWZlcnJlcic6XG4gICAgICAgIC8vIFNldCBzZXJpYWxpemVkT3JpZ2luIHRvIGBudWxsYC5cbiAgICAgICAgc2VyaWFsaXplZE9yaWdpbiA9IG51bGxcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ25vLXJlZmVycmVyLXdoZW4tZG93bmdyYWRlJzpcbiAgICAgIGNhc2UgJ3N0cmljdC1vcmlnaW4nOlxuICAgICAgY2FzZSAnc3RyaWN0LW9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbic6XG4gICAgICAgIC8vIElmIHJlcXVlc3TigJlzIG9yaWdpbiBpcyBhIHR1cGxlIG9yaWdpbiwgaXRzIHNjaGVtZSBpcyBcImh0dHBzXCIsIGFuZCByZXF1ZXN04oCZcyBjdXJyZW50IFVSTOKAmXMgc2NoZW1lIGlzIG5vdCBcImh0dHBzXCIsIHRoZW4gc2V0IHNlcmlhbGl6ZWRPcmlnaW4gdG8gYG51bGxgLlxuICAgICAgICBpZiAocmVxdWVzdC5vcmlnaW4gJiYgdXJsSGFzSHR0cHNTY2hlbWUocmVxdWVzdC5vcmlnaW4pICYmICF1cmxIYXNIdHRwc1NjaGVtZShyZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KSkpIHtcbiAgICAgICAgICBzZXJpYWxpemVkT3JpZ2luID0gbnVsbFxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdzYW1lLW9yaWdpbic6XG4gICAgICAgIC8vIElmIHJlcXVlc3TigJlzIG9yaWdpbiBpcyBub3Qgc2FtZSBvcmlnaW4gd2l0aCByZXF1ZXN04oCZcyBjdXJyZW50IFVSTOKAmXMgb3JpZ2luLCB0aGVuIHNldCBzZXJpYWxpemVkT3JpZ2luIHRvIGBudWxsYC5cbiAgICAgICAgaWYgKCFzYW1lT3JpZ2luKHJlcXVlc3QsIHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpKSkge1xuICAgICAgICAgIHNlcmlhbGl6ZWRPcmlnaW4gPSBudWxsXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIERvIG5vdGhpbmcuXG4gICAgfVxuXG4gICAgaWYgKHNlcmlhbGl6ZWRPcmlnaW4pIHtcbiAgICAgIC8vIDIuIEFwcGVuZCAoYE9yaWdpbmAsIHNlcmlhbGl6ZWRPcmlnaW4pIHRvIHJlcXVlc3TigJlzIGhlYWRlciBsaXN0LlxuICAgICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ29yaWdpbicsIHNlcmlhbGl6ZWRPcmlnaW4pXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvYXJzZW5lZFNoYXJlZEN1cnJlbnRUaW1lIChjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSkge1xuICAvLyBUT0RPXG4gIHJldHVybiBwZXJmb3JtYW5jZS5ub3coKVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY3JlYXRlLWFuLW9wYXF1ZS10aW1pbmctaW5mb1xuZnVuY3Rpb24gY3JlYXRlT3BhcXVlVGltaW5nSW5mbyAodGltaW5nSW5mbykge1xuICByZXR1cm4ge1xuICAgIHN0YXJ0VGltZTogdGltaW5nSW5mby5zdGFydFRpbWUgPz8gMCxcbiAgICByZWRpcmVjdFN0YXJ0VGltZTogMCxcbiAgICByZWRpcmVjdEVuZFRpbWU6IDAsXG4gICAgcG9zdFJlZGlyZWN0U3RhcnRUaW1lOiB0aW1pbmdJbmZvLnN0YXJ0VGltZSA/PyAwLFxuICAgIGZpbmFsU2VydmljZVdvcmtlclN0YXJ0VGltZTogMCxcbiAgICBmaW5hbE5ldHdvcmtSZXNwb25zZVN0YXJ0VGltZTogMCxcbiAgICBmaW5hbE5ldHdvcmtSZXF1ZXN0U3RhcnRUaW1lOiAwLFxuICAgIGVuZFRpbWU6IDAsXG4gICAgZW5jb2RlZEJvZHlTaXplOiAwLFxuICAgIGRlY29kZWRCb2R5U2l6ZTogMCxcbiAgICBmaW5hbENvbm5lY3Rpb25UaW1pbmdJbmZvOiBudWxsXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvb3JpZ2luLmh0bWwjcG9saWN5LWNvbnRhaW5lclxuZnVuY3Rpb24gbWFrZVBvbGljeUNvbnRhaW5lciAoKSB7XG4gIC8vIE5vdGU6IHRoZSBmZXRjaCBzcGVjIGRvZXNuJ3QgbWFrZSB1c2Ugb2YgZW1iZWRkZXIgcG9saWN5IG9yIENTUCBsaXN0XG4gIHJldHVybiB7XG4gICAgcmVmZXJyZXJQb2xpY3k6ICdzdHJpY3Qtb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luJ1xuICB9XG59XG5cbi8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL29yaWdpbi5odG1sI2Nsb25lLWEtcG9saWN5LWNvbnRhaW5lclxuZnVuY3Rpb24gY2xvbmVQb2xpY3lDb250YWluZXIgKHBvbGljeUNvbnRhaW5lcikge1xuICByZXR1cm4ge1xuICAgIHJlZmVycmVyUG9saWN5OiBwb2xpY3lDb250YWluZXIucmVmZXJyZXJQb2xpY3lcbiAgfVxufVxuXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLXJlZmVycmVyLXBvbGljeS8jZGV0ZXJtaW5lLXJlcXVlc3RzLXJlZmVycmVyXG5mdW5jdGlvbiBkZXRlcm1pbmVSZXF1ZXN0c1JlZmVycmVyIChyZXF1ZXN0KSB7XG4gIC8vIDEuIExldCBwb2xpY3kgYmUgcmVxdWVzdCdzIHJlZmVycmVyIHBvbGljeS5cbiAgY29uc3QgcG9saWN5ID0gcmVxdWVzdC5yZWZlcnJlclBvbGljeVxuXG4gIC8vIE5vdGU6IHBvbGljeSBjYW5ub3QgKHNob3VsZG4ndCkgYmUgbnVsbCBvciBhbiBlbXB0eSBzdHJpbmcuXG4gIGFzc2VydChwb2xpY3kpXG5cbiAgLy8gMi4gTGV0IGVudmlyb25tZW50IGJlIHJlcXVlc3TigJlzIGNsaWVudC5cblxuICBsZXQgcmVmZXJyZXJTb3VyY2UgPSBudWxsXG5cbiAgLy8gMy4gU3dpdGNoIG9uIHJlcXVlc3TigJlzIHJlZmVycmVyOlxuICBpZiAocmVxdWVzdC5yZWZlcnJlciA9PT0gJ2NsaWVudCcpIHtcbiAgICAvLyBOb3RlOiBub2RlIGlzbid0IGEgYnJvd3NlciBhbmQgZG9lc24ndCBpbXBsZW1lbnQgZG9jdW1lbnQvaWZyYW1lcyxcbiAgICAvLyBzbyB3ZSBieXBhc3MgdGhpcyBzdGVwIGFuZCByZXBsYWNlIGl0IHdpdGggb3VyIG93bi5cblxuICAgIGNvbnN0IGdsb2JhbE9yaWdpbiA9IGdldEdsb2JhbE9yaWdpbigpXG5cbiAgICBpZiAoIWdsb2JhbE9yaWdpbiB8fCBnbG9iYWxPcmlnaW4ub3JpZ2luID09PSAnbnVsbCcpIHtcbiAgICAgIHJldHVybiAnbm8tcmVmZXJyZXInXG4gICAgfVxuXG4gICAgLy8gbm90ZTogd2UgbmVlZCB0byBjbG9uZSBpdCBhcyBpdCdzIG11dGF0ZWRcbiAgICByZWZlcnJlclNvdXJjZSA9IG5ldyBVUkwoZ2xvYmFsT3JpZ2luKVxuICB9IGVsc2UgaWYgKHJlcXVlc3QucmVmZXJyZXIgaW5zdGFuY2VvZiBVUkwpIHtcbiAgICAvLyBMZXQgcmVmZXJyZXJTb3VyY2UgYmUgcmVxdWVzdOKAmXMgcmVmZXJyZXIuXG4gICAgcmVmZXJyZXJTb3VyY2UgPSByZXF1ZXN0LnJlZmVycmVyXG4gIH1cblxuICAvLyA0LiBMZXQgcmVxdWVzdOKAmXMgcmVmZXJyZXJVUkwgYmUgdGhlIHJlc3VsdCBvZiBzdHJpcHBpbmcgcmVmZXJyZXJTb3VyY2UgZm9yXG4gIC8vICAgIHVzZSBhcyBhIHJlZmVycmVyLlxuICBsZXQgcmVmZXJyZXJVUkwgPSBzdHJpcFVSTEZvclJlZmVycmVyKHJlZmVycmVyU291cmNlKVxuXG4gIC8vIDUuIExldCByZWZlcnJlck9yaWdpbiBiZSB0aGUgcmVzdWx0IG9mIHN0cmlwcGluZyByZWZlcnJlclNvdXJjZSBmb3IgdXNlIGFzXG4gIC8vICAgIGEgcmVmZXJyZXIsIHdpdGggdGhlIG9yaWdpbi1vbmx5IGZsYWcgc2V0IHRvIHRydWUuXG4gIGNvbnN0IHJlZmVycmVyT3JpZ2luID0gc3RyaXBVUkxGb3JSZWZlcnJlcihyZWZlcnJlclNvdXJjZSwgdHJ1ZSlcblxuICAvLyA2LiBJZiB0aGUgcmVzdWx0IG9mIHNlcmlhbGl6aW5nIHJlZmVycmVyVVJMIGlzIGEgc3RyaW5nIHdob3NlIGxlbmd0aCBpc1xuICAvLyAgICBncmVhdGVyIHRoYW4gNDA5Niwgc2V0IHJlZmVycmVyVVJMIHRvIHJlZmVycmVyT3JpZ2luLlxuICBpZiAocmVmZXJyZXJVUkwudG9TdHJpbmcoKS5sZW5ndGggPiA0MDk2KSB7XG4gICAgcmVmZXJyZXJVUkwgPSByZWZlcnJlck9yaWdpblxuICB9XG5cbiAgY29uc3QgYXJlU2FtZU9yaWdpbiA9IHNhbWVPcmlnaW4ocmVxdWVzdCwgcmVmZXJyZXJVUkwpXG4gIGNvbnN0IGlzTm9uUG90ZW50aWFsbHlUcnVzdFdvcnRoeSA9IGlzVVJMUG90ZW50aWFsbHlUcnVzdHdvcnRoeShyZWZlcnJlclVSTCkgJiZcbiAgICAhaXNVUkxQb3RlbnRpYWxseVRydXN0d29ydGh5KHJlcXVlc3QudXJsKVxuXG4gIC8vIDguIEV4ZWN1dGUgdGhlIHN3aXRjaCBzdGF0ZW1lbnRzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHZhbHVlIG9mIHBvbGljeTpcbiAgc3dpdGNoIChwb2xpY3kpIHtcbiAgICBjYXNlICdvcmlnaW4nOiByZXR1cm4gcmVmZXJyZXJPcmlnaW4gIT0gbnVsbCA/IHJlZmVycmVyT3JpZ2luIDogc3RyaXBVUkxGb3JSZWZlcnJlcihyZWZlcnJlclNvdXJjZSwgdHJ1ZSlcbiAgICBjYXNlICd1bnNhZmUtdXJsJzogcmV0dXJuIHJlZmVycmVyVVJMXG4gICAgY2FzZSAnc2FtZS1vcmlnaW4nOlxuICAgICAgcmV0dXJuIGFyZVNhbWVPcmlnaW4gPyByZWZlcnJlck9yaWdpbiA6ICduby1yZWZlcnJlcidcbiAgICBjYXNlICdvcmlnaW4td2hlbi1jcm9zcy1vcmlnaW4nOlxuICAgICAgcmV0dXJuIGFyZVNhbWVPcmlnaW4gPyByZWZlcnJlclVSTCA6IHJlZmVycmVyT3JpZ2luXG4gICAgY2FzZSAnc3RyaWN0LW9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbic6IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRVUkwgPSByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KVxuXG4gICAgICAvLyAxLiBJZiB0aGUgb3JpZ2luIG9mIHJlZmVycmVyVVJMIGFuZCB0aGUgb3JpZ2luIG9mIHJlcXVlc3TigJlzIGN1cnJlbnRcbiAgICAgIC8vICAgIFVSTCBhcmUgdGhlIHNhbWUsIHRoZW4gcmV0dXJuIHJlZmVycmVyVVJMLlxuICAgICAgaWYgKHNhbWVPcmlnaW4ocmVmZXJyZXJVUkwsIGN1cnJlbnRVUkwpKSB7XG4gICAgICAgIHJldHVybiByZWZlcnJlclVSTFxuICAgICAgfVxuXG4gICAgICAvLyAyLiBJZiByZWZlcnJlclVSTCBpcyBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTCBhbmQgcmVxdWVzdOKAmXNcbiAgICAgIC8vICAgIGN1cnJlbnQgVVJMIGlzIG5vdCBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTCwgdGhlbiByZXR1cm4gbm9cbiAgICAgIC8vICAgIHJlZmVycmVyLlxuICAgICAgaWYgKGlzVVJMUG90ZW50aWFsbHlUcnVzdHdvcnRoeShyZWZlcnJlclVSTCkgJiYgIWlzVVJMUG90ZW50aWFsbHlUcnVzdHdvcnRoeShjdXJyZW50VVJMKSkge1xuICAgICAgICByZXR1cm4gJ25vLXJlZmVycmVyJ1xuICAgICAgfVxuXG4gICAgICAvLyAzLiBSZXR1cm4gcmVmZXJyZXJPcmlnaW4uXG4gICAgICByZXR1cm4gcmVmZXJyZXJPcmlnaW5cbiAgICB9XG4gICAgY2FzZSAnc3RyaWN0LW9yaWdpbic6IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICAgIC8qKlxuICAgICAgICAgKiAxLiBJZiByZWZlcnJlclVSTCBpcyBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTCBhbmRcbiAgICAgICAgICogcmVxdWVzdOKAmXMgY3VycmVudCBVUkwgaXMgbm90IGEgcG90ZW50aWFsbHkgdHJ1c3R3b3J0aHkgVVJMLFxuICAgICAgICAgKiB0aGVuIHJldHVybiBubyByZWZlcnJlci5cbiAgICAgICAgICogMi4gUmV0dXJuIHJlZmVycmVyT3JpZ2luXG4gICAgICAgICovXG4gICAgY2FzZSAnbm8tcmVmZXJyZXItd2hlbi1kb3duZ3JhZGUnOiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICAvKipcbiAgICAgICAqIDEuIElmIHJlZmVycmVyVVJMIGlzIGEgcG90ZW50aWFsbHkgdHJ1c3R3b3J0aHkgVVJMIGFuZFxuICAgICAgICogcmVxdWVzdOKAmXMgY3VycmVudCBVUkwgaXMgbm90IGEgcG90ZW50aWFsbHkgdHJ1c3R3b3J0aHkgVVJMLFxuICAgICAgICogdGhlbiByZXR1cm4gbm8gcmVmZXJyZXIuXG4gICAgICAgKiAyLiBSZXR1cm4gcmVmZXJyZXJPcmlnaW5cbiAgICAgICovXG5cbiAgICBkZWZhdWx0OiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICByZXR1cm4gaXNOb25Qb3RlbnRpYWxseVRydXN0V29ydGh5ID8gJ25vLXJlZmVycmVyJyA6IHJlZmVycmVyT3JpZ2luXG4gIH1cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtcmVmZXJyZXItcG9saWN5LyNzdHJpcC11cmxcbiAqIEBwYXJhbSB7VVJMfSB1cmxcbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IG9yaWdpbk9ubHlcbiAqL1xuZnVuY3Rpb24gc3RyaXBVUkxGb3JSZWZlcnJlciAodXJsLCBvcmlnaW5Pbmx5KSB7XG4gIC8vIDEuIEFzc2VydDogdXJsIGlzIGEgVVJMLlxuICBhc3NlcnQodXJsIGluc3RhbmNlb2YgVVJMKVxuXG4gIC8vIDIuIElmIHVybOKAmXMgc2NoZW1lIGlzIGEgbG9jYWwgc2NoZW1lLCB0aGVuIHJldHVybiBubyByZWZlcnJlci5cbiAgaWYgKHVybC5wcm90b2NvbCA9PT0gJ2ZpbGU6JyB8fCB1cmwucHJvdG9jb2wgPT09ICdhYm91dDonIHx8IHVybC5wcm90b2NvbCA9PT0gJ2JsYW5rOicpIHtcbiAgICByZXR1cm4gJ25vLXJlZmVycmVyJ1xuICB9XG5cbiAgLy8gMy4gU2V0IHVybOKAmXMgdXNlcm5hbWUgdG8gdGhlIGVtcHR5IHN0cmluZy5cbiAgdXJsLnVzZXJuYW1lID0gJydcblxuICAvLyA0LiBTZXQgdXJs4oCZcyBwYXNzd29yZCB0byB0aGUgZW1wdHkgc3RyaW5nLlxuICB1cmwucGFzc3dvcmQgPSAnJ1xuXG4gIC8vIDUuIFNldCB1cmzigJlzIGZyYWdtZW50IHRvIG51bGwuXG4gIHVybC5oYXNoID0gJydcblxuICAvLyA2LiBJZiB0aGUgb3JpZ2luLW9ubHkgZmxhZyBpcyB0cnVlLCB0aGVuOlxuICBpZiAob3JpZ2luT25seSkge1xuICAgIC8vIDEuIFNldCB1cmzigJlzIHBhdGggdG8gwqsgdGhlIGVtcHR5IHN0cmluZyDCuy5cbiAgICB1cmwucGF0aG5hbWUgPSAnJ1xuXG4gICAgLy8gMi4gU2V0IHVybOKAmXMgcXVlcnkgdG8gbnVsbC5cbiAgICB1cmwuc2VhcmNoID0gJydcbiAgfVxuXG4gIC8vIDcuIFJldHVybiB1cmwuXG4gIHJldHVybiB1cmxcbn1cblxuZnVuY3Rpb24gaXNVUkxQb3RlbnRpYWxseVRydXN0d29ydGh5ICh1cmwpIHtcbiAgaWYgKCEodXJsIGluc3RhbmNlb2YgVVJMKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gSWYgY2hpbGQgb2YgYWJvdXQsIHJldHVybiB0cnVlXG4gIGlmICh1cmwuaHJlZiA9PT0gJ2Fib3V0OmJsYW5rJyB8fCB1cmwuaHJlZiA9PT0gJ2Fib3V0OnNyY2RvYycpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gSWYgc2NoZW1lIGlzIGRhdGEsIHJldHVybiB0cnVlXG4gIGlmICh1cmwucHJvdG9jb2wgPT09ICdkYXRhOicpIHJldHVybiB0cnVlXG5cbiAgLy8gSWYgZmlsZSwgcmV0dXJuIHRydWVcbiAgaWYgKHVybC5wcm90b2NvbCA9PT0gJ2ZpbGU6JykgcmV0dXJuIHRydWVcblxuICByZXR1cm4gaXNPcmlnaW5Qb3RlbnRpYWxseVRydXN0d29ydGh5KHVybC5vcmlnaW4pXG5cbiAgZnVuY3Rpb24gaXNPcmlnaW5Qb3RlbnRpYWxseVRydXN0d29ydGh5IChvcmlnaW4pIHtcbiAgICAvLyBJZiBvcmlnaW4gaXMgZXhwbGljaXRseSBudWxsLCByZXR1cm4gZmFsc2VcbiAgICBpZiAob3JpZ2luID09IG51bGwgfHwgb3JpZ2luID09PSAnbnVsbCcpIHJldHVybiBmYWxzZVxuXG4gICAgY29uc3Qgb3JpZ2luQXNVUkwgPSBuZXcgVVJMKG9yaWdpbilcblxuICAgIC8vIElmIHNlY3VyZSwgcmV0dXJuIHRydWVcbiAgICBpZiAob3JpZ2luQXNVUkwucHJvdG9jb2wgPT09ICdodHRwczonIHx8IG9yaWdpbkFzVVJMLnByb3RvY29sID09PSAnd3NzOicpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgLy8gSWYgbG9jYWxob3N0IG9yIHZhcmlhbnRzLCByZXR1cm4gdHJ1ZVxuICAgIGlmICgvXjEyNyg/OlxcLlswLTldKyl7MCwyfVxcLlswLTldKyR8XlxcWyg/OjAqOikqPzo/MCoxXFxdJC8udGVzdChvcmlnaW5Bc1VSTC5ob3N0bmFtZSkgfHxcbiAgICAgKG9yaWdpbkFzVVJMLmhvc3RuYW1lID09PSAnbG9jYWxob3N0JyB8fCBvcmlnaW5Bc1VSTC5ob3N0bmFtZS5pbmNsdWRlcygnbG9jYWxob3N0LicpKSB8fFxuICAgICAob3JpZ2luQXNVUkwuaG9zdG5hbWUuZW5kc1dpdGgoJy5sb2NhbGhvc3QnKSkpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgLy8gSWYgYW55IG90aGVyLCByZXR1cm4gZmFsc2VcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1zdWJyZXNvdXJjZS1pbnRlZ3JpdHkvI2RvZXMtcmVzcG9uc2UtbWF0Y2gtbWV0YWRhdGFsaXN0XG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGJ5dGVzXG4gKiBAcGFyYW0ge3N0cmluZ30gbWV0YWRhdGFMaXN0XG4gKi9cbmZ1bmN0aW9uIGJ5dGVzTWF0Y2ggKGJ5dGVzLCBtZXRhZGF0YUxpc3QpIHtcbiAgLy8gSWYgbm9kZSBpcyBub3QgYnVpbHQgd2l0aCBPcGVuU1NMIHN1cHBvcnQsIHdlIGNhbm5vdCBjaGVja1xuICAvLyBhIHJlcXVlc3QncyBpbnRlZ3JpdHksIHNvIGFsbG93IGl0IGJ5IGRlZmF1bHQgKHRoZSBzcGVjIHdpbGxcbiAgLy8gYWxsb3cgcmVxdWVzdHMgaWYgYW4gaW52YWxpZCBoYXNoIGlzIGdpdmVuLCBhcyBwcmVjZWRlbmNlKS5cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmOiBvbmx5IGlmIG5vZGUgaXMgYnVpbHQgd2l0aCAtLXdpdGhvdXQtc3NsICovXG4gIGlmIChjcnlwdG8gPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyAxLiBMZXQgcGFyc2VkTWV0YWRhdGEgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIG1ldGFkYXRhTGlzdC5cbiAgY29uc3QgcGFyc2VkTWV0YWRhdGEgPSBwYXJzZU1ldGFkYXRhKG1ldGFkYXRhTGlzdClcblxuICAvLyAyLiBJZiBwYXJzZWRNZXRhZGF0YSBpcyBubyBtZXRhZGF0YSwgcmV0dXJuIHRydWUuXG4gIGlmIChwYXJzZWRNZXRhZGF0YSA9PT0gJ25vIG1ldGFkYXRhJykge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyAzLiBJZiByZXNwb25zZSBpcyBub3QgZWxpZ2libGUgZm9yIGludGVncml0eSB2YWxpZGF0aW9uLCByZXR1cm4gZmFsc2UuXG4gIC8vIFRPRE9cblxuICAvLyA0LiBJZiBwYXJzZWRNZXRhZGF0YSBpcyB0aGUgZW1wdHkgc2V0LCByZXR1cm4gdHJ1ZS5cbiAgaWYgKHBhcnNlZE1ldGFkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyA1LiBMZXQgbWV0YWRhdGEgYmUgdGhlIHJlc3VsdCBvZiBnZXR0aW5nIHRoZSBzdHJvbmdlc3RcbiAgLy8gICAgbWV0YWRhdGEgZnJvbSBwYXJzZWRNZXRhZGF0YS5cbiAgY29uc3Qgc3Ryb25nZXN0ID0gZ2V0U3Ryb25nZXN0TWV0YWRhdGEocGFyc2VkTWV0YWRhdGEpXG4gIGNvbnN0IG1ldGFkYXRhID0gZmlsdGVyTWV0YWRhdGFMaXN0QnlBbGdvcml0aG0ocGFyc2VkTWV0YWRhdGEsIHN0cm9uZ2VzdClcblxuICAvLyA2LiBGb3IgZWFjaCBpdGVtIGluIG1ldGFkYXRhOlxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgbWV0YWRhdGEpIHtcbiAgICAvLyAxLiBMZXQgYWxnb3JpdGhtIGJlIHRoZSBhbGcgY29tcG9uZW50IG9mIGl0ZW0uXG4gICAgY29uc3QgYWxnb3JpdGhtID0gaXRlbS5hbGdvXG5cbiAgICAvLyAyLiBMZXQgZXhwZWN0ZWRWYWx1ZSBiZSB0aGUgdmFsIGNvbXBvbmVudCBvZiBpdGVtLlxuICAgIGNvbnN0IGV4cGVjdGVkVmFsdWUgPSBpdGVtLmhhc2hcblxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vd2ViLXBsYXRmb3JtLXRlc3RzL3dwdC9jb21taXQvZTRjNWNjN2E1ZTQ4MDkzMjIwNTI4ZGZkZDFjNDAxMmRjMzgzN2EwZVxuICAgIC8vIFwiYmUgbGliZXJhbCB3aXRoIHBhZGRpbmdcIi4gVGhpcyBpcyBhbm5veWluZywgYW5kIGl0J3Mgbm90IGV2ZW4gaW4gdGhlIHNwZWMuXG5cbiAgICAvLyAzLiBMZXQgYWN0dWFsVmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBhcHBseWluZyBhbGdvcml0aG0gdG8gYnl0ZXMuXG4gICAgbGV0IGFjdHVhbFZhbHVlID0gY3J5cHRvLmNyZWF0ZUhhc2goYWxnb3JpdGhtKS51cGRhdGUoYnl0ZXMpLmRpZ2VzdCgnYmFzZTY0JylcblxuICAgIGlmIChhY3R1YWxWYWx1ZVthY3R1YWxWYWx1ZS5sZW5ndGggLSAxXSA9PT0gJz0nKSB7XG4gICAgICBpZiAoYWN0dWFsVmFsdWVbYWN0dWFsVmFsdWUubGVuZ3RoIC0gMl0gPT09ICc9Jykge1xuICAgICAgICBhY3R1YWxWYWx1ZSA9IGFjdHVhbFZhbHVlLnNsaWNlKDAsIC0yKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWN0dWFsVmFsdWUgPSBhY3R1YWxWYWx1ZS5zbGljZSgwLCAtMSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA0LiBJZiBhY3R1YWxWYWx1ZSBpcyBhIGNhc2Utc2Vuc2l0aXZlIG1hdGNoIGZvciBleHBlY3RlZFZhbHVlLFxuICAgIC8vICAgIHJldHVybiB0cnVlLlxuICAgIGlmIChjb21wYXJlQmFzZTY0TWl4ZWQoYWN0dWFsVmFsdWUsIGV4cGVjdGVkVmFsdWUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxuXG4gIC8vIDcuIFJldHVybiBmYWxzZS5cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtc3VicmVzb3VyY2UtaW50ZWdyaXR5LyNncmFtbWFyZGVmLWhhc2gtd2l0aC1vcHRpb25zXG4vLyBodHRwczovL3d3dy53My5vcmcvVFIvQ1NQMi8jc291cmNlLWxpc3Qtc3ludGF4XG4vLyBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNTIzNCNhcHBlbmRpeC1CLjFcbmNvbnN0IHBhcnNlSGFzaFdpdGhPcHRpb25zID0gLyg/PGFsZ28+c2hhMjU2fHNoYTM4NHxzaGE1MTIpLSgoPzxoYXNoPltBLVphLXowLTkrL10rfFtBLVphLXowLTlfLV0rKT17MCwyfSg/Olxcc3wkKSggK1shLX5dKik/KT8vaVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1zdWJyZXNvdXJjZS1pbnRlZ3JpdHkvI3BhcnNlLW1ldGFkYXRhXG4gKiBAcGFyYW0ge3N0cmluZ30gbWV0YWRhdGFcbiAqL1xuZnVuY3Rpb24gcGFyc2VNZXRhZGF0YSAobWV0YWRhdGEpIHtcbiAgLy8gMS4gTGV0IHJlc3VsdCBiZSB0aGUgZW1wdHkgc2V0LlxuICAvKiogQHR5cGUge3sgYWxnbzogc3RyaW5nLCBoYXNoOiBzdHJpbmcgfVtdfSAqL1xuICBjb25zdCByZXN1bHQgPSBbXVxuXG4gIC8vIDIuIExldCBlbXB0eSBiZSBlcXVhbCB0byB0cnVlLlxuICBsZXQgZW1wdHkgPSB0cnVlXG5cbiAgLy8gMy4gRm9yIGVhY2ggdG9rZW4gcmV0dXJuZWQgYnkgc3BsaXR0aW5nIG1ldGFkYXRhIG9uIHNwYWNlczpcbiAgZm9yIChjb25zdCB0b2tlbiBvZiBtZXRhZGF0YS5zcGxpdCgnICcpKSB7XG4gICAgLy8gMS4gU2V0IGVtcHR5IHRvIGZhbHNlLlxuICAgIGVtcHR5ID0gZmFsc2VcblxuICAgIC8vIDIuIFBhcnNlIHRva2VuIGFzIGEgaGFzaC13aXRoLW9wdGlvbnMuXG4gICAgY29uc3QgcGFyc2VkVG9rZW4gPSBwYXJzZUhhc2hXaXRoT3B0aW9ucy5leGVjKHRva2VuKVxuXG4gICAgLy8gMy4gSWYgdG9rZW4gZG9lcyBub3QgcGFyc2UsIGNvbnRpbnVlIHRvIHRoZSBuZXh0IHRva2VuLlxuICAgIGlmIChcbiAgICAgIHBhcnNlZFRva2VuID09PSBudWxsIHx8XG4gICAgICBwYXJzZWRUb2tlbi5ncm91cHMgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgcGFyc2VkVG9rZW4uZ3JvdXBzLmFsZ28gPT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgLy8gTm90ZTogQ2hyb21pdW0gYmxvY2tzIHRoZSByZXF1ZXN0IGF0IHRoaXMgcG9pbnQsIGJ1dCBGaXJlZm94XG4gICAgICAvLyBnaXZlcyBhIHdhcm5pbmcgdGhhdCBhbiBpbnZhbGlkIGludGVncml0eSB3YXMgZ2l2ZW4uIFRoZVxuICAgICAgLy8gY29ycmVjdCBiZWhhdmlvciBpcyB0byBpZ25vcmUgdGhlc2UsIGFuZCBzdWJzZXF1ZW50bHkgbm90XG4gICAgICAvLyBjaGVjayB0aGUgaW50ZWdyaXR5IG9mIHRoZSByZXNvdXJjZS5cbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgLy8gNC4gTGV0IGFsZ29yaXRobSBiZSB0aGUgaGFzaC1hbGdvIGNvbXBvbmVudCBvZiB0b2tlbi5cbiAgICBjb25zdCBhbGdvcml0aG0gPSBwYXJzZWRUb2tlbi5ncm91cHMuYWxnby50b0xvd2VyQ2FzZSgpXG5cbiAgICAvLyA1LiBJZiBhbGdvcml0aG0gaXMgYSBoYXNoIGZ1bmN0aW9uIHJlY29nbml6ZWQgYnkgdGhlIHVzZXJcbiAgICAvLyAgICBhZ2VudCwgYWRkIHRoZSBwYXJzZWQgdG9rZW4gdG8gcmVzdWx0LlxuICAgIGlmIChzdXBwb3J0ZWRIYXNoZXMuaW5jbHVkZXMoYWxnb3JpdGhtKSkge1xuICAgICAgcmVzdWx0LnB1c2gocGFyc2VkVG9rZW4uZ3JvdXBzKVxuICAgIH1cbiAgfVxuXG4gIC8vIDQuIFJldHVybiBubyBtZXRhZGF0YSBpZiBlbXB0eSBpcyB0cnVlLCBvdGhlcndpc2UgcmV0dXJuIHJlc3VsdC5cbiAgaWYgKGVtcHR5ID09PSB0cnVlKSB7XG4gICAgcmV0dXJuICdubyBtZXRhZGF0YSdcbiAgfVxuXG4gIHJldHVybiByZXN1bHRcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3sgYWxnbzogJ3NoYTI1NicgfCAnc2hhMzg0JyB8ICdzaGE1MTInIH1bXX0gbWV0YWRhdGFMaXN0XG4gKi9cbmZ1bmN0aW9uIGdldFN0cm9uZ2VzdE1ldGFkYXRhIChtZXRhZGF0YUxpc3QpIHtcbiAgLy8gTGV0IGFsZ29yaXRobSBiZSB0aGUgYWxnbyBjb21wb25lbnQgb2YgdGhlIGZpcnN0IGl0ZW0gaW4gbWV0YWRhdGFMaXN0LlxuICAvLyBDYW4gYmUgc2hhMjU2XG4gIGxldCBhbGdvcml0aG0gPSBtZXRhZGF0YUxpc3RbMF0uYWxnb1xuICAvLyBJZiB0aGUgYWxnb3JpdGhtIGlzIHNoYTUxMiwgdGhlbiBpdCBpcyB0aGUgc3Ryb25nZXN0XG4gIC8vIGFuZCB3ZSBjYW4gcmV0dXJuIGltbWVkaWF0ZWx5XG4gIGlmIChhbGdvcml0aG1bM10gPT09ICc1Jykge1xuICAgIHJldHVybiBhbGdvcml0aG1cbiAgfVxuXG4gIGZvciAobGV0IGkgPSAxOyBpIDwgbWV0YWRhdGFMaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgbWV0YWRhdGEgPSBtZXRhZGF0YUxpc3RbaV1cbiAgICAvLyBJZiB0aGUgYWxnb3JpdGhtIGlzIHNoYTUxMiwgdGhlbiBpdCBpcyB0aGUgc3Ryb25nZXN0XG4gICAgLy8gYW5kIHdlIGNhbiBicmVhayB0aGUgbG9vcCBpbW1lZGlhdGVseVxuICAgIGlmIChtZXRhZGF0YS5hbGdvWzNdID09PSAnNScpIHtcbiAgICAgIGFsZ29yaXRobSA9ICdzaGE1MTInXG4gICAgICBicmVha1xuICAgIC8vIElmIHRoZSBhbGdvcml0aG0gaXMgc2hhMzg0LCB0aGVuIGEgcG90ZW50aWFsIHNoYTI1NiBvciBzaGEzODQgaXMgaWdub3JlZFxuICAgIH0gZWxzZSBpZiAoYWxnb3JpdGhtWzNdID09PSAnMycpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgLy8gYWxnb3JpdGhtIGlzIHNoYTI1NiwgY2hlY2sgaWYgYWxnb3JpdGhtIGlzIHNoYTM4NCBhbmQgaWYgc28sIHNldCBpdCBhc1xuICAgIC8vIHRoZSBzdHJvbmdlc3RcbiAgICB9IGVsc2UgaWYgKG1ldGFkYXRhLmFsZ29bM10gPT09ICczJykge1xuICAgICAgYWxnb3JpdGhtID0gJ3NoYTM4NCdcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGFsZ29yaXRobVxufVxuXG5mdW5jdGlvbiBmaWx0ZXJNZXRhZGF0YUxpc3RCeUFsZ29yaXRobSAobWV0YWRhdGFMaXN0LCBhbGdvcml0aG0pIHtcbiAgaWYgKG1ldGFkYXRhTGlzdC5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gbWV0YWRhdGFMaXN0XG4gIH1cblxuICBsZXQgcG9zID0gMFxuICBmb3IgKGxldCBpID0gMDsgaSA8IG1ldGFkYXRhTGlzdC5sZW5ndGg7ICsraSkge1xuICAgIGlmIChtZXRhZGF0YUxpc3RbaV0uYWxnbyA9PT0gYWxnb3JpdGhtKSB7XG4gICAgICBtZXRhZGF0YUxpc3RbcG9zKytdID0gbWV0YWRhdGFMaXN0W2ldXG4gICAgfVxuICB9XG5cbiAgbWV0YWRhdGFMaXN0Lmxlbmd0aCA9IHBvc1xuXG4gIHJldHVybiBtZXRhZGF0YUxpc3Rcbn1cblxuLyoqXG4gKiBDb21wYXJlcyB0d28gYmFzZTY0IHN0cmluZ3MsIGFsbG93aW5nIGZvciBiYXNlNjR1cmxcbiAqIGluIHRoZSBzZWNvbmQgc3RyaW5nLlxuICpcbiogQHBhcmFtIHtzdHJpbmd9IGFjdHVhbFZhbHVlIGFsd2F5cyBiYXNlNjRcbiAqIEBwYXJhbSB7c3RyaW5nfSBleHBlY3RlZFZhbHVlIGJhc2U2NCBvciBiYXNlNjR1cmxcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBjb21wYXJlQmFzZTY0TWl4ZWQgKGFjdHVhbFZhbHVlLCBleHBlY3RlZFZhbHVlKSB7XG4gIGlmIChhY3R1YWxWYWx1ZS5sZW5ndGggIT09IGV4cGVjdGVkVmFsdWUubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhY3R1YWxWYWx1ZS5sZW5ndGg7ICsraSkge1xuICAgIGlmIChhY3R1YWxWYWx1ZVtpXSAhPT0gZXhwZWN0ZWRWYWx1ZVtpXSkge1xuICAgICAgaWYgKFxuICAgICAgICAoYWN0dWFsVmFsdWVbaV0gPT09ICcrJyAmJiBleHBlY3RlZFZhbHVlW2ldID09PSAnLScpIHx8XG4gICAgICAgIChhY3R1YWxWYWx1ZVtpXSA9PT0gJy8nICYmIGV4cGVjdGVkVmFsdWVbaV0gPT09ICdfJylcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy11cGdyYWRlLWluc2VjdXJlLXJlcXVlc3RzLyN1cGdyYWRlLXJlcXVlc3RcbmZ1bmN0aW9uIHRyeVVwZ3JhZGVSZXF1ZXN0VG9BUG90ZW50aWFsbHlUcnVzdHdvcnRoeVVSTCAocmVxdWVzdCkge1xuICAvLyBUT0RPXG59XG5cbi8qKlxuICogQGxpbmsge2h0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL29yaWdpbi5odG1sI3NhbWUtb3JpZ2lufVxuICogQHBhcmFtIHtVUkx9IEFcbiAqIEBwYXJhbSB7VVJMfSBCXG4gKi9cbmZ1bmN0aW9uIHNhbWVPcmlnaW4gKEEsIEIpIHtcbiAgLy8gMS4gSWYgQSBhbmQgQiBhcmUgdGhlIHNhbWUgb3BhcXVlIG9yaWdpbiwgdGhlbiByZXR1cm4gdHJ1ZS5cbiAgaWYgKEEub3JpZ2luID09PSBCLm9yaWdpbiAmJiBBLm9yaWdpbiA9PT0gJ251bGwnKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8vIDIuIElmIEEgYW5kIEIgYXJlIGJvdGggdHVwbGUgb3JpZ2lucyBhbmQgdGhlaXIgc2NoZW1lcyxcbiAgLy8gICAgaG9zdHMsIGFuZCBwb3J0IGFyZSBpZGVudGljYWwsIHRoZW4gcmV0dXJuIHRydWUuXG4gIGlmIChBLnByb3RvY29sID09PSBCLnByb3RvY29sICYmIEEuaG9zdG5hbWUgPT09IEIuaG9zdG5hbWUgJiYgQS5wb3J0ID09PSBCLnBvcnQpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gMy4gUmV0dXJuIGZhbHNlLlxuICByZXR1cm4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gY3JlYXRlRGVmZXJyZWRQcm9taXNlICgpIHtcbiAgbGV0IHJlc1xuICBsZXQgcmVqXG4gIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgcmVzID0gcmVzb2x2ZVxuICAgIHJlaiA9IHJlamVjdFxuICB9KVxuXG4gIHJldHVybiB7IHByb21pc2UsIHJlc29sdmU6IHJlcywgcmVqZWN0OiByZWogfVxufVxuXG5mdW5jdGlvbiBpc0Fib3J0ZWQgKGZldGNoUGFyYW1zKSB7XG4gIHJldHVybiBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnN0YXRlID09PSAnYWJvcnRlZCdcbn1cblxuZnVuY3Rpb24gaXNDYW5jZWxsZWQgKGZldGNoUGFyYW1zKSB7XG4gIHJldHVybiBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnN0YXRlID09PSAnYWJvcnRlZCcgfHxcbiAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnN0YXRlID09PSAndGVybWluYXRlZCdcbn1cblxuY29uc3Qgbm9ybWFsaXplTWV0aG9kUmVjb3JkID0ge1xuICBkZWxldGU6ICdERUxFVEUnLFxuICBERUxFVEU6ICdERUxFVEUnLFxuICBnZXQ6ICdHRVQnLFxuICBHRVQ6ICdHRVQnLFxuICBoZWFkOiAnSEVBRCcsXG4gIEhFQUQ6ICdIRUFEJyxcbiAgb3B0aW9uczogJ09QVElPTlMnLFxuICBPUFRJT05TOiAnT1BUSU9OUycsXG4gIHBvc3Q6ICdQT1NUJyxcbiAgUE9TVDogJ1BPU1QnLFxuICBwdXQ6ICdQVVQnLFxuICBQVVQ6ICdQVVQnXG59XG5cbi8vIE5vdGU6IG9iamVjdCBwcm90b3R5cGVzIHNob3VsZCBub3QgYmUgYWJsZSB0byBiZSByZWZlcmVuY2VkLiBlLmcuIGBPYmplY3QjaGFzT3duUHJvcGVydHlgLlxuT2JqZWN0LnNldFByb3RvdHlwZU9mKG5vcm1hbGl6ZU1ldGhvZFJlY29yZCwgbnVsbClcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LW1ldGhvZC1ub3JtYWxpemVcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2RcbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplTWV0aG9kIChtZXRob2QpIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZU1ldGhvZFJlY29yZFttZXRob2QudG9Mb3dlckNhc2UoKV0gPz8gbWV0aG9kXG59XG5cbi8vIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNzZXJpYWxpemUtYS1qYXZhc2NyaXB0LXZhbHVlLXRvLWEtanNvbi1zdHJpbmdcbmZ1bmN0aW9uIHNlcmlhbGl6ZUphdmFzY3JpcHRWYWx1ZVRvSlNPTlN0cmluZyAodmFsdWUpIHtcbiAgLy8gMS4gTGV0IHJlc3VsdCBiZSA/IENhbGwoJUpTT04uc3RyaW5naWZ5JSwgdW5kZWZpbmVkLCDCqyB2YWx1ZSDCuykuXG4gIGNvbnN0IHJlc3VsdCA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKVxuXG4gIC8vIDIuIElmIHJlc3VsdCBpcyB1bmRlZmluZWQsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1ZhbHVlIGlzIG5vdCBKU09OIHNlcmlhbGl6YWJsZScpXG4gIH1cblxuICAvLyAzLiBBc3NlcnQ6IHJlc3VsdCBpcyBhIHN0cmluZy5cbiAgYXNzZXJ0KHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnKVxuXG4gIC8vIDQuIFJldHVybiByZXN1bHQuXG4gIHJldHVybiByZXN1bHRcbn1cblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0lMjVpdGVyYXRvcnByb3RvdHlwZSUyNS1vYmplY3RcbmNvbnN0IGVzSXRlcmF0b3JQcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoT2JqZWN0LmdldFByb3RvdHlwZU9mKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSkpXG5cbi8qKlxuICogQHNlZSBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2Rmbi1pdGVyYXRvci1wcm90b3R5cGUtb2JqZWN0XG4gKiBAcGFyYW0geygpID0+IHVua25vd25bXX0gaXRlcmF0b3JcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIG5hbWUgb2YgdGhlIGluc3RhbmNlXG4gKiBAcGFyYW0geydrZXknfCd2YWx1ZSd8J2tleSt2YWx1ZSd9IGtpbmRcbiAqL1xuZnVuY3Rpb24gbWFrZUl0ZXJhdG9yIChpdGVyYXRvciwgbmFtZSwga2luZCkge1xuICBjb25zdCBvYmplY3QgPSB7XG4gICAgaW5kZXg6IDAsXG4gICAga2luZCxcbiAgICB0YXJnZXQ6IGl0ZXJhdG9yXG4gIH1cblxuICBjb25zdCBpID0ge1xuICAgIG5leHQgKCkge1xuICAgICAgLy8gMS4gTGV0IGludGVyZmFjZSBiZSB0aGUgaW50ZXJmYWNlIGZvciB3aGljaCB0aGUgaXRlcmF0b3IgcHJvdG90eXBlIG9iamVjdCBleGlzdHMuXG5cbiAgICAgIC8vIDIuIExldCB0aGlzVmFsdWUgYmUgdGhlIHRoaXMgdmFsdWUuXG5cbiAgICAgIC8vIDMuIExldCBvYmplY3QgYmUgPyBUb09iamVjdCh0aGlzVmFsdWUpLlxuXG4gICAgICAvLyA0LiBJZiBvYmplY3QgaXMgYSBwbGF0Zm9ybSBvYmplY3QsIHRoZW4gcGVyZm9ybSBhIHNlY3VyaXR5XG4gICAgICAvLyAgICBjaGVjaywgcGFzc2luZzpcblxuICAgICAgLy8gNS4gSWYgb2JqZWN0IGlzIG5vdCBhIGRlZmF1bHQgaXRlcmF0b3Igb2JqZWN0IGZvciBpbnRlcmZhY2UsXG4gICAgICAvLyAgICB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgaWYgKE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKSAhPT0gaSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgIGAnbmV4dCcgY2FsbGVkIG9uIGFuIG9iamVjdCB0aGF0IGRvZXMgbm90IGltcGxlbWVudCBpbnRlcmZhY2UgJHtuYW1lfSBJdGVyYXRvci5gXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgLy8gNi4gTGV0IGluZGV4IGJlIG9iamVjdOKAmXMgaW5kZXguXG4gICAgICAvLyA3LiBMZXQga2luZCBiZSBvYmplY3TigJlzIGtpbmQuXG4gICAgICAvLyA4LiBMZXQgdmFsdWVzIGJlIG9iamVjdOKAmXMgdGFyZ2V0J3MgdmFsdWUgcGFpcnMgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAgY29uc3QgeyBpbmRleCwga2luZCwgdGFyZ2V0IH0gPSBvYmplY3RcbiAgICAgIGNvbnN0IHZhbHVlcyA9IHRhcmdldCgpXG5cbiAgICAgIC8vIDkuIExldCBsZW4gYmUgdGhlIGxlbmd0aCBvZiB2YWx1ZXMuXG4gICAgICBjb25zdCBsZW4gPSB2YWx1ZXMubGVuZ3RoXG5cbiAgICAgIC8vIDEwLiBJZiBpbmRleCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gbGVuLCB0aGVuIHJldHVyblxuICAgICAgLy8gICAgIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKS5cbiAgICAgIGlmIChpbmRleCA+PSBsZW4pIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9XG4gICAgICB9XG5cbiAgICAgIC8vIDExLiBMZXQgcGFpciBiZSB0aGUgZW50cnkgaW4gdmFsdWVzIGF0IGluZGV4IGluZGV4LlxuICAgICAgY29uc3QgcGFpciA9IHZhbHVlc1tpbmRleF1cblxuICAgICAgLy8gMTIuIFNldCBvYmplY3TigJlzIGluZGV4IHRvIGluZGV4ICsgMS5cbiAgICAgIG9iamVjdC5pbmRleCA9IGluZGV4ICsgMVxuXG4gICAgICAvLyAxMy4gUmV0dXJuIHRoZSBpdGVyYXRvciByZXN1bHQgZm9yIHBhaXIgYW5kIGtpbmQuXG4gICAgICByZXR1cm4gaXRlcmF0b3JSZXN1bHQocGFpciwga2luZClcbiAgICB9LFxuICAgIC8vIFRoZSBjbGFzcyBzdHJpbmcgb2YgYW4gaXRlcmF0b3IgcHJvdG90eXBlIG9iamVjdCBmb3IgYSBnaXZlbiBpbnRlcmZhY2UgaXMgdGhlXG4gICAgLy8gcmVzdWx0IG9mIGNvbmNhdGVuYXRpbmcgdGhlIGlkZW50aWZpZXIgb2YgdGhlIGludGVyZmFjZSBhbmQgdGhlIHN0cmluZyBcIiBJdGVyYXRvclwiLlxuICAgIFtTeW1ib2wudG9TdHJpbmdUYWddOiBgJHtuYW1lfSBJdGVyYXRvcmBcbiAgfVxuXG4gIC8vIFRoZSBbW1Byb3RvdHlwZV1dIGludGVybmFsIHNsb3Qgb2YgYW4gaXRlcmF0b3IgcHJvdG90eXBlIG9iamVjdCBtdXN0IGJlICVJdGVyYXRvclByb3RvdHlwZSUuXG4gIE9iamVjdC5zZXRQcm90b3R5cGVPZihpLCBlc0l0ZXJhdG9yUHJvdG90eXBlKVxuICAvLyBlc0l0ZXJhdG9yUHJvdG90eXBlIG5lZWRzIHRvIGJlIHRoZSBwcm90b3R5cGUgb2YgaVxuICAvLyB3aGljaCBpcyB0aGUgcHJvdG90eXBlIG9mIGFuIGVtcHR5IG9iamVjdC4gWWVzLCBpdCdzIGNvbmZ1c2luZy5cbiAgcmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZih7fSwgaSlcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNpdGVyYXRvci1yZXN1bHRcbmZ1bmN0aW9uIGl0ZXJhdG9yUmVzdWx0IChwYWlyLCBraW5kKSB7XG4gIGxldCByZXN1bHRcblxuICAvLyAxLiBMZXQgcmVzdWx0IGJlIGEgdmFsdWUgZGV0ZXJtaW5lZCBieSB0aGUgdmFsdWUgb2Yga2luZDpcbiAgc3dpdGNoIChraW5kKSB7XG4gICAgY2FzZSAna2V5Jzoge1xuICAgICAgLy8gMS4gTGV0IGlkbEtleSBiZSBwYWly4oCZcyBrZXkuXG4gICAgICAvLyAyLiBMZXQga2V5IGJlIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBpZGxLZXkgdG8gYW5cbiAgICAgIC8vICAgIEVDTUFTY3JpcHQgdmFsdWUuXG4gICAgICAvLyAzLiByZXN1bHQgaXMga2V5LlxuICAgICAgcmVzdWx0ID0gcGFpclswXVxuICAgICAgYnJlYWtcbiAgICB9XG4gICAgY2FzZSAndmFsdWUnOiB7XG4gICAgICAvLyAxLiBMZXQgaWRsVmFsdWUgYmUgcGFpcuKAmXMgdmFsdWUuXG4gICAgICAvLyAyLiBMZXQgdmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIGlkbFZhbHVlIHRvXG4gICAgICAvLyAgICBhbiBFQ01BU2NyaXB0IHZhbHVlLlxuICAgICAgLy8gMy4gcmVzdWx0IGlzIHZhbHVlLlxuICAgICAgcmVzdWx0ID0gcGFpclsxXVxuICAgICAgYnJlYWtcbiAgICB9XG4gICAgY2FzZSAna2V5K3ZhbHVlJzoge1xuICAgICAgLy8gMS4gTGV0IGlkbEtleSBiZSBwYWly4oCZcyBrZXkuXG4gICAgICAvLyAyLiBMZXQgaWRsVmFsdWUgYmUgcGFpcuKAmXMgdmFsdWUuXG4gICAgICAvLyAzLiBMZXQga2V5IGJlIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBpZGxLZXkgdG8gYW5cbiAgICAgIC8vICAgIEVDTUFTY3JpcHQgdmFsdWUuXG4gICAgICAvLyA0LiBMZXQgdmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIGlkbFZhbHVlIHRvXG4gICAgICAvLyAgICBhbiBFQ01BU2NyaXB0IHZhbHVlLlxuICAgICAgLy8gNS4gTGV0IGFycmF5IGJlICEgQXJyYXlDcmVhdGUoMikuXG4gICAgICAvLyA2LiBDYWxsICEgQ3JlYXRlRGF0YVByb3BlcnR5KGFycmF5LCBcIjBcIiwga2V5KS5cbiAgICAgIC8vIDcuIENhbGwgISBDcmVhdGVEYXRhUHJvcGVydHkoYXJyYXksIFwiMVwiLCB2YWx1ZSkuXG4gICAgICAvLyA4LiByZXN1bHQgaXMgYXJyYXkuXG4gICAgICByZXN1bHQgPSBwYWlyXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIC8vIDIuIFJldHVybiBDcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHJlc3VsdCwgZmFsc2UpLlxuICByZXR1cm4geyB2YWx1ZTogcmVzdWx0LCBkb25lOiBmYWxzZSB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYm9keS1mdWxseS1yZWFkXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZ1bGx5UmVhZEJvZHkgKGJvZHksIHByb2Nlc3NCb2R5LCBwcm9jZXNzQm9keUVycm9yKSB7XG4gIC8vIDEuIElmIHRhc2tEZXN0aW5hdGlvbiBpcyBudWxsLCB0aGVuIHNldCB0YXNrRGVzdGluYXRpb24gdG9cbiAgLy8gICAgdGhlIHJlc3VsdCBvZiBzdGFydGluZyBhIG5ldyBwYXJhbGxlbCBxdWV1ZS5cblxuICAvLyAyLiBMZXQgc3VjY2Vzc1N0ZXBzIGdpdmVuIGEgYnl0ZSBzZXF1ZW5jZSBieXRlcyBiZSB0byBxdWV1ZSBhXG4gIC8vICAgIGZldGNoIHRhc2sgdG8gcnVuIHByb2Nlc3NCb2R5IGdpdmVuIGJ5dGVzLCB3aXRoIHRhc2tEZXN0aW5hdGlvbi5cbiAgY29uc3Qgc3VjY2Vzc1N0ZXBzID0gcHJvY2Vzc0JvZHlcblxuICAvLyAzLiBMZXQgZXJyb3JTdGVwcyBiZSB0byBxdWV1ZSBhIGZldGNoIHRhc2sgdG8gcnVuIHByb2Nlc3NCb2R5RXJyb3IsXG4gIC8vICAgIHdpdGggdGFza0Rlc3RpbmF0aW9uLlxuICBjb25zdCBlcnJvclN0ZXBzID0gcHJvY2Vzc0JvZHlFcnJvclxuXG4gIC8vIDQuIExldCByZWFkZXIgYmUgdGhlIHJlc3VsdCBvZiBnZXR0aW5nIGEgcmVhZGVyIGZvciBib2R54oCZcyBzdHJlYW0uXG4gIC8vICAgIElmIHRoYXQgdGhyZXcgYW4gZXhjZXB0aW9uLCB0aGVuIHJ1biBlcnJvclN0ZXBzIHdpdGggdGhhdFxuICAvLyAgICBleGNlcHRpb24gYW5kIHJldHVybi5cbiAgbGV0IHJlYWRlclxuXG4gIHRyeSB7XG4gICAgcmVhZGVyID0gYm9keS5zdHJlYW0uZ2V0UmVhZGVyKClcbiAgfSBjYXRjaCAoZSkge1xuICAgIGVycm9yU3RlcHMoZSlcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIDUuIFJlYWQgYWxsIGJ5dGVzIGZyb20gcmVhZGVyLCBnaXZlbiBzdWNjZXNzU3RlcHMgYW5kIGVycm9yU3RlcHMuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVhZEFsbEJ5dGVzKHJlYWRlcilcbiAgICBzdWNjZXNzU3RlcHMocmVzdWx0KVxuICB9IGNhdGNoIChlKSB7XG4gICAgZXJyb3JTdGVwcyhlKVxuICB9XG59XG5cbi8qKiBAdHlwZSB7UmVhZGFibGVTdHJlYW19ICovXG5sZXQgUmVhZGFibGVTdHJlYW0gPSBnbG9iYWxUaGlzLlJlYWRhYmxlU3RyZWFtXG5cbmZ1bmN0aW9uIGlzUmVhZGFibGVTdHJlYW1MaWtlIChzdHJlYW0pIHtcbiAgaWYgKCFSZWFkYWJsZVN0cmVhbSkge1xuICAgIFJlYWRhYmxlU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtL3dlYicpLlJlYWRhYmxlU3RyZWFtXG4gIH1cblxuICByZXR1cm4gc3RyZWFtIGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW0gfHwgKFxuICAgIHN0cmVhbVtTeW1ib2wudG9TdHJpbmdUYWddID09PSAnUmVhZGFibGVTdHJlYW0nICYmXG4gICAgdHlwZW9mIHN0cmVhbS50ZWUgPT09ICdmdW5jdGlvbidcbiAgKVxufVxuXG5jb25zdCBNQVhJTVVNX0FSR1VNRU5UX0xFTkdUSCA9IDY1NTM1XG5cbi8qKlxuICogQHNlZSBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jaXNvbW9ycGhpYy1kZWNvZGVcbiAqIEBwYXJhbSB7bnVtYmVyW118VWludDhBcnJheX0gaW5wdXRcbiAqL1xuZnVuY3Rpb24gaXNvbW9ycGhpY0RlY29kZSAoaW5wdXQpIHtcbiAgLy8gMS4gVG8gaXNvbW9ycGhpYyBkZWNvZGUgYSBieXRlIHNlcXVlbmNlIGlucHV0LCByZXR1cm4gYSBzdHJpbmcgd2hvc2UgY29kZSBwb2ludFxuICAvLyAgICBsZW5ndGggaXMgZXF1YWwgdG8gaW5wdXTigJlzIGxlbmd0aCBhbmQgd2hvc2UgY29kZSBwb2ludHMgaGF2ZSB0aGUgc2FtZSB2YWx1ZXNcbiAgLy8gICAgYXMgdGhlIHZhbHVlcyBvZiBpbnB1dOKAmXMgYnl0ZXMsIGluIHRoZSBzYW1lIG9yZGVyLlxuXG4gIGlmIChpbnB1dC5sZW5ndGggPCBNQVhJTVVNX0FSR1VNRU5UX0xFTkdUSCkge1xuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKC4uLmlucHV0KVxuICB9XG5cbiAgcmV0dXJuIGlucHV0LnJlZHVjZSgocHJldmlvdXMsIGN1cnJlbnQpID0+IHByZXZpb3VzICsgU3RyaW5nLmZyb21DaGFyQ29kZShjdXJyZW50KSwgJycpXG59XG5cbi8qKlxuICogQHBhcmFtIHtSZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXI8VWludDhBcnJheT59IGNvbnRyb2xsZXJcbiAqL1xuZnVuY3Rpb24gcmVhZGFibGVTdHJlYW1DbG9zZSAoY29udHJvbGxlcikge1xuICB0cnkge1xuICAgIGNvbnRyb2xsZXIuY2xvc2UoKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBUT0RPOiBhZGQgY29tbWVudCBleHBsYWluaW5nIHdoeSB0aGlzIGVycm9yIG9jY3Vycy5cbiAgICBpZiAoIWVyci5tZXNzYWdlLmluY2x1ZGVzKCdDb250cm9sbGVyIGlzIGFscmVhZHkgY2xvc2VkJykpIHtcbiAgICAgIHRocm93IGVyclxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2lzb21vcnBoaWMtZW5jb2RlXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRcbiAqL1xuZnVuY3Rpb24gaXNvbW9ycGhpY0VuY29kZSAoaW5wdXQpIHtcbiAgLy8gMS4gQXNzZXJ0OiBpbnB1dCBjb250YWlucyBubyBjb2RlIHBvaW50cyBncmVhdGVyIHRoYW4gVSswMEZGLlxuICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgYXNzZXJ0KGlucHV0LmNoYXJDb2RlQXQoaSkgPD0gMHhGRilcbiAgfVxuXG4gIC8vIDIuIFJldHVybiBhIGJ5dGUgc2VxdWVuY2Ugd2hvc2UgbGVuZ3RoIGlzIGVxdWFsIHRvIGlucHV04oCZcyBjb2RlXG4gIC8vICAgIHBvaW50IGxlbmd0aCBhbmQgd2hvc2UgYnl0ZXMgaGF2ZSB0aGUgc2FtZSB2YWx1ZXMgYXMgdGhlXG4gIC8vICAgIHZhbHVlcyBvZiBpbnB1dOKAmXMgY29kZSBwb2ludHMsIGluIHRoZSBzYW1lIG9yZGVyXG4gIHJldHVybiBpbnB1dFxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9zdHJlYW1zLnNwZWMud2hhdHdnLm9yZy8jcmVhZGFibGVzdHJlYW1kZWZhdWx0cmVhZGVyLXJlYWQtYWxsLWJ5dGVzXG4gKiBAc2VlIGh0dHBzOi8vc3RyZWFtcy5zcGVjLndoYXR3Zy5vcmcvI3JlYWQtbG9vcFxuICogQHBhcmFtIHtSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXJ9IHJlYWRlclxuICovXG5hc3luYyBmdW5jdGlvbiByZWFkQWxsQnl0ZXMgKHJlYWRlcikge1xuICBjb25zdCBieXRlcyA9IFtdXG4gIGxldCBieXRlTGVuZ3RoID0gMFxuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgeyBkb25lLCB2YWx1ZTogY2h1bmsgfSA9IGF3YWl0IHJlYWRlci5yZWFkKClcblxuICAgIGlmIChkb25lKSB7XG4gICAgICAvLyAxLiBDYWxsIHN1Y2Nlc3NTdGVwcyB3aXRoIGJ5dGVzLlxuICAgICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoYnl0ZXMsIGJ5dGVMZW5ndGgpXG4gICAgfVxuXG4gICAgLy8gMS4gSWYgY2h1bmsgaXMgbm90IGEgVWludDhBcnJheSBvYmplY3QsIGNhbGwgZmFpbHVyZVN0ZXBzXG4gICAgLy8gICAgd2l0aCBhIFR5cGVFcnJvciBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMuXG4gICAgaWYgKCFpc1VpbnQ4QXJyYXkoY2h1bmspKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWNlaXZlZCBub24tVWludDhBcnJheSBjaHVuaycpXG4gICAgfVxuXG4gICAgLy8gMi4gQXBwZW5kIHRoZSBieXRlcyByZXByZXNlbnRlZCBieSBjaHVuayB0byBieXRlcy5cbiAgICBieXRlcy5wdXNoKGNodW5rKVxuICAgIGJ5dGVMZW5ndGggKz0gY2h1bmsubGVuZ3RoXG5cbiAgICAvLyAzLiBSZWFkLWxvb3AgZ2l2ZW4gcmVhZGVyLCBieXRlcywgc3VjY2Vzc1N0ZXBzLCBhbmQgZmFpbHVyZVN0ZXBzLlxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaXMtbG9jYWxcbiAqIEBwYXJhbSB7VVJMfSB1cmxcbiAqL1xuZnVuY3Rpb24gdXJsSXNMb2NhbCAodXJsKSB7XG4gIGFzc2VydCgncHJvdG9jb2wnIGluIHVybCkgLy8gZW5zdXJlIGl0J3MgYSB1cmwgb2JqZWN0XG5cbiAgY29uc3QgcHJvdG9jb2wgPSB1cmwucHJvdG9jb2xcblxuICByZXR1cm4gcHJvdG9jb2wgPT09ICdhYm91dDonIHx8IHByb3RvY29sID09PSAnYmxvYjonIHx8IHByb3RvY29sID09PSAnZGF0YTonXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd8VVJMfSB1cmxcbiAqL1xuZnVuY3Rpb24gdXJsSGFzSHR0cHNTY2hlbWUgKHVybCkge1xuICBpZiAodHlwZW9mIHVybCA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdXJsLnN0YXJ0c1dpdGgoJ2h0dHBzOicpXG4gIH1cblxuICByZXR1cm4gdXJsLnByb3RvY29sID09PSAnaHR0cHM6J1xufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtc2NoZW1lXG4gKiBAcGFyYW0ge1VSTH0gdXJsXG4gKi9cbmZ1bmN0aW9uIHVybElzSHR0cEh0dHBzU2NoZW1lICh1cmwpIHtcbiAgYXNzZXJ0KCdwcm90b2NvbCcgaW4gdXJsKSAvLyBlbnN1cmUgaXQncyBhIHVybCBvYmplY3RcblxuICBjb25zdCBwcm90b2NvbCA9IHVybC5wcm90b2NvbFxuXG4gIHJldHVybiBwcm90b2NvbCA9PT0gJ2h0dHA6JyB8fCBwcm90b2NvbCA9PT0gJ2h0dHBzOidcbn1cblxuLyoqXG4gKiBGZXRjaCBzdXBwb3J0cyBub2RlID49IDE2LjguMCwgYnV0IE9iamVjdC5oYXNPd24gd2FzIGFkZGVkIGluIHYxNi45LjAuXG4gKi9cbmNvbnN0IGhhc093biA9IE9iamVjdC5oYXNPd24gfHwgKChkaWN0LCBrZXkpID0+IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkaWN0LCBrZXkpKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXNBYm9ydGVkLFxuICBpc0NhbmNlbGxlZCxcbiAgY3JlYXRlRGVmZXJyZWRQcm9taXNlLFxuICBSZWFkYWJsZVN0cmVhbUZyb20sXG4gIHRvVVNWU3RyaW5nLFxuICB0cnlVcGdyYWRlUmVxdWVzdFRvQVBvdGVudGlhbGx5VHJ1c3R3b3J0aHlVUkwsXG4gIGNvYXJzZW5lZFNoYXJlZEN1cnJlbnRUaW1lLFxuICBkZXRlcm1pbmVSZXF1ZXN0c1JlZmVycmVyLFxuICBtYWtlUG9saWN5Q29udGFpbmVyLFxuICBjbG9uZVBvbGljeUNvbnRhaW5lcixcbiAgYXBwZW5kRmV0Y2hNZXRhZGF0YSxcbiAgYXBwZW5kUmVxdWVzdE9yaWdpbkhlYWRlcixcbiAgVEFPQ2hlY2ssXG4gIGNvcnNDaGVjayxcbiAgY3Jvc3NPcmlnaW5SZXNvdXJjZVBvbGljeUNoZWNrLFxuICBjcmVhdGVPcGFxdWVUaW1pbmdJbmZvLFxuICBzZXRSZXF1ZXN0UmVmZXJyZXJQb2xpY3lPblJlZGlyZWN0LFxuICBpc1ZhbGlkSFRUUFRva2VuLFxuICByZXF1ZXN0QmFkUG9ydCxcbiAgcmVxdWVzdEN1cnJlbnRVUkwsXG4gIHJlc3BvbnNlVVJMLFxuICByZXNwb25zZUxvY2F0aW9uVVJMLFxuICBpc0Jsb2JMaWtlLFxuICBpc1VSTFBvdGVudGlhbGx5VHJ1c3R3b3J0aHksXG4gIGlzVmFsaWRSZWFzb25QaHJhc2UsXG4gIHNhbWVPcmlnaW4sXG4gIG5vcm1hbGl6ZU1ldGhvZCxcbiAgc2VyaWFsaXplSmF2YXNjcmlwdFZhbHVlVG9KU09OU3RyaW5nLFxuICBtYWtlSXRlcmF0b3IsXG4gIGlzVmFsaWRIZWFkZXJOYW1lLFxuICBpc1ZhbGlkSGVhZGVyVmFsdWUsXG4gIGhhc093bixcbiAgaXNFcnJvckxpa2UsXG4gIGZ1bGx5UmVhZEJvZHksXG4gIGJ5dGVzTWF0Y2gsXG4gIGlzUmVhZGFibGVTdHJlYW1MaWtlLFxuICByZWFkYWJsZVN0cmVhbUNsb3NlLFxuICBpc29tb3JwaGljRW5jb2RlLFxuICBpc29tb3JwaGljRGVjb2RlLFxuICB1cmxJc0xvY2FsLFxuICB1cmxIYXNIdHRwc1NjaGVtZSxcbiAgdXJsSXNIdHRwSHR0cHNTY2hlbWUsXG4gIHJlYWRBbGxCeXRlcyxcbiAgbm9ybWFsaXplTWV0aG9kUmVjb3JkLFxuICBwYXJzZU1ldGFkYXRhXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAga1VybDogU3ltYm9sKCd1cmwnKSxcbiAga0hlYWRlcnM6IFN5bWJvbCgnaGVhZGVycycpLFxuICBrU2lnbmFsOiBTeW1ib2woJ3NpZ25hbCcpLFxuICBrU3RhdGU6IFN5bWJvbCgnc3RhdGUnKSxcbiAga0d1YXJkOiBTeW1ib2woJ2d1YXJkJyksXG4gIGtSZWFsbTogU3ltYm9sKCdyZWFsbScpXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHR5cGVzIH0gPSByZXF1aXJlKCd1dGlsJylcbmNvbnN0IHsgaGFzT3duLCB0b1VTVlN0cmluZyB9ID0gcmVxdWlyZSgnLi91dGlsJylcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4uLy4uL3R5cGVzL3dlYmlkbCcpLldlYmlkbH0gKi9cbmNvbnN0IHdlYmlkbCA9IHt9XG53ZWJpZGwuY29udmVydGVycyA9IHt9XG53ZWJpZGwudXRpbCA9IHt9XG53ZWJpZGwuZXJyb3JzID0ge31cblxud2ViaWRsLmVycm9ycy5leGNlcHRpb24gPSBmdW5jdGlvbiAobWVzc2FnZSkge1xuICByZXR1cm4gbmV3IFR5cGVFcnJvcihgJHttZXNzYWdlLmhlYWRlcn06ICR7bWVzc2FnZS5tZXNzYWdlfWApXG59XG5cbndlYmlkbC5lcnJvcnMuY29udmVyc2lvbkZhaWxlZCA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gIGNvbnN0IHBsdXJhbCA9IGNvbnRleHQudHlwZXMubGVuZ3RoID09PSAxID8gJycgOiAnIG9uZSBvZidcbiAgY29uc3QgbWVzc2FnZSA9XG4gICAgYCR7Y29udGV4dC5hcmd1bWVudH0gY291bGQgbm90IGJlIGNvbnZlcnRlZCB0b2AgK1xuICAgIGAke3BsdXJhbH06ICR7Y29udGV4dC50eXBlcy5qb2luKCcsICcpfS5gXG5cbiAgcmV0dXJuIHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICBoZWFkZXI6IGNvbnRleHQucHJlZml4LFxuICAgIG1lc3NhZ2VcbiAgfSlcbn1cblxud2ViaWRsLmVycm9ycy5pbnZhbGlkQXJndW1lbnQgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuICByZXR1cm4gd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgIGhlYWRlcjogY29udGV4dC5wcmVmaXgsXG4gICAgbWVzc2FnZTogYFwiJHtjb250ZXh0LnZhbHVlfVwiIGlzIGFuIGludmFsaWQgJHtjb250ZXh0LnR5cGV9LmBcbiAgfSlcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNpbXBsZW1lbnRzXG53ZWJpZGwuYnJhbmRDaGVjayA9IGZ1bmN0aW9uIChWLCBJLCBvcHRzID0gdW5kZWZpbmVkKSB7XG4gIGlmIChvcHRzPy5zdHJpY3QgIT09IGZhbHNlICYmICEoViBpbnN0YW5jZW9mIEkpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSWxsZWdhbCBpbnZvY2F0aW9uJylcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gVj8uW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09IEkucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ11cbiAgfVxufVxuXG53ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayA9IGZ1bmN0aW9uICh7IGxlbmd0aCB9LCBtaW4sIGN0eCkge1xuICBpZiAobGVuZ3RoIDwgbWluKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgbWVzc2FnZTogYCR7bWlufSBhcmd1bWVudCR7bWluICE9PSAxID8gJ3MnIDogJyd9IHJlcXVpcmVkLCBgICtcbiAgICAgICAgICAgICAgIGBidXQke2xlbmd0aCA/ICcgb25seScgOiAnJ30gJHtsZW5ndGh9IGZvdW5kLmAsXG4gICAgICAuLi5jdHhcbiAgICB9KVxuICB9XG59XG5cbndlYmlkbC5pbGxlZ2FsQ29uc3RydWN0b3IgPSBmdW5jdGlvbiAoKSB7XG4gIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICBoZWFkZXI6ICdUeXBlRXJyb3InLFxuICAgIG1lc3NhZ2U6ICdJbGxlZ2FsIGNvbnN0cnVjdG9yJ1xuICB9KVxufVxuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWVjbWFzY3JpcHQtZGF0YS10eXBlcy1hbmQtdmFsdWVzXG53ZWJpZGwudXRpbC5UeXBlID0gZnVuY3Rpb24gKFYpIHtcbiAgc3dpdGNoICh0eXBlb2YgVikge1xuICAgIGNhc2UgJ3VuZGVmaW5lZCc6IHJldHVybiAnVW5kZWZpbmVkJ1xuICAgIGNhc2UgJ2Jvb2xlYW4nOiByZXR1cm4gJ0Jvb2xlYW4nXG4gICAgY2FzZSAnc3RyaW5nJzogcmV0dXJuICdTdHJpbmcnXG4gICAgY2FzZSAnc3ltYm9sJzogcmV0dXJuICdTeW1ib2wnXG4gICAgY2FzZSAnbnVtYmVyJzogcmV0dXJuICdOdW1iZXInXG4gICAgY2FzZSAnYmlnaW50JzogcmV0dXJuICdCaWdJbnQnXG4gICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgIGNhc2UgJ29iamVjdCc6IHtcbiAgICAgIGlmIChWID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnTnVsbCdcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICdPYmplY3QnXG4gICAgfVxuICB9XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jYWJzdHJhY3Qtb3BkZWYtY29udmVydHRvaW50XG53ZWJpZGwudXRpbC5Db252ZXJ0VG9JbnQgPSBmdW5jdGlvbiAoViwgYml0TGVuZ3RoLCBzaWduZWRuZXNzLCBvcHRzID0ge30pIHtcbiAgbGV0IHVwcGVyQm91bmRcbiAgbGV0IGxvd2VyQm91bmRcblxuICAvLyAxLiBJZiBiaXRMZW5ndGggaXMgNjQsIHRoZW46XG4gIGlmIChiaXRMZW5ndGggPT09IDY0KSB7XG4gICAgLy8gMS4gTGV0IHVwcGVyQm91bmQgYmUgMl41MyDiiJIgMS5cbiAgICB1cHBlckJvdW5kID0gTWF0aC5wb3coMiwgNTMpIC0gMVxuXG4gICAgLy8gMi4gSWYgc2lnbmVkbmVzcyBpcyBcInVuc2lnbmVkXCIsIHRoZW4gbGV0IGxvd2VyQm91bmQgYmUgMC5cbiAgICBpZiAoc2lnbmVkbmVzcyA9PT0gJ3Vuc2lnbmVkJykge1xuICAgICAgbG93ZXJCb3VuZCA9IDBcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gMy4gT3RoZXJ3aXNlIGxldCBsb3dlckJvdW5kIGJlIOKIkjJeNTMgKyAxLlxuICAgICAgbG93ZXJCb3VuZCA9IE1hdGgucG93KC0yLCA1MykgKyAxXG4gICAgfVxuICB9IGVsc2UgaWYgKHNpZ25lZG5lc3MgPT09ICd1bnNpZ25lZCcpIHtcbiAgICAvLyAyLiBPdGhlcndpc2UsIGlmIHNpZ25lZG5lc3MgaXMgXCJ1bnNpZ25lZFwiLCB0aGVuOlxuXG4gICAgLy8gMS4gTGV0IGxvd2VyQm91bmQgYmUgMC5cbiAgICBsb3dlckJvdW5kID0gMFxuXG4gICAgLy8gMi4gTGV0IHVwcGVyQm91bmQgYmUgMl5iaXRMZW5ndGgg4oiSIDEuXG4gICAgdXBwZXJCb3VuZCA9IE1hdGgucG93KDIsIGJpdExlbmd0aCkgLSAxXG4gIH0gZWxzZSB7XG4gICAgLy8gMy4gT3RoZXJ3aXNlOlxuXG4gICAgLy8gMS4gTGV0IGxvd2VyQm91bmQgYmUgLTJeYml0TGVuZ3RoIOKIkiAxLlxuICAgIGxvd2VyQm91bmQgPSBNYXRoLnBvdygtMiwgYml0TGVuZ3RoKSAtIDFcblxuICAgIC8vIDIuIExldCB1cHBlckJvdW5kIGJlIDJeYml0TGVuZ3RoIOKIkiAxIOKIkiAxLlxuICAgIHVwcGVyQm91bmQgPSBNYXRoLnBvdygyLCBiaXRMZW5ndGggLSAxKSAtIDFcbiAgfVxuXG4gIC8vIDQuIExldCB4IGJlID8gVG9OdW1iZXIoVikuXG4gIGxldCB4ID0gTnVtYmVyKFYpXG5cbiAgLy8gNS4gSWYgeCBpcyDiiJIwLCB0aGVuIHNldCB4IHRvICswLlxuICBpZiAoeCA9PT0gMCkge1xuICAgIHggPSAwXG4gIH1cblxuICAvLyA2LiBJZiB0aGUgY29udmVyc2lvbiBpcyB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtFbmZvcmNlUmFuZ2VdIGV4dGVuZGVkIGF0dHJpYnV0ZSwgdGhlbjpcbiAgaWYgKG9wdHMuZW5mb3JjZVJhbmdlID09PSB0cnVlKSB7XG4gICAgLy8gMS4gSWYgeCBpcyBOYU4sICviiJ4sIG9yIOKIkuKIniwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoXG4gICAgICBOdW1iZXIuaXNOYU4oeCkgfHxcbiAgICAgIHggPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSB8fFxuICAgICAgeCA9PT0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZXG4gICAgKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ0ludGVnZXIgY29udmVyc2lvbicsXG4gICAgICAgIG1lc3NhZ2U6IGBDb3VsZCBub3QgY29udmVydCAke1Z9IHRvIGFuIGludGVnZXIuYFxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAyLiBTZXQgeCB0byBJbnRlZ2VyUGFydCh4KS5cbiAgICB4ID0gd2ViaWRsLnV0aWwuSW50ZWdlclBhcnQoeClcblxuICAgIC8vIDMuIElmIHggPCBsb3dlckJvdW5kIG9yIHggPiB1cHBlckJvdW5kLCB0aGVuXG4gICAgLy8gICAgdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKHggPCBsb3dlckJvdW5kIHx8IHggPiB1cHBlckJvdW5kKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ0ludGVnZXIgY29udmVyc2lvbicsXG4gICAgICAgIG1lc3NhZ2U6IGBWYWx1ZSBtdXN0IGJlIGJldHdlZW4gJHtsb3dlckJvdW5kfS0ke3VwcGVyQm91bmR9LCBnb3QgJHt4fS5gXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDQuIFJldHVybiB4LlxuICAgIHJldHVybiB4XG4gIH1cblxuICAvLyA3LiBJZiB4IGlzIG5vdCBOYU4gYW5kIHRoZSBjb252ZXJzaW9uIGlzIHRvIGFuIElETFxuICAvLyAgICB0eXBlIGFzc29jaWF0ZWQgd2l0aCB0aGUgW0NsYW1wXSBleHRlbmRlZFxuICAvLyAgICBhdHRyaWJ1dGUsIHRoZW46XG4gIGlmICghTnVtYmVyLmlzTmFOKHgpICYmIG9wdHMuY2xhbXAgPT09IHRydWUpIHtcbiAgICAvLyAxLiBTZXQgeCB0byBtaW4obWF4KHgsIGxvd2VyQm91bmQpLCB1cHBlckJvdW5kKS5cbiAgICB4ID0gTWF0aC5taW4oTWF0aC5tYXgoeCwgbG93ZXJCb3VuZCksIHVwcGVyQm91bmQpXG5cbiAgICAvLyAyLiBSb3VuZCB4IHRvIHRoZSBuZWFyZXN0IGludGVnZXIsIGNob29zaW5nIHRoZVxuICAgIC8vICAgIGV2ZW4gaW50ZWdlciBpZiBpdCBsaWVzIGhhbGZ3YXkgYmV0d2VlbiB0d28sXG4gICAgLy8gICAgYW5kIGNob29zaW5nICswIHJhdGhlciB0aGFuIOKIkjAuXG4gICAgaWYgKE1hdGguZmxvb3IoeCkgJSAyID09PSAwKSB7XG4gICAgICB4ID0gTWF0aC5mbG9vcih4KVxuICAgIH0gZWxzZSB7XG4gICAgICB4ID0gTWF0aC5jZWlsKHgpXG4gICAgfVxuXG4gICAgLy8gMy4gUmV0dXJuIHguXG4gICAgcmV0dXJuIHhcbiAgfVxuXG4gIC8vIDguIElmIHggaXMgTmFOLCArMCwgK+KIniwgb3Ig4oiS4oieLCB0aGVuIHJldHVybiArMC5cbiAgaWYgKFxuICAgIE51bWJlci5pc05hTih4KSB8fFxuICAgICh4ID09PSAwICYmIE9iamVjdC5pcygwLCB4KSkgfHxcbiAgICB4ID09PSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkgfHxcbiAgICB4ID09PSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFlcbiAgKSB7XG4gICAgcmV0dXJuIDBcbiAgfVxuXG4gIC8vIDkuIFNldCB4IHRvIEludGVnZXJQYXJ0KHgpLlxuICB4ID0gd2ViaWRsLnV0aWwuSW50ZWdlclBhcnQoeClcblxuICAvLyAxMC4gU2V0IHggdG8geCBtb2R1bG8gMl5iaXRMZW5ndGguXG4gIHggPSB4ICUgTWF0aC5wb3coMiwgYml0TGVuZ3RoKVxuXG4gIC8vIDExLiBJZiBzaWduZWRuZXNzIGlzIFwic2lnbmVkXCIgYW5kIHgg4omlIDJeYml0TGVuZ3RoIOKIkiAxLFxuICAvLyAgICB0aGVuIHJldHVybiB4IOKIkiAyXmJpdExlbmd0aC5cbiAgaWYgKHNpZ25lZG5lc3MgPT09ICdzaWduZWQnICYmIHggPj0gTWF0aC5wb3coMiwgYml0TGVuZ3RoKSAtIDEpIHtcbiAgICByZXR1cm4geCAtIE1hdGgucG93KDIsIGJpdExlbmd0aClcbiAgfVxuXG4gIC8vIDEyLiBPdGhlcndpc2UsIHJldHVybiB4LlxuICByZXR1cm4geFxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2Fic3RyYWN0LW9wZGVmLWludGVnZXJwYXJ0XG53ZWJpZGwudXRpbC5JbnRlZ2VyUGFydCA9IGZ1bmN0aW9uIChuKSB7XG4gIC8vIDEuIExldCByIGJlIGZsb29yKGFicyhuKSkuXG4gIGNvbnN0IHIgPSBNYXRoLmZsb29yKE1hdGguYWJzKG4pKVxuXG4gIC8vIDIuIElmIG4gPCAwLCB0aGVuIHJldHVybiAtMSDDlyByLlxuICBpZiAobiA8IDApIHtcbiAgICByZXR1cm4gLTEgKiByXG4gIH1cblxuICAvLyAzLiBPdGhlcndpc2UsIHJldHVybiByLlxuICByZXR1cm4gclxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLXNlcXVlbmNlXG53ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIgPSBmdW5jdGlvbiAoY29udmVydGVyKSB7XG4gIHJldHVybiAoVikgPT4ge1xuICAgIC8vIDEuIElmIFR5cGUoVikgaXMgbm90IE9iamVjdCwgdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKHdlYmlkbC51dGlsLlR5cGUoVikgIT09ICdPYmplY3QnKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ1NlcXVlbmNlJyxcbiAgICAgICAgbWVzc2FnZTogYFZhbHVlIG9mIHR5cGUgJHt3ZWJpZGwudXRpbC5UeXBlKFYpfSBpcyBub3QgYW4gT2JqZWN0LmBcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gTGV0IG1ldGhvZCBiZSA/IEdldE1ldGhvZChWLCBAQGl0ZXJhdG9yKS5cbiAgICAvKiogQHR5cGUge0dlbmVyYXRvcn0gKi9cbiAgICBjb25zdCBtZXRob2QgPSBWPy5bU3ltYm9sLml0ZXJhdG9yXT8uKClcbiAgICBjb25zdCBzZXEgPSBbXVxuXG4gICAgLy8gMy4gSWYgbWV0aG9kIGlzIHVuZGVmaW5lZCwgdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKFxuICAgICAgbWV0aG9kID09PSB1bmRlZmluZWQgfHxcbiAgICAgIHR5cGVvZiBtZXRob2QubmV4dCAhPT0gJ2Z1bmN0aW9uJ1xuICAgICkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6ICdTZXF1ZW5jZScsXG4gICAgICAgIG1lc3NhZ2U6ICdPYmplY3QgaXMgbm90IGFuIGl0ZXJhdG9yLidcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNjcmVhdGUtc2VxdWVuY2UtZnJvbS1pdGVyYWJsZVxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBtZXRob2QubmV4dCgpXG5cbiAgICAgIGlmIChkb25lKSB7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIHNlcS5wdXNoKGNvbnZlcnRlcih2YWx1ZSkpXG4gICAgfVxuXG4gICAgcmV0dXJuIHNlcVxuICB9XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtdG8tcmVjb3JkXG53ZWJpZGwucmVjb3JkQ29udmVydGVyID0gZnVuY3Rpb24gKGtleUNvbnZlcnRlciwgdmFsdWVDb252ZXJ0ZXIpIHtcbiAgcmV0dXJuIChPKSA9PiB7XG4gICAgLy8gMS4gSWYgVHlwZShPKSBpcyBub3QgT2JqZWN0LCB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAod2ViaWRsLnV0aWwuVHlwZShPKSAhPT0gJ09iamVjdCcpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnUmVjb3JkJyxcbiAgICAgICAgbWVzc2FnZTogYFZhbHVlIG9mIHR5cGUgJHt3ZWJpZGwudXRpbC5UeXBlKE8pfSBpcyBub3QgYW4gT2JqZWN0LmBcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gTGV0IHJlc3VsdCBiZSBhIG5ldyBlbXB0eSBpbnN0YW5jZSBvZiByZWNvcmQ8SywgVj4uXG4gICAgY29uc3QgcmVzdWx0ID0ge31cblxuICAgIGlmICghdHlwZXMuaXNQcm94eShPKSkge1xuICAgICAgLy8gT2JqZWN0LmtleXMgb25seSByZXR1cm5zIGVudW1lcmFibGUgcHJvcGVydGllc1xuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKE8pXG5cbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgLy8gMS4gTGV0IHR5cGVkS2V5IGJlIGtleSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgSy5cbiAgICAgICAgY29uc3QgdHlwZWRLZXkgPSBrZXlDb252ZXJ0ZXIoa2V5KVxuXG4gICAgICAgIC8vIDIuIExldCB2YWx1ZSBiZSA/IEdldChPLCBrZXkpLlxuICAgICAgICAvLyAzLiBMZXQgdHlwZWRWYWx1ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgVi5cbiAgICAgICAgY29uc3QgdHlwZWRWYWx1ZSA9IHZhbHVlQ29udmVydGVyKE9ba2V5XSlcblxuICAgICAgICAvLyA0LiBTZXQgcmVzdWx0W3R5cGVkS2V5XSB0byB0eXBlZFZhbHVlLlxuICAgICAgICByZXN1bHRbdHlwZWRLZXldID0gdHlwZWRWYWx1ZVxuICAgICAgfVxuXG4gICAgICAvLyA1LiBSZXR1cm4gcmVzdWx0LlxuICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH1cblxuICAgIC8vIDMuIExldCBrZXlzIGJlID8gTy5bW093blByb3BlcnR5S2V5c11dKCkuXG4gICAgY29uc3Qga2V5cyA9IFJlZmxlY3Qub3duS2V5cyhPKVxuXG4gICAgLy8gNC4gRm9yIGVhY2gga2V5IG9mIGtleXMuXG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgLy8gMS4gTGV0IGRlc2MgYmUgPyBPLltbR2V0T3duUHJvcGVydHldXShrZXkpLlxuICAgICAgY29uc3QgZGVzYyA9IFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIGtleSlcblxuICAgICAgLy8gMi4gSWYgZGVzYyBpcyBub3QgdW5kZWZpbmVkIGFuZCBkZXNjLltbRW51bWVyYWJsZV1dIGlzIHRydWU6XG4gICAgICBpZiAoZGVzYz8uZW51bWVyYWJsZSkge1xuICAgICAgICAvLyAxLiBMZXQgdHlwZWRLZXkgYmUga2V5IGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBLLlxuICAgICAgICBjb25zdCB0eXBlZEtleSA9IGtleUNvbnZlcnRlcihrZXkpXG5cbiAgICAgICAgLy8gMi4gTGV0IHZhbHVlIGJlID8gR2V0KE8sIGtleSkuXG4gICAgICAgIC8vIDMuIExldCB0eXBlZFZhbHVlIGJlIHZhbHVlIGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBWLlxuICAgICAgICBjb25zdCB0eXBlZFZhbHVlID0gdmFsdWVDb252ZXJ0ZXIoT1trZXldKVxuXG4gICAgICAgIC8vIDQuIFNldCByZXN1bHRbdHlwZWRLZXldIHRvIHR5cGVkVmFsdWUuXG4gICAgICAgIHJlc3VsdFt0eXBlZEtleV0gPSB0eXBlZFZhbHVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNS4gUmV0dXJuIHJlc3VsdC5cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cbn1cblxud2ViaWRsLmludGVyZmFjZUNvbnZlcnRlciA9IGZ1bmN0aW9uIChpKSB7XG4gIHJldHVybiAoViwgb3B0cyA9IHt9KSA9PiB7XG4gICAgaWYgKG9wdHMuc3RyaWN0ICE9PSBmYWxzZSAmJiAhKFYgaW5zdGFuY2VvZiBpKSkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6IGkubmFtZSxcbiAgICAgICAgbWVzc2FnZTogYEV4cGVjdGVkICR7Vn0gdG8gYmUgYW4gaW5zdGFuY2Ugb2YgJHtpLm5hbWV9LmBcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIFZcbiAgfVxufVxuXG53ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlciA9IGZ1bmN0aW9uIChjb252ZXJ0ZXJzKSB7XG4gIHJldHVybiAoZGljdGlvbmFyeSkgPT4ge1xuICAgIGNvbnN0IHR5cGUgPSB3ZWJpZGwudXRpbC5UeXBlKGRpY3Rpb25hcnkpXG4gICAgY29uc3QgZGljdCA9IHt9XG5cbiAgICBpZiAodHlwZSA9PT0gJ051bGwnIHx8IHR5cGUgPT09ICdVbmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gZGljdFxuICAgIH0gZWxzZSBpZiAodHlwZSAhPT0gJ09iamVjdCcpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnRGljdGlvbmFyeScsXG4gICAgICAgIG1lc3NhZ2U6IGBFeHBlY3RlZCAke2RpY3Rpb25hcnl9IHRvIGJlIG9uZSBvZjogTnVsbCwgVW5kZWZpbmVkLCBPYmplY3QuYFxuICAgICAgfSlcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IG9wdGlvbnMgb2YgY29udmVydGVycykge1xuICAgICAgY29uc3QgeyBrZXksIGRlZmF1bHRWYWx1ZSwgcmVxdWlyZWQsIGNvbnZlcnRlciB9ID0gb3B0aW9uc1xuXG4gICAgICBpZiAocmVxdWlyZWQgPT09IHRydWUpIHtcbiAgICAgICAgaWYgKCFoYXNPd24oZGljdGlvbmFyeSwga2V5KSkge1xuICAgICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICAgIGhlYWRlcjogJ0RpY3Rpb25hcnknLFxuICAgICAgICAgICAgbWVzc2FnZTogYE1pc3NpbmcgcmVxdWlyZWQga2V5IFwiJHtrZXl9XCIuYFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGV0IHZhbHVlID0gZGljdGlvbmFyeVtrZXldXG4gICAgICBjb25zdCBoYXNEZWZhdWx0ID0gaGFzT3duKG9wdGlvbnMsICdkZWZhdWx0VmFsdWUnKVxuXG4gICAgICAvLyBPbmx5IHVzZSBkZWZhdWx0VmFsdWUgaWYgdmFsdWUgaXMgdW5kZWZpbmVkIGFuZFxuICAgICAgLy8gYSBkZWZhdWx0VmFsdWUgb3B0aW9ucyB3YXMgcHJvdmlkZWQuXG4gICAgICBpZiAoaGFzRGVmYXVsdCAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlID8/IGRlZmF1bHRWYWx1ZVxuICAgICAgfVxuXG4gICAgICAvLyBBIGtleSBjYW4gYmUgb3B0aW9uYWwgYW5kIGhhdmUgbm8gZGVmYXVsdCB2YWx1ZS5cbiAgICAgIC8vIFdoZW4gdGhpcyBoYXBwZW5zLCBkbyBub3QgcGVyZm9ybSBhIGNvbnZlcnNpb24sXG4gICAgICAvLyBhbmQgZG8gbm90IGFzc2lnbiB0aGUga2V5IGEgdmFsdWUuXG4gICAgICBpZiAocmVxdWlyZWQgfHwgaGFzRGVmYXVsdCB8fCB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhbHVlID0gY29udmVydGVyKHZhbHVlKVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBvcHRpb25zLmFsbG93ZWRWYWx1ZXMgJiZcbiAgICAgICAgICAhb3B0aW9ucy5hbGxvd2VkVmFsdWVzLmluY2x1ZGVzKHZhbHVlKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICBoZWFkZXI6ICdEaWN0aW9uYXJ5JyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGAke3ZhbHVlfSBpcyBub3QgYW4gYWNjZXB0ZWQgdHlwZS4gRXhwZWN0ZWQgb25lIG9mICR7b3B0aW9ucy5hbGxvd2VkVmFsdWVzLmpvaW4oJywgJyl9LmBcbiAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgZGljdFtrZXldID0gdmFsdWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGljdFxuICB9XG59XG5cbndlYmlkbC5udWxsYWJsZUNvbnZlcnRlciA9IGZ1bmN0aW9uIChjb252ZXJ0ZXIpIHtcbiAgcmV0dXJuIChWKSA9PiB7XG4gICAgaWYgKFYgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBWXG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnZlcnRlcihWKVxuICB9XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtRE9NU3RyaW5nXG53ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcgPSBmdW5jdGlvbiAoViwgb3B0cyA9IHt9KSB7XG4gIC8vIDEuIElmIFYgaXMgbnVsbCBhbmQgdGhlIGNvbnZlcnNpb24gaXMgdG8gYW4gSURMIHR5cGVcbiAgLy8gICAgYXNzb2NpYXRlZCB3aXRoIHRoZSBbTGVnYWN5TnVsbFRvRW1wdHlTdHJpbmddXG4gIC8vICAgIGV4dGVuZGVkIGF0dHJpYnV0ZSwgdGhlbiByZXR1cm4gdGhlIERPTVN0cmluZyB2YWx1ZVxuICAvLyAgICB0aGF0IHJlcHJlc2VudHMgdGhlIGVtcHR5IHN0cmluZy5cbiAgaWYgKFYgPT09IG51bGwgJiYgb3B0cy5sZWdhY3lOdWxsVG9FbXB0eVN0cmluZykge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgLy8gMi4gTGV0IHggYmUgPyBUb1N0cmluZyhWKS5cbiAgaWYgKHR5cGVvZiBWID09PSAnc3ltYm9sJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0NvdWxkIG5vdCBjb252ZXJ0IGFyZ3VtZW50IG9mIHR5cGUgc3ltYm9sIHRvIHN0cmluZy4nKVxuICB9XG5cbiAgLy8gMy4gUmV0dXJuIHRoZSBJREwgRE9NU3RyaW5nIHZhbHVlIHRoYXQgcmVwcmVzZW50cyB0aGVcbiAgLy8gICAgc2FtZSBzZXF1ZW5jZSBvZiBjb2RlIHVuaXRzIGFzIHRoZSBvbmUgdGhlXG4gIC8vICAgIEVDTUFTY3JpcHQgU3RyaW5nIHZhbHVlIHggcmVwcmVzZW50cy5cbiAgcmV0dXJuIFN0cmluZyhWKVxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLUJ5dGVTdHJpbmdcbndlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcgPSBmdW5jdGlvbiAoVikge1xuICAvLyAxLiBMZXQgeCBiZSA/IFRvU3RyaW5nKFYpLlxuICAvLyBOb3RlOiBET01TdHJpbmcgY29udmVydGVyIHBlcmZvcm0gPyBUb1N0cmluZyhWKVxuICBjb25zdCB4ID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKFYpXG5cbiAgLy8gMi4gSWYgdGhlIHZhbHVlIG9mIGFueSBlbGVtZW50IG9mIHggaXMgZ3JlYXRlciB0aGFuXG4gIC8vICAgIDI1NSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHgubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgaWYgKHguY2hhckNvZGVBdChpbmRleCkgPiAyNTUpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICdDYW5ub3QgY29udmVydCBhcmd1bWVudCB0byBhIEJ5dGVTdHJpbmcgYmVjYXVzZSB0aGUgY2hhcmFjdGVyIGF0ICcgK1xuICAgICAgICBgaW5kZXggJHtpbmRleH0gaGFzIGEgdmFsdWUgb2YgJHt4LmNoYXJDb2RlQXQoaW5kZXgpfSB3aGljaCBpcyBncmVhdGVyIHRoYW4gMjU1LmBcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICAvLyAzLiBSZXR1cm4gYW4gSURMIEJ5dGVTdHJpbmcgdmFsdWUgd2hvc2UgbGVuZ3RoIGlzIHRoZVxuICAvLyAgICBsZW5ndGggb2YgeCwgYW5kIHdoZXJlIHRoZSB2YWx1ZSBvZiBlYWNoIGVsZW1lbnQgaXNcbiAgLy8gICAgdGhlIHZhbHVlIG9mIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnQgb2YgeC5cbiAgcmV0dXJuIHhcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy1VU1ZTdHJpbmdcbndlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyA9IHRvVVNWU3RyaW5nXG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtYm9vbGVhblxud2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbiA9IGZ1bmN0aW9uIChWKSB7XG4gIC8vIDEuIExldCB4IGJlIHRoZSByZXN1bHQgb2YgY29tcHV0aW5nIFRvQm9vbGVhbihWKS5cbiAgY29uc3QgeCA9IEJvb2xlYW4oVilcblxuICAvLyAyLiBSZXR1cm4gdGhlIElETCBib29sZWFuIHZhbHVlIHRoYXQgaXMgdGhlIG9uZSB0aGF0IHJlcHJlc2VudHNcbiAgLy8gICAgdGhlIHNhbWUgdHJ1dGggdmFsdWUgYXMgdGhlIEVDTUFTY3JpcHQgQm9vbGVhbiB2YWx1ZSB4LlxuICByZXR1cm4geFxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLWFueVxud2ViaWRsLmNvbnZlcnRlcnMuYW55ID0gZnVuY3Rpb24gKFYpIHtcbiAgcmV0dXJuIFZcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy1sb25nLWxvbmdcbndlYmlkbC5jb252ZXJ0ZXJzWydsb25nIGxvbmcnXSA9IGZ1bmN0aW9uIChWKSB7XG4gIC8vIDEuIExldCB4IGJlID8gQ29udmVydFRvSW50KFYsIDY0LCBcInNpZ25lZFwiKS5cbiAgY29uc3QgeCA9IHdlYmlkbC51dGlsLkNvbnZlcnRUb0ludChWLCA2NCwgJ3NpZ25lZCcpXG5cbiAgLy8gMi4gUmV0dXJuIHRoZSBJREwgbG9uZyBsb25nIHZhbHVlIHRoYXQgcmVwcmVzZW50c1xuICAvLyAgICB0aGUgc2FtZSBudW1lcmljIHZhbHVlIGFzIHguXG4gIHJldHVybiB4XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtdW5zaWduZWQtbG9uZy1sb25nXG53ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgbG9uZyBsb25nJ10gPSBmdW5jdGlvbiAoVikge1xuICAvLyAxLiBMZXQgeCBiZSA/IENvbnZlcnRUb0ludChWLCA2NCwgXCJ1bnNpZ25lZFwiKS5cbiAgY29uc3QgeCA9IHdlYmlkbC51dGlsLkNvbnZlcnRUb0ludChWLCA2NCwgJ3Vuc2lnbmVkJylcblxuICAvLyAyLiBSZXR1cm4gdGhlIElETCB1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWUgdGhhdFxuICAvLyAgICByZXByZXNlbnRzIHRoZSBzYW1lIG51bWVyaWMgdmFsdWUgYXMgeC5cbiAgcmV0dXJuIHhcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy11bnNpZ25lZC1sb25nXG53ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgbG9uZyddID0gZnVuY3Rpb24gKFYpIHtcbiAgLy8gMS4gTGV0IHggYmUgPyBDb252ZXJ0VG9JbnQoViwgMzIsIFwidW5zaWduZWRcIikuXG4gIGNvbnN0IHggPSB3ZWJpZGwudXRpbC5Db252ZXJ0VG9JbnQoViwgMzIsICd1bnNpZ25lZCcpXG5cbiAgLy8gMi4gUmV0dXJuIHRoZSBJREwgdW5zaWduZWQgbG9uZyB2YWx1ZSB0aGF0XG4gIC8vICAgIHJlcHJlc2VudHMgdGhlIHNhbWUgbnVtZXJpYyB2YWx1ZSBhcyB4LlxuICByZXR1cm4geFxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLXVuc2lnbmVkLXNob3J0XG53ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgc2hvcnQnXSA9IGZ1bmN0aW9uIChWLCBvcHRzKSB7XG4gIC8vIDEuIExldCB4IGJlID8gQ29udmVydFRvSW50KFYsIDE2LCBcInVuc2lnbmVkXCIpLlxuICBjb25zdCB4ID0gd2ViaWRsLnV0aWwuQ29udmVydFRvSW50KFYsIDE2LCAndW5zaWduZWQnLCBvcHRzKVxuXG4gIC8vIDIuIFJldHVybiB0aGUgSURMIHVuc2lnbmVkIHNob3J0IHZhbHVlIHRoYXQgcmVwcmVzZW50c1xuICAvLyAgICB0aGUgc2FtZSBudW1lcmljIHZhbHVlIGFzIHguXG4gIHJldHVybiB4XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jaWRsLUFycmF5QnVmZmVyXG53ZWJpZGwuY29udmVydGVycy5BcnJheUJ1ZmZlciA9IGZ1bmN0aW9uIChWLCBvcHRzID0ge30pIHtcbiAgLy8gMS4gSWYgVHlwZShWKSBpcyBub3QgT2JqZWN0LCBvciBWIGRvZXMgbm90IGhhdmUgYW5cbiAgLy8gICAgW1tBcnJheUJ1ZmZlckRhdGFdXSBpbnRlcm5hbCBzbG90LCB0aGVuIHRocm93IGFcbiAgLy8gICAgVHlwZUVycm9yLlxuICAvLyBzZWU6IGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvcGVydGllcy1vZi10aGUtYXJyYXlidWZmZXItaW5zdGFuY2VzXG4gIC8vIHNlZTogaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9wZXJ0aWVzLW9mLXRoZS1zaGFyZWRhcnJheWJ1ZmZlci1pbnN0YW5jZXNcbiAgaWYgKFxuICAgIHdlYmlkbC51dGlsLlR5cGUoVikgIT09ICdPYmplY3QnIHx8XG4gICAgIXR5cGVzLmlzQW55QXJyYXlCdWZmZXIoVilcbiAgKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5jb252ZXJzaW9uRmFpbGVkKHtcbiAgICAgIHByZWZpeDogYCR7Vn1gLFxuICAgICAgYXJndW1lbnQ6IGAke1Z9YCxcbiAgICAgIHR5cGVzOiBbJ0FycmF5QnVmZmVyJ11cbiAgICB9KVxuICB9XG5cbiAgLy8gMi4gSWYgdGhlIGNvbnZlcnNpb24gaXMgbm90IHRvIGFuIElETCB0eXBlIGFzc29jaWF0ZWRcbiAgLy8gICAgd2l0aCB0aGUgW0FsbG93U2hhcmVkXSBleHRlbmRlZCBhdHRyaWJ1dGUsIGFuZFxuICAvLyAgICBJc1NoYXJlZEFycmF5QnVmZmVyKFYpIGlzIHRydWUsIHRoZW4gdGhyb3cgYVxuICAvLyAgICBUeXBlRXJyb3IuXG4gIGlmIChvcHRzLmFsbG93U2hhcmVkID09PSBmYWxzZSAmJiB0eXBlcy5pc1NoYXJlZEFycmF5QnVmZmVyKFYpKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgaGVhZGVyOiAnQXJyYXlCdWZmZXInLFxuICAgICAgbWVzc2FnZTogJ1NoYXJlZEFycmF5QnVmZmVyIGlzIG5vdCBhbGxvd2VkLidcbiAgICB9KVxuICB9XG5cbiAgLy8gMy4gSWYgdGhlIGNvbnZlcnNpb24gaXMgbm90IHRvIGFuIElETCB0eXBlIGFzc29jaWF0ZWRcbiAgLy8gICAgd2l0aCB0aGUgW0FsbG93UmVzaXphYmxlXSBleHRlbmRlZCBhdHRyaWJ1dGUsIGFuZFxuICAvLyAgICBJc1Jlc2l6YWJsZUFycmF5QnVmZmVyKFYpIGlzIHRydWUsIHRoZW4gdGhyb3cgYVxuICAvLyAgICBUeXBlRXJyb3IuXG4gIC8vIE5vdGU6IHJlc2l6YWJsZSBBcnJheUJ1ZmZlcnMgYXJlIGN1cnJlbnRseSBhIHByb3Bvc2FsLlxuXG4gIC8vIDQuIFJldHVybiB0aGUgSURMIEFycmF5QnVmZmVyIHZhbHVlIHRoYXQgaXMgYVxuICAvLyAgICByZWZlcmVuY2UgdG8gdGhlIHNhbWUgb2JqZWN0IGFzIFYuXG4gIHJldHVybiBWXG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLlR5cGVkQXJyYXkgPSBmdW5jdGlvbiAoViwgVCwgb3B0cyA9IHt9KSB7XG4gIC8vIDEuIExldCBUIGJlIHRoZSBJREwgdHlwZSBWIGlzIGJlaW5nIGNvbnZlcnRlZCB0by5cblxuICAvLyAyLiBJZiBUeXBlKFYpIGlzIG5vdCBPYmplY3QsIG9yIFYgZG9lcyBub3QgaGF2ZSBhXG4gIC8vICAgIFtbVHlwZWRBcnJheU5hbWVdXSBpbnRlcm5hbCBzbG90IHdpdGggYSB2YWx1ZVxuICAvLyAgICBlcXVhbCB0byBU4oCZcyBuYW1lLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICBpZiAoXG4gICAgd2ViaWRsLnV0aWwuVHlwZShWKSAhPT0gJ09iamVjdCcgfHxcbiAgICAhdHlwZXMuaXNUeXBlZEFycmF5KFYpIHx8XG4gICAgVi5jb25zdHJ1Y3Rvci5uYW1lICE9PSBULm5hbWVcbiAgKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5jb252ZXJzaW9uRmFpbGVkKHtcbiAgICAgIHByZWZpeDogYCR7VC5uYW1lfWAsXG4gICAgICBhcmd1bWVudDogYCR7Vn1gLFxuICAgICAgdHlwZXM6IFtULm5hbWVdXG4gICAgfSlcbiAgfVxuXG4gIC8vIDMuIElmIHRoZSBjb252ZXJzaW9uIGlzIG5vdCB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtBbGxvd1NoYXJlZF0gZXh0ZW5kZWQgYXR0cmlidXRlLCBhbmRcbiAgLy8gICAgSXNTaGFyZWRBcnJheUJ1ZmZlcihWLltbVmlld2VkQXJyYXlCdWZmZXJdXSkgaXNcbiAgLy8gICAgdHJ1ZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKG9wdHMuYWxsb3dTaGFyZWQgPT09IGZhbHNlICYmIHR5cGVzLmlzU2hhcmVkQXJyYXlCdWZmZXIoVi5idWZmZXIpKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgaGVhZGVyOiAnQXJyYXlCdWZmZXInLFxuICAgICAgbWVzc2FnZTogJ1NoYXJlZEFycmF5QnVmZmVyIGlzIG5vdCBhbGxvd2VkLidcbiAgICB9KVxuICB9XG5cbiAgLy8gNC4gSWYgdGhlIGNvbnZlcnNpb24gaXMgbm90IHRvIGFuIElETCB0eXBlIGFzc29jaWF0ZWRcbiAgLy8gICAgd2l0aCB0aGUgW0FsbG93UmVzaXphYmxlXSBleHRlbmRlZCBhdHRyaWJ1dGUsIGFuZFxuICAvLyAgICBJc1Jlc2l6YWJsZUFycmF5QnVmZmVyKFYuW1tWaWV3ZWRBcnJheUJ1ZmZlcl1dKSBpc1xuICAvLyAgICB0cnVlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAvLyBOb3RlOiByZXNpemFibGUgYXJyYXkgYnVmZmVycyBhcmUgY3VycmVudGx5IGEgcHJvcG9zYWxcblxuICAvLyA1LiBSZXR1cm4gdGhlIElETCB2YWx1ZSBvZiB0eXBlIFQgdGhhdCBpcyBhIHJlZmVyZW5jZVxuICAvLyAgICB0byB0aGUgc2FtZSBvYmplY3QgYXMgVi5cbiAgcmV0dXJuIFZcbn1cblxud2ViaWRsLmNvbnZlcnRlcnMuRGF0YVZpZXcgPSBmdW5jdGlvbiAoViwgb3B0cyA9IHt9KSB7XG4gIC8vIDEuIElmIFR5cGUoVikgaXMgbm90IE9iamVjdCwgb3IgViBkb2VzIG5vdCBoYXZlIGFcbiAgLy8gICAgW1tEYXRhVmlld11dIGludGVybmFsIHNsb3QsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIGlmICh3ZWJpZGwudXRpbC5UeXBlKFYpICE9PSAnT2JqZWN0JyB8fCAhdHlwZXMuaXNEYXRhVmlldyhWKSkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgIGhlYWRlcjogJ0RhdGFWaWV3JyxcbiAgICAgIG1lc3NhZ2U6ICdPYmplY3QgaXMgbm90IGEgRGF0YVZpZXcuJ1xuICAgIH0pXG4gIH1cblxuICAvLyAyLiBJZiB0aGUgY29udmVyc2lvbiBpcyBub3QgdG8gYW4gSURMIHR5cGUgYXNzb2NpYXRlZFxuICAvLyAgICB3aXRoIHRoZSBbQWxsb3dTaGFyZWRdIGV4dGVuZGVkIGF0dHJpYnV0ZSwgYW5kXG4gIC8vICAgIElzU2hhcmVkQXJyYXlCdWZmZXIoVi5bW1ZpZXdlZEFycmF5QnVmZmVyXV0pIGlzIHRydWUsXG4gIC8vICAgIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIGlmIChvcHRzLmFsbG93U2hhcmVkID09PSBmYWxzZSAmJiB0eXBlcy5pc1NoYXJlZEFycmF5QnVmZmVyKFYuYnVmZmVyKSkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgIGhlYWRlcjogJ0FycmF5QnVmZmVyJyxcbiAgICAgIG1lc3NhZ2U6ICdTaGFyZWRBcnJheUJ1ZmZlciBpcyBub3QgYWxsb3dlZC4nXG4gICAgfSlcbiAgfVxuXG4gIC8vIDMuIElmIHRoZSBjb252ZXJzaW9uIGlzIG5vdCB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtBbGxvd1Jlc2l6YWJsZV0gZXh0ZW5kZWQgYXR0cmlidXRlLCBhbmRcbiAgLy8gICAgSXNSZXNpemFibGVBcnJheUJ1ZmZlcihWLltbVmlld2VkQXJyYXlCdWZmZXJdXSkgaXNcbiAgLy8gICAgdHJ1ZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgLy8gTm90ZTogcmVzaXphYmxlIEFycmF5QnVmZmVycyBhcmUgY3VycmVudGx5IGEgcHJvcG9zYWxcblxuICAvLyA0LiBSZXR1cm4gdGhlIElETCBEYXRhVmlldyB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlXG4gIC8vICAgIHRvIHRoZSBzYW1lIG9iamVjdCBhcyBWLlxuICByZXR1cm4gVlxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI0J1ZmZlclNvdXJjZVxud2ViaWRsLmNvbnZlcnRlcnMuQnVmZmVyU291cmNlID0gZnVuY3Rpb24gKFYsIG9wdHMgPSB7fSkge1xuICBpZiAodHlwZXMuaXNBbnlBcnJheUJ1ZmZlcihWKSkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5BcnJheUJ1ZmZlcihWLCBvcHRzKVxuICB9XG5cbiAgaWYgKHR5cGVzLmlzVHlwZWRBcnJheShWKSkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5UeXBlZEFycmF5KFYsIFYuY29uc3RydWN0b3IpXG4gIH1cblxuICBpZiAodHlwZXMuaXNEYXRhVmlldyhWKSkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5EYXRhVmlldyhWLCBvcHRzKVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihgQ291bGQgbm90IGNvbnZlcnQgJHtWfSB0byBhIEJ1ZmZlclNvdXJjZS5gKVxufVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8Qnl0ZVN0cmluZz4nXSA9IHdlYmlkbC5zZXF1ZW5jZUNvbnZlcnRlcihcbiAgd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZ1xuKVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8c2VxdWVuY2U8Qnl0ZVN0cmluZz4+J10gPSB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxCeXRlU3RyaW5nPiddXG4pXG5cbndlYmlkbC5jb252ZXJ0ZXJzWydyZWNvcmQ8Qnl0ZVN0cmluZywgQnl0ZVN0cmluZz4nXSA9IHdlYmlkbC5yZWNvcmRDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcsXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmdcbilcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHdlYmlkbFxufVxuIiwKICAgICJjb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBhdG9iIH0gPSByZXF1aXJlKCdidWZmZXInKVxuY29uc3QgeyBpc29tb3JwaGljRGVjb2RlIH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuXG5jb25zdCBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKClcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jaHR0cC10b2tlbi1jb2RlLXBvaW50XG4gKi9cbmNvbnN0IEhUVFBfVE9LRU5fQ09ERVBPSU5UUyA9IC9eWyEjJCUmJyorLS5eX3x+QS1aYS16MC05XSskL1xuY29uc3QgSFRUUF9XSElURVNQQUNFX1JFR0VYID0gLyhcXHUwMDBBfFxcdTAwMER8XFx1MDAwOXxcXHUwMDIwKS8gLy8gZXNsaW50LWRpc2FibGUtbGluZVxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jaHR0cC1xdW90ZWQtc3RyaW5nLXRva2VuLWNvZGUtcG9pbnRcbiAqL1xuY29uc3QgSFRUUF9RVU9URURfU1RSSU5HX1RPS0VOUyA9IC9bXFx1MDAwOXxcXHUwMDIwLVxcdTAwN0V8XFx1MDA4MC1cXHUwMEZGXS8gLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZGF0YS11cmwtcHJvY2Vzc29yXG4vKiogQHBhcmFtIHtVUkx9IGRhdGFVUkwgKi9cbmZ1bmN0aW9uIGRhdGFVUkxQcm9jZXNzb3IgKGRhdGFVUkwpIHtcbiAgLy8gMS4gQXNzZXJ0OiBkYXRhVVJM4oCZcyBzY2hlbWUgaXMgXCJkYXRhXCIuXG4gIGFzc2VydChkYXRhVVJMLnByb3RvY29sID09PSAnZGF0YTonKVxuXG4gIC8vIDIuIExldCBpbnB1dCBiZSB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgdGhlIFVSTFxuICAvLyBzZXJpYWxpemVyIG9uIGRhdGFVUkwgd2l0aCBleGNsdWRlIGZyYWdtZW50XG4gIC8vIHNldCB0byB0cnVlLlxuICBsZXQgaW5wdXQgPSBVUkxTZXJpYWxpemVyKGRhdGFVUkwsIHRydWUpXG5cbiAgLy8gMy4gUmVtb3ZlIHRoZSBsZWFkaW5nIFwiZGF0YTpcIiBzdHJpbmcgZnJvbSBpbnB1dC5cbiAgaW5wdXQgPSBpbnB1dC5zbGljZSg1KVxuXG4gIC8vIDQuIExldCBwb3NpdGlvbiBwb2ludCBhdCB0aGUgc3RhcnQgb2YgaW5wdXQuXG4gIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogMCB9XG5cbiAgLy8gNS4gTGV0IG1pbWVUeXBlIGJlIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhXG4gIC8vIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzIHRoYXQgYXJlIG5vdCBlcXVhbFxuICAvLyB0byBVKzAwMkMgKCwpLCBnaXZlbiBwb3NpdGlvbi5cbiAgbGV0IG1pbWVUeXBlID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoXG4gICAgJywnLFxuICAgIGlucHV0LFxuICAgIHBvc2l0aW9uXG4gIClcblxuICAvLyA2LiBTdHJpcCBsZWFkaW5nIGFuZCB0cmFpbGluZyBBU0NJSSB3aGl0ZXNwYWNlXG4gIC8vIGZyb20gbWltZVR5cGUuXG4gIC8vIFVuZGljaSBpbXBsZW1lbnRhdGlvbiBub3RlOiB3ZSBuZWVkIHRvIHN0b3JlIHRoZVxuICAvLyBsZW5ndGggYmVjYXVzZSBpZiB0aGUgbWltZXR5cGUgaGFzIHNwYWNlcyByZW1vdmVkLFxuICAvLyB0aGUgd3JvbmcgYW1vdW50IHdpbGwgYmUgc2xpY2VkIGZyb20gdGhlIGlucHV0IGluXG4gIC8vIHN0ZXAgIzlcbiAgY29uc3QgbWltZVR5cGVMZW5ndGggPSBtaW1lVHlwZS5sZW5ndGhcbiAgbWltZVR5cGUgPSByZW1vdmVBU0NJSVdoaXRlc3BhY2UobWltZVR5cGUsIHRydWUsIHRydWUpXG5cbiAgLy8gNy4gSWYgcG9zaXRpb24gaXMgcGFzdCB0aGUgZW5kIG9mIGlucHV0LCB0aGVuXG4gIC8vIHJldHVybiBmYWlsdXJlXG4gIGlmIChwb3NpdGlvbi5wb3NpdGlvbiA+PSBpbnB1dC5sZW5ndGgpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICAvLyA4LiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuXG4gIHBvc2l0aW9uLnBvc2l0aW9uKytcblxuICAvLyA5LiBMZXQgZW5jb2RlZEJvZHkgYmUgdGhlIHJlbWFpbmRlciBvZiBpbnB1dC5cbiAgY29uc3QgZW5jb2RlZEJvZHkgPSBpbnB1dC5zbGljZShtaW1lVHlwZUxlbmd0aCArIDEpXG5cbiAgLy8gMTAuIExldCBib2R5IGJlIHRoZSBwZXJjZW50LWRlY29kaW5nIG9mIGVuY29kZWRCb2R5LlxuICBsZXQgYm9keSA9IHN0cmluZ1BlcmNlbnREZWNvZGUoZW5jb2RlZEJvZHkpXG5cbiAgLy8gMTEuIElmIG1pbWVUeXBlIGVuZHMgd2l0aCBVKzAwM0IgKDspLCBmb2xsb3dlZCBieVxuICAvLyB6ZXJvIG9yIG1vcmUgVSswMDIwIFNQQUNFLCBmb2xsb3dlZCBieSBhbiBBU0NJSVxuICAvLyBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvciBcImJhc2U2NFwiLCB0aGVuOlxuICBpZiAoLzsoXFx1MDAyMCl7MCx9YmFzZTY0JC9pLnRlc3QobWltZVR5cGUpKSB7XG4gICAgLy8gMS4gTGV0IHN0cmluZ0JvZHkgYmUgdGhlIGlzb21vcnBoaWMgZGVjb2RlIG9mIGJvZHkuXG4gICAgY29uc3Qgc3RyaW5nQm9keSA9IGlzb21vcnBoaWNEZWNvZGUoYm9keSlcblxuICAgIC8vIDIuIFNldCBib2R5IHRvIHRoZSBmb3JnaXZpbmctYmFzZTY0IGRlY29kZSBvZlxuICAgIC8vIHN0cmluZ0JvZHkuXG4gICAgYm9keSA9IGZvcmdpdmluZ0Jhc2U2NChzdHJpbmdCb2R5KVxuXG4gICAgLy8gMy4gSWYgYm9keSBpcyBmYWlsdXJlLCB0aGVuIHJldHVybiBmYWlsdXJlLlxuICAgIGlmIChib2R5ID09PSAnZmFpbHVyZScpIHtcbiAgICAgIHJldHVybiAnZmFpbHVyZSdcbiAgICB9XG5cbiAgICAvLyA0LiBSZW1vdmUgdGhlIGxhc3QgNiBjb2RlIHBvaW50cyBmcm9tIG1pbWVUeXBlLlxuICAgIG1pbWVUeXBlID0gbWltZVR5cGUuc2xpY2UoMCwgLTYpXG5cbiAgICAvLyA1LiBSZW1vdmUgdHJhaWxpbmcgVSswMDIwIFNQQUNFIGNvZGUgcG9pbnRzIGZyb20gbWltZVR5cGUsXG4gICAgLy8gaWYgYW55LlxuICAgIG1pbWVUeXBlID0gbWltZVR5cGUucmVwbGFjZSgvKFxcdTAwMjApKyQvLCAnJylcblxuICAgIC8vIDYuIFJlbW92ZSB0aGUgbGFzdCBVKzAwM0IgKDspIGNvZGUgcG9pbnQgZnJvbSBtaW1lVHlwZS5cbiAgICBtaW1lVHlwZSA9IG1pbWVUeXBlLnNsaWNlKDAsIC0xKVxuICB9XG5cbiAgLy8gMTIuIElmIG1pbWVUeXBlIHN0YXJ0cyB3aXRoIFUrMDAzQiAoOyksIHRoZW4gcHJlcGVuZFxuICAvLyBcInRleHQvcGxhaW5cIiB0byBtaW1lVHlwZS5cbiAgaWYgKG1pbWVUeXBlLnN0YXJ0c1dpdGgoJzsnKSkge1xuICAgIG1pbWVUeXBlID0gJ3RleHQvcGxhaW4nICsgbWltZVR5cGVcbiAgfVxuXG4gIC8vIDEzLiBMZXQgbWltZVR5cGVSZWNvcmQgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nXG4gIC8vIG1pbWVUeXBlLlxuICBsZXQgbWltZVR5cGVSZWNvcmQgPSBwYXJzZU1JTUVUeXBlKG1pbWVUeXBlKVxuXG4gIC8vIDE0LiBJZiBtaW1lVHlwZVJlY29yZCBpcyBmYWlsdXJlLCB0aGVuIHNldFxuICAvLyBtaW1lVHlwZVJlY29yZCB0byB0ZXh0L3BsYWluO2NoYXJzZXQ9VVMtQVNDSUkuXG4gIGlmIChtaW1lVHlwZVJlY29yZCA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgbWltZVR5cGVSZWNvcmQgPSBwYXJzZU1JTUVUeXBlKCd0ZXh0L3BsYWluO2NoYXJzZXQ9VVMtQVNDSUknKVxuICB9XG5cbiAgLy8gMTUuIFJldHVybiBhIG5ldyBkYXRhOiBVUkwgc3RydWN0IHdob3NlIE1JTUVcbiAgLy8gdHlwZSBpcyBtaW1lVHlwZVJlY29yZCBhbmQgYm9keSBpcyBib2R5LlxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZGF0YS11cmwtc3RydWN0XG4gIHJldHVybiB7IG1pbWVUeXBlOiBtaW1lVHlwZVJlY29yZCwgYm9keSB9XG59XG5cbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC11cmwtc2VyaWFsaXplclxuLyoqXG4gKiBAcGFyYW0ge1VSTH0gdXJsXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGV4Y2x1ZGVGcmFnbWVudFxuICovXG5mdW5jdGlvbiBVUkxTZXJpYWxpemVyICh1cmwsIGV4Y2x1ZGVGcmFnbWVudCA9IGZhbHNlKSB7XG4gIGlmICghZXhjbHVkZUZyYWdtZW50KSB7XG4gICAgcmV0dXJuIHVybC5ocmVmXG4gIH1cblxuICBjb25zdCBocmVmID0gdXJsLmhyZWZcbiAgY29uc3QgaGFzaExlbmd0aCA9IHVybC5oYXNoLmxlbmd0aFxuXG4gIHJldHVybiBoYXNoTGVuZ3RoID09PSAwID8gaHJlZiA6IGhyZWYuc3Vic3RyaW5nKDAsIGhyZWYubGVuZ3RoIC0gaGFzaExlbmd0aClcbn1cblxuLy8gaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2NvbGxlY3QtYS1zZXF1ZW5jZS1vZi1jb2RlLXBvaW50c1xuLyoqXG4gKiBAcGFyYW0geyhjaGFyOiBzdHJpbmcpID0+IGJvb2xlYW59IGNvbmRpdGlvblxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0XG4gKiBAcGFyYW0ge3sgcG9zaXRpb246IG51bWJlciB9fSBwb3NpdGlvblxuICovXG5mdW5jdGlvbiBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzIChjb25kaXRpb24sIGlucHV0LCBwb3NpdGlvbikge1xuICAvLyAxLiBMZXQgcmVzdWx0IGJlIHRoZSBlbXB0eSBzdHJpbmcuXG4gIGxldCByZXN1bHQgPSAnJ1xuXG4gIC8vIDIuIFdoaWxlIHBvc2l0aW9uIGRvZXNu4oCZdCBwb2ludCBwYXN0IHRoZSBlbmQgb2YgaW5wdXQgYW5kIHRoZVxuICAvLyBjb2RlIHBvaW50IGF0IHBvc2l0aW9uIHdpdGhpbiBpbnB1dCBtZWV0cyB0aGUgY29uZGl0aW9uIGNvbmRpdGlvbjpcbiAgd2hpbGUgKHBvc2l0aW9uLnBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoICYmIGNvbmRpdGlvbihpbnB1dFtwb3NpdGlvbi5wb3NpdGlvbl0pKSB7XG4gICAgLy8gMS4gQXBwZW5kIHRoYXQgY29kZSBwb2ludCB0byB0aGUgZW5kIG9mIHJlc3VsdC5cbiAgICByZXN1bHQgKz0gaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dXG5cbiAgICAvLyAyLiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuXG4gICAgcG9zaXRpb24ucG9zaXRpb24rK1xuICB9XG5cbiAgLy8gMy4gUmV0dXJuIHJlc3VsdC5cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG4vKipcbiAqIEEgZmFzdGVyIGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMgdGhhdCBvbmx5IHdvcmtzIHdoZW4gY29tcGFyaW5nIGEgc2luZ2xlIGNoYXJhY3Rlci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjaGFyXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRcbiAqIEBwYXJhbSB7eyBwb3NpdGlvbjogbnVtYmVyIH19IHBvc2l0aW9uXG4gKi9cbmZ1bmN0aW9uIGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0IChjaGFyLCBpbnB1dCwgcG9zaXRpb24pIHtcbiAgY29uc3QgaWR4ID0gaW5wdXQuaW5kZXhPZihjaGFyLCBwb3NpdGlvbi5wb3NpdGlvbilcbiAgY29uc3Qgc3RhcnQgPSBwb3NpdGlvbi5wb3NpdGlvblxuXG4gIGlmIChpZHggPT09IC0xKSB7XG4gICAgcG9zaXRpb24ucG9zaXRpb24gPSBpbnB1dC5sZW5ndGhcbiAgICByZXR1cm4gaW5wdXQuc2xpY2Uoc3RhcnQpXG4gIH1cblxuICBwb3NpdGlvbi5wb3NpdGlvbiA9IGlkeFxuICByZXR1cm4gaW5wdXQuc2xpY2Uoc3RhcnQsIHBvc2l0aW9uLnBvc2l0aW9uKVxufVxuXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3N0cmluZy1wZXJjZW50LWRlY29kZVxuLyoqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dCAqL1xuZnVuY3Rpb24gc3RyaW5nUGVyY2VudERlY29kZSAoaW5wdXQpIHtcbiAgLy8gMS4gTGV0IGJ5dGVzIGJlIHRoZSBVVEYtOCBlbmNvZGluZyBvZiBpbnB1dC5cbiAgY29uc3QgYnl0ZXMgPSBlbmNvZGVyLmVuY29kZShpbnB1dClcblxuICAvLyAyLiBSZXR1cm4gdGhlIHBlcmNlbnQtZGVjb2Rpbmcgb2YgYnl0ZXMuXG4gIHJldHVybiBwZXJjZW50RGVjb2RlKGJ5dGVzKVxufVxuXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3BlcmNlbnQtZGVjb2RlXG4vKiogQHBhcmFtIHtVaW50OEFycmF5fSBpbnB1dCAqL1xuZnVuY3Rpb24gcGVyY2VudERlY29kZSAoaW5wdXQpIHtcbiAgLy8gMS4gTGV0IG91dHB1dCBiZSBhbiBlbXB0eSBieXRlIHNlcXVlbmNlLlxuICAvKiogQHR5cGUge251bWJlcltdfSAqL1xuICBjb25zdCBvdXRwdXQgPSBbXVxuXG4gIC8vIDIuIEZvciBlYWNoIGJ5dGUgYnl0ZSBpbiBpbnB1dDpcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGJ5dGUgPSBpbnB1dFtpXVxuXG4gICAgLy8gMS4gSWYgYnl0ZSBpcyBub3QgMHgyNSAoJSksIHRoZW4gYXBwZW5kIGJ5dGUgdG8gb3V0cHV0LlxuICAgIGlmIChieXRlICE9PSAweDI1KSB7XG4gICAgICBvdXRwdXQucHVzaChieXRlKVxuXG4gICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiBieXRlIGlzIDB4MjUgKCUpIGFuZCB0aGUgbmV4dCB0d28gYnl0ZXNcbiAgICAvLyBhZnRlciBieXRlIGluIGlucHV0IGFyZSBub3QgaW4gdGhlIHJhbmdlc1xuICAgIC8vIDB4MzAgKDApIHRvIDB4MzkgKDkpLCAweDQxIChBKSB0byAweDQ2IChGKSxcbiAgICAvLyBhbmQgMHg2MSAoYSkgdG8gMHg2NiAoZiksIGFsbCBpbmNsdXNpdmUsIGFwcGVuZCBieXRlXG4gICAgLy8gdG8gb3V0cHV0LlxuICAgIH0gZWxzZSBpZiAoXG4gICAgICBieXRlID09PSAweDI1ICYmXG4gICAgICAhL15bMC05QS1GYS1mXXsyfSQvaS50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoaW5wdXRbaSArIDFdLCBpbnB1dFtpICsgMl0pKVxuICAgICkge1xuICAgICAgb3V0cHV0LnB1c2goMHgyNSlcblxuICAgIC8vIDMuIE90aGVyd2lzZTpcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gMS4gTGV0IGJ5dGVQb2ludCBiZSB0aGUgdHdvIGJ5dGVzIGFmdGVyIGJ5dGUgaW4gaW5wdXQsXG4gICAgICAvLyBkZWNvZGVkLCBhbmQgdGhlbiBpbnRlcnByZXRlZCBhcyBoZXhhZGVjaW1hbCBudW1iZXIuXG4gICAgICBjb25zdCBuZXh0VHdvQnl0ZXMgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGlucHV0W2kgKyAxXSwgaW5wdXRbaSArIDJdKVxuICAgICAgY29uc3QgYnl0ZVBvaW50ID0gTnVtYmVyLnBhcnNlSW50KG5leHRUd29CeXRlcywgMTYpXG5cbiAgICAgIC8vIDIuIEFwcGVuZCBhIGJ5dGUgd2hvc2UgdmFsdWUgaXMgYnl0ZVBvaW50IHRvIG91dHB1dC5cbiAgICAgIG91dHB1dC5wdXNoKGJ5dGVQb2ludClcblxuICAgICAgLy8gMy4gU2tpcCB0aGUgbmV4dCB0d28gYnl0ZXMgaW4gaW5wdXQuXG4gICAgICBpICs9IDJcbiAgICB9XG4gIH1cblxuICAvLyAzLiBSZXR1cm4gb3V0cHV0LlxuICByZXR1cm4gVWludDhBcnJheS5mcm9tKG91dHB1dClcbn1cblxuLy8gaHR0cHM6Ly9taW1lc25pZmYuc3BlYy53aGF0d2cub3JnLyNwYXJzZS1hLW1pbWUtdHlwZVxuLyoqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dCAqL1xuZnVuY3Rpb24gcGFyc2VNSU1FVHlwZSAoaW5wdXQpIHtcbiAgLy8gMS4gUmVtb3ZlIGFueSBsZWFkaW5nIGFuZCB0cmFpbGluZyBIVFRQIHdoaXRlc3BhY2VcbiAgLy8gZnJvbSBpbnB1dC5cbiAgaW5wdXQgPSByZW1vdmVIVFRQV2hpdGVzcGFjZShpbnB1dCwgdHJ1ZSwgdHJ1ZSlcblxuICAvLyAyLiBMZXQgcG9zaXRpb24gYmUgYSBwb3NpdGlvbiB2YXJpYWJsZSBmb3IgaW5wdXQsXG4gIC8vIGluaXRpYWxseSBwb2ludGluZyBhdCB0aGUgc3RhcnQgb2YgaW5wdXQuXG4gIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogMCB9XG5cbiAgLy8gMy4gTGV0IHR5cGUgYmUgdGhlIHJlc3VsdCBvZiBjb2xsZWN0aW5nIGEgc2VxdWVuY2VcbiAgLy8gb2YgY29kZSBwb2ludHMgdGhhdCBhcmUgbm90IFUrMDAyRiAoLykgZnJvbVxuICAvLyBpbnB1dCwgZ2l2ZW4gcG9zaXRpb24uXG4gIGNvbnN0IHR5cGUgPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdChcbiAgICAnLycsXG4gICAgaW5wdXQsXG4gICAgcG9zaXRpb25cbiAgKVxuXG4gIC8vIDQuIElmIHR5cGUgaXMgdGhlIGVtcHR5IHN0cmluZyBvciBkb2VzIG5vdCBzb2xlbHlcbiAgLy8gY29udGFpbiBIVFRQIHRva2VuIGNvZGUgcG9pbnRzLCB0aGVuIHJldHVybiBmYWlsdXJlLlxuICAvLyBodHRwczovL21pbWVzbmlmZi5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtdG9rZW4tY29kZS1wb2ludFxuICBpZiAodHlwZS5sZW5ndGggPT09IDAgfHwgIUhUVFBfVE9LRU5fQ09ERVBPSU5UUy50ZXN0KHR5cGUpKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgLy8gNS4gSWYgcG9zaXRpb24gaXMgcGFzdCB0aGUgZW5kIG9mIGlucHV0LCB0aGVuIHJldHVyblxuICAvLyBmYWlsdXJlXG4gIGlmIChwb3NpdGlvbi5wb3NpdGlvbiA+IGlucHV0Lmxlbmd0aCkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIC8vIDYuIEFkdmFuY2UgcG9zaXRpb24gYnkgMS4gKFRoaXMgc2tpcHMgcGFzdCBVKzAwMkYgKC8pLilcbiAgcG9zaXRpb24ucG9zaXRpb24rK1xuXG4gIC8vIDcuIExldCBzdWJ0eXBlIGJlIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhIHNlcXVlbmNlIG9mXG4gIC8vIGNvZGUgcG9pbnRzIHRoYXQgYXJlIG5vdCBVKzAwM0IgKDspIGZyb20gaW5wdXQsIGdpdmVuXG4gIC8vIHBvc2l0aW9uLlxuICBsZXQgc3VidHlwZSA9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0KFxuICAgICc7JyxcbiAgICBpbnB1dCxcbiAgICBwb3NpdGlvblxuICApXG5cbiAgLy8gOC4gUmVtb3ZlIGFueSB0cmFpbGluZyBIVFRQIHdoaXRlc3BhY2UgZnJvbSBzdWJ0eXBlLlxuICBzdWJ0eXBlID0gcmVtb3ZlSFRUUFdoaXRlc3BhY2Uoc3VidHlwZSwgZmFsc2UsIHRydWUpXG5cbiAgLy8gOS4gSWYgc3VidHlwZSBpcyB0aGUgZW1wdHkgc3RyaW5nIG9yIGRvZXMgbm90IHNvbGVseVxuICAvLyBjb250YWluIEhUVFAgdG9rZW4gY29kZSBwb2ludHMsIHRoZW4gcmV0dXJuIGZhaWx1cmUuXG4gIGlmIChzdWJ0eXBlLmxlbmd0aCA9PT0gMCB8fCAhSFRUUF9UT0tFTl9DT0RFUE9JTlRTLnRlc3Qoc3VidHlwZSkpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICBjb25zdCB0eXBlTG93ZXJjYXNlID0gdHlwZS50b0xvd2VyQ2FzZSgpXG4gIGNvbnN0IHN1YnR5cGVMb3dlcmNhc2UgPSBzdWJ0eXBlLnRvTG93ZXJDYXNlKClcblxuICAvLyAxMC4gTGV0IG1pbWVUeXBlIGJlIGEgbmV3IE1JTUUgdHlwZSByZWNvcmQgd2hvc2UgdHlwZVxuICAvLyBpcyB0eXBlLCBpbiBBU0NJSSBsb3dlcmNhc2UsIGFuZCBzdWJ0eXBlIGlzIHN1YnR5cGUsXG4gIC8vIGluIEFTQ0lJIGxvd2VyY2FzZS5cbiAgLy8gaHR0cHM6Ly9taW1lc25pZmYuc3BlYy53aGF0d2cub3JnLyNtaW1lLXR5cGVcbiAgY29uc3QgbWltZVR5cGUgPSB7XG4gICAgdHlwZTogdHlwZUxvd2VyY2FzZSxcbiAgICBzdWJ0eXBlOiBzdWJ0eXBlTG93ZXJjYXNlLFxuICAgIC8qKiBAdHlwZSB7TWFwPHN0cmluZywgc3RyaW5nPn0gKi9cbiAgICBwYXJhbWV0ZXJzOiBuZXcgTWFwKCksXG4gICAgLy8gaHR0cHM6Ly9taW1lc25pZmYuc3BlYy53aGF0d2cub3JnLyNtaW1lLXR5cGUtZXNzZW5jZVxuICAgIGVzc2VuY2U6IGAke3R5cGVMb3dlcmNhc2V9LyR7c3VidHlwZUxvd2VyY2FzZX1gXG4gIH1cblxuICAvLyAxMS4gV2hpbGUgcG9zaXRpb24gaXMgbm90IHBhc3QgdGhlIGVuZCBvZiBpbnB1dDpcbiAgd2hpbGUgKHBvc2l0aW9uLnBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgLy8gMS4gQWR2YW5jZSBwb3NpdGlvbiBieSAxLiAoVGhpcyBza2lwcyBwYXN0IFUrMDAzQiAoOykuKVxuICAgIHBvc2l0aW9uLnBvc2l0aW9uKytcblxuICAgIC8vIDIuIENvbGxlY3QgYSBzZXF1ZW5jZSBvZiBjb2RlIHBvaW50cyB0aGF0IGFyZSBIVFRQXG4gICAgLy8gd2hpdGVzcGFjZSBmcm9tIGlucHV0IGdpdmVuIHBvc2l0aW9uLlxuICAgIGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMoXG4gICAgICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC13aGl0ZXNwYWNlXG4gICAgICBjaGFyID0+IEhUVFBfV0hJVEVTUEFDRV9SRUdFWC50ZXN0KGNoYXIpLFxuICAgICAgaW5wdXQsXG4gICAgICBwb3NpdGlvblxuICAgIClcblxuICAgIC8vIDMuIExldCBwYXJhbWV0ZXJOYW1lIGJlIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhXG4gICAgLy8gc2VxdWVuY2Ugb2YgY29kZSBwb2ludHMgdGhhdCBhcmUgbm90IFUrMDAzQiAoOylcbiAgICAvLyBvciBVKzAwM0QgKD0pIGZyb20gaW5wdXQsIGdpdmVuIHBvc2l0aW9uLlxuICAgIGxldCBwYXJhbWV0ZXJOYW1lID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50cyhcbiAgICAgIChjaGFyKSA9PiBjaGFyICE9PSAnOycgJiYgY2hhciAhPT0gJz0nLFxuICAgICAgaW5wdXQsXG4gICAgICBwb3NpdGlvblxuICAgIClcblxuICAgIC8vIDQuIFNldCBwYXJhbWV0ZXJOYW1lIHRvIHBhcmFtZXRlck5hbWUsIGluIEFTQ0lJXG4gICAgLy8gbG93ZXJjYXNlLlxuICAgIHBhcmFtZXRlck5hbWUgPSBwYXJhbWV0ZXJOYW1lLnRvTG93ZXJDYXNlKClcblxuICAgIC8vIDUuIElmIHBvc2l0aW9uIGlzIG5vdCBwYXN0IHRoZSBlbmQgb2YgaW5wdXQsIHRoZW46XG4gICAgaWYgKHBvc2l0aW9uLnBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAvLyAxLiBJZiB0aGUgY29kZSBwb2ludCBhdCBwb3NpdGlvbiB3aXRoaW4gaW5wdXQgaXNcbiAgICAgIC8vIFUrMDAzQiAoOyksIHRoZW4gY29udGludWUuXG4gICAgICBpZiAoaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dID09PSAnOycpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gMi4gQWR2YW5jZSBwb3NpdGlvbiBieSAxLiAoVGhpcyBza2lwcyBwYXN0IFUrMDAzRCAoPSkuKVxuICAgICAgcG9zaXRpb24ucG9zaXRpb24rK1xuICAgIH1cblxuICAgIC8vIDYuIElmIHBvc2l0aW9uIGlzIHBhc3QgdGhlIGVuZCBvZiBpbnB1dCwgdGhlbiBicmVhay5cbiAgICBpZiAocG9zaXRpb24ucG9zaXRpb24gPiBpbnB1dC5sZW5ndGgpIHtcbiAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgLy8gNy4gTGV0IHBhcmFtZXRlclZhbHVlIGJlIG51bGwuXG4gICAgbGV0IHBhcmFtZXRlclZhbHVlID0gbnVsbFxuXG4gICAgLy8gOC4gSWYgdGhlIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluIGlucHV0IGlzXG4gICAgLy8gVSswMDIyIChcIiksIHRoZW46XG4gICAgaWYgKGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXSA9PT0gJ1wiJykge1xuICAgICAgLy8gMS4gU2V0IHBhcmFtZXRlclZhbHVlIHRvIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZ1xuICAgICAgLy8gYW4gSFRUUCBxdW90ZWQgc3RyaW5nIGZyb20gaW5wdXQsIGdpdmVuIHBvc2l0aW9uXG4gICAgICAvLyBhbmQgdGhlIGV4dHJhY3QtdmFsdWUgZmxhZy5cbiAgICAgIHBhcmFtZXRlclZhbHVlID0gY29sbGVjdEFuSFRUUFF1b3RlZFN0cmluZyhpbnB1dCwgcG9zaXRpb24sIHRydWUpXG5cbiAgICAgIC8vIDIuIENvbGxlY3QgYSBzZXF1ZW5jZSBvZiBjb2RlIHBvaW50cyB0aGF0IGFyZSBub3RcbiAgICAgIC8vIFUrMDAzQiAoOykgZnJvbSBpbnB1dCwgZ2l2ZW4gcG9zaXRpb24uXG4gICAgICBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdChcbiAgICAgICAgJzsnLFxuICAgICAgICBpbnB1dCxcbiAgICAgICAgcG9zaXRpb25cbiAgICAgIClcblxuICAgIC8vIDkuIE90aGVyd2lzZTpcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gMS4gU2V0IHBhcmFtZXRlclZhbHVlIHRvIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZ1xuICAgICAgLy8gYSBzZXF1ZW5jZSBvZiBjb2RlIHBvaW50cyB0aGF0IGFyZSBub3QgVSswMDNCICg7KVxuICAgICAgLy8gZnJvbSBpbnB1dCwgZ2l2ZW4gcG9zaXRpb24uXG4gICAgICBwYXJhbWV0ZXJWYWx1ZSA9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0KFxuICAgICAgICAnOycsXG4gICAgICAgIGlucHV0LFxuICAgICAgICBwb3NpdGlvblxuICAgICAgKVxuXG4gICAgICAvLyAyLiBSZW1vdmUgYW55IHRyYWlsaW5nIEhUVFAgd2hpdGVzcGFjZSBmcm9tIHBhcmFtZXRlclZhbHVlLlxuICAgICAgcGFyYW1ldGVyVmFsdWUgPSByZW1vdmVIVFRQV2hpdGVzcGFjZShwYXJhbWV0ZXJWYWx1ZSwgZmFsc2UsIHRydWUpXG5cbiAgICAgIC8vIDMuIElmIHBhcmFtZXRlclZhbHVlIGlzIHRoZSBlbXB0eSBzdHJpbmcsIHRoZW4gY29udGludWUuXG4gICAgICBpZiAocGFyYW1ldGVyVmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gMTAuIElmIGFsbCBvZiB0aGUgZm9sbG93aW5nIGFyZSB0cnVlXG4gICAgLy8gLSBwYXJhbWV0ZXJOYW1lIGlzIG5vdCB0aGUgZW1wdHkgc3RyaW5nXG4gICAgLy8gLSBwYXJhbWV0ZXJOYW1lIHNvbGVseSBjb250YWlucyBIVFRQIHRva2VuIGNvZGUgcG9pbnRzXG4gICAgLy8gLSBwYXJhbWV0ZXJWYWx1ZSBzb2xlbHkgY29udGFpbnMgSFRUUCBxdW90ZWQtc3RyaW5nIHRva2VuIGNvZGUgcG9pbnRzXG4gICAgLy8gLSBtaW1lVHlwZeKAmXMgcGFyYW1ldGVyc1twYXJhbWV0ZXJOYW1lXSBkb2VzIG5vdCBleGlzdFxuICAgIC8vIHRoZW4gc2V0IG1pbWVUeXBl4oCZcyBwYXJhbWV0ZXJzW3BhcmFtZXRlck5hbWVdIHRvIHBhcmFtZXRlclZhbHVlLlxuICAgIGlmIChcbiAgICAgIHBhcmFtZXRlck5hbWUubGVuZ3RoICE9PSAwICYmXG4gICAgICBIVFRQX1RPS0VOX0NPREVQT0lOVFMudGVzdChwYXJhbWV0ZXJOYW1lKSAmJlxuICAgICAgKHBhcmFtZXRlclZhbHVlLmxlbmd0aCA9PT0gMCB8fCBIVFRQX1FVT1RFRF9TVFJJTkdfVE9LRU5TLnRlc3QocGFyYW1ldGVyVmFsdWUpKSAmJlxuICAgICAgIW1pbWVUeXBlLnBhcmFtZXRlcnMuaGFzKHBhcmFtZXRlck5hbWUpXG4gICAgKSB7XG4gICAgICBtaW1lVHlwZS5wYXJhbWV0ZXJzLnNldChwYXJhbWV0ZXJOYW1lLCBwYXJhbWV0ZXJWYWx1ZSlcbiAgICB9XG4gIH1cblxuICAvLyAxMi4gUmV0dXJuIG1pbWVUeXBlLlxuICByZXR1cm4gbWltZVR5cGVcbn1cblxuLy8gaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2ZvcmdpdmluZy1iYXNlNjQtZGVjb2RlXG4vKiogQHBhcmFtIHtzdHJpbmd9IGRhdGEgKi9cbmZ1bmN0aW9uIGZvcmdpdmluZ0Jhc2U2NCAoZGF0YSkge1xuICAvLyAxLiBSZW1vdmUgYWxsIEFTQ0lJIHdoaXRlc3BhY2UgZnJvbSBkYXRhLlxuICBkYXRhID0gZGF0YS5yZXBsYWNlKC9bXFx1MDAwOVxcdTAwMEFcXHUwMDBDXFx1MDAwRFxcdTAwMjBdL2csICcnKSAgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gIC8vIDIuIElmIGRhdGHigJlzIGNvZGUgcG9pbnQgbGVuZ3RoIGRpdmlkZXMgYnkgNCBsZWF2aW5nXG4gIC8vIG5vIHJlbWFpbmRlciwgdGhlbjpcbiAgaWYgKGRhdGEubGVuZ3RoICUgNCA9PT0gMCkge1xuICAgIC8vIDEuIElmIGRhdGEgZW5kcyB3aXRoIG9uZSBvciB0d28gVSswMDNEICg9KSBjb2RlIHBvaW50cyxcbiAgICAvLyB0aGVuIHJlbW92ZSB0aGVtIGZyb20gZGF0YS5cbiAgICBkYXRhID0gZGF0YS5yZXBsYWNlKC89Pz0kLywgJycpXG4gIH1cblxuICAvLyAzLiBJZiBkYXRh4oCZcyBjb2RlIHBvaW50IGxlbmd0aCBkaXZpZGVzIGJ5IDQgbGVhdmluZ1xuICAvLyBhIHJlbWFpbmRlciBvZiAxLCB0aGVuIHJldHVybiBmYWlsdXJlLlxuICBpZiAoZGF0YS5sZW5ndGggJSA0ID09PSAxKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgLy8gNC4gSWYgZGF0YSBjb250YWlucyBhIGNvZGUgcG9pbnQgdGhhdCBpcyBub3Qgb25lIG9mXG4gIC8vICBVKzAwMkIgKCspXG4gIC8vICBVKzAwMkYgKC8pXG4gIC8vICBBU0NJSSBhbHBoYW51bWVyaWNcbiAgLy8gdGhlbiByZXR1cm4gZmFpbHVyZS5cbiAgaWYgKC9bXisvMC05QS1aYS16XS8udGVzdChkYXRhKSkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIGNvbnN0IGJpbmFyeSA9IGF0b2IoZGF0YSlcbiAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheShiaW5hcnkubGVuZ3RoKVxuXG4gIGZvciAobGV0IGJ5dGUgPSAwOyBieXRlIDwgYmluYXJ5Lmxlbmd0aDsgYnl0ZSsrKSB7XG4gICAgYnl0ZXNbYnl0ZV0gPSBiaW5hcnkuY2hhckNvZGVBdChieXRlKVxuICB9XG5cbiAgcmV0dXJuIGJ5dGVzXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb2xsZWN0LWFuLWh0dHAtcXVvdGVkLXN0cmluZ1xuLy8gdGVzdHM6IGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNleGFtcGxlLWh0dHAtcXVvdGVkLXN0cmluZ1xuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRcbiAqIEBwYXJhbSB7eyBwb3NpdGlvbjogbnVtYmVyIH19IHBvc2l0aW9uXG4gKiBAcGFyYW0ge2Jvb2xlYW4/fSBleHRyYWN0VmFsdWVcbiAqL1xuZnVuY3Rpb24gY29sbGVjdEFuSFRUUFF1b3RlZFN0cmluZyAoaW5wdXQsIHBvc2l0aW9uLCBleHRyYWN0VmFsdWUpIHtcbiAgLy8gMS4gTGV0IHBvc2l0aW9uU3RhcnQgYmUgcG9zaXRpb24uXG4gIGNvbnN0IHBvc2l0aW9uU3RhcnQgPSBwb3NpdGlvbi5wb3NpdGlvblxuXG4gIC8vIDIuIExldCB2YWx1ZSBiZSB0aGUgZW1wdHkgc3RyaW5nLlxuICBsZXQgdmFsdWUgPSAnJ1xuXG4gIC8vIDMuIEFzc2VydDogdGhlIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluIGlucHV0XG4gIC8vIGlzIFUrMDAyMiAoXCIpLlxuICBhc3NlcnQoaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dID09PSAnXCInKVxuXG4gIC8vIDQuIEFkdmFuY2UgcG9zaXRpb24gYnkgMS5cbiAgcG9zaXRpb24ucG9zaXRpb24rK1xuXG4gIC8vIDUuIFdoaWxlIHRydWU6XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgLy8gMS4gQXBwZW5kIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzXG4gICAgLy8gdGhhdCBhcmUgbm90IFUrMDAyMiAoXCIpIG9yIFUrMDA1QyAoXFwpIGZyb20gaW5wdXQsIGdpdmVuXG4gICAgLy8gcG9zaXRpb24sIHRvIHZhbHVlLlxuICAgIHZhbHVlICs9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMoXG4gICAgICAoY2hhcikgPT4gY2hhciAhPT0gJ1wiJyAmJiBjaGFyICE9PSAnXFxcXCcsXG4gICAgICBpbnB1dCxcbiAgICAgIHBvc2l0aW9uXG4gICAgKVxuXG4gICAgLy8gMi4gSWYgcG9zaXRpb24gaXMgcGFzdCB0aGUgZW5kIG9mIGlucHV0LCB0aGVuIGJyZWFrLlxuICAgIGlmIChwb3NpdGlvbi5wb3NpdGlvbiA+PSBpbnB1dC5sZW5ndGgpIHtcbiAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgLy8gMy4gTGV0IHF1b3RlT3JCYWNrc2xhc2ggYmUgdGhlIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluXG4gICAgLy8gaW5wdXQuXG4gICAgY29uc3QgcXVvdGVPckJhY2tzbGFzaCA9IGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXVxuXG4gICAgLy8gNC4gQWR2YW5jZSBwb3NpdGlvbiBieSAxLlxuICAgIHBvc2l0aW9uLnBvc2l0aW9uKytcblxuICAgIC8vIDUuIElmIHF1b3RlT3JCYWNrc2xhc2ggaXMgVSswMDVDIChcXCksIHRoZW46XG4gICAgaWYgKHF1b3RlT3JCYWNrc2xhc2ggPT09ICdcXFxcJykge1xuICAgICAgLy8gMS4gSWYgcG9zaXRpb24gaXMgcGFzdCB0aGUgZW5kIG9mIGlucHV0LCB0aGVuIGFwcGVuZFxuICAgICAgLy8gVSswMDVDIChcXCkgdG8gdmFsdWUgYW5kIGJyZWFrLlxuICAgICAgaWYgKHBvc2l0aW9uLnBvc2l0aW9uID49IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICB2YWx1ZSArPSAnXFxcXCdcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgLy8gMi4gQXBwZW5kIHRoZSBjb2RlIHBvaW50IGF0IHBvc2l0aW9uIHdpdGhpbiBpbnB1dCB0byB2YWx1ZS5cbiAgICAgIHZhbHVlICs9IGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXVxuXG4gICAgICAvLyAzLiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuXG4gICAgICBwb3NpdGlvbi5wb3NpdGlvbisrXG5cbiAgICAvLyA2LiBPdGhlcndpc2U6XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIDEuIEFzc2VydDogcXVvdGVPckJhY2tzbGFzaCBpcyBVKzAwMjIgKFwiKS5cbiAgICAgIGFzc2VydChxdW90ZU9yQmFja3NsYXNoID09PSAnXCInKVxuXG4gICAgICAvLyAyLiBCcmVhay5cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgLy8gNi4gSWYgdGhlIGV4dHJhY3QtdmFsdWUgZmxhZyBpcyBzZXQsIHRoZW4gcmV0dXJuIHZhbHVlLlxuICBpZiAoZXh0cmFjdFZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cblxuICAvLyA3LiBSZXR1cm4gdGhlIGNvZGUgcG9pbnRzIGZyb20gcG9zaXRpb25TdGFydCB0byBwb3NpdGlvbixcbiAgLy8gaW5jbHVzaXZlLCB3aXRoaW4gaW5wdXQuXG4gIHJldHVybiBpbnB1dC5zbGljZShwb3NpdGlvblN0YXJ0LCBwb3NpdGlvbi5wb3NpdGlvbilcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jc2VyaWFsaXplLWEtbWltZS10eXBlXG4gKi9cbmZ1bmN0aW9uIHNlcmlhbGl6ZUFNaW1lVHlwZSAobWltZVR5cGUpIHtcbiAgYXNzZXJ0KG1pbWVUeXBlICE9PSAnZmFpbHVyZScpXG4gIGNvbnN0IHsgcGFyYW1ldGVycywgZXNzZW5jZSB9ID0gbWltZVR5cGVcblxuICAvLyAxLiBMZXQgc2VyaWFsaXphdGlvbiBiZSB0aGUgY29uY2F0ZW5hdGlvbiBvZiBtaW1lVHlwZeKAmXNcbiAgLy8gICAgdHlwZSwgVSswMDJGICgvKSwgYW5kIG1pbWVUeXBl4oCZcyBzdWJ0eXBlLlxuICBsZXQgc2VyaWFsaXphdGlvbiA9IGVzc2VuY2VcblxuICAvLyAyLiBGb3IgZWFjaCBuYW1lIOKGkiB2YWx1ZSBvZiBtaW1lVHlwZeKAmXMgcGFyYW1ldGVyczpcbiAgZm9yIChsZXQgW25hbWUsIHZhbHVlXSBvZiBwYXJhbWV0ZXJzLmVudHJpZXMoKSkge1xuICAgIC8vIDEuIEFwcGVuZCBVKzAwM0IgKDspIHRvIHNlcmlhbGl6YXRpb24uXG4gICAgc2VyaWFsaXphdGlvbiArPSAnOydcblxuICAgIC8vIDIuIEFwcGVuZCBuYW1lIHRvIHNlcmlhbGl6YXRpb24uXG4gICAgc2VyaWFsaXphdGlvbiArPSBuYW1lXG5cbiAgICAvLyAzLiBBcHBlbmQgVSswMDNEICg9KSB0byBzZXJpYWxpemF0aW9uLlxuICAgIHNlcmlhbGl6YXRpb24gKz0gJz0nXG5cbiAgICAvLyA0LiBJZiB2YWx1ZSBkb2VzIG5vdCBzb2xlbHkgY29udGFpbiBIVFRQIHRva2VuIGNvZGVcbiAgICAvLyAgICBwb2ludHMgb3IgdmFsdWUgaXMgdGhlIGVtcHR5IHN0cmluZywgdGhlbjpcbiAgICBpZiAoIUhUVFBfVE9LRU5fQ09ERVBPSU5UUy50ZXN0KHZhbHVlKSkge1xuICAgICAgLy8gMS4gUHJlY2VkZSBlYWNoIG9jY3VyZW5jZSBvZiBVKzAwMjIgKFwiKSBvclxuICAgICAgLy8gICAgVSswMDVDIChcXCkgaW4gdmFsdWUgd2l0aCBVKzAwNUMgKFxcKS5cbiAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvKFxcXFx8XCIpL2csICdcXFxcJDEnKVxuXG4gICAgICAvLyAyLiBQcmVwZW5kIFUrMDAyMiAoXCIpIHRvIHZhbHVlLlxuICAgICAgdmFsdWUgPSAnXCInICsgdmFsdWVcblxuICAgICAgLy8gMy4gQXBwZW5kIFUrMDAyMiAoXCIpIHRvIHZhbHVlLlxuICAgICAgdmFsdWUgKz0gJ1wiJ1xuICAgIH1cblxuICAgIC8vIDUuIEFwcGVuZCB2YWx1ZSB0byBzZXJpYWxpemF0aW9uLlxuICAgIHNlcmlhbGl6YXRpb24gKz0gdmFsdWVcbiAgfVxuXG4gIC8vIDMuIFJldHVybiBzZXJpYWxpemF0aW9uLlxuICByZXR1cm4gc2VyaWFsaXphdGlvblxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtd2hpdGVzcGFjZVxuICogQHBhcmFtIHtzdHJpbmd9IGNoYXJcbiAqL1xuZnVuY3Rpb24gaXNIVFRQV2hpdGVTcGFjZSAoY2hhcikge1xuICByZXR1cm4gY2hhciA9PT0gJ1xccicgfHwgY2hhciA9PT0gJ1xcbicgfHwgY2hhciA9PT0gJ1xcdCcgfHwgY2hhciA9PT0gJyAnXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC13aGl0ZXNwYWNlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUhUVFBXaGl0ZXNwYWNlIChzdHIsIGxlYWRpbmcgPSB0cnVlLCB0cmFpbGluZyA9IHRydWUpIHtcbiAgbGV0IGxlYWQgPSAwXG4gIGxldCB0cmFpbCA9IHN0ci5sZW5ndGggLSAxXG5cbiAgaWYgKGxlYWRpbmcpIHtcbiAgICBmb3IgKDsgbGVhZCA8IHN0ci5sZW5ndGggJiYgaXNIVFRQV2hpdGVTcGFjZShzdHJbbGVhZF0pOyBsZWFkKyspO1xuICB9XG5cbiAgaWYgKHRyYWlsaW5nKSB7XG4gICAgZm9yICg7IHRyYWlsID4gMCAmJiBpc0hUVFBXaGl0ZVNwYWNlKHN0clt0cmFpbF0pOyB0cmFpbC0tKTtcbiAgfVxuXG4gIHJldHVybiBzdHIuc2xpY2UobGVhZCwgdHJhaWwgKyAxKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2FzY2lpLXdoaXRlc3BhY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBjaGFyXG4gKi9cbmZ1bmN0aW9uIGlzQVNDSUlXaGl0ZXNwYWNlIChjaGFyKSB7XG4gIHJldHVybiBjaGFyID09PSAnXFxyJyB8fCBjaGFyID09PSAnXFxuJyB8fCBjaGFyID09PSAnXFx0JyB8fCBjaGFyID09PSAnXFxmJyB8fCBjaGFyID09PSAnICdcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNzdHJpcC1sZWFkaW5nLWFuZC10cmFpbGluZy1hc2NpaS13aGl0ZXNwYWNlXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUFTQ0lJV2hpdGVzcGFjZSAoc3RyLCBsZWFkaW5nID0gdHJ1ZSwgdHJhaWxpbmcgPSB0cnVlKSB7XG4gIGxldCBsZWFkID0gMFxuICBsZXQgdHJhaWwgPSBzdHIubGVuZ3RoIC0gMVxuXG4gIGlmIChsZWFkaW5nKSB7XG4gICAgZm9yICg7IGxlYWQgPCBzdHIubGVuZ3RoICYmIGlzQVNDSUlXaGl0ZXNwYWNlKHN0cltsZWFkXSk7IGxlYWQrKyk7XG4gIH1cblxuICBpZiAodHJhaWxpbmcpIHtcbiAgICBmb3IgKDsgdHJhaWwgPiAwICYmIGlzQVNDSUlXaGl0ZXNwYWNlKHN0clt0cmFpbF0pOyB0cmFpbC0tKTtcbiAgfVxuXG4gIHJldHVybiBzdHIuc2xpY2UobGVhZCwgdHJhaWwgKyAxKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZGF0YVVSTFByb2Nlc3NvcixcbiAgVVJMU2VyaWFsaXplcixcbiAgY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50cyxcbiAgY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QsXG4gIHN0cmluZ1BlcmNlbnREZWNvZGUsXG4gIHBhcnNlTUlNRVR5cGUsXG4gIGNvbGxlY3RBbkhUVFBRdW90ZWRTdHJpbmcsXG4gIHNlcmlhbGl6ZUFNaW1lVHlwZVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBCbG9iLCBGaWxlOiBOYXRpdmVGaWxlIH0gPSByZXF1aXJlKCdidWZmZXInKVxuY29uc3QgeyB0eXBlcyB9ID0gcmVxdWlyZSgndXRpbCcpXG5jb25zdCB7IGtTdGF0ZSB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgaXNCbG9iTGlrZSB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuL3dlYmlkbCcpXG5jb25zdCB7IHBhcnNlTUlNRVR5cGUsIHNlcmlhbGl6ZUFNaW1lVHlwZSB9ID0gcmVxdWlyZSgnLi9kYXRhVVJMJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKVxuXG5jbGFzcyBGaWxlIGV4dGVuZHMgQmxvYiB7XG4gIGNvbnN0cnVjdG9yIChmaWxlQml0cywgZmlsZU5hbWUsIG9wdGlvbnMgPSB7fSkge1xuICAgIC8vIFRoZSBGaWxlIGNvbnN0cnVjdG9yIGlzIGludm9rZWQgd2l0aCB0d28gb3IgdGhyZWUgcGFyYW1ldGVycywgZGVwZW5kaW5nXG4gICAgLy8gb24gd2hldGhlciB0aGUgb3B0aW9uYWwgZGljdGlvbmFyeSBwYXJhbWV0ZXIgaXMgdXNlZC4gV2hlbiB0aGUgRmlsZSgpXG4gICAgLy8gY29uc3RydWN0b3IgaXMgaW52b2tlZCwgdXNlciBhZ2VudHMgbXVzdCBydW4gdGhlIGZvbGxvd2luZyBzdGVwczpcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnRmlsZSBjb25zdHJ1Y3RvcicgfSlcblxuICAgIGZpbGVCaXRzID0gd2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPEJsb2JQYXJ0PiddKGZpbGVCaXRzKVxuICAgIGZpbGVOYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKGZpbGVOYW1lKVxuICAgIG9wdGlvbnMgPSB3ZWJpZGwuY29udmVydGVycy5GaWxlUHJvcGVydHlCYWcob3B0aW9ucylcblxuICAgIC8vIDEuIExldCBieXRlcyBiZSB0aGUgcmVzdWx0IG9mIHByb2Nlc3NpbmcgYmxvYiBwYXJ0cyBnaXZlbiBmaWxlQml0cyBhbmRcbiAgICAvLyBvcHRpb25zLlxuICAgIC8vIE5vdGU6IEJsb2IgaGFuZGxlcyB0aGlzIGZvciB1c1xuXG4gICAgLy8gMi4gTGV0IG4gYmUgdGhlIGZpbGVOYW1lIGFyZ3VtZW50IHRvIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICBjb25zdCBuID0gZmlsZU5hbWVcblxuICAgIC8vIDMuIFByb2Nlc3MgRmlsZVByb3BlcnR5QmFnIGRpY3Rpb25hcnkgYXJndW1lbnQgYnkgcnVubmluZyB0aGUgZm9sbG93aW5nXG4gICAgLy8gc3Vic3RlcHM6XG5cbiAgICAvLyAgICAxLiBJZiB0aGUgdHlwZSBtZW1iZXIgaXMgcHJvdmlkZWQgYW5kIGlzIG5vdCB0aGUgZW1wdHkgc3RyaW5nLCBsZXQgdFxuICAgIC8vICAgIGJlIHNldCB0byB0aGUgdHlwZSBkaWN0aW9uYXJ5IG1lbWJlci4gSWYgdCBjb250YWlucyBhbnkgY2hhcmFjdGVyc1xuICAgIC8vICAgIG91dHNpZGUgdGhlIHJhbmdlIFUrMDAyMCB0byBVKzAwN0UsIHRoZW4gc2V0IHQgdG8gdGhlIGVtcHR5IHN0cmluZ1xuICAgIC8vICAgIGFuZCByZXR1cm4gZnJvbSB0aGVzZSBzdWJzdGVwcy5cbiAgICAvLyAgICAyLiBDb252ZXJ0IGV2ZXJ5IGNoYXJhY3RlciBpbiB0IHRvIEFTQ0lJIGxvd2VyY2FzZS5cbiAgICBsZXQgdCA9IG9wdGlvbnMudHlwZVxuICAgIGxldCBkXG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbGFiZWxzXG4gICAgc3Vic3RlcDoge1xuICAgICAgaWYgKHQpIHtcbiAgICAgICAgdCA9IHBhcnNlTUlNRVR5cGUodClcblxuICAgICAgICBpZiAodCA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgICAgdCA9ICcnXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxhYmVsc1xuICAgICAgICAgIGJyZWFrIHN1YnN0ZXBcbiAgICAgICAgfVxuXG4gICAgICAgIHQgPSBzZXJpYWxpemVBTWltZVR5cGUodCkudG9Mb3dlckNhc2UoKVxuICAgICAgfVxuXG4gICAgICAvLyAgICAzLiBJZiB0aGUgbGFzdE1vZGlmaWVkIG1lbWJlciBpcyBwcm92aWRlZCwgbGV0IGQgYmUgc2V0IHRvIHRoZVxuICAgICAgLy8gICAgbGFzdE1vZGlmaWVkIGRpY3Rpb25hcnkgbWVtYmVyLiBJZiBpdCBpcyBub3QgcHJvdmlkZWQsIHNldCBkIHRvIHRoZVxuICAgICAgLy8gICAgY3VycmVudCBkYXRlIGFuZCB0aW1lIHJlcHJlc2VudGVkIGFzIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHNpbmNlXG4gICAgICAvLyAgICB0aGUgVW5peCBFcG9jaCAod2hpY2ggaXMgdGhlIGVxdWl2YWxlbnQgb2YgRGF0ZS5ub3coKSBbRUNNQS0yNjJdKS5cbiAgICAgIGQgPSBvcHRpb25zLmxhc3RNb2RpZmllZFxuICAgIH1cblxuICAgIC8vIDQuIFJldHVybiBhIG5ldyBGaWxlIG9iamVjdCBGIHN1Y2ggdGhhdDpcbiAgICAvLyBGIHJlZmVycyB0byB0aGUgYnl0ZXMgYnl0ZSBzZXF1ZW5jZS5cbiAgICAvLyBGLnNpemUgaXMgc2V0IHRvIHRoZSBudW1iZXIgb2YgdG90YWwgYnl0ZXMgaW4gYnl0ZXMuXG4gICAgLy8gRi5uYW1lIGlzIHNldCB0byBuLlxuICAgIC8vIEYudHlwZSBpcyBzZXQgdG8gdC5cbiAgICAvLyBGLmxhc3RNb2RpZmllZCBpcyBzZXQgdG8gZC5cblxuICAgIHN1cGVyKHByb2Nlc3NCbG9iUGFydHMoZmlsZUJpdHMsIG9wdGlvbnMpLCB7IHR5cGU6IHQgfSlcbiAgICB0aGlzW2tTdGF0ZV0gPSB7XG4gICAgICBuYW1lOiBuLFxuICAgICAgbGFzdE1vZGlmaWVkOiBkLFxuICAgICAgdHlwZTogdFxuICAgIH1cbiAgfVxuXG4gIGdldCBuYW1lICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5uYW1lXG4gIH1cblxuICBnZXQgbGFzdE1vZGlmaWVkICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5sYXN0TW9kaWZpZWRcbiAgfVxuXG4gIGdldCB0eXBlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS50eXBlXG4gIH1cbn1cblxuY2xhc3MgRmlsZUxpa2Uge1xuICBjb25zdHJ1Y3RvciAoYmxvYkxpa2UsIGZpbGVOYW1lLCBvcHRpb25zID0ge30pIHtcbiAgICAvLyBUT0RPOiBhcmd1bWVudCBpZGwgdHlwZSBjaGVja1xuXG4gICAgLy8gVGhlIEZpbGUgY29uc3RydWN0b3IgaXMgaW52b2tlZCB3aXRoIHR3byBvciB0aHJlZSBwYXJhbWV0ZXJzLCBkZXBlbmRpbmdcbiAgICAvLyBvbiB3aGV0aGVyIHRoZSBvcHRpb25hbCBkaWN0aW9uYXJ5IHBhcmFtZXRlciBpcyB1c2VkLiBXaGVuIHRoZSBGaWxlKClcbiAgICAvLyBjb25zdHJ1Y3RvciBpcyBpbnZva2VkLCB1c2VyIGFnZW50cyBtdXN0IHJ1biB0aGUgZm9sbG93aW5nIHN0ZXBzOlxuXG4gICAgLy8gMS4gTGV0IGJ5dGVzIGJlIHRoZSByZXN1bHQgb2YgcHJvY2Vzc2luZyBibG9iIHBhcnRzIGdpdmVuIGZpbGVCaXRzIGFuZFxuICAgIC8vIG9wdGlvbnMuXG5cbiAgICAvLyAyLiBMZXQgbiBiZSB0aGUgZmlsZU5hbWUgYXJndW1lbnQgdG8gdGhlIGNvbnN0cnVjdG9yLlxuICAgIGNvbnN0IG4gPSBmaWxlTmFtZVxuXG4gICAgLy8gMy4gUHJvY2VzcyBGaWxlUHJvcGVydHlCYWcgZGljdGlvbmFyeSBhcmd1bWVudCBieSBydW5uaW5nIHRoZSBmb2xsb3dpbmdcbiAgICAvLyBzdWJzdGVwczpcblxuICAgIC8vICAgIDEuIElmIHRoZSB0eXBlIG1lbWJlciBpcyBwcm92aWRlZCBhbmQgaXMgbm90IHRoZSBlbXB0eSBzdHJpbmcsIGxldCB0XG4gICAgLy8gICAgYmUgc2V0IHRvIHRoZSB0eXBlIGRpY3Rpb25hcnkgbWVtYmVyLiBJZiB0IGNvbnRhaW5zIGFueSBjaGFyYWN0ZXJzXG4gICAgLy8gICAgb3V0c2lkZSB0aGUgcmFuZ2UgVSswMDIwIHRvIFUrMDA3RSwgdGhlbiBzZXQgdCB0byB0aGUgZW1wdHkgc3RyaW5nXG4gICAgLy8gICAgYW5kIHJldHVybiBmcm9tIHRoZXNlIHN1YnN0ZXBzLlxuICAgIC8vICAgIFRPRE9cbiAgICBjb25zdCB0ID0gb3B0aW9ucy50eXBlXG5cbiAgICAvLyAgICAyLiBDb252ZXJ0IGV2ZXJ5IGNoYXJhY3RlciBpbiB0IHRvIEFTQ0lJIGxvd2VyY2FzZS5cbiAgICAvLyAgICBUT0RPXG5cbiAgICAvLyAgICAzLiBJZiB0aGUgbGFzdE1vZGlmaWVkIG1lbWJlciBpcyBwcm92aWRlZCwgbGV0IGQgYmUgc2V0IHRvIHRoZVxuICAgIC8vICAgIGxhc3RNb2RpZmllZCBkaWN0aW9uYXJ5IG1lbWJlci4gSWYgaXQgaXMgbm90IHByb3ZpZGVkLCBzZXQgZCB0byB0aGVcbiAgICAvLyAgICBjdXJyZW50IGRhdGUgYW5kIHRpbWUgcmVwcmVzZW50ZWQgYXMgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgc2luY2VcbiAgICAvLyAgICB0aGUgVW5peCBFcG9jaCAod2hpY2ggaXMgdGhlIGVxdWl2YWxlbnQgb2YgRGF0ZS5ub3coKSBbRUNNQS0yNjJdKS5cbiAgICBjb25zdCBkID0gb3B0aW9ucy5sYXN0TW9kaWZpZWQgPz8gRGF0ZS5ub3coKVxuXG4gICAgLy8gNC4gUmV0dXJuIGEgbmV3IEZpbGUgb2JqZWN0IEYgc3VjaCB0aGF0OlxuICAgIC8vIEYgcmVmZXJzIHRvIHRoZSBieXRlcyBieXRlIHNlcXVlbmNlLlxuICAgIC8vIEYuc2l6ZSBpcyBzZXQgdG8gdGhlIG51bWJlciBvZiB0b3RhbCBieXRlcyBpbiBieXRlcy5cbiAgICAvLyBGLm5hbWUgaXMgc2V0IHRvIG4uXG4gICAgLy8gRi50eXBlIGlzIHNldCB0byB0LlxuICAgIC8vIEYubGFzdE1vZGlmaWVkIGlzIHNldCB0byBkLlxuXG4gICAgdGhpc1trU3RhdGVdID0ge1xuICAgICAgYmxvYkxpa2UsXG4gICAgICBuYW1lOiBuLFxuICAgICAgdHlwZTogdCxcbiAgICAgIGxhc3RNb2RpZmllZDogZFxuICAgIH1cbiAgfVxuXG4gIHN0cmVhbSAoLi4uYXJncykge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVMaWtlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5ibG9iTGlrZS5zdHJlYW0oLi4uYXJncylcbiAgfVxuXG4gIGFycmF5QnVmZmVyICguLi5hcmdzKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZUxpa2UpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmJsb2JMaWtlLmFycmF5QnVmZmVyKC4uLmFyZ3MpXG4gIH1cblxuICBzbGljZSAoLi4uYXJncykge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVMaWtlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5ibG9iTGlrZS5zbGljZSguLi5hcmdzKVxuICB9XG5cbiAgdGV4dCAoLi4uYXJncykge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVMaWtlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5ibG9iTGlrZS50ZXh0KC4uLmFyZ3MpXG4gIH1cblxuICBnZXQgc2l6ZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZUxpa2UpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmJsb2JMaWtlLnNpemVcbiAgfVxuXG4gIGdldCB0eXBlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlTGlrZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uYmxvYkxpa2UudHlwZVxuICB9XG5cbiAgZ2V0IG5hbWUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVMaWtlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5uYW1lXG4gIH1cblxuICBnZXQgbGFzdE1vZGlmaWVkICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlTGlrZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ubGFzdE1vZGlmaWVkXG4gIH1cblxuICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10gKCkge1xuICAgIHJldHVybiAnRmlsZSdcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhGaWxlLnByb3RvdHlwZSwge1xuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnRmlsZScsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0sXG4gIG5hbWU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGxhc3RNb2RpZmllZDoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxud2ViaWRsLmNvbnZlcnRlcnMuQmxvYiA9IHdlYmlkbC5pbnRlcmZhY2VDb252ZXJ0ZXIoQmxvYilcblxud2ViaWRsLmNvbnZlcnRlcnMuQmxvYlBhcnQgPSBmdW5jdGlvbiAoViwgb3B0cykge1xuICBpZiAod2ViaWRsLnV0aWwuVHlwZShWKSA9PT0gJ09iamVjdCcpIHtcbiAgICBpZiAoaXNCbG9iTGlrZShWKSkge1xuICAgICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkJsb2IoViwgeyBzdHJpY3Q6IGZhbHNlIH0pXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgQXJyYXlCdWZmZXIuaXNWaWV3KFYpIHx8XG4gICAgICB0eXBlcy5pc0FueUFycmF5QnVmZmVyKFYpXG4gICAgKSB7XG4gICAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuQnVmZmVyU291cmNlKFYsIG9wdHMpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhWLCBvcHRzKVxufVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8QmxvYlBhcnQ+J10gPSB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLkJsb2JQYXJ0XG4pXG5cbi8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9GaWxlQVBJLyNkZm4tRmlsZVByb3BlcnR5QmFnXG53ZWJpZGwuY29udmVydGVycy5GaWxlUHJvcGVydHlCYWcgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIHtcbiAgICBrZXk6ICdsYXN0TW9kaWZpZWQnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ2xvbmcgbG9uZyddLFxuICAgIGdldCBkZWZhdWx0VmFsdWUgKCkge1xuICAgICAgcmV0dXJuIERhdGUubm93KClcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBrZXk6ICd0eXBlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6ICcnXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdlbmRpbmdzJyxcbiAgICBjb252ZXJ0ZXI6ICh2YWx1ZSkgPT4ge1xuICAgICAgdmFsdWUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcodmFsdWUpXG4gICAgICB2YWx1ZSA9IHZhbHVlLnRvTG93ZXJDYXNlKClcblxuICAgICAgaWYgKHZhbHVlICE9PSAnbmF0aXZlJykge1xuICAgICAgICB2YWx1ZSA9ICd0cmFuc3BhcmVudCdcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgfSxcbiAgICBkZWZhdWx0VmFsdWU6ICd0cmFuc3BhcmVudCdcbiAgfVxuXSlcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9GaWxlQVBJLyNwcm9jZXNzLWJsb2ItcGFydHNcbiAqIEBwYXJhbSB7KE5vZGVKUy5UeXBlZEFycmF5fEJsb2J8c3RyaW5nKVtdfSBwYXJ0c1xuICogQHBhcmFtIHt7IHR5cGU6IHN0cmluZywgZW5kaW5nczogc3RyaW5nIH19IG9wdGlvbnNcbiAqL1xuZnVuY3Rpb24gcHJvY2Vzc0Jsb2JQYXJ0cyAocGFydHMsIG9wdGlvbnMpIHtcbiAgLy8gMS4gTGV0IGJ5dGVzIGJlIGFuIGVtcHR5IHNlcXVlbmNlIG9mIGJ5dGVzLlxuICAvKiogQHR5cGUge05vZGVKUy5UeXBlZEFycmF5W119ICovXG4gIGNvbnN0IGJ5dGVzID0gW11cblxuICAvLyAyLiBGb3IgZWFjaCBlbGVtZW50IGluIHBhcnRzOlxuICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgcGFydHMpIHtcbiAgICAvLyAxLiBJZiBlbGVtZW50IGlzIGEgVVNWU3RyaW5nLCBydW4gdGhlIGZvbGxvd2luZyBzdWJzdGVwczpcbiAgICBpZiAodHlwZW9mIGVsZW1lbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyAxLiBMZXQgcyBiZSBlbGVtZW50LlxuICAgICAgbGV0IHMgPSBlbGVtZW50XG5cbiAgICAgIC8vIDIuIElmIHRoZSBlbmRpbmdzIG1lbWJlciBvZiBvcHRpb25zIGlzIFwibmF0aXZlXCIsIHNldCBzXG4gICAgICAvLyAgICB0byB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgbGluZSBlbmRpbmdzIHRvIG5hdGl2ZVxuICAgICAgLy8gICAgb2YgZWxlbWVudC5cbiAgICAgIGlmIChvcHRpb25zLmVuZGluZ3MgPT09ICduYXRpdmUnKSB7XG4gICAgICAgIHMgPSBjb252ZXJ0TGluZUVuZGluZ3NOYXRpdmUocylcbiAgICAgIH1cblxuICAgICAgLy8gMy4gQXBwZW5kIHRoZSByZXN1bHQgb2YgVVRGLTggZW5jb2RpbmcgcyB0byBieXRlcy5cbiAgICAgIGJ5dGVzLnB1c2goZW5jb2Rlci5lbmNvZGUocykpXG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHR5cGVzLmlzQW55QXJyYXlCdWZmZXIoZWxlbWVudCkgfHxcbiAgICAgIHR5cGVzLmlzVHlwZWRBcnJheShlbGVtZW50KVxuICAgICkge1xuICAgICAgLy8gMi4gSWYgZWxlbWVudCBpcyBhIEJ1ZmZlclNvdXJjZSwgZ2V0IGEgY29weSBvZiB0aGVcbiAgICAgIC8vICAgIGJ5dGVzIGhlbGQgYnkgdGhlIGJ1ZmZlciBzb3VyY2UsIGFuZCBhcHBlbmQgdGhvc2VcbiAgICAgIC8vICAgIGJ5dGVzIHRvIGJ5dGVzLlxuICAgICAgaWYgKCFlbGVtZW50LmJ1ZmZlcikgeyAvLyBBcnJheUJ1ZmZlclxuICAgICAgICBieXRlcy5wdXNoKG5ldyBVaW50OEFycmF5KGVsZW1lbnQpKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgICBuZXcgVWludDhBcnJheShlbGVtZW50LmJ1ZmZlciwgZWxlbWVudC5ieXRlT2Zmc2V0LCBlbGVtZW50LmJ5dGVMZW5ndGgpXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzQmxvYkxpa2UoZWxlbWVudCkpIHtcbiAgICAgIC8vIDMuIElmIGVsZW1lbnQgaXMgYSBCbG9iLCBhcHBlbmQgdGhlIGJ5dGVzIGl0IHJlcHJlc2VudHNcbiAgICAgIC8vICAgIHRvIGJ5dGVzLlxuICAgICAgYnl0ZXMucHVzaChlbGVtZW50KVxuICAgIH1cbiAgfVxuXG4gIC8vIDMuIFJldHVybiBieXRlcy5cbiAgcmV0dXJuIGJ5dGVzXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3d3dy53My5vcmcvVFIvRmlsZUFQSS8jY29udmVydC1saW5lLWVuZGluZ3MtdG8tbmF0aXZlXG4gKiBAcGFyYW0ge3N0cmluZ30gc1xuICovXG5mdW5jdGlvbiBjb252ZXJ0TGluZUVuZGluZ3NOYXRpdmUgKHMpIHtcbiAgLy8gMS4gTGV0IG5hdGl2ZSBsaW5lIGVuZGluZyBiZSBiZSB0aGUgY29kZSBwb2ludCBVKzAwMEEgTEYuXG4gIGxldCBuYXRpdmVMaW5lRW5kaW5nID0gJ1xcbidcblxuICAvLyAyLiBJZiB0aGUgdW5kZXJseWluZyBwbGF0Zm9ybeKAmXMgY29udmVudGlvbnMgYXJlIHRvXG4gIC8vICAgIHJlcHJlc2VudCBuZXdsaW5lcyBhcyBhIGNhcnJpYWdlIHJldHVybiBhbmQgbGluZSBmZWVkXG4gIC8vICAgIHNlcXVlbmNlLCBzZXQgbmF0aXZlIGxpbmUgZW5kaW5nIHRvIHRoZSBjb2RlIHBvaW50XG4gIC8vICAgIFUrMDAwRCBDUiBmb2xsb3dlZCBieSB0aGUgY29kZSBwb2ludCBVKzAwMEEgTEYuXG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG4gICAgbmF0aXZlTGluZUVuZGluZyA9ICdcXHJcXG4nXG4gIH1cblxuICByZXR1cm4gcy5yZXBsYWNlKC9cXHI/XFxuL2csIG5hdGl2ZUxpbmVFbmRpbmcpXG59XG5cbi8vIElmIHRoaXMgZnVuY3Rpb24gaXMgbW92ZWQgdG8gLi91dGlsLmpzLCBzb21lIHRvb2xzIChzdWNoIGFzXG4vLyByb2xsdXApIHdpbGwgd2FybiBhYm91dCBjaXJjdWxhciBkZXBlbmRlbmNpZXMuIFNlZTpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8xNjI5XG5mdW5jdGlvbiBpc0ZpbGVMaWtlIChvYmplY3QpIHtcbiAgcmV0dXJuIChcbiAgICAoTmF0aXZlRmlsZSAmJiBvYmplY3QgaW5zdGFuY2VvZiBOYXRpdmVGaWxlKSB8fFxuICAgIG9iamVjdCBpbnN0YW5jZW9mIEZpbGUgfHwgKFxuICAgICAgb2JqZWN0ICYmXG4gICAgICAodHlwZW9mIG9iamVjdC5zdHJlYW0gPT09ICdmdW5jdGlvbicgfHxcbiAgICAgIHR5cGVvZiBvYmplY3QuYXJyYXlCdWZmZXIgPT09ICdmdW5jdGlvbicpICYmXG4gICAgICBvYmplY3RbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ0ZpbGUnXG4gICAgKVxuICApXG59XG5cbm1vZHVsZS5leHBvcnRzID0geyBGaWxlLCBGaWxlTGlrZSwgaXNGaWxlTGlrZSB9XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGlzQmxvYkxpa2UsIHRvVVNWU3RyaW5nLCBtYWtlSXRlcmF0b3IgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IGtTdGF0ZSB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgRmlsZTogVW5kaWNpRmlsZSwgRmlsZUxpa2UsIGlzRmlsZUxpa2UgfSA9IHJlcXVpcmUoJy4vZmlsZScpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi93ZWJpZGwnKVxuY29uc3QgeyBCbG9iLCBGaWxlOiBOYXRpdmVGaWxlIH0gPSByZXF1aXJlKCdidWZmZXInKVxuXG4vKiogQHR5cGUge2dsb2JhbFRoaXNbJ0ZpbGUnXX0gKi9cbmNvbnN0IEZpbGUgPSBOYXRpdmVGaWxlID8/IFVuZGljaUZpbGVcblxuLy8gaHR0cHM6Ly94aHIuc3BlYy53aGF0d2cub3JnLyNmb3JtZGF0YVxuY2xhc3MgRm9ybURhdGEge1xuICBjb25zdHJ1Y3RvciAoZm9ybSkge1xuICAgIGlmIChmb3JtICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuY29udmVyc2lvbkZhaWxlZCh7XG4gICAgICAgIHByZWZpeDogJ0Zvcm1EYXRhIGNvbnN0cnVjdG9yJyxcbiAgICAgICAgYXJndW1lbnQ6ICdBcmd1bWVudCAxJyxcbiAgICAgICAgdHlwZXM6IFsndW5kZWZpbmVkJ11cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgdGhpc1trU3RhdGVdID0gW11cbiAgfVxuXG4gIGFwcGVuZCAobmFtZSwgdmFsdWUsIGZpbGVuYW1lID0gdW5kZWZpbmVkKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRm9ybURhdGEpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnRm9ybURhdGEuYXBwZW5kJyB9KVxuXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgIWlzQmxvYkxpa2UodmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBcIkZhaWxlZCB0byBleGVjdXRlICdhcHBlbmQnIG9uICdGb3JtRGF0YSc6IHBhcmFtZXRlciAyIGlzIG5vdCBvZiB0eXBlICdCbG9iJ1wiXG4gICAgICApXG4gICAgfVxuXG4gICAgLy8gMS4gTGV0IHZhbHVlIGJlIHZhbHVlIGlmIGdpdmVuOyBvdGhlcndpc2UgYmxvYlZhbHVlLlxuXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhuYW1lKVxuICAgIHZhbHVlID0gaXNCbG9iTGlrZSh2YWx1ZSlcbiAgICAgID8gd2ViaWRsLmNvbnZlcnRlcnMuQmxvYih2YWx1ZSwgeyBzdHJpY3Q6IGZhbHNlIH0pXG4gICAgICA6IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyh2YWx1ZSlcbiAgICBmaWxlbmFtZSA9IGFyZ3VtZW50cy5sZW5ndGggPT09IDNcbiAgICAgID8gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKGZpbGVuYW1lKVxuICAgICAgOiB1bmRlZmluZWRcblxuICAgIC8vIDIuIExldCBlbnRyeSBiZSB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGFuIGVudHJ5IHdpdGhcbiAgICAvLyBuYW1lLCB2YWx1ZSwgYW5kIGZpbGVuYW1lIGlmIGdpdmVuLlxuICAgIGNvbnN0IGVudHJ5ID0gbWFrZUVudHJ5KG5hbWUsIHZhbHVlLCBmaWxlbmFtZSlcblxuICAgIC8vIDMuIEFwcGVuZCBlbnRyeSB0byB0aGlz4oCZcyBlbnRyeSBsaXN0LlxuICAgIHRoaXNba1N0YXRlXS5wdXNoKGVudHJ5KVxuICB9XG5cbiAgZGVsZXRlIChuYW1lKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRm9ybURhdGEpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRm9ybURhdGEuZGVsZXRlJyB9KVxuXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhuYW1lKVxuXG4gICAgLy8gVGhlIGRlbGV0ZShuYW1lKSBtZXRob2Qgc3RlcHMgYXJlIHRvIHJlbW92ZSBhbGwgZW50cmllcyB3aG9zZSBuYW1lXG4gICAgLy8gaXMgbmFtZSBmcm9tIHRoaXPigJlzIGVudHJ5IGxpc3QuXG4gICAgdGhpc1trU3RhdGVdID0gdGhpc1trU3RhdGVdLmZpbHRlcihlbnRyeSA9PiBlbnRyeS5uYW1lICE9PSBuYW1lKVxuICB9XG5cbiAgZ2V0IChuYW1lKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRm9ybURhdGEpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRm9ybURhdGEuZ2V0JyB9KVxuXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhuYW1lKVxuXG4gICAgLy8gMS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgd2hvc2UgbmFtZSBpcyBuYW1lIGluIHRoaXPigJlzIGVudHJ5IGxpc3QsXG4gICAgLy8gdGhlbiByZXR1cm4gbnVsbC5cbiAgICBjb25zdCBpZHggPSB0aGlzW2tTdGF0ZV0uZmluZEluZGV4KChlbnRyeSkgPT4gZW50cnkubmFtZSA9PT0gbmFtZSlcbiAgICBpZiAoaWR4ID09PSAtMSkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBlbnRyeSB3aG9zZSBuYW1lIGlzIG5hbWUgZnJvbVxuICAgIC8vIHRoaXPigJlzIGVudHJ5IGxpc3QuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXVtpZHhdLnZhbHVlXG4gIH1cblxuICBnZXRBbGwgKG5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdGb3JtRGF0YS5nZXRBbGwnIH0pXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKG5hbWUpXG5cbiAgICAvLyAxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSB3aG9zZSBuYW1lIGlzIG5hbWUgaW4gdGhpc+KAmXMgZW50cnkgbGlzdCxcbiAgICAvLyB0aGVuIHJldHVybiB0aGUgZW1wdHkgbGlzdC5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIHZhbHVlcyBvZiBhbGwgZW50cmllcyB3aG9zZSBuYW1lIGlzIG5hbWUsIGluIG9yZGVyLFxuICAgIC8vIGZyb20gdGhpc+KAmXMgZW50cnkgbGlzdC5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdXG4gICAgICAuZmlsdGVyKChlbnRyeSkgPT4gZW50cnkubmFtZSA9PT0gbmFtZSlcbiAgICAgIC5tYXAoKGVudHJ5KSA9PiBlbnRyeS52YWx1ZSlcbiAgfVxuXG4gIGhhcyAobmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZvcm1EYXRhKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0Zvcm1EYXRhLmhhcycgfSlcblxuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcobmFtZSlcblxuICAgIC8vIFRoZSBoYXMobmFtZSkgbWV0aG9kIHN0ZXBzIGFyZSB0byByZXR1cm4gdHJ1ZSBpZiB0aGVyZSBpcyBhbiBlbnRyeVxuICAgIC8vIHdob3NlIG5hbWUgaXMgbmFtZSBpbiB0aGlz4oCZcyBlbnRyeSBsaXN0OyBvdGhlcndpc2UgZmFsc2UuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5maW5kSW5kZXgoKGVudHJ5KSA9PiBlbnRyeS5uYW1lID09PSBuYW1lKSAhPT0gLTFcbiAgfVxuXG4gIHNldCAobmFtZSwgdmFsdWUsIGZpbGVuYW1lID0gdW5kZWZpbmVkKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRm9ybURhdGEpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnRm9ybURhdGEuc2V0JyB9KVxuXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgIWlzQmxvYkxpa2UodmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBcIkZhaWxlZCB0byBleGVjdXRlICdzZXQnIG9uICdGb3JtRGF0YSc6IHBhcmFtZXRlciAyIGlzIG5vdCBvZiB0eXBlICdCbG9iJ1wiXG4gICAgICApXG4gICAgfVxuXG4gICAgLy8gVGhlIHNldChuYW1lLCB2YWx1ZSkgYW5kIHNldChuYW1lLCBibG9iVmFsdWUsIGZpbGVuYW1lKSBtZXRob2Qgc3RlcHNcbiAgICAvLyBhcmU6XG5cbiAgICAvLyAxLiBMZXQgdmFsdWUgYmUgdmFsdWUgaWYgZ2l2ZW47IG90aGVyd2lzZSBibG9iVmFsdWUuXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKG5hbWUpXG4gICAgdmFsdWUgPSBpc0Jsb2JMaWtlKHZhbHVlKVxuICAgICAgPyB3ZWJpZGwuY29udmVydGVycy5CbG9iKHZhbHVlLCB7IHN0cmljdDogZmFsc2UgfSlcbiAgICAgIDogd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKHZhbHVlKVxuICAgIGZpbGVuYW1lID0gYXJndW1lbnRzLmxlbmd0aCA9PT0gM1xuICAgICAgPyB0b1VTVlN0cmluZyhmaWxlbmFtZSlcbiAgICAgIDogdW5kZWZpbmVkXG5cbiAgICAvLyAyLiBMZXQgZW50cnkgYmUgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhbiBlbnRyeSB3aXRoIG5hbWUsIHZhbHVlLCBhbmRcbiAgICAvLyBmaWxlbmFtZSBpZiBnaXZlbi5cbiAgICBjb25zdCBlbnRyeSA9IG1ha2VFbnRyeShuYW1lLCB2YWx1ZSwgZmlsZW5hbWUpXG5cbiAgICAvLyAzLiBJZiB0aGVyZSBhcmUgZW50cmllcyBpbiB0aGlz4oCZcyBlbnRyeSBsaXN0IHdob3NlIG5hbWUgaXMgbmFtZSwgdGhlblxuICAgIC8vIHJlcGxhY2UgdGhlIGZpcnN0IHN1Y2ggZW50cnkgd2l0aCBlbnRyeSBhbmQgcmVtb3ZlIHRoZSBvdGhlcnMuXG4gICAgY29uc3QgaWR4ID0gdGhpc1trU3RhdGVdLmZpbmRJbmRleCgoZW50cnkpID0+IGVudHJ5Lm5hbWUgPT09IG5hbWUpXG4gICAgaWYgKGlkeCAhPT0gLTEpIHtcbiAgICAgIHRoaXNba1N0YXRlXSA9IFtcbiAgICAgICAgLi4udGhpc1trU3RhdGVdLnNsaWNlKDAsIGlkeCksXG4gICAgICAgIGVudHJ5LFxuICAgICAgICAuLi50aGlzW2tTdGF0ZV0uc2xpY2UoaWR4ICsgMSkuZmlsdGVyKChlbnRyeSkgPT4gZW50cnkubmFtZSAhPT0gbmFtZSlcbiAgICAgIF1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gNC4gT3RoZXJ3aXNlLCBhcHBlbmQgZW50cnkgdG8gdGhpc+KAmXMgZW50cnkgbGlzdC5cbiAgICAgIHRoaXNba1N0YXRlXS5wdXNoKGVudHJ5KVxuICAgIH1cbiAgfVxuXG4gIGVudHJpZXMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZvcm1EYXRhKVxuXG4gICAgcmV0dXJuIG1ha2VJdGVyYXRvcihcbiAgICAgICgpID0+IHRoaXNba1N0YXRlXS5tYXAocGFpciA9PiBbcGFpci5uYW1lLCBwYWlyLnZhbHVlXSksXG4gICAgICAnRm9ybURhdGEnLFxuICAgICAgJ2tleSt2YWx1ZSdcbiAgICApXG4gIH1cblxuICBrZXlzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIHJldHVybiBtYWtlSXRlcmF0b3IoXG4gICAgICAoKSA9PiB0aGlzW2tTdGF0ZV0ubWFwKHBhaXIgPT4gW3BhaXIubmFtZSwgcGFpci52YWx1ZV0pLFxuICAgICAgJ0Zvcm1EYXRhJyxcbiAgICAgICdrZXknXG4gICAgKVxuICB9XG5cbiAgdmFsdWVzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIHJldHVybiBtYWtlSXRlcmF0b3IoXG4gICAgICAoKSA9PiB0aGlzW2tTdGF0ZV0ubWFwKHBhaXIgPT4gW3BhaXIubmFtZSwgcGFpci52YWx1ZV0pLFxuICAgICAgJ0Zvcm1EYXRhJyxcbiAgICAgICd2YWx1ZSdcbiAgICApXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHsodmFsdWU6IHN0cmluZywga2V5OiBzdHJpbmcsIHNlbGY6IEZvcm1EYXRhKSA9PiB2b2lkfSBjYWxsYmFja0ZuXG4gICAqIEBwYXJhbSB7dW5rbm93bn0gdGhpc0FyZ1xuICAgKi9cbiAgZm9yRWFjaCAoY2FsbGJhY2tGbiwgdGhpc0FyZyA9IGdsb2JhbFRoaXMpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdGb3JtRGF0YS5mb3JFYWNoJyB9KVxuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFja0ZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBcIkZhaWxlZCB0byBleGVjdXRlICdmb3JFYWNoJyBvbiAnRm9ybURhdGEnOiBwYXJhbWV0ZXIgMSBpcyBub3Qgb2YgdHlwZSAnRnVuY3Rpb24nLlwiXG4gICAgICApXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgdGhpcykge1xuICAgICAgY2FsbGJhY2tGbi5hcHBseSh0aGlzQXJnLCBbdmFsdWUsIGtleSwgdGhpc10pXG4gICAgfVxuICB9XG59XG5cbkZvcm1EYXRhLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdID0gRm9ybURhdGEucHJvdG90eXBlLmVudHJpZXNcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRm9ybURhdGEucHJvdG90eXBlLCB7XG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdGb3JtRGF0YScsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH1cbn0pXG5cbi8qKlxuICogQHNlZSBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3JtLWNvbnRyb2wtaW5mcmFzdHJ1Y3R1cmUuaHRtbCNjcmVhdGUtYW4tZW50cnlcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge3N0cmluZ3xCbG9ifSB2YWx1ZVxuICogQHBhcmFtIHs/c3RyaW5nfSBmaWxlbmFtZVxuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24gbWFrZUVudHJ5IChuYW1lLCB2YWx1ZSwgZmlsZW5hbWUpIHtcbiAgLy8gMS4gU2V0IG5hbWUgdG8gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIG5hbWUgaW50byBhIHNjYWxhciB2YWx1ZSBzdHJpbmcuXG4gIC8vIFwiVG8gY29udmVydCBhIHN0cmluZyBpbnRvIGEgc2NhbGFyIHZhbHVlIHN0cmluZywgcmVwbGFjZSBhbnkgc3Vycm9nYXRlc1xuICAvLyAgd2l0aCBVK0ZGRkQuXCJcbiAgLy8gc2VlOiBodHRwczovL25vZGVqcy5vcmcvZGlzdC9sYXRlc3QtdjE4LngvZG9jcy9hcGkvYnVmZmVyLmh0bWwjYnVmdG9zdHJpbmdlbmNvZGluZy1zdGFydC1lbmRcbiAgbmFtZSA9IEJ1ZmZlci5mcm9tKG5hbWUpLnRvU3RyaW5nKCd1dGY4JylcblxuICAvLyAyLiBJZiB2YWx1ZSBpcyBhIHN0cmluZywgdGhlbiBzZXQgdmFsdWUgdG8gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nXG4gIC8vICAgIHZhbHVlIGludG8gYSBzY2FsYXIgdmFsdWUgc3RyaW5nLlxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHZhbHVlID0gQnVmZmVyLmZyb20odmFsdWUpLnRvU3RyaW5nKCd1dGY4JylcbiAgfSBlbHNlIHtcbiAgICAvLyAzLiBPdGhlcndpc2U6XG5cbiAgICAvLyAxLiBJZiB2YWx1ZSBpcyBub3QgYSBGaWxlIG9iamVjdCwgdGhlbiBzZXQgdmFsdWUgdG8gYSBuZXcgRmlsZSBvYmplY3QsXG4gICAgLy8gICAgcmVwcmVzZW50aW5nIHRoZSBzYW1lIGJ5dGVzLCB3aG9zZSBuYW1lIGF0dHJpYnV0ZSB2YWx1ZSBpcyBcImJsb2JcIlxuICAgIGlmICghaXNGaWxlTGlrZSh2YWx1ZSkpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUgaW5zdGFuY2VvZiBCbG9iXG4gICAgICAgID8gbmV3IEZpbGUoW3ZhbHVlXSwgJ2Jsb2InLCB7IHR5cGU6IHZhbHVlLnR5cGUgfSlcbiAgICAgICAgOiBuZXcgRmlsZUxpa2UodmFsdWUsICdibG9iJywgeyB0eXBlOiB2YWx1ZS50eXBlIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gSWYgZmlsZW5hbWUgaXMgZ2l2ZW4sIHRoZW4gc2V0IHZhbHVlIHRvIGEgbmV3IEZpbGUgb2JqZWN0LFxuICAgIC8vICAgIHJlcHJlc2VudGluZyB0aGUgc2FtZSBieXRlcywgd2hvc2UgbmFtZSBhdHRyaWJ1dGUgaXMgZmlsZW5hbWUuXG4gICAgaWYgKGZpbGVuYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8qKiBAdHlwZSB7RmlsZVByb3BlcnR5QmFnfSAqL1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgdHlwZTogdmFsdWUudHlwZSxcbiAgICAgICAgbGFzdE1vZGlmaWVkOiB2YWx1ZS5sYXN0TW9kaWZpZWRcbiAgICAgIH1cblxuICAgICAgdmFsdWUgPSAoTmF0aXZlRmlsZSAmJiB2YWx1ZSBpbnN0YW5jZW9mIE5hdGl2ZUZpbGUpIHx8IHZhbHVlIGluc3RhbmNlb2YgVW5kaWNpRmlsZVxuICAgICAgICA/IG5ldyBGaWxlKFt2YWx1ZV0sIGZpbGVuYW1lLCBvcHRpb25zKVxuICAgICAgICA6IG5ldyBGaWxlTGlrZSh2YWx1ZSwgZmlsZW5hbWUsIG9wdGlvbnMpXG4gICAgfVxuICB9XG5cbiAgLy8gNC4gUmV0dXJuIGFuIGVudHJ5IHdob3NlIG5hbWUgaXMgbmFtZSBhbmQgd2hvc2UgdmFsdWUgaXMgdmFsdWUuXG4gIHJldHVybiB7IG5hbWUsIHZhbHVlIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7IEZvcm1EYXRhIH1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IEJ1c2JveSA9IHJlcXVpcmUoJ0BmYXN0aWZ5L2J1c2JveScpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHtcbiAgUmVhZGFibGVTdHJlYW1Gcm9tLFxuICBpc0Jsb2JMaWtlLFxuICBpc1JlYWRhYmxlU3RyZWFtTGlrZSxcbiAgcmVhZGFibGVTdHJlYW1DbG9zZSxcbiAgY3JlYXRlRGVmZXJyZWRQcm9taXNlLFxuICBmdWxseVJlYWRCb2R5XG59ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgRm9ybURhdGEgfSA9IHJlcXVpcmUoJy4vZm9ybWRhdGEnKVxuY29uc3QgeyBrU3RhdGUgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi93ZWJpZGwnKVxuY29uc3QgeyBET01FeGNlcHRpb24sIHN0cnVjdHVyZWRDbG9uZSB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3QgeyBCbG9iLCBGaWxlOiBOYXRpdmVGaWxlIH0gPSByZXF1aXJlKCdidWZmZXInKVxuY29uc3QgeyBrQm9keVVzZWQgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBpc0Vycm9yZWQgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGlzVWludDhBcnJheSwgaXNBcnJheUJ1ZmZlciB9ID0gcmVxdWlyZSgndXRpbC90eXBlcycpXG5jb25zdCB7IEZpbGU6IFVuZGljaUZpbGUgfSA9IHJlcXVpcmUoJy4vZmlsZScpXG5jb25zdCB7IHBhcnNlTUlNRVR5cGUsIHNlcmlhbGl6ZUFNaW1lVHlwZSB9ID0gcmVxdWlyZSgnLi9kYXRhVVJMJylcblxubGV0IFJlYWRhYmxlU3RyZWFtID0gZ2xvYmFsVGhpcy5SZWFkYWJsZVN0cmVhbVxuXG4vKiogQHR5cGUge2dsb2JhbFRoaXNbJ0ZpbGUnXX0gKi9cbmNvbnN0IEZpbGUgPSBOYXRpdmVGaWxlID8/IFVuZGljaUZpbGVcbmNvbnN0IHRleHRFbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKClcbmNvbnN0IHRleHREZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKClcblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtYm9keWluaXQtZXh0cmFjdFxuZnVuY3Rpb24gZXh0cmFjdEJvZHkgKG9iamVjdCwga2VlcGFsaXZlID0gZmFsc2UpIHtcbiAgaWYgKCFSZWFkYWJsZVN0cmVhbSkge1xuICAgIFJlYWRhYmxlU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtL3dlYicpLlJlYWRhYmxlU3RyZWFtXG4gIH1cblxuICAvLyAxLiBMZXQgc3RyZWFtIGJlIG51bGwuXG4gIGxldCBzdHJlYW0gPSBudWxsXG5cbiAgLy8gMi4gSWYgb2JqZWN0IGlzIGEgUmVhZGFibGVTdHJlYW0gb2JqZWN0LCB0aGVuIHNldCBzdHJlYW0gdG8gb2JqZWN0LlxuICBpZiAob2JqZWN0IGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW0pIHtcbiAgICBzdHJlYW0gPSBvYmplY3RcbiAgfSBlbHNlIGlmIChpc0Jsb2JMaWtlKG9iamVjdCkpIHtcbiAgICAvLyAzLiBPdGhlcndpc2UsIGlmIG9iamVjdCBpcyBhIEJsb2Igb2JqZWN0LCBzZXQgc3RyZWFtIHRvIHRoZVxuICAgIC8vICAgIHJlc3VsdCBvZiBydW5uaW5nIG9iamVjdOKAmXMgZ2V0IHN0cmVhbS5cbiAgICBzdHJlYW0gPSBvYmplY3Quc3RyZWFtKClcbiAgfSBlbHNlIHtcbiAgICAvLyA0LiBPdGhlcndpc2UsIHNldCBzdHJlYW0gdG8gYSBuZXcgUmVhZGFibGVTdHJlYW0gb2JqZWN0LCBhbmQgc2V0XG4gICAgLy8gICAgdXAgc3RyZWFtLlxuICAgIHN0cmVhbSA9IG5ldyBSZWFkYWJsZVN0cmVhbSh7XG4gICAgICBhc3luYyBwdWxsIChjb250cm9sbGVyKSB7XG4gICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShcbiAgICAgICAgICB0eXBlb2Ygc291cmNlID09PSAnc3RyaW5nJyA/IHRleHRFbmNvZGVyLmVuY29kZShzb3VyY2UpIDogc291cmNlXG4gICAgICAgIClcbiAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gcmVhZGFibGVTdHJlYW1DbG9zZShjb250cm9sbGVyKSlcbiAgICAgIH0sXG4gICAgICBzdGFydCAoKSB7fSxcbiAgICAgIHR5cGU6IHVuZGVmaW5lZFxuICAgIH0pXG4gIH1cblxuICAvLyA1LiBBc3NlcnQ6IHN0cmVhbSBpcyBhIFJlYWRhYmxlU3RyZWFtIG9iamVjdC5cbiAgYXNzZXJ0KGlzUmVhZGFibGVTdHJlYW1MaWtlKHN0cmVhbSkpXG5cbiAgLy8gNi4gTGV0IGFjdGlvbiBiZSBudWxsLlxuICBsZXQgYWN0aW9uID0gbnVsbFxuXG4gIC8vIDcuIExldCBzb3VyY2UgYmUgbnVsbC5cbiAgbGV0IHNvdXJjZSA9IG51bGxcblxuICAvLyA4LiBMZXQgbGVuZ3RoIGJlIG51bGwuXG4gIGxldCBsZW5ndGggPSBudWxsXG5cbiAgLy8gOS4gTGV0IHR5cGUgYmUgbnVsbC5cbiAgbGV0IHR5cGUgPSBudWxsXG5cbiAgLy8gMTAuIFN3aXRjaCBvbiBvYmplY3Q6XG4gIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAnc3RyaW5nJykge1xuICAgIC8vIFNldCBzb3VyY2UgdG8gdGhlIFVURi04IGVuY29kaW5nIG9mIG9iamVjdC5cbiAgICAvLyBOb3RlOiBzZXR0aW5nIHNvdXJjZSB0byBhIFVpbnQ4QXJyYXkgaGVyZSBicmVha3Mgc29tZSBtb2NraW5nIGFzc3VtcHRpb25zLlxuICAgIHNvdXJjZSA9IG9iamVjdFxuXG4gICAgLy8gU2V0IHR5cGUgdG8gYHRleHQvcGxhaW47Y2hhcnNldD1VVEYtOGAuXG4gICAgdHlwZSA9ICd0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLTgnXG4gIH0gZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zKSB7XG4gICAgLy8gVVJMU2VhcmNoUGFyYW1zXG5cbiAgICAvLyBzcGVjIHNheXMgdG8gcnVuIGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCBvbiBib2R5Lmxpc3RcbiAgICAvLyB0aGlzIGlzIGltcGxlbWVudGVkIGluIE5vZGUuanMgYXMgYXBhcnQgb2YgYW4gVVJMU2VhcmNoUGFyYW1zIGluc3RhbmNlIHRvU3RyaW5nIG1ldGhvZFxuICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvZTQ2YzY4MGJmMmIyMTFiYmQ1MmNmOTU5Y2ExN2VlOThjN2Y2NTdmNS9saWIvaW50ZXJuYWwvdXJsLmpzI0w0OTBcbiAgICAvLyBhbmQgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvZTQ2YzY4MGJmMmIyMTFiYmQ1MmNmOTU5Y2ExN2VlOThjN2Y2NTdmNS9saWIvaW50ZXJuYWwvdXJsLmpzI0wxMTAwXG5cbiAgICAvLyBTZXQgc291cmNlIHRvIHRoZSByZXN1bHQgb2YgcnVubmluZyB0aGUgYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIHNlcmlhbGl6ZXIgd2l0aCBvYmplY3TigJlzIGxpc3QuXG4gICAgc291cmNlID0gb2JqZWN0LnRvU3RyaW5nKClcblxuICAgIC8vIFNldCB0eXBlIHRvIGBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOGAuXG4gICAgdHlwZSA9ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCdcbiAgfSBlbHNlIGlmIChpc0FycmF5QnVmZmVyKG9iamVjdCkpIHtcbiAgICAvLyBCdWZmZXJTb3VyY2UvQXJyYXlCdWZmZXJcblxuICAgIC8vIFNldCBzb3VyY2UgdG8gYSBjb3B5IG9mIHRoZSBieXRlcyBoZWxkIGJ5IG9iamVjdC5cbiAgICBzb3VyY2UgPSBuZXcgVWludDhBcnJheShvYmplY3Quc2xpY2UoKSlcbiAgfSBlbHNlIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcob2JqZWN0KSkge1xuICAgIC8vIEJ1ZmZlclNvdXJjZS9BcnJheUJ1ZmZlclZpZXdcblxuICAgIC8vIFNldCBzb3VyY2UgdG8gYSBjb3B5IG9mIHRoZSBieXRlcyBoZWxkIGJ5IG9iamVjdC5cbiAgICBzb3VyY2UgPSBuZXcgVWludDhBcnJheShvYmplY3QuYnVmZmVyLnNsaWNlKG9iamVjdC5ieXRlT2Zmc2V0LCBvYmplY3QuYnl0ZU9mZnNldCArIG9iamVjdC5ieXRlTGVuZ3RoKSlcbiAgfSBlbHNlIGlmICh1dGlsLmlzRm9ybURhdGFMaWtlKG9iamVjdCkpIHtcbiAgICBjb25zdCBib3VuZGFyeSA9IGAtLS0tZm9ybWRhdGEtdW5kaWNpLTAke2Ake01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDFlMTEpfWAucGFkU3RhcnQoMTEsICcwJyl9YFxuICAgIGNvbnN0IHByZWZpeCA9IGAtLSR7Ym91bmRhcnl9XFxyXFxuQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhYFxuXG4gICAgLyohIGZvcm1kYXRhLXBvbHlmaWxsLiBNSVQgTGljZW5zZS4gSmltbXkgV8OkcnRpbmcgPGh0dHBzOi8vamltbXkud2FydGluZy5zZS9vcGVuc291cmNlPiAqL1xuICAgIGNvbnN0IGVzY2FwZSA9IChzdHIpID0+XG4gICAgICBzdHIucmVwbGFjZSgvXFxuL2csICclMEEnKS5yZXBsYWNlKC9cXHIvZywgJyUwRCcpLnJlcGxhY2UoL1wiL2csICclMjInKVxuICAgIGNvbnN0IG5vcm1hbGl6ZUxpbmVmZWVkcyA9ICh2YWx1ZSkgPT4gdmFsdWUucmVwbGFjZSgvXFxyP1xcbnxcXHIvZywgJ1xcclxcbicpXG5cbiAgICAvLyBTZXQgYWN0aW9uIHRvIHRoaXMgc3RlcDogcnVuIHRoZSBtdWx0aXBhcnQvZm9ybS1kYXRhXG4gICAgLy8gZW5jb2RpbmcgYWxnb3JpdGhtLCB3aXRoIG9iamVjdOKAmXMgZW50cnkgbGlzdCBhbmQgVVRGLTguXG4gICAgLy8gLSBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgYm9keSBpcyBpbW11dGFibGUgYW5kIGNhbid0IGJlIGNoYW5nZWQgYWZ0ZXJ3b3Jkc1xuICAgIC8vIC0gVGhhdCB0aGUgY29udGVudC1sZW5ndGggaXMgY2FsY3VsYXRlZCBpbiBhZHZhbmNlLlxuICAgIC8vIC0gQW5kIHRoYXQgYWxsIHBhcnRzIGFyZSBwcmUtZW5jb2RlZCBhbmQgcmVhZHkgdG8gYmUgc2VudC5cblxuICAgIGNvbnN0IGJsb2JQYXJ0cyA9IFtdXG4gICAgY29uc3Qgcm4gPSBuZXcgVWludDhBcnJheShbMTMsIDEwXSkgLy8gJ1xcclxcbidcbiAgICBsZW5ndGggPSAwXG4gICAgbGV0IGhhc1Vua25vd25TaXplVmFsdWUgPSBmYWxzZVxuXG4gICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIG9iamVjdCkge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3QgY2h1bmsgPSB0ZXh0RW5jb2Rlci5lbmNvZGUocHJlZml4ICtcbiAgICAgICAgICBgOyBuYW1lPVwiJHtlc2NhcGUobm9ybWFsaXplTGluZWZlZWRzKG5hbWUpKX1cImAgK1xuICAgICAgICAgIGBcXHJcXG5cXHJcXG4ke25vcm1hbGl6ZUxpbmVmZWVkcyh2YWx1ZSl9XFxyXFxuYClcbiAgICAgICAgYmxvYlBhcnRzLnB1c2goY2h1bmspXG4gICAgICAgIGxlbmd0aCArPSBjaHVuay5ieXRlTGVuZ3RoXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjaHVuayA9IHRleHRFbmNvZGVyLmVuY29kZShgJHtwcmVmaXh9OyBuYW1lPVwiJHtlc2NhcGUobm9ybWFsaXplTGluZWZlZWRzKG5hbWUpKX1cImAgK1xuICAgICAgICAgICh2YWx1ZS5uYW1lID8gYDsgZmlsZW5hbWU9XCIke2VzY2FwZSh2YWx1ZS5uYW1lKX1cImAgOiAnJykgKyAnXFxyXFxuJyArXG4gICAgICAgICAgYENvbnRlbnQtVHlwZTogJHtcbiAgICAgICAgICAgIHZhbHVlLnR5cGUgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSdcbiAgICAgICAgICB9XFxyXFxuXFxyXFxuYClcbiAgICAgICAgYmxvYlBhcnRzLnB1c2goY2h1bmssIHZhbHVlLCBybilcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZS5zaXplID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIGxlbmd0aCArPSBjaHVuay5ieXRlTGVuZ3RoICsgdmFsdWUuc2l6ZSArIHJuLmJ5dGVMZW5ndGhcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoYXNVbmtub3duU2l6ZVZhbHVlID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY2h1bmsgPSB0ZXh0RW5jb2Rlci5lbmNvZGUoYC0tJHtib3VuZGFyeX0tLWApXG4gICAgYmxvYlBhcnRzLnB1c2goY2h1bmspXG4gICAgbGVuZ3RoICs9IGNodW5rLmJ5dGVMZW5ndGhcbiAgICBpZiAoaGFzVW5rbm93blNpemVWYWx1ZSkge1xuICAgICAgbGVuZ3RoID0gbnVsbFxuICAgIH1cblxuICAgIC8vIFNldCBzb3VyY2UgdG8gb2JqZWN0LlxuICAgIHNvdXJjZSA9IG9iamVjdFxuXG4gICAgYWN0aW9uID0gYXN5bmMgZnVuY3Rpb24gKiAoKSB7XG4gICAgICBmb3IgKGNvbnN0IHBhcnQgb2YgYmxvYlBhcnRzKSB7XG4gICAgICAgIGlmIChwYXJ0LnN0cmVhbSkge1xuICAgICAgICAgIHlpZWxkICogcGFydC5zdHJlYW0oKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHlpZWxkIHBhcnRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNldCB0eXBlIHRvIGBtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT1gLFxuICAgIC8vIGZvbGxvd2VkIGJ5IHRoZSBtdWx0aXBhcnQvZm9ybS1kYXRhIGJvdW5kYXJ5IHN0cmluZyBnZW5lcmF0ZWRcbiAgICAvLyBieSB0aGUgbXVsdGlwYXJ0L2Zvcm0tZGF0YSBlbmNvZGluZyBhbGdvcml0aG0uXG4gICAgdHlwZSA9ICdtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0nICsgYm91bmRhcnlcbiAgfSBlbHNlIGlmIChpc0Jsb2JMaWtlKG9iamVjdCkpIHtcbiAgICAvLyBCbG9iXG5cbiAgICAvLyBTZXQgc291cmNlIHRvIG9iamVjdC5cbiAgICBzb3VyY2UgPSBvYmplY3RcblxuICAgIC8vIFNldCBsZW5ndGggdG8gb2JqZWN04oCZcyBzaXplLlxuICAgIGxlbmd0aCA9IG9iamVjdC5zaXplXG5cbiAgICAvLyBJZiBvYmplY3TigJlzIHR5cGUgYXR0cmlidXRlIGlzIG5vdCB0aGUgZW1wdHkgYnl0ZSBzZXF1ZW5jZSwgc2V0XG4gICAgLy8gdHlwZSB0byBpdHMgdmFsdWUuXG4gICAgaWYgKG9iamVjdC50eXBlKSB7XG4gICAgICB0eXBlID0gb2JqZWN0LnR5cGVcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIG9iamVjdFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBJZiBrZWVwYWxpdmUgaXMgdHJ1ZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoa2VlcGFsaXZlKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdrZWVwYWxpdmUnKVxuICAgIH1cblxuICAgIC8vIElmIG9iamVjdCBpcyBkaXN0dXJiZWQgb3IgbG9ja2VkLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICh1dGlsLmlzRGlzdHVyYmVkKG9iamVjdCkgfHwgb2JqZWN0LmxvY2tlZCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgJ1Jlc3BvbnNlIGJvZHkgb2JqZWN0IHNob3VsZCBub3QgYmUgZGlzdHVyYmVkIG9yIGxvY2tlZCdcbiAgICAgIClcbiAgICB9XG5cbiAgICBzdHJlYW0gPVxuICAgICAgb2JqZWN0IGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW0gPyBvYmplY3QgOiBSZWFkYWJsZVN0cmVhbUZyb20ob2JqZWN0KVxuICB9XG5cbiAgLy8gMTEuIElmIHNvdXJjZSBpcyBhIGJ5dGUgc2VxdWVuY2UsIHRoZW4gc2V0IGFjdGlvbiB0byBhXG4gIC8vIHN0ZXAgdGhhdCByZXR1cm5zIHNvdXJjZSBhbmQgbGVuZ3RoIHRvIHNvdXJjZeKAmXMgbGVuZ3RoLlxuICBpZiAodHlwZW9mIHNvdXJjZSA9PT0gJ3N0cmluZycgfHwgdXRpbC5pc0J1ZmZlcihzb3VyY2UpKSB7XG4gICAgbGVuZ3RoID0gQnVmZmVyLmJ5dGVMZW5ndGgoc291cmNlKVxuICB9XG5cbiAgLy8gMTIuIElmIGFjdGlvbiBpcyBub24tbnVsbCwgdGhlbiBydW4gdGhlc2Ugc3RlcHMgaW4gaW4gcGFyYWxsZWw6XG4gIGlmIChhY3Rpb24gIT0gbnVsbCkge1xuICAgIC8vIFJ1biBhY3Rpb24uXG4gICAgbGV0IGl0ZXJhdG9yXG4gICAgc3RyZWFtID0gbmV3IFJlYWRhYmxlU3RyZWFtKHtcbiAgICAgIGFzeW5jIHN0YXJ0ICgpIHtcbiAgICAgICAgaXRlcmF0b3IgPSBhY3Rpb24ob2JqZWN0KVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKVxuICAgICAgfSxcbiAgICAgIGFzeW5jIHB1bGwgKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgY29uc3QgeyB2YWx1ZSwgZG9uZSB9ID0gYXdhaXQgaXRlcmF0b3IubmV4dCgpXG4gICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgLy8gV2hlbiBydW5uaW5nIGFjdGlvbiBpcyBkb25lLCBjbG9zZSBzdHJlYW0uXG4gICAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICAgICAgY29udHJvbGxlci5jbG9zZSgpXG4gICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBXaGVuZXZlciBvbmUgb3IgbW9yZSBieXRlcyBhcmUgYXZhaWxhYmxlIGFuZCBzdHJlYW0gaXMgbm90IGVycm9yZWQsXG4gICAgICAgICAgLy8gZW5xdWV1ZSBhIFVpbnQ4QXJyYXkgd3JhcHBpbmcgYW4gQXJyYXlCdWZmZXIgY29udGFpbmluZyB0aGUgYXZhaWxhYmxlXG4gICAgICAgICAgLy8gYnl0ZXMgaW50byBzdHJlYW0uXG4gICAgICAgICAgaWYgKCFpc0Vycm9yZWQoc3RyZWFtKSkge1xuICAgICAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KHZhbHVlKSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXIuZGVzaXJlZFNpemUgPiAwXG4gICAgICB9LFxuICAgICAgYXN5bmMgY2FuY2VsIChyZWFzb24pIHtcbiAgICAgICAgYXdhaXQgaXRlcmF0b3IucmV0dXJuKClcbiAgICAgIH0sXG4gICAgICB0eXBlOiB1bmRlZmluZWRcbiAgICB9KVxuICB9XG5cbiAgLy8gMTMuIExldCBib2R5IGJlIGEgYm9keSB3aG9zZSBzdHJlYW0gaXMgc3RyZWFtLCBzb3VyY2UgaXMgc291cmNlLFxuICAvLyBhbmQgbGVuZ3RoIGlzIGxlbmd0aC5cbiAgY29uc3QgYm9keSA9IHsgc3RyZWFtLCBzb3VyY2UsIGxlbmd0aCB9XG5cbiAgLy8gMTQuIFJldHVybiAoYm9keSwgdHlwZSkuXG4gIHJldHVybiBbYm9keSwgdHlwZV1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2JvZHlpbml0LXNhZmVseS1leHRyYWN0XG5mdW5jdGlvbiBzYWZlbHlFeHRyYWN0Qm9keSAob2JqZWN0LCBrZWVwYWxpdmUgPSBmYWxzZSkge1xuICBpZiAoIVJlYWRhYmxlU3RyZWFtKSB7XG4gICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICBSZWFkYWJsZVN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbS93ZWInKS5SZWFkYWJsZVN0cmVhbVxuICB9XG5cbiAgLy8gVG8gc2FmZWx5IGV4dHJhY3QgYSBib2R5IGFuZCBhIGBDb250ZW50LVR5cGVgIHZhbHVlIGZyb21cbiAgLy8gYSBieXRlIHNlcXVlbmNlIG9yIEJvZHlJbml0IG9iamVjdCBvYmplY3QsIHJ1biB0aGVzZSBzdGVwczpcblxuICAvLyAxLiBJZiBvYmplY3QgaXMgYSBSZWFkYWJsZVN0cmVhbSBvYmplY3QsIHRoZW46XG4gIGlmIChvYmplY3QgaW5zdGFuY2VvZiBSZWFkYWJsZVN0cmVhbSkge1xuICAgIC8vIEFzc2VydDogb2JqZWN0IGlzIG5laXRoZXIgZGlzdHVyYmVkIG5vciBsb2NrZWQuXG4gICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICBhc3NlcnQoIXV0aWwuaXNEaXN0dXJiZWQob2JqZWN0KSwgJ1RoZSBib2R5IGhhcyBhbHJlYWR5IGJlZW4gY29uc3VtZWQuJylcbiAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgIGFzc2VydCghb2JqZWN0LmxvY2tlZCwgJ1RoZSBzdHJlYW0gaXMgbG9ja2VkLicpXG4gIH1cblxuICAvLyAyLiBSZXR1cm4gdGhlIHJlc3VsdHMgb2YgZXh0cmFjdGluZyBvYmplY3QuXG4gIHJldHVybiBleHRyYWN0Qm9keShvYmplY3QsIGtlZXBhbGl2ZSlcbn1cblxuZnVuY3Rpb24gY2xvbmVCb2R5IChib2R5KSB7XG4gIC8vIFRvIGNsb25lIGEgYm9keSBib2R5LCBydW4gdGhlc2Ugc3RlcHM6XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtYm9keS1jbG9uZVxuXG4gIC8vIDEuIExldCDCqyBvdXQxLCBvdXQyIMK7IGJlIHRoZSByZXN1bHQgb2YgdGVlaW5nIGJvZHnigJlzIHN0cmVhbS5cbiAgY29uc3QgW291dDEsIG91dDJdID0gYm9keS5zdHJlYW0udGVlKClcbiAgY29uc3Qgb3V0MkNsb25lID0gc3RydWN0dXJlZENsb25lKG91dDIsIHsgdHJhbnNmZXI6IFtvdXQyXSB9KVxuICAvLyBUaGlzLCBmb3Igd2hhdGV2ZXIgcmVhc29ucywgdW5yZWZzIG91dDJDbG9uZSB3aGljaCBhbGxvd3NcbiAgLy8gdGhlIHByb2Nlc3MgdG8gZXhpdCBieSBpdHNlbGYuXG4gIGNvbnN0IFssIGZpbmFsQ2xvbmVdID0gb3V0MkNsb25lLnRlZSgpXG5cbiAgLy8gMi4gU2V0IGJvZHnigJlzIHN0cmVhbSB0byBvdXQxLlxuICBib2R5LnN0cmVhbSA9IG91dDFcblxuICAvLyAzLiBSZXR1cm4gYSBib2R5IHdob3NlIHN0cmVhbSBpcyBvdXQyIGFuZCBvdGhlciBtZW1iZXJzIGFyZSBjb3BpZWQgZnJvbSBib2R5LlxuICByZXR1cm4ge1xuICAgIHN0cmVhbTogZmluYWxDbG9uZSxcbiAgICBsZW5ndGg6IGJvZHkubGVuZ3RoLFxuICAgIHNvdXJjZTogYm9keS5zb3VyY2VcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiAqIGNvbnN1bWVCb2R5IChib2R5KSB7XG4gIGlmIChib2R5KSB7XG4gICAgaWYgKGlzVWludDhBcnJheShib2R5KSkge1xuICAgICAgeWllbGQgYm9keVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzdHJlYW0gPSBib2R5LnN0cmVhbVxuXG4gICAgICBpZiAodXRpbC5pc0Rpc3R1cmJlZChzdHJlYW0pKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBib2R5IGhhcyBhbHJlYWR5IGJlZW4gY29uc3VtZWQuJylcbiAgICAgIH1cblxuICAgICAgaWYgKHN0cmVhbS5sb2NrZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHN0cmVhbSBpcyBsb2NrZWQuJylcbiAgICAgIH1cblxuICAgICAgLy8gQ29tcGF0LlxuICAgICAgc3RyZWFtW2tCb2R5VXNlZF0gPSB0cnVlXG5cbiAgICAgIHlpZWxkICogc3RyZWFtXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHRocm93SWZBYm9ydGVkIChzdGF0ZSkge1xuICBpZiAoc3RhdGUuYWJvcnRlZCkge1xuICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oJ1RoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQuJywgJ0Fib3J0RXJyb3InKVxuICB9XG59XG5cbmZ1bmN0aW9uIGJvZHlNaXhpbk1ldGhvZHMgKGluc3RhbmNlKSB7XG4gIGNvbnN0IG1ldGhvZHMgPSB7XG4gICAgYmxvYiAoKSB7XG4gICAgICAvLyBUaGUgYmxvYigpIG1ldGhvZCBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoZSByZXN1bHQgb2ZcbiAgICAgIC8vIHJ1bm5pbmcgY29uc3VtZSBib2R5IHdpdGggdGhpcyBhbmQgdGhlIGZvbGxvd2luZyBzdGVwXG4gICAgICAvLyBnaXZlbiBhIGJ5dGUgc2VxdWVuY2UgYnl0ZXM6IHJldHVybiBhIEJsb2Igd2hvc2VcbiAgICAgIC8vIGNvbnRlbnRzIGFyZSBieXRlcyBhbmQgd2hvc2UgdHlwZSBhdHRyaWJ1dGUgaXMgdGhpc+KAmXNcbiAgICAgIC8vIE1JTUUgdHlwZS5cbiAgICAgIHJldHVybiBzcGVjQ29uc3VtZUJvZHkodGhpcywgKGJ5dGVzKSA9PiB7XG4gICAgICAgIGxldCBtaW1lVHlwZSA9IGJvZHlNaW1lVHlwZSh0aGlzKVxuXG4gICAgICAgIGlmIChtaW1lVHlwZSA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgICAgbWltZVR5cGUgPSAnJ1xuICAgICAgICB9IGVsc2UgaWYgKG1pbWVUeXBlKSB7XG4gICAgICAgICAgbWltZVR5cGUgPSBzZXJpYWxpemVBTWltZVR5cGUobWltZVR5cGUpXG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZXR1cm4gYSBCbG9iIHdob3NlIGNvbnRlbnRzIGFyZSBieXRlcyBhbmQgdHlwZSBhdHRyaWJ1dGVcbiAgICAgICAgLy8gaXMgbWltZVR5cGUuXG4gICAgICAgIHJldHVybiBuZXcgQmxvYihbYnl0ZXNdLCB7IHR5cGU6IG1pbWVUeXBlIH0pXG4gICAgICB9LCBpbnN0YW5jZSlcbiAgICB9LFxuXG4gICAgYXJyYXlCdWZmZXIgKCkge1xuICAgICAgLy8gVGhlIGFycmF5QnVmZmVyKCkgbWV0aG9kIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhlIHJlc3VsdFxuICAgICAgLy8gb2YgcnVubmluZyBjb25zdW1lIGJvZHkgd2l0aCB0aGlzIGFuZCB0aGUgZm9sbG93aW5nIHN0ZXBcbiAgICAgIC8vIGdpdmVuIGEgYnl0ZSBzZXF1ZW5jZSBieXRlczogcmV0dXJuIGEgbmV3IEFycmF5QnVmZmVyXG4gICAgICAvLyB3aG9zZSBjb250ZW50cyBhcmUgYnl0ZXMuXG4gICAgICByZXR1cm4gc3BlY0NvbnN1bWVCb2R5KHRoaXMsIChieXRlcykgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYnl0ZXMpLmJ1ZmZlclxuICAgICAgfSwgaW5zdGFuY2UpXG4gICAgfSxcblxuICAgIHRleHQgKCkge1xuICAgICAgLy8gVGhlIHRleHQoKSBtZXRob2Qgc3RlcHMgYXJlIHRvIHJldHVybiB0aGUgcmVzdWx0IG9mIHJ1bm5pbmdcbiAgICAgIC8vIGNvbnN1bWUgYm9keSB3aXRoIHRoaXMgYW5kIFVURi04IGRlY29kZS5cbiAgICAgIHJldHVybiBzcGVjQ29uc3VtZUJvZHkodGhpcywgdXRmOERlY29kZUJ5dGVzLCBpbnN0YW5jZSlcbiAgICB9LFxuXG4gICAganNvbiAoKSB7XG4gICAgICAvLyBUaGUganNvbigpIG1ldGhvZCBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZ1xuICAgICAgLy8gY29uc3VtZSBib2R5IHdpdGggdGhpcyBhbmQgcGFyc2UgSlNPTiBmcm9tIGJ5dGVzLlxuICAgICAgcmV0dXJuIHNwZWNDb25zdW1lQm9keSh0aGlzLCBwYXJzZUpTT05Gcm9tQnl0ZXMsIGluc3RhbmNlKVxuICAgIH0sXG5cbiAgICBhc3luYyBmb3JtRGF0YSAoKSB7XG4gICAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBpbnN0YW5jZSlcblxuICAgICAgdGhyb3dJZkFib3J0ZWQodGhpc1trU3RhdGVdKVxuXG4gICAgICBjb25zdCBjb250ZW50VHlwZSA9IHRoaXMuaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpXG5cbiAgICAgIC8vIElmIG1pbWVUeXBl4oCZcyBlc3NlbmNlIGlzIFwibXVsdGlwYXJ0L2Zvcm0tZGF0YVwiLCB0aGVuOlxuICAgICAgaWYgKC9tdWx0aXBhcnRcXC9mb3JtLWRhdGEvLnRlc3QoY29udGVudFR5cGUpKSB7XG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7fVxuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiB0aGlzLmhlYWRlcnMpIGhlYWRlcnNba2V5LnRvTG93ZXJDYXNlKCldID0gdmFsdWVcblxuICAgICAgICBjb25zdCByZXNwb25zZUZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKClcblxuICAgICAgICBsZXQgYnVzYm95XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBidXNib3kgPSBuZXcgQnVzYm95KHtcbiAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICBwcmVzZXJ2ZVBhdGg6IHRydWVcbiAgICAgICAgICB9KVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKGAke2Vycn1gLCAnQWJvcnRFcnJvcicpXG4gICAgICAgIH1cblxuICAgICAgICBidXNib3kub24oJ2ZpZWxkJywgKG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgICAgICAgcmVzcG9uc2VGb3JtRGF0YS5hcHBlbmQobmFtZSwgdmFsdWUpXG4gICAgICAgIH0pXG4gICAgICAgIGJ1c2JveS5vbignZmlsZScsIChuYW1lLCB2YWx1ZSwgZmlsZW5hbWUsIGVuY29kaW5nLCBtaW1lVHlwZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNodW5rcyA9IFtdXG5cbiAgICAgICAgICBpZiAoZW5jb2RpbmcgPT09ICdiYXNlNjQnIHx8IGVuY29kaW5nLnRvTG93ZXJDYXNlKCkgPT09ICdiYXNlNjQnKSB7XG4gICAgICAgICAgICBsZXQgYmFzZTY0Y2h1bmsgPSAnJ1xuXG4gICAgICAgICAgICB2YWx1ZS5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgICAgICAgICAgICBiYXNlNjRjaHVuayArPSBjaHVuay50b1N0cmluZygpLnJlcGxhY2UoL1tcXHJcXG5dL2dtLCAnJylcblxuICAgICAgICAgICAgICBjb25zdCBlbmQgPSBiYXNlNjRjaHVuay5sZW5ndGggLSBiYXNlNjRjaHVuay5sZW5ndGggJSA0XG4gICAgICAgICAgICAgIGNodW5rcy5wdXNoKEJ1ZmZlci5mcm9tKGJhc2U2NGNodW5rLnNsaWNlKDAsIGVuZCksICdiYXNlNjQnKSlcblxuICAgICAgICAgICAgICBiYXNlNjRjaHVuayA9IGJhc2U2NGNodW5rLnNsaWNlKGVuZClcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB2YWx1ZS5vbignZW5kJywgKCkgPT4ge1xuICAgICAgICAgICAgICBjaHVua3MucHVzaChCdWZmZXIuZnJvbShiYXNlNjRjaHVuaywgJ2Jhc2U2NCcpKVxuICAgICAgICAgICAgICByZXNwb25zZUZvcm1EYXRhLmFwcGVuZChuYW1lLCBuZXcgRmlsZShjaHVua3MsIGZpbGVuYW1lLCB7IHR5cGU6IG1pbWVUeXBlIH0pKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsdWUub24oJ2RhdGEnLCAoY2h1bmspID0+IHtcbiAgICAgICAgICAgICAgY2h1bmtzLnB1c2goY2h1bmspXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgdmFsdWUub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgICAgICAgcmVzcG9uc2VGb3JtRGF0YS5hcHBlbmQobmFtZSwgbmV3IEZpbGUoY2h1bmtzLCBmaWxlbmFtZSwgeyB0eXBlOiBtaW1lVHlwZSB9KSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgICAgIGNvbnN0IGJ1c2JveVJlc29sdmUgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgYnVzYm95Lm9uKCdmaW5pc2gnLCByZXNvbHZlKVxuICAgICAgICAgIGJ1c2JveS5vbignZXJyb3InLCAoZXJyKSA9PiByZWplY3QobmV3IFR5cGVFcnJvcihlcnIpKSlcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAodGhpcy5ib2R5ICE9PSBudWxsKSBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIGNvbnN1bWVCb2R5KHRoaXNba1N0YXRlXS5ib2R5KSkgYnVzYm95LndyaXRlKGNodW5rKVxuICAgICAgICBidXNib3kuZW5kKClcbiAgICAgICAgYXdhaXQgYnVzYm95UmVzb2x2ZVxuXG4gICAgICAgIHJldHVybiByZXNwb25zZUZvcm1EYXRhXG4gICAgICB9IGVsc2UgaWYgKC9hcHBsaWNhdGlvblxcL3gtd3d3LWZvcm0tdXJsZW5jb2RlZC8udGVzdChjb250ZW50VHlwZSkpIHtcbiAgICAgICAgLy8gT3RoZXJ3aXNlLCBpZiBtaW1lVHlwZeKAmXMgZXNzZW5jZSBpcyBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiLCB0aGVuOlxuXG4gICAgICAgIC8vIDEuIExldCBlbnRyaWVzIGJlIHRoZSByZXN1bHQgb2YgcGFyc2luZyBieXRlcy5cbiAgICAgICAgbGV0IGVudHJpZXNcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBsZXQgdGV4dCA9ICcnXG4gICAgICAgICAgLy8gYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIHBhcnNlciB3aWxsIGtlZXAgdGhlIEJPTS5cbiAgICAgICAgICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtdXJsZW5jb2RlZC1wYXJzZXJcbiAgICAgICAgICAvLyBOb3RlIHRoYXQgc3RyZWFtaW5nIGRlY29kZXIgaXMgc3RhdGVmdWwgYW5kIGNhbm5vdCBiZSByZXVzZWRcbiAgICAgICAgICBjb25zdCBzdHJlYW1pbmdEZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCd1dGYtOCcsIHsgaWdub3JlQk9NOiB0cnVlIH0pXG5cbiAgICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIGNvbnN1bWVCb2R5KHRoaXNba1N0YXRlXS5ib2R5KSkge1xuICAgICAgICAgICAgaWYgKCFpc1VpbnQ4QXJyYXkoY2h1bmspKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIFVpbnQ4QXJyYXkgY2h1bmsnKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGV4dCArPSBzdHJlYW1pbmdEZWNvZGVyLmRlY29kZShjaHVuaywgeyBzdHJlYW06IHRydWUgfSlcbiAgICAgICAgICB9XG4gICAgICAgICAgdGV4dCArPSBzdHJlYW1pbmdEZWNvZGVyLmRlY29kZSgpXG4gICAgICAgICAgZW50cmllcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXModGV4dClcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHQ6IFVuY2xlYXIgd2hlbiBuZXcgVVJMU2VhcmNoUGFyYW1zIGNhbiBmYWlsIG9uIGEgc3RyaW5nLlxuICAgICAgICAgIC8vIDIuIElmIGVudHJpZXMgaXMgZmFpbHVyZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgICAgICB0aHJvdyBPYmplY3QuYXNzaWduKG5ldyBUeXBlRXJyb3IoKSwgeyBjYXVzZTogZXJyIH0pXG4gICAgICAgIH1cblxuICAgICAgICAvLyAzLiBSZXR1cm4gYSBuZXcgRm9ybURhdGEgb2JqZWN0IHdob3NlIGVudHJpZXMgYXJlIGVudHJpZXMuXG4gICAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKClcbiAgICAgICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIGVudHJpZXMpIHtcbiAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQobmFtZSwgdmFsdWUpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZvcm1EYXRhXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBXYWl0IGEgdGljayBiZWZvcmUgY2hlY2tpbmcgaWYgdGhlIHJlcXVlc3QgaGFzIGJlZW4gYWJvcnRlZC5cbiAgICAgICAgLy8gT3RoZXJ3aXNlLCBhIFR5cGVFcnJvciBjYW4gYmUgdGhyb3duIHdoZW4gYW4gQWJvcnRFcnJvciBzaG91bGQuXG4gICAgICAgIGF3YWl0IFByb21pc2UucmVzb2x2ZSgpXG5cbiAgICAgICAgdGhyb3dJZkFib3J0ZWQodGhpc1trU3RhdGVdKVxuXG4gICAgICAgIC8vIE90aGVyd2lzZSwgdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICBoZWFkZXI6IGAke2luc3RhbmNlLm5hbWV9LmZvcm1EYXRhYCxcbiAgICAgICAgICBtZXNzYWdlOiAnQ291bGQgbm90IHBhcnNlIGNvbnRlbnQgYXMgRm9ybURhdGEuJ1xuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtZXRob2RzXG59XG5cbmZ1bmN0aW9uIG1peGluQm9keSAocHJvdG90eXBlKSB7XG4gIE9iamVjdC5hc3NpZ24ocHJvdG90eXBlLnByb3RvdHlwZSwgYm9keU1peGluTWV0aG9kcyhwcm90b3R5cGUpKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtYm9keS1jb25zdW1lLWJvZHlcbiAqIEBwYXJhbSB7UmVzcG9uc2V8UmVxdWVzdH0gb2JqZWN0XG4gKiBAcGFyYW0geyh2YWx1ZTogdW5rbm93bikgPT4gdW5rbm93bn0gY29udmVydEJ5dGVzVG9KU1ZhbHVlXG4gKiBAcGFyYW0ge1Jlc3BvbnNlfFJlcXVlc3R9IGluc3RhbmNlXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNwZWNDb25zdW1lQm9keSAob2JqZWN0LCBjb252ZXJ0Qnl0ZXNUb0pTVmFsdWUsIGluc3RhbmNlKSB7XG4gIHdlYmlkbC5icmFuZENoZWNrKG9iamVjdCwgaW5zdGFuY2UpXG5cbiAgdGhyb3dJZkFib3J0ZWQob2JqZWN0W2tTdGF0ZV0pXG5cbiAgLy8gMS4gSWYgb2JqZWN0IGlzIHVudXNhYmxlLCB0aGVuIHJldHVybiBhIHByb21pc2UgcmVqZWN0ZWRcbiAgLy8gICAgd2l0aCBhIFR5cGVFcnJvci5cbiAgaWYgKGJvZHlVbnVzYWJsZShvYmplY3Rba1N0YXRlXS5ib2R5KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0JvZHkgaXMgdW51c2FibGUnKVxuICB9XG5cbiAgLy8gMi4gTGV0IHByb21pc2UgYmUgYSBuZXcgcHJvbWlzZS5cbiAgY29uc3QgcHJvbWlzZSA9IGNyZWF0ZURlZmVycmVkUHJvbWlzZSgpXG5cbiAgLy8gMy4gTGV0IGVycm9yU3RlcHMgZ2l2ZW4gZXJyb3IgYmUgdG8gcmVqZWN0IHByb21pc2Ugd2l0aCBlcnJvci5cbiAgY29uc3QgZXJyb3JTdGVwcyA9IChlcnJvcikgPT4gcHJvbWlzZS5yZWplY3QoZXJyb3IpXG5cbiAgLy8gNC4gTGV0IHN1Y2Nlc3NTdGVwcyBnaXZlbiBhIGJ5dGUgc2VxdWVuY2UgZGF0YSBiZSB0byByZXNvbHZlXG4gIC8vICAgIHByb21pc2Ugd2l0aCB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgY29udmVydEJ5dGVzVG9KU1ZhbHVlXG4gIC8vICAgIHdpdGggZGF0YS4gSWYgdGhhdCB0aHJldyBhbiBleGNlcHRpb24sIHRoZW4gcnVuIGVycm9yU3RlcHNcbiAgLy8gICAgd2l0aCB0aGF0IGV4Y2VwdGlvbi5cbiAgY29uc3Qgc3VjY2Vzc1N0ZXBzID0gKGRhdGEpID0+IHtcbiAgICB0cnkge1xuICAgICAgcHJvbWlzZS5yZXNvbHZlKGNvbnZlcnRCeXRlc1RvSlNWYWx1ZShkYXRhKSlcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlcnJvclN0ZXBzKGUpXG4gICAgfVxuICB9XG5cbiAgLy8gNS4gSWYgb2JqZWN04oCZcyBib2R5IGlzIG51bGwsIHRoZW4gcnVuIHN1Y2Nlc3NTdGVwcyB3aXRoIGFuXG4gIC8vICAgIGVtcHR5IGJ5dGUgc2VxdWVuY2UuXG4gIGlmIChvYmplY3Rba1N0YXRlXS5ib2R5ID09IG51bGwpIHtcbiAgICBzdWNjZXNzU3RlcHMobmV3IFVpbnQ4QXJyYXkoKSlcbiAgICByZXR1cm4gcHJvbWlzZS5wcm9taXNlXG4gIH1cblxuICAvLyA2LiBPdGhlcndpc2UsIGZ1bGx5IHJlYWQgb2JqZWN04oCZcyBib2R5IGdpdmVuIHN1Y2Nlc3NTdGVwcyxcbiAgLy8gICAgZXJyb3JTdGVwcywgYW5kIG9iamVjdOKAmXMgcmVsZXZhbnQgZ2xvYmFsIG9iamVjdC5cbiAgYXdhaXQgZnVsbHlSZWFkQm9keShvYmplY3Rba1N0YXRlXS5ib2R5LCBzdWNjZXNzU3RlcHMsIGVycm9yU3RlcHMpXG5cbiAgLy8gNy4gUmV0dXJuIHByb21pc2UuXG4gIHJldHVybiBwcm9taXNlLnByb21pc2Vcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2JvZHktdW51c2FibGVcbmZ1bmN0aW9uIGJvZHlVbnVzYWJsZSAoYm9keSkge1xuICAvLyBBbiBvYmplY3QgaW5jbHVkaW5nIHRoZSBCb2R5IGludGVyZmFjZSBtaXhpbiBpc1xuICAvLyBzYWlkIHRvIGJlIHVudXNhYmxlIGlmIGl0cyBib2R5IGlzIG5vbi1udWxsIGFuZFxuICAvLyBpdHMgYm9keeKAmXMgc3RyZWFtIGlzIGRpc3R1cmJlZCBvciBsb2NrZWQuXG4gIHJldHVybiBib2R5ICE9IG51bGwgJiYgKGJvZHkuc3RyZWFtLmxvY2tlZCB8fCB1dGlsLmlzRGlzdHVyYmVkKGJvZHkuc3RyZWFtKSlcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZW5jb2Rpbmcuc3BlYy53aGF0d2cub3JnLyN1dGYtOC1kZWNvZGVcbiAqIEBwYXJhbSB7QnVmZmVyfSBidWZmZXJcbiAqL1xuZnVuY3Rpb24gdXRmOERlY29kZUJ5dGVzIChidWZmZXIpIHtcbiAgaWYgKGJ1ZmZlci5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIC8vIDEuIExldCBidWZmZXIgYmUgdGhlIHJlc3VsdCBvZiBwZWVraW5nIHRocmVlIGJ5dGVzIGZyb21cbiAgLy8gICAgaW9RdWV1ZSwgY29udmVydGVkIHRvIGEgYnl0ZSBzZXF1ZW5jZS5cblxuICAvLyAyLiBJZiBidWZmZXIgaXMgMHhFRiAweEJCIDB4QkYsIHRoZW4gcmVhZCB0aHJlZVxuICAvLyAgICBieXRlcyBmcm9tIGlvUXVldWUuIChEbyBub3RoaW5nIHdpdGggdGhvc2UgYnl0ZXMuKVxuICBpZiAoYnVmZmVyWzBdID09PSAweEVGICYmIGJ1ZmZlclsxXSA9PT0gMHhCQiAmJiBidWZmZXJbMl0gPT09IDB4QkYpIHtcbiAgICBidWZmZXIgPSBidWZmZXIuc3ViYXJyYXkoMylcbiAgfVxuXG4gIC8vIDMuIFByb2Nlc3MgYSBxdWV1ZSB3aXRoIGFuIGluc3RhbmNlIG9mIFVURi044oCZc1xuICAvLyAgICBkZWNvZGVyLCBpb1F1ZXVlLCBvdXRwdXQsIGFuZCBcInJlcGxhY2VtZW50XCIuXG4gIGNvbnN0IG91dHB1dCA9IHRleHREZWNvZGVyLmRlY29kZShidWZmZXIpXG5cbiAgLy8gNC4gUmV0dXJuIG91dHB1dC5cbiAgcmV0dXJuIG91dHB1dFxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI3BhcnNlLWpzb24tYnl0ZXMtdG8tYS1qYXZhc2NyaXB0LXZhbHVlXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGJ5dGVzXG4gKi9cbmZ1bmN0aW9uIHBhcnNlSlNPTkZyb21CeXRlcyAoYnl0ZXMpIHtcbiAgcmV0dXJuIEpTT04ucGFyc2UodXRmOERlY29kZUJ5dGVzKGJ5dGVzKSlcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWJvZHktbWltZS10eXBlXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9yZXNwb25zZScpLlJlc3BvbnNlfGltcG9ydCgnLi9yZXF1ZXN0JykuUmVxdWVzdH0gb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIGJvZHlNaW1lVHlwZSAob2JqZWN0KSB7XG4gIGNvbnN0IHsgaGVhZGVyc0xpc3QgfSA9IG9iamVjdFtrU3RhdGVdXG4gIGNvbnN0IGNvbnRlbnRUeXBlID0gaGVhZGVyc0xpc3QuZ2V0KCdjb250ZW50LXR5cGUnKVxuXG4gIGlmIChjb250ZW50VHlwZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIHJldHVybiBwYXJzZU1JTUVUeXBlKGNvbnRlbnRUeXBlKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZXh0cmFjdEJvZHksXG4gIHNhZmVseUV4dHJhY3RCb2R5LFxuICBjbG9uZUJvZHksXG4gIG1peGluQm9keVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3Qge1xuICBJbnZhbGlkQXJndW1lbnRFcnJvcixcbiAgTm90U3VwcG9ydGVkRXJyb3Jcbn0gPSByZXF1aXJlKCcuL2Vycm9ycycpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBrSFRUUDJCdWlsZFJlcXVlc3QsIGtIVFRQMkNvcHlIZWFkZXJzLCBrSFRUUDFCdWlsZFJlcXVlc3QgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi91dGlsJylcblxuLy8gdG9rZW5SZWdFeHAgYW5kIGhlYWRlckNoYXJSZWdleCBoYXZlIGJlZW4gbGlmdGVkIGZyb21cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL21haW4vbGliL19odHRwX2NvbW1vbi5qc1xuXG4vKipcbiAqIFZlcmlmaWVzIHRoYXQgdGhlIGdpdmVuIHZhbCBpcyBhIHZhbGlkIEhUVFAgdG9rZW5cbiAqIHBlciB0aGUgcnVsZXMgZGVmaW5lZCBpbiBSRkMgNzIzMFxuICogU2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4yLjZcbiAqL1xuY29uc3QgdG9rZW5SZWdFeHAgPSAvXltcXF5fYGEtekEtWlxcLTAtOSEjJCUmJyorLnx+XSskL1xuXG4vKipcbiAqIE1hdGNoZXMgaWYgdmFsIGNvbnRhaW5zIGFuIGludmFsaWQgZmllbGQtdmNoYXJcbiAqICBmaWVsZC12YWx1ZSAgICA9ICooIGZpZWxkLWNvbnRlbnQgLyBvYnMtZm9sZCApXG4gKiAgZmllbGQtY29udGVudCAgPSBmaWVsZC12Y2hhciBbIDEqKCBTUCAvIEhUQUIgKSBmaWVsZC12Y2hhciBdXG4gKiAgZmllbGQtdmNoYXIgICAgPSBWQ0hBUiAvIG9icy10ZXh0XG4gKi9cbmNvbnN0IGhlYWRlckNoYXJSZWdleCA9IC9bXlxcdFxceDIwLVxceDdlXFx4ODAtXFx4ZmZdL1xuXG4vLyBWZXJpZmllcyB0aGF0IGEgZ2l2ZW4gcGF0aCBpcyB2YWxpZCBkb2VzIG5vdCBjb250YWluIGNvbnRyb2wgY2hhcnMgXFx4MDAgdG8gXFx4MjBcbmNvbnN0IGludmFsaWRQYXRoUmVnZXggPSAvW15cXHUwMDIxLVxcdTAwZmZdL1xuXG5jb25zdCBrSGFuZGxlciA9IFN5bWJvbCgnaGFuZGxlcicpXG5cbmNvbnN0IGNoYW5uZWxzID0ge31cblxubGV0IGV4dHJhY3RCb2R5XG5cbnRyeSB7XG4gIGNvbnN0IGRpYWdub3N0aWNzQ2hhbm5lbCA9IHJlcXVpcmUoJ2RpYWdub3N0aWNzX2NoYW5uZWwnKVxuICBjaGFubmVscy5jcmVhdGUgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOnJlcXVlc3Q6Y3JlYXRlJylcbiAgY2hhbm5lbHMuYm9keVNlbnQgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOnJlcXVlc3Q6Ym9keVNlbnQnKVxuICBjaGFubmVscy5oZWFkZXJzID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpyZXF1ZXN0OmhlYWRlcnMnKVxuICBjaGFubmVscy50cmFpbGVycyA9IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6cmVxdWVzdDp0cmFpbGVycycpXG4gIGNoYW5uZWxzLmVycm9yID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpyZXF1ZXN0OmVycm9yJylcbn0gY2F0Y2gge1xuICBjaGFubmVscy5jcmVhdGUgPSB7IGhhc1N1YnNjcmliZXJzOiBmYWxzZSB9XG4gIGNoYW5uZWxzLmJvZHlTZW50ID0geyBoYXNTdWJzY3JpYmVyczogZmFsc2UgfVxuICBjaGFubmVscy5oZWFkZXJzID0geyBoYXNTdWJzY3JpYmVyczogZmFsc2UgfVxuICBjaGFubmVscy50cmFpbGVycyA9IHsgaGFzU3Vic2NyaWJlcnM6IGZhbHNlIH1cbiAgY2hhbm5lbHMuZXJyb3IgPSB7IGhhc1N1YnNjcmliZXJzOiBmYWxzZSB9XG59XG5cbmNsYXNzIFJlcXVlc3Qge1xuICBjb25zdHJ1Y3RvciAob3JpZ2luLCB7XG4gICAgcGF0aCxcbiAgICBtZXRob2QsXG4gICAgYm9keSxcbiAgICBoZWFkZXJzLFxuICAgIHF1ZXJ5LFxuICAgIGlkZW1wb3RlbnQsXG4gICAgYmxvY2tpbmcsXG4gICAgdXBncmFkZSxcbiAgICBoZWFkZXJzVGltZW91dCxcbiAgICBib2R5VGltZW91dCxcbiAgICByZXNldCxcbiAgICB0aHJvd09uRXJyb3IsXG4gICAgZXhwZWN0Q29udGludWVcbiAgfSwgaGFuZGxlcikge1xuICAgIGlmICh0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigncGF0aCBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgcGF0aFswXSAhPT0gJy8nICYmXG4gICAgICAhKHBhdGguc3RhcnRzV2l0aCgnaHR0cDovLycpIHx8IHBhdGguc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSkgJiZcbiAgICAgIG1ldGhvZCAhPT0gJ0NPTk5FQ1QnXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3BhdGggbXVzdCBiZSBhbiBhYnNvbHV0ZSBVUkwgb3Igc3RhcnQgd2l0aCBhIHNsYXNoJylcbiAgICB9IGVsc2UgaWYgKGludmFsaWRQYXRoUmVnZXguZXhlYyhwYXRoKSAhPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIHJlcXVlc3QgcGF0aCcpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBtZXRob2QgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ21ldGhvZCBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9IGVsc2UgaWYgKHRva2VuUmVnRXhwLmV4ZWMobWV0aG9kKSA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIHJlcXVlc3QgbWV0aG9kJylcbiAgICB9XG5cbiAgICBpZiAodXBncmFkZSAmJiB0eXBlb2YgdXBncmFkZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndXBncmFkZSBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9XG5cbiAgICBpZiAoaGVhZGVyc1RpbWVvdXQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0Zpbml0ZShoZWFkZXJzVGltZW91dCkgfHwgaGVhZGVyc1RpbWVvdXQgPCAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGhlYWRlcnNUaW1lb3V0JylcbiAgICB9XG5cbiAgICBpZiAoYm9keVRpbWVvdXQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0Zpbml0ZShib2R5VGltZW91dCkgfHwgYm9keVRpbWVvdXQgPCAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGJvZHlUaW1lb3V0JylcbiAgICB9XG5cbiAgICBpZiAocmVzZXQgIT0gbnVsbCAmJiB0eXBlb2YgcmVzZXQgIT09ICdib29sZWFuJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIHJlc2V0JylcbiAgICB9XG5cbiAgICBpZiAoZXhwZWN0Q29udGludWUgIT0gbnVsbCAmJiB0eXBlb2YgZXhwZWN0Q29udGludWUgIT09ICdib29sZWFuJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGV4cGVjdENvbnRpbnVlJylcbiAgICB9XG5cbiAgICB0aGlzLmhlYWRlcnNUaW1lb3V0ID0gaGVhZGVyc1RpbWVvdXRcblxuICAgIHRoaXMuYm9keVRpbWVvdXQgPSBib2R5VGltZW91dFxuXG4gICAgdGhpcy50aHJvd09uRXJyb3IgPSB0aHJvd09uRXJyb3IgPT09IHRydWVcblxuICAgIHRoaXMubWV0aG9kID0gbWV0aG9kXG5cbiAgICB0aGlzLmFib3J0ID0gbnVsbFxuXG4gICAgaWYgKGJvZHkgPT0gbnVsbCkge1xuICAgICAgdGhpcy5ib2R5ID0gbnVsbFxuICAgIH0gZWxzZSBpZiAodXRpbC5pc1N0cmVhbShib2R5KSkge1xuICAgICAgdGhpcy5ib2R5ID0gYm9keVxuXG4gICAgICBjb25zdCByU3RhdGUgPSB0aGlzLmJvZHkuX3JlYWRhYmxlU3RhdGVcbiAgICAgIGlmICghclN0YXRlIHx8ICFyU3RhdGUuYXV0b0Rlc3Ryb3kpIHtcbiAgICAgICAgdGhpcy5lbmRIYW5kbGVyID0gZnVuY3Rpb24gYXV0b0Rlc3Ryb3kgKCkge1xuICAgICAgICAgIHV0aWwuZGVzdHJveSh0aGlzKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuYm9keS5vbignZW5kJywgdGhpcy5lbmRIYW5kbGVyKVxuICAgICAgfVxuXG4gICAgICB0aGlzLmVycm9ySGFuZGxlciA9IGVyciA9PiB7XG4gICAgICAgIGlmICh0aGlzLmFib3J0KSB7XG4gICAgICAgICAgdGhpcy5hYm9ydChlcnIpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5lcnJvciA9IGVyclxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmJvZHkub24oJ2Vycm9yJywgdGhpcy5lcnJvckhhbmRsZXIpXG4gICAgfSBlbHNlIGlmICh1dGlsLmlzQnVmZmVyKGJvZHkpKSB7XG4gICAgICB0aGlzLmJvZHkgPSBib2R5LmJ5dGVMZW5ndGggPyBib2R5IDogbnVsbFxuICAgIH0gZWxzZSBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KGJvZHkpKSB7XG4gICAgICB0aGlzLmJvZHkgPSBib2R5LmJ1ZmZlci5ieXRlTGVuZ3RoID8gQnVmZmVyLmZyb20oYm9keS5idWZmZXIsIGJvZHkuYnl0ZU9mZnNldCwgYm9keS5ieXRlTGVuZ3RoKSA6IG51bGxcbiAgICB9IGVsc2UgaWYgKGJvZHkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgICAgdGhpcy5ib2R5ID0gYm9keS5ieXRlTGVuZ3RoID8gQnVmZmVyLmZyb20oYm9keSkgOiBudWxsXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuYm9keSA9IGJvZHkubGVuZ3RoID8gQnVmZmVyLmZyb20oYm9keSkgOiBudWxsXG4gICAgfSBlbHNlIGlmICh1dGlsLmlzRm9ybURhdGFMaWtlKGJvZHkpIHx8IHV0aWwuaXNJdGVyYWJsZShib2R5KSB8fCB1dGlsLmlzQmxvYkxpa2UoYm9keSkpIHtcbiAgICAgIHRoaXMuYm9keSA9IGJvZHlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdib2R5IG11c3QgYmUgYSBzdHJpbmcsIGEgQnVmZmVyLCBhIFJlYWRhYmxlIHN0cmVhbSwgYW4gaXRlcmFibGUsIG9yIGFuIGFzeW5jIGl0ZXJhYmxlJylcbiAgICB9XG5cbiAgICB0aGlzLmNvbXBsZXRlZCA9IGZhbHNlXG5cbiAgICB0aGlzLmFib3J0ZWQgPSBmYWxzZVxuXG4gICAgdGhpcy51cGdyYWRlID0gdXBncmFkZSB8fCBudWxsXG5cbiAgICB0aGlzLnBhdGggPSBxdWVyeSA/IHV0aWwuYnVpbGRVUkwocGF0aCwgcXVlcnkpIDogcGF0aFxuXG4gICAgdGhpcy5vcmlnaW4gPSBvcmlnaW5cblxuICAgIHRoaXMuaWRlbXBvdGVudCA9IGlkZW1wb3RlbnQgPT0gbnVsbFxuICAgICAgPyBtZXRob2QgPT09ICdIRUFEJyB8fCBtZXRob2QgPT09ICdHRVQnXG4gICAgICA6IGlkZW1wb3RlbnRcblxuICAgIHRoaXMuYmxvY2tpbmcgPSBibG9ja2luZyA9PSBudWxsID8gZmFsc2UgOiBibG9ja2luZ1xuXG4gICAgdGhpcy5yZXNldCA9IHJlc2V0ID09IG51bGwgPyBudWxsIDogcmVzZXRcblxuICAgIHRoaXMuaG9zdCA9IG51bGxcblxuICAgIHRoaXMuY29udGVudExlbmd0aCA9IG51bGxcblxuICAgIHRoaXMuY29udGVudFR5cGUgPSBudWxsXG5cbiAgICB0aGlzLmhlYWRlcnMgPSAnJ1xuXG4gICAgLy8gT25seSBmb3IgSDJcbiAgICB0aGlzLmV4cGVjdENvbnRpbnVlID0gZXhwZWN0Q29udGludWUgIT0gbnVsbCA/IGV4cGVjdENvbnRpbnVlIDogZmFsc2VcblxuICAgIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgICBpZiAoaGVhZGVycy5sZW5ndGggJSAyICE9PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaGVhZGVycyBhcnJheSBtdXN0IGJlIGV2ZW4nKVxuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgIHByb2Nlc3NIZWFkZXIodGhpcywgaGVhZGVyc1tpXSwgaGVhZGVyc1tpICsgMV0pXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChoZWFkZXJzICYmIHR5cGVvZiBoZWFkZXJzID09PSAnb2JqZWN0Jykge1xuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGhlYWRlcnMpXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXVxuICAgICAgICBwcm9jZXNzSGVhZGVyKHRoaXMsIGtleSwgaGVhZGVyc1trZXldKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaGVhZGVycyAhPSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2hlYWRlcnMgbXVzdCBiZSBhbiBvYmplY3Qgb3IgYW4gYXJyYXknKVxuICAgIH1cblxuICAgIGlmICh1dGlsLmlzRm9ybURhdGFMaWtlKHRoaXMuYm9keSkpIHtcbiAgICAgIGlmICh1dGlsLm5vZGVNYWpvciA8IDE2IHx8ICh1dGlsLm5vZGVNYWpvciA9PT0gMTYgJiYgdXRpbC5ub2RlTWlub3IgPCA4KSkge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0Zvcm0tRGF0YSBib2RpZXMgYXJlIG9ubHkgc3VwcG9ydGVkIGluIG5vZGUgdjE2LjggYW5kIG5ld2VyLicpXG4gICAgICB9XG5cbiAgICAgIGlmICghZXh0cmFjdEJvZHkpIHtcbiAgICAgICAgZXh0cmFjdEJvZHkgPSByZXF1aXJlKCcuLi9mZXRjaC9ib2R5LmpzJykuZXh0cmFjdEJvZHlcbiAgICAgIH1cblxuICAgICAgY29uc3QgW2JvZHlTdHJlYW0sIGNvbnRlbnRUeXBlXSA9IGV4dHJhY3RCb2R5KGJvZHkpXG4gICAgICBpZiAodGhpcy5jb250ZW50VHlwZSA9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuY29udGVudFR5cGUgPSBjb250ZW50VHlwZVxuICAgICAgICB0aGlzLmhlYWRlcnMgKz0gYGNvbnRlbnQtdHlwZTogJHtjb250ZW50VHlwZX1cXHJcXG5gXG4gICAgICB9XG4gICAgICB0aGlzLmJvZHkgPSBib2R5U3RyZWFtLnN0cmVhbVxuICAgICAgdGhpcy5jb250ZW50TGVuZ3RoID0gYm9keVN0cmVhbS5sZW5ndGhcbiAgICB9IGVsc2UgaWYgKHV0aWwuaXNCbG9iTGlrZShib2R5KSAmJiB0aGlzLmNvbnRlbnRUeXBlID09IG51bGwgJiYgYm9keS50eXBlKSB7XG4gICAgICB0aGlzLmNvbnRlbnRUeXBlID0gYm9keS50eXBlXG4gICAgICB0aGlzLmhlYWRlcnMgKz0gYGNvbnRlbnQtdHlwZTogJHtib2R5LnR5cGV9XFxyXFxuYFxuICAgIH1cblxuICAgIHV0aWwudmFsaWRhdGVIYW5kbGVyKGhhbmRsZXIsIG1ldGhvZCwgdXBncmFkZSlcblxuICAgIHRoaXMuc2VydmVybmFtZSA9IHV0aWwuZ2V0U2VydmVyTmFtZSh0aGlzLmhvc3QpXG5cbiAgICB0aGlzW2tIYW5kbGVyXSA9IGhhbmRsZXJcblxuICAgIGlmIChjaGFubmVscy5jcmVhdGUuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICAgIGNoYW5uZWxzLmNyZWF0ZS5wdWJsaXNoKHsgcmVxdWVzdDogdGhpcyB9KVxuICAgIH1cbiAgfVxuXG4gIG9uQm9keVNlbnQgKGNodW5rKSB7XG4gICAgaWYgKHRoaXNba0hhbmRsZXJdLm9uQm9keVNlbnQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB0aGlzW2tIYW5kbGVyXS5vbkJvZHlTZW50KGNodW5rKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMuYWJvcnQoZXJyKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uUmVxdWVzdFNlbnQgKCkge1xuICAgIGlmIChjaGFubmVscy5ib2R5U2VudC5oYXNTdWJzY3JpYmVycykge1xuICAgICAgY2hhbm5lbHMuYm9keVNlbnQucHVibGlzaCh7IHJlcXVlc3Q6IHRoaXMgfSlcbiAgICB9XG5cbiAgICBpZiAodGhpc1trSGFuZGxlcl0ub25SZXF1ZXN0U2VudCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uUmVxdWVzdFNlbnQoKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMuYWJvcnQoZXJyKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uQ29ubmVjdCAoYWJvcnQpIHtcbiAgICBhc3NlcnQoIXRoaXMuYWJvcnRlZClcbiAgICBhc3NlcnQoIXRoaXMuY29tcGxldGVkKVxuXG4gICAgaWYgKHRoaXMuZXJyb3IpIHtcbiAgICAgIGFib3J0KHRoaXMuZXJyb3IpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uQ29ubmVjdChhYm9ydClcbiAgICB9XG4gIH1cblxuICBvbkhlYWRlcnMgKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHJlc3VtZSwgc3RhdHVzVGV4dCkge1xuICAgIGFzc2VydCghdGhpcy5hYm9ydGVkKVxuICAgIGFzc2VydCghdGhpcy5jb21wbGV0ZWQpXG5cbiAgICBpZiAoY2hhbm5lbHMuaGVhZGVycy5oYXNTdWJzY3JpYmVycykge1xuICAgICAgY2hhbm5lbHMuaGVhZGVycy5wdWJsaXNoKHsgcmVxdWVzdDogdGhpcywgcmVzcG9uc2U6IHsgc3RhdHVzQ29kZSwgaGVhZGVycywgc3RhdHVzVGV4dCB9IH0pXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzW2tIYW5kbGVyXS5vbkhlYWRlcnMoc3RhdHVzQ29kZSwgaGVhZGVycywgcmVzdW1lLCBzdGF0dXNUZXh0KVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5hYm9ydChlcnIpXG4gICAgfVxuICB9XG5cbiAgb25EYXRhIChjaHVuaykge1xuICAgIGFzc2VydCghdGhpcy5hYm9ydGVkKVxuICAgIGFzc2VydCghdGhpcy5jb21wbGV0ZWQpXG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uRGF0YShjaHVuaylcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuYWJvcnQoZXJyKVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgb25VcGdyYWRlIChzdGF0dXNDb2RlLCBoZWFkZXJzLCBzb2NrZXQpIHtcbiAgICBhc3NlcnQoIXRoaXMuYWJvcnRlZClcbiAgICBhc3NlcnQoIXRoaXMuY29tcGxldGVkKVxuXG4gICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uVXBncmFkZShzdGF0dXNDb2RlLCBoZWFkZXJzLCBzb2NrZXQpXG4gIH1cblxuICBvbkNvbXBsZXRlICh0cmFpbGVycykge1xuICAgIHRoaXMub25GaW5hbGx5KClcblxuICAgIGFzc2VydCghdGhpcy5hYm9ydGVkKVxuXG4gICAgdGhpcy5jb21wbGV0ZWQgPSB0cnVlXG4gICAgaWYgKGNoYW5uZWxzLnRyYWlsZXJzLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICBjaGFubmVscy50cmFpbGVycy5wdWJsaXNoKHsgcmVxdWVzdDogdGhpcywgdHJhaWxlcnMgfSlcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uQ29tcGxldGUodHJhaWxlcnMpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBUT0RPIChmaXgpOiBUaGlzIG1pZ2h0IGJlIGEgYmFkIGlkZWE/XG4gICAgICB0aGlzLm9uRXJyb3IoZXJyKVxuICAgIH1cbiAgfVxuXG4gIG9uRXJyb3IgKGVycm9yKSB7XG4gICAgdGhpcy5vbkZpbmFsbHkoKVxuXG4gICAgaWYgKGNoYW5uZWxzLmVycm9yLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICBjaGFubmVscy5lcnJvci5wdWJsaXNoKHsgcmVxdWVzdDogdGhpcywgZXJyb3IgfSlcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hYm9ydGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdGhpcy5hYm9ydGVkID0gdHJ1ZVxuXG4gICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uRXJyb3IoZXJyb3IpXG4gIH1cblxuICBvbkZpbmFsbHkgKCkge1xuICAgIGlmICh0aGlzLmVycm9ySGFuZGxlcikge1xuICAgICAgdGhpcy5ib2R5Lm9mZignZXJyb3InLCB0aGlzLmVycm9ySGFuZGxlcilcbiAgICAgIHRoaXMuZXJyb3JIYW5kbGVyID0gbnVsbFxuICAgIH1cblxuICAgIGlmICh0aGlzLmVuZEhhbmRsZXIpIHtcbiAgICAgIHRoaXMuYm9keS5vZmYoJ2VuZCcsIHRoaXMuZW5kSGFuZGxlcilcbiAgICAgIHRoaXMuZW5kSGFuZGxlciA9IG51bGxcbiAgICB9XG4gIH1cblxuICAvLyBUT0RPOiBhZGp1c3QgdG8gc3VwcG9ydCBIMlxuICBhZGRIZWFkZXIgKGtleSwgdmFsdWUpIHtcbiAgICBwcm9jZXNzSGVhZGVyKHRoaXMsIGtleSwgdmFsdWUpXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIHN0YXRpYyBba0hUVFAxQnVpbGRSZXF1ZXN0XSAob3JpZ2luLCBvcHRzLCBoYW5kbGVyKSB7XG4gICAgLy8gVE9ETzogTWlncmF0ZSBoZWFkZXIgcGFyc2luZyBoZXJlLCB0byBtYWtlIFJlcXVlc3RzXG4gICAgLy8gSFRUUCBhZ25vc3RpY1xuICAgIHJldHVybiBuZXcgUmVxdWVzdChvcmlnaW4sIG9wdHMsIGhhbmRsZXIpXG4gIH1cblxuICBzdGF0aWMgW2tIVFRQMkJ1aWxkUmVxdWVzdF0gKG9yaWdpbiwgb3B0cywgaGFuZGxlcikge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBvcHRzLmhlYWRlcnNcbiAgICBvcHRzID0geyAuLi5vcHRzLCBoZWFkZXJzOiBudWxsIH1cblxuICAgIGNvbnN0IHJlcXVlc3QgPSBuZXcgUmVxdWVzdChvcmlnaW4sIG9wdHMsIGhhbmRsZXIpXG5cbiAgICByZXF1ZXN0LmhlYWRlcnMgPSB7fVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICAgIGlmIChoZWFkZXJzLmxlbmd0aCAlIDIgIT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdoZWFkZXJzIGFycmF5IG11c3QgYmUgZXZlbicpXG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgcHJvY2Vzc0hlYWRlcihyZXF1ZXN0LCBoZWFkZXJzW2ldLCBoZWFkZXJzW2kgKyAxXSwgdHJ1ZSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGhlYWRlcnMgJiYgdHlwZW9mIGhlYWRlcnMgPT09ICdvYmplY3QnKSB7XG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoaGVhZGVycylcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBrZXkgPSBrZXlzW2ldXG4gICAgICAgIHByb2Nlc3NIZWFkZXIocmVxdWVzdCwga2V5LCBoZWFkZXJzW2tleV0sIHRydWUpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChoZWFkZXJzICE9IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaGVhZGVycyBtdXN0IGJlIGFuIG9iamVjdCBvciBhbiBhcnJheScpXG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcXVlc3RcbiAgfVxuXG4gIHN0YXRpYyBba0hUVFAyQ29weUhlYWRlcnNdIChyYXcpIHtcbiAgICBjb25zdCByYXdIZWFkZXJzID0gcmF3LnNwbGl0KCdcXHJcXG4nKVxuICAgIGNvbnN0IGhlYWRlcnMgPSB7fVxuXG4gICAgZm9yIChjb25zdCBoZWFkZXIgb2YgcmF3SGVhZGVycykge1xuICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0gaGVhZGVyLnNwbGl0KCc6ICcpXG5cbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlLmxlbmd0aCA9PT0gMCkgY29udGludWVcblxuICAgICAgaWYgKGhlYWRlcnNba2V5XSkgaGVhZGVyc1trZXldICs9IGAsJHt2YWx1ZX1gXG4gICAgICBlbHNlIGhlYWRlcnNba2V5XSA9IHZhbHVlXG4gICAgfVxuXG4gICAgcmV0dXJuIGhlYWRlcnNcbiAgfVxufVxuXG5mdW5jdGlvbiBwcm9jZXNzSGVhZGVyVmFsdWUgKGtleSwgdmFsLCBza2lwQXBwZW5kKSB7XG4gIGlmICh2YWwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoYGludmFsaWQgJHtrZXl9IGhlYWRlcmApXG4gIH1cblxuICB2YWwgPSB2YWwgIT0gbnVsbCA/IGAke3ZhbH1gIDogJydcblxuICBpZiAoaGVhZGVyQ2hhclJlZ2V4LmV4ZWModmFsKSAhPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihgaW52YWxpZCAke2tleX0gaGVhZGVyYClcbiAgfVxuXG4gIHJldHVybiBza2lwQXBwZW5kID8gdmFsIDogYCR7a2V5fTogJHt2YWx9XFxyXFxuYFxufVxuXG5mdW5jdGlvbiBwcm9jZXNzSGVhZGVyIChyZXF1ZXN0LCBrZXksIHZhbCwgc2tpcEFwcGVuZCA9IGZhbHNlKSB7XG4gIGlmICh2YWwgJiYgKHR5cGVvZiB2YWwgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbCkpKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKGBpbnZhbGlkICR7a2V5fSBoZWFkZXJgKVxuICB9IGVsc2UgaWYgKHZhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoXG4gICAgcmVxdWVzdC5ob3N0ID09PSBudWxsICYmXG4gICAga2V5Lmxlbmd0aCA9PT0gNCAmJlxuICAgIGtleS50b0xvd2VyQ2FzZSgpID09PSAnaG9zdCdcbiAgKSB7XG4gICAgaWYgKGhlYWRlckNoYXJSZWdleC5leGVjKHZhbCkgIT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihgaW52YWxpZCAke2tleX0gaGVhZGVyYClcbiAgICB9XG4gICAgLy8gQ29uc3VtZWQgYnkgQ2xpZW50XG4gICAgcmVxdWVzdC5ob3N0ID0gdmFsXG4gIH0gZWxzZSBpZiAoXG4gICAgcmVxdWVzdC5jb250ZW50TGVuZ3RoID09PSBudWxsICYmXG4gICAga2V5Lmxlbmd0aCA9PT0gMTQgJiZcbiAgICBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtbGVuZ3RoJ1xuICApIHtcbiAgICByZXF1ZXN0LmNvbnRlbnRMZW5ndGggPSBwYXJzZUludCh2YWwsIDEwKVxuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHJlcXVlc3QuY29udGVudExlbmd0aCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjb250ZW50LWxlbmd0aCBoZWFkZXInKVxuICAgIH1cbiAgfSBlbHNlIGlmIChcbiAgICByZXF1ZXN0LmNvbnRlbnRUeXBlID09PSBudWxsICYmXG4gICAga2V5Lmxlbmd0aCA9PT0gMTIgJiZcbiAgICBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtdHlwZSdcbiAgKSB7XG4gICAgcmVxdWVzdC5jb250ZW50VHlwZSA9IHZhbFxuICAgIGlmIChza2lwQXBwZW5kKSByZXF1ZXN0LmhlYWRlcnNba2V5XSA9IHByb2Nlc3NIZWFkZXJWYWx1ZShrZXksIHZhbCwgc2tpcEFwcGVuZClcbiAgICBlbHNlIHJlcXVlc3QuaGVhZGVycyArPSBwcm9jZXNzSGVhZGVyVmFsdWUoa2V5LCB2YWwpXG4gIH0gZWxzZSBpZiAoXG4gICAga2V5Lmxlbmd0aCA9PT0gMTcgJiZcbiAgICBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3RyYW5zZmVyLWVuY29kaW5nJ1xuICApIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgdHJhbnNmZXItZW5jb2RpbmcgaGVhZGVyJylcbiAgfSBlbHNlIGlmIChcbiAgICBrZXkubGVuZ3RoID09PSAxMCAmJlxuICAgIGtleS50b0xvd2VyQ2FzZSgpID09PSAnY29ubmVjdGlvbidcbiAgKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0eXBlb2YgdmFsID09PSAnc3RyaW5nJyA/IHZhbC50b0xvd2VyQ2FzZSgpIDogbnVsbFxuICAgIGlmICh2YWx1ZSAhPT0gJ2Nsb3NlJyAmJiB2YWx1ZSAhPT0gJ2tlZXAtYWxpdmUnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY29ubmVjdGlvbiBoZWFkZXInKVxuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09ICdjbG9zZScpIHtcbiAgICAgIHJlcXVlc3QucmVzZXQgPSB0cnVlXG4gICAgfVxuICB9IGVsc2UgaWYgKFxuICAgIGtleS5sZW5ndGggPT09IDEwICYmXG4gICAga2V5LnRvTG93ZXJDYXNlKCkgPT09ICdrZWVwLWFsaXZlJ1xuICApIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQga2VlcC1hbGl2ZSBoZWFkZXInKVxuICB9IGVsc2UgaWYgKFxuICAgIGtleS5sZW5ndGggPT09IDcgJiZcbiAgICBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3VwZ3JhZGUnXG4gICkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCB1cGdyYWRlIGhlYWRlcicpXG4gIH0gZWxzZSBpZiAoXG4gICAga2V5Lmxlbmd0aCA9PT0gNiAmJlxuICAgIGtleS50b0xvd2VyQ2FzZSgpID09PSAnZXhwZWN0J1xuICApIHtcbiAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkRXJyb3IoJ2V4cGVjdCBoZWFkZXIgbm90IHN1cHBvcnRlZCcpXG4gIH0gZWxzZSBpZiAodG9rZW5SZWdFeHAuZXhlYyhrZXkpID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGhlYWRlciBrZXknKVxuICB9IGVsc2Uge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChza2lwQXBwZW5kKSB7XG4gICAgICAgICAgaWYgKHJlcXVlc3QuaGVhZGVyc1trZXldKSByZXF1ZXN0LmhlYWRlcnNba2V5XSArPSBgLCR7cHJvY2Vzc0hlYWRlclZhbHVlKGtleSwgdmFsW2ldLCBza2lwQXBwZW5kKX1gXG4gICAgICAgICAgZWxzZSByZXF1ZXN0LmhlYWRlcnNba2V5XSA9IHByb2Nlc3NIZWFkZXJWYWx1ZShrZXksIHZhbFtpXSwgc2tpcEFwcGVuZClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXF1ZXN0LmhlYWRlcnMgKz0gcHJvY2Vzc0hlYWRlclZhbHVlKGtleSwgdmFsW2ldKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChza2lwQXBwZW5kKSByZXF1ZXN0LmhlYWRlcnNba2V5XSA9IHByb2Nlc3NIZWFkZXJWYWx1ZShrZXksIHZhbCwgc2tpcEFwcGVuZClcbiAgICAgIGVsc2UgcmVxdWVzdC5oZWFkZXJzICs9IHByb2Nlc3NIZWFkZXJWYWx1ZShrZXksIHZhbClcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBSZXF1ZXN0XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudHMnKVxuXG5jbGFzcyBEaXNwYXRjaGVyIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgZGlzcGF0Y2ggKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignbm90IGltcGxlbWVudGVkJylcbiAgfVxuXG4gIGNsb3NlICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBpbXBsZW1lbnRlZCcpXG4gIH1cblxuICBkZXN0cm95ICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBpbXBsZW1lbnRlZCcpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBEaXNwYXRjaGVyXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBEaXNwYXRjaGVyID0gcmVxdWlyZSgnLi9kaXNwYXRjaGVyJylcbmNvbnN0IHtcbiAgQ2xpZW50RGVzdHJveWVkRXJyb3IsXG4gIENsaWVudENsb3NlZEVycm9yLFxuICBJbnZhbGlkQXJndW1lbnRFcnJvclxufSA9IHJlcXVpcmUoJy4vY29yZS9lcnJvcnMnKVxuY29uc3QgeyBrRGVzdHJveSwga0Nsb3NlLCBrRGlzcGF0Y2gsIGtJbnRlcmNlcHRvcnMgfSA9IHJlcXVpcmUoJy4vY29yZS9zeW1ib2xzJylcblxuY29uc3Qga0Rlc3Ryb3llZCA9IFN5bWJvbCgnZGVzdHJveWVkJylcbmNvbnN0IGtDbG9zZWQgPSBTeW1ib2woJ2Nsb3NlZCcpXG5jb25zdCBrT25EZXN0cm95ZWQgPSBTeW1ib2woJ29uRGVzdHJveWVkJylcbmNvbnN0IGtPbkNsb3NlZCA9IFN5bWJvbCgnb25DbG9zZWQnKVxuY29uc3Qga0ludGVyY2VwdGVkRGlzcGF0Y2ggPSBTeW1ib2woJ0ludGVyY2VwdGVkIERpc3BhdGNoJylcblxuY2xhc3MgRGlzcGF0Y2hlckJhc2UgZXh0ZW5kcyBEaXNwYXRjaGVyIHtcbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXNba0Rlc3Ryb3llZF0gPSBmYWxzZVxuICAgIHRoaXNba09uRGVzdHJveWVkXSA9IG51bGxcbiAgICB0aGlzW2tDbG9zZWRdID0gZmFsc2VcbiAgICB0aGlzW2tPbkNsb3NlZF0gPSBbXVxuICB9XG5cbiAgZ2V0IGRlc3Ryb3llZCAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0Rlc3Ryb3llZF1cbiAgfVxuXG4gIGdldCBjbG9zZWQgKCkge1xuICAgIHJldHVybiB0aGlzW2tDbG9zZWRdXG4gIH1cblxuICBnZXQgaW50ZXJjZXB0b3JzICgpIHtcbiAgICByZXR1cm4gdGhpc1trSW50ZXJjZXB0b3JzXVxuICB9XG5cbiAgc2V0IGludGVyY2VwdG9ycyAobmV3SW50ZXJjZXB0b3JzKSB7XG4gICAgaWYgKG5ld0ludGVyY2VwdG9ycykge1xuICAgICAgZm9yIChsZXQgaSA9IG5ld0ludGVyY2VwdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBjb25zdCBpbnRlcmNlcHRvciA9IHRoaXNba0ludGVyY2VwdG9yc11baV1cbiAgICAgICAgaWYgKHR5cGVvZiBpbnRlcmNlcHRvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW50ZXJjZXB0b3IgbXVzdCBiZSBhbiBmdW5jdGlvbicpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzW2tJbnRlcmNlcHRvcnNdID0gbmV3SW50ZXJjZXB0b3JzXG4gIH1cblxuICBjbG9zZSAoY2FsbGJhY2spIHtcbiAgICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgdGhpcy5jbG9zZSgoZXJyLCBkYXRhKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGVyciA/IHJlamVjdChlcnIpIDogcmVzb2x2ZShkYXRhKVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY2FsbGJhY2snKVxuICAgIH1cblxuICAgIGlmICh0aGlzW2tEZXN0cm95ZWRdKSB7XG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhuZXcgQ2xpZW50RGVzdHJveWVkRXJyb3IoKSwgbnVsbCkpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAodGhpc1trQ2xvc2VkXSkge1xuICAgICAgaWYgKHRoaXNba09uQ2xvc2VkXSkge1xuICAgICAgICB0aGlzW2tPbkNsb3NlZF0ucHVzaChjYWxsYmFjaylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGNhbGxiYWNrKG51bGwsIG51bGwpKVxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpc1trQ2xvc2VkXSA9IHRydWVcbiAgICB0aGlzW2tPbkNsb3NlZF0ucHVzaChjYWxsYmFjaylcblxuICAgIGNvbnN0IG9uQ2xvc2VkID0gKCkgPT4ge1xuICAgICAgY29uc3QgY2FsbGJhY2tzID0gdGhpc1trT25DbG9zZWRdXG4gICAgICB0aGlzW2tPbkNsb3NlZF0gPSBudWxsXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNhbGxiYWNrcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjYWxsYmFja3NbaV0obnVsbCwgbnVsbClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTaG91bGQgbm90IGVycm9yLlxuICAgIHRoaXNba0Nsb3NlXSgpXG4gICAgICAudGhlbigoKSA9PiB0aGlzLmRlc3Ryb3koKSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgcXVldWVNaWNyb3Rhc2sob25DbG9zZWQpXG4gICAgICB9KVxuICB9XG5cbiAgZGVzdHJveSAoZXJyLCBjYWxsYmFjaykge1xuICAgIGlmICh0eXBlb2YgZXJyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjYWxsYmFjayA9IGVyclxuICAgICAgZXJyID0gbnVsbFxuICAgIH1cblxuICAgIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICB0aGlzLmRlc3Ryb3koZXJyLCAoZXJyLCBkYXRhKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGVyciA/IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBzaG91bGQgbmV2ZXIgZXJyb3IgKi8gcmVqZWN0KGVycikgOiByZXNvbHZlKGRhdGEpXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjYWxsYmFjaycpXG4gICAgfVxuXG4gICAgaWYgKHRoaXNba0Rlc3Ryb3llZF0pIHtcbiAgICAgIGlmICh0aGlzW2tPbkRlc3Ryb3llZF0pIHtcbiAgICAgICAgdGhpc1trT25EZXN0cm95ZWRdLnB1c2goY2FsbGJhY2spXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhudWxsLCBudWxsKSlcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghZXJyKSB7XG4gICAgICBlcnIgPSBuZXcgQ2xpZW50RGVzdHJveWVkRXJyb3IoKVxuICAgIH1cblxuICAgIHRoaXNba0Rlc3Ryb3llZF0gPSB0cnVlXG4gICAgdGhpc1trT25EZXN0cm95ZWRdID0gdGhpc1trT25EZXN0cm95ZWRdIHx8IFtdXG4gICAgdGhpc1trT25EZXN0cm95ZWRdLnB1c2goY2FsbGJhY2spXG5cbiAgICBjb25zdCBvbkRlc3Ryb3llZCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGNhbGxiYWNrcyA9IHRoaXNba09uRGVzdHJveWVkXVxuICAgICAgdGhpc1trT25EZXN0cm95ZWRdID0gbnVsbFxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjYWxsYmFja3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY2FsbGJhY2tzW2ldKG51bGwsIG51bGwpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2hvdWxkIG5vdCBlcnJvci5cbiAgICB0aGlzW2tEZXN0cm95XShlcnIpLnRoZW4oKCkgPT4ge1xuICAgICAgcXVldWVNaWNyb3Rhc2sob25EZXN0cm95ZWQpXG4gICAgfSlcbiAgfVxuXG4gIFtrSW50ZXJjZXB0ZWREaXNwYXRjaF0gKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBpZiAoIXRoaXNba0ludGVyY2VwdG9yc10gfHwgdGhpc1trSW50ZXJjZXB0b3JzXS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXNba0ludGVyY2VwdGVkRGlzcGF0Y2hdID0gdGhpc1trRGlzcGF0Y2hdXG4gICAgICByZXR1cm4gdGhpc1trRGlzcGF0Y2hdKG9wdHMsIGhhbmRsZXIpXG4gICAgfVxuXG4gICAgbGV0IGRpc3BhdGNoID0gdGhpc1trRGlzcGF0Y2hdLmJpbmQodGhpcylcbiAgICBmb3IgKGxldCBpID0gdGhpc1trSW50ZXJjZXB0b3JzXS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgZGlzcGF0Y2ggPSB0aGlzW2tJbnRlcmNlcHRvcnNdW2ldKGRpc3BhdGNoKVxuICAgIH1cbiAgICB0aGlzW2tJbnRlcmNlcHRlZERpc3BhdGNoXSA9IGRpc3BhdGNoXG4gICAgcmV0dXJuIGRpc3BhdGNoKG9wdHMsIGhhbmRsZXIpXG4gIH1cblxuICBkaXNwYXRjaCAob3B0cywgaGFuZGxlcikge1xuICAgIGlmICghaGFuZGxlciB8fCB0eXBlb2YgaGFuZGxlciAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaGFuZGxlciBtdXN0IGJlIGFuIG9iamVjdCcpXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGlmICghb3B0cyB8fCB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdvcHRzIG11c3QgYmUgYW4gb2JqZWN0LicpXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzW2tEZXN0cm95ZWRdIHx8IHRoaXNba09uRGVzdHJveWVkXSkge1xuICAgICAgICB0aHJvdyBuZXcgQ2xpZW50RGVzdHJveWVkRXJyb3IoKVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpc1trQ2xvc2VkXSkge1xuICAgICAgICB0aHJvdyBuZXcgQ2xpZW50Q2xvc2VkRXJyb3IoKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpc1trSW50ZXJjZXB0ZWREaXNwYXRjaF0ob3B0cywgaGFuZGxlcilcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICh0eXBlb2YgaGFuZGxlci5vbkVycm9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkVycm9yIG1ldGhvZCcpXG4gICAgICB9XG5cbiAgICAgIGhhbmRsZXIub25FcnJvcihlcnIpXG5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IERpc3BhdGNoZXJCYXNlXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBuZXQgPSByZXF1aXJlKCduZXQnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciwgQ29ubmVjdFRpbWVvdXRFcnJvciB9ID0gcmVxdWlyZSgnLi9lcnJvcnMnKVxuXG5sZXQgdGxzIC8vIGluY2x1ZGUgdGxzIGNvbmRpdGlvbmFsbHkgc2luY2UgaXQgaXMgbm90IGFsd2F5cyBhdmFpbGFibGVcblxuLy8gVE9ETzogc2Vzc2lvbiByZS11c2UgZG9lcyBub3Qgd2FpdCBmb3IgdGhlIGZpcnN0XG4vLyBjb25uZWN0aW9uIHRvIHJlc29sdmUgdGhlIHNlc3Npb24gYW5kIG1pZ2h0IHRoZXJlZm9yZVxuLy8gcmVzb2x2ZSB0aGUgc2FtZSBzZXJ2ZXJuYW1lIG11bHRpcGxlIHRpbWVzIGV2ZW4gd2hlblxuLy8gcmUtdXNlIGlzIGVuYWJsZWQuXG5cbmxldCBTZXNzaW9uQ2FjaGVcbi8vIEZJWE1FOiByZW1vdmUgd29ya2Fyb3VuZCB3aGVuIHRoZSBOb2RlIGJ1ZyBpcyBmaXhlZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2lzc3Vlcy80OTM0NCNpc3N1ZWNvbW1lbnQtMTc0MTc3NjMwOFxuaWYgKGdsb2JhbC5GaW5hbGl6YXRpb25SZWdpc3RyeSAmJiAhcHJvY2Vzcy5lbnYuTk9ERV9WOF9DT1ZFUkFHRSkge1xuICBTZXNzaW9uQ2FjaGUgPSBjbGFzcyBXZWFrU2Vzc2lvbkNhY2hlIHtcbiAgICBjb25zdHJ1Y3RvciAobWF4Q2FjaGVkU2Vzc2lvbnMpIHtcbiAgICAgIHRoaXMuX21heENhY2hlZFNlc3Npb25zID0gbWF4Q2FjaGVkU2Vzc2lvbnNcbiAgICAgIHRoaXMuX3Nlc3Npb25DYWNoZSA9IG5ldyBNYXAoKVxuICAgICAgdGhpcy5fc2Vzc2lvblJlZ2lzdHJ5ID0gbmV3IGdsb2JhbC5GaW5hbGl6YXRpb25SZWdpc3RyeSgoa2V5KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9zZXNzaW9uQ2FjaGUuc2l6ZSA8IHRoaXMuX21heENhY2hlZFNlc3Npb25zKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZWYgPSB0aGlzLl9zZXNzaW9uQ2FjaGUuZ2V0KGtleSlcbiAgICAgICAgaWYgKHJlZiAhPT0gdW5kZWZpbmVkICYmIHJlZi5kZXJlZigpID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLl9zZXNzaW9uQ2FjaGUuZGVsZXRlKGtleSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBnZXQgKHNlc3Npb25LZXkpIHtcbiAgICAgIGNvbnN0IHJlZiA9IHRoaXMuX3Nlc3Npb25DYWNoZS5nZXQoc2Vzc2lvbktleSlcbiAgICAgIHJldHVybiByZWYgPyByZWYuZGVyZWYoKSA6IG51bGxcbiAgICB9XG5cbiAgICBzZXQgKHNlc3Npb25LZXksIHNlc3Npb24pIHtcbiAgICAgIGlmICh0aGlzLl9tYXhDYWNoZWRTZXNzaW9ucyA9PT0gMCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgdGhpcy5fc2Vzc2lvbkNhY2hlLnNldChzZXNzaW9uS2V5LCBuZXcgV2Vha1JlZihzZXNzaW9uKSlcbiAgICAgIHRoaXMuX3Nlc3Npb25SZWdpc3RyeS5yZWdpc3RlcihzZXNzaW9uLCBzZXNzaW9uS2V5KVxuICAgIH1cbiAgfVxufSBlbHNlIHtcbiAgU2Vzc2lvbkNhY2hlID0gY2xhc3MgU2ltcGxlU2Vzc2lvbkNhY2hlIHtcbiAgICBjb25zdHJ1Y3RvciAobWF4Q2FjaGVkU2Vzc2lvbnMpIHtcbiAgICAgIHRoaXMuX21heENhY2hlZFNlc3Npb25zID0gbWF4Q2FjaGVkU2Vzc2lvbnNcbiAgICAgIHRoaXMuX3Nlc3Npb25DYWNoZSA9IG5ldyBNYXAoKVxuICAgIH1cblxuICAgIGdldCAoc2Vzc2lvbktleSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3Nlc3Npb25DYWNoZS5nZXQoc2Vzc2lvbktleSlcbiAgICB9XG5cbiAgICBzZXQgKHNlc3Npb25LZXksIHNlc3Npb24pIHtcbiAgICAgIGlmICh0aGlzLl9tYXhDYWNoZWRTZXNzaW9ucyA9PT0gMCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX3Nlc3Npb25DYWNoZS5zaXplID49IHRoaXMuX21heENhY2hlZFNlc3Npb25zKSB7XG4gICAgICAgIC8vIHJlbW92ZSB0aGUgb2xkZXN0IHNlc3Npb25cbiAgICAgICAgY29uc3QgeyB2YWx1ZTogb2xkZXN0S2V5IH0gPSB0aGlzLl9zZXNzaW9uQ2FjaGUua2V5cygpLm5leHQoKVxuICAgICAgICB0aGlzLl9zZXNzaW9uQ2FjaGUuZGVsZXRlKG9sZGVzdEtleSlcbiAgICAgIH1cblxuICAgICAgdGhpcy5fc2Vzc2lvbkNhY2hlLnNldChzZXNzaW9uS2V5LCBzZXNzaW9uKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBidWlsZENvbm5lY3RvciAoeyBhbGxvd0gyLCBtYXhDYWNoZWRTZXNzaW9ucywgc29ja2V0UGF0aCwgdGltZW91dCwgLi4ub3B0cyB9KSB7XG4gIGlmIChtYXhDYWNoZWRTZXNzaW9ucyAhPSBudWxsICYmICghTnVtYmVyLmlzSW50ZWdlcihtYXhDYWNoZWRTZXNzaW9ucykgfHwgbWF4Q2FjaGVkU2Vzc2lvbnMgPCAwKSkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignbWF4Q2FjaGVkU2Vzc2lvbnMgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgb3IgemVybycpXG4gIH1cblxuICBjb25zdCBvcHRpb25zID0geyBwYXRoOiBzb2NrZXRQYXRoLCAuLi5vcHRzIH1cbiAgY29uc3Qgc2Vzc2lvbkNhY2hlID0gbmV3IFNlc3Npb25DYWNoZShtYXhDYWNoZWRTZXNzaW9ucyA9PSBudWxsID8gMTAwIDogbWF4Q2FjaGVkU2Vzc2lvbnMpXG4gIHRpbWVvdXQgPSB0aW1lb3V0ID09IG51bGwgPyAxMGUzIDogdGltZW91dFxuICBhbGxvd0gyID0gYWxsb3dIMiAhPSBudWxsID8gYWxsb3dIMiA6IGZhbHNlXG4gIHJldHVybiBmdW5jdGlvbiBjb25uZWN0ICh7IGhvc3RuYW1lLCBob3N0LCBwcm90b2NvbCwgcG9ydCwgc2VydmVybmFtZSwgbG9jYWxBZGRyZXNzLCBodHRwU29ja2V0IH0sIGNhbGxiYWNrKSB7XG4gICAgbGV0IHNvY2tldFxuICAgIGlmIChwcm90b2NvbCA9PT0gJ2h0dHBzOicpIHtcbiAgICAgIGlmICghdGxzKSB7XG4gICAgICAgIHRscyA9IHJlcXVpcmUoJ3RscycpXG4gICAgICB9XG4gICAgICBzZXJ2ZXJuYW1lID0gc2VydmVybmFtZSB8fCBvcHRpb25zLnNlcnZlcm5hbWUgfHwgdXRpbC5nZXRTZXJ2ZXJOYW1lKGhvc3QpIHx8IG51bGxcblxuICAgICAgY29uc3Qgc2Vzc2lvbktleSA9IHNlcnZlcm5hbWUgfHwgaG9zdG5hbWVcbiAgICAgIGNvbnN0IHNlc3Npb24gPSBzZXNzaW9uQ2FjaGUuZ2V0KHNlc3Npb25LZXkpIHx8IG51bGxcblxuICAgICAgYXNzZXJ0KHNlc3Npb25LZXkpXG5cbiAgICAgIHNvY2tldCA9IHRscy5jb25uZWN0KHtcbiAgICAgICAgaGlnaFdhdGVyTWFyazogMTYzODQsIC8vIFRMUyBpbiBub2RlIGNhbid0IGhhdmUgYmlnZ2VyIEhXTSBhbnl3YXkuLi5cbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgc2VydmVybmFtZSxcbiAgICAgICAgc2Vzc2lvbixcbiAgICAgICAgbG9jYWxBZGRyZXNzLFxuICAgICAgICAvLyBUT0RPKEhUVFAvMik6IEFkZCBzdXBwb3J0IGZvciBoMmNcbiAgICAgICAgQUxQTlByb3RvY29sczogYWxsb3dIMiA/IFsnaHR0cC8xLjEnLCAnaDInXSA6IFsnaHR0cC8xLjEnXSxcbiAgICAgICAgc29ja2V0OiBodHRwU29ja2V0LCAvLyB1cGdyYWRlIHNvY2tldCBjb25uZWN0aW9uXG4gICAgICAgIHBvcnQ6IHBvcnQgfHwgNDQzLFxuICAgICAgICBob3N0OiBob3N0bmFtZVxuICAgICAgfSlcblxuICAgICAgc29ja2V0XG4gICAgICAgIC5vbignc2Vzc2lvbicsIGZ1bmN0aW9uIChzZXNzaW9uKSB7XG4gICAgICAgICAgLy8gVE9ETyAoZml4KTogQ2FuIGEgc2Vzc2lvbiBiZWNvbWUgaW52YWxpZCBvbmNlIGVzdGFibGlzaGVkPyBEb24ndCB0aGluayBzbz9cbiAgICAgICAgICBzZXNzaW9uQ2FjaGUuc2V0KHNlc3Npb25LZXksIHNlc3Npb24pXG4gICAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydCghaHR0cFNvY2tldCwgJ2h0dHBTb2NrZXQgY2FuIG9ubHkgYmUgc2VudCBvbiBUTFMgdXBkYXRlJylcbiAgICAgIHNvY2tldCA9IG5ldC5jb25uZWN0KHtcbiAgICAgICAgaGlnaFdhdGVyTWFyazogNjQgKiAxMDI0LCAvLyBTYW1lIGFzIG5vZGVqcyBmcyBzdHJlYW1zLlxuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICBsb2NhbEFkZHJlc3MsXG4gICAgICAgIHBvcnQ6IHBvcnQgfHwgODAsXG4gICAgICAgIGhvc3Q6IGhvc3RuYW1lXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIFNldCBUQ1Aga2VlcCBhbGl2ZSBvcHRpb25zIG9uIHRoZSBzb2NrZXQgaGVyZSBpbnN0ZWFkIG9mIGluIGNvbm5lY3QoKSBmb3IgdGhlIGNhc2Ugb2YgYXNzaWduaW5nIHRoZSBzb2NrZXRcbiAgICBpZiAob3B0aW9ucy5rZWVwQWxpdmUgPT0gbnVsbCB8fCBvcHRpb25zLmtlZXBBbGl2ZSkge1xuICAgICAgY29uc3Qga2VlcEFsaXZlSW5pdGlhbERlbGF5ID0gb3B0aW9ucy5rZWVwQWxpdmVJbml0aWFsRGVsYXkgPT09IHVuZGVmaW5lZCA/IDYwZTMgOiBvcHRpb25zLmtlZXBBbGl2ZUluaXRpYWxEZWxheVxuICAgICAgc29ja2V0LnNldEtlZXBBbGl2ZSh0cnVlLCBrZWVwQWxpdmVJbml0aWFsRGVsYXkpXG4gICAgfVxuXG4gICAgY29uc3QgY2FuY2VsVGltZW91dCA9IHNldHVwVGltZW91dCgoKSA9PiBvbkNvbm5lY3RUaW1lb3V0KHNvY2tldCksIHRpbWVvdXQpXG5cbiAgICBzb2NrZXRcbiAgICAgIC5zZXROb0RlbGF5KHRydWUpXG4gICAgICAub25jZShwcm90b2NvbCA9PT0gJ2h0dHBzOicgPyAnc2VjdXJlQ29ubmVjdCcgOiAnY29ubmVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY2FuY2VsVGltZW91dCgpXG5cbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgY29uc3QgY2IgPSBjYWxsYmFja1xuICAgICAgICAgIGNhbGxiYWNrID0gbnVsbFxuICAgICAgICAgIGNiKG51bGwsIHRoaXMpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAub24oJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBjYW5jZWxUaW1lb3V0KClcblxuICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICBjb25zdCBjYiA9IGNhbGxiYWNrXG4gICAgICAgICAgY2FsbGJhY2sgPSBudWxsXG4gICAgICAgICAgY2IoZXJyKVxuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgcmV0dXJuIHNvY2tldFxuICB9XG59XG5cbmZ1bmN0aW9uIHNldHVwVGltZW91dCAob25Db25uZWN0VGltZW91dCwgdGltZW91dCkge1xuICBpZiAoIXRpbWVvdXQpIHtcbiAgICByZXR1cm4gKCkgPT4ge31cbiAgfVxuXG4gIGxldCBzMSA9IG51bGxcbiAgbGV0IHMyID0gbnVsbFxuICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyBzZXRJbW1lZGlhdGUgaXMgYWRkZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2UgcHJpb3RvcmlzZSBzb2NrZXQgZXJyb3IgZXZlbnRzIG92ZXIgdGltZW91dHNcbiAgICBzMSA9IHNldEltbWVkaWF0ZSgoKSA9PiB7XG4gICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgICAgICAvLyBXaW5kb3dzIG5lZWRzIGFuIGV4dHJhIHNldEltbWVkaWF0ZSBwcm9iYWJseSBkdWUgdG8gaW1wbGVtZW50YXRpb24gZGlmZmVyZW5jZXMgaW4gdGhlIHNvY2tldCBsb2dpY1xuICAgICAgICBzMiA9IHNldEltbWVkaWF0ZSgoKSA9PiBvbkNvbm5lY3RUaW1lb3V0KCkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvbkNvbm5lY3RUaW1lb3V0KClcbiAgICAgIH1cbiAgICB9KVxuICB9LCB0aW1lb3V0KVxuICByZXR1cm4gKCkgPT4ge1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpXG4gICAgY2xlYXJJbW1lZGlhdGUoczEpXG4gICAgY2xlYXJJbW1lZGlhdGUoczIpXG4gIH1cbn1cblxuZnVuY3Rpb24gb25Db25uZWN0VGltZW91dCAoc29ja2V0KSB7XG4gIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBDb25uZWN0VGltZW91dEVycm9yKCkpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRDb25uZWN0b3JcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmVudW1Ub01hcCA9IHZvaWQgMDtcbmZ1bmN0aW9uIGVudW1Ub01hcChvYmopIHtcbiAgICBjb25zdCByZXMgPSB7fTtcbiAgICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IG9ialtrZXldO1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgcmVzW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXM7XG59XG5leHBvcnRzLmVudW1Ub01hcCA9IGVudW1Ub01hcDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlNQRUNJQUxfSEVBREVSUyA9IGV4cG9ydHMuSEVBREVSX1NUQVRFID0gZXhwb3J0cy5NSU5PUiA9IGV4cG9ydHMuTUFKT1IgPSBleHBvcnRzLkNPTk5FQ1RJT05fVE9LRU5fQ0hBUlMgPSBleHBvcnRzLkhFQURFUl9DSEFSUyA9IGV4cG9ydHMuVE9LRU4gPSBleHBvcnRzLlNUUklDVF9UT0tFTiA9IGV4cG9ydHMuSEVYID0gZXhwb3J0cy5VUkxfQ0hBUiA9IGV4cG9ydHMuU1RSSUNUX1VSTF9DSEFSID0gZXhwb3J0cy5VU0VSSU5GT19DSEFSUyA9IGV4cG9ydHMuTUFSSyA9IGV4cG9ydHMuQUxQSEFOVU0gPSBleHBvcnRzLk5VTSA9IGV4cG9ydHMuSEVYX01BUCA9IGV4cG9ydHMuTlVNX01BUCA9IGV4cG9ydHMuQUxQSEEgPSBleHBvcnRzLkZJTklTSCA9IGV4cG9ydHMuSF9NRVRIT0RfTUFQID0gZXhwb3J0cy5NRVRIT0RfTUFQID0gZXhwb3J0cy5NRVRIT0RTX1JUU1AgPSBleHBvcnRzLk1FVEhPRFNfSUNFID0gZXhwb3J0cy5NRVRIT0RTX0hUVFAgPSBleHBvcnRzLk1FVEhPRFMgPSBleHBvcnRzLkxFTklFTlRfRkxBR1MgPSBleHBvcnRzLkZMQUdTID0gZXhwb3J0cy5UWVBFID0gZXhwb3J0cy5FUlJPUiA9IHZvaWQgMDtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi91dGlsc1wiKTtcbi8vIEMgaGVhZGVyc1xudmFyIEVSUk9SO1xuKGZ1bmN0aW9uIChFUlJPUikge1xuICAgIEVSUk9SW0VSUk9SW1wiT0tcIl0gPSAwXSA9IFwiT0tcIjtcbiAgICBFUlJPUltFUlJPUltcIklOVEVSTkFMXCJdID0gMV0gPSBcIklOVEVSTkFMXCI7XG4gICAgRVJST1JbRVJST1JbXCJTVFJJQ1RcIl0gPSAyXSA9IFwiU1RSSUNUXCI7XG4gICAgRVJST1JbRVJST1JbXCJMRl9FWFBFQ1RFRFwiXSA9IDNdID0gXCJMRl9FWFBFQ1RFRFwiO1xuICAgIEVSUk9SW0VSUk9SW1wiVU5FWFBFQ1RFRF9DT05URU5UX0xFTkdUSFwiXSA9IDRdID0gXCJVTkVYUEVDVEVEX0NPTlRFTlRfTEVOR1RIXCI7XG4gICAgRVJST1JbRVJST1JbXCJDTE9TRURfQ09OTkVDVElPTlwiXSA9IDVdID0gXCJDTE9TRURfQ09OTkVDVElPTlwiO1xuICAgIEVSUk9SW0VSUk9SW1wiSU5WQUxJRF9NRVRIT0RcIl0gPSA2XSA9IFwiSU5WQUxJRF9NRVRIT0RcIjtcbiAgICBFUlJPUltFUlJPUltcIklOVkFMSURfVVJMXCJdID0gN10gPSBcIklOVkFMSURfVVJMXCI7XG4gICAgRVJST1JbRVJST1JbXCJJTlZBTElEX0NPTlNUQU5UXCJdID0gOF0gPSBcIklOVkFMSURfQ09OU1RBTlRcIjtcbiAgICBFUlJPUltFUlJPUltcIklOVkFMSURfVkVSU0lPTlwiXSA9IDldID0gXCJJTlZBTElEX1ZFUlNJT05cIjtcbiAgICBFUlJPUltFUlJPUltcIklOVkFMSURfSEVBREVSX1RPS0VOXCJdID0gMTBdID0gXCJJTlZBTElEX0hFQURFUl9UT0tFTlwiO1xuICAgIEVSUk9SW0VSUk9SW1wiSU5WQUxJRF9DT05URU5UX0xFTkdUSFwiXSA9IDExXSA9IFwiSU5WQUxJRF9DT05URU5UX0xFTkdUSFwiO1xuICAgIEVSUk9SW0VSUk9SW1wiSU5WQUxJRF9DSFVOS19TSVpFXCJdID0gMTJdID0gXCJJTlZBTElEX0NIVU5LX1NJWkVcIjtcbiAgICBFUlJPUltFUlJPUltcIklOVkFMSURfU1RBVFVTXCJdID0gMTNdID0gXCJJTlZBTElEX1NUQVRVU1wiO1xuICAgIEVSUk9SW0VSUk9SW1wiSU5WQUxJRF9FT0ZfU1RBVEVcIl0gPSAxNF0gPSBcIklOVkFMSURfRU9GX1NUQVRFXCI7XG4gICAgRVJST1JbRVJST1JbXCJJTlZBTElEX1RSQU5TRkVSX0VOQ09ESU5HXCJdID0gMTVdID0gXCJJTlZBTElEX1RSQU5TRkVSX0VOQ09ESU5HXCI7XG4gICAgRVJST1JbRVJST1JbXCJDQl9NRVNTQUdFX0JFR0lOXCJdID0gMTZdID0gXCJDQl9NRVNTQUdFX0JFR0lOXCI7XG4gICAgRVJST1JbRVJST1JbXCJDQl9IRUFERVJTX0NPTVBMRVRFXCJdID0gMTddID0gXCJDQl9IRUFERVJTX0NPTVBMRVRFXCI7XG4gICAgRVJST1JbRVJST1JbXCJDQl9NRVNTQUdFX0NPTVBMRVRFXCJdID0gMThdID0gXCJDQl9NRVNTQUdFX0NPTVBMRVRFXCI7XG4gICAgRVJST1JbRVJST1JbXCJDQl9DSFVOS19IRUFERVJcIl0gPSAxOV0gPSBcIkNCX0NIVU5LX0hFQURFUlwiO1xuICAgIEVSUk9SW0VSUk9SW1wiQ0JfQ0hVTktfQ09NUExFVEVcIl0gPSAyMF0gPSBcIkNCX0NIVU5LX0NPTVBMRVRFXCI7XG4gICAgRVJST1JbRVJST1JbXCJQQVVTRURcIl0gPSAyMV0gPSBcIlBBVVNFRFwiO1xuICAgIEVSUk9SW0VSUk9SW1wiUEFVU0VEX1VQR1JBREVcIl0gPSAyMl0gPSBcIlBBVVNFRF9VUEdSQURFXCI7XG4gICAgRVJST1JbRVJST1JbXCJQQVVTRURfSDJfVVBHUkFERVwiXSA9IDIzXSA9IFwiUEFVU0VEX0gyX1VQR1JBREVcIjtcbiAgICBFUlJPUltFUlJPUltcIlVTRVJcIl0gPSAyNF0gPSBcIlVTRVJcIjtcbn0pKEVSUk9SID0gZXhwb3J0cy5FUlJPUiB8fCAoZXhwb3J0cy5FUlJPUiA9IHt9KSk7XG52YXIgVFlQRTtcbihmdW5jdGlvbiAoVFlQRSkge1xuICAgIFRZUEVbVFlQRVtcIkJPVEhcIl0gPSAwXSA9IFwiQk9USFwiO1xuICAgIFRZUEVbVFlQRVtcIlJFUVVFU1RcIl0gPSAxXSA9IFwiUkVRVUVTVFwiO1xuICAgIFRZUEVbVFlQRVtcIlJFU1BPTlNFXCJdID0gMl0gPSBcIlJFU1BPTlNFXCI7XG59KShUWVBFID0gZXhwb3J0cy5UWVBFIHx8IChleHBvcnRzLlRZUEUgPSB7fSkpO1xudmFyIEZMQUdTO1xuKGZ1bmN0aW9uIChGTEFHUykge1xuICAgIEZMQUdTW0ZMQUdTW1wiQ09OTkVDVElPTl9LRUVQX0FMSVZFXCJdID0gMV0gPSBcIkNPTk5FQ1RJT05fS0VFUF9BTElWRVwiO1xuICAgIEZMQUdTW0ZMQUdTW1wiQ09OTkVDVElPTl9DTE9TRVwiXSA9IDJdID0gXCJDT05ORUNUSU9OX0NMT1NFXCI7XG4gICAgRkxBR1NbRkxBR1NbXCJDT05ORUNUSU9OX1VQR1JBREVcIl0gPSA0XSA9IFwiQ09OTkVDVElPTl9VUEdSQURFXCI7XG4gICAgRkxBR1NbRkxBR1NbXCJDSFVOS0VEXCJdID0gOF0gPSBcIkNIVU5LRURcIjtcbiAgICBGTEFHU1tGTEFHU1tcIlVQR1JBREVcIl0gPSAxNl0gPSBcIlVQR1JBREVcIjtcbiAgICBGTEFHU1tGTEFHU1tcIkNPTlRFTlRfTEVOR1RIXCJdID0gMzJdID0gXCJDT05URU5UX0xFTkdUSFwiO1xuICAgIEZMQUdTW0ZMQUdTW1wiU0tJUEJPRFlcIl0gPSA2NF0gPSBcIlNLSVBCT0RZXCI7XG4gICAgRkxBR1NbRkxBR1NbXCJUUkFJTElOR1wiXSA9IDEyOF0gPSBcIlRSQUlMSU5HXCI7XG4gICAgLy8gMSA8PCA4IGlzIHVudXNlZFxuICAgIEZMQUdTW0ZMQUdTW1wiVFJBTlNGRVJfRU5DT0RJTkdcIl0gPSA1MTJdID0gXCJUUkFOU0ZFUl9FTkNPRElOR1wiO1xufSkoRkxBR1MgPSBleHBvcnRzLkZMQUdTIHx8IChleHBvcnRzLkZMQUdTID0ge30pKTtcbnZhciBMRU5JRU5UX0ZMQUdTO1xuKGZ1bmN0aW9uIChMRU5JRU5UX0ZMQUdTKSB7XG4gICAgTEVOSUVOVF9GTEFHU1tMRU5JRU5UX0ZMQUdTW1wiSEVBREVSU1wiXSA9IDFdID0gXCJIRUFERVJTXCI7XG4gICAgTEVOSUVOVF9GTEFHU1tMRU5JRU5UX0ZMQUdTW1wiQ0hVTktFRF9MRU5HVEhcIl0gPSAyXSA9IFwiQ0hVTktFRF9MRU5HVEhcIjtcbiAgICBMRU5JRU5UX0ZMQUdTW0xFTklFTlRfRkxBR1NbXCJLRUVQX0FMSVZFXCJdID0gNF0gPSBcIktFRVBfQUxJVkVcIjtcbn0pKExFTklFTlRfRkxBR1MgPSBleHBvcnRzLkxFTklFTlRfRkxBR1MgfHwgKGV4cG9ydHMuTEVOSUVOVF9GTEFHUyA9IHt9KSk7XG52YXIgTUVUSE9EUztcbihmdW5jdGlvbiAoTUVUSE9EUykge1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIkRFTEVURVwiXSA9IDBdID0gXCJERUxFVEVcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJHRVRcIl0gPSAxXSA9IFwiR0VUXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiSEVBRFwiXSA9IDJdID0gXCJIRUFEXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiUE9TVFwiXSA9IDNdID0gXCJQT1NUXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiUFVUXCJdID0gNF0gPSBcIlBVVFwiO1xuICAgIC8qIHBhdGhvbG9naWNhbCAqL1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIkNPTk5FQ1RcIl0gPSA1XSA9IFwiQ09OTkVDVFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIk9QVElPTlNcIl0gPSA2XSA9IFwiT1BUSU9OU1wiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlRSQUNFXCJdID0gN10gPSBcIlRSQUNFXCI7XG4gICAgLyogV2ViREFWICovXG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiQ09QWVwiXSA9IDhdID0gXCJDT1BZXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiTE9DS1wiXSA9IDldID0gXCJMT0NLXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiTUtDT0xcIl0gPSAxMF0gPSBcIk1LQ09MXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiTU9WRVwiXSA9IDExXSA9IFwiTU9WRVwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlBST1BGSU5EXCJdID0gMTJdID0gXCJQUk9QRklORFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlBST1BQQVRDSFwiXSA9IDEzXSA9IFwiUFJPUFBBVENIXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiU0VBUkNIXCJdID0gMTRdID0gXCJTRUFSQ0hcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJVTkxPQ0tcIl0gPSAxNV0gPSBcIlVOTE9DS1wiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIkJJTkRcIl0gPSAxNl0gPSBcIkJJTkRcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJSRUJJTkRcIl0gPSAxN10gPSBcIlJFQklORFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlVOQklORFwiXSA9IDE4XSA9IFwiVU5CSU5EXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiQUNMXCJdID0gMTldID0gXCJBQ0xcIjtcbiAgICAvKiBzdWJ2ZXJzaW9uICovXG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiUkVQT1JUXCJdID0gMjBdID0gXCJSRVBPUlRcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJNS0FDVElWSVRZXCJdID0gMjFdID0gXCJNS0FDVElWSVRZXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiQ0hFQ0tPVVRcIl0gPSAyMl0gPSBcIkNIRUNLT1VUXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiTUVSR0VcIl0gPSAyM10gPSBcIk1FUkdFXCI7XG4gICAgLyogdXBucCAqL1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIk0tU0VBUkNIXCJdID0gMjRdID0gXCJNLVNFQVJDSFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIk5PVElGWVwiXSA9IDI1XSA9IFwiTk9USUZZXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiU1VCU0NSSUJFXCJdID0gMjZdID0gXCJTVUJTQ1JJQkVcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJVTlNVQlNDUklCRVwiXSA9IDI3XSA9IFwiVU5TVUJTQ1JJQkVcIjtcbiAgICAvKiBSRkMtNTc4OSAqL1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlBBVENIXCJdID0gMjhdID0gXCJQQVRDSFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlBVUkdFXCJdID0gMjldID0gXCJQVVJHRVwiO1xuICAgIC8qIENhbERBViAqL1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIk1LQ0FMRU5EQVJcIl0gPSAzMF0gPSBcIk1LQ0FMRU5EQVJcIjtcbiAgICAvKiBSRkMtMjA2OCwgc2VjdGlvbiAxOS42LjEuMiAqL1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIkxJTktcIl0gPSAzMV0gPSBcIkxJTktcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJVTkxJTktcIl0gPSAzMl0gPSBcIlVOTElOS1wiO1xuICAgIC8qIGljZWNhc3QgKi9cbiAgICBNRVRIT0RTW01FVEhPRFNbXCJTT1VSQ0VcIl0gPSAzM10gPSBcIlNPVVJDRVwiO1xuICAgIC8qIFJGQy03NTQwLCBzZWN0aW9uIDExLjYgKi9cbiAgICBNRVRIT0RTW01FVEhPRFNbXCJQUklcIl0gPSAzNF0gPSBcIlBSSVwiO1xuICAgIC8qIFJGQy0yMzI2IFJUU1AgKi9cbiAgICBNRVRIT0RTW01FVEhPRFNbXCJERVNDUklCRVwiXSA9IDM1XSA9IFwiREVTQ1JJQkVcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJBTk5PVU5DRVwiXSA9IDM2XSA9IFwiQU5OT1VOQ0VcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJTRVRVUFwiXSA9IDM3XSA9IFwiU0VUVVBcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJQTEFZXCJdID0gMzhdID0gXCJQTEFZXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiUEFVU0VcIl0gPSAzOV0gPSBcIlBBVVNFXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiVEVBUkRPV05cIl0gPSA0MF0gPSBcIlRFQVJET1dOXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiR0VUX1BBUkFNRVRFUlwiXSA9IDQxXSA9IFwiR0VUX1BBUkFNRVRFUlwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlNFVF9QQVJBTUVURVJcIl0gPSA0Ml0gPSBcIlNFVF9QQVJBTUVURVJcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJSRURJUkVDVFwiXSA9IDQzXSA9IFwiUkVESVJFQ1RcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJSRUNPUkRcIl0gPSA0NF0gPSBcIlJFQ09SRFwiO1xuICAgIC8qIFJBT1AgKi9cbiAgICBNRVRIT0RTW01FVEhPRFNbXCJGTFVTSFwiXSA9IDQ1XSA9IFwiRkxVU0hcIjtcbn0pKE1FVEhPRFMgPSBleHBvcnRzLk1FVEhPRFMgfHwgKGV4cG9ydHMuTUVUSE9EUyA9IHt9KSk7XG5leHBvcnRzLk1FVEhPRFNfSFRUUCA9IFtcbiAgICBNRVRIT0RTLkRFTEVURSxcbiAgICBNRVRIT0RTLkdFVCxcbiAgICBNRVRIT0RTLkhFQUQsXG4gICAgTUVUSE9EUy5QT1NULFxuICAgIE1FVEhPRFMuUFVULFxuICAgIE1FVEhPRFMuQ09OTkVDVCxcbiAgICBNRVRIT0RTLk9QVElPTlMsXG4gICAgTUVUSE9EUy5UUkFDRSxcbiAgICBNRVRIT0RTLkNPUFksXG4gICAgTUVUSE9EUy5MT0NLLFxuICAgIE1FVEhPRFMuTUtDT0wsXG4gICAgTUVUSE9EUy5NT1ZFLFxuICAgIE1FVEhPRFMuUFJPUEZJTkQsXG4gICAgTUVUSE9EUy5QUk9QUEFUQ0gsXG4gICAgTUVUSE9EUy5TRUFSQ0gsXG4gICAgTUVUSE9EUy5VTkxPQ0ssXG4gICAgTUVUSE9EUy5CSU5ELFxuICAgIE1FVEhPRFMuUkVCSU5ELFxuICAgIE1FVEhPRFMuVU5CSU5ELFxuICAgIE1FVEhPRFMuQUNMLFxuICAgIE1FVEhPRFMuUkVQT1JULFxuICAgIE1FVEhPRFMuTUtBQ1RJVklUWSxcbiAgICBNRVRIT0RTLkNIRUNLT1VULFxuICAgIE1FVEhPRFMuTUVSR0UsXG4gICAgTUVUSE9EU1snTS1TRUFSQ0gnXSxcbiAgICBNRVRIT0RTLk5PVElGWSxcbiAgICBNRVRIT0RTLlNVQlNDUklCRSxcbiAgICBNRVRIT0RTLlVOU1VCU0NSSUJFLFxuICAgIE1FVEhPRFMuUEFUQ0gsXG4gICAgTUVUSE9EUy5QVVJHRSxcbiAgICBNRVRIT0RTLk1LQ0FMRU5EQVIsXG4gICAgTUVUSE9EUy5MSU5LLFxuICAgIE1FVEhPRFMuVU5MSU5LLFxuICAgIE1FVEhPRFMuUFJJLFxuICAgIC8vIFRPRE8oaW5kdXRueSk6IHNob3VsZCB3ZSBhbGxvdyBpdCB3aXRoIEhUVFA/XG4gICAgTUVUSE9EUy5TT1VSQ0UsXG5dO1xuZXhwb3J0cy5NRVRIT0RTX0lDRSA9IFtcbiAgICBNRVRIT0RTLlNPVVJDRSxcbl07XG5leHBvcnRzLk1FVEhPRFNfUlRTUCA9IFtcbiAgICBNRVRIT0RTLk9QVElPTlMsXG4gICAgTUVUSE9EUy5ERVNDUklCRSxcbiAgICBNRVRIT0RTLkFOTk9VTkNFLFxuICAgIE1FVEhPRFMuU0VUVVAsXG4gICAgTUVUSE9EUy5QTEFZLFxuICAgIE1FVEhPRFMuUEFVU0UsXG4gICAgTUVUSE9EUy5URUFSRE9XTixcbiAgICBNRVRIT0RTLkdFVF9QQVJBTUVURVIsXG4gICAgTUVUSE9EUy5TRVRfUEFSQU1FVEVSLFxuICAgIE1FVEhPRFMuUkVESVJFQ1QsXG4gICAgTUVUSE9EUy5SRUNPUkQsXG4gICAgTUVUSE9EUy5GTFVTSCxcbiAgICAvLyBGb3IgQWlyUGxheVxuICAgIE1FVEhPRFMuR0VULFxuICAgIE1FVEhPRFMuUE9TVCxcbl07XG5leHBvcnRzLk1FVEhPRF9NQVAgPSB1dGlsc18xLmVudW1Ub01hcChNRVRIT0RTKTtcbmV4cG9ydHMuSF9NRVRIT0RfTUFQID0ge307XG5PYmplY3Qua2V5cyhleHBvcnRzLk1FVEhPRF9NQVApLmZvckVhY2goKGtleSkgPT4ge1xuICAgIGlmICgvXkgvLnRlc3Qoa2V5KSkge1xuICAgICAgICBleHBvcnRzLkhfTUVUSE9EX01BUFtrZXldID0gZXhwb3J0cy5NRVRIT0RfTUFQW2tleV07XG4gICAgfVxufSk7XG52YXIgRklOSVNIO1xuKGZ1bmN0aW9uIChGSU5JU0gpIHtcbiAgICBGSU5JU0hbRklOSVNIW1wiU0FGRVwiXSA9IDBdID0gXCJTQUZFXCI7XG4gICAgRklOSVNIW0ZJTklTSFtcIlNBRkVfV0lUSF9DQlwiXSA9IDFdID0gXCJTQUZFX1dJVEhfQ0JcIjtcbiAgICBGSU5JU0hbRklOSVNIW1wiVU5TQUZFXCJdID0gMl0gPSBcIlVOU0FGRVwiO1xufSkoRklOSVNIID0gZXhwb3J0cy5GSU5JU0ggfHwgKGV4cG9ydHMuRklOSVNIID0ge30pKTtcbmV4cG9ydHMuQUxQSEEgPSBbXTtcbmZvciAobGV0IGkgPSAnQScuY2hhckNvZGVBdCgwKTsgaSA8PSAnWicuY2hhckNvZGVBdCgwKTsgaSsrKSB7XG4gICAgLy8gVXBwZXIgY2FzZVxuICAgIGV4cG9ydHMuQUxQSEEucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGkpKTtcbiAgICAvLyBMb3dlciBjYXNlXG4gICAgZXhwb3J0cy5BTFBIQS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoaSArIDB4MjApKTtcbn1cbmV4cG9ydHMuTlVNX01BUCA9IHtcbiAgICAwOiAwLCAxOiAxLCAyOiAyLCAzOiAzLCA0OiA0LFxuICAgIDU6IDUsIDY6IDYsIDc6IDcsIDg6IDgsIDk6IDksXG59O1xuZXhwb3J0cy5IRVhfTUFQID0ge1xuICAgIDA6IDAsIDE6IDEsIDI6IDIsIDM6IDMsIDQ6IDQsXG4gICAgNTogNSwgNjogNiwgNzogNywgODogOCwgOTogOSxcbiAgICBBOiAwWEEsIEI6IDBYQiwgQzogMFhDLCBEOiAwWEQsIEU6IDBYRSwgRjogMFhGLFxuICAgIGE6IDB4YSwgYjogMHhiLCBjOiAweGMsIGQ6IDB4ZCwgZTogMHhlLCBmOiAweGYsXG59O1xuZXhwb3J0cy5OVU0gPSBbXG4gICAgJzAnLCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsICc4JywgJzknLFxuXTtcbmV4cG9ydHMuQUxQSEFOVU0gPSBleHBvcnRzLkFMUEhBLmNvbmNhdChleHBvcnRzLk5VTSk7XG5leHBvcnRzLk1BUksgPSBbJy0nLCAnXycsICcuJywgJyEnLCAnficsICcqJywgJ1xcJycsICcoJywgJyknXTtcbmV4cG9ydHMuVVNFUklORk9fQ0hBUlMgPSBleHBvcnRzLkFMUEhBTlVNXG4gICAgLmNvbmNhdChleHBvcnRzLk1BUkspXG4gICAgLmNvbmNhdChbJyUnLCAnOycsICc6JywgJyYnLCAnPScsICcrJywgJyQnLCAnLCddKTtcbi8vIFRPRE8oaW5kdXRueSk6IHVzZSBSRkNcbmV4cG9ydHMuU1RSSUNUX1VSTF9DSEFSID0gW1xuICAgICchJywgJ1wiJywgJyQnLCAnJScsICcmJywgJ1xcJycsXG4gICAgJygnLCAnKScsICcqJywgJysnLCAnLCcsICctJywgJy4nLCAnLycsXG4gICAgJzonLCAnOycsICc8JywgJz0nLCAnPicsXG4gICAgJ0AnLCAnWycsICdcXFxcJywgJ10nLCAnXicsICdfJyxcbiAgICAnYCcsXG4gICAgJ3snLCAnfCcsICd9JywgJ34nLFxuXS5jb25jYXQoZXhwb3J0cy5BTFBIQU5VTSk7XG5leHBvcnRzLlVSTF9DSEFSID0gZXhwb3J0cy5TVFJJQ1RfVVJMX0NIQVJcbiAgICAuY29uY2F0KFsnXFx0JywgJ1xcZiddKTtcbi8vIEFsbCBjaGFyYWN0ZXJzIHdpdGggMHg4MCBiaXQgc2V0IHRvIDFcbmZvciAobGV0IGkgPSAweDgwOyBpIDw9IDB4ZmY7IGkrKykge1xuICAgIGV4cG9ydHMuVVJMX0NIQVIucHVzaChpKTtcbn1cbmV4cG9ydHMuSEVYID0gZXhwb3J0cy5OVU0uY29uY2F0KFsnYScsICdiJywgJ2MnLCAnZCcsICdlJywgJ2YnLCAnQScsICdCJywgJ0MnLCAnRCcsICdFJywgJ0YnXSk7XG4vKiBUb2tlbnMgYXMgZGVmaW5lZCBieSByZmMgMjYxNi4gQWxzbyBsb3dlcmNhc2VzIHRoZW0uXG4gKiAgICAgICAgdG9rZW4gICAgICAgPSAxKjxhbnkgQ0hBUiBleGNlcHQgQ1RMcyBvciBzZXBhcmF0b3JzPlxuICogICAgIHNlcGFyYXRvcnMgICAgID0gXCIoXCIgfCBcIilcIiB8IFwiPFwiIHwgXCI+XCIgfCBcIkBcIlxuICogICAgICAgICAgICAgICAgICAgIHwgXCIsXCIgfCBcIjtcIiB8IFwiOlwiIHwgXCJcXFwiIHwgPFwiPlxuICogICAgICAgICAgICAgICAgICAgIHwgXCIvXCIgfCBcIltcIiB8IFwiXVwiIHwgXCI/XCIgfCBcIj1cIlxuICogICAgICAgICAgICAgICAgICAgIHwgXCJ7XCIgfCBcIn1cIiB8IFNQIHwgSFRcbiAqL1xuZXhwb3J0cy5TVFJJQ1RfVE9LRU4gPSBbXG4gICAgJyEnLCAnIycsICckJywgJyUnLCAnJicsICdcXCcnLFxuICAgICcqJywgJysnLCAnLScsICcuJyxcbiAgICAnXicsICdfJywgJ2AnLFxuICAgICd8JywgJ34nLFxuXS5jb25jYXQoZXhwb3J0cy5BTFBIQU5VTSk7XG5leHBvcnRzLlRPS0VOID0gZXhwb3J0cy5TVFJJQ1RfVE9LRU4uY29uY2F0KFsnICddKTtcbi8qXG4gKiBWZXJpZnkgdGhhdCBhIGNoYXIgaXMgYSB2YWxpZCB2aXNpYmxlIChwcmludGFibGUpIFVTLUFTQ0lJXG4gKiBjaGFyYWN0ZXIgb3IgJXg4MC1GRlxuICovXG5leHBvcnRzLkhFQURFUl9DSEFSUyA9IFsnXFx0J107XG5mb3IgKGxldCBpID0gMzI7IGkgPD0gMjU1OyBpKyspIHtcbiAgICBpZiAoaSAhPT0gMTI3KSB7XG4gICAgICAgIGV4cG9ydHMuSEVBREVSX0NIQVJTLnB1c2goaSk7XG4gICAgfVxufVxuLy8gJywnID0gXFx4NDRcbmV4cG9ydHMuQ09OTkVDVElPTl9UT0tFTl9DSEFSUyA9IGV4cG9ydHMuSEVBREVSX0NIQVJTLmZpbHRlcigoYykgPT4gYyAhPT0gNDQpO1xuZXhwb3J0cy5NQUpPUiA9IGV4cG9ydHMuTlVNX01BUDtcbmV4cG9ydHMuTUlOT1IgPSBleHBvcnRzLk1BSk9SO1xudmFyIEhFQURFUl9TVEFURTtcbihmdW5jdGlvbiAoSEVBREVSX1NUQVRFKSB7XG4gICAgSEVBREVSX1NUQVRFW0hFQURFUl9TVEFURVtcIkdFTkVSQUxcIl0gPSAwXSA9IFwiR0VORVJBTFwiO1xuICAgIEhFQURFUl9TVEFURVtIRUFERVJfU1RBVEVbXCJDT05ORUNUSU9OXCJdID0gMV0gPSBcIkNPTk5FQ1RJT05cIjtcbiAgICBIRUFERVJfU1RBVEVbSEVBREVSX1NUQVRFW1wiQ09OVEVOVF9MRU5HVEhcIl0gPSAyXSA9IFwiQ09OVEVOVF9MRU5HVEhcIjtcbiAgICBIRUFERVJfU1RBVEVbSEVBREVSX1NUQVRFW1wiVFJBTlNGRVJfRU5DT0RJTkdcIl0gPSAzXSA9IFwiVFJBTlNGRVJfRU5DT0RJTkdcIjtcbiAgICBIRUFERVJfU1RBVEVbSEVBREVSX1NUQVRFW1wiVVBHUkFERVwiXSA9IDRdID0gXCJVUEdSQURFXCI7XG4gICAgSEVBREVSX1NUQVRFW0hFQURFUl9TVEFURVtcIkNPTk5FQ1RJT05fS0VFUF9BTElWRVwiXSA9IDVdID0gXCJDT05ORUNUSU9OX0tFRVBfQUxJVkVcIjtcbiAgICBIRUFERVJfU1RBVEVbSEVBREVSX1NUQVRFW1wiQ09OTkVDVElPTl9DTE9TRVwiXSA9IDZdID0gXCJDT05ORUNUSU9OX0NMT1NFXCI7XG4gICAgSEVBREVSX1NUQVRFW0hFQURFUl9TVEFURVtcIkNPTk5FQ1RJT05fVVBHUkFERVwiXSA9IDddID0gXCJDT05ORUNUSU9OX1VQR1JBREVcIjtcbiAgICBIRUFERVJfU1RBVEVbSEVBREVSX1NUQVRFW1wiVFJBTlNGRVJfRU5DT0RJTkdfQ0hVTktFRFwiXSA9IDhdID0gXCJUUkFOU0ZFUl9FTkNPRElOR19DSFVOS0VEXCI7XG59KShIRUFERVJfU1RBVEUgPSBleHBvcnRzLkhFQURFUl9TVEFURSB8fCAoZXhwb3J0cy5IRUFERVJfU1RBVEUgPSB7fSkpO1xuZXhwb3J0cy5TUEVDSUFMX0hFQURFUlMgPSB7XG4gICAgJ2Nvbm5lY3Rpb24nOiBIRUFERVJfU1RBVEUuQ09OTkVDVElPTixcbiAgICAnY29udGVudC1sZW5ndGgnOiBIRUFERVJfU1RBVEUuQ09OVEVOVF9MRU5HVEgsXG4gICAgJ3Byb3h5LWNvbm5lY3Rpb24nOiBIRUFERVJfU1RBVEUuQ09OTkVDVElPTixcbiAgICAndHJhbnNmZXItZW5jb2RpbmcnOiBIRUFERVJfU1RBVEUuVFJBTlNGRVJfRU5DT0RJTkcsXG4gICAgJ3VwZ3JhZGUnOiBIRUFERVJfU1RBVEUuVVBHUkFERSxcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25zdGFudHMuanMubWFwIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGtCb2R5VXNlZCB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCBFRSA9IHJlcXVpcmUoJ2V2ZW50cycpXG5cbmNvbnN0IHJlZGlyZWN0YWJsZVN0YXR1c0NvZGVzID0gWzMwMCwgMzAxLCAzMDIsIDMwMywgMzA3LCAzMDhdXG5cbmNvbnN0IGtCb2R5ID0gU3ltYm9sKCdib2R5JylcblxuY2xhc3MgQm9keUFzeW5jSXRlcmFibGUge1xuICBjb25zdHJ1Y3RvciAoYm9keSkge1xuICAgIHRoaXNba0JvZHldID0gYm9keVxuICAgIHRoaXNba0JvZHlVc2VkXSA9IGZhbHNlXG4gIH1cblxuICBhc3luYyAqIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gKCkge1xuICAgIGFzc2VydCghdGhpc1trQm9keVVzZWRdLCAnZGlzdHVyYmVkJylcbiAgICB0aGlzW2tCb2R5VXNlZF0gPSB0cnVlXG4gICAgeWllbGQgKiB0aGlzW2tCb2R5XVxuICB9XG59XG5cbmNsYXNzIFJlZGlyZWN0SGFuZGxlciB7XG4gIGNvbnN0cnVjdG9yIChkaXNwYXRjaCwgbWF4UmVkaXJlY3Rpb25zLCBvcHRzLCBoYW5kbGVyKSB7XG4gICAgaWYgKG1heFJlZGlyZWN0aW9ucyAhPSBudWxsICYmICghTnVtYmVyLmlzSW50ZWdlcihtYXhSZWRpcmVjdGlvbnMpIHx8IG1heFJlZGlyZWN0aW9ucyA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ21heFJlZGlyZWN0aW9ucyBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJylcbiAgICB9XG5cbiAgICB1dGlsLnZhbGlkYXRlSGFuZGxlcihoYW5kbGVyLCBvcHRzLm1ldGhvZCwgb3B0cy51cGdyYWRlKVxuXG4gICAgdGhpcy5kaXNwYXRjaCA9IGRpc3BhdGNoXG4gICAgdGhpcy5sb2NhdGlvbiA9IG51bGxcbiAgICB0aGlzLmFib3J0ID0gbnVsbFxuICAgIHRoaXMub3B0cyA9IHsgLi4ub3B0cywgbWF4UmVkaXJlY3Rpb25zOiAwIH0gLy8gb3B0cyBtdXN0IGJlIGEgY29weVxuICAgIHRoaXMubWF4UmVkaXJlY3Rpb25zID0gbWF4UmVkaXJlY3Rpb25zXG4gICAgdGhpcy5oYW5kbGVyID0gaGFuZGxlclxuICAgIHRoaXMuaGlzdG9yeSA9IFtdXG5cbiAgICBpZiAodXRpbC5pc1N0cmVhbSh0aGlzLm9wdHMuYm9keSkpIHtcbiAgICAgIC8vIFRPRE8gKGZpeCk6IFByb3ZpZGUgc29tZSB3YXkgZm9yIHRoZSB1c2VyIHRvIGNhY2hlIHRoZSBmaWxlIHRvIGUuZy4gL3RtcFxuICAgICAgLy8gc28gdGhhdCBpdCBjYW4gYmUgZGlzcGF0Y2hlZCBhZ2Fpbj9cbiAgICAgIC8vIFRPRE8gKGZpeCk6IERvIHdlIG5lZWQgMTAwLWV4cGVjdCBzdXBwb3J0IHRvIHByb3ZpZGUgYSB3YXkgdG8gZG8gdGhpcyBwcm9wZXJseT9cbiAgICAgIGlmICh1dGlsLmJvZHlMZW5ndGgodGhpcy5vcHRzLmJvZHkpID09PSAwKSB7XG4gICAgICAgIHRoaXMub3B0cy5ib2R5XG4gICAgICAgICAgLm9uKCdkYXRhJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKVxuICAgICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRzLmJvZHkucmVhZGFibGVEaWRSZWFkICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgdGhpcy5vcHRzLmJvZHlba0JvZHlVc2VkXSA9IGZhbHNlXG4gICAgICAgIEVFLnByb3RvdHlwZS5vbi5jYWxsKHRoaXMub3B0cy5ib2R5LCAnZGF0YScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB0aGlzW2tCb2R5VXNlZF0gPSB0cnVlXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdHMuYm9keSAmJiB0eXBlb2YgdGhpcy5vcHRzLmJvZHkucGlwZVRvID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBUT0RPIChmaXgpOiBXZSBjYW4ndCBhY2Nlc3MgUmVhZGFibGVTdHJlYW0gaW50ZXJuYWwgc3RhdGVcbiAgICAgIC8vIHRvIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCBpdCBoYXMgYmVlbiBkaXN0dXJiZWQuIFRoaXMgaXMganVzdFxuICAgICAgLy8gYSB3b3JrYXJvdW5kLlxuICAgICAgdGhpcy5vcHRzLmJvZHkgPSBuZXcgQm9keUFzeW5jSXRlcmFibGUodGhpcy5vcHRzLmJvZHkpXG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMub3B0cy5ib2R5ICYmXG4gICAgICB0eXBlb2YgdGhpcy5vcHRzLmJvZHkgIT09ICdzdHJpbmcnICYmXG4gICAgICAhQXJyYXlCdWZmZXIuaXNWaWV3KHRoaXMub3B0cy5ib2R5KSAmJlxuICAgICAgdXRpbC5pc0l0ZXJhYmxlKHRoaXMub3B0cy5ib2R5KVxuICAgICkge1xuICAgICAgLy8gVE9ETzogU2hvdWxkIHdlIGFsbG93IHJlLXVzaW5nIGl0ZXJhYmxlIGlmICF0aGlzLm9wdHMuaWRlbXBvdGVudFxuICAgICAgLy8gb3IgdGhyb3VnaCBzb21lIG90aGVyIGZsYWc/XG4gICAgICB0aGlzLm9wdHMuYm9keSA9IG5ldyBCb2R5QXN5bmNJdGVyYWJsZSh0aGlzLm9wdHMuYm9keSlcbiAgICB9XG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0KSB7XG4gICAgdGhpcy5hYm9ydCA9IGFib3J0XG4gICAgdGhpcy5oYW5kbGVyLm9uQ29ubmVjdChhYm9ydCwgeyBoaXN0b3J5OiB0aGlzLmhpc3RvcnkgfSlcbiAgfVxuXG4gIG9uVXBncmFkZSAoc3RhdHVzQ29kZSwgaGVhZGVycywgc29ja2V0KSB7XG4gICAgdGhpcy5oYW5kbGVyLm9uVXBncmFkZShzdGF0dXNDb2RlLCBoZWFkZXJzLCBzb2NrZXQpXG4gIH1cblxuICBvbkVycm9yIChlcnJvcikge1xuICAgIHRoaXMuaGFuZGxlci5vbkVycm9yKGVycm9yKVxuICB9XG5cbiAgb25IZWFkZXJzIChzdGF0dXNDb2RlLCBoZWFkZXJzLCByZXN1bWUsIHN0YXR1c1RleHQpIHtcbiAgICB0aGlzLmxvY2F0aW9uID0gdGhpcy5oaXN0b3J5Lmxlbmd0aCA+PSB0aGlzLm1heFJlZGlyZWN0aW9ucyB8fCB1dGlsLmlzRGlzdHVyYmVkKHRoaXMub3B0cy5ib2R5KVxuICAgICAgPyBudWxsXG4gICAgICA6IHBhcnNlTG9jYXRpb24oc3RhdHVzQ29kZSwgaGVhZGVycylcblxuICAgIGlmICh0aGlzLm9wdHMub3JpZ2luKSB7XG4gICAgICB0aGlzLmhpc3RvcnkucHVzaChuZXcgVVJMKHRoaXMub3B0cy5wYXRoLCB0aGlzLm9wdHMub3JpZ2luKSlcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMubG9jYXRpb24pIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25IZWFkZXJzKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHJlc3VtZSwgc3RhdHVzVGV4dClcbiAgICB9XG5cbiAgICBjb25zdCB7IG9yaWdpbiwgcGF0aG5hbWUsIHNlYXJjaCB9ID0gdXRpbC5wYXJzZVVSTChuZXcgVVJMKHRoaXMubG9jYXRpb24sIHRoaXMub3B0cy5vcmlnaW4gJiYgbmV3IFVSTCh0aGlzLm9wdHMucGF0aCwgdGhpcy5vcHRzLm9yaWdpbikpKVxuICAgIGNvbnN0IHBhdGggPSBzZWFyY2ggPyBgJHtwYXRobmFtZX0ke3NlYXJjaH1gIDogcGF0aG5hbWVcblxuICAgIC8vIFJlbW92ZSBoZWFkZXJzIHJlZmVycmluZyB0byB0aGUgb3JpZ2luYWwgVVJMLlxuICAgIC8vIEJ5IGRlZmF1bHQgaXQgaXMgSG9zdCBvbmx5LCB1bmxlc3MgaXQncyBhIDMwMyAoc2VlIGJlbG93KSwgd2hpY2ggcmVtb3ZlcyBhbHNvIGFsbCBDb250ZW50LSogaGVhZGVycy5cbiAgICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTYuNFxuICAgIHRoaXMub3B0cy5oZWFkZXJzID0gY2xlYW5SZXF1ZXN0SGVhZGVycyh0aGlzLm9wdHMuaGVhZGVycywgc3RhdHVzQ29kZSA9PT0gMzAzLCB0aGlzLm9wdHMub3JpZ2luICE9PSBvcmlnaW4pXG4gICAgdGhpcy5vcHRzLnBhdGggPSBwYXRoXG4gICAgdGhpcy5vcHRzLm9yaWdpbiA9IG9yaWdpblxuICAgIHRoaXMub3B0cy5tYXhSZWRpcmVjdGlvbnMgPSAwXG4gICAgdGhpcy5vcHRzLnF1ZXJ5ID0gbnVsbFxuXG4gICAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi02LjQuNFxuICAgIC8vIEluIGNhc2Ugb2YgSFRUUCAzMDMsIGFsd2F5cyByZXBsYWNlIG1ldGhvZCB0byBiZSBlaXRoZXIgSEVBRCBvciBHRVRcbiAgICBpZiAoc3RhdHVzQ29kZSA9PT0gMzAzICYmIHRoaXMub3B0cy5tZXRob2QgIT09ICdIRUFEJykge1xuICAgICAgdGhpcy5vcHRzLm1ldGhvZCA9ICdHRVQnXG4gICAgICB0aGlzLm9wdHMuYm9keSA9IG51bGxcbiAgICB9XG4gIH1cblxuICBvbkRhdGEgKGNodW5rKSB7XG4gICAgaWYgKHRoaXMubG9jYXRpb24pIHtcbiAgICAgIC8qXG4gICAgICAgIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNi40XG5cbiAgICAgICAgVExEUjogdW5kaWNpIGFsd2F5cyBpZ25vcmVzIDN4eCByZXNwb25zZSBib2RpZXMuXG5cbiAgICAgICAgUmVkaXJlY3Rpb24gaXMgdXNlZCB0byBzZXJ2ZSB0aGUgcmVxdWVzdGVkIHJlc291cmNlIGZyb20gYW5vdGhlciBVUkwsIHNvIGl0IGlzIGFzc3VtZXMgdGhhdFxuICAgICAgICBubyBib2R5IGlzIGdlbmVyYXRlZCAoYW5kIHRodXMgY2FuIGJlIGlnbm9yZWQpLiBFdmVuIHRob3VnaCBnZW5lcmF0aW5nIGEgYm9keSBpcyBub3QgcHJvaGliaXRlZC5cblxuICAgICAgICBGb3Igc3RhdHVzIDMwMSwgMzAyLCAzMDMsIDMwNyBhbmQgMzA4ICh0aGUgbGF0dGVyIGZyb20gUkZDIDcyMzgpLCB0aGUgc3BlY3MgbWVudGlvbiB0aGF0IHRoZSBib2R5IHVzdWFsbHlcbiAgICAgICAgKHdoaWNoIG1lYW5zIGl0J3Mgb3B0aW9uYWwgYW5kIG5vdCBtYW5kYXRlZCkgY29udGFpbiBqdXN0IGFuIGh5cGVybGluayB0byB0aGUgdmFsdWUgb2ZcbiAgICAgICAgdGhlIExvY2F0aW9uIHJlc3BvbnNlIGhlYWRlciwgc28gdGhlIGJvZHkgY2FuIGJlIGlnbm9yZWQgc2FmZWx5LlxuXG4gICAgICAgIEZvciBzdGF0dXMgMzAwLCB3aGljaCBpcyBcIk11bHRpcGxlIENob2ljZXNcIiwgdGhlIHNwZWMgbWVudGlvbnMgYm90aCBnZW5lcmF0aW5nIGEgTG9jYXRpb25cbiAgICAgICAgcmVzcG9uc2UgaGVhZGVyIEFORCBhIHJlc3BvbnNlIGJvZHkgd2l0aCB0aGUgb3RoZXIgcG9zc2libGUgbG9jYXRpb24gdG8gZm9sbG93LlxuICAgICAgICBTaW5jZSB0aGUgc3BlYyBleHBsaWNpdGlseSBjaG9vc2VzIG5vdCB0byBzcGVjaWZ5IGEgZm9ybWF0IGZvciBzdWNoIGJvZHkgYW5kIGxlYXZlIGl0IHRvXG4gICAgICAgIHNlcnZlcnMgYW5kIGJyb3dzZXJzIGltcGxlbWVudG9ycywgd2UgaWdub3JlIHRoZSBib2R5IGFzIHRoZXJlIGlzIG5vIHNwZWNpZmllZCB3YXkgdG8gZXZlbnR1YWxseSBwYXJzZSBpdC5cbiAgICAgICovXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25EYXRhKGNodW5rKVxuICAgIH1cbiAgfVxuXG4gIG9uQ29tcGxldGUgKHRyYWlsZXJzKSB7XG4gICAgaWYgKHRoaXMubG9jYXRpb24pIHtcbiAgICAgIC8qXG4gICAgICAgIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNi40XG5cbiAgICAgICAgVExEUjogdW5kaWNpIGFsd2F5cyBpZ25vcmVzIDN4eCByZXNwb25zZSB0cmFpbGVycyBhcyB0aGV5IGFyZSBub3QgZXhwZWN0ZWQgaW4gY2FzZSBvZiByZWRpcmVjdGlvbnNcbiAgICAgICAgYW5kIG5laXRoZXIgYXJlIHVzZWZ1bCBpZiBwcmVzZW50LlxuXG4gICAgICAgIFNlZSBjb21tZW50IG9uIG9uRGF0YSBtZXRob2QgYWJvdmUgZm9yIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb25zLlxuICAgICAgKi9cblxuICAgICAgdGhpcy5sb2NhdGlvbiA9IG51bGxcbiAgICAgIHRoaXMuYWJvcnQgPSBudWxsXG5cbiAgICAgIHRoaXMuZGlzcGF0Y2godGhpcy5vcHRzLCB0aGlzKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhhbmRsZXIub25Db21wbGV0ZSh0cmFpbGVycylcbiAgICB9XG4gIH1cblxuICBvbkJvZHlTZW50IChjaHVuaykge1xuICAgIGlmICh0aGlzLmhhbmRsZXIub25Cb2R5U2VudCkge1xuICAgICAgdGhpcy5oYW5kbGVyLm9uQm9keVNlbnQoY2h1bmspXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlTG9jYXRpb24gKHN0YXR1c0NvZGUsIGhlYWRlcnMpIHtcbiAgaWYgKHJlZGlyZWN0YWJsZVN0YXR1c0NvZGVzLmluZGV4T2Yoc3RhdHVzQ29kZSkgPT09IC0xKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaGVhZGVycy5sZW5ndGg7IGkgKz0gMikge1xuICAgIGlmIChoZWFkZXJzW2ldLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT0gJ2xvY2F0aW9uJykge1xuICAgICAgcmV0dXJuIGhlYWRlcnNbaSArIDFdXG4gICAgfVxuICB9XG59XG5cbi8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNi40LjRcbmZ1bmN0aW9uIHNob3VsZFJlbW92ZUhlYWRlciAoaGVhZGVyLCByZW1vdmVDb250ZW50LCB1bmtub3duT3JpZ2luKSB7XG4gIGlmIChoZWFkZXIubGVuZ3RoID09PSA0KSB7XG4gICAgcmV0dXJuIHV0aWwuaGVhZGVyTmFtZVRvU3RyaW5nKGhlYWRlcikgPT09ICdob3N0J1xuICB9XG4gIGlmIChyZW1vdmVDb250ZW50ICYmIHV0aWwuaGVhZGVyTmFtZVRvU3RyaW5nKGhlYWRlcikuc3RhcnRzV2l0aCgnY29udGVudC0nKSkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgaWYgKHVua25vd25PcmlnaW4gJiYgKGhlYWRlci5sZW5ndGggPT09IDEzIHx8IGhlYWRlci5sZW5ndGggPT09IDYgfHwgaGVhZGVyLmxlbmd0aCA9PT0gMTkpKSB7XG4gICAgY29uc3QgbmFtZSA9IHV0aWwuaGVhZGVyTmFtZVRvU3RyaW5nKGhlYWRlcilcbiAgICByZXR1cm4gbmFtZSA9PT0gJ2F1dGhvcml6YXRpb24nIHx8IG5hbWUgPT09ICdjb29raWUnIHx8IG5hbWUgPT09ICdwcm94eS1hdXRob3JpemF0aW9uJ1xuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG4vLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTYuNFxuZnVuY3Rpb24gY2xlYW5SZXF1ZXN0SGVhZGVycyAoaGVhZGVycywgcmVtb3ZlQ29udGVudCwgdW5rbm93bk9yaWdpbikge1xuICBjb25zdCByZXQgPSBbXVxuICBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzKSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGVhZGVycy5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgaWYgKCFzaG91bGRSZW1vdmVIZWFkZXIoaGVhZGVyc1tpXSwgcmVtb3ZlQ29udGVudCwgdW5rbm93bk9yaWdpbikpIHtcbiAgICAgICAgcmV0LnB1c2goaGVhZGVyc1tpXSwgaGVhZGVyc1tpICsgMV0pXG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKGhlYWRlcnMgJiYgdHlwZW9mIGhlYWRlcnMgPT09ICdvYmplY3QnKSB7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoaGVhZGVycykpIHtcbiAgICAgIGlmICghc2hvdWxkUmVtb3ZlSGVhZGVyKGtleSwgcmVtb3ZlQ29udGVudCwgdW5rbm93bk9yaWdpbikpIHtcbiAgICAgICAgcmV0LnB1c2goa2V5LCBoZWFkZXJzW2tleV0pXG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGFzc2VydChoZWFkZXJzID09IG51bGwsICdoZWFkZXJzIG11c3QgYmUgYW4gb2JqZWN0IG9yIGFuIGFycmF5JylcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUmVkaXJlY3RIYW5kbGVyXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBSZWRpcmVjdEhhbmRsZXIgPSByZXF1aXJlKCcuLi9oYW5kbGVyL1JlZGlyZWN0SGFuZGxlcicpXG5cbmZ1bmN0aW9uIGNyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3IgKHsgbWF4UmVkaXJlY3Rpb25zOiBkZWZhdWx0TWF4UmVkaXJlY3Rpb25zIH0pIHtcbiAgcmV0dXJuIChkaXNwYXRjaCkgPT4ge1xuICAgIHJldHVybiBmdW5jdGlvbiBJbnRlcmNlcHQgKG9wdHMsIGhhbmRsZXIpIHtcbiAgICAgIGNvbnN0IHsgbWF4UmVkaXJlY3Rpb25zID0gZGVmYXVsdE1heFJlZGlyZWN0aW9ucyB9ID0gb3B0c1xuXG4gICAgICBpZiAoIW1heFJlZGlyZWN0aW9ucykge1xuICAgICAgICByZXR1cm4gZGlzcGF0Y2gob3B0cywgaGFuZGxlcilcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVkaXJlY3RIYW5kbGVyID0gbmV3IFJlZGlyZWN0SGFuZGxlcihkaXNwYXRjaCwgbWF4UmVkaXJlY3Rpb25zLCBvcHRzLCBoYW5kbGVyKVxuICAgICAgb3B0cyA9IHsgLi4ub3B0cywgbWF4UmVkaXJlY3Rpb25zOiAwIH0gLy8gU3RvcCBzdWIgZGlzcGF0Y2hlciBmcm9tIGFsc28gcmVkaXJlY3RpbmcuXG4gICAgICByZXR1cm4gZGlzcGF0Y2gob3B0cywgcmVkaXJlY3RIYW5kbGVyKVxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3JcbiIsCiAgICAibW9kdWxlLmV4cG9ydHMgPSAnQUdGemJRRUFBQUFCTUFoZ0FYOEJmMkFEZjM5L0FYOWdCSDkvZjM4QmYyQUFBR0FEZjM5L0FHQUJmd0JnQW45L0FHQUdmMzkvZjM5L0FBTExBUWdEWlc1MkdIZGhjMjFmYjI1ZmFHVmhaR1Z5YzE5amIyMXdiR1YwWlFBQ0EyVnVkaFYzWVhOdFgyOXVYMjFsYzNOaFoyVmZZbVZuYVc0QUFBTmxibllMZDJGemJWOXZibDkxY213QUFRTmxibllPZDJGemJWOXZibDl6ZEdGMGRYTUFBUU5sYm5ZVWQyRnpiVjl2Ymw5b1pXRmtaWEpmWm1sbGJHUUFBUU5sYm5ZVWQyRnpiVjl2Ymw5b1pXRmtaWEpmZG1Gc2RXVUFBUU5sYm5ZTWQyRnpiVjl2Ymw5aWIyUjVBQUVEWlc1MkdIZGhjMjFmYjI1ZmJXVnpjMkZuWlY5amIyMXdiR1YwWlFBQUEwWkZBd01FQUFBRkFBQUFBQUFBQlFFRkFBVUZCUUFBQmdBQUFBQUdCZ1lHQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFCQUFBQkFRY0FBQVVGQXdBQkJBVUJjQUVTRWdVREFRQUNCZ2dCZndGQmdOUUVDd2ZSQlNJR2JXVnRiM0o1QWdBTFgybHVhWFJwWVd4cGVtVUFDUmxmWDJsdVpHbHlaV04wWDJaMWJtTjBhVzl1WDNSaFlteGxBUUFMYkd4b2RIUndYMmx1YVhRQUNoaHNiR2gwZEhCZmMyaHZkV3hrWDJ0bFpYQmZZV3hwZG1VQVFReHNiR2gwZEhCZllXeHNiMk1BREFadFlXeHNiMk1BUmd0c2JHaDBkSEJmWm5KbFpRQU5CR1p5WldVQVNBOXNiR2gwZEhCZloyVjBYM1I1Y0dVQURoVnNiR2gwZEhCZloyVjBYMmgwZEhCZmJXRnFiM0lBRHhWc2JHaDBkSEJmWjJWMFgyaDBkSEJmYldsdWIzSUFFQkZzYkdoMGRIQmZaMlYwWDIxbGRHaHZaQUFSRm14c2FIUjBjRjluWlhSZmMzUmhkSFZ6WDJOdlpHVUFFaEpzYkdoMGRIQmZaMlYwWDNWd1ozSmhaR1VBRXd4c2JHaDBkSEJmY21WelpYUUFGQTVzYkdoMGRIQmZaWGhsWTNWMFpRQVZGR3hzYUhSMGNGOXpaWFIwYVc1bmMxOXBibWwwQUJZTmJHeG9kSFJ3WDJacGJtbHphQUFYREd4c2FIUjBjRjl3WVhWelpRQVlEV3hzYUhSMGNGOXlaWE4xYldVQUdSdHNiR2gwZEhCZmNtVnpkVzFsWDJGbWRHVnlYM1Z3WjNKaFpHVUFHaEJzYkdoMGRIQmZaMlYwWDJWeWNtNXZBQnNYYkd4b2RIUndYMmRsZEY5bGNuSnZjbDl5WldGemIyNEFIQmRzYkdoMGRIQmZjMlYwWDJWeWNtOXlYM0psWVhOdmJnQWRGR3hzYUhSMGNGOW5aWFJmWlhKeWIzSmZjRzl6QUI0UmJHeG9kSFJ3WDJWeWNtNXZYMjVoYldVQUh4SnNiR2gwZEhCZmJXVjBhRzlrWDI1aGJXVUFJQkpzYkdoMGRIQmZjM1JoZEhWelgyNWhiV1VBSVJwc2JHaDBkSEJmYzJWMFgyeGxibWxsYm5SZmFHVmhaR1Z5Y3dBaUlXeHNhSFIwY0Y5elpYUmZiR1Z1YVdWdWRGOWphSFZ1YTJWa1gyeGxibWQwYUFBakhXeHNhSFIwY0Y5elpYUmZiR1Z1YVdWdWRGOXJaV1Z3WDJGc2FYWmxBQ1FrYkd4b2RIUndYM05sZEY5c1pXNXBaVzUwWDNSeVlXNXpabVZ5WDJWdVkyOWthVzVuQUNVWWJHeG9kSFJ3WDIxbGMzTmhaMlZmYm1WbFpITmZaVzltQUQ4SkZ3RUFRUUVMRVFFQ0F3UUZDd1lITlRrM01TOHRKeXNwQ3NMZ0FrVUNBQXNJQUJDSWdJQ0FBQXNaQUNBQUVNS0FnSUFBR2lBQUlBSTJBamdnQUNBQk9nQW9DeHdBSUFBZ0FDOEJNaUFBTFFBdUlBQVF3WUNBZ0FBUWdJQ0FnQUFMS2dFQmYwSEFBQkRHZ0lDQUFDSUJFTUtBZ0lBQUdpQUJRWUNJZ0lBQU5nSTRJQUVnQURvQUtDQUJDd29BSUFBUXlJQ0FnQUFMQndBZ0FDMEFLQXNIQUNBQUxRQXFDd2NBSUFBdEFDc0xCd0FnQUMwQUtRc0hBQ0FBTHdFeUN3Y0FJQUF0QUM0TFJRRUVmeUFBS0FJWUlRRWdBQzBBTFNFQ0lBQXRBQ2doQXlBQUtBSTRJUVFnQUJEQ2dJQ0FBQm9nQUNBRU5nSTRJQUFnQXpvQUtDQUFJQUk2QUMwZ0FDQUJOZ0lZQ3hFQUlBQWdBU0FCSUFKcUVNT0FnSUFBQ3hBQUlBQkJBRUhjQUJETWdJQ0FBQm9MWndFQmYwRUFJUUVDUUNBQUtBSU1EUUFDUUFKQUFrQUNRQ0FBTFFBdkRnTUJBQU1DQ3lBQUtBSTRJZ0ZGRFFBZ0FTZ0NMQ0lCUlEwQUlBQWdBUkdBZ0lDQUFBQWlBUTBEQzBFQUR3c1F5b0NBZ0FBQUN5QUFRY09XZ0lBQU5nSVFRUTRoQVFzZ0FRc2VBQUpBSUFBb0Fnd05BQ0FBUWRHYmdJQUFOZ0lRSUFCQkZUWUNEQXNMRmdBQ1FDQUFLQUlNUVJWSERRQWdBRUVBTmdJTUN3c1dBQUpBSUFBb0FneEJGa2NOQUNBQVFRQTJBZ3dMQ3djQUlBQW9BZ3dMQndBZ0FDZ0NFQXNKQUNBQUlBRTJBaEFMQndBZ0FDZ0NGQXNpQUFKQUlBQkJKRWtOQUJES2dJQ0FBQUFMSUFCQkFuUkJvTE9BZ0FCcUtBSUFDeUlBQWtBZ0FFRXVTUTBBRU1xQWdJQUFBQXNnQUVFQ2RFR3d0SUNBQUdvb0FnQUw3Z3NCQVg5QjY2aUFnQUFoQVFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUlBQkJuSDlxRHZRRFkySUFBV0ZoWVdGaFlRSURCQVZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaEJnY0lDUW9MREEwT0QyRmhZV0ZoRUdGaFlXRmhZV0ZoWVdGaEVXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlSSVRGQlVXRnhnWkdodGhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhIQjBlSHlBaElpTWtKU1luS0NrcUt5d3RMaTh3TVRJek5EVTJZVGM0T1RwaFlXRmhZV0ZoWVR0aFlXRThZV0ZoWVQwK1AyRmhZV0ZoWVdGaFFHRmhRV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVVKRFJFVkdSMGhKU2t0TVRVNVBVRkZTVTJGaFlXRmhZV0ZoVkZWV1YxaFpXbHRoWEYxaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmVZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhYMkJoQzBIaHA0Q0FBQThMUWFTaGdJQUFEd3RCeTZ5QWdBQVBDMEgrc1lDQUFBOExRY0NrZ0lBQUR3dEJxNlNBZ0FBUEMwR05xSUNBQUE4TFFlS21nSUFBRHd0QmdMQ0FnQUFQQzBHNXI0Q0FBQThMUWRla2dJQUFEd3RCNzUrQWdBQVBDMEhobjRDQUFBOExRZnFmZ0lBQUR3dEI4cUNBZ0FBUEMwR29yNENBQUE4TFFhNnlnSUFBRHd0QmlMQ0FnQUFQQzBIc3A0Q0FBQThMUVlLaWdJQUFEd3RCanAyQWdBQVBDMEhRcm9DQUFBOExRY3FqZ0lBQUR3dEJ4YktBZ0FBUEMwSGZuSUNBQUE4TFFkS2NnSUFBRHd0QnhLQ0FnQUFQQzBIWG9JQ0FBQThMUWFLZmdJQUFEd3RCN2E2QWdBQVBDMEdyc0lDQUFBOExRZFNsZ0lBQUR3dEJ6SzZBZ0FBUEMwSDZyb0NBQUE4TFFmeXJnSUFBRHd0QjByQ0FnQUFQQzBIeG5ZQ0FBQThMUWJ1Z2dJQUFEd3RCOTZ1QWdBQVBDMEdRc1lDQUFBOExRZGV4Z0lBQUR3dEJvcTJBZ0FBUEMwSFVwNENBQUE4TFFlQ3JnSUFBRHd0Qm42eUFnQUFQQzBIcnNZQ0FBQThMUWRXZmdJQUFEd3RCeXJHQWdBQVBDMEhlcFlDQUFBOExRZFNlZ0lBQUR3dEI5SnlBZ0FBUEMwR25zb0NBQUE4TFFiR2RnSUFBRHd0Qm9KMkFnQUFQQzBHNXNZQ0FBQThMUWJ5d2dJQUFEd3RCa3FHQWdBQVBDMEd6cG9DQUFBOExRZW1zZ0lBQUR3dEJySjZBZ0FBUEMwSFVxNENBQUE4TFFmZW1nSUFBRHd0QmdLYUFnQUFQQzBHd29ZQ0FBQThMUWY2ZWdJQUFEd3RCamFPQWdBQVBDMEdKcllDQUFBOExRZmVpZ0lBQUR3dEJvTEdBZ0FBUEMwR3VuNENBQUE4TFFjYWxnSUFBRHd0QjZKNkFnQUFQQzBHVG9vQ0FBQThMUWNLdmdJQUFEd3RCdzUyQWdBQVBDMEdMcklDQUFBOExRZUdkZ0lBQUR3dEJqYStBZ0FBUEMwSHFvWUNBQUE4TFFiU3RnSUFBRHd0QjBxK0FnQUFQQzBIZnNvQ0FBQThMUWRLeWdJQUFEd3RCOExDQWdBQVBDMEdwb29DQUFBOExRZm1qZ0lBQUR3dEJtWjZBZ0FBUEMwRzFySUNBQUE4TFFadXdnSUFBRHd0QmtyS0FnQUFQQzBHMnE0Q0FBQThMUWNLaWdJQUFEd3RCK0xLQWdBQVBDMEdlcFlDQUFBOExRZENpZ0lBQUR3dEJ1cDZBZ0FBUEMwR0Jub0NBQUE4TEVNcUFnSUFBQUF0QjFxR0FnQUFoQVFzZ0FRc1dBQ0FBSUFBdEFDMUIvZ0Z4SUFGQkFFZHlPZ0F0Q3hrQUlBQWdBQzBBTFVIOUFYRWdBVUVBUjBFQmRISTZBQzBMR1FBZ0FDQUFMUUF0UWZzQmNTQUJRUUJIUVFKMGNqb0FMUXNaQUNBQUlBQXRBQzFCOXdGeElBRkJBRWRCQTNSeU9nQXRDeTRCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FnQWlCRVVOQUNBQUlBUVJnSUNBZ0FBQUlRTUxJQU1MU1FFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NCQ0lFUlEwQUlBQWdBU0FDSUFGcklBUVJnWUNBZ0FBQUlnTkJmMGNOQUNBQVFjYVJnSUFBTmdJUVFSZ2hBd3NnQXdzdUFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUl3SWdSRkRRQWdBQ0FFRVlDQWdJQUFBQ0VEQ3lBREMwa0JBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWdnaUJFVU5BQ0FBSUFFZ0FpQUJheUFFRVlHQWdJQUFBQ0lEUVg5SERRQWdBRUgyaW9DQUFEWUNFRUVZSVFNTElBTUxMZ0VDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ05DSUVSUTBBSUFBZ0JCR0FnSUNBQUFBaEF3c2dBd3RKQVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSU1JZ1JGRFFBZ0FDQUJJQUlnQVdzZ0JCR0JnSUNBQUFBaUEwRi9SdzBBSUFCQjdacUFnQUEyQWhCQkdDRURDeUFEQ3k0QkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9BamdpQkVVTkFDQUFJQVFSZ0lDQWdBQUFJUU1MSUFNTFNRRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDRUNJRVJRMEFJQUFnQVNBQ0lBRnJJQVFSZ1lDQWdBQUFJZ05CZjBjTkFDQUFRWldRZ0lBQU5nSVFRUmdoQXdzZ0F3c3VBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FJOElnUkZEUUFnQUNBRUVZQ0FnSUFBQUNFREN5QURDMGtCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FoUWlCRVVOQUNBQUlBRWdBaUFCYXlBRUVZR0FnSUFBQUNJRFFYOUhEUUFnQUVHcW00Q0FBRFlDRUVFWUlRTUxJQU1MTGdFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NRQ0lFUlEwQUlBQWdCQkdBZ0lDQUFBQWhBd3NnQXd0SkFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUlZSWdSRkRRQWdBQ0FCSUFJZ0FXc2dCQkdCZ0lDQUFBQWlBMEYvUncwQUlBQkI3Wk9BZ0FBMkFoQkJHQ0VEQ3lBREN5NEJBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWtRaUJFVU5BQ0FBSUFRUmdJQ0FnQUFBSVFNTElBTUxMZ0VDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ0pDSUVSUTBBSUFBZ0JCR0FnSUNBQUFBaEF3c2dBd3N1QVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSXNJZ1JGRFFBZ0FDQUVFWUNBZ0lBQUFDRURDeUFEQzBrQkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9BaWdpQkVVTkFDQUFJQUVnQWlBQmF5QUVFWUdBZ0lBQUFDSURRWDlIRFFBZ0FFSDJpSUNBQURZQ0VFRVlJUU1MSUFNTExnRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDVUNJRVJRMEFJQUFnQkJHQWdJQ0FBQUFoQXdzZ0F3dEpBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FJY0lnUkZEUUFnQUNBQklBSWdBV3NnQkJHQmdJQ0FBQUFpQTBGL1J3MEFJQUJCd3BtQWdBQTJBaEJCR0NFREN5QURDeTRCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FrZ2lCRVVOQUNBQUlBUVJnSUNBZ0FBQUlRTUxJQU1MU1FFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NJQ0lFUlEwQUlBQWdBU0FDSUFGcklBUVJnWUNBZ0FBQUlnTkJmMGNOQUNBQVFaU1VnSUFBTmdJUVFSZ2hBd3NnQXdzdUFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUpNSWdSRkRRQWdBQ0FFRVlDQWdJQUFBQ0VEQ3lBREN5NEJBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWxRaUJFVU5BQ0FBSUFRUmdJQ0FnQUFBSVFNTElBTUxMZ0VDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ1dDSUVSUTBBSUFBZ0JCR0FnSUNBQUFBaEF3c2dBd3RGQVFGL0FrQUNRQ0FBTHdFd1FSUnhRUlJIRFFCQkFTRURJQUF0QUNoQkFVWU5BU0FBTHdFeVFlVUFSaUVEREFFTElBQXRBQ2xCQlVZaEF3c2dBQ0FET2dBdVFRQUwvZ0VCQTM5QkFTRURBa0FnQUM4Qk1DSUVRUWh4RFFBZ0FDa0RJRUlBVWlFREN3SkFBa0FnQUMwQUxrVU5BRUVCSVFVZ0FDMEFLVUVGUmcwQlFRRWhCU0FFUWNBQWNVVWdBM0ZCQVVjTkFRdEJBQ0VGSUFSQndBQnhEUUJCQWlFRklBUkIvLzhEY1NJRFFRaHhEUUFDUUNBRFFZQUVjVVVOQUFKQUlBQXRBQ2hCQVVjTkFDQUFMUUF0UVFweERRQkJCUThMUVFRUEN3SkFJQU5CSUhFTkFBSkFJQUF0QUNoQkFVWU5BQ0FBTHdFeVFmLy9BM0VpQUVHY2YycEI1QUJKRFFBZ0FFSE1BVVlOQUNBQVFiQUNSZzBBUVFRaEJTQUVRU2h4UlEwQ0lBTkJpQVJ4UVlBRVJnMENDMEVBRHd0QkFFRURJQUFwQXlCUUd5RUZDeUFGQzJJQkFuOUJBQ0VCQWtBZ0FDMEFLRUVCUmcwQUlBQXZBVEpCLy84RGNTSUNRWngvYWtIa0FFa05BQ0FDUWN3QlJnMEFJQUpCc0FKR0RRQWdBQzhCTUNJQVFjQUFjUTBBUVFFaEFTQUFRWWdFY1VHQUJFWU5BQ0FBUVNoeFJTRUJDeUFCQzZjQkFRTi9Ba0FDUUFKQUlBQXRBQ3BGRFFBZ0FDMEFLMFVOQUVFQUlRTWdBQzhCTUNJRVFRSnhSUTBCREFJTFFRQWhBeUFBTHdFd0lnUkJBWEZGRFFFTFFRRWhBeUFBTFFBb1FRRkdEUUFnQUM4Qk1rSC8vd054SWdWQm5IOXFRZVFBU1EwQUlBVkJ6QUZHRFFBZ0JVR3dBa1lOQUNBRVFjQUFjUTBBUVFBaEF5QUVRWWdFY1VHQUJFWU5BQ0FFUVNoeFFRQkhJUU1MSUFCQkFEc0JNQ0FBUVFBNkFDOGdBd3VaQVFFQ2Z3SkFBa0FDUUNBQUxRQXFSUTBBSUFBdEFDdEZEUUJCQUNFQklBQXZBVEFpQWtFQ2NVVU5BUXdDQzBFQUlRRWdBQzhCTUNJQ1FRRnhSUTBCQzBFQklRRWdBQzBBS0VFQlJnMEFJQUF2QVRKQi8vOERjU0lBUVp4L2FrSGtBRWtOQUNBQVFjd0JSZzBBSUFCQnNBSkdEUUFnQWtIQUFIRU5BRUVBSVFFZ0FrR0lCSEZCZ0FSR0RRQWdBa0VvY1VFQVJ5RUJDeUFCQzFrQUlBQkJHR3BDQURjREFDQUFRZ0EzQXdBZ0FFRTRha0lBTndNQUlBQkJNR3BDQURjREFDQUFRU2hxUWdBM0F3QWdBRUVnYWtJQU53TUFJQUJCRUdwQ0FEY0RBQ0FBUVFocVFnQTNBd0FnQUVIZEFUWUNIRUVBQzNzQkFYOENRQ0FBS0FJTUlnTU5BQUpBSUFBb0FnUkZEUUFnQUNBQk5nSUVDd0pBSUFBZ0FTQUNFTVNBZ0lBQUlnTU5BQ0FBS0FJTUR3c2dBQ0FETmdJY1FRQWhBeUFBS0FJRUlnRkZEUUFnQUNBQklBSWdBQ2dDQ0JHQmdJQ0FBQUFpQVVVTkFDQUFJQUkyQWhRZ0FDQUJOZ0lNSUFFaEF3c2dBd3ZrOHdFRERuOERmZ1IvSTRDQWdJQUFRUkJySWdNa2dJQ0FnQUFnQVNFRUlBRWhCU0FCSVFZZ0FTRUhJQUVoQ0NBQklRa2dBU0VLSUFFaEN5QUJJUXdnQVNFTklBRWhEaUFCSVE4Q1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBZ0FDZ0NIQ0lRUVg5cUR0MEIyZ0VCMlFFQ0F3UUZCZ2NJQ1FvTERBME8yQUVQRU5jQkVSTFdBUk1VRlJZWEdCa2FHK0FCM3dFY0hSN1ZBUjhnSVNJakpDWFVBU1luS0NrcUt5elRBZElCTFM3UkFkQUJMekF4TWpNME5UWTNPRGs2T3p3OVBqOUFRVUpEUkVWRzJ3RkhTRWxLendIT0FVdk5BVXpNQVUxT1QxQlJVbE5VVlZaWFdGbGFXMXhkWGw5Z1lXSmpaR1ZtWjJocGFtdHNiVzV2Y0hGeWMzUjFkbmQ0ZVhwN2ZIMStmNEFCZ1FHQ0FZTUJoQUdGQVlZQmh3R0lBWWtCaWdHTEFZd0JqUUdPQVk4QmtBR1JBWklCa3dHVUFaVUJsZ0dYQVpnQm1RR2FBWnNCbkFHZEFaNEJud0dnQWFFQm9nR2pBYVFCcFFHbUFhY0JxQUdwQWFvQnF3R3NBYTBCcmdHdkFiQUJzUUd5QWJNQnRBRzFBYllCdHdITEFjb0J1QUhKQWJrQnlBRzZBYnNCdkFHOUFiNEJ2d0hBQWNFQndnSERBY1FCeFFIR0FRRGNBUXRCQUNFUURNWUJDMEVPSVJBTXhRRUxRUTBoRUF6RUFRdEJEeUVRRE1NQkMwRVFJUkFNd2dFTFFSTWhFQXpCQVF0QkZDRVFETUFCQzBFVklSQU12d0VMUVJZaEVBeStBUXRCRnlFUURMMEJDMEVZSVJBTXZBRUxRUmtoRUF5N0FRdEJHaUVRRExvQkMwRWJJUkFNdVFFTFFSd2hFQXk0QVF0QkNDRVFETGNCQzBFZElSQU10Z0VMUVNBaEVBeTFBUXRCSHlFUURMUUJDMEVISVJBTXN3RUxRU0VoRUF5eUFRdEJJaUVRRExFQkMwRWVJUkFNc0FFTFFTTWhFQXl2QVF0QkVpRVFESzRCQzBFUklSQU1yUUVMUVNRaEVBeXNBUXRCSlNFUURLc0JDMEVtSVJBTXFnRUxRU2NoRUF5cEFRdEJ3d0VoRUF5b0FRdEJLU0VRREtjQkMwRXJJUkFNcGdFTFFTd2hFQXlsQVF0QkxTRVFES1FCQzBFdUlSQU1vd0VMUVM4aEVBeWlBUXRCeEFFaEVBeWhBUXRCTUNFUURLQUJDMEUwSVJBTW53RUxRUXdoRUF5ZUFRdEJNU0VRREowQkMwRXlJUkFNbkFFTFFUTWhFQXliQVF0Qk9TRVFESm9CQzBFMUlSQU1tUUVMUWNVQklSQU1tQUVMUVFzaEVBeVhBUXRCT2lFUURKWUJDMEUySVJBTWxRRUxRUW9oRUF5VUFRdEJOeUVRREpNQkMwRTRJUkFNa2dFTFFUd2hFQXlSQVF0Qk95RVFESkFCQzBFOUlSQU1qd0VMUVFraEVBeU9BUXRCS0NFUURJMEJDMEUrSVJBTWpBRUxRVDhoRUF5TEFRdEJ3QUFoRUF5S0FRdEJ3UUFoRUF5SkFRdEJ3Z0FoRUF5SUFRdEJ3d0FoRUF5SEFRdEJ4QUFoRUF5R0FRdEJ4UUFoRUF5RkFRdEJ4Z0FoRUF5RUFRdEJLaUVRRElNQkMwSEhBQ0VRRElJQkMwSElBQ0VRRElFQkMwSEpBQ0VRRElBQkMwSEtBQ0VRREg4TFFjc0FJUkFNZmd0QnpRQWhFQXg5QzBITUFDRVFESHdMUWM0QUlSQU1ld3RCendBaEVBeDZDMEhRQUNFUURIa0xRZEVBSVJBTWVBdEIwZ0FoRUF4M0MwSFRBQ0VRREhZTFFkUUFJUkFNZFF0QjFnQWhFQXgwQzBIVkFDRVFESE1MUVFZaEVBeHlDMEhYQUNFUURIRUxRUVVoRUF4d0MwSFlBQ0VRREc4TFFRUWhFQXh1QzBIWkFDRVFERzBMUWRvQUlSQU1iQXRCMndBaEVBeHJDMEhjQUNFUURHb0xRUU1oRUF4cEMwSGRBQ0VRREdnTFFkNEFJUkFNWnd0QjN3QWhFQXhtQzBIaEFDRVFER1VMUWVBQUlSQU1aQXRCNGdBaEVBeGpDMEhqQUNFUURHSUxRUUloRUF4aEMwSGtBQ0VRREdBTFFlVUFJUkFNWHd0QjVnQWhFQXhlQzBIbkFDRVFERjBMUWVnQUlSQU1YQXRCNlFBaEVBeGJDMEhxQUNFUURGb0xRZXNBSVJBTVdRdEI3QUFoRUF4WUMwSHRBQ0VRREZjTFFlNEFJUkFNVmd0Qjd3QWhFQXhWQzBId0FDRVFERlFMUWZFQUlSQU1Vd3RCOGdBaEVBeFNDMEh6QUNFUURGRUxRZlFBSVJBTVVBdEI5UUFoRUF4UEMwSDJBQ0VRREU0TFFmY0FJUkFNVFF0QitBQWhFQXhNQzBINUFDRVFERXNMUWZvQUlSQU1TZ3RCK3dBaEVBeEpDMEg4QUNFUURFZ0xRZjBBSVJBTVJ3dEIvZ0FoRUF4R0MwSC9BQ0VRREVVTFFZQUJJUkFNUkF0QmdRRWhFQXhEQzBHQ0FTRVFERUlMUVlNQklSQU1RUXRCaEFFaEVBeEFDMEdGQVNFUUREOExRWVlCSVJBTVBndEJod0VoRUF3OUMwR0lBU0VRRER3TFFZa0JJUkFNT3d0QmlnRWhFQXc2QzBHTEFTRVFERGtMUVl3QklSQU1PQXRCalFFaEVBdzNDMEdPQVNFUUREWUxRWThCSVJBTU5RdEJrQUVoRUF3MEMwR1JBU0VRRERNTFFaSUJJUkFNTWd0Qmt3RWhFQXd4QzBHVUFTRVFEREFMUVpVQklSQU1Md3RCbGdFaEVBd3VDMEdYQVNFUURDMExRWmdCSVJBTUxBdEJtUUVoRUF3ckMwR2FBU0VRRENvTFFac0JJUkFNS1F0Qm5BRWhFQXdvQzBHZEFTRVFEQ2NMUVo0QklSQU1KZ3RCbndFaEVBd2xDMEdnQVNFUURDUUxRYUVCSVJBTUl3dEJvZ0VoRUF3aUMwR2pBU0VRRENFTFFhUUJJUkFNSUF0QnBRRWhFQXdmQzBHbUFTRVFEQjRMUWFjQklSQU1IUXRCcUFFaEVBd2NDMEdwQVNFUURCc0xRYW9CSVJBTUdndEJxd0VoRUF3WkMwR3NBU0VRREJnTFFhMEJJUkFNRnd0QnJnRWhFQXdXQzBFQklSQU1GUXRCcndFaEVBd1VDMEd3QVNFUURCTUxRYkVCSVJBTUVndEJzd0VoRUF3UkMwR3lBU0VRREJBTFFiUUJJUkFNRHd0QnRRRWhFQXdPQzBHMkFTRVFEQTBMUWJjQklSQU1EQXRCdUFFaEVBd0xDMEc1QVNFUURBb0xRYm9CSVJBTUNRdEJ1d0VoRUF3SUMwSEdBU0VRREFjTFFid0JJUkFNQmd0QnZRRWhFQXdGQzBHK0FTRVFEQVFMUWI4QklSQU1Bd3RCd0FFaEVBd0NDMEhDQVNFUURBRUxRY0VCSVJBTEEwQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQ0FRRHNjQkFBRUNBd1FGQmdjSUNRb0xEQTBPRHhBUkVoTVVGUllYR0JrYUd4d2VIeUFoSXlVb1AwQkJSRVZHUjBoSlNrdE1UVTlRVVZKVDNnTlhXVnRjWFdCaVpXWm5hR2xxYTJ4dGIzQnhjbk4wZFhaM2VIbDZlM3g5Zm9BQmdnR0ZBWVlCaHdHSkFZc0JqQUdOQVk0Qmp3R1FBWkVCbEFHVkFaWUJsd0dZQVprQm1nR2JBWndCblFHZUFaOEJvQUdoQWFJQm93R2tBYVVCcGdHbkFhZ0JxUUdxQWFzQnJBR3RBYTRCcndHd0FiRUJzZ0d6QWJRQnRRRzJBYmNCdUFHNUFib0J1d0c4QWIwQnZnRy9BY0FCd1FIQ0FjTUJ4QUhGQWNZQnh3SElBY2tCeWdITEFjd0J6UUhPQWM4QjBBSFJBZElCMHdIVUFkVUIxZ0hYQWRnQjJRSGFBZHNCM0FIZEFkNEI0QUhoQWVJQjR3SGtBZVVCNWdIbkFlZ0I2UUhxQWVzQjdBSHRBZTRCN3dId0FmRUI4Z0h6QVprQ3BBS3dBdjRDL2dJTElBRWlCQ0FDUnczekFVSGRBU0VRRFA4REN5QUJJaEFnQWtjTjNRRkJ3d0VoRUF6K0F3c2dBU0lCSUFKSERaQUJRZmNBSVJBTS9RTUxJQUVpQVNBQ1J3MkdBVUh2QUNFUURQd0RDeUFCSWdFZ0FrY05mMEhxQUNFUURQc0RDeUFCSWdFZ0FrY05lMEhvQUNFUURQb0RDeUFCSWdFZ0FrY05lRUhtQUNFUURQa0RDeUFCSWdFZ0FrY05Ha0VZSVJBTStBTUxJQUVpQVNBQ1J3MFVRUkloRUF6M0F3c2dBU0lCSUFKSERWbEJ4UUFoRUF6MkF3c2dBU0lCSUFKSERVcEJQeUVRRFBVREN5QUJJZ0VnQWtjTlNFRThJUkFNOUFNTElBRWlBU0FDUncxQlFURWhFQXp6QXdzZ0FDMEFMa0VCUmczckF3eUhBZ3NnQUNBQklnRWdBaERBZ0lDQUFFRUJSdzNtQVNBQVFnQTNBeUFNNXdFTElBQWdBU0lCSUFJUXRJQ0FnQUFpRUEzbkFTQUJJUUVNOVFJTEFrQWdBU0lCSUFKSERRQkJCaUVRRFBBREN5QUFJQUZCQVdvaUFTQUNFTHVBZ0lBQUloQU42QUVnQVNFQkRERUxJQUJDQURjRElFRVNJUkFNMVFNTElBRWlFQ0FDUncwclFSMGhFQXp0QXdzQ1FDQUJJZ0VnQWtZTkFDQUJRUUZxSVFGQkVDRVFETlFEQzBFSElSQU03QU1MSUFCQ0FDQUFLUU1nSWhFZ0FpQUJJaEJyclNJU2ZTSVRJQk1nRVZZYk53TWdJQkVnRWxZaUZFVU41UUZCQ0NFUURPc0RDd0pBSUFFaUFTQUNSZzBBSUFCQmlZQ0FnQUEyQWdnZ0FDQUJOZ0lFSUFFaEFVRVVJUkFNMGdNTFFRa2hFQXpxQXdzZ0FTRUJJQUFwQXlCUURlUUJJQUVoQVF6eUFnc0NRQ0FCSWdFZ0FrY05BRUVMSVJBTTZRTUxJQUFnQVVFQmFpSUJJQUlRdG9DQWdBQWlFQTNsQVNBQklRRU04Z0lMSUFBZ0FTSUJJQUlRdUlDQWdBQWlFQTNsQVNBQklRRU04Z0lMSUFBZ0FTSUJJQUlRdUlDQWdBQWlFQTNtQVNBQklRRU1EUXNnQUNBQklnRWdBaEM2Z0lDQUFDSVFEZWNCSUFFaEFRendBZ3NDUUNBQklnRWdBa2NOQUVFUElSQU01UU1MSUFFdEFBQWlFRUU3UmcwSUlCQkJEVWNONkFFZ0FVRUJhaUVCRE84Q0N5QUFJQUVpQVNBQ0VMcUFnSUFBSWhBTjZBRWdBU0VCRFBJQ0N3TkFBa0FnQVMwQUFFSHd0WUNBQUdvdEFBQWlFRUVCUmcwQUlCQkJBa2NONndFZ0FDZ0NCQ0VRSUFCQkFEWUNCQ0FBSUJBZ0FVRUJhaUlCRUxtQWdJQUFJaEFONmdFZ0FTRUJEUFFDQ3lBQlFRRnFJZ0VnQWtjTkFBdEJFaUVRRE9JREN5QUFJQUVpQVNBQ0VMcUFnSUFBSWhBTjZRRWdBU0VCREFvTElBRWlBU0FDUncwR1FSc2hFQXpnQXdzQ1FDQUJJZ0VnQWtjTkFFRVdJUkFNNEFNTElBQkJpb0NBZ0FBMkFnZ2dBQ0FCTmdJRUlBQWdBU0FDRUxpQWdJQUFJaEFONmdFZ0FTRUJRU0FoRUF6R0F3c0NRQ0FCSWdFZ0FrWU5BQU5BQWtBZ0FTMEFBRUh3dDRDQUFHb3RBQUFpRUVFQ1JnMEFBa0FnRUVGL2FnNEU1UUhzQVFEckFld0JDeUFCUVFGcUlRRkJDQ0VRRE1nREN5QUJRUUZxSWdFZ0FrY05BQXRCRlNFUUROOERDMEVWSVJBTTNnTUxBMEFDUUNBQkxRQUFRZkM1Z0lBQWFpMEFBQ0lRUVFKR0RRQWdFRUYvYWc0RTNnSHNBZUFCNndIc0FRc2dBVUVCYWlJQklBSkhEUUFMUVJnaEVBemRBd3NDUUNBQklnRWdBa1lOQUNBQVFZdUFnSUFBTmdJSUlBQWdBVFlDQkNBQklRRkJCeUVRRE1RREMwRVpJUkFNM0FNTElBRkJBV29oQVF3Q0N3SkFJQUVpRkNBQ1J3MEFRUm9oRUF6YkF3c2dGQ0VCQWtBZ0ZDMEFBRUZ6YWc0VTNRTHVBdTRDN2dMdUF1NEM3Z0x1QXU0QzdnTHVBdTRDN2dMdUF1NEM3Z0x1QXU0QzdnSUE3Z0lMUVFBaEVDQUFRUUEyQWh3Z0FFR3ZpNENBQURZQ0VDQUFRUUkyQWd3Z0FDQVVRUUZxTmdJVUROb0RDd0pBSUFFdEFBQWlFRUU3UmcwQUlCQkJEVWNONkFFZ0FVRUJhaUVCRE9VQ0N5QUJRUUZxSVFFTFFTSWhFQXkvQXdzQ1FDQUJJaEFnQWtjTkFFRWNJUkFNMkFNTFFnQWhFU0FRSVFFZ0VDMEFBRUZRYWc0MzV3SG1BUUVDQXdRRkJnY0lBQUFBQUFBQUFBa0tDd3dORGdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRHhBUkVoTVVBQXRCSGlFUURMMERDMElDSVJFTTVRRUxRZ01oRVF6a0FRdENCQ0VSRE9NQkMwSUZJUkVNNGdFTFFnWWhFUXpoQVF0Q0J5RVJET0FCQzBJSUlSRU0zd0VMUWdraEVRemVBUXRDQ2lFUkROMEJDMElMSVJFTTNBRUxRZ3doRVF6YkFRdENEU0VSRE5vQkMwSU9JUkVNMlFFTFFnOGhFUXpZQVF0Q0NpRVJETmNCQzBJTElSRU0xZ0VMUWd3aEVRelZBUXRDRFNFUkROUUJDMElPSVJFTTB3RUxRZzhoRVF6U0FRdENBQ0VSQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FDQVFMUUFBUVZCcURqZmxBZVFCQUFFQ0F3UUZCZ2ZtQWVZQjVnSG1BZVlCNWdIbUFRZ0pDZ3NNRGVZQjVnSG1BZVlCNWdIbUFlWUI1Z0htQWVZQjVnSG1BZVlCNWdIbUFlWUI1Z0htQWVZQjVnSG1BZVlCNWdIbUFlWUI1Z0VPRHhBUkVoUG1BUXRDQWlFUkRPUUJDMElESVJFTTR3RUxRZ1FoRVF6aUFRdENCU0VSRE9FQkMwSUdJUkVNNEFFTFFnY2hFUXpmQVF0Q0NDRVJETjRCQzBJSklSRU0zUUVMUWdvaEVRemNBUXRDQ3lFUkROc0JDMElNSVJFTTJnRUxRZzBoRVF6WkFRdENEaUVSRE5nQkMwSVBJUkVNMXdFTFFnb2hFUXpXQVF0Q0N5RVJETlVCQzBJTUlSRU0xQUVMUWcwaEVRelRBUXRDRGlFUkROSUJDMElQSVJFTTBRRUxJQUJDQUNBQUtRTWdJaEVnQWlBQkloQnJyU0lTZlNJVElCTWdFVlliTndNZ0lCRWdFbFlpRkVVTjBnRkJIeUVRRE1BREN3SkFJQUVpQVNBQ1JnMEFJQUJCaVlDQWdBQTJBZ2dnQUNBQk5nSUVJQUVoQVVFa0lSQU1wd01MUVNBaEVBeS9Bd3NnQUNBQkloQWdBaEMrZ0lDQUFFRi9hZzRGdGdFQXhRSUIwUUhTQVF0QkVTRVFES1FEQ3lBQVFRRTZBQzhnRUNFQkRMc0RDeUFCSWdFZ0FrY04wZ0ZCSkNFUURMc0RDeUFCSWcwZ0FrY05Ia0hHQUNFUURMb0RDeUFBSUFFaUFTQUNFTEtBZ0lBQUloQU4xQUVnQVNFQkRMVUJDeUFCSWhBZ0FrY05Ka0hRQUNFUURMZ0RDd0pBSUFFaUFTQUNSdzBBUVNnaEVBeTRBd3NnQUVFQU5nSUVJQUJCaklDQWdBQTJBZ2dnQUNBQklBRVFzWUNBZ0FBaUVBM1RBU0FCSVFFTTJBRUxBa0FnQVNJUUlBSkhEUUJCS1NFUURMY0RDeUFRTFFBQUlnRkJJRVlORkNBQlFRbEhEZE1CSUJCQkFXb2hBUXdWQ3dKQUlBRWlBU0FDUmcwQUlBRkJBV29oQVF3WEMwRXFJUkFNdFFNTEFrQWdBU0lRSUFKSERRQkJLeUVRRExVREN3SkFJQkF0QUFBaUFVRUpSZzBBSUFGQklFY04xUUVMSUFBdEFDeEJDRVlOMHdFZ0VDRUJESkVEQ3dKQUlBRWlBU0FDUncwQVFTd2hFQXkwQXdzZ0FTMEFBRUVLUnczVkFTQUJRUUZxSVFFTXlRSUxJQUVpRGlBQ1J3M1ZBVUV2SVJBTXNnTUxBMEFDUUNBQkxRQUFJaEJCSUVZTkFBSkFJQkJCZG1vT0JBRGNBZHdCQU5vQkN5QUJJUUVNNEFFTElBRkJBV29pQVNBQ1J3MEFDMEV4SVJBTXNRTUxRVEloRUNBQkloUWdBa1lOc0FNZ0FpQVVheUFBS0FJQUlnRnFJUlVnRkNBQmEwRURhaUVXQWtBRFFDQVVMUUFBSWhkQklISWdGeUFYUWI5L2FrSC9BWEZCR2trYlFmOEJjU0FCUWZDN2dJQUFhaTBBQUVjTkFRSkFJQUZCQTBjTkFFRUdJUUVNbGdNTElBRkJBV29oQVNBVVFRRnFJaFFnQWtjTkFBc2dBQ0FWTmdJQURMRURDeUFBUVFBMkFnQWdGQ0VCRE5rQkMwRXpJUkFnQVNJVUlBSkdEYThESUFJZ0ZHc2dBQ2dDQUNJQmFpRVZJQlFnQVd0QkNHb2hGZ0pBQTBBZ0ZDMEFBQ0lYUVNCeUlCY2dGMEcvZjJwQi93RnhRUnBKRzBIL0FYRWdBVUgwdTRDQUFHb3RBQUJIRFFFQ1FDQUJRUWhIRFFCQkJTRUJESlVEQ3lBQlFRRnFJUUVnRkVFQmFpSVVJQUpIRFFBTElBQWdGVFlDQUF5d0F3c2dBRUVBTmdJQUlCUWhBUXpZQVF0Qk5DRVFJQUVpRkNBQ1JnMnVBeUFDSUJScklBQW9BZ0FpQVdvaEZTQVVJQUZyUVFWcUlSWUNRQU5BSUJRdEFBQWlGMEVnY2lBWElCZEJ2MzlxUWY4QmNVRWFTUnRCL3dGeElBRkIwTUtBZ0FCcUxRQUFSdzBCQWtBZ0FVRUZSdzBBUVFjaEFReVVBd3NnQVVFQmFpRUJJQlJCQVdvaUZDQUNSdzBBQ3lBQUlCVTJBZ0FNcndNTElBQkJBRFlDQUNBVUlRRU0xd0VMQWtBZ0FTSUJJQUpHRFFBRFFBSkFJQUV0QUFCQmdMNkFnQUJxTFFBQUloQkJBVVlOQUNBUVFRSkdEUW9nQVNFQkROMEJDeUFCUVFGcUlnRWdBa2NOQUF0Qk1DRVFESzREQzBFd0lSQU1yUU1MQWtBZ0FTSUJJQUpHRFFBRFFBSkFJQUV0QUFBaUVFRWdSZzBBSUJCQmRtb09CTmtCMmdIYUFka0IyZ0VMSUFGQkFXb2lBU0FDUncwQUMwRTRJUkFNclFNTFFUZ2hFQXlzQXdzRFFBSkFJQUV0QUFBaUVFRWdSZzBBSUJCQkNVY05Bd3NnQVVFQmFpSUJJQUpIRFFBTFFUd2hFQXlyQXdzRFFBSkFJQUV0QUFBaUVFRWdSZzBBQWtBQ1FDQVFRWFpxRGdUYUFRRUIyZ0VBQ3lBUVFTeEdEZHNCQ3lBQklRRU1CQXNnQVVFQmFpSUJJQUpIRFFBTFFUOGhFQXlxQXdzZ0FTRUJETnNCQzBIQUFDRVFJQUVpRkNBQ1JnMm9BeUFDSUJScklBQW9BZ0FpQVdvaEZpQVVJQUZyUVFacUlSY0NRQU5BSUJRdEFBQkJJSElnQVVHQXdJQ0FBR290QUFCSERRRWdBVUVHUmcyT0F5QUJRUUZxSVFFZ0ZFRUJhaUlVSUFKSERRQUxJQUFnRmpZQ0FBeXBBd3NnQUVFQU5nSUFJQlFoQVF0Qk5pRVFESTREQ3dKQUlBRWlEeUFDUncwQVFjRUFJUkFNcHdNTElBQkJqSUNBZ0FBMkFnZ2dBQ0FQTmdJRUlBOGhBU0FBTFFBc1FYOXFEZ1ROQWRVQjF3SFpBWWNEQ3lBQlFRRnFJUUVNekFFTEFrQWdBU0lCSUFKR0RRQURRQUpBSUFFdEFBQWlFRUVnY2lBUUlCQkJ2MzlxUWY4QmNVRWFTUnRCL3dGeEloQkJDVVlOQUNBUVFTQkdEUUFDUUFKQUFrQUNRQ0FRUVoxL2FnNFRBQU1EQXdNREF3TUJBd01EQXdNREF3TURBZ01MSUFGQkFXb2hBVUV4SVJBTWtRTUxJQUZCQVdvaEFVRXlJUkFNa0FNTElBRkJBV29oQVVFeklSQU1qd01MSUFFaEFRelFBUXNnQVVFQmFpSUJJQUpIRFFBTFFUVWhFQXlsQXd0Qk5TRVFES1FEQ3dKQUlBRWlBU0FDUmcwQUEwQUNRQ0FCTFFBQVFZQzhnSUFBYWkwQUFFRUJSZzBBSUFFaEFRelRBUXNnQVVFQmFpSUJJQUpIRFFBTFFUMGhFQXlrQXd0QlBTRVFES01EQ3lBQUlBRWlBU0FDRUxDQWdJQUFJaEFOMWdFZ0FTRUJEQUVMSUJCQkFXb2hBUXRCUENFUURJY0RDd0pBSUFFaUFTQUNSdzBBUWNJQUlSQU1vQU1MQWtBRFFBSkFJQUV0QUFCQmQyb09HQUFDL2dMK0FvUUQvZ0wrQXY0Qy9nTCtBdjRDL2dMK0F2NEMvZ0wrQXY0Qy9nTCtBdjRDL2dMK0F2NENBUDRDQ3lBQlFRRnFJZ0VnQWtjTkFBdEJ3Z0FoRUF5Z0F3c2dBVUVCYWlFQklBQXRBQzFCQVhGRkRiMEJJQUVoQVF0QkxDRVFESVVEQ3lBQklnRWdBa2NOMHdGQnhBQWhFQXlkQXdzRFFBSkFJQUV0QUFCQmtNQ0FnQUJxTFFBQVFRRkdEUUFnQVNFQkRMY0NDeUFCUVFGcUlnRWdBa2NOQUF0QnhRQWhFQXljQXdzZ0RTMEFBQ0lRUVNCR0RiTUJJQkJCT2tjTmdRTWdBQ2dDQkNFQklBQkJBRFlDQkNBQUlBRWdEUkN2Z0lDQUFDSUJEZEFCSUExQkFXb2hBUXl6QWd0Qnh3QWhFQ0FCSWcwZ0FrWU5tZ01nQWlBTmF5QUFLQUlBSWdGcUlSWWdEU0FCYTBFRmFpRVhBMEFnRFMwQUFDSVVRU0J5SUJRZ0ZFRy9mMnBCL3dGeFFScEpHMEgvQVhFZ0FVR1F3b0NBQUdvdEFBQkhEWUFESUFGQkJVWU45QUlnQVVFQmFpRUJJQTFCQVdvaURTQUNSdzBBQ3lBQUlCWTJBZ0FNbWdNTFFjZ0FJUkFnQVNJTklBSkdEWmtESUFJZ0RXc2dBQ2dDQUNJQmFpRVdJQTBnQVd0QkNXb2hGd05BSUEwdEFBQWlGRUVnY2lBVUlCUkJ2MzlxUWY4QmNVRWFTUnRCL3dGeElBRkJsc0tBZ0FCcUxRQUFSdzMvQWdKQUlBRkJDVWNOQUVFQ0lRRU05UUlMSUFGQkFXb2hBU0FOUVFGcUlnMGdBa2NOQUFzZ0FDQVdOZ0lBREprREN3SkFJQUVpRFNBQ1J3MEFRY2tBSVJBTW1RTUxBa0FDUUNBTkxRQUFJZ0ZCSUhJZ0FTQUJRYjkvYWtIL0FYRkJHa2tiUWY4QmNVR1NmMm9PQndDQUE0QURnQU9BQTRBREFZQURDeUFOUVFGcUlRRkJQaUVRRElBREN5QU5RUUZxSVFGQlB5RVFEUDhDQzBIS0FDRVFJQUVpRFNBQ1JnMlhBeUFDSUExcklBQW9BZ0FpQVdvaEZpQU5JQUZyUVFGcUlSY0RRQ0FOTFFBQUloUkJJSElnRkNBVVFiOS9ha0gvQVhGQkdra2JRZjhCY1NBQlFhRENnSUFBYWkwQUFFY04vUUlnQVVFQlJnM3dBaUFCUVFGcUlRRWdEVUVCYWlJTklBSkhEUUFMSUFBZ0ZqWUNBQXlYQXd0Qnl3QWhFQ0FCSWcwZ0FrWU5sZ01nQWlBTmF5QUFLQUlBSWdGcUlSWWdEU0FCYTBFT2FpRVhBMEFnRFMwQUFDSVVRU0J5SUJRZ0ZFRy9mMnBCL3dGeFFScEpHMEgvQVhFZ0FVR2l3b0NBQUdvdEFBQkhEZndDSUFGQkRrWU44QUlnQVVFQmFpRUJJQTFCQVdvaURTQUNSdzBBQ3lBQUlCWTJBZ0FNbGdNTFFjd0FJUkFnQVNJTklBSkdEWlVESUFJZ0RXc2dBQ2dDQUNJQmFpRVdJQTBnQVd0QkQyb2hGd05BSUEwdEFBQWlGRUVnY2lBVUlCUkJ2MzlxUWY4QmNVRWFTUnRCL3dGeElBRkJ3TUtBZ0FCcUxRQUFSdzM3QWdKQUlBRkJEMGNOQUVFRElRRU04UUlMSUFGQkFXb2hBU0FOUVFGcUlnMGdBa2NOQUFzZ0FDQVdOZ0lBREpVREMwSE5BQ0VRSUFFaURTQUNSZzJVQXlBQ0lBMXJJQUFvQWdBaUFXb2hGaUFOSUFGclFRVnFJUmNEUUNBTkxRQUFJaFJCSUhJZ0ZDQVVRYjkvYWtIL0FYRkJHa2tiUWY4QmNTQUJRZERDZ0lBQWFpMEFBRWNOK2dJQ1FDQUJRUVZIRFFCQkJDRUJEUEFDQ3lBQlFRRnFJUUVnRFVFQmFpSU5JQUpIRFFBTElBQWdGallDQUF5VUF3c0NRQ0FCSWcwZ0FrY05BRUhPQUNFUURKUURDd0pBQWtBQ1FBSkFJQTB0QUFBaUFVRWdjaUFCSUFGQnYzOXFRZjhCY1VFYVNSdEIvd0Z4UVoxL2FnNFRBUDBDL1FMOUF2MEMvUUw5QXYwQy9RTDlBdjBDL1FMOUFnSDlBdjBDL1FJQ0EvMENDeUFOUVFGcUlRRkJ3UUFoRUF6OUFnc2dEVUVCYWlFQlFjSUFJUkFNL0FJTElBMUJBV29oQVVIREFDRVFEUHNDQ3lBTlFRRnFJUUZCeEFBaEVBejZBZ3NDUUNBQklnRWdBa1lOQUNBQVFZMkFnSUFBTmdJSUlBQWdBVFlDQkNBQklRRkJ4UUFoRUF6NkFndEJ6d0FoRUF5U0F3c2dFQ0VCQWtBQ1FDQVFMUUFBUVhacURnUUJxQUtvQWdDb0Fnc2dFRUVCYWlFQkMwRW5JUkFNK0FJTEFrQWdBU0lCSUFKSERRQkIwUUFoRUF5UkF3c0NRQ0FCTFFBQVFTQkdEUUFnQVNFQkRJMEJDeUFCUVFGcUlRRWdBQzBBTFVFQmNVVU54d0VnQVNFQkRJd0JDeUFCSWhjZ0FrY055QUZCMGdBaEVBeVBBd3RCMHdBaEVDQUJJaFFnQWtZTmpnTWdBaUFVYXlBQUtBSUFJZ0ZxSVJZZ0ZDQUJhMEVCYWlFWEEwQWdGQzBBQUNBQlFkYkNnSUFBYWkwQUFFY056QUVnQVVFQlJnM0hBU0FCUVFGcUlRRWdGRUVCYWlJVUlBSkhEUUFMSUFBZ0ZqWUNBQXlPQXdzQ1FDQUJJZ0VnQWtjTkFFSFZBQ0VRREk0REN5QUJMUUFBUVFwSERjd0JJQUZCQVdvaEFRekhBUXNDUUNBQklnRWdBa2NOQUVIV0FDRVFESTBEQ3dKQUFrQWdBUzBBQUVGMmFnNEVBTTBCelFFQnpRRUxJQUZCQVdvaEFRekhBUXNnQVVFQmFpRUJRY29BSVJBTTh3SUxJQUFnQVNJQklBSVFyb0NBZ0FBaUVBM0xBU0FCSVFGQnpRQWhFQXp5QWdzZ0FDMEFLVUVpUmcyRkF3eW1BZ3NDUUNBQklnRWdBa2NOQUVIYkFDRVFESW9EQzBFQUlSUkJBU0VYUVFFaEZrRUFJUkFDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FnQVMwQUFFRlFhZzRLMUFIVEFRQUJBZ01FQlFZSTFRRUxRUUloRUF3R0MwRURJUkFNQlF0QkJDRVFEQVFMUVFVaEVBd0RDMEVHSVJBTUFndEJCeUVRREFFTFFRZ2hFQXRCQUNFWFFRQWhGa0VBSVJRTXpBRUxRUWtoRUVFQklSUkJBQ0VYUVFBaEZnekxBUXNDUUNBQklnRWdBa2NOQUVIZEFDRVFESWtEQ3lBQkxRQUFRUzVIRGN3QklBRkJBV29oQVF5bUFnc2dBU0lCSUFKSERjd0JRZDhBSVJBTWh3TUxBa0FnQVNJQklBSkdEUUFnQUVHT2dJQ0FBRFlDQ0NBQUlBRTJBZ1FnQVNFQlFkQUFJUkFNN2dJTFFlQUFJUkFNaGdNTFFlRUFJUkFnQVNJQklBSkdEWVVESUFJZ0FXc2dBQ2dDQUNJVWFpRVdJQUVnRkd0QkEyb2hGd05BSUFFdEFBQWdGRUhpd29DQUFHb3RBQUJIRGMwQklCUkJBMFlOekFFZ0ZFRUJhaUVVSUFGQkFXb2lBU0FDUncwQUN5QUFJQlkyQWdBTWhRTUxRZUlBSVJBZ0FTSUJJQUpHRFlRRElBSWdBV3NnQUNnQ0FDSVVhaUVXSUFFZ0ZHdEJBbW9oRndOQUlBRXRBQUFnRkVIbXdvQ0FBR290QUFCSERjd0JJQlJCQWtZTnpnRWdGRUVCYWlFVUlBRkJBV29pQVNBQ1J3MEFDeUFBSUJZMkFnQU1oQU1MUWVNQUlSQWdBU0lCSUFKR0RZTURJQUlnQVdzZ0FDZ0NBQ0lVYWlFV0lBRWdGR3RCQTJvaEZ3TkFJQUV0QUFBZ0ZFSHB3b0NBQUdvdEFBQkhEY3NCSUJSQkEwWU56Z0VnRkVFQmFpRVVJQUZCQVdvaUFTQUNSdzBBQ3lBQUlCWTJBZ0FNZ3dNTEFrQWdBU0lCSUFKSERRQkI1UUFoRUF5REF3c2dBQ0FCUVFGcUlnRWdBaENvZ0lDQUFDSVFEYzBCSUFFaEFVSFdBQ0VRRE9rQ0N3SkFJQUVpQVNBQ1JnMEFBMEFDUUNBQkxRQUFJaEJCSUVZTkFBSkFBa0FDUUNBUVFiaC9hZzRMQUFIUEFjOEJ6d0hQQWM4Qnp3SFBBYzhCQXM4QkN5QUJRUUZxSVFGQjBnQWhFQXp0QWdzZ0FVRUJhaUVCUWRNQUlSQU03QUlMSUFGQkFXb2hBVUhVQUNFUURPc0NDeUFCUVFGcUlnRWdBa2NOQUF0QjVBQWhFQXlDQXd0QjVBQWhFQXlCQXdzRFFBSkFJQUV0QUFCQjhNS0FnQUJxTFFBQUloQkJBVVlOQUNBUVFYNXFEZ1BQQWRBQjBRSFNBUXNnQVVFQmFpSUJJQUpIRFFBTFFlWUFJUkFNZ0FNTEFrQWdBU0lCSUFKR0RRQWdBVUVCYWlFQkRBTUxRZWNBSVJBTS93SUxBMEFDUUNBQkxRQUFRZkRFZ0lBQWFpMEFBQ0lRUVFGR0RRQUNRQ0FRUVg1cURnVFNBZE1CMUFFQTFRRUxJQUVoQVVIWEFDRVFET2NDQ3lBQlFRRnFJZ0VnQWtjTkFBdEI2QUFoRUF6K0Fnc0NRQ0FCSWdFZ0FrY05BRUhwQUNFUURQNENDd0pBSUFFdEFBQWlFRUYyYWc0YXVnSFZBZFVCdkFIVkFkVUIxUUhWQWRVQjFRSFZBZFVCMVFIVkFkVUIxUUhWQWRVQjFRSFZBZFVCMVFIS0FkVUIxUUVBMHdFTElBRkJBV29oQVF0QkJpRVFET01DQ3dOQUFrQWdBUzBBQUVId3hvQ0FBR290QUFCQkFVWU5BQ0FCSVFFTW5nSUxJQUZCQVdvaUFTQUNSdzBBQzBIcUFDRVFEUHNDQ3dKQUlBRWlBU0FDUmcwQUlBRkJBV29oQVF3REMwSHJBQ0VRRFBvQ0N3SkFJQUVpQVNBQ1J3MEFRZXdBSVJBTStnSUxJQUZCQVdvaEFRd0JDd0pBSUFFaUFTQUNSdzBBUWUwQUlSQU0rUUlMSUFGQkFXb2hBUXRCQkNFUURONENDd0pBSUFFaUZDQUNSdzBBUWU0QUlSQU05d0lMSUJRaEFRSkFBa0FDUUNBVUxRQUFRZkRJZ0lBQWFpMEFBRUYvYWc0SDFBSFZBZFlCQUp3Q0FRTFhBUXNnRkVFQmFpRUJEQW9MSUJSQkFXb2hBUXpOQVF0QkFDRVFJQUJCQURZQ0hDQUFRWnVTZ0lBQU5nSVFJQUJCQnpZQ0RDQUFJQlJCQVdvMkFoUU05Z0lMQWtBRFFBSkFJQUV0QUFCQjhNaUFnQUJxTFFBQUloQkJCRVlOQUFKQUFrQWdFRUYvYWc0SDBnSFRBZFFCMlFFQUJBSFpBUXNnQVNFQlFkb0FJUkFNNEFJTElBRkJBV29oQVVIY0FDRVFETjhDQ3lBQlFRRnFJZ0VnQWtjTkFBdEI3d0FoRUF6MkFnc2dBVUVCYWlFQkRNc0JDd0pBSUFFaUZDQUNSdzBBUWZBQUlSQU05UUlMSUJRdEFBQkJMMGNOMUFFZ0ZFRUJhaUVCREFZTEFrQWdBU0lVSUFKSERRQkI4UUFoRUF6MEFnc0NRQ0FVTFFBQUlnRkJMMGNOQUNBVVFRRnFJUUZCM1FBaEVBemJBZ3NnQVVGMmFpSUVRUlpMRGRNQlFRRWdCSFJCaVlDQUFuRkZEZE1CRE1vQ0N3SkFJQUVpQVNBQ1JnMEFJQUZCQVdvaEFVSGVBQ0VRRE5vQ0MwSHlBQ0VRRFBJQ0N3SkFJQUVpRkNBQ1J3MEFRZlFBSVJBTThnSUxJQlFoQVFKQUlCUXRBQUJCOE15QWdBQnFMUUFBUVg5cURnUEpBcFFDQU5RQkMwSGhBQ0VRRE5nQ0N3SkFJQUVpRkNBQ1JnMEFBMEFDUUNBVUxRQUFRZkRLZ0lBQWFpMEFBQ0lCUVFOR0RRQUNRQ0FCUVg5cURnTExBZ0RWQVFzZ0ZDRUJRZDhBSVJBTTJnSUxJQlJCQVdvaUZDQUNSdzBBQzBIekFDRVFEUEVDQzBIekFDRVFEUEFDQ3dKQUlBRWlBU0FDUmcwQUlBQkJqNENBZ0FBMkFnZ2dBQ0FCTmdJRUlBRWhBVUhnQUNFUUROY0NDMEgxQUNFUURPOENDd0pBSUFFaUFTQUNSdzBBUWZZQUlSQU03d0lMSUFCQmo0Q0FnQUEyQWdnZ0FDQUJOZ0lFSUFFaEFRdEJBeUVRRE5RQ0N3TkFJQUV0QUFCQklFY053d0lnQVVFQmFpSUJJQUpIRFFBTFFmY0FJUkFNN0FJTEFrQWdBU0lCSUFKSERRQkIrQUFoRUF6c0Fnc2dBUzBBQUVFZ1J3M09BU0FCUVFGcUlRRU03d0VMSUFBZ0FTSUJJQUlRcklDQWdBQWlFQTNPQVNBQklRRU1qZ0lMQWtBZ0FTSUVJQUpIRFFCQitnQWhFQXpxQWdzZ0JDMEFBRUhNQUVjTjBRRWdCRUVCYWlFQlFSTWhFQXpQQVFzQ1FDQUJJZ1FnQWtjTkFFSDdBQ0VRRE9rQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUVZxSVJBRFFDQUVMUUFBSUFGQjhNNkFnQUJxTFFBQVJ3M1FBU0FCUVFWR0RjNEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRZnNBSVJBTTZBSUxBa0FnQVNJRUlBSkhEUUJCL0FBaEVBem9BZ3NDUUFKQUlBUXRBQUJCdlg5cURnd0EwUUhSQWRFQjBRSFJBZEVCMFFIUkFkRUIwUUVCMFFFTElBUkJBV29oQVVIbUFDRVFETThDQ3lBRVFRRnFJUUZCNXdBaEVBek9BZ3NDUUNBQklnUWdBa2NOQUVIOUFDRVFET2NDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRSnFJUkFDUUFOQUlBUXRBQUFnQVVIdHo0Q0FBR290QUFCSERjOEJJQUZCQWtZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFSDlBQ0VRRE9jQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVJBaEVBek1BUXNDUUNBQklnUWdBa2NOQUVIK0FDRVFET1lDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRVnFJUkFDUUFOQUlBUXRBQUFnQVVIMnpvQ0FBR290QUFCSERjNEJJQUZCQlVZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFSCtBQ0VRRE9ZQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVJZaEVBekxBUXNDUUNBQklnUWdBa2NOQUVIL0FDRVFET1VDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRTnFJUkFDUUFOQUlBUXRBQUFnQVVIOHpvQ0FBR290QUFCSERjMEJJQUZCQTBZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFSC9BQ0VRRE9VQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVFVaEVBektBUXNDUUNBQklnUWdBa2NOQUVHQUFTRVFET1FDQ3lBRUxRQUFRZGtBUnczTEFTQUVRUUZxSVFGQkNDRVFETWtCQ3dKQUlBRWlCQ0FDUncwQVFZRUJJUkFNNHdJTEFrQUNRQ0FFTFFBQVFiSi9hZzREQU13QkFjd0JDeUFFUVFGcUlRRkI2d0FoRUF6S0Fnc2dCRUVCYWlFQlFld0FJUkFNeVFJTEFrQWdBU0lFSUFKSERRQkJnZ0VoRUF6aUFnc0NRQUpBSUFRdEFBQkJ1SDlxRGdnQXl3SExBY3NCeXdITEFjc0JBY3NCQ3lBRVFRRnFJUUZCNmdBaEVBekpBZ3NnQkVFQmFpRUJRZTBBSVJBTXlBSUxBa0FnQVNJRUlBSkhEUUJCZ3dFaEVBemhBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSQWdCQ0FCYTBFQ2FpRVVBa0FEUUNBRUxRQUFJQUZCZ00rQWdBQnFMUUFBUnczSkFTQUJRUUpHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQkEyQWdCQmd3RWhFQXpoQWd0QkFDRVFJQUJCQURZQ0FDQVVRUUZxSVFFTXhnRUxBa0FnQVNJRUlBSkhEUUJCaEFFaEVBemdBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFRWFpRVFBa0FEUUNBRUxRQUFJQUZCZzgrQWdBQnFMUUFBUnczSUFTQUJRUVJHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQmhBRWhFQXpnQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVqSVJBTXhRRUxBa0FnQVNJRUlBSkhEUUJCaFFFaEVBemZBZ3NDUUFKQUlBUXRBQUJCdEg5cURnZ0F5QUhJQWNnQnlBSElBY2dCQWNnQkN5QUVRUUZxSVFGQjd3QWhFQXpHQWdzZ0JFRUJhaUVCUWZBQUlSQU14UUlMQWtBZ0FTSUVJQUpIRFFCQmhnRWhFQXplQWdzZ0JDMEFBRUhGQUVjTnhRRWdCRUVCYWlFQkRJTUNDd0pBSUFFaUJDQUNSdzBBUVljQklSQU0zUUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkEyb2hFQUpBQTBBZ0JDMEFBQ0FCUVlqUGdJQUFhaTBBQUVjTnhRRWdBVUVEUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFZY0JJUkFNM1FJTElBQkJBRFlDQUNBUVFRRnFJUUZCTFNFUURNSUJDd0pBSUFFaUJDQUNSdzBBUVlnQklSQU0zQUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkNHb2hFQUpBQTBBZ0JDMEFBQ0FCUWREUGdJQUFhaTBBQUVjTnhBRWdBVUVJUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFZZ0JJUkFNM0FJTElBQkJBRFlDQUNBUVFRRnFJUUZCS1NFUURNRUJDd0pBSUFFaUFTQUNSdzBBUVlrQklSQU0yd0lMUVFFaEVDQUJMUUFBUWQ4QVJ3M0FBU0FCUVFGcUlRRU1nUUlMQWtBZ0FTSUVJQUpIRFFCQmlnRWhFQXphQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUJhaUVRQTBBZ0JDMEFBQ0FCUVl6UGdJQUFhaTBBQUVjTndRRWdBVUVCUmcydkFpQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR0tBU0VRRE5rQ0N3SkFJQUVpQkNBQ1J3MEFRWXNCSVJBTTJRSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQW1vaEVBSkFBMEFnQkMwQUFDQUJRWTdQZ0lBQWFpMEFBRWNOd1FFZ0FVRUNSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVlzQklSQU0yUUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJBaUVRREw0QkN3SkFJQUVpQkNBQ1J3MEFRWXdCSVJBTTJBSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQVdvaEVBSkFBMEFnQkMwQUFDQUJRZkRQZ0lBQWFpMEFBRWNOd0FFZ0FVRUJSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVl3QklSQU0yQUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJIeUVRREwwQkN3SkFJQUVpQkNBQ1J3MEFRWTBCSVJBTTF3SUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQVdvaEVBSkFBMEFnQkMwQUFDQUJRZkxQZ0lBQWFpMEFBRWNOdndFZ0FVRUJSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVkwQklSQU0xd0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJDU0VRREx3QkN3SkFJQUVpQkNBQ1J3MEFRWTRCSVJBTTFnSUxBa0FDUUNBRUxRQUFRYmQvYWc0SEFMOEJ2d0cvQWI4QnZ3RUJ2d0VMSUFSQkFXb2hBVUg0QUNFUURMMENDeUFFUVFGcUlRRkIrUUFoRUF5OEFnc0NRQ0FCSWdRZ0FrY05BRUdQQVNFUUROVUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFWcUlSQUNRQU5BSUFRdEFBQWdBVUdSejRDQUFHb3RBQUJIRGIwQklBRkJCVVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHUEFTRVFETlVDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUmdoRUF5NkFRc0NRQ0FCSWdRZ0FrY05BRUdRQVNFUUROUUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFKcUlSQUNRQU5BSUFRdEFBQWdBVUdYejRDQUFHb3RBQUJIRGJ3QklBRkJBa1lOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHUUFTRVFETlFDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUmNoRUF5NUFRc0NRQ0FCSWdRZ0FrY05BRUdSQVNFUUROTUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFacUlSQUNRQU5BSUFRdEFBQWdBVUdhejRDQUFHb3RBQUJIRGJzQklBRkJCa1lOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHUkFTRVFETk1DQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUlVoRUF5NEFRc0NRQ0FCSWdRZ0FrY05BRUdTQVNFUUROSUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFWcUlSQUNRQU5BSUFRdEFBQWdBVUdoejRDQUFHb3RBQUJIRGJvQklBRkJCVVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHU0FTRVFETklDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUjRoRUF5M0FRc0NRQ0FCSWdRZ0FrY05BRUdUQVNFUURORUNDeUFFTFFBQVFjd0FSdzI0QVNBRVFRRnFJUUZCQ2lFUURMWUJDd0pBSUFRZ0FrY05BRUdVQVNFUUROQUNDd0pBQWtBZ0JDMEFBRUcvZjJvT0R3QzVBYmtCdVFHNUFia0J1UUc1QWJrQnVRRzVBYmtCdVFHNUFRRzVBUXNnQkVFQmFpRUJRZjRBSVJBTXR3SUxJQVJCQVdvaEFVSC9BQ0VRRExZQ0N3SkFJQVFnQWtjTkFFR1ZBU0VRRE04Q0N3SkFBa0FnQkMwQUFFRy9mMm9PQXdDNEFRRzRBUXNnQkVFQmFpRUJRZjBBSVJBTXRnSUxJQVJCQVdvaEJFR0FBU0VRRExVQ0N3SkFJQVFnQWtjTkFFR1dBU0VRRE00Q0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUZxSVJBQ1FBTkFJQVF0QUFBZ0FVR256NENBQUdvdEFBQkhEYllCSUFGQkFVWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdXQVNFUURNNENDeUFBUVFBMkFnQWdFRUVCYWlFQlFRc2hFQXl6QVFzQ1FDQUVJQUpIRFFCQmx3RWhFQXpOQWdzQ1FBSkFBa0FDUUNBRUxRQUFRVk5xRGlNQXVBRzRBYmdCdUFHNEFiZ0J1QUc0QWJnQnVBRzRBYmdCdUFHNEFiZ0J1QUc0QWJnQnVBRzRBYmdCdUFHNEFRRzRBYmdCdUFHNEFiZ0JBcmdCdUFHNEFRTzRBUXNnQkVFQmFpRUJRZnNBSVJBTXRnSUxJQVJCQVdvaEFVSDhBQ0VRRExVQ0N5QUVRUUZxSVFSQmdRRWhFQXkwQWdzZ0JFRUJhaUVFUVlJQklSQU1zd0lMQWtBZ0JDQUNSdzBBUVpnQklSQU16QUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkJHb2hFQUpBQTBBZ0JDMEFBQ0FCUWFuUGdJQUFhaTBBQUVjTnRBRWdBVUVFUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFaZ0JJUkFNekFJTElBQkJBRFlDQUNBUVFRRnFJUUZCR1NFUURMRUJDd0pBSUFRZ0FrY05BRUdaQVNFUURNc0NDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFWcUlSQUNRQU5BSUFRdEFBQWdBVUd1ejRDQUFHb3RBQUJIRGJNQklBRkJCVVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHWkFTRVFETXNDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUVloRUF5d0FRc0NRQ0FFSUFKSERRQkJtZ0VoRUF6S0Fnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVCYWlFUUFrQURRQ0FFTFFBQUlBRkJ0TStBZ0FCcUxRQUFSdzJ5QVNBQlFRRkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCbWdFaEVBektBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRWNJUkFNcndFTEFrQWdCQ0FDUncwQVFac0JJUkFNeVFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBV29oRUFKQUEwQWdCQzBBQUNBQlFiYlBnSUFBYWkwQUFFY05zUUVnQVVFQlJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWnNCSVJBTXlRSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkp5RVFESzRCQ3dKQUlBUWdBa2NOQUVHY0FTRVFETWdDQ3dKQUFrQWdCQzBBQUVHc2Yyb09BZ0FCc1FFTElBUkJBV29oQkVHR0FTRVFESzhDQ3lBRVFRRnFJUVJCaHdFaEVBeXVBZ3NDUUNBRUlBSkhEUUJCblFFaEVBekhBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFQmFpRVFBa0FEUUNBRUxRQUFJQUZCdU0rQWdBQnFMUUFBUncydkFTQUJRUUZHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQm5RRWhFQXpIQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVtSVJBTXJBRUxBa0FnQkNBQ1J3MEFRWjRCSVJBTXhnSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQVdvaEVBSkFBMEFnQkMwQUFDQUJRYnJQZ0lBQWFpMEFBRWNOcmdFZ0FVRUJSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVo0QklSQU14Z0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJBeUVRREtzQkN3SkFJQVFnQWtjTkFFR2ZBU0VRRE1VQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUpxSVJBQ1FBTkFJQVF0QUFBZ0FVSHR6NENBQUdvdEFBQkhEYTBCSUFGQkFrWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdmQVNFUURNVUNDeUFBUVFBMkFnQWdFRUVCYWlFQlFRd2hFQXlxQVFzQ1FDQUVJQUpIRFFCQm9BRWhFQXpFQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRURhaUVRQWtBRFFDQUVMUUFBSUFGQnZNK0FnQUJxTFFBQVJ3MnNBU0FCUVFOR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJvQUVoRUF6RUFnc2dBRUVBTmdJQUlCQkJBV29oQVVFTklSQU1xUUVMQWtBZ0JDQUNSdzBBUWFFQklSQU13d0lMQWtBQ1FDQUVMUUFBUWJwL2FnNExBS3dCckFHc0Fhd0JyQUdzQWF3QnJBR3NBUUdzQVFzZ0JFRUJhaUVFUVlzQklSQU1xZ0lMSUFSQkFXb2hCRUdNQVNFUURLa0NDd0pBSUFRZ0FrY05BRUdpQVNFUURNSUNDeUFFTFFBQVFkQUFSdzJwQVNBRVFRRnFJUVFNNlFFTEFrQWdCQ0FDUncwQVFhTUJJUkFNd1FJTEFrQUNRQ0FFTFFBQVFiZC9hZzRIQWFvQnFnR3FBYW9CcWdFQXFnRUxJQVJCQVdvaEJFR09BU0VRREtnQ0N5QUVRUUZxSVFGQklpRVFES1lCQ3dKQUlBUWdBa2NOQUVHa0FTRVFETUFDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRRnFJUkFDUUFOQUlBUXRBQUFnQVVIQXo0Q0FBR290QUFCSERhZ0JJQUZCQVVZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR2tBU0VRRE1BQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVIwaEVBeWxBUXNDUUNBRUlBSkhEUUJCcFFFaEVBeS9BZ3NDUUFKQUlBUXRBQUJCcm45cURnTUFxQUVCcUFFTElBUkJBV29oQkVHUUFTRVFES1lDQ3lBRVFRRnFJUUZCQkNFUURLUUJDd0pBSUFRZ0FrY05BRUdtQVNFUURMNENDd0pBQWtBQ1FBSkFBa0FnQkMwQUFFRy9mMm9PRlFDcUFhb0JxZ0dxQWFvQnFnR3FBYW9CcWdHcUFRR3FBYW9CQXFvQnFnRURxZ0dxQVFTcUFRc2dCRUVCYWlFRVFZZ0JJUkFNcUFJTElBUkJBV29oQkVHSkFTRVFES2NDQ3lBRVFRRnFJUVJCaWdFaEVBeW1BZ3NnQkVFQmFpRUVRWThCSVJBTXBRSUxJQVJCQVdvaEJFR1JBU0VRREtRQ0N3SkFJQVFnQWtjTkFFR25BU0VRREwwQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUpxSVJBQ1FBTkFJQVF0QUFBZ0FVSHR6NENBQUdvdEFBQkhEYVVCSUFGQkFrWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUduQVNFUURMMENDeUFBUVFBMkFnQWdFRUVCYWlFQlFSRWhFQXlpQVFzQ1FDQUVJQUpIRFFCQnFBRWhFQXk4QWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUNhaUVRQWtBRFFDQUVMUUFBSUFGQndzK0FnQUJxTFFBQVJ3MmtBU0FCUVFKR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJxQUVoRUF5OEFnc2dBRUVBTmdJQUlCQkJBV29oQVVFc0lSQU1vUUVMQWtBZ0JDQUNSdzBBUWFrQklSQU11d0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkJHb2hFQUpBQTBBZ0JDMEFBQ0FCUWNYUGdJQUFhaTBBQUVjTm93RWdBVUVFUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFha0JJUkFNdXdJTElBQkJBRFlDQUNBUVFRRnFJUUZCS3lFUURLQUJDd0pBSUFRZ0FrY05BRUdxQVNFUURMb0NDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFKcUlSQUNRQU5BSUFRdEFBQWdBVUhLejRDQUFHb3RBQUJIRGFJQklBRkJBa1lOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHcUFTRVFETG9DQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUlFoRUF5ZkFRc0NRQ0FFSUFKSERRQkJxd0VoRUF5NUFnc0NRQUpBQWtBQ1FDQUVMUUFBUWI1L2FnNFBBQUVDcEFHa0FhUUJwQUdrQWFRQnBBR2tBYVFCcEFHa0FRT2tBUXNnQkVFQmFpRUVRWk1CSVJBTW9nSUxJQVJCQVdvaEJFR1VBU0VRREtFQ0N5QUVRUUZxSVFSQmxRRWhFQXlnQWdzZ0JFRUJhaUVFUVpZQklSQU1ud0lMQWtBZ0JDQUNSdzBBUWF3QklSQU11QUlMSUFRdEFBQkJ4UUJIRFo4QklBUkJBV29oQkF6Z0FRc0NRQ0FFSUFKSERRQkJyUUVoRUF5M0Fnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVDYWlFUUFrQURRQ0FFTFFBQUlBRkJ6YytBZ0FCcUxRQUFSdzJmQVNBQlFRSkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCclFFaEVBeTNBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRU9JUkFNbkFFTEFrQWdCQ0FDUncwQVFhNEJJUkFNdGdJTElBUXRBQUJCMEFCSERaMEJJQVJCQVdvaEFVRWxJUkFNbXdFTEFrQWdCQ0FDUncwQVFhOEJJUkFNdFFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJDR29oRUFKQUEwQWdCQzBBQUNBQlFkRFBnSUFBYWkwQUFFY05uUUVnQVVFSVJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRYThCSVJBTXRRSUxJQUJCQURZQ0FDQVFRUUZxSVFGQktpRVFESm9CQ3dKQUlBUWdBa2NOQUVHd0FTRVFETFFDQ3dKQUFrQWdCQzBBQUVHcmYyb09Dd0NkQVowQm5RR2RBWjBCblFHZEFaMEJuUUVCblFFTElBUkJBV29oQkVHYUFTRVFESnNDQ3lBRVFRRnFJUVJCbXdFaEVBeWFBZ3NDUUNBRUlBSkhEUUJCc1FFaEVBeXpBZ3NDUUFKQUlBUXRBQUJCdjM5cURoUUFuQUdjQVp3Qm5BR2NBWndCbkFHY0Fad0JuQUdjQVp3Qm5BR2NBWndCbkFHY0Fad0JBWndCQ3lBRVFRRnFJUVJCbVFFaEVBeWFBZ3NnQkVFQmFpRUVRWndCSVJBTW1RSUxBa0FnQkNBQ1J3MEFRYklCSVJBTXNnSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQTJvaEVBSkFBMEFnQkMwQUFDQUJRZG5QZ0lBQWFpMEFBRWNObWdFZ0FVRURSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWJJQklSQU1zZ0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJJU0VRREpjQkN3SkFJQVFnQWtjTkFFR3pBU0VRRExFQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUVpxSVJBQ1FBTkFJQVF0QUFBZ0FVSGR6NENBQUdvdEFBQkhEWmtCSUFGQkJrWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUd6QVNFUURMRUNDeUFBUVFBMkFnQWdFRUVCYWlFQlFSb2hFQXlXQVFzQ1FDQUVJQUpIRFFCQnRBRWhFQXl3QWdzQ1FBSkFBa0FnQkMwQUFFRzdmMm9PRVFDYUFab0JtZ0dhQVpvQm1nR2FBWm9CbWdFQm1nR2FBWm9CbWdHYUFRS2FBUXNnQkVFQmFpRUVRWjBCSVJBTW1BSUxJQVJCQVdvaEJFR2VBU0VRREpjQ0N5QUVRUUZxSVFSQm53RWhFQXlXQWdzQ1FDQUVJQUpIRFFCQnRRRWhFQXl2QWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUZhaUVRQWtBRFFDQUVMUUFBSUFGQjVNK0FnQUJxTFFBQVJ3MlhBU0FCUVFWR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJ0UUVoRUF5dkFnc2dBRUVBTmdJQUlCQkJBV29oQVVFb0lSQU1sQUVMQWtBZ0JDQUNSdzBBUWJZQklSQU1yZ0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFtb2hFQUpBQTBBZ0JDMEFBQ0FCUWVyUGdJQUFhaTBBQUVjTmxnRWdBVUVDUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFiWUJJUkFNcmdJTElBQkJBRFlDQUNBUVFRRnFJUUZCQnlFUURKTUJDd0pBSUFRZ0FrY05BRUczQVNFUURLMENDd0pBQWtBZ0JDMEFBRUc3ZjJvT0RnQ1dBWllCbGdHV0FaWUJsZ0dXQVpZQmxnR1dBWllCbGdFQmxnRUxJQVJCQVdvaEJFR2hBU0VRREpRQ0N5QUVRUUZxSVFSQm9nRWhFQXlUQWdzQ1FDQUVJQUpIRFFCQnVBRWhFQXlzQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUNhaUVRQWtBRFFDQUVMUUFBSUFGQjdjK0FnQUJxTFFBQVJ3MlVBU0FCUVFKR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJ1QUVoRUF5c0Fnc2dBRUVBTmdJQUlCQkJBV29oQVVFU0lSQU1rUUVMQWtBZ0JDQUNSdzBBUWJrQklSQU1xd0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFXb2hFQUpBQTBBZ0JDMEFBQ0FCUWZEUGdJQUFhaTBBQUVjTmt3RWdBVUVCUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFia0JJUkFNcXdJTElBQkJBRFlDQUNBUVFRRnFJUUZCSUNFUURKQUJDd0pBSUFRZ0FrY05BRUc2QVNFUURLb0NDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFGcUlSQUNRQU5BSUFRdEFBQWdBVUh5ejRDQUFHb3RBQUJIRFpJQklBRkJBVVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHNkFTRVFES29DQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUThoRUF5UEFRc0NRQ0FFSUFKSERRQkJ1d0VoRUF5cEFnc0NRQUpBSUFRdEFBQkJ0MzlxRGdjQWtnR1NBWklCa2dHU0FRR1NBUXNnQkVFQmFpRUVRYVVCSVJBTWtBSUxJQVJCQVdvaEJFR21BU0VRREk4Q0N3SkFJQVFnQWtjTkFFRzhBU0VRREtnQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUWRxSVJBQ1FBTkFJQVF0QUFBZ0FVSDB6NENBQUdvdEFBQkhEWkFCSUFGQkIwWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUc4QVNFUURLZ0NDeUFBUVFBMkFnQWdFRUVCYWlFQlFSc2hFQXlOQVFzQ1FDQUVJQUpIRFFCQnZRRWhFQXluQWdzQ1FBSkFBa0FnQkMwQUFFRytmMm9PRWdDUkFaRUJrUUdSQVpFQmtRR1JBWkVCa1FFQmtRR1JBWkVCa1FHUkFaRUJBcEVCQ3lBRVFRRnFJUVJCcEFFaEVBeVBBZ3NnQkVFQmFpRUVRYWNCSVJBTWpnSUxJQVJCQVdvaEJFR29BU0VRREkwQ0N3SkFJQVFnQWtjTkFFRytBU0VRREtZQ0N5QUVMUUFBUWM0QVJ3Mk5BU0FFUVFGcUlRUU16d0VMQWtBZ0JDQUNSdzBBUWI4QklSQU1wUUlMQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQWdCQzBBQUVHL2Yyb09GUUFCQWdPY0FRUUZCcHdCbkFHY0FRY0lDUW9MbkFFTURRNFBuQUVMSUFSQkFXb2hBVUhvQUNFUURKb0NDeUFFUVFGcUlRRkI2UUFoRUF5WkFnc2dCRUVCYWlFQlFlNEFJUkFNbUFJTElBUkJBV29oQVVIeUFDRVFESmNDQ3lBRVFRRnFJUUZCOHdBaEVBeVdBZ3NnQkVFQmFpRUJRZllBSVJBTWxRSUxJQVJCQVdvaEFVSDNBQ0VRREpRQ0N5QUVRUUZxSVFGQitnQWhFQXlUQWdzZ0JFRUJhaUVFUVlNQklSQU1rZ0lMSUFSQkFXb2hCRUdFQVNFUURKRUNDeUFFUVFGcUlRUkJoUUVoRUF5UUFnc2dCRUVCYWlFRVFaSUJJUkFNandJTElBUkJBV29oQkVHWUFTRVFESTRDQ3lBRVFRRnFJUVJCb0FFaEVBeU5BZ3NnQkVFQmFpRUVRYU1CSVJBTWpBSUxJQVJCQVdvaEJFR3FBU0VRRElzQ0N3SkFJQVFnQWtZTkFDQUFRWkNBZ0lBQU5nSUlJQUFnQkRZQ0JFR3JBU0VRRElzQ0MwSEFBU0VRREtNQ0N5QUFJQVVnQWhDcWdJQ0FBQ0lCRFlzQklBVWhBUXhjQ3dKQUlBWWdBa1lOQUNBR1FRRnFJUVVNalFFTFFjSUJJUkFNb1FJTEEwQUNRQ0FRTFFBQVFYWnFEZ1NNQVFBQWp3RUFDeUFRUVFGcUloQWdBa2NOQUF0Qnd3RWhFQXlnQWdzQ1FDQUhJQUpHRFFBZ0FFR1JnSUNBQURZQ0NDQUFJQWMyQWdRZ0J5RUJRUUVoRUF5SEFndEJ4QUVoRUF5ZkFnc0NRQ0FISUFKSERRQkJ4UUVoRUF5ZkFnc0NRQUpBSUFjdEFBQkJkbW9PQkFIT0FjNEJBTTRCQ3lBSFFRRnFJUVlNalFFTElBZEJBV29oQlF5SkFRc0NRQ0FISUFKSERRQkJ4Z0VoRUF5ZUFnc0NRQUpBSUFjdEFBQkJkbW9PRndHUEFZOEJBWThCandHUEFZOEJqd0dQQVk4Qmp3R1BBWThCandHUEFZOEJqd0dQQVk4Qmp3R1BBUUNQQVFzZ0IwRUJhaUVIQzBHd0FTRVFESVFDQ3dKQUlBZ2dBa2NOQUVISUFTRVFESjBDQ3lBSUxRQUFRU0JIRFkwQklBQkJBRHNCTWlBSVFRRnFJUUZCc3dFaEVBeURBZ3NnQVNFWEFrQURRQ0FYSWdjZ0FrWU5BU0FITFFBQVFWQnFRZjhCY1NJUVFRcFBEY3dCQWtBZ0FDOEJNaUlVUVprelN3MEFJQUFnRkVFS2JDSVVPd0V5SUJCQi8vOERjeUFVUWY3L0EzRkpEUUFnQjBFQmFpRVhJQUFnRkNBUWFpSVFPd0V5SUJCQi8vOERjVUhvQjBrTkFRc0xRUUFoRUNBQVFRQTJBaHdnQUVIQmlZQ0FBRFlDRUNBQVFRMDJBZ3dnQUNBSFFRRnFOZ0lVREp3Q0MwSEhBU0VRREpzQ0N5QUFJQWdnQWhDdWdJQ0FBQ0lRUlEzS0FTQVFRUlZIRFl3QklBQkJ5QUUyQWh3Z0FDQUlOZ0lVSUFCQnlaZUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBeWFBZ3NDUUNBSklBSkhEUUJCekFFaEVBeWFBZ3RCQUNFVVFRRWhGMEVCSVJaQkFDRVFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQWt0QUFCQlVHb09DcFlCbFFFQUFRSURCQVVHQ0pjQkMwRUNJUkFNQmd0QkF5RVFEQVVMUVFRaEVBd0VDMEVGSVJBTUF3dEJCaUVRREFJTFFRY2hFQXdCQzBFSUlSQUxRUUFoRjBFQUlSWkJBQ0VVREk0QkMwRUpJUkJCQVNFVVFRQWhGMEVBSVJZTWpRRUxBa0FnQ2lBQ1J3MEFRYzRCSVJBTW1RSUxJQW90QUFCQkxrY05qZ0VnQ2tFQmFpRUpETW9CQ3lBTElBSkhEWTRCUWRBQklSQU1sd0lMQWtBZ0N5QUNSZzBBSUFCQmpvQ0FnQUEyQWdnZ0FDQUxOZ0lFUWJjQklSQU0vZ0VMUWRFQklSQU1sZ0lMQWtBZ0JDQUNSdzBBUWRJQklSQU1sZ0lMSUFJZ0JHc2dBQ2dDQUNJUWFpRVVJQVFnRUd0QkJHb2hDd05BSUFRdEFBQWdFRUg4ejRDQUFHb3RBQUJIRFk0QklCQkJCRVlONlFFZ0VFRUJhaUVRSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQjBnRWhFQXlWQWdzZ0FDQU1JQUlRcklDQWdBQWlBUTJOQVNBTUlRRU11QUVMQWtBZ0JDQUNSdzBBUWRRQklSQU1sQUlMSUFJZ0JHc2dBQ2dDQUNJUWFpRVVJQVFnRUd0QkFXb2hEQU5BSUFRdEFBQWdFRUdCMElDQUFHb3RBQUJIRFk4QklCQkJBVVlOamdFZ0VFRUJhaUVRSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQjFBRWhFQXlUQWdzQ1FDQUVJQUpIRFFCQjFnRWhFQXlUQWdzZ0FpQUVheUFBS0FJQUloQnFJUlFnQkNBUWEwRUNhaUVMQTBBZ0JDMEFBQ0FRUVlQUWdJQUFhaTBBQUVjTmpnRWdFRUVDUmcyUUFTQVFRUUZxSVJBZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFSFdBU0VRREpJQ0N3SkFJQVFnQWtjTkFFSFhBU0VRREpJQ0N3SkFBa0FnQkMwQUFFRzdmMm9PRUFDUEFZOEJqd0dQQVk4Qmp3R1BBWThCandHUEFZOEJqd0dQQVk4QkFZOEJDeUFFUVFGcUlRUkJ1d0VoRUF6NUFRc2dCRUVCYWlFRVFid0JJUkFNK0FFTEFrQWdCQ0FDUncwQVFkZ0JJUkFNa1FJTElBUXRBQUJCeUFCSERZd0JJQVJCQVdvaEJBekVBUXNDUUNBRUlBSkdEUUFnQUVHUWdJQ0FBRFlDQ0NBQUlBUTJBZ1JCdmdFaEVBejNBUXRCMlFFaEVBeVBBZ3NDUUNBRUlBSkhEUUJCMmdFaEVBeVBBZ3NnQkMwQUFFSElBRVlOd3dFZ0FFRUJPZ0FvRExrQkN5QUFRUUk2QUM4Z0FDQUVJQUlRcG9DQWdBQWlFQTJOQVVIQ0FTRVFEUFFCQ3lBQUxRQW9RWDlxRGdLM0Fia0J1QUVMQTBBQ1FDQUVMUUFBUVhacURnUUFqZ0dPQVFDT0FRc2dCRUVCYWlJRUlBSkhEUUFMUWQwQklSQU1pd0lMSUFCQkFEb0FMeUFBTFFBdFFRUnhSUTJFQWdzZ0FFRUFPZ0F2SUFCQkFUb0FOQ0FCSVFFTWpBRUxJQkJCRlVZTjJnRWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFhZU9nSUFBTmdJUUlBQkJFallDREVFQUlSQU1pQUlMQWtBZ0FDQVFJQUlRdElDQWdBQWlCQTBBSUJBaEFReUJBZ3NDUUNBRVFSVkhEUUFnQUVFRE5nSWNJQUFnRURZQ0ZDQUFRYkNZZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNaUFJTElBQkJBRFlDSENBQUlCQTJBaFFnQUVHbmpvQ0FBRFlDRUNBQVFSSTJBZ3hCQUNFUURJY0NDeUFRUVJWR0RkWUJJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFSGFqWUNBQURZQ0VDQUFRUlEyQWd4QkFDRVFESVlDQ3lBQUtBSUVJUmNnQUVFQU5nSUVJQkFnRWFkcUloWWhBU0FBSUJjZ0VDQVdJQlFiSWhBUXRZQ0FnQUFpRkVVTmpRRWdBRUVITmdJY0lBQWdFRFlDRkNBQUlCUTJBZ3hCQUNFUURJVUNDeUFBSUFBdkFUQkJnQUZ5T3dFd0lBRWhBUXRCS2lFUURPb0JDeUFRUVJWR0RkRUJJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFR0RqSUNBQURZQ0VDQUFRUk0yQWd4QkFDRVFESUlDQ3lBUVFSVkdEYzhCSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUdhajRDQUFEWUNFQ0FBUVNJMkFneEJBQ0VRRElFQ0N5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRdDRDQWdBQWlFQTBBSUFGQkFXb2hBUXlOQVFzZ0FFRU1OZ0ljSUFBZ0VEWUNEQ0FBSUFGQkFXbzJBaFJCQUNFUURJQUNDeUFRUVJWR0Rjd0JJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFR2FqNENBQURZQ0VDQUFRU0kyQWd4QkFDRVFEUDhCQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVF0NENBZ0FBaUVBMEFJQUZCQVdvaEFReU1BUXNnQUVFTk5nSWNJQUFnRURZQ0RDQUFJQUZCQVdvMkFoUkJBQ0VRRFA0QkN5QVFRUlZHRGNrQklBQkJBRFlDSENBQUlBRTJBaFFnQUVIR2pJQ0FBRFlDRUNBQVFTTTJBZ3hCQUNFUURQMEJDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXVZQ0FnQUFpRUEwQUlBRkJBV29oQVF5TEFRc2dBRUVPTmdJY0lBQWdFRFlDRENBQUlBRkJBV28yQWhSQkFDRVFEUHdCQ3lBQVFRQTJBaHdnQUNBQk5nSVVJQUJCd0pXQWdBQTJBaEFnQUVFQ05nSU1RUUFoRUF6N0FRc2dFRUVWUmczRkFTQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnhveUFnQUEyQWhBZ0FFRWpOZ0lNUVFBaEVBejZBUXNnQUVFUU5nSWNJQUFnQVRZQ0ZDQUFJQkEyQWd4QkFDRVFEUGtCQ3lBQUtBSUVJUVFnQUVFQU5nSUVBa0FnQUNBRUlBRVF1WUNBZ0FBaUJBMEFJQUZCQVdvaEFRenhBUXNnQUVFUk5nSWNJQUFnQkRZQ0RDQUFJQUZCQVdvMkFoUkJBQ0VRRFBnQkN5QVFRUlZHRGNFQklBQkJBRFlDSENBQUlBRTJBaFFnQUVIR2pJQ0FBRFlDRUNBQVFTTTJBZ3hCQUNFUURQY0JDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXVZQ0FnQUFpRUEwQUlBRkJBV29oQVF5SUFRc2dBRUVUTmdJY0lBQWdFRFlDRENBQUlBRkJBV28yQWhSQkFDRVFEUFlCQ3lBQUtBSUVJUVFnQUVFQU5nSUVBa0FnQUNBRUlBRVF1WUNBZ0FBaUJBMEFJQUZCQVdvaEFRenRBUXNnQUVFVU5nSWNJQUFnQkRZQ0RDQUFJQUZCQVdvMkFoUkJBQ0VRRFBVQkN5QVFRUlZHRGIwQklBQkJBRFlDSENBQUlBRTJBaFFnQUVHYWo0Q0FBRFlDRUNBQVFTSTJBZ3hCQUNFUURQUUJDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXQ0Q0FnQUFpRUEwQUlBRkJBV29oQVF5R0FRc2dBRUVXTmdJY0lBQWdFRFlDRENBQUlBRkJBV28yQWhSQkFDRVFEUE1CQ3lBQUtBSUVJUVFnQUVFQU5nSUVBa0FnQUNBRUlBRVF0NENBZ0FBaUJBMEFJQUZCQVdvaEFRenBBUXNnQUVFWE5nSWNJQUFnQkRZQ0RDQUFJQUZCQVdvMkFoUkJBQ0VRRFBJQkN5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnpaT0FnQUEyQWhBZ0FFRU1OZ0lNUVFBaEVBenhBUXRDQVNFUkN5QVFRUUZxSVFFQ1FDQUFLUU1nSWhKQy8vLy8vLy8vLy84UFZnMEFJQUFnRWtJRWhpQVJoRGNESUNBQklRRU1oQUVMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUd0aVlDQUFEWUNFQ0FBUVF3MkFneEJBQ0VRRE84QkN5QUFRUUEyQWh3Z0FDQVFOZ0lVSUFCQnpaT0FnQUEyQWhBZ0FFRU1OZ0lNUVFBaEVBenVBUXNnQUNnQ0JDRVhJQUJCQURZQ0JDQVFJQkduYWlJV0lRRWdBQ0FYSUJBZ0ZpQVVHeUlRRUxXQWdJQUFJaFJGRFhNZ0FFRUZOZ0ljSUFBZ0VEWUNGQ0FBSUJRMkFneEJBQ0VRRE8wQkN5QUFRUUEyQWh3Z0FDQVFOZ0lVSUFCQnFweUFnQUEyQWhBZ0FFRVBOZ0lNUVFBaEVBenNBUXNnQUNBUUlBSVF0SUNBZ0FBaUFRMEJJQkFoQVF0QkRpRVFETkVCQ3dKQUlBRkJGVWNOQUNBQVFRSTJBaHdnQUNBUU5nSVVJQUJCc0ppQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF6cUFRc2dBRUVBTmdJY0lBQWdFRFlDRkNBQVFhZU9nSUFBTmdJUUlBQkJFallDREVFQUlSQU02UUVMSUFGQkFXb2hFQUpBSUFBdkFUQWlBVUdBQVhGRkRRQUNRQ0FBSUJBZ0FoQzdnSUNBQUNJQkRRQWdFQ0VCREhBTElBRkJGVWNOdWdFZ0FFRUZOZ0ljSUFBZ0VEWUNGQ0FBUWZtWGdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTTZRRUxBa0FnQVVHZ0JIRkJvQVJIRFFBZ0FDMEFMVUVDY1EwQUlBQkJBRFlDSENBQUlCQTJBaFFnQUVHV2s0Q0FBRFlDRUNBQVFRUTJBZ3hCQUNFUURPa0JDeUFBSUJBZ0FoQzlnSUNBQUJvZ0VDRUJBa0FDUUFKQUFrQUNRQ0FBSUJBZ0FoQ3pnSUNBQUE0V0FnRUFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBd1FMSUFCQkFUb0FMZ3NnQUNBQUx3RXdRY0FBY2pzQk1DQVFJUUVMUVNZaEVBelJBUXNnQUVFak5nSWNJQUFnRURZQ0ZDQUFRYVdXZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNNlFFTElBQkJBRFlDSENBQUlCQTJBaFFnQUVIVmk0Q0FBRFlDRUNBQVFSRTJBZ3hCQUNFUURPZ0JDeUFBTFFBdFFRRnhSUTBCUWNNQklSQU16Z0VMQWtBZ0RTQUNSZzBBQTBBQ1FDQU5MUUFBUVNCR0RRQWdEU0VCRE1RQkN5QU5RUUZxSWcwZ0FrY05BQXRCSlNFUURPY0JDMEVsSVJBTTVnRUxJQUFvQWdRaEJDQUFRUUEyQWdRZ0FDQUVJQTBRcjRDQWdBQWlCRVVOclFFZ0FFRW1OZ0ljSUFBZ0JEWUNEQ0FBSUExQkFXbzJBaFJCQUNFUURPVUJDeUFRUVJWR0Rhc0JJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFSDlqWUNBQURZQ0VDQUFRUjAyQWd4QkFDRVFET1FCQ3lBQVFTYzJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNNHdFTElCQWhBVUVCSVJRQ1FBSkFBa0FDUUFKQUFrQUNRQ0FBTFFBc1FYNXFEZ2NHQlFVREFRSUFCUXNnQUNBQUx3RXdRUWh5T3dFd0RBTUxRUUloRkF3QkMwRUVJUlFMSUFCQkFUb0FMQ0FBSUFBdkFUQWdGSEk3QVRBTElCQWhBUXRCS3lFUURNb0JDeUFBUVFBMkFod2dBQ0FRTmdJVUlBQkJxNUtBZ0FBMkFoQWdBRUVMTmdJTVFRQWhFQXppQVFzZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWVHUGdJQUFOZ0lRSUFCQkNqWUNERUVBSVJBTTRRRUxJQUJCQURvQUxDQVFJUUVNdlFFTElCQWhBVUVCSVJRQ1FBSkFBa0FDUUFKQUlBQXRBQ3hCZTJvT0JBTUJBZ0FGQ3lBQUlBQXZBVEJCQ0hJN0FUQU1Bd3RCQWlFVURBRUxRUVFoRkFzZ0FFRUJPZ0FzSUFBZ0FDOEJNQ0FVY2pzQk1Bc2dFQ0VCQzBFcElSQU14UUVMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUh3bElDQUFEWUNFQ0FBUVFNMkFneEJBQ0VRRE4wQkN3SkFJQTR0QUFCQkRVY05BQ0FBS0FJRUlRRWdBRUVBTmdJRUFrQWdBQ0FCSUE0UXNZQ0FnQUFpQVEwQUlBNUJBV29oQVF4MUN5QUFRU3cyQWh3Z0FDQUJOZ0lNSUFBZ0RrRUJhallDRkVFQUlSQU0zUUVMSUFBdEFDMUJBWEZGRFFGQnhBRWhFQXpEQVFzQ1FDQU9JQUpIRFFCQkxTRVFETndCQ3dKQUFrQURRQUpBSUE0dEFBQkJkbW9PQkFJQUFBTUFDeUFPUVFGcUlnNGdBa2NOQUF0QkxTRVFETjBCQ3lBQUtBSUVJUUVnQUVFQU5nSUVBa0FnQUNBQklBNFFzWUNBZ0FBaUFRMEFJQTRoQVF4MEN5QUFRU3cyQWh3Z0FDQU9OZ0lVSUFBZ0FUWUNERUVBSVJBTTNBRUxJQUFvQWdRaEFTQUFRUUEyQWdRQ1FDQUFJQUVnRGhDeGdJQ0FBQ0lCRFFBZ0RrRUJhaUVCREhNTElBQkJMRFlDSENBQUlBRTJBZ3dnQUNBT1FRRnFOZ0lVUVFBaEVBemJBUXNnQUNnQ0JDRUVJQUJCQURZQ0JDQUFJQVFnRGhDeGdJQ0FBQ0lFRGFBQklBNGhBUXpPQVFzZ0VFRXNSdzBCSUFGQkFXb2hFRUVCSVFFQ1FBSkFBa0FDUUFKQUlBQXRBQ3hCZTJvT0JBTUJBZ1FBQ3lBUUlRRU1CQXRCQWlFQkRBRUxRUVFoQVFzZ0FFRUJPZ0FzSUFBZ0FDOEJNQ0FCY2pzQk1DQVFJUUVNQVFzZ0FDQUFMd0V3UVFoeU93RXdJQkFoQVF0Qk9TRVFETDhCQ3lBQVFRQTZBQ3dnQVNFQkMwRTBJUkFNdlFFTElBQWdBQzhCTUVFZ2Nqc0JNQ0FCSVFFTUFnc2dBQ2dDQkNFRUlBQkJBRFlDQkFKQUlBQWdCQ0FCRUxHQWdJQUFJZ1FOQUNBQklRRU14d0VMSUFCQk56WUNIQ0FBSUFFMkFoUWdBQ0FFTmdJTVFRQWhFQXpVQVFzZ0FFRUlPZ0FzSUFFaEFRdEJNQ0VRRExrQkN3SkFJQUF0QUNoQkFVWU5BQ0FCSVFFTUJBc2dBQzBBTFVFSWNVVU5rd0VnQVNFQkRBTUxJQUF0QURCQklIRU5sQUZCeFFFaEVBeTNBUXNDUUNBUElBSkdEUUFDUUFOQUFrQWdEeTBBQUVGUWFpSUJRZjhCY1VFS1NRMEFJQThoQVVFMUlSQU11Z0VMSUFBcEF5QWlFVUtacytiTW1iUG16QmxXRFFFZ0FDQVJRZ3ArSWhFM0F5QWdFU0FCclVML0FZTWlFa0ovaFZZTkFTQUFJQkVnRW53M0F5QWdEMEVCYWlJUElBSkhEUUFMUVRraEVBelJBUXNnQUNnQ0JDRUNJQUJCQURZQ0JDQUFJQUlnRDBFQmFpSUVFTEdBZ0lBQUlnSU5sUUVnQkNFQkRNTUJDMEU1SVJBTXp3RUxBa0FnQUM4Qk1DSUJRUWh4UlEwQUlBQXRBQ2hCQVVjTkFDQUFMUUF0UVFoeFJRMlFBUXNnQUNBQlFmZjdBM0ZCZ0FSeU93RXdJQThoQVF0Qk55RVFETFFCQ3lBQUlBQXZBVEJCRUhJN0FUQU1xd0VMSUJCQkZVWU5pd0VnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZkNPZ0lBQU5nSVFJQUJCSERZQ0RFRUFJUkFNeXdFTElBQkJ3d0EyQWh3Z0FDQUJOZ0lNSUFBZ0RVRUJhallDRkVFQUlSQU15Z0VMQWtBZ0FTMEFBRUU2UncwQUlBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkN2Z0lDQUFDSVFEUUFnQVVFQmFpRUJER01MSUFCQnd3QTJBaHdnQUNBUU5nSU1JQUFnQVVFQmFqWUNGRUVBSVJBTXlnRUxJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFR3hrWUNBQURZQ0VDQUFRUW8yQWd4QkFDRVFETWtCQ3lBQVFRQTJBaHdnQUNBQk5nSVVJQUJCb0ptQWdBQTJBaEFnQUVFZU5nSU1RUUFoRUF6SUFRc2dBRUVBTmdJQUN5QUFRWUFTT3dFcUlBQWdGMEVCYWlJQklBSVFxSUNBZ0FBaUVBMEJJQUVoQVF0Qnh3QWhFQXlzQVFzZ0VFRVZSdzJEQVNBQVFkRUFOZ0ljSUFBZ0FUWUNGQ0FBUWVPWGdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTXhBRUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDbmdJQ0FBQ0lRRFFBZ0FTRUJERjRMSUFCQjBnQTJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNd3dFTElBQkJBRFlDSENBQUlCUTJBaFFnQUVIQnFJQ0FBRFlDRUNBQVFRYzJBZ3dnQUVFQU5nSUFRUUFoRUF6Q0FRc2dBQ2dDQkNFUUlBQkJBRFlDQkFKQUlBQWdFQ0FCRUtlQWdJQUFJaEFOQUNBQklRRU1YUXNnQUVIVEFEWUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXpCQVF0QkFDRVFJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFR0FrWUNBQURZQ0VDQUFRUWsyQWd3TXdBRUxJQkJCRlVZTmZTQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQmxJMkFnQUEyQWhBZ0FFRWhOZ0lNUVFBaEVBeS9BUXRCQVNFV1FRQWhGMEVBSVJSQkFTRVFDeUFBSUJBNkFDc2dBVUVCYWlFQkFrQUNRQ0FBTFFBdFFSQnhEUUFDUUFKQUFrQWdBQzBBS2c0REFRQUNCQXNnRmtVTkF3d0NDeUFVRFFFTUFnc2dGMFVOQVFzZ0FDZ0NCQ0VRSUFCQkFEWUNCQUpBSUFBZ0VDQUJFSzJBZ0lBQUloQU5BQ0FCSVFFTVhBc2dBRUhZQURZQ0hDQUFJQUUyQWhRZ0FDQVFOZ0lNUVFBaEVBeStBUXNnQUNnQ0JDRUVJQUJCQURZQ0JBSkFJQUFnQkNBQkVLMkFnSUFBSWdRTkFDQUJJUUVNclFFTElBQkIyUUEyQWh3Z0FDQUJOZ0lVSUFBZ0JEWUNERUVBSVJBTXZRRUxJQUFvQWdRaEJDQUFRUUEyQWdRQ1FDQUFJQVFnQVJDdGdJQ0FBQ0lFRFFBZ0FTRUJES3NCQ3lBQVFkb0FOZ0ljSUFBZ0FUWUNGQ0FBSUFRMkFneEJBQ0VRREx3QkN5QUFLQUlFSVFRZ0FFRUFOZ0lFQWtBZ0FDQUVJQUVRcllDQWdBQWlCQTBBSUFFaEFReXBBUXNnQUVIY0FEWUNIQ0FBSUFFMkFoUWdBQ0FFTmdJTVFRQWhFQXk3QVFzQ1FDQUJMUUFBUVZCcUloQkIvd0Z4UVFwUERRQWdBQ0FRT2dBcUlBRkJBV29oQVVIUEFDRVFES0lCQ3lBQUtBSUVJUVFnQUVFQU5nSUVBa0FnQUNBRUlBRVFyWUNBZ0FBaUJBMEFJQUVoQVF5bkFRc2dBRUhlQURZQ0hDQUFJQUUyQWhRZ0FDQUVOZ0lNUVFBaEVBeTZBUXNnQUVFQU5nSUFJQmRCQVdvaEFRSkFJQUF0QUNsQkkwOE5BQ0FCSVFFTVdRc2dBRUVBTmdJY0lBQWdBVFlDRkNBQVFkT0pnSUFBTmdJUUlBQkJDRFlDREVFQUlSQU11UUVMSUFCQkFEWUNBQXRCQUNFUUlBQkJBRFlDSENBQUlBRTJBaFFnQUVHUXM0Q0FBRFlDRUNBQVFRZzJBZ3dNdHdFTElBQkJBRFlDQUNBWFFRRnFJUUVDUUNBQUxRQXBRU0ZIRFFBZ0FTRUJERllMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUdiaW9DQUFEWUNFQ0FBUVFnMkFneEJBQ0VRRExZQkN5QUFRUUEyQWdBZ0YwRUJhaUVCQWtBZ0FDMEFLU0lRUVYxcVFRdFBEUUFnQVNFQkRGVUxBa0FnRUVFR1N3MEFRUUVnRUhSQnlnQnhSUTBBSUFFaEFReFZDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWZlSmdJQUFOZ0lRSUFCQkNEWUNEQXkxQVFzZ0VFRVZSZzF4SUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUc1allDQUFEWUNFQ0FBUVJvMkFneEJBQ0VRRExRQkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRcDRDQWdBQWlFQTBBSUFFaEFReFVDeUFBUWVVQU5nSWNJQUFnQVRZQ0ZDQUFJQkEyQWd4QkFDRVFETE1CQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVFwNENBZ0FBaUVBMEFJQUVoQVF4TkN5QUFRZElBTmdJY0lBQWdBVFlDRkNBQUlCQTJBZ3hCQUNFUURMSUJDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXA0Q0FnQUFpRUEwQUlBRWhBUXhOQ3lBQVFkTUFOZ0ljSUFBZ0FUWUNGQ0FBSUJBMkFneEJBQ0VRRExFQkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRcDRDQWdBQWlFQTBBSUFFaEFReFJDeUFBUWVVQU5nSWNJQUFnQVRZQ0ZDQUFJQkEyQWd4QkFDRVFETEFCQ3lBQVFRQTJBaHdnQUNBQk5nSVVJQUJCeG9xQWdBQTJBaEFnQUVFSE5nSU1RUUFoRUF5dkFRc2dBQ2dDQkNFUUlBQkJBRFlDQkFKQUlBQWdFQ0FCRUtlQWdJQUFJaEFOQUNBQklRRU1TUXNnQUVIU0FEWUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXl1QVFzZ0FDZ0NCQ0VRSUFCQkFEWUNCQUpBSUFBZ0VDQUJFS2VBZ0lBQUloQU5BQ0FCSVFFTVNRc2dBRUhUQURZQ0hDQUFJQUUyQWhRZ0FDQVFOZ0lNUVFBaEVBeXRBUXNnQUNnQ0JDRVFJQUJCQURZQ0JBSkFJQUFnRUNBQkVLZUFnSUFBSWhBTkFDQUJJUUVNVFFzZ0FFSGxBRFlDSENBQUlBRTJBaFFnQUNBUU5nSU1RUUFoRUF5c0FRc2dBRUVBTmdJY0lBQWdBVFlDRkNBQVFkeUlnSUFBTmdJUUlBQkJCellDREVFQUlSQU1xd0VMSUJCQlAwY05BU0FCUVFGcUlRRUxRUVVoRUF5UUFRdEJBQ0VRSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUg5a29DQUFEWUNFQ0FBUVFjMkFnd01xQUVMSUFBb0FnUWhFQ0FBUVFBMkFnUUNRQ0FBSUJBZ0FSQ25nSUNBQUNJUURRQWdBU0VCREVJTElBQkIwZ0EyQWh3Z0FDQUJOZ0lVSUFBZ0VEWUNERUVBSVJBTXB3RUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDbmdJQ0FBQ0lRRFFBZ0FTRUJERUlMSUFCQjB3QTJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNcGdFTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkNuZ0lDQUFDSVFEUUFnQVNFQkRFWUxJQUJCNVFBMkFod2dBQ0FCTmdJVUlBQWdFRFlDREVFQUlSQU1wUUVMSUFBb0FnUWhBU0FBUVFBMkFnUUNRQ0FBSUFFZ0ZCQ25nSUNBQUNJQkRRQWdGQ0VCREQ4TElBQkIwZ0EyQWh3Z0FDQVVOZ0lVSUFBZ0FUWUNERUVBSVJBTXBBRUxJQUFvQWdRaEFTQUFRUUEyQWdRQ1FDQUFJQUVnRkJDbmdJQ0FBQ0lCRFFBZ0ZDRUJERDhMSUFCQjB3QTJBaHdnQUNBVU5nSVVJQUFnQVRZQ0RFRUFJUkFNb3dFTElBQW9BZ1FoQVNBQVFRQTJBZ1FDUUNBQUlBRWdGQkNuZ0lDQUFDSUJEUUFnRkNFQkRFTUxJQUJCNVFBMkFod2dBQ0FVTmdJVUlBQWdBVFlDREVFQUlSQU1vZ0VMSUFCQkFEWUNIQ0FBSUJRMkFoUWdBRUhEajRDQUFEWUNFQ0FBUVFjMkFneEJBQ0VRREtFQkN5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnc0K0FnQUEyQWhBZ0FFRUhOZ0lNUVFBaEVBeWdBUXRCQUNFUUlBQkJBRFlDSENBQUlCUTJBaFFnQUVHTW5JQ0FBRFlDRUNBQVFRYzJBZ3dNbndFTElBQkJBRFlDSENBQUlCUTJBaFFnQUVHTW5JQ0FBRFlDRUNBQVFRYzJBZ3hCQUNFUURKNEJDeUFBUVFBMkFod2dBQ0FVTmdJVUlBQkIvcEdBZ0FBMkFoQWdBRUVITmdJTVFRQWhFQXlkQVFzZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVk2YmdJQUFOZ0lRSUFCQkJqWUNERUVBSVJBTW5BRUxJQkJCRlVZTlZ5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnpJNkFnQUEyQWhBZ0FFRWdOZ0lNUVFBaEVBeWJBUXNnQUVFQU5nSUFJQkJCQVdvaEFVRWtJUkFMSUFBZ0VEb0FLU0FBS0FJRUlSQWdBRUVBTmdJRUlBQWdFQ0FCRUt1QWdJQUFJaEFOVkNBQklRRU1QZ3NnQUVFQU5nSUFDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0JEWUNGQ0FBUWZHYmdJQUFOZ0lRSUFCQkJqWUNEQXlYQVFzZ0FVRVZSZzFRSUFCQkFEWUNIQ0FBSUFVMkFoUWdBRUh3aklDQUFEWUNFQ0FBUVJzMkFneEJBQ0VRREpZQkN5QUFLQUlFSVFVZ0FFRUFOZ0lFSUFBZ0JTQVFFS21BZ0lBQUlnVU5BU0FRUVFGcUlRVUxRYTBCSVJBTWV3c2dBRUhCQVRZQ0hDQUFJQVUyQWd3Z0FDQVFRUUZxTmdJVVFRQWhFQXlUQVFzZ0FDZ0NCQ0VHSUFCQkFEWUNCQ0FBSUFZZ0VCQ3BnSUNBQUNJR0RRRWdFRUVCYWlFR0MwR3VBU0VRREhnTElBQkJ3Z0UyQWh3Z0FDQUdOZ0lNSUFBZ0VFRUJhallDRkVFQUlSQU1rQUVMSUFCQkFEWUNIQ0FBSUFjMkFoUWdBRUdYaTRDQUFEWUNFQ0FBUVEwMkFneEJBQ0VRREk4QkN5QUFRUUEyQWh3Z0FDQUlOZ0lVSUFCQjQ1Q0FnQUEyQWhBZ0FFRUpOZ0lNUVFBaEVBeU9BUXNnQUVFQU5nSWNJQUFnQ0RZQ0ZDQUFRWlNOZ0lBQU5nSVFJQUJCSVRZQ0RFRUFJUkFNalFFTFFRRWhGa0VBSVJkQkFDRVVRUUVoRUFzZ0FDQVFPZ0FySUFsQkFXb2hDQUpBQWtBZ0FDMEFMVUVRY1EwQUFrQUNRQUpBSUFBdEFDb09Bd0VBQWdRTElCWkZEUU1NQWdzZ0ZBMEJEQUlMSUJkRkRRRUxJQUFvQWdRaEVDQUFRUUEyQWdRZ0FDQVFJQWdRcllDQWdBQWlFRVVOUFNBQVFja0JOZ0ljSUFBZ0NEWUNGQ0FBSUJBMkFneEJBQ0VRREl3QkN5QUFLQUlFSVFRZ0FFRUFOZ0lFSUFBZ0JDQUlFSzJBZ0lBQUlnUkZEWFlnQUVIS0FUWUNIQ0FBSUFnMkFoUWdBQ0FFTmdJTVFRQWhFQXlMQVFzZ0FDZ0NCQ0VFSUFCQkFEWUNCQ0FBSUFRZ0NSQ3RnSUNBQUNJRVJRMTBJQUJCeXdFMkFod2dBQ0FKTmdJVUlBQWdCRFlDREVFQUlSQU1pZ0VMSUFBb0FnUWhCQ0FBUVFBMkFnUWdBQ0FFSUFvUXJZQ0FnQUFpQkVVTmNpQUFRYzBCTmdJY0lBQWdDallDRkNBQUlBUTJBZ3hCQUNFUURJa0JDd0pBSUFzdEFBQkJVR29pRUVIL0FYRkJDazhOQUNBQUlCQTZBQ29nQzBFQmFpRUtRYllCSVJBTWNBc2dBQ2dDQkNFRUlBQkJBRFlDQkNBQUlBUWdDeEN0Z0lDQUFDSUVSUTF3SUFCQnp3RTJBaHdnQUNBTE5nSVVJQUFnQkRZQ0RFRUFJUkFNaUFFTElBQkJBRFlDSENBQUlBUTJBaFFnQUVHUXM0Q0FBRFlDRUNBQVFRZzJBZ3dnQUVFQU5nSUFRUUFoRUF5SEFRc2dBVUVWUmcwL0lBQkJBRFlDSENBQUlBdzJBaFFnQUVITWpvQ0FBRFlDRUNBQVFTQTJBZ3hCQUNFUURJWUJDeUFBUVlFRU93RW9JQUFvQWdRaEVDQUFRZ0EzQXdBZ0FDQVFJQXhCQVdvaURCQ3JnSUNBQUNJUVJRMDRJQUJCMHdFMkFod2dBQ0FNTmdJVUlBQWdFRFlDREVFQUlSQU1oUUVMSUFCQkFEWUNBQXRCQUNFUUlBQkJBRFlDSENBQUlBUTJBaFFnQUVIWW00Q0FBRFlDRUNBQVFRZzJBZ3dNZ3dFTElBQW9BZ1FoRUNBQVFnQTNBd0FnQUNBUUlBdEJBV29pQ3hDcmdJQ0FBQ0lRRFFGQnhnRWhFQXhwQ3lBQVFRSTZBQ2dNVlFzZ0FFSFZBVFlDSENBQUlBczJBaFFnQUNBUU5nSU1RUUFoRUF5QUFRc2dFRUVWUmcwM0lBQkJBRFlDSENBQUlBUTJBaFFnQUVHa2pJQ0FBRFlDRUNBQVFSQTJBZ3hCQUNFUURIOExJQUF0QURSQkFVY05OQ0FBSUFRZ0FoQzhnSUNBQUNJUVJRMDBJQkJCRlVjTk5TQUFRZHdCTmdJY0lBQWdCRFlDRkNBQVFkV1dnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1mZ3RCQUNFUUlBQkJBRFlDSENBQVFhK0xnSUFBTmdJUUlBQkJBallDRENBQUlCUkJBV28yQWhRTWZRdEJBQ0VRREdNTFFRSWhFQXhpQzBFTklSQU1ZUXRCRHlFUURHQUxRU1VoRUF4ZkMwRVRJUkFNWGd0QkZTRVFERjBMUVJZaEVBeGNDMEVYSVJBTVd3dEJHQ0VRREZvTFFSa2hFQXhaQzBFYUlSQU1XQXRCR3lFUURGY0xRUndoRUF4V0MwRWRJUkFNVlF0Qkh5RVFERlFMUVNFaEVBeFRDMEVqSVJBTVVndEJ4Z0FoRUF4UkMwRXVJUkFNVUF0Qkx5RVFERThMUVRzaEVBeE9DMEU5SVJBTVRRdEJ5QUFoRUF4TUMwSEpBQ0VRREVzTFFjc0FJUkFNU2d0QnpBQWhFQXhKQzBIT0FDRVFERWdMUWRFQUlSQU1Sd3RCMVFBaEVBeEdDMEhZQUNFUURFVUxRZGtBSVJBTVJBdEIyd0FoRUF4REMwSGtBQ0VRREVJTFFlVUFJUkFNUVF0QjhRQWhFQXhBQzBIMEFDRVFERDhMUVkwQklSQU1QZ3RCbHdFaEVBdzlDMEdwQVNFUUREd0xRYXdCSVJBTU93dEJ3QUVoRUF3NkMwRzVBU0VRRERrTFFhOEJJUkFNT0F0QnNRRWhFQXczQzBHeUFTRVFERFlMUWJRQklSQU1OUXRCdFFFaEVBdzBDMEc2QVNFUURETUxRYjBCSVJBTU1ndEJ2d0VoRUF3eEMwSEJBU0VRRERBTElBQkJBRFlDSENBQUlBUTJBaFFnQUVIcGk0Q0FBRFlDRUNBQVFSODJBZ3hCQUNFUURFZ0xJQUJCMndFMkFod2dBQ0FFTmdJVUlBQkIrcGFBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXhIQ3lBQVFmZ0FOZ0ljSUFBZ0REWUNGQ0FBUWNxWWdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTVJnc2dBRUhSQURZQ0hDQUFJQVUyQWhRZ0FFR3dsNENBQURZQ0VDQUFRUlUyQWd4QkFDRVFERVVMSUFCQitRQTJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNUkFzZ0FFSDRBRFlDSENBQUlBRTJBaFFnQUVIS21JQ0FBRFlDRUNBQVFSVTJBZ3hCQUNFUURFTUxJQUJCNUFBMkFod2dBQ0FCTmdJVUlBQkI0NWVBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXhDQ3lBQVFkY0FOZ0ljSUFBZ0FUWUNGQ0FBUWNtWGdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTVFRc2dBRUVBTmdJY0lBQWdBVFlDRkNBQVFibU5nSUFBTmdJUUlBQkJHallDREVFQUlSQU1RQXNnQUVIQ0FEWUNIQ0FBSUFFMkFoUWdBRUhqbUlDQUFEWUNFQ0FBUVJVMkFneEJBQ0VRREQ4TElBQkJBRFlDQkNBQUlBOGdEeEN4Z0lDQUFDSUVSUTBCSUFCQk9qWUNIQ0FBSUFRMkFnd2dBQ0FQUVFGcU5nSVVRUUFoRUF3K0N5QUFLQUlFSVFRZ0FFRUFOZ0lFQWtBZ0FDQUVJQUVRc1lDQWdBQWlCRVVOQUNBQVFUczJBaHdnQUNBRU5nSU1JQUFnQVVFQmFqWUNGRUVBSVJBTVBnc2dBVUVCYWlFQkRDMExJQTlCQVdvaEFRd3RDeUFBUVFBMkFod2dBQ0FQTmdJVUlBQkI1SktBZ0FBMkFoQWdBRUVFTmdJTVFRQWhFQXc3Q3lBQVFUWTJBaHdnQUNBRU5nSVVJQUFnQWpZQ0RFRUFJUkFNT2dzZ0FFRXVOZ0ljSUFBZ0RqWUNGQ0FBSUFRMkFneEJBQ0VRRERrTElBQkIwQUEyQWh3Z0FDQUJOZ0lVSUFCQmtaaUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBdzRDeUFOUVFGcUlRRU1MQXNnQUVFVk5nSWNJQUFnQVRZQ0ZDQUFRWUtaZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNTmdzZ0FFRWJOZ0ljSUFBZ0FUWUNGQ0FBUVpHWGdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTU5Rc2dBRUVQTmdJY0lBQWdBVFlDRkNBQVFaR1hnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1OQXNnQUVFTE5nSWNJQUFnQVRZQ0ZDQUFRWkdYZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNTXdzZ0FFRWFOZ0ljSUFBZ0FUWUNGQ0FBUVlLWmdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTU1nc2dBRUVMTmdJY0lBQWdBVFlDRkNBQVFZS1pnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1NUXNnQUVFS05nSWNJQUFnQVRZQ0ZDQUFRZVNXZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNTUFzZ0FFRWVOZ0ljSUFBZ0FUWUNGQ0FBUWZtWGdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTUx3c2dBRUVBTmdJY0lBQWdFRFlDRkNBQVFkcU5nSUFBTmdJUUlBQkJGRFlDREVFQUlSQU1MZ3NnQUVFRU5nSWNJQUFnQVRZQ0ZDQUFRYkNZZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNTFFzZ0FFRUFOZ0lBSUF0QkFXb2hDd3RCdUFFaEVBd1NDeUFBUVFBMkFnQWdFRUVCYWlFQlFmVUFJUkFNRVFzZ0FTRUJBa0FnQUMwQUtVRUZSdzBBUWVNQUlSQU1FUXRCNGdBaEVBd1FDMEVBSVJBZ0FFRUFOZ0ljSUFCQjVKR0FnQUEyQWhBZ0FFRUhOZ0lNSUFBZ0ZFRUJhallDRkF3b0N5QUFRUUEyQWdBZ0YwRUJhaUVCUWNBQUlSQU1EZ3RCQVNFQkN5QUFJQUU2QUN3Z0FFRUFOZ0lBSUJkQkFXb2hBUXRCS0NFUURBc0xJQUVoQVF0Qk9DRVFEQWtMQWtBZ0FTSVBJQUpHRFFBRFFBSkFJQTh0QUFCQmdMNkFnQUJxTFFBQUlnRkJBVVlOQUNBQlFRSkhEUU1nRDBFQmFpRUJEQVFMSUE5QkFXb2lEeUFDUncwQUMwRStJUkFNSWd0QlBpRVFEQ0VMSUFCQkFEb0FMQ0FQSVFFTUFRdEJDeUVRREFZTFFUb2hFQXdGQ3lBQlFRRnFJUUZCTFNFUURBUUxJQUFnQVRvQUxDQUFRUUEyQWdBZ0ZrRUJhaUVCUVF3aEVBd0RDeUFBUVFBMkFnQWdGMEVCYWlFQlFRb2hFQXdDQ3lBQVFRQTJBZ0FMSUFCQkFEb0FMQ0FOSVFGQkNTRVFEQUFMQzBFQUlSQWdBRUVBTmdJY0lBQWdDellDRkNBQVFjMlFnSUFBTmdJUUlBQkJDVFlDREF3WEMwRUFJUkFnQUVFQU5nSWNJQUFnQ2pZQ0ZDQUFRZW1LZ0lBQU5nSVFJQUJCQ1RZQ0RBd1dDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0NUWUNGQ0FBUWJlUWdJQUFOZ0lRSUFCQkNUWUNEQXdWQzBFQUlSQWdBRUVBTmdJY0lBQWdDRFlDRkNBQVFaeVJnSUFBTmdJUUlBQkJDVFlDREF3VUMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRYzJRZ0lBQU5nSVFJQUJCQ1RZQ0RBd1RDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWVtS2dJQUFOZ0lRSUFCQkNUWUNEQXdTQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFiZVFnSUFBTmdJUUlBQkJDVFlDREF3UkMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRWnlSZ0lBQU5nSVFJQUJCQ1RZQ0RBd1FDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVplVmdJQUFOZ0lRSUFCQkR6WUNEQXdQQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFaZVZnSUFBTmdJUUlBQkJEellDREF3T0MwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRY0NTZ0lBQU5nSVFJQUJCQ3pZQ0RBd05DMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVpXSmdJQUFOZ0lRSUFCQkN6WUNEQXdNQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFlR1BnSUFBTmdJUUlBQkJDallDREF3TEMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZnVQZ0lBQU5nSVFJQUJCQ2pZQ0RBd0tDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWZHWmdJQUFOZ0lRSUFCQkFqWUNEQXdKQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFjU1VnSUFBTmdJUUlBQkJBallDREF3SUMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZktWZ0lBQU5nSVFJQUJCQWpZQ0RBd0hDeUFBUVFJMkFod2dBQ0FCTmdJVUlBQkJuSnFBZ0FBMkFoQWdBRUVXTmdJTVFRQWhFQXdHQzBFQklSQU1CUXRCMUFBaEVDQUJJZ1FnQWtZTkJDQURRUWhxSUFBZ0JDQUNRZGpDZ0lBQVFRb1F4WUNBZ0FBZ0F5Z0NEQ0VFSUFNb0FnZ09Bd0VFQWdBTEVNcUFnSUFBQUFzZ0FFRUFOZ0ljSUFCQnRacUFnQUEyQWhBZ0FFRVhOZ0lNSUFBZ0JFRUJhallDRkVFQUlSQU1BZ3NnQUVFQU5nSWNJQUFnQkRZQ0ZDQUFRY3FhZ0lBQU5nSVFJQUJCQ1RZQ0RFRUFJUkFNQVFzQ1FDQUJJZ1FnQWtjTkFFRWlJUkFNQVFzZ0FFR0pnSUNBQURZQ0NDQUFJQVEyQWdSQklTRVFDeUFEUVJCcUpJQ0FnSUFBSUJBTHJ3RUJBbjhnQVNnQ0FDRUdBa0FDUUNBQ0lBTkdEUUFnQkNBR2FpRUVJQVlnQTJvZ0Ftc2hCeUFDSUFaQmYzTWdCV29pQm1vaEJRTkFBa0FnQWkwQUFDQUVMUUFBUmcwQVFRSWhCQXdEQ3dKQUlBWU5BRUVBSVFRZ0JTRUNEQU1MSUFaQmYyb2hCaUFFUVFGcUlRUWdBa0VCYWlJQ0lBTkhEUUFMSUFjaEJpQURJUUlMSUFCQkFUWUNBQ0FCSUFZMkFnQWdBQ0FDTmdJRUR3c2dBVUVBTmdJQUlBQWdCRFlDQUNBQUlBSTJBZ1FMQ2dBZ0FCREhnSUNBQUF2eU5nRUxmeU9BZ0lDQUFFRVFheUlCSklDQWdJQUFBa0JCQUNnQ29OQ0FnQUFOQUVFQUVNdUFnSUFBUVlEVWhJQUFheUlDUWRrQVNRMEFRUUFoQXdKQVFRQW9BdURUZ0lBQUlnUU5BRUVBUW44M0F1elRnSUFBUVFCQ2dJQ0VnSUNBd0FBM0F1VFRnSUFBUVFBZ0FVRUlha0Z3Y1VIWXF0V3FCWE1pQkRZQzROT0FnQUJCQUVFQU5nTDAwNENBQUVFQVFRQTJBc1RUZ0lBQUMwRUFJQUkyQXN6VGdJQUFRUUJCZ05TRWdBQTJBc2pUZ0lBQVFRQkJnTlNFZ0FBMkFwalFnSUFBUVFBZ0JEWUNyTkNBZ0FCQkFFRi9OZ0tvMElDQUFBTkFJQU5CeE5DQWdBQnFJQU5CdU5DQWdBQnFJZ1EyQWdBZ0JDQURRYkRRZ0lBQWFpSUZOZ0lBSUFOQnZOQ0FnQUJxSUFVMkFnQWdBMEhNMElDQUFHb2dBMEhBMElDQUFHb2lCVFlDQUNBRklBUTJBZ0FnQTBIVTBJQ0FBR29nQTBISTBJQ0FBR29pQkRZQ0FDQUVJQVUyQWdBZ0EwSFEwSUNBQUdvZ0JEWUNBQ0FEUVNCcUlnTkJnQUpIRFFBTFFZRFVoSUFBUVhoQmdOU0VnQUJyUVE5eFFRQkJnTlNFZ0FCQkNHcEJEM0ViSWdOcUlnUkJCR29nQWtGSWFpSUZJQU5ySWdOQkFYSTJBZ0JCQUVFQUtBTHcwNENBQURZQ3BOQ0FnQUJCQUNBRE5nS1UwSUNBQUVFQUlBUTJBcURRZ0lBQVFZRFVoSUFBSUFWcVFUZzJBZ1FMQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQUJCN0FGTERRQUNRRUVBS0FLSTBJQ0FBQ0lHUVJBZ0FFRVRha0Z3Y1NBQVFRdEpHeUlDUVFOMklnUjJJZ05CQTNGRkRRQUNRQUpBSUFOQkFYRWdCSEpCQVhNaUJVRURkQ0lFUWJEUWdJQUFhaUlESUFSQnVOQ0FnQUJxS0FJQUlnUW9BZ2dpQWtjTkFFRUFJQVpCZmlBRmQzRTJBb2pRZ0lBQURBRUxJQU1nQWpZQ0NDQUNJQU0yQWd3TElBUkJDR29oQXlBRUlBVkJBM1FpQlVFRGNqWUNCQ0FFSUFWcUlnUWdCQ2dDQkVFQmNqWUNCQXdNQ3lBQ1FRQW9BcERRZ0lBQUlnZE5EUUVDUUNBRFJRMEFBa0FDUUNBRElBUjBRUUlnQkhRaUEwRUFJQU5yY25FaUEwRUFJQU5yY1VGL2FpSURJQU5CREhaQkVIRWlBM1lpQkVFRmRrRUljU0lGSUFOeUlBUWdCWFlpQTBFQ2RrRUVjU0lFY2lBRElBUjJJZ05CQVhaQkFuRWlCSElnQXlBRWRpSURRUUYyUVFGeElnUnlJQU1nQkhacUlnUkJBM1FpQTBHdzBJQ0FBR29pQlNBRFFialFnSUFBYWlnQ0FDSURLQUlJSWdCSERRQkJBQ0FHUVg0Z0JIZHhJZ1kyQW9qUWdJQUFEQUVMSUFVZ0FEWUNDQ0FBSUFVMkFnd0xJQU1nQWtFRGNqWUNCQ0FESUFSQkEzUWlCR29nQkNBQ2F5SUZOZ0lBSUFNZ0Ftb2lBQ0FGUVFGeU5nSUVBa0FnQjBVTkFDQUhRWGh4UWJEUWdJQUFhaUVDUVFBb0FwelFnSUFBSVFRQ1FBSkFJQVpCQVNBSFFRTjJkQ0lJY1EwQVFRQWdCaUFJY2pZQ2lOQ0FnQUFnQWlFSURBRUxJQUlvQWdnaENBc2dDQ0FFTmdJTUlBSWdCRFlDQ0NBRUlBSTJBZ3dnQkNBSU5nSUlDeUFEUVFocUlRTkJBQ0FBTmdLYzBJQ0FBRUVBSUFVMkFwRFFnSUFBREF3TFFRQW9Bb3pRZ0lBQUlnbEZEUUVnQ1VFQUlBbHJjVUYvYWlJRElBTkJESFpCRUhFaUEzWWlCRUVGZGtFSWNTSUZJQU55SUFRZ0JYWWlBMEVDZGtFRWNTSUVjaUFESUFSMklnTkJBWFpCQW5FaUJISWdBeUFFZGlJRFFRRjJRUUZ4SWdSeUlBTWdCSFpxUVFKMFFialNnSUFBYWlnQ0FDSUFLQUlFUVhoeElBSnJJUVFnQUNFRkFrQURRQUpBSUFVb0FoQWlBdzBBSUFWQkZHb29BZ0FpQTBVTkFnc2dBeWdDQkVGNGNTQUNheUlGSUFRZ0JTQUVTU0lGR3lFRUlBTWdBQ0FGR3lFQUlBTWhCUXdBQ3dzZ0FDZ0NHQ0VLQWtBZ0FDZ0NEQ0lJSUFCR0RRQWdBQ2dDQ0NJRFFRQW9BcGpRZ0lBQVNSb2dDQ0FETmdJSUlBTWdDRFlDREF3TEN3SkFJQUJCRkdvaUJTZ0NBQ0lERFFBZ0FDZ0NFQ0lEUlEwRElBQkJFR29oQlFzRFFDQUZJUXNnQXlJSVFSUnFJZ1VvQWdBaUF3MEFJQWhCRUdvaEJTQUlLQUlRSWdNTkFBc2dDMEVBTmdJQURBb0xRWDhoQWlBQVFiOS9TdzBBSUFCQkUyb2lBMEZ3Y1NFQ1FRQW9Bb3pRZ0lBQUlnZEZEUUJCQUNFTEFrQWdBa0dBQWtrTkFFRWZJUXNnQWtILy8vOEhTdzBBSUFOQkNIWWlBeUFEUVlEK1AycEJFSFpCQ0hFaUEzUWlCQ0FFUVlEZ0gycEJFSFpCQkhFaUJIUWlCU0FGUVlDQUQycEJFSFpCQW5FaUJYUkJEM1lnQXlBRWNpQUZjbXNpQTBFQmRDQUNJQU5CRldwMlFRRnhja0VjYWlFTEMwRUFJQUpySVFRQ1FBSkFBa0FDUUNBTFFRSjBRYmpTZ0lBQWFpZ0NBQ0lGRFFCQkFDRURRUUFoQ0F3QkMwRUFJUU1nQWtFQVFSa2dDMEVCZG1zZ0MwRWZSaHQwSVFCQkFDRUlBMEFDUUNBRktBSUVRWGh4SUFKcklnWWdCRThOQUNBR0lRUWdCU0VJSUFZTkFFRUFJUVFnQlNFSUlBVWhBd3dEQ3lBRElBVkJGR29vQWdBaUJpQUdJQVVnQUVFZGRrRUVjV3BCRUdvb0FnQWlCVVliSUFNZ0Joc2hBeUFBUVFGMElRQWdCUTBBQ3dzQ1FDQURJQWh5RFFCQkFDRUlRUUlnQzNRaUEwRUFJQU5yY2lBSGNTSURSUTBESUFOQkFDQURhM0ZCZjJvaUF5QURRUXgyUVJCeElnTjJJZ1ZCQlhaQkNIRWlBQ0FEY2lBRklBQjJJZ05CQW5aQkJIRWlCWElnQXlBRmRpSURRUUYyUVFKeElnVnlJQU1nQlhZaUEwRUJka0VCY1NJRmNpQURJQVYyYWtFQ2RFRzQwb0NBQUdvb0FnQWhBd3NnQTBVTkFRc0RRQ0FES0FJRVFYaHhJQUpySWdZZ0JFa2hBQUpBSUFNb0FoQWlCUTBBSUFOQkZHb29BZ0FoQlFzZ0JpQUVJQUFiSVFRZ0F5QUlJQUFiSVFnZ0JTRURJQVVOQUFzTElBaEZEUUFnQkVFQUtBS1EwSUNBQUNBQ2EwOE5BQ0FJS0FJWUlRc0NRQ0FJS0FJTUlnQWdDRVlOQUNBSUtBSUlJZ05CQUNnQ21OQ0FnQUJKR2lBQUlBTTJBZ2dnQXlBQU5nSU1EQWtMQWtBZ0NFRVVhaUlGS0FJQUlnTU5BQ0FJS0FJUUlnTkZEUU1nQ0VFUWFpRUZDd05BSUFVaEJpQURJZ0JCRkdvaUJTZ0NBQ0lERFFBZ0FFRVFhaUVGSUFBb0FoQWlBdzBBQ3lBR1FRQTJBZ0FNQ0FzQ1FFRUFLQUtRMElDQUFDSURJQUpKRFFCQkFDZ0NuTkNBZ0FBaEJBSkFBa0FnQXlBQ2F5SUZRUkJKRFFBZ0JDQUNhaUlBSUFWQkFYSTJBZ1JCQUNBRk5nS1EwSUNBQUVFQUlBQTJBcHpRZ0lBQUlBUWdBMm9nQlRZQ0FDQUVJQUpCQTNJMkFnUU1BUXNnQkNBRFFRTnlOZ0lFSUFRZ0Eyb2lBeUFES0FJRVFRRnlOZ0lFUVFCQkFEWUNuTkNBZ0FCQkFFRUFOZ0tRMElDQUFBc2dCRUVJYWlFRERBb0xBa0JCQUNnQ2xOQ0FnQUFpQUNBQ1RRMEFRUUFvQXFEUWdJQUFJZ01nQW1vaUJDQUFJQUpySWdWQkFYSTJBZ1JCQUNBRk5nS1UwSUNBQUVFQUlBUTJBcURRZ0lBQUlBTWdBa0VEY2pZQ0JDQURRUWhxSVFNTUNnc0NRQUpBUVFBb0F1RFRnSUFBUlEwQVFRQW9BdWpUZ0lBQUlRUU1BUXRCQUVKL053THMwNENBQUVFQVFvQ0FoSUNBZ01BQU53TGswNENBQUVFQUlBRkJER3BCY0hGQjJLclZxZ1Z6TmdMZzA0Q0FBRUVBUVFBMkF2VFRnSUFBUVFCQkFEWUN4Tk9BZ0FCQmdJQUVJUVFMUVFBaEF3SkFJQVFnQWtISEFHb2lCMm9pQmtFQUlBUnJJZ3R4SWdnZ0Frc05BRUVBUVRBMkF2alRnSUFBREFvTEFrQkJBQ2dDd05PQWdBQWlBMFVOQUFKQVFRQW9BcmpUZ0lBQUlnUWdDR29pQlNBRVRRMEFJQVVnQTAwTkFRdEJBQ0VEUVFCQk1EWUMrTk9BZ0FBTUNndEJBQzBBeE5PQWdBQkJCSEVOQkFKQUFrQUNRRUVBS0FLZzBJQ0FBQ0lFUlEwQVFjalRnSUFBSVFNRFFBSkFJQU1vQWdBaUJTQUVTdzBBSUFVZ0F5Z0NCR29nQkVzTkF3c2dBeWdDQ0NJRERRQUxDMEVBRU11QWdJQUFJZ0JCZjBZTkJTQUlJUVlDUUVFQUtBTGswNENBQUNJRFFYOXFJZ1FnQUhGRkRRQWdDQ0FBYXlBRUlBQnFRUUFnQTJ0eGFpRUdDeUFHSUFKTkRRVWdCa0grLy8vL0Iwc05CUUpBUVFBb0FzRFRnSUFBSWdORkRRQkJBQ2dDdU5PQWdBQWlCQ0FHYWlJRklBUk5EUVlnQlNBRFN3MEdDeUFHRU11QWdJQUFJZ01nQUVjTkFRd0hDeUFHSUFCcklBdHhJZ1pCL3YvLy93ZExEUVFnQmhETGdJQ0FBQ0lBSUFNb0FnQWdBeWdDQkdwR0RRTWdBQ0VEQ3dKQUlBTkJmMFlOQUNBQ1FjZ0FhaUFHVFEwQUFrQWdCeUFHYTBFQUtBTG8wNENBQUNJRWFrRUFJQVJyY1NJRVFmNy8vLzhIVFEwQUlBTWhBQXdIQ3dKQUlBUVF5NENBZ0FCQmYwWU5BQ0FFSUFacUlRWWdBeUVBREFjTFFRQWdCbXNReTRDQWdBQWFEQVFMSUFNaEFDQURRWDlIRFFVTUF3dEJBQ0VJREFjTFFRQWhBQXdGQ3lBQVFYOUhEUUlMUVFCQkFDZ0N4Tk9BZ0FCQkJISTJBc1RUZ0lBQUN5QUlRZjcvLy84SFN3MEJJQWdReTRDQWdBQWhBRUVBRU11QWdJQUFJUU1nQUVGL1JnMEJJQU5CZjBZTkFTQUFJQU5QRFFFZ0F5QUFheUlHSUFKQk9HcE5EUUVMUVFCQkFDZ0N1Tk9BZ0FBZ0Jtb2lBellDdU5PQWdBQUNRQ0FEUVFBb0FyelRnSUFBVFEwQVFRQWdBellDdk5PQWdBQUxBa0FDUUFKQUFrQkJBQ2dDb05DQWdBQWlCRVVOQUVISTA0Q0FBQ0VEQTBBZ0FDQURLQUlBSWdVZ0F5Z0NCQ0lJYWtZTkFpQURLQUlJSWdNTkFBd0RDd3NDUUFKQVFRQW9BcGpRZ0lBQUlnTkZEUUFnQUNBRFR3MEJDMEVBSUFBMkFwalFnSUFBQzBFQUlRTkJBQ0FHTmdMTTA0Q0FBRUVBSUFBMkFzalRnSUFBUVFCQmZ6WUNxTkNBZ0FCQkFFRUFLQUxnMDRDQUFEWUNyTkNBZ0FCQkFFRUFOZ0xVMDRDQUFBTkFJQU5CeE5DQWdBQnFJQU5CdU5DQWdBQnFJZ1EyQWdBZ0JDQURRYkRRZ0lBQWFpSUZOZ0lBSUFOQnZOQ0FnQUJxSUFVMkFnQWdBMEhNMElDQUFHb2dBMEhBMElDQUFHb2lCVFlDQUNBRklBUTJBZ0FnQTBIVTBJQ0FBR29nQTBISTBJQ0FBR29pQkRZQ0FDQUVJQVUyQWdBZ0EwSFEwSUNBQUdvZ0JEWUNBQ0FEUVNCcUlnTkJnQUpIRFFBTElBQkJlQ0FBYTBFUGNVRUFJQUJCQ0dwQkQzRWJJZ05xSWdRZ0JrRklhaUlGSUFOcklnTkJBWEkyQWdSQkFFRUFLQUx3MDRDQUFEWUNwTkNBZ0FCQkFDQUROZ0tVMElDQUFFRUFJQVEyQXFEUWdJQUFJQUFnQldwQk9EWUNCQXdDQ3lBRExRQU1RUWh4RFFBZ0JDQUZTUTBBSUFRZ0FFOE5BQ0FFUVhnZ0JHdEJEM0ZCQUNBRVFRaHFRUTl4R3lJRmFpSUFRUUFvQXBUUWdJQUFJQVpxSWdzZ0JXc2lCVUVCY2pZQ0JDQURJQWdnQm1vMkFnUkJBRUVBS0FMdzA0Q0FBRFlDcE5DQWdBQkJBQ0FGTmdLVTBJQ0FBRUVBSUFBMkFxRFFnSUFBSUFRZ0MycEJPRFlDQkF3QkN3SkFJQUJCQUNnQ21OQ0FnQUFpQ0U4TkFFRUFJQUEyQXBqUWdJQUFJQUFoQ0FzZ0FDQUdhaUVGUWNqVGdJQUFJUU1DUUFKQUFrQUNRQUpBQWtBQ1FBTkFJQU1vQWdBZ0JVWU5BU0FES0FJSUlnTU5BQXdDQ3dzZ0F5MEFERUVJY1VVTkFRdEJ5Tk9BZ0FBaEF3TkFBa0FnQXlnQ0FDSUZJQVJMRFFBZ0JTQURLQUlFYWlJRklBUkxEUU1MSUFNb0FnZ2hBd3dBQ3dzZ0F5QUFOZ0lBSUFNZ0F5Z0NCQ0FHYWpZQ0JDQUFRWGdnQUd0QkQzRkJBQ0FBUVFocVFROXhHMm9pQ3lBQ1FRTnlOZ0lFSUFWQmVDQUZhMEVQY1VFQUlBVkJDR3BCRDNFYmFpSUdJQXNnQW1vaUFtc2hBd0pBSUFZZ0JFY05BRUVBSUFJMkFxRFFnSUFBUVFCQkFDZ0NsTkNBZ0FBZ0Eyb2lBellDbE5DQWdBQWdBaUFEUVFGeU5nSUVEQU1MQWtBZ0JrRUFLQUtjMElDQUFFY05BRUVBSUFJMkFwelFnSUFBUVFCQkFDZ0NrTkNBZ0FBZ0Eyb2lBellDa05DQWdBQWdBaUFEUVFGeU5nSUVJQUlnQTJvZ0F6WUNBQXdEQ3dKQUlBWW9BZ1FpQkVFRGNVRUJSdzBBSUFSQmVIRWhCd0pBQWtBZ0JFSC9BVXNOQUNBR0tBSUlJZ1VnQkVFRGRpSUlRUU4wUWJEUWdJQUFhaUlBUmhvQ1FDQUdLQUlNSWdRZ0JVY05BRUVBUVFBb0FvalFnSUFBUVg0Z0NIZHhOZ0tJMElDQUFBd0NDeUFFSUFCR0dpQUVJQVUyQWdnZ0JTQUVOZ0lNREFFTElBWW9BaGdoQ1FKQUFrQWdCaWdDRENJQUlBWkdEUUFnQmlnQ0NDSUVJQWhKR2lBQUlBUTJBZ2dnQkNBQU5nSU1EQUVMQWtBZ0JrRVVhaUlFS0FJQUlnVU5BQ0FHUVJCcUlnUW9BZ0FpQlEwQVFRQWhBQXdCQ3dOQUlBUWhDQ0FGSWdCQkZHb2lCQ2dDQUNJRkRRQWdBRUVRYWlFRUlBQW9BaEFpQlEwQUN5QUlRUUEyQWdBTElBbEZEUUFDUUFKQUlBWWdCaWdDSENJRlFRSjBRYmpTZ0lBQWFpSUVLQUlBUncwQUlBUWdBRFlDQUNBQURRRkJBRUVBS0FLTTBJQ0FBRUYrSUFWM2NUWUNqTkNBZ0FBTUFnc2dDVUVRUVJRZ0NTZ0NFQ0FHUmh0cUlBQTJBZ0FnQUVVTkFRc2dBQ0FKTmdJWUFrQWdCaWdDRUNJRVJRMEFJQUFnQkRZQ0VDQUVJQUEyQWhnTElBWW9BaFFpQkVVTkFDQUFRUlJxSUFRMkFnQWdCQ0FBTmdJWUN5QUhJQU5xSVFNZ0JpQUhhaUlHS0FJRUlRUUxJQVlnQkVGK2NUWUNCQ0FDSUFOcUlBTTJBZ0FnQWlBRFFRRnlOZ0lFQWtBZ0EwSC9BVXNOQUNBRFFYaHhRYkRRZ0lBQWFpRUVBa0FDUUVFQUtBS0kwSUNBQUNJRlFRRWdBMEVEZG5RaUEzRU5BRUVBSUFVZ0EzSTJBb2pRZ0lBQUlBUWhBd3dCQ3lBRUtBSUlJUU1MSUFNZ0FqWUNEQ0FFSUFJMkFnZ2dBaUFFTmdJTUlBSWdBellDQ0F3REMwRWZJUVFDUUNBRFFmLy8vd2RMRFFBZ0EwRUlkaUlFSUFSQmdQNC9ha0VRZGtFSWNTSUVkQ0lGSUFWQmdPQWZha0VRZGtFRWNTSUZkQ0lBSUFCQmdJQVBha0VRZGtFQ2NTSUFkRUVQZGlBRUlBVnlJQUJ5YXlJRVFRRjBJQU1nQkVFVmFuWkJBWEZ5UVJ4cUlRUUxJQUlnQkRZQ0hDQUNRZ0EzQWhBZ0JFRUNkRUc0MG9DQUFHb2hCUUpBUVFBb0FvelFnSUFBSWdCQkFTQUVkQ0lJY1EwQUlBVWdBallDQUVFQUlBQWdDSEkyQW96UWdJQUFJQUlnQlRZQ0dDQUNJQUkyQWdnZ0FpQUNOZ0lNREFNTElBTkJBRUVaSUFSQkFYWnJJQVJCSDBZYmRDRUVJQVVvQWdBaEFBTkFJQUFpQlNnQ0JFRjRjU0FEUmcwQ0lBUkJIWFloQUNBRVFRRjBJUVFnQlNBQVFRUnhha0VRYWlJSUtBSUFJZ0FOQUFzZ0NDQUNOZ0lBSUFJZ0JUWUNHQ0FDSUFJMkFnd2dBaUFDTmdJSURBSUxJQUJCZUNBQWEwRVBjVUVBSUFCQkNHcEJEM0ViSWdOcUlnc2dCa0ZJYWlJSUlBTnJJZ05CQVhJMkFnUWdBQ0FJYWtFNE5nSUVJQVFnQlVFM0lBVnJRUTl4UVFBZ0JVRkpha0VQY1J0cVFVRnFJZ2dnQ0NBRVFSQnFTUnNpQ0VFak5nSUVRUUJCQUNnQzhOT0FnQUEyQXFUUWdJQUFRUUFnQXpZQ2xOQ0FnQUJCQUNBTE5nS2cwSUNBQUNBSVFSQnFRUUFwQXREVGdJQUFOd0lBSUFoQkFDa0N5Tk9BZ0FBM0FnaEJBQ0FJUVFocU5nTFEwNENBQUVFQUlBWTJBc3pUZ0lBQVFRQWdBRFlDeU5PQWdBQkJBRUVBTmdMVTA0Q0FBQ0FJUVNScUlRTURRQ0FEUVFjMkFnQWdBMEVFYWlJRElBVkpEUUFMSUFnZ0JFWU5BeUFJSUFnb0FnUkJmbkUyQWdRZ0NDQUlJQVJySWdBMkFnQWdCQ0FBUVFGeU5nSUVBa0FnQUVIL0FVc05BQ0FBUVhoeFFiRFFnSUFBYWlFREFrQUNRRUVBS0FLSTBJQ0FBQ0lGUVFFZ0FFRURkblFpQUhFTkFFRUFJQVVnQUhJMkFvalFnSUFBSUFNaEJRd0JDeUFES0FJSUlRVUxJQVVnQkRZQ0RDQURJQVEyQWdnZ0JDQUROZ0lNSUFRZ0JUWUNDQXdFQzBFZklRTUNRQ0FBUWYvLy93ZExEUUFnQUVFSWRpSURJQU5CZ1A0L2FrRVFka0VJY1NJRGRDSUZJQVZCZ09BZmFrRVFka0VFY1NJRmRDSUlJQWhCZ0lBUGFrRVFka0VDY1NJSWRFRVBkaUFESUFWeUlBaHlheUlEUVFGMElBQWdBMEVWYW5aQkFYRnlRUnhxSVFNTElBUWdBellDSENBRVFnQTNBaEFnQTBFQ2RFRzQwb0NBQUdvaEJRSkFRUUFvQW96UWdJQUFJZ2hCQVNBRGRDSUdjUTBBSUFVZ0JEWUNBRUVBSUFnZ0JuSTJBb3pRZ0lBQUlBUWdCVFlDR0NBRUlBUTJBZ2dnQkNBRU5nSU1EQVFMSUFCQkFFRVpJQU5CQVhacklBTkJIMFliZENFRElBVW9BZ0FoQ0FOQUlBZ2lCU2dDQkVGNGNTQUFSZzBESUFOQkhYWWhDQ0FEUVFGMElRTWdCU0FJUVFSeGFrRVFhaUlHS0FJQUlnZ05BQXNnQmlBRU5nSUFJQVFnQlRZQ0dDQUVJQVEyQWd3Z0JDQUVOZ0lJREFNTElBVW9BZ2dpQXlBQ05nSU1JQVVnQWpZQ0NDQUNRUUEyQWhnZ0FpQUZOZ0lNSUFJZ0F6WUNDQXNnQzBFSWFpRUREQVVMSUFVb0FnZ2lBeUFFTmdJTUlBVWdCRFlDQ0NBRVFRQTJBaGdnQkNBRk5nSU1JQVFnQXpZQ0NBdEJBQ2dDbE5DQWdBQWlBeUFDVFEwQVFRQW9BcURRZ0lBQUlnUWdBbW9pQlNBRElBSnJJZ05CQVhJMkFnUkJBQ0FETmdLVTBJQ0FBRUVBSUFVMkFxRFFnSUFBSUFRZ0FrRURjallDQkNBRVFRaHFJUU1NQXd0QkFDRURRUUJCTURZQytOT0FnQUFNQWdzQ1FDQUxSUTBBQWtBQ1FDQUlJQWdvQWh3aUJVRUNkRUc0MG9DQUFHb2lBeWdDQUVjTkFDQURJQUEyQWdBZ0FBMEJRUUFnQjBGK0lBVjNjU0lITmdLTTBJQ0FBQXdDQ3lBTFFSQkJGQ0FMS0FJUUlBaEdHMm9nQURZQ0FDQUFSUTBCQ3lBQUlBczJBaGdDUUNBSUtBSVFJZ05GRFFBZ0FDQUROZ0lRSUFNZ0FEWUNHQXNnQ0VFVWFpZ0NBQ0lEUlEwQUlBQkJGR29nQXpZQ0FDQURJQUEyQWhnTEFrQUNRQ0FFUVE5TERRQWdDQ0FFSUFKcUlnTkJBM0kyQWdRZ0NDQURhaUlESUFNb0FnUkJBWEkyQWdRTUFRc2dDQ0FDYWlJQUlBUkJBWEkyQWdRZ0NDQUNRUU55TmdJRUlBQWdCR29nQkRZQ0FBSkFJQVJCL3dGTERRQWdCRUY0Y1VHdzBJQ0FBR29oQXdKQUFrQkJBQ2dDaU5DQWdBQWlCVUVCSUFSQkEzWjBJZ1J4RFFCQkFDQUZJQVJ5TmdLSTBJQ0FBQ0FESVFRTUFRc2dBeWdDQ0NFRUN5QUVJQUEyQWd3Z0F5QUFOZ0lJSUFBZ0F6WUNEQ0FBSUFRMkFnZ01BUXRCSHlFREFrQWdCRUgvLy84SFN3MEFJQVJCQ0hZaUF5QURRWUQrUDJwQkVIWkJDSEVpQTNRaUJTQUZRWURnSDJwQkVIWkJCSEVpQlhRaUFpQUNRWUNBRDJwQkVIWkJBbkVpQW5SQkQzWWdBeUFGY2lBQ2Ntc2lBMEVCZENBRUlBTkJGV3AyUVFGeGNrRWNhaUVEQ3lBQUlBTTJBaHdnQUVJQU53SVFJQU5CQW5SQnVOS0FnQUJxSVFVQ1FDQUhRUUVnQTNRaUFuRU5BQ0FGSUFBMkFnQkJBQ0FISUFKeU5nS00wSUNBQUNBQUlBVTJBaGdnQUNBQU5nSUlJQUFnQURZQ0RBd0JDeUFFUVFCQkdTQURRUUYyYXlBRFFSOUdHM1FoQXlBRktBSUFJUUlDUUFOQUlBSWlCU2dDQkVGNGNTQUVSZzBCSUFOQkhYWWhBaUFEUVFGMElRTWdCU0FDUVFSeGFrRVFhaUlHS0FJQUlnSU5BQXNnQmlBQU5nSUFJQUFnQlRZQ0dDQUFJQUEyQWd3Z0FDQUFOZ0lJREFFTElBVW9BZ2dpQXlBQU5nSU1JQVVnQURZQ0NDQUFRUUEyQWhnZ0FDQUZOZ0lNSUFBZ0F6WUNDQXNnQ0VFSWFpRUREQUVMQWtBZ0NrVU5BQUpBQWtBZ0FDQUFLQUljSWdWQkFuUkJ1TktBZ0FCcUlnTW9BZ0JIRFFBZ0F5QUlOZ0lBSUFnTkFVRUFJQWxCZmlBRmQzRTJBb3pRZ0lBQURBSUxJQXBCRUVFVUlBb29BaEFnQUVZYmFpQUlOZ0lBSUFoRkRRRUxJQWdnQ2pZQ0dBSkFJQUFvQWhBaUEwVU5BQ0FJSUFNMkFoQWdBeUFJTmdJWUN5QUFRUlJxS0FJQUlnTkZEUUFnQ0VFVWFpQUROZ0lBSUFNZ0NEWUNHQXNDUUFKQUlBUkJEMHNOQUNBQUlBUWdBbW9pQTBFRGNqWUNCQ0FBSUFOcUlnTWdBeWdDQkVFQmNqWUNCQXdCQ3lBQUlBSnFJZ1VnQkVFQmNqWUNCQ0FBSUFKQkEzSTJBZ1FnQlNBRWFpQUVOZ0lBQWtBZ0IwVU5BQ0FIUVhoeFFiRFFnSUFBYWlFQ1FRQW9BcHpRZ0lBQUlRTUNRQUpBUVFFZ0IwRURkblFpQ0NBR2NRMEFRUUFnQ0NBR2NqWUNpTkNBZ0FBZ0FpRUlEQUVMSUFJb0FnZ2hDQXNnQ0NBRE5nSU1JQUlnQXpZQ0NDQURJQUkyQWd3Z0F5QUlOZ0lJQzBFQUlBVTJBcHpRZ0lBQVFRQWdCRFlDa05DQWdBQUxJQUJCQ0dvaEF3c2dBVUVRYWlTQWdJQ0FBQ0FEQ3dvQUlBQVF5WUNBZ0FBTDRnMEJCMzhDUUNBQVJRMEFJQUJCZUdvaUFTQUFRWHhxS0FJQUlnSkJlSEVpQUdvaEF3SkFJQUpCQVhFTkFDQUNRUU54UlEwQklBRWdBU2dDQUNJQ2F5SUJRUUFvQXBqUWdJQUFJZ1JKRFFFZ0FpQUFhaUVBQWtBZ0FVRUFLQUtjMElDQUFFWU5BQUpBSUFKQi93RkxEUUFnQVNnQ0NDSUVJQUpCQTNZaUJVRURkRUd3MElDQUFHb2lCa1lhQWtBZ0FTZ0NEQ0lDSUFSSERRQkJBRUVBS0FLSTBJQ0FBRUYrSUFWM2NUWUNpTkNBZ0FBTUF3c2dBaUFHUmhvZ0FpQUVOZ0lJSUFRZ0FqWUNEQXdDQ3lBQktBSVlJUWNDUUFKQUlBRW9BZ3dpQmlBQlJnMEFJQUVvQWdnaUFpQUVTUm9nQmlBQ05nSUlJQUlnQmpZQ0RBd0JDd0pBSUFGQkZHb2lBaWdDQUNJRURRQWdBVUVRYWlJQ0tBSUFJZ1FOQUVFQUlRWU1BUXNEUUNBQ0lRVWdCQ0lHUVJScUlnSW9BZ0FpQkEwQUlBWkJFR29oQWlBR0tBSVFJZ1FOQUFzZ0JVRUFOZ0lBQ3lBSFJRMEJBa0FDUUNBQklBRW9BaHdpQkVFQ2RFRzQwb0NBQUdvaUFpZ0NBRWNOQUNBQ0lBWTJBZ0FnQmcwQlFRQkJBQ2dDak5DQWdBQkJmaUFFZDNFMkFvelFnSUFBREFNTElBZEJFRUVVSUFjb0FoQWdBVVliYWlBR05nSUFJQVpGRFFJTElBWWdCellDR0FKQUlBRW9BaEFpQWtVTkFDQUdJQUkyQWhBZ0FpQUdOZ0lZQ3lBQktBSVVJZ0pGRFFFZ0JrRVVhaUFDTmdJQUlBSWdCallDR0F3QkN5QURLQUlFSWdKQkEzRkJBMGNOQUNBRElBSkJmbkUyQWdSQkFDQUFOZ0tRMElDQUFDQUJJQUJxSUFBMkFnQWdBU0FBUVFGeU5nSUVEd3NnQVNBRFR3MEFJQU1vQWdRaUFrRUJjVVVOQUFKQUFrQWdBa0VDY1EwQUFrQWdBMEVBS0FLZzBJQ0FBRWNOQUVFQUlBRTJBcURRZ0lBQVFRQkJBQ2dDbE5DQWdBQWdBR29pQURZQ2xOQ0FnQUFnQVNBQVFRRnlOZ0lFSUFGQkFDZ0NuTkNBZ0FCSERRTkJBRUVBTmdLUTBJQ0FBRUVBUVFBMkFwelFnSUFBRHdzQ1FDQURRUUFvQXB6UWdJQUFSdzBBUVFBZ0FUWUNuTkNBZ0FCQkFFRUFLQUtRMElDQUFDQUFhaUlBTmdLUTBJQ0FBQ0FCSUFCQkFYSTJBZ1FnQVNBQWFpQUFOZ0lBRHdzZ0FrRjRjU0FBYWlFQUFrQUNRQ0FDUWY4QlN3MEFJQU1vQWdnaUJDQUNRUU4ySWdWQkEzUkJzTkNBZ0FCcUlnWkdHZ0pBSUFNb0Fnd2lBaUFFUncwQVFRQkJBQ2dDaU5DQWdBQkJmaUFGZDNFMkFvalFnSUFBREFJTElBSWdCa1lhSUFJZ0JEWUNDQ0FFSUFJMkFnd01BUXNnQXlnQ0dDRUhBa0FDUUNBREtBSU1JZ1lnQTBZTkFDQURLQUlJSWdKQkFDZ0NtTkNBZ0FCSkdpQUdJQUkyQWdnZ0FpQUdOZ0lNREFFTEFrQWdBMEVVYWlJQ0tBSUFJZ1FOQUNBRFFSQnFJZ0lvQWdBaUJBMEFRUUFoQmd3QkN3TkFJQUloQlNBRUlnWkJGR29pQWlnQ0FDSUVEUUFnQmtFUWFpRUNJQVlvQWhBaUJBMEFDeUFGUVFBMkFnQUxJQWRGRFFBQ1FBSkFJQU1nQXlnQ0hDSUVRUUowUWJqU2dJQUFhaUlDS0FJQVJ3MEFJQUlnQmpZQ0FDQUdEUUZCQUVFQUtBS00wSUNBQUVGK0lBUjNjVFlDak5DQWdBQU1BZ3NnQjBFUVFSUWdCeWdDRUNBRFJodHFJQVkyQWdBZ0JrVU5BUXNnQmlBSE5nSVlBa0FnQXlnQ0VDSUNSUTBBSUFZZ0FqWUNFQ0FDSUFZMkFoZ0xJQU1vQWhRaUFrVU5BQ0FHUVJScUlBSTJBZ0FnQWlBR05nSVlDeUFCSUFCcUlBQTJBZ0FnQVNBQVFRRnlOZ0lFSUFGQkFDZ0NuTkNBZ0FCSERRRkJBQ0FBTmdLUTBJQ0FBQThMSUFNZ0FrRitjVFlDQkNBQklBQnFJQUEyQWdBZ0FTQUFRUUZ5TmdJRUN3SkFJQUJCL3dGTERRQWdBRUY0Y1VHdzBJQ0FBR29oQWdKQUFrQkJBQ2dDaU5DQWdBQWlCRUVCSUFCQkEzWjBJZ0J4RFFCQkFDQUVJQUJ5TmdLSTBJQ0FBQ0FDSVFBTUFRc2dBaWdDQ0NFQUN5QUFJQUUyQWd3Z0FpQUJOZ0lJSUFFZ0FqWUNEQ0FCSUFBMkFnZ1BDMEVmSVFJQ1FDQUFRZi8vL3dkTERRQWdBRUVJZGlJQ0lBSkJnUDQvYWtFUWRrRUljU0lDZENJRUlBUkJnT0FmYWtFUWRrRUVjU0lFZENJR0lBWkJnSUFQYWtFUWRrRUNjU0lHZEVFUGRpQUNJQVJ5SUFaeWF5SUNRUUYwSUFBZ0FrRVZhblpCQVhGeVFSeHFJUUlMSUFFZ0FqWUNIQ0FCUWdBM0FoQWdBa0VDZEVHNDBvQ0FBR29oQkFKQUFrQkJBQ2dDak5DQWdBQWlCa0VCSUFKMElnTnhEUUFnQkNBQk5nSUFRUUFnQmlBRGNqWUNqTkNBZ0FBZ0FTQUVOZ0lZSUFFZ0FUWUNDQ0FCSUFFMkFnd01BUXNnQUVFQVFSa2dBa0VCZG1zZ0FrRWZSaHQwSVFJZ0JDZ0NBQ0VHQWtBRFFDQUdJZ1FvQWdSQmVIRWdBRVlOQVNBQ1FSMTJJUVlnQWtFQmRDRUNJQVFnQmtFRWNXcEJFR29pQXlnQ0FDSUdEUUFMSUFNZ0FUWUNBQ0FCSUFRMkFoZ2dBU0FCTmdJTUlBRWdBVFlDQ0F3QkN5QUVLQUlJSWdBZ0FUWUNEQ0FFSUFFMkFnZ2dBVUVBTmdJWUlBRWdCRFlDRENBQklBQTJBZ2dMUVFCQkFDZ0NxTkNBZ0FCQmYyb2lBVUYvSUFFYk5nS28wSUNBQUFzTEJBQUFBQXRPQUFKQUlBQU5BRDhBUVJCMER3c0NRQ0FBUWYvL0EzRU5BQ0FBUVg5TURRQUNRQ0FBUVJCMlFBQWlBRUYvUncwQVFRQkJNRFlDK05PQWdBQkJmdzhMSUFCQkVIUVBDeERLZ0lDQUFBQUw4Z0lDQTM4QmZnSkFJQUpGRFFBZ0FDQUJPZ0FBSUFJZ0FHb2lBMEYvYWlBQk9nQUFJQUpCQTBrTkFDQUFJQUU2QUFJZ0FDQUJPZ0FCSUFOQmZXb2dBVG9BQUNBRFFYNXFJQUU2QUFBZ0FrRUhTUTBBSUFBZ0FUb0FBeUFEUVh4cUlBRTZBQUFnQWtFSlNRMEFJQUJCQUNBQWEwRURjU0lFYWlJRElBRkIvd0Z4UVlHQ2hBaHNJZ0UyQWdBZ0F5QUNJQVJyUVh4eElnUnFJZ0pCZkdvZ0FUWUNBQ0FFUVFsSkRRQWdBeUFCTmdJSUlBTWdBVFlDQkNBQ1FYaHFJQUUyQWdBZ0FrRjBhaUFCTmdJQUlBUkJHVWtOQUNBRElBRTJBaGdnQXlBQk5nSVVJQU1nQVRZQ0VDQURJQUUyQWd3Z0FrRndhaUFCTmdJQUlBSkJiR29nQVRZQ0FDQUNRV2hxSUFFMkFnQWdBa0ZrYWlBQk5nSUFJQVFnQTBFRWNVRVljaUlGYXlJQ1FTQkpEUUFnQWExQ2dZQ0FnQkIrSVFZZ0F5QUZhaUVCQTBBZ0FTQUdOd01ZSUFFZ0JqY0RFQ0FCSUFZM0F3Z2dBU0FHTndNQUlBRkJJR29oQVNBQ1FXQnFJZ0pCSDBzTkFBc0xJQUFMQzQ1SUFRQkJnQWdMaGtnQkFBQUFBZ0FBQUFNQUFBQUFBQUFBQUFBQUFBUUFBQUFGQUFBQUFBQUFBQUFBQUFBR0FBQUFCd0FBQUFnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFbHVkbUZzYVdRZ1kyaGhjaUJwYmlCMWNtd2djWFZsY25rQVUzQmhiaUJqWVd4c1ltRmpheUJsY25KdmNpQnBiaUJ2Ymw5aWIyUjVBRU52Ym5SbGJuUXRUR1Z1WjNSb0lHOTJaWEptYkc5M0FFTm9kVzVySUhOcGVtVWdiM1psY21ac2IzY0FVbVZ6Y0c5dWMyVWdiM1psY21ac2IzY0FTVzUyWVd4cFpDQnRaWFJvYjJRZ1ptOXlJRWhVVkZBdmVDNTRJSEpsY1hWbGMzUUFTVzUyWVd4cFpDQnRaWFJvYjJRZ1ptOXlJRkpVVTFBdmVDNTRJSEpsY1hWbGMzUUFSWGh3WldOMFpXUWdVMDlWVWtORklHMWxkR2h2WkNCbWIzSWdTVU5GTDNndWVDQnlaWEYxWlhOMEFFbHVkbUZzYVdRZ1kyaGhjaUJwYmlCMWNtd2dabkpoWjIxbGJuUWdjM1JoY25RQVJYaHdaV04wWldRZ1pHOTBBRk53WVc0Z1kyRnNiR0poWTJzZ1pYSnliM0lnYVc0Z2IyNWZjM1JoZEhWekFFbHVkbUZzYVdRZ2NtVnpjRzl1YzJVZ2MzUmhkSFZ6QUVsdWRtRnNhV1FnWTJoaGNtRmpkR1Z5SUdsdUlHTm9kVzVySUdWNGRHVnVjMmx2Ym5NQVZYTmxjaUJqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmY21WelpYUmdJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDlqYUhWdWExOW9aV0ZrWlhKZ0lHTmhiR3hpWVdOcklHVnljbTl5QUdCdmJsOXRaWE56WVdkbFgySmxaMmx1WUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZlkyaDFibXRmWlhoMFpXNXphVzl1WDNaaGJIVmxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmYzNSaGRIVnpYMk52YlhCc1pYUmxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmZG1WeWMybHZibDlqYjIxd2JHVjBaV0FnWTJGc2JHSmhZMnNnWlhKeWIzSUFZRzl1WDNWeWJGOWpiMjF3YkdWMFpXQWdZMkZzYkdKaFkyc2daWEp5YjNJQVlHOXVYMk5vZFc1clgyTnZiWEJzWlhSbFlDQmpZV3hzWW1GamF5Qmxjbkp2Y2dCZ2IyNWZhR1ZoWkdWeVgzWmhiSFZsWDJOdmJYQnNaWFJsWUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZmJXVnpjMkZuWlY5amIyMXdiR1YwWldBZ1kyRnNiR0poWTJzZ1pYSnliM0lBWUc5dVgyMWxkR2h2WkY5amIyMXdiR1YwWldBZ1kyRnNiR0poWTJzZ1pYSnliM0lBWUc5dVgyaGxZV1JsY2w5bWFXVnNaRjlqYjIxd2JHVjBaV0FnWTJGc2JHSmhZMnNnWlhKeWIzSUFZRzl1WDJOb2RXNXJYMlY0ZEdWdWMybHZibDl1WVcxbFlDQmpZV3hzWW1GamF5Qmxjbkp2Y2dCVmJtVjRjR1ZqZEdWa0lHTm9ZWElnYVc0Z2RYSnNJSE5sY25abGNnQkpiblpoYkdsa0lHaGxZV1JsY2lCMllXeDFaU0JqYUdGeUFFbHVkbUZzYVdRZ2FHVmhaR1Z5SUdacFpXeGtJR05vWVhJQVUzQmhiaUJqWVd4c1ltRmpheUJsY25KdmNpQnBiaUJ2Ymw5MlpYSnphVzl1QUVsdWRtRnNhV1FnYldsdWIzSWdkbVZ5YzJsdmJnQkpiblpoYkdsa0lHMWhhbTl5SUhabGNuTnBiMjRBUlhod1pXTjBaV1FnYzNCaFkyVWdZV1owWlhJZ2RtVnljMmx2YmdCRmVIQmxZM1JsWkNCRFVreEdJR0ZtZEdWeUlIWmxjbk5wYjI0QVNXNTJZV3hwWkNCSVZGUlFJSFpsY25OcGIyNEFTVzUyWVd4cFpDQm9aV0ZrWlhJZ2RHOXJaVzRBVTNCaGJpQmpZV3hzWW1GamF5Qmxjbkp2Y2lCcGJpQnZibDkxY213QVNXNTJZV3hwWkNCamFHRnlZV04wWlhKeklHbHVJSFZ5YkFCVmJtVjRjR1ZqZEdWa0lITjBZWEowSUdOb1lYSWdhVzRnZFhKc0FFUnZkV0pzWlNCQUlHbHVJSFZ5YkFCRmJYQjBlU0JEYjI1MFpXNTBMVXhsYm1kMGFBQkpiblpoYkdsa0lHTm9ZWEpoWTNSbGNpQnBiaUJEYjI1MFpXNTBMVXhsYm1kMGFBQkVkWEJzYVdOaGRHVWdRMjl1ZEdWdWRDMU1aVzVuZEdnQVNXNTJZV3hwWkNCamFHRnlJR2x1SUhWeWJDQndZWFJvQUVOdmJuUmxiblF0VEdWdVozUm9JR05oYmlkMElHSmxJSEJ5WlhObGJuUWdkMmwwYUNCVWNtRnVjMlpsY2kxRmJtTnZaR2x1WndCSmJuWmhiR2xrSUdOb1lYSmhZM1JsY2lCcGJpQmphSFZ1YXlCemFYcGxBRk53WVc0Z1kyRnNiR0poWTJzZ1pYSnliM0lnYVc0Z2IyNWZhR1ZoWkdWeVgzWmhiSFZsQUZOd1lXNGdZMkZzYkdKaFkyc2daWEp5YjNJZ2FXNGdiMjVmWTJoMWJtdGZaWGgwWlc1emFXOXVYM1poYkhWbEFFbHVkbUZzYVdRZ1kyaGhjbUZqZEdWeUlHbHVJR05vZFc1cklHVjRkR1Z1YzJsdmJuTWdkbUZzZFdVQVRXbHpjMmx1WnlCbGVIQmxZM1JsWkNCTVJpQmhablJsY2lCb1pXRmtaWElnZG1Gc2RXVUFTVzUyWVd4cFpDQmdWSEpoYm5ObVpYSXRSVzVqYjJScGJtZGdJR2hsWVdSbGNpQjJZV3gxWlFCSmJuWmhiR2xrSUdOb1lYSmhZM1JsY2lCcGJpQmphSFZ1YXlCbGVIUmxibk5wYjI1eklIRjFiM1JsSUhaaGJIVmxBRWx1ZG1Gc2FXUWdZMmhoY21GamRHVnlJR2x1SUdOb2RXNXJJR1Y0ZEdWdWMybHZibk1nY1hWdmRHVmtJSFpoYkhWbEFGQmhkWE5sWkNCaWVTQnZibDlvWldGa1pYSnpYMk52YlhCc1pYUmxBRWx1ZG1Gc2FXUWdSVTlHSUhOMFlYUmxBRzl1WDNKbGMyVjBJSEJoZFhObEFHOXVYMk5vZFc1clgyaGxZV1JsY2lCd1lYVnpaUUJ2Ymw5dFpYTnpZV2RsWDJKbFoybHVJSEJoZFhObEFHOXVYMk5vZFc1clgyVjRkR1Z1YzJsdmJsOTJZV3gxWlNCd1lYVnpaUUJ2Ymw5emRHRjBkWE5mWTI5dGNHeGxkR1VnY0dGMWMyVUFiMjVmZG1WeWMybHZibDlqYjIxd2JHVjBaU0J3WVhWelpRQnZibDkxY214ZlkyOXRjR3hsZEdVZ2NHRjFjMlVBYjI1ZlkyaDFibXRmWTI5dGNHeGxkR1VnY0dGMWMyVUFiMjVmYUdWaFpHVnlYM1poYkhWbFgyTnZiWEJzWlhSbElIQmhkWE5sQUc5dVgyMWxjM05oWjJWZlkyOXRjR3hsZEdVZ2NHRjFjMlVBYjI1ZmJXVjBhRzlrWDJOdmJYQnNaWFJsSUhCaGRYTmxBRzl1WDJobFlXUmxjbDltYVdWc1pGOWpiMjF3YkdWMFpTQndZWFZ6WlFCdmJsOWphSFZ1YTE5bGVIUmxibk5wYjI1ZmJtRnRaU0J3WVhWelpRQlZibVY0Y0dWamRHVmtJSE53WVdObElHRm1kR1Z5SUhOMFlYSjBJR3hwYm1VQVUzQmhiaUJqWVd4c1ltRmpheUJsY25KdmNpQnBiaUJ2Ymw5amFIVnVhMTlsZUhSbGJuTnBiMjVmYm1GdFpRQkpiblpoYkdsa0lHTm9ZWEpoWTNSbGNpQnBiaUJqYUhWdWF5QmxlSFJsYm5OcGIyNXpJRzVoYldVQVVHRjFjMlVnYjI0Z1EwOU9Ua1ZEVkM5VmNHZHlZV1JsQUZCaGRYTmxJRzl1SUZCU1NTOVZjR2R5WVdSbEFFVjRjR1ZqZEdWa0lFaFVWRkF2TWlCRGIyNXVaV04wYVc5dUlGQnlaV1poWTJVQVUzQmhiaUJqWVd4c1ltRmpheUJsY25KdmNpQnBiaUJ2Ymw5dFpYUm9iMlFBUlhod1pXTjBaV1FnYzNCaFkyVWdZV1owWlhJZ2JXVjBhRzlrQUZOd1lXNGdZMkZzYkdKaFkyc2daWEp5YjNJZ2FXNGdiMjVmYUdWaFpHVnlYMlpwWld4a0FGQmhkWE5sWkFCSmJuWmhiR2xrSUhkdmNtUWdaVzVqYjNWdWRHVnlaV1FBU1c1MllXeHBaQ0J0WlhSb2IyUWdaVzVqYjNWdWRHVnlaV1FBVlc1bGVIQmxZM1JsWkNCamFHRnlJR2x1SUhWeWJDQnpZMmhsYldFQVVtVnhkV1Z6ZENCb1lYTWdhVzUyWVd4cFpDQmdWSEpoYm5ObVpYSXRSVzVqYjJScGJtZGdBRk5YU1ZSRFNGOVFVazlZV1FCVlUwVmZVRkpQV0ZrQVRVdEJRMVJKVmtsVVdRQlZUbEJTVDBORlUxTkJRa3hGWDBWT1ZFbFVXUUJEVDFCWkFFMVBWa1ZFWDFCRlVrMUJUa1ZPVkV4WkFGUlBUMTlGUVZKTVdRQk9UMVJKUmxrQVJrRkpURVZFWDBSRlVFVk9SRVZPUTFrQVFrRkVYMGRCVkVWWFFWa0FVRXhCV1FCUVZWUUFRMGhGUTB0UFZWUUFSMEZVUlZkQldWOVVTVTFGVDFWVUFGSkZVVlZGVTFSZlZFbE5SVTlWVkFCT1JWUlhUMUpMWDBOUFRrNUZRMVJmVkVsTlJVOVZWQUJEVDA1T1JVTlVTVTlPWDFSSlRVVlBWVlFBVEU5SFNVNWZWRWxOUlU5VlZBQk9SVlJYVDFKTFgxSkZRVVJmVkVsTlJVOVZWQUJRVDFOVUFFMUpVMFJKVWtWRFZFVkVYMUpGVVZWRlUxUUFRMHhKUlU1VVgwTk1UMU5GUkY5U1JWRlZSVk5VQUVOTVNVVk9WRjlEVEU5VFJVUmZURTlCUkY5Q1FVeEJUa05GUkY5U1JWRlZSVk5VQUVKQlJGOVNSVkZWUlZOVUFFaFVWRkJmVWtWUlZVVlRWRjlUUlU1VVgxUlBYMGhVVkZCVFgxQlBVbFFBVWtWUVQxSlVBRWxOWDBGZlZFVkJVRTlVQUZKRlUwVlVYME5QVGxSRlRsUUFUazlmUTA5T1ZFVk9WQUJRUVZKVVNVRk1YME5QVGxSRlRsUUFTRkJGWDBsT1ZrRk1TVVJmUTA5T1UxUkJUbFFBU0ZCRlgwTkNYMUpGVTBWVUFFZEZWQUJJVUVWZlUxUlNTVU5VQUVOUFRrWk1TVU5VQUZSRlRWQlBVa0ZTV1Y5U1JVUkpVa1ZEVkFCUVJWSk5RVTVGVGxSZlVrVkVTVkpGUTFRQVEwOU9Ua1ZEVkFCTlZVeFVTVjlUVkVGVVZWTUFTRkJGWDBsT1ZrRk1TVVJmVTFSQlZGVlRBRlJQVDE5TlFVNVpYMUpGVVZWRlUxUlRBRVZCVWt4WlgwaEpUbFJUQUZWT1FWWkJTVXhCUWt4RlgwWlBVbDlNUlVkQlRGOVNSVUZUVDA1VEFFOVFWRWxQVGxNQVUxZEpWRU5JU1U1SFgxQlNUMVJQUTA5TVV3QldRVkpKUVU1VVgwRk1VMDlmVGtWSFQxUkpRVlJGVXdCTlZVeFVTVkJNUlY5RFNFOUpRMFZUQUVsT1ZFVlNUa0ZNWDFORlVsWkZVbDlGVWxKUFVnQlhSVUpmVTBWU1ZrVlNYMVZPUzA1UFYwNWZSVkpTVDFJQVVrRkpURWRWVGw5RlVsSlBVZ0JKUkVWT1ZFbFVXVjlRVWs5V1NVUkZVbDlCVlZSSVJVNVVTVU5CVkVsUFRsOUZVbEpQVWdCVFUweGZRMFZTVkVsR1NVTkJWRVZmUlZKU1QxSUFTVTVXUVV4SlJGOVlYMFpQVWxkQlVrUkZSRjlHVDFJQVUwVlVYMUJCVWtGTlJWUkZVZ0JIUlZSZlVFRlNRVTFGVkVWU0FFaFFSVjlWVTBWU0FGTkZSVjlQVkVoRlVnQklVRVZmUTBKZlEwaFZUa3RmU0VWQlJFVlNBRTFMUTBGTVJVNUVRVklBVTBWVVZWQUFWMFZDWDFORlVsWkZVbDlKVTE5RVQxZE9BRlJGUVZKRVQxZE9BRWhRUlY5RFRFOVRSVVJmUTA5T1RrVkRWRWxQVGdCSVJWVlNTVk5VU1VOZlJWaFFTVkpCVkVsUFRnQkVTVk5EVDA1T1JVTlVSVVJmVDFCRlVrRlVTVTlPQUU1UFRsOUJWVlJJVDFKSlZFRlVTVlpGWDBsT1JrOVNUVUZVU1U5T0FFaFFSVjlKVGxaQlRFbEVYMVpGVWxOSlQwNEFTRkJGWDBOQ1gwMUZVMU5CUjBWZlFrVkhTVTRBVTBsVVJWOUpVMTlHVWs5YVJVNEFTRkJGWDBsT1ZrRk1TVVJmU0VWQlJFVlNYMVJQUzBWT0FFbE9Wa0ZNU1VSZlZFOUxSVTRBUms5U1FrbEVSRVZPQUVWT1NFRk9RMFZmV1U5VlVsOURRVXhOQUVoUVJWOUpUbFpCVEVsRVgxVlNUQUJDVEU5RFMwVkVYMEpaWDFCQlVrVk9WRUZNWDBOUFRsUlNUMHdBVFV0RFQwd0FRVU5NQUVoUVJWOUpUbFJGVWs1QlRBQlNSVkZWUlZOVVgwaEZRVVJGVWw5R1NVVk1SRk5mVkU5UFgweEJVa2RGWDFWT1QwWkdTVU5KUVV3QVNGQkZYMDlMQUZWT1RFbE9Td0JWVGt4UFEwc0FVRkpKQUZKRlZGSlpYMWRKVkVnQVNGQkZYMGxPVmtGTVNVUmZRMDlPVkVWT1ZGOU1SVTVIVkVnQVNGQkZYMVZPUlZoUVJVTlVSVVJmUTA5T1ZFVk9WRjlNUlU1SFZFZ0FSa3hWVTBnQVVGSlBVRkJCVkVOSUFFMHRVMFZCVWtOSUFGVlNTVjlVVDA5ZlRFOU9Sd0JRVWs5RFJWTlRTVTVIQUUxSlUwTkZURXhCVGtWUFZWTmZVRVZTVTBsVFZFVk9WRjlYUVZKT1NVNUhBRTFKVTBORlRFeEJUa1ZQVlZOZlYwRlNUa2xPUndCSVVFVmZTVTVXUVV4SlJGOVVVa0ZPVTBaRlVsOUZUa05QUkVsT1J3QkZlSEJsWTNSbFpDQkRVa3hHQUVoUVJWOUpUbFpCVEVsRVgwTklWVTVMWDFOSldrVUFUVTlXUlFCRFQwNVVTVTVWUlFCSVVFVmZRMEpmVTFSQlZGVlRYME5QVFZCTVJWUkZBRWhRUlY5RFFsOUlSVUZFUlZKVFgwTlBUVkJNUlZSRkFFaFFSVjlEUWw5V1JWSlRTVTlPWDBOUFRWQk1SVlJGQUVoUVJWOURRbDlWVWt4ZlEwOU5VRXhGVkVVQVNGQkZYME5DWDBOSVZVNUxYME5QVFZCTVJWUkZBRWhRUlY5RFFsOUlSVUZFUlZKZlZrRk1WVVZmUTA5TlVFeEZWRVVBU0ZCRlgwTkNYME5JVlU1TFgwVllWRVZPVTBsUFRsOVdRVXhWUlY5RFQwMVFURVZVUlFCSVVFVmZRMEpmUTBoVlRrdGZSVmhVUlU1VFNVOU9YMDVCVFVWZlEwOU5VRXhGVkVVQVNGQkZYME5DWDAxRlUxTkJSMFZmUTA5TlVFeEZWRVVBU0ZCRlgwTkNYMDFGVkVoUFJGOURUMDFRVEVWVVJRQklVRVZmUTBKZlNFVkJSRVZTWDBaSlJVeEVYME5QVFZCTVJWUkZBRVJGVEVWVVJRQklVRVZmU1U1V1FVeEpSRjlGVDBaZlUxUkJWRVVBU1U1V1FVeEpSRjlUVTB4ZlEwVlNWRWxHU1VOQlZFVUFVRUZWVTBVQVRrOWZVa1ZUVUU5T1UwVUFWVTVUVlZCUVQxSlVSVVJmVFVWRVNVRmZWRmxRUlFCSFQwNUZBRTVQVkY5QlEwTkZVRlJCUWt4RkFGTkZVbFpKUTBWZlZVNUJWa0ZKVEVGQ1RFVUFVa0ZPUjBWZlRrOVVYMU5CVkVsVFJrbEJRa3hGQUU5U1NVZEpUbDlKVTE5VlRsSkZRVU5JUVVKTVJRQlNSVk5RVDA1VFJWOUpVMTlUVkVGTVJRQlFWVkpIUlFCTlJWSkhSUUJTUlZGVlJWTlVYMGhGUVVSRlVsOUdTVVZNUkZOZlZFOVBYMHhCVWtkRkFGSkZVVlZGVTFSZlNFVkJSRVZTWDFSUFQxOU1RVkpIUlFCUVFWbE1UMEZFWDFSUFQxOU1RVkpIUlFCSlRsTlZSa1pKUTBsRlRsUmZVMVJQVWtGSFJRQklVRVZmVUVGVlUwVkVYMVZRUjFKQlJFVUFTRkJGWDFCQlZWTkZSRjlJTWw5VlVFZFNRVVJGQUZOUFZWSkRSUUJCVGs1UFZVNURSUUJVVWtGRFJRQklVRVZmVlU1RldGQkZRMVJGUkY5VFVFRkRSUUJFUlZORFVrbENSUUJWVGxOVlFsTkRVa2xDUlFCU1JVTlBVa1FBU0ZCRlgwbE9Wa0ZNU1VSZlRVVlVTRTlFQUU1UFZGOUdUMVZPUkFCUVVrOVFSa2xPUkFCVlRrSkpUa1FBVWtWQ1NVNUVBRlZPUVZWVVNFOVNTVnBGUkFCTlJWUklUMFJmVGs5VVgwRk1URTlYUlVRQVNGUlVVRjlXUlZKVFNVOU9YMDVQVkY5VFZWQlFUMUpVUlVRQVFVeFNSVUZFV1Y5U1JWQlBVbFJGUkFCQlEwTkZVRlJGUkFCT1QxUmZTVTFRVEVWTlJVNVVSVVFBVEU5UFVGOUVSVlJGUTFSRlJBQklVRVZmUTFKZlJWaFFSVU5VUlVRQVNGQkZYMHhHWDBWWVVFVkRWRVZFQUVOU1JVRlVSVVFBU1UxZlZWTkZSQUJJVUVWZlVFRlZVMFZFQUZSSlRVVlBWVlJmVDBORFZWSkZSQUJRUVZsTlJVNVVYMUpGVVZWSlVrVkVBRkJTUlVOUFRrUkpWRWxQVGw5U1JWRlZTVkpGUkFCUVVrOVlXVjlCVlZSSVJVNVVTVU5CVkVsUFRsOVNSVkZWU1ZKRlJBQk9SVlJYVDFKTFgwRlZWRWhGVGxSSlEwRlVTVTlPWDFKRlVWVkpVa1ZFQUV4RlRrZFVTRjlTUlZGVlNWSkZSQUJUVTB4ZlEwVlNWRWxHU1VOQlZFVmZVa1ZSVlVsU1JVUUFWVkJIVWtGRVJWOVNSVkZWU1ZKRlJBQlFRVWRGWDBWWVVFbFNSVVFBVUZKRlEwOU9SRWxVU1U5T1gwWkJTVXhGUkFCRldGQkZRMVJCVkVsUFRsOUdRVWxNUlVRQVVrVldRVXhKUkVGVVNVOU9YMFpCU1V4RlJBQlRVMHhmU0VGT1JGTklRVXRGWDBaQlNVeEZSQUJNVDBOTFJVUUFWRkpCVGxOR1QxSk5RVlJKVDA1ZlFWQlFURWxGUkFCT1QxUmZUVTlFU1VaSlJVUUFUazlVWDBWWVZFVk9SRVZFQUVKQlRrUlhTVVJVU0Y5TVNVMUpWRjlGV0VORlJVUkZSQUJUU1ZSRlgwbFRYMDlXUlZKTVQwRkVSVVFBU0VWQlJBQkZlSEJsWTNSbFpDQklWRlJRTHdBQVhoTUFBQ1lUQUFBd0VBQUE4QmNBQUowVEFBQVZFZ0FBT1JjQUFQQVNBQUFLRUFBQWRSSUFBSzBTQUFDQ0V3QUFUeFFBQUg4UUFBQ2dGUUFBSXhRQUFJa1NBQUNMRkFBQVRSVUFBTlFSQUFEUEZBQUFFQmdBQU1rV0FBRGNGZ0FBd1JFQUFPQVhBQUM3RkFBQWRCUUFBSHdWQUFEbEZBQUFDQmNBQUI4UUFBQmxGUUFBb3hRQUFDZ1ZBQUFDRlFBQW1SVUFBQ3dRQUFDTEdRQUFUdzhBQU5RT0FBQnFFQUFBemhBQUFBSVhBQUNKRGdBQWJoTUFBQndUQUFCbUZBQUFWaGNBQU1FVEFBRE5Fd0FBYkJNQUFHZ1hBQUJtRndBQVh4Y0FBQ0lUQUFET0R3QUFhUTRBQU5nT0FBQmpGZ0FBeXhNQUFLb09BQUFvRndBQUpoY0FBTVVUQUFCZEZnQUE2QkVBQUdjVEFBQmxFd0FBOGhZQUFITVRBQUFkRndBQStSWUFBUE1SQUFEUERnQUF6aFVBQUF3U0FBQ3pFUUFBcFJFQUFHRVFBQUF5RndBQXV4TUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFRSUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQUFBQUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUlEQWdJQ0FnSUFBQUlDQUFJQ0FBSUNBZ0lDQWdJQ0FnSUFCQUFBQUFBQUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQUFBQUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0FDQUFJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ0FBSUNBZ0lDQUFBQ0FnQUNBZ0FDQWdJQ0FnSUNBZ0lDQUFNQUJBQUFBQUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBQUFBQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQUFnQUNBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBYkc5elpXVmxjQzFoYkdsMlpRQUFBQUFBQUFBQUFBQUFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQUFBQUFBQUFBQUFBQkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVCQVFFQkFRRUJBUUVCQVFJQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJZMmgxYm10bFpBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFFQUFRRUJBUUVBQUFFQkFBRUJBQUVCQVFFQkFRRUJBUUVBQUFBQUFBQUFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBQUFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQkFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJsWTNScGIyNWxiblF0YkdWdVozUm9iMjV5YjNoNUxXTnZibTVsWTNScGIyNEFBQUFBQUFBQUFBQUFBQUFBQUFCeVlXNXpabVZ5TFdWdVkyOWthVzVuY0dkeVlXUmxEUW9OQ2cwS1UwME5DZzBLVkZSUUwwTkZMMVJUVUM4QUFBQUFBQUFBQUFBQUFBQUJBZ0FCQXdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFBQUFBQUFBQUFBQVFJQUFRTUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVBUUVGQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUFBQUFBQUFBQUFBRUFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFQkFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQUFBQUFBQUFBQUFBQVFBQUFnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTUVBQUFFQkFRRUJBUUVCQVFFQkFVRUJBUUVCQVFFQkFRRUJBUUFCQUFHQndRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBRUFBUUFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRUFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUlBQUFBQUFBQURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3QUFBQUFBQUFNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQUFBQkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUFBQUFBQUFBQUFBSUFBQUFBQWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01BQUFBQUFBQURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCT1QxVk9RMFZGUTB0UFZWUk9SVU5VUlZSRlExSkpRa1ZNVlZOSVJWUkZRVVJUUlVGU1EwaFNSMFZEVkVsV1NWUlpURVZPUkVGU1ZrVlBWRWxHV1ZCVVNVOU9VME5JVTBWQldWTlVRVlJEU0VkRlQxSkVTVkpGUTFSUFVsUlNRMGhRUVZKQlRVVlVSVkpWVWtORlFsTkRVa2xDUlVGU1JFOVhUa0ZEUlVsT1JFNUxRMHRWUWxORFVrbENSVWhVVkZBdlFVUlVVQzg9J1xuIiwKICAgICJtb2R1bGUuZXhwb3J0cyA9ICdBR0Z6YlFFQUFBQUJNQWhnQVg4QmYyQURmMzkvQVg5Z0JIOS9mMzhCZjJBQUFHQURmMzkvQUdBQmZ3QmdBbjkvQUdBR2YzOS9mMzkvQUFMTEFRZ0RaVzUyR0hkaGMyMWZiMjVmYUdWaFpHVnljMTlqYjIxd2JHVjBaUUFDQTJWdWRoVjNZWE50WDI5dVgyMWxjM05oWjJWZlltVm5hVzRBQUFObGJuWUxkMkZ6YlY5dmJsOTFjbXdBQVFObGJuWU9kMkZ6YlY5dmJsOXpkR0YwZFhNQUFRTmxibllVZDJGemJWOXZibDlvWldGa1pYSmZabWxsYkdRQUFRTmxibllVZDJGemJWOXZibDlvWldGa1pYSmZkbUZzZFdVQUFRTmxibllNZDJGemJWOXZibDlpYjJSNUFBRURaVzUyR0hkaGMyMWZiMjVmYldWemMyRm5aVjlqYjIxd2JHVjBaUUFBQTBaRkF3TUVBQUFGQUFBQUFBQUFCUUVGQUFVRkJRQUFCZ0FBQUFBR0JnWUdBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBQUFCQVFjQUFBVUZBd0FCQkFVQmNBRVNFZ1VEQVFBQ0JnZ0Jmd0ZCZ05RRUN3ZlJCU0lHYldWdGIzSjVBZ0FMWDJsdWFYUnBZV3hwZW1VQUNSbGZYMmx1WkdseVpXTjBYMloxYm1OMGFXOXVYM1JoWW14bEFRQUxiR3hvZEhSd1gybHVhWFFBQ2hoc2JHaDBkSEJmYzJodmRXeGtYMnRsWlhCZllXeHBkbVVBUVF4c2JHaDBkSEJmWVd4c2IyTUFEQVp0WVd4c2IyTUFSZ3RzYkdoMGRIQmZabkpsWlFBTkJHWnlaV1VBU0E5c2JHaDBkSEJmWjJWMFgzUjVjR1VBRGhWc2JHaDBkSEJmWjJWMFgyaDBkSEJmYldGcWIzSUFEeFZzYkdoMGRIQmZaMlYwWDJoMGRIQmZiV2x1YjNJQUVCRnNiR2gwZEhCZloyVjBYMjFsZEdodlpBQVJGbXhzYUhSMGNGOW5aWFJmYzNSaGRIVnpYMk52WkdVQUVoSnNiR2gwZEhCZloyVjBYM1Z3WjNKaFpHVUFFd3hzYkdoMGRIQmZjbVZ6WlhRQUZBNXNiR2gwZEhCZlpYaGxZM1YwWlFBVkZHeHNhSFIwY0Y5elpYUjBhVzVuYzE5cGJtbDBBQllOYkd4b2RIUndYMlpwYm1semFBQVhER3hzYUhSMGNGOXdZWFZ6WlFBWURXeHNhSFIwY0Y5eVpYTjFiV1VBR1J0c2JHaDBkSEJmY21WemRXMWxYMkZtZEdWeVgzVndaM0poWkdVQUdoQnNiR2gwZEhCZloyVjBYMlZ5Y201dkFCc1hiR3hvZEhSd1gyZGxkRjlsY25KdmNsOXlaV0Z6YjI0QUhCZHNiR2gwZEhCZmMyVjBYMlZ5Y205eVgzSmxZWE52YmdBZEZHeHNhSFIwY0Y5blpYUmZaWEp5YjNKZmNHOXpBQjRSYkd4b2RIUndYMlZ5Y201dlgyNWhiV1VBSHhKc2JHaDBkSEJmYldWMGFHOWtYMjVoYldVQUlCSnNiR2gwZEhCZmMzUmhkSFZ6WDI1aGJXVUFJUnBzYkdoMGRIQmZjMlYwWDJ4bGJtbGxiblJmYUdWaFpHVnljd0FpSVd4c2FIUjBjRjl6WlhSZmJHVnVhV1Z1ZEY5amFIVnVhMlZrWDJ4bGJtZDBhQUFqSFd4c2FIUjBjRjl6WlhSZmJHVnVhV1Z1ZEY5clpXVndYMkZzYVhabEFDUWtiR3hvZEhSd1gzTmxkRjlzWlc1cFpXNTBYM1J5WVc1elptVnlYMlZ1WTI5a2FXNW5BQ1VZYkd4b2RIUndYMjFsYzNOaFoyVmZibVZsWkhOZlpXOW1BRDhKRndFQVFRRUxFUUVDQXdRRkN3WUhOVGszTVM4dEp5c3BDckxnQWtVQ0FBc0lBQkNJZ0lDQUFBc1pBQ0FBRU1LQWdJQUFHaUFBSUFJMkFqZ2dBQ0FCT2dBb0N4d0FJQUFnQUM4Qk1pQUFMUUF1SUFBUXdZQ0FnQUFRZ0lDQWdBQUxLZ0VCZjBIQUFCREdnSUNBQUNJQkVNS0FnSUFBR2lBQlFZQ0lnSUFBTmdJNElBRWdBRG9BS0NBQkN3b0FJQUFReUlDQWdBQUxCd0FnQUMwQUtBc0hBQ0FBTFFBcUN3Y0FJQUF0QUNzTEJ3QWdBQzBBS1FzSEFDQUFMd0V5Q3djQUlBQXRBQzRMUlFFRWZ5QUFLQUlZSVFFZ0FDMEFMU0VDSUFBdEFDZ2hBeUFBS0FJNElRUWdBQkRDZ0lDQUFCb2dBQ0FFTmdJNElBQWdBem9BS0NBQUlBSTZBQzBnQUNBQk5nSVlDeEVBSUFBZ0FTQUJJQUpxRU1PQWdJQUFDeEFBSUFCQkFFSGNBQkRNZ0lDQUFCb0xad0VCZjBFQUlRRUNRQ0FBS0FJTURRQUNRQUpBQWtBQ1FDQUFMUUF2RGdNQkFBTUNDeUFBS0FJNElnRkZEUUFnQVNnQ0xDSUJSUTBBSUFBZ0FSR0FnSUNBQUFBaUFRMERDMEVBRHdzUXlvQ0FnQUFBQ3lBQVFjT1dnSUFBTmdJUVFRNGhBUXNnQVFzZUFBSkFJQUFvQWd3TkFDQUFRZEdiZ0lBQU5nSVFJQUJCRlRZQ0RBc0xGZ0FDUUNBQUtBSU1RUlZIRFFBZ0FFRUFOZ0lNQ3dzV0FBSkFJQUFvQWd4QkZrY05BQ0FBUVFBMkFnd0xDd2NBSUFBb0Fnd0xCd0FnQUNnQ0VBc0pBQ0FBSUFFMkFoQUxCd0FnQUNnQ0ZBc2lBQUpBSUFCQkpFa05BQkRLZ0lDQUFBQUxJQUJCQW5SQm9MT0FnQUJxS0FJQUN5SUFBa0FnQUVFdVNRMEFFTXFBZ0lBQUFBc2dBRUVDZEVHd3RJQ0FBR29vQWdBTDdnc0JBWDlCNjZpQWdBQWhBUUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBSUFCQm5IOXFEdlFEWTJJQUFXRmhZV0ZoWVFJREJBVmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoQmdjSUNRb0xEQTBPRDJGaFlXRmhFR0ZoWVdGaFlXRmhZV0ZoRVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVJJVEZCVVdGeGdaR2h0aFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaEhCMGVIeUFoSWlNa0pTWW5LQ2txS3l3dExpOHdNVEl6TkRVMllUYzRPVHBoWVdGaFlXRmhZVHRoWVdFOFlXRmhZVDArUDJGaFlXRmhZV0ZoUUdGaFFXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZVUpEUkVWR1IwaEpTa3RNVFU1UFVGRlNVMkZoWVdGaFlXRmhWRlZXVjFoWldsdGhYRjFoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGZVlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFgyQmhDMEhocDRDQUFBOExRYVNoZ0lBQUR3dEJ5NnlBZ0FBUEMwSCtzWUNBQUE4TFFjQ2tnSUFBRHd0QnE2U0FnQUFQQzBHTnFJQ0FBQThMUWVLbWdJQUFEd3RCZ0xDQWdBQVBDMEc1cjRDQUFBOExRZGVrZ0lBQUR3dEI3NStBZ0FBUEMwSGhuNENBQUE4TFFmcWZnSUFBRHd0QjhxQ0FnQUFQQzBHb3I0Q0FBQThMUWE2eWdJQUFEd3RCaUxDQWdBQVBDMEhzcDRDQUFBOExRWUtpZ0lBQUR3dEJqcDJBZ0FBUEMwSFFyb0NBQUE4TFFjcWpnSUFBRHd0QnhiS0FnQUFQQzBIZm5JQ0FBQThMUWRLY2dJQUFEd3RCeEtDQWdBQVBDMEhYb0lDQUFBOExRYUtmZ0lBQUR3dEI3YTZBZ0FBUEMwR3JzSUNBQUE4TFFkU2xnSUFBRHd0QnpLNkFnQUFQQzBINnJvQ0FBQThMUWZ5cmdJQUFEd3RCMHJDQWdBQVBDMEh4bllDQUFBOExRYnVnZ0lBQUR3dEI5NnVBZ0FBUEMwR1FzWUNBQUE4TFFkZXhnSUFBRHd0Qm9xMkFnQUFQQzBIVXA0Q0FBQThMUWVDcmdJQUFEd3RCbjZ5QWdBQVBDMEhyc1lDQUFBOExRZFdmZ0lBQUR3dEJ5ckdBZ0FBUEMwSGVwWUNBQUE4TFFkU2VnSUFBRHd0QjlKeUFnQUFQQzBHbnNvQ0FBQThMUWJHZGdJQUFEd3RCb0oyQWdBQVBDMEc1c1lDQUFBOExRYnl3Z0lBQUR3dEJrcUdBZ0FBUEMwR3pwb0NBQUE4TFFlbXNnSUFBRHd0QnJKNkFnQUFQQzBIVXE0Q0FBQThMUWZlbWdJQUFEd3RCZ0thQWdBQVBDMEd3b1lDQUFBOExRZjZlZ0lBQUR3dEJqYU9BZ0FBUEMwR0pyWUNBQUE4TFFmZWlnSUFBRHd0Qm9MR0FnQUFQQzBHdW40Q0FBQThMUWNhbGdJQUFEd3RCNko2QWdBQVBDMEdUb29DQUFBOExRY0t2Z0lBQUR3dEJ3NTJBZ0FBUEMwR0xySUNBQUE4TFFlR2RnSUFBRHd0QmphK0FnQUFQQzBIcW9ZQ0FBQThMUWJTdGdJQUFEd3RCMHErQWdBQVBDMEhmc29DQUFBOExRZEt5Z0lBQUR3dEI4TENBZ0FBUEMwR3Bvb0NBQUE4TFFmbWpnSUFBRHd0Qm1aNkFnQUFQQzBHMXJJQ0FBQThMUVp1d2dJQUFEd3RCa3JLQWdBQVBDMEcycTRDQUFBOExRY0tpZ0lBQUR3dEIrTEtBZ0FBUEMwR2VwWUNBQUE4TFFkQ2lnSUFBRHd0QnVwNkFnQUFQQzBHQm5vQ0FBQThMRU1xQWdJQUFBQXRCMXFHQWdBQWhBUXNnQVFzV0FDQUFJQUF0QUMxQi9nRnhJQUZCQUVkeU9nQXRDeGtBSUFBZ0FDMEFMVUg5QVhFZ0FVRUFSMEVCZEhJNkFDMExHUUFnQUNBQUxRQXRRZnNCY1NBQlFRQkhRUUowY2pvQUxRc1pBQ0FBSUFBdEFDMUI5d0Z4SUFGQkFFZEJBM1J5T2dBdEN5NEJBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWdBaUJFVU5BQ0FBSUFRUmdJQ0FnQUFBSVFNTElBTUxTUUVDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ0JDSUVSUTBBSUFBZ0FTQUNJQUZySUFRUmdZQ0FnQUFBSWdOQmYwY05BQ0FBUWNhUmdJQUFOZ0lRUVJnaEF3c2dBd3N1QVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSXdJZ1JGRFFBZ0FDQUVFWUNBZ0lBQUFDRURDeUFEQzBrQkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9BZ2dpQkVVTkFDQUFJQUVnQWlBQmF5QUVFWUdBZ0lBQUFDSURRWDlIRFFBZ0FFSDJpb0NBQURZQ0VFRVlJUU1MSUFNTExnRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDTkNJRVJRMEFJQUFnQkJHQWdJQ0FBQUFoQXdzZ0F3dEpBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FJTUlnUkZEUUFnQUNBQklBSWdBV3NnQkJHQmdJQ0FBQUFpQTBGL1J3MEFJQUJCN1pxQWdBQTJBaEJCR0NFREN5QURDeTRCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FqZ2lCRVVOQUNBQUlBUVJnSUNBZ0FBQUlRTUxJQU1MU1FFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NFQ0lFUlEwQUlBQWdBU0FDSUFGcklBUVJnWUNBZ0FBQUlnTkJmMGNOQUNBQVFaV1FnSUFBTmdJUVFSZ2hBd3NnQXdzdUFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUk4SWdSRkRRQWdBQ0FFRVlDQWdJQUFBQ0VEQ3lBREMwa0JBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWhRaUJFVU5BQ0FBSUFFZ0FpQUJheUFFRVlHQWdJQUFBQ0lEUVg5SERRQWdBRUdxbTRDQUFEWUNFRUVZSVFNTElBTUxMZ0VDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ1FDSUVSUTBBSUFBZ0JCR0FnSUNBQUFBaEF3c2dBd3RKQVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSVlJZ1JGRFFBZ0FDQUJJQUlnQVdzZ0JCR0JnSUNBQUFBaUEwRi9SdzBBSUFCQjdaT0FnQUEyQWhCQkdDRURDeUFEQ3k0QkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9Ba1FpQkVVTkFDQUFJQVFSZ0lDQWdBQUFJUU1MSUFNTExnRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDSkNJRVJRMEFJQUFnQkJHQWdJQ0FBQUFoQXdzZ0F3c3VBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FJc0lnUkZEUUFnQUNBRUVZQ0FnSUFBQUNFREN5QURDMGtCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FpZ2lCRVVOQUNBQUlBRWdBaUFCYXlBRUVZR0FnSUFBQUNJRFFYOUhEUUFnQUVIMmlJQ0FBRFlDRUVFWUlRTUxJQU1MTGdFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NVQ0lFUlEwQUlBQWdCQkdBZ0lDQUFBQWhBd3NnQXd0SkFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUljSWdSRkRRQWdBQ0FCSUFJZ0FXc2dCQkdCZ0lDQUFBQWlBMEYvUncwQUlBQkJ3cG1BZ0FBMkFoQkJHQ0VEQ3lBREN5NEJBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWtnaUJFVU5BQ0FBSUFRUmdJQ0FnQUFBSVFNTElBTUxTUUVDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ0lDSUVSUTBBSUFBZ0FTQUNJQUZySUFRUmdZQ0FnQUFBSWdOQmYwY05BQ0FBUVpTVWdJQUFOZ0lRUVJnaEF3c2dBd3N1QVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSk1JZ1JGRFFBZ0FDQUVFWUNBZ0lBQUFDRURDeUFEQ3k0QkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9BbFFpQkVVTkFDQUFJQVFSZ0lDQWdBQUFJUU1MSUFNTExnRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDV0NJRVJRMEFJQUFnQkJHQWdJQ0FBQUFoQXdzZ0F3dEZBUUYvQWtBQ1FDQUFMd0V3UVJSeFFSUkhEUUJCQVNFRElBQXRBQ2hCQVVZTkFTQUFMd0V5UWVVQVJpRUREQUVMSUFBdEFDbEJCVVloQXdzZ0FDQURPZ0F1UVFBTC9nRUJBMzlCQVNFREFrQWdBQzhCTUNJRVFRaHhEUUFnQUNrRElFSUFVaUVEQ3dKQUFrQWdBQzBBTGtVTkFFRUJJUVVnQUMwQUtVRUZSZzBCUVFFaEJTQUVRY0FBY1VVZ0EzRkJBVWNOQVF0QkFDRUZJQVJCd0FCeERRQkJBaUVGSUFSQi8vOERjU0lEUVFoeERRQUNRQ0FEUVlBRWNVVU5BQUpBSUFBdEFDaEJBVWNOQUNBQUxRQXRRUXB4RFFCQkJROExRUVFQQ3dKQUlBTkJJSEVOQUFKQUlBQXRBQ2hCQVVZTkFDQUFMd0V5UWYvL0EzRWlBRUdjZjJwQjVBQkpEUUFnQUVITUFVWU5BQ0FBUWJBQ1JnMEFRUVFoQlNBRVFTaHhSUTBDSUFOQmlBUnhRWUFFUmcwQ0MwRUFEd3RCQUVFRElBQXBBeUJRR3lFRkN5QUZDMklCQW45QkFDRUJBa0FnQUMwQUtFRUJSZzBBSUFBdkFUSkIvLzhEY1NJQ1FaeC9ha0hrQUVrTkFDQUNRY3dCUmcwQUlBSkJzQUpHRFFBZ0FDOEJNQ0lBUWNBQWNRMEFRUUVoQVNBQVFZZ0VjVUdBQkVZTkFDQUFRU2h4UlNFQkN5QUJDNmNCQVFOL0FrQUNRQUpBSUFBdEFDcEZEUUFnQUMwQUswVU5BRUVBSVFNZ0FDOEJNQ0lFUVFKeFJRMEJEQUlMUVFBaEF5QUFMd0V3SWdSQkFYRkZEUUVMUVFFaEF5QUFMUUFvUVFGR0RRQWdBQzhCTWtILy93TnhJZ1ZCbkg5cVFlUUFTUTBBSUFWQnpBRkdEUUFnQlVHd0FrWU5BQ0FFUWNBQWNRMEFRUUFoQXlBRVFZZ0VjVUdBQkVZTkFDQUVRU2h4UVFCSElRTUxJQUJCQURzQk1DQUFRUUE2QUM4Z0F3dVpBUUVDZndKQUFrQUNRQ0FBTFFBcVJRMEFJQUF0QUN0RkRRQkJBQ0VCSUFBdkFUQWlBa0VDY1VVTkFRd0NDMEVBSVFFZ0FDOEJNQ0lDUVFGeFJRMEJDMEVCSVFFZ0FDMEFLRUVCUmcwQUlBQXZBVEpCLy84RGNTSUFRWngvYWtIa0FFa05BQ0FBUWN3QlJnMEFJQUJCc0FKR0RRQWdBa0hBQUhFTkFFRUFJUUVnQWtHSUJIRkJnQVJHRFFBZ0FrRW9jVUVBUnlFQkN5QUJDMGtCQVhzZ0FFRVFhdjBNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ0lCL1FzREFDQUFJQUg5Q3dNQUlBQkJNR29nQWYwTEF3QWdBRUVnYWlBQi9Rc0RBQ0FBUWQwQk5nSWNRUUFMZXdFQmZ3SkFJQUFvQWd3aUF3MEFBa0FnQUNnQ0JFVU5BQ0FBSUFFMkFnUUxBa0FnQUNBQklBSVF4SUNBZ0FBaUF3MEFJQUFvQWd3UEN5QUFJQU0yQWh4QkFDRURJQUFvQWdRaUFVVU5BQ0FBSUFFZ0FpQUFLQUlJRVlHQWdJQUFBQ0lCUlEwQUlBQWdBallDRkNBQUlBRTJBZ3dnQVNFREN5QURDK1R6QVFNT2Z3TitCSDhqZ0lDQWdBQkJFR3NpQXlTQWdJQ0FBQ0FCSVFRZ0FTRUZJQUVoQmlBQklRY2dBU0VJSUFFaENTQUJJUW9nQVNFTElBRWhEQ0FCSVEwZ0FTRU9JQUVoRHdKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUNBQUtBSWNJaEJCZjJvTzNRSGFBUUhaQVFJREJBVUdCd2dKQ2dzTURRN1lBUThRMXdFUkV0WUJFeFFWRmhjWUdSb2I0QUhmQVJ3ZEh0VUJIeUFoSWlNa0pkUUJKaWNvS1NvckxOTUIwZ0V0THRFQjBBRXZNREV5TXpRMU5qYzRPVG83UEQwK1AwQkJRa05FUlViYkFVZElTVXJQQWM0QlM4MEJUTXdCVFU1UFVGRlNVMVJWVmxkWVdWcGJYRjFlWDJCaFltTmtaV1puYUdscWEyeHRibTl3Y1hKemRIVjJkM2g1ZW50OGZYNS9nQUdCQVlJQmd3R0VBWVVCaGdHSEFZZ0JpUUdLQVlzQmpBR05BWTRCandHUUFaRUJrZ0dUQVpRQmxRR1dBWmNCbUFHWkFab0Jtd0djQVowQm5nR2ZBYUFCb1FHaUFhTUJwQUdsQWFZQnB3R29BYWtCcWdHckFhd0JyUUd1QWE4QnNBR3hBYklCc3dHMEFiVUJ0Z0czQWNzQnlnRzRBY2tCdVFISUFib0J1d0c4QWIwQnZnRy9BY0FCd1FIQ0FjTUJ4QUhGQWNZQkFOd0JDMEVBSVJBTXhnRUxRUTRoRUF6RkFRdEJEU0VRRE1RQkMwRVBJUkFNd3dFTFFSQWhFQXpDQVF0QkV5RVFETUVCQzBFVUlSQU13QUVMUVJVaEVBeS9BUXRCRmlFUURMNEJDMEVYSVJBTXZRRUxRUmdoRUF5OEFRdEJHU0VRRExzQkMwRWFJUkFNdWdFTFFSc2hFQXk1QVF0QkhDRVFETGdCQzBFSUlSQU10d0VMUVIwaEVBeTJBUXRCSUNFUURMVUJDMEVmSVJBTXRBRUxRUWNoRUF5ekFRdEJJU0VRRExJQkMwRWlJUkFNc1FFTFFSNGhFQXl3QVF0Qkl5RVFESzhCQzBFU0lSQU1yZ0VMUVJFaEVBeXRBUXRCSkNFUURLd0JDMEVsSVJBTXF3RUxRU1loRUF5cUFRdEJKeUVRREtrQkMwSERBU0VRREtnQkMwRXBJUkFNcHdFTFFTc2hFQXltQVF0QkxDRVFES1VCQzBFdElSQU1wQUVMUVM0aEVBeWpBUXRCTHlFUURLSUJDMEhFQVNFUURLRUJDMEV3SVJBTW9BRUxRVFFoRUF5ZkFRdEJEQ0VRREo0QkMwRXhJUkFNblFFTFFUSWhFQXljQVF0Qk15RVFESnNCQzBFNUlSQU1tZ0VMUVRVaEVBeVpBUXRCeFFFaEVBeVlBUXRCQ3lFUURKY0JDMEU2SVJBTWxnRUxRVFloRUF5VkFRdEJDaUVRREpRQkMwRTNJUkFNa3dFTFFUZ2hFQXlTQVF0QlBDRVFESkVCQzBFN0lSQU1rQUVMUVQwaEVBeVBBUXRCQ1NFUURJNEJDMEVvSVJBTWpRRUxRVDRoRUF5TUFRdEJQeUVRRElzQkMwSEFBQ0VRRElvQkMwSEJBQ0VRRElrQkMwSENBQ0VRRElnQkMwSERBQ0VRREljQkMwSEVBQ0VRRElZQkMwSEZBQ0VRRElVQkMwSEdBQ0VRRElRQkMwRXFJUkFNZ3dFTFFjY0FJUkFNZ2dFTFFjZ0FJUkFNZ1FFTFFja0FJUkFNZ0FFTFFjb0FJUkFNZnd0Qnl3QWhFQXgrQzBITkFDRVFESDBMUWN3QUlSQU1mQXRCemdBaEVBeDdDMEhQQUNFUURIb0xRZEFBSVJBTWVRdEIwUUFoRUF4NEMwSFNBQ0VRREhjTFFkTUFJUkFNZGd0QjFBQWhFQXgxQzBIV0FDRVFESFFMUWRVQUlSQU1jd3RCQmlFUURISUxRZGNBSVJBTWNRdEJCU0VRREhBTFFkZ0FJUkFNYnd0QkJDRVFERzRMUWRrQUlSQU1iUXRCMmdBaEVBeHNDMEhiQUNFUURHc0xRZHdBSVJBTWFndEJBeUVRREdrTFFkMEFJUkFNYUF0QjNnQWhFQXhuQzBIZkFDRVFER1lMUWVFQUlSQU1aUXRCNEFBaEVBeGtDMEhpQUNFUURHTUxRZU1BSVJBTVlndEJBaUVRREdFTFFlUUFJUkFNWUF0QjVRQWhFQXhmQzBIbUFDRVFERjRMUWVjQUlSQU1YUXRCNkFBaEVBeGNDMEhwQUNFUURGc0xRZW9BSVJBTVdndEI2d0FoRUF4WkMwSHNBQ0VRREZnTFFlMEFJUkFNVnd0QjdnQWhFQXhXQzBIdkFDRVFERlVMUWZBQUlSQU1WQXRCOFFBaEVBeFRDMEh5QUNFUURGSUxRZk1BSVJBTVVRdEI5QUFoRUF4UUMwSDFBQ0VRREU4TFFmWUFJUkFNVGd0Qjl3QWhFQXhOQzBINEFDRVFERXdMUWZrQUlSQU1Td3RCK2dBaEVBeEtDMEg3QUNFUURFa0xRZndBSVJBTVNBdEIvUUFoRUF4SEMwSCtBQ0VRREVZTFFmOEFJUkFNUlF0QmdBRWhFQXhFQzBHQkFTRVFERU1MUVlJQklSQU1RZ3RCZ3dFaEVBeEJDMEdFQVNFUURFQUxRWVVCSVJBTVB3dEJoZ0VoRUF3K0MwR0hBU0VRREQwTFFZZ0JJUkFNUEF0QmlRRWhFQXc3QzBHS0FTRVFERG9MUVlzQklSQU1PUXRCakFFaEVBdzRDMEdOQVNFUUREY0xRWTRCSVJBTU5ndEJqd0VoRUF3MUMwR1FBU0VRRERRTFFaRUJJUkFNTXd0QmtnRWhFQXd5QzBHVEFTRVFEREVMUVpRQklSQU1NQXRCbFFFaEVBd3ZDMEdXQVNFUURDNExRWmNCSVJBTUxRdEJtQUVoRUF3c0MwR1pBU0VRRENzTFFab0JJUkFNS2d0Qm13RWhFQXdwQzBHY0FTRVFEQ2dMUVowQklSQU1Kd3RCbmdFaEVBd21DMEdmQVNFUURDVUxRYUFCSVJBTUpBdEJvUUVoRUF3akMwR2lBU0VRRENJTFFhTUJJUkFNSVF0QnBBRWhFQXdnQzBHbEFTRVFEQjhMUWFZQklSQU1IZ3RCcHdFaEVBd2RDMEdvQVNFUURCd0xRYWtCSVJBTUd3dEJxZ0VoRUF3YUMwR3JBU0VRREJrTFFhd0JJUkFNR0F0QnJRRWhFQXdYQzBHdUFTRVFEQllMUVFFaEVBd1ZDMEd2QVNFUURCUUxRYkFCSVJBTUV3dEJzUUVoRUF3U0MwR3pBU0VRREJFTFFiSUJJUkFNRUF0QnRBRWhFQXdQQzBHMUFTRVFEQTRMUWJZQklSQU1EUXRCdHdFaEVBd01DMEc0QVNFUURBc0xRYmtCSVJBTUNndEJ1Z0VoRUF3SkMwRzdBU0VRREFnTFFjWUJJUkFNQnd0QnZBRWhFQXdHQzBHOUFTRVFEQVVMUWI0QklSQU1CQXRCdndFaEVBd0RDMEhBQVNFUURBSUxRY0lCSVJBTUFRdEJ3UUVoRUFzRFFBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQkFPeHdFQUFRSURCQVVHQndnSkNnc01EUTRQRUJFU0V4UVZGaGNZR1JvYkhCNGZJQ0VqSlNnL1FFRkVSVVpIU0VsS1MweE5UMUJSVWxQZUExZFpXMXhkWUdKbFptZG9hV3ByYkcxdmNIRnljM1IxZG5kNGVYcDdmSDErZ0FHQ0FZVUJoZ0dIQVlrQml3R01BWTBCamdHUEFaQUJrUUdVQVpVQmxnR1hBWmdCbVFHYUFac0JuQUdkQVo0Qm53R2dBYUVCb2dHakFhUUJwUUdtQWFjQnFBR3BBYW9CcXdHc0FhMEJyZ0d2QWJBQnNRR3lBYk1CdEFHMUFiWUJ0d0c0QWJrQnVnRzdBYndCdlFHK0FiOEJ3QUhCQWNJQnd3SEVBY1VCeGdISEFjZ0J5UUhLQWNzQnpBSE5BYzRCendIUUFkRUIwZ0hUQWRRQjFRSFdBZGNCMkFIWkFkb0Iyd0hjQWQwQjNnSGdBZUVCNGdIakFlUUI1UUhtQWVjQjZBSHBBZW9CNndIc0FlMEI3Z0h2QWZBQjhRSHlBZk1CbVFLa0FyQUMvZ0wrQWdzZ0FTSUVJQUpIRGZNQlFkMEJJUkFNL3dNTElBRWlFQ0FDUnczZEFVSERBU0VRRFA0REN5QUJJZ0VnQWtjTmtBRkI5d0FoRUF6OUF3c2dBU0lCSUFKSERZWUJRZThBSVJBTS9BTUxJQUVpQVNBQ1J3MS9RZW9BSVJBTSt3TUxJQUVpQVNBQ1J3MTdRZWdBSVJBTStnTUxJQUVpQVNBQ1J3MTRRZVlBSVJBTStRTUxJQUVpQVNBQ1J3MGFRUmdoRUF6NEF3c2dBU0lCSUFKSERSUkJFaUVRRFBjREN5QUJJZ0VnQWtjTldVSEZBQ0VRRFBZREN5QUJJZ0VnQWtjTlNrRS9JUkFNOVFNTElBRWlBU0FDUncxSVFUd2hFQXowQXdzZ0FTSUJJQUpIRFVGQk1TRVFEUE1EQ3lBQUxRQXVRUUZHRGVzRERJY0NDeUFBSUFFaUFTQUNFTUNBZ0lBQVFRRkhEZVlCSUFCQ0FEY0RJQXpuQVFzZ0FDQUJJZ0VnQWhDMGdJQ0FBQ0lRRGVjQklBRWhBUXoxQWdzQ1FDQUJJZ0VnQWtjTkFFRUdJUkFNOEFNTElBQWdBVUVCYWlJQklBSVF1NENBZ0FBaUVBM29BU0FCSVFFTU1Rc2dBRUlBTndNZ1FSSWhFQXpWQXdzZ0FTSVFJQUpIRFN0QkhTRVFETzBEQ3dKQUlBRWlBU0FDUmcwQUlBRkJBV29oQVVFUUlSQU0xQU1MUVFjaEVBenNBd3NnQUVJQUlBQXBBeUFpRVNBQ0lBRWlFR3V0SWhKOUloTWdFeUFSVmhzM0F5QWdFU0FTVmlJVVJRM2xBVUVJSVJBTTZ3TUxBa0FnQVNJQklBSkdEUUFnQUVHSmdJQ0FBRFlDQ0NBQUlBRTJBZ1FnQVNFQlFSUWhFQXpTQXd0QkNTRVFET29EQ3lBQklRRWdBQ2tESUZBTjVBRWdBU0VCRFBJQ0N3SkFJQUVpQVNBQ1J3MEFRUXNoRUF6cEF3c2dBQ0FCUVFGcUlnRWdBaEMyZ0lDQUFDSVFEZVVCSUFFaEFRenlBZ3NnQUNBQklnRWdBaEM0Z0lDQUFDSVFEZVVCSUFFaEFRenlBZ3NnQUNBQklnRWdBaEM0Z0lDQUFDSVFEZVlCSUFFaEFRd05DeUFBSUFFaUFTQUNFTHFBZ0lBQUloQU41d0VnQVNFQkRQQUNDd0pBSUFFaUFTQUNSdzBBUVE4aEVBemxBd3NnQVMwQUFDSVFRVHRHRFFnZ0VFRU5SdzNvQVNBQlFRRnFJUUVNN3dJTElBQWdBU0lCSUFJUXVvQ0FnQUFpRUEzb0FTQUJJUUVNOGdJTEEwQUNRQ0FCTFFBQVFmQzFnSUFBYWkwQUFDSVFRUUZHRFFBZ0VFRUNSdzNyQVNBQUtBSUVJUkFnQUVFQU5nSUVJQUFnRUNBQlFRRnFJZ0VRdVlDQWdBQWlFQTNxQVNBQklRRU05QUlMSUFGQkFXb2lBU0FDUncwQUMwRVNJUkFNNGdNTElBQWdBU0lCSUFJUXVvQ0FnQUFpRUEzcEFTQUJJUUVNQ2dzZ0FTSUJJQUpIRFFaQkd5RVFET0FEQ3dKQUlBRWlBU0FDUncwQVFSWWhFQXpnQXdzZ0FFR0tnSUNBQURZQ0NDQUFJQUUyQWdRZ0FDQUJJQUlRdUlDQWdBQWlFQTNxQVNBQklRRkJJQ0VRRE1ZREN3SkFJQUVpQVNBQ1JnMEFBMEFDUUNBQkxRQUFRZkMzZ0lBQWFpMEFBQ0lRUVFKR0RRQUNRQ0FRUVg5cURnVGxBZXdCQU9zQjdBRUxJQUZCQVdvaEFVRUlJUkFNeUFNTElBRkJBV29pQVNBQ1J3MEFDMEVWSVJBTTN3TUxRUlVoRUF6ZUF3c0RRQUpBSUFFdEFBQkI4TG1BZ0FCcUxRQUFJaEJCQWtZTkFDQVFRWDlxRGdUZUFld0I0QUhyQWV3QkN5QUJRUUZxSWdFZ0FrY05BQXRCR0NFUUROMERDd0pBSUFFaUFTQUNSZzBBSUFCQmk0Q0FnQUEyQWdnZ0FDQUJOZ0lFSUFFaEFVRUhJUkFNeEFNTFFSa2hFQXpjQXdzZ0FVRUJhaUVCREFJTEFrQWdBU0lVSUFKSERRQkJHaUVRRE5zREN5QVVJUUVDUUNBVUxRQUFRWE5xRGhUZEF1NEM3Z0x1QXU0QzdnTHVBdTRDN2dMdUF1NEM3Z0x1QXU0QzdnTHVBdTRDN2dMdUFnRHVBZ3RCQUNFUUlBQkJBRFlDSENBQVFhK0xnSUFBTmdJUUlBQkJBallDRENBQUlCUkJBV28yQWhRTTJnTUxBa0FnQVMwQUFDSVFRVHRHRFFBZ0VFRU5SdzNvQVNBQlFRRnFJUUVNNVFJTElBRkJBV29oQVF0QklpRVFETDhEQ3dKQUlBRWlFQ0FDUncwQVFSd2hFQXpZQXd0Q0FDRVJJQkFoQVNBUUxRQUFRVkJxRGpmbkFlWUJBUUlEQkFVR0J3Z0FBQUFBQUFBQUNRb0xEQTBPQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFQRUJFU0V4UUFDMEVlSVJBTXZRTUxRZ0loRVF6bEFRdENBeUVSRE9RQkMwSUVJUkVNNHdFTFFnVWhFUXppQVF0Q0JpRVJET0VCQzBJSElSRU00QUVMUWdnaEVRemZBUXRDQ1NFUkRONEJDMElLSVJFTTNRRUxRZ3NoRVF6Y0FRdENEQ0VSRE5zQkMwSU5JUkVNMmdFTFFnNGhFUXpaQVF0Q0R5RVJETmdCQzBJS0lSRU0xd0VMUWdzaEVReldBUXRDRENFUkROVUJDMElOSVJFTTFBRUxRZzRoRVF6VEFRdENEeUVSRE5JQkMwSUFJUkVDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUlCQXRBQUJCVUdvT04rVUI1QUVBQVFJREJBVUdCK1lCNWdIbUFlWUI1Z0htQWVZQkNBa0tDd3dONWdIbUFlWUI1Z0htQWVZQjVnSG1BZVlCNWdIbUFlWUI1Z0htQWVZQjVnSG1BZVlCNWdIbUFlWUI1Z0htQWVZQjVnSG1BUTRQRUJFU0UrWUJDMElDSVJFTTVBRUxRZ01oRVF6akFRdENCQ0VSRE9JQkMwSUZJUkVNNFFFTFFnWWhFUXpnQVF0Q0J5RVJETjhCQzBJSUlSRU0zZ0VMUWdraEVRemRBUXRDQ2lFUkROd0JDMElMSVJFTTJ3RUxRZ3doRVF6YUFRdENEU0VSRE5rQkMwSU9JUkVNMkFFTFFnOGhFUXpYQVF0Q0NpRVJETllCQzBJTElSRU0xUUVMUWd3aEVRelVBUXRDRFNFUkROTUJDMElPSVJFTTBnRUxRZzhoRVF6UkFRc2dBRUlBSUFBcEF5QWlFU0FDSUFFaUVHdXRJaEo5SWhNZ0V5QVJWaHMzQXlBZ0VTQVNWaUlVUlEzU0FVRWZJUkFNd0FNTEFrQWdBU0lCSUFKR0RRQWdBRUdKZ0lDQUFEWUNDQ0FBSUFFMkFnUWdBU0VCUVNRaEVBeW5Bd3RCSUNFUURMOERDeUFBSUFFaUVDQUNFTDZBZ0lBQVFYOXFEZ1cyQVFERkFnSFJBZElCQzBFUklSQU1wQU1MSUFCQkFUb0FMeUFRSVFFTXV3TUxJQUVpQVNBQ1J3M1NBVUVrSVJBTXV3TUxJQUVpRFNBQ1J3MGVRY1lBSVJBTXVnTUxJQUFnQVNJQklBSVFzb0NBZ0FBaUVBM1VBU0FCSVFFTXRRRUxJQUVpRUNBQ1J3MG1RZEFBSVJBTXVBTUxBa0FnQVNJQklBSkhEUUJCS0NFUURMZ0RDeUFBUVFBMkFnUWdBRUdNZ0lDQUFEWUNDQ0FBSUFFZ0FSQ3hnSUNBQUNJUURkTUJJQUVoQVF6WUFRc0NRQ0FCSWhBZ0FrY05BRUVwSVJBTXR3TUxJQkF0QUFBaUFVRWdSZzBVSUFGQkNVY04wd0VnRUVFQmFpRUJEQlVMQWtBZ0FTSUJJQUpHRFFBZ0FVRUJhaUVCREJjTFFTb2hFQXkxQXdzQ1FDQUJJaEFnQWtjTkFFRXJJUkFNdFFNTEFrQWdFQzBBQUNJQlFRbEdEUUFnQVVFZ1J3M1ZBUXNnQUMwQUxFRUlSZzNUQVNBUUlRRU1rUU1MQWtBZ0FTSUJJQUpIRFFCQkxDRVFETFFEQ3lBQkxRQUFRUXBIRGRVQklBRkJBV29oQVF6SkFnc2dBU0lPSUFKSERkVUJRUzhoRUF5eUF3c0RRQUpBSUFFdEFBQWlFRUVnUmcwQUFrQWdFRUYyYWc0RUFOd0IzQUVBMmdFTElBRWhBUXpnQVFzZ0FVRUJhaUlCSUFKSERRQUxRVEVoRUF5eEF3dEJNaUVRSUFFaUZDQUNSZzJ3QXlBQ0lCUnJJQUFvQWdBaUFXb2hGU0FVSUFGclFRTnFJUllDUUFOQUlCUXRBQUFpRjBFZ2NpQVhJQmRCdjM5cVFmOEJjVUVhU1J0Qi93RnhJQUZCOEx1QWdBQnFMUUFBUncwQkFrQWdBVUVEUncwQVFRWWhBUXlXQXdzZ0FVRUJhaUVCSUJSQkFXb2lGQ0FDUncwQUN5QUFJQlUyQWdBTXNRTUxJQUJCQURZQ0FDQVVJUUVNMlFFTFFUTWhFQ0FCSWhRZ0FrWU5yd01nQWlBVWF5QUFLQUlBSWdGcUlSVWdGQ0FCYTBFSWFpRVdBa0FEUUNBVUxRQUFJaGRCSUhJZ0Z5QVhRYjkvYWtIL0FYRkJHa2tiUWY4QmNTQUJRZlM3Z0lBQWFpMEFBRWNOQVFKQUlBRkJDRWNOQUVFRklRRU1sUU1MSUFGQkFXb2hBU0FVUVFGcUloUWdBa2NOQUFzZ0FDQVZOZ0lBRExBREN5QUFRUUEyQWdBZ0ZDRUJETmdCQzBFMElSQWdBU0lVSUFKR0RhNERJQUlnRkdzZ0FDZ0NBQ0lCYWlFVklCUWdBV3RCQldvaEZnSkFBMEFnRkMwQUFDSVhRU0J5SUJjZ0YwRy9mMnBCL3dGeFFScEpHMEgvQVhFZ0FVSFF3b0NBQUdvdEFBQkhEUUVDUUNBQlFRVkhEUUJCQnlFQkRKUURDeUFCUVFGcUlRRWdGRUVCYWlJVUlBSkhEUUFMSUFBZ0ZUWUNBQXl2QXdzZ0FFRUFOZ0lBSUJRaEFRelhBUXNDUUNBQklnRWdBa1lOQUFOQUFrQWdBUzBBQUVHQXZvQ0FBR290QUFBaUVFRUJSZzBBSUJCQkFrWU5DaUFCSVFFTTNRRUxJQUZCQVdvaUFTQUNSdzBBQzBFd0lSQU1yZ01MUVRBaEVBeXRBd3NDUUNBQklnRWdBa1lOQUFOQUFrQWdBUzBBQUNJUVFTQkdEUUFnRUVGMmFnNEUyUUhhQWRvQjJRSGFBUXNnQVVFQmFpSUJJQUpIRFFBTFFUZ2hFQXl0QXd0Qk9DRVFES3dEQ3dOQUFrQWdBUzBBQUNJUVFTQkdEUUFnRUVFSlJ3MERDeUFCUVFGcUlnRWdBa2NOQUF0QlBDRVFES3NEQ3dOQUFrQWdBUzBBQUNJUVFTQkdEUUFDUUFKQUlCQkJkbW9PQk5vQkFRSGFBUUFMSUJCQkxFWU4yd0VMSUFFaEFRd0VDeUFCUVFGcUlnRWdBa2NOQUF0QlB5RVFES29EQ3lBQklRRU0yd0VMUWNBQUlSQWdBU0lVSUFKR0RhZ0RJQUlnRkdzZ0FDZ0NBQ0lCYWlFV0lCUWdBV3RCQm1vaEZ3SkFBMEFnRkMwQUFFRWdjaUFCUVlEQWdJQUFhaTBBQUVjTkFTQUJRUVpHRFk0RElBRkJBV29oQVNBVVFRRnFJaFFnQWtjTkFBc2dBQ0FXTmdJQURLa0RDeUFBUVFBMkFnQWdGQ0VCQzBFMklSQU1qZ01MQWtBZ0FTSVBJQUpIRFFCQndRQWhFQXluQXdzZ0FFR01nSUNBQURZQ0NDQUFJQTgyQWdRZ0R5RUJJQUF0QUN4QmYyb09CTTBCMVFIWEFka0Jod01MSUFGQkFXb2hBUXpNQVFzQ1FDQUJJZ0VnQWtZTkFBTkFBa0FnQVMwQUFDSVFRU0J5SUJBZ0VFRy9mMnBCL3dGeFFScEpHMEgvQVhFaUVFRUpSZzBBSUJCQklFWU5BQUpBQWtBQ1FBSkFJQkJCblg5cURoTUFBd01EQXdNREF3RURBd01EQXdNREF3TUNBd3NnQVVFQmFpRUJRVEVoRUF5UkF3c2dBVUVCYWlFQlFUSWhFQXlRQXdzZ0FVRUJhaUVCUVRNaEVBeVBBd3NnQVNFQkROQUJDeUFCUVFGcUlnRWdBa2NOQUF0Qk5TRVFES1VEQzBFMUlSQU1wQU1MQWtBZ0FTSUJJQUpHRFFBRFFBSkFJQUV0QUFCQmdMeUFnQUJxTFFBQVFRRkdEUUFnQVNFQkROTUJDeUFCUVFGcUlnRWdBa2NOQUF0QlBTRVFES1FEQzBFOUlSQU1vd01MSUFBZ0FTSUJJQUlRc0lDQWdBQWlFQTNXQVNBQklRRU1BUXNnRUVFQmFpRUJDMEU4SVJBTWh3TUxBa0FnQVNJQklBSkhEUUJCd2dBaEVBeWdBd3NDUUFOQUFrQWdBUzBBQUVGM2FnNFlBQUwrQXY0Q2hBUCtBdjRDL2dMK0F2NEMvZ0wrQXY0Qy9nTCtBdjRDL2dMK0F2NEMvZ0wrQXY0Qy9nSUEvZ0lMSUFGQkFXb2lBU0FDUncwQUMwSENBQ0VRREtBREN5QUJRUUZxSVFFZ0FDMEFMVUVCY1VVTnZRRWdBU0VCQzBFc0lSQU1oUU1MSUFFaUFTQUNSdzNUQVVIRUFDRVFESjBEQ3dOQUFrQWdBUzBBQUVHUXdJQ0FBR290QUFCQkFVWU5BQ0FCSVFFTXR3SUxJQUZCQVdvaUFTQUNSdzBBQzBIRkFDRVFESndEQ3lBTkxRQUFJaEJCSUVZTnN3RWdFRUU2UncyQkF5QUFLQUlFSVFFZ0FFRUFOZ0lFSUFBZ0FTQU5FSytBZ0lBQUlnRU4wQUVnRFVFQmFpRUJETE1DQzBISEFDRVFJQUVpRFNBQ1JnMmFBeUFDSUExcklBQW9BZ0FpQVdvaEZpQU5JQUZyUVFWcUlSY0RRQ0FOTFFBQUloUkJJSElnRkNBVVFiOS9ha0gvQVhGQkdra2JRZjhCY1NBQlFaRENnSUFBYWkwQUFFY05nQU1nQVVFRlJnMzBBaUFCUVFGcUlRRWdEVUVCYWlJTklBSkhEUUFMSUFBZ0ZqWUNBQXlhQXd0QnlBQWhFQ0FCSWcwZ0FrWU5tUU1nQWlBTmF5QUFLQUlBSWdGcUlSWWdEU0FCYTBFSmFpRVhBMEFnRFMwQUFDSVVRU0J5SUJRZ0ZFRy9mMnBCL3dGeFFScEpHMEgvQVhFZ0FVR1d3b0NBQUdvdEFBQkhEZjhDQWtBZ0FVRUpSdzBBUVFJaEFRejFBZ3NnQVVFQmFpRUJJQTFCQVdvaURTQUNSdzBBQ3lBQUlCWTJBZ0FNbVFNTEFrQWdBU0lOSUFKSERRQkJ5UUFoRUF5WkF3c0NRQUpBSUEwdEFBQWlBVUVnY2lBQklBRkJ2MzlxUWY4QmNVRWFTUnRCL3dGeFFaSi9hZzRIQUlBRGdBT0FBNEFEZ0FNQmdBTUxJQTFCQVdvaEFVRStJUkFNZ0FNTElBMUJBV29oQVVFL0lSQU0vd0lMUWNvQUlSQWdBU0lOSUFKR0RaY0RJQUlnRFdzZ0FDZ0NBQ0lCYWlFV0lBMGdBV3RCQVdvaEZ3TkFJQTB0QUFBaUZFRWdjaUFVSUJSQnYzOXFRZjhCY1VFYVNSdEIvd0Z4SUFGQm9NS0FnQUJxTFFBQVJ3MzlBaUFCUVFGR0RmQUNJQUZCQVdvaEFTQU5RUUZxSWcwZ0FrY05BQXNnQUNBV05nSUFESmNEQzBITEFDRVFJQUVpRFNBQ1JnMldBeUFDSUExcklBQW9BZ0FpQVdvaEZpQU5JQUZyUVE1cUlSY0RRQ0FOTFFBQUloUkJJSElnRkNBVVFiOS9ha0gvQVhGQkdra2JRZjhCY1NBQlFhTENnSUFBYWkwQUFFY04vQUlnQVVFT1JnM3dBaUFCUVFGcUlRRWdEVUVCYWlJTklBSkhEUUFMSUFBZ0ZqWUNBQXlXQXd0QnpBQWhFQ0FCSWcwZ0FrWU5sUU1nQWlBTmF5QUFLQUlBSWdGcUlSWWdEU0FCYTBFUGFpRVhBMEFnRFMwQUFDSVVRU0J5SUJRZ0ZFRy9mMnBCL3dGeFFScEpHMEgvQVhFZ0FVSEF3b0NBQUdvdEFBQkhEZnNDQWtBZ0FVRVBSdzBBUVFNaEFRenhBZ3NnQVVFQmFpRUJJQTFCQVdvaURTQUNSdzBBQ3lBQUlCWTJBZ0FNbFFNTFFjMEFJUkFnQVNJTklBSkdEWlFESUFJZ0RXc2dBQ2dDQUNJQmFpRVdJQTBnQVd0QkJXb2hGd05BSUEwdEFBQWlGRUVnY2lBVUlCUkJ2MzlxUWY4QmNVRWFTUnRCL3dGeElBRkIwTUtBZ0FCcUxRQUFSdzM2QWdKQUlBRkJCVWNOQUVFRUlRRU04QUlMSUFGQkFXb2hBU0FOUVFGcUlnMGdBa2NOQUFzZ0FDQVdOZ0lBREpRREN3SkFJQUVpRFNBQ1J3MEFRYzRBSVJBTWxBTUxBa0FDUUFKQUFrQWdEUzBBQUNJQlFTQnlJQUVnQVVHL2YycEIvd0Z4UVJwSkcwSC9BWEZCblg5cURoTUEvUUw5QXYwQy9RTDlBdjBDL1FMOUF2MEMvUUw5QXYwQ0FmMEMvUUw5QWdJRC9RSUxJQTFCQVdvaEFVSEJBQ0VRRFAwQ0N5QU5RUUZxSVFGQndnQWhFQXo4QWdzZ0RVRUJhaUVCUWNNQUlSQU0rd0lMSUExQkFXb2hBVUhFQUNFUURQb0NDd0pBSUFFaUFTQUNSZzBBSUFCQmpZQ0FnQUEyQWdnZ0FDQUJOZ0lFSUFFaEFVSEZBQ0VRRFBvQ0MwSFBBQ0VRREpJREN5QVFJUUVDUUFKQUlCQXRBQUJCZG1vT0JBR29BcWdDQUtnQ0N5QVFRUUZxSVFFTFFTY2hFQXo0QWdzQ1FDQUJJZ0VnQWtjTkFFSFJBQ0VRREpFREN3SkFJQUV0QUFCQklFWU5BQ0FCSVFFTWpRRUxJQUZCQVdvaEFTQUFMUUF0UVFGeFJRM0hBU0FCSVFFTWpBRUxJQUVpRnlBQ1J3M0lBVUhTQUNFUURJOERDMEhUQUNFUUlBRWlGQ0FDUmcyT0F5QUNJQlJySUFBb0FnQWlBV29oRmlBVUlBRnJRUUZxSVJjRFFDQVVMUUFBSUFGQjFzS0FnQUJxTFFBQVJ3M01BU0FCUVFGR0RjY0JJQUZCQVdvaEFTQVVRUUZxSWhRZ0FrY05BQXNnQUNBV05nSUFESTREQ3dKQUlBRWlBU0FDUncwQVFkVUFJUkFNamdNTElBRXRBQUJCQ2tjTnpBRWdBVUVCYWlFQkRNY0JDd0pBSUFFaUFTQUNSdzBBUWRZQUlSQU1qUU1MQWtBQ1FDQUJMUUFBUVhacURnUUF6UUhOQVFITkFRc2dBVUVCYWlFQkRNY0JDeUFCUVFGcUlRRkJ5Z0FoRUF6ekFnc2dBQ0FCSWdFZ0FoQ3VnSUNBQUNJUURjc0JJQUVoQVVITkFDRVFEUElDQ3lBQUxRQXBRU0pHRFlVRERLWUNDd0pBSUFFaUFTQUNSdzBBUWRzQUlSQU1pZ01MUVFBaEZFRUJJUmRCQVNFV1FRQWhFQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQ0FCTFFBQVFWQnFEZ3JVQWRNQkFBRUNBd1FGQmdqVkFRdEJBaUVRREFZTFFRTWhFQXdGQzBFRUlSQU1CQXRCQlNFUURBTUxRUVloRUF3Q0MwRUhJUkFNQVF0QkNDRVFDMEVBSVJkQkFDRVdRUUFoRkF6TUFRdEJDU0VRUVFFaEZFRUFJUmRCQUNFV0RNc0JDd0pBSUFFaUFTQUNSdzBBUWQwQUlSQU1pUU1MSUFFdEFBQkJMa2NOekFFZ0FVRUJhaUVCREtZQ0N5QUJJZ0VnQWtjTnpBRkIzd0FoRUF5SEF3c0NRQ0FCSWdFZ0FrWU5BQ0FBUVk2QWdJQUFOZ0lJSUFBZ0FUWUNCQ0FCSVFGQjBBQWhFQXp1QWd0QjRBQWhFQXlHQXd0QjRRQWhFQ0FCSWdFZ0FrWU5oUU1nQWlBQmF5QUFLQUlBSWhScUlSWWdBU0FVYTBFRGFpRVhBMEFnQVMwQUFDQVVRZUxDZ0lBQWFpMEFBRWNOelFFZ0ZFRURSZzNNQVNBVVFRRnFJUlFnQVVFQmFpSUJJQUpIRFFBTElBQWdGallDQUF5RkF3dEI0Z0FoRUNBQklnRWdBa1lOaEFNZ0FpQUJheUFBS0FJQUloUnFJUllnQVNBVWEwRUNhaUVYQTBBZ0FTMEFBQ0FVUWViQ2dJQUFhaTBBQUVjTnpBRWdGRUVDUmczT0FTQVVRUUZxSVJRZ0FVRUJhaUlCSUFKSERRQUxJQUFnRmpZQ0FBeUVBd3RCNHdBaEVDQUJJZ0VnQWtZTmd3TWdBaUFCYXlBQUtBSUFJaFJxSVJZZ0FTQVVhMEVEYWlFWEEwQWdBUzBBQUNBVVFlbkNnSUFBYWkwQUFFY055d0VnRkVFRFJnM09BU0FVUVFGcUlSUWdBVUVCYWlJQklBSkhEUUFMSUFBZ0ZqWUNBQXlEQXdzQ1FDQUJJZ0VnQWtjTkFFSGxBQ0VRRElNREN5QUFJQUZCQVdvaUFTQUNFS2lBZ0lBQUloQU56UUVnQVNFQlFkWUFJUkFNNlFJTEFrQWdBU0lCSUFKR0RRQURRQUpBSUFFdEFBQWlFRUVnUmcwQUFrQUNRQUpBSUJCQnVIOXFEZ3NBQWM4Qnp3SFBBYzhCendIUEFjOEJ6d0VDendFTElBRkJBV29oQVVIU0FDRVFETzBDQ3lBQlFRRnFJUUZCMHdBaEVBenNBZ3NnQVVFQmFpRUJRZFFBSVJBTTZ3SUxJQUZCQVdvaUFTQUNSdzBBQzBIa0FDRVFESUlEQzBIa0FDRVFESUVEQ3dOQUFrQWdBUzBBQUVId3dvQ0FBR290QUFBaUVFRUJSZzBBSUJCQmZtb09BODhCMEFIUkFkSUJDeUFCUVFGcUlnRWdBa2NOQUF0QjVnQWhFQXlBQXdzQ1FDQUJJZ0VnQWtZTkFDQUJRUUZxSVFFTUF3dEI1d0FoRUF6L0Fnc0RRQUpBSUFFdEFBQkI4TVNBZ0FCcUxRQUFJaEJCQVVZTkFBSkFJQkJCZm1vT0JOSUIwd0hVQVFEVkFRc2dBU0VCUWRjQUlSQU01d0lMSUFGQkFXb2lBU0FDUncwQUMwSG9BQ0VRRFA0Q0N3SkFJQUVpQVNBQ1J3MEFRZWtBSVJBTS9nSUxBa0FnQVMwQUFDSVFRWFpxRGhxNkFkVUIxUUc4QWRVQjFRSFZBZFVCMVFIVkFkVUIxUUhWQWRVQjFRSFZBZFVCMVFIVkFkVUIxUUhWQWNvQjFRSFZBUURUQVFzZ0FVRUJhaUVCQzBFR0lSQU00d0lMQTBBQ1FDQUJMUUFBUWZER2dJQUFhaTBBQUVFQlJnMEFJQUVoQVF5ZUFnc2dBVUVCYWlJQklBSkhEUUFMUWVvQUlSQU0rd0lMQWtBZ0FTSUJJQUpHRFFBZ0FVRUJhaUVCREFNTFFlc0FJUkFNK2dJTEFrQWdBU0lCSUFKSERRQkI3QUFoRUF6NkFnc2dBVUVCYWlFQkRBRUxBa0FnQVNJQklBSkhEUUJCN1FBaEVBejVBZ3NnQVVFQmFpRUJDMEVFSVJBTTNnSUxBa0FnQVNJVUlBSkhEUUJCN2dBaEVBejNBZ3NnRkNFQkFrQUNRQUpBSUJRdEFBQkI4TWlBZ0FCcUxRQUFRWDlxRGdmVUFkVUIxZ0VBbkFJQkF0Y0JDeUFVUVFGcUlRRU1DZ3NnRkVFQmFpRUJETTBCQzBFQUlSQWdBRUVBTmdJY0lBQkJtNUtBZ0FBMkFoQWdBRUVITmdJTUlBQWdGRUVCYWpZQ0ZBejJBZ3NDUUFOQUFrQWdBUzBBQUVId3lJQ0FBR290QUFBaUVFRUVSZzBBQWtBQ1FDQVFRWDlxRGdmU0FkTUIxQUhaQVFBRUFka0JDeUFCSVFGQjJnQWhFQXpnQWdzZ0FVRUJhaUVCUWR3QUlSQU0zd0lMSUFGQkFXb2lBU0FDUncwQUMwSHZBQ0VRRFBZQ0N5QUJRUUZxSVFFTXl3RUxBa0FnQVNJVUlBSkhEUUJCOEFBaEVBejFBZ3NnRkMwQUFFRXZSdzNVQVNBVVFRRnFJUUVNQmdzQ1FDQUJJaFFnQWtjTkFFSHhBQ0VRRFBRQ0N3SkFJQlF0QUFBaUFVRXZSdzBBSUJSQkFXb2hBVUhkQUNFUUROc0NDeUFCUVhacUlnUkJGa3NOMHdGQkFTQUVkRUdKZ0lBQ2NVVU4wd0VNeWdJTEFrQWdBU0lCSUFKR0RRQWdBVUVCYWlFQlFkNEFJUkFNMmdJTFFmSUFJUkFNOGdJTEFrQWdBU0lVSUFKSERRQkI5QUFoRUF6eUFnc2dGQ0VCQWtBZ0ZDMEFBRUh3eklDQUFHb3RBQUJCZjJvT0E4a0NsQUlBMUFFTFFlRUFJUkFNMkFJTEFrQWdBU0lVSUFKR0RRQURRQUpBSUJRdEFBQkI4TXFBZ0FCcUxRQUFJZ0ZCQTBZTkFBSkFJQUZCZjJvT0Fzc0NBTlVCQ3lBVUlRRkIzd0FoRUF6YUFnc2dGRUVCYWlJVUlBSkhEUUFMUWZNQUlSQU04UUlMUWZNQUlSQU04QUlMQWtBZ0FTSUJJQUpHRFFBZ0FFR1BnSUNBQURZQ0NDQUFJQUUyQWdRZ0FTRUJRZUFBSVJBTTF3SUxRZlVBSVJBTTd3SUxBa0FnQVNJQklBSkhEUUJCOWdBaEVBenZBZ3NnQUVHUGdJQ0FBRFlDQ0NBQUlBRTJBZ1FnQVNFQkMwRURJUkFNMUFJTEEwQWdBUzBBQUVFZ1J3M0RBaUFCUVFGcUlnRWdBa2NOQUF0Qjl3QWhFQXpzQWdzQ1FDQUJJZ0VnQWtjTkFFSDRBQ0VRRE93Q0N5QUJMUUFBUVNCSERjNEJJQUZCQVdvaEFRenZBUXNnQUNBQklnRWdBaENzZ0lDQUFDSVFEYzRCSUFFaEFReU9BZ3NDUUNBQklnUWdBa2NOQUVINkFDRVFET29DQ3lBRUxRQUFRY3dBUnczUkFTQUVRUUZxSVFGQkV5RVFETThCQ3dKQUlBRWlCQ0FDUncwQVFmc0FJUkFNNlFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJCV29oRUFOQUlBUXRBQUFnQVVId3pvQ0FBR290QUFCSERkQUJJQUZCQlVZTnpnRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkIrd0FoRUF6b0Fnc0NRQ0FCSWdRZ0FrY05BRUg4QUNFUURPZ0NDd0pBQWtBZ0JDMEFBRUc5ZjJvT0RBRFJBZEVCMFFIUkFkRUIwUUhSQWRFQjBRSFJBUUhSQVFzZ0JFRUJhaUVCUWVZQUlSQU16d0lMSUFSQkFXb2hBVUhuQUNFUURNNENDd0pBSUFFaUJDQUNSdzBBUWYwQUlSQU01d0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFtb2hFQUpBQTBBZ0JDMEFBQ0FCUWUzUGdJQUFhaTBBQUVjTnp3RWdBVUVDUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFmMEFJUkFNNXdJTElBQkJBRFlDQUNBUVFRRnFJUUZCRUNFUURNd0JDd0pBSUFFaUJDQUNSdzBBUWY0QUlSQU01Z0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkJXb2hFQUpBQTBBZ0JDMEFBQ0FCUWZiT2dJQUFhaTBBQUVjTnpnRWdBVUVGUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFmNEFJUkFNNWdJTElBQkJBRFlDQUNBUVFRRnFJUUZCRmlFUURNc0JDd0pBSUFFaUJDQUNSdzBBUWY4QUlSQU01UUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkEyb2hFQUpBQTBBZ0JDMEFBQ0FCUWZ6T2dJQUFhaTBBQUVjTnpRRWdBVUVEUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFmOEFJUkFNNVFJTElBQkJBRFlDQUNBUVFRRnFJUUZCQlNFUURNb0JDd0pBSUFFaUJDQUNSdzBBUVlBQklSQU01QUlMSUFRdEFBQkIyUUJIRGNzQklBUkJBV29oQVVFSUlSQU15UUVMQWtBZ0FTSUVJQUpIRFFCQmdRRWhFQXpqQWdzQ1FBSkFJQVF0QUFCQnNuOXFEZ01BekFFQnpBRUxJQVJCQVdvaEFVSHJBQ0VRRE1vQ0N5QUVRUUZxSVFGQjdBQWhFQXpKQWdzQ1FDQUJJZ1FnQWtjTkFFR0NBU0VRRE9JQ0N3SkFBa0FnQkMwQUFFRzRmMm9PQ0FETEFjc0J5d0hMQWNzQnl3RUJ5d0VMSUFSQkFXb2hBVUhxQUNFUURNa0NDeUFFUVFGcUlRRkI3UUFoRUF6SUFnc0NRQ0FCSWdRZ0FrY05BRUdEQVNFUURPRUNDeUFDSUFScklBQW9BZ0FpQVdvaEVDQUVJQUZyUVFKcUlSUUNRQU5BSUFRdEFBQWdBVUdBejRDQUFHb3RBQUJIRGNrQklBRkJBa1lOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdFRFlDQUVHREFTRVFET0VDQzBFQUlSQWdBRUVBTmdJQUlCUkJBV29oQVF6R0FRc0NRQ0FCSWdRZ0FrY05BRUdFQVNFUURPQUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFScUlSQUNRQU5BSUFRdEFBQWdBVUdEejRDQUFHb3RBQUJIRGNnQklBRkJCRVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHRUFTRVFET0FDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRU01oRUF6RkFRc0NRQ0FCSWdRZ0FrY05BRUdGQVNFUUROOENDd0pBQWtBZ0JDMEFBRUcwZjJvT0NBRElBY2dCeUFISUFjZ0J5QUVCeUFFTElBUkJBV29oQVVIdkFDRVFETVlDQ3lBRVFRRnFJUUZCOEFBaEVBekZBZ3NDUUNBQklnUWdBa2NOQUVHR0FTRVFETjRDQ3lBRUxRQUFRY1VBUnczRkFTQUVRUUZxSVFFTWd3SUxBa0FnQVNJRUlBSkhEUUJCaHdFaEVBemRBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFRGFpRVFBa0FEUUNBRUxRQUFJQUZCaU0rQWdBQnFMUUFBUnczRkFTQUJRUU5HRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQmh3RWhFQXpkQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUV0SVJBTXdnRUxBa0FnQVNJRUlBSkhEUUJCaUFFaEVBemNBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFSWFpRVFBa0FEUUNBRUxRQUFJQUZCME0rQWdBQnFMUUFBUnczRUFTQUJRUWhHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQmlBRWhFQXpjQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVwSVJBTXdRRUxBa0FnQVNJQklBSkhEUUJCaVFFaEVBemJBZ3RCQVNFUUlBRXRBQUJCM3dCSERjQUJJQUZCQVdvaEFReUJBZ3NDUUNBQklnUWdBa2NOQUVHS0FTRVFETm9DQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRRnFJUkFEUUNBRUxRQUFJQUZCak0rQWdBQnFMUUFBUnczQkFTQUJRUUZHRGE4Q0lBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFZb0JJUkFNMlFJTEFrQWdBU0lFSUFKSERRQkJpd0VoRUF6WkFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVDYWlFUUFrQURRQ0FFTFFBQUlBRkJqcytBZ0FCcUxRQUFSdzNCQVNBQlFRSkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCaXdFaEVBelpBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRUNJUkFNdmdFTEFrQWdBU0lFSUFKSERRQkJqQUVoRUF6WUFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVCYWlFUUFrQURRQ0FFTFFBQUlBRkI4TStBZ0FCcUxRQUFSdzNBQVNBQlFRRkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCakFFaEVBellBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRWZJUkFNdlFFTEFrQWdBU0lFSUFKSERRQkJqUUVoRUF6WEFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVCYWlFUUFrQURRQ0FFTFFBQUlBRkI4cytBZ0FCcUxRQUFSdzIvQVNBQlFRRkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCalFFaEVBelhBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRUpJUkFNdkFFTEFrQWdBU0lFSUFKSERRQkJqZ0VoRUF6V0Fnc0NRQUpBSUFRdEFBQkJ0MzlxRGdjQXZ3Ry9BYjhCdndHL0FRRy9BUXNnQkVFQmFpRUJRZmdBSVJBTXZRSUxJQVJCQVdvaEFVSDVBQ0VRREx3Q0N3SkFJQUVpQkNBQ1J3MEFRWThCSVJBTTFRSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQldvaEVBSkFBMEFnQkMwQUFDQUJRWkhQZ0lBQWFpMEFBRWNOdlFFZ0FVRUZSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVk4QklSQU0xUUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJHQ0VRRExvQkN3SkFJQUVpQkNBQ1J3MEFRWkFCSVJBTTFBSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQW1vaEVBSkFBMEFnQkMwQUFDQUJRWmZQZ0lBQWFpMEFBRWNOdkFFZ0FVRUNSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVpBQklSQU0xQUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJGeUVRRExrQkN3SkFJQUVpQkNBQ1J3MEFRWkVCSVJBTTB3SUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQm1vaEVBSkFBMEFnQkMwQUFDQUJRWnJQZ0lBQWFpMEFBRWNOdXdFZ0FVRUdSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVpFQklSQU0wd0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJGU0VRRExnQkN3SkFJQUVpQkNBQ1J3MEFRWklCSVJBTTBnSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQldvaEVBSkFBMEFnQkMwQUFDQUJRYUhQZ0lBQWFpMEFBRWNOdWdFZ0FVRUZSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVpJQklSQU0wZ0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJIaUVRRExjQkN3SkFJQUVpQkNBQ1J3MEFRWk1CSVJBTTBRSUxJQVF0QUFCQnpBQkhEYmdCSUFSQkFXb2hBVUVLSVJBTXRnRUxBa0FnQkNBQ1J3MEFRWlFCSVJBTTBBSUxBa0FDUUNBRUxRQUFRYjkvYWc0UEFMa0J1UUc1QWJrQnVRRzVBYmtCdVFHNUFia0J1UUc1QWJrQkFia0JDeUFFUVFGcUlRRkIvZ0FoRUF5M0Fnc2dCRUVCYWlFQlFmOEFJUkFNdGdJTEFrQWdCQ0FDUncwQVFaVUJJUkFNendJTEFrQUNRQ0FFTFFBQVFiOS9hZzREQUxnQkFiZ0JDeUFFUVFGcUlRRkIvUUFoRUF5MkFnc2dCRUVCYWlFRVFZQUJJUkFNdFFJTEFrQWdCQ0FDUncwQVFaWUJJUkFNemdJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBV29oRUFKQUEwQWdCQzBBQUNBQlFhZlBnSUFBYWkwQUFFY050Z0VnQVVFQlJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWllCSVJBTXpnSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkN5RVFETE1CQ3dKQUlBUWdBa2NOQUVHWEFTRVFETTBDQ3dKQUFrQUNRQUpBSUFRdEFBQkJVMm9PSXdDNEFiZ0J1QUc0QWJnQnVBRzRBYmdCdUFHNEFiZ0J1QUc0QWJnQnVBRzRBYmdCdUFHNEFiZ0J1QUc0QWJnQkFiZ0J1QUc0QWJnQnVBRUN1QUc0QWJnQkE3Z0JDeUFFUVFGcUlRRkIrd0FoRUF5MkFnc2dCRUVCYWlFQlFmd0FJUkFNdFFJTElBUkJBV29oQkVHQkFTRVFETFFDQ3lBRVFRRnFJUVJCZ2dFaEVBeXpBZ3NDUUNBRUlBSkhEUUJCbUFFaEVBek1BZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFRWFpRVFBa0FEUUNBRUxRQUFJQUZCcWMrQWdBQnFMUUFBUncyMEFTQUJRUVJHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQm1BRWhFQXpNQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVaSVJBTXNRRUxBa0FnQkNBQ1J3MEFRWmtCSVJBTXl3SUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQldvaEVBSkFBMEFnQkMwQUFDQUJRYTdQZ0lBQWFpMEFBRWNOc3dFZ0FVRUZSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVprQklSQU15d0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJCaUVRRExBQkN3SkFJQVFnQWtjTkFFR2FBU0VRRE1vQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUZxSVJBQ1FBTkFJQVF0QUFBZ0FVRzB6NENBQUdvdEFBQkhEYklCSUFGQkFVWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdhQVNFUURNb0NDeUFBUVFBMkFnQWdFRUVCYWlFQlFSd2hFQXl2QVFzQ1FDQUVJQUpIRFFCQm13RWhFQXpKQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUJhaUVRQWtBRFFDQUVMUUFBSUFGQnRzK0FnQUJxTFFBQVJ3MnhBU0FCUVFGR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJtd0VoRUF6SkFnc2dBRUVBTmdJQUlCQkJBV29oQVVFbklSQU1yZ0VMQWtBZ0JDQUNSdzBBUVp3QklSQU15QUlMQWtBQ1FDQUVMUUFBUWF4L2FnNENBQUd4QVFzZ0JFRUJhaUVFUVlZQklSQU1yd0lMSUFSQkFXb2hCRUdIQVNFUURLNENDd0pBSUFRZ0FrY05BRUdkQVNFUURNY0NDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFGcUlSQUNRQU5BSUFRdEFBQWdBVUc0ejRDQUFHb3RBQUJIRGE4QklBRkJBVVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHZEFTRVFETWNDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRU1loRUF5c0FRc0NRQ0FFSUFKSERRQkJuZ0VoRUF6R0Fnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVCYWlFUUFrQURRQ0FFTFFBQUlBRkJ1cytBZ0FCcUxRQUFSdzJ1QVNBQlFRRkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCbmdFaEVBekdBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRURJUkFNcXdFTEFrQWdCQ0FDUncwQVFaOEJJUkFNeFFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBbW9oRUFKQUEwQWdCQzBBQUNBQlFlM1BnSUFBYWkwQUFFY05yUUVnQVVFQ1JnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWjhCSVJBTXhRSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkRDRVFES29CQ3dKQUlBUWdBa2NOQUVHZ0FTRVFETVFDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRTnFJUkFDUUFOQUlBUXRBQUFnQVVHOHo0Q0FBR290QUFCSERhd0JJQUZCQTBZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR2dBU0VRRE1RQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVEwaEVBeXBBUXNDUUNBRUlBSkhEUUJCb1FFaEVBekRBZ3NDUUFKQUlBUXRBQUJCdW45cURnc0FyQUdzQWF3QnJBR3NBYXdCckFHc0Fhd0JBYXdCQ3lBRVFRRnFJUVJCaXdFaEVBeXFBZ3NnQkVFQmFpRUVRWXdCSVJBTXFRSUxBa0FnQkNBQ1J3MEFRYUlCSVJBTXdnSUxJQVF0QUFCQjBBQkhEYWtCSUFSQkFXb2hCQXpwQVFzQ1FDQUVJQUpIRFFCQm93RWhFQXpCQWdzQ1FBSkFJQVF0QUFCQnQzOXFEZ2NCcWdHcUFhb0JxZ0dxQVFDcUFRc2dCRUVCYWlFRVFZNEJJUkFNcUFJTElBUkJBV29oQVVFaUlSQU1wZ0VMQWtBZ0JDQUNSdzBBUWFRQklSQU13QUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFXb2hFQUpBQTBBZ0JDMEFBQ0FCUWNEUGdJQUFhaTBBQUVjTnFBRWdBVUVCUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFhUUJJUkFNd0FJTElBQkJBRFlDQUNBUVFRRnFJUUZCSFNFUURLVUJDd0pBSUFRZ0FrY05BRUdsQVNFUURMOENDd0pBQWtBZ0JDMEFBRUd1ZjJvT0F3Q29BUUdvQVFzZ0JFRUJhaUVFUVpBQklSQU1wZ0lMSUFSQkFXb2hBVUVFSVJBTXBBRUxBa0FnQkNBQ1J3MEFRYVlCSVJBTXZnSUxBa0FDUUFKQUFrQUNRQ0FFTFFBQVFiOS9hZzRWQUtvQnFnR3FBYW9CcWdHcUFhb0JxZ0dxQWFvQkFhb0JxZ0VDcWdHcUFRT3FBYW9CQktvQkN5QUVRUUZxSVFSQmlBRWhFQXlvQWdzZ0JFRUJhaUVFUVlrQklSQU1wd0lMSUFSQkFXb2hCRUdLQVNFUURLWUNDeUFFUVFGcUlRUkJqd0VoRUF5bEFnc2dCRUVCYWlFRVFaRUJJUkFNcEFJTEFrQWdCQ0FDUncwQVFhY0JJUkFNdlFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBbW9oRUFKQUEwQWdCQzBBQUNBQlFlM1BnSUFBYWkwQUFFY05wUUVnQVVFQ1JnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRYWNCSVJBTXZRSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkVTRVFES0lCQ3dKQUlBUWdBa2NOQUVHb0FTRVFETHdDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRSnFJUkFDUUFOQUlBUXRBQUFnQVVIQ3o0Q0FBR290QUFCSERhUUJJQUZCQWtZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR29BU0VRREx3Q0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVN3aEVBeWhBUXNDUUNBRUlBSkhEUUJCcVFFaEVBeTdBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFRWFpRVFBa0FEUUNBRUxRQUFJQUZCeGMrQWdBQnFMUUFBUncyakFTQUJRUVJHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQnFRRWhFQXk3QWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVySVJBTW9BRUxBa0FnQkNBQ1J3MEFRYW9CSVJBTXVnSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQW1vaEVBSkFBMEFnQkMwQUFDQUJRY3JQZ0lBQWFpMEFBRWNOb2dFZ0FVRUNSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWFvQklSQU11Z0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJGQ0VRREo4QkN3SkFJQVFnQWtjTkFFR3JBU0VRRExrQ0N3SkFBa0FDUUFKQUlBUXRBQUJCdm45cURnOEFBUUtrQWFRQnBBR2tBYVFCcEFHa0FhUUJwQUdrQWFRQkE2UUJDeUFFUVFGcUlRUkJrd0VoRUF5aUFnc2dCRUVCYWlFRVFaUUJJUkFNb1FJTElBUkJBV29oQkVHVkFTRVFES0FDQ3lBRVFRRnFJUVJCbGdFaEVBeWZBZ3NDUUNBRUlBSkhEUUJCckFFaEVBeTRBZ3NnQkMwQUFFSEZBRWNObndFZ0JFRUJhaUVFRE9BQkN3SkFJQVFnQWtjTkFFR3RBU0VRRExjQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUpxSVJBQ1FBTkFJQVF0QUFBZ0FVSE56NENBQUdvdEFBQkhEWjhCSUFGQkFrWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUd0QVNFUURMY0NDeUFBUVFBMkFnQWdFRUVCYWlFQlFRNGhFQXljQVFzQ1FDQUVJQUpIRFFCQnJnRWhFQXkyQWdzZ0JDMEFBRUhRQUVjTm5RRWdCRUVCYWlFQlFTVWhFQXliQVFzQ1FDQUVJQUpIRFFCQnJ3RWhFQXkxQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUlhaUVRQWtBRFFDQUVMUUFBSUFGQjBNK0FnQUJxTFFBQVJ3MmRBU0FCUVFoR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJyd0VoRUF5MUFnc2dBRUVBTmdJQUlCQkJBV29oQVVFcUlSQU1tZ0VMQWtBZ0JDQUNSdzBBUWJBQklSQU10QUlMQWtBQ1FDQUVMUUFBUWF0L2FnNExBSjBCblFHZEFaMEJuUUdkQVowQm5RR2RBUUdkQVFzZ0JFRUJhaUVFUVpvQklSQU1td0lMSUFSQkFXb2hCRUdiQVNFUURKb0NDd0pBSUFRZ0FrY05BRUd4QVNFUURMTUNDd0pBQWtBZ0JDMEFBRUcvZjJvT0ZBQ2NBWndCbkFHY0Fad0JuQUdjQVp3Qm5BR2NBWndCbkFHY0Fad0JuQUdjQVp3Qm5BRUJuQUVMSUFSQkFXb2hCRUdaQVNFUURKb0NDeUFFUVFGcUlRUkJuQUVoRUF5WkFnc0NRQ0FFSUFKSERRQkJzZ0VoRUF5eUFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVEYWlFUUFrQURRQ0FFTFFBQUlBRkIyYytBZ0FCcUxRQUFSdzJhQVNBQlFRTkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCc2dFaEVBeXlBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRWhJUkFNbHdFTEFrQWdCQ0FDUncwQVFiTUJJUkFNc1FJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJCbW9oRUFKQUEwQWdCQzBBQUNBQlFkM1BnSUFBYWkwQUFFY05tUUVnQVVFR1JnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRYk1CSVJBTXNRSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkdpRVFESllCQ3dKQUlBUWdBa2NOQUVHMEFTRVFETEFDQ3dKQUFrQUNRQ0FFTFFBQVFidC9hZzRSQUpvQm1nR2FBWm9CbWdHYUFab0JtZ0dhQVFHYUFab0JtZ0dhQVpvQkFwb0JDeUFFUVFGcUlRUkJuUUVoRUF5WUFnc2dCRUVCYWlFRVFaNEJJUkFNbHdJTElBUkJBV29oQkVHZkFTRVFESllDQ3dKQUlBUWdBa2NOQUVHMUFTRVFESzhDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRVnFJUkFDUUFOQUlBUXRBQUFnQVVIa3o0Q0FBR290QUFCSERaY0JJQUZCQlVZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFRzFBU0VRREs4Q0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVNnaEVBeVVBUXNDUUNBRUlBSkhEUUJCdGdFaEVBeXVBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFQ2FpRVFBa0FEUUNBRUxRQUFJQUZCNnMrQWdBQnFMUUFBUncyV0FTQUJRUUpHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQnRnRWhFQXl1QWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVISVJBTWt3RUxBa0FnQkNBQ1J3MEFRYmNCSVJBTXJRSUxBa0FDUUNBRUxRQUFRYnQvYWc0T0FKWUJsZ0dXQVpZQmxnR1dBWllCbGdHV0FaWUJsZ0dXQVFHV0FRc2dCRUVCYWlFRVFhRUJJUkFNbEFJTElBUkJBV29oQkVHaUFTRVFESk1DQ3dKQUlBUWdBa2NOQUVHNEFTRVFES3dDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRSnFJUkFDUUFOQUlBUXRBQUFnQVVIdHo0Q0FBR290QUFCSERaUUJJQUZCQWtZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFRzRBU0VRREt3Q0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVJJaEVBeVJBUXNDUUNBRUlBSkhEUUJCdVFFaEVBeXJBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFQmFpRVFBa0FEUUNBRUxRQUFJQUZCOE0rQWdBQnFMUUFBUncyVEFTQUJRUUZHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQnVRRWhFQXlyQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVnSVJBTWtBRUxBa0FnQkNBQ1J3MEFRYm9CSVJBTXFnSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQVdvaEVBSkFBMEFnQkMwQUFDQUJRZkxQZ0lBQWFpMEFBRWNOa2dFZ0FVRUJSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWJvQklSQU1xZ0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJEeUVRREk4QkN3SkFJQVFnQWtjTkFFRzdBU0VRREtrQ0N3SkFBa0FnQkMwQUFFRzNmMm9PQndDU0FaSUJrZ0dTQVpJQkFaSUJDeUFFUVFGcUlRUkJwUUVoRUF5UUFnc2dCRUVCYWlFRVFhWUJJUkFNandJTEFrQWdCQ0FDUncwQVFid0JJUkFNcUFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJCMm9oRUFKQUEwQWdCQzBBQUNBQlFmVFBnSUFBYWkwQUFFY05rQUVnQVVFSFJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRYndCSVJBTXFBSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkd5RVFESTBCQ3dKQUlBUWdBa2NOQUVHOUFTRVFES2NDQ3dKQUFrQUNRQ0FFTFFBQVFiNS9hZzRTQUpFQmtRR1JBWkVCa1FHUkFaRUJrUUdSQVFHUkFaRUJrUUdSQVpFQmtRRUNrUUVMSUFSQkFXb2hCRUdrQVNFUURJOENDeUFFUVFGcUlRUkJwd0VoRUF5T0Fnc2dCRUVCYWlFRVFhZ0JJUkFNalFJTEFrQWdCQ0FDUncwQVFiNEJJUkFNcGdJTElBUXRBQUJCemdCSERZMEJJQVJCQVdvaEJBelBBUXNDUUNBRUlBSkhEUUJCdndFaEVBeWxBZ3NDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FDQUVMUUFBUWI5L2FnNFZBQUVDQTV3QkJBVUduQUdjQVp3QkJ3Z0pDZ3VjQVF3TkRnK2NBUXNnQkVFQmFpRUJRZWdBSVJBTW1nSUxJQVJCQVdvaEFVSHBBQ0VRREprQ0N5QUVRUUZxSVFGQjdnQWhFQXlZQWdzZ0JFRUJhaUVCUWZJQUlSQU1sd0lMSUFSQkFXb2hBVUh6QUNFUURKWUNDeUFFUVFGcUlRRkI5Z0FoRUF5VkFnc2dCRUVCYWlFQlFmY0FJUkFNbEFJTElBUkJBV29oQVVINkFDRVFESk1DQ3lBRVFRRnFJUVJCZ3dFaEVBeVNBZ3NnQkVFQmFpRUVRWVFCSVJBTWtRSUxJQVJCQVdvaEJFR0ZBU0VRREpBQ0N5QUVRUUZxSVFSQmtnRWhFQXlQQWdzZ0JFRUJhaUVFUVpnQklSQU1qZ0lMSUFSQkFXb2hCRUdnQVNFUURJMENDeUFFUVFGcUlRUkJvd0VoRUF5TUFnc2dCRUVCYWlFRVFhb0JJUkFNaXdJTEFrQWdCQ0FDUmcwQUlBQkJrSUNBZ0FBMkFnZ2dBQ0FFTmdJRVFhc0JJUkFNaXdJTFFjQUJJUkFNb3dJTElBQWdCU0FDRUtxQWdJQUFJZ0VOaXdFZ0JTRUJERndMQWtBZ0JpQUNSZzBBSUFaQkFXb2hCUXlOQVF0QndnRWhFQXloQWdzRFFBSkFJQkF0QUFCQmRtb09CSXdCQUFDUEFRQUxJQkJCQVdvaUVDQUNSdzBBQzBIREFTRVFES0FDQ3dKQUlBY2dBa1lOQUNBQVFaR0FnSUFBTmdJSUlBQWdCellDQkNBSElRRkJBU0VRREljQ0MwSEVBU0VRREo4Q0N3SkFJQWNnQWtjTkFFSEZBU0VRREo4Q0N3SkFBa0FnQnkwQUFFRjJhZzRFQWM0QnpnRUF6Z0VMSUFkQkFXb2hCZ3lOQVFzZ0IwRUJhaUVGRElrQkN3SkFJQWNnQWtjTkFFSEdBU0VRREo0Q0N3SkFBa0FnQnkwQUFFRjJhZzRYQVk4Qmp3RUJqd0dQQVk4Qmp3R1BBWThCandHUEFZOEJqd0dQQVk4Qmp3R1BBWThCandHUEFZOEJBSThCQ3lBSFFRRnFJUWNMUWJBQklSQU1oQUlMQWtBZ0NDQUNSdzBBUWNnQklSQU1uUUlMSUFndEFBQkJJRWNOalFFZ0FFRUFPd0V5SUFoQkFXb2hBVUd6QVNFUURJTUNDeUFCSVJjQ1FBTkFJQmNpQnlBQ1JnMEJJQWN0QUFCQlVHcEIvd0Z4SWhCQkNrOE56QUVDUUNBQUx3RXlJaFJCbVROTERRQWdBQ0FVUVFwc0loUTdBVElnRUVILy93TnpJQlJCL3Y4RGNVa05BQ0FIUVFGcUlSY2dBQ0FVSUJCcUloQTdBVElnRUVILy93TnhRZWdIU1EwQkN3dEJBQ0VRSUFCQkFEWUNIQ0FBUWNHSmdJQUFOZ0lRSUFCQkRUWUNEQ0FBSUFkQkFXbzJBaFFNbkFJTFFjY0JJUkFNbXdJTElBQWdDQ0FDRUs2QWdJQUFJaEJGRGNvQklCQkJGVWNOakFFZ0FFSElBVFlDSENBQUlBZzJBaFFnQUVISmw0Q0FBRFlDRUNBQVFSVTJBZ3hCQUNFUURKb0NDd0pBSUFrZ0FrY05BRUhNQVNFUURKb0NDMEVBSVJSQkFTRVhRUUVoRmtFQUlSQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQWdDUzBBQUVGUWFnNEtsZ0dWQVFBQkFnTUVCUVlJbHdFTFFRSWhFQXdHQzBFRElSQU1CUXRCQkNFUURBUUxRUVVoRUF3REMwRUdJUkFNQWd0QkJ5RVFEQUVMUVFnaEVBdEJBQ0VYUVFBaEZrRUFJUlFNamdFTFFRa2hFRUVCSVJSQkFDRVhRUUFoRmd5TkFRc0NRQ0FLSUFKSERRQkJ6Z0VoRUF5WkFnc2dDaTBBQUVFdVJ3Mk9BU0FLUVFGcUlRa015Z0VMSUFzZ0FrY05qZ0ZCMEFFaEVBeVhBZ3NDUUNBTElBSkdEUUFnQUVHT2dJQ0FBRFlDQ0NBQUlBczJBZ1JCdHdFaEVBeitBUXRCMFFFaEVBeVdBZ3NDUUNBRUlBSkhEUUJCMGdFaEVBeVdBZ3NnQWlBRWF5QUFLQUlBSWhCcUlSUWdCQ0FRYTBFRWFpRUxBMEFnQkMwQUFDQVFRZnpQZ0lBQWFpMEFBRWNOamdFZ0VFRUVSZzNwQVNBUVFRRnFJUkFnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVIU0FTRVFESlVDQ3lBQUlBd2dBaENzZ0lDQUFDSUJEWTBCSUF3aEFReTRBUXNDUUNBRUlBSkhEUUJCMUFFaEVBeVVBZ3NnQWlBRWF5QUFLQUlBSWhCcUlSUWdCQ0FRYTBFQmFpRU1BMEFnQkMwQUFDQVFRWUhRZ0lBQWFpMEFBRWNOandFZ0VFRUJSZzJPQVNBUVFRRnFJUkFnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVIVUFTRVFESk1DQ3dKQUlBUWdBa2NOQUVIV0FTRVFESk1DQ3lBQ0lBUnJJQUFvQWdBaUVHb2hGQ0FFSUJCclFRSnFJUXNEUUNBRUxRQUFJQkJCZzlDQWdBQnFMUUFBUncyT0FTQVFRUUpHRFpBQklCQkJBV29oRUNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFkWUJJUkFNa2dJTEFrQWdCQ0FDUncwQVFkY0JJUkFNa2dJTEFrQUNRQ0FFTFFBQVFidC9hZzRRQUk4Qmp3R1BBWThCandHUEFZOEJqd0dQQVk4Qmp3R1BBWThCandFQmp3RUxJQVJCQVdvaEJFRzdBU0VRRFBrQkN5QUVRUUZxSVFSQnZBRWhFQXo0QVFzQ1FDQUVJQUpIRFFCQjJBRWhFQXlSQWdzZ0JDMEFBRUhJQUVjTmpBRWdCRUVCYWlFRURNUUJDd0pBSUFRZ0FrWU5BQ0FBUVpDQWdJQUFOZ0lJSUFBZ0JEWUNCRUcrQVNFUURQY0JDMEhaQVNFUURJOENDd0pBSUFRZ0FrY05BRUhhQVNFUURJOENDeUFFTFFBQVFjZ0FSZzNEQVNBQVFRRTZBQ2dNdVFFTElBQkJBam9BTHlBQUlBUWdBaENtZ0lDQUFDSVFEWTBCUWNJQklSQU05QUVMSUFBdEFDaEJmMm9PQXJjQnVRRzRBUXNEUUFKQUlBUXRBQUJCZG1vT0JBQ09BWTRCQUk0QkN5QUVRUUZxSWdRZ0FrY05BQXRCM1FFaEVBeUxBZ3NnQUVFQU9nQXZJQUF0QUMxQkJIRkZEWVFDQ3lBQVFRQTZBQzhnQUVFQk9nQTBJQUVoQVF5TUFRc2dFRUVWUmczYUFTQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnA0NkFnQUEyQWhBZ0FFRVNOZ0lNUVFBaEVBeUlBZ3NDUUNBQUlCQWdBaEMwZ0lDQUFDSUVEUUFnRUNFQkRJRUNDd0pBSUFSQkZVY05BQ0FBUVFNMkFod2dBQ0FRTmdJVUlBQkJzSmlBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXlJQWdzZ0FFRUFOZ0ljSUFBZ0VEWUNGQ0FBUWFlT2dJQUFOZ0lRSUFCQkVqWUNERUVBSVJBTWh3SUxJQkJCRlVZTjFnRWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFkcU5nSUFBTmdJUUlBQkJGRFlDREVFQUlSQU1oZ0lMSUFBb0FnUWhGeUFBUVFBMkFnUWdFQ0FScDJvaUZpRUJJQUFnRnlBUUlCWWdGQnNpRUJDMWdJQ0FBQ0lVUlEyTkFTQUFRUWMyQWh3Z0FDQVFOZ0lVSUFBZ0ZEWUNERUVBSVJBTWhRSUxJQUFnQUM4Qk1FR0FBWEk3QVRBZ0FTRUJDMEVxSVJBTTZnRUxJQkJCRlVZTjBRRWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFZT01nSUFBTmdJUUlBQkJFellDREVFQUlSQU1nZ0lMSUJCQkZVWU56d0VnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRWnFQZ0lBQU5nSVFJQUJCSWpZQ0RFRUFJUkFNZ1FJTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkMzZ0lDQUFDSVFEUUFnQVVFQmFpRUJESTBCQ3lBQVFRdzJBaHdnQUNBUU5nSU1JQUFnQVVFQmFqWUNGRUVBSVJBTWdBSUxJQkJCRlVZTnpBRWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFacVBnSUFBTmdJUUlBQkJJallDREVFQUlSQU0vd0VMSUFBb0FnUWhFQ0FBUVFBMkFnUUNRQ0FBSUJBZ0FSQzNnSUNBQUNJUURRQWdBVUVCYWlFQkRJd0JDeUFBUVEwMkFod2dBQ0FRTmdJTUlBQWdBVUVCYWpZQ0ZFRUFJUkFNL2dFTElCQkJGVVlOeVFFZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWNhTWdJQUFOZ0lRSUFCQkl6WUNERUVBSVJBTS9RRUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDNWdJQ0FBQ0lRRFFBZ0FVRUJhaUVCRElzQkN5QUFRUTQyQWh3Z0FDQVFOZ0lNSUFBZ0FVRUJhallDRkVFQUlSQU0vQUVMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUhBbFlDQUFEWUNFQ0FBUVFJMkFneEJBQ0VRRFBzQkN5QVFRUlZHRGNVQklBQkJBRFlDSENBQUlBRTJBaFFnQUVIR2pJQ0FBRFlDRUNBQVFTTTJBZ3hCQUNFUURQb0JDeUFBUVJBMkFod2dBQ0FCTmdJVUlBQWdFRFlDREVFQUlSQU0rUUVMSUFBb0FnUWhCQ0FBUVFBMkFnUUNRQ0FBSUFRZ0FSQzVnSUNBQUNJRURRQWdBVUVCYWlFQkRQRUJDeUFBUVJFMkFod2dBQ0FFTmdJTUlBQWdBVUVCYWpZQ0ZFRUFJUkFNK0FFTElCQkJGVVlOd1FFZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWNhTWdJQUFOZ0lRSUFCQkl6WUNERUVBSVJBTTl3RUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDNWdJQ0FBQ0lRRFFBZ0FVRUJhaUVCRElnQkN5QUFRUk0yQWh3Z0FDQVFOZ0lNSUFBZ0FVRUJhallDRkVFQUlSQU05Z0VMSUFBb0FnUWhCQ0FBUVFBMkFnUUNRQ0FBSUFRZ0FSQzVnSUNBQUNJRURRQWdBVUVCYWlFQkRPMEJDeUFBUVJRMkFod2dBQ0FFTmdJTUlBQWdBVUVCYWpZQ0ZFRUFJUkFNOVFFTElCQkJGVVlOdlFFZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVpxUGdJQUFOZ0lRSUFCQklqWUNERUVBSVJBTTlBRUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDM2dJQ0FBQ0lRRFFBZ0FVRUJhaUVCRElZQkN5QUFRUlkyQWh3Z0FDQVFOZ0lNSUFBZ0FVRUJhallDRkVFQUlSQU04d0VMSUFBb0FnUWhCQ0FBUVFBMkFnUUNRQ0FBSUFRZ0FSQzNnSUNBQUNJRURRQWdBVUVCYWlFQkRPa0JDeUFBUVJjMkFod2dBQ0FFTmdJTUlBQWdBVUVCYWpZQ0ZFRUFJUkFNOGdFTElBQkJBRFlDSENBQUlBRTJBaFFnQUVITms0Q0FBRFlDRUNBQVFRdzJBZ3hCQUNFUURQRUJDMElCSVJFTElCQkJBV29oQVFKQUlBQXBBeUFpRWtMLy8vLy8vLy8vL3c5V0RRQWdBQ0FTUWdTR0lCR0VOd01nSUFFaEFReUVBUXNnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRYTJKZ0lBQU5nSVFJQUJCRERZQ0RFRUFJUkFNN3dFTElBQkJBRFlDSENBQUlCQTJBaFFnQUVITms0Q0FBRFlDRUNBQVFRdzJBZ3hCQUNFUURPNEJDeUFBS0FJRUlSY2dBRUVBTmdJRUlCQWdFYWRxSWhZaEFTQUFJQmNnRUNBV0lCUWJJaEFRdFlDQWdBQWlGRVVOY3lBQVFRVTJBaHdnQUNBUU5nSVVJQUFnRkRZQ0RFRUFJUkFNN1FFTElBQkJBRFlDSENBQUlCQTJBaFFnQUVHcW5JQ0FBRFlDRUNBQVFRODJBZ3hCQUNFUURPd0JDeUFBSUJBZ0FoQzBnSUNBQUNJQkRRRWdFQ0VCQzBFT0lSQU0wUUVMQWtBZ0FVRVZSdzBBSUFCQkFqWUNIQ0FBSUJBMkFoUWdBRUd3bUlDQUFEWUNFQ0FBUVJVMkFneEJBQ0VRRE9vQkN5QUFRUUEyQWh3Z0FDQVFOZ0lVSUFCQnA0NkFnQUEyQWhBZ0FFRVNOZ0lNUVFBaEVBenBBUXNnQVVFQmFpRVFBa0FnQUM4Qk1DSUJRWUFCY1VVTkFBSkFJQUFnRUNBQ0VMdUFnSUFBSWdFTkFDQVFJUUVNY0FzZ0FVRVZSdzI2QVNBQVFRVTJBaHdnQUNBUU5nSVVJQUJCK1plQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF6cEFRc0NRQ0FCUWFBRWNVR2dCRWNOQUNBQUxRQXRRUUp4RFFBZ0FFRUFOZ0ljSUFBZ0VEWUNGQ0FBUVphVGdJQUFOZ0lRSUFCQkJEWUNERUVBSVJBTTZRRUxJQUFnRUNBQ0VMMkFnSUFBR2lBUUlRRUNRQUpBQWtBQ1FBSkFJQUFnRUNBQ0VMT0FnSUFBRGhZQ0FRQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUURCQXNnQUVFQk9nQXVDeUFBSUFBdkFUQkJ3QUJ5T3dFd0lCQWhBUXRCSmlFUURORUJDeUFBUVNNMkFod2dBQ0FRTmdJVUlBQkJwWmFBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXpwQVFzZ0FFRUFOZ0ljSUFBZ0VEWUNGQ0FBUWRXTGdJQUFOZ0lRSUFCQkVUWUNERUVBSVJBTTZBRUxJQUF0QUMxQkFYRkZEUUZCd3dFaEVBek9BUXNDUUNBTklBSkdEUUFEUUFKQUlBMHRBQUJCSUVZTkFDQU5JUUVNeEFFTElBMUJBV29pRFNBQ1J3MEFDMEVsSVJBTTV3RUxRU1VoRUF6bUFRc2dBQ2dDQkNFRUlBQkJBRFlDQkNBQUlBUWdEUkN2Z0lDQUFDSUVSUTJ0QVNBQVFTWTJBaHdnQUNBRU5nSU1JQUFnRFVFQmFqWUNGRUVBSVJBTTVRRUxJQkJCRlVZTnF3RWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFmMk5nSUFBTmdJUUlBQkJIVFlDREVFQUlSQU01QUVMSUFCQkp6WUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXpqQVFzZ0VDRUJRUUVoRkFKQUFrQUNRQUpBQWtBQ1FBSkFJQUF0QUN4QmZtb09Cd1lGQlFNQkFnQUZDeUFBSUFBdkFUQkJDSEk3QVRBTUF3dEJBaUVVREFFTFFRUWhGQXNnQUVFQk9nQXNJQUFnQUM4Qk1DQVVjanNCTUFzZ0VDRUJDMEVySVJBTXlnRUxJQUJCQURZQ0hDQUFJQkEyQWhRZ0FFR3Jrb0NBQURZQ0VDQUFRUXMyQWd4QkFDRVFET0lCQ3lBQVFRQTJBaHdnQUNBQk5nSVVJQUJCNFkrQWdBQTJBaEFnQUVFS05nSU1RUUFoRUF6aEFRc2dBRUVBT2dBc0lCQWhBUXk5QVFzZ0VDRUJRUUVoRkFKQUFrQUNRQUpBQWtBZ0FDMEFMRUY3YWc0RUF3RUNBQVVMSUFBZ0FDOEJNRUVJY2pzQk1Bd0RDMEVDSVJRTUFRdEJCQ0VVQ3lBQVFRRTZBQ3dnQUNBQUx3RXdJQlJ5T3dFd0N5QVFJUUVMUVNraEVBekZBUXNnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZkNVZ0lBQU5nSVFJQUJCQXpZQ0RFRUFJUkFNM1FFTEFrQWdEaTBBQUVFTlJ3MEFJQUFvQWdRaEFTQUFRUUEyQWdRQ1FDQUFJQUVnRGhDeGdJQ0FBQ0lCRFFBZ0RrRUJhaUVCREhVTElBQkJMRFlDSENBQUlBRTJBZ3dnQUNBT1FRRnFOZ0lVUVFBaEVBemRBUXNnQUMwQUxVRUJjVVVOQVVIRUFTRVFETU1CQ3dKQUlBNGdBa2NOQUVFdElSQU0zQUVMQWtBQ1FBTkFBa0FnRGkwQUFFRjJhZzRFQWdBQUF3QUxJQTVCQVdvaURpQUNSdzBBQzBFdElSQU0zUUVMSUFBb0FnUWhBU0FBUVFBMkFnUUNRQ0FBSUFFZ0RoQ3hnSUNBQUNJQkRRQWdEaUVCREhRTElBQkJMRFlDSENBQUlBNDJBaFFnQUNBQk5nSU1RUUFoRUF6Y0FRc2dBQ2dDQkNFQklBQkJBRFlDQkFKQUlBQWdBU0FPRUxHQWdJQUFJZ0VOQUNBT1FRRnFJUUVNY3dzZ0FFRXNOZ0ljSUFBZ0FUWUNEQ0FBSUE1QkFXbzJBaFJCQUNFUUROc0JDeUFBS0FJRUlRUWdBRUVBTmdJRUlBQWdCQ0FPRUxHQWdJQUFJZ1FOb0FFZ0RpRUJETTRCQ3lBUVFTeEhEUUVnQVVFQmFpRVFRUUVoQVFKQUFrQUNRQUpBQWtBZ0FDMEFMRUY3YWc0RUF3RUNCQUFMSUJBaEFRd0VDMEVDSVFFTUFRdEJCQ0VCQ3lBQVFRRTZBQ3dnQUNBQUx3RXdJQUZ5T3dFd0lCQWhBUXdCQ3lBQUlBQXZBVEJCQ0hJN0FUQWdFQ0VCQzBFNUlSQU12d0VMSUFCQkFEb0FMQ0FCSVFFTFFUUWhFQXk5QVFzZ0FDQUFMd0V3UVNCeU93RXdJQUVoQVF3Q0N5QUFLQUlFSVFRZ0FFRUFOZ0lFQWtBZ0FDQUVJQUVRc1lDQWdBQWlCQTBBSUFFaEFRekhBUXNnQUVFM05nSWNJQUFnQVRZQ0ZDQUFJQVEyQWd4QkFDRVFETlFCQ3lBQVFRZzZBQ3dnQVNFQkMwRXdJUkFNdVFFTEFrQWdBQzBBS0VFQlJnMEFJQUVoQVF3RUN5QUFMUUF0UVFoeFJRMlRBU0FCSVFFTUF3c2dBQzBBTUVFZ2NRMlVBVUhGQVNFUURMY0JDd0pBSUE4Z0FrWU5BQUpBQTBBQ1FDQVBMUUFBUVZCcUlnRkIvd0Z4UVFwSkRRQWdEeUVCUVRVaEVBeTZBUXNnQUNrRElDSVJRcG16NXN5WnMrYk1HVllOQVNBQUlCRkNDbjRpRVRjRElDQVJJQUd0UXY4Qmd5SVNRbitGVmcwQklBQWdFU0FTZkRjRElDQVBRUUZxSWc4Z0FrY05BQXRCT1NFUURORUJDeUFBS0FJRUlRSWdBRUVBTmdJRUlBQWdBaUFQUVFGcUlnUVFzWUNBZ0FBaUFnMlZBU0FFSVFFTXd3RUxRVGtoRUF6UEFRc0NRQ0FBTHdFd0lnRkJDSEZGRFFBZ0FDMEFLRUVCUncwQUlBQXRBQzFCQ0hGRkRaQUJDeUFBSUFGQjkvc0RjVUdBQkhJN0FUQWdEeUVCQzBFM0lSQU10QUVMSUFBZ0FDOEJNRUVRY2pzQk1BeXJBUXNnRUVFVlJnMkxBU0FBUVFBMkFod2dBQ0FCTmdJVUlBQkI4STZBZ0FBMkFoQWdBRUVjTmdJTVFRQWhFQXpMQVFzZ0FFSERBRFlDSENBQUlBRTJBZ3dnQUNBTlFRRnFOZ0lVUVFBaEVBektBUXNDUUNBQkxRQUFRVHBIRFFBZ0FDZ0NCQ0VRSUFCQkFEWUNCQUpBSUFBZ0VDQUJFSytBZ0lBQUloQU5BQ0FCUVFGcUlRRU1Zd3NnQUVIREFEWUNIQ0FBSUJBMkFnd2dBQ0FCUVFGcU5nSVVRUUFoRUF6S0FRc2dBRUVBTmdJY0lBQWdBVFlDRkNBQVFiR1JnSUFBTmdJUUlBQkJDallDREVFQUlSQU15UUVMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUdnbVlDQUFEWUNFQ0FBUVI0MkFneEJBQ0VRRE1nQkN5QUFRUUEyQWdBTElBQkJnQkk3QVNvZ0FDQVhRUUZxSWdFZ0FoQ29nSUNBQUNJUURRRWdBU0VCQzBISEFDRVFES3dCQ3lBUVFSVkhEWU1CSUFCQjBRQTJBaHdnQUNBQk5nSVVJQUJCNDVlQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF6RUFRc2dBQ2dDQkNFUUlBQkJBRFlDQkFKQUlBQWdFQ0FCRUtlQWdJQUFJaEFOQUNBQklRRU1YZ3NnQUVIU0FEWUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXpEQVFzZ0FFRUFOZ0ljSUFBZ0ZEWUNGQ0FBUWNHb2dJQUFOZ0lRSUFCQkJ6WUNEQ0FBUVFBMkFnQkJBQ0VRRE1JQkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRcDRDQWdBQWlFQTBBSUFFaEFReGRDeUFBUWRNQU5nSWNJQUFnQVRZQ0ZDQUFJQkEyQWd4QkFDRVFETUVCQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFZQ1JnSUFBTmdJUUlBQkJDVFlDREF6QUFRc2dFRUVWUmcxOUlBQkJBRFlDSENBQUlBRTJBaFFnQUVHVWpZQ0FBRFlDRUNBQVFTRTJBZ3hCQUNFUURMOEJDMEVCSVJaQkFDRVhRUUFoRkVFQklSQUxJQUFnRURvQUt5QUJRUUZxSVFFQ1FBSkFJQUF0QUMxQkVIRU5BQUpBQWtBQ1FDQUFMUUFxRGdNQkFBSUVDeUFXUlEwRERBSUxJQlFOQVF3Q0N5QVhSUTBCQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVFyWUNBZ0FBaUVBMEFJQUVoQVF4Y0N5QUFRZGdBTmdJY0lBQWdBVFlDRkNBQUlCQTJBZ3hCQUNFUURMNEJDeUFBS0FJRUlRUWdBRUVBTmdJRUFrQWdBQ0FFSUFFUXJZQ0FnQUFpQkEwQUlBRWhBUXl0QVFzZ0FFSFpBRFlDSENBQUlBRTJBaFFnQUNBRU5nSU1RUUFoRUF5OUFRc2dBQ2dDQkNFRUlBQkJBRFlDQkFKQUlBQWdCQ0FCRUsyQWdJQUFJZ1FOQUNBQklRRU1xd0VMSUFCQjJnQTJBaHdnQUNBQk5nSVVJQUFnQkRZQ0RFRUFJUkFNdkFFTElBQW9BZ1FoQkNBQVFRQTJBZ1FDUUNBQUlBUWdBUkN0Z0lDQUFDSUVEUUFnQVNFQkRLa0JDeUFBUWR3QU5nSWNJQUFnQVRZQ0ZDQUFJQVEyQWd4QkFDRVFETHNCQ3dKQUlBRXRBQUJCVUdvaUVFSC9BWEZCQ2s4TkFDQUFJQkE2QUNvZ0FVRUJhaUVCUWM4QUlSQU1vZ0VMSUFBb0FnUWhCQ0FBUVFBMkFnUUNRQ0FBSUFRZ0FSQ3RnSUNBQUNJRURRQWdBU0VCREtjQkN5QUFRZDRBTmdJY0lBQWdBVFlDRkNBQUlBUTJBZ3hCQUNFUURMb0JDeUFBUVFBMkFnQWdGMEVCYWlFQkFrQWdBQzBBS1VFalR3MEFJQUVoQVF4WkN5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQjA0bUFnQUEyQWhBZ0FFRUlOZ0lNUVFBaEVBeTVBUXNnQUVFQU5nSUFDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVpDemdJQUFOZ0lRSUFCQkNEWUNEQXkzQVFzZ0FFRUFOZ0lBSUJkQkFXb2hBUUpBSUFBdEFDbEJJVWNOQUNBQklRRU1WZ3NnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRWnVLZ0lBQU5nSVFJQUJCQ0RZQ0RFRUFJUkFNdGdFTElBQkJBRFlDQUNBWFFRRnFJUUVDUUNBQUxRQXBJaEJCWFdwQkMwOE5BQ0FCSVFFTVZRc0NRQ0FRUVFaTERRQkJBU0FRZEVIS0FIRkZEUUFnQVNFQkRGVUxRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCOTRtQWdBQTJBaEFnQUVFSU5nSU1ETFVCQ3lBUVFSVkdEWEVnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRYm1OZ0lBQU5nSVFJQUJCR2pZQ0RFRUFJUkFNdEFFTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkNuZ0lDQUFDSVFEUUFnQVNFQkRGUUxJQUJCNVFBMkFod2dBQ0FCTmdJVUlBQWdFRFlDREVFQUlSQU1zd0VMSUFBb0FnUWhFQ0FBUVFBMkFnUUNRQ0FBSUJBZ0FSQ25nSUNBQUNJUURRQWdBU0VCREUwTElBQkIwZ0EyQWh3Z0FDQUJOZ0lVSUFBZ0VEWUNERUVBSVJBTXNnRUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDbmdJQ0FBQ0lRRFFBZ0FTRUJERTBMSUFCQjB3QTJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNc1FFTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkNuZ0lDQUFDSVFEUUFnQVNFQkRGRUxJQUJCNVFBMkFod2dBQ0FCTmdJVUlBQWdFRFlDREVFQUlSQU1zQUVMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUhHaW9DQUFEWUNFQ0FBUVFjMkFneEJBQ0VRREs4QkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRcDRDQWdBQWlFQTBBSUFFaEFReEpDeUFBUWRJQU5nSWNJQUFnQVRZQ0ZDQUFJQkEyQWd4QkFDRVFESzRCQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVFwNENBZ0FBaUVBMEFJQUVoQVF4SkN5QUFRZE1BTmdJY0lBQWdBVFlDRkNBQUlCQTJBZ3hCQUNFUURLMEJDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXA0Q0FnQUFpRUEwQUlBRWhBUXhOQ3lBQVFlVUFOZ0ljSUFBZ0FUWUNGQ0FBSUJBMkFneEJBQ0VRREt3QkN5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQjNJaUFnQUEyQWhBZ0FFRUhOZ0lNUVFBaEVBeXJBUXNnRUVFL1J3MEJJQUZCQVdvaEFRdEJCU0VRREpBQkMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZjJTZ0lBQU5nSVFJQUJCQnpZQ0RBeW9BUXNnQUNnQ0JDRVFJQUJCQURZQ0JBSkFJQUFnRUNBQkVLZUFnSUFBSWhBTkFDQUJJUUVNUWdzZ0FFSFNBRFlDSENBQUlBRTJBaFFnQUNBUU5nSU1RUUFoRUF5bkFRc2dBQ2dDQkNFUUlBQkJBRFlDQkFKQUlBQWdFQ0FCRUtlQWdJQUFJaEFOQUNBQklRRU1RZ3NnQUVIVEFEWUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXltQVFzZ0FDZ0NCQ0VRSUFCQkFEWUNCQUpBSUFBZ0VDQUJFS2VBZ0lBQUloQU5BQ0FCSVFFTVJnc2dBRUhsQURZQ0hDQUFJQUUyQWhRZ0FDQVFOZ0lNUVFBaEVBeWxBUXNnQUNnQ0JDRUJJQUJCQURZQ0JBSkFJQUFnQVNBVUVLZUFnSUFBSWdFTkFDQVVJUUVNUHdzZ0FFSFNBRFlDSENBQUlCUTJBaFFnQUNBQk5nSU1RUUFoRUF5a0FRc2dBQ2dDQkNFQklBQkJBRFlDQkFKQUlBQWdBU0FVRUtlQWdJQUFJZ0VOQUNBVUlRRU1Qd3NnQUVIVEFEWUNIQ0FBSUJRMkFoUWdBQ0FCTmdJTVFRQWhFQXlqQVFzZ0FDZ0NCQ0VCSUFCQkFEWUNCQUpBSUFBZ0FTQVVFS2VBZ0lBQUlnRU5BQ0FVSVFFTVF3c2dBRUhsQURZQ0hDQUFJQlEyQWhRZ0FDQUJOZ0lNUVFBaEVBeWlBUXNnQUVFQU5nSWNJQUFnRkRZQ0ZDQUFRY09QZ0lBQU5nSVFJQUJCQnpZQ0RFRUFJUkFNb1FFTElBQkJBRFlDSENBQUlBRTJBaFFnQUVIRGo0Q0FBRFlDRUNBQVFRYzJBZ3hCQUNFUURLQUJDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0ZEWUNGQ0FBUVl5Y2dJQUFOZ0lRSUFCQkJ6WUNEQXlmQVFzZ0FFRUFOZ0ljSUFBZ0ZEWUNGQ0FBUVl5Y2dJQUFOZ0lRSUFCQkJ6WUNERUVBSVJBTW5nRUxJQUJCQURZQ0hDQUFJQlEyQWhRZ0FFSCtrWUNBQURZQ0VDQUFRUWMyQWd4QkFDRVFESjBCQ3lBQVFRQTJBaHdnQUNBQk5nSVVJQUJCanB1QWdBQTJBaEFnQUVFR05nSU1RUUFoRUF5Y0FRc2dFRUVWUmcxWElBQkJBRFlDSENBQUlBRTJBaFFnQUVITWpvQ0FBRFlDRUNBQVFTQTJBZ3hCQUNFUURKc0JDeUFBUVFBMkFnQWdFRUVCYWlFQlFTUWhFQXNnQUNBUU9nQXBJQUFvQWdRaEVDQUFRUUEyQWdRZ0FDQVFJQUVRcTRDQWdBQWlFQTFVSUFFaEFRdytDeUFBUVFBMkFnQUxRUUFoRUNBQVFRQTJBaHdnQUNBRU5nSVVJQUJCOFp1QWdBQTJBaEFnQUVFR05nSU1ESmNCQ3lBQlFSVkdEVkFnQUVFQU5nSWNJQUFnQlRZQ0ZDQUFRZkNNZ0lBQU5nSVFJQUJCR3pZQ0RFRUFJUkFNbGdFTElBQW9BZ1FoQlNBQVFRQTJBZ1FnQUNBRklCQVFxWUNBZ0FBaUJRMEJJQkJCQVdvaEJRdEJyUUVoRUF4N0N5QUFRY0VCTmdJY0lBQWdCVFlDRENBQUlCQkJBV28yQWhSQkFDRVFESk1CQ3lBQUtBSUVJUVlnQUVFQU5nSUVJQUFnQmlBUUVLbUFnSUFBSWdZTkFTQVFRUUZxSVFZTFFhNEJJUkFNZUFzZ0FFSENBVFlDSENBQUlBWTJBZ3dnQUNBUVFRRnFOZ0lVUVFBaEVBeVFBUXNnQUVFQU5nSWNJQUFnQnpZQ0ZDQUFRWmVMZ0lBQU5nSVFJQUJCRFRZQ0RFRUFJUkFNandFTElBQkJBRFlDSENBQUlBZzJBaFFnQUVIamtJQ0FBRFlDRUNBQVFRazJBZ3hCQUNFUURJNEJDeUFBUVFBMkFod2dBQ0FJTmdJVUlBQkJsSTJBZ0FBMkFoQWdBRUVoTmdJTVFRQWhFQXlOQVF0QkFTRVdRUUFoRjBFQUlSUkJBU0VRQ3lBQUlCQTZBQ3NnQ1VFQmFpRUlBa0FDUUNBQUxRQXRRUkJ4RFFBQ1FBSkFBa0FnQUMwQUtnNERBUUFDQkFzZ0ZrVU5Bd3dDQ3lBVURRRU1BZ3NnRjBVTkFRc2dBQ2dDQkNFUUlBQkJBRFlDQkNBQUlCQWdDQkN0Z0lDQUFDSVFSUTA5SUFCQnlRRTJBaHdnQUNBSU5nSVVJQUFnRURZQ0RFRUFJUkFNakFFTElBQW9BZ1FoQkNBQVFRQTJBZ1FnQUNBRUlBZ1FyWUNBZ0FBaUJFVU5kaUFBUWNvQk5nSWNJQUFnQ0RZQ0ZDQUFJQVEyQWd4QkFDRVFESXNCQ3lBQUtBSUVJUVFnQUVFQU5nSUVJQUFnQkNBSkVLMkFnSUFBSWdSRkRYUWdBRUhMQVRZQ0hDQUFJQWsyQWhRZ0FDQUVOZ0lNUVFBaEVBeUtBUXNnQUNnQ0JDRUVJQUJCQURZQ0JDQUFJQVFnQ2hDdGdJQ0FBQ0lFUlExeUlBQkJ6UUUyQWh3Z0FDQUtOZ0lVSUFBZ0JEWUNERUVBSVJBTWlRRUxBa0FnQ3kwQUFFRlFhaUlRUWY4QmNVRUtUdzBBSUFBZ0VEb0FLaUFMUVFGcUlRcEJ0Z0VoRUF4d0N5QUFLQUlFSVFRZ0FFRUFOZ0lFSUFBZ0JDQUxFSzJBZ0lBQUlnUkZEWEFnQUVIUEFUWUNIQ0FBSUFzMkFoUWdBQ0FFTmdJTVFRQWhFQXlJQVFzZ0FFRUFOZ0ljSUFBZ0JEWUNGQ0FBUVpDemdJQUFOZ0lRSUFCQkNEWUNEQ0FBUVFBMkFnQkJBQ0VRREljQkN5QUJRUlZHRFQ4Z0FFRUFOZ0ljSUFBZ0REWUNGQ0FBUWN5T2dJQUFOZ0lRSUFCQklEWUNERUVBSVJBTWhnRUxJQUJCZ1FRN0FTZ2dBQ2dDQkNFUUlBQkNBRGNEQUNBQUlCQWdERUVCYWlJTUVLdUFnSUFBSWhCRkRUZ2dBRUhUQVRZQ0hDQUFJQXcyQWhRZ0FDQVFOZ0lNUVFBaEVBeUZBUXNnQUVFQU5nSUFDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0JEWUNGQ0FBUWRpYmdJQUFOZ0lRSUFCQkNEWUNEQXlEQVFzZ0FDZ0NCQ0VRSUFCQ0FEY0RBQ0FBSUJBZ0MwRUJhaUlMRUt1QWdJQUFJaEFOQVVIR0FTRVFER2tMSUFCQkFqb0FLQXhWQ3lBQVFkVUJOZ0ljSUFBZ0N6WUNGQ0FBSUJBMkFneEJBQ0VRRElBQkN5QVFRUlZHRFRjZ0FFRUFOZ0ljSUFBZ0JEWUNGQ0FBUWFTTWdJQUFOZ0lRSUFCQkVEWUNERUVBSVJBTWZ3c2dBQzBBTkVFQlJ3MDBJQUFnQkNBQ0VMeUFnSUFBSWhCRkRUUWdFRUVWUncwMUlBQkIzQUUyQWh3Z0FDQUVOZ0lVSUFCQjFaYUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBeCtDMEVBSVJBZ0FFRUFOZ0ljSUFCQnI0dUFnQUEyQWhBZ0FFRUNOZ0lNSUFBZ0ZFRUJhallDRkF4OUMwRUFJUkFNWXd0QkFpRVFER0lMUVEwaEVBeGhDMEVQSVJBTVlBdEJKU0VRREY4TFFSTWhFQXhlQzBFVklSQU1YUXRCRmlFUURGd0xRUmNoRUF4YkMwRVlJUkFNV2d0QkdTRVFERmtMUVJvaEVBeFlDMEViSVJBTVZ3dEJIQ0VRREZZTFFSMGhFQXhWQzBFZklSQU1WQXRCSVNFUURGTUxRU01oRUF4U0MwSEdBQ0VRREZFTFFTNGhFQXhRQzBFdklSQU1Ud3RCT3lFUURFNExRVDBoRUF4TkMwSElBQ0VRREV3TFFja0FJUkFNU3d0Qnl3QWhFQXhLQzBITUFDRVFERWtMUWM0QUlSQU1TQXRCMFFBaEVBeEhDMEhWQUNFUURFWUxRZGdBSVJBTVJRdEIyUUFoRUF4RUMwSGJBQ0VRREVNTFFlUUFJUkFNUWd0QjVRQWhFQXhCQzBIeEFDRVFERUFMUWZRQUlSQU1Qd3RCalFFaEVBdytDMEdYQVNFUUREMExRYWtCSVJBTVBBdEJyQUVoRUF3N0MwSEFBU0VRRERvTFFia0JJUkFNT1F0QnJ3RWhFQXc0QzBHeEFTRVFERGNMUWJJQklSQU1OZ3RCdEFFaEVBdzFDMEcxQVNFUUREUUxRYm9CSVJBTU13dEJ2UUVoRUF3eUMwRy9BU0VRRERFTFFjRUJJUkFNTUFzZ0FFRUFOZ0ljSUFBZ0JEWUNGQ0FBUWVtTGdJQUFOZ0lRSUFCQkh6WUNERUVBSVJBTVNBc2dBRUhiQVRZQ0hDQUFJQVEyQWhRZ0FFSDZsb0NBQURZQ0VDQUFRUlUyQWd4QkFDRVFERWNMSUFCQitBQTJBaHdnQUNBTU5nSVVJQUJCeXBpQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF4R0N5QUFRZEVBTmdJY0lBQWdCVFlDRkNBQVFiQ1hnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1SUXNnQUVINUFEWUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXhFQ3lBQVFmZ0FOZ0ljSUFBZ0FUWUNGQ0FBUWNxWWdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTVF3c2dBRUhrQURZQ0hDQUFJQUUyQWhRZ0FFSGpsNENBQURZQ0VDQUFRUlUyQWd4QkFDRVFERUlMSUFCQjF3QTJBaHdnQUNBQk5nSVVJQUJCeVplQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF4QkN5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnVZMkFnQUEyQWhBZ0FFRWFOZ0lNUVFBaEVBeEFDeUFBUWNJQU5nSWNJQUFnQVRZQ0ZDQUFRZU9ZZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNUHdzZ0FFRUFOZ0lFSUFBZ0R5QVBFTEdBZ0lBQUlnUkZEUUVnQUVFNk5nSWNJQUFnQkRZQ0RDQUFJQTlCQVdvMkFoUkJBQ0VRREQ0TElBQW9BZ1FoQkNBQVFRQTJBZ1FDUUNBQUlBUWdBUkN4Z0lDQUFDSUVSUTBBSUFCQk96WUNIQ0FBSUFRMkFnd2dBQ0FCUVFGcU5nSVVRUUFoRUF3K0N5QUJRUUZxSVFFTUxRc2dEMEVCYWlFQkRDMExJQUJCQURZQ0hDQUFJQTgyQWhRZ0FFSGtrb0NBQURZQ0VDQUFRUVEyQWd4QkFDRVFERHNMSUFCQk5qWUNIQ0FBSUFRMkFoUWdBQ0FDTmdJTVFRQWhFQXc2Q3lBQVFTNDJBaHdnQUNBT05nSVVJQUFnQkRZQ0RFRUFJUkFNT1FzZ0FFSFFBRFlDSENBQUlBRTJBaFFnQUVHUm1JQ0FBRFlDRUNBQVFSVTJBZ3hCQUNFUUREZ0xJQTFCQVdvaEFRd3NDeUFBUVJVMkFod2dBQ0FCTmdJVUlBQkJncG1BZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXcyQ3lBQVFSczJBaHdnQUNBQk5nSVVJQUJCa1plQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF3MUN5QUFRUTgyQWh3Z0FDQUJOZ0lVSUFCQmtaZUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBdzBDeUFBUVFzMkFod2dBQ0FCTmdJVUlBQkJrWmVBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXd6Q3lBQVFSbzJBaHdnQUNBQk5nSVVJQUJCZ3BtQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF3eUN5QUFRUXMyQWh3Z0FDQUJOZ0lVSUFCQmdwbUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBd3hDeUFBUVFvMkFod2dBQ0FCTmdJVUlBQkI1SmFBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXd3Q3lBQVFSNDJBaHdnQUNBQk5nSVVJQUJCK1plQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF3dkN5QUFRUUEyQWh3Z0FDQVFOZ0lVSUFCQjJvMkFnQUEyQWhBZ0FFRVVOZ0lNUVFBaEVBd3VDeUFBUVFRMkFod2dBQ0FCTmdJVUlBQkJzSmlBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXd0Q3lBQVFRQTJBZ0FnQzBFQmFpRUxDMEc0QVNFUURCSUxJQUJCQURZQ0FDQVFRUUZxSVFGQjlRQWhFQXdSQ3lBQklRRUNRQ0FBTFFBcFFRVkhEUUJCNHdBaEVBd1JDMEhpQUNFUURCQUxRUUFoRUNBQVFRQTJBaHdnQUVIa2tZQ0FBRFlDRUNBQVFRYzJBZ3dnQUNBVVFRRnFOZ0lVRENnTElBQkJBRFlDQUNBWFFRRnFJUUZCd0FBaEVBd09DMEVCSVFFTElBQWdBVG9BTENBQVFRQTJBZ0FnRjBFQmFpRUJDMEVvSVJBTUN3c2dBU0VCQzBFNElSQU1DUXNDUUNBQklnOGdBa1lOQUFOQUFrQWdEeTBBQUVHQXZvQ0FBR290QUFBaUFVRUJSZzBBSUFGQkFrY05BeUFQUVFGcUlRRU1CQXNnRDBFQmFpSVBJQUpIRFFBTFFUNGhFQXdpQzBFK0lSQU1JUXNnQUVFQU9nQXNJQThoQVF3QkMwRUxJUkFNQmd0Qk9pRVFEQVVMSUFGQkFXb2hBVUV0SVJBTUJBc2dBQ0FCT2dBc0lBQkJBRFlDQUNBV1FRRnFJUUZCRENFUURBTUxJQUJCQURZQ0FDQVhRUUZxSVFGQkNpRVFEQUlMSUFCQkFEWUNBQXNnQUVFQU9nQXNJQTBoQVVFSklSQU1BQXNMUVFBaEVDQUFRUUEyQWh3Z0FDQUxOZ0lVSUFCQnpaQ0FnQUEyQWhBZ0FFRUpOZ0lNREJjTFFRQWhFQ0FBUVFBMkFod2dBQ0FLTmdJVUlBQkI2WXFBZ0FBMkFoQWdBRUVKTmdJTURCWUxRUUFoRUNBQVFRQTJBaHdnQUNBSk5nSVVJQUJCdDVDQWdBQTJBaEFnQUVFSk5nSU1EQlVMUVFBaEVDQUFRUUEyQWh3Z0FDQUlOZ0lVSUFCQm5KR0FnQUEyQWhBZ0FFRUpOZ0lNREJRTFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkJ6WkNBZ0FBMkFoQWdBRUVKTmdJTURCTUxRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCNllxQWdBQTJBaEFnQUVFSk5nSU1EQklMUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnQ1Q0FnQUEyQWhBZ0FFRUpOZ0lNREJFTFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkJuSkdBZ0FBMkFoQWdBRUVKTmdJTURCQUxRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCbDVXQWdBQTJBaEFnQUVFUE5nSU1EQThMUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQmw1V0FnQUEyQWhBZ0FFRVBOZ0lNREE0TFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkJ3SktBZ0FBMkFoQWdBRUVMTmdJTURBMExRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCbFltQWdBQTJBaEFnQUVFTE5nSU1EQXdMUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQjRZK0FnQUEyQWhBZ0FFRUtOZ0lNREFzTFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkIrNCtBZ0FBMkFoQWdBRUVLTmdJTURBb0xRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCOFptQWdBQTJBaEFnQUVFQ05nSU1EQWtMUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnhKU0FnQUEyQWhBZ0FFRUNOZ0lNREFnTFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkI4cFdBZ0FBMkFoQWdBRUVDTmdJTURBY0xJQUJCQWpZQ0hDQUFJQUUyQWhRZ0FFR2Ntb0NBQURZQ0VDQUFRUlkyQWd4QkFDRVFEQVlMUVFFaEVBd0ZDMEhVQUNFUUlBRWlCQ0FDUmcwRUlBTkJDR29nQUNBRUlBSkIyTUtBZ0FCQkNoREZnSUNBQUNBREtBSU1JUVFnQXlnQ0NBNERBUVFDQUFzUXlvQ0FnQUFBQ3lBQVFRQTJBaHdnQUVHMW1vQ0FBRFlDRUNBQVFSYzJBZ3dnQUNBRVFRRnFOZ0lVUVFBaEVBd0NDeUFBUVFBMkFod2dBQ0FFTmdJVUlBQkJ5cHFBZ0FBMkFoQWdBRUVKTmdJTVFRQWhFQXdCQ3dKQUlBRWlCQ0FDUncwQVFTSWhFQXdCQ3lBQVFZbUFnSUFBTmdJSUlBQWdCRFlDQkVFaElSQUxJQU5CRUdva2dJQ0FnQUFnRUF1dkFRRUNmeUFCS0FJQUlRWUNRQUpBSUFJZ0EwWU5BQ0FFSUFacUlRUWdCaUFEYWlBQ2F5RUhJQUlnQmtGL2N5QUZhaUlHYWlFRkEwQUNRQ0FDTFFBQUlBUXRBQUJHRFFCQkFpRUVEQU1MQWtBZ0JnMEFRUUFoQkNBRklRSU1Bd3NnQmtGL2FpRUdJQVJCQVdvaEJDQUNRUUZxSWdJZ0EwY05BQXNnQnlFR0lBTWhBZ3NnQUVFQk5nSUFJQUVnQmpZQ0FDQUFJQUkyQWdRUEN5QUJRUUEyQWdBZ0FDQUVOZ0lBSUFBZ0FqWUNCQXNLQUNBQUVNZUFnSUFBQy9JMkFRdC9JNENBZ0lBQVFSQnJJZ0VrZ0lDQWdBQUNRRUVBS0FLZzBJQ0FBQTBBUVFBUXk0Q0FnQUJCZ05TRWdBQnJJZ0pCMlFCSkRRQkJBQ0VEQWtCQkFDZ0M0Tk9BZ0FBaUJBMEFRUUJDZnpjQzdOT0FnQUJCQUVLQWdJU0FnSURBQURjQzVOT0FnQUJCQUNBQlFRaHFRWEJ4UWRpcTFhb0ZjeUlFTmdMZzA0Q0FBRUVBUVFBMkF2VFRnSUFBUVFCQkFEWUN4Tk9BZ0FBTFFRQWdBallDek5PQWdBQkJBRUdBMUlTQUFEWUN5Tk9BZ0FCQkFFR0ExSVNBQURZQ21OQ0FnQUJCQUNBRU5nS3MwSUNBQUVFQVFYODJBcWpRZ0lBQUEwQWdBMEhFMElDQUFHb2dBMEc0MElDQUFHb2lCRFlDQUNBRUlBTkJzTkNBZ0FCcUlnVTJBZ0FnQTBHODBJQ0FBR29nQlRZQ0FDQURRY3pRZ0lBQWFpQURRY0RRZ0lBQWFpSUZOZ0lBSUFVZ0JEWUNBQ0FEUWRUUWdJQUFhaUFEUWNqUWdJQUFhaUlFTmdJQUlBUWdCVFlDQUNBRFFkRFFnSUFBYWlBRU5nSUFJQU5CSUdvaUEwR0FBa2NOQUF0QmdOU0VnQUJCZUVHQTFJU0FBR3RCRDNGQkFFR0ExSVNBQUVFSWFrRVBjUnNpQTJvaUJFRUVhaUFDUVVocUlnVWdBMnNpQTBFQmNqWUNBRUVBUVFBb0F2RFRnSUFBTmdLazBJQ0FBRUVBSUFNMkFwVFFnSUFBUVFBZ0JEWUNvTkNBZ0FCQmdOU0VnQUFnQldwQk9EWUNCQXNDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQWdBRUhzQVVzTkFBSkFRUUFvQW9qUWdJQUFJZ1pCRUNBQVFSTnFRWEJ4SUFCQkMwa2JJZ0pCQTNZaUJIWWlBMEVEY1VVTkFBSkFBa0FnQTBFQmNTQUVja0VCY3lJRlFRTjBJZ1JCc05DQWdBQnFJZ01nQkVHNDBJQ0FBR29vQWdBaUJDZ0NDQ0lDUncwQVFRQWdCa0YrSUFWM2NUWUNpTkNBZ0FBTUFRc2dBeUFDTmdJSUlBSWdBellDREFzZ0JFRUlhaUVESUFRZ0JVRURkQ0lGUVFOeU5nSUVJQVFnQldvaUJDQUVLQUlFUVFGeU5nSUVEQXdMSUFKQkFDZ0NrTkNBZ0FBaUIwME5BUUpBSUFORkRRQUNRQUpBSUFNZ0JIUkJBaUFFZENJRFFRQWdBMnR5Y1NJRFFRQWdBMnR4UVg5cUlnTWdBMEVNZGtFUWNTSURkaUlFUVFWMlFRaHhJZ1VnQTNJZ0JDQUZkaUlEUVFKMlFRUnhJZ1J5SUFNZ0JIWWlBMEVCZGtFQ2NTSUVjaUFESUFSMklnTkJBWFpCQVhFaUJISWdBeUFFZG1vaUJFRURkQ0lEUWJEUWdJQUFhaUlGSUFOQnVOQ0FnQUJxS0FJQUlnTW9BZ2dpQUVjTkFFRUFJQVpCZmlBRWQzRWlCallDaU5DQWdBQU1BUXNnQlNBQU5nSUlJQUFnQlRZQ0RBc2dBeUFDUVFOeU5nSUVJQU1nQkVFRGRDSUVhaUFFSUFKcklnVTJBZ0FnQXlBQ2FpSUFJQVZCQVhJMkFnUUNRQ0FIUlEwQUlBZEJlSEZCc05DQWdBQnFJUUpCQUNnQ25OQ0FnQUFoQkFKQUFrQWdCa0VCSUFkQkEzWjBJZ2h4RFFCQkFDQUdJQWh5TmdLSTBJQ0FBQ0FDSVFnTUFRc2dBaWdDQ0NFSUN5QUlJQVEyQWd3Z0FpQUVOZ0lJSUFRZ0FqWUNEQ0FFSUFnMkFnZ0xJQU5CQ0dvaEEwRUFJQUEyQXB6UWdJQUFRUUFnQlRZQ2tOQ0FnQUFNREF0QkFDZ0NqTkNBZ0FBaUNVVU5BU0FKUVFBZ0NXdHhRWDlxSWdNZ0EwRU1ka0VRY1NJRGRpSUVRUVYyUVFoeElnVWdBM0lnQkNBRmRpSURRUUoyUVFSeElnUnlJQU1nQkhZaUEwRUJka0VDY1NJRWNpQURJQVIySWdOQkFYWkJBWEVpQkhJZ0F5QUVkbXBCQW5SQnVOS0FnQUJxS0FJQUlnQW9BZ1JCZUhFZ0Ftc2hCQ0FBSVFVQ1FBTkFBa0FnQlNnQ0VDSUREUUFnQlVFVWFpZ0NBQ0lEUlEwQ0N5QURLQUlFUVhoeElBSnJJZ1VnQkNBRklBUkpJZ1ViSVFRZ0F5QUFJQVViSVFBZ0F5RUZEQUFMQ3lBQUtBSVlJUW9DUUNBQUtBSU1JZ2dnQUVZTkFDQUFLQUlJSWdOQkFDZ0NtTkNBZ0FCSkdpQUlJQU0yQWdnZ0F5QUlOZ0lNREFzTEFrQWdBRUVVYWlJRktBSUFJZ01OQUNBQUtBSVFJZ05GRFFNZ0FFRVFhaUVGQ3dOQUlBVWhDeUFESWdoQkZHb2lCU2dDQUNJRERRQWdDRUVRYWlFRklBZ29BaEFpQXcwQUN5QUxRUUEyQWdBTUNndEJmeUVDSUFCQnYzOUxEUUFnQUVFVGFpSURRWEJ4SVFKQkFDZ0NqTkNBZ0FBaUIwVU5BRUVBSVFzQ1FDQUNRWUFDU1EwQVFSOGhDeUFDUWYvLy93ZExEUUFnQTBFSWRpSURJQU5CZ1A0L2FrRVFka0VJY1NJRGRDSUVJQVJCZ09BZmFrRVFka0VFY1NJRWRDSUZJQVZCZ0lBUGFrRVFka0VDY1NJRmRFRVBkaUFESUFSeUlBVnlheUlEUVFGMElBSWdBMEVWYW5aQkFYRnlRUnhxSVFzTFFRQWdBbXNoQkFKQUFrQUNRQUpBSUF0QkFuUkJ1TktBZ0FCcUtBSUFJZ1VOQUVFQUlRTkJBQ0VJREFFTFFRQWhBeUFDUVFCQkdTQUxRUUYyYXlBTFFSOUdHM1FoQUVFQUlRZ0RRQUpBSUFVb0FnUkJlSEVnQW1zaUJpQUVUdzBBSUFZaEJDQUZJUWdnQmcwQVFRQWhCQ0FGSVFnZ0JTRUREQU1MSUFNZ0JVRVVhaWdDQUNJR0lBWWdCU0FBUVIxMlFRUnhha0VRYWlnQ0FDSUZSaHNnQXlBR0d5RURJQUJCQVhRaEFDQUZEUUFMQ3dKQUlBTWdDSElOQUVFQUlRaEJBaUFMZENJRFFRQWdBMnR5SUFkeElnTkZEUU1nQTBFQUlBTnJjVUYvYWlJRElBTkJESFpCRUhFaUEzWWlCVUVGZGtFSWNTSUFJQU55SUFVZ0FIWWlBMEVDZGtFRWNTSUZjaUFESUFWMklnTkJBWFpCQW5FaUJYSWdBeUFGZGlJRFFRRjJRUUZ4SWdWeUlBTWdCWFpxUVFKMFFialNnSUFBYWlnQ0FDRURDeUFEUlEwQkN3TkFJQU1vQWdSQmVIRWdBbXNpQmlBRVNTRUFBa0FnQXlnQ0VDSUZEUUFnQTBFVWFpZ0NBQ0VGQ3lBR0lBUWdBQnNoQkNBRElBZ2dBQnNoQ0NBRklRTWdCUTBBQ3dzZ0NFVU5BQ0FFUVFBb0FwRFFnSUFBSUFKclR3MEFJQWdvQWhnaEN3SkFJQWdvQWd3aUFDQUlSZzBBSUFnb0FnZ2lBMEVBS0FLWTBJQ0FBRWthSUFBZ0F6WUNDQ0FESUFBMkFnd01DUXNDUUNBSVFSUnFJZ1VvQWdBaUF3MEFJQWdvQWhBaUEwVU5BeUFJUVJCcUlRVUxBMEFnQlNFR0lBTWlBRUVVYWlJRktBSUFJZ01OQUNBQVFSQnFJUVVnQUNnQ0VDSUREUUFMSUFaQkFEWUNBQXdJQ3dKQVFRQW9BcERRZ0lBQUlnTWdBa2tOQUVFQUtBS2MwSUNBQUNFRUFrQUNRQ0FESUFKcklnVkJFRWtOQUNBRUlBSnFJZ0FnQlVFQmNqWUNCRUVBSUFVMkFwRFFnSUFBUVFBZ0FEWUNuTkNBZ0FBZ0JDQURhaUFGTmdJQUlBUWdBa0VEY2pZQ0JBd0JDeUFFSUFOQkEzSTJBZ1FnQkNBRGFpSURJQU1vQWdSQkFYSTJBZ1JCQUVFQU5nS2MwSUNBQUVFQVFRQTJBcERRZ0lBQUN5QUVRUWhxSVFNTUNnc0NRRUVBS0FLVTBJQ0FBQ0lBSUFKTkRRQkJBQ2dDb05DQWdBQWlBeUFDYWlJRUlBQWdBbXNpQlVFQmNqWUNCRUVBSUFVMkFwVFFnSUFBUVFBZ0JEWUNvTkNBZ0FBZ0F5QUNRUU55TmdJRUlBTkJDR29oQXd3S0N3SkFBa0JCQUNnQzROT0FnQUJGRFFCQkFDZ0M2Tk9BZ0FBaEJBd0JDMEVBUW44M0F1elRnSUFBUVFCQ2dJQ0VnSUNBd0FBM0F1VFRnSUFBUVFBZ0FVRU1ha0Z3Y1VIWXF0V3FCWE0yQXVEVGdJQUFRUUJCQURZQzlOT0FnQUJCQUVFQU5nTEUwNENBQUVHQWdBUWhCQXRCQUNFREFrQWdCQ0FDUWNjQWFpSUhhaUlHUVFBZ0JHc2lDM0VpQ0NBQ1N3MEFRUUJCTURZQytOT0FnQUFNQ2dzQ1FFRUFLQUxBMDRDQUFDSURSUTBBQWtCQkFDZ0N1Tk9BZ0FBaUJDQUlhaUlGSUFSTkRRQWdCU0FEVFEwQkMwRUFJUU5CQUVFd05nTDQwNENBQUF3S0MwRUFMUURFMDRDQUFFRUVjUTBFQWtBQ1FBSkFRUUFvQXFEUWdJQUFJZ1JGRFFCQnlOT0FnQUFoQXdOQUFrQWdBeWdDQUNJRklBUkxEUUFnQlNBREtBSUVhaUFFU3cwREN5QURLQUlJSWdNTkFBc0xRUUFReTRDQWdBQWlBRUYvUmcwRklBZ2hCZ0pBUVFBb0F1VFRnSUFBSWdOQmYyb2lCQ0FBY1VVTkFDQUlJQUJySUFRZ0FHcEJBQ0FEYTNGcUlRWUxJQVlnQWswTkJTQUdRZjcvLy84SFN3MEZBa0JCQUNnQ3dOT0FnQUFpQTBVTkFFRUFLQUs0MDRDQUFDSUVJQVpxSWdVZ0JFME5CaUFGSUFOTERRWUxJQVlReTRDQWdBQWlBeUFBUncwQkRBY0xJQVlnQUdzZ0MzRWlCa0grLy8vL0Iwc05CQ0FHRU11QWdJQUFJZ0FnQXlnQ0FDQURLQUlFYWtZTkF5QUFJUU1MQWtBZ0EwRi9SZzBBSUFKQnlBQnFJQVpORFFBQ1FDQUhJQVpyUVFBb0F1alRnSUFBSWdScVFRQWdCR3R4SWdSQi92Ly8vd2RORFFBZ0F5RUFEQWNMQWtBZ0JCRExnSUNBQUVGL1JnMEFJQVFnQm1vaEJpQURJUUFNQnd0QkFDQUdheERMZ0lDQUFCb01CQXNnQXlFQUlBTkJmMGNOQlF3REMwRUFJUWdNQnd0QkFDRUFEQVVMSUFCQmYwY05BZ3RCQUVFQUtBTEUwNENBQUVFRWNqWUN4Tk9BZ0FBTElBaEIvdi8vL3dkTERRRWdDQkRMZ0lDQUFDRUFRUUFReTRDQWdBQWhBeUFBUVg5R0RRRWdBMEYvUmcwQklBQWdBMDhOQVNBRElBQnJJZ1lnQWtFNGFrME5BUXRCQUVFQUtBSzQwNENBQUNBR2FpSUROZ0s0MDRDQUFBSkFJQU5CQUNnQ3ZOT0FnQUJORFFCQkFDQUROZ0s4MDRDQUFBc0NRQUpBQWtBQ1FFRUFLQUtnMElDQUFDSUVSUTBBUWNqVGdJQUFJUU1EUUNBQUlBTW9BZ0FpQlNBREtBSUVJZ2hxUmcwQ0lBTW9BZ2dpQXcwQURBTUxDd0pBQWtCQkFDZ0NtTkNBZ0FBaUEwVU5BQ0FBSUFOUERRRUxRUUFnQURZQ21OQ0FnQUFMUVFBaEEwRUFJQVkyQXN6VGdJQUFRUUFnQURZQ3lOT0FnQUJCQUVGL05nS28wSUNBQUVFQVFRQW9BdURUZ0lBQU5nS3MwSUNBQUVFQVFRQTJBdFRUZ0lBQUEwQWdBMEhFMElDQUFHb2dBMEc0MElDQUFHb2lCRFlDQUNBRUlBTkJzTkNBZ0FCcUlnVTJBZ0FnQTBHODBJQ0FBR29nQlRZQ0FDQURRY3pRZ0lBQWFpQURRY0RRZ0lBQWFpSUZOZ0lBSUFVZ0JEWUNBQ0FEUWRUUWdJQUFhaUFEUWNqUWdJQUFhaUlFTmdJQUlBUWdCVFlDQUNBRFFkRFFnSUFBYWlBRU5nSUFJQU5CSUdvaUEwR0FBa2NOQUFzZ0FFRjRJQUJyUVE5eFFRQWdBRUVJYWtFUGNSc2lBMm9pQkNBR1FVaHFJZ1VnQTJzaUEwRUJjallDQkVFQVFRQW9BdkRUZ0lBQU5nS2swSUNBQUVFQUlBTTJBcFRRZ0lBQVFRQWdCRFlDb05DQWdBQWdBQ0FGYWtFNE5nSUVEQUlMSUFNdEFBeEJDSEVOQUNBRUlBVkpEUUFnQkNBQVR3MEFJQVJCZUNBRWEwRVBjVUVBSUFSQkNHcEJEM0ViSWdWcUlnQkJBQ2dDbE5DQWdBQWdCbW9pQ3lBRmF5SUZRUUZ5TmdJRUlBTWdDQ0FHYWpZQ0JFRUFRUUFvQXZEVGdJQUFOZ0trMElDQUFFRUFJQVUyQXBUUWdJQUFRUUFnQURZQ29OQ0FnQUFnQkNBTGFrRTROZ0lFREFFTEFrQWdBRUVBS0FLWTBJQ0FBQ0lJVHcwQVFRQWdBRFlDbU5DQWdBQWdBQ0VJQ3lBQUlBWnFJUVZCeU5PQWdBQWhBd0pBQWtBQ1FBSkFBa0FDUUFKQUEwQWdBeWdDQUNBRlJnMEJJQU1vQWdnaUF3MEFEQUlMQ3lBRExRQU1RUWh4UlEwQkMwSEkwNENBQUNFREEwQUNRQ0FES0FJQUlnVWdCRXNOQUNBRklBTW9BZ1JxSWdVZ0JFc05Bd3NnQXlnQ0NDRUREQUFMQ3lBRElBQTJBZ0FnQXlBREtBSUVJQVpxTmdJRUlBQkJlQ0FBYTBFUGNVRUFJQUJCQ0dwQkQzRWJhaUlMSUFKQkEzSTJBZ1FnQlVGNElBVnJRUTl4UVFBZ0JVRUlha0VQY1J0cUlnWWdDeUFDYWlJQ2F5RURBa0FnQmlBRVJ3MEFRUUFnQWpZQ29OQ0FnQUJCQUVFQUtBS1UwSUNBQUNBRGFpSUROZ0tVMElDQUFDQUNJQU5CQVhJMkFnUU1Bd3NDUUNBR1FRQW9BcHpRZ0lBQVJ3MEFRUUFnQWpZQ25OQ0FnQUJCQUVFQUtBS1EwSUNBQUNBRGFpSUROZ0tRMElDQUFDQUNJQU5CQVhJMkFnUWdBaUFEYWlBRE5nSUFEQU1MQWtBZ0JpZ0NCQ0lFUVFOeFFRRkhEUUFnQkVGNGNTRUhBa0FDUUNBRVFmOEJTdzBBSUFZb0FnZ2lCU0FFUVFOMklnaEJBM1JCc05DQWdBQnFJZ0JHR2dKQUlBWW9BZ3dpQkNBRlJ3MEFRUUJCQUNnQ2lOQ0FnQUJCZmlBSWQzRTJBb2pRZ0lBQURBSUxJQVFnQUVZYUlBUWdCVFlDQ0NBRklBUTJBZ3dNQVFzZ0JpZ0NHQ0VKQWtBQ1FDQUdLQUlNSWdBZ0JrWU5BQ0FHS0FJSUlnUWdDRWthSUFBZ0JEWUNDQ0FFSUFBMkFnd01BUXNDUUNBR1FSUnFJZ1FvQWdBaUJRMEFJQVpCRUdvaUJDZ0NBQ0lGRFFCQkFDRUFEQUVMQTBBZ0JDRUlJQVVpQUVFVWFpSUVLQUlBSWdVTkFDQUFRUkJxSVFRZ0FDZ0NFQ0lGRFFBTElBaEJBRFlDQUFzZ0NVVU5BQUpBQWtBZ0JpQUdLQUljSWdWQkFuUkJ1TktBZ0FCcUlnUW9BZ0JIRFFBZ0JDQUFOZ0lBSUFBTkFVRUFRUUFvQW96UWdJQUFRWDRnQlhkeE5nS00wSUNBQUF3Q0N5QUpRUkJCRkNBSktBSVFJQVpHRzJvZ0FEWUNBQ0FBUlEwQkN5QUFJQWsyQWhnQ1FDQUdLQUlRSWdSRkRRQWdBQ0FFTmdJUUlBUWdBRFlDR0FzZ0JpZ0NGQ0lFUlEwQUlBQkJGR29nQkRZQ0FDQUVJQUEyQWhnTElBY2dBMm9oQXlBR0lBZHFJZ1lvQWdRaEJBc2dCaUFFUVg1eE5nSUVJQUlnQTJvZ0F6WUNBQ0FDSUFOQkFYSTJBZ1FDUUNBRFFmOEJTdzBBSUFOQmVIRkJzTkNBZ0FCcUlRUUNRQUpBUVFBb0FvalFnSUFBSWdWQkFTQURRUU4yZENJRGNRMEFRUUFnQlNBRGNqWUNpTkNBZ0FBZ0JDRUREQUVMSUFRb0FnZ2hBd3NnQXlBQ05nSU1JQVFnQWpZQ0NDQUNJQVEyQWd3Z0FpQUROZ0lJREFNTFFSOGhCQUpBSUFOQi8vLy9CMHNOQUNBRFFRaDJJZ1FnQkVHQS9qOXFRUkIyUVFoeElnUjBJZ1VnQlVHQTRCOXFRUkIyUVFSeElnVjBJZ0FnQUVHQWdBOXFRUkIyUVFKeElnQjBRUTkySUFRZ0JYSWdBSEpySWdSQkFYUWdBeUFFUVJWcWRrRUJjWEpCSEdvaEJBc2dBaUFFTmdJY0lBSkNBRGNDRUNBRVFRSjBRYmpTZ0lBQWFpRUZBa0JCQUNnQ2pOQ0FnQUFpQUVFQklBUjBJZ2h4RFFBZ0JTQUNOZ0lBUVFBZ0FDQUljallDak5DQWdBQWdBaUFGTmdJWUlBSWdBallDQ0NBQ0lBSTJBZ3dNQXdzZ0EwRUFRUmtnQkVFQmRtc2dCRUVmUmh0MElRUWdCU2dDQUNFQUEwQWdBQ0lGS0FJRVFYaHhJQU5HRFFJZ0JFRWRkaUVBSUFSQkFYUWhCQ0FGSUFCQkJIRnFRUkJxSWdnb0FnQWlBQTBBQ3lBSUlBSTJBZ0FnQWlBRk5nSVlJQUlnQWpZQ0RDQUNJQUkyQWdnTUFnc2dBRUY0SUFCclFROXhRUUFnQUVFSWFrRVBjUnNpQTJvaUN5QUdRVWhxSWdnZ0Eyc2lBMEVCY2pZQ0JDQUFJQWhxUVRnMkFnUWdCQ0FGUVRjZ0JXdEJEM0ZCQUNBRlFVbHFRUTl4RzJwQlFXb2lDQ0FJSUFSQkVHcEpHeUlJUVNNMkFnUkJBRUVBS0FMdzA0Q0FBRFlDcE5DQWdBQkJBQ0FETmdLVTBJQ0FBRUVBSUFzMkFxRFFnSUFBSUFoQkVHcEJBQ2tDME5PQWdBQTNBZ0FnQ0VFQUtRTEkwNENBQURjQ0NFRUFJQWhCQ0dvMkF0RFRnSUFBUVFBZ0JqWUN6Tk9BZ0FCQkFDQUFOZ0xJMDRDQUFFRUFRUUEyQXRUVGdJQUFJQWhCSkdvaEF3TkFJQU5CQnpZQ0FDQURRUVJxSWdNZ0JVa05BQXNnQ0NBRVJnMERJQWdnQ0NnQ0JFRitjVFlDQkNBSUlBZ2dCR3NpQURZQ0FDQUVJQUJCQVhJMkFnUUNRQ0FBUWY4QlN3MEFJQUJCZUhGQnNOQ0FnQUJxSVFNQ1FBSkFRUUFvQW9qUWdJQUFJZ1ZCQVNBQVFRTjJkQ0lBY1EwQVFRQWdCU0FBY2pZQ2lOQ0FnQUFnQXlFRkRBRUxJQU1vQWdnaEJRc2dCU0FFTmdJTUlBTWdCRFlDQ0NBRUlBTTJBZ3dnQkNBRk5nSUlEQVFMUVI4aEF3SkFJQUJCLy8vL0Iwc05BQ0FBUVFoMklnTWdBMEdBL2o5cVFSQjJRUWh4SWdOMElnVWdCVUdBNEI5cVFSQjJRUVJ4SWdWMElnZ2dDRUdBZ0E5cVFSQjJRUUp4SWdoMFFROTJJQU1nQlhJZ0NISnJJZ05CQVhRZ0FDQURRUlZxZGtFQmNYSkJIR29oQXdzZ0JDQUROZ0ljSUFSQ0FEY0NFQ0FEUVFKMFFialNnSUFBYWlFRkFrQkJBQ2dDak5DQWdBQWlDRUVCSUFOMElnWnhEUUFnQlNBRU5nSUFRUUFnQ0NBR2NqWUNqTkNBZ0FBZ0JDQUZOZ0lZSUFRZ0JEWUNDQ0FFSUFRMkFnd01CQXNnQUVFQVFSa2dBMEVCZG1zZ0EwRWZSaHQwSVFNZ0JTZ0NBQ0VJQTBBZ0NDSUZLQUlFUVhoeElBQkdEUU1nQTBFZGRpRUlJQU5CQVhRaEF5QUZJQWhCQkhGcVFSQnFJZ1lvQWdBaUNBMEFDeUFHSUFRMkFnQWdCQ0FGTmdJWUlBUWdCRFlDRENBRUlBUTJBZ2dNQXdzZ0JTZ0NDQ0lESUFJMkFnd2dCU0FDTmdJSUlBSkJBRFlDR0NBQ0lBVTJBZ3dnQWlBRE5nSUlDeUFMUVFocUlRTU1CUXNnQlNnQ0NDSURJQVEyQWd3Z0JTQUVOZ0lJSUFSQkFEWUNHQ0FFSUFVMkFnd2dCQ0FETmdJSUMwRUFLQUtVMElDQUFDSURJQUpORFFCQkFDZ0NvTkNBZ0FBaUJDQUNhaUlGSUFNZ0Ftc2lBMEVCY2pZQ0JFRUFJQU0yQXBUUWdJQUFRUUFnQlRZQ29OQ0FnQUFnQkNBQ1FRTnlOZ0lFSUFSQkNHb2hBd3dEQzBFQUlRTkJBRUV3TmdMNDA0Q0FBQXdDQ3dKQUlBdEZEUUFDUUFKQUlBZ2dDQ2dDSENJRlFRSjBRYmpTZ0lBQWFpSURLQUlBUncwQUlBTWdBRFlDQUNBQURRRkJBQ0FIUVg0Z0JYZHhJZ2MyQW96UWdJQUFEQUlMSUF0QkVFRVVJQXNvQWhBZ0NFWWJhaUFBTmdJQUlBQkZEUUVMSUFBZ0N6WUNHQUpBSUFnb0FoQWlBMFVOQUNBQUlBTTJBaEFnQXlBQU5nSVlDeUFJUVJScUtBSUFJZ05GRFFBZ0FFRVVhaUFETmdJQUlBTWdBRFlDR0FzQ1FBSkFJQVJCRDBzTkFDQUlJQVFnQW1vaUEwRURjallDQkNBSUlBTnFJZ01nQXlnQ0JFRUJjallDQkF3QkN5QUlJQUpxSWdBZ0JFRUJjallDQkNBSUlBSkJBM0kyQWdRZ0FDQUVhaUFFTmdJQUFrQWdCRUgvQVVzTkFDQUVRWGh4UWJEUWdJQUFhaUVEQWtBQ1FFRUFLQUtJMElDQUFDSUZRUUVnQkVFRGRuUWlCSEVOQUVFQUlBVWdCSEkyQW9qUWdJQUFJQU1oQkF3QkN5QURLQUlJSVFRTElBUWdBRFlDRENBRElBQTJBZ2dnQUNBRE5nSU1JQUFnQkRZQ0NBd0JDMEVmSVFNQ1FDQUVRZi8vL3dkTERRQWdCRUVJZGlJRElBTkJnUDQvYWtFUWRrRUljU0lEZENJRklBVkJnT0FmYWtFUWRrRUVjU0lGZENJQ0lBSkJnSUFQYWtFUWRrRUNjU0lDZEVFUGRpQURJQVZ5SUFKeWF5SURRUUYwSUFRZ0EwRVZhblpCQVhGeVFSeHFJUU1MSUFBZ0F6WUNIQ0FBUWdBM0FoQWdBMEVDZEVHNDBvQ0FBR29oQlFKQUlBZEJBU0FEZENJQ2NRMEFJQVVnQURZQ0FFRUFJQWNnQW5JMkFvelFnSUFBSUFBZ0JUWUNHQ0FBSUFBMkFnZ2dBQ0FBTmdJTURBRUxJQVJCQUVFWklBTkJBWFpySUFOQkgwWWJkQ0VESUFVb0FnQWhBZ0pBQTBBZ0FpSUZLQUlFUVhoeElBUkdEUUVnQTBFZGRpRUNJQU5CQVhRaEF5QUZJQUpCQkhGcVFSQnFJZ1lvQWdBaUFnMEFDeUFHSUFBMkFnQWdBQ0FGTmdJWUlBQWdBRFlDRENBQUlBQTJBZ2dNQVFzZ0JTZ0NDQ0lESUFBMkFnd2dCU0FBTmdJSUlBQkJBRFlDR0NBQUlBVTJBZ3dnQUNBRE5nSUlDeUFJUVFocUlRTU1BUXNDUUNBS1JRMEFBa0FDUUNBQUlBQW9BaHdpQlVFQ2RFRzQwb0NBQUdvaUF5Z0NBRWNOQUNBRElBZzJBZ0FnQ0EwQlFRQWdDVUYrSUFWM2NUWUNqTkNBZ0FBTUFnc2dDa0VRUVJRZ0NpZ0NFQ0FBUmh0cUlBZzJBZ0FnQ0VVTkFRc2dDQ0FLTmdJWUFrQWdBQ2dDRUNJRFJRMEFJQWdnQXpZQ0VDQURJQWcyQWhnTElBQkJGR29vQWdBaUEwVU5BQ0FJUVJScUlBTTJBZ0FnQXlBSU5nSVlDd0pBQWtBZ0JFRVBTdzBBSUFBZ0JDQUNhaUlEUVFOeU5nSUVJQUFnQTJvaUF5QURLQUlFUVFGeU5nSUVEQUVMSUFBZ0Ftb2lCU0FFUVFGeU5nSUVJQUFnQWtFRGNqWUNCQ0FGSUFScUlBUTJBZ0FDUUNBSFJRMEFJQWRCZUhGQnNOQ0FnQUJxSVFKQkFDZ0NuTkNBZ0FBaEF3SkFBa0JCQVNBSFFRTjJkQ0lJSUFaeERRQkJBQ0FJSUFaeU5nS0kwSUNBQUNBQ0lRZ01BUXNnQWlnQ0NDRUlDeUFJSUFNMkFnd2dBaUFETmdJSUlBTWdBallDRENBRElBZzJBZ2dMUVFBZ0JUWUNuTkNBZ0FCQkFDQUVOZ0tRMElDQUFBc2dBRUVJYWlFREN5QUJRUkJxSklDQWdJQUFJQU1MQ2dBZ0FCREpnSUNBQUF2aURRRUhmd0pBSUFCRkRRQWdBRUY0YWlJQklBQkJmR29vQWdBaUFrRjRjU0lBYWlFREFrQWdBa0VCY1EwQUlBSkJBM0ZGRFFFZ0FTQUJLQUlBSWdKcklnRkJBQ2dDbU5DQWdBQWlCRWtOQVNBQ0lBQnFJUUFDUUNBQlFRQW9BcHpRZ0lBQVJnMEFBa0FnQWtIL0FVc05BQ0FCS0FJSUlnUWdBa0VEZGlJRlFRTjBRYkRRZ0lBQWFpSUdSaG9DUUNBQktBSU1JZ0lnQkVjTkFFRUFRUUFvQW9qUWdJQUFRWDRnQlhkeE5nS0kwSUNBQUF3REN5QUNJQVpHR2lBQ0lBUTJBZ2dnQkNBQ05nSU1EQUlMSUFFb0FoZ2hCd0pBQWtBZ0FTZ0NEQ0lHSUFGR0RRQWdBU2dDQ0NJQ0lBUkpHaUFHSUFJMkFnZ2dBaUFHTmdJTURBRUxBa0FnQVVFVWFpSUNLQUlBSWdRTkFDQUJRUkJxSWdJb0FnQWlCQTBBUVFBaEJnd0JDd05BSUFJaEJTQUVJZ1pCRkdvaUFpZ0NBQ0lFRFFBZ0JrRVFhaUVDSUFZb0FoQWlCQTBBQ3lBRlFRQTJBZ0FMSUFkRkRRRUNRQUpBSUFFZ0FTZ0NIQ0lFUVFKMFFialNnSUFBYWlJQ0tBSUFSdzBBSUFJZ0JqWUNBQ0FHRFFGQkFFRUFLQUtNMElDQUFFRitJQVIzY1RZQ2pOQ0FnQUFNQXdzZ0IwRVFRUlFnQnlnQ0VDQUJSaHRxSUFZMkFnQWdCa1VOQWdzZ0JpQUhOZ0lZQWtBZ0FTZ0NFQ0lDUlEwQUlBWWdBallDRUNBQ0lBWTJBaGdMSUFFb0FoUWlBa1VOQVNBR1FSUnFJQUkyQWdBZ0FpQUdOZ0lZREFFTElBTW9BZ1FpQWtFRGNVRURSdzBBSUFNZ0FrRitjVFlDQkVFQUlBQTJBcERRZ0lBQUlBRWdBR29nQURZQ0FDQUJJQUJCQVhJMkFnUVBDeUFCSUFOUERRQWdBeWdDQkNJQ1FRRnhSUTBBQWtBQ1FDQUNRUUp4RFFBQ1FDQURRUUFvQXFEUWdJQUFSdzBBUVFBZ0FUWUNvTkNBZ0FCQkFFRUFLQUtVMElDQUFDQUFhaUlBTmdLVTBJQ0FBQ0FCSUFCQkFYSTJBZ1FnQVVFQUtBS2MwSUNBQUVjTkEwRUFRUUEyQXBEUWdJQUFRUUJCQURZQ25OQ0FnQUFQQ3dKQUlBTkJBQ2dDbk5DQWdBQkhEUUJCQUNBQk5nS2MwSUNBQUVFQVFRQW9BcERRZ0lBQUlBQnFJZ0EyQXBEUWdJQUFJQUVnQUVFQmNqWUNCQ0FCSUFCcUlBQTJBZ0FQQ3lBQ1FYaHhJQUJxSVFBQ1FBSkFJQUpCL3dGTERRQWdBeWdDQ0NJRUlBSkJBM1lpQlVFRGRFR3cwSUNBQUdvaUJrWWFBa0FnQXlnQ0RDSUNJQVJIRFFCQkFFRUFLQUtJMElDQUFFRitJQVYzY1RZQ2lOQ0FnQUFNQWdzZ0FpQUdSaG9nQWlBRU5nSUlJQVFnQWpZQ0RBd0JDeUFES0FJWUlRY0NRQUpBSUFNb0Fnd2lCaUFEUmcwQUlBTW9BZ2dpQWtFQUtBS1kwSUNBQUVrYUlBWWdBallDQ0NBQ0lBWTJBZ3dNQVFzQ1FDQURRUlJxSWdJb0FnQWlCQTBBSUFOQkVHb2lBaWdDQUNJRURRQkJBQ0VHREFFTEEwQWdBaUVGSUFRaUJrRVVhaUlDS0FJQUlnUU5BQ0FHUVJCcUlRSWdCaWdDRUNJRURRQUxJQVZCQURZQ0FBc2dCMFVOQUFKQUFrQWdBeUFES0FJY0lnUkJBblJCdU5LQWdBQnFJZ0lvQWdCSERRQWdBaUFHTmdJQUlBWU5BVUVBUVFBb0FvelFnSUFBUVg0Z0JIZHhOZ0tNMElDQUFBd0NDeUFIUVJCQkZDQUhLQUlRSUFOR0cyb2dCallDQUNBR1JRMEJDeUFHSUFjMkFoZ0NRQ0FES0FJUUlnSkZEUUFnQmlBQ05nSVFJQUlnQmpZQ0dBc2dBeWdDRkNJQ1JRMEFJQVpCRkdvZ0FqWUNBQ0FDSUFZMkFoZ0xJQUVnQUdvZ0FEWUNBQ0FCSUFCQkFYSTJBZ1FnQVVFQUtBS2MwSUNBQUVjTkFVRUFJQUEyQXBEUWdJQUFEd3NnQXlBQ1FYNXhOZ0lFSUFFZ0FHb2dBRFlDQUNBQklBQkJBWEkyQWdRTEFrQWdBRUgvQVVzTkFDQUFRWGh4UWJEUWdJQUFhaUVDQWtBQ1FFRUFLQUtJMElDQUFDSUVRUUVnQUVFRGRuUWlBSEVOQUVFQUlBUWdBSEkyQW9qUWdJQUFJQUloQUF3QkN5QUNLQUlJSVFBTElBQWdBVFlDRENBQ0lBRTJBZ2dnQVNBQ05nSU1JQUVnQURZQ0NBOExRUjhoQWdKQUlBQkIvLy8vQjBzTkFDQUFRUWgySWdJZ0FrR0EvajlxUVJCMlFRaHhJZ0owSWdRZ0JFR0E0QjlxUVJCMlFRUnhJZ1IwSWdZZ0JrR0FnQTlxUVJCMlFRSnhJZ1owUVE5MklBSWdCSElnQm5KcklnSkJBWFFnQUNBQ1FSVnFka0VCY1hKQkhHb2hBZ3NnQVNBQ05nSWNJQUZDQURjQ0VDQUNRUUowUWJqU2dJQUFhaUVFQWtBQ1FFRUFLQUtNMElDQUFDSUdRUUVnQW5RaUEzRU5BQ0FFSUFFMkFnQkJBQ0FHSUFOeU5nS00wSUNBQUNBQklBUTJBaGdnQVNBQk5nSUlJQUVnQVRZQ0RBd0JDeUFBUVFCQkdTQUNRUUYyYXlBQ1FSOUdHM1FoQWlBRUtBSUFJUVlDUUFOQUlBWWlCQ2dDQkVGNGNTQUFSZzBCSUFKQkhYWWhCaUFDUVFGMElRSWdCQ0FHUVFSeGFrRVFhaUlES0FJQUlnWU5BQXNnQXlBQk5nSUFJQUVnQkRZQ0dDQUJJQUUyQWd3Z0FTQUJOZ0lJREFFTElBUW9BZ2dpQUNBQk5nSU1JQVFnQVRZQ0NDQUJRUUEyQWhnZ0FTQUVOZ0lNSUFFZ0FEWUNDQXRCQUVFQUtBS28wSUNBQUVGL2FpSUJRWDhnQVJzMkFxalFnSUFBQ3dzRUFBQUFDMDRBQWtBZ0FBMEFQd0JCRUhRUEN3SkFJQUJCLy84RGNRMEFJQUJCZjB3TkFBSkFJQUJCRUhaQUFDSUFRWDlIRFFCQkFFRXdOZ0w0MDRDQUFFRi9Ed3NnQUVFUWRBOExFTXFBZ0lBQUFBdnlBZ0lEZndGK0FrQWdBa1VOQUNBQUlBRTZBQUFnQWlBQWFpSURRWDlxSUFFNkFBQWdBa0VEU1EwQUlBQWdBVG9BQWlBQUlBRTZBQUVnQTBGOWFpQUJPZ0FBSUFOQmZtb2dBVG9BQUNBQ1FRZEpEUUFnQUNBQk9nQURJQU5CZkdvZ0FUb0FBQ0FDUVFsSkRRQWdBRUVBSUFCclFRTnhJZ1JxSWdNZ0FVSC9BWEZCZ1lLRUNHd2lBVFlDQUNBRElBSWdCR3RCZkhFaUJHb2lBa0Y4YWlBQk5nSUFJQVJCQ1VrTkFDQURJQUUyQWdnZ0F5QUJOZ0lFSUFKQmVHb2dBVFlDQUNBQ1FYUnFJQUUyQWdBZ0JFRVpTUTBBSUFNZ0FUWUNHQ0FESUFFMkFoUWdBeUFCTmdJUUlBTWdBVFlDRENBQ1FYQnFJQUUyQWdBZ0FrRnNhaUFCTmdJQUlBSkJhR29nQVRZQ0FDQUNRV1JxSUFFMkFnQWdCQ0FEUVFSeFFSaHlJZ1ZySWdKQklFa05BQ0FCclVLQmdJQ0FFSDRoQmlBRElBVnFJUUVEUUNBQklBWTNBeGdnQVNBR053TVFJQUVnQmpjRENDQUJJQVkzQXdBZ0FVRWdhaUVCSUFKQllHb2lBa0VmU3cwQUN3c2dBQXNMamtnQkFFR0FDQXVHU0FFQUFBQUNBQUFBQXdBQUFBQUFBQUFBQUFBQUJBQUFBQVVBQUFBQUFBQUFBQUFBQUFZQUFBQUhBQUFBQ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVNXNTJZV3hwWkNCamFHRnlJR2x1SUhWeWJDQnhkV1Z5ZVFCVGNHRnVJR05oYkd4aVlXTnJJR1Z5Y205eUlHbHVJRzl1WDJKdlpIa0FRMjl1ZEdWdWRDMU1aVzVuZEdnZ2IzWmxjbVpzYjNjQVEyaDFibXNnYzJsNlpTQnZkbVZ5Wm14dmR3QlNaWE53YjI1elpTQnZkbVZ5Wm14dmR3QkpiblpoYkdsa0lHMWxkR2h2WkNCbWIzSWdTRlJVVUM5NExuZ2djbVZ4ZFdWemRBQkpiblpoYkdsa0lHMWxkR2h2WkNCbWIzSWdVbFJUVUM5NExuZ2djbVZ4ZFdWemRBQkZlSEJsWTNSbFpDQlRUMVZTUTBVZ2JXVjBhRzlrSUdadmNpQkpRMFV2ZUM1NElISmxjWFZsYzNRQVNXNTJZV3hwWkNCamFHRnlJR2x1SUhWeWJDQm1jbUZuYldWdWRDQnpkR0Z5ZEFCRmVIQmxZM1JsWkNCa2IzUUFVM0JoYmlCallXeHNZbUZqYXlCbGNuSnZjaUJwYmlCdmJsOXpkR0YwZFhNQVNXNTJZV3hwWkNCeVpYTndiMjV6WlNCemRHRjBkWE1BU1c1MllXeHBaQ0JqYUdGeVlXTjBaWElnYVc0Z1kyaDFibXNnWlhoMFpXNXphVzl1Y3dCVmMyVnlJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDl5WlhObGRHQWdZMkZzYkdKaFkyc2daWEp5YjNJQVlHOXVYMk5vZFc1clgyaGxZV1JsY21BZ1kyRnNiR0poWTJzZ1pYSnliM0lBWUc5dVgyMWxjM05oWjJWZlltVm5hVzVnSUdOaGJHeGlZV05ySUdWeWNtOXlBR0J2Ymw5amFIVnVhMTlsZUhSbGJuTnBiMjVmZG1Gc2RXVmdJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDl6ZEdGMGRYTmZZMjl0Y0d4bGRHVmdJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDkyWlhKemFXOXVYMk52YlhCc1pYUmxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmZFhKc1gyTnZiWEJzWlhSbFlDQmpZV3hzWW1GamF5Qmxjbkp2Y2dCZ2IyNWZZMmgxYm10ZlkyOXRjR3hsZEdWZ0lHTmhiR3hpWVdOcklHVnljbTl5QUdCdmJsOW9aV0ZrWlhKZmRtRnNkV1ZmWTI5dGNHeGxkR1ZnSUdOaGJHeGlZV05ySUdWeWNtOXlBR0J2Ymw5dFpYTnpZV2RsWDJOdmJYQnNaWFJsWUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZmJXVjBhRzlrWDJOdmJYQnNaWFJsWUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZmFHVmhaR1Z5WDJacFpXeGtYMk52YlhCc1pYUmxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmWTJoMWJtdGZaWGgwWlc1emFXOXVYMjVoYldWZ0lHTmhiR3hpWVdOcklHVnljbTl5QUZWdVpYaHdaV04wWldRZ1kyaGhjaUJwYmlCMWNtd2djMlZ5ZG1WeUFFbHVkbUZzYVdRZ2FHVmhaR1Z5SUhaaGJIVmxJR05vWVhJQVNXNTJZV3hwWkNCb1pXRmtaWElnWm1sbGJHUWdZMmhoY2dCVGNHRnVJR05oYkd4aVlXTnJJR1Z5Y205eUlHbHVJRzl1WDNabGNuTnBiMjRBU1c1MllXeHBaQ0J0YVc1dmNpQjJaWEp6YVc5dUFFbHVkbUZzYVdRZ2JXRnFiM0lnZG1WeWMybHZiZ0JGZUhCbFkzUmxaQ0J6Y0dGalpTQmhablJsY2lCMlpYSnphVzl1QUVWNGNHVmpkR1ZrSUVOU1RFWWdZV1owWlhJZ2RtVnljMmx2YmdCSmJuWmhiR2xrSUVoVVZGQWdkbVZ5YzJsdmJnQkpiblpoYkdsa0lHaGxZV1JsY2lCMGIydGxiZ0JUY0dGdUlHTmhiR3hpWVdOcklHVnljbTl5SUdsdUlHOXVYM1Z5YkFCSmJuWmhiR2xrSUdOb1lYSmhZM1JsY25NZ2FXNGdkWEpzQUZWdVpYaHdaV04wWldRZ2MzUmhjblFnWTJoaGNpQnBiaUIxY213QVJHOTFZbXhsSUVBZ2FXNGdkWEpzQUVWdGNIUjVJRU52Ym5SbGJuUXRUR1Z1WjNSb0FFbHVkbUZzYVdRZ1kyaGhjbUZqZEdWeUlHbHVJRU52Ym5SbGJuUXRUR1Z1WjNSb0FFUjFjR3hwWTJGMFpTQkRiMjUwWlc1MExVeGxibWQwYUFCSmJuWmhiR2xrSUdOb1lYSWdhVzRnZFhKc0lIQmhkR2dBUTI5dWRHVnVkQzFNWlc1bmRHZ2dZMkZ1SjNRZ1ltVWdjSEpsYzJWdWRDQjNhWFJvSUZSeVlXNXpabVZ5TFVWdVkyOWthVzVuQUVsdWRtRnNhV1FnWTJoaGNtRmpkR1Z5SUdsdUlHTm9kVzVySUhOcGVtVUFVM0JoYmlCallXeHNZbUZqYXlCbGNuSnZjaUJwYmlCdmJsOW9aV0ZrWlhKZmRtRnNkV1VBVTNCaGJpQmpZV3hzWW1GamF5Qmxjbkp2Y2lCcGJpQnZibDlqYUhWdWExOWxlSFJsYm5OcGIyNWZkbUZzZFdVQVNXNTJZV3hwWkNCamFHRnlZV04wWlhJZ2FXNGdZMmgxYm1zZ1pYaDBaVzV6YVc5dWN5QjJZV3gxWlFCTmFYTnphVzVuSUdWNGNHVmpkR1ZrSUV4R0lHRm1kR1Z5SUdobFlXUmxjaUIyWVd4MVpRQkpiblpoYkdsa0lHQlVjbUZ1YzJabGNpMUZibU52WkdsdVoyQWdhR1ZoWkdWeUlIWmhiSFZsQUVsdWRtRnNhV1FnWTJoaGNtRmpkR1Z5SUdsdUlHTm9kVzVySUdWNGRHVnVjMmx2Ym5NZ2NYVnZkR1VnZG1Gc2RXVUFTVzUyWVd4cFpDQmphR0Z5WVdOMFpYSWdhVzRnWTJoMWJtc2daWGgwWlc1emFXOXVjeUJ4ZFc5MFpXUWdkbUZzZFdVQVVHRjFjMlZrSUdKNUlHOXVYMmhsWVdSbGNuTmZZMjl0Y0d4bGRHVUFTVzUyWVd4cFpDQkZUMFlnYzNSaGRHVUFiMjVmY21WelpYUWdjR0YxYzJVQWIyNWZZMmgxYm10ZmFHVmhaR1Z5SUhCaGRYTmxBRzl1WDIxbGMzTmhaMlZmWW1WbmFXNGdjR0YxYzJVQWIyNWZZMmgxYm10ZlpYaDBaVzV6YVc5dVgzWmhiSFZsSUhCaGRYTmxBRzl1WDNOMFlYUjFjMTlqYjIxd2JHVjBaU0J3WVhWelpRQnZibDkyWlhKemFXOXVYMk52YlhCc1pYUmxJSEJoZFhObEFHOXVYM1Z5YkY5amIyMXdiR1YwWlNCd1lYVnpaUUJ2Ymw5amFIVnVhMTlqYjIxd2JHVjBaU0J3WVhWelpRQnZibDlvWldGa1pYSmZkbUZzZFdWZlkyOXRjR3hsZEdVZ2NHRjFjMlVBYjI1ZmJXVnpjMkZuWlY5amIyMXdiR1YwWlNCd1lYVnpaUUJ2Ymw5dFpYUm9iMlJmWTI5dGNHeGxkR1VnY0dGMWMyVUFiMjVmYUdWaFpHVnlYMlpwWld4a1gyTnZiWEJzWlhSbElIQmhkWE5sQUc5dVgyTm9kVzVyWDJWNGRHVnVjMmx2Ymw5dVlXMWxJSEJoZFhObEFGVnVaWGh3WldOMFpXUWdjM0JoWTJVZ1lXWjBaWElnYzNSaGNuUWdiR2x1WlFCVGNHRnVJR05oYkd4aVlXTnJJR1Z5Y205eUlHbHVJRzl1WDJOb2RXNXJYMlY0ZEdWdWMybHZibDl1WVcxbEFFbHVkbUZzYVdRZ1kyaGhjbUZqZEdWeUlHbHVJR05vZFc1cklHVjRkR1Z1YzJsdmJuTWdibUZ0WlFCUVlYVnpaU0J2YmlCRFQwNU9SVU5VTDFWd1ozSmhaR1VBVUdGMWMyVWdiMjRnVUZKSkwxVndaM0poWkdVQVJYaHdaV04wWldRZ1NGUlVVQzh5SUVOdmJtNWxZM1JwYjI0Z1VISmxabUZqWlFCVGNHRnVJR05oYkd4aVlXTnJJR1Z5Y205eUlHbHVJRzl1WDIxbGRHaHZaQUJGZUhCbFkzUmxaQ0J6Y0dGalpTQmhablJsY2lCdFpYUm9iMlFBVTNCaGJpQmpZV3hzWW1GamF5Qmxjbkp2Y2lCcGJpQnZibDlvWldGa1pYSmZabWxsYkdRQVVHRjFjMlZrQUVsdWRtRnNhV1FnZDI5eVpDQmxibU52ZFc1MFpYSmxaQUJKYm5aaGJHbGtJRzFsZEdodlpDQmxibU52ZFc1MFpYSmxaQUJWYm1WNGNHVmpkR1ZrSUdOb1lYSWdhVzRnZFhKc0lITmphR1Z0WVFCU1pYRjFaWE4wSUdoaGN5QnBiblpoYkdsa0lHQlVjbUZ1YzJabGNpMUZibU52WkdsdVoyQUFVMWRKVkVOSVgxQlNUMWhaQUZWVFJWOVFVazlZV1FCTlMwRkRWRWxXU1ZSWkFGVk9VRkpQUTBWVFUwRkNURVZmUlU1VVNWUlpBRU5QVUZrQVRVOVdSVVJmVUVWU1RVRk9SVTVVVEZrQVZFOVBYMFZCVWt4WkFFNVBWRWxHV1FCR1FVbE1SVVJmUkVWUVJVNUVSVTVEV1FCQ1FVUmZSMEZVUlZkQldRQlFURUZaQUZCVlZBQkRTRVZEUzA5VlZBQkhRVlJGVjBGWlgxUkpUVVZQVlZRQVVrVlJWVVZUVkY5VVNVMUZUMVZVQUU1RlZGZFBVa3RmUTA5T1RrVkRWRjlVU1UxRlQxVlVBRU5QVGs1RlExUkpUMDVmVkVsTlJVOVZWQUJNVDBkSlRsOVVTVTFGVDFWVUFFNUZWRmRQVWt0ZlVrVkJSRjlVU1UxRlQxVlVBRkJQVTFRQVRVbFRSRWxTUlVOVVJVUmZVa1ZSVlVWVFZBQkRURWxGVGxSZlEweFBVMFZFWDFKRlVWVkZVMVFBUTB4SlJVNVVYME5NVDFORlJGOU1UMEZFWDBKQlRFRk9RMFZFWDFKRlVWVkZVMVFBUWtGRVgxSkZVVlZGVTFRQVNGUlVVRjlTUlZGVlJWTlVYMU5GVGxSZlZFOWZTRlJVVUZOZlVFOVNWQUJTUlZCUFVsUUFTVTFmUVY5VVJVRlFUMVFBVWtWVFJWUmZRMDlPVkVWT1ZBQk9UMTlEVDA1VVJVNVVBRkJCVWxSSlFVeGZRMDlPVkVWT1ZBQklVRVZmU1U1V1FVeEpSRjlEVDA1VFZFRk9WQUJJVUVWZlEwSmZVa1ZUUlZRQVIwVlVBRWhRUlY5VFZGSkpRMVFBUTA5T1JreEpRMVFBVkVWTlVFOVNRVkpaWDFKRlJFbFNSVU5VQUZCRlVrMUJUa1ZPVkY5U1JVUkpVa1ZEVkFCRFQwNU9SVU5VQUUxVlRGUkpYMU5VUVZSVlV3QklVRVZmU1U1V1FVeEpSRjlUVkVGVVZWTUFWRTlQWDAxQlRsbGZVa1ZSVlVWVFZGTUFSVUZTVEZsZlNFbE9WRk1BVlU1QlZrRkpURUZDVEVWZlJrOVNYMHhGUjBGTVgxSkZRVk5QVGxNQVQxQlVTVTlPVXdCVFYwbFVRMGhKVGtkZlVGSlBWRTlEVDB4VEFGWkJVa2xCVGxSZlFVeFRUMTlPUlVkUFZFbEJWRVZUQUUxVlRGUkpVRXhGWDBOSVQwbERSVk1BU1U1VVJWSk9RVXhmVTBWU1ZrVlNYMFZTVWs5U0FGZEZRbDlUUlZKV1JWSmZWVTVMVGs5WFRsOUZVbEpQVWdCU1FVbE1SMVZPWDBWU1VrOVNBRWxFUlU1VVNWUlpYMUJTVDFaSlJFVlNYMEZWVkVoRlRsUkpRMEZVU1U5T1gwVlNVazlTQUZOVFRGOURSVkpVU1VaSlEwRlVSVjlGVWxKUFVnQkpUbFpCVEVsRVgxaGZSazlTVjBGU1JFVkVYMFpQVWdCVFJWUmZVRUZTUVUxRlZFVlNBRWRGVkY5UVFWSkJUVVZVUlZJQVNGQkZYMVZUUlZJQVUwVkZYMDlVU0VWU0FFaFFSVjlEUWw5RFNGVk9TMTlJUlVGRVJWSUFUVXREUVV4RlRrUkJVZ0JUUlZSVlVBQlhSVUpmVTBWU1ZrVlNYMGxUWDBSUFYwNEFWRVZCVWtSUFYwNEFTRkJGWDBOTVQxTkZSRjlEVDA1T1JVTlVTVTlPQUVoRlZWSkpVMVJKUTE5RldGQkpVa0ZVU1U5T0FFUkpVME5QVGs1RlExUkZSRjlQVUVWU1FWUkpUMDRBVGs5T1gwRlZWRWhQVWtsVVFWUkpWa1ZmU1U1R1QxSk5RVlJKVDA0QVNGQkZYMGxPVmtGTVNVUmZWa1ZTVTBsUFRnQklVRVZmUTBKZlRVVlRVMEZIUlY5Q1JVZEpUZ0JUU1ZSRlgwbFRYMFpTVDFwRlRnQklVRVZmU1U1V1FVeEpSRjlJUlVGRVJWSmZWRTlMUlU0QVNVNVdRVXhKUkY5VVQwdEZUZ0JHVDFKQ1NVUkVSVTRBUlU1SVFVNURSVjlaVDFWU1gwTkJURTBBU0ZCRlgwbE9Wa0ZNU1VSZlZWSk1BRUpNVDBOTFJVUmZRbGxmVUVGU1JVNVVRVXhmUTA5T1ZGSlBUQUJOUzBOUFRBQkJRMHdBU0ZCRlgwbE9WRVZTVGtGTUFGSkZVVlZGVTFSZlNFVkJSRVZTWDBaSlJVeEVVMTlVVDA5ZlRFRlNSMFZmVlU1UFJrWkpRMGxCVEFCSVVFVmZUMHNBVlU1TVNVNUxBRlZPVEU5RFN3QlFVa2tBVWtWVVVsbGZWMGxVU0FCSVVFVmZTVTVXUVV4SlJGOURUMDVVUlU1VVgweEZUa2RVU0FCSVVFVmZWVTVGV0ZCRlExUkZSRjlEVDA1VVJVNVVYMHhGVGtkVVNBQkdURlZUU0FCUVVrOVFVRUZVUTBnQVRTMVRSVUZTUTBnQVZWSkpYMVJQVDE5TVQwNUhBRkJTVDBORlUxTkpUa2NBVFVsVFEwVk1URUZPUlU5VlUxOVFSVkpUU1ZOVVJVNVVYMWRCVWs1SlRrY0FUVWxUUTBWTVRFRk9SVTlWVTE5WFFWSk9TVTVIQUVoUVJWOUpUbFpCVEVsRVgxUlNRVTVUUmtWU1gwVk9RMDlFU1U1SEFFVjRjR1ZqZEdWa0lFTlNURVlBU0ZCRlgwbE9Wa0ZNU1VSZlEwaFZUa3RmVTBsYVJRQk5UMVpGQUVOUFRsUkpUbFZGQUVoUVJWOURRbDlUVkVGVVZWTmZRMDlOVUV4RlZFVUFTRkJGWDBOQ1gwaEZRVVJGVWxOZlEwOU5VRXhGVkVVQVNGQkZYME5DWDFaRlVsTkpUMDVmUTA5TlVFeEZWRVVBU0ZCRlgwTkNYMVZTVEY5RFQwMVFURVZVUlFCSVVFVmZRMEpmUTBoVlRrdGZRMDlOVUV4RlZFVUFTRkJGWDBOQ1gwaEZRVVJGVWw5V1FVeFZSVjlEVDAxUVRFVlVSUUJJVUVWZlEwSmZRMGhWVGt0ZlJWaFVSVTVUU1U5T1gxWkJURlZGWDBOUFRWQk1SVlJGQUVoUVJWOURRbDlEU0ZWT1MxOUZXRlJGVGxOSlQwNWZUa0ZOUlY5RFQwMVFURVZVUlFCSVVFVmZRMEpmVFVWVFUwRkhSVjlEVDAxUVRFVlVSUUJJVUVWZlEwSmZUVVZVU0U5RVgwTlBUVkJNUlZSRkFFaFFSVjlEUWw5SVJVRkVSVkpmUmtsRlRFUmZRMDlOVUV4RlZFVUFSRVZNUlZSRkFFaFFSVjlKVGxaQlRFbEVYMFZQUmw5VFZFRlVSUUJKVGxaQlRFbEVYMU5UVEY5RFJWSlVTVVpKUTBGVVJRQlFRVlZUUlFCT1QxOVNSVk5RVDA1VFJRQlZUbE5WVUZCUFVsUkZSRjlOUlVSSlFWOVVXVkJGQUVkUFRrVUFUazlVWDBGRFEwVlFWRUZDVEVVQVUwVlNWa2xEUlY5VlRrRldRVWxNUVVKTVJRQlNRVTVIUlY5T1QxUmZVMEZVU1ZOR1NVRkNURVVBVDFKSlIwbE9YMGxUWDFWT1VrVkJRMGhCUWt4RkFGSkZVMUJQVGxORlgwbFRYMU5VUVV4RkFGQlZVa2RGQUUxRlVrZEZBRkpGVVZWRlUxUmZTRVZCUkVWU1gwWkpSVXhFVTE5VVQwOWZURUZTUjBVQVVrVlJWVVZUVkY5SVJVRkVSVkpmVkU5UFgweEJVa2RGQUZCQldVeFBRVVJmVkU5UFgweEJVa2RGQUVsT1UxVkdSa2xEU1VWT1ZGOVRWRTlTUVVkRkFFaFFSVjlRUVZWVFJVUmZWVkJIVWtGRVJRQklVRVZmVUVGVlUwVkVYMGd5WDFWUVIxSkJSRVVBVTA5VlVrTkZBRUZPVGs5VlRrTkZBRlJTUVVORkFFaFFSVjlWVGtWWVVFVkRWRVZFWDFOUVFVTkZBRVJGVTBOU1NVSkZBRlZPVTFWQ1UwTlNTVUpGQUZKRlEwOVNSQUJJVUVWZlNVNVdRVXhKUkY5TlJWUklUMFFBVGs5VVgwWlBWVTVFQUZCU1QxQkdTVTVFQUZWT1FrbE9SQUJTUlVKSlRrUUFWVTVCVlZSSVQxSkpXa1ZFQUUxRlZFaFBSRjlPVDFSZlFVeE1UMWRGUkFCSVZGUlFYMVpGVWxOSlQwNWZUazlVWDFOVlVGQlBVbFJGUkFCQlRGSkZRVVJaWDFKRlVFOVNWRVZFQUVGRFEwVlFWRVZFQUU1UFZGOUpUVkJNUlUxRlRsUkZSQUJNVDA5UVgwUkZWRVZEVkVWRUFFaFFSVjlEVWw5RldGQkZRMVJGUkFCSVVFVmZURVpmUlZoUVJVTlVSVVFBUTFKRlFWUkZSQUJKVFY5VlUwVkVBRWhRUlY5UVFWVlRSVVFBVkVsTlJVOVZWRjlQUTBOVlVrVkVBRkJCV1UxRlRsUmZVa1ZSVlVsU1JVUUFVRkpGUTA5T1JFbFVTVTlPWDFKRlVWVkpVa1ZFQUZCU1QxaFpYMEZWVkVoRlRsUkpRMEZVU1U5T1gxSkZVVlZKVWtWRUFFNUZWRmRQVWt0ZlFWVlVTRVZPVkVsRFFWUkpUMDVmVWtWUlZVbFNSVVFBVEVWT1IxUklYMUpGVVZWSlVrVkVBRk5UVEY5RFJWSlVTVVpKUTBGVVJWOVNSVkZWU1ZKRlJBQlZVRWRTUVVSRlgxSkZVVlZKVWtWRUFGQkJSMFZmUlZoUVNWSkZSQUJRVWtWRFQwNUVTVlJKVDA1ZlJrRkpURVZFQUVWWVVFVkRWRUZVU1U5T1gwWkJTVXhGUkFCU1JWWkJURWxFUVZSSlQwNWZSa0ZKVEVWRUFGTlRURjlJUVU1RVUwaEJTMFZmUmtGSlRFVkVBRXhQUTB0RlJBQlVVa0ZPVTBaUFVrMUJWRWxQVGw5QlVGQk1TVVZFQUU1UFZGOU5UMFJKUmtsRlJBQk9UMVJmUlZoVVJVNUVSVVFBUWtGT1JGZEpSRlJJWDB4SlRVbFVYMFZZUTBWRlJFVkVBRk5KVkVWZlNWTmZUMVpGVWt4UFFVUkZSQUJJUlVGRUFFVjRjR1ZqZEdWa0lFaFVWRkF2QUFCZUV3QUFKaE1BQURBUUFBRHdGd0FBblJNQUFCVVNBQUE1RndBQThCSUFBQW9RQUFCMUVnQUFyUklBQUlJVEFBQlBGQUFBZnhBQUFLQVZBQUFqRkFBQWlSSUFBSXNVQUFCTkZRQUExQkVBQU04VUFBQVFHQUFBeVJZQUFOd1dBQURCRVFBQTRCY0FBTHNVQUFCMEZBQUFmQlVBQU9VVUFBQUlGd0FBSHhBQUFHVVZBQUNqRkFBQUtCVUFBQUlWQUFDWkZRQUFMQkFBQUlzWkFBQlBEd0FBMUE0QUFHb1FBQURPRUFBQUFoY0FBSWtPQUFCdUV3QUFIQk1BQUdZVUFBQldGd0FBd1JNQUFNMFRBQUJzRXdBQWFCY0FBR1lYQUFCZkZ3QUFJaE1BQU00UEFBQnBEZ0FBMkE0QUFHTVdBQURMRXdBQXFnNEFBQ2dYQUFBbUZ3QUF4Uk1BQUYwV0FBRG9FUUFBWnhNQUFHVVRBQUR5RmdBQWN4TUFBQjBYQUFENUZnQUE4eEVBQU04T0FBRE9GUUFBREJJQUFMTVJBQUNsRVFBQVlSQUFBRElYQUFDN0V3QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFQkFnRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFBQUFBQUFBQUFBQUFBQUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBZ01DQWdJQ0FnQUFBZ0lBQWdJQUFnSUNBZ0lDQWdJQ0FnQUVBQUFBQUFBQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdBQUFBSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBQUlBQWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFJQUFnSUNBZ0lBQUFJQ0FBSUNBQUlDQWdJQ0FnSUNBZ0lBQXdBRUFBQUFBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFBQUFDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdBQ0FBSUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJzYjNObFpXVndMV0ZzYVhabEFBQUFBQUFBQUFBQUFBQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQUFBQUFBQUFBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUVCQVFFQkFRRUJBUUVCQWdFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRmphSFZ1YTJWa0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQVFBQkFRRUJBUUFBQVFFQUFRRUFBUUVCQVFFQkFRRUJBUUFBQUFBQUFBQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUFBQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFFQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBR1ZqZEdsdmJtVnVkQzFzWlc1bmRHaHZibkp2ZUhrdFkyOXVibVZqZEdsdmJnQUFBQUFBQUFBQUFBQUFBQUFBQUhKaGJuTm1aWEl0Wlc1amIyUnBibWR3WjNKaFpHVU5DZzBLRFFwVFRRMEtEUXBVVkZBdlEwVXZWRk5RTHdBQUFBQUFBQUFBQUFBQUFBRUNBQUVEQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQUFBQUFBQUFBQUFCQWdBQkF3QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUJBUVVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBQUFBQUFBQUFBQUFRQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFFQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFBQUFBQUFBQUFBQUFCQUFBQ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUF3UUFBQVFFQkFRRUJBUUVCQVFFQlFRRUJBUUVCQVFFQkFRRUJBQUVBQVlIQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQUFRQUJBQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBQUFBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBZ0FBQUFBQUFBTURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREFBQUFBQUFBQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFBQUFBQUFBQUFBQUFnQUFBQUFDQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFEQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd0FBQUFBQUFBTURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUU1UFZVNURSVVZEUzA5VlZFNUZRMVJGVkVWRFVrbENSVXhWVTBoRlZFVkJSRk5GUVZKRFNGSkhSVU5VU1ZaSlZGbE1SVTVFUVZKV1JVOVVTVVpaVUZSSlQwNVRRMGhUUlVGWlUxUkJWRU5JUjBWUFVrUkpVa1ZEVkU5U1ZGSkRTRkJCVWtGTlJWUkZVbFZTUTBWQ1UwTlNTVUpGUVZKRVQxZE9RVU5GU1U1RVRrdERTMVZDVTBOU1NVSkZTRlJVVUM5QlJGUlFMdz09J1xuIiwKICAgICIvLyBAdHMtY2hlY2tcblxuJ3VzZSBzdHJpY3QnXG5cbi8qIGdsb2JhbCBXZWJBc3NlbWJseSAqL1xuXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgbmV0ID0gcmVxdWlyZSgnbmV0JylcbmNvbnN0IGh0dHAgPSByZXF1aXJlKCdodHRwJylcbmNvbnN0IHsgcGlwZWxpbmUgfSA9IHJlcXVpcmUoJ3N0cmVhbScpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi9jb3JlL3V0aWwnKVxuY29uc3QgdGltZXJzID0gcmVxdWlyZSgnLi90aW1lcnMnKVxuY29uc3QgUmVxdWVzdCA9IHJlcXVpcmUoJy4vY29yZS9yZXF1ZXN0JylcbmNvbnN0IERpc3BhdGNoZXJCYXNlID0gcmVxdWlyZSgnLi9kaXNwYXRjaGVyLWJhc2UnKVxuY29uc3Qge1xuICBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IsXG4gIFJlc3BvbnNlQ29udGVudExlbmd0aE1pc21hdGNoRXJyb3IsXG4gIEludmFsaWRBcmd1bWVudEVycm9yLFxuICBSZXF1ZXN0QWJvcnRlZEVycm9yLFxuICBIZWFkZXJzVGltZW91dEVycm9yLFxuICBIZWFkZXJzT3ZlcmZsb3dFcnJvcixcbiAgU29ja2V0RXJyb3IsXG4gIEluZm9ybWF0aW9uYWxFcnJvcixcbiAgQm9keVRpbWVvdXRFcnJvcixcbiAgSFRUUFBhcnNlckVycm9yLFxuICBSZXNwb25zZUV4Y2VlZGVkTWF4U2l6ZUVycm9yLFxuICBDbGllbnREZXN0cm95ZWRFcnJvclxufSA9IHJlcXVpcmUoJy4vY29yZS9lcnJvcnMnKVxuY29uc3QgYnVpbGRDb25uZWN0b3IgPSByZXF1aXJlKCcuL2NvcmUvY29ubmVjdCcpXG5jb25zdCB7XG4gIGtVcmwsXG4gIGtSZXNldCxcbiAga1NlcnZlck5hbWUsXG4gIGtDbGllbnQsXG4gIGtCdXN5LFxuICBrUGFyc2VyLFxuICBrQ29ubmVjdCxcbiAga0Jsb2NraW5nLFxuICBrUmVzdW1pbmcsXG4gIGtSdW5uaW5nLFxuICBrUGVuZGluZyxcbiAga1NpemUsXG4gIGtXcml0aW5nLFxuICBrUXVldWUsXG4gIGtDb25uZWN0ZWQsXG4gIGtDb25uZWN0aW5nLFxuICBrTmVlZERyYWluLFxuICBrTm9SZWYsXG4gIGtLZWVwQWxpdmVEZWZhdWx0VGltZW91dCxcbiAga0hvc3RIZWFkZXIsXG4gIGtQZW5kaW5nSWR4LFxuICBrUnVubmluZ0lkeCxcbiAga0Vycm9yLFxuICBrUGlwZWxpbmluZyxcbiAga1NvY2tldCxcbiAga0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZSxcbiAga01heEhlYWRlcnNTaXplLFxuICBrS2VlcEFsaXZlTWF4VGltZW91dCxcbiAga0tlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGQsXG4gIGtIZWFkZXJzVGltZW91dCxcbiAga0JvZHlUaW1lb3V0LFxuICBrU3RyaWN0Q29udGVudExlbmd0aCxcbiAga0Nvbm5lY3RvcixcbiAga01heFJlZGlyZWN0aW9ucyxcbiAga01heFJlcXVlc3RzLFxuICBrQ291bnRlcixcbiAga0Nsb3NlLFxuICBrRGVzdHJveSxcbiAga0Rpc3BhdGNoLFxuICBrSW50ZXJjZXB0b3JzLFxuICBrTG9jYWxBZGRyZXNzLFxuICBrTWF4UmVzcG9uc2VTaXplLFxuICBrSFRUUENvbm5WZXJzaW9uLFxuICAvLyBIVFRQMlxuICBrSG9zdCxcbiAga0hUVFAyU2Vzc2lvbixcbiAga0hUVFAyU2Vzc2lvblN0YXRlLFxuICBrSFRUUDJCdWlsZFJlcXVlc3QsXG4gIGtIVFRQMkNvcHlIZWFkZXJzLFxuICBrSFRUUDFCdWlsZFJlcXVlc3Rcbn0gPSByZXF1aXJlKCcuL2NvcmUvc3ltYm9scycpXG5cbi8qKiBAdHlwZSB7aW1wb3J0KCdodHRwMicpfSAqL1xubGV0IGh0dHAyXG50cnkge1xuICBodHRwMiA9IHJlcXVpcmUoJ2h0dHAyJylcbn0gY2F0Y2gge1xuICAvLyBAdHMtaWdub3JlXG4gIGh0dHAyID0geyBjb25zdGFudHM6IHt9IH1cbn1cblxuY29uc3Qge1xuICBjb25zdGFudHM6IHtcbiAgICBIVFRQMl9IRUFERVJfQVVUSE9SSVRZLFxuICAgIEhUVFAyX0hFQURFUl9NRVRIT0QsXG4gICAgSFRUUDJfSEVBREVSX1BBVEgsXG4gICAgSFRUUDJfSEVBREVSX1NDSEVNRSxcbiAgICBIVFRQMl9IRUFERVJfQ09OVEVOVF9MRU5HVEgsXG4gICAgSFRUUDJfSEVBREVSX0VYUEVDVCxcbiAgICBIVFRQMl9IRUFERVJfU1RBVFVTXG4gIH1cbn0gPSBodHRwMlxuXG4vLyBFeHBlcmltZW50YWxcbmxldCBoMkV4cGVyaW1lbnRhbFdhcm5lZCA9IGZhbHNlXG5cbmNvbnN0IEZhc3RCdWZmZXIgPSBCdWZmZXJbU3ltYm9sLnNwZWNpZXNdXG5cbmNvbnN0IGtDbG9zZWRSZXNvbHZlID0gU3ltYm9sKCdrQ2xvc2VkUmVzb2x2ZScpXG5cbmNvbnN0IGNoYW5uZWxzID0ge31cblxudHJ5IHtcbiAgY29uc3QgZGlhZ25vc3RpY3NDaGFubmVsID0gcmVxdWlyZSgnZGlhZ25vc3RpY3NfY2hhbm5lbCcpXG4gIGNoYW5uZWxzLnNlbmRIZWFkZXJzID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpjbGllbnQ6c2VuZEhlYWRlcnMnKVxuICBjaGFubmVscy5iZWZvcmVDb25uZWN0ID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpjbGllbnQ6YmVmb3JlQ29ubmVjdCcpXG4gIGNoYW5uZWxzLmNvbm5lY3RFcnJvciA9IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6Y2xpZW50OmNvbm5lY3RFcnJvcicpXG4gIGNoYW5uZWxzLmNvbm5lY3RlZCA9IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6Y2xpZW50OmNvbm5lY3RlZCcpXG59IGNhdGNoIHtcbiAgY2hhbm5lbHMuc2VuZEhlYWRlcnMgPSB7IGhhc1N1YnNjcmliZXJzOiBmYWxzZSB9XG4gIGNoYW5uZWxzLmJlZm9yZUNvbm5lY3QgPSB7IGhhc1N1YnNjcmliZXJzOiBmYWxzZSB9XG4gIGNoYW5uZWxzLmNvbm5lY3RFcnJvciA9IHsgaGFzU3Vic2NyaWJlcnM6IGZhbHNlIH1cbiAgY2hhbm5lbHMuY29ubmVjdGVkID0geyBoYXNTdWJzY3JpYmVyczogZmFsc2UgfVxufVxuXG4vKipcbiAqIEB0eXBlIHtpbXBvcnQoJy4uL3R5cGVzL2NsaWVudCcpLmRlZmF1bHR9XG4gKi9cbmNsYXNzIENsaWVudCBleHRlbmRzIERpc3BhdGNoZXJCYXNlIHtcbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfFVSTH0gdXJsXG4gICAqIEBwYXJhbSB7aW1wb3J0KCcuLi90eXBlcy9jbGllbnQnKS5DbGllbnQuT3B0aW9uc30gb3B0aW9uc1xuICAgKi9cbiAgY29uc3RydWN0b3IgKHVybCwge1xuICAgIGludGVyY2VwdG9ycyxcbiAgICBtYXhIZWFkZXJTaXplLFxuICAgIGhlYWRlcnNUaW1lb3V0LFxuICAgIHNvY2tldFRpbWVvdXQsXG4gICAgcmVxdWVzdFRpbWVvdXQsXG4gICAgY29ubmVjdFRpbWVvdXQsXG4gICAgYm9keVRpbWVvdXQsXG4gICAgaWRsZVRpbWVvdXQsXG4gICAga2VlcEFsaXZlLFxuICAgIGtlZXBBbGl2ZVRpbWVvdXQsXG4gICAgbWF4S2VlcEFsaXZlVGltZW91dCxcbiAgICBrZWVwQWxpdmVNYXhUaW1lb3V0LFxuICAgIGtlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGQsXG4gICAgc29ja2V0UGF0aCxcbiAgICBwaXBlbGluaW5nLFxuICAgIHRscyxcbiAgICBzdHJpY3RDb250ZW50TGVuZ3RoLFxuICAgIG1heENhY2hlZFNlc3Npb25zLFxuICAgIG1heFJlZGlyZWN0aW9ucyxcbiAgICBjb25uZWN0LFxuICAgIG1heFJlcXVlc3RzUGVyQ2xpZW50LFxuICAgIGxvY2FsQWRkcmVzcyxcbiAgICBtYXhSZXNwb25zZVNpemUsXG4gICAgYXV0b1NlbGVjdEZhbWlseSxcbiAgICBhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQsXG4gICAgLy8gaDJcbiAgICBhbGxvd0gyLFxuICAgIG1heENvbmN1cnJlbnRTdHJlYW1zXG4gIH0gPSB7fSkge1xuICAgIHN1cGVyKClcblxuICAgIGlmIChrZWVwQWxpdmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCd1bnN1cHBvcnRlZCBrZWVwQWxpdmUsIHVzZSBwaXBlbGluaW5nPTAgaW5zdGVhZCcpXG4gICAgfVxuXG4gICAgaWYgKHNvY2tldFRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCd1bnN1cHBvcnRlZCBzb2NrZXRUaW1lb3V0LCB1c2UgaGVhZGVyc1RpbWVvdXQgJiBib2R5VGltZW91dCBpbnN0ZWFkJylcbiAgICB9XG5cbiAgICBpZiAocmVxdWVzdFRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCd1bnN1cHBvcnRlZCByZXF1ZXN0VGltZW91dCwgdXNlIGhlYWRlcnNUaW1lb3V0ICYgYm9keVRpbWVvdXQgaW5zdGVhZCcpXG4gICAgfVxuXG4gICAgaWYgKGlkbGVUaW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndW5zdXBwb3J0ZWQgaWRsZVRpbWVvdXQsIHVzZSBrZWVwQWxpdmVUaW1lb3V0IGluc3RlYWQnKVxuICAgIH1cblxuICAgIGlmIChtYXhLZWVwQWxpdmVUaW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndW5zdXBwb3J0ZWQgbWF4S2VlcEFsaXZlVGltZW91dCwgdXNlIGtlZXBBbGl2ZU1heFRpbWVvdXQgaW5zdGVhZCcpXG4gICAgfVxuXG4gICAgaWYgKG1heEhlYWRlclNpemUgIT0gbnVsbCAmJiAhTnVtYmVyLmlzRmluaXRlKG1heEhlYWRlclNpemUpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgbWF4SGVhZGVyU2l6ZScpXG4gICAgfVxuXG4gICAgaWYgKHNvY2tldFBhdGggIT0gbnVsbCAmJiB0eXBlb2Ygc29ja2V0UGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBzb2NrZXRQYXRoJylcbiAgICB9XG5cbiAgICBpZiAoY29ubmVjdFRpbWVvdXQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0Zpbml0ZShjb25uZWN0VGltZW91dCkgfHwgY29ubmVjdFRpbWVvdXQgPCAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGNvbm5lY3RUaW1lb3V0JylcbiAgICB9XG5cbiAgICBpZiAoa2VlcEFsaXZlVGltZW91dCAhPSBudWxsICYmICghTnVtYmVyLmlzRmluaXRlKGtlZXBBbGl2ZVRpbWVvdXQpIHx8IGtlZXBBbGl2ZVRpbWVvdXQgPD0gMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBrZWVwQWxpdmVUaW1lb3V0JylcbiAgICB9XG5cbiAgICBpZiAoa2VlcEFsaXZlTWF4VGltZW91dCAhPSBudWxsICYmICghTnVtYmVyLmlzRmluaXRlKGtlZXBBbGl2ZU1heFRpbWVvdXQpIHx8IGtlZXBBbGl2ZU1heFRpbWVvdXQgPD0gMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBrZWVwQWxpdmVNYXhUaW1lb3V0JylcbiAgICB9XG5cbiAgICBpZiAoa2VlcEFsaXZlVGltZW91dFRocmVzaG9sZCAhPSBudWxsICYmICFOdW1iZXIuaXNGaW5pdGUoa2VlcEFsaXZlVGltZW91dFRocmVzaG9sZCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBrZWVwQWxpdmVUaW1lb3V0VGhyZXNob2xkJylcbiAgICB9XG5cbiAgICBpZiAoaGVhZGVyc1RpbWVvdXQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0ludGVnZXIoaGVhZGVyc1RpbWVvdXQpIHx8IGhlYWRlcnNUaW1lb3V0IDwgMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaGVhZGVyc1RpbWVvdXQgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgb3IgemVybycpXG4gICAgfVxuXG4gICAgaWYgKGJvZHlUaW1lb3V0ICE9IG51bGwgJiYgKCFOdW1iZXIuaXNJbnRlZ2VyKGJvZHlUaW1lb3V0KSB8fCBib2R5VGltZW91dCA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2JvZHlUaW1lb3V0IG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIG9yIHplcm8nKVxuICAgIH1cblxuICAgIGlmIChjb25uZWN0ICE9IG51bGwgJiYgdHlwZW9mIGNvbm5lY3QgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGNvbm5lY3QgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2Nvbm5lY3QgbXVzdCBiZSBhIGZ1bmN0aW9uIG9yIGFuIG9iamVjdCcpXG4gICAgfVxuXG4gICAgaWYgKG1heFJlZGlyZWN0aW9ucyAhPSBudWxsICYmICghTnVtYmVyLmlzSW50ZWdlcihtYXhSZWRpcmVjdGlvbnMpIHx8IG1heFJlZGlyZWN0aW9ucyA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ21heFJlZGlyZWN0aW9ucyBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJylcbiAgICB9XG5cbiAgICBpZiAobWF4UmVxdWVzdHNQZXJDbGllbnQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0ludGVnZXIobWF4UmVxdWVzdHNQZXJDbGllbnQpIHx8IG1heFJlcXVlc3RzUGVyQ2xpZW50IDwgMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignbWF4UmVxdWVzdHNQZXJDbGllbnQgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpXG4gICAgfVxuXG4gICAgaWYgKGxvY2FsQWRkcmVzcyAhPSBudWxsICYmICh0eXBlb2YgbG9jYWxBZGRyZXNzICE9PSAnc3RyaW5nJyB8fCBuZXQuaXNJUChsb2NhbEFkZHJlc3MpID09PSAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdsb2NhbEFkZHJlc3MgbXVzdCBiZSB2YWxpZCBzdHJpbmcgSVAgYWRkcmVzcycpXG4gICAgfVxuXG4gICAgaWYgKG1heFJlc3BvbnNlU2l6ZSAhPSBudWxsICYmICghTnVtYmVyLmlzSW50ZWdlcihtYXhSZXNwb25zZVNpemUpIHx8IG1heFJlc3BvbnNlU2l6ZSA8IC0xKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdtYXhSZXNwb25zZVNpemUgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgYXV0b1NlbGVjdEZhbWlseUF0dGVtcHRUaW1lb3V0ICE9IG51bGwgJiZcbiAgICAgICghTnVtYmVyLmlzSW50ZWdlcihhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQpIHx8IGF1dG9TZWxlY3RGYW1pbHlBdHRlbXB0VGltZW91dCA8IC0xKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpXG4gICAgfVxuXG4gICAgLy8gaDJcbiAgICBpZiAoYWxsb3dIMiAhPSBudWxsICYmIHR5cGVvZiBhbGxvd0gyICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignYWxsb3dIMiBtdXN0IGJlIGEgdmFsaWQgYm9vbGVhbiB2YWx1ZScpXG4gICAgfVxuXG4gICAgaWYgKG1heENvbmN1cnJlbnRTdHJlYW1zICE9IG51bGwgJiYgKHR5cGVvZiBtYXhDb25jdXJyZW50U3RyZWFtcyAhPT0gJ251bWJlcicgfHwgbWF4Q29uY3VycmVudFN0cmVhbXMgPCAxKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdtYXhDb25jdXJyZW50U3RyZWFtcyBtdXN0IGJlIGEgcG9zc2l0aXZlIGludGVnZXIsIGdyZWF0ZXIgdGhhbiAwJylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNvbm5lY3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbm5lY3QgPSBidWlsZENvbm5lY3Rvcih7XG4gICAgICAgIC4uLnRscyxcbiAgICAgICAgbWF4Q2FjaGVkU2Vzc2lvbnMsXG4gICAgICAgIGFsbG93SDIsXG4gICAgICAgIHNvY2tldFBhdGgsXG4gICAgICAgIHRpbWVvdXQ6IGNvbm5lY3RUaW1lb3V0LFxuICAgICAgICAuLi4odXRpbC5ub2RlSGFzQXV0b1NlbGVjdEZhbWlseSAmJiBhdXRvU2VsZWN0RmFtaWx5ID8geyBhdXRvU2VsZWN0RmFtaWx5LCBhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQgfSA6IHVuZGVmaW5lZCksXG4gICAgICAgIC4uLmNvbm5lY3RcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgdGhpc1trSW50ZXJjZXB0b3JzXSA9IGludGVyY2VwdG9ycyAmJiBpbnRlcmNlcHRvcnMuQ2xpZW50ICYmIEFycmF5LmlzQXJyYXkoaW50ZXJjZXB0b3JzLkNsaWVudClcbiAgICAgID8gaW50ZXJjZXB0b3JzLkNsaWVudFxuICAgICAgOiBbY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvcih7IG1heFJlZGlyZWN0aW9ucyB9KV1cbiAgICB0aGlzW2tVcmxdID0gdXRpbC5wYXJzZU9yaWdpbih1cmwpXG4gICAgdGhpc1trQ29ubmVjdG9yXSA9IGNvbm5lY3RcbiAgICB0aGlzW2tTb2NrZXRdID0gbnVsbFxuICAgIHRoaXNba1BpcGVsaW5pbmddID0gcGlwZWxpbmluZyAhPSBudWxsID8gcGlwZWxpbmluZyA6IDFcbiAgICB0aGlzW2tNYXhIZWFkZXJzU2l6ZV0gPSBtYXhIZWFkZXJTaXplIHx8IGh0dHAubWF4SGVhZGVyU2l6ZVxuICAgIHRoaXNba0tlZXBBbGl2ZURlZmF1bHRUaW1lb3V0XSA9IGtlZXBBbGl2ZVRpbWVvdXQgPT0gbnVsbCA/IDRlMyA6IGtlZXBBbGl2ZVRpbWVvdXRcbiAgICB0aGlzW2tLZWVwQWxpdmVNYXhUaW1lb3V0XSA9IGtlZXBBbGl2ZU1heFRpbWVvdXQgPT0gbnVsbCA/IDYwMGUzIDoga2VlcEFsaXZlTWF4VGltZW91dFxuICAgIHRoaXNba0tlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGRdID0ga2VlcEFsaXZlVGltZW91dFRocmVzaG9sZCA9PSBudWxsID8gMWUzIDoga2VlcEFsaXZlVGltZW91dFRocmVzaG9sZFxuICAgIHRoaXNba0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZV0gPSB0aGlzW2tLZWVwQWxpdmVEZWZhdWx0VGltZW91dF1cbiAgICB0aGlzW2tTZXJ2ZXJOYW1lXSA9IG51bGxcbiAgICB0aGlzW2tMb2NhbEFkZHJlc3NdID0gbG9jYWxBZGRyZXNzICE9IG51bGwgPyBsb2NhbEFkZHJlc3MgOiBudWxsXG4gICAgdGhpc1trUmVzdW1pbmddID0gMCAvLyAwLCBpZGxlLCAxLCBzY2hlZHVsZWQsIDIgcmVzdW1pbmdcbiAgICB0aGlzW2tOZWVkRHJhaW5dID0gMCAvLyAwLCBpZGxlLCAxLCBzY2hlZHVsZWQsIDIgcmVzdW1pbmdcbiAgICB0aGlzW2tIb3N0SGVhZGVyXSA9IGBob3N0OiAke3RoaXNba1VybF0uaG9zdG5hbWV9JHt0aGlzW2tVcmxdLnBvcnQgPyBgOiR7dGhpc1trVXJsXS5wb3J0fWAgOiAnJ31cXHJcXG5gXG4gICAgdGhpc1trQm9keVRpbWVvdXRdID0gYm9keVRpbWVvdXQgIT0gbnVsbCA/IGJvZHlUaW1lb3V0IDogMzAwZTNcbiAgICB0aGlzW2tIZWFkZXJzVGltZW91dF0gPSBoZWFkZXJzVGltZW91dCAhPSBudWxsID8gaGVhZGVyc1RpbWVvdXQgOiAzMDBlM1xuICAgIHRoaXNba1N0cmljdENvbnRlbnRMZW5ndGhdID0gc3RyaWN0Q29udGVudExlbmd0aCA9PSBudWxsID8gdHJ1ZSA6IHN0cmljdENvbnRlbnRMZW5ndGhcbiAgICB0aGlzW2tNYXhSZWRpcmVjdGlvbnNdID0gbWF4UmVkaXJlY3Rpb25zXG4gICAgdGhpc1trTWF4UmVxdWVzdHNdID0gbWF4UmVxdWVzdHNQZXJDbGllbnRcbiAgICB0aGlzW2tDbG9zZWRSZXNvbHZlXSA9IG51bGxcbiAgICB0aGlzW2tNYXhSZXNwb25zZVNpemVdID0gbWF4UmVzcG9uc2VTaXplID4gLTEgPyBtYXhSZXNwb25zZVNpemUgOiAtMVxuICAgIHRoaXNba0hUVFBDb25uVmVyc2lvbl0gPSAnaDEnXG5cbiAgICAvLyBIVFRQLzJcbiAgICB0aGlzW2tIVFRQMlNlc3Npb25dID0gbnVsbFxuICAgIHRoaXNba0hUVFAyU2Vzc2lvblN0YXRlXSA9ICFhbGxvd0gyXG4gICAgICA/IG51bGxcbiAgICAgIDoge1xuICAgICAgICAvLyBzdHJlYW1zOiBudWxsLCAvLyBGaXhlZCBxdWV1ZSBvZiBzdHJlYW1zIC0gRm9yIGZ1dHVyZSBzdXBwb3J0IG9mIGBwdXNoYFxuICAgICAgICAgIG9wZW5TdHJlYW1zOiAwLCAvLyBLZWVwIHRyYWNrIG9mIHRoZW0gdG8gZGVjaWRlIHdldGhlciBvciBub3QgdW5yZWYgdGhlIHNlc3Npb25cbiAgICAgICAgICBtYXhDb25jdXJyZW50U3RyZWFtczogbWF4Q29uY3VycmVudFN0cmVhbXMgIT0gbnVsbCA/IG1heENvbmN1cnJlbnRTdHJlYW1zIDogMTAwIC8vIE1heCBwZWVyQ29uY3VycmVudFN0cmVhbXMgZm9yIGEgTm9kZSBoMiBzZXJ2ZXJcbiAgICAgICAgfVxuICAgIHRoaXNba0hvc3RdID0gYCR7dGhpc1trVXJsXS5ob3N0bmFtZX0ke3RoaXNba1VybF0ucG9ydCA/IGA6JHt0aGlzW2tVcmxdLnBvcnR9YCA6ICcnfWBcblxuICAgIC8vIGtRdWV1ZSBpcyBidWlsdCB1cCBvZiAzIHNlY3Rpb25zIHNlcGFyYXRlZCBieVxuICAgIC8vIHRoZSBrUnVubmluZ0lkeCBhbmQga1BlbmRpbmdJZHggaW5kaWNlcy5cbiAgICAvLyB8ICAgY29tcGxldGUgICB8ICAgcnVubmluZyAgIHwgICBwZW5kaW5nICAgfFxuICAgIC8vICAgICAgICAgICAgICAgIF4ga1J1bm5pbmdJZHggXiBrUGVuZGluZ0lkeCBeIGtRdWV1ZS5sZW5ndGhcbiAgICAvLyBrUnVubmluZ0lkeCBwb2ludHMgdG8gdGhlIGZpcnN0IHJ1bm5pbmcgZWxlbWVudC5cbiAgICAvLyBrUGVuZGluZ0lkeCBwb2ludHMgdG8gdGhlIGZpcnN0IHBlbmRpbmcgZWxlbWVudC5cbiAgICAvLyBUaGlzIGltcGxlbWVudHMgYSBmYXN0IHF1ZXVlIHdpdGggYW4gYW1vcnRpemVkXG4gICAgLy8gdGltZSBvZiBPKDEpLlxuXG4gICAgdGhpc1trUXVldWVdID0gW11cbiAgICB0aGlzW2tSdW5uaW5nSWR4XSA9IDBcbiAgICB0aGlzW2tQZW5kaW5nSWR4XSA9IDBcbiAgfVxuXG4gIGdldCBwaXBlbGluaW5nICgpIHtcbiAgICByZXR1cm4gdGhpc1trUGlwZWxpbmluZ11cbiAgfVxuXG4gIHNldCBwaXBlbGluaW5nICh2YWx1ZSkge1xuICAgIHRoaXNba1BpcGVsaW5pbmddID0gdmFsdWVcbiAgICByZXN1bWUodGhpcywgdHJ1ZSlcbiAgfVxuXG4gIGdldCBba1BlbmRpbmddICgpIHtcbiAgICByZXR1cm4gdGhpc1trUXVldWVdLmxlbmd0aCAtIHRoaXNba1BlbmRpbmdJZHhdXG4gIH1cblxuICBnZXQgW2tSdW5uaW5nXSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1BlbmRpbmdJZHhdIC0gdGhpc1trUnVubmluZ0lkeF1cbiAgfVxuXG4gIGdldCBba1NpemVdICgpIHtcbiAgICByZXR1cm4gdGhpc1trUXVldWVdLmxlbmd0aCAtIHRoaXNba1J1bm5pbmdJZHhdXG4gIH1cblxuICBnZXQgW2tDb25uZWN0ZWRdICgpIHtcbiAgICByZXR1cm4gISF0aGlzW2tTb2NrZXRdICYmICF0aGlzW2tDb25uZWN0aW5nXSAmJiAhdGhpc1trU29ja2V0XS5kZXN0cm95ZWRcbiAgfVxuXG4gIGdldCBba0J1c3ldICgpIHtcbiAgICBjb25zdCBzb2NrZXQgPSB0aGlzW2tTb2NrZXRdXG4gICAgcmV0dXJuIChcbiAgICAgIChzb2NrZXQgJiYgKHNvY2tldFtrUmVzZXRdIHx8IHNvY2tldFtrV3JpdGluZ10gfHwgc29ja2V0W2tCbG9ja2luZ10pKSB8fFxuICAgICAgKHRoaXNba1NpemVdID49ICh0aGlzW2tQaXBlbGluaW5nXSB8fCAxKSkgfHxcbiAgICAgIHRoaXNba1BlbmRpbmddID4gMFxuICAgIClcbiAgfVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZTogb25seSB1c2VkIGZvciB0ZXN0ICovXG4gIFtrQ29ubmVjdF0gKGNiKSB7XG4gICAgY29ubmVjdCh0aGlzKVxuICAgIHRoaXMub25jZSgnY29ubmVjdCcsIGNiKVxuICB9XG5cbiAgW2tEaXNwYXRjaF0gKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBjb25zdCBvcmlnaW4gPSBvcHRzLm9yaWdpbiB8fCB0aGlzW2tVcmxdLm9yaWdpblxuXG4gICAgY29uc3QgcmVxdWVzdCA9IHRoaXNba0hUVFBDb25uVmVyc2lvbl0gPT09ICdoMidcbiAgICAgID8gUmVxdWVzdFtrSFRUUDJCdWlsZFJlcXVlc3RdKG9yaWdpbiwgb3B0cywgaGFuZGxlcilcbiAgICAgIDogUmVxdWVzdFtrSFRUUDFCdWlsZFJlcXVlc3RdKG9yaWdpbiwgb3B0cywgaGFuZGxlcilcblxuICAgIHRoaXNba1F1ZXVlXS5wdXNoKHJlcXVlc3QpXG4gICAgaWYgKHRoaXNba1Jlc3VtaW5nXSkge1xuICAgICAgLy8gRG8gbm90aGluZy5cbiAgICB9IGVsc2UgaWYgKHV0aWwuYm9keUxlbmd0aChyZXF1ZXN0LmJvZHkpID09IG51bGwgJiYgdXRpbC5pc0l0ZXJhYmxlKHJlcXVlc3QuYm9keSkpIHtcbiAgICAgIC8vIFdhaXQgYSB0aWNrIGluIGNhc2Ugc3RyZWFtL2l0ZXJhdG9yIGlzIGVuZGVkIGluIHRoZSBzYW1lIHRpY2suXG4gICAgICB0aGlzW2tSZXN1bWluZ10gPSAxXG4gICAgICBwcm9jZXNzLm5leHRUaWNrKHJlc3VtZSwgdGhpcylcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdW1lKHRoaXMsIHRydWUpXG4gICAgfVxuXG4gICAgaWYgKHRoaXNba1Jlc3VtaW5nXSAmJiB0aGlzW2tOZWVkRHJhaW5dICE9PSAyICYmIHRoaXNba0J1c3ldKSB7XG4gICAgICB0aGlzW2tOZWVkRHJhaW5dID0gMlxuICAgIH1cblxuICAgIHJldHVybiB0aGlzW2tOZWVkRHJhaW5dIDwgMlxuICB9XG5cbiAgYXN5bmMgW2tDbG9zZV0gKCkge1xuICAgIC8vIFRPRE86IGZvciBIMiB3ZSBuZWVkIHRvIGdyYWNlZnVsbHkgZmx1c2ggdGhlIHJlbWFpbmluZyBlbnF1ZXVlZFxuICAgIC8vIHJlcXVlc3QgYW5kIGNsb3NlIGVhY2ggc3RyZWFtLlxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgaWYgKCF0aGlzW2tTaXplXSkge1xuICAgICAgICByZXNvbHZlKG51bGwpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzW2tDbG9zZWRSZXNvbHZlXSA9IHJlc29sdmVcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgYXN5bmMgW2tEZXN0cm95XSAoZXJyKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBjb25zdCByZXF1ZXN0cyA9IHRoaXNba1F1ZXVlXS5zcGxpY2UodGhpc1trUGVuZGluZ0lkeF0pXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcXVlc3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSByZXF1ZXN0c1tpXVxuICAgICAgICBlcnJvclJlcXVlc3QodGhpcywgcmVxdWVzdCwgZXJyKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBjYWxsYmFjayA9ICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXNba0Nsb3NlZFJlc29sdmVdKSB7XG4gICAgICAgICAgLy8gVE9ETyAoZml4KTogU2hvdWxkIHdlIGVycm9yIGhlcmUgd2l0aCBDbGllbnREZXN0cm95ZWRFcnJvcj9cbiAgICAgICAgICB0aGlzW2tDbG9zZWRSZXNvbHZlXSgpXG4gICAgICAgICAgdGhpc1trQ2xvc2VkUmVzb2x2ZV0gPSBudWxsXG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZSgpXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzW2tIVFRQMlNlc3Npb25dICE9IG51bGwpIHtcbiAgICAgICAgdXRpbC5kZXN0cm95KHRoaXNba0hUVFAyU2Vzc2lvbl0sIGVycilcbiAgICAgICAgdGhpc1trSFRUUDJTZXNzaW9uXSA9IG51bGxcbiAgICAgICAgdGhpc1trSFRUUDJTZXNzaW9uU3RhdGVdID0gbnVsbFxuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXNba1NvY2tldF0pIHtcbiAgICAgICAgcXVldWVNaWNyb3Rhc2soY2FsbGJhY2spXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1dGlsLmRlc3Ryb3kodGhpc1trU29ja2V0XS5vbignY2xvc2UnLCBjYWxsYmFjayksIGVycilcbiAgICAgIH1cblxuICAgICAgcmVzdW1lKHRoaXMpXG4gICAgfSlcbiAgfVxufVxuXG5mdW5jdGlvbiBvbkh0dHAyU2Vzc2lvbkVycm9yIChlcnIpIHtcbiAgYXNzZXJ0KGVyci5jb2RlICE9PSAnRVJSX1RMU19DRVJUX0FMVE5BTUVfSU5WQUxJRCcpXG5cbiAgdGhpc1trU29ja2V0XVtrRXJyb3JdID0gZXJyXG5cbiAgb25FcnJvcih0aGlzW2tDbGllbnRdLCBlcnIpXG59XG5cbmZ1bmN0aW9uIG9uSHR0cDJGcmFtZUVycm9yICh0eXBlLCBjb2RlLCBpZCkge1xuICBjb25zdCBlcnIgPSBuZXcgSW5mb3JtYXRpb25hbEVycm9yKGBIVFRQLzI6IFwiZnJhbWVFcnJvclwiIHJlY2VpdmVkIC0gdHlwZSAke3R5cGV9LCBjb2RlICR7Y29kZX1gKVxuXG4gIGlmIChpZCA9PT0gMCkge1xuICAgIHRoaXNba1NvY2tldF1ba0Vycm9yXSA9IGVyclxuICAgIG9uRXJyb3IodGhpc1trQ2xpZW50XSwgZXJyKVxuICB9XG59XG5cbmZ1bmN0aW9uIG9uSHR0cDJTZXNzaW9uRW5kICgpIHtcbiAgdXRpbC5kZXN0cm95KHRoaXMsIG5ldyBTb2NrZXRFcnJvcignb3RoZXIgc2lkZSBjbG9zZWQnKSlcbiAgdXRpbC5kZXN0cm95KHRoaXNba1NvY2tldF0sIG5ldyBTb2NrZXRFcnJvcignb3RoZXIgc2lkZSBjbG9zZWQnKSlcbn1cblxuZnVuY3Rpb24gb25IVFRQMkdvQXdheSAoY29kZSkge1xuICBjb25zdCBjbGllbnQgPSB0aGlzW2tDbGllbnRdXG4gIGNvbnN0IGVyciA9IG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoYEhUVFAvMjogXCJHT0FXQVlcIiBmcmFtZSByZWNlaXZlZCB3aXRoIGNvZGUgJHtjb2RlfWApXG4gIGNsaWVudFtrU29ja2V0XSA9IG51bGxcbiAgY2xpZW50W2tIVFRQMlNlc3Npb25dID0gbnVsbFxuXG4gIGlmIChjbGllbnQuZGVzdHJveWVkKSB7XG4gICAgYXNzZXJ0KHRoaXNba1BlbmRpbmddID09PSAwKVxuXG4gICAgLy8gRmFpbCBlbnRpcmUgcXVldWUuXG4gICAgY29uc3QgcmVxdWVzdHMgPSBjbGllbnRba1F1ZXVlXS5zcGxpY2UoY2xpZW50W2tSdW5uaW5nSWR4XSlcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcXVlc3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCByZXF1ZXN0ID0gcmVxdWVzdHNbaV1cbiAgICAgIGVycm9yUmVxdWVzdCh0aGlzLCByZXF1ZXN0LCBlcnIpXG4gICAgfVxuICB9IGVsc2UgaWYgKGNsaWVudFtrUnVubmluZ10gPiAwKSB7XG4gICAgLy8gRmFpbCBoZWFkIG9mIHBpcGVsaW5lLlxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdXVxuICAgIGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF0rK10gPSBudWxsXG5cbiAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIpXG4gIH1cblxuICBjbGllbnRba1BlbmRpbmdJZHhdID0gY2xpZW50W2tSdW5uaW5nSWR4XVxuXG4gIGFzc2VydChjbGllbnRba1J1bm5pbmddID09PSAwKVxuXG4gIGNsaWVudC5lbWl0KCdkaXNjb25uZWN0JyxcbiAgICBjbGllbnRba1VybF0sXG4gICAgW2NsaWVudF0sXG4gICAgZXJyXG4gIClcblxuICByZXN1bWUoY2xpZW50KVxufVxuXG5jb25zdCBjb25zdGFudHMgPSByZXF1aXJlKCcuL2xsaHR0cC9jb25zdGFudHMnKVxuY29uc3QgY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvciA9IHJlcXVpcmUoJy4vaW50ZXJjZXB0b3IvcmVkaXJlY3RJbnRlcmNlcHRvcicpXG5jb25zdCBFTVBUWV9CVUYgPSBCdWZmZXIuYWxsb2MoMClcblxuYXN5bmMgZnVuY3Rpb24gbGF6eWxsaHR0cCAoKSB7XG4gIGNvbnN0IGxsaHR0cFdhc21EYXRhID0gcHJvY2Vzcy5lbnYuSkVTVF9XT1JLRVJfSUQgPyByZXF1aXJlKCcuL2xsaHR0cC9sbGh0dHAtd2FzbS5qcycpIDogdW5kZWZpbmVkXG5cbiAgbGV0IG1vZFxuICB0cnkge1xuICAgIG1vZCA9IGF3YWl0IFdlYkFzc2VtYmx5LmNvbXBpbGUoQnVmZmVyLmZyb20ocmVxdWlyZSgnLi9sbGh0dHAvbGxodHRwX3NpbWQtd2FzbS5qcycpLCAnYmFzZTY0JykpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXG4gICAgLy8gV2UgY291bGQgY2hlY2sgaWYgdGhlIGVycm9yIHdhcyBjYXVzZWQgYnkgdGhlIHNpbWQgb3B0aW9uIG5vdFxuICAgIC8vIGJlaW5nIGVuYWJsZWQsIGJ1dCB0aGUgb2NjdXJyaW5nIG9mIHRoaXMgb3RoZXIgZXJyb3JcbiAgICAvLyAqIGh0dHBzOi8vZ2l0aHViLmNvbS9lbXNjcmlwdGVuLWNvcmUvZW1zY3JpcHRlbi9pc3N1ZXMvMTE0OTVcbiAgICAvLyBnb3QgbWUgdG8gcmVtb3ZlIHRoYXQgY2hlY2sgdG8gYXZvaWQgYnJlYWtpbmcgTm9kZSAxMi5cbiAgICBtb2QgPSBhd2FpdCBXZWJBc3NlbWJseS5jb21waWxlKEJ1ZmZlci5mcm9tKGxsaHR0cFdhc21EYXRhIHx8IHJlcXVpcmUoJy4vbGxodHRwL2xsaHR0cC13YXNtLmpzJyksICdiYXNlNjQnKSlcbiAgfVxuXG4gIHJldHVybiBhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShtb2QsIHtcbiAgICBlbnY6IHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIGNhbWVsY2FzZSAqL1xuXG4gICAgICB3YXNtX29uX3VybDogKHAsIGF0LCBsZW4pID0+IHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgcmV0dXJuIDBcbiAgICAgIH0sXG4gICAgICB3YXNtX29uX3N0YXR1czogKHAsIGF0LCBsZW4pID0+IHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGN1cnJlbnRQYXJzZXIucHRyLCBwKVxuICAgICAgICBjb25zdCBzdGFydCA9IGF0IC0gY3VycmVudEJ1ZmZlclB0ciArIGN1cnJlbnRCdWZmZXJSZWYuYnl0ZU9mZnNldFxuICAgICAgICByZXR1cm4gY3VycmVudFBhcnNlci5vblN0YXR1cyhuZXcgRmFzdEJ1ZmZlcihjdXJyZW50QnVmZmVyUmVmLmJ1ZmZlciwgc3RhcnQsIGxlbikpIHx8IDBcbiAgICAgIH0sXG4gICAgICB3YXNtX29uX21lc3NhZ2VfYmVnaW46IChwKSA9PiB7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjdXJyZW50UGFyc2VyLnB0ciwgcClcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRQYXJzZXIub25NZXNzYWdlQmVnaW4oKSB8fCAwXG4gICAgICB9LFxuICAgICAgd2FzbV9vbl9oZWFkZXJfZmllbGQ6IChwLCBhdCwgbGVuKSA9PiB7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjdXJyZW50UGFyc2VyLnB0ciwgcClcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBhdCAtIGN1cnJlbnRCdWZmZXJQdHIgKyBjdXJyZW50QnVmZmVyUmVmLmJ5dGVPZmZzZXRcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRQYXJzZXIub25IZWFkZXJGaWVsZChuZXcgRmFzdEJ1ZmZlcihjdXJyZW50QnVmZmVyUmVmLmJ1ZmZlciwgc3RhcnQsIGxlbikpIHx8IDBcbiAgICAgIH0sXG4gICAgICB3YXNtX29uX2hlYWRlcl92YWx1ZTogKHAsIGF0LCBsZW4pID0+IHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGN1cnJlbnRQYXJzZXIucHRyLCBwKVxuICAgICAgICBjb25zdCBzdGFydCA9IGF0IC0gY3VycmVudEJ1ZmZlclB0ciArIGN1cnJlbnRCdWZmZXJSZWYuYnl0ZU9mZnNldFxuICAgICAgICByZXR1cm4gY3VycmVudFBhcnNlci5vbkhlYWRlclZhbHVlKG5ldyBGYXN0QnVmZmVyKGN1cnJlbnRCdWZmZXJSZWYuYnVmZmVyLCBzdGFydCwgbGVuKSkgfHwgMFxuICAgICAgfSxcbiAgICAgIHdhc21fb25faGVhZGVyc19jb21wbGV0ZTogKHAsIHN0YXR1c0NvZGUsIHVwZ3JhZGUsIHNob3VsZEtlZXBBbGl2ZSkgPT4ge1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY3VycmVudFBhcnNlci5wdHIsIHApXG4gICAgICAgIHJldHVybiBjdXJyZW50UGFyc2VyLm9uSGVhZGVyc0NvbXBsZXRlKHN0YXR1c0NvZGUsIEJvb2xlYW4odXBncmFkZSksIEJvb2xlYW4oc2hvdWxkS2VlcEFsaXZlKSkgfHwgMFxuICAgICAgfSxcbiAgICAgIHdhc21fb25fYm9keTogKHAsIGF0LCBsZW4pID0+IHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGN1cnJlbnRQYXJzZXIucHRyLCBwKVxuICAgICAgICBjb25zdCBzdGFydCA9IGF0IC0gY3VycmVudEJ1ZmZlclB0ciArIGN1cnJlbnRCdWZmZXJSZWYuYnl0ZU9mZnNldFxuICAgICAgICByZXR1cm4gY3VycmVudFBhcnNlci5vbkJvZHkobmV3IEZhc3RCdWZmZXIoY3VycmVudEJ1ZmZlclJlZi5idWZmZXIsIHN0YXJ0LCBsZW4pKSB8fCAwXG4gICAgICB9LFxuICAgICAgd2FzbV9vbl9tZXNzYWdlX2NvbXBsZXRlOiAocCkgPT4ge1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY3VycmVudFBhcnNlci5wdHIsIHApXG4gICAgICAgIHJldHVybiBjdXJyZW50UGFyc2VyLm9uTWVzc2FnZUNvbXBsZXRlKCkgfHwgMFxuICAgICAgfVxuXG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIGNhbWVsY2FzZSAqL1xuICAgIH1cbiAgfSlcbn1cblxubGV0IGxsaHR0cEluc3RhbmNlID0gbnVsbFxubGV0IGxsaHR0cFByb21pc2UgPSBsYXp5bGxodHRwKClcbmxsaHR0cFByb21pc2UuY2F0Y2goKVxuXG5sZXQgY3VycmVudFBhcnNlciA9IG51bGxcbmxldCBjdXJyZW50QnVmZmVyUmVmID0gbnVsbFxubGV0IGN1cnJlbnRCdWZmZXJTaXplID0gMFxubGV0IGN1cnJlbnRCdWZmZXJQdHIgPSBudWxsXG5cbmNvbnN0IFRJTUVPVVRfSEVBREVSUyA9IDFcbmNvbnN0IFRJTUVPVVRfQk9EWSA9IDJcbmNvbnN0IFRJTUVPVVRfSURMRSA9IDNcblxuY2xhc3MgUGFyc2VyIHtcbiAgY29uc3RydWN0b3IgKGNsaWVudCwgc29ja2V0LCB7IGV4cG9ydHMgfSkge1xuICAgIGFzc2VydChOdW1iZXIuaXNGaW5pdGUoY2xpZW50W2tNYXhIZWFkZXJzU2l6ZV0pICYmIGNsaWVudFtrTWF4SGVhZGVyc1NpemVdID4gMClcblxuICAgIHRoaXMubGxodHRwID0gZXhwb3J0c1xuICAgIHRoaXMucHRyID0gdGhpcy5sbGh0dHAubGxodHRwX2FsbG9jKGNvbnN0YW50cy5UWVBFLlJFU1BPTlNFKVxuICAgIHRoaXMuY2xpZW50ID0gY2xpZW50XG4gICAgdGhpcy5zb2NrZXQgPSBzb2NrZXRcbiAgICB0aGlzLnRpbWVvdXQgPSBudWxsXG4gICAgdGhpcy50aW1lb3V0VmFsdWUgPSBudWxsXG4gICAgdGhpcy50aW1lb3V0VHlwZSA9IG51bGxcbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBudWxsXG4gICAgdGhpcy5zdGF0dXNUZXh0ID0gJydcbiAgICB0aGlzLnVwZ3JhZGUgPSBmYWxzZVxuICAgIHRoaXMuaGVhZGVycyA9IFtdXG4gICAgdGhpcy5oZWFkZXJzU2l6ZSA9IDBcbiAgICB0aGlzLmhlYWRlcnNNYXhTaXplID0gY2xpZW50W2tNYXhIZWFkZXJzU2l6ZV1cbiAgICB0aGlzLnNob3VsZEtlZXBBbGl2ZSA9IGZhbHNlXG4gICAgdGhpcy5wYXVzZWQgPSBmYWxzZVxuICAgIHRoaXMucmVzdW1lID0gdGhpcy5yZXN1bWUuYmluZCh0aGlzKVxuXG4gICAgdGhpcy5ieXRlc1JlYWQgPSAwXG5cbiAgICB0aGlzLmtlZXBBbGl2ZSA9ICcnXG4gICAgdGhpcy5jb250ZW50TGVuZ3RoID0gJydcbiAgICB0aGlzLmNvbm5lY3Rpb24gPSAnJ1xuICAgIHRoaXMubWF4UmVzcG9uc2VTaXplID0gY2xpZW50W2tNYXhSZXNwb25zZVNpemVdXG4gIH1cblxuICBzZXRUaW1lb3V0ICh2YWx1ZSwgdHlwZSkge1xuICAgIHRoaXMudGltZW91dFR5cGUgPSB0eXBlXG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLnRpbWVvdXRWYWx1ZSkge1xuICAgICAgdGltZXJzLmNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpXG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgdGhpcy50aW1lb3V0ID0gdGltZXJzLnNldFRpbWVvdXQob25QYXJzZXJUaW1lb3V0LCB2YWx1ZSwgdGhpcylcbiAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIGVsc2U6IG9ubHkgZm9yIGplc3RcbiAgICAgICAgaWYgKHRoaXMudGltZW91dC51bnJlZikge1xuICAgICAgICAgIHRoaXMudGltZW91dC51bnJlZigpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudGltZW91dCA9IG51bGxcbiAgICAgIH1cbiAgICAgIHRoaXMudGltZW91dFZhbHVlID0gdmFsdWVcbiAgICB9IGVsc2UgaWYgKHRoaXMudGltZW91dCkge1xuICAgICAgLy8gaXN0YW5idWwgaWdub3JlIGVsc2U6IG9ubHkgZm9yIGplc3RcbiAgICAgIGlmICh0aGlzLnRpbWVvdXQucmVmcmVzaCkge1xuICAgICAgICB0aGlzLnRpbWVvdXQucmVmcmVzaCgpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmVzdW1lICgpIHtcbiAgICBpZiAodGhpcy5zb2NrZXQuZGVzdHJveWVkIHx8ICF0aGlzLnBhdXNlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgYXNzZXJ0KHRoaXMucHRyICE9IG51bGwpXG4gICAgYXNzZXJ0KGN1cnJlbnRQYXJzZXIgPT0gbnVsbClcblxuICAgIHRoaXMubGxodHRwLmxsaHR0cF9yZXN1bWUodGhpcy5wdHIpXG5cbiAgICBhc3NlcnQodGhpcy50aW1lb3V0VHlwZSA9PT0gVElNRU9VVF9CT0RZKVxuICAgIGlmICh0aGlzLnRpbWVvdXQpIHtcbiAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBvbmx5IGZvciBqZXN0XG4gICAgICBpZiAodGhpcy50aW1lb3V0LnJlZnJlc2gpIHtcbiAgICAgICAgdGhpcy50aW1lb3V0LnJlZnJlc2goKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucGF1c2VkID0gZmFsc2VcbiAgICB0aGlzLmV4ZWN1dGUodGhpcy5zb2NrZXQucmVhZCgpIHx8IEVNUFRZX0JVRikgLy8gRmx1c2ggcGFyc2VyLlxuICAgIHRoaXMucmVhZE1vcmUoKVxuICB9XG5cbiAgcmVhZE1vcmUgKCkge1xuICAgIHdoaWxlICghdGhpcy5wYXVzZWQgJiYgdGhpcy5wdHIpIHtcbiAgICAgIGNvbnN0IGNodW5rID0gdGhpcy5zb2NrZXQucmVhZCgpXG4gICAgICBpZiAoY2h1bmsgPT09IG51bGwpIHtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIHRoaXMuZXhlY3V0ZShjaHVuaylcbiAgICB9XG4gIH1cblxuICBleGVjdXRlIChkYXRhKSB7XG4gICAgYXNzZXJ0KHRoaXMucHRyICE9IG51bGwpXG4gICAgYXNzZXJ0KGN1cnJlbnRQYXJzZXIgPT0gbnVsbClcbiAgICBhc3NlcnQoIXRoaXMucGF1c2VkKVxuXG4gICAgY29uc3QgeyBzb2NrZXQsIGxsaHR0cCB9ID0gdGhpc1xuXG4gICAgaWYgKGRhdGEubGVuZ3RoID4gY3VycmVudEJ1ZmZlclNpemUpIHtcbiAgICAgIGlmIChjdXJyZW50QnVmZmVyUHRyKSB7XG4gICAgICAgIGxsaHR0cC5mcmVlKGN1cnJlbnRCdWZmZXJQdHIpXG4gICAgICB9XG4gICAgICBjdXJyZW50QnVmZmVyU2l6ZSA9IE1hdGguY2VpbChkYXRhLmxlbmd0aCAvIDQwOTYpICogNDA5NlxuICAgICAgY3VycmVudEJ1ZmZlclB0ciA9IGxsaHR0cC5tYWxsb2MoY3VycmVudEJ1ZmZlclNpemUpXG4gICAgfVxuXG4gICAgbmV3IFVpbnQ4QXJyYXkobGxodHRwLm1lbW9yeS5idWZmZXIsIGN1cnJlbnRCdWZmZXJQdHIsIGN1cnJlbnRCdWZmZXJTaXplKS5zZXQoZGF0YSlcblxuICAgIC8vIENhbGwgYGV4ZWN1dGVgIG9uIHRoZSB3YXNtIHBhcnNlci5cbiAgICAvLyBXZSBwYXNzIHRoZSBgbGxodHRwX3BhcnNlcmAgcG9pbnRlciBhZGRyZXNzLCB0aGUgcG9pbnRlciBhZGRyZXNzIG9mIGJ1ZmZlciB2aWV3IGRhdGEsXG4gICAgLy8gYW5kIGZpbmFsbHkgdGhlIGxlbmd0aCBvZiBieXRlcyB0byBwYXJzZS5cbiAgICAvLyBUaGUgcmV0dXJuIHZhbHVlIGlzIGFuIGVycm9yIGNvZGUgb3IgYGNvbnN0YW50cy5FUlJPUi5PS2AuXG4gICAgdHJ5IHtcbiAgICAgIGxldCByZXRcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY3VycmVudEJ1ZmZlclJlZiA9IGRhdGFcbiAgICAgICAgY3VycmVudFBhcnNlciA9IHRoaXNcbiAgICAgICAgcmV0ID0gbGxodHRwLmxsaHR0cF9leGVjdXRlKHRoaXMucHRyLCBjdXJyZW50QnVmZmVyUHRyLCBkYXRhLmxlbmd0aClcbiAgICAgICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY2F0Y2ggKi9cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogZGlmZmljdWx0IHRvIG1ha2UgYSB0ZXN0IGNhc2UgZm9yICovXG4gICAgICAgIHRocm93IGVyclxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgY3VycmVudFBhcnNlciA9IG51bGxcbiAgICAgICAgY3VycmVudEJ1ZmZlclJlZiA9IG51bGxcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb2Zmc2V0ID0gbGxodHRwLmxsaHR0cF9nZXRfZXJyb3JfcG9zKHRoaXMucHRyKSAtIGN1cnJlbnRCdWZmZXJQdHJcblxuICAgICAgaWYgKHJldCA9PT0gY29uc3RhbnRzLkVSUk9SLlBBVVNFRF9VUEdSQURFKSB7XG4gICAgICAgIHRoaXMub25VcGdyYWRlKGRhdGEuc2xpY2Uob2Zmc2V0KSlcbiAgICAgIH0gZWxzZSBpZiAocmV0ID09PSBjb25zdGFudHMuRVJST1IuUEFVU0VEKSB7XG4gICAgICAgIHRoaXMucGF1c2VkID0gdHJ1ZVxuICAgICAgICBzb2NrZXQudW5zaGlmdChkYXRhLnNsaWNlKG9mZnNldCkpXG4gICAgICB9IGVsc2UgaWYgKHJldCAhPT0gY29uc3RhbnRzLkVSUk9SLk9LKSB7XG4gICAgICAgIGNvbnN0IHB0ciA9IGxsaHR0cC5sbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbih0aGlzLnB0cilcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSAnJ1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogZGlmZmljdWx0IHRvIG1ha2UgYSB0ZXN0IGNhc2UgZm9yICovXG4gICAgICAgIGlmIChwdHIpIHtcbiAgICAgICAgICBjb25zdCBsZW4gPSBuZXcgVWludDhBcnJheShsbGh0dHAubWVtb3J5LmJ1ZmZlciwgcHRyKS5pbmRleE9mKDApXG4gICAgICAgICAgbWVzc2FnZSA9XG4gICAgICAgICAgICAnUmVzcG9uc2UgZG9lcyBub3QgbWF0Y2ggdGhlIEhUVFAvMS4xIHByb3RvY29sICgnICtcbiAgICAgICAgICAgIEJ1ZmZlci5mcm9tKGxsaHR0cC5tZW1vcnkuYnVmZmVyLCBwdHIsIGxlbikudG9TdHJpbmcoKSArXG4gICAgICAgICAgICAnKSdcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgSFRUUFBhcnNlckVycm9yKG1lc3NhZ2UsIGNvbnN0YW50cy5FUlJPUltyZXRdLCBkYXRhLnNsaWNlKG9mZnNldCkpXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBlcnIpXG4gICAgfVxuICB9XG5cbiAgZGVzdHJveSAoKSB7XG4gICAgYXNzZXJ0KHRoaXMucHRyICE9IG51bGwpXG4gICAgYXNzZXJ0KGN1cnJlbnRQYXJzZXIgPT0gbnVsbClcblxuICAgIHRoaXMubGxodHRwLmxsaHR0cF9mcmVlKHRoaXMucHRyKVxuICAgIHRoaXMucHRyID0gbnVsbFxuXG4gICAgdGltZXJzLmNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpXG4gICAgdGhpcy50aW1lb3V0ID0gbnVsbFxuICAgIHRoaXMudGltZW91dFZhbHVlID0gbnVsbFxuICAgIHRoaXMudGltZW91dFR5cGUgPSBudWxsXG5cbiAgICB0aGlzLnBhdXNlZCA9IGZhbHNlXG4gIH1cblxuICBvblN0YXR1cyAoYnVmKSB7XG4gICAgdGhpcy5zdGF0dXNUZXh0ID0gYnVmLnRvU3RyaW5nKClcbiAgfVxuXG4gIG9uTWVzc2FnZUJlZ2luICgpIHtcbiAgICBjb25zdCB7IHNvY2tldCwgY2xpZW50IH0gPSB0aGlzXG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogZGlmZmljdWx0IHRvIG1ha2UgYSB0ZXN0IGNhc2UgZm9yICovXG4gICAgaWYgKHNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdXVxuICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuICB9XG5cbiAgb25IZWFkZXJGaWVsZCAoYnVmKSB7XG4gICAgY29uc3QgbGVuID0gdGhpcy5oZWFkZXJzLmxlbmd0aFxuXG4gICAgaWYgKChsZW4gJiAxKSA9PT0gMCkge1xuICAgICAgdGhpcy5oZWFkZXJzLnB1c2goYnVmKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhlYWRlcnNbbGVuIC0gMV0gPSBCdWZmZXIuY29uY2F0KFt0aGlzLmhlYWRlcnNbbGVuIC0gMV0sIGJ1Zl0pXG4gICAgfVxuXG4gICAgdGhpcy50cmFja0hlYWRlcihidWYubGVuZ3RoKVxuICB9XG5cbiAgb25IZWFkZXJWYWx1ZSAoYnVmKSB7XG4gICAgbGV0IGxlbiA9IHRoaXMuaGVhZGVycy5sZW5ndGhcblxuICAgIGlmICgobGVuICYgMSkgPT09IDEpIHtcbiAgICAgIHRoaXMuaGVhZGVycy5wdXNoKGJ1ZilcbiAgICAgIGxlbiArPSAxXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGVhZGVyc1tsZW4gLSAxXSA9IEJ1ZmZlci5jb25jYXQoW3RoaXMuaGVhZGVyc1tsZW4gLSAxXSwgYnVmXSlcbiAgICB9XG5cbiAgICBjb25zdCBrZXkgPSB0aGlzLmhlYWRlcnNbbGVuIC0gMl1cbiAgICBpZiAoa2V5Lmxlbmd0aCA9PT0gMTAgJiYga2V5LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT0gJ2tlZXAtYWxpdmUnKSB7XG4gICAgICB0aGlzLmtlZXBBbGl2ZSArPSBidWYudG9TdHJpbmcoKVxuICAgIH0gZWxzZSBpZiAoa2V5Lmxlbmd0aCA9PT0gMTAgJiYga2V5LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT0gJ2Nvbm5lY3Rpb24nKSB7XG4gICAgICB0aGlzLmNvbm5lY3Rpb24gKz0gYnVmLnRvU3RyaW5nKClcbiAgICB9IGVsc2UgaWYgKGtleS5sZW5ndGggPT09IDE0ICYmIGtleS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT09ICdjb250ZW50LWxlbmd0aCcpIHtcbiAgICAgIHRoaXMuY29udGVudExlbmd0aCArPSBidWYudG9TdHJpbmcoKVxuICAgIH1cblxuICAgIHRoaXMudHJhY2tIZWFkZXIoYnVmLmxlbmd0aClcbiAgfVxuXG4gIHRyYWNrSGVhZGVyIChsZW4pIHtcbiAgICB0aGlzLmhlYWRlcnNTaXplICs9IGxlblxuICAgIGlmICh0aGlzLmhlYWRlcnNTaXplID49IHRoaXMuaGVhZGVyc01heFNpemUpIHtcbiAgICAgIHV0aWwuZGVzdHJveSh0aGlzLnNvY2tldCwgbmV3IEhlYWRlcnNPdmVyZmxvd0Vycm9yKCkpXG4gICAgfVxuICB9XG5cbiAgb25VcGdyYWRlIChoZWFkKSB7XG4gICAgY29uc3QgeyB1cGdyYWRlLCBjbGllbnQsIHNvY2tldCwgaGVhZGVycywgc3RhdHVzQ29kZSB9ID0gdGhpc1xuXG4gICAgYXNzZXJ0KHVwZ3JhZGUpXG5cbiAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XV1cbiAgICBhc3NlcnQocmVxdWVzdClcblxuICAgIGFzc2VydCghc29ja2V0LmRlc3Ryb3llZClcbiAgICBhc3NlcnQoc29ja2V0ID09PSBjbGllbnRba1NvY2tldF0pXG4gICAgYXNzZXJ0KCF0aGlzLnBhdXNlZClcbiAgICBhc3NlcnQocmVxdWVzdC51cGdyYWRlIHx8IHJlcXVlc3QubWV0aG9kID09PSAnQ09OTkVDVCcpXG5cbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBudWxsXG4gICAgdGhpcy5zdGF0dXNUZXh0ID0gJydcbiAgICB0aGlzLnNob3VsZEtlZXBBbGl2ZSA9IG51bGxcblxuICAgIGFzc2VydCh0aGlzLmhlYWRlcnMubGVuZ3RoICUgMiA9PT0gMClcbiAgICB0aGlzLmhlYWRlcnMgPSBbXVxuICAgIHRoaXMuaGVhZGVyc1NpemUgPSAwXG5cbiAgICBzb2NrZXQudW5zaGlmdChoZWFkKVxuXG4gICAgc29ja2V0W2tQYXJzZXJdLmRlc3Ryb3koKVxuICAgIHNvY2tldFtrUGFyc2VyXSA9IG51bGxcblxuICAgIHNvY2tldFtrQ2xpZW50XSA9IG51bGxcbiAgICBzb2NrZXRba0Vycm9yXSA9IG51bGxcbiAgICBzb2NrZXRcbiAgICAgIC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvblNvY2tldEVycm9yKVxuICAgICAgLnJlbW92ZUxpc3RlbmVyKCdyZWFkYWJsZScsIG9uU29ja2V0UmVhZGFibGUpXG4gICAgICAucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIG9uU29ja2V0RW5kKVxuICAgICAgLnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uU29ja2V0Q2xvc2UpXG5cbiAgICBjbGllbnRba1NvY2tldF0gPSBudWxsXG4gICAgY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XSsrXSA9IG51bGxcbiAgICBjbGllbnQuZW1pdCgnZGlzY29ubmVjdCcsIGNsaWVudFtrVXJsXSwgW2NsaWVudF0sIG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoJ3VwZ3JhZGUnKSlcblxuICAgIHRyeSB7XG4gICAgICByZXF1ZXN0Lm9uVXBncmFkZShzdGF0dXNDb2RlLCBoZWFkZXJzLCBzb2NrZXQpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBlcnIpXG4gICAgfVxuXG4gICAgcmVzdW1lKGNsaWVudClcbiAgfVxuXG4gIG9uSGVhZGVyc0NvbXBsZXRlIChzdGF0dXNDb2RlLCB1cGdyYWRlLCBzaG91bGRLZWVwQWxpdmUpIHtcbiAgICBjb25zdCB7IGNsaWVudCwgc29ja2V0LCBoZWFkZXJzLCBzdGF0dXNUZXh0IH0gPSB0aGlzXG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogZGlmZmljdWx0IHRvIG1ha2UgYSB0ZXN0IGNhc2UgZm9yICovXG4gICAgaWYgKHNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdXVxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IGRpZmZpY3VsdCB0byBtYWtlIGEgdGVzdCBjYXNlIGZvciAqL1xuICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgYXNzZXJ0KCF0aGlzLnVwZ3JhZGUpXG4gICAgYXNzZXJ0KHRoaXMuc3RhdHVzQ29kZSA8IDIwMClcblxuICAgIGlmIChzdGF0dXNDb2RlID09PSAxMDApIHtcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBTb2NrZXRFcnJvcignYmFkIHJlc3BvbnNlJywgdXRpbC5nZXRTb2NrZXRJbmZvKHNvY2tldCkpKVxuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgLyogdGhpcyBjYW4gb25seSBoYXBwZW4gaWYgc2VydmVyIGlzIG1pc2JlaGF2aW5nICovXG4gICAgaWYgKHVwZ3JhZGUgJiYgIXJlcXVlc3QudXBncmFkZSkge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IFNvY2tldEVycm9yKCdiYWQgdXBncmFkZScsIHV0aWwuZ2V0U29ja2V0SW5mbyhzb2NrZXQpKSlcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0aGlzLnRpbWVvdXRUeXBlLCBUSU1FT1VUX0hFQURFUlMpXG5cbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBzdGF0dXNDb2RlXG4gICAgdGhpcy5zaG91bGRLZWVwQWxpdmUgPSAoXG4gICAgICBzaG91bGRLZWVwQWxpdmUgfHxcbiAgICAgIC8vIE92ZXJyaWRlIGxsaHR0cCB2YWx1ZSB3aGljaCBkb2VzIG5vdCBhbGxvdyBrZWVwQWxpdmUgZm9yIEhFQUQuXG4gICAgICAocmVxdWVzdC5tZXRob2QgPT09ICdIRUFEJyAmJiAhc29ja2V0W2tSZXNldF0gJiYgdGhpcy5jb25uZWN0aW9uLnRvTG93ZXJDYXNlKCkgPT09ICdrZWVwLWFsaXZlJylcbiAgICApXG5cbiAgICBpZiAodGhpcy5zdGF0dXNDb2RlID49IDIwMCkge1xuICAgICAgY29uc3QgYm9keVRpbWVvdXQgPSByZXF1ZXN0LmJvZHlUaW1lb3V0ICE9IG51bGxcbiAgICAgICAgPyByZXF1ZXN0LmJvZHlUaW1lb3V0XG4gICAgICAgIDogY2xpZW50W2tCb2R5VGltZW91dF1cbiAgICAgIHRoaXMuc2V0VGltZW91dChib2R5VGltZW91dCwgVElNRU9VVF9CT0RZKVxuICAgIH0gZWxzZSBpZiAodGhpcy50aW1lb3V0KSB7XG4gICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogb25seSBmb3IgamVzdFxuICAgICAgaWYgKHRoaXMudGltZW91dC5yZWZyZXNoKSB7XG4gICAgICAgIHRoaXMudGltZW91dC5yZWZyZXNoKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocmVxdWVzdC5tZXRob2QgPT09ICdDT05ORUNUJykge1xuICAgICAgYXNzZXJ0KGNsaWVudFtrUnVubmluZ10gPT09IDEpXG4gICAgICB0aGlzLnVwZ3JhZGUgPSB0cnVlXG4gICAgICByZXR1cm4gMlxuICAgIH1cblxuICAgIGlmICh1cGdyYWRlKSB7XG4gICAgICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA9PT0gMSlcbiAgICAgIHRoaXMudXBncmFkZSA9IHRydWVcbiAgICAgIHJldHVybiAyXG4gICAgfVxuXG4gICAgYXNzZXJ0KHRoaXMuaGVhZGVycy5sZW5ndGggJSAyID09PSAwKVxuICAgIHRoaXMuaGVhZGVycyA9IFtdXG4gICAgdGhpcy5oZWFkZXJzU2l6ZSA9IDBcblxuICAgIGlmICh0aGlzLnNob3VsZEtlZXBBbGl2ZSAmJiBjbGllbnRba1BpcGVsaW5pbmddKSB7XG4gICAgICBjb25zdCBrZWVwQWxpdmVUaW1lb3V0ID0gdGhpcy5rZWVwQWxpdmUgPyB1dGlsLnBhcnNlS2VlcEFsaXZlVGltZW91dCh0aGlzLmtlZXBBbGl2ZSkgOiBudWxsXG5cbiAgICAgIGlmIChrZWVwQWxpdmVUaW1lb3V0ICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgdGltZW91dCA9IE1hdGgubWluKFxuICAgICAgICAgIGtlZXBBbGl2ZVRpbWVvdXQgLSBjbGllbnRba0tlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGRdLFxuICAgICAgICAgIGNsaWVudFtrS2VlcEFsaXZlTWF4VGltZW91dF1cbiAgICAgICAgKVxuICAgICAgICBpZiAodGltZW91dCA8PSAwKSB7XG4gICAgICAgICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2xpZW50W2tLZWVwQWxpdmVUaW1lb3V0VmFsdWVdID0gdGltZW91dFxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjbGllbnRba0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZV0gPSBjbGllbnRba0tlZXBBbGl2ZURlZmF1bHRUaW1lb3V0XVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTdG9wIG1vcmUgcmVxdWVzdHMgZnJvbSBiZWluZyBkaXNwYXRjaGVkLlxuICAgICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gICAgfVxuXG4gICAgY29uc3QgcGF1c2UgPSByZXF1ZXN0Lm9uSGVhZGVycyhzdGF0dXNDb2RlLCBoZWFkZXJzLCB0aGlzLnJlc3VtZSwgc3RhdHVzVGV4dCkgPT09IGZhbHNlXG5cbiAgICBpZiAocmVxdWVzdC5hYm9ydGVkKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICBpZiAocmVxdWVzdC5tZXRob2QgPT09ICdIRUFEJykge1xuICAgICAgcmV0dXJuIDFcbiAgICB9XG5cbiAgICBpZiAoc3RhdHVzQ29kZSA8IDIwMCkge1xuICAgICAgcmV0dXJuIDFcbiAgICB9XG5cbiAgICBpZiAoc29ja2V0W2tCbG9ja2luZ10pIHtcbiAgICAgIHNvY2tldFtrQmxvY2tpbmddID0gZmFsc2VcbiAgICAgIHJlc3VtZShjbGllbnQpXG4gICAgfVxuXG4gICAgcmV0dXJuIHBhdXNlID8gY29uc3RhbnRzLkVSUk9SLlBBVVNFRCA6IDBcbiAgfVxuXG4gIG9uQm9keSAoYnVmKSB7XG4gICAgY29uc3QgeyBjbGllbnQsIHNvY2tldCwgc3RhdHVzQ29kZSwgbWF4UmVzcG9uc2VTaXplIH0gPSB0aGlzXG5cbiAgICBpZiAoc29ja2V0LmRlc3Ryb3llZCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdCA9IGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF1dXG4gICAgYXNzZXJ0KHJlcXVlc3QpXG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwodGhpcy50aW1lb3V0VHlwZSwgVElNRU9VVF9CT0RZKVxuICAgIGlmICh0aGlzLnRpbWVvdXQpIHtcbiAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBvbmx5IGZvciBqZXN0XG4gICAgICBpZiAodGhpcy50aW1lb3V0LnJlZnJlc2gpIHtcbiAgICAgICAgdGhpcy50aW1lb3V0LnJlZnJlc2goKVxuICAgICAgfVxuICAgIH1cblxuICAgIGFzc2VydChzdGF0dXNDb2RlID49IDIwMClcblxuICAgIGlmIChtYXhSZXNwb25zZVNpemUgPiAtMSAmJiB0aGlzLmJ5dGVzUmVhZCArIGJ1Zi5sZW5ndGggPiBtYXhSZXNwb25zZVNpemUpIHtcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBSZXNwb25zZUV4Y2VlZGVkTWF4U2l6ZUVycm9yKCkpXG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICB0aGlzLmJ5dGVzUmVhZCArPSBidWYubGVuZ3RoXG5cbiAgICBpZiAocmVxdWVzdC5vbkRhdGEoYnVmKSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBjb25zdGFudHMuRVJST1IuUEFVU0VEXG4gICAgfVxuICB9XG5cbiAgb25NZXNzYWdlQ29tcGxldGUgKCkge1xuICAgIGNvbnN0IHsgY2xpZW50LCBzb2NrZXQsIHN0YXR1c0NvZGUsIHVwZ3JhZGUsIGhlYWRlcnMsIGNvbnRlbnRMZW5ndGgsIGJ5dGVzUmVhZCwgc2hvdWxkS2VlcEFsaXZlIH0gPSB0aGlzXG5cbiAgICBpZiAoc29ja2V0LmRlc3Ryb3llZCAmJiAoIXN0YXR1c0NvZGUgfHwgc2hvdWxkS2VlcEFsaXZlKSkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgaWYgKHVwZ3JhZGUpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdXVxuICAgIGFzc2VydChyZXF1ZXN0KVxuXG4gICAgYXNzZXJ0KHN0YXR1c0NvZGUgPj0gMTAwKVxuXG4gICAgdGhpcy5zdGF0dXNDb2RlID0gbnVsbFxuICAgIHRoaXMuc3RhdHVzVGV4dCA9ICcnXG4gICAgdGhpcy5ieXRlc1JlYWQgPSAwXG4gICAgdGhpcy5jb250ZW50TGVuZ3RoID0gJydcbiAgICB0aGlzLmtlZXBBbGl2ZSA9ICcnXG4gICAgdGhpcy5jb25uZWN0aW9uID0gJydcblxuICAgIGFzc2VydCh0aGlzLmhlYWRlcnMubGVuZ3RoICUgMiA9PT0gMClcbiAgICB0aGlzLmhlYWRlcnMgPSBbXVxuICAgIHRoaXMuaGVhZGVyc1NpemUgPSAwXG5cbiAgICBpZiAoc3RhdHVzQ29kZSA8IDIwMCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IHNob3VsZCBiZSBoYW5kbGVkIGJ5IGxsaHR0cD8gKi9cbiAgICBpZiAocmVxdWVzdC5tZXRob2QgIT09ICdIRUFEJyAmJiBjb250ZW50TGVuZ3RoICYmIGJ5dGVzUmVhZCAhPT0gcGFyc2VJbnQoY29udGVudExlbmd0aCwgMTApKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgUmVzcG9uc2VDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpKVxuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgcmVxdWVzdC5vbkNvbXBsZXRlKGhlYWRlcnMpXG5cbiAgICBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdKytdID0gbnVsbFxuXG4gICAgaWYgKHNvY2tldFtrV3JpdGluZ10pIHtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjbGllbnRba1J1bm5pbmddLCAwKVxuICAgICAgLy8gUmVzcG9uc2UgY29tcGxldGVkIGJlZm9yZSByZXF1ZXN0LlxuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEluZm9ybWF0aW9uYWxFcnJvcigncmVzZXQnKSlcbiAgICAgIHJldHVybiBjb25zdGFudHMuRVJST1IuUEFVU0VEXG4gICAgfSBlbHNlIGlmICghc2hvdWxkS2VlcEFsaXZlKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgSW5mb3JtYXRpb25hbEVycm9yKCdyZXNldCcpKVxuICAgICAgcmV0dXJuIGNvbnN0YW50cy5FUlJPUi5QQVVTRURcbiAgICB9IGVsc2UgaWYgKHNvY2tldFtrUmVzZXRdICYmIGNsaWVudFtrUnVubmluZ10gPT09IDApIHtcbiAgICAgIC8vIERlc3Ryb3kgc29ja2V0IG9uY2UgYWxsIHJlcXVlc3RzIGhhdmUgY29tcGxldGVkLlxuICAgICAgLy8gVGhlIHJlcXVlc3QgYXQgdGhlIHRhaWwgb2YgdGhlIHBpcGVsaW5lIGlzIHRoZSBvbmVcbiAgICAgIC8vIHRoYXQgcmVxdWVzdGVkIHJlc2V0IGFuZCBubyBmdXJ0aGVyIHJlcXVlc3RzIHNob3VsZFxuICAgICAgLy8gaGF2ZSBiZWVuIHF1ZXVlZCBzaW5jZSB0aGVuLlxuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEluZm9ybWF0aW9uYWxFcnJvcigncmVzZXQnKSlcbiAgICAgIHJldHVybiBjb25zdGFudHMuRVJST1IuUEFVU0VEXG4gICAgfSBlbHNlIGlmIChjbGllbnRba1BpcGVsaW5pbmddID09PSAxKSB7XG4gICAgICAvLyBXZSBtdXN0IHdhaXQgYSBmdWxsIGV2ZW50IGxvb3AgY3ljbGUgdG8gcmV1c2UgdGhpcyBzb2NrZXQgdG8gbWFrZSBzdXJlXG4gICAgICAvLyB0aGF0IG5vbi1zcGVjIGNvbXBsaWFudCBzZXJ2ZXJzIGFyZSBub3QgY2xvc2luZyB0aGUgY29ubmVjdGlvbiBldmVuIGlmIHRoZXlcbiAgICAgIC8vIHNhaWQgdGhleSB3b24ndC5cbiAgICAgIHNldEltbWVkaWF0ZShyZXN1bWUsIGNsaWVudClcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdW1lKGNsaWVudClcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gb25QYXJzZXJUaW1lb3V0IChwYXJzZXIpIHtcbiAgY29uc3QgeyBzb2NrZXQsIHRpbWVvdXRUeXBlLCBjbGllbnQgfSA9IHBhcnNlclxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmICh0aW1lb3V0VHlwZSA9PT0gVElNRU9VVF9IRUFERVJTKSB7XG4gICAgaWYgKCFzb2NrZXRba1dyaXRpbmddIHx8IHNvY2tldC53cml0YWJsZU5lZWREcmFpbiB8fCBjbGllbnRba1J1bm5pbmddID4gMSkge1xuICAgICAgYXNzZXJ0KCFwYXJzZXIucGF1c2VkLCAnY2Fubm90IGJlIHBhdXNlZCB3aGlsZSB3YWl0aW5nIGZvciBoZWFkZXJzJylcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBIZWFkZXJzVGltZW91dEVycm9yKCkpXG4gICAgfVxuICB9IGVsc2UgaWYgKHRpbWVvdXRUeXBlID09PSBUSU1FT1VUX0JPRFkpIHtcbiAgICBpZiAoIXBhcnNlci5wYXVzZWQpIHtcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBCb2R5VGltZW91dEVycm9yKCkpXG4gICAgfVxuICB9IGVsc2UgaWYgKHRpbWVvdXRUeXBlID09PSBUSU1FT1VUX0lETEUpIHtcbiAgICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA9PT0gMCAmJiBjbGllbnRba0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZV0pXG4gICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEluZm9ybWF0aW9uYWxFcnJvcignc29ja2V0IGlkbGUgdGltZW91dCcpKVxuICB9XG59XG5cbmZ1bmN0aW9uIG9uU29ja2V0UmVhZGFibGUgKCkge1xuICBjb25zdCB7IFtrUGFyc2VyXTogcGFyc2VyIH0gPSB0aGlzXG4gIGlmIChwYXJzZXIpIHtcbiAgICBwYXJzZXIucmVhZE1vcmUoKVxuICB9XG59XG5cbmZ1bmN0aW9uIG9uU29ja2V0RXJyb3IgKGVycikge1xuICBjb25zdCB7IFtrQ2xpZW50XTogY2xpZW50LCBba1BhcnNlcl06IHBhcnNlciB9ID0gdGhpc1xuXG4gIGFzc2VydChlcnIuY29kZSAhPT0gJ0VSUl9UTFNfQ0VSVF9BTFROQU1FX0lOVkFMSUQnKVxuXG4gIGlmIChjbGllbnRba0hUVFBDb25uVmVyc2lvbl0gIT09ICdoMicpIHtcbiAgICAvLyBPbiBNYWMgT1MsIHdlIGdldCBhbiBFQ09OTlJFU0VUIGV2ZW4gaWYgdGhlcmUgaXMgYSBmdWxsIGJvZHkgdG8gYmUgZm9yd2FyZGVkXG4gICAgLy8gdG8gdGhlIHVzZXIuXG4gICAgaWYgKGVyci5jb2RlID09PSAnRUNPTk5SRVNFVCcgJiYgcGFyc2VyLnN0YXR1c0NvZGUgJiYgIXBhcnNlci5zaG91bGRLZWVwQWxpdmUpIHtcbiAgICAgIC8vIFdlIHRyZWF0IGFsbCBpbmNvbWluZyBkYXRhIHNvIGZvciBhcyBhIHZhbGlkIHJlc3BvbnNlLlxuICAgICAgcGFyc2VyLm9uTWVzc2FnZUNvbXBsZXRlKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgfVxuXG4gIHRoaXNba0Vycm9yXSA9IGVyclxuXG4gIG9uRXJyb3IodGhpc1trQ2xpZW50XSwgZXJyKVxufVxuXG5mdW5jdGlvbiBvbkVycm9yIChjbGllbnQsIGVycikge1xuICBpZiAoXG4gICAgY2xpZW50W2tSdW5uaW5nXSA9PT0gMCAmJlxuICAgIGVyci5jb2RlICE9PSAnVU5EX0VSUl9JTkZPJyAmJlxuICAgIGVyci5jb2RlICE9PSAnVU5EX0VSUl9TT0NLRVQnXG4gICkge1xuICAgIC8vIEVycm9yIGlzIG5vdCBjYXVzZWQgYnkgcnVubmluZyByZXF1ZXN0IGFuZCBub3QgYSByZWNvdmVyYWJsZVxuICAgIC8vIHNvY2tldCBlcnJvci5cblxuICAgIGFzc2VydChjbGllbnRba1BlbmRpbmdJZHhdID09PSBjbGllbnRba1J1bm5pbmdJZHhdKVxuXG4gICAgY29uc3QgcmVxdWVzdHMgPSBjbGllbnRba1F1ZXVlXS5zcGxpY2UoY2xpZW50W2tSdW5uaW5nSWR4XSlcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcXVlc3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCByZXF1ZXN0ID0gcmVxdWVzdHNbaV1cbiAgICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIGVycilcbiAgICB9XG4gICAgYXNzZXJ0KGNsaWVudFtrU2l6ZV0gPT09IDApXG4gIH1cbn1cblxuZnVuY3Rpb24gb25Tb2NrZXRFbmQgKCkge1xuICBjb25zdCB7IFtrUGFyc2VyXTogcGFyc2VyLCBba0NsaWVudF06IGNsaWVudCB9ID0gdGhpc1xuXG4gIGlmIChjbGllbnRba0hUVFBDb25uVmVyc2lvbl0gIT09ICdoMicpIHtcbiAgICBpZiAocGFyc2VyLnN0YXR1c0NvZGUgJiYgIXBhcnNlci5zaG91bGRLZWVwQWxpdmUpIHtcbiAgICAgIC8vIFdlIHRyZWF0IGFsbCBpbmNvbWluZyBkYXRhIHNvIGZhciBhcyBhIHZhbGlkIHJlc3BvbnNlLlxuICAgICAgcGFyc2VyLm9uTWVzc2FnZUNvbXBsZXRlKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgfVxuXG4gIHV0aWwuZGVzdHJveSh0aGlzLCBuZXcgU29ja2V0RXJyb3IoJ290aGVyIHNpZGUgY2xvc2VkJywgdXRpbC5nZXRTb2NrZXRJbmZvKHRoaXMpKSlcbn1cblxuZnVuY3Rpb24gb25Tb2NrZXRDbG9zZSAoKSB7XG4gIGNvbnN0IHsgW2tDbGllbnRdOiBjbGllbnQsIFtrUGFyc2VyXTogcGFyc2VyIH0gPSB0aGlzXG5cbiAgaWYgKGNsaWVudFtrSFRUUENvbm5WZXJzaW9uXSA9PT0gJ2gxJyAmJiBwYXJzZXIpIHtcbiAgICBpZiAoIXRoaXNba0Vycm9yXSAmJiBwYXJzZXIuc3RhdHVzQ29kZSAmJiAhcGFyc2VyLnNob3VsZEtlZXBBbGl2ZSkge1xuICAgICAgLy8gV2UgdHJlYXQgYWxsIGluY29taW5nIGRhdGEgc28gZmFyIGFzIGEgdmFsaWQgcmVzcG9uc2UuXG4gICAgICBwYXJzZXIub25NZXNzYWdlQ29tcGxldGUoKVxuICAgIH1cblxuICAgIHRoaXNba1BhcnNlcl0uZGVzdHJveSgpXG4gICAgdGhpc1trUGFyc2VyXSA9IG51bGxcbiAgfVxuXG4gIGNvbnN0IGVyciA9IHRoaXNba0Vycm9yXSB8fCBuZXcgU29ja2V0RXJyb3IoJ2Nsb3NlZCcsIHV0aWwuZ2V0U29ja2V0SW5mbyh0aGlzKSlcblxuICBjbGllbnRba1NvY2tldF0gPSBudWxsXG5cbiAgaWYgKGNsaWVudC5kZXN0cm95ZWQpIHtcbiAgICBhc3NlcnQoY2xpZW50W2tQZW5kaW5nXSA9PT0gMClcblxuICAgIC8vIEZhaWwgZW50aXJlIHF1ZXVlLlxuICAgIGNvbnN0IHJlcXVlc3RzID0gY2xpZW50W2tRdWV1ZV0uc3BsaWNlKGNsaWVudFtrUnVubmluZ0lkeF0pXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXF1ZXN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgcmVxdWVzdCA9IHJlcXVlc3RzW2ldXG4gICAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIpXG4gICAgfVxuICB9IGVsc2UgaWYgKGNsaWVudFtrUnVubmluZ10gPiAwICYmIGVyci5jb2RlICE9PSAnVU5EX0VSUl9JTkZPJykge1xuICAgIC8vIEZhaWwgaGVhZCBvZiBwaXBlbGluZS5cbiAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XV1cbiAgICBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdKytdID0gbnVsbFxuXG4gICAgZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyKVxuICB9XG5cbiAgY2xpZW50W2tQZW5kaW5nSWR4XSA9IGNsaWVudFtrUnVubmluZ0lkeF1cblxuICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA9PT0gMClcblxuICBjbGllbnQuZW1pdCgnZGlzY29ubmVjdCcsIGNsaWVudFtrVXJsXSwgW2NsaWVudF0sIGVycilcblxuICByZXN1bWUoY2xpZW50KVxufVxuXG5hc3luYyBmdW5jdGlvbiBjb25uZWN0IChjbGllbnQpIHtcbiAgYXNzZXJ0KCFjbGllbnRba0Nvbm5lY3RpbmddKVxuICBhc3NlcnQoIWNsaWVudFtrU29ja2V0XSlcblxuICBsZXQgeyBob3N0LCBob3N0bmFtZSwgcHJvdG9jb2wsIHBvcnQgfSA9IGNsaWVudFtrVXJsXVxuXG4gIC8vIFJlc29sdmUgaXB2NlxuICBpZiAoaG9zdG5hbWVbMF0gPT09ICdbJykge1xuICAgIGNvbnN0IGlkeCA9IGhvc3RuYW1lLmluZGV4T2YoJ10nKVxuXG4gICAgYXNzZXJ0KGlkeCAhPT0gLTEpXG4gICAgY29uc3QgaXAgPSBob3N0bmFtZS5zdWJzdHJpbmcoMSwgaWR4KVxuXG4gICAgYXNzZXJ0KG5ldC5pc0lQKGlwKSlcbiAgICBob3N0bmFtZSA9IGlwXG4gIH1cblxuICBjbGllbnRba0Nvbm5lY3RpbmddID0gdHJ1ZVxuXG4gIGlmIChjaGFubmVscy5iZWZvcmVDb25uZWN0Lmhhc1N1YnNjcmliZXJzKSB7XG4gICAgY2hhbm5lbHMuYmVmb3JlQ29ubmVjdC5wdWJsaXNoKHtcbiAgICAgIGNvbm5lY3RQYXJhbXM6IHtcbiAgICAgICAgaG9zdCxcbiAgICAgICAgaG9zdG5hbWUsXG4gICAgICAgIHByb3RvY29sLFxuICAgICAgICBwb3J0LFxuICAgICAgICBzZXJ2ZXJuYW1lOiBjbGllbnRba1NlcnZlck5hbWVdLFxuICAgICAgICBsb2NhbEFkZHJlc3M6IGNsaWVudFtrTG9jYWxBZGRyZXNzXVxuICAgICAgfSxcbiAgICAgIGNvbm5lY3RvcjogY2xpZW50W2tDb25uZWN0b3JdXG4gICAgfSlcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3Qgc29ja2V0ID0gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY2xpZW50W2tDb25uZWN0b3JdKHtcbiAgICAgICAgaG9zdCxcbiAgICAgICAgaG9zdG5hbWUsXG4gICAgICAgIHByb3RvY29sLFxuICAgICAgICBwb3J0LFxuICAgICAgICBzZXJ2ZXJuYW1lOiBjbGllbnRba1NlcnZlck5hbWVdLFxuICAgICAgICBsb2NhbEFkZHJlc3M6IGNsaWVudFtrTG9jYWxBZGRyZXNzXVxuICAgICAgfSwgKGVyciwgc29ja2V0KSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICByZWplY3QoZXJyKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc29sdmUoc29ja2V0KVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0pXG5cbiAgICBpZiAoY2xpZW50LmRlc3Ryb3llZCkge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldC5vbignZXJyb3InLCAoKSA9PiB7fSksIG5ldyBDbGllbnREZXN0cm95ZWRFcnJvcigpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY2xpZW50W2tDb25uZWN0aW5nXSA9IGZhbHNlXG5cbiAgICBhc3NlcnQoc29ja2V0KVxuXG4gICAgY29uc3QgaXNIMiA9IHNvY2tldC5hbHBuUHJvdG9jb2wgPT09ICdoMidcbiAgICBpZiAoaXNIMikge1xuICAgICAgaWYgKCFoMkV4cGVyaW1lbnRhbFdhcm5lZCkge1xuICAgICAgICBoMkV4cGVyaW1lbnRhbFdhcm5lZCA9IHRydWVcbiAgICAgICAgcHJvY2Vzcy5lbWl0V2FybmluZygnSDIgc3VwcG9ydCBpcyBleHBlcmltZW50YWwsIGV4cGVjdCB0aGVtIHRvIGNoYW5nZSBhdCBhbnkgdGltZS4nLCB7XG4gICAgICAgICAgY29kZTogJ1VORElDSS1IMidcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2Vzc2lvbiA9IGh0dHAyLmNvbm5lY3QoY2xpZW50W2tVcmxdLCB7XG4gICAgICAgIGNyZWF0ZUNvbm5lY3Rpb246ICgpID0+IHNvY2tldCxcbiAgICAgICAgcGVlck1heENvbmN1cnJlbnRTdHJlYW1zOiBjbGllbnRba0hUVFAyU2Vzc2lvblN0YXRlXS5tYXhDb25jdXJyZW50U3RyZWFtc1xuICAgICAgfSlcblxuICAgICAgY2xpZW50W2tIVFRQQ29ublZlcnNpb25dID0gJ2gyJ1xuICAgICAgc2Vzc2lvbltrQ2xpZW50XSA9IGNsaWVudFxuICAgICAgc2Vzc2lvbltrU29ja2V0XSA9IHNvY2tldFxuICAgICAgc2Vzc2lvbi5vbignZXJyb3InLCBvbkh0dHAyU2Vzc2lvbkVycm9yKVxuICAgICAgc2Vzc2lvbi5vbignZnJhbWVFcnJvcicsIG9uSHR0cDJGcmFtZUVycm9yKVxuICAgICAgc2Vzc2lvbi5vbignZW5kJywgb25IdHRwMlNlc3Npb25FbmQpXG4gICAgICBzZXNzaW9uLm9uKCdnb2F3YXknLCBvbkhUVFAyR29Bd2F5KVxuICAgICAgc2Vzc2lvbi5vbignY2xvc2UnLCBvblNvY2tldENsb3NlKVxuICAgICAgc2Vzc2lvbi51bnJlZigpXG5cbiAgICAgIGNsaWVudFtrSFRUUDJTZXNzaW9uXSA9IHNlc3Npb25cbiAgICAgIHNvY2tldFtrSFRUUDJTZXNzaW9uXSA9IHNlc3Npb25cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFsbGh0dHBJbnN0YW5jZSkge1xuICAgICAgICBsbGh0dHBJbnN0YW5jZSA9IGF3YWl0IGxsaHR0cFByb21pc2VcbiAgICAgICAgbGxodHRwUHJvbWlzZSA9IG51bGxcbiAgICAgIH1cblxuICAgICAgc29ja2V0W2tOb1JlZl0gPSBmYWxzZVxuICAgICAgc29ja2V0W2tXcml0aW5nXSA9IGZhbHNlXG4gICAgICBzb2NrZXRba1Jlc2V0XSA9IGZhbHNlXG4gICAgICBzb2NrZXRba0Jsb2NraW5nXSA9IGZhbHNlXG4gICAgICBzb2NrZXRba1BhcnNlcl0gPSBuZXcgUGFyc2VyKGNsaWVudCwgc29ja2V0LCBsbGh0dHBJbnN0YW5jZSlcbiAgICB9XG5cbiAgICBzb2NrZXRba0NvdW50ZXJdID0gMFxuICAgIHNvY2tldFtrTWF4UmVxdWVzdHNdID0gY2xpZW50W2tNYXhSZXF1ZXN0c11cbiAgICBzb2NrZXRba0NsaWVudF0gPSBjbGllbnRcbiAgICBzb2NrZXRba0Vycm9yXSA9IG51bGxcblxuICAgIHNvY2tldFxuICAgICAgLm9uKCdlcnJvcicsIG9uU29ja2V0RXJyb3IpXG4gICAgICAub24oJ3JlYWRhYmxlJywgb25Tb2NrZXRSZWFkYWJsZSlcbiAgICAgIC5vbignZW5kJywgb25Tb2NrZXRFbmQpXG4gICAgICAub24oJ2Nsb3NlJywgb25Tb2NrZXRDbG9zZSlcblxuICAgIGNsaWVudFtrU29ja2V0XSA9IHNvY2tldFxuXG4gICAgaWYgKGNoYW5uZWxzLmNvbm5lY3RlZC5oYXNTdWJzY3JpYmVycykge1xuICAgICAgY2hhbm5lbHMuY29ubmVjdGVkLnB1Ymxpc2goe1xuICAgICAgICBjb25uZWN0UGFyYW1zOiB7XG4gICAgICAgICAgaG9zdCxcbiAgICAgICAgICBob3N0bmFtZSxcbiAgICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgICBwb3J0LFxuICAgICAgICAgIHNlcnZlcm5hbWU6IGNsaWVudFtrU2VydmVyTmFtZV0sXG4gICAgICAgICAgbG9jYWxBZGRyZXNzOiBjbGllbnRba0xvY2FsQWRkcmVzc11cbiAgICAgICAgfSxcbiAgICAgICAgY29ubmVjdG9yOiBjbGllbnRba0Nvbm5lY3Rvcl0sXG4gICAgICAgIHNvY2tldFxuICAgICAgfSlcbiAgICB9XG4gICAgY2xpZW50LmVtaXQoJ2Nvbm5lY3QnLCBjbGllbnRba1VybF0sIFtjbGllbnRdKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoY2xpZW50LmRlc3Ryb3llZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY2xpZW50W2tDb25uZWN0aW5nXSA9IGZhbHNlXG5cbiAgICBpZiAoY2hhbm5lbHMuY29ubmVjdEVycm9yLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICBjaGFubmVscy5jb25uZWN0RXJyb3IucHVibGlzaCh7XG4gICAgICAgIGNvbm5lY3RQYXJhbXM6IHtcbiAgICAgICAgICBob3N0LFxuICAgICAgICAgIGhvc3RuYW1lLFxuICAgICAgICAgIHByb3RvY29sLFxuICAgICAgICAgIHBvcnQsXG4gICAgICAgICAgc2VydmVybmFtZTogY2xpZW50W2tTZXJ2ZXJOYW1lXSxcbiAgICAgICAgICBsb2NhbEFkZHJlc3M6IGNsaWVudFtrTG9jYWxBZGRyZXNzXVxuICAgICAgICB9LFxuICAgICAgICBjb25uZWN0b3I6IGNsaWVudFtrQ29ubmVjdG9yXSxcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAoZXJyLmNvZGUgPT09ICdFUlJfVExTX0NFUlRfQUxUTkFNRV9JTlZBTElEJykge1xuICAgICAgYXNzZXJ0KGNsaWVudFtrUnVubmluZ10gPT09IDApXG4gICAgICB3aGlsZSAoY2xpZW50W2tQZW5kaW5nXSA+IDAgJiYgY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tQZW5kaW5nSWR4XV0uc2VydmVybmFtZSA9PT0gY2xpZW50W2tTZXJ2ZXJOYW1lXSkge1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tQZW5kaW5nSWR4XSsrXVxuICAgICAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG9uRXJyb3IoY2xpZW50LCBlcnIpXG4gICAgfVxuXG4gICAgY2xpZW50LmVtaXQoJ2Nvbm5lY3Rpb25FcnJvcicsIGNsaWVudFtrVXJsXSwgW2NsaWVudF0sIGVycilcbiAgfVxuXG4gIHJlc3VtZShjbGllbnQpXG59XG5cbmZ1bmN0aW9uIGVtaXREcmFpbiAoY2xpZW50KSB7XG4gIGNsaWVudFtrTmVlZERyYWluXSA9IDBcbiAgY2xpZW50LmVtaXQoJ2RyYWluJywgY2xpZW50W2tVcmxdLCBbY2xpZW50XSlcbn1cblxuZnVuY3Rpb24gcmVzdW1lIChjbGllbnQsIHN5bmMpIHtcbiAgaWYgKGNsaWVudFtrUmVzdW1pbmddID09PSAyKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBjbGllbnRba1Jlc3VtaW5nXSA9IDJcblxuICBfcmVzdW1lKGNsaWVudCwgc3luYylcbiAgY2xpZW50W2tSZXN1bWluZ10gPSAwXG5cbiAgaWYgKGNsaWVudFtrUnVubmluZ0lkeF0gPiAyNTYpIHtcbiAgICBjbGllbnRba1F1ZXVlXS5zcGxpY2UoMCwgY2xpZW50W2tSdW5uaW5nSWR4XSlcbiAgICBjbGllbnRba1BlbmRpbmdJZHhdIC09IGNsaWVudFtrUnVubmluZ0lkeF1cbiAgICBjbGllbnRba1J1bm5pbmdJZHhdID0gMFxuICB9XG59XG5cbmZ1bmN0aW9uIF9yZXN1bWUgKGNsaWVudCwgc3luYykge1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIGlmIChjbGllbnQuZGVzdHJveWVkKSB7XG4gICAgICBhc3NlcnQoY2xpZW50W2tQZW5kaW5nXSA9PT0gMClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChjbGllbnRba0Nsb3NlZFJlc29sdmVdICYmICFjbGllbnRba1NpemVdKSB7XG4gICAgICBjbGllbnRba0Nsb3NlZFJlc29sdmVdKClcbiAgICAgIGNsaWVudFtrQ2xvc2VkUmVzb2x2ZV0gPSBudWxsXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBzb2NrZXQgPSBjbGllbnRba1NvY2tldF1cblxuICAgIGlmIChzb2NrZXQgJiYgIXNvY2tldC5kZXN0cm95ZWQgJiYgc29ja2V0LmFscG5Qcm90b2NvbCAhPT0gJ2gyJykge1xuICAgICAgaWYgKGNsaWVudFtrU2l6ZV0gPT09IDApIHtcbiAgICAgICAgaWYgKCFzb2NrZXRba05vUmVmXSAmJiBzb2NrZXQudW5yZWYpIHtcbiAgICAgICAgICBzb2NrZXQudW5yZWYoKVxuICAgICAgICAgIHNvY2tldFtrTm9SZWZdID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHNvY2tldFtrTm9SZWZdICYmIHNvY2tldC5yZWYpIHtcbiAgICAgICAgc29ja2V0LnJlZigpXG4gICAgICAgIHNvY2tldFtrTm9SZWZdID0gZmFsc2VcbiAgICAgIH1cblxuICAgICAgaWYgKGNsaWVudFtrU2l6ZV0gPT09IDApIHtcbiAgICAgICAgaWYgKHNvY2tldFtrUGFyc2VyXS50aW1lb3V0VHlwZSAhPT0gVElNRU9VVF9JRExFKSB7XG4gICAgICAgICAgc29ja2V0W2tQYXJzZXJdLnNldFRpbWVvdXQoY2xpZW50W2tLZWVwQWxpdmVUaW1lb3V0VmFsdWVdLCBUSU1FT1VUX0lETEUpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDAgJiYgc29ja2V0W2tQYXJzZXJdLnN0YXR1c0NvZGUgPCAyMDApIHtcbiAgICAgICAgaWYgKHNvY2tldFtrUGFyc2VyXS50aW1lb3V0VHlwZSAhPT0gVElNRU9VVF9IRUFERVJTKSB7XG4gICAgICAgICAgY29uc3QgcmVxdWVzdCA9IGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF1dXG4gICAgICAgICAgY29uc3QgaGVhZGVyc1RpbWVvdXQgPSByZXF1ZXN0LmhlYWRlcnNUaW1lb3V0ICE9IG51bGxcbiAgICAgICAgICAgID8gcmVxdWVzdC5oZWFkZXJzVGltZW91dFxuICAgICAgICAgICAgOiBjbGllbnRba0hlYWRlcnNUaW1lb3V0XVxuICAgICAgICAgIHNvY2tldFtrUGFyc2VyXS5zZXRUaW1lb3V0KGhlYWRlcnNUaW1lb3V0LCBUSU1FT1VUX0hFQURFUlMpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tCdXN5XSkge1xuICAgICAgY2xpZW50W2tOZWVkRHJhaW5dID0gMlxuICAgIH0gZWxzZSBpZiAoY2xpZW50W2tOZWVkRHJhaW5dID09PSAyKSB7XG4gICAgICBpZiAoc3luYykge1xuICAgICAgICBjbGllbnRba05lZWREcmFpbl0gPSAxXG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soZW1pdERyYWluLCBjbGllbnQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbWl0RHJhaW4oY2xpZW50KVxuICAgICAgfVxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tQZW5kaW5nXSA9PT0gMCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGNsaWVudFtrUnVubmluZ10gPj0gKGNsaWVudFtrUGlwZWxpbmluZ10gfHwgMSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1BlbmRpbmdJZHhdXVxuXG4gICAgaWYgKGNsaWVudFtrVXJsXS5wcm90b2NvbCA9PT0gJ2h0dHBzOicgJiYgY2xpZW50W2tTZXJ2ZXJOYW1lXSAhPT0gcmVxdWVzdC5zZXJ2ZXJuYW1lKSB7XG4gICAgICBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDApIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNsaWVudFtrU2VydmVyTmFtZV0gPSByZXF1ZXN0LnNlcnZlcm5hbWVcblxuICAgICAgaWYgKHNvY2tldCAmJiBzb2NrZXQuc2VydmVybmFtZSAhPT0gcmVxdWVzdC5zZXJ2ZXJuYW1lKSB7XG4gICAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoJ3NlcnZlcm5hbWUgY2hhbmdlZCcpKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tDb25uZWN0aW5nXSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKCFzb2NrZXQgJiYgIWNsaWVudFtrSFRUUDJTZXNzaW9uXSkge1xuICAgICAgY29ubmVjdChjbGllbnQpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoc29ja2V0LmRlc3Ryb3llZCB8fCBzb2NrZXRba1dyaXRpbmddIHx8IHNvY2tldFtrUmVzZXRdIHx8IHNvY2tldFtrQmxvY2tpbmddKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDAgJiYgIXJlcXVlc3QuaWRlbXBvdGVudCkge1xuICAgICAgLy8gTm9uLWlkZW1wb3RlbnQgcmVxdWVzdCBjYW5ub3QgYmUgcmV0cmllZC5cbiAgICAgIC8vIEVuc3VyZSB0aGF0IG5vIG90aGVyIHJlcXVlc3RzIGFyZSBpbmZsaWdodCBhbmRcbiAgICAgIC8vIGNvdWxkIGNhdXNlIGZhaWx1cmUuXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDAgJiYgKHJlcXVlc3QudXBncmFkZSB8fCByZXF1ZXN0Lm1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSkge1xuICAgICAgLy8gRG9uJ3QgZGlzcGF0Y2ggYW4gdXBncmFkZSB1bnRpbCBhbGwgcHJlY2VkaW5nIHJlcXVlc3RzIGhhdmUgY29tcGxldGVkLlxuICAgICAgLy8gQSBtaXNiZWhhdmluZyBzZXJ2ZXIgbWlnaHQgdXBncmFkZSB0aGUgY29ubmVjdGlvbiBiZWZvcmUgYWxsIHBpcGVsaW5lZFxuICAgICAgLy8gcmVxdWVzdCBoYXMgY29tcGxldGVkLlxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGNsaWVudFtrUnVubmluZ10gPiAwICYmIHV0aWwuYm9keUxlbmd0aChyZXF1ZXN0LmJvZHkpICE9PSAwICYmXG4gICAgICAodXRpbC5pc1N0cmVhbShyZXF1ZXN0LmJvZHkpIHx8IHV0aWwuaXNBc3luY0l0ZXJhYmxlKHJlcXVlc3QuYm9keSkpKSB7XG4gICAgICAvLyBSZXF1ZXN0IHdpdGggc3RyZWFtIG9yIGl0ZXJhdG9yIGJvZHkgY2FuIGVycm9yIHdoaWxlIG90aGVyIHJlcXVlc3RzXG4gICAgICAvLyBhcmUgaW5mbGlnaHQgYW5kIGluZGlyZWN0bHkgZXJyb3IgdGhvc2UgYXMgd2VsbC5cbiAgICAgIC8vIEVuc3VyZSB0aGlzIGRvZXNuJ3QgaGFwcGVuIGJ5IHdhaXRpbmcgZm9yIGluZmxpZ2h0XG4gICAgICAvLyB0byBjb21wbGV0ZSBiZWZvcmUgZGlzcGF0Y2hpbmcuXG5cbiAgICAgIC8vIFJlcXVlc3Qgd2l0aCBzdHJlYW0gb3IgaXRlcmF0b3IgYm9keSBjYW5ub3QgYmUgcmV0cmllZC5cbiAgICAgIC8vIEVuc3VyZSB0aGF0IG5vIG90aGVyIHJlcXVlc3RzIGFyZSBpbmZsaWdodCBhbmRcbiAgICAgIC8vIGNvdWxkIGNhdXNlIGZhaWx1cmUuXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIXJlcXVlc3QuYWJvcnRlZCAmJiB3cml0ZShjbGllbnQsIHJlcXVlc3QpKSB7XG4gICAgICBjbGllbnRba1BlbmRpbmdJZHhdKytcbiAgICB9IGVsc2Uge1xuICAgICAgY2xpZW50W2tRdWV1ZV0uc3BsaWNlKGNsaWVudFtrUGVuZGluZ0lkeF0sIDEpXG4gICAgfVxuICB9XG59XG5cbi8vIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM3MjMwI3NlY3Rpb24tMy4zLjJcbmZ1bmN0aW9uIHNob3VsZFNlbmRDb250ZW50TGVuZ3RoIChtZXRob2QpIHtcbiAgcmV0dXJuIG1ldGhvZCAhPT0gJ0dFVCcgJiYgbWV0aG9kICE9PSAnSEVBRCcgJiYgbWV0aG9kICE9PSAnT1BUSU9OUycgJiYgbWV0aG9kICE9PSAnVFJBQ0UnICYmIG1ldGhvZCAhPT0gJ0NPTk5FQ1QnXG59XG5cbmZ1bmN0aW9uIHdyaXRlIChjbGllbnQsIHJlcXVlc3QpIHtcbiAgaWYgKGNsaWVudFtrSFRUUENvbm5WZXJzaW9uXSA9PT0gJ2gyJykge1xuICAgIHdyaXRlSDIoY2xpZW50LCBjbGllbnRba0hUVFAyU2Vzc2lvbl0sIHJlcXVlc3QpXG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCB7IGJvZHksIG1ldGhvZCwgcGF0aCwgaG9zdCwgdXBncmFkZSwgaGVhZGVycywgYmxvY2tpbmcsIHJlc2V0IH0gPSByZXF1ZXN0XG5cbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi00LjMuMVxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTQuMy4yXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNC4zLjVcblxuICAvLyBTZW5kaW5nIGEgcGF5bG9hZCBib2R5IG9uIGEgcmVxdWVzdCB0aGF0IGRvZXMgbm90XG4gIC8vIGV4cGVjdCBpdCBjYW4gY2F1c2UgdW5kZWZpbmVkIGJlaGF2aW9yIG9uIHNvbWVcbiAgLy8gc2VydmVycyBhbmQgY29ycnVwdCBjb25uZWN0aW9uIHN0YXRlLiBEbyBub3RcbiAgLy8gcmUtdXNlIHRoZSBjb25uZWN0aW9uIGZvciBmdXJ0aGVyIHJlcXVlc3RzLlxuXG4gIGNvbnN0IGV4cGVjdHNQYXlsb2FkID0gKFxuICAgIG1ldGhvZCA9PT0gJ1BVVCcgfHxcbiAgICBtZXRob2QgPT09ICdQT1NUJyB8fFxuICAgIG1ldGhvZCA9PT0gJ1BBVENIJ1xuICApXG5cbiAgaWYgKGJvZHkgJiYgdHlwZW9mIGJvZHkucmVhZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIFRyeSB0byByZWFkIEVPRiBpbiBvcmRlciB0byBnZXQgbGVuZ3RoLlxuICAgIGJvZHkucmVhZCgwKVxuICB9XG5cbiAgY29uc3QgYm9keUxlbmd0aCA9IHV0aWwuYm9keUxlbmd0aChib2R5KVxuXG4gIGxldCBjb250ZW50TGVuZ3RoID0gYm9keUxlbmd0aFxuXG4gIGlmIChjb250ZW50TGVuZ3RoID09PSBudWxsKSB7XG4gICAgY29udGVudExlbmd0aCA9IHJlcXVlc3QuY29udGVudExlbmd0aFxuICB9XG5cbiAgaWYgKGNvbnRlbnRMZW5ndGggPT09IDAgJiYgIWV4cGVjdHNQYXlsb2FkKSB7XG4gICAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjMuMlxuICAgIC8vIEEgdXNlciBhZ2VudCBTSE9VTEQgTk9UIHNlbmQgYSBDb250ZW50LUxlbmd0aCBoZWFkZXIgZmllbGQgd2hlblxuICAgIC8vIHRoZSByZXF1ZXN0IG1lc3NhZ2UgZG9lcyBub3QgY29udGFpbiBhIHBheWxvYWQgYm9keSBhbmQgdGhlIG1ldGhvZFxuICAgIC8vIHNlbWFudGljcyBkbyBub3QgYW50aWNpcGF0ZSBzdWNoIGEgYm9keS5cblxuICAgIGNvbnRlbnRMZW5ndGggPSBudWxsXG4gIH1cblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMjA0NlxuICAvLyBBIHVzZXIgYWdlbnQgbWF5IHNlbmQgYSBDb250ZW50LUxlbmd0aCBoZWFkZXIgd2l0aCAwIHZhbHVlLCB0aGlzIHNob3VsZCBiZSBhbGxvd2VkLlxuICBpZiAoc2hvdWxkU2VuZENvbnRlbnRMZW5ndGgobWV0aG9kKSAmJiBjb250ZW50TGVuZ3RoID4gMCAmJiByZXF1ZXN0LmNvbnRlbnRMZW5ndGggIT09IG51bGwgJiYgcmVxdWVzdC5jb250ZW50TGVuZ3RoICE9PSBjb250ZW50TGVuZ3RoKSB7XG4gICAgaWYgKGNsaWVudFtrU3RyaWN0Q29udGVudExlbmd0aF0pIHtcbiAgICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKSlcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIHByb2Nlc3MuZW1pdFdhcm5pbmcobmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpKVxuICB9XG5cbiAgY29uc3Qgc29ja2V0ID0gY2xpZW50W2tTb2NrZXRdXG5cbiAgdHJ5IHtcbiAgICByZXF1ZXN0Lm9uQ29ubmVjdCgoZXJyKSA9PiB7XG4gICAgICBpZiAocmVxdWVzdC5hYm9ydGVkIHx8IHJlcXVlc3QuY29tcGxldGVkKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIgfHwgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKSlcblxuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEluZm9ybWF0aW9uYWxFcnJvcignYWJvcnRlZCcpKVxuICAgIH0pXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIGVycilcbiAgfVxuXG4gIGlmIChyZXF1ZXN0LmFib3J0ZWQpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlmIChtZXRob2QgPT09ICdIRUFEJykge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tY29sbGluYS91bmRpY2kvaXNzdWVzLzI1OFxuICAgIC8vIENsb3NlIGFmdGVyIGEgSEVBRCByZXF1ZXN0IHRvIGludGVyb3Agd2l0aCBtaXNiZWhhdmluZyBzZXJ2ZXJzXG4gICAgLy8gdGhhdCBtYXkgc2VuZCBhIGJvZHkgaW4gdGhlIHJlc3BvbnNlLlxuXG4gICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gIH1cblxuICBpZiAodXBncmFkZSB8fCBtZXRob2QgPT09ICdDT05ORUNUJykge1xuICAgIC8vIE9uIENPTk5FQ1Qgb3IgdXBncmFkZSwgYmxvY2sgcGlwZWxpbmUgZnJvbSBkaXNwYXRjaGluZyBmdXJ0aGVyXG4gICAgLy8gcmVxdWVzdHMgb24gdGhpcyBjb25uZWN0aW9uLlxuXG4gICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gIH1cblxuICBpZiAocmVzZXQgIT0gbnVsbCkge1xuICAgIHNvY2tldFtrUmVzZXRdID0gcmVzZXRcbiAgfVxuXG4gIGlmIChjbGllbnRba01heFJlcXVlc3RzXSAmJiBzb2NrZXRba0NvdW50ZXJdKysgPj0gY2xpZW50W2tNYXhSZXF1ZXN0c10pIHtcbiAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgfVxuXG4gIGlmIChibG9ja2luZykge1xuICAgIHNvY2tldFtrQmxvY2tpbmddID0gdHJ1ZVxuICB9XG5cbiAgbGV0IGhlYWRlciA9IGAke21ldGhvZH0gJHtwYXRofSBIVFRQLzEuMVxcclxcbmBcblxuICBpZiAodHlwZW9mIGhvc3QgPT09ICdzdHJpbmcnKSB7XG4gICAgaGVhZGVyICs9IGBob3N0OiAke2hvc3R9XFxyXFxuYFxuICB9IGVsc2Uge1xuICAgIGhlYWRlciArPSBjbGllbnRba0hvc3RIZWFkZXJdXG4gIH1cblxuICBpZiAodXBncmFkZSkge1xuICAgIGhlYWRlciArPSBgY29ubmVjdGlvbjogdXBncmFkZVxcclxcbnVwZ3JhZGU6ICR7dXBncmFkZX1cXHJcXG5gXG4gIH0gZWxzZSBpZiAoY2xpZW50W2tQaXBlbGluaW5nXSAmJiAhc29ja2V0W2tSZXNldF0pIHtcbiAgICBoZWFkZXIgKz0gJ2Nvbm5lY3Rpb246IGtlZXAtYWxpdmVcXHJcXG4nXG4gIH0gZWxzZSB7XG4gICAgaGVhZGVyICs9ICdjb25uZWN0aW9uOiBjbG9zZVxcclxcbidcbiAgfVxuXG4gIGlmIChoZWFkZXJzKSB7XG4gICAgaGVhZGVyICs9IGhlYWRlcnNcbiAgfVxuXG4gIGlmIChjaGFubmVscy5zZW5kSGVhZGVycy5oYXNTdWJzY3JpYmVycykge1xuICAgIGNoYW5uZWxzLnNlbmRIZWFkZXJzLnB1Ymxpc2goeyByZXF1ZXN0LCBoZWFkZXJzOiBoZWFkZXIsIHNvY2tldCB9KVxuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2U6IGFzc2VydGlvbiAqL1xuICBpZiAoIWJvZHkgfHwgYm9keUxlbmd0aCA9PT0gMCkge1xuICAgIGlmIChjb250ZW50TGVuZ3RoID09PSAwKSB7XG4gICAgICBzb2NrZXQud3JpdGUoYCR7aGVhZGVyfWNvbnRlbnQtbGVuZ3RoOiAwXFxyXFxuXFxyXFxuYCwgJ2xhdGluMScpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydChjb250ZW50TGVuZ3RoID09PSBudWxsLCAnbm8gYm9keSBtdXN0IG5vdCBoYXZlIGNvbnRlbnQgbGVuZ3RoJylcbiAgICAgIHNvY2tldC53cml0ZShgJHtoZWFkZXJ9XFxyXFxuYCwgJ2xhdGluMScpXG4gICAgfVxuICAgIHJlcXVlc3Qub25SZXF1ZXN0U2VudCgpXG4gIH0gZWxzZSBpZiAodXRpbC5pc0J1ZmZlcihib2R5KSkge1xuICAgIGFzc2VydChjb250ZW50TGVuZ3RoID09PSBib2R5LmJ5dGVMZW5ndGgsICdidWZmZXIgYm9keSBtdXN0IGhhdmUgY29udGVudCBsZW5ndGgnKVxuXG4gICAgc29ja2V0LmNvcmsoKVxuICAgIHNvY2tldC53cml0ZShgJHtoZWFkZXJ9Y29udGVudC1sZW5ndGg6ICR7Y29udGVudExlbmd0aH1cXHJcXG5cXHJcXG5gLCAnbGF0aW4xJylcbiAgICBzb2NrZXQud3JpdGUoYm9keSlcbiAgICBzb2NrZXQudW5jb3JrKClcbiAgICByZXF1ZXN0Lm9uQm9keVNlbnQoYm9keSlcbiAgICByZXF1ZXN0Lm9uUmVxdWVzdFNlbnQoKVxuICAgIGlmICghZXhwZWN0c1BheWxvYWQpIHtcbiAgICAgIHNvY2tldFtrUmVzZXRdID0gdHJ1ZVxuICAgIH1cbiAgfSBlbHNlIGlmICh1dGlsLmlzQmxvYkxpa2UoYm9keSkpIHtcbiAgICBpZiAodHlwZW9mIGJvZHkuc3RyZWFtID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB3cml0ZUl0ZXJhYmxlKHsgYm9keTogYm9keS5zdHJlYW0oKSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgd3JpdGVCbG9iKHsgYm9keSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQgfSlcbiAgICB9XG4gIH0gZWxzZSBpZiAodXRpbC5pc1N0cmVhbShib2R5KSkge1xuICAgIHdyaXRlU3RyZWFtKHsgYm9keSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQgfSlcbiAgfSBlbHNlIGlmICh1dGlsLmlzSXRlcmFibGUoYm9keSkpIHtcbiAgICB3cml0ZUl0ZXJhYmxlKHsgYm9keSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQgfSlcbiAgfSBlbHNlIHtcbiAgICBhc3NlcnQoZmFsc2UpXG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiB3cml0ZUgyIChjbGllbnQsIHNlc3Npb24sIHJlcXVlc3QpIHtcbiAgY29uc3QgeyBib2R5LCBtZXRob2QsIHBhdGgsIGhvc3QsIHVwZ3JhZGUsIGV4cGVjdENvbnRpbnVlLCBzaWduYWwsIGhlYWRlcnM6IHJlcUhlYWRlcnMgfSA9IHJlcXVlc3RcblxuICBsZXQgaGVhZGVyc1xuICBpZiAodHlwZW9mIHJlcUhlYWRlcnMgPT09ICdzdHJpbmcnKSBoZWFkZXJzID0gUmVxdWVzdFtrSFRUUDJDb3B5SGVhZGVyc10ocmVxSGVhZGVycy50cmltKCkpXG4gIGVsc2UgaGVhZGVycyA9IHJlcUhlYWRlcnNcblxuICBpZiAodXBncmFkZSkge1xuICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIG5ldyBFcnJvcignVXBncmFkZSBub3Qgc3VwcG9ydGVkIGZvciBIMicpKVxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBUT0RPKEhUVFAvMik6IFNob3VsZCB3ZSBjYWxsIG9uQ29ubmVjdCBpbW1lZGlhdGVseSBvciBvbiBzdHJlYW0gcmVhZHkgZXZlbnQ/XG4gICAgcmVxdWVzdC5vbkNvbm5lY3QoKGVycikgPT4ge1xuICAgICAgaWYgKHJlcXVlc3QuYWJvcnRlZCB8fCByZXF1ZXN0LmNvbXBsZXRlZCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyIHx8IG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKCkpXG4gICAgfSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyKVxuICB9XG5cbiAgaWYgKHJlcXVlc3QuYWJvcnRlZCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLyoqIEB0eXBlIHtpbXBvcnQoJ25vZGU6aHR0cDInKS5DbGllbnRIdHRwMlN0cmVhbX0gKi9cbiAgbGV0IHN0cmVhbVxuICBjb25zdCBoMlN0YXRlID0gY2xpZW50W2tIVFRQMlNlc3Npb25TdGF0ZV1cblxuICBoZWFkZXJzW0hUVFAyX0hFQURFUl9BVVRIT1JJVFldID0gaG9zdCB8fCBjbGllbnRba0hvc3RdXG4gIGhlYWRlcnNbSFRUUDJfSEVBREVSX01FVEhPRF0gPSBtZXRob2RcblxuICBpZiAobWV0aG9kID09PSAnQ09OTkVDVCcpIHtcbiAgICBzZXNzaW9uLnJlZigpXG4gICAgLy8gd2UgYXJlIGFscmVhZHkgY29ubmVjdGVkLCBzdHJlYW1zIGFyZSBwZW5kaW5nLCBmaXJzdCByZXF1ZXN0XG4gICAgLy8gd2lsbCBjcmVhdGUgYSBuZXcgc3RyZWFtLiBXZSB0cmlnZ2VyIGEgcmVxdWVzdCB0byBjcmVhdGUgdGhlIHN0cmVhbSBhbmQgd2FpdCB1bnRpbFxuICAgIC8vIGByZWFkeWAgZXZlbnQgaXMgdHJpZ2dlcmVkXG4gICAgLy8gV2UgZGlzYWJsZWQgZW5kU3RyZWFtIHRvIGFsbG93IHRoZSB1c2VyIHRvIHdyaXRlIHRvIHRoZSBzdHJlYW1cbiAgICBzdHJlYW0gPSBzZXNzaW9uLnJlcXVlc3QoaGVhZGVycywgeyBlbmRTdHJlYW06IGZhbHNlLCBzaWduYWwgfSlcblxuICAgIGlmIChzdHJlYW0uaWQgJiYgIXN0cmVhbS5wZW5kaW5nKSB7XG4gICAgICByZXF1ZXN0Lm9uVXBncmFkZShudWxsLCBudWxsLCBzdHJlYW0pXG4gICAgICArK2gyU3RhdGUub3BlblN0cmVhbXNcbiAgICB9IGVsc2Uge1xuICAgICAgc3RyZWFtLm9uY2UoJ3JlYWR5JywgKCkgPT4ge1xuICAgICAgICByZXF1ZXN0Lm9uVXBncmFkZShudWxsLCBudWxsLCBzdHJlYW0pXG4gICAgICAgICsraDJTdGF0ZS5vcGVuU3RyZWFtc1xuICAgICAgfSlcbiAgICB9XG5cbiAgICBzdHJlYW0ub25jZSgnY2xvc2UnLCAoKSA9PiB7XG4gICAgICBoMlN0YXRlLm9wZW5TdHJlYW1zIC09IDFcbiAgICAgIC8vIFRPRE8oSFRUUC8yKTogdW5yZWYgb25seSBpZiBjdXJyZW50IHN0cmVhbXMgY291bnQgaXMgMFxuICAgICAgaWYgKGgyU3RhdGUub3BlblN0cmVhbXMgPT09IDApIHNlc3Npb24udW5yZWYoKVxuICAgIH0pXG5cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc1NDAjc2VjdGlvbi04LjNcbiAgLy8gOnBhdGggYW5kIDpzY2hlbWUgaGVhZGVycyBtdXN0IGJlIG9taXRlZCB3aGVuIHNlbmRpbmcgQ09OTkVDVFxuXG4gIGhlYWRlcnNbSFRUUDJfSEVBREVSX1BBVEhdID0gcGF0aFxuICBoZWFkZXJzW0hUVFAyX0hFQURFUl9TQ0hFTUVdID0gJ2h0dHBzJ1xuXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNC4zLjFcbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi00LjMuMlxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTQuMy41XG5cbiAgLy8gU2VuZGluZyBhIHBheWxvYWQgYm9keSBvbiBhIHJlcXVlc3QgdGhhdCBkb2VzIG5vdFxuICAvLyBleHBlY3QgaXQgY2FuIGNhdXNlIHVuZGVmaW5lZCBiZWhhdmlvciBvbiBzb21lXG4gIC8vIHNlcnZlcnMgYW5kIGNvcnJ1cHQgY29ubmVjdGlvbiBzdGF0ZS4gRG8gbm90XG4gIC8vIHJlLXVzZSB0aGUgY29ubmVjdGlvbiBmb3IgZnVydGhlciByZXF1ZXN0cy5cblxuICBjb25zdCBleHBlY3RzUGF5bG9hZCA9IChcbiAgICBtZXRob2QgPT09ICdQVVQnIHx8XG4gICAgbWV0aG9kID09PSAnUE9TVCcgfHxcbiAgICBtZXRob2QgPT09ICdQQVRDSCdcbiAgKVxuXG4gIGlmIChib2R5ICYmIHR5cGVvZiBib2R5LnJlYWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBUcnkgdG8gcmVhZCBFT0YgaW4gb3JkZXIgdG8gZ2V0IGxlbmd0aC5cbiAgICBib2R5LnJlYWQoMClcbiAgfVxuXG4gIGxldCBjb250ZW50TGVuZ3RoID0gdXRpbC5ib2R5TGVuZ3RoKGJvZHkpXG5cbiAgaWYgKGNvbnRlbnRMZW5ndGggPT0gbnVsbCkge1xuICAgIGNvbnRlbnRMZW5ndGggPSByZXF1ZXN0LmNvbnRlbnRMZW5ndGhcbiAgfVxuXG4gIGlmIChjb250ZW50TGVuZ3RoID09PSAwIHx8ICFleHBlY3RzUGF5bG9hZCkge1xuICAgIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4zLjJcbiAgICAvLyBBIHVzZXIgYWdlbnQgU0hPVUxEIE5PVCBzZW5kIGEgQ29udGVudC1MZW5ndGggaGVhZGVyIGZpZWxkIHdoZW5cbiAgICAvLyB0aGUgcmVxdWVzdCBtZXNzYWdlIGRvZXMgbm90IGNvbnRhaW4gYSBwYXlsb2FkIGJvZHkgYW5kIHRoZSBtZXRob2RcbiAgICAvLyBzZW1hbnRpY3MgZG8gbm90IGFudGljaXBhdGUgc3VjaCBhIGJvZHkuXG5cbiAgICBjb250ZW50TGVuZ3RoID0gbnVsbFxuICB9XG5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzIwNDZcbiAgLy8gQSB1c2VyIGFnZW50IG1heSBzZW5kIGEgQ29udGVudC1MZW5ndGggaGVhZGVyIHdpdGggMCB2YWx1ZSwgdGhpcyBzaG91bGQgYmUgYWxsb3dlZC5cbiAgaWYgKHNob3VsZFNlbmRDb250ZW50TGVuZ3RoKG1ldGhvZCkgJiYgY29udGVudExlbmd0aCA+IDAgJiYgcmVxdWVzdC5jb250ZW50TGVuZ3RoICE9IG51bGwgJiYgcmVxdWVzdC5jb250ZW50TGVuZ3RoICE9PSBjb250ZW50TGVuZ3RoKSB7XG4gICAgaWYgKGNsaWVudFtrU3RyaWN0Q29udGVudExlbmd0aF0pIHtcbiAgICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKSlcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIHByb2Nlc3MuZW1pdFdhcm5pbmcobmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpKVxuICB9XG5cbiAgaWYgKGNvbnRlbnRMZW5ndGggIT0gbnVsbCkge1xuICAgIGFzc2VydChib2R5LCAnbm8gYm9keSBtdXN0IG5vdCBoYXZlIGNvbnRlbnQgbGVuZ3RoJylcbiAgICBoZWFkZXJzW0hUVFAyX0hFQURFUl9DT05URU5UX0xFTkdUSF0gPSBgJHtjb250ZW50TGVuZ3RofWBcbiAgfVxuXG4gIHNlc3Npb24ucmVmKClcblxuICBjb25zdCBzaG91bGRFbmRTdHJlYW0gPSBtZXRob2QgPT09ICdHRVQnIHx8IG1ldGhvZCA9PT0gJ0hFQUQnXG4gIGlmIChleHBlY3RDb250aW51ZSkge1xuICAgIGhlYWRlcnNbSFRUUDJfSEVBREVSX0VYUEVDVF0gPSAnMTAwLWNvbnRpbnVlJ1xuICAgIHN0cmVhbSA9IHNlc3Npb24ucmVxdWVzdChoZWFkZXJzLCB7IGVuZFN0cmVhbTogc2hvdWxkRW5kU3RyZWFtLCBzaWduYWwgfSlcblxuICAgIHN0cmVhbS5vbmNlKCdjb250aW51ZScsIHdyaXRlQm9keUgyKVxuICB9IGVsc2Uge1xuICAgIHN0cmVhbSA9IHNlc3Npb24ucmVxdWVzdChoZWFkZXJzLCB7XG4gICAgICBlbmRTdHJlYW06IHNob3VsZEVuZFN0cmVhbSxcbiAgICAgIHNpZ25hbFxuICAgIH0pXG4gICAgd3JpdGVCb2R5SDIoKVxuICB9XG5cbiAgLy8gSW5jcmVtZW50IGNvdW50ZXIgYXMgd2UgaGF2ZSBuZXcgc2V2ZXJhbCBzdHJlYW1zIG9wZW5cbiAgKytoMlN0YXRlLm9wZW5TdHJlYW1zXG5cbiAgc3RyZWFtLm9uY2UoJ3Jlc3BvbnNlJywgaGVhZGVycyA9PiB7XG4gICAgY29uc3QgeyBbSFRUUDJfSEVBREVSX1NUQVRVU106IHN0YXR1c0NvZGUsIC4uLnJlYWxIZWFkZXJzIH0gPSBoZWFkZXJzXG5cbiAgICBpZiAocmVxdWVzdC5vbkhlYWRlcnMoTnVtYmVyKHN0YXR1c0NvZGUpLCByZWFsSGVhZGVycywgc3RyZWFtLnJlc3VtZS5iaW5kKHN0cmVhbSksICcnKSA9PT0gZmFsc2UpIHtcbiAgICAgIHN0cmVhbS5wYXVzZSgpXG4gICAgfVxuICB9KVxuXG4gIHN0cmVhbS5vbmNlKCdlbmQnLCAoKSA9PiB7XG4gICAgcmVxdWVzdC5vbkNvbXBsZXRlKFtdKVxuICB9KVxuXG4gIHN0cmVhbS5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgIGlmIChyZXF1ZXN0Lm9uRGF0YShjaHVuaykgPT09IGZhbHNlKSB7XG4gICAgICBzdHJlYW0ucGF1c2UoKVxuICAgIH1cbiAgfSlcblxuICBzdHJlYW0ub25jZSgnY2xvc2UnLCAoKSA9PiB7XG4gICAgaDJTdGF0ZS5vcGVuU3RyZWFtcyAtPSAxXG4gICAgLy8gVE9ETyhIVFRQLzIpOiB1bnJlZiBvbmx5IGlmIGN1cnJlbnQgc3RyZWFtcyBjb3VudCBpcyAwXG4gICAgaWYgKGgyU3RhdGUub3BlblN0cmVhbXMgPT09IDApIHtcbiAgICAgIHNlc3Npb24udW5yZWYoKVxuICAgIH1cbiAgfSlcblxuICBzdHJlYW0ub25jZSgnZXJyb3InLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgaWYgKGNsaWVudFtrSFRUUDJTZXNzaW9uXSAmJiAhY2xpZW50W2tIVFRQMlNlc3Npb25dLmRlc3Ryb3llZCAmJiAhdGhpcy5jbG9zZWQgJiYgIXRoaXMuZGVzdHJveWVkKSB7XG4gICAgICBoMlN0YXRlLnN0cmVhbXMgLT0gMVxuICAgICAgdXRpbC5kZXN0cm95KHN0cmVhbSwgZXJyKVxuICAgIH1cbiAgfSlcblxuICBzdHJlYW0ub25jZSgnZnJhbWVFcnJvcicsICh0eXBlLCBjb2RlKSA9PiB7XG4gICAgY29uc3QgZXJyID0gbmV3IEluZm9ybWF0aW9uYWxFcnJvcihgSFRUUC8yOiBcImZyYW1lRXJyb3JcIiByZWNlaXZlZCAtIHR5cGUgJHt0eXBlfSwgY29kZSAke2NvZGV9YClcbiAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIpXG5cbiAgICBpZiAoY2xpZW50W2tIVFRQMlNlc3Npb25dICYmICFjbGllbnRba0hUVFAyU2Vzc2lvbl0uZGVzdHJveWVkICYmICF0aGlzLmNsb3NlZCAmJiAhdGhpcy5kZXN0cm95ZWQpIHtcbiAgICAgIGgyU3RhdGUuc3RyZWFtcyAtPSAxXG4gICAgICB1dGlsLmRlc3Ryb3koc3RyZWFtLCBlcnIpXG4gICAgfVxuICB9KVxuXG4gIC8vIHN0cmVhbS5vbignYWJvcnRlZCcsICgpID0+IHtcbiAgLy8gICAvLyBUT0RPKEhUVFAvMik6IFN1cHBvcnQgYWJvcnRlZFxuICAvLyB9KVxuXG4gIC8vIHN0cmVhbS5vbigndGltZW91dCcsICgpID0+IHtcbiAgLy8gICAvLyBUT0RPKEhUVFAvMik6IFN1cHBvcnQgdGltZW91dFxuICAvLyB9KVxuXG4gIC8vIHN0cmVhbS5vbigncHVzaCcsIGhlYWRlcnMgPT4ge1xuICAvLyAgIC8vIFRPRE8oSFRUUC8yKTogU3VwcG9yIHB1c2hcbiAgLy8gfSlcblxuICAvLyBzdHJlYW0ub24oJ3RyYWlsZXJzJywgaGVhZGVycyA9PiB7XG4gIC8vICAgLy8gVE9ETyhIVFRQLzIpOiBTdXBwb3J0IHRyYWlsZXJzXG4gIC8vIH0pXG5cbiAgcmV0dXJuIHRydWVcblxuICBmdW5jdGlvbiB3cml0ZUJvZHlIMiAoKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2U6IGFzc2VydGlvbiAqL1xuICAgIGlmICghYm9keSkge1xuICAgICAgcmVxdWVzdC5vblJlcXVlc3RTZW50KClcbiAgICB9IGVsc2UgaWYgKHV0aWwuaXNCdWZmZXIoYm9keSkpIHtcbiAgICAgIGFzc2VydChjb250ZW50TGVuZ3RoID09PSBib2R5LmJ5dGVMZW5ndGgsICdidWZmZXIgYm9keSBtdXN0IGhhdmUgY29udGVudCBsZW5ndGgnKVxuICAgICAgc3RyZWFtLmNvcmsoKVxuICAgICAgc3RyZWFtLndyaXRlKGJvZHkpXG4gICAgICBzdHJlYW0udW5jb3JrKClcbiAgICAgIHN0cmVhbS5lbmQoKVxuICAgICAgcmVxdWVzdC5vbkJvZHlTZW50KGJvZHkpXG4gICAgICByZXF1ZXN0Lm9uUmVxdWVzdFNlbnQoKVxuICAgIH0gZWxzZSBpZiAodXRpbC5pc0Jsb2JMaWtlKGJvZHkpKSB7XG4gICAgICBpZiAodHlwZW9mIGJvZHkuc3RyZWFtID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHdyaXRlSXRlcmFibGUoe1xuICAgICAgICAgIGNsaWVudCxcbiAgICAgICAgICByZXF1ZXN0LFxuICAgICAgICAgIGNvbnRlbnRMZW5ndGgsXG4gICAgICAgICAgaDJzdHJlYW06IHN0cmVhbSxcbiAgICAgICAgICBleHBlY3RzUGF5bG9hZCxcbiAgICAgICAgICBib2R5OiBib2R5LnN0cmVhbSgpLFxuICAgICAgICAgIHNvY2tldDogY2xpZW50W2tTb2NrZXRdLFxuICAgICAgICAgIGhlYWRlcjogJydcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdyaXRlQmxvYih7XG4gICAgICAgICAgYm9keSxcbiAgICAgICAgICBjbGllbnQsXG4gICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgICBjb250ZW50TGVuZ3RoLFxuICAgICAgICAgIGV4cGVjdHNQYXlsb2FkLFxuICAgICAgICAgIGgyc3RyZWFtOiBzdHJlYW0sXG4gICAgICAgICAgaGVhZGVyOiAnJyxcbiAgICAgICAgICBzb2NrZXQ6IGNsaWVudFtrU29ja2V0XVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodXRpbC5pc1N0cmVhbShib2R5KSkge1xuICAgICAgd3JpdGVTdHJlYW0oe1xuICAgICAgICBib2R5LFxuICAgICAgICBjbGllbnQsXG4gICAgICAgIHJlcXVlc3QsXG4gICAgICAgIGNvbnRlbnRMZW5ndGgsXG4gICAgICAgIGV4cGVjdHNQYXlsb2FkLFxuICAgICAgICBzb2NrZXQ6IGNsaWVudFtrU29ja2V0XSxcbiAgICAgICAgaDJzdHJlYW06IHN0cmVhbSxcbiAgICAgICAgaGVhZGVyOiAnJ1xuICAgICAgfSlcbiAgICB9IGVsc2UgaWYgKHV0aWwuaXNJdGVyYWJsZShib2R5KSkge1xuICAgICAgd3JpdGVJdGVyYWJsZSh7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGNsaWVudCxcbiAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgZXhwZWN0c1BheWxvYWQsXG4gICAgICAgIGhlYWRlcjogJycsXG4gICAgICAgIGgyc3RyZWFtOiBzdHJlYW0sXG4gICAgICAgIHNvY2tldDogY2xpZW50W2tTb2NrZXRdXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBhc3NlcnQoZmFsc2UpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHdyaXRlU3RyZWFtICh7IGgyc3RyZWFtLCBib2R5LCBjbGllbnQsIHJlcXVlc3QsIHNvY2tldCwgY29udGVudExlbmd0aCwgaGVhZGVyLCBleHBlY3RzUGF5bG9hZCB9KSB7XG4gIGFzc2VydChjb250ZW50TGVuZ3RoICE9PSAwIHx8IGNsaWVudFtrUnVubmluZ10gPT09IDAsICdzdHJlYW0gYm9keSBjYW5ub3QgYmUgcGlwZWxpbmVkJylcblxuICBpZiAoY2xpZW50W2tIVFRQQ29ublZlcnNpb25dID09PSAnaDInKSB7XG4gICAgLy8gRm9yIEhUVFAvMiwgaXMgZW5vdWdoIHRvIHBpcGUgdGhlIHN0cmVhbVxuICAgIGNvbnN0IHBpcGUgPSBwaXBlbGluZShcbiAgICAgIGJvZHksXG4gICAgICBoMnN0cmVhbSxcbiAgICAgIChlcnIpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHV0aWwuZGVzdHJveShib2R5LCBlcnIpXG4gICAgICAgICAgdXRpbC5kZXN0cm95KGgyc3RyZWFtLCBlcnIpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVxdWVzdC5vblJlcXVlc3RTZW50KClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIClcblxuICAgIHBpcGUub24oJ2RhdGEnLCBvblBpcGVEYXRhKVxuICAgIHBpcGUub25jZSgnZW5kJywgKCkgPT4ge1xuICAgICAgcGlwZS5yZW1vdmVMaXN0ZW5lcignZGF0YScsIG9uUGlwZURhdGEpXG4gICAgICB1dGlsLmRlc3Ryb3kocGlwZSlcbiAgICB9KVxuXG4gICAgZnVuY3Rpb24gb25QaXBlRGF0YSAoY2h1bmspIHtcbiAgICAgIHJlcXVlc3Qub25Cb2R5U2VudChjaHVuaylcbiAgICB9XG5cbiAgICByZXR1cm5cbiAgfVxuXG4gIGxldCBmaW5pc2hlZCA9IGZhbHNlXG5cbiAgY29uc3Qgd3JpdGVyID0gbmV3IEFzeW5jV3JpdGVyKHsgc29ja2V0LCByZXF1ZXN0LCBjb250ZW50TGVuZ3RoLCBjbGllbnQsIGV4cGVjdHNQYXlsb2FkLCBoZWFkZXIgfSlcblxuICBjb25zdCBvbkRhdGEgPSBmdW5jdGlvbiAoY2h1bmspIHtcbiAgICBpZiAoZmluaXNoZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBpZiAoIXdyaXRlci53cml0ZShjaHVuaykgJiYgdGhpcy5wYXVzZSkge1xuICAgICAgICB0aGlzLnBhdXNlKClcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHV0aWwuZGVzdHJveSh0aGlzLCBlcnIpXG4gICAgfVxuICB9XG4gIGNvbnN0IG9uRHJhaW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGZpbmlzaGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoYm9keS5yZXN1bWUpIHtcbiAgICAgIGJvZHkucmVzdW1lKClcbiAgICB9XG4gIH1cbiAgY29uc3Qgb25BYm9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoZmluaXNoZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjb25zdCBlcnIgPSBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gb25GaW5pc2hlZChlcnIpKVxuICB9XG4gIGNvbnN0IG9uRmluaXNoZWQgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgaWYgKGZpbmlzaGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBmaW5pc2hlZCA9IHRydWVcblxuICAgIGFzc2VydChzb2NrZXQuZGVzdHJveWVkIHx8IChzb2NrZXRba1dyaXRpbmddICYmIGNsaWVudFtrUnVubmluZ10gPD0gMSkpXG5cbiAgICBzb2NrZXRcbiAgICAgIC5vZmYoJ2RyYWluJywgb25EcmFpbilcbiAgICAgIC5vZmYoJ2Vycm9yJywgb25GaW5pc2hlZClcblxuICAgIGJvZHlcbiAgICAgIC5yZW1vdmVMaXN0ZW5lcignZGF0YScsIG9uRGF0YSlcbiAgICAgIC5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25GaW5pc2hlZClcbiAgICAgIC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbkZpbmlzaGVkKVxuICAgICAgLnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uQWJvcnQpXG5cbiAgICBpZiAoIWVycikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgd3JpdGVyLmVuZCgpXG4gICAgICB9IGNhdGNoIChlcikge1xuICAgICAgICBlcnIgPSBlclxuICAgICAgfVxuICAgIH1cblxuICAgIHdyaXRlci5kZXN0cm95KGVycilcblxuICAgIGlmIChlcnIgJiYgKGVyci5jb2RlICE9PSAnVU5EX0VSUl9JTkZPJyB8fCBlcnIubWVzc2FnZSAhPT0gJ3Jlc2V0JykpIHtcbiAgICAgIHV0aWwuZGVzdHJveShib2R5LCBlcnIpXG4gICAgfSBlbHNlIHtcbiAgICAgIHV0aWwuZGVzdHJveShib2R5KVxuICAgIH1cbiAgfVxuXG4gIGJvZHlcbiAgICAub24oJ2RhdGEnLCBvbkRhdGEpXG4gICAgLm9uKCdlbmQnLCBvbkZpbmlzaGVkKVxuICAgIC5vbignZXJyb3InLCBvbkZpbmlzaGVkKVxuICAgIC5vbignY2xvc2UnLCBvbkFib3J0KVxuXG4gIGlmIChib2R5LnJlc3VtZSkge1xuICAgIGJvZHkucmVzdW1lKClcbiAgfVxuXG4gIHNvY2tldFxuICAgIC5vbignZHJhaW4nLCBvbkRyYWluKVxuICAgIC5vbignZXJyb3InLCBvbkZpbmlzaGVkKVxufVxuXG5hc3luYyBmdW5jdGlvbiB3cml0ZUJsb2IgKHsgaDJzdHJlYW0sIGJvZHksIGNsaWVudCwgcmVxdWVzdCwgc29ja2V0LCBjb250ZW50TGVuZ3RoLCBoZWFkZXIsIGV4cGVjdHNQYXlsb2FkIH0pIHtcbiAgYXNzZXJ0KGNvbnRlbnRMZW5ndGggPT09IGJvZHkuc2l6ZSwgJ2Jsb2IgYm9keSBtdXN0IGhhdmUgY29udGVudCBsZW5ndGgnKVxuXG4gIGNvbnN0IGlzSDIgPSBjbGllbnRba0hUVFBDb25uVmVyc2lvbl0gPT09ICdoMidcbiAgdHJ5IHtcbiAgICBpZiAoY29udGVudExlbmd0aCAhPSBudWxsICYmIGNvbnRlbnRMZW5ndGggIT09IGJvZHkuc2l6ZSkge1xuICAgICAgdGhyb3cgbmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpXG4gICAgfVxuXG4gICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20oYXdhaXQgYm9keS5hcnJheUJ1ZmZlcigpKVxuXG4gICAgaWYgKGlzSDIpIHtcbiAgICAgIGgyc3RyZWFtLmNvcmsoKVxuICAgICAgaDJzdHJlYW0ud3JpdGUoYnVmZmVyKVxuICAgICAgaDJzdHJlYW0udW5jb3JrKClcbiAgICB9IGVsc2Uge1xuICAgICAgc29ja2V0LmNvcmsoKVxuICAgICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn1jb250ZW50LWxlbmd0aDogJHtjb250ZW50TGVuZ3RofVxcclxcblxcclxcbmAsICdsYXRpbjEnKVxuICAgICAgc29ja2V0LndyaXRlKGJ1ZmZlcilcbiAgICAgIHNvY2tldC51bmNvcmsoKVxuICAgIH1cblxuICAgIHJlcXVlc3Qub25Cb2R5U2VudChidWZmZXIpXG4gICAgcmVxdWVzdC5vblJlcXVlc3RTZW50KClcblxuICAgIGlmICghZXhwZWN0c1BheWxvYWQpIHtcbiAgICAgIHNvY2tldFtrUmVzZXRdID0gdHJ1ZVxuICAgIH1cblxuICAgIHJlc3VtZShjbGllbnQpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHV0aWwuZGVzdHJveShpc0gyID8gaDJzdHJlYW0gOiBzb2NrZXQsIGVycilcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiB3cml0ZUl0ZXJhYmxlICh7IGgyc3RyZWFtLCBib2R5LCBjbGllbnQsIHJlcXVlc3QsIHNvY2tldCwgY29udGVudExlbmd0aCwgaGVhZGVyLCBleHBlY3RzUGF5bG9hZCB9KSB7XG4gIGFzc2VydChjb250ZW50TGVuZ3RoICE9PSAwIHx8IGNsaWVudFtrUnVubmluZ10gPT09IDAsICdpdGVyYXRvciBib2R5IGNhbm5vdCBiZSBwaXBlbGluZWQnKVxuXG4gIGxldCBjYWxsYmFjayA9IG51bGxcbiAgZnVuY3Rpb24gb25EcmFpbiAoKSB7XG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBjb25zdCBjYiA9IGNhbGxiYWNrXG4gICAgICBjYWxsYmFjayA9IG51bGxcbiAgICAgIGNiKClcbiAgICB9XG4gIH1cblxuICBjb25zdCB3YWl0Rm9yRHJhaW4gPSAoKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgYXNzZXJ0KGNhbGxiYWNrID09PSBudWxsKVxuXG4gICAgaWYgKHNvY2tldFtrRXJyb3JdKSB7XG4gICAgICByZWplY3Qoc29ja2V0W2tFcnJvcl0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbGxiYWNrID0gcmVzb2x2ZVxuICAgIH1cbiAgfSlcblxuICBpZiAoY2xpZW50W2tIVFRQQ29ublZlcnNpb25dID09PSAnaDInKSB7XG4gICAgaDJzdHJlYW1cbiAgICAgIC5vbignY2xvc2UnLCBvbkRyYWluKVxuICAgICAgLm9uKCdkcmFpbicsIG9uRHJhaW4pXG5cbiAgICB0cnkge1xuICAgICAgLy8gSXQncyB1cCB0byB0aGUgdXNlciB0byBzb21laG93IGFib3J0IHRoZSBhc3luYyBpdGVyYWJsZS5cbiAgICAgIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgYm9keSkge1xuICAgICAgICBpZiAoc29ja2V0W2tFcnJvcl0pIHtcbiAgICAgICAgICB0aHJvdyBzb2NrZXRba0Vycm9yXVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzID0gaDJzdHJlYW0ud3JpdGUoY2h1bmspXG4gICAgICAgIHJlcXVlc3Qub25Cb2R5U2VudChjaHVuaylcbiAgICAgICAgaWYgKCFyZXMpIHtcbiAgICAgICAgICBhd2FpdCB3YWl0Rm9yRHJhaW4oKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBoMnN0cmVhbS5kZXN0cm95KGVycilcbiAgICB9IGZpbmFsbHkge1xuICAgICAgcmVxdWVzdC5vblJlcXVlc3RTZW50KClcbiAgICAgIGgyc3RyZWFtLmVuZCgpXG4gICAgICBoMnN0cmVhbVxuICAgICAgICAub2ZmKCdjbG9zZScsIG9uRHJhaW4pXG4gICAgICAgIC5vZmYoJ2RyYWluJywgb25EcmFpbilcbiAgICB9XG5cbiAgICByZXR1cm5cbiAgfVxuXG4gIHNvY2tldFxuICAgIC5vbignY2xvc2UnLCBvbkRyYWluKVxuICAgIC5vbignZHJhaW4nLCBvbkRyYWluKVxuXG4gIGNvbnN0IHdyaXRlciA9IG5ldyBBc3luY1dyaXRlcih7IHNvY2tldCwgcmVxdWVzdCwgY29udGVudExlbmd0aCwgY2xpZW50LCBleHBlY3RzUGF5bG9hZCwgaGVhZGVyIH0pXG4gIHRyeSB7XG4gICAgLy8gSXQncyB1cCB0byB0aGUgdXNlciB0byBzb21laG93IGFib3J0IHRoZSBhc3luYyBpdGVyYWJsZS5cbiAgICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIGJvZHkpIHtcbiAgICAgIGlmIChzb2NrZXRba0Vycm9yXSkge1xuICAgICAgICB0aHJvdyBzb2NrZXRba0Vycm9yXVxuICAgICAgfVxuXG4gICAgICBpZiAoIXdyaXRlci53cml0ZShjaHVuaykpIHtcbiAgICAgICAgYXdhaXQgd2FpdEZvckRyYWluKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICB3cml0ZXIuZW5kKClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgd3JpdGVyLmRlc3Ryb3koZXJyKVxuICB9IGZpbmFsbHkge1xuICAgIHNvY2tldFxuICAgICAgLm9mZignY2xvc2UnLCBvbkRyYWluKVxuICAgICAgLm9mZignZHJhaW4nLCBvbkRyYWluKVxuICB9XG59XG5cbmNsYXNzIEFzeW5jV3JpdGVyIHtcbiAgY29uc3RydWN0b3IgKHsgc29ja2V0LCByZXF1ZXN0LCBjb250ZW50TGVuZ3RoLCBjbGllbnQsIGV4cGVjdHNQYXlsb2FkLCBoZWFkZXIgfSkge1xuICAgIHRoaXMuc29ja2V0ID0gc29ja2V0XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdFxuICAgIHRoaXMuY29udGVudExlbmd0aCA9IGNvbnRlbnRMZW5ndGhcbiAgICB0aGlzLmNsaWVudCA9IGNsaWVudFxuICAgIHRoaXMuYnl0ZXNXcml0dGVuID0gMFxuICAgIHRoaXMuZXhwZWN0c1BheWxvYWQgPSBleHBlY3RzUGF5bG9hZFxuICAgIHRoaXMuaGVhZGVyID0gaGVhZGVyXG5cbiAgICBzb2NrZXRba1dyaXRpbmddID0gdHJ1ZVxuICB9XG5cbiAgd3JpdGUgKGNodW5rKSB7XG4gICAgY29uc3QgeyBzb2NrZXQsIHJlcXVlc3QsIGNvbnRlbnRMZW5ndGgsIGNsaWVudCwgYnl0ZXNXcml0dGVuLCBleHBlY3RzUGF5bG9hZCwgaGVhZGVyIH0gPSB0aGlzXG5cbiAgICBpZiAoc29ja2V0W2tFcnJvcl0pIHtcbiAgICAgIHRocm93IHNvY2tldFtrRXJyb3JdXG4gICAgfVxuXG4gICAgaWYgKHNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGNvbnN0IGxlbiA9IEJ1ZmZlci5ieXRlTGVuZ3RoKGNodW5rKVxuICAgIGlmICghbGVuKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIC8vIFdlIHNob3VsZCBkZWZlciB3cml0aW5nIGNodW5rcy5cbiAgICBpZiAoY29udGVudExlbmd0aCAhPT0gbnVsbCAmJiBieXRlc1dyaXR0ZW4gKyBsZW4gPiBjb250ZW50TGVuZ3RoKSB7XG4gICAgICBpZiAoY2xpZW50W2tTdHJpY3RDb250ZW50TGVuZ3RoXSkge1xuICAgICAgICB0aHJvdyBuZXcgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKClcbiAgICAgIH1cblxuICAgICAgcHJvY2Vzcy5lbWl0V2FybmluZyhuZXcgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKCkpXG4gICAgfVxuXG4gICAgc29ja2V0LmNvcmsoKVxuXG4gICAgaWYgKGJ5dGVzV3JpdHRlbiA9PT0gMCkge1xuICAgICAgaWYgKCFleHBlY3RzUGF5bG9hZCkge1xuICAgICAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbnRlbnRMZW5ndGggPT09IG51bGwpIHtcbiAgICAgICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn10cmFuc2Zlci1lbmNvZGluZzogY2h1bmtlZFxcclxcbmAsICdsYXRpbjEnKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn1jb250ZW50LWxlbmd0aDogJHtjb250ZW50TGVuZ3RofVxcclxcblxcclxcbmAsICdsYXRpbjEnKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb250ZW50TGVuZ3RoID09PSBudWxsKSB7XG4gICAgICBzb2NrZXQud3JpdGUoYFxcclxcbiR7bGVuLnRvU3RyaW5nKDE2KX1cXHJcXG5gLCAnbGF0aW4xJylcbiAgICB9XG5cbiAgICB0aGlzLmJ5dGVzV3JpdHRlbiArPSBsZW5cblxuICAgIGNvbnN0IHJldCA9IHNvY2tldC53cml0ZShjaHVuaylcblxuICAgIHNvY2tldC51bmNvcmsoKVxuXG4gICAgcmVxdWVzdC5vbkJvZHlTZW50KGNodW5rKVxuXG4gICAgaWYgKCFyZXQpIHtcbiAgICAgIGlmIChzb2NrZXRba1BhcnNlcl0udGltZW91dCAmJiBzb2NrZXRba1BhcnNlcl0udGltZW91dFR5cGUgPT09IFRJTUVPVVRfSEVBREVSUykge1xuICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogb25seSBmb3IgamVzdFxuICAgICAgICBpZiAoc29ja2V0W2tQYXJzZXJdLnRpbWVvdXQucmVmcmVzaCkge1xuICAgICAgICAgIHNvY2tldFtrUGFyc2VyXS50aW1lb3V0LnJlZnJlc2goKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgZW5kICgpIHtcbiAgICBjb25zdCB7IHNvY2tldCwgY29udGVudExlbmd0aCwgY2xpZW50LCBieXRlc1dyaXR0ZW4sIGV4cGVjdHNQYXlsb2FkLCBoZWFkZXIsIHJlcXVlc3QgfSA9IHRoaXNcbiAgICByZXF1ZXN0Lm9uUmVxdWVzdFNlbnQoKVxuXG4gICAgc29ja2V0W2tXcml0aW5nXSA9IGZhbHNlXG5cbiAgICBpZiAoc29ja2V0W2tFcnJvcl0pIHtcbiAgICAgIHRocm93IHNvY2tldFtrRXJyb3JdXG4gICAgfVxuXG4gICAgaWYgKHNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChieXRlc1dyaXR0ZW4gPT09IDApIHtcbiAgICAgIGlmIChleHBlY3RzUGF5bG9hZCkge1xuICAgICAgICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMCNzZWN0aW9uLTMuMy4yXG4gICAgICAgIC8vIEEgdXNlciBhZ2VudCBTSE9VTEQgc2VuZCBhIENvbnRlbnQtTGVuZ3RoIGluIGEgcmVxdWVzdCBtZXNzYWdlIHdoZW5cbiAgICAgICAgLy8gbm8gVHJhbnNmZXItRW5jb2RpbmcgaXMgc2VudCBhbmQgdGhlIHJlcXVlc3QgbWV0aG9kIGRlZmluZXMgYSBtZWFuaW5nXG4gICAgICAgIC8vIGZvciBhbiBlbmNsb3NlZCBwYXlsb2FkIGJvZHkuXG5cbiAgICAgICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn1jb250ZW50LWxlbmd0aDogMFxcclxcblxcclxcbmAsICdsYXRpbjEnKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn1cXHJcXG5gLCAnbGF0aW4xJylcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNvbnRlbnRMZW5ndGggPT09IG51bGwpIHtcbiAgICAgIHNvY2tldC53cml0ZSgnXFxyXFxuMFxcclxcblxcclxcbicsICdsYXRpbjEnKVxuICAgIH1cblxuICAgIGlmIChjb250ZW50TGVuZ3RoICE9PSBudWxsICYmIGJ5dGVzV3JpdHRlbiAhPT0gY29udGVudExlbmd0aCkge1xuICAgICAgaWYgKGNsaWVudFtrU3RyaWN0Q29udGVudExlbmd0aF0pIHtcbiAgICAgICAgdGhyb3cgbmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9jZXNzLmVtaXRXYXJuaW5nKG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc29ja2V0W2tQYXJzZXJdLnRpbWVvdXQgJiYgc29ja2V0W2tQYXJzZXJdLnRpbWVvdXRUeXBlID09PSBUSU1FT1VUX0hFQURFUlMpIHtcbiAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBvbmx5IGZvciBqZXN0XG4gICAgICBpZiAoc29ja2V0W2tQYXJzZXJdLnRpbWVvdXQucmVmcmVzaCkge1xuICAgICAgICBzb2NrZXRba1BhcnNlcl0udGltZW91dC5yZWZyZXNoKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXN1bWUoY2xpZW50KVxuICB9XG5cbiAgZGVzdHJveSAoZXJyKSB7XG4gICAgY29uc3QgeyBzb2NrZXQsIGNsaWVudCB9ID0gdGhpc1xuXG4gICAgc29ja2V0W2tXcml0aW5nXSA9IGZhbHNlXG5cbiAgICBpZiAoZXJyKSB7XG4gICAgICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA8PSAxLCAncGlwZWxpbmUgc2hvdWxkIG9ubHkgY29udGFpbiB0aGlzIHJlcXVlc3QnKVxuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgZXJyKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBlcnJvclJlcXVlc3QgKGNsaWVudCwgcmVxdWVzdCwgZXJyKSB7XG4gIHRyeSB7XG4gICAgcmVxdWVzdC5vbkVycm9yKGVycilcbiAgICBhc3NlcnQocmVxdWVzdC5hYm9ydGVkKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjbGllbnQuZW1pdCgnZXJyb3InLCBlcnIpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBDbGllbnRcbiIsCiAgICAiLyogZXNsaW50LWRpc2FibGUgKi9cblxuJ3VzZSBzdHJpY3QnXG5cbi8vIEV4dHJhY3RlZCBmcm9tIG5vZGUvbGliL2ludGVybmFsL2ZpeGVkX3F1ZXVlLmpzXG5cbi8vIEN1cnJlbnRseSBvcHRpbWFsIHF1ZXVlIHNpemUsIHRlc3RlZCBvbiBWOCA2LjAgLSA2LjYuIE11c3QgYmUgcG93ZXIgb2YgdHdvLlxuY29uc3Qga1NpemUgPSAyMDQ4O1xuY29uc3Qga01hc2sgPSBrU2l6ZSAtIDE7XG5cbi8vIFRoZSBGaXhlZFF1ZXVlIGlzIGltcGxlbWVudGVkIGFzIGEgc2luZ2x5LWxpbmtlZCBsaXN0IG9mIGZpeGVkLXNpemVcbi8vIGNpcmN1bGFyIGJ1ZmZlcnMuIEl0IGxvb2tzIHNvbWV0aGluZyBsaWtlIHRoaXM6XG4vL1xuLy8gIGhlYWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFpbFxuLy8gICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4vLyAgICB2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZcbi8vICstLS0tLS0tLS0tLSsgPC0tLS0tXFwgICAgICAgKy0tLS0tLS0tLS0tKyA8LS0tLS0tXFwgICAgICAgICArLS0tLS0tLS0tLS0rXG4vLyB8ICBbbnVsbF0gICB8ICAgICAgICBcXC0tLS0tIHwgICBuZXh0ICAgIHwgICAgICAgICBcXC0tLS0tLS0gfCAgIG5leHQgICAgfFxuLy8gKy0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rXG4vLyB8ICAgaXRlbSAgICB8IDwtLSBib3R0b20gICAgfCAgIGl0ZW0gICAgfCA8LS0gYm90dG9tICAgICAgIHwgIFtlbXB0eV0gIHxcbi8vIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgfCAgW2VtcHR5XSAgfFxuLy8gfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICB8ICBbZW1wdHldICB8XG4vLyB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgIHwgIFtlbXB0eV0gIHxcbi8vIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgIGJvdHRvbSAtLT4gfCAgIGl0ZW0gICAgfFxuLy8gfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8XG4vLyB8ICAgIC4uLiAgICB8ICAgICAgICAgICAgICAgfCAgICAuLi4gICAgfCAgICAgICAgICAgICAgICAgIHwgICAgLi4uICAgIHxcbi8vIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfFxuLy8gfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8XG4vLyB8ICBbZW1wdHldICB8IDwtLSB0b3AgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHxcbi8vIHwgIFtlbXB0eV0gIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfFxuLy8gfCAgW2VtcHR5XSAgfCAgICAgICAgICAgICAgIHwgIFtlbXB0eV0gIHwgPC0tIHRvcCAgdG9wIC0tPiB8ICBbZW1wdHldICB8XG4vLyArLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLStcbi8vXG4vLyBPciwgaWYgdGhlcmUgaXMgb25seSBvbmUgY2lyY3VsYXIgYnVmZmVyLCBpdCBsb29rcyBzb21ldGhpbmdcbi8vIGxpa2UgZWl0aGVyIG9mIHRoZXNlOlxuLy9cbi8vICBoZWFkICAgdGFpbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWQgICB0YWlsXG4vLyAgICB8ICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHxcbi8vICAgIHYgICAgIHYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdiAgICAgdlxuLy8gKy0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rXG4vLyB8ICBbbnVsbF0gICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFtudWxsXSAgIHxcbi8vICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tK1xuLy8gfCAgW2VtcHR5XSAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8XG4vLyB8ICBbZW1wdHldICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHxcbi8vIHwgICBpdGVtICAgIHwgPC0tIGJvdHRvbSAgICAgICAgICAgIHRvcCAtLT4gfCAgW2VtcHR5XSAgfFxuLy8gfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBbZW1wdHldICB8XG4vLyB8ICBbZW1wdHldICB8IDwtLSB0b3AgICAgICAgICAgICBib3R0b20gLS0+IHwgICBpdGVtICAgIHxcbi8vIHwgIFtlbXB0eV0gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfFxuLy8gKy0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rXG4vL1xuLy8gQWRkaW5nIGEgdmFsdWUgbWVhbnMgbW92aW5nIGB0b3BgIGZvcndhcmQgYnkgb25lLCByZW1vdmluZyBtZWFuc1xuLy8gbW92aW5nIGBib3R0b21gIGZvcndhcmQgYnkgb25lLiBBZnRlciByZWFjaGluZyB0aGUgZW5kLCB0aGUgcXVldWVcbi8vIHdyYXBzIGFyb3VuZC5cbi8vXG4vLyBXaGVuIGB0b3AgPT09IGJvdHRvbWAgdGhlIGN1cnJlbnQgcXVldWUgaXMgZW1wdHkgYW5kIHdoZW5cbi8vIGB0b3AgKyAxID09PSBib3R0b21gIGl0J3MgZnVsbC4gVGhpcyB3YXN0ZXMgYSBzaW5nbGUgc3BhY2Ugb2Ygc3RvcmFnZVxuLy8gYnV0IGFsbG93cyBtdWNoIHF1aWNrZXIgY2hlY2tzLlxuXG5jbGFzcyBGaXhlZENpcmN1bGFyQnVmZmVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5ib3R0b20gPSAwO1xuICAgIHRoaXMudG9wID0gMDtcbiAgICB0aGlzLmxpc3QgPSBuZXcgQXJyYXkoa1NpemUpO1xuICAgIHRoaXMubmV4dCA9IG51bGw7XG4gIH1cblxuICBpc0VtcHR5KCkge1xuICAgIHJldHVybiB0aGlzLnRvcCA9PT0gdGhpcy5ib3R0b207XG4gIH1cblxuICBpc0Z1bGwoKSB7XG4gICAgcmV0dXJuICgodGhpcy50b3AgKyAxKSAmIGtNYXNrKSA9PT0gdGhpcy5ib3R0b207XG4gIH1cblxuICBwdXNoKGRhdGEpIHtcbiAgICB0aGlzLmxpc3RbdGhpcy50b3BdID0gZGF0YTtcbiAgICB0aGlzLnRvcCA9ICh0aGlzLnRvcCArIDEpICYga01hc2s7XG4gIH1cblxuICBzaGlmdCgpIHtcbiAgICBjb25zdCBuZXh0SXRlbSA9IHRoaXMubGlzdFt0aGlzLmJvdHRvbV07XG4gICAgaWYgKG5leHRJdGVtID09PSB1bmRlZmluZWQpXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB0aGlzLmxpc3RbdGhpcy5ib3R0b21dID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuYm90dG9tID0gKHRoaXMuYm90dG9tICsgMSkgJiBrTWFzaztcbiAgICByZXR1cm4gbmV4dEl0ZW07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBGaXhlZFF1ZXVlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5oZWFkID0gdGhpcy50YWlsID0gbmV3IEZpeGVkQ2lyY3VsYXJCdWZmZXIoKTtcbiAgfVxuXG4gIGlzRW1wdHkoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGVhZC5pc0VtcHR5KCk7XG4gIH1cblxuICBwdXNoKGRhdGEpIHtcbiAgICBpZiAodGhpcy5oZWFkLmlzRnVsbCgpKSB7XG4gICAgICAvLyBIZWFkIGlzIGZ1bGw6IENyZWF0ZXMgYSBuZXcgcXVldWUsIHNldHMgdGhlIG9sZCBxdWV1ZSdzIGAubmV4dGAgdG8gaXQsXG4gICAgICAvLyBhbmQgc2V0cyBpdCBhcyB0aGUgbmV3IG1haW4gcXVldWUuXG4gICAgICB0aGlzLmhlYWQgPSB0aGlzLmhlYWQubmV4dCA9IG5ldyBGaXhlZENpcmN1bGFyQnVmZmVyKCk7XG4gICAgfVxuICAgIHRoaXMuaGVhZC5wdXNoKGRhdGEpO1xuICB9XG5cbiAgc2hpZnQoKSB7XG4gICAgY29uc3QgdGFpbCA9IHRoaXMudGFpbDtcbiAgICBjb25zdCBuZXh0ID0gdGFpbC5zaGlmdCgpO1xuICAgIGlmICh0YWlsLmlzRW1wdHkoKSAmJiB0YWlsLm5leHQgIT09IG51bGwpIHtcbiAgICAgIC8vIElmIHRoZXJlIGlzIGFub3RoZXIgcXVldWUsIGl0IGZvcm1zIHRoZSBuZXcgdGFpbC5cbiAgICAgIHRoaXMudGFpbCA9IHRhaWwubmV4dDtcbiAgICB9XG4gICAgcmV0dXJuIG5leHQ7XG4gIH1cbn07XG4iLAogICAgImNvbnN0IHsga0ZyZWUsIGtDb25uZWN0ZWQsIGtQZW5kaW5nLCBrUXVldWVkLCBrUnVubmluZywga1NpemUgfSA9IHJlcXVpcmUoJy4vY29yZS9zeW1ib2xzJylcbmNvbnN0IGtQb29sID0gU3ltYm9sKCdwb29sJylcblxuY2xhc3MgUG9vbFN0YXRzIHtcbiAgY29uc3RydWN0b3IgKHBvb2wpIHtcbiAgICB0aGlzW2tQb29sXSA9IHBvb2xcbiAgfVxuXG4gIGdldCBjb25uZWN0ZWQgKCkge1xuICAgIHJldHVybiB0aGlzW2tQb29sXVtrQ29ubmVjdGVkXVxuICB9XG5cbiAgZ2V0IGZyZWUgKCkge1xuICAgIHJldHVybiB0aGlzW2tQb29sXVtrRnJlZV1cbiAgfVxuXG4gIGdldCBwZW5kaW5nICgpIHtcbiAgICByZXR1cm4gdGhpc1trUG9vbF1ba1BlbmRpbmddXG4gIH1cblxuICBnZXQgcXVldWVkICgpIHtcbiAgICByZXR1cm4gdGhpc1trUG9vbF1ba1F1ZXVlZF1cbiAgfVxuXG4gIGdldCBydW5uaW5nICgpIHtcbiAgICByZXR1cm4gdGhpc1trUG9vbF1ba1J1bm5pbmddXG4gIH1cblxuICBnZXQgc2l6ZSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1Bvb2xdW2tTaXplXVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUG9vbFN0YXRzXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBEaXNwYXRjaGVyQmFzZSA9IHJlcXVpcmUoJy4vZGlzcGF0Y2hlci1iYXNlJylcbmNvbnN0IEZpeGVkUXVldWUgPSByZXF1aXJlKCcuL25vZGUvZml4ZWQtcXVldWUnKVxuY29uc3QgeyBrQ29ubmVjdGVkLCBrU2l6ZSwga1J1bm5pbmcsIGtQZW5kaW5nLCBrUXVldWVkLCBrQnVzeSwga0ZyZWUsIGtVcmwsIGtDbG9zZSwga0Rlc3Ryb3ksIGtEaXNwYXRjaCB9ID0gcmVxdWlyZSgnLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgUG9vbFN0YXRzID0gcmVxdWlyZSgnLi9wb29sLXN0YXRzJylcblxuY29uc3Qga0NsaWVudHMgPSBTeW1ib2woJ2NsaWVudHMnKVxuY29uc3Qga05lZWREcmFpbiA9IFN5bWJvbCgnbmVlZERyYWluJylcbmNvbnN0IGtRdWV1ZSA9IFN5bWJvbCgncXVldWUnKVxuY29uc3Qga0Nsb3NlZFJlc29sdmUgPSBTeW1ib2woJ2Nsb3NlZCByZXNvbHZlJylcbmNvbnN0IGtPbkRyYWluID0gU3ltYm9sKCdvbkRyYWluJylcbmNvbnN0IGtPbkNvbm5lY3QgPSBTeW1ib2woJ29uQ29ubmVjdCcpXG5jb25zdCBrT25EaXNjb25uZWN0ID0gU3ltYm9sKCdvbkRpc2Nvbm5lY3QnKVxuY29uc3Qga09uQ29ubmVjdGlvbkVycm9yID0gU3ltYm9sKCdvbkNvbm5lY3Rpb25FcnJvcicpXG5jb25zdCBrR2V0RGlzcGF0Y2hlciA9IFN5bWJvbCgnZ2V0IGRpc3BhdGNoZXInKVxuY29uc3Qga0FkZENsaWVudCA9IFN5bWJvbCgnYWRkIGNsaWVudCcpXG5jb25zdCBrUmVtb3ZlQ2xpZW50ID0gU3ltYm9sKCdyZW1vdmUgY2xpZW50JylcbmNvbnN0IGtTdGF0cyA9IFN5bWJvbCgnc3RhdHMnKVxuXG5jbGFzcyBQb29sQmFzZSBleHRlbmRzIERpc3BhdGNoZXJCYXNlIHtcbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXNba1F1ZXVlXSA9IG5ldyBGaXhlZFF1ZXVlKClcbiAgICB0aGlzW2tDbGllbnRzXSA9IFtdXG4gICAgdGhpc1trUXVldWVkXSA9IDBcblxuICAgIGNvbnN0IHBvb2wgPSB0aGlzXG5cbiAgICB0aGlzW2tPbkRyYWluXSA9IGZ1bmN0aW9uIG9uRHJhaW4gKG9yaWdpbiwgdGFyZ2V0cykge1xuICAgICAgY29uc3QgcXVldWUgPSBwb29sW2tRdWV1ZV1cblxuICAgICAgbGV0IG5lZWREcmFpbiA9IGZhbHNlXG5cbiAgICAgIHdoaWxlICghbmVlZERyYWluKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBxdWV1ZS5zaGlmdCgpXG4gICAgICAgIGlmICghaXRlbSkge1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgcG9vbFtrUXVldWVkXS0tXG4gICAgICAgIG5lZWREcmFpbiA9ICF0aGlzLmRpc3BhdGNoKGl0ZW0ub3B0cywgaXRlbS5oYW5kbGVyKVxuICAgICAgfVxuXG4gICAgICB0aGlzW2tOZWVkRHJhaW5dID0gbmVlZERyYWluXG5cbiAgICAgIGlmICghdGhpc1trTmVlZERyYWluXSAmJiBwb29sW2tOZWVkRHJhaW5dKSB7XG4gICAgICAgIHBvb2xba05lZWREcmFpbl0gPSBmYWxzZVxuICAgICAgICBwb29sLmVtaXQoJ2RyYWluJywgb3JpZ2luLCBbcG9vbCwgLi4udGFyZ2V0c10pXG4gICAgICB9XG5cbiAgICAgIGlmIChwb29sW2tDbG9zZWRSZXNvbHZlXSAmJiBxdWV1ZS5pc0VtcHR5KCkpIHtcbiAgICAgICAgUHJvbWlzZVxuICAgICAgICAgIC5hbGwocG9vbFtrQ2xpZW50c10ubWFwKGMgPT4gYy5jbG9zZSgpKSlcbiAgICAgICAgICAudGhlbihwb29sW2tDbG9zZWRSZXNvbHZlXSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzW2tPbkNvbm5lY3RdID0gKG9yaWdpbiwgdGFyZ2V0cykgPT4ge1xuICAgICAgcG9vbC5lbWl0KCdjb25uZWN0Jywgb3JpZ2luLCBbcG9vbCwgLi4udGFyZ2V0c10pXG4gICAgfVxuXG4gICAgdGhpc1trT25EaXNjb25uZWN0XSA9IChvcmlnaW4sIHRhcmdldHMsIGVycikgPT4ge1xuICAgICAgcG9vbC5lbWl0KCdkaXNjb25uZWN0Jywgb3JpZ2luLCBbcG9vbCwgLi4udGFyZ2V0c10sIGVycilcbiAgICB9XG5cbiAgICB0aGlzW2tPbkNvbm5lY3Rpb25FcnJvcl0gPSAob3JpZ2luLCB0YXJnZXRzLCBlcnIpID0+IHtcbiAgICAgIHBvb2wuZW1pdCgnY29ubmVjdGlvbkVycm9yJywgb3JpZ2luLCBbcG9vbCwgLi4udGFyZ2V0c10sIGVycilcbiAgICB9XG5cbiAgICB0aGlzW2tTdGF0c10gPSBuZXcgUG9vbFN0YXRzKHRoaXMpXG4gIH1cblxuICBnZXQgW2tCdXN5XSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba05lZWREcmFpbl1cbiAgfVxuXG4gIGdldCBba0Nvbm5lY3RlZF0gKCkge1xuICAgIHJldHVybiB0aGlzW2tDbGllbnRzXS5maWx0ZXIoY2xpZW50ID0+IGNsaWVudFtrQ29ubmVjdGVkXSkubGVuZ3RoXG4gIH1cblxuICBnZXQgW2tGcmVlXSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0NsaWVudHNdLmZpbHRlcihjbGllbnQgPT4gY2xpZW50W2tDb25uZWN0ZWRdICYmICFjbGllbnRba05lZWREcmFpbl0pLmxlbmd0aFxuICB9XG5cbiAgZ2V0IFtrUGVuZGluZ10gKCkge1xuICAgIGxldCByZXQgPSB0aGlzW2tRdWV1ZWRdXG4gICAgZm9yIChjb25zdCB7IFtrUGVuZGluZ106IHBlbmRpbmcgfSBvZiB0aGlzW2tDbGllbnRzXSkge1xuICAgICAgcmV0ICs9IHBlbmRpbmdcbiAgICB9XG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgZ2V0IFtrUnVubmluZ10gKCkge1xuICAgIGxldCByZXQgPSAwXG4gICAgZm9yIChjb25zdCB7IFtrUnVubmluZ106IHJ1bm5pbmcgfSBvZiB0aGlzW2tDbGllbnRzXSkge1xuICAgICAgcmV0ICs9IHJ1bm5pbmdcbiAgICB9XG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgZ2V0IFtrU2l6ZV0gKCkge1xuICAgIGxldCByZXQgPSB0aGlzW2tRdWV1ZWRdXG4gICAgZm9yIChjb25zdCB7IFtrU2l6ZV06IHNpemUgfSBvZiB0aGlzW2tDbGllbnRzXSkge1xuICAgICAgcmV0ICs9IHNpemVcbiAgICB9XG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgZ2V0IHN0YXRzICgpIHtcbiAgICByZXR1cm4gdGhpc1trU3RhdHNdXG4gIH1cblxuICBhc3luYyBba0Nsb3NlXSAoKSB7XG4gICAgaWYgKHRoaXNba1F1ZXVlXS5pc0VtcHR5KCkpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLmFsbCh0aGlzW2tDbGllbnRzXS5tYXAoYyA9PiBjLmNsb3NlKCkpKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgdGhpc1trQ2xvc2VkUmVzb2x2ZV0gPSByZXNvbHZlXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIFtrRGVzdHJveV0gKGVycikge1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCBpdGVtID0gdGhpc1trUXVldWVdLnNoaWZ0KClcbiAgICAgIGlmICghaXRlbSkge1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgaXRlbS5oYW5kbGVyLm9uRXJyb3IoZXJyKVxuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLmFsbCh0aGlzW2tDbGllbnRzXS5tYXAoYyA9PiBjLmRlc3Ryb3koZXJyKSkpXG4gIH1cblxuICBba0Rpc3BhdGNoXSAob3B0cywgaGFuZGxlcikge1xuICAgIGNvbnN0IGRpc3BhdGNoZXIgPSB0aGlzW2tHZXREaXNwYXRjaGVyXSgpXG5cbiAgICBpZiAoIWRpc3BhdGNoZXIpIHtcbiAgICAgIHRoaXNba05lZWREcmFpbl0gPSB0cnVlXG4gICAgICB0aGlzW2tRdWV1ZV0ucHVzaCh7IG9wdHMsIGhhbmRsZXIgfSlcbiAgICAgIHRoaXNba1F1ZXVlZF0rK1xuICAgIH0gZWxzZSBpZiAoIWRpc3BhdGNoZXIuZGlzcGF0Y2gob3B0cywgaGFuZGxlcikpIHtcbiAgICAgIGRpc3BhdGNoZXJba05lZWREcmFpbl0gPSB0cnVlXG4gICAgICB0aGlzW2tOZWVkRHJhaW5dID0gIXRoaXNba0dldERpc3BhdGNoZXJdKClcbiAgICB9XG5cbiAgICByZXR1cm4gIXRoaXNba05lZWREcmFpbl1cbiAgfVxuXG4gIFtrQWRkQ2xpZW50XSAoY2xpZW50KSB7XG4gICAgY2xpZW50XG4gICAgICAub24oJ2RyYWluJywgdGhpc1trT25EcmFpbl0pXG4gICAgICAub24oJ2Nvbm5lY3QnLCB0aGlzW2tPbkNvbm5lY3RdKVxuICAgICAgLm9uKCdkaXNjb25uZWN0JywgdGhpc1trT25EaXNjb25uZWN0XSlcbiAgICAgIC5vbignY29ubmVjdGlvbkVycm9yJywgdGhpc1trT25Db25uZWN0aW9uRXJyb3JdKVxuXG4gICAgdGhpc1trQ2xpZW50c10ucHVzaChjbGllbnQpXG5cbiAgICBpZiAodGhpc1trTmVlZERyYWluXSkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzW2tOZWVkRHJhaW5dKSB7XG4gICAgICAgICAgdGhpc1trT25EcmFpbl0oY2xpZW50W2tVcmxdLCBbdGhpcywgY2xpZW50XSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgW2tSZW1vdmVDbGllbnRdIChjbGllbnQpIHtcbiAgICBjbGllbnQuY2xvc2UoKCkgPT4ge1xuICAgICAgY29uc3QgaWR4ID0gdGhpc1trQ2xpZW50c10uaW5kZXhPZihjbGllbnQpXG4gICAgICBpZiAoaWR4ICE9PSAtMSkge1xuICAgICAgICB0aGlzW2tDbGllbnRzXS5zcGxpY2UoaWR4LCAxKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICB0aGlzW2tOZWVkRHJhaW5dID0gdGhpc1trQ2xpZW50c10uc29tZShkaXNwYXRjaGVyID0+IChcbiAgICAgICFkaXNwYXRjaGVyW2tOZWVkRHJhaW5dICYmXG4gICAgICBkaXNwYXRjaGVyLmNsb3NlZCAhPT0gdHJ1ZSAmJlxuICAgICAgZGlzcGF0Y2hlci5kZXN0cm95ZWQgIT09IHRydWVcbiAgICApKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBQb29sQmFzZSxcbiAga0NsaWVudHMsXG4gIGtOZWVkRHJhaW4sXG4gIGtBZGRDbGllbnQsXG4gIGtSZW1vdmVDbGllbnQsXG4gIGtHZXREaXNwYXRjaGVyXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIFBvb2xCYXNlLFxuICBrQ2xpZW50cyxcbiAga05lZWREcmFpbixcbiAga0FkZENsaWVudCxcbiAga0dldERpc3BhdGNoZXJcbn0gPSByZXF1aXJlKCcuL3Bvb2wtYmFzZScpXG5jb25zdCBDbGllbnQgPSByZXF1aXJlKCcuL2NsaWVudCcpXG5jb25zdCB7XG4gIEludmFsaWRBcmd1bWVudEVycm9yXG59ID0gcmVxdWlyZSgnLi9jb3JlL2Vycm9ycycpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBrVXJsLCBrSW50ZXJjZXB0b3JzIH0gPSByZXF1aXJlKCcuL2NvcmUvc3ltYm9scycpXG5jb25zdCBidWlsZENvbm5lY3RvciA9IHJlcXVpcmUoJy4vY29yZS9jb25uZWN0JylcblxuY29uc3Qga09wdGlvbnMgPSBTeW1ib2woJ29wdGlvbnMnKVxuY29uc3Qga0Nvbm5lY3Rpb25zID0gU3ltYm9sKCdjb25uZWN0aW9ucycpXG5jb25zdCBrRmFjdG9yeSA9IFN5bWJvbCgnZmFjdG9yeScpXG5cbmZ1bmN0aW9uIGRlZmF1bHRGYWN0b3J5IChvcmlnaW4sIG9wdHMpIHtcbiAgcmV0dXJuIG5ldyBDbGllbnQob3JpZ2luLCBvcHRzKVxufVxuXG5jbGFzcyBQb29sIGV4dGVuZHMgUG9vbEJhc2Uge1xuICBjb25zdHJ1Y3RvciAob3JpZ2luLCB7XG4gICAgY29ubmVjdGlvbnMsXG4gICAgZmFjdG9yeSA9IGRlZmF1bHRGYWN0b3J5LFxuICAgIGNvbm5lY3QsXG4gICAgY29ubmVjdFRpbWVvdXQsXG4gICAgdGxzLFxuICAgIG1heENhY2hlZFNlc3Npb25zLFxuICAgIHNvY2tldFBhdGgsXG4gICAgYXV0b1NlbGVjdEZhbWlseSxcbiAgICBhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQsXG4gICAgYWxsb3dIMixcbiAgICAuLi5vcHRpb25zXG4gIH0gPSB7fSkge1xuICAgIHN1cGVyKClcblxuICAgIGlmIChjb25uZWN0aW9ucyAhPSBudWxsICYmICghTnVtYmVyLmlzRmluaXRlKGNvbm5lY3Rpb25zKSB8fCBjb25uZWN0aW9ucyA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY29ubmVjdGlvbnMnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZmFjdG9yeSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdmYWN0b3J5IG11c3QgYmUgYSBmdW5jdGlvbi4nKVxuICAgIH1cblxuICAgIGlmIChjb25uZWN0ICE9IG51bGwgJiYgdHlwZW9mIGNvbm5lY3QgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGNvbm5lY3QgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2Nvbm5lY3QgbXVzdCBiZSBhIGZ1bmN0aW9uIG9yIGFuIG9iamVjdCcpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjb25uZWN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25uZWN0ID0gYnVpbGRDb25uZWN0b3Ioe1xuICAgICAgICAuLi50bHMsXG4gICAgICAgIG1heENhY2hlZFNlc3Npb25zLFxuICAgICAgICBhbGxvd0gyLFxuICAgICAgICBzb2NrZXRQYXRoLFxuICAgICAgICB0aW1lb3V0OiBjb25uZWN0VGltZW91dCxcbiAgICAgICAgLi4uKHV0aWwubm9kZUhhc0F1dG9TZWxlY3RGYW1pbHkgJiYgYXV0b1NlbGVjdEZhbWlseSA/IHsgYXV0b1NlbGVjdEZhbWlseSwgYXV0b1NlbGVjdEZhbWlseUF0dGVtcHRUaW1lb3V0IH0gOiB1bmRlZmluZWQpLFxuICAgICAgICAuLi5jb25uZWN0XG4gICAgICB9KVxuICAgIH1cblxuICAgIHRoaXNba0ludGVyY2VwdG9yc10gPSBvcHRpb25zLmludGVyY2VwdG9ycyAmJiBvcHRpb25zLmludGVyY2VwdG9ycy5Qb29sICYmIEFycmF5LmlzQXJyYXkob3B0aW9ucy5pbnRlcmNlcHRvcnMuUG9vbClcbiAgICAgID8gb3B0aW9ucy5pbnRlcmNlcHRvcnMuUG9vbFxuICAgICAgOiBbXVxuICAgIHRoaXNba0Nvbm5lY3Rpb25zXSA9IGNvbm5lY3Rpb25zIHx8IG51bGxcbiAgICB0aGlzW2tVcmxdID0gdXRpbC5wYXJzZU9yaWdpbihvcmlnaW4pXG4gICAgdGhpc1trT3B0aW9uc10gPSB7IC4uLnV0aWwuZGVlcENsb25lKG9wdGlvbnMpLCBjb25uZWN0LCBhbGxvd0gyIH1cbiAgICB0aGlzW2tPcHRpb25zXS5pbnRlcmNlcHRvcnMgPSBvcHRpb25zLmludGVyY2VwdG9yc1xuICAgICAgPyB7IC4uLm9wdGlvbnMuaW50ZXJjZXB0b3JzIH1cbiAgICAgIDogdW5kZWZpbmVkXG4gICAgdGhpc1trRmFjdG9yeV0gPSBmYWN0b3J5XG4gIH1cblxuICBba0dldERpc3BhdGNoZXJdICgpIHtcbiAgICBsZXQgZGlzcGF0Y2hlciA9IHRoaXNba0NsaWVudHNdLmZpbmQoZGlzcGF0Y2hlciA9PiAhZGlzcGF0Y2hlcltrTmVlZERyYWluXSlcblxuICAgIGlmIChkaXNwYXRjaGVyKSB7XG4gICAgICByZXR1cm4gZGlzcGF0Y2hlclxuICAgIH1cblxuICAgIGlmICghdGhpc1trQ29ubmVjdGlvbnNdIHx8IHRoaXNba0NsaWVudHNdLmxlbmd0aCA8IHRoaXNba0Nvbm5lY3Rpb25zXSkge1xuICAgICAgZGlzcGF0Y2hlciA9IHRoaXNba0ZhY3RvcnldKHRoaXNba1VybF0sIHRoaXNba09wdGlvbnNdKVxuICAgICAgdGhpc1trQWRkQ2xpZW50XShkaXNwYXRjaGVyKVxuICAgIH1cblxuICAgIHJldHVybiBkaXNwYXRjaGVyXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBQb29sXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIEJhbGFuY2VkUG9vbE1pc3NpbmdVcHN0cmVhbUVycm9yLFxuICBJbnZhbGlkQXJndW1lbnRFcnJvclxufSA9IHJlcXVpcmUoJy4vY29yZS9lcnJvcnMnKVxuY29uc3Qge1xuICBQb29sQmFzZSxcbiAga0NsaWVudHMsXG4gIGtOZWVkRHJhaW4sXG4gIGtBZGRDbGllbnQsXG4gIGtSZW1vdmVDbGllbnQsXG4gIGtHZXREaXNwYXRjaGVyXG59ID0gcmVxdWlyZSgnLi9wb29sLWJhc2UnKVxuY29uc3QgUG9vbCA9IHJlcXVpcmUoJy4vcG9vbCcpXG5jb25zdCB7IGtVcmwsIGtJbnRlcmNlcHRvcnMgfSA9IHJlcXVpcmUoJy4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsgcGFyc2VPcmlnaW4gfSA9IHJlcXVpcmUoJy4vY29yZS91dGlsJylcbmNvbnN0IGtGYWN0b3J5ID0gU3ltYm9sKCdmYWN0b3J5JylcblxuY29uc3Qga09wdGlvbnMgPSBTeW1ib2woJ29wdGlvbnMnKVxuY29uc3Qga0dyZWF0ZXN0Q29tbW9uRGl2aXNvciA9IFN5bWJvbCgna0dyZWF0ZXN0Q29tbW9uRGl2aXNvcicpXG5jb25zdCBrQ3VycmVudFdlaWdodCA9IFN5bWJvbCgna0N1cnJlbnRXZWlnaHQnKVxuY29uc3Qga0luZGV4ID0gU3ltYm9sKCdrSW5kZXgnKVxuY29uc3Qga1dlaWdodCA9IFN5bWJvbCgna1dlaWdodCcpXG5jb25zdCBrTWF4V2VpZ2h0UGVyU2VydmVyID0gU3ltYm9sKCdrTWF4V2VpZ2h0UGVyU2VydmVyJylcbmNvbnN0IGtFcnJvclBlbmFsdHkgPSBTeW1ib2woJ2tFcnJvclBlbmFsdHknKVxuXG5mdW5jdGlvbiBnZXRHcmVhdGVzdENvbW1vbkRpdmlzb3IgKGEsIGIpIHtcbiAgaWYgKGIgPT09IDApIHJldHVybiBhXG4gIHJldHVybiBnZXRHcmVhdGVzdENvbW1vbkRpdmlzb3IoYiwgYSAlIGIpXG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRGYWN0b3J5IChvcmlnaW4sIG9wdHMpIHtcbiAgcmV0dXJuIG5ldyBQb29sKG9yaWdpbiwgb3B0cylcbn1cblxuY2xhc3MgQmFsYW5jZWRQb29sIGV4dGVuZHMgUG9vbEJhc2Uge1xuICBjb25zdHJ1Y3RvciAodXBzdHJlYW1zID0gW10sIHsgZmFjdG9yeSA9IGRlZmF1bHRGYWN0b3J5LCAuLi5vcHRzIH0gPSB7fSkge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXNba09wdGlvbnNdID0gb3B0c1xuICAgIHRoaXNba0luZGV4XSA9IC0xXG4gICAgdGhpc1trQ3VycmVudFdlaWdodF0gPSAwXG5cbiAgICB0aGlzW2tNYXhXZWlnaHRQZXJTZXJ2ZXJdID0gdGhpc1trT3B0aW9uc10ubWF4V2VpZ2h0UGVyU2VydmVyIHx8IDEwMFxuICAgIHRoaXNba0Vycm9yUGVuYWx0eV0gPSB0aGlzW2tPcHRpb25zXS5lcnJvclBlbmFsdHkgfHwgMTVcblxuICAgIGlmICghQXJyYXkuaXNBcnJheSh1cHN0cmVhbXMpKSB7XG4gICAgICB1cHN0cmVhbXMgPSBbdXBzdHJlYW1zXVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZmFjdG9yeSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdmYWN0b3J5IG11c3QgYmUgYSBmdW5jdGlvbi4nKVxuICAgIH1cblxuICAgIHRoaXNba0ludGVyY2VwdG9yc10gPSBvcHRzLmludGVyY2VwdG9ycyAmJiBvcHRzLmludGVyY2VwdG9ycy5CYWxhbmNlZFBvb2wgJiYgQXJyYXkuaXNBcnJheShvcHRzLmludGVyY2VwdG9ycy5CYWxhbmNlZFBvb2wpXG4gICAgICA/IG9wdHMuaW50ZXJjZXB0b3JzLkJhbGFuY2VkUG9vbFxuICAgICAgOiBbXVxuICAgIHRoaXNba0ZhY3RvcnldID0gZmFjdG9yeVxuXG4gICAgZm9yIChjb25zdCB1cHN0cmVhbSBvZiB1cHN0cmVhbXMpIHtcbiAgICAgIHRoaXMuYWRkVXBzdHJlYW0odXBzdHJlYW0pXG4gICAgfVxuICAgIHRoaXMuX3VwZGF0ZUJhbGFuY2VkUG9vbFN0YXRzKClcbiAgfVxuXG4gIGFkZFVwc3RyZWFtICh1cHN0cmVhbSkge1xuICAgIGNvbnN0IHVwc3RyZWFtT3JpZ2luID0gcGFyc2VPcmlnaW4odXBzdHJlYW0pLm9yaWdpblxuXG4gICAgaWYgKHRoaXNba0NsaWVudHNdLmZpbmQoKHBvb2wpID0+IChcbiAgICAgIHBvb2xba1VybF0ub3JpZ2luID09PSB1cHN0cmVhbU9yaWdpbiAmJlxuICAgICAgcG9vbC5jbG9zZWQgIT09IHRydWUgJiZcbiAgICAgIHBvb2wuZGVzdHJveWVkICE9PSB0cnVlXG4gICAgKSkpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuICAgIGNvbnN0IHBvb2wgPSB0aGlzW2tGYWN0b3J5XSh1cHN0cmVhbU9yaWdpbiwgT2JqZWN0LmFzc2lnbih7fSwgdGhpc1trT3B0aW9uc10pKVxuXG4gICAgdGhpc1trQWRkQ2xpZW50XShwb29sKVxuICAgIHBvb2wub24oJ2Nvbm5lY3QnLCAoKSA9PiB7XG4gICAgICBwb29sW2tXZWlnaHRdID0gTWF0aC5taW4odGhpc1trTWF4V2VpZ2h0UGVyU2VydmVyXSwgcG9vbFtrV2VpZ2h0XSArIHRoaXNba0Vycm9yUGVuYWx0eV0pXG4gICAgfSlcblxuICAgIHBvb2wub24oJ2Nvbm5lY3Rpb25FcnJvcicsICgpID0+IHtcbiAgICAgIHBvb2xba1dlaWdodF0gPSBNYXRoLm1heCgxLCBwb29sW2tXZWlnaHRdIC0gdGhpc1trRXJyb3JQZW5hbHR5XSlcbiAgICAgIHRoaXMuX3VwZGF0ZUJhbGFuY2VkUG9vbFN0YXRzKClcbiAgICB9KVxuXG4gICAgcG9vbC5vbignZGlzY29ubmVjdCcsICguLi5hcmdzKSA9PiB7XG4gICAgICBjb25zdCBlcnIgPSBhcmdzWzJdXG4gICAgICBpZiAoZXJyICYmIGVyci5jb2RlID09PSAnVU5EX0VSUl9TT0NLRVQnKSB7XG4gICAgICAgIC8vIGRlY3JlYXNlIHRoZSB3ZWlnaHQgb2YgdGhlIHBvb2wuXG4gICAgICAgIHBvb2xba1dlaWdodF0gPSBNYXRoLm1heCgxLCBwb29sW2tXZWlnaHRdIC0gdGhpc1trRXJyb3JQZW5hbHR5XSlcbiAgICAgICAgdGhpcy5fdXBkYXRlQmFsYW5jZWRQb29sU3RhdHMoKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBmb3IgKGNvbnN0IGNsaWVudCBvZiB0aGlzW2tDbGllbnRzXSkge1xuICAgICAgY2xpZW50W2tXZWlnaHRdID0gdGhpc1trTWF4V2VpZ2h0UGVyU2VydmVyXVxuICAgIH1cblxuICAgIHRoaXMuX3VwZGF0ZUJhbGFuY2VkUG9vbFN0YXRzKClcblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBfdXBkYXRlQmFsYW5jZWRQb29sU3RhdHMgKCkge1xuICAgIHRoaXNba0dyZWF0ZXN0Q29tbW9uRGl2aXNvcl0gPSB0aGlzW2tDbGllbnRzXS5tYXAocCA9PiBwW2tXZWlnaHRdKS5yZWR1Y2UoZ2V0R3JlYXRlc3RDb21tb25EaXZpc29yLCAwKVxuICB9XG5cbiAgcmVtb3ZlVXBzdHJlYW0gKHVwc3RyZWFtKSB7XG4gICAgY29uc3QgdXBzdHJlYW1PcmlnaW4gPSBwYXJzZU9yaWdpbih1cHN0cmVhbSkub3JpZ2luXG5cbiAgICBjb25zdCBwb29sID0gdGhpc1trQ2xpZW50c10uZmluZCgocG9vbCkgPT4gKFxuICAgICAgcG9vbFtrVXJsXS5vcmlnaW4gPT09IHVwc3RyZWFtT3JpZ2luICYmXG4gICAgICBwb29sLmNsb3NlZCAhPT0gdHJ1ZSAmJlxuICAgICAgcG9vbC5kZXN0cm95ZWQgIT09IHRydWVcbiAgICApKVxuXG4gICAgaWYgKHBvb2wpIHtcbiAgICAgIHRoaXNba1JlbW92ZUNsaWVudF0ocG9vbClcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgZ2V0IHVwc3RyZWFtcyAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0NsaWVudHNdXG4gICAgICAuZmlsdGVyKGRpc3BhdGNoZXIgPT4gZGlzcGF0Y2hlci5jbG9zZWQgIT09IHRydWUgJiYgZGlzcGF0Y2hlci5kZXN0cm95ZWQgIT09IHRydWUpXG4gICAgICAubWFwKChwKSA9PiBwW2tVcmxdLm9yaWdpbilcbiAgfVxuXG4gIFtrR2V0RGlzcGF0Y2hlcl0gKCkge1xuICAgIC8vIFdlIHZhbGlkYXRlIHRoYXQgcG9vbHMgaXMgZ3JlYXRlciB0aGFuIDAsXG4gICAgLy8gb3RoZXJ3aXNlIHdlIHdvdWxkIGhhdmUgdG8gd2FpdCB1bnRpbCBhbiB1cHN0cmVhbVxuICAgIC8vIGlzIGFkZGVkLCB3aGljaCBtaWdodCBuZXZlciBoYXBwZW4uXG4gICAgaWYgKHRoaXNba0NsaWVudHNdLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEJhbGFuY2VkUG9vbE1pc3NpbmdVcHN0cmVhbUVycm9yKClcbiAgICB9XG5cbiAgICBjb25zdCBkaXNwYXRjaGVyID0gdGhpc1trQ2xpZW50c10uZmluZChkaXNwYXRjaGVyID0+IChcbiAgICAgICFkaXNwYXRjaGVyW2tOZWVkRHJhaW5dICYmXG4gICAgICBkaXNwYXRjaGVyLmNsb3NlZCAhPT0gdHJ1ZSAmJlxuICAgICAgZGlzcGF0Y2hlci5kZXN0cm95ZWQgIT09IHRydWVcbiAgICApKVxuXG4gICAgaWYgKCFkaXNwYXRjaGVyKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBhbGxDbGllbnRzQnVzeSA9IHRoaXNba0NsaWVudHNdLm1hcChwb29sID0+IHBvb2xba05lZWREcmFpbl0pLnJlZHVjZSgoYSwgYikgPT4gYSAmJiBiLCB0cnVlKVxuXG4gICAgaWYgKGFsbENsaWVudHNCdXN5KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBsZXQgY291bnRlciA9IDBcblxuICAgIGxldCBtYXhXZWlnaHRJbmRleCA9IHRoaXNba0NsaWVudHNdLmZpbmRJbmRleChwb29sID0+ICFwb29sW2tOZWVkRHJhaW5dKVxuXG4gICAgd2hpbGUgKGNvdW50ZXIrKyA8IHRoaXNba0NsaWVudHNdLmxlbmd0aCkge1xuICAgICAgdGhpc1trSW5kZXhdID0gKHRoaXNba0luZGV4XSArIDEpICUgdGhpc1trQ2xpZW50c10ubGVuZ3RoXG4gICAgICBjb25zdCBwb29sID0gdGhpc1trQ2xpZW50c11bdGhpc1trSW5kZXhdXVxuXG4gICAgICAvLyBmaW5kIHBvb2wgaW5kZXggd2l0aCB0aGUgbGFyZ2VzdCB3ZWlnaHRcbiAgICAgIGlmIChwb29sW2tXZWlnaHRdID4gdGhpc1trQ2xpZW50c11bbWF4V2VpZ2h0SW5kZXhdW2tXZWlnaHRdICYmICFwb29sW2tOZWVkRHJhaW5dKSB7XG4gICAgICAgIG1heFdlaWdodEluZGV4ID0gdGhpc1trSW5kZXhdXG4gICAgICB9XG5cbiAgICAgIC8vIGRlY3JlYXNlIHRoZSBjdXJyZW50IHdlaWdodCBldmVyeSBgdGhpc1trQ2xpZW50c10ubGVuZ3RoYC5cbiAgICAgIGlmICh0aGlzW2tJbmRleF0gPT09IDApIHtcbiAgICAgICAgLy8gU2V0IHRoZSBjdXJyZW50IHdlaWdodCB0byB0aGUgbmV4dCBsb3dlciB3ZWlnaHQuXG4gICAgICAgIHRoaXNba0N1cnJlbnRXZWlnaHRdID0gdGhpc1trQ3VycmVudFdlaWdodF0gLSB0aGlzW2tHcmVhdGVzdENvbW1vbkRpdmlzb3JdXG5cbiAgICAgICAgaWYgKHRoaXNba0N1cnJlbnRXZWlnaHRdIDw9IDApIHtcbiAgICAgICAgICB0aGlzW2tDdXJyZW50V2VpZ2h0XSA9IHRoaXNba01heFdlaWdodFBlclNlcnZlcl1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHBvb2xba1dlaWdodF0gPj0gdGhpc1trQ3VycmVudFdlaWdodF0gJiYgKCFwb29sW2tOZWVkRHJhaW5dKSkge1xuICAgICAgICByZXR1cm4gcG9vbFxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXNba0N1cnJlbnRXZWlnaHRdID0gdGhpc1trQ2xpZW50c11bbWF4V2VpZ2h0SW5kZXhdW2tXZWlnaHRdXG4gICAgdGhpc1trSW5kZXhdID0gbWF4V2VpZ2h0SW5kZXhcbiAgICByZXR1cm4gdGhpc1trQ2xpZW50c11bbWF4V2VpZ2h0SW5kZXhdXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBCYWxhbmNlZFBvb2xcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBmaWxlOiBvbmx5IGZvciBOb2RlIDEyICovXG5cbmNvbnN0IHsga0Nvbm5lY3RlZCwga1NpemUgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5cbmNsYXNzIENvbXBhdFdlYWtSZWYge1xuICBjb25zdHJ1Y3RvciAodmFsdWUpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWVcbiAgfVxuXG4gIGRlcmVmICgpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZVtrQ29ubmVjdGVkXSA9PT0gMCAmJiB0aGlzLnZhbHVlW2tTaXplXSA9PT0gMFxuICAgICAgPyB1bmRlZmluZWRcbiAgICAgIDogdGhpcy52YWx1ZVxuICB9XG59XG5cbmNsYXNzIENvbXBhdEZpbmFsaXplciB7XG4gIGNvbnN0cnVjdG9yIChmaW5hbGl6ZXIpIHtcbiAgICB0aGlzLmZpbmFsaXplciA9IGZpbmFsaXplclxuICB9XG5cbiAgcmVnaXN0ZXIgKGRpc3BhdGNoZXIsIGtleSkge1xuICAgIGlmIChkaXNwYXRjaGVyLm9uKSB7XG4gICAgICBkaXNwYXRjaGVyLm9uKCdkaXNjb25uZWN0JywgKCkgPT4ge1xuICAgICAgICBpZiAoZGlzcGF0Y2hlcltrQ29ubmVjdGVkXSA9PT0gMCAmJiBkaXNwYXRjaGVyW2tTaXplXSA9PT0gMCkge1xuICAgICAgICAgIHRoaXMuZmluYWxpemVyKGtleSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIEZJWE1FOiByZW1vdmUgd29ya2Fyb3VuZCB3aGVuIHRoZSBOb2RlIGJ1ZyBpcyBmaXhlZFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvaXNzdWVzLzQ5MzQ0I2lzc3VlY29tbWVudC0xNzQxNzc2MzA4XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX1Y4X0NPVkVSQUdFKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFdlYWtSZWY6IENvbXBhdFdlYWtSZWYsXG4gICAgICBGaW5hbGl6YXRpb25SZWdpc3RyeTogQ29tcGF0RmluYWxpemVyXG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgV2Vha1JlZjogZ2xvYmFsLldlYWtSZWYgfHwgQ29tcGF0V2Vha1JlZixcbiAgICBGaW5hbGl6YXRpb25SZWdpc3RyeTogZ2xvYmFsLkZpbmFsaXphdGlvblJlZ2lzdHJ5IHx8IENvbXBhdEZpbmFsaXplclxuICB9XG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gPSByZXF1aXJlKCcuL2NvcmUvZXJyb3JzJylcbmNvbnN0IHsga0NsaWVudHMsIGtSdW5uaW5nLCBrQ2xvc2UsIGtEZXN0cm95LCBrRGlzcGF0Y2gsIGtJbnRlcmNlcHRvcnMgfSA9IHJlcXVpcmUoJy4vY29yZS9zeW1ib2xzJylcbmNvbnN0IERpc3BhdGNoZXJCYXNlID0gcmVxdWlyZSgnLi9kaXNwYXRjaGVyLWJhc2UnKVxuY29uc3QgUG9vbCA9IHJlcXVpcmUoJy4vcG9vbCcpXG5jb25zdCBDbGllbnQgPSByZXF1aXJlKCcuL2NsaWVudCcpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi9jb3JlL3V0aWwnKVxuY29uc3QgY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvciA9IHJlcXVpcmUoJy4vaW50ZXJjZXB0b3IvcmVkaXJlY3RJbnRlcmNlcHRvcicpXG5jb25zdCB7IFdlYWtSZWYsIEZpbmFsaXphdGlvblJlZ2lzdHJ5IH0gPSByZXF1aXJlKCcuL2NvbXBhdC9kaXNwYXRjaGVyLXdlYWtyZWYnKSgpXG5cbmNvbnN0IGtPbkNvbm5lY3QgPSBTeW1ib2woJ29uQ29ubmVjdCcpXG5jb25zdCBrT25EaXNjb25uZWN0ID0gU3ltYm9sKCdvbkRpc2Nvbm5lY3QnKVxuY29uc3Qga09uQ29ubmVjdGlvbkVycm9yID0gU3ltYm9sKCdvbkNvbm5lY3Rpb25FcnJvcicpXG5jb25zdCBrTWF4UmVkaXJlY3Rpb25zID0gU3ltYm9sKCdtYXhSZWRpcmVjdGlvbnMnKVxuY29uc3Qga09uRHJhaW4gPSBTeW1ib2woJ29uRHJhaW4nKVxuY29uc3Qga0ZhY3RvcnkgPSBTeW1ib2woJ2ZhY3RvcnknKVxuY29uc3Qga0ZpbmFsaXplciA9IFN5bWJvbCgnZmluYWxpemVyJylcbmNvbnN0IGtPcHRpb25zID0gU3ltYm9sKCdvcHRpb25zJylcblxuZnVuY3Rpb24gZGVmYXVsdEZhY3RvcnkgKG9yaWdpbiwgb3B0cykge1xuICByZXR1cm4gb3B0cyAmJiBvcHRzLmNvbm5lY3Rpb25zID09PSAxXG4gICAgPyBuZXcgQ2xpZW50KG9yaWdpbiwgb3B0cylcbiAgICA6IG5ldyBQb29sKG9yaWdpbiwgb3B0cylcbn1cblxuY2xhc3MgQWdlbnQgZXh0ZW5kcyBEaXNwYXRjaGVyQmFzZSB7XG4gIGNvbnN0cnVjdG9yICh7IGZhY3RvcnkgPSBkZWZhdWx0RmFjdG9yeSwgbWF4UmVkaXJlY3Rpb25zID0gMCwgY29ubmVjdCwgLi4ub3B0aW9ucyB9ID0ge30pIHtcbiAgICBzdXBlcigpXG5cbiAgICBpZiAodHlwZW9mIGZhY3RvcnkgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignZmFjdG9yeSBtdXN0IGJlIGEgZnVuY3Rpb24uJylcbiAgICB9XG5cbiAgICBpZiAoY29ubmVjdCAhPSBudWxsICYmIHR5cGVvZiBjb25uZWN0ICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBjb25uZWN0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdjb25uZWN0IG11c3QgYmUgYSBmdW5jdGlvbiBvciBhbiBvYmplY3QnKVxuICAgIH1cblxuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihtYXhSZWRpcmVjdGlvbnMpIHx8IG1heFJlZGlyZWN0aW9ucyA8IDApIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignbWF4UmVkaXJlY3Rpb25zIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKVxuICAgIH1cblxuICAgIGlmIChjb25uZWN0ICYmIHR5cGVvZiBjb25uZWN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25uZWN0ID0geyAuLi5jb25uZWN0IH1cbiAgICB9XG5cbiAgICB0aGlzW2tJbnRlcmNlcHRvcnNdID0gb3B0aW9ucy5pbnRlcmNlcHRvcnMgJiYgb3B0aW9ucy5pbnRlcmNlcHRvcnMuQWdlbnQgJiYgQXJyYXkuaXNBcnJheShvcHRpb25zLmludGVyY2VwdG9ycy5BZ2VudClcbiAgICAgID8gb3B0aW9ucy5pbnRlcmNlcHRvcnMuQWdlbnRcbiAgICAgIDogW2NyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3IoeyBtYXhSZWRpcmVjdGlvbnMgfSldXG5cbiAgICB0aGlzW2tPcHRpb25zXSA9IHsgLi4udXRpbC5kZWVwQ2xvbmUob3B0aW9ucyksIGNvbm5lY3QgfVxuICAgIHRoaXNba09wdGlvbnNdLmludGVyY2VwdG9ycyA9IG9wdGlvbnMuaW50ZXJjZXB0b3JzXG4gICAgICA/IHsgLi4ub3B0aW9ucy5pbnRlcmNlcHRvcnMgfVxuICAgICAgOiB1bmRlZmluZWRcbiAgICB0aGlzW2tNYXhSZWRpcmVjdGlvbnNdID0gbWF4UmVkaXJlY3Rpb25zXG4gICAgdGhpc1trRmFjdG9yeV0gPSBmYWN0b3J5XG4gICAgdGhpc1trQ2xpZW50c10gPSBuZXcgTWFwKClcbiAgICB0aGlzW2tGaW5hbGl6ZXJdID0gbmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBnYyBpcyB1bmRldGVybWluaXN0aWMgKi8ga2V5ID0+IHtcbiAgICAgIGNvbnN0IHJlZiA9IHRoaXNba0NsaWVudHNdLmdldChrZXkpXG4gICAgICBpZiAocmVmICE9PSB1bmRlZmluZWQgJiYgcmVmLmRlcmVmKCkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzW2tDbGllbnRzXS5kZWxldGUoa2V5KVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBjb25zdCBhZ2VudCA9IHRoaXNcblxuICAgIHRoaXNba09uRHJhaW5dID0gKG9yaWdpbiwgdGFyZ2V0cykgPT4ge1xuICAgICAgYWdlbnQuZW1pdCgnZHJhaW4nLCBvcmlnaW4sIFthZ2VudCwgLi4udGFyZ2V0c10pXG4gICAgfVxuXG4gICAgdGhpc1trT25Db25uZWN0XSA9IChvcmlnaW4sIHRhcmdldHMpID0+IHtcbiAgICAgIGFnZW50LmVtaXQoJ2Nvbm5lY3QnLCBvcmlnaW4sIFthZ2VudCwgLi4udGFyZ2V0c10pXG4gICAgfVxuXG4gICAgdGhpc1trT25EaXNjb25uZWN0XSA9IChvcmlnaW4sIHRhcmdldHMsIGVycikgPT4ge1xuICAgICAgYWdlbnQuZW1pdCgnZGlzY29ubmVjdCcsIG9yaWdpbiwgW2FnZW50LCAuLi50YXJnZXRzXSwgZXJyKVxuICAgIH1cblxuICAgIHRoaXNba09uQ29ubmVjdGlvbkVycm9yXSA9IChvcmlnaW4sIHRhcmdldHMsIGVycikgPT4ge1xuICAgICAgYWdlbnQuZW1pdCgnY29ubmVjdGlvbkVycm9yJywgb3JpZ2luLCBbYWdlbnQsIC4uLnRhcmdldHNdLCBlcnIpXG4gICAgfVxuICB9XG5cbiAgZ2V0IFtrUnVubmluZ10gKCkge1xuICAgIGxldCByZXQgPSAwXG4gICAgZm9yIChjb25zdCByZWYgb2YgdGhpc1trQ2xpZW50c10udmFsdWVzKCkpIHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IHJlZi5kZXJlZigpXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogZ2MgaXMgdW5kZXRlcm1pbmlzdGljICovXG4gICAgICBpZiAoY2xpZW50KSB7XG4gICAgICAgIHJldCArPSBjbGllbnRba1J1bm5pbmddXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXRcbiAgfVxuXG4gIFtrRGlzcGF0Y2hdIChvcHRzLCBoYW5kbGVyKSB7XG4gICAgbGV0IGtleVxuICAgIGlmIChvcHRzLm9yaWdpbiAmJiAodHlwZW9mIG9wdHMub3JpZ2luID09PSAnc3RyaW5nJyB8fCBvcHRzLm9yaWdpbiBpbnN0YW5jZW9mIFVSTCkpIHtcbiAgICAgIGtleSA9IFN0cmluZyhvcHRzLm9yaWdpbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdvcHRzLm9yaWdpbiBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyBvciBVUkwuJylcbiAgICB9XG5cbiAgICBjb25zdCByZWYgPSB0aGlzW2tDbGllbnRzXS5nZXQoa2V5KVxuXG4gICAgbGV0IGRpc3BhdGNoZXIgPSByZWYgPyByZWYuZGVyZWYoKSA6IG51bGxcbiAgICBpZiAoIWRpc3BhdGNoZXIpIHtcbiAgICAgIGRpc3BhdGNoZXIgPSB0aGlzW2tGYWN0b3J5XShvcHRzLm9yaWdpbiwgdGhpc1trT3B0aW9uc10pXG4gICAgICAgIC5vbignZHJhaW4nLCB0aGlzW2tPbkRyYWluXSlcbiAgICAgICAgLm9uKCdjb25uZWN0JywgdGhpc1trT25Db25uZWN0XSlcbiAgICAgICAgLm9uKCdkaXNjb25uZWN0JywgdGhpc1trT25EaXNjb25uZWN0XSlcbiAgICAgICAgLm9uKCdjb25uZWN0aW9uRXJyb3InLCB0aGlzW2tPbkNvbm5lY3Rpb25FcnJvcl0pXG5cbiAgICAgIHRoaXNba0NsaWVudHNdLnNldChrZXksIG5ldyBXZWFrUmVmKGRpc3BhdGNoZXIpKVxuICAgICAgdGhpc1trRmluYWxpemVyXS5yZWdpc3RlcihkaXNwYXRjaGVyLCBrZXkpXG4gICAgfVxuXG4gICAgcmV0dXJuIGRpc3BhdGNoZXIuZGlzcGF0Y2gob3B0cywgaGFuZGxlcilcbiAgfVxuXG4gIGFzeW5jIFtrQ2xvc2VdICgpIHtcbiAgICBjb25zdCBjbG9zZVByb21pc2VzID0gW11cbiAgICBmb3IgKGNvbnN0IHJlZiBvZiB0aGlzW2tDbGllbnRzXS52YWx1ZXMoKSkge1xuICAgICAgY29uc3QgY2xpZW50ID0gcmVmLmRlcmVmKClcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBnYyBpcyB1bmRldGVybWluaXN0aWMgKi9cbiAgICAgIGlmIChjbGllbnQpIHtcbiAgICAgICAgY2xvc2VQcm9taXNlcy5wdXNoKGNsaWVudC5jbG9zZSgpKVxuICAgICAgfVxuICAgIH1cblxuICAgIGF3YWl0IFByb21pc2UuYWxsKGNsb3NlUHJvbWlzZXMpXG4gIH1cblxuICBhc3luYyBba0Rlc3Ryb3ldIChlcnIpIHtcbiAgICBjb25zdCBkZXN0cm95UHJvbWlzZXMgPSBbXVxuICAgIGZvciAoY29uc3QgcmVmIG9mIHRoaXNba0NsaWVudHNdLnZhbHVlcygpKSB7XG4gICAgICBjb25zdCBjbGllbnQgPSByZWYuZGVyZWYoKVxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2U6IGdjIGlzIHVuZGV0ZXJtaW5pc3RpYyAqL1xuICAgICAgaWYgKGNsaWVudCkge1xuICAgICAgICBkZXN0cm95UHJvbWlzZXMucHVzaChjbGllbnQuZGVzdHJveShlcnIpKVxuICAgICAgfVxuICAgIH1cblxuICAgIGF3YWl0IFByb21pc2UuYWxsKGRlc3Ryb3lQcm9taXNlcylcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEFnZW50XG4iLAogICAgIi8vIFBvcnRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL3B1bGwvOTA3XG5cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBSZWFkYWJsZSB9ID0gcmVxdWlyZSgnc3RyZWFtJylcbmNvbnN0IHsgUmVxdWVzdEFib3J0ZWRFcnJvciwgTm90U3VwcG9ydGVkRXJyb3IsIEludmFsaWRBcmd1bWVudEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgUmVhZGFibGVTdHJlYW1Gcm9tLCB0b1VTVlN0cmluZyB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcblxubGV0IEJsb2JcblxuY29uc3Qga0NvbnN1bWUgPSBTeW1ib2woJ2tDb25zdW1lJylcbmNvbnN0IGtSZWFkaW5nID0gU3ltYm9sKCdrUmVhZGluZycpXG5jb25zdCBrQm9keSA9IFN5bWJvbCgna0JvZHknKVxuY29uc3Qga0Fib3J0ID0gU3ltYm9sKCdhYm9ydCcpXG5jb25zdCBrQ29udGVudFR5cGUgPSBTeW1ib2woJ2tDb250ZW50VHlwZScpXG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7fVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIEJvZHlSZWFkYWJsZSBleHRlbmRzIFJlYWRhYmxlIHtcbiAgY29uc3RydWN0b3IgKHtcbiAgICByZXN1bWUsXG4gICAgYWJvcnQsXG4gICAgY29udGVudFR5cGUgPSAnJyxcbiAgICBoaWdoV2F0ZXJNYXJrID0gNjQgKiAxMDI0IC8vIFNhbWUgYXMgbm9kZWpzIGZzIHN0cmVhbXMuXG4gIH0pIHtcbiAgICBzdXBlcih7XG4gICAgICBhdXRvRGVzdHJveTogdHJ1ZSxcbiAgICAgIHJlYWQ6IHJlc3VtZSxcbiAgICAgIGhpZ2hXYXRlck1hcmtcbiAgICB9KVxuXG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5kYXRhRW1pdHRlZCA9IGZhbHNlXG5cbiAgICB0aGlzW2tBYm9ydF0gPSBhYm9ydFxuICAgIHRoaXNba0NvbnN1bWVdID0gbnVsbFxuICAgIHRoaXNba0JvZHldID0gbnVsbFxuICAgIHRoaXNba0NvbnRlbnRUeXBlXSA9IGNvbnRlbnRUeXBlXG5cbiAgICAvLyBJcyBzdHJlYW0gYmVpbmcgY29uc3VtZWQgdGhyb3VnaCBSZWFkYWJsZSBBUEk/XG4gICAgLy8gVGhpcyBpcyBhbiBvcHRpbWl6YXRpb24gc28gdGhhdCB3ZSBhdm9pZCBjaGVja2luZ1xuICAgIC8vIGZvciAnZGF0YScgYW5kICdyZWFkYWJsZScgbGlzdGVuZXJzIGluIHRoZSBob3QgcGF0aFxuICAgIC8vIGluc2lkZSBwdXNoKCkuXG4gICAgdGhpc1trUmVhZGluZ10gPSBmYWxzZVxuICB9XG5cbiAgZGVzdHJveSAoZXJyKSB7XG4gICAgaWYgKHRoaXMuZGVzdHJveWVkKSB7XG4gICAgICAvLyBOb2RlIDwgMTZcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuXG4gICAgaWYgKCFlcnIgJiYgIXRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCkge1xuICAgICAgZXJyID0gbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgIH1cblxuICAgIGlmIChlcnIpIHtcbiAgICAgIHRoaXNba0Fib3J0XSgpXG4gICAgfVxuXG4gICAgcmV0dXJuIHN1cGVyLmRlc3Ryb3koZXJyKVxuICB9XG5cbiAgZW1pdCAoZXYsIC4uLmFyZ3MpIHtcbiAgICBpZiAoZXYgPT09ICdkYXRhJykge1xuICAgICAgLy8gTm9kZSA8IDE2LjdcbiAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGF0YUVtaXR0ZWQgPSB0cnVlXG4gICAgfSBlbHNlIGlmIChldiA9PT0gJ2Vycm9yJykge1xuICAgICAgLy8gTm9kZSA8IDE2XG4gICAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmVycm9yRW1pdHRlZCA9IHRydWVcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLmVtaXQoZXYsIC4uLmFyZ3MpXG4gIH1cblxuICBvbiAoZXYsIC4uLmFyZ3MpIHtcbiAgICBpZiAoZXYgPT09ICdkYXRhJyB8fCBldiA9PT0gJ3JlYWRhYmxlJykge1xuICAgICAgdGhpc1trUmVhZGluZ10gPSB0cnVlXG4gICAgfVxuICAgIHJldHVybiBzdXBlci5vbihldiwgLi4uYXJncylcbiAgfVxuXG4gIGFkZExpc3RlbmVyIChldiwgLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLm9uKGV2LCAuLi5hcmdzKVxuICB9XG5cbiAgb2ZmIChldiwgLi4uYXJncykge1xuICAgIGNvbnN0IHJldCA9IHN1cGVyLm9mZihldiwgLi4uYXJncylcbiAgICBpZiAoZXYgPT09ICdkYXRhJyB8fCBldiA9PT0gJ3JlYWRhYmxlJykge1xuICAgICAgdGhpc1trUmVhZGluZ10gPSAoXG4gICAgICAgIHRoaXMubGlzdGVuZXJDb3VudCgnZGF0YScpID4gMCB8fFxuICAgICAgICB0aGlzLmxpc3RlbmVyQ291bnQoJ3JlYWRhYmxlJykgPiAwXG4gICAgICApXG4gICAgfVxuICAgIHJldHVybiByZXRcbiAgfVxuXG4gIHJlbW92ZUxpc3RlbmVyIChldiwgLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLm9mZihldiwgLi4uYXJncylcbiAgfVxuXG4gIHB1c2ggKGNodW5rKSB7XG4gICAgaWYgKHRoaXNba0NvbnN1bWVdICYmIGNodW5rICE9PSBudWxsICYmIHRoaXMucmVhZGFibGVMZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnN1bWVQdXNoKHRoaXNba0NvbnN1bWVdLCBjaHVuaylcbiAgICAgIHJldHVybiB0aGlzW2tSZWFkaW5nXSA/IHN1cGVyLnB1c2goY2h1bmspIDogdHJ1ZVxuICAgIH1cbiAgICByZXR1cm4gc3VwZXIucHVzaChjaHVuaylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS10ZXh0XG4gIGFzeW5jIHRleHQgKCkge1xuICAgIHJldHVybiBjb25zdW1lKHRoaXMsICd0ZXh0JylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS1qc29uXG4gIGFzeW5jIGpzb24gKCkge1xuICAgIHJldHVybiBjb25zdW1lKHRoaXMsICdqc29uJylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS1ibG9iXG4gIGFzeW5jIGJsb2IgKCkge1xuICAgIHJldHVybiBjb25zdW1lKHRoaXMsICdibG9iJylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS1hcnJheWJ1ZmZlclxuICBhc3luYyBhcnJheUJ1ZmZlciAoKSB7XG4gICAgcmV0dXJuIGNvbnN1bWUodGhpcywgJ2FycmF5QnVmZmVyJylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS1mb3JtZGF0YVxuICBhc3luYyBmb3JtRGF0YSAoKSB7XG4gICAgLy8gVE9ETzogSW1wbGVtZW50LlxuICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWRFcnJvcigpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWJvZHktYm9keXVzZWRcbiAgZ2V0IGJvZHlVc2VkICgpIHtcbiAgICByZXR1cm4gdXRpbC5pc0Rpc3R1cmJlZCh0aGlzKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1ib2R5LWJvZHlcbiAgZ2V0IGJvZHkgKCkge1xuICAgIGlmICghdGhpc1trQm9keV0pIHtcbiAgICAgIHRoaXNba0JvZHldID0gUmVhZGFibGVTdHJlYW1Gcm9tKHRoaXMpXG4gICAgICBpZiAodGhpc1trQ29uc3VtZV0pIHtcbiAgICAgICAgLy8gVE9ETzogSXMgdGhpcyB0aGUgYmVzdCB3YXkgdG8gZm9yY2UgYSBsb2NrP1xuICAgICAgICB0aGlzW2tCb2R5XS5nZXRSZWFkZXIoKSAvLyBFbnN1cmUgc3RyZWFtIGlzIGxvY2tlZC5cbiAgICAgICAgYXNzZXJ0KHRoaXNba0JvZHldLmxvY2tlZClcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXNba0JvZHldXG4gIH1cblxuICBkdW1wIChvcHRzKSB7XG4gICAgbGV0IGxpbWl0ID0gb3B0cyAmJiBOdW1iZXIuaXNGaW5pdGUob3B0cy5saW1pdCkgPyBvcHRzLmxpbWl0IDogMjYyMTQ0XG4gICAgY29uc3Qgc2lnbmFsID0gb3B0cyAmJiBvcHRzLnNpZ25hbFxuXG4gICAgaWYgKHNpZ25hbCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBzaWduYWwgIT09ICdvYmplY3QnIHx8ICEoJ2Fib3J0ZWQnIGluIHNpZ25hbCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3NpZ25hbCBtdXN0IGJlIGFuIEFib3J0U2lnbmFsJylcbiAgICAgICAgfVxuICAgICAgICB1dGlsLnRocm93SWZBYm9ydGVkKHNpZ25hbClcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBzaWduYWxMaXN0ZW5lckNsZWFudXAgPSBzaWduYWxcbiAgICAgICAgPyB1dGlsLmFkZEFib3J0TGlzdGVuZXIoc2lnbmFsLCAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5kZXN0cm95KClcbiAgICAgICAgfSlcbiAgICAgICAgOiBub29wXG5cbiAgICAgIHRoaXNcbiAgICAgICAgLm9uKCdjbG9zZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBzaWduYWxMaXN0ZW5lckNsZWFudXAoKVxuICAgICAgICAgIGlmIChzaWduYWwgJiYgc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgICAgIHJlamVjdChzaWduYWwucmVhc29uIHx8IE9iamVjdC5hc3NpZ24obmV3IEVycm9yKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkJyksIHsgbmFtZTogJ0Fib3J0RXJyb3InIH0pKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNvbHZlKG51bGwpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAub24oJ2Vycm9yJywgbm9vcClcbiAgICAgICAgLm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7XG4gICAgICAgICAgbGltaXQgLT0gY2h1bmsubGVuZ3RoXG4gICAgICAgICAgaWYgKGxpbWl0IDw9IDApIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdHJveSgpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAucmVzdW1lKClcbiAgICB9KVxuICB9XG59XG5cbi8vIGh0dHBzOi8vc3RyZWFtcy5zcGVjLndoYXR3Zy5vcmcvI3JlYWRhYmxlc3RyZWFtLWxvY2tlZFxuZnVuY3Rpb24gaXNMb2NrZWQgKHNlbGYpIHtcbiAgLy8gQ29uc3VtZSBpcyBhbiBpbXBsaWNpdCBsb2NrLlxuICByZXR1cm4gKHNlbGZba0JvZHldICYmIHNlbGZba0JvZHldLmxvY2tlZCA9PT0gdHJ1ZSkgfHwgc2VsZltrQ29uc3VtZV1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2JvZHktdW51c2FibGVcbmZ1bmN0aW9uIGlzVW51c2FibGUgKHNlbGYpIHtcbiAgcmV0dXJuIHV0aWwuaXNEaXN0dXJiZWQoc2VsZikgfHwgaXNMb2NrZWQoc2VsZilcbn1cblxuYXN5bmMgZnVuY3Rpb24gY29uc3VtZSAoc3RyZWFtLCB0eXBlKSB7XG4gIGlmIChpc1VudXNhYmxlKHN0cmVhbSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd1bnVzYWJsZScpXG4gIH1cblxuICBhc3NlcnQoIXN0cmVhbVtrQ29uc3VtZV0pXG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBzdHJlYW1ba0NvbnN1bWVdID0ge1xuICAgICAgdHlwZSxcbiAgICAgIHN0cmVhbSxcbiAgICAgIHJlc29sdmUsXG4gICAgICByZWplY3QsXG4gICAgICBsZW5ndGg6IDAsXG4gICAgICBib2R5OiBbXVxuICAgIH1cblxuICAgIHN0cmVhbVxuICAgICAgLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgY29uc3VtZUZpbmlzaCh0aGlzW2tDb25zdW1lXSwgZXJyKVxuICAgICAgfSlcbiAgICAgIC5vbignY2xvc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzW2tDb25zdW1lXS5ib2R5ICE9PSBudWxsKSB7XG4gICAgICAgICAgY29uc3VtZUZpbmlzaCh0aGlzW2tDb25zdW1lXSwgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKSlcbiAgICAgICAgfVxuICAgICAgfSlcblxuICAgIHByb2Nlc3MubmV4dFRpY2soY29uc3VtZVN0YXJ0LCBzdHJlYW1ba0NvbnN1bWVdKVxuICB9KVxufVxuXG5mdW5jdGlvbiBjb25zdW1lU3RhcnQgKGNvbnN1bWUpIHtcbiAgaWYgKGNvbnN1bWUuYm9keSA9PT0gbnVsbCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgY29uc3QgeyBfcmVhZGFibGVTdGF0ZTogc3RhdGUgfSA9IGNvbnN1bWUuc3RyZWFtXG5cbiAgZm9yIChjb25zdCBjaHVuayBvZiBzdGF0ZS5idWZmZXIpIHtcbiAgICBjb25zdW1lUHVzaChjb25zdW1lLCBjaHVuaylcbiAgfVxuXG4gIGlmIChzdGF0ZS5lbmRFbWl0dGVkKSB7XG4gICAgY29uc3VtZUVuZCh0aGlzW2tDb25zdW1lXSlcbiAgfSBlbHNlIHtcbiAgICBjb25zdW1lLnN0cmVhbS5vbignZW5kJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3VtZUVuZCh0aGlzW2tDb25zdW1lXSlcbiAgICB9KVxuICB9XG5cbiAgY29uc3VtZS5zdHJlYW0ucmVzdW1lKClcblxuICB3aGlsZSAoY29uc3VtZS5zdHJlYW0ucmVhZCgpICE9IG51bGwpIHtcbiAgICAvLyBMb29wXG4gIH1cbn1cblxuZnVuY3Rpb24gY29uc3VtZUVuZCAoY29uc3VtZSkge1xuICBjb25zdCB7IHR5cGUsIGJvZHksIHJlc29sdmUsIHN0cmVhbSwgbGVuZ3RoIH0gPSBjb25zdW1lXG5cbiAgdHJ5IHtcbiAgICBpZiAodHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICByZXNvbHZlKHRvVVNWU3RyaW5nKEJ1ZmZlci5jb25jYXQoYm9keSkpKVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2pzb24nKSB7XG4gICAgICByZXNvbHZlKEpTT04ucGFyc2UoQnVmZmVyLmNvbmNhdChib2R5KSkpXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnYXJyYXlCdWZmZXInKSB7XG4gICAgICBjb25zdCBkc3QgPSBuZXcgVWludDhBcnJheShsZW5ndGgpXG5cbiAgICAgIGxldCBwb3MgPSAwXG4gICAgICBmb3IgKGNvbnN0IGJ1ZiBvZiBib2R5KSB7XG4gICAgICAgIGRzdC5zZXQoYnVmLCBwb3MpXG4gICAgICAgIHBvcyArPSBidWYuYnl0ZUxlbmd0aFxuICAgICAgfVxuXG4gICAgICByZXNvbHZlKGRzdC5idWZmZXIpXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnYmxvYicpIHtcbiAgICAgIGlmICghQmxvYikge1xuICAgICAgICBCbG9iID0gcmVxdWlyZSgnYnVmZmVyJykuQmxvYlxuICAgICAgfVxuICAgICAgcmVzb2x2ZShuZXcgQmxvYihib2R5LCB7IHR5cGU6IHN0cmVhbVtrQ29udGVudFR5cGVdIH0pKVxuICAgIH1cblxuICAgIGNvbnN1bWVGaW5pc2goY29uc3VtZSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgc3RyZWFtLmRlc3Ryb3koZXJyKVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbnN1bWVQdXNoIChjb25zdW1lLCBjaHVuaykge1xuICBjb25zdW1lLmxlbmd0aCArPSBjaHVuay5sZW5ndGhcbiAgY29uc3VtZS5ib2R5LnB1c2goY2h1bmspXG59XG5cbmZ1bmN0aW9uIGNvbnN1bWVGaW5pc2ggKGNvbnN1bWUsIGVycikge1xuICBpZiAoY29uc3VtZS5ib2R5ID09PSBudWxsKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoZXJyKSB7XG4gICAgY29uc3VtZS5yZWplY3QoZXJyKVxuICB9IGVsc2Uge1xuICAgIGNvbnN1bWUucmVzb2x2ZSgpXG4gIH1cblxuICBjb25zdW1lLnR5cGUgPSBudWxsXG4gIGNvbnN1bWUuc3RyZWFtID0gbnVsbFxuICBjb25zdW1lLnJlc29sdmUgPSBudWxsXG4gIGNvbnN1bWUucmVqZWN0ID0gbnVsbFxuICBjb25zdW1lLmxlbmd0aCA9IDBcbiAgY29uc3VtZS5ib2R5ID0gbnVsbFxufVxuIiwKICAgICJjb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3Qge1xuICBSZXNwb25zZVN0YXR1c0NvZGVFcnJvclxufSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHsgdG9VU1ZTdHJpbmcgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5cbmFzeW5jIGZ1bmN0aW9uIGdldFJlc29sdmVFcnJvckJvZHlDYWxsYmFjayAoeyBjYWxsYmFjaywgYm9keSwgY29udGVudFR5cGUsIHN0YXR1c0NvZGUsIHN0YXR1c01lc3NhZ2UsIGhlYWRlcnMgfSkge1xuICBhc3NlcnQoYm9keSlcblxuICBsZXQgY2h1bmtzID0gW11cbiAgbGV0IGxpbWl0ID0gMFxuXG4gIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgYm9keSkge1xuICAgIGNodW5rcy5wdXNoKGNodW5rKVxuICAgIGxpbWl0ICs9IGNodW5rLmxlbmd0aFxuICAgIGlmIChsaW1pdCA+IDEyOCAqIDEwMjQpIHtcbiAgICAgIGNodW5rcyA9IG51bGxcbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaWYgKHN0YXR1c0NvZGUgPT09IDIwNCB8fCAhY29udGVudFR5cGUgfHwgIWNodW5rcykge1xuICAgIHByb2Nlc3MubmV4dFRpY2soY2FsbGJhY2ssIG5ldyBSZXNwb25zZVN0YXR1c0NvZGVFcnJvcihgUmVzcG9uc2Ugc3RhdHVzIGNvZGUgJHtzdGF0dXNDb2RlfSR7c3RhdHVzTWVzc2FnZSA/IGA6ICR7c3RhdHVzTWVzc2FnZX1gIDogJyd9YCwgc3RhdHVzQ29kZSwgaGVhZGVycykpXG4gICAgcmV0dXJuXG4gIH1cblxuICB0cnkge1xuICAgIGlmIChjb250ZW50VHlwZS5zdGFydHNXaXRoKCdhcHBsaWNhdGlvbi9qc29uJykpIHtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSBKU09OLnBhcnNlKHRvVVNWU3RyaW5nKEJ1ZmZlci5jb25jYXQoY2h1bmtzKSkpXG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGNhbGxiYWNrLCBuZXcgUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IoYFJlc3BvbnNlIHN0YXR1cyBjb2RlICR7c3RhdHVzQ29kZX0ke3N0YXR1c01lc3NhZ2UgPyBgOiAke3N0YXR1c01lc3NhZ2V9YCA6ICcnfWAsIHN0YXR1c0NvZGUsIGhlYWRlcnMsIHBheWxvYWQpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGNvbnRlbnRUeXBlLnN0YXJ0c1dpdGgoJ3RleHQvJykpIHtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSB0b1VTVlN0cmluZyhCdWZmZXIuY29uY2F0KGNodW5rcykpXG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGNhbGxiYWNrLCBuZXcgUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IoYFJlc3BvbnNlIHN0YXR1cyBjb2RlICR7c3RhdHVzQ29kZX0ke3N0YXR1c01lc3NhZ2UgPyBgOiAke3N0YXR1c01lc3NhZ2V9YCA6ICcnfWAsIHN0YXR1c0NvZGUsIGhlYWRlcnMsIHBheWxvYWQpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBQcm9jZXNzIGluIGEgZmFsbGJhY2sgaWYgZXJyb3JcbiAgfVxuXG4gIHByb2Nlc3MubmV4dFRpY2soY2FsbGJhY2ssIG5ldyBSZXNwb25zZVN0YXR1c0NvZGVFcnJvcihgUmVzcG9uc2Ugc3RhdHVzIGNvZGUgJHtzdGF0dXNDb2RlfSR7c3RhdHVzTWVzc2FnZSA/IGA6ICR7c3RhdHVzTWVzc2FnZX1gIDogJyd9YCwgc3RhdHVzQ29kZSwgaGVhZGVycykpXG59XG5cbm1vZHVsZS5leHBvcnRzID0geyBnZXRSZXNvbHZlRXJyb3JCb2R5Q2FsbGJhY2sgfVxuIiwKICAgICJjb25zdCB7IGFkZEFib3J0TGlzdGVuZXIgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IFJlcXVlc3RBYm9ydGVkRXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcblxuY29uc3Qga0xpc3RlbmVyID0gU3ltYm9sKCdrTGlzdGVuZXInKVxuY29uc3Qga1NpZ25hbCA9IFN5bWJvbCgna1NpZ25hbCcpXG5cbmZ1bmN0aW9uIGFib3J0IChzZWxmKSB7XG4gIGlmIChzZWxmLmFib3J0KSB7XG4gICAgc2VsZi5hYm9ydCgpXG4gIH0gZWxzZSB7XG4gICAgc2VsZi5vbkVycm9yKG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKCkpXG4gIH1cbn1cblxuZnVuY3Rpb24gYWRkU2lnbmFsIChzZWxmLCBzaWduYWwpIHtcbiAgc2VsZltrU2lnbmFsXSA9IG51bGxcbiAgc2VsZltrTGlzdGVuZXJdID0gbnVsbFxuXG4gIGlmICghc2lnbmFsKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcbiAgICBhYm9ydChzZWxmKVxuICAgIHJldHVyblxuICB9XG5cbiAgc2VsZltrU2lnbmFsXSA9IHNpZ25hbFxuICBzZWxmW2tMaXN0ZW5lcl0gPSAoKSA9PiB7XG4gICAgYWJvcnQoc2VsZilcbiAgfVxuXG4gIGFkZEFib3J0TGlzdGVuZXIoc2VsZltrU2lnbmFsXSwgc2VsZltrTGlzdGVuZXJdKVxufVxuXG5mdW5jdGlvbiByZW1vdmVTaWduYWwgKHNlbGYpIHtcbiAgaWYgKCFzZWxmW2tTaWduYWxdKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoJ3JlbW92ZUV2ZW50TGlzdGVuZXInIGluIHNlbGZba1NpZ25hbF0pIHtcbiAgICBzZWxmW2tTaWduYWxdLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgc2VsZltrTGlzdGVuZXJdKVxuICB9IGVsc2Uge1xuICAgIHNlbGZba1NpZ25hbF0ucmVtb3ZlTGlzdGVuZXIoJ2Fib3J0Jywgc2VsZltrTGlzdGVuZXJdKVxuICB9XG5cbiAgc2VsZltrU2lnbmFsXSA9IG51bGxcbiAgc2VsZltrTGlzdGVuZXJdID0gbnVsbFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgYWRkU2lnbmFsLFxuICByZW1vdmVTaWduYWxcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFJlYWRhYmxlID0gcmVxdWlyZSgnLi9yZWFkYWJsZScpXG5jb25zdCB7XG4gIEludmFsaWRBcmd1bWVudEVycm9yLFxuICBSZXF1ZXN0QWJvcnRlZEVycm9yXG59ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGdldFJlc29sdmVFcnJvckJvZHlDYWxsYmFjayB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgQXN5bmNSZXNvdXJjZSB9ID0gcmVxdWlyZSgnYXN5bmNfaG9va3MnKVxuY29uc3QgeyBhZGRTaWduYWwsIHJlbW92ZVNpZ25hbCB9ID0gcmVxdWlyZSgnLi9hYm9ydC1zaWduYWwnKVxuXG5jbGFzcyBSZXF1ZXN0SGFuZGxlciBleHRlbmRzIEFzeW5jUmVzb3VyY2Uge1xuICBjb25zdHJ1Y3RvciAob3B0cywgY2FsbGJhY2spIHtcbiAgICBpZiAoIW9wdHMgfHwgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb3B0cycpXG4gICAgfVxuXG4gICAgY29uc3QgeyBzaWduYWwsIG1ldGhvZCwgb3BhcXVlLCBib2R5LCBvbkluZm8sIHJlc3BvbnNlSGVhZGVycywgdGhyb3dPbkVycm9yLCBoaWdoV2F0ZXJNYXJrIH0gPSBvcHRzXG5cbiAgICB0cnkge1xuICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY2FsbGJhY2snKVxuICAgICAgfVxuXG4gICAgICBpZiAoaGlnaFdhdGVyTWFyayAmJiAodHlwZW9mIGhpZ2hXYXRlck1hcmsgIT09ICdudW1iZXInIHx8IGhpZ2hXYXRlck1hcmsgPCAwKSkge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgaGlnaFdhdGVyTWFyaycpXG4gICAgICB9XG5cbiAgICAgIGlmIChzaWduYWwgJiYgdHlwZW9mIHNpZ25hbC5vbiAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2Ygc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdzaWduYWwgbXVzdCBiZSBhbiBFdmVudEVtaXR0ZXIgb3IgRXZlbnRUYXJnZXQnKVxuICAgICAgfVxuXG4gICAgICBpZiAobWV0aG9kID09PSAnQ09OTkVDVCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG1ldGhvZCcpXG4gICAgICB9XG5cbiAgICAgIGlmIChvbkluZm8gJiYgdHlwZW9mIG9uSW5mbyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25JbmZvIGNhbGxiYWNrJylcbiAgICAgIH1cblxuICAgICAgc3VwZXIoJ1VORElDSV9SRVFVRVNUJylcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICh1dGlsLmlzU3RyZWFtKGJvZHkpKSB7XG4gICAgICAgIHV0aWwuZGVzdHJveShib2R5Lm9uKCdlcnJvcicsIHV0aWwubm9wKSwgZXJyKVxuICAgICAgfVxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuXG4gICAgdGhpcy5yZXNwb25zZUhlYWRlcnMgPSByZXNwb25zZUhlYWRlcnMgfHwgbnVsbFxuICAgIHRoaXMub3BhcXVlID0gb3BhcXVlIHx8IG51bGxcbiAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2tcbiAgICB0aGlzLnJlcyA9IG51bGxcbiAgICB0aGlzLmFib3J0ID0gbnVsbFxuICAgIHRoaXMuYm9keSA9IGJvZHlcbiAgICB0aGlzLnRyYWlsZXJzID0ge31cbiAgICB0aGlzLmNvbnRleHQgPSBudWxsXG4gICAgdGhpcy5vbkluZm8gPSBvbkluZm8gfHwgbnVsbFxuICAgIHRoaXMudGhyb3dPbkVycm9yID0gdGhyb3dPbkVycm9yXG4gICAgdGhpcy5oaWdoV2F0ZXJNYXJrID0gaGlnaFdhdGVyTWFya1xuXG4gICAgaWYgKHV0aWwuaXNTdHJlYW0oYm9keSkpIHtcbiAgICAgIGJvZHkub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgICB0aGlzLm9uRXJyb3IoZXJyKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBhZGRTaWduYWwodGhpcywgc2lnbmFsKVxuICB9XG5cbiAgb25Db25uZWN0IChhYm9ydCwgY29udGV4dCkge1xuICAgIGlmICghdGhpcy5jYWxsYmFjaykge1xuICAgICAgdGhyb3cgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgIH1cblxuICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHRcbiAgfVxuXG4gIG9uSGVhZGVycyAoc3RhdHVzQ29kZSwgcmF3SGVhZGVycywgcmVzdW1lLCBzdGF0dXNNZXNzYWdlKSB7XG4gICAgY29uc3QgeyBjYWxsYmFjaywgb3BhcXVlLCBhYm9ydCwgY29udGV4dCwgcmVzcG9uc2VIZWFkZXJzLCBoaWdoV2F0ZXJNYXJrIH0gPSB0aGlzXG5cbiAgICBjb25zdCBoZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VSYXdIZWFkZXJzKHJhd0hlYWRlcnMpIDogdXRpbC5wYXJzZUhlYWRlcnMocmF3SGVhZGVycylcblxuICAgIGlmIChzdGF0dXNDb2RlIDwgMjAwKSB7XG4gICAgICBpZiAodGhpcy5vbkluZm8pIHtcbiAgICAgICAgdGhpcy5vbkluZm8oeyBzdGF0dXNDb2RlLCBoZWFkZXJzIH0pXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBwYXJzZWRIZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpIDogaGVhZGVyc1xuICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcGFyc2VkSGVhZGVyc1snY29udGVudC10eXBlJ11cbiAgICBjb25zdCBib2R5ID0gbmV3IFJlYWRhYmxlKHsgcmVzdW1lLCBhYm9ydCwgY29udGVudFR5cGUsIGhpZ2hXYXRlck1hcmsgfSlcblxuICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG4gICAgdGhpcy5yZXMgPSBib2R5XG4gICAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICBpZiAodGhpcy50aHJvd09uRXJyb3IgJiYgc3RhdHVzQ29kZSA+PSA0MDApIHtcbiAgICAgICAgdGhpcy5ydW5JbkFzeW5jU2NvcGUoZ2V0UmVzb2x2ZUVycm9yQm9keUNhbGxiYWNrLCBudWxsLFxuICAgICAgICAgIHsgY2FsbGJhY2ssIGJvZHksIGNvbnRlbnRUeXBlLCBzdGF0dXNDb2RlLCBzdGF0dXNNZXNzYWdlLCBoZWFkZXJzIH1cbiAgICAgICAgKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5ydW5JbkFzeW5jU2NvcGUoY2FsbGJhY2ssIG51bGwsIG51bGwsIHtcbiAgICAgICAgICBzdGF0dXNDb2RlLFxuICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgdHJhaWxlcnM6IHRoaXMudHJhaWxlcnMsXG4gICAgICAgICAgb3BhcXVlLFxuICAgICAgICAgIGJvZHksXG4gICAgICAgICAgY29udGV4dFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uRGF0YSAoY2h1bmspIHtcbiAgICBjb25zdCB7IHJlcyB9ID0gdGhpc1xuICAgIHJldHVybiByZXMucHVzaChjaHVuaylcbiAgfVxuXG4gIG9uQ29tcGxldGUgKHRyYWlsZXJzKSB7XG4gICAgY29uc3QgeyByZXMgfSA9IHRoaXNcblxuICAgIHJlbW92ZVNpZ25hbCh0aGlzKVxuXG4gICAgdXRpbC5wYXJzZUhlYWRlcnModHJhaWxlcnMsIHRoaXMudHJhaWxlcnMpXG5cbiAgICByZXMucHVzaChudWxsKVxuICB9XG5cbiAgb25FcnJvciAoZXJyKSB7XG4gICAgY29uc3QgeyByZXMsIGNhbGxiYWNrLCBib2R5LCBvcGFxdWUgfSA9IHRoaXNcblxuICAgIHJlbW92ZVNpZ25hbCh0aGlzKVxuXG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAvLyBUT0RPOiBEb2VzIHRoaXMgbmVlZCBxdWV1ZU1pY3JvdGFzaz9cbiAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGNhbGxiYWNrLCBudWxsLCBlcnIsIHsgb3BhcXVlIH0pXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChyZXMpIHtcbiAgICAgIHRoaXMucmVzID0gbnVsbFxuICAgICAgLy8gRW5zdXJlIGFsbCBxdWV1ZWQgaGFuZGxlcnMgYXJlIGludm9rZWQgYmVmb3JlIGRlc3Ryb3lpbmcgcmVzLlxuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICB1dGlsLmRlc3Ryb3kocmVzLCBlcnIpXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChib2R5KSB7XG4gICAgICB0aGlzLmJvZHkgPSBudWxsXG4gICAgICB1dGlsLmRlc3Ryb3koYm9keSwgZXJyKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiByZXF1ZXN0IChvcHRzLCBjYWxsYmFjaykge1xuICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICByZXF1ZXN0LmNhbGwodGhpcywgb3B0cywgKGVyciwgZGF0YSkgPT4ge1xuICAgICAgICByZXR1cm4gZXJyID8gcmVqZWN0KGVycikgOiByZXNvbHZlKGRhdGEpXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICB0cnkge1xuICAgIHRoaXMuZGlzcGF0Y2gob3B0cywgbmV3IFJlcXVlc3RIYW5kbGVyKG9wdHMsIGNhbGxiYWNrKSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICAgIGNvbnN0IG9wYXF1ZSA9IG9wdHMgJiYgb3B0cy5vcGFxdWVcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhlcnIsIHsgb3BhcXVlIH0pKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWVzdFxubW9kdWxlLmV4cG9ydHMuUmVxdWVzdEhhbmRsZXIgPSBSZXF1ZXN0SGFuZGxlclxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBmaW5pc2hlZCwgUGFzc1Rocm91Z2ggfSA9IHJlcXVpcmUoJ3N0cmVhbScpXG5jb25zdCB7XG4gIEludmFsaWRBcmd1bWVudEVycm9yLFxuICBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcixcbiAgUmVxdWVzdEFib3J0ZWRFcnJvclxufSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBnZXRSZXNvbHZlRXJyb3JCb2R5Q2FsbGJhY2sgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IEFzeW5jUmVzb3VyY2UgfSA9IHJlcXVpcmUoJ2FzeW5jX2hvb2tzJylcbmNvbnN0IHsgYWRkU2lnbmFsLCByZW1vdmVTaWduYWwgfSA9IHJlcXVpcmUoJy4vYWJvcnQtc2lnbmFsJylcblxuY2xhc3MgU3RyZWFtSGFuZGxlciBleHRlbmRzIEFzeW5jUmVzb3VyY2Uge1xuICBjb25zdHJ1Y3RvciAob3B0cywgZmFjdG9yeSwgY2FsbGJhY2spIHtcbiAgICBpZiAoIW9wdHMgfHwgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb3B0cycpXG4gICAgfVxuXG4gICAgY29uc3QgeyBzaWduYWwsIG1ldGhvZCwgb3BhcXVlLCBib2R5LCBvbkluZm8sIHJlc3BvbnNlSGVhZGVycywgdGhyb3dPbkVycm9yIH0gPSBvcHRzXG5cbiAgICB0cnkge1xuICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY2FsbGJhY2snKVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGZhY3RvcnkgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGZhY3RvcnknKVxuICAgICAgfVxuXG4gICAgICBpZiAoc2lnbmFsICYmIHR5cGVvZiBzaWduYWwub24gIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignc2lnbmFsIG11c3QgYmUgYW4gRXZlbnRFbWl0dGVyIG9yIEV2ZW50VGFyZ2V0JylcbiAgICAgIH1cblxuICAgICAgaWYgKG1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBtZXRob2QnKVxuICAgICAgfVxuXG4gICAgICBpZiAob25JbmZvICYmIHR5cGVvZiBvbkluZm8gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uSW5mbyBjYWxsYmFjaycpXG4gICAgICB9XG5cbiAgICAgIHN1cGVyKCdVTkRJQ0lfU1RSRUFNJylcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICh1dGlsLmlzU3RyZWFtKGJvZHkpKSB7XG4gICAgICAgIHV0aWwuZGVzdHJveShib2R5Lm9uKCdlcnJvcicsIHV0aWwubm9wKSwgZXJyKVxuICAgICAgfVxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuXG4gICAgdGhpcy5yZXNwb25zZUhlYWRlcnMgPSByZXNwb25zZUhlYWRlcnMgfHwgbnVsbFxuICAgIHRoaXMub3BhcXVlID0gb3BhcXVlIHx8IG51bGxcbiAgICB0aGlzLmZhY3RvcnkgPSBmYWN0b3J5XG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrXG4gICAgdGhpcy5yZXMgPSBudWxsXG4gICAgdGhpcy5hYm9ydCA9IG51bGxcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsXG4gICAgdGhpcy50cmFpbGVycyA9IG51bGxcbiAgICB0aGlzLmJvZHkgPSBib2R5XG4gICAgdGhpcy5vbkluZm8gPSBvbkluZm8gfHwgbnVsbFxuICAgIHRoaXMudGhyb3dPbkVycm9yID0gdGhyb3dPbkVycm9yIHx8IGZhbHNlXG5cbiAgICBpZiAodXRpbC5pc1N0cmVhbShib2R5KSkge1xuICAgICAgYm9keS5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMub25FcnJvcihlcnIpXG4gICAgICB9KVxuICAgIH1cblxuICAgIGFkZFNpZ25hbCh0aGlzLCBzaWduYWwpXG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0LCBjb250ZXh0KSB7XG4gICAgaWYgKCF0aGlzLmNhbGxiYWNrKSB7XG4gICAgICB0aHJvdyBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gICAgfVxuXG4gICAgdGhpcy5hYm9ydCA9IGFib3J0XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dFxuICB9XG5cbiAgb25IZWFkZXJzIChzdGF0dXNDb2RlLCByYXdIZWFkZXJzLCByZXN1bWUsIHN0YXR1c01lc3NhZ2UpIHtcbiAgICBjb25zdCB7IGZhY3RvcnksIG9wYXF1ZSwgY29udGV4dCwgY2FsbGJhY2ssIHJlc3BvbnNlSGVhZGVycyB9ID0gdGhpc1xuXG4gICAgY29uc3QgaGVhZGVycyA9IHJlc3BvbnNlSGVhZGVycyA9PT0gJ3JhdycgPyB1dGlsLnBhcnNlUmF3SGVhZGVycyhyYXdIZWFkZXJzKSA6IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpXG5cbiAgICBpZiAoc3RhdHVzQ29kZSA8IDIwMCkge1xuICAgICAgaWYgKHRoaXMub25JbmZvKSB7XG4gICAgICAgIHRoaXMub25JbmZvKHsgc3RhdHVzQ29kZSwgaGVhZGVycyB9KVxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5mYWN0b3J5ID0gbnVsbFxuXG4gICAgbGV0IHJlc1xuXG4gICAgaWYgKHRoaXMudGhyb3dPbkVycm9yICYmIHN0YXR1c0NvZGUgPj0gNDAwKSB7XG4gICAgICBjb25zdCBwYXJzZWRIZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpIDogaGVhZGVyc1xuICAgICAgY29uc3QgY29udGVudFR5cGUgPSBwYXJzZWRIZWFkZXJzWydjb250ZW50LXR5cGUnXVxuICAgICAgcmVzID0gbmV3IFBhc3NUaHJvdWdoKClcblxuICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGxcbiAgICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGdldFJlc29sdmVFcnJvckJvZHlDYWxsYmFjaywgbnVsbCxcbiAgICAgICAgeyBjYWxsYmFjaywgYm9keTogcmVzLCBjb250ZW50VHlwZSwgc3RhdHVzQ29kZSwgc3RhdHVzTWVzc2FnZSwgaGVhZGVycyB9XG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChmYWN0b3J5ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICByZXMgPSB0aGlzLnJ1bkluQXN5bmNTY29wZShmYWN0b3J5LCBudWxsLCB7XG4gICAgICAgIHN0YXR1c0NvZGUsXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIG9wYXF1ZSxcbiAgICAgICAgY29udGV4dFxuICAgICAgfSlcblxuICAgICAgaWYgKFxuICAgICAgICAhcmVzIHx8XG4gICAgICAgIHR5cGVvZiByZXMud3JpdGUgIT09ICdmdW5jdGlvbicgfHxcbiAgICAgICAgdHlwZW9mIHJlcy5lbmQgIT09ICdmdW5jdGlvbicgfHxcbiAgICAgICAgdHlwZW9mIHJlcy5vbiAhPT0gJ2Z1bmN0aW9uJ1xuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcignZXhwZWN0ZWQgV3JpdGFibGUnKVxuICAgICAgfVxuXG4gICAgICAvLyBUT0RPOiBBdm9pZCBmaW5pc2hlZC4gSXQgcmVnaXN0ZXJzIGFuIHVubmVjZXNzYXJ5IGFtb3VudCBvZiBsaXN0ZW5lcnMuXG4gICAgICBmaW5pc2hlZChyZXMsIHsgcmVhZGFibGU6IGZhbHNlIH0sIChlcnIpID0+IHtcbiAgICAgICAgY29uc3QgeyBjYWxsYmFjaywgcmVzLCBvcGFxdWUsIHRyYWlsZXJzLCBhYm9ydCB9ID0gdGhpc1xuXG4gICAgICAgIHRoaXMucmVzID0gbnVsbFxuICAgICAgICBpZiAoZXJyIHx8ICFyZXMucmVhZGFibGUpIHtcbiAgICAgICAgICB1dGlsLmRlc3Ryb3kocmVzLCBlcnIpXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNhbGxiYWNrID0gbnVsbFxuICAgICAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgZXJyIHx8IG51bGwsIHsgb3BhcXVlLCB0cmFpbGVycyB9KVxuXG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICBhYm9ydCgpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmVzLm9uKCdkcmFpbicsIHJlc3VtZSlcblxuICAgIHRoaXMucmVzID0gcmVzXG5cbiAgICBjb25zdCBuZWVkRHJhaW4gPSByZXMud3JpdGFibGVOZWVkRHJhaW4gIT09IHVuZGVmaW5lZFxuICAgICAgPyByZXMud3JpdGFibGVOZWVkRHJhaW5cbiAgICAgIDogcmVzLl93cml0YWJsZVN0YXRlICYmIHJlcy5fd3JpdGFibGVTdGF0ZS5uZWVkRHJhaW5cblxuICAgIHJldHVybiBuZWVkRHJhaW4gIT09IHRydWVcbiAgfVxuXG4gIG9uRGF0YSAoY2h1bmspIHtcbiAgICBjb25zdCB7IHJlcyB9ID0gdGhpc1xuXG4gICAgcmV0dXJuIHJlcyA/IHJlcy53cml0ZShjaHVuaykgOiB0cnVlXG4gIH1cblxuICBvbkNvbXBsZXRlICh0cmFpbGVycykge1xuICAgIGNvbnN0IHsgcmVzIH0gPSB0aGlzXG5cbiAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgIGlmICghcmVzKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLnRyYWlsZXJzID0gdXRpbC5wYXJzZUhlYWRlcnModHJhaWxlcnMpXG5cbiAgICByZXMuZW5kKClcbiAgfVxuXG4gIG9uRXJyb3IgKGVycikge1xuICAgIGNvbnN0IHsgcmVzLCBjYWxsYmFjaywgb3BhcXVlLCBib2R5IH0gPSB0aGlzXG5cbiAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgIHRoaXMuZmFjdG9yeSA9IG51bGxcblxuICAgIGlmIChyZXMpIHtcbiAgICAgIHRoaXMucmVzID0gbnVsbFxuICAgICAgdXRpbC5kZXN0cm95KHJlcywgZXJyKVxuICAgIH0gZWxzZSBpZiAoY2FsbGJhY2spIHtcbiAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGNhbGxiYWNrLCBudWxsLCBlcnIsIHsgb3BhcXVlIH0pXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChib2R5KSB7XG4gICAgICB0aGlzLmJvZHkgPSBudWxsXG4gICAgICB1dGlsLmRlc3Ryb3koYm9keSwgZXJyKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzdHJlYW0gKG9wdHMsIGZhY3RvcnksIGNhbGxiYWNrKSB7XG4gIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHN0cmVhbS5jYWxsKHRoaXMsIG9wdHMsIGZhY3RvcnksIChlcnIsIGRhdGEpID0+IHtcbiAgICAgICAgcmV0dXJuIGVyciA/IHJlamVjdChlcnIpIDogcmVzb2x2ZShkYXRhKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgdHJ5IHtcbiAgICB0aGlzLmRpc3BhdGNoKG9wdHMsIG5ldyBTdHJlYW1IYW5kbGVyKG9wdHMsIGZhY3RvcnksIGNhbGxiYWNrKSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICAgIGNvbnN0IG9wYXF1ZSA9IG9wdHMgJiYgb3B0cy5vcGFxdWVcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhlcnIsIHsgb3BhcXVlIH0pKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RyZWFtXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIFJlYWRhYmxlLFxuICBEdXBsZXgsXG4gIFBhc3NUaHJvdWdoXG59ID0gcmVxdWlyZSgnc3RyZWFtJylcbmNvbnN0IHtcbiAgSW52YWxpZEFyZ3VtZW50RXJyb3IsXG4gIEludmFsaWRSZXR1cm5WYWx1ZUVycm9yLFxuICBSZXF1ZXN0QWJvcnRlZEVycm9yXG59ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IEFzeW5jUmVzb3VyY2UgfSA9IHJlcXVpcmUoJ2FzeW5jX2hvb2tzJylcbmNvbnN0IHsgYWRkU2lnbmFsLCByZW1vdmVTaWduYWwgfSA9IHJlcXVpcmUoJy4vYWJvcnQtc2lnbmFsJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5cbmNvbnN0IGtSZXN1bWUgPSBTeW1ib2woJ3Jlc3VtZScpXG5cbmNsYXNzIFBpcGVsaW5lUmVxdWVzdCBleHRlbmRzIFJlYWRhYmxlIHtcbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHN1cGVyKHsgYXV0b0Rlc3Ryb3k6IHRydWUgfSlcblxuICAgIHRoaXNba1Jlc3VtZV0gPSBudWxsXG4gIH1cblxuICBfcmVhZCAoKSB7XG4gICAgY29uc3QgeyBba1Jlc3VtZV06IHJlc3VtZSB9ID0gdGhpc1xuXG4gICAgaWYgKHJlc3VtZSkge1xuICAgICAgdGhpc1trUmVzdW1lXSA9IG51bGxcbiAgICAgIHJlc3VtZSgpXG4gICAgfVxuICB9XG5cbiAgX2Rlc3Ryb3kgKGVyciwgY2FsbGJhY2spIHtcbiAgICB0aGlzLl9yZWFkKClcblxuICAgIGNhbGxiYWNrKGVycilcbiAgfVxufVxuXG5jbGFzcyBQaXBlbGluZVJlc3BvbnNlIGV4dGVuZHMgUmVhZGFibGUge1xuICBjb25zdHJ1Y3RvciAocmVzdW1lKSB7XG4gICAgc3VwZXIoeyBhdXRvRGVzdHJveTogdHJ1ZSB9KVxuICAgIHRoaXNba1Jlc3VtZV0gPSByZXN1bWVcbiAgfVxuXG4gIF9yZWFkICgpIHtcbiAgICB0aGlzW2tSZXN1bWVdKClcbiAgfVxuXG4gIF9kZXN0cm95IChlcnIsIGNhbGxiYWNrKSB7XG4gICAgaWYgKCFlcnIgJiYgIXRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCkge1xuICAgICAgZXJyID0gbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgIH1cblxuICAgIGNhbGxiYWNrKGVycilcbiAgfVxufVxuXG5jbGFzcyBQaXBlbGluZUhhbmRsZXIgZXh0ZW5kcyBBc3luY1Jlc291cmNlIHtcbiAgY29uc3RydWN0b3IgKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBpZiAoIW9wdHMgfHwgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb3B0cycpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBoYW5kbGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgaGFuZGxlcicpXG4gICAgfVxuXG4gICAgY29uc3QgeyBzaWduYWwsIG1ldGhvZCwgb3BhcXVlLCBvbkluZm8sIHJlc3BvbnNlSGVhZGVycyB9ID0gb3B0c1xuXG4gICAgaWYgKHNpZ25hbCAmJiB0eXBlb2Ygc2lnbmFsLm9uICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdzaWduYWwgbXVzdCBiZSBhbiBFdmVudEVtaXR0ZXIgb3IgRXZlbnRUYXJnZXQnKVxuICAgIH1cblxuICAgIGlmIChtZXRob2QgPT09ICdDT05ORUNUJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG1ldGhvZCcpXG4gICAgfVxuXG4gICAgaWYgKG9uSW5mbyAmJiB0eXBlb2Ygb25JbmZvICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25JbmZvIGNhbGxiYWNrJylcbiAgICB9XG5cbiAgICBzdXBlcignVU5ESUNJX1BJUEVMSU5FJylcblxuICAgIHRoaXMub3BhcXVlID0gb3BhcXVlIHx8IG51bGxcbiAgICB0aGlzLnJlc3BvbnNlSGVhZGVycyA9IHJlc3BvbnNlSGVhZGVycyB8fCBudWxsXG4gICAgdGhpcy5oYW5kbGVyID0gaGFuZGxlclxuICAgIHRoaXMuYWJvcnQgPSBudWxsXG4gICAgdGhpcy5jb250ZXh0ID0gbnVsbFxuICAgIHRoaXMub25JbmZvID0gb25JbmZvIHx8IG51bGxcblxuICAgIHRoaXMucmVxID0gbmV3IFBpcGVsaW5lUmVxdWVzdCgpLm9uKCdlcnJvcicsIHV0aWwubm9wKVxuXG4gICAgdGhpcy5yZXQgPSBuZXcgRHVwbGV4KHtcbiAgICAgIHJlYWRhYmxlT2JqZWN0TW9kZTogb3B0cy5vYmplY3RNb2RlLFxuICAgICAgYXV0b0Rlc3Ryb3k6IHRydWUsXG4gICAgICByZWFkOiAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgYm9keSB9ID0gdGhpc1xuXG4gICAgICAgIGlmIChib2R5ICYmIGJvZHkucmVzdW1lKSB7XG4gICAgICAgICAgYm9keS5yZXN1bWUoKVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgd3JpdGU6IChjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcmVxIH0gPSB0aGlzXG5cbiAgICAgICAgaWYgKHJlcS5wdXNoKGNodW5rLCBlbmNvZGluZykgfHwgcmVxLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCkge1xuICAgICAgICAgIGNhbGxiYWNrKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXFba1Jlc3VtZV0gPSBjYWxsYmFja1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZGVzdHJveTogKGVyciwgY2FsbGJhY2spID0+IHtcbiAgICAgICAgY29uc3QgeyBib2R5LCByZXEsIHJlcywgcmV0LCBhYm9ydCB9ID0gdGhpc1xuXG4gICAgICAgIGlmICghZXJyICYmICFyZXQuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCkge1xuICAgICAgICAgIGVyciA9IG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKClcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhYm9ydCAmJiBlcnIpIHtcbiAgICAgICAgICBhYm9ydCgpXG4gICAgICAgIH1cblxuICAgICAgICB1dGlsLmRlc3Ryb3koYm9keSwgZXJyKVxuICAgICAgICB1dGlsLmRlc3Ryb3kocmVxLCBlcnIpXG4gICAgICAgIHV0aWwuZGVzdHJveShyZXMsIGVycilcblxuICAgICAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgICAgICBjYWxsYmFjayhlcnIpXG4gICAgICB9XG4gICAgfSkub24oJ3ByZWZpbmlzaCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgcmVxIH0gPSB0aGlzXG5cbiAgICAgIC8vIE5vZGUgPCAxNSBkb2VzIG5vdCBjYWxsIF9maW5hbCBpbiBzYW1lIHRpY2suXG4gICAgICByZXEucHVzaChudWxsKVxuICAgIH0pXG5cbiAgICB0aGlzLnJlcyA9IG51bGxcblxuICAgIGFkZFNpZ25hbCh0aGlzLCBzaWduYWwpXG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0LCBjb250ZXh0KSB7XG4gICAgY29uc3QgeyByZXQsIHJlcyB9ID0gdGhpc1xuXG4gICAgYXNzZXJ0KCFyZXMsICdwaXBlbGluZSBjYW5ub3QgYmUgcmV0cmllZCcpXG5cbiAgICBpZiAocmV0LmRlc3Ryb3llZCkge1xuICAgICAgdGhyb3cgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgIH1cblxuICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHRcbiAgfVxuXG4gIG9uSGVhZGVycyAoc3RhdHVzQ29kZSwgcmF3SGVhZGVycywgcmVzdW1lKSB7XG4gICAgY29uc3QgeyBvcGFxdWUsIGhhbmRsZXIsIGNvbnRleHQgfSA9IHRoaXNcblxuICAgIGlmIChzdGF0dXNDb2RlIDwgMjAwKSB7XG4gICAgICBpZiAodGhpcy5vbkluZm8pIHtcbiAgICAgICAgY29uc3QgaGVhZGVycyA9IHRoaXMucmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VSYXdIZWFkZXJzKHJhd0hlYWRlcnMpIDogdXRpbC5wYXJzZUhlYWRlcnMocmF3SGVhZGVycylcbiAgICAgICAgdGhpcy5vbkluZm8oeyBzdGF0dXNDb2RlLCBoZWFkZXJzIH0pXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLnJlcyA9IG5ldyBQaXBlbGluZVJlc3BvbnNlKHJlc3VtZSlcblxuICAgIGxldCBib2R5XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuaGFuZGxlciA9IG51bGxcbiAgICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLnJlc3BvbnNlSGVhZGVycyA9PT0gJ3JhdycgPyB1dGlsLnBhcnNlUmF3SGVhZGVycyhyYXdIZWFkZXJzKSA6IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpXG4gICAgICBib2R5ID0gdGhpcy5ydW5JbkFzeW5jU2NvcGUoaGFuZGxlciwgbnVsbCwge1xuICAgICAgICBzdGF0dXNDb2RlLFxuICAgICAgICBoZWFkZXJzLFxuICAgICAgICBvcGFxdWUsXG4gICAgICAgIGJvZHk6IHRoaXMucmVzLFxuICAgICAgICBjb250ZXh0XG4gICAgICB9KVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5yZXMub24oJ2Vycm9yJywgdXRpbC5ub3ApXG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG5cbiAgICBpZiAoIWJvZHkgfHwgdHlwZW9mIGJvZHkub24gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcignZXhwZWN0ZWQgUmVhZGFibGUnKVxuICAgIH1cblxuICAgIGJvZHlcbiAgICAgIC5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgICAgICBjb25zdCB7IHJldCwgYm9keSB9ID0gdGhpc1xuXG4gICAgICAgIGlmICghcmV0LnB1c2goY2h1bmspICYmIGJvZHkucGF1c2UpIHtcbiAgICAgICAgICBib2R5LnBhdXNlKClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcmV0IH0gPSB0aGlzXG5cbiAgICAgICAgdXRpbC5kZXN0cm95KHJldCwgZXJyKVxuICAgICAgfSlcbiAgICAgIC5vbignZW5kJywgKCkgPT4ge1xuICAgICAgICBjb25zdCB7IHJldCB9ID0gdGhpc1xuXG4gICAgICAgIHJldC5wdXNoKG51bGwpXG4gICAgICB9KVxuICAgICAgLm9uKCdjbG9zZScsICgpID0+IHtcbiAgICAgICAgY29uc3QgeyByZXQgfSA9IHRoaXNcblxuICAgICAgICBpZiAoIXJldC5fcmVhZGFibGVTdGF0ZS5lbmRlZCkge1xuICAgICAgICAgIHV0aWwuZGVzdHJveShyZXQsIG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKCkpXG4gICAgICAgIH1cbiAgICAgIH0pXG5cbiAgICB0aGlzLmJvZHkgPSBib2R5XG4gIH1cblxuICBvbkRhdGEgKGNodW5rKSB7XG4gICAgY29uc3QgeyByZXMgfSA9IHRoaXNcbiAgICByZXR1cm4gcmVzLnB1c2goY2h1bmspXG4gIH1cblxuICBvbkNvbXBsZXRlICh0cmFpbGVycykge1xuICAgIGNvbnN0IHsgcmVzIH0gPSB0aGlzXG4gICAgcmVzLnB1c2gobnVsbClcbiAgfVxuXG4gIG9uRXJyb3IgKGVycikge1xuICAgIGNvbnN0IHsgcmV0IH0gPSB0aGlzXG4gICAgdGhpcy5oYW5kbGVyID0gbnVsbFxuICAgIHV0aWwuZGVzdHJveShyZXQsIGVycilcbiAgfVxufVxuXG5mdW5jdGlvbiBwaXBlbGluZSAob3B0cywgaGFuZGxlcikge1xuICB0cnkge1xuICAgIGNvbnN0IHBpcGVsaW5lSGFuZGxlciA9IG5ldyBQaXBlbGluZUhhbmRsZXIob3B0cywgaGFuZGxlcilcbiAgICB0aGlzLmRpc3BhdGNoKHsgLi4ub3B0cywgYm9keTogcGlwZWxpbmVIYW5kbGVyLnJlcSB9LCBwaXBlbGluZUhhbmRsZXIpXG4gICAgcmV0dXJuIHBpcGVsaW5lSGFuZGxlci5yZXRcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIG5ldyBQYXNzVGhyb3VnaCgpLmRlc3Ryb3koZXJyKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGlwZWxpbmVcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IsIFJlcXVlc3RBYm9ydGVkRXJyb3IsIFNvY2tldEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB7IEFzeW5jUmVzb3VyY2UgfSA9IHJlcXVpcmUoJ2FzeW5jX2hvb2tzJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBhZGRTaWduYWwsIHJlbW92ZVNpZ25hbCB9ID0gcmVxdWlyZSgnLi9hYm9ydC1zaWduYWwnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcblxuY2xhc3MgVXBncmFkZUhhbmRsZXIgZXh0ZW5kcyBBc3luY1Jlc291cmNlIHtcbiAgY29uc3RydWN0b3IgKG9wdHMsIGNhbGxiYWNrKSB7XG4gICAgaWYgKCFvcHRzIHx8IHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9wdHMnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjYWxsYmFjaycpXG4gICAgfVxuXG4gICAgY29uc3QgeyBzaWduYWwsIG9wYXF1ZSwgcmVzcG9uc2VIZWFkZXJzIH0gPSBvcHRzXG5cbiAgICBpZiAoc2lnbmFsICYmIHR5cGVvZiBzaWduYWwub24gIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3NpZ25hbCBtdXN0IGJlIGFuIEV2ZW50RW1pdHRlciBvciBFdmVudFRhcmdldCcpXG4gICAgfVxuXG4gICAgc3VwZXIoJ1VORElDSV9VUEdSQURFJylcblxuICAgIHRoaXMucmVzcG9uc2VIZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzIHx8IG51bGxcbiAgICB0aGlzLm9wYXF1ZSA9IG9wYXF1ZSB8fCBudWxsXG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrXG4gICAgdGhpcy5hYm9ydCA9IG51bGxcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsXG5cbiAgICBhZGRTaWduYWwodGhpcywgc2lnbmFsKVxuICB9XG5cbiAgb25Db25uZWN0IChhYm9ydCwgY29udGV4dCkge1xuICAgIGlmICghdGhpcy5jYWxsYmFjaykge1xuICAgICAgdGhyb3cgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgIH1cblxuICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIHRoaXMuY29udGV4dCA9IG51bGxcbiAgfVxuXG4gIG9uSGVhZGVycyAoKSB7XG4gICAgdGhyb3cgbmV3IFNvY2tldEVycm9yKCdiYWQgdXBncmFkZScsIG51bGwpXG4gIH1cblxuICBvblVwZ3JhZGUgKHN0YXR1c0NvZGUsIHJhd0hlYWRlcnMsIHNvY2tldCkge1xuICAgIGNvbnN0IHsgY2FsbGJhY2ssIG9wYXF1ZSwgY29udGV4dCB9ID0gdGhpc1xuXG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHN0YXR1c0NvZGUsIDEwMSlcblxuICAgIHJlbW92ZVNpZ25hbCh0aGlzKVxuXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGxcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5yZXNwb25zZUhlYWRlcnMgPT09ICdyYXcnID8gdXRpbC5wYXJzZVJhd0hlYWRlcnMocmF3SGVhZGVycykgOiB1dGlsLnBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKVxuICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGNhbGxiYWNrLCBudWxsLCBudWxsLCB7XG4gICAgICBoZWFkZXJzLFxuICAgICAgc29ja2V0LFxuICAgICAgb3BhcXVlLFxuICAgICAgY29udGV4dFxuICAgIH0pXG4gIH1cblxuICBvbkVycm9yIChlcnIpIHtcbiAgICBjb25zdCB7IGNhbGxiYWNrLCBvcGFxdWUgfSA9IHRoaXNcblxuICAgIHJlbW92ZVNpZ25hbCh0aGlzKVxuXG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICB0aGlzLmNhbGxiYWNrID0gbnVsbFxuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgZXJyLCB7IG9wYXF1ZSB9KVxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdXBncmFkZSAob3B0cywgY2FsbGJhY2spIHtcbiAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdXBncmFkZS5jYWxsKHRoaXMsIG9wdHMsIChlcnIsIGRhdGEpID0+IHtcbiAgICAgICAgcmV0dXJuIGVyciA/IHJlamVjdChlcnIpIDogcmVzb2x2ZShkYXRhKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB1cGdyYWRlSGFuZGxlciA9IG5ldyBVcGdyYWRlSGFuZGxlcihvcHRzLCBjYWxsYmFjaylcbiAgICB0aGlzLmRpc3BhdGNoKHtcbiAgICAgIC4uLm9wdHMsXG4gICAgICBtZXRob2Q6IG9wdHMubWV0aG9kIHx8ICdHRVQnLFxuICAgICAgdXBncmFkZTogb3B0cy5wcm90b2NvbCB8fCAnV2Vic29ja2V0J1xuICAgIH0sIHVwZ3JhZGVIYW5kbGVyKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gICAgY29uc3Qgb3BhcXVlID0gb3B0cyAmJiBvcHRzLm9wYXF1ZVxuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGNhbGxiYWNrKGVyciwgeyBvcGFxdWUgfSkpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB1cGdyYWRlXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IEFzeW5jUmVzb3VyY2UgfSA9IHJlcXVpcmUoJ2FzeW5jX2hvb2tzJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IsIFJlcXVlc3RBYm9ydGVkRXJyb3IsIFNvY2tldEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgYWRkU2lnbmFsLCByZW1vdmVTaWduYWwgfSA9IHJlcXVpcmUoJy4vYWJvcnQtc2lnbmFsJylcblxuY2xhc3MgQ29ubmVjdEhhbmRsZXIgZXh0ZW5kcyBBc3luY1Jlc291cmNlIHtcbiAgY29uc3RydWN0b3IgKG9wdHMsIGNhbGxiYWNrKSB7XG4gICAgaWYgKCFvcHRzIHx8IHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9wdHMnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjYWxsYmFjaycpXG4gICAgfVxuXG4gICAgY29uc3QgeyBzaWduYWwsIG9wYXF1ZSwgcmVzcG9uc2VIZWFkZXJzIH0gPSBvcHRzXG5cbiAgICBpZiAoc2lnbmFsICYmIHR5cGVvZiBzaWduYWwub24gIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3NpZ25hbCBtdXN0IGJlIGFuIEV2ZW50RW1pdHRlciBvciBFdmVudFRhcmdldCcpXG4gICAgfVxuXG4gICAgc3VwZXIoJ1VORElDSV9DT05ORUNUJylcblxuICAgIHRoaXMub3BhcXVlID0gb3BhcXVlIHx8IG51bGxcbiAgICB0aGlzLnJlc3BvbnNlSGVhZGVycyA9IHJlc3BvbnNlSGVhZGVycyB8fCBudWxsXG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrXG4gICAgdGhpcy5hYm9ydCA9IG51bGxcblxuICAgIGFkZFNpZ25hbCh0aGlzLCBzaWduYWwpXG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0LCBjb250ZXh0KSB7XG4gICAgaWYgKCF0aGlzLmNhbGxiYWNrKSB7XG4gICAgICB0aHJvdyBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gICAgfVxuXG4gICAgdGhpcy5hYm9ydCA9IGFib3J0XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dFxuICB9XG5cbiAgb25IZWFkZXJzICgpIHtcbiAgICB0aHJvdyBuZXcgU29ja2V0RXJyb3IoJ2JhZCBjb25uZWN0JywgbnVsbClcbiAgfVxuXG4gIG9uVXBncmFkZSAoc3RhdHVzQ29kZSwgcmF3SGVhZGVycywgc29ja2V0KSB7XG4gICAgY29uc3QgeyBjYWxsYmFjaywgb3BhcXVlLCBjb250ZXh0IH0gPSB0aGlzXG5cbiAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG5cbiAgICBsZXQgaGVhZGVycyA9IHJhd0hlYWRlcnNcbiAgICAvLyBJbmRpY2F0ZXMgaXMgYW4gSFRUUDJTZXNzaW9uXG4gICAgaWYgKGhlYWRlcnMgIT0gbnVsbCkge1xuICAgICAgaGVhZGVycyA9IHRoaXMucmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VSYXdIZWFkZXJzKHJhd0hlYWRlcnMpIDogdXRpbC5wYXJzZUhlYWRlcnMocmF3SGVhZGVycylcbiAgICB9XG5cbiAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgbnVsbCwge1xuICAgICAgc3RhdHVzQ29kZSxcbiAgICAgIGhlYWRlcnMsXG4gICAgICBzb2NrZXQsXG4gICAgICBvcGFxdWUsXG4gICAgICBjb250ZXh0XG4gICAgfSlcbiAgfVxuXG4gIG9uRXJyb3IgKGVycikge1xuICAgIGNvbnN0IHsgY2FsbGJhY2ssIG9wYXF1ZSB9ID0gdGhpc1xuXG4gICAgcmVtb3ZlU2lnbmFsKHRoaXMpXG5cbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGNhbGxiYWNrLCBudWxsLCBlcnIsIHsgb3BhcXVlIH0pXG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb25uZWN0IChvcHRzLCBjYWxsYmFjaykge1xuICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25uZWN0LmNhbGwodGhpcywgb3B0cywgKGVyciwgZGF0YSkgPT4ge1xuICAgICAgICByZXR1cm4gZXJyID8gcmVqZWN0KGVycikgOiByZXNvbHZlKGRhdGEpXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IGNvbm5lY3RIYW5kbGVyID0gbmV3IENvbm5lY3RIYW5kbGVyKG9wdHMsIGNhbGxiYWNrKVxuICAgIHRoaXMuZGlzcGF0Y2goeyAuLi5vcHRzLCBtZXRob2Q6ICdDT05ORUNUJyB9LCBjb25uZWN0SGFuZGxlcilcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICAgIGNvbnN0IG9wYXF1ZSA9IG9wdHMgJiYgb3B0cy5vcGFxdWVcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhlcnIsIHsgb3BhcXVlIH0pKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29ubmVjdFxuIiwKICAgICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMucmVxdWVzdCA9IHJlcXVpcmUoJy4vYXBpLXJlcXVlc3QnKVxubW9kdWxlLmV4cG9ydHMuc3RyZWFtID0gcmVxdWlyZSgnLi9hcGktc3RyZWFtJylcbm1vZHVsZS5leHBvcnRzLnBpcGVsaW5lID0gcmVxdWlyZSgnLi9hcGktcGlwZWxpbmUnKVxubW9kdWxlLmV4cG9ydHMudXBncmFkZSA9IHJlcXVpcmUoJy4vYXBpLXVwZ3JhZGUnKVxubW9kdWxlLmV4cG9ydHMuY29ubmVjdCA9IHJlcXVpcmUoJy4vYXBpLWNvbm5lY3QnKVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBVbmRpY2lFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuXG5jbGFzcyBNb2NrTm90TWF0Y2hlZEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgTW9ja05vdE1hdGNoZWRFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnTW9ja05vdE1hdGNoZWRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdUaGUgcmVxdWVzdCBkb2VzIG5vdCBtYXRjaCBhbnkgcmVnaXN0ZXJlZCBtb2NrIGRpc3BhdGNoZXMnXG4gICAgdGhpcy5jb2RlID0gJ1VORF9NT0NLX0VSUl9NT0NLX05PVF9NQVRDSEVEJ1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBNb2NrTm90TWF0Y2hlZEVycm9yXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAga0FnZW50OiBTeW1ib2woJ2FnZW50JyksXG4gIGtPcHRpb25zOiBTeW1ib2woJ29wdGlvbnMnKSxcbiAga0ZhY3Rvcnk6IFN5bWJvbCgnZmFjdG9yeScpLFxuICBrRGlzcGF0Y2hlczogU3ltYm9sKCdkaXNwYXRjaGVzJyksXG4gIGtEaXNwYXRjaEtleTogU3ltYm9sKCdkaXNwYXRjaCBrZXknKSxcbiAga0RlZmF1bHRIZWFkZXJzOiBTeW1ib2woJ2RlZmF1bHQgaGVhZGVycycpLFxuICBrRGVmYXVsdFRyYWlsZXJzOiBTeW1ib2woJ2RlZmF1bHQgdHJhaWxlcnMnKSxcbiAga0NvbnRlbnRMZW5ndGg6IFN5bWJvbCgnY29udGVudCBsZW5ndGgnKSxcbiAga01vY2tBZ2VudDogU3ltYm9sKCdtb2NrIGFnZW50JyksXG4gIGtNb2NrQWdlbnRTZXQ6IFN5bWJvbCgnbW9jayBhZ2VudCBzZXQnKSxcbiAga01vY2tBZ2VudEdldDogU3ltYm9sKCdtb2NrIGFnZW50IGdldCcpLFxuICBrTW9ja0Rpc3BhdGNoOiBTeW1ib2woJ21vY2sgZGlzcGF0Y2gnKSxcbiAga0Nsb3NlOiBTeW1ib2woJ2Nsb3NlJyksXG4gIGtPcmlnaW5hbENsb3NlOiBTeW1ib2woJ29yaWdpbmFsIGFnZW50IGNsb3NlJyksXG4gIGtPcmlnaW46IFN5bWJvbCgnb3JpZ2luJyksXG4gIGtJc01vY2tBY3RpdmU6IFN5bWJvbCgnaXMgbW9jayBhY3RpdmUnKSxcbiAga05ldENvbm5lY3Q6IFN5bWJvbCgnbmV0IGNvbm5lY3QnKSxcbiAga0dldE5ldENvbm5lY3Q6IFN5bWJvbCgnZ2V0IG5ldCBjb25uZWN0JyksXG4gIGtDb25uZWN0ZWQ6IFN5bWJvbCgnY29ubmVjdGVkJylcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgTW9ja05vdE1hdGNoZWRFcnJvciB9ID0gcmVxdWlyZSgnLi9tb2NrLWVycm9ycycpXG5jb25zdCB7XG4gIGtEaXNwYXRjaGVzLFxuICBrTW9ja0FnZW50LFxuICBrT3JpZ2luYWxEaXNwYXRjaCxcbiAga09yaWdpbixcbiAga0dldE5ldENvbm5lY3Rcbn0gPSByZXF1aXJlKCcuL21vY2stc3ltYm9scycpXG5jb25zdCB7IGJ1aWxkVVJMLCBub3AgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IFNUQVRVU19DT0RFUyB9ID0gcmVxdWlyZSgnaHR0cCcpXG5jb25zdCB7XG4gIHR5cGVzOiB7XG4gICAgaXNQcm9taXNlXG4gIH1cbn0gPSByZXF1aXJlKCd1dGlsJylcblxuZnVuY3Rpb24gbWF0Y2hWYWx1ZSAobWF0Y2gsIHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgbWF0Y2ggPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIG1hdGNoID09PSB2YWx1ZVxuICB9XG4gIGlmIChtYXRjaCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgIHJldHVybiBtYXRjaC50ZXN0KHZhbHVlKVxuICB9XG4gIGlmICh0eXBlb2YgbWF0Y2ggPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gbWF0Y2godmFsdWUpID09PSB0cnVlXG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmZ1bmN0aW9uIGxvd2VyQ2FzZUVudHJpZXMgKGhlYWRlcnMpIHtcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhoZWFkZXJzKS5tYXAoKFtoZWFkZXJOYW1lLCBoZWFkZXJWYWx1ZV0pID0+IHtcbiAgICAgIHJldHVybiBbaGVhZGVyTmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpLCBoZWFkZXJWYWx1ZV1cbiAgICB9KVxuICApXG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4uLy4uL2luZGV4JykuSGVhZGVyc3xzdHJpbmdbXXxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSBoZWFkZXJzXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKi9cbmZ1bmN0aW9uIGdldEhlYWRlckJ5TmFtZSAoaGVhZGVycywga2V5KSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICBpZiAoaGVhZGVyc1tpXS50b0xvY2FsZUxvd2VyQ2FzZSgpID09PSBrZXkudG9Mb2NhbGVMb3dlckNhc2UoKSkge1xuICAgICAgICByZXR1cm4gaGVhZGVyc1tpICsgMV1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH0gZWxzZSBpZiAodHlwZW9mIGhlYWRlcnMuZ2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGhlYWRlcnMuZ2V0KGtleSlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbG93ZXJDYXNlRW50cmllcyhoZWFkZXJzKVtrZXkudG9Mb2NhbGVMb3dlckNhc2UoKV1cbiAgfVxufVxuXG4vKiogQHBhcmFtIHtzdHJpbmdbXX0gaGVhZGVycyAqL1xuZnVuY3Rpb24gYnVpbGRIZWFkZXJzRnJvbUFycmF5IChoZWFkZXJzKSB7IC8vIGZldGNoIEhlYWRlcnNMaXN0XG4gIGNvbnN0IGNsb25lID0gaGVhZGVycy5zbGljZSgpXG4gIGNvbnN0IGVudHJpZXMgPSBbXVxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgY2xvbmUubGVuZ3RoOyBpbmRleCArPSAyKSB7XG4gICAgZW50cmllcy5wdXNoKFtjbG9uZVtpbmRleF0sIGNsb25lW2luZGV4ICsgMV1dKVxuICB9XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoZW50cmllcylcbn1cblxuZnVuY3Rpb24gbWF0Y2hIZWFkZXJzIChtb2NrRGlzcGF0Y2gsIGhlYWRlcnMpIHtcbiAgaWYgKHR5cGVvZiBtb2NrRGlzcGF0Y2guaGVhZGVycyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7IC8vIGZldGNoIEhlYWRlcnNMaXN0XG4gICAgICBoZWFkZXJzID0gYnVpbGRIZWFkZXJzRnJvbUFycmF5KGhlYWRlcnMpXG4gICAgfVxuICAgIHJldHVybiBtb2NrRGlzcGF0Y2guaGVhZGVycyhoZWFkZXJzID8gbG93ZXJDYXNlRW50cmllcyhoZWFkZXJzKSA6IHt9KVxuICB9XG4gIGlmICh0eXBlb2YgbW9ja0Rpc3BhdGNoLmhlYWRlcnMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICBpZiAodHlwZW9mIGhlYWRlcnMgIT09ICdvYmplY3QnIHx8IHR5cGVvZiBtb2NrRGlzcGF0Y2guaGVhZGVycyAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGZvciAoY29uc3QgW21hdGNoSGVhZGVyTmFtZSwgbWF0Y2hIZWFkZXJWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMobW9ja0Rpc3BhdGNoLmhlYWRlcnMpKSB7XG4gICAgY29uc3QgaGVhZGVyVmFsdWUgPSBnZXRIZWFkZXJCeU5hbWUoaGVhZGVycywgbWF0Y2hIZWFkZXJOYW1lKVxuXG4gICAgaWYgKCFtYXRjaFZhbHVlKG1hdGNoSGVhZGVyVmFsdWUsIGhlYWRlclZhbHVlKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlXG59XG5cbmZ1bmN0aW9uIHNhZmVVcmwgKHBhdGgpIHtcbiAgaWYgKHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBwYXRoXG4gIH1cblxuICBjb25zdCBwYXRoU2VnbWVudHMgPSBwYXRoLnNwbGl0KCc/JylcblxuICBpZiAocGF0aFNlZ21lbnRzLmxlbmd0aCAhPT0gMikge1xuICAgIHJldHVybiBwYXRoXG4gIH1cblxuICBjb25zdCBxcCA9IG5ldyBVUkxTZWFyY2hQYXJhbXMocGF0aFNlZ21lbnRzLnBvcCgpKVxuICBxcC5zb3J0KClcbiAgcmV0dXJuIFsuLi5wYXRoU2VnbWVudHMsIHFwLnRvU3RyaW5nKCldLmpvaW4oJz8nKVxufVxuXG5mdW5jdGlvbiBtYXRjaEtleSAobW9ja0Rpc3BhdGNoLCB7IHBhdGgsIG1ldGhvZCwgYm9keSwgaGVhZGVycyB9KSB7XG4gIGNvbnN0IHBhdGhNYXRjaCA9IG1hdGNoVmFsdWUobW9ja0Rpc3BhdGNoLnBhdGgsIHBhdGgpXG4gIGNvbnN0IG1ldGhvZE1hdGNoID0gbWF0Y2hWYWx1ZShtb2NrRGlzcGF0Y2gubWV0aG9kLCBtZXRob2QpXG4gIGNvbnN0IGJvZHlNYXRjaCA9IHR5cGVvZiBtb2NrRGlzcGF0Y2guYm9keSAhPT0gJ3VuZGVmaW5lZCcgPyBtYXRjaFZhbHVlKG1vY2tEaXNwYXRjaC5ib2R5LCBib2R5KSA6IHRydWVcbiAgY29uc3QgaGVhZGVyc01hdGNoID0gbWF0Y2hIZWFkZXJzKG1vY2tEaXNwYXRjaCwgaGVhZGVycylcbiAgcmV0dXJuIHBhdGhNYXRjaCAmJiBtZXRob2RNYXRjaCAmJiBib2R5TWF0Y2ggJiYgaGVhZGVyc01hdGNoXG59XG5cbmZ1bmN0aW9uIGdldFJlc3BvbnNlRGF0YSAoZGF0YSkge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKGRhdGEpKSB7XG4gICAgcmV0dXJuIGRhdGFcbiAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZGF0YSlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZGF0YS50b1N0cmluZygpXG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0TW9ja0Rpc3BhdGNoIChtb2NrRGlzcGF0Y2hlcywga2V5KSB7XG4gIGNvbnN0IGJhc2VQYXRoID0ga2V5LnF1ZXJ5ID8gYnVpbGRVUkwoa2V5LnBhdGgsIGtleS5xdWVyeSkgOiBrZXkucGF0aFxuICBjb25zdCByZXNvbHZlZFBhdGggPSB0eXBlb2YgYmFzZVBhdGggPT09ICdzdHJpbmcnID8gc2FmZVVybChiYXNlUGF0aCkgOiBiYXNlUGF0aFxuXG4gIC8vIE1hdGNoIHBhdGhcbiAgbGV0IG1hdGNoZWRNb2NrRGlzcGF0Y2hlcyA9IG1vY2tEaXNwYXRjaGVzLmZpbHRlcigoeyBjb25zdW1lZCB9KSA9PiAhY29uc3VtZWQpLmZpbHRlcigoeyBwYXRoIH0pID0+IG1hdGNoVmFsdWUoc2FmZVVybChwYXRoKSwgcmVzb2x2ZWRQYXRoKSlcbiAgaWYgKG1hdGNoZWRNb2NrRGlzcGF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgTW9ja05vdE1hdGNoZWRFcnJvcihgTW9jayBkaXNwYXRjaCBub3QgbWF0Y2hlZCBmb3IgcGF0aCAnJHtyZXNvbHZlZFBhdGh9J2ApXG4gIH1cblxuICAvLyBNYXRjaCBtZXRob2RcbiAgbWF0Y2hlZE1vY2tEaXNwYXRjaGVzID0gbWF0Y2hlZE1vY2tEaXNwYXRjaGVzLmZpbHRlcigoeyBtZXRob2QgfSkgPT4gbWF0Y2hWYWx1ZShtZXRob2QsIGtleS5tZXRob2QpKVxuICBpZiAobWF0Y2hlZE1vY2tEaXNwYXRjaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBNb2NrTm90TWF0Y2hlZEVycm9yKGBNb2NrIGRpc3BhdGNoIG5vdCBtYXRjaGVkIGZvciBtZXRob2QgJyR7a2V5Lm1ldGhvZH0nYClcbiAgfVxuXG4gIC8vIE1hdGNoIGJvZHlcbiAgbWF0Y2hlZE1vY2tEaXNwYXRjaGVzID0gbWF0Y2hlZE1vY2tEaXNwYXRjaGVzLmZpbHRlcigoeyBib2R5IH0pID0+IHR5cGVvZiBib2R5ICE9PSAndW5kZWZpbmVkJyA/IG1hdGNoVmFsdWUoYm9keSwga2V5LmJvZHkpIDogdHJ1ZSlcbiAgaWYgKG1hdGNoZWRNb2NrRGlzcGF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgTW9ja05vdE1hdGNoZWRFcnJvcihgTW9jayBkaXNwYXRjaCBub3QgbWF0Y2hlZCBmb3IgYm9keSAnJHtrZXkuYm9keX0nYClcbiAgfVxuXG4gIC8vIE1hdGNoIGhlYWRlcnNcbiAgbWF0Y2hlZE1vY2tEaXNwYXRjaGVzID0gbWF0Y2hlZE1vY2tEaXNwYXRjaGVzLmZpbHRlcigobW9ja0Rpc3BhdGNoKSA9PiBtYXRjaEhlYWRlcnMobW9ja0Rpc3BhdGNoLCBrZXkuaGVhZGVycykpXG4gIGlmIChtYXRjaGVkTW9ja0Rpc3BhdGNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IE1vY2tOb3RNYXRjaGVkRXJyb3IoYE1vY2sgZGlzcGF0Y2ggbm90IG1hdGNoZWQgZm9yIGhlYWRlcnMgJyR7dHlwZW9mIGtleS5oZWFkZXJzID09PSAnb2JqZWN0JyA/IEpTT04uc3RyaW5naWZ5KGtleS5oZWFkZXJzKSA6IGtleS5oZWFkZXJzfSdgKVxuICB9XG5cbiAgcmV0dXJuIG1hdGNoZWRNb2NrRGlzcGF0Y2hlc1swXVxufVxuXG5mdW5jdGlvbiBhZGRNb2NrRGlzcGF0Y2ggKG1vY2tEaXNwYXRjaGVzLCBrZXksIGRhdGEpIHtcbiAgY29uc3QgYmFzZURhdGEgPSB7IHRpbWVzSW52b2tlZDogMCwgdGltZXM6IDEsIHBlcnNpc3Q6IGZhbHNlLCBjb25zdW1lZDogZmFsc2UgfVxuICBjb25zdCByZXBseURhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ2Z1bmN0aW9uJyA/IHsgY2FsbGJhY2s6IGRhdGEgfSA6IHsgLi4uZGF0YSB9XG4gIGNvbnN0IG5ld01vY2tEaXNwYXRjaCA9IHsgLi4uYmFzZURhdGEsIC4uLmtleSwgcGVuZGluZzogdHJ1ZSwgZGF0YTogeyBlcnJvcjogbnVsbCwgLi4ucmVwbHlEYXRhIH0gfVxuICBtb2NrRGlzcGF0Y2hlcy5wdXNoKG5ld01vY2tEaXNwYXRjaClcbiAgcmV0dXJuIG5ld01vY2tEaXNwYXRjaFxufVxuXG5mdW5jdGlvbiBkZWxldGVNb2NrRGlzcGF0Y2ggKG1vY2tEaXNwYXRjaGVzLCBrZXkpIHtcbiAgY29uc3QgaW5kZXggPSBtb2NrRGlzcGF0Y2hlcy5maW5kSW5kZXgoZGlzcGF0Y2ggPT4ge1xuICAgIGlmICghZGlzcGF0Y2guY29uc3VtZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICByZXR1cm4gbWF0Y2hLZXkoZGlzcGF0Y2gsIGtleSlcbiAgfSlcbiAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgIG1vY2tEaXNwYXRjaGVzLnNwbGljZShpbmRleCwgMSlcbiAgfVxufVxuXG5mdW5jdGlvbiBidWlsZEtleSAob3B0cykge1xuICBjb25zdCB7IHBhdGgsIG1ldGhvZCwgYm9keSwgaGVhZGVycywgcXVlcnkgfSA9IG9wdHNcbiAgcmV0dXJuIHtcbiAgICBwYXRoLFxuICAgIG1ldGhvZCxcbiAgICBib2R5LFxuICAgIGhlYWRlcnMsXG4gICAgcXVlcnlcbiAgfVxufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUtleVZhbHVlcyAoZGF0YSkge1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoZGF0YSkucmVkdWNlKChrZXlWYWx1ZVBhaXJzLCBba2V5LCB2YWx1ZV0pID0+IFtcbiAgICAuLi5rZXlWYWx1ZVBhaXJzLFxuICAgIEJ1ZmZlci5mcm9tKGAke2tleX1gKSxcbiAgICBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLm1hcCh4ID0+IEJ1ZmZlci5mcm9tKGAke3h9YCkpIDogQnVmZmVyLmZyb20oYCR7dmFsdWV9YClcbiAgXSwgW10pXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL1N0YXR1c1xuICogQHBhcmFtIHtudW1iZXJ9IHN0YXR1c0NvZGVcbiAqL1xuZnVuY3Rpb24gZ2V0U3RhdHVzVGV4dCAoc3RhdHVzQ29kZSkge1xuICByZXR1cm4gU1RBVFVTX0NPREVTW3N0YXR1c0NvZGVdIHx8ICd1bmtub3duJ1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRSZXNwb25zZSAoYm9keSkge1xuICBjb25zdCBidWZmZXJzID0gW11cbiAgZm9yIGF3YWl0IChjb25zdCBkYXRhIG9mIGJvZHkpIHtcbiAgICBidWZmZXJzLnB1c2goZGF0YSlcbiAgfVxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChidWZmZXJzKS50b1N0cmluZygndXRmOCcpXG59XG5cbi8qKlxuICogTW9jayBkaXNwYXRjaCBmdW5jdGlvbiB1c2VkIHRvIHNpbXVsYXRlIHVuZGljaSBkaXNwYXRjaGVzXG4gKi9cbmZ1bmN0aW9uIG1vY2tEaXNwYXRjaCAob3B0cywgaGFuZGxlcikge1xuICAvLyBHZXQgbW9jayBkaXNwYXRjaCBmcm9tIGJ1aWx0IGtleVxuICBjb25zdCBrZXkgPSBidWlsZEtleShvcHRzKVxuICBjb25zdCBtb2NrRGlzcGF0Y2ggPSBnZXRNb2NrRGlzcGF0Y2godGhpc1trRGlzcGF0Y2hlc10sIGtleSlcblxuICBtb2NrRGlzcGF0Y2gudGltZXNJbnZva2VkKytcblxuICAvLyBIZXJlJ3Mgd2hlcmUgd2UgcmVzb2x2ZSBhIGNhbGxiYWNrIGlmIGEgY2FsbGJhY2sgaXMgcHJlc2VudCBmb3IgdGhlIGRpc3BhdGNoIGRhdGEuXG4gIGlmIChtb2NrRGlzcGF0Y2guZGF0YS5jYWxsYmFjaykge1xuICAgIG1vY2tEaXNwYXRjaC5kYXRhID0geyAuLi5tb2NrRGlzcGF0Y2guZGF0YSwgLi4ubW9ja0Rpc3BhdGNoLmRhdGEuY2FsbGJhY2sob3B0cykgfVxuICB9XG5cbiAgLy8gUGFyc2UgbW9ja0Rpc3BhdGNoIGRhdGFcbiAgY29uc3QgeyBkYXRhOiB7IHN0YXR1c0NvZGUsIGRhdGEsIGhlYWRlcnMsIHRyYWlsZXJzLCBlcnJvciB9LCBkZWxheSwgcGVyc2lzdCB9ID0gbW9ja0Rpc3BhdGNoXG4gIGNvbnN0IHsgdGltZXNJbnZva2VkLCB0aW1lcyB9ID0gbW9ja0Rpc3BhdGNoXG5cbiAgLy8gSWYgaXQncyB1c2VkIHVwIGFuZCBub3QgcGVyc2lzdGVudCwgbWFyayBhcyBjb25zdW1lZFxuICBtb2NrRGlzcGF0Y2guY29uc3VtZWQgPSAhcGVyc2lzdCAmJiB0aW1lc0ludm9rZWQgPj0gdGltZXNcbiAgbW9ja0Rpc3BhdGNoLnBlbmRpbmcgPSB0aW1lc0ludm9rZWQgPCB0aW1lc1xuXG4gIC8vIElmIHNwZWNpZmllZCwgdHJpZ2dlciBkaXNwYXRjaCBlcnJvclxuICBpZiAoZXJyb3IgIT09IG51bGwpIHtcbiAgICBkZWxldGVNb2NrRGlzcGF0Y2godGhpc1trRGlzcGF0Y2hlc10sIGtleSlcbiAgICBoYW5kbGVyLm9uRXJyb3IoZXJyb3IpXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8vIEhhbmRsZSB0aGUgcmVxdWVzdCB3aXRoIGEgZGVsYXkgaWYgbmVjZXNzYXJ5XG4gIGlmICh0eXBlb2YgZGVsYXkgPT09ICdudW1iZXInICYmIGRlbGF5ID4gMCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaGFuZGxlUmVwbHkodGhpc1trRGlzcGF0Y2hlc10pXG4gICAgfSwgZGVsYXkpXG4gIH0gZWxzZSB7XG4gICAgaGFuZGxlUmVwbHkodGhpc1trRGlzcGF0Y2hlc10pXG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVSZXBseSAobW9ja0Rpc3BhdGNoZXMsIF9kYXRhID0gZGF0YSkge1xuICAgIC8vIGZldGNoJ3MgSGVhZGVyc0xpc3QgaXMgYSAxRCBzdHJpbmcgYXJyYXlcbiAgICBjb25zdCBvcHRzSGVhZGVycyA9IEFycmF5LmlzQXJyYXkob3B0cy5oZWFkZXJzKVxuICAgICAgPyBidWlsZEhlYWRlcnNGcm9tQXJyYXkob3B0cy5oZWFkZXJzKVxuICAgICAgOiBvcHRzLmhlYWRlcnNcbiAgICBjb25zdCBib2R5ID0gdHlwZW9mIF9kYXRhID09PSAnZnVuY3Rpb24nXG4gICAgICA/IF9kYXRhKHsgLi4ub3B0cywgaGVhZGVyczogb3B0c0hlYWRlcnMgfSlcbiAgICAgIDogX2RhdGFcblxuICAgIC8vIHV0aWwudHlwZXMuaXNQcm9taXNlIGlzIGxpa2VseSBuZWVkZWQgZm9yIGplc3QuXG4gICAgaWYgKGlzUHJvbWlzZShib2R5KSkge1xuICAgICAgLy8gSWYgaGFuZGxlUmVwbHkgaXMgYXN5bmNocm9ub3VzLCB0aHJvd2luZyBhbiBlcnJvclxuICAgICAgLy8gaW4gdGhlIGNhbGxiYWNrIHdpbGwgcmVqZWN0IHRoZSBwcm9taXNlLCByYXRoZXIgdGhhblxuICAgICAgLy8gc3luY2hyb25vdXNseSB0aHJvdyB0aGUgZXJyb3IsIHdoaWNoIGJyZWFrcyBzb21lIHRlc3RzLlxuICAgICAgLy8gUmF0aGVyLCB3ZSB3YWl0IGZvciB0aGUgY2FsbGJhY2sgdG8gcmVzb2x2ZSBpZiBpdCBpcyBhXG4gICAgICAvLyBwcm9taXNlLCBhbmQgdGhlbiByZS1ydW4gaGFuZGxlUmVwbHkgd2l0aCB0aGUgbmV3IGJvZHkuXG4gICAgICBib2R5LnRoZW4oKG5ld0RhdGEpID0+IGhhbmRsZVJlcGx5KG1vY2tEaXNwYXRjaGVzLCBuZXdEYXRhKSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9IGdldFJlc3BvbnNlRGF0YShib2R5KVxuICAgIGNvbnN0IHJlc3BvbnNlSGVhZGVycyA9IGdlbmVyYXRlS2V5VmFsdWVzKGhlYWRlcnMpXG4gICAgY29uc3QgcmVzcG9uc2VUcmFpbGVycyA9IGdlbmVyYXRlS2V5VmFsdWVzKHRyYWlsZXJzKVxuXG4gICAgaGFuZGxlci5hYm9ydCA9IG5vcFxuICAgIGhhbmRsZXIub25IZWFkZXJzKHN0YXR1c0NvZGUsIHJlc3BvbnNlSGVhZGVycywgcmVzdW1lLCBnZXRTdGF0dXNUZXh0KHN0YXR1c0NvZGUpKVxuICAgIGhhbmRsZXIub25EYXRhKEJ1ZmZlci5mcm9tKHJlc3BvbnNlRGF0YSkpXG4gICAgaGFuZGxlci5vbkNvbXBsZXRlKHJlc3BvbnNlVHJhaWxlcnMpXG4gICAgZGVsZXRlTW9ja0Rpc3BhdGNoKG1vY2tEaXNwYXRjaGVzLCBrZXkpXG4gIH1cblxuICBmdW5jdGlvbiByZXN1bWUgKCkge31cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiBidWlsZE1vY2tEaXNwYXRjaCAoKSB7XG4gIGNvbnN0IGFnZW50ID0gdGhpc1trTW9ja0FnZW50XVxuICBjb25zdCBvcmlnaW4gPSB0aGlzW2tPcmlnaW5dXG4gIGNvbnN0IG9yaWdpbmFsRGlzcGF0Y2ggPSB0aGlzW2tPcmlnaW5hbERpc3BhdGNoXVxuXG4gIHJldHVybiBmdW5jdGlvbiBkaXNwYXRjaCAob3B0cywgaGFuZGxlcikge1xuICAgIGlmIChhZ2VudC5pc01vY2tBY3RpdmUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG1vY2tEaXNwYXRjaC5jYWxsKHRoaXMsIG9wdHMsIGhhbmRsZXIpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBNb2NrTm90TWF0Y2hlZEVycm9yKSB7XG4gICAgICAgICAgY29uc3QgbmV0Q29ubmVjdCA9IGFnZW50W2tHZXROZXRDb25uZWN0XSgpXG4gICAgICAgICAgaWYgKG5ldENvbm5lY3QgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgTW9ja05vdE1hdGNoZWRFcnJvcihgJHtlcnJvci5tZXNzYWdlfTogc3Vic2VxdWVudCByZXF1ZXN0IHRvIG9yaWdpbiAke29yaWdpbn0gd2FzIG5vdCBhbGxvd2VkIChuZXQuY29ubmVjdCBkaXNhYmxlZClgKVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY2hlY2tOZXRDb25uZWN0KG5ldENvbm5lY3QsIG9yaWdpbikpIHtcbiAgICAgICAgICAgIG9yaWdpbmFsRGlzcGF0Y2guY2FsbCh0aGlzLCBvcHRzLCBoYW5kbGVyKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgTW9ja05vdE1hdGNoZWRFcnJvcihgJHtlcnJvci5tZXNzYWdlfTogc3Vic2VxdWVudCByZXF1ZXN0IHRvIG9yaWdpbiAke29yaWdpbn0gd2FzIG5vdCBhbGxvd2VkIChuZXQuY29ubmVjdCBpcyBub3QgZW5hYmxlZCBmb3IgdGhpcyBvcmlnaW4pYClcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvcmlnaW5hbERpc3BhdGNoLmNhbGwodGhpcywgb3B0cywgaGFuZGxlcilcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tOZXRDb25uZWN0IChuZXRDb25uZWN0LCBvcmlnaW4pIHtcbiAgY29uc3QgdXJsID0gbmV3IFVSTChvcmlnaW4pXG4gIGlmIChuZXRDb25uZWN0ID09PSB0cnVlKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG5ldENvbm5lY3QpICYmIG5ldENvbm5lY3Quc29tZSgobWF0Y2hlcikgPT4gbWF0Y2hWYWx1ZShtYXRjaGVyLCB1cmwuaG9zdCkpKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gYnVpbGRNb2NrT3B0aW9ucyAob3B0cykge1xuICBpZiAob3B0cykge1xuICAgIGNvbnN0IHsgYWdlbnQsIC4uLm1vY2tPcHRpb25zIH0gPSBvcHRzXG4gICAgcmV0dXJuIG1vY2tPcHRpb25zXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldFJlc3BvbnNlRGF0YSxcbiAgZ2V0TW9ja0Rpc3BhdGNoLFxuICBhZGRNb2NrRGlzcGF0Y2gsXG4gIGRlbGV0ZU1vY2tEaXNwYXRjaCxcbiAgYnVpbGRLZXksXG4gIGdlbmVyYXRlS2V5VmFsdWVzLFxuICBtYXRjaFZhbHVlLFxuICBnZXRSZXNwb25zZSxcbiAgZ2V0U3RhdHVzVGV4dCxcbiAgbW9ja0Rpc3BhdGNoLFxuICBidWlsZE1vY2tEaXNwYXRjaCxcbiAgY2hlY2tOZXRDb25uZWN0LFxuICBidWlsZE1vY2tPcHRpb25zLFxuICBnZXRIZWFkZXJCeU5hbWVcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgZ2V0UmVzcG9uc2VEYXRhLCBidWlsZEtleSwgYWRkTW9ja0Rpc3BhdGNoIH0gPSByZXF1aXJlKCcuL21vY2stdXRpbHMnKVxuY29uc3Qge1xuICBrRGlzcGF0Y2hlcyxcbiAga0Rpc3BhdGNoS2V5LFxuICBrRGVmYXVsdEhlYWRlcnMsXG4gIGtEZWZhdWx0VHJhaWxlcnMsXG4gIGtDb250ZW50TGVuZ3RoLFxuICBrTW9ja0Rpc3BhdGNoXG59ID0gcmVxdWlyZSgnLi9tb2NrLXN5bWJvbHMnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgeyBidWlsZFVSTCB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcblxuLyoqXG4gKiBEZWZpbmVzIHRoZSBzY29wZSBBUEkgZm9yIGFuIGludGVyY2VwdG9yIHJlcGx5XG4gKi9cbmNsYXNzIE1vY2tTY29wZSB7XG4gIGNvbnN0cnVjdG9yIChtb2NrRGlzcGF0Y2gpIHtcbiAgICB0aGlzW2tNb2NrRGlzcGF0Y2hdID0gbW9ja0Rpc3BhdGNoXG4gIH1cblxuICAvKipcbiAgICogRGVsYXkgYSByZXBseSBieSBhIHNldCBhbW91bnQgaW4gbXMuXG4gICAqL1xuICBkZWxheSAod2FpdEluTXMpIHtcbiAgICBpZiAodHlwZW9mIHdhaXRJbk1zICE9PSAnbnVtYmVyJyB8fCAhTnVtYmVyLmlzSW50ZWdlcih3YWl0SW5NcykgfHwgd2FpdEluTXMgPD0gMCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCd3YWl0SW5NcyBtdXN0IGJlIGEgdmFsaWQgaW50ZWdlciA+IDAnKVxuICAgIH1cblxuICAgIHRoaXNba01vY2tEaXNwYXRjaF0uZGVsYXkgPSB3YWl0SW5Nc1xuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogRm9yIGEgZGVmaW5lZCByZXBseSwgbmV2ZXIgbWFyayBhcyBjb25zdW1lZC5cbiAgICovXG4gIHBlcnNpc3QgKCkge1xuICAgIHRoaXNba01vY2tEaXNwYXRjaF0ucGVyc2lzdCA9IHRydWVcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93IG9uZSB0byBkZWZpbmUgYSByZXBseSBmb3IgYSBzZXQgYW1vdW50IG9mIG1hdGNoaW5nIHJlcXVlc3RzLlxuICAgKi9cbiAgdGltZXMgKHJlcGVhdFRpbWVzKSB7XG4gICAgaWYgKHR5cGVvZiByZXBlYXRUaW1lcyAhPT0gJ251bWJlcicgfHwgIU51bWJlci5pc0ludGVnZXIocmVwZWF0VGltZXMpIHx8IHJlcGVhdFRpbWVzIDw9IDApIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigncmVwZWF0VGltZXMgbXVzdCBiZSBhIHZhbGlkIGludGVnZXIgPiAwJylcbiAgICB9XG5cbiAgICB0aGlzW2tNb2NrRGlzcGF0Y2hdLnRpbWVzID0gcmVwZWF0VGltZXNcbiAgICByZXR1cm4gdGhpc1xuICB9XG59XG5cbi8qKlxuICogRGVmaW5lcyBhbiBpbnRlcmNlcHRvciBmb3IgYSBNb2NrXG4gKi9cbmNsYXNzIE1vY2tJbnRlcmNlcHRvciB7XG4gIGNvbnN0cnVjdG9yIChvcHRzLCBtb2NrRGlzcGF0Y2hlcykge1xuICAgIGlmICh0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignb3B0cyBtdXN0IGJlIGFuIG9iamVjdCcpXG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3B0cy5wYXRoID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdvcHRzLnBhdGggbXVzdCBiZSBkZWZpbmVkJylcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvcHRzLm1ldGhvZCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIG9wdHMubWV0aG9kID0gJ0dFVCdcbiAgICB9XG4gICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8xMjQ1XG4gICAgLy8gQXMgcGVyIFJGQyAzOTg2LCBjbGllbnRzIGFyZSBub3Qgc3VwcG9zZWQgdG8gc2VuZCBVUklcbiAgICAvLyBmcmFnbWVudHMgdG8gc2VydmVycyB3aGVuIHRoZXkgcmV0cmlldmUgYSBkb2N1bWVudCxcbiAgICBpZiAodHlwZW9mIG9wdHMucGF0aCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmIChvcHRzLnF1ZXJ5KSB7XG4gICAgICAgIG9wdHMucGF0aCA9IGJ1aWxkVVJMKG9wdHMucGF0aCwgb3B0cy5xdWVyeSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE1hdGNoZXMgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvYmxvYi9tYWluL2xpYi9mZXRjaC9pbmRleC5qcyNMMTgxMVxuICAgICAgICBjb25zdCBwYXJzZWRVUkwgPSBuZXcgVVJMKG9wdHMucGF0aCwgJ2RhdGE6Ly8nKVxuICAgICAgICBvcHRzLnBhdGggPSBwYXJzZWRVUkwucGF0aG5hbWUgKyBwYXJzZWRVUkwuc2VhcmNoXG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3B0cy5tZXRob2QgPT09ICdzdHJpbmcnKSB7XG4gICAgICBvcHRzLm1ldGhvZCA9IG9wdHMubWV0aG9kLnRvVXBwZXJDYXNlKClcbiAgICB9XG5cbiAgICB0aGlzW2tEaXNwYXRjaEtleV0gPSBidWlsZEtleShvcHRzKVxuICAgIHRoaXNba0Rpc3BhdGNoZXNdID0gbW9ja0Rpc3BhdGNoZXNcbiAgICB0aGlzW2tEZWZhdWx0SGVhZGVyc10gPSB7fVxuICAgIHRoaXNba0RlZmF1bHRUcmFpbGVyc10gPSB7fVxuICAgIHRoaXNba0NvbnRlbnRMZW5ndGhdID0gZmFsc2VcbiAgfVxuXG4gIGNyZWF0ZU1vY2tTY29wZURpc3BhdGNoRGF0YSAoc3RhdHVzQ29kZSwgZGF0YSwgcmVzcG9uc2VPcHRpb25zID0ge30pIHtcbiAgICBjb25zdCByZXNwb25zZURhdGEgPSBnZXRSZXNwb25zZURhdGEoZGF0YSlcbiAgICBjb25zdCBjb250ZW50TGVuZ3RoID0gdGhpc1trQ29udGVudExlbmd0aF0gPyB7ICdjb250ZW50LWxlbmd0aCc6IHJlc3BvbnNlRGF0YS5sZW5ndGggfSA6IHt9XG4gICAgY29uc3QgaGVhZGVycyA9IHsgLi4udGhpc1trRGVmYXVsdEhlYWRlcnNdLCAuLi5jb250ZW50TGVuZ3RoLCAuLi5yZXNwb25zZU9wdGlvbnMuaGVhZGVycyB9XG4gICAgY29uc3QgdHJhaWxlcnMgPSB7IC4uLnRoaXNba0RlZmF1bHRUcmFpbGVyc10sIC4uLnJlc3BvbnNlT3B0aW9ucy50cmFpbGVycyB9XG5cbiAgICByZXR1cm4geyBzdGF0dXNDb2RlLCBkYXRhLCBoZWFkZXJzLCB0cmFpbGVycyB9XG4gIH1cblxuICB2YWxpZGF0ZVJlcGx5UGFyYW1ldGVycyAoc3RhdHVzQ29kZSwgZGF0YSwgcmVzcG9uc2VPcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBzdGF0dXNDb2RlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdzdGF0dXNDb2RlIG11c3QgYmUgZGVmaW5lZCcpXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignZGF0YSBtdXN0IGJlIGRlZmluZWQnKVxuICAgIH1cbiAgICBpZiAodHlwZW9mIHJlc3BvbnNlT3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigncmVzcG9uc2VPcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0JylcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTW9jayBhbiB1bmRpY2kgcmVxdWVzdCB3aXRoIGEgZGVmaW5lZCByZXBseS5cbiAgICovXG4gIHJlcGx5IChyZXBseURhdGEpIHtcbiAgICAvLyBWYWx1ZXMgb2YgcmVwbHkgYXJlbid0IGF2YWlsYWJsZSByaWdodCBub3cgYXMgdGhleVxuICAgIC8vIGNhbiBvbmx5IGJlIGF2YWlsYWJsZSB3aGVuIHRoZSByZXBseSBjYWxsYmFjayBpcyBpbnZva2VkLlxuICAgIGlmICh0eXBlb2YgcmVwbHlEYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBXZSdsbCBmaXJzdCB3cmFwIHRoZSBwcm92aWRlZCBjYWxsYmFjayBpbiBhbm90aGVyIGZ1bmN0aW9uLFxuICAgICAgLy8gdGhpcyBmdW5jdGlvbiB3aWxsIHByb3Blcmx5IHJlc29sdmUgdGhlIGRhdGEgZnJvbSB0aGUgY2FsbGJhY2tcbiAgICAgIC8vIHdoZW4gaW52b2tlZC5cbiAgICAgIGNvbnN0IHdyYXBwZWREZWZhdWx0c0NhbGxiYWNrID0gKG9wdHMpID0+IHtcbiAgICAgICAgLy8gT3VyIHJlcGx5IG9wdGlvbnMgY2FsbGJhY2sgY29udGFpbnMgdGhlIHBhcmFtZXRlciBmb3Igc3RhdHVzQ29kZSwgZGF0YSBhbmQgb3B0aW9ucy5cbiAgICAgICAgY29uc3QgcmVzb2x2ZWREYXRhID0gcmVwbHlEYXRhKG9wdHMpXG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgaXQgaXMgaW4gdGhlIHJpZ2h0IGZvcm1hdFxuICAgICAgICBpZiAodHlwZW9mIHJlc29sdmVkRGF0YSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3JlcGx5IG9wdGlvbnMgY2FsbGJhY2sgbXVzdCByZXR1cm4gYW4gb2JqZWN0JylcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgc3RhdHVzQ29kZSwgZGF0YSA9ICcnLCByZXNwb25zZU9wdGlvbnMgPSB7fSB9ID0gcmVzb2x2ZWREYXRhXG4gICAgICAgIHRoaXMudmFsaWRhdGVSZXBseVBhcmFtZXRlcnMoc3RhdHVzQ29kZSwgZGF0YSwgcmVzcG9uc2VPcHRpb25zKVxuICAgICAgICAvLyBTaW5jZSB0aGUgdmFsdWVzIGNhbiBiZSBvYnRhaW5lZCBpbW1lZGlhdGVseSB3ZSByZXR1cm4gdGhlbVxuICAgICAgICAvLyBmcm9tIHRoaXMgaGlnaGVyIG9yZGVyIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSByZXNvbHZlZCBsYXRlci5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi50aGlzLmNyZWF0ZU1vY2tTY29wZURpc3BhdGNoRGF0YShzdGF0dXNDb2RlLCBkYXRhLCByZXNwb25zZU9wdGlvbnMpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQWRkIHVzdWFsIGRpc3BhdGNoIGRhdGEsIGJ1dCB0aGlzIHRpbWUgc2V0IHRoZSBkYXRhIHBhcmFtZXRlciB0byBmdW5jdGlvbiB0aGF0IHdpbGwgZXZlbnR1YWxseSBwcm92aWRlIGRhdGEuXG4gICAgICBjb25zdCBuZXdNb2NrRGlzcGF0Y2ggPSBhZGRNb2NrRGlzcGF0Y2godGhpc1trRGlzcGF0Y2hlc10sIHRoaXNba0Rpc3BhdGNoS2V5XSwgd3JhcHBlZERlZmF1bHRzQ2FsbGJhY2spXG4gICAgICByZXR1cm4gbmV3IE1vY2tTY29wZShuZXdNb2NrRGlzcGF0Y2gpXG4gICAgfVxuXG4gICAgLy8gV2UgY2FuIGhhdmUgZWl0aGVyIG9uZSBvciB0aHJlZSBwYXJhbWV0ZXJzLCBpZiB3ZSBnZXQgaGVyZSxcbiAgICAvLyB3ZSBzaG91bGQgaGF2ZSAxLTMgcGFyYW1ldGVycy4gU28gd2Ugc3ByZWFkIHRoZSBhcmd1bWVudHMgb2ZcbiAgICAvLyB0aGlzIGZ1bmN0aW9uIHRvIG9idGFpbiB0aGUgcGFyYW1ldGVycywgc2luY2UgcmVwbHlEYXRhIHdpbGwgYWx3YXlzXG4gICAgLy8ganVzdCBiZSB0aGUgc3RhdHVzQ29kZS5cbiAgICBjb25zdCBbc3RhdHVzQ29kZSwgZGF0YSA9ICcnLCByZXNwb25zZU9wdGlvbnMgPSB7fV0gPSBbLi4uYXJndW1lbnRzXVxuICAgIHRoaXMudmFsaWRhdGVSZXBseVBhcmFtZXRlcnMoc3RhdHVzQ29kZSwgZGF0YSwgcmVzcG9uc2VPcHRpb25zKVxuXG4gICAgLy8gU2VuZCBpbi1hbHJlYWR5IHByb3ZpZGVkIGRhdGEgbGlrZSB1c3VhbFxuICAgIGNvbnN0IGRpc3BhdGNoRGF0YSA9IHRoaXMuY3JlYXRlTW9ja1Njb3BlRGlzcGF0Y2hEYXRhKHN0YXR1c0NvZGUsIGRhdGEsIHJlc3BvbnNlT3B0aW9ucylcbiAgICBjb25zdCBuZXdNb2NrRGlzcGF0Y2ggPSBhZGRNb2NrRGlzcGF0Y2godGhpc1trRGlzcGF0Y2hlc10sIHRoaXNba0Rpc3BhdGNoS2V5XSwgZGlzcGF0Y2hEYXRhKVxuICAgIHJldHVybiBuZXcgTW9ja1Njb3BlKG5ld01vY2tEaXNwYXRjaClcbiAgfVxuXG4gIC8qKlxuICAgKiBNb2NrIGFuIHVuZGljaSByZXF1ZXN0IHdpdGggYSBkZWZpbmVkIGVycm9yLlxuICAgKi9cbiAgcmVwbHlXaXRoRXJyb3IgKGVycm9yKSB7XG4gICAgaWYgKHR5cGVvZiBlcnJvciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignZXJyb3IgbXVzdCBiZSBkZWZpbmVkJylcbiAgICB9XG5cbiAgICBjb25zdCBuZXdNb2NrRGlzcGF0Y2ggPSBhZGRNb2NrRGlzcGF0Y2godGhpc1trRGlzcGF0Y2hlc10sIHRoaXNba0Rpc3BhdGNoS2V5XSwgeyBlcnJvciB9KVxuICAgIHJldHVybiBuZXcgTW9ja1Njb3BlKG5ld01vY2tEaXNwYXRjaClcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgZGVmYXVsdCByZXBseSBoZWFkZXJzIG9uIHRoZSBpbnRlcmNlcHRvciBmb3Igc3Vic2VxdWVudCByZXBsaWVzXG4gICAqL1xuICBkZWZhdWx0UmVwbHlIZWFkZXJzIChoZWFkZXJzKSB7XG4gICAgaWYgKHR5cGVvZiBoZWFkZXJzID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdoZWFkZXJzIG11c3QgYmUgZGVmaW5lZCcpXG4gICAgfVxuXG4gICAgdGhpc1trRGVmYXVsdEhlYWRlcnNdID0gaGVhZGVyc1xuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogU2V0IGRlZmF1bHQgcmVwbHkgdHJhaWxlcnMgb24gdGhlIGludGVyY2VwdG9yIGZvciBzdWJzZXF1ZW50IHJlcGxpZXNcbiAgICovXG4gIGRlZmF1bHRSZXBseVRyYWlsZXJzICh0cmFpbGVycykge1xuICAgIGlmICh0eXBlb2YgdHJhaWxlcnMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3RyYWlsZXJzIG11c3QgYmUgZGVmaW5lZCcpXG4gICAgfVxuXG4gICAgdGhpc1trRGVmYXVsdFRyYWlsZXJzXSA9IHRyYWlsZXJzXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgcmVwbHkgY29udGVudCBsZW5ndGggaGVhZGVyIGZvciByZXBsaWVzIG9uIHRoZSBpbnRlcmNlcHRvclxuICAgKi9cbiAgcmVwbHlDb250ZW50TGVuZ3RoICgpIHtcbiAgICB0aGlzW2tDb250ZW50TGVuZ3RoXSA9IHRydWVcbiAgICByZXR1cm4gdGhpc1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzLk1vY2tJbnRlcmNlcHRvciA9IE1vY2tJbnRlcmNlcHRvclxubW9kdWxlLmV4cG9ydHMuTW9ja1Njb3BlID0gTW9ja1Njb3BlXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHByb21pc2lmeSB9ID0gcmVxdWlyZSgndXRpbCcpXG5jb25zdCBDbGllbnQgPSByZXF1aXJlKCcuLi9jbGllbnQnKVxuY29uc3QgeyBidWlsZE1vY2tEaXNwYXRjaCB9ID0gcmVxdWlyZSgnLi9tb2NrLXV0aWxzJylcbmNvbnN0IHtcbiAga0Rpc3BhdGNoZXMsXG4gIGtNb2NrQWdlbnQsXG4gIGtDbG9zZSxcbiAga09yaWdpbmFsQ2xvc2UsXG4gIGtPcmlnaW4sXG4gIGtPcmlnaW5hbERpc3BhdGNoLFxuICBrQ29ubmVjdGVkXG59ID0gcmVxdWlyZSgnLi9tb2NrLXN5bWJvbHMnKVxuY29uc3QgeyBNb2NrSW50ZXJjZXB0b3IgfSA9IHJlcXVpcmUoJy4vbW9jay1pbnRlcmNlcHRvcicpXG5jb25zdCBTeW1ib2xzID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcblxuLyoqXG4gKiBNb2NrQ2xpZW50IHByb3ZpZGVzIGFuIEFQSSB0aGF0IGV4dGVuZHMgdGhlIENsaWVudCB0byBpbmZsdWVuY2UgdGhlIG1vY2tEaXNwYXRjaGVzLlxuICovXG5jbGFzcyBNb2NrQ2xpZW50IGV4dGVuZHMgQ2xpZW50IHtcbiAgY29uc3RydWN0b3IgKG9yaWdpbiwgb3B0cykge1xuICAgIHN1cGVyKG9yaWdpbiwgb3B0cylcblxuICAgIGlmICghb3B0cyB8fCAhb3B0cy5hZ2VudCB8fCB0eXBlb2Ygb3B0cy5hZ2VudC5kaXNwYXRjaCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdBcmd1bWVudCBvcHRzLmFnZW50IG11c3QgaW1wbGVtZW50IEFnZW50JylcbiAgICB9XG5cbiAgICB0aGlzW2tNb2NrQWdlbnRdID0gb3B0cy5hZ2VudFxuICAgIHRoaXNba09yaWdpbl0gPSBvcmlnaW5cbiAgICB0aGlzW2tEaXNwYXRjaGVzXSA9IFtdXG4gICAgdGhpc1trQ29ubmVjdGVkXSA9IDFcbiAgICB0aGlzW2tPcmlnaW5hbERpc3BhdGNoXSA9IHRoaXMuZGlzcGF0Y2hcbiAgICB0aGlzW2tPcmlnaW5hbENsb3NlXSA9IHRoaXMuY2xvc2UuYmluZCh0aGlzKVxuXG4gICAgdGhpcy5kaXNwYXRjaCA9IGJ1aWxkTW9ja0Rpc3BhdGNoLmNhbGwodGhpcylcbiAgICB0aGlzLmNsb3NlID0gdGhpc1trQ2xvc2VdXG4gIH1cblxuICBnZXQgW1N5bWJvbHMua0Nvbm5lY3RlZF0gKCkge1xuICAgIHJldHVybiB0aGlzW2tDb25uZWN0ZWRdXG4gIH1cblxuICAvKipcbiAgICogU2V0cyB1cCB0aGUgYmFzZSBpbnRlcmNlcHRvciBmb3IgbW9ja2luZyByZXBsaWVzIGZyb20gdW5kaWNpLlxuICAgKi9cbiAgaW50ZXJjZXB0IChvcHRzKSB7XG4gICAgcmV0dXJuIG5ldyBNb2NrSW50ZXJjZXB0b3Iob3B0cywgdGhpc1trRGlzcGF0Y2hlc10pXG4gIH1cblxuICBhc3luYyBba0Nsb3NlXSAoKSB7XG4gICAgYXdhaXQgcHJvbWlzaWZ5KHRoaXNba09yaWdpbmFsQ2xvc2VdKSgpXG4gICAgdGhpc1trQ29ubmVjdGVkXSA9IDBcbiAgICB0aGlzW2tNb2NrQWdlbnRdW1N5bWJvbHMua0NsaWVudHNdLmRlbGV0ZSh0aGlzW2tPcmlnaW5dKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gTW9ja0NsaWVudFxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBwcm9taXNpZnkgfSA9IHJlcXVpcmUoJ3V0aWwnKVxuY29uc3QgUG9vbCA9IHJlcXVpcmUoJy4uL3Bvb2wnKVxuY29uc3QgeyBidWlsZE1vY2tEaXNwYXRjaCB9ID0gcmVxdWlyZSgnLi9tb2NrLXV0aWxzJylcbmNvbnN0IHtcbiAga0Rpc3BhdGNoZXMsXG4gIGtNb2NrQWdlbnQsXG4gIGtDbG9zZSxcbiAga09yaWdpbmFsQ2xvc2UsXG4gIGtPcmlnaW4sXG4gIGtPcmlnaW5hbERpc3BhdGNoLFxuICBrQ29ubmVjdGVkXG59ID0gcmVxdWlyZSgnLi9tb2NrLXN5bWJvbHMnKVxuY29uc3QgeyBNb2NrSW50ZXJjZXB0b3IgfSA9IHJlcXVpcmUoJy4vbW9jay1pbnRlcmNlcHRvcicpXG5jb25zdCBTeW1ib2xzID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcblxuLyoqXG4gKiBNb2NrUG9vbCBwcm92aWRlcyBhbiBBUEkgdGhhdCBleHRlbmRzIHRoZSBQb29sIHRvIGluZmx1ZW5jZSB0aGUgbW9ja0Rpc3BhdGNoZXMuXG4gKi9cbmNsYXNzIE1vY2tQb29sIGV4dGVuZHMgUG9vbCB7XG4gIGNvbnN0cnVjdG9yIChvcmlnaW4sIG9wdHMpIHtcbiAgICBzdXBlcihvcmlnaW4sIG9wdHMpXG5cbiAgICBpZiAoIW9wdHMgfHwgIW9wdHMuYWdlbnQgfHwgdHlwZW9mIG9wdHMuYWdlbnQuZGlzcGF0Y2ggIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignQXJndW1lbnQgb3B0cy5hZ2VudCBtdXN0IGltcGxlbWVudCBBZ2VudCcpXG4gICAgfVxuXG4gICAgdGhpc1trTW9ja0FnZW50XSA9IG9wdHMuYWdlbnRcbiAgICB0aGlzW2tPcmlnaW5dID0gb3JpZ2luXG4gICAgdGhpc1trRGlzcGF0Y2hlc10gPSBbXVxuICAgIHRoaXNba0Nvbm5lY3RlZF0gPSAxXG4gICAgdGhpc1trT3JpZ2luYWxEaXNwYXRjaF0gPSB0aGlzLmRpc3BhdGNoXG4gICAgdGhpc1trT3JpZ2luYWxDbG9zZV0gPSB0aGlzLmNsb3NlLmJpbmQodGhpcylcblxuICAgIHRoaXMuZGlzcGF0Y2ggPSBidWlsZE1vY2tEaXNwYXRjaC5jYWxsKHRoaXMpXG4gICAgdGhpcy5jbG9zZSA9IHRoaXNba0Nsb3NlXVxuICB9XG5cbiAgZ2V0IFtTeW1ib2xzLmtDb25uZWN0ZWRdICgpIHtcbiAgICByZXR1cm4gdGhpc1trQ29ubmVjdGVkXVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdXAgdGhlIGJhc2UgaW50ZXJjZXB0b3IgZm9yIG1vY2tpbmcgcmVwbGllcyBmcm9tIHVuZGljaS5cbiAgICovXG4gIGludGVyY2VwdCAob3B0cykge1xuICAgIHJldHVybiBuZXcgTW9ja0ludGVyY2VwdG9yKG9wdHMsIHRoaXNba0Rpc3BhdGNoZXNdKVxuICB9XG5cbiAgYXN5bmMgW2tDbG9zZV0gKCkge1xuICAgIGF3YWl0IHByb21pc2lmeSh0aGlzW2tPcmlnaW5hbENsb3NlXSkoKVxuICAgIHRoaXNba0Nvbm5lY3RlZF0gPSAwXG4gICAgdGhpc1trTW9ja0FnZW50XVtTeW1ib2xzLmtDbGllbnRzXS5kZWxldGUodGhpc1trT3JpZ2luXSlcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IE1vY2tQb29sXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBzaW5ndWxhcnMgPSB7XG4gIHByb25vdW46ICdpdCcsXG4gIGlzOiAnaXMnLFxuICB3YXM6ICd3YXMnLFxuICB0aGlzOiAndGhpcydcbn1cblxuY29uc3QgcGx1cmFscyA9IHtcbiAgcHJvbm91bjogJ3RoZXknLFxuICBpczogJ2FyZScsXG4gIHdhczogJ3dlcmUnLFxuICB0aGlzOiAndGhlc2UnXG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xhc3MgUGx1cmFsaXplciB7XG4gIGNvbnN0cnVjdG9yIChzaW5ndWxhciwgcGx1cmFsKSB7XG4gICAgdGhpcy5zaW5ndWxhciA9IHNpbmd1bGFyXG4gICAgdGhpcy5wbHVyYWwgPSBwbHVyYWxcbiAgfVxuXG4gIHBsdXJhbGl6ZSAoY291bnQpIHtcbiAgICBjb25zdCBvbmUgPSBjb3VudCA9PT0gMVxuICAgIGNvbnN0IGtleXMgPSBvbmUgPyBzaW5ndWxhcnMgOiBwbHVyYWxzXG4gICAgY29uc3Qgbm91biA9IG9uZSA/IHRoaXMuc2luZ3VsYXIgOiB0aGlzLnBsdXJhbFxuICAgIHJldHVybiB7IC4uLmtleXMsIGNvdW50LCBub3VuIH1cbiAgfVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBUcmFuc2Zvcm0gfSA9IHJlcXVpcmUoJ3N0cmVhbScpXG5jb25zdCB7IENvbnNvbGUgfSA9IHJlcXVpcmUoJ2NvbnNvbGUnKVxuXG4vKipcbiAqIEdldHMgdGhlIG91dHB1dCBvZiBgY29uc29sZS50YWJsZSjigKYpYCBhcyBhIHN0cmluZy5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBQZW5kaW5nSW50ZXJjZXB0b3JzRm9ybWF0dGVyIHtcbiAgY29uc3RydWN0b3IgKHsgZGlzYWJsZUNvbG9ycyB9ID0ge30pIHtcbiAgICB0aGlzLnRyYW5zZm9ybSA9IG5ldyBUcmFuc2Zvcm0oe1xuICAgICAgdHJhbnNmb3JtIChjaHVuaywgX2VuYywgY2IpIHtcbiAgICAgICAgY2IobnVsbCwgY2h1bmspXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXMubG9nZ2VyID0gbmV3IENvbnNvbGUoe1xuICAgICAgc3Rkb3V0OiB0aGlzLnRyYW5zZm9ybSxcbiAgICAgIGluc3BlY3RPcHRpb25zOiB7XG4gICAgICAgIGNvbG9yczogIWRpc2FibGVDb2xvcnMgJiYgIXByb2Nlc3MuZW52LkNJXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGZvcm1hdCAocGVuZGluZ0ludGVyY2VwdG9ycykge1xuICAgIGNvbnN0IHdpdGhQcmV0dHlIZWFkZXJzID0gcGVuZGluZ0ludGVyY2VwdG9ycy5tYXAoXG4gICAgICAoeyBtZXRob2QsIHBhdGgsIGRhdGE6IHsgc3RhdHVzQ29kZSB9LCBwZXJzaXN0LCB0aW1lcywgdGltZXNJbnZva2VkLCBvcmlnaW4gfSkgPT4gKHtcbiAgICAgICAgTWV0aG9kOiBtZXRob2QsXG4gICAgICAgIE9yaWdpbjogb3JpZ2luLFxuICAgICAgICBQYXRoOiBwYXRoLFxuICAgICAgICAnU3RhdHVzIGNvZGUnOiBzdGF0dXNDb2RlLFxuICAgICAgICBQZXJzaXN0ZW50OiBwZXJzaXN0ID8gJ+KchScgOiAn4p2MJyxcbiAgICAgICAgSW52b2NhdGlvbnM6IHRpbWVzSW52b2tlZCxcbiAgICAgICAgUmVtYWluaW5nOiBwZXJzaXN0ID8gSW5maW5pdHkgOiB0aW1lcyAtIHRpbWVzSW52b2tlZFxuICAgICAgfSkpXG5cbiAgICB0aGlzLmxvZ2dlci50YWJsZSh3aXRoUHJldHR5SGVhZGVycylcbiAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm0ucmVhZCgpLnRvU3RyaW5nKClcbiAgfVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBrQ2xpZW50cyB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IEFnZW50ID0gcmVxdWlyZSgnLi4vYWdlbnQnKVxuY29uc3Qge1xuICBrQWdlbnQsXG4gIGtNb2NrQWdlbnRTZXQsXG4gIGtNb2NrQWdlbnRHZXQsXG4gIGtEaXNwYXRjaGVzLFxuICBrSXNNb2NrQWN0aXZlLFxuICBrTmV0Q29ubmVjdCxcbiAga0dldE5ldENvbm5lY3QsXG4gIGtPcHRpb25zLFxuICBrRmFjdG9yeVxufSA9IHJlcXVpcmUoJy4vbW9jay1zeW1ib2xzJylcbmNvbnN0IE1vY2tDbGllbnQgPSByZXF1aXJlKCcuL21vY2stY2xpZW50JylcbmNvbnN0IE1vY2tQb29sID0gcmVxdWlyZSgnLi9tb2NrLXBvb2wnKVxuY29uc3QgeyBtYXRjaFZhbHVlLCBidWlsZE1vY2tPcHRpb25zIH0gPSByZXF1aXJlKCcuL21vY2stdXRpbHMnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciwgVW5kaWNpRXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IERpc3BhdGNoZXIgPSByZXF1aXJlKCcuLi9kaXNwYXRjaGVyJylcbmNvbnN0IFBsdXJhbGl6ZXIgPSByZXF1aXJlKCcuL3BsdXJhbGl6ZXInKVxuY29uc3QgUGVuZGluZ0ludGVyY2VwdG9yc0Zvcm1hdHRlciA9IHJlcXVpcmUoJy4vcGVuZGluZy1pbnRlcmNlcHRvcnMtZm9ybWF0dGVyJylcblxuY2xhc3MgRmFrZVdlYWtSZWYge1xuICBjb25zdHJ1Y3RvciAodmFsdWUpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWVcbiAgfVxuXG4gIGRlcmVmICgpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZVxuICB9XG59XG5cbmNsYXNzIE1vY2tBZ2VudCBleHRlbmRzIERpc3BhdGNoZXIge1xuICBjb25zdHJ1Y3RvciAob3B0cykge1xuICAgIHN1cGVyKG9wdHMpXG5cbiAgICB0aGlzW2tOZXRDb25uZWN0XSA9IHRydWVcbiAgICB0aGlzW2tJc01vY2tBY3RpdmVdID0gdHJ1ZVxuXG4gICAgLy8gSW5zdGFudGlhdGUgQWdlbnQgYW5kIGVuY2Fwc3VsYXRlXG4gICAgaWYgKChvcHRzICYmIG9wdHMuYWdlbnQgJiYgdHlwZW9mIG9wdHMuYWdlbnQuZGlzcGF0Y2ggIT09ICdmdW5jdGlvbicpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0FyZ3VtZW50IG9wdHMuYWdlbnQgbXVzdCBpbXBsZW1lbnQgQWdlbnQnKVxuICAgIH1cbiAgICBjb25zdCBhZ2VudCA9IG9wdHMgJiYgb3B0cy5hZ2VudCA/IG9wdHMuYWdlbnQgOiBuZXcgQWdlbnQob3B0cylcbiAgICB0aGlzW2tBZ2VudF0gPSBhZ2VudFxuXG4gICAgdGhpc1trQ2xpZW50c10gPSBhZ2VudFtrQ2xpZW50c11cbiAgICB0aGlzW2tPcHRpb25zXSA9IGJ1aWxkTW9ja09wdGlvbnMob3B0cylcbiAgfVxuXG4gIGdldCAob3JpZ2luKSB7XG4gICAgbGV0IGRpc3BhdGNoZXIgPSB0aGlzW2tNb2NrQWdlbnRHZXRdKG9yaWdpbilcblxuICAgIGlmICghZGlzcGF0Y2hlcikge1xuICAgICAgZGlzcGF0Y2hlciA9IHRoaXNba0ZhY3RvcnldKG9yaWdpbilcbiAgICAgIHRoaXNba01vY2tBZ2VudFNldF0ob3JpZ2luLCBkaXNwYXRjaGVyKVxuICAgIH1cbiAgICByZXR1cm4gZGlzcGF0Y2hlclxuICB9XG5cbiAgZGlzcGF0Y2ggKG9wdHMsIGhhbmRsZXIpIHtcbiAgICAvLyBDYWxsIE1vY2tBZ2VudC5nZXQgdG8gcGVyZm9ybSBhZGRpdGlvbmFsIHNldHVwIGJlZm9yZSBkaXNwYXRjaGluZyBhcyBub3JtYWxcbiAgICB0aGlzLmdldChvcHRzLm9yaWdpbilcbiAgICByZXR1cm4gdGhpc1trQWdlbnRdLmRpc3BhdGNoKG9wdHMsIGhhbmRsZXIpXG4gIH1cblxuICBhc3luYyBjbG9zZSAoKSB7XG4gICAgYXdhaXQgdGhpc1trQWdlbnRdLmNsb3NlKClcbiAgICB0aGlzW2tDbGllbnRzXS5jbGVhcigpXG4gIH1cblxuICBkZWFjdGl2YXRlICgpIHtcbiAgICB0aGlzW2tJc01vY2tBY3RpdmVdID0gZmFsc2VcbiAgfVxuXG4gIGFjdGl2YXRlICgpIHtcbiAgICB0aGlzW2tJc01vY2tBY3RpdmVdID0gdHJ1ZVxuICB9XG5cbiAgZW5hYmxlTmV0Q29ubmVjdCAobWF0Y2hlcikge1xuICAgIGlmICh0eXBlb2YgbWF0Y2hlciA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG1hdGNoZXIgPT09ICdmdW5jdGlvbicgfHwgbWF0Y2hlciBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpc1trTmV0Q29ubmVjdF0pKSB7XG4gICAgICAgIHRoaXNba05ldENvbm5lY3RdLnB1c2gobWF0Y2hlcilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXNba05ldENvbm5lY3RdID0gW21hdGNoZXJdXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbWF0Y2hlciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRoaXNba05ldENvbm5lY3RdID0gdHJ1ZVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ1Vuc3VwcG9ydGVkIG1hdGNoZXIuIE11c3QgYmUgb25lIG9mIFN0cmluZ3xGdW5jdGlvbnxSZWdFeHAuJylcbiAgICB9XG4gIH1cblxuICBkaXNhYmxlTmV0Q29ubmVjdCAoKSB7XG4gICAgdGhpc1trTmV0Q29ubmVjdF0gPSBmYWxzZVxuICB9XG5cbiAgLy8gVGhpcyBpcyByZXF1aXJlZCB0byBieXBhc3MgaXNzdWVzIGNhdXNlZCBieSB1c2luZyBnbG9iYWwgc3ltYm9scyAtIHNlZTpcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzE0NDdcbiAgZ2V0IGlzTW9ja0FjdGl2ZSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0lzTW9ja0FjdGl2ZV1cbiAgfVxuXG4gIFtrTW9ja0FnZW50U2V0XSAob3JpZ2luLCBkaXNwYXRjaGVyKSB7XG4gICAgdGhpc1trQ2xpZW50c10uc2V0KG9yaWdpbiwgbmV3IEZha2VXZWFrUmVmKGRpc3BhdGNoZXIpKVxuICB9XG5cbiAgW2tGYWN0b3J5XSAob3JpZ2luKSB7XG4gICAgY29uc3QgbW9ja09wdGlvbnMgPSBPYmplY3QuYXNzaWduKHsgYWdlbnQ6IHRoaXMgfSwgdGhpc1trT3B0aW9uc10pXG4gICAgcmV0dXJuIHRoaXNba09wdGlvbnNdICYmIHRoaXNba09wdGlvbnNdLmNvbm5lY3Rpb25zID09PSAxXG4gICAgICA/IG5ldyBNb2NrQ2xpZW50KG9yaWdpbiwgbW9ja09wdGlvbnMpXG4gICAgICA6IG5ldyBNb2NrUG9vbChvcmlnaW4sIG1vY2tPcHRpb25zKVxuICB9XG5cbiAgW2tNb2NrQWdlbnRHZXRdIChvcmlnaW4pIHtcbiAgICAvLyBGaXJzdCBjaGVjayBpZiB3ZSBjYW4gaW1tZWRpYXRlbHkgZmluZCBpdFxuICAgIGNvbnN0IHJlZiA9IHRoaXNba0NsaWVudHNdLmdldChvcmlnaW4pXG4gICAgaWYgKHJlZikge1xuICAgICAgcmV0dXJuIHJlZi5kZXJlZigpXG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIG9yaWdpbiBpcyBub3QgYSBzdHJpbmcgY3JlYXRlIGEgZHVtbXkgcGFyZW50IHBvb2wgYW5kIHJldHVybiB0byB1c2VyXG4gICAgaWYgKHR5cGVvZiBvcmlnaW4gIT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBkaXNwYXRjaGVyID0gdGhpc1trRmFjdG9yeV0oJ2h0dHA6Ly9sb2NhbGhvc3Q6OTk5OScpXG4gICAgICB0aGlzW2tNb2NrQWdlbnRTZXRdKG9yaWdpbiwgZGlzcGF0Y2hlcilcbiAgICAgIHJldHVybiBkaXNwYXRjaGVyXG4gICAgfVxuXG4gICAgLy8gSWYgd2UgbWF0Y2gsIGNyZWF0ZSBhIHBvb2wgYW5kIGFzc2lnbiB0aGUgc2FtZSBkaXNwYXRjaGVzXG4gICAgZm9yIChjb25zdCBba2V5TWF0Y2hlciwgbm9uRXhwbGljaXRSZWZdIG9mIEFycmF5LmZyb20odGhpc1trQ2xpZW50c10pKSB7XG4gICAgICBjb25zdCBub25FeHBsaWNpdERpc3BhdGNoZXIgPSBub25FeHBsaWNpdFJlZi5kZXJlZigpXG4gICAgICBpZiAobm9uRXhwbGljaXREaXNwYXRjaGVyICYmIHR5cGVvZiBrZXlNYXRjaGVyICE9PSAnc3RyaW5nJyAmJiBtYXRjaFZhbHVlKGtleU1hdGNoZXIsIG9yaWdpbikpIHtcbiAgICAgICAgY29uc3QgZGlzcGF0Y2hlciA9IHRoaXNba0ZhY3RvcnldKG9yaWdpbilcbiAgICAgICAgdGhpc1trTW9ja0FnZW50U2V0XShvcmlnaW4sIGRpc3BhdGNoZXIpXG4gICAgICAgIGRpc3BhdGNoZXJba0Rpc3BhdGNoZXNdID0gbm9uRXhwbGljaXREaXNwYXRjaGVyW2tEaXNwYXRjaGVzXVxuICAgICAgICByZXR1cm4gZGlzcGF0Y2hlclxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIFtrR2V0TmV0Q29ubmVjdF0gKCkge1xuICAgIHJldHVybiB0aGlzW2tOZXRDb25uZWN0XVxuICB9XG5cbiAgcGVuZGluZ0ludGVyY2VwdG9ycyAoKSB7XG4gICAgY29uc3QgbW9ja0FnZW50Q2xpZW50cyA9IHRoaXNba0NsaWVudHNdXG5cbiAgICByZXR1cm4gQXJyYXkuZnJvbShtb2NrQWdlbnRDbGllbnRzLmVudHJpZXMoKSlcbiAgICAgIC5mbGF0TWFwKChbb3JpZ2luLCBzY29wZV0pID0+IHNjb3BlLmRlcmVmKClba0Rpc3BhdGNoZXNdLm1hcChkaXNwYXRjaCA9PiAoeyAuLi5kaXNwYXRjaCwgb3JpZ2luIH0pKSlcbiAgICAgIC5maWx0ZXIoKHsgcGVuZGluZyB9KSA9PiBwZW5kaW5nKVxuICB9XG5cbiAgYXNzZXJ0Tm9QZW5kaW5nSW50ZXJjZXB0b3JzICh7IHBlbmRpbmdJbnRlcmNlcHRvcnNGb3JtYXR0ZXIgPSBuZXcgUGVuZGluZ0ludGVyY2VwdG9yc0Zvcm1hdHRlcigpIH0gPSB7fSkge1xuICAgIGNvbnN0IHBlbmRpbmcgPSB0aGlzLnBlbmRpbmdJbnRlcmNlcHRvcnMoKVxuXG4gICAgaWYgKHBlbmRpbmcubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBwbHVyYWxpemVyID0gbmV3IFBsdXJhbGl6ZXIoJ2ludGVyY2VwdG9yJywgJ2ludGVyY2VwdG9ycycpLnBsdXJhbGl6ZShwZW5kaW5nLmxlbmd0aClcblxuICAgIHRocm93IG5ldyBVbmRpY2lFcnJvcihgXG4ke3BsdXJhbGl6ZXIuY291bnR9ICR7cGx1cmFsaXplci5ub3VufSAke3BsdXJhbGl6ZXIuaXN9IHBlbmRpbmc6XG5cbiR7cGVuZGluZ0ludGVyY2VwdG9yc0Zvcm1hdHRlci5mb3JtYXQocGVuZGluZyl9XG5gLnRyaW0oKSlcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IE1vY2tBZ2VudFxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBrUHJveHksIGtDbG9zZSwga0Rlc3Ryb3ksIGtJbnRlcmNlcHRvcnMgfSA9IHJlcXVpcmUoJy4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsgVVJMIH0gPSByZXF1aXJlKCd1cmwnKVxuY29uc3QgQWdlbnQgPSByZXF1aXJlKCcuL2FnZW50JylcbmNvbnN0IFBvb2wgPSByZXF1aXJlKCcuL3Bvb2wnKVxuY29uc3QgRGlzcGF0Y2hlckJhc2UgPSByZXF1aXJlKCcuL2Rpc3BhdGNoZXItYmFzZScpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yLCBSZXF1ZXN0QWJvcnRlZEVycm9yIH0gPSByZXF1aXJlKCcuL2NvcmUvZXJyb3JzJylcbmNvbnN0IGJ1aWxkQ29ubmVjdG9yID0gcmVxdWlyZSgnLi9jb3JlL2Nvbm5lY3QnKVxuXG5jb25zdCBrQWdlbnQgPSBTeW1ib2woJ3Byb3h5IGFnZW50JylcbmNvbnN0IGtDbGllbnQgPSBTeW1ib2woJ3Byb3h5IGNsaWVudCcpXG5jb25zdCBrUHJveHlIZWFkZXJzID0gU3ltYm9sKCdwcm94eSBoZWFkZXJzJylcbmNvbnN0IGtSZXF1ZXN0VGxzID0gU3ltYm9sKCdyZXF1ZXN0IHRscyBzZXR0aW5ncycpXG5jb25zdCBrUHJveHlUbHMgPSBTeW1ib2woJ3Byb3h5IHRscyBzZXR0aW5ncycpXG5jb25zdCBrQ29ubmVjdEVuZHBvaW50ID0gU3ltYm9sKCdjb25uZWN0IGVuZHBvaW50IGZ1bmN0aW9uJylcblxuZnVuY3Rpb24gZGVmYXVsdFByb3RvY29sUG9ydCAocHJvdG9jb2wpIHtcbiAgcmV0dXJuIHByb3RvY29sID09PSAnaHR0cHM6JyA/IDQ0MyA6IDgwXG59XG5cbmZ1bmN0aW9uIGJ1aWxkUHJveHlPcHRpb25zIChvcHRzKSB7XG4gIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ3N0cmluZycpIHtcbiAgICBvcHRzID0geyB1cmk6IG9wdHMgfVxuICB9XG5cbiAgaWYgKCFvcHRzIHx8ICFvcHRzLnVyaSkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignUHJveHkgb3B0cy51cmkgaXMgbWFuZGF0b3J5JylcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdXJpOiBvcHRzLnVyaSxcbiAgICBwcm90b2NvbDogb3B0cy5wcm90b2NvbCB8fCAnaHR0cHMnXG4gIH1cbn1cblxuZnVuY3Rpb24gZGVmYXVsdEZhY3RvcnkgKG9yaWdpbiwgb3B0cykge1xuICByZXR1cm4gbmV3IFBvb2wob3JpZ2luLCBvcHRzKVxufVxuXG5jbGFzcyBQcm94eUFnZW50IGV4dGVuZHMgRGlzcGF0Y2hlckJhc2Uge1xuICBjb25zdHJ1Y3RvciAob3B0cykge1xuICAgIHN1cGVyKG9wdHMpXG4gICAgdGhpc1trUHJveHldID0gYnVpbGRQcm94eU9wdGlvbnMob3B0cylcbiAgICB0aGlzW2tBZ2VudF0gPSBuZXcgQWdlbnQob3B0cylcbiAgICB0aGlzW2tJbnRlcmNlcHRvcnNdID0gb3B0cy5pbnRlcmNlcHRvcnMgJiYgb3B0cy5pbnRlcmNlcHRvcnMuUHJveHlBZ2VudCAmJiBBcnJheS5pc0FycmF5KG9wdHMuaW50ZXJjZXB0b3JzLlByb3h5QWdlbnQpXG4gICAgICA/IG9wdHMuaW50ZXJjZXB0b3JzLlByb3h5QWdlbnRcbiAgICAgIDogW11cblxuICAgIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG9wdHMgPSB7IHVyaTogb3B0cyB9XG4gICAgfVxuXG4gICAgaWYgKCFvcHRzIHx8ICFvcHRzLnVyaSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdQcm94eSBvcHRzLnVyaSBpcyBtYW5kYXRvcnknKVxuICAgIH1cblxuICAgIGNvbnN0IHsgY2xpZW50RmFjdG9yeSA9IGRlZmF1bHRGYWN0b3J5IH0gPSBvcHRzXG5cbiAgICBpZiAodHlwZW9mIGNsaWVudEZhY3RvcnkgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignUHJveHkgb3B0cy5jbGllbnRGYWN0b3J5IG11c3QgYmUgYSBmdW5jdGlvbi4nKVxuICAgIH1cblxuICAgIHRoaXNba1JlcXVlc3RUbHNdID0gb3B0cy5yZXF1ZXN0VGxzXG4gICAgdGhpc1trUHJveHlUbHNdID0gb3B0cy5wcm94eVRsc1xuICAgIHRoaXNba1Byb3h5SGVhZGVyc10gPSBvcHRzLmhlYWRlcnMgfHwge31cblxuICAgIGNvbnN0IHJlc29sdmVkVXJsID0gbmV3IFVSTChvcHRzLnVyaSlcbiAgICBjb25zdCB7IG9yaWdpbiwgcG9ydCwgaG9zdCwgdXNlcm5hbWUsIHBhc3N3b3JkIH0gPSByZXNvbHZlZFVybFxuXG4gICAgaWYgKG9wdHMuYXV0aCAmJiBvcHRzLnRva2VuKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ29wdHMuYXV0aCBjYW5ub3QgYmUgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIG9wdHMudG9rZW4nKVxuICAgIH0gZWxzZSBpZiAob3B0cy5hdXRoKSB7XG4gICAgICAvKiBAZGVwcmVjYXRlZCBpbiBmYXZvdXIgb2Ygb3B0cy50b2tlbiAqL1xuICAgICAgdGhpc1trUHJveHlIZWFkZXJzXVsncHJveHktYXV0aG9yaXphdGlvbiddID0gYEJhc2ljICR7b3B0cy5hdXRofWBcbiAgICB9IGVsc2UgaWYgKG9wdHMudG9rZW4pIHtcbiAgICAgIHRoaXNba1Byb3h5SGVhZGVyc11bJ3Byb3h5LWF1dGhvcml6YXRpb24nXSA9IG9wdHMudG9rZW5cbiAgICB9IGVsc2UgaWYgKHVzZXJuYW1lICYmIHBhc3N3b3JkKSB7XG4gICAgICB0aGlzW2tQcm94eUhlYWRlcnNdWydwcm94eS1hdXRob3JpemF0aW9uJ10gPSBgQmFzaWMgJHtCdWZmZXIuZnJvbShgJHtkZWNvZGVVUklDb21wb25lbnQodXNlcm5hbWUpfToke2RlY29kZVVSSUNvbXBvbmVudChwYXNzd29yZCl9YCkudG9TdHJpbmcoJ2Jhc2U2NCcpfWBcbiAgICB9XG5cbiAgICBjb25zdCBjb25uZWN0ID0gYnVpbGRDb25uZWN0b3IoeyAuLi5vcHRzLnByb3h5VGxzIH0pXG4gICAgdGhpc1trQ29ubmVjdEVuZHBvaW50XSA9IGJ1aWxkQ29ubmVjdG9yKHsgLi4ub3B0cy5yZXF1ZXN0VGxzIH0pXG4gICAgdGhpc1trQ2xpZW50XSA9IGNsaWVudEZhY3RvcnkocmVzb2x2ZWRVcmwsIHsgY29ubmVjdCB9KVxuICAgIHRoaXNba0FnZW50XSA9IG5ldyBBZ2VudCh7XG4gICAgICAuLi5vcHRzLFxuICAgICAgY29ubmVjdDogYXN5bmMgKG9wdHMsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGxldCByZXF1ZXN0ZWRIb3N0ID0gb3B0cy5ob3N0XG4gICAgICAgIGlmICghb3B0cy5wb3J0KSB7XG4gICAgICAgICAgcmVxdWVzdGVkSG9zdCArPSBgOiR7ZGVmYXVsdFByb3RvY29sUG9ydChvcHRzLnByb3RvY29sKX1gXG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB7IHNvY2tldCwgc3RhdHVzQ29kZSB9ID0gYXdhaXQgdGhpc1trQ2xpZW50XS5jb25uZWN0KHtcbiAgICAgICAgICAgIG9yaWdpbixcbiAgICAgICAgICAgIHBvcnQsXG4gICAgICAgICAgICBwYXRoOiByZXF1ZXN0ZWRIb3N0LFxuICAgICAgICAgICAgc2lnbmFsOiBvcHRzLnNpZ25hbCxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgLi4udGhpc1trUHJveHlIZWFkZXJzXSxcbiAgICAgICAgICAgICAgaG9zdFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICAgaWYgKHN0YXR1c0NvZGUgIT09IDIwMCkge1xuICAgICAgICAgICAgc29ja2V0Lm9uKCdlcnJvcicsICgpID0+IHt9KS5kZXN0cm95KClcbiAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKGBQcm94eSByZXNwb25zZSAoJHtzdGF0dXNDb2RlfSkgIT09IDIwMCB3aGVuIEhUVFAgVHVubmVsaW5nYCkpXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChvcHRzLnByb3RvY29sICE9PSAnaHR0cHM6Jykge1xuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgc29ja2V0KVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICAgIGxldCBzZXJ2ZXJuYW1lXG4gICAgICAgICAgaWYgKHRoaXNba1JlcXVlc3RUbHNdKSB7XG4gICAgICAgICAgICBzZXJ2ZXJuYW1lID0gdGhpc1trUmVxdWVzdFRsc10uc2VydmVybmFtZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXJ2ZXJuYW1lID0gb3B0cy5zZXJ2ZXJuYW1lXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXNba0Nvbm5lY3RFbmRwb2ludF0oeyAuLi5vcHRzLCBzZXJ2ZXJuYW1lLCBodHRwU29ja2V0OiBzb2NrZXQgfSwgY2FsbGJhY2spXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNhbGxiYWNrKGVycilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBkaXNwYXRjaCAob3B0cywgaGFuZGxlcikge1xuICAgIGNvbnN0IHsgaG9zdCB9ID0gbmV3IFVSTChvcHRzLm9yaWdpbilcbiAgICBjb25zdCBoZWFkZXJzID0gYnVpbGRIZWFkZXJzKG9wdHMuaGVhZGVycylcbiAgICB0aHJvd0lmUHJveHlBdXRoSXNTZW50KGhlYWRlcnMpXG4gICAgcmV0dXJuIHRoaXNba0FnZW50XS5kaXNwYXRjaChcbiAgICAgIHtcbiAgICAgICAgLi4ub3B0cyxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIC4uLmhlYWRlcnMsXG4gICAgICAgICAgaG9zdFxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgaGFuZGxlclxuICAgIClcbiAgfVxuXG4gIGFzeW5jIFtrQ2xvc2VdICgpIHtcbiAgICBhd2FpdCB0aGlzW2tBZ2VudF0uY2xvc2UoKVxuICAgIGF3YWl0IHRoaXNba0NsaWVudF0uY2xvc2UoKVxuICB9XG5cbiAgYXN5bmMgW2tEZXN0cm95XSAoKSB7XG4gICAgYXdhaXQgdGhpc1trQWdlbnRdLmRlc3Ryb3koKVxuICAgIGF3YWl0IHRoaXNba0NsaWVudF0uZGVzdHJveSgpXG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ1tdIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nPn0gaGVhZGVyc1xuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHN0cmluZz59XG4gKi9cbmZ1bmN0aW9uIGJ1aWxkSGVhZGVycyAoaGVhZGVycykge1xuICAvLyBXaGVuIHVzaW5nIHVuZGljaS5mZXRjaCwgdGhlIGhlYWRlcnMgbGlzdCBpcyBzdG9yZWRcbiAgLy8gYXMgYW4gYXJyYXkuXG4gIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSAqL1xuICAgIGNvbnN0IGhlYWRlcnNQYWlyID0ge31cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGVhZGVycy5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgaGVhZGVyc1BhaXJbaGVhZGVyc1tpXV0gPSBoZWFkZXJzW2kgKyAxXVxuICAgIH1cblxuICAgIHJldHVybiBoZWFkZXJzUGFpclxuICB9XG5cbiAgcmV0dXJuIGhlYWRlcnNcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIHN0cmluZz59IGhlYWRlcnNcbiAqXG4gKiBQcmV2aW91cyB2ZXJzaW9ucyBvZiBQcm94eUFnZW50IHN1Z2dlc3RzIHRoZSBQcm94eS1BdXRob3JpemF0aW9uIGluIHJlcXVlc3QgaGVhZGVyc1xuICogTmV2ZXJ0aGVsZXNzLCBpdCB3YXMgY2hhbmdlZCBhbmQgdG8gYXZvaWQgYSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5IGJ5IGVuZCB1c2Vyc1xuICogdGhpcyBjaGVjayB3YXMgY3JlYXRlZC5cbiAqIEl0IHNob3VsZCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24gZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnNcbiAqL1xuZnVuY3Rpb24gdGhyb3dJZlByb3h5QXV0aElzU2VudCAoaGVhZGVycykge1xuICBjb25zdCBleGlzdFByb3h5QXV0aCA9IGhlYWRlcnMgJiYgT2JqZWN0LmtleXMoaGVhZGVycylcbiAgICAuZmluZCgoa2V5KSA9PiBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3Byb3h5LWF1dGhvcml6YXRpb24nKVxuICBpZiAoZXhpc3RQcm94eUF1dGgpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ1Byb3h5LUF1dGhvcml6YXRpb24gc2hvdWxkIGJlIHNlbnQgaW4gUHJveHlBZ2VudCBjb25zdHJ1Y3RvcicpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBQcm94eUFnZW50XG4iLAogICAgImNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5cbmNvbnN0IHsga1JldHJ5SGFuZGxlckRlZmF1bHRSZXRyeSB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsgUmVxdWVzdFJldHJ5RXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHsgaXNEaXN0dXJiZWQsIHBhcnNlSGVhZGVycywgcGFyc2VSYW5nZUhlYWRlciB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcblxuZnVuY3Rpb24gY2FsY3VsYXRlUmV0cnlBZnRlckhlYWRlciAocmV0cnlBZnRlcikge1xuICBjb25zdCBjdXJyZW50ID0gRGF0ZS5ub3coKVxuICBjb25zdCBkaWZmID0gbmV3IERhdGUocmV0cnlBZnRlcikuZ2V0VGltZSgpIC0gY3VycmVudFxuXG4gIHJldHVybiBkaWZmXG59XG5cbmNsYXNzIFJldHJ5SGFuZGxlciB7XG4gIGNvbnN0cnVjdG9yIChvcHRzLCBoYW5kbGVycykge1xuICAgIGNvbnN0IHsgcmV0cnlPcHRpb25zLCAuLi5kaXNwYXRjaE9wdHMgfSA9IG9wdHNcbiAgICBjb25zdCB7XG4gICAgICAvLyBSZXRyeSBzY29wZWRcbiAgICAgIHJldHJ5OiByZXRyeUZuLFxuICAgICAgbWF4UmV0cmllcyxcbiAgICAgIG1heFRpbWVvdXQsXG4gICAgICBtaW5UaW1lb3V0LFxuICAgICAgdGltZW91dEZhY3RvcixcbiAgICAgIC8vIFJlc3BvbnNlIHNjb3BlZFxuICAgICAgbWV0aG9kcyxcbiAgICAgIGVycm9yQ29kZXMsXG4gICAgICByZXRyeUFmdGVyLFxuICAgICAgc3RhdHVzQ29kZXNcbiAgICB9ID0gcmV0cnlPcHRpb25zID8/IHt9XG5cbiAgICB0aGlzLmRpc3BhdGNoID0gaGFuZGxlcnMuZGlzcGF0Y2hcbiAgICB0aGlzLmhhbmRsZXIgPSBoYW5kbGVycy5oYW5kbGVyXG4gICAgdGhpcy5vcHRzID0gZGlzcGF0Y2hPcHRzXG4gICAgdGhpcy5hYm9ydCA9IG51bGxcbiAgICB0aGlzLmFib3J0ZWQgPSBmYWxzZVxuICAgIHRoaXMucmV0cnlPcHRzID0ge1xuICAgICAgcmV0cnk6IHJldHJ5Rm4gPz8gUmV0cnlIYW5kbGVyW2tSZXRyeUhhbmRsZXJEZWZhdWx0UmV0cnldLFxuICAgICAgcmV0cnlBZnRlcjogcmV0cnlBZnRlciA/PyB0cnVlLFxuICAgICAgbWF4VGltZW91dDogbWF4VGltZW91dCA/PyAzMCAqIDEwMDAsIC8vIDMwcyxcbiAgICAgIHRpbWVvdXQ6IG1pblRpbWVvdXQgPz8gNTAwLCAvLyAuNXNcbiAgICAgIHRpbWVvdXRGYWN0b3I6IHRpbWVvdXRGYWN0b3IgPz8gMixcbiAgICAgIG1heFJldHJpZXM6IG1heFJldHJpZXMgPz8gNSxcbiAgICAgIC8vIFdoYXQgZXJyb3JzIHdlIHNob3VsZCByZXRyeVxuICAgICAgbWV0aG9kczogbWV0aG9kcyA/PyBbJ0dFVCcsICdIRUFEJywgJ09QVElPTlMnLCAnUFVUJywgJ0RFTEVURScsICdUUkFDRSddLFxuICAgICAgLy8gSW5kaWNhdGVzIHdoaWNoIGVycm9ycyB0byByZXRyeVxuICAgICAgc3RhdHVzQ29kZXM6IHN0YXR1c0NvZGVzID8/IFs1MDAsIDUwMiwgNTAzLCA1MDQsIDQyOV0sXG4gICAgICAvLyBMaXN0IG9mIGVycm9ycyB0byByZXRyeVxuICAgICAgZXJyb3JDb2RlczogZXJyb3JDb2RlcyA/PyBbXG4gICAgICAgICdFQ09OTlJFU0VUJyxcbiAgICAgICAgJ0VDT05OUkVGVVNFRCcsXG4gICAgICAgICdFTk9URk9VTkQnLFxuICAgICAgICAnRU5FVERPV04nLFxuICAgICAgICAnRU5FVFVOUkVBQ0gnLFxuICAgICAgICAnRUhPU1RET1dOJyxcbiAgICAgICAgJ0VIT1NUVU5SRUFDSCcsXG4gICAgICAgICdFUElQRSdcbiAgICAgIF1cbiAgICB9XG5cbiAgICB0aGlzLnJldHJ5Q291bnQgPSAwXG4gICAgdGhpcy5zdGFydCA9IDBcbiAgICB0aGlzLmVuZCA9IG51bGxcbiAgICB0aGlzLmV0YWcgPSBudWxsXG4gICAgdGhpcy5yZXN1bWUgPSBudWxsXG5cbiAgICAvLyBIYW5kbGUgcG9zc2libGUgb25Db25uZWN0IGR1cGxpY2F0aW9uXG4gICAgdGhpcy5oYW5kbGVyLm9uQ29ubmVjdChyZWFzb24gPT4ge1xuICAgICAgdGhpcy5hYm9ydGVkID0gdHJ1ZVxuICAgICAgaWYgKHRoaXMuYWJvcnQpIHtcbiAgICAgICAgdGhpcy5hYm9ydChyZWFzb24pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlYXNvbiA9IHJlYXNvblxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBvblJlcXVlc3RTZW50ICgpIHtcbiAgICBpZiAodGhpcy5oYW5kbGVyLm9uUmVxdWVzdFNlbnQpIHtcbiAgICAgIHRoaXMuaGFuZGxlci5vblJlcXVlc3RTZW50KClcbiAgICB9XG4gIH1cblxuICBvblVwZ3JhZGUgKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHNvY2tldCkge1xuICAgIGlmICh0aGlzLmhhbmRsZXIub25VcGdyYWRlKSB7XG4gICAgICB0aGlzLmhhbmRsZXIub25VcGdyYWRlKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHNvY2tldClcbiAgICB9XG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0KSB7XG4gICAgaWYgKHRoaXMuYWJvcnRlZCkge1xuICAgICAgYWJvcnQodGhpcy5yZWFzb24pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIH1cbiAgfVxuXG4gIG9uQm9keVNlbnQgKGNodW5rKSB7XG4gICAgaWYgKHRoaXMuaGFuZGxlci5vbkJvZHlTZW50KSByZXR1cm4gdGhpcy5oYW5kbGVyLm9uQm9keVNlbnQoY2h1bmspXG4gIH1cblxuICBzdGF0aWMgW2tSZXRyeUhhbmRsZXJEZWZhdWx0UmV0cnldIChlcnIsIHsgc3RhdGUsIG9wdHMgfSwgY2IpIHtcbiAgICBjb25zdCB7IHN0YXR1c0NvZGUsIGNvZGUsIGhlYWRlcnMgfSA9IGVyclxuICAgIGNvbnN0IHsgbWV0aG9kLCByZXRyeU9wdGlvbnMgfSA9IG9wdHNcbiAgICBjb25zdCB7XG4gICAgICBtYXhSZXRyaWVzLFxuICAgICAgdGltZW91dCxcbiAgICAgIG1heFRpbWVvdXQsXG4gICAgICB0aW1lb3V0RmFjdG9yLFxuICAgICAgc3RhdHVzQ29kZXMsXG4gICAgICBlcnJvckNvZGVzLFxuICAgICAgbWV0aG9kc1xuICAgIH0gPSByZXRyeU9wdGlvbnNcbiAgICBsZXQgeyBjb3VudGVyLCBjdXJyZW50VGltZW91dCB9ID0gc3RhdGVcblxuICAgIGN1cnJlbnRUaW1lb3V0ID1cbiAgICAgIGN1cnJlbnRUaW1lb3V0ICE9IG51bGwgJiYgY3VycmVudFRpbWVvdXQgPiAwID8gY3VycmVudFRpbWVvdXQgOiB0aW1lb3V0XG5cbiAgICAvLyBBbnkgY29kZSB0aGF0IGlzIG5vdCBhIFVuZGljaSdzIG9yaWdpbmF0ZWQgYW5kIGFsbG93ZWQgdG8gcmV0cnlcbiAgICBpZiAoXG4gICAgICBjb2RlICYmXG4gICAgICBjb2RlICE9PSAnVU5EX0VSUl9SRVFfUkVUUlknICYmXG4gICAgICBjb2RlICE9PSAnVU5EX0VSUl9TT0NLRVQnICYmXG4gICAgICAhZXJyb3JDb2Rlcy5pbmNsdWRlcyhjb2RlKVxuICAgICkge1xuICAgICAgY2IoZXJyKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gSWYgYSBzZXQgb2YgbWV0aG9kIGFyZSBwcm92aWRlZCBhbmQgdGhlIGN1cnJlbnQgbWV0aG9kIGlzIG5vdCBpbiB0aGUgbGlzdFxuICAgIGlmIChBcnJheS5pc0FycmF5KG1ldGhvZHMpICYmICFtZXRob2RzLmluY2x1ZGVzKG1ldGhvZCkpIHtcbiAgICAgIGNiKGVycilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIElmIGEgc2V0IG9mIHN0YXR1cyBjb2RlIGFyZSBwcm92aWRlZCBhbmQgdGhlIGN1cnJlbnQgc3RhdHVzIGNvZGUgaXMgbm90IGluIHRoZSBsaXN0XG4gICAgaWYgKFxuICAgICAgc3RhdHVzQ29kZSAhPSBudWxsICYmXG4gICAgICBBcnJheS5pc0FycmF5KHN0YXR1c0NvZGVzKSAmJlxuICAgICAgIXN0YXR1c0NvZGVzLmluY2x1ZGVzKHN0YXR1c0NvZGUpXG4gICAgKSB7XG4gICAgICBjYihlcnIpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBJZiB3ZSByZWFjaGVkIHRoZSBtYXggbnVtYmVyIG9mIHJldHJpZXNcbiAgICBpZiAoY291bnRlciA+IG1heFJldHJpZXMpIHtcbiAgICAgIGNiKGVycilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGxldCByZXRyeUFmdGVySGVhZGVyID0gaGVhZGVycyAhPSBudWxsICYmIGhlYWRlcnNbJ3JldHJ5LWFmdGVyJ11cbiAgICBpZiAocmV0cnlBZnRlckhlYWRlcikge1xuICAgICAgcmV0cnlBZnRlckhlYWRlciA9IE51bWJlcihyZXRyeUFmdGVySGVhZGVyKVxuICAgICAgcmV0cnlBZnRlckhlYWRlciA9IGlzTmFOKHJldHJ5QWZ0ZXJIZWFkZXIpXG4gICAgICAgID8gY2FsY3VsYXRlUmV0cnlBZnRlckhlYWRlcihyZXRyeUFmdGVySGVhZGVyKVxuICAgICAgICA6IHJldHJ5QWZ0ZXJIZWFkZXIgKiAxZTMgLy8gUmV0cnktQWZ0ZXIgaXMgaW4gc2Vjb25kc1xuICAgIH1cblxuICAgIGNvbnN0IHJldHJ5VGltZW91dCA9XG4gICAgICByZXRyeUFmdGVySGVhZGVyID4gMFxuICAgICAgICA/IE1hdGgubWluKHJldHJ5QWZ0ZXJIZWFkZXIsIG1heFRpbWVvdXQpXG4gICAgICAgIDogTWF0aC5taW4oY3VycmVudFRpbWVvdXQgKiB0aW1lb3V0RmFjdG9yICoqIGNvdW50ZXIsIG1heFRpbWVvdXQpXG5cbiAgICBzdGF0ZS5jdXJyZW50VGltZW91dCA9IHJldHJ5VGltZW91dFxuXG4gICAgc2V0VGltZW91dCgoKSA9PiBjYihudWxsKSwgcmV0cnlUaW1lb3V0KVxuICB9XG5cbiAgb25IZWFkZXJzIChzdGF0dXNDb2RlLCByYXdIZWFkZXJzLCByZXN1bWUsIHN0YXR1c01lc3NhZ2UpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gcGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpXG5cbiAgICB0aGlzLnJldHJ5Q291bnQgKz0gMVxuXG4gICAgaWYgKHN0YXR1c0NvZGUgPj0gMzAwKSB7XG4gICAgICB0aGlzLmFib3J0KFxuICAgICAgICBuZXcgUmVxdWVzdFJldHJ5RXJyb3IoJ1JlcXVlc3QgZmFpbGVkJywgc3RhdHVzQ29kZSwge1xuICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgY291bnQ6IHRoaXMucmV0cnlDb3VudFxuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgLy8gQ2hlY2twb2ludCBmb3IgcmVzdW1lIGZyb20gd2hlcmUgd2UgbGVmdCBpdFxuICAgIGlmICh0aGlzLnJlc3VtZSAhPSBudWxsKSB7XG4gICAgICB0aGlzLnJlc3VtZSA9IG51bGxcblxuICAgICAgaWYgKHN0YXR1c0NvZGUgIT09IDIwNikge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuXG4gICAgICBjb25zdCBjb250ZW50UmFuZ2UgPSBwYXJzZVJhbmdlSGVhZGVyKGhlYWRlcnNbJ2NvbnRlbnQtcmFuZ2UnXSlcbiAgICAgIC8vIElmIG5vIGNvbnRlbnQgcmFuZ2VcbiAgICAgIGlmICghY29udGVudFJhbmdlKSB7XG4gICAgICAgIHRoaXMuYWJvcnQoXG4gICAgICAgICAgbmV3IFJlcXVlc3RSZXRyeUVycm9yKCdDb250ZW50LVJhbmdlIG1pc21hdGNoJywgc3RhdHVzQ29kZSwge1xuICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICAgIGNvdW50OiB0aGlzLnJldHJ5Q291bnRcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuXG4gICAgICAvLyBMZXQncyBzdGFydCB3aXRoIGEgd2VhayBldGFnIGNoZWNrXG4gICAgICBpZiAodGhpcy5ldGFnICE9IG51bGwgJiYgdGhpcy5ldGFnICE9PSBoZWFkZXJzLmV0YWcpIHtcbiAgICAgICAgdGhpcy5hYm9ydChcbiAgICAgICAgICBuZXcgUmVxdWVzdFJldHJ5RXJyb3IoJ0VUYWcgbWlzbWF0Y2gnLCBzdGF0dXNDb2RlLCB7XG4gICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgICAgY291bnQ6IHRoaXMucmV0cnlDb3VudFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgc3RhcnQsIHNpemUsIGVuZCA9IHNpemUgfSA9IGNvbnRlbnRSYW5nZVxuXG4gICAgICBhc3NlcnQodGhpcy5zdGFydCA9PT0gc3RhcnQsICdjb250ZW50LXJhbmdlIG1pc21hdGNoJylcbiAgICAgIGFzc2VydCh0aGlzLmVuZCA9PSBudWxsIHx8IHRoaXMuZW5kID09PSBlbmQsICdjb250ZW50LXJhbmdlIG1pc21hdGNoJylcblxuICAgICAgdGhpcy5yZXN1bWUgPSByZXN1bWVcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZW5kID09IG51bGwpIHtcbiAgICAgIGlmIChzdGF0dXNDb2RlID09PSAyMDYpIHtcbiAgICAgICAgLy8gRmlyc3QgdGltZSB3ZSByZWNlaXZlIDIwNlxuICAgICAgICBjb25zdCByYW5nZSA9IHBhcnNlUmFuZ2VIZWFkZXIoaGVhZGVyc1snY29udGVudC1yYW5nZSddKVxuXG4gICAgICAgIGlmIChyYW5nZSA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkhlYWRlcnMoXG4gICAgICAgICAgICBzdGF0dXNDb2RlLFxuICAgICAgICAgICAgcmF3SGVhZGVycyxcbiAgICAgICAgICAgIHJlc3VtZSxcbiAgICAgICAgICAgIHN0YXR1c01lc3NhZ2VcbiAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IHN0YXJ0LCBzaXplLCBlbmQgPSBzaXplIH0gPSByYW5nZVxuXG4gICAgICAgIGFzc2VydChcbiAgICAgICAgICBzdGFydCAhPSBudWxsICYmIE51bWJlci5pc0Zpbml0ZShzdGFydCkgJiYgdGhpcy5zdGFydCAhPT0gc3RhcnQsXG4gICAgICAgICAgJ2NvbnRlbnQtcmFuZ2UgbWlzbWF0Y2gnXG4gICAgICAgIClcbiAgICAgICAgYXNzZXJ0KE51bWJlci5pc0Zpbml0ZShzdGFydCkpXG4gICAgICAgIGFzc2VydChcbiAgICAgICAgICBlbmQgIT0gbnVsbCAmJiBOdW1iZXIuaXNGaW5pdGUoZW5kKSAmJiB0aGlzLmVuZCAhPT0gZW5kLFxuICAgICAgICAgICdpbnZhbGlkIGNvbnRlbnQtbGVuZ3RoJ1xuICAgICAgICApXG5cbiAgICAgICAgdGhpcy5zdGFydCA9IHN0YXJ0XG4gICAgICAgIHRoaXMuZW5kID0gZW5kXG4gICAgICB9XG5cbiAgICAgIC8vIFdlIG1ha2Ugb3VyIGJlc3QgdG8gY2hlY2twb2ludCB0aGUgYm9keSBmb3IgZnVydGhlciByYW5nZSBoZWFkZXJzXG4gICAgICBpZiAodGhpcy5lbmQgPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBjb250ZW50TGVuZ3RoID0gaGVhZGVyc1snY29udGVudC1sZW5ndGgnXVxuICAgICAgICB0aGlzLmVuZCA9IGNvbnRlbnRMZW5ndGggIT0gbnVsbCA/IE51bWJlcihjb250ZW50TGVuZ3RoKSA6IG51bGxcbiAgICAgIH1cblxuICAgICAgYXNzZXJ0KE51bWJlci5pc0Zpbml0ZSh0aGlzLnN0YXJ0KSlcbiAgICAgIGFzc2VydChcbiAgICAgICAgdGhpcy5lbmQgPT0gbnVsbCB8fCBOdW1iZXIuaXNGaW5pdGUodGhpcy5lbmQpLFxuICAgICAgICAnaW52YWxpZCBjb250ZW50LWxlbmd0aCdcbiAgICAgIClcblxuICAgICAgdGhpcy5yZXN1bWUgPSByZXN1bWVcbiAgICAgIHRoaXMuZXRhZyA9IGhlYWRlcnMuZXRhZyAhPSBudWxsID8gaGVhZGVycy5ldGFnIDogbnVsbFxuXG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uSGVhZGVycyhcbiAgICAgICAgc3RhdHVzQ29kZSxcbiAgICAgICAgcmF3SGVhZGVycyxcbiAgICAgICAgcmVzdW1lLFxuICAgICAgICBzdGF0dXNNZXNzYWdlXG4gICAgICApXG4gICAgfVxuXG4gICAgY29uc3QgZXJyID0gbmV3IFJlcXVlc3RSZXRyeUVycm9yKCdSZXF1ZXN0IGZhaWxlZCcsIHN0YXR1c0NvZGUsIHtcbiAgICAgIGhlYWRlcnMsXG4gICAgICBjb3VudDogdGhpcy5yZXRyeUNvdW50XG4gICAgfSlcblxuICAgIHRoaXMuYWJvcnQoZXJyKVxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBvbkRhdGEgKGNodW5rKSB7XG4gICAgdGhpcy5zdGFydCArPSBjaHVuay5sZW5ndGhcblxuICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25EYXRhKGNodW5rKVxuICB9XG5cbiAgb25Db21wbGV0ZSAocmF3VHJhaWxlcnMpIHtcbiAgICB0aGlzLnJldHJ5Q291bnQgPSAwXG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkNvbXBsZXRlKHJhd1RyYWlsZXJzKVxuICB9XG5cbiAgb25FcnJvciAoZXJyKSB7XG4gICAgaWYgKHRoaXMuYWJvcnRlZCB8fCBpc0Rpc3R1cmJlZCh0aGlzLm9wdHMuYm9keSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25FcnJvcihlcnIpXG4gICAgfVxuXG4gICAgdGhpcy5yZXRyeU9wdHMucmV0cnkoXG4gICAgICBlcnIsXG4gICAgICB7XG4gICAgICAgIHN0YXRlOiB7IGNvdW50ZXI6IHRoaXMucmV0cnlDb3VudCsrLCBjdXJyZW50VGltZW91dDogdGhpcy5yZXRyeUFmdGVyIH0sXG4gICAgICAgIG9wdHM6IHsgcmV0cnlPcHRpb25zOiB0aGlzLnJldHJ5T3B0cywgLi4udGhpcy5vcHRzIH1cbiAgICAgIH0sXG4gICAgICBvblJldHJ5LmJpbmQodGhpcylcbiAgICApXG5cbiAgICBmdW5jdGlvbiBvblJldHJ5IChlcnIpIHtcbiAgICAgIGlmIChlcnIgIT0gbnVsbCB8fCB0aGlzLmFib3J0ZWQgfHwgaXNEaXN0dXJiZWQodGhpcy5vcHRzLmJvZHkpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25FcnJvcihlcnIpXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnN0YXJ0ICE9PSAwKSB7XG4gICAgICAgIHRoaXMub3B0cyA9IHtcbiAgICAgICAgICAuLi50aGlzLm9wdHMsXG4gICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgLi4udGhpcy5vcHRzLmhlYWRlcnMsXG4gICAgICAgICAgICByYW5nZTogYGJ5dGVzPSR7dGhpcy5zdGFydH0tJHt0aGlzLmVuZCA/PyAnJ31gXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2godGhpcy5vcHRzLCB0aGlzKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlci5vbkVycm9yKGVycilcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBSZXRyeUhhbmRsZXJcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbi8vIFdlIGluY2x1ZGUgYSB2ZXJzaW9uIG51bWJlciBmb3IgdGhlIERpc3BhdGNoZXIgQVBJLiBJbiBjYXNlIG9mIGJyZWFraW5nIGNoYW5nZXMsXG4vLyB0aGlzIHZlcnNpb24gbnVtYmVyIG11c3QgYmUgaW5jcmVhc2VkIHRvIGF2b2lkIGNvbmZsaWN0cy5cbmNvbnN0IGdsb2JhbERpc3BhdGNoZXIgPSBTeW1ib2wuZm9yKCd1bmRpY2kuZ2xvYmFsRGlzcGF0Y2hlci4xJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IHJlcXVpcmUoJy4vY29yZS9lcnJvcnMnKVxuY29uc3QgQWdlbnQgPSByZXF1aXJlKCcuL2FnZW50JylcblxuaWYgKGdldEdsb2JhbERpc3BhdGNoZXIoKSA9PT0gdW5kZWZpbmVkKSB7XG4gIHNldEdsb2JhbERpc3BhdGNoZXIobmV3IEFnZW50KCkpXG59XG5cbmZ1bmN0aW9uIHNldEdsb2JhbERpc3BhdGNoZXIgKGFnZW50KSB7XG4gIGlmICghYWdlbnQgfHwgdHlwZW9mIGFnZW50LmRpc3BhdGNoICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdBcmd1bWVudCBhZ2VudCBtdXN0IGltcGxlbWVudCBBZ2VudCcpXG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGdsb2JhbFRoaXMsIGdsb2JhbERpc3BhdGNoZXIsIHtcbiAgICB2YWx1ZTogYWdlbnQsXG4gICAgd3JpdGFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiBmYWxzZVxuICB9KVxufVxuXG5mdW5jdGlvbiBnZXRHbG9iYWxEaXNwYXRjaGVyICgpIHtcbiAgcmV0dXJuIGdsb2JhbFRoaXNbZ2xvYmFsRGlzcGF0Y2hlcl1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldEdsb2JhbERpc3BhdGNoZXIsXG4gIGdldEdsb2JhbERpc3BhdGNoZXJcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0gY2xhc3MgRGVjb3JhdG9ySGFuZGxlciB7XG4gIGNvbnN0cnVjdG9yIChoYW5kbGVyKSB7XG4gICAgdGhpcy5oYW5kbGVyID0gaGFuZGxlclxuICB9XG5cbiAgb25Db25uZWN0ICguLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkNvbm5lY3QoLi4uYXJncylcbiAgfVxuXG4gIG9uRXJyb3IgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uRXJyb3IoLi4uYXJncylcbiAgfVxuXG4gIG9uVXBncmFkZSAoLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25VcGdyYWRlKC4uLmFyZ3MpXG4gIH1cblxuICBvbkhlYWRlcnMgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uSGVhZGVycyguLi5hcmdzKVxuICB9XG5cbiAgb25EYXRhICguLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkRhdGEoLi4uYXJncylcbiAgfVxuXG4gIG9uQ29tcGxldGUgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uQ29tcGxldGUoLi4uYXJncylcbiAgfVxuXG4gIG9uQm9keVNlbnQgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uQm9keVNlbnQoLi4uYXJncylcbiAgfVxufVxuIiwKICAgICIvLyBodHRwczovL2dpdGh1Yi5jb20vRXRoYW4tQXJyb3dvb2QvdW5kaWNpLWZldGNoXG5cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGtIZWFkZXJzTGlzdCwga0NvbnN0cnVjdCB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsga0d1YXJkIH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5IH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3Qge1xuICBtYWtlSXRlcmF0b3IsXG4gIGlzVmFsaWRIZWFkZXJOYW1lLFxuICBpc1ZhbGlkSGVhZGVyVmFsdWVcbn0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4vd2ViaWRsJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5cbmNvbnN0IGtIZWFkZXJzTWFwID0gU3ltYm9sKCdoZWFkZXJzIG1hcCcpXG5jb25zdCBrSGVhZGVyc1NvcnRlZE1hcCA9IFN5bWJvbCgnaGVhZGVycyBtYXAgc29ydGVkJylcblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gY29kZVxuICovXG5mdW5jdGlvbiBpc0hUVFBXaGl0ZVNwYWNlQ2hhckNvZGUgKGNvZGUpIHtcbiAgcmV0dXJuIGNvZGUgPT09IDB4MDBhIHx8IGNvZGUgPT09IDB4MDBkIHx8IGNvZGUgPT09IDB4MDA5IHx8IGNvZGUgPT09IDB4MDIwXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXItdmFsdWUtbm9ybWFsaXplXG4gKiBAcGFyYW0ge3N0cmluZ30gcG90ZW50aWFsVmFsdWVcbiAqL1xuZnVuY3Rpb24gaGVhZGVyVmFsdWVOb3JtYWxpemUgKHBvdGVudGlhbFZhbHVlKSB7XG4gIC8vICBUbyBub3JtYWxpemUgYSBieXRlIHNlcXVlbmNlIHBvdGVudGlhbFZhbHVlLCByZW1vdmVcbiAgLy8gIGFueSBsZWFkaW5nIGFuZCB0cmFpbGluZyBIVFRQIHdoaXRlc3BhY2UgYnl0ZXMgZnJvbVxuICAvLyAgcG90ZW50aWFsVmFsdWUuXG4gIGxldCBpID0gMDsgbGV0IGogPSBwb3RlbnRpYWxWYWx1ZS5sZW5ndGhcblxuICB3aGlsZSAoaiA+IGkgJiYgaXNIVFRQV2hpdGVTcGFjZUNoYXJDb2RlKHBvdGVudGlhbFZhbHVlLmNoYXJDb2RlQXQoaiAtIDEpKSkgLS1qXG4gIHdoaWxlIChqID4gaSAmJiBpc0hUVFBXaGl0ZVNwYWNlQ2hhckNvZGUocG90ZW50aWFsVmFsdWUuY2hhckNvZGVBdChpKSkpICsraVxuXG4gIHJldHVybiBpID09PSAwICYmIGogPT09IHBvdGVudGlhbFZhbHVlLmxlbmd0aCA/IHBvdGVudGlhbFZhbHVlIDogcG90ZW50aWFsVmFsdWUuc3Vic3RyaW5nKGksIGopXG59XG5cbmZ1bmN0aW9uIGZpbGwgKGhlYWRlcnMsIG9iamVjdCkge1xuICAvLyBUbyBmaWxsIGEgSGVhZGVycyBvYmplY3QgaGVhZGVycyB3aXRoIGEgZ2l2ZW4gb2JqZWN0IG9iamVjdCwgcnVuIHRoZXNlIHN0ZXBzOlxuXG4gIC8vIDEuIElmIG9iamVjdCBpcyBhIHNlcXVlbmNlLCB0aGVuIGZvciBlYWNoIGhlYWRlciBpbiBvYmplY3Q6XG4gIC8vIE5vdGU6IHdlYmlkbCBjb252ZXJzaW9uIHRvIGFycmF5IGhhcyBhbHJlYWR5IGJlZW4gZG9uZS5cbiAgaWYgKEFycmF5LmlzQXJyYXkob2JqZWN0KSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2JqZWN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICBjb25zdCBoZWFkZXIgPSBvYmplY3RbaV1cbiAgICAgIC8vIDEuIElmIGhlYWRlciBkb2VzIG5vdCBjb250YWluIGV4YWN0bHkgdHdvIGl0ZW1zLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgaWYgKGhlYWRlci5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgIGhlYWRlcjogJ0hlYWRlcnMgY29uc3RydWN0b3InLFxuICAgICAgICAgIG1lc3NhZ2U6IGBleHBlY3RlZCBuYW1lL3ZhbHVlIHBhaXIgdG8gYmUgbGVuZ3RoIDIsIGZvdW5kICR7aGVhZGVyLmxlbmd0aH0uYFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICAvLyAyLiBBcHBlbmQgKGhlYWRlcuKAmXMgZmlyc3QgaXRlbSwgaGVhZGVy4oCZcyBzZWNvbmQgaXRlbSkgdG8gaGVhZGVycy5cbiAgICAgIGFwcGVuZEhlYWRlcihoZWFkZXJzLCBoZWFkZXJbMF0sIGhlYWRlclsxXSlcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsKSB7XG4gICAgLy8gTm90ZTogbnVsbCBzaG91bGQgdGhyb3dcblxuICAgIC8vIDIuIE90aGVyd2lzZSwgb2JqZWN0IGlzIGEgcmVjb3JkLCB0aGVuIGZvciBlYWNoIGtleSDihpIgdmFsdWUgaW4gb2JqZWN0LFxuICAgIC8vICAgIGFwcGVuZCAoa2V5LCB2YWx1ZSkgdG8gaGVhZGVyc1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICBhcHBlbmRIZWFkZXIoaGVhZGVycywga2V5c1tpXSwgb2JqZWN0W2tleXNbaV1dKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmNvbnZlcnNpb25GYWlsZWQoe1xuICAgICAgcHJlZml4OiAnSGVhZGVycyBjb25zdHJ1Y3RvcicsXG4gICAgICBhcmd1bWVudDogJ0FyZ3VtZW50IDEnLFxuICAgICAgdHlwZXM6IFsnc2VxdWVuY2U8c2VxdWVuY2U8Qnl0ZVN0cmluZz4+JywgJ3JlY29yZDxCeXRlU3RyaW5nLCBCeXRlU3RyaW5nPiddXG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtaGVhZGVycy1hcHBlbmRcbiAqL1xuZnVuY3Rpb24gYXBwZW5kSGVhZGVyIChoZWFkZXJzLCBuYW1lLCB2YWx1ZSkge1xuICAvLyAxLiBOb3JtYWxpemUgdmFsdWUuXG4gIHZhbHVlID0gaGVhZGVyVmFsdWVOb3JtYWxpemUodmFsdWUpXG5cbiAgLy8gMi4gSWYgbmFtZSBpcyBub3QgYSBoZWFkZXIgbmFtZSBvciB2YWx1ZSBpcyBub3QgYVxuICAvLyAgICBoZWFkZXIgdmFsdWUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIGlmICghaXNWYWxpZEhlYWRlck5hbWUobmFtZSkpIHtcbiAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmludmFsaWRBcmd1bWVudCh7XG4gICAgICBwcmVmaXg6ICdIZWFkZXJzLmFwcGVuZCcsXG4gICAgICB2YWx1ZTogbmFtZSxcbiAgICAgIHR5cGU6ICdoZWFkZXIgbmFtZSdcbiAgICB9KVxuICB9IGVsc2UgaWYgKCFpc1ZhbGlkSGVhZGVyVmFsdWUodmFsdWUpKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5pbnZhbGlkQXJndW1lbnQoe1xuICAgICAgcHJlZml4OiAnSGVhZGVycy5hcHBlbmQnLFxuICAgICAgdmFsdWUsXG4gICAgICB0eXBlOiAnaGVhZGVyIHZhbHVlJ1xuICAgIH0pXG4gIH1cblxuICAvLyAzLiBJZiBoZWFkZXJz4oCZcyBndWFyZCBpcyBcImltbXV0YWJsZVwiLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAvLyA0LiBPdGhlcndpc2UsIGlmIGhlYWRlcnPigJlzIGd1YXJkIGlzIFwicmVxdWVzdFwiIGFuZCBuYW1lIGlzIGFcbiAgLy8gICAgZm9yYmlkZGVuIGhlYWRlciBuYW1lLCByZXR1cm4uXG4gIC8vIE5vdGU6IHVuZGljaSBkb2VzIG5vdCBpbXBsZW1lbnQgZm9yYmlkZGVuIGhlYWRlciBuYW1lc1xuICBpZiAoaGVhZGVyc1trR3VhcmRdID09PSAnaW1tdXRhYmxlJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ltbXV0YWJsZScpXG4gIH0gZWxzZSBpZiAoaGVhZGVyc1trR3VhcmRdID09PSAncmVxdWVzdC1uby1jb3JzJykge1xuICAgIC8vIDUuIE90aGVyd2lzZSwgaWYgaGVhZGVyc+KAmXMgZ3VhcmQgaXMgXCJyZXF1ZXN0LW5vLWNvcnNcIjpcbiAgICAvLyBUT0RPXG4gIH1cblxuICAvLyA2LiBPdGhlcndpc2UsIGlmIGhlYWRlcnPigJlzIGd1YXJkIGlzIFwicmVzcG9uc2VcIiBhbmQgbmFtZSBpcyBhXG4gIC8vICAgIGZvcmJpZGRlbiByZXNwb25zZS1oZWFkZXIgbmFtZSwgcmV0dXJuLlxuXG4gIC8vIDcuIEFwcGVuZCAobmFtZSwgdmFsdWUpIHRvIGhlYWRlcnPigJlzIGhlYWRlciBsaXN0LlxuICByZXR1cm4gaGVhZGVyc1trSGVhZGVyc0xpc3RdLmFwcGVuZChuYW1lLCB2YWx1ZSlcblxuICAvLyA4LiBJZiBoZWFkZXJz4oCZcyBndWFyZCBpcyBcInJlcXVlc3Qtbm8tY29yc1wiLCB0aGVuIHJlbW92ZVxuICAvLyAgICBwcml2aWxlZ2VkIG5vLUNPUlMgcmVxdWVzdCBoZWFkZXJzIGZyb20gaGVhZGVyc1xufVxuXG5jbGFzcyBIZWFkZXJzTGlzdCB7XG4gIC8qKiBAdHlwZSB7W3N0cmluZywgc3RyaW5nXVtdfG51bGx9ICovXG4gIGNvb2tpZXMgPSBudWxsXG5cbiAgY29uc3RydWN0b3IgKGluaXQpIHtcbiAgICBpZiAoaW5pdCBpbnN0YW5jZW9mIEhlYWRlcnNMaXN0KSB7XG4gICAgICB0aGlzW2tIZWFkZXJzTWFwXSA9IG5ldyBNYXAoaW5pdFtrSGVhZGVyc01hcF0pXG4gICAgICB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXSA9IGluaXRba0hlYWRlcnNTb3J0ZWRNYXBdXG4gICAgICB0aGlzLmNvb2tpZXMgPSBpbml0LmNvb2tpZXMgPT09IG51bGwgPyBudWxsIDogWy4uLmluaXQuY29va2llc11cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trSGVhZGVyc01hcF0gPSBuZXcgTWFwKGluaXQpXG4gICAgICB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXSA9IG51bGxcbiAgICB9XG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaGVhZGVyLWxpc3QtY29udGFpbnNcbiAgY29udGFpbnMgKG5hbWUpIHtcbiAgICAvLyBBIGhlYWRlciBsaXN0IGxpc3QgY29udGFpbnMgYSBoZWFkZXIgbmFtZSBuYW1lIGlmIGxpc3RcbiAgICAvLyBjb250YWlucyBhIGhlYWRlciB3aG9zZSBuYW1lIGlzIGEgYnl0ZS1jYXNlLWluc2Vuc2l0aXZlXG4gICAgLy8gbWF0Y2ggZm9yIG5hbWUuXG4gICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKVxuXG4gICAgcmV0dXJuIHRoaXNba0hlYWRlcnNNYXBdLmhhcyhuYW1lKVxuICB9XG5cbiAgY2xlYXIgKCkge1xuICAgIHRoaXNba0hlYWRlcnNNYXBdLmNsZWFyKClcbiAgICB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXSA9IG51bGxcbiAgICB0aGlzLmNvb2tpZXMgPSBudWxsXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXItbGlzdC1hcHBlbmRcbiAgYXBwZW5kIChuYW1lLCB2YWx1ZSkge1xuICAgIHRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdID0gbnVsbFxuXG4gICAgLy8gMS4gSWYgbGlzdCBjb250YWlucyBuYW1lLCB0aGVuIHNldCBuYW1lIHRvIHRoZSBmaXJzdCBzdWNoXG4gICAgLy8gICAgaGVhZGVy4oCZcyBuYW1lLlxuICAgIGNvbnN0IGxvd2VyY2FzZU5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKClcbiAgICBjb25zdCBleGlzdHMgPSB0aGlzW2tIZWFkZXJzTWFwXS5nZXQobG93ZXJjYXNlTmFtZSlcblxuICAgIC8vIDIuIEFwcGVuZCAobmFtZSwgdmFsdWUpIHRvIGxpc3QuXG4gICAgaWYgKGV4aXN0cykge1xuICAgICAgY29uc3QgZGVsaW1pdGVyID0gbG93ZXJjYXNlTmFtZSA9PT0gJ2Nvb2tpZScgPyAnOyAnIDogJywgJ1xuICAgICAgdGhpc1trSGVhZGVyc01hcF0uc2V0KGxvd2VyY2FzZU5hbWUsIHtcbiAgICAgICAgbmFtZTogZXhpc3RzLm5hbWUsXG4gICAgICAgIHZhbHVlOiBgJHtleGlzdHMudmFsdWV9JHtkZWxpbWl0ZXJ9JHt2YWx1ZX1gXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tIZWFkZXJzTWFwXS5zZXQobG93ZXJjYXNlTmFtZSwgeyBuYW1lLCB2YWx1ZSB9KVxuICAgIH1cblxuICAgIGlmIChsb3dlcmNhc2VOYW1lID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgIHRoaXMuY29va2llcyA/Pz0gW11cbiAgICAgIHRoaXMuY29va2llcy5wdXNoKHZhbHVlKVxuICAgIH1cbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWhlYWRlci1saXN0LXNldFxuICBzZXQgKG5hbWUsIHZhbHVlKSB7XG4gICAgdGhpc1trSGVhZGVyc1NvcnRlZE1hcF0gPSBudWxsXG4gICAgY29uc3QgbG93ZXJjYXNlTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKVxuXG4gICAgaWYgKGxvd2VyY2FzZU5hbWUgPT09ICdzZXQtY29va2llJykge1xuICAgICAgdGhpcy5jb29raWVzID0gW3ZhbHVlXVxuICAgIH1cblxuICAgIC8vIDEuIElmIGxpc3QgY29udGFpbnMgbmFtZSwgdGhlbiBzZXQgdGhlIHZhbHVlIG9mXG4gICAgLy8gICAgdGhlIGZpcnN0IHN1Y2ggaGVhZGVyIHRvIHZhbHVlIGFuZCByZW1vdmUgdGhlXG4gICAgLy8gICAgb3RoZXJzLlxuICAgIC8vIDIuIE90aGVyd2lzZSwgYXBwZW5kIGhlYWRlciAobmFtZSwgdmFsdWUpIHRvIGxpc3QuXG4gICAgdGhpc1trSGVhZGVyc01hcF0uc2V0KGxvd2VyY2FzZU5hbWUsIHsgbmFtZSwgdmFsdWUgfSlcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWhlYWRlci1saXN0LWRlbGV0ZVxuICBkZWxldGUgKG5hbWUpIHtcbiAgICB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXSA9IG51bGxcblxuICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKClcblxuICAgIGlmIChuYW1lID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgIHRoaXMuY29va2llcyA9IG51bGxcbiAgICB9XG5cbiAgICB0aGlzW2tIZWFkZXJzTWFwXS5kZWxldGUobmFtZSlcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWhlYWRlci1saXN0LWdldFxuICBnZXQgKG5hbWUpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXNba0hlYWRlcnNNYXBdLmdldChuYW1lLnRvTG93ZXJDYXNlKCkpXG5cbiAgICAvLyAxLiBJZiBsaXN0IGRvZXMgbm90IGNvbnRhaW4gbmFtZSwgdGhlbiByZXR1cm4gbnVsbC5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIHZhbHVlcyBvZiBhbGwgaGVhZGVycyBpbiBsaXN0IHdob3NlIG5hbWVcbiAgICAvLyAgICBpcyBhIGJ5dGUtY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBmb3IgbmFtZSxcbiAgICAvLyAgICBzZXBhcmF0ZWQgZnJvbSBlYWNoIG90aGVyIGJ5IDB4MkMgMHgyMCwgaW4gb3JkZXIuXG4gICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyBudWxsIDogdmFsdWUudmFsdWVcbiAgfVxuXG4gICogW1N5bWJvbC5pdGVyYXRvcl0gKCkge1xuICAgIC8vIHVzZSB0aGUgbG93ZXJjYXNlZCBuYW1lXG4gICAgZm9yIChjb25zdCBbbmFtZSwgeyB2YWx1ZSB9XSBvZiB0aGlzW2tIZWFkZXJzTWFwXSkge1xuICAgICAgeWllbGQgW25hbWUsIHZhbHVlXVxuICAgIH1cbiAgfVxuXG4gIGdldCBlbnRyaWVzICgpIHtcbiAgICBjb25zdCBoZWFkZXJzID0ge31cblxuICAgIGlmICh0aGlzW2tIZWFkZXJzTWFwXS5zaXplKSB7XG4gICAgICBmb3IgKGNvbnN0IHsgbmFtZSwgdmFsdWUgfSBvZiB0aGlzW2tIZWFkZXJzTWFwXS52YWx1ZXMoKSkge1xuICAgICAgICBoZWFkZXJzW25hbWVdID0gdmFsdWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaGVhZGVyc1xuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNoZWFkZXJzLWNsYXNzXG5jbGFzcyBIZWFkZXJzIHtcbiAgY29uc3RydWN0b3IgKGluaXQgPSB1bmRlZmluZWQpIHtcbiAgICBpZiAoaW5pdCA9PT0ga0NvbnN0cnVjdCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHRoaXNba0hlYWRlcnNMaXN0XSA9IG5ldyBIZWFkZXJzTGlzdCgpXG5cbiAgICAvLyBUaGUgbmV3IEhlYWRlcnMoaW5pdCkgY29uc3RydWN0b3Igc3RlcHMgYXJlOlxuXG4gICAgLy8gMS4gU2V0IHRoaXPigJlzIGd1YXJkIHRvIFwibm9uZVwiLlxuICAgIHRoaXNba0d1YXJkXSA9ICdub25lJ1xuXG4gICAgLy8gMi4gSWYgaW5pdCBpcyBnaXZlbiwgdGhlbiBmaWxsIHRoaXMgd2l0aCBpbml0LlxuICAgIGlmIChpbml0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGluaXQgPSB3ZWJpZGwuY29udmVydGVycy5IZWFkZXJzSW5pdChpbml0KVxuICAgICAgZmlsbCh0aGlzLCBpbml0KVxuICAgIH1cbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20taGVhZGVycy1hcHBlbmRcbiAgYXBwZW5kIChuYW1lLCB2YWx1ZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnSGVhZGVycy5hcHBlbmQnIH0pXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyhuYW1lKVxuICAgIHZhbHVlID0gd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyh2YWx1ZSlcblxuICAgIHJldHVybiBhcHBlbmRIZWFkZXIodGhpcywgbmFtZSwgdmFsdWUpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWhlYWRlcnMtZGVsZXRlXG4gIGRlbGV0ZSAobmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnSGVhZGVycy5kZWxldGUnIH0pXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyhuYW1lKVxuXG4gICAgLy8gMS4gSWYgbmFtZSBpcyBub3QgYSBoZWFkZXIgbmFtZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoIWlzVmFsaWRIZWFkZXJOYW1lKG5hbWUpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmludmFsaWRBcmd1bWVudCh7XG4gICAgICAgIHByZWZpeDogJ0hlYWRlcnMuZGVsZXRlJyxcbiAgICAgICAgdmFsdWU6IG5hbWUsXG4gICAgICAgIHR5cGU6ICdoZWFkZXIgbmFtZSdcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gSWYgdGhpc+KAmXMgZ3VhcmQgaXMgXCJpbW11dGFibGVcIiwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAvLyAzLiBPdGhlcndpc2UsIGlmIHRoaXPigJlzIGd1YXJkIGlzIFwicmVxdWVzdFwiIGFuZCBuYW1lIGlzIGFcbiAgICAvLyAgICBmb3JiaWRkZW4gaGVhZGVyIG5hbWUsIHJldHVybi5cbiAgICAvLyA0LiBPdGhlcndpc2UsIGlmIHRoaXPigJlzIGd1YXJkIGlzIFwicmVxdWVzdC1uby1jb3JzXCIsIG5hbWVcbiAgICAvLyAgICBpcyBub3QgYSBuby1DT1JTLXNhZmVsaXN0ZWQgcmVxdWVzdC1oZWFkZXIgbmFtZSwgYW5kXG4gICAgLy8gICAgbmFtZSBpcyBub3QgYSBwcml2aWxlZ2VkIG5vLUNPUlMgcmVxdWVzdC1oZWFkZXIgbmFtZSxcbiAgICAvLyAgICByZXR1cm4uXG4gICAgLy8gNS4gT3RoZXJ3aXNlLCBpZiB0aGlz4oCZcyBndWFyZCBpcyBcInJlc3BvbnNlXCIgYW5kIG5hbWUgaXNcbiAgICAvLyAgICBhIGZvcmJpZGRlbiByZXNwb25zZS1oZWFkZXIgbmFtZSwgcmV0dXJuLlxuICAgIC8vIE5vdGU6IHVuZGljaSBkb2VzIG5vdCBpbXBsZW1lbnQgZm9yYmlkZGVuIGhlYWRlciBuYW1lc1xuICAgIGlmICh0aGlzW2tHdWFyZF0gPT09ICdpbW11dGFibGUnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbW11dGFibGUnKVxuICAgIH0gZWxzZSBpZiAodGhpc1trR3VhcmRdID09PSAncmVxdWVzdC1uby1jb3JzJykge1xuICAgICAgLy8gVE9ET1xuICAgIH1cblxuICAgIC8vIDYuIElmIHRoaXPigJlzIGhlYWRlciBsaXN0IGRvZXMgbm90IGNvbnRhaW4gbmFtZSwgdGhlblxuICAgIC8vICAgIHJldHVybi5cbiAgICBpZiAoIXRoaXNba0hlYWRlcnNMaXN0XS5jb250YWlucyhuYW1lKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gNy4gRGVsZXRlIG5hbWUgZnJvbSB0aGlz4oCZcyBoZWFkZXIgbGlzdC5cbiAgICAvLyA4LiBJZiB0aGlz4oCZcyBndWFyZCBpcyBcInJlcXVlc3Qtbm8tY29yc1wiLCB0aGVuIHJlbW92ZVxuICAgIC8vICAgIHByaXZpbGVnZWQgbm8tQ09SUyByZXF1ZXN0IGhlYWRlcnMgZnJvbSB0aGlzLlxuICAgIHRoaXNba0hlYWRlcnNMaXN0XS5kZWxldGUobmFtZSlcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20taGVhZGVycy1nZXRcbiAgZ2V0IChuYW1lKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdIZWFkZXJzLmdldCcgfSlcblxuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nKG5hbWUpXG5cbiAgICAvLyAxLiBJZiBuYW1lIGlzIG5vdCBhIGhlYWRlciBuYW1lLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICghaXNWYWxpZEhlYWRlck5hbWUobmFtZSkpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuaW52YWxpZEFyZ3VtZW50KHtcbiAgICAgICAgcHJlZml4OiAnSGVhZGVycy5nZXQnLFxuICAgICAgICB2YWx1ZTogbmFtZSxcbiAgICAgICAgdHlwZTogJ2hlYWRlciBuYW1lJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBnZXR0aW5nIG5hbWUgZnJvbSB0aGlz4oCZcyBoZWFkZXJcbiAgICAvLyAgICBsaXN0LlxuICAgIHJldHVybiB0aGlzW2tIZWFkZXJzTGlzdF0uZ2V0KG5hbWUpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWhlYWRlcnMtaGFzXG4gIGhhcyAobmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnSGVhZGVycy5oYXMnIH0pXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyhuYW1lKVxuXG4gICAgLy8gMS4gSWYgbmFtZSBpcyBub3QgYSBoZWFkZXIgbmFtZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoIWlzVmFsaWRIZWFkZXJOYW1lKG5hbWUpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmludmFsaWRBcmd1bWVudCh7XG4gICAgICAgIHByZWZpeDogJ0hlYWRlcnMuaGFzJyxcbiAgICAgICAgdmFsdWU6IG5hbWUsXG4gICAgICAgIHR5cGU6ICdoZWFkZXIgbmFtZSdcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gUmV0dXJuIHRydWUgaWYgdGhpc+KAmXMgaGVhZGVyIGxpc3QgY29udGFpbnMgbmFtZTtcbiAgICAvLyAgICBvdGhlcndpc2UgZmFsc2UuXG4gICAgcmV0dXJuIHRoaXNba0hlYWRlcnNMaXN0XS5jb250YWlucyhuYW1lKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1oZWFkZXJzLXNldFxuICBzZXQgKG5hbWUsIHZhbHVlKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMiwgeyBoZWFkZXI6ICdIZWFkZXJzLnNldCcgfSlcblxuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nKG5hbWUpXG4gICAgdmFsdWUgPSB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nKHZhbHVlKVxuXG4gICAgLy8gMS4gTm9ybWFsaXplIHZhbHVlLlxuICAgIHZhbHVlID0gaGVhZGVyVmFsdWVOb3JtYWxpemUodmFsdWUpXG5cbiAgICAvLyAyLiBJZiBuYW1lIGlzIG5vdCBhIGhlYWRlciBuYW1lIG9yIHZhbHVlIGlzIG5vdCBhXG4gICAgLy8gICAgaGVhZGVyIHZhbHVlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICghaXNWYWxpZEhlYWRlck5hbWUobmFtZSkpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuaW52YWxpZEFyZ3VtZW50KHtcbiAgICAgICAgcHJlZml4OiAnSGVhZGVycy5zZXQnLFxuICAgICAgICB2YWx1ZTogbmFtZSxcbiAgICAgICAgdHlwZTogJ2hlYWRlciBuYW1lJ1xuICAgICAgfSlcbiAgICB9IGVsc2UgaWYgKCFpc1ZhbGlkSGVhZGVyVmFsdWUodmFsdWUpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmludmFsaWRBcmd1bWVudCh7XG4gICAgICAgIHByZWZpeDogJ0hlYWRlcnMuc2V0JyxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHR5cGU6ICdoZWFkZXIgdmFsdWUnXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDMuIElmIHRoaXPigJlzIGd1YXJkIGlzIFwiaW1tdXRhYmxlXCIsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgLy8gNC4gT3RoZXJ3aXNlLCBpZiB0aGlz4oCZcyBndWFyZCBpcyBcInJlcXVlc3RcIiBhbmQgbmFtZSBpcyBhXG4gICAgLy8gICAgZm9yYmlkZGVuIGhlYWRlciBuYW1lLCByZXR1cm4uXG4gICAgLy8gNS4gT3RoZXJ3aXNlLCBpZiB0aGlz4oCZcyBndWFyZCBpcyBcInJlcXVlc3Qtbm8tY29yc1wiIGFuZFxuICAgIC8vICAgIG5hbWUvdmFsdWUgaXMgbm90IGEgbm8tQ09SUy1zYWZlbGlzdGVkIHJlcXVlc3QtaGVhZGVyLFxuICAgIC8vICAgIHJldHVybi5cbiAgICAvLyA2LiBPdGhlcndpc2UsIGlmIHRoaXPigJlzIGd1YXJkIGlzIFwicmVzcG9uc2VcIiBhbmQgbmFtZSBpcyBhXG4gICAgLy8gICAgZm9yYmlkZGVuIHJlc3BvbnNlLWhlYWRlciBuYW1lLCByZXR1cm4uXG4gICAgLy8gTm90ZTogdW5kaWNpIGRvZXMgbm90IGltcGxlbWVudCBmb3JiaWRkZW4gaGVhZGVyIG5hbWVzXG4gICAgaWYgKHRoaXNba0d1YXJkXSA9PT0gJ2ltbXV0YWJsZScpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ltbXV0YWJsZScpXG4gICAgfSBlbHNlIGlmICh0aGlzW2tHdWFyZF0gPT09ICdyZXF1ZXN0LW5vLWNvcnMnKSB7XG4gICAgICAvLyBUT0RPXG4gICAgfVxuXG4gICAgLy8gNy4gU2V0IChuYW1lLCB2YWx1ZSkgaW4gdGhpc+KAmXMgaGVhZGVyIGxpc3QuXG4gICAgLy8gOC4gSWYgdGhpc+KAmXMgZ3VhcmQgaXMgXCJyZXF1ZXN0LW5vLWNvcnNcIiwgdGhlbiByZW1vdmVcbiAgICAvLyAgICBwcml2aWxlZ2VkIG5vLUNPUlMgcmVxdWVzdCBoZWFkZXJzIGZyb20gdGhpc1xuICAgIHRoaXNba0hlYWRlcnNMaXN0XS5zZXQobmFtZSwgdmFsdWUpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWhlYWRlcnMtZ2V0c2V0Y29va2llXG4gIGdldFNldENvb2tpZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIC8vIDEuIElmIHRoaXPigJlzIGhlYWRlciBsaXN0IGRvZXMgbm90IGNvbnRhaW4gYFNldC1Db29raWVgLCB0aGVuIHJldHVybiDCqyDCuy5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIHZhbHVlcyBvZiBhbGwgaGVhZGVycyBpbiB0aGlz4oCZcyBoZWFkZXIgbGlzdCB3aG9zZSBuYW1lIGlzXG4gICAgLy8gICAgYSBieXRlLWNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yIGBTZXQtQ29va2llYCwgaW4gb3JkZXIuXG5cbiAgICBjb25zdCBsaXN0ID0gdGhpc1trSGVhZGVyc0xpc3RdLmNvb2tpZXNcblxuICAgIGlmIChsaXN0KSB7XG4gICAgICByZXR1cm4gWy4uLmxpc3RdXG4gICAgfVxuXG4gICAgcmV0dXJuIFtdXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXItbGlzdC1zb3J0LWFuZC1jb21iaW5lXG4gIGdldCBba0hlYWRlcnNTb3J0ZWRNYXBdICgpIHtcbiAgICBpZiAodGhpc1trSGVhZGVyc0xpc3RdW2tIZWFkZXJzU29ydGVkTWFwXSkge1xuICAgICAgcmV0dXJuIHRoaXNba0hlYWRlcnNMaXN0XVtrSGVhZGVyc1NvcnRlZE1hcF1cbiAgICB9XG5cbiAgICAvLyAxLiBMZXQgaGVhZGVycyBiZSBhbiBlbXB0eSBsaXN0IG9mIGhlYWRlcnMgd2l0aCB0aGUga2V5IGJlaW5nIHRoZSBuYW1lXG4gICAgLy8gICAgYW5kIHZhbHVlIHRoZSB2YWx1ZS5cbiAgICBjb25zdCBoZWFkZXJzID0gW11cblxuICAgIC8vIDIuIExldCBuYW1lcyBiZSB0aGUgcmVzdWx0IG9mIGNvbnZlcnQgaGVhZGVyIG5hbWVzIHRvIGEgc29ydGVkLWxvd2VyY2FzZVxuICAgIC8vICAgIHNldCB3aXRoIGFsbCB0aGUgbmFtZXMgb2YgdGhlIGhlYWRlcnMgaW4gbGlzdC5cbiAgICBjb25zdCBuYW1lcyA9IFsuLi50aGlzW2tIZWFkZXJzTGlzdF1dLnNvcnQoKGEsIGIpID0+IGFbMF0gPCBiWzBdID8gLTEgOiAxKVxuICAgIGNvbnN0IGNvb2tpZXMgPSB0aGlzW2tIZWFkZXJzTGlzdF0uY29va2llc1xuXG4gICAgLy8gMy4gRm9yIGVhY2ggbmFtZSBvZiBuYW1lczpcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgKytpKSB7XG4gICAgICBjb25zdCBbbmFtZSwgdmFsdWVdID0gbmFtZXNbaV1cbiAgICAgIC8vIDEuIElmIG5hbWUgaXMgYHNldC1jb29raWVgLCB0aGVuOlxuICAgICAgaWYgKG5hbWUgPT09ICdzZXQtY29va2llJykge1xuICAgICAgICAvLyAxLiBMZXQgdmFsdWVzIGJlIGEgbGlzdCBvZiBhbGwgdmFsdWVzIG9mIGhlYWRlcnMgaW4gbGlzdCB3aG9zZSBuYW1lXG4gICAgICAgIC8vICAgIGlzIGEgYnl0ZS1jYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvciBuYW1lLCBpbiBvcmRlci5cblxuICAgICAgICAvLyAyLiBGb3IgZWFjaCB2YWx1ZSBvZiB2YWx1ZXM6XG4gICAgICAgIC8vIDEuIEFwcGVuZCAobmFtZSwgdmFsdWUpIHRvIGhlYWRlcnMuXG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29va2llcy5sZW5ndGg7ICsraikge1xuICAgICAgICAgIGhlYWRlcnMucHVzaChbbmFtZSwgY29va2llc1tqXV0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIDIuIE90aGVyd2lzZTpcblxuICAgICAgICAvLyAxLiBMZXQgdmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBnZXR0aW5nIG5hbWUgZnJvbSBsaXN0LlxuXG4gICAgICAgIC8vIDIuIEFzc2VydDogdmFsdWUgaXMgbm9uLW51bGwuXG4gICAgICAgIGFzc2VydCh2YWx1ZSAhPT0gbnVsbClcblxuICAgICAgICAvLyAzLiBBcHBlbmQgKG5hbWUsIHZhbHVlKSB0byBoZWFkZXJzLlxuICAgICAgICBoZWFkZXJzLnB1c2goW25hbWUsIHZhbHVlXSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzW2tIZWFkZXJzTGlzdF1ba0hlYWRlcnNTb3J0ZWRNYXBdID0gaGVhZGVyc1xuXG4gICAgLy8gNC4gUmV0dXJuIGhlYWRlcnMuXG4gICAgcmV0dXJuIGhlYWRlcnNcbiAgfVxuXG4gIGtleXMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICBpZiAodGhpc1trR3VhcmRdID09PSAnaW1tdXRhYmxlJykge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXVxuICAgICAgcmV0dXJuIG1ha2VJdGVyYXRvcigoKSA9PiB2YWx1ZSwgJ0hlYWRlcnMnLFxuICAgICAgICAna2V5JylcbiAgICB9XG5cbiAgICByZXR1cm4gbWFrZUl0ZXJhdG9yKFxuICAgICAgKCkgPT4gWy4uLnRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdLnZhbHVlcygpXSxcbiAgICAgICdIZWFkZXJzJyxcbiAgICAgICdrZXknXG4gICAgKVxuICB9XG5cbiAgdmFsdWVzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBIZWFkZXJzKVxuXG4gICAgaWYgKHRoaXNba0d1YXJkXSA9PT0gJ2ltbXV0YWJsZScpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1trSGVhZGVyc1NvcnRlZE1hcF1cbiAgICAgIHJldHVybiBtYWtlSXRlcmF0b3IoKCkgPT4gdmFsdWUsICdIZWFkZXJzJyxcbiAgICAgICAgJ3ZhbHVlJylcbiAgICB9XG5cbiAgICByZXR1cm4gbWFrZUl0ZXJhdG9yKFxuICAgICAgKCkgPT4gWy4uLnRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdLnZhbHVlcygpXSxcbiAgICAgICdIZWFkZXJzJyxcbiAgICAgICd2YWx1ZSdcbiAgICApXG4gIH1cblxuICBlbnRyaWVzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBIZWFkZXJzKVxuXG4gICAgaWYgKHRoaXNba0d1YXJkXSA9PT0gJ2ltbXV0YWJsZScpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1trSGVhZGVyc1NvcnRlZE1hcF1cbiAgICAgIHJldHVybiBtYWtlSXRlcmF0b3IoKCkgPT4gdmFsdWUsICdIZWFkZXJzJyxcbiAgICAgICAgJ2tleSt2YWx1ZScpXG4gICAgfVxuXG4gICAgcmV0dXJuIG1ha2VJdGVyYXRvcihcbiAgICAgICgpID0+IFsuLi50aGlzW2tIZWFkZXJzU29ydGVkTWFwXS52YWx1ZXMoKV0sXG4gICAgICAnSGVhZGVycycsXG4gICAgICAna2V5K3ZhbHVlJ1xuICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0geyh2YWx1ZTogc3RyaW5nLCBrZXk6IHN0cmluZywgc2VsZjogSGVhZGVycykgPT4gdm9pZH0gY2FsbGJhY2tGblxuICAgKiBAcGFyYW0ge3Vua25vd259IHRoaXNBcmdcbiAgICovXG4gIGZvckVhY2ggKGNhbGxiYWNrRm4sIHRoaXNBcmcgPSBnbG9iYWxUaGlzKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdIZWFkZXJzLmZvckVhY2gnIH0pXG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrRm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ2ZvckVhY2gnIG9uICdIZWFkZXJzJzogcGFyYW1ldGVyIDEgaXMgbm90IG9mIHR5cGUgJ0Z1bmN0aW9uJy5cIlxuICAgICAgKVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHRoaXMpIHtcbiAgICAgIGNhbGxiYWNrRm4uYXBwbHkodGhpc0FyZywgW3ZhbHVlLCBrZXksIHRoaXNdKVxuICAgIH1cbiAgfVxuXG4gIFtTeW1ib2wuZm9yKCdub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbScpXSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIHJldHVybiB0aGlzW2tIZWFkZXJzTGlzdF1cbiAgfVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdID0gSGVhZGVycy5wcm90b3R5cGUuZW50cmllc1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhIZWFkZXJzLnByb3RvdHlwZSwge1xuICBhcHBlbmQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGRlbGV0ZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZ2V0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBoYXM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHNldDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZ2V0U2V0Q29va2llOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBrZXlzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICB2YWx1ZXM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGVudHJpZXM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGZvckVhY2g6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIFtTeW1ib2wuaXRlcmF0b3JdOiB7IGVudW1lcmFibGU6IGZhbHNlIH0sXG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdIZWFkZXJzJyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfVxufSlcblxud2ViaWRsLmNvbnZlcnRlcnMuSGVhZGVyc0luaXQgPSBmdW5jdGlvbiAoVikge1xuICBpZiAod2ViaWRsLnV0aWwuVHlwZShWKSA9PT0gJ09iamVjdCcpIHtcbiAgICBpZiAoVltTeW1ib2wuaXRlcmF0b3JdKSB7XG4gICAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPHNlcXVlbmNlPEJ5dGVTdHJpbmc+PiddKFYpXG4gICAgfVxuXG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzWydyZWNvcmQ8Qnl0ZVN0cmluZywgQnl0ZVN0cmluZz4nXShWKVxuICB9XG5cbiAgdGhyb3cgd2ViaWRsLmVycm9ycy5jb252ZXJzaW9uRmFpbGVkKHtcbiAgICBwcmVmaXg6ICdIZWFkZXJzIGNvbnN0cnVjdG9yJyxcbiAgICBhcmd1bWVudDogJ0FyZ3VtZW50IDEnLFxuICAgIHR5cGVzOiBbJ3NlcXVlbmNlPHNlcXVlbmNlPEJ5dGVTdHJpbmc+PicsICdyZWNvcmQ8Qnl0ZVN0cmluZywgQnl0ZVN0cmluZz4nXVxuICB9KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZmlsbCxcbiAgSGVhZGVycyxcbiAgSGVhZGVyc0xpc3Rcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgSGVhZGVycywgSGVhZGVyc0xpc3QsIGZpbGwgfSA9IHJlcXVpcmUoJy4vaGVhZGVycycpXG5jb25zdCB7IGV4dHJhY3RCb2R5LCBjbG9uZUJvZHksIG1peGluQm9keSB9ID0gcmVxdWlyZSgnLi9ib2R5JylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5IH0gPSB1dGlsXG5jb25zdCB7XG4gIGlzVmFsaWRSZWFzb25QaHJhc2UsXG4gIGlzQ2FuY2VsbGVkLFxuICBpc0Fib3J0ZWQsXG4gIGlzQmxvYkxpa2UsXG4gIHNlcmlhbGl6ZUphdmFzY3JpcHRWYWx1ZVRvSlNPTlN0cmluZyxcbiAgaXNFcnJvckxpa2UsXG4gIGlzb21vcnBoaWNFbmNvZGVcbn0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3Qge1xuICByZWRpcmVjdFN0YXR1c1NldCxcbiAgbnVsbEJvZHlTdGF0dXMsXG4gIERPTUV4Y2VwdGlvblxufSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IHsga1N0YXRlLCBrSGVhZGVycywga0d1YXJkLCBrUmVhbG0gfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi93ZWJpZGwnKVxuY29uc3QgeyBGb3JtRGF0YSB9ID0gcmVxdWlyZSgnLi9mb3JtZGF0YScpXG5jb25zdCB7IGdldEdsb2JhbE9yaWdpbiB9ID0gcmVxdWlyZSgnLi9nbG9iYWwnKVxuY29uc3QgeyBVUkxTZXJpYWxpemVyIH0gPSByZXF1aXJlKCcuL2RhdGFVUkwnKVxuY29uc3QgeyBrSGVhZGVyc0xpc3QsIGtDb25zdHJ1Y3QgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyB0eXBlcyB9ID0gcmVxdWlyZSgndXRpbCcpXG5cbmNvbnN0IFJlYWRhYmxlU3RyZWFtID0gZ2xvYmFsVGhpcy5SZWFkYWJsZVN0cmVhbSB8fCByZXF1aXJlKCdzdHJlYW0vd2ViJykuUmVhZGFibGVTdHJlYW1cbmNvbnN0IHRleHRFbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCd1dGYtOCcpXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXNwb25zZS1jbGFzc1xuY2xhc3MgUmVzcG9uc2Uge1xuICAvLyBDcmVhdGVzIG5ldHdvcmsgZXJyb3IgUmVzcG9uc2UuXG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgLy8gVE9ET1xuICAgIGNvbnN0IHJlbGV2YW50UmVhbG0gPSB7IHNldHRpbmdzT2JqZWN0OiB7fSB9XG5cbiAgICAvLyBUaGUgc3RhdGljIGVycm9yKCkgbWV0aG9kIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhXG4gICAgLy8gUmVzcG9uc2Ugb2JqZWN0LCBnaXZlbiBhIG5ldyBuZXR3b3JrIGVycm9yLCBcImltbXV0YWJsZVwiLCBhbmQgdGhpc+KAmXNcbiAgICAvLyByZWxldmFudCBSZWFsbS5cbiAgICBjb25zdCByZXNwb25zZU9iamVjdCA9IG5ldyBSZXNwb25zZSgpXG4gICAgcmVzcG9uc2VPYmplY3Rba1N0YXRlXSA9IG1ha2VOZXR3b3JrRXJyb3IoKVxuICAgIHJlc3BvbnNlT2JqZWN0W2tSZWFsbV0gPSByZWxldmFudFJlYWxtXG4gICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tIZWFkZXJzTGlzdF0gPSByZXNwb25zZU9iamVjdFtrU3RhdGVdLmhlYWRlcnNMaXN0XG4gICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tHdWFyZF0gPSAnaW1tdXRhYmxlJ1xuICAgIHJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrUmVhbG1dID0gcmVsZXZhbnRSZWFsbVxuICAgIHJldHVybiByZXNwb25zZU9iamVjdFxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1yZXNwb25zZS1qc29uXG4gIHN0YXRpYyBqc29uIChkYXRhLCBpbml0ID0ge30pIHtcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnUmVzcG9uc2UuanNvbicgfSlcblxuICAgIGlmIChpbml0ICE9PSBudWxsKSB7XG4gICAgICBpbml0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVzcG9uc2VJbml0KGluaXQpXG4gICAgfVxuXG4gICAgLy8gMS4gTGV0IGJ5dGVzIHRoZSByZXN1bHQgb2YgcnVubmluZyBzZXJpYWxpemUgYSBKYXZhU2NyaXB0IHZhbHVlIHRvIEpTT04gYnl0ZXMgb24gZGF0YS5cbiAgICBjb25zdCBieXRlcyA9IHRleHRFbmNvZGVyLmVuY29kZShcbiAgICAgIHNlcmlhbGl6ZUphdmFzY3JpcHRWYWx1ZVRvSlNPTlN0cmluZyhkYXRhKVxuICAgIClcblxuICAgIC8vIDIuIExldCBib2R5IGJlIHRoZSByZXN1bHQgb2YgZXh0cmFjdGluZyBieXRlcy5cbiAgICBjb25zdCBib2R5ID0gZXh0cmFjdEJvZHkoYnl0ZXMpXG5cbiAgICAvLyAzLiBMZXQgcmVzcG9uc2VPYmplY3QgYmUgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhIFJlc3BvbnNlIG9iamVjdCwgZ2l2ZW4gYSBuZXcgcmVzcG9uc2UsXG4gICAgLy8gICAgXCJyZXNwb25zZVwiLCBhbmQgdGhpc+KAmXMgcmVsZXZhbnQgUmVhbG0uXG4gICAgY29uc3QgcmVsZXZhbnRSZWFsbSA9IHsgc2V0dGluZ3NPYmplY3Q6IHt9IH1cbiAgICBjb25zdCByZXNwb25zZU9iamVjdCA9IG5ldyBSZXNwb25zZSgpXG4gICAgcmVzcG9uc2VPYmplY3Rba1JlYWxtXSA9IHJlbGV2YW50UmVhbG1cbiAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba0d1YXJkXSA9ICdyZXNwb25zZSdcbiAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba1JlYWxtXSA9IHJlbGV2YW50UmVhbG1cblxuICAgIC8vIDQuIFBlcmZvcm0gaW5pdGlhbGl6ZSBhIHJlc3BvbnNlIGdpdmVuIHJlc3BvbnNlT2JqZWN0LCBpbml0LCBhbmQgKGJvZHksIFwiYXBwbGljYXRpb24vanNvblwiKS5cbiAgICBpbml0aWFsaXplUmVzcG9uc2UocmVzcG9uc2VPYmplY3QsIGluaXQsIHsgYm9keTogYm9keVswXSwgdHlwZTogJ2FwcGxpY2F0aW9uL2pzb24nIH0pXG5cbiAgICAvLyA1LiBSZXR1cm4gcmVzcG9uc2VPYmplY3QuXG4gICAgcmV0dXJuIHJlc3BvbnNlT2JqZWN0XG4gIH1cblxuICAvLyBDcmVhdGVzIGEgcmVkaXJlY3QgUmVzcG9uc2UgdGhhdCByZWRpcmVjdHMgdG8gdXJsIHdpdGggc3RhdHVzIHN0YXR1cy5cbiAgc3RhdGljIHJlZGlyZWN0ICh1cmwsIHN0YXR1cyA9IDMwMikge1xuICAgIGNvbnN0IHJlbGV2YW50UmVhbG0gPSB7IHNldHRpbmdzT2JqZWN0OiB7fSB9XG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnUmVzcG9uc2UucmVkaXJlY3QnIH0pXG5cbiAgICB1cmwgPSB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcodXJsKVxuICAgIHN0YXR1cyA9IHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBzaG9ydCddKHN0YXR1cylcblxuICAgIC8vIDEuIExldCBwYXJzZWRVUkwgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIHVybCB3aXRoIGN1cnJlbnQgc2V0dGluZ3NcbiAgICAvLyBvYmplY3TigJlzIEFQSSBiYXNlIFVSTC5cbiAgICAvLyAyLiBJZiBwYXJzZWRVUkwgaXMgZmFpbHVyZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAvLyBUT0RPOiBiYXNlLVVSTD9cbiAgICBsZXQgcGFyc2VkVVJMXG4gICAgdHJ5IHtcbiAgICAgIHBhcnNlZFVSTCA9IG5ldyBVUkwodXJsLCBnZXRHbG9iYWxPcmlnaW4oKSlcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRocm93IE9iamVjdC5hc3NpZ24obmV3IFR5cGVFcnJvcignRmFpbGVkIHRvIHBhcnNlIFVSTCBmcm9tICcgKyB1cmwpLCB7XG4gICAgICAgIGNhdXNlOiBlcnJcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMy4gSWYgc3RhdHVzIGlzIG5vdCBhIHJlZGlyZWN0IHN0YXR1cywgdGhlbiB0aHJvdyBhIFJhbmdlRXJyb3IuXG4gICAgaWYgKCFyZWRpcmVjdFN0YXR1c1NldC5oYXMoc3RhdHVzKSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgc3RhdHVzIGNvZGUgJyArIHN0YXR1cylcbiAgICB9XG5cbiAgICAvLyA0LiBMZXQgcmVzcG9uc2VPYmplY3QgYmUgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhIFJlc3BvbnNlIG9iamVjdCxcbiAgICAvLyBnaXZlbiBhIG5ldyByZXNwb25zZSwgXCJpbW11dGFibGVcIiwgYW5kIHRoaXPigJlzIHJlbGV2YW50IFJlYWxtLlxuICAgIGNvbnN0IHJlc3BvbnNlT2JqZWN0ID0gbmV3IFJlc3BvbnNlKClcbiAgICByZXNwb25zZU9iamVjdFtrUmVhbG1dID0gcmVsZXZhbnRSZWFsbVxuICAgIHJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrR3VhcmRdID0gJ2ltbXV0YWJsZSdcbiAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba1JlYWxtXSA9IHJlbGV2YW50UmVhbG1cblxuICAgIC8vIDUuIFNldCByZXNwb25zZU9iamVjdOKAmXMgcmVzcG9uc2XigJlzIHN0YXR1cyB0byBzdGF0dXMuXG4gICAgcmVzcG9uc2VPYmplY3Rba1N0YXRlXS5zdGF0dXMgPSBzdGF0dXNcblxuICAgIC8vIDYuIExldCB2YWx1ZSBiZSBwYXJzZWRVUkwsIHNlcmlhbGl6ZWQgYW5kIGlzb21vcnBoaWMgZW5jb2RlZC5cbiAgICBjb25zdCB2YWx1ZSA9IGlzb21vcnBoaWNFbmNvZGUoVVJMU2VyaWFsaXplcihwYXJzZWRVUkwpKVxuXG4gICAgLy8gNy4gQXBwZW5kIGBMb2NhdGlvbmAvdmFsdWUgdG8gcmVzcG9uc2VPYmplY3TigJlzIHJlc3BvbnNl4oCZcyBoZWFkZXIgbGlzdC5cbiAgICByZXNwb25zZU9iamVjdFtrU3RhdGVdLmhlYWRlcnNMaXN0LmFwcGVuZCgnbG9jYXRpb24nLCB2YWx1ZSlcblxuICAgIC8vIDguIFJldHVybiByZXNwb25zZU9iamVjdC5cbiAgICByZXR1cm4gcmVzcG9uc2VPYmplY3RcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tcmVzcG9uc2VcbiAgY29uc3RydWN0b3IgKGJvZHkgPSBudWxsLCBpbml0ID0ge30pIHtcbiAgICBpZiAoYm9keSAhPT0gbnVsbCkge1xuICAgICAgYm9keSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkJvZHlJbml0KGJvZHkpXG4gICAgfVxuXG4gICAgaW5pdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlc3BvbnNlSW5pdChpbml0KVxuXG4gICAgLy8gVE9ET1xuICAgIHRoaXNba1JlYWxtXSA9IHsgc2V0dGluZ3NPYmplY3Q6IHt9IH1cblxuICAgIC8vIDEuIFNldCB0aGlz4oCZcyByZXNwb25zZSB0byBhIG5ldyByZXNwb25zZS5cbiAgICB0aGlzW2tTdGF0ZV0gPSBtYWtlUmVzcG9uc2Uoe30pXG5cbiAgICAvLyAyLiBTZXQgdGhpc+KAmXMgaGVhZGVycyB0byBhIG5ldyBIZWFkZXJzIG9iamVjdCB3aXRoIHRoaXPigJlzIHJlbGV2YW50XG4gICAgLy8gUmVhbG0sIHdob3NlIGhlYWRlciBsaXN0IGlzIHRoaXPigJlzIHJlc3BvbnNl4oCZcyBoZWFkZXIgbGlzdCBhbmQgZ3VhcmRcbiAgICAvLyBpcyBcInJlc3BvbnNlXCIuXG4gICAgdGhpc1trSGVhZGVyc10gPSBuZXcgSGVhZGVycyhrQ29uc3RydWN0KVxuICAgIHRoaXNba0hlYWRlcnNdW2tHdWFyZF0gPSAncmVzcG9uc2UnXG4gICAgdGhpc1trSGVhZGVyc11ba0hlYWRlcnNMaXN0XSA9IHRoaXNba1N0YXRlXS5oZWFkZXJzTGlzdFxuICAgIHRoaXNba0hlYWRlcnNdW2tSZWFsbV0gPSB0aGlzW2tSZWFsbV1cblxuICAgIC8vIDMuIExldCBib2R5V2l0aFR5cGUgYmUgbnVsbC5cbiAgICBsZXQgYm9keVdpdGhUeXBlID0gbnVsbFxuXG4gICAgLy8gNC4gSWYgYm9keSBpcyBub24tbnVsbCwgdGhlbiBzZXQgYm9keVdpdGhUeXBlIHRvIHRoZSByZXN1bHQgb2YgZXh0cmFjdGluZyBib2R5LlxuICAgIGlmIChib2R5ICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IFtleHRyYWN0ZWRCb2R5LCB0eXBlXSA9IGV4dHJhY3RCb2R5KGJvZHkpXG4gICAgICBib2R5V2l0aFR5cGUgPSB7IGJvZHk6IGV4dHJhY3RlZEJvZHksIHR5cGUgfVxuICAgIH1cblxuICAgIC8vIDUuIFBlcmZvcm0gaW5pdGlhbGl6ZSBhIHJlc3BvbnNlIGdpdmVuIHRoaXMsIGluaXQsIGFuZCBib2R5V2l0aFR5cGUuXG4gICAgaW5pdGlhbGl6ZVJlc3BvbnNlKHRoaXMsIGluaXQsIGJvZHlXaXRoVHlwZSlcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2XigJlzIHR5cGUsIGUuZy4sIFwiY29yc1wiLlxuICBnZXQgdHlwZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICAvLyBUaGUgdHlwZSBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlz4oCZcyByZXNwb25zZeKAmXMgdHlwZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnR5cGVcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2XigJlzIFVSTCwgaWYgaXQgaGFzIG9uZTsgb3RoZXJ3aXNlIHRoZSBlbXB0eSBzdHJpbmcuXG4gIGdldCB1cmwgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgY29uc3QgdXJsTGlzdCA9IHRoaXNba1N0YXRlXS51cmxMaXN0XG5cbiAgICAvLyBUaGUgdXJsIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoZSBlbXB0eSBzdHJpbmcgaWYgdGhpc+KAmXNcbiAgICAvLyByZXNwb25zZeKAmXMgVVJMIGlzIG51bGw7IG90aGVyd2lzZSB0aGlz4oCZcyByZXNwb25zZeKAmXMgVVJMLFxuICAgIC8vIHNlcmlhbGl6ZWQgd2l0aCBleGNsdWRlIGZyYWdtZW50IHNldCB0byB0cnVlLlxuICAgIGNvbnN0IHVybCA9IHVybExpc3RbdXJsTGlzdC5sZW5ndGggLSAxXSA/PyBudWxsXG5cbiAgICBpZiAodXJsID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG5cbiAgICByZXR1cm4gVVJMU2VyaWFsaXplcih1cmwsIHRydWUpXG4gIH1cblxuICAvLyBSZXR1cm5zIHdoZXRoZXIgcmVzcG9uc2Ugd2FzIG9idGFpbmVkIHRocm91Z2ggYSByZWRpcmVjdC5cbiAgZ2V0IHJlZGlyZWN0ZWQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgLy8gVGhlIHJlZGlyZWN0ZWQgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdHJ1ZSBpZiB0aGlz4oCZcyByZXNwb25zZeKAmXMgVVJMXG4gICAgLy8gbGlzdCBoYXMgbW9yZSB0aGFuIG9uZSBpdGVtOyBvdGhlcndpc2UgZmFsc2UuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS51cmxMaXN0Lmxlbmd0aCA+IDFcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2XigJlzIHN0YXR1cy5cbiAgZ2V0IHN0YXR1cyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICAvLyBUaGUgc3RhdHVzIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXPigJlzIHJlc3BvbnNl4oCZcyBzdGF0dXMuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5zdGF0dXNcbiAgfVxuXG4gIC8vIFJldHVybnMgd2hldGhlciByZXNwb25zZeKAmXMgc3RhdHVzIGlzIGFuIG9rIHN0YXR1cy5cbiAgZ2V0IG9rICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXNwb25zZSlcblxuICAgIC8vIFRoZSBvayBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0cnVlIGlmIHRoaXPigJlzIHJlc3BvbnNl4oCZcyBzdGF0dXMgaXMgYW5cbiAgICAvLyBvayBzdGF0dXM7IG90aGVyd2lzZSBmYWxzZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnN0YXR1cyA+PSAyMDAgJiYgdGhpc1trU3RhdGVdLnN0YXR1cyA8PSAyOTlcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2XigJlzIHN0YXR1cyBtZXNzYWdlLlxuICBnZXQgc3RhdHVzVGV4dCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICAvLyBUaGUgc3RhdHVzVGV4dCBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlz4oCZcyByZXNwb25zZeKAmXMgc3RhdHVzXG4gICAgLy8gbWVzc2FnZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnN0YXR1c1RleHRcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2XigJlzIGhlYWRlcnMgYXMgSGVhZGVycy5cbiAgZ2V0IGhlYWRlcnMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgLy8gVGhlIGhlYWRlcnMgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc+KAmXMgaGVhZGVycy5cbiAgICByZXR1cm4gdGhpc1trSGVhZGVyc11cbiAgfVxuXG4gIGdldCBib2R5ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXNwb25zZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uYm9keSA/IHRoaXNba1N0YXRlXS5ib2R5LnN0cmVhbSA6IG51bGxcbiAgfVxuXG4gIGdldCBib2R5VXNlZCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICByZXR1cm4gISF0aGlzW2tTdGF0ZV0uYm9keSAmJiB1dGlsLmlzRGlzdHVyYmVkKHRoaXNba1N0YXRlXS5ib2R5LnN0cmVhbSlcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBjbG9uZSBvZiByZXNwb25zZS5cbiAgY2xvbmUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgLy8gMS4gSWYgdGhpcyBpcyB1bnVzYWJsZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAodGhpcy5ib2R5VXNlZCB8fCAodGhpcy5ib2R5ICYmIHRoaXMuYm9keS5sb2NrZWQpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ1Jlc3BvbnNlLmNsb25lJyxcbiAgICAgICAgbWVzc2FnZTogJ0JvZHkgaGFzIGFscmVhZHkgYmVlbiBjb25zdW1lZC4nXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDIuIExldCBjbG9uZWRSZXNwb25zZSBiZSB0aGUgcmVzdWx0IG9mIGNsb25pbmcgdGhpc+KAmXMgcmVzcG9uc2UuXG4gICAgY29uc3QgY2xvbmVkUmVzcG9uc2UgPSBjbG9uZVJlc3BvbnNlKHRoaXNba1N0YXRlXSlcblxuICAgIC8vIDMuIFJldHVybiB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEgUmVzcG9uc2Ugb2JqZWN0LCBnaXZlblxuICAgIC8vIGNsb25lZFJlc3BvbnNlLCB0aGlz4oCZcyBoZWFkZXJz4oCZcyBndWFyZCwgYW5kIHRoaXPigJlzIHJlbGV2YW50IFJlYWxtLlxuICAgIGNvbnN0IGNsb25lZFJlc3BvbnNlT2JqZWN0ID0gbmV3IFJlc3BvbnNlKClcbiAgICBjbG9uZWRSZXNwb25zZU9iamVjdFtrU3RhdGVdID0gY2xvbmVkUmVzcG9uc2VcbiAgICBjbG9uZWRSZXNwb25zZU9iamVjdFtrUmVhbG1dID0gdGhpc1trUmVhbG1dXG4gICAgY2xvbmVkUmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tIZWFkZXJzTGlzdF0gPSBjbG9uZWRSZXNwb25zZS5oZWFkZXJzTGlzdFxuICAgIGNsb25lZFJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrR3VhcmRdID0gdGhpc1trSGVhZGVyc11ba0d1YXJkXVxuICAgIGNsb25lZFJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrUmVhbG1dID0gdGhpc1trSGVhZGVyc11ba1JlYWxtXVxuXG4gICAgcmV0dXJuIGNsb25lZFJlc3BvbnNlT2JqZWN0XG4gIH1cbn1cblxubWl4aW5Cb2R5KFJlc3BvbnNlKVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhSZXNwb25zZS5wcm90b3R5cGUsIHtcbiAgdHlwZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgdXJsOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBzdGF0dXM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9rOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWRpcmVjdGVkOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBzdGF0dXNUZXh0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBoZWFkZXJzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBjbG9uZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYm9keToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYm9keVVzZWQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdSZXNwb25zZScsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH1cbn0pXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFJlc3BvbnNlLCB7XG4gIGpzb246IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlZGlyZWN0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBlcnJvcjoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtcmVzcG9uc2UtY2xvbmVcbmZ1bmN0aW9uIGNsb25lUmVzcG9uc2UgKHJlc3BvbnNlKSB7XG4gIC8vIFRvIGNsb25lIGEgcmVzcG9uc2UgcmVzcG9uc2UsIHJ1biB0aGVzZSBzdGVwczpcblxuICAvLyAxLiBJZiByZXNwb25zZSBpcyBhIGZpbHRlcmVkIHJlc3BvbnNlLCB0aGVuIHJldHVybiBhIG5ldyBpZGVudGljYWxcbiAgLy8gZmlsdGVyZWQgcmVzcG9uc2Ugd2hvc2UgaW50ZXJuYWwgcmVzcG9uc2UgaXMgYSBjbG9uZSBvZiByZXNwb25zZeKAmXNcbiAgLy8gaW50ZXJuYWwgcmVzcG9uc2UuXG4gIGlmIChyZXNwb25zZS5pbnRlcm5hbFJlc3BvbnNlKSB7XG4gICAgcmV0dXJuIGZpbHRlclJlc3BvbnNlKFxuICAgICAgY2xvbmVSZXNwb25zZShyZXNwb25zZS5pbnRlcm5hbFJlc3BvbnNlKSxcbiAgICAgIHJlc3BvbnNlLnR5cGVcbiAgICApXG4gIH1cblxuICAvLyAyLiBMZXQgbmV3UmVzcG9uc2UgYmUgYSBjb3B5IG9mIHJlc3BvbnNlLCBleGNlcHQgZm9yIGl0cyBib2R5LlxuICBjb25zdCBuZXdSZXNwb25zZSA9IG1ha2VSZXNwb25zZSh7IC4uLnJlc3BvbnNlLCBib2R5OiBudWxsIH0pXG5cbiAgLy8gMy4gSWYgcmVzcG9uc2XigJlzIGJvZHkgaXMgbm9uLW51bGwsIHRoZW4gc2V0IG5ld1Jlc3BvbnNl4oCZcyBib2R5IHRvIHRoZVxuICAvLyByZXN1bHQgb2YgY2xvbmluZyByZXNwb25zZeKAmXMgYm9keS5cbiAgaWYgKHJlc3BvbnNlLmJvZHkgIT0gbnVsbCkge1xuICAgIG5ld1Jlc3BvbnNlLmJvZHkgPSBjbG9uZUJvZHkocmVzcG9uc2UuYm9keSlcbiAgfVxuXG4gIC8vIDQuIFJldHVybiBuZXdSZXNwb25zZS5cbiAgcmV0dXJuIG5ld1Jlc3BvbnNlXG59XG5cbmZ1bmN0aW9uIG1ha2VSZXNwb25zZSAoaW5pdCkge1xuICByZXR1cm4ge1xuICAgIGFib3J0ZWQ6IGZhbHNlLFxuICAgIHJhbmdlUmVxdWVzdGVkOiBmYWxzZSxcbiAgICB0aW1pbmdBbGxvd1Bhc3NlZDogZmFsc2UsXG4gICAgcmVxdWVzdEluY2x1ZGVzQ3JlZGVudGlhbHM6IGZhbHNlLFxuICAgIHR5cGU6ICdkZWZhdWx0JyxcbiAgICBzdGF0dXM6IDIwMCxcbiAgICB0aW1pbmdJbmZvOiBudWxsLFxuICAgIGNhY2hlU3RhdGU6ICcnLFxuICAgIHN0YXR1c1RleHQ6ICcnLFxuICAgIC4uLmluaXQsXG4gICAgaGVhZGVyc0xpc3Q6IGluaXQuaGVhZGVyc0xpc3RcbiAgICAgID8gbmV3IEhlYWRlcnNMaXN0KGluaXQuaGVhZGVyc0xpc3QpXG4gICAgICA6IG5ldyBIZWFkZXJzTGlzdCgpLFxuICAgIHVybExpc3Q6IGluaXQudXJsTGlzdCA/IFsuLi5pbml0LnVybExpc3RdIDogW11cbiAgfVxufVxuXG5mdW5jdGlvbiBtYWtlTmV0d29ya0Vycm9yIChyZWFzb24pIHtcbiAgY29uc3QgaXNFcnJvciA9IGlzRXJyb3JMaWtlKHJlYXNvbilcbiAgcmV0dXJuIG1ha2VSZXNwb25zZSh7XG4gICAgdHlwZTogJ2Vycm9yJyxcbiAgICBzdGF0dXM6IDAsXG4gICAgZXJyb3I6IGlzRXJyb3JcbiAgICAgID8gcmVhc29uXG4gICAgICA6IG5ldyBFcnJvcihyZWFzb24gPyBTdHJpbmcocmVhc29uKSA6IHJlYXNvbiksXG4gICAgYWJvcnRlZDogcmVhc29uICYmIHJlYXNvbi5uYW1lID09PSAnQWJvcnRFcnJvcidcbiAgfSlcbn1cblxuZnVuY3Rpb24gbWFrZUZpbHRlcmVkUmVzcG9uc2UgKHJlc3BvbnNlLCBzdGF0ZSkge1xuICBzdGF0ZSA9IHtcbiAgICBpbnRlcm5hbFJlc3BvbnNlOiByZXNwb25zZSxcbiAgICAuLi5zdGF0ZVxuICB9XG5cbiAgcmV0dXJuIG5ldyBQcm94eShyZXNwb25zZSwge1xuICAgIGdldCAodGFyZ2V0LCBwKSB7XG4gICAgICByZXR1cm4gcCBpbiBzdGF0ZSA/IHN0YXRlW3BdIDogdGFyZ2V0W3BdXG4gICAgfSxcbiAgICBzZXQgKHRhcmdldCwgcCwgdmFsdWUpIHtcbiAgICAgIGFzc2VydCghKHAgaW4gc3RhdGUpKVxuICAgICAgdGFyZ2V0W3BdID0gdmFsdWVcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICB9KVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1maWx0ZXJlZC1yZXNwb25zZVxuZnVuY3Rpb24gZmlsdGVyUmVzcG9uc2UgKHJlc3BvbnNlLCB0eXBlKSB7XG4gIC8vIFNldCByZXNwb25zZSB0byB0aGUgZm9sbG93aW5nIGZpbHRlcmVkIHJlc3BvbnNlIHdpdGggcmVzcG9uc2UgYXMgaXRzXG4gIC8vIGludGVybmFsIHJlc3BvbnNlLCBkZXBlbmRpbmcgb24gcmVxdWVzdOKAmXMgcmVzcG9uc2UgdGFpbnRpbmc6XG4gIGlmICh0eXBlID09PSAnYmFzaWMnKSB7XG4gICAgLy8gQSBiYXNpYyBmaWx0ZXJlZCByZXNwb25zZSBpcyBhIGZpbHRlcmVkIHJlc3BvbnNlIHdob3NlIHR5cGUgaXMgXCJiYXNpY1wiXG4gICAgLy8gYW5kIGhlYWRlciBsaXN0IGV4Y2x1ZGVzIGFueSBoZWFkZXJzIGluIGludGVybmFsIHJlc3BvbnNl4oCZcyBoZWFkZXIgbGlzdFxuICAgIC8vIHdob3NlIG5hbWUgaXMgYSBmb3JiaWRkZW4gcmVzcG9uc2UtaGVhZGVyIG5hbWUuXG5cbiAgICAvLyBOb3RlOiB1bmRpY2kgZG9lcyBub3QgaW1wbGVtZW50IGZvcmJpZGRlbiByZXNwb25zZS1oZWFkZXIgbmFtZXNcbiAgICByZXR1cm4gbWFrZUZpbHRlcmVkUmVzcG9uc2UocmVzcG9uc2UsIHtcbiAgICAgIHR5cGU6ICdiYXNpYycsXG4gICAgICBoZWFkZXJzTGlzdDogcmVzcG9uc2UuaGVhZGVyc0xpc3RcbiAgICB9KVxuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdjb3JzJykge1xuICAgIC8vIEEgQ09SUyBmaWx0ZXJlZCByZXNwb25zZSBpcyBhIGZpbHRlcmVkIHJlc3BvbnNlIHdob3NlIHR5cGUgaXMgXCJjb3JzXCJcbiAgICAvLyBhbmQgaGVhZGVyIGxpc3QgZXhjbHVkZXMgYW55IGhlYWRlcnMgaW4gaW50ZXJuYWwgcmVzcG9uc2XigJlzIGhlYWRlclxuICAgIC8vIGxpc3Qgd2hvc2UgbmFtZSBpcyBub3QgYSBDT1JTLXNhZmVsaXN0ZWQgcmVzcG9uc2UtaGVhZGVyIG5hbWUsIGdpdmVuXG4gICAgLy8gaW50ZXJuYWwgcmVzcG9uc2XigJlzIENPUlMtZXhwb3NlZCBoZWFkZXItbmFtZSBsaXN0LlxuXG4gICAgLy8gTm90ZTogdW5kaWNpIGRvZXMgbm90IGltcGxlbWVudCBDT1JTLXNhZmVsaXN0ZWQgcmVzcG9uc2UtaGVhZGVyIG5hbWVzXG4gICAgcmV0dXJuIG1ha2VGaWx0ZXJlZFJlc3BvbnNlKHJlc3BvbnNlLCB7XG4gICAgICB0eXBlOiAnY29ycycsXG4gICAgICBoZWFkZXJzTGlzdDogcmVzcG9uc2UuaGVhZGVyc0xpc3RcbiAgICB9KVxuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdvcGFxdWUnKSB7XG4gICAgLy8gQW4gb3BhcXVlIGZpbHRlcmVkIHJlc3BvbnNlIGlzIGEgZmlsdGVyZWQgcmVzcG9uc2Ugd2hvc2UgdHlwZSBpc1xuICAgIC8vIFwib3BhcXVlXCIsIFVSTCBsaXN0IGlzIHRoZSBlbXB0eSBsaXN0LCBzdGF0dXMgaXMgMCwgc3RhdHVzIG1lc3NhZ2VcbiAgICAvLyBpcyB0aGUgZW1wdHkgYnl0ZSBzZXF1ZW5jZSwgaGVhZGVyIGxpc3QgaXMgZW1wdHksIGFuZCBib2R5IGlzIG51bGwuXG5cbiAgICByZXR1cm4gbWFrZUZpbHRlcmVkUmVzcG9uc2UocmVzcG9uc2UsIHtcbiAgICAgIHR5cGU6ICdvcGFxdWUnLFxuICAgICAgdXJsTGlzdDogT2JqZWN0LmZyZWV6ZShbXSksXG4gICAgICBzdGF0dXM6IDAsXG4gICAgICBzdGF0dXNUZXh0OiAnJyxcbiAgICAgIGJvZHk6IG51bGxcbiAgICB9KVxuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdvcGFxdWVyZWRpcmVjdCcpIHtcbiAgICAvLyBBbiBvcGFxdWUtcmVkaXJlY3QgZmlsdGVyZWQgcmVzcG9uc2UgaXMgYSBmaWx0ZXJlZCByZXNwb25zZSB3aG9zZSB0eXBlXG4gICAgLy8gaXMgXCJvcGFxdWVyZWRpcmVjdFwiLCBzdGF0dXMgaXMgMCwgc3RhdHVzIG1lc3NhZ2UgaXMgdGhlIGVtcHR5IGJ5dGVcbiAgICAvLyBzZXF1ZW5jZSwgaGVhZGVyIGxpc3QgaXMgZW1wdHksIGFuZCBib2R5IGlzIG51bGwuXG5cbiAgICByZXR1cm4gbWFrZUZpbHRlcmVkUmVzcG9uc2UocmVzcG9uc2UsIHtcbiAgICAgIHR5cGU6ICdvcGFxdWVyZWRpcmVjdCcsXG4gICAgICBzdGF0dXM6IDAsXG4gICAgICBzdGF0dXNUZXh0OiAnJyxcbiAgICAgIGhlYWRlcnNMaXN0OiBbXSxcbiAgICAgIGJvZHk6IG51bGxcbiAgICB9KVxuICB9IGVsc2Uge1xuICAgIGFzc2VydChmYWxzZSlcbiAgfVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYXBwcm9wcmlhdGUtbmV0d29yay1lcnJvclxuZnVuY3Rpb24gbWFrZUFwcHJvcHJpYXRlTmV0d29ya0Vycm9yIChmZXRjaFBhcmFtcywgZXJyID0gbnVsbCkge1xuICAvLyAxLiBBc3NlcnQ6IGZldGNoUGFyYW1zIGlzIGNhbmNlbGVkLlxuICBhc3NlcnQoaXNDYW5jZWxsZWQoZmV0Y2hQYXJhbXMpKVxuXG4gIC8vIDIuIFJldHVybiBhbiBhYm9ydGVkIG5ldHdvcmsgZXJyb3IgaWYgZmV0Y2hQYXJhbXMgaXMgYWJvcnRlZDtcbiAgLy8gb3RoZXJ3aXNlIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gIHJldHVybiBpc0Fib3J0ZWQoZmV0Y2hQYXJhbXMpXG4gICAgPyBtYWtlTmV0d29ya0Vycm9yKE9iamVjdC5hc3NpZ24obmV3IERPTUV4Y2VwdGlvbignVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC4nLCAnQWJvcnRFcnJvcicpLCB7IGNhdXNlOiBlcnIgfSkpXG4gICAgOiBtYWtlTmV0d29ya0Vycm9yKE9iamVjdC5hc3NpZ24obmV3IERPTUV4Y2VwdGlvbignUmVxdWVzdCB3YXMgY2FuY2VsbGVkLicpLCB7IGNhdXNlOiBlcnIgfSkpXG59XG5cbi8vIGh0dHBzOi8vd2hhdHByLm9yZy9mZXRjaC8xMzkyLmh0bWwjaW5pdGlhbGl6ZS1hLXJlc3BvbnNlXG5mdW5jdGlvbiBpbml0aWFsaXplUmVzcG9uc2UgKHJlc3BvbnNlLCBpbml0LCBib2R5KSB7XG4gIC8vIDEuIElmIGluaXRbXCJzdGF0dXNcIl0gaXMgbm90IGluIHRoZSByYW5nZSAyMDAgdG8gNTk5LCBpbmNsdXNpdmUsIHRoZW5cbiAgLy8gICAgdGhyb3cgYSBSYW5nZUVycm9yLlxuICBpZiAoaW5pdC5zdGF0dXMgIT09IG51bGwgJiYgKGluaXQuc3RhdHVzIDwgMjAwIHx8IGluaXQuc3RhdHVzID4gNTk5KSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdpbml0W1wic3RhdHVzXCJdIG11c3QgYmUgaW4gdGhlIHJhbmdlIG9mIDIwMCB0byA1OTksIGluY2x1c2l2ZS4nKVxuICB9XG5cbiAgLy8gMi4gSWYgaW5pdFtcInN0YXR1c1RleHRcIl0gZG9lcyBub3QgbWF0Y2ggdGhlIHJlYXNvbi1waHJhc2UgdG9rZW4gcHJvZHVjdGlvbixcbiAgLy8gICAgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKCdzdGF0dXNUZXh0JyBpbiBpbml0ICYmIGluaXQuc3RhdHVzVGV4dCAhPSBudWxsKSB7XG4gICAgLy8gU2VlLCBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjEuMjpcbiAgICAvLyAgIHJlYXNvbi1waHJhc2UgID0gKiggSFRBQiAvIFNQIC8gVkNIQVIgLyBvYnMtdGV4dCApXG4gICAgaWYgKCFpc1ZhbGlkUmVhc29uUGhyYXNlKFN0cmluZyhpbml0LnN0YXR1c1RleHQpKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBzdGF0dXNUZXh0JylcbiAgICB9XG4gIH1cblxuICAvLyAzLiBTZXQgcmVzcG9uc2XigJlzIHJlc3BvbnNl4oCZcyBzdGF0dXMgdG8gaW5pdFtcInN0YXR1c1wiXS5cbiAgaWYgKCdzdGF0dXMnIGluIGluaXQgJiYgaW5pdC5zdGF0dXMgIT0gbnVsbCkge1xuICAgIHJlc3BvbnNlW2tTdGF0ZV0uc3RhdHVzID0gaW5pdC5zdGF0dXNcbiAgfVxuXG4gIC8vIDQuIFNldCByZXNwb25zZeKAmXMgcmVzcG9uc2XigJlzIHN0YXR1cyBtZXNzYWdlIHRvIGluaXRbXCJzdGF0dXNUZXh0XCJdLlxuICBpZiAoJ3N0YXR1c1RleHQnIGluIGluaXQgJiYgaW5pdC5zdGF0dXNUZXh0ICE9IG51bGwpIHtcbiAgICByZXNwb25zZVtrU3RhdGVdLnN0YXR1c1RleHQgPSBpbml0LnN0YXR1c1RleHRcbiAgfVxuXG4gIC8vIDUuIElmIGluaXRbXCJoZWFkZXJzXCJdIGV4aXN0cywgdGhlbiBmaWxsIHJlc3BvbnNl4oCZcyBoZWFkZXJzIHdpdGggaW5pdFtcImhlYWRlcnNcIl0uXG4gIGlmICgnaGVhZGVycycgaW4gaW5pdCAmJiBpbml0LmhlYWRlcnMgIT0gbnVsbCkge1xuICAgIGZpbGwocmVzcG9uc2Vba0hlYWRlcnNdLCBpbml0LmhlYWRlcnMpXG4gIH1cblxuICAvLyA2LiBJZiBib2R5IHdhcyBnaXZlbiwgdGhlbjpcbiAgaWYgKGJvZHkpIHtcbiAgICAvLyAxLiBJZiByZXNwb25zZSdzIHN0YXR1cyBpcyBhIG51bGwgYm9keSBzdGF0dXMsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKG51bGxCb2R5U3RhdHVzLmluY2x1ZGVzKHJlc3BvbnNlLnN0YXR1cykpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnUmVzcG9uc2UgY29uc3RydWN0b3InLFxuICAgICAgICBtZXNzYWdlOiAnSW52YWxpZCByZXNwb25zZSBzdGF0dXMgY29kZSAnICsgcmVzcG9uc2Uuc3RhdHVzXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDIuIFNldCByZXNwb25zZSdzIGJvZHkgdG8gYm9keSdzIGJvZHkuXG4gICAgcmVzcG9uc2Vba1N0YXRlXS5ib2R5ID0gYm9keS5ib2R5XG5cbiAgICAvLyAzLiBJZiBib2R5J3MgdHlwZSBpcyBub24tbnVsbCBhbmQgcmVzcG9uc2UncyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluXG4gICAgLy8gICAgYENvbnRlbnQtVHlwZWAsIHRoZW4gYXBwZW5kIChgQ29udGVudC1UeXBlYCwgYm9keSdzIHR5cGUpIHRvIHJlc3BvbnNlJ3MgaGVhZGVyIGxpc3QuXG4gICAgaWYgKGJvZHkudHlwZSAhPSBudWxsICYmICFyZXNwb25zZVtrU3RhdGVdLmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdDb250ZW50LVR5cGUnKSkge1xuICAgICAgcmVzcG9uc2Vba1N0YXRlXS5oZWFkZXJzTGlzdC5hcHBlbmQoJ2NvbnRlbnQtdHlwZScsIGJvZHkudHlwZSlcbiAgICB9XG4gIH1cbn1cblxud2ViaWRsLmNvbnZlcnRlcnMuUmVhZGFibGVTdHJlYW0gPSB3ZWJpZGwuaW50ZXJmYWNlQ29udmVydGVyKFxuICBSZWFkYWJsZVN0cmVhbVxuKVxuXG53ZWJpZGwuY29udmVydGVycy5Gb3JtRGF0YSA9IHdlYmlkbC5pbnRlcmZhY2VDb252ZXJ0ZXIoXG4gIEZvcm1EYXRhXG4pXG5cbndlYmlkbC5jb252ZXJ0ZXJzLlVSTFNlYXJjaFBhcmFtcyA9IHdlYmlkbC5pbnRlcmZhY2VDb252ZXJ0ZXIoXG4gIFVSTFNlYXJjaFBhcmFtc1xuKVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jdHlwZWRlZmRlZi14bWxodHRwcmVxdWVzdGJvZHlpbml0XG53ZWJpZGwuY29udmVydGVycy5YTUxIdHRwUmVxdWVzdEJvZHlJbml0ID0gZnVuY3Rpb24gKFYpIHtcbiAgaWYgKHR5cGVvZiBWID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcoVilcbiAgfVxuXG4gIGlmIChpc0Jsb2JMaWtlKFYpKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkJsb2IoViwgeyBzdHJpY3Q6IGZhbHNlIH0pXG4gIH1cblxuICBpZiAodHlwZXMuaXNBcnJheUJ1ZmZlcihWKSB8fCB0eXBlcy5pc1R5cGVkQXJyYXkoVikgfHwgdHlwZXMuaXNEYXRhVmlldyhWKSkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5CdWZmZXJTb3VyY2UoVilcbiAgfVxuXG4gIGlmICh1dGlsLmlzRm9ybURhdGFMaWtlKFYpKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkZvcm1EYXRhKFYsIHsgc3RyaWN0OiBmYWxzZSB9KVxuICB9XG5cbiAgaWYgKFYgaW5zdGFuY2VvZiBVUkxTZWFyY2hQYXJhbXMpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuVVJMU2VhcmNoUGFyYW1zKFYpXG4gIH1cblxuICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKFYpXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNib2R5aW5pdFxud2ViaWRsLmNvbnZlcnRlcnMuQm9keUluaXQgPSBmdW5jdGlvbiAoVikge1xuICBpZiAoViBpbnN0YW5jZW9mIFJlYWRhYmxlU3RyZWFtKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLlJlYWRhYmxlU3RyZWFtKFYpXG4gIH1cblxuICAvLyBOb3RlOiB0aGUgc3BlYyBkb2Vzbid0IGluY2x1ZGUgYXN5bmMgaXRlcmFibGVzLFxuICAvLyB0aGlzIGlzIGFuIHVuZGljaSBleHRlbnNpb24uXG4gIGlmIChWPy5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdKSB7XG4gICAgcmV0dXJuIFZcbiAgfVxuXG4gIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5YTUxIdHRwUmVxdWVzdEJvZHlJbml0KFYpXG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLlJlc3BvbnNlSW5pdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGtleTogJ3N0YXR1cycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgc2hvcnQnXSxcbiAgICBkZWZhdWx0VmFsdWU6IDIwMFxuICB9LFxuICB7XG4gICAga2V5OiAnc3RhdHVzVGV4dCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZTogJydcbiAgfSxcbiAge1xuICAgIGtleTogJ2hlYWRlcnMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuSGVhZGVyc0luaXRcbiAgfVxuXSlcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1ha2VOZXR3b3JrRXJyb3IsXG4gIG1ha2VSZXNwb25zZSxcbiAgbWFrZUFwcHJvcHJpYXRlTmV0d29ya0Vycm9yLFxuICBmaWx0ZXJSZXNwb25zZSxcbiAgUmVzcG9uc2UsXG4gIGNsb25lUmVzcG9uc2Vcbn1cbiIsCiAgICAiLyogZ2xvYmFscyBBYm9ydENvbnRyb2xsZXIgKi9cblxuJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgZXh0cmFjdEJvZHksIG1peGluQm9keSwgY2xvbmVCb2R5IH0gPSByZXF1aXJlKCcuL2JvZHknKVxuY29uc3QgeyBIZWFkZXJzLCBmaWxsOiBmaWxsSGVhZGVycywgSGVhZGVyc0xpc3QgfSA9IHJlcXVpcmUoJy4vaGVhZGVycycpXG5jb25zdCB7IEZpbmFsaXphdGlvblJlZ2lzdHJ5IH0gPSByZXF1aXJlKCcuLi9jb21wYXQvZGlzcGF0Y2hlci13ZWFrcmVmJykoKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7XG4gIGlzVmFsaWRIVFRQVG9rZW4sXG4gIHNhbWVPcmlnaW4sXG4gIG5vcm1hbGl6ZU1ldGhvZCxcbiAgbWFrZVBvbGljeUNvbnRhaW5lcixcbiAgbm9ybWFsaXplTWV0aG9kUmVjb3JkXG59ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHtcbiAgZm9yYmlkZGVuTWV0aG9kc1NldCxcbiAgY29yc1NhZmVMaXN0ZWRNZXRob2RzU2V0LFxuICByZWZlcnJlclBvbGljeSxcbiAgcmVxdWVzdFJlZGlyZWN0LFxuICByZXF1ZXN0TW9kZSxcbiAgcmVxdWVzdENyZWRlbnRpYWxzLFxuICByZXF1ZXN0Q2FjaGUsXG4gIHJlcXVlc3REdXBsZXhcbn0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7IGtFbnVtZXJhYmxlUHJvcGVydHkgfSA9IHV0aWxcbmNvbnN0IHsga0hlYWRlcnMsIGtTaWduYWwsIGtTdGF0ZSwga0d1YXJkLCBrUmVhbG0gfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi93ZWJpZGwnKVxuY29uc3QgeyBnZXRHbG9iYWxPcmlnaW4gfSA9IHJlcXVpcmUoJy4vZ2xvYmFsJylcbmNvbnN0IHsgVVJMU2VyaWFsaXplciB9ID0gcmVxdWlyZSgnLi9kYXRhVVJMJylcbmNvbnN0IHsga0hlYWRlcnNMaXN0LCBrQ29uc3RydWN0IH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbmNvbnN0IHsgZ2V0TWF4TGlzdGVuZXJzLCBzZXRNYXhMaXN0ZW5lcnMsIGdldEV2ZW50TGlzdGVuZXJzLCBkZWZhdWx0TWF4TGlzdGVuZXJzIH0gPSByZXF1aXJlKCdldmVudHMnKVxuXG5sZXQgVHJhbnNmb3JtU3RyZWFtID0gZ2xvYmFsVGhpcy5UcmFuc2Zvcm1TdHJlYW1cblxuY29uc3Qga0Fib3J0Q29udHJvbGxlciA9IFN5bWJvbCgnYWJvcnRDb250cm9sbGVyJylcblxuY29uc3QgcmVxdWVzdEZpbmFsaXplciA9IG5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeSgoeyBzaWduYWwsIGFib3J0IH0pID0+IHtcbiAgc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnQpXG59KVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdC1jbGFzc1xuY2xhc3MgUmVxdWVzdCB7XG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tcmVxdWVzdFxuICBjb25zdHJ1Y3RvciAoaW5wdXQsIGluaXQgPSB7fSkge1xuICAgIGlmIChpbnB1dCA9PT0ga0NvbnN0cnVjdCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ1JlcXVlc3QgY29uc3RydWN0b3InIH0pXG5cbiAgICBpbnB1dCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKGlucHV0KVxuICAgIGluaXQgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5pdChpbml0KVxuXG4gICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvd2ViYXBwYXBpcy5odG1sI2Vudmlyb25tZW50LXNldHRpbmdzLW9iamVjdFxuICAgIHRoaXNba1JlYWxtXSA9IHtcbiAgICAgIHNldHRpbmdzT2JqZWN0OiB7XG4gICAgICAgIGJhc2VVcmw6IGdldEdsb2JhbE9yaWdpbigpLFxuICAgICAgICBnZXQgb3JpZ2luICgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5iYXNlVXJsPy5vcmlnaW5cbiAgICAgICAgfSxcbiAgICAgICAgcG9saWN5Q29udGFpbmVyOiBtYWtlUG9saWN5Q29udGFpbmVyKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAxLiBMZXQgcmVxdWVzdCBiZSBudWxsLlxuICAgIGxldCByZXF1ZXN0ID0gbnVsbFxuXG4gICAgLy8gMi4gTGV0IGZhbGxiYWNrTW9kZSBiZSBudWxsLlxuICAgIGxldCBmYWxsYmFja01vZGUgPSBudWxsXG5cbiAgICAvLyAzLiBMZXQgYmFzZVVSTCBiZSB0aGlz4oCZcyByZWxldmFudCBzZXR0aW5ncyBvYmplY3TigJlzIEFQSSBiYXNlIFVSTC5cbiAgICBjb25zdCBiYXNlVXJsID0gdGhpc1trUmVhbG1dLnNldHRpbmdzT2JqZWN0LmJhc2VVcmxcblxuICAgIC8vIDQuIExldCBzaWduYWwgYmUgbnVsbC5cbiAgICBsZXQgc2lnbmFsID0gbnVsbFxuXG4gICAgLy8gNS4gSWYgaW5wdXQgaXMgYSBzdHJpbmcsIHRoZW46XG4gICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIDEuIExldCBwYXJzZWRVUkwgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIGlucHV0IHdpdGggYmFzZVVSTC5cbiAgICAgIC8vIDIuIElmIHBhcnNlZFVSTCBpcyBmYWlsdXJlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgbGV0IHBhcnNlZFVSTFxuICAgICAgdHJ5IHtcbiAgICAgICAgcGFyc2VkVVJMID0gbmV3IFVSTChpbnB1dCwgYmFzZVVybClcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGYWlsZWQgdG8gcGFyc2UgVVJMIGZyb20gJyArIGlucHV0LCB7IGNhdXNlOiBlcnIgfSlcbiAgICAgIH1cblxuICAgICAgLy8gMy4gSWYgcGFyc2VkVVJMIGluY2x1ZGVzIGNyZWRlbnRpYWxzLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgaWYgKHBhcnNlZFVSTC51c2VybmFtZSB8fCBwYXJzZWRVUkwucGFzc3dvcmQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAnUmVxdWVzdCBjYW5ub3QgYmUgY29uc3RydWN0ZWQgZnJvbSBhIFVSTCB0aGF0IGluY2x1ZGVzIGNyZWRlbnRpYWxzOiAnICtcbiAgICAgICAgICAgIGlucHV0XG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgLy8gNC4gU2V0IHJlcXVlc3QgdG8gYSBuZXcgcmVxdWVzdCB3aG9zZSBVUkwgaXMgcGFyc2VkVVJMLlxuICAgICAgcmVxdWVzdCA9IG1ha2VSZXF1ZXN0KHsgdXJsTGlzdDogW3BhcnNlZFVSTF0gfSlcblxuICAgICAgLy8gNS4gU2V0IGZhbGxiYWNrTW9kZSB0byBcImNvcnNcIi5cbiAgICAgIGZhbGxiYWNrTW9kZSA9ICdjb3JzJ1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyA2LiBPdGhlcndpc2U6XG5cbiAgICAgIC8vIDcuIEFzc2VydDogaW5wdXQgaXMgYSBSZXF1ZXN0IG9iamVjdC5cbiAgICAgIGFzc2VydChpbnB1dCBpbnN0YW5jZW9mIFJlcXVlc3QpXG5cbiAgICAgIC8vIDguIFNldCByZXF1ZXN0IHRvIGlucHV04oCZcyByZXF1ZXN0LlxuICAgICAgcmVxdWVzdCA9IGlucHV0W2tTdGF0ZV1cblxuICAgICAgLy8gOS4gU2V0IHNpZ25hbCB0byBpbnB1dOKAmXMgc2lnbmFsLlxuICAgICAgc2lnbmFsID0gaW5wdXRba1NpZ25hbF1cbiAgICB9XG5cbiAgICAvLyA3LiBMZXQgb3JpZ2luIGJlIHRoaXPigJlzIHJlbGV2YW50IHNldHRpbmdzIG9iamVjdOKAmXMgb3JpZ2luLlxuICAgIGNvbnN0IG9yaWdpbiA9IHRoaXNba1JlYWxtXS5zZXR0aW5nc09iamVjdC5vcmlnaW5cblxuICAgIC8vIDguIExldCB3aW5kb3cgYmUgXCJjbGllbnRcIi5cbiAgICBsZXQgd2luZG93ID0gJ2NsaWVudCdcblxuICAgIC8vIDkuIElmIHJlcXVlc3TigJlzIHdpbmRvdyBpcyBhbiBlbnZpcm9ubWVudCBzZXR0aW5ncyBvYmplY3QgYW5kIGl0cyBvcmlnaW5cbiAgICAvLyBpcyBzYW1lIG9yaWdpbiB3aXRoIG9yaWdpbiwgdGhlbiBzZXQgd2luZG93IHRvIHJlcXVlc3TigJlzIHdpbmRvdy5cbiAgICBpZiAoXG4gICAgICByZXF1ZXN0LndpbmRvdz8uY29uc3RydWN0b3I/Lm5hbWUgPT09ICdFbnZpcm9ubWVudFNldHRpbmdzT2JqZWN0JyAmJlxuICAgICAgc2FtZU9yaWdpbihyZXF1ZXN0LndpbmRvdywgb3JpZ2luKVxuICAgICkge1xuICAgICAgd2luZG93ID0gcmVxdWVzdC53aW5kb3dcbiAgICB9XG5cbiAgICAvLyAxMC4gSWYgaW5pdFtcIndpbmRvd1wiXSBleGlzdHMgYW5kIGlzIG5vbi1udWxsLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmIChpbml0LndpbmRvdyAhPSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAnd2luZG93JyBvcHRpb24gJyR7d2luZG93fScgbXVzdCBiZSBudWxsYClcbiAgICB9XG5cbiAgICAvLyAxMS4gSWYgaW5pdFtcIndpbmRvd1wiXSBleGlzdHMsIHRoZW4gc2V0IHdpbmRvdyB0byBcIm5vLXdpbmRvd1wiLlxuICAgIGlmICgnd2luZG93JyBpbiBpbml0KSB7XG4gICAgICB3aW5kb3cgPSAnbm8td2luZG93J1xuICAgIH1cblxuICAgIC8vIDEyLiBTZXQgcmVxdWVzdCB0byBhIG5ldyByZXF1ZXN0IHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICAgIHJlcXVlc3QgPSBtYWtlUmVxdWVzdCh7XG4gICAgICAvLyBVUkwgcmVxdWVzdOKAmXMgVVJMLlxuICAgICAgLy8gdW5kaWNpIGltcGxlbWVudGF0aW9uIG5vdGU6IHRoaXMgaXMgc2V0IGFzIHRoZSBmaXJzdCBpdGVtIGluIHJlcXVlc3QncyB1cmxMaXN0IGluIG1ha2VSZXF1ZXN0XG4gICAgICAvLyBtZXRob2QgcmVxdWVzdOKAmXMgbWV0aG9kLlxuICAgICAgbWV0aG9kOiByZXF1ZXN0Lm1ldGhvZCxcbiAgICAgIC8vIGhlYWRlciBsaXN0IEEgY29weSBvZiByZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cbiAgICAgIC8vIHVuZGljaSBpbXBsZW1lbnRhdGlvbiBub3RlOiBoZWFkZXJzTGlzdCBpcyBjbG9uZWQgaW4gbWFrZVJlcXVlc3RcbiAgICAgIGhlYWRlcnNMaXN0OiByZXF1ZXN0LmhlYWRlcnNMaXN0LFxuICAgICAgLy8gdW5zYWZlLXJlcXVlc3QgZmxhZyBTZXQuXG4gICAgICB1bnNhZmVSZXF1ZXN0OiByZXF1ZXN0LnVuc2FmZVJlcXVlc3QsXG4gICAgICAvLyBjbGllbnQgVGhpc+KAmXMgcmVsZXZhbnQgc2V0dGluZ3Mgb2JqZWN0LlxuICAgICAgY2xpZW50OiB0aGlzW2tSZWFsbV0uc2V0dGluZ3NPYmplY3QsXG4gICAgICAvLyB3aW5kb3cgd2luZG93LlxuICAgICAgd2luZG93LFxuICAgICAgLy8gcHJpb3JpdHkgcmVxdWVzdOKAmXMgcHJpb3JpdHkuXG4gICAgICBwcmlvcml0eTogcmVxdWVzdC5wcmlvcml0eSxcbiAgICAgIC8vIG9yaWdpbiByZXF1ZXN04oCZcyBvcmlnaW4uIFRoZSBwcm9wYWdhdGlvbiBvZiB0aGUgb3JpZ2luIGlzIG9ubHkgc2lnbmlmaWNhbnQgZm9yIG5hdmlnYXRpb24gcmVxdWVzdHNcbiAgICAgIC8vIGJlaW5nIGhhbmRsZWQgYnkgYSBzZXJ2aWNlIHdvcmtlci4gSW4gdGhpcyBzY2VuYXJpbyBhIHJlcXVlc3QgY2FuIGhhdmUgYW4gb3JpZ2luIHRoYXQgaXMgZGlmZmVyZW50XG4gICAgICAvLyBmcm9tIHRoZSBjdXJyZW50IGNsaWVudC5cbiAgICAgIG9yaWdpbjogcmVxdWVzdC5vcmlnaW4sXG4gICAgICAvLyByZWZlcnJlciByZXF1ZXN04oCZcyByZWZlcnJlci5cbiAgICAgIHJlZmVycmVyOiByZXF1ZXN0LnJlZmVycmVyLFxuICAgICAgLy8gcmVmZXJyZXIgcG9saWN5IHJlcXVlc3TigJlzIHJlZmVycmVyIHBvbGljeS5cbiAgICAgIHJlZmVycmVyUG9saWN5OiByZXF1ZXN0LnJlZmVycmVyUG9saWN5LFxuICAgICAgLy8gbW9kZSByZXF1ZXN04oCZcyBtb2RlLlxuICAgICAgbW9kZTogcmVxdWVzdC5tb2RlLFxuICAgICAgLy8gY3JlZGVudGlhbHMgbW9kZSByZXF1ZXN04oCZcyBjcmVkZW50aWFscyBtb2RlLlxuICAgICAgY3JlZGVudGlhbHM6IHJlcXVlc3QuY3JlZGVudGlhbHMsXG4gICAgICAvLyBjYWNoZSBtb2RlIHJlcXVlc3TigJlzIGNhY2hlIG1vZGUuXG4gICAgICBjYWNoZTogcmVxdWVzdC5jYWNoZSxcbiAgICAgIC8vIHJlZGlyZWN0IG1vZGUgcmVxdWVzdOKAmXMgcmVkaXJlY3QgbW9kZS5cbiAgICAgIHJlZGlyZWN0OiByZXF1ZXN0LnJlZGlyZWN0LFxuICAgICAgLy8gaW50ZWdyaXR5IG1ldGFkYXRhIHJlcXVlc3TigJlzIGludGVncml0eSBtZXRhZGF0YS5cbiAgICAgIGludGVncml0eTogcmVxdWVzdC5pbnRlZ3JpdHksXG4gICAgICAvLyBrZWVwYWxpdmUgcmVxdWVzdOKAmXMga2VlcGFsaXZlLlxuICAgICAga2VlcGFsaXZlOiByZXF1ZXN0LmtlZXBhbGl2ZSxcbiAgICAgIC8vIHJlbG9hZC1uYXZpZ2F0aW9uIGZsYWcgcmVxdWVzdOKAmXMgcmVsb2FkLW5hdmlnYXRpb24gZmxhZy5cbiAgICAgIHJlbG9hZE5hdmlnYXRpb246IHJlcXVlc3QucmVsb2FkTmF2aWdhdGlvbixcbiAgICAgIC8vIGhpc3RvcnktbmF2aWdhdGlvbiBmbGFnIHJlcXVlc3TigJlzIGhpc3RvcnktbmF2aWdhdGlvbiBmbGFnLlxuICAgICAgaGlzdG9yeU5hdmlnYXRpb246IHJlcXVlc3QuaGlzdG9yeU5hdmlnYXRpb24sXG4gICAgICAvLyBVUkwgbGlzdCBBIGNsb25lIG9mIHJlcXVlc3TigJlzIFVSTCBsaXN0LlxuICAgICAgdXJsTGlzdDogWy4uLnJlcXVlc3QudXJsTGlzdF1cbiAgICB9KVxuXG4gICAgY29uc3QgaW5pdEhhc0tleSA9IE9iamVjdC5rZXlzKGluaXQpLmxlbmd0aCAhPT0gMFxuXG4gICAgLy8gMTMuIElmIGluaXQgaXMgbm90IGVtcHR5LCB0aGVuOlxuICAgIGlmIChpbml0SGFzS2V5KSB7XG4gICAgICAvLyAxLiBJZiByZXF1ZXN04oCZcyBtb2RlIGlzIFwibmF2aWdhdGVcIiwgdGhlbiBzZXQgaXQgdG8gXCJzYW1lLW9yaWdpblwiLlxuICAgICAgaWYgKHJlcXVlc3QubW9kZSA9PT0gJ25hdmlnYXRlJykge1xuICAgICAgICByZXF1ZXN0Lm1vZGUgPSAnc2FtZS1vcmlnaW4nXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIFVuc2V0IHJlcXVlc3TigJlzIHJlbG9hZC1uYXZpZ2F0aW9uIGZsYWcuXG4gICAgICByZXF1ZXN0LnJlbG9hZE5hdmlnYXRpb24gPSBmYWxzZVxuXG4gICAgICAvLyAzLiBVbnNldCByZXF1ZXN04oCZcyBoaXN0b3J5LW5hdmlnYXRpb24gZmxhZy5cbiAgICAgIHJlcXVlc3QuaGlzdG9yeU5hdmlnYXRpb24gPSBmYWxzZVxuXG4gICAgICAvLyA0LiBTZXQgcmVxdWVzdOKAmXMgb3JpZ2luIHRvIFwiY2xpZW50XCIuXG4gICAgICByZXF1ZXN0Lm9yaWdpbiA9ICdjbGllbnQnXG5cbiAgICAgIC8vIDUuIFNldCByZXF1ZXN04oCZcyByZWZlcnJlciB0byBcImNsaWVudFwiXG4gICAgICByZXF1ZXN0LnJlZmVycmVyID0gJ2NsaWVudCdcblxuICAgICAgLy8gNi4gU2V0IHJlcXVlc3TigJlzIHJlZmVycmVyIHBvbGljeSB0byB0aGUgZW1wdHkgc3RyaW5nLlxuICAgICAgcmVxdWVzdC5yZWZlcnJlclBvbGljeSA9ICcnXG5cbiAgICAgIC8vIDcuIFNldCByZXF1ZXN04oCZcyBVUkwgdG8gcmVxdWVzdOKAmXMgY3VycmVudCBVUkwuXG4gICAgICByZXF1ZXN0LnVybCA9IHJlcXVlc3QudXJsTGlzdFtyZXF1ZXN0LnVybExpc3QubGVuZ3RoIC0gMV1cblxuICAgICAgLy8gOC4gU2V0IHJlcXVlc3TigJlzIFVSTCBsaXN0IHRvIMKrIHJlcXVlc3TigJlzIFVSTCDCuy5cbiAgICAgIHJlcXVlc3QudXJsTGlzdCA9IFtyZXF1ZXN0LnVybF1cbiAgICB9XG5cbiAgICAvLyAxNC4gSWYgaW5pdFtcInJlZmVycmVyXCJdIGV4aXN0cywgdGhlbjpcbiAgICBpZiAoaW5pdC5yZWZlcnJlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyAxLiBMZXQgcmVmZXJyZXIgYmUgaW5pdFtcInJlZmVycmVyXCJdLlxuICAgICAgY29uc3QgcmVmZXJyZXIgPSBpbml0LnJlZmVycmVyXG5cbiAgICAgIC8vIDIuIElmIHJlZmVycmVyIGlzIHRoZSBlbXB0eSBzdHJpbmcsIHRoZW4gc2V0IHJlcXVlc3TigJlzIHJlZmVycmVyIHRvIFwibm8tcmVmZXJyZXJcIi5cbiAgICAgIGlmIChyZWZlcnJlciA9PT0gJycpIHtcbiAgICAgICAgcmVxdWVzdC5yZWZlcnJlciA9ICduby1yZWZlcnJlcidcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIDEuIExldCBwYXJzZWRSZWZlcnJlciBiZSB0aGUgcmVzdWx0IG9mIHBhcnNpbmcgcmVmZXJyZXIgd2l0aFxuICAgICAgICAvLyBiYXNlVVJMLlxuICAgICAgICAvLyAyLiBJZiBwYXJzZWRSZWZlcnJlciBpcyBmYWlsdXJlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgICBsZXQgcGFyc2VkUmVmZXJyZXJcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBwYXJzZWRSZWZlcnJlciA9IG5ldyBVUkwocmVmZXJyZXIsIGJhc2VVcmwpXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFJlZmVycmVyIFwiJHtyZWZlcnJlcn1cIiBpcyBub3QgYSB2YWxpZCBVUkwuYCwgeyBjYXVzZTogZXJyIH0pXG4gICAgICAgIH1cblxuICAgICAgICAvLyAzLiBJZiBvbmUgb2YgdGhlIGZvbGxvd2luZyBpcyB0cnVlXG4gICAgICAgIC8vIC0gcGFyc2VkUmVmZXJyZXLigJlzIHNjaGVtZSBpcyBcImFib3V0XCIgYW5kIHBhdGggaXMgdGhlIHN0cmluZyBcImNsaWVudFwiXG4gICAgICAgIC8vIC0gcGFyc2VkUmVmZXJyZXLigJlzIG9yaWdpbiBpcyBub3Qgc2FtZSBvcmlnaW4gd2l0aCBvcmlnaW5cbiAgICAgICAgLy8gdGhlbiBzZXQgcmVxdWVzdOKAmXMgcmVmZXJyZXIgdG8gXCJjbGllbnRcIi5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIChwYXJzZWRSZWZlcnJlci5wcm90b2NvbCA9PT0gJ2Fib3V0OicgJiYgcGFyc2VkUmVmZXJyZXIuaG9zdG5hbWUgPT09ICdjbGllbnQnKSB8fFxuICAgICAgICAgIChvcmlnaW4gJiYgIXNhbWVPcmlnaW4ocGFyc2VkUmVmZXJyZXIsIHRoaXNba1JlYWxtXS5zZXR0aW5nc09iamVjdC5iYXNlVXJsKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmVxdWVzdC5yZWZlcnJlciA9ICdjbGllbnQnXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gNC4gT3RoZXJ3aXNlLCBzZXQgcmVxdWVzdOKAmXMgcmVmZXJyZXIgdG8gcGFyc2VkUmVmZXJyZXIuXG4gICAgICAgICAgcmVxdWVzdC5yZWZlcnJlciA9IHBhcnNlZFJlZmVycmVyXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAxNS4gSWYgaW5pdFtcInJlZmVycmVyUG9saWN5XCJdIGV4aXN0cywgdGhlbiBzZXQgcmVxdWVzdOKAmXMgcmVmZXJyZXIgcG9saWN5XG4gICAgLy8gdG8gaXQuXG4gICAgaWYgKGluaXQucmVmZXJyZXJQb2xpY3kgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVxdWVzdC5yZWZlcnJlclBvbGljeSA9IGluaXQucmVmZXJyZXJQb2xpY3lcbiAgICB9XG5cbiAgICAvLyAxNi4gTGV0IG1vZGUgYmUgaW5pdFtcIm1vZGVcIl0gaWYgaXQgZXhpc3RzLCBhbmQgZmFsbGJhY2tNb2RlIG90aGVyd2lzZS5cbiAgICBsZXQgbW9kZVxuICAgIGlmIChpbml0Lm1vZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbW9kZSA9IGluaXQubW9kZVxuICAgIH0gZWxzZSB7XG4gICAgICBtb2RlID0gZmFsbGJhY2tNb2RlXG4gICAgfVxuXG4gICAgLy8gMTcuIElmIG1vZGUgaXMgXCJuYXZpZ2F0ZVwiLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmIChtb2RlID09PSAnbmF2aWdhdGUnKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ1JlcXVlc3QgY29uc3RydWN0b3InLFxuICAgICAgICBtZXNzYWdlOiAnaW52YWxpZCByZXF1ZXN0IG1vZGUgbmF2aWdhdGUuJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAxOC4gSWYgbW9kZSBpcyBub24tbnVsbCwgc2V0IHJlcXVlc3TigJlzIG1vZGUgdG8gbW9kZS5cbiAgICBpZiAobW9kZSAhPSBudWxsKSB7XG4gICAgICByZXF1ZXN0Lm1vZGUgPSBtb2RlXG4gICAgfVxuXG4gICAgLy8gMTkuIElmIGluaXRbXCJjcmVkZW50aWFsc1wiXSBleGlzdHMsIHRoZW4gc2V0IHJlcXVlc3TigJlzIGNyZWRlbnRpYWxzIG1vZGVcbiAgICAvLyB0byBpdC5cbiAgICBpZiAoaW5pdC5jcmVkZW50aWFscyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXF1ZXN0LmNyZWRlbnRpYWxzID0gaW5pdC5jcmVkZW50aWFsc1xuICAgIH1cblxuICAgIC8vIDE4LiBJZiBpbml0W1wiY2FjaGVcIl0gZXhpc3RzLCB0aGVuIHNldCByZXF1ZXN04oCZcyBjYWNoZSBtb2RlIHRvIGl0LlxuICAgIGlmIChpbml0LmNhY2hlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlcXVlc3QuY2FjaGUgPSBpbml0LmNhY2hlXG4gICAgfVxuXG4gICAgLy8gMjEuIElmIHJlcXVlc3TigJlzIGNhY2hlIG1vZGUgaXMgXCJvbmx5LWlmLWNhY2hlZFwiIGFuZCByZXF1ZXN04oCZcyBtb2RlIGlzXG4gICAgLy8gbm90IFwic2FtZS1vcmlnaW5cIiwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAocmVxdWVzdC5jYWNoZSA9PT0gJ29ubHktaWYtY2FjaGVkJyAmJiByZXF1ZXN0Lm1vZGUgIT09ICdzYW1lLW9yaWdpbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIFwiJ29ubHktaWYtY2FjaGVkJyBjYW4gYmUgc2V0IG9ubHkgd2l0aCAnc2FtZS1vcmlnaW4nIG1vZGVcIlxuICAgICAgKVxuICAgIH1cblxuICAgIC8vIDIyLiBJZiBpbml0W1wicmVkaXJlY3RcIl0gZXhpc3RzLCB0aGVuIHNldCByZXF1ZXN04oCZcyByZWRpcmVjdCBtb2RlIHRvIGl0LlxuICAgIGlmIChpbml0LnJlZGlyZWN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlcXVlc3QucmVkaXJlY3QgPSBpbml0LnJlZGlyZWN0XG4gICAgfVxuXG4gICAgLy8gMjMuIElmIGluaXRbXCJpbnRlZ3JpdHlcIl0gZXhpc3RzLCB0aGVuIHNldCByZXF1ZXN04oCZcyBpbnRlZ3JpdHkgbWV0YWRhdGEgdG8gaXQuXG4gICAgaWYgKGluaXQuaW50ZWdyaXR5ICE9IG51bGwpIHtcbiAgICAgIHJlcXVlc3QuaW50ZWdyaXR5ID0gU3RyaW5nKGluaXQuaW50ZWdyaXR5KVxuICAgIH1cblxuICAgIC8vIDI0LiBJZiBpbml0W1wia2VlcGFsaXZlXCJdIGV4aXN0cywgdGhlbiBzZXQgcmVxdWVzdOKAmXMga2VlcGFsaXZlIHRvIGl0LlxuICAgIGlmIChpbml0LmtlZXBhbGl2ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXF1ZXN0LmtlZXBhbGl2ZSA9IEJvb2xlYW4oaW5pdC5rZWVwYWxpdmUpXG4gICAgfVxuXG4gICAgLy8gMjUuIElmIGluaXRbXCJtZXRob2RcIl0gZXhpc3RzLCB0aGVuOlxuICAgIGlmIChpbml0Lm1ldGhvZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyAxLiBMZXQgbWV0aG9kIGJlIGluaXRbXCJtZXRob2RcIl0uXG4gICAgICBsZXQgbWV0aG9kID0gaW5pdC5tZXRob2RcblxuICAgICAgLy8gMi4gSWYgbWV0aG9kIGlzIG5vdCBhIG1ldGhvZCBvciBtZXRob2QgaXMgYSBmb3JiaWRkZW4gbWV0aG9kLCB0aGVuXG4gICAgICAvLyB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGlmICghaXNWYWxpZEhUVFBUb2tlbihtZXRob2QpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCcke21ldGhvZH0nIGlzIG5vdCBhIHZhbGlkIEhUVFAgbWV0aG9kLmApXG4gICAgICB9XG5cbiAgICAgIGlmIChmb3JiaWRkZW5NZXRob2RzU2V0LmhhcyhtZXRob2QudG9VcHBlckNhc2UoKSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJyR7bWV0aG9kfScgSFRUUCBtZXRob2QgaXMgdW5zdXBwb3J0ZWQuYClcbiAgICAgIH1cblxuICAgICAgLy8gMy4gTm9ybWFsaXplIG1ldGhvZC5cbiAgICAgIG1ldGhvZCA9IG5vcm1hbGl6ZU1ldGhvZFJlY29yZFttZXRob2RdID8/IG5vcm1hbGl6ZU1ldGhvZChtZXRob2QpXG5cbiAgICAgIC8vIDQuIFNldCByZXF1ZXN04oCZcyBtZXRob2QgdG8gbWV0aG9kLlxuICAgICAgcmVxdWVzdC5tZXRob2QgPSBtZXRob2RcbiAgICB9XG5cbiAgICAvLyAyNi4gSWYgaW5pdFtcInNpZ25hbFwiXSBleGlzdHMsIHRoZW4gc2V0IHNpZ25hbCB0byBpdC5cbiAgICBpZiAoaW5pdC5zaWduYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgc2lnbmFsID0gaW5pdC5zaWduYWxcbiAgICB9XG5cbiAgICAvLyAyNy4gU2V0IHRoaXPigJlzIHJlcXVlc3QgdG8gcmVxdWVzdC5cbiAgICB0aGlzW2tTdGF0ZV0gPSByZXF1ZXN0XG5cbiAgICAvLyAyOC4gU2V0IHRoaXPigJlzIHNpZ25hbCB0byBhIG5ldyBBYm9ydFNpZ25hbCBvYmplY3Qgd2l0aCB0aGlz4oCZcyByZWxldmFudFxuICAgIC8vIFJlYWxtLlxuICAgIC8vIFRPRE86IGNvdWxkIHRoaXMgYmUgc2ltcGxpZmllZCB3aXRoIEFib3J0U2lnbmFsLmFueVxuICAgIC8vIChodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2RvbS1hYm9ydHNpZ25hbC1hbnkpXG4gICAgY29uc3QgYWMgPSBuZXcgQWJvcnRDb250cm9sbGVyKClcbiAgICB0aGlzW2tTaWduYWxdID0gYWMuc2lnbmFsXG4gICAgdGhpc1trU2lnbmFsXVtrUmVhbG1dID0gdGhpc1trUmVhbG1dXG5cbiAgICAvLyAyOS4gSWYgc2lnbmFsIGlzIG5vdCBudWxsLCB0aGVuIG1ha2UgdGhpc+KAmXMgc2lnbmFsIGZvbGxvdyBzaWduYWwuXG4gICAgaWYgKHNpZ25hbCAhPSBudWxsKSB7XG4gICAgICBpZiAoXG4gICAgICAgICFzaWduYWwgfHxcbiAgICAgICAgdHlwZW9mIHNpZ25hbC5hYm9ydGVkICE9PSAnYm9vbGVhbicgfHxcbiAgICAgICAgdHlwZW9mIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyICE9PSAnZnVuY3Rpb24nXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICBcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ1JlcXVlc3QnOiBtZW1iZXIgc2lnbmFsIGlzIG5vdCBvZiB0eXBlIEFib3J0U2lnbmFsLlwiXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgIGFjLmFib3J0KHNpZ25hbC5yZWFzb24pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBLZWVwIGEgc3Ryb25nIHJlZiB0byBhYyB3aGlsZSByZXF1ZXN0IG9iamVjdFxuICAgICAgICAvLyBpcyBhbGl2ZS4gVGhpcyBpcyBuZWVkZWQgdG8gcHJldmVudCBBYm9ydENvbnRyb2xsZXJcbiAgICAgICAgLy8gZnJvbSBiZWluZyBwcmVtYXR1cmVseSBnYXJiYWdlIGNvbGxlY3RlZC5cbiAgICAgICAgLy8gU2VlLCBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMTkyNi5cbiAgICAgICAgdGhpc1trQWJvcnRDb250cm9sbGVyXSA9IGFjXG5cbiAgICAgICAgY29uc3QgYWNSZWYgPSBuZXcgV2Vha1JlZihhYylcbiAgICAgICAgY29uc3QgYWJvcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3QgYWMgPSBhY1JlZi5kZXJlZigpXG4gICAgICAgICAgaWYgKGFjICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGFjLmFib3J0KHRoaXMucmVhc29uKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoaXJkLXBhcnR5IEFib3J0Q29udHJvbGxlcnMgbWF5IG5vdCB3b3JrIHdpdGggdGhlc2UuXG4gICAgICAgIC8vIFNlZSwgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvcHVsbC8xOTEwI2lzc3VlY29tbWVudC0xNDY0NDk1NjE5LlxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIElmIHRoZSBtYXggYW1vdW50IG9mIGxpc3RlbmVycyBpcyBlcXVhbCB0byB0aGUgZGVmYXVsdCwgaW5jcmVhc2UgaXRcbiAgICAgICAgICAvLyBUaGlzIGlzIG9ubHkgYXZhaWxhYmxlIGluIG5vZGUgPj0gdjE5LjkuMFxuICAgICAgICAgIGlmICh0eXBlb2YgZ2V0TWF4TGlzdGVuZXJzID09PSAnZnVuY3Rpb24nICYmIGdldE1heExpc3RlbmVycyhzaWduYWwpID09PSBkZWZhdWx0TWF4TGlzdGVuZXJzKSB7XG4gICAgICAgICAgICBzZXRNYXhMaXN0ZW5lcnMoMTAwLCBzaWduYWwpXG4gICAgICAgICAgfSBlbHNlIGlmIChnZXRFdmVudExpc3RlbmVycyhzaWduYWwsICdhYm9ydCcpLmxlbmd0aCA+PSBkZWZhdWx0TWF4TGlzdGVuZXJzKSB7XG4gICAgICAgICAgICBzZXRNYXhMaXN0ZW5lcnMoMTAwLCBzaWduYWwpXG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIHt9XG5cbiAgICAgICAgdXRpbC5hZGRBYm9ydExpc3RlbmVyKHNpZ25hbCwgYWJvcnQpXG4gICAgICAgIHJlcXVlc3RGaW5hbGl6ZXIucmVnaXN0ZXIoYWMsIHsgc2lnbmFsLCBhYm9ydCB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDMwLiBTZXQgdGhpc+KAmXMgaGVhZGVycyB0byBhIG5ldyBIZWFkZXJzIG9iamVjdCB3aXRoIHRoaXPigJlzIHJlbGV2YW50XG4gICAgLy8gUmVhbG0sIHdob3NlIGhlYWRlciBsaXN0IGlzIHJlcXVlc3TigJlzIGhlYWRlciBsaXN0IGFuZCBndWFyZCBpc1xuICAgIC8vIFwicmVxdWVzdFwiLlxuICAgIHRoaXNba0hlYWRlcnNdID0gbmV3IEhlYWRlcnMoa0NvbnN0cnVjdClcbiAgICB0aGlzW2tIZWFkZXJzXVtrSGVhZGVyc0xpc3RdID0gcmVxdWVzdC5oZWFkZXJzTGlzdFxuICAgIHRoaXNba0hlYWRlcnNdW2tHdWFyZF0gPSAncmVxdWVzdCdcbiAgICB0aGlzW2tIZWFkZXJzXVtrUmVhbG1dID0gdGhpc1trUmVhbG1dXG5cbiAgICAvLyAzMS4gSWYgdGhpc+KAmXMgcmVxdWVzdOKAmXMgbW9kZSBpcyBcIm5vLWNvcnNcIiwgdGhlbjpcbiAgICBpZiAobW9kZSA9PT0gJ25vLWNvcnMnKSB7XG4gICAgICAvLyAxLiBJZiB0aGlz4oCZcyByZXF1ZXN04oCZcyBtZXRob2QgaXMgbm90IGEgQ09SUy1zYWZlbGlzdGVkIG1ldGhvZCxcbiAgICAgIC8vIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICBpZiAoIWNvcnNTYWZlTGlzdGVkTWV0aG9kc1NldC5oYXMocmVxdWVzdC5tZXRob2QpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgYCcke3JlcXVlc3QubWV0aG9kfSBpcyB1bnN1cHBvcnRlZCBpbiBuby1jb3JzIG1vZGUuYFxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIFNldCB0aGlz4oCZcyBoZWFkZXJz4oCZcyBndWFyZCB0byBcInJlcXVlc3Qtbm8tY29yc1wiLlxuICAgICAgdGhpc1trSGVhZGVyc11ba0d1YXJkXSA9ICdyZXF1ZXN0LW5vLWNvcnMnXG4gICAgfVxuXG4gICAgLy8gMzIuIElmIGluaXQgaXMgbm90IGVtcHR5LCB0aGVuOlxuICAgIGlmIChpbml0SGFzS2V5KSB7XG4gICAgICAvKiogQHR5cGUge0hlYWRlcnNMaXN0fSAqL1xuICAgICAgY29uc3QgaGVhZGVyc0xpc3QgPSB0aGlzW2tIZWFkZXJzXVtrSGVhZGVyc0xpc3RdXG4gICAgICAvLyAxLiBMZXQgaGVhZGVycyBiZSBhIGNvcHkgb2YgdGhpc+KAmXMgaGVhZGVycyBhbmQgaXRzIGFzc29jaWF0ZWQgaGVhZGVyXG4gICAgICAvLyBsaXN0LlxuICAgICAgLy8gMi4gSWYgaW5pdFtcImhlYWRlcnNcIl0gZXhpc3RzLCB0aGVuIHNldCBoZWFkZXJzIHRvIGluaXRbXCJoZWFkZXJzXCJdLlxuICAgICAgY29uc3QgaGVhZGVycyA9IGluaXQuaGVhZGVycyAhPT0gdW5kZWZpbmVkID8gaW5pdC5oZWFkZXJzIDogbmV3IEhlYWRlcnNMaXN0KGhlYWRlcnNMaXN0KVxuXG4gICAgICAvLyAzLiBFbXB0eSB0aGlz4oCZcyBoZWFkZXJz4oCZcyBoZWFkZXIgbGlzdC5cbiAgICAgIGhlYWRlcnNMaXN0LmNsZWFyKClcblxuICAgICAgLy8gNC4gSWYgaGVhZGVycyBpcyBhIEhlYWRlcnMgb2JqZWN0LCB0aGVuIGZvciBlYWNoIGhlYWRlciBpbiBpdHMgaGVhZGVyXG4gICAgICAvLyBsaXN0LCBhcHBlbmQgaGVhZGVy4oCZcyBuYW1lL2hlYWRlcuKAmXMgdmFsdWUgdG8gdGhpc+KAmXMgaGVhZGVycy5cbiAgICAgIGlmIChoZWFkZXJzIGluc3RhbmNlb2YgSGVhZGVyc0xpc3QpIHtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIGhlYWRlcnMpIHtcbiAgICAgICAgICBoZWFkZXJzTGlzdC5hcHBlbmQoa2V5LCB2YWwpXG4gICAgICAgIH1cbiAgICAgICAgLy8gTm90ZTogQ29weSB0aGUgYHNldC1jb29raWVgIG1ldGEtZGF0YS5cbiAgICAgICAgaGVhZGVyc0xpc3QuY29va2llcyA9IGhlYWRlcnMuY29va2llc1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gNS4gT3RoZXJ3aXNlLCBmaWxsIHRoaXPigJlzIGhlYWRlcnMgd2l0aCBoZWFkZXJzLlxuICAgICAgICBmaWxsSGVhZGVycyh0aGlzW2tIZWFkZXJzXSwgaGVhZGVycylcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAzMy4gTGV0IGlucHV0Qm9keSBiZSBpbnB1dOKAmXMgcmVxdWVzdOKAmXMgYm9keSBpZiBpbnB1dCBpcyBhIFJlcXVlc3RcbiAgICAvLyBvYmplY3Q7IG90aGVyd2lzZSBudWxsLlxuICAgIGNvbnN0IGlucHV0Qm9keSA9IGlucHV0IGluc3RhbmNlb2YgUmVxdWVzdCA/IGlucHV0W2tTdGF0ZV0uYm9keSA6IG51bGxcblxuICAgIC8vIDM0LiBJZiBlaXRoZXIgaW5pdFtcImJvZHlcIl0gZXhpc3RzIGFuZCBpcyBub24tbnVsbCBvciBpbnB1dEJvZHkgaXNcbiAgICAvLyBub24tbnVsbCwgYW5kIHJlcXVlc3TigJlzIG1ldGhvZCBpcyBgR0VUYCBvciBgSEVBRGAsIHRoZW4gdGhyb3cgYVxuICAgIC8vIFR5cGVFcnJvci5cbiAgICBpZiAoXG4gICAgICAoaW5pdC5ib2R5ICE9IG51bGwgfHwgaW5wdXRCb2R5ICE9IG51bGwpICYmXG4gICAgICAocmVxdWVzdC5tZXRob2QgPT09ICdHRVQnIHx8IHJlcXVlc3QubWV0aG9kID09PSAnSEVBRCcpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZXF1ZXN0IHdpdGggR0VUL0hFQUQgbWV0aG9kIGNhbm5vdCBoYXZlIGJvZHkuJylcbiAgICB9XG5cbiAgICAvLyAzNS4gTGV0IGluaXRCb2R5IGJlIG51bGwuXG4gICAgbGV0IGluaXRCb2R5ID0gbnVsbFxuXG4gICAgLy8gMzYuIElmIGluaXRbXCJib2R5XCJdIGV4aXN0cyBhbmQgaXMgbm9uLW51bGwsIHRoZW46XG4gICAgaWYgKGluaXQuYm9keSAhPSBudWxsKSB7XG4gICAgICAvLyAxLiBMZXQgQ29udGVudC1UeXBlIGJlIG51bGwuXG4gICAgICAvLyAyLiBTZXQgaW5pdEJvZHkgYW5kIENvbnRlbnQtVHlwZSB0byB0aGUgcmVzdWx0IG9mIGV4dHJhY3RpbmdcbiAgICAgIC8vIGluaXRbXCJib2R5XCJdLCB3aXRoIGtlZXBhbGl2ZSBzZXQgdG8gcmVxdWVzdOKAmXMga2VlcGFsaXZlLlxuICAgICAgY29uc3QgW2V4dHJhY3RlZEJvZHksIGNvbnRlbnRUeXBlXSA9IGV4dHJhY3RCb2R5KFxuICAgICAgICBpbml0LmJvZHksXG4gICAgICAgIHJlcXVlc3Qua2VlcGFsaXZlXG4gICAgICApXG4gICAgICBpbml0Qm9keSA9IGV4dHJhY3RlZEJvZHlcblxuICAgICAgLy8gMywgSWYgQ29udGVudC1UeXBlIGlzIG5vbi1udWxsIGFuZCB0aGlz4oCZcyBoZWFkZXJz4oCZcyBoZWFkZXIgbGlzdCBkb2VzXG4gICAgICAvLyBub3QgY29udGFpbiBgQ29udGVudC1UeXBlYCwgdGhlbiBhcHBlbmQgYENvbnRlbnQtVHlwZWAvQ29udGVudC1UeXBlIHRvXG4gICAgICAvLyB0aGlz4oCZcyBoZWFkZXJzLlxuICAgICAgaWYgKGNvbnRlbnRUeXBlICYmICF0aGlzW2tIZWFkZXJzXVtrSGVhZGVyc0xpc3RdLmNvbnRhaW5zKCdjb250ZW50LXR5cGUnKSkge1xuICAgICAgICB0aGlzW2tIZWFkZXJzXS5hcHBlbmQoJ2NvbnRlbnQtdHlwZScsIGNvbnRlbnRUeXBlKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDM3LiBMZXQgaW5wdXRPckluaXRCb2R5IGJlIGluaXRCb2R5IGlmIGl0IGlzIG5vbi1udWxsOyBvdGhlcndpc2VcbiAgICAvLyBpbnB1dEJvZHkuXG4gICAgY29uc3QgaW5wdXRPckluaXRCb2R5ID0gaW5pdEJvZHkgPz8gaW5wdXRCb2R5XG5cbiAgICAvLyAzOC4gSWYgaW5wdXRPckluaXRCb2R5IGlzIG5vbi1udWxsIGFuZCBpbnB1dE9ySW5pdEJvZHnigJlzIHNvdXJjZSBpc1xuICAgIC8vIG51bGwsIHRoZW46XG4gICAgaWYgKGlucHV0T3JJbml0Qm9keSAhPSBudWxsICYmIGlucHV0T3JJbml0Qm9keS5zb3VyY2UgPT0gbnVsbCkge1xuICAgICAgLy8gMS4gSWYgaW5pdEJvZHkgaXMgbm9uLW51bGwgYW5kIGluaXRbXCJkdXBsZXhcIl0gZG9lcyBub3QgZXhpc3QsXG4gICAgICAvLyAgICB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgaWYgKGluaXRCb2R5ICE9IG51bGwgJiYgaW5pdC5kdXBsZXggPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZXF1ZXN0SW5pdDogZHVwbGV4IG9wdGlvbiBpcyByZXF1aXJlZCB3aGVuIHNlbmRpbmcgYSBib2R5LicpXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIElmIHRoaXPigJlzIHJlcXVlc3TigJlzIG1vZGUgaXMgbmVpdGhlciBcInNhbWUtb3JpZ2luXCIgbm9yIFwiY29yc1wiLFxuICAgICAgLy8gdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGlmIChyZXF1ZXN0Lm1vZGUgIT09ICdzYW1lLW9yaWdpbicgJiYgcmVxdWVzdC5tb2RlICE9PSAnY29ycycpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAnSWYgcmVxdWVzdCBpcyBtYWRlIGZyb20gUmVhZGFibGVTdHJlYW0sIG1vZGUgc2hvdWxkIGJlIFwic2FtZS1vcmlnaW5cIiBvciBcImNvcnNcIidcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICAvLyAzLiBTZXQgdGhpc+KAmXMgcmVxdWVzdOKAmXMgdXNlLUNPUlMtcHJlZmxpZ2h0IGZsYWcuXG4gICAgICByZXF1ZXN0LnVzZUNPUlNQcmVmbGlnaHRGbGFnID0gdHJ1ZVxuICAgIH1cblxuICAgIC8vIDM5LiBMZXQgZmluYWxCb2R5IGJlIGlucHV0T3JJbml0Qm9keS5cbiAgICBsZXQgZmluYWxCb2R5ID0gaW5wdXRPckluaXRCb2R5XG5cbiAgICAvLyA0MC4gSWYgaW5pdEJvZHkgaXMgbnVsbCBhbmQgaW5wdXRCb2R5IGlzIG5vbi1udWxsLCB0aGVuOlxuICAgIGlmIChpbml0Qm9keSA9PSBudWxsICYmIGlucHV0Qm9keSAhPSBudWxsKSB7XG4gICAgICAvLyAxLiBJZiBpbnB1dCBpcyB1bnVzYWJsZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGlmICh1dGlsLmlzRGlzdHVyYmVkKGlucHV0Qm9keS5zdHJlYW0pIHx8IGlucHV0Qm9keS5zdHJlYW0ubG9ja2VkKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgJ0Nhbm5vdCBjb25zdHJ1Y3QgYSBSZXF1ZXN0IHdpdGggYSBSZXF1ZXN0IG9iamVjdCB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gdXNlZC4nXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgLy8gMi4gU2V0IGZpbmFsQm9keSB0byB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEgcHJveHkgZm9yIGlucHV0Qm9keS5cbiAgICAgIGlmICghVHJhbnNmb3JtU3RyZWFtKSB7XG4gICAgICAgIFRyYW5zZm9ybVN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbS93ZWInKS5UcmFuc2Zvcm1TdHJlYW1cbiAgICAgIH1cblxuICAgICAgLy8gaHR0cHM6Ly9zdHJlYW1zLnNwZWMud2hhdHdnLm9yZy8jcmVhZGFibGVzdHJlYW0tY3JlYXRlLWEtcHJveHlcbiAgICAgIGNvbnN0IGlkZW50aXR5VHJhbnNmb3JtID0gbmV3IFRyYW5zZm9ybVN0cmVhbSgpXG4gICAgICBpbnB1dEJvZHkuc3RyZWFtLnBpcGVUaHJvdWdoKGlkZW50aXR5VHJhbnNmb3JtKVxuICAgICAgZmluYWxCb2R5ID0ge1xuICAgICAgICBzb3VyY2U6IGlucHV0Qm9keS5zb3VyY2UsXG4gICAgICAgIGxlbmd0aDogaW5wdXRCb2R5Lmxlbmd0aCxcbiAgICAgICAgc3RyZWFtOiBpZGVudGl0eVRyYW5zZm9ybS5yZWFkYWJsZVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDQxLiBTZXQgdGhpc+KAmXMgcmVxdWVzdOKAmXMgYm9keSB0byBmaW5hbEJvZHkuXG4gICAgdGhpc1trU3RhdGVdLmJvZHkgPSBmaW5hbEJvZHlcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVxdWVzdOKAmXMgSFRUUCBtZXRob2QsIHdoaWNoIGlzIFwiR0VUXCIgYnkgZGVmYXVsdC5cbiAgZ2V0IG1ldGhvZCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBtZXRob2QgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc+KAmXMgcmVxdWVzdOKAmXMgbWV0aG9kLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ubWV0aG9kXG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSBVUkwgb2YgcmVxdWVzdCBhcyBhIHN0cmluZy5cbiAgZ2V0IHVybCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSB1cmwgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc+KAmXMgcmVxdWVzdOKAmXMgVVJMLCBzZXJpYWxpemVkLlxuICAgIHJldHVybiBVUkxTZXJpYWxpemVyKHRoaXNba1N0YXRlXS51cmwpXG4gIH1cblxuICAvLyBSZXR1cm5zIGEgSGVhZGVycyBvYmplY3QgY29uc2lzdGluZyBvZiB0aGUgaGVhZGVycyBhc3NvY2lhdGVkIHdpdGggcmVxdWVzdC5cbiAgLy8gTm90ZSB0aGF0IGhlYWRlcnMgYWRkZWQgaW4gdGhlIG5ldHdvcmsgbGF5ZXIgYnkgdGhlIHVzZXIgYWdlbnQgd2lsbCBub3RcbiAgLy8gYmUgYWNjb3VudGVkIGZvciBpbiB0aGlzIG9iamVjdCwgZS5nLiwgdGhlIFwiSG9zdFwiIGhlYWRlci5cbiAgZ2V0IGhlYWRlcnMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgaGVhZGVycyBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlz4oCZcyBoZWFkZXJzLlxuICAgIHJldHVybiB0aGlzW2tIZWFkZXJzXVxuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUga2luZCBvZiByZXNvdXJjZSByZXF1ZXN0ZWQgYnkgcmVxdWVzdCwgZS5nLiwgXCJkb2N1bWVudFwiXG4gIC8vIG9yIFwic2NyaXB0XCIuXG4gIGdldCBkZXN0aW5hdGlvbiAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBkZXN0aW5hdGlvbiBnZXR0ZXIgYXJlIHRvIHJldHVybiB0aGlz4oCZcyByZXF1ZXN04oCZcyBkZXN0aW5hdGlvbi5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmRlc3RpbmF0aW9uXG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSByZWZlcnJlciBvZiByZXF1ZXN0LiBJdHMgdmFsdWUgY2FuIGJlIGEgc2FtZS1vcmlnaW4gVVJMIGlmXG4gIC8vIGV4cGxpY2l0bHkgc2V0IGluIGluaXQsIHRoZSBlbXB0eSBzdHJpbmcgdG8gaW5kaWNhdGUgbm8gcmVmZXJyZXIsIGFuZFxuICAvLyBcImFib3V0OmNsaWVudFwiIHdoZW4gZGVmYXVsdGluZyB0byB0aGUgZ2xvYmFs4oCZcyBkZWZhdWx0LiBUaGlzIGlzIHVzZWRcbiAgLy8gZHVyaW5nIGZldGNoaW5nIHRvIGRldGVybWluZSB0aGUgdmFsdWUgb2YgdGhlIGBSZWZlcmVyYCBoZWFkZXIgb2YgdGhlXG4gIC8vIHJlcXVlc3QgYmVpbmcgbWFkZS5cbiAgZ2V0IHJlZmVycmVyICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gMS4gSWYgdGhpc+KAmXMgcmVxdWVzdOKAmXMgcmVmZXJyZXIgaXMgXCJuby1yZWZlcnJlclwiLCB0aGVuIHJldHVybiB0aGVcbiAgICAvLyBlbXB0eSBzdHJpbmcuXG4gICAgaWYgKHRoaXNba1N0YXRlXS5yZWZlcnJlciA9PT0gJ25vLXJlZmVycmVyJykge1xuICAgICAgcmV0dXJuICcnXG4gICAgfVxuXG4gICAgLy8gMi4gSWYgdGhpc+KAmXMgcmVxdWVzdOKAmXMgcmVmZXJyZXIgaXMgXCJjbGllbnRcIiwgdGhlbiByZXR1cm5cbiAgICAvLyBcImFib3V0OmNsaWVudFwiLlxuICAgIGlmICh0aGlzW2tTdGF0ZV0ucmVmZXJyZXIgPT09ICdjbGllbnQnKSB7XG4gICAgICByZXR1cm4gJ2Fib3V0OmNsaWVudCdcbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gdGhpc+KAmXMgcmVxdWVzdOKAmXMgcmVmZXJyZXIsIHNlcmlhbGl6ZWQuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5yZWZlcnJlci50b1N0cmluZygpXG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSByZWZlcnJlciBwb2xpY3kgYXNzb2NpYXRlZCB3aXRoIHJlcXVlc3QuXG4gIC8vIFRoaXMgaXMgdXNlZCBkdXJpbmcgZmV0Y2hpbmcgdG8gY29tcHV0ZSB0aGUgdmFsdWUgb2YgdGhlIHJlcXVlc3TigJlzXG4gIC8vIHJlZmVycmVyLlxuICBnZXQgcmVmZXJyZXJQb2xpY3kgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgcmVmZXJyZXJQb2xpY3kgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc+KAmXMgcmVxdWVzdOKAmXMgcmVmZXJyZXIgcG9saWN5LlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ucmVmZXJyZXJQb2xpY3lcbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIG1vZGUgYXNzb2NpYXRlZCB3aXRoIHJlcXVlc3QsIHdoaWNoIGlzIGEgc3RyaW5nIGluZGljYXRpbmdcbiAgLy8gd2hldGhlciB0aGUgcmVxdWVzdCB3aWxsIHVzZSBDT1JTLCBvciB3aWxsIGJlIHJlc3RyaWN0ZWQgdG8gc2FtZS1vcmlnaW5cbiAgLy8gVVJMcy5cbiAgZ2V0IG1vZGUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgbW9kZSBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlz4oCZcyByZXF1ZXN04oCZcyBtb2RlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ubW9kZVxuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgY3JlZGVudGlhbHMgbW9kZSBhc3NvY2lhdGVkIHdpdGggcmVxdWVzdCxcbiAgLy8gd2hpY2ggaXMgYSBzdHJpbmcgaW5kaWNhdGluZyB3aGV0aGVyIGNyZWRlbnRpYWxzIHdpbGwgYmUgc2VudCB3aXRoIHRoZVxuICAvLyByZXF1ZXN0IGFsd2F5cywgbmV2ZXIsIG9yIG9ubHkgd2hlbiBzZW50IHRvIGEgc2FtZS1vcmlnaW4gVVJMLlxuICBnZXQgY3JlZGVudGlhbHMgKCkge1xuICAgIC8vIFRoZSBjcmVkZW50aWFscyBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlz4oCZcyByZXF1ZXN04oCZcyBjcmVkZW50aWFscyBtb2RlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uY3JlZGVudGlhbHNcbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIGNhY2hlIG1vZGUgYXNzb2NpYXRlZCB3aXRoIHJlcXVlc3QsXG4gIC8vIHdoaWNoIGlzIGEgc3RyaW5nIGluZGljYXRpbmcgaG93IHRoZSByZXF1ZXN0IHdpbGxcbiAgLy8gaW50ZXJhY3Qgd2l0aCB0aGUgYnJvd3NlcuKAmXMgY2FjaGUgd2hlbiBmZXRjaGluZy5cbiAgZ2V0IGNhY2hlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIGNhY2hlIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXPigJlzIHJlcXVlc3TigJlzIGNhY2hlIG1vZGUuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5jYWNoZVxuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgcmVkaXJlY3QgbW9kZSBhc3NvY2lhdGVkIHdpdGggcmVxdWVzdCxcbiAgLy8gd2hpY2ggaXMgYSBzdHJpbmcgaW5kaWNhdGluZyBob3cgcmVkaXJlY3RzIGZvciB0aGVcbiAgLy8gcmVxdWVzdCB3aWxsIGJlIGhhbmRsZWQgZHVyaW5nIGZldGNoaW5nLiBBIHJlcXVlc3RcbiAgLy8gd2lsbCBmb2xsb3cgcmVkaXJlY3RzIGJ5IGRlZmF1bHQuXG4gIGdldCByZWRpcmVjdCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSByZWRpcmVjdCBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlz4oCZcyByZXF1ZXN04oCZcyByZWRpcmVjdCBtb2RlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ucmVkaXJlY3RcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVxdWVzdOKAmXMgc3VicmVzb3VyY2UgaW50ZWdyaXR5IG1ldGFkYXRhLCB3aGljaCBpcyBhXG4gIC8vIGNyeXB0b2dyYXBoaWMgaGFzaCBvZiB0aGUgcmVzb3VyY2UgYmVpbmcgZmV0Y2hlZC4gSXRzIHZhbHVlXG4gIC8vIGNvbnNpc3RzIG9mIG11bHRpcGxlIGhhc2hlcyBzZXBhcmF0ZWQgYnkgd2hpdGVzcGFjZS4gW1NSSV1cbiAgZ2V0IGludGVncml0eSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBpbnRlZ3JpdHkgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc+KAmXMgcmVxdWVzdOKAmXMgaW50ZWdyaXR5XG4gICAgLy8gbWV0YWRhdGEuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5pbnRlZ3JpdHlcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgcmVxdWVzdCBjYW4gb3V0bGl2ZSB0aGVcbiAgLy8gZ2xvYmFsIGluIHdoaWNoIGl0IHdhcyBjcmVhdGVkLlxuICBnZXQga2VlcGFsaXZlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIGtlZXBhbGl2ZSBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlz4oCZcyByZXF1ZXN04oCZcyBrZWVwYWxpdmUuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5rZWVwYWxpdmVcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgcmVxdWVzdCBpcyBmb3IgYSByZWxvYWRcbiAgLy8gbmF2aWdhdGlvbi5cbiAgZ2V0IGlzUmVsb2FkTmF2aWdhdGlvbiAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBpc1JlbG9hZE5hdmlnYXRpb24gZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdHJ1ZSBpZiB0aGlz4oCZc1xuICAgIC8vIHJlcXVlc3TigJlzIHJlbG9hZC1uYXZpZ2F0aW9uIGZsYWcgaXMgc2V0OyBvdGhlcndpc2UgZmFsc2UuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5yZWxvYWROYXZpZ2F0aW9uXG4gIH1cblxuICAvLyBSZXR1cm5zIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90IHJlcXVlc3QgaXMgZm9yIGEgaGlzdG9yeVxuICAvLyBuYXZpZ2F0aW9uIChhLmsuYS4gYmFjay1mb3dhcmQgbmF2aWdhdGlvbikuXG4gIGdldCBpc0hpc3RvcnlOYXZpZ2F0aW9uICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIGlzSGlzdG9yeU5hdmlnYXRpb24gZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdHJ1ZSBpZiB0aGlz4oCZcyByZXF1ZXN04oCZc1xuICAgIC8vIGhpc3RvcnktbmF2aWdhdGlvbiBmbGFnIGlzIHNldDsgb3RoZXJ3aXNlIGZhbHNlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uaGlzdG9yeU5hdmlnYXRpb25cbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIHNpZ25hbCBhc3NvY2lhdGVkIHdpdGggcmVxdWVzdCwgd2hpY2ggaXMgYW4gQWJvcnRTaWduYWxcbiAgLy8gb2JqZWN0IGluZGljYXRpbmcgd2hldGhlciBvciBub3QgcmVxdWVzdCBoYXMgYmVlbiBhYm9ydGVkLCBhbmQgaXRzXG4gIC8vIGFib3J0IGV2ZW50IGhhbmRsZXIuXG4gIGdldCBzaWduYWwgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgc2lnbmFsIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXPigJlzIHNpZ25hbC5cbiAgICByZXR1cm4gdGhpc1trU2lnbmFsXVxuICB9XG5cbiAgZ2V0IGJvZHkgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmJvZHkgPyB0aGlzW2tTdGF0ZV0uYm9keS5zdHJlYW0gOiBudWxsXG4gIH1cblxuICBnZXQgYm9keVVzZWQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICByZXR1cm4gISF0aGlzW2tTdGF0ZV0uYm9keSAmJiB1dGlsLmlzRGlzdHVyYmVkKHRoaXNba1N0YXRlXS5ib2R5LnN0cmVhbSlcbiAgfVxuXG4gIGdldCBkdXBsZXggKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICByZXR1cm4gJ2hhbGYnXG4gIH1cblxuICAvLyBSZXR1cm5zIGEgY2xvbmUgb2YgcmVxdWVzdC5cbiAgY2xvbmUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyAxLiBJZiB0aGlzIGlzIHVudXNhYmxlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICh0aGlzLmJvZHlVc2VkIHx8IHRoaXMuYm9keT8ubG9ja2VkKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd1bnVzYWJsZScpXG4gICAgfVxuXG4gICAgLy8gMi4gTGV0IGNsb25lZFJlcXVlc3QgYmUgdGhlIHJlc3VsdCBvZiBjbG9uaW5nIHRoaXPigJlzIHJlcXVlc3QuXG4gICAgY29uc3QgY2xvbmVkUmVxdWVzdCA9IGNsb25lUmVxdWVzdCh0aGlzW2tTdGF0ZV0pXG5cbiAgICAvLyAzLiBMZXQgY2xvbmVkUmVxdWVzdE9iamVjdCBiZSB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEgUmVxdWVzdCBvYmplY3QsXG4gICAgLy8gZ2l2ZW4gY2xvbmVkUmVxdWVzdCwgdGhpc+KAmXMgaGVhZGVyc+KAmXMgZ3VhcmQsIGFuZCB0aGlz4oCZcyByZWxldmFudCBSZWFsbS5cbiAgICBjb25zdCBjbG9uZWRSZXF1ZXN0T2JqZWN0ID0gbmV3IFJlcXVlc3Qoa0NvbnN0cnVjdClcbiAgICBjbG9uZWRSZXF1ZXN0T2JqZWN0W2tTdGF0ZV0gPSBjbG9uZWRSZXF1ZXN0XG4gICAgY2xvbmVkUmVxdWVzdE9iamVjdFtrUmVhbG1dID0gdGhpc1trUmVhbG1dXG4gICAgY2xvbmVkUmVxdWVzdE9iamVjdFtrSGVhZGVyc10gPSBuZXcgSGVhZGVycyhrQ29uc3RydWN0KVxuICAgIGNsb25lZFJlcXVlc3RPYmplY3Rba0hlYWRlcnNdW2tIZWFkZXJzTGlzdF0gPSBjbG9uZWRSZXF1ZXN0LmhlYWRlcnNMaXN0XG4gICAgY2xvbmVkUmVxdWVzdE9iamVjdFtrSGVhZGVyc11ba0d1YXJkXSA9IHRoaXNba0hlYWRlcnNdW2tHdWFyZF1cbiAgICBjbG9uZWRSZXF1ZXN0T2JqZWN0W2tIZWFkZXJzXVtrUmVhbG1dID0gdGhpc1trSGVhZGVyc11ba1JlYWxtXVxuXG4gICAgLy8gNC4gTWFrZSBjbG9uZWRSZXF1ZXN0T2JqZWN04oCZcyBzaWduYWwgZm9sbG93IHRoaXPigJlzIHNpZ25hbC5cbiAgICBjb25zdCBhYyA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuICAgIGlmICh0aGlzLnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICBhYy5hYm9ydCh0aGlzLnNpZ25hbC5yZWFzb24pXG4gICAgfSBlbHNlIHtcbiAgICAgIHV0aWwuYWRkQWJvcnRMaXN0ZW5lcihcbiAgICAgICAgdGhpcy5zaWduYWwsXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBhYy5hYm9ydCh0aGlzLnNpZ25hbC5yZWFzb24pXG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9XG4gICAgY2xvbmVkUmVxdWVzdE9iamVjdFtrU2lnbmFsXSA9IGFjLnNpZ25hbFxuXG4gICAgLy8gNC4gUmV0dXJuIGNsb25lZFJlcXVlc3RPYmplY3QuXG4gICAgcmV0dXJuIGNsb25lZFJlcXVlc3RPYmplY3RcbiAgfVxufVxuXG5taXhpbkJvZHkoUmVxdWVzdClcblxuZnVuY3Rpb24gbWFrZVJlcXVlc3QgKGluaXQpIHtcbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3RzXG4gIGNvbnN0IHJlcXVlc3QgPSB7XG4gICAgbWV0aG9kOiAnR0VUJyxcbiAgICBsb2NhbFVSTHNPbmx5OiBmYWxzZSxcbiAgICB1bnNhZmVSZXF1ZXN0OiBmYWxzZSxcbiAgICBib2R5OiBudWxsLFxuICAgIGNsaWVudDogbnVsbCxcbiAgICByZXNlcnZlZENsaWVudDogbnVsbCxcbiAgICByZXBsYWNlc0NsaWVudElkOiAnJyxcbiAgICB3aW5kb3c6ICdjbGllbnQnLFxuICAgIGtlZXBhbGl2ZTogZmFsc2UsXG4gICAgc2VydmljZVdvcmtlcnM6ICdhbGwnLFxuICAgIGluaXRpYXRvcjogJycsXG4gICAgZGVzdGluYXRpb246ICcnLFxuICAgIHByaW9yaXR5OiBudWxsLFxuICAgIG9yaWdpbjogJ2NsaWVudCcsXG4gICAgcG9saWN5Q29udGFpbmVyOiAnY2xpZW50JyxcbiAgICByZWZlcnJlcjogJ2NsaWVudCcsXG4gICAgcmVmZXJyZXJQb2xpY3k6ICcnLFxuICAgIG1vZGU6ICduby1jb3JzJyxcbiAgICB1c2VDT1JTUHJlZmxpZ2h0RmxhZzogZmFsc2UsXG4gICAgY3JlZGVudGlhbHM6ICdzYW1lLW9yaWdpbicsXG4gICAgdXNlQ3JlZGVudGlhbHM6IGZhbHNlLFxuICAgIGNhY2hlOiAnZGVmYXVsdCcsXG4gICAgcmVkaXJlY3Q6ICdmb2xsb3cnLFxuICAgIGludGVncml0eTogJycsXG4gICAgY3J5cHRvR3JhcGhpY3NOb25jZU1ldGFkYXRhOiAnJyxcbiAgICBwYXJzZXJNZXRhZGF0YTogJycsXG4gICAgcmVsb2FkTmF2aWdhdGlvbjogZmFsc2UsXG4gICAgaGlzdG9yeU5hdmlnYXRpb246IGZhbHNlLFxuICAgIHVzZXJBY3RpdmF0aW9uOiBmYWxzZSxcbiAgICB0YWludGVkT3JpZ2luOiBmYWxzZSxcbiAgICByZWRpcmVjdENvdW50OiAwLFxuICAgIHJlc3BvbnNlVGFpbnRpbmc6ICdiYXNpYycsXG4gICAgcHJldmVudE5vQ2FjaGVDYWNoZUNvbnRyb2xIZWFkZXJNb2RpZmljYXRpb246IGZhbHNlLFxuICAgIGRvbmU6IGZhbHNlLFxuICAgIHRpbWluZ0FsbG93RmFpbGVkOiBmYWxzZSxcbiAgICAuLi5pbml0LFxuICAgIGhlYWRlcnNMaXN0OiBpbml0LmhlYWRlcnNMaXN0XG4gICAgICA/IG5ldyBIZWFkZXJzTGlzdChpbml0LmhlYWRlcnNMaXN0KVxuICAgICAgOiBuZXcgSGVhZGVyc0xpc3QoKVxuICB9XG4gIHJlcXVlc3QudXJsID0gcmVxdWVzdC51cmxMaXN0WzBdXG4gIHJldHVybiByZXF1ZXN0XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LXJlcXVlc3QtY2xvbmVcbmZ1bmN0aW9uIGNsb25lUmVxdWVzdCAocmVxdWVzdCkge1xuICAvLyBUbyBjbG9uZSBhIHJlcXVlc3QgcmVxdWVzdCwgcnVuIHRoZXNlIHN0ZXBzOlxuXG4gIC8vIDEuIExldCBuZXdSZXF1ZXN0IGJlIGEgY29weSBvZiByZXF1ZXN0LCBleGNlcHQgZm9yIGl0cyBib2R5LlxuICBjb25zdCBuZXdSZXF1ZXN0ID0gbWFrZVJlcXVlc3QoeyAuLi5yZXF1ZXN0LCBib2R5OiBudWxsIH0pXG5cbiAgLy8gMi4gSWYgcmVxdWVzdOKAmXMgYm9keSBpcyBub24tbnVsbCwgc2V0IG5ld1JlcXVlc3TigJlzIGJvZHkgdG8gdGhlXG4gIC8vIHJlc3VsdCBvZiBjbG9uaW5nIHJlcXVlc3TigJlzIGJvZHkuXG4gIGlmIChyZXF1ZXN0LmJvZHkgIT0gbnVsbCkge1xuICAgIG5ld1JlcXVlc3QuYm9keSA9IGNsb25lQm9keShyZXF1ZXN0LmJvZHkpXG4gIH1cblxuICAvLyAzLiBSZXR1cm4gbmV3UmVxdWVzdC5cbiAgcmV0dXJuIG5ld1JlcXVlc3Rcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUmVxdWVzdC5wcm90b3R5cGUsIHtcbiAgbWV0aG9kOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICB1cmw6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGhlYWRlcnM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlZGlyZWN0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBjbG9uZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgc2lnbmFsOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBkdXBsZXg6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGRlc3RpbmF0aW9uOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBib2R5OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBib2R5VXNlZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgaXNIaXN0b3J5TmF2aWdhdGlvbjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgaXNSZWxvYWROYXZpZ2F0aW9uOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBrZWVwYWxpdmU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGludGVncml0eToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgY2FjaGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNyZWRlbnRpYWxzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBhdHRyaWJ1dGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlZmVycmVyUG9saWN5OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWZlcnJlcjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgbW9kZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ1JlcXVlc3QnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9XG59KVxuXG53ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0ID0gd2ViaWRsLmludGVyZmFjZUNvbnZlcnRlcihcbiAgUmVxdWVzdFxuKVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdGluZm9cbndlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvID0gZnVuY3Rpb24gKFYpIHtcbiAgaWYgKHR5cGVvZiBWID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcoVilcbiAgfVxuXG4gIGlmIChWIGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0KFYpXG4gIH1cblxuICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKFYpXG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLkFib3J0U2lnbmFsID0gd2ViaWRsLmludGVyZmFjZUNvbnZlcnRlcihcbiAgQWJvcnRTaWduYWxcbilcblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3Rpbml0XG53ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5pdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGtleTogJ21ldGhvZCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdoZWFkZXJzJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkhlYWRlcnNJbml0XG4gIH0sXG4gIHtcbiAgICBrZXk6ICdib2R5JyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcihcbiAgICAgIHdlYmlkbC5jb252ZXJ0ZXJzLkJvZHlJbml0XG4gICAgKVxuICB9LFxuICB7XG4gICAga2V5OiAncmVmZXJyZXInLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdyZWZlcnJlclBvbGljeScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAgLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1yZWZlcnJlci1wb2xpY3kvI3JlZmVycmVyLXBvbGljeVxuICAgIGFsbG93ZWRWYWx1ZXM6IHJlZmVycmVyUG9saWN5XG4gIH0sXG4gIHtcbiAgICBrZXk6ICdtb2RlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1yZXF1ZXN0LW1vZGVcbiAgICBhbGxvd2VkVmFsdWVzOiByZXF1ZXN0TW9kZVxuICB9LFxuICB7XG4gICAga2V5OiAnY3JlZGVudGlhbHMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXF1ZXN0Y3JlZGVudGlhbHNcbiAgICBhbGxvd2VkVmFsdWVzOiByZXF1ZXN0Q3JlZGVudGlhbHNcbiAgfSxcbiAge1xuICAgIGtleTogJ2NhY2hlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdGNhY2hlXG4gICAgYWxsb3dlZFZhbHVlczogcmVxdWVzdENhY2hlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdyZWRpcmVjdCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3RyZWRpcmVjdFxuICAgIGFsbG93ZWRWYWx1ZXM6IHJlcXVlc3RSZWRpcmVjdFxuICB9LFxuICB7XG4gICAga2V5OiAnaW50ZWdyaXR5JyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZ1xuICB9LFxuICB7XG4gICAga2V5OiAna2VlcGFsaXZlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW5cbiAgfSxcbiAge1xuICAgIGtleTogJ3NpZ25hbCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIoXG4gICAgICAoc2lnbmFsKSA9PiB3ZWJpZGwuY29udmVydGVycy5BYm9ydFNpZ25hbChcbiAgICAgICAgc2lnbmFsLFxuICAgICAgICB7IHN0cmljdDogZmFsc2UgfVxuICAgICAgKVxuICAgIClcbiAgfSxcbiAge1xuICAgIGtleTogJ3dpbmRvdycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5hbnlcbiAgfSxcbiAge1xuICAgIGtleTogJ2R1cGxleCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAgYWxsb3dlZFZhbHVlczogcmVxdWVzdER1cGxleFxuICB9XG5dKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHsgUmVxdWVzdCwgbWFrZVJlcXVlc3QgfVxuIiwKICAgICIvLyBodHRwczovL2dpdGh1Yi5jb20vRXRoYW4tQXJyb3dvb2QvdW5kaWNpLWZldGNoXG5cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIFJlc3BvbnNlLFxuICBtYWtlTmV0d29ya0Vycm9yLFxuICBtYWtlQXBwcm9wcmlhdGVOZXR3b3JrRXJyb3IsXG4gIGZpbHRlclJlc3BvbnNlLFxuICBtYWtlUmVzcG9uc2Vcbn0gPSByZXF1aXJlKCcuL3Jlc3BvbnNlJylcbmNvbnN0IHsgSGVhZGVycyB9ID0gcmVxdWlyZSgnLi9oZWFkZXJzJylcbmNvbnN0IHsgUmVxdWVzdCwgbWFrZVJlcXVlc3QgfSA9IHJlcXVpcmUoJy4vcmVxdWVzdCcpXG5jb25zdCB6bGliID0gcmVxdWlyZSgnemxpYicpXG5jb25zdCB7XG4gIGJ5dGVzTWF0Y2gsXG4gIG1ha2VQb2xpY3lDb250YWluZXIsXG4gIGNsb25lUG9saWN5Q29udGFpbmVyLFxuICByZXF1ZXN0QmFkUG9ydCxcbiAgVEFPQ2hlY2ssXG4gIGFwcGVuZFJlcXVlc3RPcmlnaW5IZWFkZXIsXG4gIHJlc3BvbnNlTG9jYXRpb25VUkwsXG4gIHJlcXVlc3RDdXJyZW50VVJMLFxuICBzZXRSZXF1ZXN0UmVmZXJyZXJQb2xpY3lPblJlZGlyZWN0LFxuICB0cnlVcGdyYWRlUmVxdWVzdFRvQVBvdGVudGlhbGx5VHJ1c3R3b3J0aHlVUkwsXG4gIGNyZWF0ZU9wYXF1ZVRpbWluZ0luZm8sXG4gIGFwcGVuZEZldGNoTWV0YWRhdGEsXG4gIGNvcnNDaGVjayxcbiAgY3Jvc3NPcmlnaW5SZXNvdXJjZVBvbGljeUNoZWNrLFxuICBkZXRlcm1pbmVSZXF1ZXN0c1JlZmVycmVyLFxuICBjb2Fyc2VuZWRTaGFyZWRDdXJyZW50VGltZSxcbiAgY3JlYXRlRGVmZXJyZWRQcm9taXNlLFxuICBpc0Jsb2JMaWtlLFxuICBzYW1lT3JpZ2luLFxuICBpc0NhbmNlbGxlZCxcbiAgaXNBYm9ydGVkLFxuICBpc0Vycm9yTGlrZSxcbiAgZnVsbHlSZWFkQm9keSxcbiAgcmVhZGFibGVTdHJlYW1DbG9zZSxcbiAgaXNvbW9ycGhpY0VuY29kZSxcbiAgdXJsSXNMb2NhbCxcbiAgdXJsSXNIdHRwSHR0cHNTY2hlbWUsXG4gIHVybEhhc0h0dHBzU2NoZW1lXG59ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsga1N0YXRlLCBrSGVhZGVycywga0d1YXJkLCBrUmVhbG0gfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBzYWZlbHlFeHRyYWN0Qm9keSB9ID0gcmVxdWlyZSgnLi9ib2R5JylcbmNvbnN0IHtcbiAgcmVkaXJlY3RTdGF0dXNTZXQsXG4gIG51bGxCb2R5U3RhdHVzLFxuICBzYWZlTWV0aG9kc1NldCxcbiAgcmVxdWVzdEJvZHlIZWFkZXIsXG4gIHN1YnJlc291cmNlU2V0LFxuICBET01FeGNlcHRpb25cbn0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7IGtIZWFkZXJzTGlzdCB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IEVFID0gcmVxdWlyZSgnZXZlbnRzJylcbmNvbnN0IHsgUmVhZGFibGUsIHBpcGVsaW5lIH0gPSByZXF1aXJlKCdzdHJlYW0nKVxuY29uc3QgeyBhZGRBYm9ydExpc3RlbmVyLCBpc0Vycm9yZWQsIGlzUmVhZGFibGUsIG5vZGVNYWpvciwgbm9kZU1pbm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBkYXRhVVJMUHJvY2Vzc29yLCBzZXJpYWxpemVBTWltZVR5cGUgfSA9IHJlcXVpcmUoJy4vZGF0YVVSTCcpXG5jb25zdCB7IFRyYW5zZm9ybVN0cmVhbSB9ID0gcmVxdWlyZSgnc3RyZWFtL3dlYicpXG5jb25zdCB7IGdldEdsb2JhbERpc3BhdGNoZXIgfSA9IHJlcXVpcmUoJy4uL2dsb2JhbCcpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi93ZWJpZGwnKVxuY29uc3QgeyBTVEFUVVNfQ09ERVMgfSA9IHJlcXVpcmUoJ2h0dHAnKVxuY29uc3QgR0VUX09SX0hFQUQgPSBbJ0dFVCcsICdIRUFEJ11cblxuLyoqIEB0eXBlIHtpbXBvcnQoJ2J1ZmZlcicpLnJlc29sdmVPYmplY3RVUkx9ICovXG5sZXQgcmVzb2x2ZU9iamVjdFVSTFxubGV0IFJlYWRhYmxlU3RyZWFtID0gZ2xvYmFsVGhpcy5SZWFkYWJsZVN0cmVhbVxuXG5jbGFzcyBGZXRjaCBleHRlbmRzIEVFIHtcbiAgY29uc3RydWN0b3IgKGRpc3BhdGNoZXIpIHtcbiAgICBzdXBlcigpXG5cbiAgICB0aGlzLmRpc3BhdGNoZXIgPSBkaXNwYXRjaGVyXG4gICAgdGhpcy5jb25uZWN0aW9uID0gbnVsbFxuICAgIHRoaXMuZHVtcCA9IGZhbHNlXG4gICAgdGhpcy5zdGF0ZSA9ICdvbmdvaW5nJ1xuICAgIC8vIDIgdGVybWluYXRlZCBsaXN0ZW5lcnMgZ2V0IGFkZGVkIHBlciByZXF1ZXN0LFxuICAgIC8vIGJ1dCBvbmx5IDEgZ2V0cyByZW1vdmVkLiBJZiB0aGVyZSBhcmUgMjAgcmVkaXJlY3RzLFxuICAgIC8vIDIxIGxpc3RlbmVycyB3aWxsIGJlIGFkZGVkLlxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMTcxMVxuICAgIC8vIFRPRE8gKGZpeCk6IEZpbmQgYW5kIGZpeCByb290IGNhdXNlIGZvciBsZWFrZWQgbGlzdGVuZXIuXG4gICAgdGhpcy5zZXRNYXhMaXN0ZW5lcnMoMjEpXG4gIH1cblxuICB0ZXJtaW5hdGUgKHJlYXNvbikge1xuICAgIGlmICh0aGlzLnN0YXRlICE9PSAnb25nb2luZycpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuc3RhdGUgPSAndGVybWluYXRlZCdcbiAgICB0aGlzLmNvbm5lY3Rpb24/LmRlc3Ryb3kocmVhc29uKVxuICAgIHRoaXMuZW1pdCgndGVybWluYXRlZCcsIHJlYXNvbilcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmZXRjaC1jb250cm9sbGVyLWFib3J0XG4gIGFib3J0IChlcnJvcikge1xuICAgIGlmICh0aGlzLnN0YXRlICE9PSAnb25nb2luZycpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIDEuIFNldCBjb250cm9sbGVy4oCZcyBzdGF0ZSB0byBcImFib3J0ZWRcIi5cbiAgICB0aGlzLnN0YXRlID0gJ2Fib3J0ZWQnXG5cbiAgICAvLyAyLiBMZXQgZmFsbGJhY2tFcnJvciBiZSBhbiBcIkFib3J0RXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgLy8gMy4gU2V0IGVycm9yIHRvIGZhbGxiYWNrRXJyb3IgaWYgaXQgaXMgbm90IGdpdmVuLlxuICAgIGlmICghZXJyb3IpIHtcbiAgICAgIGVycm9yID0gbmV3IERPTUV4Y2VwdGlvbignVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC4nLCAnQWJvcnRFcnJvcicpXG4gICAgfVxuXG4gICAgLy8gNC4gTGV0IHNlcmlhbGl6ZWRFcnJvciBiZSBTdHJ1Y3R1cmVkU2VyaWFsaXplKGVycm9yKS5cbiAgICAvLyAgICBJZiB0aGF0IHRocmV3IGFuIGV4Y2VwdGlvbiwgY2F0Y2ggaXQsIGFuZCBsZXRcbiAgICAvLyAgICBzZXJpYWxpemVkRXJyb3IgYmUgU3RydWN0dXJlZFNlcmlhbGl6ZShmYWxsYmFja0Vycm9yKS5cblxuICAgIC8vIDUuIFNldCBjb250cm9sbGVy4oCZcyBzZXJpYWxpemVkIGFib3J0IHJlYXNvbiB0byBzZXJpYWxpemVkRXJyb3IuXG4gICAgdGhpcy5zZXJpYWxpemVkQWJvcnRSZWFzb24gPSBlcnJvclxuXG4gICAgdGhpcy5jb25uZWN0aW9uPy5kZXN0cm95KGVycm9yKVxuICAgIHRoaXMuZW1pdCgndGVybWluYXRlZCcsIGVycm9yKVxuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmZXRjaC1tZXRob2RcbmZ1bmN0aW9uIGZldGNoIChpbnB1dCwgaW5pdCA9IHt9KSB7XG4gIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdnbG9iYWxUaGlzLmZldGNoJyB9KVxuXG4gIC8vIDEuIExldCBwIGJlIGEgbmV3IHByb21pc2UuXG4gIGNvbnN0IHAgPSBjcmVhdGVEZWZlcnJlZFByb21pc2UoKVxuXG4gIC8vIDIuIExldCByZXF1ZXN0T2JqZWN0IGJlIHRoZSByZXN1bHQgb2YgaW52b2tpbmcgdGhlIGluaXRpYWwgdmFsdWUgb2ZcbiAgLy8gUmVxdWVzdCBhcyBjb25zdHJ1Y3RvciB3aXRoIGlucHV0IGFuZCBpbml0IGFzIGFyZ3VtZW50cy4gSWYgdGhpcyB0aHJvd3NcbiAgLy8gYW4gZXhjZXB0aW9uLCByZWplY3QgcCB3aXRoIGl0IGFuZCByZXR1cm4gcC5cbiAgbGV0IHJlcXVlc3RPYmplY3RcblxuICB0cnkge1xuICAgIHJlcXVlc3RPYmplY3QgPSBuZXcgUmVxdWVzdChpbnB1dCwgaW5pdClcbiAgfSBjYXRjaCAoZSkge1xuICAgIHAucmVqZWN0KGUpXG4gICAgcmV0dXJuIHAucHJvbWlzZVxuICB9XG5cbiAgLy8gMy4gTGV0IHJlcXVlc3QgYmUgcmVxdWVzdE9iamVjdOKAmXMgcmVxdWVzdC5cbiAgY29uc3QgcmVxdWVzdCA9IHJlcXVlc3RPYmplY3Rba1N0YXRlXVxuXG4gIC8vIDQuIElmIHJlcXVlc3RPYmplY3TigJlzIHNpZ25hbOKAmXMgYWJvcnRlZCBmbGFnIGlzIHNldCwgdGhlbjpcbiAgaWYgKHJlcXVlc3RPYmplY3Quc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAvLyAxLiBBYm9ydCB0aGUgZmV0Y2goKSBjYWxsIHdpdGggcCwgcmVxdWVzdCwgbnVsbCwgYW5kXG4gICAgLy8gICAgcmVxdWVzdE9iamVjdOKAmXMgc2lnbmFs4oCZcyBhYm9ydCByZWFzb24uXG4gICAgYWJvcnRGZXRjaChwLCByZXF1ZXN0LCBudWxsLCByZXF1ZXN0T2JqZWN0LnNpZ25hbC5yZWFzb24pXG5cbiAgICAvLyAyLiBSZXR1cm4gcC5cbiAgICByZXR1cm4gcC5wcm9taXNlXG4gIH1cblxuICAvLyA1LiBMZXQgZ2xvYmFsT2JqZWN0IGJlIHJlcXVlc3TigJlzIGNsaWVudOKAmXMgZ2xvYmFsIG9iamVjdC5cbiAgY29uc3QgZ2xvYmFsT2JqZWN0ID0gcmVxdWVzdC5jbGllbnQuZ2xvYmFsT2JqZWN0XG5cbiAgLy8gNi4gSWYgZ2xvYmFsT2JqZWN0IGlzIGEgU2VydmljZVdvcmtlckdsb2JhbFNjb3BlIG9iamVjdCwgdGhlbiBzZXRcbiAgLy8gcmVxdWVzdOKAmXMgc2VydmljZS13b3JrZXJzIG1vZGUgdG8gXCJub25lXCIuXG4gIGlmIChnbG9iYWxPYmplY3Q/LmNvbnN0cnVjdG9yPy5uYW1lID09PSAnU2VydmljZVdvcmtlckdsb2JhbFNjb3BlJykge1xuICAgIHJlcXVlc3Quc2VydmljZVdvcmtlcnMgPSAnbm9uZSdcbiAgfVxuXG4gIC8vIDcuIExldCByZXNwb25zZU9iamVjdCBiZSBudWxsLlxuICBsZXQgcmVzcG9uc2VPYmplY3QgPSBudWxsXG5cbiAgLy8gOC4gTGV0IHJlbGV2YW50UmVhbG0gYmUgdGhpc+KAmXMgcmVsZXZhbnQgUmVhbG0uXG4gIGNvbnN0IHJlbGV2YW50UmVhbG0gPSBudWxsXG5cbiAgLy8gOS4gTGV0IGxvY2FsbHlBYm9ydGVkIGJlIGZhbHNlLlxuICBsZXQgbG9jYWxseUFib3J0ZWQgPSBmYWxzZVxuXG4gIC8vIDEwLiBMZXQgY29udHJvbGxlciBiZSBudWxsLlxuICBsZXQgY29udHJvbGxlciA9IG51bGxcblxuICAvLyAxMS4gQWRkIHRoZSBmb2xsb3dpbmcgYWJvcnQgc3RlcHMgdG8gcmVxdWVzdE9iamVjdOKAmXMgc2lnbmFsOlxuICBhZGRBYm9ydExpc3RlbmVyKFxuICAgIHJlcXVlc3RPYmplY3Quc2lnbmFsLFxuICAgICgpID0+IHtcbiAgICAgIC8vIDEuIFNldCBsb2NhbGx5QWJvcnRlZCB0byB0cnVlLlxuICAgICAgbG9jYWxseUFib3J0ZWQgPSB0cnVlXG5cbiAgICAgIC8vIDIuIEFzc2VydDogY29udHJvbGxlciBpcyBub24tbnVsbC5cbiAgICAgIGFzc2VydChjb250cm9sbGVyICE9IG51bGwpXG5cbiAgICAgIC8vIDMuIEFib3J0IGNvbnRyb2xsZXIgd2l0aCByZXF1ZXN0T2JqZWN04oCZcyBzaWduYWzigJlzIGFib3J0IHJlYXNvbi5cbiAgICAgIGNvbnRyb2xsZXIuYWJvcnQocmVxdWVzdE9iamVjdC5zaWduYWwucmVhc29uKVxuXG4gICAgICAvLyA0LiBBYm9ydCB0aGUgZmV0Y2goKSBjYWxsIHdpdGggcCwgcmVxdWVzdCwgcmVzcG9uc2VPYmplY3QsXG4gICAgICAvLyAgICBhbmQgcmVxdWVzdE9iamVjdOKAmXMgc2lnbmFs4oCZcyBhYm9ydCByZWFzb24uXG4gICAgICBhYm9ydEZldGNoKHAsIHJlcXVlc3QsIHJlc3BvbnNlT2JqZWN0LCByZXF1ZXN0T2JqZWN0LnNpZ25hbC5yZWFzb24pXG4gICAgfVxuICApXG5cbiAgLy8gMTIuIExldCBoYW5kbGVGZXRjaERvbmUgZ2l2ZW4gcmVzcG9uc2UgcmVzcG9uc2UgYmUgdG8gZmluYWxpemUgYW5kXG4gIC8vIHJlcG9ydCB0aW1pbmcgd2l0aCByZXNwb25zZSwgZ2xvYmFsT2JqZWN0LCBhbmQgXCJmZXRjaFwiLlxuICBjb25zdCBoYW5kbGVGZXRjaERvbmUgPSAocmVzcG9uc2UpID0+XG4gICAgZmluYWxpemVBbmRSZXBvcnRUaW1pbmcocmVzcG9uc2UsICdmZXRjaCcpXG5cbiAgLy8gMTMuIFNldCBjb250cm9sbGVyIHRvIHRoZSByZXN1bHQgb2YgY2FsbGluZyBmZXRjaCBnaXZlbiByZXF1ZXN0LFxuICAvLyB3aXRoIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSBzZXQgdG8gaGFuZGxlRmV0Y2hEb25lLCBhbmQgcHJvY2Vzc1Jlc3BvbnNlXG4gIC8vIGdpdmVuIHJlc3BvbnNlIGJlaW5nIHRoZXNlIHN1YnN0ZXBzOlxuXG4gIGNvbnN0IHByb2Nlc3NSZXNwb25zZSA9IChyZXNwb25zZSkgPT4ge1xuICAgIC8vIDEuIElmIGxvY2FsbHlBYm9ydGVkIGlzIHRydWUsIHRlcm1pbmF0ZSB0aGVzZSBzdWJzdGVwcy5cbiAgICBpZiAobG9jYWxseUFib3J0ZWQpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgIH1cblxuICAgIC8vIDIuIElmIHJlc3BvbnNl4oCZcyBhYm9ydGVkIGZsYWcgaXMgc2V0LCB0aGVuOlxuICAgIGlmIChyZXNwb25zZS5hYm9ydGVkKSB7XG4gICAgICAvLyAxLiBMZXQgZGVzZXJpYWxpemVkRXJyb3IgYmUgdGhlIHJlc3VsdCBvZiBkZXNlcmlhbGl6ZSBhIHNlcmlhbGl6ZWRcbiAgICAgIC8vICAgIGFib3J0IHJlYXNvbiBnaXZlbiBjb250cm9sbGVy4oCZcyBzZXJpYWxpemVkIGFib3J0IHJlYXNvbiBhbmRcbiAgICAgIC8vICAgIHJlbGV2YW50UmVhbG0uXG5cbiAgICAgIC8vIDIuIEFib3J0IHRoZSBmZXRjaCgpIGNhbGwgd2l0aCBwLCByZXF1ZXN0LCByZXNwb25zZU9iamVjdCwgYW5kXG4gICAgICAvLyAgICBkZXNlcmlhbGl6ZWRFcnJvci5cblxuICAgICAgYWJvcnRGZXRjaChwLCByZXF1ZXN0LCByZXNwb25zZU9iamVjdCwgY29udHJvbGxlci5zZXJpYWxpemVkQWJvcnRSZWFzb24pXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICB9XG5cbiAgICAvLyAzLiBJZiByZXNwb25zZSBpcyBhIG5ldHdvcmsgZXJyb3IsIHRoZW4gcmVqZWN0IHAgd2l0aCBhIFR5cGVFcnJvclxuICAgIC8vIGFuZCB0ZXJtaW5hdGUgdGhlc2Ugc3Vic3RlcHMuXG4gICAgaWYgKHJlc3BvbnNlLnR5cGUgPT09ICdlcnJvcicpIHtcbiAgICAgIHAucmVqZWN0KFxuICAgICAgICBPYmplY3QuYXNzaWduKG5ldyBUeXBlRXJyb3IoJ2ZldGNoIGZhaWxlZCcpLCB7IGNhdXNlOiByZXNwb25zZS5lcnJvciB9KVxuICAgICAgKVxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgfVxuXG4gICAgLy8gNC4gU2V0IHJlc3BvbnNlT2JqZWN0IHRvIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYSBSZXNwb25zZSBvYmplY3QsXG4gICAgLy8gZ2l2ZW4gcmVzcG9uc2UsIFwiaW1tdXRhYmxlXCIsIGFuZCByZWxldmFudFJlYWxtLlxuICAgIHJlc3BvbnNlT2JqZWN0ID0gbmV3IFJlc3BvbnNlKClcbiAgICByZXNwb25zZU9iamVjdFtrU3RhdGVdID0gcmVzcG9uc2VcbiAgICByZXNwb25zZU9iamVjdFtrUmVhbG1dID0gcmVsZXZhbnRSZWFsbVxuICAgIHJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrSGVhZGVyc0xpc3RdID0gcmVzcG9uc2UuaGVhZGVyc0xpc3RcbiAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba0d1YXJkXSA9ICdpbW11dGFibGUnXG4gICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tSZWFsbV0gPSByZWxldmFudFJlYWxtXG5cbiAgICAvLyA1LiBSZXNvbHZlIHAgd2l0aCByZXNwb25zZU9iamVjdC5cbiAgICBwLnJlc29sdmUocmVzcG9uc2VPYmplY3QpXG4gIH1cblxuICBjb250cm9sbGVyID0gZmV0Y2hpbmcoe1xuICAgIHJlcXVlc3QsXG4gICAgcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5OiBoYW5kbGVGZXRjaERvbmUsXG4gICAgcHJvY2Vzc1Jlc3BvbnNlLFxuICAgIGRpc3BhdGNoZXI6IGluaXQuZGlzcGF0Y2hlciA/PyBnZXRHbG9iYWxEaXNwYXRjaGVyKCkgLy8gdW5kaWNpXG4gIH0pXG5cbiAgLy8gMTQuIFJldHVybiBwLlxuICByZXR1cm4gcC5wcm9taXNlXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmaW5hbGl6ZS1hbmQtcmVwb3J0LXRpbWluZ1xuZnVuY3Rpb24gZmluYWxpemVBbmRSZXBvcnRUaW1pbmcgKHJlc3BvbnNlLCBpbml0aWF0b3JUeXBlID0gJ290aGVyJykge1xuICAvLyAxLiBJZiByZXNwb25zZSBpcyBhbiBhYm9ydGVkIG5ldHdvcmsgZXJyb3IsIHRoZW4gcmV0dXJuLlxuICBpZiAocmVzcG9uc2UudHlwZSA9PT0gJ2Vycm9yJyAmJiByZXNwb25zZS5hYm9ydGVkKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyAyLiBJZiByZXNwb25zZeKAmXMgVVJMIGxpc3QgaXMgbnVsbCBvciBlbXB0eSwgdGhlbiByZXR1cm4uXG4gIGlmICghcmVzcG9uc2UudXJsTGlzdD8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyAzLiBMZXQgb3JpZ2luYWxVUkwgYmUgcmVzcG9uc2XigJlzIFVSTCBsaXN0WzBdLlxuICBjb25zdCBvcmlnaW5hbFVSTCA9IHJlc3BvbnNlLnVybExpc3RbMF1cblxuICAvLyA0LiBMZXQgdGltaW5nSW5mbyBiZSByZXNwb25zZeKAmXMgdGltaW5nIGluZm8uXG4gIGxldCB0aW1pbmdJbmZvID0gcmVzcG9uc2UudGltaW5nSW5mb1xuXG4gIC8vIDUuIExldCBjYWNoZVN0YXRlIGJlIHJlc3BvbnNl4oCZcyBjYWNoZSBzdGF0ZS5cbiAgbGV0IGNhY2hlU3RhdGUgPSByZXNwb25zZS5jYWNoZVN0YXRlXG5cbiAgLy8gNi4gSWYgb3JpZ2luYWxVUkzigJlzIHNjaGVtZSBpcyBub3QgYW4gSFRUUChTKSBzY2hlbWUsIHRoZW4gcmV0dXJuLlxuICBpZiAoIXVybElzSHR0cEh0dHBzU2NoZW1lKG9yaWdpbmFsVVJMKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgLy8gNy4gSWYgdGltaW5nSW5mbyBpcyBudWxsLCB0aGVuIHJldHVybi5cbiAgaWYgKHRpbWluZ0luZm8gPT09IG51bGwpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIDguIElmIHJlc3BvbnNl4oCZcyB0aW1pbmcgYWxsb3cgcGFzc2VkIGZsYWcgaXMgbm90IHNldCwgdGhlbjpcbiAgaWYgKCFyZXNwb25zZS50aW1pbmdBbGxvd1Bhc3NlZCkge1xuICAgIC8vICAxLiBTZXQgdGltaW5nSW5mbyB0byBhIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYW4gb3BhcXVlIHRpbWluZyBpbmZvIGZvciB0aW1pbmdJbmZvLlxuICAgIHRpbWluZ0luZm8gPSBjcmVhdGVPcGFxdWVUaW1pbmdJbmZvKHtcbiAgICAgIHN0YXJ0VGltZTogdGltaW5nSW5mby5zdGFydFRpbWVcbiAgICB9KVxuXG4gICAgLy8gIDIuIFNldCBjYWNoZVN0YXRlIHRvIHRoZSBlbXB0eSBzdHJpbmcuXG4gICAgY2FjaGVTdGF0ZSA9ICcnXG4gIH1cblxuICAvLyA5LiBTZXQgdGltaW5nSW5mb+KAmXMgZW5kIHRpbWUgdG8gdGhlIGNvYXJzZW5lZCBzaGFyZWQgY3VycmVudCB0aW1lXG4gIC8vIGdpdmVuIGdsb2JhbOKAmXMgcmVsZXZhbnQgc2V0dGluZ3Mgb2JqZWN04oCZcyBjcm9zcy1vcmlnaW4gaXNvbGF0ZWRcbiAgLy8gY2FwYWJpbGl0eS5cbiAgLy8gVE9ETzogZ2l2ZW4gZ2xvYmFs4oCZcyByZWxldmFudCBzZXR0aW5ncyBvYmplY3TigJlzIGNyb3NzLW9yaWdpbiBpc29sYXRlZFxuICAvLyBjYXBhYmlsaXR5P1xuICB0aW1pbmdJbmZvLmVuZFRpbWUgPSBjb2Fyc2VuZWRTaGFyZWRDdXJyZW50VGltZSgpXG5cbiAgLy8gMTAuIFNldCByZXNwb25zZeKAmXMgdGltaW5nIGluZm8gdG8gdGltaW5nSW5mby5cbiAgcmVzcG9uc2UudGltaW5nSW5mbyA9IHRpbWluZ0luZm9cblxuICAvLyAxMS4gTWFyayByZXNvdXJjZSB0aW1pbmcgZm9yIHRpbWluZ0luZm8sIG9yaWdpbmFsVVJMLCBpbml0aWF0b3JUeXBlLFxuICAvLyBnbG9iYWwsIGFuZCBjYWNoZVN0YXRlLlxuICBtYXJrUmVzb3VyY2VUaW1pbmcoXG4gICAgdGltaW5nSW5mbyxcbiAgICBvcmlnaW5hbFVSTCxcbiAgICBpbml0aWF0b3JUeXBlLFxuICAgIGdsb2JhbFRoaXMsXG4gICAgY2FjaGVTdGF0ZVxuICApXG59XG5cbi8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9yZXNvdXJjZS10aW1pbmcvI2Rmbi1tYXJrLXJlc291cmNlLXRpbWluZ1xuZnVuY3Rpb24gbWFya1Jlc291cmNlVGltaW5nICh0aW1pbmdJbmZvLCBvcmlnaW5hbFVSTCwgaW5pdGlhdG9yVHlwZSwgZ2xvYmFsVGhpcywgY2FjaGVTdGF0ZSkge1xuICBpZiAobm9kZU1ham9yID4gMTggfHwgKG5vZGVNYWpvciA9PT0gMTggJiYgbm9kZU1pbm9yID49IDIpKSB7XG4gICAgcGVyZm9ybWFuY2UubWFya1Jlc291cmNlVGltaW5nKHRpbWluZ0luZm8sIG9yaWdpbmFsVVJMLmhyZWYsIGluaXRpYXRvclR5cGUsIGdsb2JhbFRoaXMsIGNhY2hlU3RhdGUpXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2Fib3J0LWZldGNoXG5mdW5jdGlvbiBhYm9ydEZldGNoIChwLCByZXF1ZXN0LCByZXNwb25zZU9iamVjdCwgZXJyb3IpIHtcbiAgLy8gTm90ZTogQWJvcnRTaWduYWwucmVhc29uIHdhcyBhZGRlZCBpbiBub2RlIHYxNy4yLjBcbiAgLy8gd2hpY2ggd291bGQgZ2l2ZSB1cyBhbiB1bmRlZmluZWQgZXJyb3IgdG8gcmVqZWN0IHdpdGguXG4gIC8vIFJlbW92ZSB0aGlzIG9uY2Ugbm9kZSB2MTYgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC5cbiAgaWYgKCFlcnJvcikge1xuICAgIGVycm9yID0gbmV3IERPTUV4Y2VwdGlvbignVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC4nLCAnQWJvcnRFcnJvcicpXG4gIH1cblxuICAvLyAxLiBSZWplY3QgcHJvbWlzZSB3aXRoIGVycm9yLlxuICBwLnJlamVjdChlcnJvcilcblxuICAvLyAyLiBJZiByZXF1ZXN04oCZcyBib2R5IGlzIG5vdCBudWxsIGFuZCBpcyByZWFkYWJsZSwgdGhlbiBjYW5jZWwgcmVxdWVzdOKAmXNcbiAgLy8gYm9keSB3aXRoIGVycm9yLlxuICBpZiAocmVxdWVzdC5ib2R5ICE9IG51bGwgJiYgaXNSZWFkYWJsZShyZXF1ZXN0LmJvZHk/LnN0cmVhbSkpIHtcbiAgICByZXF1ZXN0LmJvZHkuc3RyZWFtLmNhbmNlbChlcnJvcikuY2F0Y2goKGVycikgPT4ge1xuICAgICAgaWYgKGVyci5jb2RlID09PSAnRVJSX0lOVkFMSURfU1RBVEUnKSB7XG4gICAgICAgIC8vIE5vZGUgYnVnP1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIHRocm93IGVyclxuICAgIH0pXG4gIH1cblxuICAvLyAzLiBJZiByZXNwb25zZU9iamVjdCBpcyBudWxsLCB0aGVuIHJldHVybi5cbiAgaWYgKHJlc3BvbnNlT2JqZWN0ID09IG51bGwpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIDQuIExldCByZXNwb25zZSBiZSByZXNwb25zZU9iamVjdOKAmXMgcmVzcG9uc2UuXG4gIGNvbnN0IHJlc3BvbnNlID0gcmVzcG9uc2VPYmplY3Rba1N0YXRlXVxuXG4gIC8vIDUuIElmIHJlc3BvbnNl4oCZcyBib2R5IGlzIG5vdCBudWxsIGFuZCBpcyByZWFkYWJsZSwgdGhlbiBlcnJvciByZXNwb25zZeKAmXNcbiAgLy8gYm9keSB3aXRoIGVycm9yLlxuICBpZiAocmVzcG9uc2UuYm9keSAhPSBudWxsICYmIGlzUmVhZGFibGUocmVzcG9uc2UuYm9keT8uc3RyZWFtKSkge1xuICAgIHJlc3BvbnNlLmJvZHkuc3RyZWFtLmNhbmNlbChlcnJvcikuY2F0Y2goKGVycikgPT4ge1xuICAgICAgaWYgKGVyci5jb2RlID09PSAnRVJSX0lOVkFMSURfU1RBVEUnKSB7XG4gICAgICAgIC8vIE5vZGUgYnVnP1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIHRocm93IGVyclxuICAgIH0pXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2ZldGNoaW5nXG5mdW5jdGlvbiBmZXRjaGluZyAoe1xuICByZXF1ZXN0LFxuICBwcm9jZXNzUmVxdWVzdEJvZHlDaHVua0xlbmd0aCxcbiAgcHJvY2Vzc1JlcXVlc3RFbmRPZkJvZHksXG4gIHByb2Nlc3NSZXNwb25zZSxcbiAgcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5LFxuICBwcm9jZXNzUmVzcG9uc2VDb25zdW1lQm9keSxcbiAgdXNlUGFyYWxsZWxRdWV1ZSA9IGZhbHNlLFxuICBkaXNwYXRjaGVyIC8vIHVuZGljaVxufSkge1xuICAvLyAxLiBMZXQgdGFza0Rlc3RpbmF0aW9uIGJlIG51bGwuXG4gIGxldCB0YXNrRGVzdGluYXRpb24gPSBudWxsXG5cbiAgLy8gMi4gTGV0IGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5IGJlIGZhbHNlLlxuICBsZXQgY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkgPSBmYWxzZVxuXG4gIC8vIDMuIElmIHJlcXVlc3TigJlzIGNsaWVudCBpcyBub24tbnVsbCwgdGhlbjpcbiAgaWYgKHJlcXVlc3QuY2xpZW50ICE9IG51bGwpIHtcbiAgICAvLyAxLiBTZXQgdGFza0Rlc3RpbmF0aW9uIHRvIHJlcXVlc3TigJlzIGNsaWVudOKAmXMgZ2xvYmFsIG9iamVjdC5cbiAgICB0YXNrRGVzdGluYXRpb24gPSByZXF1ZXN0LmNsaWVudC5nbG9iYWxPYmplY3RcblxuICAgIC8vIDIuIFNldCBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSB0byByZXF1ZXN04oCZcyBjbGllbnTigJlzIGNyb3NzLW9yaWdpblxuICAgIC8vIGlzb2xhdGVkIGNhcGFiaWxpdHkuXG4gICAgY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkgPVxuICAgICAgcmVxdWVzdC5jbGllbnQuY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHlcbiAgfVxuXG4gIC8vIDQuIElmIHVzZVBhcmFsbGVsUXVldWUgaXMgdHJ1ZSwgdGhlbiBzZXQgdGFza0Rlc3RpbmF0aW9uIHRvIHRoZSByZXN1bHQgb2ZcbiAgLy8gc3RhcnRpbmcgYSBuZXcgcGFyYWxsZWwgcXVldWUuXG4gIC8vIFRPRE9cblxuICAvLyA1LiBMZXQgdGltaW5nSW5mbyBiZSBhIG5ldyBmZXRjaCB0aW1pbmcgaW5mbyB3aG9zZSBzdGFydCB0aW1lIGFuZFxuICAvLyBwb3N0LXJlZGlyZWN0IHN0YXJ0IHRpbWUgYXJlIHRoZSBjb2Fyc2VuZWQgc2hhcmVkIGN1cnJlbnQgdGltZSBnaXZlblxuICAvLyBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eS5cbiAgY29uc3QgY3VycmVuVGltZSA9IGNvYXJzZW5lZFNoYXJlZEN1cnJlbnRUaW1lKGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5KVxuICBjb25zdCB0aW1pbmdJbmZvID0gY3JlYXRlT3BhcXVlVGltaW5nSW5mbyh7XG4gICAgc3RhcnRUaW1lOiBjdXJyZW5UaW1lXG4gIH0pXG5cbiAgLy8gNi4gTGV0IGZldGNoUGFyYW1zIGJlIGEgbmV3IGZldGNoIHBhcmFtcyB3aG9zZVxuICAvLyByZXF1ZXN0IGlzIHJlcXVlc3QsXG4gIC8vIHRpbWluZyBpbmZvIGlzIHRpbWluZ0luZm8sXG4gIC8vIHByb2Nlc3MgcmVxdWVzdCBib2R5IGNodW5rIGxlbmd0aCBpcyBwcm9jZXNzUmVxdWVzdEJvZHlDaHVua0xlbmd0aCxcbiAgLy8gcHJvY2VzcyByZXF1ZXN0IGVuZC1vZi1ib2R5IGlzIHByb2Nlc3NSZXF1ZXN0RW5kT2ZCb2R5LFxuICAvLyBwcm9jZXNzIHJlc3BvbnNlIGlzIHByb2Nlc3NSZXNwb25zZSxcbiAgLy8gcHJvY2VzcyByZXNwb25zZSBjb25zdW1lIGJvZHkgaXMgcHJvY2Vzc1Jlc3BvbnNlQ29uc3VtZUJvZHksXG4gIC8vIHByb2Nlc3MgcmVzcG9uc2UgZW5kLW9mLWJvZHkgaXMgcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5LFxuICAvLyB0YXNrIGRlc3RpbmF0aW9uIGlzIHRhc2tEZXN0aW5hdGlvbixcbiAgLy8gYW5kIGNyb3NzLW9yaWdpbiBpc29sYXRlZCBjYXBhYmlsaXR5IGlzIGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5LlxuICBjb25zdCBmZXRjaFBhcmFtcyA9IHtcbiAgICBjb250cm9sbGVyOiBuZXcgRmV0Y2goZGlzcGF0Y2hlciksXG4gICAgcmVxdWVzdCxcbiAgICB0aW1pbmdJbmZvLFxuICAgIHByb2Nlc3NSZXF1ZXN0Qm9keUNodW5rTGVuZ3RoLFxuICAgIHByb2Nlc3NSZXF1ZXN0RW5kT2ZCb2R5LFxuICAgIHByb2Nlc3NSZXNwb25zZSxcbiAgICBwcm9jZXNzUmVzcG9uc2VDb25zdW1lQm9keSxcbiAgICBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHksXG4gICAgdGFza0Rlc3RpbmF0aW9uLFxuICAgIGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5XG4gIH1cblxuICAvLyA3LiBJZiByZXF1ZXN04oCZcyBib2R5IGlzIGEgYnl0ZSBzZXF1ZW5jZSwgdGhlbiBzZXQgcmVxdWVzdOKAmXMgYm9keSB0b1xuICAvLyAgICByZXF1ZXN04oCZcyBib2R5IGFzIGEgYm9keS5cbiAgLy8gTk9URTogU2luY2UgZmV0Y2hpbmcgaXMgb25seSBjYWxsZWQgZnJvbSBmZXRjaCwgYm9keSBzaG91bGQgYWxyZWFkeSBiZVxuICAvLyBleHRyYWN0ZWQuXG4gIGFzc2VydCghcmVxdWVzdC5ib2R5IHx8IHJlcXVlc3QuYm9keS5zdHJlYW0pXG5cbiAgLy8gOC4gSWYgcmVxdWVzdOKAmXMgd2luZG93IGlzIFwiY2xpZW50XCIsIHRoZW4gc2V0IHJlcXVlc3TigJlzIHdpbmRvdyB0byByZXF1ZXN04oCZc1xuICAvLyBjbGllbnQsIGlmIHJlcXVlc3TigJlzIGNsaWVudOKAmXMgZ2xvYmFsIG9iamVjdCBpcyBhIFdpbmRvdyBvYmplY3Q7IG90aGVyd2lzZVxuICAvLyBcIm5vLXdpbmRvd1wiLlxuICBpZiAocmVxdWVzdC53aW5kb3cgPT09ICdjbGllbnQnKSB7XG4gICAgLy8gVE9ETzogV2hhdCBpZiByZXF1ZXN0LmNsaWVudCBpcyBudWxsP1xuICAgIHJlcXVlc3Qud2luZG93ID1cbiAgICAgIHJlcXVlc3QuY2xpZW50Py5nbG9iYWxPYmplY3Q/LmNvbnN0cnVjdG9yPy5uYW1lID09PSAnV2luZG93J1xuICAgICAgICA/IHJlcXVlc3QuY2xpZW50XG4gICAgICAgIDogJ25vLXdpbmRvdydcbiAgfVxuXG4gIC8vIDkuIElmIHJlcXVlc3TigJlzIG9yaWdpbiBpcyBcImNsaWVudFwiLCB0aGVuIHNldCByZXF1ZXN04oCZcyBvcmlnaW4gdG8gcmVxdWVzdOKAmXNcbiAgLy8gY2xpZW504oCZcyBvcmlnaW4uXG4gIGlmIChyZXF1ZXN0Lm9yaWdpbiA9PT0gJ2NsaWVudCcpIHtcbiAgICAvLyBUT0RPOiBXaGF0IGlmIHJlcXVlc3QuY2xpZW50IGlzIG51bGw/XG4gICAgcmVxdWVzdC5vcmlnaW4gPSByZXF1ZXN0LmNsaWVudD8ub3JpZ2luXG4gIH1cblxuICAvLyAxMC4gSWYgYWxsIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgdHJ1ZTpcbiAgLy8gVE9ET1xuXG4gIC8vIDExLiBJZiByZXF1ZXN04oCZcyBwb2xpY3kgY29udGFpbmVyIGlzIFwiY2xpZW50XCIsIHRoZW46XG4gIGlmIChyZXF1ZXN0LnBvbGljeUNvbnRhaW5lciA9PT0gJ2NsaWVudCcpIHtcbiAgICAvLyAxLiBJZiByZXF1ZXN04oCZcyBjbGllbnQgaXMgbm9uLW51bGwsIHRoZW4gc2V0IHJlcXVlc3TigJlzIHBvbGljeVxuICAgIC8vIGNvbnRhaW5lciB0byBhIGNsb25lIG9mIHJlcXVlc3TigJlzIGNsaWVudOKAmXMgcG9saWN5IGNvbnRhaW5lci4gW0hUTUxdXG4gICAgaWYgKHJlcXVlc3QuY2xpZW50ICE9IG51bGwpIHtcbiAgICAgIHJlcXVlc3QucG9saWN5Q29udGFpbmVyID0gY2xvbmVQb2xpY3lDb250YWluZXIoXG4gICAgICAgIHJlcXVlc3QuY2xpZW50LnBvbGljeUNvbnRhaW5lclxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyAyLiBPdGhlcndpc2UsIHNldCByZXF1ZXN04oCZcyBwb2xpY3kgY29udGFpbmVyIHRvIGEgbmV3IHBvbGljeVxuICAgICAgLy8gY29udGFpbmVyLlxuICAgICAgcmVxdWVzdC5wb2xpY3lDb250YWluZXIgPSBtYWtlUG9saWN5Q29udGFpbmVyKClcbiAgICB9XG4gIH1cblxuICAvLyAxMi4gSWYgcmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgQWNjZXB0YCwgdGhlbjpcbiAgaWYgKCFyZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdhY2NlcHQnKSkge1xuICAgIC8vIDEuIExldCB2YWx1ZSBiZSBgKi8qYC5cbiAgICBjb25zdCB2YWx1ZSA9ICcqLyonXG5cbiAgICAvLyAyLiBBIHVzZXIgYWdlbnQgc2hvdWxkIHNldCB2YWx1ZSB0byB0aGUgZmlyc3QgbWF0Y2hpbmcgc3RhdGVtZW50LCBpZlxuICAgIC8vIGFueSwgc3dpdGNoaW5nIG9uIHJlcXVlc3TigJlzIGRlc3RpbmF0aW9uOlxuICAgIC8vIFwiZG9jdW1lbnRcIlxuICAgIC8vIFwiZnJhbWVcIlxuICAgIC8vIFwiaWZyYW1lXCJcbiAgICAvLyBgdGV4dC9odG1sLGFwcGxpY2F0aW9uL3hodG1sK3htbCxhcHBsaWNhdGlvbi94bWw7cT0wLjksKi8qO3E9MC44YFxuICAgIC8vIFwiaW1hZ2VcIlxuICAgIC8vIGBpbWFnZS9wbmcsaW1hZ2Uvc3ZnK3htbCxpbWFnZS8qO3E9MC44LCovKjtxPTAuNWBcbiAgICAvLyBcInN0eWxlXCJcbiAgICAvLyBgdGV4dC9jc3MsKi8qO3E9MC4xYFxuICAgIC8vIFRPRE9cblxuICAgIC8vIDMuIEFwcGVuZCBgQWNjZXB0YC92YWx1ZSB0byByZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cbiAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnYWNjZXB0JywgdmFsdWUpXG4gIH1cblxuICAvLyAxMy4gSWYgcmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgQWNjZXB0LUxhbmd1YWdlYCwgdGhlblxuICAvLyB1c2VyIGFnZW50cyBzaG91bGQgYXBwZW5kIGBBY2NlcHQtTGFuZ3VhZ2VgL2FuIGFwcHJvcHJpYXRlIHZhbHVlIHRvXG4gIC8vIHJlcXVlc3TigJlzIGhlYWRlciBsaXN0LlxuICBpZiAoIXJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2FjY2VwdC1sYW5ndWFnZScpKSB7XG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ2FjY2VwdC1sYW5ndWFnZScsICcqJylcbiAgfVxuXG4gIC8vIDE0LiBJZiByZXF1ZXN04oCZcyBwcmlvcml0eSBpcyBudWxsLCB0aGVuIHVzZSByZXF1ZXN04oCZcyBpbml0aWF0b3IgYW5kXG4gIC8vIGRlc3RpbmF0aW9uIGFwcHJvcHJpYXRlbHkgaW4gc2V0dGluZyByZXF1ZXN04oCZcyBwcmlvcml0eSB0byBhXG4gIC8vIHVzZXItYWdlbnQtZGVmaW5lZCBvYmplY3QuXG4gIGlmIChyZXF1ZXN0LnByaW9yaXR5ID09PSBudWxsKSB7XG4gICAgLy8gVE9ET1xuICB9XG5cbiAgLy8gMTUuIElmIHJlcXVlc3QgaXMgYSBzdWJyZXNvdXJjZSByZXF1ZXN0LCB0aGVuOlxuICBpZiAoc3VicmVzb3VyY2VTZXQuaGFzKHJlcXVlc3QuZGVzdGluYXRpb24pKSB7XG4gICAgLy8gVE9ET1xuICB9XG5cbiAgLy8gMTYuIFJ1biBtYWluIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLlxuICBtYWluRmV0Y2goZmV0Y2hQYXJhbXMpXG4gICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnRlcm1pbmF0ZShlcnIpXG4gICAgfSlcblxuICAvLyAxNy4gUmV0dXJuIGZldGNoUGFyYW0ncyBjb250cm9sbGVyXG4gIHJldHVybiBmZXRjaFBhcmFtcy5jb250cm9sbGVyXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LW1haW4tZmV0Y2hcbmFzeW5jIGZ1bmN0aW9uIG1haW5GZXRjaCAoZmV0Y2hQYXJhbXMsIHJlY3Vyc2l2ZSA9IGZhbHNlKSB7XG4gIC8vIDEuIExldCByZXF1ZXN0IGJlIGZldGNoUGFyYW1z4oCZcyByZXF1ZXN0LlxuICBjb25zdCByZXF1ZXN0ID0gZmV0Y2hQYXJhbXMucmVxdWVzdFxuXG4gIC8vIDIuIExldCByZXNwb25zZSBiZSBudWxsLlxuICBsZXQgcmVzcG9uc2UgPSBudWxsXG5cbiAgLy8gMy4gSWYgcmVxdWVzdOKAmXMgbG9jYWwtVVJMcy1vbmx5IGZsYWcgaXMgc2V0IGFuZCByZXF1ZXN04oCZcyBjdXJyZW50IFVSTCBpc1xuICAvLyBub3QgbG9jYWwsIHRoZW4gc2V0IHJlc3BvbnNlIHRvIGEgbmV0d29yayBlcnJvci5cbiAgaWYgKHJlcXVlc3QubG9jYWxVUkxzT25seSAmJiAhdXJsSXNMb2NhbChyZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KSkpIHtcbiAgICByZXNwb25zZSA9IG1ha2VOZXR3b3JrRXJyb3IoJ2xvY2FsIFVSTHMgb25seScpXG4gIH1cblxuICAvLyA0LiBSdW4gcmVwb3J0IENvbnRlbnQgU2VjdXJpdHkgUG9saWN5IHZpb2xhdGlvbnMgZm9yIHJlcXVlc3QuXG4gIC8vIFRPRE9cblxuICAvLyA1LiBVcGdyYWRlIHJlcXVlc3QgdG8gYSBwb3RlbnRpYWxseSB0cnVzdHdvcnRoeSBVUkwsIGlmIGFwcHJvcHJpYXRlLlxuICB0cnlVcGdyYWRlUmVxdWVzdFRvQVBvdGVudGlhbGx5VHJ1c3R3b3J0aHlVUkwocmVxdWVzdClcblxuICAvLyA2LiBJZiBzaG91bGQgcmVxdWVzdCBiZSBibG9ja2VkIGR1ZSB0byBhIGJhZCBwb3J0LCBzaG91bGQgZmV0Y2hpbmcgcmVxdWVzdFxuICAvLyBiZSBibG9ja2VkIGFzIG1peGVkIGNvbnRlbnQsIG9yIHNob3VsZCByZXF1ZXN0IGJlIGJsb2NrZWQgYnkgQ29udGVudFxuICAvLyBTZWN1cml0eSBQb2xpY3kgcmV0dXJucyBibG9ja2VkLCB0aGVuIHNldCByZXNwb25zZSB0byBhIG5ldHdvcmsgZXJyb3IuXG4gIGlmIChyZXF1ZXN0QmFkUG9ydChyZXF1ZXN0KSA9PT0gJ2Jsb2NrZWQnKSB7XG4gICAgcmVzcG9uc2UgPSBtYWtlTmV0d29ya0Vycm9yKCdiYWQgcG9ydCcpXG4gIH1cbiAgLy8gVE9ETzogc2hvdWxkIGZldGNoaW5nIHJlcXVlc3QgYmUgYmxvY2tlZCBhcyBtaXhlZCBjb250ZW50P1xuICAvLyBUT0RPOiBzaG91bGQgcmVxdWVzdCBiZSBibG9ja2VkIGJ5IENvbnRlbnQgU2VjdXJpdHkgUG9saWN5P1xuXG4gIC8vIDcuIElmIHJlcXVlc3TigJlzIHJlZmVycmVyIHBvbGljeSBpcyB0aGUgZW1wdHkgc3RyaW5nLCB0aGVuIHNldCByZXF1ZXN04oCZc1xuICAvLyByZWZlcnJlciBwb2xpY3kgdG8gcmVxdWVzdOKAmXMgcG9saWN5IGNvbnRhaW5lcuKAmXMgcmVmZXJyZXIgcG9saWN5LlxuICBpZiAocmVxdWVzdC5yZWZlcnJlclBvbGljeSA9PT0gJycpIHtcbiAgICByZXF1ZXN0LnJlZmVycmVyUG9saWN5ID0gcmVxdWVzdC5wb2xpY3lDb250YWluZXIucmVmZXJyZXJQb2xpY3lcbiAgfVxuXG4gIC8vIDguIElmIHJlcXVlc3TigJlzIHJlZmVycmVyIGlzIG5vdCBcIm5vLXJlZmVycmVyXCIsIHRoZW4gc2V0IHJlcXVlc3TigJlzXG4gIC8vIHJlZmVycmVyIHRvIHRoZSByZXN1bHQgb2YgaW52b2tpbmcgZGV0ZXJtaW5lIHJlcXVlc3TigJlzIHJlZmVycmVyLlxuICBpZiAocmVxdWVzdC5yZWZlcnJlciAhPT0gJ25vLXJlZmVycmVyJykge1xuICAgIHJlcXVlc3QucmVmZXJyZXIgPSBkZXRlcm1pbmVSZXF1ZXN0c1JlZmVycmVyKHJlcXVlc3QpXG4gIH1cblxuICAvLyA5LiBTZXQgcmVxdWVzdOKAmXMgY3VycmVudCBVUkzigJlzIHNjaGVtZSB0byBcImh0dHBzXCIgaWYgYWxsIG9mIHRoZSBmb2xsb3dpbmdcbiAgLy8gY29uZGl0aW9ucyBhcmUgdHJ1ZTpcbiAgLy8gLSByZXF1ZXN04oCZcyBjdXJyZW50IFVSTOKAmXMgc2NoZW1lIGlzIFwiaHR0cFwiXG4gIC8vIC0gcmVxdWVzdOKAmXMgY3VycmVudCBVUkzigJlzIGhvc3QgaXMgYSBkb21haW5cbiAgLy8gLSBNYXRjaGluZyByZXF1ZXN04oCZcyBjdXJyZW50IFVSTOKAmXMgaG9zdCBwZXIgS25vd24gSFNUUyBIb3N0IERvbWFpbiBOYW1lXG4gIC8vICAgTWF0Y2hpbmcgcmVzdWx0cyBpbiBlaXRoZXIgYSBzdXBlcmRvbWFpbiBtYXRjaCB3aXRoIGFuIGFzc2VydGVkXG4gIC8vICAgaW5jbHVkZVN1YkRvbWFpbnMgZGlyZWN0aXZlIG9yIGEgY29uZ3J1ZW50IG1hdGNoICh3aXRoIG9yIHdpdGhvdXQgYW5cbiAgLy8gICBhc3NlcnRlZCBpbmNsdWRlU3ViRG9tYWlucyBkaXJlY3RpdmUpLiBbSFNUU11cbiAgLy8gVE9ET1xuXG4gIC8vIDEwLiBJZiByZWN1cnNpdmUgaXMgZmFsc2UsIHRoZW4gcnVuIHRoZSByZW1haW5pbmcgc3RlcHMgaW4gcGFyYWxsZWwuXG4gIC8vIFRPRE9cblxuICAvLyAxMS4gSWYgcmVzcG9uc2UgaXMgbnVsbCwgdGhlbiBzZXQgcmVzcG9uc2UgdG8gdGhlIHJlc3VsdCBvZiBydW5uaW5nXG4gIC8vIHRoZSBzdGVwcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBmaXJzdCBtYXRjaGluZyBzdGF0ZW1lbnQ6XG4gIGlmIChyZXNwb25zZSA9PT0gbnVsbCkge1xuICAgIHJlc3BvbnNlID0gYXdhaXQgKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRVUkwgPSByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KVxuXG4gICAgICBpZiAoXG4gICAgICAgIC8vIC0gcmVxdWVzdOKAmXMgY3VycmVudCBVUkzigJlzIG9yaWdpbiBpcyBzYW1lIG9yaWdpbiB3aXRoIHJlcXVlc3TigJlzIG9yaWdpbixcbiAgICAgICAgLy8gICBhbmQgcmVxdWVzdOKAmXMgcmVzcG9uc2UgdGFpbnRpbmcgaXMgXCJiYXNpY1wiXG4gICAgICAgIChzYW1lT3JpZ2luKGN1cnJlbnRVUkwsIHJlcXVlc3QudXJsKSAmJiByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdiYXNpYycpIHx8XG4gICAgICAgIC8vIHJlcXVlc3TigJlzIGN1cnJlbnQgVVJM4oCZcyBzY2hlbWUgaXMgXCJkYXRhXCJcbiAgICAgICAgKGN1cnJlbnRVUkwucHJvdG9jb2wgPT09ICdkYXRhOicpIHx8XG4gICAgICAgIC8vIC0gcmVxdWVzdOKAmXMgbW9kZSBpcyBcIm5hdmlnYXRlXCIgb3IgXCJ3ZWJzb2NrZXRcIlxuICAgICAgICAocmVxdWVzdC5tb2RlID09PSAnbmF2aWdhdGUnIHx8IHJlcXVlc3QubW9kZSA9PT0gJ3dlYnNvY2tldCcpXG4gICAgICApIHtcbiAgICAgICAgLy8gMS4gU2V0IHJlcXVlc3TigJlzIHJlc3BvbnNlIHRhaW50aW5nIHRvIFwiYmFzaWNcIi5cbiAgICAgICAgcmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID0gJ2Jhc2ljJ1xuXG4gICAgICAgIC8vIDIuIFJldHVybiB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgc2NoZW1lIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLlxuICAgICAgICByZXR1cm4gYXdhaXQgc2NoZW1lRmV0Y2goZmV0Y2hQYXJhbXMpXG4gICAgICB9XG5cbiAgICAgIC8vIHJlcXVlc3TigJlzIG1vZGUgaXMgXCJzYW1lLW9yaWdpblwiXG4gICAgICBpZiAocmVxdWVzdC5tb2RlID09PSAnc2FtZS1vcmlnaW4nKSB7XG4gICAgICAgIC8vIDEuIFJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdyZXF1ZXN0IG1vZGUgY2Fubm90IGJlIFwic2FtZS1vcmlnaW5cIicpXG4gICAgICB9XG5cbiAgICAgIC8vIHJlcXVlc3TigJlzIG1vZGUgaXMgXCJuby1jb3JzXCJcbiAgICAgIGlmIChyZXF1ZXN0Lm1vZGUgPT09ICduby1jb3JzJykge1xuICAgICAgICAvLyAxLiBJZiByZXF1ZXN04oCZcyByZWRpcmVjdCBtb2RlIGlzIG5vdCBcImZvbGxvd1wiLCB0aGVuIHJldHVybiBhIG5ldHdvcmtcbiAgICAgICAgLy8gZXJyb3IuXG4gICAgICAgIGlmIChyZXF1ZXN0LnJlZGlyZWN0ICE9PSAnZm9sbG93Jykge1xuICAgICAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKFxuICAgICAgICAgICAgJ3JlZGlyZWN0IG1vZGUgY2Fubm90IGJlIFwiZm9sbG93XCIgZm9yIFwibm8tY29yc1wiIHJlcXVlc3QnXG4gICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gMi4gU2V0IHJlcXVlc3TigJlzIHJlc3BvbnNlIHRhaW50aW5nIHRvIFwib3BhcXVlXCIuXG4gICAgICAgIHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9ICdvcGFxdWUnXG5cbiAgICAgICAgLy8gMy4gUmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZyBzY2hlbWUgZmV0Y2ggZ2l2ZW4gZmV0Y2hQYXJhbXMuXG4gICAgICAgIHJldHVybiBhd2FpdCBzY2hlbWVGZXRjaChmZXRjaFBhcmFtcylcbiAgICAgIH1cblxuICAgICAgLy8gcmVxdWVzdOKAmXMgY3VycmVudCBVUkzigJlzIHNjaGVtZSBpcyBub3QgYW4gSFRUUChTKSBzY2hlbWVcbiAgICAgIGlmICghdXJsSXNIdHRwSHR0cHNTY2hlbWUocmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdCkpKSB7XG4gICAgICAgIC8vIFJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdVUkwgc2NoZW1lIG11c3QgYmUgYSBIVFRQKFMpIHNjaGVtZScpXG4gICAgICB9XG5cbiAgICAgIC8vIC0gcmVxdWVzdOKAmXMgdXNlLUNPUlMtcHJlZmxpZ2h0IGZsYWcgaXMgc2V0XG4gICAgICAvLyAtIHJlcXVlc3TigJlzIHVuc2FmZS1yZXF1ZXN0IGZsYWcgaXMgc2V0IGFuZCBlaXRoZXIgcmVxdWVzdOKAmXMgbWV0aG9kIGlzXG4gICAgICAvLyAgIG5vdCBhIENPUlMtc2FmZWxpc3RlZCBtZXRob2Qgb3IgQ09SUy11bnNhZmUgcmVxdWVzdC1oZWFkZXIgbmFtZXMgd2l0aFxuICAgICAgLy8gICByZXF1ZXN04oCZcyBoZWFkZXIgbGlzdCBpcyBub3QgZW1wdHlcbiAgICAgIC8vICAgIDEuIFNldCByZXF1ZXN04oCZcyByZXNwb25zZSB0YWludGluZyB0byBcImNvcnNcIi5cbiAgICAgIC8vICAgIDIuIExldCBjb3JzV2l0aFByZWZsaWdodFJlc3BvbnNlIGJlIHRoZSByZXN1bHQgb2YgcnVubmluZyBIVFRQIGZldGNoXG4gICAgICAvLyAgICBnaXZlbiBmZXRjaFBhcmFtcyBhbmQgdHJ1ZS5cbiAgICAgIC8vICAgIDMuIElmIGNvcnNXaXRoUHJlZmxpZ2h0UmVzcG9uc2UgaXMgYSBuZXR3b3JrIGVycm9yLCB0aGVuIGNsZWFyIGNhY2hlXG4gICAgICAvLyAgICBlbnRyaWVzIHVzaW5nIHJlcXVlc3QuXG4gICAgICAvLyAgICA0LiBSZXR1cm4gY29yc1dpdGhQcmVmbGlnaHRSZXNwb25zZS5cbiAgICAgIC8vIFRPRE9cblxuICAgICAgLy8gT3RoZXJ3aXNlXG4gICAgICAvLyAgICAxLiBTZXQgcmVxdWVzdOKAmXMgcmVzcG9uc2UgdGFpbnRpbmcgdG8gXCJjb3JzXCIuXG4gICAgICByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPSAnY29ycydcblxuICAgICAgLy8gICAgMi4gUmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZyBIVFRQIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLlxuICAgICAgcmV0dXJuIGF3YWl0IGh0dHBGZXRjaChmZXRjaFBhcmFtcylcbiAgICB9KSgpXG4gIH1cblxuICAvLyAxMi4gSWYgcmVjdXJzaXZlIGlzIHRydWUsIHRoZW4gcmV0dXJuIHJlc3BvbnNlLlxuICBpZiAocmVjdXJzaXZlKSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlXG4gIH1cblxuICAvLyAxMy4gSWYgcmVzcG9uc2UgaXMgbm90IGEgbmV0d29yayBlcnJvciBhbmQgcmVzcG9uc2UgaXMgbm90IGEgZmlsdGVyZWRcbiAgLy8gcmVzcG9uc2UsIHRoZW46XG4gIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IDAgJiYgIXJlc3BvbnNlLmludGVybmFsUmVzcG9uc2UpIHtcbiAgICAvLyBJZiByZXF1ZXN04oCZcyByZXNwb25zZSB0YWludGluZyBpcyBcImNvcnNcIiwgdGhlbjpcbiAgICBpZiAocmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnY29ycycpIHtcbiAgICAgIC8vIDEuIExldCBoZWFkZXJOYW1lcyBiZSB0aGUgcmVzdWx0IG9mIGV4dHJhY3RpbmcgaGVhZGVyIGxpc3QgdmFsdWVzXG4gICAgICAvLyBnaXZlbiBgQWNjZXNzLUNvbnRyb2wtRXhwb3NlLUhlYWRlcnNgIGFuZCByZXNwb25zZeKAmXMgaGVhZGVyIGxpc3QuXG4gICAgICAvLyBUT0RPXG4gICAgICAvLyAyLiBJZiByZXF1ZXN04oCZcyBjcmVkZW50aWFscyBtb2RlIGlzIG5vdCBcImluY2x1ZGVcIiBhbmQgaGVhZGVyTmFtZXNcbiAgICAgIC8vIGNvbnRhaW5zIGAqYCwgdGhlbiBzZXQgcmVzcG9uc2XigJlzIENPUlMtZXhwb3NlZCBoZWFkZXItbmFtZSBsaXN0IHRvXG4gICAgICAvLyBhbGwgdW5pcXVlIGhlYWRlciBuYW1lcyBpbiByZXNwb25zZeKAmXMgaGVhZGVyIGxpc3QuXG4gICAgICAvLyBUT0RPXG4gICAgICAvLyAzLiBPdGhlcndpc2UsIGlmIGhlYWRlck5hbWVzIGlzIG5vdCBudWxsIG9yIGZhaWx1cmUsIHRoZW4gc2V0XG4gICAgICAvLyByZXNwb25zZeKAmXMgQ09SUy1leHBvc2VkIGhlYWRlci1uYW1lIGxpc3QgdG8gaGVhZGVyTmFtZXMuXG4gICAgICAvLyBUT0RPXG4gICAgfVxuXG4gICAgLy8gU2V0IHJlc3BvbnNlIHRvIHRoZSBmb2xsb3dpbmcgZmlsdGVyZWQgcmVzcG9uc2Ugd2l0aCByZXNwb25zZSBhcyBpdHNcbiAgICAvLyBpbnRlcm5hbCByZXNwb25zZSwgZGVwZW5kaW5nIG9uIHJlcXVlc3TigJlzIHJlc3BvbnNlIHRhaW50aW5nOlxuICAgIGlmIChyZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdiYXNpYycpIHtcbiAgICAgIHJlc3BvbnNlID0gZmlsdGVyUmVzcG9uc2UocmVzcG9uc2UsICdiYXNpYycpXG4gICAgfSBlbHNlIGlmIChyZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdjb3JzJykge1xuICAgICAgcmVzcG9uc2UgPSBmaWx0ZXJSZXNwb25zZShyZXNwb25zZSwgJ2NvcnMnKVxuICAgIH0gZWxzZSBpZiAocmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnb3BhcXVlJykge1xuICAgICAgcmVzcG9uc2UgPSBmaWx0ZXJSZXNwb25zZShyZXNwb25zZSwgJ29wYXF1ZScpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydChmYWxzZSlcbiAgICB9XG4gIH1cblxuICAvLyAxNC4gTGV0IGludGVybmFsUmVzcG9uc2UgYmUgcmVzcG9uc2UsIGlmIHJlc3BvbnNlIGlzIGEgbmV0d29yayBlcnJvcixcbiAgLy8gYW5kIHJlc3BvbnNl4oCZcyBpbnRlcm5hbCByZXNwb25zZSBvdGhlcndpc2UuXG4gIGxldCBpbnRlcm5hbFJlc3BvbnNlID1cbiAgICByZXNwb25zZS5zdGF0dXMgPT09IDAgPyByZXNwb25zZSA6IHJlc3BvbnNlLmludGVybmFsUmVzcG9uc2VcblxuICAvLyAxNS4gSWYgaW50ZXJuYWxSZXNwb25zZeKAmXMgVVJMIGxpc3QgaXMgZW1wdHksIHRoZW4gc2V0IGl0IHRvIGEgY2xvbmUgb2ZcbiAgLy8gcmVxdWVzdOKAmXMgVVJMIGxpc3QuXG4gIGlmIChpbnRlcm5hbFJlc3BvbnNlLnVybExpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgaW50ZXJuYWxSZXNwb25zZS51cmxMaXN0LnB1c2goLi4ucmVxdWVzdC51cmxMaXN0KVxuICB9XG5cbiAgLy8gMTYuIElmIHJlcXVlc3TigJlzIHRpbWluZyBhbGxvdyBmYWlsZWQgZmxhZyBpcyB1bnNldCwgdGhlbiBzZXRcbiAgLy8gaW50ZXJuYWxSZXNwb25zZeKAmXMgdGltaW5nIGFsbG93IHBhc3NlZCBmbGFnLlxuICBpZiAoIXJlcXVlc3QudGltaW5nQWxsb3dGYWlsZWQpIHtcbiAgICByZXNwb25zZS50aW1pbmdBbGxvd1Bhc3NlZCA9IHRydWVcbiAgfVxuXG4gIC8vIDE3LiBJZiByZXNwb25zZSBpcyBub3QgYSBuZXR3b3JrIGVycm9yIGFuZCBhbnkgb2YgdGhlIGZvbGxvd2luZyByZXR1cm5zXG4gIC8vIGJsb2NrZWRcbiAgLy8gLSBzaG91bGQgaW50ZXJuYWxSZXNwb25zZSB0byByZXF1ZXN0IGJlIGJsb2NrZWQgYXMgbWl4ZWQgY29udGVudFxuICAvLyAtIHNob3VsZCBpbnRlcm5hbFJlc3BvbnNlIHRvIHJlcXVlc3QgYmUgYmxvY2tlZCBieSBDb250ZW50IFNlY3VyaXR5IFBvbGljeVxuICAvLyAtIHNob3VsZCBpbnRlcm5hbFJlc3BvbnNlIHRvIHJlcXVlc3QgYmUgYmxvY2tlZCBkdWUgdG8gaXRzIE1JTUUgdHlwZVxuICAvLyAtIHNob3VsZCBpbnRlcm5hbFJlc3BvbnNlIHRvIHJlcXVlc3QgYmUgYmxvY2tlZCBkdWUgdG8gbm9zbmlmZlxuICAvLyBUT0RPXG5cbiAgLy8gMTguIElmIHJlc3BvbnNl4oCZcyB0eXBlIGlzIFwib3BhcXVlXCIsIGludGVybmFsUmVzcG9uc2XigJlzIHN0YXR1cyBpcyAyMDYsXG4gIC8vIGludGVybmFsUmVzcG9uc2XigJlzIHJhbmdlLXJlcXVlc3RlZCBmbGFnIGlzIHNldCwgYW5kIHJlcXVlc3TigJlzIGhlYWRlclxuICAvLyBsaXN0IGRvZXMgbm90IGNvbnRhaW4gYFJhbmdlYCwgdGhlbiBzZXQgcmVzcG9uc2UgYW5kIGludGVybmFsUmVzcG9uc2VcbiAgLy8gdG8gYSBuZXR3b3JrIGVycm9yLlxuICBpZiAoXG4gICAgcmVzcG9uc2UudHlwZSA9PT0gJ29wYXF1ZScgJiZcbiAgICBpbnRlcm5hbFJlc3BvbnNlLnN0YXR1cyA9PT0gMjA2ICYmXG4gICAgaW50ZXJuYWxSZXNwb25zZS5yYW5nZVJlcXVlc3RlZCAmJlxuICAgICFyZXF1ZXN0LmhlYWRlcnMuY29udGFpbnMoJ3JhbmdlJylcbiAgKSB7XG4gICAgcmVzcG9uc2UgPSBpbnRlcm5hbFJlc3BvbnNlID0gbWFrZU5ldHdvcmtFcnJvcigpXG4gIH1cblxuICAvLyAxOS4gSWYgcmVzcG9uc2UgaXMgbm90IGEgbmV0d29yayBlcnJvciBhbmQgZWl0aGVyIHJlcXVlc3TigJlzIG1ldGhvZCBpc1xuICAvLyBgSEVBRGAgb3IgYENPTk5FQ1RgLCBvciBpbnRlcm5hbFJlc3BvbnNl4oCZcyBzdGF0dXMgaXMgYSBudWxsIGJvZHkgc3RhdHVzLFxuICAvLyBzZXQgaW50ZXJuYWxSZXNwb25zZeKAmXMgYm9keSB0byBudWxsIGFuZCBkaXNyZWdhcmQgYW55IGVucXVldWluZyB0b3dhcmRcbiAgLy8gaXQgKGlmIGFueSkuXG4gIGlmIChcbiAgICByZXNwb25zZS5zdGF0dXMgIT09IDAgJiZcbiAgICAocmVxdWVzdC5tZXRob2QgPT09ICdIRUFEJyB8fFxuICAgICAgcmVxdWVzdC5tZXRob2QgPT09ICdDT05ORUNUJyB8fFxuICAgICAgbnVsbEJvZHlTdGF0dXMuaW5jbHVkZXMoaW50ZXJuYWxSZXNwb25zZS5zdGF0dXMpKVxuICApIHtcbiAgICBpbnRlcm5hbFJlc3BvbnNlLmJvZHkgPSBudWxsXG4gICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5kdW1wID0gdHJ1ZVxuICB9XG5cbiAgLy8gMjAuIElmIHJlcXVlc3TigJlzIGludGVncml0eSBtZXRhZGF0YSBpcyBub3QgdGhlIGVtcHR5IHN0cmluZywgdGhlbjpcbiAgaWYgKHJlcXVlc3QuaW50ZWdyaXR5KSB7XG4gICAgLy8gMS4gTGV0IHByb2Nlc3NCb2R5RXJyb3IgYmUgdGhpcyBzdGVwOiBydW4gZmV0Y2ggZmluYWxlIGdpdmVuIGZldGNoUGFyYW1zXG4gICAgLy8gYW5kIGEgbmV0d29yayBlcnJvci5cbiAgICBjb25zdCBwcm9jZXNzQm9keUVycm9yID0gKHJlYXNvbikgPT5cbiAgICAgIGZldGNoRmluYWxlKGZldGNoUGFyYW1zLCBtYWtlTmV0d29ya0Vycm9yKHJlYXNvbikpXG5cbiAgICAvLyAyLiBJZiByZXF1ZXN04oCZcyByZXNwb25zZSB0YWludGluZyBpcyBcIm9wYXF1ZVwiLCBvciByZXNwb25zZeKAmXMgYm9keSBpcyBudWxsLFxuICAgIC8vIHRoZW4gcnVuIHByb2Nlc3NCb2R5RXJyb3IgYW5kIGFib3J0IHRoZXNlIHN0ZXBzLlxuICAgIGlmIChyZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdvcGFxdWUnIHx8IHJlc3BvbnNlLmJvZHkgPT0gbnVsbCkge1xuICAgICAgcHJvY2Vzc0JvZHlFcnJvcihyZXNwb25zZS5lcnJvcilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIDMuIExldCBwcm9jZXNzQm9keSBnaXZlbiBieXRlcyBiZSB0aGVzZSBzdGVwczpcbiAgICBjb25zdCBwcm9jZXNzQm9keSA9IChieXRlcykgPT4ge1xuICAgICAgLy8gMS4gSWYgYnl0ZXMgZG8gbm90IG1hdGNoIHJlcXVlc3TigJlzIGludGVncml0eSBtZXRhZGF0YSxcbiAgICAgIC8vIHRoZW4gcnVuIHByb2Nlc3NCb2R5RXJyb3IgYW5kIGFib3J0IHRoZXNlIHN0ZXBzLiBbU1JJXVxuICAgICAgaWYgKCFieXRlc01hdGNoKGJ5dGVzLCByZXF1ZXN0LmludGVncml0eSkpIHtcbiAgICAgICAgcHJvY2Vzc0JvZHlFcnJvcignaW50ZWdyaXR5IG1pc21hdGNoJylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIFNldCByZXNwb25zZeKAmXMgYm9keSB0byBieXRlcyBhcyBhIGJvZHkuXG4gICAgICByZXNwb25zZS5ib2R5ID0gc2FmZWx5RXh0cmFjdEJvZHkoYnl0ZXMpWzBdXG5cbiAgICAgIC8vIDMuIFJ1biBmZXRjaCBmaW5hbGUgZ2l2ZW4gZmV0Y2hQYXJhbXMgYW5kIHJlc3BvbnNlLlxuICAgICAgZmV0Y2hGaW5hbGUoZmV0Y2hQYXJhbXMsIHJlc3BvbnNlKVxuICAgIH1cblxuICAgIC8vIDQuIEZ1bGx5IHJlYWQgcmVzcG9uc2XigJlzIGJvZHkgZ2l2ZW4gcHJvY2Vzc0JvZHkgYW5kIHByb2Nlc3NCb2R5RXJyb3IuXG4gICAgYXdhaXQgZnVsbHlSZWFkQm9keShyZXNwb25zZS5ib2R5LCBwcm9jZXNzQm9keSwgcHJvY2Vzc0JvZHlFcnJvcilcbiAgfSBlbHNlIHtcbiAgICAvLyAyMS4gT3RoZXJ3aXNlLCBydW4gZmV0Y2ggZmluYWxlIGdpdmVuIGZldGNoUGFyYW1zIGFuZCByZXNwb25zZS5cbiAgICBmZXRjaEZpbmFsZShmZXRjaFBhcmFtcywgcmVzcG9uc2UpXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtc2NoZW1lLWZldGNoXG4vLyBnaXZlbiBhIGZldGNoIHBhcmFtcyBmZXRjaFBhcmFtc1xuZnVuY3Rpb24gc2NoZW1lRmV0Y2ggKGZldGNoUGFyYW1zKSB7XG4gIC8vIE5vdGU6IHNpbmNlIHRoZSBjb25uZWN0aW9uIGlzIGRlc3Ryb3llZCBvbiByZWRpcmVjdCwgd2hpY2ggc2V0cyBmZXRjaFBhcmFtcyB0byBhXG4gIC8vIGNhbmNlbGxlZCBzdGF0ZSwgd2UgZG8gbm90IHdhbnQgdGhpcyBjb25kaXRpb24gdG8gdHJpZ2dlciAqdW5sZXNzKiB0aGVyZSBoYXZlIGJlZW5cbiAgLy8gbm8gcmVkaXJlY3RzLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzE3NzZcbiAgLy8gMS4gSWYgZmV0Y2hQYXJhbXMgaXMgY2FuY2VsZWQsIHRoZW4gcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSBuZXR3b3JrIGVycm9yIGZvciBmZXRjaFBhcmFtcy5cbiAgaWYgKGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSAmJiBmZXRjaFBhcmFtcy5yZXF1ZXN0LnJlZGlyZWN0Q291bnQgPT09IDApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VBcHByb3ByaWF0ZU5ldHdvcmtFcnJvcihmZXRjaFBhcmFtcykpXG4gIH1cblxuICAvLyAyLiBMZXQgcmVxdWVzdCBiZSBmZXRjaFBhcmFtc+KAmXMgcmVxdWVzdC5cbiAgY29uc3QgeyByZXF1ZXN0IH0gPSBmZXRjaFBhcmFtc1xuXG4gIGNvbnN0IHsgcHJvdG9jb2w6IHNjaGVtZSB9ID0gcmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdClcblxuICAvLyAzLiBTd2l0Y2ggb24gcmVxdWVzdOKAmXMgY3VycmVudCBVUkzigJlzIHNjaGVtZSBhbmQgcnVuIHRoZSBhc3NvY2lhdGVkIHN0ZXBzOlxuICBzd2l0Y2ggKHNjaGVtZSkge1xuICAgIGNhc2UgJ2Fib3V0Oic6IHtcbiAgICAgIC8vIElmIHJlcXVlc3TigJlzIGN1cnJlbnQgVVJM4oCZcyBwYXRoIGlzIHRoZSBzdHJpbmcgXCJibGFua1wiLCB0aGVuIHJldHVybiBhIG5ldyByZXNwb25zZVxuICAgICAgLy8gd2hvc2Ugc3RhdHVzIG1lc3NhZ2UgaXMgYE9LYCwgaGVhZGVyIGxpc3QgaXMgwqsgKGBDb250ZW50LVR5cGVgLCBgdGV4dC9odG1sO2NoYXJzZXQ9dXRmLThgKSDCuyxcbiAgICAgIC8vIGFuZCBib2R5IGlzIHRoZSBlbXB0eSBieXRlIHNlcXVlbmNlIGFzIGEgYm9keS5cblxuICAgICAgLy8gT3RoZXJ3aXNlLCByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKCdhYm91dCBzY2hlbWUgaXMgbm90IHN1cHBvcnRlZCcpKVxuICAgIH1cbiAgICBjYXNlICdibG9iOic6IHtcbiAgICAgIGlmICghcmVzb2x2ZU9iamVjdFVSTCkge1xuICAgICAgICByZXNvbHZlT2JqZWN0VVJMID0gcmVxdWlyZSgnYnVmZmVyJykucmVzb2x2ZU9iamVjdFVSTFxuICAgICAgfVxuXG4gICAgICAvLyAxLiBMZXQgYmxvYlVSTEVudHJ5IGJlIHJlcXVlc3TigJlzIGN1cnJlbnQgVVJM4oCZcyBibG9iIFVSTCBlbnRyeS5cbiAgICAgIGNvbnN0IGJsb2JVUkxFbnRyeSA9IHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpXG5cbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS93ZWItcGxhdGZvcm0tdGVzdHMvd3B0L2Jsb2IvN2IwZWJhY2NjNjJiNTY2YTE5NjUzOTZlNWJlN2JiMmJjMDZmODQxZi9GaWxlQVBJL3VybC9yZXNvdXJjZXMvZmV0Y2gtdGVzdHMuanMjTDUyLUw1NlxuICAgICAgLy8gQnVmZmVyLnJlc29sdmVPYmplY3RVUkwgZG9lcyBub3QgaWdub3JlIFVSTCBxdWVyaWVzLlxuICAgICAgaWYgKGJsb2JVUkxFbnRyeS5zZWFyY2gubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignTmV0d29ya0Vycm9yIHdoZW4gYXR0ZW1wdGluZyB0byBmZXRjaCByZXNvdXJjZS4nKSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgYmxvYlVSTEVudHJ5T2JqZWN0ID0gcmVzb2x2ZU9iamVjdFVSTChibG9iVVJMRW50cnkudG9TdHJpbmcoKSlcblxuICAgICAgLy8gMi4gSWYgcmVxdWVzdOKAmXMgbWV0aG9kIGlzIG5vdCBgR0VUYCwgYmxvYlVSTEVudHJ5IGlzIG51bGwsIG9yIGJsb2JVUkxFbnRyeeKAmXNcbiAgICAgIC8vICAgIG9iamVjdCBpcyBub3QgYSBCbG9iIG9iamVjdCwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICAgICAgaWYgKHJlcXVlc3QubWV0aG9kICE9PSAnR0VUJyB8fCAhaXNCbG9iTGlrZShibG9iVVJMRW50cnlPYmplY3QpKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignaW52YWxpZCBtZXRob2QnKSlcbiAgICAgIH1cblxuICAgICAgLy8gMy4gTGV0IGJvZHlXaXRoVHlwZSBiZSB0aGUgcmVzdWx0IG9mIHNhZmVseSBleHRyYWN0aW5nIGJsb2JVUkxFbnRyeeKAmXMgb2JqZWN0LlxuICAgICAgY29uc3QgYm9keVdpdGhUeXBlID0gc2FmZWx5RXh0cmFjdEJvZHkoYmxvYlVSTEVudHJ5T2JqZWN0KVxuXG4gICAgICAvLyA0LiBMZXQgYm9keSBiZSBib2R5V2l0aFR5cGXigJlzIGJvZHkuXG4gICAgICBjb25zdCBib2R5ID0gYm9keVdpdGhUeXBlWzBdXG5cbiAgICAgIC8vIDUuIExldCBsZW5ndGggYmUgYm9keeKAmXMgbGVuZ3RoLCBzZXJpYWxpemVkIGFuZCBpc29tb3JwaGljIGVuY29kZWQuXG4gICAgICBjb25zdCBsZW5ndGggPSBpc29tb3JwaGljRW5jb2RlKGAke2JvZHkubGVuZ3RofWApXG5cbiAgICAgIC8vIDYuIExldCB0eXBlIGJlIGJvZHlXaXRoVHlwZeKAmXMgdHlwZSBpZiBpdCBpcyBub24tbnVsbDsgb3RoZXJ3aXNlIHRoZSBlbXB0eSBieXRlIHNlcXVlbmNlLlxuICAgICAgY29uc3QgdHlwZSA9IGJvZHlXaXRoVHlwZVsxXSA/PyAnJ1xuXG4gICAgICAvLyA3LiBSZXR1cm4gYSBuZXcgcmVzcG9uc2Ugd2hvc2Ugc3RhdHVzIG1lc3NhZ2UgaXMgYE9LYCwgaGVhZGVyIGxpc3QgaXNcbiAgICAgIC8vICAgIMKrIChgQ29udGVudC1MZW5ndGhgLCBsZW5ndGgpLCAoYENvbnRlbnQtVHlwZWAsIHR5cGUpIMK7LCBhbmQgYm9keSBpcyBib2R5LlxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBtYWtlUmVzcG9uc2Uoe1xuICAgICAgICBzdGF0dXNUZXh0OiAnT0snLFxuICAgICAgICBoZWFkZXJzTGlzdDogW1xuICAgICAgICAgIFsnY29udGVudC1sZW5ndGgnLCB7IG5hbWU6ICdDb250ZW50LUxlbmd0aCcsIHZhbHVlOiBsZW5ndGggfV0sXG4gICAgICAgICAgWydjb250ZW50LXR5cGUnLCB7IG5hbWU6ICdDb250ZW50LVR5cGUnLCB2YWx1ZTogdHlwZSB9XVxuICAgICAgICBdXG4gICAgICB9KVxuXG4gICAgICByZXNwb25zZS5ib2R5ID0gYm9keVxuXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3BvbnNlKVxuICAgIH1cbiAgICBjYXNlICdkYXRhOic6IHtcbiAgICAgIC8vIDEuIExldCBkYXRhVVJMU3RydWN0IGJlIHRoZSByZXN1bHQgb2YgcnVubmluZyB0aGVcbiAgICAgIC8vICAgIGRhdGE6IFVSTCBwcm9jZXNzb3Igb24gcmVxdWVzdOKAmXMgY3VycmVudCBVUkwuXG4gICAgICBjb25zdCBjdXJyZW50VVJMID0gcmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdClcbiAgICAgIGNvbnN0IGRhdGFVUkxTdHJ1Y3QgPSBkYXRhVVJMUHJvY2Vzc29yKGN1cnJlbnRVUkwpXG5cbiAgICAgIC8vIDIuIElmIGRhdGFVUkxTdHJ1Y3QgaXMgZmFpbHVyZSwgdGhlbiByZXR1cm4gYVxuICAgICAgLy8gICAgbmV0d29yayBlcnJvci5cbiAgICAgIGlmIChkYXRhVVJMU3RydWN0ID09PSAnZmFpbHVyZScpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKCdmYWlsZWQgdG8gZmV0Y2ggdGhlIGRhdGEgVVJMJykpXG4gICAgICB9XG5cbiAgICAgIC8vIDMuIExldCBtaW1lVHlwZSBiZSBkYXRhVVJMU3RydWN04oCZcyBNSU1FIHR5cGUsIHNlcmlhbGl6ZWQuXG4gICAgICBjb25zdCBtaW1lVHlwZSA9IHNlcmlhbGl6ZUFNaW1lVHlwZShkYXRhVVJMU3RydWN0Lm1pbWVUeXBlKVxuXG4gICAgICAvLyA0LiBSZXR1cm4gYSByZXNwb25zZSB3aG9zZSBzdGF0dXMgbWVzc2FnZSBpcyBgT0tgLFxuICAgICAgLy8gICAgaGVhZGVyIGxpc3QgaXMgwqsgKGBDb250ZW50LVR5cGVgLCBtaW1lVHlwZSkgwrssXG4gICAgICAvLyAgICBhbmQgYm9keSBpcyBkYXRhVVJMU3RydWN04oCZcyBib2R5IGFzIGEgYm9keS5cbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZVJlc3BvbnNlKHtcbiAgICAgICAgc3RhdHVzVGV4dDogJ09LJyxcbiAgICAgICAgaGVhZGVyc0xpc3Q6IFtcbiAgICAgICAgICBbJ2NvbnRlbnQtdHlwZScsIHsgbmFtZTogJ0NvbnRlbnQtVHlwZScsIHZhbHVlOiBtaW1lVHlwZSB9XVxuICAgICAgICBdLFxuICAgICAgICBib2R5OiBzYWZlbHlFeHRyYWN0Qm9keShkYXRhVVJMU3RydWN0LmJvZHkpWzBdXG4gICAgICB9KSlcbiAgICB9XG4gICAgY2FzZSAnZmlsZTonOiB7XG4gICAgICAvLyBGb3Igbm93LCB1bmZvcnR1bmF0ZSBhcyBpdCBpcywgZmlsZSBVUkxzIGFyZSBsZWZ0IGFzIGFuIGV4ZXJjaXNlIGZvciB0aGUgcmVhZGVyLlxuICAgICAgLy8gV2hlbiBpbiBkb3VidCwgcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignbm90IGltcGxlbWVudGVkLi4uIHlldC4uLicpKVxuICAgIH1cbiAgICBjYXNlICdodHRwOic6XG4gICAgY2FzZSAnaHR0cHM6Jzoge1xuICAgICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZyBIVFRQIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLlxuXG4gICAgICByZXR1cm4gaHR0cEZldGNoKGZldGNoUGFyYW1zKVxuICAgICAgICAuY2F0Y2goKGVycikgPT4gbWFrZU5ldHdvcmtFcnJvcihlcnIpKVxuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoJ3Vua25vd24gc2NoZW1lJykpXG4gICAgfVxuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmaW5hbGl6ZS1yZXNwb25zZVxuZnVuY3Rpb24gZmluYWxpemVSZXNwb25zZSAoZmV0Y2hQYXJhbXMsIHJlc3BvbnNlKSB7XG4gIC8vIDEuIFNldCBmZXRjaFBhcmFtc+KAmXMgcmVxdWVzdOKAmXMgZG9uZSBmbGFnLlxuICBmZXRjaFBhcmFtcy5yZXF1ZXN0LmRvbmUgPSB0cnVlXG5cbiAgLy8gMiwgSWYgZmV0Y2hQYXJhbXPigJlzIHByb2Nlc3MgcmVzcG9uc2UgZG9uZSBpcyBub3QgbnVsbCwgdGhlbiBxdWV1ZSBhIGZldGNoXG4gIC8vIHRhc2sgdG8gcnVuIGZldGNoUGFyYW1z4oCZcyBwcm9jZXNzIHJlc3BvbnNlIGRvbmUgZ2l2ZW4gcmVzcG9uc2UsIHdpdGhcbiAgLy8gZmV0Y2hQYXJhbXPigJlzIHRhc2sgZGVzdGluYXRpb24uXG4gIGlmIChmZXRjaFBhcmFtcy5wcm9jZXNzUmVzcG9uc2VEb25lICE9IG51bGwpIHtcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBmZXRjaFBhcmFtcy5wcm9jZXNzUmVzcG9uc2VEb25lKHJlc3BvbnNlKSlcbiAgfVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZmV0Y2gtZmluYWxlXG5mdW5jdGlvbiBmZXRjaEZpbmFsZSAoZmV0Y2hQYXJhbXMsIHJlc3BvbnNlKSB7XG4gIC8vIDEuIElmIHJlc3BvbnNlIGlzIGEgbmV0d29yayBlcnJvciwgdGhlbjpcbiAgaWYgKHJlc3BvbnNlLnR5cGUgPT09ICdlcnJvcicpIHtcbiAgICAvLyAxLiBTZXQgcmVzcG9uc2XigJlzIFVSTCBsaXN0IHRvIMKrIGZldGNoUGFyYW1z4oCZcyByZXF1ZXN04oCZcyBVUkwgbGlzdFswXSDCuy5cbiAgICByZXNwb25zZS51cmxMaXN0ID0gW2ZldGNoUGFyYW1zLnJlcXVlc3QudXJsTGlzdFswXV1cblxuICAgIC8vIDIuIFNldCByZXNwb25zZeKAmXMgdGltaW5nIGluZm8gdG8gdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhbiBvcGFxdWUgdGltaW5nXG4gICAgLy8gaW5mbyBmb3IgZmV0Y2hQYXJhbXPigJlzIHRpbWluZyBpbmZvLlxuICAgIHJlc3BvbnNlLnRpbWluZ0luZm8gPSBjcmVhdGVPcGFxdWVUaW1pbmdJbmZvKHtcbiAgICAgIHN0YXJ0VGltZTogZmV0Y2hQYXJhbXMudGltaW5nSW5mby5zdGFydFRpbWVcbiAgICB9KVxuICB9XG5cbiAgLy8gMi4gTGV0IHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSBiZSB0aGUgZm9sbG93aW5nIHN0ZXBzOlxuICBjb25zdCBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHkgPSAoKSA9PiB7XG4gICAgLy8gMS4gU2V0IGZldGNoUGFyYW1z4oCZcyByZXF1ZXN04oCZcyBkb25lIGZsYWcuXG4gICAgZmV0Y2hQYXJhbXMucmVxdWVzdC5kb25lID0gdHJ1ZVxuXG4gICAgLy8gSWYgZmV0Y2hQYXJhbXPigJlzIHByb2Nlc3MgcmVzcG9uc2UgZW5kLW9mLWJvZHkgaXMgbm90IG51bGwsXG4gICAgLy8gdGhlbiBxdWV1ZSBhIGZldGNoIHRhc2sgdG8gcnVuIGZldGNoUGFyYW1z4oCZcyBwcm9jZXNzIHJlc3BvbnNlXG4gICAgLy8gZW5kLW9mLWJvZHkgZ2l2ZW4gcmVzcG9uc2Ugd2l0aCBmZXRjaFBhcmFtc+KAmXMgdGFzayBkZXN0aW5hdGlvbi5cbiAgICBpZiAoZmV0Y2hQYXJhbXMucHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5ICE9IG51bGwpIHtcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZUVuZE9mQm9keShyZXNwb25zZSkpXG4gICAgfVxuICB9XG5cbiAgLy8gMy4gSWYgZmV0Y2hQYXJhbXPigJlzIHByb2Nlc3MgcmVzcG9uc2UgaXMgbm9uLW51bGwsIHRoZW4gcXVldWUgYSBmZXRjaCB0YXNrXG4gIC8vIHRvIHJ1biBmZXRjaFBhcmFtc+KAmXMgcHJvY2VzcyByZXNwb25zZSBnaXZlbiByZXNwb25zZSwgd2l0aCBmZXRjaFBhcmFtc+KAmXNcbiAgLy8gdGFzayBkZXN0aW5hdGlvbi5cbiAgaWYgKGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZSAhPSBudWxsKSB7XG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gZmV0Y2hQYXJhbXMucHJvY2Vzc1Jlc3BvbnNlKHJlc3BvbnNlKSlcbiAgfVxuXG4gIC8vIDQuIElmIHJlc3BvbnNl4oCZcyBib2R5IGlzIG51bGwsIHRoZW4gcnVuIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keS5cbiAgaWYgKHJlc3BvbnNlLmJvZHkgPT0gbnVsbCkge1xuICAgIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSgpXG4gIH0gZWxzZSB7XG4gIC8vIDUuIE90aGVyd2lzZTpcblxuICAgIC8vIDEuIExldCB0cmFuc2Zvcm1TdHJlYW0gYmUgYSBuZXcgYSBUcmFuc2Zvcm1TdHJlYW0uXG5cbiAgICAvLyAyLiBMZXQgaWRlbnRpdHlUcmFuc2Zvcm1BbGdvcml0aG0gYmUgYW4gYWxnb3JpdGhtIHdoaWNoLCBnaXZlbiBjaHVuayxcbiAgICAvLyBlbnF1ZXVlcyBjaHVuayBpbiB0cmFuc2Zvcm1TdHJlYW0uXG4gICAgY29uc3QgaWRlbnRpdHlUcmFuc2Zvcm1BbGdvcml0aG0gPSAoY2h1bmssIGNvbnRyb2xsZXIpID0+IHtcbiAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShjaHVuaylcbiAgICB9XG5cbiAgICAvLyAzLiBTZXQgdXAgdHJhbnNmb3JtU3RyZWFtIHdpdGggdHJhbnNmb3JtQWxnb3JpdGhtIHNldCB0byBpZGVudGl0eVRyYW5zZm9ybUFsZ29yaXRobVxuICAgIC8vIGFuZCBmbHVzaEFsZ29yaXRobSBzZXQgdG8gcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5LlxuICAgIGNvbnN0IHRyYW5zZm9ybVN0cmVhbSA9IG5ldyBUcmFuc2Zvcm1TdHJlYW0oe1xuICAgICAgc3RhcnQgKCkge30sXG4gICAgICB0cmFuc2Zvcm06IGlkZW50aXR5VHJhbnNmb3JtQWxnb3JpdGhtLFxuICAgICAgZmx1c2g6IHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keVxuICAgIH0sIHtcbiAgICAgIHNpemUgKCkge1xuICAgICAgICByZXR1cm4gMVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIHNpemUgKCkge1xuICAgICAgICByZXR1cm4gMVxuICAgICAgfVxuICAgIH0pXG5cbiAgICAvLyA0LiBTZXQgcmVzcG9uc2XigJlzIGJvZHkgdG8gdGhlIHJlc3VsdCBvZiBwaXBpbmcgcmVzcG9uc2XigJlzIGJvZHkgdGhyb3VnaCB0cmFuc2Zvcm1TdHJlYW0uXG4gICAgcmVzcG9uc2UuYm9keSA9IHsgc3RyZWFtOiByZXNwb25zZS5ib2R5LnN0cmVhbS5waXBlVGhyb3VnaCh0cmFuc2Zvcm1TdHJlYW0pIH1cbiAgfVxuXG4gIC8vIDYuIElmIGZldGNoUGFyYW1z4oCZcyBwcm9jZXNzIHJlc3BvbnNlIGNvbnN1bWUgYm9keSBpcyBub24tbnVsbCwgdGhlbjpcbiAgaWYgKGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZUNvbnN1bWVCb2R5ICE9IG51bGwpIHtcbiAgICAvLyAxLiBMZXQgcHJvY2Vzc0JvZHkgZ2l2ZW4gbnVsbE9yQnl0ZXMgYmUgdGhpcyBzdGVwOiBydW4gZmV0Y2hQYXJhbXPigJlzXG4gICAgLy8gcHJvY2VzcyByZXNwb25zZSBjb25zdW1lIGJvZHkgZ2l2ZW4gcmVzcG9uc2UgYW5kIG51bGxPckJ5dGVzLlxuICAgIGNvbnN0IHByb2Nlc3NCb2R5ID0gKG51bGxPckJ5dGVzKSA9PiBmZXRjaFBhcmFtcy5wcm9jZXNzUmVzcG9uc2VDb25zdW1lQm9keShyZXNwb25zZSwgbnVsbE9yQnl0ZXMpXG5cbiAgICAvLyAyLiBMZXQgcHJvY2Vzc0JvZHlFcnJvciBiZSB0aGlzIHN0ZXA6IHJ1biBmZXRjaFBhcmFtc+KAmXMgcHJvY2Vzc1xuICAgIC8vIHJlc3BvbnNlIGNvbnN1bWUgYm9keSBnaXZlbiByZXNwb25zZSBhbmQgZmFpbHVyZS5cbiAgICBjb25zdCBwcm9jZXNzQm9keUVycm9yID0gKGZhaWx1cmUpID0+IGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZUNvbnN1bWVCb2R5KHJlc3BvbnNlLCBmYWlsdXJlKVxuXG4gICAgLy8gMy4gSWYgcmVzcG9uc2XigJlzIGJvZHkgaXMgbnVsbCwgdGhlbiBxdWV1ZSBhIGZldGNoIHRhc2sgdG8gcnVuIHByb2Nlc3NCb2R5XG4gICAgLy8gZ2l2ZW4gbnVsbCwgd2l0aCBmZXRjaFBhcmFtc+KAmXMgdGFzayBkZXN0aW5hdGlvbi5cbiAgICBpZiAocmVzcG9uc2UuYm9keSA9PSBudWxsKSB7XG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBwcm9jZXNzQm9keShudWxsKSlcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gNC4gT3RoZXJ3aXNlLCBmdWxseSByZWFkIHJlc3BvbnNl4oCZcyBib2R5IGdpdmVuIHByb2Nlc3NCb2R5LCBwcm9jZXNzQm9keUVycm9yLFxuICAgICAgLy8gYW5kIGZldGNoUGFyYW1z4oCZcyB0YXNrIGRlc3RpbmF0aW9uLlxuICAgICAgcmV0dXJuIGZ1bGx5UmVhZEJvZHkocmVzcG9uc2UuYm9keSwgcHJvY2Vzc0JvZHksIHByb2Nlc3NCb2R5RXJyb3IpXG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNodHRwLWZldGNoXG5hc3luYyBmdW5jdGlvbiBodHRwRmV0Y2ggKGZldGNoUGFyYW1zKSB7XG4gIC8vIDEuIExldCByZXF1ZXN0IGJlIGZldGNoUGFyYW1z4oCZcyByZXF1ZXN0LlxuICBjb25zdCByZXF1ZXN0ID0gZmV0Y2hQYXJhbXMucmVxdWVzdFxuXG4gIC8vIDIuIExldCByZXNwb25zZSBiZSBudWxsLlxuICBsZXQgcmVzcG9uc2UgPSBudWxsXG5cbiAgLy8gMy4gTGV0IGFjdHVhbFJlc3BvbnNlIGJlIG51bGwuXG4gIGxldCBhY3R1YWxSZXNwb25zZSA9IG51bGxcblxuICAvLyA0LiBMZXQgdGltaW5nSW5mbyBiZSBmZXRjaFBhcmFtc+KAmXMgdGltaW5nIGluZm8uXG4gIGNvbnN0IHRpbWluZ0luZm8gPSBmZXRjaFBhcmFtcy50aW1pbmdJbmZvXG5cbiAgLy8gNS4gSWYgcmVxdWVzdOKAmXMgc2VydmljZS13b3JrZXJzIG1vZGUgaXMgXCJhbGxcIiwgdGhlbjpcbiAgaWYgKHJlcXVlc3Quc2VydmljZVdvcmtlcnMgPT09ICdhbGwnKSB7XG4gICAgLy8gVE9ET1xuICB9XG5cbiAgLy8gNi4gSWYgcmVzcG9uc2UgaXMgbnVsbCwgdGhlbjpcbiAgaWYgKHJlc3BvbnNlID09PSBudWxsKSB7XG4gICAgLy8gMS4gSWYgbWFrZUNPUlNQcmVmbGlnaHQgaXMgdHJ1ZSBhbmQgb25lIG9mIHRoZXNlIGNvbmRpdGlvbnMgaXMgdHJ1ZTpcbiAgICAvLyBUT0RPXG5cbiAgICAvLyAyLiBJZiByZXF1ZXN04oCZcyByZWRpcmVjdCBtb2RlIGlzIFwiZm9sbG93XCIsIHRoZW4gc2V0IHJlcXVlc3TigJlzXG4gICAgLy8gc2VydmljZS13b3JrZXJzIG1vZGUgdG8gXCJub25lXCIuXG4gICAgaWYgKHJlcXVlc3QucmVkaXJlY3QgPT09ICdmb2xsb3cnKSB7XG4gICAgICByZXF1ZXN0LnNlcnZpY2VXb3JrZXJzID0gJ25vbmUnXG4gICAgfVxuXG4gICAgLy8gMy4gU2V0IHJlc3BvbnNlIGFuZCBhY3R1YWxSZXNwb25zZSB0byB0aGUgcmVzdWx0IG9mIHJ1bm5pbmdcbiAgICAvLyBIVFRQLW5ldHdvcmstb3ItY2FjaGUgZmV0Y2ggZ2l2ZW4gZmV0Y2hQYXJhbXMuXG4gICAgYWN0dWFsUmVzcG9uc2UgPSByZXNwb25zZSA9IGF3YWl0IGh0dHBOZXR3b3JrT3JDYWNoZUZldGNoKGZldGNoUGFyYW1zKVxuXG4gICAgLy8gNC4gSWYgcmVxdWVzdOKAmXMgcmVzcG9uc2UgdGFpbnRpbmcgaXMgXCJjb3JzXCIgYW5kIGEgQ09SUyBjaGVja1xuICAgIC8vIGZvciByZXF1ZXN0IGFuZCByZXNwb25zZSByZXR1cm5zIGZhaWx1cmUsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgICBpZiAoXG4gICAgICByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdjb3JzJyAmJlxuICAgICAgY29yc0NoZWNrKHJlcXVlc3QsIHJlc3BvbnNlKSA9PT0gJ2ZhaWx1cmUnXG4gICAgKSB7XG4gICAgICByZXR1cm4gbWFrZU5ldHdvcmtFcnJvcignY29ycyBmYWlsdXJlJylcbiAgICB9XG5cbiAgICAvLyA1LiBJZiB0aGUgVEFPIGNoZWNrIGZvciByZXF1ZXN0IGFuZCByZXNwb25zZSByZXR1cm5zIGZhaWx1cmUsIHRoZW4gc2V0XG4gICAgLy8gcmVxdWVzdOKAmXMgdGltaW5nIGFsbG93IGZhaWxlZCBmbGFnLlxuICAgIGlmIChUQU9DaGVjayhyZXF1ZXN0LCByZXNwb25zZSkgPT09ICdmYWlsdXJlJykge1xuICAgICAgcmVxdWVzdC50aW1pbmdBbGxvd0ZhaWxlZCA9IHRydWVcbiAgICB9XG4gIH1cblxuICAvLyA3LiBJZiBlaXRoZXIgcmVxdWVzdOKAmXMgcmVzcG9uc2UgdGFpbnRpbmcgb3IgcmVzcG9uc2XigJlzIHR5cGVcbiAgLy8gaXMgXCJvcGFxdWVcIiwgYW5kIHRoZSBjcm9zcy1vcmlnaW4gcmVzb3VyY2UgcG9saWN5IGNoZWNrIHdpdGhcbiAgLy8gcmVxdWVzdOKAmXMgb3JpZ2luLCByZXF1ZXN04oCZcyBjbGllbnQsIHJlcXVlc3TigJlzIGRlc3RpbmF0aW9uLFxuICAvLyBhbmQgYWN0dWFsUmVzcG9uc2UgcmV0dXJucyBibG9ja2VkLCB0aGVuIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gIGlmIChcbiAgICAocmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnb3BhcXVlJyB8fCByZXNwb25zZS50eXBlID09PSAnb3BhcXVlJykgJiZcbiAgICBjcm9zc09yaWdpblJlc291cmNlUG9saWN5Q2hlY2soXG4gICAgICByZXF1ZXN0Lm9yaWdpbixcbiAgICAgIHJlcXVlc3QuY2xpZW50LFxuICAgICAgcmVxdWVzdC5kZXN0aW5hdGlvbixcbiAgICAgIGFjdHVhbFJlc3BvbnNlXG4gICAgKSA9PT0gJ2Jsb2NrZWQnXG4gICkge1xuICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdibG9ja2VkJylcbiAgfVxuXG4gIC8vIDguIElmIGFjdHVhbFJlc3BvbnNl4oCZcyBzdGF0dXMgaXMgYSByZWRpcmVjdCBzdGF0dXMsIHRoZW46XG4gIGlmIChyZWRpcmVjdFN0YXR1c1NldC5oYXMoYWN0dWFsUmVzcG9uc2Uuc3RhdHVzKSkge1xuICAgIC8vIDEuIElmIGFjdHVhbFJlc3BvbnNl4oCZcyBzdGF0dXMgaXMgbm90IDMwMywgcmVxdWVzdOKAmXMgYm9keSBpcyBub3QgbnVsbCxcbiAgICAvLyBhbmQgdGhlIGNvbm5lY3Rpb24gdXNlcyBIVFRQLzIsIHRoZW4gdXNlciBhZ2VudHMgbWF5LCBhbmQgYXJlIGV2ZW5cbiAgICAvLyBlbmNvdXJhZ2VkIHRvLCB0cmFuc21pdCBhbiBSU1RfU1RSRUFNIGZyYW1lLlxuICAgIC8vIFNlZSwgaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy9mZXRjaC9pc3N1ZXMvMTI4OFxuICAgIGlmIChyZXF1ZXN0LnJlZGlyZWN0ICE9PSAnbWFudWFsJykge1xuICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb25uZWN0aW9uLmRlc3Ryb3koKVxuICAgIH1cblxuICAgIC8vIDIuIFN3aXRjaCBvbiByZXF1ZXN04oCZcyByZWRpcmVjdCBtb2RlOlxuICAgIGlmIChyZXF1ZXN0LnJlZGlyZWN0ID09PSAnZXJyb3InKSB7XG4gICAgICAvLyBTZXQgcmVzcG9uc2UgdG8gYSBuZXR3b3JrIGVycm9yLlxuICAgICAgcmVzcG9uc2UgPSBtYWtlTmV0d29ya0Vycm9yKCd1bmV4cGVjdGVkIHJlZGlyZWN0JylcbiAgICB9IGVsc2UgaWYgKHJlcXVlc3QucmVkaXJlY3QgPT09ICdtYW51YWwnKSB7XG4gICAgICAvLyBTZXQgcmVzcG9uc2UgdG8gYW4gb3BhcXVlLXJlZGlyZWN0IGZpbHRlcmVkIHJlc3BvbnNlIHdob3NlIGludGVybmFsXG4gICAgICAvLyByZXNwb25zZSBpcyBhY3R1YWxSZXNwb25zZS5cbiAgICAgIC8vIE5PVEUoc3BlYyk6IE9uIHRoZSB3ZWIgdGhpcyB3b3VsZCByZXR1cm4gYW4gYG9wYXF1ZXJlZGlyZWN0YCByZXNwb25zZSxcbiAgICAgIC8vIGJ1dCB0aGF0IGRvZXNuJ3QgbWFrZSBzZW5zZSBzZXJ2ZXIgc2lkZS5cbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMTE5My5cbiAgICAgIHJlc3BvbnNlID0gYWN0dWFsUmVzcG9uc2VcbiAgICB9IGVsc2UgaWYgKHJlcXVlc3QucmVkaXJlY3QgPT09ICdmb2xsb3cnKSB7XG4gICAgICAvLyBTZXQgcmVzcG9uc2UgdG8gdGhlIHJlc3VsdCBvZiBydW5uaW5nIEhUVFAtcmVkaXJlY3QgZmV0Y2ggZ2l2ZW5cbiAgICAgIC8vIGZldGNoUGFyYW1zIGFuZCByZXNwb25zZS5cbiAgICAgIHJlc3BvbnNlID0gYXdhaXQgaHR0cFJlZGlyZWN0RmV0Y2goZmV0Y2hQYXJhbXMsIHJlc3BvbnNlKVxuICAgIH0gZWxzZSB7XG4gICAgICBhc3NlcnQoZmFsc2UpXG4gICAgfVxuICB9XG5cbiAgLy8gOS4gU2V0IHJlc3BvbnNl4oCZcyB0aW1pbmcgaW5mbyB0byB0aW1pbmdJbmZvLlxuICByZXNwb25zZS50aW1pbmdJbmZvID0gdGltaW5nSW5mb1xuXG4gIC8vIDEwLiBSZXR1cm4gcmVzcG9uc2UuXG4gIHJldHVybiByZXNwb25zZVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC1yZWRpcmVjdC1mZXRjaFxuZnVuY3Rpb24gaHR0cFJlZGlyZWN0RmV0Y2ggKGZldGNoUGFyYW1zLCByZXNwb25zZSkge1xuICAvLyAxLiBMZXQgcmVxdWVzdCBiZSBmZXRjaFBhcmFtc+KAmXMgcmVxdWVzdC5cbiAgY29uc3QgcmVxdWVzdCA9IGZldGNoUGFyYW1zLnJlcXVlc3RcblxuICAvLyAyLiBMZXQgYWN0dWFsUmVzcG9uc2UgYmUgcmVzcG9uc2UsIGlmIHJlc3BvbnNlIGlzIG5vdCBhIGZpbHRlcmVkIHJlc3BvbnNlLFxuICAvLyBhbmQgcmVzcG9uc2XigJlzIGludGVybmFsIHJlc3BvbnNlIG90aGVyd2lzZS5cbiAgY29uc3QgYWN0dWFsUmVzcG9uc2UgPSByZXNwb25zZS5pbnRlcm5hbFJlc3BvbnNlXG4gICAgPyByZXNwb25zZS5pbnRlcm5hbFJlc3BvbnNlXG4gICAgOiByZXNwb25zZVxuXG4gIC8vIDMuIExldCBsb2NhdGlvblVSTCBiZSBhY3R1YWxSZXNwb25zZeKAmXMgbG9jYXRpb24gVVJMIGdpdmVuIHJlcXVlc3TigJlzIGN1cnJlbnRcbiAgLy8gVVJM4oCZcyBmcmFnbWVudC5cbiAgbGV0IGxvY2F0aW9uVVJMXG5cbiAgdHJ5IHtcbiAgICBsb2NhdGlvblVSTCA9IHJlc3BvbnNlTG9jYXRpb25VUkwoXG4gICAgICBhY3R1YWxSZXNwb25zZSxcbiAgICAgIHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpLmhhc2hcbiAgICApXG5cbiAgICAvLyA0LiBJZiBsb2NhdGlvblVSTCBpcyBudWxsLCB0aGVuIHJldHVybiByZXNwb25zZS5cbiAgICBpZiAobG9jYXRpb25VUkwgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyA1LiBJZiBsb2NhdGlvblVSTCBpcyBmYWlsdXJlLCB0aGVuIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKGVycikpXG4gIH1cblxuICAvLyA2LiBJZiBsb2NhdGlvblVSTOKAmXMgc2NoZW1lIGlzIG5vdCBhbiBIVFRQKFMpIHNjaGVtZSwgdGhlbiByZXR1cm4gYSBuZXR3b3JrXG4gIC8vIGVycm9yLlxuICBpZiAoIXVybElzSHR0cEh0dHBzU2NoZW1lKGxvY2F0aW9uVVJMKSkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignVVJMIHNjaGVtZSBtdXN0IGJlIGEgSFRUUChTKSBzY2hlbWUnKSlcbiAgfVxuXG4gIC8vIDcuIElmIHJlcXVlc3TigJlzIHJlZGlyZWN0IGNvdW50IGlzIDIwLCB0aGVuIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gIGlmIChyZXF1ZXN0LnJlZGlyZWN0Q291bnQgPT09IDIwKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKCdyZWRpcmVjdCBjb3VudCBleGNlZWRlZCcpKVxuICB9XG5cbiAgLy8gOC4gSW5jcmVhc2UgcmVxdWVzdOKAmXMgcmVkaXJlY3QgY291bnQgYnkgMS5cbiAgcmVxdWVzdC5yZWRpcmVjdENvdW50ICs9IDFcblxuICAvLyA5LiBJZiByZXF1ZXN04oCZcyBtb2RlIGlzIFwiY29yc1wiLCBsb2NhdGlvblVSTCBpbmNsdWRlcyBjcmVkZW50aWFscywgYW5kXG4gIC8vIHJlcXVlc3TigJlzIG9yaWdpbiBpcyBub3Qgc2FtZSBvcmlnaW4gd2l0aCBsb2NhdGlvblVSTOKAmXMgb3JpZ2luLCB0aGVuIHJldHVyblxuICAvLyAgYSBuZXR3b3JrIGVycm9yLlxuICBpZiAoXG4gICAgcmVxdWVzdC5tb2RlID09PSAnY29ycycgJiZcbiAgICAobG9jYXRpb25VUkwudXNlcm5hbWUgfHwgbG9jYXRpb25VUkwucGFzc3dvcmQpICYmXG4gICAgIXNhbWVPcmlnaW4ocmVxdWVzdCwgbG9jYXRpb25VUkwpXG4gICkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignY3Jvc3Mgb3JpZ2luIG5vdCBhbGxvd2VkIGZvciByZXF1ZXN0IG1vZGUgXCJjb3JzXCInKSlcbiAgfVxuXG4gIC8vIDEwLiBJZiByZXF1ZXN04oCZcyByZXNwb25zZSB0YWludGluZyBpcyBcImNvcnNcIiBhbmQgbG9jYXRpb25VUkwgaW5jbHVkZXNcbiAgLy8gY3JlZGVudGlhbHMsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgaWYgKFxuICAgIHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ2NvcnMnICYmXG4gICAgKGxvY2F0aW9uVVJMLnVzZXJuYW1lIHx8IGxvY2F0aW9uVVJMLnBhc3N3b3JkKVxuICApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoXG4gICAgICAnVVJMIGNhbm5vdCBjb250YWluIGNyZWRlbnRpYWxzIGZvciByZXF1ZXN0IG1vZGUgXCJjb3JzXCInXG4gICAgKSlcbiAgfVxuXG4gIC8vIDExLiBJZiBhY3R1YWxSZXNwb25zZeKAmXMgc3RhdHVzIGlzIG5vdCAzMDMsIHJlcXVlc3TigJlzIGJvZHkgaXMgbm9uLW51bGwsXG4gIC8vIGFuZCByZXF1ZXN04oCZcyBib2R54oCZcyBzb3VyY2UgaXMgbnVsbCwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICBpZiAoXG4gICAgYWN0dWFsUmVzcG9uc2Uuc3RhdHVzICE9PSAzMDMgJiZcbiAgICByZXF1ZXN0LmJvZHkgIT0gbnVsbCAmJlxuICAgIHJlcXVlc3QuYm9keS5zb3VyY2UgPT0gbnVsbFxuICApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoKSlcbiAgfVxuXG4gIC8vIDEyLiBJZiBvbmUgb2YgdGhlIGZvbGxvd2luZyBpcyB0cnVlXG4gIC8vIC0gYWN0dWFsUmVzcG9uc2XigJlzIHN0YXR1cyBpcyAzMDEgb3IgMzAyIGFuZCByZXF1ZXN04oCZcyBtZXRob2QgaXMgYFBPU1RgXG4gIC8vIC0gYWN0dWFsUmVzcG9uc2XigJlzIHN0YXR1cyBpcyAzMDMgYW5kIHJlcXVlc3TigJlzIG1ldGhvZCBpcyBub3QgYEdFVGAgb3IgYEhFQURgXG4gIGlmIChcbiAgICAoWzMwMSwgMzAyXS5pbmNsdWRlcyhhY3R1YWxSZXNwb25zZS5zdGF0dXMpICYmIHJlcXVlc3QubWV0aG9kID09PSAnUE9TVCcpIHx8XG4gICAgKGFjdHVhbFJlc3BvbnNlLnN0YXR1cyA9PT0gMzAzICYmXG4gICAgICAhR0VUX09SX0hFQUQuaW5jbHVkZXMocmVxdWVzdC5tZXRob2QpKVxuICApIHtcbiAgICAvLyB0aGVuOlxuICAgIC8vIDEuIFNldCByZXF1ZXN04oCZcyBtZXRob2QgdG8gYEdFVGAgYW5kIHJlcXVlc3TigJlzIGJvZHkgdG8gbnVsbC5cbiAgICByZXF1ZXN0Lm1ldGhvZCA9ICdHRVQnXG4gICAgcmVxdWVzdC5ib2R5ID0gbnVsbFxuXG4gICAgLy8gMi4gRm9yIGVhY2ggaGVhZGVyTmFtZSBvZiByZXF1ZXN0LWJvZHktaGVhZGVyIG5hbWUsIGRlbGV0ZSBoZWFkZXJOYW1lIGZyb21cbiAgICAvLyByZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cbiAgICBmb3IgKGNvbnN0IGhlYWRlck5hbWUgb2YgcmVxdWVzdEJvZHlIZWFkZXIpIHtcbiAgICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QuZGVsZXRlKGhlYWRlck5hbWUpXG4gICAgfVxuICB9XG5cbiAgLy8gMTMuIElmIHJlcXVlc3TigJlzIGN1cnJlbnQgVVJM4oCZcyBvcmlnaW4gaXMgbm90IHNhbWUgb3JpZ2luIHdpdGggbG9jYXRpb25VUkzigJlzXG4gIC8vICAgICBvcmlnaW4sIHRoZW4gZm9yIGVhY2ggaGVhZGVyTmFtZSBvZiBDT1JTIG5vbi13aWxkY2FyZCByZXF1ZXN0LWhlYWRlciBuYW1lLFxuICAvLyAgICAgZGVsZXRlIGhlYWRlck5hbWUgZnJvbSByZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cbiAgaWYgKCFzYW1lT3JpZ2luKHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpLCBsb2NhdGlvblVSTCkpIHtcbiAgICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29ycy1ub24td2lsZGNhcmQtcmVxdWVzdC1oZWFkZXItbmFtZVxuICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QuZGVsZXRlKCdhdXRob3JpemF0aW9uJylcblxuICAgIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNhdXRoZW50aWNhdGlvbi1lbnRyaWVzXG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5kZWxldGUoJ3Byb3h5LWF1dGhvcml6YXRpb24nLCB0cnVlKVxuXG4gICAgLy8gXCJDb29raWVcIiBhbmQgXCJIb3N0XCIgYXJlIGZvcmJpZGRlbiByZXF1ZXN0LWhlYWRlcnMsIHdoaWNoIHVuZGljaSBkb2Vzbid0IGltcGxlbWVudC5cbiAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmRlbGV0ZSgnY29va2llJylcbiAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmRlbGV0ZSgnaG9zdCcpXG4gIH1cblxuICAvLyAxNC4gSWYgcmVxdWVzdOKAmXMgYm9keSBpcyBub24tbnVsbCwgdGhlbiBzZXQgcmVxdWVzdOKAmXMgYm9keSB0byB0aGUgZmlyc3QgcmV0dXJuXG4gIC8vIHZhbHVlIG9mIHNhZmVseSBleHRyYWN0aW5nIHJlcXVlc3TigJlzIGJvZHnigJlzIHNvdXJjZS5cbiAgaWYgKHJlcXVlc3QuYm9keSAhPSBudWxsKSB7XG4gICAgYXNzZXJ0KHJlcXVlc3QuYm9keS5zb3VyY2UgIT0gbnVsbClcbiAgICByZXF1ZXN0LmJvZHkgPSBzYWZlbHlFeHRyYWN0Qm9keShyZXF1ZXN0LmJvZHkuc291cmNlKVswXVxuICB9XG5cbiAgLy8gMTUuIExldCB0aW1pbmdJbmZvIGJlIGZldGNoUGFyYW1z4oCZcyB0aW1pbmcgaW5mby5cbiAgY29uc3QgdGltaW5nSW5mbyA9IGZldGNoUGFyYW1zLnRpbWluZ0luZm9cblxuICAvLyAxNi4gU2V0IHRpbWluZ0luZm/igJlzIHJlZGlyZWN0IGVuZCB0aW1lIGFuZCBwb3N0LXJlZGlyZWN0IHN0YXJ0IHRpbWUgdG8gdGhlXG4gIC8vIGNvYXJzZW5lZCBzaGFyZWQgY3VycmVudCB0aW1lIGdpdmVuIGZldGNoUGFyYW1z4oCZcyBjcm9zcy1vcmlnaW4gaXNvbGF0ZWRcbiAgLy8gY2FwYWJpbGl0eS5cbiAgdGltaW5nSW5mby5yZWRpcmVjdEVuZFRpbWUgPSB0aW1pbmdJbmZvLnBvc3RSZWRpcmVjdFN0YXJ0VGltZSA9XG4gICAgY29hcnNlbmVkU2hhcmVkQ3VycmVudFRpbWUoZmV0Y2hQYXJhbXMuY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkpXG5cbiAgLy8gMTcuIElmIHRpbWluZ0luZm/igJlzIHJlZGlyZWN0IHN0YXJ0IHRpbWUgaXMgMCwgdGhlbiBzZXQgdGltaW5nSW5mb+KAmXNcbiAgLy8gIHJlZGlyZWN0IHN0YXJ0IHRpbWUgdG8gdGltaW5nSW5mb+KAmXMgc3RhcnQgdGltZS5cbiAgaWYgKHRpbWluZ0luZm8ucmVkaXJlY3RTdGFydFRpbWUgPT09IDApIHtcbiAgICB0aW1pbmdJbmZvLnJlZGlyZWN0U3RhcnRUaW1lID0gdGltaW5nSW5mby5zdGFydFRpbWVcbiAgfVxuXG4gIC8vIDE4LiBBcHBlbmQgbG9jYXRpb25VUkwgdG8gcmVxdWVzdOKAmXMgVVJMIGxpc3QuXG4gIHJlcXVlc3QudXJsTGlzdC5wdXNoKGxvY2F0aW9uVVJMKVxuXG4gIC8vIDE5LiBJbnZva2Ugc2V0IHJlcXVlc3TigJlzIHJlZmVycmVyIHBvbGljeSBvbiByZWRpcmVjdCBvbiByZXF1ZXN0IGFuZFxuICAvLyBhY3R1YWxSZXNwb25zZS5cbiAgc2V0UmVxdWVzdFJlZmVycmVyUG9saWN5T25SZWRpcmVjdChyZXF1ZXN0LCBhY3R1YWxSZXNwb25zZSlcblxuICAvLyAyMC4gUmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZyBtYWluIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zIGFuZCB0cnVlLlxuICByZXR1cm4gbWFpbkZldGNoKGZldGNoUGFyYW1zLCB0cnVlKVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC1uZXR3b3JrLW9yLWNhY2hlLWZldGNoXG5hc3luYyBmdW5jdGlvbiBodHRwTmV0d29ya09yQ2FjaGVGZXRjaCAoXG4gIGZldGNoUGFyYW1zLFxuICBpc0F1dGhlbnRpY2F0aW9uRmV0Y2ggPSBmYWxzZSxcbiAgaXNOZXdDb25uZWN0aW9uRmV0Y2ggPSBmYWxzZVxuKSB7XG4gIC8vIDEuIExldCByZXF1ZXN0IGJlIGZldGNoUGFyYW1z4oCZcyByZXF1ZXN0LlxuICBjb25zdCByZXF1ZXN0ID0gZmV0Y2hQYXJhbXMucmVxdWVzdFxuXG4gIC8vIDIuIExldCBodHRwRmV0Y2hQYXJhbXMgYmUgbnVsbC5cbiAgbGV0IGh0dHBGZXRjaFBhcmFtcyA9IG51bGxcblxuICAvLyAzLiBMZXQgaHR0cFJlcXVlc3QgYmUgbnVsbC5cbiAgbGV0IGh0dHBSZXF1ZXN0ID0gbnVsbFxuXG4gIC8vIDQuIExldCByZXNwb25zZSBiZSBudWxsLlxuICBsZXQgcmVzcG9uc2UgPSBudWxsXG5cbiAgLy8gNS4gTGV0IHN0b3JlZFJlc3BvbnNlIGJlIG51bGwuXG4gIC8vIFRPRE86IGNhY2hlXG5cbiAgLy8gNi4gTGV0IGh0dHBDYWNoZSBiZSBudWxsLlxuICBjb25zdCBodHRwQ2FjaGUgPSBudWxsXG5cbiAgLy8gNy4gTGV0IHRoZSByZXZhbGlkYXRpbmdGbGFnIGJlIHVuc2V0LlxuICBjb25zdCByZXZhbGlkYXRpbmdGbGFnID0gZmFsc2VcblxuICAvLyA4LiBSdW4gdGhlc2Ugc3RlcHMsIGJ1dCBhYm9ydCB3aGVuIHRoZSBvbmdvaW5nIGZldGNoIGlzIHRlcm1pbmF0ZWQ6XG5cbiAgLy8gICAgMS4gSWYgcmVxdWVzdOKAmXMgd2luZG93IGlzIFwibm8td2luZG93XCIgYW5kIHJlcXVlc3TigJlzIHJlZGlyZWN0IG1vZGUgaXNcbiAgLy8gICAgXCJlcnJvclwiLCB0aGVuIHNldCBodHRwRmV0Y2hQYXJhbXMgdG8gZmV0Y2hQYXJhbXMgYW5kIGh0dHBSZXF1ZXN0IHRvXG4gIC8vICAgIHJlcXVlc3QuXG4gIGlmIChyZXF1ZXN0LndpbmRvdyA9PT0gJ25vLXdpbmRvdycgJiYgcmVxdWVzdC5yZWRpcmVjdCA9PT0gJ2Vycm9yJykge1xuICAgIGh0dHBGZXRjaFBhcmFtcyA9IGZldGNoUGFyYW1zXG4gICAgaHR0cFJlcXVlc3QgPSByZXF1ZXN0XG4gIH0gZWxzZSB7XG4gICAgLy8gT3RoZXJ3aXNlOlxuXG4gICAgLy8gMS4gU2V0IGh0dHBSZXF1ZXN0IHRvIGEgY2xvbmUgb2YgcmVxdWVzdC5cbiAgICBodHRwUmVxdWVzdCA9IG1ha2VSZXF1ZXN0KHJlcXVlc3QpXG5cbiAgICAvLyAyLiBTZXQgaHR0cEZldGNoUGFyYW1zIHRvIGEgY29weSBvZiBmZXRjaFBhcmFtcy5cbiAgICBodHRwRmV0Y2hQYXJhbXMgPSB7IC4uLmZldGNoUGFyYW1zIH1cblxuICAgIC8vIDMuIFNldCBodHRwRmV0Y2hQYXJhbXPigJlzIHJlcXVlc3QgdG8gaHR0cFJlcXVlc3QuXG4gICAgaHR0cEZldGNoUGFyYW1zLnJlcXVlc3QgPSBodHRwUmVxdWVzdFxuICB9XG5cbiAgLy8gICAgMy4gTGV0IGluY2x1ZGVDcmVkZW50aWFscyBiZSB0cnVlIGlmIG9uZSBvZlxuICBjb25zdCBpbmNsdWRlQ3JlZGVudGlhbHMgPVxuICAgIHJlcXVlc3QuY3JlZGVudGlhbHMgPT09ICdpbmNsdWRlJyB8fFxuICAgIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnc2FtZS1vcmlnaW4nICYmXG4gICAgICByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdiYXNpYycpXG5cbiAgLy8gICAgNC4gTGV0IGNvbnRlbnRMZW5ndGggYmUgaHR0cFJlcXVlc3TigJlzIGJvZHnigJlzIGxlbmd0aCwgaWYgaHR0cFJlcXVlc3TigJlzXG4gIC8vICAgIGJvZHkgaXMgbm9uLW51bGw7IG90aGVyd2lzZSBudWxsLlxuICBjb25zdCBjb250ZW50TGVuZ3RoID0gaHR0cFJlcXVlc3QuYm9keSA/IGh0dHBSZXF1ZXN0LmJvZHkubGVuZ3RoIDogbnVsbFxuXG4gIC8vICAgIDUuIExldCBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgYmUgbnVsbC5cbiAgbGV0IGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSA9IG51bGxcblxuICAvLyAgICA2LiBJZiBodHRwUmVxdWVzdOKAmXMgYm9keSBpcyBudWxsIGFuZCBodHRwUmVxdWVzdOKAmXMgbWV0aG9kIGlzIGBQT1NUYCBvclxuICAvLyAgICBgUFVUYCwgdGhlbiBzZXQgY29udGVudExlbmd0aEhlYWRlclZhbHVlIHRvIGAwYC5cbiAgaWYgKFxuICAgIGh0dHBSZXF1ZXN0LmJvZHkgPT0gbnVsbCAmJlxuICAgIFsnUE9TVCcsICdQVVQnXS5pbmNsdWRlcyhodHRwUmVxdWVzdC5tZXRob2QpXG4gICkge1xuICAgIGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSA9ICcwJ1xuICB9XG5cbiAgLy8gICAgNy4gSWYgY29udGVudExlbmd0aCBpcyBub24tbnVsbCwgdGhlbiBzZXQgY29udGVudExlbmd0aEhlYWRlclZhbHVlIHRvXG4gIC8vICAgIGNvbnRlbnRMZW5ndGgsIHNlcmlhbGl6ZWQgYW5kIGlzb21vcnBoaWMgZW5jb2RlZC5cbiAgaWYgKGNvbnRlbnRMZW5ndGggIT0gbnVsbCkge1xuICAgIGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSA9IGlzb21vcnBoaWNFbmNvZGUoYCR7Y29udGVudExlbmd0aH1gKVxuICB9XG5cbiAgLy8gICAgOC4gSWYgY29udGVudExlbmd0aEhlYWRlclZhbHVlIGlzIG5vbi1udWxsLCB0aGVuIGFwcGVuZFxuICAvLyAgICBgQ29udGVudC1MZW5ndGhgL2NvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSB0byBodHRwUmVxdWVzdOKAmXMgaGVhZGVyXG4gIC8vICAgIGxpc3QuXG4gIGlmIChjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgIT0gbnVsbCkge1xuICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnY29udGVudC1sZW5ndGgnLCBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUpXG4gIH1cblxuICAvLyAgICA5LiBJZiBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgaXMgbm9uLW51bGwsIHRoZW4gYXBwZW5kIChgQ29udGVudC1MZW5ndGhgLFxuICAvLyAgICBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUpIHRvIGh0dHBSZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cblxuICAvLyAgICAxMC4gSWYgY29udGVudExlbmd0aCBpcyBub24tbnVsbCBhbmQgaHR0cFJlcXVlc3TigJlzIGtlZXBhbGl2ZSBpcyB0cnVlLFxuICAvLyAgICB0aGVuOlxuICBpZiAoY29udGVudExlbmd0aCAhPSBudWxsICYmIGh0dHBSZXF1ZXN0LmtlZXBhbGl2ZSkge1xuICAgIC8vIE5PVEU6IGtlZXBhbGl2ZSBpcyBhIG5vb3Agb3V0c2lkZSBvZiBicm93c2VyIGNvbnRleHQuXG4gIH1cblxuICAvLyAgICAxMS4gSWYgaHR0cFJlcXVlc3TigJlzIHJlZmVycmVyIGlzIGEgVVJMLCB0aGVuIGFwcGVuZFxuICAvLyAgICBgUmVmZXJlcmAvaHR0cFJlcXVlc3TigJlzIHJlZmVycmVyLCBzZXJpYWxpemVkIGFuZCBpc29tb3JwaGljIGVuY29kZWQsXG4gIC8vICAgICB0byBodHRwUmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QuXG4gIGlmIChodHRwUmVxdWVzdC5yZWZlcnJlciBpbnN0YW5jZW9mIFVSTCkge1xuICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgncmVmZXJlcicsIGlzb21vcnBoaWNFbmNvZGUoaHR0cFJlcXVlc3QucmVmZXJyZXIuaHJlZikpXG4gIH1cblxuICAvLyAgICAxMi4gQXBwZW5kIGEgcmVxdWVzdCBgT3JpZ2luYCBoZWFkZXIgZm9yIGh0dHBSZXF1ZXN0LlxuICBhcHBlbmRSZXF1ZXN0T3JpZ2luSGVhZGVyKGh0dHBSZXF1ZXN0KVxuXG4gIC8vICAgIDEzLiBBcHBlbmQgdGhlIEZldGNoIG1ldGFkYXRhIGhlYWRlcnMgZm9yIGh0dHBSZXF1ZXN0LiBbRkVUQ0gtTUVUQURBVEFdXG4gIGFwcGVuZEZldGNoTWV0YWRhdGEoaHR0cFJlcXVlc3QpXG5cbiAgLy8gICAgMTQuIElmIGh0dHBSZXF1ZXN04oCZcyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluIGBVc2VyLUFnZW50YCwgdGhlblxuICAvLyAgICB1c2VyIGFnZW50cyBzaG91bGQgYXBwZW5kIGBVc2VyLUFnZW50YC9kZWZhdWx0IGBVc2VyLUFnZW50YCB2YWx1ZSB0b1xuICAvLyAgICBodHRwUmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QuXG4gIGlmICghaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ3VzZXItYWdlbnQnKSkge1xuICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgndXNlci1hZ2VudCcsIHR5cGVvZiBlc2J1aWxkRGV0ZWN0aW9uID09PSAndW5kZWZpbmVkJyA/ICd1bmRpY2knIDogJ25vZGUnKVxuICB9XG5cbiAgLy8gICAgMTUuIElmIGh0dHBSZXF1ZXN04oCZcyBjYWNoZSBtb2RlIGlzIFwiZGVmYXVsdFwiIGFuZCBodHRwUmVxdWVzdOKAmXMgaGVhZGVyXG4gIC8vICAgIGxpc3QgY29udGFpbnMgYElmLU1vZGlmaWVkLVNpbmNlYCwgYElmLU5vbmUtTWF0Y2hgLFxuICAvLyAgICBgSWYtVW5tb2RpZmllZC1TaW5jZWAsIGBJZi1NYXRjaGAsIG9yIGBJZi1SYW5nZWAsIHRoZW4gc2V0XG4gIC8vICAgIGh0dHBSZXF1ZXN04oCZcyBjYWNoZSBtb2RlIHRvIFwibm8tc3RvcmVcIi5cbiAgaWYgKFxuICAgIGh0dHBSZXF1ZXN0LmNhY2hlID09PSAnZGVmYXVsdCcgJiZcbiAgICAoaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2lmLW1vZGlmaWVkLXNpbmNlJykgfHxcbiAgICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdpZi1ub25lLW1hdGNoJykgfHxcbiAgICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdpZi11bm1vZGlmaWVkLXNpbmNlJykgfHxcbiAgICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdpZi1tYXRjaCcpIHx8XG4gICAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygnaWYtcmFuZ2UnKSlcbiAgKSB7XG4gICAgaHR0cFJlcXVlc3QuY2FjaGUgPSAnbm8tc3RvcmUnXG4gIH1cblxuICAvLyAgICAxNi4gSWYgaHR0cFJlcXVlc3TigJlzIGNhY2hlIG1vZGUgaXMgXCJuby1jYWNoZVwiLCBodHRwUmVxdWVzdOKAmXMgcHJldmVudFxuICAvLyAgICBuby1jYWNoZSBjYWNoZS1jb250cm9sIGhlYWRlciBtb2RpZmljYXRpb24gZmxhZyBpcyB1bnNldCwgYW5kXG4gIC8vICAgIGh0dHBSZXF1ZXN04oCZcyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluIGBDYWNoZS1Db250cm9sYCwgdGhlbiBhcHBlbmRcbiAgLy8gICAgYENhY2hlLUNvbnRyb2xgL2BtYXgtYWdlPTBgIHRvIGh0dHBSZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cbiAgaWYgKFxuICAgIGh0dHBSZXF1ZXN0LmNhY2hlID09PSAnbm8tY2FjaGUnICYmXG4gICAgIWh0dHBSZXF1ZXN0LnByZXZlbnROb0NhY2hlQ2FjaGVDb250cm9sSGVhZGVyTW9kaWZpY2F0aW9uICYmXG4gICAgIWh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdjYWNoZS1jb250cm9sJylcbiAgKSB7XG4gICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdjYWNoZS1jb250cm9sJywgJ21heC1hZ2U9MCcpXG4gIH1cblxuICAvLyAgICAxNy4gSWYgaHR0cFJlcXVlc3TigJlzIGNhY2hlIG1vZGUgaXMgXCJuby1zdG9yZVwiIG9yIFwicmVsb2FkXCIsIHRoZW46XG4gIGlmIChodHRwUmVxdWVzdC5jYWNoZSA9PT0gJ25vLXN0b3JlJyB8fCBodHRwUmVxdWVzdC5jYWNoZSA9PT0gJ3JlbG9hZCcpIHtcbiAgICAvLyAxLiBJZiBodHRwUmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgUHJhZ21hYCwgdGhlbiBhcHBlbmRcbiAgICAvLyBgUHJhZ21hYC9gbm8tY2FjaGVgIHRvIGh0dHBSZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cbiAgICBpZiAoIWh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdwcmFnbWEnKSkge1xuICAgICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdwcmFnbWEnLCAnbm8tY2FjaGUnKVxuICAgIH1cblxuICAgIC8vIDIuIElmIGh0dHBSZXF1ZXN04oCZcyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluIGBDYWNoZS1Db250cm9sYCxcbiAgICAvLyB0aGVuIGFwcGVuZCBgQ2FjaGUtQ29udHJvbGAvYG5vLWNhY2hlYCB0byBodHRwUmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QuXG4gICAgaWYgKCFodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygnY2FjaGUtY29udHJvbCcpKSB7XG4gICAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ2NhY2hlLWNvbnRyb2wnLCAnbm8tY2FjaGUnKVxuICAgIH1cbiAgfVxuXG4gIC8vICAgIDE4LiBJZiBodHRwUmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QgY29udGFpbnMgYFJhbmdlYCwgdGhlbiBhcHBlbmRcbiAgLy8gICAgYEFjY2VwdC1FbmNvZGluZ2AvYGlkZW50aXR5YCB0byBodHRwUmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QuXG4gIGlmIChodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygncmFuZ2UnKSkge1xuICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnYWNjZXB0LWVuY29kaW5nJywgJ2lkZW50aXR5JylcbiAgfVxuXG4gIC8vICAgIDE5LiBNb2RpZnkgaHR0cFJlcXVlc3TigJlzIGhlYWRlciBsaXN0IHBlciBIVFRQLiBEbyBub3QgYXBwZW5kIGEgZ2l2ZW5cbiAgLy8gICAgaGVhZGVyIGlmIGh0dHBSZXF1ZXN04oCZcyBoZWFkZXIgbGlzdCBjb250YWlucyB0aGF0IGhlYWRlcuKAmXMgbmFtZS5cbiAgLy8gICAgVE9ETzogaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy9mZXRjaC9pc3N1ZXMvMTI4NSNpc3N1ZWNvbW1lbnQtODk2NTYwMTI5XG4gIGlmICghaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2FjY2VwdC1lbmNvZGluZycpKSB7XG4gICAgaWYgKHVybEhhc0h0dHBzU2NoZW1lKHJlcXVlc3RDdXJyZW50VVJMKGh0dHBSZXF1ZXN0KSkpIHtcbiAgICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnYWNjZXB0LWVuY29kaW5nJywgJ2JyLCBnemlwLCBkZWZsYXRlJylcbiAgICB9IGVsc2Uge1xuICAgICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdhY2NlcHQtZW5jb2RpbmcnLCAnZ3ppcCwgZGVmbGF0ZScpXG4gICAgfVxuICB9XG5cbiAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuZGVsZXRlKCdob3N0JylcblxuICAvLyAgICAyMC4gSWYgaW5jbHVkZUNyZWRlbnRpYWxzIGlzIHRydWUsIHRoZW46XG4gIGlmIChpbmNsdWRlQ3JlZGVudGlhbHMpIHtcbiAgICAvLyAxLiBJZiB0aGUgdXNlciBhZ2VudCBpcyBub3QgY29uZmlndXJlZCB0byBibG9jayBjb29raWVzIGZvciBodHRwUmVxdWVzdFxuICAgIC8vIChzZWUgc2VjdGlvbiA3IG9mIFtDT09LSUVTXSksIHRoZW46XG4gICAgLy8gVE9ETzogY3JlZGVudGlhbHNcbiAgICAvLyAyLiBJZiBodHRwUmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgQXV0aG9yaXphdGlvbmAsIHRoZW46XG4gICAgLy8gVE9ETzogY3JlZGVudGlhbHNcbiAgfVxuXG4gIC8vICAgIDIxLiBJZiB0aGVyZeKAmXMgYSBwcm94eS1hdXRoZW50aWNhdGlvbiBlbnRyeSwgdXNlIGl0IGFzIGFwcHJvcHJpYXRlLlxuICAvLyAgICBUT0RPOiBwcm94eS1hdXRoZW50aWNhdGlvblxuXG4gIC8vICAgIDIyLiBTZXQgaHR0cENhY2hlIHRvIHRoZSByZXN1bHQgb2YgZGV0ZXJtaW5pbmcgdGhlIEhUVFAgY2FjaGVcbiAgLy8gICAgcGFydGl0aW9uLCBnaXZlbiBodHRwUmVxdWVzdC5cbiAgLy8gICAgVE9ETzogY2FjaGVcblxuICAvLyAgICAyMy4gSWYgaHR0cENhY2hlIGlzIG51bGwsIHRoZW4gc2V0IGh0dHBSZXF1ZXN04oCZcyBjYWNoZSBtb2RlIHRvXG4gIC8vICAgIFwibm8tc3RvcmVcIi5cbiAgaWYgKGh0dHBDYWNoZSA9PSBudWxsKSB7XG4gICAgaHR0cFJlcXVlc3QuY2FjaGUgPSAnbm8tc3RvcmUnXG4gIH1cblxuICAvLyAgICAyNC4gSWYgaHR0cFJlcXVlc3TigJlzIGNhY2hlIG1vZGUgaXMgbmVpdGhlciBcIm5vLXN0b3JlXCIgbm9yIFwicmVsb2FkXCIsXG4gIC8vICAgIHRoZW46XG4gIGlmIChodHRwUmVxdWVzdC5tb2RlICE9PSAnbm8tc3RvcmUnICYmIGh0dHBSZXF1ZXN0Lm1vZGUgIT09ICdyZWxvYWQnKSB7XG4gICAgLy8gVE9ETzogY2FjaGVcbiAgfVxuXG4gIC8vIDkuIElmIGFib3J0ZWQsIHRoZW4gcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSBuZXR3b3JrIGVycm9yIGZvciBmZXRjaFBhcmFtcy5cbiAgLy8gVE9ET1xuXG4gIC8vIDEwLiBJZiByZXNwb25zZSBpcyBudWxsLCB0aGVuOlxuICBpZiAocmVzcG9uc2UgPT0gbnVsbCkge1xuICAgIC8vIDEuIElmIGh0dHBSZXF1ZXN04oCZcyBjYWNoZSBtb2RlIGlzIFwib25seS1pZi1jYWNoZWRcIiwgdGhlbiByZXR1cm4gYVxuICAgIC8vIG5ldHdvcmsgZXJyb3IuXG4gICAgaWYgKGh0dHBSZXF1ZXN0Lm1vZGUgPT09ICdvbmx5LWlmLWNhY2hlZCcpIHtcbiAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdvbmx5IGlmIGNhY2hlZCcpXG4gICAgfVxuXG4gICAgLy8gMi4gTGV0IGZvcndhcmRSZXNwb25zZSBiZSB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgSFRUUC1uZXR3b3JrIGZldGNoXG4gICAgLy8gZ2l2ZW4gaHR0cEZldGNoUGFyYW1zLCBpbmNsdWRlQ3JlZGVudGlhbHMsIGFuZCBpc05ld0Nvbm5lY3Rpb25GZXRjaC5cbiAgICBjb25zdCBmb3J3YXJkUmVzcG9uc2UgPSBhd2FpdCBodHRwTmV0d29ya0ZldGNoKFxuICAgICAgaHR0cEZldGNoUGFyYW1zLFxuICAgICAgaW5jbHVkZUNyZWRlbnRpYWxzLFxuICAgICAgaXNOZXdDb25uZWN0aW9uRmV0Y2hcbiAgICApXG5cbiAgICAvLyAzLiBJZiBodHRwUmVxdWVzdOKAmXMgbWV0aG9kIGlzIHVuc2FmZSBhbmQgZm9yd2FyZFJlc3BvbnNl4oCZcyBzdGF0dXMgaXNcbiAgICAvLyBpbiB0aGUgcmFuZ2UgMjAwIHRvIDM5OSwgaW5jbHVzaXZlLCBpbnZhbGlkYXRlIGFwcHJvcHJpYXRlIHN0b3JlZFxuICAgIC8vIHJlc3BvbnNlcyBpbiBodHRwQ2FjaGUsIGFzIHBlciB0aGUgXCJJbnZhbGlkYXRpb25cIiBjaGFwdGVyIG9mIEhUVFBcbiAgICAvLyBDYWNoaW5nLCBhbmQgc2V0IHN0b3JlZFJlc3BvbnNlIHRvIG51bGwuIFtIVFRQLUNBQ0hJTkddXG4gICAgaWYgKFxuICAgICAgIXNhZmVNZXRob2RzU2V0LmhhcyhodHRwUmVxdWVzdC5tZXRob2QpICYmXG4gICAgICBmb3J3YXJkUmVzcG9uc2Uuc3RhdHVzID49IDIwMCAmJlxuICAgICAgZm9yd2FyZFJlc3BvbnNlLnN0YXR1cyA8PSAzOTlcbiAgICApIHtcbiAgICAgIC8vIFRPRE86IGNhY2hlXG4gICAgfVxuXG4gICAgLy8gNC4gSWYgdGhlIHJldmFsaWRhdGluZ0ZsYWcgaXMgc2V0IGFuZCBmb3J3YXJkUmVzcG9uc2XigJlzIHN0YXR1cyBpcyAzMDQsXG4gICAgLy8gdGhlbjpcbiAgICBpZiAocmV2YWxpZGF0aW5nRmxhZyAmJiBmb3J3YXJkUmVzcG9uc2Uuc3RhdHVzID09PSAzMDQpIHtcbiAgICAgIC8vIFRPRE86IGNhY2hlXG4gICAgfVxuXG4gICAgLy8gNS4gSWYgcmVzcG9uc2UgaXMgbnVsbCwgdGhlbjpcbiAgICBpZiAocmVzcG9uc2UgPT0gbnVsbCkge1xuICAgICAgLy8gMS4gU2V0IHJlc3BvbnNlIHRvIGZvcndhcmRSZXNwb25zZS5cbiAgICAgIHJlc3BvbnNlID0gZm9yd2FyZFJlc3BvbnNlXG5cbiAgICAgIC8vIDIuIFN0b3JlIGh0dHBSZXF1ZXN0IGFuZCBmb3J3YXJkUmVzcG9uc2UgaW4gaHR0cENhY2hlLCBhcyBwZXIgdGhlXG4gICAgICAvLyBcIlN0b3JpbmcgUmVzcG9uc2VzIGluIENhY2hlc1wiIGNoYXB0ZXIgb2YgSFRUUCBDYWNoaW5nLiBbSFRUUC1DQUNISU5HXVxuICAgICAgLy8gVE9ETzogY2FjaGVcbiAgICB9XG4gIH1cblxuICAvLyAxMS4gU2V0IHJlc3BvbnNl4oCZcyBVUkwgbGlzdCB0byBhIGNsb25lIG9mIGh0dHBSZXF1ZXN04oCZcyBVUkwgbGlzdC5cbiAgcmVzcG9uc2UudXJsTGlzdCA9IFsuLi5odHRwUmVxdWVzdC51cmxMaXN0XVxuXG4gIC8vIDEyLiBJZiBodHRwUmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QgY29udGFpbnMgYFJhbmdlYCwgdGhlbiBzZXQgcmVzcG9uc2XigJlzXG4gIC8vIHJhbmdlLXJlcXVlc3RlZCBmbGFnLlxuICBpZiAoaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ3JhbmdlJykpIHtcbiAgICByZXNwb25zZS5yYW5nZVJlcXVlc3RlZCA9IHRydWVcbiAgfVxuXG4gIC8vIDEzLiBTZXQgcmVzcG9uc2XigJlzIHJlcXVlc3QtaW5jbHVkZXMtY3JlZGVudGlhbHMgdG8gaW5jbHVkZUNyZWRlbnRpYWxzLlxuICByZXNwb25zZS5yZXF1ZXN0SW5jbHVkZXNDcmVkZW50aWFscyA9IGluY2x1ZGVDcmVkZW50aWFsc1xuXG4gIC8vIDE0LiBJZiByZXNwb25zZeKAmXMgc3RhdHVzIGlzIDQwMSwgaHR0cFJlcXVlc3TigJlzIHJlc3BvbnNlIHRhaW50aW5nIGlzIG5vdFxuICAvLyBcImNvcnNcIiwgaW5jbHVkZUNyZWRlbnRpYWxzIGlzIHRydWUsIGFuZCByZXF1ZXN04oCZcyB3aW5kb3cgaXMgYW4gZW52aXJvbm1lbnRcbiAgLy8gc2V0dGluZ3Mgb2JqZWN0LCB0aGVuOlxuICAvLyBUT0RPXG5cbiAgLy8gMTUuIElmIHJlc3BvbnNl4oCZcyBzdGF0dXMgaXMgNDA3LCB0aGVuOlxuICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDcpIHtcbiAgICAvLyAxLiBJZiByZXF1ZXN04oCZcyB3aW5kb3cgaXMgXCJuby13aW5kb3dcIiwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICAgIGlmIChyZXF1ZXN0LndpbmRvdyA9PT0gJ25vLXdpbmRvdycpIHtcbiAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKClcbiAgICB9XG5cbiAgICAvLyAyLiA/Pz9cblxuICAgIC8vIDMuIElmIGZldGNoUGFyYW1zIGlzIGNhbmNlbGVkLCB0aGVuIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgbmV0d29yayBlcnJvciBmb3IgZmV0Y2hQYXJhbXMuXG4gICAgaWYgKGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSkge1xuICAgICAgcmV0dXJuIG1ha2VBcHByb3ByaWF0ZU5ldHdvcmtFcnJvcihmZXRjaFBhcmFtcylcbiAgICB9XG5cbiAgICAvLyA0LiBQcm9tcHQgdGhlIGVuZCB1c2VyIGFzIGFwcHJvcHJpYXRlIGluIHJlcXVlc3TigJlzIHdpbmRvdyBhbmQgc3RvcmVcbiAgICAvLyB0aGUgcmVzdWx0IGFzIGEgcHJveHktYXV0aGVudGljYXRpb24gZW50cnkuIFtIVFRQLUFVVEhdXG4gICAgLy8gVE9ETzogSW52b2tlIHNvbWUga2luZCBvZiBjYWxsYmFjaz9cblxuICAgIC8vIDUuIFNldCByZXNwb25zZSB0byB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgSFRUUC1uZXR3b3JrLW9yLWNhY2hlIGZldGNoIGdpdmVuXG4gICAgLy8gZmV0Y2hQYXJhbXMuXG4gICAgLy8gVE9ET1xuICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdwcm94eSBhdXRoZW50aWNhdGlvbiByZXF1aXJlZCcpXG4gIH1cblxuICAvLyAxNi4gSWYgYWxsIG9mIHRoZSBmb2xsb3dpbmcgYXJlIHRydWVcbiAgaWYgKFxuICAgIC8vIHJlc3BvbnNl4oCZcyBzdGF0dXMgaXMgNDIxXG4gICAgcmVzcG9uc2Uuc3RhdHVzID09PSA0MjEgJiZcbiAgICAvLyBpc05ld0Nvbm5lY3Rpb25GZXRjaCBpcyBmYWxzZVxuICAgICFpc05ld0Nvbm5lY3Rpb25GZXRjaCAmJlxuICAgIC8vIHJlcXVlc3TigJlzIGJvZHkgaXMgbnVsbCwgb3IgcmVxdWVzdOKAmXMgYm9keSBpcyBub24tbnVsbCBhbmQgcmVxdWVzdOKAmXMgYm9keeKAmXMgc291cmNlIGlzIG5vbi1udWxsXG4gICAgKHJlcXVlc3QuYm9keSA9PSBudWxsIHx8IHJlcXVlc3QuYm9keS5zb3VyY2UgIT0gbnVsbClcbiAgKSB7XG4gICAgLy8gdGhlbjpcblxuICAgIC8vIDEuIElmIGZldGNoUGFyYW1zIGlzIGNhbmNlbGVkLCB0aGVuIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgbmV0d29yayBlcnJvciBmb3IgZmV0Y2hQYXJhbXMuXG4gICAgaWYgKGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSkge1xuICAgICAgcmV0dXJuIG1ha2VBcHByb3ByaWF0ZU5ldHdvcmtFcnJvcihmZXRjaFBhcmFtcylcbiAgICB9XG5cbiAgICAvLyAyLiBTZXQgcmVzcG9uc2UgdG8gdGhlIHJlc3VsdCBvZiBydW5uaW5nIEhUVFAtbmV0d29yay1vci1jYWNoZVxuICAgIC8vIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLCBpc0F1dGhlbnRpY2F0aW9uRmV0Y2gsIGFuZCB0cnVlLlxuXG4gICAgLy8gVE9ETyAoc3BlYyk6IFRoZSBzcGVjIGRvZXNuJ3Qgc3BlY2lmeSB0aGlzIGJ1dCB3ZSBuZWVkIHRvIGNhbmNlbFxuICAgIC8vIHRoZSBhY3RpdmUgcmVzcG9uc2UgYmVmb3JlIHdlIGNhbiBzdGFydCBhIG5ldyBvbmUuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy9mZXRjaC9pc3N1ZXMvMTI5M1xuICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29ubmVjdGlvbi5kZXN0cm95KClcblxuICAgIHJlc3BvbnNlID0gYXdhaXQgaHR0cE5ldHdvcmtPckNhY2hlRmV0Y2goXG4gICAgICBmZXRjaFBhcmFtcyxcbiAgICAgIGlzQXV0aGVudGljYXRpb25GZXRjaCxcbiAgICAgIHRydWVcbiAgICApXG4gIH1cblxuICAvLyAxNy4gSWYgaXNBdXRoZW50aWNhdGlvbkZldGNoIGlzIHRydWUsIHRoZW4gY3JlYXRlIGFuIGF1dGhlbnRpY2F0aW9uIGVudHJ5XG4gIGlmIChpc0F1dGhlbnRpY2F0aW9uRmV0Y2gpIHtcbiAgICAvLyBUT0RPXG4gIH1cblxuICAvLyAxOC4gUmV0dXJuIHJlc3BvbnNlLlxuICByZXR1cm4gcmVzcG9uc2Vcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtbmV0d29yay1mZXRjaFxuYXN5bmMgZnVuY3Rpb24gaHR0cE5ldHdvcmtGZXRjaCAoXG4gIGZldGNoUGFyYW1zLFxuICBpbmNsdWRlQ3JlZGVudGlhbHMgPSBmYWxzZSxcbiAgZm9yY2VOZXdDb25uZWN0aW9uID0gZmFsc2Vcbikge1xuICBhc3NlcnQoIWZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29ubmVjdGlvbiB8fCBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbm5lY3Rpb24uZGVzdHJveWVkKVxuXG4gIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29ubmVjdGlvbiA9IHtcbiAgICBhYm9ydDogbnVsbCxcbiAgICBkZXN0cm95ZWQ6IGZhbHNlLFxuICAgIGRlc3Ryb3kgKGVycikge1xuICAgICAgaWYgKCF0aGlzLmRlc3Ryb3llZCkge1xuICAgICAgICB0aGlzLmRlc3Ryb3llZCA9IHRydWVcbiAgICAgICAgdGhpcy5hYm9ydD8uKGVyciA/PyBuZXcgRE9NRXhjZXB0aW9uKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLicsICdBYm9ydEVycm9yJykpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gMS4gTGV0IHJlcXVlc3QgYmUgZmV0Y2hQYXJhbXPigJlzIHJlcXVlc3QuXG4gIGNvbnN0IHJlcXVlc3QgPSBmZXRjaFBhcmFtcy5yZXF1ZXN0XG5cbiAgLy8gMi4gTGV0IHJlc3BvbnNlIGJlIG51bGwuXG4gIGxldCByZXNwb25zZSA9IG51bGxcblxuICAvLyAzLiBMZXQgdGltaW5nSW5mbyBiZSBmZXRjaFBhcmFtc+KAmXMgdGltaW5nIGluZm8uXG4gIGNvbnN0IHRpbWluZ0luZm8gPSBmZXRjaFBhcmFtcy50aW1pbmdJbmZvXG5cbiAgLy8gNC4gTGV0IGh0dHBDYWNoZSBiZSB0aGUgcmVzdWx0IG9mIGRldGVybWluaW5nIHRoZSBIVFRQIGNhY2hlIHBhcnRpdGlvbixcbiAgLy8gZ2l2ZW4gcmVxdWVzdC5cbiAgLy8gVE9ETzogY2FjaGVcbiAgY29uc3QgaHR0cENhY2hlID0gbnVsbFxuXG4gIC8vIDUuIElmIGh0dHBDYWNoZSBpcyBudWxsLCB0aGVuIHNldCByZXF1ZXN04oCZcyBjYWNoZSBtb2RlIHRvIFwibm8tc3RvcmVcIi5cbiAgaWYgKGh0dHBDYWNoZSA9PSBudWxsKSB7XG4gICAgcmVxdWVzdC5jYWNoZSA9ICduby1zdG9yZSdcbiAgfVxuXG4gIC8vIDYuIExldCBuZXR3b3JrUGFydGl0aW9uS2V5IGJlIHRoZSByZXN1bHQgb2YgZGV0ZXJtaW5pbmcgdGhlIG5ldHdvcmtcbiAgLy8gcGFydGl0aW9uIGtleSBnaXZlbiByZXF1ZXN0LlxuICAvLyBUT0RPXG5cbiAgLy8gNy4gTGV0IG5ld0Nvbm5lY3Rpb24gYmUgXCJ5ZXNcIiBpZiBmb3JjZU5ld0Nvbm5lY3Rpb24gaXMgdHJ1ZTsgb3RoZXJ3aXNlXG4gIC8vIFwibm9cIi5cbiAgY29uc3QgbmV3Q29ubmVjdGlvbiA9IGZvcmNlTmV3Q29ubmVjdGlvbiA/ICd5ZXMnIDogJ25vJyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG5cbiAgLy8gOC4gU3dpdGNoIG9uIHJlcXVlc3TigJlzIG1vZGU6XG4gIGlmIChyZXF1ZXN0Lm1vZGUgPT09ICd3ZWJzb2NrZXQnKSB7XG4gICAgLy8gTGV0IGNvbm5lY3Rpb24gYmUgdGhlIHJlc3VsdCBvZiBvYnRhaW5pbmcgYSBXZWJTb2NrZXQgY29ubmVjdGlvbixcbiAgICAvLyBnaXZlbiByZXF1ZXN04oCZcyBjdXJyZW50IFVSTC5cbiAgICAvLyBUT0RPXG4gIH0gZWxzZSB7XG4gICAgLy8gTGV0IGNvbm5lY3Rpb24gYmUgdGhlIHJlc3VsdCBvZiBvYnRhaW5pbmcgYSBjb25uZWN0aW9uLCBnaXZlblxuICAgIC8vIG5ldHdvcmtQYXJ0aXRpb25LZXksIHJlcXVlc3TigJlzIGN1cnJlbnQgVVJM4oCZcyBvcmlnaW4sXG4gICAgLy8gaW5jbHVkZUNyZWRlbnRpYWxzLCBhbmQgZm9yY2VOZXdDb25uZWN0aW9uLlxuICAgIC8vIFRPRE9cbiAgfVxuXG4gIC8vIDkuIFJ1biB0aGVzZSBzdGVwcywgYnV0IGFib3J0IHdoZW4gdGhlIG9uZ29pbmcgZmV0Y2ggaXMgdGVybWluYXRlZDpcblxuICAvLyAgICAxLiBJZiBjb25uZWN0aW9uIGlzIGZhaWx1cmUsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cblxuICAvLyAgICAyLiBTZXQgdGltaW5nSW5mb+KAmXMgZmluYWwgY29ubmVjdGlvbiB0aW1pbmcgaW5mbyB0byB0aGUgcmVzdWx0IG9mXG4gIC8vICAgIGNhbGxpbmcgY2xhbXAgYW5kIGNvYXJzZW4gY29ubmVjdGlvbiB0aW1pbmcgaW5mbyB3aXRoIGNvbm5lY3Rpb27igJlzXG4gIC8vICAgIHRpbWluZyBpbmZvLCB0aW1pbmdJbmZv4oCZcyBwb3N0LXJlZGlyZWN0IHN0YXJ0IHRpbWUsIGFuZCBmZXRjaFBhcmFtc+KAmXNcbiAgLy8gICAgY3Jvc3Mtb3JpZ2luIGlzb2xhdGVkIGNhcGFiaWxpdHkuXG5cbiAgLy8gICAgMy4gSWYgY29ubmVjdGlvbiBpcyBub3QgYW4gSFRUUC8yIGNvbm5lY3Rpb24sIHJlcXVlc3TigJlzIGJvZHkgaXMgbm9uLW51bGwsXG4gIC8vICAgIGFuZCByZXF1ZXN04oCZcyBib2R54oCZcyBzb3VyY2UgaXMgbnVsbCwgdGhlbiBhcHBlbmQgKGBUcmFuc2Zlci1FbmNvZGluZ2AsXG4gIC8vICAgIGBjaHVua2VkYCkgdG8gcmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QuXG5cbiAgLy8gICAgNC4gU2V0IHRpbWluZ0luZm/igJlzIGZpbmFsIG5ldHdvcmstcmVxdWVzdCBzdGFydCB0aW1lIHRvIHRoZSBjb2Fyc2VuZWRcbiAgLy8gICAgc2hhcmVkIGN1cnJlbnQgdGltZSBnaXZlbiBmZXRjaFBhcmFtc+KAmXMgY3Jvc3Mtb3JpZ2luIGlzb2xhdGVkXG4gIC8vICAgIGNhcGFiaWxpdHkuXG5cbiAgLy8gICAgNS4gU2V0IHJlc3BvbnNlIHRvIHRoZSByZXN1bHQgb2YgbWFraW5nIGFuIEhUVFAgcmVxdWVzdCBvdmVyIGNvbm5lY3Rpb25cbiAgLy8gICAgdXNpbmcgcmVxdWVzdCB3aXRoIHRoZSBmb2xsb3dpbmcgY2F2ZWF0czpcblxuICAvLyAgICAgICAgLSBGb2xsb3cgdGhlIHJlbGV2YW50IHJlcXVpcmVtZW50cyBmcm9tIEhUVFAuIFtIVFRQXSBbSFRUUC1TRU1BTlRJQ1NdXG4gIC8vICAgICAgICBbSFRUUC1DT05EXSBbSFRUUC1DQUNISU5HXSBbSFRUUC1BVVRIXVxuXG4gIC8vICAgICAgICAtIElmIHJlcXVlc3TigJlzIGJvZHkgaXMgbm9uLW51bGwsIGFuZCByZXF1ZXN04oCZcyBib2R54oCZcyBzb3VyY2UgaXMgbnVsbCxcbiAgLy8gICAgICAgIHRoZW4gdGhlIHVzZXIgYWdlbnQgbWF5IGhhdmUgYSBidWZmZXIgb2YgdXAgdG8gNjQga2liaWJ5dGVzIGFuZCBzdG9yZVxuICAvLyAgICAgICAgYSBwYXJ0IG9mIHJlcXVlc3TigJlzIGJvZHkgaW4gdGhhdCBidWZmZXIuIElmIHRoZSB1c2VyIGFnZW50IHJlYWRzIGZyb21cbiAgLy8gICAgICAgIHJlcXVlc3TigJlzIGJvZHkgYmV5b25kIHRoYXQgYnVmZmVy4oCZcyBzaXplIGFuZCB0aGUgdXNlciBhZ2VudCBuZWVkcyB0b1xuICAvLyAgICAgICAgcmVzZW5kIHJlcXVlc3QsIHRoZW4gaW5zdGVhZCByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuXG4gIC8vICAgICAgICAtIFNldCB0aW1pbmdJbmZv4oCZcyBmaW5hbCBuZXR3b3JrLXJlc3BvbnNlIHN0YXJ0IHRpbWUgdG8gdGhlIGNvYXJzZW5lZFxuICAvLyAgICAgICAgc2hhcmVkIGN1cnJlbnQgdGltZSBnaXZlbiBmZXRjaFBhcmFtc+KAmXMgY3Jvc3Mtb3JpZ2luIGlzb2xhdGVkIGNhcGFiaWxpdHksXG4gIC8vICAgICAgICBpbW1lZGlhdGVseSBhZnRlciB0aGUgdXNlciBhZ2VudOKAmXMgSFRUUCBwYXJzZXIgcmVjZWl2ZXMgdGhlIGZpcnN0IGJ5dGVcbiAgLy8gICAgICAgIG9mIHRoZSByZXNwb25zZSAoZS5nLiwgZnJhbWUgaGVhZGVyIGJ5dGVzIGZvciBIVFRQLzIgb3IgcmVzcG9uc2Ugc3RhdHVzXG4gIC8vICAgICAgICBsaW5lIGZvciBIVFRQLzEueCkuXG5cbiAgLy8gICAgICAgIC0gV2FpdCB1bnRpbCBhbGwgdGhlIGhlYWRlcnMgYXJlIHRyYW5zbWl0dGVkLlxuXG4gIC8vICAgICAgICAtIEFueSByZXNwb25zZXMgd2hvc2Ugc3RhdHVzIGlzIGluIHRoZSByYW5nZSAxMDAgdG8gMTk5LCBpbmNsdXNpdmUsXG4gIC8vICAgICAgICBhbmQgaXMgbm90IDEwMSwgYXJlIHRvIGJlIGlnbm9yZWQsIGV4Y2VwdCBmb3IgdGhlIHB1cnBvc2VzIG9mIHNldHRpbmdcbiAgLy8gICAgICAgIHRpbWluZ0luZm/igJlzIGZpbmFsIG5ldHdvcmstcmVzcG9uc2Ugc3RhcnQgdGltZSBhYm92ZS5cblxuICAvLyAgICAtIElmIHJlcXVlc3TigJlzIGhlYWRlciBsaXN0IGNvbnRhaW5zIGBUcmFuc2Zlci1FbmNvZGluZ2AvYGNodW5rZWRgIGFuZFxuICAvLyAgICByZXNwb25zZSBpcyB0cmFuc2ZlcnJlZCB2aWEgSFRUUC8xLjAgb3Igb2xkZXIsIHRoZW4gcmV0dXJuIGEgbmV0d29ya1xuICAvLyAgICBlcnJvci5cblxuICAvLyAgICAtIElmIHRoZSBIVFRQIHJlcXVlc3QgcmVzdWx0cyBpbiBhIFRMUyBjbGllbnQgY2VydGlmaWNhdGUgZGlhbG9nLCB0aGVuOlxuXG4gIC8vICAgICAgICAxLiBJZiByZXF1ZXN04oCZcyB3aW5kb3cgaXMgYW4gZW52aXJvbm1lbnQgc2V0dGluZ3Mgb2JqZWN0LCBtYWtlIHRoZVxuICAvLyAgICAgICAgZGlhbG9nIGF2YWlsYWJsZSBpbiByZXF1ZXN04oCZcyB3aW5kb3cuXG5cbiAgLy8gICAgICAgIDIuIE90aGVyd2lzZSwgcmV0dXJuIGEgbmV0d29yayBlcnJvci5cblxuICAvLyBUbyB0cmFuc21pdCByZXF1ZXN04oCZcyBib2R5IGJvZHksIHJ1biB0aGVzZSBzdGVwczpcbiAgbGV0IHJlcXVlc3RCb2R5ID0gbnVsbFxuICAvLyAxLiBJZiBib2R5IGlzIG51bGwgYW5kIGZldGNoUGFyYW1z4oCZcyBwcm9jZXNzIHJlcXVlc3QgZW5kLW9mLWJvZHkgaXNcbiAgLy8gbm9uLW51bGwsIHRoZW4gcXVldWUgYSBmZXRjaCB0YXNrIGdpdmVuIGZldGNoUGFyYW1z4oCZcyBwcm9jZXNzIHJlcXVlc3RcbiAgLy8gZW5kLW9mLWJvZHkgYW5kIGZldGNoUGFyYW1z4oCZcyB0YXNrIGRlc3RpbmF0aW9uLlxuICBpZiAocmVxdWVzdC5ib2R5ID09IG51bGwgJiYgZmV0Y2hQYXJhbXMucHJvY2Vzc1JlcXVlc3RFbmRPZkJvZHkpIHtcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBmZXRjaFBhcmFtcy5wcm9jZXNzUmVxdWVzdEVuZE9mQm9keSgpKVxuICB9IGVsc2UgaWYgKHJlcXVlc3QuYm9keSAhPSBudWxsKSB7XG4gICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiBib2R5IGlzIG5vbi1udWxsOlxuXG4gICAgLy8gICAgMS4gTGV0IHByb2Nlc3NCb2R5Q2h1bmsgZ2l2ZW4gYnl0ZXMgYmUgdGhlc2Ugc3RlcHM6XG4gICAgY29uc3QgcHJvY2Vzc0JvZHlDaHVuayA9IGFzeW5jIGZ1bmN0aW9uICogKGJ5dGVzKSB7XG4gICAgICAvLyAxLiBJZiB0aGUgb25nb2luZyBmZXRjaCBpcyB0ZXJtaW5hdGVkLCB0aGVuIGFib3J0IHRoZXNlIHN0ZXBzLlxuICAgICAgaWYgKGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gMi4gUnVuIHRoaXMgc3RlcCBpbiBwYXJhbGxlbDogdHJhbnNtaXQgYnl0ZXMuXG4gICAgICB5aWVsZCBieXRlc1xuXG4gICAgICAvLyAzLiBJZiBmZXRjaFBhcmFtc+KAmXMgcHJvY2VzcyByZXF1ZXN0IGJvZHkgaXMgbm9uLW51bGwsIHRoZW4gcnVuXG4gICAgICAvLyBmZXRjaFBhcmFtc+KAmXMgcHJvY2VzcyByZXF1ZXN0IGJvZHkgZ2l2ZW4gYnl0ZXPigJlzIGxlbmd0aC5cbiAgICAgIGZldGNoUGFyYW1zLnByb2Nlc3NSZXF1ZXN0Qm9keUNodW5rTGVuZ3RoPy4oYnl0ZXMuYnl0ZUxlbmd0aClcbiAgICB9XG5cbiAgICAvLyAyLiBMZXQgcHJvY2Vzc0VuZE9mQm9keSBiZSB0aGVzZSBzdGVwczpcbiAgICBjb25zdCBwcm9jZXNzRW5kT2ZCb2R5ID0gKCkgPT4ge1xuICAgICAgLy8gMS4gSWYgZmV0Y2hQYXJhbXMgaXMgY2FuY2VsZWQsIHRoZW4gYWJvcnQgdGhlc2Ugc3RlcHMuXG4gICAgICBpZiAoaXNDYW5jZWxsZWQoZmV0Y2hQYXJhbXMpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyAyLiBJZiBmZXRjaFBhcmFtc+KAmXMgcHJvY2VzcyByZXF1ZXN0IGVuZC1vZi1ib2R5IGlzIG5vbi1udWxsLFxuICAgICAgLy8gdGhlbiBydW4gZmV0Y2hQYXJhbXPigJlzIHByb2Nlc3MgcmVxdWVzdCBlbmQtb2YtYm9keS5cbiAgICAgIGlmIChmZXRjaFBhcmFtcy5wcm9jZXNzUmVxdWVzdEVuZE9mQm9keSkge1xuICAgICAgICBmZXRjaFBhcmFtcy5wcm9jZXNzUmVxdWVzdEVuZE9mQm9keSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gMy4gTGV0IHByb2Nlc3NCb2R5RXJyb3IgZ2l2ZW4gZSBiZSB0aGVzZSBzdGVwczpcbiAgICBjb25zdCBwcm9jZXNzQm9keUVycm9yID0gKGUpID0+IHtcbiAgICAgIC8vIDEuIElmIGZldGNoUGFyYW1zIGlzIGNhbmNlbGVkLCB0aGVuIGFib3J0IHRoZXNlIHN0ZXBzLlxuICAgICAgaWYgKGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gMi4gSWYgZSBpcyBhbiBcIkFib3J0RXJyb3JcIiBET01FeGNlcHRpb24sIHRoZW4gYWJvcnQgZmV0Y2hQYXJhbXPigJlzIGNvbnRyb2xsZXIuXG4gICAgICBpZiAoZS5uYW1lID09PSAnQWJvcnRFcnJvcicpIHtcbiAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5hYm9ydCgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnRlcm1pbmF0ZShlKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDQuIEluY3JlbWVudGFsbHkgcmVhZCByZXF1ZXN04oCZcyBib2R5IGdpdmVuIHByb2Nlc3NCb2R5Q2h1bmssIHByb2Nlc3NFbmRPZkJvZHksXG4gICAgLy8gcHJvY2Vzc0JvZHlFcnJvciwgYW5kIGZldGNoUGFyYW1z4oCZcyB0YXNrIGRlc3RpbmF0aW9uLlxuICAgIHJlcXVlc3RCb2R5ID0gKGFzeW5jIGZ1bmN0aW9uICogKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm9yIGF3YWl0IChjb25zdCBieXRlcyBvZiByZXF1ZXN0LmJvZHkuc3RyZWFtKSB7XG4gICAgICAgICAgeWllbGQgKiBwcm9jZXNzQm9keUNodW5rKGJ5dGVzKVxuICAgICAgICB9XG4gICAgICAgIHByb2Nlc3NFbmRPZkJvZHkoKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHByb2Nlc3NCb2R5RXJyb3IoZXJyKVxuICAgICAgfVxuICAgIH0pKClcbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gc29ja2V0IGlzIG9ubHkgcHJvdmlkZWQgZm9yIHdlYnNvY2tldHNcbiAgICBjb25zdCB7IGJvZHksIHN0YXR1cywgc3RhdHVzVGV4dCwgaGVhZGVyc0xpc3QsIHNvY2tldCB9ID0gYXdhaXQgZGlzcGF0Y2goeyBib2R5OiByZXF1ZXN0Qm9keSB9KVxuXG4gICAgaWYgKHNvY2tldCkge1xuICAgICAgcmVzcG9uc2UgPSBtYWtlUmVzcG9uc2UoeyBzdGF0dXMsIHN0YXR1c1RleHQsIGhlYWRlcnNMaXN0LCBzb2NrZXQgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgaXRlcmF0b3IgPSBib2R5W1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpXG4gICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLm5leHQgPSAoKSA9PiBpdGVyYXRvci5uZXh0KClcblxuICAgICAgcmVzcG9uc2UgPSBtYWtlUmVzcG9uc2UoeyBzdGF0dXMsIHN0YXR1c1RleHQsIGhlYWRlcnNMaXN0IH0pXG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyAxMC4gSWYgYWJvcnRlZCwgdGhlbjpcbiAgICBpZiAoZXJyLm5hbWUgPT09ICdBYm9ydEVycm9yJykge1xuICAgICAgLy8gMS4gSWYgY29ubmVjdGlvbiB1c2VzIEhUVFAvMiwgdGhlbiB0cmFuc21pdCBhbiBSU1RfU1RSRUFNIGZyYW1lLlxuICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb25uZWN0aW9uLmRlc3Ryb3koKVxuXG4gICAgICAvLyAyLiBSZXR1cm4gdGhlIGFwcHJvcHJpYXRlIG5ldHdvcmsgZXJyb3IgZm9yIGZldGNoUGFyYW1zLlxuICAgICAgcmV0dXJuIG1ha2VBcHByb3ByaWF0ZU5ldHdvcmtFcnJvcihmZXRjaFBhcmFtcywgZXJyKVxuICAgIH1cblxuICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKGVycilcbiAgfVxuXG4gIC8vIDExLiBMZXQgcHVsbEFsZ29yaXRobSBiZSBhbiBhY3Rpb24gdGhhdCByZXN1bWVzIHRoZSBvbmdvaW5nIGZldGNoXG4gIC8vIGlmIGl0IGlzIHN1c3BlbmRlZC5cbiAgY29uc3QgcHVsbEFsZ29yaXRobSA9ICgpID0+IHtcbiAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnJlc3VtZSgpXG4gIH1cblxuICAvLyAxMi4gTGV0IGNhbmNlbEFsZ29yaXRobSBiZSBhbiBhbGdvcml0aG0gdGhhdCBhYm9ydHMgZmV0Y2hQYXJhbXPigJlzXG4gIC8vIGNvbnRyb2xsZXIgd2l0aCByZWFzb24sIGdpdmVuIHJlYXNvbi5cbiAgY29uc3QgY2FuY2VsQWxnb3JpdGhtID0gKHJlYXNvbikgPT4ge1xuICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuYWJvcnQocmVhc29uKVxuICB9XG5cbiAgLy8gMTMuIExldCBoaWdoV2F0ZXJNYXJrIGJlIGEgbm9uLW5lZ2F0aXZlLCBub24tTmFOIG51bWJlciwgY2hvc2VuIGJ5XG4gIC8vIHRoZSB1c2VyIGFnZW50LlxuICAvLyBUT0RPXG5cbiAgLy8gMTQuIExldCBzaXplQWxnb3JpdGhtIGJlIGFuIGFsZ29yaXRobSB0aGF0IGFjY2VwdHMgYSBjaHVuayBvYmplY3RcbiAgLy8gYW5kIHJldHVybnMgYSBub24tbmVnYXRpdmUsIG5vbi1OYU4sIG5vbi1pbmZpbml0ZSBudW1iZXIsIGNob3NlbiBieSB0aGUgdXNlciBhZ2VudC5cbiAgLy8gVE9ET1xuXG4gIC8vIDE1LiBMZXQgc3RyZWFtIGJlIGEgbmV3IFJlYWRhYmxlU3RyZWFtLlxuICAvLyAxNi4gU2V0IHVwIHN0cmVhbSB3aXRoIHB1bGxBbGdvcml0aG0gc2V0IHRvIHB1bGxBbGdvcml0aG0sXG4gIC8vIGNhbmNlbEFsZ29yaXRobSBzZXQgdG8gY2FuY2VsQWxnb3JpdGhtLCBoaWdoV2F0ZXJNYXJrIHNldCB0b1xuICAvLyBoaWdoV2F0ZXJNYXJrLCBhbmQgc2l6ZUFsZ29yaXRobSBzZXQgdG8gc2l6ZUFsZ29yaXRobS5cbiAgaWYgKCFSZWFkYWJsZVN0cmVhbSkge1xuICAgIFJlYWRhYmxlU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtL3dlYicpLlJlYWRhYmxlU3RyZWFtXG4gIH1cblxuICBjb25zdCBzdHJlYW0gPSBuZXcgUmVhZGFibGVTdHJlYW0oXG4gICAge1xuICAgICAgYXN5bmMgc3RhcnQgKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb250cm9sbGVyID0gY29udHJvbGxlclxuICAgICAgfSxcbiAgICAgIGFzeW5jIHB1bGwgKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgYXdhaXQgcHVsbEFsZ29yaXRobShjb250cm9sbGVyKVxuICAgICAgfSxcbiAgICAgIGFzeW5jIGNhbmNlbCAocmVhc29uKSB7XG4gICAgICAgIGF3YWl0IGNhbmNlbEFsZ29yaXRobShyZWFzb24pXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBoaWdoV2F0ZXJNYXJrOiAwLFxuICAgICAgc2l6ZSAoKSB7XG4gICAgICAgIHJldHVybiAxXG4gICAgICB9XG4gICAgfVxuICApXG5cbiAgLy8gMTcuIFJ1biB0aGVzZSBzdGVwcywgYnV0IGFib3J0IHdoZW4gdGhlIG9uZ29pbmcgZmV0Y2ggaXMgdGVybWluYXRlZDpcblxuICAvLyAgICAxLiBTZXQgcmVzcG9uc2XigJlzIGJvZHkgdG8gYSBuZXcgYm9keSB3aG9zZSBzdHJlYW0gaXMgc3RyZWFtLlxuICByZXNwb25zZS5ib2R5ID0geyBzdHJlYW0gfVxuXG4gIC8vICAgIDIuIElmIHJlc3BvbnNlIGlzIG5vdCBhIG5ldHdvcmsgZXJyb3IgYW5kIHJlcXVlc3TigJlzIGNhY2hlIG1vZGUgaXNcbiAgLy8gICAgbm90IFwibm8tc3RvcmVcIiwgdGhlbiB1cGRhdGUgcmVzcG9uc2UgaW4gaHR0cENhY2hlIGZvciByZXF1ZXN0LlxuICAvLyAgICBUT0RPXG5cbiAgLy8gICAgMy4gSWYgaW5jbHVkZUNyZWRlbnRpYWxzIGlzIHRydWUgYW5kIHRoZSB1c2VyIGFnZW50IGlzIG5vdCBjb25maWd1cmVkXG4gIC8vICAgIHRvIGJsb2NrIGNvb2tpZXMgZm9yIHJlcXVlc3QgKHNlZSBzZWN0aW9uIDcgb2YgW0NPT0tJRVNdKSwgdGhlbiBydW4gdGhlXG4gIC8vICAgIFwic2V0LWNvb2tpZS1zdHJpbmdcIiBwYXJzaW5nIGFsZ29yaXRobSAoc2VlIHNlY3Rpb24gNS4yIG9mIFtDT09LSUVTXSkgb25cbiAgLy8gICAgdGhlIHZhbHVlIG9mIGVhY2ggaGVhZGVyIHdob3NlIG5hbWUgaXMgYSBieXRlLWNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yXG4gIC8vICAgIGBTZXQtQ29va2llYCBpbiByZXNwb25zZeKAmXMgaGVhZGVyIGxpc3QsIGlmIGFueSwgYW5kIHJlcXVlc3TigJlzIGN1cnJlbnQgVVJMLlxuICAvLyAgICBUT0RPXG5cbiAgLy8gMTguIElmIGFib3J0ZWQsIHRoZW46XG4gIC8vIFRPRE9cblxuICAvLyAxOS4gUnVuIHRoZXNlIHN0ZXBzIGluIHBhcmFsbGVsOlxuXG4gIC8vICAgIDEuIFJ1biB0aGVzZSBzdGVwcywgYnV0IGFib3J0IHdoZW4gZmV0Y2hQYXJhbXMgaXMgY2FuY2VsZWQ6XG4gIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIub24oJ3Rlcm1pbmF0ZWQnLCBvbkFib3J0ZWQpXG4gIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIucmVzdW1lID0gYXN5bmMgKCkgPT4ge1xuICAgIC8vIDEuIFdoaWxlIHRydWVcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgLy8gMS0zLiBTZWUgb25EYXRhLi4uXG5cbiAgICAgIC8vIDQuIFNldCBieXRlcyB0byB0aGUgcmVzdWx0IG9mIGhhbmRsaW5nIGNvbnRlbnQgY29kaW5ncyBnaXZlblxuICAgICAgLy8gY29kaW5ncyBhbmQgYnl0ZXMuXG4gICAgICBsZXQgYnl0ZXNcbiAgICAgIGxldCBpc0ZhaWx1cmVcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IGZldGNoUGFyYW1zLmNvbnRyb2xsZXIubmV4dCgpXG5cbiAgICAgICAgaWYgKGlzQWJvcnRlZChmZXRjaFBhcmFtcykpIHtcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG5cbiAgICAgICAgYnl0ZXMgPSBkb25lID8gdW5kZWZpbmVkIDogdmFsdWVcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoZmV0Y2hQYXJhbXMuY29udHJvbGxlci5lbmRlZCAmJiAhdGltaW5nSW5mby5lbmNvZGVkQm9keVNpemUpIHtcbiAgICAgICAgICAvLyB6bGliIGRvZXNuJ3QgbGlrZSBlbXB0eSBzdHJlYW1zLlxuICAgICAgICAgIGJ5dGVzID0gdW5kZWZpbmVkXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnl0ZXMgPSBlcnJcblxuICAgICAgICAgIC8vIGVyciBtYXkgYmUgcHJvcGFnYXRlZCBmcm9tIHRoZSByZXN1bHQgb2YgY2FsbGluZyByZWFkYWJsZXN0cmVhbS5jYW5jZWwsXG4gICAgICAgICAgLy8gd2hpY2ggbWlnaHQgbm90IGJlIGFuIGVycm9yLiBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMjAwOVxuICAgICAgICAgIGlzRmFpbHVyZSA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoYnl0ZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyAyLiBPdGhlcndpc2UsIGlmIHRoZSBieXRlcyB0cmFuc21pc3Npb24gZm9yIHJlc3BvbnNl4oCZcyBtZXNzYWdlXG4gICAgICAgIC8vIGJvZHkgaXMgZG9uZSBub3JtYWxseSBhbmQgc3RyZWFtIGlzIHJlYWRhYmxlLCB0aGVuIGNsb3NlXG4gICAgICAgIC8vIHN0cmVhbSwgZmluYWxpemUgcmVzcG9uc2UgZm9yIGZldGNoUGFyYW1zIGFuZCByZXNwb25zZSwgYW5kXG4gICAgICAgIC8vIGFib3J0IHRoZXNlIGluLXBhcmFsbGVsIHN0ZXBzLlxuICAgICAgICByZWFkYWJsZVN0cmVhbUNsb3NlKGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29udHJvbGxlcilcblxuICAgICAgICBmaW5hbGl6ZVJlc3BvbnNlKGZldGNoUGFyYW1zLCByZXNwb25zZSlcblxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gNS4gSW5jcmVhc2UgdGltaW5nSW5mb+KAmXMgZGVjb2RlZCBib2R5IHNpemUgYnkgYnl0ZXPigJlzIGxlbmd0aC5cbiAgICAgIHRpbWluZ0luZm8uZGVjb2RlZEJvZHlTaXplICs9IGJ5dGVzPy5ieXRlTGVuZ3RoID8/IDBcblxuICAgICAgLy8gNi4gSWYgYnl0ZXMgaXMgZmFpbHVyZSwgdGhlbiB0ZXJtaW5hdGUgZmV0Y2hQYXJhbXPigJlzIGNvbnRyb2xsZXIuXG4gICAgICBpZiAoaXNGYWlsdXJlKSB7XG4gICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIudGVybWluYXRlKGJ5dGVzKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gNy4gRW5xdWV1ZSBhIFVpbnQ4QXJyYXkgd3JhcHBpbmcgYW4gQXJyYXlCdWZmZXIgY29udGFpbmluZyBieXRlc1xuICAgICAgLy8gaW50byBzdHJlYW0uXG4gICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbnRyb2xsZXIuZW5xdWV1ZShuZXcgVWludDhBcnJheShieXRlcykpXG5cbiAgICAgIC8vIDguIElmIHN0cmVhbSBpcyBlcnJvcmVkLCB0aGVuIHRlcm1pbmF0ZSB0aGUgb25nb2luZyBmZXRjaC5cbiAgICAgIGlmIChpc0Vycm9yZWQoc3RyZWFtKSkge1xuICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnRlcm1pbmF0ZSgpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyA5LiBJZiBzdHJlYW0gZG9lc27igJl0IG5lZWQgbW9yZSBkYXRhIGFzayB0aGUgdXNlciBhZ2VudCB0byBzdXNwZW5kXG4gICAgICAvLyB0aGUgb25nb2luZyBmZXRjaC5cbiAgICAgIGlmICghZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb250cm9sbGVyLmRlc2lyZWRTaXplKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vICAgIDIuIElmIGFib3J0ZWQsIHRoZW46XG4gIGZ1bmN0aW9uIG9uQWJvcnRlZCAocmVhc29uKSB7XG4gICAgLy8gMi4gSWYgZmV0Y2hQYXJhbXMgaXMgYWJvcnRlZCwgdGhlbjpcbiAgICBpZiAoaXNBYm9ydGVkKGZldGNoUGFyYW1zKSkge1xuICAgICAgLy8gMS4gU2V0IHJlc3BvbnNl4oCZcyBhYm9ydGVkIGZsYWcuXG4gICAgICByZXNwb25zZS5hYm9ydGVkID0gdHJ1ZVxuXG4gICAgICAvLyAyLiBJZiBzdHJlYW0gaXMgcmVhZGFibGUsIHRoZW4gZXJyb3Igc3RyZWFtIHdpdGggdGhlIHJlc3VsdCBvZlxuICAgICAgLy8gICAgZGVzZXJpYWxpemUgYSBzZXJpYWxpemVkIGFib3J0IHJlYXNvbiBnaXZlbiBmZXRjaFBhcmFtc+KAmXNcbiAgICAgIC8vICAgIGNvbnRyb2xsZXLigJlzIHNlcmlhbGl6ZWQgYWJvcnQgcmVhc29uIGFuZCBhblxuICAgICAgLy8gICAgaW1wbGVtZW50YXRpb24tZGVmaW5lZCByZWFsbS5cbiAgICAgIGlmIChpc1JlYWRhYmxlKHN0cmVhbSkpIHtcbiAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb250cm9sbGVyLmVycm9yKFxuICAgICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuc2VyaWFsaXplZEFib3J0UmVhc29uXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gMy4gT3RoZXJ3aXNlLCBpZiBzdHJlYW0gaXMgcmVhZGFibGUsIGVycm9yIHN0cmVhbSB3aXRoIGEgVHlwZUVycm9yLlxuICAgICAgaWYgKGlzUmVhZGFibGUoc3RyZWFtKSkge1xuICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbnRyb2xsZXIuZXJyb3IobmV3IFR5cGVFcnJvcigndGVybWluYXRlZCcsIHtcbiAgICAgICAgICBjYXVzZTogaXNFcnJvckxpa2UocmVhc29uKSA/IHJlYXNvbiA6IHVuZGVmaW5lZFxuICAgICAgICB9KSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA0LiBJZiBjb25uZWN0aW9uIHVzZXMgSFRUUC8yLCB0aGVuIHRyYW5zbWl0IGFuIFJTVF9TVFJFQU0gZnJhbWUuXG4gICAgLy8gNS4gT3RoZXJ3aXNlLCB0aGUgdXNlciBhZ2VudCBzaG91bGQgY2xvc2UgY29ubmVjdGlvbiB1bmxlc3MgaXQgd291bGQgYmUgYmFkIGZvciBwZXJmb3JtYW5jZSB0byBkbyBzby5cbiAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbm5lY3Rpb24uZGVzdHJveSgpXG4gIH1cblxuICAvLyAyMC4gUmV0dXJuIHJlc3BvbnNlLlxuICByZXR1cm4gcmVzcG9uc2VcblxuICBhc3luYyBmdW5jdGlvbiBkaXNwYXRjaCAoeyBib2R5IH0pIHtcbiAgICBjb25zdCB1cmwgPSByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KVxuICAgIC8qKiBAdHlwZSB7aW1wb3J0KCcuLi8uLicpLkFnZW50fSAqL1xuICAgIGNvbnN0IGFnZW50ID0gZmV0Y2hQYXJhbXMuY29udHJvbGxlci5kaXNwYXRjaGVyXG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gYWdlbnQuZGlzcGF0Y2goXG4gICAgICB7XG4gICAgICAgIHBhdGg6IHVybC5wYXRobmFtZSArIHVybC5zZWFyY2gsXG4gICAgICAgIG9yaWdpbjogdXJsLm9yaWdpbixcbiAgICAgICAgbWV0aG9kOiByZXF1ZXN0Lm1ldGhvZCxcbiAgICAgICAgYm9keTogZmV0Y2hQYXJhbXMuY29udHJvbGxlci5kaXNwYXRjaGVyLmlzTW9ja0FjdGl2ZSA/IHJlcXVlc3QuYm9keSAmJiAocmVxdWVzdC5ib2R5LnNvdXJjZSB8fCByZXF1ZXN0LmJvZHkuc3RyZWFtKSA6IGJvZHksXG4gICAgICAgIGhlYWRlcnM6IHJlcXVlc3QuaGVhZGVyc0xpc3QuZW50cmllcyxcbiAgICAgICAgbWF4UmVkaXJlY3Rpb25zOiAwLFxuICAgICAgICB1cGdyYWRlOiByZXF1ZXN0Lm1vZGUgPT09ICd3ZWJzb2NrZXQnID8gJ3dlYnNvY2tldCcgOiB1bmRlZmluZWRcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJvZHk6IG51bGwsXG4gICAgICAgIGFib3J0OiBudWxsLFxuXG4gICAgICAgIG9uQ29ubmVjdCAoYWJvcnQpIHtcbiAgICAgICAgICAvLyBUT0RPIChmaXgpOiBEbyB3ZSBuZWVkIGNvbm5lY3Rpb24gaGVyZT9cbiAgICAgICAgICBjb25zdCB7IGNvbm5lY3Rpb24gfSA9IGZldGNoUGFyYW1zLmNvbnRyb2xsZXJcblxuICAgICAgICAgIGlmIChjb25uZWN0aW9uLmRlc3Ryb3llZCkge1xuICAgICAgICAgICAgYWJvcnQobmV3IERPTUV4Y2VwdGlvbignVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC4nLCAnQWJvcnRFcnJvcicpKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLm9uKCd0ZXJtaW5hdGVkJywgYWJvcnQpXG4gICAgICAgICAgICB0aGlzLmFib3J0ID0gY29ubmVjdGlvbi5hYm9ydCA9IGFib3J0XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIG9uSGVhZGVycyAoc3RhdHVzLCBoZWFkZXJzTGlzdCwgcmVzdW1lLCBzdGF0dXNUZXh0KSB7XG4gICAgICAgICAgaWYgKHN0YXR1cyA8IDIwMCkge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IGNvZGluZ3MgPSBbXVxuICAgICAgICAgIGxldCBsb2NhdGlvbiA9ICcnXG5cbiAgICAgICAgICBjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKVxuXG4gICAgICAgICAgLy8gRm9yIEgyLCB0aGUgaGVhZGVycyBhcmUgYSBwbGFpbiBKUyBvYmplY3RcbiAgICAgICAgICAvLyBXZSBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZW0gYW5kIGl0ZXJhdGUgYWNjb3JkaW5nbHlcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzTGlzdCkpIHtcbiAgICAgICAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgaGVhZGVyc0xpc3QubGVuZ3RoOyBuICs9IDIpIHtcbiAgICAgICAgICAgICAgY29uc3Qga2V5ID0gaGVhZGVyc0xpc3RbbiArIDBdLnRvU3RyaW5nKCdsYXRpbjEnKVxuICAgICAgICAgICAgICBjb25zdCB2YWwgPSBoZWFkZXJzTGlzdFtuICsgMV0udG9TdHJpbmcoJ2xhdGluMScpXG4gICAgICAgICAgICAgIGlmIChrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtZW5jb2RpbmcnKSB7XG4gICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzcyMzEjc2VjdGlvbi0zLjEuMi4xXG4gICAgICAgICAgICAgICAgLy8gXCJBbGwgY29udGVudC1jb2RpbmcgdmFsdWVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlLi4uXCJcbiAgICAgICAgICAgICAgICBjb2RpbmdzID0gdmFsLnRvTG93ZXJDYXNlKCkuc3BsaXQoJywnKS5tYXAoKHgpID0+IHgudHJpbSgpKVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleS50b0xvd2VyQ2FzZSgpID09PSAnbG9jYXRpb24nKSB7XG4gICAgICAgICAgICAgICAgbG9jYXRpb24gPSB2YWxcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGhlYWRlcnNba0hlYWRlcnNMaXN0XS5hcHBlbmQoa2V5LCB2YWwpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhoZWFkZXJzTGlzdClcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgICAgICAgY29uc3QgdmFsID0gaGVhZGVyc0xpc3Rba2V5XVxuICAgICAgICAgICAgICBpZiAoa2V5LnRvTG93ZXJDYXNlKCkgPT09ICdjb250ZW50LWVuY29kaW5nJykge1xuICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM3MjMxI3NlY3Rpb24tMy4xLjIuMVxuICAgICAgICAgICAgICAgIC8vIFwiQWxsIGNvbnRlbnQtY29kaW5nIHZhbHVlcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZS4uLlwiXG4gICAgICAgICAgICAgICAgY29kaW5ncyA9IHZhbC50b0xvd2VyQ2FzZSgpLnNwbGl0KCcsJykubWFwKCh4KSA9PiB4LnRyaW0oKSkucmV2ZXJzZSgpXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5LnRvTG93ZXJDYXNlKCkgPT09ICdsb2NhdGlvbicpIHtcbiAgICAgICAgICAgICAgICBsb2NhdGlvbiA9IHZhbFxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaGVhZGVyc1trSGVhZGVyc0xpc3RdLmFwcGVuZChrZXksIHZhbClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmJvZHkgPSBuZXcgUmVhZGFibGUoeyByZWFkOiByZXN1bWUgfSlcblxuICAgICAgICAgIGNvbnN0IGRlY29kZXJzID0gW11cblxuICAgICAgICAgIGNvbnN0IHdpbGxGb2xsb3cgPSByZXF1ZXN0LnJlZGlyZWN0ID09PSAnZm9sbG93JyAmJlxuICAgICAgICAgICAgbG9jYXRpb24gJiZcbiAgICAgICAgICAgIHJlZGlyZWN0U3RhdHVzU2V0LmhhcyhzdGF0dXMpXG5cbiAgICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvQ29udGVudC1FbmNvZGluZ1xuICAgICAgICAgIGlmIChyZXF1ZXN0Lm1ldGhvZCAhPT0gJ0hFQUQnICYmIHJlcXVlc3QubWV0aG9kICE9PSAnQ09OTkVDVCcgJiYgIW51bGxCb2R5U3RhdHVzLmluY2x1ZGVzKHN0YXR1cykgJiYgIXdpbGxGb2xsb3cpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29kaW5nIG9mIGNvZGluZ3MpIHtcbiAgICAgICAgICAgICAgLy8gaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzkxMTIuaHRtbCNzZWN0aW9uLTcuMlxuICAgICAgICAgICAgICBpZiAoY29kaW5nID09PSAneC1nemlwJyB8fCBjb2RpbmcgPT09ICdnemlwJykge1xuICAgICAgICAgICAgICAgIGRlY29kZXJzLnB1c2goemxpYi5jcmVhdGVHdW56aXAoe1xuICAgICAgICAgICAgICAgICAgLy8gQmUgbGVzcyBzdHJpY3Qgd2hlbiBkZWNvZGluZyBjb21wcmVzc2VkIHJlc3BvbnNlcywgc2luY2Ugc29tZXRpbWVzXG4gICAgICAgICAgICAgICAgICAvLyBzZXJ2ZXJzIHNlbmQgc2xpZ2h0bHkgaW52YWxpZCByZXNwb25zZXMgdGhhdCBhcmUgc3RpbGwgYWNjZXB0ZWRcbiAgICAgICAgICAgICAgICAgIC8vIGJ5IGNvbW1vbiBicm93c2Vycy5cbiAgICAgICAgICAgICAgICAgIC8vIEFsd2F5cyB1c2luZyBaX1NZTkNfRkxVU0ggaXMgd2hhdCBjVVJMIGRvZXMuXG4gICAgICAgICAgICAgICAgICBmbHVzaDogemxpYi5jb25zdGFudHMuWl9TWU5DX0ZMVVNILFxuICAgICAgICAgICAgICAgICAgZmluaXNoRmx1c2g6IHpsaWIuY29uc3RhbnRzLlpfU1lOQ19GTFVTSFxuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvZGluZyA9PT0gJ2RlZmxhdGUnKSB7XG4gICAgICAgICAgICAgICAgZGVjb2RlcnMucHVzaCh6bGliLmNyZWF0ZUluZmxhdGUoKSlcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb2RpbmcgPT09ICdicicpIHtcbiAgICAgICAgICAgICAgICBkZWNvZGVycy5wdXNoKHpsaWIuY3JlYXRlQnJvdGxpRGVjb21wcmVzcygpKVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRlY29kZXJzLmxlbmd0aCA9IDBcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgICBzdGF0dXNUZXh0LFxuICAgICAgICAgICAgaGVhZGVyc0xpc3Q6IGhlYWRlcnNba0hlYWRlcnNMaXN0XSxcbiAgICAgICAgICAgIGJvZHk6IGRlY29kZXJzLmxlbmd0aFxuICAgICAgICAgICAgICA/IHBpcGVsaW5lKHRoaXMuYm9keSwgLi4uZGVjb2RlcnMsICgpID0+IHsgfSlcbiAgICAgICAgICAgICAgOiB0aGlzLmJvZHkub24oJ2Vycm9yJywgKCkgPT4ge30pXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH0sXG5cbiAgICAgICAgb25EYXRhIChjaHVuaykge1xuICAgICAgICAgIGlmIChmZXRjaFBhcmFtcy5jb250cm9sbGVyLmR1bXApIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDEuIElmIG9uZSBvciBtb3JlIGJ5dGVzIGhhdmUgYmVlbiB0cmFuc21pdHRlZCBmcm9tIHJlc3BvbnNl4oCZc1xuICAgICAgICAgIC8vIG1lc3NhZ2UgYm9keSwgdGhlbjpcblxuICAgICAgICAgIC8vICAxLiBMZXQgYnl0ZXMgYmUgdGhlIHRyYW5zbWl0dGVkIGJ5dGVzLlxuICAgICAgICAgIGNvbnN0IGJ5dGVzID0gY2h1bmtcblxuICAgICAgICAgIC8vICAyLiBMZXQgY29kaW5ncyBiZSB0aGUgcmVzdWx0IG9mIGV4dHJhY3RpbmcgaGVhZGVyIGxpc3QgdmFsdWVzXG4gICAgICAgICAgLy8gIGdpdmVuIGBDb250ZW50LUVuY29kaW5nYCBhbmQgcmVzcG9uc2XigJlzIGhlYWRlciBsaXN0LlxuICAgICAgICAgIC8vICBTZWUgcHVsbEFsZ29yaXRobS5cblxuICAgICAgICAgIC8vICAzLiBJbmNyZWFzZSB0aW1pbmdJbmZv4oCZcyBlbmNvZGVkIGJvZHkgc2l6ZSBieSBieXRlc+KAmXMgbGVuZ3RoLlxuICAgICAgICAgIHRpbWluZ0luZm8uZW5jb2RlZEJvZHlTaXplICs9IGJ5dGVzLmJ5dGVMZW5ndGhcblxuICAgICAgICAgIC8vICA0LiBTZWUgcHVsbEFsZ29yaXRobS4uLlxuXG4gICAgICAgICAgcmV0dXJuIHRoaXMuYm9keS5wdXNoKGJ5dGVzKVxuICAgICAgICB9LFxuXG4gICAgICAgIG9uQ29tcGxldGUgKCkge1xuICAgICAgICAgIGlmICh0aGlzLmFib3J0KSB7XG4gICAgICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLm9mZigndGVybWluYXRlZCcsIHRoaXMuYWJvcnQpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5lbmRlZCA9IHRydWVcblxuICAgICAgICAgIHRoaXMuYm9keS5wdXNoKG51bGwpXG4gICAgICAgIH0sXG5cbiAgICAgICAgb25FcnJvciAoZXJyb3IpIHtcbiAgICAgICAgICBpZiAodGhpcy5hYm9ydCkge1xuICAgICAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5vZmYoJ3Rlcm1pbmF0ZWQnLCB0aGlzLmFib3J0KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuYm9keT8uZGVzdHJveShlcnJvcilcblxuICAgICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIudGVybWluYXRlKGVycm9yKVxuXG4gICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICB9LFxuXG4gICAgICAgIG9uVXBncmFkZSAoc3RhdHVzLCBoZWFkZXJzTGlzdCwgc29ja2V0KSB7XG4gICAgICAgICAgaWYgKHN0YXR1cyAhPT0gMTAxKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKVxuXG4gICAgICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBoZWFkZXJzTGlzdC5sZW5ndGg7IG4gKz0gMikge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gaGVhZGVyc0xpc3RbbiArIDBdLnRvU3RyaW5nKCdsYXRpbjEnKVxuICAgICAgICAgICAgY29uc3QgdmFsID0gaGVhZGVyc0xpc3RbbiArIDFdLnRvU3RyaW5nKCdsYXRpbjEnKVxuXG4gICAgICAgICAgICBoZWFkZXJzW2tIZWFkZXJzTGlzdF0uYXBwZW5kKGtleSwgdmFsKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgICAgc3RhdHVzVGV4dDogU1RBVFVTX0NPREVTW3N0YXR1c10sXG4gICAgICAgICAgICBoZWFkZXJzTGlzdDogaGVhZGVyc1trSGVhZGVyc0xpc3RdLFxuICAgICAgICAgICAgc29ja2V0XG4gICAgICAgICAgfSlcblxuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBmZXRjaCxcbiAgRmV0Y2gsXG4gIGZldGNoaW5nLFxuICBmaW5hbGl6ZUFuZFJlcG9ydFRpbWluZ1xufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGtTdGF0ZTogU3ltYm9sKCdGaWxlUmVhZGVyIHN0YXRlJyksXG4gIGtSZXN1bHQ6IFN5bWJvbCgnRmlsZVJlYWRlciByZXN1bHQnKSxcbiAga0Vycm9yOiBTeW1ib2woJ0ZpbGVSZWFkZXIgZXJyb3InKSxcbiAga0xhc3RQcm9ncmVzc0V2ZW50RmlyZWQ6IFN5bWJvbCgnRmlsZVJlYWRlciBsYXN0IHByb2dyZXNzIGV2ZW50IGZpcmVkIHRpbWVzdGFtcCcpLFxuICBrRXZlbnRzOiBTeW1ib2woJ0ZpbGVSZWFkZXIgZXZlbnRzJyksXG4gIGtBYm9ydGVkOiBTeW1ib2woJ0ZpbGVSZWFkZXIgYWJvcnRlZCcpXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvd2ViaWRsJylcblxuY29uc3Qga1N0YXRlID0gU3ltYm9sKCdQcm9ncmVzc0V2ZW50IHN0YXRlJylcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8veGhyLnNwZWMud2hhdHdnLm9yZy8jcHJvZ3Jlc3NldmVudFxuICovXG5jbGFzcyBQcm9ncmVzc0V2ZW50IGV4dGVuZHMgRXZlbnQge1xuICBjb25zdHJ1Y3RvciAodHlwZSwgZXZlbnRJbml0RGljdCA9IHt9KSB7XG4gICAgdHlwZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyh0eXBlKVxuICAgIGV2ZW50SW5pdERpY3QgPSB3ZWJpZGwuY29udmVydGVycy5Qcm9ncmVzc0V2ZW50SW5pdChldmVudEluaXREaWN0ID8/IHt9KVxuXG4gICAgc3VwZXIodHlwZSwgZXZlbnRJbml0RGljdClcblxuICAgIHRoaXNba1N0YXRlXSA9IHtcbiAgICAgIGxlbmd0aENvbXB1dGFibGU6IGV2ZW50SW5pdERpY3QubGVuZ3RoQ29tcHV0YWJsZSxcbiAgICAgIGxvYWRlZDogZXZlbnRJbml0RGljdC5sb2FkZWQsXG4gICAgICB0b3RhbDogZXZlbnRJbml0RGljdC50b3RhbFxuICAgIH1cbiAgfVxuXG4gIGdldCBsZW5ndGhDb21wdXRhYmxlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBQcm9ncmVzc0V2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5sZW5ndGhDb21wdXRhYmxlXG4gIH1cblxuICBnZXQgbG9hZGVkICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBQcm9ncmVzc0V2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5sb2FkZWRcbiAgfVxuXG4gIGdldCB0b3RhbCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUHJvZ3Jlc3NFdmVudClcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0udG90YWxcbiAgfVxufVxuXG53ZWJpZGwuY29udmVydGVycy5Qcm9ncmVzc0V2ZW50SW5pdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGtleTogJ2xlbmd0aENvbXB1dGFibGUnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdsb2FkZWQnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIGxvbmcgbG9uZyddLFxuICAgIGRlZmF1bHRWYWx1ZTogMFxuICB9LFxuICB7XG4gICAga2V5OiAndG90YWwnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIGxvbmcgbG9uZyddLFxuICAgIGRlZmF1bHRWYWx1ZTogMFxuICB9LFxuICB7XG4gICAga2V5OiAnYnViYmxlcycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2VcbiAgfSxcbiAge1xuICAgIGtleTogJ2NhbmNlbGFibGUnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjb21wb3NlZCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2VcbiAgfVxuXSlcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFByb2dyZXNzRXZlbnRcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbi8qKlxuICogQHNlZSBodHRwczovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1lbmNvZGluZy1nZXRcbiAqIEBwYXJhbSB7c3RyaW5nfHVuZGVmaW5lZH0gbGFiZWxcbiAqL1xuZnVuY3Rpb24gZ2V0RW5jb2RpbmcgKGxhYmVsKSB7XG4gIGlmICghbGFiZWwpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICAvLyAxLiBSZW1vdmUgYW55IGxlYWRpbmcgYW5kIHRyYWlsaW5nIEFTQ0lJIHdoaXRlc3BhY2UgZnJvbSBsYWJlbC5cbiAgLy8gMi4gSWYgbGFiZWwgaXMgYW4gQVNDSUkgY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBmb3IgYW55IG9mIHRoZVxuICAvLyAgICBsYWJlbHMgbGlzdGVkIGluIHRoZSB0YWJsZSBiZWxvdywgdGhlbiByZXR1cm4gdGhlXG4gIC8vICAgIGNvcnJlc3BvbmRpbmcgZW5jb2Rpbmc7IG90aGVyd2lzZSByZXR1cm4gZmFpbHVyZS5cbiAgc3dpdGNoIChsYWJlbC50cmltKCkudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgJ3VuaWNvZGUtMS0xLXV0Zi04JzpcbiAgICBjYXNlICd1bmljb2RlMTF1dGY4JzpcbiAgICBjYXNlICd1bmljb2RlMjB1dGY4JzpcbiAgICBjYXNlICd1dGYtOCc6XG4gICAgY2FzZSAndXRmOCc6XG4gICAgY2FzZSAneC11bmljb2RlMjB1dGY4JzpcbiAgICAgIHJldHVybiAnVVRGLTgnXG4gICAgY2FzZSAnODY2JzpcbiAgICBjYXNlICdjcDg2Nic6XG4gICAgY2FzZSAnY3NpYm04NjYnOlxuICAgIGNhc2UgJ2libTg2Nic6XG4gICAgICByZXR1cm4gJ0lCTTg2NidcbiAgICBjYXNlICdjc2lzb2xhdGluMic6XG4gICAgY2FzZSAnaXNvLTg4NTktMic6XG4gICAgY2FzZSAnaXNvLWlyLTEwMSc6XG4gICAgY2FzZSAnaXNvODg1OS0yJzpcbiAgICBjYXNlICdpc284ODU5Mic6XG4gICAgY2FzZSAnaXNvXzg4NTktMic6XG4gICAgY2FzZSAnaXNvXzg4NTktMjoxOTg3JzpcbiAgICBjYXNlICdsMic6XG4gICAgY2FzZSAnbGF0aW4yJzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktMidcbiAgICBjYXNlICdjc2lzb2xhdGluMyc6XG4gICAgY2FzZSAnaXNvLTg4NTktMyc6XG4gICAgY2FzZSAnaXNvLWlyLTEwOSc6XG4gICAgY2FzZSAnaXNvODg1OS0zJzpcbiAgICBjYXNlICdpc284ODU5Myc6XG4gICAgY2FzZSAnaXNvXzg4NTktMyc6XG4gICAgY2FzZSAnaXNvXzg4NTktMzoxOTg4JzpcbiAgICBjYXNlICdsMyc6XG4gICAgY2FzZSAnbGF0aW4zJzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktMydcbiAgICBjYXNlICdjc2lzb2xhdGluNCc6XG4gICAgY2FzZSAnaXNvLTg4NTktNCc6XG4gICAgY2FzZSAnaXNvLWlyLTExMCc6XG4gICAgY2FzZSAnaXNvODg1OS00JzpcbiAgICBjYXNlICdpc284ODU5NCc6XG4gICAgY2FzZSAnaXNvXzg4NTktNCc6XG4gICAgY2FzZSAnaXNvXzg4NTktNDoxOTg4JzpcbiAgICBjYXNlICdsNCc6XG4gICAgY2FzZSAnbGF0aW40JzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktNCdcbiAgICBjYXNlICdjc2lzb2xhdGluY3lyaWxsaWMnOlxuICAgIGNhc2UgJ2N5cmlsbGljJzpcbiAgICBjYXNlICdpc28tODg1OS01JzpcbiAgICBjYXNlICdpc28taXItMTQ0JzpcbiAgICBjYXNlICdpc284ODU5LTUnOlxuICAgIGNhc2UgJ2lzbzg4NTk1JzpcbiAgICBjYXNlICdpc29fODg1OS01JzpcbiAgICBjYXNlICdpc29fODg1OS01OjE5ODgnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS01J1xuICAgIGNhc2UgJ2FyYWJpYyc6XG4gICAgY2FzZSAnYXNtby03MDgnOlxuICAgIGNhc2UgJ2NzaXNvODg1OTZlJzpcbiAgICBjYXNlICdjc2lzbzg4NTk2aSc6XG4gICAgY2FzZSAnY3Npc29sYXRpbmFyYWJpYyc6XG4gICAgY2FzZSAnZWNtYS0xMTQnOlxuICAgIGNhc2UgJ2lzby04ODU5LTYnOlxuICAgIGNhc2UgJ2lzby04ODU5LTYtZSc6XG4gICAgY2FzZSAnaXNvLTg4NTktNi1pJzpcbiAgICBjYXNlICdpc28taXItMTI3JzpcbiAgICBjYXNlICdpc284ODU5LTYnOlxuICAgIGNhc2UgJ2lzbzg4NTk2JzpcbiAgICBjYXNlICdpc29fODg1OS02JzpcbiAgICBjYXNlICdpc29fODg1OS02OjE5ODcnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS02J1xuICAgIGNhc2UgJ2NzaXNvbGF0aW5ncmVlayc6XG4gICAgY2FzZSAnZWNtYS0xMTgnOlxuICAgIGNhc2UgJ2Vsb3RfOTI4JzpcbiAgICBjYXNlICdncmVlayc6XG4gICAgY2FzZSAnZ3JlZWs4JzpcbiAgICBjYXNlICdpc28tODg1OS03JzpcbiAgICBjYXNlICdpc28taXItMTI2JzpcbiAgICBjYXNlICdpc284ODU5LTcnOlxuICAgIGNhc2UgJ2lzbzg4NTk3JzpcbiAgICBjYXNlICdpc29fODg1OS03JzpcbiAgICBjYXNlICdpc29fODg1OS03OjE5ODcnOlxuICAgIGNhc2UgJ3N1bl9ldV9ncmVlayc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTcnXG4gICAgY2FzZSAnY3Npc284ODU5OGUnOlxuICAgIGNhc2UgJ2NzaXNvbGF0aW5oZWJyZXcnOlxuICAgIGNhc2UgJ2hlYnJldyc6XG4gICAgY2FzZSAnaXNvLTg4NTktOCc6XG4gICAgY2FzZSAnaXNvLTg4NTktOC1lJzpcbiAgICBjYXNlICdpc28taXItMTM4JzpcbiAgICBjYXNlICdpc284ODU5LTgnOlxuICAgIGNhc2UgJ2lzbzg4NTk4JzpcbiAgICBjYXNlICdpc29fODg1OS04JzpcbiAgICBjYXNlICdpc29fODg1OS04OjE5ODgnOlxuICAgIGNhc2UgJ3Zpc3VhbCc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTgnXG4gICAgY2FzZSAnY3Npc284ODU5OGknOlxuICAgIGNhc2UgJ2lzby04ODU5LTgtaSc6XG4gICAgY2FzZSAnbG9naWNhbCc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTgtSSdcbiAgICBjYXNlICdjc2lzb2xhdGluNic6XG4gICAgY2FzZSAnaXNvLTg4NTktMTAnOlxuICAgIGNhc2UgJ2lzby1pci0xNTcnOlxuICAgIGNhc2UgJ2lzbzg4NTktMTAnOlxuICAgIGNhc2UgJ2lzbzg4NTkxMCc6XG4gICAgY2FzZSAnbDYnOlxuICAgIGNhc2UgJ2xhdGluNic6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTEwJ1xuICAgIGNhc2UgJ2lzby04ODU5LTEzJzpcbiAgICBjYXNlICdpc284ODU5LTEzJzpcbiAgICBjYXNlICdpc284ODU5MTMnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS0xMydcbiAgICBjYXNlICdpc28tODg1OS0xNCc6XG4gICAgY2FzZSAnaXNvODg1OS0xNCc6XG4gICAgY2FzZSAnaXNvODg1OTE0JzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktMTQnXG4gICAgY2FzZSAnY3Npc29sYXRpbjknOlxuICAgIGNhc2UgJ2lzby04ODU5LTE1JzpcbiAgICBjYXNlICdpc284ODU5LTE1JzpcbiAgICBjYXNlICdpc284ODU5MTUnOlxuICAgIGNhc2UgJ2lzb184ODU5LTE1JzpcbiAgICBjYXNlICdsOSc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTE1J1xuICAgIGNhc2UgJ2lzby04ODU5LTE2JzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktMTYnXG4gICAgY2FzZSAnY3Nrb2k4cic6XG4gICAgY2FzZSAna29pJzpcbiAgICBjYXNlICdrb2k4JzpcbiAgICBjYXNlICdrb2k4LXInOlxuICAgIGNhc2UgJ2tvaThfcic6XG4gICAgICByZXR1cm4gJ0tPSTgtUidcbiAgICBjYXNlICdrb2k4LXJ1JzpcbiAgICBjYXNlICdrb2k4LXUnOlxuICAgICAgcmV0dXJuICdLT0k4LVUnXG4gICAgY2FzZSAnY3NtYWNpbnRvc2gnOlxuICAgIGNhc2UgJ21hYyc6XG4gICAgY2FzZSAnbWFjaW50b3NoJzpcbiAgICBjYXNlICd4LW1hYy1yb21hbic6XG4gICAgICByZXR1cm4gJ21hY2ludG9zaCdcbiAgICBjYXNlICdpc28tODg1OS0xMSc6XG4gICAgY2FzZSAnaXNvODg1OS0xMSc6XG4gICAgY2FzZSAnaXNvODg1OTExJzpcbiAgICBjYXNlICd0aXMtNjIwJzpcbiAgICBjYXNlICd3aW5kb3dzLTg3NCc6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtODc0J1xuICAgIGNhc2UgJ2NwMTI1MCc6XG4gICAgY2FzZSAnd2luZG93cy0xMjUwJzpcbiAgICBjYXNlICd4LWNwMTI1MCc6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtMTI1MCdcbiAgICBjYXNlICdjcDEyNTEnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMTI1MSc6XG4gICAgY2FzZSAneC1jcDEyNTEnOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTEyNTEnXG4gICAgY2FzZSAnYW5zaV94My40LTE5NjgnOlxuICAgIGNhc2UgJ2FzY2lpJzpcbiAgICBjYXNlICdjcDEyNTInOlxuICAgIGNhc2UgJ2NwODE5JzpcbiAgICBjYXNlICdjc2lzb2xhdGluMSc6XG4gICAgY2FzZSAnaWJtODE5JzpcbiAgICBjYXNlICdpc28tODg1OS0xJzpcbiAgICBjYXNlICdpc28taXItMTAwJzpcbiAgICBjYXNlICdpc284ODU5LTEnOlxuICAgIGNhc2UgJ2lzbzg4NTkxJzpcbiAgICBjYXNlICdpc29fODg1OS0xJzpcbiAgICBjYXNlICdpc29fODg1OS0xOjE5ODcnOlxuICAgIGNhc2UgJ2wxJzpcbiAgICBjYXNlICdsYXRpbjEnOlxuICAgIGNhc2UgJ3VzLWFzY2lpJzpcbiAgICBjYXNlICd3aW5kb3dzLTEyNTInOlxuICAgIGNhc2UgJ3gtY3AxMjUyJzpcbiAgICAgIHJldHVybiAnd2luZG93cy0xMjUyJ1xuICAgIGNhc2UgJ2NwMTI1Myc6XG4gICAgY2FzZSAnd2luZG93cy0xMjUzJzpcbiAgICBjYXNlICd4LWNwMTI1Myc6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtMTI1MydcbiAgICBjYXNlICdjcDEyNTQnOlxuICAgIGNhc2UgJ2NzaXNvbGF0aW41JzpcbiAgICBjYXNlICdpc28tODg1OS05JzpcbiAgICBjYXNlICdpc28taXItMTQ4JzpcbiAgICBjYXNlICdpc284ODU5LTknOlxuICAgIGNhc2UgJ2lzbzg4NTk5JzpcbiAgICBjYXNlICdpc29fODg1OS05JzpcbiAgICBjYXNlICdpc29fODg1OS05OjE5ODknOlxuICAgIGNhc2UgJ2w1JzpcbiAgICBjYXNlICdsYXRpbjUnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMTI1NCc6XG4gICAgY2FzZSAneC1jcDEyNTQnOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTEyNTQnXG4gICAgY2FzZSAnY3AxMjU1JzpcbiAgICBjYXNlICd3aW5kb3dzLTEyNTUnOlxuICAgIGNhc2UgJ3gtY3AxMjU1JzpcbiAgICAgIHJldHVybiAnd2luZG93cy0xMjU1J1xuICAgIGNhc2UgJ2NwMTI1Nic6XG4gICAgY2FzZSAnd2luZG93cy0xMjU2JzpcbiAgICBjYXNlICd4LWNwMTI1Nic6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtMTI1NidcbiAgICBjYXNlICdjcDEyNTcnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMTI1Nyc6XG4gICAgY2FzZSAneC1jcDEyNTcnOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTEyNTcnXG4gICAgY2FzZSAnY3AxMjU4JzpcbiAgICBjYXNlICd3aW5kb3dzLTEyNTgnOlxuICAgIGNhc2UgJ3gtY3AxMjU4JzpcbiAgICAgIHJldHVybiAnd2luZG93cy0xMjU4J1xuICAgIGNhc2UgJ3gtbWFjLWN5cmlsbGljJzpcbiAgICBjYXNlICd4LW1hYy11a3JhaW5pYW4nOlxuICAgICAgcmV0dXJuICd4LW1hYy1jeXJpbGxpYydcbiAgICBjYXNlICdjaGluZXNlJzpcbiAgICBjYXNlICdjc2diMjMxMic6XG4gICAgY2FzZSAnY3Npc281OGdiMjMxMjgwJzpcbiAgICBjYXNlICdnYjIzMTInOlxuICAgIGNhc2UgJ2diXzIzMTInOlxuICAgIGNhc2UgJ2diXzIzMTItODAnOlxuICAgIGNhc2UgJ2diayc6XG4gICAgY2FzZSAnaXNvLWlyLTU4JzpcbiAgICBjYXNlICd4LWdiayc6XG4gICAgICByZXR1cm4gJ0dCSydcbiAgICBjYXNlICdnYjE4MDMwJzpcbiAgICAgIHJldHVybiAnZ2IxODAzMCdcbiAgICBjYXNlICdiaWc1JzpcbiAgICBjYXNlICdiaWc1LWhrc2NzJzpcbiAgICBjYXNlICdjbi1iaWc1JzpcbiAgICBjYXNlICdjc2JpZzUnOlxuICAgIGNhc2UgJ3gteC1iaWc1JzpcbiAgICAgIHJldHVybiAnQmlnNSdcbiAgICBjYXNlICdjc2V1Y3BrZGZtdGphcGFuZXNlJzpcbiAgICBjYXNlICdldWMtanAnOlxuICAgIGNhc2UgJ3gtZXVjLWpwJzpcbiAgICAgIHJldHVybiAnRVVDLUpQJ1xuICAgIGNhc2UgJ2NzaXNvMjAyMmpwJzpcbiAgICBjYXNlICdpc28tMjAyMi1qcCc6XG4gICAgICByZXR1cm4gJ0lTTy0yMDIyLUpQJ1xuICAgIGNhc2UgJ2Nzc2hpZnRqaXMnOlxuICAgIGNhc2UgJ21zOTMyJzpcbiAgICBjYXNlICdtc19rYW5qaSc6XG4gICAgY2FzZSAnc2hpZnQtamlzJzpcbiAgICBjYXNlICdzaGlmdF9qaXMnOlxuICAgIGNhc2UgJ3NqaXMnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMzFqJzpcbiAgICBjYXNlICd4LXNqaXMnOlxuICAgICAgcmV0dXJuICdTaGlmdF9KSVMnXG4gICAgY2FzZSAnY3NldWNrcic6XG4gICAgY2FzZSAnY3Nrc2M1NjAxMTk4Nyc6XG4gICAgY2FzZSAnZXVjLWtyJzpcbiAgICBjYXNlICdpc28taXItMTQ5JzpcbiAgICBjYXNlICdrb3JlYW4nOlxuICAgIGNhc2UgJ2tzX2NfNTYwMS0xOTg3JzpcbiAgICBjYXNlICdrc19jXzU2MDEtMTk4OSc6XG4gICAgY2FzZSAna3NjNTYwMSc6XG4gICAgY2FzZSAna3NjXzU2MDEnOlxuICAgIGNhc2UgJ3dpbmRvd3MtOTQ5JzpcbiAgICAgIHJldHVybiAnRVVDLUtSJ1xuICAgIGNhc2UgJ2NzaXNvMjAyMmtyJzpcbiAgICBjYXNlICdoei1nYi0yMzEyJzpcbiAgICBjYXNlICdpc28tMjAyMi1jbic6XG4gICAgY2FzZSAnaXNvLTIwMjItY24tZXh0JzpcbiAgICBjYXNlICdpc28tMjAyMi1rcic6XG4gICAgY2FzZSAncmVwbGFjZW1lbnQnOlxuICAgICAgcmV0dXJuICdyZXBsYWNlbWVudCdcbiAgICBjYXNlICd1bmljb2RlZmZmZSc6XG4gICAgY2FzZSAndXRmLTE2YmUnOlxuICAgICAgcmV0dXJuICdVVEYtMTZCRSdcbiAgICBjYXNlICdjc3VuaWNvZGUnOlxuICAgIGNhc2UgJ2lzby0xMDY0Ni11Y3MtMic6XG4gICAgY2FzZSAndWNzLTInOlxuICAgIGNhc2UgJ3VuaWNvZGUnOlxuICAgIGNhc2UgJ3VuaWNvZGVmZWZmJzpcbiAgICBjYXNlICd1dGYtMTYnOlxuICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgIHJldHVybiAnVVRGLTE2TEUnXG4gICAgY2FzZSAneC11c2VyLWRlZmluZWQnOlxuICAgICAgcmV0dXJuICd4LXVzZXItZGVmaW5lZCdcbiAgICBkZWZhdWx0OiByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldEVuY29kaW5nXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIGtTdGF0ZSxcbiAga0Vycm9yLFxuICBrUmVzdWx0LFxuICBrQWJvcnRlZCxcbiAga0xhc3RQcm9ncmVzc0V2ZW50RmlyZWRcbn0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBQcm9ncmVzc0V2ZW50IH0gPSByZXF1aXJlKCcuL3Byb2dyZXNzZXZlbnQnKVxuY29uc3QgeyBnZXRFbmNvZGluZyB9ID0gcmVxdWlyZSgnLi9lbmNvZGluZycpXG5jb25zdCB7IERPTUV4Y2VwdGlvbiB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvY29uc3RhbnRzJylcbmNvbnN0IHsgc2VyaWFsaXplQU1pbWVUeXBlLCBwYXJzZU1JTUVUeXBlIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9kYXRhVVJMJylcbmNvbnN0IHsgdHlwZXMgfSA9IHJlcXVpcmUoJ3V0aWwnKVxuY29uc3QgeyBTdHJpbmdEZWNvZGVyIH0gPSByZXF1aXJlKCdzdHJpbmdfZGVjb2RlcicpXG5jb25zdCB7IGJ0b2EgfSA9IHJlcXVpcmUoJ2J1ZmZlcicpXG5cbi8qKiBAdHlwZSB7UHJvcGVydHlEZXNjcmlwdG9yfSAqL1xuY29uc3Qgc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyA9IHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgd3JpdGFibGU6IGZhbHNlLFxuICBjb25maWd1cmFibGU6IGZhbHNlXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jcmVhZE9wZXJhdGlvblxuICogQHBhcmFtIHtpbXBvcnQoJy4vZmlsZXJlYWRlcicpLkZpbGVSZWFkZXJ9IGZyXG4gKiBAcGFyYW0ge2ltcG9ydCgnYnVmZmVyJykuQmxvYn0gYmxvYlxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nP30gZW5jb2RpbmdOYW1lXG4gKi9cbmZ1bmN0aW9uIHJlYWRPcGVyYXRpb24gKGZyLCBibG9iLCB0eXBlLCBlbmNvZGluZ05hbWUpIHtcbiAgLy8gMS4gSWYgZnLigJlzIHN0YXRlIGlzIFwibG9hZGluZ1wiLCB0aHJvdyBhbiBJbnZhbGlkU3RhdGVFcnJvclxuICAvLyAgICBET01FeGNlcHRpb24uXG4gIGlmIChmcltrU3RhdGVdID09PSAnbG9hZGluZycpIHtcbiAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCdJbnZhbGlkIHN0YXRlJywgJ0ludmFsaWRTdGF0ZUVycm9yJylcbiAgfVxuXG4gIC8vIDIuIFNldCBmcuKAmXMgc3RhdGUgdG8gXCJsb2FkaW5nXCIuXG4gIGZyW2tTdGF0ZV0gPSAnbG9hZGluZydcblxuICAvLyAzLiBTZXQgZnLigJlzIHJlc3VsdCB0byBudWxsLlxuICBmcltrUmVzdWx0XSA9IG51bGxcblxuICAvLyA0LiBTZXQgZnLigJlzIGVycm9yIHRvIG51bGwuXG4gIGZyW2tFcnJvcl0gPSBudWxsXG5cbiAgLy8gNS4gTGV0IHN0cmVhbSBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgZ2V0IHN0cmVhbSBvbiBibG9iLlxuICAvKiogQHR5cGUge2ltcG9ydCgnc3RyZWFtL3dlYicpLlJlYWRhYmxlU3RyZWFtfSAqL1xuICBjb25zdCBzdHJlYW0gPSBibG9iLnN0cmVhbSgpXG5cbiAgLy8gNi4gTGV0IHJlYWRlciBiZSB0aGUgcmVzdWx0IG9mIGdldHRpbmcgYSByZWFkZXIgZnJvbSBzdHJlYW0uXG4gIGNvbnN0IHJlYWRlciA9IHN0cmVhbS5nZXRSZWFkZXIoKVxuXG4gIC8vIDcuIExldCBieXRlcyBiZSBhbiBlbXB0eSBieXRlIHNlcXVlbmNlLlxuICAvKiogQHR5cGUge1VpbnQ4QXJyYXlbXX0gKi9cbiAgY29uc3QgYnl0ZXMgPSBbXVxuXG4gIC8vIDguIExldCBjaHVua1Byb21pc2UgYmUgdGhlIHJlc3VsdCBvZiByZWFkaW5nIGEgY2h1bmsgZnJvbVxuICAvLyAgICBzdHJlYW0gd2l0aCByZWFkZXIuXG4gIGxldCBjaHVua1Byb21pc2UgPSByZWFkZXIucmVhZCgpXG5cbiAgLy8gOS4gTGV0IGlzRmlyc3RDaHVuayBiZSB0cnVlLlxuICBsZXQgaXNGaXJzdENodW5rID0gdHJ1ZVxuXG4gIC8vIDEwLiBJbiBwYXJhbGxlbCwgd2hpbGUgdHJ1ZTpcbiAgLy8gTm90ZTogXCJJbiBwYXJhbGxlbFwiIGp1c3QgbWVhbnMgbm9uLWJsb2NraW5nXG4gIC8vIE5vdGUgMjogcmVhZE9wZXJhdGlvbiBpdHNlbGYgY2Fubm90IGJlIGFzeW5jIGFzIGRvdWJsZVxuICAvLyByZWFkaW5nIHRoZSBib2R5IHdvdWxkIHRoZW4gcmVqZWN0IHRoZSBwcm9taXNlLCBpbnN0ZWFkXG4gIC8vIG9mIHRocm93aW5nIGFuIGVycm9yLlxuICA7KGFzeW5jICgpID0+IHtcbiAgICB3aGlsZSAoIWZyW2tBYm9ydGVkXSkge1xuICAgICAgLy8gMS4gV2FpdCBmb3IgY2h1bmtQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZCBvciByZWplY3RlZC5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IGNodW5rUHJvbWlzZVxuXG4gICAgICAgIC8vIDIuIElmIGNodW5rUHJvbWlzZSBpcyBmdWxmaWxsZWQsIGFuZCBpc0ZpcnN0Q2h1bmsgaXNcbiAgICAgICAgLy8gICAgdHJ1ZSwgcXVldWUgYSB0YXNrIHRvIGZpcmUgYSBwcm9ncmVzcyBldmVudCBjYWxsZWRcbiAgICAgICAgLy8gICAgbG9hZHN0YXJ0IGF0IGZyLlxuICAgICAgICBpZiAoaXNGaXJzdENodW5rICYmICFmcltrQWJvcnRlZF0pIHtcbiAgICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgICAgICBmaXJlQVByb2dyZXNzRXZlbnQoJ2xvYWRzdGFydCcsIGZyKVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgICAgICAvLyAzLiBTZXQgaXNGaXJzdENodW5rIHRvIGZhbHNlLlxuICAgICAgICBpc0ZpcnN0Q2h1bmsgPSBmYWxzZVxuXG4gICAgICAgIC8vIDQuIElmIGNodW5rUHJvbWlzZSBpcyBmdWxmaWxsZWQgd2l0aCBhbiBvYmplY3Qgd2hvc2VcbiAgICAgICAgLy8gICAgZG9uZSBwcm9wZXJ0eSBpcyBmYWxzZSBhbmQgd2hvc2UgdmFsdWUgcHJvcGVydHkgaXNcbiAgICAgICAgLy8gICAgYSBVaW50OEFycmF5IG9iamVjdCwgcnVuIHRoZXNlIHN0ZXBzOlxuICAgICAgICBpZiAoIWRvbmUgJiYgdHlwZXMuaXNVaW50OEFycmF5KHZhbHVlKSkge1xuICAgICAgICAgIC8vIDEuIExldCBicyBiZSB0aGUgYnl0ZSBzZXF1ZW5jZSByZXByZXNlbnRlZCBieSB0aGVcbiAgICAgICAgICAvLyAgICBVaW50OEFycmF5IG9iamVjdC5cblxuICAgICAgICAgIC8vIDIuIEFwcGVuZCBicyB0byBieXRlcy5cbiAgICAgICAgICBieXRlcy5wdXNoKHZhbHVlKVxuXG4gICAgICAgICAgLy8gMy4gSWYgcm91Z2hseSA1MG1zIGhhdmUgcGFzc2VkIHNpbmNlIHRoZXNlIHN0ZXBzXG4gICAgICAgICAgLy8gICAgd2VyZSBsYXN0IGludm9rZWQsIHF1ZXVlIGEgdGFzayB0byBmaXJlIGFcbiAgICAgICAgICAvLyAgICBwcm9ncmVzcyBldmVudCBjYWxsZWQgcHJvZ3Jlc3MgYXQgZnIuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgKFxuICAgICAgICAgICAgICBmcltrTGFzdFByb2dyZXNzRXZlbnRGaXJlZF0gPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICBEYXRlLm5vdygpIC0gZnJba0xhc3RQcm9ncmVzc0V2ZW50RmlyZWRdID49IDUwXG4gICAgICAgICAgICApICYmXG4gICAgICAgICAgICAhZnJba0Fib3J0ZWRdXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBmcltrTGFzdFByb2dyZXNzRXZlbnRGaXJlZF0gPSBEYXRlLm5vdygpXG4gICAgICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgICAgICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgncHJvZ3Jlc3MnLCBmcilcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gNC4gU2V0IGNodW5rUHJvbWlzZSB0byB0aGUgcmVzdWx0IG9mIHJlYWRpbmcgYVxuICAgICAgICAgIC8vICAgIGNodW5rIGZyb20gc3RyZWFtIHdpdGggcmVhZGVyLlxuICAgICAgICAgIGNodW5rUHJvbWlzZSA9IHJlYWRlci5yZWFkKClcbiAgICAgICAgfSBlbHNlIGlmIChkb25lKSB7XG4gICAgICAgICAgLy8gNS4gT3RoZXJ3aXNlLCBpZiBjaHVua1Byb21pc2UgaXMgZnVsZmlsbGVkIHdpdGggYW5cbiAgICAgICAgICAvLyAgICBvYmplY3Qgd2hvc2UgZG9uZSBwcm9wZXJ0eSBpcyB0cnVlLCBxdWV1ZSBhIHRhc2tcbiAgICAgICAgICAvLyAgICB0byBydW4gdGhlIGZvbGxvd2luZyBzdGVwcyBhbmQgYWJvcnQgdGhpcyBhbGdvcml0aG06XG4gICAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICAgICAgLy8gMS4gU2V0IGZy4oCZcyBzdGF0ZSB0byBcImRvbmVcIi5cbiAgICAgICAgICAgIGZyW2tTdGF0ZV0gPSAnZG9uZSdcblxuICAgICAgICAgICAgLy8gMi4gTGV0IHJlc3VsdCBiZSB0aGUgcmVzdWx0IG9mIHBhY2thZ2UgZGF0YSBnaXZlblxuICAgICAgICAgICAgLy8gICAgYnl0ZXMsIHR5cGUsIGJsb2LigJlzIHR5cGUsIGFuZCBlbmNvZGluZ05hbWUuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYWNrYWdlRGF0YShieXRlcywgdHlwZSwgYmxvYi50eXBlLCBlbmNvZGluZ05hbWUpXG5cbiAgICAgICAgICAgICAgLy8gNC4gRWxzZTpcblxuICAgICAgICAgICAgICBpZiAoZnJba0Fib3J0ZWRdKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAvLyAxLiBTZXQgZnLigJlzIHJlc3VsdCB0byByZXN1bHQuXG4gICAgICAgICAgICAgIGZyW2tSZXN1bHRdID0gcmVzdWx0XG5cbiAgICAgICAgICAgICAgLy8gMi4gRmlyZSBhIHByb2dyZXNzIGV2ZW50IGNhbGxlZCBsb2FkIGF0IHRoZSBmci5cbiAgICAgICAgICAgICAgZmlyZUFQcm9ncmVzc0V2ZW50KCdsb2FkJywgZnIpXG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAvLyAzLiBJZiBwYWNrYWdlIGRhdGEgdGhyZXcgYW4gZXhjZXB0aW9uIGVycm9yOlxuXG4gICAgICAgICAgICAgIC8vIDEuIFNldCBmcuKAmXMgZXJyb3IgdG8gZXJyb3IuXG4gICAgICAgICAgICAgIGZyW2tFcnJvcl0gPSBlcnJvclxuXG4gICAgICAgICAgICAgIC8vIDIuIEZpcmUgYSBwcm9ncmVzcyBldmVudCBjYWxsZWQgZXJyb3IgYXQgZnIuXG4gICAgICAgICAgICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgnZXJyb3InLCBmcilcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gNS4gSWYgZnLigJlzIHN0YXRlIGlzIG5vdCBcImxvYWRpbmdcIiwgZmlyZSBhIHByb2dyZXNzXG4gICAgICAgICAgICAvLyAgICBldmVudCBjYWxsZWQgbG9hZGVuZCBhdCB0aGUgZnIuXG4gICAgICAgICAgICBpZiAoZnJba1N0YXRlXSAhPT0gJ2xvYWRpbmcnKSB7XG4gICAgICAgICAgICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgnbG9hZGVuZCcsIGZyKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoZnJba0Fib3J0ZWRdKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICAvLyA2LiBPdGhlcndpc2UsIGlmIGNodW5rUHJvbWlzZSBpcyByZWplY3RlZCB3aXRoIGFuXG4gICAgICAgIC8vICAgIGVycm9yIGVycm9yLCBxdWV1ZSBhIHRhc2sgdG8gcnVuIHRoZSBmb2xsb3dpbmdcbiAgICAgICAgLy8gICAgc3RlcHMgYW5kIGFib3J0IHRoaXMgYWxnb3JpdGhtOlxuICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgICAgLy8gMS4gU2V0IGZy4oCZcyBzdGF0ZSB0byBcImRvbmVcIi5cbiAgICAgICAgICBmcltrU3RhdGVdID0gJ2RvbmUnXG5cbiAgICAgICAgICAvLyAyLiBTZXQgZnLigJlzIGVycm9yIHRvIGVycm9yLlxuICAgICAgICAgIGZyW2tFcnJvcl0gPSBlcnJvclxuXG4gICAgICAgICAgLy8gMy4gRmlyZSBhIHByb2dyZXNzIGV2ZW50IGNhbGxlZCBlcnJvciBhdCBmci5cbiAgICAgICAgICBmaXJlQVByb2dyZXNzRXZlbnQoJ2Vycm9yJywgZnIpXG5cbiAgICAgICAgICAvLyA0LiBJZiBmcuKAmXMgc3RhdGUgaXMgbm90IFwibG9hZGluZ1wiLCBmaXJlIGEgcHJvZ3Jlc3NcbiAgICAgICAgICAvLyAgICBldmVudCBjYWxsZWQgbG9hZGVuZCBhdCBmci5cbiAgICAgICAgICBpZiAoZnJba1N0YXRlXSAhPT0gJ2xvYWRpbmcnKSB7XG4gICAgICAgICAgICBmaXJlQVByb2dyZXNzRXZlbnQoJ2xvYWRlbmQnLCBmcilcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG5cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gIH0pKClcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNmaXJlLWEtcHJvZ3Jlc3MtZXZlbnRcbiAqIEBzZWUgaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWV2ZW50LWZpcmVcbiAqIEBwYXJhbSB7c3RyaW5nfSBlIFRoZSBuYW1lIG9mIHRoZSBldmVudFxuICogQHBhcmFtIHtpbXBvcnQoJy4vZmlsZXJlYWRlcicpLkZpbGVSZWFkZXJ9IHJlYWRlclxuICovXG5mdW5jdGlvbiBmaXJlQVByb2dyZXNzRXZlbnQgKGUsIHJlYWRlcikge1xuICAvLyBUaGUgcHJvZ3Jlc3MgZXZlbnQgZSBkb2VzIG5vdCBidWJibGUuIGUuYnViYmxlcyBtdXN0IGJlIGZhbHNlXG4gIC8vIFRoZSBwcm9ncmVzcyBldmVudCBlIGlzIE5PVCBjYW5jZWxhYmxlLiBlLmNhbmNlbGFibGUgbXVzdCBiZSBmYWxzZVxuICBjb25zdCBldmVudCA9IG5ldyBQcm9ncmVzc0V2ZW50KGUsIHtcbiAgICBidWJibGVzOiBmYWxzZSxcbiAgICBjYW5jZWxhYmxlOiBmYWxzZVxuICB9KVxuXG4gIHJlYWRlci5kaXNwYXRjaEV2ZW50KGV2ZW50KVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2Jsb2ItcGFja2FnZS1kYXRhXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXlbXX0gYnl0ZXNcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge3N0cmluZz99IG1pbWVUeXBlXG4gKiBAcGFyYW0ge3N0cmluZz99IGVuY29kaW5nTmFtZVxuICovXG5mdW5jdGlvbiBwYWNrYWdlRGF0YSAoYnl0ZXMsIHR5cGUsIG1pbWVUeXBlLCBlbmNvZGluZ05hbWUpIHtcbiAgLy8gMS4gQSBCbG9iIGhhcyBhbiBhc3NvY2lhdGVkIHBhY2thZ2UgZGF0YSBhbGdvcml0aG0sIGdpdmVuXG4gIC8vICAgIGJ5dGVzLCBhIHR5cGUsIGEgb3B0aW9uYWwgbWltZVR5cGUsIGFuZCBhIG9wdGlvbmFsXG4gIC8vICAgIGVuY29kaW5nTmFtZSwgd2hpY2ggc3dpdGNoZXMgb24gdHlwZSBhbmQgcnVucyB0aGVcbiAgLy8gICAgYXNzb2NpYXRlZCBzdGVwczpcblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdEYXRhVVJMJzoge1xuICAgICAgLy8gMS4gUmV0dXJuIGJ5dGVzIGFzIGEgRGF0YVVSTCBbUkZDMjM5N10gc3ViamVjdCB0b1xuICAgICAgLy8gICAgdGhlIGNvbnNpZGVyYXRpb25zIGJlbG93OlxuICAgICAgLy8gICogVXNlIG1pbWVUeXBlIGFzIHBhcnQgb2YgdGhlIERhdGEgVVJMIGlmIGl0IGlzXG4gICAgICAvLyAgICBhdmFpbGFibGUgaW4ga2VlcGluZyB3aXRoIHRoZSBEYXRhIFVSTFxuICAgICAgLy8gICAgc3BlY2lmaWNhdGlvbiBbUkZDMjM5N10uXG4gICAgICAvLyAgKiBJZiBtaW1lVHlwZSBpcyBub3QgYXZhaWxhYmxlIHJldHVybiBhIERhdGEgVVJMXG4gICAgICAvLyAgICB3aXRob3V0IGEgbWVkaWEtdHlwZS4gW1JGQzIzOTddLlxuXG4gICAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzIzOTcjc2VjdGlvbi0zXG4gICAgICAvLyBkYXRhdXJsICAgIDo9IFwiZGF0YTpcIiBbIG1lZGlhdHlwZSBdIFsgXCI7YmFzZTY0XCIgXSBcIixcIiBkYXRhXG4gICAgICAvLyBtZWRpYXR5cGUgIDo9IFsgdHlwZSBcIi9cIiBzdWJ0eXBlIF0gKiggXCI7XCIgcGFyYW1ldGVyIClcbiAgICAgIC8vIGRhdGEgICAgICAgOj0gKnVybGNoYXJcbiAgICAgIC8vIHBhcmFtZXRlciAgOj0gYXR0cmlidXRlIFwiPVwiIHZhbHVlXG4gICAgICBsZXQgZGF0YVVSTCA9ICdkYXRhOidcblxuICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VNSU1FVHlwZShtaW1lVHlwZSB8fCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJylcblxuICAgICAgaWYgKHBhcnNlZCAhPT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgIGRhdGFVUkwgKz0gc2VyaWFsaXplQU1pbWVUeXBlKHBhcnNlZClcbiAgICAgIH1cblxuICAgICAgZGF0YVVSTCArPSAnO2Jhc2U2NCwnXG5cbiAgICAgIGNvbnN0IGRlY29kZXIgPSBuZXcgU3RyaW5nRGVjb2RlcignbGF0aW4xJylcblxuICAgICAgZm9yIChjb25zdCBjaHVuayBvZiBieXRlcykge1xuICAgICAgICBkYXRhVVJMICs9IGJ0b2EoZGVjb2Rlci53cml0ZShjaHVuaykpXG4gICAgICB9XG5cbiAgICAgIGRhdGFVUkwgKz0gYnRvYShkZWNvZGVyLmVuZCgpKVxuXG4gICAgICByZXR1cm4gZGF0YVVSTFxuICAgIH1cbiAgICBjYXNlICdUZXh0Jzoge1xuICAgICAgLy8gMS4gTGV0IGVuY29kaW5nIGJlIGZhaWx1cmVcbiAgICAgIGxldCBlbmNvZGluZyA9ICdmYWlsdXJlJ1xuXG4gICAgICAvLyAyLiBJZiB0aGUgZW5jb2RpbmdOYW1lIGlzIHByZXNlbnQsIHNldCBlbmNvZGluZyB0byB0aGVcbiAgICAgIC8vICAgIHJlc3VsdCBvZiBnZXR0aW5nIGFuIGVuY29kaW5nIGZyb20gZW5jb2RpbmdOYW1lLlxuICAgICAgaWYgKGVuY29kaW5nTmFtZSkge1xuICAgICAgICBlbmNvZGluZyA9IGdldEVuY29kaW5nKGVuY29kaW5nTmFtZSlcbiAgICAgIH1cblxuICAgICAgLy8gMy4gSWYgZW5jb2RpbmcgaXMgZmFpbHVyZSwgYW5kIG1pbWVUeXBlIGlzIHByZXNlbnQ6XG4gICAgICBpZiAoZW5jb2RpbmcgPT09ICdmYWlsdXJlJyAmJiBtaW1lVHlwZSkge1xuICAgICAgICAvLyAxLiBMZXQgdHlwZSBiZSB0aGUgcmVzdWx0IG9mIHBhcnNlIGEgTUlNRSB0eXBlXG4gICAgICAgIC8vICAgIGdpdmVuIG1pbWVUeXBlLlxuICAgICAgICBjb25zdCB0eXBlID0gcGFyc2VNSU1FVHlwZShtaW1lVHlwZSlcblxuICAgICAgICAvLyAyLiBJZiB0eXBlIGlzIG5vdCBmYWlsdXJlLCBzZXQgZW5jb2RpbmcgdG8gdGhlIHJlc3VsdFxuICAgICAgICAvLyAgICBvZiBnZXR0aW5nIGFuIGVuY29kaW5nIGZyb20gdHlwZeKAmXMgcGFyYW1ldGVyc1tcImNoYXJzZXRcIl0uXG4gICAgICAgIGlmICh0eXBlICE9PSAnZmFpbHVyZScpIHtcbiAgICAgICAgICBlbmNvZGluZyA9IGdldEVuY29kaW5nKHR5cGUucGFyYW1ldGVycy5nZXQoJ2NoYXJzZXQnKSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyA0LiBJZiBlbmNvZGluZyBpcyBmYWlsdXJlLCB0aGVuIHNldCBlbmNvZGluZyB0byBVVEYtOC5cbiAgICAgIGlmIChlbmNvZGluZyA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgIGVuY29kaW5nID0gJ1VURi04J1xuICAgICAgfVxuXG4gICAgICAvLyA1LiBEZWNvZGUgYnl0ZXMgdXNpbmcgZmFsbGJhY2sgZW5jb2RpbmcgZW5jb2RpbmcsIGFuZFxuICAgICAgLy8gICAgcmV0dXJuIHRoZSByZXN1bHQuXG4gICAgICByZXR1cm4gZGVjb2RlKGJ5dGVzLCBlbmNvZGluZylcbiAgICB9XG4gICAgY2FzZSAnQXJyYXlCdWZmZXInOiB7XG4gICAgICAvLyBSZXR1cm4gYSBuZXcgQXJyYXlCdWZmZXIgd2hvc2UgY29udGVudHMgYXJlIGJ5dGVzLlxuICAgICAgY29uc3Qgc2VxdWVuY2UgPSBjb21iaW5lQnl0ZVNlcXVlbmNlcyhieXRlcylcblxuICAgICAgcmV0dXJuIHNlcXVlbmNlLmJ1ZmZlclxuICAgIH1cbiAgICBjYXNlICdCaW5hcnlTdHJpbmcnOiB7XG4gICAgICAvLyBSZXR1cm4gYnl0ZXMgYXMgYSBiaW5hcnkgc3RyaW5nLCBpbiB3aGljaCBldmVyeSBieXRlXG4gICAgICAvLyAgaXMgcmVwcmVzZW50ZWQgYnkgYSBjb2RlIHVuaXQgb2YgZXF1YWwgdmFsdWUgWzAuLjI1NV0uXG4gICAgICBsZXQgYmluYXJ5U3RyaW5nID0gJydcblxuICAgICAgY29uc3QgZGVjb2RlciA9IG5ldyBTdHJpbmdEZWNvZGVyKCdsYXRpbjEnKVxuXG4gICAgICBmb3IgKGNvbnN0IGNodW5rIG9mIGJ5dGVzKSB7XG4gICAgICAgIGJpbmFyeVN0cmluZyArPSBkZWNvZGVyLndyaXRlKGNodW5rKVxuICAgICAgfVxuXG4gICAgICBiaW5hcnlTdHJpbmcgKz0gZGVjb2Rlci5lbmQoKVxuXG4gICAgICByZXR1cm4gYmluYXJ5U3RyaW5nXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy8jZGVjb2RlXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXlbXX0gaW9RdWV1ZVxuICogQHBhcmFtIHtzdHJpbmd9IGVuY29kaW5nXG4gKi9cbmZ1bmN0aW9uIGRlY29kZSAoaW9RdWV1ZSwgZW5jb2RpbmcpIHtcbiAgY29uc3QgYnl0ZXMgPSBjb21iaW5lQnl0ZVNlcXVlbmNlcyhpb1F1ZXVlKVxuXG4gIC8vIDEuIExldCBCT01FbmNvZGluZyBiZSB0aGUgcmVzdWx0IG9mIEJPTSBzbmlmZmluZyBpb1F1ZXVlLlxuICBjb25zdCBCT01FbmNvZGluZyA9IEJPTVNuaWZmaW5nKGJ5dGVzKVxuXG4gIGxldCBzbGljZSA9IDBcblxuICAvLyAyLiBJZiBCT01FbmNvZGluZyBpcyBub24tbnVsbDpcbiAgaWYgKEJPTUVuY29kaW5nICE9PSBudWxsKSB7XG4gICAgLy8gMS4gU2V0IGVuY29kaW5nIHRvIEJPTUVuY29kaW5nLlxuICAgIGVuY29kaW5nID0gQk9NRW5jb2RpbmdcblxuICAgIC8vIDIuIFJlYWQgdGhyZWUgYnl0ZXMgZnJvbSBpb1F1ZXVlLCBpZiBCT01FbmNvZGluZyBpc1xuICAgIC8vICAgIFVURi04OyBvdGhlcndpc2UgcmVhZCB0d28gYnl0ZXMuXG4gICAgLy8gICAgKERvIG5vdGhpbmcgd2l0aCB0aG9zZSBieXRlcy4pXG4gICAgc2xpY2UgPSBCT01FbmNvZGluZyA9PT0gJ1VURi04JyA/IDMgOiAyXG4gIH1cblxuICAvLyAzLiBQcm9jZXNzIGEgcXVldWUgd2l0aCBhbiBpbnN0YW5jZSBvZiBlbmNvZGluZ+KAmXNcbiAgLy8gICAgZGVjb2RlciwgaW9RdWV1ZSwgb3V0cHV0LCBhbmQgXCJyZXBsYWNlbWVudFwiLlxuXG4gIC8vIDQuIFJldHVybiBvdXRwdXQuXG5cbiAgY29uc3Qgc2xpY2VkID0gYnl0ZXMuc2xpY2Uoc2xpY2UpXG4gIHJldHVybiBuZXcgVGV4dERlY29kZXIoZW5jb2RpbmcpLmRlY29kZShzbGljZWQpXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy8jYm9tLXNuaWZmXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGlvUXVldWVcbiAqL1xuZnVuY3Rpb24gQk9NU25pZmZpbmcgKGlvUXVldWUpIHtcbiAgLy8gMS4gTGV0IEJPTSBiZSB0aGUgcmVzdWx0IG9mIHBlZWtpbmcgMyBieXRlcyBmcm9tIGlvUXVldWUsXG4gIC8vICAgIGNvbnZlcnRlZCB0byBhIGJ5dGUgc2VxdWVuY2UuXG4gIGNvbnN0IFthLCBiLCBjXSA9IGlvUXVldWVcblxuICAvLyAyLiBGb3IgZWFjaCBvZiB0aGUgcm93cyBpbiB0aGUgdGFibGUgYmVsb3csIHN0YXJ0aW5nIHdpdGhcbiAgLy8gICAgdGhlIGZpcnN0IG9uZSBhbmQgZ29pbmcgZG93biwgaWYgQk9NIHN0YXJ0cyB3aXRoIHRoZVxuICAvLyAgICBieXRlcyBnaXZlbiBpbiB0aGUgZmlyc3QgY29sdW1uLCB0aGVuIHJldHVybiB0aGVcbiAgLy8gICAgZW5jb2RpbmcgZ2l2ZW4gaW4gdGhlIGNlbGwgaW4gdGhlIHNlY29uZCBjb2x1bW4gb2YgdGhhdFxuICAvLyAgICByb3cuIE90aGVyd2lzZSwgcmV0dXJuIG51bGwuXG4gIGlmIChhID09PSAweEVGICYmIGIgPT09IDB4QkIgJiYgYyA9PT0gMHhCRikge1xuICAgIHJldHVybiAnVVRGLTgnXG4gIH0gZWxzZSBpZiAoYSA9PT0gMHhGRSAmJiBiID09PSAweEZGKSB7XG4gICAgcmV0dXJuICdVVEYtMTZCRSdcbiAgfSBlbHNlIGlmIChhID09PSAweEZGICYmIGIgPT09IDB4RkUpIHtcbiAgICByZXR1cm4gJ1VURi0xNkxFJ1xuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXlbXX0gc2VxdWVuY2VzXG4gKi9cbmZ1bmN0aW9uIGNvbWJpbmVCeXRlU2VxdWVuY2VzIChzZXF1ZW5jZXMpIHtcbiAgY29uc3Qgc2l6ZSA9IHNlcXVlbmNlcy5yZWR1Y2UoKGEsIGIpID0+IHtcbiAgICByZXR1cm4gYSArIGIuYnl0ZUxlbmd0aFxuICB9LCAwKVxuXG4gIGxldCBvZmZzZXQgPSAwXG5cbiAgcmV0dXJuIHNlcXVlbmNlcy5yZWR1Y2UoKGEsIGIpID0+IHtcbiAgICBhLnNldChiLCBvZmZzZXQpXG4gICAgb2Zmc2V0ICs9IGIuYnl0ZUxlbmd0aFxuICAgIHJldHVybiBhXG4gIH0sIG5ldyBVaW50OEFycmF5KHNpemUpKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgcmVhZE9wZXJhdGlvbixcbiAgZmlyZUFQcm9ncmVzc0V2ZW50XG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIHJlYWRPcGVyYXRpb24sXG4gIGZpcmVBUHJvZ3Jlc3NFdmVudFxufSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7XG4gIGtTdGF0ZSxcbiAga0Vycm9yLFxuICBrUmVzdWx0LFxuICBrRXZlbnRzLFxuICBrQWJvcnRlZFxufSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvd2ViaWRsJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcblxuY2xhc3MgRmlsZVJlYWRlciBleHRlbmRzIEV2ZW50VGFyZ2V0IHtcbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXNba1N0YXRlXSA9ICdlbXB0eSdcbiAgICB0aGlzW2tSZXN1bHRdID0gbnVsbFxuICAgIHRoaXNba0Vycm9yXSA9IG51bGxcbiAgICB0aGlzW2tFdmVudHNdID0ge1xuICAgICAgbG9hZGVuZDogbnVsbCxcbiAgICAgIGVycm9yOiBudWxsLFxuICAgICAgYWJvcnQ6IG51bGwsXG4gICAgICBsb2FkOiBudWxsLFxuICAgICAgcHJvZ3Jlc3M6IG51bGwsXG4gICAgICBsb2Fkc3RhcnQ6IG51bGxcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZGZuLXJlYWRBc0FycmF5QnVmZmVyXG4gICAqIEBwYXJhbSB7aW1wb3J0KCdidWZmZXInKS5CbG9ifSBibG9iXG4gICAqL1xuICByZWFkQXNBcnJheUJ1ZmZlciAoYmxvYikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRmlsZVJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcicgfSlcblxuICAgIGJsb2IgPSB3ZWJpZGwuY29udmVydGVycy5CbG9iKGJsb2IsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gICAgLy8gVGhlIHJlYWRBc0FycmF5QnVmZmVyKGJsb2IpIG1ldGhvZCwgd2hlbiBpbnZva2VkLFxuICAgIC8vIG11c3QgaW5pdGlhdGUgYSByZWFkIG9wZXJhdGlvbiBmb3IgYmxvYiB3aXRoIEFycmF5QnVmZmVyLlxuICAgIHJlYWRPcGVyYXRpb24odGhpcywgYmxvYiwgJ0FycmF5QnVmZmVyJylcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNyZWFkQXNCaW5hcnlTdHJpbmdcbiAgICogQHBhcmFtIHtpbXBvcnQoJ2J1ZmZlcicpLkJsb2J9IGJsb2JcbiAgICovXG4gIHJlYWRBc0JpbmFyeVN0cmluZyAoYmxvYikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRmlsZVJlYWRlci5yZWFkQXNCaW5hcnlTdHJpbmcnIH0pXG5cbiAgICBibG9iID0gd2ViaWRsLmNvbnZlcnRlcnMuQmxvYihibG9iLCB7IHN0cmljdDogZmFsc2UgfSlcblxuICAgIC8vIFRoZSByZWFkQXNCaW5hcnlTdHJpbmcoYmxvYikgbWV0aG9kLCB3aGVuIGludm9rZWQsXG4gICAgLy8gbXVzdCBpbml0aWF0ZSBhIHJlYWQgb3BlcmF0aW9uIGZvciBibG9iIHdpdGggQmluYXJ5U3RyaW5nLlxuICAgIHJlYWRPcGVyYXRpb24odGhpcywgYmxvYiwgJ0JpbmFyeVN0cmluZycpXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jcmVhZEFzRGF0YVRleHRcbiAgICogQHBhcmFtIHtpbXBvcnQoJ2J1ZmZlcicpLkJsb2J9IGJsb2JcbiAgICogQHBhcmFtIHtzdHJpbmc/fSBlbmNvZGluZ1xuICAgKi9cbiAgcmVhZEFzVGV4dCAoYmxvYiwgZW5jb2RpbmcgPSB1bmRlZmluZWQpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0ZpbGVSZWFkZXIucmVhZEFzVGV4dCcgfSlcblxuICAgIGJsb2IgPSB3ZWJpZGwuY29udmVydGVycy5CbG9iKGJsb2IsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gICAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGVuY29kaW5nID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKGVuY29kaW5nKVxuICAgIH1cblxuICAgIC8vIFRoZSByZWFkQXNUZXh0KGJsb2IsIGVuY29kaW5nKSBtZXRob2QsIHdoZW4gaW52b2tlZCxcbiAgICAvLyBtdXN0IGluaXRpYXRlIGEgcmVhZCBvcGVyYXRpb24gZm9yIGJsb2Igd2l0aCBUZXh0IGFuZCBlbmNvZGluZy5cbiAgICByZWFkT3BlcmF0aW9uKHRoaXMsIGJsb2IsICdUZXh0JywgZW5jb2RpbmcpXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZGZuLXJlYWRBc0RhdGFVUkxcbiAgICogQHBhcmFtIHtpbXBvcnQoJ2J1ZmZlcicpLkJsb2J9IGJsb2JcbiAgICovXG4gIHJlYWRBc0RhdGFVUkwgKGJsb2IpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0ZpbGVSZWFkZXIucmVhZEFzRGF0YVVSTCcgfSlcblxuICAgIGJsb2IgPSB3ZWJpZGwuY29udmVydGVycy5CbG9iKGJsb2IsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gICAgLy8gVGhlIHJlYWRBc0RhdGFVUkwoYmxvYikgbWV0aG9kLCB3aGVuIGludm9rZWQsIG11c3RcbiAgICAvLyBpbml0aWF0ZSBhIHJlYWQgb3BlcmF0aW9uIGZvciBibG9iIHdpdGggRGF0YVVSTC5cbiAgICByZWFkT3BlcmF0aW9uKHRoaXMsIGJsb2IsICdEYXRhVVJMJylcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNkZm4tYWJvcnRcbiAgICovXG4gIGFib3J0ICgpIHtcbiAgICAvLyAxLiBJZiB0aGlzJ3Mgc3RhdGUgaXMgXCJlbXB0eVwiIG9yIGlmIHRoaXMncyBzdGF0ZSBpc1xuICAgIC8vICAgIFwiZG9uZVwiIHNldCB0aGlzJ3MgcmVzdWx0IHRvIG51bGwgYW5kIHRlcm1pbmF0ZVxuICAgIC8vICAgIHRoaXMgYWxnb3JpdGhtLlxuICAgIGlmICh0aGlzW2tTdGF0ZV0gPT09ICdlbXB0eScgfHwgdGhpc1trU3RhdGVdID09PSAnZG9uZScpIHtcbiAgICAgIHRoaXNba1Jlc3VsdF0gPSBudWxsXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyAyLiBJZiB0aGlzJ3Mgc3RhdGUgaXMgXCJsb2FkaW5nXCIgc2V0IHRoaXMncyBzdGF0ZSB0b1xuICAgIC8vICAgIFwiZG9uZVwiIGFuZCBzZXQgdGhpcydzIHJlc3VsdCB0byBudWxsLlxuICAgIGlmICh0aGlzW2tTdGF0ZV0gPT09ICdsb2FkaW5nJykge1xuICAgICAgdGhpc1trU3RhdGVdID0gJ2RvbmUnXG4gICAgICB0aGlzW2tSZXN1bHRdID0gbnVsbFxuICAgIH1cblxuICAgIC8vIDMuIElmIHRoZXJlIGFyZSBhbnkgdGFza3MgZnJvbSB0aGlzIG9uIHRoZSBmaWxlIHJlYWRpbmdcbiAgICAvLyAgICB0YXNrIHNvdXJjZSBpbiBhbiBhZmZpbGlhdGVkIHRhc2sgcXVldWUsIHRoZW4gcmVtb3ZlXG4gICAgLy8gICAgdGhvc2UgdGFza3MgZnJvbSB0aGF0IHRhc2sgcXVldWUuXG4gICAgdGhpc1trQWJvcnRlZF0gPSB0cnVlXG5cbiAgICAvLyA0LiBUZXJtaW5hdGUgdGhlIGFsZ29yaXRobSBmb3IgdGhlIHJlYWQgbWV0aG9kIGJlaW5nIHByb2Nlc3NlZC5cbiAgICAvLyBUT0RPXG5cbiAgICAvLyA1LiBGaXJlIGEgcHJvZ3Jlc3MgZXZlbnQgY2FsbGVkIGFib3J0IGF0IHRoaXMuXG4gICAgZmlyZUFQcm9ncmVzc0V2ZW50KCdhYm9ydCcsIHRoaXMpXG5cbiAgICAvLyA2LiBJZiB0aGlzJ3Mgc3RhdGUgaXMgbm90IFwibG9hZGluZ1wiLCBmaXJlIGEgcHJvZ3Jlc3NcbiAgICAvLyAgICBldmVudCBjYWxsZWQgbG9hZGVuZCBhdCB0aGlzLlxuICAgIGlmICh0aGlzW2tTdGF0ZV0gIT09ICdsb2FkaW5nJykge1xuICAgICAgZmlyZUFQcm9ncmVzc0V2ZW50KCdsb2FkZW5kJywgdGhpcylcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZG9tLWZpbGVyZWFkZXItcmVhZHlzdGF0ZVxuICAgKi9cbiAgZ2V0IHJlYWR5U3RhdGUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICBzd2l0Y2ggKHRoaXNba1N0YXRlXSkge1xuICAgICAgY2FzZSAnZW1wdHknOiByZXR1cm4gdGhpcy5FTVBUWVxuICAgICAgY2FzZSAnbG9hZGluZyc6IHJldHVybiB0aGlzLkxPQURJTkdcbiAgICAgIGNhc2UgJ2RvbmUnOiByZXR1cm4gdGhpcy5ET05FXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2RvbS1maWxlcmVhZGVyLXJlc3VsdFxuICAgKi9cbiAgZ2V0IHJlc3VsdCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIC8vIFRoZSByZXN1bHQgYXR0cmlidXRl4oCZcyBnZXR0ZXIsIHdoZW4gaW52b2tlZCwgbXVzdCByZXR1cm5cbiAgICAvLyB0aGlzJ3MgcmVzdWx0LlxuICAgIHJldHVybiB0aGlzW2tSZXN1bHRdXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZG9tLWZpbGVyZWFkZXItZXJyb3JcbiAgICovXG4gIGdldCBlcnJvciAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIC8vIFRoZSBlcnJvciBhdHRyaWJ1dGXigJlzIGdldHRlciwgd2hlbiBpbnZva2VkLCBtdXN0IHJldHVyblxuICAgIC8vIHRoaXMncyBlcnJvci5cbiAgICByZXR1cm4gdGhpc1trRXJyb3JdXG4gIH1cblxuICBnZXQgb25sb2FkZW5kICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgcmV0dXJuIHRoaXNba0V2ZW50c10ubG9hZGVuZFxuICB9XG5cbiAgc2V0IG9ubG9hZGVuZCAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgaWYgKHRoaXNba0V2ZW50c10ubG9hZGVuZCkge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkZW5kJywgdGhpc1trRXZlbnRzXS5sb2FkZW5kKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXNba0V2ZW50c10ubG9hZGVuZCA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlbmQnLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trRXZlbnRzXS5sb2FkZW5kID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBvbmVycm9yICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgcmV0dXJuIHRoaXNba0V2ZW50c10uZXJyb3JcbiAgfVxuXG4gIHNldCBvbmVycm9yIChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICBpZiAodGhpc1trRXZlbnRzXS5lcnJvcikge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXNba0V2ZW50c10uZXJyb3IpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpc1trRXZlbnRzXS5lcnJvciA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgZm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNba0V2ZW50c10uZXJyb3IgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgZ2V0IG9ubG9hZHN0YXJ0ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgcmV0dXJuIHRoaXNba0V2ZW50c10ubG9hZHN0YXJ0XG4gIH1cblxuICBzZXQgb25sb2Fkc3RhcnQgKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIGlmICh0aGlzW2tFdmVudHNdLmxvYWRzdGFydCkge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2Fkc3RhcnQnLCB0aGlzW2tFdmVudHNdLmxvYWRzdGFydClcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmxvYWRzdGFydCA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRzdGFydCcsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmxvYWRzdGFydCA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgb25wcm9ncmVzcyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIHJldHVybiB0aGlzW2tFdmVudHNdLnByb2dyZXNzXG4gIH1cblxuICBzZXQgb25wcm9ncmVzcyAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgaWYgKHRoaXNba0V2ZW50c10ucHJvZ3Jlc3MpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzW2tFdmVudHNdLnByb2dyZXNzKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXNba0V2ZW50c10ucHJvZ3Jlc3MgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tFdmVudHNdLnByb2dyZXNzID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBvbmxvYWQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICByZXR1cm4gdGhpc1trRXZlbnRzXS5sb2FkXG4gIH1cblxuICBzZXQgb25sb2FkIChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICBpZiAodGhpc1trRXZlbnRzXS5sb2FkKSB7XG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzW2tFdmVudHNdLmxvYWQpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpc1trRXZlbnRzXS5sb2FkID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmxvYWQgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgZ2V0IG9uYWJvcnQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICByZXR1cm4gdGhpc1trRXZlbnRzXS5hYm9ydFxuICB9XG5cbiAgc2V0IG9uYWJvcnQgKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIGlmICh0aGlzW2tFdmVudHNdLmFib3J0KSB7XG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgdGhpc1trRXZlbnRzXS5hYm9ydClcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmFib3J0ID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trRXZlbnRzXS5hYm9ydCA9IG51bGxcbiAgICB9XG4gIH1cbn1cblxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2RvbS1maWxlcmVhZGVyLWVtcHR5XG5GaWxlUmVhZGVyLkVNUFRZID0gRmlsZVJlYWRlci5wcm90b3R5cGUuRU1QVFkgPSAwXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZG9tLWZpbGVyZWFkZXItbG9hZGluZ1xuRmlsZVJlYWRlci5MT0FESU5HID0gRmlsZVJlYWRlci5wcm90b3R5cGUuTE9BRElORyA9IDFcbi8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNkb20tZmlsZXJlYWRlci1kb25lXG5GaWxlUmVhZGVyLkRPTkUgPSBGaWxlUmVhZGVyLnByb3RvdHlwZS5ET05FID0gMlxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhGaWxlUmVhZGVyLnByb3RvdHlwZSwge1xuICBFTVBUWTogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgTE9BRElORzogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgRE9ORTogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgcmVhZEFzQXJyYXlCdWZmZXI6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlYWRBc0JpbmFyeVN0cmluZzoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcmVhZEFzVGV4dDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcmVhZEFzRGF0YVVSTDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYWJvcnQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlYWR5U3RhdGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlc3VsdDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZXJyb3I6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9ubG9hZHN0YXJ0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbnByb2dyZXNzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbmxvYWQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9uYWJvcnQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9uZXJyb3I6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9ubG9hZGVuZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0ZpbGVSZWFkZXInLFxuICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfVxufSlcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRmlsZVJlYWRlciwge1xuICBFTVBUWTogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgTE9BRElORzogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgRE9ORTogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9yc1xufSlcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEZpbGVSZWFkZXJcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBrQ29uc3RydWN0OiByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKS5rQ29uc3RydWN0XG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBVUkxTZXJpYWxpemVyIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9kYXRhVVJMJylcbmNvbnN0IHsgaXNWYWxpZEhlYWRlck5hbWUgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3V0aWwnKVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LXVybC1lcXVhbHNcbiAqIEBwYXJhbSB7VVJMfSBBXG4gKiBAcGFyYW0ge1VSTH0gQlxuICogQHBhcmFtIHtib29sZWFuIHwgdW5kZWZpbmVkfSBleGNsdWRlRnJhZ21lbnRcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiB1cmxFcXVhbHMgKEEsIEIsIGV4Y2x1ZGVGcmFnbWVudCA9IGZhbHNlKSB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRBID0gVVJMU2VyaWFsaXplcihBLCBleGNsdWRlRnJhZ21lbnQpXG5cbiAgY29uc3Qgc2VyaWFsaXplZEIgPSBVUkxTZXJpYWxpemVyKEIsIGV4Y2x1ZGVGcmFnbWVudClcblxuICByZXR1cm4gc2VyaWFsaXplZEEgPT09IHNlcmlhbGl6ZWRCXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vY2hyb21pdW0vY2hyb21pdW0vYmxvYi82OTRkMjBkMTM0Y2I1NTNkOGQ4OWU1NTAwYjkxNDgwMTJiMWJhMjk5L2NvbnRlbnQvYnJvd3Nlci9jYWNoZV9zdG9yYWdlL2NhY2hlX3N0b3JhZ2VfY2FjaGUuY2MjTDI2MC1MMjYyXG4gKiBAcGFyYW0ge3N0cmluZ30gaGVhZGVyXG4gKi9cbmZ1bmN0aW9uIGZpZWxkVmFsdWVzIChoZWFkZXIpIHtcbiAgYXNzZXJ0KGhlYWRlciAhPT0gbnVsbClcblxuICBjb25zdCB2YWx1ZXMgPSBbXVxuXG4gIGZvciAobGV0IHZhbHVlIG9mIGhlYWRlci5zcGxpdCgnLCcpKSB7XG4gICAgdmFsdWUgPSB2YWx1ZS50cmltKClcblxuICAgIGlmICghdmFsdWUubGVuZ3RoKSB7XG4gICAgICBjb250aW51ZVxuICAgIH0gZWxzZSBpZiAoIWlzVmFsaWRIZWFkZXJOYW1lKHZhbHVlKSkge1xuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICB2YWx1ZXMucHVzaCh2YWx1ZSlcbiAgfVxuXG4gIHJldHVybiB2YWx1ZXNcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHVybEVxdWFscyxcbiAgZmllbGRWYWx1ZXNcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsga0NvbnN0cnVjdCB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgdXJsRXF1YWxzLCBmaWVsZFZhbHVlczogZ2V0RmllbGRWYWx1ZXMgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IGtFbnVtZXJhYmxlUHJvcGVydHksIGlzRGlzdHVyYmVkIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBrSGVhZGVyc0xpc3QgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvd2ViaWRsJylcbmNvbnN0IHsgUmVzcG9uc2UsIGNsb25lUmVzcG9uc2UgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3Jlc3BvbnNlJylcbmNvbnN0IHsgUmVxdWVzdCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvcmVxdWVzdCcpXG5jb25zdCB7IGtTdGF0ZSwga0hlYWRlcnMsIGtHdWFyZCwga1JlYWxtIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9zeW1ib2xzJylcbmNvbnN0IHsgZmV0Y2hpbmcgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2luZGV4JylcbmNvbnN0IHsgdXJsSXNIdHRwSHR0cHNTY2hlbWUsIGNyZWF0ZURlZmVycmVkUHJvbWlzZSwgcmVhZEFsbEJ5dGVzIH0gPSByZXF1aXJlKCcuLi9mZXRjaC91dGlsJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7IGdldEdsb2JhbERpc3BhdGNoZXIgfSA9IHJlcXVpcmUoJy4uL2dsb2JhbCcpXG5cbi8qKlxuICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jZGZuLWNhY2hlLWJhdGNoLW9wZXJhdGlvblxuICogQHR5cGVkZWYge09iamVjdH0gQ2FjaGVCYXRjaE9wZXJhdGlvblxuICogQHByb3BlcnR5IHsnZGVsZXRlJyB8ICdwdXQnfSB0eXBlXG4gKiBAcHJvcGVydHkge2FueX0gcmVxdWVzdFxuICogQHByb3BlcnR5IHthbnl9IHJlc3BvbnNlXG4gKiBAcHJvcGVydHkge2ltcG9ydCgnLi4vLi4vdHlwZXMvY2FjaGUnKS5DYWNoZVF1ZXJ5T3B0aW9uc30gb3B0aW9uc1xuICovXG5cbi8qKlxuICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jZGZuLXJlcXVlc3QtcmVzcG9uc2UtbGlzdFxuICogQHR5cGVkZWYge1thbnksIGFueV1bXX0gcmVxdWVzdFJlc3BvbnNlTGlzdFxuICovXG5cbmNsYXNzIENhY2hlIHtcbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2Rmbi1yZWxldmFudC1yZXF1ZXN0LXJlc3BvbnNlLWxpc3RcbiAgICogQHR5cGUge3JlcXVlc3RSZXNwb25zZUxpc3R9XG4gICAqL1xuICAjcmVsZXZhbnRSZXF1ZXN0UmVzcG9uc2VMaXN0XG5cbiAgY29uc3RydWN0b3IgKCkge1xuICAgIGlmIChhcmd1bWVudHNbMF0gIT09IGtDb25zdHJ1Y3QpIHtcbiAgICAgIHdlYmlkbC5pbGxlZ2FsQ29uc3RydWN0b3IoKVxuICAgIH1cblxuICAgIHRoaXMuI3JlbGV2YW50UmVxdWVzdFJlc3BvbnNlTGlzdCA9IGFyZ3VtZW50c1sxXVxuICB9XG5cbiAgYXN5bmMgbWF0Y2ggKHJlcXVlc3QsIG9wdGlvbnMgPSB7fSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlKVxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdDYWNoZS5tYXRjaCcgfSlcblxuICAgIHJlcXVlc3QgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mbyhyZXF1ZXN0KVxuICAgIG9wdGlvbnMgPSB3ZWJpZGwuY29udmVydGVycy5DYWNoZVF1ZXJ5T3B0aW9ucyhvcHRpb25zKVxuXG4gICAgY29uc3QgcCA9IGF3YWl0IHRoaXMubWF0Y2hBbGwocmVxdWVzdCwgb3B0aW9ucylcblxuICAgIGlmIChwLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgcmV0dXJuIHBbMF1cbiAgfVxuXG4gIGFzeW5jIG1hdGNoQWxsIChyZXF1ZXN0ID0gdW5kZWZpbmVkLCBvcHRpb25zID0ge30pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZSlcblxuICAgIGlmIChyZXF1ZXN0ICE9PSB1bmRlZmluZWQpIHJlcXVlc3QgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mbyhyZXF1ZXN0KVxuICAgIG9wdGlvbnMgPSB3ZWJpZGwuY29udmVydGVycy5DYWNoZVF1ZXJ5T3B0aW9ucyhvcHRpb25zKVxuXG4gICAgLy8gMS5cbiAgICBsZXQgciA9IG51bGxcblxuICAgIC8vIDIuXG4gICAgaWYgKHJlcXVlc3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHJlcXVlc3QgaW5zdGFuY2VvZiBSZXF1ZXN0KSB7XG4gICAgICAgIC8vIDIuMS4xXG4gICAgICAgIHIgPSByZXF1ZXN0W2tTdGF0ZV1cblxuICAgICAgICAvLyAyLjEuMlxuICAgICAgICBpZiAoci5tZXRob2QgIT09ICdHRVQnICYmICFvcHRpb25zLmlnbm9yZU1ldGhvZCkge1xuICAgICAgICAgIHJldHVybiBbXVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiByZXF1ZXN0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAvLyAyLjIuMVxuICAgICAgICByID0gbmV3IFJlcXVlc3QocmVxdWVzdClba1N0YXRlXVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDUuXG4gICAgLy8gNS4xXG4gICAgY29uc3QgcmVzcG9uc2VzID0gW11cblxuICAgIC8vIDUuMlxuICAgIGlmIChyZXF1ZXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIDUuMi4xXG4gICAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiB0aGlzLiNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3QpIHtcbiAgICAgICAgcmVzcG9uc2VzLnB1c2gocmVxdWVzdFJlc3BvbnNlWzFdKVxuICAgICAgfVxuICAgIH0gZWxzZSB7IC8vIDUuM1xuICAgICAgLy8gNS4zLjFcbiAgICAgIGNvbnN0IHJlcXVlc3RSZXNwb25zZXMgPSB0aGlzLiNxdWVyeUNhY2hlKHIsIG9wdGlvbnMpXG5cbiAgICAgIC8vIDUuMy4yXG4gICAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiByZXF1ZXN0UmVzcG9uc2VzKSB7XG4gICAgICAgIHJlc3BvbnNlcy5wdXNoKHJlcXVlc3RSZXNwb25zZVsxXSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA1LjRcbiAgICAvLyBXZSBkb24ndCBpbXBsZW1lbnQgQ09ScyBzbyB3ZSBkb24ndCBuZWVkIHRvIGxvb3Agb3ZlciB0aGUgcmVzcG9uc2VzLCB5YXkhXG5cbiAgICAvLyA1LjUuMVxuICAgIGNvbnN0IHJlc3BvbnNlTGlzdCA9IFtdXG5cbiAgICAvLyA1LjUuMlxuICAgIGZvciAoY29uc3QgcmVzcG9uc2Ugb2YgcmVzcG9uc2VzKSB7XG4gICAgICAvLyA1LjUuMi4xXG4gICAgICBjb25zdCByZXNwb25zZU9iamVjdCA9IG5ldyBSZXNwb25zZShyZXNwb25zZS5ib2R5Py5zb3VyY2UgPz8gbnVsbClcbiAgICAgIGNvbnN0IGJvZHkgPSByZXNwb25zZU9iamVjdFtrU3RhdGVdLmJvZHlcbiAgICAgIHJlc3BvbnNlT2JqZWN0W2tTdGF0ZV0gPSByZXNwb25zZVxuICAgICAgcmVzcG9uc2VPYmplY3Rba1N0YXRlXS5ib2R5ID0gYm9keVxuICAgICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tIZWFkZXJzTGlzdF0gPSByZXNwb25zZS5oZWFkZXJzTGlzdFxuICAgICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tHdWFyZF0gPSAnaW1tdXRhYmxlJ1xuXG4gICAgICByZXNwb25zZUxpc3QucHVzaChyZXNwb25zZU9iamVjdClcbiAgICB9XG5cbiAgICAvLyA2LlxuICAgIHJldHVybiBPYmplY3QuZnJlZXplKHJlc3BvbnNlTGlzdClcbiAgfVxuXG4gIGFzeW5jIGFkZCAocmVxdWVzdCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlKVxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdDYWNoZS5hZGQnIH0pXG5cbiAgICByZXF1ZXN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluZm8ocmVxdWVzdClcblxuICAgIC8vIDEuXG4gICAgY29uc3QgcmVxdWVzdHMgPSBbcmVxdWVzdF1cblxuICAgIC8vIDIuXG4gICAgY29uc3QgcmVzcG9uc2VBcnJheVByb21pc2UgPSB0aGlzLmFkZEFsbChyZXF1ZXN0cylcblxuICAgIC8vIDMuXG4gICAgcmV0dXJuIGF3YWl0IHJlc3BvbnNlQXJyYXlQcm9taXNlXG4gIH1cblxuICBhc3luYyBhZGRBbGwgKHJlcXVlc3RzKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGUpXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0NhY2hlLmFkZEFsbCcgfSlcblxuICAgIHJlcXVlc3RzID0gd2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPFJlcXVlc3RJbmZvPiddKHJlcXVlc3RzKVxuXG4gICAgLy8gMS5cbiAgICBjb25zdCByZXNwb25zZVByb21pc2VzID0gW11cblxuICAgIC8vIDIuXG4gICAgY29uc3QgcmVxdWVzdExpc3QgPSBbXVxuXG4gICAgLy8gMy5cbiAgICBmb3IgKGNvbnN0IHJlcXVlc3Qgb2YgcmVxdWVzdHMpIHtcbiAgICAgIGlmICh0eXBlb2YgcmVxdWVzdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gMy4xXG4gICAgICBjb25zdCByID0gcmVxdWVzdFtrU3RhdGVdXG5cbiAgICAgIC8vIDMuMlxuICAgICAgaWYgKCF1cmxJc0h0dHBIdHRwc1NjaGVtZShyLnVybCkgfHwgci5tZXRob2QgIT09ICdHRVQnKSB7XG4gICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICBoZWFkZXI6ICdDYWNoZS5hZGRBbGwnLFxuICAgICAgICAgIG1lc3NhZ2U6ICdFeHBlY3RlZCBodHRwL3Mgc2NoZW1lIHdoZW4gbWV0aG9kIGlzIG5vdCBHRVQuJ1xuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDQuXG4gICAgLyoqIEB0eXBlIHtSZXR1cm5UeXBlPHR5cGVvZiBmZXRjaGluZz5bXX0gKi9cbiAgICBjb25zdCBmZXRjaENvbnRyb2xsZXJzID0gW11cblxuICAgIC8vIDUuXG4gICAgZm9yIChjb25zdCByZXF1ZXN0IG9mIHJlcXVlc3RzKSB7XG4gICAgICAvLyA1LjFcbiAgICAgIGNvbnN0IHIgPSBuZXcgUmVxdWVzdChyZXF1ZXN0KVtrU3RhdGVdXG5cbiAgICAgIC8vIDUuMlxuICAgICAgaWYgKCF1cmxJc0h0dHBIdHRwc1NjaGVtZShyLnVybCkpIHtcbiAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLmFkZEFsbCcsXG4gICAgICAgICAgbWVzc2FnZTogJ0V4cGVjdGVkIGh0dHAvcyBzY2hlbWUuJ1xuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICAvLyA1LjRcbiAgICAgIHIuaW5pdGlhdG9yID0gJ2ZldGNoJ1xuICAgICAgci5kZXN0aW5hdGlvbiA9ICdzdWJyZXNvdXJjZSdcblxuICAgICAgLy8gNS41XG4gICAgICByZXF1ZXN0TGlzdC5wdXNoKHIpXG5cbiAgICAgIC8vIDUuNlxuICAgICAgY29uc3QgcmVzcG9uc2VQcm9taXNlID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKClcblxuICAgICAgLy8gNS43XG4gICAgICBmZXRjaENvbnRyb2xsZXJzLnB1c2goZmV0Y2hpbmcoe1xuICAgICAgICByZXF1ZXN0OiByLFxuICAgICAgICBkaXNwYXRjaGVyOiBnZXRHbG9iYWxEaXNwYXRjaGVyKCksXG4gICAgICAgIHByb2Nlc3NSZXNwb25zZSAocmVzcG9uc2UpIHtcbiAgICAgICAgICAvLyAxLlxuICAgICAgICAgIGlmIChyZXNwb25zZS50eXBlID09PSAnZXJyb3InIHx8IHJlc3BvbnNlLnN0YXR1cyA9PT0gMjA2IHx8IHJlc3BvbnNlLnN0YXR1cyA8IDIwMCB8fCByZXNwb25zZS5zdGF0dXMgPiAyOTkpIHtcbiAgICAgICAgICAgIHJlc3BvbnNlUHJvbWlzZS5yZWplY3Qod2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgICBoZWFkZXI6ICdDYWNoZS5hZGRBbGwnLFxuICAgICAgICAgICAgICBtZXNzYWdlOiAnUmVjZWl2ZWQgYW4gaW52YWxpZCBzdGF0dXMgY29kZSBvciB0aGUgcmVxdWVzdCBmYWlsZWQuJ1xuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgfSBlbHNlIGlmIChyZXNwb25zZS5oZWFkZXJzTGlzdC5jb250YWlucygndmFyeScpKSB7IC8vIDIuXG4gICAgICAgICAgICAvLyAyLjFcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkVmFsdWVzID0gZ2V0RmllbGRWYWx1ZXMocmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCd2YXJ5JykpXG5cbiAgICAgICAgICAgIC8vIDIuMlxuICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZFZhbHVlIG9mIGZpZWxkVmFsdWVzKSB7XG4gICAgICAgICAgICAgIC8vIDIuMi4xXG4gICAgICAgICAgICAgIGlmIChmaWVsZFZhbHVlID09PSAnKicpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVByb21pc2UucmVqZWN0KHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLmFkZEFsbCcsXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnaW52YWxpZCB2YXJ5IGZpZWxkIHZhbHVlJ1xuICAgICAgICAgICAgICAgIH0pKVxuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBjb250cm9sbGVyIG9mIGZldGNoQ29udHJvbGxlcnMpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuYWJvcnQoKVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHkgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgLy8gMS5cbiAgICAgICAgICBpZiAocmVzcG9uc2UuYWJvcnRlZCkge1xuICAgICAgICAgICAgcmVzcG9uc2VQcm9taXNlLnJlamVjdChuZXcgRE9NRXhjZXB0aW9uKCdhYm9ydGVkJywgJ0Fib3J0RXJyb3InKSlcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDIuXG4gICAgICAgICAgcmVzcG9uc2VQcm9taXNlLnJlc29sdmUocmVzcG9uc2UpXG4gICAgICAgIH1cbiAgICAgIH0pKVxuXG4gICAgICAvLyA1LjhcbiAgICAgIHJlc3BvbnNlUHJvbWlzZXMucHVzaChyZXNwb25zZVByb21pc2UucHJvbWlzZSlcbiAgICB9XG5cbiAgICAvLyA2LlxuICAgIGNvbnN0IHAgPSBQcm9taXNlLmFsbChyZXNwb25zZVByb21pc2VzKVxuXG4gICAgLy8gNy5cbiAgICBjb25zdCByZXNwb25zZXMgPSBhd2FpdCBwXG5cbiAgICAvLyA3LjFcbiAgICBjb25zdCBvcGVyYXRpb25zID0gW11cblxuICAgIC8vIDcuMlxuICAgIGxldCBpbmRleCA9IDBcblxuICAgIC8vIDcuM1xuICAgIGZvciAoY29uc3QgcmVzcG9uc2Ugb2YgcmVzcG9uc2VzKSB7XG4gICAgICAvLyA3LjMuMVxuICAgICAgLyoqIEB0eXBlIHtDYWNoZUJhdGNoT3BlcmF0aW9ufSAqL1xuICAgICAgY29uc3Qgb3BlcmF0aW9uID0ge1xuICAgICAgICB0eXBlOiAncHV0JywgLy8gNy4zLjJcbiAgICAgICAgcmVxdWVzdDogcmVxdWVzdExpc3RbaW5kZXhdLCAvLyA3LjMuM1xuICAgICAgICByZXNwb25zZSAvLyA3LjMuNFxuICAgICAgfVxuXG4gICAgICBvcGVyYXRpb25zLnB1c2gob3BlcmF0aW9uKSAvLyA3LjMuNVxuXG4gICAgICBpbmRleCsrIC8vIDcuMy42XG4gICAgfVxuXG4gICAgLy8gNy41XG4gICAgY29uc3QgY2FjaGVKb2JQcm9taXNlID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKClcblxuICAgIC8vIDcuNi4xXG4gICAgbGV0IGVycm9yRGF0YSA9IG51bGxcblxuICAgIC8vIDcuNi4yXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuI2JhdGNoQ2FjaGVPcGVyYXRpb25zKG9wZXJhdGlvbnMpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZXJyb3JEYXRhID0gZVxuICAgIH1cblxuICAgIC8vIDcuNi4zXG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgLy8gNy42LjMuMVxuICAgICAgaWYgKGVycm9yRGF0YSA9PT0gbnVsbCkge1xuICAgICAgICBjYWNoZUpvYlByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyA3LjYuMy4yXG4gICAgICAgIGNhY2hlSm9iUHJvbWlzZS5yZWplY3QoZXJyb3JEYXRhKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICAvLyA3LjdcbiAgICByZXR1cm4gY2FjaGVKb2JQcm9taXNlLnByb21pc2VcbiAgfVxuXG4gIGFzeW5jIHB1dCAocmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZSlcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnQ2FjaGUucHV0JyB9KVxuXG4gICAgcmVxdWVzdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKHJlcXVlc3QpXG4gICAgcmVzcG9uc2UgPSB3ZWJpZGwuY29udmVydGVycy5SZXNwb25zZShyZXNwb25zZSlcblxuICAgIC8vIDEuXG4gICAgbGV0IGlubmVyUmVxdWVzdCA9IG51bGxcblxuICAgIC8vIDIuXG4gICAgaWYgKHJlcXVlc3QgaW5zdGFuY2VvZiBSZXF1ZXN0KSB7XG4gICAgICBpbm5lclJlcXVlc3QgPSByZXF1ZXN0W2tTdGF0ZV1cbiAgICB9IGVsc2UgeyAvLyAzLlxuICAgICAgaW5uZXJSZXF1ZXN0ID0gbmV3IFJlcXVlc3QocmVxdWVzdClba1N0YXRlXVxuICAgIH1cblxuICAgIC8vIDQuXG4gICAgaWYgKCF1cmxJc0h0dHBIdHRwc1NjaGVtZShpbm5lclJlcXVlc3QudXJsKSB8fCBpbm5lclJlcXVlc3QubWV0aG9kICE9PSAnR0VUJykge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6ICdDYWNoZS5wdXQnLFxuICAgICAgICBtZXNzYWdlOiAnRXhwZWN0ZWQgYW4gaHR0cC9zIHNjaGVtZSB3aGVuIG1ldGhvZCBpcyBub3QgR0VUJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyA1LlxuICAgIGNvbnN0IGlubmVyUmVzcG9uc2UgPSByZXNwb25zZVtrU3RhdGVdXG5cbiAgICAvLyA2LlxuICAgIGlmIChpbm5lclJlc3BvbnNlLnN0YXR1cyA9PT0gMjA2KSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ0NhY2hlLnB1dCcsXG4gICAgICAgIG1lc3NhZ2U6ICdHb3QgMjA2IHN0YXR1cydcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gNy5cbiAgICBpZiAoaW5uZXJSZXNwb25zZS5oZWFkZXJzTGlzdC5jb250YWlucygndmFyeScpKSB7XG4gICAgICAvLyA3LjEuXG4gICAgICBjb25zdCBmaWVsZFZhbHVlcyA9IGdldEZpZWxkVmFsdWVzKGlubmVyUmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCd2YXJ5JykpXG5cbiAgICAgIC8vIDcuMi5cbiAgICAgIGZvciAoY29uc3QgZmllbGRWYWx1ZSBvZiBmaWVsZFZhbHVlcykge1xuICAgICAgICAvLyA3LjIuMVxuICAgICAgICBpZiAoZmllbGRWYWx1ZSA9PT0gJyonKSB7XG4gICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgaGVhZGVyOiAnQ2FjaGUucHV0JyxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdHb3QgKiB2YXJ5IGZpZWxkIHZhbHVlJ1xuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA4LlxuICAgIGlmIChpbm5lclJlc3BvbnNlLmJvZHkgJiYgKGlzRGlzdHVyYmVkKGlubmVyUmVzcG9uc2UuYm9keS5zdHJlYW0pIHx8IGlubmVyUmVzcG9uc2UuYm9keS5zdHJlYW0ubG9ja2VkKSkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6ICdDYWNoZS5wdXQnLFxuICAgICAgICBtZXNzYWdlOiAnUmVzcG9uc2UgYm9keSBpcyBsb2NrZWQgb3IgZGlzdHVyYmVkJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyA5LlxuICAgIGNvbnN0IGNsb25lZFJlc3BvbnNlID0gY2xvbmVSZXNwb25zZShpbm5lclJlc3BvbnNlKVxuXG4gICAgLy8gMTAuXG4gICAgY29uc3QgYm9keVJlYWRQcm9taXNlID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKClcblxuICAgIC8vIDExLlxuICAgIGlmIChpbm5lclJlc3BvbnNlLmJvZHkgIT0gbnVsbCkge1xuICAgICAgLy8gMTEuMVxuICAgICAgY29uc3Qgc3RyZWFtID0gaW5uZXJSZXNwb25zZS5ib2R5LnN0cmVhbVxuXG4gICAgICAvLyAxMS4yXG4gICAgICBjb25zdCByZWFkZXIgPSBzdHJlYW0uZ2V0UmVhZGVyKClcblxuICAgICAgLy8gMTEuM1xuICAgICAgcmVhZEFsbEJ5dGVzKHJlYWRlcikudGhlbihib2R5UmVhZFByb21pc2UucmVzb2x2ZSwgYm9keVJlYWRQcm9taXNlLnJlamVjdClcbiAgICB9IGVsc2Uge1xuICAgICAgYm9keVJlYWRQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKVxuICAgIH1cblxuICAgIC8vIDEyLlxuICAgIC8qKiBAdHlwZSB7Q2FjaGVCYXRjaE9wZXJhdGlvbltdfSAqL1xuICAgIGNvbnN0IG9wZXJhdGlvbnMgPSBbXVxuXG4gICAgLy8gMTMuXG4gICAgLyoqIEB0eXBlIHtDYWNoZUJhdGNoT3BlcmF0aW9ufSAqL1xuICAgIGNvbnN0IG9wZXJhdGlvbiA9IHtcbiAgICAgIHR5cGU6ICdwdXQnLCAvLyAxNC5cbiAgICAgIHJlcXVlc3Q6IGlubmVyUmVxdWVzdCwgLy8gMTUuXG4gICAgICByZXNwb25zZTogY2xvbmVkUmVzcG9uc2UgLy8gMTYuXG4gICAgfVxuXG4gICAgLy8gMTcuXG4gICAgb3BlcmF0aW9ucy5wdXNoKG9wZXJhdGlvbilcblxuICAgIC8vIDE5LlxuICAgIGNvbnN0IGJ5dGVzID0gYXdhaXQgYm9keVJlYWRQcm9taXNlLnByb21pc2VcblxuICAgIGlmIChjbG9uZWRSZXNwb25zZS5ib2R5ICE9IG51bGwpIHtcbiAgICAgIGNsb25lZFJlc3BvbnNlLmJvZHkuc291cmNlID0gYnl0ZXNcbiAgICB9XG5cbiAgICAvLyAxOS4xXG4gICAgY29uc3QgY2FjaGVKb2JQcm9taXNlID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKClcblxuICAgIC8vIDE5LjIuMVxuICAgIGxldCBlcnJvckRhdGEgPSBudWxsXG5cbiAgICAvLyAxOS4yLjJcbiAgICB0cnkge1xuICAgICAgdGhpcy4jYmF0Y2hDYWNoZU9wZXJhdGlvbnMob3BlcmF0aW9ucylcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlcnJvckRhdGEgPSBlXG4gICAgfVxuXG4gICAgLy8gMTkuMi4zXG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgLy8gMTkuMi4zLjFcbiAgICAgIGlmIChlcnJvckRhdGEgPT09IG51bGwpIHtcbiAgICAgICAgY2FjaGVKb2JQcm9taXNlLnJlc29sdmUoKVxuICAgICAgfSBlbHNlIHsgLy8gMTkuMi4zLjJcbiAgICAgICAgY2FjaGVKb2JQcm9taXNlLnJlamVjdChlcnJvckRhdGEpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHJldHVybiBjYWNoZUpvYlByb21pc2UucHJvbWlzZVxuICB9XG5cbiAgYXN5bmMgZGVsZXRlIChyZXF1ZXN0LCBvcHRpb25zID0ge30pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZSlcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnQ2FjaGUuZGVsZXRlJyB9KVxuXG4gICAgcmVxdWVzdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKHJlcXVlc3QpXG4gICAgb3B0aW9ucyA9IHdlYmlkbC5jb252ZXJ0ZXJzLkNhY2hlUXVlcnlPcHRpb25zKG9wdGlvbnMpXG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7UmVxdWVzdH1cbiAgICAgKi9cbiAgICBsZXQgciA9IG51bGxcblxuICAgIGlmIChyZXF1ZXN0IGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgICAgciA9IHJlcXVlc3Rba1N0YXRlXVxuXG4gICAgICBpZiAoci5tZXRob2QgIT09ICdHRVQnICYmICFvcHRpb25zLmlnbm9yZU1ldGhvZCkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYXNzZXJ0KHR5cGVvZiByZXF1ZXN0ID09PSAnc3RyaW5nJylcblxuICAgICAgciA9IG5ldyBSZXF1ZXN0KHJlcXVlc3QpW2tTdGF0ZV1cbiAgICB9XG5cbiAgICAvKiogQHR5cGUge0NhY2hlQmF0Y2hPcGVyYXRpb25bXX0gKi9cbiAgICBjb25zdCBvcGVyYXRpb25zID0gW11cblxuICAgIC8qKiBAdHlwZSB7Q2FjaGVCYXRjaE9wZXJhdGlvbn0gKi9cbiAgICBjb25zdCBvcGVyYXRpb24gPSB7XG4gICAgICB0eXBlOiAnZGVsZXRlJyxcbiAgICAgIHJlcXVlc3Q6IHIsXG4gICAgICBvcHRpb25zXG4gICAgfVxuXG4gICAgb3BlcmF0aW9ucy5wdXNoKG9wZXJhdGlvbilcblxuICAgIGNvbnN0IGNhY2hlSm9iUHJvbWlzZSA9IGNyZWF0ZURlZmVycmVkUHJvbWlzZSgpXG5cbiAgICBsZXQgZXJyb3JEYXRhID0gbnVsbFxuICAgIGxldCByZXF1ZXN0UmVzcG9uc2VzXG5cbiAgICB0cnkge1xuICAgICAgcmVxdWVzdFJlc3BvbnNlcyA9IHRoaXMuI2JhdGNoQ2FjaGVPcGVyYXRpb25zKG9wZXJhdGlvbnMpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZXJyb3JEYXRhID0gZVxuICAgIH1cblxuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgIGlmIChlcnJvckRhdGEgPT09IG51bGwpIHtcbiAgICAgICAgY2FjaGVKb2JQcm9taXNlLnJlc29sdmUoISFyZXF1ZXN0UmVzcG9uc2VzPy5sZW5ndGgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWNoZUpvYlByb21pc2UucmVqZWN0KGVycm9yRGF0YSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIGNhY2hlSm9iUHJvbWlzZS5wcm9taXNlXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jZG9tLWNhY2hlLWtleXNcbiAgICogQHBhcmFtIHthbnl9IHJlcXVlc3RcbiAgICogQHBhcmFtIHtpbXBvcnQoJy4uLy4uL3R5cGVzL2NhY2hlJykuQ2FjaGVRdWVyeU9wdGlvbnN9IG9wdGlvbnNcbiAgICogQHJldHVybnMge3JlYWRvbmx5IFJlcXVlc3RbXX1cbiAgICovXG4gIGFzeW5jIGtleXMgKHJlcXVlc3QgPSB1bmRlZmluZWQsIG9wdGlvbnMgPSB7fSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlKVxuXG4gICAgaWYgKHJlcXVlc3QgIT09IHVuZGVmaW5lZCkgcmVxdWVzdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKHJlcXVlc3QpXG4gICAgb3B0aW9ucyA9IHdlYmlkbC5jb252ZXJ0ZXJzLkNhY2hlUXVlcnlPcHRpb25zKG9wdGlvbnMpXG5cbiAgICAvLyAxLlxuICAgIGxldCByID0gbnVsbFxuXG4gICAgLy8gMi5cbiAgICBpZiAocmVxdWVzdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyAyLjFcbiAgICAgIGlmIChyZXF1ZXN0IGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgICAgICAvLyAyLjEuMVxuICAgICAgICByID0gcmVxdWVzdFtrU3RhdGVdXG5cbiAgICAgICAgLy8gMi4xLjJcbiAgICAgICAgaWYgKHIubWV0aG9kICE9PSAnR0VUJyAmJiAhb3B0aW9ucy5pZ25vcmVNZXRob2QpIHtcbiAgICAgICAgICByZXR1cm4gW11cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcmVxdWVzdCA9PT0gJ3N0cmluZycpIHsgLy8gMi4yXG4gICAgICAgIHIgPSBuZXcgUmVxdWVzdChyZXF1ZXN0KVtrU3RhdGVdXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNC5cbiAgICBjb25zdCBwcm9taXNlID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKClcblxuICAgIC8vIDUuXG4gICAgLy8gNS4xXG4gICAgY29uc3QgcmVxdWVzdHMgPSBbXVxuXG4gICAgLy8gNS4yXG4gICAgaWYgKHJlcXVlc3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gNS4yLjFcbiAgICAgIGZvciAoY29uc3QgcmVxdWVzdFJlc3BvbnNlIG9mIHRoaXMuI3JlbGV2YW50UmVxdWVzdFJlc3BvbnNlTGlzdCkge1xuICAgICAgICAvLyA1LjIuMS4xXG4gICAgICAgIHJlcXVlc3RzLnB1c2gocmVxdWVzdFJlc3BvbnNlWzBdKVxuICAgICAgfVxuICAgIH0gZWxzZSB7IC8vIDUuM1xuICAgICAgLy8gNS4zLjFcbiAgICAgIGNvbnN0IHJlcXVlc3RSZXNwb25zZXMgPSB0aGlzLiNxdWVyeUNhY2hlKHIsIG9wdGlvbnMpXG5cbiAgICAgIC8vIDUuMy4yXG4gICAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiByZXF1ZXN0UmVzcG9uc2VzKSB7XG4gICAgICAgIC8vIDUuMy4yLjFcbiAgICAgICAgcmVxdWVzdHMucHVzaChyZXF1ZXN0UmVzcG9uc2VbMF0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNS40XG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgLy8gNS40LjFcbiAgICAgIGNvbnN0IHJlcXVlc3RMaXN0ID0gW11cblxuICAgICAgLy8gNS40LjJcbiAgICAgIGZvciAoY29uc3QgcmVxdWVzdCBvZiByZXF1ZXN0cykge1xuICAgICAgICBjb25zdCByZXF1ZXN0T2JqZWN0ID0gbmV3IFJlcXVlc3QoJ2h0dHBzOi8vYScpXG4gICAgICAgIHJlcXVlc3RPYmplY3Rba1N0YXRlXSA9IHJlcXVlc3RcbiAgICAgICAgcmVxdWVzdE9iamVjdFtrSGVhZGVyc11ba0hlYWRlcnNMaXN0XSA9IHJlcXVlc3QuaGVhZGVyc0xpc3RcbiAgICAgICAgcmVxdWVzdE9iamVjdFtrSGVhZGVyc11ba0d1YXJkXSA9ICdpbW11dGFibGUnXG4gICAgICAgIHJlcXVlc3RPYmplY3Rba1JlYWxtXSA9IHJlcXVlc3QuY2xpZW50XG5cbiAgICAgICAgLy8gNS40LjIuMVxuICAgICAgICByZXF1ZXN0TGlzdC5wdXNoKHJlcXVlc3RPYmplY3QpXG4gICAgICB9XG5cbiAgICAgIC8vIDUuNC4zXG4gICAgICBwcm9taXNlLnJlc29sdmUoT2JqZWN0LmZyZWV6ZShyZXF1ZXN0TGlzdCkpXG4gICAgfSlcblxuICAgIHJldHVybiBwcm9taXNlLnByb21pc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNiYXRjaC1jYWNoZS1vcGVyYXRpb25zLWFsZ29yaXRobVxuICAgKiBAcGFyYW0ge0NhY2hlQmF0Y2hPcGVyYXRpb25bXX0gb3BlcmF0aW9uc1xuICAgKiBAcmV0dXJucyB7cmVxdWVzdFJlc3BvbnNlTGlzdH1cbiAgICovXG4gICNiYXRjaENhY2hlT3BlcmF0aW9ucyAob3BlcmF0aW9ucykge1xuICAgIC8vIDEuXG4gICAgY29uc3QgY2FjaGUgPSB0aGlzLiNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3RcblxuICAgIC8vIDIuXG4gICAgY29uc3QgYmFja3VwQ2FjaGUgPSBbLi4uY2FjaGVdXG5cbiAgICAvLyAzLlxuICAgIGNvbnN0IGFkZGVkSXRlbXMgPSBbXVxuXG4gICAgLy8gNC4xXG4gICAgY29uc3QgcmVzdWx0TGlzdCA9IFtdXG5cbiAgICB0cnkge1xuICAgICAgLy8gNC4yXG4gICAgICBmb3IgKGNvbnN0IG9wZXJhdGlvbiBvZiBvcGVyYXRpb25zKSB7XG4gICAgICAgIC8vIDQuMi4xXG4gICAgICAgIGlmIChvcGVyYXRpb24udHlwZSAhPT0gJ2RlbGV0ZScgJiYgb3BlcmF0aW9uLnR5cGUgIT09ICdwdXQnKSB7XG4gICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgaGVhZGVyOiAnQ2FjaGUuI2JhdGNoQ2FjaGVPcGVyYXRpb25zJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdvcGVyYXRpb24gdHlwZSBkb2VzIG5vdCBtYXRjaCBcImRlbGV0ZVwiIG9yIFwicHV0XCInXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDQuMi4yXG4gICAgICAgIGlmIChvcGVyYXRpb24udHlwZSA9PT0gJ2RlbGV0ZScgJiYgb3BlcmF0aW9uLnJlc3BvbnNlICE9IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICBoZWFkZXI6ICdDYWNoZS4jYmF0Y2hDYWNoZU9wZXJhdGlvbnMnLFxuICAgICAgICAgICAgbWVzc2FnZTogJ2RlbGV0ZSBvcGVyYXRpb24gc2hvdWxkIG5vdCBoYXZlIGFuIGFzc29jaWF0ZWQgcmVzcG9uc2UnXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDQuMi4zXG4gICAgICAgIGlmICh0aGlzLiNxdWVyeUNhY2hlKG9wZXJhdGlvbi5yZXF1ZXN0LCBvcGVyYXRpb24ub3B0aW9ucywgYWRkZWRJdGVtcykubGVuZ3RoKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignPz8/JywgJ0ludmFsaWRTdGF0ZUVycm9yJylcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDQuMi40XG4gICAgICAgIGxldCByZXF1ZXN0UmVzcG9uc2VzXG5cbiAgICAgICAgLy8gNC4yLjVcbiAgICAgICAgaWYgKG9wZXJhdGlvbi50eXBlID09PSAnZGVsZXRlJykge1xuICAgICAgICAgIC8vIDQuMi41LjFcbiAgICAgICAgICByZXF1ZXN0UmVzcG9uc2VzID0gdGhpcy4jcXVlcnlDYWNoZShvcGVyYXRpb24ucmVxdWVzdCwgb3BlcmF0aW9uLm9wdGlvbnMpXG5cbiAgICAgICAgICAvLyBUT0RPOiB0aGUgc3BlYyBpcyB3cm9uZywgdGhpcyBpcyBuZWVkZWQgdG8gcGFzcyBXUFRzXG4gICAgICAgICAgaWYgKHJlcXVlc3RSZXNwb25zZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gW11cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyA0LjIuNS4yXG4gICAgICAgICAgZm9yIChjb25zdCByZXF1ZXN0UmVzcG9uc2Ugb2YgcmVxdWVzdFJlc3BvbnNlcykge1xuICAgICAgICAgICAgY29uc3QgaWR4ID0gY2FjaGUuaW5kZXhPZihyZXF1ZXN0UmVzcG9uc2UpXG4gICAgICAgICAgICBhc3NlcnQoaWR4ICE9PSAtMSlcblxuICAgICAgICAgICAgLy8gNC4yLjUuMi4xXG4gICAgICAgICAgICBjYWNoZS5zcGxpY2UoaWR4LCAxKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24udHlwZSA9PT0gJ3B1dCcpIHsgLy8gNC4yLjZcbiAgICAgICAgICAvLyA0LjIuNi4xXG4gICAgICAgICAgaWYgKG9wZXJhdGlvbi5yZXNwb25zZSA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLiNiYXRjaENhY2hlT3BlcmF0aW9ucycsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdwdXQgb3BlcmF0aW9uIHNob3VsZCBoYXZlIGFuIGFzc29jaWF0ZWQgcmVzcG9uc2UnXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDQuMi42LjJcbiAgICAgICAgICBjb25zdCByID0gb3BlcmF0aW9uLnJlcXVlc3RcblxuICAgICAgICAgIC8vIDQuMi42LjNcbiAgICAgICAgICBpZiAoIXVybElzSHR0cEh0dHBzU2NoZW1lKHIudXJsKSkge1xuICAgICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgICBoZWFkZXI6ICdDYWNoZS4jYmF0Y2hDYWNoZU9wZXJhdGlvbnMnLFxuICAgICAgICAgICAgICBtZXNzYWdlOiAnZXhwZWN0ZWQgaHR0cCBvciBodHRwcyBzY2hlbWUnXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDQuMi42LjRcbiAgICAgICAgICBpZiAoci5tZXRob2QgIT09ICdHRVQnKSB7XG4gICAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLiNiYXRjaENhY2hlT3BlcmF0aW9ucycsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdub3QgZ2V0IG1ldGhvZCdcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gNC4yLjYuNVxuICAgICAgICAgIGlmIChvcGVyYXRpb24ub3B0aW9ucyAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLiNiYXRjaENhY2hlT3BlcmF0aW9ucycsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdvcHRpb25zIG11c3Qgbm90IGJlIGRlZmluZWQnXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDQuMi42LjZcbiAgICAgICAgICByZXF1ZXN0UmVzcG9uc2VzID0gdGhpcy4jcXVlcnlDYWNoZShvcGVyYXRpb24ucmVxdWVzdClcblxuICAgICAgICAgIC8vIDQuMi42LjdcbiAgICAgICAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiByZXF1ZXN0UmVzcG9uc2VzKSB7XG4gICAgICAgICAgICBjb25zdCBpZHggPSBjYWNoZS5pbmRleE9mKHJlcXVlc3RSZXNwb25zZSlcbiAgICAgICAgICAgIGFzc2VydChpZHggIT09IC0xKVxuXG4gICAgICAgICAgICAvLyA0LjIuNi43LjFcbiAgICAgICAgICAgIGNhY2hlLnNwbGljZShpZHgsIDEpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gNC4yLjYuOFxuICAgICAgICAgIGNhY2hlLnB1c2goW29wZXJhdGlvbi5yZXF1ZXN0LCBvcGVyYXRpb24ucmVzcG9uc2VdKVxuXG4gICAgICAgICAgLy8gNC4yLjYuMTBcbiAgICAgICAgICBhZGRlZEl0ZW1zLnB1c2goW29wZXJhdGlvbi5yZXF1ZXN0LCBvcGVyYXRpb24ucmVzcG9uc2VdKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gNC4yLjdcbiAgICAgICAgcmVzdWx0TGlzdC5wdXNoKFtvcGVyYXRpb24ucmVxdWVzdCwgb3BlcmF0aW9uLnJlc3BvbnNlXSlcbiAgICAgIH1cblxuICAgICAgLy8gNC4zXG4gICAgICByZXR1cm4gcmVzdWx0TGlzdFxuICAgIH0gY2F0Y2ggKGUpIHsgLy8gNS5cbiAgICAgIC8vIDUuMVxuICAgICAgdGhpcy4jcmVsZXZhbnRSZXF1ZXN0UmVzcG9uc2VMaXN0Lmxlbmd0aCA9IDBcblxuICAgICAgLy8gNS4yXG4gICAgICB0aGlzLiNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3QgPSBiYWNrdXBDYWNoZVxuXG4gICAgICAvLyA1LjNcbiAgICAgIHRocm93IGVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jcXVlcnktY2FjaGVcbiAgICogQHBhcmFtIHthbnl9IHJlcXVlc3RRdWVyeVxuICAgKiBAcGFyYW0ge2ltcG9ydCgnLi4vLi4vdHlwZXMvY2FjaGUnKS5DYWNoZVF1ZXJ5T3B0aW9uc30gb3B0aW9uc1xuICAgKiBAcGFyYW0ge3JlcXVlc3RSZXNwb25zZUxpc3R9IHRhcmdldFN0b3JhZ2VcbiAgICogQHJldHVybnMge3JlcXVlc3RSZXNwb25zZUxpc3R9XG4gICAqL1xuICAjcXVlcnlDYWNoZSAocmVxdWVzdFF1ZXJ5LCBvcHRpb25zLCB0YXJnZXRTdG9yYWdlKSB7XG4gICAgLyoqIEB0eXBlIHtyZXF1ZXN0UmVzcG9uc2VMaXN0fSAqL1xuICAgIGNvbnN0IHJlc3VsdExpc3QgPSBbXVxuXG4gICAgY29uc3Qgc3RvcmFnZSA9IHRhcmdldFN0b3JhZ2UgPz8gdGhpcy4jcmVsZXZhbnRSZXF1ZXN0UmVzcG9uc2VMaXN0XG5cbiAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiBzdG9yYWdlKSB7XG4gICAgICBjb25zdCBbY2FjaGVkUmVxdWVzdCwgY2FjaGVkUmVzcG9uc2VdID0gcmVxdWVzdFJlc3BvbnNlXG4gICAgICBpZiAodGhpcy4jcmVxdWVzdE1hdGNoZXNDYWNoZWRJdGVtKHJlcXVlc3RRdWVyeSwgY2FjaGVkUmVxdWVzdCwgY2FjaGVkUmVzcG9uc2UsIG9wdGlvbnMpKSB7XG4gICAgICAgIHJlc3VsdExpc3QucHVzaChyZXF1ZXN0UmVzcG9uc2UpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdExpc3RcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNyZXF1ZXN0LW1hdGNoZXMtY2FjaGVkLWl0ZW0tYWxnb3JpdGhtXG4gICAqIEBwYXJhbSB7YW55fSByZXF1ZXN0UXVlcnlcbiAgICogQHBhcmFtIHthbnl9IHJlcXVlc3RcbiAgICogQHBhcmFtIHthbnkgfCBudWxsfSByZXNwb25zZVxuICAgKiBAcGFyYW0ge2ltcG9ydCgnLi4vLi4vdHlwZXMvY2FjaGUnKS5DYWNoZVF1ZXJ5T3B0aW9ucyB8IHVuZGVmaW5lZH0gb3B0aW9uc1xuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gICNyZXF1ZXN0TWF0Y2hlc0NhY2hlZEl0ZW0gKHJlcXVlc3RRdWVyeSwgcmVxdWVzdCwgcmVzcG9uc2UgPSBudWxsLCBvcHRpb25zKSB7XG4gICAgLy8gaWYgKG9wdGlvbnM/Lmlnbm9yZU1ldGhvZCA9PT0gZmFsc2UgJiYgcmVxdWVzdC5tZXRob2QgPT09ICdHRVQnKSB7XG4gICAgLy8gICByZXR1cm4gZmFsc2VcbiAgICAvLyB9XG5cbiAgICBjb25zdCBxdWVyeVVSTCA9IG5ldyBVUkwocmVxdWVzdFF1ZXJ5LnVybClcblxuICAgIGNvbnN0IGNhY2hlZFVSTCA9IG5ldyBVUkwocmVxdWVzdC51cmwpXG5cbiAgICBpZiAob3B0aW9ucz8uaWdub3JlU2VhcmNoKSB7XG4gICAgICBjYWNoZWRVUkwuc2VhcmNoID0gJydcblxuICAgICAgcXVlcnlVUkwuc2VhcmNoID0gJydcbiAgICB9XG5cbiAgICBpZiAoIXVybEVxdWFscyhxdWVyeVVSTCwgY2FjaGVkVVJMLCB0cnVlKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgcmVzcG9uc2UgPT0gbnVsbCB8fFxuICAgICAgb3B0aW9ucz8uaWdub3JlVmFyeSB8fFxuICAgICAgIXJlc3BvbnNlLmhlYWRlcnNMaXN0LmNvbnRhaW5zKCd2YXJ5JylcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgY29uc3QgZmllbGRWYWx1ZXMgPSBnZXRGaWVsZFZhbHVlcyhyZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ3ZhcnknKSlcblxuICAgIGZvciAoY29uc3QgZmllbGRWYWx1ZSBvZiBmaWVsZFZhbHVlcykge1xuICAgICAgaWYgKGZpZWxkVmFsdWUgPT09ICcqJykge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVxdWVzdFZhbHVlID0gcmVxdWVzdC5oZWFkZXJzTGlzdC5nZXQoZmllbGRWYWx1ZSlcbiAgICAgIGNvbnN0IHF1ZXJ5VmFsdWUgPSByZXF1ZXN0UXVlcnkuaGVhZGVyc0xpc3QuZ2V0KGZpZWxkVmFsdWUpXG5cbiAgICAgIC8vIElmIG9uZSBoYXMgdGhlIGhlYWRlciBhbmQgdGhlIG90aGVyIGRvZXNuJ3QsIG9yIG9uZSBoYXNcbiAgICAgIC8vIGEgZGlmZmVyZW50IHZhbHVlIHRoYW4gdGhlIG90aGVyLCByZXR1cm4gZmFsc2VcbiAgICAgIGlmIChyZXF1ZXN0VmFsdWUgIT09IHF1ZXJ5VmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWVcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDYWNoZS5wcm90b3R5cGUsIHtcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0NhY2hlJyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSxcbiAgbWF0Y2g6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG1hdGNoQWxsOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBhZGQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGFkZEFsbDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcHV0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBkZWxldGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGtleXM6IGtFbnVtZXJhYmxlUHJvcGVydHlcbn0pXG5cbmNvbnN0IGNhY2hlUXVlcnlPcHRpb25Db252ZXJ0ZXJzID0gW1xuICB7XG4gICAga2V5OiAnaWdub3JlU2VhcmNoJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4sXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZVxuICB9LFxuICB7XG4gICAga2V5OiAnaWdub3JlTWV0aG9kJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4sXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZVxuICB9LFxuICB7XG4gICAga2V5OiAnaWdub3JlVmFyeScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2VcbiAgfVxuXVxuXG53ZWJpZGwuY29udmVydGVycy5DYWNoZVF1ZXJ5T3B0aW9ucyA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKGNhY2hlUXVlcnlPcHRpb25Db252ZXJ0ZXJzKVxuXG53ZWJpZGwuY29udmVydGVycy5NdWx0aUNhY2hlUXVlcnlPcHRpb25zID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICAuLi5jYWNoZVF1ZXJ5T3B0aW9uQ29udmVydGVycyxcbiAge1xuICAgIGtleTogJ2NhY2hlTmFtZScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmdcbiAgfVxuXSlcblxud2ViaWRsLmNvbnZlcnRlcnMuUmVzcG9uc2UgPSB3ZWJpZGwuaW50ZXJmYWNlQ29udmVydGVyKFJlc3BvbnNlKVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8UmVxdWVzdEluZm8+J10gPSB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvXG4pXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBDYWNoZVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBrQ29uc3RydWN0IH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBDYWNoZSB9ID0gcmVxdWlyZSgnLi9jYWNoZScpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvd2ViaWRsJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcblxuY2xhc3MgQ2FjaGVTdG9yYWdlIHtcbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2Rmbi1yZWxldmFudC1uYW1lLXRvLWNhY2hlLW1hcFxuICAgKiBAdHlwZSB7TWFwPHN0cmluZywgaW1wb3J0KCcuL2NhY2hlJykucmVxdWVzdFJlc3BvbnNlTGlzdH1cbiAgICovXG4gICNjYWNoZXMgPSBuZXcgTWFwKClcblxuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgaWYgKGFyZ3VtZW50c1swXSAhPT0ga0NvbnN0cnVjdCkge1xuICAgICAgd2ViaWRsLmlsbGVnYWxDb25zdHJ1Y3RvcigpXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbWF0Y2ggKHJlcXVlc3QsIG9wdGlvbnMgPSB7fSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlU3RvcmFnZSlcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnQ2FjaGVTdG9yYWdlLm1hdGNoJyB9KVxuXG4gICAgcmVxdWVzdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKHJlcXVlc3QpXG4gICAgb3B0aW9ucyA9IHdlYmlkbC5jb252ZXJ0ZXJzLk11bHRpQ2FjaGVRdWVyeU9wdGlvbnMob3B0aW9ucylcblxuICAgIC8vIDEuXG4gICAgaWYgKG9wdGlvbnMuY2FjaGVOYW1lICE9IG51bGwpIHtcbiAgICAgIC8vIDEuMS4xLjFcbiAgICAgIGlmICh0aGlzLiNjYWNoZXMuaGFzKG9wdGlvbnMuY2FjaGVOYW1lKSkge1xuICAgICAgICAvLyAxLjEuMS4xLjFcbiAgICAgICAgY29uc3QgY2FjaGVMaXN0ID0gdGhpcy4jY2FjaGVzLmdldChvcHRpb25zLmNhY2hlTmFtZSlcbiAgICAgICAgY29uc3QgY2FjaGUgPSBuZXcgQ2FjaGUoa0NvbnN0cnVjdCwgY2FjaGVMaXN0KVxuXG4gICAgICAgIHJldHVybiBhd2FpdCBjYWNoZS5tYXRjaChyZXF1ZXN0LCBvcHRpb25zKVxuICAgICAgfVxuICAgIH0gZWxzZSB7IC8vIDIuXG4gICAgICAvLyAyLjJcbiAgICAgIGZvciAoY29uc3QgY2FjaGVMaXN0IG9mIHRoaXMuI2NhY2hlcy52YWx1ZXMoKSkge1xuICAgICAgICBjb25zdCBjYWNoZSA9IG5ldyBDYWNoZShrQ29uc3RydWN0LCBjYWNoZUxpc3QpXG5cbiAgICAgICAgLy8gMi4yLjEuMlxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNhY2hlLm1hdGNoKHJlcXVlc3QsIG9wdGlvbnMpXG5cbiAgICAgICAgaWYgKHJlc3BvbnNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNjYWNoZS1zdG9yYWdlLWhhc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fVxuICAgKi9cbiAgYXN5bmMgaGFzIChjYWNoZU5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZVN0b3JhZ2UpXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0NhY2hlU3RvcmFnZS5oYXMnIH0pXG5cbiAgICBjYWNoZU5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcoY2FjaGVOYW1lKVxuXG4gICAgLy8gMi4xLjFcbiAgICAvLyAyLjJcbiAgICByZXR1cm4gdGhpcy4jY2FjaGVzLmhhcyhjYWNoZU5hbWUpXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jZG9tLWNhY2hlc3RvcmFnZS1vcGVuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWVcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2FjaGU+fVxuICAgKi9cbiAgYXN5bmMgb3BlbiAoY2FjaGVOYW1lKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGVTdG9yYWdlKVxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdDYWNoZVN0b3JhZ2Uub3BlbicgfSlcblxuICAgIGNhY2hlTmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyhjYWNoZU5hbWUpXG5cbiAgICAvLyAyLjFcbiAgICBpZiAodGhpcy4jY2FjaGVzLmhhcyhjYWNoZU5hbWUpKSB7XG4gICAgICAvLyBhd2FpdCBjYWNoZXMub3BlbigndjEnKSAhPT0gYXdhaXQgY2FjaGVzLm9wZW4oJ3YxJylcblxuICAgICAgLy8gMi4xLjFcbiAgICAgIGNvbnN0IGNhY2hlID0gdGhpcy4jY2FjaGVzLmdldChjYWNoZU5hbWUpXG5cbiAgICAgIC8vIDIuMS4xLjFcbiAgICAgIHJldHVybiBuZXcgQ2FjaGUoa0NvbnN0cnVjdCwgY2FjaGUpXG4gICAgfVxuXG4gICAgLy8gMi4yXG4gICAgY29uc3QgY2FjaGUgPSBbXVxuXG4gICAgLy8gMi4zXG4gICAgdGhpcy4jY2FjaGVzLnNldChjYWNoZU5hbWUsIGNhY2hlKVxuXG4gICAgLy8gMi40XG4gICAgcmV0dXJuIG5ldyBDYWNoZShrQ29uc3RydWN0LCBjYWNoZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNjYWNoZS1zdG9yYWdlLWRlbGV0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fVxuICAgKi9cbiAgYXN5bmMgZGVsZXRlIChjYWNoZU5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZVN0b3JhZ2UpXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0NhY2hlU3RvcmFnZS5kZWxldGUnIH0pXG5cbiAgICBjYWNoZU5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcoY2FjaGVOYW1lKVxuXG4gICAgcmV0dXJuIHRoaXMuI2NhY2hlcy5kZWxldGUoY2FjaGVOYW1lKVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2NhY2hlLXN0b3JhZ2Uta2V5c1xuICAgKiBAcmV0dXJucyB7c3RyaW5nW119XG4gICAqL1xuICBhc3luYyBrZXlzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZVN0b3JhZ2UpXG5cbiAgICAvLyAyLjFcbiAgICBjb25zdCBrZXlzID0gdGhpcy4jY2FjaGVzLmtleXMoKVxuXG4gICAgLy8gMi4yXG4gICAgcmV0dXJuIFsuLi5rZXlzXVxuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENhY2hlU3RvcmFnZS5wcm90b3R5cGUsIHtcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0NhY2hlU3RvcmFnZScsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0sXG4gIG1hdGNoOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBoYXM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9wZW46IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGRlbGV0ZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAga2V5czoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIENhY2hlU3RvcmFnZVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuLy8gaHR0cHM6Ly93aWNnLmdpdGh1Yi5pby9jb29raWUtc3RvcmUvI2Nvb2tpZS1tYXhpbXVtLWF0dHJpYnV0ZS12YWx1ZS1zaXplXG5jb25zdCBtYXhBdHRyaWJ1dGVWYWx1ZVNpemUgPSAxMDI0XG5cbi8vIGh0dHBzOi8vd2ljZy5naXRodWIuaW8vY29va2llLXN0b3JlLyNjb29raWUtbWF4aW11bS1uYW1lLXZhbHVlLXBhaXItc2l6ZVxuY29uc3QgbWF4TmFtZVZhbHVlUGFpclNpemUgPSA0MDk2XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtYXhBdHRyaWJ1dGVWYWx1ZVNpemUsXG4gIG1heE5hbWVWYWx1ZVBhaXJTaXplXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBrSGVhZGVyc0xpc3QgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5cbmZ1bmN0aW9uIGlzQ1RMRXhjbHVkaW5nSHRhYiAodmFsdWUpIHtcbiAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgZm9yIChjb25zdCBjaGFyIG9mIHZhbHVlKSB7XG4gICAgY29uc3QgY29kZSA9IGNoYXIuY2hhckNvZGVBdCgwKVxuXG4gICAgaWYgKFxuICAgICAgKGNvZGUgPj0gMHgwMCB8fCBjb2RlIDw9IDB4MDgpIHx8XG4gICAgICAoY29kZSA+PSAweDBBIHx8IGNvZGUgPD0gMHgxRikgfHxcbiAgICAgIGNvZGUgPT09IDB4N0ZcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiBDSEFSICAgICAgICAgICA9IDxhbnkgVVMtQVNDSUkgY2hhcmFjdGVyIChvY3RldHMgMCAtIDEyNyk+XG4gdG9rZW4gICAgICAgICAgPSAxKjxhbnkgQ0hBUiBleGNlcHQgQ1RMcyBvciBzZXBhcmF0b3JzPlxuIHNlcGFyYXRvcnMgICAgID0gXCIoXCIgfCBcIilcIiB8IFwiPFwiIHwgXCI+XCIgfCBcIkBcIlxuICAgICAgICAgICAgICAgIHwgXCIsXCIgfCBcIjtcIiB8IFwiOlwiIHwgXCJcXFwiIHwgPFwiPlxuICAgICAgICAgICAgICAgIHwgXCIvXCIgfCBcIltcIiB8IFwiXVwiIHwgXCI/XCIgfCBcIj1cIlxuICAgICAgICAgICAgICAgIHwgXCJ7XCIgfCBcIn1cIiB8IFNQIHwgSFRcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQ29va2llTmFtZSAobmFtZSkge1xuICBmb3IgKGNvbnN0IGNoYXIgb2YgbmFtZSkge1xuICAgIGNvbnN0IGNvZGUgPSBjaGFyLmNoYXJDb2RlQXQoMClcblxuICAgIGlmIChcbiAgICAgIChjb2RlIDw9IDB4MjAgfHwgY29kZSA+IDB4N0YpIHx8XG4gICAgICBjaGFyID09PSAnKCcgfHxcbiAgICAgIGNoYXIgPT09ICcpJyB8fFxuICAgICAgY2hhciA9PT0gJz4nIHx8XG4gICAgICBjaGFyID09PSAnPCcgfHxcbiAgICAgIGNoYXIgPT09ICdAJyB8fFxuICAgICAgY2hhciA9PT0gJywnIHx8XG4gICAgICBjaGFyID09PSAnOycgfHxcbiAgICAgIGNoYXIgPT09ICc6JyB8fFxuICAgICAgY2hhciA9PT0gJ1xcXFwnIHx8XG4gICAgICBjaGFyID09PSAnXCInIHx8XG4gICAgICBjaGFyID09PSAnLycgfHxcbiAgICAgIGNoYXIgPT09ICdbJyB8fFxuICAgICAgY2hhciA9PT0gJ10nIHx8XG4gICAgICBjaGFyID09PSAnPycgfHxcbiAgICAgIGNoYXIgPT09ICc9JyB8fFxuICAgICAgY2hhciA9PT0gJ3snIHx8XG4gICAgICBjaGFyID09PSAnfSdcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb29raWUgbmFtZScpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuIGNvb2tpZS12YWx1ZSAgICAgID0gKmNvb2tpZS1vY3RldCAvICggRFFVT1RFICpjb29raWUtb2N0ZXQgRFFVT1RFIClcbiBjb29raWUtb2N0ZXQgICAgICA9ICV4MjEgLyAleDIzLTJCIC8gJXgyRC0zQSAvICV4M0MtNUIgLyAleDVELTdFXG4gICAgICAgICAgICAgICAgICAgICAgIDsgVVMtQVNDSUkgY2hhcmFjdGVycyBleGNsdWRpbmcgQ1RMcyxcbiAgICAgICAgICAgICAgICAgICAgICAgOyB3aGl0ZXNwYWNlIERRVU9URSwgY29tbWEsIHNlbWljb2xvbixcbiAgICAgICAgICAgICAgICAgICAgICAgOyBhbmQgYmFja3NsYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVDb29raWVWYWx1ZSAodmFsdWUpIHtcbiAgZm9yIChjb25zdCBjaGFyIG9mIHZhbHVlKSB7XG4gICAgY29uc3QgY29kZSA9IGNoYXIuY2hhckNvZGVBdCgwKVxuXG4gICAgaWYgKFxuICAgICAgY29kZSA8IDB4MjEgfHwgLy8gZXhjbHVkZSBDVExzICgwLTMxKVxuICAgICAgY29kZSA9PT0gMHgyMiB8fFxuICAgICAgY29kZSA9PT0gMHgyQyB8fFxuICAgICAgY29kZSA9PT0gMHgzQiB8fFxuICAgICAgY29kZSA9PT0gMHg1QyB8fFxuICAgICAgY29kZSA+IDB4N0UgLy8gbm9uLWFzY2lpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaGVhZGVyIHZhbHVlJylcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBwYXRoLXZhbHVlICAgICAgICA9IDxhbnkgQ0hBUiBleGNlcHQgQ1RMcyBvciBcIjtcIj5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQ29va2llUGF0aCAocGF0aCkge1xuICBmb3IgKGNvbnN0IGNoYXIgb2YgcGF0aCkge1xuICAgIGNvbnN0IGNvZGUgPSBjaGFyLmNoYXJDb2RlQXQoMClcblxuICAgIGlmIChjb2RlIDwgMHgyMSB8fCBjaGFyID09PSAnOycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb29raWUgcGF0aCcpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogSSBoYXZlIG5vIGlkZWEgd2h5IHRoZXNlIHZhbHVlcyBhcmVuJ3QgYWxsb3dlZCB0byBiZSBob25lc3QsXG4gKiBidXQgRGVubyB0ZXN0cyB0aGVzZS4gLSBLaGFmcmFcbiAqIEBwYXJhbSB7c3RyaW5nfSBkb21haW5cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVDb29raWVEb21haW4gKGRvbWFpbikge1xuICBpZiAoXG4gICAgZG9tYWluLnN0YXJ0c1dpdGgoJy0nKSB8fFxuICAgIGRvbWFpbi5lbmRzV2l0aCgnLicpIHx8XG4gICAgZG9tYWluLmVuZHNXaXRoKCctJylcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvb2tpZSBkb21haW4nKVxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNzIzMSNzZWN0aW9uLTcuMS4xLjFcbiAqIEBwYXJhbSB7bnVtYmVyfERhdGV9IGRhdGVcbiAgSU1GLWZpeGRhdGUgID0gZGF5LW5hbWUgXCIsXCIgU1AgZGF0ZTEgU1AgdGltZS1vZi1kYXkgU1AgR01UXG4gIDsgZml4ZWQgbGVuZ3RoL3pvbmUvY2FwaXRhbGl6YXRpb24gc3Vic2V0IG9mIHRoZSBmb3JtYXRcbiAgOyBzZWUgU2VjdGlvbiAzLjMgb2YgW1JGQzUzMjJdXG5cbiAgZGF5LW5hbWUgICAgID0gJXg0RC42Ri42RSA7IFwiTW9uXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg1NC43NS42NSA7IFwiVHVlXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg1Ny42NS42NCA7IFwiV2VkXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg1NC42OC43NSA7IFwiVGh1XCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0Ni43Mi42OSA7IFwiRnJpXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg1My42MS43NCA7IFwiU2F0XCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg1My43NS42RSA7IFwiU3VuXCIsIGNhc2Utc2Vuc2l0aXZlXG4gIGRhdGUxICAgICAgICA9IGRheSBTUCBtb250aCBTUCB5ZWFyXG4gICAgICAgICAgICAgICAgICA7IGUuZy4sIDAyIEp1biAxOTgyXG5cbiAgZGF5ICAgICAgICAgID0gMkRJR0lUXG4gIG1vbnRoICAgICAgICA9ICV4NEEuNjEuNkUgOyBcIkphblwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NDYuNjUuNjIgOyBcIkZlYlwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NEQuNjEuNzIgOyBcIk1hclwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NDEuNzAuNzIgOyBcIkFwclwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NEQuNjEuNzkgOyBcIk1heVwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NEEuNzUuNkUgOyBcIkp1blwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NEEuNzUuNkMgOyBcIkp1bFwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NDEuNzUuNjcgOyBcIkF1Z1wiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NTMuNjUuNzAgOyBcIlNlcFwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NEYuNjMuNzQgOyBcIk9jdFwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NEUuNkYuNzYgOyBcIk5vdlwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NDQuNjUuNjMgOyBcIkRlY1wiLCBjYXNlLXNlbnNpdGl2ZVxuICB5ZWFyICAgICAgICAgPSA0RElHSVRcblxuICBHTVQgICAgICAgICAgPSAleDQ3LjRELjU0IDsgXCJHTVRcIiwgY2FzZS1zZW5zaXRpdmVcblxuICB0aW1lLW9mLWRheSAgPSBob3VyIFwiOlwiIG1pbnV0ZSBcIjpcIiBzZWNvbmRcbiAgICAgICAgICAgICAgOyAwMDowMDowMCAtIDIzOjU5OjYwIChsZWFwIHNlY29uZClcblxuICBob3VyICAgICAgICAgPSAyRElHSVRcbiAgbWludXRlICAgICAgID0gMkRJR0lUXG4gIHNlY29uZCAgICAgICA9IDJESUdJVFxuICovXG5mdW5jdGlvbiB0b0lNRkRhdGUgKGRhdGUpIHtcbiAgaWYgKHR5cGVvZiBkYXRlID09PSAnbnVtYmVyJykge1xuICAgIGRhdGUgPSBuZXcgRGF0ZShkYXRlKVxuICB9XG5cbiAgY29uc3QgZGF5cyA9IFtcbiAgICAnU3VuJywgJ01vbicsICdUdWUnLCAnV2VkJyxcbiAgICAnVGh1JywgJ0ZyaScsICdTYXQnXG4gIF1cblxuICBjb25zdCBtb250aHMgPSBbXG4gICAgJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJyxcbiAgICAnSnVsJywgJ0F1ZycsICdTZXAnLCAnT2N0JywgJ05vdicsICdEZWMnXG4gIF1cblxuICBjb25zdCBkYXlOYW1lID0gZGF5c1tkYXRlLmdldFVUQ0RheSgpXVxuICBjb25zdCBkYXkgPSBkYXRlLmdldFVUQ0RhdGUoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcbiAgY29uc3QgbW9udGggPSBtb250aHNbZGF0ZS5nZXRVVENNb250aCgpXVxuICBjb25zdCB5ZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpXG4gIGNvbnN0IGhvdXIgPSBkYXRlLmdldFVUQ0hvdXJzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpXG4gIGNvbnN0IG1pbnV0ZSA9IGRhdGUuZ2V0VVRDTWludXRlcygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKVxuICBjb25zdCBzZWNvbmQgPSBkYXRlLmdldFVUQ1NlY29uZHMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcblxuICByZXR1cm4gYCR7ZGF5TmFtZX0sICR7ZGF5fSAke21vbnRofSAke3llYXJ9ICR7aG91cn06JHttaW51dGV9OiR7c2Vjb25kfSBHTVRgXG59XG5cbi8qKlxuIG1heC1hZ2UtYXYgICAgICAgID0gXCJNYXgtQWdlPVwiIG5vbi16ZXJvLWRpZ2l0ICpESUdJVFxuICAgICAgICAgICAgICAgICAgICAgICA7IEluIHByYWN0aWNlLCBib3RoIGV4cGlyZXMtYXYgYW5kIG1heC1hZ2UtYXZcbiAgICAgICAgICAgICAgICAgICAgICAgOyBhcmUgbGltaXRlZCB0byBkYXRlcyByZXByZXNlbnRhYmxlIGJ5IHRoZVxuICAgICAgICAgICAgICAgICAgICAgICA7IHVzZXIgYWdlbnQuXG4gKiBAcGFyYW0ge251bWJlcn0gbWF4QWdlXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQ29va2llTWF4QWdlIChtYXhBZ2UpIHtcbiAgaWYgKG1heEFnZSA8IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29va2llIG1heC1hZ2UnKVxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNjI2NSNzZWN0aW9uLTQuMS4xXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbmRleCcpLkNvb2tpZX0gY29va2llXG4gKi9cbmZ1bmN0aW9uIHN0cmluZ2lmeSAoY29va2llKSB7XG4gIGlmIChjb29raWUubmFtZS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgdmFsaWRhdGVDb29raWVOYW1lKGNvb2tpZS5uYW1lKVxuICB2YWxpZGF0ZUNvb2tpZVZhbHVlKGNvb2tpZS52YWx1ZSlcblxuICBjb25zdCBvdXQgPSBbYCR7Y29va2llLm5hbWV9PSR7Y29va2llLnZhbHVlfWBdXG5cbiAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtY29va2llLXByZWZpeGVzLTAwI3NlY3Rpb24tMy4xXG4gIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLWNvb2tpZS1wcmVmaXhlcy0wMCNzZWN0aW9uLTMuMlxuICBpZiAoY29va2llLm5hbWUuc3RhcnRzV2l0aCgnX19TZWN1cmUtJykpIHtcbiAgICBjb29raWUuc2VjdXJlID0gdHJ1ZVxuICB9XG5cbiAgaWYgKGNvb2tpZS5uYW1lLnN0YXJ0c1dpdGgoJ19fSG9zdC0nKSkge1xuICAgIGNvb2tpZS5zZWN1cmUgPSB0cnVlXG4gICAgY29va2llLmRvbWFpbiA9IG51bGxcbiAgICBjb29raWUucGF0aCA9ICcvJ1xuICB9XG5cbiAgaWYgKGNvb2tpZS5zZWN1cmUpIHtcbiAgICBvdXQucHVzaCgnU2VjdXJlJylcbiAgfVxuXG4gIGlmIChjb29raWUuaHR0cE9ubHkpIHtcbiAgICBvdXQucHVzaCgnSHR0cE9ubHknKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBjb29raWUubWF4QWdlID09PSAnbnVtYmVyJykge1xuICAgIHZhbGlkYXRlQ29va2llTWF4QWdlKGNvb2tpZS5tYXhBZ2UpXG4gICAgb3V0LnB1c2goYE1heC1BZ2U9JHtjb29raWUubWF4QWdlfWApXG4gIH1cblxuICBpZiAoY29va2llLmRvbWFpbikge1xuICAgIHZhbGlkYXRlQ29va2llRG9tYWluKGNvb2tpZS5kb21haW4pXG4gICAgb3V0LnB1c2goYERvbWFpbj0ke2Nvb2tpZS5kb21haW59YClcbiAgfVxuXG4gIGlmIChjb29raWUucGF0aCkge1xuICAgIHZhbGlkYXRlQ29va2llUGF0aChjb29raWUucGF0aClcbiAgICBvdXQucHVzaChgUGF0aD0ke2Nvb2tpZS5wYXRofWApXG4gIH1cblxuICBpZiAoY29va2llLmV4cGlyZXMgJiYgY29va2llLmV4cGlyZXMudG9TdHJpbmcoKSAhPT0gJ0ludmFsaWQgRGF0ZScpIHtcbiAgICBvdXQucHVzaChgRXhwaXJlcz0ke3RvSU1GRGF0ZShjb29raWUuZXhwaXJlcyl9YClcbiAgfVxuXG4gIGlmIChjb29raWUuc2FtZVNpdGUpIHtcbiAgICBvdXQucHVzaChgU2FtZVNpdGU9JHtjb29raWUuc2FtZVNpdGV9YClcbiAgfVxuXG4gIGZvciAoY29uc3QgcGFydCBvZiBjb29raWUudW5wYXJzZWQpIHtcbiAgICBpZiAoIXBhcnQuaW5jbHVkZXMoJz0nKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHVucGFyc2VkJylcbiAgICB9XG5cbiAgICBjb25zdCBba2V5LCAuLi52YWx1ZV0gPSBwYXJ0LnNwbGl0KCc9JylcblxuICAgIG91dC5wdXNoKGAke2tleS50cmltKCl9PSR7dmFsdWUuam9pbignPScpfWApXG4gIH1cblxuICByZXR1cm4gb3V0LmpvaW4oJzsgJylcbn1cblxubGV0IGtIZWFkZXJzTGlzdE5vZGVcblxuZnVuY3Rpb24gZ2V0SGVhZGVyc0xpc3QgKGhlYWRlcnMpIHtcbiAgaWYgKGhlYWRlcnNba0hlYWRlcnNMaXN0XSkge1xuICAgIHJldHVybiBoZWFkZXJzW2tIZWFkZXJzTGlzdF1cbiAgfVxuXG4gIGlmICgha0hlYWRlcnNMaXN0Tm9kZSkge1xuICAgIGtIZWFkZXJzTGlzdE5vZGUgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGhlYWRlcnMpLmZpbmQoXG4gICAgICAoc3ltYm9sKSA9PiBzeW1ib2wuZGVzY3JpcHRpb24gPT09ICdoZWFkZXJzIGxpc3QnXG4gICAgKVxuXG4gICAgYXNzZXJ0KGtIZWFkZXJzTGlzdE5vZGUsICdIZWFkZXJzIGNhbm5vdCBiZSBwYXJzZWQnKVxuICB9XG5cbiAgY29uc3QgaGVhZGVyc0xpc3QgPSBoZWFkZXJzW2tIZWFkZXJzTGlzdE5vZGVdXG4gIGFzc2VydChoZWFkZXJzTGlzdClcblxuICByZXR1cm4gaGVhZGVyc0xpc3Rcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGlzQ1RMRXhjbHVkaW5nSHRhYixcbiAgc3RyaW5naWZ5LFxuICBnZXRIZWFkZXJzTGlzdFxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBtYXhOYW1lVmFsdWVQYWlyU2l6ZSwgbWF4QXR0cmlidXRlVmFsdWVTaXplIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7IGlzQ1RMRXhjbHVkaW5nSHRhYiB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2RhdGFVUkwnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUGFyc2VzIHRoZSBmaWVsZC12YWx1ZSBhdHRyaWJ1dGVzIG9mIGEgc2V0LWNvb2tpZSBoZWFkZXIgc3RyaW5nLlxuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1yZmM2MjY1YmlzI3NlY3Rpb24tNS40XG4gKiBAcGFyYW0ge3N0cmluZ30gaGVhZGVyXG4gKiBAcmV0dXJucyBpZiB0aGUgaGVhZGVyIGlzIGludmFsaWQsIG51bGwgd2lsbCBiZSByZXR1cm5lZFxuICovXG5mdW5jdGlvbiBwYXJzZVNldENvb2tpZSAoaGVhZGVyKSB7XG4gIC8vIDEuIElmIHRoZSBzZXQtY29va2llLXN0cmluZyBjb250YWlucyBhICV4MDAtMDggLyAleDBBLTFGIC8gJXg3RlxuICAvLyAgICBjaGFyYWN0ZXIgKENUTCBjaGFyYWN0ZXJzIGV4Y2x1ZGluZyBIVEFCKTogQWJvcnQgdGhlc2Ugc3RlcHMgYW5kXG4gIC8vICAgIGlnbm9yZSB0aGUgc2V0LWNvb2tpZS1zdHJpbmcgZW50aXJlbHkuXG4gIGlmIChpc0NUTEV4Y2x1ZGluZ0h0YWIoaGVhZGVyKSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBsZXQgbmFtZVZhbHVlUGFpciA9ICcnXG4gIGxldCB1bnBhcnNlZEF0dHJpYnV0ZXMgPSAnJ1xuICBsZXQgbmFtZSA9ICcnXG4gIGxldCB2YWx1ZSA9ICcnXG5cbiAgLy8gMi4gSWYgdGhlIHNldC1jb29raWUtc3RyaW5nIGNvbnRhaW5zIGEgJXgzQiAoXCI7XCIpIGNoYXJhY3RlcjpcbiAgaWYgKGhlYWRlci5pbmNsdWRlcygnOycpKSB7XG4gICAgLy8gMS4gVGhlIG5hbWUtdmFsdWUtcGFpciBzdHJpbmcgY29uc2lzdHMgb2YgdGhlIGNoYXJhY3RlcnMgdXAgdG8sXG4gICAgLy8gICAgYnV0IG5vdCBpbmNsdWRpbmcsIHRoZSBmaXJzdCAleDNCIChcIjtcIiksIGFuZCB0aGUgdW5wYXJzZWQtXG4gICAgLy8gICAgYXR0cmlidXRlcyBjb25zaXN0IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHNldC1jb29raWUtc3RyaW5nXG4gICAgLy8gICAgKGluY2x1ZGluZyB0aGUgJXgzQiAoXCI7XCIpIGluIHF1ZXN0aW9uKS5cbiAgICBjb25zdCBwb3NpdGlvbiA9IHsgcG9zaXRpb246IDAgfVxuXG4gICAgbmFtZVZhbHVlUGFpciA9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0KCc7JywgaGVhZGVyLCBwb3NpdGlvbilcbiAgICB1bnBhcnNlZEF0dHJpYnV0ZXMgPSBoZWFkZXIuc2xpY2UocG9zaXRpb24ucG9zaXRpb24pXG4gIH0gZWxzZSB7XG4gICAgLy8gT3RoZXJ3aXNlOlxuXG4gICAgLy8gMS4gVGhlIG5hbWUtdmFsdWUtcGFpciBzdHJpbmcgY29uc2lzdHMgb2YgYWxsIHRoZSBjaGFyYWN0ZXJzXG4gICAgLy8gICAgY29udGFpbmVkIGluIHRoZSBzZXQtY29va2llLXN0cmluZywgYW5kIHRoZSB1bnBhcnNlZC1cbiAgICAvLyAgICBhdHRyaWJ1dGVzIGlzIHRoZSBlbXB0eSBzdHJpbmcuXG4gICAgbmFtZVZhbHVlUGFpciA9IGhlYWRlclxuICB9XG5cbiAgLy8gMy4gSWYgdGhlIG5hbWUtdmFsdWUtcGFpciBzdHJpbmcgbGFja3MgYSAleDNEIChcIj1cIikgY2hhcmFjdGVyLCB0aGVuXG4gIC8vICAgIHRoZSBuYW1lIHN0cmluZyBpcyBlbXB0eSwgYW5kIHRoZSB2YWx1ZSBzdHJpbmcgaXMgdGhlIHZhbHVlIG9mXG4gIC8vICAgIG5hbWUtdmFsdWUtcGFpci5cbiAgaWYgKCFuYW1lVmFsdWVQYWlyLmluY2x1ZGVzKCc9JykpIHtcbiAgICB2YWx1ZSA9IG5hbWVWYWx1ZVBhaXJcbiAgfSBlbHNlIHtcbiAgICAvLyAgICBPdGhlcndpc2UsIHRoZSBuYW1lIHN0cmluZyBjb25zaXN0cyBvZiB0aGUgY2hhcmFjdGVycyB1cCB0bywgYnV0XG4gICAgLy8gICAgbm90IGluY2x1ZGluZywgdGhlIGZpcnN0ICV4M0QgKFwiPVwiKSBjaGFyYWN0ZXIsIGFuZCB0aGUgKHBvc3NpYmx5XG4gICAgLy8gICAgZW1wdHkpIHZhbHVlIHN0cmluZyBjb25zaXN0cyBvZiB0aGUgY2hhcmFjdGVycyBhZnRlciB0aGUgZmlyc3RcbiAgICAvLyAgICAleDNEIChcIj1cIikgY2hhcmFjdGVyLlxuICAgIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogMCB9XG4gICAgbmFtZSA9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0KFxuICAgICAgJz0nLFxuICAgICAgbmFtZVZhbHVlUGFpcixcbiAgICAgIHBvc2l0aW9uXG4gICAgKVxuICAgIHZhbHVlID0gbmFtZVZhbHVlUGFpci5zbGljZShwb3NpdGlvbi5wb3NpdGlvbiArIDEpXG4gIH1cblxuICAvLyA0LiBSZW1vdmUgYW55IGxlYWRpbmcgb3IgdHJhaWxpbmcgV1NQIGNoYXJhY3RlcnMgZnJvbSB0aGUgbmFtZVxuICAvLyAgICBzdHJpbmcgYW5kIHRoZSB2YWx1ZSBzdHJpbmcuXG4gIG5hbWUgPSBuYW1lLnRyaW0oKVxuICB2YWx1ZSA9IHZhbHVlLnRyaW0oKVxuXG4gIC8vIDUuIElmIHRoZSBzdW0gb2YgdGhlIGxlbmd0aHMgb2YgdGhlIG5hbWUgc3RyaW5nIGFuZCB0aGUgdmFsdWUgc3RyaW5nXG4gIC8vICAgIGlzIG1vcmUgdGhhbiA0MDk2IG9jdGV0cywgYWJvcnQgdGhlc2Ugc3RlcHMgYW5kIGlnbm9yZSB0aGUgc2V0LVxuICAvLyAgICBjb29raWUtc3RyaW5nIGVudGlyZWx5LlxuICBpZiAobmFtZS5sZW5ndGggKyB2YWx1ZS5sZW5ndGggPiBtYXhOYW1lVmFsdWVQYWlyU2l6ZSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvLyA2LiBUaGUgY29va2llLW5hbWUgaXMgdGhlIG5hbWUgc3RyaW5nLCBhbmQgdGhlIGNvb2tpZS12YWx1ZSBpcyB0aGVcbiAgLy8gICAgdmFsdWUgc3RyaW5nLlxuICByZXR1cm4ge1xuICAgIG5hbWUsIHZhbHVlLCAuLi5wYXJzZVVucGFyc2VkQXR0cmlidXRlcyh1bnBhcnNlZEF0dHJpYnV0ZXMpXG4gIH1cbn1cblxuLyoqXG4gKiBQYXJzZXMgdGhlIHJlbWFpbmluZyBhdHRyaWJ1dGVzIG9mIGEgc2V0LWNvb2tpZSBoZWFkZXJcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtcmZjNjI2NWJpcyNzZWN0aW9uLTUuNFxuICogQHBhcmFtIHtzdHJpbmd9IHVucGFyc2VkQXR0cmlidXRlc1xuICogQHBhcmFtIHtbT2JqZWN0LjxzdHJpbmcsIHVua25vd24+XT17fX0gY29va2llQXR0cmlidXRlTGlzdFxuICovXG5mdW5jdGlvbiBwYXJzZVVucGFyc2VkQXR0cmlidXRlcyAodW5wYXJzZWRBdHRyaWJ1dGVzLCBjb29raWVBdHRyaWJ1dGVMaXN0ID0ge30pIHtcbiAgLy8gMS4gSWYgdGhlIHVucGFyc2VkLWF0dHJpYnV0ZXMgc3RyaW5nIGlzIGVtcHR5LCBza2lwIHRoZSByZXN0IG9mXG4gIC8vICAgIHRoZXNlIHN0ZXBzLlxuICBpZiAodW5wYXJzZWRBdHRyaWJ1dGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBjb29raWVBdHRyaWJ1dGVMaXN0XG4gIH1cblxuICAvLyAyLiBEaXNjYXJkIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIHVucGFyc2VkLWF0dHJpYnV0ZXMgKHdoaWNoXG4gIC8vICAgIHdpbGwgYmUgYSAleDNCIChcIjtcIikgY2hhcmFjdGVyKS5cbiAgYXNzZXJ0KHVucGFyc2VkQXR0cmlidXRlc1swXSA9PT0gJzsnKVxuICB1bnBhcnNlZEF0dHJpYnV0ZXMgPSB1bnBhcnNlZEF0dHJpYnV0ZXMuc2xpY2UoMSlcblxuICBsZXQgY29va2llQXYgPSAnJ1xuXG4gIC8vIDMuIElmIHRoZSByZW1haW5pbmcgdW5wYXJzZWQtYXR0cmlidXRlcyBjb250YWlucyBhICV4M0IgKFwiO1wiKVxuICAvLyAgICBjaGFyYWN0ZXI6XG4gIGlmICh1bnBhcnNlZEF0dHJpYnV0ZXMuaW5jbHVkZXMoJzsnKSkge1xuICAgIC8vIDEuIENvbnN1bWUgdGhlIGNoYXJhY3RlcnMgb2YgdGhlIHVucGFyc2VkLWF0dHJpYnV0ZXMgdXAgdG8sIGJ1dFxuICAgIC8vICAgIG5vdCBpbmNsdWRpbmcsIHRoZSBmaXJzdCAleDNCIChcIjtcIikgY2hhcmFjdGVyLlxuICAgIGNvb2tpZUF2ID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoXG4gICAgICAnOycsXG4gICAgICB1bnBhcnNlZEF0dHJpYnV0ZXMsXG4gICAgICB7IHBvc2l0aW9uOiAwIH1cbiAgICApXG4gICAgdW5wYXJzZWRBdHRyaWJ1dGVzID0gdW5wYXJzZWRBdHRyaWJ1dGVzLnNsaWNlKGNvb2tpZUF2Lmxlbmd0aClcbiAgfSBlbHNlIHtcbiAgICAvLyBPdGhlcndpc2U6XG5cbiAgICAvLyAxLiBDb25zdW1lIHRoZSByZW1haW5kZXIgb2YgdGhlIHVucGFyc2VkLWF0dHJpYnV0ZXMuXG4gICAgY29va2llQXYgPSB1bnBhcnNlZEF0dHJpYnV0ZXNcbiAgICB1bnBhcnNlZEF0dHJpYnV0ZXMgPSAnJ1xuICB9XG5cbiAgLy8gTGV0IHRoZSBjb29raWUtYXYgc3RyaW5nIGJlIHRoZSBjaGFyYWN0ZXJzIGNvbnN1bWVkIGluIHRoaXMgc3RlcC5cblxuICBsZXQgYXR0cmlidXRlTmFtZSA9ICcnXG4gIGxldCBhdHRyaWJ1dGVWYWx1ZSA9ICcnXG5cbiAgLy8gNC4gSWYgdGhlIGNvb2tpZS1hdiBzdHJpbmcgY29udGFpbnMgYSAleDNEIChcIj1cIikgY2hhcmFjdGVyOlxuICBpZiAoY29va2llQXYuaW5jbHVkZXMoJz0nKSkge1xuICAgIC8vIDEuIFRoZSAocG9zc2libHkgZW1wdHkpIGF0dHJpYnV0ZS1uYW1lIHN0cmluZyBjb25zaXN0cyBvZiB0aGVcbiAgICAvLyAgICBjaGFyYWN0ZXJzIHVwIHRvLCBidXQgbm90IGluY2x1ZGluZywgdGhlIGZpcnN0ICV4M0QgKFwiPVwiKVxuICAgIC8vICAgIGNoYXJhY3RlciwgYW5kIHRoZSAocG9zc2libHkgZW1wdHkpIGF0dHJpYnV0ZS12YWx1ZSBzdHJpbmdcbiAgICAvLyAgICBjb25zaXN0cyBvZiB0aGUgY2hhcmFjdGVycyBhZnRlciB0aGUgZmlyc3QgJXgzRCAoXCI9XCIpXG4gICAgLy8gICAgY2hhcmFjdGVyLlxuICAgIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogMCB9XG5cbiAgICBhdHRyaWJ1dGVOYW1lID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoXG4gICAgICAnPScsXG4gICAgICBjb29raWVBdixcbiAgICAgIHBvc2l0aW9uXG4gICAgKVxuICAgIGF0dHJpYnV0ZVZhbHVlID0gY29va2llQXYuc2xpY2UocG9zaXRpb24ucG9zaXRpb24gKyAxKVxuICB9IGVsc2Uge1xuICAgIC8vIE90aGVyd2lzZTpcblxuICAgIC8vIDEuIFRoZSBhdHRyaWJ1dGUtbmFtZSBzdHJpbmcgY29uc2lzdHMgb2YgdGhlIGVudGlyZSBjb29raWUtYXZcbiAgICAvLyAgICBzdHJpbmcsIGFuZCB0aGUgYXR0cmlidXRlLXZhbHVlIHN0cmluZyBpcyBlbXB0eS5cbiAgICBhdHRyaWJ1dGVOYW1lID0gY29va2llQXZcbiAgfVxuXG4gIC8vIDUuIFJlbW92ZSBhbnkgbGVhZGluZyBvciB0cmFpbGluZyBXU1AgY2hhcmFjdGVycyBmcm9tIHRoZSBhdHRyaWJ1dGUtXG4gIC8vICAgIG5hbWUgc3RyaW5nIGFuZCB0aGUgYXR0cmlidXRlLXZhbHVlIHN0cmluZy5cbiAgYXR0cmlidXRlTmFtZSA9IGF0dHJpYnV0ZU5hbWUudHJpbSgpXG4gIGF0dHJpYnV0ZVZhbHVlID0gYXR0cmlidXRlVmFsdWUudHJpbSgpXG5cbiAgLy8gNi4gSWYgdGhlIGF0dHJpYnV0ZS12YWx1ZSBpcyBsb25nZXIgdGhhbiAxMDI0IG9jdGV0cywgaWdub3JlIHRoZVxuICAvLyAgICBjb29raWUtYXYgc3RyaW5nIGFuZCByZXR1cm4gdG8gU3RlcCAxIG9mIHRoaXMgYWxnb3JpdGhtLlxuICBpZiAoYXR0cmlidXRlVmFsdWUubGVuZ3RoID4gbWF4QXR0cmlidXRlVmFsdWVTaXplKSB7XG4gICAgcmV0dXJuIHBhcnNlVW5wYXJzZWRBdHRyaWJ1dGVzKHVucGFyc2VkQXR0cmlidXRlcywgY29va2llQXR0cmlidXRlTGlzdClcbiAgfVxuXG4gIC8vIDcuIFByb2Nlc3MgdGhlIGF0dHJpYnV0ZS1uYW1lIGFuZCBhdHRyaWJ1dGUtdmFsdWUgYWNjb3JkaW5nIHRvIHRoZVxuICAvLyAgICByZXF1aXJlbWVudHMgaW4gdGhlIGZvbGxvd2luZyBzdWJzZWN0aW9ucy4gIChOb3RpY2UgdGhhdFxuICAvLyAgICBhdHRyaWJ1dGVzIHdpdGggdW5yZWNvZ25pemVkIGF0dHJpYnV0ZS1uYW1lcyBhcmUgaWdub3JlZC4pXG4gIGNvbnN0IGF0dHJpYnV0ZU5hbWVMb3dlcmNhc2UgPSBhdHRyaWJ1dGVOYW1lLnRvTG93ZXJDYXNlKClcblxuICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1yZmM2MjY1YmlzI3NlY3Rpb24tNS40LjFcbiAgLy8gSWYgdGhlIGF0dHJpYnV0ZS1uYW1lIGNhc2UtaW5zZW5zaXRpdmVseSBtYXRjaGVzIHRoZSBzdHJpbmdcbiAgLy8gXCJFeHBpcmVzXCIsIHRoZSB1c2VyIGFnZW50IE1VU1QgcHJvY2VzcyB0aGUgY29va2llLWF2IGFzIGZvbGxvd3MuXG4gIGlmIChhdHRyaWJ1dGVOYW1lTG93ZXJjYXNlID09PSAnZXhwaXJlcycpIHtcbiAgICAvLyAxLiBMZXQgdGhlIGV4cGlyeS10aW1lIGJlIHRoZSByZXN1bHQgb2YgcGFyc2luZyB0aGUgYXR0cmlidXRlLXZhbHVlXG4gICAgLy8gICAgYXMgY29va2llLWRhdGUgKHNlZSBTZWN0aW9uIDUuMS4xKS5cbiAgICBjb25zdCBleHBpcnlUaW1lID0gbmV3IERhdGUoYXR0cmlidXRlVmFsdWUpXG5cbiAgICAvLyAyLiBJZiB0aGUgYXR0cmlidXRlLXZhbHVlIGZhaWxlZCB0byBwYXJzZSBhcyBhIGNvb2tpZSBkYXRlLCBpZ25vcmVcbiAgICAvLyAgICB0aGUgY29va2llLWF2LlxuXG4gICAgY29va2llQXR0cmlidXRlTGlzdC5leHBpcmVzID0gZXhwaXJ5VGltZVxuICB9IGVsc2UgaWYgKGF0dHJpYnV0ZU5hbWVMb3dlcmNhc2UgPT09ICdtYXgtYWdlJykge1xuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjQuMlxuICAgIC8vIElmIHRoZSBhdHRyaWJ1dGUtbmFtZSBjYXNlLWluc2Vuc2l0aXZlbHkgbWF0Y2hlcyB0aGUgc3RyaW5nIFwiTWF4LVxuICAgIC8vIEFnZVwiLCB0aGUgdXNlciBhZ2VudCBNVVNUIHByb2Nlc3MgdGhlIGNvb2tpZS1hdiBhcyBmb2xsb3dzLlxuXG4gICAgLy8gMS4gSWYgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgYXR0cmlidXRlLXZhbHVlIGlzIG5vdCBhIERJR0lUIG9yIGFcbiAgICAvLyAgICBcIi1cIiBjaGFyYWN0ZXIsIGlnbm9yZSB0aGUgY29va2llLWF2LlxuICAgIGNvbnN0IGNoYXJDb2RlID0gYXR0cmlidXRlVmFsdWUuY2hhckNvZGVBdCgwKVxuXG4gICAgaWYgKChjaGFyQ29kZSA8IDQ4IHx8IGNoYXJDb2RlID4gNTcpICYmIGF0dHJpYnV0ZVZhbHVlWzBdICE9PSAnLScpIHtcbiAgICAgIHJldHVybiBwYXJzZVVucGFyc2VkQXR0cmlidXRlcyh1bnBhcnNlZEF0dHJpYnV0ZXMsIGNvb2tpZUF0dHJpYnV0ZUxpc3QpXG4gICAgfVxuXG4gICAgLy8gMi4gSWYgdGhlIHJlbWFpbmRlciBvZiBhdHRyaWJ1dGUtdmFsdWUgY29udGFpbnMgYSBub24tRElHSVRcbiAgICAvLyAgICBjaGFyYWN0ZXIsIGlnbm9yZSB0aGUgY29va2llLWF2LlxuICAgIGlmICghL15cXGQrJC8udGVzdChhdHRyaWJ1dGVWYWx1ZSkpIHtcbiAgICAgIHJldHVybiBwYXJzZVVucGFyc2VkQXR0cmlidXRlcyh1bnBhcnNlZEF0dHJpYnV0ZXMsIGNvb2tpZUF0dHJpYnV0ZUxpc3QpXG4gICAgfVxuXG4gICAgLy8gMy4gTGV0IGRlbHRhLXNlY29uZHMgYmUgdGhlIGF0dHJpYnV0ZS12YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gaW50ZWdlci5cbiAgICBjb25zdCBkZWx0YVNlY29uZHMgPSBOdW1iZXIoYXR0cmlidXRlVmFsdWUpXG5cbiAgICAvLyA0LiBMZXQgY29va2llLWFnZS1saW1pdCBiZSB0aGUgbWF4aW11bSBhZ2Ugb2YgdGhlIGNvb2tpZSAod2hpY2hcbiAgICAvLyAgICBTSE9VTEQgYmUgNDAwIGRheXMgb3IgbGVzcywgc2VlIFNlY3Rpb24gNC4xLjIuMikuXG5cbiAgICAvLyA1LiBTZXQgZGVsdGEtc2Vjb25kcyB0byB0aGUgc21hbGxlciBvZiBpdHMgcHJlc2VudCB2YWx1ZSBhbmQgY29va2llLVxuICAgIC8vICAgIGFnZS1saW1pdC5cbiAgICAvLyBkZWx0YVNlY29uZHMgPSBNYXRoLm1pbihkZWx0YVNlY29uZHMgKiAxMDAwLCBtYXhFeHBpcmVzTXMpXG5cbiAgICAvLyA2LiBJZiBkZWx0YS1zZWNvbmRzIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB6ZXJvICgwKSwgbGV0IGV4cGlyeS1cbiAgICAvLyAgICB0aW1lIGJlIHRoZSBlYXJsaWVzdCByZXByZXNlbnRhYmxlIGRhdGUgYW5kIHRpbWUuICBPdGhlcndpc2UsIGxldFxuICAgIC8vICAgIHRoZSBleHBpcnktdGltZSBiZSB0aGUgY3VycmVudCBkYXRlIGFuZCB0aW1lIHBsdXMgZGVsdGEtc2Vjb25kc1xuICAgIC8vICAgIHNlY29uZHMuXG4gICAgLy8gY29uc3QgZXhwaXJ5VGltZSA9IGRlbHRhU2Vjb25kcyA8PSAwID8gRGF0ZS5ub3coKSA6IERhdGUubm93KCkgKyBkZWx0YVNlY29uZHNcblxuICAgIC8vIDcuIEFwcGVuZCBhbiBhdHRyaWJ1dGUgdG8gdGhlIGNvb2tpZS1hdHRyaWJ1dGUtbGlzdCB3aXRoIGFuXG4gICAgLy8gICAgYXR0cmlidXRlLW5hbWUgb2YgTWF4LUFnZSBhbmQgYW4gYXR0cmlidXRlLXZhbHVlIG9mIGV4cGlyeS10aW1lLlxuICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3QubWF4QWdlID0gZGVsdGFTZWNvbmRzXG4gIH0gZWxzZSBpZiAoYXR0cmlidXRlTmFtZUxvd2VyY2FzZSA9PT0gJ2RvbWFpbicpIHtcbiAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1yZmM2MjY1YmlzI3NlY3Rpb24tNS40LjNcbiAgICAvLyBJZiB0aGUgYXR0cmlidXRlLW5hbWUgY2FzZS1pbnNlbnNpdGl2ZWx5IG1hdGNoZXMgdGhlIHN0cmluZyBcIkRvbWFpblwiLFxuICAgIC8vIHRoZSB1c2VyIGFnZW50IE1VU1QgcHJvY2VzcyB0aGUgY29va2llLWF2IGFzIGZvbGxvd3MuXG5cbiAgICAvLyAxLiBMZXQgY29va2llLWRvbWFpbiBiZSB0aGUgYXR0cmlidXRlLXZhbHVlLlxuICAgIGxldCBjb29raWVEb21haW4gPSBhdHRyaWJ1dGVWYWx1ZVxuXG4gICAgLy8gMi4gSWYgY29va2llLWRvbWFpbiBzdGFydHMgd2l0aCAleDJFIChcIi5cIiksIGxldCBjb29raWUtZG9tYWluIGJlXG4gICAgLy8gICAgY29va2llLWRvbWFpbiB3aXRob3V0IGl0cyBsZWFkaW5nICV4MkUgKFwiLlwiKS5cbiAgICBpZiAoY29va2llRG9tYWluWzBdID09PSAnLicpIHtcbiAgICAgIGNvb2tpZURvbWFpbiA9IGNvb2tpZURvbWFpbi5zbGljZSgxKVxuICAgIH1cblxuICAgIC8vIDMuIENvbnZlcnQgdGhlIGNvb2tpZS1kb21haW4gdG8gbG93ZXIgY2FzZS5cbiAgICBjb29raWVEb21haW4gPSBjb29raWVEb21haW4udG9Mb3dlckNhc2UoKVxuXG4gICAgLy8gNC4gQXBwZW5kIGFuIGF0dHJpYnV0ZSB0byB0aGUgY29va2llLWF0dHJpYnV0ZS1saXN0IHdpdGggYW5cbiAgICAvLyAgICBhdHRyaWJ1dGUtbmFtZSBvZiBEb21haW4gYW5kIGFuIGF0dHJpYnV0ZS12YWx1ZSBvZiBjb29raWUtZG9tYWluLlxuICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3QuZG9tYWluID0gY29va2llRG9tYWluXG4gIH0gZWxzZSBpZiAoYXR0cmlidXRlTmFtZUxvd2VyY2FzZSA9PT0gJ3BhdGgnKSB7XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtcmZjNjI2NWJpcyNzZWN0aW9uLTUuNC40XG4gICAgLy8gSWYgdGhlIGF0dHJpYnV0ZS1uYW1lIGNhc2UtaW5zZW5zaXRpdmVseSBtYXRjaGVzIHRoZSBzdHJpbmcgXCJQYXRoXCIsXG4gICAgLy8gdGhlIHVzZXIgYWdlbnQgTVVTVCBwcm9jZXNzIHRoZSBjb29raWUtYXYgYXMgZm9sbG93cy5cblxuICAgIC8vIDEuIElmIHRoZSBhdHRyaWJ1dGUtdmFsdWUgaXMgZW1wdHkgb3IgaWYgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGVcbiAgICAvLyAgICBhdHRyaWJ1dGUtdmFsdWUgaXMgbm90ICV4MkYgKFwiL1wiKTpcbiAgICBsZXQgY29va2llUGF0aCA9ICcnXG4gICAgaWYgKGF0dHJpYnV0ZVZhbHVlLmxlbmd0aCA9PT0gMCB8fCBhdHRyaWJ1dGVWYWx1ZVswXSAhPT0gJy8nKSB7XG4gICAgICAvLyAxLiBMZXQgY29va2llLXBhdGggYmUgdGhlIGRlZmF1bHQtcGF0aC5cbiAgICAgIGNvb2tpZVBhdGggPSAnLydcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT3RoZXJ3aXNlOlxuXG4gICAgICAvLyAxLiBMZXQgY29va2llLXBhdGggYmUgdGhlIGF0dHJpYnV0ZS12YWx1ZS5cbiAgICAgIGNvb2tpZVBhdGggPSBhdHRyaWJ1dGVWYWx1ZVxuICAgIH1cblxuICAgIC8vIDIuIEFwcGVuZCBhbiBhdHRyaWJ1dGUgdG8gdGhlIGNvb2tpZS1hdHRyaWJ1dGUtbGlzdCB3aXRoIGFuXG4gICAgLy8gICAgYXR0cmlidXRlLW5hbWUgb2YgUGF0aCBhbmQgYW4gYXR0cmlidXRlLXZhbHVlIG9mIGNvb2tpZS1wYXRoLlxuICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3QucGF0aCA9IGNvb2tpZVBhdGhcbiAgfSBlbHNlIGlmIChhdHRyaWJ1dGVOYW1lTG93ZXJjYXNlID09PSAnc2VjdXJlJykge1xuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjQuNVxuICAgIC8vIElmIHRoZSBhdHRyaWJ1dGUtbmFtZSBjYXNlLWluc2Vuc2l0aXZlbHkgbWF0Y2hlcyB0aGUgc3RyaW5nIFwiU2VjdXJlXCIsXG4gICAgLy8gdGhlIHVzZXIgYWdlbnQgTVVTVCBhcHBlbmQgYW4gYXR0cmlidXRlIHRvIHRoZSBjb29raWUtYXR0cmlidXRlLWxpc3RcbiAgICAvLyB3aXRoIGFuIGF0dHJpYnV0ZS1uYW1lIG9mIFNlY3VyZSBhbmQgYW4gZW1wdHkgYXR0cmlidXRlLXZhbHVlLlxuXG4gICAgY29va2llQXR0cmlidXRlTGlzdC5zZWN1cmUgPSB0cnVlXG4gIH0gZWxzZSBpZiAoYXR0cmlidXRlTmFtZUxvd2VyY2FzZSA9PT0gJ2h0dHBvbmx5Jykge1xuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjQuNlxuICAgIC8vIElmIHRoZSBhdHRyaWJ1dGUtbmFtZSBjYXNlLWluc2Vuc2l0aXZlbHkgbWF0Y2hlcyB0aGUgc3RyaW5nXG4gICAgLy8gXCJIdHRwT25seVwiLCB0aGUgdXNlciBhZ2VudCBNVVNUIGFwcGVuZCBhbiBhdHRyaWJ1dGUgdG8gdGhlIGNvb2tpZS1cbiAgICAvLyBhdHRyaWJ1dGUtbGlzdCB3aXRoIGFuIGF0dHJpYnV0ZS1uYW1lIG9mIEh0dHBPbmx5IGFuZCBhbiBlbXB0eVxuICAgIC8vIGF0dHJpYnV0ZS12YWx1ZS5cblxuICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3QuaHR0cE9ubHkgPSB0cnVlXG4gIH0gZWxzZSBpZiAoYXR0cmlidXRlTmFtZUxvd2VyY2FzZSA9PT0gJ3NhbWVzaXRlJykge1xuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjQuN1xuICAgIC8vIElmIHRoZSBhdHRyaWJ1dGUtbmFtZSBjYXNlLWluc2Vuc2l0aXZlbHkgbWF0Y2hlcyB0aGUgc3RyaW5nXG4gICAgLy8gXCJTYW1lU2l0ZVwiLCB0aGUgdXNlciBhZ2VudCBNVVNUIHByb2Nlc3MgdGhlIGNvb2tpZS1hdiBhcyBmb2xsb3dzOlxuXG4gICAgLy8gMS4gTGV0IGVuZm9yY2VtZW50IGJlIFwiRGVmYXVsdFwiLlxuICAgIGxldCBlbmZvcmNlbWVudCA9ICdEZWZhdWx0J1xuXG4gICAgY29uc3QgYXR0cmlidXRlVmFsdWVMb3dlcmNhc2UgPSBhdHRyaWJ1dGVWYWx1ZS50b0xvd2VyQ2FzZSgpXG4gICAgLy8gMi4gSWYgY29va2llLWF2J3MgYXR0cmlidXRlLXZhbHVlIGlzIGEgY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBmb3JcbiAgICAvLyAgICBcIk5vbmVcIiwgc2V0IGVuZm9yY2VtZW50IHRvIFwiTm9uZVwiLlxuICAgIGlmIChhdHRyaWJ1dGVWYWx1ZUxvd2VyY2FzZS5pbmNsdWRlcygnbm9uZScpKSB7XG4gICAgICBlbmZvcmNlbWVudCA9ICdOb25lJ1xuICAgIH1cblxuICAgIC8vIDMuIElmIGNvb2tpZS1hdidzIGF0dHJpYnV0ZS12YWx1ZSBpcyBhIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yXG4gICAgLy8gICAgXCJTdHJpY3RcIiwgc2V0IGVuZm9yY2VtZW50IHRvIFwiU3RyaWN0XCIuXG4gICAgaWYgKGF0dHJpYnV0ZVZhbHVlTG93ZXJjYXNlLmluY2x1ZGVzKCdzdHJpY3QnKSkge1xuICAgICAgZW5mb3JjZW1lbnQgPSAnU3RyaWN0J1xuICAgIH1cblxuICAgIC8vIDQuIElmIGNvb2tpZS1hdidzIGF0dHJpYnV0ZS12YWx1ZSBpcyBhIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yXG4gICAgLy8gICAgXCJMYXhcIiwgc2V0IGVuZm9yY2VtZW50IHRvIFwiTGF4XCIuXG4gICAgaWYgKGF0dHJpYnV0ZVZhbHVlTG93ZXJjYXNlLmluY2x1ZGVzKCdsYXgnKSkge1xuICAgICAgZW5mb3JjZW1lbnQgPSAnTGF4J1xuICAgIH1cblxuICAgIC8vIDUuIEFwcGVuZCBhbiBhdHRyaWJ1dGUgdG8gdGhlIGNvb2tpZS1hdHRyaWJ1dGUtbGlzdCB3aXRoIGFuXG4gICAgLy8gICAgYXR0cmlidXRlLW5hbWUgb2YgXCJTYW1lU2l0ZVwiIGFuZCBhbiBhdHRyaWJ1dGUtdmFsdWUgb2ZcbiAgICAvLyAgICBlbmZvcmNlbWVudC5cbiAgICBjb29raWVBdHRyaWJ1dGVMaXN0LnNhbWVTaXRlID0gZW5mb3JjZW1lbnRcbiAgfSBlbHNlIHtcbiAgICBjb29raWVBdHRyaWJ1dGVMaXN0LnVucGFyc2VkID8/PSBbXVxuXG4gICAgY29va2llQXR0cmlidXRlTGlzdC51bnBhcnNlZC5wdXNoKGAke2F0dHJpYnV0ZU5hbWV9PSR7YXR0cmlidXRlVmFsdWV9YClcbiAgfVxuXG4gIC8vIDguIFJldHVybiB0byBTdGVwIDEgb2YgdGhpcyBhbGdvcml0aG0uXG4gIHJldHVybiBwYXJzZVVucGFyc2VkQXR0cmlidXRlcyh1bnBhcnNlZEF0dHJpYnV0ZXMsIGNvb2tpZUF0dHJpYnV0ZUxpc3QpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBwYXJzZVNldENvb2tpZSxcbiAgcGFyc2VVbnBhcnNlZEF0dHJpYnV0ZXNcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgcGFyc2VTZXRDb29raWUgfSA9IHJlcXVpcmUoJy4vcGFyc2UnKVxuY29uc3QgeyBzdHJpbmdpZnksIGdldEhlYWRlcnNMaXN0IH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3dlYmlkbCcpXG5jb25zdCB7IEhlYWRlcnMgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2hlYWRlcnMnKVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IENvb2tpZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IG5hbWVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2YWx1ZVxuICogQHByb3BlcnR5IHtEYXRlfG51bWJlcnx1bmRlZmluZWR9IGV4cGlyZXNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfHVuZGVmaW5lZH0gbWF4QWdlXG4gKiBAcHJvcGVydHkge3N0cmluZ3x1bmRlZmluZWR9IGRvbWFpblxuICogQHByb3BlcnR5IHtzdHJpbmd8dW5kZWZpbmVkfSBwYXRoXG4gKiBAcHJvcGVydHkge2Jvb2xlYW58dW5kZWZpbmVkfSBzZWN1cmVcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbnx1bmRlZmluZWR9IGh0dHBPbmx5XG4gKiBAcHJvcGVydHkgeydTdHJpY3QnfCdMYXgnfCdOb25lJ30gc2FtZVNpdGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IHVucGFyc2VkXG4gKi9cblxuLyoqXG4gKiBAcGFyYW0ge0hlYWRlcnN9IGhlYWRlcnNcbiAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fVxuICovXG5mdW5jdGlvbiBnZXRDb29raWVzIChoZWFkZXJzKSB7XG4gIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdnZXRDb29raWVzJyB9KVxuXG4gIHdlYmlkbC5icmFuZENoZWNrKGhlYWRlcnMsIEhlYWRlcnMsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gIGNvbnN0IGNvb2tpZSA9IGhlYWRlcnMuZ2V0KCdjb29raWUnKVxuICBjb25zdCBvdXQgPSB7fVxuXG4gIGlmICghY29va2llKSB7XG4gICAgcmV0dXJuIG91dFxuICB9XG5cbiAgZm9yIChjb25zdCBwaWVjZSBvZiBjb29raWUuc3BsaXQoJzsnKSkge1xuICAgIGNvbnN0IFtuYW1lLCAuLi52YWx1ZV0gPSBwaWVjZS5zcGxpdCgnPScpXG5cbiAgICBvdXRbbmFtZS50cmltKCldID0gdmFsdWUuam9pbignPScpXG4gIH1cblxuICByZXR1cm4gb3V0XG59XG5cbi8qKlxuICogQHBhcmFtIHtIZWFkZXJzfSBoZWFkZXJzXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHt7IHBhdGg/OiBzdHJpbmcsIGRvbWFpbj86IHN0cmluZyB9fHVuZGVmaW5lZH0gYXR0cmlidXRlc1xuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIGRlbGV0ZUNvb2tpZSAoaGVhZGVycywgbmFtZSwgYXR0cmlidXRlcykge1xuICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnZGVsZXRlQ29va2llJyB9KVxuXG4gIHdlYmlkbC5icmFuZENoZWNrKGhlYWRlcnMsIEhlYWRlcnMsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcobmFtZSlcbiAgYXR0cmlidXRlcyA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRlbGV0ZUNvb2tpZUF0dHJpYnV0ZXMoYXR0cmlidXRlcylcblxuICAvLyBNYXRjaGVzIGJlaGF2aW9yIG9mXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9kZW5vbGFuZC9kZW5vX3N0ZC9ibG9iLzYzODI3YjE2MzMwYjgyNDg5YTA0NjE0MDI3YzMzYjc5MDRlMDhiZTUvaHR0cC9jb29raWUudHMjTDI3OFxuICBzZXRDb29raWUoaGVhZGVycywge1xuICAgIG5hbWUsXG4gICAgdmFsdWU6ICcnLFxuICAgIGV4cGlyZXM6IG5ldyBEYXRlKDApLFxuICAgIC4uLmF0dHJpYnV0ZXNcbiAgfSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0hlYWRlcnN9IGhlYWRlcnNcbiAqIEByZXR1cm5zIHtDb29raWVbXX1cbiAqL1xuZnVuY3Rpb24gZ2V0U2V0Q29va2llcyAoaGVhZGVycykge1xuICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnZ2V0U2V0Q29va2llcycgfSlcblxuICB3ZWJpZGwuYnJhbmRDaGVjayhoZWFkZXJzLCBIZWFkZXJzLCB7IHN0cmljdDogZmFsc2UgfSlcblxuICBjb25zdCBjb29raWVzID0gZ2V0SGVhZGVyc0xpc3QoaGVhZGVycykuY29va2llc1xuXG4gIGlmICghY29va2llcykge1xuICAgIHJldHVybiBbXVxuICB9XG5cbiAgLy8gSW4gb2xkZXIgdmVyc2lvbnMgb2YgdW5kaWNpLCBjb29raWVzIGlzIGEgbGlzdCBvZiBuYW1lOnZhbHVlLlxuICByZXR1cm4gY29va2llcy5tYXAoKHBhaXIpID0+IHBhcnNlU2V0Q29va2llKEFycmF5LmlzQXJyYXkocGFpcikgPyBwYWlyWzFdIDogcGFpcikpXG59XG5cbi8qKlxuICogQHBhcmFtIHtIZWFkZXJzfSBoZWFkZXJzXG4gKiBAcGFyYW0ge0Nvb2tpZX0gY29va2llXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gc2V0Q29va2llIChoZWFkZXJzLCBjb29raWUpIHtcbiAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAyLCB7IGhlYWRlcjogJ3NldENvb2tpZScgfSlcblxuICB3ZWJpZGwuYnJhbmRDaGVjayhoZWFkZXJzLCBIZWFkZXJzLCB7IHN0cmljdDogZmFsc2UgfSlcblxuICBjb29raWUgPSB3ZWJpZGwuY29udmVydGVycy5Db29raWUoY29va2llKVxuXG4gIGNvbnN0IHN0ciA9IHN0cmluZ2lmeShjb29raWUpXG5cbiAgaWYgKHN0cikge1xuICAgIGhlYWRlcnMuYXBwZW5kKCdTZXQtQ29va2llJywgc3RyaW5naWZ5KGNvb2tpZSkpXG4gIH1cbn1cblxud2ViaWRsLmNvbnZlcnRlcnMuRGVsZXRlQ29va2llQXR0cmlidXRlcyA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyksXG4gICAga2V5OiAncGF0aCcsXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcih3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcpLFxuICAgIGtleTogJ2RvbWFpbicsXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH1cbl0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzLkNvb2tpZSA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIGtleTogJ25hbWUnXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICBrZXk6ICd2YWx1ZSdcbiAgfSxcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKCh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBsb25nIGxvbmcnXSh2YWx1ZSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBEYXRlKHZhbHVlKVxuICAgIH0pLFxuICAgIGtleTogJ2V4cGlyZXMnLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbFxuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnNbJ2xvbmcgbG9uZyddKSxcbiAgICBrZXk6ICdtYXhBZ2UnLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbFxuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKSxcbiAgICBrZXk6ICdkb21haW4nLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbFxuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKSxcbiAgICBrZXk6ICdwYXRoJyxcbiAgICBkZWZhdWx0VmFsdWU6IG51bGxcbiAgfSxcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4pLFxuICAgIGtleTogJ3NlY3VyZScsXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcih3ZWJpZGwuY29udmVydGVycy5ib29sZWFuKSxcbiAgICBrZXk6ICdodHRwT25seScsXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyxcbiAgICBrZXk6ICdzYW1lU2l0ZScsXG4gICAgYWxsb3dlZFZhbHVlczogWydTdHJpY3QnLCAnTGF4JywgJ05vbmUnXVxuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKSxcbiAgICBrZXk6ICd1bnBhcnNlZCcsXG4gICAgZGVmYXVsdFZhbHVlOiBbXVxuICB9XG5dKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0Q29va2llcyxcbiAgZGVsZXRlQ29va2llLFxuICBnZXRTZXRDb29raWVzLFxuICBzZXRDb29raWVcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbi8vIFRoaXMgaXMgYSBHbG9iYWxseSBVbmlxdWUgSWRlbnRpZmllciB1bmlxdWUgdXNlZFxuLy8gdG8gdmFsaWRhdGUgdGhhdCB0aGUgZW5kcG9pbnQgYWNjZXB0cyB3ZWJzb2NrZXRcbi8vIGNvbm5lY3Rpb25zLlxuLy8gU2VlIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM2NDU1Lmh0bWwjc2VjdGlvbi0xLjNcbmNvbnN0IHVpZCA9ICcyNThFQUZBNS1FOTE0LTQ3REEtOTVDQS1DNUFCMERDODVCMTEnXG5cbi8qKiBAdHlwZSB7UHJvcGVydHlEZXNjcmlwdG9yfSAqL1xuY29uc3Qgc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyA9IHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgd3JpdGFibGU6IGZhbHNlLFxuICBjb25maWd1cmFibGU6IGZhbHNlXG59XG5cbmNvbnN0IHN0YXRlcyA9IHtcbiAgQ09OTkVDVElORzogMCxcbiAgT1BFTjogMSxcbiAgQ0xPU0lORzogMixcbiAgQ0xPU0VEOiAzXG59XG5cbmNvbnN0IG9wY29kZXMgPSB7XG4gIENPTlRJTlVBVElPTjogMHgwLFxuICBURVhUOiAweDEsXG4gIEJJTkFSWTogMHgyLFxuICBDTE9TRTogMHg4LFxuICBQSU5HOiAweDksXG4gIFBPTkc6IDB4QVxufVxuXG5jb25zdCBtYXhVbnNpZ25lZDE2Qml0ID0gMiAqKiAxNiAtIDEgLy8gNjU1MzVcblxuY29uc3QgcGFyc2VyU3RhdGVzID0ge1xuICBJTkZPOiAwLFxuICBQQVlMT0FETEVOR1RIXzE2OiAyLFxuICBQQVlMT0FETEVOR1RIXzY0OiAzLFxuICBSRUFEX0RBVEE6IDRcbn1cblxuY29uc3QgZW1wdHlCdWZmZXIgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMClcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHVpZCxcbiAgc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgc3RhdGVzLFxuICBvcGNvZGVzLFxuICBtYXhVbnNpZ25lZDE2Qml0LFxuICBwYXJzZXJTdGF0ZXMsXG4gIGVtcHR5QnVmZmVyXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAga1dlYlNvY2tldFVSTDogU3ltYm9sKCd1cmwnKSxcbiAga1JlYWR5U3RhdGU6IFN5bWJvbCgncmVhZHkgc3RhdGUnKSxcbiAga0NvbnRyb2xsZXI6IFN5bWJvbCgnY29udHJvbGxlcicpLFxuICBrUmVzcG9uc2U6IFN5bWJvbCgncmVzcG9uc2UnKSxcbiAga0JpbmFyeVR5cGU6IFN5bWJvbCgnYmluYXJ5IHR5cGUnKSxcbiAga1NlbnRDbG9zZTogU3ltYm9sKCdzZW50IGNsb3NlJyksXG4gIGtSZWNlaXZlZENsb3NlOiBTeW1ib2woJ3JlY2VpdmVkIGNsb3NlJyksXG4gIGtCeXRlUGFyc2VyOiBTeW1ib2woJ2J5dGUgcGFyc2VyJylcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuLi9mZXRjaC93ZWJpZGwnKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5IH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBNZXNzYWdlUG9ydCB9ID0gcmVxdWlyZSgnd29ya2VyX3RocmVhZHMnKVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvY29tbXMuaHRtbCNtZXNzYWdlZXZlbnRcbiAqL1xuY2xhc3MgTWVzc2FnZUV2ZW50IGV4dGVuZHMgRXZlbnQge1xuICAjZXZlbnRJbml0XG5cbiAgY29uc3RydWN0b3IgKHR5cGUsIGV2ZW50SW5pdERpY3QgPSB7fSkge1xuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdNZXNzYWdlRXZlbnQgY29uc3RydWN0b3InIH0pXG5cbiAgICB0eXBlID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKHR5cGUpXG4gICAgZXZlbnRJbml0RGljdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLk1lc3NhZ2VFdmVudEluaXQoZXZlbnRJbml0RGljdClcblxuICAgIHN1cGVyKHR5cGUsIGV2ZW50SW5pdERpY3QpXG5cbiAgICB0aGlzLiNldmVudEluaXQgPSBldmVudEluaXREaWN0XG4gIH1cblxuICBnZXQgZGF0YSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgTWVzc2FnZUV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5kYXRhXG4gIH1cblxuICBnZXQgb3JpZ2luICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBNZXNzYWdlRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0Lm9yaWdpblxuICB9XG5cbiAgZ2V0IGxhc3RFdmVudElkICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBNZXNzYWdlRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0Lmxhc3RFdmVudElkXG4gIH1cblxuICBnZXQgc291cmNlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBNZXNzYWdlRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LnNvdXJjZVxuICB9XG5cbiAgZ2V0IHBvcnRzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBNZXNzYWdlRXZlbnQpXG5cbiAgICBpZiAoIU9iamVjdC5pc0Zyb3plbih0aGlzLiNldmVudEluaXQucG9ydHMpKSB7XG4gICAgICBPYmplY3QuZnJlZXplKHRoaXMuI2V2ZW50SW5pdC5wb3J0cylcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LnBvcnRzXG4gIH1cblxuICBpbml0TWVzc2FnZUV2ZW50IChcbiAgICB0eXBlLFxuICAgIGJ1YmJsZXMgPSBmYWxzZSxcbiAgICBjYW5jZWxhYmxlID0gZmFsc2UsXG4gICAgZGF0YSA9IG51bGwsXG4gICAgb3JpZ2luID0gJycsXG4gICAgbGFzdEV2ZW50SWQgPSAnJyxcbiAgICBzb3VyY2UgPSBudWxsLFxuICAgIHBvcnRzID0gW11cbiAgKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgTWVzc2FnZUV2ZW50KVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ01lc3NhZ2VFdmVudC5pbml0TWVzc2FnZUV2ZW50JyB9KVxuXG4gICAgcmV0dXJuIG5ldyBNZXNzYWdlRXZlbnQodHlwZSwge1xuICAgICAgYnViYmxlcywgY2FuY2VsYWJsZSwgZGF0YSwgb3JpZ2luLCBsYXN0RXZlbnRJZCwgc291cmNlLCBwb3J0c1xuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI3RoZS1jbG9zZWV2ZW50LWludGVyZmFjZVxuICovXG5jbGFzcyBDbG9zZUV2ZW50IGV4dGVuZHMgRXZlbnQge1xuICAjZXZlbnRJbml0XG5cbiAgY29uc3RydWN0b3IgKHR5cGUsIGV2ZW50SW5pdERpY3QgPSB7fSkge1xuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdDbG9zZUV2ZW50IGNvbnN0cnVjdG9yJyB9KVxuXG4gICAgdHlwZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyh0eXBlKVxuICAgIGV2ZW50SW5pdERpY3QgPSB3ZWJpZGwuY29udmVydGVycy5DbG9zZUV2ZW50SW5pdChldmVudEluaXREaWN0KVxuXG4gICAgc3VwZXIodHlwZSwgZXZlbnRJbml0RGljdClcblxuICAgIHRoaXMuI2V2ZW50SW5pdCA9IGV2ZW50SW5pdERpY3RcbiAgfVxuXG4gIGdldCB3YXNDbGVhbiAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2xvc2VFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQud2FzQ2xlYW5cbiAgfVxuXG4gIGdldCBjb2RlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDbG9zZUV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5jb2RlXG4gIH1cblxuICBnZXQgcmVhc29uICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDbG9zZUV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5yZWFzb25cbiAgfVxufVxuXG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS93ZWJhcHBhcGlzLmh0bWwjdGhlLWVycm9yZXZlbnQtaW50ZXJmYWNlXG5jbGFzcyBFcnJvckV2ZW50IGV4dGVuZHMgRXZlbnQge1xuICAjZXZlbnRJbml0XG5cbiAgY29uc3RydWN0b3IgKHR5cGUsIGV2ZW50SW5pdERpY3QpIHtcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRXJyb3JFdmVudCBjb25zdHJ1Y3RvcicgfSlcblxuICAgIHN1cGVyKHR5cGUsIGV2ZW50SW5pdERpY3QpXG5cbiAgICB0eXBlID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKHR5cGUpXG4gICAgZXZlbnRJbml0RGljdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLkVycm9yRXZlbnRJbml0KGV2ZW50SW5pdERpY3QgPz8ge30pXG5cbiAgICB0aGlzLiNldmVudEluaXQgPSBldmVudEluaXREaWN0XG4gIH1cblxuICBnZXQgbWVzc2FnZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRXJyb3JFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQubWVzc2FnZVxuICB9XG5cbiAgZ2V0IGZpbGVuYW1lICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBFcnJvckV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5maWxlbmFtZVxuICB9XG5cbiAgZ2V0IGxpbmVubyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRXJyb3JFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQubGluZW5vXG4gIH1cblxuICBnZXQgY29sbm8gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEVycm9yRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LmNvbG5vXG4gIH1cblxuICBnZXQgZXJyb3IgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEVycm9yRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LmVycm9yXG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTWVzc2FnZUV2ZW50LnByb3RvdHlwZSwge1xuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnTWVzc2FnZUV2ZW50JyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSxcbiAgZGF0YToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb3JpZ2luOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBsYXN0RXZlbnRJZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgc291cmNlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBwb3J0czoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgaW5pdE1lc3NhZ2VFdmVudDoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2xvc2VFdmVudC5wcm90b3R5cGUsIHtcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0Nsb3NlRXZlbnQnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9LFxuICByZWFzb246IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNvZGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHdhc0NsZWFuOiBrRW51bWVyYWJsZVByb3BlcnR5XG59KVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhFcnJvckV2ZW50LnByb3RvdHlwZSwge1xuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnRXJyb3JFdmVudCcsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0sXG4gIG1lc3NhZ2U6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGZpbGVuYW1lOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBsaW5lbm86IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNvbG5vOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBlcnJvcjoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxud2ViaWRsLmNvbnZlcnRlcnMuTWVzc2FnZVBvcnQgPSB3ZWJpZGwuaW50ZXJmYWNlQ29udmVydGVyKE1lc3NhZ2VQb3J0KVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8TWVzc2FnZVBvcnQ+J10gPSB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLk1lc3NhZ2VQb3J0XG4pXG5cbmNvbnN0IGV2ZW50SW5pdCA9IFtcbiAge1xuICAgIGtleTogJ2J1YmJsZXMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjYW5jZWxhYmxlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4sXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZVxuICB9LFxuICB7XG4gICAga2V5OiAnY29tcG9zZWQnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH1cbl1cblxud2ViaWRsLmNvbnZlcnRlcnMuTWVzc2FnZUV2ZW50SW5pdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAgLi4uZXZlbnRJbml0LFxuICB7XG4gICAga2V5OiAnZGF0YScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5hbnksXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdvcmlnaW4nLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZTogJydcbiAgfSxcbiAge1xuICAgIGtleTogJ2xhc3RFdmVudElkJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6ICcnXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdzb3VyY2UnLFxuICAgIC8vIE5vZGUgZG9lc24ndCBpbXBsZW1lbnQgV2luZG93UHJveHkgb3IgU2VydmljZVdvcmtlciwgc28gdGhlIG9ubHlcbiAgICAvLyB2YWxpZCB2YWx1ZSBmb3Igc291cmNlIGlzIGEgTWVzc2FnZVBvcnQuXG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuTWVzc2FnZVBvcnQpLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbFxuICB9LFxuICB7XG4gICAga2V5OiAncG9ydHMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPE1lc3NhZ2VQb3J0PiddLFxuICAgIGdldCBkZWZhdWx0VmFsdWUgKCkge1xuICAgICAgcmV0dXJuIFtdXG4gICAgfVxuICB9XG5dKVxuXG53ZWJpZGwuY29udmVydGVycy5DbG9zZUV2ZW50SW5pdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAgLi4uZXZlbnRJbml0LFxuICB7XG4gICAga2V5OiAnd2FzQ2xlYW4nLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjb2RlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBzaG9ydCddLFxuICAgIGRlZmF1bHRWYWx1ZTogMFxuICB9LFxuICB7XG4gICAga2V5OiAncmVhc29uJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6ICcnXG4gIH1cbl0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzLkVycm9yRXZlbnRJbml0ID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICAuLi5ldmVudEluaXQsXG4gIHtcbiAgICBrZXk6ICdtZXNzYWdlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6ICcnXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdmaWxlbmFtZScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcsXG4gICAgZGVmYXVsdFZhbHVlOiAnJ1xuICB9LFxuICB7XG4gICAga2V5OiAnbGluZW5vJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBsb25nJ10sXG4gICAgZGVmYXVsdFZhbHVlOiAwXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjb2xubycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgbG9uZyddLFxuICAgIGRlZmF1bHRWYWx1ZTogMFxuICB9LFxuICB7XG4gICAga2V5OiAnZXJyb3InLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYW55XG4gIH1cbl0pXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBNZXNzYWdlRXZlbnQsXG4gIENsb3NlRXZlbnQsXG4gIEVycm9yRXZlbnRcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsga1JlYWR5U3RhdGUsIGtDb250cm9sbGVyLCBrUmVzcG9uc2UsIGtCaW5hcnlUeXBlLCBrV2ViU29ja2V0VVJMIH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBzdGF0ZXMsIG9wY29kZXMgfSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IHsgTWVzc2FnZUV2ZW50LCBFcnJvckV2ZW50IH0gPSByZXF1aXJlKCcuL2V2ZW50cycpXG5cbi8qIGdsb2JhbHMgQmxvYiAqL1xuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL3dlYnNvY2tldCcpLldlYlNvY2tldH0gd3NcbiAqL1xuZnVuY3Rpb24gaXNFc3RhYmxpc2hlZCAod3MpIHtcbiAgLy8gSWYgdGhlIHNlcnZlcidzIHJlc3BvbnNlIGlzIHZhbGlkYXRlZCBhcyBwcm92aWRlZCBmb3IgYWJvdmUsIGl0IGlzXG4gIC8vIHNhaWQgdGhhdCBfVGhlIFdlYlNvY2tldCBDb25uZWN0aW9uIGlzIEVzdGFibGlzaGVkXyBhbmQgdGhhdCB0aGVcbiAgLy8gV2ViU29ja2V0IENvbm5lY3Rpb24gaXMgaW4gdGhlIE9QRU4gc3RhdGUuXG4gIHJldHVybiB3c1trUmVhZHlTdGF0ZV0gPT09IHN0YXRlcy5PUEVOXG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vd2Vic29ja2V0JykuV2ViU29ja2V0fSB3c1xuICovXG5mdW5jdGlvbiBpc0Nsb3NpbmcgKHdzKSB7XG4gIC8vIFVwb24gZWl0aGVyIHNlbmRpbmcgb3IgcmVjZWl2aW5nIGEgQ2xvc2UgY29udHJvbCBmcmFtZSwgaXQgaXMgc2FpZFxuICAvLyB0aGF0IF9UaGUgV2ViU29ja2V0IENsb3NpbmcgSGFuZHNoYWtlIGlzIFN0YXJ0ZWRfIGFuZCB0aGF0IHRoZVxuICAvLyBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBpbiB0aGUgQ0xPU0lORyBzdGF0ZS5cbiAgcmV0dXJuIHdzW2tSZWFkeVN0YXRlXSA9PT0gc3RhdGVzLkNMT1NJTkdcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi93ZWJzb2NrZXQnKS5XZWJTb2NrZXR9IHdzXG4gKi9cbmZ1bmN0aW9uIGlzQ2xvc2VkICh3cykge1xuICByZXR1cm4gd3Nba1JlYWR5U3RhdGVdID09PSBzdGF0ZXMuQ0xPU0VEXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtZXZlbnQtZmlyZVxuICogQHBhcmFtIHtzdHJpbmd9IGVcbiAqIEBwYXJhbSB7RXZlbnRUYXJnZXR9IHRhcmdldFxuICogQHBhcmFtIHtFdmVudEluaXQgfCB1bmRlZmluZWR9IGV2ZW50SW5pdERpY3RcbiAqL1xuZnVuY3Rpb24gZmlyZUV2ZW50IChlLCB0YXJnZXQsIGV2ZW50Q29uc3RydWN0b3IgPSBFdmVudCwgZXZlbnRJbml0RGljdCkge1xuICAvLyAxLiBJZiBldmVudENvbnN0cnVjdG9yIGlzIG5vdCBnaXZlbiwgdGhlbiBsZXQgZXZlbnRDb25zdHJ1Y3RvciBiZSBFdmVudC5cblxuICAvLyAyLiBMZXQgZXZlbnQgYmUgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhbiBldmVudCBnaXZlbiBldmVudENvbnN0cnVjdG9yLFxuICAvLyAgICBpbiB0aGUgcmVsZXZhbnQgcmVhbG0gb2YgdGFyZ2V0LlxuICAvLyAzLiBJbml0aWFsaXplIGV2ZW504oCZcyB0eXBlIGF0dHJpYnV0ZSB0byBlLlxuICBjb25zdCBldmVudCA9IG5ldyBldmVudENvbnN0cnVjdG9yKGUsIGV2ZW50SW5pdERpY3QpIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbmV3LWNhcFxuXG4gIC8vIDQuIEluaXRpYWxpemUgYW55IG90aGVyIElETCBhdHRyaWJ1dGVzIG9mIGV2ZW50IGFzIGRlc2NyaWJlZCBpbiB0aGVcbiAgLy8gICAgaW52b2NhdGlvbiBvZiB0aGlzIGFsZ29yaXRobS5cblxuICAvLyA1LiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBkaXNwYXRjaGluZyBldmVudCBhdCB0YXJnZXQsIHdpdGggbGVnYWN5IHRhcmdldFxuICAvLyAgICBvdmVycmlkZSBmbGFnIHNldCBpZiBzZXQuXG4gIHRhcmdldC5kaXNwYXRjaEV2ZW50KGV2ZW50KVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZmVlZGJhY2stZnJvbS10aGUtcHJvdG9jb2xcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL3dlYnNvY2tldCcpLldlYlNvY2tldH0gd3NcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlIE9wY29kZVxuICogQHBhcmFtIHtCdWZmZXJ9IGRhdGEgYXBwbGljYXRpb24gZGF0YVxuICovXG5mdW5jdGlvbiB3ZWJzb2NrZXRNZXNzYWdlUmVjZWl2ZWQgKHdzLCB0eXBlLCBkYXRhKSB7XG4gIC8vIDEuIElmIHJlYWR5IHN0YXRlIGlzIG5vdCBPUEVOICgxKSwgdGhlbiByZXR1cm4uXG4gIGlmICh3c1trUmVhZHlTdGF0ZV0gIT09IHN0YXRlcy5PUEVOKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyAyLiBMZXQgZGF0YUZvckV2ZW50IGJlIGRldGVybWluZWQgYnkgc3dpdGNoaW5nIG9uIHR5cGUgYW5kIGJpbmFyeSB0eXBlOlxuICBsZXQgZGF0YUZvckV2ZW50XG5cbiAgaWYgKHR5cGUgPT09IG9wY29kZXMuVEVYVCkge1xuICAgIC8vIC0+IHR5cGUgaW5kaWNhdGVzIHRoYXQgdGhlIGRhdGEgaXMgVGV4dFxuICAgIC8vICAgICAgYSBuZXcgRE9NU3RyaW5nIGNvbnRhaW5pbmcgZGF0YVxuICAgIHRyeSB7XG4gICAgICBkYXRhRm9yRXZlbnQgPSBuZXcgVGV4dERlY29kZXIoJ3V0Zi04JywgeyBmYXRhbDogdHJ1ZSB9KS5kZWNvZGUoZGF0YSlcbiAgICB9IGNhdGNoIHtcbiAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnUmVjZWl2ZWQgaW52YWxpZCBVVEYtOCBpbiB0ZXh0IGZyYW1lLicpXG4gICAgICByZXR1cm5cbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gb3Bjb2Rlcy5CSU5BUlkpIHtcbiAgICBpZiAod3Nba0JpbmFyeVR5cGVdID09PSAnYmxvYicpIHtcbiAgICAgIC8vIC0+IHR5cGUgaW5kaWNhdGVzIHRoYXQgdGhlIGRhdGEgaXMgQmluYXJ5IGFuZCBiaW5hcnkgdHlwZSBpcyBcImJsb2JcIlxuICAgICAgLy8gICAgICBhIG5ldyBCbG9iIG9iamVjdCwgY3JlYXRlZCBpbiB0aGUgcmVsZXZhbnQgUmVhbG0gb2YgdGhlIFdlYlNvY2tldFxuICAgICAgLy8gICAgICBvYmplY3QsIHRoYXQgcmVwcmVzZW50cyBkYXRhIGFzIGl0cyByYXcgZGF0YVxuICAgICAgZGF0YUZvckV2ZW50ID0gbmV3IEJsb2IoW2RhdGFdKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyAtPiB0eXBlIGluZGljYXRlcyB0aGF0IHRoZSBkYXRhIGlzIEJpbmFyeSBhbmQgYmluYXJ5IHR5cGUgaXMgXCJhcnJheWJ1ZmZlclwiXG4gICAgICAvLyAgICAgIGEgbmV3IEFycmF5QnVmZmVyIG9iamVjdCwgY3JlYXRlZCBpbiB0aGUgcmVsZXZhbnQgUmVhbG0gb2YgdGhlXG4gICAgICAvLyAgICAgIFdlYlNvY2tldCBvYmplY3QsIHdob3NlIGNvbnRlbnRzIGFyZSBkYXRhXG4gICAgICBkYXRhRm9yRXZlbnQgPSBuZXcgVWludDhBcnJheShkYXRhKS5idWZmZXJcbiAgICB9XG4gIH1cblxuICAvLyAzLiBGaXJlIGFuIGV2ZW50IG5hbWVkIG1lc3NhZ2UgYXQgdGhlIFdlYlNvY2tldCBvYmplY3QsIHVzaW5nIE1lc3NhZ2VFdmVudCxcbiAgLy8gICAgd2l0aCB0aGUgb3JpZ2luIGF0dHJpYnV0ZSBpbml0aWFsaXplZCB0byB0aGUgc2VyaWFsaXphdGlvbiBvZiB0aGUgV2ViU29ja2V0XG4gIC8vICAgIG9iamVjdOKAmXMgdXJsJ3Mgb3JpZ2luLCBhbmQgdGhlIGRhdGEgYXR0cmlidXRlIGluaXRpYWxpemVkIHRvIGRhdGFGb3JFdmVudC5cbiAgZmlyZUV2ZW50KCdtZXNzYWdlJywgd3MsIE1lc3NhZ2VFdmVudCwge1xuICAgIG9yaWdpbjogd3Nba1dlYlNvY2tldFVSTF0ub3JpZ2luLFxuICAgIGRhdGE6IGRhdGFGb3JFdmVudFxuICB9KVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1XG4gKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMjYxNlxuICogQHNlZSBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0zOTg0MDdcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm90b2NvbFxuICovXG5mdW5jdGlvbiBpc1ZhbGlkU3VicHJvdG9jb2wgKHByb3RvY29sKSB7XG4gIC8vIElmIHByZXNlbnQsIHRoaXMgdmFsdWUgaW5kaWNhdGVzIG9uZVxuICAvLyBvciBtb3JlIGNvbW1hLXNlcGFyYXRlZCBzdWJwcm90b2NvbCB0aGUgY2xpZW50IHdpc2hlcyB0byBzcGVhayxcbiAgLy8gb3JkZXJlZCBieSBwcmVmZXJlbmNlLiAgVGhlIGVsZW1lbnRzIHRoYXQgY29tcHJpc2UgdGhpcyB2YWx1ZVxuICAvLyBNVVNUIGJlIG5vbi1lbXB0eSBzdHJpbmdzIHdpdGggY2hhcmFjdGVycyBpbiB0aGUgcmFuZ2UgVSswMDIxIHRvXG4gIC8vIFUrMDA3RSBub3QgaW5jbHVkaW5nIHNlcGFyYXRvciBjaGFyYWN0ZXJzIGFzIGRlZmluZWQgaW5cbiAgLy8gW1JGQzI2MTZdIGFuZCBNVVNUIGFsbCBiZSB1bmlxdWUgc3RyaW5ncy5cbiAgaWYgKHByb3RvY29sLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgZm9yIChjb25zdCBjaGFyIG9mIHByb3RvY29sKSB7XG4gICAgY29uc3QgY29kZSA9IGNoYXIuY2hhckNvZGVBdCgwKVxuXG4gICAgaWYgKFxuICAgICAgY29kZSA8IDB4MjEgfHxcbiAgICAgIGNvZGUgPiAweDdFIHx8XG4gICAgICBjaGFyID09PSAnKCcgfHxcbiAgICAgIGNoYXIgPT09ICcpJyB8fFxuICAgICAgY2hhciA9PT0gJzwnIHx8XG4gICAgICBjaGFyID09PSAnPicgfHxcbiAgICAgIGNoYXIgPT09ICdAJyB8fFxuICAgICAgY2hhciA9PT0gJywnIHx8XG4gICAgICBjaGFyID09PSAnOycgfHxcbiAgICAgIGNoYXIgPT09ICc6JyB8fFxuICAgICAgY2hhciA9PT0gJ1xcXFwnIHx8XG4gICAgICBjaGFyID09PSAnXCInIHx8XG4gICAgICBjaGFyID09PSAnLycgfHxcbiAgICAgIGNoYXIgPT09ICdbJyB8fFxuICAgICAgY2hhciA9PT0gJ10nIHx8XG4gICAgICBjaGFyID09PSAnPycgfHxcbiAgICAgIGNoYXIgPT09ICc9JyB8fFxuICAgICAgY2hhciA9PT0gJ3snIHx8XG4gICAgICBjaGFyID09PSAnfScgfHxcbiAgICAgIGNvZGUgPT09IDMyIHx8IC8vIFNQXG4gICAgICBjb2RlID09PSA5IC8vIEhUXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tNy00XG4gKiBAcGFyYW0ge251bWJlcn0gY29kZVxuICovXG5mdW5jdGlvbiBpc1ZhbGlkU3RhdHVzQ29kZSAoY29kZSkge1xuICBpZiAoY29kZSA+PSAxMDAwICYmIGNvZGUgPCAxMDE1KSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGNvZGUgIT09IDEwMDQgJiYgLy8gcmVzZXJ2ZWRcbiAgICAgIGNvZGUgIT09IDEwMDUgJiYgLy8gXCJNVVNUIE5PVCBiZSBzZXQgYXMgYSBzdGF0dXMgY29kZVwiXG4gICAgICBjb2RlICE9PSAxMDA2IC8vIFwiTVVTVCBOT1QgYmUgc2V0IGFzIGEgc3RhdHVzIGNvZGVcIlxuICAgIClcbiAgfVxuXG4gIHJldHVybiBjb2RlID49IDMwMDAgJiYgY29kZSA8PSA0OTk5XG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vd2Vic29ja2V0JykuV2ViU29ja2V0fSB3c1xuICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSByZWFzb25cbiAqL1xuZnVuY3Rpb24gZmFpbFdlYnNvY2tldENvbm5lY3Rpb24gKHdzLCByZWFzb24pIHtcbiAgY29uc3QgeyBba0NvbnRyb2xsZXJdOiBjb250cm9sbGVyLCBba1Jlc3BvbnNlXTogcmVzcG9uc2UgfSA9IHdzXG5cbiAgY29udHJvbGxlci5hYm9ydCgpXG5cbiAgaWYgKHJlc3BvbnNlPy5zb2NrZXQgJiYgIXJlc3BvbnNlLnNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICByZXNwb25zZS5zb2NrZXQuZGVzdHJveSgpXG4gIH1cblxuICBpZiAocmVhc29uKSB7XG4gICAgZmlyZUV2ZW50KCdlcnJvcicsIHdzLCBFcnJvckV2ZW50LCB7XG4gICAgICBlcnJvcjogbmV3IEVycm9yKHJlYXNvbilcbiAgICB9KVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc0VzdGFibGlzaGVkLFxuICBpc0Nsb3NpbmcsXG4gIGlzQ2xvc2VkLFxuICBmaXJlRXZlbnQsXG4gIGlzVmFsaWRTdWJwcm90b2NvbCxcbiAgaXNWYWxpZFN0YXR1c0NvZGUsXG4gIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uLFxuICB3ZWJzb2NrZXRNZXNzYWdlUmVjZWl2ZWRcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGRpYWdub3N0aWNzQ2hhbm5lbCA9IHJlcXVpcmUoJ2RpYWdub3N0aWNzX2NoYW5uZWwnKVxuY29uc3QgeyB1aWQsIHN0YXRlcyB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3Qge1xuICBrUmVhZHlTdGF0ZSxcbiAga1NlbnRDbG9zZSxcbiAga0J5dGVQYXJzZXIsXG4gIGtSZWNlaXZlZENsb3NlXG59ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgZmlyZUV2ZW50LCBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbiB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgQ2xvc2VFdmVudCB9ID0gcmVxdWlyZSgnLi9ldmVudHMnKVxuY29uc3QgeyBtYWtlUmVxdWVzdCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvcmVxdWVzdCcpXG5jb25zdCB7IGZldGNoaW5nIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9pbmRleCcpXG5jb25zdCB7IEhlYWRlcnMgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2hlYWRlcnMnKVxuY29uc3QgeyBnZXRHbG9iYWxEaXNwYXRjaGVyIH0gPSByZXF1aXJlKCcuLi9nbG9iYWwnKVxuY29uc3QgeyBrSGVhZGVyc0xpc3QgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5cbmNvbnN0IGNoYW5uZWxzID0ge31cbmNoYW5uZWxzLm9wZW4gPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOndlYnNvY2tldDpvcGVuJylcbmNoYW5uZWxzLmNsb3NlID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTp3ZWJzb2NrZXQ6Y2xvc2UnKVxuY2hhbm5lbHMuc29ja2V0RXJyb3IgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOndlYnNvY2tldDpzb2NrZXRfZXJyb3InKVxuXG4vKiogQHR5cGUge2ltcG9ydCgnY3J5cHRvJyl9ICovXG5sZXQgY3J5cHRvXG50cnkge1xuICBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKVxufSBjYXRjaCB7XG5cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtd2Vic29ja2V0LWVzdGFibGlzaFxuICogQHBhcmFtIHtVUkx9IHVybFxuICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IHByb3RvY29sc1xuICogQHBhcmFtIHtpbXBvcnQoJy4vd2Vic29ja2V0JykuV2ViU29ja2V0fSB3c1xuICogQHBhcmFtIHsocmVzcG9uc2U6IGFueSkgPT4gdm9pZH0gb25Fc3RhYmxpc2hcbiAqIEBwYXJhbSB7UGFydGlhbDxpbXBvcnQoJy4uLy4uL3R5cGVzL3dlYnNvY2tldCcpLldlYlNvY2tldEluaXQ+fSBvcHRpb25zXG4gKi9cbmZ1bmN0aW9uIGVzdGFibGlzaFdlYlNvY2tldENvbm5lY3Rpb24gKHVybCwgcHJvdG9jb2xzLCB3cywgb25Fc3RhYmxpc2gsIG9wdGlvbnMpIHtcbiAgLy8gMS4gTGV0IHJlcXVlc3RVUkwgYmUgYSBjb3B5IG9mIHVybCwgd2l0aCBpdHMgc2NoZW1lIHNldCB0byBcImh0dHBcIiwgaWYgdXJs4oCZc1xuICAvLyAgICBzY2hlbWUgaXMgXCJ3c1wiLCBhbmQgdG8gXCJodHRwc1wiIG90aGVyd2lzZS5cbiAgY29uc3QgcmVxdWVzdFVSTCA9IHVybFxuXG4gIHJlcXVlc3RVUkwucHJvdG9jb2wgPSB1cmwucHJvdG9jb2wgPT09ICd3czonID8gJ2h0dHA6JyA6ICdodHRwczonXG5cbiAgLy8gMi4gTGV0IHJlcXVlc3QgYmUgYSBuZXcgcmVxdWVzdCwgd2hvc2UgVVJMIGlzIHJlcXVlc3RVUkwsIGNsaWVudCBpcyBjbGllbnQsXG4gIC8vICAgIHNlcnZpY2Utd29ya2VycyBtb2RlIGlzIFwibm9uZVwiLCByZWZlcnJlciBpcyBcIm5vLXJlZmVycmVyXCIsIG1vZGUgaXNcbiAgLy8gICAgXCJ3ZWJzb2NrZXRcIiwgY3JlZGVudGlhbHMgbW9kZSBpcyBcImluY2x1ZGVcIiwgY2FjaGUgbW9kZSBpcyBcIm5vLXN0b3JlXCIgLFxuICAvLyAgICBhbmQgcmVkaXJlY3QgbW9kZSBpcyBcImVycm9yXCIuXG4gIGNvbnN0IHJlcXVlc3QgPSBtYWtlUmVxdWVzdCh7XG4gICAgdXJsTGlzdDogW3JlcXVlc3RVUkxdLFxuICAgIHNlcnZpY2VXb3JrZXJzOiAnbm9uZScsXG4gICAgcmVmZXJyZXI6ICduby1yZWZlcnJlcicsXG4gICAgbW9kZTogJ3dlYnNvY2tldCcsXG4gICAgY3JlZGVudGlhbHM6ICdpbmNsdWRlJyxcbiAgICBjYWNoZTogJ25vLXN0b3JlJyxcbiAgICByZWRpcmVjdDogJ2Vycm9yJ1xuICB9KVxuXG4gIC8vIE5vdGU6IHVuZGljaSBleHRlbnNpb24sIGFsbG93IHNldHRpbmcgY3VzdG9tIGhlYWRlcnMuXG4gIGlmIChvcHRpb25zLmhlYWRlcnMpIHtcbiAgICBjb25zdCBoZWFkZXJzTGlzdCA9IG5ldyBIZWFkZXJzKG9wdGlvbnMuaGVhZGVycylba0hlYWRlcnNMaXN0XVxuXG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdCA9IGhlYWRlcnNMaXN0XG4gIH1cblxuICAvLyAzLiBBcHBlbmQgKGBVcGdyYWRlYCwgYHdlYnNvY2tldGApIHRvIHJlcXVlc3TigJlzIGhlYWRlciBsaXN0LlxuICAvLyA0LiBBcHBlbmQgKGBDb25uZWN0aW9uYCwgYFVwZ3JhZGVgKSB0byByZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cbiAgLy8gTm90ZTogYm90aCBvZiB0aGVzZSBhcmUgaGFuZGxlZCBieSB1bmRpY2kgY3VycmVudGx5LlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9ibG9iLzY4YzI2OWM0MTQ0YzQ0NmYzZjEyMjA5NTEzMzhkYWVmNGE2YjVlYzQvbGliL2NsaWVudC5qcyNMMTM5N1xuXG4gIC8vIDUuIExldCBrZXlWYWx1ZSBiZSBhIG5vbmNlIGNvbnNpc3Rpbmcgb2YgYSByYW5kb21seSBzZWxlY3RlZFxuICAvLyAgICAxNi1ieXRlIHZhbHVlIHRoYXQgaGFzIGJlZW4gZm9yZ2l2aW5nLWJhc2U2NC1lbmNvZGVkIGFuZFxuICAvLyAgICBpc29tb3JwaGljIGVuY29kZWQuXG4gIGNvbnN0IGtleVZhbHVlID0gY3J5cHRvLnJhbmRvbUJ5dGVzKDE2KS50b1N0cmluZygnYmFzZTY0JylcblxuICAvLyA2LiBBcHBlbmQgKGBTZWMtV2ViU29ja2V0LUtleWAsIGtleVZhbHVlKSB0byByZXF1ZXN04oCZc1xuICAvLyAgICBoZWFkZXIgbGlzdC5cbiAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ3NlYy13ZWJzb2NrZXQta2V5Jywga2V5VmFsdWUpXG5cbiAgLy8gNy4gQXBwZW5kIChgU2VjLVdlYlNvY2tldC1WZXJzaW9uYCwgYDEzYCkgdG8gcmVxdWVzdOKAmXNcbiAgLy8gICAgaGVhZGVyIGxpc3QuXG4gIHJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdzZWMtd2Vic29ja2V0LXZlcnNpb24nLCAnMTMnKVxuXG4gIC8vIDguIEZvciBlYWNoIHByb3RvY29sIGluIHByb3RvY29scywgY29tYmluZVxuICAvLyAgICAoYFNlYy1XZWJTb2NrZXQtUHJvdG9jb2xgLCBwcm90b2NvbCkgaW4gcmVxdWVzdOKAmXMgaGVhZGVyXG4gIC8vICAgIGxpc3QuXG4gIGZvciAoY29uc3QgcHJvdG9jb2wgb2YgcHJvdG9jb2xzKSB7XG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ3NlYy13ZWJzb2NrZXQtcHJvdG9jb2wnLCBwcm90b2NvbClcbiAgfVxuXG4gIC8vIDkuIExldCBwZXJtZXNzYWdlRGVmbGF0ZSBiZSBhIHVzZXItYWdlbnQgZGVmaW5lZFxuICAvLyAgICBcInBlcm1lc3NhZ2UtZGVmbGF0ZVwiIGV4dGVuc2lvbiBoZWFkZXIgdmFsdWUuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL2dlY2tvLWRldi9ibG9iL2NlNzgyMzRmNWU2NTNhNWQzOTE2ODEzZmY5OTBmMDUzNTEwMjI3YmMvbmV0d2Vyay9wcm90b2NvbC93ZWJzb2NrZXQvV2ViU29ja2V0Q2hhbm5lbC5jcHAjTDI2NzNcbiAgLy8gVE9ETzogZW5hYmxlIG9uY2UgcGVybWVzc2FnZS1kZWZsYXRlIGlzIHN1cHBvcnRlZFxuICBjb25zdCBwZXJtZXNzYWdlRGVmbGF0ZSA9ICcnIC8vICdwZXJtZXNzYWdlLWRlZmxhdGU7IDE1J1xuXG4gIC8vIDEwLiBBcHBlbmQgKGBTZWMtV2ViU29ja2V0LUV4dGVuc2lvbnNgLCBwZXJtZXNzYWdlRGVmbGF0ZSkgdG9cbiAgLy8gICAgIHJlcXVlc3TigJlzIGhlYWRlciBsaXN0LlxuICAvLyByZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnc2VjLXdlYnNvY2tldC1leHRlbnNpb25zJywgcGVybWVzc2FnZURlZmxhdGUpXG5cbiAgLy8gMTEuIEZldGNoIHJlcXVlc3Qgd2l0aCB1c2VQYXJhbGxlbFF1ZXVlIHNldCB0byB0cnVlLCBhbmRcbiAgLy8gICAgIHByb2Nlc3NSZXNwb25zZSBnaXZlbiByZXNwb25zZSBiZWluZyB0aGVzZSBzdGVwczpcbiAgY29uc3QgY29udHJvbGxlciA9IGZldGNoaW5nKHtcbiAgICByZXF1ZXN0LFxuICAgIHVzZVBhcmFsbGVsUXVldWU6IHRydWUsXG4gICAgZGlzcGF0Y2hlcjogb3B0aW9ucy5kaXNwYXRjaGVyID8/IGdldEdsb2JhbERpc3BhdGNoZXIoKSxcbiAgICBwcm9jZXNzUmVzcG9uc2UgKHJlc3BvbnNlKSB7XG4gICAgICAvLyAxLiBJZiByZXNwb25zZSBpcyBhIG5ldHdvcmsgZXJyb3Igb3IgaXRzIHN0YXR1cyBpcyBub3QgMTAxLFxuICAgICAgLy8gICAgZmFpbCB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24uXG4gICAgICBpZiAocmVzcG9uc2UudHlwZSA9PT0gJ2Vycm9yJyB8fCByZXNwb25zZS5zdGF0dXMgIT09IDEwMSkge1xuICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1JlY2VpdmVkIG5ldHdvcmsgZXJyb3Igb3Igbm9uLTEwMSBzdGF0dXMgY29kZS4nKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gMi4gSWYgcHJvdG9jb2xzIGlzIG5vdCB0aGUgZW1wdHkgbGlzdCBhbmQgZXh0cmFjdGluZyBoZWFkZXJcbiAgICAgIC8vICAgIGxpc3QgdmFsdWVzIGdpdmVuIGBTZWMtV2ViU29ja2V0LVByb3RvY29sYCBhbmQgcmVzcG9uc2XigJlzXG4gICAgICAvLyAgICBoZWFkZXIgbGlzdCByZXN1bHRzIGluIG51bGwsIGZhaWx1cmUsIG9yIHRoZSBlbXB0eSBieXRlXG4gICAgICAvLyAgICBzZXF1ZW5jZSwgdGhlbiBmYWlsIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbi5cbiAgICAgIGlmIChwcm90b2NvbHMubGVuZ3RoICE9PSAwICYmICFyZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ1NlYy1XZWJTb2NrZXQtUHJvdG9jb2wnKSkge1xuICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1NlcnZlciBkaWQgbm90IHJlc3BvbmQgd2l0aCBzZW50IHByb3RvY29scy4nKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gMy4gRm9sbG93IHRoZSByZXF1aXJlbWVudHMgc3RhdGVkIHN0ZXAgMiB0byBzdGVwIDYsIGluY2x1c2l2ZSxcbiAgICAgIC8vICAgIG9mIHRoZSBsYXN0IHNldCBvZiBzdGVwcyBpbiBzZWN0aW9uIDQuMSBvZiBUaGUgV2ViU29ja2V0XG4gICAgICAvLyAgICBQcm90b2NvbCB0byB2YWxpZGF0ZSByZXNwb25zZS4gVGhpcyBlaXRoZXIgcmVzdWx0cyBpbiBmYWlsXG4gICAgICAvLyAgICB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gb3IgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzXG4gICAgICAvLyAgICBlc3RhYmxpc2hlZC5cblxuICAgICAgLy8gMi4gSWYgdGhlIHJlc3BvbnNlIGxhY2tzIGFuIHxVcGdyYWRlfCBoZWFkZXIgZmllbGQgb3IgdGhlIHxVcGdyYWRlfFxuICAgICAgLy8gICAgaGVhZGVyIGZpZWxkIGNvbnRhaW5zIGEgdmFsdWUgdGhhdCBpcyBub3QgYW4gQVNDSUkgY2FzZS1cbiAgICAgIC8vICAgIGluc2Vuc2l0aXZlIG1hdGNoIGZvciB0aGUgdmFsdWUgXCJ3ZWJzb2NrZXRcIiwgdGhlIGNsaWVudCBNVVNUXG4gICAgICAvLyAgICBfRmFpbCB0aGUgV2ViU29ja2V0IENvbm5lY3Rpb25fLlxuICAgICAgaWYgKHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnVXBncmFkZScpPy50b0xvd2VyQ2FzZSgpICE9PSAnd2Vic29ja2V0Jykge1xuICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1NlcnZlciBkaWQgbm90IHNldCBVcGdyYWRlIGhlYWRlciB0byBcIndlYnNvY2tldFwiLicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyAzLiBJZiB0aGUgcmVzcG9uc2UgbGFja3MgYSB8Q29ubmVjdGlvbnwgaGVhZGVyIGZpZWxkIG9yIHRoZVxuICAgICAgLy8gICAgfENvbm5lY3Rpb258IGhlYWRlciBmaWVsZCBkb2Vzbid0IGNvbnRhaW4gYSB0b2tlbiB0aGF0IGlzIGFuXG4gICAgICAvLyAgICBBU0NJSSBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvciB0aGUgdmFsdWUgXCJVcGdyYWRlXCIsIHRoZSBjbGllbnRcbiAgICAgIC8vICAgIE1VU1QgX0ZhaWwgdGhlIFdlYlNvY2tldCBDb25uZWN0aW9uXy5cbiAgICAgIGlmIChyZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ0Nvbm5lY3Rpb24nKT8udG9Mb3dlckNhc2UoKSAhPT0gJ3VwZ3JhZGUnKSB7XG4gICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnU2VydmVyIGRpZCBub3Qgc2V0IENvbm5lY3Rpb24gaGVhZGVyIHRvIFwidXBncmFkZVwiLicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyA0LiBJZiB0aGUgcmVzcG9uc2UgbGFja3MgYSB8U2VjLVdlYlNvY2tldC1BY2NlcHR8IGhlYWRlciBmaWVsZCBvclxuICAgICAgLy8gICAgdGhlIHxTZWMtV2ViU29ja2V0LUFjY2VwdHwgY29udGFpbnMgYSB2YWx1ZSBvdGhlciB0aGFuIHRoZVxuICAgICAgLy8gICAgYmFzZTY0LWVuY29kZWQgU0hBLTEgb2YgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlIHxTZWMtV2ViU29ja2V0LVxuICAgICAgLy8gICAgS2V5fCAoYXMgYSBzdHJpbmcsIG5vdCBiYXNlNjQtZGVjb2RlZCkgd2l0aCB0aGUgc3RyaW5nIFwiMjU4RUFGQTUtXG4gICAgICAvLyAgICBFOTE0LTQ3REEtOTVDQS1DNUFCMERDODVCMTFcIiBidXQgaWdub3JpbmcgYW55IGxlYWRpbmcgYW5kXG4gICAgICAvLyAgICB0cmFpbGluZyB3aGl0ZXNwYWNlLCB0aGUgY2xpZW50IE1VU1QgX0ZhaWwgdGhlIFdlYlNvY2tldFxuICAgICAgLy8gICAgQ29ubmVjdGlvbl8uXG4gICAgICBjb25zdCBzZWNXU0FjY2VwdCA9IHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnU2VjLVdlYlNvY2tldC1BY2NlcHQnKVxuICAgICAgY29uc3QgZGlnZXN0ID0gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTEnKS51cGRhdGUoa2V5VmFsdWUgKyB1aWQpLmRpZ2VzdCgnYmFzZTY0JylcbiAgICAgIGlmIChzZWNXU0FjY2VwdCAhPT0gZGlnZXN0KSB7XG4gICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnSW5jb3JyZWN0IGhhc2ggcmVjZWl2ZWQgaW4gU2VjLVdlYlNvY2tldC1BY2NlcHQgaGVhZGVyLicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyA1LiBJZiB0aGUgcmVzcG9uc2UgaW5jbHVkZXMgYSB8U2VjLVdlYlNvY2tldC1FeHRlbnNpb25zfCBoZWFkZXJcbiAgICAgIC8vICAgIGZpZWxkIGFuZCB0aGlzIGhlYWRlciBmaWVsZCBpbmRpY2F0ZXMgdGhlIHVzZSBvZiBhbiBleHRlbnNpb25cbiAgICAgIC8vICAgIHRoYXQgd2FzIG5vdCBwcmVzZW50IGluIHRoZSBjbGllbnQncyBoYW5kc2hha2UgKHRoZSBzZXJ2ZXIgaGFzXG4gICAgICAvLyAgICBpbmRpY2F0ZWQgYW4gZXh0ZW5zaW9uIG5vdCByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCksIHRoZSBjbGllbnRcbiAgICAgIC8vICAgIE1VU1QgX0ZhaWwgdGhlIFdlYlNvY2tldCBDb25uZWN0aW9uXy4gIChUaGUgcGFyc2luZyBvZiB0aGlzXG4gICAgICAvLyAgICBoZWFkZXIgZmllbGQgdG8gZGV0ZXJtaW5lIHdoaWNoIGV4dGVuc2lvbnMgYXJlIHJlcXVlc3RlZCBpc1xuICAgICAgLy8gICAgZGlzY3Vzc2VkIGluIFNlY3Rpb24gOS4xLilcbiAgICAgIGNvbnN0IHNlY0V4dGVuc2lvbiA9IHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnU2VjLVdlYlNvY2tldC1FeHRlbnNpb25zJylcblxuICAgICAgaWYgKHNlY0V4dGVuc2lvbiAhPT0gbnVsbCAmJiBzZWNFeHRlbnNpb24gIT09IHBlcm1lc3NhZ2VEZWZsYXRlKSB7XG4gICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnUmVjZWl2ZWQgZGlmZmVyZW50IHBlcm1lc3NhZ2UtZGVmbGF0ZSB0aGFuIHRoZSBvbmUgc2V0LicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyA2LiBJZiB0aGUgcmVzcG9uc2UgaW5jbHVkZXMgYSB8U2VjLVdlYlNvY2tldC1Qcm90b2NvbHwgaGVhZGVyIGZpZWxkXG4gICAgICAvLyAgICBhbmQgdGhpcyBoZWFkZXIgZmllbGQgaW5kaWNhdGVzIHRoZSB1c2Ugb2YgYSBzdWJwcm90b2NvbCB0aGF0IHdhc1xuICAgICAgLy8gICAgbm90IHByZXNlbnQgaW4gdGhlIGNsaWVudCdzIGhhbmRzaGFrZSAodGhlIHNlcnZlciBoYXMgaW5kaWNhdGVkIGFcbiAgICAgIC8vICAgIHN1YnByb3RvY29sIG5vdCByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCksIHRoZSBjbGllbnQgTVVTVCBfRmFpbFxuICAgICAgLy8gICAgdGhlIFdlYlNvY2tldCBDb25uZWN0aW9uXy5cbiAgICAgIGNvbnN0IHNlY1Byb3RvY29sID0gcmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdTZWMtV2ViU29ja2V0LVByb3RvY29sJylcblxuICAgICAgaWYgKHNlY1Byb3RvY29sICE9PSBudWxsICYmIHNlY1Byb3RvY29sICE9PSByZXF1ZXN0LmhlYWRlcnNMaXN0LmdldCgnU2VjLVdlYlNvY2tldC1Qcm90b2NvbCcpKSB7XG4gICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnUHJvdG9jb2wgd2FzIG5vdCBzZXQgaW4gdGhlIG9wZW5pbmcgaGFuZHNoYWtlLicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICByZXNwb25zZS5zb2NrZXQub24oJ2RhdGEnLCBvblNvY2tldERhdGEpXG4gICAgICByZXNwb25zZS5zb2NrZXQub24oJ2Nsb3NlJywgb25Tb2NrZXRDbG9zZSlcbiAgICAgIHJlc3BvbnNlLnNvY2tldC5vbignZXJyb3InLCBvblNvY2tldEVycm9yKVxuXG4gICAgICBpZiAoY2hhbm5lbHMub3Blbi5oYXNTdWJzY3JpYmVycykge1xuICAgICAgICBjaGFubmVscy5vcGVuLnB1Ymxpc2goe1xuICAgICAgICAgIGFkZHJlc3M6IHJlc3BvbnNlLnNvY2tldC5hZGRyZXNzKCksXG4gICAgICAgICAgcHJvdG9jb2w6IHNlY1Byb3RvY29sLFxuICAgICAgICAgIGV4dGVuc2lvbnM6IHNlY0V4dGVuc2lvblxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBvbkVzdGFibGlzaChyZXNwb25zZSlcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIGNvbnRyb2xsZXJcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0J1ZmZlcn0gY2h1bmtcbiAqL1xuZnVuY3Rpb24gb25Tb2NrZXREYXRhIChjaHVuaykge1xuICBpZiAoIXRoaXMud3Nba0J5dGVQYXJzZXJdLndyaXRlKGNodW5rKSkge1xuICAgIHRoaXMucGF1c2UoKVxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNmZWVkYmFjay1mcm9tLXRoZS1wcm90b2NvbFxuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzY0NTUjc2VjdGlvbi03LjEuNFxuICovXG5mdW5jdGlvbiBvblNvY2tldENsb3NlICgpIHtcbiAgY29uc3QgeyB3cyB9ID0gdGhpc1xuXG4gIC8vIElmIHRoZSBUQ1AgY29ubmVjdGlvbiB3YXMgY2xvc2VkIGFmdGVyIHRoZVxuICAvLyBXZWJTb2NrZXQgY2xvc2luZyBoYW5kc2hha2Ugd2FzIGNvbXBsZXRlZCwgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uXG4gIC8vIGlzIHNhaWQgdG8gaGF2ZSBiZWVuIGNsb3NlZCBfY2xlYW5seV8uXG4gIGNvbnN0IHdhc0NsZWFuID0gd3Nba1NlbnRDbG9zZV0gJiYgd3Nba1JlY2VpdmVkQ2xvc2VdXG5cbiAgbGV0IGNvZGUgPSAxMDA1XG4gIGxldCByZWFzb24gPSAnJ1xuXG4gIGNvbnN0IHJlc3VsdCA9IHdzW2tCeXRlUGFyc2VyXS5jbG9zaW5nSW5mb1xuXG4gIGlmIChyZXN1bHQpIHtcbiAgICBjb2RlID0gcmVzdWx0LmNvZGUgPz8gMTAwNVxuICAgIHJlYXNvbiA9IHJlc3VsdC5yZWFzb25cbiAgfSBlbHNlIGlmICghd3Nba1NlbnRDbG9zZV0pIHtcbiAgICAvLyBJZiBfVGhlIFdlYlNvY2tldFxuICAgIC8vIENvbm5lY3Rpb24gaXMgQ2xvc2VkXyBhbmQgbm8gQ2xvc2UgY29udHJvbCBmcmFtZSB3YXMgcmVjZWl2ZWQgYnkgdGhlXG4gICAgLy8gZW5kcG9pbnQgKHN1Y2ggYXMgY291bGQgb2NjdXIgaWYgdGhlIHVuZGVybHlpbmcgdHJhbnNwb3J0IGNvbm5lY3Rpb25cbiAgICAvLyBpcyBsb3N0KSwgX1RoZSBXZWJTb2NrZXQgQ29ubmVjdGlvbiBDbG9zZSBDb2RlXyBpcyBjb25zaWRlcmVkIHRvIGJlXG4gICAgLy8gMTAwNi5cbiAgICBjb2RlID0gMTAwNlxuICB9XG5cbiAgLy8gMS4gQ2hhbmdlIHRoZSByZWFkeSBzdGF0ZSB0byBDTE9TRUQgKDMpLlxuICB3c1trUmVhZHlTdGF0ZV0gPSBzdGF0ZXMuQ0xPU0VEXG5cbiAgLy8gMi4gSWYgdGhlIHVzZXIgYWdlbnQgd2FzIHJlcXVpcmVkIHRvIGZhaWwgdGhlIFdlYlNvY2tldFxuICAvLyAgICBjb25uZWN0aW9uLCBvciBpZiB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gd2FzIGNsb3NlZFxuICAvLyAgICBhZnRlciBiZWluZyBmbGFnZ2VkIGFzIGZ1bGwsIGZpcmUgYW4gZXZlbnQgbmFtZWQgZXJyb3JcbiAgLy8gICAgYXQgdGhlIFdlYlNvY2tldCBvYmplY3QuXG4gIC8vIFRPRE9cblxuICAvLyAzLiBGaXJlIGFuIGV2ZW50IG5hbWVkIGNsb3NlIGF0IHRoZSBXZWJTb2NrZXQgb2JqZWN0LFxuICAvLyAgICB1c2luZyBDbG9zZUV2ZW50LCB3aXRoIHRoZSB3YXNDbGVhbiBhdHRyaWJ1dGVcbiAgLy8gICAgaW5pdGlhbGl6ZWQgdG8gdHJ1ZSBpZiB0aGUgY29ubmVjdGlvbiBjbG9zZWQgY2xlYW5seVxuICAvLyAgICBhbmQgZmFsc2Ugb3RoZXJ3aXNlLCB0aGUgY29kZSBhdHRyaWJ1dGUgaW5pdGlhbGl6ZWQgdG9cbiAgLy8gICAgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGNsb3NlIGNvZGUsIGFuZCB0aGUgcmVhc29uXG4gIC8vICAgIGF0dHJpYnV0ZSBpbml0aWFsaXplZCB0byB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIFVURi04XG4gIC8vICAgIGRlY29kZSB3aXRob3V0IEJPTSB0byB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gY2xvc2VcbiAgLy8gICAgcmVhc29uLlxuICBmaXJlRXZlbnQoJ2Nsb3NlJywgd3MsIENsb3NlRXZlbnQsIHtcbiAgICB3YXNDbGVhbiwgY29kZSwgcmVhc29uXG4gIH0pXG5cbiAgaWYgKGNoYW5uZWxzLmNsb3NlLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgY2hhbm5lbHMuY2xvc2UucHVibGlzaCh7XG4gICAgICB3ZWJzb2NrZXQ6IHdzLFxuICAgICAgY29kZSxcbiAgICAgIHJlYXNvblxuICAgIH0pXG4gIH1cbn1cblxuZnVuY3Rpb24gb25Tb2NrZXRFcnJvciAoZXJyb3IpIHtcbiAgY29uc3QgeyB3cyB9ID0gdGhpc1xuXG4gIHdzW2tSZWFkeVN0YXRlXSA9IHN0YXRlcy5DTE9TSU5HXG5cbiAgaWYgKGNoYW5uZWxzLnNvY2tldEVycm9yLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgY2hhbm5lbHMuc29ja2V0RXJyb3IucHVibGlzaChlcnJvcilcbiAgfVxuXG4gIHRoaXMuZGVzdHJveSgpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBlc3RhYmxpc2hXZWJTb2NrZXRDb25uZWN0aW9uXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IG1heFVuc2lnbmVkMTZCaXQgfSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcblxuLyoqIEB0eXBlIHtpbXBvcnQoJ2NyeXB0bycpfSAqL1xubGV0IGNyeXB0b1xudHJ5IHtcbiAgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJylcbn0gY2F0Y2gge1xuXG59XG5cbmNsYXNzIFdlYnNvY2tldEZyYW1lU2VuZCB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge0J1ZmZlcnx1bmRlZmluZWR9IGRhdGFcbiAgICovXG4gIGNvbnN0cnVjdG9yIChkYXRhKSB7XG4gICAgdGhpcy5mcmFtZURhdGEgPSBkYXRhXG4gICAgdGhpcy5tYXNrS2V5ID0gY3J5cHRvLnJhbmRvbUJ5dGVzKDQpXG4gIH1cblxuICBjcmVhdGVGcmFtZSAob3Bjb2RlKSB7XG4gICAgY29uc3QgYm9keUxlbmd0aCA9IHRoaXMuZnJhbWVEYXRhPy5ieXRlTGVuZ3RoID8/IDBcblxuICAgIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICAgIGxldCBwYXlsb2FkTGVuZ3RoID0gYm9keUxlbmd0aCAvLyAwLTEyNVxuICAgIGxldCBvZmZzZXQgPSA2XG5cbiAgICBpZiAoYm9keUxlbmd0aCA+IG1heFVuc2lnbmVkMTZCaXQpIHtcbiAgICAgIG9mZnNldCArPSA4IC8vIHBheWxvYWQgbGVuZ3RoIGlzIG5leHQgOCBieXRlc1xuICAgICAgcGF5bG9hZExlbmd0aCA9IDEyN1xuICAgIH0gZWxzZSBpZiAoYm9keUxlbmd0aCA+IDEyNSkge1xuICAgICAgb2Zmc2V0ICs9IDIgLy8gcGF5bG9hZCBsZW5ndGggaXMgbmV4dCAyIGJ5dGVzXG4gICAgICBwYXlsb2FkTGVuZ3RoID0gMTI2XG4gICAgfVxuXG4gICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKGJvZHlMZW5ndGggKyBvZmZzZXQpXG5cbiAgICAvLyBDbGVhciBmaXJzdCAyIGJ5dGVzLCBldmVyeXRoaW5nIGVsc2UgaXMgb3ZlcndyaXR0ZW5cbiAgICBidWZmZXJbMF0gPSBidWZmZXJbMV0gPSAwXG4gICAgYnVmZmVyWzBdIHw9IDB4ODAgLy8gRklOXG4gICAgYnVmZmVyWzBdID0gKGJ1ZmZlclswXSAmIDB4RjApICsgb3Bjb2RlIC8vIG9wY29kZVxuXG4gICAgLyohIHdzLiBNSVQgTGljZW5zZS4gRWluYXIgT3R0byBTdGFuZ3ZpayA8ZWluYXJvc0BnbWFpbC5jb20+ICovXG4gICAgYnVmZmVyW29mZnNldCAtIDRdID0gdGhpcy5tYXNrS2V5WzBdXG4gICAgYnVmZmVyW29mZnNldCAtIDNdID0gdGhpcy5tYXNrS2V5WzFdXG4gICAgYnVmZmVyW29mZnNldCAtIDJdID0gdGhpcy5tYXNrS2V5WzJdXG4gICAgYnVmZmVyW29mZnNldCAtIDFdID0gdGhpcy5tYXNrS2V5WzNdXG5cbiAgICBidWZmZXJbMV0gPSBwYXlsb2FkTGVuZ3RoXG5cbiAgICBpZiAocGF5bG9hZExlbmd0aCA9PT0gMTI2KSB7XG4gICAgICBidWZmZXIud3JpdGVVSW50MTZCRShib2R5TGVuZ3RoLCAyKVxuICAgIH0gZWxzZSBpZiAocGF5bG9hZExlbmd0aCA9PT0gMTI3KSB7XG4gICAgICAvLyBDbGVhciBleHRlbmRlZCBwYXlsb2FkIGxlbmd0aFxuICAgICAgYnVmZmVyWzJdID0gYnVmZmVyWzNdID0gMFxuICAgICAgYnVmZmVyLndyaXRlVUludEJFKGJvZHlMZW5ndGgsIDQsIDYpXG4gICAgfVxuXG4gICAgYnVmZmVyWzFdIHw9IDB4ODAgLy8gTUFTS1xuXG4gICAgLy8gbWFzayBib2R5XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBib2R5TGVuZ3RoOyBpKyspIHtcbiAgICAgIGJ1ZmZlcltvZmZzZXQgKyBpXSA9IHRoaXMuZnJhbWVEYXRhW2ldIF4gdGhpcy5tYXNrS2V5W2kgJSA0XVxuICAgIH1cblxuICAgIHJldHVybiBidWZmZXJcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgV2Vic29ja2V0RnJhbWVTZW5kXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IFdyaXRhYmxlIH0gPSByZXF1aXJlKCdzdHJlYW0nKVxuY29uc3QgZGlhZ25vc3RpY3NDaGFubmVsID0gcmVxdWlyZSgnZGlhZ25vc3RpY3NfY2hhbm5lbCcpXG5jb25zdCB7IHBhcnNlclN0YXRlcywgb3Bjb2Rlcywgc3RhdGVzLCBlbXB0eUJ1ZmZlciB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3QgeyBrUmVhZHlTdGF0ZSwga1NlbnRDbG9zZSwga1Jlc3BvbnNlLCBrUmVjZWl2ZWRDbG9zZSB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgaXNWYWxpZFN0YXR1c0NvZGUsIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uLCB3ZWJzb2NrZXRNZXNzYWdlUmVjZWl2ZWQgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IFdlYnNvY2tldEZyYW1lU2VuZCB9ID0gcmVxdWlyZSgnLi9mcmFtZScpXG5cbi8vIFRoaXMgY29kZSB3YXMgaW5mbHVlbmNlZCBieSB3cyByZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4vLyBDb3B5cmlnaHQgKGMpIDIwMTEgRWluYXIgT3R0byBTdGFuZ3ZpayA8ZWluYXJvc0BnbWFpbC5jb20+XG4vLyBDb3B5cmlnaHQgKGMpIDIwMTMgQXJub3V0IEthemVtaWVyIGFuZCBjb250cmlidXRvcnNcbi8vIENvcHlyaWdodCAoYykgMjAxNiBMdWlnaSBQaW5jYSBhbmQgY29udHJpYnV0b3JzXG5cbmNvbnN0IGNoYW5uZWxzID0ge31cbmNoYW5uZWxzLnBpbmcgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOndlYnNvY2tldDpwaW5nJylcbmNoYW5uZWxzLnBvbmcgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOndlYnNvY2tldDpwb25nJylcblxuY2xhc3MgQnl0ZVBhcnNlciBleHRlbmRzIFdyaXRhYmxlIHtcbiAgI2J1ZmZlcnMgPSBbXVxuICAjYnl0ZU9mZnNldCA9IDBcblxuICAjc3RhdGUgPSBwYXJzZXJTdGF0ZXMuSU5GT1xuXG4gICNpbmZvID0ge31cbiAgI2ZyYWdtZW50cyA9IFtdXG5cbiAgY29uc3RydWN0b3IgKHdzKSB7XG4gICAgc3VwZXIoKVxuXG4gICAgdGhpcy53cyA9IHdzXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtCdWZmZXJ9IGNodW5rXG4gICAqIEBwYXJhbSB7KCkgPT4gdm9pZH0gY2FsbGJhY2tcbiAgICovXG4gIF93cml0ZSAoY2h1bmssIF8sIGNhbGxiYWNrKSB7XG4gICAgdGhpcy4jYnVmZmVycy5wdXNoKGNodW5rKVxuICAgIHRoaXMuI2J5dGVPZmZzZXQgKz0gY2h1bmsubGVuZ3RoXG5cbiAgICB0aGlzLnJ1bihjYWxsYmFjaylcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHdoZW5ldmVyIGEgbmV3IGNodW5rIGlzIHJlY2VpdmVkLlxuICAgKiBDYWxsYmFjayBpcyBjYWxsZWQgd2hlbmV2ZXIgdGhlcmUgYXJlIG5vIG1vcmUgY2h1bmtzIGJ1ZmZlcmluZyxcbiAgICogb3Igbm90IGVub3VnaCBieXRlcyBhcmUgYnVmZmVyZWQgdG8gcGFyc2UuXG4gICAqL1xuICBydW4gKGNhbGxiYWNrKSB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmICh0aGlzLiNzdGF0ZSA9PT0gcGFyc2VyU3RhdGVzLklORk8pIHtcbiAgICAgICAgLy8gSWYgdGhlcmUgYXJlbid0IGVub3VnaCBieXRlcyB0byBwYXJzZSB0aGUgcGF5bG9hZCBsZW5ndGgsIGV0Yy5cbiAgICAgICAgaWYgKHRoaXMuI2J5dGVPZmZzZXQgPCAyKSB7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IHRoaXMuY29uc3VtZSgyKVxuXG4gICAgICAgIHRoaXMuI2luZm8uZmluID0gKGJ1ZmZlclswXSAmIDB4ODApICE9PSAwXG4gICAgICAgIHRoaXMuI2luZm8ub3Bjb2RlID0gYnVmZmVyWzBdICYgMHgwRlxuXG4gICAgICAgIC8vIElmIHdlIHJlY2VpdmUgYSBmcmFnbWVudGVkIG1lc3NhZ2UsIHdlIHVzZSB0aGUgdHlwZSBvZiB0aGUgZmlyc3RcbiAgICAgICAgLy8gZnJhbWUgdG8gcGFyc2UgdGhlIGZ1bGwgbWVzc2FnZSBhcyBiaW5hcnkvdGV4dCwgd2hlbiBpdCdzIHRlcm1pbmF0ZWRcbiAgICAgICAgdGhpcy4jaW5mby5vcmlnaW5hbE9wY29kZSA/Pz0gdGhpcy4jaW5mby5vcGNvZGVcblxuICAgICAgICB0aGlzLiNpbmZvLmZyYWdtZW50ZWQgPSAhdGhpcy4jaW5mby5maW4gJiYgdGhpcy4jaW5mby5vcGNvZGUgIT09IG9wY29kZXMuQ09OVElOVUFUSU9OXG5cbiAgICAgICAgaWYgKHRoaXMuI2luZm8uZnJhZ21lbnRlZCAmJiB0aGlzLiNpbmZvLm9wY29kZSAhPT0gb3Bjb2Rlcy5CSU5BUlkgJiYgdGhpcy4jaW5mby5vcGNvZGUgIT09IG9wY29kZXMuVEVYVCkge1xuICAgICAgICAgIC8vIE9ubHkgdGV4dCBhbmQgYmluYXJ5IGZyYW1lcyBjYW4gYmUgZnJhZ21lbnRlZFxuICAgICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHRoaXMud3MsICdJbnZhbGlkIGZyYW1lIHR5cGUgd2FzIGZyYWdtZW50ZWQuJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBheWxvYWRMZW5ndGggPSBidWZmZXJbMV0gJiAweDdGXG5cbiAgICAgICAgaWYgKHBheWxvYWRMZW5ndGggPD0gMTI1KSB7XG4gICAgICAgICAgdGhpcy4jaW5mby5wYXlsb2FkTGVuZ3RoID0gcGF5bG9hZExlbmd0aFxuICAgICAgICAgIHRoaXMuI3N0YXRlID0gcGFyc2VyU3RhdGVzLlJFQURfREFUQVxuICAgICAgICB9IGVsc2UgaWYgKHBheWxvYWRMZW5ndGggPT09IDEyNikge1xuICAgICAgICAgIHRoaXMuI3N0YXRlID0gcGFyc2VyU3RhdGVzLlBBWUxPQURMRU5HVEhfMTZcbiAgICAgICAgfSBlbHNlIGlmIChwYXlsb2FkTGVuZ3RoID09PSAxMjcpIHtcbiAgICAgICAgICB0aGlzLiNzdGF0ZSA9IHBhcnNlclN0YXRlcy5QQVlMT0FETEVOR1RIXzY0XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy4jaW5mby5mcmFnbWVudGVkICYmIHBheWxvYWRMZW5ndGggPiAxMjUpIHtcbiAgICAgICAgICAvLyBBIGZyYWdtZW50ZWQgZnJhbWUgY2FuJ3QgYmUgZnJhZ21lbnRlZCBpdHNlbGZcbiAgICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih0aGlzLndzLCAnRnJhZ21lbnRlZCBmcmFtZSBleGNlZWRlZCAxMjUgYnl0ZXMuJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAodGhpcy4jaW5mby5vcGNvZGUgPT09IG9wY29kZXMuUElORyB8fFxuICAgICAgICAgICAgdGhpcy4jaW5mby5vcGNvZGUgPT09IG9wY29kZXMuUE9ORyB8fFxuICAgICAgICAgICAgdGhpcy4jaW5mby5vcGNvZGUgPT09IG9wY29kZXMuQ0xPU0UpICYmXG4gICAgICAgICAgcGF5bG9hZExlbmd0aCA+IDEyNVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBDb250cm9sIGZyYW1lcyBjYW4gaGF2ZSBhIHBheWxvYWQgbGVuZ3RoIG9mIDEyNSBieXRlcyBNQVhcbiAgICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih0aGlzLndzLCAnUGF5bG9hZCBsZW5ndGggZm9yIGNvbnRyb2wgZnJhbWUgZXhjZWVkZWQgMTI1IGJ5dGVzLicpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy4jaW5mby5vcGNvZGUgPT09IG9wY29kZXMuQ0xPU0UpIHtcbiAgICAgICAgICBpZiAocGF5bG9hZExlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24odGhpcy53cywgJ1JlY2VpdmVkIGNsb3NlIGZyYW1lIHdpdGggYSAxLWJ5dGUgYm9keS4nKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgYm9keSA9IHRoaXMuY29uc3VtZShwYXlsb2FkTGVuZ3RoKVxuXG4gICAgICAgICAgdGhpcy4jaW5mby5jbG9zZUluZm8gPSB0aGlzLnBhcnNlQ2xvc2VCb2R5KGZhbHNlLCBib2R5KVxuXG4gICAgICAgICAgaWYgKCF0aGlzLndzW2tTZW50Q2xvc2VdKSB7XG4gICAgICAgICAgICAvLyBJZiBhbiBlbmRwb2ludCByZWNlaXZlcyBhIENsb3NlIGZyYW1lIGFuZCBkaWQgbm90IHByZXZpb3VzbHkgc2VuZCBhXG4gICAgICAgICAgICAvLyBDbG9zZSBmcmFtZSwgdGhlIGVuZHBvaW50IE1VU1Qgc2VuZCBhIENsb3NlIGZyYW1lIGluIHJlc3BvbnNlLiAgKFdoZW5cbiAgICAgICAgICAgIC8vIHNlbmRpbmcgYSBDbG9zZSBmcmFtZSBpbiByZXNwb25zZSwgdGhlIGVuZHBvaW50IHR5cGljYWxseSBlY2hvcyB0aGVcbiAgICAgICAgICAgIC8vIHN0YXR1cyBjb2RlIGl0IHJlY2VpdmVkLilcbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMilcbiAgICAgICAgICAgIGJvZHkud3JpdGVVSW50MTZCRSh0aGlzLiNpbmZvLmNsb3NlSW5mby5jb2RlLCAwKVxuICAgICAgICAgICAgY29uc3QgY2xvc2VGcmFtZSA9IG5ldyBXZWJzb2NrZXRGcmFtZVNlbmQoYm9keSlcblxuICAgICAgICAgICAgdGhpcy53c1trUmVzcG9uc2VdLnNvY2tldC53cml0ZShcbiAgICAgICAgICAgICAgY2xvc2VGcmFtZS5jcmVhdGVGcmFtZShvcGNvZGVzLkNMT1NFKSxcbiAgICAgICAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghZXJyKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLndzW2tTZW50Q2xvc2VdID0gdHJ1ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFVwb24gZWl0aGVyIHNlbmRpbmcgb3IgcmVjZWl2aW5nIGEgQ2xvc2UgY29udHJvbCBmcmFtZSwgaXQgaXMgc2FpZFxuICAgICAgICAgIC8vIHRoYXQgX1RoZSBXZWJTb2NrZXQgQ2xvc2luZyBIYW5kc2hha2UgaXMgU3RhcnRlZF8gYW5kIHRoYXQgdGhlXG4gICAgICAgICAgLy8gV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgaW4gdGhlIENMT1NJTkcgc3RhdGUuXG4gICAgICAgICAgdGhpcy53c1trUmVhZHlTdGF0ZV0gPSBzdGF0ZXMuQ0xPU0lOR1xuICAgICAgICAgIHRoaXMud3Nba1JlY2VpdmVkQ2xvc2VdID0gdHJ1ZVxuXG4gICAgICAgICAgdGhpcy5lbmQoKVxuXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy4jaW5mby5vcGNvZGUgPT09IG9wY29kZXMuUElORykge1xuICAgICAgICAgIC8vIFVwb24gcmVjZWlwdCBvZiBhIFBpbmcgZnJhbWUsIGFuIGVuZHBvaW50IE1VU1Qgc2VuZCBhIFBvbmcgZnJhbWUgaW5cbiAgICAgICAgICAvLyByZXNwb25zZSwgdW5sZXNzIGl0IGFscmVhZHkgcmVjZWl2ZWQgYSBDbG9zZSBmcmFtZS5cbiAgICAgICAgICAvLyBBIFBvbmcgZnJhbWUgc2VudCBpbiByZXNwb25zZSB0byBhIFBpbmcgZnJhbWUgbXVzdCBoYXZlIGlkZW50aWNhbFxuICAgICAgICAgIC8vIFwiQXBwbGljYXRpb24gZGF0YVwiXG5cbiAgICAgICAgICBjb25zdCBib2R5ID0gdGhpcy5jb25zdW1lKHBheWxvYWRMZW5ndGgpXG5cbiAgICAgICAgICBpZiAoIXRoaXMud3Nba1JlY2VpdmVkQ2xvc2VdKSB7XG4gICAgICAgICAgICBjb25zdCBmcmFtZSA9IG5ldyBXZWJzb2NrZXRGcmFtZVNlbmQoYm9keSlcblxuICAgICAgICAgICAgdGhpcy53c1trUmVzcG9uc2VdLnNvY2tldC53cml0ZShmcmFtZS5jcmVhdGVGcmFtZShvcGNvZGVzLlBPTkcpKVxuXG4gICAgICAgICAgICBpZiAoY2hhbm5lbHMucGluZy5oYXNTdWJzY3JpYmVycykge1xuICAgICAgICAgICAgICBjaGFubmVscy5waW5nLnB1Ymxpc2goe1xuICAgICAgICAgICAgICAgIHBheWxvYWQ6IGJvZHlcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLiNzdGF0ZSA9IHBhcnNlclN0YXRlcy5JTkZPXG5cbiAgICAgICAgICBpZiAodGhpcy4jYnl0ZU9mZnNldCA+IDApIHtcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKClcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLiNpbmZvLm9wY29kZSA9PT0gb3Bjb2Rlcy5QT05HKSB7XG4gICAgICAgICAgLy8gQSBQb25nIGZyYW1lIE1BWSBiZSBzZW50IHVuc29saWNpdGVkLiAgVGhpcyBzZXJ2ZXMgYXMgYVxuICAgICAgICAgIC8vIHVuaWRpcmVjdGlvbmFsIGhlYXJ0YmVhdC4gIEEgcmVzcG9uc2UgdG8gYW4gdW5zb2xpY2l0ZWQgUG9uZyBmcmFtZSBpc1xuICAgICAgICAgIC8vIG5vdCBleHBlY3RlZC5cblxuICAgICAgICAgIGNvbnN0IGJvZHkgPSB0aGlzLmNvbnN1bWUocGF5bG9hZExlbmd0aClcblxuICAgICAgICAgIGlmIChjaGFubmVscy5wb25nLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICAgICAgICBjaGFubmVscy5wb25nLnB1Ymxpc2goe1xuICAgICAgICAgICAgICBwYXlsb2FkOiBib2R5XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0aGlzLiNieXRlT2Zmc2V0ID4gMCkge1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2soKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuI3N0YXRlID09PSBwYXJzZXJTdGF0ZXMuUEFZTE9BRExFTkdUSF8xNikge1xuICAgICAgICBpZiAodGhpcy4jYnl0ZU9mZnNldCA8IDIpIHtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYnVmZmVyID0gdGhpcy5jb25zdW1lKDIpXG5cbiAgICAgICAgdGhpcy4jaW5mby5wYXlsb2FkTGVuZ3RoID0gYnVmZmVyLnJlYWRVSW50MTZCRSgwKVxuICAgICAgICB0aGlzLiNzdGF0ZSA9IHBhcnNlclN0YXRlcy5SRUFEX0RBVEFcbiAgICAgIH0gZWxzZSBpZiAodGhpcy4jc3RhdGUgPT09IHBhcnNlclN0YXRlcy5QQVlMT0FETEVOR1RIXzY0KSB7XG4gICAgICAgIGlmICh0aGlzLiNieXRlT2Zmc2V0IDwgOCkge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBidWZmZXIgPSB0aGlzLmNvbnN1bWUoOClcbiAgICAgICAgY29uc3QgdXBwZXIgPSBidWZmZXIucmVhZFVJbnQzMkJFKDApXG5cbiAgICAgICAgLy8gMl4zMSBpcyB0aGUgbWF4aW5pbXVtIGJ5dGVzIGFuIGFycmF5YnVmZmVyIGNhbiBjb250YWluXG4gICAgICAgIC8vIG9uIDMyLWJpdCBzeXN0ZW1zLiBBbHRob3VnaCwgb24gNjQtYml0IHN5c3RlbXMsIHRoaXMgaXNcbiAgICAgICAgLy8gMl41My0xIGJ5dGVzLlxuICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9FcnJvcnMvSW52YWxpZF9hcnJheV9sZW5ndGhcbiAgICAgICAgLy8gaHR0cHM6Ly9zb3VyY2UuY2hyb21pdW0ub3JnL2Nocm9taXVtL2Nocm9taXVtL3NyYy8rL21haW46djgvc3JjL2NvbW1vbi9nbG9iYWxzLmg7ZHJjPTE5NDYyMTJhYzAxMDA2NjhmMTRlYjllMjg0M2JkZDg0NmU1MTBhMWU7YnB2PTE7YnB0PTE7bD0xMjc1XG4gICAgICAgIC8vIGh0dHBzOi8vc291cmNlLmNocm9taXVtLm9yZy9jaHJvbWl1bS9jaHJvbWl1bS9zcmMvKy9tYWluOnY4L3NyYy9vYmplY3RzL2pzLWFycmF5LWJ1ZmZlci5oO2w9MzQ7ZHJjPTE5NDYyMTJhYzAxMDA2NjhmMTRlYjllMjg0M2JkZDg0NmU1MTBhMWVcbiAgICAgICAgaWYgKHVwcGVyID4gMiAqKiAzMSAtIDEpIHtcbiAgICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih0aGlzLndzLCAnUmVjZWl2ZWQgcGF5bG9hZCBsZW5ndGggPiAyXjMxIGJ5dGVzLicpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsb3dlciA9IGJ1ZmZlci5yZWFkVUludDMyQkUoNClcblxuICAgICAgICB0aGlzLiNpbmZvLnBheWxvYWRMZW5ndGggPSAodXBwZXIgPDwgOCkgKyBsb3dlclxuICAgICAgICB0aGlzLiNzdGF0ZSA9IHBhcnNlclN0YXRlcy5SRUFEX0RBVEFcbiAgICAgIH0gZWxzZSBpZiAodGhpcy4jc3RhdGUgPT09IHBhcnNlclN0YXRlcy5SRUFEX0RBVEEpIHtcbiAgICAgICAgaWYgKHRoaXMuI2J5dGVPZmZzZXQgPCB0aGlzLiNpbmZvLnBheWxvYWRMZW5ndGgpIHtcbiAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBzdGlsbCBtb3JlIGRhdGEgaW4gdGhpcyBjaHVuayB0aGF0IG5lZWRzIHRvIGJlIHJlYWRcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuI2J5dGVPZmZzZXQgPj0gdGhpcy4jaW5mby5wYXlsb2FkTGVuZ3RoKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIHNlcnZlciBzZW50IG11bHRpcGxlIGZyYW1lcyBpbiBhIHNpbmdsZSBjaHVua1xuXG4gICAgICAgICAgY29uc3QgYm9keSA9IHRoaXMuY29uc3VtZSh0aGlzLiNpbmZvLnBheWxvYWRMZW5ndGgpXG5cbiAgICAgICAgICB0aGlzLiNmcmFnbWVudHMucHVzaChib2R5KVxuXG4gICAgICAgICAgLy8gSWYgdGhlIGZyYW1lIGlzIHVuZnJhZ21lbnRlZCwgb3IgYSBmcmFnbWVudGVkIGZyYW1lIHdhcyB0ZXJtaW5hdGVkLFxuICAgICAgICAgIC8vIGEgbWVzc2FnZSB3YXMgcmVjZWl2ZWRcbiAgICAgICAgICBpZiAoIXRoaXMuI2luZm8uZnJhZ21lbnRlZCB8fCAodGhpcy4jaW5mby5maW4gJiYgdGhpcy4jaW5mby5vcGNvZGUgPT09IG9wY29kZXMuQ09OVElOVUFUSU9OKSkge1xuICAgICAgICAgICAgY29uc3QgZnVsbE1lc3NhZ2UgPSBCdWZmZXIuY29uY2F0KHRoaXMuI2ZyYWdtZW50cylcblxuICAgICAgICAgICAgd2Vic29ja2V0TWVzc2FnZVJlY2VpdmVkKHRoaXMud3MsIHRoaXMuI2luZm8ub3JpZ2luYWxPcGNvZGUsIGZ1bGxNZXNzYWdlKVxuXG4gICAgICAgICAgICB0aGlzLiNpbmZvID0ge31cbiAgICAgICAgICAgIHRoaXMuI2ZyYWdtZW50cy5sZW5ndGggPSAwXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy4jc3RhdGUgPSBwYXJzZXJTdGF0ZXMuSU5GT1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLiNieXRlT2Zmc2V0ID4gMCkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2soKVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUYWtlIG4gYnl0ZXMgZnJvbSB0aGUgYnVmZmVyZWQgQnVmZmVyc1xuICAgKiBAcGFyYW0ge251bWJlcn0gblxuICAgKiBAcmV0dXJucyB7QnVmZmVyfG51bGx9XG4gICAqL1xuICBjb25zdW1lIChuKSB7XG4gICAgaWYgKG4gPiB0aGlzLiNieXRlT2Zmc2V0KSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0gZWxzZSBpZiAobiA9PT0gMCkge1xuICAgICAgcmV0dXJuIGVtcHR5QnVmZmVyXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuI2J1ZmZlcnNbMF0ubGVuZ3RoID09PSBuKSB7XG4gICAgICB0aGlzLiNieXRlT2Zmc2V0IC09IHRoaXMuI2J1ZmZlcnNbMF0ubGVuZ3RoXG4gICAgICByZXR1cm4gdGhpcy4jYnVmZmVycy5zaGlmdCgpXG4gICAgfVxuXG4gICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKG4pXG4gICAgbGV0IG9mZnNldCA9IDBcblxuICAgIHdoaWxlIChvZmZzZXQgIT09IG4pIHtcbiAgICAgIGNvbnN0IG5leHQgPSB0aGlzLiNidWZmZXJzWzBdXG4gICAgICBjb25zdCB7IGxlbmd0aCB9ID0gbmV4dFxuXG4gICAgICBpZiAobGVuZ3RoICsgb2Zmc2V0ID09PSBuKSB7XG4gICAgICAgIGJ1ZmZlci5zZXQodGhpcy4jYnVmZmVycy5zaGlmdCgpLCBvZmZzZXQpXG4gICAgICAgIGJyZWFrXG4gICAgICB9IGVsc2UgaWYgKGxlbmd0aCArIG9mZnNldCA+IG4pIHtcbiAgICAgICAgYnVmZmVyLnNldChuZXh0LnN1YmFycmF5KDAsIG4gLSBvZmZzZXQpLCBvZmZzZXQpXG4gICAgICAgIHRoaXMuI2J1ZmZlcnNbMF0gPSBuZXh0LnN1YmFycmF5KG4gLSBvZmZzZXQpXG4gICAgICAgIGJyZWFrXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBidWZmZXIuc2V0KHRoaXMuI2J1ZmZlcnMuc2hpZnQoKSwgb2Zmc2V0KVxuICAgICAgICBvZmZzZXQgKz0gbmV4dC5sZW5ndGhcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLiNieXRlT2Zmc2V0IC09IG5cblxuICAgIHJldHVybiBidWZmZXJcbiAgfVxuXG4gIHBhcnNlQ2xvc2VCb2R5IChvbmx5Q29kZSwgZGF0YSkge1xuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NSNzZWN0aW9uLTcuMS41XG4gICAgLyoqIEB0eXBlIHtudW1iZXJ8dW5kZWZpbmVkfSAqL1xuICAgIGxldCBjb2RlXG5cbiAgICBpZiAoZGF0YS5sZW5ndGggPj0gMikge1xuICAgICAgLy8gX1RoZSBXZWJTb2NrZXQgQ29ubmVjdGlvbiBDbG9zZSBDb2RlXyBpc1xuICAgICAgLy8gZGVmaW5lZCBhcyB0aGUgc3RhdHVzIGNvZGUgKFNlY3Rpb24gNy40KSBjb250YWluZWQgaW4gdGhlIGZpcnN0IENsb3NlXG4gICAgICAvLyBjb250cm9sIGZyYW1lIHJlY2VpdmVkIGJ5IHRoZSBhcHBsaWNhdGlvblxuICAgICAgY29kZSA9IGRhdGEucmVhZFVJbnQxNkJFKDApXG4gICAgfVxuXG4gICAgaWYgKG9ubHlDb2RlKSB7XG4gICAgICBpZiAoIWlzVmFsaWRTdGF0dXNDb2RlKGNvZGUpKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7IGNvZGUgfVxuICAgIH1cblxuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NSNzZWN0aW9uLTcuMS42XG4gICAgLyoqIEB0eXBlIHtCdWZmZXJ9ICovXG4gICAgbGV0IHJlYXNvbiA9IGRhdGEuc3ViYXJyYXkoMilcblxuICAgIC8vIFJlbW92ZSBCT01cbiAgICBpZiAocmVhc29uWzBdID09PSAweEVGICYmIHJlYXNvblsxXSA9PT0gMHhCQiAmJiByZWFzb25bMl0gPT09IDB4QkYpIHtcbiAgICAgIHJlYXNvbiA9IHJlYXNvbi5zdWJhcnJheSgzKVxuICAgIH1cblxuICAgIGlmIChjb2RlICE9PSB1bmRlZmluZWQgJiYgIWlzVmFsaWRTdGF0dXNDb2RlKGNvZGUpKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAvLyBUT0RPOiBvcHRpbWl6ZSB0aGlzXG4gICAgICByZWFzb24gPSBuZXcgVGV4dERlY29kZXIoJ3V0Zi04JywgeyBmYXRhbDogdHJ1ZSB9KS5kZWNvZGUocmVhc29uKVxuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICByZXR1cm4geyBjb2RlLCByZWFzb24gfVxuICB9XG5cbiAgZ2V0IGNsb3NpbmdJbmZvICgpIHtcbiAgICByZXR1cm4gdGhpcy4jaW5mby5jbG9zZUluZm9cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQnl0ZVBhcnNlclxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3dlYmlkbCcpXG5jb25zdCB7IERPTUV4Y2VwdGlvbiB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvY29uc3RhbnRzJylcbmNvbnN0IHsgVVJMU2VyaWFsaXplciB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvZGF0YVVSTCcpXG5jb25zdCB7IGdldEdsb2JhbE9yaWdpbiB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvZ2xvYmFsJylcbmNvbnN0IHsgc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycywgc3RhdGVzLCBvcGNvZGVzLCBlbXB0eUJ1ZmZlciB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3Qge1xuICBrV2ViU29ja2V0VVJMLFxuICBrUmVhZHlTdGF0ZSxcbiAga0NvbnRyb2xsZXIsXG4gIGtCaW5hcnlUeXBlLFxuICBrUmVzcG9uc2UsXG4gIGtTZW50Q2xvc2UsXG4gIGtCeXRlUGFyc2VyXG59ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgaXNFc3RhYmxpc2hlZCwgaXNDbG9zaW5nLCBpc1ZhbGlkU3VicHJvdG9jb2wsIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uLCBmaXJlRXZlbnQgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IGVzdGFibGlzaFdlYlNvY2tldENvbm5lY3Rpb24gfSA9IHJlcXVpcmUoJy4vY29ubmVjdGlvbicpXG5jb25zdCB7IFdlYnNvY2tldEZyYW1lU2VuZCB9ID0gcmVxdWlyZSgnLi9mcmFtZScpXG5jb25zdCB7IEJ5dGVQYXJzZXIgfSA9IHJlcXVpcmUoJy4vcmVjZWl2ZXInKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5LCBpc0Jsb2JMaWtlIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBnZXRHbG9iYWxEaXNwYXRjaGVyIH0gPSByZXF1aXJlKCcuLi9nbG9iYWwnKVxuY29uc3QgeyB0eXBlcyB9ID0gcmVxdWlyZSgndXRpbCcpXG5cbmxldCBleHBlcmltZW50YWxXYXJuZWQgPSBmYWxzZVxuXG4vLyBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNpbnRlcmZhY2UtZGVmaW5pdGlvblxuY2xhc3MgV2ViU29ja2V0IGV4dGVuZHMgRXZlbnRUYXJnZXQge1xuICAjZXZlbnRzID0ge1xuICAgIG9wZW46IG51bGwsXG4gICAgZXJyb3I6IG51bGwsXG4gICAgY2xvc2U6IG51bGwsXG4gICAgbWVzc2FnZTogbnVsbFxuICB9XG5cbiAgI2J1ZmZlcmVkQW1vdW50ID0gMFxuICAjcHJvdG9jb2wgPSAnJ1xuICAjZXh0ZW5zaW9ucyA9ICcnXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAgICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IHByb3RvY29sc1xuICAgKi9cbiAgY29uc3RydWN0b3IgKHVybCwgcHJvdG9jb2xzID0gW10pIHtcbiAgICBzdXBlcigpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnV2ViU29ja2V0IGNvbnN0cnVjdG9yJyB9KVxuXG4gICAgaWYgKCFleHBlcmltZW50YWxXYXJuZWQpIHtcbiAgICAgIGV4cGVyaW1lbnRhbFdhcm5lZCA9IHRydWVcbiAgICAgIHByb2Nlc3MuZW1pdFdhcm5pbmcoJ1dlYlNvY2tldHMgYXJlIGV4cGVyaW1lbnRhbCwgZXhwZWN0IHRoZW0gdG8gY2hhbmdlIGF0IGFueSB0aW1lLicsIHtcbiAgICAgICAgY29kZTogJ1VORElDSS1XUydcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgY29uc3Qgb3B0aW9ucyA9IHdlYmlkbC5jb252ZXJ0ZXJzWydET01TdHJpbmcgb3Igc2VxdWVuY2U8RE9NU3RyaW5nPiBvciBXZWJTb2NrZXRJbml0J10ocHJvdG9jb2xzKVxuXG4gICAgdXJsID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKHVybClcbiAgICBwcm90b2NvbHMgPSBvcHRpb25zLnByb3RvY29sc1xuXG4gICAgLy8gMS4gTGV0IGJhc2VVUkwgYmUgdGhpcydzIHJlbGV2YW50IHNldHRpbmdzIG9iamVjdCdzIEFQSSBiYXNlIFVSTC5cbiAgICBjb25zdCBiYXNlVVJMID0gZ2V0R2xvYmFsT3JpZ2luKClcblxuICAgIC8vIDEuIExldCB1cmxSZWNvcmQgYmUgdGhlIHJlc3VsdCBvZiBhcHBseWluZyB0aGUgVVJMIHBhcnNlciB0byB1cmwgd2l0aCBiYXNlVVJMLlxuICAgIGxldCB1cmxSZWNvcmRcblxuICAgIHRyeSB7XG4gICAgICB1cmxSZWNvcmQgPSBuZXcgVVJMKHVybCwgYmFzZVVSTClcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyAzLiBJZiB1cmxSZWNvcmQgaXMgZmFpbHVyZSwgdGhlbiB0aHJvdyBhIFwiU3ludGF4RXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKGUsICdTeW50YXhFcnJvcicpXG4gICAgfVxuXG4gICAgLy8gNC4gSWYgdXJsUmVjb3Jk4oCZcyBzY2hlbWUgaXMgXCJodHRwXCIsIHRoZW4gc2V0IHVybFJlY29yZOKAmXMgc2NoZW1lIHRvIFwid3NcIi5cbiAgICBpZiAodXJsUmVjb3JkLnByb3RvY29sID09PSAnaHR0cDonKSB7XG4gICAgICB1cmxSZWNvcmQucHJvdG9jb2wgPSAnd3M6J1xuICAgIH0gZWxzZSBpZiAodXJsUmVjb3JkLnByb3RvY29sID09PSAnaHR0cHM6Jykge1xuICAgICAgLy8gNS4gT3RoZXJ3aXNlLCBpZiB1cmxSZWNvcmTigJlzIHNjaGVtZSBpcyBcImh0dHBzXCIsIHNldCB1cmxSZWNvcmTigJlzIHNjaGVtZSB0byBcIndzc1wiLlxuICAgICAgdXJsUmVjb3JkLnByb3RvY29sID0gJ3dzczonXG4gICAgfVxuXG4gICAgLy8gNi4gSWYgdXJsUmVjb3Jk4oCZcyBzY2hlbWUgaXMgbm90IFwid3NcIiBvciBcIndzc1wiLCB0aGVuIHRocm93IGEgXCJTeW50YXhFcnJvclwiIERPTUV4Y2VwdGlvbi5cbiAgICBpZiAodXJsUmVjb3JkLnByb3RvY29sICE9PSAnd3M6JyAmJiB1cmxSZWNvcmQucHJvdG9jb2wgIT09ICd3c3M6Jykge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihcbiAgICAgICAgYEV4cGVjdGVkIGEgd3M6IG9yIHdzczogcHJvdG9jb2wsIGdvdCAke3VybFJlY29yZC5wcm90b2NvbH1gLFxuICAgICAgICAnU3ludGF4RXJyb3InXG4gICAgICApXG4gICAgfVxuXG4gICAgLy8gNy4gSWYgdXJsUmVjb3Jk4oCZcyBmcmFnbWVudCBpcyBub24tbnVsbCwgdGhlbiB0aHJvdyBhIFwiU3ludGF4RXJyb3JcIlxuICAgIC8vICAgIERPTUV4Y2VwdGlvbi5cbiAgICBpZiAodXJsUmVjb3JkLmhhc2ggfHwgdXJsUmVjb3JkLmhyZWYuZW5kc1dpdGgoJyMnKSkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignR290IGZyYWdtZW50JywgJ1N5bnRheEVycm9yJylcbiAgICB9XG5cbiAgICAvLyA4LiBJZiBwcm90b2NvbHMgaXMgYSBzdHJpbmcsIHNldCBwcm90b2NvbHMgdG8gYSBzZXF1ZW5jZSBjb25zaXN0aW5nXG4gICAgLy8gICAgb2YganVzdCB0aGF0IHN0cmluZy5cbiAgICBpZiAodHlwZW9mIHByb3RvY29scyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHByb3RvY29scyA9IFtwcm90b2NvbHNdXG4gICAgfVxuXG4gICAgLy8gOS4gSWYgYW55IG9mIHRoZSB2YWx1ZXMgaW4gcHJvdG9jb2xzIG9jY3VyIG1vcmUgdGhhbiBvbmNlIG9yIG90aGVyd2lzZVxuICAgIC8vICAgIGZhaWwgdG8gbWF0Y2ggdGhlIHJlcXVpcmVtZW50cyBmb3IgZWxlbWVudHMgdGhhdCBjb21wcmlzZSB0aGUgdmFsdWVcbiAgICAvLyAgICBvZiBgU2VjLVdlYlNvY2tldC1Qcm90b2NvbGAgZmllbGRzIGFzIGRlZmluZWQgYnkgVGhlIFdlYlNvY2tldFxuICAgIC8vICAgIHByb3RvY29sLCB0aGVuIHRocm93IGEgXCJTeW50YXhFcnJvclwiIERPTUV4Y2VwdGlvbi5cbiAgICBpZiAocHJvdG9jb2xzLmxlbmd0aCAhPT0gbmV3IFNldChwcm90b2NvbHMubWFwKHAgPT4gcC50b0xvd2VyQ2FzZSgpKSkuc2l6ZSkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignSW52YWxpZCBTZWMtV2ViU29ja2V0LVByb3RvY29sIHZhbHVlJywgJ1N5bnRheEVycm9yJylcbiAgICB9XG5cbiAgICBpZiAocHJvdG9jb2xzLmxlbmd0aCA+IDAgJiYgIXByb3RvY29scy5ldmVyeShwID0+IGlzVmFsaWRTdWJwcm90b2NvbChwKSkpIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oJ0ludmFsaWQgU2VjLVdlYlNvY2tldC1Qcm90b2NvbCB2YWx1ZScsICdTeW50YXhFcnJvcicpXG4gICAgfVxuXG4gICAgLy8gMTAuIFNldCB0aGlzJ3MgdXJsIHRvIHVybFJlY29yZC5cbiAgICB0aGlzW2tXZWJTb2NrZXRVUkxdID0gbmV3IFVSTCh1cmxSZWNvcmQuaHJlZilcblxuICAgIC8vIDExLiBMZXQgY2xpZW50IGJlIHRoaXMncyByZWxldmFudCBzZXR0aW5ncyBvYmplY3QuXG5cbiAgICAvLyAxMi4gUnVuIHRoaXMgc3RlcCBpbiBwYXJhbGxlbDpcblxuICAgIC8vICAgIDEuIEVzdGFibGlzaCBhIFdlYlNvY2tldCBjb25uZWN0aW9uIGdpdmVuIHVybFJlY29yZCwgcHJvdG9jb2xzLFxuICAgIC8vICAgICAgIGFuZCBjbGllbnQuXG4gICAgdGhpc1trQ29udHJvbGxlcl0gPSBlc3RhYmxpc2hXZWJTb2NrZXRDb25uZWN0aW9uKFxuICAgICAgdXJsUmVjb3JkLFxuICAgICAgcHJvdG9jb2xzLFxuICAgICAgdGhpcyxcbiAgICAgIChyZXNwb25zZSkgPT4gdGhpcy4jb25Db25uZWN0aW9uRXN0YWJsaXNoZWQocmVzcG9uc2UpLFxuICAgICAgb3B0aW9uc1xuICAgIClcblxuICAgIC8vIEVhY2ggV2ViU29ja2V0IG9iamVjdCBoYXMgYW4gYXNzb2NpYXRlZCByZWFkeSBzdGF0ZSwgd2hpY2ggaXMgYVxuICAgIC8vIG51bWJlciByZXByZXNlbnRpbmcgdGhlIHN0YXRlIG9mIHRoZSBjb25uZWN0aW9uLiBJbml0aWFsbHkgaXQgbXVzdFxuICAgIC8vIGJlIENPTk5FQ1RJTkcgKDApLlxuICAgIHRoaXNba1JlYWR5U3RhdGVdID0gV2ViU29ja2V0LkNPTk5FQ1RJTkdcblxuICAgIC8vIFRoZSBleHRlbnNpb25zIGF0dHJpYnV0ZSBtdXN0IGluaXRpYWxseSByZXR1cm4gdGhlIGVtcHR5IHN0cmluZy5cblxuICAgIC8vIFRoZSBwcm90b2NvbCBhdHRyaWJ1dGUgbXVzdCBpbml0aWFsbHkgcmV0dXJuIHRoZSBlbXB0eSBzdHJpbmcuXG5cbiAgICAvLyBFYWNoIFdlYlNvY2tldCBvYmplY3QgaGFzIGFuIGFzc29jaWF0ZWQgYmluYXJ5IHR5cGUsIHdoaWNoIGlzIGFcbiAgICAvLyBCaW5hcnlUeXBlLiBJbml0aWFsbHkgaXQgbXVzdCBiZSBcImJsb2JcIi5cbiAgICB0aGlzW2tCaW5hcnlUeXBlXSA9ICdibG9iJ1xuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZG9tLXdlYnNvY2tldC1jbG9zZVxuICAgKiBAcGFyYW0ge251bWJlcnx1bmRlZmluZWR9IGNvZGVcbiAgICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSByZWFzb25cbiAgICovXG4gIGNsb3NlIChjb2RlID0gdW5kZWZpbmVkLCByZWFzb24gPSB1bmRlZmluZWQpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICBpZiAoY29kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb2RlID0gd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIHNob3J0J10oY29kZSwgeyBjbGFtcDogdHJ1ZSB9KVxuICAgIH1cblxuICAgIGlmIChyZWFzb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVhc29uID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKHJlYXNvbilcbiAgICB9XG5cbiAgICAvLyAxLiBJZiBjb2RlIGlzIHByZXNlbnQsIGJ1dCBpcyBuZWl0aGVyIGFuIGludGVnZXIgZXF1YWwgdG8gMTAwMCBub3IgYW5cbiAgICAvLyAgICBpbnRlZ2VyIGluIHRoZSByYW5nZSAzMDAwIHRvIDQ5OTksIGluY2x1c2l2ZSwgdGhyb3cgYW5cbiAgICAvLyAgICBcIkludmFsaWRBY2Nlc3NFcnJvclwiIERPTUV4Y2VwdGlvbi5cbiAgICBpZiAoY29kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoY29kZSAhPT0gMTAwMCAmJiAoY29kZSA8IDMwMDAgfHwgY29kZSA+IDQ5OTkpKSB7XG4gICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oJ2ludmFsaWQgY29kZScsICdJbnZhbGlkQWNjZXNzRXJyb3InKVxuICAgICAgfVxuICAgIH1cblxuICAgIGxldCByZWFzb25CeXRlTGVuZ3RoID0gMFxuXG4gICAgLy8gMi4gSWYgcmVhc29uIGlzIHByZXNlbnQsIHRoZW4gcnVuIHRoZXNlIHN1YnN0ZXBzOlxuICAgIGlmIChyZWFzb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gMS4gTGV0IHJlYXNvbkJ5dGVzIGJlIHRoZSByZXN1bHQgb2YgZW5jb2RpbmcgcmVhc29uLlxuICAgICAgLy8gMi4gSWYgcmVhc29uQnl0ZXMgaXMgbG9uZ2VyIHRoYW4gMTIzIGJ5dGVzLCB0aGVuIHRocm93IGFcbiAgICAgIC8vICAgIFwiU3ludGF4RXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgICByZWFzb25CeXRlTGVuZ3RoID0gQnVmZmVyLmJ5dGVMZW5ndGgocmVhc29uKVxuXG4gICAgICBpZiAocmVhc29uQnl0ZUxlbmd0aCA+IDEyMykge1xuICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKFxuICAgICAgICAgIGBSZWFzb24gbXVzdCBiZSBsZXNzIHRoYW4gMTIzIGJ5dGVzOyByZWNlaXZlZCAke3JlYXNvbkJ5dGVMZW5ndGh9YCxcbiAgICAgICAgICAnU3ludGF4RXJyb3InXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAzLiBSdW4gdGhlIGZpcnN0IG1hdGNoaW5nIHN0ZXBzIGZyb20gdGhlIGZvbGxvd2luZyBsaXN0OlxuICAgIGlmICh0aGlzW2tSZWFkeVN0YXRlXSA9PT0gV2ViU29ja2V0LkNMT1NJTkcgfHwgdGhpc1trUmVhZHlTdGF0ZV0gPT09IFdlYlNvY2tldC5DTE9TRUQpIHtcbiAgICAgIC8vIElmIHRoaXMncyByZWFkeSBzdGF0ZSBpcyBDTE9TSU5HICgyKSBvciBDTE9TRUQgKDMpXG4gICAgICAvLyBEbyBub3RoaW5nLlxuICAgIH0gZWxzZSBpZiAoIWlzRXN0YWJsaXNoZWQodGhpcykpIHtcbiAgICAgIC8vIElmIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBub3QgeWV0IGVzdGFibGlzaGVkXG4gICAgICAvLyBGYWlsIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBhbmQgc2V0IHRoaXMncyByZWFkeSBzdGF0ZVxuICAgICAgLy8gdG8gQ0xPU0lORyAoMikuXG4gICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih0aGlzLCAnQ29ubmVjdGlvbiB3YXMgY2xvc2VkIGJlZm9yZSBpdCB3YXMgZXN0YWJsaXNoZWQuJylcbiAgICAgIHRoaXNba1JlYWR5U3RhdGVdID0gV2ViU29ja2V0LkNMT1NJTkdcbiAgICB9IGVsc2UgaWYgKCFpc0Nsb3NpbmcodGhpcykpIHtcbiAgICAgIC8vIElmIHRoZSBXZWJTb2NrZXQgY2xvc2luZyBoYW5kc2hha2UgaGFzIG5vdCB5ZXQgYmVlbiBzdGFydGVkXG4gICAgICAvLyBTdGFydCB0aGUgV2ViU29ja2V0IGNsb3NpbmcgaGFuZHNoYWtlIGFuZCBzZXQgdGhpcydzIHJlYWR5XG4gICAgICAvLyBzdGF0ZSB0byBDTE9TSU5HICgyKS5cbiAgICAgIC8vIC0gSWYgbmVpdGhlciBjb2RlIG5vciByZWFzb24gaXMgcHJlc2VudCwgdGhlIFdlYlNvY2tldCBDbG9zZVxuICAgICAgLy8gICBtZXNzYWdlIG11c3Qgbm90IGhhdmUgYSBib2R5LlxuICAgICAgLy8gLSBJZiBjb2RlIGlzIHByZXNlbnQsIHRoZW4gdGhlIHN0YXR1cyBjb2RlIHRvIHVzZSBpbiB0aGVcbiAgICAgIC8vICAgV2ViU29ja2V0IENsb3NlIG1lc3NhZ2UgbXVzdCBiZSB0aGUgaW50ZWdlciBnaXZlbiBieSBjb2RlLlxuICAgICAgLy8gLSBJZiByZWFzb24gaXMgYWxzbyBwcmVzZW50LCB0aGVuIHJlYXNvbkJ5dGVzIG11c3QgYmVcbiAgICAgIC8vICAgcHJvdmlkZWQgaW4gdGhlIENsb3NlIG1lc3NhZ2UgYWZ0ZXIgdGhlIHN0YXR1cyBjb2RlLlxuXG4gICAgICBjb25zdCBmcmFtZSA9IG5ldyBXZWJzb2NrZXRGcmFtZVNlbmQoKVxuXG4gICAgICAvLyBJZiBuZWl0aGVyIGNvZGUgbm9yIHJlYXNvbiBpcyBwcmVzZW50LCB0aGUgV2ViU29ja2V0IENsb3NlXG4gICAgICAvLyBtZXNzYWdlIG11c3Qgbm90IGhhdmUgYSBib2R5LlxuXG4gICAgICAvLyBJZiBjb2RlIGlzIHByZXNlbnQsIHRoZW4gdGhlIHN0YXR1cyBjb2RlIHRvIHVzZSBpbiB0aGVcbiAgICAgIC8vIFdlYlNvY2tldCBDbG9zZSBtZXNzYWdlIG11c3QgYmUgdGhlIGludGVnZXIgZ2l2ZW4gYnkgY29kZS5cbiAgICAgIGlmIChjb2RlICE9PSB1bmRlZmluZWQgJiYgcmVhc29uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZnJhbWUuZnJhbWVEYXRhID0gQnVmZmVyLmFsbG9jVW5zYWZlKDIpXG4gICAgICAgIGZyYW1lLmZyYW1lRGF0YS53cml0ZVVJbnQxNkJFKGNvZGUsIDApXG4gICAgICB9IGVsc2UgaWYgKGNvZGUgIT09IHVuZGVmaW5lZCAmJiByZWFzb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBJZiByZWFzb24gaXMgYWxzbyBwcmVzZW50LCB0aGVuIHJlYXNvbkJ5dGVzIG11c3QgYmVcbiAgICAgICAgLy8gcHJvdmlkZWQgaW4gdGhlIENsb3NlIG1lc3NhZ2UgYWZ0ZXIgdGhlIHN0YXR1cyBjb2RlLlxuICAgICAgICBmcmFtZS5mcmFtZURhdGEgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMiArIHJlYXNvbkJ5dGVMZW5ndGgpXG4gICAgICAgIGZyYW1lLmZyYW1lRGF0YS53cml0ZVVJbnQxNkJFKGNvZGUsIDApXG4gICAgICAgIC8vIHRoZSBib2R5IE1BWSBjb250YWluIFVURi04LWVuY29kZWQgZGF0YSB3aXRoIHZhbHVlIC9yZWFzb24vXG4gICAgICAgIGZyYW1lLmZyYW1lRGF0YS53cml0ZShyZWFzb24sIDIsICd1dGYtOCcpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmcmFtZS5mcmFtZURhdGEgPSBlbXB0eUJ1ZmZlclxuICAgICAgfVxuXG4gICAgICAvKiogQHR5cGUge2ltcG9ydCgnc3RyZWFtJykuRHVwbGV4fSAqL1xuICAgICAgY29uc3Qgc29ja2V0ID0gdGhpc1trUmVzcG9uc2VdLnNvY2tldFxuXG4gICAgICBzb2NrZXQud3JpdGUoZnJhbWUuY3JlYXRlRnJhbWUob3Bjb2Rlcy5DTE9TRSksIChlcnIpID0+IHtcbiAgICAgICAgaWYgKCFlcnIpIHtcbiAgICAgICAgICB0aGlzW2tTZW50Q2xvc2VdID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgICAvLyBVcG9uIGVpdGhlciBzZW5kaW5nIG9yIHJlY2VpdmluZyBhIENsb3NlIGNvbnRyb2wgZnJhbWUsIGl0IGlzIHNhaWRcbiAgICAgIC8vIHRoYXQgX1RoZSBXZWJTb2NrZXQgQ2xvc2luZyBIYW5kc2hha2UgaXMgU3RhcnRlZF8gYW5kIHRoYXQgdGhlXG4gICAgICAvLyBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBpbiB0aGUgQ0xPU0lORyBzdGF0ZS5cbiAgICAgIHRoaXNba1JlYWR5U3RhdGVdID0gc3RhdGVzLkNMT1NJTkdcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT3RoZXJ3aXNlXG4gICAgICAvLyBTZXQgdGhpcydzIHJlYWR5IHN0YXRlIHRvIENMT1NJTkcgKDIpLlxuICAgICAgdGhpc1trUmVhZHlTdGF0ZV0gPSBXZWJTb2NrZXQuQ0xPU0lOR1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2RvbS13ZWJzb2NrZXQtc2VuZFxuICAgKiBAcGFyYW0ge05vZGVKUy5UeXBlZEFycmF5fEFycmF5QnVmZmVyfEJsb2J8c3RyaW5nfSBkYXRhXG4gICAqL1xuICBzZW5kIChkYXRhKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ1dlYlNvY2tldC5zZW5kJyB9KVxuXG4gICAgZGF0YSA9IHdlYmlkbC5jb252ZXJ0ZXJzLldlYlNvY2tldFNlbmREYXRhKGRhdGEpXG5cbiAgICAvLyAxLiBJZiB0aGlzJ3MgcmVhZHkgc3RhdGUgaXMgQ09OTkVDVElORywgdGhlbiB0aHJvdyBhblxuICAgIC8vICAgIFwiSW52YWxpZFN0YXRlRXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgaWYgKHRoaXNba1JlYWR5U3RhdGVdID09PSBXZWJTb2NrZXQuQ09OTkVDVElORykge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignU2VudCBiZWZvcmUgY29ubmVjdGVkLicsICdJbnZhbGlkU3RhdGVFcnJvcicpXG4gICAgfVxuXG4gICAgLy8gMi4gUnVuIHRoZSBhcHByb3ByaWF0ZSBzZXQgb2Ygc3RlcHMgZnJvbSB0aGUgZm9sbG93aW5nIGxpc3Q6XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tNi4xXG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tNS4yXG5cbiAgICBpZiAoIWlzRXN0YWJsaXNoZWQodGhpcykgfHwgaXNDbG9zaW5nKHRoaXMpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvKiogQHR5cGUge2ltcG9ydCgnc3RyZWFtJykuRHVwbGV4fSAqL1xuICAgIGNvbnN0IHNvY2tldCA9IHRoaXNba1Jlc3BvbnNlXS5zb2NrZXRcblxuICAgIC8vIElmIGRhdGEgaXMgYSBzdHJpbmdcbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBJZiB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQgYW5kIHRoZSBXZWJTb2NrZXRcbiAgICAgIC8vIGNsb3NpbmcgaGFuZHNoYWtlIGhhcyBub3QgeWV0IHN0YXJ0ZWQsIHRoZW4gdGhlIHVzZXIgYWdlbnRcbiAgICAgIC8vIG11c3Qgc2VuZCBhIFdlYlNvY2tldCBNZXNzYWdlIGNvbXByaXNlZCBvZiB0aGUgZGF0YSBhcmd1bWVudFxuICAgICAgLy8gdXNpbmcgYSB0ZXh0IGZyYW1lIG9wY29kZTsgaWYgdGhlIGRhdGEgY2Fubm90IGJlIHNlbnQsIGUuZy5cbiAgICAgIC8vIGJlY2F1c2UgaXQgd291bGQgbmVlZCB0byBiZSBidWZmZXJlZCBidXQgdGhlIGJ1ZmZlciBpcyBmdWxsLFxuICAgICAgLy8gdGhlIHVzZXIgYWdlbnQgbXVzdCBmbGFnIHRoZSBXZWJTb2NrZXQgYXMgZnVsbCBhbmQgdGhlbiBjbG9zZVxuICAgICAgLy8gdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uLiBBbnkgaW52b2NhdGlvbiBvZiB0aGlzIG1ldGhvZCB3aXRoIGFcbiAgICAgIC8vIHN0cmluZyBhcmd1bWVudCB0aGF0IGRvZXMgbm90IHRocm93IGFuIGV4Y2VwdGlvbiBtdXN0IGluY3JlYXNlXG4gICAgICAvLyB0aGUgYnVmZmVyZWRBbW91bnQgYXR0cmlidXRlIGJ5IHRoZSBudW1iZXIgb2YgYnl0ZXMgbmVlZGVkIHRvXG4gICAgICAvLyBleHByZXNzIHRoZSBhcmd1bWVudCBhcyBVVEYtOC5cblxuICAgICAgY29uc3QgdmFsdWUgPSBCdWZmZXIuZnJvbShkYXRhKVxuICAgICAgY29uc3QgZnJhbWUgPSBuZXcgV2Vic29ja2V0RnJhbWVTZW5kKHZhbHVlKVxuICAgICAgY29uc3QgYnVmZmVyID0gZnJhbWUuY3JlYXRlRnJhbWUob3Bjb2Rlcy5URVhUKVxuXG4gICAgICB0aGlzLiNidWZmZXJlZEFtb3VudCArPSB2YWx1ZS5ieXRlTGVuZ3RoXG4gICAgICBzb2NrZXQud3JpdGUoYnVmZmVyLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuI2J1ZmZlcmVkQW1vdW50IC09IHZhbHVlLmJ5dGVMZW5ndGhcbiAgICAgIH0pXG4gICAgfSBlbHNlIGlmICh0eXBlcy5pc0FycmF5QnVmZmVyKGRhdGEpKSB7XG4gICAgICAvLyBJZiB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQsIGFuZCB0aGUgV2ViU29ja2V0XG4gICAgICAvLyBjbG9zaW5nIGhhbmRzaGFrZSBoYXMgbm90IHlldCBzdGFydGVkLCB0aGVuIHRoZSB1c2VyIGFnZW50IG11c3RcbiAgICAgIC8vIHNlbmQgYSBXZWJTb2NrZXQgTWVzc2FnZSBjb21wcmlzZWQgb2YgZGF0YSB1c2luZyBhIGJpbmFyeSBmcmFtZVxuICAgICAgLy8gb3Bjb2RlOyBpZiB0aGUgZGF0YSBjYW5ub3QgYmUgc2VudCwgZS5nLiBiZWNhdXNlIGl0IHdvdWxkIG5lZWRcbiAgICAgIC8vIHRvIGJlIGJ1ZmZlcmVkIGJ1dCB0aGUgYnVmZmVyIGlzIGZ1bGwsIHRoZSB1c2VyIGFnZW50IG11c3QgZmxhZ1xuICAgICAgLy8gdGhlIFdlYlNvY2tldCBhcyBmdWxsIGFuZCB0aGVuIGNsb3NlIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbi5cbiAgICAgIC8vIFRoZSBkYXRhIHRvIGJlIHNlbnQgaXMgdGhlIGRhdGEgc3RvcmVkIGluIHRoZSBidWZmZXIgZGVzY3JpYmVkXG4gICAgICAvLyBieSB0aGUgQXJyYXlCdWZmZXIgb2JqZWN0LiBBbnkgaW52b2NhdGlvbiBvZiB0aGlzIG1ldGhvZCB3aXRoIGFuXG4gICAgICAvLyBBcnJheUJ1ZmZlciBhcmd1bWVudCB0aGF0IGRvZXMgbm90IHRocm93IGFuIGV4Y2VwdGlvbiBtdXN0XG4gICAgICAvLyBpbmNyZWFzZSB0aGUgYnVmZmVyZWRBbW91bnQgYXR0cmlidXRlIGJ5IHRoZSBsZW5ndGggb2YgdGhlXG4gICAgICAvLyBBcnJheUJ1ZmZlciBpbiBieXRlcy5cblxuICAgICAgY29uc3QgdmFsdWUgPSBCdWZmZXIuZnJvbShkYXRhKVxuICAgICAgY29uc3QgZnJhbWUgPSBuZXcgV2Vic29ja2V0RnJhbWVTZW5kKHZhbHVlKVxuICAgICAgY29uc3QgYnVmZmVyID0gZnJhbWUuY3JlYXRlRnJhbWUob3Bjb2Rlcy5CSU5BUlkpXG5cbiAgICAgIHRoaXMuI2J1ZmZlcmVkQW1vdW50ICs9IHZhbHVlLmJ5dGVMZW5ndGhcbiAgICAgIHNvY2tldC53cml0ZShidWZmZXIsICgpID0+IHtcbiAgICAgICAgdGhpcy4jYnVmZmVyZWRBbW91bnQgLT0gdmFsdWUuYnl0ZUxlbmd0aFxuICAgICAgfSlcbiAgICB9IGVsc2UgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhkYXRhKSkge1xuICAgICAgLy8gSWYgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkLCBhbmQgdGhlIFdlYlNvY2tldFxuICAgICAgLy8gY2xvc2luZyBoYW5kc2hha2UgaGFzIG5vdCB5ZXQgc3RhcnRlZCwgdGhlbiB0aGUgdXNlciBhZ2VudCBtdXN0XG4gICAgICAvLyBzZW5kIGEgV2ViU29ja2V0IE1lc3NhZ2UgY29tcHJpc2VkIG9mIGRhdGEgdXNpbmcgYSBiaW5hcnkgZnJhbWVcbiAgICAgIC8vIG9wY29kZTsgaWYgdGhlIGRhdGEgY2Fubm90IGJlIHNlbnQsIGUuZy4gYmVjYXVzZSBpdCB3b3VsZCBuZWVkIHRvXG4gICAgICAvLyBiZSBidWZmZXJlZCBidXQgdGhlIGJ1ZmZlciBpcyBmdWxsLCB0aGUgdXNlciBhZ2VudCBtdXN0IGZsYWcgdGhlXG4gICAgICAvLyBXZWJTb2NrZXQgYXMgZnVsbCBhbmQgdGhlbiBjbG9zZSB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24uIFRoZVxuICAgICAgLy8gZGF0YSB0byBiZSBzZW50IGlzIHRoZSBkYXRhIHN0b3JlZCBpbiB0aGUgc2VjdGlvbiBvZiB0aGUgYnVmZmVyXG4gICAgICAvLyBkZXNjcmliZWQgYnkgdGhlIEFycmF5QnVmZmVyIG9iamVjdCB0aGF0IGRhdGEgcmVmZXJlbmNlcy4gQW55XG4gICAgICAvLyBpbnZvY2F0aW9uIG9mIHRoaXMgbWV0aG9kIHdpdGggdGhpcyBraW5kIG9mIGFyZ3VtZW50IHRoYXQgZG9lc1xuICAgICAgLy8gbm90IHRocm93IGFuIGV4Y2VwdGlvbiBtdXN0IGluY3JlYXNlIHRoZSBidWZmZXJlZEFtb3VudCBhdHRyaWJ1dGVcbiAgICAgIC8vIGJ5IHRoZSBsZW5ndGggb2YgZGF0YeKAmXMgYnVmZmVyIGluIGJ5dGVzLlxuXG4gICAgICBjb25zdCBhYiA9IEJ1ZmZlci5mcm9tKGRhdGEsIGRhdGEuYnl0ZU9mZnNldCwgZGF0YS5ieXRlTGVuZ3RoKVxuXG4gICAgICBjb25zdCBmcmFtZSA9IG5ldyBXZWJzb2NrZXRGcmFtZVNlbmQoYWIpXG4gICAgICBjb25zdCBidWZmZXIgPSBmcmFtZS5jcmVhdGVGcmFtZShvcGNvZGVzLkJJTkFSWSlcblxuICAgICAgdGhpcy4jYnVmZmVyZWRBbW91bnQgKz0gYWIuYnl0ZUxlbmd0aFxuICAgICAgc29ja2V0LndyaXRlKGJ1ZmZlciwgKCkgPT4ge1xuICAgICAgICB0aGlzLiNidWZmZXJlZEFtb3VudCAtPSBhYi5ieXRlTGVuZ3RoXG4gICAgICB9KVxuICAgIH0gZWxzZSBpZiAoaXNCbG9iTGlrZShkYXRhKSkge1xuICAgICAgLy8gSWYgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkLCBhbmQgdGhlIFdlYlNvY2tldFxuICAgICAgLy8gY2xvc2luZyBoYW5kc2hha2UgaGFzIG5vdCB5ZXQgc3RhcnRlZCwgdGhlbiB0aGUgdXNlciBhZ2VudCBtdXN0XG4gICAgICAvLyBzZW5kIGEgV2ViU29ja2V0IE1lc3NhZ2UgY29tcHJpc2VkIG9mIGRhdGEgdXNpbmcgYSBiaW5hcnkgZnJhbWVcbiAgICAgIC8vIG9wY29kZTsgaWYgdGhlIGRhdGEgY2Fubm90IGJlIHNlbnQsIGUuZy4gYmVjYXVzZSBpdCB3b3VsZCBuZWVkIHRvXG4gICAgICAvLyBiZSBidWZmZXJlZCBidXQgdGhlIGJ1ZmZlciBpcyBmdWxsLCB0aGUgdXNlciBhZ2VudCBtdXN0IGZsYWcgdGhlXG4gICAgICAvLyBXZWJTb2NrZXQgYXMgZnVsbCBhbmQgdGhlbiBjbG9zZSB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24uIFRoZSBkYXRhXG4gICAgICAvLyB0byBiZSBzZW50IGlzIHRoZSByYXcgZGF0YSByZXByZXNlbnRlZCBieSB0aGUgQmxvYiBvYmplY3QuIEFueVxuICAgICAgLy8gaW52b2NhdGlvbiBvZiB0aGlzIG1ldGhvZCB3aXRoIGEgQmxvYiBhcmd1bWVudCB0aGF0IGRvZXMgbm90IHRocm93XG4gICAgICAvLyBhbiBleGNlcHRpb24gbXVzdCBpbmNyZWFzZSB0aGUgYnVmZmVyZWRBbW91bnQgYXR0cmlidXRlIGJ5IHRoZSBzaXplXG4gICAgICAvLyBvZiB0aGUgQmxvYiBvYmplY3TigJlzIHJhdyBkYXRhLCBpbiBieXRlcy5cblxuICAgICAgY29uc3QgZnJhbWUgPSBuZXcgV2Vic29ja2V0RnJhbWVTZW5kKClcblxuICAgICAgZGF0YS5hcnJheUJ1ZmZlcigpLnRoZW4oKGFiKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gQnVmZmVyLmZyb20oYWIpXG4gICAgICAgIGZyYW1lLmZyYW1lRGF0YSA9IHZhbHVlXG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IGZyYW1lLmNyZWF0ZUZyYW1lKG9wY29kZXMuQklOQVJZKVxuXG4gICAgICAgIHRoaXMuI2J1ZmZlcmVkQW1vdW50ICs9IHZhbHVlLmJ5dGVMZW5ndGhcbiAgICAgICAgc29ja2V0LndyaXRlKGJ1ZmZlciwgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuI2J1ZmZlcmVkQW1vdW50IC09IHZhbHVlLmJ5dGVMZW5ndGhcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgZ2V0IHJlYWR5U3RhdGUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIC8vIFRoZSByZWFkeVN0YXRlIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXMncyByZWFkeSBzdGF0ZS5cbiAgICByZXR1cm4gdGhpc1trUmVhZHlTdGF0ZV1cbiAgfVxuXG4gIGdldCBidWZmZXJlZEFtb3VudCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgcmV0dXJuIHRoaXMuI2J1ZmZlcmVkQW1vdW50XG4gIH1cblxuICBnZXQgdXJsICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICAvLyBUaGUgdXJsIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXMncyB1cmwsIHNlcmlhbGl6ZWQuXG4gICAgcmV0dXJuIFVSTFNlcmlhbGl6ZXIodGhpc1trV2ViU29ja2V0VVJMXSlcbiAgfVxuXG4gIGdldCBleHRlbnNpb25zICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXh0ZW5zaW9uc1xuICB9XG5cbiAgZ2V0IHByb3RvY29sICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICByZXR1cm4gdGhpcy4jcHJvdG9jb2xcbiAgfVxuXG4gIGdldCBvbm9wZW4gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIHJldHVybiB0aGlzLiNldmVudHMub3BlblxuICB9XG5cbiAgc2V0IG9ub3BlbiAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICBpZiAodGhpcy4jZXZlbnRzLm9wZW4pIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignb3BlbicsIHRoaXMuI2V2ZW50cy5vcGVuKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5vcGVuID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignb3BlbicsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNldmVudHMub3BlbiA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgb25lcnJvciAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50cy5lcnJvclxuICB9XG5cbiAgc2V0IG9uZXJyb3IgKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgaWYgKHRoaXMuI2V2ZW50cy5lcnJvcikge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuI2V2ZW50cy5lcnJvcilcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLiNldmVudHMuZXJyb3IgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNldmVudHMuZXJyb3IgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgZ2V0IG9uY2xvc2UgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIHJldHVybiB0aGlzLiNldmVudHMuY2xvc2VcbiAgfVxuXG4gIHNldCBvbmNsb3NlIChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIGlmICh0aGlzLiNldmVudHMuY2xvc2UpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xvc2UnLCB0aGlzLiNldmVudHMuY2xvc2UpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy4jZXZlbnRzLmNsb3NlID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignY2xvc2UnLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy4jZXZlbnRzLmNsb3NlID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBvbm1lc3NhZ2UgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIHJldHVybiB0aGlzLiNldmVudHMubWVzc2FnZVxuICB9XG5cbiAgc2V0IG9ubWVzc2FnZSAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICBpZiAodGhpcy4jZXZlbnRzLm1lc3NhZ2UpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHRoaXMuI2V2ZW50cy5tZXNzYWdlKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5tZXNzYWdlID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNldmVudHMubWVzc2FnZSA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgYmluYXJ5VHlwZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgcmV0dXJuIHRoaXNba0JpbmFyeVR5cGVdXG4gIH1cblxuICBzZXQgYmluYXJ5VHlwZSAodHlwZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIGlmICh0eXBlICE9PSAnYmxvYicgJiYgdHlwZSAhPT0gJ2FycmF5YnVmZmVyJykge1xuICAgICAgdGhpc1trQmluYXJ5VHlwZV0gPSAnYmxvYidcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trQmluYXJ5VHlwZV0gPSB0eXBlXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZmVlZGJhY2stZnJvbS10aGUtcHJvdG9jb2xcbiAgICovXG4gICNvbkNvbm5lY3Rpb25Fc3RhYmxpc2hlZCAocmVzcG9uc2UpIHtcbiAgICAvLyBwcm9jZXNzUmVzcG9uc2UgaXMgY2FsbGVkIHdoZW4gdGhlIFwicmVzcG9uc2XigJlzIGhlYWRlciBsaXN0IGhhcyBiZWVuIHJlY2VpdmVkIGFuZCBpbml0aWFsaXplZC5cIlxuICAgIC8vIG9uY2UgdGhpcyBoYXBwZW5zLCB0aGUgY29ubmVjdGlvbiBpcyBvcGVuXG4gICAgdGhpc1trUmVzcG9uc2VdID0gcmVzcG9uc2VcblxuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBCeXRlUGFyc2VyKHRoaXMpXG4gICAgcGFyc2VyLm9uKCdkcmFpbicsIGZ1bmN0aW9uIG9uUGFyc2VyRHJhaW4gKCkge1xuICAgICAgdGhpcy53c1trUmVzcG9uc2VdLnNvY2tldC5yZXN1bWUoKVxuICAgIH0pXG5cbiAgICByZXNwb25zZS5zb2NrZXQud3MgPSB0aGlzXG4gICAgdGhpc1trQnl0ZVBhcnNlcl0gPSBwYXJzZXJcblxuICAgIC8vIDEuIENoYW5nZSB0aGUgcmVhZHkgc3RhdGUgdG8gT1BFTiAoMSkuXG4gICAgdGhpc1trUmVhZHlTdGF0ZV0gPSBzdGF0ZXMuT1BFTlxuXG4gICAgLy8gMi4gQ2hhbmdlIHRoZSBleHRlbnNpb25zIGF0dHJpYnV0ZeKAmXMgdmFsdWUgdG8gdGhlIGV4dGVuc2lvbnMgaW4gdXNlLCBpZlxuICAgIC8vICAgIGl0IGlzIG5vdCB0aGUgbnVsbCB2YWx1ZS5cbiAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzY0NTUjc2VjdGlvbi05LjFcbiAgICBjb25zdCBleHRlbnNpb25zID0gcmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdzZWMtd2Vic29ja2V0LWV4dGVuc2lvbnMnKVxuXG4gICAgaWYgKGV4dGVuc2lvbnMgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuI2V4dGVuc2lvbnMgPSBleHRlbnNpb25zXG4gICAgfVxuXG4gICAgLy8gMy4gQ2hhbmdlIHRoZSBwcm90b2NvbCBhdHRyaWJ1dGXigJlzIHZhbHVlIHRvIHRoZSBzdWJwcm90b2NvbCBpbiB1c2UsIGlmXG4gICAgLy8gICAgaXQgaXMgbm90IHRoZSBudWxsIHZhbHVlLlxuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NSNzZWN0aW9uLTEuOVxuICAgIGNvbnN0IHByb3RvY29sID0gcmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdzZWMtd2Vic29ja2V0LXByb3RvY29sJylcblxuICAgIGlmIChwcm90b2NvbCAhPT0gbnVsbCkge1xuICAgICAgdGhpcy4jcHJvdG9jb2wgPSBwcm90b2NvbFxuICAgIH1cblxuICAgIC8vIDQuIEZpcmUgYW4gZXZlbnQgbmFtZWQgb3BlbiBhdCB0aGUgV2ViU29ja2V0IG9iamVjdC5cbiAgICBmaXJlRXZlbnQoJ29wZW4nLCB0aGlzKVxuICB9XG59XG5cbi8vIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2RvbS13ZWJzb2NrZXQtY29ubmVjdGluZ1xuV2ViU29ja2V0LkNPTk5FQ1RJTkcgPSBXZWJTb2NrZXQucHJvdG90eXBlLkNPTk5FQ1RJTkcgPSBzdGF0ZXMuQ09OTkVDVElOR1xuLy8gaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZG9tLXdlYnNvY2tldC1vcGVuXG5XZWJTb2NrZXQuT1BFTiA9IFdlYlNvY2tldC5wcm90b3R5cGUuT1BFTiA9IHN0YXRlcy5PUEVOXG4vLyBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNkb20td2Vic29ja2V0LWNsb3NpbmdcbldlYlNvY2tldC5DTE9TSU5HID0gV2ViU29ja2V0LnByb3RvdHlwZS5DTE9TSU5HID0gc3RhdGVzLkNMT1NJTkdcbi8vIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2RvbS13ZWJzb2NrZXQtY2xvc2VkXG5XZWJTb2NrZXQuQ0xPU0VEID0gV2ViU29ja2V0LnByb3RvdHlwZS5DTE9TRUQgPSBzdGF0ZXMuQ0xPU0VEXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFdlYlNvY2tldC5wcm90b3R5cGUsIHtcbiAgQ09OTkVDVElORzogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgT1BFTjogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgQ0xPU0lORzogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgQ0xPU0VEOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICB1cmw6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlYWR5U3RhdGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGJ1ZmZlcmVkQW1vdW50OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbm9wZW46IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9uZXJyb3I6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9uY2xvc2U6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNsb3NlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbm1lc3NhZ2U6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGJpbmFyeVR5cGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHNlbmQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGV4dGVuc2lvbnM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHByb3RvY29sOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnV2ViU29ja2V0JyxcbiAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH1cbn0pXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFdlYlNvY2tldCwge1xuICBDT05ORUNUSU5HOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBPUEVOOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBDTE9TSU5HOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBDTE9TRUQ6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnNcbn0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxET01TdHJpbmc+J10gPSB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZ1xuKVxuXG53ZWJpZGwuY29udmVydGVyc1snRE9NU3RyaW5nIG9yIHNlcXVlbmNlPERPTVN0cmluZz4nXSA9IGZ1bmN0aW9uIChWKSB7XG4gIGlmICh3ZWJpZGwudXRpbC5UeXBlKFYpID09PSAnT2JqZWN0JyAmJiBTeW1ib2wuaXRlcmF0b3IgaW4gVikge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8RE9NU3RyaW5nPiddKFYpXG4gIH1cblxuICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKFYpXG59XG5cbi8vIFRoaXMgaW1wbGVtZW50cyB0aGUgcHJvcHNhbCBtYWRlIGluIGh0dHBzOi8vZ2l0aHViLmNvbS93aGF0d2cvd2Vic29ja2V0cy9pc3N1ZXMvNDJcbndlYmlkbC5jb252ZXJ0ZXJzLldlYlNvY2tldEluaXQgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIHtcbiAgICBrZXk6ICdwcm90b2NvbHMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ0RPTVN0cmluZyBvciBzZXF1ZW5jZTxET01TdHJpbmc+J10sXG4gICAgZ2V0IGRlZmF1bHRWYWx1ZSAoKSB7XG4gICAgICByZXR1cm4gW11cbiAgICB9XG4gIH0sXG4gIHtcbiAgICBrZXk6ICdkaXNwYXRjaGVyJyxcbiAgICBjb252ZXJ0ZXI6IChWKSA9PiBWLFxuICAgIGdldCBkZWZhdWx0VmFsdWUgKCkge1xuICAgICAgcmV0dXJuIGdldEdsb2JhbERpc3BhdGNoZXIoKVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGtleTogJ2hlYWRlcnMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzLkhlYWRlcnNJbml0KVxuICB9XG5dKVxuXG53ZWJpZGwuY29udmVydGVyc1snRE9NU3RyaW5nIG9yIHNlcXVlbmNlPERPTVN0cmluZz4gb3IgV2ViU29ja2V0SW5pdCddID0gZnVuY3Rpb24gKFYpIHtcbiAgaWYgKHdlYmlkbC51dGlsLlR5cGUoVikgPT09ICdPYmplY3QnICYmICEoU3ltYm9sLml0ZXJhdG9yIGluIFYpKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLldlYlNvY2tldEluaXQoVilcbiAgfVxuXG4gIHJldHVybiB7IHByb3RvY29sczogd2ViaWRsLmNvbnZlcnRlcnNbJ0RPTVN0cmluZyBvciBzZXF1ZW5jZTxET01TdHJpbmc+J10oVikgfVxufVxuXG53ZWJpZGwuY29udmVydGVycy5XZWJTb2NrZXRTZW5kRGF0YSA9IGZ1bmN0aW9uIChWKSB7XG4gIGlmICh3ZWJpZGwudXRpbC5UeXBlKFYpID09PSAnT2JqZWN0Jykge1xuICAgIGlmIChpc0Jsb2JMaWtlKFYpKSB7XG4gICAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuQmxvYihWLCB7IHN0cmljdDogZmFsc2UgfSlcbiAgICB9XG5cbiAgICBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KFYpIHx8IHR5cGVzLmlzQW55QXJyYXlCdWZmZXIoVikpIHtcbiAgICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5CdWZmZXJTb3VyY2UoVilcbiAgICB9XG4gIH1cblxuICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKFYpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBXZWJTb2NrZXRcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IENsaWVudCA9IHJlcXVpcmUoJy4vbGliL2NsaWVudCcpXG5jb25zdCBEaXNwYXRjaGVyID0gcmVxdWlyZSgnLi9saWIvZGlzcGF0Y2hlcicpXG5jb25zdCBlcnJvcnMgPSByZXF1aXJlKCcuL2xpYi9jb3JlL2Vycm9ycycpXG5jb25zdCBQb29sID0gcmVxdWlyZSgnLi9saWIvcG9vbCcpXG5jb25zdCBCYWxhbmNlZFBvb2wgPSByZXF1aXJlKCcuL2xpYi9iYWxhbmNlZC1wb29sJylcbmNvbnN0IEFnZW50ID0gcmVxdWlyZSgnLi9saWIvYWdlbnQnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4vbGliL2NvcmUvdXRpbCcpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gPSBlcnJvcnNcbmNvbnN0IGFwaSA9IHJlcXVpcmUoJy4vbGliL2FwaScpXG5jb25zdCBidWlsZENvbm5lY3RvciA9IHJlcXVpcmUoJy4vbGliL2NvcmUvY29ubmVjdCcpXG5jb25zdCBNb2NrQ2xpZW50ID0gcmVxdWlyZSgnLi9saWIvbW9jay9tb2NrLWNsaWVudCcpXG5jb25zdCBNb2NrQWdlbnQgPSByZXF1aXJlKCcuL2xpYi9tb2NrL21vY2stYWdlbnQnKVxuY29uc3QgTW9ja1Bvb2wgPSByZXF1aXJlKCcuL2xpYi9tb2NrL21vY2stcG9vbCcpXG5jb25zdCBtb2NrRXJyb3JzID0gcmVxdWlyZSgnLi9saWIvbW9jay9tb2NrLWVycm9ycycpXG5jb25zdCBQcm94eUFnZW50ID0gcmVxdWlyZSgnLi9saWIvcHJveHktYWdlbnQnKVxuY29uc3QgUmV0cnlIYW5kbGVyID0gcmVxdWlyZSgnLi9saWIvaGFuZGxlci9SZXRyeUhhbmRsZXInKVxuY29uc3QgeyBnZXRHbG9iYWxEaXNwYXRjaGVyLCBzZXRHbG9iYWxEaXNwYXRjaGVyIH0gPSByZXF1aXJlKCcuL2xpYi9nbG9iYWwnKVxuY29uc3QgRGVjb3JhdG9ySGFuZGxlciA9IHJlcXVpcmUoJy4vbGliL2hhbmRsZXIvRGVjb3JhdG9ySGFuZGxlcicpXG5jb25zdCBSZWRpcmVjdEhhbmRsZXIgPSByZXF1aXJlKCcuL2xpYi9oYW5kbGVyL1JlZGlyZWN0SGFuZGxlcicpXG5jb25zdCBjcmVhdGVSZWRpcmVjdEludGVyY2VwdG9yID0gcmVxdWlyZSgnLi9saWIvaW50ZXJjZXB0b3IvcmVkaXJlY3RJbnRlcmNlcHRvcicpXG5cbmxldCBoYXNDcnlwdG9cbnRyeSB7XG4gIHJlcXVpcmUoJ2NyeXB0bycpXG4gIGhhc0NyeXB0byA9IHRydWVcbn0gY2F0Y2gge1xuICBoYXNDcnlwdG8gPSBmYWxzZVxufVxuXG5PYmplY3QuYXNzaWduKERpc3BhdGNoZXIucHJvdG90eXBlLCBhcGkpXG5cbm1vZHVsZS5leHBvcnRzLkRpc3BhdGNoZXIgPSBEaXNwYXRjaGVyXG5tb2R1bGUuZXhwb3J0cy5DbGllbnQgPSBDbGllbnRcbm1vZHVsZS5leHBvcnRzLlBvb2wgPSBQb29sXG5tb2R1bGUuZXhwb3J0cy5CYWxhbmNlZFBvb2wgPSBCYWxhbmNlZFBvb2xcbm1vZHVsZS5leHBvcnRzLkFnZW50ID0gQWdlbnRcbm1vZHVsZS5leHBvcnRzLlByb3h5QWdlbnQgPSBQcm94eUFnZW50XG5tb2R1bGUuZXhwb3J0cy5SZXRyeUhhbmRsZXIgPSBSZXRyeUhhbmRsZXJcblxubW9kdWxlLmV4cG9ydHMuRGVjb3JhdG9ySGFuZGxlciA9IERlY29yYXRvckhhbmRsZXJcbm1vZHVsZS5leHBvcnRzLlJlZGlyZWN0SGFuZGxlciA9IFJlZGlyZWN0SGFuZGxlclxubW9kdWxlLmV4cG9ydHMuY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvciA9IGNyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3JcblxubW9kdWxlLmV4cG9ydHMuYnVpbGRDb25uZWN0b3IgPSBidWlsZENvbm5lY3RvclxubW9kdWxlLmV4cG9ydHMuZXJyb3JzID0gZXJyb3JzXG5cbmZ1bmN0aW9uIG1ha2VEaXNwYXRjaGVyIChmbikge1xuICByZXR1cm4gKHVybCwgb3B0cywgaGFuZGxlcikgPT4ge1xuICAgIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaGFuZGxlciA9IG9wdHNcbiAgICAgIG9wdHMgPSBudWxsXG4gICAgfVxuXG4gICAgaWYgKCF1cmwgfHwgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnICYmIHR5cGVvZiB1cmwgIT09ICdvYmplY3QnICYmICEodXJsIGluc3RhbmNlb2YgVVJMKSkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCB1cmwnKVxuICAgIH1cblxuICAgIGlmIChvcHRzICE9IG51bGwgJiYgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb3B0cycpXG4gICAgfVxuXG4gICAgaWYgKG9wdHMgJiYgb3B0cy5wYXRoICE9IG51bGwpIHtcbiAgICAgIGlmICh0eXBlb2Ygb3B0cy5wYXRoICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb3B0cy5wYXRoJylcbiAgICAgIH1cblxuICAgICAgbGV0IHBhdGggPSBvcHRzLnBhdGhcbiAgICAgIGlmICghb3B0cy5wYXRoLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgICBwYXRoID0gYC8ke3BhdGh9YFxuICAgICAgfVxuXG4gICAgICB1cmwgPSBuZXcgVVJMKHV0aWwucGFyc2VPcmlnaW4odXJsKS5vcmlnaW4gKyBwYXRoKVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIW9wdHMpIHtcbiAgICAgICAgb3B0cyA9IHR5cGVvZiB1cmwgPT09ICdvYmplY3QnID8gdXJsIDoge31cbiAgICAgIH1cblxuICAgICAgdXJsID0gdXRpbC5wYXJzZVVSTCh1cmwpXG4gICAgfVxuXG4gICAgY29uc3QgeyBhZ2VudCwgZGlzcGF0Y2hlciA9IGdldEdsb2JhbERpc3BhdGNoZXIoKSB9ID0gb3B0c1xuXG4gICAgaWYgKGFnZW50KSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3Vuc3VwcG9ydGVkIG9wdHMuYWdlbnQuIERpZCB5b3UgbWVhbiBvcHRzLmNsaWVudD8nKVxuICAgIH1cblxuICAgIHJldHVybiBmbi5jYWxsKGRpc3BhdGNoZXIsIHtcbiAgICAgIC4uLm9wdHMsXG4gICAgICBvcmlnaW46IHVybC5vcmlnaW4sXG4gICAgICBwYXRoOiB1cmwuc2VhcmNoID8gYCR7dXJsLnBhdGhuYW1lfSR7dXJsLnNlYXJjaH1gIDogdXJsLnBhdGhuYW1lLFxuICAgICAgbWV0aG9kOiBvcHRzLm1ldGhvZCB8fCAob3B0cy5ib2R5ID8gJ1BVVCcgOiAnR0VUJylcbiAgICB9LCBoYW5kbGVyKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzLnNldEdsb2JhbERpc3BhdGNoZXIgPSBzZXRHbG9iYWxEaXNwYXRjaGVyXG5tb2R1bGUuZXhwb3J0cy5nZXRHbG9iYWxEaXNwYXRjaGVyID0gZ2V0R2xvYmFsRGlzcGF0Y2hlclxuXG5pZiAodXRpbC5ub2RlTWFqb3IgPiAxNiB8fCAodXRpbC5ub2RlTWFqb3IgPT09IDE2ICYmIHV0aWwubm9kZU1pbm9yID49IDgpKSB7XG4gIGxldCBmZXRjaEltcGwgPSBudWxsXG4gIG1vZHVsZS5leHBvcnRzLmZldGNoID0gYXN5bmMgZnVuY3Rpb24gZmV0Y2ggKHJlc291cmNlKSB7XG4gICAgaWYgKCFmZXRjaEltcGwpIHtcbiAgICAgIGZldGNoSW1wbCA9IHJlcXVpcmUoJy4vbGliL2ZldGNoJykuZmV0Y2hcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGZldGNoSW1wbCguLi5hcmd1bWVudHMpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAodHlwZW9mIGVyciA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoZXJyLCB0aGlzKVxuICAgICAgfVxuXG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gIH1cbiAgbW9kdWxlLmV4cG9ydHMuSGVhZGVycyA9IHJlcXVpcmUoJy4vbGliL2ZldGNoL2hlYWRlcnMnKS5IZWFkZXJzXG4gIG1vZHVsZS5leHBvcnRzLlJlc3BvbnNlID0gcmVxdWlyZSgnLi9saWIvZmV0Y2gvcmVzcG9uc2UnKS5SZXNwb25zZVxuICBtb2R1bGUuZXhwb3J0cy5SZXF1ZXN0ID0gcmVxdWlyZSgnLi9saWIvZmV0Y2gvcmVxdWVzdCcpLlJlcXVlc3RcbiAgbW9kdWxlLmV4cG9ydHMuRm9ybURhdGEgPSByZXF1aXJlKCcuL2xpYi9mZXRjaC9mb3JtZGF0YScpLkZvcm1EYXRhXG4gIG1vZHVsZS5leHBvcnRzLkZpbGUgPSByZXF1aXJlKCcuL2xpYi9mZXRjaC9maWxlJykuRmlsZVxuICBtb2R1bGUuZXhwb3J0cy5GaWxlUmVhZGVyID0gcmVxdWlyZSgnLi9saWIvZmlsZWFwaS9maWxlcmVhZGVyJykuRmlsZVJlYWRlclxuXG4gIGNvbnN0IHsgc2V0R2xvYmFsT3JpZ2luLCBnZXRHbG9iYWxPcmlnaW4gfSA9IHJlcXVpcmUoJy4vbGliL2ZldGNoL2dsb2JhbCcpXG5cbiAgbW9kdWxlLmV4cG9ydHMuc2V0R2xvYmFsT3JpZ2luID0gc2V0R2xvYmFsT3JpZ2luXG4gIG1vZHVsZS5leHBvcnRzLmdldEdsb2JhbE9yaWdpbiA9IGdldEdsb2JhbE9yaWdpblxuXG4gIGNvbnN0IHsgQ2FjaGVTdG9yYWdlIH0gPSByZXF1aXJlKCcuL2xpYi9jYWNoZS9jYWNoZXN0b3JhZ2UnKVxuICBjb25zdCB7IGtDb25zdHJ1Y3QgfSA9IHJlcXVpcmUoJy4vbGliL2NhY2hlL3N5bWJvbHMnKVxuXG4gIC8vIENhY2hlICYgQ2FjaGVTdG9yYWdlIGFyZSB0aWdodGx5IGNvdXBsZWQgd2l0aCBmZXRjaC4gRXZlbiBpZiBpdCBtYXkgcnVuXG4gIC8vIGluIGFuIG9sZGVyIHZlcnNpb24gb2YgTm9kZSwgaXQgZG9lc24ndCBoYXZlIGFueSB1c2Ugd2l0aG91dCBmZXRjaC5cbiAgbW9kdWxlLmV4cG9ydHMuY2FjaGVzID0gbmV3IENhY2hlU3RvcmFnZShrQ29uc3RydWN0KVxufVxuXG5pZiAodXRpbC5ub2RlTWFqb3IgPj0gMTYpIHtcbiAgY29uc3QgeyBkZWxldGVDb29raWUsIGdldENvb2tpZXMsIGdldFNldENvb2tpZXMsIHNldENvb2tpZSB9ID0gcmVxdWlyZSgnLi9saWIvY29va2llcycpXG5cbiAgbW9kdWxlLmV4cG9ydHMuZGVsZXRlQ29va2llID0gZGVsZXRlQ29va2llXG4gIG1vZHVsZS5leHBvcnRzLmdldENvb2tpZXMgPSBnZXRDb29raWVzXG4gIG1vZHVsZS5leHBvcnRzLmdldFNldENvb2tpZXMgPSBnZXRTZXRDb29raWVzXG4gIG1vZHVsZS5leHBvcnRzLnNldENvb2tpZSA9IHNldENvb2tpZVxuXG4gIGNvbnN0IHsgcGFyc2VNSU1FVHlwZSwgc2VyaWFsaXplQU1pbWVUeXBlIH0gPSByZXF1aXJlKCcuL2xpYi9mZXRjaC9kYXRhVVJMJylcblxuICBtb2R1bGUuZXhwb3J0cy5wYXJzZU1JTUVUeXBlID0gcGFyc2VNSU1FVHlwZVxuICBtb2R1bGUuZXhwb3J0cy5zZXJpYWxpemVBTWltZVR5cGUgPSBzZXJpYWxpemVBTWltZVR5cGVcbn1cblxuaWYgKHV0aWwubm9kZU1ham9yID49IDE4ICYmIGhhc0NyeXB0bykge1xuICBjb25zdCB7IFdlYlNvY2tldCB9ID0gcmVxdWlyZSgnLi9saWIvd2Vic29ja2V0L3dlYnNvY2tldCcpXG5cbiAgbW9kdWxlLmV4cG9ydHMuV2ViU29ja2V0ID0gV2ViU29ja2V0XG59XG5cbm1vZHVsZS5leHBvcnRzLnJlcXVlc3QgPSBtYWtlRGlzcGF0Y2hlcihhcGkucmVxdWVzdClcbm1vZHVsZS5leHBvcnRzLnN0cmVhbSA9IG1ha2VEaXNwYXRjaGVyKGFwaS5zdHJlYW0pXG5tb2R1bGUuZXhwb3J0cy5waXBlbGluZSA9IG1ha2VEaXNwYXRjaGVyKGFwaS5waXBlbGluZSlcbm1vZHVsZS5leHBvcnRzLmNvbm5lY3QgPSBtYWtlRGlzcGF0Y2hlcihhcGkuY29ubmVjdClcbm1vZHVsZS5leHBvcnRzLnVwZ3JhZGUgPSBtYWtlRGlzcGF0Y2hlcihhcGkudXBncmFkZSlcblxubW9kdWxlLmV4cG9ydHMuTW9ja0NsaWVudCA9IE1vY2tDbGllbnRcbm1vZHVsZS5leHBvcnRzLk1vY2tQb29sID0gTW9ja1Bvb2xcbm1vZHVsZS5leHBvcnRzLk1vY2tBZ2VudCA9IE1vY2tBZ2VudFxubW9kdWxlLmV4cG9ydHMubW9ja0Vycm9ycyA9IG1vY2tFcnJvcnNcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5IdHRwQ2xpZW50ID0gZXhwb3J0cy5pc0h0dHBzID0gZXhwb3J0cy5IdHRwQ2xpZW50UmVzcG9uc2UgPSBleHBvcnRzLkh0dHBDbGllbnRFcnJvciA9IGV4cG9ydHMuZ2V0UHJveHlVcmwgPSBleHBvcnRzLk1lZGlhVHlwZXMgPSBleHBvcnRzLkhlYWRlcnMgPSBleHBvcnRzLkh0dHBDb2RlcyA9IHZvaWQgMDtcbmNvbnN0IGh0dHAgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcImh0dHBcIikpO1xuY29uc3QgaHR0cHMgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcImh0dHBzXCIpKTtcbmNvbnN0IHBtID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL3Byb3h5XCIpKTtcbmNvbnN0IHR1bm5lbCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwidHVubmVsXCIpKTtcbmNvbnN0IHVuZGljaV8xID0gcmVxdWlyZShcInVuZGljaVwiKTtcbnZhciBIdHRwQ29kZXM7XG4oZnVuY3Rpb24gKEh0dHBDb2Rlcykge1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJPS1wiXSA9IDIwMF0gPSBcIk9LXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIk11bHRpcGxlQ2hvaWNlc1wiXSA9IDMwMF0gPSBcIk11bHRpcGxlQ2hvaWNlc1wiO1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJNb3ZlZFBlcm1hbmVudGx5XCJdID0gMzAxXSA9IFwiTW92ZWRQZXJtYW5lbnRseVwiO1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJSZXNvdXJjZU1vdmVkXCJdID0gMzAyXSA9IFwiUmVzb3VyY2VNb3ZlZFwiO1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJTZWVPdGhlclwiXSA9IDMwM10gPSBcIlNlZU90aGVyXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIk5vdE1vZGlmaWVkXCJdID0gMzA0XSA9IFwiTm90TW9kaWZpZWRcIjtcbiAgICBIdHRwQ29kZXNbSHR0cENvZGVzW1wiVXNlUHJveHlcIl0gPSAzMDVdID0gXCJVc2VQcm94eVwiO1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJTd2l0Y2hQcm94eVwiXSA9IDMwNl0gPSBcIlN3aXRjaFByb3h5XCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIlRlbXBvcmFyeVJlZGlyZWN0XCJdID0gMzA3XSA9IFwiVGVtcG9yYXJ5UmVkaXJlY3RcIjtcbiAgICBIdHRwQ29kZXNbSHR0cENvZGVzW1wiUGVybWFuZW50UmVkaXJlY3RcIl0gPSAzMDhdID0gXCJQZXJtYW5lbnRSZWRpcmVjdFwiO1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJCYWRSZXF1ZXN0XCJdID0gNDAwXSA9IFwiQmFkUmVxdWVzdFwiO1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJVbmF1dGhvcml6ZWRcIl0gPSA0MDFdID0gXCJVbmF1dGhvcml6ZWRcIjtcbiAgICBIdHRwQ29kZXNbSHR0cENvZGVzW1wiUGF5bWVudFJlcXVpcmVkXCJdID0gNDAyXSA9IFwiUGF5bWVudFJlcXVpcmVkXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIkZvcmJpZGRlblwiXSA9IDQwM10gPSBcIkZvcmJpZGRlblwiO1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJOb3RGb3VuZFwiXSA9IDQwNF0gPSBcIk5vdEZvdW5kXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIk1ldGhvZE5vdEFsbG93ZWRcIl0gPSA0MDVdID0gXCJNZXRob2ROb3RBbGxvd2VkXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIk5vdEFjY2VwdGFibGVcIl0gPSA0MDZdID0gXCJOb3RBY2NlcHRhYmxlXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIlByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZFwiXSA9IDQwN10gPSBcIlByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZFwiO1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJSZXF1ZXN0VGltZW91dFwiXSA9IDQwOF0gPSBcIlJlcXVlc3RUaW1lb3V0XCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIkNvbmZsaWN0XCJdID0gNDA5XSA9IFwiQ29uZmxpY3RcIjtcbiAgICBIdHRwQ29kZXNbSHR0cENvZGVzW1wiR29uZVwiXSA9IDQxMF0gPSBcIkdvbmVcIjtcbiAgICBIdHRwQ29kZXNbSHR0cENvZGVzW1wiVG9vTWFueVJlcXVlc3RzXCJdID0gNDI5XSA9IFwiVG9vTWFueVJlcXVlc3RzXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIkludGVybmFsU2VydmVyRXJyb3JcIl0gPSA1MDBdID0gXCJJbnRlcm5hbFNlcnZlckVycm9yXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIk5vdEltcGxlbWVudGVkXCJdID0gNTAxXSA9IFwiTm90SW1wbGVtZW50ZWRcIjtcbiAgICBIdHRwQ29kZXNbSHR0cENvZGVzW1wiQmFkR2F0ZXdheVwiXSA9IDUwMl0gPSBcIkJhZEdhdGV3YXlcIjtcbiAgICBIdHRwQ29kZXNbSHR0cENvZGVzW1wiU2VydmljZVVuYXZhaWxhYmxlXCJdID0gNTAzXSA9IFwiU2VydmljZVVuYXZhaWxhYmxlXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIkdhdGV3YXlUaW1lb3V0XCJdID0gNTA0XSA9IFwiR2F0ZXdheVRpbWVvdXRcIjtcbn0pKEh0dHBDb2RlcyB8fCAoZXhwb3J0cy5IdHRwQ29kZXMgPSBIdHRwQ29kZXMgPSB7fSkpO1xudmFyIEhlYWRlcnM7XG4oZnVuY3Rpb24gKEhlYWRlcnMpIHtcbiAgICBIZWFkZXJzW1wiQWNjZXB0XCJdID0gXCJhY2NlcHRcIjtcbiAgICBIZWFkZXJzW1wiQ29udGVudFR5cGVcIl0gPSBcImNvbnRlbnQtdHlwZVwiO1xufSkoSGVhZGVycyB8fCAoZXhwb3J0cy5IZWFkZXJzID0gSGVhZGVycyA9IHt9KSk7XG52YXIgTWVkaWFUeXBlcztcbihmdW5jdGlvbiAoTWVkaWFUeXBlcykge1xuICAgIE1lZGlhVHlwZXNbXCJBcHBsaWNhdGlvbkpzb25cIl0gPSBcImFwcGxpY2F0aW9uL2pzb25cIjtcbn0pKE1lZGlhVHlwZXMgfHwgKGV4cG9ydHMuTWVkaWFUeXBlcyA9IE1lZGlhVHlwZXMgPSB7fSkpO1xuLyoqXG4gKiBSZXR1cm5zIHRoZSBwcm94eSBVUkwsIGRlcGVuZGluZyB1cG9uIHRoZSBzdXBwbGllZCB1cmwgYW5kIHByb3h5IGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiAqIEBwYXJhbSBzZXJ2ZXJVcmwgIFRoZSBzZXJ2ZXIgVVJMIHdoZXJlIHRoZSByZXF1ZXN0IHdpbGwgYmUgc2VudC4gRm9yIGV4YW1wbGUsIGh0dHBzOi8vYXBpLmdpdGh1Yi5jb21cbiAqL1xuZnVuY3Rpb24gZ2V0UHJveHlVcmwoc2VydmVyVXJsKSB7XG4gICAgY29uc3QgcHJveHlVcmwgPSBwbS5nZXRQcm94eVVybChuZXcgVVJMKHNlcnZlclVybCkpO1xuICAgIHJldHVybiBwcm94eVVybCA/IHByb3h5VXJsLmhyZWYgOiAnJztcbn1cbmV4cG9ydHMuZ2V0UHJveHlVcmwgPSBnZXRQcm94eVVybDtcbmNvbnN0IEh0dHBSZWRpcmVjdENvZGVzID0gW1xuICAgIEh0dHBDb2Rlcy5Nb3ZlZFBlcm1hbmVudGx5LFxuICAgIEh0dHBDb2Rlcy5SZXNvdXJjZU1vdmVkLFxuICAgIEh0dHBDb2Rlcy5TZWVPdGhlcixcbiAgICBIdHRwQ29kZXMuVGVtcG9yYXJ5UmVkaXJlY3QsXG4gICAgSHR0cENvZGVzLlBlcm1hbmVudFJlZGlyZWN0XG5dO1xuY29uc3QgSHR0cFJlc3BvbnNlUmV0cnlDb2RlcyA9IFtcbiAgICBIdHRwQ29kZXMuQmFkR2F0ZXdheSxcbiAgICBIdHRwQ29kZXMuU2VydmljZVVuYXZhaWxhYmxlLFxuICAgIEh0dHBDb2Rlcy5HYXRld2F5VGltZW91dFxuXTtcbmNvbnN0IFJldHJ5YWJsZUh0dHBWZXJicyA9IFsnT1BUSU9OUycsICdHRVQnLCAnREVMRVRFJywgJ0hFQUQnXTtcbmNvbnN0IEV4cG9uZW50aWFsQmFja29mZkNlaWxpbmcgPSAxMDtcbmNvbnN0IEV4cG9uZW50aWFsQmFja29mZlRpbWVTbGljZSA9IDU7XG5jbGFzcyBIdHRwQ2xpZW50RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZSwgc3RhdHVzQ29kZSkge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5uYW1lID0gJ0h0dHBDbGllbnRFcnJvcic7XG4gICAgICAgIHRoaXMuc3RhdHVzQ29kZSA9IHN0YXR1c0NvZGU7XG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBIdHRwQ2xpZW50RXJyb3IucHJvdG90eXBlKTtcbiAgICB9XG59XG5leHBvcnRzLkh0dHBDbGllbnRFcnJvciA9IEh0dHBDbGllbnRFcnJvcjtcbmNsYXNzIEh0dHBDbGllbnRSZXNwb25zZSB7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZSkge1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIH1cbiAgICByZWFkQm9keSgpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgIGxldCBvdXRwdXQgPSBCdWZmZXIuYWxsb2MoMCk7XG4gICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlLm9uKCdkYXRhJywgKGNodW5rKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IEJ1ZmZlci5jb25jYXQoW291dHB1dCwgY2h1bmtdKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2Uub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShvdXRwdXQudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZWFkQm9keUJ1ZmZlcigpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNodW5rcyA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZS5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjaHVua3MucHVzaChjaHVuayk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoQnVmZmVyLmNvbmNhdChjaHVua3MpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0cy5IdHRwQ2xpZW50UmVzcG9uc2UgPSBIdHRwQ2xpZW50UmVzcG9uc2U7XG5mdW5jdGlvbiBpc0h0dHBzKHJlcXVlc3RVcmwpIHtcbiAgICBjb25zdCBwYXJzZWRVcmwgPSBuZXcgVVJMKHJlcXVlc3RVcmwpO1xuICAgIHJldHVybiBwYXJzZWRVcmwucHJvdG9jb2wgPT09ICdodHRwczonO1xufVxuZXhwb3J0cy5pc0h0dHBzID0gaXNIdHRwcztcbmNsYXNzIEh0dHBDbGllbnQge1xuICAgIGNvbnN0cnVjdG9yKHVzZXJBZ2VudCwgaGFuZGxlcnMsIHJlcXVlc3RPcHRpb25zKSB7XG4gICAgICAgIHRoaXMuX2lnbm9yZVNzbEVycm9yID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2FsbG93UmVkaXJlY3RzID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fYWxsb3dSZWRpcmVjdERvd25ncmFkZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9tYXhSZWRpcmVjdHMgPSA1MDtcbiAgICAgICAgdGhpcy5fYWxsb3dSZXRyaWVzID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX21heFJldHJpZXMgPSAxO1xuICAgICAgICB0aGlzLl9rZWVwQWxpdmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fZGlzcG9zZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy51c2VyQWdlbnQgPSB1c2VyQWdlbnQ7XG4gICAgICAgIHRoaXMuaGFuZGxlcnMgPSBoYW5kbGVycyB8fCBbXTtcbiAgICAgICAgdGhpcy5yZXF1ZXN0T3B0aW9ucyA9IHJlcXVlc3RPcHRpb25zO1xuICAgICAgICBpZiAocmVxdWVzdE9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChyZXF1ZXN0T3B0aW9ucy5pZ25vcmVTc2xFcnJvciAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5faWdub3JlU3NsRXJyb3IgPSByZXF1ZXN0T3B0aW9ucy5pZ25vcmVTc2xFcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3NvY2tldFRpbWVvdXQgPSByZXF1ZXN0T3B0aW9ucy5zb2NrZXRUaW1lb3V0O1xuICAgICAgICAgICAgaWYgKHJlcXVlc3RPcHRpb25zLmFsbG93UmVkaXJlY3RzICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hbGxvd1JlZGlyZWN0cyA9IHJlcXVlc3RPcHRpb25zLmFsbG93UmVkaXJlY3RzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlcXVlc3RPcHRpb25zLmFsbG93UmVkaXJlY3REb3duZ3JhZGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FsbG93UmVkaXJlY3REb3duZ3JhZGUgPSByZXF1ZXN0T3B0aW9ucy5hbGxvd1JlZGlyZWN0RG93bmdyYWRlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlcXVlc3RPcHRpb25zLm1heFJlZGlyZWN0cyAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWF4UmVkaXJlY3RzID0gTWF0aC5tYXgocmVxdWVzdE9wdGlvbnMubWF4UmVkaXJlY3RzLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXF1ZXN0T3B0aW9ucy5rZWVwQWxpdmUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2tlZXBBbGl2ZSA9IHJlcXVlc3RPcHRpb25zLmtlZXBBbGl2ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXF1ZXN0T3B0aW9ucy5hbGxvd1JldHJpZXMgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FsbG93UmV0cmllcyA9IHJlcXVlc3RPcHRpb25zLmFsbG93UmV0cmllcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXF1ZXN0T3B0aW9ucy5tYXhSZXRyaWVzICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXhSZXRyaWVzID0gcmVxdWVzdE9wdGlvbnMubWF4UmV0cmllcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBvcHRpb25zKHJlcXVlc3RVcmwsIGFkZGl0aW9uYWxIZWFkZXJzKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KCdPUFRJT05TJywgcmVxdWVzdFVybCwgbnVsbCwgYWRkaXRpb25hbEhlYWRlcnMgfHwge30pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZ2V0KHJlcXVlc3RVcmwsIGFkZGl0aW9uYWxIZWFkZXJzKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KCdHRVQnLCByZXF1ZXN0VXJsLCBudWxsLCBhZGRpdGlvbmFsSGVhZGVycyB8fCB7fSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBkZWwocmVxdWVzdFVybCwgYWRkaXRpb25hbEhlYWRlcnMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QoJ0RFTEVURScsIHJlcXVlc3RVcmwsIG51bGwsIGFkZGl0aW9uYWxIZWFkZXJzIHx8IHt9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHBvc3QocmVxdWVzdFVybCwgZGF0YSwgYWRkaXRpb25hbEhlYWRlcnMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QoJ1BPU1QnLCByZXF1ZXN0VXJsLCBkYXRhLCBhZGRpdGlvbmFsSGVhZGVycyB8fCB7fSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwYXRjaChyZXF1ZXN0VXJsLCBkYXRhLCBhZGRpdGlvbmFsSGVhZGVycykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdCgnUEFUQ0gnLCByZXF1ZXN0VXJsLCBkYXRhLCBhZGRpdGlvbmFsSGVhZGVycyB8fCB7fSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwdXQocmVxdWVzdFVybCwgZGF0YSwgYWRkaXRpb25hbEhlYWRlcnMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QoJ1BVVCcsIHJlcXVlc3RVcmwsIGRhdGEsIGFkZGl0aW9uYWxIZWFkZXJzIHx8IHt9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGhlYWQocmVxdWVzdFVybCwgYWRkaXRpb25hbEhlYWRlcnMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QoJ0hFQUQnLCByZXF1ZXN0VXJsLCBudWxsLCBhZGRpdGlvbmFsSGVhZGVycyB8fCB7fSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBzZW5kU3RyZWFtKHZlcmIsIHJlcXVlc3RVcmwsIHN0cmVhbSwgYWRkaXRpb25hbEhlYWRlcnMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QodmVyYiwgcmVxdWVzdFVybCwgc3RyZWFtLCBhZGRpdGlvbmFsSGVhZGVycyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXRzIGEgdHlwZWQgb2JqZWN0IGZyb20gYW4gZW5kcG9pbnRcbiAgICAgKiBCZSBhd2FyZSB0aGF0IG5vdCBmb3VuZCByZXR1cm5zIGEgbnVsbC4gIE90aGVyIGVycm9ycyAoNHh4LCA1eHgpIHJlamVjdCB0aGUgcHJvbWlzZVxuICAgICAqL1xuICAgIGdldEpzb24ocmVxdWVzdFVybCwgYWRkaXRpb25hbEhlYWRlcnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgYWRkaXRpb25hbEhlYWRlcnNbSGVhZGVycy5BY2NlcHRdID0gdGhpcy5fZ2V0RXhpc3RpbmdPckRlZmF1bHRIZWFkZXIoYWRkaXRpb25hbEhlYWRlcnMsIEhlYWRlcnMuQWNjZXB0LCBNZWRpYVR5cGVzLkFwcGxpY2F0aW9uSnNvbik7XG4gICAgICAgICAgICBjb25zdCByZXMgPSB5aWVsZCB0aGlzLmdldChyZXF1ZXN0VXJsLCBhZGRpdGlvbmFsSGVhZGVycyk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJvY2Vzc1Jlc3BvbnNlKHJlcywgdGhpcy5yZXF1ZXN0T3B0aW9ucyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwb3N0SnNvbihyZXF1ZXN0VXJsLCBvYmosIGFkZGl0aW9uYWxIZWFkZXJzID0ge30pIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnN0cmluZ2lmeShvYmosIG51bGwsIDIpO1xuICAgICAgICAgICAgYWRkaXRpb25hbEhlYWRlcnNbSGVhZGVycy5BY2NlcHRdID0gdGhpcy5fZ2V0RXhpc3RpbmdPckRlZmF1bHRIZWFkZXIoYWRkaXRpb25hbEhlYWRlcnMsIEhlYWRlcnMuQWNjZXB0LCBNZWRpYVR5cGVzLkFwcGxpY2F0aW9uSnNvbik7XG4gICAgICAgICAgICBhZGRpdGlvbmFsSGVhZGVyc1tIZWFkZXJzLkNvbnRlbnRUeXBlXSA9IHRoaXMuX2dldEV4aXN0aW5nT3JEZWZhdWx0SGVhZGVyKGFkZGl0aW9uYWxIZWFkZXJzLCBIZWFkZXJzLkNvbnRlbnRUeXBlLCBNZWRpYVR5cGVzLkFwcGxpY2F0aW9uSnNvbik7XG4gICAgICAgICAgICBjb25zdCByZXMgPSB5aWVsZCB0aGlzLnBvc3QocmVxdWVzdFVybCwgZGF0YSwgYWRkaXRpb25hbEhlYWRlcnMpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2Nlc3NSZXNwb25zZShyZXMsIHRoaXMucmVxdWVzdE9wdGlvbnMpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcHV0SnNvbihyZXF1ZXN0VXJsLCBvYmosIGFkZGl0aW9uYWxIZWFkZXJzID0ge30pIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnN0cmluZ2lmeShvYmosIG51bGwsIDIpO1xuICAgICAgICAgICAgYWRkaXRpb25hbEhlYWRlcnNbSGVhZGVycy5BY2NlcHRdID0gdGhpcy5fZ2V0RXhpc3RpbmdPckRlZmF1bHRIZWFkZXIoYWRkaXRpb25hbEhlYWRlcnMsIEhlYWRlcnMuQWNjZXB0LCBNZWRpYVR5cGVzLkFwcGxpY2F0aW9uSnNvbik7XG4gICAgICAgICAgICBhZGRpdGlvbmFsSGVhZGVyc1tIZWFkZXJzLkNvbnRlbnRUeXBlXSA9IHRoaXMuX2dldEV4aXN0aW5nT3JEZWZhdWx0SGVhZGVyKGFkZGl0aW9uYWxIZWFkZXJzLCBIZWFkZXJzLkNvbnRlbnRUeXBlLCBNZWRpYVR5cGVzLkFwcGxpY2F0aW9uSnNvbik7XG4gICAgICAgICAgICBjb25zdCByZXMgPSB5aWVsZCB0aGlzLnB1dChyZXF1ZXN0VXJsLCBkYXRhLCBhZGRpdGlvbmFsSGVhZGVycyk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJvY2Vzc1Jlc3BvbnNlKHJlcywgdGhpcy5yZXF1ZXN0T3B0aW9ucyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwYXRjaEpzb24ocmVxdWVzdFVybCwgb2JqLCBhZGRpdGlvbmFsSGVhZGVycyA9IHt9KSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gSlNPTi5zdHJpbmdpZnkob2JqLCBudWxsLCAyKTtcbiAgICAgICAgICAgIGFkZGl0aW9uYWxIZWFkZXJzW0hlYWRlcnMuQWNjZXB0XSA9IHRoaXMuX2dldEV4aXN0aW5nT3JEZWZhdWx0SGVhZGVyKGFkZGl0aW9uYWxIZWFkZXJzLCBIZWFkZXJzLkFjY2VwdCwgTWVkaWFUeXBlcy5BcHBsaWNhdGlvbkpzb24pO1xuICAgICAgICAgICAgYWRkaXRpb25hbEhlYWRlcnNbSGVhZGVycy5Db250ZW50VHlwZV0gPSB0aGlzLl9nZXRFeGlzdGluZ09yRGVmYXVsdEhlYWRlcihhZGRpdGlvbmFsSGVhZGVycywgSGVhZGVycy5Db250ZW50VHlwZSwgTWVkaWFUeXBlcy5BcHBsaWNhdGlvbkpzb24pO1xuICAgICAgICAgICAgY29uc3QgcmVzID0geWllbGQgdGhpcy5wYXRjaChyZXF1ZXN0VXJsLCBkYXRhLCBhZGRpdGlvbmFsSGVhZGVycyk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJvY2Vzc1Jlc3BvbnNlKHJlcywgdGhpcy5yZXF1ZXN0T3B0aW9ucyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBNYWtlcyBhIHJhdyBodHRwIHJlcXVlc3QuXG4gICAgICogQWxsIG90aGVyIG1ldGhvZHMgc3VjaCBhcyBnZXQsIHBvc3QsIHBhdGNoLCBhbmQgcmVxdWVzdCB1bHRpbWF0ZWx5IGNhbGwgdGhpcy5cbiAgICAgKiBQcmVmZXIgZ2V0LCBkZWwsIHBvc3QgYW5kIHBhdGNoXG4gICAgICovXG4gICAgcmVxdWVzdCh2ZXJiLCByZXF1ZXN0VXJsLCBkYXRhLCBoZWFkZXJzKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NsaWVudCBoYXMgYWxyZWFkeSBiZWVuIGRpc3Bvc2VkLicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcGFyc2VkVXJsID0gbmV3IFVSTChyZXF1ZXN0VXJsKTtcbiAgICAgICAgICAgIGxldCBpbmZvID0gdGhpcy5fcHJlcGFyZVJlcXVlc3QodmVyYiwgcGFyc2VkVXJsLCBoZWFkZXJzKTtcbiAgICAgICAgICAgIC8vIE9ubHkgcGVyZm9ybSByZXRyaWVzIG9uIHJlYWRzIHNpbmNlIHdyaXRlcyBtYXkgbm90IGJlIGlkZW1wb3RlbnQuXG4gICAgICAgICAgICBjb25zdCBtYXhUcmllcyA9IHRoaXMuX2FsbG93UmV0cmllcyAmJiBSZXRyeWFibGVIdHRwVmVyYnMuaW5jbHVkZXModmVyYilcbiAgICAgICAgICAgICAgICA/IHRoaXMuX21heFJldHJpZXMgKyAxXG4gICAgICAgICAgICAgICAgOiAxO1xuICAgICAgICAgICAgbGV0IG51bVRyaWVzID0gMDtcbiAgICAgICAgICAgIGxldCByZXNwb25zZTtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZSA9IHlpZWxkIHRoaXMucmVxdWVzdFJhdyhpbmZvLCBkYXRhKTtcbiAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiBpdCdzIGFuIGF1dGhlbnRpY2F0aW9uIGNoYWxsZW5nZVxuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZSAmJlxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5tZXNzYWdlICYmXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLm1lc3NhZ2Uuc3RhdHVzQ29kZSA9PT0gSHR0cENvZGVzLlVuYXV0aG9yaXplZCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgYXV0aGVudGljYXRpb25IYW5kbGVyO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGhhbmRsZXIgb2YgdGhpcy5oYW5kbGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZXIuY2FuSGFuZGxlQXV0aGVudGljYXRpb24ocmVzcG9uc2UpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aGVudGljYXRpb25IYW5kbGVyID0gaGFuZGxlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoYXV0aGVudGljYXRpb25IYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXV0aGVudGljYXRpb25IYW5kbGVyLmhhbmRsZUF1dGhlbnRpY2F0aW9uKHRoaXMsIGluZm8sIGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSByZWNlaXZlZCBhbiB1bmF1dGhvcml6ZWQgcmVzcG9uc2UgYnV0IGhhdmUgbm8gaGFuZGxlcnMgdG8gaGFuZGxlIGl0LlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gTGV0IHRoZSByZXNwb25zZSByZXR1cm4gdG8gdGhlIGNhbGxlci5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgcmVkaXJlY3RzUmVtYWluaW5nID0gdGhpcy5fbWF4UmVkaXJlY3RzO1xuICAgICAgICAgICAgICAgIHdoaWxlIChyZXNwb25zZS5tZXNzYWdlLnN0YXR1c0NvZGUgJiZcbiAgICAgICAgICAgICAgICAgICAgSHR0cFJlZGlyZWN0Q29kZXMuaW5jbHVkZXMocmVzcG9uc2UubWVzc2FnZS5zdGF0dXNDb2RlKSAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hbGxvd1JlZGlyZWN0cyAmJlxuICAgICAgICAgICAgICAgICAgICByZWRpcmVjdHNSZW1haW5pbmcgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZGlyZWN0VXJsID0gcmVzcG9uc2UubWVzc2FnZS5oZWFkZXJzWydsb2NhdGlvbiddO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXJlZGlyZWN0VXJsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGVyZSdzIG5vIGxvY2F0aW9uIHRvIHJlZGlyZWN0IHRvLCB3ZSB3b24ndFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkUmVkaXJlY3RVcmwgPSBuZXcgVVJMKHJlZGlyZWN0VXJsKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlZFVybC5wcm90b2NvbCA9PT0gJ2h0dHBzOicgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZFVybC5wcm90b2NvbCAhPT0gcGFyc2VkUmVkaXJlY3RVcmwucHJvdG9jb2wgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICF0aGlzLl9hbGxvd1JlZGlyZWN0RG93bmdyYWRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlZGlyZWN0IGZyb20gSFRUUFMgdG8gSFRUUCBwcm90b2NvbC4gVGhpcyBkb3duZ3JhZGUgaXMgbm90IGFsbG93ZWQgZm9yIHNlY3VyaXR5IHJlYXNvbnMuIElmIHlvdSB3YW50IHRvIGFsbG93IHRoaXMgYmVoYXZpb3IsIHNldCB0aGUgYWxsb3dSZWRpcmVjdERvd25ncmFkZSBvcHRpb24gdG8gdHJ1ZS4nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIGZpbmlzaCByZWFkaW5nIHRoZSByZXNwb25zZSBiZWZvcmUgcmVhc3NpZ25pbmcgcmVzcG9uc2VcbiAgICAgICAgICAgICAgICAgICAgLy8gd2hpY2ggd2lsbCBsZWFrIHRoZSBvcGVuIHNvY2tldC5cbiAgICAgICAgICAgICAgICAgICAgeWllbGQgcmVzcG9uc2UucmVhZEJvZHkoKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gc3RyaXAgYXV0aG9yaXphdGlvbiBoZWFkZXIgaWYgcmVkaXJlY3RlZCB0byBhIGRpZmZlcmVudCBob3N0bmFtZVxuICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VkUmVkaXJlY3RVcmwuaG9zdG5hbWUgIT09IHBhcnNlZFVybC5ob3N0bmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBoZWFkZXIgaW4gaGVhZGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhlYWRlciBuYW1lcyBhcmUgY2FzZSBpbnNlbnNpdGl2ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoZWFkZXIudG9Mb3dlckNhc2UoKSA9PT0gJ2F1dGhvcml6YXRpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBoZWFkZXJzW2hlYWRlcl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIGxldCdzIG1ha2UgdGhlIHJlcXVlc3Qgd2l0aCB0aGUgbmV3IHJlZGlyZWN0VXJsXG4gICAgICAgICAgICAgICAgICAgIGluZm8gPSB0aGlzLl9wcmVwYXJlUmVxdWVzdCh2ZXJiLCBwYXJzZWRSZWRpcmVjdFVybCwgaGVhZGVycyk7XG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0geWllbGQgdGhpcy5yZXF1ZXN0UmF3KGluZm8sIGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICByZWRpcmVjdHNSZW1haW5pbmctLTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5tZXNzYWdlLnN0YXR1c0NvZGUgfHxcbiAgICAgICAgICAgICAgICAgICAgIUh0dHBSZXNwb25zZVJldHJ5Q29kZXMuaW5jbHVkZXMocmVzcG9uc2UubWVzc2FnZS5zdGF0dXNDb2RlKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBJZiBub3QgYSByZXRyeSBjb2RlLCByZXR1cm4gaW1tZWRpYXRlbHkgaW5zdGVhZCBvZiByZXRyeWluZ1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG51bVRyaWVzICs9IDE7XG4gICAgICAgICAgICAgICAgaWYgKG51bVRyaWVzIDwgbWF4VHJpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgcmVzcG9uc2UucmVhZEJvZHkoKTtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgdGhpcy5fcGVyZm9ybUV4cG9uZW50aWFsQmFja29mZihudW1Ucmllcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSB3aGlsZSAobnVtVHJpZXMgPCBtYXhUcmllcyk7XG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBOZWVkcyB0byBiZSBjYWxsZWQgaWYga2VlcEFsaXZlIGlzIHNldCB0byB0cnVlIGluIHJlcXVlc3Qgb3B0aW9ucy5cbiAgICAgKi9cbiAgICBkaXNwb3NlKCkge1xuICAgICAgICBpZiAodGhpcy5fYWdlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX2FnZW50LmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9kaXNwb3NlZCA9IHRydWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJhdyByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBpbmZvXG4gICAgICogQHBhcmFtIGRhdGFcbiAgICAgKi9cbiAgICByZXF1ZXN0UmF3KGluZm8sIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2tGb3JSZXN1bHQoZXJyLCByZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIXJlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgYGVycmAgaXMgbm90IHBhc3NlZCwgdGhlbiBgcmVzYCBtdXN0IGJlIHBhc3NlZC5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ1Vua25vd24gZXJyb3InKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5yZXF1ZXN0UmF3V2l0aENhbGxiYWNrKGluZm8sIGRhdGEsIGNhbGxiYWNrRm9yUmVzdWx0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmF3IHJlcXVlc3Qgd2l0aCBjYWxsYmFjay5cbiAgICAgKiBAcGFyYW0gaW5mb1xuICAgICAqIEBwYXJhbSBkYXRhXG4gICAgICogQHBhcmFtIG9uUmVzdWx0XG4gICAgICovXG4gICAgcmVxdWVzdFJhd1dpdGhDYWxsYmFjayhpbmZvLCBkYXRhLCBvblJlc3VsdCkge1xuICAgICAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBpZiAoIWluZm8ub3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgICAgICAgICAgICAgaW5mby5vcHRpb25zLmhlYWRlcnMgPSB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGluZm8ub3B0aW9ucy5oZWFkZXJzWydDb250ZW50LUxlbmd0aCddID0gQnVmZmVyLmJ5dGVMZW5ndGgoZGF0YSwgJ3V0ZjgnKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgY2FsbGJhY2tDYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgZnVuY3Rpb24gaGFuZGxlUmVzdWx0KGVyciwgcmVzKSB7XG4gICAgICAgICAgICBpZiAoIWNhbGxiYWNrQ2FsbGVkKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2tDYWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIG9uUmVzdWx0KGVyciwgcmVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXEgPSBpbmZvLmh0dHBNb2R1bGUucmVxdWVzdChpbmZvLm9wdGlvbnMsIChtc2cpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IG5ldyBIdHRwQ2xpZW50UmVzcG9uc2UobXNnKTtcbiAgICAgICAgICAgIGhhbmRsZVJlc3VsdCh1bmRlZmluZWQsIHJlcyk7XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgc29ja2V0O1xuICAgICAgICByZXEub24oJ3NvY2tldCcsIHNvY2sgPT4ge1xuICAgICAgICAgICAgc29ja2V0ID0gc29jaztcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIElmIHdlIGV2ZXIgZ2V0IGRpc2Nvbm5lY3RlZCwgd2Ugd2FudCB0aGUgc29ja2V0IHRvIHRpbWVvdXQgZXZlbnR1YWxseVxuICAgICAgICByZXEuc2V0VGltZW91dCh0aGlzLl9zb2NrZXRUaW1lb3V0IHx8IDMgKiA2MDAwMCwgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHNvY2tldCkge1xuICAgICAgICAgICAgICAgIHNvY2tldC5lbmQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGhhbmRsZVJlc3VsdChuZXcgRXJyb3IoYFJlcXVlc3QgdGltZW91dDogJHtpbmZvLm9wdGlvbnMucGF0aH1gKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXEub24oJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgLy8gZXJyIGhhcyBzdGF0dXNDb2RlIHByb3BlcnR5XG4gICAgICAgICAgICAvLyByZXMgc2hvdWxkIGhhdmUgaGVhZGVyc1xuICAgICAgICAgICAgaGFuZGxlUmVzdWx0KGVycik7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoZGF0YSAmJiB0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJlcS53cml0ZShkYXRhLCAndXRmOCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRhICYmIHR5cGVvZiBkYXRhICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZGF0YS5vbignY2xvc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmVxLmVuZCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBkYXRhLnBpcGUocmVxKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlcS5lbmQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXRzIGFuIGh0dHAgYWdlbnQuIFRoaXMgZnVuY3Rpb24gaXMgdXNlZnVsIHdoZW4geW91IG5lZWQgYW4gaHR0cCBhZ2VudCB0aGF0IGhhbmRsZXNcbiAgICAgKiByb3V0aW5nIHRocm91Z2ggYSBwcm94eSBzZXJ2ZXIgLSBkZXBlbmRpbmcgdXBvbiB0aGUgdXJsIGFuZCBwcm94eSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG4gICAgICogQHBhcmFtIHNlcnZlclVybCAgVGhlIHNlcnZlciBVUkwgd2hlcmUgdGhlIHJlcXVlc3Qgd2lsbCBiZSBzZW50LiBGb3IgZXhhbXBsZSwgaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbVxuICAgICAqL1xuICAgIGdldEFnZW50KHNlcnZlclVybCkge1xuICAgICAgICBjb25zdCBwYXJzZWRVcmwgPSBuZXcgVVJMKHNlcnZlclVybCk7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRBZ2VudChwYXJzZWRVcmwpO1xuICAgIH1cbiAgICBnZXRBZ2VudERpc3BhdGNoZXIoc2VydmVyVXJsKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFVybCA9IG5ldyBVUkwoc2VydmVyVXJsKTtcbiAgICAgICAgY29uc3QgcHJveHlVcmwgPSBwbS5nZXRQcm94eVVybChwYXJzZWRVcmwpO1xuICAgICAgICBjb25zdCB1c2VQcm94eSA9IHByb3h5VXJsICYmIHByb3h5VXJsLmhvc3RuYW1lO1xuICAgICAgICBpZiAoIXVzZVByb3h5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldFByb3h5QWdlbnREaXNwYXRjaGVyKHBhcnNlZFVybCwgcHJveHlVcmwpO1xuICAgIH1cbiAgICBfcHJlcGFyZVJlcXVlc3QobWV0aG9kLCByZXF1ZXN0VXJsLCBoZWFkZXJzKSB7XG4gICAgICAgIGNvbnN0IGluZm8gPSB7fTtcbiAgICAgICAgaW5mby5wYXJzZWRVcmwgPSByZXF1ZXN0VXJsO1xuICAgICAgICBjb25zdCB1c2luZ1NzbCA9IGluZm8ucGFyc2VkVXJsLnByb3RvY29sID09PSAnaHR0cHM6JztcbiAgICAgICAgaW5mby5odHRwTW9kdWxlID0gdXNpbmdTc2wgPyBodHRwcyA6IGh0dHA7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRQb3J0ID0gdXNpbmdTc2wgPyA0NDMgOiA4MDtcbiAgICAgICAgaW5mby5vcHRpb25zID0ge307XG4gICAgICAgIGluZm8ub3B0aW9ucy5ob3N0ID0gaW5mby5wYXJzZWRVcmwuaG9zdG5hbWU7XG4gICAgICAgIGluZm8ub3B0aW9ucy5wb3J0ID0gaW5mby5wYXJzZWRVcmwucG9ydFxuICAgICAgICAgICAgPyBwYXJzZUludChpbmZvLnBhcnNlZFVybC5wb3J0KVxuICAgICAgICAgICAgOiBkZWZhdWx0UG9ydDtcbiAgICAgICAgaW5mby5vcHRpb25zLnBhdGggPVxuICAgICAgICAgICAgKGluZm8ucGFyc2VkVXJsLnBhdGhuYW1lIHx8ICcnKSArIChpbmZvLnBhcnNlZFVybC5zZWFyY2ggfHwgJycpO1xuICAgICAgICBpbmZvLm9wdGlvbnMubWV0aG9kID0gbWV0aG9kO1xuICAgICAgICBpbmZvLm9wdGlvbnMuaGVhZGVycyA9IHRoaXMuX21lcmdlSGVhZGVycyhoZWFkZXJzKTtcbiAgICAgICAgaWYgKHRoaXMudXNlckFnZW50ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGluZm8ub3B0aW9ucy5oZWFkZXJzWyd1c2VyLWFnZW50J10gPSB0aGlzLnVzZXJBZ2VudDtcbiAgICAgICAgfVxuICAgICAgICBpbmZvLm9wdGlvbnMuYWdlbnQgPSB0aGlzLl9nZXRBZ2VudChpbmZvLnBhcnNlZFVybCk7XG4gICAgICAgIC8vIGdpdmVzIGhhbmRsZXJzIGFuIG9wcG9ydHVuaXR5IHRvIHBhcnRpY2lwYXRlXG4gICAgICAgIGlmICh0aGlzLmhhbmRsZXJzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGhhbmRsZXIgb2YgdGhpcy5oYW5kbGVycykge1xuICAgICAgICAgICAgICAgIGhhbmRsZXIucHJlcGFyZVJlcXVlc3QoaW5mby5vcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5mbztcbiAgICB9XG4gICAgX21lcmdlSGVhZGVycyhoZWFkZXJzKSB7XG4gICAgICAgIGlmICh0aGlzLnJlcXVlc3RPcHRpb25zICYmIHRoaXMucmVxdWVzdE9wdGlvbnMuaGVhZGVycykge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGxvd2VyY2FzZUtleXModGhpcy5yZXF1ZXN0T3B0aW9ucy5oZWFkZXJzKSwgbG93ZXJjYXNlS2V5cyhoZWFkZXJzIHx8IHt9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvd2VyY2FzZUtleXMoaGVhZGVycyB8fCB7fSk7XG4gICAgfVxuICAgIF9nZXRFeGlzdGluZ09yRGVmYXVsdEhlYWRlcihhZGRpdGlvbmFsSGVhZGVycywgaGVhZGVyLCBfZGVmYXVsdCkge1xuICAgICAgICBsZXQgY2xpZW50SGVhZGVyO1xuICAgICAgICBpZiAodGhpcy5yZXF1ZXN0T3B0aW9ucyAmJiB0aGlzLnJlcXVlc3RPcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgICAgICAgIGNsaWVudEhlYWRlciA9IGxvd2VyY2FzZUtleXModGhpcy5yZXF1ZXN0T3B0aW9ucy5oZWFkZXJzKVtoZWFkZXJdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhZGRpdGlvbmFsSGVhZGVyc1toZWFkZXJdIHx8IGNsaWVudEhlYWRlciB8fCBfZGVmYXVsdDtcbiAgICB9XG4gICAgX2dldEFnZW50KHBhcnNlZFVybCkge1xuICAgICAgICBsZXQgYWdlbnQ7XG4gICAgICAgIGNvbnN0IHByb3h5VXJsID0gcG0uZ2V0UHJveHlVcmwocGFyc2VkVXJsKTtcbiAgICAgICAgY29uc3QgdXNlUHJveHkgPSBwcm94eVVybCAmJiBwcm94eVVybC5ob3N0bmFtZTtcbiAgICAgICAgaWYgKHRoaXMuX2tlZXBBbGl2ZSAmJiB1c2VQcm94eSkge1xuICAgICAgICAgICAgYWdlbnQgPSB0aGlzLl9wcm94eUFnZW50O1xuICAgICAgICB9XG4gICAgICAgIGlmICghdXNlUHJveHkpIHtcbiAgICAgICAgICAgIGFnZW50ID0gdGhpcy5fYWdlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgYWdlbnQgaXMgYWxyZWFkeSBhc3NpZ25lZCB1c2UgdGhhdCBhZ2VudC5cbiAgICAgICAgaWYgKGFnZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gYWdlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdXNpbmdTc2wgPSBwYXJzZWRVcmwucHJvdG9jb2wgPT09ICdodHRwczonO1xuICAgICAgICBsZXQgbWF4U29ja2V0cyA9IDEwMDtcbiAgICAgICAgaWYgKHRoaXMucmVxdWVzdE9wdGlvbnMpIHtcbiAgICAgICAgICAgIG1heFNvY2tldHMgPSB0aGlzLnJlcXVlc3RPcHRpb25zLm1heFNvY2tldHMgfHwgaHR0cC5nbG9iYWxBZ2VudC5tYXhTb2NrZXRzO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRoaXMgaXMgYHVzZVByb3h5YCBhZ2FpbiwgYnV0IHdlIG5lZWQgdG8gY2hlY2sgYHByb3h5VVJsYCBkaXJlY3RseSBmb3IgVHlwZVNjcmlwdHMncyBmbG93IGFuYWx5c2lzLlxuICAgICAgICBpZiAocHJveHlVcmwgJiYgcHJveHlVcmwuaG9zdG5hbWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGFnZW50T3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICBtYXhTb2NrZXRzLFxuICAgICAgICAgICAgICAgIGtlZXBBbGl2ZTogdGhpcy5fa2VlcEFsaXZlLFxuICAgICAgICAgICAgICAgIHByb3h5OiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sICgocHJveHlVcmwudXNlcm5hbWUgfHwgcHJveHlVcmwucGFzc3dvcmQpICYmIHtcbiAgICAgICAgICAgICAgICAgICAgcHJveHlBdXRoOiBgJHtwcm94eVVybC51c2VybmFtZX06JHtwcm94eVVybC5wYXNzd29yZH1gXG4gICAgICAgICAgICAgICAgfSkpLCB7IGhvc3Q6IHByb3h5VXJsLmhvc3RuYW1lLCBwb3J0OiBwcm94eVVybC5wb3J0IH0pXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgbGV0IHR1bm5lbEFnZW50O1xuICAgICAgICAgICAgY29uc3Qgb3Zlckh0dHBzID0gcHJveHlVcmwucHJvdG9jb2wgPT09ICdodHRwczonO1xuICAgICAgICAgICAgaWYgKHVzaW5nU3NsKSB7XG4gICAgICAgICAgICAgICAgdHVubmVsQWdlbnQgPSBvdmVySHR0cHMgPyB0dW5uZWwuaHR0cHNPdmVySHR0cHMgOiB0dW5uZWwuaHR0cHNPdmVySHR0cDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHR1bm5lbEFnZW50ID0gb3Zlckh0dHBzID8gdHVubmVsLmh0dHBPdmVySHR0cHMgOiB0dW5uZWwuaHR0cE92ZXJIdHRwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWdlbnQgPSB0dW5uZWxBZ2VudChhZ2VudE9wdGlvbnMpO1xuICAgICAgICAgICAgdGhpcy5fcHJveHlBZ2VudCA9IGFnZW50O1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHR1bm5lbGluZyBhZ2VudCBpc24ndCBhc3NpZ25lZCBjcmVhdGUgYSBuZXcgYWdlbnRcbiAgICAgICAgaWYgKCFhZ2VudCkge1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHsga2VlcEFsaXZlOiB0aGlzLl9rZWVwQWxpdmUsIG1heFNvY2tldHMgfTtcbiAgICAgICAgICAgIGFnZW50ID0gdXNpbmdTc2wgPyBuZXcgaHR0cHMuQWdlbnQob3B0aW9ucykgOiBuZXcgaHR0cC5BZ2VudChvcHRpb25zKTtcbiAgICAgICAgICAgIHRoaXMuX2FnZW50ID0gYWdlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVzaW5nU3NsICYmIHRoaXMuX2lnbm9yZVNzbEVycm9yKSB7XG4gICAgICAgICAgICAvLyB3ZSBkb24ndCB3YW50IHRvIHNldCBOT0RFX1RMU19SRUpFQ1RfVU5BVVRIT1JJWkVEPTAgc2luY2UgdGhhdCB3aWxsIGFmZmVjdCByZXF1ZXN0IGZvciBlbnRpcmUgcHJvY2Vzc1xuICAgICAgICAgICAgLy8gaHR0cC5SZXF1ZXN0T3B0aW9ucyBkb2Vzbid0IGV4cG9zZSBhIHdheSB0byBtb2RpZnkgUmVxdWVzdE9wdGlvbnMuYWdlbnQub3B0aW9uc1xuICAgICAgICAgICAgLy8gd2UgaGF2ZSB0byBjYXN0IGl0IHRvIGFueSBhbmQgY2hhbmdlIGl0IGRpcmVjdGx5XG4gICAgICAgICAgICBhZ2VudC5vcHRpb25zID0gT2JqZWN0LmFzc2lnbihhZ2VudC5vcHRpb25zIHx8IHt9LCB7XG4gICAgICAgICAgICAgICAgcmVqZWN0VW5hdXRob3JpemVkOiBmYWxzZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFnZW50O1xuICAgIH1cbiAgICBfZ2V0UHJveHlBZ2VudERpc3BhdGNoZXIocGFyc2VkVXJsLCBwcm94eVVybCkge1xuICAgICAgICBsZXQgcHJveHlBZ2VudDtcbiAgICAgICAgaWYgKHRoaXMuX2tlZXBBbGl2ZSkge1xuICAgICAgICAgICAgcHJveHlBZ2VudCA9IHRoaXMuX3Byb3h5QWdlbnREaXNwYXRjaGVyO1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIGFnZW50IGlzIGFscmVhZHkgYXNzaWduZWQgdXNlIHRoYXQgYWdlbnQuXG4gICAgICAgIGlmIChwcm94eUFnZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gcHJveHlBZ2VudDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1c2luZ1NzbCA9IHBhcnNlZFVybC5wcm90b2NvbCA9PT0gJ2h0dHBzOic7XG4gICAgICAgIHByb3h5QWdlbnQgPSBuZXcgdW5kaWNpXzEuUHJveHlBZ2VudChPYmplY3QuYXNzaWduKHsgdXJpOiBwcm94eVVybC5ocmVmLCBwaXBlbGluaW5nOiAhdGhpcy5fa2VlcEFsaXZlID8gMCA6IDEgfSwgKChwcm94eVVybC51c2VybmFtZSB8fCBwcm94eVVybC5wYXNzd29yZCkgJiYge1xuICAgICAgICAgICAgdG9rZW46IGBCYXNpYyAke0J1ZmZlci5mcm9tKGAke3Byb3h5VXJsLnVzZXJuYW1lfToke3Byb3h5VXJsLnBhc3N3b3JkfWApLnRvU3RyaW5nKCdiYXNlNjQnKX1gXG4gICAgICAgIH0pKSk7XG4gICAgICAgIHRoaXMuX3Byb3h5QWdlbnREaXNwYXRjaGVyID0gcHJveHlBZ2VudDtcbiAgICAgICAgaWYgKHVzaW5nU3NsICYmIHRoaXMuX2lnbm9yZVNzbEVycm9yKSB7XG4gICAgICAgICAgICAvLyB3ZSBkb24ndCB3YW50IHRvIHNldCBOT0RFX1RMU19SRUpFQ1RfVU5BVVRIT1JJWkVEPTAgc2luY2UgdGhhdCB3aWxsIGFmZmVjdCByZXF1ZXN0IGZvciBlbnRpcmUgcHJvY2Vzc1xuICAgICAgICAgICAgLy8gaHR0cC5SZXF1ZXN0T3B0aW9ucyBkb2Vzbid0IGV4cG9zZSBhIHdheSB0byBtb2RpZnkgUmVxdWVzdE9wdGlvbnMuYWdlbnQub3B0aW9uc1xuICAgICAgICAgICAgLy8gd2UgaGF2ZSB0byBjYXN0IGl0IHRvIGFueSBhbmQgY2hhbmdlIGl0IGRpcmVjdGx5XG4gICAgICAgICAgICBwcm94eUFnZW50Lm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHByb3h5QWdlbnQub3B0aW9ucy5yZXF1ZXN0VGxzIHx8IHt9LCB7XG4gICAgICAgICAgICAgICAgcmVqZWN0VW5hdXRob3JpemVkOiBmYWxzZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb3h5QWdlbnQ7XG4gICAgfVxuICAgIF9wZXJmb3JtRXhwb25lbnRpYWxCYWNrb2ZmKHJldHJ5TnVtYmVyKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICByZXRyeU51bWJlciA9IE1hdGgubWluKEV4cG9uZW50aWFsQmFja29mZkNlaWxpbmcsIHJldHJ5TnVtYmVyKTtcbiAgICAgICAgICAgIGNvbnN0IG1zID0gRXhwb25lbnRpYWxCYWNrb2ZmVGltZVNsaWNlICogTWF0aC5wb3coMiwgcmV0cnlOdW1iZXIpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dCgoKSA9PiByZXNvbHZlKCksIG1zKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfcHJvY2Vzc1Jlc3BvbnNlKHJlcywgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGF0dXNDb2RlID0gcmVzLm1lc3NhZ2Uuc3RhdHVzQ29kZSB8fCAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0ge1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXNDb2RlLFxuICAgICAgICAgICAgICAgICAgICByZXN1bHQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHt9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAvLyBub3QgZm91bmQgbGVhZHMgdG8gbnVsbCBvYmogcmV0dXJuZWRcbiAgICAgICAgICAgICAgICBpZiAoc3RhdHVzQ29kZSA9PT0gSHR0cENvZGVzLk5vdEZvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBnZXQgdGhlIHJlc3VsdCBmcm9tIHRoZSBib2R5XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gZGF0ZVRpbWVEZXNlcmlhbGl6ZXIoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYSA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNOYU4oYS52YWx1ZU9mKCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgb2JqO1xuICAgICAgICAgICAgICAgIGxldCBjb250ZW50cztcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb250ZW50cyA9IHlpZWxkIHJlcy5yZWFkQm9keSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudHMgJiYgY29udGVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5kZXNlcmlhbGl6ZURhdGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqID0gSlNPTi5wYXJzZShjb250ZW50cywgZGF0ZVRpbWVEZXNlcmlhbGl6ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqID0gSlNPTi5wYXJzZShjb250ZW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5yZXN1bHQgPSBvYmo7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuaGVhZGVycyA9IHJlcy5tZXNzYWdlLmhlYWRlcnM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSW52YWxpZCByZXNvdXJjZSAoY29udGVudHMgbm90IGpzb24pOyAgbGVhdmluZyByZXN1bHQgb2JqIG51bGxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gbm90ZSB0aGF0IDN4eCByZWRpcmVjdHMgYXJlIGhhbmRsZWQgYnkgdGhlIGh0dHAgbGF5ZXIuXG4gICAgICAgICAgICAgICAgaWYgKHN0YXR1c0NvZGUgPiAyOTkpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG1zZztcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgZXhjZXB0aW9uL2Vycm9yIGluIGJvZHksIGF0dGVtcHQgdG8gZ2V0IGJldHRlciBlcnJvclxuICAgICAgICAgICAgICAgICAgICBpZiAob2JqICYmIG9iai5tZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSBvYmoubWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb250ZW50cyAmJiBjb250ZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpdCBtYXkgYmUgdGhlIGNhc2UgdGhhdCB0aGUgZXhjZXB0aW9uIGlzIGluIHRoZSBib2R5IG1lc3NhZ2UgYXMgc3RyaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSBjb250ZW50cztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9IGBGYWlsZWQgcmVxdWVzdDogKCR7c3RhdHVzQ29kZX0pYDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnIgPSBuZXcgSHR0cENsaWVudEVycm9yKG1zZywgc3RhdHVzQ29kZSk7XG4gICAgICAgICAgICAgICAgICAgIGVyci5yZXN1bHQgPSByZXNwb25zZS5yZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnRzLkh0dHBDbGllbnQgPSBIdHRwQ2xpZW50O1xuY29uc3QgbG93ZXJjYXNlS2V5cyA9IChvYmopID0+IE9iamVjdC5rZXlzKG9iaikucmVkdWNlKChjLCBrKSA9PiAoKGNbay50b0xvd2VyQ2FzZSgpXSA9IG9ialtrXSksIGMpLCB7fSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlBlcnNvbmFsQWNjZXNzVG9rZW5DcmVkZW50aWFsSGFuZGxlciA9IGV4cG9ydHMuQmVhcmVyQ3JlZGVudGlhbEhhbmRsZXIgPSBleHBvcnRzLkJhc2ljQ3JlZGVudGlhbEhhbmRsZXIgPSB2b2lkIDA7XG5jbGFzcyBCYXNpY0NyZWRlbnRpYWxIYW5kbGVyIHtcbiAgICBjb25zdHJ1Y3Rvcih1c2VybmFtZSwgcGFzc3dvcmQpIHtcbiAgICAgICAgdGhpcy51c2VybmFtZSA9IHVzZXJuYW1lO1xuICAgICAgICB0aGlzLnBhc3N3b3JkID0gcGFzc3dvcmQ7XG4gICAgfVxuICAgIHByZXBhcmVSZXF1ZXN0KG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKCFvcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCdUaGUgcmVxdWVzdCBoYXMgbm8gaGVhZGVycycpO1xuICAgICAgICB9XG4gICAgICAgIG9wdGlvbnMuaGVhZGVyc1snQXV0aG9yaXphdGlvbiddID0gYEJhc2ljICR7QnVmZmVyLmZyb20oYCR7dGhpcy51c2VybmFtZX06JHt0aGlzLnBhc3N3b3JkfWApLnRvU3RyaW5nKCdiYXNlNjQnKX1gO1xuICAgIH1cbiAgICAvLyBUaGlzIGhhbmRsZXIgY2Fubm90IGhhbmRsZSA0MDFcbiAgICBjYW5IYW5kbGVBdXRoZW50aWNhdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBoYW5kbGVBdXRoZW50aWNhdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbm90IGltcGxlbWVudGVkJyk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuQmFzaWNDcmVkZW50aWFsSGFuZGxlciA9IEJhc2ljQ3JlZGVudGlhbEhhbmRsZXI7XG5jbGFzcyBCZWFyZXJDcmVkZW50aWFsSGFuZGxlciB7XG4gICAgY29uc3RydWN0b3IodG9rZW4pIHtcbiAgICAgICAgdGhpcy50b2tlbiA9IHRva2VuO1xuICAgIH1cbiAgICAvLyBjdXJyZW50bHkgaW1wbGVtZW50cyBwcmUtYXV0aG9yaXphdGlvblxuICAgIC8vIFRPRE86IHN1cHBvcnQgcHJlQXV0aCA9IGZhbHNlIHdoZXJlIGl0IGhvb2tzIG9uIDQwMVxuICAgIHByZXBhcmVSZXF1ZXN0KG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKCFvcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCdUaGUgcmVxdWVzdCBoYXMgbm8gaGVhZGVycycpO1xuICAgICAgICB9XG4gICAgICAgIG9wdGlvbnMuaGVhZGVyc1snQXV0aG9yaXphdGlvbiddID0gYEJlYXJlciAke3RoaXMudG9rZW59YDtcbiAgICB9XG4gICAgLy8gVGhpcyBoYW5kbGVyIGNhbm5vdCBoYW5kbGUgNDAxXG4gICAgY2FuSGFuZGxlQXV0aGVudGljYXRpb24oKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaGFuZGxlQXV0aGVudGljYXRpb24oKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBpbXBsZW1lbnRlZCcpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnRzLkJlYXJlckNyZWRlbnRpYWxIYW5kbGVyID0gQmVhcmVyQ3JlZGVudGlhbEhhbmRsZXI7XG5jbGFzcyBQZXJzb25hbEFjY2Vzc1Rva2VuQ3JlZGVudGlhbEhhbmRsZXIge1xuICAgIGNvbnN0cnVjdG9yKHRva2VuKSB7XG4gICAgICAgIHRoaXMudG9rZW4gPSB0b2tlbjtcbiAgICB9XG4gICAgLy8gY3VycmVudGx5IGltcGxlbWVudHMgcHJlLWF1dGhvcml6YXRpb25cbiAgICAvLyBUT0RPOiBzdXBwb3J0IHByZUF1dGggPSBmYWxzZSB3aGVyZSBpdCBob29rcyBvbiA0MDFcbiAgICBwcmVwYXJlUmVxdWVzdChvcHRpb25zKSB7XG4gICAgICAgIGlmICghb3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcignVGhlIHJlcXVlc3QgaGFzIG5vIGhlYWRlcnMnKTtcbiAgICAgICAgfVxuICAgICAgICBvcHRpb25zLmhlYWRlcnNbJ0F1dGhvcml6YXRpb24nXSA9IGBCYXNpYyAke0J1ZmZlci5mcm9tKGBQQVQ6JHt0aGlzLnRva2VufWApLnRvU3RyaW5nKCdiYXNlNjQnKX1gO1xuICAgIH1cbiAgICAvLyBUaGlzIGhhbmRsZXIgY2Fubm90IGhhbmRsZSA0MDFcbiAgICBjYW5IYW5kbGVBdXRoZW50aWNhdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBoYW5kbGVBdXRoZW50aWNhdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbm90IGltcGxlbWVudGVkJyk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuUGVyc29uYWxBY2Nlc3NUb2tlbkNyZWRlbnRpYWxIYW5kbGVyID0gUGVyc29uYWxBY2Nlc3NUb2tlbkNyZWRlbnRpYWxIYW5kbGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXV0aC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk9pZGNDbGllbnQgPSB2b2lkIDA7XG5jb25zdCBodHRwX2NsaWVudF8xID0gcmVxdWlyZShcIkBhY3Rpb25zL2h0dHAtY2xpZW50XCIpO1xuY29uc3QgYXV0aF8xID0gcmVxdWlyZShcIkBhY3Rpb25zL2h0dHAtY2xpZW50L2xpYi9hdXRoXCIpO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIi4vY29yZVwiKTtcbmNsYXNzIE9pZGNDbGllbnQge1xuICAgIHN0YXRpYyBjcmVhdGVIdHRwQ2xpZW50KGFsbG93UmV0cnkgPSB0cnVlLCBtYXhSZXRyeSA9IDEwKSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zID0ge1xuICAgICAgICAgICAgYWxsb3dSZXRyaWVzOiBhbGxvd1JldHJ5LFxuICAgICAgICAgICAgbWF4UmV0cmllczogbWF4UmV0cnlcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG5ldyBodHRwX2NsaWVudF8xLkh0dHBDbGllbnQoJ2FjdGlvbnMvb2lkYy1jbGllbnQnLCBbbmV3IGF1dGhfMS5CZWFyZXJDcmVkZW50aWFsSGFuZGxlcihPaWRjQ2xpZW50LmdldFJlcXVlc3RUb2tlbigpKV0sIHJlcXVlc3RPcHRpb25zKTtcbiAgICB9XG4gICAgc3RhdGljIGdldFJlcXVlc3RUb2tlbigpIHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSBwcm9jZXNzLmVudlsnQUNUSU9OU19JRF9UT0tFTl9SRVFVRVNUX1RPS0VOJ107XG4gICAgICAgIGlmICghdG9rZW4pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGdldCBBQ1RJT05TX0lEX1RPS0VOX1JFUVVFU1RfVE9LRU4gZW52IHZhcmlhYmxlJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgIH1cbiAgICBzdGF0aWMgZ2V0SURUb2tlblVybCgpIHtcbiAgICAgICAgY29uc3QgcnVudGltZVVybCA9IHByb2Nlc3MuZW52WydBQ1RJT05TX0lEX1RPS0VOX1JFUVVFU1RfVVJMJ107XG4gICAgICAgIGlmICghcnVudGltZVVybCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gZ2V0IEFDVElPTlNfSURfVE9LRU5fUkVRVUVTVF9VUkwgZW52IHZhcmlhYmxlJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJ1bnRpbWVVcmw7XG4gICAgfVxuICAgIHN0YXRpYyBnZXRDYWxsKGlkX3Rva2VuX3VybCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCBodHRwY2xpZW50ID0gT2lkY0NsaWVudC5jcmVhdGVIdHRwQ2xpZW50KCk7XG4gICAgICAgICAgICBjb25zdCByZXMgPSB5aWVsZCBodHRwY2xpZW50XG4gICAgICAgICAgICAgICAgLmdldEpzb24oaWRfdG9rZW5fdXJsKVxuICAgICAgICAgICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZ2V0IElEIFRva2VuLiBcXG4gXG4gICAgICAgIEVycm9yIENvZGUgOiAke2Vycm9yLnN0YXR1c0NvZGV9XFxuIFxuICAgICAgICBFcnJvciBNZXNzYWdlOiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGlkX3Rva2VuID0gKF9hID0gcmVzLnJlc3VsdCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlO1xuICAgICAgICAgICAgaWYgKCFpZF90b2tlbikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVzcG9uc2UganNvbiBib2R5IGRvIG5vdCBoYXZlIElEIFRva2VuIGZpZWxkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaWRfdG9rZW47XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBzdGF0aWMgZ2V0SURUb2tlbihhdWRpZW5jZSkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAvLyBOZXcgSUQgVG9rZW4gaXMgcmVxdWVzdGVkIGZyb20gYWN0aW9uIHNlcnZpY2VcbiAgICAgICAgICAgICAgICBsZXQgaWRfdG9rZW5fdXJsID0gT2lkY0NsaWVudC5nZXRJRFRva2VuVXJsKCk7XG4gICAgICAgICAgICAgICAgaWYgKGF1ZGllbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuY29kZWRBdWRpZW5jZSA9IGVuY29kZVVSSUNvbXBvbmVudChhdWRpZW5jZSk7XG4gICAgICAgICAgICAgICAgICAgIGlkX3Rva2VuX3VybCA9IGAke2lkX3Rva2VuX3VybH0mYXVkaWVuY2U9JHtlbmNvZGVkQXVkaWVuY2V9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKDAsIGNvcmVfMS5kZWJ1ZykoYElEIHRva2VuIHVybCBpcyAke2lkX3Rva2VuX3VybH1gKTtcbiAgICAgICAgICAgICAgICBjb25zdCBpZF90b2tlbiA9IHlpZWxkIE9pZGNDbGllbnQuZ2V0Q2FsbChpZF90b2tlbl91cmwpO1xuICAgICAgICAgICAgICAgICgwLCBjb3JlXzEuc2V0U2VjcmV0KShpZF90b2tlbik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlkX3Rva2VuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBtZXNzYWdlOiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuT2lkY0NsaWVudCA9IE9pZGNDbGllbnQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1vaWRjLXV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc3VtbWFyeSA9IGV4cG9ydHMubWFya2Rvd25TdW1tYXJ5ID0gZXhwb3J0cy5TVU1NQVJZX0RPQ1NfVVJMID0gZXhwb3J0cy5TVU1NQVJZX0VOVl9WQVIgPSB2b2lkIDA7XG5jb25zdCBvc18xID0gcmVxdWlyZShcIm9zXCIpO1xuY29uc3QgZnNfMSA9IHJlcXVpcmUoXCJmc1wiKTtcbmNvbnN0IHsgYWNjZXNzLCBhcHBlbmRGaWxlLCB3cml0ZUZpbGUgfSA9IGZzXzEucHJvbWlzZXM7XG5leHBvcnRzLlNVTU1BUllfRU5WX1ZBUiA9ICdHSVRIVUJfU1RFUF9TVU1NQVJZJztcbmV4cG9ydHMuU1VNTUFSWV9ET0NTX1VSTCA9ICdodHRwczovL2RvY3MuZ2l0aHViLmNvbS9hY3Rpb25zL3VzaW5nLXdvcmtmbG93cy93b3JrZmxvdy1jb21tYW5kcy1mb3ItZ2l0aHViLWFjdGlvbnMjYWRkaW5nLWEtam9iLXN1bW1hcnknO1xuY2xhc3MgU3VtbWFyeSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuX2J1ZmZlciA9ICcnO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBGaW5kcyB0aGUgc3VtbWFyeSBmaWxlIHBhdGggZnJvbSB0aGUgZW52aXJvbm1lbnQsIHJlamVjdHMgaWYgZW52IHZhciBpcyBub3QgZm91bmQgb3IgZmlsZSBkb2VzIG5vdCBleGlzdFxuICAgICAqIEFsc28gY2hlY2tzIHIvdyBwZXJtaXNzaW9ucy5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHN0ZXAgc3VtbWFyeSBmaWxlIHBhdGhcbiAgICAgKi9cbiAgICBmaWxlUGF0aCgpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9maWxlUGF0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9maWxlUGF0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHBhdGhGcm9tRW52ID0gcHJvY2Vzcy5lbnZbZXhwb3J0cy5TVU1NQVJZX0VOVl9WQVJdO1xuICAgICAgICAgICAgaWYgKCFwYXRoRnJvbUVudikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGZpbmQgZW52aXJvbm1lbnQgdmFyaWFibGUgZm9yICQke2V4cG9ydHMuU1VNTUFSWV9FTlZfVkFSfS4gQ2hlY2sgaWYgeW91ciBydW50aW1lIGVudmlyb25tZW50IHN1cHBvcnRzIGpvYiBzdW1tYXJpZXMuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHlpZWxkIGFjY2VzcyhwYXRoRnJvbUVudiwgZnNfMS5jb25zdGFudHMuUl9PSyB8IGZzXzEuY29uc3RhbnRzLldfT0spO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gYWNjZXNzIHN1bW1hcnkgZmlsZTogJyR7cGF0aEZyb21FbnZ9Jy4gQ2hlY2sgaWYgdGhlIGZpbGUgaGFzIGNvcnJlY3QgcmVhZC93cml0ZSBwZXJtaXNzaW9ucy5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX2ZpbGVQYXRoID0gcGF0aEZyb21FbnY7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZmlsZVBhdGg7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXcmFwcyBjb250ZW50IGluIGFuIEhUTUwgdGFnLCBhZGRpbmcgYW55IEhUTUwgYXR0cmlidXRlc1xuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRhZyBIVE1MIHRhZyB0byB3cmFwXG4gICAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsfSBjb250ZW50IGNvbnRlbnQgd2l0aGluIHRoZSB0YWdcbiAgICAgKiBAcGFyYW0ge1thdHRyaWJ1dGU6IHN0cmluZ106IHN0cmluZ30gYXR0cnMga2V5LXZhbHVlIGxpc3Qgb2YgSFRNTCBhdHRyaWJ1dGVzIHRvIGFkZFxuICAgICAqXG4gICAgICogQHJldHVybnMge3N0cmluZ30gY29udGVudCB3cmFwcGVkIGluIEhUTUwgZWxlbWVudFxuICAgICAqL1xuICAgIHdyYXAodGFnLCBjb250ZW50LCBhdHRycyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IGh0bWxBdHRycyA9IE9iamVjdC5lbnRyaWVzKGF0dHJzKVxuICAgICAgICAgICAgLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBgICR7a2V5fT1cIiR7dmFsdWV9XCJgKVxuICAgICAgICAgICAgLmpvaW4oJycpO1xuICAgICAgICBpZiAoIWNvbnRlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBgPCR7dGFnfSR7aHRtbEF0dHJzfT5gO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgPCR7dGFnfSR7aHRtbEF0dHJzfT4ke2NvbnRlbnR9PC8ke3RhZ30+YDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGVzIHRleHQgaW4gdGhlIGJ1ZmZlciB0byB0aGUgc3VtbWFyeSBidWZmZXIgZmlsZSBhbmQgZW1wdGllcyBidWZmZXIuIFdpbGwgYXBwZW5kIGJ5IGRlZmF1bHQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N1bW1hcnlXcml0ZU9wdGlvbnN9IFtvcHRpb25zXSAob3B0aW9uYWwpIG9wdGlvbnMgZm9yIHdyaXRlIG9wZXJhdGlvblxuICAgICAqXG4gICAgICogQHJldHVybnMge1Byb21pc2U8U3VtbWFyeT59IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICB3cml0ZShvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCBvdmVyd3JpdGUgPSAhIShvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMub3ZlcndyaXRlKTtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVQYXRoID0geWllbGQgdGhpcy5maWxlUGF0aCgpO1xuICAgICAgICAgICAgY29uc3Qgd3JpdGVGdW5jID0gb3ZlcndyaXRlID8gd3JpdGVGaWxlIDogYXBwZW5kRmlsZTtcbiAgICAgICAgICAgIHlpZWxkIHdyaXRlRnVuYyhmaWxlUGF0aCwgdGhpcy5fYnVmZmVyLCB7IGVuY29kaW5nOiAndXRmOCcgfSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lbXB0eUJ1ZmZlcigpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2xlYXJzIHRoZSBzdW1tYXJ5IGJ1ZmZlciBhbmQgd2lwZXMgdGhlIHN1bW1hcnkgZmlsZVxuICAgICAqXG4gICAgICogQHJldHVybnMge1N1bW1hcnl9IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBjbGVhcigpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVtcHR5QnVmZmVyKCkud3JpdGUoeyBvdmVyd3JpdGU6IHRydWUgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHN1bW1hcnkgYnVmZmVyIGFzIGEgc3RyaW5nXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBzdHJpbmcgb2Ygc3VtbWFyeSBidWZmZXJcbiAgICAgKi9cbiAgICBzdHJpbmdpZnkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9idWZmZXI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElmIHRoZSBzdW1tYXJ5IGJ1ZmZlciBpcyBlbXB0eVxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlbn0gdHJ1ZSBpZiB0aGUgYnVmZmVyIGlzIGVtcHR5XG4gICAgICovXG4gICAgaXNFbXB0eUJ1ZmZlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlci5sZW5ndGggPT09IDA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlc2V0cyB0aGUgc3VtbWFyeSBidWZmZXIgd2l0aG91dCB3cml0aW5nIHRvIHN1bW1hcnkgZmlsZVxuICAgICAqXG4gICAgICogQHJldHVybnMge1N1bW1hcnl9IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBlbXB0eUJ1ZmZlcigpIHtcbiAgICAgICAgdGhpcy5fYnVmZmVyID0gJyc7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIHJhdyB0ZXh0IHRvIHRoZSBzdW1tYXJ5IGJ1ZmZlclxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgY29udGVudCB0byBhZGRcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthZGRFT0w9ZmFsc2VdIChvcHRpb25hbCkgYXBwZW5kIGFuIEVPTCB0byB0aGUgcmF3IHRleHQgKGRlZmF1bHQ6IGZhbHNlKVxuICAgICAqXG4gICAgICogQHJldHVybnMge1N1bW1hcnl9IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBhZGRSYXcodGV4dCwgYWRkRU9MID0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5fYnVmZmVyICs9IHRleHQ7XG4gICAgICAgIHJldHVybiBhZGRFT0wgPyB0aGlzLmFkZEVPTCgpIDogdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyB0aGUgb3BlcmF0aW5nIHN5c3RlbS1zcGVjaWZpYyBlbmQtb2YtbGluZSBtYXJrZXIgdG8gdGhlIGJ1ZmZlclxuICAgICAqXG4gICAgICogQHJldHVybnMge1N1bW1hcnl9IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBhZGRFT0woKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZFJhdyhvc18xLkVPTCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYW4gSFRNTCBjb2RlYmxvY2sgdG8gdGhlIHN1bW1hcnkgYnVmZmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY29kZSBjb250ZW50IHRvIHJlbmRlciB3aXRoaW4gZmVuY2VkIGNvZGUgYmxvY2tcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbGFuZyAob3B0aW9uYWwpIGxhbmd1YWdlIHRvIHN5bnRheCBoaWdobGlnaHQgY29kZVxuICAgICAqXG4gICAgICogQHJldHVybnMge1N1bW1hcnl9IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBhZGRDb2RlQmxvY2soY29kZSwgbGFuZykge1xuICAgICAgICBjb25zdCBhdHRycyA9IE9iamVjdC5hc3NpZ24oe30sIChsYW5nICYmIHsgbGFuZyB9KSk7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLndyYXAoJ3ByZScsIHRoaXMud3JhcCgnY29kZScsIGNvZGUpLCBhdHRycyk7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZFJhdyhlbGVtZW50KS5hZGRFT0woKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhbiBIVE1MIGxpc3QgdG8gdGhlIHN1bW1hcnkgYnVmZmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBpdGVtcyBsaXN0IG9mIGl0ZW1zIHRvIHJlbmRlclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29yZGVyZWQ9ZmFsc2VdIChvcHRpb25hbCkgaWYgdGhlIHJlbmRlcmVkIGxpc3Qgc2hvdWxkIGJlIG9yZGVyZWQgb3Igbm90IChkZWZhdWx0OiBmYWxzZSlcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtTdW1tYXJ5fSBzdW1tYXJ5IGluc3RhbmNlXG4gICAgICovXG4gICAgYWRkTGlzdChpdGVtcywgb3JkZXJlZCA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IHRhZyA9IG9yZGVyZWQgPyAnb2wnIDogJ3VsJztcbiAgICAgICAgY29uc3QgbGlzdEl0ZW1zID0gaXRlbXMubWFwKGl0ZW0gPT4gdGhpcy53cmFwKCdsaScsIGl0ZW0pKS5qb2luKCcnKTtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMud3JhcCh0YWcsIGxpc3RJdGVtcyk7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZFJhdyhlbGVtZW50KS5hZGRFT0woKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhbiBIVE1MIHRhYmxlIHRvIHRoZSBzdW1tYXJ5IGJ1ZmZlclxuICAgICAqXG4gICAgICogQHBhcmFtIHtTdW1tYXJ5VGFibGVDZWxsW119IHJvd3MgdGFibGUgcm93c1xuICAgICAqXG4gICAgICogQHJldHVybnMge1N1bW1hcnl9IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBhZGRUYWJsZShyb3dzKSB7XG4gICAgICAgIGNvbnN0IHRhYmxlQm9keSA9IHJvd3NcbiAgICAgICAgICAgIC5tYXAocm93ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNlbGxzID0gcm93XG4gICAgICAgICAgICAgICAgLm1hcChjZWxsID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNlbGwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLndyYXAoJ3RkJywgY2VsbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHsgaGVhZGVyLCBkYXRhLCBjb2xzcGFuLCByb3dzcGFuIH0gPSBjZWxsO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhZyA9IGhlYWRlciA/ICd0aCcgOiAndGQnO1xuICAgICAgICAgICAgICAgIGNvbnN0IGF0dHJzID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCAoY29sc3BhbiAmJiB7IGNvbHNwYW4gfSkpLCAocm93c3BhbiAmJiB7IHJvd3NwYW4gfSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLndyYXAodGFnLCBkYXRhLCBhdHRycyk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5qb2luKCcnKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLndyYXAoJ3RyJywgY2VsbHMpO1xuICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oJycpO1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy53cmFwKCd0YWJsZScsIHRhYmxlQm9keSk7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZFJhdyhlbGVtZW50KS5hZGRFT0woKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhIGNvbGxhcHNhYmxlIEhUTUwgZGV0YWlscyBlbGVtZW50IHRvIHRoZSBzdW1tYXJ5IGJ1ZmZlclxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGxhYmVsIHRleHQgZm9yIHRoZSBjbG9zZWQgc3RhdGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCBjb2xsYXBzYWJsZSBjb250ZW50XG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7U3VtbWFyeX0gc3VtbWFyeSBpbnN0YW5jZVxuICAgICAqL1xuICAgIGFkZERldGFpbHMobGFiZWwsIGNvbnRlbnQpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMud3JhcCgnZGV0YWlscycsIHRoaXMud3JhcCgnc3VtbWFyeScsIGxhYmVsKSArIGNvbnRlbnQpO1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRSYXcoZWxlbWVudCkuYWRkRU9MKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYW4gSFRNTCBpbWFnZSB0YWcgdG8gdGhlIHN1bW1hcnkgYnVmZmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3JjIHBhdGggdG8gdGhlIGltYWdlIHlvdSB0byBlbWJlZFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhbHQgdGV4dCBkZXNjcmlwdGlvbiBvZiB0aGUgaW1hZ2VcbiAgICAgKiBAcGFyYW0ge1N1bW1hcnlJbWFnZU9wdGlvbnN9IG9wdGlvbnMgKG9wdGlvbmFsKSBhZGRpdGlvbiBpbWFnZSBhdHRyaWJ1dGVzXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7U3VtbWFyeX0gc3VtbWFyeSBpbnN0YW5jZVxuICAgICAqL1xuICAgIGFkZEltYWdlKHNyYywgYWx0LCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgY29uc3QgYXR0cnMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sICh3aWR0aCAmJiB7IHdpZHRoIH0pKSwgKGhlaWdodCAmJiB7IGhlaWdodCB9KSk7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLndyYXAoJ2ltZycsIG51bGwsIE9iamVjdC5hc3NpZ24oeyBzcmMsIGFsdCB9LCBhdHRycykpO1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRSYXcoZWxlbWVudCkuYWRkRU9MKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYW4gSFRNTCBzZWN0aW9uIGhlYWRpbmcgZWxlbWVudFxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgaGVhZGluZyB0ZXh0XG4gICAgICogQHBhcmFtIHtudW1iZXIgfCBzdHJpbmd9IFtsZXZlbD0xXSAob3B0aW9uYWwpIHRoZSBoZWFkaW5nIGxldmVsLCBkZWZhdWx0OiAxXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7U3VtbWFyeX0gc3VtbWFyeSBpbnN0YW5jZVxuICAgICAqL1xuICAgIGFkZEhlYWRpbmcodGV4dCwgbGV2ZWwpIHtcbiAgICAgICAgY29uc3QgdGFnID0gYGgke2xldmVsfWA7XG4gICAgICAgIGNvbnN0IGFsbG93ZWRUYWcgPSBbJ2gxJywgJ2gyJywgJ2gzJywgJ2g0JywgJ2g1JywgJ2g2J10uaW5jbHVkZXModGFnKVxuICAgICAgICAgICAgPyB0YWdcbiAgICAgICAgICAgIDogJ2gxJztcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMud3JhcChhbGxvd2VkVGFnLCB0ZXh0KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkUmF3KGVsZW1lbnQpLmFkZEVPTCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGFuIEhUTUwgdGhlbWF0aWMgYnJlYWsgKDxocj4pIHRvIHRoZSBzdW1tYXJ5IGJ1ZmZlclxuICAgICAqXG4gICAgICogQHJldHVybnMge1N1bW1hcnl9IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBhZGRTZXBhcmF0b3IoKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLndyYXAoJ2hyJywgbnVsbCk7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZFJhdyhlbGVtZW50KS5hZGRFT0woKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhbiBIVE1MIGxpbmUgYnJlYWsgKDxicj4pIHRvIHRoZSBzdW1tYXJ5IGJ1ZmZlclxuICAgICAqXG4gICAgICogQHJldHVybnMge1N1bW1hcnl9IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBhZGRCcmVhaygpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMud3JhcCgnYnInLCBudWxsKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkUmF3KGVsZW1lbnQpLmFkZEVPTCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGFuIEhUTUwgYmxvY2txdW90ZSB0byB0aGUgc3VtbWFyeSBidWZmZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IHF1b3RlIHRleHRcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY2l0ZSAob3B0aW9uYWwpIGNpdGF0aW9uIHVybFxuICAgICAqXG4gICAgICogQHJldHVybnMge1N1bW1hcnl9IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBhZGRRdW90ZSh0ZXh0LCBjaXRlKSB7XG4gICAgICAgIGNvbnN0IGF0dHJzID0gT2JqZWN0LmFzc2lnbih7fSwgKGNpdGUgJiYgeyBjaXRlIH0pKTtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMud3JhcCgnYmxvY2txdW90ZScsIHRleHQsIGF0dHJzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkUmF3KGVsZW1lbnQpLmFkZEVPTCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGFuIEhUTUwgYW5jaG9yIHRhZyB0byB0aGUgc3VtbWFyeSBidWZmZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IGxpbmsgdGV4dC9jb250ZW50XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGhyZWYgaHlwZXJsaW5rXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7U3VtbWFyeX0gc3VtbWFyeSBpbnN0YW5jZVxuICAgICAqL1xuICAgIGFkZExpbmsodGV4dCwgaHJlZikge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy53cmFwKCdhJywgdGV4dCwgeyBocmVmIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRSYXcoZWxlbWVudCkuYWRkRU9MKCk7XG4gICAgfVxufVxuY29uc3QgX3N1bW1hcnkgPSBuZXcgU3VtbWFyeSgpO1xuLyoqXG4gKiBAZGVwcmVjYXRlZCB1c2UgYGNvcmUuc3VtbWFyeWBcbiAqL1xuZXhwb3J0cy5tYXJrZG93blN1bW1hcnkgPSBfc3VtbWFyeTtcbmV4cG9ydHMuc3VtbWFyeSA9IF9zdW1tYXJ5O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3VtbWFyeS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRvUGxhdGZvcm1QYXRoID0gZXhwb3J0cy50b1dpbjMyUGF0aCA9IGV4cG9ydHMudG9Qb3NpeFBhdGggPSB2b2lkIDA7XG5jb25zdCBwYXRoID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJwYXRoXCIpKTtcbi8qKlxuICogdG9Qb3NpeFBhdGggY29udmVydHMgdGhlIGdpdmVuIHBhdGggdG8gdGhlIHBvc2l4IGZvcm0uIE9uIFdpbmRvd3MsIFxcXFwgd2lsbCBiZVxuICogcmVwbGFjZWQgd2l0aCAvLlxuICpcbiAqIEBwYXJhbSBwdGguIFBhdGggdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiBzdHJpbmcgUG9zaXggcGF0aC5cbiAqL1xuZnVuY3Rpb24gdG9Qb3NpeFBhdGgocHRoKSB7XG4gICAgcmV0dXJuIHB0aC5yZXBsYWNlKC9bXFxcXF0vZywgJy8nKTtcbn1cbmV4cG9ydHMudG9Qb3NpeFBhdGggPSB0b1Bvc2l4UGF0aDtcbi8qKlxuICogdG9XaW4zMlBhdGggY29udmVydHMgdGhlIGdpdmVuIHBhdGggdG8gdGhlIHdpbjMyIGZvcm0uIE9uIExpbnV4LCAvIHdpbGwgYmVcbiAqIHJlcGxhY2VkIHdpdGggXFxcXC5cbiAqXG4gKiBAcGFyYW0gcHRoLiBQYXRoIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4gc3RyaW5nIFdpbjMyIHBhdGguXG4gKi9cbmZ1bmN0aW9uIHRvV2luMzJQYXRoKHB0aCkge1xuICAgIHJldHVybiBwdGgucmVwbGFjZSgvWy9dL2csICdcXFxcJyk7XG59XG5leHBvcnRzLnRvV2luMzJQYXRoID0gdG9XaW4zMlBhdGg7XG4vKipcbiAqIHRvUGxhdGZvcm1QYXRoIGNvbnZlcnRzIHRoZSBnaXZlbiBwYXRoIHRvIGEgcGxhdGZvcm0tc3BlY2lmaWMgcGF0aC4gSXQgZG9lc1xuICogdGhpcyBieSByZXBsYWNpbmcgaW5zdGFuY2VzIG9mIC8gYW5kIFxcIHdpdGggdGhlIHBsYXRmb3JtLXNwZWNpZmljIHBhdGhcbiAqIHNlcGFyYXRvci5cbiAqXG4gKiBAcGFyYW0gcHRoIFRoZSBwYXRoIHRvIHBsYXRmb3JtaXplLlxuICogQHJldHVybiBzdHJpbmcgVGhlIHBsYXRmb3JtLXNwZWNpZmljIHBhdGguXG4gKi9cbmZ1bmN0aW9uIHRvUGxhdGZvcm1QYXRoKHB0aCkge1xuICAgIHJldHVybiBwdGgucmVwbGFjZSgvWy9cXFxcXS9nLCBwYXRoLnNlcCk7XG59XG5leHBvcnRzLnRvUGxhdGZvcm1QYXRoID0gdG9QbGF0Zm9ybVBhdGg7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wYXRoLXV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfSk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG52YXIgX2E7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldENtZFBhdGggPSBleHBvcnRzLnRyeUdldEV4ZWN1dGFibGVQYXRoID0gZXhwb3J0cy5pc1Jvb3RlZCA9IGV4cG9ydHMuaXNEaXJlY3RvcnkgPSBleHBvcnRzLmV4aXN0cyA9IGV4cG9ydHMuUkVBRE9OTFkgPSBleHBvcnRzLlVWX0ZTX09fRVhMT0NLID0gZXhwb3J0cy5JU19XSU5ET1dTID0gZXhwb3J0cy51bmxpbmsgPSBleHBvcnRzLnN5bWxpbmsgPSBleHBvcnRzLnN0YXQgPSBleHBvcnRzLnJtZGlyID0gZXhwb3J0cy5ybSA9IGV4cG9ydHMucmVuYW1lID0gZXhwb3J0cy5yZWFkbGluayA9IGV4cG9ydHMucmVhZGRpciA9IGV4cG9ydHMub3BlbiA9IGV4cG9ydHMubWtkaXIgPSBleHBvcnRzLmxzdGF0ID0gZXhwb3J0cy5jb3B5RmlsZSA9IGV4cG9ydHMuY2htb2QgPSB2b2lkIDA7XG5jb25zdCBmcyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiZnNcIikpO1xuY29uc3QgcGF0aCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwicGF0aFwiKSk7XG5fYSA9IGZzLnByb21pc2VzXG4vLyBleHBvcnQgY29uc3Qge29wZW59ID0gJ2ZzJ1xuLCBleHBvcnRzLmNobW9kID0gX2EuY2htb2QsIGV4cG9ydHMuY29weUZpbGUgPSBfYS5jb3B5RmlsZSwgZXhwb3J0cy5sc3RhdCA9IF9hLmxzdGF0LCBleHBvcnRzLm1rZGlyID0gX2EubWtkaXIsIGV4cG9ydHMub3BlbiA9IF9hLm9wZW4sIGV4cG9ydHMucmVhZGRpciA9IF9hLnJlYWRkaXIsIGV4cG9ydHMucmVhZGxpbmsgPSBfYS5yZWFkbGluaywgZXhwb3J0cy5yZW5hbWUgPSBfYS5yZW5hbWUsIGV4cG9ydHMucm0gPSBfYS5ybSwgZXhwb3J0cy5ybWRpciA9IF9hLnJtZGlyLCBleHBvcnRzLnN0YXQgPSBfYS5zdGF0LCBleHBvcnRzLnN5bWxpbmsgPSBfYS5zeW1saW5rLCBleHBvcnRzLnVubGluayA9IF9hLnVubGluaztcbi8vIGV4cG9ydCBjb25zdCB7b3Blbn0gPSAnZnMnXG5leHBvcnRzLklTX1dJTkRPV1MgPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInO1xuLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL2QwMTUzYWVlMzY3NDIyZDA4NTgxMDVhYmVjMTg2ZGE0ZGZmMGEwYzUvZGVwcy91di9pbmNsdWRlL3V2L3dpbi5oI0w2OTFcbmV4cG9ydHMuVVZfRlNfT19FWExPQ0sgPSAweDEwMDAwMDAwO1xuZXhwb3J0cy5SRUFET05MWSA9IGZzLmNvbnN0YW50cy5PX1JET05MWTtcbmZ1bmN0aW9uIGV4aXN0cyhmc1BhdGgpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgeWllbGQgZXhwb3J0cy5zdGF0KGZzUGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZXhpc3RzID0gZXhpc3RzO1xuZnVuY3Rpb24gaXNEaXJlY3RvcnkoZnNQYXRoLCB1c2VTdGF0ID0gZmFsc2UpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBzdGF0cyA9IHVzZVN0YXQgPyB5aWVsZCBleHBvcnRzLnN0YXQoZnNQYXRoKSA6IHlpZWxkIGV4cG9ydHMubHN0YXQoZnNQYXRoKTtcbiAgICAgICAgcmV0dXJuIHN0YXRzLmlzRGlyZWN0b3J5KCk7XG4gICAgfSk7XG59XG5leHBvcnRzLmlzRGlyZWN0b3J5ID0gaXNEaXJlY3Rvcnk7XG4vKipcbiAqIE9uIE9TWC9MaW51eCwgdHJ1ZSBpZiBwYXRoIHN0YXJ0cyB3aXRoICcvJy4gT24gV2luZG93cywgdHJ1ZSBmb3IgcGF0aHMgbGlrZTpcbiAqIFxcLCBcXGhlbGxvLCBcXFxcaGVsbG9cXHNoYXJlLCBDOiwgYW5kIEM6XFxoZWxsbyAoYW5kIGNvcnJlc3BvbmRpbmcgYWx0ZXJuYXRlIHNlcGFyYXRvciBjYXNlcykuXG4gKi9cbmZ1bmN0aW9uIGlzUm9vdGVkKHApIHtcbiAgICBwID0gbm9ybWFsaXplU2VwYXJhdG9ycyhwKTtcbiAgICBpZiAoIXApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpc1Jvb3RlZCgpIHBhcmFtZXRlciBcInBcIiBjYW5ub3QgYmUgZW1wdHknKTtcbiAgICB9XG4gICAgaWYgKGV4cG9ydHMuSVNfV0lORE9XUykge1xuICAgICAgICByZXR1cm4gKHAuc3RhcnRzV2l0aCgnXFxcXCcpIHx8IC9eW0EtWl06L2kudGVzdChwKSAvLyBlLmcuIFxcIG9yIFxcaGVsbG8gb3IgXFxcXGhlbGxvXG4gICAgICAgICk7IC8vIGUuZy4gQzogb3IgQzpcXGhlbGxvXG4gICAgfVxuICAgIHJldHVybiBwLnN0YXJ0c1dpdGgoJy8nKTtcbn1cbmV4cG9ydHMuaXNSb290ZWQgPSBpc1Jvb3RlZDtcbi8qKlxuICogQmVzdCBlZmZvcnQgYXR0ZW1wdCB0byBkZXRlcm1pbmUgd2hldGhlciBhIGZpbGUgZXhpc3RzIGFuZCBpcyBleGVjdXRhYmxlLlxuICogQHBhcmFtIGZpbGVQYXRoICAgIGZpbGUgcGF0aCB0byBjaGVja1xuICogQHBhcmFtIGV4dGVuc2lvbnMgIGFkZGl0aW9uYWwgZmlsZSBleHRlbnNpb25zIHRvIHRyeVxuICogQHJldHVybiBpZiBmaWxlIGV4aXN0cyBhbmQgaXMgZXhlY3V0YWJsZSwgcmV0dXJucyB0aGUgZmlsZSBwYXRoLiBvdGhlcndpc2UgZW1wdHkgc3RyaW5nLlxuICovXG5mdW5jdGlvbiB0cnlHZXRFeGVjdXRhYmxlUGF0aChmaWxlUGF0aCwgZXh0ZW5zaW9ucykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGxldCBzdGF0cyA9IHVuZGVmaW5lZDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIHRlc3QgZmlsZSBleGlzdHNcbiAgICAgICAgICAgIHN0YXRzID0geWllbGQgZXhwb3J0cy5zdGF0KGZpbGVQYXRoKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyLmNvZGUgIT09ICdFTk9FTlQnKSB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgVW5leHBlY3RlZCBlcnJvciBhdHRlbXB0aW5nIHRvIGRldGVybWluZSBpZiBleGVjdXRhYmxlIGZpbGUgZXhpc3RzICcke2ZpbGVQYXRofSc6ICR7ZXJyfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0cyAmJiBzdGF0cy5pc0ZpbGUoKSkge1xuICAgICAgICAgICAgaWYgKGV4cG9ydHMuSVNfV0lORE9XUykge1xuICAgICAgICAgICAgICAgIC8vIG9uIFdpbmRvd3MsIHRlc3QgZm9yIHZhbGlkIGV4dGVuc2lvblxuICAgICAgICAgICAgICAgIGNvbnN0IHVwcGVyRXh0ID0gcGF0aC5leHRuYW1lKGZpbGVQYXRoKS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIGlmIChleHRlbnNpb25zLnNvbWUodmFsaWRFeHQgPT4gdmFsaWRFeHQudG9VcHBlckNhc2UoKSA9PT0gdXBwZXJFeHQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmaWxlUGF0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNVbml4RXhlY3V0YWJsZShzdGF0cykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpbGVQYXRoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyB0cnkgZWFjaCBleHRlbnNpb25cbiAgICAgICAgY29uc3Qgb3JpZ2luYWxGaWxlUGF0aCA9IGZpbGVQYXRoO1xuICAgICAgICBmb3IgKGNvbnN0IGV4dGVuc2lvbiBvZiBleHRlbnNpb25zKSB7XG4gICAgICAgICAgICBmaWxlUGF0aCA9IG9yaWdpbmFsRmlsZVBhdGggKyBleHRlbnNpb247XG4gICAgICAgICAgICBzdGF0cyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgc3RhdHMgPSB5aWVsZCBleHBvcnRzLnN0YXQoZmlsZVBhdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIuY29kZSAhPT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFVuZXhwZWN0ZWQgZXJyb3IgYXR0ZW1wdGluZyB0byBkZXRlcm1pbmUgaWYgZXhlY3V0YWJsZSBmaWxlIGV4aXN0cyAnJHtmaWxlUGF0aH0nOiAke2Vycn1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3RhdHMgJiYgc3RhdHMuaXNGaWxlKCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXhwb3J0cy5JU19XSU5ET1dTKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHByZXNlcnZlIHRoZSBjYXNlIG9mIHRoZSBhY3R1YWwgZmlsZSAoc2luY2UgYW4gZXh0ZW5zaW9uIHdhcyBhcHBlbmRlZClcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpcmVjdG9yeSA9IHBhdGguZGlybmFtZShmaWxlUGF0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cHBlck5hbWUgPSBwYXRoLmJhc2VuYW1lKGZpbGVQYXRoKS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBhY3R1YWxOYW1lIG9mIHlpZWxkIGV4cG9ydHMucmVhZGRpcihkaXJlY3RvcnkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVwcGVyTmFtZSA9PT0gYWN0dWFsTmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVQYXRoID0gcGF0aC5qb2luKGRpcmVjdG9yeSwgYWN0dWFsTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFVuZXhwZWN0ZWQgZXJyb3IgYXR0ZW1wdGluZyB0byBkZXRlcm1pbmUgdGhlIGFjdHVhbCBjYXNlIG9mIHRoZSBmaWxlICcke2ZpbGVQYXRofSc6ICR7ZXJyfWApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmaWxlUGF0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1VuaXhFeGVjdXRhYmxlKHN0YXRzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpbGVQYXRoO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9KTtcbn1cbmV4cG9ydHMudHJ5R2V0RXhlY3V0YWJsZVBhdGggPSB0cnlHZXRFeGVjdXRhYmxlUGF0aDtcbmZ1bmN0aW9uIG5vcm1hbGl6ZVNlcGFyYXRvcnMocCkge1xuICAgIHAgPSBwIHx8ICcnO1xuICAgIGlmIChleHBvcnRzLklTX1dJTkRPV1MpIHtcbiAgICAgICAgLy8gY29udmVydCBzbGFzaGVzIG9uIFdpbmRvd3NcbiAgICAgICAgcCA9IHAucmVwbGFjZSgvXFwvL2csICdcXFxcJyk7XG4gICAgICAgIC8vIHJlbW92ZSByZWR1bmRhbnQgc2xhc2hlc1xuICAgICAgICByZXR1cm4gcC5yZXBsYWNlKC9cXFxcXFxcXCsvZywgJ1xcXFwnKTtcbiAgICB9XG4gICAgLy8gcmVtb3ZlIHJlZHVuZGFudCBzbGFzaGVzXG4gICAgcmV0dXJuIHAucmVwbGFjZSgvXFwvXFwvKy9nLCAnLycpO1xufVxuLy8gb24gTWFjL0xpbnV4LCB0ZXN0IHRoZSBleGVjdXRlIGJpdFxuLy8gICAgIFIgICBXICBYICBSICBXIFggUiBXIFhcbi8vICAgMjU2IDEyOCA2NCAzMiAxNiA4IDQgMiAxXG5mdW5jdGlvbiBpc1VuaXhFeGVjdXRhYmxlKHN0YXRzKSB7XG4gICAgcmV0dXJuICgoc3RhdHMubW9kZSAmIDEpID4gMCB8fFxuICAgICAgICAoKHN0YXRzLm1vZGUgJiA4KSA+IDAgJiYgc3RhdHMuZ2lkID09PSBwcm9jZXNzLmdldGdpZCgpKSB8fFxuICAgICAgICAoKHN0YXRzLm1vZGUgJiA2NCkgPiAwICYmIHN0YXRzLnVpZCA9PT0gcHJvY2Vzcy5nZXR1aWQoKSkpO1xufVxuLy8gR2V0IHRoZSBwYXRoIG9mIGNtZC5leGUgaW4gd2luZG93c1xuZnVuY3Rpb24gZ2V0Q21kUGF0aCgpIHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuIChfYSA9IHByb2Nlc3MuZW52WydDT01TUEVDJ10pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGBjbWQuZXhlYDtcbn1cbmV4cG9ydHMuZ2V0Q21kUGF0aCA9IGdldENtZFBhdGg7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pby11dGlsLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfSk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmZpbmRJblBhdGggPSBleHBvcnRzLndoaWNoID0gZXhwb3J0cy5ta2RpclAgPSBleHBvcnRzLnJtUkYgPSBleHBvcnRzLm12ID0gZXhwb3J0cy5jcCA9IHZvaWQgMDtcbmNvbnN0IGFzc2VydF8xID0gcmVxdWlyZShcImFzc2VydFwiKTtcbmNvbnN0IHBhdGggPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcInBhdGhcIikpO1xuY29uc3QgaW9VdGlsID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL2lvLXV0aWxcIikpO1xuLyoqXG4gKiBDb3BpZXMgYSBmaWxlIG9yIGZvbGRlci5cbiAqIEJhc2VkIG9mZiBvZiBzaGVsbGpzIC0gaHR0cHM6Ly9naXRodWIuY29tL3NoZWxsanMvc2hlbGxqcy9ibG9iLzkyMzdmNjZjNTJlNWRhYTQwNDU4Zjk0Zjk1NjVlMThlODEzMmY1YTYvc3JjL2NwLmpzXG4gKlxuICogQHBhcmFtICAgICBzb3VyY2UgICAgc291cmNlIHBhdGhcbiAqIEBwYXJhbSAgICAgZGVzdCAgICAgIGRlc3RpbmF0aW9uIHBhdGhcbiAqIEBwYXJhbSAgICAgb3B0aW9ucyAgIG9wdGlvbmFsLiBTZWUgQ29weU9wdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIGNwKHNvdXJjZSwgZGVzdCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgeyBmb3JjZSwgcmVjdXJzaXZlLCBjb3B5U291cmNlRGlyZWN0b3J5IH0gPSByZWFkQ29weU9wdGlvbnMob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGRlc3RTdGF0ID0gKHlpZWxkIGlvVXRpbC5leGlzdHMoZGVzdCkpID8geWllbGQgaW9VdGlsLnN0YXQoZGVzdCkgOiBudWxsO1xuICAgICAgICAvLyBEZXN0IGlzIGFuIGV4aXN0aW5nIGZpbGUsIGJ1dCBub3QgZm9yY2luZ1xuICAgICAgICBpZiAoZGVzdFN0YXQgJiYgZGVzdFN0YXQuaXNGaWxlKCkgJiYgIWZvcmNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgZGVzdCBpcyBhbiBleGlzdGluZyBkaXJlY3RvcnksIHNob3VsZCBjb3B5IGluc2lkZS5cbiAgICAgICAgY29uc3QgbmV3RGVzdCA9IGRlc3RTdGF0ICYmIGRlc3RTdGF0LmlzRGlyZWN0b3J5KCkgJiYgY29weVNvdXJjZURpcmVjdG9yeVxuICAgICAgICAgICAgPyBwYXRoLmpvaW4oZGVzdCwgcGF0aC5iYXNlbmFtZShzb3VyY2UpKVxuICAgICAgICAgICAgOiBkZXN0O1xuICAgICAgICBpZiAoISh5aWVsZCBpb1V0aWwuZXhpc3RzKHNvdXJjZSkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYG5vIHN1Y2ggZmlsZSBvciBkaXJlY3Rvcnk6ICR7c291cmNlfWApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNvdXJjZVN0YXQgPSB5aWVsZCBpb1V0aWwuc3RhdChzb3VyY2UpO1xuICAgICAgICBpZiAoc291cmNlU3RhdC5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgICAgICBpZiAoIXJlY3Vyc2l2ZSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGNvcHkuICR7c291cmNlfSBpcyBhIGRpcmVjdG9yeSwgYnV0IHRyaWVkIHRvIGNvcHkgd2l0aG91dCByZWN1cnNpdmUgZmxhZy5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHlpZWxkIGNwRGlyUmVjdXJzaXZlKHNvdXJjZSwgbmV3RGVzdCwgMCwgZm9yY2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHBhdGgucmVsYXRpdmUoc291cmNlLCBuZXdEZXN0KSA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICAvLyBhIGZpbGUgY2Fubm90IGJlIGNvcGllZCB0byBpdHNlbGZcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCcke25ld0Rlc3R9JyBhbmQgJyR7c291cmNlfScgYXJlIHRoZSBzYW1lIGZpbGVgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHlpZWxkIGNvcHlGaWxlKHNvdXJjZSwgbmV3RGVzdCwgZm9yY2UpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5leHBvcnRzLmNwID0gY3A7XG4vKipcbiAqIE1vdmVzIGEgcGF0aC5cbiAqXG4gKiBAcGFyYW0gICAgIHNvdXJjZSAgICBzb3VyY2UgcGF0aFxuICogQHBhcmFtICAgICBkZXN0ICAgICAgZGVzdGluYXRpb24gcGF0aFxuICogQHBhcmFtICAgICBvcHRpb25zICAgb3B0aW9uYWwuIFNlZSBNb3ZlT3B0aW9ucy5cbiAqL1xuZnVuY3Rpb24gbXYoc291cmNlLCBkZXN0LCBvcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBpZiAoeWllbGQgaW9VdGlsLmV4aXN0cyhkZXN0KSkge1xuICAgICAgICAgICAgbGV0IGRlc3RFeGlzdHMgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKHlpZWxkIGlvVXRpbC5pc0RpcmVjdG9yeShkZXN0KSkge1xuICAgICAgICAgICAgICAgIC8vIElmIGRlc3QgaXMgZGlyZWN0b3J5IGNvcHkgc3JjIGludG8gZGVzdFxuICAgICAgICAgICAgICAgIGRlc3QgPSBwYXRoLmpvaW4oZGVzdCwgcGF0aC5iYXNlbmFtZShzb3VyY2UpKTtcbiAgICAgICAgICAgICAgICBkZXN0RXhpc3RzID0geWllbGQgaW9VdGlsLmV4aXN0cyhkZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkZXN0RXhpc3RzKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZm9yY2UgPT0gbnVsbCB8fCBvcHRpb25zLmZvcmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIHJtUkYoZGVzdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rlc3RpbmF0aW9uIGFscmVhZHkgZXhpc3RzJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHlpZWxkIG1rZGlyUChwYXRoLmRpcm5hbWUoZGVzdCkpO1xuICAgICAgICB5aWVsZCBpb1V0aWwucmVuYW1lKHNvdXJjZSwgZGVzdCk7XG4gICAgfSk7XG59XG5leHBvcnRzLm12ID0gbXY7XG4vKipcbiAqIFJlbW92ZSBhIHBhdGggcmVjdXJzaXZlbHkgd2l0aCBmb3JjZVxuICpcbiAqIEBwYXJhbSBpbnB1dFBhdGggcGF0aCB0byByZW1vdmVcbiAqL1xuZnVuY3Rpb24gcm1SRihpbnB1dFBhdGgpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBpZiAoaW9VdGlsLklTX1dJTkRPV1MpIHtcbiAgICAgICAgICAgIC8vIENoZWNrIGZvciBpbnZhbGlkIGNoYXJhY3RlcnNcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3dpbmRvd3Mvd2luMzIvZmlsZWlvL25hbWluZy1hLWZpbGVcbiAgICAgICAgICAgIGlmICgvWypcIjw+fF0vLnRlc3QoaW5wdXRQYXRoKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRmlsZSBwYXRoIG11c3Qgbm90IGNvbnRhaW4gYCpgLCBgXCJgLCBgPGAsIGA+YCBvciBgfGAgb24gV2luZG93cycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBub3RlIGlmIHBhdGggZG9lcyBub3QgZXhpc3QsIGVycm9yIGlzIHNpbGVudFxuICAgICAgICAgICAgeWllbGQgaW9VdGlsLnJtKGlucHV0UGF0aCwge1xuICAgICAgICAgICAgICAgIGZvcmNlOiB0cnVlLFxuICAgICAgICAgICAgICAgIG1heFJldHJpZXM6IDMsXG4gICAgICAgICAgICAgICAgcmVjdXJzaXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHJldHJ5RGVsYXk6IDMwMFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGaWxlIHdhcyB1bmFibGUgdG8gYmUgcmVtb3ZlZCAke2Vycn1gKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuZXhwb3J0cy5ybVJGID0gcm1SRjtcbi8qKlxuICogTWFrZSBhIGRpcmVjdG9yeS4gIENyZWF0ZXMgdGhlIGZ1bGwgcGF0aCB3aXRoIGZvbGRlcnMgaW4gYmV0d2VlblxuICogV2lsbCB0aHJvdyBpZiBpdCBmYWlsc1xuICpcbiAqIEBwYXJhbSAgIGZzUGF0aCAgICAgICAgcGF0aCB0byBjcmVhdGVcbiAqIEByZXR1cm5zIFByb21pc2U8dm9pZD5cbiAqL1xuZnVuY3Rpb24gbWtkaXJQKGZzUGF0aCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGFzc2VydF8xLm9rKGZzUGF0aCwgJ2EgcGF0aCBhcmd1bWVudCBtdXN0IGJlIHByb3ZpZGVkJyk7XG4gICAgICAgIHlpZWxkIGlvVXRpbC5ta2Rpcihmc1BhdGgsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIH0pO1xufVxuZXhwb3J0cy5ta2RpclAgPSBta2RpclA7XG4vKipcbiAqIFJldHVybnMgcGF0aCBvZiBhIHRvb2wgaGFkIHRoZSB0b29sIGFjdHVhbGx5IGJlZW4gaW52b2tlZC4gIFJlc29sdmVzIHZpYSBwYXRocy5cbiAqIElmIHlvdSBjaGVjayBhbmQgdGhlIHRvb2wgZG9lcyBub3QgZXhpc3QsIGl0IHdpbGwgdGhyb3cuXG4gKlxuICogQHBhcmFtICAgICB0b29sICAgICAgICAgICAgICBuYW1lIG9mIHRoZSB0b29sXG4gKiBAcGFyYW0gICAgIGNoZWNrICAgICAgICAgICAgIHdoZXRoZXIgdG8gY2hlY2sgaWYgdG9vbCBleGlzdHNcbiAqIEByZXR1cm5zICAgUHJvbWlzZTxzdHJpbmc+ICAgcGF0aCB0byB0b29sXG4gKi9cbmZ1bmN0aW9uIHdoaWNoKHRvb2wsIGNoZWNrKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgaWYgKCF0b29sKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJwYXJhbWV0ZXIgJ3Rvb2wnIGlzIHJlcXVpcmVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHJlY3Vyc2l2ZSB3aGVuIGNoZWNrPXRydWVcbiAgICAgICAgaWYgKGNoZWNrKSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB5aWVsZCB3aGljaCh0b29sLCBmYWxzZSk7XG4gICAgICAgICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICAgICAgICAgIGlmIChpb1V0aWwuSVNfV0lORE9XUykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBsb2NhdGUgZXhlY3V0YWJsZSBmaWxlOiAke3Rvb2x9LiBQbGVhc2UgdmVyaWZ5IGVpdGhlciB0aGUgZmlsZSBwYXRoIGV4aXN0cyBvciB0aGUgZmlsZSBjYW4gYmUgZm91bmQgd2l0aGluIGEgZGlyZWN0b3J5IHNwZWNpZmllZCBieSB0aGUgUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZS4gQWxzbyB2ZXJpZnkgdGhlIGZpbGUgaGFzIGEgdmFsaWQgZXh0ZW5zaW9uIGZvciBhbiBleGVjdXRhYmxlIGZpbGUuYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBsb2NhdGUgZXhlY3V0YWJsZSBmaWxlOiAke3Rvb2x9LiBQbGVhc2UgdmVyaWZ5IGVpdGhlciB0aGUgZmlsZSBwYXRoIGV4aXN0cyBvciB0aGUgZmlsZSBjYW4gYmUgZm91bmQgd2l0aGluIGEgZGlyZWN0b3J5IHNwZWNpZmllZCBieSB0aGUgUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZS4gQWxzbyBjaGVjayB0aGUgZmlsZSBtb2RlIHRvIHZlcmlmeSB0aGUgZmlsZSBpcyBleGVjdXRhYmxlLmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWF0Y2hlcyA9IHlpZWxkIGZpbmRJblBhdGgodG9vbCk7XG4gICAgICAgIGlmIChtYXRjaGVzICYmIG1hdGNoZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXNbMF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH0pO1xufVxuZXhwb3J0cy53aGljaCA9IHdoaWNoO1xuLyoqXG4gKiBSZXR1cm5zIGEgbGlzdCBvZiBhbGwgb2NjdXJyZW5jZXMgb2YgdGhlIGdpdmVuIHRvb2wgb24gdGhlIHN5c3RlbSBwYXRoLlxuICpcbiAqIEByZXR1cm5zICAgUHJvbWlzZTxzdHJpbmdbXT4gIHRoZSBwYXRocyBvZiB0aGUgdG9vbFxuICovXG5mdW5jdGlvbiBmaW5kSW5QYXRoKHRvb2wpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBpZiAoIXRvb2wpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInBhcmFtZXRlciAndG9vbCcgaXMgcmVxdWlyZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gYnVpbGQgdGhlIGxpc3Qgb2YgZXh0ZW5zaW9ucyB0byB0cnlcbiAgICAgICAgY29uc3QgZXh0ZW5zaW9ucyA9IFtdO1xuICAgICAgICBpZiAoaW9VdGlsLklTX1dJTkRPV1MgJiYgcHJvY2Vzcy5lbnZbJ1BBVEhFWFQnXSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBleHRlbnNpb24gb2YgcHJvY2Vzcy5lbnZbJ1BBVEhFWFQnXS5zcGxpdChwYXRoLmRlbGltaXRlcikpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXh0ZW5zaW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbnMucHVzaChleHRlbnNpb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBpZiBpdCdzIHJvb3RlZCwgcmV0dXJuIGl0IGlmIGV4aXN0cy4gb3RoZXJ3aXNlIHJldHVybiBlbXB0eS5cbiAgICAgICAgaWYgKGlvVXRpbC5pc1Jvb3RlZCh0b29sKSkge1xuICAgICAgICAgICAgY29uc3QgZmlsZVBhdGggPSB5aWVsZCBpb1V0aWwudHJ5R2V0RXhlY3V0YWJsZVBhdGgodG9vbCwgZXh0ZW5zaW9ucyk7XG4gICAgICAgICAgICBpZiAoZmlsZVBhdGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW2ZpbGVQYXRoXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiBhbnkgcGF0aCBzZXBhcmF0b3JzLCByZXR1cm4gZW1wdHlcbiAgICAgICAgaWYgKHRvb2wuaW5jbHVkZXMocGF0aC5zZXApKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgLy8gYnVpbGQgdGhlIGxpc3Qgb2YgZGlyZWN0b3JpZXNcbiAgICAgICAgLy9cbiAgICAgICAgLy8gTm90ZSwgdGVjaG5pY2FsbHkgXCJ3aGVyZVwiIGNoZWNrcyB0aGUgY3VycmVudCBkaXJlY3Rvcnkgb24gV2luZG93cy4gRnJvbSBhIHRvb2xraXQgcGVyc3BlY3RpdmUsXG4gICAgICAgIC8vIGl0IGZlZWxzIGxpa2Ugd2Ugc2hvdWxkIG5vdCBkbyB0aGlzLiBDaGVja2luZyB0aGUgY3VycmVudCBkaXJlY3Rvcnkgc2VlbXMgbGlrZSBtb3JlIG9mIGEgdXNlXG4gICAgICAgIC8vIGNhc2Ugb2YgYSBzaGVsbCwgYW5kIHRoZSB3aGljaCgpIGZ1bmN0aW9uIGV4cG9zZWQgYnkgdGhlIHRvb2xraXQgc2hvdWxkIHN0cml2ZSBmb3IgY29uc2lzdGVuY3lcbiAgICAgICAgLy8gYWNyb3NzIHBsYXRmb3Jtcy5cbiAgICAgICAgY29uc3QgZGlyZWN0b3JpZXMgPSBbXTtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52LlBBVEgpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcCBvZiBwcm9jZXNzLmVudi5QQVRILnNwbGl0KHBhdGguZGVsaW1pdGVyKSkge1xuICAgICAgICAgICAgICAgIGlmIChwKSB7XG4gICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yaWVzLnB1c2gocCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGZpbmQgYWxsIG1hdGNoZXNcbiAgICAgICAgY29uc3QgbWF0Y2hlcyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGRpcmVjdG9yeSBvZiBkaXJlY3Rvcmllcykge1xuICAgICAgICAgICAgY29uc3QgZmlsZVBhdGggPSB5aWVsZCBpb1V0aWwudHJ5R2V0RXhlY3V0YWJsZVBhdGgocGF0aC5qb2luKGRpcmVjdG9yeSwgdG9vbCksIGV4dGVuc2lvbnMpO1xuICAgICAgICAgICAgaWYgKGZpbGVQYXRoKSB7XG4gICAgICAgICAgICAgICAgbWF0Y2hlcy5wdXNoKGZpbGVQYXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWF0Y2hlcztcbiAgICB9KTtcbn1cbmV4cG9ydHMuZmluZEluUGF0aCA9IGZpbmRJblBhdGg7XG5mdW5jdGlvbiByZWFkQ29weU9wdGlvbnMob3B0aW9ucykge1xuICAgIGNvbnN0IGZvcmNlID0gb3B0aW9ucy5mb3JjZSA9PSBudWxsID8gdHJ1ZSA6IG9wdGlvbnMuZm9yY2U7XG4gICAgY29uc3QgcmVjdXJzaXZlID0gQm9vbGVhbihvcHRpb25zLnJlY3Vyc2l2ZSk7XG4gICAgY29uc3QgY29weVNvdXJjZURpcmVjdG9yeSA9IG9wdGlvbnMuY29weVNvdXJjZURpcmVjdG9yeSA9PSBudWxsXG4gICAgICAgID8gdHJ1ZVxuICAgICAgICA6IEJvb2xlYW4ob3B0aW9ucy5jb3B5U291cmNlRGlyZWN0b3J5KTtcbiAgICByZXR1cm4geyBmb3JjZSwgcmVjdXJzaXZlLCBjb3B5U291cmNlRGlyZWN0b3J5IH07XG59XG5mdW5jdGlvbiBjcERpclJlY3Vyc2l2ZShzb3VyY2VEaXIsIGRlc3REaXIsIGN1cnJlbnREZXB0aCwgZm9yY2UpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAvLyBFbnN1cmUgdGhlcmUgaXMgbm90IGEgcnVuIGF3YXkgcmVjdXJzaXZlIGNvcHlcbiAgICAgICAgaWYgKGN1cnJlbnREZXB0aCA+PSAyNTUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGN1cnJlbnREZXB0aCsrO1xuICAgICAgICB5aWVsZCBta2RpclAoZGVzdERpcik7XG4gICAgICAgIGNvbnN0IGZpbGVzID0geWllbGQgaW9VdGlsLnJlYWRkaXIoc291cmNlRGlyKTtcbiAgICAgICAgZm9yIChjb25zdCBmaWxlTmFtZSBvZiBmaWxlcykge1xuICAgICAgICAgICAgY29uc3Qgc3JjRmlsZSA9IGAke3NvdXJjZURpcn0vJHtmaWxlTmFtZX1gO1xuICAgICAgICAgICAgY29uc3QgZGVzdEZpbGUgPSBgJHtkZXN0RGlyfS8ke2ZpbGVOYW1lfWA7XG4gICAgICAgICAgICBjb25zdCBzcmNGaWxlU3RhdCA9IHlpZWxkIGlvVXRpbC5sc3RhdChzcmNGaWxlKTtcbiAgICAgICAgICAgIGlmIChzcmNGaWxlU3RhdC5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgICAgICAgICAgLy8gUmVjdXJzZVxuICAgICAgICAgICAgICAgIHlpZWxkIGNwRGlyUmVjdXJzaXZlKHNyY0ZpbGUsIGRlc3RGaWxlLCBjdXJyZW50RGVwdGgsIGZvcmNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHlpZWxkIGNvcHlGaWxlKHNyY0ZpbGUsIGRlc3RGaWxlLCBmb3JjZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2hhbmdlIHRoZSBtb2RlIGZvciB0aGUgbmV3bHkgY3JlYXRlZCBkaXJlY3RvcnlcbiAgICAgICAgeWllbGQgaW9VdGlsLmNobW9kKGRlc3REaXIsICh5aWVsZCBpb1V0aWwuc3RhdChzb3VyY2VEaXIpKS5tb2RlKTtcbiAgICB9KTtcbn1cbi8vIEJ1ZmZlcmVkIGZpbGUgY29weVxuZnVuY3Rpb24gY29weUZpbGUoc3JjRmlsZSwgZGVzdEZpbGUsIGZvcmNlKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgaWYgKCh5aWVsZCBpb1V0aWwubHN0YXQoc3JjRmlsZSkpLmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICAgICAgICAgIC8vIHVubGluay9yZS1saW5rIGl0XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHlpZWxkIGlvVXRpbC5sc3RhdChkZXN0RmlsZSk7XG4gICAgICAgICAgICAgICAgeWllbGQgaW9VdGlsLnVubGluayhkZXN0RmlsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIC8vIFRyeSB0byBvdmVycmlkZSBmaWxlIHBlcm1pc3Npb25cbiAgICAgICAgICAgICAgICBpZiAoZS5jb2RlID09PSAnRVBFUk0nKSB7XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIGlvVXRpbC5jaG1vZChkZXN0RmlsZSwgJzA2NjYnKTtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgaW9VdGlsLnVubGluayhkZXN0RmlsZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIG90aGVyIGVycm9ycyA9IGl0IGRvZXNuJ3QgZXhpc3QsIG5vIHdvcmsgdG8gZG9cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIENvcHkgb3ZlciBzeW1saW5rXG4gICAgICAgICAgICBjb25zdCBzeW1saW5rRnVsbCA9IHlpZWxkIGlvVXRpbC5yZWFkbGluayhzcmNGaWxlKTtcbiAgICAgICAgICAgIHlpZWxkIGlvVXRpbC5zeW1saW5rKHN5bWxpbmtGdWxsLCBkZXN0RmlsZSwgaW9VdGlsLklTX1dJTkRPV1MgPyAnanVuY3Rpb24nIDogbnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoISh5aWVsZCBpb1V0aWwuZXhpc3RzKGRlc3RGaWxlKSkgfHwgZm9yY2UpIHtcbiAgICAgICAgICAgIHlpZWxkIGlvVXRpbC5jb3B5RmlsZShzcmNGaWxlLCBkZXN0RmlsZSk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlvLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfSk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmFyZ1N0cmluZ1RvQXJyYXkgPSBleHBvcnRzLlRvb2xSdW5uZXIgPSB2b2lkIDA7XG5jb25zdCBvcyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwib3NcIikpO1xuY29uc3QgZXZlbnRzID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJldmVudHNcIikpO1xuY29uc3QgY2hpbGQgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcImNoaWxkX3Byb2Nlc3NcIikpO1xuY29uc3QgcGF0aCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwicGF0aFwiKSk7XG5jb25zdCBpbyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiQGFjdGlvbnMvaW9cIikpO1xuY29uc3QgaW9VdGlsID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJAYWN0aW9ucy9pby9saWIvaW8tdXRpbFwiKSk7XG5jb25zdCB0aW1lcnNfMSA9IHJlcXVpcmUoXCJ0aW1lcnNcIik7XG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvdW5ib3VuZC1tZXRob2QgKi9cbmNvbnN0IElTX1dJTkRPV1MgPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInO1xuLypcbiAqIENsYXNzIGZvciBydW5uaW5nIGNvbW1hbmQgbGluZSB0b29scy4gSGFuZGxlcyBxdW90aW5nIGFuZCBhcmcgcGFyc2luZyBpbiBhIHBsYXRmb3JtIGFnbm9zdGljIHdheS5cbiAqL1xuY2xhc3MgVG9vbFJ1bm5lciBleHRlbmRzIGV2ZW50cy5FdmVudEVtaXR0ZXIge1xuICAgIGNvbnN0cnVjdG9yKHRvb2xQYXRoLCBhcmdzLCBvcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIGlmICghdG9vbFBhdGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhcmFtZXRlciAndG9vbFBhdGgnIGNhbm5vdCBiZSBudWxsIG9yIGVtcHR5LlwiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRvb2xQYXRoID0gdG9vbFBhdGg7XG4gICAgICAgIHRoaXMuYXJncyA9IGFyZ3MgfHwgW107XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgfVxuICAgIF9kZWJ1ZyhtZXNzYWdlKSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMubGlzdGVuZXJzICYmIHRoaXMub3B0aW9ucy5saXN0ZW5lcnMuZGVidWcpIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5saXN0ZW5lcnMuZGVidWcobWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX2dldENvbW1hbmRTdHJpbmcob3B0aW9ucywgbm9QcmVmaXgpIHtcbiAgICAgICAgY29uc3QgdG9vbFBhdGggPSB0aGlzLl9nZXRTcGF3bkZpbGVOYW1lKCk7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSB0aGlzLl9nZXRTcGF3bkFyZ3Mob3B0aW9ucyk7XG4gICAgICAgIGxldCBjbWQgPSBub1ByZWZpeCA/ICcnIDogJ1tjb21tYW5kXSc7IC8vIG9taXQgcHJlZml4IHdoZW4gcGlwZWQgdG8gYSBzZWNvbmQgdG9vbFxuICAgICAgICBpZiAoSVNfV0lORE9XUykge1xuICAgICAgICAgICAgLy8gV2luZG93cyArIGNtZCBmaWxlXG4gICAgICAgICAgICBpZiAodGhpcy5faXNDbWRGaWxlKCkpIHtcbiAgICAgICAgICAgICAgICBjbWQgKz0gdG9vbFBhdGg7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBhIG9mIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgY21kICs9IGAgJHthfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gV2luZG93cyArIHZlcmJhdGltXG4gICAgICAgICAgICBlbHNlIGlmIChvcHRpb25zLndpbmRvd3NWZXJiYXRpbUFyZ3VtZW50cykge1xuICAgICAgICAgICAgICAgIGNtZCArPSBgXCIke3Rvb2xQYXRofVwiYDtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGEgb2YgYXJncykge1xuICAgICAgICAgICAgICAgICAgICBjbWQgKz0gYCAke2F9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBXaW5kb3dzIChyZWd1bGFyKVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY21kICs9IHRoaXMuX3dpbmRvd3NRdW90ZUNtZEFyZyh0b29sUGF0aCk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBhIG9mIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgY21kICs9IGAgJHt0aGlzLl93aW5kb3dzUXVvdGVDbWRBcmcoYSl9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBPU1gvTGludXggLSB0aGlzIGNhbiBsaWtlbHkgYmUgaW1wcm92ZWQgd2l0aCBzb21lIGZvcm0gb2YgcXVvdGluZy5cbiAgICAgICAgICAgIC8vIGNyZWF0aW5nIHByb2Nlc3NlcyBvbiBVbml4IGlzIGZ1bmRhbWVudGFsbHkgZGlmZmVyZW50IHRoYW4gV2luZG93cy5cbiAgICAgICAgICAgIC8vIG9uIFVuaXgsIGV4ZWN2cCgpIHRha2VzIGFuIGFyZyBhcnJheS5cbiAgICAgICAgICAgIGNtZCArPSB0b29sUGF0aDtcbiAgICAgICAgICAgIGZvciAoY29uc3QgYSBvZiBhcmdzKSB7XG4gICAgICAgICAgICAgICAgY21kICs9IGAgJHthfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNtZDtcbiAgICB9XG4gICAgX3Byb2Nlc3NMaW5lQnVmZmVyKGRhdGEsIHN0ckJ1ZmZlciwgb25MaW5lKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsZXQgcyA9IHN0ckJ1ZmZlciArIGRhdGEudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIGxldCBuID0gcy5pbmRleE9mKG9zLkVPTCk7XG4gICAgICAgICAgICB3aGlsZSAobiA+IC0xKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGluZSA9IHMuc3Vic3RyaW5nKDAsIG4pO1xuICAgICAgICAgICAgICAgIG9uTGluZShsaW5lKTtcbiAgICAgICAgICAgICAgICAvLyB0aGUgcmVzdCBvZiB0aGUgc3RyaW5nIC4uLlxuICAgICAgICAgICAgICAgIHMgPSBzLnN1YnN0cmluZyhuICsgb3MuRU9MLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgbiA9IHMuaW5kZXhPZihvcy5FT0wpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHM7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgLy8gc3RyZWFtaW5nIGxpbmVzIHRvIGNvbnNvbGUgaXMgYmVzdCBlZmZvcnQuICBEb24ndCBmYWlsIGEgYnVpbGQuXG4gICAgICAgICAgICB0aGlzLl9kZWJ1ZyhgZXJyb3IgcHJvY2Vzc2luZyBsaW5lLiBGYWlsZWQgd2l0aCBlcnJvciAke2Vycn1gKTtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgICBfZ2V0U3Bhd25GaWxlTmFtZSgpIHtcbiAgICAgICAgaWYgKElTX1dJTkRPV1MpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9pc0NtZEZpbGUoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcm9jZXNzLmVudlsnQ09NU1BFQyddIHx8ICdjbWQuZXhlJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy50b29sUGF0aDtcbiAgICB9XG4gICAgX2dldFNwYXduQXJncyhvcHRpb25zKSB7XG4gICAgICAgIGlmIChJU19XSU5ET1dTKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5faXNDbWRGaWxlKCkpIHtcbiAgICAgICAgICAgICAgICBsZXQgYXJnbGluZSA9IGAvRCAvUyAvQyBcIiR7dGhpcy5fd2luZG93c1F1b3RlQ21kQXJnKHRoaXMudG9vbFBhdGgpfWA7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBhIG9mIHRoaXMuYXJncykge1xuICAgICAgICAgICAgICAgICAgICBhcmdsaW5lICs9ICcgJztcbiAgICAgICAgICAgICAgICAgICAgYXJnbGluZSArPSBvcHRpb25zLndpbmRvd3NWZXJiYXRpbUFyZ3VtZW50c1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBhXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuX3dpbmRvd3NRdW90ZUNtZEFyZyhhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXJnbGluZSArPSAnXCInO1xuICAgICAgICAgICAgICAgIHJldHVybiBbYXJnbGluZV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuYXJncztcbiAgICB9XG4gICAgX2VuZHNXaXRoKHN0ciwgZW5kKSB7XG4gICAgICAgIHJldHVybiBzdHIuZW5kc1dpdGgoZW5kKTtcbiAgICB9XG4gICAgX2lzQ21kRmlsZSgpIHtcbiAgICAgICAgY29uc3QgdXBwZXJUb29sUGF0aCA9IHRoaXMudG9vbFBhdGgudG9VcHBlckNhc2UoKTtcbiAgICAgICAgcmV0dXJuICh0aGlzLl9lbmRzV2l0aCh1cHBlclRvb2xQYXRoLCAnLkNNRCcpIHx8XG4gICAgICAgICAgICB0aGlzLl9lbmRzV2l0aCh1cHBlclRvb2xQYXRoLCAnLkJBVCcpKTtcbiAgICB9XG4gICAgX3dpbmRvd3NRdW90ZUNtZEFyZyhhcmcpIHtcbiAgICAgICAgLy8gZm9yIC5leGUsIGFwcGx5IHRoZSBub3JtYWwgcXVvdGluZyBydWxlcyB0aGF0IGxpYnV2IGFwcGxpZXNcbiAgICAgICAgaWYgKCF0aGlzLl9pc0NtZEZpbGUoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3V2UXVvdGVDbWRBcmcoYXJnKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBvdGhlcndpc2UgYXBwbHkgcXVvdGluZyBydWxlcyBzcGVjaWZpYyB0byB0aGUgY21kLmV4ZSBjb21tYW5kIGxpbmUgcGFyc2VyLlxuICAgICAgICAvLyB0aGUgbGlidXYgcnVsZXMgYXJlIGdlbmVyaWMgYW5kIGFyZSBub3QgZGVzaWduZWQgc3BlY2lmaWNhbGx5IGZvciBjbWQuZXhlXG4gICAgICAgIC8vIGNvbW1hbmQgbGluZSBwYXJzZXIuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIGZvciBhIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHRoZSBjbWQuZXhlIGNvbW1hbmQgbGluZSBwYXJzZXIsIHJlZmVyIHRvXG4gICAgICAgIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNDA5NDY5OS9ob3ctZG9lcy10aGUtd2luZG93cy1jb21tYW5kLWludGVycHJldGVyLWNtZC1leGUtcGFyc2Utc2NyaXB0cy83OTcwOTEyIzc5NzA5MTJcbiAgICAgICAgLy8gbmVlZCBxdW90ZXMgZm9yIGVtcHR5IGFyZ1xuICAgICAgICBpZiAoIWFyZykge1xuICAgICAgICAgICAgcmV0dXJuICdcIlwiJztcbiAgICAgICAgfVxuICAgICAgICAvLyBkZXRlcm1pbmUgd2hldGhlciB0aGUgYXJnIG5lZWRzIHRvIGJlIHF1b3RlZFxuICAgICAgICBjb25zdCBjbWRTcGVjaWFsQ2hhcnMgPSBbXG4gICAgICAgICAgICAnICcsXG4gICAgICAgICAgICAnXFx0JyxcbiAgICAgICAgICAgICcmJyxcbiAgICAgICAgICAgICcoJyxcbiAgICAgICAgICAgICcpJyxcbiAgICAgICAgICAgICdbJyxcbiAgICAgICAgICAgICddJyxcbiAgICAgICAgICAgICd7JyxcbiAgICAgICAgICAgICd9JyxcbiAgICAgICAgICAgICdeJyxcbiAgICAgICAgICAgICc9JyxcbiAgICAgICAgICAgICc7JyxcbiAgICAgICAgICAgICchJyxcbiAgICAgICAgICAgIFwiJ1wiLFxuICAgICAgICAgICAgJysnLFxuICAgICAgICAgICAgJywnLFxuICAgICAgICAgICAgJ2AnLFxuICAgICAgICAgICAgJ34nLFxuICAgICAgICAgICAgJ3wnLFxuICAgICAgICAgICAgJzwnLFxuICAgICAgICAgICAgJz4nLFxuICAgICAgICAgICAgJ1wiJ1xuICAgICAgICBdO1xuICAgICAgICBsZXQgbmVlZHNRdW90ZXMgPSBmYWxzZTtcbiAgICAgICAgZm9yIChjb25zdCBjaGFyIG9mIGFyZykge1xuICAgICAgICAgICAgaWYgKGNtZFNwZWNpYWxDaGFycy5zb21lKHggPT4geCA9PT0gY2hhcikpIHtcbiAgICAgICAgICAgICAgICBuZWVkc1F1b3RlcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gc2hvcnQtY2lyY3VpdCBpZiBxdW90ZXMgbm90IG5lZWRlZFxuICAgICAgICBpZiAoIW5lZWRzUXVvdGVzKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJnO1xuICAgICAgICB9XG4gICAgICAgIC8vIHRoZSBmb2xsb3dpbmcgcXVvdGluZyBydWxlcyBhcmUgdmVyeSBzaW1pbGFyIHRvIHRoZSBydWxlcyB0aGF0IGJ5IGxpYnV2IGFwcGxpZXMuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIDEpIHdyYXAgdGhlIHN0cmluZyBpbiBxdW90ZXNcbiAgICAgICAgLy9cbiAgICAgICAgLy8gMikgZG91YmxlLXVwIHF1b3RlcyAtIGkuZS4gXCIgPT4gXCJcIlxuICAgICAgICAvL1xuICAgICAgICAvLyAgICB0aGlzIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBsaWJ1diBxdW90aW5nIHJ1bGVzLiBsaWJ1diByZXBsYWNlcyBcIiB3aXRoIFxcXCIsIHdoaWNoIHVuZm9ydHVuYXRlbHlcbiAgICAgICAgLy8gICAgZG9lc24ndCB3b3JrIHdlbGwgd2l0aCBhIGNtZC5leGUgY29tbWFuZCBsaW5lLlxuICAgICAgICAvL1xuICAgICAgICAvLyAgICBub3RlLCByZXBsYWNpbmcgXCIgd2l0aCBcIlwiIGFsc28gd29ya3Mgd2VsbCBpZiB0aGUgYXJnIGlzIHBhc3NlZCB0byBhIGRvd25zdHJlYW0gLk5FVCBjb25zb2xlIGFwcC5cbiAgICAgICAgLy8gICAgZm9yIGV4YW1wbGUsIHRoZSBjb21tYW5kIGxpbmU6XG4gICAgICAgIC8vICAgICAgICAgIGZvby5leGUgXCJteWFyZzpcIlwibXkgdmFsXCJcIlwiXG4gICAgICAgIC8vICAgIGlzIHBhcnNlZCBieSBhIC5ORVQgY29uc29sZSBhcHAgaW50byBhbiBhcmcgYXJyYXk6XG4gICAgICAgIC8vICAgICAgICAgIFsgXCJteWFyZzpcXFwibXkgdmFsXFxcIlwiIF1cbiAgICAgICAgLy8gICAgd2hpY2ggaXMgdGhlIHNhbWUgZW5kIHJlc3VsdCB3aGVuIGFwcGx5aW5nIGxpYnV2IHF1b3RpbmcgcnVsZXMuIGFsdGhvdWdoIHRoZSBhY3R1YWxcbiAgICAgICAgLy8gICAgY29tbWFuZCBsaW5lIGZyb20gbGlidXYgcXVvdGluZyBydWxlcyB3b3VsZCBsb29rIGxpa2U6XG4gICAgICAgIC8vICAgICAgICAgIGZvby5leGUgXCJteWFyZzpcXFwibXkgdmFsXFxcIlwiXG4gICAgICAgIC8vXG4gICAgICAgIC8vIDMpIGRvdWJsZS11cCBzbGFzaGVzIHRoYXQgcHJlY2VkZSBhIHF1b3RlLFxuICAgICAgICAvLyAgICBlLmcuICBoZWxsbyBcXHdvcmxkICAgID0+IFwiaGVsbG8gXFx3b3JsZFwiXG4gICAgICAgIC8vICAgICAgICAgIGhlbGxvXFxcIndvcmxkICAgID0+IFwiaGVsbG9cXFxcXCJcIndvcmxkXCJcbiAgICAgICAgLy8gICAgICAgICAgaGVsbG9cXFxcXCJ3b3JsZCAgID0+IFwiaGVsbG9cXFxcXFxcXFwiXCJ3b3JsZFwiXG4gICAgICAgIC8vICAgICAgICAgIGhlbGxvIHdvcmxkXFwgICAgPT4gXCJoZWxsbyB3b3JsZFxcXFxcIlxuICAgICAgICAvL1xuICAgICAgICAvLyAgICB0ZWNobmljYWxseSB0aGlzIGlzIG5vdCByZXF1aXJlZCBmb3IgYSBjbWQuZXhlIGNvbW1hbmQgbGluZSwgb3IgdGhlIGJhdGNoIGFyZ3VtZW50IHBhcnNlci5cbiAgICAgICAgLy8gICAgdGhlIHJlYXNvbnMgZm9yIGluY2x1ZGluZyB0aGlzIGFzIGEgLmNtZCBxdW90aW5nIHJ1bGUgYXJlOlxuICAgICAgICAvL1xuICAgICAgICAvLyAgICBhKSB0aGlzIGlzIG9wdGltaXplZCBmb3IgdGhlIHNjZW5hcmlvIHdoZXJlIHRoZSBhcmd1bWVudCBpcyBwYXNzZWQgZnJvbSB0aGUgLmNtZCBmaWxlIHRvIGFuXG4gICAgICAgIC8vICAgICAgIGV4dGVybmFsIHByb2dyYW0uIG1hbnkgcHJvZ3JhbXMgKGUuZy4gLk5FVCBjb25zb2xlIGFwcHMpIHJlbHkgb24gdGhlIHNsYXNoLWRvdWJsaW5nIHJ1bGUuXG4gICAgICAgIC8vXG4gICAgICAgIC8vICAgIGIpIGl0J3Mgd2hhdCB3ZSd2ZSBiZWVuIGRvaW5nIHByZXZpb3VzbHkgKGJ5IGRlZmVycmluZyB0byBub2RlIGRlZmF1bHQgYmVoYXZpb3IpIGFuZCB3ZVxuICAgICAgICAvLyAgICAgICBoYXZlbid0IGhlYXJkIGFueSBjb21wbGFpbnRzIGFib3V0IHRoYXQgYXNwZWN0LlxuICAgICAgICAvL1xuICAgICAgICAvLyBub3RlLCBhIHdlYWtuZXNzIG9mIHRoZSBxdW90aW5nIHJ1bGVzIGNob3NlbiBoZXJlLCBpcyB0aGF0ICUgaXMgbm90IGVzY2FwZWQuIGluIGZhY3QsICUgY2Fubm90IGJlXG4gICAgICAgIC8vIGVzY2FwZWQgd2hlbiB1c2VkIG9uIHRoZSBjb21tYW5kIGxpbmUgZGlyZWN0bHkgLSBldmVuIHRob3VnaCB3aXRoaW4gYSAuY21kIGZpbGUgJSBjYW4gYmUgZXNjYXBlZFxuICAgICAgICAvLyBieSB1c2luZyAlJS5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gdGhlIHNhdmluZyBncmFjZSBpcywgb24gdGhlIGNvbW1hbmQgbGluZSwgJXZhciUgaXMgbGVmdCBhcy1pcyBpZiB2YXIgaXMgbm90IGRlZmluZWQuIHRoaXMgY29udHJhc3RzXG4gICAgICAgIC8vIHRoZSBsaW5lIHBhcnNpbmcgcnVsZXMgd2l0aGluIGEgLmNtZCBmaWxlLCB3aGVyZSBpZiB2YXIgaXMgbm90IGRlZmluZWQgaXQgaXMgcmVwbGFjZWQgd2l0aCBub3RoaW5nLlxuICAgICAgICAvL1xuICAgICAgICAvLyBvbmUgb3B0aW9uIHRoYXQgd2FzIGV4cGxvcmVkIHdhcyByZXBsYWNpbmcgJSB3aXRoIF4lIC0gaS5lLiAldmFyJSA9PiBeJXZhcl4lLiB0aGlzIGhhY2sgd291bGRcbiAgICAgICAgLy8gb2Z0ZW4gd29yaywgc2luY2UgaXQgaXMgdW5saWtlbHkgdGhhdCB2YXJeIHdvdWxkIGV4aXN0LCBhbmQgdGhlIF4gY2hhcmFjdGVyIGlzIHJlbW92ZWQgd2hlbiB0aGVcbiAgICAgICAgLy8gdmFyaWFibGUgaXMgdXNlZC4gdGhlIHByb2JsZW0sIGhvd2V2ZXIsIGlzIHRoYXQgXiBpcyBub3QgcmVtb3ZlZCB3aGVuICUqIGlzIHVzZWQgdG8gcGFzcyB0aGUgYXJnc1xuICAgICAgICAvLyB0byBhbiBleHRlcm5hbCBwcm9ncmFtLlxuICAgICAgICAvL1xuICAgICAgICAvLyBhbiB1bmV4cGxvcmVkIHBvdGVudGlhbCBzb2x1dGlvbiBmb3IgdGhlICUgZXNjYXBpbmcgcHJvYmxlbSwgaXMgdG8gY3JlYXRlIGEgd3JhcHBlciAuY21kIGZpbGUuXG4gICAgICAgIC8vICUgY2FuIGJlIGVzY2FwZWQgd2l0aGluIGEgLmNtZCBmaWxlLlxuICAgICAgICBsZXQgcmV2ZXJzZSA9ICdcIic7XG4gICAgICAgIGxldCBxdW90ZUhpdCA9IHRydWU7XG4gICAgICAgIGZvciAobGV0IGkgPSBhcmcubGVuZ3RoOyBpID4gMDsgaS0tKSB7XG4gICAgICAgICAgICAvLyB3YWxrIHRoZSBzdHJpbmcgaW4gcmV2ZXJzZVxuICAgICAgICAgICAgcmV2ZXJzZSArPSBhcmdbaSAtIDFdO1xuICAgICAgICAgICAgaWYgKHF1b3RlSGl0ICYmIGFyZ1tpIC0gMV0gPT09ICdcXFxcJykge1xuICAgICAgICAgICAgICAgIHJldmVyc2UgKz0gJ1xcXFwnOyAvLyBkb3VibGUgdGhlIHNsYXNoXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChhcmdbaSAtIDFdID09PSAnXCInKSB7XG4gICAgICAgICAgICAgICAgcXVvdGVIaXQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldmVyc2UgKz0gJ1wiJzsgLy8gZG91YmxlIHRoZSBxdW90ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcXVvdGVIaXQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXZlcnNlICs9ICdcIic7XG4gICAgICAgIHJldHVybiByZXZlcnNlXG4gICAgICAgICAgICAuc3BsaXQoJycpXG4gICAgICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgICAgICAuam9pbignJyk7XG4gICAgfVxuICAgIF91dlF1b3RlQ21kQXJnKGFyZykge1xuICAgICAgICAvLyBUb29sIHJ1bm5lciB3cmFwcyBjaGlsZF9wcm9jZXNzLnNwYXduKCkgYW5kIG5lZWRzIHRvIGFwcGx5IHRoZSBzYW1lIHF1b3RpbmcgYXNcbiAgICAgICAgLy8gTm9kZSBpbiBjZXJ0YWluIGNhc2VzIHdoZXJlIHRoZSB1bmRvY3VtZW50ZWQgc3Bhd24gb3B0aW9uIHdpbmRvd3NWZXJiYXRpbUFyZ3VtZW50c1xuICAgICAgICAvLyBpcyB1c2VkLlxuICAgICAgICAvL1xuICAgICAgICAvLyBTaW5jZSB0aGlzIGZ1bmN0aW9uIGlzIGEgcG9ydCBvZiBxdW90ZV9jbWRfYXJnIGZyb20gTm9kZSA0LnggKHRlY2huaWNhbGx5LCBsaWIgVVYsXG4gICAgICAgIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvYmxvYi92NC54L2RlcHMvdXYvc3JjL3dpbi9wcm9jZXNzLmMgZm9yIGRldGFpbHMpLFxuICAgICAgICAvLyBwYXN0aW5nIGNvcHlyaWdodCBub3RpY2UgZnJvbSBOb2RlIHdpdGhpbiB0aGlzIGZ1bmN0aW9uOlxuICAgICAgICAvL1xuICAgICAgICAvLyAgICAgIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICAgICAgICAvL1xuICAgICAgICAvLyAgICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiAgICAgICAgLy8gICAgICBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0b1xuICAgICAgICAvLyAgICAgIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlXG4gICAgICAgIC8vICAgICAgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yXG4gICAgICAgIC8vICAgICAgc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiAgICAgICAgLy8gICAgICBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICAgICAgICAvL1xuICAgICAgICAvLyAgICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4gICAgICAgIC8vICAgICAgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gICAgICAgIC8vXG4gICAgICAgIC8vICAgICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICAgICAgICAvLyAgICAgIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICAgICAgICAvLyAgICAgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICAgICAgICAvLyAgICAgIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAgICAgICAgLy8gICAgICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lOR1xuICAgICAgICAvLyAgICAgIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1NcbiAgICAgICAgLy8gICAgICBJTiBUSEUgU09GVFdBUkUuXG4gICAgICAgIGlmICghYXJnKSB7XG4gICAgICAgICAgICAvLyBOZWVkIGRvdWJsZSBxdW90YXRpb24gZm9yIGVtcHR5IGFyZ3VtZW50XG4gICAgICAgICAgICByZXR1cm4gJ1wiXCInO1xuICAgICAgICB9XG4gICAgICAgIGlmICghYXJnLmluY2x1ZGVzKCcgJykgJiYgIWFyZy5pbmNsdWRlcygnXFx0JykgJiYgIWFyZy5pbmNsdWRlcygnXCInKSkge1xuICAgICAgICAgICAgLy8gTm8gcXVvdGF0aW9uIG5lZWRlZFxuICAgICAgICAgICAgcmV0dXJuIGFyZztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWFyZy5pbmNsdWRlcygnXCInKSAmJiAhYXJnLmluY2x1ZGVzKCdcXFxcJykpIHtcbiAgICAgICAgICAgIC8vIE5vIGVtYmVkZGVkIGRvdWJsZSBxdW90ZXMgb3IgYmFja3NsYXNoZXMsIHNvIEkgY2FuIGp1c3Qgd3JhcFxuICAgICAgICAgICAgLy8gcXVvdGUgbWFya3MgYXJvdW5kIHRoZSB3aG9sZSB0aGluZy5cbiAgICAgICAgICAgIHJldHVybiBgXCIke2FyZ31cImA7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRXhwZWN0ZWQgaW5wdXQvb3V0cHV0OlxuICAgICAgICAvLyAgIGlucHV0IDogaGVsbG9cIndvcmxkXG4gICAgICAgIC8vICAgb3V0cHV0OiBcImhlbGxvXFxcIndvcmxkXCJcbiAgICAgICAgLy8gICBpbnB1dCA6IGhlbGxvXCJcIndvcmxkXG4gICAgICAgIC8vICAgb3V0cHV0OiBcImhlbGxvXFxcIlxcXCJ3b3JsZFwiXG4gICAgICAgIC8vICAgaW5wdXQgOiBoZWxsb1xcd29ybGRcbiAgICAgICAgLy8gICBvdXRwdXQ6IGhlbGxvXFx3b3JsZFxuICAgICAgICAvLyAgIGlucHV0IDogaGVsbG9cXFxcd29ybGRcbiAgICAgICAgLy8gICBvdXRwdXQ6IGhlbGxvXFxcXHdvcmxkXG4gICAgICAgIC8vICAgaW5wdXQgOiBoZWxsb1xcXCJ3b3JsZFxuICAgICAgICAvLyAgIG91dHB1dDogXCJoZWxsb1xcXFxcXFwid29ybGRcIlxuICAgICAgICAvLyAgIGlucHV0IDogaGVsbG9cXFxcXCJ3b3JsZFxuICAgICAgICAvLyAgIG91dHB1dDogXCJoZWxsb1xcXFxcXFxcXFxcIndvcmxkXCJcbiAgICAgICAgLy8gICBpbnB1dCA6IGhlbGxvIHdvcmxkXFxcbiAgICAgICAgLy8gICBvdXRwdXQ6IFwiaGVsbG8gd29ybGRcXFxcXCIgLSBub3RlIHRoZSBjb21tZW50IGluIGxpYnV2IGFjdHVhbGx5IHJlYWRzIFwiaGVsbG8gd29ybGRcXFwiXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXQgaXQgYXBwZWFycyB0aGUgY29tbWVudCBpcyB3cm9uZywgaXQgc2hvdWxkIGJlIFwiaGVsbG8gd29ybGRcXFxcXCJcbiAgICAgICAgbGV0IHJldmVyc2UgPSAnXCInO1xuICAgICAgICBsZXQgcXVvdGVIaXQgPSB0cnVlO1xuICAgICAgICBmb3IgKGxldCBpID0gYXJnLmxlbmd0aDsgaSA+IDA7IGktLSkge1xuICAgICAgICAgICAgLy8gd2FsayB0aGUgc3RyaW5nIGluIHJldmVyc2VcbiAgICAgICAgICAgIHJldmVyc2UgKz0gYXJnW2kgLSAxXTtcbiAgICAgICAgICAgIGlmIChxdW90ZUhpdCAmJiBhcmdbaSAtIDFdID09PSAnXFxcXCcpIHtcbiAgICAgICAgICAgICAgICByZXZlcnNlICs9ICdcXFxcJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGFyZ1tpIC0gMV0gPT09ICdcIicpIHtcbiAgICAgICAgICAgICAgICBxdW90ZUhpdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV2ZXJzZSArPSAnXFxcXCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBxdW90ZUhpdCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldmVyc2UgKz0gJ1wiJztcbiAgICAgICAgcmV0dXJuIHJldmVyc2VcbiAgICAgICAgICAgIC5zcGxpdCgnJylcbiAgICAgICAgICAgIC5yZXZlcnNlKClcbiAgICAgICAgICAgIC5qb2luKCcnKTtcbiAgICB9XG4gICAgX2Nsb25lRXhlY09wdGlvbnMob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgICAgICAgY3dkOiBvcHRpb25zLmN3ZCB8fCBwcm9jZXNzLmN3ZCgpLFxuICAgICAgICAgICAgZW52OiBvcHRpb25zLmVudiB8fCBwcm9jZXNzLmVudixcbiAgICAgICAgICAgIHNpbGVudDogb3B0aW9ucy5zaWxlbnQgfHwgZmFsc2UsXG4gICAgICAgICAgICB3aW5kb3dzVmVyYmF0aW1Bcmd1bWVudHM6IG9wdGlvbnMud2luZG93c1ZlcmJhdGltQXJndW1lbnRzIHx8IGZhbHNlLFxuICAgICAgICAgICAgZmFpbE9uU3RkRXJyOiBvcHRpb25zLmZhaWxPblN0ZEVyciB8fCBmYWxzZSxcbiAgICAgICAgICAgIGlnbm9yZVJldHVybkNvZGU6IG9wdGlvbnMuaWdub3JlUmV0dXJuQ29kZSB8fCBmYWxzZSxcbiAgICAgICAgICAgIGRlbGF5OiBvcHRpb25zLmRlbGF5IHx8IDEwMDAwXG4gICAgICAgIH07XG4gICAgICAgIHJlc3VsdC5vdXRTdHJlYW0gPSBvcHRpb25zLm91dFN0cmVhbSB8fCBwcm9jZXNzLnN0ZG91dDtcbiAgICAgICAgcmVzdWx0LmVyclN0cmVhbSA9IG9wdGlvbnMuZXJyU3RyZWFtIHx8IHByb2Nlc3Muc3RkZXJyO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBfZ2V0U3Bhd25PcHRpb25zKG9wdGlvbnMsIHRvb2xQYXRoKSB7XG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgICAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICAgICAgcmVzdWx0LmN3ZCA9IG9wdGlvbnMuY3dkO1xuICAgICAgICByZXN1bHQuZW52ID0gb3B0aW9ucy5lbnY7XG4gICAgICAgIHJlc3VsdFsnd2luZG93c1ZlcmJhdGltQXJndW1lbnRzJ10gPVxuICAgICAgICAgICAgb3B0aW9ucy53aW5kb3dzVmVyYmF0aW1Bcmd1bWVudHMgfHwgdGhpcy5faXNDbWRGaWxlKCk7XG4gICAgICAgIGlmIChvcHRpb25zLndpbmRvd3NWZXJiYXRpbUFyZ3VtZW50cykge1xuICAgICAgICAgICAgcmVzdWx0LmFyZ3YwID0gYFwiJHt0b29sUGF0aH1cImA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRXhlYyBhIHRvb2wuXG4gICAgICogT3V0cHV0IHdpbGwgYmUgc3RyZWFtZWQgdG8gdGhlIGxpdmUgY29uc29sZS5cbiAgICAgKiBSZXR1cm5zIHByb21pc2Ugd2l0aCByZXR1cm4gY29kZVxuICAgICAqXG4gICAgICogQHBhcmFtICAgICB0b29sICAgICBwYXRoIHRvIHRvb2wgdG8gZXhlY1xuICAgICAqIEBwYXJhbSAgICAgb3B0aW9ucyAgb3B0aW9uYWwgZXhlYyBvcHRpb25zLiAgU2VlIEV4ZWNPcHRpb25zXG4gICAgICogQHJldHVybnMgICBudW1iZXJcbiAgICAgKi9cbiAgICBleGVjKCkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgLy8gcm9vdCB0aGUgdG9vbCBwYXRoIGlmIGl0IGlzIHVucm9vdGVkIGFuZCBjb250YWlucyByZWxhdGl2ZSBwYXRoaW5nXG4gICAgICAgICAgICBpZiAoIWlvVXRpbC5pc1Jvb3RlZCh0aGlzLnRvb2xQYXRoKSAmJlxuICAgICAgICAgICAgICAgICh0aGlzLnRvb2xQYXRoLmluY2x1ZGVzKCcvJykgfHxcbiAgICAgICAgICAgICAgICAgICAgKElTX1dJTkRPV1MgJiYgdGhpcy50b29sUGF0aC5pbmNsdWRlcygnXFxcXCcpKSkpIHtcbiAgICAgICAgICAgICAgICAvLyBwcmVmZXIgb3B0aW9ucy5jd2QgaWYgaXQgaXMgc3BlY2lmaWVkLCBob3dldmVyIG9wdGlvbnMuY3dkIG1heSBhbHNvIG5lZWQgdG8gYmUgcm9vdGVkXG4gICAgICAgICAgICAgICAgdGhpcy50b29sUGF0aCA9IHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCB0aGlzLm9wdGlvbnMuY3dkIHx8IHByb2Nlc3MuY3dkKCksIHRoaXMudG9vbFBhdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgdGhlIHRvb2wgaXMgb25seSBhIGZpbGUgbmFtZSwgdGhlbiByZXNvbHZlIGl0IGZyb20gdGhlIFBBVEhcbiAgICAgICAgICAgIC8vIG90aGVyd2lzZSB2ZXJpZnkgaXQgZXhpc3RzIChhZGQgZXh0ZW5zaW9uIG9uIFdpbmRvd3MgaWYgbmVjZXNzYXJ5KVxuICAgICAgICAgICAgdGhpcy50b29sUGF0aCA9IHlpZWxkIGlvLndoaWNoKHRoaXMudG9vbFBhdGgsIHRydWUpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kZWJ1ZyhgZXhlYyB0b29sOiAke3RoaXMudG9vbFBhdGh9YCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGVidWcoJ2FyZ3VtZW50czonKTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGFyZyBvZiB0aGlzLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVidWcoYCAgICR7YXJnfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25zTm9uTnVsbCA9IHRoaXMuX2Nsb25lRXhlY09wdGlvbnModGhpcy5vcHRpb25zKTtcbiAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnNOb25OdWxsLnNpbGVudCAmJiBvcHRpb25zTm9uTnVsbC5vdXRTdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uc05vbk51bGwub3V0U3RyZWFtLndyaXRlKHRoaXMuX2dldENvbW1hbmRTdHJpbmcob3B0aW9uc05vbk51bGwpICsgb3MuRU9MKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhdGUgPSBuZXcgRXhlY1N0YXRlKG9wdGlvbnNOb25OdWxsLCB0aGlzLnRvb2xQYXRoKTtcbiAgICAgICAgICAgICAgICBzdGF0ZS5vbignZGVidWcnLCAobWVzc2FnZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWJ1ZyhtZXNzYWdlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmN3ZCAmJiAhKHlpZWxkIGlvVXRpbC5leGlzdHModGhpcy5vcHRpb25zLmN3ZCkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yKGBUaGUgY3dkOiAke3RoaXMub3B0aW9ucy5jd2R9IGRvZXMgbm90IGV4aXN0IWApKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZU5hbWUgPSB0aGlzLl9nZXRTcGF3bkZpbGVOYW1lKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgY3AgPSBjaGlsZC5zcGF3bihmaWxlTmFtZSwgdGhpcy5fZ2V0U3Bhd25BcmdzKG9wdGlvbnNOb25OdWxsKSwgdGhpcy5fZ2V0U3Bhd25PcHRpb25zKHRoaXMub3B0aW9ucywgZmlsZU5hbWUpKTtcbiAgICAgICAgICAgICAgICBsZXQgc3RkYnVmZmVyID0gJyc7XG4gICAgICAgICAgICAgICAgaWYgKGNwLnN0ZG91dCkge1xuICAgICAgICAgICAgICAgICAgICBjcC5zdGRvdXQub24oJ2RhdGEnLCAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5saXN0ZW5lcnMgJiYgdGhpcy5vcHRpb25zLmxpc3RlbmVycy5zdGRvdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMubGlzdGVuZXJzLnN0ZG91dChkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9uc05vbk51bGwuc2lsZW50ICYmIG9wdGlvbnNOb25OdWxsLm91dFN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNOb25OdWxsLm91dFN0cmVhbS53cml0ZShkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGJ1ZmZlciA9IHRoaXMuX3Byb2Nlc3NMaW5lQnVmZmVyKGRhdGEsIHN0ZGJ1ZmZlciwgKGxpbmUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxpc3RlbmVycyAmJiB0aGlzLm9wdGlvbnMubGlzdGVuZXJzLnN0ZGxpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmxpc3RlbmVycy5zdGRsaW5lKGxpbmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IGVycmJ1ZmZlciA9ICcnO1xuICAgICAgICAgICAgICAgIGlmIChjcC5zdGRlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY3Auc3RkZXJyLm9uKCdkYXRhJywgKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnByb2Nlc3NTdGRlcnIgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5saXN0ZW5lcnMgJiYgdGhpcy5vcHRpb25zLmxpc3RlbmVycy5zdGRlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMubGlzdGVuZXJzLnN0ZGVycihkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9uc05vbk51bGwuc2lsZW50ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uc05vbk51bGwuZXJyU3RyZWFtICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uc05vbk51bGwub3V0U3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcyA9IG9wdGlvbnNOb25OdWxsLmZhaWxPblN0ZEVyclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG9wdGlvbnNOb25OdWxsLmVyclN0cmVhbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG9wdGlvbnNOb25OdWxsLm91dFN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLndyaXRlKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyYnVmZmVyID0gdGhpcy5fcHJvY2Vzc0xpbmVCdWZmZXIoZGF0YSwgZXJyYnVmZmVyLCAobGluZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMubGlzdGVuZXJzICYmIHRoaXMub3B0aW9ucy5saXN0ZW5lcnMuZXJybGluZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMubGlzdGVuZXJzLmVycmxpbmUobGluZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjcC5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLnByb2Nlc3NFcnJvciA9IGVyci5tZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5wcm9jZXNzRXhpdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUucHJvY2Vzc0Nsb3NlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLkNoZWNrQ29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjcC5vbignZXhpdCcsIChjb2RlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLnByb2Nlc3NFeGl0Q29kZSA9IGNvZGU7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLnByb2Nlc3NFeGl0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWJ1ZyhgRXhpdCBjb2RlICR7Y29kZX0gcmVjZWl2ZWQgZnJvbSB0b29sICcke3RoaXMudG9vbFBhdGh9J2ApO1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5DaGVja0NvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY3Aub24oJ2Nsb3NlJywgKGNvZGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUucHJvY2Vzc0V4aXRDb2RlID0gY29kZTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUucHJvY2Vzc0V4aXRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLnByb2Nlc3NDbG9zZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWJ1ZyhgU1RESU8gc3RyZWFtcyBoYXZlIGNsb3NlZCBmb3IgdG9vbCAnJHt0aGlzLnRvb2xQYXRofSdgKTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuQ2hlY2tDb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHN0YXRlLm9uKCdkb25lJywgKGVycm9yLCBleGl0Q29kZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3RkYnVmZmVyLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnc3RkbGluZScsIHN0ZGJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycmJ1ZmZlci5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2VycmxpbmUnLCBlcnJidWZmZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNwLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGV4aXRDb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjcC5zdGRpbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjaGlsZCBwcm9jZXNzIG1pc3Npbmcgc3RkaW4nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjcC5zdGRpbi5lbmQodGhpcy5vcHRpb25zLmlucHV0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuVG9vbFJ1bm5lciA9IFRvb2xSdW5uZXI7XG4vKipcbiAqIENvbnZlcnQgYW4gYXJnIHN0cmluZyB0byBhbiBhcnJheSBvZiBhcmdzLiBIYW5kbGVzIGVzY2FwaW5nXG4gKlxuICogQHBhcmFtICAgIGFyZ1N0cmluZyAgIHN0cmluZyBvZiBhcmd1bWVudHNcbiAqIEByZXR1cm5zICBzdHJpbmdbXSAgICBhcnJheSBvZiBhcmd1bWVudHNcbiAqL1xuZnVuY3Rpb24gYXJnU3RyaW5nVG9BcnJheShhcmdTdHJpbmcpIHtcbiAgICBjb25zdCBhcmdzID0gW107XG4gICAgbGV0IGluUXVvdGVzID0gZmFsc2U7XG4gICAgbGV0IGVzY2FwZWQgPSBmYWxzZTtcbiAgICBsZXQgYXJnID0gJyc7XG4gICAgZnVuY3Rpb24gYXBwZW5kKGMpIHtcbiAgICAgICAgLy8gd2Ugb25seSBlc2NhcGUgZG91YmxlIHF1b3Rlcy5cbiAgICAgICAgaWYgKGVzY2FwZWQgJiYgYyAhPT0gJ1wiJykge1xuICAgICAgICAgICAgYXJnICs9ICdcXFxcJztcbiAgICAgICAgfVxuICAgICAgICBhcmcgKz0gYztcbiAgICAgICAgZXNjYXBlZCA9IGZhbHNlO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ1N0cmluZy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBjID0gYXJnU3RyaW5nLmNoYXJBdChpKTtcbiAgICAgICAgaWYgKGMgPT09ICdcIicpIHtcbiAgICAgICAgICAgIGlmICghZXNjYXBlZCkge1xuICAgICAgICAgICAgICAgIGluUXVvdGVzID0gIWluUXVvdGVzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYXBwZW5kKGMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGMgPT09ICdcXFxcJyAmJiBlc2NhcGVkKSB7XG4gICAgICAgICAgICBhcHBlbmQoYyk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYyA9PT0gJ1xcXFwnICYmIGluUXVvdGVzKSB7XG4gICAgICAgICAgICBlc2NhcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjID09PSAnICcgJiYgIWluUXVvdGVzKSB7XG4gICAgICAgICAgICBpZiAoYXJnLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBhcmdzLnB1c2goYXJnKTtcbiAgICAgICAgICAgICAgICBhcmcgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGFwcGVuZChjKTtcbiAgICB9XG4gICAgaWYgKGFyZy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGFyZ3MucHVzaChhcmcudHJpbSgpKTtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5leHBvcnRzLmFyZ1N0cmluZ1RvQXJyYXkgPSBhcmdTdHJpbmdUb0FycmF5O1xuY2xhc3MgRXhlY1N0YXRlIGV4dGVuZHMgZXZlbnRzLkV2ZW50RW1pdHRlciB7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucywgdG9vbFBhdGgpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5wcm9jZXNzQ2xvc2VkID0gZmFsc2U7IC8vIHRyYWNrcyB3aGV0aGVyIHRoZSBwcm9jZXNzIGhhcyBleGl0ZWQgYW5kIHN0ZGlvIGlzIGNsb3NlZFxuICAgICAgICB0aGlzLnByb2Nlc3NFcnJvciA9ICcnO1xuICAgICAgICB0aGlzLnByb2Nlc3NFeGl0Q29kZSA9IDA7XG4gICAgICAgIHRoaXMucHJvY2Vzc0V4aXRlZCA9IGZhbHNlOyAvLyB0cmFja3Mgd2hldGhlciB0aGUgcHJvY2VzcyBoYXMgZXhpdGVkXG4gICAgICAgIHRoaXMucHJvY2Vzc1N0ZGVyciA9IGZhbHNlOyAvLyB0cmFja3Mgd2hldGhlciBzdGRlcnIgd2FzIHdyaXR0ZW4gdG9cbiAgICAgICAgdGhpcy5kZWxheSA9IDEwMDAwOyAvLyAxMCBzZWNvbmRzXG4gICAgICAgIHRoaXMuZG9uZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnRpbWVvdXQgPSBudWxsO1xuICAgICAgICBpZiAoIXRvb2xQYXRoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Rvb2xQYXRoIG11c3Qgbm90IGJlIGVtcHR5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgdGhpcy50b29sUGF0aCA9IHRvb2xQYXRoO1xuICAgICAgICBpZiAob3B0aW9ucy5kZWxheSkge1xuICAgICAgICAgICAgdGhpcy5kZWxheSA9IG9wdGlvbnMuZGVsYXk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgQ2hlY2tDb21wbGV0ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnByb2Nlc3NDbG9zZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldFJlc3VsdCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMucHJvY2Vzc0V4aXRlZCkge1xuICAgICAgICAgICAgdGhpcy50aW1lb3V0ID0gdGltZXJzXzEuc2V0VGltZW91dChFeGVjU3RhdGUuSGFuZGxlVGltZW91dCwgdGhpcy5kZWxheSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX2RlYnVnKG1lc3NhZ2UpIHtcbiAgICAgICAgdGhpcy5lbWl0KCdkZWJ1ZycsIG1lc3NhZ2UpO1xuICAgIH1cbiAgICBfc2V0UmVzdWx0KCkge1xuICAgICAgICAvLyBkZXRlcm1pbmUgd2hldGhlciB0aGVyZSBpcyBhbiBlcnJvclxuICAgICAgICBsZXQgZXJyb3I7XG4gICAgICAgIGlmICh0aGlzLnByb2Nlc3NFeGl0ZWQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByb2Nlc3NFcnJvcikge1xuICAgICAgICAgICAgICAgIGVycm9yID0gbmV3IEVycm9yKGBUaGVyZSB3YXMgYW4gZXJyb3Igd2hlbiBhdHRlbXB0aW5nIHRvIGV4ZWN1dGUgdGhlIHByb2Nlc3MgJyR7dGhpcy50b29sUGF0aH0nLiBUaGlzIG1heSBpbmRpY2F0ZSB0aGUgcHJvY2VzcyBmYWlsZWQgdG8gc3RhcnQuIEVycm9yOiAke3RoaXMucHJvY2Vzc0Vycm9yfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5wcm9jZXNzRXhpdENvZGUgIT09IDAgJiYgIXRoaXMub3B0aW9ucy5pZ25vcmVSZXR1cm5Db2RlKSB7XG4gICAgICAgICAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoYFRoZSBwcm9jZXNzICcke3RoaXMudG9vbFBhdGh9JyBmYWlsZWQgd2l0aCBleGl0IGNvZGUgJHt0aGlzLnByb2Nlc3NFeGl0Q29kZX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMucHJvY2Vzc1N0ZGVyciAmJiB0aGlzLm9wdGlvbnMuZmFpbE9uU3RkRXJyKSB7XG4gICAgICAgICAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoYFRoZSBwcm9jZXNzICcke3RoaXMudG9vbFBhdGh9JyBmYWlsZWQgYmVjYXVzZSBvbmUgb3IgbW9yZSBsaW5lcyB3ZXJlIHdyaXR0ZW4gdG8gdGhlIFNUREVSUiBzdHJlYW1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBjbGVhciB0aGUgdGltZW91dFxuICAgICAgICBpZiAodGhpcy50aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTtcbiAgICAgICAgICAgIHRoaXMudGltZW91dCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kb25lID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5lbWl0KCdkb25lJywgZXJyb3IsIHRoaXMucHJvY2Vzc0V4aXRDb2RlKTtcbiAgICB9XG4gICAgc3RhdGljIEhhbmRsZVRpbWVvdXQoc3RhdGUpIHtcbiAgICAgICAgaWYgKHN0YXRlLmRvbmUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXN0YXRlLnByb2Nlc3NDbG9zZWQgJiYgc3RhdGUucHJvY2Vzc0V4aXRlZCkge1xuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGBUaGUgU1RESU8gc3RyZWFtcyBkaWQgbm90IGNsb3NlIHdpdGhpbiAke3N0YXRlLmRlbGF5IC9cbiAgICAgICAgICAgICAgICAxMDAwfSBzZWNvbmRzIG9mIHRoZSBleGl0IGV2ZW50IGZyb20gcHJvY2VzcyAnJHtzdGF0ZS50b29sUGF0aH0nLiBUaGlzIG1heSBpbmRpY2F0ZSBhIGNoaWxkIHByb2Nlc3MgaW5oZXJpdGVkIHRoZSBTVERJTyBzdHJlYW1zIGFuZCBoYXMgbm90IHlldCBleGl0ZWQuYDtcbiAgICAgICAgICAgIHN0YXRlLl9kZWJ1ZyhtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZS5fc2V0UmVzdWx0KCk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dG9vbHJ1bm5lci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH0pO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRFeGVjT3V0cHV0ID0gZXhwb3J0cy5leGVjID0gdm9pZCAwO1xuY29uc3Qgc3RyaW5nX2RlY29kZXJfMSA9IHJlcXVpcmUoXCJzdHJpbmdfZGVjb2RlclwiKTtcbmNvbnN0IHRyID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL3Rvb2xydW5uZXJcIikpO1xuLyoqXG4gKiBFeGVjIGEgY29tbWFuZC5cbiAqIE91dHB1dCB3aWxsIGJlIHN0cmVhbWVkIHRvIHRoZSBsaXZlIGNvbnNvbGUuXG4gKiBSZXR1cm5zIHByb21pc2Ugd2l0aCByZXR1cm4gY29kZVxuICpcbiAqIEBwYXJhbSAgICAgY29tbWFuZExpbmUgICAgICAgIGNvbW1hbmQgdG8gZXhlY3V0ZSAoY2FuIGluY2x1ZGUgYWRkaXRpb25hbCBhcmdzKS4gTXVzdCBiZSBjb3JyZWN0bHkgZXNjYXBlZC5cbiAqIEBwYXJhbSAgICAgYXJncyAgICAgICAgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50cyBmb3IgdG9vbC4gRXNjYXBpbmcgaXMgaGFuZGxlZCBieSB0aGUgbGliLlxuICogQHBhcmFtICAgICBvcHRpb25zICAgICAgICAgICAgb3B0aW9uYWwgZXhlYyBvcHRpb25zLiAgU2VlIEV4ZWNPcHRpb25zXG4gKiBAcmV0dXJucyAgIFByb21pc2U8bnVtYmVyPiAgICBleGl0IGNvZGVcbiAqL1xuZnVuY3Rpb24gZXhlYyhjb21tYW5kTGluZSwgYXJncywgb3B0aW9ucykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IGNvbW1hbmRBcmdzID0gdHIuYXJnU3RyaW5nVG9BcnJheShjb21tYW5kTGluZSk7XG4gICAgICAgIGlmIChjb21tYW5kQXJncy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUGFyYW1ldGVyICdjb21tYW5kTGluZScgY2Fubm90IGJlIG51bGwgb3IgZW1wdHkuYCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUGF0aCB0byB0b29sIHRvIGV4ZWN1dGUgc2hvdWxkIGJlIGZpcnN0IGFyZ1xuICAgICAgICBjb25zdCB0b29sUGF0aCA9IGNvbW1hbmRBcmdzWzBdO1xuICAgICAgICBhcmdzID0gY29tbWFuZEFyZ3Muc2xpY2UoMSkuY29uY2F0KGFyZ3MgfHwgW10pO1xuICAgICAgICBjb25zdCBydW5uZXIgPSBuZXcgdHIuVG9vbFJ1bm5lcih0b29sUGF0aCwgYXJncywgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBydW5uZXIuZXhlYygpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5leGVjID0gZXhlYztcbi8qKlxuICogRXhlYyBhIGNvbW1hbmQgYW5kIGdldCB0aGUgb3V0cHV0LlxuICogT3V0cHV0IHdpbGwgYmUgc3RyZWFtZWQgdG8gdGhlIGxpdmUgY29uc29sZS5cbiAqIFJldHVybnMgcHJvbWlzZSB3aXRoIHRoZSBleGl0IGNvZGUgYW5kIGNvbGxlY3RlZCBzdGRvdXQgYW5kIHN0ZGVyclxuICpcbiAqIEBwYXJhbSAgICAgY29tbWFuZExpbmUgICAgICAgICAgIGNvbW1hbmQgdG8gZXhlY3V0ZSAoY2FuIGluY2x1ZGUgYWRkaXRpb25hbCBhcmdzKS4gTXVzdCBiZSBjb3JyZWN0bHkgZXNjYXBlZC5cbiAqIEBwYXJhbSAgICAgYXJncyAgICAgICAgICAgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50cyBmb3IgdG9vbC4gRXNjYXBpbmcgaXMgaGFuZGxlZCBieSB0aGUgbGliLlxuICogQHBhcmFtICAgICBvcHRpb25zICAgICAgICAgICAgICAgb3B0aW9uYWwgZXhlYyBvcHRpb25zLiAgU2VlIEV4ZWNPcHRpb25zXG4gKiBAcmV0dXJucyAgIFByb21pc2U8RXhlY091dHB1dD4gICBleGl0IGNvZGUsIHN0ZG91dCwgYW5kIHN0ZGVyclxuICovXG5mdW5jdGlvbiBnZXRFeGVjT3V0cHV0KGNvbW1hbmRMaW5lLCBhcmdzLCBvcHRpb25zKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBsZXQgc3Rkb3V0ID0gJyc7XG4gICAgICAgIGxldCBzdGRlcnIgPSAnJztcbiAgICAgICAgLy9Vc2luZyBzdHJpbmcgZGVjb2RlciBjb3ZlcnMgdGhlIGNhc2Ugd2hlcmUgYSBtdWx0LWJ5dGUgY2hhcmFjdGVyIGlzIHNwbGl0XG4gICAgICAgIGNvbnN0IHN0ZG91dERlY29kZXIgPSBuZXcgc3RyaW5nX2RlY29kZXJfMS5TdHJpbmdEZWNvZGVyKCd1dGY4Jyk7XG4gICAgICAgIGNvbnN0IHN0ZGVyckRlY29kZXIgPSBuZXcgc3RyaW5nX2RlY29kZXJfMS5TdHJpbmdEZWNvZGVyKCd1dGY4Jyk7XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsU3Rkb3V0TGlzdGVuZXIgPSAoX2EgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMubGlzdGVuZXJzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc3Rkb3V0O1xuICAgICAgICBjb25zdCBvcmlnaW5hbFN0ZEVyckxpc3RlbmVyID0gKF9iID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmxpc3RlbmVycykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnN0ZGVycjtcbiAgICAgICAgY29uc3Qgc3RkRXJyTGlzdGVuZXIgPSAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgc3RkZXJyICs9IHN0ZGVyckRlY29kZXIud3JpdGUoZGF0YSk7XG4gICAgICAgICAgICBpZiAob3JpZ2luYWxTdGRFcnJMaXN0ZW5lcikge1xuICAgICAgICAgICAgICAgIG9yaWdpbmFsU3RkRXJyTGlzdGVuZXIoZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHN0ZE91dExpc3RlbmVyID0gKGRhdGEpID0+IHtcbiAgICAgICAgICAgIHN0ZG91dCArPSBzdGRvdXREZWNvZGVyLndyaXRlKGRhdGEpO1xuICAgICAgICAgICAgaWYgKG9yaWdpbmFsU3Rkb3V0TGlzdGVuZXIpIHtcbiAgICAgICAgICAgICAgICBvcmlnaW5hbFN0ZG91dExpc3RlbmVyKGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5saXN0ZW5lcnMpLCB7IHN0ZG91dDogc3RkT3V0TGlzdGVuZXIsIHN0ZGVycjogc3RkRXJyTGlzdGVuZXIgfSk7XG4gICAgICAgIGNvbnN0IGV4aXRDb2RlID0geWllbGQgZXhlYyhjb21tYW5kTGluZSwgYXJncywgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKSwgeyBsaXN0ZW5lcnMgfSkpO1xuICAgICAgICAvL2ZsdXNoIGFueSByZW1haW5pbmcgY2hhcmFjdGVyc1xuICAgICAgICBzdGRvdXQgKz0gc3Rkb3V0RGVjb2Rlci5lbmQoKTtcbiAgICAgICAgc3RkZXJyICs9IHN0ZGVyckRlY29kZXIuZW5kKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBleGl0Q29kZSxcbiAgICAgICAgICAgIHN0ZG91dCxcbiAgICAgICAgICAgIHN0ZGVyclxuICAgICAgICB9O1xuICAgIH0pO1xufVxuZXhwb3J0cy5nZXRFeGVjT3V0cHV0ID0gZ2V0RXhlY091dHB1dDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWV4ZWMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldERldGFpbHMgPSBleHBvcnRzLmlzTGludXggPSBleHBvcnRzLmlzTWFjT1MgPSBleHBvcnRzLmlzV2luZG93cyA9IGV4cG9ydHMuYXJjaCA9IGV4cG9ydHMucGxhdGZvcm0gPSB2b2lkIDA7XG5jb25zdCBvc18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJvc1wiKSk7XG5jb25zdCBleGVjID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJAYWN0aW9ucy9leGVjXCIpKTtcbmNvbnN0IGdldFdpbmRvd3NJbmZvID0gKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgY29uc3QgeyBzdGRvdXQ6IHZlcnNpb24gfSA9IHlpZWxkIGV4ZWMuZ2V0RXhlY091dHB1dCgncG93ZXJzaGVsbCAtY29tbWFuZCBcIihHZXQtQ2ltSW5zdGFuY2UgLUNsYXNzTmFtZSBXaW4zMl9PcGVyYXRpbmdTeXN0ZW0pLlZlcnNpb25cIicsIHVuZGVmaW5lZCwge1xuICAgICAgICBzaWxlbnQ6IHRydWVcbiAgICB9KTtcbiAgICBjb25zdCB7IHN0ZG91dDogbmFtZSB9ID0geWllbGQgZXhlYy5nZXRFeGVjT3V0cHV0KCdwb3dlcnNoZWxsIC1jb21tYW5kIFwiKEdldC1DaW1JbnN0YW5jZSAtQ2xhc3NOYW1lIFdpbjMyX09wZXJhdGluZ1N5c3RlbSkuQ2FwdGlvblwiJywgdW5kZWZpbmVkLCB7XG4gICAgICAgIHNpbGVudDogdHJ1ZVxuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IG5hbWUudHJpbSgpLFxuICAgICAgICB2ZXJzaW9uOiB2ZXJzaW9uLnRyaW0oKVxuICAgIH07XG59KTtcbmNvbnN0IGdldE1hY09zSW5mbyA9ICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgIHZhciBfYSwgX2IsIF9jLCBfZDtcbiAgICBjb25zdCB7IHN0ZG91dCB9ID0geWllbGQgZXhlYy5nZXRFeGVjT3V0cHV0KCdzd192ZXJzJywgdW5kZWZpbmVkLCB7XG4gICAgICAgIHNpbGVudDogdHJ1ZVxuICAgIH0pO1xuICAgIGNvbnN0IHZlcnNpb24gPSAoX2IgPSAoX2EgPSBzdGRvdXQubWF0Y2goL1Byb2R1Y3RWZXJzaW9uOlxccyooLispLykpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVsxXSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XG4gICAgY29uc3QgbmFtZSA9IChfZCA9IChfYyA9IHN0ZG91dC5tYXRjaCgvUHJvZHVjdE5hbWU6XFxzKiguKykvKSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jWzFdKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiAnJztcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lLFxuICAgICAgICB2ZXJzaW9uXG4gICAgfTtcbn0pO1xuY29uc3QgZ2V0TGludXhJbmZvID0gKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgY29uc3QgeyBzdGRvdXQgfSA9IHlpZWxkIGV4ZWMuZ2V0RXhlY091dHB1dCgnbHNiX3JlbGVhc2UnLCBbJy1pJywgJy1yJywgJy1zJ10sIHtcbiAgICAgICAgc2lsZW50OiB0cnVlXG4gICAgfSk7XG4gICAgY29uc3QgW25hbWUsIHZlcnNpb25dID0gc3Rkb3V0LnRyaW0oKS5zcGxpdCgnXFxuJyk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgdmVyc2lvblxuICAgIH07XG59KTtcbmV4cG9ydHMucGxhdGZvcm0gPSBvc18xLmRlZmF1bHQucGxhdGZvcm0oKTtcbmV4cG9ydHMuYXJjaCA9IG9zXzEuZGVmYXVsdC5hcmNoKCk7XG5leHBvcnRzLmlzV2luZG93cyA9IGV4cG9ydHMucGxhdGZvcm0gPT09ICd3aW4zMic7XG5leHBvcnRzLmlzTWFjT1MgPSBleHBvcnRzLnBsYXRmb3JtID09PSAnZGFyd2luJztcbmV4cG9ydHMuaXNMaW51eCA9IGV4cG9ydHMucGxhdGZvcm0gPT09ICdsaW51eCc7XG5mdW5jdGlvbiBnZXREZXRhaWxzKCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sICh5aWVsZCAoZXhwb3J0cy5pc1dpbmRvd3NcbiAgICAgICAgICAgID8gZ2V0V2luZG93c0luZm8oKVxuICAgICAgICAgICAgOiBleHBvcnRzLmlzTWFjT1NcbiAgICAgICAgICAgICAgICA/IGdldE1hY09zSW5mbygpXG4gICAgICAgICAgICAgICAgOiBnZXRMaW51eEluZm8oKSkpKSwgeyBwbGF0Zm9ybTogZXhwb3J0cy5wbGF0Zm9ybSxcbiAgICAgICAgICAgIGFyY2g6IGV4cG9ydHMuYXJjaCxcbiAgICAgICAgICAgIGlzV2luZG93czogZXhwb3J0cy5pc1dpbmRvd3MsXG4gICAgICAgICAgICBpc01hY09TOiBleHBvcnRzLmlzTWFjT1MsXG4gICAgICAgICAgICBpc0xpbnV4OiBleHBvcnRzLmlzTGludXggfSk7XG4gICAgfSk7XG59XG5leHBvcnRzLmdldERldGFpbHMgPSBnZXREZXRhaWxzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGxhdGZvcm0uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnBsYXRmb3JtID0gZXhwb3J0cy50b1BsYXRmb3JtUGF0aCA9IGV4cG9ydHMudG9XaW4zMlBhdGggPSBleHBvcnRzLnRvUG9zaXhQYXRoID0gZXhwb3J0cy5tYXJrZG93blN1bW1hcnkgPSBleHBvcnRzLnN1bW1hcnkgPSBleHBvcnRzLmdldElEVG9rZW4gPSBleHBvcnRzLmdldFN0YXRlID0gZXhwb3J0cy5zYXZlU3RhdGUgPSBleHBvcnRzLmdyb3VwID0gZXhwb3J0cy5lbmRHcm91cCA9IGV4cG9ydHMuc3RhcnRHcm91cCA9IGV4cG9ydHMuaW5mbyA9IGV4cG9ydHMubm90aWNlID0gZXhwb3J0cy53YXJuaW5nID0gZXhwb3J0cy5lcnJvciA9IGV4cG9ydHMuZGVidWcgPSBleHBvcnRzLmlzRGVidWcgPSBleHBvcnRzLnNldEZhaWxlZCA9IGV4cG9ydHMuc2V0Q29tbWFuZEVjaG8gPSBleHBvcnRzLnNldE91dHB1dCA9IGV4cG9ydHMuZ2V0Qm9vbGVhbklucHV0ID0gZXhwb3J0cy5nZXRNdWx0aWxpbmVJbnB1dCA9IGV4cG9ydHMuZ2V0SW5wdXQgPSBleHBvcnRzLmFkZFBhdGggPSBleHBvcnRzLnNldFNlY3JldCA9IGV4cG9ydHMuZXhwb3J0VmFyaWFibGUgPSBleHBvcnRzLkV4aXRDb2RlID0gdm9pZCAwO1xuY29uc3QgY29tbWFuZF8xID0gcmVxdWlyZShcIi4vY29tbWFuZFwiKTtcbmNvbnN0IGZpbGVfY29tbWFuZF8xID0gcmVxdWlyZShcIi4vZmlsZS1jb21tYW5kXCIpO1xuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoXCIuL3V0aWxzXCIpO1xuY29uc3Qgb3MgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIm9zXCIpKTtcbmNvbnN0IHBhdGggPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcInBhdGhcIikpO1xuY29uc3Qgb2lkY191dGlsc18xID0gcmVxdWlyZShcIi4vb2lkYy11dGlsc1wiKTtcbi8qKlxuICogVGhlIGNvZGUgdG8gZXhpdCBhbiBhY3Rpb25cbiAqL1xudmFyIEV4aXRDb2RlO1xuKGZ1bmN0aW9uIChFeGl0Q29kZSkge1xuICAgIC8qKlxuICAgICAqIEEgY29kZSBpbmRpY2F0aW5nIHRoYXQgdGhlIGFjdGlvbiB3YXMgc3VjY2Vzc2Z1bFxuICAgICAqL1xuICAgIEV4aXRDb2RlW0V4aXRDb2RlW1wiU3VjY2Vzc1wiXSA9IDBdID0gXCJTdWNjZXNzXCI7XG4gICAgLyoqXG4gICAgICogQSBjb2RlIGluZGljYXRpbmcgdGhhdCB0aGUgYWN0aW9uIHdhcyBhIGZhaWx1cmVcbiAgICAgKi9cbiAgICBFeGl0Q29kZVtFeGl0Q29kZVtcIkZhaWx1cmVcIl0gPSAxXSA9IFwiRmFpbHVyZVwiO1xufSkoRXhpdENvZGUgfHwgKGV4cG9ydHMuRXhpdENvZGUgPSBFeGl0Q29kZSA9IHt9KSk7XG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBWYXJpYWJsZXNcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8qKlxuICogU2V0cyBlbnYgdmFyaWFibGUgZm9yIHRoaXMgYWN0aW9uIGFuZCBmdXR1cmUgYWN0aW9ucyBpbiB0aGUgam9iXG4gKiBAcGFyYW0gbmFtZSB0aGUgbmFtZSBvZiB0aGUgdmFyaWFibGUgdG8gc2V0XG4gKiBAcGFyYW0gdmFsIHRoZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUuIE5vbi1zdHJpbmcgdmFsdWVzIHdpbGwgYmUgY29udmVydGVkIHRvIGEgc3RyaW5nIHZpYSBKU09OLnN0cmluZ2lmeVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZnVuY3Rpb24gZXhwb3J0VmFyaWFibGUobmFtZSwgdmFsKSB7XG4gICAgY29uc3QgY29udmVydGVkVmFsID0gKDAsIHV0aWxzXzEudG9Db21tYW5kVmFsdWUpKHZhbCk7XG4gICAgcHJvY2Vzcy5lbnZbbmFtZV0gPSBjb252ZXJ0ZWRWYWw7XG4gICAgY29uc3QgZmlsZVBhdGggPSBwcm9jZXNzLmVudlsnR0lUSFVCX0VOViddIHx8ICcnO1xuICAgIGlmIChmaWxlUGF0aCkge1xuICAgICAgICByZXR1cm4gKDAsIGZpbGVfY29tbWFuZF8xLmlzc3VlRmlsZUNvbW1hbmQpKCdFTlYnLCAoMCwgZmlsZV9jb21tYW5kXzEucHJlcGFyZUtleVZhbHVlTWVzc2FnZSkobmFtZSwgdmFsKSk7XG4gICAgfVxuICAgICgwLCBjb21tYW5kXzEuaXNzdWVDb21tYW5kKSgnc2V0LWVudicsIHsgbmFtZSB9LCBjb252ZXJ0ZWRWYWwpO1xufVxuZXhwb3J0cy5leHBvcnRWYXJpYWJsZSA9IGV4cG9ydFZhcmlhYmxlO1xuLyoqXG4gKiBSZWdpc3RlcnMgYSBzZWNyZXQgd2hpY2ggd2lsbCBnZXQgbWFza2VkIGZyb20gbG9nc1xuICogQHBhcmFtIHNlY3JldCB2YWx1ZSBvZiB0aGUgc2VjcmV0XG4gKi9cbmZ1bmN0aW9uIHNldFNlY3JldChzZWNyZXQpIHtcbiAgICAoMCwgY29tbWFuZF8xLmlzc3VlQ29tbWFuZCkoJ2FkZC1tYXNrJywge30sIHNlY3JldCk7XG59XG5leHBvcnRzLnNldFNlY3JldCA9IHNldFNlY3JldDtcbi8qKlxuICogUHJlcGVuZHMgaW5wdXRQYXRoIHRvIHRoZSBQQVRIIChmb3IgdGhpcyBhY3Rpb24gYW5kIGZ1dHVyZSBhY3Rpb25zKVxuICogQHBhcmFtIGlucHV0UGF0aFxuICovXG5mdW5jdGlvbiBhZGRQYXRoKGlucHV0UGF0aCkge1xuICAgIGNvbnN0IGZpbGVQYXRoID0gcHJvY2Vzcy5lbnZbJ0dJVEhVQl9QQVRIJ10gfHwgJyc7XG4gICAgaWYgKGZpbGVQYXRoKSB7XG4gICAgICAgICgwLCBmaWxlX2NvbW1hbmRfMS5pc3N1ZUZpbGVDb21tYW5kKSgnUEFUSCcsIGlucHV0UGF0aCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICAoMCwgY29tbWFuZF8xLmlzc3VlQ29tbWFuZCkoJ2FkZC1wYXRoJywge30sIGlucHV0UGF0aCk7XG4gICAgfVxuICAgIHByb2Nlc3MuZW52WydQQVRIJ10gPSBgJHtpbnB1dFBhdGh9JHtwYXRoLmRlbGltaXRlcn0ke3Byb2Nlc3MuZW52WydQQVRIJ119YDtcbn1cbmV4cG9ydHMuYWRkUGF0aCA9IGFkZFBhdGg7XG4vKipcbiAqIEdldHMgdGhlIHZhbHVlIG9mIGFuIGlucHV0LlxuICogVW5sZXNzIHRyaW1XaGl0ZXNwYWNlIGlzIHNldCB0byBmYWxzZSBpbiBJbnB1dE9wdGlvbnMsIHRoZSB2YWx1ZSBpcyBhbHNvIHRyaW1tZWQuXG4gKiBSZXR1cm5zIGFuIGVtcHR5IHN0cmluZyBpZiB0aGUgdmFsdWUgaXMgbm90IGRlZmluZWQuXG4gKlxuICogQHBhcmFtICAgICBuYW1lICAgICBuYW1lIG9mIHRoZSBpbnB1dCB0byBnZXRcbiAqIEBwYXJhbSAgICAgb3B0aW9ucyAgb3B0aW9uYWwuIFNlZSBJbnB1dE9wdGlvbnMuXG4gKiBAcmV0dXJucyAgIHN0cmluZ1xuICovXG5mdW5jdGlvbiBnZXRJbnB1dChuYW1lLCBvcHRpb25zKSB7XG4gICAgY29uc3QgdmFsID0gcHJvY2Vzcy5lbnZbYElOUFVUXyR7bmFtZS5yZXBsYWNlKC8gL2csICdfJykudG9VcHBlckNhc2UoKX1gXSB8fCAnJztcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnJlcXVpcmVkICYmICF2YWwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnB1dCByZXF1aXJlZCBhbmQgbm90IHN1cHBsaWVkOiAke25hbWV9YCk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMudHJpbVdoaXRlc3BhY2UgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICAgIHJldHVybiB2YWwudHJpbSgpO1xufVxuZXhwb3J0cy5nZXRJbnB1dCA9IGdldElucHV0O1xuLyoqXG4gKiBHZXRzIHRoZSB2YWx1ZXMgb2YgYW4gbXVsdGlsaW5lIGlucHV0LiAgRWFjaCB2YWx1ZSBpcyBhbHNvIHRyaW1tZWQuXG4gKlxuICogQHBhcmFtICAgICBuYW1lICAgICBuYW1lIG9mIHRoZSBpbnB1dCB0byBnZXRcbiAqIEBwYXJhbSAgICAgb3B0aW9ucyAgb3B0aW9uYWwuIFNlZSBJbnB1dE9wdGlvbnMuXG4gKiBAcmV0dXJucyAgIHN0cmluZ1tdXG4gKlxuICovXG5mdW5jdGlvbiBnZXRNdWx0aWxpbmVJbnB1dChuYW1lLCBvcHRpb25zKSB7XG4gICAgY29uc3QgaW5wdXRzID0gZ2V0SW5wdXQobmFtZSwgb3B0aW9ucylcbiAgICAgICAgLnNwbGl0KCdcXG4nKVxuICAgICAgICAuZmlsdGVyKHggPT4geCAhPT0gJycpO1xuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMudHJpbVdoaXRlc3BhY2UgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBpbnB1dHM7XG4gICAgfVxuICAgIHJldHVybiBpbnB1dHMubWFwKGlucHV0ID0+IGlucHV0LnRyaW0oKSk7XG59XG5leHBvcnRzLmdldE11bHRpbGluZUlucHV0ID0gZ2V0TXVsdGlsaW5lSW5wdXQ7XG4vKipcbiAqIEdldHMgdGhlIGlucHV0IHZhbHVlIG9mIHRoZSBib29sZWFuIHR5cGUgaW4gdGhlIFlBTUwgMS4yIFwiY29yZSBzY2hlbWFcIiBzcGVjaWZpY2F0aW9uLlxuICogU3VwcG9ydCBib29sZWFuIGlucHV0IGxpc3Q6IGB0cnVlIHwgVHJ1ZSB8IFRSVUUgfCBmYWxzZSB8IEZhbHNlIHwgRkFMU0VgIC5cbiAqIFRoZSByZXR1cm4gdmFsdWUgaXMgYWxzbyBpbiBib29sZWFuIHR5cGUuXG4gKiByZWY6IGh0dHBzOi8veWFtbC5vcmcvc3BlYy8xLjIvc3BlYy5odG1sI2lkMjgwNDkyM1xuICpcbiAqIEBwYXJhbSAgICAgbmFtZSAgICAgbmFtZSBvZiB0aGUgaW5wdXQgdG8gZ2V0XG4gKiBAcGFyYW0gICAgIG9wdGlvbnMgIG9wdGlvbmFsLiBTZWUgSW5wdXRPcHRpb25zLlxuICogQHJldHVybnMgICBib29sZWFuXG4gKi9cbmZ1bmN0aW9uIGdldEJvb2xlYW5JbnB1dChuYW1lLCBvcHRpb25zKSB7XG4gICAgY29uc3QgdHJ1ZVZhbHVlID0gWyd0cnVlJywgJ1RydWUnLCAnVFJVRSddO1xuICAgIGNvbnN0IGZhbHNlVmFsdWUgPSBbJ2ZhbHNlJywgJ0ZhbHNlJywgJ0ZBTFNFJ107XG4gICAgY29uc3QgdmFsID0gZ2V0SW5wdXQobmFtZSwgb3B0aW9ucyk7XG4gICAgaWYgKHRydWVWYWx1ZS5pbmNsdWRlcyh2YWwpKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoZmFsc2VWYWx1ZS5pbmNsdWRlcyh2YWwpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgSW5wdXQgZG9lcyBub3QgbWVldCBZQU1MIDEuMiBcIkNvcmUgU2NoZW1hXCIgc3BlY2lmaWNhdGlvbjogJHtuYW1lfVxcbmAgK1xuICAgICAgICBgU3VwcG9ydCBib29sZWFuIGlucHV0IGxpc3Q6IFxcYHRydWUgfCBUcnVlIHwgVFJVRSB8IGZhbHNlIHwgRmFsc2UgfCBGQUxTRVxcYGApO1xufVxuZXhwb3J0cy5nZXRCb29sZWFuSW5wdXQgPSBnZXRCb29sZWFuSW5wdXQ7XG4vKipcbiAqIFNldHMgdGhlIHZhbHVlIG9mIGFuIG91dHB1dC5cbiAqXG4gKiBAcGFyYW0gICAgIG5hbWUgICAgIG5hbWUgb2YgdGhlIG91dHB1dCB0byBzZXRcbiAqIEBwYXJhbSAgICAgdmFsdWUgICAgdmFsdWUgdG8gc3RvcmUuIE5vbi1zdHJpbmcgdmFsdWVzIHdpbGwgYmUgY29udmVydGVkIHRvIGEgc3RyaW5nIHZpYSBKU09OLnN0cmluZ2lmeVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZnVuY3Rpb24gc2V0T3V0cHV0KG5hbWUsIHZhbHVlKSB7XG4gICAgY29uc3QgZmlsZVBhdGggPSBwcm9jZXNzLmVudlsnR0lUSFVCX09VVFBVVCddIHx8ICcnO1xuICAgIGlmIChmaWxlUGF0aCkge1xuICAgICAgICByZXR1cm4gKDAsIGZpbGVfY29tbWFuZF8xLmlzc3VlRmlsZUNvbW1hbmQpKCdPVVRQVVQnLCAoMCwgZmlsZV9jb21tYW5kXzEucHJlcGFyZUtleVZhbHVlTWVzc2FnZSkobmFtZSwgdmFsdWUpKTtcbiAgICB9XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUob3MuRU9MKTtcbiAgICAoMCwgY29tbWFuZF8xLmlzc3VlQ29tbWFuZCkoJ3NldC1vdXRwdXQnLCB7IG5hbWUgfSwgKDAsIHV0aWxzXzEudG9Db21tYW5kVmFsdWUpKHZhbHVlKSk7XG59XG5leHBvcnRzLnNldE91dHB1dCA9IHNldE91dHB1dDtcbi8qKlxuICogRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgZWNob2luZyBvZiBjb21tYW5kcyBpbnRvIHN0ZG91dCBmb3IgdGhlIHJlc3Qgb2YgdGhlIHN0ZXAuXG4gKiBFY2hvaW5nIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQgaWYgQUNUSU9OU19TVEVQX0RFQlVHIGlzIG5vdCBzZXQuXG4gKlxuICovXG5mdW5jdGlvbiBzZXRDb21tYW5kRWNobyhlbmFibGVkKSB7XG4gICAgKDAsIGNvbW1hbmRfMS5pc3N1ZSkoJ2VjaG8nLCBlbmFibGVkID8gJ29uJyA6ICdvZmYnKTtcbn1cbmV4cG9ydHMuc2V0Q29tbWFuZEVjaG8gPSBzZXRDb21tYW5kRWNobztcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJlc3VsdHNcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8qKlxuICogU2V0cyB0aGUgYWN0aW9uIHN0YXR1cyB0byBmYWlsZWQuXG4gKiBXaGVuIHRoZSBhY3Rpb24gZXhpdHMgaXQgd2lsbCBiZSB3aXRoIGFuIGV4aXQgY29kZSBvZiAxXG4gKiBAcGFyYW0gbWVzc2FnZSBhZGQgZXJyb3IgaXNzdWUgbWVzc2FnZVxuICovXG5mdW5jdGlvbiBzZXRGYWlsZWQobWVzc2FnZSkge1xuICAgIHByb2Nlc3MuZXhpdENvZGUgPSBFeGl0Q29kZS5GYWlsdXJlO1xuICAgIGVycm9yKG1lc3NhZ2UpO1xufVxuZXhwb3J0cy5zZXRGYWlsZWQgPSBzZXRGYWlsZWQ7XG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBMb2dnaW5nIENvbW1hbmRzXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vKipcbiAqIEdldHMgd2hldGhlciBBY3Rpb25zIFN0ZXAgRGVidWcgaXMgb24gb3Igbm90XG4gKi9cbmZ1bmN0aW9uIGlzRGVidWcoKSB7XG4gICAgcmV0dXJuIHByb2Nlc3MuZW52WydSVU5ORVJfREVCVUcnXSA9PT0gJzEnO1xufVxuZXhwb3J0cy5pc0RlYnVnID0gaXNEZWJ1Zztcbi8qKlxuICogV3JpdGVzIGRlYnVnIG1lc3NhZ2UgdG8gdXNlciBsb2dcbiAqIEBwYXJhbSBtZXNzYWdlIGRlYnVnIG1lc3NhZ2VcbiAqL1xuZnVuY3Rpb24gZGVidWcobWVzc2FnZSkge1xuICAgICgwLCBjb21tYW5kXzEuaXNzdWVDb21tYW5kKSgnZGVidWcnLCB7fSwgbWVzc2FnZSk7XG59XG5leHBvcnRzLmRlYnVnID0gZGVidWc7XG4vKipcbiAqIEFkZHMgYW4gZXJyb3IgaXNzdWVcbiAqIEBwYXJhbSBtZXNzYWdlIGVycm9yIGlzc3VlIG1lc3NhZ2UuIEVycm9ycyB3aWxsIGJlIGNvbnZlcnRlZCB0byBzdHJpbmcgdmlhIHRvU3RyaW5nKClcbiAqIEBwYXJhbSBwcm9wZXJ0aWVzIG9wdGlvbmFsIHByb3BlcnRpZXMgdG8gYWRkIHRvIHRoZSBhbm5vdGF0aW9uLlxuICovXG5mdW5jdGlvbiBlcnJvcihtZXNzYWdlLCBwcm9wZXJ0aWVzID0ge30pIHtcbiAgICAoMCwgY29tbWFuZF8xLmlzc3VlQ29tbWFuZCkoJ2Vycm9yJywgKDAsIHV0aWxzXzEudG9Db21tYW5kUHJvcGVydGllcykocHJvcGVydGllcyksIG1lc3NhZ2UgaW5zdGFuY2VvZiBFcnJvciA/IG1lc3NhZ2UudG9TdHJpbmcoKSA6IG1lc3NhZ2UpO1xufVxuZXhwb3J0cy5lcnJvciA9IGVycm9yO1xuLyoqXG4gKiBBZGRzIGEgd2FybmluZyBpc3N1ZVxuICogQHBhcmFtIG1lc3NhZ2Ugd2FybmluZyBpc3N1ZSBtZXNzYWdlLiBFcnJvcnMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gc3RyaW5nIHZpYSB0b1N0cmluZygpXG4gKiBAcGFyYW0gcHJvcGVydGllcyBvcHRpb25hbCBwcm9wZXJ0aWVzIHRvIGFkZCB0byB0aGUgYW5ub3RhdGlvbi5cbiAqL1xuZnVuY3Rpb24gd2FybmluZyhtZXNzYWdlLCBwcm9wZXJ0aWVzID0ge30pIHtcbiAgICAoMCwgY29tbWFuZF8xLmlzc3VlQ29tbWFuZCkoJ3dhcm5pbmcnLCAoMCwgdXRpbHNfMS50b0NvbW1hbmRQcm9wZXJ0aWVzKShwcm9wZXJ0aWVzKSwgbWVzc2FnZSBpbnN0YW5jZW9mIEVycm9yID8gbWVzc2FnZS50b1N0cmluZygpIDogbWVzc2FnZSk7XG59XG5leHBvcnRzLndhcm5pbmcgPSB3YXJuaW5nO1xuLyoqXG4gKiBBZGRzIGEgbm90aWNlIGlzc3VlXG4gKiBAcGFyYW0gbWVzc2FnZSBub3RpY2UgaXNzdWUgbWVzc2FnZS4gRXJyb3JzIHdpbGwgYmUgY29udmVydGVkIHRvIHN0cmluZyB2aWEgdG9TdHJpbmcoKVxuICogQHBhcmFtIHByb3BlcnRpZXMgb3B0aW9uYWwgcHJvcGVydGllcyB0byBhZGQgdG8gdGhlIGFubm90YXRpb24uXG4gKi9cbmZ1bmN0aW9uIG5vdGljZShtZXNzYWdlLCBwcm9wZXJ0aWVzID0ge30pIHtcbiAgICAoMCwgY29tbWFuZF8xLmlzc3VlQ29tbWFuZCkoJ25vdGljZScsICgwLCB1dGlsc18xLnRvQ29tbWFuZFByb3BlcnRpZXMpKHByb3BlcnRpZXMpLCBtZXNzYWdlIGluc3RhbmNlb2YgRXJyb3IgPyBtZXNzYWdlLnRvU3RyaW5nKCkgOiBtZXNzYWdlKTtcbn1cbmV4cG9ydHMubm90aWNlID0gbm90aWNlO1xuLyoqXG4gKiBXcml0ZXMgaW5mbyB0byBsb2cgd2l0aCBjb25zb2xlLmxvZy5cbiAqIEBwYXJhbSBtZXNzYWdlIGluZm8gbWVzc2FnZVxuICovXG5mdW5jdGlvbiBpbmZvKG1lc3NhZ2UpIHtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShtZXNzYWdlICsgb3MuRU9MKTtcbn1cbmV4cG9ydHMuaW5mbyA9IGluZm87XG4vKipcbiAqIEJlZ2luIGFuIG91dHB1dCBncm91cC5cbiAqXG4gKiBPdXRwdXQgdW50aWwgdGhlIG5leHQgYGdyb3VwRW5kYCB3aWxsIGJlIGZvbGRhYmxlIGluIHRoaXMgZ3JvdXBcbiAqXG4gKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgb3V0cHV0IGdyb3VwXG4gKi9cbmZ1bmN0aW9uIHN0YXJ0R3JvdXAobmFtZSkge1xuICAgICgwLCBjb21tYW5kXzEuaXNzdWUpKCdncm91cCcsIG5hbWUpO1xufVxuZXhwb3J0cy5zdGFydEdyb3VwID0gc3RhcnRHcm91cDtcbi8qKlxuICogRW5kIGFuIG91dHB1dCBncm91cC5cbiAqL1xuZnVuY3Rpb24gZW5kR3JvdXAoKSB7XG4gICAgKDAsIGNvbW1hbmRfMS5pc3N1ZSkoJ2VuZGdyb3VwJyk7XG59XG5leHBvcnRzLmVuZEdyb3VwID0gZW5kR3JvdXA7XG4vKipcbiAqIFdyYXAgYW4gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIGNhbGwgaW4gYSBncm91cC5cbiAqXG4gKiBSZXR1cm5zIHRoZSBzYW1lIHR5cGUgYXMgdGhlIGZ1bmN0aW9uIGl0c2VsZi5cbiAqXG4gKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgZ3JvdXBcbiAqIEBwYXJhbSBmbiBUaGUgZnVuY3Rpb24gdG8gd3JhcCBpbiB0aGUgZ3JvdXBcbiAqL1xuZnVuY3Rpb24gZ3JvdXAobmFtZSwgZm4pIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBzdGFydEdyb3VwKG5hbWUpO1xuICAgICAgICBsZXQgcmVzdWx0O1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmVzdWx0ID0geWllbGQgZm4oKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIGVuZEdyb3VwKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZ3JvdXAgPSBncm91cDtcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFdyYXBwZXIgYWN0aW9uIHN0YXRlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vKipcbiAqIFNhdmVzIHN0YXRlIGZvciBjdXJyZW50IGFjdGlvbiwgdGhlIHN0YXRlIGNhbiBvbmx5IGJlIHJldHJpZXZlZCBieSB0aGlzIGFjdGlvbidzIHBvc3Qgam9iIGV4ZWN1dGlvbi5cbiAqXG4gKiBAcGFyYW0gICAgIG5hbWUgICAgIG5hbWUgb2YgdGhlIHN0YXRlIHRvIHN0b3JlXG4gKiBAcGFyYW0gICAgIHZhbHVlICAgIHZhbHVlIHRvIHN0b3JlLiBOb24tc3RyaW5nIHZhbHVlcyB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIHN0cmluZyB2aWEgSlNPTi5zdHJpbmdpZnlcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmZ1bmN0aW9uIHNhdmVTdGF0ZShuYW1lLCB2YWx1ZSkge1xuICAgIGNvbnN0IGZpbGVQYXRoID0gcHJvY2Vzcy5lbnZbJ0dJVEhVQl9TVEFURSddIHx8ICcnO1xuICAgIGlmIChmaWxlUGF0aCkge1xuICAgICAgICByZXR1cm4gKDAsIGZpbGVfY29tbWFuZF8xLmlzc3VlRmlsZUNvbW1hbmQpKCdTVEFURScsICgwLCBmaWxlX2NvbW1hbmRfMS5wcmVwYXJlS2V5VmFsdWVNZXNzYWdlKShuYW1lLCB2YWx1ZSkpO1xuICAgIH1cbiAgICAoMCwgY29tbWFuZF8xLmlzc3VlQ29tbWFuZCkoJ3NhdmUtc3RhdGUnLCB7IG5hbWUgfSwgKDAsIHV0aWxzXzEudG9Db21tYW5kVmFsdWUpKHZhbHVlKSk7XG59XG5leHBvcnRzLnNhdmVTdGF0ZSA9IHNhdmVTdGF0ZTtcbi8qKlxuICogR2V0cyB0aGUgdmFsdWUgb2YgYW4gc3RhdGUgc2V0IGJ5IHRoaXMgYWN0aW9uJ3MgbWFpbiBleGVjdXRpb24uXG4gKlxuICogQHBhcmFtICAgICBuYW1lICAgICBuYW1lIG9mIHRoZSBzdGF0ZSB0byBnZXRcbiAqIEByZXR1cm5zICAgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGdldFN0YXRlKG5hbWUpIHtcbiAgICByZXR1cm4gcHJvY2Vzcy5lbnZbYFNUQVRFXyR7bmFtZX1gXSB8fCAnJztcbn1cbmV4cG9ydHMuZ2V0U3RhdGUgPSBnZXRTdGF0ZTtcbmZ1bmN0aW9uIGdldElEVG9rZW4oYXVkKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgcmV0dXJuIHlpZWxkIG9pZGNfdXRpbHNfMS5PaWRjQ2xpZW50LmdldElEVG9rZW4oYXVkKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZ2V0SURUb2tlbiA9IGdldElEVG9rZW47XG4vKipcbiAqIFN1bW1hcnkgZXhwb3J0c1xuICovXG52YXIgc3VtbWFyeV8xID0gcmVxdWlyZShcIi4vc3VtbWFyeVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN1bW1hcnlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN1bW1hcnlfMS5zdW1tYXJ5OyB9IH0pO1xuLyoqXG4gKiBAZGVwcmVjYXRlZCB1c2UgY29yZS5zdW1tYXJ5XG4gKi9cbnZhciBzdW1tYXJ5XzIgPSByZXF1aXJlKFwiLi9zdW1tYXJ5XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibWFya2Rvd25TdW1tYXJ5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzdW1tYXJ5XzIubWFya2Rvd25TdW1tYXJ5OyB9IH0pO1xuLyoqXG4gKiBQYXRoIGV4cG9ydHNcbiAqL1xudmFyIHBhdGhfdXRpbHNfMSA9IHJlcXVpcmUoXCIuL3BhdGgtdXRpbHNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0b1Bvc2l4UGF0aFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcGF0aF91dGlsc18xLnRvUG9zaXhQYXRoOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidG9XaW4zMlBhdGhcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBhdGhfdXRpbHNfMS50b1dpbjMyUGF0aDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRvUGxhdGZvcm1QYXRoXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwYXRoX3V0aWxzXzEudG9QbGF0Zm9ybVBhdGg7IH0gfSk7XG4vKipcbiAqIFBsYXRmb3JtIHV0aWxpdGllcyBleHBvcnRzXG4gKi9cbmV4cG9ydHMucGxhdGZvcm0gPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIi4vcGxhdGZvcm1cIikpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29yZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Db250ZXh0ID0gdm9pZCAwO1xuY29uc3QgZnNfMSA9IHJlcXVpcmUoXCJmc1wiKTtcbmNvbnN0IG9zXzEgPSByZXF1aXJlKFwib3NcIik7XG5jbGFzcyBDb250ZXh0IHtcbiAgICAvKipcbiAgICAgKiBIeWRyYXRlIHRoZSBjb250ZXh0IGZyb20gdGhlIGVudmlyb25tZW50XG4gICAgICovXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jO1xuICAgICAgICB0aGlzLnBheWxvYWQgPSB7fTtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52LkdJVEhVQl9FVkVOVF9QQVRIKSB7XG4gICAgICAgICAgICBpZiAoKDAsIGZzXzEuZXhpc3RzU3luYykocHJvY2Vzcy5lbnYuR0lUSFVCX0VWRU5UX1BBVEgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYXlsb2FkID0gSlNPTi5wYXJzZSgoMCwgZnNfMS5yZWFkRmlsZVN5bmMpKHByb2Nlc3MuZW52LkdJVEhVQl9FVkVOVF9QQVRILCB7IGVuY29kaW5nOiAndXRmOCcgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IHByb2Nlc3MuZW52LkdJVEhVQl9FVkVOVF9QQVRIO1xuICAgICAgICAgICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGBHSVRIVUJfRVZFTlRfUEFUSCAke3BhdGh9IGRvZXMgbm90IGV4aXN0JHtvc18xLkVPTH1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmV2ZW50TmFtZSA9IHByb2Nlc3MuZW52LkdJVEhVQl9FVkVOVF9OQU1FO1xuICAgICAgICB0aGlzLnNoYSA9IHByb2Nlc3MuZW52LkdJVEhVQl9TSEE7XG4gICAgICAgIHRoaXMucmVmID0gcHJvY2Vzcy5lbnYuR0lUSFVCX1JFRjtcbiAgICAgICAgdGhpcy53b3JrZmxvdyA9IHByb2Nlc3MuZW52LkdJVEhVQl9XT1JLRkxPVztcbiAgICAgICAgdGhpcy5hY3Rpb24gPSBwcm9jZXNzLmVudi5HSVRIVUJfQUNUSU9OO1xuICAgICAgICB0aGlzLmFjdG9yID0gcHJvY2Vzcy5lbnYuR0lUSFVCX0FDVE9SO1xuICAgICAgICB0aGlzLmpvYiA9IHByb2Nlc3MuZW52LkdJVEhVQl9KT0I7XG4gICAgICAgIHRoaXMucnVuTnVtYmVyID0gcGFyc2VJbnQocHJvY2Vzcy5lbnYuR0lUSFVCX1JVTl9OVU1CRVIsIDEwKTtcbiAgICAgICAgdGhpcy5ydW5JZCA9IHBhcnNlSW50KHByb2Nlc3MuZW52LkdJVEhVQl9SVU5fSUQsIDEwKTtcbiAgICAgICAgdGhpcy5hcGlVcmwgPSAoX2EgPSBwcm9jZXNzLmVudi5HSVRIVUJfQVBJX1VSTCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogYGh0dHBzOi8vYXBpLmdpdGh1Yi5jb21gO1xuICAgICAgICB0aGlzLnNlcnZlclVybCA9IChfYiA9IHByb2Nlc3MuZW52LkdJVEhVQl9TRVJWRVJfVVJMKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBgaHR0cHM6Ly9naXRodWIuY29tYDtcbiAgICAgICAgdGhpcy5ncmFwaHFsVXJsID1cbiAgICAgICAgICAgIChfYyA9IHByb2Nlc3MuZW52LkdJVEhVQl9HUkFQSFFMX1VSTCkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogYGh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vZ3JhcGhxbGA7XG4gICAgfVxuICAgIGdldCBpc3N1ZSgpIHtcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IHRoaXMucGF5bG9hZDtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5yZXBvKSwgeyBudW1iZXI6IChwYXlsb2FkLmlzc3VlIHx8IHBheWxvYWQucHVsbF9yZXF1ZXN0IHx8IHBheWxvYWQpLm51bWJlciB9KTtcbiAgICB9XG4gICAgZ2V0IHJlcG8oKSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5HSVRIVUJfUkVQT1NJVE9SWSkge1xuICAgICAgICAgICAgY29uc3QgW293bmVyLCByZXBvXSA9IHByb2Nlc3MuZW52LkdJVEhVQl9SRVBPU0lUT1JZLnNwbGl0KCcvJyk7XG4gICAgICAgICAgICByZXR1cm4geyBvd25lciwgcmVwbyB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnBheWxvYWQucmVwb3NpdG9yeSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBvd25lcjogdGhpcy5wYXlsb2FkLnJlcG9zaXRvcnkub3duZXIubG9naW4sXG4gICAgICAgICAgICAgICAgcmVwbzogdGhpcy5wYXlsb2FkLnJlcG9zaXRvcnkubmFtZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJjb250ZXh0LnJlcG8gcmVxdWlyZXMgYSBHSVRIVUJfUkVQT1NJVE9SWSBlbnZpcm9ubWVudCB2YXJpYWJsZSBsaWtlICdvd25lci9yZXBvJ1wiKTtcbiAgICB9XG59XG5leHBvcnRzLkNvbnRleHQgPSBDb250ZXh0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29udGV4dC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0QXBpQmFzZVVybCA9IGV4cG9ydHMuZ2V0UHJveHlGZXRjaCA9IGV4cG9ydHMuZ2V0UHJveHlBZ2VudERpc3BhdGNoZXIgPSBleHBvcnRzLmdldFByb3h5QWdlbnQgPSBleHBvcnRzLmdldEF1dGhTdHJpbmcgPSB2b2lkIDA7XG5jb25zdCBodHRwQ2xpZW50ID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJAYWN0aW9ucy9odHRwLWNsaWVudFwiKSk7XG5jb25zdCB1bmRpY2lfMSA9IHJlcXVpcmUoXCJ1bmRpY2lcIik7XG5mdW5jdGlvbiBnZXRBdXRoU3RyaW5nKHRva2VuLCBvcHRpb25zKSB7XG4gICAgaWYgKCF0b2tlbiAmJiAhb3B0aW9ucy5hdXRoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUGFyYW1ldGVyIHRva2VuIG9yIG9wdHMuYXV0aCBpcyByZXF1aXJlZCcpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0b2tlbiAmJiBvcHRpb25zLmF1dGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJhbWV0ZXJzIHRva2VuIGFuZCBvcHRzLmF1dGggbWF5IG5vdCBib3RoIGJlIHNwZWNpZmllZCcpO1xuICAgIH1cbiAgICByZXR1cm4gdHlwZW9mIG9wdGlvbnMuYXV0aCA9PT0gJ3N0cmluZycgPyBvcHRpb25zLmF1dGggOiBgdG9rZW4gJHt0b2tlbn1gO1xufVxuZXhwb3J0cy5nZXRBdXRoU3RyaW5nID0gZ2V0QXV0aFN0cmluZztcbmZ1bmN0aW9uIGdldFByb3h5QWdlbnQoZGVzdGluYXRpb25VcmwpIHtcbiAgICBjb25zdCBoYyA9IG5ldyBodHRwQ2xpZW50Lkh0dHBDbGllbnQoKTtcbiAgICByZXR1cm4gaGMuZ2V0QWdlbnQoZGVzdGluYXRpb25VcmwpO1xufVxuZXhwb3J0cy5nZXRQcm94eUFnZW50ID0gZ2V0UHJveHlBZ2VudDtcbmZ1bmN0aW9uIGdldFByb3h5QWdlbnREaXNwYXRjaGVyKGRlc3RpbmF0aW9uVXJsKSB7XG4gICAgY29uc3QgaGMgPSBuZXcgaHR0cENsaWVudC5IdHRwQ2xpZW50KCk7XG4gICAgcmV0dXJuIGhjLmdldEFnZW50RGlzcGF0Y2hlcihkZXN0aW5hdGlvblVybCk7XG59XG5leHBvcnRzLmdldFByb3h5QWdlbnREaXNwYXRjaGVyID0gZ2V0UHJveHlBZ2VudERpc3BhdGNoZXI7XG5mdW5jdGlvbiBnZXRQcm94eUZldGNoKGRlc3RpbmF0aW9uVXJsKSB7XG4gICAgY29uc3QgaHR0cERpc3BhdGNoZXIgPSBnZXRQcm94eUFnZW50RGlzcGF0Y2hlcihkZXN0aW5hdGlvblVybCk7XG4gICAgY29uc3QgcHJveHlGZXRjaCA9ICh1cmwsIG9wdHMpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgcmV0dXJuICgwLCB1bmRpY2lfMS5mZXRjaCkodXJsLCBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdHMpLCB7IGRpc3BhdGNoZXI6IGh0dHBEaXNwYXRjaGVyIH0pKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcHJveHlGZXRjaDtcbn1cbmV4cG9ydHMuZ2V0UHJveHlGZXRjaCA9IGdldFByb3h5RmV0Y2g7XG5mdW5jdGlvbiBnZXRBcGlCYXNlVXJsKCkge1xuICAgIHJldHVybiBwcm9jZXNzLmVudlsnR0lUSFVCX0FQSV9VUkwnXSB8fCAnaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbSc7XG59XG5leHBvcnRzLmdldEFwaUJhc2VVcmwgPSBnZXRBcGlCYXNlVXJsO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbHMuanMubWFwIiwKICAgICIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmZ1bmN0aW9uIGdldFVzZXJBZ2VudCgpIHtcbiAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgPT09IFwib2JqZWN0XCIgJiYgXCJ1c2VyQWdlbnRcIiBpbiBuYXZpZ2F0b3IpIHtcbiAgICByZXR1cm4gbmF2aWdhdG9yLnVzZXJBZ2VudDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgcHJvY2VzcyA9PT0gXCJvYmplY3RcIiAmJiBwcm9jZXNzLnZlcnNpb24gIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBgTm9kZS5qcy8ke3Byb2Nlc3MudmVyc2lvbi5zdWJzdHIoMSl9ICgke3Byb2Nlc3MucGxhdGZvcm19OyAke3Byb2Nlc3MuYXJjaH0pYDtcbiAgfVxuXG4gIHJldHVybiBcIjxlbnZpcm9ubWVudCB1bmRldGVjdGFibGU+XCI7XG59XG5cbmV4cG9ydHMuZ2V0VXNlckFnZW50ID0gZ2V0VXNlckFnZW50O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXG4iLAogICAgIm1vZHVsZS5leHBvcnRzID0gcmVnaXN0ZXI7XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyKHN0YXRlLCBuYW1lLCBtZXRob2QsIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiBtZXRob2QgIT09IFwiZnVuY3Rpb25cIikge1xuICAgIHRocm93IG5ldyBFcnJvcihcIm1ldGhvZCBmb3IgYmVmb3JlIGhvb2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICB9XG5cbiAgaWYgKCFvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkobmFtZSkpIHtcbiAgICByZXR1cm4gbmFtZS5yZXZlcnNlKCkucmVkdWNlKGZ1bmN0aW9uIChjYWxsYmFjaywgbmFtZSkge1xuICAgICAgcmV0dXJuIHJlZ2lzdGVyLmJpbmQobnVsbCwgc3RhdGUsIG5hbWUsIGNhbGxiYWNrLCBvcHRpb25zKTtcbiAgICB9LCBtZXRob2QpKCk7XG4gIH1cblxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFzdGF0ZS5yZWdpc3RyeVtuYW1lXSkge1xuICAgICAgcmV0dXJuIG1ldGhvZChvcHRpb25zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGUucmVnaXN0cnlbbmFtZV0ucmVkdWNlKGZ1bmN0aW9uIChtZXRob2QsIHJlZ2lzdGVyZWQpIHtcbiAgICAgIHJldHVybiByZWdpc3RlcmVkLmhvb2suYmluZChudWxsLCBtZXRob2QsIG9wdGlvbnMpO1xuICAgIH0sIG1ldGhvZCkoKTtcbiAgfSk7XG59XG4iLAogICAgIm1vZHVsZS5leHBvcnRzID0gYWRkSG9vaztcblxuZnVuY3Rpb24gYWRkSG9vayhzdGF0ZSwga2luZCwgbmFtZSwgaG9vaykge1xuICB2YXIgb3JpZyA9IGhvb2s7XG4gIGlmICghc3RhdGUucmVnaXN0cnlbbmFtZV0pIHtcbiAgICBzdGF0ZS5yZWdpc3RyeVtuYW1lXSA9IFtdO1xuICB9XG5cbiAgaWYgKGtpbmQgPT09IFwiYmVmb3JlXCIpIHtcbiAgICBob29rID0gZnVuY3Rpb24gKG1ldGhvZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgICAgIC50aGVuKG9yaWcuYmluZChudWxsLCBvcHRpb25zKSlcbiAgICAgICAgLnRoZW4obWV0aG9kLmJpbmQobnVsbCwgb3B0aW9ucykpO1xuICAgIH07XG4gIH1cblxuICBpZiAoa2luZCA9PT0gXCJhZnRlclwiKSB7XG4gICAgaG9vayA9IGZ1bmN0aW9uIChtZXRob2QsIG9wdGlvbnMpIHtcbiAgICAgIHZhciByZXN1bHQ7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICAgICAgLnRoZW4obWV0aG9kLmJpbmQobnVsbCwgb3B0aW9ucykpXG4gICAgICAgIC50aGVuKGZ1bmN0aW9uIChyZXN1bHRfKSB7XG4gICAgICAgICAgcmVzdWx0ID0gcmVzdWx0XztcbiAgICAgICAgICByZXR1cm4gb3JpZyhyZXN1bHQsIG9wdGlvbnMpO1xuICAgICAgICB9KVxuICAgICAgICAudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgfVxuXG4gIGlmIChraW5kID09PSBcImVycm9yXCIpIHtcbiAgICBob29rID0gZnVuY3Rpb24gKG1ldGhvZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgICAgIC50aGVuKG1ldGhvZC5iaW5kKG51bGwsIG9wdGlvbnMpKVxuICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIG9yaWcoZXJyb3IsIG9wdGlvbnMpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGUucmVnaXN0cnlbbmFtZV0ucHVzaCh7XG4gICAgaG9vazogaG9vayxcbiAgICBvcmlnOiBvcmlnLFxuICB9KTtcbn1cbiIsCiAgICAibW9kdWxlLmV4cG9ydHMgPSByZW1vdmVIb29rO1xuXG5mdW5jdGlvbiByZW1vdmVIb29rKHN0YXRlLCBuYW1lLCBtZXRob2QpIHtcbiAgaWYgKCFzdGF0ZS5yZWdpc3RyeVtuYW1lXSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBpbmRleCA9IHN0YXRlLnJlZ2lzdHJ5W25hbWVdXG4gICAgLm1hcChmdW5jdGlvbiAocmVnaXN0ZXJlZCkge1xuICAgICAgcmV0dXJuIHJlZ2lzdGVyZWQub3JpZztcbiAgICB9KVxuICAgIC5pbmRleE9mKG1ldGhvZCk7XG5cbiAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRlLnJlZ2lzdHJ5W25hbWVdLnNwbGljZShpbmRleCwgMSk7XG59XG4iLAogICAgInZhciByZWdpc3RlciA9IHJlcXVpcmUoXCIuL2xpYi9yZWdpc3RlclwiKTtcbnZhciBhZGRIb29rID0gcmVxdWlyZShcIi4vbGliL2FkZFwiKTtcbnZhciByZW1vdmVIb29rID0gcmVxdWlyZShcIi4vbGliL3JlbW92ZVwiKTtcblxuLy8gYmluZCB3aXRoIGFycmF5IG9mIGFyZ3VtZW50czogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzIxNzkyOTEzXG52YXIgYmluZCA9IEZ1bmN0aW9uLmJpbmQ7XG52YXIgYmluZGFibGUgPSBiaW5kLmJpbmQoYmluZCk7XG5cbmZ1bmN0aW9uIGJpbmRBcGkoaG9vaywgc3RhdGUsIG5hbWUpIHtcbiAgdmFyIHJlbW92ZUhvb2tSZWYgPSBiaW5kYWJsZShyZW1vdmVIb29rLCBudWxsKS5hcHBseShcbiAgICBudWxsLFxuICAgIG5hbWUgPyBbc3RhdGUsIG5hbWVdIDogW3N0YXRlXVxuICApO1xuICBob29rLmFwaSA9IHsgcmVtb3ZlOiByZW1vdmVIb29rUmVmIH07XG4gIGhvb2sucmVtb3ZlID0gcmVtb3ZlSG9va1JlZjtcbiAgW1wiYmVmb3JlXCIsIFwiZXJyb3JcIiwgXCJhZnRlclwiLCBcIndyYXBcIl0uZm9yRWFjaChmdW5jdGlvbiAoa2luZCkge1xuICAgIHZhciBhcmdzID0gbmFtZSA/IFtzdGF0ZSwga2luZCwgbmFtZV0gOiBbc3RhdGUsIGtpbmRdO1xuICAgIGhvb2tba2luZF0gPSBob29rLmFwaVtraW5kXSA9IGJpbmRhYmxlKGFkZEhvb2ssIG51bGwpLmFwcGx5KG51bGwsIGFyZ3MpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gSG9va1Npbmd1bGFyKCkge1xuICB2YXIgc2luZ3VsYXJIb29rTmFtZSA9IFwiaFwiO1xuICB2YXIgc2luZ3VsYXJIb29rU3RhdGUgPSB7XG4gICAgcmVnaXN0cnk6IHt9LFxuICB9O1xuICB2YXIgc2luZ3VsYXJIb29rID0gcmVnaXN0ZXIuYmluZChudWxsLCBzaW5ndWxhckhvb2tTdGF0ZSwgc2luZ3VsYXJIb29rTmFtZSk7XG4gIGJpbmRBcGkoc2luZ3VsYXJIb29rLCBzaW5ndWxhckhvb2tTdGF0ZSwgc2luZ3VsYXJIb29rTmFtZSk7XG4gIHJldHVybiBzaW5ndWxhckhvb2s7XG59XG5cbmZ1bmN0aW9uIEhvb2tDb2xsZWN0aW9uKCkge1xuICB2YXIgc3RhdGUgPSB7XG4gICAgcmVnaXN0cnk6IHt9LFxuICB9O1xuXG4gIHZhciBob29rID0gcmVnaXN0ZXIuYmluZChudWxsLCBzdGF0ZSk7XG4gIGJpbmRBcGkoaG9vaywgc3RhdGUpO1xuXG4gIHJldHVybiBob29rO1xufVxuXG52YXIgY29sbGVjdGlvbkhvb2tEZXByZWNhdGlvbk1lc3NhZ2VEaXNwbGF5ZWQgPSBmYWxzZTtcbmZ1bmN0aW9uIEhvb2soKSB7XG4gIGlmICghY29sbGVjdGlvbkhvb2tEZXByZWNhdGlvbk1lc3NhZ2VEaXNwbGF5ZWQpIHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICAnW2JlZm9yZS1hZnRlci1ob29rXTogXCJIb29rKClcIiByZXB1cnBvc2luZyB3YXJuaW5nLCB1c2UgXCJIb29rLkNvbGxlY3Rpb24oKVwiLiBSZWFkIG1vcmU6IGh0dHBzOi8vZ2l0LmlvL3VwZ3JhZGUtYmVmb3JlLWFmdGVyLWhvb2stdG8tMS40J1xuICAgICk7XG4gICAgY29sbGVjdGlvbkhvb2tEZXByZWNhdGlvbk1lc3NhZ2VEaXNwbGF5ZWQgPSB0cnVlO1xuICB9XG4gIHJldHVybiBIb29rQ29sbGVjdGlvbigpO1xufVxuXG5Ib29rLlNpbmd1bGFyID0gSG9va1Npbmd1bGFyLmJpbmQoKTtcbkhvb2suQ29sbGVjdGlvbiA9IEhvb2tDb2xsZWN0aW9uLmJpbmQoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBIb29rO1xuLy8gZXhwb3NlIGNvbnN0cnVjdG9ycyBhcyBhIG5hbWVkIHByb3BlcnR5IGZvciBUeXBlU2NyaXB0XG5tb2R1bGUuZXhwb3J0cy5Ib29rID0gSG9vaztcbm1vZHVsZS5leHBvcnRzLlNpbmd1bGFyID0gSG9vay5TaW5ndWxhcjtcbm1vZHVsZS5leHBvcnRzLkNvbGxlY3Rpb24gPSBIb29rLkNvbGxlY3Rpb247XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BEZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBfX2dldE93blByb3BOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO1xudmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19leHBvcnQgPSAodGFyZ2V0LCBhbGwpID0+IHtcbiAgZm9yICh2YXIgbmFtZSBpbiBhbGwpXG4gICAgX19kZWZQcm9wKHRhcmdldCwgbmFtZSwgeyBnZXQ6IGFsbFtuYW1lXSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcbn07XG52YXIgX19jb3B5UHJvcHMgPSAodG8sIGZyb20sIGV4Y2VwdCwgZGVzYykgPT4ge1xuICBpZiAoZnJvbSAmJiB0eXBlb2YgZnJvbSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgZnJvbSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgZm9yIChsZXQga2V5IG9mIF9fZ2V0T3duUHJvcE5hbWVzKGZyb20pKVxuICAgICAgaWYgKCFfX2hhc093blByb3AuY2FsbCh0bywga2V5KSAmJiBrZXkgIT09IGV4Y2VwdClcbiAgICAgICAgX19kZWZQcm9wKHRvLCBrZXksIHsgZ2V0OiAoKSA9PiBmcm9tW2tleV0sIGVudW1lcmFibGU6ICEoZGVzYyA9IF9fZ2V0T3duUHJvcERlc2MoZnJvbSwga2V5KSkgfHwgZGVzYy5lbnVtZXJhYmxlIH0pO1xuICB9XG4gIHJldHVybiB0bztcbn07XG52YXIgX190b0NvbW1vbkpTID0gKG1vZCkgPT4gX19jb3B5UHJvcHMoX19kZWZQcm9wKHt9LCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KSwgbW9kKTtcblxuLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG52YXIgZGlzdF9zcmNfZXhwb3J0cyA9IHt9O1xuX19leHBvcnQoZGlzdF9zcmNfZXhwb3J0cywge1xuICBlbmRwb2ludDogKCkgPT4gZW5kcG9pbnRcbn0pO1xubW9kdWxlLmV4cG9ydHMgPSBfX3RvQ29tbW9uSlMoZGlzdF9zcmNfZXhwb3J0cyk7XG5cbi8vIHBrZy9kaXN0LXNyYy9kZWZhdWx0cy5qc1xudmFyIGltcG9ydF91bml2ZXJzYWxfdXNlcl9hZ2VudCA9IHJlcXVpcmUoXCJ1bml2ZXJzYWwtdXNlci1hZ2VudFwiKTtcblxuLy8gcGtnL2Rpc3Qtc3JjL3ZlcnNpb24uanNcbnZhciBWRVJTSU9OID0gXCI5LjAuNVwiO1xuXG4vLyBwa2cvZGlzdC1zcmMvZGVmYXVsdHMuanNcbnZhciB1c2VyQWdlbnQgPSBgb2N0b2tpdC1lbmRwb2ludC5qcy8ke1ZFUlNJT059ICR7KDAsIGltcG9ydF91bml2ZXJzYWxfdXNlcl9hZ2VudC5nZXRVc2VyQWdlbnQpKCl9YDtcbnZhciBERUZBVUxUUyA9IHtcbiAgbWV0aG9kOiBcIkdFVFwiLFxuICBiYXNlVXJsOiBcImh0dHBzOi8vYXBpLmdpdGh1Yi5jb21cIixcbiAgaGVhZGVyczoge1xuICAgIGFjY2VwdDogXCJhcHBsaWNhdGlvbi92bmQuZ2l0aHViLnYzK2pzb25cIixcbiAgICBcInVzZXItYWdlbnRcIjogdXNlckFnZW50XG4gIH0sXG4gIG1lZGlhVHlwZToge1xuICAgIGZvcm1hdDogXCJcIlxuICB9XG59O1xuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC9sb3dlcmNhc2Uta2V5cy5qc1xuZnVuY3Rpb24gbG93ZXJjYXNlS2V5cyhvYmplY3QpIHtcbiAgaWYgKCFvYmplY3QpIHtcbiAgICByZXR1cm4ge307XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCkucmVkdWNlKChuZXdPYmosIGtleSkgPT4ge1xuICAgIG5ld09ialtrZXkudG9Mb3dlckNhc2UoKV0gPSBvYmplY3Rba2V5XTtcbiAgICByZXR1cm4gbmV3T2JqO1xuICB9LCB7fSk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy91dGlsL2lzLXBsYWluLW9iamVjdC5qc1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IHZhbHVlID09PSBudWxsKVxuICAgIHJldHVybiBmYWxzZTtcbiAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgIT09IFwiW29iamVjdCBPYmplY3RdXCIpXG4gICAgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSk7XG4gIGlmIChwcm90byA9PT0gbnVsbClcbiAgICByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgQ3RvciA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwcm90bywgXCJjb25zdHJ1Y3RvclwiKSAmJiBwcm90by5jb25zdHJ1Y3RvcjtcbiAgcmV0dXJuIHR5cGVvZiBDdG9yID09PSBcImZ1bmN0aW9uXCIgJiYgQ3RvciBpbnN0YW5jZW9mIEN0b3IgJiYgRnVuY3Rpb24ucHJvdG90eXBlLmNhbGwoQ3RvcikgPT09IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsKHZhbHVlKTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3V0aWwvbWVyZ2UtZGVlcC5qc1xuZnVuY3Rpb24gbWVyZ2VEZWVwKGRlZmF1bHRzLCBvcHRpb25zKSB7XG4gIGNvbnN0IHJlc3VsdCA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRzKTtcbiAgT2JqZWN0LmtleXMob3B0aW9ucykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgaWYgKGlzUGxhaW5PYmplY3Qob3B0aW9uc1trZXldKSkge1xuICAgICAgaWYgKCEoa2V5IGluIGRlZmF1bHRzKSlcbiAgICAgICAgT2JqZWN0LmFzc2lnbihyZXN1bHQsIHsgW2tleV06IG9wdGlvbnNba2V5XSB9KTtcbiAgICAgIGVsc2VcbiAgICAgICAgcmVzdWx0W2tleV0gPSBtZXJnZURlZXAoZGVmYXVsdHNba2V5XSwgb3B0aW9uc1trZXldKTtcbiAgICB9IGVsc2Uge1xuICAgICAgT2JqZWN0LmFzc2lnbihyZXN1bHQsIHsgW2tleV06IG9wdGlvbnNba2V5XSB9KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC9yZW1vdmUtdW5kZWZpbmVkLXByb3BlcnRpZXMuanNcbmZ1bmN0aW9uIHJlbW92ZVVuZGVmaW5lZFByb3BlcnRpZXMob2JqKSB7XG4gIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xuICAgIGlmIChvYmpba2V5XSA9PT0gdm9pZCAwKSB7XG4gICAgICBkZWxldGUgb2JqW2tleV07XG4gICAgfVxuICB9XG4gIHJldHVybiBvYmo7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9tZXJnZS5qc1xuZnVuY3Rpb24gbWVyZ2UoZGVmYXVsdHMsIHJvdXRlLCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2Ygcm91dGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICBsZXQgW21ldGhvZCwgdXJsXSA9IHJvdXRlLnNwbGl0KFwiIFwiKTtcbiAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih1cmwgPyB7IG1ldGhvZCwgdXJsIH0gOiB7IHVybDogbWV0aG9kIH0sIG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCByb3V0ZSk7XG4gIH1cbiAgb3B0aW9ucy5oZWFkZXJzID0gbG93ZXJjYXNlS2V5cyhvcHRpb25zLmhlYWRlcnMpO1xuICByZW1vdmVVbmRlZmluZWRQcm9wZXJ0aWVzKG9wdGlvbnMpO1xuICByZW1vdmVVbmRlZmluZWRQcm9wZXJ0aWVzKG9wdGlvbnMuaGVhZGVycyk7XG4gIGNvbnN0IG1lcmdlZE9wdGlvbnMgPSBtZXJnZURlZXAoZGVmYXVsdHMgfHwge30sIG9wdGlvbnMpO1xuICBpZiAob3B0aW9ucy51cmwgPT09IFwiL2dyYXBocWxcIikge1xuICAgIGlmIChkZWZhdWx0cyAmJiBkZWZhdWx0cy5tZWRpYVR5cGUucHJldmlld3M/Lmxlbmd0aCkge1xuICAgICAgbWVyZ2VkT3B0aW9ucy5tZWRpYVR5cGUucHJldmlld3MgPSBkZWZhdWx0cy5tZWRpYVR5cGUucHJldmlld3MuZmlsdGVyKFxuICAgICAgICAocHJldmlldykgPT4gIW1lcmdlZE9wdGlvbnMubWVkaWFUeXBlLnByZXZpZXdzLmluY2x1ZGVzKHByZXZpZXcpXG4gICAgICApLmNvbmNhdChtZXJnZWRPcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cyk7XG4gICAgfVxuICAgIG1lcmdlZE9wdGlvbnMubWVkaWFUeXBlLnByZXZpZXdzID0gKG1lcmdlZE9wdGlvbnMubWVkaWFUeXBlLnByZXZpZXdzIHx8IFtdKS5tYXAoKHByZXZpZXcpID0+IHByZXZpZXcucmVwbGFjZSgvLXByZXZpZXcvLCBcIlwiKSk7XG4gIH1cbiAgcmV0dXJuIG1lcmdlZE9wdGlvbnM7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy91dGlsL2FkZC1xdWVyeS1wYXJhbWV0ZXJzLmpzXG5mdW5jdGlvbiBhZGRRdWVyeVBhcmFtZXRlcnModXJsLCBwYXJhbWV0ZXJzKSB7XG4gIGNvbnN0IHNlcGFyYXRvciA9IC9cXD8vLnRlc3QodXJsKSA/IFwiJlwiIDogXCI/XCI7XG4gIGNvbnN0IG5hbWVzID0gT2JqZWN0LmtleXMocGFyYW1ldGVycyk7XG4gIGlmIChuYW1lcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG4gIHJldHVybiB1cmwgKyBzZXBhcmF0b3IgKyBuYW1lcy5tYXAoKG5hbWUpID0+IHtcbiAgICBpZiAobmFtZSA9PT0gXCJxXCIpIHtcbiAgICAgIHJldHVybiBcInE9XCIgKyBwYXJhbWV0ZXJzLnEuc3BsaXQoXCIrXCIpLm1hcChlbmNvZGVVUklDb21wb25lbnQpLmpvaW4oXCIrXCIpO1xuICAgIH1cbiAgICByZXR1cm4gYCR7bmFtZX09JHtlbmNvZGVVUklDb21wb25lbnQocGFyYW1ldGVyc1tuYW1lXSl9YDtcbiAgfSkuam9pbihcIiZcIik7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy91dGlsL2V4dHJhY3QtdXJsLXZhcmlhYmxlLW5hbWVzLmpzXG52YXIgdXJsVmFyaWFibGVSZWdleCA9IC9cXHtbXn1dK1xcfS9nO1xuZnVuY3Rpb24gcmVtb3ZlTm9uQ2hhcnModmFyaWFibGVOYW1lKSB7XG4gIHJldHVybiB2YXJpYWJsZU5hbWUucmVwbGFjZSgvXlxcVyt8XFxXKyQvZywgXCJcIikuc3BsaXQoLywvKTtcbn1cbmZ1bmN0aW9uIGV4dHJhY3RVcmxWYXJpYWJsZU5hbWVzKHVybCkge1xuICBjb25zdCBtYXRjaGVzID0gdXJsLm1hdGNoKHVybFZhcmlhYmxlUmVnZXgpO1xuICBpZiAoIW1hdGNoZXMpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgcmV0dXJuIG1hdGNoZXMubWFwKHJlbW92ZU5vbkNoYXJzKS5yZWR1Y2UoKGEsIGIpID0+IGEuY29uY2F0KGIpLCBbXSk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy91dGlsL29taXQuanNcbmZ1bmN0aW9uIG9taXQob2JqZWN0LCBrZXlzVG9PbWl0KSB7XG4gIGNvbnN0IHJlc3VsdCA9IHsgX19wcm90b19fOiBudWxsIH07XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG9iamVjdCkpIHtcbiAgICBpZiAoa2V5c1RvT21pdC5pbmRleE9mKGtleSkgPT09IC0xKSB7XG4gICAgICByZXN1bHRba2V5XSA9IG9iamVjdFtrZXldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC91cmwtdGVtcGxhdGUuanNcbmZ1bmN0aW9uIGVuY29kZVJlc2VydmVkKHN0cikge1xuICByZXR1cm4gc3RyLnNwbGl0KC8oJVswLTlBLUZhLWZdezJ9KS9nKS5tYXAoZnVuY3Rpb24ocGFydCkge1xuICAgIGlmICghLyVbMC05QS1GYS1mXS8udGVzdChwYXJ0KSkge1xuICAgICAgcGFydCA9IGVuY29kZVVSSShwYXJ0KS5yZXBsYWNlKC8lNUIvZywgXCJbXCIpLnJlcGxhY2UoLyU1RC9nLCBcIl1cIik7XG4gICAgfVxuICAgIHJldHVybiBwYXJ0O1xuICB9KS5qb2luKFwiXCIpO1xufVxuZnVuY3Rpb24gZW5jb2RlVW5yZXNlcnZlZChzdHIpIHtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHIpLnJlcGxhY2UoL1shJygpKl0vZywgZnVuY3Rpb24oYykge1xuICAgIHJldHVybiBcIiVcIiArIGMuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWUsIGtleSkge1xuICB2YWx1ZSA9IG9wZXJhdG9yID09PSBcIitcIiB8fCBvcGVyYXRvciA9PT0gXCIjXCIgPyBlbmNvZGVSZXNlcnZlZCh2YWx1ZSkgOiBlbmNvZGVVbnJlc2VydmVkKHZhbHVlKTtcbiAgaWYgKGtleSkge1xuICAgIHJldHVybiBlbmNvZGVVbnJlc2VydmVkKGtleSkgKyBcIj1cIiArIHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuZnVuY3Rpb24gaXNEZWZpbmVkKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gdm9pZCAwICYmIHZhbHVlICE9PSBudWxsO1xufVxuZnVuY3Rpb24gaXNLZXlPcGVyYXRvcihvcGVyYXRvcikge1xuICByZXR1cm4gb3BlcmF0b3IgPT09IFwiO1wiIHx8IG9wZXJhdG9yID09PSBcIiZcIiB8fCBvcGVyYXRvciA9PT0gXCI/XCI7XG59XG5mdW5jdGlvbiBnZXRWYWx1ZXMoY29udGV4dCwgb3BlcmF0b3IsIGtleSwgbW9kaWZpZXIpIHtcbiAgdmFyIHZhbHVlID0gY29udGV4dFtrZXldLCByZXN1bHQgPSBbXTtcbiAgaWYgKGlzRGVmaW5lZCh2YWx1ZSkgJiYgdmFsdWUgIT09IFwiXCIpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICBpZiAobW9kaWZpZXIgJiYgbW9kaWZpZXIgIT09IFwiKlwiKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUuc3Vic3RyaW5nKDAsIHBhcnNlSW50KG1vZGlmaWVyLCAxMCkpO1xuICAgICAgfVxuICAgICAgcmVzdWx0LnB1c2goXG4gICAgICAgIGVuY29kZVZhbHVlKG9wZXJhdG9yLCB2YWx1ZSwgaXNLZXlPcGVyYXRvcihvcGVyYXRvcikgPyBrZXkgOiBcIlwiKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG1vZGlmaWVyID09PSBcIipcIikge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICB2YWx1ZS5maWx0ZXIoaXNEZWZpbmVkKS5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlMikge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goXG4gICAgICAgICAgICAgIGVuY29kZVZhbHVlKG9wZXJhdG9yLCB2YWx1ZTIsIGlzS2V5T3BlcmF0b3Iob3BlcmF0b3IpID8ga2V5IDogXCJcIilcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgT2JqZWN0LmtleXModmFsdWUpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgICAgICAgICAgaWYgKGlzRGVmaW5lZCh2YWx1ZVtrXSkpIHtcbiAgICAgICAgICAgICAgcmVzdWx0LnB1c2goZW5jb2RlVmFsdWUob3BlcmF0b3IsIHZhbHVlW2tdLCBrKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHRtcCA9IFtdO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICB2YWx1ZS5maWx0ZXIoaXNEZWZpbmVkKS5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlMikge1xuICAgICAgICAgICAgdG1wLnB1c2goZW5jb2RlVmFsdWUob3BlcmF0b3IsIHZhbHVlMikpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIE9iamVjdC5rZXlzKHZhbHVlKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHtcbiAgICAgICAgICAgIGlmIChpc0RlZmluZWQodmFsdWVba10pKSB7XG4gICAgICAgICAgICAgIHRtcC5wdXNoKGVuY29kZVVucmVzZXJ2ZWQoaykpO1xuICAgICAgICAgICAgICB0bXAucHVzaChlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWVba10udG9TdHJpbmcoKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0tleU9wZXJhdG9yKG9wZXJhdG9yKSkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKGVuY29kZVVucmVzZXJ2ZWQoa2V5KSArIFwiPVwiICsgdG1wLmpvaW4oXCIsXCIpKTtcbiAgICAgICAgfSBlbHNlIGlmICh0bXAubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2godG1wLmpvaW4oXCIsXCIpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAob3BlcmF0b3IgPT09IFwiO1wiKSB7XG4gICAgICBpZiAoaXNEZWZpbmVkKHZhbHVlKSkge1xuICAgICAgICByZXN1bHQucHVzaChlbmNvZGVVbnJlc2VydmVkKGtleSkpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFwiXCIgJiYgKG9wZXJhdG9yID09PSBcIiZcIiB8fCBvcGVyYXRvciA9PT0gXCI/XCIpKSB7XG4gICAgICByZXN1bHQucHVzaChlbmNvZGVVbnJlc2VydmVkKGtleSkgKyBcIj1cIik7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gXCJcIikge1xuICAgICAgcmVzdWx0LnB1c2goXCJcIik7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBwYXJzZVVybCh0ZW1wbGF0ZSkge1xuICByZXR1cm4ge1xuICAgIGV4cGFuZDogZXhwYW5kLmJpbmQobnVsbCwgdGVtcGxhdGUpXG4gIH07XG59XG5mdW5jdGlvbiBleHBhbmQodGVtcGxhdGUsIGNvbnRleHQpIHtcbiAgdmFyIG9wZXJhdG9ycyA9IFtcIitcIiwgXCIjXCIsIFwiLlwiLCBcIi9cIiwgXCI7XCIsIFwiP1wiLCBcIiZcIl07XG4gIHRlbXBsYXRlID0gdGVtcGxhdGUucmVwbGFjZShcbiAgICAvXFx7KFteXFx7XFx9XSspXFx9fChbXlxce1xcfV0rKS9nLFxuICAgIGZ1bmN0aW9uKF8sIGV4cHJlc3Npb24sIGxpdGVyYWwpIHtcbiAgICAgIGlmIChleHByZXNzaW9uKSB7XG4gICAgICAgIGxldCBvcGVyYXRvciA9IFwiXCI7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IFtdO1xuICAgICAgICBpZiAob3BlcmF0b3JzLmluZGV4T2YoZXhwcmVzc2lvbi5jaGFyQXQoMCkpICE9PSAtMSkge1xuICAgICAgICAgIG9wZXJhdG9yID0gZXhwcmVzc2lvbi5jaGFyQXQoMCk7XG4gICAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb24uc3Vic3RyKDEpO1xuICAgICAgICB9XG4gICAgICAgIGV4cHJlc3Npb24uc3BsaXQoLywvZykuZm9yRWFjaChmdW5jdGlvbih2YXJpYWJsZSkge1xuICAgICAgICAgIHZhciB0bXAgPSAvKFteOlxcKl0qKSg/OjooXFxkKyl8KFxcKikpPy8uZXhlYyh2YXJpYWJsZSk7XG4gICAgICAgICAgdmFsdWVzLnB1c2goZ2V0VmFsdWVzKGNvbnRleHQsIG9wZXJhdG9yLCB0bXBbMV0sIHRtcFsyXSB8fCB0bXBbM10pKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChvcGVyYXRvciAmJiBvcGVyYXRvciAhPT0gXCIrXCIpIHtcbiAgICAgICAgICB2YXIgc2VwYXJhdG9yID0gXCIsXCI7XG4gICAgICAgICAgaWYgKG9wZXJhdG9yID09PSBcIj9cIikge1xuICAgICAgICAgICAgc2VwYXJhdG9yID0gXCImXCI7XG4gICAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRvciAhPT0gXCIjXCIpIHtcbiAgICAgICAgICAgIHNlcGFyYXRvciA9IG9wZXJhdG9yO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gKHZhbHVlcy5sZW5ndGggIT09IDAgPyBvcGVyYXRvciA6IFwiXCIpICsgdmFsdWVzLmpvaW4oc2VwYXJhdG9yKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWVzLmpvaW4oXCIsXCIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZW5jb2RlUmVzZXJ2ZWQobGl0ZXJhbCk7XG4gICAgICB9XG4gICAgfVxuICApO1xuICBpZiAodGVtcGxhdGUgPT09IFwiL1wiKSB7XG4gICAgcmV0dXJuIHRlbXBsYXRlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB0ZW1wbGF0ZS5yZXBsYWNlKC9cXC8kLywgXCJcIik7XG4gIH1cbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3BhcnNlLmpzXG5mdW5jdGlvbiBwYXJzZShvcHRpb25zKSB7XG4gIGxldCBtZXRob2QgPSBvcHRpb25zLm1ldGhvZC50b1VwcGVyQ2FzZSgpO1xuICBsZXQgdXJsID0gKG9wdGlvbnMudXJsIHx8IFwiL1wiKS5yZXBsYWNlKC86KFthLXpdXFx3KykvZywgXCJ7JDF9XCIpO1xuICBsZXQgaGVhZGVycyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuaGVhZGVycyk7XG4gIGxldCBib2R5O1xuICBsZXQgcGFyYW1ldGVycyA9IG9taXQob3B0aW9ucywgW1xuICAgIFwibWV0aG9kXCIsXG4gICAgXCJiYXNlVXJsXCIsXG4gICAgXCJ1cmxcIixcbiAgICBcImhlYWRlcnNcIixcbiAgICBcInJlcXVlc3RcIixcbiAgICBcIm1lZGlhVHlwZVwiXG4gIF0pO1xuICBjb25zdCB1cmxWYXJpYWJsZU5hbWVzID0gZXh0cmFjdFVybFZhcmlhYmxlTmFtZXModXJsKTtcbiAgdXJsID0gcGFyc2VVcmwodXJsKS5leHBhbmQocGFyYW1ldGVycyk7XG4gIGlmICghL15odHRwLy50ZXN0KHVybCkpIHtcbiAgICB1cmwgPSBvcHRpb25zLmJhc2VVcmwgKyB1cmw7XG4gIH1cbiAgY29uc3Qgb21pdHRlZFBhcmFtZXRlcnMgPSBPYmplY3Qua2V5cyhvcHRpb25zKS5maWx0ZXIoKG9wdGlvbikgPT4gdXJsVmFyaWFibGVOYW1lcy5pbmNsdWRlcyhvcHRpb24pKS5jb25jYXQoXCJiYXNlVXJsXCIpO1xuICBjb25zdCByZW1haW5pbmdQYXJhbWV0ZXJzID0gb21pdChwYXJhbWV0ZXJzLCBvbWl0dGVkUGFyYW1ldGVycyk7XG4gIGNvbnN0IGlzQmluYXJ5UmVxdWVzdCA9IC9hcHBsaWNhdGlvblxcL29jdGV0LXN0cmVhbS9pLnRlc3QoaGVhZGVycy5hY2NlcHQpO1xuICBpZiAoIWlzQmluYXJ5UmVxdWVzdCkge1xuICAgIGlmIChvcHRpb25zLm1lZGlhVHlwZS5mb3JtYXQpIHtcbiAgICAgIGhlYWRlcnMuYWNjZXB0ID0gaGVhZGVycy5hY2NlcHQuc3BsaXQoLywvKS5tYXAoXG4gICAgICAgIChmb3JtYXQpID0+IGZvcm1hdC5yZXBsYWNlKFxuICAgICAgICAgIC9hcHBsaWNhdGlvblxcL3ZuZChcXC5cXHcrKShcXC52Myk/KFxcLlxcdyspPyhcXCtqc29uKT8kLyxcbiAgICAgICAgICBgYXBwbGljYXRpb24vdm5kJDEkMi4ke29wdGlvbnMubWVkaWFUeXBlLmZvcm1hdH1gXG4gICAgICAgIClcbiAgICAgICkuam9pbihcIixcIik7XG4gICAgfVxuICAgIGlmICh1cmwuZW5kc1dpdGgoXCIvZ3JhcGhxbFwiKSkge1xuICAgICAgaWYgKG9wdGlvbnMubWVkaWFUeXBlLnByZXZpZXdzPy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgcHJldmlld3NGcm9tQWNjZXB0SGVhZGVyID0gaGVhZGVycy5hY2NlcHQubWF0Y2goL1tcXHctXSsoPz0tcHJldmlldykvZykgfHwgW107XG4gICAgICAgIGhlYWRlcnMuYWNjZXB0ID0gcHJldmlld3NGcm9tQWNjZXB0SGVhZGVyLmNvbmNhdChvcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cykubWFwKChwcmV2aWV3KSA9PiB7XG4gICAgICAgICAgY29uc3QgZm9ybWF0ID0gb3B0aW9ucy5tZWRpYVR5cGUuZm9ybWF0ID8gYC4ke29wdGlvbnMubWVkaWFUeXBlLmZvcm1hdH1gIDogXCIranNvblwiO1xuICAgICAgICAgIHJldHVybiBgYXBwbGljYXRpb24vdm5kLmdpdGh1Yi4ke3ByZXZpZXd9LXByZXZpZXcke2Zvcm1hdH1gO1xuICAgICAgICB9KS5qb2luKFwiLFwiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKFtcIkdFVFwiLCBcIkhFQURcIl0uaW5jbHVkZXMobWV0aG9kKSkge1xuICAgIHVybCA9IGFkZFF1ZXJ5UGFyYW1ldGVycyh1cmwsIHJlbWFpbmluZ1BhcmFtZXRlcnMpO1xuICB9IGVsc2Uge1xuICAgIGlmIChcImRhdGFcIiBpbiByZW1haW5pbmdQYXJhbWV0ZXJzKSB7XG4gICAgICBib2R5ID0gcmVtYWluaW5nUGFyYW1ldGVycy5kYXRhO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoT2JqZWN0LmtleXMocmVtYWluaW5nUGFyYW1ldGVycykubGVuZ3RoKSB7XG4gICAgICAgIGJvZHkgPSByZW1haW5pbmdQYXJhbWV0ZXJzO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoIWhlYWRlcnNbXCJjb250ZW50LXR5cGVcIl0gJiYgdHlwZW9mIGJvZHkgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBoZWFkZXJzW1wiY29udGVudC10eXBlXCJdID0gXCJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04XCI7XG4gIH1cbiAgaWYgKFtcIlBBVENIXCIsIFwiUFVUXCJdLmluY2x1ZGVzKG1ldGhvZCkgJiYgdHlwZW9mIGJvZHkgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBib2R5ID0gXCJcIjtcbiAgfVxuICByZXR1cm4gT2JqZWN0LmFzc2lnbihcbiAgICB7IG1ldGhvZCwgdXJsLCBoZWFkZXJzIH0sXG4gICAgdHlwZW9mIGJvZHkgIT09IFwidW5kZWZpbmVkXCIgPyB7IGJvZHkgfSA6IG51bGwsXG4gICAgb3B0aW9ucy5yZXF1ZXN0ID8geyByZXF1ZXN0OiBvcHRpb25zLnJlcXVlc3QgfSA6IG51bGxcbiAgKTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2VuZHBvaW50LXdpdGgtZGVmYXVsdHMuanNcbmZ1bmN0aW9uIGVuZHBvaW50V2l0aERlZmF1bHRzKGRlZmF1bHRzLCByb3V0ZSwgb3B0aW9ucykge1xuICByZXR1cm4gcGFyc2UobWVyZ2UoZGVmYXVsdHMsIHJvdXRlLCBvcHRpb25zKSk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy93aXRoLWRlZmF1bHRzLmpzXG5mdW5jdGlvbiB3aXRoRGVmYXVsdHMob2xkRGVmYXVsdHMsIG5ld0RlZmF1bHRzKSB7XG4gIGNvbnN0IERFRkFVTFRTMiA9IG1lcmdlKG9sZERlZmF1bHRzLCBuZXdEZWZhdWx0cyk7XG4gIGNvbnN0IGVuZHBvaW50MiA9IGVuZHBvaW50V2l0aERlZmF1bHRzLmJpbmQobnVsbCwgREVGQVVMVFMyKTtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oZW5kcG9pbnQyLCB7XG4gICAgREVGQVVMVFM6IERFRkFVTFRTMixcbiAgICBkZWZhdWx0czogd2l0aERlZmF1bHRzLmJpbmQobnVsbCwgREVGQVVMVFMyKSxcbiAgICBtZXJnZTogbWVyZ2UuYmluZChudWxsLCBERUZBVUxUUzIpLFxuICAgIHBhcnNlXG4gIH0pO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbnZhciBlbmRwb2ludCA9IHdpdGhEZWZhdWx0cyhudWxsLCBERUZBVUxUUyk7XG4vLyBBbm5vdGF0ZSB0aGUgQ29tbW9uSlMgZXhwb3J0IG5hbWVzIGZvciBFU00gaW1wb3J0IGluIG5vZGU6XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgZW5kcG9pbnRcbn0pO1xuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmNsYXNzIERlcHJlY2F0aW9uIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7IC8vIE1haW50YWlucyBwcm9wZXIgc3RhY2sgdHJhY2UgKG9ubHkgYXZhaWxhYmxlIG9uIFY4KVxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblxuICAgIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gICAgfVxuXG4gICAgdGhpcy5uYW1lID0gJ0RlcHJlY2F0aW9uJztcbiAgfVxuXG59XG5cbmV4cG9ydHMuRGVwcmVjYXRpb24gPSBEZXByZWNhdGlvbjtcbiIsCiAgICAiLy8gUmV0dXJucyBhIHdyYXBwZXIgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgd3JhcHBlZCBjYWxsYmFja1xuLy8gVGhlIHdyYXBwZXIgZnVuY3Rpb24gc2hvdWxkIGRvIHNvbWUgc3R1ZmYsIGFuZCByZXR1cm4gYVxuLy8gcHJlc3VtYWJseSBkaWZmZXJlbnQgY2FsbGJhY2sgZnVuY3Rpb24uXG4vLyBUaGlzIG1ha2VzIHN1cmUgdGhhdCBvd24gcHJvcGVydGllcyBhcmUgcmV0YWluZWQsIHNvIHRoYXRcbi8vIGRlY29yYXRpb25zIGFuZCBzdWNoIGFyZSBub3QgbG9zdCBhbG9uZyB0aGUgd2F5LlxubW9kdWxlLmV4cG9ydHMgPSB3cmFwcHlcbmZ1bmN0aW9uIHdyYXBweSAoZm4sIGNiKSB7XG4gIGlmIChmbiAmJiBjYikgcmV0dXJuIHdyYXBweShmbikoY2IpXG5cbiAgaWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJylcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCduZWVkIHdyYXBwZXIgZnVuY3Rpb24nKVxuXG4gIE9iamVjdC5rZXlzKGZuKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgd3JhcHBlcltrXSA9IGZuW2tdXG4gIH0pXG5cbiAgcmV0dXJuIHdyYXBwZXJcblxuICBmdW5jdGlvbiB3cmFwcGVyKCkge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhcmdzW2ldID0gYXJndW1lbnRzW2ldXG4gICAgfVxuICAgIHZhciByZXQgPSBmbi5hcHBseSh0aGlzLCBhcmdzKVxuICAgIHZhciBjYiA9IGFyZ3NbYXJncy5sZW5ndGgtMV1cbiAgICBpZiAodHlwZW9mIHJldCA9PT0gJ2Z1bmN0aW9uJyAmJiByZXQgIT09IGNiKSB7XG4gICAgICBPYmplY3Qua2V5cyhjYikuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgICAgICByZXRba10gPSBjYltrXVxuICAgICAgfSlcbiAgICB9XG4gICAgcmV0dXJuIHJldFxuICB9XG59XG4iLAogICAgInZhciB3cmFwcHkgPSByZXF1aXJlKCd3cmFwcHknKVxubW9kdWxlLmV4cG9ydHMgPSB3cmFwcHkob25jZSlcbm1vZHVsZS5leHBvcnRzLnN0cmljdCA9IHdyYXBweShvbmNlU3RyaWN0KVxuXG5vbmNlLnByb3RvID0gb25jZShmdW5jdGlvbiAoKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGdW5jdGlvbi5wcm90b3R5cGUsICdvbmNlJywge1xuICAgIHZhbHVlOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gb25jZSh0aGlzKVxuICAgIH0sXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pXG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZ1bmN0aW9uLnByb3RvdHlwZSwgJ29uY2VTdHJpY3QnLCB7XG4gICAgdmFsdWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBvbmNlU3RyaWN0KHRoaXMpXG4gICAgfSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSlcbn0pXG5cbmZ1bmN0aW9uIG9uY2UgKGZuKSB7XG4gIHZhciBmID0gZnVuY3Rpb24gKCkge1xuICAgIGlmIChmLmNhbGxlZCkgcmV0dXJuIGYudmFsdWVcbiAgICBmLmNhbGxlZCA9IHRydWVcbiAgICByZXR1cm4gZi52YWx1ZSA9IGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgfVxuICBmLmNhbGxlZCA9IGZhbHNlXG4gIHJldHVybiBmXG59XG5cbmZ1bmN0aW9uIG9uY2VTdHJpY3QgKGZuKSB7XG4gIHZhciBmID0gZnVuY3Rpb24gKCkge1xuICAgIGlmIChmLmNhbGxlZClcbiAgICAgIHRocm93IG5ldyBFcnJvcihmLm9uY2VFcnJvcilcbiAgICBmLmNhbGxlZCA9IHRydWVcbiAgICByZXR1cm4gZi52YWx1ZSA9IGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgfVxuICB2YXIgbmFtZSA9IGZuLm5hbWUgfHwgJ0Z1bmN0aW9uIHdyYXBwZWQgd2l0aCBgb25jZWAnXG4gIGYub25jZUVycm9yID0gbmFtZSArIFwiIHNob3VsZG4ndCBiZSBjYWxsZWQgbW9yZSB0aGFuIG9uY2VcIlxuICBmLmNhbGxlZCA9IGZhbHNlXG4gIHJldHVybiBmXG59XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlID0gT2JqZWN0LmNyZWF0ZTtcbnZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wRGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgX19nZXRPd25Qcm9wTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcztcbnZhciBfX2dldFByb3RvT2YgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG52YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX2V4cG9ydCA9ICh0YXJnZXQsIGFsbCkgPT4ge1xuICBmb3IgKHZhciBuYW1lIGluIGFsbClcbiAgICBfX2RlZlByb3AodGFyZ2V0LCBuYW1lLCB7IGdldDogYWxsW25hbWVdLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xufTtcbnZhciBfX2NvcHlQcm9wcyA9ICh0bywgZnJvbSwgZXhjZXB0LCBkZXNjKSA9PiB7XG4gIGlmIChmcm9tICYmIHR5cGVvZiBmcm9tID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBmcm9tID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBmb3IgKGxldCBrZXkgb2YgX19nZXRPd25Qcm9wTmFtZXMoZnJvbSkpXG4gICAgICBpZiAoIV9faGFzT3duUHJvcC5jYWxsKHRvLCBrZXkpICYmIGtleSAhPT0gZXhjZXB0KVxuICAgICAgICBfX2RlZlByb3AodG8sIGtleSwgeyBnZXQ6ICgpID0+IGZyb21ba2V5XSwgZW51bWVyYWJsZTogIShkZXNjID0gX19nZXRPd25Qcm9wRGVzYyhmcm9tLCBrZXkpKSB8fCBkZXNjLmVudW1lcmFibGUgfSk7XG4gIH1cbiAgcmV0dXJuIHRvO1xufTtcbnZhciBfX3RvRVNNID0gKG1vZCwgaXNOb2RlTW9kZSwgdGFyZ2V0KSA9PiAodGFyZ2V0ID0gbW9kICE9IG51bGwgPyBfX2NyZWF0ZShfX2dldFByb3RvT2YobW9kKSkgOiB7fSwgX19jb3B5UHJvcHMoXG4gIC8vIElmIHRoZSBpbXBvcnRlciBpcyBpbiBub2RlIGNvbXBhdGliaWxpdHkgbW9kZSBvciB0aGlzIGlzIG5vdCBhbiBFU01cbiAgLy8gZmlsZSB0aGF0IGhhcyBiZWVuIGNvbnZlcnRlZCB0byBhIENvbW1vbkpTIGZpbGUgdXNpbmcgYSBCYWJlbC1cbiAgLy8gY29tcGF0aWJsZSB0cmFuc2Zvcm0gKGkuZS4gXCJfX2VzTW9kdWxlXCIgaGFzIG5vdCBiZWVuIHNldCksIHRoZW4gc2V0XG4gIC8vIFwiZGVmYXVsdFwiIHRvIHRoZSBDb21tb25KUyBcIm1vZHVsZS5leHBvcnRzXCIgZm9yIG5vZGUgY29tcGF0aWJpbGl0eS5cbiAgaXNOb2RlTW9kZSB8fCAhbW9kIHx8ICFtb2QuX19lc01vZHVsZSA/IF9fZGVmUHJvcCh0YXJnZXQsIFwiZGVmYXVsdFwiLCB7IHZhbHVlOiBtb2QsIGVudW1lcmFibGU6IHRydWUgfSkgOiB0YXJnZXQsXG4gIG1vZFxuKSk7XG52YXIgX190b0NvbW1vbkpTID0gKG1vZCkgPT4gX19jb3B5UHJvcHMoX19kZWZQcm9wKHt9LCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KSwgbW9kKTtcblxuLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG52YXIgZGlzdF9zcmNfZXhwb3J0cyA9IHt9O1xuX19leHBvcnQoZGlzdF9zcmNfZXhwb3J0cywge1xuICBSZXF1ZXN0RXJyb3I6ICgpID0+IFJlcXVlc3RFcnJvclxufSk7XG5tb2R1bGUuZXhwb3J0cyA9IF9fdG9Db21tb25KUyhkaXN0X3NyY19leHBvcnRzKTtcbnZhciBpbXBvcnRfZGVwcmVjYXRpb24gPSByZXF1aXJlKFwiZGVwcmVjYXRpb25cIik7XG52YXIgaW1wb3J0X29uY2UgPSBfX3RvRVNNKHJlcXVpcmUoXCJvbmNlXCIpKTtcbnZhciBsb2dPbmNlQ29kZSA9ICgwLCBpbXBvcnRfb25jZS5kZWZhdWx0KSgoZGVwcmVjYXRpb24pID0+IGNvbnNvbGUud2FybihkZXByZWNhdGlvbikpO1xudmFyIGxvZ09uY2VIZWFkZXJzID0gKDAsIGltcG9ydF9vbmNlLmRlZmF1bHQpKChkZXByZWNhdGlvbikgPT4gY29uc29sZS53YXJuKGRlcHJlY2F0aW9uKSk7XG52YXIgUmVxdWVzdEVycm9yID0gY2xhc3MgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2UsIHN0YXR1c0NvZGUsIG9wdGlvbnMpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuICAgIH1cbiAgICB0aGlzLm5hbWUgPSBcIkh0dHBFcnJvclwiO1xuICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzQ29kZTtcbiAgICBsZXQgaGVhZGVycztcbiAgICBpZiAoXCJoZWFkZXJzXCIgaW4gb3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucy5oZWFkZXJzICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBoZWFkZXJzID0gb3B0aW9ucy5oZWFkZXJzO1xuICAgIH1cbiAgICBpZiAoXCJyZXNwb25zZVwiIGluIG9wdGlvbnMpIHtcbiAgICAgIHRoaXMucmVzcG9uc2UgPSBvcHRpb25zLnJlc3BvbnNlO1xuICAgICAgaGVhZGVycyA9IG9wdGlvbnMucmVzcG9uc2UuaGVhZGVycztcbiAgICB9XG4gICAgY29uc3QgcmVxdWVzdENvcHkgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLnJlcXVlc3QpO1xuICAgIGlmIChvcHRpb25zLnJlcXVlc3QuaGVhZGVycy5hdXRob3JpemF0aW9uKSB7XG4gICAgICByZXF1ZXN0Q29weS5oZWFkZXJzID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5yZXF1ZXN0LmhlYWRlcnMsIHtcbiAgICAgICAgYXV0aG9yaXphdGlvbjogb3B0aW9ucy5yZXF1ZXN0LmhlYWRlcnMuYXV0aG9yaXphdGlvbi5yZXBsYWNlKFxuICAgICAgICAgIC8gLiokLyxcbiAgICAgICAgICBcIiBbUkVEQUNURURdXCJcbiAgICAgICAgKVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJlcXVlc3RDb3B5LnVybCA9IHJlcXVlc3RDb3B5LnVybC5yZXBsYWNlKC9cXGJjbGllbnRfc2VjcmV0PVxcdysvZywgXCJjbGllbnRfc2VjcmV0PVtSRURBQ1RFRF1cIikucmVwbGFjZSgvXFxiYWNjZXNzX3Rva2VuPVxcdysvZywgXCJhY2Nlc3NfdG9rZW49W1JFREFDVEVEXVwiKTtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0Q29weTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJjb2RlXCIsIHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgbG9nT25jZUNvZGUoXG4gICAgICAgICAgbmV3IGltcG9ydF9kZXByZWNhdGlvbi5EZXByZWNhdGlvbihcbiAgICAgICAgICAgIFwiW0BvY3Rva2l0L3JlcXVlc3QtZXJyb3JdIGBlcnJvci5jb2RlYCBpcyBkZXByZWNhdGVkLCB1c2UgYGVycm9yLnN0YXR1c2AuXCJcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBzdGF0dXNDb2RlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImhlYWRlcnNcIiwge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBsb2dPbmNlSGVhZGVycyhcbiAgICAgICAgICBuZXcgaW1wb3J0X2RlcHJlY2F0aW9uLkRlcHJlY2F0aW9uKFxuICAgICAgICAgICAgXCJbQG9jdG9raXQvcmVxdWVzdC1lcnJvcl0gYGVycm9yLmhlYWRlcnNgIGlzIGRlcHJlY2F0ZWQsIHVzZSBgZXJyb3IucmVzcG9uc2UuaGVhZGVyc2AuXCJcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBoZWFkZXJzIHx8IHt9O1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59O1xuLy8gQW5ub3RhdGUgdGhlIENvbW1vbkpTIGV4cG9ydCBuYW1lcyBmb3IgRVNNIGltcG9ydCBpbiBub2RlOlxuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gIFJlcXVlc3RFcnJvclxufSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BEZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBfX2dldE93blByb3BOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO1xudmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19leHBvcnQgPSAodGFyZ2V0LCBhbGwpID0+IHtcbiAgZm9yICh2YXIgbmFtZSBpbiBhbGwpXG4gICAgX19kZWZQcm9wKHRhcmdldCwgbmFtZSwgeyBnZXQ6IGFsbFtuYW1lXSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcbn07XG52YXIgX19jb3B5UHJvcHMgPSAodG8sIGZyb20sIGV4Y2VwdCwgZGVzYykgPT4ge1xuICBpZiAoZnJvbSAmJiB0eXBlb2YgZnJvbSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgZnJvbSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgZm9yIChsZXQga2V5IG9mIF9fZ2V0T3duUHJvcE5hbWVzKGZyb20pKVxuICAgICAgaWYgKCFfX2hhc093blByb3AuY2FsbCh0bywga2V5KSAmJiBrZXkgIT09IGV4Y2VwdClcbiAgICAgICAgX19kZWZQcm9wKHRvLCBrZXksIHsgZ2V0OiAoKSA9PiBmcm9tW2tleV0sIGVudW1lcmFibGU6ICEoZGVzYyA9IF9fZ2V0T3duUHJvcERlc2MoZnJvbSwga2V5KSkgfHwgZGVzYy5lbnVtZXJhYmxlIH0pO1xuICB9XG4gIHJldHVybiB0bztcbn07XG52YXIgX190b0NvbW1vbkpTID0gKG1vZCkgPT4gX19jb3B5UHJvcHMoX19kZWZQcm9wKHt9LCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KSwgbW9kKTtcblxuLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG52YXIgZGlzdF9zcmNfZXhwb3J0cyA9IHt9O1xuX19leHBvcnQoZGlzdF9zcmNfZXhwb3J0cywge1xuICByZXF1ZXN0OiAoKSA9PiByZXF1ZXN0XG59KTtcbm1vZHVsZS5leHBvcnRzID0gX190b0NvbW1vbkpTKGRpc3Rfc3JjX2V4cG9ydHMpO1xudmFyIGltcG9ydF9lbmRwb2ludCA9IHJlcXVpcmUoXCJAb2N0b2tpdC9lbmRwb2ludFwiKTtcbnZhciBpbXBvcnRfdW5pdmVyc2FsX3VzZXJfYWdlbnQgPSByZXF1aXJlKFwidW5pdmVyc2FsLXVzZXItYWdlbnRcIik7XG5cbi8vIHBrZy9kaXN0LXNyYy92ZXJzaW9uLmpzXG52YXIgVkVSU0lPTiA9IFwiOC40LjBcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL2lzLXBsYWluLW9iamVjdC5qc1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IHZhbHVlID09PSBudWxsKVxuICAgIHJldHVybiBmYWxzZTtcbiAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgIT09IFwiW29iamVjdCBPYmplY3RdXCIpXG4gICAgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSk7XG4gIGlmIChwcm90byA9PT0gbnVsbClcbiAgICByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgQ3RvciA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwcm90bywgXCJjb25zdHJ1Y3RvclwiKSAmJiBwcm90by5jb25zdHJ1Y3RvcjtcbiAgcmV0dXJuIHR5cGVvZiBDdG9yID09PSBcImZ1bmN0aW9uXCIgJiYgQ3RvciBpbnN0YW5jZW9mIEN0b3IgJiYgRnVuY3Rpb24ucHJvdG90eXBlLmNhbGwoQ3RvcikgPT09IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsKHZhbHVlKTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2ZldGNoLXdyYXBwZXIuanNcbnZhciBpbXBvcnRfcmVxdWVzdF9lcnJvciA9IHJlcXVpcmUoXCJAb2N0b2tpdC9yZXF1ZXN0LWVycm9yXCIpO1xuXG4vLyBwa2cvZGlzdC1zcmMvZ2V0LWJ1ZmZlci1yZXNwb25zZS5qc1xuZnVuY3Rpb24gZ2V0QnVmZmVyUmVzcG9uc2UocmVzcG9uc2UpIHtcbiAgcmV0dXJuIHJlc3BvbnNlLmFycmF5QnVmZmVyKCk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9mZXRjaC13cmFwcGVyLmpzXG5mdW5jdGlvbiBmZXRjaFdyYXBwZXIocmVxdWVzdE9wdGlvbnMpIHtcbiAgdmFyIF9hLCBfYiwgX2MsIF9kO1xuICBjb25zdCBsb2cgPSByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0ICYmIHJlcXVlc3RPcHRpb25zLnJlcXVlc3QubG9nID8gcmVxdWVzdE9wdGlvbnMucmVxdWVzdC5sb2cgOiBjb25zb2xlO1xuICBjb25zdCBwYXJzZVN1Y2Nlc3NSZXNwb25zZUJvZHkgPSAoKF9hID0gcmVxdWVzdE9wdGlvbnMucmVxdWVzdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnBhcnNlU3VjY2Vzc1Jlc3BvbnNlQm9keSkgIT09IGZhbHNlO1xuICBpZiAoaXNQbGFpbk9iamVjdChyZXF1ZXN0T3B0aW9ucy5ib2R5KSB8fCBBcnJheS5pc0FycmF5KHJlcXVlc3RPcHRpb25zLmJvZHkpKSB7XG4gICAgcmVxdWVzdE9wdGlvbnMuYm9keSA9IEpTT04uc3RyaW5naWZ5KHJlcXVlc3RPcHRpb25zLmJvZHkpO1xuICB9XG4gIGxldCBoZWFkZXJzID0ge307XG4gIGxldCBzdGF0dXM7XG4gIGxldCB1cmw7XG4gIGxldCB7IGZldGNoIH0gPSBnbG9iYWxUaGlzO1xuICBpZiAoKF9iID0gcmVxdWVzdE9wdGlvbnMucmVxdWVzdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmZldGNoKSB7XG4gICAgZmV0Y2ggPSByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0LmZldGNoO1xuICB9XG4gIGlmICghZmV0Y2gpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcImZldGNoIGlzIG5vdCBzZXQuIFBsZWFzZSBwYXNzIGEgZmV0Y2ggaW1wbGVtZW50YXRpb24gYXMgbmV3IE9jdG9raXQoeyByZXF1ZXN0OiB7IGZldGNoIH19KS4gTGVhcm4gbW9yZSBhdCBodHRwczovL2dpdGh1Yi5jb20vb2N0b2tpdC9vY3Rva2l0LmpzLyNmZXRjaC1taXNzaW5nXCJcbiAgICApO1xuICB9XG4gIHJldHVybiBmZXRjaChyZXF1ZXN0T3B0aW9ucy51cmwsIHtcbiAgICBtZXRob2Q6IHJlcXVlc3RPcHRpb25zLm1ldGhvZCxcbiAgICBib2R5OiByZXF1ZXN0T3B0aW9ucy5ib2R5LFxuICAgIHJlZGlyZWN0OiAoX2MgPSByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0KSA9PSBudWxsID8gdm9pZCAwIDogX2MucmVkaXJlY3QsXG4gICAgaGVhZGVyczogcmVxdWVzdE9wdGlvbnMuaGVhZGVycyxcbiAgICBzaWduYWw6IChfZCA9IHJlcXVlc3RPcHRpb25zLnJlcXVlc3QpID09IG51bGwgPyB2b2lkIDAgOiBfZC5zaWduYWwsXG4gICAgLy8gZHVwbGV4IG11c3QgYmUgc2V0IGlmIHJlcXVlc3QuYm9keSBpcyBSZWFkYWJsZVN0cmVhbSBvciBBc3luYyBJdGVyYWJsZXMuXG4gICAgLy8gU2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tcmVxdWVzdGluaXQtZHVwbGV4LlxuICAgIC4uLnJlcXVlc3RPcHRpb25zLmJvZHkgJiYgeyBkdXBsZXg6IFwiaGFsZlwiIH1cbiAgfSkudGhlbihhc3luYyAocmVzcG9uc2UpID0+IHtcbiAgICB1cmwgPSByZXNwb25zZS51cmw7XG4gICAgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgIGZvciAoY29uc3Qga2V5QW5kVmFsdWUgb2YgcmVzcG9uc2UuaGVhZGVycykge1xuICAgICAgaGVhZGVyc1trZXlBbmRWYWx1ZVswXV0gPSBrZXlBbmRWYWx1ZVsxXTtcbiAgICB9XG4gICAgaWYgKFwiZGVwcmVjYXRpb25cIiBpbiBoZWFkZXJzKSB7XG4gICAgICBjb25zdCBtYXRjaGVzID0gaGVhZGVycy5saW5rICYmIGhlYWRlcnMubGluay5tYXRjaCgvPChbXj5dKyk+OyByZWw9XCJkZXByZWNhdGlvblwiLyk7XG4gICAgICBjb25zdCBkZXByZWNhdGlvbkxpbmsgPSBtYXRjaGVzICYmIG1hdGNoZXMucG9wKCk7XG4gICAgICBsb2cud2FybihcbiAgICAgICAgYFtAb2N0b2tpdC9yZXF1ZXN0XSBcIiR7cmVxdWVzdE9wdGlvbnMubWV0aG9kfSAke3JlcXVlc3RPcHRpb25zLnVybH1cIiBpcyBkZXByZWNhdGVkLiBJdCBpcyBzY2hlZHVsZWQgdG8gYmUgcmVtb3ZlZCBvbiAke2hlYWRlcnMuc3Vuc2V0fSR7ZGVwcmVjYXRpb25MaW5rID8gYC4gU2VlICR7ZGVwcmVjYXRpb25MaW5rfWAgOiBcIlwifWBcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChzdGF0dXMgPT09IDIwNCB8fCBzdGF0dXMgPT09IDIwNSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAocmVxdWVzdE9wdGlvbnMubWV0aG9kID09PSBcIkhFQURcIikge1xuICAgICAgaWYgKHN0YXR1cyA8IDQwMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgaW1wb3J0X3JlcXVlc3RfZXJyb3IuUmVxdWVzdEVycm9yKHJlc3BvbnNlLnN0YXR1c1RleHQsIHN0YXR1cywge1xuICAgICAgICByZXNwb25zZToge1xuICAgICAgICAgIHVybCxcbiAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICBkYXRhOiB2b2lkIDBcbiAgICAgICAgfSxcbiAgICAgICAgcmVxdWVzdDogcmVxdWVzdE9wdGlvbnNcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoc3RhdHVzID09PSAzMDQpIHtcbiAgICAgIHRocm93IG5ldyBpbXBvcnRfcmVxdWVzdF9lcnJvci5SZXF1ZXN0RXJyb3IoXCJOb3QgbW9kaWZpZWRcIiwgc3RhdHVzLCB7XG4gICAgICAgIHJlc3BvbnNlOiB7XG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIHN0YXR1cyxcbiAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgIGRhdGE6IGF3YWl0IGdldFJlc3BvbnNlRGF0YShyZXNwb25zZSlcbiAgICAgICAgfSxcbiAgICAgICAgcmVxdWVzdDogcmVxdWVzdE9wdGlvbnNcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoc3RhdHVzID49IDQwMCkge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdldFJlc3BvbnNlRGF0YShyZXNwb25zZSk7XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBpbXBvcnRfcmVxdWVzdF9lcnJvci5SZXF1ZXN0RXJyb3IodG9FcnJvck1lc3NhZ2UoZGF0YSksIHN0YXR1cywge1xuICAgICAgICByZXNwb25zZToge1xuICAgICAgICAgIHVybCxcbiAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICBkYXRhXG4gICAgICAgIH0sXG4gICAgICAgIHJlcXVlc3Q6IHJlcXVlc3RPcHRpb25zXG4gICAgICB9KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VTdWNjZXNzUmVzcG9uc2VCb2R5ID8gYXdhaXQgZ2V0UmVzcG9uc2VEYXRhKHJlc3BvbnNlKSA6IHJlc3BvbnNlLmJvZHk7XG4gIH0pLnRoZW4oKGRhdGEpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzLFxuICAgICAgdXJsLFxuICAgICAgaGVhZGVycyxcbiAgICAgIGRhdGFcbiAgICB9O1xuICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBpbXBvcnRfcmVxdWVzdF9lcnJvci5SZXF1ZXN0RXJyb3IpXG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICBlbHNlIGlmIChlcnJvci5uYW1lID09PSBcIkFib3J0RXJyb3JcIilcbiAgICAgIHRocm93IGVycm9yO1xuICAgIGxldCBtZXNzYWdlID0gZXJyb3IubWVzc2FnZTtcbiAgICBpZiAoZXJyb3IubmFtZSA9PT0gXCJUeXBlRXJyb3JcIiAmJiBcImNhdXNlXCIgaW4gZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvci5jYXVzZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIG1lc3NhZ2UgPSBlcnJvci5jYXVzZS5tZXNzYWdlO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZXJyb3IuY2F1c2UgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgbWVzc2FnZSA9IGVycm9yLmNhdXNlO1xuICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBuZXcgaW1wb3J0X3JlcXVlc3RfZXJyb3IuUmVxdWVzdEVycm9yKG1lc3NhZ2UsIDUwMCwge1xuICAgICAgcmVxdWVzdDogcmVxdWVzdE9wdGlvbnNcbiAgICB9KTtcbiAgfSk7XG59XG5hc3luYyBmdW5jdGlvbiBnZXRSZXNwb25zZURhdGEocmVzcG9uc2UpIHtcbiAgY29uc3QgY29udGVudFR5cGUgPSByZXNwb25zZS5oZWFkZXJzLmdldChcImNvbnRlbnQtdHlwZVwiKTtcbiAgaWYgKC9hcHBsaWNhdGlvblxcL2pzb24vLnRlc3QoY29udGVudFR5cGUpKSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKS5jYXRjaCgoKSA9PiByZXNwb25zZS50ZXh0KCkpLmNhdGNoKCgpID0+IFwiXCIpO1xuICB9XG4gIGlmICghY29udGVudFR5cGUgfHwgL150ZXh0XFwvfGNoYXJzZXQ9dXRmLTgkLy50ZXN0KGNvbnRlbnRUeXBlKSkge1xuICAgIHJldHVybiByZXNwb25zZS50ZXh0KCk7XG4gIH1cbiAgcmV0dXJuIGdldEJ1ZmZlclJlc3BvbnNlKHJlc3BvbnNlKTtcbn1cbmZ1bmN0aW9uIHRvRXJyb3JNZXNzYWdlKGRhdGEpIHtcbiAgaWYgKHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiKVxuICAgIHJldHVybiBkYXRhO1xuICBsZXQgc3VmZml4O1xuICBpZiAoXCJkb2N1bWVudGF0aW9uX3VybFwiIGluIGRhdGEpIHtcbiAgICBzdWZmaXggPSBgIC0gJHtkYXRhLmRvY3VtZW50YXRpb25fdXJsfWA7XG4gIH0gZWxzZSB7XG4gICAgc3VmZml4ID0gXCJcIjtcbiAgfVxuICBpZiAoXCJtZXNzYWdlXCIgaW4gZGF0YSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEuZXJyb3JzKSkge1xuICAgICAgcmV0dXJuIGAke2RhdGEubWVzc2FnZX06ICR7ZGF0YS5lcnJvcnMubWFwKEpTT04uc3RyaW5naWZ5KS5qb2luKFwiLCBcIil9JHtzdWZmaXh9YDtcbiAgICB9XG4gICAgcmV0dXJuIGAke2RhdGEubWVzc2FnZX0ke3N1ZmZpeH1gO1xuICB9XG4gIHJldHVybiBgVW5rbm93biBlcnJvcjogJHtKU09OLnN0cmluZ2lmeShkYXRhKX1gO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvd2l0aC1kZWZhdWx0cy5qc1xuZnVuY3Rpb24gd2l0aERlZmF1bHRzKG9sZEVuZHBvaW50LCBuZXdEZWZhdWx0cykge1xuICBjb25zdCBlbmRwb2ludDIgPSBvbGRFbmRwb2ludC5kZWZhdWx0cyhuZXdEZWZhdWx0cyk7XG4gIGNvbnN0IG5ld0FwaSA9IGZ1bmN0aW9uKHJvdXRlLCBwYXJhbWV0ZXJzKSB7XG4gICAgY29uc3QgZW5kcG9pbnRPcHRpb25zID0gZW5kcG9pbnQyLm1lcmdlKHJvdXRlLCBwYXJhbWV0ZXJzKTtcbiAgICBpZiAoIWVuZHBvaW50T3B0aW9ucy5yZXF1ZXN0IHx8ICFlbmRwb2ludE9wdGlvbnMucmVxdWVzdC5ob29rKSB7XG4gICAgICByZXR1cm4gZmV0Y2hXcmFwcGVyKGVuZHBvaW50Mi5wYXJzZShlbmRwb2ludE9wdGlvbnMpKTtcbiAgICB9XG4gICAgY29uc3QgcmVxdWVzdDIgPSAocm91dGUyLCBwYXJhbWV0ZXJzMikgPT4ge1xuICAgICAgcmV0dXJuIGZldGNoV3JhcHBlcihcbiAgICAgICAgZW5kcG9pbnQyLnBhcnNlKGVuZHBvaW50Mi5tZXJnZShyb3V0ZTIsIHBhcmFtZXRlcnMyKSlcbiAgICAgICk7XG4gICAgfTtcbiAgICBPYmplY3QuYXNzaWduKHJlcXVlc3QyLCB7XG4gICAgICBlbmRwb2ludDogZW5kcG9pbnQyLFxuICAgICAgZGVmYXVsdHM6IHdpdGhEZWZhdWx0cy5iaW5kKG51bGwsIGVuZHBvaW50MilcbiAgICB9KTtcbiAgICByZXR1cm4gZW5kcG9pbnRPcHRpb25zLnJlcXVlc3QuaG9vayhyZXF1ZXN0MiwgZW5kcG9pbnRPcHRpb25zKTtcbiAgfTtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24obmV3QXBpLCB7XG4gICAgZW5kcG9pbnQ6IGVuZHBvaW50MixcbiAgICBkZWZhdWx0czogd2l0aERlZmF1bHRzLmJpbmQobnVsbCwgZW5kcG9pbnQyKVxuICB9KTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG52YXIgcmVxdWVzdCA9IHdpdGhEZWZhdWx0cyhpbXBvcnRfZW5kcG9pbnQuZW5kcG9pbnQsIHtcbiAgaGVhZGVyczoge1xuICAgIFwidXNlci1hZ2VudFwiOiBgb2N0b2tpdC1yZXF1ZXN0LmpzLyR7VkVSU0lPTn0gJHsoMCwgaW1wb3J0X3VuaXZlcnNhbF91c2VyX2FnZW50LmdldFVzZXJBZ2VudCkoKX1gXG4gIH1cbn0pO1xuLy8gQW5ub3RhdGUgdGhlIENvbW1vbkpTIGV4cG9ydCBuYW1lcyBmb3IgRVNNIGltcG9ydCBpbiBub2RlOlxuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gIHJlcXVlc3Rcbn0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wRGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgX19nZXRPd25Qcm9wTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcztcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fZXhwb3J0ID0gKHRhcmdldCwgYWxsKSA9PiB7XG4gIGZvciAodmFyIG5hbWUgaW4gYWxsKVxuICAgIF9fZGVmUHJvcCh0YXJnZXQsIG5hbWUsIHsgZ2V0OiBhbGxbbmFtZV0sIGVudW1lcmFibGU6IHRydWUgfSk7XG59O1xudmFyIF9fY29weVByb3BzID0gKHRvLCBmcm9tLCBleGNlcHQsIGRlc2MpID0+IHtcbiAgaWYgKGZyb20gJiYgdHlwZW9mIGZyb20gPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGZyb20gPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGZvciAobGV0IGtleSBvZiBfX2dldE93blByb3BOYW1lcyhmcm9tKSlcbiAgICAgIGlmICghX19oYXNPd25Qcm9wLmNhbGwodG8sIGtleSkgJiYga2V5ICE9PSBleGNlcHQpXG4gICAgICAgIF9fZGVmUHJvcCh0bywga2V5LCB7IGdldDogKCkgPT4gZnJvbVtrZXldLCBlbnVtZXJhYmxlOiAhKGRlc2MgPSBfX2dldE93blByb3BEZXNjKGZyb20sIGtleSkpIHx8IGRlc2MuZW51bWVyYWJsZSB9KTtcbiAgfVxuICByZXR1cm4gdG87XG59O1xudmFyIF9fdG9Db21tb25KUyA9IChtb2QpID0+IF9fY29weVByb3BzKF9fZGVmUHJvcCh7fSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSksIG1vZCk7XG5cbi8vIHBrZy9kaXN0LXNyYy9pbmRleC5qc1xudmFyIGRpc3Rfc3JjX2V4cG9ydHMgPSB7fTtcbl9fZXhwb3J0KGRpc3Rfc3JjX2V4cG9ydHMsIHtcbiAgR3JhcGhxbFJlc3BvbnNlRXJyb3I6ICgpID0+IEdyYXBocWxSZXNwb25zZUVycm9yLFxuICBncmFwaHFsOiAoKSA9PiBncmFwaHFsMixcbiAgd2l0aEN1c3RvbVJlcXVlc3Q6ICgpID0+IHdpdGhDdXN0b21SZXF1ZXN0XG59KTtcbm1vZHVsZS5leHBvcnRzID0gX190b0NvbW1vbkpTKGRpc3Rfc3JjX2V4cG9ydHMpO1xudmFyIGltcG9ydF9yZXF1ZXN0MyA9IHJlcXVpcmUoXCJAb2N0b2tpdC9yZXF1ZXN0XCIpO1xudmFyIGltcG9ydF91bml2ZXJzYWxfdXNlcl9hZ2VudCA9IHJlcXVpcmUoXCJ1bml2ZXJzYWwtdXNlci1hZ2VudFwiKTtcblxuLy8gcGtnL2Rpc3Qtc3JjL3ZlcnNpb24uanNcbnZhciBWRVJTSU9OID0gXCI3LjEuMFwiO1xuXG4vLyBwa2cvZGlzdC1zcmMvd2l0aC1kZWZhdWx0cy5qc1xudmFyIGltcG9ydF9yZXF1ZXN0MiA9IHJlcXVpcmUoXCJAb2N0b2tpdC9yZXF1ZXN0XCIpO1xuXG4vLyBwa2cvZGlzdC1zcmMvZ3JhcGhxbC5qc1xudmFyIGltcG9ydF9yZXF1ZXN0ID0gcmVxdWlyZShcIkBvY3Rva2l0L3JlcXVlc3RcIik7XG5cbi8vIHBrZy9kaXN0LXNyYy9lcnJvci5qc1xuZnVuY3Rpb24gX2J1aWxkTWVzc2FnZUZvclJlc3BvbnNlRXJyb3JzKGRhdGEpIHtcbiAgcmV0dXJuIGBSZXF1ZXN0IGZhaWxlZCBkdWUgdG8gZm9sbG93aW5nIHJlc3BvbnNlIGVycm9yczpcbmAgKyBkYXRhLmVycm9ycy5tYXAoKGUpID0+IGAgLSAke2UubWVzc2FnZX1gKS5qb2luKFwiXFxuXCIpO1xufVxudmFyIEdyYXBocWxSZXNwb25zZUVycm9yID0gY2xhc3MgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHJlcXVlc3QyLCBoZWFkZXJzLCByZXNwb25zZSkge1xuICAgIHN1cGVyKF9idWlsZE1lc3NhZ2VGb3JSZXNwb25zZUVycm9ycyhyZXNwb25zZSkpO1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3QyO1xuICAgIHRoaXMuaGVhZGVycyA9IGhlYWRlcnM7XG4gICAgdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICAgIHRoaXMubmFtZSA9IFwiR3JhcGhxbFJlc3BvbnNlRXJyb3JcIjtcbiAgICB0aGlzLmVycm9ycyA9IHJlc3BvbnNlLmVycm9ycztcbiAgICB0aGlzLmRhdGEgPSByZXNwb25zZS5kYXRhO1xuICAgIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gICAgfVxuICB9XG59O1xuXG4vLyBwa2cvZGlzdC1zcmMvZ3JhcGhxbC5qc1xudmFyIE5PTl9WQVJJQUJMRV9PUFRJT05TID0gW1xuICBcIm1ldGhvZFwiLFxuICBcImJhc2VVcmxcIixcbiAgXCJ1cmxcIixcbiAgXCJoZWFkZXJzXCIsXG4gIFwicmVxdWVzdFwiLFxuICBcInF1ZXJ5XCIsXG4gIFwibWVkaWFUeXBlXCJcbl07XG52YXIgRk9SQklEREVOX1ZBUklBQkxFX09QVElPTlMgPSBbXCJxdWVyeVwiLCBcIm1ldGhvZFwiLCBcInVybFwiXTtcbnZhciBHSEVTX1YzX1NVRkZJWF9SRUdFWCA9IC9cXC9hcGlcXC92M1xcLz8kLztcbmZ1bmN0aW9uIGdyYXBocWwocmVxdWVzdDIsIHF1ZXJ5LCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBxdWVyeSA9PT0gXCJzdHJpbmdcIiAmJiBcInF1ZXJ5XCIgaW4gb3B0aW9ucykge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KFxuICAgICAgICBuZXcgRXJyb3IoYFtAb2N0b2tpdC9ncmFwaHFsXSBcInF1ZXJ5XCIgY2Fubm90IGJlIHVzZWQgYXMgdmFyaWFibGUgbmFtZWApXG4gICAgICApO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvcHRpb25zKSB7XG4gICAgICBpZiAoIUZPUkJJRERFTl9WQVJJQUJMRV9PUFRJT05TLmluY2x1ZGVzKGtleSkpXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KFxuICAgICAgICBuZXcgRXJyb3IoXG4gICAgICAgICAgYFtAb2N0b2tpdC9ncmFwaHFsXSBcIiR7a2V5fVwiIGNhbm5vdCBiZSB1c2VkIGFzIHZhcmlhYmxlIG5hbWVgXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIGNvbnN0IHBhcnNlZE9wdGlvbnMgPSB0eXBlb2YgcXVlcnkgPT09IFwic3RyaW5nXCIgPyBPYmplY3QuYXNzaWduKHsgcXVlcnkgfSwgb3B0aW9ucykgOiBxdWVyeTtcbiAgY29uc3QgcmVxdWVzdE9wdGlvbnMgPSBPYmplY3Qua2V5cyhcbiAgICBwYXJzZWRPcHRpb25zXG4gICkucmVkdWNlKChyZXN1bHQsIGtleSkgPT4ge1xuICAgIGlmIChOT05fVkFSSUFCTEVfT1BUSU9OUy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IHBhcnNlZE9wdGlvbnNba2V5XTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGlmICghcmVzdWx0LnZhcmlhYmxlcykge1xuICAgICAgcmVzdWx0LnZhcmlhYmxlcyA9IHt9O1xuICAgIH1cbiAgICByZXN1bHQudmFyaWFibGVzW2tleV0gPSBwYXJzZWRPcHRpb25zW2tleV07XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSwge30pO1xuICBjb25zdCBiYXNlVXJsID0gcGFyc2VkT3B0aW9ucy5iYXNlVXJsIHx8IHJlcXVlc3QyLmVuZHBvaW50LkRFRkFVTFRTLmJhc2VVcmw7XG4gIGlmIChHSEVTX1YzX1NVRkZJWF9SRUdFWC50ZXN0KGJhc2VVcmwpKSB7XG4gICAgcmVxdWVzdE9wdGlvbnMudXJsID0gYmFzZVVybC5yZXBsYWNlKEdIRVNfVjNfU1VGRklYX1JFR0VYLCBcIi9hcGkvZ3JhcGhxbFwiKTtcbiAgfVxuICByZXR1cm4gcmVxdWVzdDIocmVxdWVzdE9wdGlvbnMpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgaWYgKHJlc3BvbnNlLmRhdGEuZXJyb3JzKSB7XG4gICAgICBjb25zdCBoZWFkZXJzID0ge307XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhyZXNwb25zZS5oZWFkZXJzKSkge1xuICAgICAgICBoZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzW2tleV07XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgR3JhcGhxbFJlc3BvbnNlRXJyb3IoXG4gICAgICAgIHJlcXVlc3RPcHRpb25zLFxuICAgICAgICBoZWFkZXJzLFxuICAgICAgICByZXNwb25zZS5kYXRhXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzcG9uc2UuZGF0YS5kYXRhO1xuICB9KTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3dpdGgtZGVmYXVsdHMuanNcbmZ1bmN0aW9uIHdpdGhEZWZhdWx0cyhyZXF1ZXN0MiwgbmV3RGVmYXVsdHMpIHtcbiAgY29uc3QgbmV3UmVxdWVzdCA9IHJlcXVlc3QyLmRlZmF1bHRzKG5ld0RlZmF1bHRzKTtcbiAgY29uc3QgbmV3QXBpID0gKHF1ZXJ5LCBvcHRpb25zKSA9PiB7XG4gICAgcmV0dXJuIGdyYXBocWwobmV3UmVxdWVzdCwgcXVlcnksIG9wdGlvbnMpO1xuICB9O1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihuZXdBcGksIHtcbiAgICBkZWZhdWx0czogd2l0aERlZmF1bHRzLmJpbmQobnVsbCwgbmV3UmVxdWVzdCksXG4gICAgZW5kcG9pbnQ6IG5ld1JlcXVlc3QuZW5kcG9pbnRcbiAgfSk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9pbmRleC5qc1xudmFyIGdyYXBocWwyID0gd2l0aERlZmF1bHRzKGltcG9ydF9yZXF1ZXN0My5yZXF1ZXN0LCB7XG4gIGhlYWRlcnM6IHtcbiAgICBcInVzZXItYWdlbnRcIjogYG9jdG9raXQtZ3JhcGhxbC5qcy8ke1ZFUlNJT059ICR7KDAsIGltcG9ydF91bml2ZXJzYWxfdXNlcl9hZ2VudC5nZXRVc2VyQWdlbnQpKCl9YFxuICB9LFxuICBtZXRob2Q6IFwiUE9TVFwiLFxuICB1cmw6IFwiL2dyYXBocWxcIlxufSk7XG5mdW5jdGlvbiB3aXRoQ3VzdG9tUmVxdWVzdChjdXN0b21SZXF1ZXN0KSB7XG4gIHJldHVybiB3aXRoRGVmYXVsdHMoY3VzdG9tUmVxdWVzdCwge1xuICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgdXJsOiBcIi9ncmFwaHFsXCJcbiAgfSk7XG59XG4vLyBBbm5vdGF0ZSB0aGUgQ29tbW9uSlMgZXhwb3J0IG5hbWVzIGZvciBFU00gaW1wb3J0IGluIG5vZGU6XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgR3JhcGhxbFJlc3BvbnNlRXJyb3IsXG4gIGdyYXBocWwsXG4gIHdpdGhDdXN0b21SZXF1ZXN0XG59KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIF9fZ2V0T3duUHJvcE5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XG52YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX2V4cG9ydCA9ICh0YXJnZXQsIGFsbCkgPT4ge1xuICBmb3IgKHZhciBuYW1lIGluIGFsbClcbiAgICBfX2RlZlByb3AodGFyZ2V0LCBuYW1lLCB7IGdldDogYWxsW25hbWVdLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xufTtcbnZhciBfX2NvcHlQcm9wcyA9ICh0bywgZnJvbSwgZXhjZXB0LCBkZXNjKSA9PiB7XG4gIGlmIChmcm9tICYmIHR5cGVvZiBmcm9tID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBmcm9tID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBmb3IgKGxldCBrZXkgb2YgX19nZXRPd25Qcm9wTmFtZXMoZnJvbSkpXG4gICAgICBpZiAoIV9faGFzT3duUHJvcC5jYWxsKHRvLCBrZXkpICYmIGtleSAhPT0gZXhjZXB0KVxuICAgICAgICBfX2RlZlByb3AodG8sIGtleSwgeyBnZXQ6ICgpID0+IGZyb21ba2V5XSwgZW51bWVyYWJsZTogIShkZXNjID0gX19nZXRPd25Qcm9wRGVzYyhmcm9tLCBrZXkpKSB8fCBkZXNjLmVudW1lcmFibGUgfSk7XG4gIH1cbiAgcmV0dXJuIHRvO1xufTtcbnZhciBfX3RvQ29tbW9uSlMgPSAobW9kKSA9PiBfX2NvcHlQcm9wcyhfX2RlZlByb3Aoe30sIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pLCBtb2QpO1xuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbnZhciBkaXN0X3NyY19leHBvcnRzID0ge307XG5fX2V4cG9ydChkaXN0X3NyY19leHBvcnRzLCB7XG4gIGNyZWF0ZVRva2VuQXV0aDogKCkgPT4gY3JlYXRlVG9rZW5BdXRoXG59KTtcbm1vZHVsZS5leHBvcnRzID0gX190b0NvbW1vbkpTKGRpc3Rfc3JjX2V4cG9ydHMpO1xuXG4vLyBwa2cvZGlzdC1zcmMvYXV0aC5qc1xudmFyIFJFR0VYX0lTX0lOU1RBTExBVElPTl9MRUdBQ1kgPSAvXnYxXFwuLztcbnZhciBSRUdFWF9JU19JTlNUQUxMQVRJT04gPSAvXmdoc18vO1xudmFyIFJFR0VYX0lTX1VTRVJfVE9fU0VSVkVSID0gL15naHVfLztcbmFzeW5jIGZ1bmN0aW9uIGF1dGgodG9rZW4pIHtcbiAgY29uc3QgaXNBcHAgPSB0b2tlbi5zcGxpdCgvXFwuLykubGVuZ3RoID09PSAzO1xuICBjb25zdCBpc0luc3RhbGxhdGlvbiA9IFJFR0VYX0lTX0lOU1RBTExBVElPTl9MRUdBQ1kudGVzdCh0b2tlbikgfHwgUkVHRVhfSVNfSU5TVEFMTEFUSU9OLnRlc3QodG9rZW4pO1xuICBjb25zdCBpc1VzZXJUb1NlcnZlciA9IFJFR0VYX0lTX1VTRVJfVE9fU0VSVkVSLnRlc3QodG9rZW4pO1xuICBjb25zdCB0b2tlblR5cGUgPSBpc0FwcCA/IFwiYXBwXCIgOiBpc0luc3RhbGxhdGlvbiA/IFwiaW5zdGFsbGF0aW9uXCIgOiBpc1VzZXJUb1NlcnZlciA/IFwidXNlci10by1zZXJ2ZXJcIiA6IFwib2F1dGhcIjtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBcInRva2VuXCIsXG4gICAgdG9rZW4sXG4gICAgdG9rZW5UeXBlXG4gIH07XG59XG5cbi8vIHBrZy9kaXN0LXNyYy93aXRoLWF1dGhvcml6YXRpb24tcHJlZml4LmpzXG5mdW5jdGlvbiB3aXRoQXV0aG9yaXphdGlvblByZWZpeCh0b2tlbikge1xuICBpZiAodG9rZW4uc3BsaXQoL1xcLi8pLmxlbmd0aCA9PT0gMykge1xuICAgIHJldHVybiBgYmVhcmVyICR7dG9rZW59YDtcbiAgfVxuICByZXR1cm4gYHRva2VuICR7dG9rZW59YDtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2hvb2suanNcbmFzeW5jIGZ1bmN0aW9uIGhvb2sodG9rZW4sIHJlcXVlc3QsIHJvdXRlLCBwYXJhbWV0ZXJzKSB7XG4gIGNvbnN0IGVuZHBvaW50ID0gcmVxdWVzdC5lbmRwb2ludC5tZXJnZShcbiAgICByb3V0ZSxcbiAgICBwYXJhbWV0ZXJzXG4gICk7XG4gIGVuZHBvaW50LmhlYWRlcnMuYXV0aG9yaXphdGlvbiA9IHdpdGhBdXRob3JpemF0aW9uUHJlZml4KHRva2VuKTtcbiAgcmV0dXJuIHJlcXVlc3QoZW5kcG9pbnQpO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbnZhciBjcmVhdGVUb2tlbkF1dGggPSBmdW5jdGlvbiBjcmVhdGVUb2tlbkF1dGgyKHRva2VuKSB7XG4gIGlmICghdG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJbQG9jdG9raXQvYXV0aC10b2tlbl0gTm8gdG9rZW4gcGFzc2VkIHRvIGNyZWF0ZVRva2VuQXV0aFwiKTtcbiAgfVxuICBpZiAodHlwZW9mIHRva2VuICE9PSBcInN0cmluZ1wiKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJbQG9jdG9raXQvYXV0aC10b2tlbl0gVG9rZW4gcGFzc2VkIHRvIGNyZWF0ZVRva2VuQXV0aCBpcyBub3QgYSBzdHJpbmdcIlxuICAgICk7XG4gIH1cbiAgdG9rZW4gPSB0b2tlbi5yZXBsYWNlKC9eKHRva2VufGJlYXJlcikgKy9pLCBcIlwiKTtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oYXV0aC5iaW5kKG51bGwsIHRva2VuKSwge1xuICAgIGhvb2s6IGhvb2suYmluZChudWxsLCB0b2tlbilcbiAgfSk7XG59O1xuLy8gQW5ub3RhdGUgdGhlIENvbW1vbkpTIGV4cG9ydCBuYW1lcyBmb3IgRVNNIGltcG9ydCBpbiBub2RlOlxuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gIGNyZWF0ZVRva2VuQXV0aFxufSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BEZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBfX2dldE93blByb3BOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO1xudmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19leHBvcnQgPSAodGFyZ2V0LCBhbGwpID0+IHtcbiAgZm9yICh2YXIgbmFtZSBpbiBhbGwpXG4gICAgX19kZWZQcm9wKHRhcmdldCwgbmFtZSwgeyBnZXQ6IGFsbFtuYW1lXSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcbn07XG52YXIgX19jb3B5UHJvcHMgPSAodG8sIGZyb20sIGV4Y2VwdCwgZGVzYykgPT4ge1xuICBpZiAoZnJvbSAmJiB0eXBlb2YgZnJvbSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgZnJvbSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgZm9yIChsZXQga2V5IG9mIF9fZ2V0T3duUHJvcE5hbWVzKGZyb20pKVxuICAgICAgaWYgKCFfX2hhc093blByb3AuY2FsbCh0bywga2V5KSAmJiBrZXkgIT09IGV4Y2VwdClcbiAgICAgICAgX19kZWZQcm9wKHRvLCBrZXksIHsgZ2V0OiAoKSA9PiBmcm9tW2tleV0sIGVudW1lcmFibGU6ICEoZGVzYyA9IF9fZ2V0T3duUHJvcERlc2MoZnJvbSwga2V5KSkgfHwgZGVzYy5lbnVtZXJhYmxlIH0pO1xuICB9XG4gIHJldHVybiB0bztcbn07XG52YXIgX190b0NvbW1vbkpTID0gKG1vZCkgPT4gX19jb3B5UHJvcHMoX19kZWZQcm9wKHt9LCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KSwgbW9kKTtcblxuLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG52YXIgZGlzdF9zcmNfZXhwb3J0cyA9IHt9O1xuX19leHBvcnQoZGlzdF9zcmNfZXhwb3J0cywge1xuICBPY3Rva2l0OiAoKSA9PiBPY3Rva2l0XG59KTtcbm1vZHVsZS5leHBvcnRzID0gX190b0NvbW1vbkpTKGRpc3Rfc3JjX2V4cG9ydHMpO1xudmFyIGltcG9ydF91bml2ZXJzYWxfdXNlcl9hZ2VudCA9IHJlcXVpcmUoXCJ1bml2ZXJzYWwtdXNlci1hZ2VudFwiKTtcbnZhciBpbXBvcnRfYmVmb3JlX2FmdGVyX2hvb2sgPSByZXF1aXJlKFwiYmVmb3JlLWFmdGVyLWhvb2tcIik7XG52YXIgaW1wb3J0X3JlcXVlc3QgPSByZXF1aXJlKFwiQG9jdG9raXQvcmVxdWVzdFwiKTtcbnZhciBpbXBvcnRfZ3JhcGhxbCA9IHJlcXVpcmUoXCJAb2N0b2tpdC9ncmFwaHFsXCIpO1xudmFyIGltcG9ydF9hdXRoX3Rva2VuID0gcmVxdWlyZShcIkBvY3Rva2l0L2F1dGgtdG9rZW5cIik7XG5cbi8vIHBrZy9kaXN0LXNyYy92ZXJzaW9uLmpzXG52YXIgVkVSU0lPTiA9IFwiNS4yLjBcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG52YXIgbm9vcCA9ICgpID0+IHtcbn07XG52YXIgY29uc29sZVdhcm4gPSBjb25zb2xlLndhcm4uYmluZChjb25zb2xlKTtcbnZhciBjb25zb2xlRXJyb3IgPSBjb25zb2xlLmVycm9yLmJpbmQoY29uc29sZSk7XG52YXIgdXNlckFnZW50VHJhaWwgPSBgb2N0b2tpdC1jb3JlLmpzLyR7VkVSU0lPTn0gJHsoMCwgaW1wb3J0X3VuaXZlcnNhbF91c2VyX2FnZW50LmdldFVzZXJBZ2VudCkoKX1gO1xudmFyIE9jdG9raXQgPSBjbGFzcyB7XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5WRVJTSU9OID0gVkVSU0lPTjtcbiAgfVxuICBzdGF0aWMgZGVmYXVsdHMoZGVmYXVsdHMpIHtcbiAgICBjb25zdCBPY3Rva2l0V2l0aERlZmF1bHRzID0gY2xhc3MgZXh0ZW5kcyB0aGlzIHtcbiAgICAgIGNvbnN0cnVjdG9yKC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGFyZ3NbMF0gfHwge307XG4gICAgICAgIGlmICh0eXBlb2YgZGVmYXVsdHMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIHN1cGVyKGRlZmF1bHRzKG9wdGlvbnMpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIoXG4gICAgICAgICAgT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgZGVmYXVsdHMsXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgb3B0aW9ucy51c2VyQWdlbnQgJiYgZGVmYXVsdHMudXNlckFnZW50ID8ge1xuICAgICAgICAgICAgICB1c2VyQWdlbnQ6IGAke29wdGlvbnMudXNlckFnZW50fSAke2RlZmF1bHRzLnVzZXJBZ2VudH1gXG4gICAgICAgICAgICB9IDogbnVsbFxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBPY3Rva2l0V2l0aERlZmF1bHRzO1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5wbHVnaW5zID0gW107XG4gIH1cbiAgLyoqXG4gICAqIEF0dGFjaCBhIHBsdWdpbiAob3IgbWFueSkgdG8geW91ciBPY3Rva2l0IGluc3RhbmNlLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBjb25zdCBBUEkgPSBPY3Rva2l0LnBsdWdpbihwbHVnaW4xLCBwbHVnaW4yLCBwbHVnaW4zLCAuLi4pXG4gICAqL1xuICBzdGF0aWMgcGx1Z2luKC4uLm5ld1BsdWdpbnMpIHtcbiAgICBjb25zdCBjdXJyZW50UGx1Z2lucyA9IHRoaXMucGx1Z2lucztcbiAgICBjb25zdCBOZXdPY3Rva2l0ID0gY2xhc3MgZXh0ZW5kcyB0aGlzIHtcbiAgICAgIHN0YXRpYyB7XG4gICAgICAgIHRoaXMucGx1Z2lucyA9IGN1cnJlbnRQbHVnaW5zLmNvbmNhdChcbiAgICAgICAgICBuZXdQbHVnaW5zLmZpbHRlcigocGx1Z2luKSA9PiAhY3VycmVudFBsdWdpbnMuaW5jbHVkZXMocGx1Z2luKSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBOZXdPY3Rva2l0O1xuICB9XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IGhvb2sgPSBuZXcgaW1wb3J0X2JlZm9yZV9hZnRlcl9ob29rLkNvbGxlY3Rpb24oKTtcbiAgICBjb25zdCByZXF1ZXN0RGVmYXVsdHMgPSB7XG4gICAgICBiYXNlVXJsOiBpbXBvcnRfcmVxdWVzdC5yZXF1ZXN0LmVuZHBvaW50LkRFRkFVTFRTLmJhc2VVcmwsXG4gICAgICBoZWFkZXJzOiB7fSxcbiAgICAgIHJlcXVlc3Q6IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMucmVxdWVzdCwge1xuICAgICAgICAvLyBAdHMtaWdub3JlIGludGVybmFsIHVzYWdlIG9ubHksIG5vIG5lZWQgdG8gdHlwZVxuICAgICAgICBob29rOiBob29rLmJpbmQobnVsbCwgXCJyZXF1ZXN0XCIpXG4gICAgICB9KSxcbiAgICAgIG1lZGlhVHlwZToge1xuICAgICAgICBwcmV2aWV3czogW10sXG4gICAgICAgIGZvcm1hdDogXCJcIlxuICAgICAgfVxuICAgIH07XG4gICAgcmVxdWVzdERlZmF1bHRzLmhlYWRlcnNbXCJ1c2VyLWFnZW50XCJdID0gb3B0aW9ucy51c2VyQWdlbnQgPyBgJHtvcHRpb25zLnVzZXJBZ2VudH0gJHt1c2VyQWdlbnRUcmFpbH1gIDogdXNlckFnZW50VHJhaWw7XG4gICAgaWYgKG9wdGlvbnMuYmFzZVVybCkge1xuICAgICAgcmVxdWVzdERlZmF1bHRzLmJhc2VVcmwgPSBvcHRpb25zLmJhc2VVcmw7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnByZXZpZXdzKSB7XG4gICAgICByZXF1ZXN0RGVmYXVsdHMubWVkaWFUeXBlLnByZXZpZXdzID0gb3B0aW9ucy5wcmV2aWV3cztcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMudGltZVpvbmUpIHtcbiAgICAgIHJlcXVlc3REZWZhdWx0cy5oZWFkZXJzW1widGltZS16b25lXCJdID0gb3B0aW9ucy50aW1lWm9uZTtcbiAgICB9XG4gICAgdGhpcy5yZXF1ZXN0ID0gaW1wb3J0X3JlcXVlc3QucmVxdWVzdC5kZWZhdWx0cyhyZXF1ZXN0RGVmYXVsdHMpO1xuICAgIHRoaXMuZ3JhcGhxbCA9ICgwLCBpbXBvcnRfZ3JhcGhxbC53aXRoQ3VzdG9tUmVxdWVzdCkodGhpcy5yZXF1ZXN0KS5kZWZhdWx0cyhyZXF1ZXN0RGVmYXVsdHMpO1xuICAgIHRoaXMubG9nID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHtcbiAgICAgICAgZGVidWc6IG5vb3AsXG4gICAgICAgIGluZm86IG5vb3AsXG4gICAgICAgIHdhcm46IGNvbnNvbGVXYXJuLFxuICAgICAgICBlcnJvcjogY29uc29sZUVycm9yXG4gICAgICB9LFxuICAgICAgb3B0aW9ucy5sb2dcbiAgICApO1xuICAgIHRoaXMuaG9vayA9IGhvb2s7XG4gICAgaWYgKCFvcHRpb25zLmF1dGhTdHJhdGVneSkge1xuICAgICAgaWYgKCFvcHRpb25zLmF1dGgpIHtcbiAgICAgICAgdGhpcy5hdXRoID0gYXN5bmMgKCkgPT4gKHtcbiAgICAgICAgICB0eXBlOiBcInVuYXV0aGVudGljYXRlZFwiXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgYXV0aCA9ICgwLCBpbXBvcnRfYXV0aF90b2tlbi5jcmVhdGVUb2tlbkF1dGgpKG9wdGlvbnMuYXV0aCk7XG4gICAgICAgIGhvb2sud3JhcChcInJlcXVlc3RcIiwgYXV0aC5ob29rKTtcbiAgICAgICAgdGhpcy5hdXRoID0gYXV0aDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgeyBhdXRoU3RyYXRlZ3ksIC4uLm90aGVyT3B0aW9ucyB9ID0gb3B0aW9ucztcbiAgICAgIGNvbnN0IGF1dGggPSBhdXRoU3RyYXRlZ3koXG4gICAgICAgIE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAge1xuICAgICAgICAgICAgcmVxdWVzdDogdGhpcy5yZXF1ZXN0LFxuICAgICAgICAgICAgbG9nOiB0aGlzLmxvZyxcbiAgICAgICAgICAgIC8vIHdlIHBhc3MgdGhlIGN1cnJlbnQgb2N0b2tpdCBpbnN0YW5jZSBhcyB3ZWxsIGFzIGl0cyBjb25zdHJ1Y3RvciBvcHRpb25zXG4gICAgICAgICAgICAvLyB0byBhbGxvdyBmb3IgYXV0aGVudGljYXRpb24gc3RyYXRlZ2llcyB0aGF0IHJldHVybiBhIG5ldyBvY3Rva2l0IGluc3RhbmNlXG4gICAgICAgICAgICAvLyB0aGF0IHNoYXJlcyB0aGUgc2FtZSBpbnRlcm5hbCBzdGF0ZSBhcyB0aGUgY3VycmVudCBvbmUuIFRoZSBvcmlnaW5hbFxuICAgICAgICAgICAgLy8gcmVxdWlyZW1lbnQgZm9yIHRoaXMgd2FzIHRoZSBcImV2ZW50LW9jdG9raXRcIiBhdXRoZW50aWNhdGlvbiBzdHJhdGVneVxuICAgICAgICAgICAgLy8gb2YgaHR0cHM6Ly9naXRodWIuY29tL3Byb2JvdC9vY3Rva2l0LWF1dGgtcHJvYm90LlxuICAgICAgICAgICAgb2N0b2tpdDogdGhpcyxcbiAgICAgICAgICAgIG9jdG9raXRPcHRpb25zOiBvdGhlck9wdGlvbnNcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9wdGlvbnMuYXV0aFxuICAgICAgICApXG4gICAgICApO1xuICAgICAgaG9vay53cmFwKFwicmVxdWVzdFwiLCBhdXRoLmhvb2spO1xuICAgICAgdGhpcy5hdXRoID0gYXV0aDtcbiAgICB9XG4gICAgY29uc3QgY2xhc3NDb25zdHJ1Y3RvciA9IHRoaXMuY29uc3RydWN0b3I7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjbGFzc0NvbnN0cnVjdG9yLnBsdWdpbnMubGVuZ3RoOyArK2kpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgY2xhc3NDb25zdHJ1Y3Rvci5wbHVnaW5zW2ldKHRoaXMsIG9wdGlvbnMpKTtcbiAgICB9XG4gIH1cbn07XG4vLyBBbm5vdGF0ZSB0aGUgQ29tbW9uSlMgZXhwb3J0IG5hbWVzIGZvciBFU00gaW1wb3J0IGluIG5vZGU6XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgT2N0b2tpdFxufSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BEZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBfX2dldE93blByb3BOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO1xudmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19leHBvcnQgPSAodGFyZ2V0LCBhbGwpID0+IHtcbiAgZm9yICh2YXIgbmFtZSBpbiBhbGwpXG4gICAgX19kZWZQcm9wKHRhcmdldCwgbmFtZSwgeyBnZXQ6IGFsbFtuYW1lXSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcbn07XG52YXIgX19jb3B5UHJvcHMgPSAodG8sIGZyb20sIGV4Y2VwdCwgZGVzYykgPT4ge1xuICBpZiAoZnJvbSAmJiB0eXBlb2YgZnJvbSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgZnJvbSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgZm9yIChsZXQga2V5IG9mIF9fZ2V0T3duUHJvcE5hbWVzKGZyb20pKVxuICAgICAgaWYgKCFfX2hhc093blByb3AuY2FsbCh0bywga2V5KSAmJiBrZXkgIT09IGV4Y2VwdClcbiAgICAgICAgX19kZWZQcm9wKHRvLCBrZXksIHsgZ2V0OiAoKSA9PiBmcm9tW2tleV0sIGVudW1lcmFibGU6ICEoZGVzYyA9IF9fZ2V0T3duUHJvcERlc2MoZnJvbSwga2V5KSkgfHwgZGVzYy5lbnVtZXJhYmxlIH0pO1xuICB9XG4gIHJldHVybiB0bztcbn07XG52YXIgX190b0NvbW1vbkpTID0gKG1vZCkgPT4gX19jb3B5UHJvcHMoX19kZWZQcm9wKHt9LCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KSwgbW9kKTtcblxuLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG52YXIgZGlzdF9zcmNfZXhwb3J0cyA9IHt9O1xuX19leHBvcnQoZGlzdF9zcmNfZXhwb3J0cywge1xuICBsZWdhY3lSZXN0RW5kcG9pbnRNZXRob2RzOiAoKSA9PiBsZWdhY3lSZXN0RW5kcG9pbnRNZXRob2RzLFxuICByZXN0RW5kcG9pbnRNZXRob2RzOiAoKSA9PiByZXN0RW5kcG9pbnRNZXRob2RzXG59KTtcbm1vZHVsZS5leHBvcnRzID0gX190b0NvbW1vbkpTKGRpc3Rfc3JjX2V4cG9ydHMpO1xuXG4vLyBwa2cvZGlzdC1zcmMvdmVyc2lvbi5qc1xudmFyIFZFUlNJT04gPSBcIjEwLjQuMVwiO1xuXG4vLyBwa2cvZGlzdC1zcmMvZ2VuZXJhdGVkL2VuZHBvaW50cy5qc1xudmFyIEVuZHBvaW50cyA9IHtcbiAgYWN0aW9uczoge1xuICAgIGFkZEN1c3RvbUxhYmVsc1RvU2VsZkhvc3RlZFJ1bm5lckZvck9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIlxuICAgIF0sXG4gICAgYWRkQ3VzdG9tTGFiZWxzVG9TZWxmSG9zdGVkUnVubmVyRm9yUmVwbzogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCJcbiAgICBdLFxuICAgIGFkZFNlbGVjdGVkUmVwb1RvT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCJcbiAgICBdLFxuICAgIGFkZFNlbGVjdGVkUmVwb1RvT3JnVmFyaWFibGU6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvdmFyaWFibGVzL3tuYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCJcbiAgICBdLFxuICAgIGFwcHJvdmVXb3JrZmxvd1J1bjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXBwcm92ZVwiXG4gICAgXSxcbiAgICBjYW5jZWxXb3JrZmxvd1J1bjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vY2FuY2VsXCJcbiAgICBdLFxuICAgIGNyZWF0ZUVudmlyb25tZW50VmFyaWFibGU6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3ZhcmlhYmxlc1wiXG4gICAgXSxcbiAgICBjcmVhdGVPclVwZGF0ZUVudmlyb25tZW50U2VjcmV0OiBbXG4gICAgICBcIlBVVCAvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHMve3NlY3JldF9uYW1lfVwiXG4gICAgXSxcbiAgICBjcmVhdGVPclVwZGF0ZU9yZ1NlY3JldDogW1wiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlUmVwb1NlY3JldDogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJcbiAgICBdLFxuICAgIGNyZWF0ZU9yZ1ZhcmlhYmxlOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2FjdGlvbnMvdmFyaWFibGVzXCJdLFxuICAgIGNyZWF0ZVJlZ2lzdHJhdGlvblRva2VuRm9yT3JnOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3JlZ2lzdHJhdGlvbi10b2tlblwiXG4gICAgXSxcbiAgICBjcmVhdGVSZWdpc3RyYXRpb25Ub2tlbkZvclJlcG86IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3JlZ2lzdHJhdGlvbi10b2tlblwiXG4gICAgXSxcbiAgICBjcmVhdGVSZW1vdmVUb2tlbkZvck9yZzogW1wiUE9TVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMvcmVtb3ZlLXRva2VuXCJdLFxuICAgIGNyZWF0ZVJlbW92ZVRva2VuRm9yUmVwbzogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMvcmVtb3ZlLXRva2VuXCJcbiAgICBdLFxuICAgIGNyZWF0ZVJlcG9WYXJpYWJsZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy92YXJpYWJsZXNcIl0sXG4gICAgY3JlYXRlV29ya2Zsb3dEaXNwYXRjaDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L2Rpc3BhdGNoZXNcIlxuICAgIF0sXG4gICAgZGVsZXRlQWN0aW9uc0NhY2hlQnlJZDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvY2FjaGVzL3tjYWNoZV9pZH1cIlxuICAgIF0sXG4gICAgZGVsZXRlQWN0aW9uc0NhY2hlQnlLZXk6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2NhY2hlc3s/a2V5LHJlZn1cIlxuICAgIF0sXG4gICAgZGVsZXRlQXJ0aWZhY3Q6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2FydGlmYWN0cy97YXJ0aWZhY3RfaWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZUVudmlyb25tZW50U2VjcmV0OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHMve3NlY3JldF9uYW1lfVwiXG4gICAgXSxcbiAgICBkZWxldGVFbnZpcm9ubWVudFZhcmlhYmxlOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3ZhcmlhYmxlcy97bmFtZX1cIlxuICAgIF0sXG4gICAgZGVsZXRlT3JnU2VjcmV0OiBbXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZGVsZXRlT3JnVmFyaWFibGU6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX1cIl0sXG4gICAgZGVsZXRlUmVwb1NlY3JldDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJcbiAgICBdLFxuICAgIGRlbGV0ZVJlcG9WYXJpYWJsZTogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvdmFyaWFibGVzL3tuYW1lfVwiXG4gICAgXSxcbiAgICBkZWxldGVTZWxmSG9zdGVkUnVubmVyRnJvbU9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZVNlbGZIb3N0ZWRSdW5uZXJGcm9tUmVwbzogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfVwiXG4gICAgXSxcbiAgICBkZWxldGVXb3JrZmxvd1J1bjogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH1cIl0sXG4gICAgZGVsZXRlV29ya2Zsb3dSdW5Mb2dzOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2xvZ3NcIlxuICAgIF0sXG4gICAgZGlzYWJsZVNlbGVjdGVkUmVwb3NpdG9yeUdpdGh1YkFjdGlvbnNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiXG4gICAgXSxcbiAgICBkaXNhYmxlV29ya2Zsb3c6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L2Rpc2FibGVcIlxuICAgIF0sXG4gICAgZG93bmxvYWRBcnRpZmFjdDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvYXJ0aWZhY3RzL3thcnRpZmFjdF9pZH0ve2FyY2hpdmVfZm9ybWF0fVwiXG4gICAgXSxcbiAgICBkb3dubG9hZEpvYkxvZ3NGb3JXb3JrZmxvd1J1bjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvam9icy97am9iX2lkfS9sb2dzXCJcbiAgICBdLFxuICAgIGRvd25sb2FkV29ya2Zsb3dSdW5BdHRlbXB0TG9nczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hdHRlbXB0cy97YXR0ZW1wdF9udW1iZXJ9L2xvZ3NcIlxuICAgIF0sXG4gICAgZG93bmxvYWRXb3JrZmxvd1J1bkxvZ3M6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vbG9nc1wiXG4gICAgXSxcbiAgICBlbmFibGVTZWxlY3RlZFJlcG9zaXRvcnlHaXRodWJBY3Rpb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIlxuICAgIF0sXG4gICAgZW5hYmxlV29ya2Zsb3c6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L2VuYWJsZVwiXG4gICAgXSxcbiAgICBmb3JjZUNhbmNlbFdvcmtmbG93UnVuOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9mb3JjZS1jYW5jZWxcIlxuICAgIF0sXG4gICAgZ2VuZXJhdGVSdW5uZXJKaXRjb25maWdGb3JPcmc6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMvZ2VuZXJhdGUtaml0Y29uZmlnXCJcbiAgICBdLFxuICAgIGdlbmVyYXRlUnVubmVySml0Y29uZmlnRm9yUmVwbzogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMvZ2VuZXJhdGUtaml0Y29uZmlnXCJcbiAgICBdLFxuICAgIGdldEFjdGlvbnNDYWNoZUxpc3Q6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9jYWNoZXNcIl0sXG4gICAgZ2V0QWN0aW9uc0NhY2hlVXNhZ2U6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9jYWNoZS91c2FnZVwiXSxcbiAgICBnZXRBY3Rpb25zQ2FjaGVVc2FnZUJ5UmVwb0Zvck9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9jYWNoZS91c2FnZS1ieS1yZXBvc2l0b3J5XCJcbiAgICBdLFxuICAgIGdldEFjdGlvbnNDYWNoZVVzYWdlRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9jYWNoZS91c2FnZVwiXSxcbiAgICBnZXRBbGxvd2VkQWN0aW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9zZWxlY3RlZC1hY3Rpb25zXCJcbiAgICBdLFxuICAgIGdldEFsbG93ZWRBY3Rpb25zUmVwb3NpdG9yeTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnMvc2VsZWN0ZWQtYWN0aW9uc1wiXG4gICAgXSxcbiAgICBnZXRBcnRpZmFjdDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2FydGlmYWN0cy97YXJ0aWZhY3RfaWR9XCJdLFxuICAgIGdldEN1c3RvbU9pZGNTdWJDbGFpbUZvclJlcG86IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL29pZGMvY3VzdG9taXphdGlvbi9zdWJcIlxuICAgIF0sXG4gICAgZ2V0RW52aXJvbm1lbnRQdWJsaWNLZXk6IFtcbiAgICAgIFwiR0VUIC9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vc2VjcmV0cy9wdWJsaWMta2V5XCJcbiAgICBdLFxuICAgIGdldEVudmlyb25tZW50U2VjcmV0OiBbXG4gICAgICBcIkdFVCAvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHMve3NlY3JldF9uYW1lfVwiXG4gICAgXSxcbiAgICBnZXRFbnZpcm9ubWVudFZhcmlhYmxlOiBbXG4gICAgICBcIkdFVCAvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3ZhcmlhYmxlcy97bmFtZX1cIlxuICAgIF0sXG4gICAgZ2V0R2l0aHViQWN0aW9uc0RlZmF1bHRXb3JrZmxvd1Blcm1pc3Npb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3dvcmtmbG93XCJcbiAgICBdLFxuICAgIGdldEdpdGh1YkFjdGlvbnNEZWZhdWx0V29ya2Zsb3dQZXJtaXNzaW9uc1JlcG9zaXRvcnk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zL3dvcmtmbG93XCJcbiAgICBdLFxuICAgIGdldEdpdGh1YkFjdGlvbnNQZXJtaXNzaW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9uc1wiXG4gICAgXSxcbiAgICBnZXRHaXRodWJBY3Rpb25zUGVybWlzc2lvbnNSZXBvc2l0b3J5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9uc1wiXG4gICAgXSxcbiAgICBnZXRKb2JGb3JXb3JrZmxvd1J1bjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2pvYnMve2pvYl9pZH1cIl0sXG4gICAgZ2V0T3JnUHVibGljS2V5OiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3B1YmxpYy1rZXlcIl0sXG4gICAgZ2V0T3JnU2VjcmV0OiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZ2V0T3JnVmFyaWFibGU6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX1cIl0sXG4gICAgZ2V0UGVuZGluZ0RlcGxveW1lbnRzRm9yUnVuOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L3BlbmRpbmdfZGVwbG95bWVudHNcIlxuICAgIF0sXG4gICAgZ2V0UmVwb1Blcm1pc3Npb25zOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9uc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcImFjdGlvbnNcIiwgXCJnZXRHaXRodWJBY3Rpb25zUGVybWlzc2lvbnNSZXBvc2l0b3J5XCJdIH1cbiAgICBdLFxuICAgIGdldFJlcG9QdWJsaWNLZXk6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9zZWNyZXRzL3B1YmxpYy1rZXlcIl0sXG4gICAgZ2V0UmVwb1NlY3JldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBnZXRSZXBvVmFyaWFibGU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCJdLFxuICAgIGdldFJldmlld3NGb3JSdW46IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXBwcm92YWxzXCJcbiAgICBdLFxuICAgIGdldFNlbGZIb3N0ZWRSdW5uZXJGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH1cIl0sXG4gICAgZ2V0U2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH1cIlxuICAgIF0sXG4gICAgZ2V0V29ya2Zsb3c6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3Mve3dvcmtmbG93X2lkfVwiXSxcbiAgICBnZXRXb3JrZmxvd0FjY2Vzc1RvUmVwb3NpdG9yeTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnMvYWNjZXNzXCJcbiAgICBdLFxuICAgIGdldFdvcmtmbG93UnVuOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfVwiXSxcbiAgICBnZXRXb3JrZmxvd1J1bkF0dGVtcHQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXR0ZW1wdHMve2F0dGVtcHRfbnVtYmVyfVwiXG4gICAgXSxcbiAgICBnZXRXb3JrZmxvd1J1blVzYWdlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L3RpbWluZ1wiXG4gICAgXSxcbiAgICBnZXRXb3JrZmxvd1VzYWdlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3Mve3dvcmtmbG93X2lkfS90aW1pbmdcIlxuICAgIF0sXG4gICAgbGlzdEFydGlmYWN0c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9hcnRpZmFjdHNcIl0sXG4gICAgbGlzdEVudmlyb25tZW50U2VjcmV0czogW1xuICAgICAgXCJHRVQgL3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH0vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9zZWNyZXRzXCJcbiAgICBdLFxuICAgIGxpc3RFbnZpcm9ubWVudFZhcmlhYmxlczogW1xuICAgICAgXCJHRVQgL3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH0vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS92YXJpYWJsZXNcIlxuICAgIF0sXG4gICAgbGlzdEpvYnNGb3JXb3JrZmxvd1J1bjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9qb2JzXCJcbiAgICBdLFxuICAgIGxpc3RKb2JzRm9yV29ya2Zsb3dSdW5BdHRlbXB0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2F0dGVtcHRzL3thdHRlbXB0X251bWJlcn0vam9ic1wiXG4gICAgXSxcbiAgICBsaXN0TGFiZWxzRm9yU2VsZkhvc3RlZFJ1bm5lckZvck9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVsc1wiXG4gICAgXSxcbiAgICBsaXN0TGFiZWxzRm9yU2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCJcbiAgICBdLFxuICAgIGxpc3RPcmdTZWNyZXRzOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzXCJdLFxuICAgIGxpc3RPcmdWYXJpYWJsZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlc1wiXSxcbiAgICBsaXN0UmVwb09yZ2FuaXphdGlvblNlY3JldHM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL29yZ2FuaXphdGlvbi1zZWNyZXRzXCJcbiAgICBdLFxuICAgIGxpc3RSZXBvT3JnYW5pemF0aW9uVmFyaWFibGVzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9vcmdhbml6YXRpb24tdmFyaWFibGVzXCJcbiAgICBdLFxuICAgIGxpc3RSZXBvU2VjcmV0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3NlY3JldHNcIl0sXG4gICAgbGlzdFJlcG9WYXJpYWJsZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy92YXJpYWJsZXNcIl0sXG4gICAgbGlzdFJlcG9Xb3JrZmxvd3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3NcIl0sXG4gICAgbGlzdFJ1bm5lckFwcGxpY2F0aW9uc0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy9kb3dubG9hZHNcIl0sXG4gICAgbGlzdFJ1bm5lckFwcGxpY2F0aW9uc0ZvclJlcG86IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMvZG93bmxvYWRzXCJcbiAgICBdLFxuICAgIGxpc3RTZWxlY3RlZFJlcG9zRm9yT3JnU2VjcmV0OiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIlxuICAgIF0sXG4gICAgbGlzdFNlbGVjdGVkUmVwb3NGb3JPcmdWYXJpYWJsZTogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9L3JlcG9zaXRvcmllc1wiXG4gICAgXSxcbiAgICBsaXN0U2VsZWN0ZWRSZXBvc2l0b3JpZXNFbmFibGVkR2l0aHViQWN0aW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9yZXBvc2l0b3JpZXNcIlxuICAgIF0sXG4gICAgbGlzdFNlbGZIb3N0ZWRSdW5uZXJzRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzXCJdLFxuICAgIGxpc3RTZWxmSG9zdGVkUnVubmVyc0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzXCJdLFxuICAgIGxpc3RXb3JrZmxvd1J1bkFydGlmYWN0czogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hcnRpZmFjdHNcIlxuICAgIF0sXG4gICAgbGlzdFdvcmtmbG93UnVuczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvd29ya2Zsb3dzL3t3b3JrZmxvd19pZH0vcnVuc1wiXG4gICAgXSxcbiAgICBsaXN0V29ya2Zsb3dSdW5zRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnNcIl0sXG4gICAgcmVSdW5Kb2JGb3JXb3JrZmxvd1J1bjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2pvYnMve2pvYl9pZH0vcmVydW5cIlxuICAgIF0sXG4gICAgcmVSdW5Xb3JrZmxvdzogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L3JlcnVuXCJdLFxuICAgIHJlUnVuV29ya2Zsb3dGYWlsZWRKb2JzOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9yZXJ1bi1mYWlsZWQtam9ic1wiXG4gICAgXSxcbiAgICByZW1vdmVBbGxDdXN0b21MYWJlbHNGcm9tU2VsZkhvc3RlZFJ1bm5lckZvck9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVsc1wiXG4gICAgXSxcbiAgICByZW1vdmVBbGxDdXN0b21MYWJlbHNGcm9tU2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCJcbiAgICBdLFxuICAgIHJlbW92ZUN1c3RvbUxhYmVsRnJvbVNlbGZIb3N0ZWRSdW5uZXJGb3JPcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHMve25hbWV9XCJcbiAgICBdLFxuICAgIHJlbW92ZUN1c3RvbUxhYmVsRnJvbVNlbGZIb3N0ZWRSdW5uZXJGb3JSZXBvOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVscy97bmFtZX1cIlxuICAgIF0sXG4gICAgcmVtb3ZlU2VsZWN0ZWRSZXBvRnJvbU9yZ1NlY3JldDogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiXG4gICAgXSxcbiAgICByZW1vdmVTZWxlY3RlZFJlcG9Gcm9tT3JnVmFyaWFibGU6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L2FjdGlvbnMvdmFyaWFibGVzL3tuYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCJcbiAgICBdLFxuICAgIHJldmlld0N1c3RvbUdhdGVzRm9yUnVuOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9kZXBsb3ltZW50X3Byb3RlY3Rpb25fcnVsZVwiXG4gICAgXSxcbiAgICByZXZpZXdQZW5kaW5nRGVwbG95bWVudHNGb3JSdW46IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L3BlbmRpbmdfZGVwbG95bWVudHNcIlxuICAgIF0sXG4gICAgc2V0QWxsb3dlZEFjdGlvbnNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvc2VsZWN0ZWQtYWN0aW9uc1wiXG4gICAgXSxcbiAgICBzZXRBbGxvd2VkQWN0aW9uc1JlcG9zaXRvcnk6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zL3NlbGVjdGVkLWFjdGlvbnNcIlxuICAgIF0sXG4gICAgc2V0Q3VzdG9tTGFiZWxzRm9yU2VsZkhvc3RlZFJ1bm5lckZvck9yZzogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVsc1wiXG4gICAgXSxcbiAgICBzZXRDdXN0b21MYWJlbHNGb3JTZWxmSG9zdGVkUnVubmVyRm9yUmVwbzogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIlxuICAgIF0sXG4gICAgc2V0Q3VzdG9tT2lkY1N1YkNsYWltRm9yUmVwbzogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvb2lkYy9jdXN0b21pemF0aW9uL3N1YlwiXG4gICAgXSxcbiAgICBzZXRHaXRodWJBY3Rpb25zRGVmYXVsdFdvcmtmbG93UGVybWlzc2lvbnNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvd29ya2Zsb3dcIlxuICAgIF0sXG4gICAgc2V0R2l0aHViQWN0aW9uc0RlZmF1bHRXb3JrZmxvd1Blcm1pc3Npb25zUmVwb3NpdG9yeTogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnMvd29ya2Zsb3dcIlxuICAgIF0sXG4gICAgc2V0R2l0aHViQWN0aW9uc1Blcm1pc3Npb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zXCJcbiAgICBdLFxuICAgIHNldEdpdGh1YkFjdGlvbnNQZXJtaXNzaW9uc1JlcG9zaXRvcnk6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zXCJcbiAgICBdLFxuICAgIHNldFNlbGVjdGVkUmVwb3NGb3JPcmdTZWNyZXQ6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiXG4gICAgXSxcbiAgICBzZXRTZWxlY3RlZFJlcG9zRm9yT3JnVmFyaWFibGU6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvdmFyaWFibGVzL3tuYW1lfS9yZXBvc2l0b3JpZXNcIlxuICAgIF0sXG4gICAgc2V0U2VsZWN0ZWRSZXBvc2l0b3JpZXNFbmFibGVkR2l0aHViQWN0aW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9yZXBvc2l0b3JpZXNcIlxuICAgIF0sXG4gICAgc2V0V29ya2Zsb3dBY2Nlc3NUb1JlcG9zaXRvcnk6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zL2FjY2Vzc1wiXG4gICAgXSxcbiAgICB1cGRhdGVFbnZpcm9ubWVudFZhcmlhYmxlOiBbXG4gICAgICBcIlBBVENIIC9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vdmFyaWFibGVzL3tuYW1lfVwiXG4gICAgXSxcbiAgICB1cGRhdGVPcmdWYXJpYWJsZTogW1wiUEFUQ0ggL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCJdLFxuICAgIHVwZGF0ZVJlcG9WYXJpYWJsZTogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCJcbiAgICBdXG4gIH0sXG4gIGFjdGl2aXR5OiB7XG4gICAgY2hlY2tSZXBvSXNTdGFycmVkQnlBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3N0YXJyZWQve293bmVyfS97cmVwb31cIl0sXG4gICAgZGVsZXRlUmVwb1N1YnNjcmlwdGlvbjogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdWJzY3JpcHRpb25cIl0sXG4gICAgZGVsZXRlVGhyZWFkU3Vic2NyaXB0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9L3N1YnNjcmlwdGlvblwiXG4gICAgXSxcbiAgICBnZXRGZWVkczogW1wiR0VUIC9mZWVkc1wiXSxcbiAgICBnZXRSZXBvU3Vic2NyaXB0aW9uOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmlwdGlvblwiXSxcbiAgICBnZXRUaHJlYWQ6IFtcIkdFVCAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9XCJdLFxuICAgIGdldFRocmVhZFN1YnNjcmlwdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9L3N1YnNjcmlwdGlvblwiXG4gICAgXSxcbiAgICBsaXN0RXZlbnRzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ldmVudHNcIl0sXG4gICAgbGlzdE5vdGlmaWNhdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC9ub3RpZmljYXRpb25zXCJdLFxuICAgIGxpc3RPcmdFdmVudHNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzL29yZ3Mve29yZ31cIlxuICAgIF0sXG4gICAgbGlzdFB1YmxpY0V2ZW50czogW1wiR0VUIC9ldmVudHNcIl0sXG4gICAgbGlzdFB1YmxpY0V2ZW50c0ZvclJlcG9OZXR3b3JrOiBbXCJHRVQgL25ldHdvcmtzL3tvd25lcn0ve3JlcG99L2V2ZW50c1wiXSxcbiAgICBsaXN0UHVibGljRXZlbnRzRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2V2ZW50cy9wdWJsaWNcIl0sXG4gICAgbGlzdFB1YmxpY09yZ0V2ZW50czogW1wiR0VUIC9vcmdzL3tvcmd9L2V2ZW50c1wiXSxcbiAgICBsaXN0UmVjZWl2ZWRFdmVudHNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcmVjZWl2ZWRfZXZlbnRzXCJdLFxuICAgIGxpc3RSZWNlaXZlZFB1YmxpY0V2ZW50c0ZvclVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3JlY2VpdmVkX2V2ZW50cy9wdWJsaWNcIlxuICAgIF0sXG4gICAgbGlzdFJlcG9FdmVudHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZXZlbnRzXCJdLFxuICAgIGxpc3RSZXBvTm90aWZpY2F0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbm90aWZpY2F0aW9uc1wiXG4gICAgXSxcbiAgICBsaXN0UmVwb3NTdGFycmVkQnlBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3N0YXJyZWRcIl0sXG4gICAgbGlzdFJlcG9zU3RhcnJlZEJ5VXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3N0YXJyZWRcIl0sXG4gICAgbGlzdFJlcG9zV2F0Y2hlZEJ5VXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3N1YnNjcmlwdGlvbnNcIl0sXG4gICAgbGlzdFN0YXJnYXplcnNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXJnYXplcnNcIl0sXG4gICAgbGlzdFdhdGNoZWRSZXBvc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvc3Vic2NyaXB0aW9uc1wiXSxcbiAgICBsaXN0V2F0Y2hlcnNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmliZXJzXCJdLFxuICAgIG1hcmtOb3RpZmljYXRpb25zQXNSZWFkOiBbXCJQVVQgL25vdGlmaWNhdGlvbnNcIl0sXG4gICAgbWFya1JlcG9Ob3RpZmljYXRpb25zQXNSZWFkOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L25vdGlmaWNhdGlvbnNcIl0sXG4gICAgbWFya1RocmVhZEFzRG9uZTogW1wiREVMRVRFIC9ub3RpZmljYXRpb25zL3RocmVhZHMve3RocmVhZF9pZH1cIl0sXG4gICAgbWFya1RocmVhZEFzUmVhZDogW1wiUEFUQ0ggL25vdGlmaWNhdGlvbnMvdGhyZWFkcy97dGhyZWFkX2lkfVwiXSxcbiAgICBzZXRSZXBvU3Vic2NyaXB0aW9uOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmlwdGlvblwiXSxcbiAgICBzZXRUaHJlYWRTdWJzY3JpcHRpb246IFtcbiAgICAgIFwiUFVUIC9ub3RpZmljYXRpb25zL3RocmVhZHMve3RocmVhZF9pZH0vc3Vic2NyaXB0aW9uXCJcbiAgICBdLFxuICAgIHN0YXJSZXBvRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBVVCAvdXNlci9zdGFycmVkL3tvd25lcn0ve3JlcG99XCJdLFxuICAgIHVuc3RhclJlcG9Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiREVMRVRFIC91c2VyL3N0YXJyZWQve293bmVyfS97cmVwb31cIl1cbiAgfSxcbiAgYXBwczoge1xuICAgIGFkZFJlcG9Ub0luc3RhbGxhdGlvbjogW1xuICAgICAgXCJQVVQgL3VzZXIvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiYXBwc1wiLCBcImFkZFJlcG9Ub0luc3RhbGxhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIGFkZFJlcG9Ub0luc3RhbGxhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBVVCAvdXNlci9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIlxuICAgIF0sXG4gICAgY2hlY2tUb2tlbjogW1wiUE9TVCAvYXBwbGljYXRpb25zL3tjbGllbnRfaWR9L3Rva2VuXCJdLFxuICAgIGNyZWF0ZUZyb21NYW5pZmVzdDogW1wiUE9TVCAvYXBwLW1hbmlmZXN0cy97Y29kZX0vY29udmVyc2lvbnNcIl0sXG4gICAgY3JlYXRlSW5zdGFsbGF0aW9uQWNjZXNzVG9rZW46IFtcbiAgICAgIFwiUE9TVCAvYXBwL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vYWNjZXNzX3Rva2Vuc1wiXG4gICAgXSxcbiAgICBkZWxldGVBdXRob3JpemF0aW9uOiBbXCJERUxFVEUgL2FwcGxpY2F0aW9ucy97Y2xpZW50X2lkfS9ncmFudFwiXSxcbiAgICBkZWxldGVJbnN0YWxsYXRpb246IFtcIkRFTEVURSAvYXBwL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH1cIl0sXG4gICAgZGVsZXRlVG9rZW46IFtcIkRFTEVURSAvYXBwbGljYXRpb25zL3tjbGllbnRfaWR9L3Rva2VuXCJdLFxuICAgIGdldEF1dGhlbnRpY2F0ZWQ6IFtcIkdFVCAvYXBwXCJdLFxuICAgIGdldEJ5U2x1ZzogW1wiR0VUIC9hcHBzL3thcHBfc2x1Z31cIl0sXG4gICAgZ2V0SW5zdGFsbGF0aW9uOiBbXCJHRVQgL2FwcC9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9XCJdLFxuICAgIGdldE9yZ0luc3RhbGxhdGlvbjogW1wiR0VUIC9vcmdzL3tvcmd9L2luc3RhbGxhdGlvblwiXSxcbiAgICBnZXRSZXBvSW5zdGFsbGF0aW9uOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2luc3RhbGxhdGlvblwiXSxcbiAgICBnZXRTdWJzY3JpcHRpb25QbGFuRm9yQWNjb3VudDogW1xuICAgICAgXCJHRVQgL21hcmtldHBsYWNlX2xpc3RpbmcvYWNjb3VudHMve2FjY291bnRfaWR9XCJcbiAgICBdLFxuICAgIGdldFN1YnNjcmlwdGlvblBsYW5Gb3JBY2NvdW50U3R1YmJlZDogW1xuICAgICAgXCJHRVQgL21hcmtldHBsYWNlX2xpc3Rpbmcvc3R1YmJlZC9hY2NvdW50cy97YWNjb3VudF9pZH1cIlxuICAgIF0sXG4gICAgZ2V0VXNlckluc3RhbGxhdGlvbjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2luc3RhbGxhdGlvblwiXSxcbiAgICBnZXRXZWJob29rQ29uZmlnRm9yQXBwOiBbXCJHRVQgL2FwcC9ob29rL2NvbmZpZ1wiXSxcbiAgICBnZXRXZWJob29rRGVsaXZlcnk6IFtcIkdFVCAvYXBwL2hvb2svZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9XCJdLFxuICAgIGxpc3RBY2NvdW50c0ZvclBsYW46IFtcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9wbGFucy97cGxhbl9pZH0vYWNjb3VudHNcIl0sXG4gICAgbGlzdEFjY291bnRzRm9yUGxhblN0dWJiZWQ6IFtcbiAgICAgIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3N0dWJiZWQvcGxhbnMve3BsYW5faWR9L2FjY291bnRzXCJcbiAgICBdLFxuICAgIGxpc3RJbnN0YWxsYXRpb25SZXBvc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3JlcG9zaXRvcmllc1wiXG4gICAgXSxcbiAgICBsaXN0SW5zdGFsbGF0aW9uUmVxdWVzdHNGb3JBdXRoZW50aWNhdGVkQXBwOiBbXG4gICAgICBcIkdFVCAvYXBwL2luc3RhbGxhdGlvbi1yZXF1ZXN0c1wiXG4gICAgXSxcbiAgICBsaXN0SW5zdGFsbGF0aW9uczogW1wiR0VUIC9hcHAvaW5zdGFsbGF0aW9uc1wiXSxcbiAgICBsaXN0SW5zdGFsbGF0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvaW5zdGFsbGF0aW9uc1wiXSxcbiAgICBsaXN0UGxhbnM6IFtcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9wbGFuc1wiXSxcbiAgICBsaXN0UGxhbnNTdHViYmVkOiBbXCJHRVQgL21hcmtldHBsYWNlX2xpc3Rpbmcvc3R1YmJlZC9wbGFuc1wiXSxcbiAgICBsaXN0UmVwb3NBY2Nlc3NpYmxlVG9JbnN0YWxsYXRpb246IFtcIkdFVCAvaW5zdGFsbGF0aW9uL3JlcG9zaXRvcmllc1wiXSxcbiAgICBsaXN0U3Vic2NyaXB0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvbWFya2V0cGxhY2VfcHVyY2hhc2VzXCJdLFxuICAgIGxpc3RTdWJzY3JpcHRpb25zRm9yQXV0aGVudGljYXRlZFVzZXJTdHViYmVkOiBbXG4gICAgICBcIkdFVCAvdXNlci9tYXJrZXRwbGFjZV9wdXJjaGFzZXMvc3R1YmJlZFwiXG4gICAgXSxcbiAgICBsaXN0V2ViaG9va0RlbGl2ZXJpZXM6IFtcIkdFVCAvYXBwL2hvb2svZGVsaXZlcmllc1wiXSxcbiAgICByZWRlbGl2ZXJXZWJob29rRGVsaXZlcnk6IFtcbiAgICAgIFwiUE9TVCAvYXBwL2hvb2svZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9L2F0dGVtcHRzXCJcbiAgICBdLFxuICAgIHJlbW92ZVJlcG9Gcm9tSW5zdGFsbGF0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJhcHBzXCIsIFwicmVtb3ZlUmVwb0Zyb21JbnN0YWxsYXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICByZW1vdmVSZXBvRnJvbUluc3RhbGxhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIlxuICAgIF0sXG4gICAgcmVzZXRUb2tlbjogW1wiUEFUQ0ggL2FwcGxpY2F0aW9ucy97Y2xpZW50X2lkfS90b2tlblwiXSxcbiAgICByZXZva2VJbnN0YWxsYXRpb25BY2Nlc3NUb2tlbjogW1wiREVMRVRFIC9pbnN0YWxsYXRpb24vdG9rZW5cIl0sXG4gICAgc2NvcGVUb2tlbjogW1wiUE9TVCAvYXBwbGljYXRpb25zL3tjbGllbnRfaWR9L3Rva2VuL3Njb3BlZFwiXSxcbiAgICBzdXNwZW5kSW5zdGFsbGF0aW9uOiBbXCJQVVQgL2FwcC9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3N1c3BlbmRlZFwiXSxcbiAgICB1bnN1c3BlbmRJbnN0YWxsYXRpb246IFtcbiAgICAgIFwiREVMRVRFIC9hcHAvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9zdXNwZW5kZWRcIlxuICAgIF0sXG4gICAgdXBkYXRlV2ViaG9va0NvbmZpZ0ZvckFwcDogW1wiUEFUQ0ggL2FwcC9ob29rL2NvbmZpZ1wiXVxuICB9LFxuICBiaWxsaW5nOiB7XG4gICAgZ2V0R2l0aHViQWN0aW9uc0JpbGxpbmdPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9zZXR0aW5ncy9iaWxsaW5nL2FjdGlvbnNcIl0sXG4gICAgZ2V0R2l0aHViQWN0aW9uc0JpbGxpbmdVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zZXR0aW5ncy9iaWxsaW5nL2FjdGlvbnNcIlxuICAgIF0sXG4gICAgZ2V0R2l0aHViUGFja2FnZXNCaWxsaW5nT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vc2V0dGluZ3MvYmlsbGluZy9wYWNrYWdlc1wiXSxcbiAgICBnZXRHaXRodWJQYWNrYWdlc0JpbGxpbmdVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zZXR0aW5ncy9iaWxsaW5nL3BhY2thZ2VzXCJcbiAgICBdLFxuICAgIGdldFNoYXJlZFN0b3JhZ2VCaWxsaW5nT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9zZXR0aW5ncy9iaWxsaW5nL3NoYXJlZC1zdG9yYWdlXCJcbiAgICBdLFxuICAgIGdldFNoYXJlZFN0b3JhZ2VCaWxsaW5nVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc2V0dGluZ3MvYmlsbGluZy9zaGFyZWQtc3RvcmFnZVwiXG4gICAgXVxuICB9LFxuICBjaGVja3M6IHtcbiAgICBjcmVhdGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXJ1bnNcIl0sXG4gICAgY3JlYXRlU3VpdGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXN1aXRlc1wiXSxcbiAgICBnZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stcnVucy97Y2hlY2tfcnVuX2lkfVwiXSxcbiAgICBnZXRTdWl0ZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1zdWl0ZXMve2NoZWNrX3N1aXRlX2lkfVwiXSxcbiAgICBsaXN0QW5ub3RhdGlvbnM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1ydW5zL3tjaGVja19ydW5faWR9L2Fubm90YXRpb25zXCJcbiAgICBdLFxuICAgIGxpc3RGb3JSZWY6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfS9jaGVjay1ydW5zXCJdLFxuICAgIGxpc3RGb3JTdWl0ZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXN1aXRlcy97Y2hlY2tfc3VpdGVfaWR9L2NoZWNrLXJ1bnNcIlxuICAgIF0sXG4gICAgbGlzdFN1aXRlc0ZvclJlZjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L2NoZWNrLXN1aXRlc1wiXSxcbiAgICByZXJlcXVlc3RSdW46IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stcnVucy97Y2hlY2tfcnVuX2lkfS9yZXJlcXVlc3RcIlxuICAgIF0sXG4gICAgcmVyZXF1ZXN0U3VpdGU6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stc3VpdGVzL3tjaGVja19zdWl0ZV9pZH0vcmVyZXF1ZXN0XCJcbiAgICBdLFxuICAgIHNldFN1aXRlc1ByZWZlcmVuY2VzOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1zdWl0ZXMvcHJlZmVyZW5jZXNcIlxuICAgIF0sXG4gICAgdXBkYXRlOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stcnVucy97Y2hlY2tfcnVuX2lkfVwiXVxuICB9LFxuICBjb2RlU2Nhbm5pbmc6IHtcbiAgICBkZWxldGVBbmFseXNpczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYW5hbHlzZXMve2FuYWx5c2lzX2lkfXs/Y29uZmlybV9kZWxldGV9XCJcbiAgICBdLFxuICAgIGdldEFsZXJ0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkUGFyYW1ldGVyczogeyBhbGVydF9pZDogXCJhbGVydF9udW1iZXJcIiB9IH1cbiAgICBdLFxuICAgIGdldEFuYWx5c2lzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbmFseXNlcy97YW5hbHlzaXNfaWR9XCJcbiAgICBdLFxuICAgIGdldENvZGVxbERhdGFiYXNlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9jb2RlcWwvZGF0YWJhc2VzL3tsYW5ndWFnZX1cIlxuICAgIF0sXG4gICAgZ2V0RGVmYXVsdFNldHVwOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvZGVmYXVsdC1zZXR1cFwiXSxcbiAgICBnZXRTYXJpZjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL3Nhcmlmcy97c2FyaWZfaWR9XCJdLFxuICAgIGxpc3RBbGVydEluc3RhbmNlczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9L2luc3RhbmNlc1wiXG4gICAgXSxcbiAgICBsaXN0QWxlcnRzRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vY29kZS1zY2FubmluZy9hbGVydHNcIl0sXG4gICAgbGlzdEFsZXJ0c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHNcIl0sXG4gICAgbGlzdEFsZXJ0c0luc3RhbmNlczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9L2luc3RhbmNlc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcImNvZGVTY2FubmluZ1wiLCBcImxpc3RBbGVydEluc3RhbmNlc1wiXSB9XG4gICAgXSxcbiAgICBsaXN0Q29kZXFsRGF0YWJhc2VzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9jb2RlcWwvZGF0YWJhc2VzXCJcbiAgICBdLFxuICAgIGxpc3RSZWNlbnRBbmFseXNlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FuYWx5c2VzXCJdLFxuICAgIHVwZGF0ZUFsZXJ0OiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfVwiXG4gICAgXSxcbiAgICB1cGRhdGVEZWZhdWx0U2V0dXA6IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvZGVmYXVsdC1zZXR1cFwiXG4gICAgXSxcbiAgICB1cGxvYWRTYXJpZjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9zYXJpZnNcIl1cbiAgfSxcbiAgY29kZXNPZkNvbmR1Y3Q6IHtcbiAgICBnZXRBbGxDb2Rlc09mQ29uZHVjdDogW1wiR0VUIC9jb2Rlc19vZl9jb25kdWN0XCJdLFxuICAgIGdldENvbmR1Y3RDb2RlOiBbXCJHRVQgL2NvZGVzX29mX2NvbmR1Y3Qve2tleX1cIl1cbiAgfSxcbiAgY29kZXNwYWNlczoge1xuICAgIGFkZFJlcG9zaXRvcnlGb3JTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQVVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiXG4gICAgXSxcbiAgICBhZGRTZWxlY3RlZFJlcG9Ub09yZ1NlY3JldDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiXG4gICAgXSxcbiAgICBjaGVja1Blcm1pc3Npb25zRm9yRGV2Y29udGFpbmVyOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9wZXJtaXNzaW9uc19jaGVja1wiXG4gICAgXSxcbiAgICBjb2Rlc3BhY2VNYWNoaW5lc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vbWFjaGluZXNcIlxuICAgIF0sXG4gICAgY3JlYXRlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvY29kZXNwYWNlc1wiXSxcbiAgICBjcmVhdGVPclVwZGF0ZU9yZ1NlY3JldDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIlxuICAgIF0sXG4gICAgY3JlYXRlT3JVcGRhdGVSZXBvU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIlxuICAgIF0sXG4gICAgY3JlYXRlT3JVcGRhdGVTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQVVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIlxuICAgIF0sXG4gICAgY3JlYXRlV2l0aFByRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb2Rlc3BhY2VzXCJcbiAgICBdLFxuICAgIGNyZWF0ZVdpdGhSZXBvRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlc1wiXG4gICAgXSxcbiAgICBkZWxldGVGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiREVMRVRFIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfVwiXSxcbiAgICBkZWxldGVGcm9tT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9tZW1iZXJzL3t1c2VybmFtZX0vY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9XCJcbiAgICBdLFxuICAgIGRlbGV0ZU9yZ1NlY3JldDogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGRlbGV0ZVJlcG9TZWNyZXQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXG4gICAgXSxcbiAgICBkZWxldGVTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIlxuICAgIF0sXG4gICAgZXhwb3J0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUE9TVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vZXhwb3J0c1wiXG4gICAgXSxcbiAgICBnZXRDb2Rlc3BhY2VzRm9yVXNlckluT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9tZW1iZXJzL3t1c2VybmFtZX0vY29kZXNwYWNlc1wiXG4gICAgXSxcbiAgICBnZXRFeHBvcnREZXRhaWxzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfS9leHBvcnRzL3tleHBvcnRfaWR9XCJcbiAgICBdLFxuICAgIGdldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9XCJdLFxuICAgIGdldE9yZ1B1YmxpY0tleTogW1wiR0VUIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0cy9wdWJsaWMta2V5XCJdLFxuICAgIGdldE9yZ1NlY3JldDogW1wiR0VUIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGdldFB1YmxpY0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMvcHVibGljLWtleVwiXG4gICAgXSxcbiAgICBnZXRSZXBvUHVibGljS2V5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9zZWNyZXRzL3B1YmxpYy1rZXlcIlxuICAgIF0sXG4gICAgZ2V0UmVwb1NlY3JldDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJcbiAgICBdLFxuICAgIGdldFNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXG4gICAgXSxcbiAgICBsaXN0RGV2Y29udGFpbmVyc0luUmVwb3NpdG9yeUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9kZXZjb250YWluZXJzXCJcbiAgICBdLFxuICAgIGxpc3RGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2NvZGVzcGFjZXNcIl0sXG4gICAgbGlzdEluT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZFBhcmFtZXRlcnM6IHsgb3JnX2lkOiBcIm9yZ1wiIH0gfVxuICAgIF0sXG4gICAgbGlzdEluUmVwb3NpdG9yeUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlc1wiXG4gICAgXSxcbiAgICBsaXN0T3JnU2VjcmV0czogW1wiR0VUIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0c1wiXSxcbiAgICBsaXN0UmVwb1NlY3JldHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9zZWNyZXRzXCJdLFxuICAgIGxpc3RSZXBvc2l0b3JpZXNGb3JTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCJcbiAgICBdLFxuICAgIGxpc3RTZWNyZXRzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHNcIl0sXG4gICAgbGlzdFNlbGVjdGVkUmVwb3NGb3JPcmdTZWNyZXQ6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiXG4gICAgXSxcbiAgICBwcmVGbGlnaHRXaXRoUmVwb0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9uZXdcIlxuICAgIF0sXG4gICAgcHVibGlzaEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBPU1QgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9L3B1Ymxpc2hcIlxuICAgIF0sXG4gICAgcmVtb3ZlUmVwb3NpdG9yeUZvclNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCJcbiAgICBdLFxuICAgIHJlbW92ZVNlbGVjdGVkUmVwb0Zyb21PcmdTZWNyZXQ6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIlxuICAgIF0sXG4gICAgcmVwb01hY2hpbmVzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL21hY2hpbmVzXCJcbiAgICBdLFxuICAgIHNldFJlcG9zaXRvcmllc0ZvclNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBVVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIlxuICAgIF0sXG4gICAgc2V0U2VsZWN0ZWRSZXBvc0Zvck9yZ1NlY3JldDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCJcbiAgICBdLFxuICAgIHN0YXJ0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9L3N0YXJ0XCJdLFxuICAgIHN0b3BGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vc3RvcFwiXSxcbiAgICBzdG9wSW5Pcmdhbml6YXRpb246IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9tZW1iZXJzL3t1c2VybmFtZX0vY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9L3N0b3BcIlxuICAgIF0sXG4gICAgdXBkYXRlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBBVENIIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfVwiXVxuICB9LFxuICBjb3BpbG90OiB7XG4gICAgYWRkQ29waWxvdFNlYXRzRm9yVGVhbXM6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmcvc2VsZWN0ZWRfdGVhbXNcIlxuICAgIF0sXG4gICAgYWRkQ29waWxvdFNlYXRzRm9yVXNlcnM6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmcvc2VsZWN0ZWRfdXNlcnNcIlxuICAgIF0sXG4gICAgY2FuY2VsQ29waWxvdFNlYXRBc3NpZ25tZW50Rm9yVGVhbXM6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L2NvcGlsb3QvYmlsbGluZy9zZWxlY3RlZF90ZWFtc1wiXG4gICAgXSxcbiAgICBjYW5jZWxDb3BpbG90U2VhdEFzc2lnbm1lbnRGb3JVc2VyczogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vY29waWxvdC9iaWxsaW5nL3NlbGVjdGVkX3VzZXJzXCJcbiAgICBdLFxuICAgIGdldENvcGlsb3RPcmdhbml6YXRpb25EZXRhaWxzOiBbXCJHRVQgL29yZ3Mve29yZ30vY29waWxvdC9iaWxsaW5nXCJdLFxuICAgIGdldENvcGlsb3RTZWF0RGV0YWlsc0ZvclVzZXI6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfS9jb3BpbG90XCJcbiAgICBdLFxuICAgIGxpc3RDb3BpbG90U2VhdHM6IFtcIkdFVCAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmcvc2VhdHNcIl1cbiAgfSxcbiAgZGVwZW5kYWJvdDoge1xuICAgIGFkZFNlbGVjdGVkUmVwb1RvT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCJcbiAgICBdLFxuICAgIGNyZWF0ZU9yVXBkYXRlT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfVwiXG4gICAgXSxcbiAgICBjcmVhdGVPclVwZGF0ZVJlcG9TZWNyZXQ6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfVwiXG4gICAgXSxcbiAgICBkZWxldGVPcmdTZWNyZXQ6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBkZWxldGVSZXBvU2VjcmV0OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIlxuICAgIF0sXG4gICAgZ2V0QWxlcnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9hbGVydHMve2FsZXJ0X251bWJlcn1cIl0sXG4gICAgZ2V0T3JnUHVibGljS2V5OiBbXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3B1YmxpYy1rZXlcIl0sXG4gICAgZ2V0T3JnU2VjcmV0OiBbXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZ2V0UmVwb1B1YmxpY0tleTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3Qvc2VjcmV0cy9wdWJsaWMta2V5XCJcbiAgICBdLFxuICAgIGdldFJlcG9TZWNyZXQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfVwiXG4gICAgXSxcbiAgICBsaXN0QWxlcnRzRm9yRW50ZXJwcmlzZTogW1xuICAgICAgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9kZXBlbmRhYm90L2FsZXJ0c1wiXG4gICAgXSxcbiAgICBsaXN0QWxlcnRzRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9hbGVydHNcIl0sXG4gICAgbGlzdEFsZXJ0c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9hbGVydHNcIl0sXG4gICAgbGlzdE9yZ1NlY3JldHM6IFtcIkdFVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHNcIl0sXG4gICAgbGlzdFJlcG9TZWNyZXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3Qvc2VjcmV0c1wiXSxcbiAgICBsaXN0U2VsZWN0ZWRSZXBvc0Zvck9yZ1NlY3JldDogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCJcbiAgICBdLFxuICAgIHJlbW92ZVNlbGVjdGVkUmVwb0Zyb21PcmdTZWNyZXQ6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIlxuICAgIF0sXG4gICAgc2V0U2VsZWN0ZWRSZXBvc0Zvck9yZ1NlY3JldDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCJcbiAgICBdLFxuICAgIHVwZGF0ZUFsZXJ0OiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L2FsZXJ0cy97YWxlcnRfbnVtYmVyfVwiXG4gICAgXVxuICB9LFxuICBkZXBlbmRlbmN5R3JhcGg6IHtcbiAgICBjcmVhdGVSZXBvc2l0b3J5U25hcHNob3Q6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kZW5jeS1ncmFwaC9zbmFwc2hvdHNcIlxuICAgIF0sXG4gICAgZGlmZlJhbmdlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kZW5jeS1ncmFwaC9jb21wYXJlL3tiYXNlaGVhZH1cIlxuICAgIF0sXG4gICAgZXhwb3J0U2JvbTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRlbmN5LWdyYXBoL3Nib21cIl1cbiAgfSxcbiAgZW1vamlzOiB7IGdldDogW1wiR0VUIC9lbW9qaXNcIl0gfSxcbiAgZ2lzdHM6IHtcbiAgICBjaGVja0lzU3RhcnJlZDogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH0vc3RhclwiXSxcbiAgICBjcmVhdGU6IFtcIlBPU1QgL2dpc3RzXCJdLFxuICAgIGNyZWF0ZUNvbW1lbnQ6IFtcIlBPU1QgL2dpc3RzL3tnaXN0X2lkfS9jb21tZW50c1wiXSxcbiAgICBkZWxldGU6IFtcIkRFTEVURSAvZ2lzdHMve2dpc3RfaWR9XCJdLFxuICAgIGRlbGV0ZUNvbW1lbnQ6IFtcIkRFTEVURSAvZ2lzdHMve2dpc3RfaWR9L2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBmb3JrOiBbXCJQT1NUIC9naXN0cy97Z2lzdF9pZH0vZm9ya3NcIl0sXG4gICAgZ2V0OiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfVwiXSxcbiAgICBnZXRDb21tZW50OiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfS9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgZ2V0UmV2aXNpb246IFtcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L3tzaGF9XCJdLFxuICAgIGxpc3Q6IFtcIkdFVCAvZ2lzdHNcIl0sXG4gICAgbGlzdENvbW1lbnRzOiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfS9jb21tZW50c1wiXSxcbiAgICBsaXN0Q29tbWl0czogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH0vY29tbWl0c1wiXSxcbiAgICBsaXN0Rm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2dpc3RzXCJdLFxuICAgIGxpc3RGb3JrczogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH0vZm9ya3NcIl0sXG4gICAgbGlzdFB1YmxpYzogW1wiR0VUIC9naXN0cy9wdWJsaWNcIl0sXG4gICAgbGlzdFN0YXJyZWQ6IFtcIkdFVCAvZ2lzdHMvc3RhcnJlZFwiXSxcbiAgICBzdGFyOiBbXCJQVVQgL2dpc3RzL3tnaXN0X2lkfS9zdGFyXCJdLFxuICAgIHVuc3RhcjogW1wiREVMRVRFIC9naXN0cy97Z2lzdF9pZH0vc3RhclwiXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9naXN0cy97Z2lzdF9pZH1cIl0sXG4gICAgdXBkYXRlQ29tbWVudDogW1wiUEFUQ0ggL2dpc3RzL3tnaXN0X2lkfS9jb21tZW50cy97Y29tbWVudF9pZH1cIl1cbiAgfSxcbiAgZ2l0OiB7XG4gICAgY3JlYXRlQmxvYjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L2Jsb2JzXCJdLFxuICAgIGNyZWF0ZUNvbW1pdDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L2NvbW1pdHNcIl0sXG4gICAgY3JlYXRlUmVmOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvcmVmc1wiXSxcbiAgICBjcmVhdGVUYWc6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC90YWdzXCJdLFxuICAgIGNyZWF0ZVRyZWU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC90cmVlc1wiXSxcbiAgICBkZWxldGVSZWY6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3JlZnMve3JlZn1cIl0sXG4gICAgZ2V0QmxvYjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvYmxvYnMve2ZpbGVfc2hhfVwiXSxcbiAgICBnZXRDb21taXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L2NvbW1pdHMve2NvbW1pdF9zaGF9XCJdLFxuICAgIGdldFJlZjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvcmVmL3tyZWZ9XCJdLFxuICAgIGdldFRhZzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvdGFncy97dGFnX3NoYX1cIl0sXG4gICAgZ2V0VHJlZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvdHJlZXMve3RyZWVfc2hhfVwiXSxcbiAgICBsaXN0TWF0Y2hpbmdSZWZzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9tYXRjaGluZy1yZWZzL3tyZWZ9XCJdLFxuICAgIHVwZGF0ZVJlZjogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9yZWZzL3tyZWZ9XCJdXG4gIH0sXG4gIGdpdGlnbm9yZToge1xuICAgIGdldEFsbFRlbXBsYXRlczogW1wiR0VUIC9naXRpZ25vcmUvdGVtcGxhdGVzXCJdLFxuICAgIGdldFRlbXBsYXRlOiBbXCJHRVQgL2dpdGlnbm9yZS90ZW1wbGF0ZXMve25hbWV9XCJdXG4gIH0sXG4gIGludGVyYWN0aW9uczoge1xuICAgIGdldFJlc3RyaWN0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIGdldFJlc3RyaWN0aW9uc0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICBnZXRSZXN0cmljdGlvbnNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICBnZXRSZXN0cmljdGlvbnNGb3JZb3VyUHVibGljUmVwb3M6IFtcbiAgICAgIFwiR0VUIC91c2VyL2ludGVyYWN0aW9uLWxpbWl0c1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcImludGVyYWN0aW9uc1wiLCBcImdldFJlc3RyaWN0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIHJlbW92ZVJlc3RyaWN0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIHJlbW92ZVJlc3RyaWN0aW9uc0Zvck9yZzogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICByZW1vdmVSZXN0cmljdGlvbnNGb3JSZXBvOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaW50ZXJhY3Rpb24tbGltaXRzXCJcbiAgICBdLFxuICAgIHJlbW92ZVJlc3RyaWN0aW9uc0ZvcllvdXJQdWJsaWNSZXBvczogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvaW50ZXJhY3Rpb24tbGltaXRzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiaW50ZXJhY3Rpb25zXCIsIFwicmVtb3ZlUmVzdHJpY3Rpb25zRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfVxuICAgIF0sXG4gICAgc2V0UmVzdHJpY3Rpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBVVCAvdXNlci9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgc2V0UmVzdHJpY3Rpb25zRm9yT3JnOiBbXCJQVVQgL29yZ3Mve29yZ30vaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIHNldFJlc3RyaWN0aW9uc0ZvclJlcG86IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIHNldFJlc3RyaWN0aW9uc0ZvcllvdXJQdWJsaWNSZXBvczogW1xuICAgICAgXCJQVVQgL3VzZXIvaW50ZXJhY3Rpb24tbGltaXRzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiaW50ZXJhY3Rpb25zXCIsIFwic2V0UmVzdHJpY3Rpb25zRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfVxuICAgIF1cbiAgfSxcbiAgaXNzdWVzOiB7XG4gICAgYWRkQXNzaWduZWVzOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9hc3NpZ25lZXNcIlxuICAgIF0sXG4gICAgYWRkTGFiZWxzOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbGFiZWxzXCJdLFxuICAgIGNoZWNrVXNlckNhbkJlQXNzaWduZWQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXNzaWduZWVzL3thc3NpZ25lZX1cIl0sXG4gICAgY2hlY2tVc2VyQ2FuQmVBc3NpZ25lZFRvSXNzdWU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vYXNzaWduZWVzL3thc3NpZ25lZX1cIlxuICAgIF0sXG4gICAgY3JlYXRlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXNcIl0sXG4gICAgY3JlYXRlQ29tbWVudDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vY29tbWVudHNcIlxuICAgIF0sXG4gICAgY3JlYXRlTGFiZWw6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhYmVsc1wiXSxcbiAgICBjcmVhdGVNaWxlc3RvbmU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXNcIl0sXG4gICAgZGVsZXRlQ29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50cy97Y29tbWVudF9pZH1cIlxuICAgIF0sXG4gICAgZGVsZXRlTGFiZWw6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vbGFiZWxzL3tuYW1lfVwiXSxcbiAgICBkZWxldGVNaWxlc3RvbmU6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzL3ttaWxlc3RvbmVfbnVtYmVyfVwiXG4gICAgXSxcbiAgICBnZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9XCJdLFxuICAgIGdldENvbW1lbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBnZXRFdmVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvZXZlbnRzL3tldmVudF9pZH1cIl0sXG4gICAgZ2V0TGFiZWw6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbGFiZWxzL3tuYW1lfVwiXSxcbiAgICBnZXRNaWxlc3RvbmU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lcy97bWlsZXN0b25lX251bWJlcn1cIl0sXG4gICAgbGlzdDogW1wiR0VUIC9pc3N1ZXNcIl0sXG4gICAgbGlzdEFzc2lnbmVlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hc3NpZ25lZXNcIl0sXG4gICAgbGlzdENvbW1lbnRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9jb21tZW50c1wiXSxcbiAgICBsaXN0Q29tbWVudHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50c1wiXSxcbiAgICBsaXN0RXZlbnRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9ldmVudHNcIl0sXG4gICAgbGlzdEV2ZW50c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2V2ZW50c1wiXSxcbiAgICBsaXN0RXZlbnRzRm9yVGltZWxpbmU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vdGltZWxpbmVcIlxuICAgIF0sXG4gICAgbGlzdEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvaXNzdWVzXCJdLFxuICAgIGxpc3RGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9pc3N1ZXNcIl0sXG4gICAgbGlzdEZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzXCJdLFxuICAgIGxpc3RMYWJlbHNGb3JNaWxlc3RvbmU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzL3ttaWxlc3RvbmVfbnVtYmVyfS9sYWJlbHNcIlxuICAgIF0sXG4gICAgbGlzdExhYmVsc0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbGFiZWxzXCJdLFxuICAgIGxpc3RMYWJlbHNPbklzc3VlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xhYmVsc1wiXG4gICAgXSxcbiAgICBsaXN0TWlsZXN0b25lczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzXCJdLFxuICAgIGxvY2s6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xvY2tcIl0sXG4gICAgcmVtb3ZlQWxsTGFiZWxzOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xhYmVsc1wiXG4gICAgXSxcbiAgICByZW1vdmVBc3NpZ25lZXM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vYXNzaWduZWVzXCJcbiAgICBdLFxuICAgIHJlbW92ZUxhYmVsOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xhYmVscy97bmFtZX1cIlxuICAgIF0sXG4gICAgc2V0TGFiZWxzOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sYWJlbHNcIl0sXG4gICAgdW5sb2NrOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sb2NrXCJdLFxuICAgIHVwZGF0ZTogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfVwiXSxcbiAgICB1cGRhdGVDb21tZW50OiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICB1cGRhdGVMYWJlbDogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhYmVscy97bmFtZX1cIl0sXG4gICAgdXBkYXRlTWlsZXN0b25lOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzL3ttaWxlc3RvbmVfbnVtYmVyfVwiXG4gICAgXVxuICB9LFxuICBsaWNlbnNlczoge1xuICAgIGdldDogW1wiR0VUIC9saWNlbnNlcy97bGljZW5zZX1cIl0sXG4gICAgZ2V0QWxsQ29tbW9ubHlVc2VkOiBbXCJHRVQgL2xpY2Vuc2VzXCJdLFxuICAgIGdldEZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbGljZW5zZVwiXVxuICB9LFxuICBtYXJrZG93bjoge1xuICAgIHJlbmRlcjogW1wiUE9TVCAvbWFya2Rvd25cIl0sXG4gICAgcmVuZGVyUmF3OiBbXG4gICAgICBcIlBPU1QgL21hcmtkb3duL3Jhd1wiLFxuICAgICAgeyBoZWFkZXJzOiB7IFwiY29udGVudC10eXBlXCI6IFwidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOFwiIH0gfVxuICAgIF1cbiAgfSxcbiAgbWV0YToge1xuICAgIGdldDogW1wiR0VUIC9tZXRhXCJdLFxuICAgIGdldEFsbFZlcnNpb25zOiBbXCJHRVQgL3ZlcnNpb25zXCJdLFxuICAgIGdldE9jdG9jYXQ6IFtcIkdFVCAvb2N0b2NhdFwiXSxcbiAgICBnZXRaZW46IFtcIkdFVCAvemVuXCJdLFxuICAgIHJvb3Q6IFtcIkdFVCAvXCJdXG4gIH0sXG4gIG1pZ3JhdGlvbnM6IHtcbiAgICBjYW5jZWxJbXBvcnQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbXBvcnRcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOiBcIm9jdG9raXQucmVzdC5taWdyYXRpb25zLmNhbmNlbEltcG9ydCgpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L21pZ3JhdGlvbnMvc291cmNlLWltcG9ydHMjY2FuY2VsLWFuLWltcG9ydFwiXG4gICAgICB9XG4gICAgXSxcbiAgICBkZWxldGVBcmNoaXZlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vYXJjaGl2ZVwiXG4gICAgXSxcbiAgICBkZWxldGVBcmNoaXZlRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L2FyY2hpdmVcIlxuICAgIF0sXG4gICAgZG93bmxvYWRBcmNoaXZlRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L2FyY2hpdmVcIlxuICAgIF0sXG4gICAgZ2V0QXJjaGl2ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L2FyY2hpdmVcIlxuICAgIF0sXG4gICAgZ2V0Q29tbWl0QXV0aG9yczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ltcG9ydC9hdXRob3JzXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDogXCJvY3Rva2l0LnJlc3QubWlncmF0aW9ucy5nZXRDb21taXRBdXRob3JzKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvbWlncmF0aW9ucy9zb3VyY2UtaW1wb3J0cyNnZXQtY29tbWl0LWF1dGhvcnNcIlxuICAgICAgfVxuICAgIF0sXG4gICAgZ2V0SW1wb3J0U3RhdHVzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaW1wb3J0XCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDogXCJvY3Rva2l0LnJlc3QubWlncmF0aW9ucy5nZXRJbXBvcnRTdGF0dXMoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9taWdyYXRpb25zL3NvdXJjZS1pbXBvcnRzI2dldC1hbi1pbXBvcnQtc3RhdHVzXCJcbiAgICAgIH1cbiAgICBdLFxuICAgIGdldExhcmdlRmlsZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbXBvcnQvbGFyZ2VfZmlsZXNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOiBcIm9jdG9raXQucmVzdC5taWdyYXRpb25zLmdldExhcmdlRmlsZXMoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9taWdyYXRpb25zL3NvdXJjZS1pbXBvcnRzI2dldC1sYXJnZS1maWxlc1wiXG4gICAgICB9XG4gICAgXSxcbiAgICBnZXRTdGF0dXNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH1cIl0sXG4gICAgZ2V0U3RhdHVzRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfVwiXSxcbiAgICBsaXN0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9taWdyYXRpb25zXCJdLFxuICAgIGxpc3RGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9taWdyYXRpb25zXCJdLFxuICAgIGxpc3RSZXBvc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiXG4gICAgXSxcbiAgICBsaXN0UmVwb3NGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiXSxcbiAgICBsaXN0UmVwb3NGb3JVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcIm1pZ3JhdGlvbnNcIiwgXCJsaXN0UmVwb3NGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBtYXBDb21taXRBdXRob3I6IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2ltcG9ydC9hdXRob3JzL3thdXRob3JfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDogXCJvY3Rva2l0LnJlc3QubWlncmF0aW9ucy5tYXBDb21taXRBdXRob3IoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9taWdyYXRpb25zL3NvdXJjZS1pbXBvcnRzI21hcC1hLWNvbW1pdC1hdXRob3JcIlxuICAgICAgfVxuICAgIF0sXG4gICAgc2V0TGZzUHJlZmVyZW5jZTogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaW1wb3J0L2xmc1wiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6IFwib2N0b2tpdC5yZXN0Lm1pZ3JhdGlvbnMuc2V0TGZzUHJlZmVyZW5jZSgpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L21pZ3JhdGlvbnMvc291cmNlLWltcG9ydHMjdXBkYXRlLWdpdC1sZnMtcHJlZmVyZW5jZVwiXG4gICAgICB9XG4gICAgXSxcbiAgICBzdGFydEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL21pZ3JhdGlvbnNcIl0sXG4gICAgc3RhcnRGb3JPcmc6IFtcIlBPU1QgL29yZ3Mve29yZ30vbWlncmF0aW9uc1wiXSxcbiAgICBzdGFydEltcG9ydDogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ltcG9ydFwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6IFwib2N0b2tpdC5yZXN0Lm1pZ3JhdGlvbnMuc3RhcnRJbXBvcnQoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9taWdyYXRpb25zL3NvdXJjZS1pbXBvcnRzI3N0YXJ0LWFuLWltcG9ydFwiXG4gICAgICB9XG4gICAgXSxcbiAgICB1bmxvY2tSZXBvRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3Mve3JlcG9fbmFtZX0vbG9ja1wiXG4gICAgXSxcbiAgICB1bmxvY2tSZXBvRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L3JlcG9zL3tyZXBvX25hbWV9L2xvY2tcIlxuICAgIF0sXG4gICAgdXBkYXRlSW1wb3J0OiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbXBvcnRcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOiBcIm9jdG9raXQucmVzdC5taWdyYXRpb25zLnVwZGF0ZUltcG9ydCgpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L21pZ3JhdGlvbnMvc291cmNlLWltcG9ydHMjdXBkYXRlLWFuLWltcG9ydFwiXG4gICAgICB9XG4gICAgXVxuICB9LFxuICBvaWRjOiB7XG4gICAgZ2V0T2lkY0N1c3RvbVN1YlRlbXBsYXRlRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL29pZGMvY3VzdG9taXphdGlvbi9zdWJcIlxuICAgIF0sXG4gICAgdXBkYXRlT2lkY0N1c3RvbVN1YlRlbXBsYXRlRm9yT3JnOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL29pZGMvY3VzdG9taXphdGlvbi9zdWJcIlxuICAgIF1cbiAgfSxcbiAgb3Jnczoge1xuICAgIGFkZFNlY3VyaXR5TWFuYWdlclRlYW06IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L3NlY3VyaXR5LW1hbmFnZXJzL3RlYW1zL3t0ZWFtX3NsdWd9XCJcbiAgICBdLFxuICAgIGFzc2lnblRlYW1Ub09yZ1JvbGU6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy90ZWFtcy97dGVhbV9zbHVnfS97cm9sZV9pZH1cIlxuICAgIF0sXG4gICAgYXNzaWduVXNlclRvT3JnUm9sZTogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3VzZXJzL3t1c2VybmFtZX0ve3JvbGVfaWR9XCJcbiAgICBdLFxuICAgIGJsb2NrVXNlcjogW1wiUFVUIC9vcmdzL3tvcmd9L2Jsb2Nrcy97dXNlcm5hbWV9XCJdLFxuICAgIGNhbmNlbEludml0YXRpb246IFtcIkRFTEVURSAvb3Jncy97b3JnfS9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIl0sXG4gICAgY2hlY2tCbG9ja2VkVXNlcjogW1wiR0VUIC9vcmdzL3tvcmd9L2Jsb2Nrcy97dXNlcm5hbWV9XCJdLFxuICAgIGNoZWNrTWVtYmVyc2hpcEZvclVzZXI6IFtcIkdFVCAvb3Jncy97b3JnfS9tZW1iZXJzL3t1c2VybmFtZX1cIl0sXG4gICAgY2hlY2tQdWJsaWNNZW1iZXJzaGlwRm9yVXNlcjogW1wiR0VUIC9vcmdzL3tvcmd9L3B1YmxpY19tZW1iZXJzL3t1c2VybmFtZX1cIl0sXG4gICAgY29udmVydE1lbWJlclRvT3V0c2lkZUNvbGxhYm9yYXRvcjogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vb3V0c2lkZV9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX1cIlxuICAgIF0sXG4gICAgY3JlYXRlQ3VzdG9tT3JnYW5pemF0aW9uUm9sZTogW1wiUE9TVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXNcIl0sXG4gICAgY3JlYXRlSW52aXRhdGlvbjogW1wiUE9TVCAvb3Jncy97b3JnfS9pbnZpdGF0aW9uc1wiXSxcbiAgICBjcmVhdGVPclVwZGF0ZUN1c3RvbVByb3BlcnRpZXM6IFtcIlBBVENIIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvc2NoZW1hXCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlQ3VzdG9tUHJvcGVydGllc1ZhbHVlc0ZvclJlcG9zOiBbXG4gICAgICBcIlBBVENIIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvdmFsdWVzXCJcbiAgICBdLFxuICAgIGNyZWF0ZU9yVXBkYXRlQ3VzdG9tUHJvcGVydHk6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvc2NoZW1hL3tjdXN0b21fcHJvcGVydHlfbmFtZX1cIlxuICAgIF0sXG4gICAgY3JlYXRlV2ViaG9vazogW1wiUE9TVCAvb3Jncy97b3JnfS9ob29rc1wiXSxcbiAgICBkZWxldGU6IFtcIkRFTEVURSAvb3Jncy97b3JnfVwiXSxcbiAgICBkZWxldGVDdXN0b21Pcmdhbml6YXRpb25Sb2xlOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMve3JvbGVfaWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZVdlYmhvb2s6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgZW5hYmxlT3JEaXNhYmxlU2VjdXJpdHlQcm9kdWN0T25BbGxPcmdSZXBvczogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3tzZWN1cml0eV9wcm9kdWN0fS97ZW5hYmxlbWVudH1cIlxuICAgIF0sXG4gICAgZ2V0OiBbXCJHRVQgL29yZ3Mve29yZ31cIl0sXG4gICAgZ2V0QWxsQ3VzdG9tUHJvcGVydGllczogW1wiR0VUIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvc2NoZW1hXCJdLFxuICAgIGdldEN1c3RvbVByb3BlcnR5OiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9wcm9wZXJ0aWVzL3NjaGVtYS97Y3VzdG9tX3Byb3BlcnR5X25hbWV9XCJcbiAgICBdLFxuICAgIGdldE1lbWJlcnNoaXBGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL21lbWJlcnNoaXBzL29yZ3Mve29yZ31cIl0sXG4gICAgZ2V0TWVtYmVyc2hpcEZvclVzZXI6IFtcIkdFVCAvb3Jncy97b3JnfS9tZW1iZXJzaGlwcy97dXNlcm5hbWV9XCJdLFxuICAgIGdldE9yZ1JvbGU6IFtcIkdFVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMve3JvbGVfaWR9XCJdLFxuICAgIGdldFdlYmhvb2s6IFtcIkdFVCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgZ2V0V2ViaG9va0NvbmZpZ0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfS9jb25maWdcIl0sXG4gICAgZ2V0V2ViaG9va0RlbGl2ZXJ5OiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9XCJcbiAgICBdLFxuICAgIGxpc3Q6IFtcIkdFVCAvb3JnYW5pemF0aW9uc1wiXSxcbiAgICBsaXN0QXBwSW5zdGFsbGF0aW9uczogW1wiR0VUIC9vcmdzL3tvcmd9L2luc3RhbGxhdGlvbnNcIl0sXG4gICAgbGlzdEJsb2NrZWRVc2VyczogW1wiR0VUIC9vcmdzL3tvcmd9L2Jsb2Nrc1wiXSxcbiAgICBsaXN0Q3VzdG9tUHJvcGVydGllc1ZhbHVlc0ZvclJlcG9zOiBbXCJHRVQgL29yZ3Mve29yZ30vcHJvcGVydGllcy92YWx1ZXNcIl0sXG4gICAgbGlzdEZhaWxlZEludml0YXRpb25zOiBbXCJHRVQgL29yZ3Mve29yZ30vZmFpbGVkX2ludml0YXRpb25zXCJdLFxuICAgIGxpc3RGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL29yZ3NcIl0sXG4gICAgbGlzdEZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9vcmdzXCJdLFxuICAgIGxpc3RJbnZpdGF0aW9uVGVhbXM6IFtcIkdFVCAvb3Jncy97b3JnfS9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH0vdGVhbXNcIl0sXG4gICAgbGlzdE1lbWJlcnM6IFtcIkdFVCAvb3Jncy97b3JnfS9tZW1iZXJzXCJdLFxuICAgIGxpc3RNZW1iZXJzaGlwc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvbWVtYmVyc2hpcHMvb3Jnc1wiXSxcbiAgICBsaXN0T3JnUm9sZVRlYW1zOiBbXCJHRVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3tyb2xlX2lkfS90ZWFtc1wiXSxcbiAgICBsaXN0T3JnUm9sZVVzZXJzOiBbXCJHRVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3tyb2xlX2lkfS91c2Vyc1wiXSxcbiAgICBsaXN0T3JnUm9sZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXNcIl0sXG4gICAgbGlzdE9yZ2FuaXphdGlvbkZpbmVHcmFpbmVkUGVybWlzc2lvbnM6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1maW5lLWdyYWluZWQtcGVybWlzc2lvbnNcIlxuICAgIF0sXG4gICAgbGlzdE91dHNpZGVDb2xsYWJvcmF0b3JzOiBbXCJHRVQgL29yZ3Mve29yZ30vb3V0c2lkZV9jb2xsYWJvcmF0b3JzXCJdLFxuICAgIGxpc3RQYXRHcmFudFJlcG9zaXRvcmllczogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2Vucy97cGF0X2lkfS9yZXBvc2l0b3JpZXNcIlxuICAgIF0sXG4gICAgbGlzdFBhdEdyYW50UmVxdWVzdFJlcG9zaXRvcmllczogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2VuLXJlcXVlc3RzL3twYXRfcmVxdWVzdF9pZH0vcmVwb3NpdG9yaWVzXCJcbiAgICBdLFxuICAgIGxpc3RQYXRHcmFudFJlcXVlc3RzOiBbXCJHRVQgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2VuLXJlcXVlc3RzXCJdLFxuICAgIGxpc3RQYXRHcmFudHM6IFtcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW5zXCJdLFxuICAgIGxpc3RQZW5kaW5nSW52aXRhdGlvbnM6IFtcIkdFVCAvb3Jncy97b3JnfS9pbnZpdGF0aW9uc1wiXSxcbiAgICBsaXN0UHVibGljTWVtYmVyczogW1wiR0VUIC9vcmdzL3tvcmd9L3B1YmxpY19tZW1iZXJzXCJdLFxuICAgIGxpc3RTZWN1cml0eU1hbmFnZXJUZWFtczogW1wiR0VUIC9vcmdzL3tvcmd9L3NlY3VyaXR5LW1hbmFnZXJzXCJdLFxuICAgIGxpc3RXZWJob29rRGVsaXZlcmllczogW1wiR0VUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzXCJdLFxuICAgIGxpc3RXZWJob29rczogW1wiR0VUIC9vcmdzL3tvcmd9L2hvb2tzXCJdLFxuICAgIHBhdGNoQ3VzdG9tT3JnYW5pemF0aW9uUm9sZTogW1xuICAgICAgXCJQQVRDSCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMve3JvbGVfaWR9XCJcbiAgICBdLFxuICAgIHBpbmdXZWJob29rOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfS9waW5nc1wiXSxcbiAgICByZWRlbGl2ZXJXZWJob29rRGVsaXZlcnk6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9L2F0dGVtcHRzXCJcbiAgICBdLFxuICAgIHJlbW92ZUN1c3RvbVByb3BlcnR5OiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9wcm9wZXJ0aWVzL3NjaGVtYS97Y3VzdG9tX3Byb3BlcnR5X25hbWV9XCJcbiAgICBdLFxuICAgIHJlbW92ZU1lbWJlcjogW1wiREVMRVRFIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfVwiXSxcbiAgICByZW1vdmVNZW1iZXJzaGlwRm9yVXNlcjogW1wiREVMRVRFIC9vcmdzL3tvcmd9L21lbWJlcnNoaXBzL3t1c2VybmFtZX1cIl0sXG4gICAgcmVtb3ZlT3V0c2lkZUNvbGxhYm9yYXRvcjogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vb3V0c2lkZV9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX1cIlxuICAgIF0sXG4gICAgcmVtb3ZlUHVibGljTWVtYmVyc2hpcEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9wdWJsaWNfbWVtYmVycy97dXNlcm5hbWV9XCJcbiAgICBdLFxuICAgIHJlbW92ZVNlY3VyaXR5TWFuYWdlclRlYW06IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3NlY3VyaXR5LW1hbmFnZXJzL3RlYW1zL3t0ZWFtX3NsdWd9XCJcbiAgICBdLFxuICAgIHJldmlld1BhdEdyYW50UmVxdWVzdDogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbi1yZXF1ZXN0cy97cGF0X3JlcXVlc3RfaWR9XCJcbiAgICBdLFxuICAgIHJldmlld1BhdEdyYW50UmVxdWVzdHNJbkJ1bGs6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW4tcmVxdWVzdHNcIlxuICAgIF0sXG4gICAgcmV2b2tlQWxsT3JnUm9sZXNUZWFtOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMvdGVhbXMve3RlYW1fc2x1Z31cIlxuICAgIF0sXG4gICAgcmV2b2tlQWxsT3JnUm9sZXNVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMvdXNlcnMve3VzZXJuYW1lfVwiXG4gICAgXSxcbiAgICByZXZva2VPcmdSb2xlVGVhbTogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3RlYW1zL3t0ZWFtX3NsdWd9L3tyb2xlX2lkfVwiXG4gICAgXSxcbiAgICByZXZva2VPcmdSb2xlVXNlcjogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3VzZXJzL3t1c2VybmFtZX0ve3JvbGVfaWR9XCJcbiAgICBdLFxuICAgIHNldE1lbWJlcnNoaXBGb3JVc2VyOiBbXCJQVVQgL29yZ3Mve29yZ30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiXSxcbiAgICBzZXRQdWJsaWNNZW1iZXJzaGlwRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L3B1YmxpY19tZW1iZXJzL3t1c2VybmFtZX1cIlxuICAgIF0sXG4gICAgdW5ibG9ja1VzZXI6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9ibG9ja3Mve3VzZXJuYW1lfVwiXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9vcmdzL3tvcmd9XCJdLFxuICAgIHVwZGF0ZU1lbWJlcnNoaXBGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQQVRDSCAvdXNlci9tZW1iZXJzaGlwcy9vcmdzL3tvcmd9XCJcbiAgICBdLFxuICAgIHVwZGF0ZVBhdEFjY2VzczogW1wiUE9TVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW5zL3twYXRfaWR9XCJdLFxuICAgIHVwZGF0ZVBhdEFjY2Vzc2VzOiBbXCJQT1NUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbnNcIl0sXG4gICAgdXBkYXRlV2ViaG9vazogW1wiUEFUQ0ggL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9XCJdLFxuICAgIHVwZGF0ZVdlYmhvb2tDb25maWdGb3JPcmc6IFtcIlBBVENIIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfS9jb25maWdcIl1cbiAgfSxcbiAgcGFja2FnZXM6IHtcbiAgICBkZWxldGVQYWNrYWdlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9XCJcbiAgICBdLFxuICAgIGRlbGV0ZVBhY2thZ2VGb3JPcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9XCJcbiAgICBdLFxuICAgIGRlbGV0ZVBhY2thZ2VGb3JVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfVwiXG4gICAgXSxcbiAgICBkZWxldGVQYWNrYWdlVmVyc2lvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfVwiXG4gICAgXSxcbiAgICBkZWxldGVQYWNrYWdlVmVyc2lvbkZvck9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH1cIlxuICAgIF0sXG4gICAgZGVsZXRlUGFja2FnZVZlcnNpb25Gb3JVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfVwiXG4gICAgXSxcbiAgICBnZXRBbGxQYWNrYWdlVmVyc2lvbnNGb3JBUGFja2FnZU93bmVkQnlBbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJwYWNrYWdlc1wiLCBcImdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvclBhY2thZ2VPd25lZEJ5T3JnXCJdIH1cbiAgICBdLFxuICAgIGdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvckFQYWNrYWdlT3duZWRCeVRoZUF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIHJlbmFtZWQ6IFtcbiAgICAgICAgICBcInBhY2thZ2VzXCIsXG4gICAgICAgICAgXCJnZXRBbGxQYWNrYWdlVmVyc2lvbnNGb3JQYWNrYWdlT3duZWRCeUF1dGhlbnRpY2F0ZWRVc2VyXCJcbiAgICAgICAgXVxuICAgICAgfVxuICAgIF0sXG4gICAgZ2V0QWxsUGFja2FnZVZlcnNpb25zRm9yUGFja2FnZU93bmVkQnlBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIlxuICAgIF0sXG4gICAgZ2V0QWxsUGFja2FnZVZlcnNpb25zRm9yUGFja2FnZU93bmVkQnlPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zXCJcbiAgICBdLFxuICAgIGdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvclBhY2thZ2VPd25lZEJ5VXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIlxuICAgIF0sXG4gICAgZ2V0UGFja2FnZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfVwiXG4gICAgXSxcbiAgICBnZXRQYWNrYWdlRm9yT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfVwiXG4gICAgXSxcbiAgICBnZXRQYWNrYWdlRm9yVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX1cIlxuICAgIF0sXG4gICAgZ2V0UGFja2FnZVZlcnNpb25Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH1cIlxuICAgIF0sXG4gICAgZ2V0UGFja2FnZVZlcnNpb25Gb3JPcmdhbml6YXRpb246IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9XCJcbiAgICBdLFxuICAgIGdldFBhY2thZ2VWZXJzaW9uRm9yVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH1cIlxuICAgIF0sXG4gICAgbGlzdERvY2tlck1pZ3JhdGlvbkNvbmZsaWN0aW5nUGFja2FnZXNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvZG9ja2VyL2NvbmZsaWN0c1wiXG4gICAgXSxcbiAgICBsaXN0RG9ja2VyTWlncmF0aW9uQ29uZmxpY3RpbmdQYWNrYWdlc0Zvck9yZ2FuaXphdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vZG9ja2VyL2NvbmZsaWN0c1wiXG4gICAgXSxcbiAgICBsaXN0RG9ja2VyTWlncmF0aW9uQ29uZmxpY3RpbmdQYWNrYWdlc0ZvclVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2RvY2tlci9jb25mbGljdHNcIlxuICAgIF0sXG4gICAgbGlzdFBhY2thZ2VzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9wYWNrYWdlc1wiXSxcbiAgICBsaXN0UGFja2FnZXNGb3JPcmdhbml6YXRpb246IFtcIkdFVCAvb3Jncy97b3JnfS9wYWNrYWdlc1wiXSxcbiAgICBsaXN0UGFja2FnZXNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXNcIl0sXG4gICAgcmVzdG9yZVBhY2thZ2VGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQT1NUIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3Jlc3RvcmV7P3Rva2VufVwiXG4gICAgXSxcbiAgICByZXN0b3JlUGFja2FnZUZvck9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3Jlc3RvcmV7P3Rva2VufVwiXG4gICAgXSxcbiAgICByZXN0b3JlUGFja2FnZUZvclVzZXI6IFtcbiAgICAgIFwiUE9TVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS9yZXN0b3Jlez90b2tlbn1cIlxuICAgIF0sXG4gICAgcmVzdG9yZVBhY2thZ2VWZXJzaW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUE9TVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfS9yZXN0b3JlXCJcbiAgICBdLFxuICAgIHJlc3RvcmVQYWNrYWdlVmVyc2lvbkZvck9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9L3Jlc3RvcmVcIlxuICAgIF0sXG4gICAgcmVzdG9yZVBhY2thZ2VWZXJzaW9uRm9yVXNlcjogW1xuICAgICAgXCJQT1NUIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9L3Jlc3RvcmVcIlxuICAgIF1cbiAgfSxcbiAgcHJvamVjdHM6IHtcbiAgICBhZGRDb2xsYWJvcmF0b3I6IFtcIlBVVCAvcHJvamVjdHMve3Byb2plY3RfaWR9L2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiXSxcbiAgICBjcmVhdGVDYXJkOiBbXCJQT1NUIC9wcm9qZWN0cy9jb2x1bW5zL3tjb2x1bW5faWR9L2NhcmRzXCJdLFxuICAgIGNyZWF0ZUNvbHVtbjogW1wiUE9TVCAvcHJvamVjdHMve3Byb2plY3RfaWR9L2NvbHVtbnNcIl0sXG4gICAgY3JlYXRlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvcHJvamVjdHNcIl0sXG4gICAgY3JlYXRlRm9yT3JnOiBbXCJQT1NUIC9vcmdzL3tvcmd9L3Byb2plY3RzXCJdLFxuICAgIGNyZWF0ZUZvclJlcG86IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Byb2plY3RzXCJdLFxuICAgIGRlbGV0ZTogW1wiREVMRVRFIC9wcm9qZWN0cy97cHJvamVjdF9pZH1cIl0sXG4gICAgZGVsZXRlQ2FyZDogW1wiREVMRVRFIC9wcm9qZWN0cy9jb2x1bW5zL2NhcmRzL3tjYXJkX2lkfVwiXSxcbiAgICBkZWxldGVDb2x1bW46IFtcIkRFTEVURSAvcHJvamVjdHMvY29sdW1ucy97Y29sdW1uX2lkfVwiXSxcbiAgICBnZXQ6IFtcIkdFVCAvcHJvamVjdHMve3Byb2plY3RfaWR9XCJdLFxuICAgIGdldENhcmQ6IFtcIkdFVCAvcHJvamVjdHMvY29sdW1ucy9jYXJkcy97Y2FyZF9pZH1cIl0sXG4gICAgZ2V0Q29sdW1uOiBbXCJHRVQgL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH1cIl0sXG4gICAgZ2V0UGVybWlzc2lvbkZvclVzZXI6IFtcbiAgICAgIFwiR0VUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sbGFib3JhdG9ycy97dXNlcm5hbWV9L3Blcm1pc3Npb25cIlxuICAgIF0sXG4gICAgbGlzdENhcmRzOiBbXCJHRVQgL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH0vY2FyZHNcIl0sXG4gICAgbGlzdENvbGxhYm9yYXRvcnM6IFtcIkdFVCAvcHJvamVjdHMve3Byb2plY3RfaWR9L2NvbGxhYm9yYXRvcnNcIl0sXG4gICAgbGlzdENvbHVtbnM6IFtcIkdFVCAvcHJvamVjdHMve3Byb2plY3RfaWR9L2NvbHVtbnNcIl0sXG4gICAgbGlzdEZvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3Byb2plY3RzXCJdLFxuICAgIGxpc3RGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Byb2plY3RzXCJdLFxuICAgIGxpc3RGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcHJvamVjdHNcIl0sXG4gICAgbW92ZUNhcmQ6IFtcIlBPU1QgL3Byb2plY3RzL2NvbHVtbnMvY2FyZHMve2NhcmRfaWR9L21vdmVzXCJdLFxuICAgIG1vdmVDb2x1bW46IFtcIlBPU1QgL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH0vbW92ZXNcIl0sXG4gICAgcmVtb3ZlQ29sbGFib3JhdG9yOiBbXG4gICAgICBcIkRFTEVURSAvcHJvamVjdHMve3Byb2plY3RfaWR9L2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiXG4gICAgXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9wcm9qZWN0cy97cHJvamVjdF9pZH1cIl0sXG4gICAgdXBkYXRlQ2FyZDogW1wiUEFUQ0ggL3Byb2plY3RzL2NvbHVtbnMvY2FyZHMve2NhcmRfaWR9XCJdLFxuICAgIHVwZGF0ZUNvbHVtbjogW1wiUEFUQ0ggL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH1cIl1cbiAgfSxcbiAgcHVsbHM6IHtcbiAgICBjaGVja0lmTWVyZ2VkOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vbWVyZ2VcIl0sXG4gICAgY3JlYXRlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxsc1wiXSxcbiAgICBjcmVhdGVSZXBseUZvclJldmlld0NvbW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9pZH0vcmVwbGllc1wiXG4gICAgXSxcbiAgICBjcmVhdGVSZXZpZXc6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3c1wiXSxcbiAgICBjcmVhdGVSZXZpZXdDb21tZW50OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vY29tbWVudHNcIlxuICAgIF0sXG4gICAgZGVsZXRlUGVuZGluZ1JldmlldzogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfVwiXG4gICAgXSxcbiAgICBkZWxldGVSZXZpZXdDb21tZW50OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9XCJcbiAgICBdLFxuICAgIGRpc21pc3NSZXZpZXc6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH0vZGlzbWlzc2Fsc1wiXG4gICAgXSxcbiAgICBnZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfVwiXSxcbiAgICBnZXRSZXZpZXc6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH1cIlxuICAgIF0sXG4gICAgZ2V0UmV2aWV3Q29tbWVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgbGlzdDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxsc1wiXSxcbiAgICBsaXN0Q29tbWVudHNGb3JSZXZpZXc6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH0vY29tbWVudHNcIlxuICAgIF0sXG4gICAgbGlzdENvbW1pdHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb21taXRzXCJdLFxuICAgIGxpc3RGaWxlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2ZpbGVzXCJdLFxuICAgIGxpc3RSZXF1ZXN0ZWRSZXZpZXdlcnM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3JlcXVlc3RlZF9yZXZpZXdlcnNcIlxuICAgIF0sXG4gICAgbGlzdFJldmlld0NvbW1lbnRzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb21tZW50c1wiXG4gICAgXSxcbiAgICBsaXN0UmV2aWV3Q29tbWVudHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzXCJdLFxuICAgIGxpc3RSZXZpZXdzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3c1wiXSxcbiAgICBtZXJnZTogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L21lcmdlXCJdLFxuICAgIHJlbW92ZVJlcXVlc3RlZFJldmlld2VyczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmVxdWVzdGVkX3Jldmlld2Vyc1wiXG4gICAgXSxcbiAgICByZXF1ZXN0UmV2aWV3ZXJzOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmVxdWVzdGVkX3Jldmlld2Vyc1wiXG4gICAgXSxcbiAgICBzdWJtaXRSZXZpZXc6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzL3tyZXZpZXdfaWR9L2V2ZW50c1wiXG4gICAgXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9XCJdLFxuICAgIHVwZGF0ZUJyYW5jaDogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vdXBkYXRlLWJyYW5jaFwiXG4gICAgXSxcbiAgICB1cGRhdGVSZXZpZXc6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH1cIlxuICAgIF0sXG4gICAgdXBkYXRlUmV2aWV3Q29tbWVudDogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9XCJcbiAgICBdXG4gIH0sXG4gIHJhdGVMaW1pdDogeyBnZXQ6IFtcIkdFVCAvcmF0ZV9saW1pdFwiXSB9LFxuICByZWFjdGlvbnM6IHtcbiAgICBjcmVhdGVGb3JDb21taXRDb21tZW50OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIlxuICAgIF0sXG4gICAgY3JlYXRlRm9ySXNzdWU6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L3JlYWN0aW9uc1wiXG4gICAgXSxcbiAgICBjcmVhdGVGb3JJc3N1ZUNvbW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIlxuICAgIF0sXG4gICAgY3JlYXRlRm9yUHVsbFJlcXVlc3RSZXZpZXdDb21tZW50OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIlxuICAgIF0sXG4gICAgY3JlYXRlRm9yUmVsZWFzZTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vcmVhY3Rpb25zXCJcbiAgICBdLFxuICAgIGNyZWF0ZUZvclRlYW1EaXNjdXNzaW9uQ29tbWVudEluT3JnOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9L3JlYWN0aW9uc1wiXG4gICAgXSxcbiAgICBjcmVhdGVGb3JUZWFtRGlzY3Vzc2lvbkluT3JnOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9yZWFjdGlvbnNcIlxuICAgIF0sXG4gICAgZGVsZXRlRm9yQ29tbWl0Q29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnMve3JlYWN0aW9uX2lkfVwiXG4gICAgXSxcbiAgICBkZWxldGVGb3JJc3N1ZTogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9yZWFjdGlvbnMve3JlYWN0aW9uX2lkfVwiXG4gICAgXSxcbiAgICBkZWxldGVGb3JJc3N1ZUNvbW1lbnQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZUZvclB1bGxSZXF1ZXN0Q29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnMve3JlYWN0aW9uX2lkfVwiXG4gICAgXSxcbiAgICBkZWxldGVGb3JSZWxlYXNlOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZUZvclRlYW1EaXNjdXNzaW9uOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZUZvclRlYW1EaXNjdXNzaW9uQ29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCJcbiAgICBdLFxuICAgIGxpc3RGb3JDb21taXRDb21tZW50OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiXG4gICAgXSxcbiAgICBsaXN0Rm9ySXNzdWU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L3JlYWN0aW9uc1wiXSxcbiAgICBsaXN0Rm9ySXNzdWVDb21tZW50OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIlxuICAgIF0sXG4gICAgbGlzdEZvclB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIlxuICAgIF0sXG4gICAgbGlzdEZvclJlbGVhc2U6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vcmVhY3Rpb25zXCJcbiAgICBdLFxuICAgIGxpc3RGb3JUZWFtRGlzY3Vzc2lvbkNvbW1lbnRJbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9L3JlYWN0aW9uc1wiXG4gICAgXSxcbiAgICBsaXN0Rm9yVGVhbURpc2N1c3Npb25Jbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9yZWFjdGlvbnNcIlxuICAgIF1cbiAgfSxcbiAgcmVwb3M6IHtcbiAgICBhY2NlcHRJbnZpdGF0aW9uOiBbXG4gICAgICBcIlBBVENIIC91c2VyL3JlcG9zaXRvcnlfaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wicmVwb3NcIiwgXCJhY2NlcHRJbnZpdGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfVxuICAgIF0sXG4gICAgYWNjZXB0SW52aXRhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBBVENIIC91c2VyL3JlcG9zaXRvcnlfaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9XCJcbiAgICBdLFxuICAgIGFkZEFwcEFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy9hcHBzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgbWFwVG9EYXRhOiBcImFwcHNcIiB9XG4gICAgXSxcbiAgICBhZGRDb2xsYWJvcmF0b3I6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29sbGFib3JhdG9ycy97dXNlcm5hbWV9XCJdLFxuICAgIGFkZFN0YXR1c0NoZWNrQ29udGV4dHM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zdGF0dXNfY2hlY2tzL2NvbnRleHRzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgbWFwVG9EYXRhOiBcImNvbnRleHRzXCIgfVxuICAgIF0sXG4gICAgYWRkVGVhbUFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy90ZWFtc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJ0ZWFtc1wiIH1cbiAgICBdLFxuICAgIGFkZFVzZXJBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdXNlcnNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwidXNlcnNcIiB9XG4gICAgXSxcbiAgICBjYW5jZWxQYWdlc0RlcGxveW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXMvZGVwbG95bWVudHMve3BhZ2VzX2RlcGxveW1lbnRfaWR9L2NhbmNlbFwiXG4gICAgXSxcbiAgICBjaGVja0F1dG9tYXRlZFNlY3VyaXR5Rml4ZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hdXRvbWF0ZWQtc2VjdXJpdHktZml4ZXNcIlxuICAgIF0sXG4gICAgY2hlY2tDb2xsYWJvcmF0b3I6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29sbGFib3JhdG9ycy97dXNlcm5hbWV9XCJdLFxuICAgIGNoZWNrVnVsbmVyYWJpbGl0eUFsZXJ0czogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Z1bG5lcmFiaWxpdHktYWxlcnRzXCJcbiAgICBdLFxuICAgIGNvZGVvd25lcnNFcnJvcnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZW93bmVycy9lcnJvcnNcIl0sXG4gICAgY29tcGFyZUNvbW1pdHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tcGFyZS97YmFzZX0uLi57aGVhZH1cIl0sXG4gICAgY29tcGFyZUNvbW1pdHNXaXRoQmFzZWhlYWQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21wYXJlL3tiYXNlaGVhZH1cIlxuICAgIF0sXG4gICAgY3JlYXRlQXV0b2xpbms6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9saW5rc1wiXSxcbiAgICBjcmVhdGVDb21taXRDb21tZW50OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve2NvbW1pdF9zaGF9L2NvbW1lbnRzXCJcbiAgICBdLFxuICAgIGNyZWF0ZUNvbW1pdFNpZ25hdHVyZVByb3RlY3Rpb246IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zaWduYXR1cmVzXCJcbiAgICBdLFxuICAgIGNyZWF0ZUNvbW1pdFN0YXR1czogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3RhdHVzZXMve3NoYX1cIl0sXG4gICAgY3JlYXRlRGVwbG95S2V5OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9rZXlzXCJdLFxuICAgIGNyZWF0ZURlcGxveW1lbnQ6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGxveW1lbnRzXCJdLFxuICAgIGNyZWF0ZURlcGxveW1lbnRCcmFuY2hQb2xpY3k6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50LWJyYW5jaC1wb2xpY2llc1wiXG4gICAgXSxcbiAgICBjcmVhdGVEZXBsb3ltZW50UHJvdGVjdGlvblJ1bGU6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50X3Byb3RlY3Rpb25fcnVsZXNcIlxuICAgIF0sXG4gICAgY3JlYXRlRGVwbG95bWVudFN0YXR1czogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50cy97ZGVwbG95bWVudF9pZH0vc3RhdHVzZXNcIlxuICAgIF0sXG4gICAgY3JlYXRlRGlzcGF0Y2hFdmVudDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGlzcGF0Y2hlc1wiXSxcbiAgICBjcmVhdGVGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9yZXBvc1wiXSxcbiAgICBjcmVhdGVGb3JrOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9mb3Jrc1wiXSxcbiAgICBjcmVhdGVJbk9yZzogW1wiUE9TVCAvb3Jncy97b3JnfS9yZXBvc1wiXSxcbiAgICBjcmVhdGVPclVwZGF0ZUN1c3RvbVByb3BlcnRpZXNWYWx1ZXM6IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L3Byb3BlcnRpZXMvdmFsdWVzXCJcbiAgICBdLFxuICAgIGNyZWF0ZU9yVXBkYXRlRW52aXJvbm1lbnQ6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9XCJcbiAgICBdLFxuICAgIGNyZWF0ZU9yVXBkYXRlRmlsZUNvbnRlbnRzOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbnRlbnRzL3twYXRofVwiXSxcbiAgICBjcmVhdGVPcmdSdWxlc2V0OiBbXCJQT1NUIC9vcmdzL3tvcmd9L3J1bGVzZXRzXCJdLFxuICAgIGNyZWF0ZVBhZ2VzRGVwbG95bWVudDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXMvZGVwbG95bWVudHNcIl0sXG4gICAgY3JlYXRlUGFnZXNTaXRlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlc1wiXSxcbiAgICBjcmVhdGVSZWxlYXNlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlc1wiXSxcbiAgICBjcmVhdGVSZXBvUnVsZXNldDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHNcIl0sXG4gICAgY3JlYXRlVGFnUHJvdGVjdGlvbjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vdGFncy9wcm90ZWN0aW9uXCJdLFxuICAgIGNyZWF0ZVVzaW5nVGVtcGxhdGU6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve3RlbXBsYXRlX293bmVyfS97dGVtcGxhdGVfcmVwb30vZ2VuZXJhdGVcIlxuICAgIF0sXG4gICAgY3JlYXRlV2ViaG9vazogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3NcIl0sXG4gICAgZGVjbGluZUludml0YXRpb246IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL3JlcG9zaXRvcnlfaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wicmVwb3NcIiwgXCJkZWNsaW5lSW52aXRhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIGRlY2xpbmVJbnZpdGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL3JlcG9zaXRvcnlfaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZTogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfVwiXSxcbiAgICBkZWxldGVBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9uc1wiXG4gICAgXSxcbiAgICBkZWxldGVBZG1pbkJyYW5jaFByb3RlY3Rpb246IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL2VuZm9yY2VfYWRtaW5zXCJcbiAgICBdLFxuICAgIGRlbGV0ZUFuRW52aXJvbm1lbnQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9XCJcbiAgICBdLFxuICAgIGRlbGV0ZUF1dG9saW5rOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9saW5rcy97YXV0b2xpbmtfaWR9XCJdLFxuICAgIGRlbGV0ZUJyYW5jaFByb3RlY3Rpb246IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uXCJcbiAgICBdLFxuICAgIGRlbGV0ZUNvbW1pdENvbW1lbnQ6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIGRlbGV0ZUNvbW1pdFNpZ25hdHVyZVByb3RlY3Rpb246IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3NpZ25hdHVyZXNcIlxuICAgIF0sXG4gICAgZGVsZXRlRGVwbG95S2V5OiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2tleXMve2tleV9pZH1cIl0sXG4gICAgZGVsZXRlRGVwbG95bWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGxveW1lbnRzL3tkZXBsb3ltZW50X2lkfVwiXG4gICAgXSxcbiAgICBkZWxldGVEZXBsb3ltZW50QnJhbmNoUG9saWN5OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50LWJyYW5jaC1wb2xpY2llcy97YnJhbmNoX3BvbGljeV9pZH1cIlxuICAgIF0sXG4gICAgZGVsZXRlRmlsZTogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb250ZW50cy97cGF0aH1cIl0sXG4gICAgZGVsZXRlSW52aXRhdGlvbjogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfVwiXG4gICAgXSxcbiAgICBkZWxldGVPcmdSdWxlc2V0OiBbXCJERUxFVEUgL29yZ3Mve29yZ30vcnVsZXNldHMve3J1bGVzZXRfaWR9XCJdLFxuICAgIGRlbGV0ZVBhZ2VzU2l0ZTogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlc1wiXSxcbiAgICBkZWxldGVQdWxsUmVxdWVzdFJldmlld1Byb3RlY3Rpb246IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3B1bGxfcmVxdWVzdF9yZXZpZXdzXCJcbiAgICBdLFxuICAgIGRlbGV0ZVJlbGVhc2U6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9XCJdLFxuICAgIGRlbGV0ZVJlbGVhc2VBc3NldDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL2Fzc2V0cy97YXNzZXRfaWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZVJlcG9SdWxlc2V0OiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzL3tydWxlc2V0X2lkfVwiXSxcbiAgICBkZWxldGVUYWdQcm90ZWN0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vdGFncy9wcm90ZWN0aW9uL3t0YWdfcHJvdGVjdGlvbl9pZH1cIlxuICAgIF0sXG4gICAgZGVsZXRlV2ViaG9vazogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgZGlzYWJsZUF1dG9tYXRlZFNlY3VyaXR5Rml4ZXM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hdXRvbWF0ZWQtc2VjdXJpdHktZml4ZXNcIlxuICAgIF0sXG4gICAgZGlzYWJsZURlcGxveW1lbnRQcm90ZWN0aW9uUnVsZTogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudF9wcm90ZWN0aW9uX3J1bGVzL3twcm90ZWN0aW9uX3J1bGVfaWR9XCJcbiAgICBdLFxuICAgIGRpc2FibGVQcml2YXRlVnVsbmVyYWJpbGl0eVJlcG9ydGluZzogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3ByaXZhdGUtdnVsbmVyYWJpbGl0eS1yZXBvcnRpbmdcIlxuICAgIF0sXG4gICAgZGlzYWJsZVZ1bG5lcmFiaWxpdHlBbGVydHM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS92dWxuZXJhYmlsaXR5LWFsZXJ0c1wiXG4gICAgXSxcbiAgICBkb3dubG9hZEFyY2hpdmU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS96aXBiYWxsL3tyZWZ9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wicmVwb3NcIiwgXCJkb3dubG9hZFppcGJhbGxBcmNoaXZlXCJdIH1cbiAgICBdLFxuICAgIGRvd25sb2FkVGFyYmFsbEFyY2hpdmU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdGFyYmFsbC97cmVmfVwiXSxcbiAgICBkb3dubG9hZFppcGJhbGxBcmNoaXZlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3ppcGJhbGwve3JlZn1cIl0sXG4gICAgZW5hYmxlQXV0b21hdGVkU2VjdXJpdHlGaXhlczogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9tYXRlZC1zZWN1cml0eS1maXhlc1wiXG4gICAgXSxcbiAgICBlbmFibGVQcml2YXRlVnVsbmVyYWJpbGl0eVJlcG9ydGluZzogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3ByaXZhdGUtdnVsbmVyYWJpbGl0eS1yZXBvcnRpbmdcIlxuICAgIF0sXG4gICAgZW5hYmxlVnVsbmVyYWJpbGl0eUFsZXJ0czogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Z1bG5lcmFiaWxpdHktYWxlcnRzXCJcbiAgICBdLFxuICAgIGdlbmVyYXRlUmVsZWFzZU5vdGVzOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL2dlbmVyYXRlLW5vdGVzXCJcbiAgICBdLFxuICAgIGdldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfVwiXSxcbiAgICBnZXRBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9uc1wiXG4gICAgXSxcbiAgICBnZXRBZG1pbkJyYW5jaFByb3RlY3Rpb246IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL2VuZm9yY2VfYWRtaW5zXCJcbiAgICBdLFxuICAgIGdldEFsbERlcGxveW1lbnRQcm90ZWN0aW9uUnVsZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnRfcHJvdGVjdGlvbl9ydWxlc1wiXG4gICAgXSxcbiAgICBnZXRBbGxFbnZpcm9ubWVudHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzXCJdLFxuICAgIGdldEFsbFN0YXR1c0NoZWNrQ29udGV4dHM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3MvY29udGV4dHNcIlxuICAgIF0sXG4gICAgZ2V0QWxsVG9waWNzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RvcGljc1wiXSxcbiAgICBnZXRBcHBzV2l0aEFjY2Vzc1RvUHJvdGVjdGVkQnJhbmNoOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvYXBwc1wiXG4gICAgXSxcbiAgICBnZXRBdXRvbGluazogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hdXRvbGlua3Mve2F1dG9saW5rX2lkfVwiXSxcbiAgICBnZXRCcmFuY2g6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH1cIl0sXG4gICAgZ2V0QnJhbmNoUHJvdGVjdGlvbjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb25cIlxuICAgIF0sXG4gICAgZ2V0QnJhbmNoUnVsZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXMvYnJhbmNoZXMve2JyYW5jaH1cIl0sXG4gICAgZ2V0Q2xvbmVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RyYWZmaWMvY2xvbmVzXCJdLFxuICAgIGdldENvZGVGcmVxdWVuY3lTdGF0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGF0cy9jb2RlX2ZyZXF1ZW5jeVwiXSxcbiAgICBnZXRDb2xsYWJvcmF0b3JQZXJtaXNzaW9uTGV2ZWw6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX0vcGVybWlzc2lvblwiXG4gICAgXSxcbiAgICBnZXRDb21iaW5lZFN0YXR1c0ZvclJlZjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L3N0YXR1c1wiXSxcbiAgICBnZXRDb21taXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfVwiXSxcbiAgICBnZXRDb21taXRBY3Rpdml0eVN0YXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXRzL2NvbW1pdF9hY3Rpdml0eVwiXSxcbiAgICBnZXRDb21taXRDb21tZW50OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBnZXRDb21taXRTaWduYXR1cmVQcm90ZWN0aW9uOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zaWduYXR1cmVzXCJcbiAgICBdLFxuICAgIGdldENvbW11bml0eVByb2ZpbGVNZXRyaWNzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW11bml0eS9wcm9maWxlXCJdLFxuICAgIGdldENvbnRlbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29udGVudHMve3BhdGh9XCJdLFxuICAgIGdldENvbnRyaWJ1dG9yc1N0YXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXRzL2NvbnRyaWJ1dG9yc1wiXSxcbiAgICBnZXRDdXN0b21EZXBsb3ltZW50UHJvdGVjdGlvblJ1bGU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnRfcHJvdGVjdGlvbl9ydWxlcy97cHJvdGVjdGlvbl9ydWxlX2lkfVwiXG4gICAgXSxcbiAgICBnZXRDdXN0b21Qcm9wZXJ0aWVzVmFsdWVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Byb3BlcnRpZXMvdmFsdWVzXCJdLFxuICAgIGdldERlcGxveUtleTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9rZXlzL3trZXlfaWR9XCJdLFxuICAgIGdldERlcGxveW1lbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHMve2RlcGxveW1lbnRfaWR9XCJdLFxuICAgIGdldERlcGxveW1lbnRCcmFuY2hQb2xpY3k6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnQtYnJhbmNoLXBvbGljaWVzL3ticmFuY2hfcG9saWN5X2lkfVwiXG4gICAgXSxcbiAgICBnZXREZXBsb3ltZW50U3RhdHVzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHMve2RlcGxveW1lbnRfaWR9L3N0YXR1c2VzL3tzdGF0dXNfaWR9XCJcbiAgICBdLFxuICAgIGdldEVudmlyb25tZW50OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfVwiXG4gICAgXSxcbiAgICBnZXRMYXRlc3RQYWdlc0J1aWxkOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2J1aWxkcy9sYXRlc3RcIl0sXG4gICAgZ2V0TGF0ZXN0UmVsZWFzZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy9sYXRlc3RcIl0sXG4gICAgZ2V0T3JnUnVsZVN1aXRlOiBbXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHMvcnVsZS1zdWl0ZXMve3J1bGVfc3VpdGVfaWR9XCJdLFxuICAgIGdldE9yZ1J1bGVTdWl0ZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9ydWxlc2V0cy9ydWxlLXN1aXRlc1wiXSxcbiAgICBnZXRPcmdSdWxlc2V0OiBbXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHMve3J1bGVzZXRfaWR9XCJdLFxuICAgIGdldE9yZ1J1bGVzZXRzOiBbXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHNcIl0sXG4gICAgZ2V0UGFnZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXNcIl0sXG4gICAgZ2V0UGFnZXNCdWlsZDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9idWlsZHMve2J1aWxkX2lkfVwiXSxcbiAgICBnZXRQYWdlc0RlcGxveW1lbnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9kZXBsb3ltZW50cy97cGFnZXNfZGVwbG95bWVudF9pZH1cIlxuICAgIF0sXG4gICAgZ2V0UGFnZXNIZWFsdGhDaGVjazogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9oZWFsdGhcIl0sXG4gICAgZ2V0UGFydGljaXBhdGlvblN0YXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXRzL3BhcnRpY2lwYXRpb25cIl0sXG4gICAgZ2V0UHVsbFJlcXVlc3RSZXZpZXdQcm90ZWN0aW9uOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9wdWxsX3JlcXVlc3RfcmV2aWV3c1wiXG4gICAgXSxcbiAgICBnZXRQdW5jaENhcmRTdGF0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGF0cy9wdW5jaF9jYXJkXCJdLFxuICAgIGdldFJlYWRtZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWFkbWVcIl0sXG4gICAgZ2V0UmVhZG1lSW5EaXJlY3Rvcnk6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVhZG1lL3tkaXJ9XCJdLFxuICAgIGdldFJlbGVhc2U6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9XCJdLFxuICAgIGdldFJlbGVhc2VBc3NldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy9hc3NldHMve2Fzc2V0X2lkfVwiXSxcbiAgICBnZXRSZWxlYXNlQnlUYWc6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMvdGFncy97dGFnfVwiXSxcbiAgICBnZXRSZXBvUnVsZVN1aXRlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHMvcnVsZS1zdWl0ZXMve3J1bGVfc3VpdGVfaWR9XCJcbiAgICBdLFxuICAgIGdldFJlcG9SdWxlU3VpdGVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzL3J1bGUtc3VpdGVzXCJdLFxuICAgIGdldFJlcG9SdWxlc2V0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzL3tydWxlc2V0X2lkfVwiXSxcbiAgICBnZXRSZXBvUnVsZXNldHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHNcIl0sXG4gICAgZ2V0U3RhdHVzQ2hlY2tzUHJvdGVjdGlvbjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrc1wiXG4gICAgXSxcbiAgICBnZXRUZWFtc1dpdGhBY2Nlc3NUb1Byb3RlY3RlZEJyYW5jaDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL3RlYW1zXCJcbiAgICBdLFxuICAgIGdldFRvcFBhdGhzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RyYWZmaWMvcG9wdWxhci9wYXRoc1wiXSxcbiAgICBnZXRUb3BSZWZlcnJlcnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdHJhZmZpYy9wb3B1bGFyL3JlZmVycmVyc1wiXSxcbiAgICBnZXRVc2Vyc1dpdGhBY2Nlc3NUb1Byb3RlY3RlZEJyYW5jaDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL3VzZXJzXCJcbiAgICBdLFxuICAgIGdldFZpZXdzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RyYWZmaWMvdmlld3NcIl0sXG4gICAgZ2V0V2ViaG9vazogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgZ2V0V2ViaG9va0NvbmZpZ0ZvclJlcG86IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vY29uZmlnXCJcbiAgICBdLFxuICAgIGdldFdlYmhvb2tEZWxpdmVyeTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzL3tkZWxpdmVyeV9pZH1cIlxuICAgIF0sXG4gICAgbGlzdEFjdGl2aXRpZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aXZpdHlcIl0sXG4gICAgbGlzdEF1dG9saW5rczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hdXRvbGlua3NcIl0sXG4gICAgbGlzdEJyYW5jaGVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzXCJdLFxuICAgIGxpc3RCcmFuY2hlc0ZvckhlYWRDb21taXQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tjb21taXRfc2hhfS9icmFuY2hlcy13aGVyZS1oZWFkXCJcbiAgICBdLFxuICAgIGxpc3RDb2xsYWJvcmF0b3JzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbGxhYm9yYXRvcnNcIl0sXG4gICAgbGlzdENvbW1lbnRzRm9yQ29tbWl0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97Y29tbWl0X3NoYX0vY29tbWVudHNcIlxuICAgIF0sXG4gICAgbGlzdENvbW1pdENvbW1lbnRzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50c1wiXSxcbiAgICBsaXN0Q29tbWl0U3RhdHVzZXNGb3JSZWY6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L3N0YXR1c2VzXCJcbiAgICBdLFxuICAgIGxpc3RDb21taXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHNcIl0sXG4gICAgbGlzdENvbnRyaWJ1dG9yczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb250cmlidXRvcnNcIl0sXG4gICAgbGlzdEN1c3RvbURlcGxveW1lbnRSdWxlSW50ZWdyYXRpb25zOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50X3Byb3RlY3Rpb25fcnVsZXMvYXBwc1wiXG4gICAgXSxcbiAgICBsaXN0RGVwbG95S2V5czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9rZXlzXCJdLFxuICAgIGxpc3REZXBsb3ltZW50QnJhbmNoUG9saWNpZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnQtYnJhbmNoLXBvbGljaWVzXCJcbiAgICBdLFxuICAgIGxpc3REZXBsb3ltZW50U3RhdHVzZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50cy97ZGVwbG95bWVudF9pZH0vc3RhdHVzZXNcIlxuICAgIF0sXG4gICAgbGlzdERlcGxveW1lbnRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGxveW1lbnRzXCJdLFxuICAgIGxpc3RGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3JlcG9zXCJdLFxuICAgIGxpc3RGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9yZXBvc1wiXSxcbiAgICBsaXN0Rm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3JlcG9zXCJdLFxuICAgIGxpc3RGb3JrczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9mb3Jrc1wiXSxcbiAgICBsaXN0SW52aXRhdGlvbnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaW52aXRhdGlvbnNcIl0sXG4gICAgbGlzdEludml0YXRpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9yZXBvc2l0b3J5X2ludml0YXRpb25zXCJdLFxuICAgIGxpc3RMYW5ndWFnZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbGFuZ3VhZ2VzXCJdLFxuICAgIGxpc3RQYWdlc0J1aWxkczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9idWlsZHNcIl0sXG4gICAgbGlzdFB1YmxpYzogW1wiR0VUIC9yZXBvc2l0b3JpZXNcIl0sXG4gICAgbGlzdFB1bGxSZXF1ZXN0c0Fzc29jaWF0ZWRXaXRoQ29tbWl0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97Y29tbWl0X3NoYX0vcHVsbHNcIlxuICAgIF0sXG4gICAgbGlzdFJlbGVhc2VBc3NldHM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vYXNzZXRzXCJcbiAgICBdLFxuICAgIGxpc3RSZWxlYXNlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlc1wiXSxcbiAgICBsaXN0VGFnUHJvdGVjdGlvbjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YWdzL3Byb3RlY3Rpb25cIl0sXG4gICAgbGlzdFRhZ3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdGFnc1wiXSxcbiAgICBsaXN0VGVhbXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdGVhbXNcIl0sXG4gICAgbGlzdFdlYmhvb2tEZWxpdmVyaWVzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXNcIlxuICAgIF0sXG4gICAgbGlzdFdlYmhvb2tzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzXCJdLFxuICAgIG1lcmdlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9tZXJnZXNcIl0sXG4gICAgbWVyZ2VVcHN0cmVhbTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWVyZ2UtdXBzdHJlYW1cIl0sXG4gICAgcGluZ1dlYmhvb2s6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS9waW5nc1wiXSxcbiAgICByZWRlbGl2ZXJXZWJob29rRGVsaXZlcnk6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXMve2RlbGl2ZXJ5X2lkfS9hdHRlbXB0c1wiXG4gICAgXSxcbiAgICByZW1vdmVBcHBBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy9hcHBzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgbWFwVG9EYXRhOiBcImFwcHNcIiB9XG4gICAgXSxcbiAgICByZW1vdmVDb2xsYWJvcmF0b3I6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX1cIlxuICAgIF0sXG4gICAgcmVtb3ZlU3RhdHVzQ2hlY2tDb250ZXh0czogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrcy9jb250ZXh0c1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJjb250ZXh0c1wiIH1cbiAgICBdLFxuICAgIHJlbW92ZVN0YXR1c0NoZWNrUHJvdGVjdGlvbjogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrc1wiXG4gICAgXSxcbiAgICByZW1vdmVUZWFtQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdGVhbXNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwidGVhbXNcIiB9XG4gICAgXSxcbiAgICByZW1vdmVVc2VyQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdXNlcnNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwidXNlcnNcIiB9XG4gICAgXSxcbiAgICByZW5hbWVCcmFuY2g6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3JlbmFtZVwiXSxcbiAgICByZXBsYWNlQWxsVG9waWNzOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RvcGljc1wiXSxcbiAgICByZXF1ZXN0UGFnZXNCdWlsZDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXMvYnVpbGRzXCJdLFxuICAgIHNldEFkbWluQnJhbmNoUHJvdGVjdGlvbjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL2VuZm9yY2VfYWRtaW5zXCJcbiAgICBdLFxuICAgIHNldEFwcEFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL2FwcHNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwiYXBwc1wiIH1cbiAgICBdLFxuICAgIHNldFN0YXR1c0NoZWNrQ29udGV4dHM6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3MvY29udGV4dHNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwiY29udGV4dHNcIiB9XG4gICAgXSxcbiAgICBzZXRUZWFtQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdGVhbXNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwidGVhbXNcIiB9XG4gICAgXSxcbiAgICBzZXRVc2VyQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdXNlcnNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwidXNlcnNcIiB9XG4gICAgXSxcbiAgICB0ZXN0UHVzaFdlYmhvb2s6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS90ZXN0c1wiXSxcbiAgICB0cmFuc2ZlcjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vdHJhbnNmZXJcIl0sXG4gICAgdXBkYXRlOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb31cIl0sXG4gICAgdXBkYXRlQnJhbmNoUHJvdGVjdGlvbjogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb25cIlxuICAgIF0sXG4gICAgdXBkYXRlQ29tbWl0Q29tbWVudDogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICB1cGRhdGVEZXBsb3ltZW50QnJhbmNoUG9saWN5OiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50LWJyYW5jaC1wb2xpY2llcy97YnJhbmNoX3BvbGljeV9pZH1cIlxuICAgIF0sXG4gICAgdXBkYXRlSW5mb3JtYXRpb25BYm91dFBhZ2VzU2l0ZTogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlc1wiXSxcbiAgICB1cGRhdGVJbnZpdGF0aW9uOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIlxuICAgIF0sXG4gICAgdXBkYXRlT3JnUnVsZXNldDogW1wiUFVUIC9vcmdzL3tvcmd9L3J1bGVzZXRzL3tydWxlc2V0X2lkfVwiXSxcbiAgICB1cGRhdGVQdWxsUmVxdWVzdFJldmlld1Byb3RlY3Rpb246IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfcHVsbF9yZXF1ZXN0X3Jldmlld3NcIlxuICAgIF0sXG4gICAgdXBkYXRlUmVsZWFzZTogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfVwiXSxcbiAgICB1cGRhdGVSZWxlYXNlQXNzZXQ6IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL2Fzc2V0cy97YXNzZXRfaWR9XCJcbiAgICBdLFxuICAgIHVwZGF0ZVJlcG9SdWxlc2V0OiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzL3tydWxlc2V0X2lkfVwiXSxcbiAgICB1cGRhdGVTdGF0dXNDaGVja1BvdGVjdGlvbjogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zdGF0dXNfY2hlY2tzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wicmVwb3NcIiwgXCJ1cGRhdGVTdGF0dXNDaGVja1Byb3RlY3Rpb25cIl0gfVxuICAgIF0sXG4gICAgdXBkYXRlU3RhdHVzQ2hlY2tQcm90ZWN0aW9uOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3NcIlxuICAgIF0sXG4gICAgdXBkYXRlV2ViaG9vazogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfVwiXSxcbiAgICB1cGRhdGVXZWJob29rQ29uZmlnRm9yUmVwbzogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L2NvbmZpZ1wiXG4gICAgXSxcbiAgICB1cGxvYWRSZWxlYXNlQXNzZXQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9L2Fzc2V0c3s/bmFtZSxsYWJlbH1cIixcbiAgICAgIHsgYmFzZVVybDogXCJodHRwczovL3VwbG9hZHMuZ2l0aHViLmNvbVwiIH1cbiAgICBdXG4gIH0sXG4gIHNlYXJjaDoge1xuICAgIGNvZGU6IFtcIkdFVCAvc2VhcmNoL2NvZGVcIl0sXG4gICAgY29tbWl0czogW1wiR0VUIC9zZWFyY2gvY29tbWl0c1wiXSxcbiAgICBpc3N1ZXNBbmRQdWxsUmVxdWVzdHM6IFtcIkdFVCAvc2VhcmNoL2lzc3Vlc1wiXSxcbiAgICBsYWJlbHM6IFtcIkdFVCAvc2VhcmNoL2xhYmVsc1wiXSxcbiAgICByZXBvczogW1wiR0VUIC9zZWFyY2gvcmVwb3NpdG9yaWVzXCJdLFxuICAgIHRvcGljczogW1wiR0VUIC9zZWFyY2gvdG9waWNzXCJdLFxuICAgIHVzZXJzOiBbXCJHRVQgL3NlYXJjaC91c2Vyc1wiXVxuICB9LFxuICBzZWNyZXRTY2FubmluZzoge1xuICAgIGdldEFsZXJ0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfVwiXG4gICAgXSxcbiAgICBsaXN0QWxlcnRzRm9yRW50ZXJwcmlzZTogW1xuICAgICAgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzXCJcbiAgICBdLFxuICAgIGxpc3RBbGVydHNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzXCJdLFxuICAgIGxpc3RBbGVydHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3JldC1zY2FubmluZy9hbGVydHNcIl0sXG4gICAgbGlzdExvY2F0aW9uc0ZvckFsZXJ0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9sb2NhdGlvbnNcIlxuICAgIF0sXG4gICAgdXBkYXRlQWxlcnQ6IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3JldC1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn1cIlxuICAgIF1cbiAgfSxcbiAgc2VjdXJpdHlBZHZpc29yaWVzOiB7XG4gICAgY3JlYXRlRm9yazogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWN1cml0eS1hZHZpc29yaWVzL3tnaHNhX2lkfS9mb3Jrc1wiXG4gICAgXSxcbiAgICBjcmVhdGVQcml2YXRlVnVsbmVyYWJpbGl0eVJlcG9ydDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWN1cml0eS1hZHZpc29yaWVzL3JlcG9ydHNcIlxuICAgIF0sXG4gICAgY3JlYXRlUmVwb3NpdG9yeUFkdmlzb3J5OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3VyaXR5LWFkdmlzb3JpZXNcIlxuICAgIF0sXG4gICAgY3JlYXRlUmVwb3NpdG9yeUFkdmlzb3J5Q3ZlUmVxdWVzdDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWN1cml0eS1hZHZpc29yaWVzL3tnaHNhX2lkfS9jdmVcIlxuICAgIF0sXG4gICAgZ2V0R2xvYmFsQWR2aXNvcnk6IFtcIkdFVCAvYWR2aXNvcmllcy97Z2hzYV9pZH1cIl0sXG4gICAgZ2V0UmVwb3NpdG9yeUFkdmlzb3J5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjdXJpdHktYWR2aXNvcmllcy97Z2hzYV9pZH1cIlxuICAgIF0sXG4gICAgbGlzdEdsb2JhbEFkdmlzb3JpZXM6IFtcIkdFVCAvYWR2aXNvcmllc1wiXSxcbiAgICBsaXN0T3JnUmVwb3NpdG9yeUFkdmlzb3JpZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9zZWN1cml0eS1hZHZpc29yaWVzXCJdLFxuICAgIGxpc3RSZXBvc2l0b3J5QWR2aXNvcmllczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWN1cml0eS1hZHZpc29yaWVzXCJdLFxuICAgIHVwZGF0ZVJlcG9zaXRvcnlBZHZpc29yeTogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjdXJpdHktYWR2aXNvcmllcy97Z2hzYV9pZH1cIlxuICAgIF1cbiAgfSxcbiAgdGVhbXM6IHtcbiAgICBhZGRPclVwZGF0ZU1lbWJlcnNoaXBGb3JVc2VySW5Pcmc6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L21lbWJlcnNoaXBzL3t1c2VybmFtZX1cIlxuICAgIF0sXG4gICAgYWRkT3JVcGRhdGVQcm9qZWN0UGVybWlzc2lvbnNJbk9yZzogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcHJvamVjdHMve3Byb2plY3RfaWR9XCJcbiAgICBdLFxuICAgIGFkZE9yVXBkYXRlUmVwb1Blcm1pc3Npb25zSW5Pcmc6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3JlcG9zL3tvd25lcn0ve3JlcG99XCJcbiAgICBdLFxuICAgIGNoZWNrUGVybWlzc2lvbnNGb3JQcm9qZWN0SW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3Byb2plY3RzL3twcm9qZWN0X2lkfVwiXG4gICAgXSxcbiAgICBjaGVja1Blcm1pc3Npb25zRm9yUmVwb0luT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9yZXBvcy97b3duZXJ9L3tyZXBvfVwiXG4gICAgXSxcbiAgICBjcmVhdGU6IFtcIlBPU1QgL29yZ3Mve29yZ30vdGVhbXNcIl0sXG4gICAgY3JlYXRlRGlzY3Vzc2lvbkNvbW1lbnRJbk9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHNcIlxuICAgIF0sXG4gICAgY3JlYXRlRGlzY3Vzc2lvbkluT3JnOiBbXCJQT1NUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zXCJdLFxuICAgIGRlbGV0ZURpc2N1c3Npb25Db21tZW50SW5Pcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfbnVtYmVyfVwiXG4gICAgXSxcbiAgICBkZWxldGVEaXNjdXNzaW9uSW5Pcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn1cIlxuICAgIF0sXG4gICAgZGVsZXRlSW5Pcmc6IFtcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfVwiXSxcbiAgICBnZXRCeU5hbWU6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfVwiXSxcbiAgICBnZXREaXNjdXNzaW9uQ29tbWVudEluT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn1cIlxuICAgIF0sXG4gICAgZ2V0RGlzY3Vzc2lvbkluT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9XCJcbiAgICBdLFxuICAgIGdldE1lbWJlcnNoaXBGb3JVc2VySW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L21lbWJlcnNoaXBzL3t1c2VybmFtZX1cIlxuICAgIF0sXG4gICAgbGlzdDogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zXCJdLFxuICAgIGxpc3RDaGlsZEluT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vdGVhbXNcIl0sXG4gICAgbGlzdERpc2N1c3Npb25Db21tZW50c0luT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzXCJcbiAgICBdLFxuICAgIGxpc3REaXNjdXNzaW9uc0luT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnNcIl0sXG4gICAgbGlzdEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvdGVhbXNcIl0sXG4gICAgbGlzdE1lbWJlcnNJbk9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L21lbWJlcnNcIl0sXG4gICAgbGlzdFBlbmRpbmdJbnZpdGF0aW9uc0luT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9pbnZpdGF0aW9uc1wiXG4gICAgXSxcbiAgICBsaXN0UHJvamVjdHNJbk9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3Byb2plY3RzXCJdLFxuICAgIGxpc3RSZXBvc0luT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcmVwb3NcIl0sXG4gICAgcmVtb3ZlTWVtYmVyc2hpcEZvclVzZXJJbk9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiXG4gICAgXSxcbiAgICByZW1vdmVQcm9qZWN0SW5Pcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3Byb2plY3RzL3twcm9qZWN0X2lkfVwiXG4gICAgXSxcbiAgICByZW1vdmVSZXBvSW5Pcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3JlcG9zL3tvd25lcn0ve3JlcG99XCJcbiAgICBdLFxuICAgIHVwZGF0ZURpc2N1c3Npb25Db21tZW50SW5Pcmc6IFtcbiAgICAgIFwiUEFUQ0ggL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9XCJcbiAgICBdLFxuICAgIHVwZGF0ZURpc2N1c3Npb25Jbk9yZzogW1xuICAgICAgXCJQQVRDSCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9XCJcbiAgICBdLFxuICAgIHVwZGF0ZUluT3JnOiBbXCJQQVRDSCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfVwiXVxuICB9LFxuICB1c2Vyczoge1xuICAgIGFkZEVtYWlsRm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJQT1NUIC91c2VyL2VtYWlsc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiYWRkRW1haWxGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBhZGRFbWFpbEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL2VtYWlsc1wiXSxcbiAgICBhZGRTb2NpYWxBY2NvdW50Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvc29jaWFsX2FjY291bnRzXCJdLFxuICAgIGJsb2NrOiBbXCJQVVQgL3VzZXIvYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgY2hlY2tCbG9ja2VkOiBbXCJHRVQgL3VzZXIvYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgY2hlY2tGb2xsb3dpbmdGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZm9sbG93aW5nL3t0YXJnZXRfdXNlcn1cIl0sXG4gICAgY2hlY2tQZXJzb25Jc0ZvbGxvd2VkQnlBdXRoZW50aWNhdGVkOiBbXCJHRVQgL3VzZXIvZm9sbG93aW5nL3t1c2VybmFtZX1cIl0sXG4gICAgY3JlYXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJQT1NUIC91c2VyL2dwZ19rZXlzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJjcmVhdGVHcGdLZXlGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBjcmVhdGVHcGdLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9ncGdfa2V5c1wiXSxcbiAgICBjcmVhdGVQdWJsaWNTc2hLZXlGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIlBPU1QgL3VzZXIva2V5c1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiY3JlYXRlUHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfVxuICAgIF0sXG4gICAgY3JlYXRlUHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIva2V5c1wiXSxcbiAgICBjcmVhdGVTc2hTaWduaW5nS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvc3NoX3NpZ25pbmdfa2V5c1wiXSxcbiAgICBkZWxldGVFbWFpbEZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL2VtYWlsc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiZGVsZXRlRW1haWxGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBkZWxldGVFbWFpbEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvZW1haWxzXCJdLFxuICAgIGRlbGV0ZUdwZ0tleUZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL2dwZ19rZXlzL3tncGdfa2V5X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiZGVsZXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfVxuICAgIF0sXG4gICAgZGVsZXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9ncGdfa2V5cy97Z3BnX2tleV9pZH1cIl0sXG4gICAgZGVsZXRlUHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJERUxFVEUgL3VzZXIva2V5cy97a2V5X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiZGVsZXRlUHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfVxuICAgIF0sXG4gICAgZGVsZXRlUHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9rZXlzL3trZXlfaWR9XCJdLFxuICAgIGRlbGV0ZVNvY2lhbEFjY291bnRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiREVMRVRFIC91c2VyL3NvY2lhbF9hY2NvdW50c1wiXSxcbiAgICBkZWxldGVTc2hTaWduaW5nS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL3NzaF9zaWduaW5nX2tleXMve3NzaF9zaWduaW5nX2tleV9pZH1cIlxuICAgIF0sXG4gICAgZm9sbG93OiBbXCJQVVQgL3VzZXIvZm9sbG93aW5nL3t1c2VybmFtZX1cIl0sXG4gICAgZ2V0QXV0aGVudGljYXRlZDogW1wiR0VUIC91c2VyXCJdLFxuICAgIGdldEJ5VXNlcm5hbWU6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfVwiXSxcbiAgICBnZXRDb250ZXh0Rm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2hvdmVyY2FyZFwiXSxcbiAgICBnZXRHcGdLZXlGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIkdFVCAvdXNlci9ncGdfa2V5cy97Z3BnX2tleV9pZH1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImdldEdwZ0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIGdldEdwZ0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvZ3BnX2tleXMve2dwZ19rZXlfaWR9XCJdLFxuICAgIGdldFB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL2tleXMve2tleV9pZH1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImdldFB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIGdldFB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIva2V5cy97a2V5X2lkfVwiXSxcbiAgICBnZXRTc2hTaWduaW5nS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL3NzaF9zaWduaW5nX2tleXMve3NzaF9zaWduaW5nX2tleV9pZH1cIlxuICAgIF0sXG4gICAgbGlzdDogW1wiR0VUIC91c2Vyc1wiXSxcbiAgICBsaXN0QmxvY2tlZEJ5QXV0aGVudGljYXRlZDogW1xuICAgICAgXCJHRVQgL3VzZXIvYmxvY2tzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJsaXN0QmxvY2tlZEJ5QXV0aGVudGljYXRlZFVzZXJcIl0gfVxuICAgIF0sXG4gICAgbGlzdEJsb2NrZWRCeUF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvYmxvY2tzXCJdLFxuICAgIGxpc3RFbWFpbHNGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIkdFVCAvdXNlci9lbWFpbHNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImxpc3RFbWFpbHNGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBsaXN0RW1haWxzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9lbWFpbHNcIl0sXG4gICAgbGlzdEZvbGxvd2VkQnlBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIkdFVCAvdXNlci9mb2xsb3dpbmdcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImxpc3RGb2xsb3dlZEJ5QXV0aGVudGljYXRlZFVzZXJcIl0gfVxuICAgIF0sXG4gICAgbGlzdEZvbGxvd2VkQnlBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2ZvbGxvd2luZ1wiXSxcbiAgICBsaXN0Rm9sbG93ZXJzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9mb2xsb3dlcnNcIl0sXG4gICAgbGlzdEZvbGxvd2Vyc0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9mb2xsb3dlcnNcIl0sXG4gICAgbGlzdEZvbGxvd2luZ0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9mb2xsb3dpbmdcIl0sXG4gICAgbGlzdEdwZ0tleXNGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIkdFVCAvdXNlci9ncGdfa2V5c1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwibGlzdEdwZ0tleXNGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBsaXN0R3BnS2V5c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvZ3BnX2tleXNcIl0sXG4gICAgbGlzdEdwZ0tleXNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZ3BnX2tleXNcIl0sXG4gICAgbGlzdFB1YmxpY0VtYWlsc0ZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL3B1YmxpY19lbWFpbHNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImxpc3RQdWJsaWNFbWFpbHNGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBsaXN0UHVibGljRW1haWxzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9wdWJsaWNfZW1haWxzXCJdLFxuICAgIGxpc3RQdWJsaWNLZXlzRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2tleXNcIl0sXG4gICAgbGlzdFB1YmxpY1NzaEtleXNGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIkdFVCAvdXNlci9rZXlzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJsaXN0UHVibGljU3NoS2V5c0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIGxpc3RQdWJsaWNTc2hLZXlzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9rZXlzXCJdLFxuICAgIGxpc3RTb2NpYWxBY2NvdW50c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvc29jaWFsX2FjY291bnRzXCJdLFxuICAgIGxpc3RTb2NpYWxBY2NvdW50c0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zb2NpYWxfYWNjb3VudHNcIl0sXG4gICAgbGlzdFNzaFNpZ25pbmdLZXlzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9zc2hfc2lnbmluZ19rZXlzXCJdLFxuICAgIGxpc3RTc2hTaWduaW5nS2V5c0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zc2hfc2lnbmluZ19rZXlzXCJdLFxuICAgIHNldFByaW1hcnlFbWFpbFZpc2liaWxpdHlGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIlBBVENIIC91c2VyL2VtYWlsL3Zpc2liaWxpdHlcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcInNldFByaW1hcnlFbWFpbFZpc2liaWxpdHlGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBzZXRQcmltYXJ5RW1haWxWaXNpYmlsaXR5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUEFUQ0ggL3VzZXIvZW1haWwvdmlzaWJpbGl0eVwiXG4gICAgXSxcbiAgICB1bmJsb2NrOiBbXCJERUxFVEUgL3VzZXIvYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgdW5mb2xsb3c6IFtcIkRFTEVURSAvdXNlci9mb2xsb3dpbmcve3VzZXJuYW1lfVwiXSxcbiAgICB1cGRhdGVBdXRoZW50aWNhdGVkOiBbXCJQQVRDSCAvdXNlclwiXVxuICB9XG59O1xudmFyIGVuZHBvaW50c19kZWZhdWx0ID0gRW5kcG9pbnRzO1xuXG4vLyBwa2cvZGlzdC1zcmMvZW5kcG9pbnRzLXRvLW1ldGhvZHMuanNcbnZhciBlbmRwb2ludE1ldGhvZHNNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuZm9yIChjb25zdCBbc2NvcGUsIGVuZHBvaW50c10gb2YgT2JqZWN0LmVudHJpZXMoZW5kcG9pbnRzX2RlZmF1bHQpKSB7XG4gIGZvciAoY29uc3QgW21ldGhvZE5hbWUsIGVuZHBvaW50XSBvZiBPYmplY3QuZW50cmllcyhlbmRwb2ludHMpKSB7XG4gICAgY29uc3QgW3JvdXRlLCBkZWZhdWx0cywgZGVjb3JhdGlvbnNdID0gZW5kcG9pbnQ7XG4gICAgY29uc3QgW21ldGhvZCwgdXJsXSA9IHJvdXRlLnNwbGl0KC8gLyk7XG4gICAgY29uc3QgZW5kcG9pbnREZWZhdWx0cyA9IE9iamVjdC5hc3NpZ24oXG4gICAgICB7XG4gICAgICAgIG1ldGhvZCxcbiAgICAgICAgdXJsXG4gICAgICB9LFxuICAgICAgZGVmYXVsdHNcbiAgICApO1xuICAgIGlmICghZW5kcG9pbnRNZXRob2RzTWFwLmhhcyhzY29wZSkpIHtcbiAgICAgIGVuZHBvaW50TWV0aG9kc01hcC5zZXQoc2NvcGUsIC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCkpO1xuICAgIH1cbiAgICBlbmRwb2ludE1ldGhvZHNNYXAuZ2V0KHNjb3BlKS5zZXQobWV0aG9kTmFtZSwge1xuICAgICAgc2NvcGUsXG4gICAgICBtZXRob2ROYW1lLFxuICAgICAgZW5kcG9pbnREZWZhdWx0cyxcbiAgICAgIGRlY29yYXRpb25zXG4gICAgfSk7XG4gIH1cbn1cbnZhciBoYW5kbGVyID0ge1xuICBoYXMoeyBzY29wZSB9LCBtZXRob2ROYW1lKSB7XG4gICAgcmV0dXJuIGVuZHBvaW50TWV0aG9kc01hcC5nZXQoc2NvcGUpLmhhcyhtZXRob2ROYW1lKTtcbiAgfSxcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgbWV0aG9kTmFtZSkge1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdGhpcy5nZXQodGFyZ2V0LCBtZXRob2ROYW1lKSxcbiAgICAgIC8vIGVuc3VyZXMgbWV0aG9kIGlzIGluIHRoZSBjYWNoZVxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgfTtcbiAgfSxcbiAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBtZXRob2ROYW1lLCBkZXNjcmlwdG9yKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldC5jYWNoZSwgbWV0aG9kTmFtZSwgZGVzY3JpcHRvcik7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG4gIGRlbGV0ZVByb3BlcnR5KHRhcmdldCwgbWV0aG9kTmFtZSkge1xuICAgIGRlbGV0ZSB0YXJnZXQuY2FjaGVbbWV0aG9kTmFtZV07XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG4gIG93bktleXMoeyBzY29wZSB9KSB7XG4gICAgcmV0dXJuIFsuLi5lbmRwb2ludE1ldGhvZHNNYXAuZ2V0KHNjb3BlKS5rZXlzKCldO1xuICB9LFxuICBzZXQodGFyZ2V0LCBtZXRob2ROYW1lLCB2YWx1ZSkge1xuICAgIHJldHVybiB0YXJnZXQuY2FjaGVbbWV0aG9kTmFtZV0gPSB2YWx1ZTtcbiAgfSxcbiAgZ2V0KHsgb2N0b2tpdCwgc2NvcGUsIGNhY2hlIH0sIG1ldGhvZE5hbWUpIHtcbiAgICBpZiAoY2FjaGVbbWV0aG9kTmFtZV0pIHtcbiAgICAgIHJldHVybiBjYWNoZVttZXRob2ROYW1lXTtcbiAgICB9XG4gICAgY29uc3QgbWV0aG9kID0gZW5kcG9pbnRNZXRob2RzTWFwLmdldChzY29wZSkuZ2V0KG1ldGhvZE5hbWUpO1xuICAgIGlmICghbWV0aG9kKSB7XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cbiAgICBjb25zdCB7IGVuZHBvaW50RGVmYXVsdHMsIGRlY29yYXRpb25zIH0gPSBtZXRob2Q7XG4gICAgaWYgKGRlY29yYXRpb25zKSB7XG4gICAgICBjYWNoZVttZXRob2ROYW1lXSA9IGRlY29yYXRlKFxuICAgICAgICBvY3Rva2l0LFxuICAgICAgICBzY29wZSxcbiAgICAgICAgbWV0aG9kTmFtZSxcbiAgICAgICAgZW5kcG9pbnREZWZhdWx0cyxcbiAgICAgICAgZGVjb3JhdGlvbnNcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhY2hlW21ldGhvZE5hbWVdID0gb2N0b2tpdC5yZXF1ZXN0LmRlZmF1bHRzKGVuZHBvaW50RGVmYXVsdHMpO1xuICAgIH1cbiAgICByZXR1cm4gY2FjaGVbbWV0aG9kTmFtZV07XG4gIH1cbn07XG5mdW5jdGlvbiBlbmRwb2ludHNUb01ldGhvZHMob2N0b2tpdCkge1xuICBjb25zdCBuZXdNZXRob2RzID0ge307XG4gIGZvciAoY29uc3Qgc2NvcGUgb2YgZW5kcG9pbnRNZXRob2RzTWFwLmtleXMoKSkge1xuICAgIG5ld01ldGhvZHNbc2NvcGVdID0gbmV3IFByb3h5KHsgb2N0b2tpdCwgc2NvcGUsIGNhY2hlOiB7fSB9LCBoYW5kbGVyKTtcbiAgfVxuICByZXR1cm4gbmV3TWV0aG9kcztcbn1cbmZ1bmN0aW9uIGRlY29yYXRlKG9jdG9raXQsIHNjb3BlLCBtZXRob2ROYW1lLCBkZWZhdWx0cywgZGVjb3JhdGlvbnMpIHtcbiAgY29uc3QgcmVxdWVzdFdpdGhEZWZhdWx0cyA9IG9jdG9raXQucmVxdWVzdC5kZWZhdWx0cyhkZWZhdWx0cyk7XG4gIGZ1bmN0aW9uIHdpdGhEZWNvcmF0aW9ucyguLi5hcmdzKSB7XG4gICAgbGV0IG9wdGlvbnMgPSByZXF1ZXN0V2l0aERlZmF1bHRzLmVuZHBvaW50Lm1lcmdlKC4uLmFyZ3MpO1xuICAgIGlmIChkZWNvcmF0aW9ucy5tYXBUb0RhdGEpIHtcbiAgICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLCB7XG4gICAgICAgIGRhdGE6IG9wdGlvbnNbZGVjb3JhdGlvbnMubWFwVG9EYXRhXSxcbiAgICAgICAgW2RlY29yYXRpb25zLm1hcFRvRGF0YV06IHZvaWQgMFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVxdWVzdFdpdGhEZWZhdWx0cyhvcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKGRlY29yYXRpb25zLnJlbmFtZWQpIHtcbiAgICAgIGNvbnN0IFtuZXdTY29wZSwgbmV3TWV0aG9kTmFtZV0gPSBkZWNvcmF0aW9ucy5yZW5hbWVkO1xuICAgICAgb2N0b2tpdC5sb2cud2FybihcbiAgICAgICAgYG9jdG9raXQuJHtzY29wZX0uJHttZXRob2ROYW1lfSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gb2N0b2tpdC4ke25ld1Njb3BlfS4ke25ld01ldGhvZE5hbWV9KClgXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoZGVjb3JhdGlvbnMuZGVwcmVjYXRlZCkge1xuICAgICAgb2N0b2tpdC5sb2cud2FybihkZWNvcmF0aW9ucy5kZXByZWNhdGVkKTtcbiAgICB9XG4gICAgaWYgKGRlY29yYXRpb25zLnJlbmFtZWRQYXJhbWV0ZXJzKSB7XG4gICAgICBjb25zdCBvcHRpb25zMiA9IHJlcXVlc3RXaXRoRGVmYXVsdHMuZW5kcG9pbnQubWVyZ2UoLi4uYXJncyk7XG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCBhbGlhc10gb2YgT2JqZWN0LmVudHJpZXMoXG4gICAgICAgIGRlY29yYXRpb25zLnJlbmFtZWRQYXJhbWV0ZXJzXG4gICAgICApKSB7XG4gICAgICAgIGlmIChuYW1lIGluIG9wdGlvbnMyKSB7XG4gICAgICAgICAgb2N0b2tpdC5sb2cud2FybihcbiAgICAgICAgICAgIGBcIiR7bmFtZX1cIiBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZCBmb3IgXCJvY3Rva2l0LiR7c2NvcGV9LiR7bWV0aG9kTmFtZX0oKVwiLiBVc2UgXCIke2FsaWFzfVwiIGluc3RlYWRgXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoIShhbGlhcyBpbiBvcHRpb25zMikpIHtcbiAgICAgICAgICAgIG9wdGlvbnMyW2FsaWFzXSA9IG9wdGlvbnMyW25hbWVdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkZWxldGUgb3B0aW9uczJbbmFtZV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXF1ZXN0V2l0aERlZmF1bHRzKG9wdGlvbnMyKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcXVlc3RXaXRoRGVmYXVsdHMoLi4uYXJncyk7XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24od2l0aERlY29yYXRpb25zLCByZXF1ZXN0V2l0aERlZmF1bHRzKTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG5mdW5jdGlvbiByZXN0RW5kcG9pbnRNZXRob2RzKG9jdG9raXQpIHtcbiAgY29uc3QgYXBpID0gZW5kcG9pbnRzVG9NZXRob2RzKG9jdG9raXQpO1xuICByZXR1cm4ge1xuICAgIHJlc3Q6IGFwaVxuICB9O1xufVxucmVzdEVuZHBvaW50TWV0aG9kcy5WRVJTSU9OID0gVkVSU0lPTjtcbmZ1bmN0aW9uIGxlZ2FjeVJlc3RFbmRwb2ludE1ldGhvZHMob2N0b2tpdCkge1xuICBjb25zdCBhcGkgPSBlbmRwb2ludHNUb01ldGhvZHMob2N0b2tpdCk7XG4gIHJldHVybiB7XG4gICAgLi4uYXBpLFxuICAgIHJlc3Q6IGFwaVxuICB9O1xufVxubGVnYWN5UmVzdEVuZHBvaW50TWV0aG9kcy5WRVJTSU9OID0gVkVSU0lPTjtcbi8vIEFubm90YXRlIHRoZSBDb21tb25KUyBleHBvcnQgbmFtZXMgZm9yIEVTTSBpbXBvcnQgaW4gbm9kZTpcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICBsZWdhY3lSZXN0RW5kcG9pbnRNZXRob2RzLFxuICByZXN0RW5kcG9pbnRNZXRob2RzXG59KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIF9fZ2V0T3duUHJvcE5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XG52YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX2V4cG9ydCA9ICh0YXJnZXQsIGFsbCkgPT4ge1xuICBmb3IgKHZhciBuYW1lIGluIGFsbClcbiAgICBfX2RlZlByb3AodGFyZ2V0LCBuYW1lLCB7IGdldDogYWxsW25hbWVdLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xufTtcbnZhciBfX2NvcHlQcm9wcyA9ICh0bywgZnJvbSwgZXhjZXB0LCBkZXNjKSA9PiB7XG4gIGlmIChmcm9tICYmIHR5cGVvZiBmcm9tID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBmcm9tID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBmb3IgKGxldCBrZXkgb2YgX19nZXRPd25Qcm9wTmFtZXMoZnJvbSkpXG4gICAgICBpZiAoIV9faGFzT3duUHJvcC5jYWxsKHRvLCBrZXkpICYmIGtleSAhPT0gZXhjZXB0KVxuICAgICAgICBfX2RlZlByb3AodG8sIGtleSwgeyBnZXQ6ICgpID0+IGZyb21ba2V5XSwgZW51bWVyYWJsZTogIShkZXNjID0gX19nZXRPd25Qcm9wRGVzYyhmcm9tLCBrZXkpKSB8fCBkZXNjLmVudW1lcmFibGUgfSk7XG4gIH1cbiAgcmV0dXJuIHRvO1xufTtcbnZhciBfX3RvQ29tbW9uSlMgPSAobW9kKSA9PiBfX2NvcHlQcm9wcyhfX2RlZlByb3Aoe30sIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pLCBtb2QpO1xuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbnZhciBkaXN0X3NyY19leHBvcnRzID0ge307XG5fX2V4cG9ydChkaXN0X3NyY19leHBvcnRzLCB7XG4gIGNvbXBvc2VQYWdpbmF0ZVJlc3Q6ICgpID0+IGNvbXBvc2VQYWdpbmF0ZVJlc3QsXG4gIGlzUGFnaW5hdGluZ0VuZHBvaW50OiAoKSA9PiBpc1BhZ2luYXRpbmdFbmRwb2ludCxcbiAgcGFnaW5hdGVSZXN0OiAoKSA9PiBwYWdpbmF0ZVJlc3QsXG4gIHBhZ2luYXRpbmdFbmRwb2ludHM6ICgpID0+IHBhZ2luYXRpbmdFbmRwb2ludHNcbn0pO1xubW9kdWxlLmV4cG9ydHMgPSBfX3RvQ29tbW9uSlMoZGlzdF9zcmNfZXhwb3J0cyk7XG5cbi8vIHBrZy9kaXN0LXNyYy92ZXJzaW9uLmpzXG52YXIgVkVSU0lPTiA9IFwiOS4yLjFcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL25vcm1hbGl6ZS1wYWdpbmF0ZWQtbGlzdC1yZXNwb25zZS5qc1xuZnVuY3Rpb24gbm9ybWFsaXplUGFnaW5hdGVkTGlzdFJlc3BvbnNlKHJlc3BvbnNlKSB7XG4gIGlmICghcmVzcG9uc2UuZGF0YSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5yZXNwb25zZSxcbiAgICAgIGRhdGE6IFtdXG4gICAgfTtcbiAgfVxuICBjb25zdCByZXNwb25zZU5lZWRzTm9ybWFsaXphdGlvbiA9IFwidG90YWxfY291bnRcIiBpbiByZXNwb25zZS5kYXRhICYmICEoXCJ1cmxcIiBpbiByZXNwb25zZS5kYXRhKTtcbiAgaWYgKCFyZXNwb25zZU5lZWRzTm9ybWFsaXphdGlvbilcbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIGNvbnN0IGluY29tcGxldGVSZXN1bHRzID0gcmVzcG9uc2UuZGF0YS5pbmNvbXBsZXRlX3Jlc3VsdHM7XG4gIGNvbnN0IHJlcG9zaXRvcnlTZWxlY3Rpb24gPSByZXNwb25zZS5kYXRhLnJlcG9zaXRvcnlfc2VsZWN0aW9uO1xuICBjb25zdCB0b3RhbENvdW50ID0gcmVzcG9uc2UuZGF0YS50b3RhbF9jb3VudDtcbiAgZGVsZXRlIHJlc3BvbnNlLmRhdGEuaW5jb21wbGV0ZV9yZXN1bHRzO1xuICBkZWxldGUgcmVzcG9uc2UuZGF0YS5yZXBvc2l0b3J5X3NlbGVjdGlvbjtcbiAgZGVsZXRlIHJlc3BvbnNlLmRhdGEudG90YWxfY291bnQ7XG4gIGNvbnN0IG5hbWVzcGFjZUtleSA9IE9iamVjdC5rZXlzKHJlc3BvbnNlLmRhdGEpWzBdO1xuICBjb25zdCBkYXRhID0gcmVzcG9uc2UuZGF0YVtuYW1lc3BhY2VLZXldO1xuICByZXNwb25zZS5kYXRhID0gZGF0YTtcbiAgaWYgKHR5cGVvZiBpbmNvbXBsZXRlUmVzdWx0cyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJlc3BvbnNlLmRhdGEuaW5jb21wbGV0ZV9yZXN1bHRzID0gaW5jb21wbGV0ZVJlc3VsdHM7XG4gIH1cbiAgaWYgKHR5cGVvZiByZXBvc2l0b3J5U2VsZWN0aW9uICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmVzcG9uc2UuZGF0YS5yZXBvc2l0b3J5X3NlbGVjdGlvbiA9IHJlcG9zaXRvcnlTZWxlY3Rpb247XG4gIH1cbiAgcmVzcG9uc2UuZGF0YS50b3RhbF9jb3VudCA9IHRvdGFsQ291bnQ7XG4gIHJldHVybiByZXNwb25zZTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2l0ZXJhdG9yLmpzXG5mdW5jdGlvbiBpdGVyYXRvcihvY3Rva2l0LCByb3V0ZSwgcGFyYW1ldGVycykge1xuICBjb25zdCBvcHRpb25zID0gdHlwZW9mIHJvdXRlID09PSBcImZ1bmN0aW9uXCIgPyByb3V0ZS5lbmRwb2ludChwYXJhbWV0ZXJzKSA6IG9jdG9raXQucmVxdWVzdC5lbmRwb2ludChyb3V0ZSwgcGFyYW1ldGVycyk7XG4gIGNvbnN0IHJlcXVlc3RNZXRob2QgPSB0eXBlb2Ygcm91dGUgPT09IFwiZnVuY3Rpb25cIiA/IHJvdXRlIDogb2N0b2tpdC5yZXF1ZXN0O1xuICBjb25zdCBtZXRob2QgPSBvcHRpb25zLm1ldGhvZDtcbiAgY29uc3QgaGVhZGVycyA9IG9wdGlvbnMuaGVhZGVycztcbiAgbGV0IHVybCA9IG9wdGlvbnMudXJsO1xuICByZXR1cm4ge1xuICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl06ICgpID0+ICh7XG4gICAgICBhc3luYyBuZXh0KCkge1xuICAgICAgICBpZiAoIXVybClcbiAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlIH07XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0TWV0aG9kKHsgbWV0aG9kLCB1cmwsIGhlYWRlcnMgfSk7XG4gICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFJlc3BvbnNlID0gbm9ybWFsaXplUGFnaW5hdGVkTGlzdFJlc3BvbnNlKHJlc3BvbnNlKTtcbiAgICAgICAgICB1cmwgPSAoKG5vcm1hbGl6ZWRSZXNwb25zZS5oZWFkZXJzLmxpbmsgfHwgXCJcIikubWF0Y2goXG4gICAgICAgICAgICAvPChbXj5dKyk+O1xccypyZWw9XCJuZXh0XCIvXG4gICAgICAgICAgKSB8fCBbXSlbMV07XG4gICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG5vcm1hbGl6ZWRSZXNwb25zZSB9O1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGlmIChlcnJvci5zdGF0dXMgIT09IDQwOSlcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgIHVybCA9IFwiXCI7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgIHN0YXR1czogMjAwLFxuICAgICAgICAgICAgICBoZWFkZXJzOiB7fSxcbiAgICAgICAgICAgICAgZGF0YTogW11cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3BhZ2luYXRlLmpzXG5mdW5jdGlvbiBwYWdpbmF0ZShvY3Rva2l0LCByb3V0ZSwgcGFyYW1ldGVycywgbWFwRm4pIHtcbiAgaWYgKHR5cGVvZiBwYXJhbWV0ZXJzID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBtYXBGbiA9IHBhcmFtZXRlcnM7XG4gICAgcGFyYW1ldGVycyA9IHZvaWQgMDtcbiAgfVxuICByZXR1cm4gZ2F0aGVyKFxuICAgIG9jdG9raXQsXG4gICAgW10sXG4gICAgaXRlcmF0b3Iob2N0b2tpdCwgcm91dGUsIHBhcmFtZXRlcnMpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpLFxuICAgIG1hcEZuXG4gICk7XG59XG5mdW5jdGlvbiBnYXRoZXIob2N0b2tpdCwgcmVzdWx0cywgaXRlcmF0b3IyLCBtYXBGbikge1xuICByZXR1cm4gaXRlcmF0b3IyLm5leHQoKS50aGVuKChyZXN1bHQpID0+IHtcbiAgICBpZiAocmVzdWx0LmRvbmUpIHtcbiAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbiAgICBsZXQgZWFybHlFeGl0ID0gZmFsc2U7XG4gICAgZnVuY3Rpb24gZG9uZSgpIHtcbiAgICAgIGVhcmx5RXhpdCA9IHRydWU7XG4gICAgfVxuICAgIHJlc3VsdHMgPSByZXN1bHRzLmNvbmNhdChcbiAgICAgIG1hcEZuID8gbWFwRm4ocmVzdWx0LnZhbHVlLCBkb25lKSA6IHJlc3VsdC52YWx1ZS5kYXRhXG4gICAgKTtcbiAgICBpZiAoZWFybHlFeGl0KSB7XG4gICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG4gICAgcmV0dXJuIGdhdGhlcihvY3Rva2l0LCByZXN1bHRzLCBpdGVyYXRvcjIsIG1hcEZuKTtcbiAgfSk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9jb21wb3NlLXBhZ2luYXRlLmpzXG52YXIgY29tcG9zZVBhZ2luYXRlUmVzdCA9IE9iamVjdC5hc3NpZ24ocGFnaW5hdGUsIHtcbiAgaXRlcmF0b3Jcbn0pO1xuXG4vLyBwa2cvZGlzdC1zcmMvZ2VuZXJhdGVkL3BhZ2luYXRpbmctZW5kcG9pbnRzLmpzXG52YXIgcGFnaW5hdGluZ0VuZHBvaW50cyA9IFtcbiAgXCJHRVQgL2Fkdmlzb3JpZXNcIixcbiAgXCJHRVQgL2FwcC9ob29rL2RlbGl2ZXJpZXNcIixcbiAgXCJHRVQgL2FwcC9pbnN0YWxsYXRpb24tcmVxdWVzdHNcIixcbiAgXCJHRVQgL2FwcC9pbnN0YWxsYXRpb25zXCIsXG4gIFwiR0VUIC9hc3NpZ25tZW50cy97YXNzaWdubWVudF9pZH0vYWNjZXB0ZWRfYXNzaWdubWVudHNcIixcbiAgXCJHRVQgL2NsYXNzcm9vbXNcIixcbiAgXCJHRVQgL2NsYXNzcm9vbXMve2NsYXNzcm9vbV9pZH0vYXNzaWdubWVudHNcIixcbiAgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9kZXBlbmRhYm90L2FsZXJ0c1wiLFxuICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L3NlY3JldC1zY2FubmluZy9hbGVydHNcIixcbiAgXCJHRVQgL2V2ZW50c1wiLFxuICBcIkdFVCAvZ2lzdHNcIixcbiAgXCJHRVQgL2dpc3RzL3B1YmxpY1wiLFxuICBcIkdFVCAvZ2lzdHMvc3RhcnJlZFwiLFxuICBcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L2NvbW1lbnRzXCIsXG4gIFwiR0VUIC9naXN0cy97Z2lzdF9pZH0vY29tbWl0c1wiLFxuICBcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L2ZvcmtzXCIsXG4gIFwiR0VUIC9pbnN0YWxsYXRpb24vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9pc3N1ZXNcIixcbiAgXCJHRVQgL2xpY2Vuc2VzXCIsXG4gIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3BsYW5zXCIsXG4gIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3BsYW5zL3twbGFuX2lkfS9hY2NvdW50c1wiLFxuICBcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9zdHViYmVkL3BsYW5zXCIsXG4gIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3N0dWJiZWQvcGxhbnMve3BsYW5faWR9L2FjY291bnRzXCIsXG4gIFwiR0VUIC9uZXR3b3Jrcy97b3duZXJ9L3tyZXBvfS9ldmVudHNcIixcbiAgXCJHRVQgL25vdGlmaWNhdGlvbnNcIixcbiAgXCJHRVQgL29yZ2FuaXphdGlvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9jYWNoZS91c2FnZS1ieS1yZXBvc2l0b3J5XCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVyc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvdmFyaWFibGVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvdmFyaWFibGVzL3tuYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYmxvY2tzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2NvZGUtc2Nhbm5pbmcvYWxlcnRzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmcvc2VhdHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9hbGVydHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9ldmVudHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vZmFpbGVkX2ludml0YXRpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2hvb2tzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2luc3RhbGxhdGlvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vaW52aXRhdGlvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9L3RlYW1zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2lzc3Vlc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9tZW1iZXJzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfS9jb2Rlc3BhY2VzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3tyb2xlX2lkfS90ZWFtc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMve3JvbGVfaWR9L3VzZXJzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L291dHNpZGVfY29sbGFib3JhdG9yc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wYWNrYWdlc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW4tcmVxdWVzdHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2VuLXJlcXVlc3RzL3twYXRfcmVxdWVzdF9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2Vucy97cGF0X2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcHJvamVjdHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcHJvcGVydGllcy92YWx1ZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcHVibGljX21lbWJlcnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcmVwb3NcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHMvcnVsZS1zdWl0ZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9zZWN1cml0eS1hZHZpc29yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9pbnZpdGF0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9tZW1iZXJzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3Byb2plY3RzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3JlcG9zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3RlYW1zXCIsXG4gIFwiR0VUIC9wcm9qZWN0cy9jb2x1bW5zL3tjb2x1bW5faWR9L2NhcmRzXCIsXG4gIFwiR0VUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sbGFib3JhdG9yc1wiLFxuICBcIkdFVCAvcHJvamVjdHMve3Byb2plY3RfaWR9L2NvbHVtbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvYXJ0aWZhY3RzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2NhY2hlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9vcmdhbml6YXRpb24tc2VjcmV0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9vcmdhbml6YXRpb24tdmFyaWFibGVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVuc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2FydGlmYWN0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2F0dGVtcHRzL3thdHRlbXB0X251bWJlcn0vam9ic1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2pvYnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvc2VjcmV0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy92YXJpYWJsZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvd29ya2Zsb3dzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L3J1bnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGl2aXR5XCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hc3NpZ25lZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1ydW5zL3tjaGVja19ydW5faWR9L2Fubm90YXRpb25zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1zdWl0ZXMve2NoZWNrX3N1aXRlX2lkfS9jaGVjay1ydW5zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn0vaW5zdGFuY2VzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FuYWx5c2VzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL2RldmNvbnRhaW5lcnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvc2VjcmV0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29sbGFib3JhdG9yc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve2NvbW1pdF9zaGF9L2NvbW1lbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tjb21taXRfc2hhfS9wdWxsc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfS9jaGVjay1ydW5zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L2NoZWNrLXN1aXRlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfS9zdGF0dXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vc3RhdHVzZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbnRyaWJ1dG9yc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9hbGVydHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3Qvc2VjcmV0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGxveW1lbnRzL3tkZXBsb3ltZW50X2lkfS9zdGF0dXNlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnQtYnJhbmNoLXBvbGljaWVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnRfcHJvdGVjdGlvbl9ydWxlcy9hcHBzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ldmVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ZvcmtzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludml0YXRpb25zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9ldmVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9jb21tZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2V2ZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xhYmVsc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L3RpbWVsaW5lXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9rZXlzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sYWJlbHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXMve21pbGVzdG9uZV9udW1iZXJ9L2xhYmVsc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbm90aWZpY2F0aW9uc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXMvYnVpbGRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wcm9qZWN0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2NvbW1lbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2NvbW1pdHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vZmlsZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzL3tyZXZpZXdfaWR9L2NvbW1lbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9L2Fzc2V0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXMvYnJhbmNoZXMve2JyYW5jaH1cIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlc2V0cy9ydWxlLXN1aXRlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9sb2NhdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3VyaXR5LWFkdmlzb3JpZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXJnYXplcnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmliZXJzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YWdzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90ZWFtc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdG9waWNzXCIsXG4gIFwiR0VUIC9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH0vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9zZWNyZXRzXCIsXG4gIFwiR0VUIC9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vdmFyaWFibGVzXCIsXG4gIFwiR0VUIC9zZWFyY2gvY29kZVwiLFxuICBcIkdFVCAvc2VhcmNoL2NvbW1pdHNcIixcbiAgXCJHRVQgL3NlYXJjaC9pc3N1ZXNcIixcbiAgXCJHRVQgL3NlYXJjaC9sYWJlbHNcIixcbiAgXCJHRVQgL3NlYXJjaC9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL3NlYXJjaC90b3BpY3NcIixcbiAgXCJHRVQgL3NlYXJjaC91c2Vyc1wiLFxuICBcIkdFVCAvdGVhbXMve3RlYW1faWR9L2Rpc2N1c3Npb25zXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50c1wiLFxuICBcIkdFVCAvdGVhbXMve3RlYW1faWR9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfbnVtYmVyfS9yZWFjdGlvbnNcIixcbiAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvdGVhbXMve3RlYW1faWR9L2ludml0YXRpb25zXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vbWVtYmVyc1wiLFxuICBcIkdFVCAvdGVhbXMve3RlYW1faWR9L3Byb2plY3RzXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vcmVwb3NcIixcbiAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS90ZWFtc1wiLFxuICBcIkdFVCAvdXNlci9ibG9ja3NcIixcbiAgXCJHRVQgL3VzZXIvY29kZXNwYWNlc1wiLFxuICBcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHNcIixcbiAgXCJHRVQgL3VzZXIvZW1haWxzXCIsXG4gIFwiR0VUIC91c2VyL2ZvbGxvd2Vyc1wiLFxuICBcIkdFVCAvdXNlci9mb2xsb3dpbmdcIixcbiAgXCJHRVQgL3VzZXIvZ3BnX2tleXNcIixcbiAgXCJHRVQgL3VzZXIvaW5zdGFsbGF0aW9uc1wiLFxuICBcIkdFVCAvdXNlci9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvdXNlci9pc3N1ZXNcIixcbiAgXCJHRVQgL3VzZXIva2V5c1wiLFxuICBcIkdFVCAvdXNlci9tYXJrZXRwbGFjZV9wdXJjaGFzZXNcIixcbiAgXCJHRVQgL3VzZXIvbWFya2V0cGxhY2VfcHVyY2hhc2VzL3N0dWJiZWRcIixcbiAgXCJHRVQgL3VzZXIvbWVtYmVyc2hpcHMvb3Jnc1wiLFxuICBcIkdFVCAvdXNlci9taWdyYXRpb25zXCIsXG4gIFwiR0VUIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC91c2VyL29yZ3NcIixcbiAgXCJHRVQgL3VzZXIvcGFja2FnZXNcIixcbiAgXCJHRVQgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIixcbiAgXCJHRVQgL3VzZXIvcHVibGljX2VtYWlsc1wiLFxuICBcIkdFVCAvdXNlci9yZXBvc1wiLFxuICBcIkdFVCAvdXNlci9yZXBvc2l0b3J5X2ludml0YXRpb25zXCIsXG4gIFwiR0VUIC91c2VyL3NvY2lhbF9hY2NvdW50c1wiLFxuICBcIkdFVCAvdXNlci9zc2hfc2lnbmluZ19rZXlzXCIsXG4gIFwiR0VUIC91c2VyL3N0YXJyZWRcIixcbiAgXCJHRVQgL3VzZXIvc3Vic2NyaXB0aW9uc1wiLFxuICBcIkdFVCAvdXNlci90ZWFtc1wiLFxuICBcIkdFVCAvdXNlcnNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2V2ZW50cy9vcmdzL3tvcmd9XCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2V2ZW50cy9wdWJsaWNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZm9sbG93ZXJzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2ZvbGxvd2luZ1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9naXN0c1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ncGdfa2V5c1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9rZXlzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L29yZ3NcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcHJvamVjdHNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcmVjZWl2ZWRfZXZlbnRzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3JlY2VpdmVkX2V2ZW50cy9wdWJsaWNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcmVwb3NcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc29jaWFsX2FjY291bnRzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NzaF9zaWduaW5nX2tleXNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc3RhcnJlZFwiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zdWJzY3JpcHRpb25zXCJcbl07XG5cbi8vIHBrZy9kaXN0LXNyYy9wYWdpbmF0aW5nLWVuZHBvaW50cy5qc1xuZnVuY3Rpb24gaXNQYWdpbmF0aW5nRW5kcG9pbnQoYXJnKSB7XG4gIGlmICh0eXBlb2YgYXJnID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIHBhZ2luYXRpbmdFbmRwb2ludHMuaW5jbHVkZXMoYXJnKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG5mdW5jdGlvbiBwYWdpbmF0ZVJlc3Qob2N0b2tpdCkge1xuICByZXR1cm4ge1xuICAgIHBhZ2luYXRlOiBPYmplY3QuYXNzaWduKHBhZ2luYXRlLmJpbmQobnVsbCwgb2N0b2tpdCksIHtcbiAgICAgIGl0ZXJhdG9yOiBpdGVyYXRvci5iaW5kKG51bGwsIG9jdG9raXQpXG4gICAgfSlcbiAgfTtcbn1cbnBhZ2luYXRlUmVzdC5WRVJTSU9OID0gVkVSU0lPTjtcbi8vIEFubm90YXRlIHRoZSBDb21tb25KUyBleHBvcnQgbmFtZXMgZm9yIEVTTSBpbXBvcnQgaW4gbm9kZTpcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICBjb21wb3NlUGFnaW5hdGVSZXN0LFxuICBpc1BhZ2luYXRpbmdFbmRwb2ludCxcbiAgcGFnaW5hdGVSZXN0LFxuICBwYWdpbmF0aW5nRW5kcG9pbnRzXG59KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0T2N0b2tpdE9wdGlvbnMgPSBleHBvcnRzLkdpdEh1YiA9IGV4cG9ydHMuZGVmYXVsdHMgPSBleHBvcnRzLmNvbnRleHQgPSB2b2lkIDA7XG5jb25zdCBDb250ZXh0ID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL2NvbnRleHRcIikpO1xuY29uc3QgVXRpbHMgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIi4vaW50ZXJuYWwvdXRpbHNcIikpO1xuLy8gb2N0b2tpdCArIHBsdWdpbnNcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCJAb2N0b2tpdC9jb3JlXCIpO1xuY29uc3QgcGx1Z2luX3Jlc3RfZW5kcG9pbnRfbWV0aG9kc18xID0gcmVxdWlyZShcIkBvY3Rva2l0L3BsdWdpbi1yZXN0LWVuZHBvaW50LW1ldGhvZHNcIik7XG5jb25zdCBwbHVnaW5fcGFnaW5hdGVfcmVzdF8xID0gcmVxdWlyZShcIkBvY3Rva2l0L3BsdWdpbi1wYWdpbmF0ZS1yZXN0XCIpO1xuZXhwb3J0cy5jb250ZXh0ID0gbmV3IENvbnRleHQuQ29udGV4dCgpO1xuY29uc3QgYmFzZVVybCA9IFV0aWxzLmdldEFwaUJhc2VVcmwoKTtcbmV4cG9ydHMuZGVmYXVsdHMgPSB7XG4gICAgYmFzZVVybCxcbiAgICByZXF1ZXN0OiB7XG4gICAgICAgIGFnZW50OiBVdGlscy5nZXRQcm94eUFnZW50KGJhc2VVcmwpLFxuICAgICAgICBmZXRjaDogVXRpbHMuZ2V0UHJveHlGZXRjaChiYXNlVXJsKVxuICAgIH1cbn07XG5leHBvcnRzLkdpdEh1YiA9IGNvcmVfMS5PY3Rva2l0LnBsdWdpbihwbHVnaW5fcmVzdF9lbmRwb2ludF9tZXRob2RzXzEucmVzdEVuZHBvaW50TWV0aG9kcywgcGx1Z2luX3BhZ2luYXRlX3Jlc3RfMS5wYWdpbmF0ZVJlc3QpLmRlZmF1bHRzKGV4cG9ydHMuZGVmYXVsdHMpO1xuLyoqXG4gKiBDb252aWVuY2UgZnVuY3Rpb24gdG8gY29ycmVjdGx5IGZvcm1hdCBPY3Rva2l0IE9wdGlvbnMgdG8gcGFzcyBpbnRvIHRoZSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gICAgIHRva2VuICAgIHRoZSByZXBvIFBBVCBvciBHSVRIVUJfVE9LRU5cbiAqIEBwYXJhbSAgICAgb3B0aW9ucyAgb3RoZXIgb3B0aW9ucyB0byBzZXRcbiAqL1xuZnVuY3Rpb24gZ2V0T2N0b2tpdE9wdGlvbnModG9rZW4sIG9wdGlvbnMpIHtcbiAgICBjb25zdCBvcHRzID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyB8fCB7fSk7IC8vIFNoYWxsb3cgY2xvbmUgLSBkb24ndCBtdXRhdGUgdGhlIG9iamVjdCBwcm92aWRlZCBieSB0aGUgY2FsbGVyXG4gICAgLy8gQXV0aFxuICAgIGNvbnN0IGF1dGggPSBVdGlscy5nZXRBdXRoU3RyaW5nKHRva2VuLCBvcHRzKTtcbiAgICBpZiAoYXV0aCkge1xuICAgICAgICBvcHRzLmF1dGggPSBhdXRoO1xuICAgIH1cbiAgICByZXR1cm4gb3B0cztcbn1cbmV4cG9ydHMuZ2V0T2N0b2tpdE9wdGlvbnMgPSBnZXRPY3Rva2l0T3B0aW9ucztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0T2N0b2tpdCA9IGV4cG9ydHMuY29udGV4dCA9IHZvaWQgMDtcbmNvbnN0IENvbnRleHQgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIi4vY29udGV4dFwiKSk7XG5jb25zdCB1dGlsc18xID0gcmVxdWlyZShcIi4vdXRpbHNcIik7XG5leHBvcnRzLmNvbnRleHQgPSBuZXcgQ29udGV4dC5Db250ZXh0KCk7XG4vKipcbiAqIFJldHVybnMgYSBoeWRyYXRlZCBvY3Rva2l0IHJlYWR5IHRvIHVzZSBmb3IgR2l0SHViIEFjdGlvbnNcbiAqXG4gKiBAcGFyYW0gICAgIHRva2VuICAgIHRoZSByZXBvIFBBVCBvciBHSVRIVUJfVE9LRU5cbiAqIEBwYXJhbSAgICAgb3B0aW9ucyAgb3RoZXIgb3B0aW9ucyB0byBzZXRcbiAqL1xuZnVuY3Rpb24gZ2V0T2N0b2tpdCh0b2tlbiwgb3B0aW9ucywgLi4uYWRkaXRpb25hbFBsdWdpbnMpIHtcbiAgICBjb25zdCBHaXRIdWJXaXRoUGx1Z2lucyA9IHV0aWxzXzEuR2l0SHViLnBsdWdpbiguLi5hZGRpdGlvbmFsUGx1Z2lucyk7XG4gICAgcmV0dXJuIG5ldyBHaXRIdWJXaXRoUGx1Z2lucygoMCwgdXRpbHNfMS5nZXRPY3Rva2l0T3B0aW9ucykodG9rZW4sIG9wdGlvbnMpKTtcbn1cbmV4cG9ydHMuZ2V0T2N0b2tpdCA9IGdldE9jdG9raXQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1naXRodWIuanMubWFwIiwKICAgICJpbXBvcnQgKiBhcyBmcyBmcm9tICdub2RlOmZzJ1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdub2RlOnBhdGgnXG5pbXBvcnQgeyBkZWJ1ZywgZ2V0SW5wdXQsIHNhdmVTdGF0ZSB9IGZyb20gJ0BhY3Rpb25zL2NvcmUnXG5pbXBvcnQgeyBleGVjIH0gZnJvbSAnQGFjdGlvbnMvZXhlYydcbmltcG9ydCB7IGdlbmVyYXRlQ29tcG9zZUZpbGUsIHByb21ldGhldXNDb25maWcsIHlkYkNvbmZpZyB9IGZyb20gJy4uL2NvbmZpZ3MnXG5pbXBvcnQgeyBjb250ZXh0IH0gZnJvbSAnQGFjdGlvbnMvZ2l0aHViJ1xuXG4oYXN5bmMgZnVuY3Rpb24gbWFpbigpIHtcblx0ZGVidWcoSlNPTi5zdHJpbmdpZnkoY29udGV4dCwgbnVsbCwgNCkpXG5cblx0bGV0IGN3ZCA9IHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBcIi5zbG9cIilcblx0c2F2ZVN0YXRlKFwiQ1dEXCIsIGN3ZClcblxuXHRkZWJ1ZyhcIkNyZWF0aW5nIHdvcmtpbmcgZGlyZWN0b3J5Li4uXCIpXG5cdGZzLm1rZGlyU3luYyhjd2QsIHsgcmVjdXJzaXZlOiB0cnVlIH0pXG5cblx0e1xuXHRcdGRlYnVnKFwiQ3JlYXRpbmcgeWRiIGNvbmZpZy4uLlwiKVxuXHRcdGxldCBjb25maWdQYXRoID0gcGF0aC5qb2luKGN3ZCwgXCJ5ZGIueWFtbFwiKVxuXHRcdGxldCBjb25maWdDb250ZW50ID0geWRiQ29uZmlnXG5cdFx0ZnMud3JpdGVGaWxlU3luYyhjb25maWdQYXRoLCBjb25maWdDb250ZW50LCB7IGVuY29kaW5nOiBcInV0Zi04XCIgfSlcblx0XHRkZWJ1ZyhgQ3JlYXRlZCBjb25maWcgZm9yIHlkYjogJHtjb25maWdQYXRofWApXG5cdH1cblxuXHR7XG5cdFx0ZGVidWcoXCJDcmVhdGluZyBwcm9tZXRoZXVzIGNvbmZpZy4uLlwiKVxuXHRcdGxldCBjb25maWdQYXRoID0gcGF0aC5qb2luKGN3ZCwgXCJwcm9tZXRoZXVzLnltbFwiKVxuXHRcdGxldCBjb25maWdDb250ZW50ID0gcHJvbWV0aGV1c0NvbmZpZ1xuXHRcdGZzLndyaXRlRmlsZVN5bmMoY29uZmlnUGF0aCwgY29uZmlnQ29udGVudCwgeyBlbmNvZGluZzogXCJ1dGYtOFwiIH0pXG5cdFx0ZGVidWcoYENyZWF0ZWQgY29uZmlnIGZvciBwcm9tZXRoZXVzOiAke2NvbmZpZ1BhdGh9YClcblx0fVxuXG5cdHtcblx0XHRkZWJ1ZyhcIkNyZWF0aW5nIGNvbXBvc2UgY29uZmlnLi4uXCIpXG5cdFx0bGV0IGNvbXBvc2VQYXRoID0gcGF0aC5qb2luKGN3ZCwgXCJjb21wb3NlLnlhbWxcIilcblx0XHRsZXQgY29tcG9zZUNvbnRlbnQgPSBnZW5lcmF0ZUNvbXBvc2VGaWxlKHBhcnNlSW50KGdldElucHV0KFwiWURCX0RBVEFCQVNFX05PREVfQ09VTlRcIiwgeyByZXF1aXJlZDogdHJ1ZSB9KSkpXG5cdFx0ZnMud3JpdGVGaWxlU3luYyhjb21wb3NlUGF0aCwgY29tcG9zZUNvbnRlbnQsIHsgZW5jb2Rpbmc6IFwidXRmLThcIiB9KVxuXHRcdGRlYnVnKGBDcmVhdGVkIGNvbXBvc2UueWFtbDogJHtjb21wb3NlUGF0aH1gKVxuXHR9XG5cblx0ZGVidWcoXCJTdGFydGluZyBZREIuLi5cIilcblx0YXdhaXQgZXhlYyhgZG9ja2VyYCwgW2Bjb21wb3NlYCwgYC1mYCwgYGNvbXBvc2UueWFtbGAsIGB1cGAsIGAtLXF1aWV0LXB1bGxgLCBgLWRgXSwgeyBjd2QgfSlcblxuXHRsZXQgc3RhcnQgPSBuZXcgRGF0ZSgpXG5cdGRlYnVnKGBZREIgc3RhcnRlZCBhdCAke3N0YXJ0fWApXG5cdHNhdmVTdGF0ZShcIllEQl9TVEFSVF9USU1FXCIsIHN0YXJ0LnRvSVNPU3RyaW5nKCkpXG59KSgpXG4iLAogICAgIi8vIEhvc3RcbmV4cG9ydCBjb25zdCBIT1NUID0gJ2xvY2FsaG9zdCdcblxuLy8gWURCIFN0YXRpYyBub2RlIGNvbmZpZ3VyYXRpb24uIFByZWZlcmUgZG8gbm90IGVkaXQuXG5leHBvcnQgY29uc3QgWURCX0dSUENfUE9SVCA9IDIxMzVcbmV4cG9ydCBjb25zdCBZREJfTU9OX1BPUlQgPSA4NzY1XG5leHBvcnQgY29uc3QgWURCX0lDX1BPUlQgPSAxOTAwMVxuZXhwb3J0IGNvbnN0IFlEQl9URU5BTlQgPSAnL1Jvb3QvdGVzdGRiJ1xuXG4vLyBQYXNzIGludG8gd29ya2xvYWRcbmV4cG9ydCBjb25zdCBZREJfRU5EUE9JTlQgPSBgZ3JwYzovLyR7SE9TVH06JHtZREJfR1JQQ19QT1JUfWBcbmV4cG9ydCBjb25zdCBZQkRfQ09OTkVDVElPTl9TVFJJTkcgPSBgJHtZREJfRU5EUE9JTlR9JHtZREJfVEVOQU5UfWBcblxuZXhwb3J0IGNvbnN0IFBST01FVEhFVVNfUE9SVCA9IDkwOTBcbmV4cG9ydCBjb25zdCBQUk9NRVRIRVVTX1BVU0hHQVRFV0FZX1BPUlQgPSA5MDkxXG5cbmV4cG9ydCBjb25zdCBQUk9NRVRIRVVTX1VSTCA9IGBodHRwOi8vJHtIT1NUfToke1BST01FVEhFVVNfUE9SVH1gXG5leHBvcnQgY29uc3QgUFJPTUVUSEVVU19QVVNIR0FURVdBWV9VUkwgPSBgaHR0cDovLyR7SE9TVH06JHtQUk9NRVRIRVVTX1BVU0hHQVRFV0FZX1BPUlR9YFxuIiwKICAgICJpbXBvcnQge1xuXHRIT1NULFxuXHRQUk9NRVRIRVVTX1BPUlQsXG5cdFBST01FVEhFVVNfUFVTSEdBVEVXQVlfUE9SVCxcblx0WURCX0VORFBPSU5ULFxuXHRZREJfR1JQQ19QT1JULFxuXHRZREJfSUNfUE9SVCxcblx0WURCX01PTl9QT1JULFxuXHRZREJfVEVOQU5ULFxufSBmcm9tICcuL2NvbnN0YW50cydcblxuZXhwb3J0IGNvbnN0IHByb21ldGhldXNDb25maWcgPSAvKiogWUFNTCAqLyBgXG5nbG9iYWw6XG4gIHNjcmFwZV9pbnRlcnZhbDogMXNcbiAgZXZhbHVhdGlvbl9pbnRlcnZhbDogMXNcblxuc2NyYXBlX2NvbmZpZ3M6XG4gIC0gam9iX25hbWU6ICdwdXNoZ2F0ZXdheSdcbiAgICBzdGF0aWNfY29uZmlnczpcbiAgICAgIC0gdGFyZ2V0czogWycke0hPU1R9OiR7UFJPTUVUSEVVU19QVVNIR0FURVdBWV9QT1JUfSddXG5gXG5cbmV4cG9ydCBjb25zdCB5ZGJDb25maWcgPSAvKiogWUFNTCAqLyBgXG5hY3Rvcl9zeXN0ZW1fY29uZmlnOlxuICBjcHVfY291bnQ6IDFcbiAgbm9kZV90eXBlOiBTVE9SQUdFXG4gIHVzZV9hdXRvX2NvbmZpZzogdHJ1ZVxuYmxvYl9zdG9yYWdlX2NvbmZpZzpcbiAgc2VydmljZV9zZXQ6XG4gICAgZ3JvdXBzOlxuICAgICAgLSBlcmFzdXJlX3NwZWNpZXM6IG5vbmVcbiAgICAgICAgcmluZ3M6XG4gICAgICAgICAgLSBmYWlsX2RvbWFpbnM6XG4gICAgICAgICAgICAgIC0gdmRpc2tfbG9jYXRpb25zOlxuICAgICAgICAgICAgICAgICAgLSBub2RlX2lkOiAxXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IFNlY3Rvck1hcDoxOjY0XG4gICAgICAgICAgICAgICAgICAgIHBkaXNrX2NhdGVnb3J5OiBTU0RcbmNoYW5uZWxfcHJvZmlsZV9jb25maWc6XG4gIHByb2ZpbGU6XG4gICAgLSBjaGFubmVsOlxuICAgICAgICAtIGVyYXN1cmVfc3BlY2llczogbm9uZVxuICAgICAgICAgIHBkaXNrX2NhdGVnb3J5OiAwXG4gICAgICAgICAgc3RvcmFnZV9wb29sX2tpbmQ6IHNzZFxuICAgICAgICAtIGVyYXN1cmVfc3BlY2llczogbm9uZVxuICAgICAgICAgIHBkaXNrX2NhdGVnb3J5OiAwXG4gICAgICAgICAgc3RvcmFnZV9wb29sX2tpbmQ6IHNzZFxuICAgICAgICAtIGVyYXN1cmVfc3BlY2llczogbm9uZVxuICAgICAgICAgIHBkaXNrX2NhdGVnb3J5OiAwXG4gICAgICAgICAgc3RvcmFnZV9wb29sX2tpbmQ6IHNzZFxuICAgICAgcHJvZmlsZV9pZDogMFxuZG9tYWluc19jb25maWc6XG4gIGRvbWFpbjpcbiAgICAtIG5hbWU6IFJvb3RcbiAgICAgIHN0b3JhZ2VfcG9vbF90eXBlczpcbiAgICAgICAgLSBraW5kOiBzc2RcbiAgICAgICAgICBwb29sX2NvbmZpZzpcbiAgICAgICAgICAgIGJveF9pZDogMVxuICAgICAgICAgICAgZXJhc3VyZV9zcGVjaWVzOiBub25lXG4gICAgICAgICAgICBraW5kOiBzc2RcbiAgICAgICAgICAgIHBkaXNrX2ZpbHRlcjpcbiAgICAgICAgICAgICAgLSBwcm9wZXJ0eTpcbiAgICAgICAgICAgICAgICAgIC0gdHlwZTogU1NEXG4gICAgICAgICAgICB2ZGlza19raW5kOiBEZWZhdWx0XG4gIHN0YXRlX3N0b3JhZ2U6XG4gICAgLSByaW5nOlxuICAgICAgICBub2RlOlxuICAgICAgICAgIC0gMVxuICAgICAgICBudG9fc2VsZWN0OiAxXG4gICAgICBzc2lkOiAxXG5ncnBjX2NvbmZpZzpcbiAgcG9ydDogJHtZREJfR1JQQ19QT1JUfVxuaG9zdF9jb25maWdzOlxuICAtIGRyaXZlOlxuICAgICAgLSBwYXRoOiBTZWN0b3JNYXA6MTo2NFxuICAgICAgICB0eXBlOiBTU0RcbiAgICBob3N0X2NvbmZpZ19pZDogMVxuaG9zdHM6XG4gIC0gaG9zdDogJHtIT1NUfVxuICAgIGhvc3RfY29uZmlnX2lkOiAxXG4gICAgbm9kZV9pZDogMVxuICAgIHBvcnQ6ICR7WURCX0lDX1BPUlR9XG4gICAgd2FsbGVfbG9jYXRpb246XG4gICAgICBib2R5OiAxXG4gICAgICBkYXRhX2NlbnRlcjogYXotMVxuICAgICAgcmFjazogXCIwXCJcbnN0YXRpY19lcmFzdXJlOiBub25lXG5gXG5cbi8vIEdlbmVyYXRlIFlEQiBTdGF0aWMgTm9kZVxubGV0IGdlbmVyYXRlU3RhdGljTm9kZSA9ICgpID0+XG5cdC8qKiBZQU1MICovIGBcbiAgc3RhdGljLTA6XG4gICAgPDw6ICp5ZGItY29tbW9uXG4gICAgY29udGFpbmVyX25hbWU6IHlkYi1zdGF0aWMtMFxuICAgIGNvbW1hbmQ6XG4gICAgICAtIC9vcHQveWRiL2Jpbi95ZGJkXG4gICAgICAtIHNlcnZlclxuICAgICAgLSAtLWdycGMtcG9ydFxuICAgICAgLSBcIiR7WURCX0dSUENfUE9SVH1cIlxuICAgICAgLSAtLW1vbi1wb3J0XG4gICAgICAtIFwiJHtZREJfTU9OX1BPUlR9XCJcbiAgICAgIC0gLS1pYy1wb3J0XG4gICAgICAtIFwiJHtZREJfSUNfUE9SVH1cIlxuICAgICAgLSAtLXlhbWwtY29uZmlnXG4gICAgICAtIC9vcHQveWRiL2NmZy9jb25maWcueWFtbFxuICAgICAgLSAtLW5vZGVcbiAgICAgIC0gc3RhdGljXG4gICAgICAtIC0tbGFiZWxcbiAgICAgIC0gZGVwbG95bWVudD1kb2NrZXJcbiAgICBwb3J0czpcbiAgICAgIC0gJHtZREJfR1JQQ19QT1JUfToke1lEQl9HUlBDX1BPUlR9XG4gICAgICAtICR7WURCX01PTl9QT1JUfToke1lEQl9NT05fUE9SVH1cbiAgICAgIC0gJHtZREJfSUNfUE9SVH06JHtZREJfSUNfUE9SVH1cbiAgICBoZWFsdGhjaGVjazpcbiAgICAgIHRlc3Q6IGJhc2ggLWMgXCJleGVjIDY8PiAvZGV2L3RjcC8ke0hPU1R9LyR7WURCX0dSUENfUE9SVH1cIlxuICAgICAgaW50ZXJ2YWw6IDEwc1xuICAgICAgdGltZW91dDogMXNcbiAgICAgIHJldHJpZXM6IDNcbiAgICAgIHN0YXJ0X3BlcmlvZDogMzBzXG4gICAgZGVwbG95OlxuICAgICAgPDw6ICp5ZGItZGVwbG95XG5cbiAgc3RhdGljLWluaXQ6XG4gICAgPDw6ICp5ZGItY29tbW9uXG4gICAgcmVzdGFydDogb24tZmFpbHVyZVxuICAgIGNvbnRhaW5lcl9uYW1lOiB5ZGItc3RhdGljLWluaXRcbiAgICBjb21tYW5kOlxuICAgICAgLSAvb3B0L3lkYi9iaW4veWRiZFxuICAgICAgLSAtc1xuICAgICAgLSAke1lEQl9FTkRQT0lOVH1cbiAgICAgIC0gYWRtaW5cbiAgICAgIC0gYmxvYnN0b3JhZ2VcbiAgICAgIC0gY29uZmlnXG4gICAgICAtIGluaXRcbiAgICAgIC0gLS15YW1sLWZpbGVcbiAgICAgIC0gL29wdC95ZGIvY2ZnL2NvbmZpZy55YW1sXG4gICAgZGVwZW5kc19vbjpcbiAgICAgIHN0YXRpYy0wOlxuICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeVxuXG4gIHRlbmFudC1pbml0OlxuICAgIDw8OiAqeWRiLWNvbW1vblxuICAgIHJlc3RhcnQ6IG9uLWZhaWx1cmVcbiAgICBjb250YWluZXJfbmFtZTogeWRiLXRlbmFudC1pbml0XG4gICAgY29tbWFuZDpcbiAgICAgIC0gL29wdC95ZGIvYmluL3lkYmRcbiAgICAgIC0gLXNcbiAgICAgIC0gJHtZREJfRU5EUE9JTlR9XG4gICAgICAtIGFkbWluXG4gICAgICAtIGRhdGFiYXNlXG4gICAgICAtICR7WURCX1RFTkFOVH1cbiAgICAgIC0gY3JlYXRlXG4gICAgICAtIHNzZDoxXG4gICAgZGVwZW5kc19vbjpcbiAgICAgIHN0YXRpYy1pbml0OlxuICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfY29tcGxldGVkX3N1Y2Nlc3NmdWxseVxuYC5zbGljZSgxKVxuXG4vLyBHZW5lcmF0ZSBZREIgRHluYW1pYyBOb2RlXG5sZXQgZ2VuZXJhdGVEeW5hbWljTm9kZSA9IChpZHg6IG51bWJlcikgPT5cblx0LyoqIFlBTUwgKi8gYFxuICBkeW5hbWljLSR7aWR4fTpcbiAgICA8PDogKnlkYi1jb21tb25cbiAgICBjb250YWluZXJfbmFtZTogeWRiLWR5bmFtaWMtJHtpZHh9XG4gICAgY29tbWFuZDpcbiAgICAgIC0gL29wdC95ZGIvYmluL3lkYmRcbiAgICAgIC0gc2VydmVyXG4gICAgICAtIC0tZ3JwYy1wb3J0XG4gICAgICAtIFwiJHtZREJfR1JQQ19QT1JUICsgaWR4fVwiXG4gICAgICAtIC0tbW9uLXBvcnRcbiAgICAgIC0gXCIke1lEQl9NT05fUE9SVCArIGlkeH1cIlxuICAgICAgLSAtLWljLXBvcnRcbiAgICAgIC0gXCIke1lEQl9JQ19QT1JUICsgaWR4fVwiXG4gICAgICAtIC0teWFtbC1jb25maWdcbiAgICAgIC0gL29wdC95ZGIvY2ZnL2NvbmZpZy55YW1sXG4gICAgICAtIC0tdGVuYW50XG4gICAgICAtICR7WURCX1RFTkFOVH1cbiAgICAgIC0gLS1ub2RlLWJyb2tlclxuICAgICAgLSAke1lEQl9FTkRQT0lOVH1cbiAgICAgIC0gLS1sYWJlbFxuICAgICAgLSBkZXBsb3ltZW50PWRvY2tlclxuICAgIHBvcnRzOlxuICAgICAgLSAke1lEQl9HUlBDX1BPUlQgKyBpZHh9OiR7WURCX0dSUENfUE9SVCArIGlkeH1cbiAgICAgIC0gJHtZREJfTU9OX1BPUlQgKyBpZHh9OiR7WURCX01PTl9QT1JUICsgaWR4fVxuICAgICAgLSAke1lEQl9JQ19QT1JUICsgaWR4fToke1lEQl9JQ19QT1JUICsgaWR4fVxuICAgIGhlYWx0aGNoZWNrOlxuICAgICAgdGVzdDogYmFzaCAtYyBcImV4ZWMgNjw+IC9kZXYvdGNwLyR7SE9TVH0vJHtZREJfR1JQQ19QT1JUICsgaWR4fVwiXG4gICAgICBpbnRlcnZhbDogMTBzXG4gICAgICB0aW1lb3V0OiAxc1xuICAgICAgcmV0cmllczogM1xuICAgICAgc3RhcnRfcGVyaW9kOiAzMHNcbiAgICBkZXBlbmRzX29uOlxuICAgICAgc3RhdGljLTA6XG4gICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5XG4gICAgICBzdGF0aWMtaW5pdDpcbiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2NvbXBsZXRlZF9zdWNjZXNzZnVsbHlcbiAgICAgIHRlbmFudC1pbml0OlxuICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfY29tcGxldGVkX3N1Y2Nlc3NmdWxseVxuICAgIGRlcGxveTpcbiAgICAgIDw8OiAqeWRiLWRlcGxveVxuYC5zbGljZSgxKVxuXG4vLyBHZW5lcmF0ZSBNb25pdG9yaW5nXG5sZXQgZ2VuZXJhdGVNb25pdG9yaW5nID0gKCkgPT5cblx0LyoqIFlBTUwgKi8gYFxuICBwcm9tZXRoZXVzOlxuICAgIGltYWdlOiBwcm9tL3Byb21ldGhldXNcbiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZFxuICAgIDw8OiAqcnVudGltZVxuICAgIHBvcnRzOlxuICAgICAgLSBcIiR7UFJPTUVUSEVVU19QT1JUfToke1BST01FVEhFVVNfUE9SVH1cIlxuICAgIHZvbHVtZXM6XG4gICAgICAtIC4vcHJvbWV0aGV1cy55bWw6L2V0Yy9wcm9tZXRoZXVzL3Byb21ldGhldXMueW1sXG4gICAgZGVwbG95OiAmbW9uaXRvcmluZy1kZXBsb3lcbiAgICAgIHJlc291cmNlczpcbiAgICAgICAgbGltaXRzOlxuICAgICAgICAgIGNwdXM6ICcwLjEnXG4gICAgICAgICAgbWVtb3J5OiAxMDAwTVxuICAgICAgICByZXNlcnZhdGlvbnM6XG4gICAgICAgICAgY3B1czogJzAuMDAxJ1xuICAgICAgICAgIG1lbW9yeTogNTBNXG5cbiAgcHJvbWV0aGV1cy1wdXNoZ2F0ZXdheTpcbiAgICBpbWFnZTogcHJvbS9wdXNoZ2F0ZXdheVxuICAgIHJlc3RhcnQ6IHVubGVzcy1zdG9wcGVkXG4gICAgPDw6ICpydW50aW1lXG4gICAgcG9ydHM6XG4gICAgICAtIFwiJHtQUk9NRVRIRVVTX1BVU0hHQVRFV0FZX1BPUlR9OiR7UFJPTUVUSEVVU19QVVNIR0FURVdBWV9QT1JUfVwiXG4gICAgbmV0d29ya19tb2RlOiBob3N0XG4gICAgZGVwbG95OlxuICAgICAgPDw6ICptb25pdG9yaW5nLWRlcGxveVxuYC5zbGljZSgxKVxuXG4vLyBHZW5lcmF0ZSBDb21wb3NlXG5leHBvcnQgbGV0IGdlbmVyYXRlQ29tcG9zZUZpbGUgPSAoXG5cdHlkYkRhdGFiYXNlTm9kZUNvdW50OiBudW1iZXJcbikgPT4gLyoqIFlBTUwgKi8gYCMgQ29kZSBnZW5lcmF0ZWQgYnkgR2l0aHViIEFjdGlvbjsgRE8gTk9UIEVESVQuXG5cbngtcnVudGltZTogJnJ1bnRpbWVcbiAgcGxhdGZvcm06IGxpbnV4L2FtZDY0XG4gIHByaXZpbGVnZWQ6IHRydWVcbiAgbmV0d29ya19tb2RlOiBob3N0XG5cbngtbm9kZTogJnlkYi1jb21tb25cbiAgaW1hZ2U6IGNyLnlhbmRleC9jcnB0cW9udW9kZjUxa2RqN2E3ZC95ZGI6MjQuMi43XG4gIHJlc3RhcnQ6IGFsd2F5c1xuICBob3N0bmFtZTogJHtIT1NUfVxuICA8PDogKnJ1bnRpbWVcbiAgdm9sdW1lczpcbiAgICAtIC4veWRiLnlhbWw6L29wdC95ZGIvY2ZnL2NvbmZpZy55YW1sXG5cbngtZGVwbG95OiAmeWRiLWRlcGxveVxuICByZXN0YXJ0X3BvbGljeTpcbiAgICBjb25kaXRpb246IGFueVxuICByZXNvdXJjZXM6XG4gICAgbGltaXRzOlxuICAgICAgY3B1czogJzEnXG4gICAgICBtZW1vcnk6IDEwMDBNXG4gICAgcmVzZXJ2YXRpb25zOlxuICAgICAgY3B1czogJzAuMSdcbiAgICAgIG1lbW9yeTogMjUwTVxuXG5uYW1lOiB5ZGJcblxuc2VydmljZXM6XG4ke2dlbmVyYXRlU3RhdGljTm9kZSgpfVxuJHtBcnJheS5mcm9tKHsgbGVuZ3RoOiB5ZGJEYXRhYmFzZU5vZGVDb3VudCB9LCAoXywgaSkgPT4gaSArIDEpXG5cdC5tYXAoZ2VuZXJhdGVEeW5hbWljTm9kZSlcblx0LmpvaW4oJ1xcbicpfVxuJHtnZW5lcmF0ZU1vbml0b3JpbmcoKX1cbmBcbiIKICBdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR0EsU0FBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQzVELEVBQVEsOEJBQThCLHlCQUFzQjtBQUs1RCxXQUFTLGNBQWMsQ0FBQyxPQUFPO0FBQzNCLFFBQUksVUFBVSxRQUFRLFVBQVUsV0FBVztBQUN2QyxhQUFPO0FBQUEsSUFDWCxrQkFDZ0IsVUFBVSxZQUFZLGlCQUFpQixRQUFRO0FBQzNELGFBQU87QUFBQSxJQUNYO0FBQ0EsV0FBTyxLQUFLLFVBQVUsS0FBSztBQUFBO0FBRS9CLEVBQVEseUJBQWlCO0FBT3pCLFdBQVMsbUJBQW1CLENBQUMsc0JBQXNCO0FBQy9DLFNBQUssT0FBTyxLQUFLLG9CQUFvQixFQUFFLFFBQVE7QUFDM0MsYUFBTyxDQUFDO0FBQUEsSUFDWjtBQUNBLFdBQU87QUFBQSxNQUNILE9BQU8scUJBQXFCO0FBQUEsTUFDNUIsTUFBTSxxQkFBcUI7QUFBQSxNQUMzQixNQUFNLHFCQUFxQjtBQUFBLE1BQzNCLFNBQVMscUJBQXFCO0FBQUEsTUFDOUIsS0FBSyxxQkFBcUI7QUFBQSxNQUMxQixXQUFXLHFCQUFxQjtBQUFBLElBQ3BDO0FBQUE7QUFFSixFQUFRLDhCQUFzQjtBQUFBOzs7O0FDckM5QixNQUFJLGtCQUFtQixXQUFRLFFBQUssb0JBQXFCLE9BQU8saUJBQWtCLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSTtBQUM1RixRQUFJLE9BQU87QUFB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SUFDM0I7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFB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TUFBTSxhQUFhO0FBRW5CLE1BQU0sZ0JBQWdCO0FBQUEsSUFDcEIsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUE7QUFBQSxJQUFRLE9BQU87QUFBQTtBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FB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ZTtBQUFBO0FBQUE7QUFBQTtBQUszQyxTQUFPLFVBQVU7QUFBQTs7OztBQ3BCakIsU0FBTyxVQUFVO0FBQUE7Ozs7QUNBakIsU0FBTyxVQUFVO0FBQUE7Ozs7QUNNakIsTUFBTTtBQUNOLE1BQU07QUFDTixNQUFNO0FBQ04sUUFBUTtBQUNSLE1BQU07QUFDTixNQUFNO0FBQ04sTUFBTTtBQUNOLE1BQU07QUFDTjtBQUFBLElBQ0U7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBO0FBRUYsTUFBTTtBQUNOO0FBQUEsSUFDRTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBRUE7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBO0FBSUYsTUFBSTtBQUNKLE1BQUk7QUFDRjtBQUFBLFVBQ0E7QUFFQSxZQUFRLEVBQUUsV0FBVyxDQUFDLEVBQUU7QUFBQTtBQUcxQjtBQUFBLElBQ0U7QUFB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QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7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LE1BQUksc0JBQXNCO0FBQUEsSUFDeEI7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJ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 +//# debugId=80E1FBCC91D9264164756E2164756E21 +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2NvcmUvbGliL3V0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9jb3JlL2xpYi9jb21tYW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9jb3JlL2xpYi9maWxlLWNvbW1hbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2h0dHAtY2xpZW50L2xpYi9wcm94eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdHVubmVsL2xpYi90dW5uZWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29yZS9zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvZXJyb3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvY29uc3RhbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi90aW1lcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9kZXBzL3N0cmVhbXNlYXJjaC9zYm1oLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZmFzdGlmeS9idXNib3kvZGVwcy9kaWNlci9saWIvUGFydFN0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGZhc3RpZnkvYnVzYm95L2xpYi91dGlscy9nZXRMaW1pdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGZhc3RpZnkvYnVzYm95L2RlcHMvZGljZXIvbGliL0hlYWRlclBhcnNlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGZhc3RpZnkvYnVzYm95L2RlcHMvZGljZXIvbGliL0RpY2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZmFzdGlmeS9idXNib3kvbGliL3V0aWxzL2RlY29kZVRleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9saWIvdXRpbHMvcGFyc2VQYXJhbXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9saWIvdXRpbHMvYmFzZW5hbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9saWIvdHlwZXMvbXVsdGlwYXJ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZmFzdGlmeS9idXNib3kvbGliL3V0aWxzL0RlY29kZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9saWIvdHlwZXMvdXJsZW5jb2RlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGZhc3RpZnkvYnVzYm95L2xpYi9tYWluLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL2NvbnN0YW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9mZXRjaC9nbG9iYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9mZXRjaC9zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL3dlYmlkbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9mZXRjaC9kYXRhVVJMLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL2ZpbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvZm9ybWRhdGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvYm9keS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb3JlL3JlcXVlc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9kaXNwYXRjaGVyLWJhc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29yZS9jb25uZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2xsaHR0cC91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9sbGh0dHAvY29uc3RhbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2hhbmRsZXIvUmVkaXJlY3RIYW5kbGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ludGVyY2VwdG9yL3JlZGlyZWN0SW50ZXJjZXB0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbGxodHRwL2xsaHR0cC13YXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2xsaHR0cC9sbGh0dHBfc2ltZC13YXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NsaWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9ub2RlL2ZpeGVkLXF1ZXVlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3Bvb2wtc3RhdHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvcG9vbC1iYXNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3Bvb2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYmFsYW5jZWQtcG9vbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb21wYXQvZGlzcGF0Y2hlci13ZWFrcmVmLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FnZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9yZWFkYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvYWJvcnQtc2lnbmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hcGktcmVxdWVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvYXBpLXN0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvYXBpLXBpcGVsaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hcGktdXBncmFkZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvYXBpLWNvbm5lY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYXBpL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1lcnJvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbW9jay9tb2NrLXN5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbW9jay9tb2NrLXV0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1pbnRlcmNlcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL21vY2stY2xpZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1wb29sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svcGx1cmFsaXplci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL3BlbmRpbmctaW50ZXJjZXB0b3JzLWZvcm1hdHRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL21vY2stYWdlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvcHJveHktYWdlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaGFuZGxlci9SZXRyeUhhbmRsZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZ2xvYmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2hhbmRsZXIvRGVjb3JhdG9ySGFuZGxlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9mZXRjaC9oZWFkZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL3Jlc3BvbnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL3JlcXVlc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmlsZWFwaS9zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZpbGVhcGkvcHJvZ3Jlc3NldmVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9maWxlYXBpL2VuY29kaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZpbGVhcGkvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9maWxlYXBpL2ZpbGVyZWFkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY2FjaGUvc3ltYm9scy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jYWNoZS91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NhY2hlL2NhY2hlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NhY2hlL2NhY2hlc3RvcmFnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb29raWVzL2NvbnN0YW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb29raWVzL3V0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29va2llcy9wYXJzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb29raWVzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYnNvY2tldC9jb25zdGFudHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2Vic29ja2V0L3N5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2Vic29ja2V0L2V2ZW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWJzb2NrZXQvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWJzb2NrZXQvY29ubmVjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWJzb2NrZXQvZnJhbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2Vic29ja2V0L3JlY2VpdmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYnNvY2tldC93ZWJzb2NrZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvaHR0cC1jbGllbnQvbGliL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9odHRwLWNsaWVudC9saWIvYXV0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9saWIvb2lkYy11dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9saWIvc3VtbWFyeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9saWIvcGF0aC11dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvaW8vbGliL2lvLXV0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2lvL2xpYi9pby5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvZXhlYy9saWIvdG9vbHJ1bm5lci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvZXhlYy9saWIvZXhlYy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9saWIvcGxhdGZvcm0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2NvcmUvbGliL2NvcmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2dpdGh1Yi9saWIvY29udGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvZ2l0aHViL2xpYi9pbnRlcm5hbC91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5pdmVyc2FsLXVzZXItYWdlbnQvZGlzdC1ub2RlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9iZWZvcmUtYWZ0ZXItaG9vay9saWIvcmVnaXN0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2JlZm9yZS1hZnRlci1ob29rL2xpYi9hZGQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2JlZm9yZS1hZnRlci1ob29rL2xpYi9yZW1vdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2JlZm9yZS1hZnRlci1ob29rL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9naXRodWIvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2NvcmUvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3JlcXVlc3Qvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2VuZHBvaW50L2Rpc3Qtbm9kZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvZGVwcmVjYXRpb24vZGlzdC1ub2RlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy93cmFwcHkvd3JhcHB5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9vbmNlL29uY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3JlcXVlc3QtZXJyb3IvZGlzdC1ub2RlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9naXRodWIvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2NvcmUvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3JlcXVlc3QvZGlzdC1ub2RlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9naXRodWIvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2NvcmUvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2dyYXBocWwvZGlzdC1ub2RlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9naXRodWIvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2NvcmUvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2F1dGgtdG9rZW4vZGlzdC1ub2RlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9naXRodWIvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2NvcmUvZGlzdC1ub2RlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9wbHVnaW4tcmVzdC1lbmRwb2ludC1tZXRob2RzL2Rpc3Qtbm9kZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQG9jdG9raXQvcGx1Z2luLXBhZ2luYXRlLXJlc3QvZGlzdC1ub2RlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9naXRodWIvbGliL3V0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9naXRodWIvbGliL2dpdGh1Yi5qcyIsICJzcmMvam9icy9tYWluLnRzIiwgInNyYy9jb25zdGFudHMudHMiLCAic3JjL2NvbmZpZ3MudHMiLCAic3JjL2hlbHAvcHVsbHMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBXZSB1c2UgYW55IGFzIGEgdmFsaWQgaW5wdXQgdHlwZVxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50b0NvbW1hbmRQcm9wZXJ0aWVzID0gZXhwb3J0cy50b0NvbW1hbmRWYWx1ZSA9IHZvaWQgMDtcbi8qKlxuICogU2FuaXRpemVzIGFuIGlucHV0IGludG8gYSBzdHJpbmcgc28gaXQgY2FuIGJlIHBhc3NlZCBpbnRvIGlzc3VlQ29tbWFuZCBzYWZlbHlcbiAqIEBwYXJhbSBpbnB1dCBpbnB1dCB0byBzYW5pdGl6ZSBpbnRvIGEgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIHRvQ29tbWFuZFZhbHVlKGlucHV0KSB7XG4gICAgaWYgKGlucHV0ID09PSBudWxsIHx8IGlucHV0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnIHx8IGlucHV0IGluc3RhbmNlb2YgU3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBpbnB1dDtcbiAgICB9XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGlucHV0KTtcbn1cbmV4cG9ydHMudG9Db21tYW5kVmFsdWUgPSB0b0NvbW1hbmRWYWx1ZTtcbi8qKlxuICpcbiAqIEBwYXJhbSBhbm5vdGF0aW9uUHJvcGVydGllc1xuICogQHJldHVybnMgVGhlIGNvbW1hbmQgcHJvcGVydGllcyB0byBzZW5kIHdpdGggdGhlIGFjdHVhbCBhbm5vdGF0aW9uIGNvbW1hbmRcbiAqIFNlZSBJc3N1ZUNvbW1hbmRQcm9wZXJ0aWVzOiBodHRwczovL2dpdGh1Yi5jb20vYWN0aW9ucy9ydW5uZXIvYmxvYi9tYWluL3NyYy9SdW5uZXIuV29ya2VyL0FjdGlvbkNvbW1hbmRNYW5hZ2VyLmNzI0w2NDZcbiAqL1xuZnVuY3Rpb24gdG9Db21tYW5kUHJvcGVydGllcyhhbm5vdGF0aW9uUHJvcGVydGllcykge1xuICAgIGlmICghT2JqZWN0LmtleXMoYW5ub3RhdGlvblByb3BlcnRpZXMpLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHRpdGxlOiBhbm5vdGF0aW9uUHJvcGVydGllcy50aXRsZSxcbiAgICAgICAgZmlsZTogYW5ub3RhdGlvblByb3BlcnRpZXMuZmlsZSxcbiAgICAgICAgbGluZTogYW5ub3RhdGlvblByb3BlcnRpZXMuc3RhcnRMaW5lLFxuICAgICAgICBlbmRMaW5lOiBhbm5vdGF0aW9uUHJvcGVydGllcy5lbmRMaW5lLFxuICAgICAgICBjb2w6IGFubm90YXRpb25Qcm9wZXJ0aWVzLnN0YXJ0Q29sdW1uLFxuICAgICAgICBlbmRDb2x1bW46IGFubm90YXRpb25Qcm9wZXJ0aWVzLmVuZENvbHVtblxuICAgIH07XG59XG5leHBvcnRzLnRvQ29tbWFuZFByb3BlcnRpZXMgPSB0b0NvbW1hbmRQcm9wZXJ0aWVzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbHMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc3N1ZSA9IGV4cG9ydHMuaXNzdWVDb21tYW5kID0gdm9pZCAwO1xuY29uc3Qgb3MgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIm9zXCIpKTtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi91dGlsc1wiKTtcbi8qKlxuICogQ29tbWFuZHNcbiAqXG4gKiBDb21tYW5kIEZvcm1hdDpcbiAqICAgOjpuYW1lIGtleT12YWx1ZSxrZXk9dmFsdWU6Om1lc3NhZ2VcbiAqXG4gKiBFeGFtcGxlczpcbiAqICAgOjp3YXJuaW5nOjpUaGlzIGlzIHRoZSBtZXNzYWdlXG4gKiAgIDo6c2V0LWVudiBuYW1lPU1ZX1ZBUjo6c29tZSB2YWx1ZVxuICovXG5mdW5jdGlvbiBpc3N1ZUNvbW1hbmQoY29tbWFuZCwgcHJvcGVydGllcywgbWVzc2FnZSkge1xuICAgIGNvbnN0IGNtZCA9IG5ldyBDb21tYW5kKGNvbW1hbmQsIHByb3BlcnRpZXMsIG1lc3NhZ2UpO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGNtZC50b1N0cmluZygpICsgb3MuRU9MKTtcbn1cbmV4cG9ydHMuaXNzdWVDb21tYW5kID0gaXNzdWVDb21tYW5kO1xuZnVuY3Rpb24gaXNzdWUobmFtZSwgbWVzc2FnZSA9ICcnKSB7XG4gICAgaXNzdWVDb21tYW5kKG5hbWUsIHt9LCBtZXNzYWdlKTtcbn1cbmV4cG9ydHMuaXNzdWUgPSBpc3N1ZTtcbmNvbnN0IENNRF9TVFJJTkcgPSAnOjonO1xuY2xhc3MgQ29tbWFuZCB7XG4gICAgY29uc3RydWN0b3IoY29tbWFuZCwgcHJvcGVydGllcywgbWVzc2FnZSkge1xuICAgICAgICBpZiAoIWNvbW1hbmQpIHtcbiAgICAgICAgICAgIGNvbW1hbmQgPSAnbWlzc2luZy5jb21tYW5kJztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbW1hbmQgPSBjb21tYW5kO1xuICAgICAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIH1cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgbGV0IGNtZFN0ciA9IENNRF9TVFJJTkcgKyB0aGlzLmNvbW1hbmQ7XG4gICAgICAgIGlmICh0aGlzLnByb3BlcnRpZXMgJiYgT2JqZWN0LmtleXModGhpcy5wcm9wZXJ0aWVzKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjbWRTdHIgKz0gJyAnO1xuICAgICAgICAgICAgbGV0IGZpcnN0ID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMucHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWwgPSB0aGlzLnByb3BlcnRpZXNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZFN0ciArPSAnLCc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjbWRTdHIgKz0gYCR7a2V5fT0ke2VzY2FwZVByb3BlcnR5KHZhbCl9YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjbWRTdHIgKz0gYCR7Q01EX1NUUklOR30ke2VzY2FwZURhdGEodGhpcy5tZXNzYWdlKX1gO1xuICAgICAgICByZXR1cm4gY21kU3RyO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGVzY2FwZURhdGEocykge1xuICAgIHJldHVybiAoMCwgdXRpbHNfMS50b0NvbW1hbmRWYWx1ZSkocylcbiAgICAgICAgLnJlcGxhY2UoLyUvZywgJyUyNScpXG4gICAgICAgIC5yZXBsYWNlKC9cXHIvZywgJyUwRCcpXG4gICAgICAgIC5yZXBsYWNlKC9cXG4vZywgJyUwQScpO1xufVxuZnVuY3Rpb24gZXNjYXBlUHJvcGVydHkocykge1xuICAgIHJldHVybiAoMCwgdXRpbHNfMS50b0NvbW1hbmRWYWx1ZSkocylcbiAgICAgICAgLnJlcGxhY2UoLyUvZywgJyUyNScpXG4gICAgICAgIC5yZXBsYWNlKC9cXHIvZywgJyUwRCcpXG4gICAgICAgIC5yZXBsYWNlKC9cXG4vZywgJyUwQScpXG4gICAgICAgIC5yZXBsYWNlKC86L2csICclM0EnKVxuICAgICAgICAucmVwbGFjZSgvLC9nLCAnJTJDJyk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb21tYW5kLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBGb3IgaW50ZXJuYWwgdXNlLCBzdWJqZWN0IHRvIGNoYW5nZS5cbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5wcmVwYXJlS2V5VmFsdWVNZXNzYWdlID0gZXhwb3J0cy5pc3N1ZUZpbGVDb21tYW5kID0gdm9pZCAwO1xuLy8gV2UgdXNlIGFueSBhcyBhIHZhbGlkIGlucHV0IHR5cGVcbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmNvbnN0IGNyeXB0byA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiY3J5cHRvXCIpKTtcbmNvbnN0IGZzID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJmc1wiKSk7XG5jb25zdCBvcyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwib3NcIikpO1xuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoXCIuL3V0aWxzXCIpO1xuZnVuY3Rpb24gaXNzdWVGaWxlQ29tbWFuZChjb21tYW5kLCBtZXNzYWdlKSB7XG4gICAgY29uc3QgZmlsZVBhdGggPSBwcm9jZXNzLmVudltgR0lUSFVCXyR7Y29tbWFuZH1gXTtcbiAgICBpZiAoIWZpbGVQYXRoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGZpbmQgZW52aXJvbm1lbnQgdmFyaWFibGUgZm9yIGZpbGUgY29tbWFuZCAke2NvbW1hbmR9YCk7XG4gICAgfVxuICAgIGlmICghZnMuZXhpc3RzU3luYyhmaWxlUGF0aCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIGZpbGUgYXQgcGF0aDogJHtmaWxlUGF0aH1gKTtcbiAgICB9XG4gICAgZnMuYXBwZW5kRmlsZVN5bmMoZmlsZVBhdGgsIGAkeygwLCB1dGlsc18xLnRvQ29tbWFuZFZhbHVlKShtZXNzYWdlKX0ke29zLkVPTH1gLCB7XG4gICAgICAgIGVuY29kaW5nOiAndXRmOCdcbiAgICB9KTtcbn1cbmV4cG9ydHMuaXNzdWVGaWxlQ29tbWFuZCA9IGlzc3VlRmlsZUNvbW1hbmQ7XG5mdW5jdGlvbiBwcmVwYXJlS2V5VmFsdWVNZXNzYWdlKGtleSwgdmFsdWUpIHtcbiAgICBjb25zdCBkZWxpbWl0ZXIgPSBgZ2hhZGVsaW1pdGVyXyR7Y3J5cHRvLnJhbmRvbVVVSUQoKX1gO1xuICAgIGNvbnN0IGNvbnZlcnRlZFZhbHVlID0gKDAsIHV0aWxzXzEudG9Db21tYW5kVmFsdWUpKHZhbHVlKTtcbiAgICAvLyBUaGVzZSBzaG91bGQgcmVhbGlzdGljYWxseSBuZXZlciBoYXBwZW4sIGJ1dCBqdXN0IGluIGNhc2Ugc29tZW9uZSBmaW5kcyBhXG4gICAgLy8gd2F5IHRvIGV4cGxvaXQgdXVpZCBnZW5lcmF0aW9uIGxldCdzIG5vdCBhbGxvdyBrZXlzIG9yIHZhbHVlcyB0aGF0IGNvbnRhaW5cbiAgICAvLyB0aGUgZGVsaW1pdGVyLlxuICAgIGlmIChrZXkuaW5jbHVkZXMoZGVsaW1pdGVyKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgaW5wdXQ6IG5hbWUgc2hvdWxkIG5vdCBjb250YWluIHRoZSBkZWxpbWl0ZXIgXCIke2RlbGltaXRlcn1cImApO1xuICAgIH1cbiAgICBpZiAoY29udmVydGVkVmFsdWUuaW5jbHVkZXMoZGVsaW1pdGVyKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgaW5wdXQ6IHZhbHVlIHNob3VsZCBub3QgY29udGFpbiB0aGUgZGVsaW1pdGVyIFwiJHtkZWxpbWl0ZXJ9XCJgKTtcbiAgICB9XG4gICAgcmV0dXJuIGAke2tleX08PCR7ZGVsaW1pdGVyfSR7b3MuRU9MfSR7Y29udmVydGVkVmFsdWV9JHtvcy5FT0x9JHtkZWxpbWl0ZXJ9YDtcbn1cbmV4cG9ydHMucHJlcGFyZUtleVZhbHVlTWVzc2FnZSA9IHByZXBhcmVLZXlWYWx1ZU1lc3NhZ2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1maWxlLWNvbW1hbmQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY2hlY2tCeXBhc3MgPSBleHBvcnRzLmdldFByb3h5VXJsID0gdm9pZCAwO1xuZnVuY3Rpb24gZ2V0UHJveHlVcmwocmVxVXJsKSB7XG4gICAgY29uc3QgdXNpbmdTc2wgPSByZXFVcmwucHJvdG9jb2wgPT09ICdodHRwczonO1xuICAgIGlmIChjaGVja0J5cGFzcyhyZXFVcmwpKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IHByb3h5VmFyID0gKCgpID0+IHtcbiAgICAgICAgaWYgKHVzaW5nU3NsKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvY2Vzcy5lbnZbJ2h0dHBzX3Byb3h5J10gfHwgcHJvY2Vzcy5lbnZbJ0hUVFBTX1BST1hZJ107XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvY2Vzcy5lbnZbJ2h0dHBfcHJveHknXSB8fCBwcm9jZXNzLmVudlsnSFRUUF9QUk9YWSddO1xuICAgICAgICB9XG4gICAgfSkoKTtcbiAgICBpZiAocHJveHlWYXIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGVjb2RlZFVSTChwcm94eVZhcik7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgICAgICBpZiAoIXByb3h5VmFyLnN0YXJ0c1dpdGgoJ2h0dHA6Ly8nKSAmJiAhcHJveHlWYXIuc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERlY29kZWRVUkwoYGh0dHA6Ly8ke3Byb3h5VmFyfWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbn1cbmV4cG9ydHMuZ2V0UHJveHlVcmwgPSBnZXRQcm94eVVybDtcbmZ1bmN0aW9uIGNoZWNrQnlwYXNzKHJlcVVybCkge1xuICAgIGlmICghcmVxVXJsLmhvc3RuYW1lKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgcmVxSG9zdCA9IHJlcVVybC5ob3N0bmFtZTtcbiAgICBpZiAoaXNMb29wYmFja0FkZHJlc3MocmVxSG9zdCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IG5vUHJveHkgPSBwcm9jZXNzLmVudlsnbm9fcHJveHknXSB8fCBwcm9jZXNzLmVudlsnTk9fUFJPWFknXSB8fCAnJztcbiAgICBpZiAoIW5vUHJveHkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBEZXRlcm1pbmUgdGhlIHJlcXVlc3QgcG9ydFxuICAgIGxldCByZXFQb3J0O1xuICAgIGlmIChyZXFVcmwucG9ydCkge1xuICAgICAgICByZXFQb3J0ID0gTnVtYmVyKHJlcVVybC5wb3J0KTtcbiAgICB9XG4gICAgZWxzZSBpZiAocmVxVXJsLnByb3RvY29sID09PSAnaHR0cDonKSB7XG4gICAgICAgIHJlcVBvcnQgPSA4MDtcbiAgICB9XG4gICAgZWxzZSBpZiAocmVxVXJsLnByb3RvY29sID09PSAnaHR0cHM6Jykge1xuICAgICAgICByZXFQb3J0ID0gNDQzO1xuICAgIH1cbiAgICAvLyBGb3JtYXQgdGhlIHJlcXVlc3QgaG9zdG5hbWUgYW5kIGhvc3RuYW1lIHdpdGggcG9ydFxuICAgIGNvbnN0IHVwcGVyUmVxSG9zdHMgPSBbcmVxVXJsLmhvc3RuYW1lLnRvVXBwZXJDYXNlKCldO1xuICAgIGlmICh0eXBlb2YgcmVxUG9ydCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgdXBwZXJSZXFIb3N0cy5wdXNoKGAke3VwcGVyUmVxSG9zdHNbMF19OiR7cmVxUG9ydH1gKTtcbiAgICB9XG4gICAgLy8gQ29tcGFyZSByZXF1ZXN0IGhvc3QgYWdhaW5zdCBub3Byb3h5XG4gICAgZm9yIChjb25zdCB1cHBlck5vUHJveHlJdGVtIG9mIG5vUHJveHlcbiAgICAgICAgLnNwbGl0KCcsJylcbiAgICAgICAgLm1hcCh4ID0+IHgudHJpbSgpLnRvVXBwZXJDYXNlKCkpXG4gICAgICAgIC5maWx0ZXIoeCA9PiB4KSkge1xuICAgICAgICBpZiAodXBwZXJOb1Byb3h5SXRlbSA9PT0gJyonIHx8XG4gICAgICAgICAgICB1cHBlclJlcUhvc3RzLnNvbWUoeCA9PiB4ID09PSB1cHBlck5vUHJveHlJdGVtIHx8XG4gICAgICAgICAgICAgICAgeC5lbmRzV2l0aChgLiR7dXBwZXJOb1Byb3h5SXRlbX1gKSB8fFxuICAgICAgICAgICAgICAgICh1cHBlck5vUHJveHlJdGVtLnN0YXJ0c1dpdGgoJy4nKSAmJlxuICAgICAgICAgICAgICAgICAgICB4LmVuZHNXaXRoKGAke3VwcGVyTm9Qcm94eUl0ZW19YCkpKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZXhwb3J0cy5jaGVja0J5cGFzcyA9IGNoZWNrQnlwYXNzO1xuZnVuY3Rpb24gaXNMb29wYmFja0FkZHJlc3MoaG9zdCkge1xuICAgIGNvbnN0IGhvc3RMb3dlciA9IGhvc3QudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gKGhvc3RMb3dlciA9PT0gJ2xvY2FsaG9zdCcgfHxcbiAgICAgICAgaG9zdExvd2VyLnN0YXJ0c1dpdGgoJzEyNy4nKSB8fFxuICAgICAgICBob3N0TG93ZXIuc3RhcnRzV2l0aCgnWzo6MV0nKSB8fFxuICAgICAgICBob3N0TG93ZXIuc3RhcnRzV2l0aCgnWzA6MDowOjA6MDowOjA6MV0nKSk7XG59XG5jbGFzcyBEZWNvZGVkVVJMIGV4dGVuZHMgVVJMIHtcbiAgICBjb25zdHJ1Y3Rvcih1cmwsIGJhc2UpIHtcbiAgICAgICAgc3VwZXIodXJsLCBiYXNlKTtcbiAgICAgICAgdGhpcy5fZGVjb2RlZFVzZXJuYW1lID0gZGVjb2RlVVJJQ29tcG9uZW50KHN1cGVyLnVzZXJuYW1lKTtcbiAgICAgICAgdGhpcy5fZGVjb2RlZFBhc3N3b3JkID0gZGVjb2RlVVJJQ29tcG9uZW50KHN1cGVyLnBhc3N3b3JkKTtcbiAgICB9XG4gICAgZ2V0IHVzZXJuYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVjb2RlZFVzZXJuYW1lO1xuICAgIH1cbiAgICBnZXQgcGFzc3dvcmQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWNvZGVkUGFzc3dvcmQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cHJveHkuanMubWFwIiwKICAgICIndXNlIHN0cmljdCc7XG5cbnZhciBuZXQgPSByZXF1aXJlKCduZXQnKTtcbnZhciB0bHMgPSByZXF1aXJlKCd0bHMnKTtcbnZhciBodHRwID0gcmVxdWlyZSgnaHR0cCcpO1xudmFyIGh0dHBzID0gcmVxdWlyZSgnaHR0cHMnKTtcbnZhciBldmVudHMgPSByZXF1aXJlKCdldmVudHMnKTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKTtcbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuXG5cbmV4cG9ydHMuaHR0cE92ZXJIdHRwID0gaHR0cE92ZXJIdHRwO1xuZXhwb3J0cy5odHRwc092ZXJIdHRwID0gaHR0cHNPdmVySHR0cDtcbmV4cG9ydHMuaHR0cE92ZXJIdHRwcyA9IGh0dHBPdmVySHR0cHM7XG5leHBvcnRzLmh0dHBzT3Zlckh0dHBzID0gaHR0cHNPdmVySHR0cHM7XG5cblxuZnVuY3Rpb24gaHR0cE92ZXJIdHRwKG9wdGlvbnMpIHtcbiAgdmFyIGFnZW50ID0gbmV3IFR1bm5lbGluZ0FnZW50KG9wdGlvbnMpO1xuICBhZ2VudC5yZXF1ZXN0ID0gaHR0cC5yZXF1ZXN0O1xuICByZXR1cm4gYWdlbnQ7XG59XG5cbmZ1bmN0aW9uIGh0dHBzT3Zlckh0dHAob3B0aW9ucykge1xuICB2YXIgYWdlbnQgPSBuZXcgVHVubmVsaW5nQWdlbnQob3B0aW9ucyk7XG4gIGFnZW50LnJlcXVlc3QgPSBodHRwLnJlcXVlc3Q7XG4gIGFnZW50LmNyZWF0ZVNvY2tldCA9IGNyZWF0ZVNlY3VyZVNvY2tldDtcbiAgYWdlbnQuZGVmYXVsdFBvcnQgPSA0NDM7XG4gIHJldHVybiBhZ2VudDtcbn1cblxuZnVuY3Rpb24gaHR0cE92ZXJIdHRwcyhvcHRpb25zKSB7XG4gIHZhciBhZ2VudCA9IG5ldyBUdW5uZWxpbmdBZ2VudChvcHRpb25zKTtcbiAgYWdlbnQucmVxdWVzdCA9IGh0dHBzLnJlcXVlc3Q7XG4gIHJldHVybiBhZ2VudDtcbn1cblxuZnVuY3Rpb24gaHR0cHNPdmVySHR0cHMob3B0aW9ucykge1xuICB2YXIgYWdlbnQgPSBuZXcgVHVubmVsaW5nQWdlbnQob3B0aW9ucyk7XG4gIGFnZW50LnJlcXVlc3QgPSBodHRwcy5yZXF1ZXN0O1xuICBhZ2VudC5jcmVhdGVTb2NrZXQgPSBjcmVhdGVTZWN1cmVTb2NrZXQ7XG4gIGFnZW50LmRlZmF1bHRQb3J0ID0gNDQzO1xuICByZXR1cm4gYWdlbnQ7XG59XG5cblxuZnVuY3Rpb24gVHVubmVsaW5nQWdlbnQob3B0aW9ucykge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHNlbGYub3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIHNlbGYucHJveHlPcHRpb25zID0gc2VsZi5vcHRpb25zLnByb3h5IHx8IHt9O1xuICBzZWxmLm1heFNvY2tldHMgPSBzZWxmLm9wdGlvbnMubWF4U29ja2V0cyB8fCBodHRwLkFnZW50LmRlZmF1bHRNYXhTb2NrZXRzO1xuICBzZWxmLnJlcXVlc3RzID0gW107XG4gIHNlbGYuc29ja2V0cyA9IFtdO1xuXG4gIHNlbGYub24oJ2ZyZWUnLCBmdW5jdGlvbiBvbkZyZWUoc29ja2V0LCBob3N0LCBwb3J0LCBsb2NhbEFkZHJlc3MpIHtcbiAgICB2YXIgb3B0aW9ucyA9IHRvT3B0aW9ucyhob3N0LCBwb3J0LCBsb2NhbEFkZHJlc3MpO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBzZWxmLnJlcXVlc3RzLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICB2YXIgcGVuZGluZyA9IHNlbGYucmVxdWVzdHNbaV07XG4gICAgICBpZiAocGVuZGluZy5ob3N0ID09PSBvcHRpb25zLmhvc3QgJiYgcGVuZGluZy5wb3J0ID09PSBvcHRpb25zLnBvcnQpIHtcbiAgICAgICAgLy8gRGV0ZWN0IHRoZSByZXF1ZXN0IHRvIGNvbm5lY3Qgc2FtZSBvcmlnaW4gc2VydmVyLFxuICAgICAgICAvLyByZXVzZSB0aGUgY29ubmVjdGlvbi5cbiAgICAgICAgc2VsZi5yZXF1ZXN0cy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIHBlbmRpbmcucmVxdWVzdC5vblNvY2tldChzb2NrZXQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIHNvY2tldC5kZXN0cm95KCk7XG4gICAgc2VsZi5yZW1vdmVTb2NrZXQoc29ja2V0KTtcbiAgfSk7XG59XG51dGlsLmluaGVyaXRzKFR1bm5lbGluZ0FnZW50LCBldmVudHMuRXZlbnRFbWl0dGVyKTtcblxuVHVubmVsaW5nQWdlbnQucHJvdG90eXBlLmFkZFJlcXVlc3QgPSBmdW5jdGlvbiBhZGRSZXF1ZXN0KHJlcSwgaG9zdCwgcG9ydCwgbG9jYWxBZGRyZXNzKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIG9wdGlvbnMgPSBtZXJnZU9wdGlvbnMoe3JlcXVlc3Q6IHJlcX0sIHNlbGYub3B0aW9ucywgdG9PcHRpb25zKGhvc3QsIHBvcnQsIGxvY2FsQWRkcmVzcykpO1xuXG4gIGlmIChzZWxmLnNvY2tldHMubGVuZ3RoID49IHRoaXMubWF4U29ja2V0cykge1xuICAgIC8vIFdlIGFyZSBvdmVyIGxpbWl0IHNvIHdlJ2xsIGFkZCBpdCB0byB0aGUgcXVldWUuXG4gICAgc2VsZi5yZXF1ZXN0cy5wdXNoKG9wdGlvbnMpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIElmIHdlIGFyZSB1bmRlciBtYXhTb2NrZXRzIGNyZWF0ZSBhIG5ldyBvbmUuXG4gIHNlbGYuY3JlYXRlU29ja2V0KG9wdGlvbnMsIGZ1bmN0aW9uKHNvY2tldCkge1xuICAgIHNvY2tldC5vbignZnJlZScsIG9uRnJlZSk7XG4gICAgc29ja2V0Lm9uKCdjbG9zZScsIG9uQ2xvc2VPclJlbW92ZSk7XG4gICAgc29ja2V0Lm9uKCdhZ2VudFJlbW92ZScsIG9uQ2xvc2VPclJlbW92ZSk7XG4gICAgcmVxLm9uU29ja2V0KHNvY2tldCk7XG5cbiAgICBmdW5jdGlvbiBvbkZyZWUoKSB7XG4gICAgICBzZWxmLmVtaXQoJ2ZyZWUnLCBzb2NrZXQsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9uQ2xvc2VPclJlbW92ZShlcnIpIHtcbiAgICAgIHNlbGYucmVtb3ZlU29ja2V0KHNvY2tldCk7XG4gICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ2ZyZWUnLCBvbkZyZWUpO1xuICAgICAgc29ja2V0LnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uQ2xvc2VPclJlbW92ZSk7XG4gICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ2FnZW50UmVtb3ZlJywgb25DbG9zZU9yUmVtb3ZlKTtcbiAgICB9XG4gIH0pO1xufTtcblxuVHVubmVsaW5nQWdlbnQucHJvdG90eXBlLmNyZWF0ZVNvY2tldCA9IGZ1bmN0aW9uIGNyZWF0ZVNvY2tldChvcHRpb25zLCBjYikge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciBwbGFjZWhvbGRlciA9IHt9O1xuICBzZWxmLnNvY2tldHMucHVzaChwbGFjZWhvbGRlcik7XG5cbiAgdmFyIGNvbm5lY3RPcHRpb25zID0gbWVyZ2VPcHRpb25zKHt9LCBzZWxmLnByb3h5T3B0aW9ucywge1xuICAgIG1ldGhvZDogJ0NPTk5FQ1QnLFxuICAgIHBhdGg6IG9wdGlvbnMuaG9zdCArICc6JyArIG9wdGlvbnMucG9ydCxcbiAgICBhZ2VudDogZmFsc2UsXG4gICAgaGVhZGVyczoge1xuICAgICAgaG9zdDogb3B0aW9ucy5ob3N0ICsgJzonICsgb3B0aW9ucy5wb3J0XG4gICAgfVxuICB9KTtcbiAgaWYgKG9wdGlvbnMubG9jYWxBZGRyZXNzKSB7XG4gICAgY29ubmVjdE9wdGlvbnMubG9jYWxBZGRyZXNzID0gb3B0aW9ucy5sb2NhbEFkZHJlc3M7XG4gIH1cbiAgaWYgKGNvbm5lY3RPcHRpb25zLnByb3h5QXV0aCkge1xuICAgIGNvbm5lY3RPcHRpb25zLmhlYWRlcnMgPSBjb25uZWN0T3B0aW9ucy5oZWFkZXJzIHx8IHt9O1xuICAgIGNvbm5lY3RPcHRpb25zLmhlYWRlcnNbJ1Byb3h5LUF1dGhvcml6YXRpb24nXSA9ICdCYXNpYyAnICtcbiAgICAgICAgbmV3IEJ1ZmZlcihjb25uZWN0T3B0aW9ucy5wcm94eUF1dGgpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgfVxuXG4gIGRlYnVnKCdtYWtpbmcgQ09OTkVDVCByZXF1ZXN0Jyk7XG4gIHZhciBjb25uZWN0UmVxID0gc2VsZi5yZXF1ZXN0KGNvbm5lY3RPcHRpb25zKTtcbiAgY29ubmVjdFJlcS51c2VDaHVua2VkRW5jb2RpbmdCeURlZmF1bHQgPSBmYWxzZTsgLy8gZm9yIHYwLjZcbiAgY29ubmVjdFJlcS5vbmNlKCdyZXNwb25zZScsIG9uUmVzcG9uc2UpOyAvLyBmb3IgdjAuNlxuICBjb25uZWN0UmVxLm9uY2UoJ3VwZ3JhZGUnLCBvblVwZ3JhZGUpOyAgIC8vIGZvciB2MC42XG4gIGNvbm5lY3RSZXEub25jZSgnY29ubmVjdCcsIG9uQ29ubmVjdCk7ICAgLy8gZm9yIHYwLjcgb3IgbGF0ZXJcbiAgY29ubmVjdFJlcS5vbmNlKCdlcnJvcicsIG9uRXJyb3IpO1xuICBjb25uZWN0UmVxLmVuZCgpO1xuXG4gIGZ1bmN0aW9uIG9uUmVzcG9uc2UocmVzKSB7XG4gICAgLy8gVmVyeSBoYWNreS4gVGhpcyBpcyBuZWNlc3NhcnkgdG8gYXZvaWQgaHR0cC1wYXJzZXIgbGVha3MuXG4gICAgcmVzLnVwZ3JhZGUgPSB0cnVlO1xuICB9XG5cbiAgZnVuY3Rpb24gb25VcGdyYWRlKHJlcywgc29ja2V0LCBoZWFkKSB7XG4gICAgLy8gSGFja3kuXG4gICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbigpIHtcbiAgICAgIG9uQ29ubmVjdChyZXMsIHNvY2tldCwgaGVhZCk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBvbkNvbm5lY3QocmVzLCBzb2NrZXQsIGhlYWQpIHtcbiAgICBjb25uZWN0UmVxLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgIHNvY2tldC5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcblxuICAgIGlmIChyZXMuc3RhdHVzQ29kZSAhPT0gMjAwKSB7XG4gICAgICBkZWJ1ZygndHVubmVsaW5nIHNvY2tldCBjb3VsZCBub3QgYmUgZXN0YWJsaXNoZWQsIHN0YXR1c0NvZGU9JWQnLFxuICAgICAgICByZXMuc3RhdHVzQ29kZSk7XG4gICAgICBzb2NrZXQuZGVzdHJveSgpO1xuICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKCd0dW5uZWxpbmcgc29ja2V0IGNvdWxkIG5vdCBiZSBlc3RhYmxpc2hlZCwgJyArXG4gICAgICAgICdzdGF0dXNDb2RlPScgKyByZXMuc3RhdHVzQ29kZSk7XG4gICAgICBlcnJvci5jb2RlID0gJ0VDT05OUkVTRVQnO1xuICAgICAgb3B0aW9ucy5yZXF1ZXN0LmVtaXQoJ2Vycm9yJywgZXJyb3IpO1xuICAgICAgc2VsZi5yZW1vdmVTb2NrZXQocGxhY2Vob2xkZXIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaGVhZC5sZW5ndGggPiAwKSB7XG4gICAgICBkZWJ1ZygnZ290IGlsbGVnYWwgcmVzcG9uc2UgYm9keSBmcm9tIHByb3h5Jyk7XG4gICAgICBzb2NrZXQuZGVzdHJveSgpO1xuICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKCdnb3QgaWxsZWdhbCByZXNwb25zZSBib2R5IGZyb20gcHJveHknKTtcbiAgICAgIGVycm9yLmNvZGUgPSAnRUNPTk5SRVNFVCc7XG4gICAgICBvcHRpb25zLnJlcXVlc3QuZW1pdCgnZXJyb3InLCBlcnJvcik7XG4gICAgICBzZWxmLnJlbW92ZVNvY2tldChwbGFjZWhvbGRlcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGRlYnVnKCd0dW5uZWxpbmcgY29ubmVjdGlvbiBoYXMgZXN0YWJsaXNoZWQnKTtcbiAgICBzZWxmLnNvY2tldHNbc2VsZi5zb2NrZXRzLmluZGV4T2YocGxhY2Vob2xkZXIpXSA9IHNvY2tldDtcbiAgICByZXR1cm4gY2Ioc29ja2V0KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uRXJyb3IoY2F1c2UpIHtcbiAgICBjb25uZWN0UmVxLnJlbW92ZUFsbExpc3RlbmVycygpO1xuXG4gICAgZGVidWcoJ3R1bm5lbGluZyBzb2NrZXQgY291bGQgbm90IGJlIGVzdGFibGlzaGVkLCBjYXVzZT0lc1xcbicsXG4gICAgICAgICAgY2F1c2UubWVzc2FnZSwgY2F1c2Uuc3RhY2spO1xuICAgIHZhciBlcnJvciA9IG5ldyBFcnJvcigndHVubmVsaW5nIHNvY2tldCBjb3VsZCBub3QgYmUgZXN0YWJsaXNoZWQsICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnY2F1c2U9JyArIGNhdXNlLm1lc3NhZ2UpO1xuICAgIGVycm9yLmNvZGUgPSAnRUNPTk5SRVNFVCc7XG4gICAgb3B0aW9ucy5yZXF1ZXN0LmVtaXQoJ2Vycm9yJywgZXJyb3IpO1xuICAgIHNlbGYucmVtb3ZlU29ja2V0KHBsYWNlaG9sZGVyKTtcbiAgfVxufTtcblxuVHVubmVsaW5nQWdlbnQucHJvdG90eXBlLnJlbW92ZVNvY2tldCA9IGZ1bmN0aW9uIHJlbW92ZVNvY2tldChzb2NrZXQpIHtcbiAgdmFyIHBvcyA9IHRoaXMuc29ja2V0cy5pbmRleE9mKHNvY2tldClcbiAgaWYgKHBvcyA9PT0gLTEpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdGhpcy5zb2NrZXRzLnNwbGljZShwb3MsIDEpO1xuXG4gIHZhciBwZW5kaW5nID0gdGhpcy5yZXF1ZXN0cy5zaGlmdCgpO1xuICBpZiAocGVuZGluZykge1xuICAgIC8vIElmIHdlIGhhdmUgcGVuZGluZyByZXF1ZXN0cyBhbmQgYSBzb2NrZXQgZ2V0cyBjbG9zZWQgYSBuZXcgb25lXG4gICAgLy8gbmVlZHMgdG8gYmUgY3JlYXRlZCB0byB0YWtlIG92ZXIgaW4gdGhlIHBvb2wgZm9yIHRoZSBvbmUgdGhhdCBjbG9zZWQuXG4gICAgdGhpcy5jcmVhdGVTb2NrZXQocGVuZGluZywgZnVuY3Rpb24oc29ja2V0KSB7XG4gICAgICBwZW5kaW5nLnJlcXVlc3Qub25Tb2NrZXQoc29ja2V0KTtcbiAgICB9KTtcbiAgfVxufTtcblxuZnVuY3Rpb24gY3JlYXRlU2VjdXJlU29ja2V0KG9wdGlvbnMsIGNiKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgVHVubmVsaW5nQWdlbnQucHJvdG90eXBlLmNyZWF0ZVNvY2tldC5jYWxsKHNlbGYsIG9wdGlvbnMsIGZ1bmN0aW9uKHNvY2tldCkge1xuICAgIHZhciBob3N0SGVhZGVyID0gb3B0aW9ucy5yZXF1ZXN0LmdldEhlYWRlcignaG9zdCcpO1xuICAgIHZhciB0bHNPcHRpb25zID0gbWVyZ2VPcHRpb25zKHt9LCBzZWxmLm9wdGlvbnMsIHtcbiAgICAgIHNvY2tldDogc29ja2V0LFxuICAgICAgc2VydmVybmFtZTogaG9zdEhlYWRlciA/IGhvc3RIZWFkZXIucmVwbGFjZSgvOi4qJC8sICcnKSA6IG9wdGlvbnMuaG9zdFxuICAgIH0pO1xuXG4gICAgLy8gMCBpcyBkdW1teSBwb3J0IGZvciB2MC42XG4gICAgdmFyIHNlY3VyZVNvY2tldCA9IHRscy5jb25uZWN0KDAsIHRsc09wdGlvbnMpO1xuICAgIHNlbGYuc29ja2V0c1tzZWxmLnNvY2tldHMuaW5kZXhPZihzb2NrZXQpXSA9IHNlY3VyZVNvY2tldDtcbiAgICBjYihzZWN1cmVTb2NrZXQpO1xuICB9KTtcbn1cblxuXG5mdW5jdGlvbiB0b09wdGlvbnMoaG9zdCwgcG9ydCwgbG9jYWxBZGRyZXNzKSB7XG4gIGlmICh0eXBlb2YgaG9zdCA9PT0gJ3N0cmluZycpIHsgLy8gc2luY2UgdjAuMTBcbiAgICByZXR1cm4ge1xuICAgICAgaG9zdDogaG9zdCxcbiAgICAgIHBvcnQ6IHBvcnQsXG4gICAgICBsb2NhbEFkZHJlc3M6IGxvY2FsQWRkcmVzc1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIGhvc3Q7IC8vIGZvciB2MC4xMSBvciBsYXRlclxufVxuXG5mdW5jdGlvbiBtZXJnZU9wdGlvbnModGFyZ2V0KSB7XG4gIGZvciAodmFyIGkgPSAxLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICB2YXIgb3ZlcnJpZGVzID0gYXJndW1lbnRzW2ldO1xuICAgIGlmICh0eXBlb2Ygb3ZlcnJpZGVzID09PSAnb2JqZWN0Jykge1xuICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvdmVycmlkZXMpO1xuICAgICAgZm9yICh2YXIgaiA9IDAsIGtleUxlbiA9IGtleXMubGVuZ3RoOyBqIDwga2V5TGVuOyArK2opIHtcbiAgICAgICAgdmFyIGsgPSBrZXlzW2pdO1xuICAgICAgICBpZiAob3ZlcnJpZGVzW2tdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0YXJnZXRba10gPSBvdmVycmlkZXNba107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuXG52YXIgZGVidWc7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9ERUJVRyAmJiAvXFxidHVubmVsXFxiLy50ZXN0KHByb2Nlc3MuZW52Lk5PREVfREVCVUcpKSB7XG4gIGRlYnVnID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgIGlmICh0eXBlb2YgYXJnc1swXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGFyZ3NbMF0gPSAnVFVOTkVMOiAnICsgYXJnc1swXTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXJncy51bnNoaWZ0KCdUVU5ORUw6Jyk7XG4gICAgfVxuICAgIGNvbnNvbGUuZXJyb3IuYXBwbHkoY29uc29sZSwgYXJncyk7XG4gIH1cbn0gZWxzZSB7XG4gIGRlYnVnID0gZnVuY3Rpb24oKSB7fTtcbn1cbmV4cG9ydHMuZGVidWcgPSBkZWJ1ZzsgLy8gZm9yIHRlc3RcbiIsCiAgICAibW9kdWxlLmV4cG9ydHMgPSB7XG4gIGtDbG9zZTogU3ltYm9sKCdjbG9zZScpLFxuICBrRGVzdHJveTogU3ltYm9sKCdkZXN0cm95JyksXG4gIGtEaXNwYXRjaDogU3ltYm9sKCdkaXNwYXRjaCcpLFxuICBrVXJsOiBTeW1ib2woJ3VybCcpLFxuICBrV3JpdGluZzogU3ltYm9sKCd3cml0aW5nJyksXG4gIGtSZXN1bWluZzogU3ltYm9sKCdyZXN1bWluZycpLFxuICBrUXVldWU6IFN5bWJvbCgncXVldWUnKSxcbiAga0Nvbm5lY3Q6IFN5bWJvbCgnY29ubmVjdCcpLFxuICBrQ29ubmVjdGluZzogU3ltYm9sKCdjb25uZWN0aW5nJyksXG4gIGtIZWFkZXJzTGlzdDogU3ltYm9sKCdoZWFkZXJzIGxpc3QnKSxcbiAga0tlZXBBbGl2ZURlZmF1bHRUaW1lb3V0OiBTeW1ib2woJ2RlZmF1bHQga2VlcCBhbGl2ZSB0aW1lb3V0JyksXG4gIGtLZWVwQWxpdmVNYXhUaW1lb3V0OiBTeW1ib2woJ21heCBrZWVwIGFsaXZlIHRpbWVvdXQnKSxcbiAga0tlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGQ6IFN5bWJvbCgna2VlcCBhbGl2ZSB0aW1lb3V0IHRocmVzaG9sZCcpLFxuICBrS2VlcEFsaXZlVGltZW91dFZhbHVlOiBTeW1ib2woJ2tlZXAgYWxpdmUgdGltZW91dCcpLFxuICBrS2VlcEFsaXZlOiBTeW1ib2woJ2tlZXAgYWxpdmUnKSxcbiAga0hlYWRlcnNUaW1lb3V0OiBTeW1ib2woJ2hlYWRlcnMgdGltZW91dCcpLFxuICBrQm9keVRpbWVvdXQ6IFN5bWJvbCgnYm9keSB0aW1lb3V0JyksXG4gIGtTZXJ2ZXJOYW1lOiBTeW1ib2woJ3NlcnZlciBuYW1lJyksXG4gIGtMb2NhbEFkZHJlc3M6IFN5bWJvbCgnbG9jYWwgYWRkcmVzcycpLFxuICBrSG9zdDogU3ltYm9sKCdob3N0JyksXG4gIGtOb1JlZjogU3ltYm9sKCdubyByZWYnKSxcbiAga0JvZHlVc2VkOiBTeW1ib2woJ3VzZWQnKSxcbiAga1J1bm5pbmc6IFN5bWJvbCgncnVubmluZycpLFxuICBrQmxvY2tpbmc6IFN5bWJvbCgnYmxvY2tpbmcnKSxcbiAga1BlbmRpbmc6IFN5bWJvbCgncGVuZGluZycpLFxuICBrU2l6ZTogU3ltYm9sKCdzaXplJyksXG4gIGtCdXN5OiBTeW1ib2woJ2J1c3knKSxcbiAga1F1ZXVlZDogU3ltYm9sKCdxdWV1ZWQnKSxcbiAga0ZyZWU6IFN5bWJvbCgnZnJlZScpLFxuICBrQ29ubmVjdGVkOiBTeW1ib2woJ2Nvbm5lY3RlZCcpLFxuICBrQ2xvc2VkOiBTeW1ib2woJ2Nsb3NlZCcpLFxuICBrTmVlZERyYWluOiBTeW1ib2woJ25lZWQgZHJhaW4nKSxcbiAga1Jlc2V0OiBTeW1ib2woJ3Jlc2V0JyksXG4gIGtEZXN0cm95ZWQ6IFN5bWJvbC5mb3IoJ25vZGVqcy5zdHJlYW0uZGVzdHJveWVkJyksXG4gIGtNYXhIZWFkZXJzU2l6ZTogU3ltYm9sKCdtYXggaGVhZGVycyBzaXplJyksXG4gIGtSdW5uaW5nSWR4OiBTeW1ib2woJ3J1bm5pbmcgaW5kZXgnKSxcbiAga1BlbmRpbmdJZHg6IFN5bWJvbCgncGVuZGluZyBpbmRleCcpLFxuICBrRXJyb3I6IFN5bWJvbCgnZXJyb3InKSxcbiAga0NsaWVudHM6IFN5bWJvbCgnY2xpZW50cycpLFxuICBrQ2xpZW50OiBTeW1ib2woJ2NsaWVudCcpLFxuICBrUGFyc2VyOiBTeW1ib2woJ3BhcnNlcicpLFxuICBrT25EZXN0cm95ZWQ6IFN5bWJvbCgnZGVzdHJveSBjYWxsYmFja3MnKSxcbiAga1BpcGVsaW5pbmc6IFN5bWJvbCgncGlwZWxpbmluZycpLFxuICBrU29ja2V0OiBTeW1ib2woJ3NvY2tldCcpLFxuICBrSG9zdEhlYWRlcjogU3ltYm9sKCdob3N0IGhlYWRlcicpLFxuICBrQ29ubmVjdG9yOiBTeW1ib2woJ2Nvbm5lY3RvcicpLFxuICBrU3RyaWN0Q29udGVudExlbmd0aDogU3ltYm9sKCdzdHJpY3QgY29udGVudCBsZW5ndGgnKSxcbiAga01heFJlZGlyZWN0aW9uczogU3ltYm9sKCdtYXhSZWRpcmVjdGlvbnMnKSxcbiAga01heFJlcXVlc3RzOiBTeW1ib2woJ21heFJlcXVlc3RzUGVyQ2xpZW50JyksXG4gIGtQcm94eTogU3ltYm9sKCdwcm94eSBhZ2VudCBvcHRpb25zJyksXG4gIGtDb3VudGVyOiBTeW1ib2woJ3NvY2tldCByZXF1ZXN0IGNvdW50ZXInKSxcbiAga0ludGVyY2VwdG9yczogU3ltYm9sKCdkaXNwYXRjaCBpbnRlcmNlcHRvcnMnKSxcbiAga01heFJlc3BvbnNlU2l6ZTogU3ltYm9sKCdtYXggcmVzcG9uc2Ugc2l6ZScpLFxuICBrSFRUUDJTZXNzaW9uOiBTeW1ib2woJ2h0dHAyU2Vzc2lvbicpLFxuICBrSFRUUDJTZXNzaW9uU3RhdGU6IFN5bWJvbCgnaHR0cDJTZXNzaW9uIHN0YXRlJyksXG4gIGtIVFRQMkJ1aWxkUmVxdWVzdDogU3ltYm9sKCdodHRwMiBidWlsZCByZXF1ZXN0JyksXG4gIGtIVFRQMUJ1aWxkUmVxdWVzdDogU3ltYm9sKCdodHRwMSBidWlsZCByZXF1ZXN0JyksXG4gIGtIVFRQMkNvcHlIZWFkZXJzOiBTeW1ib2woJ2h0dHAyIGNvcHkgaGVhZGVycycpLFxuICBrSFRUUENvbm5WZXJzaW9uOiBTeW1ib2woJ2h0dHAgY29ubmVjdGlvbiB2ZXJzaW9uJyksXG4gIGtSZXRyeUhhbmRsZXJEZWZhdWx0UmV0cnk6IFN5bWJvbCgncmV0cnkgYWdlbnQgZGVmYXVsdCByZXRyeScpLFxuICBrQ29uc3RydWN0OiBTeW1ib2woJ2NvbnN0cnVjdGFibGUnKVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY2xhc3MgVW5kaWNpRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICB0aGlzLm5hbWUgPSAnVW5kaWNpRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlInXG4gIH1cbn1cblxuY2xhc3MgQ29ubmVjdFRpbWVvdXRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIENvbm5lY3RUaW1lb3V0RXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0Nvbm5lY3RUaW1lb3V0RXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnQ29ubmVjdCBUaW1lb3V0IEVycm9yJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0NPTk5FQ1RfVElNRU9VVCdcbiAgfVxufVxuXG5jbGFzcyBIZWFkZXJzVGltZW91dEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgSGVhZGVyc1RpbWVvdXRFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnSGVhZGVyc1RpbWVvdXRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdIZWFkZXJzIFRpbWVvdXQgRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfSEVBREVSU19USU1FT1VUJ1xuICB9XG59XG5cbmNsYXNzIEhlYWRlcnNPdmVyZmxvd0Vycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgSGVhZGVyc092ZXJmbG93RXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0hlYWRlcnNPdmVyZmxvd0Vycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ0hlYWRlcnMgT3ZlcmZsb3cgRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfSEVBREVSU19PVkVSRkxPVydcbiAgfVxufVxuXG5jbGFzcyBCb2R5VGltZW91dEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgQm9keVRpbWVvdXRFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnQm9keVRpbWVvdXRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdCb2R5IFRpbWVvdXQgRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfQk9EWV9USU1FT1VUJ1xuICB9XG59XG5cbmNsYXNzIFJlc3BvbnNlU3RhdHVzQ29kZUVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSwgc3RhdHVzQ29kZSwgaGVhZGVycywgYm9keSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ1Jlc3BvbnNlU3RhdHVzQ29kZUVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1Jlc3BvbnNlIFN0YXR1cyBDb2RlIEVycm9yJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX1JFU1BPTlNFX1NUQVRVU19DT0RFJ1xuICAgIHRoaXMuYm9keSA9IGJvZHlcbiAgICB0aGlzLnN0YXR1cyA9IHN0YXR1c0NvZGVcbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBzdGF0dXNDb2RlXG4gICAgdGhpcy5oZWFkZXJzID0gaGVhZGVyc1xuICB9XG59XG5cbmNsYXNzIEludmFsaWRBcmd1bWVudEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgSW52YWxpZEFyZ3VtZW50RXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0ludmFsaWRBcmd1bWVudEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ0ludmFsaWQgQXJndW1lbnQgRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfSU5WQUxJRF9BUkcnXG4gIH1cbn1cblxuY2xhc3MgSW52YWxpZFJldHVyblZhbHVlRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnSW52YWxpZFJldHVyblZhbHVlRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnSW52YWxpZCBSZXR1cm4gVmFsdWUgRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfSU5WQUxJRF9SRVRVUk5fVkFMVUUnXG4gIH1cbn1cblxuY2xhc3MgUmVxdWVzdEFib3J0ZWRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFJlcXVlc3RBYm9ydGVkRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0Fib3J0RXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnUmVxdWVzdCBhYm9ydGVkJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0FCT1JURUQnXG4gIH1cbn1cblxuY2xhc3MgSW5mb3JtYXRpb25hbEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgSW5mb3JtYXRpb25hbEVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdJbmZvcm1hdGlvbmFsRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnUmVxdWVzdCBpbmZvcm1hdGlvbidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9JTkZPJ1xuICB9XG59XG5cbmNsYXNzIFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1JlcXVlc3QgYm9keSBsZW5ndGggZG9lcyBub3QgbWF0Y2ggY29udGVudC1sZW5ndGggaGVhZGVyJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX1JFUV9DT05URU5UX0xFTkdUSF9NSVNNQVRDSCdcbiAgfVxufVxuXG5jbGFzcyBSZXNwb25zZUNvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgUmVzcG9uc2VDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnUmVzcG9uc2VDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdSZXNwb25zZSBib2R5IGxlbmd0aCBkb2VzIG5vdCBtYXRjaCBjb250ZW50LWxlbmd0aCBoZWFkZXInXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfUkVTX0NPTlRFTlRfTEVOR1RIX01JU01BVENIJ1xuICB9XG59XG5cbmNsYXNzIENsaWVudERlc3Ryb3llZEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgQ2xpZW50RGVzdHJveWVkRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0NsaWVudERlc3Ryb3llZEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1RoZSBjbGllbnQgaXMgZGVzdHJveWVkJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0RFU1RST1lFRCdcbiAgfVxufVxuXG5jbGFzcyBDbGllbnRDbG9zZWRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIENsaWVudENsb3NlZEVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdDbGllbnRDbG9zZWRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdUaGUgY2xpZW50IGlzIGNsb3NlZCdcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9DTE9TRUQnXG4gIH1cbn1cblxuY2xhc3MgU29ja2V0RXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlLCBzb2NrZXQpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFNvY2tldEVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdTb2NrZXRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdTb2NrZXQgZXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfU09DS0VUJ1xuICAgIHRoaXMuc29ja2V0ID0gc29ja2V0XG4gIH1cbn1cblxuY2xhc3MgTm90U3VwcG9ydGVkRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBOb3RTdXBwb3J0ZWRFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnTm90U3VwcG9ydGVkRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnTm90IHN1cHBvcnRlZCBlcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9OT1RfU1VQUE9SVEVEJ1xuICB9XG59XG5cbmNsYXNzIEJhbGFuY2VkUG9vbE1pc3NpbmdVcHN0cmVhbUVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgTm90U3VwcG9ydGVkRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ01pc3NpbmdVcHN0cmVhbUVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ05vIHVwc3RyZWFtIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBCYWxhbmNlZFBvb2wnXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfQlBMX01JU1NJTkdfVVBTVFJFQU0nXG4gIH1cbn1cblxuY2xhc3MgSFRUUFBhcnNlckVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSwgY29kZSwgZGF0YSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgSFRUUFBhcnNlckVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdIVFRQUGFyc2VyRXJyb3InXG4gICAgdGhpcy5jb2RlID0gY29kZSA/IGBIUEVfJHtjb2RlfWAgOiB1bmRlZmluZWRcbiAgICB0aGlzLmRhdGEgPSBkYXRhID8gZGF0YS50b1N0cmluZygpIDogdW5kZWZpbmVkXG4gIH1cbn1cblxuY2xhc3MgUmVzcG9uc2VFeGNlZWRlZE1heFNpemVFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFJlc3BvbnNlRXhjZWVkZWRNYXhTaXplRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ1Jlc3BvbnNlRXhjZWVkZWRNYXhTaXplRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnUmVzcG9uc2UgY29udGVudCBleGNlZWRlZCBtYXggc2l6ZSdcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9SRVNfRVhDRUVERURfTUFYX1NJWkUnXG4gIH1cbn1cblxuY2xhc3MgUmVxdWVzdFJldHJ5RXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlLCBjb2RlLCB7IGhlYWRlcnMsIGRhdGEgfSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgUmVxdWVzdFJldHJ5RXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ1JlcXVlc3RSZXRyeUVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1JlcXVlc3QgcmV0cnkgZXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfUkVRX1JFVFJZJ1xuICAgIHRoaXMuc3RhdHVzQ29kZSA9IGNvZGVcbiAgICB0aGlzLmRhdGEgPSBkYXRhXG4gICAgdGhpcy5oZWFkZXJzID0gaGVhZGVyc1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBIVFRQUGFyc2VyRXJyb3IsXG4gIFVuZGljaUVycm9yLFxuICBIZWFkZXJzVGltZW91dEVycm9yLFxuICBIZWFkZXJzT3ZlcmZsb3dFcnJvcixcbiAgQm9keVRpbWVvdXRFcnJvcixcbiAgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yLFxuICBDb25uZWN0VGltZW91dEVycm9yLFxuICBSZXNwb25zZVN0YXR1c0NvZGVFcnJvcixcbiAgSW52YWxpZEFyZ3VtZW50RXJyb3IsXG4gIEludmFsaWRSZXR1cm5WYWx1ZUVycm9yLFxuICBSZXF1ZXN0QWJvcnRlZEVycm9yLFxuICBDbGllbnREZXN0cm95ZWRFcnJvcixcbiAgQ2xpZW50Q2xvc2VkRXJyb3IsXG4gIEluZm9ybWF0aW9uYWxFcnJvcixcbiAgU29ja2V0RXJyb3IsXG4gIE5vdFN1cHBvcnRlZEVycm9yLFxuICBSZXNwb25zZUNvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yLFxuICBCYWxhbmNlZFBvb2xNaXNzaW5nVXBzdHJlYW1FcnJvcixcbiAgUmVzcG9uc2VFeGNlZWRlZE1heFNpemVFcnJvcixcbiAgUmVxdWVzdFJldHJ5RXJyb3Jcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbi8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPn0gKi9cbmNvbnN0IGhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkID0ge31cblxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRUUC9IZWFkZXJzXG5jb25zdCB3ZWxsa25vd25IZWFkZXJOYW1lcyA9IFtcbiAgJ0FjY2VwdCcsXG4gICdBY2NlcHQtRW5jb2RpbmcnLFxuICAnQWNjZXB0LUxhbmd1YWdlJyxcbiAgJ0FjY2VwdC1SYW5nZXMnLFxuICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctQ3JlZGVudGlhbHMnLFxuICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycycsXG4gICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzJyxcbiAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbicsXG4gICdBY2Nlc3MtQ29udHJvbC1FeHBvc2UtSGVhZGVycycsXG4gICdBY2Nlc3MtQ29udHJvbC1NYXgtQWdlJyxcbiAgJ0FjY2Vzcy1Db250cm9sLVJlcXVlc3QtSGVhZGVycycsXG4gICdBY2Nlc3MtQ29udHJvbC1SZXF1ZXN0LU1ldGhvZCcsXG4gICdBZ2UnLFxuICAnQWxsb3cnLFxuICAnQWx0LVN2YycsXG4gICdBbHQtVXNlZCcsXG4gICdBdXRob3JpemF0aW9uJyxcbiAgJ0NhY2hlLUNvbnRyb2wnLFxuICAnQ2xlYXItU2l0ZS1EYXRhJyxcbiAgJ0Nvbm5lY3Rpb24nLFxuICAnQ29udGVudC1EaXNwb3NpdGlvbicsXG4gICdDb250ZW50LUVuY29kaW5nJyxcbiAgJ0NvbnRlbnQtTGFuZ3VhZ2UnLFxuICAnQ29udGVudC1MZW5ndGgnLFxuICAnQ29udGVudC1Mb2NhdGlvbicsXG4gICdDb250ZW50LVJhbmdlJyxcbiAgJ0NvbnRlbnQtU2VjdXJpdHktUG9saWN5JyxcbiAgJ0NvbnRlbnQtU2VjdXJpdHktUG9saWN5LVJlcG9ydC1Pbmx5JyxcbiAgJ0NvbnRlbnQtVHlwZScsXG4gICdDb29raWUnLFxuICAnQ3Jvc3MtT3JpZ2luLUVtYmVkZGVyLVBvbGljeScsXG4gICdDcm9zcy1PcmlnaW4tT3BlbmVyLVBvbGljeScsXG4gICdDcm9zcy1PcmlnaW4tUmVzb3VyY2UtUG9saWN5JyxcbiAgJ0RhdGUnLFxuICAnRGV2aWNlLU1lbW9yeScsXG4gICdEb3dubGluaycsXG4gICdFQ1QnLFxuICAnRVRhZycsXG4gICdFeHBlY3QnLFxuICAnRXhwZWN0LUNUJyxcbiAgJ0V4cGlyZXMnLFxuICAnRm9yd2FyZGVkJyxcbiAgJ0Zyb20nLFxuICAnSG9zdCcsXG4gICdJZi1NYXRjaCcsXG4gICdJZi1Nb2RpZmllZC1TaW5jZScsXG4gICdJZi1Ob25lLU1hdGNoJyxcbiAgJ0lmLVJhbmdlJyxcbiAgJ0lmLVVubW9kaWZpZWQtU2luY2UnLFxuICAnS2VlcC1BbGl2ZScsXG4gICdMYXN0LU1vZGlmaWVkJyxcbiAgJ0xpbmsnLFxuICAnTG9jYXRpb24nLFxuICAnTWF4LUZvcndhcmRzJyxcbiAgJ09yaWdpbicsXG4gICdQZXJtaXNzaW9ucy1Qb2xpY3knLFxuICAnUHJhZ21hJyxcbiAgJ1Byb3h5LUF1dGhlbnRpY2F0ZScsXG4gICdQcm94eS1BdXRob3JpemF0aW9uJyxcbiAgJ1JUVCcsXG4gICdSYW5nZScsXG4gICdSZWZlcmVyJyxcbiAgJ1JlZmVycmVyLVBvbGljeScsXG4gICdSZWZyZXNoJyxcbiAgJ1JldHJ5LUFmdGVyJyxcbiAgJ1NlYy1XZWJTb2NrZXQtQWNjZXB0JyxcbiAgJ1NlYy1XZWJTb2NrZXQtRXh0ZW5zaW9ucycsXG4gICdTZWMtV2ViU29ja2V0LUtleScsXG4gICdTZWMtV2ViU29ja2V0LVByb3RvY29sJyxcbiAgJ1NlYy1XZWJTb2NrZXQtVmVyc2lvbicsXG4gICdTZXJ2ZXInLFxuICAnU2VydmVyLVRpbWluZycsXG4gICdTZXJ2aWNlLVdvcmtlci1BbGxvd2VkJyxcbiAgJ1NlcnZpY2UtV29ya2VyLU5hdmlnYXRpb24tUHJlbG9hZCcsXG4gICdTZXQtQ29va2llJyxcbiAgJ1NvdXJjZU1hcCcsXG4gICdTdHJpY3QtVHJhbnNwb3J0LVNlY3VyaXR5JyxcbiAgJ1N1cHBvcnRzLUxvYWRpbmctTW9kZScsXG4gICdURScsXG4gICdUaW1pbmctQWxsb3ctT3JpZ2luJyxcbiAgJ1RyYWlsZXInLFxuICAnVHJhbnNmZXItRW5jb2RpbmcnLFxuICAnVXBncmFkZScsXG4gICdVcGdyYWRlLUluc2VjdXJlLVJlcXVlc3RzJyxcbiAgJ1VzZXItQWdlbnQnLFxuICAnVmFyeScsXG4gICdWaWEnLFxuICAnV1dXLUF1dGhlbnRpY2F0ZScsXG4gICdYLUNvbnRlbnQtVHlwZS1PcHRpb25zJyxcbiAgJ1gtRE5TLVByZWZldGNoLUNvbnRyb2wnLFxuICAnWC1GcmFtZS1PcHRpb25zJyxcbiAgJ1gtUGVybWl0dGVkLUNyb3NzLURvbWFpbi1Qb2xpY2llcycsXG4gICdYLVBvd2VyZWQtQnknLFxuICAnWC1SZXF1ZXN0ZWQtV2l0aCcsXG4gICdYLVhTUy1Qcm90ZWN0aW9uJ1xuXVxuXG5mb3IgKGxldCBpID0gMDsgaSA8IHdlbGxrbm93bkhlYWRlck5hbWVzLmxlbmd0aDsgKytpKSB7XG4gIGNvbnN0IGtleSA9IHdlbGxrbm93bkhlYWRlck5hbWVzW2ldXG4gIGNvbnN0IGxvd2VyQ2FzZWRLZXkgPSBrZXkudG9Mb3dlckNhc2UoKVxuICBoZWFkZXJOYW1lTG93ZXJDYXNlZFJlY29yZFtrZXldID0gaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmRbbG93ZXJDYXNlZEtleV0gPVxuICAgIGxvd2VyQ2FzZWRLZXlcbn1cblxuLy8gTm90ZTogb2JqZWN0IHByb3RvdHlwZXMgc2hvdWxkIG5vdCBiZSBhYmxlIHRvIGJlIHJlZmVyZW5jZWQuIGUuZy4gYE9iamVjdCNoYXNPd25Qcm9wZXJ0eWAuXG5PYmplY3Quc2V0UHJvdG90eXBlT2YoaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmQsIG51bGwpXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICB3ZWxsa25vd25IZWFkZXJOYW1lcyxcbiAgaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmRcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7IGtEZXN0cm95ZWQsIGtCb2R5VXNlZCB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgSW5jb21pbmdNZXNzYWdlIH0gPSByZXF1aXJlKCdodHRwJylcbmNvbnN0IHN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpXG5jb25zdCBuZXQgPSByZXF1aXJlKCduZXQnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi9lcnJvcnMnKVxuY29uc3QgeyBCbG9iIH0gPSByZXF1aXJlKCdidWZmZXInKVxuY29uc3Qgbm9kZVV0aWwgPSByZXF1aXJlKCd1dGlsJylcbmNvbnN0IHsgc3RyaW5naWZ5IH0gPSByZXF1aXJlKCdxdWVyeXN0cmluZycpXG5jb25zdCB7IGhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5cbmNvbnN0IFtub2RlTWFqb3IsIG5vZGVNaW5vcl0gPSBwcm9jZXNzLnZlcnNpb25zLm5vZGUuc3BsaXQoJy4nKS5tYXAodiA9PiBOdW1iZXIodikpXG5cbmZ1bmN0aW9uIG5vcCAoKSB7fVxuXG5mdW5jdGlvbiBpc1N0cmVhbSAob2JqKSB7XG4gIHJldHVybiBvYmogJiYgdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG9iai5waXBlID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBvYmoub24gPT09ICdmdW5jdGlvbidcbn1cblxuLy8gYmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL25vZGUtZmV0Y2gvZmV0Y2gtYmxvYi9ibG9iLzhhYjU4N2QzNDA4MGRlOTQxNDBiNTRmMDcxNjg0NTFlN2QwYjY1NWUvaW5kZXguanMjTDIyOS1MMjQxIChNSVQgTGljZW5zZSlcbmZ1bmN0aW9uIGlzQmxvYkxpa2UgKG9iamVjdCkge1xuICByZXR1cm4gKEJsb2IgJiYgb2JqZWN0IGluc3RhbmNlb2YgQmxvYikgfHwgKFxuICAgIG9iamVjdCAmJlxuICAgIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmXG4gICAgKHR5cGVvZiBvYmplY3Quc3RyZWFtID09PSAnZnVuY3Rpb24nIHx8XG4gICAgICB0eXBlb2Ygb2JqZWN0LmFycmF5QnVmZmVyID09PSAnZnVuY3Rpb24nKSAmJlxuICAgIC9eKEJsb2J8RmlsZSkkLy50ZXN0KG9iamVjdFtTeW1ib2wudG9TdHJpbmdUYWddKVxuICApXG59XG5cbmZ1bmN0aW9uIGJ1aWxkVVJMICh1cmwsIHF1ZXJ5UGFyYW1zKSB7XG4gIGlmICh1cmwuaW5jbHVkZXMoJz8nKSB8fCB1cmwuaW5jbHVkZXMoJyMnKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignUXVlcnkgcGFyYW1zIGNhbm5vdCBiZSBwYXNzZWQgd2hlbiB1cmwgYWxyZWFkeSBjb250YWlucyBcIj9cIiBvciBcIiNcIi4nKVxuICB9XG5cbiAgY29uc3Qgc3RyaW5naWZpZWQgPSBzdHJpbmdpZnkocXVlcnlQYXJhbXMpXG5cbiAgaWYgKHN0cmluZ2lmaWVkKSB7XG4gICAgdXJsICs9ICc/JyArIHN0cmluZ2lmaWVkXG4gIH1cblxuICByZXR1cm4gdXJsXG59XG5cbmZ1bmN0aW9uIHBhcnNlVVJMICh1cmwpIHtcbiAgaWYgKHR5cGVvZiB1cmwgPT09ICdzdHJpbmcnKSB7XG4gICAgdXJsID0gbmV3IFVSTCh1cmwpXG5cbiAgICBpZiAoIS9eaHR0cHM/Oi8udGVzdCh1cmwub3JpZ2luIHx8IHVybC5wcm90b2NvbCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkwgcHJvdG9jb2w6IHRoZSBVUkwgbXVzdCBzdGFydCB3aXRoIGBodHRwOmAgb3IgYGh0dHBzOmAuJylcbiAgICB9XG5cbiAgICByZXR1cm4gdXJsXG4gIH1cblxuICBpZiAoIXVybCB8fCB0eXBlb2YgdXJsICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkw6IFRoZSBVUkwgYXJndW1lbnQgbXVzdCBiZSBhIG5vbi1udWxsIG9iamVjdC4nKVxuICB9XG5cbiAgaWYgKCEvXmh0dHBzPzovLnRlc3QodXJsLm9yaWdpbiB8fCB1cmwucHJvdG9jb2wpKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIFVSTCBwcm90b2NvbDogdGhlIFVSTCBtdXN0IHN0YXJ0IHdpdGggYGh0dHA6YCBvciBgaHR0cHM6YC4nKVxuICB9XG5cbiAgaWYgKCEodXJsIGluc3RhbmNlb2YgVVJMKSkge1xuICAgIGlmICh1cmwucG9ydCAhPSBudWxsICYmIHVybC5wb3J0ICE9PSAnJyAmJiAhTnVtYmVyLmlzRmluaXRlKHBhcnNlSW50KHVybC5wb3J0KSkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkw6IHBvcnQgbXVzdCBiZSBhIHZhbGlkIGludGVnZXIgb3IgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gaW50ZWdlci4nKVxuICAgIH1cblxuICAgIGlmICh1cmwucGF0aCAhPSBudWxsICYmIHR5cGVvZiB1cmwucGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkwgcGF0aDogdGhlIHBhdGggbXVzdCBiZSBhIHN0cmluZyBvciBudWxsL3VuZGVmaW5lZC4nKVxuICAgIH1cblxuICAgIGlmICh1cmwucGF0aG5hbWUgIT0gbnVsbCAmJiB0eXBlb2YgdXJsLnBhdGhuYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIFVSTCBwYXRobmFtZTogdGhlIHBhdGhuYW1lIG11c3QgYmUgYSBzdHJpbmcgb3IgbnVsbC91bmRlZmluZWQuJylcbiAgICB9XG5cbiAgICBpZiAodXJsLmhvc3RuYW1lICE9IG51bGwgJiYgdHlwZW9mIHVybC5ob3N0bmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkwgaG9zdG5hbWU6IHRoZSBob3N0bmFtZSBtdXN0IGJlIGEgc3RyaW5nIG9yIG51bGwvdW5kZWZpbmVkLicpXG4gICAgfVxuXG4gICAgaWYgKHVybC5vcmlnaW4gIT0gbnVsbCAmJiB0eXBlb2YgdXJsLm9yaWdpbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkwgb3JpZ2luOiB0aGUgb3JpZ2luIG11c3QgYmUgYSBzdHJpbmcgb3IgbnVsbC91bmRlZmluZWQuJylcbiAgICB9XG5cbiAgICBjb25zdCBwb3J0ID0gdXJsLnBvcnQgIT0gbnVsbFxuICAgICAgPyB1cmwucG9ydFxuICAgICAgOiAodXJsLnByb3RvY29sID09PSAnaHR0cHM6JyA/IDQ0MyA6IDgwKVxuICAgIGxldCBvcmlnaW4gPSB1cmwub3JpZ2luICE9IG51bGxcbiAgICAgID8gdXJsLm9yaWdpblxuICAgICAgOiBgJHt1cmwucHJvdG9jb2x9Ly8ke3VybC5ob3N0bmFtZX06JHtwb3J0fWBcbiAgICBsZXQgcGF0aCA9IHVybC5wYXRoICE9IG51bGxcbiAgICAgID8gdXJsLnBhdGhcbiAgICAgIDogYCR7dXJsLnBhdGhuYW1lIHx8ICcnfSR7dXJsLnNlYXJjaCB8fCAnJ31gXG5cbiAgICBpZiAob3JpZ2luLmVuZHNXaXRoKCcvJykpIHtcbiAgICAgIG9yaWdpbiA9IG9yaWdpbi5zdWJzdHJpbmcoMCwgb3JpZ2luLmxlbmd0aCAtIDEpXG4gICAgfVxuXG4gICAgaWYgKHBhdGggJiYgIXBhdGguc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICBwYXRoID0gYC8ke3BhdGh9YFxuICAgIH1cbiAgICAvLyBuZXcgVVJMKHBhdGgsIG9yaWdpbikgaXMgdW5zYWZlIHdoZW4gYHBhdGhgIGNvbnRhaW5zIGFuIGFic29sdXRlIFVSTFxuICAgIC8vIEZyb20gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1VSTC9VUkw6XG4gICAgLy8gSWYgZmlyc3QgcGFyYW1ldGVyIGlzIGEgcmVsYXRpdmUgVVJMLCBzZWNvbmQgcGFyYW0gaXMgcmVxdWlyZWQsIGFuZCB3aWxsIGJlIHVzZWQgYXMgdGhlIGJhc2UgVVJMLlxuICAgIC8vIElmIGZpcnN0IHBhcmFtZXRlciBpcyBhbiBhYnNvbHV0ZSBVUkwsIGEgZ2l2ZW4gc2Vjb25kIHBhcmFtIHdpbGwgYmUgaWdub3JlZC5cbiAgICB1cmwgPSBuZXcgVVJMKG9yaWdpbiArIHBhdGgpXG4gIH1cblxuICByZXR1cm4gdXJsXG59XG5cbmZ1bmN0aW9uIHBhcnNlT3JpZ2luICh1cmwpIHtcbiAgdXJsID0gcGFyc2VVUkwodXJsKVxuXG4gIGlmICh1cmwucGF0aG5hbWUgIT09ICcvJyB8fCB1cmwuc2VhcmNoIHx8IHVybC5oYXNoKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIHVybCcpXG4gIH1cblxuICByZXR1cm4gdXJsXG59XG5cbmZ1bmN0aW9uIGdldEhvc3RuYW1lIChob3N0KSB7XG4gIGlmIChob3N0WzBdID09PSAnWycpIHtcbiAgICBjb25zdCBpZHggPSBob3N0LmluZGV4T2YoJ10nKVxuXG4gICAgYXNzZXJ0KGlkeCAhPT0gLTEpXG4gICAgcmV0dXJuIGhvc3Quc3Vic3RyaW5nKDEsIGlkeClcbiAgfVxuXG4gIGNvbnN0IGlkeCA9IGhvc3QuaW5kZXhPZignOicpXG4gIGlmIChpZHggPT09IC0xKSByZXR1cm4gaG9zdFxuXG4gIHJldHVybiBob3N0LnN1YnN0cmluZygwLCBpZHgpXG59XG5cbi8vIElQIGFkZHJlc3NlcyBhcmUgbm90IHZhbGlkIHNlcnZlciBuYW1lcyBwZXIgUkZDNjA2NlxuLy8gPiBDdXJyZW50bHksIHRoZSBvbmx5IHNlcnZlciBuYW1lcyBzdXBwb3J0ZWQgYXJlIEROUyBob3N0bmFtZXNcbmZ1bmN0aW9uIGdldFNlcnZlck5hbWUgKGhvc3QpIHtcbiAgaWYgKCFob3N0KSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgaG9zdCwgJ3N0cmluZycpXG5cbiAgY29uc3Qgc2VydmVybmFtZSA9IGdldEhvc3RuYW1lKGhvc3QpXG4gIGlmIChuZXQuaXNJUChzZXJ2ZXJuYW1lKSkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgcmV0dXJuIHNlcnZlcm5hbWVcbn1cblxuZnVuY3Rpb24gZGVlcENsb25lIChvYmopIHtcbiAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob2JqKSlcbn1cblxuZnVuY3Rpb24gaXNBc3luY0l0ZXJhYmxlIChvYmopIHtcbiAgcmV0dXJuICEhKG9iaiAhPSBudWxsICYmIHR5cGVvZiBvYmpbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID09PSAnZnVuY3Rpb24nKVxufVxuXG5mdW5jdGlvbiBpc0l0ZXJhYmxlIChvYmopIHtcbiAgcmV0dXJuICEhKG9iaiAhPSBudWxsICYmICh0eXBlb2Ygb2JqW1N5bWJvbC5pdGVyYXRvcl0gPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIG9ialtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPT09ICdmdW5jdGlvbicpKVxufVxuXG5mdW5jdGlvbiBib2R5TGVuZ3RoIChib2R5KSB7XG4gIGlmIChib2R5ID09IG51bGwpIHtcbiAgICByZXR1cm4gMFxuICB9IGVsc2UgaWYgKGlzU3RyZWFtKGJvZHkpKSB7XG4gICAgY29uc3Qgc3RhdGUgPSBib2R5Ll9yZWFkYWJsZVN0YXRlXG4gICAgcmV0dXJuIHN0YXRlICYmIHN0YXRlLm9iamVjdE1vZGUgPT09IGZhbHNlICYmIHN0YXRlLmVuZGVkID09PSB0cnVlICYmIE51bWJlci5pc0Zpbml0ZShzdGF0ZS5sZW5ndGgpXG4gICAgICA/IHN0YXRlLmxlbmd0aFxuICAgICAgOiBudWxsXG4gIH0gZWxzZSBpZiAoaXNCbG9iTGlrZShib2R5KSkge1xuICAgIHJldHVybiBib2R5LnNpemUgIT0gbnVsbCA/IGJvZHkuc2l6ZSA6IG51bGxcbiAgfSBlbHNlIGlmIChpc0J1ZmZlcihib2R5KSkge1xuICAgIHJldHVybiBib2R5LmJ5dGVMZW5ndGhcbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG5cbmZ1bmN0aW9uIGlzRGVzdHJveWVkIChzdHJlYW0pIHtcbiAgcmV0dXJuICFzdHJlYW0gfHwgISEoc3RyZWFtLmRlc3Ryb3llZCB8fCBzdHJlYW1ba0Rlc3Ryb3llZF0pXG59XG5cbmZ1bmN0aW9uIGlzUmVhZGFibGVBYm9ydGVkIChzdHJlYW0pIHtcbiAgY29uc3Qgc3RhdGUgPSBzdHJlYW0gJiYgc3RyZWFtLl9yZWFkYWJsZVN0YXRlXG4gIHJldHVybiBpc0Rlc3Ryb3llZChzdHJlYW0pICYmIHN0YXRlICYmICFzdGF0ZS5lbmRFbWl0dGVkXG59XG5cbmZ1bmN0aW9uIGRlc3Ryb3kgKHN0cmVhbSwgZXJyKSB7XG4gIGlmIChzdHJlYW0gPT0gbnVsbCB8fCAhaXNTdHJlYW0oc3RyZWFtKSB8fCBpc0Rlc3Ryb3llZChzdHJlYW0pKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAodHlwZW9mIHN0cmVhbS5kZXN0cm95ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKE9iamVjdC5nZXRQcm90b3R5cGVPZihzdHJlYW0pLmNvbnN0cnVjdG9yID09PSBJbmNvbWluZ01lc3NhZ2UpIHtcbiAgICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvMzg1MDUvZmlsZXNcbiAgICAgIHN0cmVhbS5zb2NrZXQgPSBudWxsXG4gICAgfVxuXG4gICAgc3RyZWFtLmRlc3Ryb3koZXJyKVxuICB9IGVsc2UgaWYgKGVycikge1xuICAgIHByb2Nlc3MubmV4dFRpY2soKHN0cmVhbSwgZXJyKSA9PiB7XG4gICAgICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcnIpXG4gICAgfSwgc3RyZWFtLCBlcnIpXG4gIH1cblxuICBpZiAoc3RyZWFtLmRlc3Ryb3llZCAhPT0gdHJ1ZSkge1xuICAgIHN0cmVhbVtrRGVzdHJveWVkXSA9IHRydWVcbiAgfVxufVxuXG5jb25zdCBLRUVQQUxJVkVfVElNRU9VVF9FWFBSID0gL3RpbWVvdXQ9KFxcZCspL1xuZnVuY3Rpb24gcGFyc2VLZWVwQWxpdmVUaW1lb3V0ICh2YWwpIHtcbiAgY29uc3QgbSA9IHZhbC50b1N0cmluZygpLm1hdGNoKEtFRVBBTElWRV9USU1FT1VUX0VYUFIpXG4gIHJldHVybiBtID8gcGFyc2VJbnQobVsxXSwgMTApICogMTAwMCA6IG51bGxcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgYSBoZWFkZXIgbmFtZSBhbmQgcmV0dXJucyBpdHMgbG93ZXJjYXNlIHZhbHVlLlxuICogQHBhcmFtIHtzdHJpbmcgfCBCdWZmZXJ9IHZhbHVlIEhlYWRlciBuYW1lXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBoZWFkZXJOYW1lVG9TdHJpbmcgKHZhbHVlKSB7XG4gIHJldHVybiBoZWFkZXJOYW1lTG93ZXJDYXNlZFJlY29yZFt2YWx1ZV0gfHwgdmFsdWUudG9Mb3dlckNhc2UoKVxufVxuXG5mdW5jdGlvbiBwYXJzZUhlYWRlcnMgKGhlYWRlcnMsIG9iaiA9IHt9KSB7XG4gIC8vIEZvciBIMiBzdXBwb3J0XG4gIGlmICghQXJyYXkuaXNBcnJheShoZWFkZXJzKSkgcmV0dXJuIGhlYWRlcnNcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICBjb25zdCBrZXkgPSBoZWFkZXJzW2ldLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKVxuICAgIGxldCB2YWwgPSBvYmpba2V5XVxuXG4gICAgaWYgKCF2YWwpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnNbaSArIDFdKSkge1xuICAgICAgICBvYmpba2V5XSA9IGhlYWRlcnNbaSArIDFdLm1hcCh4ID0+IHgudG9TdHJpbmcoJ3V0ZjgnKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9ialtrZXldID0gaGVhZGVyc1tpICsgMV0udG9TdHJpbmcoJ3V0ZjgnKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgICB2YWwgPSBbdmFsXVxuICAgICAgICBvYmpba2V5XSA9IHZhbFxuICAgICAgfVxuICAgICAgdmFsLnB1c2goaGVhZGVyc1tpICsgMV0udG9TdHJpbmcoJ3V0ZjgnKSlcbiAgICB9XG4gIH1cblxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvNDY1MjhcbiAgaWYgKCdjb250ZW50LWxlbmd0aCcgaW4gb2JqICYmICdjb250ZW50LWRpc3Bvc2l0aW9uJyBpbiBvYmopIHtcbiAgICBvYmpbJ2NvbnRlbnQtZGlzcG9zaXRpb24nXSA9IEJ1ZmZlci5mcm9tKG9ialsnY29udGVudC1kaXNwb3NpdGlvbiddKS50b1N0cmluZygnbGF0aW4xJylcbiAgfVxuXG4gIHJldHVybiBvYmpcbn1cblxuZnVuY3Rpb24gcGFyc2VSYXdIZWFkZXJzIChoZWFkZXJzKSB7XG4gIGNvbnN0IHJldCA9IFtdXG4gIGxldCBoYXNDb250ZW50TGVuZ3RoID0gZmFsc2VcbiAgbGV0IGNvbnRlbnREaXNwb3NpdGlvbklkeCA9IC0xXG5cbiAgZm9yIChsZXQgbiA9IDA7IG4gPCBoZWFkZXJzLmxlbmd0aDsgbiArPSAyKSB7XG4gICAgY29uc3Qga2V5ID0gaGVhZGVyc1tuICsgMF0udG9TdHJpbmcoKVxuICAgIGNvbnN0IHZhbCA9IGhlYWRlcnNbbiArIDFdLnRvU3RyaW5nKCd1dGY4JylcblxuICAgIGlmIChrZXkubGVuZ3RoID09PSAxNCAmJiAoa2V5ID09PSAnY29udGVudC1sZW5ndGgnIHx8IGtleS50b0xvd2VyQ2FzZSgpID09PSAnY29udGVudC1sZW5ndGgnKSkge1xuICAgICAgcmV0LnB1c2goa2V5LCB2YWwpXG4gICAgICBoYXNDb250ZW50TGVuZ3RoID0gdHJ1ZVxuICAgIH0gZWxzZSBpZiAoa2V5Lmxlbmd0aCA9PT0gMTkgJiYgKGtleSA9PT0gJ2NvbnRlbnQtZGlzcG9zaXRpb24nIHx8IGtleS50b0xvd2VyQ2FzZSgpID09PSAnY29udGVudC1kaXNwb3NpdGlvbicpKSB7XG4gICAgICBjb250ZW50RGlzcG9zaXRpb25JZHggPSByZXQucHVzaChrZXksIHZhbCkgLSAxXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldC5wdXNoKGtleSwgdmFsKVxuICAgIH1cbiAgfVxuXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvcHVsbC80NjUyOFxuICBpZiAoaGFzQ29udGVudExlbmd0aCAmJiBjb250ZW50RGlzcG9zaXRpb25JZHggIT09IC0xKSB7XG4gICAgcmV0W2NvbnRlbnREaXNwb3NpdGlvbklkeF0gPSBCdWZmZXIuZnJvbShyZXRbY29udGVudERpc3Bvc2l0aW9uSWR4XSkudG9TdHJpbmcoJ2xhdGluMScpXG4gIH1cblxuICByZXR1cm4gcmV0XG59XG5cbmZ1bmN0aW9uIGlzQnVmZmVyIChidWZmZXIpIHtcbiAgLy8gU2VlLCBodHRwczovL2dpdGh1Yi5jb20vbWNvbGxpbmEvdW5kaWNpL3B1bGwvMzE5XG4gIHJldHVybiBidWZmZXIgaW5zdGFuY2VvZiBVaW50OEFycmF5IHx8IEJ1ZmZlci5pc0J1ZmZlcihidWZmZXIpXG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlSGFuZGxlciAoaGFuZGxlciwgbWV0aG9kLCB1cGdyYWRlKSB7XG4gIGlmICghaGFuZGxlciB8fCB0eXBlb2YgaGFuZGxlciAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2hhbmRsZXIgbXVzdCBiZSBhbiBvYmplY3QnKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBoYW5kbGVyLm9uQ29ubmVjdCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkNvbm5lY3QgbWV0aG9kJylcbiAgfVxuXG4gIGlmICh0eXBlb2YgaGFuZGxlci5vbkVycm9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uRXJyb3IgbWV0aG9kJylcbiAgfVxuXG4gIGlmICh0eXBlb2YgaGFuZGxlci5vbkJvZHlTZW50ICE9PSAnZnVuY3Rpb24nICYmIGhhbmRsZXIub25Cb2R5U2VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uQm9keVNlbnQgbWV0aG9kJylcbiAgfVxuXG4gIGlmICh1cGdyYWRlIHx8IG1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSB7XG4gICAgaWYgKHR5cGVvZiBoYW5kbGVyLm9uVXBncmFkZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uVXBncmFkZSBtZXRob2QnKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAodHlwZW9mIGhhbmRsZXIub25IZWFkZXJzICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25IZWFkZXJzIG1ldGhvZCcpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBoYW5kbGVyLm9uRGF0YSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uRGF0YSBtZXRob2QnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaGFuZGxlci5vbkNvbXBsZXRlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25Db21wbGV0ZSBtZXRob2QnKVxuICAgIH1cbiAgfVxufVxuXG4vLyBBIGJvZHkgaXMgZGlzdHVyYmVkIGlmIGl0IGhhcyBiZWVuIHJlYWQgZnJvbSBhbmQgaXQgY2Fubm90XG4vLyBiZSByZS11c2VkIHdpdGhvdXQgbG9zaW5nIHN0YXRlIG9yIGRhdGEuXG5mdW5jdGlvbiBpc0Rpc3R1cmJlZCAoYm9keSkge1xuICByZXR1cm4gISEoYm9keSAmJiAoXG4gICAgc3RyZWFtLmlzRGlzdHVyYmVkXG4gICAgICA/IHN0cmVhbS5pc0Rpc3R1cmJlZChib2R5KSB8fCBib2R5W2tCb2R5VXNlZF0gLy8gVE9ETyAoZml4KTogV2h5IGlzIGJvZHlba0JvZHlVc2VkXSBuZWVkZWQ/XG4gICAgICA6IGJvZHlba0JvZHlVc2VkXSB8fFxuICAgICAgICBib2R5LnJlYWRhYmxlRGlkUmVhZCB8fFxuICAgICAgICAoYm9keS5fcmVhZGFibGVTdGF0ZSAmJiBib2R5Ll9yZWFkYWJsZVN0YXRlLmRhdGFFbWl0dGVkKSB8fFxuICAgICAgICBpc1JlYWRhYmxlQWJvcnRlZChib2R5KVxuICApKVxufVxuXG5mdW5jdGlvbiBpc0Vycm9yZWQgKGJvZHkpIHtcbiAgcmV0dXJuICEhKGJvZHkgJiYgKFxuICAgIHN0cmVhbS5pc0Vycm9yZWRcbiAgICAgID8gc3RyZWFtLmlzRXJyb3JlZChib2R5KVxuICAgICAgOiAvc3RhdGU6ICdlcnJvcmVkJy8udGVzdChub2RlVXRpbC5pbnNwZWN0KGJvZHkpXG4gICAgICApKSlcbn1cblxuZnVuY3Rpb24gaXNSZWFkYWJsZSAoYm9keSkge1xuICByZXR1cm4gISEoYm9keSAmJiAoXG4gICAgc3RyZWFtLmlzUmVhZGFibGVcbiAgICAgID8gc3RyZWFtLmlzUmVhZGFibGUoYm9keSlcbiAgICAgIDogL3N0YXRlOiAncmVhZGFibGUnLy50ZXN0KG5vZGVVdGlsLmluc3BlY3QoYm9keSlcbiAgICAgICkpKVxufVxuXG5mdW5jdGlvbiBnZXRTb2NrZXRJbmZvIChzb2NrZXQpIHtcbiAgcmV0dXJuIHtcbiAgICBsb2NhbEFkZHJlc3M6IHNvY2tldC5sb2NhbEFkZHJlc3MsXG4gICAgbG9jYWxQb3J0OiBzb2NrZXQubG9jYWxQb3J0LFxuICAgIHJlbW90ZUFkZHJlc3M6IHNvY2tldC5yZW1vdGVBZGRyZXNzLFxuICAgIHJlbW90ZVBvcnQ6IHNvY2tldC5yZW1vdGVQb3J0LFxuICAgIHJlbW90ZUZhbWlseTogc29ja2V0LnJlbW90ZUZhbWlseSxcbiAgICB0aW1lb3V0OiBzb2NrZXQudGltZW91dCxcbiAgICBieXRlc1dyaXR0ZW46IHNvY2tldC5ieXRlc1dyaXR0ZW4sXG4gICAgYnl0ZXNSZWFkOiBzb2NrZXQuYnl0ZXNSZWFkXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gKiBjb252ZXJ0SXRlcmFibGVUb0J1ZmZlciAoaXRlcmFibGUpIHtcbiAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBpdGVyYWJsZSkge1xuICAgIHlpZWxkIEJ1ZmZlci5pc0J1ZmZlcihjaHVuaykgPyBjaHVuayA6IEJ1ZmZlci5mcm9tKGNodW5rKVxuICB9XG59XG5cbmxldCBSZWFkYWJsZVN0cmVhbVxuZnVuY3Rpb24gUmVhZGFibGVTdHJlYW1Gcm9tIChpdGVyYWJsZSkge1xuICBpZiAoIVJlYWRhYmxlU3RyZWFtKSB7XG4gICAgUmVhZGFibGVTdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0vd2ViJykuUmVhZGFibGVTdHJlYW1cbiAgfVxuXG4gIGlmIChSZWFkYWJsZVN0cmVhbS5mcm9tKSB7XG4gICAgcmV0dXJuIFJlYWRhYmxlU3RyZWFtLmZyb20oY29udmVydEl0ZXJhYmxlVG9CdWZmZXIoaXRlcmFibGUpKVxuICB9XG5cbiAgbGV0IGl0ZXJhdG9yXG4gIHJldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oXG4gICAge1xuICAgICAgYXN5bmMgc3RhcnQgKCkge1xuICAgICAgICBpdGVyYXRvciA9IGl0ZXJhYmxlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpXG4gICAgICB9LFxuICAgICAgYXN5bmMgcHVsbCAoY29udHJvbGxlcikge1xuICAgICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCBpdGVyYXRvci5uZXh0KClcbiAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgICAgICBjb250cm9sbGVyLmNsb3NlKClcbiAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5pc0J1ZmZlcih2YWx1ZSkgPyB2YWx1ZSA6IEJ1ZmZlci5mcm9tKHZhbHVlKVxuICAgICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShuZXcgVWludDhBcnJheShidWYpKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb250cm9sbGVyLmRlc2lyZWRTaXplID4gMFxuICAgICAgfSxcbiAgICAgIGFzeW5jIGNhbmNlbCAocmVhc29uKSB7XG4gICAgICAgIGF3YWl0IGl0ZXJhdG9yLnJldHVybigpXG4gICAgICB9XG4gICAgfSxcbiAgICAwXG4gIClcbn1cblxuLy8gVGhlIGNodW5rIHNob3VsZCBiZSBhIEZvcm1EYXRhIGluc3RhbmNlIGFuZCBjb250YWluc1xuLy8gYWxsIHRoZSByZXF1aXJlZCBtZXRob2RzLlxuZnVuY3Rpb24gaXNGb3JtRGF0YUxpa2UgKG9iamVjdCkge1xuICByZXR1cm4gKFxuICAgIG9iamVjdCAmJlxuICAgIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmXG4gICAgdHlwZW9mIG9iamVjdC5hcHBlbmQgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2Ygb2JqZWN0LmRlbGV0ZSA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBvYmplY3QuZ2V0ID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIG9iamVjdC5nZXRBbGwgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2Ygb2JqZWN0LmhhcyA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBvYmplY3Quc2V0ID09PSAnZnVuY3Rpb24nICYmXG4gICAgb2JqZWN0W1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdGb3JtRGF0YSdcbiAgKVxufVxuXG5mdW5jdGlvbiB0aHJvd0lmQWJvcnRlZCAoc2lnbmFsKSB7XG4gIGlmICghc2lnbmFsKSB7IHJldHVybiB9XG4gIGlmICh0eXBlb2Ygc2lnbmFsLnRocm93SWZBYm9ydGVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgc2lnbmFsLnRocm93SWZBYm9ydGVkKClcbiAgfSBlbHNlIHtcbiAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgIC8vIERPTUV4Y2VwdGlvbiBub3QgYXZhaWxhYmxlIDwgdjE3LjAuMFxuICAgICAgY29uc3QgZXJyID0gbmV3IEVycm9yKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkJylcbiAgICAgIGVyci5uYW1lID0gJ0Fib3J0RXJyb3InXG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYWRkQWJvcnRMaXN0ZW5lciAoc2lnbmFsLCBsaXN0ZW5lcikge1xuICBpZiAoJ2FkZEV2ZW50TGlzdGVuZXInIGluIHNpZ25hbCkge1xuICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIGxpc3RlbmVyLCB7IG9uY2U6IHRydWUgfSlcbiAgICByZXR1cm4gKCkgPT4gc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgbGlzdGVuZXIpXG4gIH1cbiAgc2lnbmFsLmFkZExpc3RlbmVyKCdhYm9ydCcsIGxpc3RlbmVyKVxuICByZXR1cm4gKCkgPT4gc2lnbmFsLnJlbW92ZUxpc3RlbmVyKCdhYm9ydCcsIGxpc3RlbmVyKVxufVxuXG5jb25zdCBoYXNUb1dlbGxGb3JtZWQgPSAhIVN0cmluZy5wcm90b3R5cGUudG9XZWxsRm9ybWVkXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbFxuICovXG5mdW5jdGlvbiB0b1VTVlN0cmluZyAodmFsKSB7XG4gIGlmIChoYXNUb1dlbGxGb3JtZWQpIHtcbiAgICByZXR1cm4gYCR7dmFsfWAudG9XZWxsRm9ybWVkKClcbiAgfSBlbHNlIGlmIChub2RlVXRpbC50b1VTVlN0cmluZykge1xuICAgIHJldHVybiBub2RlVXRpbC50b1VTVlN0cmluZyh2YWwpXG4gIH1cblxuICByZXR1cm4gYCR7dmFsfWBcbn1cblxuLy8gUGFyc2VkIGFjY29yZGluZ2x5IHRvIFJGQyA5MTEwXG4vLyBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjOTExMCNmaWVsZC5jb250ZW50LXJhbmdlXG5mdW5jdGlvbiBwYXJzZVJhbmdlSGVhZGVyIChyYW5nZSkge1xuICBpZiAocmFuZ2UgPT0gbnVsbCB8fCByYW5nZSA9PT0gJycpIHJldHVybiB7IHN0YXJ0OiAwLCBlbmQ6IG51bGwsIHNpemU6IG51bGwgfVxuXG4gIGNvbnN0IG0gPSByYW5nZSA/IHJhbmdlLm1hdGNoKC9eYnl0ZXMgKFxcZCspLShcXGQrKVxcLyhcXGQrKT8kLykgOiBudWxsXG4gIHJldHVybiBtXG4gICAgPyB7XG4gICAgICAgIHN0YXJ0OiBwYXJzZUludChtWzFdKSxcbiAgICAgICAgZW5kOiBtWzJdID8gcGFyc2VJbnQobVsyXSkgOiBudWxsLFxuICAgICAgICBzaXplOiBtWzNdID8gcGFyc2VJbnQobVszXSkgOiBudWxsXG4gICAgICB9XG4gICAgOiBudWxsXG59XG5cbmNvbnN0IGtFbnVtZXJhYmxlUHJvcGVydHkgPSBPYmplY3QuY3JlYXRlKG51bGwpXG5rRW51bWVyYWJsZVByb3BlcnR5LmVudW1lcmFibGUgPSB0cnVlXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBub3AsXG4gIGlzRGlzdHVyYmVkLFxuICBpc0Vycm9yZWQsXG4gIGlzUmVhZGFibGUsXG4gIHRvVVNWU3RyaW5nLFxuICBpc1JlYWRhYmxlQWJvcnRlZCxcbiAgaXNCbG9iTGlrZSxcbiAgcGFyc2VPcmlnaW4sXG4gIHBhcnNlVVJMLFxuICBnZXRTZXJ2ZXJOYW1lLFxuICBpc1N0cmVhbSxcbiAgaXNJdGVyYWJsZSxcbiAgaXNBc3luY0l0ZXJhYmxlLFxuICBpc0Rlc3Ryb3llZCxcbiAgaGVhZGVyTmFtZVRvU3RyaW5nLFxuICBwYXJzZVJhd0hlYWRlcnMsXG4gIHBhcnNlSGVhZGVycyxcbiAgcGFyc2VLZWVwQWxpdmVUaW1lb3V0LFxuICBkZXN0cm95LFxuICBib2R5TGVuZ3RoLFxuICBkZWVwQ2xvbmUsXG4gIFJlYWRhYmxlU3RyZWFtRnJvbSxcbiAgaXNCdWZmZXIsXG4gIHZhbGlkYXRlSGFuZGxlcixcbiAgZ2V0U29ja2V0SW5mbyxcbiAgaXNGb3JtRGF0YUxpa2UsXG4gIGJ1aWxkVVJMLFxuICB0aHJvd0lmQWJvcnRlZCxcbiAgYWRkQWJvcnRMaXN0ZW5lcixcbiAgcGFyc2VSYW5nZUhlYWRlcixcbiAgbm9kZU1ham9yLFxuICBub2RlTWlub3IsXG4gIG5vZGVIYXNBdXRvU2VsZWN0RmFtaWx5OiBub2RlTWFqb3IgPiAxOCB8fCAobm9kZU1ham9yID09PSAxOCAmJiBub2RlTWlub3IgPj0gMTMpLFxuICBzYWZlSFRUUE1ldGhvZHM6IFsnR0VUJywgJ0hFQUQnLCAnT1BUSU9OUycsICdUUkFDRSddXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5sZXQgZmFzdE5vdyA9IERhdGUubm93KClcbmxldCBmYXN0Tm93VGltZW91dFxuXG5jb25zdCBmYXN0VGltZXJzID0gW11cblxuZnVuY3Rpb24gb25UaW1lb3V0ICgpIHtcbiAgZmFzdE5vdyA9IERhdGUubm93KClcblxuICBsZXQgbGVuID0gZmFzdFRpbWVycy5sZW5ndGhcbiAgbGV0IGlkeCA9IDBcbiAgd2hpbGUgKGlkeCA8IGxlbikge1xuICAgIGNvbnN0IHRpbWVyID0gZmFzdFRpbWVyc1tpZHhdXG5cbiAgICBpZiAodGltZXIuc3RhdGUgPT09IDApIHtcbiAgICAgIHRpbWVyLnN0YXRlID0gZmFzdE5vdyArIHRpbWVyLmRlbGF5XG4gICAgfSBlbHNlIGlmICh0aW1lci5zdGF0ZSA+IDAgJiYgZmFzdE5vdyA+PSB0aW1lci5zdGF0ZSkge1xuICAgICAgdGltZXIuc3RhdGUgPSAtMVxuICAgICAgdGltZXIuY2FsbGJhY2sodGltZXIub3BhcXVlKVxuICAgIH1cblxuICAgIGlmICh0aW1lci5zdGF0ZSA9PT0gLTEpIHtcbiAgICAgIHRpbWVyLnN0YXRlID0gLTJcbiAgICAgIGlmIChpZHggIT09IGxlbiAtIDEpIHtcbiAgICAgICAgZmFzdFRpbWVyc1tpZHhdID0gZmFzdFRpbWVycy5wb3AoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmFzdFRpbWVycy5wb3AoKVxuICAgICAgfVxuICAgICAgbGVuIC09IDFcbiAgICB9IGVsc2Uge1xuICAgICAgaWR4ICs9IDFcbiAgICB9XG4gIH1cblxuICBpZiAoZmFzdFRpbWVycy5sZW5ndGggPiAwKSB7XG4gICAgcmVmcmVzaFRpbWVvdXQoKVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlZnJlc2hUaW1lb3V0ICgpIHtcbiAgaWYgKGZhc3ROb3dUaW1lb3V0ICYmIGZhc3ROb3dUaW1lb3V0LnJlZnJlc2gpIHtcbiAgICBmYXN0Tm93VGltZW91dC5yZWZyZXNoKClcbiAgfSBlbHNlIHtcbiAgICBjbGVhclRpbWVvdXQoZmFzdE5vd1RpbWVvdXQpXG4gICAgZmFzdE5vd1RpbWVvdXQgPSBzZXRUaW1lb3V0KG9uVGltZW91dCwgMWUzKVxuICAgIGlmIChmYXN0Tm93VGltZW91dC51bnJlZikge1xuICAgICAgZmFzdE5vd1RpbWVvdXQudW5yZWYoKVxuICAgIH1cbiAgfVxufVxuXG5jbGFzcyBUaW1lb3V0IHtcbiAgY29uc3RydWN0b3IgKGNhbGxiYWNrLCBkZWxheSwgb3BhcXVlKSB7XG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrXG4gICAgdGhpcy5kZWxheSA9IGRlbGF5XG4gICAgdGhpcy5vcGFxdWUgPSBvcGFxdWVcblxuICAgIC8vICAtMiBub3QgaW4gdGltZXIgbGlzdFxuICAgIC8vICAtMSBpbiB0aW1lciBsaXN0IGJ1dCBpbmFjdGl2ZVxuICAgIC8vICAgMCBpbiB0aW1lciBsaXN0IHdhaXRpbmcgZm9yIHRpbWVcbiAgICAvLyA+IDAgaW4gdGltZXIgbGlzdCB3YWl0aW5nIGZvciB0aW1lIHRvIGV4cGlyZVxuICAgIHRoaXMuc3RhdGUgPSAtMlxuXG4gICAgdGhpcy5yZWZyZXNoKClcbiAgfVxuXG4gIHJlZnJlc2ggKCkge1xuICAgIGlmICh0aGlzLnN0YXRlID09PSAtMikge1xuICAgICAgZmFzdFRpbWVycy5wdXNoKHRoaXMpXG4gICAgICBpZiAoIWZhc3ROb3dUaW1lb3V0IHx8IGZhc3RUaW1lcnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJlZnJlc2hUaW1lb3V0KClcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnN0YXRlID0gMFxuICB9XG5cbiAgY2xlYXIgKCkge1xuICAgIHRoaXMuc3RhdGUgPSAtMVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXRUaW1lb3V0IChjYWxsYmFjaywgZGVsYXksIG9wYXF1ZSkge1xuICAgIHJldHVybiBkZWxheSA8IDFlM1xuICAgICAgPyBzZXRUaW1lb3V0KGNhbGxiYWNrLCBkZWxheSwgb3BhcXVlKVxuICAgICAgOiBuZXcgVGltZW91dChjYWxsYmFjaywgZGVsYXksIG9wYXF1ZSlcbiAgfSxcbiAgY2xlYXJUaW1lb3V0ICh0aW1lb3V0KSB7XG4gICAgaWYgKHRpbWVvdXQgaW5zdGFuY2VvZiBUaW1lb3V0KSB7XG4gICAgICB0aW1lb3V0LmNsZWFyKClcbiAgICB9IGVsc2Uge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpXG4gICAgfVxuICB9XG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG4vKipcbiAqIENvcHlyaWdodCBCcmlhbiBXaGl0ZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tc2NkZXgvc3RyZWFtc2VhcmNoXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG9cbiAqIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlXG4gKiByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3JcbiAqIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkdcbiAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1NcbiAqIElOIFRIRSBTT0ZUV0FSRS5cbiAqXG4gKiBCYXNlZCBoZWF2aWx5IG9uIHRoZSBTdHJlYW1pbmcgQm95ZXItTW9vcmUtSG9yc3Bvb2wgQysrIGltcGxlbWVudGF0aW9uXG4gKiBieSBIb25nbGkgTGFpIGF0OiBodHRwczovL2dpdGh1Yi5jb20vRm9vQmFyV2lkZ2V0L2JveWVyLW1vb3JlLWhvcnNwb29sXG4gKi9cbmNvbnN0IEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ25vZGU6ZXZlbnRzJykuRXZlbnRFbWl0dGVyXG5jb25zdCBpbmhlcml0cyA9IHJlcXVpcmUoJ25vZGU6dXRpbCcpLmluaGVyaXRzXG5cbmZ1bmN0aW9uIFNCTUggKG5lZWRsZSkge1xuICBpZiAodHlwZW9mIG5lZWRsZSA9PT0gJ3N0cmluZycpIHtcbiAgICBuZWVkbGUgPSBCdWZmZXIuZnJvbShuZWVkbGUpXG4gIH1cblxuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihuZWVkbGUpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIG5lZWRsZSBoYXMgdG8gYmUgYSBTdHJpbmcgb3IgYSBCdWZmZXIuJylcbiAgfVxuXG4gIGNvbnN0IG5lZWRsZUxlbmd0aCA9IG5lZWRsZS5sZW5ndGhcblxuICBpZiAobmVlZGxlTGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgbmVlZGxlIGNhbm5vdCBiZSBhbiBlbXB0eSBTdHJpbmcvQnVmZmVyLicpXG4gIH1cblxuICBpZiAobmVlZGxlTGVuZ3RoID4gMjU2KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgbmVlZGxlIGNhbm5vdCBoYXZlIGEgbGVuZ3RoIGJpZ2dlciB0aGFuIDI1Ni4nKVxuICB9XG5cbiAgdGhpcy5tYXhNYXRjaGVzID0gSW5maW5pdHlcbiAgdGhpcy5tYXRjaGVzID0gMFxuXG4gIHRoaXMuX29jYyA9IG5ldyBBcnJheSgyNTYpXG4gICAgLmZpbGwobmVlZGxlTGVuZ3RoKSAvLyBJbml0aWFsaXplIG9jY3VycmVuY2UgdGFibGUuXG4gIHRoaXMuX2xvb2tiZWhpbmRfc2l6ZSA9IDBcbiAgdGhpcy5fbmVlZGxlID0gbmVlZGxlXG4gIHRoaXMuX2J1ZnBvcyA9IDBcblxuICB0aGlzLl9sb29rYmVoaW5kID0gQnVmZmVyLmFsbG9jKG5lZWRsZUxlbmd0aClcblxuICAvLyBQb3B1bGF0ZSBvY2N1cnJlbmNlIHRhYmxlIHdpdGggYW5hbHlzaXMgb2YgdGhlIG5lZWRsZSxcbiAgLy8gaWdub3JpbmcgbGFzdCBsZXR0ZXIuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbmVlZGxlTGVuZ3RoIC0gMTsgKytpKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdmFyXG4gICAgdGhpcy5fb2NjW25lZWRsZVtpXV0gPSBuZWVkbGVMZW5ndGggLSAxIC0gaVxuICB9XG59XG5pbmhlcml0cyhTQk1ILCBFdmVudEVtaXR0ZXIpXG5cblNCTUgucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLl9sb29rYmVoaW5kX3NpemUgPSAwXG4gIHRoaXMubWF0Y2hlcyA9IDBcbiAgdGhpcy5fYnVmcG9zID0gMFxufVxuXG5TQk1ILnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGNodW5rLCBwb3MpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoY2h1bmspKSB7XG4gICAgY2h1bmsgPSBCdWZmZXIuZnJvbShjaHVuaywgJ2JpbmFyeScpXG4gIH1cbiAgY29uc3QgY2hsZW4gPSBjaHVuay5sZW5ndGhcbiAgdGhpcy5fYnVmcG9zID0gcG9zIHx8IDBcbiAgbGV0IHJcbiAgd2hpbGUgKHIgIT09IGNobGVuICYmIHRoaXMubWF0Y2hlcyA8IHRoaXMubWF4TWF0Y2hlcykgeyByID0gdGhpcy5fc2JtaF9mZWVkKGNodW5rKSB9XG4gIHJldHVybiByXG59XG5cblNCTUgucHJvdG90eXBlLl9zYm1oX2ZlZWQgPSBmdW5jdGlvbiAoZGF0YSkge1xuICBjb25zdCBsZW4gPSBkYXRhLmxlbmd0aFxuICBjb25zdCBuZWVkbGUgPSB0aGlzLl9uZWVkbGVcbiAgY29uc3QgbmVlZGxlTGVuZ3RoID0gbmVlZGxlLmxlbmd0aFxuICBjb25zdCBsYXN0TmVlZGxlQ2hhciA9IG5lZWRsZVtuZWVkbGVMZW5ndGggLSAxXVxuXG4gIC8vIFBvc2l0aXZlOiBwb2ludHMgdG8gYSBwb3NpdGlvbiBpbiBgZGF0YWBcbiAgLy8gICAgICAgICAgIHBvcyA9PSAzIHBvaW50cyB0byBkYXRhWzNdXG4gIC8vIE5lZ2F0aXZlOiBwb2ludHMgdG8gYSBwb3NpdGlvbiBpbiB0aGUgbG9va2JlaGluZCBidWZmZXJcbiAgLy8gICAgICAgICAgIHBvcyA9PSAtMiBwb2ludHMgdG8gbG9va2JlaGluZFtsb29rYmVoaW5kX3NpemUgLSAyXVxuICBsZXQgcG9zID0gLXRoaXMuX2xvb2tiZWhpbmRfc2l6ZVxuICBsZXQgY2hcblxuICBpZiAocG9zIDwgMCkge1xuICAgIC8vIExvb2tiZWhpbmQgYnVmZmVyIGlzIG5vdCBlbXB0eS4gUGVyZm9ybSBCb3llci1Nb29yZS1Ib3JzcG9vbFxuICAgIC8vIHNlYXJjaCB3aXRoIGNoYXJhY3RlciBsb29rdXAgY29kZSB0aGF0IGNvbnNpZGVycyBib3RoIHRoZVxuICAgIC8vIGxvb2tiZWhpbmQgYnVmZmVyIGFuZCB0aGUgY3VycmVudCByb3VuZCdzIGhheXN0YWNrIGRhdGEuXG4gICAgLy9cbiAgICAvLyBMb29wIHVudGlsXG4gICAgLy8gICB0aGVyZSBpcyBhIG1hdGNoLlxuICAgIC8vIG9yIHVudGlsXG4gICAgLy8gICB3ZSd2ZSBtb3ZlZCBwYXN0IHRoZSBwb3NpdGlvbiB0aGF0IHJlcXVpcmVzIHRoZVxuICAgIC8vICAgbG9va2JlaGluZCBidWZmZXIuIEluIHRoaXMgY2FzZSB3ZSBzd2l0Y2ggdG8gdGhlXG4gICAgLy8gICBvcHRpbWl6ZWQgbG9vcC5cbiAgICAvLyBvciB1bnRpbFxuICAgIC8vICAgdGhlIGNoYXJhY3RlciB0byBsb29rIGF0IGxpZXMgb3V0c2lkZSB0aGUgaGF5c3RhY2suXG4gICAgd2hpbGUgKHBvcyA8IDAgJiYgcG9zIDw9IGxlbiAtIG5lZWRsZUxlbmd0aCkge1xuICAgICAgY2ggPSB0aGlzLl9zYm1oX2xvb2t1cF9jaGFyKGRhdGEsIHBvcyArIG5lZWRsZUxlbmd0aCAtIDEpXG5cbiAgICAgIGlmIChcbiAgICAgICAgY2ggPT09IGxhc3ROZWVkbGVDaGFyICYmXG4gICAgICAgIHRoaXMuX3NibWhfbWVtY21wKGRhdGEsIHBvcywgbmVlZGxlTGVuZ3RoIC0gMSlcbiAgICAgICkge1xuICAgICAgICB0aGlzLl9sb29rYmVoaW5kX3NpemUgPSAwXG4gICAgICAgICsrdGhpcy5tYXRjaGVzXG4gICAgICAgIHRoaXMuZW1pdCgnaW5mbycsIHRydWUpXG5cbiAgICAgICAgcmV0dXJuICh0aGlzLl9idWZwb3MgPSBwb3MgKyBuZWVkbGVMZW5ndGgpXG4gICAgICB9XG4gICAgICBwb3MgKz0gdGhpcy5fb2NjW2NoXVxuICAgIH1cblxuICAgIC8vIE5vIG1hdGNoLlxuXG4gICAgaWYgKHBvcyA8IDApIHtcbiAgICAgIC8vIFRoZXJlJ3MgdG9vIGZldyBkYXRhIGZvciBCb3llci1Nb29yZS1Ib3JzcG9vbCB0byBydW4sXG4gICAgICAvLyBzbyBsZXQncyB1c2UgYSBkaWZmZXJlbnQgYWxnb3JpdGhtIHRvIHNraXAgYXMgbXVjaCBhc1xuICAgICAgLy8gd2UgY2FuLlxuICAgICAgLy8gRm9yd2FyZCBwb3MgdW50aWxcbiAgICAgIC8vICAgdGhlIHRyYWlsaW5nIHBhcnQgb2YgbG9va2JlaGluZCArIGRhdGFcbiAgICAgIC8vICAgbG9va3MgbGlrZSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZWVkbGVcbiAgICAgIC8vIG9yIHVudGlsXG4gICAgICAvLyAgIHBvcyA9PSAwXG4gICAgICB3aGlsZSAocG9zIDwgMCAmJiAhdGhpcy5fc2JtaF9tZW1jbXAoZGF0YSwgcG9zLCBsZW4gLSBwb3MpKSB7ICsrcG9zIH1cbiAgICB9XG5cbiAgICBpZiAocG9zID49IDApIHtcbiAgICAgIC8vIERpc2NhcmQgbG9va2JlaGluZCBidWZmZXIuXG4gICAgICB0aGlzLmVtaXQoJ2luZm8nLCBmYWxzZSwgdGhpcy5fbG9va2JlaGluZCwgMCwgdGhpcy5fbG9va2JlaGluZF9zaXplKVxuICAgICAgdGhpcy5fbG9va2JlaGluZF9zaXplID0gMFxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDdXQgb2ZmIHBhcnQgb2YgdGhlIGxvb2tiZWhpbmQgYnVmZmVyIHRoYXQgaGFzXG4gICAgICAvLyBiZWVuIHByb2Nlc3NlZCBhbmQgYXBwZW5kIHRoZSBlbnRpcmUgaGF5c3RhY2tcbiAgICAgIC8vIGludG8gaXQuXG4gICAgICBjb25zdCBieXRlc1RvQ3V0T2ZmID0gdGhpcy5fbG9va2JlaGluZF9zaXplICsgcG9zXG4gICAgICBpZiAoYnl0ZXNUb0N1dE9mZiA+IDApIHtcbiAgICAgICAgLy8gVGhlIGN1dCBvZmYgZGF0YSBpcyBndWFyYW50ZWVkIG5vdCB0byBjb250YWluIHRoZSBuZWVkbGUuXG4gICAgICAgIHRoaXMuZW1pdCgnaW5mbycsIGZhbHNlLCB0aGlzLl9sb29rYmVoaW5kLCAwLCBieXRlc1RvQ3V0T2ZmKVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9sb29rYmVoaW5kLmNvcHkodGhpcy5fbG9va2JlaGluZCwgMCwgYnl0ZXNUb0N1dE9mZixcbiAgICAgICAgdGhpcy5fbG9va2JlaGluZF9zaXplIC0gYnl0ZXNUb0N1dE9mZilcbiAgICAgIHRoaXMuX2xvb2tiZWhpbmRfc2l6ZSAtPSBieXRlc1RvQ3V0T2ZmXG5cbiAgICAgIGRhdGEuY29weSh0aGlzLl9sb29rYmVoaW5kLCB0aGlzLl9sb29rYmVoaW5kX3NpemUpXG4gICAgICB0aGlzLl9sb29rYmVoaW5kX3NpemUgKz0gbGVuXG5cbiAgICAgIHRoaXMuX2J1ZnBvcyA9IGxlblxuICAgICAgcmV0dXJuIGxlblxuICAgIH1cbiAgfVxuXG4gIHBvcyArPSAocG9zID49IDApICogdGhpcy5fYnVmcG9zXG5cbiAgLy8gTG9va2JlaGluZCBidWZmZXIgaXMgbm93IGVtcHR5LiBXZSBvbmx5IG5lZWQgdG8gY2hlY2sgaWYgdGhlXG4gIC8vIG5lZWRsZSBpcyBpbiB0aGUgaGF5c3RhY2suXG4gIGlmIChkYXRhLmluZGV4T2YobmVlZGxlLCBwb3MpICE9PSAtMSkge1xuICAgIHBvcyA9IGRhdGEuaW5kZXhPZihuZWVkbGUsIHBvcylcbiAgICArK3RoaXMubWF0Y2hlc1xuICAgIGlmIChwb3MgPiAwKSB7IHRoaXMuZW1pdCgnaW5mbycsIHRydWUsIGRhdGEsIHRoaXMuX2J1ZnBvcywgcG9zKSB9IGVsc2UgeyB0aGlzLmVtaXQoJ2luZm8nLCB0cnVlKSB9XG5cbiAgICByZXR1cm4gKHRoaXMuX2J1ZnBvcyA9IHBvcyArIG5lZWRsZUxlbmd0aClcbiAgfSBlbHNlIHtcbiAgICBwb3MgPSBsZW4gLSBuZWVkbGVMZW5ndGhcbiAgfVxuXG4gIC8vIFRoZXJlIHdhcyBubyBtYXRjaC4gSWYgdGhlcmUncyB0cmFpbGluZyBoYXlzdGFjayBkYXRhIHRoYXQgd2UgY2Fubm90XG4gIC8vIG1hdGNoIHlldCB1c2luZyB0aGUgQm95ZXItTW9vcmUtSG9yc3Bvb2wgYWxnb3JpdGhtIChiZWNhdXNlIHRoZSB0cmFpbGluZ1xuICAvLyBkYXRhIGlzIGxlc3MgdGhhbiB0aGUgbmVlZGxlIHNpemUpIHRoZW4gbWF0Y2ggdXNpbmcgYSBtb2RpZmllZFxuICAvLyBhbGdvcml0aG0gdGhhdCBzdGFydHMgbWF0Y2hpbmcgZnJvbSB0aGUgYmVnaW5uaW5nIGluc3RlYWQgb2YgdGhlIGVuZC5cbiAgLy8gV2hhdGV2ZXIgdHJhaWxpbmcgZGF0YSBpcyBsZWZ0IGFmdGVyIHJ1bm5pbmcgdGhpcyBhbGdvcml0aG0gaXMgYWRkZWQgdG9cbiAgLy8gdGhlIGxvb2tiZWhpbmQgYnVmZmVyLlxuICB3aGlsZSAoXG4gICAgcG9zIDwgbGVuICYmXG4gICAgKFxuICAgICAgZGF0YVtwb3NdICE9PSBuZWVkbGVbMF0gfHxcbiAgICAgIChcbiAgICAgICAgKEJ1ZmZlci5jb21wYXJlKFxuICAgICAgICAgIGRhdGEuc3ViYXJyYXkocG9zLCBwb3MgKyBsZW4gLSBwb3MpLFxuICAgICAgICAgIG5lZWRsZS5zdWJhcnJheSgwLCBsZW4gLSBwb3MpXG4gICAgICAgICkgIT09IDApXG4gICAgICApXG4gICAgKVxuICApIHtcbiAgICArK3Bvc1xuICB9XG4gIGlmIChwb3MgPCBsZW4pIHtcbiAgICBkYXRhLmNvcHkodGhpcy5fbG9va2JlaGluZCwgMCwgcG9zLCBwb3MgKyAobGVuIC0gcG9zKSlcbiAgICB0aGlzLl9sb29rYmVoaW5kX3NpemUgPSBsZW4gLSBwb3NcbiAgfVxuXG4gIC8vIEV2ZXJ5dGhpbmcgdW50aWwgcG9zIGlzIGd1YXJhbnRlZWQgbm90IHRvIGNvbnRhaW4gbmVlZGxlIGRhdGEuXG4gIGlmIChwb3MgPiAwKSB7IHRoaXMuZW1pdCgnaW5mbycsIGZhbHNlLCBkYXRhLCB0aGlzLl9idWZwb3MsIHBvcyA8IGxlbiA/IHBvcyA6IGxlbikgfVxuXG4gIHRoaXMuX2J1ZnBvcyA9IGxlblxuICByZXR1cm4gbGVuXG59XG5cblNCTUgucHJvdG90eXBlLl9zYm1oX2xvb2t1cF9jaGFyID0gZnVuY3Rpb24gKGRhdGEsIHBvcykge1xuICByZXR1cm4gKHBvcyA8IDApXG4gICAgPyB0aGlzLl9sb29rYmVoaW5kW3RoaXMuX2xvb2tiZWhpbmRfc2l6ZSArIHBvc11cbiAgICA6IGRhdGFbcG9zXVxufVxuXG5TQk1ILnByb3RvdHlwZS5fc2JtaF9tZW1jbXAgPSBmdW5jdGlvbiAoZGF0YSwgcG9zLCBsZW4pIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXZhclxuICAgIGlmICh0aGlzLl9zYm1oX2xvb2t1cF9jaGFyKGRhdGEsIHBvcyArIGkpICE9PSB0aGlzLl9uZWVkbGVbaV0pIHsgcmV0dXJuIGZhbHNlIH1cbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNCTUhcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGluaGVyaXRzID0gcmVxdWlyZSgnbm9kZTp1dGlsJykuaW5oZXJpdHNcbmNvbnN0IFJlYWRhYmxlU3RyZWFtID0gcmVxdWlyZSgnbm9kZTpzdHJlYW0nKS5SZWFkYWJsZVxuXG5mdW5jdGlvbiBQYXJ0U3RyZWFtIChvcHRzKSB7XG4gIFJlYWRhYmxlU3RyZWFtLmNhbGwodGhpcywgb3B0cylcbn1cbmluaGVyaXRzKFBhcnRTdHJlYW0sIFJlYWRhYmxlU3RyZWFtKVxuXG5QYXJ0U3RyZWFtLnByb3RvdHlwZS5fcmVhZCA9IGZ1bmN0aW9uIChuKSB7fVxuXG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRTdHJlYW1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0TGltaXQgKGxpbWl0cywgbmFtZSwgZGVmYXVsdExpbWl0KSB7XG4gIGlmIChcbiAgICAhbGltaXRzIHx8XG4gICAgbGltaXRzW25hbWVdID09PSB1bmRlZmluZWQgfHxcbiAgICBsaW1pdHNbbmFtZV0gPT09IG51bGxcbiAgKSB7IHJldHVybiBkZWZhdWx0TGltaXQgfVxuXG4gIGlmIChcbiAgICB0eXBlb2YgbGltaXRzW25hbWVdICE9PSAnbnVtYmVyJyB8fFxuICAgIGlzTmFOKGxpbWl0c1tuYW1lXSlcbiAgKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoJ0xpbWl0ICcgKyBuYW1lICsgJyBpcyBub3QgYSB2YWxpZCBudW1iZXInKSB9XG5cbiAgcmV0dXJuIGxpbWl0c1tuYW1lXVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnbm9kZTpldmVudHMnKS5FdmVudEVtaXR0ZXJcbmNvbnN0IGluaGVyaXRzID0gcmVxdWlyZSgnbm9kZTp1dGlsJykuaW5oZXJpdHNcbmNvbnN0IGdldExpbWl0ID0gcmVxdWlyZSgnLi4vLi4vLi4vbGliL3V0aWxzL2dldExpbWl0JylcblxuY29uc3QgU3RyZWFtU2VhcmNoID0gcmVxdWlyZSgnLi4vLi4vc3RyZWFtc2VhcmNoL3NibWgnKVxuXG5jb25zdCBCX0RDUkxGID0gQnVmZmVyLmZyb20oJ1xcclxcblxcclxcbicpXG5jb25zdCBSRV9DUkxGID0gL1xcclxcbi9nXG5jb25zdCBSRV9IRFIgPSAvXihbXjpdKyk6WyBcXHRdPyhbXFx4MDAtXFx4RkZdKyk/JC8gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb250cm9sLXJlZ2V4XG5cbmZ1bmN0aW9uIEhlYWRlclBhcnNlciAoY2ZnKSB7XG4gIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpXG5cbiAgY2ZnID0gY2ZnIHx8IHt9XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIHRoaXMubnJlYWQgPSAwXG4gIHRoaXMubWF4ZWQgPSBmYWxzZVxuICB0aGlzLm5wYWlycyA9IDBcbiAgdGhpcy5tYXhIZWFkZXJQYWlycyA9IGdldExpbWl0KGNmZywgJ21heEhlYWRlclBhaXJzJywgMjAwMClcbiAgdGhpcy5tYXhIZWFkZXJTaXplID0gZ2V0TGltaXQoY2ZnLCAnbWF4SGVhZGVyU2l6ZScsIDgwICogMTAyNClcbiAgdGhpcy5idWZmZXIgPSAnJ1xuICB0aGlzLmhlYWRlciA9IHt9XG4gIHRoaXMuZmluaXNoZWQgPSBmYWxzZVxuICB0aGlzLnNzID0gbmV3IFN0cmVhbVNlYXJjaChCX0RDUkxGKVxuICB0aGlzLnNzLm9uKCdpbmZvJywgZnVuY3Rpb24gKGlzTWF0Y2gsIGRhdGEsIHN0YXJ0LCBlbmQpIHtcbiAgICBpZiAoZGF0YSAmJiAhc2VsZi5tYXhlZCkge1xuICAgICAgaWYgKHNlbGYubnJlYWQgKyBlbmQgLSBzdGFydCA+PSBzZWxmLm1heEhlYWRlclNpemUpIHtcbiAgICAgICAgZW5kID0gc2VsZi5tYXhIZWFkZXJTaXplIC0gc2VsZi5ucmVhZCArIHN0YXJ0XG4gICAgICAgIHNlbGYubnJlYWQgPSBzZWxmLm1heEhlYWRlclNpemVcbiAgICAgICAgc2VsZi5tYXhlZCA9IHRydWVcbiAgICAgIH0gZWxzZSB7IHNlbGYubnJlYWQgKz0gKGVuZCAtIHN0YXJ0KSB9XG5cbiAgICAgIHNlbGYuYnVmZmVyICs9IGRhdGEudG9TdHJpbmcoJ2JpbmFyeScsIHN0YXJ0LCBlbmQpXG4gICAgfVxuICAgIGlmIChpc01hdGNoKSB7IHNlbGYuX2ZpbmlzaCgpIH1cbiAgfSlcbn1cbmluaGVyaXRzKEhlYWRlclBhcnNlciwgRXZlbnRFbWl0dGVyKVxuXG5IZWFkZXJQYXJzZXIucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoZGF0YSkge1xuICBjb25zdCByID0gdGhpcy5zcy5wdXNoKGRhdGEpXG4gIGlmICh0aGlzLmZpbmlzaGVkKSB7IHJldHVybiByIH1cbn1cblxuSGVhZGVyUGFyc2VyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5maW5pc2hlZCA9IGZhbHNlXG4gIHRoaXMuYnVmZmVyID0gJydcbiAgdGhpcy5oZWFkZXIgPSB7fVxuICB0aGlzLnNzLnJlc2V0KClcbn1cblxuSGVhZGVyUGFyc2VyLnByb3RvdHlwZS5fZmluaXNoID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5idWZmZXIpIHsgdGhpcy5fcGFyc2VIZWFkZXIoKSB9XG4gIHRoaXMuc3MubWF0Y2hlcyA9IHRoaXMuc3MubWF4TWF0Y2hlc1xuICBjb25zdCBoZWFkZXIgPSB0aGlzLmhlYWRlclxuICB0aGlzLmhlYWRlciA9IHt9XG4gIHRoaXMuYnVmZmVyID0gJydcbiAgdGhpcy5maW5pc2hlZCA9IHRydWVcbiAgdGhpcy5ucmVhZCA9IHRoaXMubnBhaXJzID0gMFxuICB0aGlzLm1heGVkID0gZmFsc2VcbiAgdGhpcy5lbWl0KCdoZWFkZXInLCBoZWFkZXIpXG59XG5cbkhlYWRlclBhcnNlci5wcm90b3R5cGUuX3BhcnNlSGVhZGVyID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5ucGFpcnMgPT09IHRoaXMubWF4SGVhZGVyUGFpcnMpIHsgcmV0dXJuIH1cblxuICBjb25zdCBsaW5lcyA9IHRoaXMuYnVmZmVyLnNwbGl0KFJFX0NSTEYpXG4gIGNvbnN0IGxlbiA9IGxpbmVzLmxlbmd0aFxuICBsZXQgbSwgaFxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby12YXJcbiAgICBpZiAobGluZXNbaV0ubGVuZ3RoID09PSAwKSB7IGNvbnRpbnVlIH1cbiAgICBpZiAobGluZXNbaV1bMF0gPT09ICdcXHQnIHx8IGxpbmVzW2ldWzBdID09PSAnICcpIHtcbiAgICAgIC8vIGZvbGRlZCBoZWFkZXIgY29udGVudFxuICAgICAgLy8gUkZDMjgyMiBzYXlzIHRvIGp1c3QgcmVtb3ZlIHRoZSBDUkxGIGFuZCBub3QgdGhlIHdoaXRlc3BhY2UgZm9sbG93aW5nXG4gICAgICAvLyBpdCwgc28gd2UgZm9sbG93IHRoZSBSRkMgYW5kIGluY2x1ZGUgdGhlIGxlYWRpbmcgd2hpdGVzcGFjZSAuLi5cbiAgICAgIGlmIChoKSB7XG4gICAgICAgIHRoaXMuaGVhZGVyW2hdW3RoaXMuaGVhZGVyW2hdLmxlbmd0aCAtIDFdICs9IGxpbmVzW2ldXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcG9zQ29sb24gPSBsaW5lc1tpXS5pbmRleE9mKCc6JylcbiAgICBpZiAoXG4gICAgICBwb3NDb2xvbiA9PT0gLTEgfHxcbiAgICAgIHBvc0NvbG9uID09PSAwXG4gICAgKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgbSA9IFJFX0hEUi5leGVjKGxpbmVzW2ldKVxuICAgIGggPSBtWzFdLnRvTG93ZXJDYXNlKClcbiAgICB0aGlzLmhlYWRlcltoXSA9IHRoaXMuaGVhZGVyW2hdIHx8IFtdXG4gICAgdGhpcy5oZWFkZXJbaF0ucHVzaCgobVsyXSB8fCAnJykpXG4gICAgaWYgKCsrdGhpcy5ucGFpcnMgPT09IHRoaXMubWF4SGVhZGVyUGFpcnMpIHsgYnJlYWsgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gSGVhZGVyUGFyc2VyXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBXcml0YWJsZVN0cmVhbSA9IHJlcXVpcmUoJ25vZGU6c3RyZWFtJykuV3JpdGFibGVcbmNvbnN0IGluaGVyaXRzID0gcmVxdWlyZSgnbm9kZTp1dGlsJykuaW5oZXJpdHNcblxuY29uc3QgU3RyZWFtU2VhcmNoID0gcmVxdWlyZSgnLi4vLi4vc3RyZWFtc2VhcmNoL3NibWgnKVxuXG5jb25zdCBQYXJ0U3RyZWFtID0gcmVxdWlyZSgnLi9QYXJ0U3RyZWFtJylcbmNvbnN0IEhlYWRlclBhcnNlciA9IHJlcXVpcmUoJy4vSGVhZGVyUGFyc2VyJylcblxuY29uc3QgREFTSCA9IDQ1XG5jb25zdCBCX09ORURBU0ggPSBCdWZmZXIuZnJvbSgnLScpXG5jb25zdCBCX0NSTEYgPSBCdWZmZXIuZnJvbSgnXFxyXFxuJylcbmNvbnN0IEVNUFRZX0ZOID0gZnVuY3Rpb24gKCkge31cblxuZnVuY3Rpb24gRGljZXIgKGNmZykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRGljZXIpKSB7IHJldHVybiBuZXcgRGljZXIoY2ZnKSB9XG4gIFdyaXRhYmxlU3RyZWFtLmNhbGwodGhpcywgY2ZnKVxuXG4gIGlmICghY2ZnIHx8ICghY2ZnLmhlYWRlckZpcnN0ICYmIHR5cGVvZiBjZmcuYm91bmRhcnkgIT09ICdzdHJpbmcnKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCdCb3VuZGFyeSByZXF1aXJlZCcpIH1cblxuICBpZiAodHlwZW9mIGNmZy5ib3VuZGFyeSA9PT0gJ3N0cmluZycpIHsgdGhpcy5zZXRCb3VuZGFyeShjZmcuYm91bmRhcnkpIH0gZWxzZSB7IHRoaXMuX2JwYXJzZXIgPSB1bmRlZmluZWQgfVxuXG4gIHRoaXMuX2hlYWRlckZpcnN0ID0gY2ZnLmhlYWRlckZpcnN0XG5cbiAgdGhpcy5fZGFzaGVzID0gMFxuICB0aGlzLl9wYXJ0cyA9IDBcbiAgdGhpcy5fZmluaXNoZWQgPSBmYWxzZVxuICB0aGlzLl9yZWFsRmluaXNoID0gZmFsc2VcbiAgdGhpcy5faXNQcmVhbWJsZSA9IHRydWVcbiAgdGhpcy5fanVzdE1hdGNoZWQgPSBmYWxzZVxuICB0aGlzLl9maXJzdFdyaXRlID0gdHJ1ZVxuICB0aGlzLl9pbkhlYWRlciA9IHRydWVcbiAgdGhpcy5fcGFydCA9IHVuZGVmaW5lZFxuICB0aGlzLl9jYiA9IHVuZGVmaW5lZFxuICB0aGlzLl9pZ25vcmVEYXRhID0gZmFsc2VcbiAgdGhpcy5fcGFydE9wdHMgPSB7IGhpZ2hXYXRlck1hcms6IGNmZy5wYXJ0SHdtIH1cbiAgdGhpcy5fcGF1c2UgPSBmYWxzZVxuXG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIHRoaXMuX2hwYXJzZXIgPSBuZXcgSGVhZGVyUGFyc2VyKGNmZylcbiAgdGhpcy5faHBhcnNlci5vbignaGVhZGVyJywgZnVuY3Rpb24gKGhlYWRlcikge1xuICAgIHNlbGYuX2luSGVhZGVyID0gZmFsc2VcbiAgICBzZWxmLl9wYXJ0LmVtaXQoJ2hlYWRlcicsIGhlYWRlcilcbiAgfSlcbn1cbmluaGVyaXRzKERpY2VyLCBXcml0YWJsZVN0cmVhbSlcblxuRGljZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiAoZXYpIHtcbiAgaWYgKGV2ID09PSAnZmluaXNoJyAmJiAhdGhpcy5fcmVhbEZpbmlzaCkge1xuICAgIGlmICghdGhpcy5fZmluaXNoZWQpIHtcbiAgICAgIGNvbnN0IHNlbGYgPSB0aGlzXG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2VsZi5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcignVW5leHBlY3RlZCBlbmQgb2YgbXVsdGlwYXJ0IGRhdGEnKSlcbiAgICAgICAgaWYgKHNlbGYuX3BhcnQgJiYgIXNlbGYuX2lnbm9yZURhdGEpIHtcbiAgICAgICAgICBjb25zdCB0eXBlID0gKHNlbGYuX2lzUHJlYW1ibGUgPyAnUHJlYW1ibGUnIDogJ1BhcnQnKVxuICAgICAgICAgIHNlbGYuX3BhcnQuZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IodHlwZSArICcgdGVybWluYXRlZCBlYXJseSBkdWUgdG8gdW5leHBlY3RlZCBlbmQgb2YgbXVsdGlwYXJ0IGRhdGEnKSlcbiAgICAgICAgICBzZWxmLl9wYXJ0LnB1c2gobnVsbClcbiAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHNlbGYuX3JlYWxGaW5pc2ggPSB0cnVlXG4gICAgICAgICAgICBzZWxmLmVtaXQoJ2ZpbmlzaCcpXG4gICAgICAgICAgICBzZWxmLl9yZWFsRmluaXNoID0gZmFsc2VcbiAgICAgICAgICB9KVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIHNlbGYuX3JlYWxGaW5pc2ggPSB0cnVlXG4gICAgICAgIHNlbGYuZW1pdCgnZmluaXNoJylcbiAgICAgICAgc2VsZi5fcmVhbEZpbmlzaCA9IGZhbHNlXG4gICAgICB9KVxuICAgIH1cbiAgfSBlbHNlIHsgV3JpdGFibGVTdHJlYW0ucHJvdG90eXBlLmVtaXQuYXBwbHkodGhpcywgYXJndW1lbnRzKSB9XG59XG5cbkRpY2VyLnByb3RvdHlwZS5fd3JpdGUgPSBmdW5jdGlvbiAoZGF0YSwgZW5jb2RpbmcsIGNiKSB7XG4gIC8vIGlnbm9yZSB1bmV4cGVjdGVkIGRhdGEgKGUuZy4gZXh0cmEgdHJhaWxlciBkYXRhIGFmdGVyIGZpbmlzaGVkKVxuICBpZiAoIXRoaXMuX2hwYXJzZXIgJiYgIXRoaXMuX2JwYXJzZXIpIHsgcmV0dXJuIGNiKCkgfVxuXG4gIGlmICh0aGlzLl9oZWFkZXJGaXJzdCAmJiB0aGlzLl9pc1ByZWFtYmxlKSB7XG4gICAgaWYgKCF0aGlzLl9wYXJ0KSB7XG4gICAgICB0aGlzLl9wYXJ0ID0gbmV3IFBhcnRTdHJlYW0odGhpcy5fcGFydE9wdHMpXG4gICAgICBpZiAodGhpcy5saXN0ZW5lckNvdW50KCdwcmVhbWJsZScpICE9PSAwKSB7IHRoaXMuZW1pdCgncHJlYW1ibGUnLCB0aGlzLl9wYXJ0KSB9IGVsc2UgeyB0aGlzLl9pZ25vcmUoKSB9XG4gICAgfVxuICAgIGNvbnN0IHIgPSB0aGlzLl9ocGFyc2VyLnB1c2goZGF0YSlcbiAgICBpZiAoIXRoaXMuX2luSGVhZGVyICYmIHIgIT09IHVuZGVmaW5lZCAmJiByIDwgZGF0YS5sZW5ndGgpIHsgZGF0YSA9IGRhdGEuc2xpY2UocikgfSBlbHNlIHsgcmV0dXJuIGNiKCkgfVxuICB9XG5cbiAgLy8gYWxsb3dzIGZvciBcImVhc2llclwiIHRlc3RpbmdcbiAgaWYgKHRoaXMuX2ZpcnN0V3JpdGUpIHtcbiAgICB0aGlzLl9icGFyc2VyLnB1c2goQl9DUkxGKVxuICAgIHRoaXMuX2ZpcnN0V3JpdGUgPSBmYWxzZVxuICB9XG5cbiAgdGhpcy5fYnBhcnNlci5wdXNoKGRhdGEpXG5cbiAgaWYgKHRoaXMuX3BhdXNlKSB7IHRoaXMuX2NiID0gY2IgfSBlbHNlIHsgY2IoKSB9XG59XG5cbkRpY2VyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5fcGFydCA9IHVuZGVmaW5lZFxuICB0aGlzLl9icGFyc2VyID0gdW5kZWZpbmVkXG4gIHRoaXMuX2hwYXJzZXIgPSB1bmRlZmluZWRcbn1cblxuRGljZXIucHJvdG90eXBlLnNldEJvdW5kYXJ5ID0gZnVuY3Rpb24gKGJvdW5kYXJ5KSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIHRoaXMuX2JwYXJzZXIgPSBuZXcgU3RyZWFtU2VhcmNoKCdcXHJcXG4tLScgKyBib3VuZGFyeSlcbiAgdGhpcy5fYnBhcnNlci5vbignaW5mbycsIGZ1bmN0aW9uIChpc01hdGNoLCBkYXRhLCBzdGFydCwgZW5kKSB7XG4gICAgc2VsZi5fb25pbmZvKGlzTWF0Y2gsIGRhdGEsIHN0YXJ0LCBlbmQpXG4gIH0pXG59XG5cbkRpY2VyLnByb3RvdHlwZS5faWdub3JlID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5fcGFydCAmJiAhdGhpcy5faWdub3JlRGF0YSkge1xuICAgIHRoaXMuX2lnbm9yZURhdGEgPSB0cnVlXG4gICAgdGhpcy5fcGFydC5vbignZXJyb3InLCBFTVBUWV9GTilcbiAgICAvLyB3ZSBtdXN0IHBlcmZvcm0gc29tZSBraW5kIG9mIHJlYWQgb24gdGhlIHN0cmVhbSBldmVuIHRob3VnaCB3ZSBhcmVcbiAgICAvLyBpZ25vcmluZyB0aGUgZGF0YSwgb3RoZXJ3aXNlIG5vZGUncyBSZWFkYWJsZSBzdHJlYW0gd2lsbCBub3QgZW1pdCAnZW5kJ1xuICAgIC8vIGFmdGVyIHB1c2hpbmcgbnVsbCB0byB0aGUgc3RyZWFtXG4gICAgdGhpcy5fcGFydC5yZXN1bWUoKVxuICB9XG59XG5cbkRpY2VyLnByb3RvdHlwZS5fb25pbmZvID0gZnVuY3Rpb24gKGlzTWF0Y2gsIGRhdGEsIHN0YXJ0LCBlbmQpIHtcbiAgbGV0IGJ1ZjsgY29uc3Qgc2VsZiA9IHRoaXM7IGxldCBpID0gMDsgbGV0IHI7IGxldCBzaG91bGRXcml0ZU1vcmUgPSB0cnVlXG5cbiAgaWYgKCF0aGlzLl9wYXJ0ICYmIHRoaXMuX2p1c3RNYXRjaGVkICYmIGRhdGEpIHtcbiAgICB3aGlsZSAodGhpcy5fZGFzaGVzIDwgMiAmJiAoc3RhcnQgKyBpKSA8IGVuZCkge1xuICAgICAgaWYgKGRhdGFbc3RhcnQgKyBpXSA9PT0gREFTSCkge1xuICAgICAgICArK2lcbiAgICAgICAgKyt0aGlzLl9kYXNoZXNcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLl9kYXNoZXMpIHsgYnVmID0gQl9PTkVEQVNIIH1cbiAgICAgICAgdGhpcy5fZGFzaGVzID0gMFxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5fZGFzaGVzID09PSAyKSB7XG4gICAgICBpZiAoKHN0YXJ0ICsgaSkgPCBlbmQgJiYgdGhpcy5saXN0ZW5lckNvdW50KCd0cmFpbGVyJykgIT09IDApIHsgdGhpcy5lbWl0KCd0cmFpbGVyJywgZGF0YS5zbGljZShzdGFydCArIGksIGVuZCkpIH1cbiAgICAgIHRoaXMucmVzZXQoKVxuICAgICAgdGhpcy5fZmluaXNoZWQgPSB0cnVlXG4gICAgICAvLyBubyBtb3JlIHBhcnRzIHdpbGwgYmUgYWRkZWRcbiAgICAgIGlmIChzZWxmLl9wYXJ0cyA9PT0gMCkge1xuICAgICAgICBzZWxmLl9yZWFsRmluaXNoID0gdHJ1ZVxuICAgICAgICBzZWxmLmVtaXQoJ2ZpbmlzaCcpXG4gICAgICAgIHNlbGYuX3JlYWxGaW5pc2ggPSBmYWxzZVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5fZGFzaGVzKSB7IHJldHVybiB9XG4gIH1cbiAgaWYgKHRoaXMuX2p1c3RNYXRjaGVkKSB7IHRoaXMuX2p1c3RNYXRjaGVkID0gZmFsc2UgfVxuICBpZiAoIXRoaXMuX3BhcnQpIHtcbiAgICB0aGlzLl9wYXJ0ID0gbmV3IFBhcnRTdHJlYW0odGhpcy5fcGFydE9wdHMpXG4gICAgdGhpcy5fcGFydC5fcmVhZCA9IGZ1bmN0aW9uIChuKSB7XG4gICAgICBzZWxmLl91bnBhdXNlKClcbiAgICB9XG4gICAgaWYgKHRoaXMuX2lzUHJlYW1ibGUgJiYgdGhpcy5saXN0ZW5lckNvdW50KCdwcmVhbWJsZScpICE9PSAwKSB7XG4gICAgICB0aGlzLmVtaXQoJ3ByZWFtYmxlJywgdGhpcy5fcGFydClcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2lzUHJlYW1ibGUgIT09IHRydWUgJiYgdGhpcy5saXN0ZW5lckNvdW50KCdwYXJ0JykgIT09IDApIHtcbiAgICAgIHRoaXMuZW1pdCgncGFydCcsIHRoaXMuX3BhcnQpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2lnbm9yZSgpXG4gICAgfVxuICAgIGlmICghdGhpcy5faXNQcmVhbWJsZSkgeyB0aGlzLl9pbkhlYWRlciA9IHRydWUgfVxuICB9XG4gIGlmIChkYXRhICYmIHN0YXJ0IDwgZW5kICYmICF0aGlzLl9pZ25vcmVEYXRhKSB7XG4gICAgaWYgKHRoaXMuX2lzUHJlYW1ibGUgfHwgIXRoaXMuX2luSGVhZGVyKSB7XG4gICAgICBpZiAoYnVmKSB7IHNob3VsZFdyaXRlTW9yZSA9IHRoaXMuX3BhcnQucHVzaChidWYpIH1cbiAgICAgIHNob3VsZFdyaXRlTW9yZSA9IHRoaXMuX3BhcnQucHVzaChkYXRhLnNsaWNlKHN0YXJ0LCBlbmQpKVxuICAgICAgaWYgKCFzaG91bGRXcml0ZU1vcmUpIHsgdGhpcy5fcGF1c2UgPSB0cnVlIH1cbiAgICB9IGVsc2UgaWYgKCF0aGlzLl9pc1ByZWFtYmxlICYmIHRoaXMuX2luSGVhZGVyKSB7XG4gICAgICBpZiAoYnVmKSB7IHRoaXMuX2hwYXJzZXIucHVzaChidWYpIH1cbiAgICAgIHIgPSB0aGlzLl9ocGFyc2VyLnB1c2goZGF0YS5zbGljZShzdGFydCwgZW5kKSlcbiAgICAgIGlmICghdGhpcy5faW5IZWFkZXIgJiYgciAhPT0gdW5kZWZpbmVkICYmIHIgPCBlbmQpIHsgdGhpcy5fb25pbmZvKGZhbHNlLCBkYXRhLCBzdGFydCArIHIsIGVuZCkgfVxuICAgIH1cbiAgfVxuICBpZiAoaXNNYXRjaCkge1xuICAgIHRoaXMuX2hwYXJzZXIucmVzZXQoKVxuICAgIGlmICh0aGlzLl9pc1ByZWFtYmxlKSB7IHRoaXMuX2lzUHJlYW1ibGUgPSBmYWxzZSB9IGVsc2Uge1xuICAgICAgaWYgKHN0YXJ0ICE9PSBlbmQpIHtcbiAgICAgICAgKyt0aGlzLl9wYXJ0c1xuICAgICAgICB0aGlzLl9wYXJ0Lm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKC0tc2VsZi5fcGFydHMgPT09IDApIHtcbiAgICAgICAgICAgIGlmIChzZWxmLl9maW5pc2hlZCkge1xuICAgICAgICAgICAgICBzZWxmLl9yZWFsRmluaXNoID0gdHJ1ZVxuICAgICAgICAgICAgICBzZWxmLmVtaXQoJ2ZpbmlzaCcpXG4gICAgICAgICAgICAgIHNlbGYuX3JlYWxGaW5pc2ggPSBmYWxzZVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2VsZi5fdW5wYXVzZSgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9wYXJ0LnB1c2gobnVsbClcbiAgICB0aGlzLl9wYXJ0ID0gdW5kZWZpbmVkXG4gICAgdGhpcy5faWdub3JlRGF0YSA9IGZhbHNlXG4gICAgdGhpcy5fanVzdE1hdGNoZWQgPSB0cnVlXG4gICAgdGhpcy5fZGFzaGVzID0gMFxuICB9XG59XG5cbkRpY2VyLnByb3RvdHlwZS5fdW5wYXVzZSA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKCF0aGlzLl9wYXVzZSkgeyByZXR1cm4gfVxuXG4gIHRoaXMuX3BhdXNlID0gZmFsc2VcbiAgaWYgKHRoaXMuX2NiKSB7XG4gICAgY29uc3QgY2IgPSB0aGlzLl9jYlxuICAgIHRoaXMuX2NiID0gdW5kZWZpbmVkXG4gICAgY2IoKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRGljZXJcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbi8vIE5vZGUgaGFzIGFsd2F5cyB1dGYtOFxuY29uc3QgdXRmOERlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoJ3V0Zi04JylcbmNvbnN0IHRleHREZWNvZGVycyA9IG5ldyBNYXAoW1xuICBbJ3V0Zi04JywgdXRmOERlY29kZXJdLFxuICBbJ3V0ZjgnLCB1dGY4RGVjb2Rlcl1cbl0pXG5cbmZ1bmN0aW9uIGdldERlY29kZXIgKGNoYXJzZXQpIHtcbiAgbGV0IGxjXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgc3dpdGNoIChjaGFyc2V0KSB7XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgICAgcmV0dXJuIGRlY29kZXJzLnV0ZjhcbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdhc2NpaSc6IC8vIFRPRE86IE1ha2UgdGhlc2UgYSBzZXBhcmF0ZSwgc3RyaWN0IGRlY29kZXI/XG4gICAgICBjYXNlICd1cy1hc2NpaSc6XG4gICAgICBjYXNlICdpc28tODg1OS0xJzpcbiAgICAgIGNhc2UgJ2lzbzg4NTktMSc6XG4gICAgICBjYXNlICdpc284ODU5MSc6XG4gICAgICBjYXNlICdpc29fODg1OS0xJzpcbiAgICAgIGNhc2UgJ3dpbmRvd3MtMTI1Mic6XG4gICAgICBjYXNlICdpc29fODg1OS0xOjE5ODcnOlxuICAgICAgY2FzZSAnY3AxMjUyJzpcbiAgICAgIGNhc2UgJ3gtY3AxMjUyJzpcbiAgICAgICAgcmV0dXJuIGRlY29kZXJzLmxhdGluMVxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgICAgcmV0dXJuIGRlY29kZXJzLnV0ZjE2bGVcbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIHJldHVybiBkZWNvZGVycy5iYXNlNjRcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsYyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbGMgPSB0cnVlXG4gICAgICAgICAgY2hhcnNldCA9IGNoYXJzZXQudG9Mb3dlckNhc2UoKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlY29kZXJzLm90aGVyLmJpbmQoY2hhcnNldClcbiAgICB9XG4gIH1cbn1cblxuY29uc3QgZGVjb2RlcnMgPSB7XG4gIHV0Zjg6IChkYXRhLCBzb3VyY2VFbmNvZGluZykgPT4ge1xuICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGRhdGEgPSBCdWZmZXIuZnJvbShkYXRhLCBzb3VyY2VFbmNvZGluZylcbiAgICB9XG4gICAgcmV0dXJuIGRhdGEudXRmOFNsaWNlKDAsIGRhdGEubGVuZ3RoKVxuICB9LFxuXG4gIGxhdGluMTogKGRhdGEsIHNvdXJjZUVuY29kaW5nKSA9PiB7XG4gICAgaWYgKGRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGRhdGFcbiAgICB9XG4gICAgcmV0dXJuIGRhdGEubGF0aW4xU2xpY2UoMCwgZGF0YS5sZW5ndGgpXG4gIH0sXG5cbiAgdXRmMTZsZTogKGRhdGEsIHNvdXJjZUVuY29kaW5nKSA9PiB7XG4gICAgaWYgKGRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgZGF0YSA9IEJ1ZmZlci5mcm9tKGRhdGEsIHNvdXJjZUVuY29kaW5nKVxuICAgIH1cbiAgICByZXR1cm4gZGF0YS51Y3MyU2xpY2UoMCwgZGF0YS5sZW5ndGgpXG4gIH0sXG5cbiAgYmFzZTY0OiAoZGF0YSwgc291cmNlRW5jb2RpbmcpID0+IHtcbiAgICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICBkYXRhID0gQnVmZmVyLmZyb20oZGF0YSwgc291cmNlRW5jb2RpbmcpXG4gICAgfVxuICAgIHJldHVybiBkYXRhLmJhc2U2NFNsaWNlKDAsIGRhdGEubGVuZ3RoKVxuICB9LFxuXG4gIG90aGVyOiAoZGF0YSwgc291cmNlRW5jb2RpbmcpID0+IHtcbiAgICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICBkYXRhID0gQnVmZmVyLmZyb20oZGF0YSwgc291cmNlRW5jb2RpbmcpXG4gICAgfVxuXG4gICAgaWYgKHRleHREZWNvZGVycy5oYXModGhpcy50b1N0cmluZygpKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHRleHREZWNvZGVycy5nZXQodGhpcykuZGVjb2RlKGRhdGEpXG4gICAgICB9IGNhdGNoIHt9XG4gICAgfVxuICAgIHJldHVybiB0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZydcbiAgICAgID8gZGF0YVxuICAgICAgOiBkYXRhLnRvU3RyaW5nKClcbiAgfVxufVxuXG5mdW5jdGlvbiBkZWNvZGVUZXh0ICh0ZXh0LCBzb3VyY2VFbmNvZGluZywgZGVzdEVuY29kaW5nKSB7XG4gIGlmICh0ZXh0KSB7XG4gICAgcmV0dXJuIGdldERlY29kZXIoZGVzdEVuY29kaW5nKSh0ZXh0LCBzb3VyY2VFbmNvZGluZylcbiAgfVxuICByZXR1cm4gdGV4dFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRlY29kZVRleHRcbiIsCiAgICAiLyogZXNsaW50LWRpc2FibGUgb2JqZWN0LXByb3BlcnR5LW5ld2xpbmUgKi9cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCBkZWNvZGVUZXh0ID0gcmVxdWlyZSgnLi9kZWNvZGVUZXh0JylcblxuY29uc3QgUkVfRU5DT0RFRCA9IC8lW2EtZkEtRjAtOV1bYS1mQS1GMC05XS9nXG5cbmNvbnN0IEVuY29kZWRMb29rdXAgPSB7XG4gICclMDAnOiAnXFx4MDAnLCAnJTAxJzogJ1xceDAxJywgJyUwMic6ICdcXHgwMicsICclMDMnOiAnXFx4MDMnLCAnJTA0JzogJ1xceDA0JyxcbiAgJyUwNSc6ICdcXHgwNScsICclMDYnOiAnXFx4MDYnLCAnJTA3JzogJ1xceDA3JywgJyUwOCc6ICdcXHgwOCcsICclMDknOiAnXFx4MDknLFxuICAnJTBhJzogJ1xceDBhJywgJyUwQSc6ICdcXHgwYScsICclMGInOiAnXFx4MGInLCAnJTBCJzogJ1xceDBiJywgJyUwYyc6ICdcXHgwYycsXG4gICclMEMnOiAnXFx4MGMnLCAnJTBkJzogJ1xceDBkJywgJyUwRCc6ICdcXHgwZCcsICclMGUnOiAnXFx4MGUnLCAnJTBFJzogJ1xceDBlJyxcbiAgJyUwZic6ICdcXHgwZicsICclMEYnOiAnXFx4MGYnLCAnJTEwJzogJ1xceDEwJywgJyUxMSc6ICdcXHgxMScsICclMTInOiAnXFx4MTInLFxuICAnJTEzJzogJ1xceDEzJywgJyUxNCc6ICdcXHgxNCcsICclMTUnOiAnXFx4MTUnLCAnJTE2JzogJ1xceDE2JywgJyUxNyc6ICdcXHgxNycsXG4gICclMTgnOiAnXFx4MTgnLCAnJTE5JzogJ1xceDE5JywgJyUxYSc6ICdcXHgxYScsICclMUEnOiAnXFx4MWEnLCAnJTFiJzogJ1xceDFiJyxcbiAgJyUxQic6ICdcXHgxYicsICclMWMnOiAnXFx4MWMnLCAnJTFDJzogJ1xceDFjJywgJyUxZCc6ICdcXHgxZCcsICclMUQnOiAnXFx4MWQnLFxuICAnJTFlJzogJ1xceDFlJywgJyUxRSc6ICdcXHgxZScsICclMWYnOiAnXFx4MWYnLCAnJTFGJzogJ1xceDFmJywgJyUyMCc6ICdcXHgyMCcsXG4gICclMjEnOiAnXFx4MjEnLCAnJTIyJzogJ1xceDIyJywgJyUyMyc6ICdcXHgyMycsICclMjQnOiAnXFx4MjQnLCAnJTI1JzogJ1xceDI1JyxcbiAgJyUyNic6ICdcXHgyNicsICclMjcnOiAnXFx4MjcnLCAnJTI4JzogJ1xceDI4JywgJyUyOSc6ICdcXHgyOScsICclMmEnOiAnXFx4MmEnLFxuICAnJTJBJzogJ1xceDJhJywgJyUyYic6ICdcXHgyYicsICclMkInOiAnXFx4MmInLCAnJTJjJzogJ1xceDJjJywgJyUyQyc6ICdcXHgyYycsXG4gICclMmQnOiAnXFx4MmQnLCAnJTJEJzogJ1xceDJkJywgJyUyZSc6ICdcXHgyZScsICclMkUnOiAnXFx4MmUnLCAnJTJmJzogJ1xceDJmJyxcbiAgJyUyRic6ICdcXHgyZicsICclMzAnOiAnXFx4MzAnLCAnJTMxJzogJ1xceDMxJywgJyUzMic6ICdcXHgzMicsICclMzMnOiAnXFx4MzMnLFxuICAnJTM0JzogJ1xceDM0JywgJyUzNSc6ICdcXHgzNScsICclMzYnOiAnXFx4MzYnLCAnJTM3JzogJ1xceDM3JywgJyUzOCc6ICdcXHgzOCcsXG4gICclMzknOiAnXFx4MzknLCAnJTNhJzogJ1xceDNhJywgJyUzQSc6ICdcXHgzYScsICclM2InOiAnXFx4M2InLCAnJTNCJzogJ1xceDNiJyxcbiAgJyUzYyc6ICdcXHgzYycsICclM0MnOiAnXFx4M2MnLCAnJTNkJzogJ1xceDNkJywgJyUzRCc6ICdcXHgzZCcsICclM2UnOiAnXFx4M2UnLFxuICAnJTNFJzogJ1xceDNlJywgJyUzZic6ICdcXHgzZicsICclM0YnOiAnXFx4M2YnLCAnJTQwJzogJ1xceDQwJywgJyU0MSc6ICdcXHg0MScsXG4gICclNDInOiAnXFx4NDInLCAnJTQzJzogJ1xceDQzJywgJyU0NCc6ICdcXHg0NCcsICclNDUnOiAnXFx4NDUnLCAnJTQ2JzogJ1xceDQ2JyxcbiAgJyU0Nyc6ICdcXHg0NycsICclNDgnOiAnXFx4NDgnLCAnJTQ5JzogJ1xceDQ5JywgJyU0YSc6ICdcXHg0YScsICclNEEnOiAnXFx4NGEnLFxuICAnJTRiJzogJ1xceDRiJywgJyU0Qic6ICdcXHg0YicsICclNGMnOiAnXFx4NGMnLCAnJTRDJzogJ1xceDRjJywgJyU0ZCc6ICdcXHg0ZCcsXG4gICclNEQnOiAnXFx4NGQnLCAnJTRlJzogJ1xceDRlJywgJyU0RSc6ICdcXHg0ZScsICclNGYnOiAnXFx4NGYnLCAnJTRGJzogJ1xceDRmJyxcbiAgJyU1MCc6ICdcXHg1MCcsICclNTEnOiAnXFx4NTEnLCAnJTUyJzogJ1xceDUyJywgJyU1Myc6ICdcXHg1MycsICclNTQnOiAnXFx4NTQnLFxuICAnJTU1JzogJ1xceDU1JywgJyU1Nic6ICdcXHg1NicsICclNTcnOiAnXFx4NTcnLCAnJTU4JzogJ1xceDU4JywgJyU1OSc6ICdcXHg1OScsXG4gICclNWEnOiAnXFx4NWEnLCAnJTVBJzogJ1xceDVhJywgJyU1Yic6ICdcXHg1YicsICclNUInOiAnXFx4NWInLCAnJTVjJzogJ1xceDVjJyxcbiAgJyU1Qyc6ICdcXHg1YycsICclNWQnOiAnXFx4NWQnLCAnJTVEJzogJ1xceDVkJywgJyU1ZSc6ICdcXHg1ZScsICclNUUnOiAnXFx4NWUnLFxuICAnJTVmJzogJ1xceDVmJywgJyU1Ric6ICdcXHg1ZicsICclNjAnOiAnXFx4NjAnLCAnJTYxJzogJ1xceDYxJywgJyU2Mic6ICdcXHg2MicsXG4gICclNjMnOiAnXFx4NjMnLCAnJTY0JzogJ1xceDY0JywgJyU2NSc6ICdcXHg2NScsICclNjYnOiAnXFx4NjYnLCAnJTY3JzogJ1xceDY3JyxcbiAgJyU2OCc6ICdcXHg2OCcsICclNjknOiAnXFx4NjknLCAnJTZhJzogJ1xceDZhJywgJyU2QSc6ICdcXHg2YScsICclNmInOiAnXFx4NmInLFxuICAnJTZCJzogJ1xceDZiJywgJyU2Yyc6ICdcXHg2YycsICclNkMnOiAnXFx4NmMnLCAnJTZkJzogJ1xceDZkJywgJyU2RCc6ICdcXHg2ZCcsXG4gICclNmUnOiAnXFx4NmUnLCAnJTZFJzogJ1xceDZlJywgJyU2Zic6ICdcXHg2ZicsICclNkYnOiAnXFx4NmYnLCAnJTcwJzogJ1xceDcwJyxcbiAgJyU3MSc6ICdcXHg3MScsICclNzInOiAnXFx4NzInLCAnJTczJzogJ1xceDczJywgJyU3NCc6ICdcXHg3NCcsICclNzUnOiAnXFx4NzUnLFxuICAnJTc2JzogJ1xceDc2JywgJyU3Nyc6ICdcXHg3NycsICclNzgnOiAnXFx4NzgnLCAnJTc5JzogJ1xceDc5JywgJyU3YSc6ICdcXHg3YScsXG4gICclN0EnOiAnXFx4N2EnLCAnJTdiJzogJ1xceDdiJywgJyU3Qic6ICdcXHg3YicsICclN2MnOiAnXFx4N2MnLCAnJTdDJzogJ1xceDdjJyxcbiAgJyU3ZCc6ICdcXHg3ZCcsICclN0QnOiAnXFx4N2QnLCAnJTdlJzogJ1xceDdlJywgJyU3RSc6ICdcXHg3ZScsICclN2YnOiAnXFx4N2YnLFxuICAnJTdGJzogJ1xceDdmJywgJyU4MCc6ICdcXHg4MCcsICclODEnOiAnXFx4ODEnLCAnJTgyJzogJ1xceDgyJywgJyU4Myc6ICdcXHg4MycsXG4gICclODQnOiAnXFx4ODQnLCAnJTg1JzogJ1xceDg1JywgJyU4Nic6ICdcXHg4NicsICclODcnOiAnXFx4ODcnLCAnJTg4JzogJ1xceDg4JyxcbiAgJyU4OSc6ICdcXHg4OScsICclOGEnOiAnXFx4OGEnLCAnJThBJzogJ1xceDhhJywgJyU4Yic6ICdcXHg4YicsICclOEInOiAnXFx4OGInLFxuICAnJThjJzogJ1xceDhjJywgJyU4Qyc6ICdcXHg4YycsICclOGQnOiAnXFx4OGQnLCAnJThEJzogJ1xceDhkJywgJyU4ZSc6ICdcXHg4ZScsXG4gICclOEUnOiAnXFx4OGUnLCAnJThmJzogJ1xceDhmJywgJyU4Ric6ICdcXHg4ZicsICclOTAnOiAnXFx4OTAnLCAnJTkxJzogJ1xceDkxJyxcbiAgJyU5Mic6ICdcXHg5MicsICclOTMnOiAnXFx4OTMnLCAnJTk0JzogJ1xceDk0JywgJyU5NSc6ICdcXHg5NScsICclOTYnOiAnXFx4OTYnLFxuICAnJTk3JzogJ1xceDk3JywgJyU5OCc6ICdcXHg5OCcsICclOTknOiAnXFx4OTknLCAnJTlhJzogJ1xceDlhJywgJyU5QSc6ICdcXHg5YScsXG4gICclOWInOiAnXFx4OWInLCAnJTlCJzogJ1xceDliJywgJyU5Yyc6ICdcXHg5YycsICclOUMnOiAnXFx4OWMnLCAnJTlkJzogJ1xceDlkJyxcbiAgJyU5RCc6ICdcXHg5ZCcsICclOWUnOiAnXFx4OWUnLCAnJTlFJzogJ1xceDllJywgJyU5Zic6ICdcXHg5ZicsICclOUYnOiAnXFx4OWYnLFxuICAnJWEwJzogJ1xceGEwJywgJyVBMCc6ICdcXHhhMCcsICclYTEnOiAnXFx4YTEnLCAnJUExJzogJ1xceGExJywgJyVhMic6ICdcXHhhMicsXG4gICclQTInOiAnXFx4YTInLCAnJWEzJzogJ1xceGEzJywgJyVBMyc6ICdcXHhhMycsICclYTQnOiAnXFx4YTQnLCAnJUE0JzogJ1xceGE0JyxcbiAgJyVhNSc6ICdcXHhhNScsICclQTUnOiAnXFx4YTUnLCAnJWE2JzogJ1xceGE2JywgJyVBNic6ICdcXHhhNicsICclYTcnOiAnXFx4YTcnLFxuICAnJUE3JzogJ1xceGE3JywgJyVhOCc6ICdcXHhhOCcsICclQTgnOiAnXFx4YTgnLCAnJWE5JzogJ1xceGE5JywgJyVBOSc6ICdcXHhhOScsXG4gICclYWEnOiAnXFx4YWEnLCAnJUFhJzogJ1xceGFhJywgJyVhQSc6ICdcXHhhYScsICclQUEnOiAnXFx4YWEnLCAnJWFiJzogJ1xceGFiJyxcbiAgJyVBYic6ICdcXHhhYicsICclYUInOiAnXFx4YWInLCAnJUFCJzogJ1xceGFiJywgJyVhYyc6ICdcXHhhYycsICclQWMnOiAnXFx4YWMnLFxuICAnJWFDJzogJ1xceGFjJywgJyVBQyc6ICdcXHhhYycsICclYWQnOiAnXFx4YWQnLCAnJUFkJzogJ1xceGFkJywgJyVhRCc6ICdcXHhhZCcsXG4gICclQUQnOiAnXFx4YWQnLCAnJWFlJzogJ1xceGFlJywgJyVBZSc6ICdcXHhhZScsICclYUUnOiAnXFx4YWUnLCAnJUFFJzogJ1xceGFlJyxcbiAgJyVhZic6ICdcXHhhZicsICclQWYnOiAnXFx4YWYnLCAnJWFGJzogJ1xceGFmJywgJyVBRic6ICdcXHhhZicsICclYjAnOiAnXFx4YjAnLFxuICAnJUIwJzogJ1xceGIwJywgJyViMSc6ICdcXHhiMScsICclQjEnOiAnXFx4YjEnLCAnJWIyJzogJ1xceGIyJywgJyVCMic6ICdcXHhiMicsXG4gICclYjMnOiAnXFx4YjMnLCAnJUIzJzogJ1xceGIzJywgJyViNCc6ICdcXHhiNCcsICclQjQnOiAnXFx4YjQnLCAnJWI1JzogJ1xceGI1JyxcbiAgJyVCNSc6ICdcXHhiNScsICclYjYnOiAnXFx4YjYnLCAnJUI2JzogJ1xceGI2JywgJyViNyc6ICdcXHhiNycsICclQjcnOiAnXFx4YjcnLFxuICAnJWI4JzogJ1xceGI4JywgJyVCOCc6ICdcXHhiOCcsICclYjknOiAnXFx4YjknLCAnJUI5JzogJ1xceGI5JywgJyViYSc6ICdcXHhiYScsXG4gICclQmEnOiAnXFx4YmEnLCAnJWJBJzogJ1xceGJhJywgJyVCQSc6ICdcXHhiYScsICclYmInOiAnXFx4YmInLCAnJUJiJzogJ1xceGJiJyxcbiAgJyViQic6ICdcXHhiYicsICclQkInOiAnXFx4YmInLCAnJWJjJzogJ1xceGJjJywgJyVCYyc6ICdcXHhiYycsICclYkMnOiAnXFx4YmMnLFxuICAnJUJDJzogJ1xceGJjJywgJyViZCc6ICdcXHhiZCcsICclQmQnOiAnXFx4YmQnLCAnJWJEJzogJ1xceGJkJywgJyVCRCc6ICdcXHhiZCcsXG4gICclYmUnOiAnXFx4YmUnLCAnJUJlJzogJ1xceGJlJywgJyViRSc6ICdcXHhiZScsICclQkUnOiAnXFx4YmUnLCAnJWJmJzogJ1xceGJmJyxcbiAgJyVCZic6ICdcXHhiZicsICclYkYnOiAnXFx4YmYnLCAnJUJGJzogJ1xceGJmJywgJyVjMCc6ICdcXHhjMCcsICclQzAnOiAnXFx4YzAnLFxuICAnJWMxJzogJ1xceGMxJywgJyVDMSc6ICdcXHhjMScsICclYzInOiAnXFx4YzInLCAnJUMyJzogJ1xceGMyJywgJyVjMyc6ICdcXHhjMycsXG4gICclQzMnOiAnXFx4YzMnLCAnJWM0JzogJ1xceGM0JywgJyVDNCc6ICdcXHhjNCcsICclYzUnOiAnXFx4YzUnLCAnJUM1JzogJ1xceGM1JyxcbiAgJyVjNic6ICdcXHhjNicsICclQzYnOiAnXFx4YzYnLCAnJWM3JzogJ1xceGM3JywgJyVDNyc6ICdcXHhjNycsICclYzgnOiAnXFx4YzgnLFxuICAnJUM4JzogJ1xceGM4JywgJyVjOSc6ICdcXHhjOScsICclQzknOiAnXFx4YzknLCAnJWNhJzogJ1xceGNhJywgJyVDYSc6ICdcXHhjYScsXG4gICclY0EnOiAnXFx4Y2EnLCAnJUNBJzogJ1xceGNhJywgJyVjYic6ICdcXHhjYicsICclQ2InOiAnXFx4Y2InLCAnJWNCJzogJ1xceGNiJyxcbiAgJyVDQic6ICdcXHhjYicsICclY2MnOiAnXFx4Y2MnLCAnJUNjJzogJ1xceGNjJywgJyVjQyc6ICdcXHhjYycsICclQ0MnOiAnXFx4Y2MnLFxuICAnJWNkJzogJ1xceGNkJywgJyVDZCc6ICdcXHhjZCcsICclY0QnOiAnXFx4Y2QnLCAnJUNEJzogJ1xceGNkJywgJyVjZSc6ICdcXHhjZScsXG4gICclQ2UnOiAnXFx4Y2UnLCAnJWNFJzogJ1xceGNlJywgJyVDRSc6ICdcXHhjZScsICclY2YnOiAnXFx4Y2YnLCAnJUNmJzogJ1xceGNmJyxcbiAgJyVjRic6ICdcXHhjZicsICclQ0YnOiAnXFx4Y2YnLCAnJWQwJzogJ1xceGQwJywgJyVEMCc6ICdcXHhkMCcsICclZDEnOiAnXFx4ZDEnLFxuICAnJUQxJzogJ1xceGQxJywgJyVkMic6ICdcXHhkMicsICclRDInOiAnXFx4ZDInLCAnJWQzJzogJ1xceGQzJywgJyVEMyc6ICdcXHhkMycsXG4gICclZDQnOiAnXFx4ZDQnLCAnJUQ0JzogJ1xceGQ0JywgJyVkNSc6ICdcXHhkNScsICclRDUnOiAnXFx4ZDUnLCAnJWQ2JzogJ1xceGQ2JyxcbiAgJyVENic6ICdcXHhkNicsICclZDcnOiAnXFx4ZDcnLCAnJUQ3JzogJ1xceGQ3JywgJyVkOCc6ICdcXHhkOCcsICclRDgnOiAnXFx4ZDgnLFxuICAnJWQ5JzogJ1xceGQ5JywgJyVEOSc6ICdcXHhkOScsICclZGEnOiAnXFx4ZGEnLCAnJURhJzogJ1xceGRhJywgJyVkQSc6ICdcXHhkYScsXG4gICclREEnOiAnXFx4ZGEnLCAnJWRiJzogJ1xceGRiJywgJyVEYic6ICdcXHhkYicsICclZEInOiAnXFx4ZGInLCAnJURCJzogJ1xceGRiJyxcbiAgJyVkYyc6ICdcXHhkYycsICclRGMnOiAnXFx4ZGMnLCAnJWRDJzogJ1xceGRjJywgJyVEQyc6ICdcXHhkYycsICclZGQnOiAnXFx4ZGQnLFxuICAnJURkJzogJ1xceGRkJywgJyVkRCc6ICdcXHhkZCcsICclREQnOiAnXFx4ZGQnLCAnJWRlJzogJ1xceGRlJywgJyVEZSc6ICdcXHhkZScsXG4gICclZEUnOiAnXFx4ZGUnLCAnJURFJzogJ1xceGRlJywgJyVkZic6ICdcXHhkZicsICclRGYnOiAnXFx4ZGYnLCAnJWRGJzogJ1xceGRmJyxcbiAgJyVERic6ICdcXHhkZicsICclZTAnOiAnXFx4ZTAnLCAnJUUwJzogJ1xceGUwJywgJyVlMSc6ICdcXHhlMScsICclRTEnOiAnXFx4ZTEnLFxuICAnJWUyJzogJ1xceGUyJywgJyVFMic6ICdcXHhlMicsICclZTMnOiAnXFx4ZTMnLCAnJUUzJzogJ1xceGUzJywgJyVlNCc6ICdcXHhlNCcsXG4gICclRTQnOiAnXFx4ZTQnLCAnJWU1JzogJ1xceGU1JywgJyVFNSc6ICdcXHhlNScsICclZTYnOiAnXFx4ZTYnLCAnJUU2JzogJ1xceGU2JyxcbiAgJyVlNyc6ICdcXHhlNycsICclRTcnOiAnXFx4ZTcnLCAnJWU4JzogJ1xceGU4JywgJyVFOCc6ICdcXHhlOCcsICclZTknOiAnXFx4ZTknLFxuICAnJUU5JzogJ1xceGU5JywgJyVlYSc6ICdcXHhlYScsICclRWEnOiAnXFx4ZWEnLCAnJWVBJzogJ1xceGVhJywgJyVFQSc6ICdcXHhlYScsXG4gICclZWInOiAnXFx4ZWInLCAnJUViJzogJ1xceGViJywgJyVlQic6ICdcXHhlYicsICclRUInOiAnXFx4ZWInLCAnJWVjJzogJ1xceGVjJyxcbiAgJyVFYyc6ICdcXHhlYycsICclZUMnOiAnXFx4ZWMnLCAnJUVDJzogJ1xceGVjJywgJyVlZCc6ICdcXHhlZCcsICclRWQnOiAnXFx4ZWQnLFxuICAnJWVEJzogJ1xceGVkJywgJyVFRCc6ICdcXHhlZCcsICclZWUnOiAnXFx4ZWUnLCAnJUVlJzogJ1xceGVlJywgJyVlRSc6ICdcXHhlZScsXG4gICclRUUnOiAnXFx4ZWUnLCAnJWVmJzogJ1xceGVmJywgJyVFZic6ICdcXHhlZicsICclZUYnOiAnXFx4ZWYnLCAnJUVGJzogJ1xceGVmJyxcbiAgJyVmMCc6ICdcXHhmMCcsICclRjAnOiAnXFx4ZjAnLCAnJWYxJzogJ1xceGYxJywgJyVGMSc6ICdcXHhmMScsICclZjInOiAnXFx4ZjInLFxuICAnJUYyJzogJ1xceGYyJywgJyVmMyc6ICdcXHhmMycsICclRjMnOiAnXFx4ZjMnLCAnJWY0JzogJ1xceGY0JywgJyVGNCc6ICdcXHhmNCcsXG4gICclZjUnOiAnXFx4ZjUnLCAnJUY1JzogJ1xceGY1JywgJyVmNic6ICdcXHhmNicsICclRjYnOiAnXFx4ZjYnLCAnJWY3JzogJ1xceGY3JyxcbiAgJyVGNyc6ICdcXHhmNycsICclZjgnOiAnXFx4ZjgnLCAnJUY4JzogJ1xceGY4JywgJyVmOSc6ICdcXHhmOScsICclRjknOiAnXFx4ZjknLFxuICAnJWZhJzogJ1xceGZhJywgJyVGYSc6ICdcXHhmYScsICclZkEnOiAnXFx4ZmEnLCAnJUZBJzogJ1xceGZhJywgJyVmYic6ICdcXHhmYicsXG4gICclRmInOiAnXFx4ZmInLCAnJWZCJzogJ1xceGZiJywgJyVGQic6ICdcXHhmYicsICclZmMnOiAnXFx4ZmMnLCAnJUZjJzogJ1xceGZjJyxcbiAgJyVmQyc6ICdcXHhmYycsICclRkMnOiAnXFx4ZmMnLCAnJWZkJzogJ1xceGZkJywgJyVGZCc6ICdcXHhmZCcsICclZkQnOiAnXFx4ZmQnLFxuICAnJUZEJzogJ1xceGZkJywgJyVmZSc6ICdcXHhmZScsICclRmUnOiAnXFx4ZmUnLCAnJWZFJzogJ1xceGZlJywgJyVGRSc6ICdcXHhmZScsXG4gICclZmYnOiAnXFx4ZmYnLCAnJUZmJzogJ1xceGZmJywgJyVmRic6ICdcXHhmZicsICclRkYnOiAnXFx4ZmYnXG59XG5cbmZ1bmN0aW9uIGVuY29kZWRSZXBsYWNlciAobWF0Y2gpIHtcbiAgcmV0dXJuIEVuY29kZWRMb29rdXBbbWF0Y2hdXG59XG5cbmNvbnN0IFNUQVRFX0tFWSA9IDBcbmNvbnN0IFNUQVRFX1ZBTFVFID0gMVxuY29uc3QgU1RBVEVfQ0hBUlNFVCA9IDJcbmNvbnN0IFNUQVRFX0xBTkcgPSAzXG5cbmZ1bmN0aW9uIHBhcnNlUGFyYW1zIChzdHIpIHtcbiAgY29uc3QgcmVzID0gW11cbiAgbGV0IHN0YXRlID0gU1RBVEVfS0VZXG4gIGxldCBjaGFyc2V0ID0gJydcbiAgbGV0IGlucXVvdGUgPSBmYWxzZVxuICBsZXQgZXNjYXBpbmcgPSBmYWxzZVxuICBsZXQgcCA9IDBcbiAgbGV0IHRtcCA9ICcnXG4gIGNvbnN0IGxlbiA9IHN0ci5sZW5ndGhcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdmFyXG4gICAgY29uc3QgY2hhciA9IHN0cltpXVxuICAgIGlmIChjaGFyID09PSAnXFxcXCcgJiYgaW5xdW90ZSkge1xuICAgICAgaWYgKGVzY2FwaW5nKSB7IGVzY2FwaW5nID0gZmFsc2UgfSBlbHNlIHtcbiAgICAgICAgZXNjYXBpbmcgPSB0cnVlXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjaGFyID09PSAnXCInKSB7XG4gICAgICBpZiAoIWVzY2FwaW5nKSB7XG4gICAgICAgIGlmIChpbnF1b3RlKSB7XG4gICAgICAgICAgaW5xdW90ZSA9IGZhbHNlXG4gICAgICAgICAgc3RhdGUgPSBTVEFURV9LRVlcbiAgICAgICAgfSBlbHNlIHsgaW5xdW90ZSA9IHRydWUgfVxuICAgICAgICBjb250aW51ZVxuICAgICAgfSBlbHNlIHsgZXNjYXBpbmcgPSBmYWxzZSB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChlc2NhcGluZyAmJiBpbnF1b3RlKSB7IHRtcCArPSAnXFxcXCcgfVxuICAgICAgZXNjYXBpbmcgPSBmYWxzZVxuICAgICAgaWYgKChzdGF0ZSA9PT0gU1RBVEVfQ0hBUlNFVCB8fCBzdGF0ZSA9PT0gU1RBVEVfTEFORykgJiYgY2hhciA9PT0gXCInXCIpIHtcbiAgICAgICAgaWYgKHN0YXRlID09PSBTVEFURV9DSEFSU0VUKSB7XG4gICAgICAgICAgc3RhdGUgPSBTVEFURV9MQU5HXG4gICAgICAgICAgY2hhcnNldCA9IHRtcC5zdWJzdHJpbmcoMSlcbiAgICAgICAgfSBlbHNlIHsgc3RhdGUgPSBTVEFURV9WQUxVRSB9XG4gICAgICAgIHRtcCA9ICcnXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9IGVsc2UgaWYgKHN0YXRlID09PSBTVEFURV9LRVkgJiZcbiAgICAgICAgKGNoYXIgPT09ICcqJyB8fCBjaGFyID09PSAnPScpICYmXG4gICAgICAgIHJlcy5sZW5ndGgpIHtcbiAgICAgICAgc3RhdGUgPSBjaGFyID09PSAnKidcbiAgICAgICAgICA/IFNUQVRFX0NIQVJTRVRcbiAgICAgICAgICA6IFNUQVRFX1ZBTFVFXG4gICAgICAgIHJlc1twXSA9IFt0bXAsIHVuZGVmaW5lZF1cbiAgICAgICAgdG1wID0gJydcbiAgICAgICAgY29udGludWVcbiAgICAgIH0gZWxzZSBpZiAoIWlucXVvdGUgJiYgY2hhciA9PT0gJzsnKSB7XG4gICAgICAgIHN0YXRlID0gU1RBVEVfS0VZXG4gICAgICAgIGlmIChjaGFyc2V0KSB7XG4gICAgICAgICAgaWYgKHRtcC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRtcCA9IGRlY29kZVRleHQodG1wLnJlcGxhY2UoUkVfRU5DT0RFRCwgZW5jb2RlZFJlcGxhY2VyKSxcbiAgICAgICAgICAgICAgJ2JpbmFyeScsXG4gICAgICAgICAgICAgIGNoYXJzZXQpXG4gICAgICAgICAgfVxuICAgICAgICAgIGNoYXJzZXQgPSAnJ1xuICAgICAgICB9IGVsc2UgaWYgKHRtcC5sZW5ndGgpIHtcbiAgICAgICAgICB0bXAgPSBkZWNvZGVUZXh0KHRtcCwgJ2JpbmFyeScsICd1dGY4JylcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzW3BdID09PSB1bmRlZmluZWQpIHsgcmVzW3BdID0gdG1wIH0gZWxzZSB7IHJlc1twXVsxXSA9IHRtcCB9XG4gICAgICAgIHRtcCA9ICcnXG4gICAgICAgICsrcFxuICAgICAgICBjb250aW51ZVxuICAgICAgfSBlbHNlIGlmICghaW5xdW90ZSAmJiAoY2hhciA9PT0gJyAnIHx8IGNoYXIgPT09ICdcXHQnKSkgeyBjb250aW51ZSB9XG4gICAgfVxuICAgIHRtcCArPSBjaGFyXG4gIH1cbiAgaWYgKGNoYXJzZXQgJiYgdG1wLmxlbmd0aCkge1xuICAgIHRtcCA9IGRlY29kZVRleHQodG1wLnJlcGxhY2UoUkVfRU5DT0RFRCwgZW5jb2RlZFJlcGxhY2VyKSxcbiAgICAgICdiaW5hcnknLFxuICAgICAgY2hhcnNldClcbiAgfSBlbHNlIGlmICh0bXApIHtcbiAgICB0bXAgPSBkZWNvZGVUZXh0KHRtcCwgJ2JpbmFyeScsICd1dGY4JylcbiAgfVxuXG4gIGlmIChyZXNbcF0gPT09IHVuZGVmaW5lZCkge1xuICAgIGlmICh0bXApIHsgcmVzW3BdID0gdG1wIH1cbiAgfSBlbHNlIHsgcmVzW3BdWzFdID0gdG1wIH1cblxuICByZXR1cm4gcmVzXG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyc2VQYXJhbXNcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYmFzZW5hbWUgKHBhdGgpIHtcbiAgaWYgKHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJykgeyByZXR1cm4gJycgfVxuICBmb3IgKHZhciBpID0gcGF0aC5sZW5ndGggLSAxOyBpID49IDA7IC0taSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXZhclxuICAgIHN3aXRjaCAocGF0aC5jaGFyQ29kZUF0KGkpKSB7XG4gICAgICBjYXNlIDB4MkY6IC8vICcvJ1xuICAgICAgY2FzZSAweDVDOiAvLyAnXFwnXG4gICAgICAgIHBhdGggPSBwYXRoLnNsaWNlKGkgKyAxKVxuICAgICAgICByZXR1cm4gKHBhdGggPT09ICcuLicgfHwgcGF0aCA9PT0gJy4nID8gJycgOiBwYXRoKVxuICAgIH1cbiAgfVxuICByZXR1cm4gKHBhdGggPT09ICcuLicgfHwgcGF0aCA9PT0gJy4nID8gJycgOiBwYXRoKVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuLy8gVE9ETzpcbi8vICAqIHN1cHBvcnQgMSBuZXN0ZWQgbXVsdGlwYXJ0IGxldmVsXG4vLyAgICAoc2VlIHNlY29uZCBtdWx0aXBhcnQgZXhhbXBsZSBoZXJlOlxuLy8gICAgIGh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0MDEvaW50ZXJhY3QvZm9ybXMuaHRtbCNkaWR4LW11bHRpcGFydGZvcm0tZGF0YSlcbi8vICAqIHN1cHBvcnQgbGltaXRzLmZpZWxkTmFtZVNpemVcbi8vICAgICAtLSB0aGlzIHdpbGwgcmVxdWlyZSBtb2RpZmljYXRpb25zIHRvIHV0aWxzLnBhcnNlUGFyYW1zXG5cbmNvbnN0IHsgUmVhZGFibGUgfSA9IHJlcXVpcmUoJ25vZGU6c3RyZWFtJylcbmNvbnN0IHsgaW5oZXJpdHMgfSA9IHJlcXVpcmUoJ25vZGU6dXRpbCcpXG5cbmNvbnN0IERpY2VyID0gcmVxdWlyZSgnLi4vLi4vZGVwcy9kaWNlci9saWIvRGljZXInKVxuXG5jb25zdCBwYXJzZVBhcmFtcyA9IHJlcXVpcmUoJy4uL3V0aWxzL3BhcnNlUGFyYW1zJylcbmNvbnN0IGRlY29kZVRleHQgPSByZXF1aXJlKCcuLi91dGlscy9kZWNvZGVUZXh0JylcbmNvbnN0IGJhc2VuYW1lID0gcmVxdWlyZSgnLi4vdXRpbHMvYmFzZW5hbWUnKVxuY29uc3QgZ2V0TGltaXQgPSByZXF1aXJlKCcuLi91dGlscy9nZXRMaW1pdCcpXG5cbmNvbnN0IFJFX0JPVU5EQVJZID0gL15ib3VuZGFyeSQvaVxuY29uc3QgUkVfRklFTEQgPSAvXmZvcm0tZGF0YSQvaVxuY29uc3QgUkVfQ0hBUlNFVCA9IC9eY2hhcnNldCQvaVxuY29uc3QgUkVfRklMRU5BTUUgPSAvXmZpbGVuYW1lJC9pXG5jb25zdCBSRV9OQU1FID0gL15uYW1lJC9pXG5cbk11bHRpcGFydC5kZXRlY3QgPSAvXm11bHRpcGFydFxcL2Zvcm0tZGF0YS9pXG5mdW5jdGlvbiBNdWx0aXBhcnQgKGJveSwgY2ZnKSB7XG4gIGxldCBpXG4gIGxldCBsZW5cbiAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgbGV0IGJvdW5kYXJ5XG4gIGNvbnN0IGxpbWl0cyA9IGNmZy5saW1pdHNcbiAgY29uc3QgaXNQYXJ0QUZpbGUgPSBjZmcuaXNQYXJ0QUZpbGUgfHwgKChmaWVsZE5hbWUsIGNvbnRlbnRUeXBlLCBmaWxlTmFtZSkgPT4gKGNvbnRlbnRUeXBlID09PSAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJyB8fCBmaWxlTmFtZSAhPT0gdW5kZWZpbmVkKSlcbiAgY29uc3QgcGFyc2VkQ29uVHlwZSA9IGNmZy5wYXJzZWRDb25UeXBlIHx8IFtdXG4gIGNvbnN0IGRlZkNoYXJzZXQgPSBjZmcuZGVmQ2hhcnNldCB8fCAndXRmOCdcbiAgY29uc3QgcHJlc2VydmVQYXRoID0gY2ZnLnByZXNlcnZlUGF0aFxuICBjb25zdCBmaWxlT3B0cyA9IHsgaGlnaFdhdGVyTWFyazogY2ZnLmZpbGVId20gfVxuXG4gIGZvciAoaSA9IDAsIGxlbiA9IHBhcnNlZENvblR5cGUubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJzZWRDb25UeXBlW2ldKSAmJlxuICAgICAgUkVfQk9VTkRBUlkudGVzdChwYXJzZWRDb25UeXBlW2ldWzBdKSkge1xuICAgICAgYm91bmRhcnkgPSBwYXJzZWRDb25UeXBlW2ldWzFdXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNoZWNrRmluaXNoZWQgKCkge1xuICAgIGlmIChuZW5kcyA9PT0gMCAmJiBmaW5pc2hlZCAmJiAhYm95Ll9kb25lKSB7XG4gICAgICBmaW5pc2hlZCA9IGZhbHNlXG4gICAgICBzZWxmLmVuZCgpXG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiBib3VuZGFyeSAhPT0gJ3N0cmluZycpIHsgdGhyb3cgbmV3IEVycm9yKCdNdWx0aXBhcnQ6IEJvdW5kYXJ5IG5vdCBmb3VuZCcpIH1cblxuICBjb25zdCBmaWVsZFNpemVMaW1pdCA9IGdldExpbWl0KGxpbWl0cywgJ2ZpZWxkU2l6ZScsIDEgKiAxMDI0ICogMTAyNClcbiAgY29uc3QgZmlsZVNpemVMaW1pdCA9IGdldExpbWl0KGxpbWl0cywgJ2ZpbGVTaXplJywgSW5maW5pdHkpXG4gIGNvbnN0IGZpbGVzTGltaXQgPSBnZXRMaW1pdChsaW1pdHMsICdmaWxlcycsIEluZmluaXR5KVxuICBjb25zdCBmaWVsZHNMaW1pdCA9IGdldExpbWl0KGxpbWl0cywgJ2ZpZWxkcycsIEluZmluaXR5KVxuICBjb25zdCBwYXJ0c0xpbWl0ID0gZ2V0TGltaXQobGltaXRzLCAncGFydHMnLCBJbmZpbml0eSlcbiAgY29uc3QgaGVhZGVyUGFpcnNMaW1pdCA9IGdldExpbWl0KGxpbWl0cywgJ2hlYWRlclBhaXJzJywgMjAwMClcbiAgY29uc3QgaGVhZGVyU2l6ZUxpbWl0ID0gZ2V0TGltaXQobGltaXRzLCAnaGVhZGVyU2l6ZScsIDgwICogMTAyNClcblxuICBsZXQgbmZpbGVzID0gMFxuICBsZXQgbmZpZWxkcyA9IDBcbiAgbGV0IG5lbmRzID0gMFxuICBsZXQgY3VyRmlsZVxuICBsZXQgY3VyRmllbGRcbiAgbGV0IGZpbmlzaGVkID0gZmFsc2VcblxuICB0aGlzLl9uZWVkRHJhaW4gPSBmYWxzZVxuICB0aGlzLl9wYXVzZSA9IGZhbHNlXG4gIHRoaXMuX2NiID0gdW5kZWZpbmVkXG4gIHRoaXMuX25wYXJ0cyA9IDBcbiAgdGhpcy5fYm95ID0gYm95XG5cbiAgY29uc3QgcGFyc2VyQ2ZnID0ge1xuICAgIGJvdW5kYXJ5LFxuICAgIG1heEhlYWRlclBhaXJzOiBoZWFkZXJQYWlyc0xpbWl0LFxuICAgIG1heEhlYWRlclNpemU6IGhlYWRlclNpemVMaW1pdCxcbiAgICBwYXJ0SHdtOiBmaWxlT3B0cy5oaWdoV2F0ZXJNYXJrLFxuICAgIGhpZ2hXYXRlck1hcms6IGNmZy5oaWdoV2F0ZXJNYXJrXG4gIH1cblxuICB0aGlzLnBhcnNlciA9IG5ldyBEaWNlcihwYXJzZXJDZmcpXG4gIHRoaXMucGFyc2VyLm9uKCdkcmFpbicsIGZ1bmN0aW9uICgpIHtcbiAgICBzZWxmLl9uZWVkRHJhaW4gPSBmYWxzZVxuICAgIGlmIChzZWxmLl9jYiAmJiAhc2VsZi5fcGF1c2UpIHtcbiAgICAgIGNvbnN0IGNiID0gc2VsZi5fY2JcbiAgICAgIHNlbGYuX2NiID0gdW5kZWZpbmVkXG4gICAgICBjYigpXG4gICAgfVxuICB9KS5vbigncGFydCcsIGZ1bmN0aW9uIG9uUGFydCAocGFydCkge1xuICAgIGlmICgrK3NlbGYuX25wYXJ0cyA+IHBhcnRzTGltaXQpIHtcbiAgICAgIHNlbGYucGFyc2VyLnJlbW92ZUxpc3RlbmVyKCdwYXJ0Jywgb25QYXJ0KVxuICAgICAgc2VsZi5wYXJzZXIub24oJ3BhcnQnLCBza2lwUGFydClcbiAgICAgIGJveS5oaXRQYXJ0c0xpbWl0ID0gdHJ1ZVxuICAgICAgYm95LmVtaXQoJ3BhcnRzTGltaXQnKVxuICAgICAgcmV0dXJuIHNraXBQYXJ0KHBhcnQpXG4gICAgfVxuXG4gICAgLy8gaGFjayBiZWNhdXNlIHN0cmVhbXMyIF9hbHdheXNfIGRvZXNuJ3QgZW1pdCAnZW5kJyB1bnRpbCBuZXh0VGljaywgc28gbGV0XG4gICAgLy8gdXMgZW1pdCAnZW5kJyBlYXJseSBzaW5jZSB3ZSBrbm93IHRoZSBwYXJ0IGhhcyBlbmRlZCBpZiB3ZSBhcmUgYWxyZWFkeVxuICAgIC8vIHNlZWluZyB0aGUgbmV4dCBwYXJ0XG4gICAgaWYgKGN1ckZpZWxkKSB7XG4gICAgICBjb25zdCBmaWVsZCA9IGN1ckZpZWxkXG4gICAgICBmaWVsZC5lbWl0KCdlbmQnKVxuICAgICAgZmllbGQucmVtb3ZlQWxsTGlzdGVuZXJzKCdlbmQnKVxuICAgIH1cblxuICAgIHBhcnQub24oJ2hlYWRlcicsIGZ1bmN0aW9uIChoZWFkZXIpIHtcbiAgICAgIGxldCBjb250eXBlXG4gICAgICBsZXQgZmllbGRuYW1lXG4gICAgICBsZXQgcGFyc2VkXG4gICAgICBsZXQgY2hhcnNldFxuICAgICAgbGV0IGVuY29kaW5nXG4gICAgICBsZXQgZmlsZW5hbWVcbiAgICAgIGxldCBuc2l6ZSA9IDBcblxuICAgICAgaWYgKGhlYWRlclsnY29udGVudC10eXBlJ10pIHtcbiAgICAgICAgcGFyc2VkID0gcGFyc2VQYXJhbXMoaGVhZGVyWydjb250ZW50LXR5cGUnXVswXSlcbiAgICAgICAgaWYgKHBhcnNlZFswXSkge1xuICAgICAgICAgIGNvbnR5cGUgPSBwYXJzZWRbMF0udG9Mb3dlckNhc2UoKVxuICAgICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IHBhcnNlZC5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgICAgICAgICAgaWYgKFJFX0NIQVJTRVQudGVzdChwYXJzZWRbaV1bMF0pKSB7XG4gICAgICAgICAgICAgIGNoYXJzZXQgPSBwYXJzZWRbaV1bMV0udG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoY29udHlwZSA9PT0gdW5kZWZpbmVkKSB7IGNvbnR5cGUgPSAndGV4dC9wbGFpbicgfVxuICAgICAgaWYgKGNoYXJzZXQgPT09IHVuZGVmaW5lZCkgeyBjaGFyc2V0ID0gZGVmQ2hhcnNldCB9XG5cbiAgICAgIGlmIChoZWFkZXJbJ2NvbnRlbnQtZGlzcG9zaXRpb24nXSkge1xuICAgICAgICBwYXJzZWQgPSBwYXJzZVBhcmFtcyhoZWFkZXJbJ2NvbnRlbnQtZGlzcG9zaXRpb24nXVswXSlcbiAgICAgICAgaWYgKCFSRV9GSUVMRC50ZXN0KHBhcnNlZFswXSkpIHsgcmV0dXJuIHNraXBQYXJ0KHBhcnQpIH1cbiAgICAgICAgZm9yIChpID0gMCwgbGVuID0gcGFyc2VkLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICAgICAgaWYgKFJFX05BTUUudGVzdChwYXJzZWRbaV1bMF0pKSB7XG4gICAgICAgICAgICBmaWVsZG5hbWUgPSBwYXJzZWRbaV1bMV1cbiAgICAgICAgICB9IGVsc2UgaWYgKFJFX0ZJTEVOQU1FLnRlc3QocGFyc2VkW2ldWzBdKSkge1xuICAgICAgICAgICAgZmlsZW5hbWUgPSBwYXJzZWRbaV1bMV1cbiAgICAgICAgICAgIGlmICghcHJlc2VydmVQYXRoKSB7IGZpbGVuYW1lID0gYmFzZW5hbWUoZmlsZW5hbWUpIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7IHJldHVybiBza2lwUGFydChwYXJ0KSB9XG5cbiAgICAgIGlmIChoZWFkZXJbJ2NvbnRlbnQtdHJhbnNmZXItZW5jb2RpbmcnXSkgeyBlbmNvZGluZyA9IGhlYWRlclsnY29udGVudC10cmFuc2Zlci1lbmNvZGluZyddWzBdLnRvTG93ZXJDYXNlKCkgfSBlbHNlIHsgZW5jb2RpbmcgPSAnN2JpdCcgfVxuXG4gICAgICBsZXQgb25EYXRhLFxuICAgICAgICBvbkVuZFxuXG4gICAgICBpZiAoaXNQYXJ0QUZpbGUoZmllbGRuYW1lLCBjb250eXBlLCBmaWxlbmFtZSkpIHtcbiAgICAgICAgLy8gZmlsZS9iaW5hcnkgZmllbGRcbiAgICAgICAgaWYgKG5maWxlcyA9PT0gZmlsZXNMaW1pdCkge1xuICAgICAgICAgIGlmICghYm95LmhpdEZpbGVzTGltaXQpIHtcbiAgICAgICAgICAgIGJveS5oaXRGaWxlc0xpbWl0ID0gdHJ1ZVxuICAgICAgICAgICAgYm95LmVtaXQoJ2ZpbGVzTGltaXQnKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gc2tpcFBhcnQocGFydClcbiAgICAgICAgfVxuXG4gICAgICAgICsrbmZpbGVzXG5cbiAgICAgICAgaWYgKGJveS5saXN0ZW5lckNvdW50KCdmaWxlJykgPT09IDApIHtcbiAgICAgICAgICBzZWxmLnBhcnNlci5faWdub3JlKClcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgICsrbmVuZHNcbiAgICAgICAgY29uc3QgZmlsZSA9IG5ldyBGaWxlU3RyZWFtKGZpbGVPcHRzKVxuICAgICAgICBjdXJGaWxlID0gZmlsZVxuICAgICAgICBmaWxlLm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLS1uZW5kc1xuICAgICAgICAgIHNlbGYuX3BhdXNlID0gZmFsc2VcbiAgICAgICAgICBjaGVja0ZpbmlzaGVkKClcbiAgICAgICAgICBpZiAoc2VsZi5fY2IgJiYgIXNlbGYuX25lZWREcmFpbikge1xuICAgICAgICAgICAgY29uc3QgY2IgPSBzZWxmLl9jYlxuICAgICAgICAgICAgc2VsZi5fY2IgPSB1bmRlZmluZWRcbiAgICAgICAgICAgIGNiKClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIGZpbGUuX3JlYWQgPSBmdW5jdGlvbiAobikge1xuICAgICAgICAgIGlmICghc2VsZi5fcGF1c2UpIHsgcmV0dXJuIH1cbiAgICAgICAgICBzZWxmLl9wYXVzZSA9IGZhbHNlXG4gICAgICAgICAgaWYgKHNlbGYuX2NiICYmICFzZWxmLl9uZWVkRHJhaW4pIHtcbiAgICAgICAgICAgIGNvbnN0IGNiID0gc2VsZi5fY2JcbiAgICAgICAgICAgIHNlbGYuX2NiID0gdW5kZWZpbmVkXG4gICAgICAgICAgICBjYigpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJveS5lbWl0KCdmaWxlJywgZmllbGRuYW1lLCBmaWxlLCBmaWxlbmFtZSwgZW5jb2RpbmcsIGNvbnR5cGUpXG5cbiAgICAgICAgb25EYXRhID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICBpZiAoKG5zaXplICs9IGRhdGEubGVuZ3RoKSA+IGZpbGVTaXplTGltaXQpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4dHJhbGVuID0gZmlsZVNpemVMaW1pdCAtIG5zaXplICsgZGF0YS5sZW5ndGhcbiAgICAgICAgICAgIGlmIChleHRyYWxlbiA+IDApIHsgZmlsZS5wdXNoKGRhdGEuc2xpY2UoMCwgZXh0cmFsZW4pKSB9XG4gICAgICAgICAgICBmaWxlLnRydW5jYXRlZCA9IHRydWVcbiAgICAgICAgICAgIGZpbGUuYnl0ZXNSZWFkID0gZmlsZVNpemVMaW1pdFxuICAgICAgICAgICAgcGFydC5yZW1vdmVBbGxMaXN0ZW5lcnMoJ2RhdGEnKVxuICAgICAgICAgICAgZmlsZS5lbWl0KCdsaW1pdCcpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9IGVsc2UgaWYgKCFmaWxlLnB1c2goZGF0YSkpIHsgc2VsZi5fcGF1c2UgPSB0cnVlIH1cblxuICAgICAgICAgIGZpbGUuYnl0ZXNSZWFkID0gbnNpemVcbiAgICAgICAgfVxuXG4gICAgICAgIG9uRW5kID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGN1ckZpbGUgPSB1bmRlZmluZWRcbiAgICAgICAgICBmaWxlLnB1c2gobnVsbClcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gbm9uLWZpbGUgZmllbGRcbiAgICAgICAgaWYgKG5maWVsZHMgPT09IGZpZWxkc0xpbWl0KSB7XG4gICAgICAgICAgaWYgKCFib3kuaGl0RmllbGRzTGltaXQpIHtcbiAgICAgICAgICAgIGJveS5oaXRGaWVsZHNMaW1pdCA9IHRydWVcbiAgICAgICAgICAgIGJveS5lbWl0KCdmaWVsZHNMaW1pdCcpXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBza2lwUGFydChwYXJ0KVxuICAgICAgICB9XG5cbiAgICAgICAgKytuZmllbGRzXG4gICAgICAgICsrbmVuZHNcbiAgICAgICAgbGV0IGJ1ZmZlciA9ICcnXG4gICAgICAgIGxldCB0cnVuY2F0ZWQgPSBmYWxzZVxuICAgICAgICBjdXJGaWVsZCA9IHBhcnRcblxuICAgICAgICBvbkRhdGEgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgIGlmICgobnNpemUgKz0gZGF0YS5sZW5ndGgpID4gZmllbGRTaXplTGltaXQpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4dHJhbGVuID0gKGZpZWxkU2l6ZUxpbWl0IC0gKG5zaXplIC0gZGF0YS5sZW5ndGgpKVxuICAgICAgICAgICAgYnVmZmVyICs9IGRhdGEudG9TdHJpbmcoJ2JpbmFyeScsIDAsIGV4dHJhbGVuKVxuICAgICAgICAgICAgdHJ1bmNhdGVkID0gdHJ1ZVxuICAgICAgICAgICAgcGFydC5yZW1vdmVBbGxMaXN0ZW5lcnMoJ2RhdGEnKVxuICAgICAgICAgIH0gZWxzZSB7IGJ1ZmZlciArPSBkYXRhLnRvU3RyaW5nKCdiaW5hcnknKSB9XG4gICAgICAgIH1cblxuICAgICAgICBvbkVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjdXJGaWVsZCA9IHVuZGVmaW5lZFxuICAgICAgICAgIGlmIChidWZmZXIubGVuZ3RoKSB7IGJ1ZmZlciA9IGRlY29kZVRleHQoYnVmZmVyLCAnYmluYXJ5JywgY2hhcnNldCkgfVxuICAgICAgICAgIGJveS5lbWl0KCdmaWVsZCcsIGZpZWxkbmFtZSwgYnVmZmVyLCBmYWxzZSwgdHJ1bmNhdGVkLCBlbmNvZGluZywgY29udHlwZSlcbiAgICAgICAgICAtLW5lbmRzXG4gICAgICAgICAgY2hlY2tGaW5pc2hlZCgpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLyogQXMgb2Ygbm9kZUAyZWZlNGFiNzYxNjY2ICh2MC4xMC4yOSsvdjAuMTEuMTQrKSwgYnVzYm95IGhhZCBiZWNvbWVcbiAgICAgICAgIGJyb2tlbi4gU3RyZWFtczIvc3RyZWFtczMgaXMgYSBodWdlIGJsYWNrIGJveCBvZiBjb25mdXNpb24sIGJ1dFxuICAgICAgICAgc29tZWhvdyBvdmVycmlkaW5nIHRoZSBzeW5jIHN0YXRlIHNlZW1zIHRvIGZpeCB0aGluZ3MgYWdhaW4gKGFuZCBzdGlsbFxuICAgICAgICAgc2VlbXMgdG8gd29yayBmb3IgcHJldmlvdXMgbm9kZSB2ZXJzaW9ucykuXG4gICAgICAqL1xuICAgICAgcGFydC5fcmVhZGFibGVTdGF0ZS5zeW5jID0gZmFsc2VcblxuICAgICAgcGFydC5vbignZGF0YScsIG9uRGF0YSlcbiAgICAgIHBhcnQub24oJ2VuZCcsIG9uRW5kKVxuICAgIH0pLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgIGlmIChjdXJGaWxlKSB7IGN1ckZpbGUuZW1pdCgnZXJyb3InLCBlcnIpIH1cbiAgICB9KVxuICB9KS5vbignZXJyb3InLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgYm95LmVtaXQoJ2Vycm9yJywgZXJyKVxuICB9KS5vbignZmluaXNoJywgZnVuY3Rpb24gKCkge1xuICAgIGZpbmlzaGVkID0gdHJ1ZVxuICAgIGNoZWNrRmluaXNoZWQoKVxuICB9KVxufVxuXG5NdWx0aXBhcnQucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKGNodW5rLCBjYikge1xuICBjb25zdCByID0gdGhpcy5wYXJzZXIud3JpdGUoY2h1bmspXG4gIGlmIChyICYmICF0aGlzLl9wYXVzZSkge1xuICAgIGNiKClcbiAgfSBlbHNlIHtcbiAgICB0aGlzLl9uZWVkRHJhaW4gPSAhclxuICAgIHRoaXMuX2NiID0gY2JcbiAgfVxufVxuXG5NdWx0aXBhcnQucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgY29uc3Qgc2VsZiA9IHRoaXNcblxuICBpZiAoc2VsZi5wYXJzZXIud3JpdGFibGUpIHtcbiAgICBzZWxmLnBhcnNlci5lbmQoKVxuICB9IGVsc2UgaWYgKCFzZWxmLl9ib3kuX2RvbmUpIHtcbiAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlbGYuX2JveS5fZG9uZSA9IHRydWVcbiAgICAgIHNlbGYuX2JveS5lbWl0KCdmaW5pc2gnKVxuICAgIH0pXG4gIH1cbn1cblxuZnVuY3Rpb24gc2tpcFBhcnQgKHBhcnQpIHtcbiAgcGFydC5yZXN1bWUoKVxufVxuXG5mdW5jdGlvbiBGaWxlU3RyZWFtIChvcHRzKSB7XG4gIFJlYWRhYmxlLmNhbGwodGhpcywgb3B0cylcblxuICB0aGlzLmJ5dGVzUmVhZCA9IDBcblxuICB0aGlzLnRydW5jYXRlZCA9IGZhbHNlXG59XG5cbmluaGVyaXRzKEZpbGVTdHJlYW0sIFJlYWRhYmxlKVxuXG5GaWxlU3RyZWFtLnByb3RvdHlwZS5fcmVhZCA9IGZ1bmN0aW9uIChuKSB7fVxuXG5tb2R1bGUuZXhwb3J0cyA9IE11bHRpcGFydFxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgUkVfUExVUyA9IC9cXCsvZ1xuXG5jb25zdCBIRVggPSBbXG4gIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsXG4gIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsXG4gIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsXG4gIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsXG4gIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsXG4gIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsXG4gIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsXG4gIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBcbl1cblxuZnVuY3Rpb24gRGVjb2RlciAoKSB7XG4gIHRoaXMuYnVmZmVyID0gdW5kZWZpbmVkXG59XG5EZWNvZGVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgLy8gUmVwbGFjZSAnKycgd2l0aCAnICcgYmVmb3JlIGRlY29kaW5nXG4gIHN0ciA9IHN0ci5yZXBsYWNlKFJFX1BMVVMsICcgJylcbiAgbGV0IHJlcyA9ICcnXG4gIGxldCBpID0gMDsgbGV0IHAgPSAwOyBjb25zdCBsZW4gPSBzdHIubGVuZ3RoXG4gIGZvciAoOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAodGhpcy5idWZmZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCFIRVhbc3RyLmNoYXJDb2RlQXQoaSldKSB7XG4gICAgICAgIHJlcyArPSAnJScgKyB0aGlzLmJ1ZmZlclxuICAgICAgICB0aGlzLmJ1ZmZlciA9IHVuZGVmaW5lZFxuICAgICAgICAtLWkgLy8gcmV0cnkgY2hhcmFjdGVyXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmJ1ZmZlciArPSBzdHJbaV1cbiAgICAgICAgKytwXG4gICAgICAgIGlmICh0aGlzLmJ1ZmZlci5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludCh0aGlzLmJ1ZmZlciwgMTYpKVxuICAgICAgICAgIHRoaXMuYnVmZmVyID0gdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHN0cltpXSA9PT0gJyUnKSB7XG4gICAgICBpZiAoaSA+IHApIHtcbiAgICAgICAgcmVzICs9IHN0ci5zdWJzdHJpbmcocCwgaSlcbiAgICAgICAgcCA9IGlcbiAgICAgIH1cbiAgICAgIHRoaXMuYnVmZmVyID0gJydcbiAgICAgICsrcFxuICAgIH1cbiAgfVxuICBpZiAocCA8IGxlbiAmJiB0aGlzLmJ1ZmZlciA9PT0gdW5kZWZpbmVkKSB7IHJlcyArPSBzdHIuc3Vic3RyaW5nKHApIH1cbiAgcmV0dXJuIHJlc1xufVxuRGVjb2Rlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuYnVmZmVyID0gdW5kZWZpbmVkXG59XG5cbm1vZHVsZS5leHBvcnRzID0gRGVjb2RlclxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgRGVjb2RlciA9IHJlcXVpcmUoJy4uL3V0aWxzL0RlY29kZXInKVxuY29uc3QgZGVjb2RlVGV4dCA9IHJlcXVpcmUoJy4uL3V0aWxzL2RlY29kZVRleHQnKVxuY29uc3QgZ2V0TGltaXQgPSByZXF1aXJlKCcuLi91dGlscy9nZXRMaW1pdCcpXG5cbmNvbnN0IFJFX0NIQVJTRVQgPSAvXmNoYXJzZXQkL2lcblxuVXJsRW5jb2RlZC5kZXRlY3QgPSAvXmFwcGxpY2F0aW9uXFwveC13d3ctZm9ybS11cmxlbmNvZGVkL2lcbmZ1bmN0aW9uIFVybEVuY29kZWQgKGJveSwgY2ZnKSB7XG4gIGNvbnN0IGxpbWl0cyA9IGNmZy5saW1pdHNcbiAgY29uc3QgcGFyc2VkQ29uVHlwZSA9IGNmZy5wYXJzZWRDb25UeXBlXG4gIHRoaXMuYm95ID0gYm95XG5cbiAgdGhpcy5maWVsZFNpemVMaW1pdCA9IGdldExpbWl0KGxpbWl0cywgJ2ZpZWxkU2l6ZScsIDEgKiAxMDI0ICogMTAyNClcbiAgdGhpcy5maWVsZE5hbWVTaXplTGltaXQgPSBnZXRMaW1pdChsaW1pdHMsICdmaWVsZE5hbWVTaXplJywgMTAwKVxuICB0aGlzLmZpZWxkc0xpbWl0ID0gZ2V0TGltaXQobGltaXRzLCAnZmllbGRzJywgSW5maW5pdHkpXG5cbiAgbGV0IGNoYXJzZXRcbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHBhcnNlZENvblR5cGUubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby12YXJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJzZWRDb25UeXBlW2ldKSAmJlxuICAgICAgICBSRV9DSEFSU0VULnRlc3QocGFyc2VkQ29uVHlwZVtpXVswXSkpIHtcbiAgICAgIGNoYXJzZXQgPSBwYXJzZWRDb25UeXBlW2ldWzFdLnRvTG93ZXJDYXNlKClcbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaWYgKGNoYXJzZXQgPT09IHVuZGVmaW5lZCkgeyBjaGFyc2V0ID0gY2ZnLmRlZkNoYXJzZXQgfHwgJ3V0ZjgnIH1cblxuICB0aGlzLmRlY29kZXIgPSBuZXcgRGVjb2RlcigpXG4gIHRoaXMuY2hhcnNldCA9IGNoYXJzZXRcbiAgdGhpcy5fZmllbGRzID0gMFxuICB0aGlzLl9zdGF0ZSA9ICdrZXknXG4gIHRoaXMuX2NoZWNraW5nQnl0ZXMgPSB0cnVlXG4gIHRoaXMuX2J5dGVzS2V5ID0gMFxuICB0aGlzLl9ieXRlc1ZhbCA9IDBcbiAgdGhpcy5fa2V5ID0gJydcbiAgdGhpcy5fdmFsID0gJydcbiAgdGhpcy5fa2V5VHJ1bmMgPSBmYWxzZVxuICB0aGlzLl92YWxUcnVuYyA9IGZhbHNlXG4gIHRoaXMuX2hpdExpbWl0ID0gZmFsc2Vcbn1cblxuVXJsRW5jb2RlZC5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiAoZGF0YSwgY2IpIHtcbiAgaWYgKHRoaXMuX2ZpZWxkcyA9PT0gdGhpcy5maWVsZHNMaW1pdCkge1xuICAgIGlmICghdGhpcy5ib3kuaGl0RmllbGRzTGltaXQpIHtcbiAgICAgIHRoaXMuYm95LmhpdEZpZWxkc0xpbWl0ID0gdHJ1ZVxuICAgICAgdGhpcy5ib3kuZW1pdCgnZmllbGRzTGltaXQnKVxuICAgIH1cbiAgICByZXR1cm4gY2IoKVxuICB9XG5cbiAgbGV0IGlkeGVxOyBsZXQgaWR4YW1wOyBsZXQgaTsgbGV0IHAgPSAwOyBjb25zdCBsZW4gPSBkYXRhLmxlbmd0aFxuXG4gIHdoaWxlIChwIDwgbGVuKSB7XG4gICAgaWYgKHRoaXMuX3N0YXRlID09PSAna2V5Jykge1xuICAgICAgaWR4ZXEgPSBpZHhhbXAgPSB1bmRlZmluZWRcbiAgICAgIGZvciAoaSA9IHA7IGkgPCBsZW47ICsraSkge1xuICAgICAgICBpZiAoIXRoaXMuX2NoZWNraW5nQnl0ZXMpIHsgKytwIH1cbiAgICAgICAgaWYgKGRhdGFbaV0gPT09IDB4M0QvKiA9ICovKSB7XG4gICAgICAgICAgaWR4ZXEgPSBpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhW2ldID09PSAweDI2LyogJiAqLykge1xuICAgICAgICAgIGlkeGFtcCA9IGlcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9jaGVja2luZ0J5dGVzICYmIHRoaXMuX2J5dGVzS2V5ID09PSB0aGlzLmZpZWxkTmFtZVNpemVMaW1pdCkge1xuICAgICAgICAgIHRoaXMuX2hpdExpbWl0ID0gdHJ1ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fY2hlY2tpbmdCeXRlcykgeyArK3RoaXMuX2J5dGVzS2V5IH1cbiAgICAgIH1cblxuICAgICAgaWYgKGlkeGVxICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8ga2V5IHdpdGggYXNzaWdubWVudFxuICAgICAgICBpZiAoaWR4ZXEgPiBwKSB7IHRoaXMuX2tleSArPSB0aGlzLmRlY29kZXIud3JpdGUoZGF0YS50b1N0cmluZygnYmluYXJ5JywgcCwgaWR4ZXEpKSB9XG4gICAgICAgIHRoaXMuX3N0YXRlID0gJ3ZhbCdcblxuICAgICAgICB0aGlzLl9oaXRMaW1pdCA9IGZhbHNlXG4gICAgICAgIHRoaXMuX2NoZWNraW5nQnl0ZXMgPSB0cnVlXG4gICAgICAgIHRoaXMuX3ZhbCA9ICcnXG4gICAgICAgIHRoaXMuX2J5dGVzVmFsID0gMFxuICAgICAgICB0aGlzLl92YWxUcnVuYyA9IGZhbHNlXG4gICAgICAgIHRoaXMuZGVjb2Rlci5yZXNldCgpXG5cbiAgICAgICAgcCA9IGlkeGVxICsgMVxuICAgICAgfSBlbHNlIGlmIChpZHhhbXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBrZXkgd2l0aCBubyBhc3NpZ25tZW50XG4gICAgICAgICsrdGhpcy5fZmllbGRzXG4gICAgICAgIGxldCBrZXk7IGNvbnN0IGtleVRydW5jID0gdGhpcy5fa2V5VHJ1bmNcbiAgICAgICAgaWYgKGlkeGFtcCA+IHApIHsga2V5ID0gKHRoaXMuX2tleSArPSB0aGlzLmRlY29kZXIud3JpdGUoZGF0YS50b1N0cmluZygnYmluYXJ5JywgcCwgaWR4YW1wKSkpIH0gZWxzZSB7IGtleSA9IHRoaXMuX2tleSB9XG5cbiAgICAgICAgdGhpcy5faGl0TGltaXQgPSBmYWxzZVxuICAgICAgICB0aGlzLl9jaGVja2luZ0J5dGVzID0gdHJ1ZVxuICAgICAgICB0aGlzLl9rZXkgPSAnJ1xuICAgICAgICB0aGlzLl9ieXRlc0tleSA9IDBcbiAgICAgICAgdGhpcy5fa2V5VHJ1bmMgPSBmYWxzZVxuICAgICAgICB0aGlzLmRlY29kZXIucmVzZXQoKVxuXG4gICAgICAgIGlmIChrZXkubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5ib3kuZW1pdCgnZmllbGQnLCBkZWNvZGVUZXh0KGtleSwgJ2JpbmFyeScsIHRoaXMuY2hhcnNldCksXG4gICAgICAgICAgICAnJyxcbiAgICAgICAgICAgIGtleVRydW5jLFxuICAgICAgICAgICAgZmFsc2UpXG4gICAgICAgIH1cblxuICAgICAgICBwID0gaWR4YW1wICsgMVxuICAgICAgICBpZiAodGhpcy5fZmllbGRzID09PSB0aGlzLmZpZWxkc0xpbWl0KSB7IHJldHVybiBjYigpIH1cbiAgICAgIH0gZWxzZSBpZiAodGhpcy5faGl0TGltaXQpIHtcbiAgICAgICAgLy8gd2UgbWF5IG5vdCBoYXZlIGhpdCB0aGUgYWN0dWFsIGxpbWl0IGlmIHRoZXJlIGFyZSBlbmNvZGVkIGJ5dGVzLi4uXG4gICAgICAgIGlmIChpID4gcCkgeyB0aGlzLl9rZXkgKz0gdGhpcy5kZWNvZGVyLndyaXRlKGRhdGEudG9TdHJpbmcoJ2JpbmFyeScsIHAsIGkpKSB9XG4gICAgICAgIHAgPSBpXG4gICAgICAgIGlmICgodGhpcy5fYnl0ZXNLZXkgPSB0aGlzLl9rZXkubGVuZ3RoKSA9PT0gdGhpcy5maWVsZE5hbWVTaXplTGltaXQpIHtcbiAgICAgICAgICAvLyB5ZXAsIHdlIGFjdHVhbGx5IGRpZCBoaXQgdGhlIGxpbWl0XG4gICAgICAgICAgdGhpcy5fY2hlY2tpbmdCeXRlcyA9IGZhbHNlXG4gICAgICAgICAgdGhpcy5fa2V5VHJ1bmMgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChwIDwgbGVuKSB7IHRoaXMuX2tleSArPSB0aGlzLmRlY29kZXIud3JpdGUoZGF0YS50b1N0cmluZygnYmluYXJ5JywgcCkpIH1cbiAgICAgICAgcCA9IGxlblxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZHhhbXAgPSB1bmRlZmluZWRcbiAgICAgIGZvciAoaSA9IHA7IGkgPCBsZW47ICsraSkge1xuICAgICAgICBpZiAoIXRoaXMuX2NoZWNraW5nQnl0ZXMpIHsgKytwIH1cbiAgICAgICAgaWYgKGRhdGFbaV0gPT09IDB4MjYvKiAmICovKSB7XG4gICAgICAgICAgaWR4YW1wID0gaVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2NoZWNraW5nQnl0ZXMgJiYgdGhpcy5fYnl0ZXNWYWwgPT09IHRoaXMuZmllbGRTaXplTGltaXQpIHtcbiAgICAgICAgICB0aGlzLl9oaXRMaW1pdCA9IHRydWVcbiAgICAgICAgICBicmVha1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2NoZWNraW5nQnl0ZXMpIHsgKyt0aGlzLl9ieXRlc1ZhbCB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpZHhhbXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICArK3RoaXMuX2ZpZWxkc1xuICAgICAgICBpZiAoaWR4YW1wID4gcCkgeyB0aGlzLl92YWwgKz0gdGhpcy5kZWNvZGVyLndyaXRlKGRhdGEudG9TdHJpbmcoJ2JpbmFyeScsIHAsIGlkeGFtcCkpIH1cbiAgICAgICAgdGhpcy5ib3kuZW1pdCgnZmllbGQnLCBkZWNvZGVUZXh0KHRoaXMuX2tleSwgJ2JpbmFyeScsIHRoaXMuY2hhcnNldCksXG4gICAgICAgICAgZGVjb2RlVGV4dCh0aGlzLl92YWwsICdiaW5hcnknLCB0aGlzLmNoYXJzZXQpLFxuICAgICAgICAgIHRoaXMuX2tleVRydW5jLFxuICAgICAgICAgIHRoaXMuX3ZhbFRydW5jKVxuICAgICAgICB0aGlzLl9zdGF0ZSA9ICdrZXknXG5cbiAgICAgICAgdGhpcy5faGl0TGltaXQgPSBmYWxzZVxuICAgICAgICB0aGlzLl9jaGVja2luZ0J5dGVzID0gdHJ1ZVxuICAgICAgICB0aGlzLl9rZXkgPSAnJ1xuICAgICAgICB0aGlzLl9ieXRlc0tleSA9IDBcbiAgICAgICAgdGhpcy5fa2V5VHJ1bmMgPSBmYWxzZVxuICAgICAgICB0aGlzLmRlY29kZXIucmVzZXQoKVxuXG4gICAgICAgIHAgPSBpZHhhbXAgKyAxXG4gICAgICAgIGlmICh0aGlzLl9maWVsZHMgPT09IHRoaXMuZmllbGRzTGltaXQpIHsgcmV0dXJuIGNiKCkgfVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9oaXRMaW1pdCkge1xuICAgICAgICAvLyB3ZSBtYXkgbm90IGhhdmUgaGl0IHRoZSBhY3R1YWwgbGltaXQgaWYgdGhlcmUgYXJlIGVuY29kZWQgYnl0ZXMuLi5cbiAgICAgICAgaWYgKGkgPiBwKSB7IHRoaXMuX3ZhbCArPSB0aGlzLmRlY29kZXIud3JpdGUoZGF0YS50b1N0cmluZygnYmluYXJ5JywgcCwgaSkpIH1cbiAgICAgICAgcCA9IGlcbiAgICAgICAgaWYgKCh0aGlzLl92YWwgPT09ICcnICYmIHRoaXMuZmllbGRTaXplTGltaXQgPT09IDApIHx8XG4gICAgICAgICAgICAodGhpcy5fYnl0ZXNWYWwgPSB0aGlzLl92YWwubGVuZ3RoKSA9PT0gdGhpcy5maWVsZFNpemVMaW1pdCkge1xuICAgICAgICAgIC8vIHllcCwgd2UgYWN0dWFsbHkgZGlkIGhpdCB0aGUgbGltaXRcbiAgICAgICAgICB0aGlzLl9jaGVja2luZ0J5dGVzID0gZmFsc2VcbiAgICAgICAgICB0aGlzLl92YWxUcnVuYyA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHAgPCBsZW4pIHsgdGhpcy5fdmFsICs9IHRoaXMuZGVjb2Rlci53cml0ZShkYXRhLnRvU3RyaW5nKCdiaW5hcnknLCBwKSkgfVxuICAgICAgICBwID0gbGVuXG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNiKClcbn1cblxuVXJsRW5jb2RlZC5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5ib3kuX2RvbmUpIHsgcmV0dXJuIH1cblxuICBpZiAodGhpcy5fc3RhdGUgPT09ICdrZXknICYmIHRoaXMuX2tleS5sZW5ndGggPiAwKSB7XG4gICAgdGhpcy5ib3kuZW1pdCgnZmllbGQnLCBkZWNvZGVUZXh0KHRoaXMuX2tleSwgJ2JpbmFyeScsIHRoaXMuY2hhcnNldCksXG4gICAgICAnJyxcbiAgICAgIHRoaXMuX2tleVRydW5jLFxuICAgICAgZmFsc2UpXG4gIH0gZWxzZSBpZiAodGhpcy5fc3RhdGUgPT09ICd2YWwnKSB7XG4gICAgdGhpcy5ib3kuZW1pdCgnZmllbGQnLCBkZWNvZGVUZXh0KHRoaXMuX2tleSwgJ2JpbmFyeScsIHRoaXMuY2hhcnNldCksXG4gICAgICBkZWNvZGVUZXh0KHRoaXMuX3ZhbCwgJ2JpbmFyeScsIHRoaXMuY2hhcnNldCksXG4gICAgICB0aGlzLl9rZXlUcnVuYyxcbiAgICAgIHRoaXMuX3ZhbFRydW5jKVxuICB9XG4gIHRoaXMuYm95Ll9kb25lID0gdHJ1ZVxuICB0aGlzLmJveS5lbWl0KCdmaW5pc2gnKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFVybEVuY29kZWRcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFdyaXRhYmxlU3RyZWFtID0gcmVxdWlyZSgnbm9kZTpzdHJlYW0nKS5Xcml0YWJsZVxuY29uc3QgeyBpbmhlcml0cyB9ID0gcmVxdWlyZSgnbm9kZTp1dGlsJylcbmNvbnN0IERpY2VyID0gcmVxdWlyZSgnLi4vZGVwcy9kaWNlci9saWIvRGljZXInKVxuXG5jb25zdCBNdWx0aXBhcnRQYXJzZXIgPSByZXF1aXJlKCcuL3R5cGVzL211bHRpcGFydCcpXG5jb25zdCBVcmxlbmNvZGVkUGFyc2VyID0gcmVxdWlyZSgnLi90eXBlcy91cmxlbmNvZGVkJylcbmNvbnN0IHBhcnNlUGFyYW1zID0gcmVxdWlyZSgnLi91dGlscy9wYXJzZVBhcmFtcycpXG5cbmZ1bmN0aW9uIEJ1c2JveSAob3B0cykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQnVzYm95KSkgeyByZXR1cm4gbmV3IEJ1c2JveShvcHRzKSB9XG5cbiAgaWYgKHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0J1c2JveSBleHBlY3RlZCBhbiBvcHRpb25zLU9iamVjdC4nKVxuICB9XG4gIGlmICh0eXBlb2Ygb3B0cy5oZWFkZXJzICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0J1c2JveSBleHBlY3RlZCBhbiBvcHRpb25zLU9iamVjdCB3aXRoIGhlYWRlcnMtYXR0cmlidXRlLicpXG4gIH1cbiAgaWYgKHR5cGVvZiBvcHRzLmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ01pc3NpbmcgQ29udGVudC1UeXBlLWhlYWRlci4nKVxuICB9XG5cbiAgY29uc3Qge1xuICAgIGhlYWRlcnMsXG4gICAgLi4uc3RyZWFtT3B0aW9uc1xuICB9ID0gb3B0c1xuXG4gIHRoaXMub3B0cyA9IHtcbiAgICBhdXRvRGVzdHJveTogZmFsc2UsXG4gICAgLi4uc3RyZWFtT3B0aW9uc1xuICB9XG4gIFdyaXRhYmxlU3RyZWFtLmNhbGwodGhpcywgdGhpcy5vcHRzKVxuXG4gIHRoaXMuX2RvbmUgPSBmYWxzZVxuICB0aGlzLl9wYXJzZXIgPSB0aGlzLmdldFBhcnNlckJ5SGVhZGVycyhoZWFkZXJzKVxuICB0aGlzLl9maW5pc2hlZCA9IGZhbHNlXG59XG5pbmhlcml0cyhCdXNib3ksIFdyaXRhYmxlU3RyZWFtKVxuXG5CdXNib3kucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiAoZXYpIHtcbiAgaWYgKGV2ID09PSAnZmluaXNoJykge1xuICAgIGlmICghdGhpcy5fZG9uZSkge1xuICAgICAgdGhpcy5fcGFyc2VyPy5lbmQoKVxuICAgICAgcmV0dXJuXG4gICAgfSBlbHNlIGlmICh0aGlzLl9maW5pc2hlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHRoaXMuX2ZpbmlzaGVkID0gdHJ1ZVxuICB9XG4gIFdyaXRhYmxlU3RyZWFtLnByb3RvdHlwZS5lbWl0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbn1cblxuQnVzYm95LnByb3RvdHlwZS5nZXRQYXJzZXJCeUhlYWRlcnMgPSBmdW5jdGlvbiAoaGVhZGVycykge1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZVBhcmFtcyhoZWFkZXJzWydjb250ZW50LXR5cGUnXSlcblxuICBjb25zdCBjZmcgPSB7XG4gICAgZGVmQ2hhcnNldDogdGhpcy5vcHRzLmRlZkNoYXJzZXQsXG4gICAgZmlsZUh3bTogdGhpcy5vcHRzLmZpbGVId20sXG4gICAgaGVhZGVycyxcbiAgICBoaWdoV2F0ZXJNYXJrOiB0aGlzLm9wdHMuaGlnaFdhdGVyTWFyayxcbiAgICBpc1BhcnRBRmlsZTogdGhpcy5vcHRzLmlzUGFydEFGaWxlLFxuICAgIGxpbWl0czogdGhpcy5vcHRzLmxpbWl0cyxcbiAgICBwYXJzZWRDb25UeXBlOiBwYXJzZWQsXG4gICAgcHJlc2VydmVQYXRoOiB0aGlzLm9wdHMucHJlc2VydmVQYXRoXG4gIH1cblxuICBpZiAoTXVsdGlwYXJ0UGFyc2VyLmRldGVjdC50ZXN0KHBhcnNlZFswXSkpIHtcbiAgICByZXR1cm4gbmV3IE11bHRpcGFydFBhcnNlcih0aGlzLCBjZmcpXG4gIH1cbiAgaWYgKFVybGVuY29kZWRQYXJzZXIuZGV0ZWN0LnRlc3QocGFyc2VkWzBdKSkge1xuICAgIHJldHVybiBuZXcgVXJsZW5jb2RlZFBhcnNlcih0aGlzLCBjZmcpXG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBDb250ZW50LVR5cGUuJylcbn1cblxuQnVzYm95LnByb3RvdHlwZS5fd3JpdGUgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICB0aGlzLl9wYXJzZXIud3JpdGUoY2h1bmssIGNiKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEJ1c2JveVxubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IEJ1c2JveVxubW9kdWxlLmV4cG9ydHMuQnVzYm95ID0gQnVzYm95XG5cbm1vZHVsZS5leHBvcnRzLkRpY2VyID0gRGljZXJcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgTWVzc2FnZUNoYW5uZWwsIHJlY2VpdmVNZXNzYWdlT25Qb3J0IH0gPSByZXF1aXJlKCd3b3JrZXJfdGhyZWFkcycpXG5cbmNvbnN0IGNvcnNTYWZlTGlzdGVkTWV0aG9kcyA9IFsnR0VUJywgJ0hFQUQnLCAnUE9TVCddXG5jb25zdCBjb3JzU2FmZUxpc3RlZE1ldGhvZHNTZXQgPSBuZXcgU2V0KGNvcnNTYWZlTGlzdGVkTWV0aG9kcylcblxuY29uc3QgbnVsbEJvZHlTdGF0dXMgPSBbMTAxLCAyMDQsIDIwNSwgMzA0XVxuXG5jb25zdCByZWRpcmVjdFN0YXR1cyA9IFszMDEsIDMwMiwgMzAzLCAzMDcsIDMwOF1cbmNvbnN0IHJlZGlyZWN0U3RhdHVzU2V0ID0gbmV3IFNldChyZWRpcmVjdFN0YXR1cylcblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2Jsb2NrLWJhZC1wb3J0XG5jb25zdCBiYWRQb3J0cyA9IFtcbiAgJzEnLCAnNycsICc5JywgJzExJywgJzEzJywgJzE1JywgJzE3JywgJzE5JywgJzIwJywgJzIxJywgJzIyJywgJzIzJywgJzI1JywgJzM3JywgJzQyJywgJzQzJywgJzUzJywgJzY5JywgJzc3JywgJzc5JyxcbiAgJzg3JywgJzk1JywgJzEwMScsICcxMDInLCAnMTAzJywgJzEwNCcsICcxMDknLCAnMTEwJywgJzExMScsICcxMTMnLCAnMTE1JywgJzExNycsICcxMTknLCAnMTIzJywgJzEzNScsICcxMzcnLFxuICAnMTM5JywgJzE0MycsICcxNjEnLCAnMTc5JywgJzM4OScsICc0MjcnLCAnNDY1JywgJzUxMicsICc1MTMnLCAnNTE0JywgJzUxNScsICc1MjYnLCAnNTMwJywgJzUzMScsICc1MzInLFxuICAnNTQwJywgJzU0OCcsICc1NTQnLCAnNTU2JywgJzU2MycsICc1ODcnLCAnNjAxJywgJzYzNicsICc5ODknLCAnOTkwJywgJzk5MycsICc5OTUnLCAnMTcxOScsICcxNzIwJywgJzE3MjMnLFxuICAnMjA0OScsICczNjU5JywgJzQwNDUnLCAnNTA2MCcsICc1MDYxJywgJzYwMDAnLCAnNjU2NicsICc2NjY1JywgJzY2NjYnLCAnNjY2NycsICc2NjY4JywgJzY2NjknLCAnNjY5NycsXG4gICcxMDA4MCdcbl1cblxuY29uc3QgYmFkUG9ydHNTZXQgPSBuZXcgU2V0KGJhZFBvcnRzKVxuXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLXJlZmVycmVyLXBvbGljeS8jcmVmZXJyZXItcG9saWNpZXNcbmNvbnN0IHJlZmVycmVyUG9saWN5ID0gW1xuICAnJyxcbiAgJ25vLXJlZmVycmVyJyxcbiAgJ25vLXJlZmVycmVyLXdoZW4tZG93bmdyYWRlJyxcbiAgJ3NhbWUtb3JpZ2luJyxcbiAgJ29yaWdpbicsXG4gICdzdHJpY3Qtb3JpZ2luJyxcbiAgJ29yaWdpbi13aGVuLWNyb3NzLW9yaWdpbicsXG4gICdzdHJpY3Qtb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luJyxcbiAgJ3Vuc2FmZS11cmwnXG5dXG5jb25zdCByZWZlcnJlclBvbGljeVNldCA9IG5ldyBTZXQocmVmZXJyZXJQb2xpY3kpXG5cbmNvbnN0IHJlcXVlc3RSZWRpcmVjdCA9IFsnZm9sbG93JywgJ21hbnVhbCcsICdlcnJvciddXG5cbmNvbnN0IHNhZmVNZXRob2RzID0gWydHRVQnLCAnSEVBRCcsICdPUFRJT05TJywgJ1RSQUNFJ11cbmNvbnN0IHNhZmVNZXRob2RzU2V0ID0gbmV3IFNldChzYWZlTWV0aG9kcylcblxuY29uc3QgcmVxdWVzdE1vZGUgPSBbJ25hdmlnYXRlJywgJ3NhbWUtb3JpZ2luJywgJ25vLWNvcnMnLCAnY29ycyddXG5cbmNvbnN0IHJlcXVlc3RDcmVkZW50aWFscyA9IFsnb21pdCcsICdzYW1lLW9yaWdpbicsICdpbmNsdWRlJ11cblxuY29uc3QgcmVxdWVzdENhY2hlID0gW1xuICAnZGVmYXVsdCcsXG4gICduby1zdG9yZScsXG4gICdyZWxvYWQnLFxuICAnbm8tY2FjaGUnLFxuICAnZm9yY2UtY2FjaGUnLFxuICAnb25seS1pZi1jYWNoZWQnXG5dXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXF1ZXN0LWJvZHktaGVhZGVyLW5hbWVcbmNvbnN0IHJlcXVlc3RCb2R5SGVhZGVyID0gW1xuICAnY29udGVudC1lbmNvZGluZycsXG4gICdjb250ZW50LWxhbmd1YWdlJyxcbiAgJ2NvbnRlbnQtbG9jYXRpb24nLFxuICAnY29udGVudC10eXBlJyxcbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8yMDIxXG4gIC8vICdDb250ZW50LUxlbmd0aCcgaXMgYSBmb3JiaWRkZW4gaGVhZGVyIG5hbWUsIHdoaWNoIGlzIHR5cGljYWxseVxuICAvLyByZW1vdmVkIGluIHRoZSBIZWFkZXJzIGltcGxlbWVudGF0aW9uLiBIb3dldmVyLCB1bmRpY2kgZG9lc24ndFxuICAvLyBmaWx0ZXIgb3V0IGhlYWRlcnMsIHNvIHdlIGFkZCBpdCBoZXJlLlxuICAnY29udGVudC1sZW5ndGgnXG5dXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNlbnVtZGVmLXJlcXVlc3RkdXBsZXhcbmNvbnN0IHJlcXVlc3REdXBsZXggPSBbXG4gICdoYWxmJ1xuXVxuXG4vLyBodHRwOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmb3JiaWRkZW4tbWV0aG9kXG5jb25zdCBmb3JiaWRkZW5NZXRob2RzID0gWydDT05ORUNUJywgJ1RSQUNFJywgJ1RSQUNLJ11cbmNvbnN0IGZvcmJpZGRlbk1ldGhvZHNTZXQgPSBuZXcgU2V0KGZvcmJpZGRlbk1ldGhvZHMpXG5cbmNvbnN0IHN1YnJlc291cmNlID0gW1xuICAnYXVkaW8nLFxuICAnYXVkaW93b3JrbGV0JyxcbiAgJ2ZvbnQnLFxuICAnaW1hZ2UnLFxuICAnbWFuaWZlc3QnLFxuICAncGFpbnR3b3JrbGV0JyxcbiAgJ3NjcmlwdCcsXG4gICdzdHlsZScsXG4gICd0cmFjaycsXG4gICd2aWRlbycsXG4gICd4c2x0JyxcbiAgJydcbl1cbmNvbnN0IHN1YnJlc291cmNlU2V0ID0gbmV3IFNldChzdWJyZXNvdXJjZSlcblxuLyoqIEB0eXBlIHtnbG9iYWxUaGlzWydET01FeGNlcHRpb24nXX0gKi9cbmNvbnN0IERPTUV4Y2VwdGlvbiA9IGdsb2JhbFRoaXMuRE9NRXhjZXB0aW9uID8/ICgoKSA9PiB7XG4gIC8vIERPTUV4Y2VwdGlvbiB3YXMgb25seSBtYWRlIGEgZ2xvYmFsIGluIE5vZGUgdjE3LjAuMCxcbiAgLy8gYnV0IGZldGNoIHN1cHBvcnRzID49IHYxNi44LlxuICB0cnkge1xuICAgIGF0b2IoJ34nKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKGVycikuY29uc3RydWN0b3JcbiAgfVxufSkoKVxuXG5sZXQgY2hhbm5lbFxuXG4vKiogQHR5cGUge2dsb2JhbFRoaXNbJ3N0cnVjdHVyZWRDbG9uZSddfSAqL1xuY29uc3Qgc3RydWN0dXJlZENsb25lID1cbiAgZ2xvYmFsVGhpcy5zdHJ1Y3R1cmVkQ2xvbmUgPz9cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvYjI3YWUyNGRjYzQyNTFiYWQ3MjZkOWQ4NGJhZjY3OGQxZjcwN2ZlZC9saWIvaW50ZXJuYWwvc3RydWN0dXJlZF9jbG9uZS5qc1xuICAvLyBzdHJ1Y3R1cmVkQ2xvbmUgd2FzIGFkZGVkIGluIHYxNy4wLjAsIGJ1dCBmZXRjaCBzdXBwb3J0cyB2MTYuOFxuICBmdW5jdGlvbiBzdHJ1Y3R1cmVkQ2xvbmUgKHZhbHVlLCBvcHRpb25zID0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ21pc3NpbmcgYXJndW1lbnQnKVxuICAgIH1cblxuICAgIGlmICghY2hhbm5lbCkge1xuICAgICAgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpXG4gICAgfVxuICAgIGNoYW5uZWwucG9ydDEudW5yZWYoKVxuICAgIGNoYW5uZWwucG9ydDIudW5yZWYoKVxuICAgIGNoYW5uZWwucG9ydDEucG9zdE1lc3NhZ2UodmFsdWUsIG9wdGlvbnM/LnRyYW5zZmVyKVxuICAgIHJldHVybiByZWNlaXZlTWVzc2FnZU9uUG9ydChjaGFubmVsLnBvcnQyKS5tZXNzYWdlXG4gIH1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIERPTUV4Y2VwdGlvbixcbiAgc3RydWN0dXJlZENsb25lLFxuICBzdWJyZXNvdXJjZSxcbiAgZm9yYmlkZGVuTWV0aG9kcyxcbiAgcmVxdWVzdEJvZHlIZWFkZXIsXG4gIHJlZmVycmVyUG9saWN5LFxuICByZXF1ZXN0UmVkaXJlY3QsXG4gIHJlcXVlc3RNb2RlLFxuICByZXF1ZXN0Q3JlZGVudGlhbHMsXG4gIHJlcXVlc3RDYWNoZSxcbiAgcmVkaXJlY3RTdGF0dXMsXG4gIGNvcnNTYWZlTGlzdGVkTWV0aG9kcyxcbiAgbnVsbEJvZHlTdGF0dXMsXG4gIHNhZmVNZXRob2RzLFxuICBiYWRQb3J0cyxcbiAgcmVxdWVzdER1cGxleCxcbiAgc3VicmVzb3VyY2VTZXQsXG4gIGJhZFBvcnRzU2V0LFxuICByZWRpcmVjdFN0YXR1c1NldCxcbiAgY29yc1NhZmVMaXN0ZWRNZXRob2RzU2V0LFxuICBzYWZlTWV0aG9kc1NldCxcbiAgZm9yYmlkZGVuTWV0aG9kc1NldCxcbiAgcmVmZXJyZXJQb2xpY3lTZXRcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbi8vIEluIGNhc2Ugb2YgYnJlYWtpbmcgY2hhbmdlcywgaW5jcmVhc2UgdGhlIHZlcnNpb25cbi8vIG51bWJlciB0byBhdm9pZCBjb25mbGljdHMuXG5jb25zdCBnbG9iYWxPcmlnaW4gPSBTeW1ib2wuZm9yKCd1bmRpY2kuZ2xvYmFsT3JpZ2luLjEnKVxuXG5mdW5jdGlvbiBnZXRHbG9iYWxPcmlnaW4gKCkge1xuICByZXR1cm4gZ2xvYmFsVGhpc1tnbG9iYWxPcmlnaW5dXG59XG5cbmZ1bmN0aW9uIHNldEdsb2JhbE9yaWdpbiAobmV3T3JpZ2luKSB7XG4gIGlmIChuZXdPcmlnaW4gPT09IHVuZGVmaW5lZCkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnbG9iYWxUaGlzLCBnbG9iYWxPcmlnaW4sIHtcbiAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZVxuICAgIH0pXG5cbiAgICByZXR1cm5cbiAgfVxuXG4gIGNvbnN0IHBhcnNlZFVSTCA9IG5ldyBVUkwobmV3T3JpZ2luKVxuXG4gIGlmIChwYXJzZWRVUkwucHJvdG9jb2wgIT09ICdodHRwOicgJiYgcGFyc2VkVVJMLnByb3RvY29sICE9PSAnaHR0cHM6Jykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE9ubHkgaHR0cCAmIGh0dHBzIHVybHMgYXJlIGFsbG93ZWQsIHJlY2VpdmVkICR7cGFyc2VkVVJMLnByb3RvY29sfWApXG4gIH1cblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZ2xvYmFsVGhpcywgZ2xvYmFsT3JpZ2luLCB7XG4gICAgdmFsdWU6IHBhcnNlZFVSTCxcbiAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IGZhbHNlXG4gIH0pXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRHbG9iYWxPcmlnaW4sXG4gIHNldEdsb2JhbE9yaWdpblxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyByZWRpcmVjdFN0YXR1c1NldCwgcmVmZXJyZXJQb2xpY3lTZXQ6IHJlZmVycmVyUG9saWN5VG9rZW5zLCBiYWRQb3J0c1NldCB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3QgeyBnZXRHbG9iYWxPcmlnaW4gfSA9IHJlcXVpcmUoJy4vZ2xvYmFsJylcbmNvbnN0IHsgcGVyZm9ybWFuY2UgfSA9IHJlcXVpcmUoJ3BlcmZfaG9va3MnKVxuY29uc3QgeyBpc0Jsb2JMaWtlLCB0b1VTVlN0cmluZywgUmVhZGFibGVTdHJlYW1Gcm9tIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbmNvbnN0IHsgaXNVaW50OEFycmF5IH0gPSByZXF1aXJlKCd1dGlsL3R5cGVzJylcblxubGV0IHN1cHBvcnRlZEhhc2hlcyA9IFtdXG5cbi8vIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvY3J5cHRvLmh0bWwjZGV0ZXJtaW5pbmctaWYtY3J5cHRvLXN1cHBvcnQtaXMtdW5hdmFpbGFibGVcbi8qKiBAdHlwZSB7aW1wb3J0KCdjcnlwdG8nKXx1bmRlZmluZWR9ICovXG5sZXQgY3J5cHRvXG5cbnRyeSB7XG4gIGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpXG4gIGNvbnN0IHBvc3NpYmxlUmVsZXZhbnRIYXNoZXMgPSBbJ3NoYTI1NicsICdzaGEzODQnLCAnc2hhNTEyJ11cbiAgc3VwcG9ydGVkSGFzaGVzID0gY3J5cHRvLmdldEhhc2hlcygpLmZpbHRlcigoaGFzaCkgPT4gcG9zc2libGVSZWxldmFudEhhc2hlcy5pbmNsdWRlcyhoYXNoKSlcbi8qIGM4IGlnbm9yZSBuZXh0IDMgKi9cbn0gY2F0Y2gge1xufVxuXG5mdW5jdGlvbiByZXNwb25zZVVSTCAocmVzcG9uc2UpIHtcbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3Jlc3BvbnNlc1xuICAvLyBBIHJlc3BvbnNlIGhhcyBhbiBhc3NvY2lhdGVkIFVSTC4gSXQgaXMgYSBwb2ludGVyIHRvIHRoZSBsYXN0IFVSTFxuICAvLyBpbiByZXNwb25zZeKAmXMgVVJMIGxpc3QgYW5kIG51bGwgaWYgcmVzcG9uc2XigJlzIFVSTCBsaXN0IGlzIGVtcHR5LlxuICBjb25zdCB1cmxMaXN0ID0gcmVzcG9uc2UudXJsTGlzdFxuICBjb25zdCBsZW5ndGggPSB1cmxMaXN0Lmxlbmd0aFxuICByZXR1cm4gbGVuZ3RoID09PSAwID8gbnVsbCA6IHVybExpc3RbbGVuZ3RoIC0gMV0udG9TdHJpbmcoKVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1yZXNwb25zZS1sb2NhdGlvbi11cmxcbmZ1bmN0aW9uIHJlc3BvbnNlTG9jYXRpb25VUkwgKHJlc3BvbnNlLCByZXF1ZXN0RnJhZ21lbnQpIHtcbiAgLy8gMS4gSWYgcmVzcG9uc2XigJlzIHN0YXR1cyBpcyBub3QgYSByZWRpcmVjdCBzdGF0dXMsIHRoZW4gcmV0dXJuIG51bGwuXG4gIGlmICghcmVkaXJlY3RTdGF0dXNTZXQuaGFzKHJlc3BvbnNlLnN0YXR1cykpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLy8gMi4gTGV0IGxvY2F0aW9uIGJlIHRoZSByZXN1bHQgb2YgZXh0cmFjdGluZyBoZWFkZXIgbGlzdCB2YWx1ZXMgZ2l2ZW5cbiAgLy8gYExvY2F0aW9uYCBhbmQgcmVzcG9uc2XigJlzIGhlYWRlciBsaXN0LlxuICBsZXQgbG9jYXRpb24gPSByZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ2xvY2F0aW9uJylcblxuICAvLyAzLiBJZiBsb2NhdGlvbiBpcyBhIGhlYWRlciB2YWx1ZSwgdGhlbiBzZXQgbG9jYXRpb24gdG8gdGhlIHJlc3VsdCBvZlxuICAvLyAgICBwYXJzaW5nIGxvY2F0aW9uIHdpdGggcmVzcG9uc2XigJlzIFVSTC5cbiAgaWYgKGxvY2F0aW9uICE9PSBudWxsICYmIGlzVmFsaWRIZWFkZXJWYWx1ZShsb2NhdGlvbikpIHtcbiAgICBsb2NhdGlvbiA9IG5ldyBVUkwobG9jYXRpb24sIHJlc3BvbnNlVVJMKHJlc3BvbnNlKSlcbiAgfVxuXG4gIC8vIDQuIElmIGxvY2F0aW9uIGlzIGEgVVJMIHdob3NlIGZyYWdtZW50IGlzIG51bGwsIHRoZW4gc2V0IGxvY2F0aW9u4oCZc1xuICAvLyBmcmFnbWVudCB0byByZXF1ZXN0RnJhZ21lbnQuXG4gIGlmIChsb2NhdGlvbiAmJiAhbG9jYXRpb24uaGFzaCkge1xuICAgIGxvY2F0aW9uLmhhc2ggPSByZXF1ZXN0RnJhZ21lbnRcbiAgfVxuXG4gIC8vIDUuIFJldHVybiBsb2NhdGlvbi5cbiAgcmV0dXJuIGxvY2F0aW9uXG59XG5cbi8qKiBAcmV0dXJucyB7VVJMfSAqL1xuZnVuY3Rpb24gcmVxdWVzdEN1cnJlbnRVUkwgKHJlcXVlc3QpIHtcbiAgcmV0dXJuIHJlcXVlc3QudXJsTGlzdFtyZXF1ZXN0LnVybExpc3QubGVuZ3RoIC0gMV1cbn1cblxuZnVuY3Rpb24gcmVxdWVzdEJhZFBvcnQgKHJlcXVlc3QpIHtcbiAgLy8gMS4gTGV0IHVybCBiZSByZXF1ZXN04oCZcyBjdXJyZW50IFVSTC5cbiAgY29uc3QgdXJsID0gcmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdClcblxuICAvLyAyLiBJZiB1cmzigJlzIHNjaGVtZSBpcyBhbiBIVFRQKFMpIHNjaGVtZSBhbmQgdXJs4oCZcyBwb3J0IGlzIGEgYmFkIHBvcnQsXG4gIC8vIHRoZW4gcmV0dXJuIGJsb2NrZWQuXG4gIGlmICh1cmxJc0h0dHBIdHRwc1NjaGVtZSh1cmwpICYmIGJhZFBvcnRzU2V0Lmhhcyh1cmwucG9ydCkpIHtcbiAgICByZXR1cm4gJ2Jsb2NrZWQnXG4gIH1cblxuICAvLyAzLiBSZXR1cm4gYWxsb3dlZC5cbiAgcmV0dXJuICdhbGxvd2VkJ1xufVxuXG5mdW5jdGlvbiBpc0Vycm9yTGlrZSAob2JqZWN0KSB7XG4gIHJldHVybiBvYmplY3QgaW5zdGFuY2VvZiBFcnJvciB8fCAoXG4gICAgb2JqZWN0Py5jb25zdHJ1Y3Rvcj8ubmFtZSA9PT0gJ0Vycm9yJyB8fFxuICAgIG9iamVjdD8uY29uc3RydWN0b3I/Lm5hbWUgPT09ICdET01FeGNlcHRpb24nXG4gIClcbn1cblxuLy8gQ2hlY2sgd2hldGhlciB8c3RhdHVzVGV4dHwgaXMgYSBCeXRlU3RyaW5nIGFuZFxuLy8gbWF0Y2hlcyB0aGUgUmVhc29uLVBocmFzZSB0b2tlbiBwcm9kdWN0aW9uLlxuLy8gUkZDIDI2MTY6IGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyNjE2XG4vLyBSRkMgNzIzMDogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzBcbi8vIFwicmVhc29uLXBocmFzZSA9ICooIEhUQUIgLyBTUCAvIFZDSEFSIC8gb2JzLXRleHQgKVwiXG4vLyBodHRwczovL2dpdGh1Yi5jb20vY2hyb21pdW0vY2hyb21pdW0vYmxvYi85NC4wLjQ2MDQuMS90aGlyZF9wYXJ0eS9ibGluay9yZW5kZXJlci9jb3JlL2ZldGNoL3Jlc3BvbnNlLmNjI0wxMTZcbmZ1bmN0aW9uIGlzVmFsaWRSZWFzb25QaHJhc2UgKHN0YXR1c1RleHQpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdGF0dXNUZXh0Lmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgYyA9IHN0YXR1c1RleHQuY2hhckNvZGVBdChpKVxuICAgIGlmIChcbiAgICAgICEoXG4gICAgICAgIChcbiAgICAgICAgICBjID09PSAweDA5IHx8IC8vIEhUQUJcbiAgICAgICAgICAoYyA+PSAweDIwICYmIGMgPD0gMHg3ZSkgfHwgLy8gU1AgLyBWQ0hBUlxuICAgICAgICAgIChjID49IDB4ODAgJiYgYyA8PSAweGZmKVxuICAgICAgICApIC8vIG9icy10ZXh0XG4gICAgICApXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4yLjZcbiAqIEBwYXJhbSB7bnVtYmVyfSBjXG4gKi9cbmZ1bmN0aW9uIGlzVG9rZW5DaGFyQ29kZSAoYykge1xuICBzd2l0Y2ggKGMpIHtcbiAgICBjYXNlIDB4MjI6XG4gICAgY2FzZSAweDI4OlxuICAgIGNhc2UgMHgyOTpcbiAgICBjYXNlIDB4MmM6XG4gICAgY2FzZSAweDJmOlxuICAgIGNhc2UgMHgzYTpcbiAgICBjYXNlIDB4M2I6XG4gICAgY2FzZSAweDNjOlxuICAgIGNhc2UgMHgzZDpcbiAgICBjYXNlIDB4M2U6XG4gICAgY2FzZSAweDNmOlxuICAgIGNhc2UgMHg0MDpcbiAgICBjYXNlIDB4NWI6XG4gICAgY2FzZSAweDVjOlxuICAgIGNhc2UgMHg1ZDpcbiAgICBjYXNlIDB4N2I6XG4gICAgY2FzZSAweDdkOlxuICAgICAgLy8gRFFVT1RFIGFuZCBcIigpLC86Ozw9Pj9AW1xcXXt9XCJcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBWQ0hBUiAleDIxLTdFXG4gICAgICByZXR1cm4gYyA+PSAweDIxICYmIGMgPD0gMHg3ZVxuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGNoYXJhY3RlcnNcbiAqL1xuZnVuY3Rpb24gaXNWYWxpZEhUVFBUb2tlbiAoY2hhcmFjdGVycykge1xuICBpZiAoY2hhcmFjdGVycy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGNoYXJhY3RlcnMubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoIWlzVG9rZW5DaGFyQ29kZShjaGFyYWN0ZXJzLmNoYXJDb2RlQXQoaSkpKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNoZWFkZXItbmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IHBvdGVudGlhbFZhbHVlXG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRIZWFkZXJOYW1lIChwb3RlbnRpYWxWYWx1ZSkge1xuICByZXR1cm4gaXNWYWxpZEhUVFBUb2tlbihwb3RlbnRpYWxWYWx1ZSlcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNoZWFkZXItdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBwb3RlbnRpYWxWYWx1ZVxuICovXG5mdW5jdGlvbiBpc1ZhbGlkSGVhZGVyVmFsdWUgKHBvdGVudGlhbFZhbHVlKSB7XG4gIC8vIC0gSGFzIG5vIGxlYWRpbmcgb3IgdHJhaWxpbmcgSFRUUCB0YWIgb3Igc3BhY2UgYnl0ZXMuXG4gIC8vIC0gQ29udGFpbnMgbm8gMHgwMCAoTlVMKSBvciBIVFRQIG5ld2xpbmUgYnl0ZXMuXG4gIGlmIChcbiAgICBwb3RlbnRpYWxWYWx1ZS5zdGFydHNXaXRoKCdcXHQnKSB8fFxuICAgIHBvdGVudGlhbFZhbHVlLnN0YXJ0c1dpdGgoJyAnKSB8fFxuICAgIHBvdGVudGlhbFZhbHVlLmVuZHNXaXRoKCdcXHQnKSB8fFxuICAgIHBvdGVudGlhbFZhbHVlLmVuZHNXaXRoKCcgJylcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBpZiAoXG4gICAgcG90ZW50aWFsVmFsdWUuaW5jbHVkZXMoJ1xcMCcpIHx8XG4gICAgcG90ZW50aWFsVmFsdWUuaW5jbHVkZXMoJ1xccicpIHx8XG4gICAgcG90ZW50aWFsVmFsdWUuaW5jbHVkZXMoJ1xcbicpXG4gICkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1yZWZlcnJlci1wb2xpY3kvI3NldC1yZXF1ZXN0cy1yZWZlcnJlci1wb2xpY3ktb24tcmVkaXJlY3RcbmZ1bmN0aW9uIHNldFJlcXVlc3RSZWZlcnJlclBvbGljeU9uUmVkaXJlY3QgKHJlcXVlc3QsIGFjdHVhbFJlc3BvbnNlKSB7XG4gIC8vICBHaXZlbiBhIHJlcXVlc3QgcmVxdWVzdCBhbmQgYSByZXNwb25zZSBhY3R1YWxSZXNwb25zZSwgdGhpcyBhbGdvcml0aG1cbiAgLy8gIHVwZGF0ZXMgcmVxdWVzdOKAmXMgcmVmZXJyZXIgcG9saWN5IGFjY29yZGluZyB0byB0aGUgUmVmZXJyZXItUG9saWN5XG4gIC8vICBoZWFkZXIgKGlmIGFueSkgaW4gYWN0dWFsUmVzcG9uc2UuXG5cbiAgLy8gMS4gTGV0IHBvbGljeSBiZSB0aGUgcmVzdWx0IG9mIGV4ZWN1dGluZyDCpyA4LjEgUGFyc2UgYSByZWZlcnJlciBwb2xpY3lcbiAgLy8gZnJvbSBhIFJlZmVycmVyLVBvbGljeSBoZWFkZXIgb24gYWN0dWFsUmVzcG9uc2UuXG5cbiAgLy8gOC4xIFBhcnNlIGEgcmVmZXJyZXIgcG9saWN5IGZyb20gYSBSZWZlcnJlci1Qb2xpY3kgaGVhZGVyXG4gIC8vIDEuIExldCBwb2xpY3ktdG9rZW5zIGJlIHRoZSByZXN1bHQgb2YgZXh0cmFjdGluZyBoZWFkZXIgbGlzdCB2YWx1ZXMgZ2l2ZW4gYFJlZmVycmVyLVBvbGljeWAgYW5kIHJlc3BvbnNl4oCZcyBoZWFkZXIgbGlzdC5cbiAgY29uc3QgeyBoZWFkZXJzTGlzdCB9ID0gYWN0dWFsUmVzcG9uc2VcbiAgLy8gMi4gTGV0IHBvbGljeSBiZSB0aGUgZW1wdHkgc3RyaW5nLlxuICAvLyAzLiBGb3IgZWFjaCB0b2tlbiBpbiBwb2xpY3ktdG9rZW5zLCBpZiB0b2tlbiBpcyBhIHJlZmVycmVyIHBvbGljeSBhbmQgdG9rZW4gaXMgbm90IHRoZSBlbXB0eSBzdHJpbmcsIHRoZW4gc2V0IHBvbGljeSB0byB0b2tlbi5cbiAgLy8gNC4gUmV0dXJuIHBvbGljeS5cbiAgY29uc3QgcG9saWN5SGVhZGVyID0gKGhlYWRlcnNMaXN0LmdldCgncmVmZXJyZXItcG9saWN5JykgPz8gJycpLnNwbGl0KCcsJylcblxuICAvLyBOb3RlOiBBcyB0aGUgcmVmZXJyZXItcG9saWN5IGNhbiBjb250YWluIG11bHRpcGxlIHBvbGljaWVzXG4gIC8vIHNlcGFyYXRlZCBieSBjb21tYSwgd2UgbmVlZCB0byBsb29wIHRocm91Z2ggYWxsIG9mIHRoZW1cbiAgLy8gYW5kIHBpY2sgdGhlIGZpcnN0IHZhbGlkIG9uZS5cbiAgLy8gUmVmOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvUmVmZXJyZXItUG9saWN5I3NwZWNpZnlfYV9mYWxsYmFja19wb2xpY3lcbiAgbGV0IHBvbGljeSA9ICcnXG4gIGlmIChwb2xpY3lIZWFkZXIubGVuZ3RoID4gMCkge1xuICAgIC8vIFRoZSByaWdodC1tb3N0IHBvbGljeSB0YWtlcyBwcmVjZWRlbmNlLlxuICAgIC8vIFRoZSBsZWZ0LW1vc3QgcG9saWN5IGlzIHRoZSBmYWxsYmFjay5cbiAgICBmb3IgKGxldCBpID0gcG9saWN5SGVhZGVyLmxlbmd0aDsgaSAhPT0gMDsgaS0tKSB7XG4gICAgICBjb25zdCB0b2tlbiA9IHBvbGljeUhlYWRlcltpIC0gMV0udHJpbSgpXG4gICAgICBpZiAocmVmZXJyZXJQb2xpY3lUb2tlbnMuaGFzKHRva2VuKSkge1xuICAgICAgICBwb2xpY3kgPSB0b2tlblxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIDIuIElmIHBvbGljeSBpcyBub3QgdGhlIGVtcHR5IHN0cmluZywgdGhlbiBzZXQgcmVxdWVzdOKAmXMgcmVmZXJyZXIgcG9saWN5IHRvIHBvbGljeS5cbiAgaWYgKHBvbGljeSAhPT0gJycpIHtcbiAgICByZXF1ZXN0LnJlZmVycmVyUG9saWN5ID0gcG9saWN5XG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2Nyb3NzLW9yaWdpbi1yZXNvdXJjZS1wb2xpY3ktY2hlY2tcbmZ1bmN0aW9uIGNyb3NzT3JpZ2luUmVzb3VyY2VQb2xpY3lDaGVjayAoKSB7XG4gIC8vIFRPRE9cbiAgcmV0dXJuICdhbGxvd2VkJ1xufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1jb3JzLWNoZWNrXG5mdW5jdGlvbiBjb3JzQ2hlY2sgKCkge1xuICAvLyBUT0RPXG4gIHJldHVybiAnc3VjY2Vzcydcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtdGFvLWNoZWNrXG5mdW5jdGlvbiBUQU9DaGVjayAoKSB7XG4gIC8vIFRPRE9cbiAgcmV0dXJuICdzdWNjZXNzJ1xufVxuXG5mdW5jdGlvbiBhcHBlbmRGZXRjaE1ldGFkYXRhIChodHRwUmVxdWVzdCkge1xuICAvLyAgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1mZXRjaC1tZXRhZGF0YS8jc2VjLWZldGNoLWRlc3QtaGVhZGVyXG4gIC8vICBUT0RPXG5cbiAgLy8gIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtZmV0Y2gtbWV0YWRhdGEvI3NlYy1mZXRjaC1tb2RlLWhlYWRlclxuXG4gIC8vICAxLiBBc3NlcnQ6IHLigJlzIHVybCBpcyBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTC5cbiAgLy8gIFRPRE9cblxuICAvLyAgMi4gTGV0IGhlYWRlciBiZSBhIFN0cnVjdHVyZWQgSGVhZGVyIHdob3NlIHZhbHVlIGlzIGEgdG9rZW4uXG4gIGxldCBoZWFkZXIgPSBudWxsXG5cbiAgLy8gIDMuIFNldCBoZWFkZXLigJlzIHZhbHVlIHRvIHLigJlzIG1vZGUuXG4gIGhlYWRlciA9IGh0dHBSZXF1ZXN0Lm1vZGVcblxuICAvLyAgNC4gU2V0IGEgc3RydWN0dXJlZCBmaWVsZCB2YWx1ZSBgU2VjLUZldGNoLU1vZGVgL2hlYWRlciBpbiBy4oCZcyBoZWFkZXIgbGlzdC5cbiAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3Quc2V0KCdzZWMtZmV0Y2gtbW9kZScsIGhlYWRlcilcblxuICAvLyAgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1mZXRjaC1tZXRhZGF0YS8jc2VjLWZldGNoLXNpdGUtaGVhZGVyXG4gIC8vICBUT0RPXG5cbiAgLy8gIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtZmV0Y2gtbWV0YWRhdGEvI3NlYy1mZXRjaC11c2VyLWhlYWRlclxuICAvLyAgVE9ET1xufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYXBwZW5kLWEtcmVxdWVzdC1vcmlnaW4taGVhZGVyXG5mdW5jdGlvbiBhcHBlbmRSZXF1ZXN0T3JpZ2luSGVhZGVyIChyZXF1ZXN0KSB7XG4gIC8vIDEuIExldCBzZXJpYWxpemVkT3JpZ2luIGJlIHRoZSByZXN1bHQgb2YgYnl0ZS1zZXJpYWxpemluZyBhIHJlcXVlc3Qgb3JpZ2luIHdpdGggcmVxdWVzdC5cbiAgbGV0IHNlcmlhbGl6ZWRPcmlnaW4gPSByZXF1ZXN0Lm9yaWdpblxuXG4gIC8vIDIuIElmIHJlcXVlc3TigJlzIHJlc3BvbnNlIHRhaW50aW5nIGlzIFwiY29yc1wiIG9yIHJlcXVlc3TigJlzIG1vZGUgaXMgXCJ3ZWJzb2NrZXRcIiwgdGhlbiBhcHBlbmQgKGBPcmlnaW5gLCBzZXJpYWxpemVkT3JpZ2luKSB0byByZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cbiAgaWYgKHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ2NvcnMnIHx8IHJlcXVlc3QubW9kZSA9PT0gJ3dlYnNvY2tldCcpIHtcbiAgICBpZiAoc2VyaWFsaXplZE9yaWdpbikge1xuICAgICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ29yaWdpbicsIHNlcmlhbGl6ZWRPcmlnaW4pXG4gICAgfVxuXG4gIC8vIDMuIE90aGVyd2lzZSwgaWYgcmVxdWVzdOKAmXMgbWV0aG9kIGlzIG5laXRoZXIgYEdFVGAgbm9yIGBIRUFEYCwgdGhlbjpcbiAgfSBlbHNlIGlmIChyZXF1ZXN0Lm1ldGhvZCAhPT0gJ0dFVCcgJiYgcmVxdWVzdC5tZXRob2QgIT09ICdIRUFEJykge1xuICAgIC8vIDEuIFN3aXRjaCBvbiByZXF1ZXN04oCZcyByZWZlcnJlciBwb2xpY3k6XG4gICAgc3dpdGNoIChyZXF1ZXN0LnJlZmVycmVyUG9saWN5KSB7XG4gICAgICBjYXNlICduby1yZWZlcnJlcic6XG4gICAgICAgIC8vIFNldCBzZXJpYWxpemVkT3JpZ2luIHRvIGBudWxsYC5cbiAgICAgICAgc2VyaWFsaXplZE9yaWdpbiA9IG51bGxcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ25vLXJlZmVycmVyLXdoZW4tZG93bmdyYWRlJzpcbiAgICAgIGNhc2UgJ3N0cmljdC1vcmlnaW4nOlxuICAgICAgY2FzZSAnc3RyaWN0LW9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbic6XG4gICAgICAgIC8vIElmIHJlcXVlc3TigJlzIG9yaWdpbiBpcyBhIHR1cGxlIG9yaWdpbiwgaXRzIHNjaGVtZSBpcyBcImh0dHBzXCIsIGFuZCByZXF1ZXN04oCZcyBjdXJyZW50IFVSTOKAmXMgc2NoZW1lIGlzIG5vdCBcImh0dHBzXCIsIHRoZW4gc2V0IHNlcmlhbGl6ZWRPcmlnaW4gdG8gYG51bGxgLlxuICAgICAgICBpZiAocmVxdWVzdC5vcmlnaW4gJiYgdXJsSGFzSHR0cHNTY2hlbWUocmVxdWVzdC5vcmlnaW4pICYmICF1cmxIYXNIdHRwc1NjaGVtZShyZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KSkpIHtcbiAgICAgICAgICBzZXJpYWxpemVkT3JpZ2luID0gbnVsbFxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdzYW1lLW9yaWdpbic6XG4gICAgICAgIC8vIElmIHJlcXVlc3TigJlzIG9yaWdpbiBpcyBub3Qgc2FtZSBvcmlnaW4gd2l0aCByZXF1ZXN04oCZcyBjdXJyZW50IFVSTOKAmXMgb3JpZ2luLCB0aGVuIHNldCBzZXJpYWxpemVkT3JpZ2luIHRvIGBudWxsYC5cbiAgICAgICAgaWYgKCFzYW1lT3JpZ2luKHJlcXVlc3QsIHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpKSkge1xuICAgICAgICAgIHNlcmlhbGl6ZWRPcmlnaW4gPSBudWxsXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIERvIG5vdGhpbmcuXG4gICAgfVxuXG4gICAgaWYgKHNlcmlhbGl6ZWRPcmlnaW4pIHtcbiAgICAgIC8vIDIuIEFwcGVuZCAoYE9yaWdpbmAsIHNlcmlhbGl6ZWRPcmlnaW4pIHRvIHJlcXVlc3TigJlzIGhlYWRlciBsaXN0LlxuICAgICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ29yaWdpbicsIHNlcmlhbGl6ZWRPcmlnaW4pXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvYXJzZW5lZFNoYXJlZEN1cnJlbnRUaW1lIChjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSkge1xuICAvLyBUT0RPXG4gIHJldHVybiBwZXJmb3JtYW5jZS5ub3coKVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY3JlYXRlLWFuLW9wYXF1ZS10aW1pbmctaW5mb1xuZnVuY3Rpb24gY3JlYXRlT3BhcXVlVGltaW5nSW5mbyAodGltaW5nSW5mbykge1xuICByZXR1cm4ge1xuICAgIHN0YXJ0VGltZTogdGltaW5nSW5mby5zdGFydFRpbWUgPz8gMCxcbiAgICByZWRpcmVjdFN0YXJ0VGltZTogMCxcbiAgICByZWRpcmVjdEVuZFRpbWU6IDAsXG4gICAgcG9zdFJlZGlyZWN0U3RhcnRUaW1lOiB0aW1pbmdJbmZvLnN0YXJ0VGltZSA/PyAwLFxuICAgIGZpbmFsU2VydmljZVdvcmtlclN0YXJ0VGltZTogMCxcbiAgICBmaW5hbE5ldHdvcmtSZXNwb25zZVN0YXJ0VGltZTogMCxcbiAgICBmaW5hbE5ldHdvcmtSZXF1ZXN0U3RhcnRUaW1lOiAwLFxuICAgIGVuZFRpbWU6IDAsXG4gICAgZW5jb2RlZEJvZHlTaXplOiAwLFxuICAgIGRlY29kZWRCb2R5U2l6ZTogMCxcbiAgICBmaW5hbENvbm5lY3Rpb25UaW1pbmdJbmZvOiBudWxsXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvb3JpZ2luLmh0bWwjcG9saWN5LWNvbnRhaW5lclxuZnVuY3Rpb24gbWFrZVBvbGljeUNvbnRhaW5lciAoKSB7XG4gIC8vIE5vdGU6IHRoZSBmZXRjaCBzcGVjIGRvZXNuJ3QgbWFrZSB1c2Ugb2YgZW1iZWRkZXIgcG9saWN5IG9yIENTUCBsaXN0XG4gIHJldHVybiB7XG4gICAgcmVmZXJyZXJQb2xpY3k6ICdzdHJpY3Qtb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luJ1xuICB9XG59XG5cbi8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL29yaWdpbi5odG1sI2Nsb25lLWEtcG9saWN5LWNvbnRhaW5lclxuZnVuY3Rpb24gY2xvbmVQb2xpY3lDb250YWluZXIgKHBvbGljeUNvbnRhaW5lcikge1xuICByZXR1cm4ge1xuICAgIHJlZmVycmVyUG9saWN5OiBwb2xpY3lDb250YWluZXIucmVmZXJyZXJQb2xpY3lcbiAgfVxufVxuXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLXJlZmVycmVyLXBvbGljeS8jZGV0ZXJtaW5lLXJlcXVlc3RzLXJlZmVycmVyXG5mdW5jdGlvbiBkZXRlcm1pbmVSZXF1ZXN0c1JlZmVycmVyIChyZXF1ZXN0KSB7XG4gIC8vIDEuIExldCBwb2xpY3kgYmUgcmVxdWVzdCdzIHJlZmVycmVyIHBvbGljeS5cbiAgY29uc3QgcG9saWN5ID0gcmVxdWVzdC5yZWZlcnJlclBvbGljeVxuXG4gIC8vIE5vdGU6IHBvbGljeSBjYW5ub3QgKHNob3VsZG4ndCkgYmUgbnVsbCBvciBhbiBlbXB0eSBzdHJpbmcuXG4gIGFzc2VydChwb2xpY3kpXG5cbiAgLy8gMi4gTGV0IGVudmlyb25tZW50IGJlIHJlcXVlc3TigJlzIGNsaWVudC5cblxuICBsZXQgcmVmZXJyZXJTb3VyY2UgPSBudWxsXG5cbiAgLy8gMy4gU3dpdGNoIG9uIHJlcXVlc3TigJlzIHJlZmVycmVyOlxuICBpZiAocmVxdWVzdC5yZWZlcnJlciA9PT0gJ2NsaWVudCcpIHtcbiAgICAvLyBOb3RlOiBub2RlIGlzbid0IGEgYnJvd3NlciBhbmQgZG9lc24ndCBpbXBsZW1lbnQgZG9jdW1lbnQvaWZyYW1lcyxcbiAgICAvLyBzbyB3ZSBieXBhc3MgdGhpcyBzdGVwIGFuZCByZXBsYWNlIGl0IHdpdGggb3VyIG93bi5cblxuICAgIGNvbnN0IGdsb2JhbE9yaWdpbiA9IGdldEdsb2JhbE9yaWdpbigpXG5cbiAgICBpZiAoIWdsb2JhbE9yaWdpbiB8fCBnbG9iYWxPcmlnaW4ub3JpZ2luID09PSAnbnVsbCcpIHtcbiAgICAgIHJldHVybiAnbm8tcmVmZXJyZXInXG4gICAgfVxuXG4gICAgLy8gbm90ZTogd2UgbmVlZCB0byBjbG9uZSBpdCBhcyBpdCdzIG11dGF0ZWRcbiAgICByZWZlcnJlclNvdXJjZSA9IG5ldyBVUkwoZ2xvYmFsT3JpZ2luKVxuICB9IGVsc2UgaWYgKHJlcXVlc3QucmVmZXJyZXIgaW5zdGFuY2VvZiBVUkwpIHtcbiAgICAvLyBMZXQgcmVmZXJyZXJTb3VyY2UgYmUgcmVxdWVzdOKAmXMgcmVmZXJyZXIuXG4gICAgcmVmZXJyZXJTb3VyY2UgPSByZXF1ZXN0LnJlZmVycmVyXG4gIH1cblxuICAvLyA0LiBMZXQgcmVxdWVzdOKAmXMgcmVmZXJyZXJVUkwgYmUgdGhlIHJlc3VsdCBvZiBzdHJpcHBpbmcgcmVmZXJyZXJTb3VyY2UgZm9yXG4gIC8vICAgIHVzZSBhcyBhIHJlZmVycmVyLlxuICBsZXQgcmVmZXJyZXJVUkwgPSBzdHJpcFVSTEZvclJlZmVycmVyKHJlZmVycmVyU291cmNlKVxuXG4gIC8vIDUuIExldCByZWZlcnJlck9yaWdpbiBiZSB0aGUgcmVzdWx0IG9mIHN0cmlwcGluZyByZWZlcnJlclNvdXJjZSBmb3IgdXNlIGFzXG4gIC8vICAgIGEgcmVmZXJyZXIsIHdpdGggdGhlIG9yaWdpbi1vbmx5IGZsYWcgc2V0IHRvIHRydWUuXG4gIGNvbnN0IHJlZmVycmVyT3JpZ2luID0gc3RyaXBVUkxGb3JSZWZlcnJlcihyZWZlcnJlclNvdXJjZSwgdHJ1ZSlcblxuICAvLyA2LiBJZiB0aGUgcmVzdWx0IG9mIHNlcmlhbGl6aW5nIHJlZmVycmVyVVJMIGlzIGEgc3RyaW5nIHdob3NlIGxlbmd0aCBpc1xuICAvLyAgICBncmVhdGVyIHRoYW4gNDA5Niwgc2V0IHJlZmVycmVyVVJMIHRvIHJlZmVycmVyT3JpZ2luLlxuICBpZiAocmVmZXJyZXJVUkwudG9TdHJpbmcoKS5sZW5ndGggPiA0MDk2KSB7XG4gICAgcmVmZXJyZXJVUkwgPSByZWZlcnJlck9yaWdpblxuICB9XG5cbiAgY29uc3QgYXJlU2FtZU9yaWdpbiA9IHNhbWVPcmlnaW4ocmVxdWVzdCwgcmVmZXJyZXJVUkwpXG4gIGNvbnN0IGlzTm9uUG90ZW50aWFsbHlUcnVzdFdvcnRoeSA9IGlzVVJMUG90ZW50aWFsbHlUcnVzdHdvcnRoeShyZWZlcnJlclVSTCkgJiZcbiAgICAhaXNVUkxQb3RlbnRpYWxseVRydXN0d29ydGh5KHJlcXVlc3QudXJsKVxuXG4gIC8vIDguIEV4ZWN1dGUgdGhlIHN3aXRjaCBzdGF0ZW1lbnRzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHZhbHVlIG9mIHBvbGljeTpcbiAgc3dpdGNoIChwb2xpY3kpIHtcbiAgICBjYXNlICdvcmlnaW4nOiByZXR1cm4gcmVmZXJyZXJPcmlnaW4gIT0gbnVsbCA/IHJlZmVycmVyT3JpZ2luIDogc3RyaXBVUkxGb3JSZWZlcnJlcihyZWZlcnJlclNvdXJjZSwgdHJ1ZSlcbiAgICBjYXNlICd1bnNhZmUtdXJsJzogcmV0dXJuIHJlZmVycmVyVVJMXG4gICAgY2FzZSAnc2FtZS1vcmlnaW4nOlxuICAgICAgcmV0dXJuIGFyZVNhbWVPcmlnaW4gPyByZWZlcnJlck9yaWdpbiA6ICduby1yZWZlcnJlcidcbiAgICBjYXNlICdvcmlnaW4td2hlbi1jcm9zcy1vcmlnaW4nOlxuICAgICAgcmV0dXJuIGFyZVNhbWVPcmlnaW4gPyByZWZlcnJlclVSTCA6IHJlZmVycmVyT3JpZ2luXG4gICAgY2FzZSAnc3RyaWN0LW9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbic6IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRVUkwgPSByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KVxuXG4gICAgICAvLyAxLiBJZiB0aGUgb3JpZ2luIG9mIHJlZmVycmVyVVJMIGFuZCB0aGUgb3JpZ2luIG9mIHJlcXVlc3TigJlzIGN1cnJlbnRcbiAgICAgIC8vICAgIFVSTCBhcmUgdGhlIHNhbWUsIHRoZW4gcmV0dXJuIHJlZmVycmVyVVJMLlxuICAgICAgaWYgKHNhbWVPcmlnaW4ocmVmZXJyZXJVUkwsIGN1cnJlbnRVUkwpKSB7XG4gICAgICAgIHJldHVybiByZWZlcnJlclVSTFxuICAgICAgfVxuXG4gICAgICAvLyAyLiBJZiByZWZlcnJlclVSTCBpcyBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTCBhbmQgcmVxdWVzdOKAmXNcbiAgICAgIC8vICAgIGN1cnJlbnQgVVJMIGlzIG5vdCBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTCwgdGhlbiByZXR1cm4gbm9cbiAgICAgIC8vICAgIHJlZmVycmVyLlxuICAgICAgaWYgKGlzVVJMUG90ZW50aWFsbHlUcnVzdHdvcnRoeShyZWZlcnJlclVSTCkgJiYgIWlzVVJMUG90ZW50aWFsbHlUcnVzdHdvcnRoeShjdXJyZW50VVJMKSkge1xuICAgICAgICByZXR1cm4gJ25vLXJlZmVycmVyJ1xuICAgICAgfVxuXG4gICAgICAvLyAzLiBSZXR1cm4gcmVmZXJyZXJPcmlnaW4uXG4gICAgICByZXR1cm4gcmVmZXJyZXJPcmlnaW5cbiAgICB9XG4gICAgY2FzZSAnc3RyaWN0LW9yaWdpbic6IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICAgIC8qKlxuICAgICAgICAgKiAxLiBJZiByZWZlcnJlclVSTCBpcyBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTCBhbmRcbiAgICAgICAgICogcmVxdWVzdOKAmXMgY3VycmVudCBVUkwgaXMgbm90IGEgcG90ZW50aWFsbHkgdHJ1c3R3b3J0aHkgVVJMLFxuICAgICAgICAgKiB0aGVuIHJldHVybiBubyByZWZlcnJlci5cbiAgICAgICAgICogMi4gUmV0dXJuIHJlZmVycmVyT3JpZ2luXG4gICAgICAgICovXG4gICAgY2FzZSAnbm8tcmVmZXJyZXItd2hlbi1kb3duZ3JhZGUnOiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICAvKipcbiAgICAgICAqIDEuIElmIHJlZmVycmVyVVJMIGlzIGEgcG90ZW50aWFsbHkgdHJ1c3R3b3J0aHkgVVJMIGFuZFxuICAgICAgICogcmVxdWVzdOKAmXMgY3VycmVudCBVUkwgaXMgbm90IGEgcG90ZW50aWFsbHkgdHJ1c3R3b3J0aHkgVVJMLFxuICAgICAgICogdGhlbiByZXR1cm4gbm8gcmVmZXJyZXIuXG4gICAgICAgKiAyLiBSZXR1cm4gcmVmZXJyZXJPcmlnaW5cbiAgICAgICovXG5cbiAgICBkZWZhdWx0OiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICByZXR1cm4gaXNOb25Qb3RlbnRpYWxseVRydXN0V29ydGh5ID8gJ25vLXJlZmVycmVyJyA6IHJlZmVycmVyT3JpZ2luXG4gIH1cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtcmVmZXJyZXItcG9saWN5LyNzdHJpcC11cmxcbiAqIEBwYXJhbSB7VVJMfSB1cmxcbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IG9yaWdpbk9ubHlcbiAqL1xuZnVuY3Rpb24gc3RyaXBVUkxGb3JSZWZlcnJlciAodXJsLCBvcmlnaW5Pbmx5KSB7XG4gIC8vIDEuIEFzc2VydDogdXJsIGlzIGEgVVJMLlxuICBhc3NlcnQodXJsIGluc3RhbmNlb2YgVVJMKVxuXG4gIC8vIDIuIElmIHVybOKAmXMgc2NoZW1lIGlzIGEgbG9jYWwgc2NoZW1lLCB0aGVuIHJldHVybiBubyByZWZlcnJlci5cbiAgaWYgKHVybC5wcm90b2NvbCA9PT0gJ2ZpbGU6JyB8fCB1cmwucHJvdG9jb2wgPT09ICdhYm91dDonIHx8IHVybC5wcm90b2NvbCA9PT0gJ2JsYW5rOicpIHtcbiAgICByZXR1cm4gJ25vLXJlZmVycmVyJ1xuICB9XG5cbiAgLy8gMy4gU2V0IHVybOKAmXMgdXNlcm5hbWUgdG8gdGhlIGVtcHR5IHN0cmluZy5cbiAgdXJsLnVzZXJuYW1lID0gJydcblxuICAvLyA0LiBTZXQgdXJs4oCZcyBwYXNzd29yZCB0byB0aGUgZW1wdHkgc3RyaW5nLlxuICB1cmwucGFzc3dvcmQgPSAnJ1xuXG4gIC8vIDUuIFNldCB1cmzigJlzIGZyYWdtZW50IHRvIG51bGwuXG4gIHVybC5oYXNoID0gJydcblxuICAvLyA2LiBJZiB0aGUgb3JpZ2luLW9ubHkgZmxhZyBpcyB0cnVlLCB0aGVuOlxuICBpZiAob3JpZ2luT25seSkge1xuICAgIC8vIDEuIFNldCB1cmzigJlzIHBhdGggdG8gwqsgdGhlIGVtcHR5IHN0cmluZyDCuy5cbiAgICB1cmwucGF0aG5hbWUgPSAnJ1xuXG4gICAgLy8gMi4gU2V0IHVybOKAmXMgcXVlcnkgdG8gbnVsbC5cbiAgICB1cmwuc2VhcmNoID0gJydcbiAgfVxuXG4gIC8vIDcuIFJldHVybiB1cmwuXG4gIHJldHVybiB1cmxcbn1cblxuZnVuY3Rpb24gaXNVUkxQb3RlbnRpYWxseVRydXN0d29ydGh5ICh1cmwpIHtcbiAgaWYgKCEodXJsIGluc3RhbmNlb2YgVVJMKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gSWYgY2hpbGQgb2YgYWJvdXQsIHJldHVybiB0cnVlXG4gIGlmICh1cmwuaHJlZiA9PT0gJ2Fib3V0OmJsYW5rJyB8fCB1cmwuaHJlZiA9PT0gJ2Fib3V0OnNyY2RvYycpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gSWYgc2NoZW1lIGlzIGRhdGEsIHJldHVybiB0cnVlXG4gIGlmICh1cmwucHJvdG9jb2wgPT09ICdkYXRhOicpIHJldHVybiB0cnVlXG5cbiAgLy8gSWYgZmlsZSwgcmV0dXJuIHRydWVcbiAgaWYgKHVybC5wcm90b2NvbCA9PT0gJ2ZpbGU6JykgcmV0dXJuIHRydWVcblxuICByZXR1cm4gaXNPcmlnaW5Qb3RlbnRpYWxseVRydXN0d29ydGh5KHVybC5vcmlnaW4pXG5cbiAgZnVuY3Rpb24gaXNPcmlnaW5Qb3RlbnRpYWxseVRydXN0d29ydGh5IChvcmlnaW4pIHtcbiAgICAvLyBJZiBvcmlnaW4gaXMgZXhwbGljaXRseSBudWxsLCByZXR1cm4gZmFsc2VcbiAgICBpZiAob3JpZ2luID09IG51bGwgfHwgb3JpZ2luID09PSAnbnVsbCcpIHJldHVybiBmYWxzZVxuXG4gICAgY29uc3Qgb3JpZ2luQXNVUkwgPSBuZXcgVVJMKG9yaWdpbilcblxuICAgIC8vIElmIHNlY3VyZSwgcmV0dXJuIHRydWVcbiAgICBpZiAob3JpZ2luQXNVUkwucHJvdG9jb2wgPT09ICdodHRwczonIHx8IG9yaWdpbkFzVVJMLnByb3RvY29sID09PSAnd3NzOicpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgLy8gSWYgbG9jYWxob3N0IG9yIHZhcmlhbnRzLCByZXR1cm4gdHJ1ZVxuICAgIGlmICgvXjEyNyg/OlxcLlswLTldKyl7MCwyfVxcLlswLTldKyR8XlxcWyg/OjAqOikqPzo/MCoxXFxdJC8udGVzdChvcmlnaW5Bc1VSTC5ob3N0bmFtZSkgfHxcbiAgICAgKG9yaWdpbkFzVVJMLmhvc3RuYW1lID09PSAnbG9jYWxob3N0JyB8fCBvcmlnaW5Bc1VSTC5ob3N0bmFtZS5pbmNsdWRlcygnbG9jYWxob3N0LicpKSB8fFxuICAgICAob3JpZ2luQXNVUkwuaG9zdG5hbWUuZW5kc1dpdGgoJy5sb2NhbGhvc3QnKSkpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgLy8gSWYgYW55IG90aGVyLCByZXR1cm4gZmFsc2VcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1zdWJyZXNvdXJjZS1pbnRlZ3JpdHkvI2RvZXMtcmVzcG9uc2UtbWF0Y2gtbWV0YWRhdGFsaXN0XG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGJ5dGVzXG4gKiBAcGFyYW0ge3N0cmluZ30gbWV0YWRhdGFMaXN0XG4gKi9cbmZ1bmN0aW9uIGJ5dGVzTWF0Y2ggKGJ5dGVzLCBtZXRhZGF0YUxpc3QpIHtcbiAgLy8gSWYgbm9kZSBpcyBub3QgYnVpbHQgd2l0aCBPcGVuU1NMIHN1cHBvcnQsIHdlIGNhbm5vdCBjaGVja1xuICAvLyBhIHJlcXVlc3QncyBpbnRlZ3JpdHksIHNvIGFsbG93IGl0IGJ5IGRlZmF1bHQgKHRoZSBzcGVjIHdpbGxcbiAgLy8gYWxsb3cgcmVxdWVzdHMgaWYgYW4gaW52YWxpZCBoYXNoIGlzIGdpdmVuLCBhcyBwcmVjZWRlbmNlKS5cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmOiBvbmx5IGlmIG5vZGUgaXMgYnVpbHQgd2l0aCAtLXdpdGhvdXQtc3NsICovXG4gIGlmIChjcnlwdG8gPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyAxLiBMZXQgcGFyc2VkTWV0YWRhdGEgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIG1ldGFkYXRhTGlzdC5cbiAgY29uc3QgcGFyc2VkTWV0YWRhdGEgPSBwYXJzZU1ldGFkYXRhKG1ldGFkYXRhTGlzdClcblxuICAvLyAyLiBJZiBwYXJzZWRNZXRhZGF0YSBpcyBubyBtZXRhZGF0YSwgcmV0dXJuIHRydWUuXG4gIGlmIChwYXJzZWRNZXRhZGF0YSA9PT0gJ25vIG1ldGFkYXRhJykge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyAzLiBJZiByZXNwb25zZSBpcyBub3QgZWxpZ2libGUgZm9yIGludGVncml0eSB2YWxpZGF0aW9uLCByZXR1cm4gZmFsc2UuXG4gIC8vIFRPRE9cblxuICAvLyA0LiBJZiBwYXJzZWRNZXRhZGF0YSBpcyB0aGUgZW1wdHkgc2V0LCByZXR1cm4gdHJ1ZS5cbiAgaWYgKHBhcnNlZE1ldGFkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyA1LiBMZXQgbWV0YWRhdGEgYmUgdGhlIHJlc3VsdCBvZiBnZXR0aW5nIHRoZSBzdHJvbmdlc3RcbiAgLy8gICAgbWV0YWRhdGEgZnJvbSBwYXJzZWRNZXRhZGF0YS5cbiAgY29uc3Qgc3Ryb25nZXN0ID0gZ2V0U3Ryb25nZXN0TWV0YWRhdGEocGFyc2VkTWV0YWRhdGEpXG4gIGNvbnN0IG1ldGFkYXRhID0gZmlsdGVyTWV0YWRhdGFMaXN0QnlBbGdvcml0aG0ocGFyc2VkTWV0YWRhdGEsIHN0cm9uZ2VzdClcblxuICAvLyA2LiBGb3IgZWFjaCBpdGVtIGluIG1ldGFkYXRhOlxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgbWV0YWRhdGEpIHtcbiAgICAvLyAxLiBMZXQgYWxnb3JpdGhtIGJlIHRoZSBhbGcgY29tcG9uZW50IG9mIGl0ZW0uXG4gICAgY29uc3QgYWxnb3JpdGhtID0gaXRlbS5hbGdvXG5cbiAgICAvLyAyLiBMZXQgZXhwZWN0ZWRWYWx1ZSBiZSB0aGUgdmFsIGNvbXBvbmVudCBvZiBpdGVtLlxuICAgIGNvbnN0IGV4cGVjdGVkVmFsdWUgPSBpdGVtLmhhc2hcblxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vd2ViLXBsYXRmb3JtLXRlc3RzL3dwdC9jb21taXQvZTRjNWNjN2E1ZTQ4MDkzMjIwNTI4ZGZkZDFjNDAxMmRjMzgzN2EwZVxuICAgIC8vIFwiYmUgbGliZXJhbCB3aXRoIHBhZGRpbmdcIi4gVGhpcyBpcyBhbm5veWluZywgYW5kIGl0J3Mgbm90IGV2ZW4gaW4gdGhlIHNwZWMuXG5cbiAgICAvLyAzLiBMZXQgYWN0dWFsVmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBhcHBseWluZyBhbGdvcml0aG0gdG8gYnl0ZXMuXG4gICAgbGV0IGFjdHVhbFZhbHVlID0gY3J5cHRvLmNyZWF0ZUhhc2goYWxnb3JpdGhtKS51cGRhdGUoYnl0ZXMpLmRpZ2VzdCgnYmFzZTY0JylcblxuICAgIGlmIChhY3R1YWxWYWx1ZVthY3R1YWxWYWx1ZS5sZW5ndGggLSAxXSA9PT0gJz0nKSB7XG4gICAgICBpZiAoYWN0dWFsVmFsdWVbYWN0dWFsVmFsdWUubGVuZ3RoIC0gMl0gPT09ICc9Jykge1xuICAgICAgICBhY3R1YWxWYWx1ZSA9IGFjdHVhbFZhbHVlLnNsaWNlKDAsIC0yKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWN0dWFsVmFsdWUgPSBhY3R1YWxWYWx1ZS5zbGljZSgwLCAtMSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA0LiBJZiBhY3R1YWxWYWx1ZSBpcyBhIGNhc2Utc2Vuc2l0aXZlIG1hdGNoIGZvciBleHBlY3RlZFZhbHVlLFxuICAgIC8vICAgIHJldHVybiB0cnVlLlxuICAgIGlmIChjb21wYXJlQmFzZTY0TWl4ZWQoYWN0dWFsVmFsdWUsIGV4cGVjdGVkVmFsdWUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxuXG4gIC8vIDcuIFJldHVybiBmYWxzZS5cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtc3VicmVzb3VyY2UtaW50ZWdyaXR5LyNncmFtbWFyZGVmLWhhc2gtd2l0aC1vcHRpb25zXG4vLyBodHRwczovL3d3dy53My5vcmcvVFIvQ1NQMi8jc291cmNlLWxpc3Qtc3ludGF4XG4vLyBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNTIzNCNhcHBlbmRpeC1CLjFcbmNvbnN0IHBhcnNlSGFzaFdpdGhPcHRpb25zID0gLyg/PGFsZ28+c2hhMjU2fHNoYTM4NHxzaGE1MTIpLSgoPzxoYXNoPltBLVphLXowLTkrL10rfFtBLVphLXowLTlfLV0rKT17MCwyfSg/Olxcc3wkKSggK1shLX5dKik/KT8vaVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1zdWJyZXNvdXJjZS1pbnRlZ3JpdHkvI3BhcnNlLW1ldGFkYXRhXG4gKiBAcGFyYW0ge3N0cmluZ30gbWV0YWRhdGFcbiAqL1xuZnVuY3Rpb24gcGFyc2VNZXRhZGF0YSAobWV0YWRhdGEpIHtcbiAgLy8gMS4gTGV0IHJlc3VsdCBiZSB0aGUgZW1wdHkgc2V0LlxuICAvKiogQHR5cGUge3sgYWxnbzogc3RyaW5nLCBoYXNoOiBzdHJpbmcgfVtdfSAqL1xuICBjb25zdCByZXN1bHQgPSBbXVxuXG4gIC8vIDIuIExldCBlbXB0eSBiZSBlcXVhbCB0byB0cnVlLlxuICBsZXQgZW1wdHkgPSB0cnVlXG5cbiAgLy8gMy4gRm9yIGVhY2ggdG9rZW4gcmV0dXJuZWQgYnkgc3BsaXR0aW5nIG1ldGFkYXRhIG9uIHNwYWNlczpcbiAgZm9yIChjb25zdCB0b2tlbiBvZiBtZXRhZGF0YS5zcGxpdCgnICcpKSB7XG4gICAgLy8gMS4gU2V0IGVtcHR5IHRvIGZhbHNlLlxuICAgIGVtcHR5ID0gZmFsc2VcblxuICAgIC8vIDIuIFBhcnNlIHRva2VuIGFzIGEgaGFzaC13aXRoLW9wdGlvbnMuXG4gICAgY29uc3QgcGFyc2VkVG9rZW4gPSBwYXJzZUhhc2hXaXRoT3B0aW9ucy5leGVjKHRva2VuKVxuXG4gICAgLy8gMy4gSWYgdG9rZW4gZG9lcyBub3QgcGFyc2UsIGNvbnRpbnVlIHRvIHRoZSBuZXh0IHRva2VuLlxuICAgIGlmIChcbiAgICAgIHBhcnNlZFRva2VuID09PSBudWxsIHx8XG4gICAgICBwYXJzZWRUb2tlbi5ncm91cHMgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgcGFyc2VkVG9rZW4uZ3JvdXBzLmFsZ28gPT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgLy8gTm90ZTogQ2hyb21pdW0gYmxvY2tzIHRoZSByZXF1ZXN0IGF0IHRoaXMgcG9pbnQsIGJ1dCBGaXJlZm94XG4gICAgICAvLyBnaXZlcyBhIHdhcm5pbmcgdGhhdCBhbiBpbnZhbGlkIGludGVncml0eSB3YXMgZ2l2ZW4uIFRoZVxuICAgICAgLy8gY29ycmVjdCBiZWhhdmlvciBpcyB0byBpZ25vcmUgdGhlc2UsIGFuZCBzdWJzZXF1ZW50bHkgbm90XG4gICAgICAvLyBjaGVjayB0aGUgaW50ZWdyaXR5IG9mIHRoZSByZXNvdXJjZS5cbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgLy8gNC4gTGV0IGFsZ29yaXRobSBiZSB0aGUgaGFzaC1hbGdvIGNvbXBvbmVudCBvZiB0b2tlbi5cbiAgICBjb25zdCBhbGdvcml0aG0gPSBwYXJzZWRUb2tlbi5ncm91cHMuYWxnby50b0xvd2VyQ2FzZSgpXG5cbiAgICAvLyA1LiBJZiBhbGdvcml0aG0gaXMgYSBoYXNoIGZ1bmN0aW9uIHJlY29nbml6ZWQgYnkgdGhlIHVzZXJcbiAgICAvLyAgICBhZ2VudCwgYWRkIHRoZSBwYXJzZWQgdG9rZW4gdG8gcmVzdWx0LlxuICAgIGlmIChzdXBwb3J0ZWRIYXNoZXMuaW5jbHVkZXMoYWxnb3JpdGhtKSkge1xuICAgICAgcmVzdWx0LnB1c2gocGFyc2VkVG9rZW4uZ3JvdXBzKVxuICAgIH1cbiAgfVxuXG4gIC8vIDQuIFJldHVybiBubyBtZXRhZGF0YSBpZiBlbXB0eSBpcyB0cnVlLCBvdGhlcndpc2UgcmV0dXJuIHJlc3VsdC5cbiAgaWYgKGVtcHR5ID09PSB0cnVlKSB7XG4gICAgcmV0dXJuICdubyBtZXRhZGF0YSdcbiAgfVxuXG4gIHJldHVybiByZXN1bHRcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3sgYWxnbzogJ3NoYTI1NicgfCAnc2hhMzg0JyB8ICdzaGE1MTInIH1bXX0gbWV0YWRhdGFMaXN0XG4gKi9cbmZ1bmN0aW9uIGdldFN0cm9uZ2VzdE1ldGFkYXRhIChtZXRhZGF0YUxpc3QpIHtcbiAgLy8gTGV0IGFsZ29yaXRobSBiZSB0aGUgYWxnbyBjb21wb25lbnQgb2YgdGhlIGZpcnN0IGl0ZW0gaW4gbWV0YWRhdGFMaXN0LlxuICAvLyBDYW4gYmUgc2hhMjU2XG4gIGxldCBhbGdvcml0aG0gPSBtZXRhZGF0YUxpc3RbMF0uYWxnb1xuICAvLyBJZiB0aGUgYWxnb3JpdGhtIGlzIHNoYTUxMiwgdGhlbiBpdCBpcyB0aGUgc3Ryb25nZXN0XG4gIC8vIGFuZCB3ZSBjYW4gcmV0dXJuIGltbWVkaWF0ZWx5XG4gIGlmIChhbGdvcml0aG1bM10gPT09ICc1Jykge1xuICAgIHJldHVybiBhbGdvcml0aG1cbiAgfVxuXG4gIGZvciAobGV0IGkgPSAxOyBpIDwgbWV0YWRhdGFMaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgbWV0YWRhdGEgPSBtZXRhZGF0YUxpc3RbaV1cbiAgICAvLyBJZiB0aGUgYWxnb3JpdGhtIGlzIHNoYTUxMiwgdGhlbiBpdCBpcyB0aGUgc3Ryb25nZXN0XG4gICAgLy8gYW5kIHdlIGNhbiBicmVhayB0aGUgbG9vcCBpbW1lZGlhdGVseVxuICAgIGlmIChtZXRhZGF0YS5hbGdvWzNdID09PSAnNScpIHtcbiAgICAgIGFsZ29yaXRobSA9ICdzaGE1MTInXG4gICAgICBicmVha1xuICAgIC8vIElmIHRoZSBhbGdvcml0aG0gaXMgc2hhMzg0LCB0aGVuIGEgcG90ZW50aWFsIHNoYTI1NiBvciBzaGEzODQgaXMgaWdub3JlZFxuICAgIH0gZWxzZSBpZiAoYWxnb3JpdGhtWzNdID09PSAnMycpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgLy8gYWxnb3JpdGhtIGlzIHNoYTI1NiwgY2hlY2sgaWYgYWxnb3JpdGhtIGlzIHNoYTM4NCBhbmQgaWYgc28sIHNldCBpdCBhc1xuICAgIC8vIHRoZSBzdHJvbmdlc3RcbiAgICB9IGVsc2UgaWYgKG1ldGFkYXRhLmFsZ29bM10gPT09ICczJykge1xuICAgICAgYWxnb3JpdGhtID0gJ3NoYTM4NCdcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGFsZ29yaXRobVxufVxuXG5mdW5jdGlvbiBmaWx0ZXJNZXRhZGF0YUxpc3RCeUFsZ29yaXRobSAobWV0YWRhdGFMaXN0LCBhbGdvcml0aG0pIHtcbiAgaWYgKG1ldGFkYXRhTGlzdC5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gbWV0YWRhdGFMaXN0XG4gIH1cblxuICBsZXQgcG9zID0gMFxuICBmb3IgKGxldCBpID0gMDsgaSA8IG1ldGFkYXRhTGlzdC5sZW5ndGg7ICsraSkge1xuICAgIGlmIChtZXRhZGF0YUxpc3RbaV0uYWxnbyA9PT0gYWxnb3JpdGhtKSB7XG4gICAgICBtZXRhZGF0YUxpc3RbcG9zKytdID0gbWV0YWRhdGFMaXN0W2ldXG4gICAgfVxuICB9XG5cbiAgbWV0YWRhdGFMaXN0Lmxlbmd0aCA9IHBvc1xuXG4gIHJldHVybiBtZXRhZGF0YUxpc3Rcbn1cblxuLyoqXG4gKiBDb21wYXJlcyB0d28gYmFzZTY0IHN0cmluZ3MsIGFsbG93aW5nIGZvciBiYXNlNjR1cmxcbiAqIGluIHRoZSBzZWNvbmQgc3RyaW5nLlxuICpcbiogQHBhcmFtIHtzdHJpbmd9IGFjdHVhbFZhbHVlIGFsd2F5cyBiYXNlNjRcbiAqIEBwYXJhbSB7c3RyaW5nfSBleHBlY3RlZFZhbHVlIGJhc2U2NCBvciBiYXNlNjR1cmxcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBjb21wYXJlQmFzZTY0TWl4ZWQgKGFjdHVhbFZhbHVlLCBleHBlY3RlZFZhbHVlKSB7XG4gIGlmIChhY3R1YWxWYWx1ZS5sZW5ndGggIT09IGV4cGVjdGVkVmFsdWUubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhY3R1YWxWYWx1ZS5sZW5ndGg7ICsraSkge1xuICAgIGlmIChhY3R1YWxWYWx1ZVtpXSAhPT0gZXhwZWN0ZWRWYWx1ZVtpXSkge1xuICAgICAgaWYgKFxuICAgICAgICAoYWN0dWFsVmFsdWVbaV0gPT09ICcrJyAmJiBleHBlY3RlZFZhbHVlW2ldID09PSAnLScpIHx8XG4gICAgICAgIChhY3R1YWxWYWx1ZVtpXSA9PT0gJy8nICYmIGV4cGVjdGVkVmFsdWVbaV0gPT09ICdfJylcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy11cGdyYWRlLWluc2VjdXJlLXJlcXVlc3RzLyN1cGdyYWRlLXJlcXVlc3RcbmZ1bmN0aW9uIHRyeVVwZ3JhZGVSZXF1ZXN0VG9BUG90ZW50aWFsbHlUcnVzdHdvcnRoeVVSTCAocmVxdWVzdCkge1xuICAvLyBUT0RPXG59XG5cbi8qKlxuICogQGxpbmsge2h0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL29yaWdpbi5odG1sI3NhbWUtb3JpZ2lufVxuICogQHBhcmFtIHtVUkx9IEFcbiAqIEBwYXJhbSB7VVJMfSBCXG4gKi9cbmZ1bmN0aW9uIHNhbWVPcmlnaW4gKEEsIEIpIHtcbiAgLy8gMS4gSWYgQSBhbmQgQiBhcmUgdGhlIHNhbWUgb3BhcXVlIG9yaWdpbiwgdGhlbiByZXR1cm4gdHJ1ZS5cbiAgaWYgKEEub3JpZ2luID09PSBCLm9yaWdpbiAmJiBBLm9yaWdpbiA9PT0gJ251bGwnKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8vIDIuIElmIEEgYW5kIEIgYXJlIGJvdGggdHVwbGUgb3JpZ2lucyBhbmQgdGhlaXIgc2NoZW1lcyxcbiAgLy8gICAgaG9zdHMsIGFuZCBwb3J0IGFyZSBpZGVudGljYWwsIHRoZW4gcmV0dXJuIHRydWUuXG4gIGlmIChBLnByb3RvY29sID09PSBCLnByb3RvY29sICYmIEEuaG9zdG5hbWUgPT09IEIuaG9zdG5hbWUgJiYgQS5wb3J0ID09PSBCLnBvcnQpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gMy4gUmV0dXJuIGZhbHNlLlxuICByZXR1cm4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gY3JlYXRlRGVmZXJyZWRQcm9taXNlICgpIHtcbiAgbGV0IHJlc1xuICBsZXQgcmVqXG4gIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgcmVzID0gcmVzb2x2ZVxuICAgIHJlaiA9IHJlamVjdFxuICB9KVxuXG4gIHJldHVybiB7IHByb21pc2UsIHJlc29sdmU6IHJlcywgcmVqZWN0OiByZWogfVxufVxuXG5mdW5jdGlvbiBpc0Fib3J0ZWQgKGZldGNoUGFyYW1zKSB7XG4gIHJldHVybiBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnN0YXRlID09PSAnYWJvcnRlZCdcbn1cblxuZnVuY3Rpb24gaXNDYW5jZWxsZWQgKGZldGNoUGFyYW1zKSB7XG4gIHJldHVybiBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnN0YXRlID09PSAnYWJvcnRlZCcgfHxcbiAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnN0YXRlID09PSAndGVybWluYXRlZCdcbn1cblxuY29uc3Qgbm9ybWFsaXplTWV0aG9kUmVjb3JkID0ge1xuICBkZWxldGU6ICdERUxFVEUnLFxuICBERUxFVEU6ICdERUxFVEUnLFxuICBnZXQ6ICdHRVQnLFxuICBHRVQ6ICdHRVQnLFxuICBoZWFkOiAnSEVBRCcsXG4gIEhFQUQ6ICdIRUFEJyxcbiAgb3B0aW9uczogJ09QVElPTlMnLFxuICBPUFRJT05TOiAnT1BUSU9OUycsXG4gIHBvc3Q6ICdQT1NUJyxcbiAgUE9TVDogJ1BPU1QnLFxuICBwdXQ6ICdQVVQnLFxuICBQVVQ6ICdQVVQnXG59XG5cbi8vIE5vdGU6IG9iamVjdCBwcm90b3R5cGVzIHNob3VsZCBub3QgYmUgYWJsZSB0byBiZSByZWZlcmVuY2VkLiBlLmcuIGBPYmplY3QjaGFzT3duUHJvcGVydHlgLlxuT2JqZWN0LnNldFByb3RvdHlwZU9mKG5vcm1hbGl6ZU1ldGhvZFJlY29yZCwgbnVsbClcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LW1ldGhvZC1ub3JtYWxpemVcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2RcbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplTWV0aG9kIChtZXRob2QpIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZU1ldGhvZFJlY29yZFttZXRob2QudG9Mb3dlckNhc2UoKV0gPz8gbWV0aG9kXG59XG5cbi8vIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNzZXJpYWxpemUtYS1qYXZhc2NyaXB0LXZhbHVlLXRvLWEtanNvbi1zdHJpbmdcbmZ1bmN0aW9uIHNlcmlhbGl6ZUphdmFzY3JpcHRWYWx1ZVRvSlNPTlN0cmluZyAodmFsdWUpIHtcbiAgLy8gMS4gTGV0IHJlc3VsdCBiZSA/IENhbGwoJUpTT04uc3RyaW5naWZ5JSwgdW5kZWZpbmVkLCDCqyB2YWx1ZSDCuykuXG4gIGNvbnN0IHJlc3VsdCA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKVxuXG4gIC8vIDIuIElmIHJlc3VsdCBpcyB1bmRlZmluZWQsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1ZhbHVlIGlzIG5vdCBKU09OIHNlcmlhbGl6YWJsZScpXG4gIH1cblxuICAvLyAzLiBBc3NlcnQ6IHJlc3VsdCBpcyBhIHN0cmluZy5cbiAgYXNzZXJ0KHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnKVxuXG4gIC8vIDQuIFJldHVybiByZXN1bHQuXG4gIHJldHVybiByZXN1bHRcbn1cblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0lMjVpdGVyYXRvcnByb3RvdHlwZSUyNS1vYmplY3RcbmNvbnN0IGVzSXRlcmF0b3JQcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoT2JqZWN0LmdldFByb3RvdHlwZU9mKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSkpXG5cbi8qKlxuICogQHNlZSBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2Rmbi1pdGVyYXRvci1wcm90b3R5cGUtb2JqZWN0XG4gKiBAcGFyYW0geygpID0+IHVua25vd25bXX0gaXRlcmF0b3JcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIG5hbWUgb2YgdGhlIGluc3RhbmNlXG4gKiBAcGFyYW0geydrZXknfCd2YWx1ZSd8J2tleSt2YWx1ZSd9IGtpbmRcbiAqL1xuZnVuY3Rpb24gbWFrZUl0ZXJhdG9yIChpdGVyYXRvciwgbmFtZSwga2luZCkge1xuICBjb25zdCBvYmplY3QgPSB7XG4gICAgaW5kZXg6IDAsXG4gICAga2luZCxcbiAgICB0YXJnZXQ6IGl0ZXJhdG9yXG4gIH1cblxuICBjb25zdCBpID0ge1xuICAgIG5leHQgKCkge1xuICAgICAgLy8gMS4gTGV0IGludGVyZmFjZSBiZSB0aGUgaW50ZXJmYWNlIGZvciB3aGljaCB0aGUgaXRlcmF0b3IgcHJvdG90eXBlIG9iamVjdCBleGlzdHMuXG5cbiAgICAgIC8vIDIuIExldCB0aGlzVmFsdWUgYmUgdGhlIHRoaXMgdmFsdWUuXG5cbiAgICAgIC8vIDMuIExldCBvYmplY3QgYmUgPyBUb09iamVjdCh0aGlzVmFsdWUpLlxuXG4gICAgICAvLyA0LiBJZiBvYmplY3QgaXMgYSBwbGF0Zm9ybSBvYmplY3QsIHRoZW4gcGVyZm9ybSBhIHNlY3VyaXR5XG4gICAgICAvLyAgICBjaGVjaywgcGFzc2luZzpcblxuICAgICAgLy8gNS4gSWYgb2JqZWN0IGlzIG5vdCBhIGRlZmF1bHQgaXRlcmF0b3Igb2JqZWN0IGZvciBpbnRlcmZhY2UsXG4gICAgICAvLyAgICB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgaWYgKE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKSAhPT0gaSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgIGAnbmV4dCcgY2FsbGVkIG9uIGFuIG9iamVjdCB0aGF0IGRvZXMgbm90IGltcGxlbWVudCBpbnRlcmZhY2UgJHtuYW1lfSBJdGVyYXRvci5gXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgLy8gNi4gTGV0IGluZGV4IGJlIG9iamVjdOKAmXMgaW5kZXguXG4gICAgICAvLyA3LiBMZXQga2luZCBiZSBvYmplY3TigJlzIGtpbmQuXG4gICAgICAvLyA4LiBMZXQgdmFsdWVzIGJlIG9iamVjdOKAmXMgdGFyZ2V0J3MgdmFsdWUgcGFpcnMgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAgY29uc3QgeyBpbmRleCwga2luZCwgdGFyZ2V0IH0gPSBvYmplY3RcbiAgICAgIGNvbnN0IHZhbHVlcyA9IHRhcmdldCgpXG5cbiAgICAgIC8vIDkuIExldCBsZW4gYmUgdGhlIGxlbmd0aCBvZiB2YWx1ZXMuXG4gICAgICBjb25zdCBsZW4gPSB2YWx1ZXMubGVuZ3RoXG5cbiAgICAgIC8vIDEwLiBJZiBpbmRleCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gbGVuLCB0aGVuIHJldHVyblxuICAgICAgLy8gICAgIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKS5cbiAgICAgIGlmIChpbmRleCA+PSBsZW4pIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9XG4gICAgICB9XG5cbiAgICAgIC8vIDExLiBMZXQgcGFpciBiZSB0aGUgZW50cnkgaW4gdmFsdWVzIGF0IGluZGV4IGluZGV4LlxuICAgICAgY29uc3QgcGFpciA9IHZhbHVlc1tpbmRleF1cblxuICAgICAgLy8gMTIuIFNldCBvYmplY3TigJlzIGluZGV4IHRvIGluZGV4ICsgMS5cbiAgICAgIG9iamVjdC5pbmRleCA9IGluZGV4ICsgMVxuXG4gICAgICAvLyAxMy4gUmV0dXJuIHRoZSBpdGVyYXRvciByZXN1bHQgZm9yIHBhaXIgYW5kIGtpbmQuXG4gICAgICByZXR1cm4gaXRlcmF0b3JSZXN1bHQocGFpciwga2luZClcbiAgICB9LFxuICAgIC8vIFRoZSBjbGFzcyBzdHJpbmcgb2YgYW4gaXRlcmF0b3IgcHJvdG90eXBlIG9iamVjdCBmb3IgYSBnaXZlbiBpbnRlcmZhY2UgaXMgdGhlXG4gICAgLy8gcmVzdWx0IG9mIGNvbmNhdGVuYXRpbmcgdGhlIGlkZW50aWZpZXIgb2YgdGhlIGludGVyZmFjZSBhbmQgdGhlIHN0cmluZyBcIiBJdGVyYXRvclwiLlxuICAgIFtTeW1ib2wudG9TdHJpbmdUYWddOiBgJHtuYW1lfSBJdGVyYXRvcmBcbiAgfVxuXG4gIC8vIFRoZSBbW1Byb3RvdHlwZV1dIGludGVybmFsIHNsb3Qgb2YgYW4gaXRlcmF0b3IgcHJvdG90eXBlIG9iamVjdCBtdXN0IGJlICVJdGVyYXRvclByb3RvdHlwZSUuXG4gIE9iamVjdC5zZXRQcm90b3R5cGVPZihpLCBlc0l0ZXJhdG9yUHJvdG90eXBlKVxuICAvLyBlc0l0ZXJhdG9yUHJvdG90eXBlIG5lZWRzIHRvIGJlIHRoZSBwcm90b3R5cGUgb2YgaVxuICAvLyB3aGljaCBpcyB0aGUgcHJvdG90eXBlIG9mIGFuIGVtcHR5IG9iamVjdC4gWWVzLCBpdCdzIGNvbmZ1c2luZy5cbiAgcmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZih7fSwgaSlcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNpdGVyYXRvci1yZXN1bHRcbmZ1bmN0aW9uIGl0ZXJhdG9yUmVzdWx0IChwYWlyLCBraW5kKSB7XG4gIGxldCByZXN1bHRcblxuICAvLyAxLiBMZXQgcmVzdWx0IGJlIGEgdmFsdWUgZGV0ZXJtaW5lZCBieSB0aGUgdmFsdWUgb2Yga2luZDpcbiAgc3dpdGNoIChraW5kKSB7XG4gICAgY2FzZSAna2V5Jzoge1xuICAgICAgLy8gMS4gTGV0IGlkbEtleSBiZSBwYWly4oCZcyBrZXkuXG4gICAgICAvLyAyLiBMZXQga2V5IGJlIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBpZGxLZXkgdG8gYW5cbiAgICAgIC8vICAgIEVDTUFTY3JpcHQgdmFsdWUuXG4gICAgICAvLyAzLiByZXN1bHQgaXMga2V5LlxuICAgICAgcmVzdWx0ID0gcGFpclswXVxuICAgICAgYnJlYWtcbiAgICB9XG4gICAgY2FzZSAndmFsdWUnOiB7XG4gICAgICAvLyAxLiBMZXQgaWRsVmFsdWUgYmUgcGFpcuKAmXMgdmFsdWUuXG4gICAgICAvLyAyLiBMZXQgdmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIGlkbFZhbHVlIHRvXG4gICAgICAvLyAgICBhbiBFQ01BU2NyaXB0IHZhbHVlLlxuICAgICAgLy8gMy4gcmVzdWx0IGlzIHZhbHVlLlxuICAgICAgcmVzdWx0ID0gcGFpclsxXVxuICAgICAgYnJlYWtcbiAgICB9XG4gICAgY2FzZSAna2V5K3ZhbHVlJzoge1xuICAgICAgLy8gMS4gTGV0IGlkbEtleSBiZSBwYWly4oCZcyBrZXkuXG4gICAgICAvLyAyLiBMZXQgaWRsVmFsdWUgYmUgcGFpcuKAmXMgdmFsdWUuXG4gICAgICAvLyAzLiBMZXQga2V5IGJlIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBpZGxLZXkgdG8gYW5cbiAgICAgIC8vICAgIEVDTUFTY3JpcHQgdmFsdWUuXG4gICAgICAvLyA0LiBMZXQgdmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIGlkbFZhbHVlIHRvXG4gICAgICAvLyAgICBhbiBFQ01BU2NyaXB0IHZhbHVlLlxuICAgICAgLy8gNS4gTGV0IGFycmF5IGJlICEgQXJyYXlDcmVhdGUoMikuXG4gICAgICAvLyA2LiBDYWxsICEgQ3JlYXRlRGF0YVByb3BlcnR5KGFycmF5LCBcIjBcIiwga2V5KS5cbiAgICAgIC8vIDcuIENhbGwgISBDcmVhdGVEYXRhUHJvcGVydHkoYXJyYXksIFwiMVwiLCB2YWx1ZSkuXG4gICAgICAvLyA4LiByZXN1bHQgaXMgYXJyYXkuXG4gICAgICByZXN1bHQgPSBwYWlyXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIC8vIDIuIFJldHVybiBDcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHJlc3VsdCwgZmFsc2UpLlxuICByZXR1cm4geyB2YWx1ZTogcmVzdWx0LCBkb25lOiBmYWxzZSB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYm9keS1mdWxseS1yZWFkXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZ1bGx5UmVhZEJvZHkgKGJvZHksIHByb2Nlc3NCb2R5LCBwcm9jZXNzQm9keUVycm9yKSB7XG4gIC8vIDEuIElmIHRhc2tEZXN0aW5hdGlvbiBpcyBudWxsLCB0aGVuIHNldCB0YXNrRGVzdGluYXRpb24gdG9cbiAgLy8gICAgdGhlIHJlc3VsdCBvZiBzdGFydGluZyBhIG5ldyBwYXJhbGxlbCBxdWV1ZS5cblxuICAvLyAyLiBMZXQgc3VjY2Vzc1N0ZXBzIGdpdmVuIGEgYnl0ZSBzZXF1ZW5jZSBieXRlcyBiZSB0byBxdWV1ZSBhXG4gIC8vICAgIGZldGNoIHRhc2sgdG8gcnVuIHByb2Nlc3NCb2R5IGdpdmVuIGJ5dGVzLCB3aXRoIHRhc2tEZXN0aW5hdGlvbi5cbiAgY29uc3Qgc3VjY2Vzc1N0ZXBzID0gcHJvY2Vzc0JvZHlcblxuICAvLyAzLiBMZXQgZXJyb3JTdGVwcyBiZSB0byBxdWV1ZSBhIGZldGNoIHRhc2sgdG8gcnVuIHByb2Nlc3NCb2R5RXJyb3IsXG4gIC8vICAgIHdpdGggdGFza0Rlc3RpbmF0aW9uLlxuICBjb25zdCBlcnJvclN0ZXBzID0gcHJvY2Vzc0JvZHlFcnJvclxuXG4gIC8vIDQuIExldCByZWFkZXIgYmUgdGhlIHJlc3VsdCBvZiBnZXR0aW5nIGEgcmVhZGVyIGZvciBib2R54oCZcyBzdHJlYW0uXG4gIC8vICAgIElmIHRoYXQgdGhyZXcgYW4gZXhjZXB0aW9uLCB0aGVuIHJ1biBlcnJvclN0ZXBzIHdpdGggdGhhdFxuICAvLyAgICBleGNlcHRpb24gYW5kIHJldHVybi5cbiAgbGV0IHJlYWRlclxuXG4gIHRyeSB7XG4gICAgcmVhZGVyID0gYm9keS5zdHJlYW0uZ2V0UmVhZGVyKClcbiAgfSBjYXRjaCAoZSkge1xuICAgIGVycm9yU3RlcHMoZSlcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIDUuIFJlYWQgYWxsIGJ5dGVzIGZyb20gcmVhZGVyLCBnaXZlbiBzdWNjZXNzU3RlcHMgYW5kIGVycm9yU3RlcHMuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVhZEFsbEJ5dGVzKHJlYWRlcilcbiAgICBzdWNjZXNzU3RlcHMocmVzdWx0KVxuICB9IGNhdGNoIChlKSB7XG4gICAgZXJyb3JTdGVwcyhlKVxuICB9XG59XG5cbi8qKiBAdHlwZSB7UmVhZGFibGVTdHJlYW19ICovXG5sZXQgUmVhZGFibGVTdHJlYW0gPSBnbG9iYWxUaGlzLlJlYWRhYmxlU3RyZWFtXG5cbmZ1bmN0aW9uIGlzUmVhZGFibGVTdHJlYW1MaWtlIChzdHJlYW0pIHtcbiAgaWYgKCFSZWFkYWJsZVN0cmVhbSkge1xuICAgIFJlYWRhYmxlU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtL3dlYicpLlJlYWRhYmxlU3RyZWFtXG4gIH1cblxuICByZXR1cm4gc3RyZWFtIGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW0gfHwgKFxuICAgIHN0cmVhbVtTeW1ib2wudG9TdHJpbmdUYWddID09PSAnUmVhZGFibGVTdHJlYW0nICYmXG4gICAgdHlwZW9mIHN0cmVhbS50ZWUgPT09ICdmdW5jdGlvbidcbiAgKVxufVxuXG5jb25zdCBNQVhJTVVNX0FSR1VNRU5UX0xFTkdUSCA9IDY1NTM1XG5cbi8qKlxuICogQHNlZSBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jaXNvbW9ycGhpYy1kZWNvZGVcbiAqIEBwYXJhbSB7bnVtYmVyW118VWludDhBcnJheX0gaW5wdXRcbiAqL1xuZnVuY3Rpb24gaXNvbW9ycGhpY0RlY29kZSAoaW5wdXQpIHtcbiAgLy8gMS4gVG8gaXNvbW9ycGhpYyBkZWNvZGUgYSBieXRlIHNlcXVlbmNlIGlucHV0LCByZXR1cm4gYSBzdHJpbmcgd2hvc2UgY29kZSBwb2ludFxuICAvLyAgICBsZW5ndGggaXMgZXF1YWwgdG8gaW5wdXTigJlzIGxlbmd0aCBhbmQgd2hvc2UgY29kZSBwb2ludHMgaGF2ZSB0aGUgc2FtZSB2YWx1ZXNcbiAgLy8gICAgYXMgdGhlIHZhbHVlcyBvZiBpbnB1dOKAmXMgYnl0ZXMsIGluIHRoZSBzYW1lIG9yZGVyLlxuXG4gIGlmIChpbnB1dC5sZW5ndGggPCBNQVhJTVVNX0FSR1VNRU5UX0xFTkdUSCkge1xuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKC4uLmlucHV0KVxuICB9XG5cbiAgcmV0dXJuIGlucHV0LnJlZHVjZSgocHJldmlvdXMsIGN1cnJlbnQpID0+IHByZXZpb3VzICsgU3RyaW5nLmZyb21DaGFyQ29kZShjdXJyZW50KSwgJycpXG59XG5cbi8qKlxuICogQHBhcmFtIHtSZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXI8VWludDhBcnJheT59IGNvbnRyb2xsZXJcbiAqL1xuZnVuY3Rpb24gcmVhZGFibGVTdHJlYW1DbG9zZSAoY29udHJvbGxlcikge1xuICB0cnkge1xuICAgIGNvbnRyb2xsZXIuY2xvc2UoKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBUT0RPOiBhZGQgY29tbWVudCBleHBsYWluaW5nIHdoeSB0aGlzIGVycm9yIG9jY3Vycy5cbiAgICBpZiAoIWVyci5tZXNzYWdlLmluY2x1ZGVzKCdDb250cm9sbGVyIGlzIGFscmVhZHkgY2xvc2VkJykpIHtcbiAgICAgIHRocm93IGVyclxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2lzb21vcnBoaWMtZW5jb2RlXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRcbiAqL1xuZnVuY3Rpb24gaXNvbW9ycGhpY0VuY29kZSAoaW5wdXQpIHtcbiAgLy8gMS4gQXNzZXJ0OiBpbnB1dCBjb250YWlucyBubyBjb2RlIHBvaW50cyBncmVhdGVyIHRoYW4gVSswMEZGLlxuICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgYXNzZXJ0KGlucHV0LmNoYXJDb2RlQXQoaSkgPD0gMHhGRilcbiAgfVxuXG4gIC8vIDIuIFJldHVybiBhIGJ5dGUgc2VxdWVuY2Ugd2hvc2UgbGVuZ3RoIGlzIGVxdWFsIHRvIGlucHV04oCZcyBjb2RlXG4gIC8vICAgIHBvaW50IGxlbmd0aCBhbmQgd2hvc2UgYnl0ZXMgaGF2ZSB0aGUgc2FtZSB2YWx1ZXMgYXMgdGhlXG4gIC8vICAgIHZhbHVlcyBvZiBpbnB1dOKAmXMgY29kZSBwb2ludHMsIGluIHRoZSBzYW1lIG9yZGVyXG4gIHJldHVybiBpbnB1dFxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9zdHJlYW1zLnNwZWMud2hhdHdnLm9yZy8jcmVhZGFibGVzdHJlYW1kZWZhdWx0cmVhZGVyLXJlYWQtYWxsLWJ5dGVzXG4gKiBAc2VlIGh0dHBzOi8vc3RyZWFtcy5zcGVjLndoYXR3Zy5vcmcvI3JlYWQtbG9vcFxuICogQHBhcmFtIHtSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXJ9IHJlYWRlclxuICovXG5hc3luYyBmdW5jdGlvbiByZWFkQWxsQnl0ZXMgKHJlYWRlcikge1xuICBjb25zdCBieXRlcyA9IFtdXG4gIGxldCBieXRlTGVuZ3RoID0gMFxuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgeyBkb25lLCB2YWx1ZTogY2h1bmsgfSA9IGF3YWl0IHJlYWRlci5yZWFkKClcblxuICAgIGlmIChkb25lKSB7XG4gICAgICAvLyAxLiBDYWxsIHN1Y2Nlc3NTdGVwcyB3aXRoIGJ5dGVzLlxuICAgICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoYnl0ZXMsIGJ5dGVMZW5ndGgpXG4gICAgfVxuXG4gICAgLy8gMS4gSWYgY2h1bmsgaXMgbm90IGEgVWludDhBcnJheSBvYmplY3QsIGNhbGwgZmFpbHVyZVN0ZXBzXG4gICAgLy8gICAgd2l0aCBhIFR5cGVFcnJvciBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMuXG4gICAgaWYgKCFpc1VpbnQ4QXJyYXkoY2h1bmspKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWNlaXZlZCBub24tVWludDhBcnJheSBjaHVuaycpXG4gICAgfVxuXG4gICAgLy8gMi4gQXBwZW5kIHRoZSBieXRlcyByZXByZXNlbnRlZCBieSBjaHVuayB0byBieXRlcy5cbiAgICBieXRlcy5wdXNoKGNodW5rKVxuICAgIGJ5dGVMZW5ndGggKz0gY2h1bmsubGVuZ3RoXG5cbiAgICAvLyAzLiBSZWFkLWxvb3AgZ2l2ZW4gcmVhZGVyLCBieXRlcywgc3VjY2Vzc1N0ZXBzLCBhbmQgZmFpbHVyZVN0ZXBzLlxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaXMtbG9jYWxcbiAqIEBwYXJhbSB7VVJMfSB1cmxcbiAqL1xuZnVuY3Rpb24gdXJsSXNMb2NhbCAodXJsKSB7XG4gIGFzc2VydCgncHJvdG9jb2wnIGluIHVybCkgLy8gZW5zdXJlIGl0J3MgYSB1cmwgb2JqZWN0XG5cbiAgY29uc3QgcHJvdG9jb2wgPSB1cmwucHJvdG9jb2xcblxuICByZXR1cm4gcHJvdG9jb2wgPT09ICdhYm91dDonIHx8IHByb3RvY29sID09PSAnYmxvYjonIHx8IHByb3RvY29sID09PSAnZGF0YTonXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd8VVJMfSB1cmxcbiAqL1xuZnVuY3Rpb24gdXJsSGFzSHR0cHNTY2hlbWUgKHVybCkge1xuICBpZiAodHlwZW9mIHVybCA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdXJsLnN0YXJ0c1dpdGgoJ2h0dHBzOicpXG4gIH1cblxuICByZXR1cm4gdXJsLnByb3RvY29sID09PSAnaHR0cHM6J1xufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtc2NoZW1lXG4gKiBAcGFyYW0ge1VSTH0gdXJsXG4gKi9cbmZ1bmN0aW9uIHVybElzSHR0cEh0dHBzU2NoZW1lICh1cmwpIHtcbiAgYXNzZXJ0KCdwcm90b2NvbCcgaW4gdXJsKSAvLyBlbnN1cmUgaXQncyBhIHVybCBvYmplY3RcblxuICBjb25zdCBwcm90b2NvbCA9IHVybC5wcm90b2NvbFxuXG4gIHJldHVybiBwcm90b2NvbCA9PT0gJ2h0dHA6JyB8fCBwcm90b2NvbCA9PT0gJ2h0dHBzOidcbn1cblxuLyoqXG4gKiBGZXRjaCBzdXBwb3J0cyBub2RlID49IDE2LjguMCwgYnV0IE9iamVjdC5oYXNPd24gd2FzIGFkZGVkIGluIHYxNi45LjAuXG4gKi9cbmNvbnN0IGhhc093biA9IE9iamVjdC5oYXNPd24gfHwgKChkaWN0LCBrZXkpID0+IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkaWN0LCBrZXkpKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXNBYm9ydGVkLFxuICBpc0NhbmNlbGxlZCxcbiAgY3JlYXRlRGVmZXJyZWRQcm9taXNlLFxuICBSZWFkYWJsZVN0cmVhbUZyb20sXG4gIHRvVVNWU3RyaW5nLFxuICB0cnlVcGdyYWRlUmVxdWVzdFRvQVBvdGVudGlhbGx5VHJ1c3R3b3J0aHlVUkwsXG4gIGNvYXJzZW5lZFNoYXJlZEN1cnJlbnRUaW1lLFxuICBkZXRlcm1pbmVSZXF1ZXN0c1JlZmVycmVyLFxuICBtYWtlUG9saWN5Q29udGFpbmVyLFxuICBjbG9uZVBvbGljeUNvbnRhaW5lcixcbiAgYXBwZW5kRmV0Y2hNZXRhZGF0YSxcbiAgYXBwZW5kUmVxdWVzdE9yaWdpbkhlYWRlcixcbiAgVEFPQ2hlY2ssXG4gIGNvcnNDaGVjayxcbiAgY3Jvc3NPcmlnaW5SZXNvdXJjZVBvbGljeUNoZWNrLFxuICBjcmVhdGVPcGFxdWVUaW1pbmdJbmZvLFxuICBzZXRSZXF1ZXN0UmVmZXJyZXJQb2xpY3lPblJlZGlyZWN0LFxuICBpc1ZhbGlkSFRUUFRva2VuLFxuICByZXF1ZXN0QmFkUG9ydCxcbiAgcmVxdWVzdEN1cnJlbnRVUkwsXG4gIHJlc3BvbnNlVVJMLFxuICByZXNwb25zZUxvY2F0aW9uVVJMLFxuICBpc0Jsb2JMaWtlLFxuICBpc1VSTFBvdGVudGlhbGx5VHJ1c3R3b3J0aHksXG4gIGlzVmFsaWRSZWFzb25QaHJhc2UsXG4gIHNhbWVPcmlnaW4sXG4gIG5vcm1hbGl6ZU1ldGhvZCxcbiAgc2VyaWFsaXplSmF2YXNjcmlwdFZhbHVlVG9KU09OU3RyaW5nLFxuICBtYWtlSXRlcmF0b3IsXG4gIGlzVmFsaWRIZWFkZXJOYW1lLFxuICBpc1ZhbGlkSGVhZGVyVmFsdWUsXG4gIGhhc093bixcbiAgaXNFcnJvckxpa2UsXG4gIGZ1bGx5UmVhZEJvZHksXG4gIGJ5dGVzTWF0Y2gsXG4gIGlzUmVhZGFibGVTdHJlYW1MaWtlLFxuICByZWFkYWJsZVN0cmVhbUNsb3NlLFxuICBpc29tb3JwaGljRW5jb2RlLFxuICBpc29tb3JwaGljRGVjb2RlLFxuICB1cmxJc0xvY2FsLFxuICB1cmxIYXNIdHRwc1NjaGVtZSxcbiAgdXJsSXNIdHRwSHR0cHNTY2hlbWUsXG4gIHJlYWRBbGxCeXRlcyxcbiAgbm9ybWFsaXplTWV0aG9kUmVjb3JkLFxuICBwYXJzZU1ldGFkYXRhXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAga1VybDogU3ltYm9sKCd1cmwnKSxcbiAga0hlYWRlcnM6IFN5bWJvbCgnaGVhZGVycycpLFxuICBrU2lnbmFsOiBTeW1ib2woJ3NpZ25hbCcpLFxuICBrU3RhdGU6IFN5bWJvbCgnc3RhdGUnKSxcbiAga0d1YXJkOiBTeW1ib2woJ2d1YXJkJyksXG4gIGtSZWFsbTogU3ltYm9sKCdyZWFsbScpXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHR5cGVzIH0gPSByZXF1aXJlKCd1dGlsJylcbmNvbnN0IHsgaGFzT3duLCB0b1VTVlN0cmluZyB9ID0gcmVxdWlyZSgnLi91dGlsJylcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4uLy4uL3R5cGVzL3dlYmlkbCcpLldlYmlkbH0gKi9cbmNvbnN0IHdlYmlkbCA9IHt9XG53ZWJpZGwuY29udmVydGVycyA9IHt9XG53ZWJpZGwudXRpbCA9IHt9XG53ZWJpZGwuZXJyb3JzID0ge31cblxud2ViaWRsLmVycm9ycy5leGNlcHRpb24gPSBmdW5jdGlvbiAobWVzc2FnZSkge1xuICByZXR1cm4gbmV3IFR5cGVFcnJvcihgJHttZXNzYWdlLmhlYWRlcn06ICR7bWVzc2FnZS5tZXNzYWdlfWApXG59XG5cbndlYmlkbC5lcnJvcnMuY29udmVyc2lvbkZhaWxlZCA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gIGNvbnN0IHBsdXJhbCA9IGNvbnRleHQudHlwZXMubGVuZ3RoID09PSAxID8gJycgOiAnIG9uZSBvZidcbiAgY29uc3QgbWVzc2FnZSA9XG4gICAgYCR7Y29udGV4dC5hcmd1bWVudH0gY291bGQgbm90IGJlIGNvbnZlcnRlZCB0b2AgK1xuICAgIGAke3BsdXJhbH06ICR7Y29udGV4dC50eXBlcy5qb2luKCcsICcpfS5gXG5cbiAgcmV0dXJuIHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICBoZWFkZXI6IGNvbnRleHQucHJlZml4LFxuICAgIG1lc3NhZ2VcbiAgfSlcbn1cblxud2ViaWRsLmVycm9ycy5pbnZhbGlkQXJndW1lbnQgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuICByZXR1cm4gd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgIGhlYWRlcjogY29udGV4dC5wcmVmaXgsXG4gICAgbWVzc2FnZTogYFwiJHtjb250ZXh0LnZhbHVlfVwiIGlzIGFuIGludmFsaWQgJHtjb250ZXh0LnR5cGV9LmBcbiAgfSlcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNpbXBsZW1lbnRzXG53ZWJpZGwuYnJhbmRDaGVjayA9IGZ1bmN0aW9uIChWLCBJLCBvcHRzID0gdW5kZWZpbmVkKSB7XG4gIGlmIChvcHRzPy5zdHJpY3QgIT09IGZhbHNlICYmICEoViBpbnN0YW5jZW9mIEkpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSWxsZWdhbCBpbnZvY2F0aW9uJylcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gVj8uW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09IEkucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ11cbiAgfVxufVxuXG53ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayA9IGZ1bmN0aW9uICh7IGxlbmd0aCB9LCBtaW4sIGN0eCkge1xuICBpZiAobGVuZ3RoIDwgbWluKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgbWVzc2FnZTogYCR7bWlufSBhcmd1bWVudCR7bWluICE9PSAxID8gJ3MnIDogJyd9IHJlcXVpcmVkLCBgICtcbiAgICAgICAgICAgICAgIGBidXQke2xlbmd0aCA/ICcgb25seScgOiAnJ30gJHtsZW5ndGh9IGZvdW5kLmAsXG4gICAgICAuLi5jdHhcbiAgICB9KVxuICB9XG59XG5cbndlYmlkbC5pbGxlZ2FsQ29uc3RydWN0b3IgPSBmdW5jdGlvbiAoKSB7XG4gIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICBoZWFkZXI6ICdUeXBlRXJyb3InLFxuICAgIG1lc3NhZ2U6ICdJbGxlZ2FsIGNvbnN0cnVjdG9yJ1xuICB9KVxufVxuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWVjbWFzY3JpcHQtZGF0YS10eXBlcy1hbmQtdmFsdWVzXG53ZWJpZGwudXRpbC5UeXBlID0gZnVuY3Rpb24gKFYpIHtcbiAgc3dpdGNoICh0eXBlb2YgVikge1xuICAgIGNhc2UgJ3VuZGVmaW5lZCc6IHJldHVybiAnVW5kZWZpbmVkJ1xuICAgIGNhc2UgJ2Jvb2xlYW4nOiByZXR1cm4gJ0Jvb2xlYW4nXG4gICAgY2FzZSAnc3RyaW5nJzogcmV0dXJuICdTdHJpbmcnXG4gICAgY2FzZSAnc3ltYm9sJzogcmV0dXJuICdTeW1ib2wnXG4gICAgY2FzZSAnbnVtYmVyJzogcmV0dXJuICdOdW1iZXInXG4gICAgY2FzZSAnYmlnaW50JzogcmV0dXJuICdCaWdJbnQnXG4gICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgIGNhc2UgJ29iamVjdCc6IHtcbiAgICAgIGlmIChWID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnTnVsbCdcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICdPYmplY3QnXG4gICAgfVxuICB9XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jYWJzdHJhY3Qtb3BkZWYtY29udmVydHRvaW50XG53ZWJpZGwudXRpbC5Db252ZXJ0VG9JbnQgPSBmdW5jdGlvbiAoViwgYml0TGVuZ3RoLCBzaWduZWRuZXNzLCBvcHRzID0ge30pIHtcbiAgbGV0IHVwcGVyQm91bmRcbiAgbGV0IGxvd2VyQm91bmRcblxuICAvLyAxLiBJZiBiaXRMZW5ndGggaXMgNjQsIHRoZW46XG4gIGlmIChiaXRMZW5ndGggPT09IDY0KSB7XG4gICAgLy8gMS4gTGV0IHVwcGVyQm91bmQgYmUgMl41MyDiiJIgMS5cbiAgICB1cHBlckJvdW5kID0gTWF0aC5wb3coMiwgNTMpIC0gMVxuXG4gICAgLy8gMi4gSWYgc2lnbmVkbmVzcyBpcyBcInVuc2lnbmVkXCIsIHRoZW4gbGV0IGxvd2VyQm91bmQgYmUgMC5cbiAgICBpZiAoc2lnbmVkbmVzcyA9PT0gJ3Vuc2lnbmVkJykge1xuICAgICAgbG93ZXJCb3VuZCA9IDBcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gMy4gT3RoZXJ3aXNlIGxldCBsb3dlckJvdW5kIGJlIOKIkjJeNTMgKyAxLlxuICAgICAgbG93ZXJCb3VuZCA9IE1hdGgucG93KC0yLCA1MykgKyAxXG4gICAgfVxuICB9IGVsc2UgaWYgKHNpZ25lZG5lc3MgPT09ICd1bnNpZ25lZCcpIHtcbiAgICAvLyAyLiBPdGhlcndpc2UsIGlmIHNpZ25lZG5lc3MgaXMgXCJ1bnNpZ25lZFwiLCB0aGVuOlxuXG4gICAgLy8gMS4gTGV0IGxvd2VyQm91bmQgYmUgMC5cbiAgICBsb3dlckJvdW5kID0gMFxuXG4gICAgLy8gMi4gTGV0IHVwcGVyQm91bmQgYmUgMl5iaXRMZW5ndGgg4oiSIDEuXG4gICAgdXBwZXJCb3VuZCA9IE1hdGgucG93KDIsIGJpdExlbmd0aCkgLSAxXG4gIH0gZWxzZSB7XG4gICAgLy8gMy4gT3RoZXJ3aXNlOlxuXG4gICAgLy8gMS4gTGV0IGxvd2VyQm91bmQgYmUgLTJeYml0TGVuZ3RoIOKIkiAxLlxuICAgIGxvd2VyQm91bmQgPSBNYXRoLnBvdygtMiwgYml0TGVuZ3RoKSAtIDFcblxuICAgIC8vIDIuIExldCB1cHBlckJvdW5kIGJlIDJeYml0TGVuZ3RoIOKIkiAxIOKIkiAxLlxuICAgIHVwcGVyQm91bmQgPSBNYXRoLnBvdygyLCBiaXRMZW5ndGggLSAxKSAtIDFcbiAgfVxuXG4gIC8vIDQuIExldCB4IGJlID8gVG9OdW1iZXIoVikuXG4gIGxldCB4ID0gTnVtYmVyKFYpXG5cbiAgLy8gNS4gSWYgeCBpcyDiiJIwLCB0aGVuIHNldCB4IHRvICswLlxuICBpZiAoeCA9PT0gMCkge1xuICAgIHggPSAwXG4gIH1cblxuICAvLyA2LiBJZiB0aGUgY29udmVyc2lvbiBpcyB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtFbmZvcmNlUmFuZ2VdIGV4dGVuZGVkIGF0dHJpYnV0ZSwgdGhlbjpcbiAgaWYgKG9wdHMuZW5mb3JjZVJhbmdlID09PSB0cnVlKSB7XG4gICAgLy8gMS4gSWYgeCBpcyBOYU4sICviiJ4sIG9yIOKIkuKIniwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoXG4gICAgICBOdW1iZXIuaXNOYU4oeCkgfHxcbiAgICAgIHggPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSB8fFxuICAgICAgeCA9PT0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZXG4gICAgKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ0ludGVnZXIgY29udmVyc2lvbicsXG4gICAgICAgIG1lc3NhZ2U6IGBDb3VsZCBub3QgY29udmVydCAke1Z9IHRvIGFuIGludGVnZXIuYFxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAyLiBTZXQgeCB0byBJbnRlZ2VyUGFydCh4KS5cbiAgICB4ID0gd2ViaWRsLnV0aWwuSW50ZWdlclBhcnQoeClcblxuICAgIC8vIDMuIElmIHggPCBsb3dlckJvdW5kIG9yIHggPiB1cHBlckJvdW5kLCB0aGVuXG4gICAgLy8gICAgdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKHggPCBsb3dlckJvdW5kIHx8IHggPiB1cHBlckJvdW5kKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ0ludGVnZXIgY29udmVyc2lvbicsXG4gICAgICAgIG1lc3NhZ2U6IGBWYWx1ZSBtdXN0IGJlIGJldHdlZW4gJHtsb3dlckJvdW5kfS0ke3VwcGVyQm91bmR9LCBnb3QgJHt4fS5gXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDQuIFJldHVybiB4LlxuICAgIHJldHVybiB4XG4gIH1cblxuICAvLyA3LiBJZiB4IGlzIG5vdCBOYU4gYW5kIHRoZSBjb252ZXJzaW9uIGlzIHRvIGFuIElETFxuICAvLyAgICB0eXBlIGFzc29jaWF0ZWQgd2l0aCB0aGUgW0NsYW1wXSBleHRlbmRlZFxuICAvLyAgICBhdHRyaWJ1dGUsIHRoZW46XG4gIGlmICghTnVtYmVyLmlzTmFOKHgpICYmIG9wdHMuY2xhbXAgPT09IHRydWUpIHtcbiAgICAvLyAxLiBTZXQgeCB0byBtaW4obWF4KHgsIGxvd2VyQm91bmQpLCB1cHBlckJvdW5kKS5cbiAgICB4ID0gTWF0aC5taW4oTWF0aC5tYXgoeCwgbG93ZXJCb3VuZCksIHVwcGVyQm91bmQpXG5cbiAgICAvLyAyLiBSb3VuZCB4IHRvIHRoZSBuZWFyZXN0IGludGVnZXIsIGNob29zaW5nIHRoZVxuICAgIC8vICAgIGV2ZW4gaW50ZWdlciBpZiBpdCBsaWVzIGhhbGZ3YXkgYmV0d2VlbiB0d28sXG4gICAgLy8gICAgYW5kIGNob29zaW5nICswIHJhdGhlciB0aGFuIOKIkjAuXG4gICAgaWYgKE1hdGguZmxvb3IoeCkgJSAyID09PSAwKSB7XG4gICAgICB4ID0gTWF0aC5mbG9vcih4KVxuICAgIH0gZWxzZSB7XG4gICAgICB4ID0gTWF0aC5jZWlsKHgpXG4gICAgfVxuXG4gICAgLy8gMy4gUmV0dXJuIHguXG4gICAgcmV0dXJuIHhcbiAgfVxuXG4gIC8vIDguIElmIHggaXMgTmFOLCArMCwgK+KIniwgb3Ig4oiS4oieLCB0aGVuIHJldHVybiArMC5cbiAgaWYgKFxuICAgIE51bWJlci5pc05hTih4KSB8fFxuICAgICh4ID09PSAwICYmIE9iamVjdC5pcygwLCB4KSkgfHxcbiAgICB4ID09PSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkgfHxcbiAgICB4ID09PSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFlcbiAgKSB7XG4gICAgcmV0dXJuIDBcbiAgfVxuXG4gIC8vIDkuIFNldCB4IHRvIEludGVnZXJQYXJ0KHgpLlxuICB4ID0gd2ViaWRsLnV0aWwuSW50ZWdlclBhcnQoeClcblxuICAvLyAxMC4gU2V0IHggdG8geCBtb2R1bG8gMl5iaXRMZW5ndGguXG4gIHggPSB4ICUgTWF0aC5wb3coMiwgYml0TGVuZ3RoKVxuXG4gIC8vIDExLiBJZiBzaWduZWRuZXNzIGlzIFwic2lnbmVkXCIgYW5kIHgg4omlIDJeYml0TGVuZ3RoIOKIkiAxLFxuICAvLyAgICB0aGVuIHJldHVybiB4IOKIkiAyXmJpdExlbmd0aC5cbiAgaWYgKHNpZ25lZG5lc3MgPT09ICdzaWduZWQnICYmIHggPj0gTWF0aC5wb3coMiwgYml0TGVuZ3RoKSAtIDEpIHtcbiAgICByZXR1cm4geCAtIE1hdGgucG93KDIsIGJpdExlbmd0aClcbiAgfVxuXG4gIC8vIDEyLiBPdGhlcndpc2UsIHJldHVybiB4LlxuICByZXR1cm4geFxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2Fic3RyYWN0LW9wZGVmLWludGVnZXJwYXJ0XG53ZWJpZGwudXRpbC5JbnRlZ2VyUGFydCA9IGZ1bmN0aW9uIChuKSB7XG4gIC8vIDEuIExldCByIGJlIGZsb29yKGFicyhuKSkuXG4gIGNvbnN0IHIgPSBNYXRoLmZsb29yKE1hdGguYWJzKG4pKVxuXG4gIC8vIDIuIElmIG4gPCAwLCB0aGVuIHJldHVybiAtMSDDlyByLlxuICBpZiAobiA8IDApIHtcbiAgICByZXR1cm4gLTEgKiByXG4gIH1cblxuICAvLyAzLiBPdGhlcndpc2UsIHJldHVybiByLlxuICByZXR1cm4gclxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLXNlcXVlbmNlXG53ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIgPSBmdW5jdGlvbiAoY29udmVydGVyKSB7XG4gIHJldHVybiAoVikgPT4ge1xuICAgIC8vIDEuIElmIFR5cGUoVikgaXMgbm90IE9iamVjdCwgdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKHdlYmlkbC51dGlsLlR5cGUoVikgIT09ICdPYmplY3QnKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ1NlcXVlbmNlJyxcbiAgICAgICAgbWVzc2FnZTogYFZhbHVlIG9mIHR5cGUgJHt3ZWJpZGwudXRpbC5UeXBlKFYpfSBpcyBub3QgYW4gT2JqZWN0LmBcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gTGV0IG1ldGhvZCBiZSA/IEdldE1ldGhvZChWLCBAQGl0ZXJhdG9yKS5cbiAgICAvKiogQHR5cGUge0dlbmVyYXRvcn0gKi9cbiAgICBjb25zdCBtZXRob2QgPSBWPy5bU3ltYm9sLml0ZXJhdG9yXT8uKClcbiAgICBjb25zdCBzZXEgPSBbXVxuXG4gICAgLy8gMy4gSWYgbWV0aG9kIGlzIHVuZGVmaW5lZCwgdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKFxuICAgICAgbWV0aG9kID09PSB1bmRlZmluZWQgfHxcbiAgICAgIHR5cGVvZiBtZXRob2QubmV4dCAhPT0gJ2Z1bmN0aW9uJ1xuICAgICkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6ICdTZXF1ZW5jZScsXG4gICAgICAgIG1lc3NhZ2U6ICdPYmplY3QgaXMgbm90IGFuIGl0ZXJhdG9yLidcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNjcmVhdGUtc2VxdWVuY2UtZnJvbS1pdGVyYWJsZVxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBtZXRob2QubmV4dCgpXG5cbiAgICAgIGlmIChkb25lKSB7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIHNlcS5wdXNoKGNvbnZlcnRlcih2YWx1ZSkpXG4gICAgfVxuXG4gICAgcmV0dXJuIHNlcVxuICB9XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtdG8tcmVjb3JkXG53ZWJpZGwucmVjb3JkQ29udmVydGVyID0gZnVuY3Rpb24gKGtleUNvbnZlcnRlciwgdmFsdWVDb252ZXJ0ZXIpIHtcbiAgcmV0dXJuIChPKSA9PiB7XG4gICAgLy8gMS4gSWYgVHlwZShPKSBpcyBub3QgT2JqZWN0LCB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAod2ViaWRsLnV0aWwuVHlwZShPKSAhPT0gJ09iamVjdCcpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnUmVjb3JkJyxcbiAgICAgICAgbWVzc2FnZTogYFZhbHVlIG9mIHR5cGUgJHt3ZWJpZGwudXRpbC5UeXBlKE8pfSBpcyBub3QgYW4gT2JqZWN0LmBcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gTGV0IHJlc3VsdCBiZSBhIG5ldyBlbXB0eSBpbnN0YW5jZSBvZiByZWNvcmQ8SywgVj4uXG4gICAgY29uc3QgcmVzdWx0ID0ge31cblxuICAgIGlmICghdHlwZXMuaXNQcm94eShPKSkge1xuICAgICAgLy8gT2JqZWN0LmtleXMgb25seSByZXR1cm5zIGVudW1lcmFibGUgcHJvcGVydGllc1xuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKE8pXG5cbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgLy8gMS4gTGV0IHR5cGVkS2V5IGJlIGtleSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgSy5cbiAgICAgICAgY29uc3QgdHlwZWRLZXkgPSBrZXlDb252ZXJ0ZXIoa2V5KVxuXG4gICAgICAgIC8vIDIuIExldCB2YWx1ZSBiZSA/IEdldChPLCBrZXkpLlxuICAgICAgICAvLyAzLiBMZXQgdHlwZWRWYWx1ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgVi5cbiAgICAgICAgY29uc3QgdHlwZWRWYWx1ZSA9IHZhbHVlQ29udmVydGVyKE9ba2V5XSlcblxuICAgICAgICAvLyA0LiBTZXQgcmVzdWx0W3R5cGVkS2V5XSB0byB0eXBlZFZhbHVlLlxuICAgICAgICByZXN1bHRbdHlwZWRLZXldID0gdHlwZWRWYWx1ZVxuICAgICAgfVxuXG4gICAgICAvLyA1LiBSZXR1cm4gcmVzdWx0LlxuICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH1cblxuICAgIC8vIDMuIExldCBrZXlzIGJlID8gTy5bW093blByb3BlcnR5S2V5c11dKCkuXG4gICAgY29uc3Qga2V5cyA9IFJlZmxlY3Qub3duS2V5cyhPKVxuXG4gICAgLy8gNC4gRm9yIGVhY2gga2V5IG9mIGtleXMuXG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgLy8gMS4gTGV0IGRlc2MgYmUgPyBPLltbR2V0T3duUHJvcGVydHldXShrZXkpLlxuICAgICAgY29uc3QgZGVzYyA9IFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIGtleSlcblxuICAgICAgLy8gMi4gSWYgZGVzYyBpcyBub3QgdW5kZWZpbmVkIGFuZCBkZXNjLltbRW51bWVyYWJsZV1dIGlzIHRydWU6XG4gICAgICBpZiAoZGVzYz8uZW51bWVyYWJsZSkge1xuICAgICAgICAvLyAxLiBMZXQgdHlwZWRLZXkgYmUga2V5IGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBLLlxuICAgICAgICBjb25zdCB0eXBlZEtleSA9IGtleUNvbnZlcnRlcihrZXkpXG5cbiAgICAgICAgLy8gMi4gTGV0IHZhbHVlIGJlID8gR2V0KE8sIGtleSkuXG4gICAgICAgIC8vIDMuIExldCB0eXBlZFZhbHVlIGJlIHZhbHVlIGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBWLlxuICAgICAgICBjb25zdCB0eXBlZFZhbHVlID0gdmFsdWVDb252ZXJ0ZXIoT1trZXldKVxuXG4gICAgICAgIC8vIDQuIFNldCByZXN1bHRbdHlwZWRLZXldIHRvIHR5cGVkVmFsdWUuXG4gICAgICAgIHJlc3VsdFt0eXBlZEtleV0gPSB0eXBlZFZhbHVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNS4gUmV0dXJuIHJlc3VsdC5cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cbn1cblxud2ViaWRsLmludGVyZmFjZUNvbnZlcnRlciA9IGZ1bmN0aW9uIChpKSB7XG4gIHJldHVybiAoViwgb3B0cyA9IHt9KSA9PiB7XG4gICAgaWYgKG9wdHMuc3RyaWN0ICE9PSBmYWxzZSAmJiAhKFYgaW5zdGFuY2VvZiBpKSkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6IGkubmFtZSxcbiAgICAgICAgbWVzc2FnZTogYEV4cGVjdGVkICR7Vn0gdG8gYmUgYW4gaW5zdGFuY2Ugb2YgJHtpLm5hbWV9LmBcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIFZcbiAgfVxufVxuXG53ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlciA9IGZ1bmN0aW9uIChjb252ZXJ0ZXJzKSB7XG4gIHJldHVybiAoZGljdGlvbmFyeSkgPT4ge1xuICAgIGNvbnN0IHR5cGUgPSB3ZWJpZGwudXRpbC5UeXBlKGRpY3Rpb25hcnkpXG4gICAgY29uc3QgZGljdCA9IHt9XG5cbiAgICBpZiAodHlwZSA9PT0gJ051bGwnIHx8IHR5cGUgPT09ICdVbmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gZGljdFxuICAgIH0gZWxzZSBpZiAodHlwZSAhPT0gJ09iamVjdCcpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnRGljdGlvbmFyeScsXG4gICAgICAgIG1lc3NhZ2U6IGBFeHBlY3RlZCAke2RpY3Rpb25hcnl9IHRvIGJlIG9uZSBvZjogTnVsbCwgVW5kZWZpbmVkLCBPYmplY3QuYFxuICAgICAgfSlcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IG9wdGlvbnMgb2YgY29udmVydGVycykge1xuICAgICAgY29uc3QgeyBrZXksIGRlZmF1bHRWYWx1ZSwgcmVxdWlyZWQsIGNvbnZlcnRlciB9ID0gb3B0aW9uc1xuXG4gICAgICBpZiAocmVxdWlyZWQgPT09IHRydWUpIHtcbiAgICAgICAgaWYgKCFoYXNPd24oZGljdGlvbmFyeSwga2V5KSkge1xuICAgICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICAgIGhlYWRlcjogJ0RpY3Rpb25hcnknLFxuICAgICAgICAgICAgbWVzc2FnZTogYE1pc3NpbmcgcmVxdWlyZWQga2V5IFwiJHtrZXl9XCIuYFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGV0IHZhbHVlID0gZGljdGlvbmFyeVtrZXldXG4gICAgICBjb25zdCBoYXNEZWZhdWx0ID0gaGFzT3duKG9wdGlvbnMsICdkZWZhdWx0VmFsdWUnKVxuXG4gICAgICAvLyBPbmx5IHVzZSBkZWZhdWx0VmFsdWUgaWYgdmFsdWUgaXMgdW5kZWZpbmVkIGFuZFxuICAgICAgLy8gYSBkZWZhdWx0VmFsdWUgb3B0aW9ucyB3YXMgcHJvdmlkZWQuXG4gICAgICBpZiAoaGFzRGVmYXVsdCAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlID8/IGRlZmF1bHRWYWx1ZVxuICAgICAgfVxuXG4gICAgICAvLyBBIGtleSBjYW4gYmUgb3B0aW9uYWwgYW5kIGhhdmUgbm8gZGVmYXVsdCB2YWx1ZS5cbiAgICAgIC8vIFdoZW4gdGhpcyBoYXBwZW5zLCBkbyBub3QgcGVyZm9ybSBhIGNvbnZlcnNpb24sXG4gICAgICAvLyBhbmQgZG8gbm90IGFzc2lnbiB0aGUga2V5IGEgdmFsdWUuXG4gICAgICBpZiAocmVxdWlyZWQgfHwgaGFzRGVmYXVsdCB8fCB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhbHVlID0gY29udmVydGVyKHZhbHVlKVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBvcHRpb25zLmFsbG93ZWRWYWx1ZXMgJiZcbiAgICAgICAgICAhb3B0aW9ucy5hbGxvd2VkVmFsdWVzLmluY2x1ZGVzKHZhbHVlKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICBoZWFkZXI6ICdEaWN0aW9uYXJ5JyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGAke3ZhbHVlfSBpcyBub3QgYW4gYWNjZXB0ZWQgdHlwZS4gRXhwZWN0ZWQgb25lIG9mICR7b3B0aW9ucy5hbGxvd2VkVmFsdWVzLmpvaW4oJywgJyl9LmBcbiAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgZGljdFtrZXldID0gdmFsdWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGljdFxuICB9XG59XG5cbndlYmlkbC5udWxsYWJsZUNvbnZlcnRlciA9IGZ1bmN0aW9uIChjb252ZXJ0ZXIpIHtcbiAgcmV0dXJuIChWKSA9PiB7XG4gICAgaWYgKFYgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBWXG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnZlcnRlcihWKVxuICB9XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtRE9NU3RyaW5nXG53ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcgPSBmdW5jdGlvbiAoViwgb3B0cyA9IHt9KSB7XG4gIC8vIDEuIElmIFYgaXMgbnVsbCBhbmQgdGhlIGNvbnZlcnNpb24gaXMgdG8gYW4gSURMIHR5cGVcbiAgLy8gICAgYXNzb2NpYXRlZCB3aXRoIHRoZSBbTGVnYWN5TnVsbFRvRW1wdHlTdHJpbmddXG4gIC8vICAgIGV4dGVuZGVkIGF0dHJpYnV0ZSwgdGhlbiByZXR1cm4gdGhlIERPTVN0cmluZyB2YWx1ZVxuICAvLyAgICB0aGF0IHJlcHJlc2VudHMgdGhlIGVtcHR5IHN0cmluZy5cbiAgaWYgKFYgPT09IG51bGwgJiYgb3B0cy5sZWdhY3lOdWxsVG9FbXB0eVN0cmluZykge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgLy8gMi4gTGV0IHggYmUgPyBUb1N0cmluZyhWKS5cbiAgaWYgKHR5cGVvZiBWID09PSAnc3ltYm9sJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0NvdWxkIG5vdCBjb252ZXJ0IGFyZ3VtZW50IG9mIHR5cGUgc3ltYm9sIHRvIHN0cmluZy4nKVxuICB9XG5cbiAgLy8gMy4gUmV0dXJuIHRoZSBJREwgRE9NU3RyaW5nIHZhbHVlIHRoYXQgcmVwcmVzZW50cyB0aGVcbiAgLy8gICAgc2FtZSBzZXF1ZW5jZSBvZiBjb2RlIHVuaXRzIGFzIHRoZSBvbmUgdGhlXG4gIC8vICAgIEVDTUFTY3JpcHQgU3RyaW5nIHZhbHVlIHggcmVwcmVzZW50cy5cbiAgcmV0dXJuIFN0cmluZyhWKVxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLUJ5dGVTdHJpbmdcbndlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcgPSBmdW5jdGlvbiAoVikge1xuICAvLyAxLiBMZXQgeCBiZSA/IFRvU3RyaW5nKFYpLlxuICAvLyBOb3RlOiBET01TdHJpbmcgY29udmVydGVyIHBlcmZvcm0gPyBUb1N0cmluZyhWKVxuICBjb25zdCB4ID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKFYpXG5cbiAgLy8gMi4gSWYgdGhlIHZhbHVlIG9mIGFueSBlbGVtZW50IG9mIHggaXMgZ3JlYXRlciB0aGFuXG4gIC8vICAgIDI1NSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHgubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgaWYgKHguY2hhckNvZGVBdChpbmRleCkgPiAyNTUpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICdDYW5ub3QgY29udmVydCBhcmd1bWVudCB0byBhIEJ5dGVTdHJpbmcgYmVjYXVzZSB0aGUgY2hhcmFjdGVyIGF0ICcgK1xuICAgICAgICBgaW5kZXggJHtpbmRleH0gaGFzIGEgdmFsdWUgb2YgJHt4LmNoYXJDb2RlQXQoaW5kZXgpfSB3aGljaCBpcyBncmVhdGVyIHRoYW4gMjU1LmBcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICAvLyAzLiBSZXR1cm4gYW4gSURMIEJ5dGVTdHJpbmcgdmFsdWUgd2hvc2UgbGVuZ3RoIGlzIHRoZVxuICAvLyAgICBsZW5ndGggb2YgeCwgYW5kIHdoZXJlIHRoZSB2YWx1ZSBvZiBlYWNoIGVsZW1lbnQgaXNcbiAgLy8gICAgdGhlIHZhbHVlIG9mIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnQgb2YgeC5cbiAgcmV0dXJuIHhcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy1VU1ZTdHJpbmdcbndlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyA9IHRvVVNWU3RyaW5nXG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtYm9vbGVhblxud2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbiA9IGZ1bmN0aW9uIChWKSB7XG4gIC8vIDEuIExldCB4IGJlIHRoZSByZXN1bHQgb2YgY29tcHV0aW5nIFRvQm9vbGVhbihWKS5cbiAgY29uc3QgeCA9IEJvb2xlYW4oVilcblxuICAvLyAyLiBSZXR1cm4gdGhlIElETCBib29sZWFuIHZhbHVlIHRoYXQgaXMgdGhlIG9uZSB0aGF0IHJlcHJlc2VudHNcbiAgLy8gICAgdGhlIHNhbWUgdHJ1dGggdmFsdWUgYXMgdGhlIEVDTUFTY3JpcHQgQm9vbGVhbiB2YWx1ZSB4LlxuICByZXR1cm4geFxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLWFueVxud2ViaWRsLmNvbnZlcnRlcnMuYW55ID0gZnVuY3Rpb24gKFYpIHtcbiAgcmV0dXJuIFZcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy1sb25nLWxvbmdcbndlYmlkbC5jb252ZXJ0ZXJzWydsb25nIGxvbmcnXSA9IGZ1bmN0aW9uIChWKSB7XG4gIC8vIDEuIExldCB4IGJlID8gQ29udmVydFRvSW50KFYsIDY0LCBcInNpZ25lZFwiKS5cbiAgY29uc3QgeCA9IHdlYmlkbC51dGlsLkNvbnZlcnRUb0ludChWLCA2NCwgJ3NpZ25lZCcpXG5cbiAgLy8gMi4gUmV0dXJuIHRoZSBJREwgbG9uZyBsb25nIHZhbHVlIHRoYXQgcmVwcmVzZW50c1xuICAvLyAgICB0aGUgc2FtZSBudW1lcmljIHZhbHVlIGFzIHguXG4gIHJldHVybiB4XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtdW5zaWduZWQtbG9uZy1sb25nXG53ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgbG9uZyBsb25nJ10gPSBmdW5jdGlvbiAoVikge1xuICAvLyAxLiBMZXQgeCBiZSA/IENvbnZlcnRUb0ludChWLCA2NCwgXCJ1bnNpZ25lZFwiKS5cbiAgY29uc3QgeCA9IHdlYmlkbC51dGlsLkNvbnZlcnRUb0ludChWLCA2NCwgJ3Vuc2lnbmVkJylcblxuICAvLyAyLiBSZXR1cm4gdGhlIElETCB1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWUgdGhhdFxuICAvLyAgICByZXByZXNlbnRzIHRoZSBzYW1lIG51bWVyaWMgdmFsdWUgYXMgeC5cbiAgcmV0dXJuIHhcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy11bnNpZ25lZC1sb25nXG53ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgbG9uZyddID0gZnVuY3Rpb24gKFYpIHtcbiAgLy8gMS4gTGV0IHggYmUgPyBDb252ZXJ0VG9JbnQoViwgMzIsIFwidW5zaWduZWRcIikuXG4gIGNvbnN0IHggPSB3ZWJpZGwudXRpbC5Db252ZXJ0VG9JbnQoViwgMzIsICd1bnNpZ25lZCcpXG5cbiAgLy8gMi4gUmV0dXJuIHRoZSBJREwgdW5zaWduZWQgbG9uZyB2YWx1ZSB0aGF0XG4gIC8vICAgIHJlcHJlc2VudHMgdGhlIHNhbWUgbnVtZXJpYyB2YWx1ZSBhcyB4LlxuICByZXR1cm4geFxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLXVuc2lnbmVkLXNob3J0XG53ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgc2hvcnQnXSA9IGZ1bmN0aW9uIChWLCBvcHRzKSB7XG4gIC8vIDEuIExldCB4IGJlID8gQ29udmVydFRvSW50KFYsIDE2LCBcInVuc2lnbmVkXCIpLlxuICBjb25zdCB4ID0gd2ViaWRsLnV0aWwuQ29udmVydFRvSW50KFYsIDE2LCAndW5zaWduZWQnLCBvcHRzKVxuXG4gIC8vIDIuIFJldHVybiB0aGUgSURMIHVuc2lnbmVkIHNob3J0IHZhbHVlIHRoYXQgcmVwcmVzZW50c1xuICAvLyAgICB0aGUgc2FtZSBudW1lcmljIHZhbHVlIGFzIHguXG4gIHJldHVybiB4XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jaWRsLUFycmF5QnVmZmVyXG53ZWJpZGwuY29udmVydGVycy5BcnJheUJ1ZmZlciA9IGZ1bmN0aW9uIChWLCBvcHRzID0ge30pIHtcbiAgLy8gMS4gSWYgVHlwZShWKSBpcyBub3QgT2JqZWN0LCBvciBWIGRvZXMgbm90IGhhdmUgYW5cbiAgLy8gICAgW1tBcnJheUJ1ZmZlckRhdGFdXSBpbnRlcm5hbCBzbG90LCB0aGVuIHRocm93IGFcbiAgLy8gICAgVHlwZUVycm9yLlxuICAvLyBzZWU6IGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvcGVydGllcy1vZi10aGUtYXJyYXlidWZmZXItaW5zdGFuY2VzXG4gIC8vIHNlZTogaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9wZXJ0aWVzLW9mLXRoZS1zaGFyZWRhcnJheWJ1ZmZlci1pbnN0YW5jZXNcbiAgaWYgKFxuICAgIHdlYmlkbC51dGlsLlR5cGUoVikgIT09ICdPYmplY3QnIHx8XG4gICAgIXR5cGVzLmlzQW55QXJyYXlCdWZmZXIoVilcbiAgKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5jb252ZXJzaW9uRmFpbGVkKHtcbiAgICAgIHByZWZpeDogYCR7Vn1gLFxuICAgICAgYXJndW1lbnQ6IGAke1Z9YCxcbiAgICAgIHR5cGVzOiBbJ0FycmF5QnVmZmVyJ11cbiAgICB9KVxuICB9XG5cbiAgLy8gMi4gSWYgdGhlIGNvbnZlcnNpb24gaXMgbm90IHRvIGFuIElETCB0eXBlIGFzc29jaWF0ZWRcbiAgLy8gICAgd2l0aCB0aGUgW0FsbG93U2hhcmVkXSBleHRlbmRlZCBhdHRyaWJ1dGUsIGFuZFxuICAvLyAgICBJc1NoYXJlZEFycmF5QnVmZmVyKFYpIGlzIHRydWUsIHRoZW4gdGhyb3cgYVxuICAvLyAgICBUeXBlRXJyb3IuXG4gIGlmIChvcHRzLmFsbG93U2hhcmVkID09PSBmYWxzZSAmJiB0eXBlcy5pc1NoYXJlZEFycmF5QnVmZmVyKFYpKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgaGVhZGVyOiAnQXJyYXlCdWZmZXInLFxuICAgICAgbWVzc2FnZTogJ1NoYXJlZEFycmF5QnVmZmVyIGlzIG5vdCBhbGxvd2VkLidcbiAgICB9KVxuICB9XG5cbiAgLy8gMy4gSWYgdGhlIGNvbnZlcnNpb24gaXMgbm90IHRvIGFuIElETCB0eXBlIGFzc29jaWF0ZWRcbiAgLy8gICAgd2l0aCB0aGUgW0FsbG93UmVzaXphYmxlXSBleHRlbmRlZCBhdHRyaWJ1dGUsIGFuZFxuICAvLyAgICBJc1Jlc2l6YWJsZUFycmF5QnVmZmVyKFYpIGlzIHRydWUsIHRoZW4gdGhyb3cgYVxuICAvLyAgICBUeXBlRXJyb3IuXG4gIC8vIE5vdGU6IHJlc2l6YWJsZSBBcnJheUJ1ZmZlcnMgYXJlIGN1cnJlbnRseSBhIHByb3Bvc2FsLlxuXG4gIC8vIDQuIFJldHVybiB0aGUgSURMIEFycmF5QnVmZmVyIHZhbHVlIHRoYXQgaXMgYVxuICAvLyAgICByZWZlcmVuY2UgdG8gdGhlIHNhbWUgb2JqZWN0IGFzIFYuXG4gIHJldHVybiBWXG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLlR5cGVkQXJyYXkgPSBmdW5jdGlvbiAoViwgVCwgb3B0cyA9IHt9KSB7XG4gIC8vIDEuIExldCBUIGJlIHRoZSBJREwgdHlwZSBWIGlzIGJlaW5nIGNvbnZlcnRlZCB0by5cblxuICAvLyAyLiBJZiBUeXBlKFYpIGlzIG5vdCBPYmplY3QsIG9yIFYgZG9lcyBub3QgaGF2ZSBhXG4gIC8vICAgIFtbVHlwZWRBcnJheU5hbWVdXSBpbnRlcm5hbCBzbG90IHdpdGggYSB2YWx1ZVxuICAvLyAgICBlcXVhbCB0byBU4oCZcyBuYW1lLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICBpZiAoXG4gICAgd2ViaWRsLnV0aWwuVHlwZShWKSAhPT0gJ09iamVjdCcgfHxcbiAgICAhdHlwZXMuaXNUeXBlZEFycmF5KFYpIHx8XG4gICAgVi5jb25zdHJ1Y3Rvci5uYW1lICE9PSBULm5hbWVcbiAgKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5jb252ZXJzaW9uRmFpbGVkKHtcbiAgICAgIHByZWZpeDogYCR7VC5uYW1lfWAsXG4gICAgICBhcmd1bWVudDogYCR7Vn1gLFxuICAgICAgdHlwZXM6IFtULm5hbWVdXG4gICAgfSlcbiAgfVxuXG4gIC8vIDMuIElmIHRoZSBjb252ZXJzaW9uIGlzIG5vdCB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtBbGxvd1NoYXJlZF0gZXh0ZW5kZWQgYXR0cmlidXRlLCBhbmRcbiAgLy8gICAgSXNTaGFyZWRBcnJheUJ1ZmZlcihWLltbVmlld2VkQXJyYXlCdWZmZXJdXSkgaXNcbiAgLy8gICAgdHJ1ZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKG9wdHMuYWxsb3dTaGFyZWQgPT09IGZhbHNlICYmIHR5cGVzLmlzU2hhcmVkQXJyYXlCdWZmZXIoVi5idWZmZXIpKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgaGVhZGVyOiAnQXJyYXlCdWZmZXInLFxuICAgICAgbWVzc2FnZTogJ1NoYXJlZEFycmF5QnVmZmVyIGlzIG5vdCBhbGxvd2VkLidcbiAgICB9KVxuICB9XG5cbiAgLy8gNC4gSWYgdGhlIGNvbnZlcnNpb24gaXMgbm90IHRvIGFuIElETCB0eXBlIGFzc29jaWF0ZWRcbiAgLy8gICAgd2l0aCB0aGUgW0FsbG93UmVzaXphYmxlXSBleHRlbmRlZCBhdHRyaWJ1dGUsIGFuZFxuICAvLyAgICBJc1Jlc2l6YWJsZUFycmF5QnVmZmVyKFYuW1tWaWV3ZWRBcnJheUJ1ZmZlcl1dKSBpc1xuICAvLyAgICB0cnVlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAvLyBOb3RlOiByZXNpemFibGUgYXJyYXkgYnVmZmVycyBhcmUgY3VycmVudGx5IGEgcHJvcG9zYWxcblxuICAvLyA1LiBSZXR1cm4gdGhlIElETCB2YWx1ZSBvZiB0eXBlIFQgdGhhdCBpcyBhIHJlZmVyZW5jZVxuICAvLyAgICB0byB0aGUgc2FtZSBvYmplY3QgYXMgVi5cbiAgcmV0dXJuIFZcbn1cblxud2ViaWRsLmNvbnZlcnRlcnMuRGF0YVZpZXcgPSBmdW5jdGlvbiAoViwgb3B0cyA9IHt9KSB7XG4gIC8vIDEuIElmIFR5cGUoVikgaXMgbm90IE9iamVjdCwgb3IgViBkb2VzIG5vdCBoYXZlIGFcbiAgLy8gICAgW1tEYXRhVmlld11dIGludGVybmFsIHNsb3QsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIGlmICh3ZWJpZGwudXRpbC5UeXBlKFYpICE9PSAnT2JqZWN0JyB8fCAhdHlwZXMuaXNEYXRhVmlldyhWKSkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgIGhlYWRlcjogJ0RhdGFWaWV3JyxcbiAgICAgIG1lc3NhZ2U6ICdPYmplY3QgaXMgbm90IGEgRGF0YVZpZXcuJ1xuICAgIH0pXG4gIH1cblxuICAvLyAyLiBJZiB0aGUgY29udmVyc2lvbiBpcyBub3QgdG8gYW4gSURMIHR5cGUgYXNzb2NpYXRlZFxuICAvLyAgICB3aXRoIHRoZSBbQWxsb3dTaGFyZWRdIGV4dGVuZGVkIGF0dHJpYnV0ZSwgYW5kXG4gIC8vICAgIElzU2hhcmVkQXJyYXlCdWZmZXIoVi5bW1ZpZXdlZEFycmF5QnVmZmVyXV0pIGlzIHRydWUsXG4gIC8vICAgIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIGlmIChvcHRzLmFsbG93U2hhcmVkID09PSBmYWxzZSAmJiB0eXBlcy5pc1NoYXJlZEFycmF5QnVmZmVyKFYuYnVmZmVyKSkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgIGhlYWRlcjogJ0FycmF5QnVmZmVyJyxcbiAgICAgIG1lc3NhZ2U6ICdTaGFyZWRBcnJheUJ1ZmZlciBpcyBub3QgYWxsb3dlZC4nXG4gICAgfSlcbiAgfVxuXG4gIC8vIDMuIElmIHRoZSBjb252ZXJzaW9uIGlzIG5vdCB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtBbGxvd1Jlc2l6YWJsZV0gZXh0ZW5kZWQgYXR0cmlidXRlLCBhbmRcbiAgLy8gICAgSXNSZXNpemFibGVBcnJheUJ1ZmZlcihWLltbVmlld2VkQXJyYXlCdWZmZXJdXSkgaXNcbiAgLy8gICAgdHJ1ZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgLy8gTm90ZTogcmVzaXphYmxlIEFycmF5QnVmZmVycyBhcmUgY3VycmVudGx5IGEgcHJvcG9zYWxcblxuICAvLyA0LiBSZXR1cm4gdGhlIElETCBEYXRhVmlldyB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlXG4gIC8vICAgIHRvIHRoZSBzYW1lIG9iamVjdCBhcyBWLlxuICByZXR1cm4gVlxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI0J1ZmZlclNvdXJjZVxud2ViaWRsLmNvbnZlcnRlcnMuQnVmZmVyU291cmNlID0gZnVuY3Rpb24gKFYsIG9wdHMgPSB7fSkge1xuICBpZiAodHlwZXMuaXNBbnlBcnJheUJ1ZmZlcihWKSkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5BcnJheUJ1ZmZlcihWLCBvcHRzKVxuICB9XG5cbiAgaWYgKHR5cGVzLmlzVHlwZWRBcnJheShWKSkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5UeXBlZEFycmF5KFYsIFYuY29uc3RydWN0b3IpXG4gIH1cblxuICBpZiAodHlwZXMuaXNEYXRhVmlldyhWKSkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5EYXRhVmlldyhWLCBvcHRzKVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihgQ291bGQgbm90IGNvbnZlcnQgJHtWfSB0byBhIEJ1ZmZlclNvdXJjZS5gKVxufVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8Qnl0ZVN0cmluZz4nXSA9IHdlYmlkbC5zZXF1ZW5jZUNvbnZlcnRlcihcbiAgd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZ1xuKVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8c2VxdWVuY2U8Qnl0ZVN0cmluZz4+J10gPSB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxCeXRlU3RyaW5nPiddXG4pXG5cbndlYmlkbC5jb252ZXJ0ZXJzWydyZWNvcmQ8Qnl0ZVN0cmluZywgQnl0ZVN0cmluZz4nXSA9IHdlYmlkbC5yZWNvcmRDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcsXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmdcbilcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHdlYmlkbFxufVxuIiwKICAgICJjb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBhdG9iIH0gPSByZXF1aXJlKCdidWZmZXInKVxuY29uc3QgeyBpc29tb3JwaGljRGVjb2RlIH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuXG5jb25zdCBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKClcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jaHR0cC10b2tlbi1jb2RlLXBvaW50XG4gKi9cbmNvbnN0IEhUVFBfVE9LRU5fQ09ERVBPSU5UUyA9IC9eWyEjJCUmJyorLS5eX3x+QS1aYS16MC05XSskL1xuY29uc3QgSFRUUF9XSElURVNQQUNFX1JFR0VYID0gLyhcXHUwMDBBfFxcdTAwMER8XFx1MDAwOXxcXHUwMDIwKS8gLy8gZXNsaW50LWRpc2FibGUtbGluZVxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jaHR0cC1xdW90ZWQtc3RyaW5nLXRva2VuLWNvZGUtcG9pbnRcbiAqL1xuY29uc3QgSFRUUF9RVU9URURfU1RSSU5HX1RPS0VOUyA9IC9bXFx1MDAwOXxcXHUwMDIwLVxcdTAwN0V8XFx1MDA4MC1cXHUwMEZGXS8gLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZGF0YS11cmwtcHJvY2Vzc29yXG4vKiogQHBhcmFtIHtVUkx9IGRhdGFVUkwgKi9cbmZ1bmN0aW9uIGRhdGFVUkxQcm9jZXNzb3IgKGRhdGFVUkwpIHtcbiAgLy8gMS4gQXNzZXJ0OiBkYXRhVVJM4oCZcyBzY2hlbWUgaXMgXCJkYXRhXCIuXG4gIGFzc2VydChkYXRhVVJMLnByb3RvY29sID09PSAnZGF0YTonKVxuXG4gIC8vIDIuIExldCBpbnB1dCBiZSB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgdGhlIFVSTFxuICAvLyBzZXJpYWxpemVyIG9uIGRhdGFVUkwgd2l0aCBleGNsdWRlIGZyYWdtZW50XG4gIC8vIHNldCB0byB0cnVlLlxuICBsZXQgaW5wdXQgPSBVUkxTZXJpYWxpemVyKGRhdGFVUkwsIHRydWUpXG5cbiAgLy8gMy4gUmVtb3ZlIHRoZSBsZWFkaW5nIFwiZGF0YTpcIiBzdHJpbmcgZnJvbSBpbnB1dC5cbiAgaW5wdXQgPSBpbnB1dC5zbGljZSg1KVxuXG4gIC8vIDQuIExldCBwb3NpdGlvbiBwb2ludCBhdCB0aGUgc3RhcnQgb2YgaW5wdXQuXG4gIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogMCB9XG5cbiAgLy8gNS4gTGV0IG1pbWVUeXBlIGJlIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhXG4gIC8vIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzIHRoYXQgYXJlIG5vdCBlcXVhbFxuICAvLyB0byBVKzAwMkMgKCwpLCBnaXZlbiBwb3NpdGlvbi5cbiAgbGV0IG1pbWVUeXBlID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoXG4gICAgJywnLFxuICAgIGlucHV0LFxuICAgIHBvc2l0aW9uXG4gIClcblxuICAvLyA2LiBTdHJpcCBsZWFkaW5nIGFuZCB0cmFpbGluZyBBU0NJSSB3aGl0ZXNwYWNlXG4gIC8vIGZyb20gbWltZVR5cGUuXG4gIC8vIFVuZGljaSBpbXBsZW1lbnRhdGlvbiBub3RlOiB3ZSBuZWVkIHRvIHN0b3JlIHRoZVxuICAvLyBsZW5ndGggYmVjYXVzZSBpZiB0aGUgbWltZXR5cGUgaGFzIHNwYWNlcyByZW1vdmVkLFxuICAvLyB0aGUgd3JvbmcgYW1vdW50IHdpbGwgYmUgc2xpY2VkIGZyb20gdGhlIGlucHV0IGluXG4gIC8vIHN0ZXAgIzlcbiAgY29uc3QgbWltZVR5cGVMZW5ndGggPSBtaW1lVHlwZS5sZW5ndGhcbiAgbWltZVR5cGUgPSByZW1vdmVBU0NJSVdoaXRlc3BhY2UobWltZVR5cGUsIHRydWUsIHRydWUpXG5cbiAgLy8gNy4gSWYgcG9zaXRpb24gaXMgcGFzdCB0aGUgZW5kIG9mIGlucHV0LCB0aGVuXG4gIC8vIHJldHVybiBmYWlsdXJlXG4gIGlmIChwb3NpdGlvbi5wb3NpdGlvbiA+PSBpbnB1dC5sZW5ndGgpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICAvLyA4LiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuXG4gIHBvc2l0aW9uLnBvc2l0aW9uKytcblxuICAvLyA5LiBMZXQgZW5jb2RlZEJvZHkgYmUgdGhlIHJlbWFpbmRlciBvZiBpbnB1dC5cbiAgY29uc3QgZW5jb2RlZEJvZHkgPSBpbnB1dC5zbGljZShtaW1lVHlwZUxlbmd0aCArIDEpXG5cbiAgLy8gMTAuIExldCBib2R5IGJlIHRoZSBwZXJjZW50LWRlY29kaW5nIG9mIGVuY29kZWRCb2R5LlxuICBsZXQgYm9keSA9IHN0cmluZ1BlcmNlbnREZWNvZGUoZW5jb2RlZEJvZHkpXG5cbiAgLy8gMTEuIElmIG1pbWVUeXBlIGVuZHMgd2l0aCBVKzAwM0IgKDspLCBmb2xsb3dlZCBieVxuICAvLyB6ZXJvIG9yIG1vcmUgVSswMDIwIFNQQUNFLCBmb2xsb3dlZCBieSBhbiBBU0NJSVxuICAvLyBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvciBcImJhc2U2NFwiLCB0aGVuOlxuICBpZiAoLzsoXFx1MDAyMCl7MCx9YmFzZTY0JC9pLnRlc3QobWltZVR5cGUpKSB7XG4gICAgLy8gMS4gTGV0IHN0cmluZ0JvZHkgYmUgdGhlIGlzb21vcnBoaWMgZGVjb2RlIG9mIGJvZHkuXG4gICAgY29uc3Qgc3RyaW5nQm9keSA9IGlzb21vcnBoaWNEZWNvZGUoYm9keSlcblxuICAgIC8vIDIuIFNldCBib2R5IHRvIHRoZSBmb3JnaXZpbmctYmFzZTY0IGRlY29kZSBvZlxuICAgIC8vIHN0cmluZ0JvZHkuXG4gICAgYm9keSA9IGZvcmdpdmluZ0Jhc2U2NChzdHJpbmdCb2R5KVxuXG4gICAgLy8gMy4gSWYgYm9keSBpcyBmYWlsdXJlLCB0aGVuIHJldHVybiBmYWlsdXJlLlxuICAgIGlmIChib2R5ID09PSAnZmFpbHVyZScpIHtcbiAgICAgIHJldHVybiAnZmFpbHVyZSdcbiAgICB9XG5cbiAgICAvLyA0LiBSZW1vdmUgdGhlIGxhc3QgNiBjb2RlIHBvaW50cyBmcm9tIG1pbWVUeXBlLlxuICAgIG1pbWVUeXBlID0gbWltZVR5cGUuc2xpY2UoMCwgLTYpXG5cbiAgICAvLyA1LiBSZW1vdmUgdHJhaWxpbmcgVSswMDIwIFNQQUNFIGNvZGUgcG9pbnRzIGZyb20gbWltZVR5cGUsXG4gICAgLy8gaWYgYW55LlxuICAgIG1pbWVUeXBlID0gbWltZVR5cGUucmVwbGFjZSgvKFxcdTAwMjApKyQvLCAnJylcblxuICAgIC8vIDYuIFJlbW92ZSB0aGUgbGFzdCBVKzAwM0IgKDspIGNvZGUgcG9pbnQgZnJvbSBtaW1lVHlwZS5cbiAgICBtaW1lVHlwZSA9IG1pbWVUeXBlLnNsaWNlKDAsIC0xKVxuICB9XG5cbiAgLy8gMTIuIElmIG1pbWVUeXBlIHN0YXJ0cyB3aXRoIFUrMDAzQiAoOyksIHRoZW4gcHJlcGVuZFxuICAvLyBcInRleHQvcGxhaW5cIiB0byBtaW1lVHlwZS5cbiAgaWYgKG1pbWVUeXBlLnN0YXJ0c1dpdGgoJzsnKSkge1xuICAgIG1pbWVUeXBlID0gJ3RleHQvcGxhaW4nICsgbWltZVR5cGVcbiAgfVxuXG4gIC8vIDEzLiBMZXQgbWltZVR5cGVSZWNvcmQgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nXG4gIC8vIG1pbWVUeXBlLlxuICBsZXQgbWltZVR5cGVSZWNvcmQgPSBwYXJzZU1JTUVUeXBlKG1pbWVUeXBlKVxuXG4gIC8vIDE0LiBJZiBtaW1lVHlwZVJlY29yZCBpcyBmYWlsdXJlLCB0aGVuIHNldFxuICAvLyBtaW1lVHlwZVJlY29yZCB0byB0ZXh0L3BsYWluO2NoYXJzZXQ9VVMtQVNDSUkuXG4gIGlmIChtaW1lVHlwZVJlY29yZCA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgbWltZVR5cGVSZWNvcmQgPSBwYXJzZU1JTUVUeXBlKCd0ZXh0L3BsYWluO2NoYXJzZXQ9VVMtQVNDSUknKVxuICB9XG5cbiAgLy8gMTUuIFJldHVybiBhIG5ldyBkYXRhOiBVUkwgc3RydWN0IHdob3NlIE1JTUVcbiAgLy8gdHlwZSBpcyBtaW1lVHlwZVJlY29yZCBhbmQgYm9keSBpcyBib2R5LlxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZGF0YS11cmwtc3RydWN0XG4gIHJldHVybiB7IG1pbWVUeXBlOiBtaW1lVHlwZVJlY29yZCwgYm9keSB9XG59XG5cbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC11cmwtc2VyaWFsaXplclxuLyoqXG4gKiBAcGFyYW0ge1VSTH0gdXJsXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGV4Y2x1ZGVGcmFnbWVudFxuICovXG5mdW5jdGlvbiBVUkxTZXJpYWxpemVyICh1cmwsIGV4Y2x1ZGVGcmFnbWVudCA9IGZhbHNlKSB7XG4gIGlmICghZXhjbHVkZUZyYWdtZW50KSB7XG4gICAgcmV0dXJuIHVybC5ocmVmXG4gIH1cblxuICBjb25zdCBocmVmID0gdXJsLmhyZWZcbiAgY29uc3QgaGFzaExlbmd0aCA9IHVybC5oYXNoLmxlbmd0aFxuXG4gIHJldHVybiBoYXNoTGVuZ3RoID09PSAwID8gaHJlZiA6IGhyZWYuc3Vic3RyaW5nKDAsIGhyZWYubGVuZ3RoIC0gaGFzaExlbmd0aClcbn1cblxuLy8gaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2NvbGxlY3QtYS1zZXF1ZW5jZS1vZi1jb2RlLXBvaW50c1xuLyoqXG4gKiBAcGFyYW0geyhjaGFyOiBzdHJpbmcpID0+IGJvb2xlYW59IGNvbmRpdGlvblxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0XG4gKiBAcGFyYW0ge3sgcG9zaXRpb246IG51bWJlciB9fSBwb3NpdGlvblxuICovXG5mdW5jdGlvbiBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzIChjb25kaXRpb24sIGlucHV0LCBwb3NpdGlvbikge1xuICAvLyAxLiBMZXQgcmVzdWx0IGJlIHRoZSBlbXB0eSBzdHJpbmcuXG4gIGxldCByZXN1bHQgPSAnJ1xuXG4gIC8vIDIuIFdoaWxlIHBvc2l0aW9uIGRvZXNu4oCZdCBwb2ludCBwYXN0IHRoZSBlbmQgb2YgaW5wdXQgYW5kIHRoZVxuICAvLyBjb2RlIHBvaW50IGF0IHBvc2l0aW9uIHdpdGhpbiBpbnB1dCBtZWV0cyB0aGUgY29uZGl0aW9uIGNvbmRpdGlvbjpcbiAgd2hpbGUgKHBvc2l0aW9uLnBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoICYmIGNvbmRpdGlvbihpbnB1dFtwb3NpdGlvbi5wb3NpdGlvbl0pKSB7XG4gICAgLy8gMS4gQXBwZW5kIHRoYXQgY29kZSBwb2ludCB0byB0aGUgZW5kIG9mIHJlc3VsdC5cbiAgICByZXN1bHQgKz0gaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dXG5cbiAgICAvLyAyLiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuXG4gICAgcG9zaXRpb24ucG9zaXRpb24rK1xuICB9XG5cbiAgLy8gMy4gUmV0dXJuIHJlc3VsdC5cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG4vKipcbiAqIEEgZmFzdGVyIGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMgdGhhdCBvbmx5IHdvcmtzIHdoZW4gY29tcGFyaW5nIGEgc2luZ2xlIGNoYXJhY3Rlci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjaGFyXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRcbiAqIEBwYXJhbSB7eyBwb3NpdGlvbjogbnVtYmVyIH19IHBvc2l0aW9uXG4gKi9cbmZ1bmN0aW9uIGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0IChjaGFyLCBpbnB1dCwgcG9zaXRpb24pIHtcbiAgY29uc3QgaWR4ID0gaW5wdXQuaW5kZXhPZihjaGFyLCBwb3NpdGlvbi5wb3NpdGlvbilcbiAgY29uc3Qgc3RhcnQgPSBwb3NpdGlvbi5wb3NpdGlvblxuXG4gIGlmIChpZHggPT09IC0xKSB7XG4gICAgcG9zaXRpb24ucG9zaXRpb24gPSBpbnB1dC5sZW5ndGhcbiAgICByZXR1cm4gaW5wdXQuc2xpY2Uoc3RhcnQpXG4gIH1cblxuICBwb3NpdGlvbi5wb3NpdGlvbiA9IGlkeFxuICByZXR1cm4gaW5wdXQuc2xpY2Uoc3RhcnQsIHBvc2l0aW9uLnBvc2l0aW9uKVxufVxuXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3N0cmluZy1wZXJjZW50LWRlY29kZVxuLyoqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dCAqL1xuZnVuY3Rpb24gc3RyaW5nUGVyY2VudERlY29kZSAoaW5wdXQpIHtcbiAgLy8gMS4gTGV0IGJ5dGVzIGJlIHRoZSBVVEYtOCBlbmNvZGluZyBvZiBpbnB1dC5cbiAgY29uc3QgYnl0ZXMgPSBlbmNvZGVyLmVuY29kZShpbnB1dClcblxuICAvLyAyLiBSZXR1cm4gdGhlIHBlcmNlbnQtZGVjb2Rpbmcgb2YgYnl0ZXMuXG4gIHJldHVybiBwZXJjZW50RGVjb2RlKGJ5dGVzKVxufVxuXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3BlcmNlbnQtZGVjb2RlXG4vKiogQHBhcmFtIHtVaW50OEFycmF5fSBpbnB1dCAqL1xuZnVuY3Rpb24gcGVyY2VudERlY29kZSAoaW5wdXQpIHtcbiAgLy8gMS4gTGV0IG91dHB1dCBiZSBhbiBlbXB0eSBieXRlIHNlcXVlbmNlLlxuICAvKiogQHR5cGUge251bWJlcltdfSAqL1xuICBjb25zdCBvdXRwdXQgPSBbXVxuXG4gIC8vIDIuIEZvciBlYWNoIGJ5dGUgYnl0ZSBpbiBpbnB1dDpcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGJ5dGUgPSBpbnB1dFtpXVxuXG4gICAgLy8gMS4gSWYgYnl0ZSBpcyBub3QgMHgyNSAoJSksIHRoZW4gYXBwZW5kIGJ5dGUgdG8gb3V0cHV0LlxuICAgIGlmIChieXRlICE9PSAweDI1KSB7XG4gICAgICBvdXRwdXQucHVzaChieXRlKVxuXG4gICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiBieXRlIGlzIDB4MjUgKCUpIGFuZCB0aGUgbmV4dCB0d28gYnl0ZXNcbiAgICAvLyBhZnRlciBieXRlIGluIGlucHV0IGFyZSBub3QgaW4gdGhlIHJhbmdlc1xuICAgIC8vIDB4MzAgKDApIHRvIDB4MzkgKDkpLCAweDQxIChBKSB0byAweDQ2IChGKSxcbiAgICAvLyBhbmQgMHg2MSAoYSkgdG8gMHg2NiAoZiksIGFsbCBpbmNsdXNpdmUsIGFwcGVuZCBieXRlXG4gICAgLy8gdG8gb3V0cHV0LlxuICAgIH0gZWxzZSBpZiAoXG4gICAgICBieXRlID09PSAweDI1ICYmXG4gICAgICAhL15bMC05QS1GYS1mXXsyfSQvaS50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoaW5wdXRbaSArIDFdLCBpbnB1dFtpICsgMl0pKVxuICAgICkge1xuICAgICAgb3V0cHV0LnB1c2goMHgyNSlcblxuICAgIC8vIDMuIE90aGVyd2lzZTpcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gMS4gTGV0IGJ5dGVQb2ludCBiZSB0aGUgdHdvIGJ5dGVzIGFmdGVyIGJ5dGUgaW4gaW5wdXQsXG4gICAgICAvLyBkZWNvZGVkLCBhbmQgdGhlbiBpbnRlcnByZXRlZCBhcyBoZXhhZGVjaW1hbCBudW1iZXIuXG4gICAgICBjb25zdCBuZXh0VHdvQnl0ZXMgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGlucHV0W2kgKyAxXSwgaW5wdXRbaSArIDJdKVxuICAgICAgY29uc3QgYnl0ZVBvaW50ID0gTnVtYmVyLnBhcnNlSW50KG5leHRUd29CeXRlcywgMTYpXG5cbiAgICAgIC8vIDIuIEFwcGVuZCBhIGJ5dGUgd2hvc2UgdmFsdWUgaXMgYnl0ZVBvaW50IHRvIG91dHB1dC5cbiAgICAgIG91dHB1dC5wdXNoKGJ5dGVQb2ludClcblxuICAgICAgLy8gMy4gU2tpcCB0aGUgbmV4dCB0d28gYnl0ZXMgaW4gaW5wdXQuXG4gICAgICBpICs9IDJcbiAgICB9XG4gIH1cblxuICAvLyAzLiBSZXR1cm4gb3V0cHV0LlxuICByZXR1cm4gVWludDhBcnJheS5mcm9tKG91dHB1dClcbn1cblxuLy8gaHR0cHM6Ly9taW1lc25pZmYuc3BlYy53aGF0d2cub3JnLyNwYXJzZS1hLW1pbWUtdHlwZVxuLyoqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dCAqL1xuZnVuY3Rpb24gcGFyc2VNSU1FVHlwZSAoaW5wdXQpIHtcbiAgLy8gMS4gUmVtb3ZlIGFueSBsZWFkaW5nIGFuZCB0cmFpbGluZyBIVFRQIHdoaXRlc3BhY2VcbiAgLy8gZnJvbSBpbnB1dC5cbiAgaW5wdXQgPSByZW1vdmVIVFRQV2hpdGVzcGFjZShpbnB1dCwgdHJ1ZSwgdHJ1ZSlcblxuICAvLyAyLiBMZXQgcG9zaXRpb24gYmUgYSBwb3NpdGlvbiB2YXJpYWJsZSBmb3IgaW5wdXQsXG4gIC8vIGluaXRpYWxseSBwb2ludGluZyBhdCB0aGUgc3RhcnQgb2YgaW5wdXQuXG4gIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogMCB9XG5cbiAgLy8gMy4gTGV0IHR5cGUgYmUgdGhlIHJlc3VsdCBvZiBjb2xsZWN0aW5nIGEgc2VxdWVuY2VcbiAgLy8gb2YgY29kZSBwb2ludHMgdGhhdCBhcmUgbm90IFUrMDAyRiAoLykgZnJvbVxuICAvLyBpbnB1dCwgZ2l2ZW4gcG9zaXRpb24uXG4gIGNvbnN0IHR5cGUgPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdChcbiAgICAnLycsXG4gICAgaW5wdXQsXG4gICAgcG9zaXRpb25cbiAgKVxuXG4gIC8vIDQuIElmIHR5cGUgaXMgdGhlIGVtcHR5IHN0cmluZyBvciBkb2VzIG5vdCBzb2xlbHlcbiAgLy8gY29udGFpbiBIVFRQIHRva2VuIGNvZGUgcG9pbnRzLCB0aGVuIHJldHVybiBmYWlsdXJlLlxuICAvLyBodHRwczovL21pbWVzbmlmZi5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtdG9rZW4tY29kZS1wb2ludFxuICBpZiAodHlwZS5sZW5ndGggPT09IDAgfHwgIUhUVFBfVE9LRU5fQ09ERVBPSU5UUy50ZXN0KHR5cGUpKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgLy8gNS4gSWYgcG9zaXRpb24gaXMgcGFzdCB0aGUgZW5kIG9mIGlucHV0LCB0aGVuIHJldHVyblxuICAvLyBmYWlsdXJlXG4gIGlmIChwb3NpdGlvbi5wb3NpdGlvbiA+IGlucHV0Lmxlbmd0aCkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIC8vIDYuIEFkdmFuY2UgcG9zaXRpb24gYnkgMS4gKFRoaXMgc2tpcHMgcGFzdCBVKzAwMkYgKC8pLilcbiAgcG9zaXRpb24ucG9zaXRpb24rK1xuXG4gIC8vIDcuIExldCBzdWJ0eXBlIGJlIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhIHNlcXVlbmNlIG9mXG4gIC8vIGNvZGUgcG9pbnRzIHRoYXQgYXJlIG5vdCBVKzAwM0IgKDspIGZyb20gaW5wdXQsIGdpdmVuXG4gIC8vIHBvc2l0aW9uLlxuICBsZXQgc3VidHlwZSA9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0KFxuICAgICc7JyxcbiAgICBpbnB1dCxcbiAgICBwb3NpdGlvblxuICApXG5cbiAgLy8gOC4gUmVtb3ZlIGFueSB0cmFpbGluZyBIVFRQIHdoaXRlc3BhY2UgZnJvbSBzdWJ0eXBlLlxuICBzdWJ0eXBlID0gcmVtb3ZlSFRUUFdoaXRlc3BhY2Uoc3VidHlwZSwgZmFsc2UsIHRydWUpXG5cbiAgLy8gOS4gSWYgc3VidHlwZSBpcyB0aGUgZW1wdHkgc3RyaW5nIG9yIGRvZXMgbm90IHNvbGVseVxuICAvLyBjb250YWluIEhUVFAgdG9rZW4gY29kZSBwb2ludHMsIHRoZW4gcmV0dXJuIGZhaWx1cmUuXG4gIGlmIChzdWJ0eXBlLmxlbmd0aCA9PT0gMCB8fCAhSFRUUF9UT0tFTl9DT0RFUE9JTlRTLnRlc3Qoc3VidHlwZSkpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICBjb25zdCB0eXBlTG93ZXJjYXNlID0gdHlwZS50b0xvd2VyQ2FzZSgpXG4gIGNvbnN0IHN1YnR5cGVMb3dlcmNhc2UgPSBzdWJ0eXBlLnRvTG93ZXJDYXNlKClcblxuICAvLyAxMC4gTGV0IG1pbWVUeXBlIGJlIGEgbmV3IE1JTUUgdHlwZSByZWNvcmQgd2hvc2UgdHlwZVxuICAvLyBpcyB0eXBlLCBpbiBBU0NJSSBsb3dlcmNhc2UsIGFuZCBzdWJ0eXBlIGlzIHN1YnR5cGUsXG4gIC8vIGluIEFTQ0lJIGxvd2VyY2FzZS5cbiAgLy8gaHR0cHM6Ly9taW1lc25pZmYuc3BlYy53aGF0d2cub3JnLyNtaW1lLXR5cGVcbiAgY29uc3QgbWltZVR5cGUgPSB7XG4gICAgdHlwZTogdHlwZUxvd2VyY2FzZSxcbiAgICBzdWJ0eXBlOiBzdWJ0eXBlTG93ZXJjYXNlLFxuICAgIC8qKiBAdHlwZSB7TWFwPHN0cmluZywgc3RyaW5nPn0gKi9cbiAgICBwYXJhbWV0ZXJzOiBuZXcgTWFwKCksXG4gICAgLy8gaHR0cHM6Ly9taW1lc25pZmYuc3BlYy53aGF0d2cub3JnLyNtaW1lLXR5cGUtZXNzZW5jZVxuICAgIGVzc2VuY2U6IGAke3R5cGVMb3dlcmNhc2V9LyR7c3VidHlwZUxvd2VyY2FzZX1gXG4gIH1cblxuICAvLyAxMS4gV2hpbGUgcG9zaXRpb24gaXMgbm90IHBhc3QgdGhlIGVuZCBvZiBpbnB1dDpcbiAgd2hpbGUgKHBvc2l0aW9uLnBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgLy8gMS4gQWR2YW5jZSBwb3NpdGlvbiBieSAxLiAoVGhpcyBza2lwcyBwYXN0IFUrMDAzQiAoOykuKVxuICAgIHBvc2l0aW9uLnBvc2l0aW9uKytcblxuICAgIC8vIDIuIENvbGxlY3QgYSBzZXF1ZW5jZSBvZiBjb2RlIHBvaW50cyB0aGF0IGFyZSBIVFRQXG4gICAgLy8gd2hpdGVzcGFjZSBmcm9tIGlucHV0IGdpdmVuIHBvc2l0aW9uLlxuICAgIGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMoXG4gICAgICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC13aGl0ZXNwYWNlXG4gICAgICBjaGFyID0+IEhUVFBfV0hJVEVTUEFDRV9SRUdFWC50ZXN0KGNoYXIpLFxuICAgICAgaW5wdXQsXG4gICAgICBwb3NpdGlvblxuICAgIClcblxuICAgIC8vIDMuIExldCBwYXJhbWV0ZXJOYW1lIGJlIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhXG4gICAgLy8gc2VxdWVuY2Ugb2YgY29kZSBwb2ludHMgdGhhdCBhcmUgbm90IFUrMDAzQiAoOylcbiAgICAvLyBvciBVKzAwM0QgKD0pIGZyb20gaW5wdXQsIGdpdmVuIHBvc2l0aW9uLlxuICAgIGxldCBwYXJhbWV0ZXJOYW1lID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50cyhcbiAgICAgIChjaGFyKSA9PiBjaGFyICE9PSAnOycgJiYgY2hhciAhPT0gJz0nLFxuICAgICAgaW5wdXQsXG4gICAgICBwb3NpdGlvblxuICAgIClcblxuICAgIC8vIDQuIFNldCBwYXJhbWV0ZXJOYW1lIHRvIHBhcmFtZXRlck5hbWUsIGluIEFTQ0lJXG4gICAgLy8gbG93ZXJjYXNlLlxuICAgIHBhcmFtZXRlck5hbWUgPSBwYXJhbWV0ZXJOYW1lLnRvTG93ZXJDYXNlKClcblxuICAgIC8vIDUuIElmIHBvc2l0aW9uIGlzIG5vdCBwYXN0IHRoZSBlbmQgb2YgaW5wdXQsIHRoZW46XG4gICAgaWYgKHBvc2l0aW9uLnBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAvLyAxLiBJZiB0aGUgY29kZSBwb2ludCBhdCBwb3NpdGlvbiB3aXRoaW4gaW5wdXQgaXNcbiAgICAgIC8vIFUrMDAzQiAoOyksIHRoZW4gY29udGludWUuXG4gICAgICBpZiAoaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dID09PSAnOycpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gMi4gQWR2YW5jZSBwb3NpdGlvbiBieSAxLiAoVGhpcyBza2lwcyBwYXN0IFUrMDAzRCAoPSkuKVxuICAgICAgcG9zaXRpb24ucG9zaXRpb24rK1xuICAgIH1cblxuICAgIC8vIDYuIElmIHBvc2l0aW9uIGlzIHBhc3QgdGhlIGVuZCBvZiBpbnB1dCwgdGhlbiBicmVhay5cbiAgICBpZiAocG9zaXRpb24ucG9zaXRpb24gPiBpbnB1dC5sZW5ndGgpIHtcbiAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgLy8gNy4gTGV0IHBhcmFtZXRlclZhbHVlIGJlIG51bGwuXG4gICAgbGV0IHBhcmFtZXRlclZhbHVlID0gbnVsbFxuXG4gICAgLy8gOC4gSWYgdGhlIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluIGlucHV0IGlzXG4gICAgLy8gVSswMDIyIChcIiksIHRoZW46XG4gICAgaWYgKGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXSA9PT0gJ1wiJykge1xuICAgICAgLy8gMS4gU2V0IHBhcmFtZXRlclZhbHVlIHRvIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZ1xuICAgICAgLy8gYW4gSFRUUCBxdW90ZWQgc3RyaW5nIGZyb20gaW5wdXQsIGdpdmVuIHBvc2l0aW9uXG4gICAgICAvLyBhbmQgdGhlIGV4dHJhY3QtdmFsdWUgZmxhZy5cbiAgICAgIHBhcmFtZXRlclZhbHVlID0gY29sbGVjdEFuSFRUUFF1b3RlZFN0cmluZyhpbnB1dCwgcG9zaXRpb24sIHRydWUpXG5cbiAgICAgIC8vIDIuIENvbGxlY3QgYSBzZXF1ZW5jZSBvZiBjb2RlIHBvaW50cyB0aGF0IGFyZSBub3RcbiAgICAgIC8vIFUrMDAzQiAoOykgZnJvbSBpbnB1dCwgZ2l2ZW4gcG9zaXRpb24uXG4gICAgICBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdChcbiAgICAgICAgJzsnLFxuICAgICAgICBpbnB1dCxcbiAgICAgICAgcG9zaXRpb25cbiAgICAgIClcblxuICAgIC8vIDkuIE90aGVyd2lzZTpcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gMS4gU2V0IHBhcmFtZXRlclZhbHVlIHRvIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZ1xuICAgICAgLy8gYSBzZXF1ZW5jZSBvZiBjb2RlIHBvaW50cyB0aGF0IGFyZSBub3QgVSswMDNCICg7KVxuICAgICAgLy8gZnJvbSBpbnB1dCwgZ2l2ZW4gcG9zaXRpb24uXG4gICAgICBwYXJhbWV0ZXJWYWx1ZSA9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0KFxuICAgICAgICAnOycsXG4gICAgICAgIGlucHV0LFxuICAgICAgICBwb3NpdGlvblxuICAgICAgKVxuXG4gICAgICAvLyAyLiBSZW1vdmUgYW55IHRyYWlsaW5nIEhUVFAgd2hpdGVzcGFjZSBmcm9tIHBhcmFtZXRlclZhbHVlLlxuICAgICAgcGFyYW1ldGVyVmFsdWUgPSByZW1vdmVIVFRQV2hpdGVzcGFjZShwYXJhbWV0ZXJWYWx1ZSwgZmFsc2UsIHRydWUpXG5cbiAgICAgIC8vIDMuIElmIHBhcmFtZXRlclZhbHVlIGlzIHRoZSBlbXB0eSBzdHJpbmcsIHRoZW4gY29udGludWUuXG4gICAgICBpZiAocGFyYW1ldGVyVmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gMTAuIElmIGFsbCBvZiB0aGUgZm9sbG93aW5nIGFyZSB0cnVlXG4gICAgLy8gLSBwYXJhbWV0ZXJOYW1lIGlzIG5vdCB0aGUgZW1wdHkgc3RyaW5nXG4gICAgLy8gLSBwYXJhbWV0ZXJOYW1lIHNvbGVseSBjb250YWlucyBIVFRQIHRva2VuIGNvZGUgcG9pbnRzXG4gICAgLy8gLSBwYXJhbWV0ZXJWYWx1ZSBzb2xlbHkgY29udGFpbnMgSFRUUCBxdW90ZWQtc3RyaW5nIHRva2VuIGNvZGUgcG9pbnRzXG4gICAgLy8gLSBtaW1lVHlwZeKAmXMgcGFyYW1ldGVyc1twYXJhbWV0ZXJOYW1lXSBkb2VzIG5vdCBleGlzdFxuICAgIC8vIHRoZW4gc2V0IG1pbWVUeXBl4oCZcyBwYXJhbWV0ZXJzW3BhcmFtZXRlck5hbWVdIHRvIHBhcmFtZXRlclZhbHVlLlxuICAgIGlmIChcbiAgICAgIHBhcmFtZXRlck5hbWUubGVuZ3RoICE9PSAwICYmXG4gICAgICBIVFRQX1RPS0VOX0NPREVQT0lOVFMudGVzdChwYXJhbWV0ZXJOYW1lKSAmJlxuICAgICAgKHBhcmFtZXRlclZhbHVlLmxlbmd0aCA9PT0gMCB8fCBIVFRQX1FVT1RFRF9TVFJJTkdfVE9LRU5TLnRlc3QocGFyYW1ldGVyVmFsdWUpKSAmJlxuICAgICAgIW1pbWVUeXBlLnBhcmFtZXRlcnMuaGFzKHBhcmFtZXRlck5hbWUpXG4gICAgKSB7XG4gICAgICBtaW1lVHlwZS5wYXJhbWV0ZXJzLnNldChwYXJhbWV0ZXJOYW1lLCBwYXJhbWV0ZXJWYWx1ZSlcbiAgICB9XG4gIH1cblxuICAvLyAxMi4gUmV0dXJuIG1pbWVUeXBlLlxuICByZXR1cm4gbWltZVR5cGVcbn1cblxuLy8gaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2ZvcmdpdmluZy1iYXNlNjQtZGVjb2RlXG4vKiogQHBhcmFtIHtzdHJpbmd9IGRhdGEgKi9cbmZ1bmN0aW9uIGZvcmdpdmluZ0Jhc2U2NCAoZGF0YSkge1xuICAvLyAxLiBSZW1vdmUgYWxsIEFTQ0lJIHdoaXRlc3BhY2UgZnJvbSBkYXRhLlxuICBkYXRhID0gZGF0YS5yZXBsYWNlKC9bXFx1MDAwOVxcdTAwMEFcXHUwMDBDXFx1MDAwRFxcdTAwMjBdL2csICcnKSAgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gIC8vIDIuIElmIGRhdGHigJlzIGNvZGUgcG9pbnQgbGVuZ3RoIGRpdmlkZXMgYnkgNCBsZWF2aW5nXG4gIC8vIG5vIHJlbWFpbmRlciwgdGhlbjpcbiAgaWYgKGRhdGEubGVuZ3RoICUgNCA9PT0gMCkge1xuICAgIC8vIDEuIElmIGRhdGEgZW5kcyB3aXRoIG9uZSBvciB0d28gVSswMDNEICg9KSBjb2RlIHBvaW50cyxcbiAgICAvLyB0aGVuIHJlbW92ZSB0aGVtIGZyb20gZGF0YS5cbiAgICBkYXRhID0gZGF0YS5yZXBsYWNlKC89Pz0kLywgJycpXG4gIH1cblxuICAvLyAzLiBJZiBkYXRh4oCZcyBjb2RlIHBvaW50IGxlbmd0aCBkaXZpZGVzIGJ5IDQgbGVhdmluZ1xuICAvLyBhIHJlbWFpbmRlciBvZiAxLCB0aGVuIHJldHVybiBmYWlsdXJlLlxuICBpZiAoZGF0YS5sZW5ndGggJSA0ID09PSAxKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgLy8gNC4gSWYgZGF0YSBjb250YWlucyBhIGNvZGUgcG9pbnQgdGhhdCBpcyBub3Qgb25lIG9mXG4gIC8vICBVKzAwMkIgKCspXG4gIC8vICBVKzAwMkYgKC8pXG4gIC8vICBBU0NJSSBhbHBoYW51bWVyaWNcbiAgLy8gdGhlbiByZXR1cm4gZmFpbHVyZS5cbiAgaWYgKC9bXisvMC05QS1aYS16XS8udGVzdChkYXRhKSkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIGNvbnN0IGJpbmFyeSA9IGF0b2IoZGF0YSlcbiAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheShiaW5hcnkubGVuZ3RoKVxuXG4gIGZvciAobGV0IGJ5dGUgPSAwOyBieXRlIDwgYmluYXJ5Lmxlbmd0aDsgYnl0ZSsrKSB7XG4gICAgYnl0ZXNbYnl0ZV0gPSBiaW5hcnkuY2hhckNvZGVBdChieXRlKVxuICB9XG5cbiAgcmV0dXJuIGJ5dGVzXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb2xsZWN0LWFuLWh0dHAtcXVvdGVkLXN0cmluZ1xuLy8gdGVzdHM6IGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNleGFtcGxlLWh0dHAtcXVvdGVkLXN0cmluZ1xuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRcbiAqIEBwYXJhbSB7eyBwb3NpdGlvbjogbnVtYmVyIH19IHBvc2l0aW9uXG4gKiBAcGFyYW0ge2Jvb2xlYW4/fSBleHRyYWN0VmFsdWVcbiAqL1xuZnVuY3Rpb24gY29sbGVjdEFuSFRUUFF1b3RlZFN0cmluZyAoaW5wdXQsIHBvc2l0aW9uLCBleHRyYWN0VmFsdWUpIHtcbiAgLy8gMS4gTGV0IHBvc2l0aW9uU3RhcnQgYmUgcG9zaXRpb24uXG4gIGNvbnN0IHBvc2l0aW9uU3RhcnQgPSBwb3NpdGlvbi5wb3NpdGlvblxuXG4gIC8vIDIuIExldCB2YWx1ZSBiZSB0aGUgZW1wdHkgc3RyaW5nLlxuICBsZXQgdmFsdWUgPSAnJ1xuXG4gIC8vIDMuIEFzc2VydDogdGhlIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluIGlucHV0XG4gIC8vIGlzIFUrMDAyMiAoXCIpLlxuICBhc3NlcnQoaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dID09PSAnXCInKVxuXG4gIC8vIDQuIEFkdmFuY2UgcG9zaXRpb24gYnkgMS5cbiAgcG9zaXRpb24ucG9zaXRpb24rK1xuXG4gIC8vIDUuIFdoaWxlIHRydWU6XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgLy8gMS4gQXBwZW5kIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzXG4gICAgLy8gdGhhdCBhcmUgbm90IFUrMDAyMiAoXCIpIG9yIFUrMDA1QyAoXFwpIGZyb20gaW5wdXQsIGdpdmVuXG4gICAgLy8gcG9zaXRpb24sIHRvIHZhbHVlLlxuICAgIHZhbHVlICs9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMoXG4gICAgICAoY2hhcikgPT4gY2hhciAhPT0gJ1wiJyAmJiBjaGFyICE9PSAnXFxcXCcsXG4gICAgICBpbnB1dCxcbiAgICAgIHBvc2l0aW9uXG4gICAgKVxuXG4gICAgLy8gMi4gSWYgcG9zaXRpb24gaXMgcGFzdCB0aGUgZW5kIG9mIGlucHV0LCB0aGVuIGJyZWFrLlxuICAgIGlmIChwb3NpdGlvbi5wb3NpdGlvbiA+PSBpbnB1dC5sZW5ndGgpIHtcbiAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgLy8gMy4gTGV0IHF1b3RlT3JCYWNrc2xhc2ggYmUgdGhlIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluXG4gICAgLy8gaW5wdXQuXG4gICAgY29uc3QgcXVvdGVPckJhY2tzbGFzaCA9IGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXVxuXG4gICAgLy8gNC4gQWR2YW5jZSBwb3NpdGlvbiBieSAxLlxuICAgIHBvc2l0aW9uLnBvc2l0aW9uKytcblxuICAgIC8vIDUuIElmIHF1b3RlT3JCYWNrc2xhc2ggaXMgVSswMDVDIChcXCksIHRoZW46XG4gICAgaWYgKHF1b3RlT3JCYWNrc2xhc2ggPT09ICdcXFxcJykge1xuICAgICAgLy8gMS4gSWYgcG9zaXRpb24gaXMgcGFzdCB0aGUgZW5kIG9mIGlucHV0LCB0aGVuIGFwcGVuZFxuICAgICAgLy8gVSswMDVDIChcXCkgdG8gdmFsdWUgYW5kIGJyZWFrLlxuICAgICAgaWYgKHBvc2l0aW9uLnBvc2l0aW9uID49IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICB2YWx1ZSArPSAnXFxcXCdcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgLy8gMi4gQXBwZW5kIHRoZSBjb2RlIHBvaW50IGF0IHBvc2l0aW9uIHdpdGhpbiBpbnB1dCB0byB2YWx1ZS5cbiAgICAgIHZhbHVlICs9IGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXVxuXG4gICAgICAvLyAzLiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuXG4gICAgICBwb3NpdGlvbi5wb3NpdGlvbisrXG5cbiAgICAvLyA2LiBPdGhlcndpc2U6XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIDEuIEFzc2VydDogcXVvdGVPckJhY2tzbGFzaCBpcyBVKzAwMjIgKFwiKS5cbiAgICAgIGFzc2VydChxdW90ZU9yQmFja3NsYXNoID09PSAnXCInKVxuXG4gICAgICAvLyAyLiBCcmVhay5cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgLy8gNi4gSWYgdGhlIGV4dHJhY3QtdmFsdWUgZmxhZyBpcyBzZXQsIHRoZW4gcmV0dXJuIHZhbHVlLlxuICBpZiAoZXh0cmFjdFZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cblxuICAvLyA3LiBSZXR1cm4gdGhlIGNvZGUgcG9pbnRzIGZyb20gcG9zaXRpb25TdGFydCB0byBwb3NpdGlvbixcbiAgLy8gaW5jbHVzaXZlLCB3aXRoaW4gaW5wdXQuXG4gIHJldHVybiBpbnB1dC5zbGljZShwb3NpdGlvblN0YXJ0LCBwb3NpdGlvbi5wb3NpdGlvbilcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jc2VyaWFsaXplLWEtbWltZS10eXBlXG4gKi9cbmZ1bmN0aW9uIHNlcmlhbGl6ZUFNaW1lVHlwZSAobWltZVR5cGUpIHtcbiAgYXNzZXJ0KG1pbWVUeXBlICE9PSAnZmFpbHVyZScpXG4gIGNvbnN0IHsgcGFyYW1ldGVycywgZXNzZW5jZSB9ID0gbWltZVR5cGVcblxuICAvLyAxLiBMZXQgc2VyaWFsaXphdGlvbiBiZSB0aGUgY29uY2F0ZW5hdGlvbiBvZiBtaW1lVHlwZeKAmXNcbiAgLy8gICAgdHlwZSwgVSswMDJGICgvKSwgYW5kIG1pbWVUeXBl4oCZcyBzdWJ0eXBlLlxuICBsZXQgc2VyaWFsaXphdGlvbiA9IGVzc2VuY2VcblxuICAvLyAyLiBGb3IgZWFjaCBuYW1lIOKGkiB2YWx1ZSBvZiBtaW1lVHlwZeKAmXMgcGFyYW1ldGVyczpcbiAgZm9yIChsZXQgW25hbWUsIHZhbHVlXSBvZiBwYXJhbWV0ZXJzLmVudHJpZXMoKSkge1xuICAgIC8vIDEuIEFwcGVuZCBVKzAwM0IgKDspIHRvIHNlcmlhbGl6YXRpb24uXG4gICAgc2VyaWFsaXphdGlvbiArPSAnOydcblxuICAgIC8vIDIuIEFwcGVuZCBuYW1lIHRvIHNlcmlhbGl6YXRpb24uXG4gICAgc2VyaWFsaXphdGlvbiArPSBuYW1lXG5cbiAgICAvLyAzLiBBcHBlbmQgVSswMDNEICg9KSB0byBzZXJpYWxpemF0aW9uLlxuICAgIHNlcmlhbGl6YXRpb24gKz0gJz0nXG5cbiAgICAvLyA0LiBJZiB2YWx1ZSBkb2VzIG5vdCBzb2xlbHkgY29udGFpbiBIVFRQIHRva2VuIGNvZGVcbiAgICAvLyAgICBwb2ludHMgb3IgdmFsdWUgaXMgdGhlIGVtcHR5IHN0cmluZywgdGhlbjpcbiAgICBpZiAoIUhUVFBfVE9LRU5fQ09ERVBPSU5UUy50ZXN0KHZhbHVlKSkge1xuICAgICAgLy8gMS4gUHJlY2VkZSBlYWNoIG9jY3VyZW5jZSBvZiBVKzAwMjIgKFwiKSBvclxuICAgICAgLy8gICAgVSswMDVDIChcXCkgaW4gdmFsdWUgd2l0aCBVKzAwNUMgKFxcKS5cbiAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvKFxcXFx8XCIpL2csICdcXFxcJDEnKVxuXG4gICAgICAvLyAyLiBQcmVwZW5kIFUrMDAyMiAoXCIpIHRvIHZhbHVlLlxuICAgICAgdmFsdWUgPSAnXCInICsgdmFsdWVcblxuICAgICAgLy8gMy4gQXBwZW5kIFUrMDAyMiAoXCIpIHRvIHZhbHVlLlxuICAgICAgdmFsdWUgKz0gJ1wiJ1xuICAgIH1cblxuICAgIC8vIDUuIEFwcGVuZCB2YWx1ZSB0byBzZXJpYWxpemF0aW9uLlxuICAgIHNlcmlhbGl6YXRpb24gKz0gdmFsdWVcbiAgfVxuXG4gIC8vIDMuIFJldHVybiBzZXJpYWxpemF0aW9uLlxuICByZXR1cm4gc2VyaWFsaXphdGlvblxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtd2hpdGVzcGFjZVxuICogQHBhcmFtIHtzdHJpbmd9IGNoYXJcbiAqL1xuZnVuY3Rpb24gaXNIVFRQV2hpdGVTcGFjZSAoY2hhcikge1xuICByZXR1cm4gY2hhciA9PT0gJ1xccicgfHwgY2hhciA9PT0gJ1xcbicgfHwgY2hhciA9PT0gJ1xcdCcgfHwgY2hhciA9PT0gJyAnXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC13aGl0ZXNwYWNlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUhUVFBXaGl0ZXNwYWNlIChzdHIsIGxlYWRpbmcgPSB0cnVlLCB0cmFpbGluZyA9IHRydWUpIHtcbiAgbGV0IGxlYWQgPSAwXG4gIGxldCB0cmFpbCA9IHN0ci5sZW5ndGggLSAxXG5cbiAgaWYgKGxlYWRpbmcpIHtcbiAgICBmb3IgKDsgbGVhZCA8IHN0ci5sZW5ndGggJiYgaXNIVFRQV2hpdGVTcGFjZShzdHJbbGVhZF0pOyBsZWFkKyspO1xuICB9XG5cbiAgaWYgKHRyYWlsaW5nKSB7XG4gICAgZm9yICg7IHRyYWlsID4gMCAmJiBpc0hUVFBXaGl0ZVNwYWNlKHN0clt0cmFpbF0pOyB0cmFpbC0tKTtcbiAgfVxuXG4gIHJldHVybiBzdHIuc2xpY2UobGVhZCwgdHJhaWwgKyAxKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2FzY2lpLXdoaXRlc3BhY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBjaGFyXG4gKi9cbmZ1bmN0aW9uIGlzQVNDSUlXaGl0ZXNwYWNlIChjaGFyKSB7XG4gIHJldHVybiBjaGFyID09PSAnXFxyJyB8fCBjaGFyID09PSAnXFxuJyB8fCBjaGFyID09PSAnXFx0JyB8fCBjaGFyID09PSAnXFxmJyB8fCBjaGFyID09PSAnICdcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNzdHJpcC1sZWFkaW5nLWFuZC10cmFpbGluZy1hc2NpaS13aGl0ZXNwYWNlXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUFTQ0lJV2hpdGVzcGFjZSAoc3RyLCBsZWFkaW5nID0gdHJ1ZSwgdHJhaWxpbmcgPSB0cnVlKSB7XG4gIGxldCBsZWFkID0gMFxuICBsZXQgdHJhaWwgPSBzdHIubGVuZ3RoIC0gMVxuXG4gIGlmIChsZWFkaW5nKSB7XG4gICAgZm9yICg7IGxlYWQgPCBzdHIubGVuZ3RoICYmIGlzQVNDSUlXaGl0ZXNwYWNlKHN0cltsZWFkXSk7IGxlYWQrKyk7XG4gIH1cblxuICBpZiAodHJhaWxpbmcpIHtcbiAgICBmb3IgKDsgdHJhaWwgPiAwICYmIGlzQVNDSUlXaGl0ZXNwYWNlKHN0clt0cmFpbF0pOyB0cmFpbC0tKTtcbiAgfVxuXG4gIHJldHVybiBzdHIuc2xpY2UobGVhZCwgdHJhaWwgKyAxKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZGF0YVVSTFByb2Nlc3NvcixcbiAgVVJMU2VyaWFsaXplcixcbiAgY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50cyxcbiAgY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QsXG4gIHN0cmluZ1BlcmNlbnREZWNvZGUsXG4gIHBhcnNlTUlNRVR5cGUsXG4gIGNvbGxlY3RBbkhUVFBRdW90ZWRTdHJpbmcsXG4gIHNlcmlhbGl6ZUFNaW1lVHlwZVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBCbG9iLCBGaWxlOiBOYXRpdmVGaWxlIH0gPSByZXF1aXJlKCdidWZmZXInKVxuY29uc3QgeyB0eXBlcyB9ID0gcmVxdWlyZSgndXRpbCcpXG5jb25zdCB7IGtTdGF0ZSB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgaXNCbG9iTGlrZSB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuL3dlYmlkbCcpXG5jb25zdCB7IHBhcnNlTUlNRVR5cGUsIHNlcmlhbGl6ZUFNaW1lVHlwZSB9ID0gcmVxdWlyZSgnLi9kYXRhVVJMJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKVxuXG5jbGFzcyBGaWxlIGV4dGVuZHMgQmxvYiB7XG4gIGNvbnN0cnVjdG9yIChmaWxlQml0cywgZmlsZU5hbWUsIG9wdGlvbnMgPSB7fSkge1xuICAgIC8vIFRoZSBGaWxlIGNvbnN0cnVjdG9yIGlzIGludm9rZWQgd2l0aCB0d28gb3IgdGhyZWUgcGFyYW1ldGVycywgZGVwZW5kaW5nXG4gICAgLy8gb24gd2hldGhlciB0aGUgb3B0aW9uYWwgZGljdGlvbmFyeSBwYXJhbWV0ZXIgaXMgdXNlZC4gV2hlbiB0aGUgRmlsZSgpXG4gICAgLy8gY29uc3RydWN0b3IgaXMgaW52b2tlZCwgdXNlciBhZ2VudHMgbXVzdCBydW4gdGhlIGZvbGxvd2luZyBzdGVwczpcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnRmlsZSBjb25zdHJ1Y3RvcicgfSlcblxuICAgIGZpbGVCaXRzID0gd2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPEJsb2JQYXJ0PiddKGZpbGVCaXRzKVxuICAgIGZpbGVOYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKGZpbGVOYW1lKVxuICAgIG9wdGlvbnMgPSB3ZWJpZGwuY29udmVydGVycy5GaWxlUHJvcGVydHlCYWcob3B0aW9ucylcblxuICAgIC8vIDEuIExldCBieXRlcyBiZSB0aGUgcmVzdWx0IG9mIHByb2Nlc3NpbmcgYmxvYiBwYXJ0cyBnaXZlbiBmaWxlQml0cyBhbmRcbiAgICAvLyBvcHRpb25zLlxuICAgIC8vIE5vdGU6IEJsb2IgaGFuZGxlcyB0aGlzIGZvciB1c1xuXG4gICAgLy8gMi4gTGV0IG4gYmUgdGhlIGZpbGVOYW1lIGFyZ3VtZW50IHRvIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICBjb25zdCBuID0gZmlsZU5hbWVcblxuICAgIC8vIDMuIFByb2Nlc3MgRmlsZVByb3BlcnR5QmFnIGRpY3Rpb25hcnkgYXJndW1lbnQgYnkgcnVubmluZyB0aGUgZm9sbG93aW5nXG4gICAgLy8gc3Vic3RlcHM6XG5cbiAgICAvLyAgICAxLiBJZiB0aGUgdHlwZSBtZW1iZXIgaXMgcHJvdmlkZWQgYW5kIGlzIG5vdCB0aGUgZW1wdHkgc3RyaW5nLCBsZXQgdFxuICAgIC8vICAgIGJlIHNldCB0byB0aGUgdHlwZSBkaWN0aW9uYXJ5IG1lbWJlci4gSWYgdCBjb250YWlucyBhbnkgY2hhcmFjdGVyc1xuICAgIC8vICAgIG91dHNpZGUgdGhlIHJhbmdlIFUrMDAyMCB0byBVKzAwN0UsIHRoZW4gc2V0IHQgdG8gdGhlIGVtcHR5IHN0cmluZ1xuICAgIC8vICAgIGFuZCByZXR1cm4gZnJvbSB0aGVzZSBzdWJzdGVwcy5cbiAgICAvLyAgICAyLiBDb252ZXJ0IGV2ZXJ5IGNoYXJhY3RlciBpbiB0IHRvIEFTQ0lJIGxvd2VyY2FzZS5cbiAgICBsZXQgdCA9IG9wdGlvbnMudHlwZVxuICAgIGxldCBkXG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbGFiZWxzXG4gICAgc3Vic3RlcDoge1xuICAgICAgaWYgKHQpIHtcbiAgICAgICAgdCA9IHBhcnNlTUlNRVR5cGUodClcblxuICAgICAgICBpZiAodCA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgICAgdCA9ICcnXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxhYmVsc1xuICAgICAgICAgIGJyZWFrIHN1YnN0ZXBcbiAgICAgICAgfVxuXG4gICAgICAgIHQgPSBzZXJpYWxpemVBTWltZVR5cGUodCkudG9Mb3dlckNhc2UoKVxuICAgICAgfVxuXG4gICAgICAvLyAgICAzLiBJZiB0aGUgbGFzdE1vZGlmaWVkIG1lbWJlciBpcyBwcm92aWRlZCwgbGV0IGQgYmUgc2V0IHRvIHRoZVxuICAgICAgLy8gICAgbGFzdE1vZGlmaWVkIGRpY3Rpb25hcnkgbWVtYmVyLiBJZiBpdCBpcyBub3QgcHJvdmlkZWQsIHNldCBkIHRvIHRoZVxuICAgICAgLy8gICAgY3VycmVudCBkYXRlIGFuZCB0aW1lIHJlcHJlc2VudGVkIGFzIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHNpbmNlXG4gICAgICAvLyAgICB0aGUgVW5peCBFcG9jaCAod2hpY2ggaXMgdGhlIGVxdWl2YWxlbnQgb2YgRGF0ZS5ub3coKSBbRUNNQS0yNjJdKS5cbiAgICAgIGQgPSBvcHRpb25zLmxhc3RNb2RpZmllZFxuICAgIH1cblxuICAgIC8vIDQuIFJldHVybiBhIG5ldyBGaWxlIG9iamVjdCBGIHN1Y2ggdGhhdDpcbiAgICAvLyBGIHJlZmVycyB0byB0aGUgYnl0ZXMgYnl0ZSBzZXF1ZW5jZS5cbiAgICAvLyBGLnNpemUgaXMgc2V0IHRvIHRoZSBudW1iZXIgb2YgdG90YWwgYnl0ZXMgaW4gYnl0ZXMuXG4gICAgLy8gRi5uYW1lIGlzIHNldCB0byBuLlxuICAgIC8vIEYudHlwZSBpcyBzZXQgdG8gdC5cbiAgICAvLyBGLmxhc3RNb2RpZmllZCBpcyBzZXQgdG8gZC5cblxuICAgIHN1cGVyKHByb2Nlc3NCbG9iUGFydHMoZmlsZUJpdHMsIG9wdGlvbnMpLCB7IHR5cGU6IHQgfSlcbiAgICB0aGlzW2tTdGF0ZV0gPSB7XG4gICAgICBuYW1lOiBuLFxuICAgICAgbGFzdE1vZGlmaWVkOiBkLFxuICAgICAgdHlwZTogdFxuICAgIH1cbiAgfVxuXG4gIGdldCBuYW1lICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5uYW1lXG4gIH1cblxuICBnZXQgbGFzdE1vZGlmaWVkICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5sYXN0TW9kaWZpZWRcbiAgfVxuXG4gIGdldCB0eXBlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS50eXBlXG4gIH1cbn1cblxuY2xhc3MgRmlsZUxpa2Uge1xuICBjb25zdHJ1Y3RvciAoYmxvYkxpa2UsIGZpbGVOYW1lLCBvcHRpb25zID0ge30pIHtcbiAgICAvLyBUT0RPOiBhcmd1bWVudCBpZGwgdHlwZSBjaGVja1xuXG4gICAgLy8gVGhlIEZpbGUgY29uc3RydWN0b3IgaXMgaW52b2tlZCB3aXRoIHR3byBvciB0aHJlZSBwYXJhbWV0ZXJzLCBkZXBlbmRpbmdcbiAgICAvLyBvbiB3aGV0aGVyIHRoZSBvcHRpb25hbCBkaWN0aW9uYXJ5IHBhcmFtZXRlciBpcyB1c2VkLiBXaGVuIHRoZSBGaWxlKClcbiAgICAvLyBjb25zdHJ1Y3RvciBpcyBpbnZva2VkLCB1c2VyIGFnZW50cyBtdXN0IHJ1biB0aGUgZm9sbG93aW5nIHN0ZXBzOlxuXG4gICAgLy8gMS4gTGV0IGJ5dGVzIGJlIHRoZSByZXN1bHQgb2YgcHJvY2Vzc2luZyBibG9iIHBhcnRzIGdpdmVuIGZpbGVCaXRzIGFuZFxuICAgIC8vIG9wdGlvbnMuXG5cbiAgICAvLyAyLiBMZXQgbiBiZSB0aGUgZmlsZU5hbWUgYXJndW1lbnQgdG8gdGhlIGNvbnN0cnVjdG9yLlxuICAgIGNvbnN0IG4gPSBmaWxlTmFtZVxuXG4gICAgLy8gMy4gUHJvY2VzcyBGaWxlUHJvcGVydHlCYWcgZGljdGlvbmFyeSBhcmd1bWVudCBieSBydW5uaW5nIHRoZSBmb2xsb3dpbmdcbiAgICAvLyBzdWJzdGVwczpcblxuICAgIC8vICAgIDEuIElmIHRoZSB0eXBlIG1lbWJlciBpcyBwcm92aWRlZCBhbmQgaXMgbm90IHRoZSBlbXB0eSBzdHJpbmcsIGxldCB0XG4gICAgLy8gICAgYmUgc2V0IHRvIHRoZSB0eXBlIGRpY3Rpb25hcnkgbWVtYmVyLiBJZiB0IGNvbnRhaW5zIGFueSBjaGFyYWN0ZXJzXG4gICAgLy8gICAgb3V0c2lkZSB0aGUgcmFuZ2UgVSswMDIwIHRvIFUrMDA3RSwgdGhlbiBzZXQgdCB0byB0aGUgZW1wdHkgc3RyaW5nXG4gICAgLy8gICAgYW5kIHJldHVybiBmcm9tIHRoZXNlIHN1YnN0ZXBzLlxuICAgIC8vICAgIFRPRE9cbiAgICBjb25zdCB0ID0gb3B0aW9ucy50eXBlXG5cbiAgICAvLyAgICAyLiBDb252ZXJ0IGV2ZXJ5IGNoYXJhY3RlciBpbiB0IHRvIEFTQ0lJIGxvd2VyY2FzZS5cbiAgICAvLyAgICBUT0RPXG5cbiAgICAvLyAgICAzLiBJZiB0aGUgbGFzdE1vZGlmaWVkIG1lbWJlciBpcyBwcm92aWRlZCwgbGV0IGQgYmUgc2V0IHRvIHRoZVxuICAgIC8vICAgIGxhc3RNb2RpZmllZCBkaWN0aW9uYXJ5IG1lbWJlci4gSWYgaXQgaXMgbm90IHByb3ZpZGVkLCBzZXQgZCB0byB0aGVcbiAgICAvLyAgICBjdXJyZW50IGRhdGUgYW5kIHRpbWUgcmVwcmVzZW50ZWQgYXMgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgc2luY2VcbiAgICAvLyAgICB0aGUgVW5peCBFcG9jaCAod2hpY2ggaXMgdGhlIGVxdWl2YWxlbnQgb2YgRGF0ZS5ub3coKSBbRUNNQS0yNjJdKS5cbiAgICBjb25zdCBkID0gb3B0aW9ucy5sYXN0TW9kaWZpZWQgPz8gRGF0ZS5ub3coKVxuXG4gICAgLy8gNC4gUmV0dXJuIGEgbmV3IEZpbGUgb2JqZWN0IEYgc3VjaCB0aGF0OlxuICAgIC8vIEYgcmVmZXJzIHRvIHRoZSBieXRlcyBieXRlIHNlcXVlbmNlLlxuICAgIC8vIEYuc2l6ZSBpcyBzZXQgdG8gdGhlIG51bWJlciBvZiB0b3RhbCBieXRlcyBpbiBieXRlcy5cbiAgICAvLyBGLm5hbWUgaXMgc2V0IHRvIG4uXG4gICAgLy8gRi50eXBlIGlzIHNldCB0byB0LlxuICAgIC8vIEYubGFzdE1vZGlmaWVkIGlzIHNldCB0byBkLlxuXG4gICAgdGhpc1trU3RhdGVdID0ge1xuICAgICAgYmxvYkxpa2UsXG4gICAgICBuYW1lOiBuLFxuICAgICAgdHlwZTogdCxcbiAgICAgIGxhc3RNb2RpZmllZDogZFxuICAgIH1cbiAgfVxuXG4gIHN0cmVhbSAoLi4uYXJncykge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVMaWtlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5ibG9iTGlrZS5zdHJlYW0oLi4uYXJncylcbiAgfVxuXG4gIGFycmF5QnVmZmVyICguLi5hcmdzKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZUxpa2UpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmJsb2JMaWtlLmFycmF5QnVmZmVyKC4uLmFyZ3MpXG4gIH1cblxuICBzbGljZSAoLi4uYXJncykge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVMaWtlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5ibG9iTGlrZS5zbGljZSguLi5hcmdzKVxuICB9XG5cbiAgdGV4dCAoLi4uYXJncykge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVMaWtlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5ibG9iTGlrZS50ZXh0KC4uLmFyZ3MpXG4gIH1cblxuICBnZXQgc2l6ZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZUxpa2UpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmJsb2JMaWtlLnNpemVcbiAgfVxuXG4gIGdldCB0eXBlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlTGlrZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uYmxvYkxpa2UudHlwZVxuICB9XG5cbiAgZ2V0IG5hbWUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVMaWtlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5uYW1lXG4gIH1cblxuICBnZXQgbGFzdE1vZGlmaWVkICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlTGlrZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ubGFzdE1vZGlmaWVkXG4gIH1cblxuICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10gKCkge1xuICAgIHJldHVybiAnRmlsZSdcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhGaWxlLnByb3RvdHlwZSwge1xuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnRmlsZScsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0sXG4gIG5hbWU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGxhc3RNb2RpZmllZDoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxud2ViaWRsLmNvbnZlcnRlcnMuQmxvYiA9IHdlYmlkbC5pbnRlcmZhY2VDb252ZXJ0ZXIoQmxvYilcblxud2ViaWRsLmNvbnZlcnRlcnMuQmxvYlBhcnQgPSBmdW5jdGlvbiAoViwgb3B0cykge1xuICBpZiAod2ViaWRsLnV0aWwuVHlwZShWKSA9PT0gJ09iamVjdCcpIHtcbiAgICBpZiAoaXNCbG9iTGlrZShWKSkge1xuICAgICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkJsb2IoViwgeyBzdHJpY3Q6IGZhbHNlIH0pXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgQXJyYXlCdWZmZXIuaXNWaWV3KFYpIHx8XG4gICAgICB0eXBlcy5pc0FueUFycmF5QnVmZmVyKFYpXG4gICAgKSB7XG4gICAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuQnVmZmVyU291cmNlKFYsIG9wdHMpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhWLCBvcHRzKVxufVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8QmxvYlBhcnQ+J10gPSB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLkJsb2JQYXJ0XG4pXG5cbi8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9GaWxlQVBJLyNkZm4tRmlsZVByb3BlcnR5QmFnXG53ZWJpZGwuY29udmVydGVycy5GaWxlUHJvcGVydHlCYWcgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIHtcbiAgICBrZXk6ICdsYXN0TW9kaWZpZWQnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ2xvbmcgbG9uZyddLFxuICAgIGdldCBkZWZhdWx0VmFsdWUgKCkge1xuICAgICAgcmV0dXJuIERhdGUubm93KClcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBrZXk6ICd0eXBlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6ICcnXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdlbmRpbmdzJyxcbiAgICBjb252ZXJ0ZXI6ICh2YWx1ZSkgPT4ge1xuICAgICAgdmFsdWUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcodmFsdWUpXG4gICAgICB2YWx1ZSA9IHZhbHVlLnRvTG93ZXJDYXNlKClcblxuICAgICAgaWYgKHZhbHVlICE9PSAnbmF0aXZlJykge1xuICAgICAgICB2YWx1ZSA9ICd0cmFuc3BhcmVudCdcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgfSxcbiAgICBkZWZhdWx0VmFsdWU6ICd0cmFuc3BhcmVudCdcbiAgfVxuXSlcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9GaWxlQVBJLyNwcm9jZXNzLWJsb2ItcGFydHNcbiAqIEBwYXJhbSB7KE5vZGVKUy5UeXBlZEFycmF5fEJsb2J8c3RyaW5nKVtdfSBwYXJ0c1xuICogQHBhcmFtIHt7IHR5cGU6IHN0cmluZywgZW5kaW5nczogc3RyaW5nIH19IG9wdGlvbnNcbiAqL1xuZnVuY3Rpb24gcHJvY2Vzc0Jsb2JQYXJ0cyAocGFydHMsIG9wdGlvbnMpIHtcbiAgLy8gMS4gTGV0IGJ5dGVzIGJlIGFuIGVtcHR5IHNlcXVlbmNlIG9mIGJ5dGVzLlxuICAvKiogQHR5cGUge05vZGVKUy5UeXBlZEFycmF5W119ICovXG4gIGNvbnN0IGJ5dGVzID0gW11cblxuICAvLyAyLiBGb3IgZWFjaCBlbGVtZW50IGluIHBhcnRzOlxuICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgcGFydHMpIHtcbiAgICAvLyAxLiBJZiBlbGVtZW50IGlzIGEgVVNWU3RyaW5nLCBydW4gdGhlIGZvbGxvd2luZyBzdWJzdGVwczpcbiAgICBpZiAodHlwZW9mIGVsZW1lbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyAxLiBMZXQgcyBiZSBlbGVtZW50LlxuICAgICAgbGV0IHMgPSBlbGVtZW50XG5cbiAgICAgIC8vIDIuIElmIHRoZSBlbmRpbmdzIG1lbWJlciBvZiBvcHRpb25zIGlzIFwibmF0aXZlXCIsIHNldCBzXG4gICAgICAvLyAgICB0byB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgbGluZSBlbmRpbmdzIHRvIG5hdGl2ZVxuICAgICAgLy8gICAgb2YgZWxlbWVudC5cbiAgICAgIGlmIChvcHRpb25zLmVuZGluZ3MgPT09ICduYXRpdmUnKSB7XG4gICAgICAgIHMgPSBjb252ZXJ0TGluZUVuZGluZ3NOYXRpdmUocylcbiAgICAgIH1cblxuICAgICAgLy8gMy4gQXBwZW5kIHRoZSByZXN1bHQgb2YgVVRGLTggZW5jb2RpbmcgcyB0byBieXRlcy5cbiAgICAgIGJ5dGVzLnB1c2goZW5jb2Rlci5lbmNvZGUocykpXG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHR5cGVzLmlzQW55QXJyYXlCdWZmZXIoZWxlbWVudCkgfHxcbiAgICAgIHR5cGVzLmlzVHlwZWRBcnJheShlbGVtZW50KVxuICAgICkge1xuICAgICAgLy8gMi4gSWYgZWxlbWVudCBpcyBhIEJ1ZmZlclNvdXJjZSwgZ2V0IGEgY29weSBvZiB0aGVcbiAgICAgIC8vICAgIGJ5dGVzIGhlbGQgYnkgdGhlIGJ1ZmZlciBzb3VyY2UsIGFuZCBhcHBlbmQgdGhvc2VcbiAgICAgIC8vICAgIGJ5dGVzIHRvIGJ5dGVzLlxuICAgICAgaWYgKCFlbGVtZW50LmJ1ZmZlcikgeyAvLyBBcnJheUJ1ZmZlclxuICAgICAgICBieXRlcy5wdXNoKG5ldyBVaW50OEFycmF5KGVsZW1lbnQpKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgICBuZXcgVWludDhBcnJheShlbGVtZW50LmJ1ZmZlciwgZWxlbWVudC5ieXRlT2Zmc2V0LCBlbGVtZW50LmJ5dGVMZW5ndGgpXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzQmxvYkxpa2UoZWxlbWVudCkpIHtcbiAgICAgIC8vIDMuIElmIGVsZW1lbnQgaXMgYSBCbG9iLCBhcHBlbmQgdGhlIGJ5dGVzIGl0IHJlcHJlc2VudHNcbiAgICAgIC8vICAgIHRvIGJ5dGVzLlxuICAgICAgYnl0ZXMucHVzaChlbGVtZW50KVxuICAgIH1cbiAgfVxuXG4gIC8vIDMuIFJldHVybiBieXRlcy5cbiAgcmV0dXJuIGJ5dGVzXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3d3dy53My5vcmcvVFIvRmlsZUFQSS8jY29udmVydC1saW5lLWVuZGluZ3MtdG8tbmF0aXZlXG4gKiBAcGFyYW0ge3N0cmluZ30gc1xuICovXG5mdW5jdGlvbiBjb252ZXJ0TGluZUVuZGluZ3NOYXRpdmUgKHMpIHtcbiAgLy8gMS4gTGV0IG5hdGl2ZSBsaW5lIGVuZGluZyBiZSBiZSB0aGUgY29kZSBwb2ludCBVKzAwMEEgTEYuXG4gIGxldCBuYXRpdmVMaW5lRW5kaW5nID0gJ1xcbidcblxuICAvLyAyLiBJZiB0aGUgdW5kZXJseWluZyBwbGF0Zm9ybeKAmXMgY29udmVudGlvbnMgYXJlIHRvXG4gIC8vICAgIHJlcHJlc2VudCBuZXdsaW5lcyBhcyBhIGNhcnJpYWdlIHJldHVybiBhbmQgbGluZSBmZWVkXG4gIC8vICAgIHNlcXVlbmNlLCBzZXQgbmF0aXZlIGxpbmUgZW5kaW5nIHRvIHRoZSBjb2RlIHBvaW50XG4gIC8vICAgIFUrMDAwRCBDUiBmb2xsb3dlZCBieSB0aGUgY29kZSBwb2ludCBVKzAwMEEgTEYuXG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG4gICAgbmF0aXZlTGluZUVuZGluZyA9ICdcXHJcXG4nXG4gIH1cblxuICByZXR1cm4gcy5yZXBsYWNlKC9cXHI/XFxuL2csIG5hdGl2ZUxpbmVFbmRpbmcpXG59XG5cbi8vIElmIHRoaXMgZnVuY3Rpb24gaXMgbW92ZWQgdG8gLi91dGlsLmpzLCBzb21lIHRvb2xzIChzdWNoIGFzXG4vLyByb2xsdXApIHdpbGwgd2FybiBhYm91dCBjaXJjdWxhciBkZXBlbmRlbmNpZXMuIFNlZTpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8xNjI5XG5mdW5jdGlvbiBpc0ZpbGVMaWtlIChvYmplY3QpIHtcbiAgcmV0dXJuIChcbiAgICAoTmF0aXZlRmlsZSAmJiBvYmplY3QgaW5zdGFuY2VvZiBOYXRpdmVGaWxlKSB8fFxuICAgIG9iamVjdCBpbnN0YW5jZW9mIEZpbGUgfHwgKFxuICAgICAgb2JqZWN0ICYmXG4gICAgICAodHlwZW9mIG9iamVjdC5zdHJlYW0gPT09ICdmdW5jdGlvbicgfHxcbiAgICAgIHR5cGVvZiBvYmplY3QuYXJyYXlCdWZmZXIgPT09ICdmdW5jdGlvbicpICYmXG4gICAgICBvYmplY3RbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ0ZpbGUnXG4gICAgKVxuICApXG59XG5cbm1vZHVsZS5leHBvcnRzID0geyBGaWxlLCBGaWxlTGlrZSwgaXNGaWxlTGlrZSB9XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGlzQmxvYkxpa2UsIHRvVVNWU3RyaW5nLCBtYWtlSXRlcmF0b3IgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IGtTdGF0ZSB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgRmlsZTogVW5kaWNpRmlsZSwgRmlsZUxpa2UsIGlzRmlsZUxpa2UgfSA9IHJlcXVpcmUoJy4vZmlsZScpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi93ZWJpZGwnKVxuY29uc3QgeyBCbG9iLCBGaWxlOiBOYXRpdmVGaWxlIH0gPSByZXF1aXJlKCdidWZmZXInKVxuXG4vKiogQHR5cGUge2dsb2JhbFRoaXNbJ0ZpbGUnXX0gKi9cbmNvbnN0IEZpbGUgPSBOYXRpdmVGaWxlID8/IFVuZGljaUZpbGVcblxuLy8gaHR0cHM6Ly94aHIuc3BlYy53aGF0d2cub3JnLyNmb3JtZGF0YVxuY2xhc3MgRm9ybURhdGEge1xuICBjb25zdHJ1Y3RvciAoZm9ybSkge1xuICAgIGlmIChmb3JtICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuY29udmVyc2lvbkZhaWxlZCh7XG4gICAgICAgIHByZWZpeDogJ0Zvcm1EYXRhIGNvbnN0cnVjdG9yJyxcbiAgICAgICAgYXJndW1lbnQ6ICdBcmd1bWVudCAxJyxcbiAgICAgICAgdHlwZXM6IFsndW5kZWZpbmVkJ11cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgdGhpc1trU3RhdGVdID0gW11cbiAgfVxuXG4gIGFwcGVuZCAobmFtZSwgdmFsdWUsIGZpbGVuYW1lID0gdW5kZWZpbmVkKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRm9ybURhdGEpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnRm9ybURhdGEuYXBwZW5kJyB9KVxuXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgIWlzQmxvYkxpa2UodmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBcIkZhaWxlZCB0byBleGVjdXRlICdhcHBlbmQnIG9uICdGb3JtRGF0YSc6IHBhcmFtZXRlciAyIGlzIG5vdCBvZiB0eXBlICdCbG9iJ1wiXG4gICAgICApXG4gICAgfVxuXG4gICAgLy8gMS4gTGV0IHZhbHVlIGJlIHZhbHVlIGlmIGdpdmVuOyBvdGhlcndpc2UgYmxvYlZhbHVlLlxuXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhuYW1lKVxuICAgIHZhbHVlID0gaXNCbG9iTGlrZSh2YWx1ZSlcbiAgICAgID8gd2ViaWRsLmNvbnZlcnRlcnMuQmxvYih2YWx1ZSwgeyBzdHJpY3Q6IGZhbHNlIH0pXG4gICAgICA6IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyh2YWx1ZSlcbiAgICBmaWxlbmFtZSA9IGFyZ3VtZW50cy5sZW5ndGggPT09IDNcbiAgICAgID8gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKGZpbGVuYW1lKVxuICAgICAgOiB1bmRlZmluZWRcblxuICAgIC8vIDIuIExldCBlbnRyeSBiZSB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGFuIGVudHJ5IHdpdGhcbiAgICAvLyBuYW1lLCB2YWx1ZSwgYW5kIGZpbGVuYW1lIGlmIGdpdmVuLlxuICAgIGNvbnN0IGVudHJ5ID0gbWFrZUVudHJ5KG5hbWUsIHZhbHVlLCBmaWxlbmFtZSlcblxuICAgIC8vIDMuIEFwcGVuZCBlbnRyeSB0byB0aGlz4oCZcyBlbnRyeSBsaXN0LlxuICAgIHRoaXNba1N0YXRlXS5wdXNoKGVudHJ5KVxuICB9XG5cbiAgZGVsZXRlIChuYW1lKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRm9ybURhdGEpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRm9ybURhdGEuZGVsZXRlJyB9KVxuXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhuYW1lKVxuXG4gICAgLy8gVGhlIGRlbGV0ZShuYW1lKSBtZXRob2Qgc3RlcHMgYXJlIHRvIHJlbW92ZSBhbGwgZW50cmllcyB3aG9zZSBuYW1lXG4gICAgLy8gaXMgbmFtZSBmcm9tIHRoaXPigJlzIGVudHJ5IGxpc3QuXG4gICAgdGhpc1trU3RhdGVdID0gdGhpc1trU3RhdGVdLmZpbHRlcihlbnRyeSA9PiBlbnRyeS5uYW1lICE9PSBuYW1lKVxuICB9XG5cbiAgZ2V0IChuYW1lKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRm9ybURhdGEpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRm9ybURhdGEuZ2V0JyB9KVxuXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhuYW1lKVxuXG4gICAgLy8gMS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgd2hvc2UgbmFtZSBpcyBuYW1lIGluIHRoaXPigJlzIGVudHJ5IGxpc3QsXG4gICAgLy8gdGhlbiByZXR1cm4gbnVsbC5cbiAgICBjb25zdCBpZHggPSB0aGlzW2tTdGF0ZV0uZmluZEluZGV4KChlbnRyeSkgPT4gZW50cnkubmFtZSA9PT0gbmFtZSlcbiAgICBpZiAoaWR4ID09PSAtMSkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBlbnRyeSB3aG9zZSBuYW1lIGlzIG5hbWUgZnJvbVxuICAgIC8vIHRoaXPigJlzIGVudHJ5IGxpc3QuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXVtpZHhdLnZhbHVlXG4gIH1cblxuICBnZXRBbGwgKG5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdGb3JtRGF0YS5nZXRBbGwnIH0pXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKG5hbWUpXG5cbiAgICAvLyAxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSB3aG9zZSBuYW1lIGlzIG5hbWUgaW4gdGhpc+KAmXMgZW50cnkgbGlzdCxcbiAgICAvLyB0aGVuIHJldHVybiB0aGUgZW1wdHkgbGlzdC5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIHZhbHVlcyBvZiBhbGwgZW50cmllcyB3aG9zZSBuYW1lIGlzIG5hbWUsIGluIG9yZGVyLFxuICAgIC8vIGZyb20gdGhpc+KAmXMgZW50cnkgbGlzdC5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdXG4gICAgICAuZmlsdGVyKChlbnRyeSkgPT4gZW50cnkubmFtZSA9PT0gbmFtZSlcbiAgICAgIC5tYXAoKGVudHJ5KSA9PiBlbnRyeS52YWx1ZSlcbiAgfVxuXG4gIGhhcyAobmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZvcm1EYXRhKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0Zvcm1EYXRhLmhhcycgfSlcblxuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcobmFtZSlcblxuICAgIC8vIFRoZSBoYXMobmFtZSkgbWV0aG9kIHN0ZXBzIGFyZSB0byByZXR1cm4gdHJ1ZSBpZiB0aGVyZSBpcyBhbiBlbnRyeVxuICAgIC8vIHdob3NlIG5hbWUgaXMgbmFtZSBpbiB0aGlz4oCZcyBlbnRyeSBsaXN0OyBvdGhlcndpc2UgZmFsc2UuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5maW5kSW5kZXgoKGVudHJ5KSA9PiBlbnRyeS5uYW1lID09PSBuYW1lKSAhPT0gLTFcbiAgfVxuXG4gIHNldCAobmFtZSwgdmFsdWUsIGZpbGVuYW1lID0gdW5kZWZpbmVkKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRm9ybURhdGEpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnRm9ybURhdGEuc2V0JyB9KVxuXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgIWlzQmxvYkxpa2UodmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBcIkZhaWxlZCB0byBleGVjdXRlICdzZXQnIG9uICdGb3JtRGF0YSc6IHBhcmFtZXRlciAyIGlzIG5vdCBvZiB0eXBlICdCbG9iJ1wiXG4gICAgICApXG4gICAgfVxuXG4gICAgLy8gVGhlIHNldChuYW1lLCB2YWx1ZSkgYW5kIHNldChuYW1lLCBibG9iVmFsdWUsIGZpbGVuYW1lKSBtZXRob2Qgc3RlcHNcbiAgICAvLyBhcmU6XG5cbiAgICAvLyAxLiBMZXQgdmFsdWUgYmUgdmFsdWUgaWYgZ2l2ZW47IG90aGVyd2lzZSBibG9iVmFsdWUuXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKG5hbWUpXG4gICAgdmFsdWUgPSBpc0Jsb2JMaWtlKHZhbHVlKVxuICAgICAgPyB3ZWJpZGwuY29udmVydGVycy5CbG9iKHZhbHVlLCB7IHN0cmljdDogZmFsc2UgfSlcbiAgICAgIDogd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKHZhbHVlKVxuICAgIGZpbGVuYW1lID0gYXJndW1lbnRzLmxlbmd0aCA9PT0gM1xuICAgICAgPyB0b1VTVlN0cmluZyhmaWxlbmFtZSlcbiAgICAgIDogdW5kZWZpbmVkXG5cbiAgICAvLyAyLiBMZXQgZW50cnkgYmUgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhbiBlbnRyeSB3aXRoIG5hbWUsIHZhbHVlLCBhbmRcbiAgICAvLyBmaWxlbmFtZSBpZiBnaXZlbi5cbiAgICBjb25zdCBlbnRyeSA9IG1ha2VFbnRyeShuYW1lLCB2YWx1ZSwgZmlsZW5hbWUpXG5cbiAgICAvLyAzLiBJZiB0aGVyZSBhcmUgZW50cmllcyBpbiB0aGlz4oCZcyBlbnRyeSBsaXN0IHdob3NlIG5hbWUgaXMgbmFtZSwgdGhlblxuICAgIC8vIHJlcGxhY2UgdGhlIGZpcnN0IHN1Y2ggZW50cnkgd2l0aCBlbnRyeSBhbmQgcmVtb3ZlIHRoZSBvdGhlcnMuXG4gICAgY29uc3QgaWR4ID0gdGhpc1trU3RhdGVdLmZpbmRJbmRleCgoZW50cnkpID0+IGVudHJ5Lm5hbWUgPT09IG5hbWUpXG4gICAgaWYgKGlkeCAhPT0gLTEpIHtcbiAgICAgIHRoaXNba1N0YXRlXSA9IFtcbiAgICAgICAgLi4udGhpc1trU3RhdGVdLnNsaWNlKDAsIGlkeCksXG4gICAgICAgIGVudHJ5LFxuICAgICAgICAuLi50aGlzW2tTdGF0ZV0uc2xpY2UoaWR4ICsgMSkuZmlsdGVyKChlbnRyeSkgPT4gZW50cnkubmFtZSAhPT0gbmFtZSlcbiAgICAgIF1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gNC4gT3RoZXJ3aXNlLCBhcHBlbmQgZW50cnkgdG8gdGhpc+KAmXMgZW50cnkgbGlzdC5cbiAgICAgIHRoaXNba1N0YXRlXS5wdXNoKGVudHJ5KVxuICAgIH1cbiAgfVxuXG4gIGVudHJpZXMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZvcm1EYXRhKVxuXG4gICAgcmV0dXJuIG1ha2VJdGVyYXRvcihcbiAgICAgICgpID0+IHRoaXNba1N0YXRlXS5tYXAocGFpciA9PiBbcGFpci5uYW1lLCBwYWlyLnZhbHVlXSksXG4gICAgICAnRm9ybURhdGEnLFxuICAgICAgJ2tleSt2YWx1ZSdcbiAgICApXG4gIH1cblxuICBrZXlzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIHJldHVybiBtYWtlSXRlcmF0b3IoXG4gICAgICAoKSA9PiB0aGlzW2tTdGF0ZV0ubWFwKHBhaXIgPT4gW3BhaXIubmFtZSwgcGFpci52YWx1ZV0pLFxuICAgICAgJ0Zvcm1EYXRhJyxcbiAgICAgICdrZXknXG4gICAgKVxuICB9XG5cbiAgdmFsdWVzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIHJldHVybiBtYWtlSXRlcmF0b3IoXG4gICAgICAoKSA9PiB0aGlzW2tTdGF0ZV0ubWFwKHBhaXIgPT4gW3BhaXIubmFtZSwgcGFpci52YWx1ZV0pLFxuICAgICAgJ0Zvcm1EYXRhJyxcbiAgICAgICd2YWx1ZSdcbiAgICApXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHsodmFsdWU6IHN0cmluZywga2V5OiBzdHJpbmcsIHNlbGY6IEZvcm1EYXRhKSA9PiB2b2lkfSBjYWxsYmFja0ZuXG4gICAqIEBwYXJhbSB7dW5rbm93bn0gdGhpc0FyZ1xuICAgKi9cbiAgZm9yRWFjaCAoY2FsbGJhY2tGbiwgdGhpc0FyZyA9IGdsb2JhbFRoaXMpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdGb3JtRGF0YS5mb3JFYWNoJyB9KVxuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFja0ZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBcIkZhaWxlZCB0byBleGVjdXRlICdmb3JFYWNoJyBvbiAnRm9ybURhdGEnOiBwYXJhbWV0ZXIgMSBpcyBub3Qgb2YgdHlwZSAnRnVuY3Rpb24nLlwiXG4gICAgICApXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgdGhpcykge1xuICAgICAgY2FsbGJhY2tGbi5hcHBseSh0aGlzQXJnLCBbdmFsdWUsIGtleSwgdGhpc10pXG4gICAgfVxuICB9XG59XG5cbkZvcm1EYXRhLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdID0gRm9ybURhdGEucHJvdG90eXBlLmVudHJpZXNcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRm9ybURhdGEucHJvdG90eXBlLCB7XG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdGb3JtRGF0YScsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH1cbn0pXG5cbi8qKlxuICogQHNlZSBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3JtLWNvbnRyb2wtaW5mcmFzdHJ1Y3R1cmUuaHRtbCNjcmVhdGUtYW4tZW50cnlcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge3N0cmluZ3xCbG9ifSB2YWx1ZVxuICogQHBhcmFtIHs/c3RyaW5nfSBmaWxlbmFtZVxuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24gbWFrZUVudHJ5IChuYW1lLCB2YWx1ZSwgZmlsZW5hbWUpIHtcbiAgLy8gMS4gU2V0IG5hbWUgdG8gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIG5hbWUgaW50byBhIHNjYWxhciB2YWx1ZSBzdHJpbmcuXG4gIC8vIFwiVG8gY29udmVydCBhIHN0cmluZyBpbnRvIGEgc2NhbGFyIHZhbHVlIHN0cmluZywgcmVwbGFjZSBhbnkgc3Vycm9nYXRlc1xuICAvLyAgd2l0aCBVK0ZGRkQuXCJcbiAgLy8gc2VlOiBodHRwczovL25vZGVqcy5vcmcvZGlzdC9sYXRlc3QtdjE4LngvZG9jcy9hcGkvYnVmZmVyLmh0bWwjYnVmdG9zdHJpbmdlbmNvZGluZy1zdGFydC1lbmRcbiAgbmFtZSA9IEJ1ZmZlci5mcm9tKG5hbWUpLnRvU3RyaW5nKCd1dGY4JylcblxuICAvLyAyLiBJZiB2YWx1ZSBpcyBhIHN0cmluZywgdGhlbiBzZXQgdmFsdWUgdG8gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nXG4gIC8vICAgIHZhbHVlIGludG8gYSBzY2FsYXIgdmFsdWUgc3RyaW5nLlxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHZhbHVlID0gQnVmZmVyLmZyb20odmFsdWUpLnRvU3RyaW5nKCd1dGY4JylcbiAgfSBlbHNlIHtcbiAgICAvLyAzLiBPdGhlcndpc2U6XG5cbiAgICAvLyAxLiBJZiB2YWx1ZSBpcyBub3QgYSBGaWxlIG9iamVjdCwgdGhlbiBzZXQgdmFsdWUgdG8gYSBuZXcgRmlsZSBvYmplY3QsXG4gICAgLy8gICAgcmVwcmVzZW50aW5nIHRoZSBzYW1lIGJ5dGVzLCB3aG9zZSBuYW1lIGF0dHJpYnV0ZSB2YWx1ZSBpcyBcImJsb2JcIlxuICAgIGlmICghaXNGaWxlTGlrZSh2YWx1ZSkpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUgaW5zdGFuY2VvZiBCbG9iXG4gICAgICAgID8gbmV3IEZpbGUoW3ZhbHVlXSwgJ2Jsb2InLCB7IHR5cGU6IHZhbHVlLnR5cGUgfSlcbiAgICAgICAgOiBuZXcgRmlsZUxpa2UodmFsdWUsICdibG9iJywgeyB0eXBlOiB2YWx1ZS50eXBlIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gSWYgZmlsZW5hbWUgaXMgZ2l2ZW4sIHRoZW4gc2V0IHZhbHVlIHRvIGEgbmV3IEZpbGUgb2JqZWN0LFxuICAgIC8vICAgIHJlcHJlc2VudGluZyB0aGUgc2FtZSBieXRlcywgd2hvc2UgbmFtZSBhdHRyaWJ1dGUgaXMgZmlsZW5hbWUuXG4gICAgaWYgKGZpbGVuYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8qKiBAdHlwZSB7RmlsZVByb3BlcnR5QmFnfSAqL1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgdHlwZTogdmFsdWUudHlwZSxcbiAgICAgICAgbGFzdE1vZGlmaWVkOiB2YWx1ZS5sYXN0TW9kaWZpZWRcbiAgICAgIH1cblxuICAgICAgdmFsdWUgPSAoTmF0aXZlRmlsZSAmJiB2YWx1ZSBpbnN0YW5jZW9mIE5hdGl2ZUZpbGUpIHx8IHZhbHVlIGluc3RhbmNlb2YgVW5kaWNpRmlsZVxuICAgICAgICA/IG5ldyBGaWxlKFt2YWx1ZV0sIGZpbGVuYW1lLCBvcHRpb25zKVxuICAgICAgICA6IG5ldyBGaWxlTGlrZSh2YWx1ZSwgZmlsZW5hbWUsIG9wdGlvbnMpXG4gICAgfVxuICB9XG5cbiAgLy8gNC4gUmV0dXJuIGFuIGVudHJ5IHdob3NlIG5hbWUgaXMgbmFtZSBhbmQgd2hvc2UgdmFsdWUgaXMgdmFsdWUuXG4gIHJldHVybiB7IG5hbWUsIHZhbHVlIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7IEZvcm1EYXRhIH1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IEJ1c2JveSA9IHJlcXVpcmUoJ0BmYXN0aWZ5L2J1c2JveScpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHtcbiAgUmVhZGFibGVTdHJlYW1Gcm9tLFxuICBpc0Jsb2JMaWtlLFxuICBpc1JlYWRhYmxlU3RyZWFtTGlrZSxcbiAgcmVhZGFibGVTdHJlYW1DbG9zZSxcbiAgY3JlYXRlRGVmZXJyZWRQcm9taXNlLFxuICBmdWxseVJlYWRCb2R5XG59ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgRm9ybURhdGEgfSA9IHJlcXVpcmUoJy4vZm9ybWRhdGEnKVxuY29uc3QgeyBrU3RhdGUgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi93ZWJpZGwnKVxuY29uc3QgeyBET01FeGNlcHRpb24sIHN0cnVjdHVyZWRDbG9uZSB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3QgeyBCbG9iLCBGaWxlOiBOYXRpdmVGaWxlIH0gPSByZXF1aXJlKCdidWZmZXInKVxuY29uc3QgeyBrQm9keVVzZWQgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBpc0Vycm9yZWQgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGlzVWludDhBcnJheSwgaXNBcnJheUJ1ZmZlciB9ID0gcmVxdWlyZSgndXRpbC90eXBlcycpXG5jb25zdCB7IEZpbGU6IFVuZGljaUZpbGUgfSA9IHJlcXVpcmUoJy4vZmlsZScpXG5jb25zdCB7IHBhcnNlTUlNRVR5cGUsIHNlcmlhbGl6ZUFNaW1lVHlwZSB9ID0gcmVxdWlyZSgnLi9kYXRhVVJMJylcblxubGV0IFJlYWRhYmxlU3RyZWFtID0gZ2xvYmFsVGhpcy5SZWFkYWJsZVN0cmVhbVxuXG4vKiogQHR5cGUge2dsb2JhbFRoaXNbJ0ZpbGUnXX0gKi9cbmNvbnN0IEZpbGUgPSBOYXRpdmVGaWxlID8/IFVuZGljaUZpbGVcbmNvbnN0IHRleHRFbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKClcbmNvbnN0IHRleHREZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKClcblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtYm9keWluaXQtZXh0cmFjdFxuZnVuY3Rpb24gZXh0cmFjdEJvZHkgKG9iamVjdCwga2VlcGFsaXZlID0gZmFsc2UpIHtcbiAgaWYgKCFSZWFkYWJsZVN0cmVhbSkge1xuICAgIFJlYWRhYmxlU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtL3dlYicpLlJlYWRhYmxlU3RyZWFtXG4gIH1cblxuICAvLyAxLiBMZXQgc3RyZWFtIGJlIG51bGwuXG4gIGxldCBzdHJlYW0gPSBudWxsXG5cbiAgLy8gMi4gSWYgb2JqZWN0IGlzIGEgUmVhZGFibGVTdHJlYW0gb2JqZWN0LCB0aGVuIHNldCBzdHJlYW0gdG8gb2JqZWN0LlxuICBpZiAob2JqZWN0IGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW0pIHtcbiAgICBzdHJlYW0gPSBvYmplY3RcbiAgfSBlbHNlIGlmIChpc0Jsb2JMaWtlKG9iamVjdCkpIHtcbiAgICAvLyAzLiBPdGhlcndpc2UsIGlmIG9iamVjdCBpcyBhIEJsb2Igb2JqZWN0LCBzZXQgc3RyZWFtIHRvIHRoZVxuICAgIC8vICAgIHJlc3VsdCBvZiBydW5uaW5nIG9iamVjdOKAmXMgZ2V0IHN0cmVhbS5cbiAgICBzdHJlYW0gPSBvYmplY3Quc3RyZWFtKClcbiAgfSBlbHNlIHtcbiAgICAvLyA0LiBPdGhlcndpc2UsIHNldCBzdHJlYW0gdG8gYSBuZXcgUmVhZGFibGVTdHJlYW0gb2JqZWN0LCBhbmQgc2V0XG4gICAgLy8gICAgdXAgc3RyZWFtLlxuICAgIHN0cmVhbSA9IG5ldyBSZWFkYWJsZVN0cmVhbSh7XG4gICAgICBhc3luYyBwdWxsIChjb250cm9sbGVyKSB7XG4gICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShcbiAgICAgICAgICB0eXBlb2Ygc291cmNlID09PSAnc3RyaW5nJyA/IHRleHRFbmNvZGVyLmVuY29kZShzb3VyY2UpIDogc291cmNlXG4gICAgICAgIClcbiAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gcmVhZGFibGVTdHJlYW1DbG9zZShjb250cm9sbGVyKSlcbiAgICAgIH0sXG4gICAgICBzdGFydCAoKSB7fSxcbiAgICAgIHR5cGU6IHVuZGVmaW5lZFxuICAgIH0pXG4gIH1cblxuICAvLyA1LiBBc3NlcnQ6IHN0cmVhbSBpcyBhIFJlYWRhYmxlU3RyZWFtIG9iamVjdC5cbiAgYXNzZXJ0KGlzUmVhZGFibGVTdHJlYW1MaWtlKHN0cmVhbSkpXG5cbiAgLy8gNi4gTGV0IGFjdGlvbiBiZSBudWxsLlxuICBsZXQgYWN0aW9uID0gbnVsbFxuXG4gIC8vIDcuIExldCBzb3VyY2UgYmUgbnVsbC5cbiAgbGV0IHNvdXJjZSA9IG51bGxcblxuICAvLyA4LiBMZXQgbGVuZ3RoIGJlIG51bGwuXG4gIGxldCBsZW5ndGggPSBudWxsXG5cbiAgLy8gOS4gTGV0IHR5cGUgYmUgbnVsbC5cbiAgbGV0IHR5cGUgPSBudWxsXG5cbiAgLy8gMTAuIFN3aXRjaCBvbiBvYmplY3Q6XG4gIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAnc3RyaW5nJykge1xuICAgIC8vIFNldCBzb3VyY2UgdG8gdGhlIFVURi04IGVuY29kaW5nIG9mIG9iamVjdC5cbiAgICAvLyBOb3RlOiBzZXR0aW5nIHNvdXJjZSB0byBhIFVpbnQ4QXJyYXkgaGVyZSBicmVha3Mgc29tZSBtb2NraW5nIGFzc3VtcHRpb25zLlxuICAgIHNvdXJjZSA9IG9iamVjdFxuXG4gICAgLy8gU2V0IHR5cGUgdG8gYHRleHQvcGxhaW47Y2hhcnNldD1VVEYtOGAuXG4gICAgdHlwZSA9ICd0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLTgnXG4gIH0gZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zKSB7XG4gICAgLy8gVVJMU2VhcmNoUGFyYW1zXG5cbiAgICAvLyBzcGVjIHNheXMgdG8gcnVuIGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCBvbiBib2R5Lmxpc3RcbiAgICAvLyB0aGlzIGlzIGltcGxlbWVudGVkIGluIE5vZGUuanMgYXMgYXBhcnQgb2YgYW4gVVJMU2VhcmNoUGFyYW1zIGluc3RhbmNlIHRvU3RyaW5nIG1ldGhvZFxuICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvZTQ2YzY4MGJmMmIyMTFiYmQ1MmNmOTU5Y2ExN2VlOThjN2Y2NTdmNS9saWIvaW50ZXJuYWwvdXJsLmpzI0w0OTBcbiAgICAvLyBhbmQgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvZTQ2YzY4MGJmMmIyMTFiYmQ1MmNmOTU5Y2ExN2VlOThjN2Y2NTdmNS9saWIvaW50ZXJuYWwvdXJsLmpzI0wxMTAwXG5cbiAgICAvLyBTZXQgc291cmNlIHRvIHRoZSByZXN1bHQgb2YgcnVubmluZyB0aGUgYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIHNlcmlhbGl6ZXIgd2l0aCBvYmplY3TigJlzIGxpc3QuXG4gICAgc291cmNlID0gb2JqZWN0LnRvU3RyaW5nKClcblxuICAgIC8vIFNldCB0eXBlIHRvIGBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOGAuXG4gICAgdHlwZSA9ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCdcbiAgfSBlbHNlIGlmIChpc0FycmF5QnVmZmVyKG9iamVjdCkpIHtcbiAgICAvLyBCdWZmZXJTb3VyY2UvQXJyYXlCdWZmZXJcblxuICAgIC8vIFNldCBzb3VyY2UgdG8gYSBjb3B5IG9mIHRoZSBieXRlcyBoZWxkIGJ5IG9iamVjdC5cbiAgICBzb3VyY2UgPSBuZXcgVWludDhBcnJheShvYmplY3Quc2xpY2UoKSlcbiAgfSBlbHNlIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcob2JqZWN0KSkge1xuICAgIC8vIEJ1ZmZlclNvdXJjZS9BcnJheUJ1ZmZlclZpZXdcblxuICAgIC8vIFNldCBzb3VyY2UgdG8gYSBjb3B5IG9mIHRoZSBieXRlcyBoZWxkIGJ5IG9iamVjdC5cbiAgICBzb3VyY2UgPSBuZXcgVWludDhBcnJheShvYmplY3QuYnVmZmVyLnNsaWNlKG9iamVjdC5ieXRlT2Zmc2V0LCBvYmplY3QuYnl0ZU9mZnNldCArIG9iamVjdC5ieXRlTGVuZ3RoKSlcbiAgfSBlbHNlIGlmICh1dGlsLmlzRm9ybURhdGFMaWtlKG9iamVjdCkpIHtcbiAgICBjb25zdCBib3VuZGFyeSA9IGAtLS0tZm9ybWRhdGEtdW5kaWNpLTAke2Ake01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDFlMTEpfWAucGFkU3RhcnQoMTEsICcwJyl9YFxuICAgIGNvbnN0IHByZWZpeCA9IGAtLSR7Ym91bmRhcnl9XFxyXFxuQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhYFxuXG4gICAgLyohIGZvcm1kYXRhLXBvbHlmaWxsLiBNSVQgTGljZW5zZS4gSmltbXkgV8OkcnRpbmcgPGh0dHBzOi8vamltbXkud2FydGluZy5zZS9vcGVuc291cmNlPiAqL1xuICAgIGNvbnN0IGVzY2FwZSA9IChzdHIpID0+XG4gICAgICBzdHIucmVwbGFjZSgvXFxuL2csICclMEEnKS5yZXBsYWNlKC9cXHIvZywgJyUwRCcpLnJlcGxhY2UoL1wiL2csICclMjInKVxuICAgIGNvbnN0IG5vcm1hbGl6ZUxpbmVmZWVkcyA9ICh2YWx1ZSkgPT4gdmFsdWUucmVwbGFjZSgvXFxyP1xcbnxcXHIvZywgJ1xcclxcbicpXG5cbiAgICAvLyBTZXQgYWN0aW9uIHRvIHRoaXMgc3RlcDogcnVuIHRoZSBtdWx0aXBhcnQvZm9ybS1kYXRhXG4gICAgLy8gZW5jb2RpbmcgYWxnb3JpdGhtLCB3aXRoIG9iamVjdOKAmXMgZW50cnkgbGlzdCBhbmQgVVRGLTguXG4gICAgLy8gLSBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgYm9keSBpcyBpbW11dGFibGUgYW5kIGNhbid0IGJlIGNoYW5nZWQgYWZ0ZXJ3b3Jkc1xuICAgIC8vIC0gVGhhdCB0aGUgY29udGVudC1sZW5ndGggaXMgY2FsY3VsYXRlZCBpbiBhZHZhbmNlLlxuICAgIC8vIC0gQW5kIHRoYXQgYWxsIHBhcnRzIGFyZSBwcmUtZW5jb2RlZCBhbmQgcmVhZHkgdG8gYmUgc2VudC5cblxuICAgIGNvbnN0IGJsb2JQYXJ0cyA9IFtdXG4gICAgY29uc3Qgcm4gPSBuZXcgVWludDhBcnJheShbMTMsIDEwXSkgLy8gJ1xcclxcbidcbiAgICBsZW5ndGggPSAwXG4gICAgbGV0IGhhc1Vua25vd25TaXplVmFsdWUgPSBmYWxzZVxuXG4gICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIG9iamVjdCkge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3QgY2h1bmsgPSB0ZXh0RW5jb2Rlci5lbmNvZGUocHJlZml4ICtcbiAgICAgICAgICBgOyBuYW1lPVwiJHtlc2NhcGUobm9ybWFsaXplTGluZWZlZWRzKG5hbWUpKX1cImAgK1xuICAgICAgICAgIGBcXHJcXG5cXHJcXG4ke25vcm1hbGl6ZUxpbmVmZWVkcyh2YWx1ZSl9XFxyXFxuYClcbiAgICAgICAgYmxvYlBhcnRzLnB1c2goY2h1bmspXG4gICAgICAgIGxlbmd0aCArPSBjaHVuay5ieXRlTGVuZ3RoXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjaHVuayA9IHRleHRFbmNvZGVyLmVuY29kZShgJHtwcmVmaXh9OyBuYW1lPVwiJHtlc2NhcGUobm9ybWFsaXplTGluZWZlZWRzKG5hbWUpKX1cImAgK1xuICAgICAgICAgICh2YWx1ZS5uYW1lID8gYDsgZmlsZW5hbWU9XCIke2VzY2FwZSh2YWx1ZS5uYW1lKX1cImAgOiAnJykgKyAnXFxyXFxuJyArXG4gICAgICAgICAgYENvbnRlbnQtVHlwZTogJHtcbiAgICAgICAgICAgIHZhbHVlLnR5cGUgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSdcbiAgICAgICAgICB9XFxyXFxuXFxyXFxuYClcbiAgICAgICAgYmxvYlBhcnRzLnB1c2goY2h1bmssIHZhbHVlLCBybilcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZS5zaXplID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIGxlbmd0aCArPSBjaHVuay5ieXRlTGVuZ3RoICsgdmFsdWUuc2l6ZSArIHJuLmJ5dGVMZW5ndGhcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoYXNVbmtub3duU2l6ZVZhbHVlID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY2h1bmsgPSB0ZXh0RW5jb2Rlci5lbmNvZGUoYC0tJHtib3VuZGFyeX0tLWApXG4gICAgYmxvYlBhcnRzLnB1c2goY2h1bmspXG4gICAgbGVuZ3RoICs9IGNodW5rLmJ5dGVMZW5ndGhcbiAgICBpZiAoaGFzVW5rbm93blNpemVWYWx1ZSkge1xuICAgICAgbGVuZ3RoID0gbnVsbFxuICAgIH1cblxuICAgIC8vIFNldCBzb3VyY2UgdG8gb2JqZWN0LlxuICAgIHNvdXJjZSA9IG9iamVjdFxuXG4gICAgYWN0aW9uID0gYXN5bmMgZnVuY3Rpb24gKiAoKSB7XG4gICAgICBmb3IgKGNvbnN0IHBhcnQgb2YgYmxvYlBhcnRzKSB7XG4gICAgICAgIGlmIChwYXJ0LnN0cmVhbSkge1xuICAgICAgICAgIHlpZWxkICogcGFydC5zdHJlYW0oKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHlpZWxkIHBhcnRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNldCB0eXBlIHRvIGBtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT1gLFxuICAgIC8vIGZvbGxvd2VkIGJ5IHRoZSBtdWx0aXBhcnQvZm9ybS1kYXRhIGJvdW5kYXJ5IHN0cmluZyBnZW5lcmF0ZWRcbiAgICAvLyBieSB0aGUgbXVsdGlwYXJ0L2Zvcm0tZGF0YSBlbmNvZGluZyBhbGdvcml0aG0uXG4gICAgdHlwZSA9ICdtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0nICsgYm91bmRhcnlcbiAgfSBlbHNlIGlmIChpc0Jsb2JMaWtlKG9iamVjdCkpIHtcbiAgICAvLyBCbG9iXG5cbiAgICAvLyBTZXQgc291cmNlIHRvIG9iamVjdC5cbiAgICBzb3VyY2UgPSBvYmplY3RcblxuICAgIC8vIFNldCBsZW5ndGggdG8gb2JqZWN04oCZcyBzaXplLlxuICAgIGxlbmd0aCA9IG9iamVjdC5zaXplXG5cbiAgICAvLyBJZiBvYmplY3TigJlzIHR5cGUgYXR0cmlidXRlIGlzIG5vdCB0aGUgZW1wdHkgYnl0ZSBzZXF1ZW5jZSwgc2V0XG4gICAgLy8gdHlwZSB0byBpdHMgdmFsdWUuXG4gICAgaWYgKG9iamVjdC50eXBlKSB7XG4gICAgICB0eXBlID0gb2JqZWN0LnR5cGVcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIG9iamVjdFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBJZiBrZWVwYWxpdmUgaXMgdHJ1ZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoa2VlcGFsaXZlKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdrZWVwYWxpdmUnKVxuICAgIH1cblxuICAgIC8vIElmIG9iamVjdCBpcyBkaXN0dXJiZWQgb3IgbG9ja2VkLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICh1dGlsLmlzRGlzdHVyYmVkKG9iamVjdCkgfHwgb2JqZWN0LmxvY2tlZCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgJ1Jlc3BvbnNlIGJvZHkgb2JqZWN0IHNob3VsZCBub3QgYmUgZGlzdHVyYmVkIG9yIGxvY2tlZCdcbiAgICAgIClcbiAgICB9XG5cbiAgICBzdHJlYW0gPVxuICAgICAgb2JqZWN0IGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW0gPyBvYmplY3QgOiBSZWFkYWJsZVN0cmVhbUZyb20ob2JqZWN0KVxuICB9XG5cbiAgLy8gMTEuIElmIHNvdXJjZSBpcyBhIGJ5dGUgc2VxdWVuY2UsIHRoZW4gc2V0IGFjdGlvbiB0byBhXG4gIC8vIHN0ZXAgdGhhdCByZXR1cm5zIHNvdXJjZSBhbmQgbGVuZ3RoIHRvIHNvdXJjZeKAmXMgbGVuZ3RoLlxuICBpZiAodHlwZW9mIHNvdXJjZSA9PT0gJ3N0cmluZycgfHwgdXRpbC5pc0J1ZmZlcihzb3VyY2UpKSB7XG4gICAgbGVuZ3RoID0gQnVmZmVyLmJ5dGVMZW5ndGgoc291cmNlKVxuICB9XG5cbiAgLy8gMTIuIElmIGFjdGlvbiBpcyBub24tbnVsbCwgdGhlbiBydW4gdGhlc2Ugc3RlcHMgaW4gaW4gcGFyYWxsZWw6XG4gIGlmIChhY3Rpb24gIT0gbnVsbCkge1xuICAgIC8vIFJ1biBhY3Rpb24uXG4gICAgbGV0IGl0ZXJhdG9yXG4gICAgc3RyZWFtID0gbmV3IFJlYWRhYmxlU3RyZWFtKHtcbiAgICAgIGFzeW5jIHN0YXJ0ICgpIHtcbiAgICAgICAgaXRlcmF0b3IgPSBhY3Rpb24ob2JqZWN0KVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKVxuICAgICAgfSxcbiAgICAgIGFzeW5jIHB1bGwgKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgY29uc3QgeyB2YWx1ZSwgZG9uZSB9ID0gYXdhaXQgaXRlcmF0b3IubmV4dCgpXG4gICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgLy8gV2hlbiBydW5uaW5nIGFjdGlvbiBpcyBkb25lLCBjbG9zZSBzdHJlYW0uXG4gICAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICAgICAgY29udHJvbGxlci5jbG9zZSgpXG4gICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBXaGVuZXZlciBvbmUgb3IgbW9yZSBieXRlcyBhcmUgYXZhaWxhYmxlIGFuZCBzdHJlYW0gaXMgbm90IGVycm9yZWQsXG4gICAgICAgICAgLy8gZW5xdWV1ZSBhIFVpbnQ4QXJyYXkgd3JhcHBpbmcgYW4gQXJyYXlCdWZmZXIgY29udGFpbmluZyB0aGUgYXZhaWxhYmxlXG4gICAgICAgICAgLy8gYnl0ZXMgaW50byBzdHJlYW0uXG4gICAgICAgICAgaWYgKCFpc0Vycm9yZWQoc3RyZWFtKSkge1xuICAgICAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KHZhbHVlKSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXIuZGVzaXJlZFNpemUgPiAwXG4gICAgICB9LFxuICAgICAgYXN5bmMgY2FuY2VsIChyZWFzb24pIHtcbiAgICAgICAgYXdhaXQgaXRlcmF0b3IucmV0dXJuKClcbiAgICAgIH0sXG4gICAgICB0eXBlOiB1bmRlZmluZWRcbiAgICB9KVxuICB9XG5cbiAgLy8gMTMuIExldCBib2R5IGJlIGEgYm9keSB3aG9zZSBzdHJlYW0gaXMgc3RyZWFtLCBzb3VyY2UgaXMgc291cmNlLFxuICAvLyBhbmQgbGVuZ3RoIGlzIGxlbmd0aC5cbiAgY29uc3QgYm9keSA9IHsgc3RyZWFtLCBzb3VyY2UsIGxlbmd0aCB9XG5cbiAgLy8gMTQuIFJldHVybiAoYm9keSwgdHlwZSkuXG4gIHJldHVybiBbYm9keSwgdHlwZV1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2JvZHlpbml0LXNhZmVseS1leHRyYWN0XG5mdW5jdGlvbiBzYWZlbHlFeHRyYWN0Qm9keSAob2JqZWN0LCBrZWVwYWxpdmUgPSBmYWxzZSkge1xuICBpZiAoIVJlYWRhYmxlU3RyZWFtKSB7XG4gICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICBSZWFkYWJsZVN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbS93ZWInKS5SZWFkYWJsZVN0cmVhbVxuICB9XG5cbiAgLy8gVG8gc2FmZWx5IGV4dHJhY3QgYSBib2R5IGFuZCBhIGBDb250ZW50LVR5cGVgIHZhbHVlIGZyb21cbiAgLy8gYSBieXRlIHNlcXVlbmNlIG9yIEJvZHlJbml0IG9iamVjdCBvYmplY3QsIHJ1biB0aGVzZSBzdGVwczpcblxuICAvLyAxLiBJZiBvYmplY3QgaXMgYSBSZWFkYWJsZVN0cmVhbSBvYmplY3QsIHRoZW46XG4gIGlmIChvYmplY3QgaW5zdGFuY2VvZiBSZWFkYWJsZVN0cmVhbSkge1xuICAgIC8vIEFzc2VydDogb2JqZWN0IGlzIG5laXRoZXIgZGlzdHVyYmVkIG5vciBsb2NrZWQuXG4gICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICBhc3NlcnQoIXV0aWwuaXNEaXN0dXJiZWQob2JqZWN0KSwgJ1RoZSBib2R5IGhhcyBhbHJlYWR5IGJlZW4gY29uc3VtZWQuJylcbiAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgIGFzc2VydCghb2JqZWN0LmxvY2tlZCwgJ1RoZSBzdHJlYW0gaXMgbG9ja2VkLicpXG4gIH1cblxuICAvLyAyLiBSZXR1cm4gdGhlIHJlc3VsdHMgb2YgZXh0cmFjdGluZyBvYmplY3QuXG4gIHJldHVybiBleHRyYWN0Qm9keShvYmplY3QsIGtlZXBhbGl2ZSlcbn1cblxuZnVuY3Rpb24gY2xvbmVCb2R5IChib2R5KSB7XG4gIC8vIFRvIGNsb25lIGEgYm9keSBib2R5LCBydW4gdGhlc2Ugc3RlcHM6XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtYm9keS1jbG9uZVxuXG4gIC8vIDEuIExldCDCqyBvdXQxLCBvdXQyIMK7IGJlIHRoZSByZXN1bHQgb2YgdGVlaW5nIGJvZHnigJlzIHN0cmVhbS5cbiAgY29uc3QgW291dDEsIG91dDJdID0gYm9keS5zdHJlYW0udGVlKClcbiAgY29uc3Qgb3V0MkNsb25lID0gc3RydWN0dXJlZENsb25lKG91dDIsIHsgdHJhbnNmZXI6IFtvdXQyXSB9KVxuICAvLyBUaGlzLCBmb3Igd2hhdGV2ZXIgcmVhc29ucywgdW5yZWZzIG91dDJDbG9uZSB3aGljaCBhbGxvd3NcbiAgLy8gdGhlIHByb2Nlc3MgdG8gZXhpdCBieSBpdHNlbGYuXG4gIGNvbnN0IFssIGZpbmFsQ2xvbmVdID0gb3V0MkNsb25lLnRlZSgpXG5cbiAgLy8gMi4gU2V0IGJvZHnigJlzIHN0cmVhbSB0byBvdXQxLlxuICBib2R5LnN0cmVhbSA9IG91dDFcblxuICAvLyAzLiBSZXR1cm4gYSBib2R5IHdob3NlIHN0cmVhbSBpcyBvdXQyIGFuZCBvdGhlciBtZW1iZXJzIGFyZSBjb3BpZWQgZnJvbSBib2R5LlxuICByZXR1cm4ge1xuICAgIHN0cmVhbTogZmluYWxDbG9uZSxcbiAgICBsZW5ndGg6IGJvZHkubGVuZ3RoLFxuICAgIHNvdXJjZTogYm9keS5zb3VyY2VcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiAqIGNvbnN1bWVCb2R5IChib2R5KSB7XG4gIGlmIChib2R5KSB7XG4gICAgaWYgKGlzVWludDhBcnJheShib2R5KSkge1xuICAgICAgeWllbGQgYm9keVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzdHJlYW0gPSBib2R5LnN0cmVhbVxuXG4gICAgICBpZiAodXRpbC5pc0Rpc3R1cmJlZChzdHJlYW0pKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBib2R5IGhhcyBhbHJlYWR5IGJlZW4gY29uc3VtZWQuJylcbiAgICAgIH1cblxuICAgICAgaWYgKHN0cmVhbS5sb2NrZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHN0cmVhbSBpcyBsb2NrZWQuJylcbiAgICAgIH1cblxuICAgICAgLy8gQ29tcGF0LlxuICAgICAgc3RyZWFtW2tCb2R5VXNlZF0gPSB0cnVlXG5cbiAgICAgIHlpZWxkICogc3RyZWFtXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHRocm93SWZBYm9ydGVkIChzdGF0ZSkge1xuICBpZiAoc3RhdGUuYWJvcnRlZCkge1xuICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oJ1RoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQuJywgJ0Fib3J0RXJyb3InKVxuICB9XG59XG5cbmZ1bmN0aW9uIGJvZHlNaXhpbk1ldGhvZHMgKGluc3RhbmNlKSB7XG4gIGNvbnN0IG1ldGhvZHMgPSB7XG4gICAgYmxvYiAoKSB7XG4gICAgICAvLyBUaGUgYmxvYigpIG1ldGhvZCBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoZSByZXN1bHQgb2ZcbiAgICAgIC8vIHJ1bm5pbmcgY29uc3VtZSBib2R5IHdpdGggdGhpcyBhbmQgdGhlIGZvbGxvd2luZyBzdGVwXG4gICAgICAvLyBnaXZlbiBhIGJ5dGUgc2VxdWVuY2UgYnl0ZXM6IHJldHVybiBhIEJsb2Igd2hvc2VcbiAgICAgIC8vIGNvbnRlbnRzIGFyZSBieXRlcyBhbmQgd2hvc2UgdHlwZSBhdHRyaWJ1dGUgaXMgdGhpc+KAmXNcbiAgICAgIC8vIE1JTUUgdHlwZS5cbiAgICAgIHJldHVybiBzcGVjQ29uc3VtZUJvZHkodGhpcywgKGJ5dGVzKSA9PiB7XG4gICAgICAgIGxldCBtaW1lVHlwZSA9IGJvZHlNaW1lVHlwZSh0aGlzKVxuXG4gICAgICAgIGlmIChtaW1lVHlwZSA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgICAgbWltZVR5cGUgPSAnJ1xuICAgICAgICB9IGVsc2UgaWYgKG1pbWVUeXBlKSB7XG4gICAgICAgICAgbWltZVR5cGUgPSBzZXJpYWxpemVBTWltZVR5cGUobWltZVR5cGUpXG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZXR1cm4gYSBCbG9iIHdob3NlIGNvbnRlbnRzIGFyZSBieXRlcyBhbmQgdHlwZSBhdHRyaWJ1dGVcbiAgICAgICAgLy8gaXMgbWltZVR5cGUuXG4gICAgICAgIHJldHVybiBuZXcgQmxvYihbYnl0ZXNdLCB7IHR5cGU6IG1pbWVUeXBlIH0pXG4gICAgICB9LCBpbnN0YW5jZSlcbiAgICB9LFxuXG4gICAgYXJyYXlCdWZmZXIgKCkge1xuICAgICAgLy8gVGhlIGFycmF5QnVmZmVyKCkgbWV0aG9kIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhlIHJlc3VsdFxuICAgICAgLy8gb2YgcnVubmluZyBjb25zdW1lIGJvZHkgd2l0aCB0aGlzIGFuZCB0aGUgZm9sbG93aW5nIHN0ZXBcbiAgICAgIC8vIGdpdmVuIGEgYnl0ZSBzZXF1ZW5jZSBieXRlczogcmV0dXJuIGEgbmV3IEFycmF5QnVmZmVyXG4gICAgICAvLyB3aG9zZSBjb250ZW50cyBhcmUgYnl0ZXMuXG4gICAgICByZXR1cm4gc3BlY0NvbnN1bWVCb2R5KHRoaXMsIChieXRlcykgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYnl0ZXMpLmJ1ZmZlclxuICAgICAgfSwgaW5zdGFuY2UpXG4gICAgfSxcblxuICAgIHRleHQgKCkge1xuICAgICAgLy8gVGhlIHRleHQoKSBtZXRob2Qgc3RlcHMgYXJlIHRvIHJldHVybiB0aGUgcmVzdWx0IG9mIHJ1bm5pbmdcbiAgICAgIC8vIGNvbnN1bWUgYm9keSB3aXRoIHRoaXMgYW5kIFVURi04IGRlY29kZS5cbiAgICAgIHJldHVybiBzcGVjQ29uc3VtZUJvZHkodGhpcywgdXRmOERlY29kZUJ5dGVzLCBpbnN0YW5jZSlcbiAgICB9LFxuXG4gICAganNvbiAoKSB7XG4gICAgICAvLyBUaGUganNvbigpIG1ldGhvZCBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZ1xuICAgICAgLy8gY29uc3VtZSBib2R5IHdpdGggdGhpcyBhbmQgcGFyc2UgSlNPTiBmcm9tIGJ5dGVzLlxuICAgICAgcmV0dXJuIHNwZWNDb25zdW1lQm9keSh0aGlzLCBwYXJzZUpTT05Gcm9tQnl0ZXMsIGluc3RhbmNlKVxuICAgIH0sXG5cbiAgICBhc3luYyBmb3JtRGF0YSAoKSB7XG4gICAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBpbnN0YW5jZSlcblxuICAgICAgdGhyb3dJZkFib3J0ZWQodGhpc1trU3RhdGVdKVxuXG4gICAgICBjb25zdCBjb250ZW50VHlwZSA9IHRoaXMuaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpXG5cbiAgICAgIC8vIElmIG1pbWVUeXBl4oCZcyBlc3NlbmNlIGlzIFwibXVsdGlwYXJ0L2Zvcm0tZGF0YVwiLCB0aGVuOlxuICAgICAgaWYgKC9tdWx0aXBhcnRcXC9mb3JtLWRhdGEvLnRlc3QoY29udGVudFR5cGUpKSB7XG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7fVxuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiB0aGlzLmhlYWRlcnMpIGhlYWRlcnNba2V5LnRvTG93ZXJDYXNlKCldID0gdmFsdWVcblxuICAgICAgICBjb25zdCByZXNwb25zZUZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKClcblxuICAgICAgICBsZXQgYnVzYm95XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBidXNib3kgPSBuZXcgQnVzYm95KHtcbiAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICBwcmVzZXJ2ZVBhdGg6IHRydWVcbiAgICAgICAgICB9KVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKGAke2Vycn1gLCAnQWJvcnRFcnJvcicpXG4gICAgICAgIH1cblxuICAgICAgICBidXNib3kub24oJ2ZpZWxkJywgKG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgICAgICAgcmVzcG9uc2VGb3JtRGF0YS5hcHBlbmQobmFtZSwgdmFsdWUpXG4gICAgICAgIH0pXG4gICAgICAgIGJ1c2JveS5vbignZmlsZScsIChuYW1lLCB2YWx1ZSwgZmlsZW5hbWUsIGVuY29kaW5nLCBtaW1lVHlwZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNodW5rcyA9IFtdXG5cbiAgICAgICAgICBpZiAoZW5jb2RpbmcgPT09ICdiYXNlNjQnIHx8IGVuY29kaW5nLnRvTG93ZXJDYXNlKCkgPT09ICdiYXNlNjQnKSB7XG4gICAgICAgICAgICBsZXQgYmFzZTY0Y2h1bmsgPSAnJ1xuXG4gICAgICAgICAgICB2YWx1ZS5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgICAgICAgICAgICBiYXNlNjRjaHVuayArPSBjaHVuay50b1N0cmluZygpLnJlcGxhY2UoL1tcXHJcXG5dL2dtLCAnJylcblxuICAgICAgICAgICAgICBjb25zdCBlbmQgPSBiYXNlNjRjaHVuay5sZW5ndGggLSBiYXNlNjRjaHVuay5sZW5ndGggJSA0XG4gICAgICAgICAgICAgIGNodW5rcy5wdXNoKEJ1ZmZlci5mcm9tKGJhc2U2NGNodW5rLnNsaWNlKDAsIGVuZCksICdiYXNlNjQnKSlcblxuICAgICAgICAgICAgICBiYXNlNjRjaHVuayA9IGJhc2U2NGNodW5rLnNsaWNlKGVuZClcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB2YWx1ZS5vbignZW5kJywgKCkgPT4ge1xuICAgICAgICAgICAgICBjaHVua3MucHVzaChCdWZmZXIuZnJvbShiYXNlNjRjaHVuaywgJ2Jhc2U2NCcpKVxuICAgICAgICAgICAgICByZXNwb25zZUZvcm1EYXRhLmFwcGVuZChuYW1lLCBuZXcgRmlsZShjaHVua3MsIGZpbGVuYW1lLCB7IHR5cGU6IG1pbWVUeXBlIH0pKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsdWUub24oJ2RhdGEnLCAoY2h1bmspID0+IHtcbiAgICAgICAgICAgICAgY2h1bmtzLnB1c2goY2h1bmspXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgdmFsdWUub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgICAgICAgcmVzcG9uc2VGb3JtRGF0YS5hcHBlbmQobmFtZSwgbmV3IEZpbGUoY2h1bmtzLCBmaWxlbmFtZSwgeyB0eXBlOiBtaW1lVHlwZSB9KSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgICAgIGNvbnN0IGJ1c2JveVJlc29sdmUgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgYnVzYm95Lm9uKCdmaW5pc2gnLCByZXNvbHZlKVxuICAgICAgICAgIGJ1c2JveS5vbignZXJyb3InLCAoZXJyKSA9PiByZWplY3QobmV3IFR5cGVFcnJvcihlcnIpKSlcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAodGhpcy5ib2R5ICE9PSBudWxsKSBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIGNvbnN1bWVCb2R5KHRoaXNba1N0YXRlXS5ib2R5KSkgYnVzYm95LndyaXRlKGNodW5rKVxuICAgICAgICBidXNib3kuZW5kKClcbiAgICAgICAgYXdhaXQgYnVzYm95UmVzb2x2ZVxuXG4gICAgICAgIHJldHVybiByZXNwb25zZUZvcm1EYXRhXG4gICAgICB9IGVsc2UgaWYgKC9hcHBsaWNhdGlvblxcL3gtd3d3LWZvcm0tdXJsZW5jb2RlZC8udGVzdChjb250ZW50VHlwZSkpIHtcbiAgICAgICAgLy8gT3RoZXJ3aXNlLCBpZiBtaW1lVHlwZeKAmXMgZXNzZW5jZSBpcyBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiLCB0aGVuOlxuXG4gICAgICAgIC8vIDEuIExldCBlbnRyaWVzIGJlIHRoZSByZXN1bHQgb2YgcGFyc2luZyBieXRlcy5cbiAgICAgICAgbGV0IGVudHJpZXNcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBsZXQgdGV4dCA9ICcnXG4gICAgICAgICAgLy8gYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIHBhcnNlciB3aWxsIGtlZXAgdGhlIEJPTS5cbiAgICAgICAgICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtdXJsZW5jb2RlZC1wYXJzZXJcbiAgICAgICAgICAvLyBOb3RlIHRoYXQgc3RyZWFtaW5nIGRlY29kZXIgaXMgc3RhdGVmdWwgYW5kIGNhbm5vdCBiZSByZXVzZWRcbiAgICAgICAgICBjb25zdCBzdHJlYW1pbmdEZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCd1dGYtOCcsIHsgaWdub3JlQk9NOiB0cnVlIH0pXG5cbiAgICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIGNvbnN1bWVCb2R5KHRoaXNba1N0YXRlXS5ib2R5KSkge1xuICAgICAgICAgICAgaWYgKCFpc1VpbnQ4QXJyYXkoY2h1bmspKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIFVpbnQ4QXJyYXkgY2h1bmsnKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGV4dCArPSBzdHJlYW1pbmdEZWNvZGVyLmRlY29kZShjaHVuaywgeyBzdHJlYW06IHRydWUgfSlcbiAgICAgICAgICB9XG4gICAgICAgICAgdGV4dCArPSBzdHJlYW1pbmdEZWNvZGVyLmRlY29kZSgpXG4gICAgICAgICAgZW50cmllcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXModGV4dClcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHQ6IFVuY2xlYXIgd2hlbiBuZXcgVVJMU2VhcmNoUGFyYW1zIGNhbiBmYWlsIG9uIGEgc3RyaW5nLlxuICAgICAgICAgIC8vIDIuIElmIGVudHJpZXMgaXMgZmFpbHVyZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgICAgICB0aHJvdyBPYmplY3QuYXNzaWduKG5ldyBUeXBlRXJyb3IoKSwgeyBjYXVzZTogZXJyIH0pXG4gICAgICAgIH1cblxuICAgICAgICAvLyAzLiBSZXR1cm4gYSBuZXcgRm9ybURhdGEgb2JqZWN0IHdob3NlIGVudHJpZXMgYXJlIGVudHJpZXMuXG4gICAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKClcbiAgICAgICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIGVudHJpZXMpIHtcbiAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQobmFtZSwgdmFsdWUpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZvcm1EYXRhXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBXYWl0IGEgdGljayBiZWZvcmUgY2hlY2tpbmcgaWYgdGhlIHJlcXVlc3QgaGFzIGJlZW4gYWJvcnRlZC5cbiAgICAgICAgLy8gT3RoZXJ3aXNlLCBhIFR5cGVFcnJvciBjYW4gYmUgdGhyb3duIHdoZW4gYW4gQWJvcnRFcnJvciBzaG91bGQuXG4gICAgICAgIGF3YWl0IFByb21pc2UucmVzb2x2ZSgpXG5cbiAgICAgICAgdGhyb3dJZkFib3J0ZWQodGhpc1trU3RhdGVdKVxuXG4gICAgICAgIC8vIE90aGVyd2lzZSwgdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICBoZWFkZXI6IGAke2luc3RhbmNlLm5hbWV9LmZvcm1EYXRhYCxcbiAgICAgICAgICBtZXNzYWdlOiAnQ291bGQgbm90IHBhcnNlIGNvbnRlbnQgYXMgRm9ybURhdGEuJ1xuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtZXRob2RzXG59XG5cbmZ1bmN0aW9uIG1peGluQm9keSAocHJvdG90eXBlKSB7XG4gIE9iamVjdC5hc3NpZ24ocHJvdG90eXBlLnByb3RvdHlwZSwgYm9keU1peGluTWV0aG9kcyhwcm90b3R5cGUpKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtYm9keS1jb25zdW1lLWJvZHlcbiAqIEBwYXJhbSB7UmVzcG9uc2V8UmVxdWVzdH0gb2JqZWN0XG4gKiBAcGFyYW0geyh2YWx1ZTogdW5rbm93bikgPT4gdW5rbm93bn0gY29udmVydEJ5dGVzVG9KU1ZhbHVlXG4gKiBAcGFyYW0ge1Jlc3BvbnNlfFJlcXVlc3R9IGluc3RhbmNlXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNwZWNDb25zdW1lQm9keSAob2JqZWN0LCBjb252ZXJ0Qnl0ZXNUb0pTVmFsdWUsIGluc3RhbmNlKSB7XG4gIHdlYmlkbC5icmFuZENoZWNrKG9iamVjdCwgaW5zdGFuY2UpXG5cbiAgdGhyb3dJZkFib3J0ZWQob2JqZWN0W2tTdGF0ZV0pXG5cbiAgLy8gMS4gSWYgb2JqZWN0IGlzIHVudXNhYmxlLCB0aGVuIHJldHVybiBhIHByb21pc2UgcmVqZWN0ZWRcbiAgLy8gICAgd2l0aCBhIFR5cGVFcnJvci5cbiAgaWYgKGJvZHlVbnVzYWJsZShvYmplY3Rba1N0YXRlXS5ib2R5KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0JvZHkgaXMgdW51c2FibGUnKVxuICB9XG5cbiAgLy8gMi4gTGV0IHByb21pc2UgYmUgYSBuZXcgcHJvbWlzZS5cbiAgY29uc3QgcHJvbWlzZSA9IGNyZWF0ZURlZmVycmVkUHJvbWlzZSgpXG5cbiAgLy8gMy4gTGV0IGVycm9yU3RlcHMgZ2l2ZW4gZXJyb3IgYmUgdG8gcmVqZWN0IHByb21pc2Ugd2l0aCBlcnJvci5cbiAgY29uc3QgZXJyb3JTdGVwcyA9IChlcnJvcikgPT4gcHJvbWlzZS5yZWplY3QoZXJyb3IpXG5cbiAgLy8gNC4gTGV0IHN1Y2Nlc3NTdGVwcyBnaXZlbiBhIGJ5dGUgc2VxdWVuY2UgZGF0YSBiZSB0byByZXNvbHZlXG4gIC8vICAgIHByb21pc2Ugd2l0aCB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgY29udmVydEJ5dGVzVG9KU1ZhbHVlXG4gIC8vICAgIHdpdGggZGF0YS4gSWYgdGhhdCB0aHJldyBhbiBleGNlcHRpb24sIHRoZW4gcnVuIGVycm9yU3RlcHNcbiAgLy8gICAgd2l0aCB0aGF0IGV4Y2VwdGlvbi5cbiAgY29uc3Qgc3VjY2Vzc1N0ZXBzID0gKGRhdGEpID0+IHtcbiAgICB0cnkge1xuICAgICAgcHJvbWlzZS5yZXNvbHZlKGNvbnZlcnRCeXRlc1RvSlNWYWx1ZShkYXRhKSlcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlcnJvclN0ZXBzKGUpXG4gICAgfVxuICB9XG5cbiAgLy8gNS4gSWYgb2JqZWN04oCZcyBib2R5IGlzIG51bGwsIHRoZW4gcnVuIHN1Y2Nlc3NTdGVwcyB3aXRoIGFuXG4gIC8vICAgIGVtcHR5IGJ5dGUgc2VxdWVuY2UuXG4gIGlmIChvYmplY3Rba1N0YXRlXS5ib2R5ID09IG51bGwpIHtcbiAgICBzdWNjZXNzU3RlcHMobmV3IFVpbnQ4QXJyYXkoKSlcbiAgICByZXR1cm4gcHJvbWlzZS5wcm9taXNlXG4gIH1cblxuICAvLyA2LiBPdGhlcndpc2UsIGZ1bGx5IHJlYWQgb2JqZWN04oCZcyBib2R5IGdpdmVuIHN1Y2Nlc3NTdGVwcyxcbiAgLy8gICAgZXJyb3JTdGVwcywgYW5kIG9iamVjdOKAmXMgcmVsZXZhbnQgZ2xvYmFsIG9iamVjdC5cbiAgYXdhaXQgZnVsbHlSZWFkQm9keShvYmplY3Rba1N0YXRlXS5ib2R5LCBzdWNjZXNzU3RlcHMsIGVycm9yU3RlcHMpXG5cbiAgLy8gNy4gUmV0dXJuIHByb21pc2UuXG4gIHJldHVybiBwcm9taXNlLnByb21pc2Vcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2JvZHktdW51c2FibGVcbmZ1bmN0aW9uIGJvZHlVbnVzYWJsZSAoYm9keSkge1xuICAvLyBBbiBvYmplY3QgaW5jbHVkaW5nIHRoZSBCb2R5IGludGVyZmFjZSBtaXhpbiBpc1xuICAvLyBzYWlkIHRvIGJlIHVudXNhYmxlIGlmIGl0cyBib2R5IGlzIG5vbi1udWxsIGFuZFxuICAvLyBpdHMgYm9keeKAmXMgc3RyZWFtIGlzIGRpc3R1cmJlZCBvciBsb2NrZWQuXG4gIHJldHVybiBib2R5ICE9IG51bGwgJiYgKGJvZHkuc3RyZWFtLmxvY2tlZCB8fCB1dGlsLmlzRGlzdHVyYmVkKGJvZHkuc3RyZWFtKSlcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZW5jb2Rpbmcuc3BlYy53aGF0d2cub3JnLyN1dGYtOC1kZWNvZGVcbiAqIEBwYXJhbSB7QnVmZmVyfSBidWZmZXJcbiAqL1xuZnVuY3Rpb24gdXRmOERlY29kZUJ5dGVzIChidWZmZXIpIHtcbiAgaWYgKGJ1ZmZlci5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIC8vIDEuIExldCBidWZmZXIgYmUgdGhlIHJlc3VsdCBvZiBwZWVraW5nIHRocmVlIGJ5dGVzIGZyb21cbiAgLy8gICAgaW9RdWV1ZSwgY29udmVydGVkIHRvIGEgYnl0ZSBzZXF1ZW5jZS5cblxuICAvLyAyLiBJZiBidWZmZXIgaXMgMHhFRiAweEJCIDB4QkYsIHRoZW4gcmVhZCB0aHJlZVxuICAvLyAgICBieXRlcyBmcm9tIGlvUXVldWUuIChEbyBub3RoaW5nIHdpdGggdGhvc2UgYnl0ZXMuKVxuICBpZiAoYnVmZmVyWzBdID09PSAweEVGICYmIGJ1ZmZlclsxXSA9PT0gMHhCQiAmJiBidWZmZXJbMl0gPT09IDB4QkYpIHtcbiAgICBidWZmZXIgPSBidWZmZXIuc3ViYXJyYXkoMylcbiAgfVxuXG4gIC8vIDMuIFByb2Nlc3MgYSBxdWV1ZSB3aXRoIGFuIGluc3RhbmNlIG9mIFVURi044oCZc1xuICAvLyAgICBkZWNvZGVyLCBpb1F1ZXVlLCBvdXRwdXQsIGFuZCBcInJlcGxhY2VtZW50XCIuXG4gIGNvbnN0IG91dHB1dCA9IHRleHREZWNvZGVyLmRlY29kZShidWZmZXIpXG5cbiAgLy8gNC4gUmV0dXJuIG91dHB1dC5cbiAgcmV0dXJuIG91dHB1dFxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI3BhcnNlLWpzb24tYnl0ZXMtdG8tYS1qYXZhc2NyaXB0LXZhbHVlXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGJ5dGVzXG4gKi9cbmZ1bmN0aW9uIHBhcnNlSlNPTkZyb21CeXRlcyAoYnl0ZXMpIHtcbiAgcmV0dXJuIEpTT04ucGFyc2UodXRmOERlY29kZUJ5dGVzKGJ5dGVzKSlcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWJvZHktbWltZS10eXBlXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9yZXNwb25zZScpLlJlc3BvbnNlfGltcG9ydCgnLi9yZXF1ZXN0JykuUmVxdWVzdH0gb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIGJvZHlNaW1lVHlwZSAob2JqZWN0KSB7XG4gIGNvbnN0IHsgaGVhZGVyc0xpc3QgfSA9IG9iamVjdFtrU3RhdGVdXG4gIGNvbnN0IGNvbnRlbnRUeXBlID0gaGVhZGVyc0xpc3QuZ2V0KCdjb250ZW50LXR5cGUnKVxuXG4gIGlmIChjb250ZW50VHlwZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIHJldHVybiBwYXJzZU1JTUVUeXBlKGNvbnRlbnRUeXBlKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZXh0cmFjdEJvZHksXG4gIHNhZmVseUV4dHJhY3RCb2R5LFxuICBjbG9uZUJvZHksXG4gIG1peGluQm9keVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3Qge1xuICBJbnZhbGlkQXJndW1lbnRFcnJvcixcbiAgTm90U3VwcG9ydGVkRXJyb3Jcbn0gPSByZXF1aXJlKCcuL2Vycm9ycycpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBrSFRUUDJCdWlsZFJlcXVlc3QsIGtIVFRQMkNvcHlIZWFkZXJzLCBrSFRUUDFCdWlsZFJlcXVlc3QgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi91dGlsJylcblxuLy8gdG9rZW5SZWdFeHAgYW5kIGhlYWRlckNoYXJSZWdleCBoYXZlIGJlZW4gbGlmdGVkIGZyb21cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL21haW4vbGliL19odHRwX2NvbW1vbi5qc1xuXG4vKipcbiAqIFZlcmlmaWVzIHRoYXQgdGhlIGdpdmVuIHZhbCBpcyBhIHZhbGlkIEhUVFAgdG9rZW5cbiAqIHBlciB0aGUgcnVsZXMgZGVmaW5lZCBpbiBSRkMgNzIzMFxuICogU2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4yLjZcbiAqL1xuY29uc3QgdG9rZW5SZWdFeHAgPSAvXltcXF5fYGEtekEtWlxcLTAtOSEjJCUmJyorLnx+XSskL1xuXG4vKipcbiAqIE1hdGNoZXMgaWYgdmFsIGNvbnRhaW5zIGFuIGludmFsaWQgZmllbGQtdmNoYXJcbiAqICBmaWVsZC12YWx1ZSAgICA9ICooIGZpZWxkLWNvbnRlbnQgLyBvYnMtZm9sZCApXG4gKiAgZmllbGQtY29udGVudCAgPSBmaWVsZC12Y2hhciBbIDEqKCBTUCAvIEhUQUIgKSBmaWVsZC12Y2hhciBdXG4gKiAgZmllbGQtdmNoYXIgICAgPSBWQ0hBUiAvIG9icy10ZXh0XG4gKi9cbmNvbnN0IGhlYWRlckNoYXJSZWdleCA9IC9bXlxcdFxceDIwLVxceDdlXFx4ODAtXFx4ZmZdL1xuXG4vLyBWZXJpZmllcyB0aGF0IGEgZ2l2ZW4gcGF0aCBpcyB2YWxpZCBkb2VzIG5vdCBjb250YWluIGNvbnRyb2wgY2hhcnMgXFx4MDAgdG8gXFx4MjBcbmNvbnN0IGludmFsaWRQYXRoUmVnZXggPSAvW15cXHUwMDIxLVxcdTAwZmZdL1xuXG5jb25zdCBrSGFuZGxlciA9IFN5bWJvbCgnaGFuZGxlcicpXG5cbmNvbnN0IGNoYW5uZWxzID0ge31cblxubGV0IGV4dHJhY3RCb2R5XG5cbnRyeSB7XG4gIGNvbnN0IGRpYWdub3N0aWNzQ2hhbm5lbCA9IHJlcXVpcmUoJ2RpYWdub3N0aWNzX2NoYW5uZWwnKVxuICBjaGFubmVscy5jcmVhdGUgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOnJlcXVlc3Q6Y3JlYXRlJylcbiAgY2hhbm5lbHMuYm9keVNlbnQgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOnJlcXVlc3Q6Ym9keVNlbnQnKVxuICBjaGFubmVscy5oZWFkZXJzID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpyZXF1ZXN0OmhlYWRlcnMnKVxuICBjaGFubmVscy50cmFpbGVycyA9IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6cmVxdWVzdDp0cmFpbGVycycpXG4gIGNoYW5uZWxzLmVycm9yID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpyZXF1ZXN0OmVycm9yJylcbn0gY2F0Y2gge1xuICBjaGFubmVscy5jcmVhdGUgPSB7IGhhc1N1YnNjcmliZXJzOiBmYWxzZSB9XG4gIGNoYW5uZWxzLmJvZHlTZW50ID0geyBoYXNTdWJzY3JpYmVyczogZmFsc2UgfVxuICBjaGFubmVscy5oZWFkZXJzID0geyBoYXNTdWJzY3JpYmVyczogZmFsc2UgfVxuICBjaGFubmVscy50cmFpbGVycyA9IHsgaGFzU3Vic2NyaWJlcnM6IGZhbHNlIH1cbiAgY2hhbm5lbHMuZXJyb3IgPSB7IGhhc1N1YnNjcmliZXJzOiBmYWxzZSB9XG59XG5cbmNsYXNzIFJlcXVlc3Qge1xuICBjb25zdHJ1Y3RvciAob3JpZ2luLCB7XG4gICAgcGF0aCxcbiAgICBtZXRob2QsXG4gICAgYm9keSxcbiAgICBoZWFkZXJzLFxuICAgIHF1ZXJ5LFxuICAgIGlkZW1wb3RlbnQsXG4gICAgYmxvY2tpbmcsXG4gICAgdXBncmFkZSxcbiAgICBoZWFkZXJzVGltZW91dCxcbiAgICBib2R5VGltZW91dCxcbiAgICByZXNldCxcbiAgICB0aHJvd09uRXJyb3IsXG4gICAgZXhwZWN0Q29udGludWVcbiAgfSwgaGFuZGxlcikge1xuICAgIGlmICh0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigncGF0aCBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgcGF0aFswXSAhPT0gJy8nICYmXG4gICAgICAhKHBhdGguc3RhcnRzV2l0aCgnaHR0cDovLycpIHx8IHBhdGguc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSkgJiZcbiAgICAgIG1ldGhvZCAhPT0gJ0NPTk5FQ1QnXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3BhdGggbXVzdCBiZSBhbiBhYnNvbHV0ZSBVUkwgb3Igc3RhcnQgd2l0aCBhIHNsYXNoJylcbiAgICB9IGVsc2UgaWYgKGludmFsaWRQYXRoUmVnZXguZXhlYyhwYXRoKSAhPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIHJlcXVlc3QgcGF0aCcpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBtZXRob2QgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ21ldGhvZCBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9IGVsc2UgaWYgKHRva2VuUmVnRXhwLmV4ZWMobWV0aG9kKSA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIHJlcXVlc3QgbWV0aG9kJylcbiAgICB9XG5cbiAgICBpZiAodXBncmFkZSAmJiB0eXBlb2YgdXBncmFkZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndXBncmFkZSBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9XG5cbiAgICBpZiAoaGVhZGVyc1RpbWVvdXQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0Zpbml0ZShoZWFkZXJzVGltZW91dCkgfHwgaGVhZGVyc1RpbWVvdXQgPCAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGhlYWRlcnNUaW1lb3V0JylcbiAgICB9XG5cbiAgICBpZiAoYm9keVRpbWVvdXQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0Zpbml0ZShib2R5VGltZW91dCkgfHwgYm9keVRpbWVvdXQgPCAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGJvZHlUaW1lb3V0JylcbiAgICB9XG5cbiAgICBpZiAocmVzZXQgIT0gbnVsbCAmJiB0eXBlb2YgcmVzZXQgIT09ICdib29sZWFuJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIHJlc2V0JylcbiAgICB9XG5cbiAgICBpZiAoZXhwZWN0Q29udGludWUgIT0gbnVsbCAmJiB0eXBlb2YgZXhwZWN0Q29udGludWUgIT09ICdib29sZWFuJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGV4cGVjdENvbnRpbnVlJylcbiAgICB9XG5cbiAgICB0aGlzLmhlYWRlcnNUaW1lb3V0ID0gaGVhZGVyc1RpbWVvdXRcblxuICAgIHRoaXMuYm9keVRpbWVvdXQgPSBib2R5VGltZW91dFxuXG4gICAgdGhpcy50aHJvd09uRXJyb3IgPSB0aHJvd09uRXJyb3IgPT09IHRydWVcblxuICAgIHRoaXMubWV0aG9kID0gbWV0aG9kXG5cbiAgICB0aGlzLmFib3J0ID0gbnVsbFxuXG4gICAgaWYgKGJvZHkgPT0gbnVsbCkge1xuICAgICAgdGhpcy5ib2R5ID0gbnVsbFxuICAgIH0gZWxzZSBpZiAodXRpbC5pc1N0cmVhbShib2R5KSkge1xuICAgICAgdGhpcy5ib2R5ID0gYm9keVxuXG4gICAgICBjb25zdCByU3RhdGUgPSB0aGlzLmJvZHkuX3JlYWRhYmxlU3RhdGVcbiAgICAgIGlmICghclN0YXRlIHx8ICFyU3RhdGUuYXV0b0Rlc3Ryb3kpIHtcbiAgICAgICAgdGhpcy5lbmRIYW5kbGVyID0gZnVuY3Rpb24gYXV0b0Rlc3Ryb3kgKCkge1xuICAgICAgICAgIHV0aWwuZGVzdHJveSh0aGlzKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuYm9keS5vbignZW5kJywgdGhpcy5lbmRIYW5kbGVyKVxuICAgICAgfVxuXG4gICAgICB0aGlzLmVycm9ySGFuZGxlciA9IGVyciA9PiB7XG4gICAgICAgIGlmICh0aGlzLmFib3J0KSB7XG4gICAgICAgICAgdGhpcy5hYm9ydChlcnIpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5lcnJvciA9IGVyclxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmJvZHkub24oJ2Vycm9yJywgdGhpcy5lcnJvckhhbmRsZXIpXG4gICAgfSBlbHNlIGlmICh1dGlsLmlzQnVmZmVyKGJvZHkpKSB7XG4gICAgICB0aGlzLmJvZHkgPSBib2R5LmJ5dGVMZW5ndGggPyBib2R5IDogbnVsbFxuICAgIH0gZWxzZSBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KGJvZHkpKSB7XG4gICAgICB0aGlzLmJvZHkgPSBib2R5LmJ1ZmZlci5ieXRlTGVuZ3RoID8gQnVmZmVyLmZyb20oYm9keS5idWZmZXIsIGJvZHkuYnl0ZU9mZnNldCwgYm9keS5ieXRlTGVuZ3RoKSA6IG51bGxcbiAgICB9IGVsc2UgaWYgKGJvZHkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgICAgdGhpcy5ib2R5ID0gYm9keS5ieXRlTGVuZ3RoID8gQnVmZmVyLmZyb20oYm9keSkgOiBudWxsXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuYm9keSA9IGJvZHkubGVuZ3RoID8gQnVmZmVyLmZyb20oYm9keSkgOiBudWxsXG4gICAgfSBlbHNlIGlmICh1dGlsLmlzRm9ybURhdGFMaWtlKGJvZHkpIHx8IHV0aWwuaXNJdGVyYWJsZShib2R5KSB8fCB1dGlsLmlzQmxvYkxpa2UoYm9keSkpIHtcbiAgICAgIHRoaXMuYm9keSA9IGJvZHlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdib2R5IG11c3QgYmUgYSBzdHJpbmcsIGEgQnVmZmVyLCBhIFJlYWRhYmxlIHN0cmVhbSwgYW4gaXRlcmFibGUsIG9yIGFuIGFzeW5jIGl0ZXJhYmxlJylcbiAgICB9XG5cbiAgICB0aGlzLmNvbXBsZXRlZCA9IGZhbHNlXG5cbiAgICB0aGlzLmFib3J0ZWQgPSBmYWxzZVxuXG4gICAgdGhpcy51cGdyYWRlID0gdXBncmFkZSB8fCBudWxsXG5cbiAgICB0aGlzLnBhdGggPSBxdWVyeSA/IHV0aWwuYnVpbGRVUkwocGF0aCwgcXVlcnkpIDogcGF0aFxuXG4gICAgdGhpcy5vcmlnaW4gPSBvcmlnaW5cblxuICAgIHRoaXMuaWRlbXBvdGVudCA9IGlkZW1wb3RlbnQgPT0gbnVsbFxuICAgICAgPyBtZXRob2QgPT09ICdIRUFEJyB8fCBtZXRob2QgPT09ICdHRVQnXG4gICAgICA6IGlkZW1wb3RlbnRcblxuICAgIHRoaXMuYmxvY2tpbmcgPSBibG9ja2luZyA9PSBudWxsID8gZmFsc2UgOiBibG9ja2luZ1xuXG4gICAgdGhpcy5yZXNldCA9IHJlc2V0ID09IG51bGwgPyBudWxsIDogcmVzZXRcblxuICAgIHRoaXMuaG9zdCA9IG51bGxcblxuICAgIHRoaXMuY29udGVudExlbmd0aCA9IG51bGxcblxuICAgIHRoaXMuY29udGVudFR5cGUgPSBudWxsXG5cbiAgICB0aGlzLmhlYWRlcnMgPSAnJ1xuXG4gICAgLy8gT25seSBmb3IgSDJcbiAgICB0aGlzLmV4cGVjdENvbnRpbnVlID0gZXhwZWN0Q29udGludWUgIT0gbnVsbCA/IGV4cGVjdENvbnRpbnVlIDogZmFsc2VcblxuICAgIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgICBpZiAoaGVhZGVycy5sZW5ndGggJSAyICE9PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaGVhZGVycyBhcnJheSBtdXN0IGJlIGV2ZW4nKVxuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgIHByb2Nlc3NIZWFkZXIodGhpcywgaGVhZGVyc1tpXSwgaGVhZGVyc1tpICsgMV0pXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChoZWFkZXJzICYmIHR5cGVvZiBoZWFkZXJzID09PSAnb2JqZWN0Jykge1xuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGhlYWRlcnMpXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXVxuICAgICAgICBwcm9jZXNzSGVhZGVyKHRoaXMsIGtleSwgaGVhZGVyc1trZXldKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaGVhZGVycyAhPSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2hlYWRlcnMgbXVzdCBiZSBhbiBvYmplY3Qgb3IgYW4gYXJyYXknKVxuICAgIH1cblxuICAgIGlmICh1dGlsLmlzRm9ybURhdGFMaWtlKHRoaXMuYm9keSkpIHtcbiAgICAgIGlmICh1dGlsLm5vZGVNYWpvciA8IDE2IHx8ICh1dGlsLm5vZGVNYWpvciA9PT0gMTYgJiYgdXRpbC5ub2RlTWlub3IgPCA4KSkge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0Zvcm0tRGF0YSBib2RpZXMgYXJlIG9ubHkgc3VwcG9ydGVkIGluIG5vZGUgdjE2LjggYW5kIG5ld2VyLicpXG4gICAgICB9XG5cbiAgICAgIGlmICghZXh0cmFjdEJvZHkpIHtcbiAgICAgICAgZXh0cmFjdEJvZHkgPSByZXF1aXJlKCcuLi9mZXRjaC9ib2R5LmpzJykuZXh0cmFjdEJvZHlcbiAgICAgIH1cblxuICAgICAgY29uc3QgW2JvZHlTdHJlYW0sIGNvbnRlbnRUeXBlXSA9IGV4dHJhY3RCb2R5KGJvZHkpXG4gICAgICBpZiAodGhpcy5jb250ZW50VHlwZSA9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuY29udGVudFR5cGUgPSBjb250ZW50VHlwZVxuICAgICAgICB0aGlzLmhlYWRlcnMgKz0gYGNvbnRlbnQtdHlwZTogJHtjb250ZW50VHlwZX1cXHJcXG5gXG4gICAgICB9XG4gICAgICB0aGlzLmJvZHkgPSBib2R5U3RyZWFtLnN0cmVhbVxuICAgICAgdGhpcy5jb250ZW50TGVuZ3RoID0gYm9keVN0cmVhbS5sZW5ndGhcbiAgICB9IGVsc2UgaWYgKHV0aWwuaXNCbG9iTGlrZShib2R5KSAmJiB0aGlzLmNvbnRlbnRUeXBlID09IG51bGwgJiYgYm9keS50eXBlKSB7XG4gICAgICB0aGlzLmNvbnRlbnRUeXBlID0gYm9keS50eXBlXG4gICAgICB0aGlzLmhlYWRlcnMgKz0gYGNvbnRlbnQtdHlwZTogJHtib2R5LnR5cGV9XFxyXFxuYFxuICAgIH1cblxuICAgIHV0aWwudmFsaWRhdGVIYW5kbGVyKGhhbmRsZXIsIG1ldGhvZCwgdXBncmFkZSlcblxuICAgIHRoaXMuc2VydmVybmFtZSA9IHV0aWwuZ2V0U2VydmVyTmFtZSh0aGlzLmhvc3QpXG5cbiAgICB0aGlzW2tIYW5kbGVyXSA9IGhhbmRsZXJcblxuICAgIGlmIChjaGFubmVscy5jcmVhdGUuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICAgIGNoYW5uZWxzLmNyZWF0ZS5wdWJsaXNoKHsgcmVxdWVzdDogdGhpcyB9KVxuICAgIH1cbiAgfVxuXG4gIG9uQm9keVNlbnQgKGNodW5rKSB7XG4gICAgaWYgKHRoaXNba0hhbmRsZXJdLm9uQm9keVNlbnQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB0aGlzW2tIYW5kbGVyXS5vbkJvZHlTZW50KGNodW5rKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMuYWJvcnQoZXJyKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uUmVxdWVzdFNlbnQgKCkge1xuICAgIGlmIChjaGFubmVscy5ib2R5U2VudC5oYXNTdWJzY3JpYmVycykge1xuICAgICAgY2hhbm5lbHMuYm9keVNlbnQucHVibGlzaCh7IHJlcXVlc3Q6IHRoaXMgfSlcbiAgICB9XG5cbiAgICBpZiAodGhpc1trSGFuZGxlcl0ub25SZXF1ZXN0U2VudCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uUmVxdWVzdFNlbnQoKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMuYWJvcnQoZXJyKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uQ29ubmVjdCAoYWJvcnQpIHtcbiAgICBhc3NlcnQoIXRoaXMuYWJvcnRlZClcbiAgICBhc3NlcnQoIXRoaXMuY29tcGxldGVkKVxuXG4gICAgaWYgKHRoaXMuZXJyb3IpIHtcbiAgICAgIGFib3J0KHRoaXMuZXJyb3IpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uQ29ubmVjdChhYm9ydClcbiAgICB9XG4gIH1cblxuICBvbkhlYWRlcnMgKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHJlc3VtZSwgc3RhdHVzVGV4dCkge1xuICAgIGFzc2VydCghdGhpcy5hYm9ydGVkKVxuICAgIGFzc2VydCghdGhpcy5jb21wbGV0ZWQpXG5cbiAgICBpZiAoY2hhbm5lbHMuaGVhZGVycy5oYXNTdWJzY3JpYmVycykge1xuICAgICAgY2hhbm5lbHMuaGVhZGVycy5wdWJsaXNoKHsgcmVxdWVzdDogdGhpcywgcmVzcG9uc2U6IHsgc3RhdHVzQ29kZSwgaGVhZGVycywgc3RhdHVzVGV4dCB9IH0pXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzW2tIYW5kbGVyXS5vbkhlYWRlcnMoc3RhdHVzQ29kZSwgaGVhZGVycywgcmVzdW1lLCBzdGF0dXNUZXh0KVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5hYm9ydChlcnIpXG4gICAgfVxuICB9XG5cbiAgb25EYXRhIChjaHVuaykge1xuICAgIGFzc2VydCghdGhpcy5hYm9ydGVkKVxuICAgIGFzc2VydCghdGhpcy5jb21wbGV0ZWQpXG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uRGF0YShjaHVuaylcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuYWJvcnQoZXJyKVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgb25VcGdyYWRlIChzdGF0dXNDb2RlLCBoZWFkZXJzLCBzb2NrZXQpIHtcbiAgICBhc3NlcnQoIXRoaXMuYWJvcnRlZClcbiAgICBhc3NlcnQoIXRoaXMuY29tcGxldGVkKVxuXG4gICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uVXBncmFkZShzdGF0dXNDb2RlLCBoZWFkZXJzLCBzb2NrZXQpXG4gIH1cblxuICBvbkNvbXBsZXRlICh0cmFpbGVycykge1xuICAgIHRoaXMub25GaW5hbGx5KClcblxuICAgIGFzc2VydCghdGhpcy5hYm9ydGVkKVxuXG4gICAgdGhpcy5jb21wbGV0ZWQgPSB0cnVlXG4gICAgaWYgKGNoYW5uZWxzLnRyYWlsZXJzLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICBjaGFubmVscy50cmFpbGVycy5wdWJsaXNoKHsgcmVxdWVzdDogdGhpcywgdHJhaWxlcnMgfSlcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uQ29tcGxldGUodHJhaWxlcnMpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBUT0RPIChmaXgpOiBUaGlzIG1pZ2h0IGJlIGEgYmFkIGlkZWE/XG4gICAgICB0aGlzLm9uRXJyb3IoZXJyKVxuICAgIH1cbiAgfVxuXG4gIG9uRXJyb3IgKGVycm9yKSB7XG4gICAgdGhpcy5vbkZpbmFsbHkoKVxuXG4gICAgaWYgKGNoYW5uZWxzLmVycm9yLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICBjaGFubmVscy5lcnJvci5wdWJsaXNoKHsgcmVxdWVzdDogdGhpcywgZXJyb3IgfSlcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hYm9ydGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdGhpcy5hYm9ydGVkID0gdHJ1ZVxuXG4gICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uRXJyb3IoZXJyb3IpXG4gIH1cblxuICBvbkZpbmFsbHkgKCkge1xuICAgIGlmICh0aGlzLmVycm9ySGFuZGxlcikge1xuICAgICAgdGhpcy5ib2R5Lm9mZignZXJyb3InLCB0aGlzLmVycm9ySGFuZGxlcilcbiAgICAgIHRoaXMuZXJyb3JIYW5kbGVyID0gbnVsbFxuICAgIH1cblxuICAgIGlmICh0aGlzLmVuZEhhbmRsZXIpIHtcbiAgICAgIHRoaXMuYm9keS5vZmYoJ2VuZCcsIHRoaXMuZW5kSGFuZGxlcilcbiAgICAgIHRoaXMuZW5kSGFuZGxlciA9IG51bGxcbiAgICB9XG4gIH1cblxuICAvLyBUT0RPOiBhZGp1c3QgdG8gc3VwcG9ydCBIMlxuICBhZGRIZWFkZXIgKGtleSwgdmFsdWUpIHtcbiAgICBwcm9jZXNzSGVhZGVyKHRoaXMsIGtleSwgdmFsdWUpXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIHN0YXRpYyBba0hUVFAxQnVpbGRSZXF1ZXN0XSAob3JpZ2luLCBvcHRzLCBoYW5kbGVyKSB7XG4gICAgLy8gVE9ETzogTWlncmF0ZSBoZWFkZXIgcGFyc2luZyBoZXJlLCB0byBtYWtlIFJlcXVlc3RzXG4gICAgLy8gSFRUUCBhZ25vc3RpY1xuICAgIHJldHVybiBuZXcgUmVxdWVzdChvcmlnaW4sIG9wdHMsIGhhbmRsZXIpXG4gIH1cblxuICBzdGF0aWMgW2tIVFRQMkJ1aWxkUmVxdWVzdF0gKG9yaWdpbiwgb3B0cywgaGFuZGxlcikge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBvcHRzLmhlYWRlcnNcbiAgICBvcHRzID0geyAuLi5vcHRzLCBoZWFkZXJzOiBudWxsIH1cblxuICAgIGNvbnN0IHJlcXVlc3QgPSBuZXcgUmVxdWVzdChvcmlnaW4sIG9wdHMsIGhhbmRsZXIpXG5cbiAgICByZXF1ZXN0LmhlYWRlcnMgPSB7fVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICAgIGlmIChoZWFkZXJzLmxlbmd0aCAlIDIgIT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdoZWFkZXJzIGFycmF5IG11c3QgYmUgZXZlbicpXG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgcHJvY2Vzc0hlYWRlcihyZXF1ZXN0LCBoZWFkZXJzW2ldLCBoZWFkZXJzW2kgKyAxXSwgdHJ1ZSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGhlYWRlcnMgJiYgdHlwZW9mIGhlYWRlcnMgPT09ICdvYmplY3QnKSB7XG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoaGVhZGVycylcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBrZXkgPSBrZXlzW2ldXG4gICAgICAgIHByb2Nlc3NIZWFkZXIocmVxdWVzdCwga2V5LCBoZWFkZXJzW2tleV0sIHRydWUpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChoZWFkZXJzICE9IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaGVhZGVycyBtdXN0IGJlIGFuIG9iamVjdCBvciBhbiBhcnJheScpXG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcXVlc3RcbiAgfVxuXG4gIHN0YXRpYyBba0hUVFAyQ29weUhlYWRlcnNdIChyYXcpIHtcbiAgICBjb25zdCByYXdIZWFkZXJzID0gcmF3LnNwbGl0KCdcXHJcXG4nKVxuICAgIGNvbnN0IGhlYWRlcnMgPSB7fVxuXG4gICAgZm9yIChjb25zdCBoZWFkZXIgb2YgcmF3SGVhZGVycykge1xuICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0gaGVhZGVyLnNwbGl0KCc6ICcpXG5cbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlLmxlbmd0aCA9PT0gMCkgY29udGludWVcblxuICAgICAgaWYgKGhlYWRlcnNba2V5XSkgaGVhZGVyc1trZXldICs9IGAsJHt2YWx1ZX1gXG4gICAgICBlbHNlIGhlYWRlcnNba2V5XSA9IHZhbHVlXG4gICAgfVxuXG4gICAgcmV0dXJuIGhlYWRlcnNcbiAgfVxufVxuXG5mdW5jdGlvbiBwcm9jZXNzSGVhZGVyVmFsdWUgKGtleSwgdmFsLCBza2lwQXBwZW5kKSB7XG4gIGlmICh2YWwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoYGludmFsaWQgJHtrZXl9IGhlYWRlcmApXG4gIH1cblxuICB2YWwgPSB2YWwgIT0gbnVsbCA/IGAke3ZhbH1gIDogJydcblxuICBpZiAoaGVhZGVyQ2hhclJlZ2V4LmV4ZWModmFsKSAhPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihgaW52YWxpZCAke2tleX0gaGVhZGVyYClcbiAgfVxuXG4gIHJldHVybiBza2lwQXBwZW5kID8gdmFsIDogYCR7a2V5fTogJHt2YWx9XFxyXFxuYFxufVxuXG5mdW5jdGlvbiBwcm9jZXNzSGVhZGVyIChyZXF1ZXN0LCBrZXksIHZhbCwgc2tpcEFwcGVuZCA9IGZhbHNlKSB7XG4gIGlmICh2YWwgJiYgKHR5cGVvZiB2YWwgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbCkpKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKGBpbnZhbGlkICR7a2V5fSBoZWFkZXJgKVxuICB9IGVsc2UgaWYgKHZhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoXG4gICAgcmVxdWVzdC5ob3N0ID09PSBudWxsICYmXG4gICAga2V5Lmxlbmd0aCA9PT0gNCAmJlxuICAgIGtleS50b0xvd2VyQ2FzZSgpID09PSAnaG9zdCdcbiAgKSB7XG4gICAgaWYgKGhlYWRlckNoYXJSZWdleC5leGVjKHZhbCkgIT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihgaW52YWxpZCAke2tleX0gaGVhZGVyYClcbiAgICB9XG4gICAgLy8gQ29uc3VtZWQgYnkgQ2xpZW50XG4gICAgcmVxdWVzdC5ob3N0ID0gdmFsXG4gIH0gZWxzZSBpZiAoXG4gICAgcmVxdWVzdC5jb250ZW50TGVuZ3RoID09PSBudWxsICYmXG4gICAga2V5Lmxlbmd0aCA9PT0gMTQgJiZcbiAgICBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtbGVuZ3RoJ1xuICApIHtcbiAgICByZXF1ZXN0LmNvbnRlbnRMZW5ndGggPSBwYXJzZUludCh2YWwsIDEwKVxuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHJlcXVlc3QuY29udGVudExlbmd0aCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjb250ZW50LWxlbmd0aCBoZWFkZXInKVxuICAgIH1cbiAgfSBlbHNlIGlmIChcbiAgICByZXF1ZXN0LmNvbnRlbnRUeXBlID09PSBudWxsICYmXG4gICAga2V5Lmxlbmd0aCA9PT0gMTIgJiZcbiAgICBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtdHlwZSdcbiAgKSB7XG4gICAgcmVxdWVzdC5jb250ZW50VHlwZSA9IHZhbFxuICAgIGlmIChza2lwQXBwZW5kKSByZXF1ZXN0LmhlYWRlcnNba2V5XSA9IHByb2Nlc3NIZWFkZXJWYWx1ZShrZXksIHZhbCwgc2tpcEFwcGVuZClcbiAgICBlbHNlIHJlcXVlc3QuaGVhZGVycyArPSBwcm9jZXNzSGVhZGVyVmFsdWUoa2V5LCB2YWwpXG4gIH0gZWxzZSBpZiAoXG4gICAga2V5Lmxlbmd0aCA9PT0gMTcgJiZcbiAgICBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3RyYW5zZmVyLWVuY29kaW5nJ1xuICApIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgdHJhbnNmZXItZW5jb2RpbmcgaGVhZGVyJylcbiAgfSBlbHNlIGlmIChcbiAgICBrZXkubGVuZ3RoID09PSAxMCAmJlxuICAgIGtleS50b0xvd2VyQ2FzZSgpID09PSAnY29ubmVjdGlvbidcbiAgKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0eXBlb2YgdmFsID09PSAnc3RyaW5nJyA/IHZhbC50b0xvd2VyQ2FzZSgpIDogbnVsbFxuICAgIGlmICh2YWx1ZSAhPT0gJ2Nsb3NlJyAmJiB2YWx1ZSAhPT0gJ2tlZXAtYWxpdmUnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY29ubmVjdGlvbiBoZWFkZXInKVxuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09ICdjbG9zZScpIHtcbiAgICAgIHJlcXVlc3QucmVzZXQgPSB0cnVlXG4gICAgfVxuICB9IGVsc2UgaWYgKFxuICAgIGtleS5sZW5ndGggPT09IDEwICYmXG4gICAga2V5LnRvTG93ZXJDYXNlKCkgPT09ICdrZWVwLWFsaXZlJ1xuICApIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQga2VlcC1hbGl2ZSBoZWFkZXInKVxuICB9IGVsc2UgaWYgKFxuICAgIGtleS5sZW5ndGggPT09IDcgJiZcbiAgICBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3VwZ3JhZGUnXG4gICkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCB1cGdyYWRlIGhlYWRlcicpXG4gIH0gZWxzZSBpZiAoXG4gICAga2V5Lmxlbmd0aCA9PT0gNiAmJlxuICAgIGtleS50b0xvd2VyQ2FzZSgpID09PSAnZXhwZWN0J1xuICApIHtcbiAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkRXJyb3IoJ2V4cGVjdCBoZWFkZXIgbm90IHN1cHBvcnRlZCcpXG4gIH0gZWxzZSBpZiAodG9rZW5SZWdFeHAuZXhlYyhrZXkpID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGhlYWRlciBrZXknKVxuICB9IGVsc2Uge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChza2lwQXBwZW5kKSB7XG4gICAgICAgICAgaWYgKHJlcXVlc3QuaGVhZGVyc1trZXldKSByZXF1ZXN0LmhlYWRlcnNba2V5XSArPSBgLCR7cHJvY2Vzc0hlYWRlclZhbHVlKGtleSwgdmFsW2ldLCBza2lwQXBwZW5kKX1gXG4gICAgICAgICAgZWxzZSByZXF1ZXN0LmhlYWRlcnNba2V5XSA9IHByb2Nlc3NIZWFkZXJWYWx1ZShrZXksIHZhbFtpXSwgc2tpcEFwcGVuZClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXF1ZXN0LmhlYWRlcnMgKz0gcHJvY2Vzc0hlYWRlclZhbHVlKGtleSwgdmFsW2ldKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChza2lwQXBwZW5kKSByZXF1ZXN0LmhlYWRlcnNba2V5XSA9IHByb2Nlc3NIZWFkZXJWYWx1ZShrZXksIHZhbCwgc2tpcEFwcGVuZClcbiAgICAgIGVsc2UgcmVxdWVzdC5oZWFkZXJzICs9IHByb2Nlc3NIZWFkZXJWYWx1ZShrZXksIHZhbClcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBSZXF1ZXN0XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudHMnKVxuXG5jbGFzcyBEaXNwYXRjaGVyIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgZGlzcGF0Y2ggKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignbm90IGltcGxlbWVudGVkJylcbiAgfVxuXG4gIGNsb3NlICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBpbXBsZW1lbnRlZCcpXG4gIH1cblxuICBkZXN0cm95ICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBpbXBsZW1lbnRlZCcpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBEaXNwYXRjaGVyXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBEaXNwYXRjaGVyID0gcmVxdWlyZSgnLi9kaXNwYXRjaGVyJylcbmNvbnN0IHtcbiAgQ2xpZW50RGVzdHJveWVkRXJyb3IsXG4gIENsaWVudENsb3NlZEVycm9yLFxuICBJbnZhbGlkQXJndW1lbnRFcnJvclxufSA9IHJlcXVpcmUoJy4vY29yZS9lcnJvcnMnKVxuY29uc3QgeyBrRGVzdHJveSwga0Nsb3NlLCBrRGlzcGF0Y2gsIGtJbnRlcmNlcHRvcnMgfSA9IHJlcXVpcmUoJy4vY29yZS9zeW1ib2xzJylcblxuY29uc3Qga0Rlc3Ryb3llZCA9IFN5bWJvbCgnZGVzdHJveWVkJylcbmNvbnN0IGtDbG9zZWQgPSBTeW1ib2woJ2Nsb3NlZCcpXG5jb25zdCBrT25EZXN0cm95ZWQgPSBTeW1ib2woJ29uRGVzdHJveWVkJylcbmNvbnN0IGtPbkNsb3NlZCA9IFN5bWJvbCgnb25DbG9zZWQnKVxuY29uc3Qga0ludGVyY2VwdGVkRGlzcGF0Y2ggPSBTeW1ib2woJ0ludGVyY2VwdGVkIERpc3BhdGNoJylcblxuY2xhc3MgRGlzcGF0Y2hlckJhc2UgZXh0ZW5kcyBEaXNwYXRjaGVyIHtcbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXNba0Rlc3Ryb3llZF0gPSBmYWxzZVxuICAgIHRoaXNba09uRGVzdHJveWVkXSA9IG51bGxcbiAgICB0aGlzW2tDbG9zZWRdID0gZmFsc2VcbiAgICB0aGlzW2tPbkNsb3NlZF0gPSBbXVxuICB9XG5cbiAgZ2V0IGRlc3Ryb3llZCAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0Rlc3Ryb3llZF1cbiAgfVxuXG4gIGdldCBjbG9zZWQgKCkge1xuICAgIHJldHVybiB0aGlzW2tDbG9zZWRdXG4gIH1cblxuICBnZXQgaW50ZXJjZXB0b3JzICgpIHtcbiAgICByZXR1cm4gdGhpc1trSW50ZXJjZXB0b3JzXVxuICB9XG5cbiAgc2V0IGludGVyY2VwdG9ycyAobmV3SW50ZXJjZXB0b3JzKSB7XG4gICAgaWYgKG5ld0ludGVyY2VwdG9ycykge1xuICAgICAgZm9yIChsZXQgaSA9IG5ld0ludGVyY2VwdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBjb25zdCBpbnRlcmNlcHRvciA9IHRoaXNba0ludGVyY2VwdG9yc11baV1cbiAgICAgICAgaWYgKHR5cGVvZiBpbnRlcmNlcHRvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW50ZXJjZXB0b3IgbXVzdCBiZSBhbiBmdW5jdGlvbicpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzW2tJbnRlcmNlcHRvcnNdID0gbmV3SW50ZXJjZXB0b3JzXG4gIH1cblxuICBjbG9zZSAoY2FsbGJhY2spIHtcbiAgICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgdGhpcy5jbG9zZSgoZXJyLCBkYXRhKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGVyciA/IHJlamVjdChlcnIpIDogcmVzb2x2ZShkYXRhKVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY2FsbGJhY2snKVxuICAgIH1cblxuICAgIGlmICh0aGlzW2tEZXN0cm95ZWRdKSB7XG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhuZXcgQ2xpZW50RGVzdHJveWVkRXJyb3IoKSwgbnVsbCkpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAodGhpc1trQ2xvc2VkXSkge1xuICAgICAgaWYgKHRoaXNba09uQ2xvc2VkXSkge1xuICAgICAgICB0aGlzW2tPbkNsb3NlZF0ucHVzaChjYWxsYmFjaylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGNhbGxiYWNrKG51bGwsIG51bGwpKVxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpc1trQ2xvc2VkXSA9IHRydWVcbiAgICB0aGlzW2tPbkNsb3NlZF0ucHVzaChjYWxsYmFjaylcblxuICAgIGNvbnN0IG9uQ2xvc2VkID0gKCkgPT4ge1xuICAgICAgY29uc3QgY2FsbGJhY2tzID0gdGhpc1trT25DbG9zZWRdXG4gICAgICB0aGlzW2tPbkNsb3NlZF0gPSBudWxsXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNhbGxiYWNrcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjYWxsYmFja3NbaV0obnVsbCwgbnVsbClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTaG91bGQgbm90IGVycm9yLlxuICAgIHRoaXNba0Nsb3NlXSgpXG4gICAgICAudGhlbigoKSA9PiB0aGlzLmRlc3Ryb3koKSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgcXVldWVNaWNyb3Rhc2sob25DbG9zZWQpXG4gICAgICB9KVxuICB9XG5cbiAgZGVzdHJveSAoZXJyLCBjYWxsYmFjaykge1xuICAgIGlmICh0eXBlb2YgZXJyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjYWxsYmFjayA9IGVyclxuICAgICAgZXJyID0gbnVsbFxuICAgIH1cblxuICAgIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICB0aGlzLmRlc3Ryb3koZXJyLCAoZXJyLCBkYXRhKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGVyciA/IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBzaG91bGQgbmV2ZXIgZXJyb3IgKi8gcmVqZWN0KGVycikgOiByZXNvbHZlKGRhdGEpXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjYWxsYmFjaycpXG4gICAgfVxuXG4gICAgaWYgKHRoaXNba0Rlc3Ryb3llZF0pIHtcbiAgICAgIGlmICh0aGlzW2tPbkRlc3Ryb3llZF0pIHtcbiAgICAgICAgdGhpc1trT25EZXN0cm95ZWRdLnB1c2goY2FsbGJhY2spXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhudWxsLCBudWxsKSlcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghZXJyKSB7XG4gICAgICBlcnIgPSBuZXcgQ2xpZW50RGVzdHJveWVkRXJyb3IoKVxuICAgIH1cblxuICAgIHRoaXNba0Rlc3Ryb3llZF0gPSB0cnVlXG4gICAgdGhpc1trT25EZXN0cm95ZWRdID0gdGhpc1trT25EZXN0cm95ZWRdIHx8IFtdXG4gICAgdGhpc1trT25EZXN0cm95ZWRdLnB1c2goY2FsbGJhY2spXG5cbiAgICBjb25zdCBvbkRlc3Ryb3llZCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGNhbGxiYWNrcyA9IHRoaXNba09uRGVzdHJveWVkXVxuICAgICAgdGhpc1trT25EZXN0cm95ZWRdID0gbnVsbFxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjYWxsYmFja3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY2FsbGJhY2tzW2ldKG51bGwsIG51bGwpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2hvdWxkIG5vdCBlcnJvci5cbiAgICB0aGlzW2tEZXN0cm95XShlcnIpLnRoZW4oKCkgPT4ge1xuICAgICAgcXVldWVNaWNyb3Rhc2sob25EZXN0cm95ZWQpXG4gICAgfSlcbiAgfVxuXG4gIFtrSW50ZXJjZXB0ZWREaXNwYXRjaF0gKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBpZiAoIXRoaXNba0ludGVyY2VwdG9yc10gfHwgdGhpc1trSW50ZXJjZXB0b3JzXS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXNba0ludGVyY2VwdGVkRGlzcGF0Y2hdID0gdGhpc1trRGlzcGF0Y2hdXG4gICAgICByZXR1cm4gdGhpc1trRGlzcGF0Y2hdKG9wdHMsIGhhbmRsZXIpXG4gICAgfVxuXG4gICAgbGV0IGRpc3BhdGNoID0gdGhpc1trRGlzcGF0Y2hdLmJpbmQodGhpcylcbiAgICBmb3IgKGxldCBpID0gdGhpc1trSW50ZXJjZXB0b3JzXS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgZGlzcGF0Y2ggPSB0aGlzW2tJbnRlcmNlcHRvcnNdW2ldKGRpc3BhdGNoKVxuICAgIH1cbiAgICB0aGlzW2tJbnRlcmNlcHRlZERpc3BhdGNoXSA9IGRpc3BhdGNoXG4gICAgcmV0dXJuIGRpc3BhdGNoKG9wdHMsIGhhbmRsZXIpXG4gIH1cblxuICBkaXNwYXRjaCAob3B0cywgaGFuZGxlcikge1xuICAgIGlmICghaGFuZGxlciB8fCB0eXBlb2YgaGFuZGxlciAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaGFuZGxlciBtdXN0IGJlIGFuIG9iamVjdCcpXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGlmICghb3B0cyB8fCB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdvcHRzIG11c3QgYmUgYW4gb2JqZWN0LicpXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzW2tEZXN0cm95ZWRdIHx8IHRoaXNba09uRGVzdHJveWVkXSkge1xuICAgICAgICB0aHJvdyBuZXcgQ2xpZW50RGVzdHJveWVkRXJyb3IoKVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpc1trQ2xvc2VkXSkge1xuICAgICAgICB0aHJvdyBuZXcgQ2xpZW50Q2xvc2VkRXJyb3IoKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpc1trSW50ZXJjZXB0ZWREaXNwYXRjaF0ob3B0cywgaGFuZGxlcilcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICh0eXBlb2YgaGFuZGxlci5vbkVycm9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkVycm9yIG1ldGhvZCcpXG4gICAgICB9XG5cbiAgICAgIGhhbmRsZXIub25FcnJvcihlcnIpXG5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IERpc3BhdGNoZXJCYXNlXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBuZXQgPSByZXF1aXJlKCduZXQnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciwgQ29ubmVjdFRpbWVvdXRFcnJvciB9ID0gcmVxdWlyZSgnLi9lcnJvcnMnKVxuXG5sZXQgdGxzIC8vIGluY2x1ZGUgdGxzIGNvbmRpdGlvbmFsbHkgc2luY2UgaXQgaXMgbm90IGFsd2F5cyBhdmFpbGFibGVcblxuLy8gVE9ETzogc2Vzc2lvbiByZS11c2UgZG9lcyBub3Qgd2FpdCBmb3IgdGhlIGZpcnN0XG4vLyBjb25uZWN0aW9uIHRvIHJlc29sdmUgdGhlIHNlc3Npb24gYW5kIG1pZ2h0IHRoZXJlZm9yZVxuLy8gcmVzb2x2ZSB0aGUgc2FtZSBzZXJ2ZXJuYW1lIG11bHRpcGxlIHRpbWVzIGV2ZW4gd2hlblxuLy8gcmUtdXNlIGlzIGVuYWJsZWQuXG5cbmxldCBTZXNzaW9uQ2FjaGVcbi8vIEZJWE1FOiByZW1vdmUgd29ya2Fyb3VuZCB3aGVuIHRoZSBOb2RlIGJ1ZyBpcyBmaXhlZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2lzc3Vlcy80OTM0NCNpc3N1ZWNvbW1lbnQtMTc0MTc3NjMwOFxuaWYgKGdsb2JhbC5GaW5hbGl6YXRpb25SZWdpc3RyeSAmJiAhcHJvY2Vzcy5lbnYuTk9ERV9WOF9DT1ZFUkFHRSkge1xuICBTZXNzaW9uQ2FjaGUgPSBjbGFzcyBXZWFrU2Vzc2lvbkNhY2hlIHtcbiAgICBjb25zdHJ1Y3RvciAobWF4Q2FjaGVkU2Vzc2lvbnMpIHtcbiAgICAgIHRoaXMuX21heENhY2hlZFNlc3Npb25zID0gbWF4Q2FjaGVkU2Vzc2lvbnNcbiAgICAgIHRoaXMuX3Nlc3Npb25DYWNoZSA9IG5ldyBNYXAoKVxuICAgICAgdGhpcy5fc2Vzc2lvblJlZ2lzdHJ5ID0gbmV3IGdsb2JhbC5GaW5hbGl6YXRpb25SZWdpc3RyeSgoa2V5KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9zZXNzaW9uQ2FjaGUuc2l6ZSA8IHRoaXMuX21heENhY2hlZFNlc3Npb25zKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZWYgPSB0aGlzLl9zZXNzaW9uQ2FjaGUuZ2V0KGtleSlcbiAgICAgICAgaWYgKHJlZiAhPT0gdW5kZWZpbmVkICYmIHJlZi5kZXJlZigpID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLl9zZXNzaW9uQ2FjaGUuZGVsZXRlKGtleSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBnZXQgKHNlc3Npb25LZXkpIHtcbiAgICAgIGNvbnN0IHJlZiA9IHRoaXMuX3Nlc3Npb25DYWNoZS5nZXQoc2Vzc2lvbktleSlcbiAgICAgIHJldHVybiByZWYgPyByZWYuZGVyZWYoKSA6IG51bGxcbiAgICB9XG5cbiAgICBzZXQgKHNlc3Npb25LZXksIHNlc3Npb24pIHtcbiAgICAgIGlmICh0aGlzLl9tYXhDYWNoZWRTZXNzaW9ucyA9PT0gMCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgdGhpcy5fc2Vzc2lvbkNhY2hlLnNldChzZXNzaW9uS2V5LCBuZXcgV2Vha1JlZihzZXNzaW9uKSlcbiAgICAgIHRoaXMuX3Nlc3Npb25SZWdpc3RyeS5yZWdpc3RlcihzZXNzaW9uLCBzZXNzaW9uS2V5KVxuICAgIH1cbiAgfVxufSBlbHNlIHtcbiAgU2Vzc2lvbkNhY2hlID0gY2xhc3MgU2ltcGxlU2Vzc2lvbkNhY2hlIHtcbiAgICBjb25zdHJ1Y3RvciAobWF4Q2FjaGVkU2Vzc2lvbnMpIHtcbiAgICAgIHRoaXMuX21heENhY2hlZFNlc3Npb25zID0gbWF4Q2FjaGVkU2Vzc2lvbnNcbiAgICAgIHRoaXMuX3Nlc3Npb25DYWNoZSA9IG5ldyBNYXAoKVxuICAgIH1cblxuICAgIGdldCAoc2Vzc2lvbktleSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3Nlc3Npb25DYWNoZS5nZXQoc2Vzc2lvbktleSlcbiAgICB9XG5cbiAgICBzZXQgKHNlc3Npb25LZXksIHNlc3Npb24pIHtcbiAgICAgIGlmICh0aGlzLl9tYXhDYWNoZWRTZXNzaW9ucyA9PT0gMCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX3Nlc3Npb25DYWNoZS5zaXplID49IHRoaXMuX21heENhY2hlZFNlc3Npb25zKSB7XG4gICAgICAgIC8vIHJlbW92ZSB0aGUgb2xkZXN0IHNlc3Npb25cbiAgICAgICAgY29uc3QgeyB2YWx1ZTogb2xkZXN0S2V5IH0gPSB0aGlzLl9zZXNzaW9uQ2FjaGUua2V5cygpLm5leHQoKVxuICAgICAgICB0aGlzLl9zZXNzaW9uQ2FjaGUuZGVsZXRlKG9sZGVzdEtleSlcbiAgICAgIH1cblxuICAgICAgdGhpcy5fc2Vzc2lvbkNhY2hlLnNldChzZXNzaW9uS2V5LCBzZXNzaW9uKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBidWlsZENvbm5lY3RvciAoeyBhbGxvd0gyLCBtYXhDYWNoZWRTZXNzaW9ucywgc29ja2V0UGF0aCwgdGltZW91dCwgLi4ub3B0cyB9KSB7XG4gIGlmIChtYXhDYWNoZWRTZXNzaW9ucyAhPSBudWxsICYmICghTnVtYmVyLmlzSW50ZWdlcihtYXhDYWNoZWRTZXNzaW9ucykgfHwgbWF4Q2FjaGVkU2Vzc2lvbnMgPCAwKSkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignbWF4Q2FjaGVkU2Vzc2lvbnMgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgb3IgemVybycpXG4gIH1cblxuICBjb25zdCBvcHRpb25zID0geyBwYXRoOiBzb2NrZXRQYXRoLCAuLi5vcHRzIH1cbiAgY29uc3Qgc2Vzc2lvbkNhY2hlID0gbmV3IFNlc3Npb25DYWNoZShtYXhDYWNoZWRTZXNzaW9ucyA9PSBudWxsID8gMTAwIDogbWF4Q2FjaGVkU2Vzc2lvbnMpXG4gIHRpbWVvdXQgPSB0aW1lb3V0ID09IG51bGwgPyAxMGUzIDogdGltZW91dFxuICBhbGxvd0gyID0gYWxsb3dIMiAhPSBudWxsID8gYWxsb3dIMiA6IGZhbHNlXG4gIHJldHVybiBmdW5jdGlvbiBjb25uZWN0ICh7IGhvc3RuYW1lLCBob3N0LCBwcm90b2NvbCwgcG9ydCwgc2VydmVybmFtZSwgbG9jYWxBZGRyZXNzLCBodHRwU29ja2V0IH0sIGNhbGxiYWNrKSB7XG4gICAgbGV0IHNvY2tldFxuICAgIGlmIChwcm90b2NvbCA9PT0gJ2h0dHBzOicpIHtcbiAgICAgIGlmICghdGxzKSB7XG4gICAgICAgIHRscyA9IHJlcXVpcmUoJ3RscycpXG4gICAgICB9XG4gICAgICBzZXJ2ZXJuYW1lID0gc2VydmVybmFtZSB8fCBvcHRpb25zLnNlcnZlcm5hbWUgfHwgdXRpbC5nZXRTZXJ2ZXJOYW1lKGhvc3QpIHx8IG51bGxcblxuICAgICAgY29uc3Qgc2Vzc2lvbktleSA9IHNlcnZlcm5hbWUgfHwgaG9zdG5hbWVcbiAgICAgIGNvbnN0IHNlc3Npb24gPSBzZXNzaW9uQ2FjaGUuZ2V0KHNlc3Npb25LZXkpIHx8IG51bGxcblxuICAgICAgYXNzZXJ0KHNlc3Npb25LZXkpXG5cbiAgICAgIHNvY2tldCA9IHRscy5jb25uZWN0KHtcbiAgICAgICAgaGlnaFdhdGVyTWFyazogMTYzODQsIC8vIFRMUyBpbiBub2RlIGNhbid0IGhhdmUgYmlnZ2VyIEhXTSBhbnl3YXkuLi5cbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgc2VydmVybmFtZSxcbiAgICAgICAgc2Vzc2lvbixcbiAgICAgICAgbG9jYWxBZGRyZXNzLFxuICAgICAgICAvLyBUT0RPKEhUVFAvMik6IEFkZCBzdXBwb3J0IGZvciBoMmNcbiAgICAgICAgQUxQTlByb3RvY29sczogYWxsb3dIMiA/IFsnaHR0cC8xLjEnLCAnaDInXSA6IFsnaHR0cC8xLjEnXSxcbiAgICAgICAgc29ja2V0OiBodHRwU29ja2V0LCAvLyB1cGdyYWRlIHNvY2tldCBjb25uZWN0aW9uXG4gICAgICAgIHBvcnQ6IHBvcnQgfHwgNDQzLFxuICAgICAgICBob3N0OiBob3N0bmFtZVxuICAgICAgfSlcblxuICAgICAgc29ja2V0XG4gICAgICAgIC5vbignc2Vzc2lvbicsIGZ1bmN0aW9uIChzZXNzaW9uKSB7XG4gICAgICAgICAgLy8gVE9ETyAoZml4KTogQ2FuIGEgc2Vzc2lvbiBiZWNvbWUgaW52YWxpZCBvbmNlIGVzdGFibGlzaGVkPyBEb24ndCB0aGluayBzbz9cbiAgICAgICAgICBzZXNzaW9uQ2FjaGUuc2V0KHNlc3Npb25LZXksIHNlc3Npb24pXG4gICAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydCghaHR0cFNvY2tldCwgJ2h0dHBTb2NrZXQgY2FuIG9ubHkgYmUgc2VudCBvbiBUTFMgdXBkYXRlJylcbiAgICAgIHNvY2tldCA9IG5ldC5jb25uZWN0KHtcbiAgICAgICAgaGlnaFdhdGVyTWFyazogNjQgKiAxMDI0LCAvLyBTYW1lIGFzIG5vZGVqcyBmcyBzdHJlYW1zLlxuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICBsb2NhbEFkZHJlc3MsXG4gICAgICAgIHBvcnQ6IHBvcnQgfHwgODAsXG4gICAgICAgIGhvc3Q6IGhvc3RuYW1lXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIFNldCBUQ1Aga2VlcCBhbGl2ZSBvcHRpb25zIG9uIHRoZSBzb2NrZXQgaGVyZSBpbnN0ZWFkIG9mIGluIGNvbm5lY3QoKSBmb3IgdGhlIGNhc2Ugb2YgYXNzaWduaW5nIHRoZSBzb2NrZXRcbiAgICBpZiAob3B0aW9ucy5rZWVwQWxpdmUgPT0gbnVsbCB8fCBvcHRpb25zLmtlZXBBbGl2ZSkge1xuICAgICAgY29uc3Qga2VlcEFsaXZlSW5pdGlhbERlbGF5ID0gb3B0aW9ucy5rZWVwQWxpdmVJbml0aWFsRGVsYXkgPT09IHVuZGVmaW5lZCA/IDYwZTMgOiBvcHRpb25zLmtlZXBBbGl2ZUluaXRpYWxEZWxheVxuICAgICAgc29ja2V0LnNldEtlZXBBbGl2ZSh0cnVlLCBrZWVwQWxpdmVJbml0aWFsRGVsYXkpXG4gICAgfVxuXG4gICAgY29uc3QgY2FuY2VsVGltZW91dCA9IHNldHVwVGltZW91dCgoKSA9PiBvbkNvbm5lY3RUaW1lb3V0KHNvY2tldCksIHRpbWVvdXQpXG5cbiAgICBzb2NrZXRcbiAgICAgIC5zZXROb0RlbGF5KHRydWUpXG4gICAgICAub25jZShwcm90b2NvbCA9PT0gJ2h0dHBzOicgPyAnc2VjdXJlQ29ubmVjdCcgOiAnY29ubmVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY2FuY2VsVGltZW91dCgpXG5cbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgY29uc3QgY2IgPSBjYWxsYmFja1xuICAgICAgICAgIGNhbGxiYWNrID0gbnVsbFxuICAgICAgICAgIGNiKG51bGwsIHRoaXMpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAub24oJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBjYW5jZWxUaW1lb3V0KClcblxuICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICBjb25zdCBjYiA9IGNhbGxiYWNrXG4gICAgICAgICAgY2FsbGJhY2sgPSBudWxsXG4gICAgICAgICAgY2IoZXJyKVxuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgcmV0dXJuIHNvY2tldFxuICB9XG59XG5cbmZ1bmN0aW9uIHNldHVwVGltZW91dCAob25Db25uZWN0VGltZW91dCwgdGltZW91dCkge1xuICBpZiAoIXRpbWVvdXQpIHtcbiAgICByZXR1cm4gKCkgPT4ge31cbiAgfVxuXG4gIGxldCBzMSA9IG51bGxcbiAgbGV0IHMyID0gbnVsbFxuICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyBzZXRJbW1lZGlhdGUgaXMgYWRkZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2UgcHJpb3RvcmlzZSBzb2NrZXQgZXJyb3IgZXZlbnRzIG92ZXIgdGltZW91dHNcbiAgICBzMSA9IHNldEltbWVkaWF0ZSgoKSA9PiB7XG4gICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgICAgICAvLyBXaW5kb3dzIG5lZWRzIGFuIGV4dHJhIHNldEltbWVkaWF0ZSBwcm9iYWJseSBkdWUgdG8gaW1wbGVtZW50YXRpb24gZGlmZmVyZW5jZXMgaW4gdGhlIHNvY2tldCBsb2dpY1xuICAgICAgICBzMiA9IHNldEltbWVkaWF0ZSgoKSA9PiBvbkNvbm5lY3RUaW1lb3V0KCkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvbkNvbm5lY3RUaW1lb3V0KClcbiAgICAgIH1cbiAgICB9KVxuICB9LCB0aW1lb3V0KVxuICByZXR1cm4gKCkgPT4ge1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpXG4gICAgY2xlYXJJbW1lZGlhdGUoczEpXG4gICAgY2xlYXJJbW1lZGlhdGUoczIpXG4gIH1cbn1cblxuZnVuY3Rpb24gb25Db25uZWN0VGltZW91dCAoc29ja2V0KSB7XG4gIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBDb25uZWN0VGltZW91dEVycm9yKCkpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRDb25uZWN0b3JcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmVudW1Ub01hcCA9IHZvaWQgMDtcbmZ1bmN0aW9uIGVudW1Ub01hcChvYmopIHtcbiAgICBjb25zdCByZXMgPSB7fTtcbiAgICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IG9ialtrZXldO1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgcmVzW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXM7XG59XG5leHBvcnRzLmVudW1Ub01hcCA9IGVudW1Ub01hcDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlNQRUNJQUxfSEVBREVSUyA9IGV4cG9ydHMuSEVBREVSX1NUQVRFID0gZXhwb3J0cy5NSU5PUiA9IGV4cG9ydHMuTUFKT1IgPSBleHBvcnRzLkNPTk5FQ1RJT05fVE9LRU5fQ0hBUlMgPSBleHBvcnRzLkhFQURFUl9DSEFSUyA9IGV4cG9ydHMuVE9LRU4gPSBleHBvcnRzLlNUUklDVF9UT0tFTiA9IGV4cG9ydHMuSEVYID0gZXhwb3J0cy5VUkxfQ0hBUiA9IGV4cG9ydHMuU1RSSUNUX1VSTF9DSEFSID0gZXhwb3J0cy5VU0VSSU5GT19DSEFSUyA9IGV4cG9ydHMuTUFSSyA9IGV4cG9ydHMuQUxQSEFOVU0gPSBleHBvcnRzLk5VTSA9IGV4cG9ydHMuSEVYX01BUCA9IGV4cG9ydHMuTlVNX01BUCA9IGV4cG9ydHMuQUxQSEEgPSBleHBvcnRzLkZJTklTSCA9IGV4cG9ydHMuSF9NRVRIT0RfTUFQID0gZXhwb3J0cy5NRVRIT0RfTUFQID0gZXhwb3J0cy5NRVRIT0RTX1JUU1AgPSBleHBvcnRzLk1FVEhPRFNfSUNFID0gZXhwb3J0cy5NRVRIT0RTX0hUVFAgPSBleHBvcnRzLk1FVEhPRFMgPSBleHBvcnRzLkxFTklFTlRfRkxBR1MgPSBleHBvcnRzLkZMQUdTID0gZXhwb3J0cy5UWVBFID0gZXhwb3J0cy5FUlJPUiA9IHZvaWQgMDtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi91dGlsc1wiKTtcbi8vIEMgaGVhZGVyc1xudmFyIEVSUk9SO1xuKGZ1bmN0aW9uIChFUlJPUikge1xuICAgIEVSUk9SW0VSUk9SW1wiT0tcIl0gPSAwXSA9IFwiT0tcIjtcbiAgICBFUlJPUltFUlJPUltcIklOVEVSTkFMXCJdID0gMV0gPSBcIklOVEVSTkFMXCI7XG4gICAgRVJST1JbRVJST1JbXCJTVFJJQ1RcIl0gPSAyXSA9IFwiU1RSSUNUXCI7XG4gICAgRVJST1JbRVJST1JbXCJMRl9FWFBFQ1RFRFwiXSA9IDNdID0gXCJMRl9FWFBFQ1RFRFwiO1xuICAgIEVSUk9SW0VSUk9SW1wiVU5FWFBFQ1RFRF9DT05URU5UX0xFTkdUSFwiXSA9IDRdID0gXCJVTkVYUEVDVEVEX0NPTlRFTlRfTEVOR1RIXCI7XG4gICAgRVJST1JbRVJST1JbXCJDTE9TRURfQ09OTkVDVElPTlwiXSA9IDVdID0gXCJDTE9TRURfQ09OTkVDVElPTlwiO1xuICAgIEVSUk9SW0VSUk9SW1wiSU5WQUxJRF9NRVRIT0RcIl0gPSA2XSA9IFwiSU5WQUxJRF9NRVRIT0RcIjtcbiAgICBFUlJPUltFUlJPUltcIklOVkFMSURfVVJMXCJdID0gN10gPSBcIklOVkFMSURfVVJMXCI7XG4gICAgRVJST1JbRVJST1JbXCJJTlZBTElEX0NPTlNUQU5UXCJdID0gOF0gPSBcIklOVkFMSURfQ09OU1RBTlRcIjtcbiAgICBFUlJPUltFUlJPUltcIklOVkFMSURfVkVSU0lPTlwiXSA9IDldID0gXCJJTlZBTElEX1ZFUlNJT05cIjtcbiAgICBFUlJPUltFUlJPUltcIklOVkFMSURfSEVBREVSX1RPS0VOXCJdID0gMTBdID0gXCJJTlZBTElEX0hFQURFUl9UT0tFTlwiO1xuICAgIEVSUk9SW0VSUk9SW1wiSU5WQUxJRF9DT05URU5UX0xFTkdUSFwiXSA9IDExXSA9IFwiSU5WQUxJRF9DT05URU5UX0xFTkdUSFwiO1xuICAgIEVSUk9SW0VSUk9SW1wiSU5WQUxJRF9DSFVOS19TSVpFXCJdID0gMTJdID0gXCJJTlZBTElEX0NIVU5LX1NJWkVcIjtcbiAgICBFUlJPUltFUlJPUltcIklOVkFMSURfU1RBVFVTXCJdID0gMTNdID0gXCJJTlZBTElEX1NUQVRVU1wiO1xuICAgIEVSUk9SW0VSUk9SW1wiSU5WQUxJRF9FT0ZfU1RBVEVcIl0gPSAxNF0gPSBcIklOVkFMSURfRU9GX1NUQVRFXCI7XG4gICAgRVJST1JbRVJST1JbXCJJTlZBTElEX1RSQU5TRkVSX0VOQ09ESU5HXCJdID0gMTVdID0gXCJJTlZBTElEX1RSQU5TRkVSX0VOQ09ESU5HXCI7XG4gICAgRVJST1JbRVJST1JbXCJDQl9NRVNTQUdFX0JFR0lOXCJdID0gMTZdID0gXCJDQl9NRVNTQUdFX0JFR0lOXCI7XG4gICAgRVJST1JbRVJST1JbXCJDQl9IRUFERVJTX0NPTVBMRVRFXCJdID0gMTddID0gXCJDQl9IRUFERVJTX0NPTVBMRVRFXCI7XG4gICAgRVJST1JbRVJST1JbXCJDQl9NRVNTQUdFX0NPTVBMRVRFXCJdID0gMThdID0gXCJDQl9NRVNTQUdFX0NPTVBMRVRFXCI7XG4gICAgRVJST1JbRVJST1JbXCJDQl9DSFVOS19IRUFERVJcIl0gPSAxOV0gPSBcIkNCX0NIVU5LX0hFQURFUlwiO1xuICAgIEVSUk9SW0VSUk9SW1wiQ0JfQ0hVTktfQ09NUExFVEVcIl0gPSAyMF0gPSBcIkNCX0NIVU5LX0NPTVBMRVRFXCI7XG4gICAgRVJST1JbRVJST1JbXCJQQVVTRURcIl0gPSAyMV0gPSBcIlBBVVNFRFwiO1xuICAgIEVSUk9SW0VSUk9SW1wiUEFVU0VEX1VQR1JBREVcIl0gPSAyMl0gPSBcIlBBVVNFRF9VUEdSQURFXCI7XG4gICAgRVJST1JbRVJST1JbXCJQQVVTRURfSDJfVVBHUkFERVwiXSA9IDIzXSA9IFwiUEFVU0VEX0gyX1VQR1JBREVcIjtcbiAgICBFUlJPUltFUlJPUltcIlVTRVJcIl0gPSAyNF0gPSBcIlVTRVJcIjtcbn0pKEVSUk9SID0gZXhwb3J0cy5FUlJPUiB8fCAoZXhwb3J0cy5FUlJPUiA9IHt9KSk7XG52YXIgVFlQRTtcbihmdW5jdGlvbiAoVFlQRSkge1xuICAgIFRZUEVbVFlQRVtcIkJPVEhcIl0gPSAwXSA9IFwiQk9USFwiO1xuICAgIFRZUEVbVFlQRVtcIlJFUVVFU1RcIl0gPSAxXSA9IFwiUkVRVUVTVFwiO1xuICAgIFRZUEVbVFlQRVtcIlJFU1BPTlNFXCJdID0gMl0gPSBcIlJFU1BPTlNFXCI7XG59KShUWVBFID0gZXhwb3J0cy5UWVBFIHx8IChleHBvcnRzLlRZUEUgPSB7fSkpO1xudmFyIEZMQUdTO1xuKGZ1bmN0aW9uIChGTEFHUykge1xuICAgIEZMQUdTW0ZMQUdTW1wiQ09OTkVDVElPTl9LRUVQX0FMSVZFXCJdID0gMV0gPSBcIkNPTk5FQ1RJT05fS0VFUF9BTElWRVwiO1xuICAgIEZMQUdTW0ZMQUdTW1wiQ09OTkVDVElPTl9DTE9TRVwiXSA9IDJdID0gXCJDT05ORUNUSU9OX0NMT1NFXCI7XG4gICAgRkxBR1NbRkxBR1NbXCJDT05ORUNUSU9OX1VQR1JBREVcIl0gPSA0XSA9IFwiQ09OTkVDVElPTl9VUEdSQURFXCI7XG4gICAgRkxBR1NbRkxBR1NbXCJDSFVOS0VEXCJdID0gOF0gPSBcIkNIVU5LRURcIjtcbiAgICBGTEFHU1tGTEFHU1tcIlVQR1JBREVcIl0gPSAxNl0gPSBcIlVQR1JBREVcIjtcbiAgICBGTEFHU1tGTEFHU1tcIkNPTlRFTlRfTEVOR1RIXCJdID0gMzJdID0gXCJDT05URU5UX0xFTkdUSFwiO1xuICAgIEZMQUdTW0ZMQUdTW1wiU0tJUEJPRFlcIl0gPSA2NF0gPSBcIlNLSVBCT0RZXCI7XG4gICAgRkxBR1NbRkxBR1NbXCJUUkFJTElOR1wiXSA9IDEyOF0gPSBcIlRSQUlMSU5HXCI7XG4gICAgLy8gMSA8PCA4IGlzIHVudXNlZFxuICAgIEZMQUdTW0ZMQUdTW1wiVFJBTlNGRVJfRU5DT0RJTkdcIl0gPSA1MTJdID0gXCJUUkFOU0ZFUl9FTkNPRElOR1wiO1xufSkoRkxBR1MgPSBleHBvcnRzLkZMQUdTIHx8IChleHBvcnRzLkZMQUdTID0ge30pKTtcbnZhciBMRU5JRU5UX0ZMQUdTO1xuKGZ1bmN0aW9uIChMRU5JRU5UX0ZMQUdTKSB7XG4gICAgTEVOSUVOVF9GTEFHU1tMRU5JRU5UX0ZMQUdTW1wiSEVBREVSU1wiXSA9IDFdID0gXCJIRUFERVJTXCI7XG4gICAgTEVOSUVOVF9GTEFHU1tMRU5JRU5UX0ZMQUdTW1wiQ0hVTktFRF9MRU5HVEhcIl0gPSAyXSA9IFwiQ0hVTktFRF9MRU5HVEhcIjtcbiAgICBMRU5JRU5UX0ZMQUdTW0xFTklFTlRfRkxBR1NbXCJLRUVQX0FMSVZFXCJdID0gNF0gPSBcIktFRVBfQUxJVkVcIjtcbn0pKExFTklFTlRfRkxBR1MgPSBleHBvcnRzLkxFTklFTlRfRkxBR1MgfHwgKGV4cG9ydHMuTEVOSUVOVF9GTEFHUyA9IHt9KSk7XG52YXIgTUVUSE9EUztcbihmdW5jdGlvbiAoTUVUSE9EUykge1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIkRFTEVURVwiXSA9IDBdID0gXCJERUxFVEVcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJHRVRcIl0gPSAxXSA9IFwiR0VUXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiSEVBRFwiXSA9IDJdID0gXCJIRUFEXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiUE9TVFwiXSA9IDNdID0gXCJQT1NUXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiUFVUXCJdID0gNF0gPSBcIlBVVFwiO1xuICAgIC8qIHBhdGhvbG9naWNhbCAqL1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIkNPTk5FQ1RcIl0gPSA1XSA9IFwiQ09OTkVDVFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIk9QVElPTlNcIl0gPSA2XSA9IFwiT1BUSU9OU1wiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlRSQUNFXCJdID0gN10gPSBcIlRSQUNFXCI7XG4gICAgLyogV2ViREFWICovXG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiQ09QWVwiXSA9IDhdID0gXCJDT1BZXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiTE9DS1wiXSA9IDldID0gXCJMT0NLXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiTUtDT0xcIl0gPSAxMF0gPSBcIk1LQ09MXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiTU9WRVwiXSA9IDExXSA9IFwiTU9WRVwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlBST1BGSU5EXCJdID0gMTJdID0gXCJQUk9QRklORFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlBST1BQQVRDSFwiXSA9IDEzXSA9IFwiUFJPUFBBVENIXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiU0VBUkNIXCJdID0gMTRdID0gXCJTRUFSQ0hcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJVTkxPQ0tcIl0gPSAxNV0gPSBcIlVOTE9DS1wiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIkJJTkRcIl0gPSAxNl0gPSBcIkJJTkRcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJSRUJJTkRcIl0gPSAxN10gPSBcIlJFQklORFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlVOQklORFwiXSA9IDE4XSA9IFwiVU5CSU5EXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiQUNMXCJdID0gMTldID0gXCJBQ0xcIjtcbiAgICAvKiBzdWJ2ZXJzaW9uICovXG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiUkVQT1JUXCJdID0gMjBdID0gXCJSRVBPUlRcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJNS0FDVElWSVRZXCJdID0gMjFdID0gXCJNS0FDVElWSVRZXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiQ0hFQ0tPVVRcIl0gPSAyMl0gPSBcIkNIRUNLT1VUXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiTUVSR0VcIl0gPSAyM10gPSBcIk1FUkdFXCI7XG4gICAgLyogdXBucCAqL1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIk0tU0VBUkNIXCJdID0gMjRdID0gXCJNLVNFQVJDSFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIk5PVElGWVwiXSA9IDI1XSA9IFwiTk9USUZZXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiU1VCU0NSSUJFXCJdID0gMjZdID0gXCJTVUJTQ1JJQkVcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJVTlNVQlNDUklCRVwiXSA9IDI3XSA9IFwiVU5TVUJTQ1JJQkVcIjtcbiAgICAvKiBSRkMtNTc4OSAqL1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlBBVENIXCJdID0gMjhdID0gXCJQQVRDSFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlBVUkdFXCJdID0gMjldID0gXCJQVVJHRVwiO1xuICAgIC8qIENhbERBViAqL1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIk1LQ0FMRU5EQVJcIl0gPSAzMF0gPSBcIk1LQ0FMRU5EQVJcIjtcbiAgICAvKiBSRkMtMjA2OCwgc2VjdGlvbiAxOS42LjEuMiAqL1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIkxJTktcIl0gPSAzMV0gPSBcIkxJTktcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJVTkxJTktcIl0gPSAzMl0gPSBcIlVOTElOS1wiO1xuICAgIC8qIGljZWNhc3QgKi9cbiAgICBNRVRIT0RTW01FVEhPRFNbXCJTT1VSQ0VcIl0gPSAzM10gPSBcIlNPVVJDRVwiO1xuICAgIC8qIFJGQy03NTQwLCBzZWN0aW9uIDExLjYgKi9cbiAgICBNRVRIT0RTW01FVEhPRFNbXCJQUklcIl0gPSAzNF0gPSBcIlBSSVwiO1xuICAgIC8qIFJGQy0yMzI2IFJUU1AgKi9cbiAgICBNRVRIT0RTW01FVEhPRFNbXCJERVNDUklCRVwiXSA9IDM1XSA9IFwiREVTQ1JJQkVcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJBTk5PVU5DRVwiXSA9IDM2XSA9IFwiQU5OT1VOQ0VcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJTRVRVUFwiXSA9IDM3XSA9IFwiU0VUVVBcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJQTEFZXCJdID0gMzhdID0gXCJQTEFZXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiUEFVU0VcIl0gPSAzOV0gPSBcIlBBVVNFXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiVEVBUkRPV05cIl0gPSA0MF0gPSBcIlRFQVJET1dOXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiR0VUX1BBUkFNRVRFUlwiXSA9IDQxXSA9IFwiR0VUX1BBUkFNRVRFUlwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlNFVF9QQVJBTUVURVJcIl0gPSA0Ml0gPSBcIlNFVF9QQVJBTUVURVJcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJSRURJUkVDVFwiXSA9IDQzXSA9IFwiUkVESVJFQ1RcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJSRUNPUkRcIl0gPSA0NF0gPSBcIlJFQ09SRFwiO1xuICAgIC8qIFJBT1AgKi9cbiAgICBNRVRIT0RTW01FVEhPRFNbXCJGTFVTSFwiXSA9IDQ1XSA9IFwiRkxVU0hcIjtcbn0pKE1FVEhPRFMgPSBleHBvcnRzLk1FVEhPRFMgfHwgKGV4cG9ydHMuTUVUSE9EUyA9IHt9KSk7XG5leHBvcnRzLk1FVEhPRFNfSFRUUCA9IFtcbiAgICBNRVRIT0RTLkRFTEVURSxcbiAgICBNRVRIT0RTLkdFVCxcbiAgICBNRVRIT0RTLkhFQUQsXG4gICAgTUVUSE9EUy5QT1NULFxuICAgIE1FVEhPRFMuUFVULFxuICAgIE1FVEhPRFMuQ09OTkVDVCxcbiAgICBNRVRIT0RTLk9QVElPTlMsXG4gICAgTUVUSE9EUy5UUkFDRSxcbiAgICBNRVRIT0RTLkNPUFksXG4gICAgTUVUSE9EUy5MT0NLLFxuICAgIE1FVEhPRFMuTUtDT0wsXG4gICAgTUVUSE9EUy5NT1ZFLFxuICAgIE1FVEhPRFMuUFJPUEZJTkQsXG4gICAgTUVUSE9EUy5QUk9QUEFUQ0gsXG4gICAgTUVUSE9EUy5TRUFSQ0gsXG4gICAgTUVUSE9EUy5VTkxPQ0ssXG4gICAgTUVUSE9EUy5CSU5ELFxuICAgIE1FVEhPRFMuUkVCSU5ELFxuICAgIE1FVEhPRFMuVU5CSU5ELFxuICAgIE1FVEhPRFMuQUNMLFxuICAgIE1FVEhPRFMuUkVQT1JULFxuICAgIE1FVEhPRFMuTUtBQ1RJVklUWSxcbiAgICBNRVRIT0RTLkNIRUNLT1VULFxuICAgIE1FVEhPRFMuTUVSR0UsXG4gICAgTUVUSE9EU1snTS1TRUFSQ0gnXSxcbiAgICBNRVRIT0RTLk5PVElGWSxcbiAgICBNRVRIT0RTLlNVQlNDUklCRSxcbiAgICBNRVRIT0RTLlVOU1VCU0NSSUJFLFxuICAgIE1FVEhPRFMuUEFUQ0gsXG4gICAgTUVUSE9EUy5QVVJHRSxcbiAgICBNRVRIT0RTLk1LQ0FMRU5EQVIsXG4gICAgTUVUSE9EUy5MSU5LLFxuICAgIE1FVEhPRFMuVU5MSU5LLFxuICAgIE1FVEhPRFMuUFJJLFxuICAgIC8vIFRPRE8oaW5kdXRueSk6IHNob3VsZCB3ZSBhbGxvdyBpdCB3aXRoIEhUVFA/XG4gICAgTUVUSE9EUy5TT1VSQ0UsXG5dO1xuZXhwb3J0cy5NRVRIT0RTX0lDRSA9IFtcbiAgICBNRVRIT0RTLlNPVVJDRSxcbl07XG5leHBvcnRzLk1FVEhPRFNfUlRTUCA9IFtcbiAgICBNRVRIT0RTLk9QVElPTlMsXG4gICAgTUVUSE9EUy5ERVNDUklCRSxcbiAgICBNRVRIT0RTLkFOTk9VTkNFLFxuICAgIE1FVEhPRFMuU0VUVVAsXG4gICAgTUVUSE9EUy5QTEFZLFxuICAgIE1FVEhPRFMuUEFVU0UsXG4gICAgTUVUSE9EUy5URUFSRE9XTixcbiAgICBNRVRIT0RTLkdFVF9QQVJBTUVURVIsXG4gICAgTUVUSE9EUy5TRVRfUEFSQU1FVEVSLFxuICAgIE1FVEhPRFMuUkVESVJFQ1QsXG4gICAgTUVUSE9EUy5SRUNPUkQsXG4gICAgTUVUSE9EUy5GTFVTSCxcbiAgICAvLyBGb3IgQWlyUGxheVxuICAgIE1FVEhPRFMuR0VULFxuICAgIE1FVEhPRFMuUE9TVCxcbl07XG5leHBvcnRzLk1FVEhPRF9NQVAgPSB1dGlsc18xLmVudW1Ub01hcChNRVRIT0RTKTtcbmV4cG9ydHMuSF9NRVRIT0RfTUFQID0ge307XG5PYmplY3Qua2V5cyhleHBvcnRzLk1FVEhPRF9NQVApLmZvckVhY2goKGtleSkgPT4ge1xuICAgIGlmICgvXkgvLnRlc3Qoa2V5KSkge1xuICAgICAgICBleHBvcnRzLkhfTUVUSE9EX01BUFtrZXldID0gZXhwb3J0cy5NRVRIT0RfTUFQW2tleV07XG4gICAgfVxufSk7XG52YXIgRklOSVNIO1xuKGZ1bmN0aW9uIChGSU5JU0gpIHtcbiAgICBGSU5JU0hbRklOSVNIW1wiU0FGRVwiXSA9IDBdID0gXCJTQUZFXCI7XG4gICAgRklOSVNIW0ZJTklTSFtcIlNBRkVfV0lUSF9DQlwiXSA9IDFdID0gXCJTQUZFX1dJVEhfQ0JcIjtcbiAgICBGSU5JU0hbRklOSVNIW1wiVU5TQUZFXCJdID0gMl0gPSBcIlVOU0FGRVwiO1xufSkoRklOSVNIID0gZXhwb3J0cy5GSU5JU0ggfHwgKGV4cG9ydHMuRklOSVNIID0ge30pKTtcbmV4cG9ydHMuQUxQSEEgPSBbXTtcbmZvciAobGV0IGkgPSAnQScuY2hhckNvZGVBdCgwKTsgaSA8PSAnWicuY2hhckNvZGVBdCgwKTsgaSsrKSB7XG4gICAgLy8gVXBwZXIgY2FzZVxuICAgIGV4cG9ydHMuQUxQSEEucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGkpKTtcbiAgICAvLyBMb3dlciBjYXNlXG4gICAgZXhwb3J0cy5BTFBIQS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoaSArIDB4MjApKTtcbn1cbmV4cG9ydHMuTlVNX01BUCA9IHtcbiAgICAwOiAwLCAxOiAxLCAyOiAyLCAzOiAzLCA0OiA0LFxuICAgIDU6IDUsIDY6IDYsIDc6IDcsIDg6IDgsIDk6IDksXG59O1xuZXhwb3J0cy5IRVhfTUFQID0ge1xuICAgIDA6IDAsIDE6IDEsIDI6IDIsIDM6IDMsIDQ6IDQsXG4gICAgNTogNSwgNjogNiwgNzogNywgODogOCwgOTogOSxcbiAgICBBOiAwWEEsIEI6IDBYQiwgQzogMFhDLCBEOiAwWEQsIEU6IDBYRSwgRjogMFhGLFxuICAgIGE6IDB4YSwgYjogMHhiLCBjOiAweGMsIGQ6IDB4ZCwgZTogMHhlLCBmOiAweGYsXG59O1xuZXhwb3J0cy5OVU0gPSBbXG4gICAgJzAnLCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsICc4JywgJzknLFxuXTtcbmV4cG9ydHMuQUxQSEFOVU0gPSBleHBvcnRzLkFMUEhBLmNvbmNhdChleHBvcnRzLk5VTSk7XG5leHBvcnRzLk1BUksgPSBbJy0nLCAnXycsICcuJywgJyEnLCAnficsICcqJywgJ1xcJycsICcoJywgJyknXTtcbmV4cG9ydHMuVVNFUklORk9fQ0hBUlMgPSBleHBvcnRzLkFMUEhBTlVNXG4gICAgLmNvbmNhdChleHBvcnRzLk1BUkspXG4gICAgLmNvbmNhdChbJyUnLCAnOycsICc6JywgJyYnLCAnPScsICcrJywgJyQnLCAnLCddKTtcbi8vIFRPRE8oaW5kdXRueSk6IHVzZSBSRkNcbmV4cG9ydHMuU1RSSUNUX1VSTF9DSEFSID0gW1xuICAgICchJywgJ1wiJywgJyQnLCAnJScsICcmJywgJ1xcJycsXG4gICAgJygnLCAnKScsICcqJywgJysnLCAnLCcsICctJywgJy4nLCAnLycsXG4gICAgJzonLCAnOycsICc8JywgJz0nLCAnPicsXG4gICAgJ0AnLCAnWycsICdcXFxcJywgJ10nLCAnXicsICdfJyxcbiAgICAnYCcsXG4gICAgJ3snLCAnfCcsICd9JywgJ34nLFxuXS5jb25jYXQoZXhwb3J0cy5BTFBIQU5VTSk7XG5leHBvcnRzLlVSTF9DSEFSID0gZXhwb3J0cy5TVFJJQ1RfVVJMX0NIQVJcbiAgICAuY29uY2F0KFsnXFx0JywgJ1xcZiddKTtcbi8vIEFsbCBjaGFyYWN0ZXJzIHdpdGggMHg4MCBiaXQgc2V0IHRvIDFcbmZvciAobGV0IGkgPSAweDgwOyBpIDw9IDB4ZmY7IGkrKykge1xuICAgIGV4cG9ydHMuVVJMX0NIQVIucHVzaChpKTtcbn1cbmV4cG9ydHMuSEVYID0gZXhwb3J0cy5OVU0uY29uY2F0KFsnYScsICdiJywgJ2MnLCAnZCcsICdlJywgJ2YnLCAnQScsICdCJywgJ0MnLCAnRCcsICdFJywgJ0YnXSk7XG4vKiBUb2tlbnMgYXMgZGVmaW5lZCBieSByZmMgMjYxNi4gQWxzbyBsb3dlcmNhc2VzIHRoZW0uXG4gKiAgICAgICAgdG9rZW4gICAgICAgPSAxKjxhbnkgQ0hBUiBleGNlcHQgQ1RMcyBvciBzZXBhcmF0b3JzPlxuICogICAgIHNlcGFyYXRvcnMgICAgID0gXCIoXCIgfCBcIilcIiB8IFwiPFwiIHwgXCI+XCIgfCBcIkBcIlxuICogICAgICAgICAgICAgICAgICAgIHwgXCIsXCIgfCBcIjtcIiB8IFwiOlwiIHwgXCJcXFwiIHwgPFwiPlxuICogICAgICAgICAgICAgICAgICAgIHwgXCIvXCIgfCBcIltcIiB8IFwiXVwiIHwgXCI/XCIgfCBcIj1cIlxuICogICAgICAgICAgICAgICAgICAgIHwgXCJ7XCIgfCBcIn1cIiB8IFNQIHwgSFRcbiAqL1xuZXhwb3J0cy5TVFJJQ1RfVE9LRU4gPSBbXG4gICAgJyEnLCAnIycsICckJywgJyUnLCAnJicsICdcXCcnLFxuICAgICcqJywgJysnLCAnLScsICcuJyxcbiAgICAnXicsICdfJywgJ2AnLFxuICAgICd8JywgJ34nLFxuXS5jb25jYXQoZXhwb3J0cy5BTFBIQU5VTSk7XG5leHBvcnRzLlRPS0VOID0gZXhwb3J0cy5TVFJJQ1RfVE9LRU4uY29uY2F0KFsnICddKTtcbi8qXG4gKiBWZXJpZnkgdGhhdCBhIGNoYXIgaXMgYSB2YWxpZCB2aXNpYmxlIChwcmludGFibGUpIFVTLUFTQ0lJXG4gKiBjaGFyYWN0ZXIgb3IgJXg4MC1GRlxuICovXG5leHBvcnRzLkhFQURFUl9DSEFSUyA9IFsnXFx0J107XG5mb3IgKGxldCBpID0gMzI7IGkgPD0gMjU1OyBpKyspIHtcbiAgICBpZiAoaSAhPT0gMTI3KSB7XG4gICAgICAgIGV4cG9ydHMuSEVBREVSX0NIQVJTLnB1c2goaSk7XG4gICAgfVxufVxuLy8gJywnID0gXFx4NDRcbmV4cG9ydHMuQ09OTkVDVElPTl9UT0tFTl9DSEFSUyA9IGV4cG9ydHMuSEVBREVSX0NIQVJTLmZpbHRlcigoYykgPT4gYyAhPT0gNDQpO1xuZXhwb3J0cy5NQUpPUiA9IGV4cG9ydHMuTlVNX01BUDtcbmV4cG9ydHMuTUlOT1IgPSBleHBvcnRzLk1BSk9SO1xudmFyIEhFQURFUl9TVEFURTtcbihmdW5jdGlvbiAoSEVBREVSX1NUQVRFKSB7XG4gICAgSEVBREVSX1NUQVRFW0hFQURFUl9TVEFURVtcIkdFTkVSQUxcIl0gPSAwXSA9IFwiR0VORVJBTFwiO1xuICAgIEhFQURFUl9TVEFURVtIRUFERVJfU1RBVEVbXCJDT05ORUNUSU9OXCJdID0gMV0gPSBcIkNPTk5FQ1RJT05cIjtcbiAgICBIRUFERVJfU1RBVEVbSEVBREVSX1NUQVRFW1wiQ09OVEVOVF9MRU5HVEhcIl0gPSAyXSA9IFwiQ09OVEVOVF9MRU5HVEhcIjtcbiAgICBIRUFERVJfU1RBVEVbSEVBREVSX1NUQVRFW1wiVFJBTlNGRVJfRU5DT0RJTkdcIl0gPSAzXSA9IFwiVFJBTlNGRVJfRU5DT0RJTkdcIjtcbiAgICBIRUFERVJfU1RBVEVbSEVBREVSX1NUQVRFW1wiVVBHUkFERVwiXSA9IDRdID0gXCJVUEdSQURFXCI7XG4gICAgSEVBREVSX1NUQVRFW0hFQURFUl9TVEFURVtcIkNPTk5FQ1RJT05fS0VFUF9BTElWRVwiXSA9IDVdID0gXCJDT05ORUNUSU9OX0tFRVBfQUxJVkVcIjtcbiAgICBIRUFERVJfU1RBVEVbSEVBREVSX1NUQVRFW1wiQ09OTkVDVElPTl9DTE9TRVwiXSA9IDZdID0gXCJDT05ORUNUSU9OX0NMT1NFXCI7XG4gICAgSEVBREVSX1NUQVRFW0hFQURFUl9TVEFURVtcIkNPTk5FQ1RJT05fVVBHUkFERVwiXSA9IDddID0gXCJDT05ORUNUSU9OX1VQR1JBREVcIjtcbiAgICBIRUFERVJfU1RBVEVbSEVBREVSX1NUQVRFW1wiVFJBTlNGRVJfRU5DT0RJTkdfQ0hVTktFRFwiXSA9IDhdID0gXCJUUkFOU0ZFUl9FTkNPRElOR19DSFVOS0VEXCI7XG59KShIRUFERVJfU1RBVEUgPSBleHBvcnRzLkhFQURFUl9TVEFURSB8fCAoZXhwb3J0cy5IRUFERVJfU1RBVEUgPSB7fSkpO1xuZXhwb3J0cy5TUEVDSUFMX0hFQURFUlMgPSB7XG4gICAgJ2Nvbm5lY3Rpb24nOiBIRUFERVJfU1RBVEUuQ09OTkVDVElPTixcbiAgICAnY29udGVudC1sZW5ndGgnOiBIRUFERVJfU1RBVEUuQ09OVEVOVF9MRU5HVEgsXG4gICAgJ3Byb3h5LWNvbm5lY3Rpb24nOiBIRUFERVJfU1RBVEUuQ09OTkVDVElPTixcbiAgICAndHJhbnNmZXItZW5jb2RpbmcnOiBIRUFERVJfU1RBVEUuVFJBTlNGRVJfRU5DT0RJTkcsXG4gICAgJ3VwZ3JhZGUnOiBIRUFERVJfU1RBVEUuVVBHUkFERSxcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25zdGFudHMuanMubWFwIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGtCb2R5VXNlZCB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCBFRSA9IHJlcXVpcmUoJ2V2ZW50cycpXG5cbmNvbnN0IHJlZGlyZWN0YWJsZVN0YXR1c0NvZGVzID0gWzMwMCwgMzAxLCAzMDIsIDMwMywgMzA3LCAzMDhdXG5cbmNvbnN0IGtCb2R5ID0gU3ltYm9sKCdib2R5JylcblxuY2xhc3MgQm9keUFzeW5jSXRlcmFibGUge1xuICBjb25zdHJ1Y3RvciAoYm9keSkge1xuICAgIHRoaXNba0JvZHldID0gYm9keVxuICAgIHRoaXNba0JvZHlVc2VkXSA9IGZhbHNlXG4gIH1cblxuICBhc3luYyAqIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gKCkge1xuICAgIGFzc2VydCghdGhpc1trQm9keVVzZWRdLCAnZGlzdHVyYmVkJylcbiAgICB0aGlzW2tCb2R5VXNlZF0gPSB0cnVlXG4gICAgeWllbGQgKiB0aGlzW2tCb2R5XVxuICB9XG59XG5cbmNsYXNzIFJlZGlyZWN0SGFuZGxlciB7XG4gIGNvbnN0cnVjdG9yIChkaXNwYXRjaCwgbWF4UmVkaXJlY3Rpb25zLCBvcHRzLCBoYW5kbGVyKSB7XG4gICAgaWYgKG1heFJlZGlyZWN0aW9ucyAhPSBudWxsICYmICghTnVtYmVyLmlzSW50ZWdlcihtYXhSZWRpcmVjdGlvbnMpIHx8IG1heFJlZGlyZWN0aW9ucyA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ21heFJlZGlyZWN0aW9ucyBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJylcbiAgICB9XG5cbiAgICB1dGlsLnZhbGlkYXRlSGFuZGxlcihoYW5kbGVyLCBvcHRzLm1ldGhvZCwgb3B0cy51cGdyYWRlKVxuXG4gICAgdGhpcy5kaXNwYXRjaCA9IGRpc3BhdGNoXG4gICAgdGhpcy5sb2NhdGlvbiA9IG51bGxcbiAgICB0aGlzLmFib3J0ID0gbnVsbFxuICAgIHRoaXMub3B0cyA9IHsgLi4ub3B0cywgbWF4UmVkaXJlY3Rpb25zOiAwIH0gLy8gb3B0cyBtdXN0IGJlIGEgY29weVxuICAgIHRoaXMubWF4UmVkaXJlY3Rpb25zID0gbWF4UmVkaXJlY3Rpb25zXG4gICAgdGhpcy5oYW5kbGVyID0gaGFuZGxlclxuICAgIHRoaXMuaGlzdG9yeSA9IFtdXG5cbiAgICBpZiAodXRpbC5pc1N0cmVhbSh0aGlzLm9wdHMuYm9keSkpIHtcbiAgICAgIC8vIFRPRE8gKGZpeCk6IFByb3ZpZGUgc29tZSB3YXkgZm9yIHRoZSB1c2VyIHRvIGNhY2hlIHRoZSBmaWxlIHRvIGUuZy4gL3RtcFxuICAgICAgLy8gc28gdGhhdCBpdCBjYW4gYmUgZGlzcGF0Y2hlZCBhZ2Fpbj9cbiAgICAgIC8vIFRPRE8gKGZpeCk6IERvIHdlIG5lZWQgMTAwLWV4cGVjdCBzdXBwb3J0IHRvIHByb3ZpZGUgYSB3YXkgdG8gZG8gdGhpcyBwcm9wZXJseT9cbiAgICAgIGlmICh1dGlsLmJvZHlMZW5ndGgodGhpcy5vcHRzLmJvZHkpID09PSAwKSB7XG4gICAgICAgIHRoaXMub3B0cy5ib2R5XG4gICAgICAgICAgLm9uKCdkYXRhJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKVxuICAgICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRzLmJvZHkucmVhZGFibGVEaWRSZWFkICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgdGhpcy5vcHRzLmJvZHlba0JvZHlVc2VkXSA9IGZhbHNlXG4gICAgICAgIEVFLnByb3RvdHlwZS5vbi5jYWxsKHRoaXMub3B0cy5ib2R5LCAnZGF0YScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB0aGlzW2tCb2R5VXNlZF0gPSB0cnVlXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdHMuYm9keSAmJiB0eXBlb2YgdGhpcy5vcHRzLmJvZHkucGlwZVRvID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBUT0RPIChmaXgpOiBXZSBjYW4ndCBhY2Nlc3MgUmVhZGFibGVTdHJlYW0gaW50ZXJuYWwgc3RhdGVcbiAgICAgIC8vIHRvIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCBpdCBoYXMgYmVlbiBkaXN0dXJiZWQuIFRoaXMgaXMganVzdFxuICAgICAgLy8gYSB3b3JrYXJvdW5kLlxuICAgICAgdGhpcy5vcHRzLmJvZHkgPSBuZXcgQm9keUFzeW5jSXRlcmFibGUodGhpcy5vcHRzLmJvZHkpXG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMub3B0cy5ib2R5ICYmXG4gICAgICB0eXBlb2YgdGhpcy5vcHRzLmJvZHkgIT09ICdzdHJpbmcnICYmXG4gICAgICAhQXJyYXlCdWZmZXIuaXNWaWV3KHRoaXMub3B0cy5ib2R5KSAmJlxuICAgICAgdXRpbC5pc0l0ZXJhYmxlKHRoaXMub3B0cy5ib2R5KVxuICAgICkge1xuICAgICAgLy8gVE9ETzogU2hvdWxkIHdlIGFsbG93IHJlLXVzaW5nIGl0ZXJhYmxlIGlmICF0aGlzLm9wdHMuaWRlbXBvdGVudFxuICAgICAgLy8gb3IgdGhyb3VnaCBzb21lIG90aGVyIGZsYWc/XG4gICAgICB0aGlzLm9wdHMuYm9keSA9IG5ldyBCb2R5QXN5bmNJdGVyYWJsZSh0aGlzLm9wdHMuYm9keSlcbiAgICB9XG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0KSB7XG4gICAgdGhpcy5hYm9ydCA9IGFib3J0XG4gICAgdGhpcy5oYW5kbGVyLm9uQ29ubmVjdChhYm9ydCwgeyBoaXN0b3J5OiB0aGlzLmhpc3RvcnkgfSlcbiAgfVxuXG4gIG9uVXBncmFkZSAoc3RhdHVzQ29kZSwgaGVhZGVycywgc29ja2V0KSB7XG4gICAgdGhpcy5oYW5kbGVyLm9uVXBncmFkZShzdGF0dXNDb2RlLCBoZWFkZXJzLCBzb2NrZXQpXG4gIH1cblxuICBvbkVycm9yIChlcnJvcikge1xuICAgIHRoaXMuaGFuZGxlci5vbkVycm9yKGVycm9yKVxuICB9XG5cbiAgb25IZWFkZXJzIChzdGF0dXNDb2RlLCBoZWFkZXJzLCByZXN1bWUsIHN0YXR1c1RleHQpIHtcbiAgICB0aGlzLmxvY2F0aW9uID0gdGhpcy5oaXN0b3J5Lmxlbmd0aCA+PSB0aGlzLm1heFJlZGlyZWN0aW9ucyB8fCB1dGlsLmlzRGlzdHVyYmVkKHRoaXMub3B0cy5ib2R5KVxuICAgICAgPyBudWxsXG4gICAgICA6IHBhcnNlTG9jYXRpb24oc3RhdHVzQ29kZSwgaGVhZGVycylcblxuICAgIGlmICh0aGlzLm9wdHMub3JpZ2luKSB7XG4gICAgICB0aGlzLmhpc3RvcnkucHVzaChuZXcgVVJMKHRoaXMub3B0cy5wYXRoLCB0aGlzLm9wdHMub3JpZ2luKSlcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMubG9jYXRpb24pIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25IZWFkZXJzKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHJlc3VtZSwgc3RhdHVzVGV4dClcbiAgICB9XG5cbiAgICBjb25zdCB7IG9yaWdpbiwgcGF0aG5hbWUsIHNlYXJjaCB9ID0gdXRpbC5wYXJzZVVSTChuZXcgVVJMKHRoaXMubG9jYXRpb24sIHRoaXMub3B0cy5vcmlnaW4gJiYgbmV3IFVSTCh0aGlzLm9wdHMucGF0aCwgdGhpcy5vcHRzLm9yaWdpbikpKVxuICAgIGNvbnN0IHBhdGggPSBzZWFyY2ggPyBgJHtwYXRobmFtZX0ke3NlYXJjaH1gIDogcGF0aG5hbWVcblxuICAgIC8vIFJlbW92ZSBoZWFkZXJzIHJlZmVycmluZyB0byB0aGUgb3JpZ2luYWwgVVJMLlxuICAgIC8vIEJ5IGRlZmF1bHQgaXQgaXMgSG9zdCBvbmx5LCB1bmxlc3MgaXQncyBhIDMwMyAoc2VlIGJlbG93KSwgd2hpY2ggcmVtb3ZlcyBhbHNvIGFsbCBDb250ZW50LSogaGVhZGVycy5cbiAgICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTYuNFxuICAgIHRoaXMub3B0cy5oZWFkZXJzID0gY2xlYW5SZXF1ZXN0SGVhZGVycyh0aGlzLm9wdHMuaGVhZGVycywgc3RhdHVzQ29kZSA9PT0gMzAzLCB0aGlzLm9wdHMub3JpZ2luICE9PSBvcmlnaW4pXG4gICAgdGhpcy5vcHRzLnBhdGggPSBwYXRoXG4gICAgdGhpcy5vcHRzLm9yaWdpbiA9IG9yaWdpblxuICAgIHRoaXMub3B0cy5tYXhSZWRpcmVjdGlvbnMgPSAwXG4gICAgdGhpcy5vcHRzLnF1ZXJ5ID0gbnVsbFxuXG4gICAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi02LjQuNFxuICAgIC8vIEluIGNhc2Ugb2YgSFRUUCAzMDMsIGFsd2F5cyByZXBsYWNlIG1ldGhvZCB0byBiZSBlaXRoZXIgSEVBRCBvciBHRVRcbiAgICBpZiAoc3RhdHVzQ29kZSA9PT0gMzAzICYmIHRoaXMub3B0cy5tZXRob2QgIT09ICdIRUFEJykge1xuICAgICAgdGhpcy5vcHRzLm1ldGhvZCA9ICdHRVQnXG4gICAgICB0aGlzLm9wdHMuYm9keSA9IG51bGxcbiAgICB9XG4gIH1cblxuICBvbkRhdGEgKGNodW5rKSB7XG4gICAgaWYgKHRoaXMubG9jYXRpb24pIHtcbiAgICAgIC8qXG4gICAgICAgIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNi40XG5cbiAgICAgICAgVExEUjogdW5kaWNpIGFsd2F5cyBpZ25vcmVzIDN4eCByZXNwb25zZSBib2RpZXMuXG5cbiAgICAgICAgUmVkaXJlY3Rpb24gaXMgdXNlZCB0byBzZXJ2ZSB0aGUgcmVxdWVzdGVkIHJlc291cmNlIGZyb20gYW5vdGhlciBVUkwsIHNvIGl0IGlzIGFzc3VtZXMgdGhhdFxuICAgICAgICBubyBib2R5IGlzIGdlbmVyYXRlZCAoYW5kIHRodXMgY2FuIGJlIGlnbm9yZWQpLiBFdmVuIHRob3VnaCBnZW5lcmF0aW5nIGEgYm9keSBpcyBub3QgcHJvaGliaXRlZC5cblxuICAgICAgICBGb3Igc3RhdHVzIDMwMSwgMzAyLCAzMDMsIDMwNyBhbmQgMzA4ICh0aGUgbGF0dGVyIGZyb20gUkZDIDcyMzgpLCB0aGUgc3BlY3MgbWVudGlvbiB0aGF0IHRoZSBib2R5IHVzdWFsbHlcbiAgICAgICAgKHdoaWNoIG1lYW5zIGl0J3Mgb3B0aW9uYWwgYW5kIG5vdCBtYW5kYXRlZCkgY29udGFpbiBqdXN0IGFuIGh5cGVybGluayB0byB0aGUgdmFsdWUgb2ZcbiAgICAgICAgdGhlIExvY2F0aW9uIHJlc3BvbnNlIGhlYWRlciwgc28gdGhlIGJvZHkgY2FuIGJlIGlnbm9yZWQgc2FmZWx5LlxuXG4gICAgICAgIEZvciBzdGF0dXMgMzAwLCB3aGljaCBpcyBcIk11bHRpcGxlIENob2ljZXNcIiwgdGhlIHNwZWMgbWVudGlvbnMgYm90aCBnZW5lcmF0aW5nIGEgTG9jYXRpb25cbiAgICAgICAgcmVzcG9uc2UgaGVhZGVyIEFORCBhIHJlc3BvbnNlIGJvZHkgd2l0aCB0aGUgb3RoZXIgcG9zc2libGUgbG9jYXRpb24gdG8gZm9sbG93LlxuICAgICAgICBTaW5jZSB0aGUgc3BlYyBleHBsaWNpdGlseSBjaG9vc2VzIG5vdCB0byBzcGVjaWZ5IGEgZm9ybWF0IGZvciBzdWNoIGJvZHkgYW5kIGxlYXZlIGl0IHRvXG4gICAgICAgIHNlcnZlcnMgYW5kIGJyb3dzZXJzIGltcGxlbWVudG9ycywgd2UgaWdub3JlIHRoZSBib2R5IGFzIHRoZXJlIGlzIG5vIHNwZWNpZmllZCB3YXkgdG8gZXZlbnR1YWxseSBwYXJzZSBpdC5cbiAgICAgICovXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25EYXRhKGNodW5rKVxuICAgIH1cbiAgfVxuXG4gIG9uQ29tcGxldGUgKHRyYWlsZXJzKSB7XG4gICAgaWYgKHRoaXMubG9jYXRpb24pIHtcbiAgICAgIC8qXG4gICAgICAgIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNi40XG5cbiAgICAgICAgVExEUjogdW5kaWNpIGFsd2F5cyBpZ25vcmVzIDN4eCByZXNwb25zZSB0cmFpbGVycyBhcyB0aGV5IGFyZSBub3QgZXhwZWN0ZWQgaW4gY2FzZSBvZiByZWRpcmVjdGlvbnNcbiAgICAgICAgYW5kIG5laXRoZXIgYXJlIHVzZWZ1bCBpZiBwcmVzZW50LlxuXG4gICAgICAgIFNlZSBjb21tZW50IG9uIG9uRGF0YSBtZXRob2QgYWJvdmUgZm9yIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb25zLlxuICAgICAgKi9cblxuICAgICAgdGhpcy5sb2NhdGlvbiA9IG51bGxcbiAgICAgIHRoaXMuYWJvcnQgPSBudWxsXG5cbiAgICAgIHRoaXMuZGlzcGF0Y2godGhpcy5vcHRzLCB0aGlzKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhhbmRsZXIub25Db21wbGV0ZSh0cmFpbGVycylcbiAgICB9XG4gIH1cblxuICBvbkJvZHlTZW50IChjaHVuaykge1xuICAgIGlmICh0aGlzLmhhbmRsZXIub25Cb2R5U2VudCkge1xuICAgICAgdGhpcy5oYW5kbGVyLm9uQm9keVNlbnQoY2h1bmspXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlTG9jYXRpb24gKHN0YXR1c0NvZGUsIGhlYWRlcnMpIHtcbiAgaWYgKHJlZGlyZWN0YWJsZVN0YXR1c0NvZGVzLmluZGV4T2Yoc3RhdHVzQ29kZSkgPT09IC0xKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaGVhZGVycy5sZW5ndGg7IGkgKz0gMikge1xuICAgIGlmIChoZWFkZXJzW2ldLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT0gJ2xvY2F0aW9uJykge1xuICAgICAgcmV0dXJuIGhlYWRlcnNbaSArIDFdXG4gICAgfVxuICB9XG59XG5cbi8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNi40LjRcbmZ1bmN0aW9uIHNob3VsZFJlbW92ZUhlYWRlciAoaGVhZGVyLCByZW1vdmVDb250ZW50LCB1bmtub3duT3JpZ2luKSB7XG4gIGlmIChoZWFkZXIubGVuZ3RoID09PSA0KSB7XG4gICAgcmV0dXJuIHV0aWwuaGVhZGVyTmFtZVRvU3RyaW5nKGhlYWRlcikgPT09ICdob3N0J1xuICB9XG4gIGlmIChyZW1vdmVDb250ZW50ICYmIHV0aWwuaGVhZGVyTmFtZVRvU3RyaW5nKGhlYWRlcikuc3RhcnRzV2l0aCgnY29udGVudC0nKSkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgaWYgKHVua25vd25PcmlnaW4gJiYgKGhlYWRlci5sZW5ndGggPT09IDEzIHx8IGhlYWRlci5sZW5ndGggPT09IDYgfHwgaGVhZGVyLmxlbmd0aCA9PT0gMTkpKSB7XG4gICAgY29uc3QgbmFtZSA9IHV0aWwuaGVhZGVyTmFtZVRvU3RyaW5nKGhlYWRlcilcbiAgICByZXR1cm4gbmFtZSA9PT0gJ2F1dGhvcml6YXRpb24nIHx8IG5hbWUgPT09ICdjb29raWUnIHx8IG5hbWUgPT09ICdwcm94eS1hdXRob3JpemF0aW9uJ1xuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG4vLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTYuNFxuZnVuY3Rpb24gY2xlYW5SZXF1ZXN0SGVhZGVycyAoaGVhZGVycywgcmVtb3ZlQ29udGVudCwgdW5rbm93bk9yaWdpbikge1xuICBjb25zdCByZXQgPSBbXVxuICBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzKSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGVhZGVycy5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgaWYgKCFzaG91bGRSZW1vdmVIZWFkZXIoaGVhZGVyc1tpXSwgcmVtb3ZlQ29udGVudCwgdW5rbm93bk9yaWdpbikpIHtcbiAgICAgICAgcmV0LnB1c2goaGVhZGVyc1tpXSwgaGVhZGVyc1tpICsgMV0pXG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKGhlYWRlcnMgJiYgdHlwZW9mIGhlYWRlcnMgPT09ICdvYmplY3QnKSB7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoaGVhZGVycykpIHtcbiAgICAgIGlmICghc2hvdWxkUmVtb3ZlSGVhZGVyKGtleSwgcmVtb3ZlQ29udGVudCwgdW5rbm93bk9yaWdpbikpIHtcbiAgICAgICAgcmV0LnB1c2goa2V5LCBoZWFkZXJzW2tleV0pXG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGFzc2VydChoZWFkZXJzID09IG51bGwsICdoZWFkZXJzIG11c3QgYmUgYW4gb2JqZWN0IG9yIGFuIGFycmF5JylcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUmVkaXJlY3RIYW5kbGVyXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBSZWRpcmVjdEhhbmRsZXIgPSByZXF1aXJlKCcuLi9oYW5kbGVyL1JlZGlyZWN0SGFuZGxlcicpXG5cbmZ1bmN0aW9uIGNyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3IgKHsgbWF4UmVkaXJlY3Rpb25zOiBkZWZhdWx0TWF4UmVkaXJlY3Rpb25zIH0pIHtcbiAgcmV0dXJuIChkaXNwYXRjaCkgPT4ge1xuICAgIHJldHVybiBmdW5jdGlvbiBJbnRlcmNlcHQgKG9wdHMsIGhhbmRsZXIpIHtcbiAgICAgIGNvbnN0IHsgbWF4UmVkaXJlY3Rpb25zID0gZGVmYXVsdE1heFJlZGlyZWN0aW9ucyB9ID0gb3B0c1xuXG4gICAgICBpZiAoIW1heFJlZGlyZWN0aW9ucykge1xuICAgICAgICByZXR1cm4gZGlzcGF0Y2gob3B0cywgaGFuZGxlcilcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVkaXJlY3RIYW5kbGVyID0gbmV3IFJlZGlyZWN0SGFuZGxlcihkaXNwYXRjaCwgbWF4UmVkaXJlY3Rpb25zLCBvcHRzLCBoYW5kbGVyKVxuICAgICAgb3B0cyA9IHsgLi4ub3B0cywgbWF4UmVkaXJlY3Rpb25zOiAwIH0gLy8gU3RvcCBzdWIgZGlzcGF0Y2hlciBmcm9tIGFsc28gcmVkaXJlY3RpbmcuXG4gICAgICByZXR1cm4gZGlzcGF0Y2gob3B0cywgcmVkaXJlY3RIYW5kbGVyKVxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3JcbiIsCiAgICAibW9kdWxlLmV4cG9ydHMgPSAnQUdGemJRRUFBQUFCTUFoZ0FYOEJmMkFEZjM5L0FYOWdCSDkvZjM4QmYyQUFBR0FEZjM5L0FHQUJmd0JnQW45L0FHQUdmMzkvZjM5L0FBTExBUWdEWlc1MkdIZGhjMjFmYjI1ZmFHVmhaR1Z5YzE5amIyMXdiR1YwWlFBQ0EyVnVkaFYzWVhOdFgyOXVYMjFsYzNOaFoyVmZZbVZuYVc0QUFBTmxibllMZDJGemJWOXZibDkxY213QUFRTmxibllPZDJGemJWOXZibDl6ZEdGMGRYTUFBUU5sYm5ZVWQyRnpiVjl2Ymw5b1pXRmtaWEpmWm1sbGJHUUFBUU5sYm5ZVWQyRnpiVjl2Ymw5b1pXRmtaWEpmZG1Gc2RXVUFBUU5sYm5ZTWQyRnpiVjl2Ymw5aWIyUjVBQUVEWlc1MkdIZGhjMjFmYjI1ZmJXVnpjMkZuWlY5amIyMXdiR1YwWlFBQUEwWkZBd01FQUFBRkFBQUFBQUFBQlFFRkFBVUZCUUFBQmdBQUFBQUdCZ1lHQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFCQUFBQkFRY0FBQVVGQXdBQkJBVUJjQUVTRWdVREFRQUNCZ2dCZndGQmdOUUVDd2ZSQlNJR2JXVnRiM0o1QWdBTFgybHVhWFJwWVd4cGVtVUFDUmxmWDJsdVpHbHlaV04wWDJaMWJtTjBhVzl1WDNSaFlteGxBUUFMYkd4b2RIUndYMmx1YVhRQUNoaHNiR2gwZEhCZmMyaHZkV3hrWDJ0bFpYQmZZV3hwZG1VQVFReHNiR2gwZEhCZllXeHNiMk1BREFadFlXeHNiMk1BUmd0c2JHaDBkSEJmWm5KbFpRQU5CR1p5WldVQVNBOXNiR2gwZEhCZloyVjBYM1I1Y0dVQURoVnNiR2gwZEhCZloyVjBYMmgwZEhCZmJXRnFiM0lBRHhWc2JHaDBkSEJmWjJWMFgyaDBkSEJmYldsdWIzSUFFQkZzYkdoMGRIQmZaMlYwWDIxbGRHaHZaQUFSRm14c2FIUjBjRjluWlhSZmMzUmhkSFZ6WDJOdlpHVUFFaEpzYkdoMGRIQmZaMlYwWDNWd1ozSmhaR1VBRXd4c2JHaDBkSEJmY21WelpYUUFGQTVzYkdoMGRIQmZaWGhsWTNWMFpRQVZGR3hzYUhSMGNGOXpaWFIwYVc1bmMxOXBibWwwQUJZTmJHeG9kSFJ3WDJacGJtbHphQUFYREd4c2FIUjBjRjl3WVhWelpRQVlEV3hzYUhSMGNGOXlaWE4xYldVQUdSdHNiR2gwZEhCZmNtVnpkVzFsWDJGbWRHVnlYM1Z3WjNKaFpHVUFHaEJzYkdoMGRIQmZaMlYwWDJWeWNtNXZBQnNYYkd4b2RIUndYMmRsZEY5bGNuSnZjbDl5WldGemIyNEFIQmRzYkdoMGRIQmZjMlYwWDJWeWNtOXlYM0psWVhOdmJnQWRGR3hzYUhSMGNGOW5aWFJmWlhKeWIzSmZjRzl6QUI0UmJHeG9kSFJ3WDJWeWNtNXZYMjVoYldVQUh4SnNiR2gwZEhCZmJXVjBhRzlrWDI1aGJXVUFJQkpzYkdoMGRIQmZjM1JoZEhWelgyNWhiV1VBSVJwc2JHaDBkSEJmYzJWMFgyeGxibWxsYm5SZmFHVmhaR1Z5Y3dBaUlXeHNhSFIwY0Y5elpYUmZiR1Z1YVdWdWRGOWphSFZ1YTJWa1gyeGxibWQwYUFBakhXeHNhSFIwY0Y5elpYUmZiR1Z1YVdWdWRGOXJaV1Z3WDJGc2FYWmxBQ1FrYkd4b2RIUndYM05sZEY5c1pXNXBaVzUwWDNSeVlXNXpabVZ5WDJWdVkyOWthVzVuQUNVWWJHeG9kSFJ3WDIxbGMzTmhaMlZmYm1WbFpITmZaVzltQUQ4SkZ3RUFRUUVMRVFFQ0F3UUZDd1lITlRrM01TOHRKeXNwQ3NMZ0FrVUNBQXNJQUJDSWdJQ0FBQXNaQUNBQUVNS0FnSUFBR2lBQUlBSTJBamdnQUNBQk9nQW9DeHdBSUFBZ0FDOEJNaUFBTFFBdUlBQVF3WUNBZ0FBUWdJQ0FnQUFMS2dFQmYwSEFBQkRHZ0lDQUFDSUJFTUtBZ0lBQUdpQUJRWUNJZ0lBQU5nSTRJQUVnQURvQUtDQUJDd29BSUFBUXlJQ0FnQUFMQndBZ0FDMEFLQXNIQUNBQUxRQXFDd2NBSUFBdEFDc0xCd0FnQUMwQUtRc0hBQ0FBTHdFeUN3Y0FJQUF0QUM0TFJRRUVmeUFBS0FJWUlRRWdBQzBBTFNFQ0lBQXRBQ2doQXlBQUtBSTRJUVFnQUJEQ2dJQ0FBQm9nQUNBRU5nSTRJQUFnQXpvQUtDQUFJQUk2QUMwZ0FDQUJOZ0lZQ3hFQUlBQWdBU0FCSUFKcUVNT0FnSUFBQ3hBQUlBQkJBRUhjQUJETWdJQ0FBQm9MWndFQmYwRUFJUUVDUUNBQUtBSU1EUUFDUUFKQUFrQUNRQ0FBTFFBdkRnTUJBQU1DQ3lBQUtBSTRJZ0ZGRFFBZ0FTZ0NMQ0lCUlEwQUlBQWdBUkdBZ0lDQUFBQWlBUTBEQzBFQUR3c1F5b0NBZ0FBQUN5QUFRY09XZ0lBQU5nSVFRUTRoQVFzZ0FRc2VBQUpBSUFBb0Fnd05BQ0FBUWRHYmdJQUFOZ0lRSUFCQkZUWUNEQXNMRmdBQ1FDQUFLQUlNUVJWSERRQWdBRUVBTmdJTUN3c1dBQUpBSUFBb0FneEJGa2NOQUNBQVFRQTJBZ3dMQ3djQUlBQW9BZ3dMQndBZ0FDZ0NFQXNKQUNBQUlBRTJBaEFMQndBZ0FDZ0NGQXNpQUFKQUlBQkJKRWtOQUJES2dJQ0FBQUFMSUFCQkFuUkJvTE9BZ0FCcUtBSUFDeUlBQWtBZ0FFRXVTUTBBRU1xQWdJQUFBQXNnQUVFQ2RFR3d0SUNBQUdvb0FnQUw3Z3NCQVg5QjY2aUFnQUFoQVFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUlBQkJuSDlxRHZRRFkySUFBV0ZoWVdGaFlRSURCQVZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaEJnY0lDUW9MREEwT0QyRmhZV0ZoRUdGaFlXRmhZV0ZoWVdGaEVXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlSSVRGQlVXRnhnWkdodGhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhIQjBlSHlBaElpTWtKU1luS0NrcUt5d3RMaTh3TVRJek5EVTJZVGM0T1RwaFlXRmhZV0ZoWVR0aFlXRThZV0ZoWVQwK1AyRmhZV0ZoWVdGaFFHRmhRV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVVKRFJFVkdSMGhKU2t0TVRVNVBVRkZTVTJGaFlXRmhZV0ZoVkZWV1YxaFpXbHRoWEYxaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmVZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhYMkJoQzBIaHA0Q0FBQThMUWFTaGdJQUFEd3RCeTZ5QWdBQVBDMEgrc1lDQUFBOExRY0NrZ0lBQUR3dEJxNlNBZ0FBUEMwR05xSUNBQUE4TFFlS21nSUFBRHd0QmdMQ0FnQUFQQzBHNXI0Q0FBQThMUWRla2dJQUFEd3RCNzUrQWdBQVBDMEhobjRDQUFBOExRZnFmZ0lBQUR3dEI4cUNBZ0FBUEMwR29yNENBQUE4TFFhNnlnSUFBRHd0QmlMQ0FnQUFQQzBIc3A0Q0FBQThMUVlLaWdJQUFEd3RCanAyQWdBQVBDMEhRcm9DQUFBOExRY3FqZ0lBQUR3dEJ4YktBZ0FBUEMwSGZuSUNBQUE4TFFkS2NnSUFBRHd0QnhLQ0FnQUFQQzBIWG9JQ0FBQThMUWFLZmdJQUFEd3RCN2E2QWdBQVBDMEdyc0lDQUFBOExRZFNsZ0lBQUR3dEJ6SzZBZ0FBUEMwSDZyb0NBQUE4TFFmeXJnSUFBRHd0QjByQ0FnQUFQQzBIeG5ZQ0FBQThMUWJ1Z2dJQUFEd3RCOTZ1QWdBQVBDMEdRc1lDQUFBOExRZGV4Z0lBQUR3dEJvcTJBZ0FBUEMwSFVwNENBQUE4TFFlQ3JnSUFBRHd0Qm42eUFnQUFQQzBIcnNZQ0FBQThMUWRXZmdJQUFEd3RCeXJHQWdBQVBDMEhlcFlDQUFBOExRZFNlZ0lBQUR3dEI5SnlBZ0FBUEMwR25zb0NBQUE4TFFiR2RnSUFBRHd0Qm9KMkFnQUFQQzBHNXNZQ0FBQThMUWJ5d2dJQUFEd3RCa3FHQWdBQVBDMEd6cG9DQUFBOExRZW1zZ0lBQUR3dEJySjZBZ0FBUEMwSFVxNENBQUE4TFFmZW1nSUFBRHd0QmdLYUFnQUFQQzBHd29ZQ0FBQThMUWY2ZWdJQUFEd3RCamFPQWdBQVBDMEdKcllDQUFBOExRZmVpZ0lBQUR3dEJvTEdBZ0FBUEMwR3VuNENBQUE4TFFjYWxnSUFBRHd0QjZKNkFnQUFQQzBHVG9vQ0FBQThMUWNLdmdJQUFEd3RCdzUyQWdBQVBDMEdMcklDQUFBOExRZUdkZ0lBQUR3dEJqYStBZ0FBUEMwSHFvWUNBQUE4TFFiU3RnSUFBRHd0QjBxK0FnQUFQQzBIZnNvQ0FBQThMUWRLeWdJQUFEd3RCOExDQWdBQVBDMEdwb29DQUFBOExRZm1qZ0lBQUR3dEJtWjZBZ0FBUEMwRzFySUNBQUE4TFFadXdnSUFBRHd0QmtyS0FnQUFQQzBHMnE0Q0FBQThMUWNLaWdJQUFEd3RCK0xLQWdBQVBDMEdlcFlDQUFBOExRZENpZ0lBQUR3dEJ1cDZBZ0FBUEMwR0Jub0NBQUE4TEVNcUFnSUFBQUF0QjFxR0FnQUFoQVFzZ0FRc1dBQ0FBSUFBdEFDMUIvZ0Z4SUFGQkFFZHlPZ0F0Q3hrQUlBQWdBQzBBTFVIOUFYRWdBVUVBUjBFQmRISTZBQzBMR1FBZ0FDQUFMUUF0UWZzQmNTQUJRUUJIUVFKMGNqb0FMUXNaQUNBQUlBQXRBQzFCOXdGeElBRkJBRWRCQTNSeU9nQXRDeTRCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FnQWlCRVVOQUNBQUlBUVJnSUNBZ0FBQUlRTUxJQU1MU1FFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NCQ0lFUlEwQUlBQWdBU0FDSUFGcklBUVJnWUNBZ0FBQUlnTkJmMGNOQUNBQVFjYVJnSUFBTmdJUVFSZ2hBd3NnQXdzdUFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUl3SWdSRkRRQWdBQ0FFRVlDQWdJQUFBQ0VEQ3lBREMwa0JBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWdnaUJFVU5BQ0FBSUFFZ0FpQUJheUFFRVlHQWdJQUFBQ0lEUVg5SERRQWdBRUgyaW9DQUFEWUNFRUVZSVFNTElBTUxMZ0VDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ05DSUVSUTBBSUFBZ0JCR0FnSUNBQUFBaEF3c2dBd3RKQVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSU1JZ1JGRFFBZ0FDQUJJQUlnQVdzZ0JCR0JnSUNBQUFBaUEwRi9SdzBBSUFCQjdacUFnQUEyQWhCQkdDRURDeUFEQ3k0QkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9BamdpQkVVTkFDQUFJQVFSZ0lDQWdBQUFJUU1MSUFNTFNRRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDRUNJRVJRMEFJQUFnQVNBQ0lBRnJJQVFSZ1lDQWdBQUFJZ05CZjBjTkFDQUFRWldRZ0lBQU5nSVFRUmdoQXdzZ0F3c3VBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FJOElnUkZEUUFnQUNBRUVZQ0FnSUFBQUNFREN5QURDMGtCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FoUWlCRVVOQUNBQUlBRWdBaUFCYXlBRUVZR0FnSUFBQUNJRFFYOUhEUUFnQUVHcW00Q0FBRFlDRUVFWUlRTUxJQU1MTGdFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NRQ0lFUlEwQUlBQWdCQkdBZ0lDQUFBQWhBd3NnQXd0SkFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUlZSWdSRkRRQWdBQ0FCSUFJZ0FXc2dCQkdCZ0lDQUFBQWlBMEYvUncwQUlBQkI3Wk9BZ0FBMkFoQkJHQ0VEQ3lBREN5NEJBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWtRaUJFVU5BQ0FBSUFRUmdJQ0FnQUFBSVFNTElBTUxMZ0VDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ0pDSUVSUTBBSUFBZ0JCR0FnSUNBQUFBaEF3c2dBd3N1QVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSXNJZ1JGRFFBZ0FDQUVFWUNBZ0lBQUFDRURDeUFEQzBrQkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9BaWdpQkVVTkFDQUFJQUVnQWlBQmF5QUVFWUdBZ0lBQUFDSURRWDlIRFFBZ0FFSDJpSUNBQURZQ0VFRVlJUU1MSUFNTExnRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDVUNJRVJRMEFJQUFnQkJHQWdJQ0FBQUFoQXdzZ0F3dEpBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FJY0lnUkZEUUFnQUNBQklBSWdBV3NnQkJHQmdJQ0FBQUFpQTBGL1J3MEFJQUJCd3BtQWdBQTJBaEJCR0NFREN5QURDeTRCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FrZ2lCRVVOQUNBQUlBUVJnSUNBZ0FBQUlRTUxJQU1MU1FFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NJQ0lFUlEwQUlBQWdBU0FDSUFGcklBUVJnWUNBZ0FBQUlnTkJmMGNOQUNBQVFaU1VnSUFBTmdJUVFSZ2hBd3NnQXdzdUFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUpNSWdSRkRRQWdBQ0FFRVlDQWdJQUFBQ0VEQ3lBREN5NEJBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWxRaUJFVU5BQ0FBSUFRUmdJQ0FnQUFBSVFNTElBTUxMZ0VDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ1dDSUVSUTBBSUFBZ0JCR0FnSUNBQUFBaEF3c2dBd3RGQVFGL0FrQUNRQ0FBTHdFd1FSUnhRUlJIRFFCQkFTRURJQUF0QUNoQkFVWU5BU0FBTHdFeVFlVUFSaUVEREFFTElBQXRBQ2xCQlVZaEF3c2dBQ0FET2dBdVFRQUwvZ0VCQTM5QkFTRURBa0FnQUM4Qk1DSUVRUWh4RFFBZ0FDa0RJRUlBVWlFREN3SkFBa0FnQUMwQUxrVU5BRUVCSVFVZ0FDMEFLVUVGUmcwQlFRRWhCU0FFUWNBQWNVVWdBM0ZCQVVjTkFRdEJBQ0VGSUFSQndBQnhEUUJCQWlFRklBUkIvLzhEY1NJRFFRaHhEUUFDUUNBRFFZQUVjVVVOQUFKQUlBQXRBQ2hCQVVjTkFDQUFMUUF0UVFweERRQkJCUThMUVFRUEN3SkFJQU5CSUhFTkFBSkFJQUF0QUNoQkFVWU5BQ0FBTHdFeVFmLy9BM0VpQUVHY2YycEI1QUJKRFFBZ0FFSE1BVVlOQUNBQVFiQUNSZzBBUVFRaEJTQUVRU2h4UlEwQ0lBTkJpQVJ4UVlBRVJnMENDMEVBRHd0QkFFRURJQUFwQXlCUUd5RUZDeUFGQzJJQkFuOUJBQ0VCQWtBZ0FDMEFLRUVCUmcwQUlBQXZBVEpCLy84RGNTSUNRWngvYWtIa0FFa05BQ0FDUWN3QlJnMEFJQUpCc0FKR0RRQWdBQzhCTUNJQVFjQUFjUTBBUVFFaEFTQUFRWWdFY1VHQUJFWU5BQ0FBUVNoeFJTRUJDeUFCQzZjQkFRTi9Ba0FDUUFKQUlBQXRBQ3BGRFFBZ0FDMEFLMFVOQUVFQUlRTWdBQzhCTUNJRVFRSnhSUTBCREFJTFFRQWhBeUFBTHdFd0lnUkJBWEZGRFFFTFFRRWhBeUFBTFFBb1FRRkdEUUFnQUM4Qk1rSC8vd054SWdWQm5IOXFRZVFBU1EwQUlBVkJ6QUZHRFFBZ0JVR3dBa1lOQUNBRVFjQUFjUTBBUVFBaEF5QUVRWWdFY1VHQUJFWU5BQ0FFUVNoeFFRQkhJUU1MSUFCQkFEc0JNQ0FBUVFBNkFDOGdBd3VaQVFFQ2Z3SkFBa0FDUUNBQUxRQXFSUTBBSUFBdEFDdEZEUUJCQUNFQklBQXZBVEFpQWtFQ2NVVU5BUXdDQzBFQUlRRWdBQzhCTUNJQ1FRRnhSUTBCQzBFQklRRWdBQzBBS0VFQlJnMEFJQUF2QVRKQi8vOERjU0lBUVp4L2FrSGtBRWtOQUNBQVFjd0JSZzBBSUFCQnNBSkdEUUFnQWtIQUFIRU5BRUVBSVFFZ0FrR0lCSEZCZ0FSR0RRQWdBa0VvY1VFQVJ5RUJDeUFCQzFrQUlBQkJHR3BDQURjREFDQUFRZ0EzQXdBZ0FFRTRha0lBTndNQUlBQkJNR3BDQURjREFDQUFRU2hxUWdBM0F3QWdBRUVnYWtJQU53TUFJQUJCRUdwQ0FEY0RBQ0FBUVFocVFnQTNBd0FnQUVIZEFUWUNIRUVBQzNzQkFYOENRQ0FBS0FJTUlnTU5BQUpBSUFBb0FnUkZEUUFnQUNBQk5nSUVDd0pBSUFBZ0FTQUNFTVNBZ0lBQUlnTU5BQ0FBS0FJTUR3c2dBQ0FETmdJY1FRQWhBeUFBS0FJRUlnRkZEUUFnQUNBQklBSWdBQ2dDQ0JHQmdJQ0FBQUFpQVVVTkFDQUFJQUkyQWhRZ0FDQUJOZ0lNSUFFaEF3c2dBd3ZrOHdFRERuOERmZ1IvSTRDQWdJQUFRUkJySWdNa2dJQ0FnQUFnQVNFRUlBRWhCU0FCSVFZZ0FTRUhJQUVoQ0NBQklRa2dBU0VLSUFFaEN5QUJJUXdnQVNFTklBRWhEaUFCSVE4Q1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBZ0FDZ0NIQ0lRUVg5cUR0MEIyZ0VCMlFFQ0F3UUZCZ2NJQ1FvTERBME8yQUVQRU5jQkVSTFdBUk1VRlJZWEdCa2FHK0FCM3dFY0hSN1ZBUjhnSVNJakpDWFVBU1luS0NrcUt5elRBZElCTFM3UkFkQUJMekF4TWpNME5UWTNPRGs2T3p3OVBqOUFRVUpEUkVWRzJ3RkhTRWxLendIT0FVdk5BVXpNQVUxT1QxQlJVbE5VVlZaWFdGbGFXMXhkWGw5Z1lXSmpaR1ZtWjJocGFtdHNiVzV2Y0hGeWMzUjFkbmQ0ZVhwN2ZIMStmNEFCZ1FHQ0FZTUJoQUdGQVlZQmh3R0lBWWtCaWdHTEFZd0JqUUdPQVk4QmtBR1JBWklCa3dHVUFaVUJsZ0dYQVpnQm1RR2FBWnNCbkFHZEFaNEJud0dnQWFFQm9nR2pBYVFCcFFHbUFhY0JxQUdwQWFvQnF3R3NBYTBCcmdHdkFiQUJzUUd5QWJNQnRBRzFBYllCdHdITEFjb0J1QUhKQWJrQnlBRzZBYnNCdkFHOUFiNEJ2d0hBQWNFQndnSERBY1FCeFFIR0FRRGNBUXRCQUNFUURNWUJDMEVPSVJBTXhRRUxRUTBoRUF6RUFRdEJEeUVRRE1NQkMwRVFJUkFNd2dFTFFSTWhFQXpCQVF0QkZDRVFETUFCQzBFVklSQU12d0VMUVJZaEVBeStBUXRCRnlFUURMMEJDMEVZSVJBTXZBRUxRUmtoRUF5N0FRdEJHaUVRRExvQkMwRWJJUkFNdVFFTFFSd2hFQXk0QVF0QkNDRVFETGNCQzBFZElSQU10Z0VMUVNBaEVBeTFBUXRCSHlFUURMUUJDMEVISVJBTXN3RUxRU0VoRUF5eUFRdEJJaUVRRExFQkMwRWVJUkFNc0FFTFFTTWhFQXl2QVF0QkVpRVFESzRCQzBFUklSQU1yUUVMUVNRaEVBeXNBUXRCSlNFUURLc0JDMEVtSVJBTXFnRUxRU2NoRUF5cEFRdEJ3d0VoRUF5b0FRdEJLU0VRREtjQkMwRXJJUkFNcGdFTFFTd2hFQXlsQVF0QkxTRVFES1FCQzBFdUlSQU1vd0VMUVM4aEVBeWlBUXRCeEFFaEVBeWhBUXRCTUNFUURLQUJDMEUwSVJBTW53RUxRUXdoRUF5ZUFRdEJNU0VRREowQkMwRXlJUkFNbkFFTFFUTWhFQXliQVF0Qk9TRVFESm9CQzBFMUlSQU1tUUVMUWNVQklSQU1tQUVMUVFzaEVBeVhBUXRCT2lFUURKWUJDMEUySVJBTWxRRUxRUW9oRUF5VUFRdEJOeUVRREpNQkMwRTRJUkFNa2dFTFFUd2hFQXlSQVF0Qk95RVFESkFCQzBFOUlSQU1qd0VMUVFraEVBeU9BUXRCS0NFUURJMEJDMEUrSVJBTWpBRUxRVDhoRUF5TEFRdEJ3QUFoRUF5S0FRdEJ3UUFoRUF5SkFRdEJ3Z0FoRUF5SUFRdEJ3d0FoRUF5SEFRdEJ4QUFoRUF5R0FRdEJ4UUFoRUF5RkFRdEJ4Z0FoRUF5RUFRdEJLaUVRRElNQkMwSEhBQ0VRRElJQkMwSElBQ0VRRElFQkMwSEpBQ0VRRElBQkMwSEtBQ0VRREg4TFFjc0FJUkFNZmd0QnpRQWhFQXg5QzBITUFDRVFESHdMUWM0QUlSQU1ld3RCendBaEVBeDZDMEhRQUNFUURIa0xRZEVBSVJBTWVBdEIwZ0FoRUF4M0MwSFRBQ0VRREhZTFFkUUFJUkFNZFF0QjFnQWhFQXgwQzBIVkFDRVFESE1MUVFZaEVBeHlDMEhYQUNFUURIRUxRUVVoRUF4d0MwSFlBQ0VRREc4TFFRUWhFQXh1QzBIWkFDRVFERzBMUWRvQUlSQU1iQXRCMndBaEVBeHJDMEhjQUNFUURHb0xRUU1oRUF4cEMwSGRBQ0VRREdnTFFkNEFJUkFNWnd0QjN3QWhFQXhtQzBIaEFDRVFER1VMUWVBQUlSQU1aQXRCNGdBaEVBeGpDMEhqQUNFUURHSUxRUUloRUF4aEMwSGtBQ0VRREdBTFFlVUFJUkFNWHd0QjVnQWhFQXhlQzBIbkFDRVFERjBMUWVnQUlSQU1YQXRCNlFBaEVBeGJDMEhxQUNFUURGb0xRZXNBSVJBTVdRdEI3QUFoRUF4WUMwSHRBQ0VRREZjTFFlNEFJUkFNVmd0Qjd3QWhFQXhWQzBId0FDRVFERlFMUWZFQUlSQU1Vd3RCOGdBaEVBeFNDMEh6QUNFUURGRUxRZlFBSVJBTVVBdEI5UUFoRUF4UEMwSDJBQ0VRREU0TFFmY0FJUkFNVFF0QitBQWhFQXhNQzBINUFDRVFERXNMUWZvQUlSQU1TZ3RCK3dBaEVBeEpDMEg4QUNFUURFZ0xRZjBBSVJBTVJ3dEIvZ0FoRUF4R0MwSC9BQ0VRREVVTFFZQUJJUkFNUkF0QmdRRWhFQXhEQzBHQ0FTRVFERUlMUVlNQklSQU1RUXRCaEFFaEVBeEFDMEdGQVNFUUREOExRWVlCSVJBTVBndEJod0VoRUF3OUMwR0lBU0VRRER3TFFZa0JJUkFNT3d0QmlnRWhFQXc2QzBHTEFTRVFERGtMUVl3QklSQU1PQXRCalFFaEVBdzNDMEdPQVNFUUREWUxRWThCSVJBTU5RdEJrQUVoRUF3MEMwR1JBU0VRRERNTFFaSUJJUkFNTWd0Qmt3RWhFQXd4QzBHVUFTRVFEREFMUVpVQklSQU1Md3RCbGdFaEVBd3VDMEdYQVNFUURDMExRWmdCSVJBTUxBdEJtUUVoRUF3ckMwR2FBU0VRRENvTFFac0JJUkFNS1F0Qm5BRWhFQXdvQzBHZEFTRVFEQ2NMUVo0QklSQU1KZ3RCbndFaEVBd2xDMEdnQVNFUURDUUxRYUVCSVJBTUl3dEJvZ0VoRUF3aUMwR2pBU0VRRENFTFFhUUJJUkFNSUF0QnBRRWhFQXdmQzBHbUFTRVFEQjRMUWFjQklSQU1IUXRCcUFFaEVBd2NDMEdwQVNFUURCc0xRYW9CSVJBTUdndEJxd0VoRUF3WkMwR3NBU0VRREJnTFFhMEJJUkFNRnd0QnJnRWhFQXdXQzBFQklSQU1GUXRCcndFaEVBd1VDMEd3QVNFUURCTUxRYkVCSVJBTUVndEJzd0VoRUF3UkMwR3lBU0VRREJBTFFiUUJJUkFNRHd0QnRRRWhFQXdPQzBHMkFTRVFEQTBMUWJjQklSQU1EQXRCdUFFaEVBd0xDMEc1QVNFUURBb0xRYm9CSVJBTUNRdEJ1d0VoRUF3SUMwSEdBU0VRREFjTFFid0JJUkFNQmd0QnZRRWhFQXdGQzBHK0FTRVFEQVFMUWI4QklSQU1Bd3RCd0FFaEVBd0NDMEhDQVNFUURBRUxRY0VCSVJBTEEwQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQ0FRRHNjQkFBRUNBd1FGQmdjSUNRb0xEQTBPRHhBUkVoTVVGUllYR0JrYUd4d2VIeUFoSXlVb1AwQkJSRVZHUjBoSlNrdE1UVTlRVVZKVDNnTlhXVnRjWFdCaVpXWm5hR2xxYTJ4dGIzQnhjbk4wZFhaM2VIbDZlM3g5Zm9BQmdnR0ZBWVlCaHdHSkFZc0JqQUdOQVk0Qmp3R1FBWkVCbEFHVkFaWUJsd0dZQVprQm1nR2JBWndCblFHZUFaOEJvQUdoQWFJQm93R2tBYVVCcGdHbkFhZ0JxUUdxQWFzQnJBR3RBYTRCcndHd0FiRUJzZ0d6QWJRQnRRRzJBYmNCdUFHNUFib0J1d0c4QWIwQnZnRy9BY0FCd1FIQ0FjTUJ4QUhGQWNZQnh3SElBY2tCeWdITEFjd0J6UUhPQWM4QjBBSFJBZElCMHdIVUFkVUIxZ0hYQWRnQjJRSGFBZHNCM0FIZEFkNEI0QUhoQWVJQjR3SGtBZVVCNWdIbkFlZ0I2UUhxQWVzQjdBSHRBZTRCN3dId0FmRUI4Z0h6QVprQ3BBS3dBdjRDL2dJTElBRWlCQ0FDUnczekFVSGRBU0VRRFA4REN5QUJJaEFnQWtjTjNRRkJ3d0VoRUF6K0F3c2dBU0lCSUFKSERaQUJRZmNBSVJBTS9RTUxJQUVpQVNBQ1J3MkdBVUh2QUNFUURQd0RDeUFCSWdFZ0FrY05mMEhxQUNFUURQc0RDeUFCSWdFZ0FrY05lMEhvQUNFUURQb0RDeUFCSWdFZ0FrY05lRUhtQUNFUURQa0RDeUFCSWdFZ0FrY05Ha0VZSVJBTStBTUxJQUVpQVNBQ1J3MFVRUkloRUF6M0F3c2dBU0lCSUFKSERWbEJ4UUFoRUF6MkF3c2dBU0lCSUFKSERVcEJQeUVRRFBVREN5QUJJZ0VnQWtjTlNFRThJUkFNOUFNTElBRWlBU0FDUncxQlFURWhFQXp6QXdzZ0FDMEFMa0VCUmczckF3eUhBZ3NnQUNBQklnRWdBaERBZ0lDQUFFRUJSdzNtQVNBQVFnQTNBeUFNNXdFTElBQWdBU0lCSUFJUXRJQ0FnQUFpRUEzbkFTQUJJUUVNOVFJTEFrQWdBU0lCSUFKSERRQkJCaUVRRFBBREN5QUFJQUZCQVdvaUFTQUNFTHVBZ0lBQUloQU42QUVnQVNFQkRERUxJQUJDQURjRElFRVNJUkFNMVFNTElBRWlFQ0FDUncwclFSMGhFQXp0QXdzQ1FDQUJJZ0VnQWtZTkFDQUJRUUZxSVFGQkVDRVFETlFEQzBFSElSQU03QU1MSUFCQ0FDQUFLUU1nSWhFZ0FpQUJJaEJyclNJU2ZTSVRJQk1nRVZZYk53TWdJQkVnRWxZaUZFVU41UUZCQ0NFUURPc0RDd0pBSUFFaUFTQUNSZzBBSUFCQmlZQ0FnQUEyQWdnZ0FDQUJOZ0lFSUFFaEFVRVVJUkFNMGdNTFFRa2hFQXpxQXdzZ0FTRUJJQUFwQXlCUURlUUJJQUVoQVF6eUFnc0NRQ0FCSWdFZ0FrY05BRUVMSVJBTTZRTUxJQUFnQVVFQmFpSUJJQUlRdG9DQWdBQWlFQTNsQVNBQklRRU04Z0lMSUFBZ0FTSUJJQUlRdUlDQWdBQWlFQTNsQVNBQklRRU04Z0lMSUFBZ0FTSUJJQUlRdUlDQWdBQWlFQTNtQVNBQklRRU1EUXNnQUNBQklnRWdBaEM2Z0lDQUFDSVFEZWNCSUFFaEFRendBZ3NDUUNBQklnRWdBa2NOQUVFUElSQU01UU1MSUFFdEFBQWlFRUU3UmcwSUlCQkJEVWNONkFFZ0FVRUJhaUVCRE84Q0N5QUFJQUVpQVNBQ0VMcUFnSUFBSWhBTjZBRWdBU0VCRFBJQ0N3TkFBa0FnQVMwQUFFSHd0WUNBQUdvdEFBQWlFRUVCUmcwQUlCQkJBa2NONndFZ0FDZ0NCQ0VRSUFCQkFEWUNCQ0FBSUJBZ0FVRUJhaUlCRUxtQWdJQUFJaEFONmdFZ0FTRUJEUFFDQ3lBQlFRRnFJZ0VnQWtjTkFBdEJFaUVRRE9JREN5QUFJQUVpQVNBQ0VMcUFnSUFBSWhBTjZRRWdBU0VCREFvTElBRWlBU0FDUncwR1FSc2hFQXpnQXdzQ1FDQUJJZ0VnQWtjTkFFRVdJUkFNNEFNTElBQkJpb0NBZ0FBMkFnZ2dBQ0FCTmdJRUlBQWdBU0FDRUxpQWdJQUFJaEFONmdFZ0FTRUJRU0FoRUF6R0F3c0NRQ0FCSWdFZ0FrWU5BQU5BQWtBZ0FTMEFBRUh3dDRDQUFHb3RBQUFpRUVFQ1JnMEFBa0FnRUVGL2FnNEU1UUhzQVFEckFld0JDeUFCUVFGcUlRRkJDQ0VRRE1nREN5QUJRUUZxSWdFZ0FrY05BQXRCRlNFUUROOERDMEVWSVJBTTNnTUxBMEFDUUNBQkxRQUFRZkM1Z0lBQWFpMEFBQ0lRUVFKR0RRQWdFRUYvYWc0RTNnSHNBZUFCNndIc0FRc2dBVUVCYWlJQklBSkhEUUFMUVJnaEVBemRBd3NDUUNBQklnRWdBa1lOQUNBQVFZdUFnSUFBTmdJSUlBQWdBVFlDQkNBQklRRkJCeUVRRE1RREMwRVpJUkFNM0FNTElBRkJBV29oQVF3Q0N3SkFJQUVpRkNBQ1J3MEFRUm9oRUF6YkF3c2dGQ0VCQWtBZ0ZDMEFBRUZ6YWc0VTNRTHVBdTRDN2dMdUF1NEM3Z0x1QXU0QzdnTHVBdTRDN2dMdUF1NEM3Z0x1QXU0QzdnSUE3Z0lMUVFBaEVDQUFRUUEyQWh3Z0FFR3ZpNENBQURZQ0VDQUFRUUkyQWd3Z0FDQVVRUUZxTmdJVUROb0RDd0pBSUFFdEFBQWlFRUU3UmcwQUlCQkJEVWNONkFFZ0FVRUJhaUVCRE9VQ0N5QUJRUUZxSVFFTFFTSWhFQXkvQXdzQ1FDQUJJaEFnQWtjTkFFRWNJUkFNMkFNTFFnQWhFU0FRSVFFZ0VDMEFBRUZRYWc0MzV3SG1BUUVDQXdRRkJnY0lBQUFBQUFBQUFBa0tDd3dORGdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRHhBUkVoTVVBQXRCSGlFUURMMERDMElDSVJFTTVRRUxRZ01oRVF6a0FRdENCQ0VSRE9NQkMwSUZJUkVNNGdFTFFnWWhFUXpoQVF0Q0J5RVJET0FCQzBJSUlSRU0zd0VMUWdraEVRemVBUXRDQ2lFUkROMEJDMElMSVJFTTNBRUxRZ3doRVF6YkFRdENEU0VSRE5vQkMwSU9JUkVNMlFFTFFnOGhFUXpZQVF0Q0NpRVJETmNCQzBJTElSRU0xZ0VMUWd3aEVRelZBUXRDRFNFUkROUUJDMElPSVJFTTB3RUxRZzhoRVF6U0FRdENBQ0VSQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FDQVFMUUFBUVZCcURqZmxBZVFCQUFFQ0F3UUZCZ2ZtQWVZQjVnSG1BZVlCNWdIbUFRZ0pDZ3NNRGVZQjVnSG1BZVlCNWdIbUFlWUI1Z0htQWVZQjVnSG1BZVlCNWdIbUFlWUI1Z0htQWVZQjVnSG1BZVlCNWdIbUFlWUI1Z0VPRHhBUkVoUG1BUXRDQWlFUkRPUUJDMElESVJFTTR3RUxRZ1FoRVF6aUFRdENCU0VSRE9FQkMwSUdJUkVNNEFFTFFnY2hFUXpmQVF0Q0NDRVJETjRCQzBJSklSRU0zUUVMUWdvaEVRemNBUXRDQ3lFUkROc0JDMElNSVJFTTJnRUxRZzBoRVF6WkFRdENEaUVSRE5nQkMwSVBJUkVNMXdFTFFnb2hFUXpXQVF0Q0N5RVJETlVCQzBJTUlSRU0xQUVMUWcwaEVRelRBUXRDRGlFUkROSUJDMElQSVJFTTBRRUxJQUJDQUNBQUtRTWdJaEVnQWlBQkloQnJyU0lTZlNJVElCTWdFVlliTndNZ0lCRWdFbFlpRkVVTjBnRkJIeUVRRE1BREN3SkFJQUVpQVNBQ1JnMEFJQUJCaVlDQWdBQTJBZ2dnQUNBQk5nSUVJQUVoQVVFa0lSQU1wd01MUVNBaEVBeS9Bd3NnQUNBQkloQWdBaEMrZ0lDQUFFRi9hZzRGdGdFQXhRSUIwUUhTQVF0QkVTRVFES1FEQ3lBQVFRRTZBQzhnRUNFQkRMc0RDeUFCSWdFZ0FrY04wZ0ZCSkNFUURMc0RDeUFCSWcwZ0FrY05Ia0hHQUNFUURMb0RDeUFBSUFFaUFTQUNFTEtBZ0lBQUloQU4xQUVnQVNFQkRMVUJDeUFCSWhBZ0FrY05Ka0hRQUNFUURMZ0RDd0pBSUFFaUFTQUNSdzBBUVNnaEVBeTRBd3NnQUVFQU5nSUVJQUJCaklDQWdBQTJBZ2dnQUNBQklBRVFzWUNBZ0FBaUVBM1RBU0FCSVFFTTJBRUxBa0FnQVNJUUlBSkhEUUJCS1NFUURMY0RDeUFRTFFBQUlnRkJJRVlORkNBQlFRbEhEZE1CSUJCQkFXb2hBUXdWQ3dKQUlBRWlBU0FDUmcwQUlBRkJBV29oQVF3WEMwRXFJUkFNdFFNTEFrQWdBU0lRSUFKSERRQkJLeUVRRExVREN3SkFJQkF0QUFBaUFVRUpSZzBBSUFGQklFY04xUUVMSUFBdEFDeEJDRVlOMHdFZ0VDRUJESkVEQ3dKQUlBRWlBU0FDUncwQVFTd2hFQXkwQXdzZ0FTMEFBRUVLUnczVkFTQUJRUUZxSVFFTXlRSUxJQUVpRGlBQ1J3M1ZBVUV2SVJBTXNnTUxBMEFDUUNBQkxRQUFJaEJCSUVZTkFBSkFJQkJCZG1vT0JBRGNBZHdCQU5vQkN5QUJJUUVNNEFFTElBRkJBV29pQVNBQ1J3MEFDMEV4SVJBTXNRTUxRVEloRUNBQkloUWdBa1lOc0FNZ0FpQVVheUFBS0FJQUlnRnFJUlVnRkNBQmEwRURhaUVXQWtBRFFDQVVMUUFBSWhkQklISWdGeUFYUWI5L2FrSC9BWEZCR2trYlFmOEJjU0FCUWZDN2dJQUFhaTBBQUVjTkFRSkFJQUZCQTBjTkFFRUdJUUVNbGdNTElBRkJBV29oQVNBVVFRRnFJaFFnQWtjTkFBc2dBQ0FWTmdJQURMRURDeUFBUVFBMkFnQWdGQ0VCRE5rQkMwRXpJUkFnQVNJVUlBSkdEYThESUFJZ0ZHc2dBQ2dDQUNJQmFpRVZJQlFnQVd0QkNHb2hGZ0pBQTBBZ0ZDMEFBQ0lYUVNCeUlCY2dGMEcvZjJwQi93RnhRUnBKRzBIL0FYRWdBVUgwdTRDQUFHb3RBQUJIRFFFQ1FDQUJRUWhIRFFCQkJTRUJESlVEQ3lBQlFRRnFJUUVnRkVFQmFpSVVJQUpIRFFBTElBQWdGVFlDQUF5d0F3c2dBRUVBTmdJQUlCUWhBUXpZQVF0Qk5DRVFJQUVpRkNBQ1JnMnVBeUFDSUJScklBQW9BZ0FpQVdvaEZTQVVJQUZyUVFWcUlSWUNRQU5BSUJRdEFBQWlGMEVnY2lBWElCZEJ2MzlxUWY4QmNVRWFTUnRCL3dGeElBRkIwTUtBZ0FCcUxRQUFSdzBCQWtBZ0FVRUZSdzBBUVFjaEFReVVBd3NnQVVFQmFpRUJJQlJCQVdvaUZDQUNSdzBBQ3lBQUlCVTJBZ0FNcndNTElBQkJBRFlDQUNBVUlRRU0xd0VMQWtBZ0FTSUJJQUpHRFFBRFFBSkFJQUV0QUFCQmdMNkFnQUJxTFFBQUloQkJBVVlOQUNBUVFRSkdEUW9nQVNFQkROMEJDeUFCUVFGcUlnRWdBa2NOQUF0Qk1DRVFESzREQzBFd0lSQU1yUU1MQWtBZ0FTSUJJQUpHRFFBRFFBSkFJQUV0QUFBaUVFRWdSZzBBSUJCQmRtb09CTmtCMmdIYUFka0IyZ0VMSUFGQkFXb2lBU0FDUncwQUMwRTRJUkFNclFNTFFUZ2hFQXlzQXdzRFFBSkFJQUV0QUFBaUVFRWdSZzBBSUJCQkNVY05Bd3NnQVVFQmFpSUJJQUpIRFFBTFFUd2hFQXlyQXdzRFFBSkFJQUV0QUFBaUVFRWdSZzBBQWtBQ1FDQVFRWFpxRGdUYUFRRUIyZ0VBQ3lBUVFTeEdEZHNCQ3lBQklRRU1CQXNnQVVFQmFpSUJJQUpIRFFBTFFUOGhFQXlxQXdzZ0FTRUJETnNCQzBIQUFDRVFJQUVpRkNBQ1JnMm9BeUFDSUJScklBQW9BZ0FpQVdvaEZpQVVJQUZyUVFacUlSY0NRQU5BSUJRdEFBQkJJSElnQVVHQXdJQ0FBR290QUFCSERRRWdBVUVHUmcyT0F5QUJRUUZxSVFFZ0ZFRUJhaUlVSUFKSERRQUxJQUFnRmpZQ0FBeXBBd3NnQUVFQU5nSUFJQlFoQVF0Qk5pRVFESTREQ3dKQUlBRWlEeUFDUncwQVFjRUFJUkFNcHdNTElBQkJqSUNBZ0FBMkFnZ2dBQ0FQTmdJRUlBOGhBU0FBTFFBc1FYOXFEZ1ROQWRVQjF3SFpBWWNEQ3lBQlFRRnFJUUVNekFFTEFrQWdBU0lCSUFKR0RRQURRQUpBSUFFdEFBQWlFRUVnY2lBUUlCQkJ2MzlxUWY4QmNVRWFTUnRCL3dGeEloQkJDVVlOQUNBUVFTQkdEUUFDUUFKQUFrQUNRQ0FRUVoxL2FnNFRBQU1EQXdNREF3TUJBd01EQXdNREF3TURBZ01MSUFGQkFXb2hBVUV4SVJBTWtRTUxJQUZCQVdvaEFVRXlJUkFNa0FNTElBRkJBV29oQVVFeklSQU1qd01MSUFFaEFRelFBUXNnQVVFQmFpSUJJQUpIRFFBTFFUVWhFQXlsQXd0Qk5TRVFES1FEQ3dKQUlBRWlBU0FDUmcwQUEwQUNRQ0FCTFFBQVFZQzhnSUFBYWkwQUFFRUJSZzBBSUFFaEFRelRBUXNnQVVFQmFpSUJJQUpIRFFBTFFUMGhFQXlrQXd0QlBTRVFES01EQ3lBQUlBRWlBU0FDRUxDQWdJQUFJaEFOMWdFZ0FTRUJEQUVMSUJCQkFXb2hBUXRCUENFUURJY0RDd0pBSUFFaUFTQUNSdzBBUWNJQUlSQU1vQU1MQWtBRFFBSkFJQUV0QUFCQmQyb09HQUFDL2dMK0FvUUQvZ0wrQXY0Qy9nTCtBdjRDL2dMK0F2NEMvZ0wrQXY0Qy9nTCtBdjRDL2dMK0F2NENBUDRDQ3lBQlFRRnFJZ0VnQWtjTkFBdEJ3Z0FoRUF5Z0F3c2dBVUVCYWlFQklBQXRBQzFCQVhGRkRiMEJJQUVoQVF0QkxDRVFESVVEQ3lBQklnRWdBa2NOMHdGQnhBQWhFQXlkQXdzRFFBSkFJQUV0QUFCQmtNQ0FnQUJxTFFBQVFRRkdEUUFnQVNFQkRMY0NDeUFCUVFGcUlnRWdBa2NOQUF0QnhRQWhFQXljQXdzZ0RTMEFBQ0lRUVNCR0RiTUJJQkJCT2tjTmdRTWdBQ2dDQkNFQklBQkJBRFlDQkNBQUlBRWdEUkN2Z0lDQUFDSUJEZEFCSUExQkFXb2hBUXl6QWd0Qnh3QWhFQ0FCSWcwZ0FrWU5tZ01nQWlBTmF5QUFLQUlBSWdGcUlSWWdEU0FCYTBFRmFpRVhBMEFnRFMwQUFDSVVRU0J5SUJRZ0ZFRy9mMnBCL3dGeFFScEpHMEgvQVhFZ0FVR1F3b0NBQUdvdEFBQkhEWUFESUFGQkJVWU45QUlnQVVFQmFpRUJJQTFCQVdvaURTQUNSdzBBQ3lBQUlCWTJBZ0FNbWdNTFFjZ0FJUkFnQVNJTklBSkdEWmtESUFJZ0RXc2dBQ2dDQUNJQmFpRVdJQTBnQVd0QkNXb2hGd05BSUEwdEFBQWlGRUVnY2lBVUlCUkJ2MzlxUWY4QmNVRWFTUnRCL3dGeElBRkJsc0tBZ0FCcUxRQUFSdzMvQWdKQUlBRkJDVWNOQUVFQ0lRRU05UUlMSUFGQkFXb2hBU0FOUVFGcUlnMGdBa2NOQUFzZ0FDQVdOZ0lBREprREN3SkFJQUVpRFNBQ1J3MEFRY2tBSVJBTW1RTUxBa0FDUUNBTkxRQUFJZ0ZCSUhJZ0FTQUJRYjkvYWtIL0FYRkJHa2tiUWY4QmNVR1NmMm9PQndDQUE0QURnQU9BQTRBREFZQURDeUFOUVFGcUlRRkJQaUVRRElBREN5QU5RUUZxSVFGQlB5RVFEUDhDQzBIS0FDRVFJQUVpRFNBQ1JnMlhBeUFDSUExcklBQW9BZ0FpQVdvaEZpQU5JQUZyUVFGcUlSY0RRQ0FOTFFBQUloUkJJSElnRkNBVVFiOS9ha0gvQVhGQkdra2JRZjhCY1NBQlFhRENnSUFBYWkwQUFFY04vUUlnQVVFQlJnM3dBaUFCUVFGcUlRRWdEVUVCYWlJTklBSkhEUUFMSUFBZ0ZqWUNBQXlYQXd0Qnl3QWhFQ0FCSWcwZ0FrWU5sZ01nQWlBTmF5QUFLQUlBSWdGcUlSWWdEU0FCYTBFT2FpRVhBMEFnRFMwQUFDSVVRU0J5SUJRZ0ZFRy9mMnBCL3dGeFFScEpHMEgvQVhFZ0FVR2l3b0NBQUdvdEFBQkhEZndDSUFGQkRrWU44QUlnQVVFQmFpRUJJQTFCQVdvaURTQUNSdzBBQ3lBQUlCWTJBZ0FNbGdNTFFjd0FJUkFnQVNJTklBSkdEWlVESUFJZ0RXc2dBQ2dDQUNJQmFpRVdJQTBnQVd0QkQyb2hGd05BSUEwdEFBQWlGRUVnY2lBVUlCUkJ2MzlxUWY4QmNVRWFTUnRCL3dGeElBRkJ3TUtBZ0FCcUxRQUFSdzM3QWdKQUlBRkJEMGNOQUVFRElRRU04UUlMSUFGQkFXb2hBU0FOUVFGcUlnMGdBa2NOQUFzZ0FDQVdOZ0lBREpVREMwSE5BQ0VRSUFFaURTQUNSZzJVQXlBQ0lBMXJJQUFvQWdBaUFXb2hGaUFOSUFGclFRVnFJUmNEUUNBTkxRQUFJaFJCSUhJZ0ZDQVVRYjkvYWtIL0FYRkJHa2tiUWY4QmNTQUJRZERDZ0lBQWFpMEFBRWNOK2dJQ1FDQUJRUVZIRFFCQkJDRUJEUEFDQ3lBQlFRRnFJUUVnRFVFQmFpSU5JQUpIRFFBTElBQWdGallDQUF5VUF3c0NRQ0FCSWcwZ0FrY05BRUhPQUNFUURKUURDd0pBQWtBQ1FBSkFJQTB0QUFBaUFVRWdjaUFCSUFGQnYzOXFRZjhCY1VFYVNSdEIvd0Z4UVoxL2FnNFRBUDBDL1FMOUF2MEMvUUw5QXYwQy9RTDlBdjBDL1FMOUFnSDlBdjBDL1FJQ0EvMENDeUFOUVFGcUlRRkJ3UUFoRUF6OUFnc2dEVUVCYWlFQlFjSUFJUkFNL0FJTElBMUJBV29oQVVIREFDRVFEUHNDQ3lBTlFRRnFJUUZCeEFBaEVBejZBZ3NDUUNBQklnRWdBa1lOQUNBQVFZMkFnSUFBTmdJSUlBQWdBVFlDQkNBQklRRkJ4UUFoRUF6NkFndEJ6d0FoRUF5U0F3c2dFQ0VCQWtBQ1FDQVFMUUFBUVhacURnUUJxQUtvQWdDb0Fnc2dFRUVCYWlFQkMwRW5JUkFNK0FJTEFrQWdBU0lCSUFKSERRQkIwUUFoRUF5UkF3c0NRQ0FCTFFBQVFTQkdEUUFnQVNFQkRJMEJDeUFCUVFGcUlRRWdBQzBBTFVFQmNVVU54d0VnQVNFQkRJd0JDeUFCSWhjZ0FrY055QUZCMGdBaEVBeVBBd3RCMHdBaEVDQUJJaFFnQWtZTmpnTWdBaUFVYXlBQUtBSUFJZ0ZxSVJZZ0ZDQUJhMEVCYWlFWEEwQWdGQzBBQUNBQlFkYkNnSUFBYWkwQUFFY056QUVnQVVFQlJnM0hBU0FCUVFGcUlRRWdGRUVCYWlJVUlBSkhEUUFMSUFBZ0ZqWUNBQXlPQXdzQ1FDQUJJZ0VnQWtjTkFFSFZBQ0VRREk0REN5QUJMUUFBUVFwSERjd0JJQUZCQVdvaEFRekhBUXNDUUNBQklnRWdBa2NOQUVIV0FDRVFESTBEQ3dKQUFrQWdBUzBBQUVGMmFnNEVBTTBCelFFQnpRRUxJQUZCQVdvaEFRekhBUXNnQVVFQmFpRUJRY29BSVJBTTh3SUxJQUFnQVNJQklBSVFyb0NBZ0FBaUVBM0xBU0FCSVFGQnpRQWhFQXp5QWdzZ0FDMEFLVUVpUmcyRkF3eW1BZ3NDUUNBQklnRWdBa2NOQUVIYkFDRVFESW9EQzBFQUlSUkJBU0VYUVFFaEZrRUFJUkFDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FnQVMwQUFFRlFhZzRLMUFIVEFRQUJBZ01FQlFZSTFRRUxRUUloRUF3R0MwRURJUkFNQlF0QkJDRVFEQVFMUVFVaEVBd0RDMEVHSVJBTUFndEJCeUVRREFFTFFRZ2hFQXRCQUNFWFFRQWhGa0VBSVJRTXpBRUxRUWtoRUVFQklSUkJBQ0VYUVFBaEZnekxBUXNDUUNBQklnRWdBa2NOQUVIZEFDRVFESWtEQ3lBQkxRQUFRUzVIRGN3QklBRkJBV29oQVF5bUFnc2dBU0lCSUFKSERjd0JRZDhBSVJBTWh3TUxBa0FnQVNJQklBSkdEUUFnQUVHT2dJQ0FBRFlDQ0NBQUlBRTJBZ1FnQVNFQlFkQUFJUkFNN2dJTFFlQUFJUkFNaGdNTFFlRUFJUkFnQVNJQklBSkdEWVVESUFJZ0FXc2dBQ2dDQUNJVWFpRVdJQUVnRkd0QkEyb2hGd05BSUFFdEFBQWdGRUhpd29DQUFHb3RBQUJIRGMwQklCUkJBMFlOekFFZ0ZFRUJhaUVVSUFGQkFXb2lBU0FDUncwQUN5QUFJQlkyQWdBTWhRTUxRZUlBSVJBZ0FTSUJJQUpHRFlRRElBSWdBV3NnQUNnQ0FDSVVhaUVXSUFFZ0ZHdEJBbW9oRndOQUlBRXRBQUFnRkVIbXdvQ0FBR290QUFCSERjd0JJQlJCQWtZTnpnRWdGRUVCYWlFVUlBRkJBV29pQVNBQ1J3MEFDeUFBSUJZMkFnQU1oQU1MUWVNQUlSQWdBU0lCSUFKR0RZTURJQUlnQVdzZ0FDZ0NBQ0lVYWlFV0lBRWdGR3RCQTJvaEZ3TkFJQUV0QUFBZ0ZFSHB3b0NBQUdvdEFBQkhEY3NCSUJSQkEwWU56Z0VnRkVFQmFpRVVJQUZCQVdvaUFTQUNSdzBBQ3lBQUlCWTJBZ0FNZ3dNTEFrQWdBU0lCSUFKSERRQkI1UUFoRUF5REF3c2dBQ0FCUVFGcUlnRWdBaENvZ0lDQUFDSVFEYzBCSUFFaEFVSFdBQ0VRRE9rQ0N3SkFJQUVpQVNBQ1JnMEFBMEFDUUNBQkxRQUFJaEJCSUVZTkFBSkFBa0FDUUNBUVFiaC9hZzRMQUFIUEFjOEJ6d0hQQWM4Qnp3SFBBYzhCQXM4QkN5QUJRUUZxSVFGQjBnQWhFQXp0QWdzZ0FVRUJhaUVCUWRNQUlSQU03QUlMSUFGQkFXb2hBVUhVQUNFUURPc0NDeUFCUVFGcUlnRWdBa2NOQUF0QjVBQWhFQXlDQXd0QjVBQWhFQXlCQXdzRFFBSkFJQUV0QUFCQjhNS0FnQUJxTFFBQUloQkJBVVlOQUNBUVFYNXFEZ1BQQWRBQjBRSFNBUXNnQVVFQmFpSUJJQUpIRFFBTFFlWUFJUkFNZ0FNTEFrQWdBU0lCSUFKR0RRQWdBVUVCYWlFQkRBTUxRZWNBSVJBTS93SUxBMEFDUUNBQkxRQUFRZkRFZ0lBQWFpMEFBQ0lRUVFGR0RRQUNRQ0FRUVg1cURnVFNBZE1CMUFFQTFRRUxJQUVoQVVIWEFDRVFET2NDQ3lBQlFRRnFJZ0VnQWtjTkFBdEI2QUFoRUF6K0Fnc0NRQ0FCSWdFZ0FrY05BRUhwQUNFUURQNENDd0pBSUFFdEFBQWlFRUYyYWc0YXVnSFZBZFVCdkFIVkFkVUIxUUhWQWRVQjFRSFZBZFVCMVFIVkFkVUIxUUhWQWRVQjFRSFZBZFVCMVFIS0FkVUIxUUVBMHdFTElBRkJBV29oQVF0QkJpRVFET01DQ3dOQUFrQWdBUzBBQUVId3hvQ0FBR290QUFCQkFVWU5BQ0FCSVFFTW5nSUxJQUZCQVdvaUFTQUNSdzBBQzBIcUFDRVFEUHNDQ3dKQUlBRWlBU0FDUmcwQUlBRkJBV29oQVF3REMwSHJBQ0VRRFBvQ0N3SkFJQUVpQVNBQ1J3MEFRZXdBSVJBTStnSUxJQUZCQVdvaEFRd0JDd0pBSUFFaUFTQUNSdzBBUWUwQUlSQU0rUUlMSUFGQkFXb2hBUXRCQkNFUURONENDd0pBSUFFaUZDQUNSdzBBUWU0QUlSQU05d0lMSUJRaEFRSkFBa0FDUUNBVUxRQUFRZkRJZ0lBQWFpMEFBRUYvYWc0SDFBSFZBZFlCQUp3Q0FRTFhBUXNnRkVFQmFpRUJEQW9MSUJSQkFXb2hBUXpOQVF0QkFDRVFJQUJCQURZQ0hDQUFRWnVTZ0lBQU5nSVFJQUJCQnpZQ0RDQUFJQlJCQVdvMkFoUU05Z0lMQWtBRFFBSkFJQUV0QUFCQjhNaUFnQUJxTFFBQUloQkJCRVlOQUFKQUFrQWdFRUYvYWc0SDBnSFRBZFFCMlFFQUJBSFpBUXNnQVNFQlFkb0FJUkFNNEFJTElBRkJBV29oQVVIY0FDRVFETjhDQ3lBQlFRRnFJZ0VnQWtjTkFBdEI3d0FoRUF6MkFnc2dBVUVCYWlFQkRNc0JDd0pBSUFFaUZDQUNSdzBBUWZBQUlSQU05UUlMSUJRdEFBQkJMMGNOMUFFZ0ZFRUJhaUVCREFZTEFrQWdBU0lVSUFKSERRQkI4UUFoRUF6MEFnc0NRQ0FVTFFBQUlnRkJMMGNOQUNBVVFRRnFJUUZCM1FBaEVBemJBZ3NnQVVGMmFpSUVRUlpMRGRNQlFRRWdCSFJCaVlDQUFuRkZEZE1CRE1vQ0N3SkFJQUVpQVNBQ1JnMEFJQUZCQVdvaEFVSGVBQ0VRRE5vQ0MwSHlBQ0VRRFBJQ0N3SkFJQUVpRkNBQ1J3MEFRZlFBSVJBTThnSUxJQlFoQVFKQUlCUXRBQUJCOE15QWdBQnFMUUFBUVg5cURnUEpBcFFDQU5RQkMwSGhBQ0VRRE5nQ0N3SkFJQUVpRkNBQ1JnMEFBMEFDUUNBVUxRQUFRZkRLZ0lBQWFpMEFBQ0lCUVFOR0RRQUNRQ0FCUVg5cURnTExBZ0RWQVFzZ0ZDRUJRZDhBSVJBTTJnSUxJQlJCQVdvaUZDQUNSdzBBQzBIekFDRVFEUEVDQzBIekFDRVFEUEFDQ3dKQUlBRWlBU0FDUmcwQUlBQkJqNENBZ0FBMkFnZ2dBQ0FCTmdJRUlBRWhBVUhnQUNFUUROY0NDMEgxQUNFUURPOENDd0pBSUFFaUFTQUNSdzBBUWZZQUlSQU03d0lMSUFCQmo0Q0FnQUEyQWdnZ0FDQUJOZ0lFSUFFaEFRdEJBeUVRRE5RQ0N3TkFJQUV0QUFCQklFY053d0lnQVVFQmFpSUJJQUpIRFFBTFFmY0FJUkFNN0FJTEFrQWdBU0lCSUFKSERRQkIrQUFoRUF6c0Fnc2dBUzBBQUVFZ1J3M09BU0FCUVFGcUlRRU03d0VMSUFBZ0FTSUJJQUlRcklDQWdBQWlFQTNPQVNBQklRRU1qZ0lMQWtBZ0FTSUVJQUpIRFFCQitnQWhFQXpxQWdzZ0JDMEFBRUhNQUVjTjBRRWdCRUVCYWlFQlFSTWhFQXpQQVFzQ1FDQUJJZ1FnQWtjTkFFSDdBQ0VRRE9rQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUVZxSVJBRFFDQUVMUUFBSUFGQjhNNkFnQUJxTFFBQVJ3M1FBU0FCUVFWR0RjNEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRZnNBSVJBTTZBSUxBa0FnQVNJRUlBSkhEUUJCL0FBaEVBem9BZ3NDUUFKQUlBUXRBQUJCdlg5cURnd0EwUUhSQWRFQjBRSFJBZEVCMFFIUkFkRUIwUUVCMFFFTElBUkJBV29oQVVIbUFDRVFETThDQ3lBRVFRRnFJUUZCNXdBaEVBek9BZ3NDUUNBQklnUWdBa2NOQUVIOUFDRVFET2NDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRSnFJUkFDUUFOQUlBUXRBQUFnQVVIdHo0Q0FBR290QUFCSERjOEJJQUZCQWtZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFSDlBQ0VRRE9jQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVJBaEVBek1BUXNDUUNBQklnUWdBa2NOQUVIK0FDRVFET1lDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRVnFJUkFDUUFOQUlBUXRBQUFnQVVIMnpvQ0FBR290QUFCSERjNEJJQUZCQlVZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFSCtBQ0VRRE9ZQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVJZaEVBekxBUXNDUUNBQklnUWdBa2NOQUVIL0FDRVFET1VDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRTnFJUkFDUUFOQUlBUXRBQUFnQVVIOHpvQ0FBR290QUFCSERjMEJJQUZCQTBZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFSC9BQ0VRRE9VQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVFVaEVBektBUXNDUUNBQklnUWdBa2NOQUVHQUFTRVFET1FDQ3lBRUxRQUFRZGtBUnczTEFTQUVRUUZxSVFGQkNDRVFETWtCQ3dKQUlBRWlCQ0FDUncwQVFZRUJJUkFNNHdJTEFrQUNRQ0FFTFFBQVFiSi9hZzREQU13QkFjd0JDeUFFUVFGcUlRRkI2d0FoRUF6S0Fnc2dCRUVCYWlFQlFld0FJUkFNeVFJTEFrQWdBU0lFSUFKSERRQkJnZ0VoRUF6aUFnc0NRQUpBSUFRdEFBQkJ1SDlxRGdnQXl3SExBY3NCeXdITEFjc0JBY3NCQ3lBRVFRRnFJUUZCNmdBaEVBekpBZ3NnQkVFQmFpRUJRZTBBSVJBTXlBSUxBa0FnQVNJRUlBSkhEUUJCZ3dFaEVBemhBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSQWdCQ0FCYTBFQ2FpRVVBa0FEUUNBRUxRQUFJQUZCZ00rQWdBQnFMUUFBUnczSkFTQUJRUUpHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQkEyQWdCQmd3RWhFQXpoQWd0QkFDRVFJQUJCQURZQ0FDQVVRUUZxSVFFTXhnRUxBa0FnQVNJRUlBSkhEUUJCaEFFaEVBemdBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFRWFpRVFBa0FEUUNBRUxRQUFJQUZCZzgrQWdBQnFMUUFBUnczSUFTQUJRUVJHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQmhBRWhFQXpnQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVqSVJBTXhRRUxBa0FnQVNJRUlBSkhEUUJCaFFFaEVBemZBZ3NDUUFKQUlBUXRBQUJCdEg5cURnZ0F5QUhJQWNnQnlBSElBY2dCQWNnQkN5QUVRUUZxSVFGQjd3QWhFQXpHQWdzZ0JFRUJhaUVCUWZBQUlSQU14UUlMQWtBZ0FTSUVJQUpIRFFCQmhnRWhFQXplQWdzZ0JDMEFBRUhGQUVjTnhRRWdCRUVCYWlFQkRJTUNDd0pBSUFFaUJDQUNSdzBBUVljQklSQU0zUUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkEyb2hFQUpBQTBBZ0JDMEFBQ0FCUVlqUGdJQUFhaTBBQUVjTnhRRWdBVUVEUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFZY0JJUkFNM1FJTElBQkJBRFlDQUNBUVFRRnFJUUZCTFNFUURNSUJDd0pBSUFFaUJDQUNSdzBBUVlnQklSQU0zQUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkNHb2hFQUpBQTBBZ0JDMEFBQ0FCUWREUGdJQUFhaTBBQUVjTnhBRWdBVUVJUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFZZ0JJUkFNM0FJTElBQkJBRFlDQUNBUVFRRnFJUUZCS1NFUURNRUJDd0pBSUFFaUFTQUNSdzBBUVlrQklSQU0yd0lMUVFFaEVDQUJMUUFBUWQ4QVJ3M0FBU0FCUVFGcUlRRU1nUUlMQWtBZ0FTSUVJQUpIRFFCQmlnRWhFQXphQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUJhaUVRQTBBZ0JDMEFBQ0FCUVl6UGdJQUFhaTBBQUVjTndRRWdBVUVCUmcydkFpQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR0tBU0VRRE5rQ0N3SkFJQUVpQkNBQ1J3MEFRWXNCSVJBTTJRSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQW1vaEVBSkFBMEFnQkMwQUFDQUJRWTdQZ0lBQWFpMEFBRWNOd1FFZ0FVRUNSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVlzQklSQU0yUUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJBaUVRREw0QkN3SkFJQUVpQkNBQ1J3MEFRWXdCSVJBTTJBSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQVdvaEVBSkFBMEFnQkMwQUFDQUJRZkRQZ0lBQWFpMEFBRWNOd0FFZ0FVRUJSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVl3QklSQU0yQUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJIeUVRREwwQkN3SkFJQUVpQkNBQ1J3MEFRWTBCSVJBTTF3SUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQVdvaEVBSkFBMEFnQkMwQUFDQUJRZkxQZ0lBQWFpMEFBRWNOdndFZ0FVRUJSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVkwQklSQU0xd0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJDU0VRREx3QkN3SkFJQUVpQkNBQ1J3MEFRWTRCSVJBTTFnSUxBa0FDUUNBRUxRQUFRYmQvYWc0SEFMOEJ2d0cvQWI4QnZ3RUJ2d0VMSUFSQkFXb2hBVUg0QUNFUURMMENDeUFFUVFGcUlRRkIrUUFoRUF5OEFnc0NRQ0FCSWdRZ0FrY05BRUdQQVNFUUROVUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFWcUlSQUNRQU5BSUFRdEFBQWdBVUdSejRDQUFHb3RBQUJIRGIwQklBRkJCVVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHUEFTRVFETlVDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUmdoRUF5NkFRc0NRQ0FCSWdRZ0FrY05BRUdRQVNFUUROUUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFKcUlSQUNRQU5BSUFRdEFBQWdBVUdYejRDQUFHb3RBQUJIRGJ3QklBRkJBa1lOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHUUFTRVFETlFDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUmNoRUF5NUFRc0NRQ0FCSWdRZ0FrY05BRUdSQVNFUUROTUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFacUlSQUNRQU5BSUFRdEFBQWdBVUdhejRDQUFHb3RBQUJIRGJzQklBRkJCa1lOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHUkFTRVFETk1DQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUlVoRUF5NEFRc0NRQ0FCSWdRZ0FrY05BRUdTQVNFUUROSUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFWcUlSQUNRQU5BSUFRdEFBQWdBVUdoejRDQUFHb3RBQUJIRGJvQklBRkJCVVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHU0FTRVFETklDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUjRoRUF5M0FRc0NRQ0FCSWdRZ0FrY05BRUdUQVNFUURORUNDeUFFTFFBQVFjd0FSdzI0QVNBRVFRRnFJUUZCQ2lFUURMWUJDd0pBSUFRZ0FrY05BRUdVQVNFUUROQUNDd0pBQWtBZ0JDMEFBRUcvZjJvT0R3QzVBYmtCdVFHNUFia0J1UUc1QWJrQnVRRzVBYmtCdVFHNUFRRzVBUXNnQkVFQmFpRUJRZjRBSVJBTXR3SUxJQVJCQVdvaEFVSC9BQ0VRRExZQ0N3SkFJQVFnQWtjTkFFR1ZBU0VRRE04Q0N3SkFBa0FnQkMwQUFFRy9mMm9PQXdDNEFRRzRBUXNnQkVFQmFpRUJRZjBBSVJBTXRnSUxJQVJCQVdvaEJFR0FBU0VRRExVQ0N3SkFJQVFnQWtjTkFFR1dBU0VRRE00Q0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUZxSVJBQ1FBTkFJQVF0QUFBZ0FVR256NENBQUdvdEFBQkhEYllCSUFGQkFVWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdXQVNFUURNNENDeUFBUVFBMkFnQWdFRUVCYWlFQlFRc2hFQXl6QVFzQ1FDQUVJQUpIRFFCQmx3RWhFQXpOQWdzQ1FBSkFBa0FDUUNBRUxRQUFRVk5xRGlNQXVBRzRBYmdCdUFHNEFiZ0J1QUc0QWJnQnVBRzRBYmdCdUFHNEFiZ0J1QUc0QWJnQnVBRzRBYmdCdUFHNEFRRzRBYmdCdUFHNEFiZ0JBcmdCdUFHNEFRTzRBUXNnQkVFQmFpRUJRZnNBSVJBTXRnSUxJQVJCQVdvaEFVSDhBQ0VRRExVQ0N5QUVRUUZxSVFSQmdRRWhFQXkwQWdzZ0JFRUJhaUVFUVlJQklSQU1zd0lMQWtBZ0JDQUNSdzBBUVpnQklSQU16QUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkJHb2hFQUpBQTBBZ0JDMEFBQ0FCUWFuUGdJQUFhaTBBQUVjTnRBRWdBVUVFUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFaZ0JJUkFNekFJTElBQkJBRFlDQUNBUVFRRnFJUUZCR1NFUURMRUJDd0pBSUFRZ0FrY05BRUdaQVNFUURNc0NDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFWcUlSQUNRQU5BSUFRdEFBQWdBVUd1ejRDQUFHb3RBQUJIRGJNQklBRkJCVVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHWkFTRVFETXNDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUVloRUF5d0FRc0NRQ0FFSUFKSERRQkJtZ0VoRUF6S0Fnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVCYWlFUUFrQURRQ0FFTFFBQUlBRkJ0TStBZ0FCcUxRQUFSdzJ5QVNBQlFRRkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCbWdFaEVBektBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRWNJUkFNcndFTEFrQWdCQ0FDUncwQVFac0JJUkFNeVFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBV29oRUFKQUEwQWdCQzBBQUNBQlFiYlBnSUFBYWkwQUFFY05zUUVnQVVFQlJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWnNCSVJBTXlRSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkp5RVFESzRCQ3dKQUlBUWdBa2NOQUVHY0FTRVFETWdDQ3dKQUFrQWdCQzBBQUVHc2Yyb09BZ0FCc1FFTElBUkJBV29oQkVHR0FTRVFESzhDQ3lBRVFRRnFJUVJCaHdFaEVBeXVBZ3NDUUNBRUlBSkhEUUJCblFFaEVBekhBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFQmFpRVFBa0FEUUNBRUxRQUFJQUZCdU0rQWdBQnFMUUFBUncydkFTQUJRUUZHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQm5RRWhFQXpIQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVtSVJBTXJBRUxBa0FnQkNBQ1J3MEFRWjRCSVJBTXhnSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQVdvaEVBSkFBMEFnQkMwQUFDQUJRYnJQZ0lBQWFpMEFBRWNOcmdFZ0FVRUJSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVo0QklSQU14Z0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJBeUVRREtzQkN3SkFJQVFnQWtjTkFFR2ZBU0VRRE1VQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUpxSVJBQ1FBTkFJQVF0QUFBZ0FVSHR6NENBQUdvdEFBQkhEYTBCSUFGQkFrWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdmQVNFUURNVUNDeUFBUVFBMkFnQWdFRUVCYWlFQlFRd2hFQXlxQVFzQ1FDQUVJQUpIRFFCQm9BRWhFQXpFQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRURhaUVRQWtBRFFDQUVMUUFBSUFGQnZNK0FnQUJxTFFBQVJ3MnNBU0FCUVFOR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJvQUVoRUF6RUFnc2dBRUVBTmdJQUlCQkJBV29oQVVFTklSQU1xUUVMQWtBZ0JDQUNSdzBBUWFFQklSQU13d0lMQWtBQ1FDQUVMUUFBUWJwL2FnNExBS3dCckFHc0Fhd0JyQUdzQWF3QnJBR3NBUUdzQVFzZ0JFRUJhaUVFUVlzQklSQU1xZ0lMSUFSQkFXb2hCRUdNQVNFUURLa0NDd0pBSUFRZ0FrY05BRUdpQVNFUURNSUNDeUFFTFFBQVFkQUFSdzJwQVNBRVFRRnFJUVFNNlFFTEFrQWdCQ0FDUncwQVFhTUJJUkFNd1FJTEFrQUNRQ0FFTFFBQVFiZC9hZzRIQWFvQnFnR3FBYW9CcWdFQXFnRUxJQVJCQVdvaEJFR09BU0VRREtnQ0N5QUVRUUZxSVFGQklpRVFES1lCQ3dKQUlBUWdBa2NOQUVHa0FTRVFETUFDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRRnFJUkFDUUFOQUlBUXRBQUFnQVVIQXo0Q0FBR290QUFCSERhZ0JJQUZCQVVZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR2tBU0VRRE1BQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVIwaEVBeWxBUXNDUUNBRUlBSkhEUUJCcFFFaEVBeS9BZ3NDUUFKQUlBUXRBQUJCcm45cURnTUFxQUVCcUFFTElBUkJBV29oQkVHUUFTRVFES1lDQ3lBRVFRRnFJUUZCQkNFUURLUUJDd0pBSUFRZ0FrY05BRUdtQVNFUURMNENDd0pBQWtBQ1FBSkFBa0FnQkMwQUFFRy9mMm9PRlFDcUFhb0JxZ0dxQWFvQnFnR3FBYW9CcWdHcUFRR3FBYW9CQXFvQnFnRURxZ0dxQVFTcUFRc2dCRUVCYWlFRVFZZ0JJUkFNcUFJTElBUkJBV29oQkVHSkFTRVFES2NDQ3lBRVFRRnFJUVJCaWdFaEVBeW1BZ3NnQkVFQmFpRUVRWThCSVJBTXBRSUxJQVJCQVdvaEJFR1JBU0VRREtRQ0N3SkFJQVFnQWtjTkFFR25BU0VRREwwQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUpxSVJBQ1FBTkFJQVF0QUFBZ0FVSHR6NENBQUdvdEFBQkhEYVVCSUFGQkFrWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUduQVNFUURMMENDeUFBUVFBMkFnQWdFRUVCYWlFQlFSRWhFQXlpQVFzQ1FDQUVJQUpIRFFCQnFBRWhFQXk4QWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUNhaUVRQWtBRFFDQUVMUUFBSUFGQndzK0FnQUJxTFFBQVJ3MmtBU0FCUVFKR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJxQUVoRUF5OEFnc2dBRUVBTmdJQUlCQkJBV29oQVVFc0lSQU1vUUVMQWtBZ0JDQUNSdzBBUWFrQklSQU11d0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkJHb2hFQUpBQTBBZ0JDMEFBQ0FCUWNYUGdJQUFhaTBBQUVjTm93RWdBVUVFUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFha0JJUkFNdXdJTElBQkJBRFlDQUNBUVFRRnFJUUZCS3lFUURLQUJDd0pBSUFRZ0FrY05BRUdxQVNFUURMb0NDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFKcUlSQUNRQU5BSUFRdEFBQWdBVUhLejRDQUFHb3RBQUJIRGFJQklBRkJBa1lOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHcUFTRVFETG9DQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUlFoRUF5ZkFRc0NRQ0FFSUFKSERRQkJxd0VoRUF5NUFnc0NRQUpBQWtBQ1FDQUVMUUFBUWI1L2FnNFBBQUVDcEFHa0FhUUJwQUdrQWFRQnBBR2tBYVFCcEFHa0FRT2tBUXNnQkVFQmFpRUVRWk1CSVJBTW9nSUxJQVJCQVdvaEJFR1VBU0VRREtFQ0N5QUVRUUZxSVFSQmxRRWhFQXlnQWdzZ0JFRUJhaUVFUVpZQklSQU1ud0lMQWtBZ0JDQUNSdzBBUWF3QklSQU11QUlMSUFRdEFBQkJ4UUJIRFo4QklBUkJBV29oQkF6Z0FRc0NRQ0FFSUFKSERRQkJyUUVoRUF5M0Fnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVDYWlFUUFrQURRQ0FFTFFBQUlBRkJ6YytBZ0FCcUxRQUFSdzJmQVNBQlFRSkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCclFFaEVBeTNBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRU9JUkFNbkFFTEFrQWdCQ0FDUncwQVFhNEJJUkFNdGdJTElBUXRBQUJCMEFCSERaMEJJQVJCQVdvaEFVRWxJUkFNbXdFTEFrQWdCQ0FDUncwQVFhOEJJUkFNdFFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJDR29oRUFKQUEwQWdCQzBBQUNBQlFkRFBnSUFBYWkwQUFFY05uUUVnQVVFSVJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRYThCSVJBTXRRSUxJQUJCQURZQ0FDQVFRUUZxSVFGQktpRVFESm9CQ3dKQUlBUWdBa2NOQUVHd0FTRVFETFFDQ3dKQUFrQWdCQzBBQUVHcmYyb09Dd0NkQVowQm5RR2RBWjBCblFHZEFaMEJuUUVCblFFTElBUkJBV29oQkVHYUFTRVFESnNDQ3lBRVFRRnFJUVJCbXdFaEVBeWFBZ3NDUUNBRUlBSkhEUUJCc1FFaEVBeXpBZ3NDUUFKQUlBUXRBQUJCdjM5cURoUUFuQUdjQVp3Qm5BR2NBWndCbkFHY0Fad0JuQUdjQVp3Qm5BR2NBWndCbkFHY0Fad0JBWndCQ3lBRVFRRnFJUVJCbVFFaEVBeWFBZ3NnQkVFQmFpRUVRWndCSVJBTW1RSUxBa0FnQkNBQ1J3MEFRYklCSVJBTXNnSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQTJvaEVBSkFBMEFnQkMwQUFDQUJRZG5QZ0lBQWFpMEFBRWNObWdFZ0FVRURSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWJJQklSQU1zZ0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJJU0VRREpjQkN3SkFJQVFnQWtjTkFFR3pBU0VRRExFQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUVpxSVJBQ1FBTkFJQVF0QUFBZ0FVSGR6NENBQUdvdEFBQkhEWmtCSUFGQkJrWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUd6QVNFUURMRUNDeUFBUVFBMkFnQWdFRUVCYWlFQlFSb2hFQXlXQVFzQ1FDQUVJQUpIRFFCQnRBRWhFQXl3QWdzQ1FBSkFBa0FnQkMwQUFFRzdmMm9PRVFDYUFab0JtZ0dhQVpvQm1nR2FBWm9CbWdFQm1nR2FBWm9CbWdHYUFRS2FBUXNnQkVFQmFpRUVRWjBCSVJBTW1BSUxJQVJCQVdvaEJFR2VBU0VRREpjQ0N5QUVRUUZxSVFSQm53RWhFQXlXQWdzQ1FDQUVJQUpIRFFCQnRRRWhFQXl2QWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUZhaUVRQWtBRFFDQUVMUUFBSUFGQjVNK0FnQUJxTFFBQVJ3MlhBU0FCUVFWR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJ0UUVoRUF5dkFnc2dBRUVBTmdJQUlCQkJBV29oQVVFb0lSQU1sQUVMQWtBZ0JDQUNSdzBBUWJZQklSQU1yZ0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFtb2hFQUpBQTBBZ0JDMEFBQ0FCUWVyUGdJQUFhaTBBQUVjTmxnRWdBVUVDUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFiWUJJUkFNcmdJTElBQkJBRFlDQUNBUVFRRnFJUUZCQnlFUURKTUJDd0pBSUFRZ0FrY05BRUczQVNFUURLMENDd0pBQWtBZ0JDMEFBRUc3ZjJvT0RnQ1dBWllCbGdHV0FaWUJsZ0dXQVpZQmxnR1dBWllCbGdFQmxnRUxJQVJCQVdvaEJFR2hBU0VRREpRQ0N5QUVRUUZxSVFSQm9nRWhFQXlUQWdzQ1FDQUVJQUpIRFFCQnVBRWhFQXlzQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUNhaUVRQWtBRFFDQUVMUUFBSUFGQjdjK0FnQUJxTFFBQVJ3MlVBU0FCUVFKR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJ1QUVoRUF5c0Fnc2dBRUVBTmdJQUlCQkJBV29oQVVFU0lSQU1rUUVMQWtBZ0JDQUNSdzBBUWJrQklSQU1xd0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFXb2hFQUpBQTBBZ0JDMEFBQ0FCUWZEUGdJQUFhaTBBQUVjTmt3RWdBVUVCUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFia0JJUkFNcXdJTElBQkJBRFlDQUNBUVFRRnFJUUZCSUNFUURKQUJDd0pBSUFRZ0FrY05BRUc2QVNFUURLb0NDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFGcUlSQUNRQU5BSUFRdEFBQWdBVUh5ejRDQUFHb3RBQUJIRFpJQklBRkJBVVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHNkFTRVFES29DQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUThoRUF5UEFRc0NRQ0FFSUFKSERRQkJ1d0VoRUF5cEFnc0NRQUpBSUFRdEFBQkJ0MzlxRGdjQWtnR1NBWklCa2dHU0FRR1NBUXNnQkVFQmFpRUVRYVVCSVJBTWtBSUxJQVJCQVdvaEJFR21BU0VRREk4Q0N3SkFJQVFnQWtjTkFFRzhBU0VRREtnQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUWRxSVJBQ1FBTkFJQVF0QUFBZ0FVSDB6NENBQUdvdEFBQkhEWkFCSUFGQkIwWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUc4QVNFUURLZ0NDeUFBUVFBMkFnQWdFRUVCYWlFQlFSc2hFQXlOQVFzQ1FDQUVJQUpIRFFCQnZRRWhFQXluQWdzQ1FBSkFBa0FnQkMwQUFFRytmMm9PRWdDUkFaRUJrUUdSQVpFQmtRR1JBWkVCa1FFQmtRR1JBWkVCa1FHUkFaRUJBcEVCQ3lBRVFRRnFJUVJCcEFFaEVBeVBBZ3NnQkVFQmFpRUVRYWNCSVJBTWpnSUxJQVJCQVdvaEJFR29BU0VRREkwQ0N3SkFJQVFnQWtjTkFFRytBU0VRREtZQ0N5QUVMUUFBUWM0QVJ3Mk5BU0FFUVFGcUlRUU16d0VMQWtBZ0JDQUNSdzBBUWI4QklSQU1wUUlMQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQWdCQzBBQUVHL2Yyb09GUUFCQWdPY0FRUUZCcHdCbkFHY0FRY0lDUW9MbkFFTURRNFBuQUVMSUFSQkFXb2hBVUhvQUNFUURKb0NDeUFFUVFGcUlRRkI2UUFoRUF5WkFnc2dCRUVCYWlFQlFlNEFJUkFNbUFJTElBUkJBV29oQVVIeUFDRVFESmNDQ3lBRVFRRnFJUUZCOHdBaEVBeVdBZ3NnQkVFQmFpRUJRZllBSVJBTWxRSUxJQVJCQVdvaEFVSDNBQ0VRREpRQ0N5QUVRUUZxSVFGQitnQWhFQXlUQWdzZ0JFRUJhaUVFUVlNQklSQU1rZ0lMSUFSQkFXb2hCRUdFQVNFUURKRUNDeUFFUVFGcUlRUkJoUUVoRUF5UUFnc2dCRUVCYWlFRVFaSUJJUkFNandJTElBUkJBV29oQkVHWUFTRVFESTRDQ3lBRVFRRnFJUVJCb0FFaEVBeU5BZ3NnQkVFQmFpRUVRYU1CSVJBTWpBSUxJQVJCQVdvaEJFR3FBU0VRRElzQ0N3SkFJQVFnQWtZTkFDQUFRWkNBZ0lBQU5nSUlJQUFnQkRZQ0JFR3JBU0VRRElzQ0MwSEFBU0VRREtNQ0N5QUFJQVVnQWhDcWdJQ0FBQ0lCRFlzQklBVWhBUXhjQ3dKQUlBWWdBa1lOQUNBR1FRRnFJUVVNalFFTFFjSUJJUkFNb1FJTEEwQUNRQ0FRTFFBQVFYWnFEZ1NNQVFBQWp3RUFDeUFRUVFGcUloQWdBa2NOQUF0Qnd3RWhFQXlnQWdzQ1FDQUhJQUpHRFFBZ0FFR1JnSUNBQURZQ0NDQUFJQWMyQWdRZ0J5RUJRUUVoRUF5SEFndEJ4QUVoRUF5ZkFnc0NRQ0FISUFKSERRQkJ4UUVoRUF5ZkFnc0NRQUpBSUFjdEFBQkJkbW9PQkFIT0FjNEJBTTRCQ3lBSFFRRnFJUVlNalFFTElBZEJBV29oQlF5SkFRc0NRQ0FISUFKSERRQkJ4Z0VoRUF5ZUFnc0NRQUpBSUFjdEFBQkJkbW9PRndHUEFZOEJBWThCandHUEFZOEJqd0dQQVk4Qmp3R1BBWThCandHUEFZOEJqd0dQQVk4Qmp3R1BBUUNQQVFzZ0IwRUJhaUVIQzBHd0FTRVFESVFDQ3dKQUlBZ2dBa2NOQUVISUFTRVFESjBDQ3lBSUxRQUFRU0JIRFkwQklBQkJBRHNCTWlBSVFRRnFJUUZCc3dFaEVBeURBZ3NnQVNFWEFrQURRQ0FYSWdjZ0FrWU5BU0FITFFBQVFWQnFRZjhCY1NJUVFRcFBEY3dCQWtBZ0FDOEJNaUlVUVprelN3MEFJQUFnRkVFS2JDSVVPd0V5SUJCQi8vOERjeUFVUWY3L0EzRkpEUUFnQjBFQmFpRVhJQUFnRkNBUWFpSVFPd0V5SUJCQi8vOERjVUhvQjBrTkFRc0xRUUFoRUNBQVFRQTJBaHdnQUVIQmlZQ0FBRFlDRUNBQVFRMDJBZ3dnQUNBSFFRRnFOZ0lVREp3Q0MwSEhBU0VRREpzQ0N5QUFJQWdnQWhDdWdJQ0FBQ0lRUlEzS0FTQVFRUlZIRFl3QklBQkJ5QUUyQWh3Z0FDQUlOZ0lVSUFCQnlaZUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBeWFBZ3NDUUNBSklBSkhEUUJCekFFaEVBeWFBZ3RCQUNFVVFRRWhGMEVCSVJaQkFDRVFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQWt0QUFCQlVHb09DcFlCbFFFQUFRSURCQVVHQ0pjQkMwRUNJUkFNQmd0QkF5RVFEQVVMUVFRaEVBd0VDMEVGSVJBTUF3dEJCaUVRREFJTFFRY2hFQXdCQzBFSUlSQUxRUUFoRjBFQUlSWkJBQ0VVREk0QkMwRUpJUkJCQVNFVVFRQWhGMEVBSVJZTWpRRUxBa0FnQ2lBQ1J3MEFRYzRCSVJBTW1RSUxJQW90QUFCQkxrY05qZ0VnQ2tFQmFpRUpETW9CQ3lBTElBSkhEWTRCUWRBQklSQU1sd0lMQWtBZ0N5QUNSZzBBSUFCQmpvQ0FnQUEyQWdnZ0FDQUxOZ0lFUWJjQklSQU0vZ0VMUWRFQklSQU1sZ0lMQWtBZ0JDQUNSdzBBUWRJQklSQU1sZ0lMSUFJZ0JHc2dBQ2dDQUNJUWFpRVVJQVFnRUd0QkJHb2hDd05BSUFRdEFBQWdFRUg4ejRDQUFHb3RBQUJIRFk0QklCQkJCRVlONlFFZ0VFRUJhaUVRSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQjBnRWhFQXlWQWdzZ0FDQU1JQUlRcklDQWdBQWlBUTJOQVNBTUlRRU11QUVMQWtBZ0JDQUNSdzBBUWRRQklSQU1sQUlMSUFJZ0JHc2dBQ2dDQUNJUWFpRVVJQVFnRUd0QkFXb2hEQU5BSUFRdEFBQWdFRUdCMElDQUFHb3RBQUJIRFk4QklCQkJBVVlOamdFZ0VFRUJhaUVRSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQjFBRWhFQXlUQWdzQ1FDQUVJQUpIRFFCQjFnRWhFQXlUQWdzZ0FpQUVheUFBS0FJQUloQnFJUlFnQkNBUWEwRUNhaUVMQTBBZ0JDMEFBQ0FRUVlQUWdJQUFhaTBBQUVjTmpnRWdFRUVDUmcyUUFTQVFRUUZxSVJBZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFSFdBU0VRREpJQ0N3SkFJQVFnQWtjTkFFSFhBU0VRREpJQ0N3SkFBa0FnQkMwQUFFRzdmMm9PRUFDUEFZOEJqd0dQQVk4Qmp3R1BBWThCandHUEFZOEJqd0dQQVk4QkFZOEJDeUFFUVFGcUlRUkJ1d0VoRUF6NUFRc2dCRUVCYWlFRVFid0JJUkFNK0FFTEFrQWdCQ0FDUncwQVFkZ0JJUkFNa1FJTElBUXRBQUJCeUFCSERZd0JJQVJCQVdvaEJBekVBUXNDUUNBRUlBSkdEUUFnQUVHUWdJQ0FBRFlDQ0NBQUlBUTJBZ1JCdmdFaEVBejNBUXRCMlFFaEVBeVBBZ3NDUUNBRUlBSkhEUUJCMmdFaEVBeVBBZ3NnQkMwQUFFSElBRVlOd3dFZ0FFRUJPZ0FvRExrQkN5QUFRUUk2QUM4Z0FDQUVJQUlRcG9DQWdBQWlFQTJOQVVIQ0FTRVFEUFFCQ3lBQUxRQW9RWDlxRGdLM0Fia0J1QUVMQTBBQ1FDQUVMUUFBUVhacURnUUFqZ0dPQVFDT0FRc2dCRUVCYWlJRUlBSkhEUUFMUWQwQklSQU1pd0lMSUFCQkFEb0FMeUFBTFFBdFFRUnhSUTJFQWdzZ0FFRUFPZ0F2SUFCQkFUb0FOQ0FCSVFFTWpBRUxJQkJCRlVZTjJnRWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFhZU9nSUFBTmdJUUlBQkJFallDREVFQUlSQU1pQUlMQWtBZ0FDQVFJQUlRdElDQWdBQWlCQTBBSUJBaEFReUJBZ3NDUUNBRVFSVkhEUUFnQUVFRE5nSWNJQUFnRURZQ0ZDQUFRYkNZZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNaUFJTElBQkJBRFlDSENBQUlCQTJBaFFnQUVHbmpvQ0FBRFlDRUNBQVFSSTJBZ3hCQUNFUURJY0NDeUFRUVJWR0RkWUJJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFSGFqWUNBQURZQ0VDQUFRUlEyQWd4QkFDRVFESVlDQ3lBQUtBSUVJUmNnQUVFQU5nSUVJQkFnRWFkcUloWWhBU0FBSUJjZ0VDQVdJQlFiSWhBUXRZQ0FnQUFpRkVVTmpRRWdBRUVITmdJY0lBQWdFRFlDRkNBQUlCUTJBZ3hCQUNFUURJVUNDeUFBSUFBdkFUQkJnQUZ5T3dFd0lBRWhBUXRCS2lFUURPb0JDeUFRUVJWR0RkRUJJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFR0RqSUNBQURZQ0VDQUFRUk0yQWd4QkFDRVFESUlDQ3lBUVFSVkdEYzhCSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUdhajRDQUFEWUNFQ0FBUVNJMkFneEJBQ0VRRElFQ0N5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRdDRDQWdBQWlFQTBBSUFGQkFXb2hBUXlOQVFzZ0FFRU1OZ0ljSUFBZ0VEWUNEQ0FBSUFGQkFXbzJBaFJCQUNFUURJQUNDeUFRUVJWR0Rjd0JJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFR2FqNENBQURZQ0VDQUFRU0kyQWd4QkFDRVFEUDhCQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVF0NENBZ0FBaUVBMEFJQUZCQVdvaEFReU1BUXNnQUVFTk5nSWNJQUFnRURZQ0RDQUFJQUZCQVdvMkFoUkJBQ0VRRFA0QkN5QVFRUlZHRGNrQklBQkJBRFlDSENBQUlBRTJBaFFnQUVIR2pJQ0FBRFlDRUNBQVFTTTJBZ3hCQUNFUURQMEJDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXVZQ0FnQUFpRUEwQUlBRkJBV29oQVF5TEFRc2dBRUVPTmdJY0lBQWdFRFlDRENBQUlBRkJBV28yQWhSQkFDRVFEUHdCQ3lBQVFRQTJBaHdnQUNBQk5nSVVJQUJCd0pXQWdBQTJBaEFnQUVFQ05nSU1RUUFoRUF6N0FRc2dFRUVWUmczRkFTQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnhveUFnQUEyQWhBZ0FFRWpOZ0lNUVFBaEVBejZBUXNnQUVFUU5nSWNJQUFnQVRZQ0ZDQUFJQkEyQWd4QkFDRVFEUGtCQ3lBQUtBSUVJUVFnQUVFQU5nSUVBa0FnQUNBRUlBRVF1WUNBZ0FBaUJBMEFJQUZCQVdvaEFRenhBUXNnQUVFUk5nSWNJQUFnQkRZQ0RDQUFJQUZCQVdvMkFoUkJBQ0VRRFBnQkN5QVFRUlZHRGNFQklBQkJBRFlDSENBQUlBRTJBaFFnQUVIR2pJQ0FBRFlDRUNBQVFTTTJBZ3hCQUNFUURQY0JDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXVZQ0FnQUFpRUEwQUlBRkJBV29oQVF5SUFRc2dBRUVUTmdJY0lBQWdFRFlDRENBQUlBRkJBV28yQWhSQkFDRVFEUFlCQ3lBQUtBSUVJUVFnQUVFQU5nSUVBa0FnQUNBRUlBRVF1WUNBZ0FBaUJBMEFJQUZCQVdvaEFRenRBUXNnQUVFVU5nSWNJQUFnQkRZQ0RDQUFJQUZCQVdvMkFoUkJBQ0VRRFBVQkN5QVFRUlZHRGIwQklBQkJBRFlDSENBQUlBRTJBaFFnQUVHYWo0Q0FBRFlDRUNBQVFTSTJBZ3hCQUNFUURQUUJDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXQ0Q0FnQUFpRUEwQUlBRkJBV29oQVF5R0FRc2dBRUVXTmdJY0lBQWdFRFlDRENBQUlBRkJBV28yQWhSQkFDRVFEUE1CQ3lBQUtBSUVJUVFnQUVFQU5nSUVBa0FnQUNBRUlBRVF0NENBZ0FBaUJBMEFJQUZCQVdvaEFRenBBUXNnQUVFWE5nSWNJQUFnQkRZQ0RDQUFJQUZCQVdvMkFoUkJBQ0VRRFBJQkN5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnpaT0FnQUEyQWhBZ0FFRU1OZ0lNUVFBaEVBenhBUXRDQVNFUkN5QVFRUUZxSVFFQ1FDQUFLUU1nSWhKQy8vLy8vLy8vLy84UFZnMEFJQUFnRWtJRWhpQVJoRGNESUNBQklRRU1oQUVMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUd0aVlDQUFEWUNFQ0FBUVF3MkFneEJBQ0VRRE84QkN5QUFRUUEyQWh3Z0FDQVFOZ0lVSUFCQnpaT0FnQUEyQWhBZ0FFRU1OZ0lNUVFBaEVBenVBUXNnQUNnQ0JDRVhJQUJCQURZQ0JDQVFJQkduYWlJV0lRRWdBQ0FYSUJBZ0ZpQVVHeUlRRUxXQWdJQUFJaFJGRFhNZ0FFRUZOZ0ljSUFBZ0VEWUNGQ0FBSUJRMkFneEJBQ0VRRE8wQkN5QUFRUUEyQWh3Z0FDQVFOZ0lVSUFCQnFweUFnQUEyQWhBZ0FFRVBOZ0lNUVFBaEVBenNBUXNnQUNBUUlBSVF0SUNBZ0FBaUFRMEJJQkFoQVF0QkRpRVFETkVCQ3dKQUlBRkJGVWNOQUNBQVFRSTJBaHdnQUNBUU5nSVVJQUJCc0ppQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF6cUFRc2dBRUVBTmdJY0lBQWdFRFlDRkNBQVFhZU9nSUFBTmdJUUlBQkJFallDREVFQUlSQU02UUVMSUFGQkFXb2hFQUpBSUFBdkFUQWlBVUdBQVhGRkRRQUNRQ0FBSUJBZ0FoQzdnSUNBQUNJQkRRQWdFQ0VCREhBTElBRkJGVWNOdWdFZ0FFRUZOZ0ljSUFBZ0VEWUNGQ0FBUWZtWGdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTTZRRUxBa0FnQVVHZ0JIRkJvQVJIRFFBZ0FDMEFMVUVDY1EwQUlBQkJBRFlDSENBQUlCQTJBaFFnQUVHV2s0Q0FBRFlDRUNBQVFRUTJBZ3hCQUNFUURPa0JDeUFBSUJBZ0FoQzlnSUNBQUJvZ0VDRUJBa0FDUUFKQUFrQUNRQ0FBSUJBZ0FoQ3pnSUNBQUE0V0FnRUFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBd1FMSUFCQkFUb0FMZ3NnQUNBQUx3RXdRY0FBY2pzQk1DQVFJUUVMUVNZaEVBelJBUXNnQUVFak5nSWNJQUFnRURZQ0ZDQUFRYVdXZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNNlFFTElBQkJBRFlDSENBQUlCQTJBaFFnQUVIVmk0Q0FBRFlDRUNBQVFSRTJBZ3hCQUNFUURPZ0JDeUFBTFFBdFFRRnhSUTBCUWNNQklSQU16Z0VMQWtBZ0RTQUNSZzBBQTBBQ1FDQU5MUUFBUVNCR0RRQWdEU0VCRE1RQkN5QU5RUUZxSWcwZ0FrY05BQXRCSlNFUURPY0JDMEVsSVJBTTVnRUxJQUFvQWdRaEJDQUFRUUEyQWdRZ0FDQUVJQTBRcjRDQWdBQWlCRVVOclFFZ0FFRW1OZ0ljSUFBZ0JEWUNEQ0FBSUExQkFXbzJBaFJCQUNFUURPVUJDeUFRUVJWR0Rhc0JJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFSDlqWUNBQURZQ0VDQUFRUjAyQWd4QkFDRVFET1FCQ3lBQVFTYzJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNNHdFTElCQWhBVUVCSVJRQ1FBSkFBa0FDUUFKQUFrQUNRQ0FBTFFBc1FYNXFEZ2NHQlFVREFRSUFCUXNnQUNBQUx3RXdRUWh5T3dFd0RBTUxRUUloRkF3QkMwRUVJUlFMSUFCQkFUb0FMQ0FBSUFBdkFUQWdGSEk3QVRBTElCQWhBUXRCS3lFUURNb0JDeUFBUVFBMkFod2dBQ0FRTmdJVUlBQkJxNUtBZ0FBMkFoQWdBRUVMTmdJTVFRQWhFQXppQVFzZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWVHUGdJQUFOZ0lRSUFCQkNqWUNERUVBSVJBTTRRRUxJQUJCQURvQUxDQVFJUUVNdlFFTElCQWhBVUVCSVJRQ1FBSkFBa0FDUUFKQUlBQXRBQ3hCZTJvT0JBTUJBZ0FGQ3lBQUlBQXZBVEJCQ0hJN0FUQU1Bd3RCQWlFVURBRUxRUVFoRkFzZ0FFRUJPZ0FzSUFBZ0FDOEJNQ0FVY2pzQk1Bc2dFQ0VCQzBFcElSQU14UUVMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUh3bElDQUFEWUNFQ0FBUVFNMkFneEJBQ0VRRE4wQkN3SkFJQTR0QUFCQkRVY05BQ0FBS0FJRUlRRWdBRUVBTmdJRUFrQWdBQ0FCSUE0UXNZQ0FnQUFpQVEwQUlBNUJBV29oQVF4MUN5QUFRU3cyQWh3Z0FDQUJOZ0lNSUFBZ0RrRUJhallDRkVFQUlSQU0zUUVMSUFBdEFDMUJBWEZGRFFGQnhBRWhFQXpEQVFzQ1FDQU9JQUpIRFFCQkxTRVFETndCQ3dKQUFrQURRQUpBSUE0dEFBQkJkbW9PQkFJQUFBTUFDeUFPUVFGcUlnNGdBa2NOQUF0QkxTRVFETjBCQ3lBQUtBSUVJUUVnQUVFQU5nSUVBa0FnQUNBQklBNFFzWUNBZ0FBaUFRMEFJQTRoQVF4MEN5QUFRU3cyQWh3Z0FDQU9OZ0lVSUFBZ0FUWUNERUVBSVJBTTNBRUxJQUFvQWdRaEFTQUFRUUEyQWdRQ1FDQUFJQUVnRGhDeGdJQ0FBQ0lCRFFBZ0RrRUJhaUVCREhNTElBQkJMRFlDSENBQUlBRTJBZ3dnQUNBT1FRRnFOZ0lVUVFBaEVBemJBUXNnQUNnQ0JDRUVJQUJCQURZQ0JDQUFJQVFnRGhDeGdJQ0FBQ0lFRGFBQklBNGhBUXpPQVFzZ0VFRXNSdzBCSUFGQkFXb2hFRUVCSVFFQ1FBSkFBa0FDUUFKQUlBQXRBQ3hCZTJvT0JBTUJBZ1FBQ3lBUUlRRU1CQXRCQWlFQkRBRUxRUVFoQVFzZ0FFRUJPZ0FzSUFBZ0FDOEJNQ0FCY2pzQk1DQVFJUUVNQVFzZ0FDQUFMd0V3UVFoeU93RXdJQkFoQVF0Qk9TRVFETDhCQ3lBQVFRQTZBQ3dnQVNFQkMwRTBJUkFNdlFFTElBQWdBQzhCTUVFZ2Nqc0JNQ0FCSVFFTUFnc2dBQ2dDQkNFRUlBQkJBRFlDQkFKQUlBQWdCQ0FCRUxHQWdJQUFJZ1FOQUNBQklRRU14d0VMSUFCQk56WUNIQ0FBSUFFMkFoUWdBQ0FFTmdJTVFRQWhFQXpVQVFzZ0FFRUlPZ0FzSUFFaEFRdEJNQ0VRRExrQkN3SkFJQUF0QUNoQkFVWU5BQ0FCSVFFTUJBc2dBQzBBTFVFSWNVVU5rd0VnQVNFQkRBTUxJQUF0QURCQklIRU5sQUZCeFFFaEVBeTNBUXNDUUNBUElBSkdEUUFDUUFOQUFrQWdEeTBBQUVGUWFpSUJRZjhCY1VFS1NRMEFJQThoQVVFMUlSQU11Z0VMSUFBcEF5QWlFVUtacytiTW1iUG16QmxXRFFFZ0FDQVJRZ3ArSWhFM0F5QWdFU0FCclVML0FZTWlFa0ovaFZZTkFTQUFJQkVnRW53M0F5QWdEMEVCYWlJUElBSkhEUUFMUVRraEVBelJBUXNnQUNnQ0JDRUNJQUJCQURZQ0JDQUFJQUlnRDBFQmFpSUVFTEdBZ0lBQUlnSU5sUUVnQkNFQkRNTUJDMEU1SVJBTXp3RUxBa0FnQUM4Qk1DSUJRUWh4UlEwQUlBQXRBQ2hCQVVjTkFDQUFMUUF0UVFoeFJRMlFBUXNnQUNBQlFmZjdBM0ZCZ0FSeU93RXdJQThoQVF0Qk55RVFETFFCQ3lBQUlBQXZBVEJCRUhJN0FUQU1xd0VMSUJCQkZVWU5pd0VnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZkNPZ0lBQU5nSVFJQUJCSERZQ0RFRUFJUkFNeXdFTElBQkJ3d0EyQWh3Z0FDQUJOZ0lNSUFBZ0RVRUJhallDRkVFQUlSQU15Z0VMQWtBZ0FTMEFBRUU2UncwQUlBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkN2Z0lDQUFDSVFEUUFnQVVFQmFpRUJER01MSUFCQnd3QTJBaHdnQUNBUU5nSU1JQUFnQVVFQmFqWUNGRUVBSVJBTXlnRUxJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFR3hrWUNBQURZQ0VDQUFRUW8yQWd4QkFDRVFETWtCQ3lBQVFRQTJBaHdnQUNBQk5nSVVJQUJCb0ptQWdBQTJBaEFnQUVFZU5nSU1RUUFoRUF6SUFRc2dBRUVBTmdJQUN5QUFRWUFTT3dFcUlBQWdGMEVCYWlJQklBSVFxSUNBZ0FBaUVBMEJJQUVoQVF0Qnh3QWhFQXlzQVFzZ0VFRVZSdzJEQVNBQVFkRUFOZ0ljSUFBZ0FUWUNGQ0FBUWVPWGdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTXhBRUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDbmdJQ0FBQ0lRRFFBZ0FTRUJERjRMSUFCQjBnQTJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNd3dFTElBQkJBRFlDSENBQUlCUTJBaFFnQUVIQnFJQ0FBRFlDRUNBQVFRYzJBZ3dnQUVFQU5nSUFRUUFoRUF6Q0FRc2dBQ2dDQkNFUUlBQkJBRFlDQkFKQUlBQWdFQ0FCRUtlQWdJQUFJaEFOQUNBQklRRU1YUXNnQUVIVEFEWUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXpCQVF0QkFDRVFJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFR0FrWUNBQURZQ0VDQUFRUWsyQWd3TXdBRUxJQkJCRlVZTmZTQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQmxJMkFnQUEyQWhBZ0FFRWhOZ0lNUVFBaEVBeS9BUXRCQVNFV1FRQWhGMEVBSVJSQkFTRVFDeUFBSUJBNkFDc2dBVUVCYWlFQkFrQUNRQ0FBTFFBdFFSQnhEUUFDUUFKQUFrQWdBQzBBS2c0REFRQUNCQXNnRmtVTkF3d0NDeUFVRFFFTUFnc2dGMFVOQVFzZ0FDZ0NCQ0VRSUFCQkFEWUNCQUpBSUFBZ0VDQUJFSzJBZ0lBQUloQU5BQ0FCSVFFTVhBc2dBRUhZQURZQ0hDQUFJQUUyQWhRZ0FDQVFOZ0lNUVFBaEVBeStBUXNnQUNnQ0JDRUVJQUJCQURZQ0JBSkFJQUFnQkNBQkVLMkFnSUFBSWdRTkFDQUJJUUVNclFFTElBQkIyUUEyQWh3Z0FDQUJOZ0lVSUFBZ0JEWUNERUVBSVJBTXZRRUxJQUFvQWdRaEJDQUFRUUEyQWdRQ1FDQUFJQVFnQVJDdGdJQ0FBQ0lFRFFBZ0FTRUJES3NCQ3lBQVFkb0FOZ0ljSUFBZ0FUWUNGQ0FBSUFRMkFneEJBQ0VRREx3QkN5QUFLQUlFSVFRZ0FFRUFOZ0lFQWtBZ0FDQUVJQUVRcllDQWdBQWlCQTBBSUFFaEFReXBBUXNnQUVIY0FEWUNIQ0FBSUFFMkFoUWdBQ0FFTmdJTVFRQWhFQXk3QVFzQ1FDQUJMUUFBUVZCcUloQkIvd0Z4UVFwUERRQWdBQ0FRT2dBcUlBRkJBV29oQVVIUEFDRVFES0lCQ3lBQUtBSUVJUVFnQUVFQU5nSUVBa0FnQUNBRUlBRVFyWUNBZ0FBaUJBMEFJQUVoQVF5bkFRc2dBRUhlQURZQ0hDQUFJQUUyQWhRZ0FDQUVOZ0lNUVFBaEVBeTZBUXNnQUVFQU5nSUFJQmRCQVdvaEFRSkFJQUF0QUNsQkkwOE5BQ0FCSVFFTVdRc2dBRUVBTmdJY0lBQWdBVFlDRkNBQVFkT0pnSUFBTmdJUUlBQkJDRFlDREVFQUlSQU11UUVMSUFCQkFEWUNBQXRCQUNFUUlBQkJBRFlDSENBQUlBRTJBaFFnQUVHUXM0Q0FBRFlDRUNBQVFRZzJBZ3dNdHdFTElBQkJBRFlDQUNBWFFRRnFJUUVDUUNBQUxRQXBRU0ZIRFFBZ0FTRUJERllMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUdiaW9DQUFEWUNFQ0FBUVFnMkFneEJBQ0VRRExZQkN5QUFRUUEyQWdBZ0YwRUJhaUVCQWtBZ0FDMEFLU0lRUVYxcVFRdFBEUUFnQVNFQkRGVUxBa0FnRUVFR1N3MEFRUUVnRUhSQnlnQnhSUTBBSUFFaEFReFZDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWZlSmdJQUFOZ0lRSUFCQkNEWUNEQXkxQVFzZ0VFRVZSZzF4SUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUc1allDQUFEWUNFQ0FBUVJvMkFneEJBQ0VRRExRQkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRcDRDQWdBQWlFQTBBSUFFaEFReFVDeUFBUWVVQU5nSWNJQUFnQVRZQ0ZDQUFJQkEyQWd4QkFDRVFETE1CQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVFwNENBZ0FBaUVBMEFJQUVoQVF4TkN5QUFRZElBTmdJY0lBQWdBVFlDRkNBQUlCQTJBZ3hCQUNFUURMSUJDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXA0Q0FnQUFpRUEwQUlBRWhBUXhOQ3lBQVFkTUFOZ0ljSUFBZ0FUWUNGQ0FBSUJBMkFneEJBQ0VRRExFQkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRcDRDQWdBQWlFQTBBSUFFaEFReFJDeUFBUWVVQU5nSWNJQUFnQVRZQ0ZDQUFJQkEyQWd4QkFDRVFETEFCQ3lBQVFRQTJBaHdnQUNBQk5nSVVJQUJCeG9xQWdBQTJBaEFnQUVFSE5nSU1RUUFoRUF5dkFRc2dBQ2dDQkNFUUlBQkJBRFlDQkFKQUlBQWdFQ0FCRUtlQWdJQUFJaEFOQUNBQklRRU1TUXNnQUVIU0FEWUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXl1QVFzZ0FDZ0NCQ0VRSUFCQkFEWUNCQUpBSUFBZ0VDQUJFS2VBZ0lBQUloQU5BQ0FCSVFFTVNRc2dBRUhUQURZQ0hDQUFJQUUyQWhRZ0FDQVFOZ0lNUVFBaEVBeXRBUXNnQUNnQ0JDRVFJQUJCQURZQ0JBSkFJQUFnRUNBQkVLZUFnSUFBSWhBTkFDQUJJUUVNVFFzZ0FFSGxBRFlDSENBQUlBRTJBaFFnQUNBUU5nSU1RUUFoRUF5c0FRc2dBRUVBTmdJY0lBQWdBVFlDRkNBQVFkeUlnSUFBTmdJUUlBQkJCellDREVFQUlSQU1xd0VMSUJCQlAwY05BU0FCUVFGcUlRRUxRUVVoRUF5UUFRdEJBQ0VRSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUg5a29DQUFEWUNFQ0FBUVFjMkFnd01xQUVMSUFBb0FnUWhFQ0FBUVFBMkFnUUNRQ0FBSUJBZ0FSQ25nSUNBQUNJUURRQWdBU0VCREVJTElBQkIwZ0EyQWh3Z0FDQUJOZ0lVSUFBZ0VEWUNERUVBSVJBTXB3RUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDbmdJQ0FBQ0lRRFFBZ0FTRUJERUlMSUFCQjB3QTJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNcGdFTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkNuZ0lDQUFDSVFEUUFnQVNFQkRFWUxJQUJCNVFBMkFod2dBQ0FCTmdJVUlBQWdFRFlDREVFQUlSQU1wUUVMSUFBb0FnUWhBU0FBUVFBMkFnUUNRQ0FBSUFFZ0ZCQ25nSUNBQUNJQkRRQWdGQ0VCREQ4TElBQkIwZ0EyQWh3Z0FDQVVOZ0lVSUFBZ0FUWUNERUVBSVJBTXBBRUxJQUFvQWdRaEFTQUFRUUEyQWdRQ1FDQUFJQUVnRkJDbmdJQ0FBQ0lCRFFBZ0ZDRUJERDhMSUFCQjB3QTJBaHdnQUNBVU5nSVVJQUFnQVRZQ0RFRUFJUkFNb3dFTElBQW9BZ1FoQVNBQVFRQTJBZ1FDUUNBQUlBRWdGQkNuZ0lDQUFDSUJEUUFnRkNFQkRFTUxJQUJCNVFBMkFod2dBQ0FVTmdJVUlBQWdBVFlDREVFQUlSQU1vZ0VMSUFCQkFEWUNIQ0FBSUJRMkFoUWdBRUhEajRDQUFEWUNFQ0FBUVFjMkFneEJBQ0VRREtFQkN5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnc0K0FnQUEyQWhBZ0FFRUhOZ0lNUVFBaEVBeWdBUXRCQUNFUUlBQkJBRFlDSENBQUlCUTJBaFFnQUVHTW5JQ0FBRFlDRUNBQVFRYzJBZ3dNbndFTElBQkJBRFlDSENBQUlCUTJBaFFnQUVHTW5JQ0FBRFlDRUNBQVFRYzJBZ3hCQUNFUURKNEJDeUFBUVFBMkFod2dBQ0FVTmdJVUlBQkIvcEdBZ0FBMkFoQWdBRUVITmdJTVFRQWhFQXlkQVFzZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVk2YmdJQUFOZ0lRSUFCQkJqWUNERUVBSVJBTW5BRUxJQkJCRlVZTlZ5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnpJNkFnQUEyQWhBZ0FFRWdOZ0lNUVFBaEVBeWJBUXNnQUVFQU5nSUFJQkJCQVdvaEFVRWtJUkFMSUFBZ0VEb0FLU0FBS0FJRUlSQWdBRUVBTmdJRUlBQWdFQ0FCRUt1QWdJQUFJaEFOVkNBQklRRU1QZ3NnQUVFQU5nSUFDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0JEWUNGQ0FBUWZHYmdJQUFOZ0lRSUFCQkJqWUNEQXlYQVFzZ0FVRVZSZzFRSUFCQkFEWUNIQ0FBSUFVMkFoUWdBRUh3aklDQUFEWUNFQ0FBUVJzMkFneEJBQ0VRREpZQkN5QUFLQUlFSVFVZ0FFRUFOZ0lFSUFBZ0JTQVFFS21BZ0lBQUlnVU5BU0FRUVFGcUlRVUxRYTBCSVJBTWV3c2dBRUhCQVRZQ0hDQUFJQVUyQWd3Z0FDQVFRUUZxTmdJVVFRQWhFQXlUQVFzZ0FDZ0NCQ0VHSUFCQkFEWUNCQ0FBSUFZZ0VCQ3BnSUNBQUNJR0RRRWdFRUVCYWlFR0MwR3VBU0VRREhnTElBQkJ3Z0UyQWh3Z0FDQUdOZ0lNSUFBZ0VFRUJhallDRkVFQUlSQU1rQUVMSUFCQkFEWUNIQ0FBSUFjMkFoUWdBRUdYaTRDQUFEWUNFQ0FBUVEwMkFneEJBQ0VRREk4QkN5QUFRUUEyQWh3Z0FDQUlOZ0lVSUFCQjQ1Q0FnQUEyQWhBZ0FFRUpOZ0lNUVFBaEVBeU9BUXNnQUVFQU5nSWNJQUFnQ0RZQ0ZDQUFRWlNOZ0lBQU5nSVFJQUJCSVRZQ0RFRUFJUkFNalFFTFFRRWhGa0VBSVJkQkFDRVVRUUVoRUFzZ0FDQVFPZ0FySUFsQkFXb2hDQUpBQWtBZ0FDMEFMVUVRY1EwQUFrQUNRQUpBSUFBdEFDb09Bd0VBQWdRTElCWkZEUU1NQWdzZ0ZBMEJEQUlMSUJkRkRRRUxJQUFvQWdRaEVDQUFRUUEyQWdRZ0FDQVFJQWdRcllDQWdBQWlFRVVOUFNBQVFja0JOZ0ljSUFBZ0NEWUNGQ0FBSUJBMkFneEJBQ0VRREl3QkN5QUFLQUlFSVFRZ0FFRUFOZ0lFSUFBZ0JDQUlFSzJBZ0lBQUlnUkZEWFlnQUVIS0FUWUNIQ0FBSUFnMkFoUWdBQ0FFTmdJTVFRQWhFQXlMQVFzZ0FDZ0NCQ0VFSUFCQkFEWUNCQ0FBSUFRZ0NSQ3RnSUNBQUNJRVJRMTBJQUJCeXdFMkFod2dBQ0FKTmdJVUlBQWdCRFlDREVFQUlSQU1pZ0VMSUFBb0FnUWhCQ0FBUVFBMkFnUWdBQ0FFSUFvUXJZQ0FnQUFpQkVVTmNpQUFRYzBCTmdJY0lBQWdDallDRkNBQUlBUTJBZ3hCQUNFUURJa0JDd0pBSUFzdEFBQkJVR29pRUVIL0FYRkJDazhOQUNBQUlCQTZBQ29nQzBFQmFpRUtRYllCSVJBTWNBc2dBQ2dDQkNFRUlBQkJBRFlDQkNBQUlBUWdDeEN0Z0lDQUFDSUVSUTF3SUFCQnp3RTJBaHdnQUNBTE5nSVVJQUFnQkRZQ0RFRUFJUkFNaUFFTElBQkJBRFlDSENBQUlBUTJBaFFnQUVHUXM0Q0FBRFlDRUNBQVFRZzJBZ3dnQUVFQU5nSUFRUUFoRUF5SEFRc2dBVUVWUmcwL0lBQkJBRFlDSENBQUlBdzJBaFFnQUVITWpvQ0FBRFlDRUNBQVFTQTJBZ3hCQUNFUURJWUJDeUFBUVlFRU93RW9JQUFvQWdRaEVDQUFRZ0EzQXdBZ0FDQVFJQXhCQVdvaURCQ3JnSUNBQUNJUVJRMDRJQUJCMHdFMkFod2dBQ0FNTmdJVUlBQWdFRFlDREVFQUlSQU1oUUVMSUFCQkFEWUNBQXRCQUNFUUlBQkJBRFlDSENBQUlBUTJBaFFnQUVIWW00Q0FBRFlDRUNBQVFRZzJBZ3dNZ3dFTElBQW9BZ1FoRUNBQVFnQTNBd0FnQUNBUUlBdEJBV29pQ3hDcmdJQ0FBQ0lRRFFGQnhnRWhFQXhwQ3lBQVFRSTZBQ2dNVlFzZ0FFSFZBVFlDSENBQUlBczJBaFFnQUNBUU5nSU1RUUFoRUF5QUFRc2dFRUVWUmcwM0lBQkJBRFlDSENBQUlBUTJBaFFnQUVHa2pJQ0FBRFlDRUNBQVFSQTJBZ3hCQUNFUURIOExJQUF0QURSQkFVY05OQ0FBSUFRZ0FoQzhnSUNBQUNJUVJRMDBJQkJCRlVjTk5TQUFRZHdCTmdJY0lBQWdCRFlDRkNBQVFkV1dnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1mZ3RCQUNFUUlBQkJBRFlDSENBQVFhK0xnSUFBTmdJUUlBQkJBallDRENBQUlCUkJBV28yQWhRTWZRdEJBQ0VRREdNTFFRSWhFQXhpQzBFTklSQU1ZUXRCRHlFUURHQUxRU1VoRUF4ZkMwRVRJUkFNWGd0QkZTRVFERjBMUVJZaEVBeGNDMEVYSVJBTVd3dEJHQ0VRREZvTFFSa2hFQXhaQzBFYUlSQU1XQXRCR3lFUURGY0xRUndoRUF4V0MwRWRJUkFNVlF0Qkh5RVFERlFMUVNFaEVBeFRDMEVqSVJBTVVndEJ4Z0FoRUF4UkMwRXVJUkFNVUF0Qkx5RVFERThMUVRzaEVBeE9DMEU5SVJBTVRRdEJ5QUFoRUF4TUMwSEpBQ0VRREVzTFFjc0FJUkFNU2d0QnpBQWhFQXhKQzBIT0FDRVFERWdMUWRFQUlSQU1Sd3RCMVFBaEVBeEdDMEhZQUNFUURFVUxRZGtBSVJBTVJBdEIyd0FoRUF4REMwSGtBQ0VRREVJTFFlVUFJUkFNUVF0QjhRQWhFQXhBQzBIMEFDRVFERDhMUVkwQklSQU1QZ3RCbHdFaEVBdzlDMEdwQVNFUUREd0xRYXdCSVJBTU93dEJ3QUVoRUF3NkMwRzVBU0VRRERrTFFhOEJJUkFNT0F0QnNRRWhFQXczQzBHeUFTRVFERFlMUWJRQklSQU1OUXRCdFFFaEVBdzBDMEc2QVNFUURETUxRYjBCSVJBTU1ndEJ2d0VoRUF3eEMwSEJBU0VRRERBTElBQkJBRFlDSENBQUlBUTJBaFFnQUVIcGk0Q0FBRFlDRUNBQVFSODJBZ3hCQUNFUURFZ0xJQUJCMndFMkFod2dBQ0FFTmdJVUlBQkIrcGFBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXhIQ3lBQVFmZ0FOZ0ljSUFBZ0REWUNGQ0FBUWNxWWdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTVJnc2dBRUhSQURZQ0hDQUFJQVUyQWhRZ0FFR3dsNENBQURZQ0VDQUFRUlUyQWd4QkFDRVFERVVMSUFCQitRQTJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNUkFzZ0FFSDRBRFlDSENBQUlBRTJBaFFnQUVIS21JQ0FBRFlDRUNBQVFSVTJBZ3hCQUNFUURFTUxJQUJCNUFBMkFod2dBQ0FCTmdJVUlBQkI0NWVBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXhDQ3lBQVFkY0FOZ0ljSUFBZ0FUWUNGQ0FBUWNtWGdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTVFRc2dBRUVBTmdJY0lBQWdBVFlDRkNBQVFibU5nSUFBTmdJUUlBQkJHallDREVFQUlSQU1RQXNnQUVIQ0FEWUNIQ0FBSUFFMkFoUWdBRUhqbUlDQUFEWUNFQ0FBUVJVMkFneEJBQ0VRREQ4TElBQkJBRFlDQkNBQUlBOGdEeEN4Z0lDQUFDSUVSUTBCSUFCQk9qWUNIQ0FBSUFRMkFnd2dBQ0FQUVFGcU5nSVVRUUFoRUF3K0N5QUFLQUlFSVFRZ0FFRUFOZ0lFQWtBZ0FDQUVJQUVRc1lDQWdBQWlCRVVOQUNBQVFUczJBaHdnQUNBRU5nSU1JQUFnQVVFQmFqWUNGRUVBSVJBTVBnc2dBVUVCYWlFQkRDMExJQTlCQVdvaEFRd3RDeUFBUVFBMkFod2dBQ0FQTmdJVUlBQkI1SktBZ0FBMkFoQWdBRUVFTmdJTVFRQWhFQXc3Q3lBQVFUWTJBaHdnQUNBRU5nSVVJQUFnQWpZQ0RFRUFJUkFNT2dzZ0FFRXVOZ0ljSUFBZ0RqWUNGQ0FBSUFRMkFneEJBQ0VRRERrTElBQkIwQUEyQWh3Z0FDQUJOZ0lVSUFCQmtaaUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBdzRDeUFOUVFGcUlRRU1MQXNnQUVFVk5nSWNJQUFnQVRZQ0ZDQUFRWUtaZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNTmdzZ0FFRWJOZ0ljSUFBZ0FUWUNGQ0FBUVpHWGdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTU5Rc2dBRUVQTmdJY0lBQWdBVFlDRkNBQVFaR1hnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1OQXNnQUVFTE5nSWNJQUFnQVRZQ0ZDQUFRWkdYZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNTXdzZ0FFRWFOZ0ljSUFBZ0FUWUNGQ0FBUVlLWmdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTU1nc2dBRUVMTmdJY0lBQWdBVFlDRkNBQVFZS1pnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1NUXNnQUVFS05nSWNJQUFnQVRZQ0ZDQUFRZVNXZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNTUFzZ0FFRWVOZ0ljSUFBZ0FUWUNGQ0FBUWZtWGdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTUx3c2dBRUVBTmdJY0lBQWdFRFlDRkNBQVFkcU5nSUFBTmdJUUlBQkJGRFlDREVFQUlSQU1MZ3NnQUVFRU5nSWNJQUFnQVRZQ0ZDQUFRYkNZZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNTFFzZ0FFRUFOZ0lBSUF0QkFXb2hDd3RCdUFFaEVBd1NDeUFBUVFBMkFnQWdFRUVCYWlFQlFmVUFJUkFNRVFzZ0FTRUJBa0FnQUMwQUtVRUZSdzBBUWVNQUlSQU1FUXRCNGdBaEVBd1FDMEVBSVJBZ0FFRUFOZ0ljSUFCQjVKR0FnQUEyQWhBZ0FFRUhOZ0lNSUFBZ0ZFRUJhallDRkF3b0N5QUFRUUEyQWdBZ0YwRUJhaUVCUWNBQUlSQU1EZ3RCQVNFQkN5QUFJQUU2QUN3Z0FFRUFOZ0lBSUJkQkFXb2hBUXRCS0NFUURBc0xJQUVoQVF0Qk9DRVFEQWtMQWtBZ0FTSVBJQUpHRFFBRFFBSkFJQTh0QUFCQmdMNkFnQUJxTFFBQUlnRkJBVVlOQUNBQlFRSkhEUU1nRDBFQmFpRUJEQVFMSUE5QkFXb2lEeUFDUncwQUMwRStJUkFNSWd0QlBpRVFEQ0VMSUFCQkFEb0FMQ0FQSVFFTUFRdEJDeUVRREFZTFFUb2hFQXdGQ3lBQlFRRnFJUUZCTFNFUURBUUxJQUFnQVRvQUxDQUFRUUEyQWdBZ0ZrRUJhaUVCUVF3aEVBd0RDeUFBUVFBMkFnQWdGMEVCYWlFQlFRb2hFQXdDQ3lBQVFRQTJBZ0FMSUFCQkFEb0FMQ0FOSVFGQkNTRVFEQUFMQzBFQUlSQWdBRUVBTmdJY0lBQWdDellDRkNBQVFjMlFnSUFBTmdJUUlBQkJDVFlDREF3WEMwRUFJUkFnQUVFQU5nSWNJQUFnQ2pZQ0ZDQUFRZW1LZ0lBQU5nSVFJQUJCQ1RZQ0RBd1dDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0NUWUNGQ0FBUWJlUWdJQUFOZ0lRSUFCQkNUWUNEQXdWQzBFQUlSQWdBRUVBTmdJY0lBQWdDRFlDRkNBQVFaeVJnSUFBTmdJUUlBQkJDVFlDREF3VUMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRYzJRZ0lBQU5nSVFJQUJCQ1RZQ0RBd1RDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWVtS2dJQUFOZ0lRSUFCQkNUWUNEQXdTQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFiZVFnSUFBTmdJUUlBQkJDVFlDREF3UkMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRWnlSZ0lBQU5nSVFJQUJCQ1RZQ0RBd1FDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVplVmdJQUFOZ0lRSUFCQkR6WUNEQXdQQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFaZVZnSUFBTmdJUUlBQkJEellDREF3T0MwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRY0NTZ0lBQU5nSVFJQUJCQ3pZQ0RBd05DMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVpXSmdJQUFOZ0lRSUFCQkN6WUNEQXdNQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFlR1BnSUFBTmdJUUlBQkJDallDREF3TEMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZnVQZ0lBQU5nSVFJQUJCQ2pZQ0RBd0tDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWZHWmdJQUFOZ0lRSUFCQkFqWUNEQXdKQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFjU1VnSUFBTmdJUUlBQkJBallDREF3SUMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZktWZ0lBQU5nSVFJQUJCQWpZQ0RBd0hDeUFBUVFJMkFod2dBQ0FCTmdJVUlBQkJuSnFBZ0FBMkFoQWdBRUVXTmdJTVFRQWhFQXdHQzBFQklSQU1CUXRCMUFBaEVDQUJJZ1FnQWtZTkJDQURRUWhxSUFBZ0JDQUNRZGpDZ0lBQVFRb1F4WUNBZ0FBZ0F5Z0NEQ0VFSUFNb0FnZ09Bd0VFQWdBTEVNcUFnSUFBQUFzZ0FFRUFOZ0ljSUFCQnRacUFnQUEyQWhBZ0FFRVhOZ0lNSUFBZ0JFRUJhallDRkVFQUlSQU1BZ3NnQUVFQU5nSWNJQUFnQkRZQ0ZDQUFRY3FhZ0lBQU5nSVFJQUJCQ1RZQ0RFRUFJUkFNQVFzQ1FDQUJJZ1FnQWtjTkFFRWlJUkFNQVFzZ0FFR0pnSUNBQURZQ0NDQUFJQVEyQWdSQklTRVFDeUFEUVJCcUpJQ0FnSUFBSUJBTHJ3RUJBbjhnQVNnQ0FDRUdBa0FDUUNBQ0lBTkdEUUFnQkNBR2FpRUVJQVlnQTJvZ0Ftc2hCeUFDSUFaQmYzTWdCV29pQm1vaEJRTkFBa0FnQWkwQUFDQUVMUUFBUmcwQVFRSWhCQXdEQ3dKQUlBWU5BRUVBSVFRZ0JTRUNEQU1MSUFaQmYyb2hCaUFFUVFGcUlRUWdBa0VCYWlJQ0lBTkhEUUFMSUFjaEJpQURJUUlMSUFCQkFUWUNBQ0FCSUFZMkFnQWdBQ0FDTmdJRUR3c2dBVUVBTmdJQUlBQWdCRFlDQUNBQUlBSTJBZ1FMQ2dBZ0FCREhnSUNBQUF2eU5nRUxmeU9BZ0lDQUFFRVFheUlCSklDQWdJQUFBa0JCQUNnQ29OQ0FnQUFOQUVFQUVNdUFnSUFBUVlEVWhJQUFheUlDUWRrQVNRMEFRUUFoQXdKQVFRQW9BdURUZ0lBQUlnUU5BRUVBUW44M0F1elRnSUFBUVFCQ2dJQ0VnSUNBd0FBM0F1VFRnSUFBUVFBZ0FVRUlha0Z3Y1VIWXF0V3FCWE1pQkRZQzROT0FnQUJCQUVFQU5nTDAwNENBQUVFQVFRQTJBc1RUZ0lBQUMwRUFJQUkyQXN6VGdJQUFRUUJCZ05TRWdBQTJBc2pUZ0lBQVFRQkJnTlNFZ0FBMkFwalFnSUFBUVFBZ0JEWUNyTkNBZ0FCQkFFRi9OZ0tvMElDQUFBTkFJQU5CeE5DQWdBQnFJQU5CdU5DQWdBQnFJZ1EyQWdBZ0JDQURRYkRRZ0lBQWFpSUZOZ0lBSUFOQnZOQ0FnQUJxSUFVMkFnQWdBMEhNMElDQUFHb2dBMEhBMElDQUFHb2lCVFlDQUNBRklBUTJBZ0FnQTBIVTBJQ0FBR29nQTBISTBJQ0FBR29pQkRZQ0FDQUVJQVUyQWdBZ0EwSFEwSUNBQUdvZ0JEWUNBQ0FEUVNCcUlnTkJnQUpIRFFBTFFZRFVoSUFBUVhoQmdOU0VnQUJyUVE5eFFRQkJnTlNFZ0FCQkNHcEJEM0ViSWdOcUlnUkJCR29nQWtGSWFpSUZJQU5ySWdOQkFYSTJBZ0JCQUVFQUtBTHcwNENBQURZQ3BOQ0FnQUJCQUNBRE5nS1UwSUNBQUVFQUlBUTJBcURRZ0lBQVFZRFVoSUFBSUFWcVFUZzJBZ1FMQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQUJCN0FGTERRQUNRRUVBS0FLSTBJQ0FBQ0lHUVJBZ0FFRVRha0Z3Y1NBQVFRdEpHeUlDUVFOMklnUjJJZ05CQTNGRkRRQUNRQUpBSUFOQkFYRWdCSEpCQVhNaUJVRURkQ0lFUWJEUWdJQUFhaUlESUFSQnVOQ0FnQUJxS0FJQUlnUW9BZ2dpQWtjTkFFRUFJQVpCZmlBRmQzRTJBb2pRZ0lBQURBRUxJQU1nQWpZQ0NDQUNJQU0yQWd3TElBUkJDR29oQXlBRUlBVkJBM1FpQlVFRGNqWUNCQ0FFSUFWcUlnUWdCQ2dDQkVFQmNqWUNCQXdNQ3lBQ1FRQW9BcERRZ0lBQUlnZE5EUUVDUUNBRFJRMEFBa0FDUUNBRElBUjBRUUlnQkhRaUEwRUFJQU5yY25FaUEwRUFJQU5yY1VGL2FpSURJQU5CREhaQkVIRWlBM1lpQkVFRmRrRUljU0lGSUFOeUlBUWdCWFlpQTBFQ2RrRUVjU0lFY2lBRElBUjJJZ05CQVhaQkFuRWlCSElnQXlBRWRpSURRUUYyUVFGeElnUnlJQU1nQkhacUlnUkJBM1FpQTBHdzBJQ0FBR29pQlNBRFFialFnSUFBYWlnQ0FDSURLQUlJSWdCSERRQkJBQ0FHUVg0Z0JIZHhJZ1kyQW9qUWdJQUFEQUVMSUFVZ0FEWUNDQ0FBSUFVMkFnd0xJQU1nQWtFRGNqWUNCQ0FESUFSQkEzUWlCR29nQkNBQ2F5SUZOZ0lBSUFNZ0Ftb2lBQ0FGUVFGeU5nSUVBa0FnQjBVTkFDQUhRWGh4UWJEUWdJQUFhaUVDUVFBb0FwelFnSUFBSVFRQ1FBSkFJQVpCQVNBSFFRTjJkQ0lJY1EwQVFRQWdCaUFJY2pZQ2lOQ0FnQUFnQWlFSURBRUxJQUlvQWdnaENBc2dDQ0FFTmdJTUlBSWdCRFlDQ0NBRUlBSTJBZ3dnQkNBSU5nSUlDeUFEUVFocUlRTkJBQ0FBTmdLYzBJQ0FBRUVBSUFVMkFwRFFnSUFBREF3TFFRQW9Bb3pRZ0lBQUlnbEZEUUVnQ1VFQUlBbHJjVUYvYWlJRElBTkJESFpCRUhFaUEzWWlCRUVGZGtFSWNTSUZJQU55SUFRZ0JYWWlBMEVDZGtFRWNTSUVjaUFESUFSMklnTkJBWFpCQW5FaUJISWdBeUFFZGlJRFFRRjJRUUZ4SWdSeUlBTWdCSFpxUVFKMFFialNnSUFBYWlnQ0FDSUFLQUlFUVhoeElBSnJJUVFnQUNFRkFrQURRQUpBSUFVb0FoQWlBdzBBSUFWQkZHb29BZ0FpQTBVTkFnc2dBeWdDQkVGNGNTQUNheUlGSUFRZ0JTQUVTU0lGR3lFRUlBTWdBQ0FGR3lFQUlBTWhCUXdBQ3dzZ0FDZ0NHQ0VLQWtBZ0FDZ0NEQ0lJSUFCR0RRQWdBQ2dDQ0NJRFFRQW9BcGpRZ0lBQVNSb2dDQ0FETmdJSUlBTWdDRFlDREF3TEN3SkFJQUJCRkdvaUJTZ0NBQ0lERFFBZ0FDZ0NFQ0lEUlEwRElBQkJFR29oQlFzRFFDQUZJUXNnQXlJSVFSUnFJZ1VvQWdBaUF3MEFJQWhCRUdvaEJTQUlLQUlRSWdNTkFBc2dDMEVBTmdJQURBb0xRWDhoQWlBQVFiOS9TdzBBSUFCQkUyb2lBMEZ3Y1NFQ1FRQW9Bb3pRZ0lBQUlnZEZEUUJCQUNFTEFrQWdBa0dBQWtrTkFFRWZJUXNnQWtILy8vOEhTdzBBSUFOQkNIWWlBeUFEUVlEK1AycEJFSFpCQ0hFaUEzUWlCQ0FFUVlEZ0gycEJFSFpCQkhFaUJIUWlCU0FGUVlDQUQycEJFSFpCQW5FaUJYUkJEM1lnQXlBRWNpQUZjbXNpQTBFQmRDQUNJQU5CRldwMlFRRnhja0VjYWlFTEMwRUFJQUpySVFRQ1FBSkFBa0FDUUNBTFFRSjBRYmpTZ0lBQWFpZ0NBQ0lGRFFCQkFDRURRUUFoQ0F3QkMwRUFJUU1nQWtFQVFSa2dDMEVCZG1zZ0MwRWZSaHQwSVFCQkFDRUlBMEFDUUNBRktBSUVRWGh4SUFKcklnWWdCRThOQUNBR0lRUWdCU0VJSUFZTkFFRUFJUVFnQlNFSUlBVWhBd3dEQ3lBRElBVkJGR29vQWdBaUJpQUdJQVVnQUVFZGRrRUVjV3BCRUdvb0FnQWlCVVliSUFNZ0Joc2hBeUFBUVFGMElRQWdCUTBBQ3dzQ1FDQURJQWh5RFFCQkFDRUlRUUlnQzNRaUEwRUFJQU5yY2lBSGNTSURSUTBESUFOQkFDQURhM0ZCZjJvaUF5QURRUXgyUVJCeElnTjJJZ1ZCQlhaQkNIRWlBQ0FEY2lBRklBQjJJZ05CQW5aQkJIRWlCWElnQXlBRmRpSURRUUYyUVFKeElnVnlJQU1nQlhZaUEwRUJka0VCY1NJRmNpQURJQVYyYWtFQ2RFRzQwb0NBQUdvb0FnQWhBd3NnQTBVTkFRc0RRQ0FES0FJRVFYaHhJQUpySWdZZ0JFa2hBQUpBSUFNb0FoQWlCUTBBSUFOQkZHb29BZ0FoQlFzZ0JpQUVJQUFiSVFRZ0F5QUlJQUFiSVFnZ0JTRURJQVVOQUFzTElBaEZEUUFnQkVFQUtBS1EwSUNBQUNBQ2EwOE5BQ0FJS0FJWUlRc0NRQ0FJS0FJTUlnQWdDRVlOQUNBSUtBSUlJZ05CQUNnQ21OQ0FnQUJKR2lBQUlBTTJBZ2dnQXlBQU5nSU1EQWtMQWtBZ0NFRVVhaUlGS0FJQUlnTU5BQ0FJS0FJUUlnTkZEUU1nQ0VFUWFpRUZDd05BSUFVaEJpQURJZ0JCRkdvaUJTZ0NBQ0lERFFBZ0FFRVFhaUVGSUFBb0FoQWlBdzBBQ3lBR1FRQTJBZ0FNQ0FzQ1FFRUFLQUtRMElDQUFDSURJQUpKRFFCQkFDZ0NuTkNBZ0FBaEJBSkFBa0FnQXlBQ2F5SUZRUkJKRFFBZ0JDQUNhaUlBSUFWQkFYSTJBZ1JCQUNBRk5nS1EwSUNBQUVFQUlBQTJBcHpRZ0lBQUlBUWdBMm9nQlRZQ0FDQUVJQUpCQTNJMkFnUU1BUXNnQkNBRFFRTnlOZ0lFSUFRZ0Eyb2lBeUFES0FJRVFRRnlOZ0lFUVFCQkFEWUNuTkNBZ0FCQkFFRUFOZ0tRMElDQUFBc2dCRUVJYWlFRERBb0xBa0JCQUNnQ2xOQ0FnQUFpQUNBQ1RRMEFRUUFvQXFEUWdJQUFJZ01nQW1vaUJDQUFJQUpySWdWQkFYSTJBZ1JCQUNBRk5nS1UwSUNBQUVFQUlBUTJBcURRZ0lBQUlBTWdBa0VEY2pZQ0JDQURRUWhxSVFNTUNnc0NRQUpBUVFBb0F1RFRnSUFBUlEwQVFRQW9BdWpUZ0lBQUlRUU1BUXRCQUVKL053THMwNENBQUVFQVFvQ0FoSUNBZ01BQU53TGswNENBQUVFQUlBRkJER3BCY0hGQjJLclZxZ1Z6TmdMZzA0Q0FBRUVBUVFBMkF2VFRnSUFBUVFCQkFEWUN4Tk9BZ0FCQmdJQUVJUVFMUVFBaEF3SkFJQVFnQWtISEFHb2lCMm9pQmtFQUlBUnJJZ3R4SWdnZ0Frc05BRUVBUVRBMkF2alRnSUFBREFvTEFrQkJBQ2dDd05PQWdBQWlBMFVOQUFKQVFRQW9BcmpUZ0lBQUlnUWdDR29pQlNBRVRRMEFJQVVnQTAwTkFRdEJBQ0VEUVFCQk1EWUMrTk9BZ0FBTUNndEJBQzBBeE5PQWdBQkJCSEVOQkFKQUFrQUNRRUVBS0FLZzBJQ0FBQ0lFUlEwQVFjalRnSUFBSVFNRFFBSkFJQU1vQWdBaUJTQUVTdzBBSUFVZ0F5Z0NCR29nQkVzTkF3c2dBeWdDQ0NJRERRQUxDMEVBRU11QWdJQUFJZ0JCZjBZTkJTQUlJUVlDUUVFQUtBTGswNENBQUNJRFFYOXFJZ1FnQUhGRkRRQWdDQ0FBYXlBRUlBQnFRUUFnQTJ0eGFpRUdDeUFHSUFKTkRRVWdCa0grLy8vL0Iwc05CUUpBUVFBb0FzRFRnSUFBSWdORkRRQkJBQ2dDdU5PQWdBQWlCQ0FHYWlJRklBUk5EUVlnQlNBRFN3MEdDeUFHRU11QWdJQUFJZ01nQUVjTkFRd0hDeUFHSUFCcklBdHhJZ1pCL3YvLy93ZExEUVFnQmhETGdJQ0FBQ0lBSUFNb0FnQWdBeWdDQkdwR0RRTWdBQ0VEQ3dKQUlBTkJmMFlOQUNBQ1FjZ0FhaUFHVFEwQUFrQWdCeUFHYTBFQUtBTG8wNENBQUNJRWFrRUFJQVJyY1NJRVFmNy8vLzhIVFEwQUlBTWhBQXdIQ3dKQUlBUVF5NENBZ0FCQmYwWU5BQ0FFSUFacUlRWWdBeUVBREFjTFFRQWdCbXNReTRDQWdBQWFEQVFMSUFNaEFDQURRWDlIRFFVTUF3dEJBQ0VJREFjTFFRQWhBQXdGQ3lBQVFYOUhEUUlMUVFCQkFDZ0N4Tk9BZ0FCQkJISTJBc1RUZ0lBQUN5QUlRZjcvLy84SFN3MEJJQWdReTRDQWdBQWhBRUVBRU11QWdJQUFJUU1nQUVGL1JnMEJJQU5CZjBZTkFTQUFJQU5QRFFFZ0F5QUFheUlHSUFKQk9HcE5EUUVMUVFCQkFDZ0N1Tk9BZ0FBZ0Jtb2lBellDdU5PQWdBQUNRQ0FEUVFBb0FyelRnSUFBVFEwQVFRQWdBellDdk5PQWdBQUxBa0FDUUFKQUFrQkJBQ2dDb05DQWdBQWlCRVVOQUVISTA0Q0FBQ0VEQTBBZ0FDQURLQUlBSWdVZ0F5Z0NCQ0lJYWtZTkFpQURLQUlJSWdNTkFBd0RDd3NDUUFKQVFRQW9BcGpRZ0lBQUlnTkZEUUFnQUNBRFR3MEJDMEVBSUFBMkFwalFnSUFBQzBFQUlRTkJBQ0FHTmdMTTA0Q0FBRUVBSUFBMkFzalRnSUFBUVFCQmZ6WUNxTkNBZ0FCQkFFRUFLQUxnMDRDQUFEWUNyTkNBZ0FCQkFFRUFOZ0xVMDRDQUFBTkFJQU5CeE5DQWdBQnFJQU5CdU5DQWdBQnFJZ1EyQWdBZ0JDQURRYkRRZ0lBQWFpSUZOZ0lBSUFOQnZOQ0FnQUJxSUFVMkFnQWdBMEhNMElDQUFHb2dBMEhBMElDQUFHb2lCVFlDQUNBRklBUTJBZ0FnQTBIVTBJQ0FBR29nQTBISTBJQ0FBR29pQkRZQ0FDQUVJQVUyQWdBZ0EwSFEwSUNBQUdvZ0JEWUNBQ0FEUVNCcUlnTkJnQUpIRFFBTElBQkJlQ0FBYTBFUGNVRUFJQUJCQ0dwQkQzRWJJZ05xSWdRZ0JrRklhaUlGSUFOcklnTkJBWEkyQWdSQkFFRUFLQUx3MDRDQUFEWUNwTkNBZ0FCQkFDQUROZ0tVMElDQUFFRUFJQVEyQXFEUWdJQUFJQUFnQldwQk9EWUNCQXdDQ3lBRExRQU1RUWh4RFFBZ0JDQUZTUTBBSUFRZ0FFOE5BQ0FFUVhnZ0JHdEJEM0ZCQUNBRVFRaHFRUTl4R3lJRmFpSUFRUUFvQXBUUWdJQUFJQVpxSWdzZ0JXc2lCVUVCY2pZQ0JDQURJQWdnQm1vMkFnUkJBRUVBS0FMdzA0Q0FBRFlDcE5DQWdBQkJBQ0FGTmdLVTBJQ0FBRUVBSUFBMkFxRFFnSUFBSUFRZ0MycEJPRFlDQkF3QkN3SkFJQUJCQUNnQ21OQ0FnQUFpQ0U4TkFFRUFJQUEyQXBqUWdJQUFJQUFoQ0FzZ0FDQUdhaUVGUWNqVGdJQUFJUU1DUUFKQUFrQUNRQUpBQWtBQ1FBTkFJQU1vQWdBZ0JVWU5BU0FES0FJSUlnTU5BQXdDQ3dzZ0F5MEFERUVJY1VVTkFRdEJ5Tk9BZ0FBaEF3TkFBa0FnQXlnQ0FDSUZJQVJMRFFBZ0JTQURLQUlFYWlJRklBUkxEUU1MSUFNb0FnZ2hBd3dBQ3dzZ0F5QUFOZ0lBSUFNZ0F5Z0NCQ0FHYWpZQ0JDQUFRWGdnQUd0QkQzRkJBQ0FBUVFocVFROXhHMm9pQ3lBQ1FRTnlOZ0lFSUFWQmVDQUZhMEVQY1VFQUlBVkJDR3BCRDNFYmFpSUdJQXNnQW1vaUFtc2hBd0pBSUFZZ0JFY05BRUVBSUFJMkFxRFFnSUFBUVFCQkFDZ0NsTkNBZ0FBZ0Eyb2lBellDbE5DQWdBQWdBaUFEUVFGeU5nSUVEQU1MQWtBZ0JrRUFLQUtjMElDQUFFY05BRUVBSUFJMkFwelFnSUFBUVFCQkFDZ0NrTkNBZ0FBZ0Eyb2lBellDa05DQWdBQWdBaUFEUVFGeU5nSUVJQUlnQTJvZ0F6WUNBQXdEQ3dKQUlBWW9BZ1FpQkVFRGNVRUJSdzBBSUFSQmVIRWhCd0pBQWtBZ0JFSC9BVXNOQUNBR0tBSUlJZ1VnQkVFRGRpSUlRUU4wUWJEUWdJQUFhaUlBUmhvQ1FDQUdLQUlNSWdRZ0JVY05BRUVBUVFBb0FvalFnSUFBUVg0Z0NIZHhOZ0tJMElDQUFBd0NDeUFFSUFCR0dpQUVJQVUyQWdnZ0JTQUVOZ0lNREFFTElBWW9BaGdoQ1FKQUFrQWdCaWdDRENJQUlBWkdEUUFnQmlnQ0NDSUVJQWhKR2lBQUlBUTJBZ2dnQkNBQU5nSU1EQUVMQWtBZ0JrRVVhaUlFS0FJQUlnVU5BQ0FHUVJCcUlnUW9BZ0FpQlEwQVFRQWhBQXdCQ3dOQUlBUWhDQ0FGSWdCQkZHb2lCQ2dDQUNJRkRRQWdBRUVRYWlFRUlBQW9BaEFpQlEwQUN5QUlRUUEyQWdBTElBbEZEUUFDUUFKQUlBWWdCaWdDSENJRlFRSjBRYmpTZ0lBQWFpSUVLQUlBUncwQUlBUWdBRFlDQUNBQURRRkJBRUVBS0FLTTBJQ0FBRUYrSUFWM2NUWUNqTkNBZ0FBTUFnc2dDVUVRUVJRZ0NTZ0NFQ0FHUmh0cUlBQTJBZ0FnQUVVTkFRc2dBQ0FKTmdJWUFrQWdCaWdDRUNJRVJRMEFJQUFnQkRZQ0VDQUVJQUEyQWhnTElBWW9BaFFpQkVVTkFDQUFRUlJxSUFRMkFnQWdCQ0FBTmdJWUN5QUhJQU5xSVFNZ0JpQUhhaUlHS0FJRUlRUUxJQVlnQkVGK2NUWUNCQ0FDSUFOcUlBTTJBZ0FnQWlBRFFRRnlOZ0lFQWtBZ0EwSC9BVXNOQUNBRFFYaHhRYkRRZ0lBQWFpRUVBa0FDUUVFQUtBS0kwSUNBQUNJRlFRRWdBMEVEZG5RaUEzRU5BRUVBSUFVZ0EzSTJBb2pRZ0lBQUlBUWhBd3dCQ3lBRUtBSUlJUU1MSUFNZ0FqWUNEQ0FFSUFJMkFnZ2dBaUFFTmdJTUlBSWdBellDQ0F3REMwRWZJUVFDUUNBRFFmLy8vd2RMRFFBZ0EwRUlkaUlFSUFSQmdQNC9ha0VRZGtFSWNTSUVkQ0lGSUFWQmdPQWZha0VRZGtFRWNTSUZkQ0lBSUFCQmdJQVBha0VRZGtFQ2NTSUFkRUVQZGlBRUlBVnlJQUJ5YXlJRVFRRjBJQU1nQkVFVmFuWkJBWEZ5UVJ4cUlRUUxJQUlnQkRZQ0hDQUNRZ0EzQWhBZ0JFRUNkRUc0MG9DQUFHb2hCUUpBUVFBb0FvelFnSUFBSWdCQkFTQUVkQ0lJY1EwQUlBVWdBallDQUVFQUlBQWdDSEkyQW96UWdJQUFJQUlnQlRZQ0dDQUNJQUkyQWdnZ0FpQUNOZ0lNREFNTElBTkJBRUVaSUFSQkFYWnJJQVJCSDBZYmRDRUVJQVVvQWdBaEFBTkFJQUFpQlNnQ0JFRjRjU0FEUmcwQ0lBUkJIWFloQUNBRVFRRjBJUVFnQlNBQVFRUnhha0VRYWlJSUtBSUFJZ0FOQUFzZ0NDQUNOZ0lBSUFJZ0JUWUNHQ0FDSUFJMkFnd2dBaUFDTmdJSURBSUxJQUJCZUNBQWEwRVBjVUVBSUFCQkNHcEJEM0ViSWdOcUlnc2dCa0ZJYWlJSUlBTnJJZ05CQVhJMkFnUWdBQ0FJYWtFNE5nSUVJQVFnQlVFM0lBVnJRUTl4UVFBZ0JVRkpha0VQY1J0cVFVRnFJZ2dnQ0NBRVFSQnFTUnNpQ0VFak5nSUVRUUJCQUNnQzhOT0FnQUEyQXFUUWdJQUFRUUFnQXpZQ2xOQ0FnQUJCQUNBTE5nS2cwSUNBQUNBSVFSQnFRUUFwQXREVGdJQUFOd0lBSUFoQkFDa0N5Tk9BZ0FBM0FnaEJBQ0FJUVFocU5nTFEwNENBQUVFQUlBWTJBc3pUZ0lBQVFRQWdBRFlDeU5PQWdBQkJBRUVBTmdMVTA0Q0FBQ0FJUVNScUlRTURRQ0FEUVFjMkFnQWdBMEVFYWlJRElBVkpEUUFMSUFnZ0JFWU5BeUFJSUFnb0FnUkJmbkUyQWdRZ0NDQUlJQVJySWdBMkFnQWdCQ0FBUVFGeU5nSUVBa0FnQUVIL0FVc05BQ0FBUVhoeFFiRFFnSUFBYWlFREFrQUNRRUVBS0FLSTBJQ0FBQ0lGUVFFZ0FFRURkblFpQUhFTkFFRUFJQVVnQUhJMkFvalFnSUFBSUFNaEJRd0JDeUFES0FJSUlRVUxJQVVnQkRZQ0RDQURJQVEyQWdnZ0JDQUROZ0lNSUFRZ0JUWUNDQXdFQzBFZklRTUNRQ0FBUWYvLy93ZExEUUFnQUVFSWRpSURJQU5CZ1A0L2FrRVFka0VJY1NJRGRDSUZJQVZCZ09BZmFrRVFka0VFY1NJRmRDSUlJQWhCZ0lBUGFrRVFka0VDY1NJSWRFRVBkaUFESUFWeUlBaHlheUlEUVFGMElBQWdBMEVWYW5aQkFYRnlRUnhxSVFNTElBUWdBellDSENBRVFnQTNBaEFnQTBFQ2RFRzQwb0NBQUdvaEJRSkFRUUFvQW96UWdJQUFJZ2hCQVNBRGRDSUdjUTBBSUFVZ0JEWUNBRUVBSUFnZ0JuSTJBb3pRZ0lBQUlBUWdCVFlDR0NBRUlBUTJBZ2dnQkNBRU5nSU1EQVFMSUFCQkFFRVpJQU5CQVhacklBTkJIMFliZENFRElBVW9BZ0FoQ0FOQUlBZ2lCU2dDQkVGNGNTQUFSZzBESUFOQkhYWWhDQ0FEUVFGMElRTWdCU0FJUVFSeGFrRVFhaUlHS0FJQUlnZ05BQXNnQmlBRU5nSUFJQVFnQlRZQ0dDQUVJQVEyQWd3Z0JDQUVOZ0lJREFNTElBVW9BZ2dpQXlBQ05nSU1JQVVnQWpZQ0NDQUNRUUEyQWhnZ0FpQUZOZ0lNSUFJZ0F6WUNDQXNnQzBFSWFpRUREQVVMSUFVb0FnZ2lBeUFFTmdJTUlBVWdCRFlDQ0NBRVFRQTJBaGdnQkNBRk5nSU1JQVFnQXpZQ0NBdEJBQ2dDbE5DQWdBQWlBeUFDVFEwQVFRQW9BcURRZ0lBQUlnUWdBbW9pQlNBRElBSnJJZ05CQVhJMkFnUkJBQ0FETmdLVTBJQ0FBRUVBSUFVMkFxRFFnSUFBSUFRZ0FrRURjallDQkNBRVFRaHFJUU1NQXd0QkFDRURRUUJCTURZQytOT0FnQUFNQWdzQ1FDQUxSUTBBQWtBQ1FDQUlJQWdvQWh3aUJVRUNkRUc0MG9DQUFHb2lBeWdDQUVjTkFDQURJQUEyQWdBZ0FBMEJRUUFnQjBGK0lBVjNjU0lITmdLTTBJQ0FBQXdDQ3lBTFFSQkJGQ0FMS0FJUUlBaEdHMm9nQURZQ0FDQUFSUTBCQ3lBQUlBczJBaGdDUUNBSUtBSVFJZ05GRFFBZ0FDQUROZ0lRSUFNZ0FEWUNHQXNnQ0VFVWFpZ0NBQ0lEUlEwQUlBQkJGR29nQXpZQ0FDQURJQUEyQWhnTEFrQUNRQ0FFUVE5TERRQWdDQ0FFSUFKcUlnTkJBM0kyQWdRZ0NDQURhaUlESUFNb0FnUkJBWEkyQWdRTUFRc2dDQ0FDYWlJQUlBUkJBWEkyQWdRZ0NDQUNRUU55TmdJRUlBQWdCR29nQkRZQ0FBSkFJQVJCL3dGTERRQWdCRUY0Y1VHdzBJQ0FBR29oQXdKQUFrQkJBQ2dDaU5DQWdBQWlCVUVCSUFSQkEzWjBJZ1J4RFFCQkFDQUZJQVJ5TmdLSTBJQ0FBQ0FESVFRTUFRc2dBeWdDQ0NFRUN5QUVJQUEyQWd3Z0F5QUFOZ0lJSUFBZ0F6WUNEQ0FBSUFRMkFnZ01BUXRCSHlFREFrQWdCRUgvLy84SFN3MEFJQVJCQ0hZaUF5QURRWUQrUDJwQkVIWkJDSEVpQTNRaUJTQUZRWURnSDJwQkVIWkJCSEVpQlhRaUFpQUNRWUNBRDJwQkVIWkJBbkVpQW5SQkQzWWdBeUFGY2lBQ2Ntc2lBMEVCZENBRUlBTkJGV3AyUVFGeGNrRWNhaUVEQ3lBQUlBTTJBaHdnQUVJQU53SVFJQU5CQW5SQnVOS0FnQUJxSVFVQ1FDQUhRUUVnQTNRaUFuRU5BQ0FGSUFBMkFnQkJBQ0FISUFKeU5nS00wSUNBQUNBQUlBVTJBaGdnQUNBQU5nSUlJQUFnQURZQ0RBd0JDeUFFUVFCQkdTQURRUUYyYXlBRFFSOUdHM1FoQXlBRktBSUFJUUlDUUFOQUlBSWlCU2dDQkVGNGNTQUVSZzBCSUFOQkhYWWhBaUFEUVFGMElRTWdCU0FDUVFSeGFrRVFhaUlHS0FJQUlnSU5BQXNnQmlBQU5nSUFJQUFnQlRZQ0dDQUFJQUEyQWd3Z0FDQUFOZ0lJREFFTElBVW9BZ2dpQXlBQU5nSU1JQVVnQURZQ0NDQUFRUUEyQWhnZ0FDQUZOZ0lNSUFBZ0F6WUNDQXNnQ0VFSWFpRUREQUVMQWtBZ0NrVU5BQUpBQWtBZ0FDQUFLQUljSWdWQkFuUkJ1TktBZ0FCcUlnTW9BZ0JIRFFBZ0F5QUlOZ0lBSUFnTkFVRUFJQWxCZmlBRmQzRTJBb3pRZ0lBQURBSUxJQXBCRUVFVUlBb29BaEFnQUVZYmFpQUlOZ0lBSUFoRkRRRUxJQWdnQ2pZQ0dBSkFJQUFvQWhBaUEwVU5BQ0FJSUFNMkFoQWdBeUFJTmdJWUN5QUFRUlJxS0FJQUlnTkZEUUFnQ0VFVWFpQUROZ0lBSUFNZ0NEWUNHQXNDUUFKQUlBUkJEMHNOQUNBQUlBUWdBbW9pQTBFRGNqWUNCQ0FBSUFOcUlnTWdBeWdDQkVFQmNqWUNCQXdCQ3lBQUlBSnFJZ1VnQkVFQmNqWUNCQ0FBSUFKQkEzSTJBZ1FnQlNBRWFpQUVOZ0lBQWtBZ0IwVU5BQ0FIUVhoeFFiRFFnSUFBYWlFQ1FRQW9BcHpRZ0lBQUlRTUNRQUpBUVFFZ0IwRURkblFpQ0NBR2NRMEFRUUFnQ0NBR2NqWUNpTkNBZ0FBZ0FpRUlEQUVMSUFJb0FnZ2hDQXNnQ0NBRE5nSU1JQUlnQXpZQ0NDQURJQUkyQWd3Z0F5QUlOZ0lJQzBFQUlBVTJBcHpRZ0lBQVFRQWdCRFlDa05DQWdBQUxJQUJCQ0dvaEF3c2dBVUVRYWlTQWdJQ0FBQ0FEQ3dvQUlBQVF5WUNBZ0FBTDRnMEJCMzhDUUNBQVJRMEFJQUJCZUdvaUFTQUFRWHhxS0FJQUlnSkJlSEVpQUdvaEF3SkFJQUpCQVhFTkFDQUNRUU54UlEwQklBRWdBU2dDQUNJQ2F5SUJRUUFvQXBqUWdJQUFJZ1JKRFFFZ0FpQUFhaUVBQWtBZ0FVRUFLQUtjMElDQUFFWU5BQUpBSUFKQi93RkxEUUFnQVNnQ0NDSUVJQUpCQTNZaUJVRURkRUd3MElDQUFHb2lCa1lhQWtBZ0FTZ0NEQ0lDSUFSSERRQkJBRUVBS0FLSTBJQ0FBRUYrSUFWM2NUWUNpTkNBZ0FBTUF3c2dBaUFHUmhvZ0FpQUVOZ0lJSUFRZ0FqWUNEQXdDQ3lBQktBSVlJUWNDUUFKQUlBRW9BZ3dpQmlBQlJnMEFJQUVvQWdnaUFpQUVTUm9nQmlBQ05nSUlJQUlnQmpZQ0RBd0JDd0pBSUFGQkZHb2lBaWdDQUNJRURRQWdBVUVRYWlJQ0tBSUFJZ1FOQUVFQUlRWU1BUXNEUUNBQ0lRVWdCQ0lHUVJScUlnSW9BZ0FpQkEwQUlBWkJFR29oQWlBR0tBSVFJZ1FOQUFzZ0JVRUFOZ0lBQ3lBSFJRMEJBa0FDUUNBQklBRW9BaHdpQkVFQ2RFRzQwb0NBQUdvaUFpZ0NBRWNOQUNBQ0lBWTJBZ0FnQmcwQlFRQkJBQ2dDak5DQWdBQkJmaUFFZDNFMkFvelFnSUFBREFNTElBZEJFRUVVSUFjb0FoQWdBVVliYWlBR05nSUFJQVpGRFFJTElBWWdCellDR0FKQUlBRW9BaEFpQWtVTkFDQUdJQUkyQWhBZ0FpQUdOZ0lZQ3lBQktBSVVJZ0pGRFFFZ0JrRVVhaUFDTmdJQUlBSWdCallDR0F3QkN5QURLQUlFSWdKQkEzRkJBMGNOQUNBRElBSkJmbkUyQWdSQkFDQUFOZ0tRMElDQUFDQUJJQUJxSUFBMkFnQWdBU0FBUVFGeU5nSUVEd3NnQVNBRFR3MEFJQU1vQWdRaUFrRUJjVVVOQUFKQUFrQWdBa0VDY1EwQUFrQWdBMEVBS0FLZzBJQ0FBRWNOQUVFQUlBRTJBcURRZ0lBQVFRQkJBQ2dDbE5DQWdBQWdBR29pQURZQ2xOQ0FnQUFnQVNBQVFRRnlOZ0lFSUFGQkFDZ0NuTkNBZ0FCSERRTkJBRUVBTmdLUTBJQ0FBRUVBUVFBMkFwelFnSUFBRHdzQ1FDQURRUUFvQXB6UWdJQUFSdzBBUVFBZ0FUWUNuTkNBZ0FCQkFFRUFLQUtRMElDQUFDQUFhaUlBTmdLUTBJQ0FBQ0FCSUFCQkFYSTJBZ1FnQVNBQWFpQUFOZ0lBRHdzZ0FrRjRjU0FBYWlFQUFrQUNRQ0FDUWY4QlN3MEFJQU1vQWdnaUJDQUNRUU4ySWdWQkEzUkJzTkNBZ0FCcUlnWkdHZ0pBSUFNb0Fnd2lBaUFFUncwQVFRQkJBQ2dDaU5DQWdBQkJmaUFGZDNFMkFvalFnSUFBREFJTElBSWdCa1lhSUFJZ0JEWUNDQ0FFSUFJMkFnd01BUXNnQXlnQ0dDRUhBa0FDUUNBREtBSU1JZ1lnQTBZTkFDQURLQUlJSWdKQkFDZ0NtTkNBZ0FCSkdpQUdJQUkyQWdnZ0FpQUdOZ0lNREFFTEFrQWdBMEVVYWlJQ0tBSUFJZ1FOQUNBRFFSQnFJZ0lvQWdBaUJBMEFRUUFoQmd3QkN3TkFJQUloQlNBRUlnWkJGR29pQWlnQ0FDSUVEUUFnQmtFUWFpRUNJQVlvQWhBaUJBMEFDeUFGUVFBMkFnQUxJQWRGRFFBQ1FBSkFJQU1nQXlnQ0hDSUVRUUowUWJqU2dJQUFhaUlDS0FJQVJ3MEFJQUlnQmpZQ0FDQUdEUUZCQUVFQUtBS00wSUNBQUVGK0lBUjNjVFlDak5DQWdBQU1BZ3NnQjBFUVFSUWdCeWdDRUNBRFJodHFJQVkyQWdBZ0JrVU5BUXNnQmlBSE5nSVlBa0FnQXlnQ0VDSUNSUTBBSUFZZ0FqWUNFQ0FDSUFZMkFoZ0xJQU1vQWhRaUFrVU5BQ0FHUVJScUlBSTJBZ0FnQWlBR05nSVlDeUFCSUFCcUlBQTJBZ0FnQVNBQVFRRnlOZ0lFSUFGQkFDZ0NuTkNBZ0FCSERRRkJBQ0FBTmdLUTBJQ0FBQThMSUFNZ0FrRitjVFlDQkNBQklBQnFJQUEyQWdBZ0FTQUFRUUZ5TmdJRUN3SkFJQUJCL3dGTERRQWdBRUY0Y1VHdzBJQ0FBR29oQWdKQUFrQkJBQ2dDaU5DQWdBQWlCRUVCSUFCQkEzWjBJZ0J4RFFCQkFDQUVJQUJ5TmdLSTBJQ0FBQ0FDSVFBTUFRc2dBaWdDQ0NFQUN5QUFJQUUyQWd3Z0FpQUJOZ0lJSUFFZ0FqWUNEQ0FCSUFBMkFnZ1BDMEVmSVFJQ1FDQUFRZi8vL3dkTERRQWdBRUVJZGlJQ0lBSkJnUDQvYWtFUWRrRUljU0lDZENJRUlBUkJnT0FmYWtFUWRrRUVjU0lFZENJR0lBWkJnSUFQYWtFUWRrRUNjU0lHZEVFUGRpQUNJQVJ5SUFaeWF5SUNRUUYwSUFBZ0FrRVZhblpCQVhGeVFSeHFJUUlMSUFFZ0FqWUNIQ0FCUWdBM0FoQWdBa0VDZEVHNDBvQ0FBR29oQkFKQUFrQkJBQ2dDak5DQWdBQWlCa0VCSUFKMElnTnhEUUFnQkNBQk5nSUFRUUFnQmlBRGNqWUNqTkNBZ0FBZ0FTQUVOZ0lZSUFFZ0FUWUNDQ0FCSUFFMkFnd01BUXNnQUVFQVFSa2dBa0VCZG1zZ0FrRWZSaHQwSVFJZ0JDZ0NBQ0VHQWtBRFFDQUdJZ1FvQWdSQmVIRWdBRVlOQVNBQ1FSMTJJUVlnQWtFQmRDRUNJQVFnQmtFRWNXcEJFR29pQXlnQ0FDSUdEUUFMSUFNZ0FUWUNBQ0FCSUFRMkFoZ2dBU0FCTmdJTUlBRWdBVFlDQ0F3QkN5QUVLQUlJSWdBZ0FUWUNEQ0FFSUFFMkFnZ2dBVUVBTmdJWUlBRWdCRFlDRENBQklBQTJBZ2dMUVFCQkFDZ0NxTkNBZ0FCQmYyb2lBVUYvSUFFYk5nS28wSUNBQUFzTEJBQUFBQXRPQUFKQUlBQU5BRDhBUVJCMER3c0NRQ0FBUWYvL0EzRU5BQ0FBUVg5TURRQUNRQ0FBUVJCMlFBQWlBRUYvUncwQVFRQkJNRFlDK05PQWdBQkJmdzhMSUFCQkVIUVBDeERLZ0lDQUFBQUw4Z0lDQTM4QmZnSkFJQUpGRFFBZ0FDQUJPZ0FBSUFJZ0FHb2lBMEYvYWlBQk9nQUFJQUpCQTBrTkFDQUFJQUU2QUFJZ0FDQUJPZ0FCSUFOQmZXb2dBVG9BQUNBRFFYNXFJQUU2QUFBZ0FrRUhTUTBBSUFBZ0FUb0FBeUFEUVh4cUlBRTZBQUFnQWtFSlNRMEFJQUJCQUNBQWEwRURjU0lFYWlJRElBRkIvd0Z4UVlHQ2hBaHNJZ0UyQWdBZ0F5QUNJQVJyUVh4eElnUnFJZ0pCZkdvZ0FUWUNBQ0FFUVFsSkRRQWdBeUFCTmdJSUlBTWdBVFlDQkNBQ1FYaHFJQUUyQWdBZ0FrRjBhaUFCTmdJQUlBUkJHVWtOQUNBRElBRTJBaGdnQXlBQk5nSVVJQU1nQVRZQ0VDQURJQUUyQWd3Z0FrRndhaUFCTmdJQUlBSkJiR29nQVRZQ0FDQUNRV2hxSUFFMkFnQWdBa0ZrYWlBQk5nSUFJQVFnQTBFRWNVRVljaUlGYXlJQ1FTQkpEUUFnQWExQ2dZQ0FnQkIrSVFZZ0F5QUZhaUVCQTBBZ0FTQUdOd01ZSUFFZ0JqY0RFQ0FCSUFZM0F3Z2dBU0FHTndNQUlBRkJJR29oQVNBQ1FXQnFJZ0pCSDBzTkFBc0xJQUFMQzQ1SUFRQkJnQWdMaGtnQkFBQUFBZ0FBQUFNQUFBQUFBQUFBQUFBQUFBUUFBQUFGQUFBQUFBQUFBQUFBQUFBR0FBQUFCd0FBQUFnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFbHVkbUZzYVdRZ1kyaGhjaUJwYmlCMWNtd2djWFZsY25rQVUzQmhiaUJqWVd4c1ltRmpheUJsY25KdmNpQnBiaUJ2Ymw5aWIyUjVBRU52Ym5SbGJuUXRUR1Z1WjNSb0lHOTJaWEptYkc5M0FFTm9kVzVySUhOcGVtVWdiM1psY21ac2IzY0FVbVZ6Y0c5dWMyVWdiM1psY21ac2IzY0FTVzUyWVd4cFpDQnRaWFJvYjJRZ1ptOXlJRWhVVkZBdmVDNTRJSEpsY1hWbGMzUUFTVzUyWVd4cFpDQnRaWFJvYjJRZ1ptOXlJRkpVVTFBdmVDNTRJSEpsY1hWbGMzUUFSWGh3WldOMFpXUWdVMDlWVWtORklHMWxkR2h2WkNCbWIzSWdTVU5GTDNndWVDQnlaWEYxWlhOMEFFbHVkbUZzYVdRZ1kyaGhjaUJwYmlCMWNtd2dabkpoWjIxbGJuUWdjM1JoY25RQVJYaHdaV04wWldRZ1pHOTBBRk53WVc0Z1kyRnNiR0poWTJzZ1pYSnliM0lnYVc0Z2IyNWZjM1JoZEhWekFFbHVkbUZzYVdRZ2NtVnpjRzl1YzJVZ2MzUmhkSFZ6QUVsdWRtRnNhV1FnWTJoaGNtRmpkR1Z5SUdsdUlHTm9kVzVySUdWNGRHVnVjMmx2Ym5NQVZYTmxjaUJqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmY21WelpYUmdJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDlqYUhWdWExOW9aV0ZrWlhKZ0lHTmhiR3hpWVdOcklHVnljbTl5QUdCdmJsOXRaWE56WVdkbFgySmxaMmx1WUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZlkyaDFibXRmWlhoMFpXNXphVzl1WDNaaGJIVmxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmYzNSaGRIVnpYMk52YlhCc1pYUmxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmZG1WeWMybHZibDlqYjIxd2JHVjBaV0FnWTJGc2JHSmhZMnNnWlhKeWIzSUFZRzl1WDNWeWJGOWpiMjF3YkdWMFpXQWdZMkZzYkdKaFkyc2daWEp5YjNJQVlHOXVYMk5vZFc1clgyTnZiWEJzWlhSbFlDQmpZV3hzWW1GamF5Qmxjbkp2Y2dCZ2IyNWZhR1ZoWkdWeVgzWmhiSFZsWDJOdmJYQnNaWFJsWUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZmJXVnpjMkZuWlY5amIyMXdiR1YwWldBZ1kyRnNiR0poWTJzZ1pYSnliM0lBWUc5dVgyMWxkR2h2WkY5amIyMXdiR1YwWldBZ1kyRnNiR0poWTJzZ1pYSnliM0lBWUc5dVgyaGxZV1JsY2w5bWFXVnNaRjlqYjIxd2JHVjBaV0FnWTJGc2JHSmhZMnNnWlhKeWIzSUFZRzl1WDJOb2RXNXJYMlY0ZEdWdWMybHZibDl1WVcxbFlDQmpZV3hzWW1GamF5Qmxjbkp2Y2dCVmJtVjRjR1ZqZEdWa0lHTm9ZWElnYVc0Z2RYSnNJSE5sY25abGNnQkpiblpoYkdsa0lHaGxZV1JsY2lCMllXeDFaU0JqYUdGeUFFbHVkbUZzYVdRZ2FHVmhaR1Z5SUdacFpXeGtJR05vWVhJQVUzQmhiaUJqWVd4c1ltRmpheUJsY25KdmNpQnBiaUJ2Ymw5MlpYSnphVzl1QUVsdWRtRnNhV1FnYldsdWIzSWdkbVZ5YzJsdmJnQkpiblpoYkdsa0lHMWhhbTl5SUhabGNuTnBiMjRBUlhod1pXTjBaV1FnYzNCaFkyVWdZV1owWlhJZ2RtVnljMmx2YmdCRmVIQmxZM1JsWkNCRFVreEdJR0ZtZEdWeUlIWmxjbk5wYjI0QVNXNTJZV3hwWkNCSVZGUlFJSFpsY25OcGIyNEFTVzUyWVd4cFpDQm9aV0ZrWlhJZ2RHOXJaVzRBVTNCaGJpQmpZV3hzWW1GamF5Qmxjbkp2Y2lCcGJpQnZibDkxY213QVNXNTJZV3hwWkNCamFHRnlZV04wWlhKeklHbHVJSFZ5YkFCVmJtVjRjR1ZqZEdWa0lITjBZWEowSUdOb1lYSWdhVzRnZFhKc0FFUnZkV0pzWlNCQUlHbHVJSFZ5YkFCRmJYQjBlU0JEYjI1MFpXNTBMVXhsYm1kMGFBQkpiblpoYkdsa0lHTm9ZWEpoWTNSbGNpQnBiaUJEYjI1MFpXNTBMVXhsYm1kMGFBQkVkWEJzYVdOaGRHVWdRMjl1ZEdWdWRDMU1aVzVuZEdnQVNXNTJZV3hwWkNCamFHRnlJR2x1SUhWeWJDQndZWFJvQUVOdmJuUmxiblF0VEdWdVozUm9JR05oYmlkMElHSmxJSEJ5WlhObGJuUWdkMmwwYUNCVWNtRnVjMlpsY2kxRmJtTnZaR2x1WndCSmJuWmhiR2xrSUdOb1lYSmhZM1JsY2lCcGJpQmphSFZ1YXlCemFYcGxBRk53WVc0Z1kyRnNiR0poWTJzZ1pYSnliM0lnYVc0Z2IyNWZhR1ZoWkdWeVgzWmhiSFZsQUZOd1lXNGdZMkZzYkdKaFkyc2daWEp5YjNJZ2FXNGdiMjVmWTJoMWJtdGZaWGgwWlc1emFXOXVYM1poYkhWbEFFbHVkbUZzYVdRZ1kyaGhjbUZqZEdWeUlHbHVJR05vZFc1cklHVjRkR1Z1YzJsdmJuTWdkbUZzZFdVQVRXbHpjMmx1WnlCbGVIQmxZM1JsWkNCTVJpQmhablJsY2lCb1pXRmtaWElnZG1Gc2RXVUFTVzUyWVd4cFpDQmdWSEpoYm5ObVpYSXRSVzVqYjJScGJtZGdJR2hsWVdSbGNpQjJZV3gxWlFCSmJuWmhiR2xrSUdOb1lYSmhZM1JsY2lCcGJpQmphSFZ1YXlCbGVIUmxibk5wYjI1eklIRjFiM1JsSUhaaGJIVmxBRWx1ZG1Gc2FXUWdZMmhoY21GamRHVnlJR2x1SUdOb2RXNXJJR1Y0ZEdWdWMybHZibk1nY1hWdmRHVmtJSFpoYkhWbEFGQmhkWE5sWkNCaWVTQnZibDlvWldGa1pYSnpYMk52YlhCc1pYUmxBRWx1ZG1Gc2FXUWdSVTlHSUhOMFlYUmxBRzl1WDNKbGMyVjBJSEJoZFhObEFHOXVYMk5vZFc1clgyaGxZV1JsY2lCd1lYVnpaUUJ2Ymw5dFpYTnpZV2RsWDJKbFoybHVJSEJoZFhObEFHOXVYMk5vZFc1clgyVjRkR1Z1YzJsdmJsOTJZV3gxWlNCd1lYVnpaUUJ2Ymw5emRHRjBkWE5mWTI5dGNHeGxkR1VnY0dGMWMyVUFiMjVmZG1WeWMybHZibDlqYjIxd2JHVjBaU0J3WVhWelpRQnZibDkxY214ZlkyOXRjR3hsZEdVZ2NHRjFjMlVBYjI1ZlkyaDFibXRmWTI5dGNHeGxkR1VnY0dGMWMyVUFiMjVmYUdWaFpHVnlYM1poYkhWbFgyTnZiWEJzWlhSbElIQmhkWE5sQUc5dVgyMWxjM05oWjJWZlkyOXRjR3hsZEdVZ2NHRjFjMlVBYjI1ZmJXVjBhRzlrWDJOdmJYQnNaWFJsSUhCaGRYTmxBRzl1WDJobFlXUmxjbDltYVdWc1pGOWpiMjF3YkdWMFpTQndZWFZ6WlFCdmJsOWphSFZ1YTE5bGVIUmxibk5wYjI1ZmJtRnRaU0J3WVhWelpRQlZibVY0Y0dWamRHVmtJSE53WVdObElHRm1kR1Z5SUhOMFlYSjBJR3hwYm1VQVUzQmhiaUJqWVd4c1ltRmpheUJsY25KdmNpQnBiaUJ2Ymw5amFIVnVhMTlsZUhSbGJuTnBiMjVmYm1GdFpRQkpiblpoYkdsa0lHTm9ZWEpoWTNSbGNpQnBiaUJqYUhWdWF5QmxlSFJsYm5OcGIyNXpJRzVoYldVQVVHRjFjMlVnYjI0Z1EwOU9Ua1ZEVkM5VmNHZHlZV1JsQUZCaGRYTmxJRzl1SUZCU1NTOVZjR2R5WVdSbEFFVjRjR1ZqZEdWa0lFaFVWRkF2TWlCRGIyNXVaV04wYVc5dUlGQnlaV1poWTJVQVUzQmhiaUJqWVd4c1ltRmpheUJsY25KdmNpQnBiaUJ2Ymw5dFpYUm9iMlFBUlhod1pXTjBaV1FnYzNCaFkyVWdZV1owWlhJZ2JXVjBhRzlrQUZOd1lXNGdZMkZzYkdKaFkyc2daWEp5YjNJZ2FXNGdiMjVmYUdWaFpHVnlYMlpwWld4a0FGQmhkWE5sWkFCSmJuWmhiR2xrSUhkdmNtUWdaVzVqYjNWdWRHVnlaV1FBU1c1MllXeHBaQ0J0WlhSb2IyUWdaVzVqYjNWdWRHVnlaV1FBVlc1bGVIQmxZM1JsWkNCamFHRnlJR2x1SUhWeWJDQnpZMmhsYldFQVVtVnhkV1Z6ZENCb1lYTWdhVzUyWVd4cFpDQmdWSEpoYm5ObVpYSXRSVzVqYjJScGJtZGdBRk5YU1ZSRFNGOVFVazlZV1FCVlUwVmZVRkpQV0ZrQVRVdEJRMVJKVmtsVVdRQlZUbEJTVDBORlUxTkJRa3hGWDBWT1ZFbFVXUUJEVDFCWkFFMVBWa1ZFWDFCRlVrMUJUa1ZPVkV4WkFGUlBUMTlGUVZKTVdRQk9UMVJKUmxrQVJrRkpURVZFWDBSRlVFVk9SRVZPUTFrQVFrRkVYMGRCVkVWWFFWa0FVRXhCV1FCUVZWUUFRMGhGUTB0UFZWUUFSMEZVUlZkQldWOVVTVTFGVDFWVUFGSkZVVlZGVTFSZlZFbE5SVTlWVkFCT1JWUlhUMUpMWDBOUFRrNUZRMVJmVkVsTlJVOVZWQUJEVDA1T1JVTlVTVTlPWDFSSlRVVlBWVlFBVEU5SFNVNWZWRWxOUlU5VlZBQk9SVlJYVDFKTFgxSkZRVVJmVkVsTlJVOVZWQUJRVDFOVUFFMUpVMFJKVWtWRFZFVkVYMUpGVVZWRlUxUUFRMHhKUlU1VVgwTk1UMU5GUkY5U1JWRlZSVk5VQUVOTVNVVk9WRjlEVEU5VFJVUmZURTlCUkY5Q1FVeEJUa05GUkY5U1JWRlZSVk5VQUVKQlJGOVNSVkZWUlZOVUFFaFVWRkJmVWtWUlZVVlRWRjlUUlU1VVgxUlBYMGhVVkZCVFgxQlBVbFFBVWtWUVQxSlVBRWxOWDBGZlZFVkJVRTlVQUZKRlUwVlVYME5QVGxSRlRsUUFUazlmUTA5T1ZFVk9WQUJRUVZKVVNVRk1YME5QVGxSRlRsUUFTRkJGWDBsT1ZrRk1TVVJmUTA5T1UxUkJUbFFBU0ZCRlgwTkNYMUpGVTBWVUFFZEZWQUJJVUVWZlUxUlNTVU5VQUVOUFRrWk1TVU5VQUZSRlRWQlBVa0ZTV1Y5U1JVUkpVa1ZEVkFCUVJWSk5RVTVGVGxSZlVrVkVTVkpGUTFRQVEwOU9Ua1ZEVkFCTlZVeFVTVjlUVkVGVVZWTUFTRkJGWDBsT1ZrRk1TVVJmVTFSQlZGVlRBRlJQVDE5TlFVNVpYMUpGVVZWRlUxUlRBRVZCVWt4WlgwaEpUbFJUQUZWT1FWWkJTVXhCUWt4RlgwWlBVbDlNUlVkQlRGOVNSVUZUVDA1VEFFOVFWRWxQVGxNQVUxZEpWRU5JU1U1SFgxQlNUMVJQUTA5TVV3QldRVkpKUVU1VVgwRk1VMDlmVGtWSFQxUkpRVlJGVXdCTlZVeFVTVkJNUlY5RFNFOUpRMFZUQUVsT1ZFVlNUa0ZNWDFORlVsWkZVbDlGVWxKUFVnQlhSVUpmVTBWU1ZrVlNYMVZPUzA1UFYwNWZSVkpTVDFJQVVrRkpURWRWVGw5RlVsSlBVZ0JKUkVWT1ZFbFVXVjlRVWs5V1NVUkZVbDlCVlZSSVJVNVVTVU5CVkVsUFRsOUZVbEpQVWdCVFUweGZRMFZTVkVsR1NVTkJWRVZmUlZKU1QxSUFTVTVXUVV4SlJGOVlYMFpQVWxkQlVrUkZSRjlHVDFJQVUwVlVYMUJCVWtGTlJWUkZVZ0JIUlZSZlVFRlNRVTFGVkVWU0FFaFFSVjlWVTBWU0FGTkZSVjlQVkVoRlVnQklVRVZmUTBKZlEwaFZUa3RmU0VWQlJFVlNBRTFMUTBGTVJVNUVRVklBVTBWVVZWQUFWMFZDWDFORlVsWkZVbDlKVTE5RVQxZE9BRlJGUVZKRVQxZE9BRWhRUlY5RFRFOVRSVVJmUTA5T1RrVkRWRWxQVGdCSVJWVlNTVk5VU1VOZlJWaFFTVkpCVkVsUFRnQkVTVk5EVDA1T1JVTlVSVVJmVDFCRlVrRlVTVTlPQUU1UFRsOUJWVlJJVDFKSlZFRlVTVlpGWDBsT1JrOVNUVUZVU1U5T0FFaFFSVjlKVGxaQlRFbEVYMVpGVWxOSlQwNEFTRkJGWDBOQ1gwMUZVMU5CUjBWZlFrVkhTVTRBVTBsVVJWOUpVMTlHVWs5YVJVNEFTRkJGWDBsT1ZrRk1TVVJmU0VWQlJFVlNYMVJQUzBWT0FFbE9Wa0ZNU1VSZlZFOUxSVTRBUms5U1FrbEVSRVZPQUVWT1NFRk9RMFZmV1U5VlVsOURRVXhOQUVoUVJWOUpUbFpCVEVsRVgxVlNUQUJDVEU5RFMwVkVYMEpaWDFCQlVrVk9WRUZNWDBOUFRsUlNUMHdBVFV0RFQwd0FRVU5NQUVoUVJWOUpUbFJGVWs1QlRBQlNSVkZWUlZOVVgwaEZRVVJGVWw5R1NVVk1SRk5mVkU5UFgweEJVa2RGWDFWT1QwWkdTVU5KUVV3QVNGQkZYMDlMQUZWT1RFbE9Td0JWVGt4UFEwc0FVRkpKQUZKRlZGSlpYMWRKVkVnQVNGQkZYMGxPVmtGTVNVUmZRMDlPVkVWT1ZGOU1SVTVIVkVnQVNGQkZYMVZPUlZoUVJVTlVSVVJmUTA5T1ZFVk9WRjlNUlU1SFZFZ0FSa3hWVTBnQVVGSlBVRkJCVkVOSUFFMHRVMFZCVWtOSUFGVlNTVjlVVDA5ZlRFOU9Sd0JRVWs5RFJWTlRTVTVIQUUxSlUwTkZURXhCVGtWUFZWTmZVRVZTVTBsVFZFVk9WRjlYUVZKT1NVNUhBRTFKVTBORlRFeEJUa1ZQVlZOZlYwRlNUa2xPUndCSVVFVmZTVTVXUVV4SlJGOVVVa0ZPVTBaRlVsOUZUa05QUkVsT1J3QkZlSEJsWTNSbFpDQkRVa3hHQUVoUVJWOUpUbFpCVEVsRVgwTklWVTVMWDFOSldrVUFUVTlXUlFCRFQwNVVTVTVWUlFCSVVFVmZRMEpmVTFSQlZGVlRYME5QVFZCTVJWUkZBRWhRUlY5RFFsOUlSVUZFUlZKVFgwTlBUVkJNUlZSRkFFaFFSVjlEUWw5V1JWSlRTVTlPWDBOUFRWQk1SVlJGQUVoUVJWOURRbDlWVWt4ZlEwOU5VRXhGVkVVQVNGQkZYME5DWDBOSVZVNUxYME5QVFZCTVJWUkZBRWhRUlY5RFFsOUlSVUZFUlZKZlZrRk1WVVZmUTA5TlVFeEZWRVVBU0ZCRlgwTkNYME5JVlU1TFgwVllWRVZPVTBsUFRsOVdRVXhWUlY5RFQwMVFURVZVUlFCSVVFVmZRMEpmUTBoVlRrdGZSVmhVUlU1VFNVOU9YMDVCVFVWZlEwOU5VRXhGVkVVQVNGQkZYME5DWDAxRlUxTkJSMFZmUTA5TlVFeEZWRVVBU0ZCRlgwTkNYMDFGVkVoUFJGOURUMDFRVEVWVVJRQklVRVZmUTBKZlNFVkJSRVZTWDBaSlJVeEVYME5QVFZCTVJWUkZBRVJGVEVWVVJRQklVRVZmU1U1V1FVeEpSRjlGVDBaZlUxUkJWRVVBU1U1V1FVeEpSRjlUVTB4ZlEwVlNWRWxHU1VOQlZFVUFVRUZWVTBVQVRrOWZVa1ZUVUU5T1UwVUFWVTVUVlZCUVQxSlVSVVJmVFVWRVNVRmZWRmxRUlFCSFQwNUZBRTVQVkY5QlEwTkZVRlJCUWt4RkFGTkZVbFpKUTBWZlZVNUJWa0ZKVEVGQ1RFVUFVa0ZPUjBWZlRrOVVYMU5CVkVsVFJrbEJRa3hGQUU5U1NVZEpUbDlKVTE5VlRsSkZRVU5JUVVKTVJRQlNSVk5RVDA1VFJWOUpVMTlUVkVGTVJRQlFWVkpIUlFCTlJWSkhSUUJTUlZGVlJWTlVYMGhGUVVSRlVsOUdTVVZNUkZOZlZFOVBYMHhCVWtkRkFGSkZVVlZGVTFSZlNFVkJSRVZTWDFSUFQxOU1RVkpIUlFCUVFWbE1UMEZFWDFSUFQxOU1RVkpIUlFCSlRsTlZSa1pKUTBsRlRsUmZVMVJQVWtGSFJRQklVRVZmVUVGVlUwVkVYMVZRUjFKQlJFVUFTRkJGWDFCQlZWTkZSRjlJTWw5VlVFZFNRVVJGQUZOUFZWSkRSUUJCVGs1UFZVNURSUUJVVWtGRFJRQklVRVZmVlU1RldGQkZRMVJGUkY5VFVFRkRSUUJFUlZORFVrbENSUUJWVGxOVlFsTkRVa2xDUlFCU1JVTlBVa1FBU0ZCRlgwbE9Wa0ZNU1VSZlRVVlVTRTlFQUU1UFZGOUdUMVZPUkFCUVVrOVFSa2xPUkFCVlRrSkpUa1FBVWtWQ1NVNUVBRlZPUVZWVVNFOVNTVnBGUkFCTlJWUklUMFJmVGs5VVgwRk1URTlYUlVRQVNGUlVVRjlXUlZKVFNVOU9YMDVQVkY5VFZWQlFUMUpVUlVRQVFVeFNSVUZFV1Y5U1JWQlBVbFJGUkFCQlEwTkZVRlJGUkFCT1QxUmZTVTFRVEVWTlJVNVVSVVFBVEU5UFVGOUVSVlJGUTFSRlJBQklVRVZmUTFKZlJWaFFSVU5VUlVRQVNGQkZYMHhHWDBWWVVFVkRWRVZFQUVOU1JVRlVSVVFBU1UxZlZWTkZSQUJJVUVWZlVFRlZVMFZFQUZSSlRVVlBWVlJmVDBORFZWSkZSQUJRUVZsTlJVNVVYMUpGVVZWSlVrVkVBRkJTUlVOUFRrUkpWRWxQVGw5U1JWRlZTVkpGUkFCUVVrOVlXVjlCVlZSSVJVNVVTVU5CVkVsUFRsOVNSVkZWU1ZKRlJBQk9SVlJYVDFKTFgwRlZWRWhGVGxSSlEwRlVTVTlPWDFKRlVWVkpVa1ZFQUV4RlRrZFVTRjlTUlZGVlNWSkZSQUJUVTB4ZlEwVlNWRWxHU1VOQlZFVmZVa1ZSVlVsU1JVUUFWVkJIVWtGRVJWOVNSVkZWU1ZKRlJBQlFRVWRGWDBWWVVFbFNSVVFBVUZKRlEwOU9SRWxVU1U5T1gwWkJTVXhGUkFCRldGQkZRMVJCVkVsUFRsOUdRVWxNUlVRQVVrVldRVXhKUkVGVVNVOU9YMFpCU1V4RlJBQlRVMHhmU0VGT1JGTklRVXRGWDBaQlNVeEZSQUJNVDBOTFJVUUFWRkpCVGxOR1QxSk5RVlJKVDA1ZlFWQlFURWxGUkFCT1QxUmZUVTlFU1VaSlJVUUFUazlVWDBWWVZFVk9SRVZFQUVKQlRrUlhTVVJVU0Y5TVNVMUpWRjlGV0VORlJVUkZSQUJUU1ZSRlgwbFRYMDlXUlZKTVQwRkVSVVFBU0VWQlJBQkZlSEJsWTNSbFpDQklWRlJRTHdBQVhoTUFBQ1lUQUFBd0VBQUE4QmNBQUowVEFBQVZFZ0FBT1JjQUFQQVNBQUFLRUFBQWRSSUFBSzBTQUFDQ0V3QUFUeFFBQUg4UUFBQ2dGUUFBSXhRQUFJa1NBQUNMRkFBQVRSVUFBTlFSQUFEUEZBQUFFQmdBQU1rV0FBRGNGZ0FBd1JFQUFPQVhBQUM3RkFBQWRCUUFBSHdWQUFEbEZBQUFDQmNBQUI4UUFBQmxGUUFBb3hRQUFDZ1ZBQUFDRlFBQW1SVUFBQ3dRQUFDTEdRQUFUdzhBQU5RT0FBQnFFQUFBemhBQUFBSVhBQUNKRGdBQWJoTUFBQndUQUFCbUZBQUFWaGNBQU1FVEFBRE5Fd0FBYkJNQUFHZ1hBQUJtRndBQVh4Y0FBQ0lUQUFET0R3QUFhUTRBQU5nT0FBQmpGZ0FBeXhNQUFLb09BQUFvRndBQUpoY0FBTVVUQUFCZEZnQUE2QkVBQUdjVEFBQmxFd0FBOGhZQUFITVRBQUFkRndBQStSWUFBUE1SQUFEUERnQUF6aFVBQUF3U0FBQ3pFUUFBcFJFQUFHRVFBQUF5RndBQXV4TUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFRSUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQUFBQUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUlEQWdJQ0FnSUFBQUlDQUFJQ0FBSUNBZ0lDQWdJQ0FnSUFCQUFBQUFBQUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQUFBQUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0FDQUFJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ0FBSUNBZ0lDQUFBQ0FnQUNBZ0FDQWdJQ0FnSUNBZ0lDQUFNQUJBQUFBQUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBQUFBQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQUFnQUNBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBYkc5elpXVmxjQzFoYkdsMlpRQUFBQUFBQUFBQUFBQUFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQUFBQUFBQUFBQUFBQkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVCQVFFQkFRRUJBUUVCQVFJQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJZMmgxYm10bFpBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFFQUFRRUJBUUVBQUFFQkFBRUJBQUVCQVFFQkFRRUJBUUVBQUFBQUFBQUFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBQUFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQkFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJsWTNScGIyNWxiblF0YkdWdVozUm9iMjV5YjNoNUxXTnZibTVsWTNScGIyNEFBQUFBQUFBQUFBQUFBQUFBQUFCeVlXNXpabVZ5TFdWdVkyOWthVzVuY0dkeVlXUmxEUW9OQ2cwS1UwME5DZzBLVkZSUUwwTkZMMVJUVUM4QUFBQUFBQUFBQUFBQUFBQUJBZ0FCQXdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFBQUFBQUFBQUFBQVFJQUFRTUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVBUUVGQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUFBQUFBQUFBQUFBRUFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFQkFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQUFBQUFBQUFBQUFBQVFBQUFnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTUVBQUFFQkFRRUJBUUVCQVFFQkFVRUJBUUVCQVFFQkFRRUJBUUFCQUFHQndRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBRUFBUUFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRUFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUlBQUFBQUFBQURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3QUFBQUFBQUFNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQUFBQkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUFBQUFBQUFBQUFBSUFBQUFBQWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01BQUFBQUFBQURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCT1QxVk9RMFZGUTB0UFZWUk9SVU5VUlZSRlExSkpRa1ZNVlZOSVJWUkZRVVJUUlVGU1EwaFNSMFZEVkVsV1NWUlpURVZPUkVGU1ZrVlBWRWxHV1ZCVVNVOU9VME5JVTBWQldWTlVRVlJEU0VkRlQxSkVTVkpGUTFSUFVsUlNRMGhRUVZKQlRVVlVSVkpWVWtORlFsTkRVa2xDUlVGU1JFOVhUa0ZEUlVsT1JFNUxRMHRWUWxORFVrbENSVWhVVkZBdlFVUlVVQzg9J1xuIiwKICAgICJtb2R1bGUuZXhwb3J0cyA9ICdBR0Z6YlFFQUFBQUJNQWhnQVg4QmYyQURmMzkvQVg5Z0JIOS9mMzhCZjJBQUFHQURmMzkvQUdBQmZ3QmdBbjkvQUdBR2YzOS9mMzkvQUFMTEFRZ0RaVzUyR0hkaGMyMWZiMjVmYUdWaFpHVnljMTlqYjIxd2JHVjBaUUFDQTJWdWRoVjNZWE50WDI5dVgyMWxjM05oWjJWZlltVm5hVzRBQUFObGJuWUxkMkZ6YlY5dmJsOTFjbXdBQVFObGJuWU9kMkZ6YlY5dmJsOXpkR0YwZFhNQUFRTmxibllVZDJGemJWOXZibDlvWldGa1pYSmZabWxsYkdRQUFRTmxibllVZDJGemJWOXZibDlvWldGa1pYSmZkbUZzZFdVQUFRTmxibllNZDJGemJWOXZibDlpYjJSNUFBRURaVzUyR0hkaGMyMWZiMjVmYldWemMyRm5aVjlqYjIxd2JHVjBaUUFBQTBaRkF3TUVBQUFGQUFBQUFBQUFCUUVGQUFVRkJRQUFCZ0FBQUFBR0JnWUdBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBQUFCQVFjQUFBVUZBd0FCQkFVQmNBRVNFZ1VEQVFBQ0JnZ0Jmd0ZCZ05RRUN3ZlJCU0lHYldWdGIzSjVBZ0FMWDJsdWFYUnBZV3hwZW1VQUNSbGZYMmx1WkdseVpXTjBYMloxYm1OMGFXOXVYM1JoWW14bEFRQUxiR3hvZEhSd1gybHVhWFFBQ2hoc2JHaDBkSEJmYzJodmRXeGtYMnRsWlhCZllXeHBkbVVBUVF4c2JHaDBkSEJmWVd4c2IyTUFEQVp0WVd4c2IyTUFSZ3RzYkdoMGRIQmZabkpsWlFBTkJHWnlaV1VBU0E5c2JHaDBkSEJmWjJWMFgzUjVjR1VBRGhWc2JHaDBkSEJmWjJWMFgyaDBkSEJmYldGcWIzSUFEeFZzYkdoMGRIQmZaMlYwWDJoMGRIQmZiV2x1YjNJQUVCRnNiR2gwZEhCZloyVjBYMjFsZEdodlpBQVJGbXhzYUhSMGNGOW5aWFJmYzNSaGRIVnpYMk52WkdVQUVoSnNiR2gwZEhCZloyVjBYM1Z3WjNKaFpHVUFFd3hzYkdoMGRIQmZjbVZ6WlhRQUZBNXNiR2gwZEhCZlpYaGxZM1YwWlFBVkZHeHNhSFIwY0Y5elpYUjBhVzVuYzE5cGJtbDBBQllOYkd4b2RIUndYMlpwYm1semFBQVhER3hzYUhSMGNGOXdZWFZ6WlFBWURXeHNhSFIwY0Y5eVpYTjFiV1VBR1J0c2JHaDBkSEJmY21WemRXMWxYMkZtZEdWeVgzVndaM0poWkdVQUdoQnNiR2gwZEhCZloyVjBYMlZ5Y201dkFCc1hiR3hvZEhSd1gyZGxkRjlsY25KdmNsOXlaV0Z6YjI0QUhCZHNiR2gwZEhCZmMyVjBYMlZ5Y205eVgzSmxZWE52YmdBZEZHeHNhSFIwY0Y5blpYUmZaWEp5YjNKZmNHOXpBQjRSYkd4b2RIUndYMlZ5Y201dlgyNWhiV1VBSHhKc2JHaDBkSEJmYldWMGFHOWtYMjVoYldVQUlCSnNiR2gwZEhCZmMzUmhkSFZ6WDI1aGJXVUFJUnBzYkdoMGRIQmZjMlYwWDJ4bGJtbGxiblJmYUdWaFpHVnljd0FpSVd4c2FIUjBjRjl6WlhSZmJHVnVhV1Z1ZEY5amFIVnVhMlZrWDJ4bGJtZDBhQUFqSFd4c2FIUjBjRjl6WlhSZmJHVnVhV1Z1ZEY5clpXVndYMkZzYVhabEFDUWtiR3hvZEhSd1gzTmxkRjlzWlc1cFpXNTBYM1J5WVc1elptVnlYMlZ1WTI5a2FXNW5BQ1VZYkd4b2RIUndYMjFsYzNOaFoyVmZibVZsWkhOZlpXOW1BRDhKRndFQVFRRUxFUUVDQXdRRkN3WUhOVGszTVM4dEp5c3BDckxnQWtVQ0FBc0lBQkNJZ0lDQUFBc1pBQ0FBRU1LQWdJQUFHaUFBSUFJMkFqZ2dBQ0FCT2dBb0N4d0FJQUFnQUM4Qk1pQUFMUUF1SUFBUXdZQ0FnQUFRZ0lDQWdBQUxLZ0VCZjBIQUFCREdnSUNBQUNJQkVNS0FnSUFBR2lBQlFZQ0lnSUFBTmdJNElBRWdBRG9BS0NBQkN3b0FJQUFReUlDQWdBQUxCd0FnQUMwQUtBc0hBQ0FBTFFBcUN3Y0FJQUF0QUNzTEJ3QWdBQzBBS1FzSEFDQUFMd0V5Q3djQUlBQXRBQzRMUlFFRWZ5QUFLQUlZSVFFZ0FDMEFMU0VDSUFBdEFDZ2hBeUFBS0FJNElRUWdBQkRDZ0lDQUFCb2dBQ0FFTmdJNElBQWdBem9BS0NBQUlBSTZBQzBnQUNBQk5nSVlDeEVBSUFBZ0FTQUJJQUpxRU1PQWdJQUFDeEFBSUFCQkFFSGNBQkRNZ0lDQUFCb0xad0VCZjBFQUlRRUNRQ0FBS0FJTURRQUNRQUpBQWtBQ1FDQUFMUUF2RGdNQkFBTUNDeUFBS0FJNElnRkZEUUFnQVNnQ0xDSUJSUTBBSUFBZ0FSR0FnSUNBQUFBaUFRMERDMEVBRHdzUXlvQ0FnQUFBQ3lBQVFjT1dnSUFBTmdJUVFRNGhBUXNnQVFzZUFBSkFJQUFvQWd3TkFDQUFRZEdiZ0lBQU5nSVFJQUJCRlRZQ0RBc0xGZ0FDUUNBQUtBSU1RUlZIRFFBZ0FFRUFOZ0lNQ3dzV0FBSkFJQUFvQWd4QkZrY05BQ0FBUVFBMkFnd0xDd2NBSUFBb0Fnd0xCd0FnQUNnQ0VBc0pBQ0FBSUFFMkFoQUxCd0FnQUNnQ0ZBc2lBQUpBSUFCQkpFa05BQkRLZ0lDQUFBQUxJQUJCQW5SQm9MT0FnQUJxS0FJQUN5SUFBa0FnQUVFdVNRMEFFTXFBZ0lBQUFBc2dBRUVDZEVHd3RJQ0FBR29vQWdBTDdnc0JBWDlCNjZpQWdBQWhBUUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBSUFCQm5IOXFEdlFEWTJJQUFXRmhZV0ZoWVFJREJBVmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoQmdjSUNRb0xEQTBPRDJGaFlXRmhFR0ZoWVdGaFlXRmhZV0ZoRVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVJJVEZCVVdGeGdaR2h0aFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaEhCMGVIeUFoSWlNa0pTWW5LQ2txS3l3dExpOHdNVEl6TkRVMllUYzRPVHBoWVdGaFlXRmhZVHRoWVdFOFlXRmhZVDArUDJGaFlXRmhZV0ZoUUdGaFFXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZVUpEUkVWR1IwaEpTa3RNVFU1UFVGRlNVMkZoWVdGaFlXRmhWRlZXVjFoWldsdGhYRjFoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGZVlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFgyQmhDMEhocDRDQUFBOExRYVNoZ0lBQUR3dEJ5NnlBZ0FBUEMwSCtzWUNBQUE4TFFjQ2tnSUFBRHd0QnE2U0FnQUFQQzBHTnFJQ0FBQThMUWVLbWdJQUFEd3RCZ0xDQWdBQVBDMEc1cjRDQUFBOExRZGVrZ0lBQUR3dEI3NStBZ0FBUEMwSGhuNENBQUE4TFFmcWZnSUFBRHd0QjhxQ0FnQUFQQzBHb3I0Q0FBQThMUWE2eWdJQUFEd3RCaUxDQWdBQVBDMEhzcDRDQUFBOExRWUtpZ0lBQUR3dEJqcDJBZ0FBUEMwSFFyb0NBQUE4TFFjcWpnSUFBRHd0QnhiS0FnQUFQQzBIZm5JQ0FBQThMUWRLY2dJQUFEd3RCeEtDQWdBQVBDMEhYb0lDQUFBOExRYUtmZ0lBQUR3dEI3YTZBZ0FBUEMwR3JzSUNBQUE4TFFkU2xnSUFBRHd0QnpLNkFnQUFQQzBINnJvQ0FBQThMUWZ5cmdJQUFEd3RCMHJDQWdBQVBDMEh4bllDQUFBOExRYnVnZ0lBQUR3dEI5NnVBZ0FBUEMwR1FzWUNBQUE4TFFkZXhnSUFBRHd0Qm9xMkFnQUFQQzBIVXA0Q0FBQThMUWVDcmdJQUFEd3RCbjZ5QWdBQVBDMEhyc1lDQUFBOExRZFdmZ0lBQUR3dEJ5ckdBZ0FBUEMwSGVwWUNBQUE4TFFkU2VnSUFBRHd0QjlKeUFnQUFQQzBHbnNvQ0FBQThMUWJHZGdJQUFEd3RCb0oyQWdBQVBDMEc1c1lDQUFBOExRYnl3Z0lBQUR3dEJrcUdBZ0FBUEMwR3pwb0NBQUE4TFFlbXNnSUFBRHd0QnJKNkFnQUFQQzBIVXE0Q0FBQThMUWZlbWdJQUFEd3RCZ0thQWdBQVBDMEd3b1lDQUFBOExRZjZlZ0lBQUR3dEJqYU9BZ0FBUEMwR0pyWUNBQUE4TFFmZWlnSUFBRHd0Qm9MR0FnQUFQQzBHdW40Q0FBQThMUWNhbGdJQUFEd3RCNko2QWdBQVBDMEdUb29DQUFBOExRY0t2Z0lBQUR3dEJ3NTJBZ0FBUEMwR0xySUNBQUE4TFFlR2RnSUFBRHd0QmphK0FnQUFQQzBIcW9ZQ0FBQThMUWJTdGdJQUFEd3RCMHErQWdBQVBDMEhmc29DQUFBOExRZEt5Z0lBQUR3dEI4TENBZ0FBUEMwR3Bvb0NBQUE4TFFmbWpnSUFBRHd0Qm1aNkFnQUFQQzBHMXJJQ0FBQThMUVp1d2dJQUFEd3RCa3JLQWdBQVBDMEcycTRDQUFBOExRY0tpZ0lBQUR3dEIrTEtBZ0FBUEMwR2VwWUNBQUE4TFFkQ2lnSUFBRHd0QnVwNkFnQUFQQzBHQm5vQ0FBQThMRU1xQWdJQUFBQXRCMXFHQWdBQWhBUXNnQVFzV0FDQUFJQUF0QUMxQi9nRnhJQUZCQUVkeU9nQXRDeGtBSUFBZ0FDMEFMVUg5QVhFZ0FVRUFSMEVCZEhJNkFDMExHUUFnQUNBQUxRQXRRZnNCY1NBQlFRQkhRUUowY2pvQUxRc1pBQ0FBSUFBdEFDMUI5d0Z4SUFGQkFFZEJBM1J5T2dBdEN5NEJBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWdBaUJFVU5BQ0FBSUFRUmdJQ0FnQUFBSVFNTElBTUxTUUVDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ0JDSUVSUTBBSUFBZ0FTQUNJQUZySUFRUmdZQ0FnQUFBSWdOQmYwY05BQ0FBUWNhUmdJQUFOZ0lRUVJnaEF3c2dBd3N1QVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSXdJZ1JGRFFBZ0FDQUVFWUNBZ0lBQUFDRURDeUFEQzBrQkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9BZ2dpQkVVTkFDQUFJQUVnQWlBQmF5QUVFWUdBZ0lBQUFDSURRWDlIRFFBZ0FFSDJpb0NBQURZQ0VFRVlJUU1MSUFNTExnRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDTkNJRVJRMEFJQUFnQkJHQWdJQ0FBQUFoQXdzZ0F3dEpBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FJTUlnUkZEUUFnQUNBQklBSWdBV3NnQkJHQmdJQ0FBQUFpQTBGL1J3MEFJQUJCN1pxQWdBQTJBaEJCR0NFREN5QURDeTRCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FqZ2lCRVVOQUNBQUlBUVJnSUNBZ0FBQUlRTUxJQU1MU1FFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NFQ0lFUlEwQUlBQWdBU0FDSUFGcklBUVJnWUNBZ0FBQUlnTkJmMGNOQUNBQVFaV1FnSUFBTmdJUVFSZ2hBd3NnQXdzdUFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUk4SWdSRkRRQWdBQ0FFRVlDQWdJQUFBQ0VEQ3lBREMwa0JBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWhRaUJFVU5BQ0FBSUFFZ0FpQUJheUFFRVlHQWdJQUFBQ0lEUVg5SERRQWdBRUdxbTRDQUFEWUNFRUVZSVFNTElBTUxMZ0VDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ1FDSUVSUTBBSUFBZ0JCR0FnSUNBQUFBaEF3c2dBd3RKQVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSVlJZ1JGRFFBZ0FDQUJJQUlnQVdzZ0JCR0JnSUNBQUFBaUEwRi9SdzBBSUFCQjdaT0FnQUEyQWhCQkdDRURDeUFEQ3k0QkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9Ba1FpQkVVTkFDQUFJQVFSZ0lDQWdBQUFJUU1MSUFNTExnRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDSkNJRVJRMEFJQUFnQkJHQWdJQ0FBQUFoQXdzZ0F3c3VBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FJc0lnUkZEUUFnQUNBRUVZQ0FnSUFBQUNFREN5QURDMGtCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FpZ2lCRVVOQUNBQUlBRWdBaUFCYXlBRUVZR0FnSUFBQUNJRFFYOUhEUUFnQUVIMmlJQ0FBRFlDRUVFWUlRTUxJQU1MTGdFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NVQ0lFUlEwQUlBQWdCQkdBZ0lDQUFBQWhBd3NnQXd0SkFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUljSWdSRkRRQWdBQ0FCSUFJZ0FXc2dCQkdCZ0lDQUFBQWlBMEYvUncwQUlBQkJ3cG1BZ0FBMkFoQkJHQ0VEQ3lBREN5NEJBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWtnaUJFVU5BQ0FBSUFRUmdJQ0FnQUFBSVFNTElBTUxTUUVDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ0lDSUVSUTBBSUFBZ0FTQUNJQUZySUFRUmdZQ0FnQUFBSWdOQmYwY05BQ0FBUVpTVWdJQUFOZ0lRUVJnaEF3c2dBd3N1QVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSk1JZ1JGRFFBZ0FDQUVFWUNBZ0lBQUFDRURDeUFEQ3k0QkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9BbFFpQkVVTkFDQUFJQVFSZ0lDQWdBQUFJUU1MSUFNTExnRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDV0NJRVJRMEFJQUFnQkJHQWdJQ0FBQUFoQXdzZ0F3dEZBUUYvQWtBQ1FDQUFMd0V3UVJSeFFSUkhEUUJCQVNFRElBQXRBQ2hCQVVZTkFTQUFMd0V5UWVVQVJpRUREQUVMSUFBdEFDbEJCVVloQXdzZ0FDQURPZ0F1UVFBTC9nRUJBMzlCQVNFREFrQWdBQzhCTUNJRVFRaHhEUUFnQUNrRElFSUFVaUVEQ3dKQUFrQWdBQzBBTGtVTkFFRUJJUVVnQUMwQUtVRUZSZzBCUVFFaEJTQUVRY0FBY1VVZ0EzRkJBVWNOQVF0QkFDRUZJQVJCd0FCeERRQkJBaUVGSUFSQi8vOERjU0lEUVFoeERRQUNRQ0FEUVlBRWNVVU5BQUpBSUFBdEFDaEJBVWNOQUNBQUxRQXRRUXB4RFFCQkJROExRUVFQQ3dKQUlBTkJJSEVOQUFKQUlBQXRBQ2hCQVVZTkFDQUFMd0V5UWYvL0EzRWlBRUdjZjJwQjVBQkpEUUFnQUVITUFVWU5BQ0FBUWJBQ1JnMEFRUVFoQlNBRVFTaHhSUTBDSUFOQmlBUnhRWUFFUmcwQ0MwRUFEd3RCQUVFRElBQXBBeUJRR3lFRkN5QUZDMklCQW45QkFDRUJBa0FnQUMwQUtFRUJSZzBBSUFBdkFUSkIvLzhEY1NJQ1FaeC9ha0hrQUVrTkFDQUNRY3dCUmcwQUlBSkJzQUpHRFFBZ0FDOEJNQ0lBUWNBQWNRMEFRUUVoQVNBQVFZZ0VjVUdBQkVZTkFDQUFRU2h4UlNFQkN5QUJDNmNCQVFOL0FrQUNRQUpBSUFBdEFDcEZEUUFnQUMwQUswVU5BRUVBSVFNZ0FDOEJNQ0lFUVFKeFJRMEJEQUlMUVFBaEF5QUFMd0V3SWdSQkFYRkZEUUVMUVFFaEF5QUFMUUFvUVFGR0RRQWdBQzhCTWtILy93TnhJZ1ZCbkg5cVFlUUFTUTBBSUFWQnpBRkdEUUFnQlVHd0FrWU5BQ0FFUWNBQWNRMEFRUUFoQXlBRVFZZ0VjVUdBQkVZTkFDQUVRU2h4UVFCSElRTUxJQUJCQURzQk1DQUFRUUE2QUM4Z0F3dVpBUUVDZndKQUFrQUNRQ0FBTFFBcVJRMEFJQUF0QUN0RkRRQkJBQ0VCSUFBdkFUQWlBa0VDY1VVTkFRd0NDMEVBSVFFZ0FDOEJNQ0lDUVFGeFJRMEJDMEVCSVFFZ0FDMEFLRUVCUmcwQUlBQXZBVEpCLy84RGNTSUFRWngvYWtIa0FFa05BQ0FBUWN3QlJnMEFJQUJCc0FKR0RRQWdBa0hBQUhFTkFFRUFJUUVnQWtHSUJIRkJnQVJHRFFBZ0FrRW9jVUVBUnlFQkN5QUJDMGtCQVhzZ0FFRVFhdjBNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ0lCL1FzREFDQUFJQUg5Q3dNQUlBQkJNR29nQWYwTEF3QWdBRUVnYWlBQi9Rc0RBQ0FBUWQwQk5nSWNRUUFMZXdFQmZ3SkFJQUFvQWd3aUF3MEFBa0FnQUNnQ0JFVU5BQ0FBSUFFMkFnUUxBa0FnQUNBQklBSVF4SUNBZ0FBaUF3MEFJQUFvQWd3UEN5QUFJQU0yQWh4QkFDRURJQUFvQWdRaUFVVU5BQ0FBSUFFZ0FpQUFLQUlJRVlHQWdJQUFBQ0lCUlEwQUlBQWdBallDRkNBQUlBRTJBZ3dnQVNFREN5QURDK1R6QVFNT2Z3TitCSDhqZ0lDQWdBQkJFR3NpQXlTQWdJQ0FBQ0FCSVFRZ0FTRUZJQUVoQmlBQklRY2dBU0VJSUFFaENTQUJJUW9nQVNFTElBRWhEQ0FCSVEwZ0FTRU9JQUVoRHdKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUNBQUtBSWNJaEJCZjJvTzNRSGFBUUhaQVFJREJBVUdCd2dKQ2dzTURRN1lBUThRMXdFUkV0WUJFeFFWRmhjWUdSb2I0QUhmQVJ3ZEh0VUJIeUFoSWlNa0pkUUJKaWNvS1NvckxOTUIwZ0V0THRFQjBBRXZNREV5TXpRMU5qYzRPVG83UEQwK1AwQkJRa05FUlViYkFVZElTVXJQQWM0QlM4MEJUTXdCVFU1UFVGRlNVMVJWVmxkWVdWcGJYRjFlWDJCaFltTmtaV1puYUdscWEyeHRibTl3Y1hKemRIVjJkM2g1ZW50OGZYNS9nQUdCQVlJQmd3R0VBWVVCaGdHSEFZZ0JpUUdLQVlzQmpBR05BWTRCandHUUFaRUJrZ0dUQVpRQmxRR1dBWmNCbUFHWkFab0Jtd0djQVowQm5nR2ZBYUFCb1FHaUFhTUJwQUdsQWFZQnB3R29BYWtCcWdHckFhd0JyUUd1QWE4QnNBR3hBYklCc3dHMEFiVUJ0Z0czQWNzQnlnRzRBY2tCdVFISUFib0J1d0c4QWIwQnZnRy9BY0FCd1FIQ0FjTUJ4QUhGQWNZQkFOd0JDMEVBSVJBTXhnRUxRUTRoRUF6RkFRdEJEU0VRRE1RQkMwRVBJUkFNd3dFTFFSQWhFQXpDQVF0QkV5RVFETUVCQzBFVUlSQU13QUVMUVJVaEVBeS9BUXRCRmlFUURMNEJDMEVYSVJBTXZRRUxRUmdoRUF5OEFRdEJHU0VRRExzQkMwRWFJUkFNdWdFTFFSc2hFQXk1QVF0QkhDRVFETGdCQzBFSUlSQU10d0VMUVIwaEVBeTJBUXRCSUNFUURMVUJDMEVmSVJBTXRBRUxRUWNoRUF5ekFRdEJJU0VRRExJQkMwRWlJUkFNc1FFTFFSNGhFQXl3QVF0Qkl5RVFESzhCQzBFU0lSQU1yZ0VMUVJFaEVBeXRBUXRCSkNFUURLd0JDMEVsSVJBTXF3RUxRU1loRUF5cUFRdEJKeUVRREtrQkMwSERBU0VRREtnQkMwRXBJUkFNcHdFTFFTc2hFQXltQVF0QkxDRVFES1VCQzBFdElSQU1wQUVMUVM0aEVBeWpBUXRCTHlFUURLSUJDMEhFQVNFUURLRUJDMEV3SVJBTW9BRUxRVFFoRUF5ZkFRdEJEQ0VRREo0QkMwRXhJUkFNblFFTFFUSWhFQXljQVF0Qk15RVFESnNCQzBFNUlSQU1tZ0VMUVRVaEVBeVpBUXRCeFFFaEVBeVlBUXRCQ3lFUURKY0JDMEU2SVJBTWxnRUxRVFloRUF5VkFRdEJDaUVRREpRQkMwRTNJUkFNa3dFTFFUZ2hFQXlTQVF0QlBDRVFESkVCQzBFN0lSQU1rQUVMUVQwaEVBeVBBUXRCQ1NFUURJNEJDMEVvSVJBTWpRRUxRVDRoRUF5TUFRdEJQeUVRRElzQkMwSEFBQ0VRRElvQkMwSEJBQ0VRRElrQkMwSENBQ0VRRElnQkMwSERBQ0VRREljQkMwSEVBQ0VRRElZQkMwSEZBQ0VRRElVQkMwSEdBQ0VRRElRQkMwRXFJUkFNZ3dFTFFjY0FJUkFNZ2dFTFFjZ0FJUkFNZ1FFTFFja0FJUkFNZ0FFTFFjb0FJUkFNZnd0Qnl3QWhFQXgrQzBITkFDRVFESDBMUWN3QUlSQU1mQXRCemdBaEVBeDdDMEhQQUNFUURIb0xRZEFBSVJBTWVRdEIwUUFoRUF4NEMwSFNBQ0VRREhjTFFkTUFJUkFNZGd0QjFBQWhFQXgxQzBIV0FDRVFESFFMUWRVQUlSQU1jd3RCQmlFUURISUxRZGNBSVJBTWNRdEJCU0VRREhBTFFkZ0FJUkFNYnd0QkJDRVFERzRMUWRrQUlSQU1iUXRCMmdBaEVBeHNDMEhiQUNFUURHc0xRZHdBSVJBTWFndEJBeUVRREdrTFFkMEFJUkFNYUF0QjNnQWhFQXhuQzBIZkFDRVFER1lMUWVFQUlSQU1aUXRCNEFBaEVBeGtDMEhpQUNFUURHTUxRZU1BSVJBTVlndEJBaUVRREdFTFFlUUFJUkFNWUF0QjVRQWhFQXhmQzBIbUFDRVFERjRMUWVjQUlSQU1YUXRCNkFBaEVBeGNDMEhwQUNFUURGc0xRZW9BSVJBTVdndEI2d0FoRUF4WkMwSHNBQ0VRREZnTFFlMEFJUkFNVnd0QjdnQWhFQXhXQzBIdkFDRVFERlVMUWZBQUlSQU1WQXRCOFFBaEVBeFRDMEh5QUNFUURGSUxRZk1BSVJBTVVRdEI5QUFoRUF4UUMwSDFBQ0VRREU4TFFmWUFJUkFNVGd0Qjl3QWhFQXhOQzBINEFDRVFERXdMUWZrQUlSQU1Td3RCK2dBaEVBeEtDMEg3QUNFUURFa0xRZndBSVJBTVNBdEIvUUFoRUF4SEMwSCtBQ0VRREVZTFFmOEFJUkFNUlF0QmdBRWhFQXhFQzBHQkFTRVFERU1MUVlJQklSQU1RZ3RCZ3dFaEVBeEJDMEdFQVNFUURFQUxRWVVCSVJBTVB3dEJoZ0VoRUF3K0MwR0hBU0VRREQwTFFZZ0JJUkFNUEF0QmlRRWhFQXc3QzBHS0FTRVFERG9MUVlzQklSQU1PUXRCakFFaEVBdzRDMEdOQVNFUUREY0xRWTRCSVJBTU5ndEJqd0VoRUF3MUMwR1FBU0VRRERRTFFaRUJJUkFNTXd0QmtnRWhFQXd5QzBHVEFTRVFEREVMUVpRQklSQU1NQXRCbFFFaEVBd3ZDMEdXQVNFUURDNExRWmNCSVJBTUxRdEJtQUVoRUF3c0MwR1pBU0VRRENzTFFab0JJUkFNS2d0Qm13RWhFQXdwQzBHY0FTRVFEQ2dMUVowQklSQU1Kd3RCbmdFaEVBd21DMEdmQVNFUURDVUxRYUFCSVJBTUpBdEJvUUVoRUF3akMwR2lBU0VRRENJTFFhTUJJUkFNSVF0QnBBRWhFQXdnQzBHbEFTRVFEQjhMUWFZQklSQU1IZ3RCcHdFaEVBd2RDMEdvQVNFUURCd0xRYWtCSVJBTUd3dEJxZ0VoRUF3YUMwR3JBU0VRREJrTFFhd0JJUkFNR0F0QnJRRWhFQXdYQzBHdUFTRVFEQllMUVFFaEVBd1ZDMEd2QVNFUURCUUxRYkFCSVJBTUV3dEJzUUVoRUF3U0MwR3pBU0VRREJFTFFiSUJJUkFNRUF0QnRBRWhFQXdQQzBHMUFTRVFEQTRMUWJZQklSQU1EUXRCdHdFaEVBd01DMEc0QVNFUURBc0xRYmtCSVJBTUNndEJ1Z0VoRUF3SkMwRzdBU0VRREFnTFFjWUJJUkFNQnd0QnZBRWhFQXdHQzBHOUFTRVFEQVVMUWI0QklSQU1CQXRCdndFaEVBd0RDMEhBQVNFUURBSUxRY0lCSVJBTUFRdEJ3UUVoRUFzRFFBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQkFPeHdFQUFRSURCQVVHQndnSkNnc01EUTRQRUJFU0V4UVZGaGNZR1JvYkhCNGZJQ0VqSlNnL1FFRkVSVVpIU0VsS1MweE5UMUJSVWxQZUExZFpXMXhkWUdKbFptZG9hV3ByYkcxdmNIRnljM1IxZG5kNGVYcDdmSDErZ0FHQ0FZVUJoZ0dIQVlrQml3R01BWTBCamdHUEFaQUJrUUdVQVpVQmxnR1hBWmdCbVFHYUFac0JuQUdkQVo0Qm53R2dBYUVCb2dHakFhUUJwUUdtQWFjQnFBR3BBYW9CcXdHc0FhMEJyZ0d2QWJBQnNRR3lBYk1CdEFHMUFiWUJ0d0c0QWJrQnVnRzdBYndCdlFHK0FiOEJ3QUhCQWNJQnd3SEVBY1VCeGdISEFjZ0J5UUhLQWNzQnpBSE5BYzRCendIUUFkRUIwZ0hUQWRRQjFRSFdBZGNCMkFIWkFkb0Iyd0hjQWQwQjNnSGdBZUVCNGdIakFlUUI1UUhtQWVjQjZBSHBBZW9CNndIc0FlMEI3Z0h2QWZBQjhRSHlBZk1CbVFLa0FyQUMvZ0wrQWdzZ0FTSUVJQUpIRGZNQlFkMEJJUkFNL3dNTElBRWlFQ0FDUnczZEFVSERBU0VRRFA0REN5QUJJZ0VnQWtjTmtBRkI5d0FoRUF6OUF3c2dBU0lCSUFKSERZWUJRZThBSVJBTS9BTUxJQUVpQVNBQ1J3MS9RZW9BSVJBTSt3TUxJQUVpQVNBQ1J3MTdRZWdBSVJBTStnTUxJQUVpQVNBQ1J3MTRRZVlBSVJBTStRTUxJQUVpQVNBQ1J3MGFRUmdoRUF6NEF3c2dBU0lCSUFKSERSUkJFaUVRRFBjREN5QUJJZ0VnQWtjTldVSEZBQ0VRRFBZREN5QUJJZ0VnQWtjTlNrRS9JUkFNOVFNTElBRWlBU0FDUncxSVFUd2hFQXowQXdzZ0FTSUJJQUpIRFVGQk1TRVFEUE1EQ3lBQUxRQXVRUUZHRGVzRERJY0NDeUFBSUFFaUFTQUNFTUNBZ0lBQVFRRkhEZVlCSUFCQ0FEY0RJQXpuQVFzZ0FDQUJJZ0VnQWhDMGdJQ0FBQ0lRRGVjQklBRWhBUXoxQWdzQ1FDQUJJZ0VnQWtjTkFFRUdJUkFNOEFNTElBQWdBVUVCYWlJQklBSVF1NENBZ0FBaUVBM29BU0FCSVFFTU1Rc2dBRUlBTndNZ1FSSWhFQXpWQXdzZ0FTSVFJQUpIRFN0QkhTRVFETzBEQ3dKQUlBRWlBU0FDUmcwQUlBRkJBV29oQVVFUUlSQU0xQU1MUVFjaEVBenNBd3NnQUVJQUlBQXBBeUFpRVNBQ0lBRWlFR3V0SWhKOUloTWdFeUFSVmhzM0F5QWdFU0FTVmlJVVJRM2xBVUVJSVJBTTZ3TUxBa0FnQVNJQklBSkdEUUFnQUVHSmdJQ0FBRFlDQ0NBQUlBRTJBZ1FnQVNFQlFSUWhFQXpTQXd0QkNTRVFET29EQ3lBQklRRWdBQ2tESUZBTjVBRWdBU0VCRFBJQ0N3SkFJQUVpQVNBQ1J3MEFRUXNoRUF6cEF3c2dBQ0FCUVFGcUlnRWdBaEMyZ0lDQUFDSVFEZVVCSUFFaEFRenlBZ3NnQUNBQklnRWdBaEM0Z0lDQUFDSVFEZVVCSUFFaEFRenlBZ3NnQUNBQklnRWdBaEM0Z0lDQUFDSVFEZVlCSUFFaEFRd05DeUFBSUFFaUFTQUNFTHFBZ0lBQUloQU41d0VnQVNFQkRQQUNDd0pBSUFFaUFTQUNSdzBBUVE4aEVBemxBd3NnQVMwQUFDSVFRVHRHRFFnZ0VFRU5SdzNvQVNBQlFRRnFJUUVNN3dJTElBQWdBU0lCSUFJUXVvQ0FnQUFpRUEzb0FTQUJJUUVNOGdJTEEwQUNRQ0FCTFFBQVFmQzFnSUFBYWkwQUFDSVFRUUZHRFFBZ0VFRUNSdzNyQVNBQUtBSUVJUkFnQUVFQU5nSUVJQUFnRUNBQlFRRnFJZ0VRdVlDQWdBQWlFQTNxQVNBQklRRU05QUlMSUFGQkFXb2lBU0FDUncwQUMwRVNJUkFNNGdNTElBQWdBU0lCSUFJUXVvQ0FnQUFpRUEzcEFTQUJJUUVNQ2dzZ0FTSUJJQUpIRFFaQkd5RVFET0FEQ3dKQUlBRWlBU0FDUncwQVFSWWhFQXpnQXdzZ0FFR0tnSUNBQURZQ0NDQUFJQUUyQWdRZ0FDQUJJQUlRdUlDQWdBQWlFQTNxQVNBQklRRkJJQ0VRRE1ZREN3SkFJQUVpQVNBQ1JnMEFBMEFDUUNBQkxRQUFRZkMzZ0lBQWFpMEFBQ0lRUVFKR0RRQUNRQ0FRUVg5cURnVGxBZXdCQU9zQjdBRUxJQUZCQVdvaEFVRUlJUkFNeUFNTElBRkJBV29pQVNBQ1J3MEFDMEVWSVJBTTN3TUxRUlVoRUF6ZUF3c0RRQUpBSUFFdEFBQkI4TG1BZ0FCcUxRQUFJaEJCQWtZTkFDQVFRWDlxRGdUZUFld0I0QUhyQWV3QkN5QUJRUUZxSWdFZ0FrY05BQXRCR0NFUUROMERDd0pBSUFFaUFTQUNSZzBBSUFCQmk0Q0FnQUEyQWdnZ0FDQUJOZ0lFSUFFaEFVRUhJUkFNeEFNTFFSa2hFQXpjQXdzZ0FVRUJhaUVCREFJTEFrQWdBU0lVSUFKSERRQkJHaUVRRE5zREN5QVVJUUVDUUNBVUxRQUFRWE5xRGhUZEF1NEM3Z0x1QXU0QzdnTHVBdTRDN2dMdUF1NEM3Z0x1QXU0QzdnTHVBdTRDN2dMdUFnRHVBZ3RCQUNFUUlBQkJBRFlDSENBQVFhK0xnSUFBTmdJUUlBQkJBallDRENBQUlCUkJBV28yQWhRTTJnTUxBa0FnQVMwQUFDSVFRVHRHRFFBZ0VFRU5SdzNvQVNBQlFRRnFJUUVNNVFJTElBRkJBV29oQVF0QklpRVFETDhEQ3dKQUlBRWlFQ0FDUncwQVFSd2hFQXpZQXd0Q0FDRVJJQkFoQVNBUUxRQUFRVkJxRGpmbkFlWUJBUUlEQkFVR0J3Z0FBQUFBQUFBQUNRb0xEQTBPQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFQRUJFU0V4UUFDMEVlSVJBTXZRTUxRZ0loRVF6bEFRdENBeUVSRE9RQkMwSUVJUkVNNHdFTFFnVWhFUXppQVF0Q0JpRVJET0VCQzBJSElSRU00QUVMUWdnaEVRemZBUXRDQ1NFUkRONEJDMElLSVJFTTNRRUxRZ3NoRVF6Y0FRdENEQ0VSRE5zQkMwSU5JUkVNMmdFTFFnNGhFUXpaQVF0Q0R5RVJETmdCQzBJS0lSRU0xd0VMUWdzaEVReldBUXRDRENFUkROVUJDMElOSVJFTTFBRUxRZzRoRVF6VEFRdENEeUVSRE5JQkMwSUFJUkVDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUlCQXRBQUJCVUdvT04rVUI1QUVBQVFJREJBVUdCK1lCNWdIbUFlWUI1Z0htQWVZQkNBa0tDd3dONWdIbUFlWUI1Z0htQWVZQjVnSG1BZVlCNWdIbUFlWUI1Z0htQWVZQjVnSG1BZVlCNWdIbUFlWUI1Z0htQWVZQjVnSG1BUTRQRUJFU0UrWUJDMElDSVJFTTVBRUxRZ01oRVF6akFRdENCQ0VSRE9JQkMwSUZJUkVNNFFFTFFnWWhFUXpnQVF0Q0J5RVJETjhCQzBJSUlSRU0zZ0VMUWdraEVRemRBUXRDQ2lFUkROd0JDMElMSVJFTTJ3RUxRZ3doRVF6YUFRdENEU0VSRE5rQkMwSU9JUkVNMkFFTFFnOGhFUXpYQVF0Q0NpRVJETllCQzBJTElSRU0xUUVMUWd3aEVRelVBUXRDRFNFUkROTUJDMElPSVJFTTBnRUxRZzhoRVF6UkFRc2dBRUlBSUFBcEF5QWlFU0FDSUFFaUVHdXRJaEo5SWhNZ0V5QVJWaHMzQXlBZ0VTQVNWaUlVUlEzU0FVRWZJUkFNd0FNTEFrQWdBU0lCSUFKR0RRQWdBRUdKZ0lDQUFEWUNDQ0FBSUFFMkFnUWdBU0VCUVNRaEVBeW5Bd3RCSUNFUURMOERDeUFBSUFFaUVDQUNFTDZBZ0lBQVFYOXFEZ1cyQVFERkFnSFJBZElCQzBFUklSQU1wQU1MSUFCQkFUb0FMeUFRSVFFTXV3TUxJQUVpQVNBQ1J3M1NBVUVrSVJBTXV3TUxJQUVpRFNBQ1J3MGVRY1lBSVJBTXVnTUxJQUFnQVNJQklBSVFzb0NBZ0FBaUVBM1VBU0FCSVFFTXRRRUxJQUVpRUNBQ1J3MG1RZEFBSVJBTXVBTUxBa0FnQVNJQklBSkhEUUJCS0NFUURMZ0RDeUFBUVFBMkFnUWdBRUdNZ0lDQUFEWUNDQ0FBSUFFZ0FSQ3hnSUNBQUNJUURkTUJJQUVoQVF6WUFRc0NRQ0FCSWhBZ0FrY05BRUVwSVJBTXR3TUxJQkF0QUFBaUFVRWdSZzBVSUFGQkNVY04wd0VnRUVFQmFpRUJEQlVMQWtBZ0FTSUJJQUpHRFFBZ0FVRUJhaUVCREJjTFFTb2hFQXkxQXdzQ1FDQUJJaEFnQWtjTkFFRXJJUkFNdFFNTEFrQWdFQzBBQUNJQlFRbEdEUUFnQVVFZ1J3M1ZBUXNnQUMwQUxFRUlSZzNUQVNBUUlRRU1rUU1MQWtBZ0FTSUJJQUpIRFFCQkxDRVFETFFEQ3lBQkxRQUFRUXBIRGRVQklBRkJBV29oQVF6SkFnc2dBU0lPSUFKSERkVUJRUzhoRUF5eUF3c0RRQUpBSUFFdEFBQWlFRUVnUmcwQUFrQWdFRUYyYWc0RUFOd0IzQUVBMmdFTElBRWhBUXpnQVFzZ0FVRUJhaUlCSUFKSERRQUxRVEVoRUF5eEF3dEJNaUVRSUFFaUZDQUNSZzJ3QXlBQ0lCUnJJQUFvQWdBaUFXb2hGU0FVSUFGclFRTnFJUllDUUFOQUlCUXRBQUFpRjBFZ2NpQVhJQmRCdjM5cVFmOEJjVUVhU1J0Qi93RnhJQUZCOEx1QWdBQnFMUUFBUncwQkFrQWdBVUVEUncwQVFRWWhBUXlXQXdzZ0FVRUJhaUVCSUJSQkFXb2lGQ0FDUncwQUN5QUFJQlUyQWdBTXNRTUxJQUJCQURZQ0FDQVVJUUVNMlFFTFFUTWhFQ0FCSWhRZ0FrWU5yd01nQWlBVWF5QUFLQUlBSWdGcUlSVWdGQ0FCYTBFSWFpRVdBa0FEUUNBVUxRQUFJaGRCSUhJZ0Z5QVhRYjkvYWtIL0FYRkJHa2tiUWY4QmNTQUJRZlM3Z0lBQWFpMEFBRWNOQVFKQUlBRkJDRWNOQUVFRklRRU1sUU1MSUFGQkFXb2hBU0FVUVFGcUloUWdBa2NOQUFzZ0FDQVZOZ0lBRExBREN5QUFRUUEyQWdBZ0ZDRUJETmdCQzBFMElSQWdBU0lVSUFKR0RhNERJQUlnRkdzZ0FDZ0NBQ0lCYWlFVklCUWdBV3RCQldvaEZnSkFBMEFnRkMwQUFDSVhRU0J5SUJjZ0YwRy9mMnBCL3dGeFFScEpHMEgvQVhFZ0FVSFF3b0NBQUdvdEFBQkhEUUVDUUNBQlFRVkhEUUJCQnlFQkRKUURDeUFCUVFGcUlRRWdGRUVCYWlJVUlBSkhEUUFMSUFBZ0ZUWUNBQXl2QXdzZ0FFRUFOZ0lBSUJRaEFRelhBUXNDUUNBQklnRWdBa1lOQUFOQUFrQWdBUzBBQUVHQXZvQ0FBR290QUFBaUVFRUJSZzBBSUJCQkFrWU5DaUFCSVFFTTNRRUxJQUZCQVdvaUFTQUNSdzBBQzBFd0lSQU1yZ01MUVRBaEVBeXRBd3NDUUNBQklnRWdBa1lOQUFOQUFrQWdBUzBBQUNJUVFTQkdEUUFnRUVGMmFnNEUyUUhhQWRvQjJRSGFBUXNnQVVFQmFpSUJJQUpIRFFBTFFUZ2hFQXl0QXd0Qk9DRVFES3dEQ3dOQUFrQWdBUzBBQUNJUVFTQkdEUUFnRUVFSlJ3MERDeUFCUVFGcUlnRWdBa2NOQUF0QlBDRVFES3NEQ3dOQUFrQWdBUzBBQUNJUVFTQkdEUUFDUUFKQUlCQkJkbW9PQk5vQkFRSGFBUUFMSUJCQkxFWU4yd0VMSUFFaEFRd0VDeUFCUVFGcUlnRWdBa2NOQUF0QlB5RVFES29EQ3lBQklRRU0yd0VMUWNBQUlSQWdBU0lVSUFKR0RhZ0RJQUlnRkdzZ0FDZ0NBQ0lCYWlFV0lCUWdBV3RCQm1vaEZ3SkFBMEFnRkMwQUFFRWdjaUFCUVlEQWdJQUFhaTBBQUVjTkFTQUJRUVpHRFk0RElBRkJBV29oQVNBVVFRRnFJaFFnQWtjTkFBc2dBQ0FXTmdJQURLa0RDeUFBUVFBMkFnQWdGQ0VCQzBFMklSQU1qZ01MQWtBZ0FTSVBJQUpIRFFCQndRQWhFQXluQXdzZ0FFR01nSUNBQURZQ0NDQUFJQTgyQWdRZ0R5RUJJQUF0QUN4QmYyb09CTTBCMVFIWEFka0Jod01MSUFGQkFXb2hBUXpNQVFzQ1FDQUJJZ0VnQWtZTkFBTkFBa0FnQVMwQUFDSVFRU0J5SUJBZ0VFRy9mMnBCL3dGeFFScEpHMEgvQVhFaUVFRUpSZzBBSUJCQklFWU5BQUpBQWtBQ1FBSkFJQkJCblg5cURoTUFBd01EQXdNREF3RURBd01EQXdNREF3TUNBd3NnQVVFQmFpRUJRVEVoRUF5UkF3c2dBVUVCYWlFQlFUSWhFQXlRQXdzZ0FVRUJhaUVCUVRNaEVBeVBBd3NnQVNFQkROQUJDeUFCUVFGcUlnRWdBa2NOQUF0Qk5TRVFES1VEQzBFMUlSQU1wQU1MQWtBZ0FTSUJJQUpHRFFBRFFBSkFJQUV0QUFCQmdMeUFnQUJxTFFBQVFRRkdEUUFnQVNFQkROTUJDeUFCUVFGcUlnRWdBa2NOQUF0QlBTRVFES1FEQzBFOUlSQU1vd01MSUFBZ0FTSUJJQUlRc0lDQWdBQWlFQTNXQVNBQklRRU1BUXNnRUVFQmFpRUJDMEU4SVJBTWh3TUxBa0FnQVNJQklBSkhEUUJCd2dBaEVBeWdBd3NDUUFOQUFrQWdBUzBBQUVGM2FnNFlBQUwrQXY0Q2hBUCtBdjRDL2dMK0F2NEMvZ0wrQXY0Qy9nTCtBdjRDL2dMK0F2NEMvZ0wrQXY0Qy9nSUEvZ0lMSUFGQkFXb2lBU0FDUncwQUMwSENBQ0VRREtBREN5QUJRUUZxSVFFZ0FDMEFMVUVCY1VVTnZRRWdBU0VCQzBFc0lSQU1oUU1MSUFFaUFTQUNSdzNUQVVIRUFDRVFESjBEQ3dOQUFrQWdBUzBBQUVHUXdJQ0FBR290QUFCQkFVWU5BQ0FCSVFFTXR3SUxJQUZCQVdvaUFTQUNSdzBBQzBIRkFDRVFESndEQ3lBTkxRQUFJaEJCSUVZTnN3RWdFRUU2UncyQkF5QUFLQUlFSVFFZ0FFRUFOZ0lFSUFBZ0FTQU5FSytBZ0lBQUlnRU4wQUVnRFVFQmFpRUJETE1DQzBISEFDRVFJQUVpRFNBQ1JnMmFBeUFDSUExcklBQW9BZ0FpQVdvaEZpQU5JQUZyUVFWcUlSY0RRQ0FOTFFBQUloUkJJSElnRkNBVVFiOS9ha0gvQVhGQkdra2JRZjhCY1NBQlFaRENnSUFBYWkwQUFFY05nQU1nQVVFRlJnMzBBaUFCUVFGcUlRRWdEVUVCYWlJTklBSkhEUUFMSUFBZ0ZqWUNBQXlhQXd0QnlBQWhFQ0FCSWcwZ0FrWU5tUU1nQWlBTmF5QUFLQUlBSWdGcUlSWWdEU0FCYTBFSmFpRVhBMEFnRFMwQUFDSVVRU0J5SUJRZ0ZFRy9mMnBCL3dGeFFScEpHMEgvQVhFZ0FVR1d3b0NBQUdvdEFBQkhEZjhDQWtBZ0FVRUpSdzBBUVFJaEFRejFBZ3NnQVVFQmFpRUJJQTFCQVdvaURTQUNSdzBBQ3lBQUlCWTJBZ0FNbVFNTEFrQWdBU0lOSUFKSERRQkJ5UUFoRUF5WkF3c0NRQUpBSUEwdEFBQWlBVUVnY2lBQklBRkJ2MzlxUWY4QmNVRWFTUnRCL3dGeFFaSi9hZzRIQUlBRGdBT0FBNEFEZ0FNQmdBTUxJQTFCQVdvaEFVRStJUkFNZ0FNTElBMUJBV29oQVVFL0lSQU0vd0lMUWNvQUlSQWdBU0lOSUFKR0RaY0RJQUlnRFdzZ0FDZ0NBQ0lCYWlFV0lBMGdBV3RCQVdvaEZ3TkFJQTB0QUFBaUZFRWdjaUFVSUJSQnYzOXFRZjhCY1VFYVNSdEIvd0Z4SUFGQm9NS0FnQUJxTFFBQVJ3MzlBaUFCUVFGR0RmQUNJQUZCQVdvaEFTQU5RUUZxSWcwZ0FrY05BQXNnQUNBV05nSUFESmNEQzBITEFDRVFJQUVpRFNBQ1JnMldBeUFDSUExcklBQW9BZ0FpQVdvaEZpQU5JQUZyUVE1cUlSY0RRQ0FOTFFBQUloUkJJSElnRkNBVVFiOS9ha0gvQVhGQkdra2JRZjhCY1NBQlFhTENnSUFBYWkwQUFFY04vQUlnQVVFT1JnM3dBaUFCUVFGcUlRRWdEVUVCYWlJTklBSkhEUUFMSUFBZ0ZqWUNBQXlXQXd0QnpBQWhFQ0FCSWcwZ0FrWU5sUU1nQWlBTmF5QUFLQUlBSWdGcUlSWWdEU0FCYTBFUGFpRVhBMEFnRFMwQUFDSVVRU0J5SUJRZ0ZFRy9mMnBCL3dGeFFScEpHMEgvQVhFZ0FVSEF3b0NBQUdvdEFBQkhEZnNDQWtBZ0FVRVBSdzBBUVFNaEFRenhBZ3NnQVVFQmFpRUJJQTFCQVdvaURTQUNSdzBBQ3lBQUlCWTJBZ0FNbFFNTFFjMEFJUkFnQVNJTklBSkdEWlFESUFJZ0RXc2dBQ2dDQUNJQmFpRVdJQTBnQVd0QkJXb2hGd05BSUEwdEFBQWlGRUVnY2lBVUlCUkJ2MzlxUWY4QmNVRWFTUnRCL3dGeElBRkIwTUtBZ0FCcUxRQUFSdzM2QWdKQUlBRkJCVWNOQUVFRUlRRU04QUlMSUFGQkFXb2hBU0FOUVFGcUlnMGdBa2NOQUFzZ0FDQVdOZ0lBREpRREN3SkFJQUVpRFNBQ1J3MEFRYzRBSVJBTWxBTUxBa0FDUUFKQUFrQWdEUzBBQUNJQlFTQnlJQUVnQVVHL2YycEIvd0Z4UVJwSkcwSC9BWEZCblg5cURoTUEvUUw5QXYwQy9RTDlBdjBDL1FMOUF2MEMvUUw5QXYwQ0FmMEMvUUw5QWdJRC9RSUxJQTFCQVdvaEFVSEJBQ0VRRFAwQ0N5QU5RUUZxSVFGQndnQWhFQXo4QWdzZ0RVRUJhaUVCUWNNQUlSQU0rd0lMSUExQkFXb2hBVUhFQUNFUURQb0NDd0pBSUFFaUFTQUNSZzBBSUFCQmpZQ0FnQUEyQWdnZ0FDQUJOZ0lFSUFFaEFVSEZBQ0VRRFBvQ0MwSFBBQ0VRREpJREN5QVFJUUVDUUFKQUlCQXRBQUJCZG1vT0JBR29BcWdDQUtnQ0N5QVFRUUZxSVFFTFFTY2hFQXo0QWdzQ1FDQUJJZ0VnQWtjTkFFSFJBQ0VRREpFREN3SkFJQUV0QUFCQklFWU5BQ0FCSVFFTWpRRUxJQUZCQVdvaEFTQUFMUUF0UVFGeFJRM0hBU0FCSVFFTWpBRUxJQUVpRnlBQ1J3M0lBVUhTQUNFUURJOERDMEhUQUNFUUlBRWlGQ0FDUmcyT0F5QUNJQlJySUFBb0FnQWlBV29oRmlBVUlBRnJRUUZxSVJjRFFDQVVMUUFBSUFGQjFzS0FnQUJxTFFBQVJ3M01BU0FCUVFGR0RjY0JJQUZCQVdvaEFTQVVRUUZxSWhRZ0FrY05BQXNnQUNBV05nSUFESTREQ3dKQUlBRWlBU0FDUncwQVFkVUFJUkFNamdNTElBRXRBQUJCQ2tjTnpBRWdBVUVCYWlFQkRNY0JDd0pBSUFFaUFTQUNSdzBBUWRZQUlSQU1qUU1MQWtBQ1FDQUJMUUFBUVhacURnUUF6UUhOQVFITkFRc2dBVUVCYWlFQkRNY0JDeUFCUVFGcUlRRkJ5Z0FoRUF6ekFnc2dBQ0FCSWdFZ0FoQ3VnSUNBQUNJUURjc0JJQUVoQVVITkFDRVFEUElDQ3lBQUxRQXBRU0pHRFlVRERLWUNDd0pBSUFFaUFTQUNSdzBBUWRzQUlSQU1pZ01MUVFBaEZFRUJJUmRCQVNFV1FRQWhFQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQ0FCTFFBQVFWQnFEZ3JVQWRNQkFBRUNBd1FGQmdqVkFRdEJBaUVRREFZTFFRTWhFQXdGQzBFRUlSQU1CQXRCQlNFUURBTUxRUVloRUF3Q0MwRUhJUkFNQVF0QkNDRVFDMEVBSVJkQkFDRVdRUUFoRkF6TUFRdEJDU0VRUVFFaEZFRUFJUmRCQUNFV0RNc0JDd0pBSUFFaUFTQUNSdzBBUWQwQUlSQU1pUU1MSUFFdEFBQkJMa2NOekFFZ0FVRUJhaUVCREtZQ0N5QUJJZ0VnQWtjTnpBRkIzd0FoRUF5SEF3c0NRQ0FCSWdFZ0FrWU5BQ0FBUVk2QWdJQUFOZ0lJSUFBZ0FUWUNCQ0FCSVFGQjBBQWhFQXp1QWd0QjRBQWhFQXlHQXd0QjRRQWhFQ0FCSWdFZ0FrWU5oUU1nQWlBQmF5QUFLQUlBSWhScUlSWWdBU0FVYTBFRGFpRVhBMEFnQVMwQUFDQVVRZUxDZ0lBQWFpMEFBRWNOelFFZ0ZFRURSZzNNQVNBVVFRRnFJUlFnQVVFQmFpSUJJQUpIRFFBTElBQWdGallDQUF5RkF3dEI0Z0FoRUNBQklnRWdBa1lOaEFNZ0FpQUJheUFBS0FJQUloUnFJUllnQVNBVWEwRUNhaUVYQTBBZ0FTMEFBQ0FVUWViQ2dJQUFhaTBBQUVjTnpBRWdGRUVDUmczT0FTQVVRUUZxSVJRZ0FVRUJhaUlCSUFKSERRQUxJQUFnRmpZQ0FBeUVBd3RCNHdBaEVDQUJJZ0VnQWtZTmd3TWdBaUFCYXlBQUtBSUFJaFJxSVJZZ0FTQVVhMEVEYWlFWEEwQWdBUzBBQUNBVVFlbkNnSUFBYWkwQUFFY055d0VnRkVFRFJnM09BU0FVUVFGcUlSUWdBVUVCYWlJQklBSkhEUUFMSUFBZ0ZqWUNBQXlEQXdzQ1FDQUJJZ0VnQWtjTkFFSGxBQ0VRRElNREN5QUFJQUZCQVdvaUFTQUNFS2lBZ0lBQUloQU56UUVnQVNFQlFkWUFJUkFNNlFJTEFrQWdBU0lCSUFKR0RRQURRQUpBSUFFdEFBQWlFRUVnUmcwQUFrQUNRQUpBSUJCQnVIOXFEZ3NBQWM4Qnp3SFBBYzhCendIUEFjOEJ6d0VDendFTElBRkJBV29oQVVIU0FDRVFETzBDQ3lBQlFRRnFJUUZCMHdBaEVBenNBZ3NnQVVFQmFpRUJRZFFBSVJBTTZ3SUxJQUZCQVdvaUFTQUNSdzBBQzBIa0FDRVFESUlEQzBIa0FDRVFESUVEQ3dOQUFrQWdBUzBBQUVId3dvQ0FBR290QUFBaUVFRUJSZzBBSUJCQmZtb09BODhCMEFIUkFkSUJDeUFCUVFGcUlnRWdBa2NOQUF0QjVnQWhFQXlBQXdzQ1FDQUJJZ0VnQWtZTkFDQUJRUUZxSVFFTUF3dEI1d0FoRUF6L0Fnc0RRQUpBSUFFdEFBQkI4TVNBZ0FCcUxRQUFJaEJCQVVZTkFBSkFJQkJCZm1vT0JOSUIwd0hVQVFEVkFRc2dBU0VCUWRjQUlSQU01d0lMSUFGQkFXb2lBU0FDUncwQUMwSG9BQ0VRRFA0Q0N3SkFJQUVpQVNBQ1J3MEFRZWtBSVJBTS9nSUxBa0FnQVMwQUFDSVFRWFpxRGhxNkFkVUIxUUc4QWRVQjFRSFZBZFVCMVFIVkFkVUIxUUhWQWRVQjFRSFZBZFVCMVFIVkFkVUIxUUhWQWNvQjFRSFZBUURUQVFzZ0FVRUJhaUVCQzBFR0lSQU00d0lMQTBBQ1FDQUJMUUFBUWZER2dJQUFhaTBBQUVFQlJnMEFJQUVoQVF5ZUFnc2dBVUVCYWlJQklBSkhEUUFMUWVvQUlSQU0rd0lMQWtBZ0FTSUJJQUpHRFFBZ0FVRUJhaUVCREFNTFFlc0FJUkFNK2dJTEFrQWdBU0lCSUFKSERRQkI3QUFoRUF6NkFnc2dBVUVCYWlFQkRBRUxBa0FnQVNJQklBSkhEUUJCN1FBaEVBejVBZ3NnQVVFQmFpRUJDMEVFSVJBTTNnSUxBa0FnQVNJVUlBSkhEUUJCN2dBaEVBejNBZ3NnRkNFQkFrQUNRQUpBSUJRdEFBQkI4TWlBZ0FCcUxRQUFRWDlxRGdmVUFkVUIxZ0VBbkFJQkF0Y0JDeUFVUVFGcUlRRU1DZ3NnRkVFQmFpRUJETTBCQzBFQUlSQWdBRUVBTmdJY0lBQkJtNUtBZ0FBMkFoQWdBRUVITmdJTUlBQWdGRUVCYWpZQ0ZBejJBZ3NDUUFOQUFrQWdBUzBBQUVId3lJQ0FBR290QUFBaUVFRUVSZzBBQWtBQ1FDQVFRWDlxRGdmU0FkTUIxQUhaQVFBRUFka0JDeUFCSVFGQjJnQWhFQXpnQWdzZ0FVRUJhaUVCUWR3QUlSQU0zd0lMSUFGQkFXb2lBU0FDUncwQUMwSHZBQ0VRRFBZQ0N5QUJRUUZxSVFFTXl3RUxBa0FnQVNJVUlBSkhEUUJCOEFBaEVBejFBZ3NnRkMwQUFFRXZSdzNVQVNBVVFRRnFJUUVNQmdzQ1FDQUJJaFFnQWtjTkFFSHhBQ0VRRFBRQ0N3SkFJQlF0QUFBaUFVRXZSdzBBSUJSQkFXb2hBVUhkQUNFUUROc0NDeUFCUVhacUlnUkJGa3NOMHdGQkFTQUVkRUdKZ0lBQ2NVVU4wd0VNeWdJTEFrQWdBU0lCSUFKR0RRQWdBVUVCYWlFQlFkNEFJUkFNMmdJTFFmSUFJUkFNOGdJTEFrQWdBU0lVSUFKSERRQkI5QUFoRUF6eUFnc2dGQ0VCQWtBZ0ZDMEFBRUh3eklDQUFHb3RBQUJCZjJvT0E4a0NsQUlBMUFFTFFlRUFJUkFNMkFJTEFrQWdBU0lVSUFKR0RRQURRQUpBSUJRdEFBQkI4TXFBZ0FCcUxRQUFJZ0ZCQTBZTkFBSkFJQUZCZjJvT0Fzc0NBTlVCQ3lBVUlRRkIzd0FoRUF6YUFnc2dGRUVCYWlJVUlBSkhEUUFMUWZNQUlSQU04UUlMUWZNQUlSQU04QUlMQWtBZ0FTSUJJQUpHRFFBZ0FFR1BnSUNBQURZQ0NDQUFJQUUyQWdRZ0FTRUJRZUFBSVJBTTF3SUxRZlVBSVJBTTd3SUxBa0FnQVNJQklBSkhEUUJCOWdBaEVBenZBZ3NnQUVHUGdJQ0FBRFlDQ0NBQUlBRTJBZ1FnQVNFQkMwRURJUkFNMUFJTEEwQWdBUzBBQUVFZ1J3M0RBaUFCUVFGcUlnRWdBa2NOQUF0Qjl3QWhFQXpzQWdzQ1FDQUJJZ0VnQWtjTkFFSDRBQ0VRRE93Q0N5QUJMUUFBUVNCSERjNEJJQUZCQVdvaEFRenZBUXNnQUNBQklnRWdBaENzZ0lDQUFDSVFEYzRCSUFFaEFReU9BZ3NDUUNBQklnUWdBa2NOQUVINkFDRVFET29DQ3lBRUxRQUFRY3dBUnczUkFTQUVRUUZxSVFGQkV5RVFETThCQ3dKQUlBRWlCQ0FDUncwQVFmc0FJUkFNNlFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJCV29oRUFOQUlBUXRBQUFnQVVId3pvQ0FBR290QUFCSERkQUJJQUZCQlVZTnpnRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkIrd0FoRUF6b0Fnc0NRQ0FCSWdRZ0FrY05BRUg4QUNFUURPZ0NDd0pBQWtBZ0JDMEFBRUc5ZjJvT0RBRFJBZEVCMFFIUkFkRUIwUUhSQWRFQjBRSFJBUUhSQVFzZ0JFRUJhaUVCUWVZQUlSQU16d0lMSUFSQkFXb2hBVUhuQUNFUURNNENDd0pBSUFFaUJDQUNSdzBBUWYwQUlSQU01d0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFtb2hFQUpBQTBBZ0JDMEFBQ0FCUWUzUGdJQUFhaTBBQUVjTnp3RWdBVUVDUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFmMEFJUkFNNXdJTElBQkJBRFlDQUNBUVFRRnFJUUZCRUNFUURNd0JDd0pBSUFFaUJDQUNSdzBBUWY0QUlSQU01Z0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkJXb2hFQUpBQTBBZ0JDMEFBQ0FCUWZiT2dJQUFhaTBBQUVjTnpnRWdBVUVGUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFmNEFJUkFNNWdJTElBQkJBRFlDQUNBUVFRRnFJUUZCRmlFUURNc0JDd0pBSUFFaUJDQUNSdzBBUWY4QUlSQU01UUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkEyb2hFQUpBQTBBZ0JDMEFBQ0FCUWZ6T2dJQUFhaTBBQUVjTnpRRWdBVUVEUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFmOEFJUkFNNVFJTElBQkJBRFlDQUNBUVFRRnFJUUZCQlNFUURNb0JDd0pBSUFFaUJDQUNSdzBBUVlBQklSQU01QUlMSUFRdEFBQkIyUUJIRGNzQklBUkJBV29oQVVFSUlSQU15UUVMQWtBZ0FTSUVJQUpIRFFCQmdRRWhFQXpqQWdzQ1FBSkFJQVF0QUFCQnNuOXFEZ01BekFFQnpBRUxJQVJCQVdvaEFVSHJBQ0VRRE1vQ0N5QUVRUUZxSVFGQjdBQWhFQXpKQWdzQ1FDQUJJZ1FnQWtjTkFFR0NBU0VRRE9JQ0N3SkFBa0FnQkMwQUFFRzRmMm9PQ0FETEFjc0J5d0hMQWNzQnl3RUJ5d0VMSUFSQkFXb2hBVUhxQUNFUURNa0NDeUFFUVFGcUlRRkI3UUFoRUF6SUFnc0NRQ0FCSWdRZ0FrY05BRUdEQVNFUURPRUNDeUFDSUFScklBQW9BZ0FpQVdvaEVDQUVJQUZyUVFKcUlSUUNRQU5BSUFRdEFBQWdBVUdBejRDQUFHb3RBQUJIRGNrQklBRkJBa1lOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdFRFlDQUVHREFTRVFET0VDQzBFQUlSQWdBRUVBTmdJQUlCUkJBV29oQVF6R0FRc0NRQ0FCSWdRZ0FrY05BRUdFQVNFUURPQUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFScUlSQUNRQU5BSUFRdEFBQWdBVUdEejRDQUFHb3RBQUJIRGNnQklBRkJCRVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHRUFTRVFET0FDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRU01oRUF6RkFRc0NRQ0FCSWdRZ0FrY05BRUdGQVNFUUROOENDd0pBQWtBZ0JDMEFBRUcwZjJvT0NBRElBY2dCeUFISUFjZ0J5QUVCeUFFTElBUkJBV29oQVVIdkFDRVFETVlDQ3lBRVFRRnFJUUZCOEFBaEVBekZBZ3NDUUNBQklnUWdBa2NOQUVHR0FTRVFETjRDQ3lBRUxRQUFRY1VBUnczRkFTQUVRUUZxSVFFTWd3SUxBa0FnQVNJRUlBSkhEUUJCaHdFaEVBemRBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFRGFpRVFBa0FEUUNBRUxRQUFJQUZCaU0rQWdBQnFMUUFBUnczRkFTQUJRUU5HRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQmh3RWhFQXpkQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUV0SVJBTXdnRUxBa0FnQVNJRUlBSkhEUUJCaUFFaEVBemNBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFSWFpRVFBa0FEUUNBRUxRQUFJQUZCME0rQWdBQnFMUUFBUnczRUFTQUJRUWhHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQmlBRWhFQXpjQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVwSVJBTXdRRUxBa0FnQVNJQklBSkhEUUJCaVFFaEVBemJBZ3RCQVNFUUlBRXRBQUJCM3dCSERjQUJJQUZCQVdvaEFReUJBZ3NDUUNBQklnUWdBa2NOQUVHS0FTRVFETm9DQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRRnFJUkFEUUNBRUxRQUFJQUZCak0rQWdBQnFMUUFBUnczQkFTQUJRUUZHRGE4Q0lBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFZb0JJUkFNMlFJTEFrQWdBU0lFSUFKSERRQkJpd0VoRUF6WkFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVDYWlFUUFrQURRQ0FFTFFBQUlBRkJqcytBZ0FCcUxRQUFSdzNCQVNBQlFRSkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCaXdFaEVBelpBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRUNJUkFNdmdFTEFrQWdBU0lFSUFKSERRQkJqQUVoRUF6WUFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVCYWlFUUFrQURRQ0FFTFFBQUlBRkI4TStBZ0FCcUxRQUFSdzNBQVNBQlFRRkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCakFFaEVBellBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRWZJUkFNdlFFTEFrQWdBU0lFSUFKSERRQkJqUUVoRUF6WEFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVCYWlFUUFrQURRQ0FFTFFBQUlBRkI4cytBZ0FCcUxRQUFSdzIvQVNBQlFRRkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCalFFaEVBelhBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRUpJUkFNdkFFTEFrQWdBU0lFSUFKSERRQkJqZ0VoRUF6V0Fnc0NRQUpBSUFRdEFBQkJ0MzlxRGdjQXZ3Ry9BYjhCdndHL0FRRy9BUXNnQkVFQmFpRUJRZmdBSVJBTXZRSUxJQVJCQVdvaEFVSDVBQ0VRREx3Q0N3SkFJQUVpQkNBQ1J3MEFRWThCSVJBTTFRSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQldvaEVBSkFBMEFnQkMwQUFDQUJRWkhQZ0lBQWFpMEFBRWNOdlFFZ0FVRUZSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVk4QklSQU0xUUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJHQ0VRRExvQkN3SkFJQUVpQkNBQ1J3MEFRWkFCSVJBTTFBSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQW1vaEVBSkFBMEFnQkMwQUFDQUJRWmZQZ0lBQWFpMEFBRWNOdkFFZ0FVRUNSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVpBQklSQU0xQUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJGeUVRRExrQkN3SkFJQUVpQkNBQ1J3MEFRWkVCSVJBTTB3SUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQm1vaEVBSkFBMEFnQkMwQUFDQUJRWnJQZ0lBQWFpMEFBRWNOdXdFZ0FVRUdSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVpFQklSQU0wd0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJGU0VRRExnQkN3SkFJQUVpQkNBQ1J3MEFRWklCSVJBTTBnSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQldvaEVBSkFBMEFnQkMwQUFDQUJRYUhQZ0lBQWFpMEFBRWNOdWdFZ0FVRUZSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVpJQklSQU0wZ0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJIaUVRRExjQkN3SkFJQUVpQkNBQ1J3MEFRWk1CSVJBTTBRSUxJQVF0QUFCQnpBQkhEYmdCSUFSQkFXb2hBVUVLSVJBTXRnRUxBa0FnQkNBQ1J3MEFRWlFCSVJBTTBBSUxBa0FDUUNBRUxRQUFRYjkvYWc0UEFMa0J1UUc1QWJrQnVRRzVBYmtCdVFHNUFia0J1UUc1QWJrQkFia0JDeUFFUVFGcUlRRkIvZ0FoRUF5M0Fnc2dCRUVCYWlFQlFmOEFJUkFNdGdJTEFrQWdCQ0FDUncwQVFaVUJJUkFNendJTEFrQUNRQ0FFTFFBQVFiOS9hZzREQUxnQkFiZ0JDeUFFUVFGcUlRRkIvUUFoRUF5MkFnc2dCRUVCYWlFRVFZQUJJUkFNdFFJTEFrQWdCQ0FDUncwQVFaWUJJUkFNemdJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBV29oRUFKQUEwQWdCQzBBQUNBQlFhZlBnSUFBYWkwQUFFY050Z0VnQVVFQlJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWllCSVJBTXpnSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkN5RVFETE1CQ3dKQUlBUWdBa2NOQUVHWEFTRVFETTBDQ3dKQUFrQUNRQUpBSUFRdEFBQkJVMm9PSXdDNEFiZ0J1QUc0QWJnQnVBRzRBYmdCdUFHNEFiZ0J1QUc0QWJnQnVBRzRBYmdCdUFHNEFiZ0J1QUc0QWJnQkFiZ0J1QUc0QWJnQnVBRUN1QUc0QWJnQkE3Z0JDeUFFUVFGcUlRRkIrd0FoRUF5MkFnc2dCRUVCYWlFQlFmd0FJUkFNdFFJTElBUkJBV29oQkVHQkFTRVFETFFDQ3lBRVFRRnFJUVJCZ2dFaEVBeXpBZ3NDUUNBRUlBSkhEUUJCbUFFaEVBek1BZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFRWFpRVFBa0FEUUNBRUxRQUFJQUZCcWMrQWdBQnFMUUFBUncyMEFTQUJRUVJHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQm1BRWhFQXpNQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVaSVJBTXNRRUxBa0FnQkNBQ1J3MEFRWmtCSVJBTXl3SUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQldvaEVBSkFBMEFnQkMwQUFDQUJRYTdQZ0lBQWFpMEFBRWNOc3dFZ0FVRUZSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVprQklSQU15d0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJCaUVRRExBQkN3SkFJQVFnQWtjTkFFR2FBU0VRRE1vQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUZxSVJBQ1FBTkFJQVF0QUFBZ0FVRzB6NENBQUdvdEFBQkhEYklCSUFGQkFVWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdhQVNFUURNb0NDeUFBUVFBMkFnQWdFRUVCYWlFQlFSd2hFQXl2QVFzQ1FDQUVJQUpIRFFCQm13RWhFQXpKQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUJhaUVRQWtBRFFDQUVMUUFBSUFGQnRzK0FnQUJxTFFBQVJ3MnhBU0FCUVFGR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJtd0VoRUF6SkFnc2dBRUVBTmdJQUlCQkJBV29oQVVFbklSQU1yZ0VMQWtBZ0JDQUNSdzBBUVp3QklSQU15QUlMQWtBQ1FDQUVMUUFBUWF4L2FnNENBQUd4QVFzZ0JFRUJhaUVFUVlZQklSQU1yd0lMSUFSQkFXb2hCRUdIQVNFUURLNENDd0pBSUFRZ0FrY05BRUdkQVNFUURNY0NDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFGcUlSQUNRQU5BSUFRdEFBQWdBVUc0ejRDQUFHb3RBQUJIRGE4QklBRkJBVVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHZEFTRVFETWNDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRU1loRUF5c0FRc0NRQ0FFSUFKSERRQkJuZ0VoRUF6R0Fnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVCYWlFUUFrQURRQ0FFTFFBQUlBRkJ1cytBZ0FCcUxRQUFSdzJ1QVNBQlFRRkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCbmdFaEVBekdBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRURJUkFNcXdFTEFrQWdCQ0FDUncwQVFaOEJJUkFNeFFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBbW9oRUFKQUEwQWdCQzBBQUNBQlFlM1BnSUFBYWkwQUFFY05yUUVnQVVFQ1JnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWjhCSVJBTXhRSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkRDRVFES29CQ3dKQUlBUWdBa2NOQUVHZ0FTRVFETVFDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRTnFJUkFDUUFOQUlBUXRBQUFnQVVHOHo0Q0FBR290QUFCSERhd0JJQUZCQTBZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR2dBU0VRRE1RQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVEwaEVBeXBBUXNDUUNBRUlBSkhEUUJCb1FFaEVBekRBZ3NDUUFKQUlBUXRBQUJCdW45cURnc0FyQUdzQWF3QnJBR3NBYXdCckFHc0Fhd0JBYXdCQ3lBRVFRRnFJUVJCaXdFaEVBeXFBZ3NnQkVFQmFpRUVRWXdCSVJBTXFRSUxBa0FnQkNBQ1J3MEFRYUlCSVJBTXdnSUxJQVF0QUFCQjBBQkhEYWtCSUFSQkFXb2hCQXpwQVFzQ1FDQUVJQUpIRFFCQm93RWhFQXpCQWdzQ1FBSkFJQVF0QUFCQnQzOXFEZ2NCcWdHcUFhb0JxZ0dxQVFDcUFRc2dCRUVCYWlFRVFZNEJJUkFNcUFJTElBUkJBV29oQVVFaUlSQU1wZ0VMQWtBZ0JDQUNSdzBBUWFRQklSQU13QUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFXb2hFQUpBQTBBZ0JDMEFBQ0FCUWNEUGdJQUFhaTBBQUVjTnFBRWdBVUVCUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFhUUJJUkFNd0FJTElBQkJBRFlDQUNBUVFRRnFJUUZCSFNFUURLVUJDd0pBSUFRZ0FrY05BRUdsQVNFUURMOENDd0pBQWtBZ0JDMEFBRUd1ZjJvT0F3Q29BUUdvQVFzZ0JFRUJhaUVFUVpBQklSQU1wZ0lMSUFSQkFXb2hBVUVFSVJBTXBBRUxBa0FnQkNBQ1J3MEFRYVlCSVJBTXZnSUxBa0FDUUFKQUFrQUNRQ0FFTFFBQVFiOS9hZzRWQUtvQnFnR3FBYW9CcWdHcUFhb0JxZ0dxQWFvQkFhb0JxZ0VDcWdHcUFRT3FBYW9CQktvQkN5QUVRUUZxSVFSQmlBRWhFQXlvQWdzZ0JFRUJhaUVFUVlrQklSQU1wd0lMSUFSQkFXb2hCRUdLQVNFUURLWUNDeUFFUVFGcUlRUkJqd0VoRUF5bEFnc2dCRUVCYWlFRVFaRUJJUkFNcEFJTEFrQWdCQ0FDUncwQVFhY0JJUkFNdlFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBbW9oRUFKQUEwQWdCQzBBQUNBQlFlM1BnSUFBYWkwQUFFY05wUUVnQVVFQ1JnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRYWNCSVJBTXZRSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkVTRVFES0lCQ3dKQUlBUWdBa2NOQUVHb0FTRVFETHdDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRSnFJUkFDUUFOQUlBUXRBQUFnQVVIQ3o0Q0FBR290QUFCSERhUUJJQUZCQWtZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR29BU0VRREx3Q0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVN3aEVBeWhBUXNDUUNBRUlBSkhEUUJCcVFFaEVBeTdBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFRWFpRVFBa0FEUUNBRUxRQUFJQUZCeGMrQWdBQnFMUUFBUncyakFTQUJRUVJHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQnFRRWhFQXk3QWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVySVJBTW9BRUxBa0FnQkNBQ1J3MEFRYW9CSVJBTXVnSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQW1vaEVBSkFBMEFnQkMwQUFDQUJRY3JQZ0lBQWFpMEFBRWNOb2dFZ0FVRUNSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWFvQklSQU11Z0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJGQ0VRREo4QkN3SkFJQVFnQWtjTkFFR3JBU0VRRExrQ0N3SkFBa0FDUUFKQUlBUXRBQUJCdm45cURnOEFBUUtrQWFRQnBBR2tBYVFCcEFHa0FhUUJwQUdrQWFRQkE2UUJDeUFFUVFGcUlRUkJrd0VoRUF5aUFnc2dCRUVCYWlFRVFaUUJJUkFNb1FJTElBUkJBV29oQkVHVkFTRVFES0FDQ3lBRVFRRnFJUVJCbGdFaEVBeWZBZ3NDUUNBRUlBSkhEUUJCckFFaEVBeTRBZ3NnQkMwQUFFSEZBRWNObndFZ0JFRUJhaUVFRE9BQkN3SkFJQVFnQWtjTkFFR3RBU0VRRExjQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUpxSVJBQ1FBTkFJQVF0QUFBZ0FVSE56NENBQUdvdEFBQkhEWjhCSUFGQkFrWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUd0QVNFUURMY0NDeUFBUVFBMkFnQWdFRUVCYWlFQlFRNGhFQXljQVFzQ1FDQUVJQUpIRFFCQnJnRWhFQXkyQWdzZ0JDMEFBRUhRQUVjTm5RRWdCRUVCYWlFQlFTVWhFQXliQVFzQ1FDQUVJQUpIRFFCQnJ3RWhFQXkxQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUlhaUVRQWtBRFFDQUVMUUFBSUFGQjBNK0FnQUJxTFFBQVJ3MmRBU0FCUVFoR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJyd0VoRUF5MUFnc2dBRUVBTmdJQUlCQkJBV29oQVVFcUlSQU1tZ0VMQWtBZ0JDQUNSdzBBUWJBQklSQU10QUlMQWtBQ1FDQUVMUUFBUWF0L2FnNExBSjBCblFHZEFaMEJuUUdkQVowQm5RR2RBUUdkQVFzZ0JFRUJhaUVFUVpvQklSQU1td0lMSUFSQkFXb2hCRUdiQVNFUURKb0NDd0pBSUFRZ0FrY05BRUd4QVNFUURMTUNDd0pBQWtBZ0JDMEFBRUcvZjJvT0ZBQ2NBWndCbkFHY0Fad0JuQUdjQVp3Qm5BR2NBWndCbkFHY0Fad0JuQUdjQVp3Qm5BRUJuQUVMSUFSQkFXb2hCRUdaQVNFUURKb0NDeUFFUVFGcUlRUkJuQUVoRUF5WkFnc0NRQ0FFSUFKSERRQkJzZ0VoRUF5eUFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVEYWlFUUFrQURRQ0FFTFFBQUlBRkIyYytBZ0FCcUxRQUFSdzJhQVNBQlFRTkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCc2dFaEVBeXlBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRWhJUkFNbHdFTEFrQWdCQ0FDUncwQVFiTUJJUkFNc1FJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJCbW9oRUFKQUEwQWdCQzBBQUNBQlFkM1BnSUFBYWkwQUFFY05tUUVnQVVFR1JnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRYk1CSVJBTXNRSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkdpRVFESllCQ3dKQUlBUWdBa2NOQUVHMEFTRVFETEFDQ3dKQUFrQUNRQ0FFTFFBQVFidC9hZzRSQUpvQm1nR2FBWm9CbWdHYUFab0JtZ0dhQVFHYUFab0JtZ0dhQVpvQkFwb0JDeUFFUVFGcUlRUkJuUUVoRUF5WUFnc2dCRUVCYWlFRVFaNEJJUkFNbHdJTElBUkJBV29oQkVHZkFTRVFESllDQ3dKQUlBUWdBa2NOQUVHMUFTRVFESzhDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRVnFJUkFDUUFOQUlBUXRBQUFnQVVIa3o0Q0FBR290QUFCSERaY0JJQUZCQlVZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFRzFBU0VRREs4Q0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVNnaEVBeVVBUXNDUUNBRUlBSkhEUUJCdGdFaEVBeXVBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFQ2FpRVFBa0FEUUNBRUxRQUFJQUZCNnMrQWdBQnFMUUFBUncyV0FTQUJRUUpHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQnRnRWhFQXl1QWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVISVJBTWt3RUxBa0FnQkNBQ1J3MEFRYmNCSVJBTXJRSUxBa0FDUUNBRUxRQUFRYnQvYWc0T0FKWUJsZ0dXQVpZQmxnR1dBWllCbGdHV0FaWUJsZ0dXQVFHV0FRc2dCRUVCYWlFRVFhRUJJUkFNbEFJTElBUkJBV29oQkVHaUFTRVFESk1DQ3dKQUlBUWdBa2NOQUVHNEFTRVFES3dDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRSnFJUkFDUUFOQUlBUXRBQUFnQVVIdHo0Q0FBR290QUFCSERaUUJJQUZCQWtZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFRzRBU0VRREt3Q0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVJJaEVBeVJBUXNDUUNBRUlBSkhEUUJCdVFFaEVBeXJBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFQmFpRVFBa0FEUUNBRUxRQUFJQUZCOE0rQWdBQnFMUUFBUncyVEFTQUJRUUZHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQnVRRWhFQXlyQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVnSVJBTWtBRUxBa0FnQkNBQ1J3MEFRYm9CSVJBTXFnSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQVdvaEVBSkFBMEFnQkMwQUFDQUJRZkxQZ0lBQWFpMEFBRWNOa2dFZ0FVRUJSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWJvQklSQU1xZ0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJEeUVRREk4QkN3SkFJQVFnQWtjTkFFRzdBU0VRREtrQ0N3SkFBa0FnQkMwQUFFRzNmMm9PQndDU0FaSUJrZ0dTQVpJQkFaSUJDeUFFUVFGcUlRUkJwUUVoRUF5UUFnc2dCRUVCYWlFRVFhWUJJUkFNandJTEFrQWdCQ0FDUncwQVFid0JJUkFNcUFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJCMm9oRUFKQUEwQWdCQzBBQUNBQlFmVFBnSUFBYWkwQUFFY05rQUVnQVVFSFJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRYndCSVJBTXFBSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkd5RVFESTBCQ3dKQUlBUWdBa2NOQUVHOUFTRVFES2NDQ3dKQUFrQUNRQ0FFTFFBQVFiNS9hZzRTQUpFQmtRR1JBWkVCa1FHUkFaRUJrUUdSQVFHUkFaRUJrUUdSQVpFQmtRRUNrUUVMSUFSQkFXb2hCRUdrQVNFUURJOENDeUFFUVFGcUlRUkJwd0VoRUF5T0Fnc2dCRUVCYWlFRVFhZ0JJUkFNalFJTEFrQWdCQ0FDUncwQVFiNEJJUkFNcGdJTElBUXRBQUJCemdCSERZMEJJQVJCQVdvaEJBelBBUXNDUUNBRUlBSkhEUUJCdndFaEVBeWxBZ3NDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FDQUVMUUFBUWI5L2FnNFZBQUVDQTV3QkJBVUduQUdjQVp3QkJ3Z0pDZ3VjQVF3TkRnK2NBUXNnQkVFQmFpRUJRZWdBSVJBTW1nSUxJQVJCQVdvaEFVSHBBQ0VRREprQ0N5QUVRUUZxSVFGQjdnQWhFQXlZQWdzZ0JFRUJhaUVCUWZJQUlSQU1sd0lMSUFSQkFXb2hBVUh6QUNFUURKWUNDeUFFUVFGcUlRRkI5Z0FoRUF5VkFnc2dCRUVCYWlFQlFmY0FJUkFNbEFJTElBUkJBV29oQVVINkFDRVFESk1DQ3lBRVFRRnFJUVJCZ3dFaEVBeVNBZ3NnQkVFQmFpRUVRWVFCSVJBTWtRSUxJQVJCQVdvaEJFR0ZBU0VRREpBQ0N5QUVRUUZxSVFSQmtnRWhFQXlQQWdzZ0JFRUJhaUVFUVpnQklSQU1qZ0lMSUFSQkFXb2hCRUdnQVNFUURJMENDeUFFUVFGcUlRUkJvd0VoRUF5TUFnc2dCRUVCYWlFRVFhb0JJUkFNaXdJTEFrQWdCQ0FDUmcwQUlBQkJrSUNBZ0FBMkFnZ2dBQ0FFTmdJRVFhc0JJUkFNaXdJTFFjQUJJUkFNb3dJTElBQWdCU0FDRUtxQWdJQUFJZ0VOaXdFZ0JTRUJERndMQWtBZ0JpQUNSZzBBSUFaQkFXb2hCUXlOQVF0QndnRWhFQXloQWdzRFFBSkFJQkF0QUFCQmRtb09CSXdCQUFDUEFRQUxJQkJCQVdvaUVDQUNSdzBBQzBIREFTRVFES0FDQ3dKQUlBY2dBa1lOQUNBQVFaR0FnSUFBTmdJSUlBQWdCellDQkNBSElRRkJBU0VRREljQ0MwSEVBU0VRREo4Q0N3SkFJQWNnQWtjTkFFSEZBU0VRREo4Q0N3SkFBa0FnQnkwQUFFRjJhZzRFQWM0QnpnRUF6Z0VMSUFkQkFXb2hCZ3lOQVFzZ0IwRUJhaUVGRElrQkN3SkFJQWNnQWtjTkFFSEdBU0VRREo0Q0N3SkFBa0FnQnkwQUFFRjJhZzRYQVk4Qmp3RUJqd0dQQVk4Qmp3R1BBWThCandHUEFZOEJqd0dQQVk4Qmp3R1BBWThCandHUEFZOEJBSThCQ3lBSFFRRnFJUWNMUWJBQklSQU1oQUlMQWtBZ0NDQUNSdzBBUWNnQklSQU1uUUlMSUFndEFBQkJJRWNOalFFZ0FFRUFPd0V5SUFoQkFXb2hBVUd6QVNFUURJTUNDeUFCSVJjQ1FBTkFJQmNpQnlBQ1JnMEJJQWN0QUFCQlVHcEIvd0Z4SWhCQkNrOE56QUVDUUNBQUx3RXlJaFJCbVROTERRQWdBQ0FVUVFwc0loUTdBVElnRUVILy93TnpJQlJCL3Y4RGNVa05BQ0FIUVFGcUlSY2dBQ0FVSUJCcUloQTdBVElnRUVILy93TnhRZWdIU1EwQkN3dEJBQ0VRSUFCQkFEWUNIQ0FBUWNHSmdJQUFOZ0lRSUFCQkRUWUNEQ0FBSUFkQkFXbzJBaFFNbkFJTFFjY0JJUkFNbXdJTElBQWdDQ0FDRUs2QWdJQUFJaEJGRGNvQklCQkJGVWNOakFFZ0FFSElBVFlDSENBQUlBZzJBaFFnQUVISmw0Q0FBRFlDRUNBQVFSVTJBZ3hCQUNFUURKb0NDd0pBSUFrZ0FrY05BRUhNQVNFUURKb0NDMEVBSVJSQkFTRVhRUUVoRmtFQUlSQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQWdDUzBBQUVGUWFnNEtsZ0dWQVFBQkFnTUVCUVlJbHdFTFFRSWhFQXdHQzBFRElSQU1CUXRCQkNFUURBUUxRUVVoRUF3REMwRUdJUkFNQWd0QkJ5RVFEQUVMUVFnaEVBdEJBQ0VYUVFBaEZrRUFJUlFNamdFTFFRa2hFRUVCSVJSQkFDRVhRUUFoRmd5TkFRc0NRQ0FLSUFKSERRQkJ6Z0VoRUF5WkFnc2dDaTBBQUVFdVJ3Mk9BU0FLUVFGcUlRa015Z0VMSUFzZ0FrY05qZ0ZCMEFFaEVBeVhBZ3NDUUNBTElBSkdEUUFnQUVHT2dJQ0FBRFlDQ0NBQUlBczJBZ1JCdHdFaEVBeitBUXRCMFFFaEVBeVdBZ3NDUUNBRUlBSkhEUUJCMGdFaEVBeVdBZ3NnQWlBRWF5QUFLQUlBSWhCcUlSUWdCQ0FRYTBFRWFpRUxBMEFnQkMwQUFDQVFRZnpQZ0lBQWFpMEFBRWNOamdFZ0VFRUVSZzNwQVNBUVFRRnFJUkFnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVIU0FTRVFESlVDQ3lBQUlBd2dBaENzZ0lDQUFDSUJEWTBCSUF3aEFReTRBUXNDUUNBRUlBSkhEUUJCMUFFaEVBeVVBZ3NnQWlBRWF5QUFLQUlBSWhCcUlSUWdCQ0FRYTBFQmFpRU1BMEFnQkMwQUFDQVFRWUhRZ0lBQWFpMEFBRWNOandFZ0VFRUJSZzJPQVNBUVFRRnFJUkFnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVIVUFTRVFESk1DQ3dKQUlBUWdBa2NOQUVIV0FTRVFESk1DQ3lBQ0lBUnJJQUFvQWdBaUVHb2hGQ0FFSUJCclFRSnFJUXNEUUNBRUxRQUFJQkJCZzlDQWdBQnFMUUFBUncyT0FTQVFRUUpHRFpBQklCQkJBV29oRUNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFkWUJJUkFNa2dJTEFrQWdCQ0FDUncwQVFkY0JJUkFNa2dJTEFrQUNRQ0FFTFFBQVFidC9hZzRRQUk4Qmp3R1BBWThCandHUEFZOEJqd0dQQVk4Qmp3R1BBWThCandFQmp3RUxJQVJCQVdvaEJFRzdBU0VRRFBrQkN5QUVRUUZxSVFSQnZBRWhFQXo0QVFzQ1FDQUVJQUpIRFFCQjJBRWhFQXlSQWdzZ0JDMEFBRUhJQUVjTmpBRWdCRUVCYWlFRURNUUJDd0pBSUFRZ0FrWU5BQ0FBUVpDQWdJQUFOZ0lJSUFBZ0JEWUNCRUcrQVNFUURQY0JDMEhaQVNFUURJOENDd0pBSUFRZ0FrY05BRUhhQVNFUURJOENDeUFFTFFBQVFjZ0FSZzNEQVNBQVFRRTZBQ2dNdVFFTElBQkJBam9BTHlBQUlBUWdBaENtZ0lDQUFDSVFEWTBCUWNJQklSQU05QUVMSUFBdEFDaEJmMm9PQXJjQnVRRzRBUXNEUUFKQUlBUXRBQUJCZG1vT0JBQ09BWTRCQUk0QkN5QUVRUUZxSWdRZ0FrY05BQXRCM1FFaEVBeUxBZ3NnQUVFQU9nQXZJQUF0QUMxQkJIRkZEWVFDQ3lBQVFRQTZBQzhnQUVFQk9nQTBJQUVoQVF5TUFRc2dFRUVWUmczYUFTQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnA0NkFnQUEyQWhBZ0FFRVNOZ0lNUVFBaEVBeUlBZ3NDUUNBQUlCQWdBaEMwZ0lDQUFDSUVEUUFnRUNFQkRJRUNDd0pBSUFSQkZVY05BQ0FBUVFNMkFod2dBQ0FRTmdJVUlBQkJzSmlBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXlJQWdzZ0FFRUFOZ0ljSUFBZ0VEWUNGQ0FBUWFlT2dJQUFOZ0lRSUFCQkVqWUNERUVBSVJBTWh3SUxJQkJCRlVZTjFnRWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFkcU5nSUFBTmdJUUlBQkJGRFlDREVFQUlSQU1oZ0lMSUFBb0FnUWhGeUFBUVFBMkFnUWdFQ0FScDJvaUZpRUJJQUFnRnlBUUlCWWdGQnNpRUJDMWdJQ0FBQ0lVUlEyTkFTQUFRUWMyQWh3Z0FDQVFOZ0lVSUFBZ0ZEWUNERUVBSVJBTWhRSUxJQUFnQUM4Qk1FR0FBWEk3QVRBZ0FTRUJDMEVxSVJBTTZnRUxJQkJCRlVZTjBRRWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFZT01nSUFBTmdJUUlBQkJFellDREVFQUlSQU1nZ0lMSUJCQkZVWU56d0VnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRWnFQZ0lBQU5nSVFJQUJCSWpZQ0RFRUFJUkFNZ1FJTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkMzZ0lDQUFDSVFEUUFnQVVFQmFpRUJESTBCQ3lBQVFRdzJBaHdnQUNBUU5nSU1JQUFnQVVFQmFqWUNGRUVBSVJBTWdBSUxJQkJCRlVZTnpBRWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFacVBnSUFBTmdJUUlBQkJJallDREVFQUlSQU0vd0VMSUFBb0FnUWhFQ0FBUVFBMkFnUUNRQ0FBSUJBZ0FSQzNnSUNBQUNJUURRQWdBVUVCYWlFQkRJd0JDeUFBUVEwMkFod2dBQ0FRTmdJTUlBQWdBVUVCYWpZQ0ZFRUFJUkFNL2dFTElCQkJGVVlOeVFFZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWNhTWdJQUFOZ0lRSUFCQkl6WUNERUVBSVJBTS9RRUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDNWdJQ0FBQ0lRRFFBZ0FVRUJhaUVCRElzQkN5QUFRUTQyQWh3Z0FDQVFOZ0lNSUFBZ0FVRUJhallDRkVFQUlSQU0vQUVMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUhBbFlDQUFEWUNFQ0FBUVFJMkFneEJBQ0VRRFBzQkN5QVFRUlZHRGNVQklBQkJBRFlDSENBQUlBRTJBaFFnQUVIR2pJQ0FBRFlDRUNBQVFTTTJBZ3hCQUNFUURQb0JDeUFBUVJBMkFod2dBQ0FCTmdJVUlBQWdFRFlDREVFQUlSQU0rUUVMSUFBb0FnUWhCQ0FBUVFBMkFnUUNRQ0FBSUFRZ0FSQzVnSUNBQUNJRURRQWdBVUVCYWlFQkRQRUJDeUFBUVJFMkFod2dBQ0FFTmdJTUlBQWdBVUVCYWpZQ0ZFRUFJUkFNK0FFTElCQkJGVVlOd1FFZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWNhTWdJQUFOZ0lRSUFCQkl6WUNERUVBSVJBTTl3RUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDNWdJQ0FBQ0lRRFFBZ0FVRUJhaUVCRElnQkN5QUFRUk0yQWh3Z0FDQVFOZ0lNSUFBZ0FVRUJhallDRkVFQUlSQU05Z0VMSUFBb0FnUWhCQ0FBUVFBMkFnUUNRQ0FBSUFRZ0FSQzVnSUNBQUNJRURRQWdBVUVCYWlFQkRPMEJDeUFBUVJRMkFod2dBQ0FFTmdJTUlBQWdBVUVCYWpZQ0ZFRUFJUkFNOVFFTElCQkJGVVlOdlFFZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVpxUGdJQUFOZ0lRSUFCQklqWUNERUVBSVJBTTlBRUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDM2dJQ0FBQ0lRRFFBZ0FVRUJhaUVCRElZQkN5QUFRUlkyQWh3Z0FDQVFOZ0lNSUFBZ0FVRUJhallDRkVFQUlSQU04d0VMSUFBb0FnUWhCQ0FBUVFBMkFnUUNRQ0FBSUFRZ0FSQzNnSUNBQUNJRURRQWdBVUVCYWlFQkRPa0JDeUFBUVJjMkFod2dBQ0FFTmdJTUlBQWdBVUVCYWpZQ0ZFRUFJUkFNOGdFTElBQkJBRFlDSENBQUlBRTJBaFFnQUVITms0Q0FBRFlDRUNBQVFRdzJBZ3hCQUNFUURQRUJDMElCSVJFTElCQkJBV29oQVFKQUlBQXBBeUFpRWtMLy8vLy8vLy8vL3c5V0RRQWdBQ0FTUWdTR0lCR0VOd01nSUFFaEFReUVBUXNnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRYTJKZ0lBQU5nSVFJQUJCRERZQ0RFRUFJUkFNN3dFTElBQkJBRFlDSENBQUlCQTJBaFFnQUVITms0Q0FBRFlDRUNBQVFRdzJBZ3hCQUNFUURPNEJDeUFBS0FJRUlSY2dBRUVBTmdJRUlCQWdFYWRxSWhZaEFTQUFJQmNnRUNBV0lCUWJJaEFRdFlDQWdBQWlGRVVOY3lBQVFRVTJBaHdnQUNBUU5nSVVJQUFnRkRZQ0RFRUFJUkFNN1FFTElBQkJBRFlDSENBQUlCQTJBaFFnQUVHcW5JQ0FBRFlDRUNBQVFRODJBZ3hCQUNFUURPd0JDeUFBSUJBZ0FoQzBnSUNBQUNJQkRRRWdFQ0VCQzBFT0lSQU0wUUVMQWtBZ0FVRVZSdzBBSUFCQkFqWUNIQ0FBSUJBMkFoUWdBRUd3bUlDQUFEWUNFQ0FBUVJVMkFneEJBQ0VRRE9vQkN5QUFRUUEyQWh3Z0FDQVFOZ0lVSUFCQnA0NkFnQUEyQWhBZ0FFRVNOZ0lNUVFBaEVBenBBUXNnQVVFQmFpRVFBa0FnQUM4Qk1DSUJRWUFCY1VVTkFBSkFJQUFnRUNBQ0VMdUFnSUFBSWdFTkFDQVFJUUVNY0FzZ0FVRVZSdzI2QVNBQVFRVTJBaHdnQUNBUU5nSVVJQUJCK1plQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF6cEFRc0NRQ0FCUWFBRWNVR2dCRWNOQUNBQUxRQXRRUUp4RFFBZ0FFRUFOZ0ljSUFBZ0VEWUNGQ0FBUVphVGdJQUFOZ0lRSUFCQkJEWUNERUVBSVJBTTZRRUxJQUFnRUNBQ0VMMkFnSUFBR2lBUUlRRUNRQUpBQWtBQ1FBSkFJQUFnRUNBQ0VMT0FnSUFBRGhZQ0FRQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUURCQXNnQUVFQk9nQXVDeUFBSUFBdkFUQkJ3QUJ5T3dFd0lCQWhBUXRCSmlFUURORUJDeUFBUVNNMkFod2dBQ0FRTmdJVUlBQkJwWmFBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXpwQVFzZ0FFRUFOZ0ljSUFBZ0VEWUNGQ0FBUWRXTGdJQUFOZ0lRSUFCQkVUWUNERUVBSVJBTTZBRUxJQUF0QUMxQkFYRkZEUUZCd3dFaEVBek9BUXNDUUNBTklBSkdEUUFEUUFKQUlBMHRBQUJCSUVZTkFDQU5JUUVNeEFFTElBMUJBV29pRFNBQ1J3MEFDMEVsSVJBTTV3RUxRU1VoRUF6bUFRc2dBQ2dDQkNFRUlBQkJBRFlDQkNBQUlBUWdEUkN2Z0lDQUFDSUVSUTJ0QVNBQVFTWTJBaHdnQUNBRU5nSU1JQUFnRFVFQmFqWUNGRUVBSVJBTTVRRUxJQkJCRlVZTnF3RWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFmMk5nSUFBTmdJUUlBQkJIVFlDREVFQUlSQU01QUVMSUFCQkp6WUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXpqQVFzZ0VDRUJRUUVoRkFKQUFrQUNRQUpBQWtBQ1FBSkFJQUF0QUN4QmZtb09Cd1lGQlFNQkFnQUZDeUFBSUFBdkFUQkJDSEk3QVRBTUF3dEJBaUVVREFFTFFRUWhGQXNnQUVFQk9nQXNJQUFnQUM4Qk1DQVVjanNCTUFzZ0VDRUJDMEVySVJBTXlnRUxJQUJCQURZQ0hDQUFJQkEyQWhRZ0FFR3Jrb0NBQURZQ0VDQUFRUXMyQWd4QkFDRVFET0lCQ3lBQVFRQTJBaHdnQUNBQk5nSVVJQUJCNFkrQWdBQTJBaEFnQUVFS05nSU1RUUFoRUF6aEFRc2dBRUVBT2dBc0lCQWhBUXk5QVFzZ0VDRUJRUUVoRkFKQUFrQUNRQUpBQWtBZ0FDMEFMRUY3YWc0RUF3RUNBQVVMSUFBZ0FDOEJNRUVJY2pzQk1Bd0RDMEVDSVJRTUFRdEJCQ0VVQ3lBQVFRRTZBQ3dnQUNBQUx3RXdJQlJ5T3dFd0N5QVFJUUVMUVNraEVBekZBUXNnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZkNVZ0lBQU5nSVFJQUJCQXpZQ0RFRUFJUkFNM1FFTEFrQWdEaTBBQUVFTlJ3MEFJQUFvQWdRaEFTQUFRUUEyQWdRQ1FDQUFJQUVnRGhDeGdJQ0FBQ0lCRFFBZ0RrRUJhaUVCREhVTElBQkJMRFlDSENBQUlBRTJBZ3dnQUNBT1FRRnFOZ0lVUVFBaEVBemRBUXNnQUMwQUxVRUJjVVVOQVVIRUFTRVFETU1CQ3dKQUlBNGdBa2NOQUVFdElSQU0zQUVMQWtBQ1FBTkFBa0FnRGkwQUFFRjJhZzRFQWdBQUF3QUxJQTVCQVdvaURpQUNSdzBBQzBFdElSQU0zUUVMSUFBb0FnUWhBU0FBUVFBMkFnUUNRQ0FBSUFFZ0RoQ3hnSUNBQUNJQkRRQWdEaUVCREhRTElBQkJMRFlDSENBQUlBNDJBaFFnQUNBQk5nSU1RUUFoRUF6Y0FRc2dBQ2dDQkNFQklBQkJBRFlDQkFKQUlBQWdBU0FPRUxHQWdJQUFJZ0VOQUNBT1FRRnFJUUVNY3dzZ0FFRXNOZ0ljSUFBZ0FUWUNEQ0FBSUE1QkFXbzJBaFJCQUNFUUROc0JDeUFBS0FJRUlRUWdBRUVBTmdJRUlBQWdCQ0FPRUxHQWdJQUFJZ1FOb0FFZ0RpRUJETTRCQ3lBUVFTeEhEUUVnQVVFQmFpRVFRUUVoQVFKQUFrQUNRQUpBQWtBZ0FDMEFMRUY3YWc0RUF3RUNCQUFMSUJBaEFRd0VDMEVDSVFFTUFRdEJCQ0VCQ3lBQVFRRTZBQ3dnQUNBQUx3RXdJQUZ5T3dFd0lCQWhBUXdCQ3lBQUlBQXZBVEJCQ0hJN0FUQWdFQ0VCQzBFNUlSQU12d0VMSUFCQkFEb0FMQ0FCSVFFTFFUUWhFQXk5QVFzZ0FDQUFMd0V3UVNCeU93RXdJQUVoQVF3Q0N5QUFLQUlFSVFRZ0FFRUFOZ0lFQWtBZ0FDQUVJQUVRc1lDQWdBQWlCQTBBSUFFaEFRekhBUXNnQUVFM05nSWNJQUFnQVRZQ0ZDQUFJQVEyQWd4QkFDRVFETlFCQ3lBQVFRZzZBQ3dnQVNFQkMwRXdJUkFNdVFFTEFrQWdBQzBBS0VFQlJnMEFJQUVoQVF3RUN5QUFMUUF0UVFoeFJRMlRBU0FCSVFFTUF3c2dBQzBBTUVFZ2NRMlVBVUhGQVNFUURMY0JDd0pBSUE4Z0FrWU5BQUpBQTBBQ1FDQVBMUUFBUVZCcUlnRkIvd0Z4UVFwSkRRQWdEeUVCUVRVaEVBeTZBUXNnQUNrRElDSVJRcG16NXN5WnMrYk1HVllOQVNBQUlCRkNDbjRpRVRjRElDQVJJQUd0UXY4Qmd5SVNRbitGVmcwQklBQWdFU0FTZkRjRElDQVBRUUZxSWc4Z0FrY05BQXRCT1NFUURORUJDeUFBS0FJRUlRSWdBRUVBTmdJRUlBQWdBaUFQUVFGcUlnUVFzWUNBZ0FBaUFnMlZBU0FFSVFFTXd3RUxRVGtoRUF6UEFRc0NRQ0FBTHdFd0lnRkJDSEZGRFFBZ0FDMEFLRUVCUncwQUlBQXRBQzFCQ0hGRkRaQUJDeUFBSUFGQjkvc0RjVUdBQkhJN0FUQWdEeUVCQzBFM0lSQU10QUVMSUFBZ0FDOEJNRUVRY2pzQk1BeXJBUXNnRUVFVlJnMkxBU0FBUVFBMkFod2dBQ0FCTmdJVUlBQkI4STZBZ0FBMkFoQWdBRUVjTmdJTVFRQWhFQXpMQVFzZ0FFSERBRFlDSENBQUlBRTJBZ3dnQUNBTlFRRnFOZ0lVUVFBaEVBektBUXNDUUNBQkxRQUFRVHBIRFFBZ0FDZ0NCQ0VRSUFCQkFEWUNCQUpBSUFBZ0VDQUJFSytBZ0lBQUloQU5BQ0FCUVFGcUlRRU1Zd3NnQUVIREFEWUNIQ0FBSUJBMkFnd2dBQ0FCUVFGcU5nSVVRUUFoRUF6S0FRc2dBRUVBTmdJY0lBQWdBVFlDRkNBQVFiR1JnSUFBTmdJUUlBQkJDallDREVFQUlSQU15UUVMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUdnbVlDQUFEWUNFQ0FBUVI0MkFneEJBQ0VRRE1nQkN5QUFRUUEyQWdBTElBQkJnQkk3QVNvZ0FDQVhRUUZxSWdFZ0FoQ29nSUNBQUNJUURRRWdBU0VCQzBISEFDRVFES3dCQ3lBUVFSVkhEWU1CSUFCQjBRQTJBaHdnQUNBQk5nSVVJQUJCNDVlQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF6RUFRc2dBQ2dDQkNFUUlBQkJBRFlDQkFKQUlBQWdFQ0FCRUtlQWdJQUFJaEFOQUNBQklRRU1YZ3NnQUVIU0FEWUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXpEQVFzZ0FFRUFOZ0ljSUFBZ0ZEWUNGQ0FBUWNHb2dJQUFOZ0lRSUFCQkJ6WUNEQ0FBUVFBMkFnQkJBQ0VRRE1JQkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRcDRDQWdBQWlFQTBBSUFFaEFReGRDeUFBUWRNQU5nSWNJQUFnQVRZQ0ZDQUFJQkEyQWd4QkFDRVFETUVCQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFZQ1JnSUFBTmdJUUlBQkJDVFlDREF6QUFRc2dFRUVWUmcxOUlBQkJBRFlDSENBQUlBRTJBaFFnQUVHVWpZQ0FBRFlDRUNBQVFTRTJBZ3hCQUNFUURMOEJDMEVCSVJaQkFDRVhRUUFoRkVFQklSQUxJQUFnRURvQUt5QUJRUUZxSVFFQ1FBSkFJQUF0QUMxQkVIRU5BQUpBQWtBQ1FDQUFMUUFxRGdNQkFBSUVDeUFXUlEwRERBSUxJQlFOQVF3Q0N5QVhSUTBCQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVFyWUNBZ0FBaUVBMEFJQUVoQVF4Y0N5QUFRZGdBTmdJY0lBQWdBVFlDRkNBQUlCQTJBZ3hCQUNFUURMNEJDeUFBS0FJRUlRUWdBRUVBTmdJRUFrQWdBQ0FFSUFFUXJZQ0FnQUFpQkEwQUlBRWhBUXl0QVFzZ0FFSFpBRFlDSENBQUlBRTJBaFFnQUNBRU5nSU1RUUFoRUF5OUFRc2dBQ2dDQkNFRUlBQkJBRFlDQkFKQUlBQWdCQ0FCRUsyQWdJQUFJZ1FOQUNBQklRRU1xd0VMSUFCQjJnQTJBaHdnQUNBQk5nSVVJQUFnQkRZQ0RFRUFJUkFNdkFFTElBQW9BZ1FoQkNBQVFRQTJBZ1FDUUNBQUlBUWdBUkN0Z0lDQUFDSUVEUUFnQVNFQkRLa0JDeUFBUWR3QU5nSWNJQUFnQVRZQ0ZDQUFJQVEyQWd4QkFDRVFETHNCQ3dKQUlBRXRBQUJCVUdvaUVFSC9BWEZCQ2s4TkFDQUFJQkE2QUNvZ0FVRUJhaUVCUWM4QUlSQU1vZ0VMSUFBb0FnUWhCQ0FBUVFBMkFnUUNRQ0FBSUFRZ0FSQ3RnSUNBQUNJRURRQWdBU0VCREtjQkN5QUFRZDRBTmdJY0lBQWdBVFlDRkNBQUlBUTJBZ3hCQUNFUURMb0JDeUFBUVFBMkFnQWdGMEVCYWlFQkFrQWdBQzBBS1VFalR3MEFJQUVoQVF4WkN5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQjA0bUFnQUEyQWhBZ0FFRUlOZ0lNUVFBaEVBeTVBUXNnQUVFQU5nSUFDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVpDemdJQUFOZ0lRSUFCQkNEWUNEQXkzQVFzZ0FFRUFOZ0lBSUJkQkFXb2hBUUpBSUFBdEFDbEJJVWNOQUNBQklRRU1WZ3NnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRWnVLZ0lBQU5nSVFJQUJCQ0RZQ0RFRUFJUkFNdGdFTElBQkJBRFlDQUNBWFFRRnFJUUVDUUNBQUxRQXBJaEJCWFdwQkMwOE5BQ0FCSVFFTVZRc0NRQ0FRUVFaTERRQkJBU0FRZEVIS0FIRkZEUUFnQVNFQkRGVUxRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCOTRtQWdBQTJBaEFnQUVFSU5nSU1ETFVCQ3lBUVFSVkdEWEVnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRYm1OZ0lBQU5nSVFJQUJCR2pZQ0RFRUFJUkFNdEFFTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkNuZ0lDQUFDSVFEUUFnQVNFQkRGUUxJQUJCNVFBMkFod2dBQ0FCTmdJVUlBQWdFRFlDREVFQUlSQU1zd0VMSUFBb0FnUWhFQ0FBUVFBMkFnUUNRQ0FBSUJBZ0FSQ25nSUNBQUNJUURRQWdBU0VCREUwTElBQkIwZ0EyQWh3Z0FDQUJOZ0lVSUFBZ0VEWUNERUVBSVJBTXNnRUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDbmdJQ0FBQ0lRRFFBZ0FTRUJERTBMSUFCQjB3QTJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNc1FFTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkNuZ0lDQUFDSVFEUUFnQVNFQkRGRUxJQUJCNVFBMkFod2dBQ0FCTmdJVUlBQWdFRFlDREVFQUlSQU1zQUVMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUhHaW9DQUFEWUNFQ0FBUVFjMkFneEJBQ0VRREs4QkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRcDRDQWdBQWlFQTBBSUFFaEFReEpDeUFBUWRJQU5nSWNJQUFnQVRZQ0ZDQUFJQkEyQWd4QkFDRVFESzRCQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVFwNENBZ0FBaUVBMEFJQUVoQVF4SkN5QUFRZE1BTmdJY0lBQWdBVFlDRkNBQUlCQTJBZ3hCQUNFUURLMEJDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXA0Q0FnQUFpRUEwQUlBRWhBUXhOQ3lBQVFlVUFOZ0ljSUFBZ0FUWUNGQ0FBSUJBMkFneEJBQ0VRREt3QkN5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQjNJaUFnQUEyQWhBZ0FFRUhOZ0lNUVFBaEVBeXJBUXNnRUVFL1J3MEJJQUZCQVdvaEFRdEJCU0VRREpBQkMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZjJTZ0lBQU5nSVFJQUJCQnpZQ0RBeW9BUXNnQUNnQ0JDRVFJQUJCQURZQ0JBSkFJQUFnRUNBQkVLZUFnSUFBSWhBTkFDQUJJUUVNUWdzZ0FFSFNBRFlDSENBQUlBRTJBaFFnQUNBUU5nSU1RUUFoRUF5bkFRc2dBQ2dDQkNFUUlBQkJBRFlDQkFKQUlBQWdFQ0FCRUtlQWdJQUFJaEFOQUNBQklRRU1RZ3NnQUVIVEFEWUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXltQVFzZ0FDZ0NCQ0VRSUFCQkFEWUNCQUpBSUFBZ0VDQUJFS2VBZ0lBQUloQU5BQ0FCSVFFTVJnc2dBRUhsQURZQ0hDQUFJQUUyQWhRZ0FDQVFOZ0lNUVFBaEVBeWxBUXNnQUNnQ0JDRUJJQUJCQURZQ0JBSkFJQUFnQVNBVUVLZUFnSUFBSWdFTkFDQVVJUUVNUHdzZ0FFSFNBRFlDSENBQUlCUTJBaFFnQUNBQk5nSU1RUUFoRUF5a0FRc2dBQ2dDQkNFQklBQkJBRFlDQkFKQUlBQWdBU0FVRUtlQWdJQUFJZ0VOQUNBVUlRRU1Qd3NnQUVIVEFEWUNIQ0FBSUJRMkFoUWdBQ0FCTmdJTVFRQWhFQXlqQVFzZ0FDZ0NCQ0VCSUFCQkFEWUNCQUpBSUFBZ0FTQVVFS2VBZ0lBQUlnRU5BQ0FVSVFFTVF3c2dBRUhsQURZQ0hDQUFJQlEyQWhRZ0FDQUJOZ0lNUVFBaEVBeWlBUXNnQUVFQU5nSWNJQUFnRkRZQ0ZDQUFRY09QZ0lBQU5nSVFJQUJCQnpZQ0RFRUFJUkFNb1FFTElBQkJBRFlDSENBQUlBRTJBaFFnQUVIRGo0Q0FBRFlDRUNBQVFRYzJBZ3hCQUNFUURLQUJDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0ZEWUNGQ0FBUVl5Y2dJQUFOZ0lRSUFCQkJ6WUNEQXlmQVFzZ0FFRUFOZ0ljSUFBZ0ZEWUNGQ0FBUVl5Y2dJQUFOZ0lRSUFCQkJ6WUNERUVBSVJBTW5nRUxJQUJCQURZQ0hDQUFJQlEyQWhRZ0FFSCtrWUNBQURZQ0VDQUFRUWMyQWd4QkFDRVFESjBCQ3lBQVFRQTJBaHdnQUNBQk5nSVVJQUJCanB1QWdBQTJBaEFnQUVFR05nSU1RUUFoRUF5Y0FRc2dFRUVWUmcxWElBQkJBRFlDSENBQUlBRTJBaFFnQUVITWpvQ0FBRFlDRUNBQVFTQTJBZ3hCQUNFUURKc0JDeUFBUVFBMkFnQWdFRUVCYWlFQlFTUWhFQXNnQUNBUU9nQXBJQUFvQWdRaEVDQUFRUUEyQWdRZ0FDQVFJQUVRcTRDQWdBQWlFQTFVSUFFaEFRdytDeUFBUVFBMkFnQUxRUUFoRUNBQVFRQTJBaHdnQUNBRU5nSVVJQUJCOFp1QWdBQTJBaEFnQUVFR05nSU1ESmNCQ3lBQlFSVkdEVkFnQUVFQU5nSWNJQUFnQlRZQ0ZDQUFRZkNNZ0lBQU5nSVFJQUJCR3pZQ0RFRUFJUkFNbGdFTElBQW9BZ1FoQlNBQVFRQTJBZ1FnQUNBRklCQVFxWUNBZ0FBaUJRMEJJQkJCQVdvaEJRdEJyUUVoRUF4N0N5QUFRY0VCTmdJY0lBQWdCVFlDRENBQUlCQkJBV28yQWhSQkFDRVFESk1CQ3lBQUtBSUVJUVlnQUVFQU5nSUVJQUFnQmlBUUVLbUFnSUFBSWdZTkFTQVFRUUZxSVFZTFFhNEJJUkFNZUFzZ0FFSENBVFlDSENBQUlBWTJBZ3dnQUNBUVFRRnFOZ0lVUVFBaEVBeVFBUXNnQUVFQU5nSWNJQUFnQnpZQ0ZDQUFRWmVMZ0lBQU5nSVFJQUJCRFRZQ0RFRUFJUkFNandFTElBQkJBRFlDSENBQUlBZzJBaFFnQUVIamtJQ0FBRFlDRUNBQVFRazJBZ3hCQUNFUURJNEJDeUFBUVFBMkFod2dBQ0FJTmdJVUlBQkJsSTJBZ0FBMkFoQWdBRUVoTmdJTVFRQWhFQXlOQVF0QkFTRVdRUUFoRjBFQUlSUkJBU0VRQ3lBQUlCQTZBQ3NnQ1VFQmFpRUlBa0FDUUNBQUxRQXRRUkJ4RFFBQ1FBSkFBa0FnQUMwQUtnNERBUUFDQkFzZ0ZrVU5Bd3dDQ3lBVURRRU1BZ3NnRjBVTkFRc2dBQ2dDQkNFUUlBQkJBRFlDQkNBQUlCQWdDQkN0Z0lDQUFDSVFSUTA5SUFCQnlRRTJBaHdnQUNBSU5nSVVJQUFnRURZQ0RFRUFJUkFNakFFTElBQW9BZ1FoQkNBQVFRQTJBZ1FnQUNBRUlBZ1FyWUNBZ0FBaUJFVU5kaUFBUWNvQk5nSWNJQUFnQ0RZQ0ZDQUFJQVEyQWd4QkFDRVFESXNCQ3lBQUtBSUVJUVFnQUVFQU5nSUVJQUFnQkNBSkVLMkFnSUFBSWdSRkRYUWdBRUhMQVRZQ0hDQUFJQWsyQWhRZ0FDQUVOZ0lNUVFBaEVBeUtBUXNnQUNnQ0JDRUVJQUJCQURZQ0JDQUFJQVFnQ2hDdGdJQ0FBQ0lFUlExeUlBQkJ6UUUyQWh3Z0FDQUtOZ0lVSUFBZ0JEWUNERUVBSVJBTWlRRUxBa0FnQ3kwQUFFRlFhaUlRUWY4QmNVRUtUdzBBSUFBZ0VEb0FLaUFMUVFGcUlRcEJ0Z0VoRUF4d0N5QUFLQUlFSVFRZ0FFRUFOZ0lFSUFBZ0JDQUxFSzJBZ0lBQUlnUkZEWEFnQUVIUEFUWUNIQ0FBSUFzMkFoUWdBQ0FFTmdJTVFRQWhFQXlJQVFzZ0FFRUFOZ0ljSUFBZ0JEWUNGQ0FBUVpDemdJQUFOZ0lRSUFCQkNEWUNEQ0FBUVFBMkFnQkJBQ0VRREljQkN5QUJRUlZHRFQ4Z0FFRUFOZ0ljSUFBZ0REWUNGQ0FBUWN5T2dJQUFOZ0lRSUFCQklEWUNERUVBSVJBTWhnRUxJQUJCZ1FRN0FTZ2dBQ2dDQkNFUUlBQkNBRGNEQUNBQUlCQWdERUVCYWlJTUVLdUFnSUFBSWhCRkRUZ2dBRUhUQVRZQ0hDQUFJQXcyQWhRZ0FDQVFOZ0lNUVFBaEVBeUZBUXNnQUVFQU5nSUFDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0JEWUNGQ0FBUWRpYmdJQUFOZ0lRSUFCQkNEWUNEQXlEQVFzZ0FDZ0NCQ0VRSUFCQ0FEY0RBQ0FBSUJBZ0MwRUJhaUlMRUt1QWdJQUFJaEFOQVVIR0FTRVFER2tMSUFCQkFqb0FLQXhWQ3lBQVFkVUJOZ0ljSUFBZ0N6WUNGQ0FBSUJBMkFneEJBQ0VRRElBQkN5QVFRUlZHRFRjZ0FFRUFOZ0ljSUFBZ0JEWUNGQ0FBUWFTTWdJQUFOZ0lRSUFCQkVEWUNERUVBSVJBTWZ3c2dBQzBBTkVFQlJ3MDBJQUFnQkNBQ0VMeUFnSUFBSWhCRkRUUWdFRUVWUncwMUlBQkIzQUUyQWh3Z0FDQUVOZ0lVSUFCQjFaYUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBeCtDMEVBSVJBZ0FFRUFOZ0ljSUFCQnI0dUFnQUEyQWhBZ0FFRUNOZ0lNSUFBZ0ZFRUJhallDRkF4OUMwRUFJUkFNWXd0QkFpRVFER0lMUVEwaEVBeGhDMEVQSVJBTVlBdEJKU0VRREY4TFFSTWhFQXhlQzBFVklSQU1YUXRCRmlFUURGd0xRUmNoRUF4YkMwRVlJUkFNV2d0QkdTRVFERmtMUVJvaEVBeFlDMEViSVJBTVZ3dEJIQ0VRREZZTFFSMGhFQXhWQzBFZklSQU1WQXRCSVNFUURGTUxRU01oRUF4U0MwSEdBQ0VRREZFTFFTNGhFQXhRQzBFdklSQU1Ud3RCT3lFUURFNExRVDBoRUF4TkMwSElBQ0VRREV3TFFja0FJUkFNU3d0Qnl3QWhFQXhLQzBITUFDRVFERWtMUWM0QUlSQU1TQXRCMFFBaEVBeEhDMEhWQUNFUURFWUxRZGdBSVJBTVJRdEIyUUFoRUF4RUMwSGJBQ0VRREVNTFFlUUFJUkFNUWd0QjVRQWhFQXhCQzBIeEFDRVFERUFMUWZRQUlSQU1Qd3RCalFFaEVBdytDMEdYQVNFUUREMExRYWtCSVJBTVBBdEJyQUVoRUF3N0MwSEFBU0VRRERvTFFia0JJUkFNT1F0QnJ3RWhFQXc0QzBHeEFTRVFERGNMUWJJQklSQU1OZ3RCdEFFaEVBdzFDMEcxQVNFUUREUUxRYm9CSVJBTU13dEJ2UUVoRUF3eUMwRy9BU0VRRERFTFFjRUJJUkFNTUFzZ0FFRUFOZ0ljSUFBZ0JEWUNGQ0FBUWVtTGdJQUFOZ0lRSUFCQkh6WUNERUVBSVJBTVNBc2dBRUhiQVRZQ0hDQUFJQVEyQWhRZ0FFSDZsb0NBQURZQ0VDQUFRUlUyQWd4QkFDRVFERWNMSUFCQitBQTJBaHdnQUNBTU5nSVVJQUJCeXBpQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF4R0N5QUFRZEVBTmdJY0lBQWdCVFlDRkNBQVFiQ1hnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1SUXNnQUVINUFEWUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXhFQ3lBQVFmZ0FOZ0ljSUFBZ0FUWUNGQ0FBUWNxWWdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTVF3c2dBRUhrQURZQ0hDQUFJQUUyQWhRZ0FFSGpsNENBQURZQ0VDQUFRUlUyQWd4QkFDRVFERUlMSUFCQjF3QTJBaHdnQUNBQk5nSVVJQUJCeVplQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF4QkN5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnVZMkFnQUEyQWhBZ0FFRWFOZ0lNUVFBaEVBeEFDeUFBUWNJQU5nSWNJQUFnQVRZQ0ZDQUFRZU9ZZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNUHdzZ0FFRUFOZ0lFSUFBZ0R5QVBFTEdBZ0lBQUlnUkZEUUVnQUVFNk5nSWNJQUFnQkRZQ0RDQUFJQTlCQVdvMkFoUkJBQ0VRREQ0TElBQW9BZ1FoQkNBQVFRQTJBZ1FDUUNBQUlBUWdBUkN4Z0lDQUFDSUVSUTBBSUFCQk96WUNIQ0FBSUFRMkFnd2dBQ0FCUVFGcU5nSVVRUUFoRUF3K0N5QUJRUUZxSVFFTUxRc2dEMEVCYWlFQkRDMExJQUJCQURZQ0hDQUFJQTgyQWhRZ0FFSGtrb0NBQURZQ0VDQUFRUVEyQWd4QkFDRVFERHNMSUFCQk5qWUNIQ0FBSUFRMkFoUWdBQ0FDTmdJTVFRQWhFQXc2Q3lBQVFTNDJBaHdnQUNBT05nSVVJQUFnQkRZQ0RFRUFJUkFNT1FzZ0FFSFFBRFlDSENBQUlBRTJBaFFnQUVHUm1JQ0FBRFlDRUNBQVFSVTJBZ3hCQUNFUUREZ0xJQTFCQVdvaEFRd3NDeUFBUVJVMkFod2dBQ0FCTmdJVUlBQkJncG1BZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXcyQ3lBQVFSczJBaHdnQUNBQk5nSVVJQUJCa1plQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF3MUN5QUFRUTgyQWh3Z0FDQUJOZ0lVSUFCQmtaZUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBdzBDeUFBUVFzMkFod2dBQ0FCTmdJVUlBQkJrWmVBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXd6Q3lBQVFSbzJBaHdnQUNBQk5nSVVJQUJCZ3BtQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF3eUN5QUFRUXMyQWh3Z0FDQUJOZ0lVSUFCQmdwbUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBd3hDeUFBUVFvMkFod2dBQ0FCTmdJVUlBQkI1SmFBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXd3Q3lBQVFSNDJBaHdnQUNBQk5nSVVJQUJCK1plQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF3dkN5QUFRUUEyQWh3Z0FDQVFOZ0lVSUFCQjJvMkFnQUEyQWhBZ0FFRVVOZ0lNUVFBaEVBd3VDeUFBUVFRMkFod2dBQ0FCTmdJVUlBQkJzSmlBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXd0Q3lBQVFRQTJBZ0FnQzBFQmFpRUxDMEc0QVNFUURCSUxJQUJCQURZQ0FDQVFRUUZxSVFGQjlRQWhFQXdSQ3lBQklRRUNRQ0FBTFFBcFFRVkhEUUJCNHdBaEVBd1JDMEhpQUNFUURCQUxRUUFoRUNBQVFRQTJBaHdnQUVIa2tZQ0FBRFlDRUNBQVFRYzJBZ3dnQUNBVVFRRnFOZ0lVRENnTElBQkJBRFlDQUNBWFFRRnFJUUZCd0FBaEVBd09DMEVCSVFFTElBQWdBVG9BTENBQVFRQTJBZ0FnRjBFQmFpRUJDMEVvSVJBTUN3c2dBU0VCQzBFNElSQU1DUXNDUUNBQklnOGdBa1lOQUFOQUFrQWdEeTBBQUVHQXZvQ0FBR290QUFBaUFVRUJSZzBBSUFGQkFrY05BeUFQUVFGcUlRRU1CQXNnRDBFQmFpSVBJQUpIRFFBTFFUNGhFQXdpQzBFK0lSQU1JUXNnQUVFQU9nQXNJQThoQVF3QkMwRUxJUkFNQmd0Qk9pRVFEQVVMSUFGQkFXb2hBVUV0SVJBTUJBc2dBQ0FCT2dBc0lBQkJBRFlDQUNBV1FRRnFJUUZCRENFUURBTUxJQUJCQURZQ0FDQVhRUUZxSVFGQkNpRVFEQUlMSUFCQkFEWUNBQXNnQUVFQU9nQXNJQTBoQVVFSklSQU1BQXNMUVFBaEVDQUFRUUEyQWh3Z0FDQUxOZ0lVSUFCQnpaQ0FnQUEyQWhBZ0FFRUpOZ0lNREJjTFFRQWhFQ0FBUVFBMkFod2dBQ0FLTmdJVUlBQkI2WXFBZ0FBMkFoQWdBRUVKTmdJTURCWUxRUUFoRUNBQVFRQTJBaHdnQUNBSk5nSVVJQUJCdDVDQWdBQTJBaEFnQUVFSk5nSU1EQlVMUVFBaEVDQUFRUUEyQWh3Z0FDQUlOZ0lVSUFCQm5KR0FnQUEyQWhBZ0FFRUpOZ0lNREJRTFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkJ6WkNBZ0FBMkFoQWdBRUVKTmdJTURCTUxRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCNllxQWdBQTJBaEFnQUVFSk5nSU1EQklMUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnQ1Q0FnQUEyQWhBZ0FFRUpOZ0lNREJFTFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkJuSkdBZ0FBMkFoQWdBRUVKTmdJTURCQUxRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCbDVXQWdBQTJBaEFnQUVFUE5nSU1EQThMUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQmw1V0FnQUEyQWhBZ0FFRVBOZ0lNREE0TFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkJ3SktBZ0FBMkFoQWdBRUVMTmdJTURBMExRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCbFltQWdBQTJBaEFnQUVFTE5nSU1EQXdMUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQjRZK0FnQUEyQWhBZ0FFRUtOZ0lNREFzTFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkIrNCtBZ0FBMkFoQWdBRUVLTmdJTURBb0xRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCOFptQWdBQTJBaEFnQUVFQ05nSU1EQWtMUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnhKU0FnQUEyQWhBZ0FFRUNOZ0lNREFnTFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkI4cFdBZ0FBMkFoQWdBRUVDTmdJTURBY0xJQUJCQWpZQ0hDQUFJQUUyQWhRZ0FFR2Ntb0NBQURZQ0VDQUFRUlkyQWd4QkFDRVFEQVlMUVFFaEVBd0ZDMEhVQUNFUUlBRWlCQ0FDUmcwRUlBTkJDR29nQUNBRUlBSkIyTUtBZ0FCQkNoREZnSUNBQUNBREtBSU1JUVFnQXlnQ0NBNERBUVFDQUFzUXlvQ0FnQUFBQ3lBQVFRQTJBaHdnQUVHMW1vQ0FBRFlDRUNBQVFSYzJBZ3dnQUNBRVFRRnFOZ0lVUVFBaEVBd0NDeUFBUVFBMkFod2dBQ0FFTmdJVUlBQkJ5cHFBZ0FBMkFoQWdBRUVKTmdJTVFRQWhFQXdCQ3dKQUlBRWlCQ0FDUncwQVFTSWhFQXdCQ3lBQVFZbUFnSUFBTmdJSUlBQWdCRFlDQkVFaElSQUxJQU5CRUdva2dJQ0FnQUFnRUF1dkFRRUNmeUFCS0FJQUlRWUNRQUpBSUFJZ0EwWU5BQ0FFSUFacUlRUWdCaUFEYWlBQ2F5RUhJQUlnQmtGL2N5QUZhaUlHYWlFRkEwQUNRQ0FDTFFBQUlBUXRBQUJHRFFCQkFpRUVEQU1MQWtBZ0JnMEFRUUFoQkNBRklRSU1Bd3NnQmtGL2FpRUdJQVJCQVdvaEJDQUNRUUZxSWdJZ0EwY05BQXNnQnlFR0lBTWhBZ3NnQUVFQk5nSUFJQUVnQmpZQ0FDQUFJQUkyQWdRUEN5QUJRUUEyQWdBZ0FDQUVOZ0lBSUFBZ0FqWUNCQXNLQUNBQUVNZUFnSUFBQy9JMkFRdC9JNENBZ0lBQVFSQnJJZ0VrZ0lDQWdBQUNRRUVBS0FLZzBJQ0FBQTBBUVFBUXk0Q0FnQUJCZ05TRWdBQnJJZ0pCMlFCSkRRQkJBQ0VEQWtCQkFDZ0M0Tk9BZ0FBaUJBMEFRUUJDZnpjQzdOT0FnQUJCQUVLQWdJU0FnSURBQURjQzVOT0FnQUJCQUNBQlFRaHFRWEJ4UWRpcTFhb0ZjeUlFTmdMZzA0Q0FBRUVBUVFBMkF2VFRnSUFBUVFCQkFEWUN4Tk9BZ0FBTFFRQWdBallDek5PQWdBQkJBRUdBMUlTQUFEWUN5Tk9BZ0FCQkFFR0ExSVNBQURZQ21OQ0FnQUJCQUNBRU5nS3MwSUNBQUVFQVFYODJBcWpRZ0lBQUEwQWdBMEhFMElDQUFHb2dBMEc0MElDQUFHb2lCRFlDQUNBRUlBTkJzTkNBZ0FCcUlnVTJBZ0FnQTBHODBJQ0FBR29nQlRZQ0FDQURRY3pRZ0lBQWFpQURRY0RRZ0lBQWFpSUZOZ0lBSUFVZ0JEWUNBQ0FEUWRUUWdJQUFhaUFEUWNqUWdJQUFhaUlFTmdJQUlBUWdCVFlDQUNBRFFkRFFnSUFBYWlBRU5nSUFJQU5CSUdvaUEwR0FBa2NOQUF0QmdOU0VnQUJCZUVHQTFJU0FBR3RCRDNGQkFFR0ExSVNBQUVFSWFrRVBjUnNpQTJvaUJFRUVhaUFDUVVocUlnVWdBMnNpQTBFQmNqWUNBRUVBUVFBb0F2RFRnSUFBTmdLazBJQ0FBRUVBSUFNMkFwVFFnSUFBUVFBZ0JEWUNvTkNBZ0FCQmdOU0VnQUFnQldwQk9EWUNCQXNDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQWdBRUhzQVVzTkFBSkFRUUFvQW9qUWdJQUFJZ1pCRUNBQVFSTnFRWEJ4SUFCQkMwa2JJZ0pCQTNZaUJIWWlBMEVEY1VVTkFBSkFBa0FnQTBFQmNTQUVja0VCY3lJRlFRTjBJZ1JCc05DQWdBQnFJZ01nQkVHNDBJQ0FBR29vQWdBaUJDZ0NDQ0lDUncwQVFRQWdCa0YrSUFWM2NUWUNpTkNBZ0FBTUFRc2dBeUFDTmdJSUlBSWdBellDREFzZ0JFRUlhaUVESUFRZ0JVRURkQ0lGUVFOeU5nSUVJQVFnQldvaUJDQUVLQUlFUVFGeU5nSUVEQXdMSUFKQkFDZ0NrTkNBZ0FBaUIwME5BUUpBSUFORkRRQUNRQUpBSUFNZ0JIUkJBaUFFZENJRFFRQWdBMnR5Y1NJRFFRQWdBMnR4UVg5cUlnTWdBMEVNZGtFUWNTSURkaUlFUVFWMlFRaHhJZ1VnQTNJZ0JDQUZkaUlEUVFKMlFRUnhJZ1J5SUFNZ0JIWWlBMEVCZGtFQ2NTSUVjaUFESUFSMklnTkJBWFpCQVhFaUJISWdBeUFFZG1vaUJFRURkQ0lEUWJEUWdJQUFhaUlGSUFOQnVOQ0FnQUJxS0FJQUlnTW9BZ2dpQUVjTkFFRUFJQVpCZmlBRWQzRWlCallDaU5DQWdBQU1BUXNnQlNBQU5nSUlJQUFnQlRZQ0RBc2dBeUFDUVFOeU5nSUVJQU1nQkVFRGRDSUVhaUFFSUFKcklnVTJBZ0FnQXlBQ2FpSUFJQVZCQVhJMkFnUUNRQ0FIUlEwQUlBZEJlSEZCc05DQWdBQnFJUUpCQUNnQ25OQ0FnQUFoQkFKQUFrQWdCa0VCSUFkQkEzWjBJZ2h4RFFCQkFDQUdJQWh5TmdLSTBJQ0FBQ0FDSVFnTUFRc2dBaWdDQ0NFSUN5QUlJQVEyQWd3Z0FpQUVOZ0lJSUFRZ0FqWUNEQ0FFSUFnMkFnZ0xJQU5CQ0dvaEEwRUFJQUEyQXB6UWdJQUFRUUFnQlRZQ2tOQ0FnQUFNREF0QkFDZ0NqTkNBZ0FBaUNVVU5BU0FKUVFBZ0NXdHhRWDlxSWdNZ0EwRU1ka0VRY1NJRGRpSUVRUVYyUVFoeElnVWdBM0lnQkNBRmRpSURRUUoyUVFSeElnUnlJQU1nQkhZaUEwRUJka0VDY1NJRWNpQURJQVIySWdOQkFYWkJBWEVpQkhJZ0F5QUVkbXBCQW5SQnVOS0FnQUJxS0FJQUlnQW9BZ1JCZUhFZ0Ftc2hCQ0FBSVFVQ1FBTkFBa0FnQlNnQ0VDSUREUUFnQlVFVWFpZ0NBQ0lEUlEwQ0N5QURLQUlFUVhoeElBSnJJZ1VnQkNBRklBUkpJZ1ViSVFRZ0F5QUFJQVViSVFBZ0F5RUZEQUFMQ3lBQUtBSVlJUW9DUUNBQUtBSU1JZ2dnQUVZTkFDQUFLQUlJSWdOQkFDZ0NtTkNBZ0FCSkdpQUlJQU0yQWdnZ0F5QUlOZ0lNREFzTEFrQWdBRUVVYWlJRktBSUFJZ01OQUNBQUtBSVFJZ05GRFFNZ0FFRVFhaUVGQ3dOQUlBVWhDeUFESWdoQkZHb2lCU2dDQUNJRERRQWdDRUVRYWlFRklBZ29BaEFpQXcwQUN5QUxRUUEyQWdBTUNndEJmeUVDSUFCQnYzOUxEUUFnQUVFVGFpSURRWEJ4SVFKQkFDZ0NqTkNBZ0FBaUIwVU5BRUVBSVFzQ1FDQUNRWUFDU1EwQVFSOGhDeUFDUWYvLy93ZExEUUFnQTBFSWRpSURJQU5CZ1A0L2FrRVFka0VJY1NJRGRDSUVJQVJCZ09BZmFrRVFka0VFY1NJRWRDSUZJQVZCZ0lBUGFrRVFka0VDY1NJRmRFRVBkaUFESUFSeUlBVnlheUlEUVFGMElBSWdBMEVWYW5aQkFYRnlRUnhxSVFzTFFRQWdBbXNoQkFKQUFrQUNRQUpBSUF0QkFuUkJ1TktBZ0FCcUtBSUFJZ1VOQUVFQUlRTkJBQ0VJREFFTFFRQWhBeUFDUVFCQkdTQUxRUUYyYXlBTFFSOUdHM1FoQUVFQUlRZ0RRQUpBSUFVb0FnUkJlSEVnQW1zaUJpQUVUdzBBSUFZaEJDQUZJUWdnQmcwQVFRQWhCQ0FGSVFnZ0JTRUREQU1MSUFNZ0JVRVVhaWdDQUNJR0lBWWdCU0FBUVIxMlFRUnhha0VRYWlnQ0FDSUZSaHNnQXlBR0d5RURJQUJCQVhRaEFDQUZEUUFMQ3dKQUlBTWdDSElOQUVFQUlRaEJBaUFMZENJRFFRQWdBMnR5SUFkeElnTkZEUU1nQTBFQUlBTnJjVUYvYWlJRElBTkJESFpCRUhFaUEzWWlCVUVGZGtFSWNTSUFJQU55SUFVZ0FIWWlBMEVDZGtFRWNTSUZjaUFESUFWMklnTkJBWFpCQW5FaUJYSWdBeUFGZGlJRFFRRjJRUUZ4SWdWeUlBTWdCWFpxUVFKMFFialNnSUFBYWlnQ0FDRURDeUFEUlEwQkN3TkFJQU1vQWdSQmVIRWdBbXNpQmlBRVNTRUFBa0FnQXlnQ0VDSUZEUUFnQTBFVWFpZ0NBQ0VGQ3lBR0lBUWdBQnNoQkNBRElBZ2dBQnNoQ0NBRklRTWdCUTBBQ3dzZ0NFVU5BQ0FFUVFBb0FwRFFnSUFBSUFKclR3MEFJQWdvQWhnaEN3SkFJQWdvQWd3aUFDQUlSZzBBSUFnb0FnZ2lBMEVBS0FLWTBJQ0FBRWthSUFBZ0F6WUNDQ0FESUFBMkFnd01DUXNDUUNBSVFSUnFJZ1VvQWdBaUF3MEFJQWdvQWhBaUEwVU5BeUFJUVJCcUlRVUxBMEFnQlNFR0lBTWlBRUVVYWlJRktBSUFJZ01OQUNBQVFSQnFJUVVnQUNnQ0VDSUREUUFMSUFaQkFEWUNBQXdJQ3dKQVFRQW9BcERRZ0lBQUlnTWdBa2tOQUVFQUtBS2MwSUNBQUNFRUFrQUNRQ0FESUFKcklnVkJFRWtOQUNBRUlBSnFJZ0FnQlVFQmNqWUNCRUVBSUFVMkFwRFFnSUFBUVFBZ0FEWUNuTkNBZ0FBZ0JDQURhaUFGTmdJQUlBUWdBa0VEY2pZQ0JBd0JDeUFFSUFOQkEzSTJBZ1FnQkNBRGFpSURJQU1vQWdSQkFYSTJBZ1JCQUVFQU5nS2MwSUNBQUVFQVFRQTJBcERRZ0lBQUN5QUVRUWhxSVFNTUNnc0NRRUVBS0FLVTBJQ0FBQ0lBSUFKTkRRQkJBQ2dDb05DQWdBQWlBeUFDYWlJRUlBQWdBbXNpQlVFQmNqWUNCRUVBSUFVMkFwVFFnSUFBUVFBZ0JEWUNvTkNBZ0FBZ0F5QUNRUU55TmdJRUlBTkJDR29oQXd3S0N3SkFBa0JCQUNnQzROT0FnQUJGRFFCQkFDZ0M2Tk9BZ0FBaEJBd0JDMEVBUW44M0F1elRnSUFBUVFCQ2dJQ0VnSUNBd0FBM0F1VFRnSUFBUVFBZ0FVRU1ha0Z3Y1VIWXF0V3FCWE0yQXVEVGdJQUFRUUJCQURZQzlOT0FnQUJCQUVFQU5nTEUwNENBQUVHQWdBUWhCQXRCQUNFREFrQWdCQ0FDUWNjQWFpSUhhaUlHUVFBZ0JHc2lDM0VpQ0NBQ1N3MEFRUUJCTURZQytOT0FnQUFNQ2dzQ1FFRUFLQUxBMDRDQUFDSURSUTBBQWtCQkFDZ0N1Tk9BZ0FBaUJDQUlhaUlGSUFSTkRRQWdCU0FEVFEwQkMwRUFJUU5CQUVFd05nTDQwNENBQUF3S0MwRUFMUURFMDRDQUFFRUVjUTBFQWtBQ1FBSkFRUUFvQXFEUWdJQUFJZ1JGRFFCQnlOT0FnQUFoQXdOQUFrQWdBeWdDQUNJRklBUkxEUUFnQlNBREtBSUVhaUFFU3cwREN5QURLQUlJSWdNTkFBc0xRUUFReTRDQWdBQWlBRUYvUmcwRklBZ2hCZ0pBUVFBb0F1VFRnSUFBSWdOQmYyb2lCQ0FBY1VVTkFDQUlJQUJySUFRZ0FHcEJBQ0FEYTNGcUlRWUxJQVlnQWswTkJTQUdRZjcvLy84SFN3MEZBa0JCQUNnQ3dOT0FnQUFpQTBVTkFFRUFLQUs0MDRDQUFDSUVJQVpxSWdVZ0JFME5CaUFGSUFOTERRWUxJQVlReTRDQWdBQWlBeUFBUncwQkRBY0xJQVlnQUdzZ0MzRWlCa0grLy8vL0Iwc05CQ0FHRU11QWdJQUFJZ0FnQXlnQ0FDQURLQUlFYWtZTkF5QUFJUU1MQWtBZ0EwRi9SZzBBSUFKQnlBQnFJQVpORFFBQ1FDQUhJQVpyUVFBb0F1alRnSUFBSWdScVFRQWdCR3R4SWdSQi92Ly8vd2RORFFBZ0F5RUFEQWNMQWtBZ0JCRExnSUNBQUVGL1JnMEFJQVFnQm1vaEJpQURJUUFNQnd0QkFDQUdheERMZ0lDQUFCb01CQXNnQXlFQUlBTkJmMGNOQlF3REMwRUFJUWdNQnd0QkFDRUFEQVVMSUFCQmYwY05BZ3RCQUVFQUtBTEUwNENBQUVFRWNqWUN4Tk9BZ0FBTElBaEIvdi8vL3dkTERRRWdDQkRMZ0lDQUFDRUFRUUFReTRDQWdBQWhBeUFBUVg5R0RRRWdBMEYvUmcwQklBQWdBMDhOQVNBRElBQnJJZ1lnQWtFNGFrME5BUXRCQUVFQUtBSzQwNENBQUNBR2FpSUROZ0s0MDRDQUFBSkFJQU5CQUNnQ3ZOT0FnQUJORFFCQkFDQUROZ0s4MDRDQUFBc0NRQUpBQWtBQ1FFRUFLQUtnMElDQUFDSUVSUTBBUWNqVGdJQUFJUU1EUUNBQUlBTW9BZ0FpQlNBREtBSUVJZ2hxUmcwQ0lBTW9BZ2dpQXcwQURBTUxDd0pBQWtCQkFDZ0NtTkNBZ0FBaUEwVU5BQ0FBSUFOUERRRUxRUUFnQURZQ21OQ0FnQUFMUVFBaEEwRUFJQVkyQXN6VGdJQUFRUUFnQURZQ3lOT0FnQUJCQUVGL05nS28wSUNBQUVFQVFRQW9BdURUZ0lBQU5nS3MwSUNBQUVFQVFRQTJBdFRUZ0lBQUEwQWdBMEhFMElDQUFHb2dBMEc0MElDQUFHb2lCRFlDQUNBRUlBTkJzTkNBZ0FCcUlnVTJBZ0FnQTBHODBJQ0FBR29nQlRZQ0FDQURRY3pRZ0lBQWFpQURRY0RRZ0lBQWFpSUZOZ0lBSUFVZ0JEWUNBQ0FEUWRUUWdJQUFhaUFEUWNqUWdJQUFhaUlFTmdJQUlBUWdCVFlDQUNBRFFkRFFnSUFBYWlBRU5nSUFJQU5CSUdvaUEwR0FBa2NOQUFzZ0FFRjRJQUJyUVE5eFFRQWdBRUVJYWtFUGNSc2lBMm9pQkNBR1FVaHFJZ1VnQTJzaUEwRUJjallDQkVFQVFRQW9BdkRUZ0lBQU5nS2swSUNBQUVFQUlBTTJBcFRRZ0lBQVFRQWdCRFlDb05DQWdBQWdBQ0FGYWtFNE5nSUVEQUlMSUFNdEFBeEJDSEVOQUNBRUlBVkpEUUFnQkNBQVR3MEFJQVJCZUNBRWEwRVBjVUVBSUFSQkNHcEJEM0ViSWdWcUlnQkJBQ2dDbE5DQWdBQWdCbW9pQ3lBRmF5SUZRUUZ5TmdJRUlBTWdDQ0FHYWpZQ0JFRUFRUUFvQXZEVGdJQUFOZ0trMElDQUFFRUFJQVUyQXBUUWdJQUFRUUFnQURZQ29OQ0FnQUFnQkNBTGFrRTROZ0lFREFFTEFrQWdBRUVBS0FLWTBJQ0FBQ0lJVHcwQVFRQWdBRFlDbU5DQWdBQWdBQ0VJQ3lBQUlBWnFJUVZCeU5PQWdBQWhBd0pBQWtBQ1FBSkFBa0FDUUFKQUEwQWdBeWdDQUNBRlJnMEJJQU1vQWdnaUF3MEFEQUlMQ3lBRExRQU1RUWh4UlEwQkMwSEkwNENBQUNFREEwQUNRQ0FES0FJQUlnVWdCRXNOQUNBRklBTW9BZ1JxSWdVZ0JFc05Bd3NnQXlnQ0NDRUREQUFMQ3lBRElBQTJBZ0FnQXlBREtBSUVJQVpxTmdJRUlBQkJlQ0FBYTBFUGNVRUFJQUJCQ0dwQkQzRWJhaUlMSUFKQkEzSTJBZ1FnQlVGNElBVnJRUTl4UVFBZ0JVRUlha0VQY1J0cUlnWWdDeUFDYWlJQ2F5RURBa0FnQmlBRVJ3MEFRUUFnQWpZQ29OQ0FnQUJCQUVFQUtBS1UwSUNBQUNBRGFpSUROZ0tVMElDQUFDQUNJQU5CQVhJMkFnUU1Bd3NDUUNBR1FRQW9BcHpRZ0lBQVJ3MEFRUUFnQWpZQ25OQ0FnQUJCQUVFQUtBS1EwSUNBQUNBRGFpSUROZ0tRMElDQUFDQUNJQU5CQVhJMkFnUWdBaUFEYWlBRE5nSUFEQU1MQWtBZ0JpZ0NCQ0lFUVFOeFFRRkhEUUFnQkVGNGNTRUhBa0FDUUNBRVFmOEJTdzBBSUFZb0FnZ2lCU0FFUVFOMklnaEJBM1JCc05DQWdBQnFJZ0JHR2dKQUlBWW9BZ3dpQkNBRlJ3MEFRUUJCQUNnQ2lOQ0FnQUJCZmlBSWQzRTJBb2pRZ0lBQURBSUxJQVFnQUVZYUlBUWdCVFlDQ0NBRklBUTJBZ3dNQVFzZ0JpZ0NHQ0VKQWtBQ1FDQUdLQUlNSWdBZ0JrWU5BQ0FHS0FJSUlnUWdDRWthSUFBZ0JEWUNDQ0FFSUFBMkFnd01BUXNDUUNBR1FSUnFJZ1FvQWdBaUJRMEFJQVpCRUdvaUJDZ0NBQ0lGRFFCQkFDRUFEQUVMQTBBZ0JDRUlJQVVpQUVFVWFpSUVLQUlBSWdVTkFDQUFRUkJxSVFRZ0FDZ0NFQ0lGRFFBTElBaEJBRFlDQUFzZ0NVVU5BQUpBQWtBZ0JpQUdLQUljSWdWQkFuUkJ1TktBZ0FCcUlnUW9BZ0JIRFFBZ0JDQUFOZ0lBSUFBTkFVRUFRUUFvQW96UWdJQUFRWDRnQlhkeE5nS00wSUNBQUF3Q0N5QUpRUkJCRkNBSktBSVFJQVpHRzJvZ0FEWUNBQ0FBUlEwQkN5QUFJQWsyQWhnQ1FDQUdLQUlRSWdSRkRRQWdBQ0FFTmdJUUlBUWdBRFlDR0FzZ0JpZ0NGQ0lFUlEwQUlBQkJGR29nQkRZQ0FDQUVJQUEyQWhnTElBY2dBMm9oQXlBR0lBZHFJZ1lvQWdRaEJBc2dCaUFFUVg1eE5nSUVJQUlnQTJvZ0F6WUNBQ0FDSUFOQkFYSTJBZ1FDUUNBRFFmOEJTdzBBSUFOQmVIRkJzTkNBZ0FCcUlRUUNRQUpBUVFBb0FvalFnSUFBSWdWQkFTQURRUU4yZENJRGNRMEFRUUFnQlNBRGNqWUNpTkNBZ0FBZ0JDRUREQUVMSUFRb0FnZ2hBd3NnQXlBQ05nSU1JQVFnQWpZQ0NDQUNJQVEyQWd3Z0FpQUROZ0lJREFNTFFSOGhCQUpBSUFOQi8vLy9CMHNOQUNBRFFRaDJJZ1FnQkVHQS9qOXFRUkIyUVFoeElnUjBJZ1VnQlVHQTRCOXFRUkIyUVFSeElnVjBJZ0FnQUVHQWdBOXFRUkIyUVFKeElnQjBRUTkySUFRZ0JYSWdBSEpySWdSQkFYUWdBeUFFUVJWcWRrRUJjWEpCSEdvaEJBc2dBaUFFTmdJY0lBSkNBRGNDRUNBRVFRSjBRYmpTZ0lBQWFpRUZBa0JCQUNnQ2pOQ0FnQUFpQUVFQklBUjBJZ2h4RFFBZ0JTQUNOZ0lBUVFBZ0FDQUljallDak5DQWdBQWdBaUFGTmdJWUlBSWdBallDQ0NBQ0lBSTJBZ3dNQXdzZ0EwRUFRUmtnQkVFQmRtc2dCRUVmUmh0MElRUWdCU2dDQUNFQUEwQWdBQ0lGS0FJRVFYaHhJQU5HRFFJZ0JFRWRkaUVBSUFSQkFYUWhCQ0FGSUFCQkJIRnFRUkJxSWdnb0FnQWlBQTBBQ3lBSUlBSTJBZ0FnQWlBRk5nSVlJQUlnQWpZQ0RDQUNJQUkyQWdnTUFnc2dBRUY0SUFCclFROXhRUUFnQUVFSWFrRVBjUnNpQTJvaUN5QUdRVWhxSWdnZ0Eyc2lBMEVCY2pZQ0JDQUFJQWhxUVRnMkFnUWdCQ0FGUVRjZ0JXdEJEM0ZCQUNBRlFVbHFRUTl4RzJwQlFXb2lDQ0FJSUFSQkVHcEpHeUlJUVNNMkFnUkJBRUVBS0FMdzA0Q0FBRFlDcE5DQWdBQkJBQ0FETmdLVTBJQ0FBRUVBSUFzMkFxRFFnSUFBSUFoQkVHcEJBQ2tDME5PQWdBQTNBZ0FnQ0VFQUtRTEkwNENBQURjQ0NFRUFJQWhCQ0dvMkF0RFRnSUFBUVFBZ0JqWUN6Tk9BZ0FCQkFDQUFOZ0xJMDRDQUFFRUFRUUEyQXRUVGdJQUFJQWhCSkdvaEF3TkFJQU5CQnpZQ0FDQURRUVJxSWdNZ0JVa05BQXNnQ0NBRVJnMERJQWdnQ0NnQ0JFRitjVFlDQkNBSUlBZ2dCR3NpQURZQ0FDQUVJQUJCQVhJMkFnUUNRQ0FBUWY4QlN3MEFJQUJCZUhGQnNOQ0FnQUJxSVFNQ1FBSkFRUUFvQW9qUWdJQUFJZ1ZCQVNBQVFRTjJkQ0lBY1EwQVFRQWdCU0FBY2pZQ2lOQ0FnQUFnQXlFRkRBRUxJQU1vQWdnaEJRc2dCU0FFTmdJTUlBTWdCRFlDQ0NBRUlBTTJBZ3dnQkNBRk5nSUlEQVFMUVI4aEF3SkFJQUJCLy8vL0Iwc05BQ0FBUVFoMklnTWdBMEdBL2o5cVFSQjJRUWh4SWdOMElnVWdCVUdBNEI5cVFSQjJRUVJ4SWdWMElnZ2dDRUdBZ0E5cVFSQjJRUUp4SWdoMFFROTJJQU1nQlhJZ0NISnJJZ05CQVhRZ0FDQURRUlZxZGtFQmNYSkJIR29oQXdzZ0JDQUROZ0ljSUFSQ0FEY0NFQ0FEUVFKMFFialNnSUFBYWlFRkFrQkJBQ2dDak5DQWdBQWlDRUVCSUFOMElnWnhEUUFnQlNBRU5nSUFRUUFnQ0NBR2NqWUNqTkNBZ0FBZ0JDQUZOZ0lZSUFRZ0JEWUNDQ0FFSUFRMkFnd01CQXNnQUVFQVFSa2dBMEVCZG1zZ0EwRWZSaHQwSVFNZ0JTZ0NBQ0VJQTBBZ0NDSUZLQUlFUVhoeElBQkdEUU1nQTBFZGRpRUlJQU5CQVhRaEF5QUZJQWhCQkhGcVFSQnFJZ1lvQWdBaUNBMEFDeUFHSUFRMkFnQWdCQ0FGTmdJWUlBUWdCRFlDRENBRUlBUTJBZ2dNQXdzZ0JTZ0NDQ0lESUFJMkFnd2dCU0FDTmdJSUlBSkJBRFlDR0NBQ0lBVTJBZ3dnQWlBRE5nSUlDeUFMUVFocUlRTU1CUXNnQlNnQ0NDSURJQVEyQWd3Z0JTQUVOZ0lJSUFSQkFEWUNHQ0FFSUFVMkFnd2dCQ0FETmdJSUMwRUFLQUtVMElDQUFDSURJQUpORFFCQkFDZ0NvTkNBZ0FBaUJDQUNhaUlGSUFNZ0Ftc2lBMEVCY2pZQ0JFRUFJQU0yQXBUUWdJQUFRUUFnQlRZQ29OQ0FnQUFnQkNBQ1FRTnlOZ0lFSUFSQkNHb2hBd3dEQzBFQUlRTkJBRUV3TmdMNDA0Q0FBQXdDQ3dKQUlBdEZEUUFDUUFKQUlBZ2dDQ2dDSENJRlFRSjBRYmpTZ0lBQWFpSURLQUlBUncwQUlBTWdBRFlDQUNBQURRRkJBQ0FIUVg0Z0JYZHhJZ2MyQW96UWdJQUFEQUlMSUF0QkVFRVVJQXNvQWhBZ0NFWWJhaUFBTmdJQUlBQkZEUUVMSUFBZ0N6WUNHQUpBSUFnb0FoQWlBMFVOQUNBQUlBTTJBaEFnQXlBQU5nSVlDeUFJUVJScUtBSUFJZ05GRFFBZ0FFRVVhaUFETmdJQUlBTWdBRFlDR0FzQ1FBSkFJQVJCRDBzTkFDQUlJQVFnQW1vaUEwRURjallDQkNBSUlBTnFJZ01nQXlnQ0JFRUJjallDQkF3QkN5QUlJQUpxSWdBZ0JFRUJjallDQkNBSUlBSkJBM0kyQWdRZ0FDQUVhaUFFTmdJQUFrQWdCRUgvQVVzTkFDQUVRWGh4UWJEUWdJQUFhaUVEQWtBQ1FFRUFLQUtJMElDQUFDSUZRUUVnQkVFRGRuUWlCSEVOQUVFQUlBVWdCSEkyQW9qUWdJQUFJQU1oQkF3QkN5QURLQUlJSVFRTElBUWdBRFlDRENBRElBQTJBZ2dnQUNBRE5nSU1JQUFnQkRZQ0NBd0JDMEVmSVFNQ1FDQUVRZi8vL3dkTERRQWdCRUVJZGlJRElBTkJnUDQvYWtFUWRrRUljU0lEZENJRklBVkJnT0FmYWtFUWRrRUVjU0lGZENJQ0lBSkJnSUFQYWtFUWRrRUNjU0lDZEVFUGRpQURJQVZ5SUFKeWF5SURRUUYwSUFRZ0EwRVZhblpCQVhGeVFSeHFJUU1MSUFBZ0F6WUNIQ0FBUWdBM0FoQWdBMEVDZEVHNDBvQ0FBR29oQlFKQUlBZEJBU0FEZENJQ2NRMEFJQVVnQURZQ0FFRUFJQWNnQW5JMkFvelFnSUFBSUFBZ0JUWUNHQ0FBSUFBMkFnZ2dBQ0FBTmdJTURBRUxJQVJCQUVFWklBTkJBWFpySUFOQkgwWWJkQ0VESUFVb0FnQWhBZ0pBQTBBZ0FpSUZLQUlFUVhoeElBUkdEUUVnQTBFZGRpRUNJQU5CQVhRaEF5QUZJQUpCQkhGcVFSQnFJZ1lvQWdBaUFnMEFDeUFHSUFBMkFnQWdBQ0FGTmdJWUlBQWdBRFlDRENBQUlBQTJBZ2dNQVFzZ0JTZ0NDQ0lESUFBMkFnd2dCU0FBTmdJSUlBQkJBRFlDR0NBQUlBVTJBZ3dnQUNBRE5nSUlDeUFJUVFocUlRTU1BUXNDUUNBS1JRMEFBa0FDUUNBQUlBQW9BaHdpQlVFQ2RFRzQwb0NBQUdvaUF5Z0NBRWNOQUNBRElBZzJBZ0FnQ0EwQlFRQWdDVUYrSUFWM2NUWUNqTkNBZ0FBTUFnc2dDa0VRUVJRZ0NpZ0NFQ0FBUmh0cUlBZzJBZ0FnQ0VVTkFRc2dDQ0FLTmdJWUFrQWdBQ2dDRUNJRFJRMEFJQWdnQXpZQ0VDQURJQWcyQWhnTElBQkJGR29vQWdBaUEwVU5BQ0FJUVJScUlBTTJBZ0FnQXlBSU5nSVlDd0pBQWtBZ0JFRVBTdzBBSUFBZ0JDQUNhaUlEUVFOeU5nSUVJQUFnQTJvaUF5QURLQUlFUVFGeU5nSUVEQUVMSUFBZ0Ftb2lCU0FFUVFGeU5nSUVJQUFnQWtFRGNqWUNCQ0FGSUFScUlBUTJBZ0FDUUNBSFJRMEFJQWRCZUhGQnNOQ0FnQUJxSVFKQkFDZ0NuTkNBZ0FBaEF3SkFBa0JCQVNBSFFRTjJkQ0lJSUFaeERRQkJBQ0FJSUFaeU5nS0kwSUNBQUNBQ0lRZ01BUXNnQWlnQ0NDRUlDeUFJSUFNMkFnd2dBaUFETmdJSUlBTWdBallDRENBRElBZzJBZ2dMUVFBZ0JUWUNuTkNBZ0FCQkFDQUVOZ0tRMElDQUFBc2dBRUVJYWlFREN5QUJRUkJxSklDQWdJQUFJQU1MQ2dBZ0FCREpnSUNBQUF2aURRRUhmd0pBSUFCRkRRQWdBRUY0YWlJQklBQkJmR29vQWdBaUFrRjRjU0lBYWlFREFrQWdBa0VCY1EwQUlBSkJBM0ZGRFFFZ0FTQUJLQUlBSWdKcklnRkJBQ2dDbU5DQWdBQWlCRWtOQVNBQ0lBQnFJUUFDUUNBQlFRQW9BcHpRZ0lBQVJnMEFBa0FnQWtIL0FVc05BQ0FCS0FJSUlnUWdBa0VEZGlJRlFRTjBRYkRRZ0lBQWFpSUdSaG9DUUNBQktBSU1JZ0lnQkVjTkFFRUFRUUFvQW9qUWdJQUFRWDRnQlhkeE5nS0kwSUNBQUF3REN5QUNJQVpHR2lBQ0lBUTJBZ2dnQkNBQ05nSU1EQUlMSUFFb0FoZ2hCd0pBQWtBZ0FTZ0NEQ0lHSUFGR0RRQWdBU2dDQ0NJQ0lBUkpHaUFHSUFJMkFnZ2dBaUFHTmdJTURBRUxBa0FnQVVFVWFpSUNLQUlBSWdRTkFDQUJRUkJxSWdJb0FnQWlCQTBBUVFBaEJnd0JDd05BSUFJaEJTQUVJZ1pCRkdvaUFpZ0NBQ0lFRFFBZ0JrRVFhaUVDSUFZb0FoQWlCQTBBQ3lBRlFRQTJBZ0FMSUFkRkRRRUNRQUpBSUFFZ0FTZ0NIQ0lFUVFKMFFialNnSUFBYWlJQ0tBSUFSdzBBSUFJZ0JqWUNBQ0FHRFFGQkFFRUFLQUtNMElDQUFFRitJQVIzY1RZQ2pOQ0FnQUFNQXdzZ0IwRVFRUlFnQnlnQ0VDQUJSaHRxSUFZMkFnQWdCa1VOQWdzZ0JpQUhOZ0lZQWtBZ0FTZ0NFQ0lDUlEwQUlBWWdBallDRUNBQ0lBWTJBaGdMSUFFb0FoUWlBa1VOQVNBR1FSUnFJQUkyQWdBZ0FpQUdOZ0lZREFFTElBTW9BZ1FpQWtFRGNVRURSdzBBSUFNZ0FrRitjVFlDQkVFQUlBQTJBcERRZ0lBQUlBRWdBR29nQURZQ0FDQUJJQUJCQVhJMkFnUVBDeUFCSUFOUERRQWdBeWdDQkNJQ1FRRnhSUTBBQWtBQ1FDQUNRUUp4RFFBQ1FDQURRUUFvQXFEUWdJQUFSdzBBUVFBZ0FUWUNvTkNBZ0FCQkFFRUFLQUtVMElDQUFDQUFhaUlBTmdLVTBJQ0FBQ0FCSUFCQkFYSTJBZ1FnQVVFQUtBS2MwSUNBQUVjTkEwRUFRUUEyQXBEUWdJQUFRUUJCQURZQ25OQ0FnQUFQQ3dKQUlBTkJBQ2dDbk5DQWdBQkhEUUJCQUNBQk5nS2MwSUNBQUVFQVFRQW9BcERRZ0lBQUlBQnFJZ0EyQXBEUWdJQUFJQUVnQUVFQmNqWUNCQ0FCSUFCcUlBQTJBZ0FQQ3lBQ1FYaHhJQUJxSVFBQ1FBSkFJQUpCL3dGTERRQWdBeWdDQ0NJRUlBSkJBM1lpQlVFRGRFR3cwSUNBQUdvaUJrWWFBa0FnQXlnQ0RDSUNJQVJIRFFCQkFFRUFLQUtJMElDQUFFRitJQVYzY1RZQ2lOQ0FnQUFNQWdzZ0FpQUdSaG9nQWlBRU5nSUlJQVFnQWpZQ0RBd0JDeUFES0FJWUlRY0NRQUpBSUFNb0Fnd2lCaUFEUmcwQUlBTW9BZ2dpQWtFQUtBS1kwSUNBQUVrYUlBWWdBallDQ0NBQ0lBWTJBZ3dNQVFzQ1FDQURRUlJxSWdJb0FnQWlCQTBBSUFOQkVHb2lBaWdDQUNJRURRQkJBQ0VHREFFTEEwQWdBaUVGSUFRaUJrRVVhaUlDS0FJQUlnUU5BQ0FHUVJCcUlRSWdCaWdDRUNJRURRQUxJQVZCQURZQ0FBc2dCMFVOQUFKQUFrQWdBeUFES0FJY0lnUkJBblJCdU5LQWdBQnFJZ0lvQWdCSERRQWdBaUFHTmdJQUlBWU5BVUVBUVFBb0FvelFnSUFBUVg0Z0JIZHhOZ0tNMElDQUFBd0NDeUFIUVJCQkZDQUhLQUlRSUFOR0cyb2dCallDQUNBR1JRMEJDeUFHSUFjMkFoZ0NRQ0FES0FJUUlnSkZEUUFnQmlBQ05nSVFJQUlnQmpZQ0dBc2dBeWdDRkNJQ1JRMEFJQVpCRkdvZ0FqWUNBQ0FDSUFZMkFoZ0xJQUVnQUdvZ0FEWUNBQ0FCSUFCQkFYSTJBZ1FnQVVFQUtBS2MwSUNBQUVjTkFVRUFJQUEyQXBEUWdJQUFEd3NnQXlBQ1FYNXhOZ0lFSUFFZ0FHb2dBRFlDQUNBQklBQkJBWEkyQWdRTEFrQWdBRUgvQVVzTkFDQUFRWGh4UWJEUWdJQUFhaUVDQWtBQ1FFRUFLQUtJMElDQUFDSUVRUUVnQUVFRGRuUWlBSEVOQUVFQUlBUWdBSEkyQW9qUWdJQUFJQUloQUF3QkN5QUNLQUlJSVFBTElBQWdBVFlDRENBQ0lBRTJBZ2dnQVNBQ05nSU1JQUVnQURZQ0NBOExRUjhoQWdKQUlBQkIvLy8vQjBzTkFDQUFRUWgySWdJZ0FrR0EvajlxUVJCMlFRaHhJZ0owSWdRZ0JFR0E0QjlxUVJCMlFRUnhJZ1IwSWdZZ0JrR0FnQTlxUVJCMlFRSnhJZ1owUVE5MklBSWdCSElnQm5KcklnSkJBWFFnQUNBQ1FSVnFka0VCY1hKQkhHb2hBZ3NnQVNBQ05nSWNJQUZDQURjQ0VDQUNRUUowUWJqU2dJQUFhaUVFQWtBQ1FFRUFLQUtNMElDQUFDSUdRUUVnQW5RaUEzRU5BQ0FFSUFFMkFnQkJBQ0FHSUFOeU5nS00wSUNBQUNBQklBUTJBaGdnQVNBQk5nSUlJQUVnQVRZQ0RBd0JDeUFBUVFCQkdTQUNRUUYyYXlBQ1FSOUdHM1FoQWlBRUtBSUFJUVlDUUFOQUlBWWlCQ2dDQkVGNGNTQUFSZzBCSUFKQkhYWWhCaUFDUVFGMElRSWdCQ0FHUVFSeGFrRVFhaUlES0FJQUlnWU5BQXNnQXlBQk5nSUFJQUVnQkRZQ0dDQUJJQUUyQWd3Z0FTQUJOZ0lJREFFTElBUW9BZ2dpQUNBQk5nSU1JQVFnQVRZQ0NDQUJRUUEyQWhnZ0FTQUVOZ0lNSUFFZ0FEWUNDQXRCQUVFQUtBS28wSUNBQUVGL2FpSUJRWDhnQVJzMkFxalFnSUFBQ3dzRUFBQUFDMDRBQWtBZ0FBMEFQd0JCRUhRUEN3SkFJQUJCLy84RGNRMEFJQUJCZjB3TkFBSkFJQUJCRUhaQUFDSUFRWDlIRFFCQkFFRXdOZ0w0MDRDQUFFRi9Ed3NnQUVFUWRBOExFTXFBZ0lBQUFBdnlBZ0lEZndGK0FrQWdBa1VOQUNBQUlBRTZBQUFnQWlBQWFpSURRWDlxSUFFNkFBQWdBa0VEU1EwQUlBQWdBVG9BQWlBQUlBRTZBQUVnQTBGOWFpQUJPZ0FBSUFOQmZtb2dBVG9BQUNBQ1FRZEpEUUFnQUNBQk9nQURJQU5CZkdvZ0FUb0FBQ0FDUVFsSkRRQWdBRUVBSUFCclFRTnhJZ1JxSWdNZ0FVSC9BWEZCZ1lLRUNHd2lBVFlDQUNBRElBSWdCR3RCZkhFaUJHb2lBa0Y4YWlBQk5nSUFJQVJCQ1VrTkFDQURJQUUyQWdnZ0F5QUJOZ0lFSUFKQmVHb2dBVFlDQUNBQ1FYUnFJQUUyQWdBZ0JFRVpTUTBBSUFNZ0FUWUNHQ0FESUFFMkFoUWdBeUFCTmdJUUlBTWdBVFlDRENBQ1FYQnFJQUUyQWdBZ0FrRnNhaUFCTmdJQUlBSkJhR29nQVRZQ0FDQUNRV1JxSUFFMkFnQWdCQ0FEUVFSeFFSaHlJZ1ZySWdKQklFa05BQ0FCclVLQmdJQ0FFSDRoQmlBRElBVnFJUUVEUUNBQklBWTNBeGdnQVNBR053TVFJQUVnQmpjRENDQUJJQVkzQXdBZ0FVRWdhaUVCSUFKQllHb2lBa0VmU3cwQUN3c2dBQXNMamtnQkFFR0FDQXVHU0FFQUFBQUNBQUFBQXdBQUFBQUFBQUFBQUFBQUJBQUFBQVVBQUFBQUFBQUFBQUFBQUFZQUFBQUhBQUFBQ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVNXNTJZV3hwWkNCamFHRnlJR2x1SUhWeWJDQnhkV1Z5ZVFCVGNHRnVJR05oYkd4aVlXTnJJR1Z5Y205eUlHbHVJRzl1WDJKdlpIa0FRMjl1ZEdWdWRDMU1aVzVuZEdnZ2IzWmxjbVpzYjNjQVEyaDFibXNnYzJsNlpTQnZkbVZ5Wm14dmR3QlNaWE53YjI1elpTQnZkbVZ5Wm14dmR3QkpiblpoYkdsa0lHMWxkR2h2WkNCbWIzSWdTRlJVVUM5NExuZ2djbVZ4ZFdWemRBQkpiblpoYkdsa0lHMWxkR2h2WkNCbWIzSWdVbFJUVUM5NExuZ2djbVZ4ZFdWemRBQkZlSEJsWTNSbFpDQlRUMVZTUTBVZ2JXVjBhRzlrSUdadmNpQkpRMFV2ZUM1NElISmxjWFZsYzNRQVNXNTJZV3hwWkNCamFHRnlJR2x1SUhWeWJDQm1jbUZuYldWdWRDQnpkR0Z5ZEFCRmVIQmxZM1JsWkNCa2IzUUFVM0JoYmlCallXeHNZbUZqYXlCbGNuSnZjaUJwYmlCdmJsOXpkR0YwZFhNQVNXNTJZV3hwWkNCeVpYTndiMjV6WlNCemRHRjBkWE1BU1c1MllXeHBaQ0JqYUdGeVlXTjBaWElnYVc0Z1kyaDFibXNnWlhoMFpXNXphVzl1Y3dCVmMyVnlJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDl5WlhObGRHQWdZMkZzYkdKaFkyc2daWEp5YjNJQVlHOXVYMk5vZFc1clgyaGxZV1JsY21BZ1kyRnNiR0poWTJzZ1pYSnliM0lBWUc5dVgyMWxjM05oWjJWZlltVm5hVzVnSUdOaGJHeGlZV05ySUdWeWNtOXlBR0J2Ymw5amFIVnVhMTlsZUhSbGJuTnBiMjVmZG1Gc2RXVmdJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDl6ZEdGMGRYTmZZMjl0Y0d4bGRHVmdJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDkyWlhKemFXOXVYMk52YlhCc1pYUmxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmZFhKc1gyTnZiWEJzWlhSbFlDQmpZV3hzWW1GamF5Qmxjbkp2Y2dCZ2IyNWZZMmgxYm10ZlkyOXRjR3hsZEdWZ0lHTmhiR3hpWVdOcklHVnljbTl5QUdCdmJsOW9aV0ZrWlhKZmRtRnNkV1ZmWTI5dGNHeGxkR1ZnSUdOaGJHeGlZV05ySUdWeWNtOXlBR0J2Ymw5dFpYTnpZV2RsWDJOdmJYQnNaWFJsWUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZmJXVjBhRzlrWDJOdmJYQnNaWFJsWUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZmFHVmhaR1Z5WDJacFpXeGtYMk52YlhCc1pYUmxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmWTJoMWJtdGZaWGgwWlc1emFXOXVYMjVoYldWZ0lHTmhiR3hpWVdOcklHVnljbTl5QUZWdVpYaHdaV04wWldRZ1kyaGhjaUJwYmlCMWNtd2djMlZ5ZG1WeUFFbHVkbUZzYVdRZ2FHVmhaR1Z5SUhaaGJIVmxJR05vWVhJQVNXNTJZV3hwWkNCb1pXRmtaWElnWm1sbGJHUWdZMmhoY2dCVGNHRnVJR05oYkd4aVlXTnJJR1Z5Y205eUlHbHVJRzl1WDNabGNuTnBiMjRBU1c1MllXeHBaQ0J0YVc1dmNpQjJaWEp6YVc5dUFFbHVkbUZzYVdRZ2JXRnFiM0lnZG1WeWMybHZiZ0JGZUhCbFkzUmxaQ0J6Y0dGalpTQmhablJsY2lCMlpYSnphVzl1QUVWNGNHVmpkR1ZrSUVOU1RFWWdZV1owWlhJZ2RtVnljMmx2YmdCSmJuWmhiR2xrSUVoVVZGQWdkbVZ5YzJsdmJnQkpiblpoYkdsa0lHaGxZV1JsY2lCMGIydGxiZ0JUY0dGdUlHTmhiR3hpWVdOcklHVnljbTl5SUdsdUlHOXVYM1Z5YkFCSmJuWmhiR2xrSUdOb1lYSmhZM1JsY25NZ2FXNGdkWEpzQUZWdVpYaHdaV04wWldRZ2MzUmhjblFnWTJoaGNpQnBiaUIxY213QVJHOTFZbXhsSUVBZ2FXNGdkWEpzQUVWdGNIUjVJRU52Ym5SbGJuUXRUR1Z1WjNSb0FFbHVkbUZzYVdRZ1kyaGhjbUZqZEdWeUlHbHVJRU52Ym5SbGJuUXRUR1Z1WjNSb0FFUjFjR3hwWTJGMFpTQkRiMjUwWlc1MExVeGxibWQwYUFCSmJuWmhiR2xrSUdOb1lYSWdhVzRnZFhKc0lIQmhkR2dBUTI5dWRHVnVkQzFNWlc1bmRHZ2dZMkZ1SjNRZ1ltVWdjSEpsYzJWdWRDQjNhWFJvSUZSeVlXNXpabVZ5TFVWdVkyOWthVzVuQUVsdWRtRnNhV1FnWTJoaGNtRmpkR1Z5SUdsdUlHTm9kVzVySUhOcGVtVUFVM0JoYmlCallXeHNZbUZqYXlCbGNuSnZjaUJwYmlCdmJsOW9aV0ZrWlhKZmRtRnNkV1VBVTNCaGJpQmpZV3hzWW1GamF5Qmxjbkp2Y2lCcGJpQnZibDlqYUhWdWExOWxlSFJsYm5OcGIyNWZkbUZzZFdVQVNXNTJZV3hwWkNCamFHRnlZV04wWlhJZ2FXNGdZMmgxYm1zZ1pYaDBaVzV6YVc5dWN5QjJZV3gxWlFCTmFYTnphVzVuSUdWNGNHVmpkR1ZrSUV4R0lHRm1kR1Z5SUdobFlXUmxjaUIyWVd4MVpRQkpiblpoYkdsa0lHQlVjbUZ1YzJabGNpMUZibU52WkdsdVoyQWdhR1ZoWkdWeUlIWmhiSFZsQUVsdWRtRnNhV1FnWTJoaGNtRmpkR1Z5SUdsdUlHTm9kVzVySUdWNGRHVnVjMmx2Ym5NZ2NYVnZkR1VnZG1Gc2RXVUFTVzUyWVd4cFpDQmphR0Z5WVdOMFpYSWdhVzRnWTJoMWJtc2daWGgwWlc1emFXOXVjeUJ4ZFc5MFpXUWdkbUZzZFdVQVVHRjFjMlZrSUdKNUlHOXVYMmhsWVdSbGNuTmZZMjl0Y0d4bGRHVUFTVzUyWVd4cFpDQkZUMFlnYzNSaGRHVUFiMjVmY21WelpYUWdjR0YxYzJVQWIyNWZZMmgxYm10ZmFHVmhaR1Z5SUhCaGRYTmxBRzl1WDIxbGMzTmhaMlZmWW1WbmFXNGdjR0YxYzJVQWIyNWZZMmgxYm10ZlpYaDBaVzV6YVc5dVgzWmhiSFZsSUhCaGRYTmxBRzl1WDNOMFlYUjFjMTlqYjIxd2JHVjBaU0J3WVhWelpRQnZibDkyWlhKemFXOXVYMk52YlhCc1pYUmxJSEJoZFhObEFHOXVYM1Z5YkY5amIyMXdiR1YwWlNCd1lYVnpaUUJ2Ymw5amFIVnVhMTlqYjIxd2JHVjBaU0J3WVhWelpRQnZibDlvWldGa1pYSmZkbUZzZFdWZlkyOXRjR3hsZEdVZ2NHRjFjMlVBYjI1ZmJXVnpjMkZuWlY5amIyMXdiR1YwWlNCd1lYVnpaUUJ2Ymw5dFpYUm9iMlJmWTI5dGNHeGxkR1VnY0dGMWMyVUFiMjVmYUdWaFpHVnlYMlpwWld4a1gyTnZiWEJzWlhSbElIQmhkWE5sQUc5dVgyTm9kVzVyWDJWNGRHVnVjMmx2Ymw5dVlXMWxJSEJoZFhObEFGVnVaWGh3WldOMFpXUWdjM0JoWTJVZ1lXWjBaWElnYzNSaGNuUWdiR2x1WlFCVGNHRnVJR05oYkd4aVlXTnJJR1Z5Y205eUlHbHVJRzl1WDJOb2RXNXJYMlY0ZEdWdWMybHZibDl1WVcxbEFFbHVkbUZzYVdRZ1kyaGhjbUZqZEdWeUlHbHVJR05vZFc1cklHVjRkR1Z1YzJsdmJuTWdibUZ0WlFCUVlYVnpaU0J2YmlCRFQwNU9SVU5VTDFWd1ozSmhaR1VBVUdGMWMyVWdiMjRnVUZKSkwxVndaM0poWkdVQVJYaHdaV04wWldRZ1NGUlVVQzh5SUVOdmJtNWxZM1JwYjI0Z1VISmxabUZqWlFCVGNHRnVJR05oYkd4aVlXTnJJR1Z5Y205eUlHbHVJRzl1WDIxbGRHaHZaQUJGZUhCbFkzUmxaQ0J6Y0dGalpTQmhablJsY2lCdFpYUm9iMlFBVTNCaGJpQmpZV3hzWW1GamF5Qmxjbkp2Y2lCcGJpQnZibDlvWldGa1pYSmZabWxsYkdRQVVHRjFjMlZrQUVsdWRtRnNhV1FnZDI5eVpDQmxibU52ZFc1MFpYSmxaQUJKYm5aaGJHbGtJRzFsZEdodlpDQmxibU52ZFc1MFpYSmxaQUJWYm1WNGNHVmpkR1ZrSUdOb1lYSWdhVzRnZFhKc0lITmphR1Z0WVFCU1pYRjFaWE4wSUdoaGN5QnBiblpoYkdsa0lHQlVjbUZ1YzJabGNpMUZibU52WkdsdVoyQUFVMWRKVkVOSVgxQlNUMWhaQUZWVFJWOVFVazlZV1FCTlMwRkRWRWxXU1ZSWkFGVk9VRkpQUTBWVFUwRkNURVZmUlU1VVNWUlpBRU5QVUZrQVRVOVdSVVJmVUVWU1RVRk9SVTVVVEZrQVZFOVBYMFZCVWt4WkFFNVBWRWxHV1FCR1FVbE1SVVJmUkVWUVJVNUVSVTVEV1FCQ1FVUmZSMEZVUlZkQldRQlFURUZaQUZCVlZBQkRTRVZEUzA5VlZBQkhRVlJGVjBGWlgxUkpUVVZQVlZRQVVrVlJWVVZUVkY5VVNVMUZUMVZVQUU1RlZGZFBVa3RmUTA5T1RrVkRWRjlVU1UxRlQxVlVBRU5QVGs1RlExUkpUMDVmVkVsTlJVOVZWQUJNVDBkSlRsOVVTVTFGVDFWVUFFNUZWRmRQVWt0ZlVrVkJSRjlVU1UxRlQxVlVBRkJQVTFRQVRVbFRSRWxTUlVOVVJVUmZVa1ZSVlVWVFZBQkRURWxGVGxSZlEweFBVMFZFWDFKRlVWVkZVMVFBUTB4SlJVNVVYME5NVDFORlJGOU1UMEZFWDBKQlRFRk9RMFZFWDFKRlVWVkZVMVFBUWtGRVgxSkZVVlZGVTFRQVNGUlVVRjlTUlZGVlJWTlVYMU5GVGxSZlZFOWZTRlJVVUZOZlVFOVNWQUJTUlZCUFVsUUFTVTFmUVY5VVJVRlFUMVFBVWtWVFJWUmZRMDlPVkVWT1ZBQk9UMTlEVDA1VVJVNVVBRkJCVWxSSlFVeGZRMDlPVkVWT1ZBQklVRVZmU1U1V1FVeEpSRjlEVDA1VFZFRk9WQUJJVUVWZlEwSmZVa1ZUUlZRQVIwVlVBRWhRUlY5VFZGSkpRMVFBUTA5T1JreEpRMVFBVkVWTlVFOVNRVkpaWDFKRlJFbFNSVU5VQUZCRlVrMUJUa1ZPVkY5U1JVUkpVa1ZEVkFCRFQwNU9SVU5VQUUxVlRGUkpYMU5VUVZSVlV3QklVRVZmU1U1V1FVeEpSRjlUVkVGVVZWTUFWRTlQWDAxQlRsbGZVa1ZSVlVWVFZGTUFSVUZTVEZsZlNFbE9WRk1BVlU1QlZrRkpURUZDVEVWZlJrOVNYMHhGUjBGTVgxSkZRVk5QVGxNQVQxQlVTVTlPVXdCVFYwbFVRMGhKVGtkZlVGSlBWRTlEVDB4VEFGWkJVa2xCVGxSZlFVeFRUMTlPUlVkUFZFbEJWRVZUQUUxVlRGUkpVRXhGWDBOSVQwbERSVk1BU1U1VVJWSk9RVXhmVTBWU1ZrVlNYMFZTVWs5U0FGZEZRbDlUUlZKV1JWSmZWVTVMVGs5WFRsOUZVbEpQVWdCU1FVbE1SMVZPWDBWU1VrOVNBRWxFUlU1VVNWUlpYMUJTVDFaSlJFVlNYMEZWVkVoRlRsUkpRMEZVU1U5T1gwVlNVazlTQUZOVFRGOURSVkpVU1VaSlEwRlVSVjlGVWxKUFVnQkpUbFpCVEVsRVgxaGZSazlTVjBGU1JFVkVYMFpQVWdCVFJWUmZVRUZTUVUxRlZFVlNBRWRGVkY5UVFWSkJUVVZVUlZJQVNGQkZYMVZUUlZJQVUwVkZYMDlVU0VWU0FFaFFSVjlEUWw5RFNGVk9TMTlJUlVGRVJWSUFUVXREUVV4RlRrUkJVZ0JUUlZSVlVBQlhSVUpmVTBWU1ZrVlNYMGxUWDBSUFYwNEFWRVZCVWtSUFYwNEFTRkJGWDBOTVQxTkZSRjlEVDA1T1JVTlVTVTlPQUVoRlZWSkpVMVJKUTE5RldGQkpVa0ZVU1U5T0FFUkpVME5QVGs1RlExUkZSRjlQVUVWU1FWUkpUMDRBVGs5T1gwRlZWRWhQVWtsVVFWUkpWa1ZmU1U1R1QxSk5RVlJKVDA0QVNGQkZYMGxPVmtGTVNVUmZWa1ZTVTBsUFRnQklVRVZmUTBKZlRVVlRVMEZIUlY5Q1JVZEpUZ0JUU1ZSRlgwbFRYMFpTVDFwRlRnQklVRVZmU1U1V1FVeEpSRjlJUlVGRVJWSmZWRTlMUlU0QVNVNVdRVXhKUkY5VVQwdEZUZ0JHVDFKQ1NVUkVSVTRBUlU1SVFVNURSVjlaVDFWU1gwTkJURTBBU0ZCRlgwbE9Wa0ZNU1VSZlZWSk1BRUpNVDBOTFJVUmZRbGxmVUVGU1JVNVVRVXhmUTA5T1ZGSlBUQUJOUzBOUFRBQkJRMHdBU0ZCRlgwbE9WRVZTVGtGTUFGSkZVVlZGVTFSZlNFVkJSRVZTWDBaSlJVeEVVMTlVVDA5ZlRFRlNSMFZmVlU1UFJrWkpRMGxCVEFCSVVFVmZUMHNBVlU1TVNVNUxBRlZPVEU5RFN3QlFVa2tBVWtWVVVsbGZWMGxVU0FCSVVFVmZTVTVXUVV4SlJGOURUMDVVUlU1VVgweEZUa2RVU0FCSVVFVmZWVTVGV0ZCRlExUkZSRjlEVDA1VVJVNVVYMHhGVGtkVVNBQkdURlZUU0FCUVVrOVFVRUZVUTBnQVRTMVRSVUZTUTBnQVZWSkpYMVJQVDE5TVQwNUhBRkJTVDBORlUxTkpUa2NBVFVsVFEwVk1URUZPUlU5VlUxOVFSVkpUU1ZOVVJVNVVYMWRCVWs1SlRrY0FUVWxUUTBWTVRFRk9SVTlWVTE5WFFWSk9TVTVIQUVoUVJWOUpUbFpCVEVsRVgxUlNRVTVUUmtWU1gwVk9RMDlFU1U1SEFFVjRjR1ZqZEdWa0lFTlNURVlBU0ZCRlgwbE9Wa0ZNU1VSZlEwaFZUa3RmVTBsYVJRQk5UMVpGQUVOUFRsUkpUbFZGQUVoUVJWOURRbDlUVkVGVVZWTmZRMDlOVUV4RlZFVUFTRkJGWDBOQ1gwaEZRVVJGVWxOZlEwOU5VRXhGVkVVQVNGQkZYME5DWDFaRlVsTkpUMDVmUTA5TlVFeEZWRVVBU0ZCRlgwTkNYMVZTVEY5RFQwMVFURVZVUlFCSVVFVmZRMEpmUTBoVlRrdGZRMDlOVUV4RlZFVUFTRkJGWDBOQ1gwaEZRVVJGVWw5V1FVeFZSVjlEVDAxUVRFVlVSUUJJVUVWZlEwSmZRMGhWVGt0ZlJWaFVSVTVUU1U5T1gxWkJURlZGWDBOUFRWQk1SVlJGQUVoUVJWOURRbDlEU0ZWT1MxOUZXRlJGVGxOSlQwNWZUa0ZOUlY5RFQwMVFURVZVUlFCSVVFVmZRMEpmVFVWVFUwRkhSVjlEVDAxUVRFVlVSUUJJVUVWZlEwSmZUVVZVU0U5RVgwTlBUVkJNUlZSRkFFaFFSVjlEUWw5SVJVRkVSVkpmUmtsRlRFUmZRMDlOVUV4RlZFVUFSRVZNUlZSRkFFaFFSVjlKVGxaQlRFbEVYMFZQUmw5VFZFRlVSUUJKVGxaQlRFbEVYMU5UVEY5RFJWSlVTVVpKUTBGVVJRQlFRVlZUUlFCT1QxOVNSVk5RVDA1VFJRQlZUbE5WVUZCUFVsUkZSRjlOUlVSSlFWOVVXVkJGQUVkUFRrVUFUazlVWDBGRFEwVlFWRUZDVEVVQVUwVlNWa2xEUlY5VlRrRldRVWxNUVVKTVJRQlNRVTVIUlY5T1QxUmZVMEZVU1ZOR1NVRkNURVVBVDFKSlIwbE9YMGxUWDFWT1VrVkJRMGhCUWt4RkFGSkZVMUJQVGxORlgwbFRYMU5VUVV4RkFGQlZVa2RGQUUxRlVrZEZBRkpGVVZWRlUxUmZTRVZCUkVWU1gwWkpSVXhFVTE5VVQwOWZURUZTUjBVQVVrVlJWVVZUVkY5SVJVRkVSVkpmVkU5UFgweEJVa2RGQUZCQldVeFBRVVJmVkU5UFgweEJVa2RGQUVsT1UxVkdSa2xEU1VWT1ZGOVRWRTlTUVVkRkFFaFFSVjlRUVZWVFJVUmZWVkJIVWtGRVJRQklVRVZmVUVGVlUwVkVYMGd5WDFWUVIxSkJSRVVBVTA5VlVrTkZBRUZPVGs5VlRrTkZBRlJTUVVORkFFaFFSVjlWVGtWWVVFVkRWRVZFWDFOUVFVTkZBRVJGVTBOU1NVSkZBRlZPVTFWQ1UwTlNTVUpGQUZKRlEwOVNSQUJJVUVWZlNVNVdRVXhKUkY5TlJWUklUMFFBVGs5VVgwWlBWVTVFQUZCU1QxQkdTVTVFQUZWT1FrbE9SQUJTUlVKSlRrUUFWVTVCVlZSSVQxSkpXa1ZFQUUxRlZFaFBSRjlPVDFSZlFVeE1UMWRGUkFCSVZGUlFYMVpGVWxOSlQwNWZUazlVWDFOVlVGQlBVbFJGUkFCQlRGSkZRVVJaWDFKRlVFOVNWRVZFQUVGRFEwVlFWRVZFQUU1UFZGOUpUVkJNUlUxRlRsUkZSQUJNVDA5UVgwUkZWRVZEVkVWRUFFaFFSVjlEVWw5RldGQkZRMVJGUkFCSVVFVmZURVpmUlZoUVJVTlVSVVFBUTFKRlFWUkZSQUJKVFY5VlUwVkVBRWhRUlY5UVFWVlRSVVFBVkVsTlJVOVZWRjlQUTBOVlVrVkVBRkJCV1UxRlRsUmZVa1ZSVlVsU1JVUUFVRkpGUTA5T1JFbFVTVTlPWDFKRlVWVkpVa1ZFQUZCU1QxaFpYMEZWVkVoRlRsUkpRMEZVU1U5T1gxSkZVVlZKVWtWRUFFNUZWRmRQVWt0ZlFWVlVTRVZPVkVsRFFWUkpUMDVmVWtWUlZVbFNSVVFBVEVWT1IxUklYMUpGVVZWSlVrVkVBRk5UVEY5RFJWSlVTVVpKUTBGVVJWOVNSVkZWU1ZKRlJBQlZVRWRTUVVSRlgxSkZVVlZKVWtWRUFGQkJSMFZmUlZoUVNWSkZSQUJRVWtWRFQwNUVTVlJKVDA1ZlJrRkpURVZFQUVWWVVFVkRWRUZVU1U5T1gwWkJTVXhGUkFCU1JWWkJURWxFUVZSSlQwNWZSa0ZKVEVWRUFGTlRURjlJUVU1RVUwaEJTMFZmUmtGSlRFVkVBRXhQUTB0RlJBQlVVa0ZPVTBaUFVrMUJWRWxQVGw5QlVGQk1TVVZFQUU1UFZGOU5UMFJKUmtsRlJBQk9UMVJmUlZoVVJVNUVSVVFBUWtGT1JGZEpSRlJJWDB4SlRVbFVYMFZZUTBWRlJFVkVBRk5KVkVWZlNWTmZUMVpGVWt4UFFVUkZSQUJJUlVGRUFFVjRjR1ZqZEdWa0lFaFVWRkF2QUFCZUV3QUFKaE1BQURBUUFBRHdGd0FBblJNQUFCVVNBQUE1RndBQThCSUFBQW9RQUFCMUVnQUFyUklBQUlJVEFBQlBGQUFBZnhBQUFLQVZBQUFqRkFBQWlSSUFBSXNVQUFCTkZRQUExQkVBQU04VUFBQVFHQUFBeVJZQUFOd1dBQURCRVFBQTRCY0FBTHNVQUFCMEZBQUFmQlVBQU9VVUFBQUlGd0FBSHhBQUFHVVZBQUNqRkFBQUtCVUFBQUlWQUFDWkZRQUFMQkFBQUlzWkFBQlBEd0FBMUE0QUFHb1FBQURPRUFBQUFoY0FBSWtPQUFCdUV3QUFIQk1BQUdZVUFBQldGd0FBd1JNQUFNMFRBQUJzRXdBQWFCY0FBR1lYQUFCZkZ3QUFJaE1BQU00UEFBQnBEZ0FBMkE0QUFHTVdBQURMRXdBQXFnNEFBQ2dYQUFBbUZ3QUF4Uk1BQUYwV0FBRG9FUUFBWnhNQUFHVVRBQUR5RmdBQWN4TUFBQjBYQUFENUZnQUE4eEVBQU04T0FBRE9GUUFBREJJQUFMTVJBQUNsRVFBQVlSQUFBRElYQUFDN0V3QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFQkFnRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFBQUFBQUFBQUFBQUFBQUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBZ01DQWdJQ0FnQUFBZ0lBQWdJQUFnSUNBZ0lDQWdJQ0FnQUVBQUFBQUFBQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdBQUFBSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBQUlBQWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFJQUFnSUNBZ0lBQUFJQ0FBSUNBQUlDQWdJQ0FnSUNBZ0lBQXdBRUFBQUFBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFBQUFDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdBQ0FBSUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJzYjNObFpXVndMV0ZzYVhabEFBQUFBQUFBQUFBQUFBQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQUFBQUFBQUFBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUVCQVFFQkFRRUJBUUVCQWdFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRmphSFZ1YTJWa0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQVFBQkFRRUJBUUFBQVFFQUFRRUFBUUVCQVFFQkFRRUJBUUFBQUFBQUFBQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUFBQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFFQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBR1ZqZEdsdmJtVnVkQzFzWlc1bmRHaHZibkp2ZUhrdFkyOXVibVZqZEdsdmJnQUFBQUFBQUFBQUFBQUFBQUFBQUhKaGJuTm1aWEl0Wlc1amIyUnBibWR3WjNKaFpHVU5DZzBLRFFwVFRRMEtEUXBVVkZBdlEwVXZWRk5RTHdBQUFBQUFBQUFBQUFBQUFBRUNBQUVEQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQUFBQUFBQUFBQUFCQWdBQkF3QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUJBUVVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBQUFBQUFBQUFBQUFRQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFFQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFBQUFBQUFBQUFBQUFCQUFBQ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUF3UUFBQVFFQkFRRUJBUUVCQVFFQlFRRUJBUUVCQVFFQkFRRUJBQUVBQVlIQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQUFRQUJBQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBQUFBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBZ0FBQUFBQUFBTURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREFBQUFBQUFBQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFBQUFBQUFBQUFBQUFnQUFBQUFDQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFEQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd0FBQUFBQUFBTURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUU1UFZVNURSVVZEUzA5VlZFNUZRMVJGVkVWRFVrbENSVXhWVTBoRlZFVkJSRk5GUVZKRFNGSkhSVU5VU1ZaSlZGbE1SVTVFUVZKV1JVOVVTVVpaVUZSSlQwNVRRMGhUUlVGWlUxUkJWRU5JUjBWUFVrUkpVa1ZEVkU5U1ZGSkRTRkJCVWtGTlJWUkZVbFZTUTBWQ1UwTlNTVUpGUVZKRVQxZE9RVU5GU1U1RVRrdERTMVZDVTBOU1NVSkZTRlJVVUM5QlJGUlFMdz09J1xuIiwKICAgICIvLyBAdHMtY2hlY2tcblxuJ3VzZSBzdHJpY3QnXG5cbi8qIGdsb2JhbCBXZWJBc3NlbWJseSAqL1xuXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgbmV0ID0gcmVxdWlyZSgnbmV0JylcbmNvbnN0IGh0dHAgPSByZXF1aXJlKCdodHRwJylcbmNvbnN0IHsgcGlwZWxpbmUgfSA9IHJlcXVpcmUoJ3N0cmVhbScpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi9jb3JlL3V0aWwnKVxuY29uc3QgdGltZXJzID0gcmVxdWlyZSgnLi90aW1lcnMnKVxuY29uc3QgUmVxdWVzdCA9IHJlcXVpcmUoJy4vY29yZS9yZXF1ZXN0JylcbmNvbnN0IERpc3BhdGNoZXJCYXNlID0gcmVxdWlyZSgnLi9kaXNwYXRjaGVyLWJhc2UnKVxuY29uc3Qge1xuICBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IsXG4gIFJlc3BvbnNlQ29udGVudExlbmd0aE1pc21hdGNoRXJyb3IsXG4gIEludmFsaWRBcmd1bWVudEVycm9yLFxuICBSZXF1ZXN0QWJvcnRlZEVycm9yLFxuICBIZWFkZXJzVGltZW91dEVycm9yLFxuICBIZWFkZXJzT3ZlcmZsb3dFcnJvcixcbiAgU29ja2V0RXJyb3IsXG4gIEluZm9ybWF0aW9uYWxFcnJvcixcbiAgQm9keVRpbWVvdXRFcnJvcixcbiAgSFRUUFBhcnNlckVycm9yLFxuICBSZXNwb25zZUV4Y2VlZGVkTWF4U2l6ZUVycm9yLFxuICBDbGllbnREZXN0cm95ZWRFcnJvclxufSA9IHJlcXVpcmUoJy4vY29yZS9lcnJvcnMnKVxuY29uc3QgYnVpbGRDb25uZWN0b3IgPSByZXF1aXJlKCcuL2NvcmUvY29ubmVjdCcpXG5jb25zdCB7XG4gIGtVcmwsXG4gIGtSZXNldCxcbiAga1NlcnZlck5hbWUsXG4gIGtDbGllbnQsXG4gIGtCdXN5LFxuICBrUGFyc2VyLFxuICBrQ29ubmVjdCxcbiAga0Jsb2NraW5nLFxuICBrUmVzdW1pbmcsXG4gIGtSdW5uaW5nLFxuICBrUGVuZGluZyxcbiAga1NpemUsXG4gIGtXcml0aW5nLFxuICBrUXVldWUsXG4gIGtDb25uZWN0ZWQsXG4gIGtDb25uZWN0aW5nLFxuICBrTmVlZERyYWluLFxuICBrTm9SZWYsXG4gIGtLZWVwQWxpdmVEZWZhdWx0VGltZW91dCxcbiAga0hvc3RIZWFkZXIsXG4gIGtQZW5kaW5nSWR4LFxuICBrUnVubmluZ0lkeCxcbiAga0Vycm9yLFxuICBrUGlwZWxpbmluZyxcbiAga1NvY2tldCxcbiAga0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZSxcbiAga01heEhlYWRlcnNTaXplLFxuICBrS2VlcEFsaXZlTWF4VGltZW91dCxcbiAga0tlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGQsXG4gIGtIZWFkZXJzVGltZW91dCxcbiAga0JvZHlUaW1lb3V0LFxuICBrU3RyaWN0Q29udGVudExlbmd0aCxcbiAga0Nvbm5lY3RvcixcbiAga01heFJlZGlyZWN0aW9ucyxcbiAga01heFJlcXVlc3RzLFxuICBrQ291bnRlcixcbiAga0Nsb3NlLFxuICBrRGVzdHJveSxcbiAga0Rpc3BhdGNoLFxuICBrSW50ZXJjZXB0b3JzLFxuICBrTG9jYWxBZGRyZXNzLFxuICBrTWF4UmVzcG9uc2VTaXplLFxuICBrSFRUUENvbm5WZXJzaW9uLFxuICAvLyBIVFRQMlxuICBrSG9zdCxcbiAga0hUVFAyU2Vzc2lvbixcbiAga0hUVFAyU2Vzc2lvblN0YXRlLFxuICBrSFRUUDJCdWlsZFJlcXVlc3QsXG4gIGtIVFRQMkNvcHlIZWFkZXJzLFxuICBrSFRUUDFCdWlsZFJlcXVlc3Rcbn0gPSByZXF1aXJlKCcuL2NvcmUvc3ltYm9scycpXG5cbi8qKiBAdHlwZSB7aW1wb3J0KCdodHRwMicpfSAqL1xubGV0IGh0dHAyXG50cnkge1xuICBodHRwMiA9IHJlcXVpcmUoJ2h0dHAyJylcbn0gY2F0Y2gge1xuICAvLyBAdHMtaWdub3JlXG4gIGh0dHAyID0geyBjb25zdGFudHM6IHt9IH1cbn1cblxuY29uc3Qge1xuICBjb25zdGFudHM6IHtcbiAgICBIVFRQMl9IRUFERVJfQVVUSE9SSVRZLFxuICAgIEhUVFAyX0hFQURFUl9NRVRIT0QsXG4gICAgSFRUUDJfSEVBREVSX1BBVEgsXG4gICAgSFRUUDJfSEVBREVSX1NDSEVNRSxcbiAgICBIVFRQMl9IRUFERVJfQ09OVEVOVF9MRU5HVEgsXG4gICAgSFRUUDJfSEVBREVSX0VYUEVDVCxcbiAgICBIVFRQMl9IRUFERVJfU1RBVFVTXG4gIH1cbn0gPSBodHRwMlxuXG4vLyBFeHBlcmltZW50YWxcbmxldCBoMkV4cGVyaW1lbnRhbFdhcm5lZCA9IGZhbHNlXG5cbmNvbnN0IEZhc3RCdWZmZXIgPSBCdWZmZXJbU3ltYm9sLnNwZWNpZXNdXG5cbmNvbnN0IGtDbG9zZWRSZXNvbHZlID0gU3ltYm9sKCdrQ2xvc2VkUmVzb2x2ZScpXG5cbmNvbnN0IGNoYW5uZWxzID0ge31cblxudHJ5IHtcbiAgY29uc3QgZGlhZ25vc3RpY3NDaGFubmVsID0gcmVxdWlyZSgnZGlhZ25vc3RpY3NfY2hhbm5lbCcpXG4gIGNoYW5uZWxzLnNlbmRIZWFkZXJzID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpjbGllbnQ6c2VuZEhlYWRlcnMnKVxuICBjaGFubmVscy5iZWZvcmVDb25uZWN0ID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpjbGllbnQ6YmVmb3JlQ29ubmVjdCcpXG4gIGNoYW5uZWxzLmNvbm5lY3RFcnJvciA9IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6Y2xpZW50OmNvbm5lY3RFcnJvcicpXG4gIGNoYW5uZWxzLmNvbm5lY3RlZCA9IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6Y2xpZW50OmNvbm5lY3RlZCcpXG59IGNhdGNoIHtcbiAgY2hhbm5lbHMuc2VuZEhlYWRlcnMgPSB7IGhhc1N1YnNjcmliZXJzOiBmYWxzZSB9XG4gIGNoYW5uZWxzLmJlZm9yZUNvbm5lY3QgPSB7IGhhc1N1YnNjcmliZXJzOiBmYWxzZSB9XG4gIGNoYW5uZWxzLmNvbm5lY3RFcnJvciA9IHsgaGFzU3Vic2NyaWJlcnM6IGZhbHNlIH1cbiAgY2hhbm5lbHMuY29ubmVjdGVkID0geyBoYXNTdWJzY3JpYmVyczogZmFsc2UgfVxufVxuXG4vKipcbiAqIEB0eXBlIHtpbXBvcnQoJy4uL3R5cGVzL2NsaWVudCcpLmRlZmF1bHR9XG4gKi9cbmNsYXNzIENsaWVudCBleHRlbmRzIERpc3BhdGNoZXJCYXNlIHtcbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfFVSTH0gdXJsXG4gICAqIEBwYXJhbSB7aW1wb3J0KCcuLi90eXBlcy9jbGllbnQnKS5DbGllbnQuT3B0aW9uc30gb3B0aW9uc1xuICAgKi9cbiAgY29uc3RydWN0b3IgKHVybCwge1xuICAgIGludGVyY2VwdG9ycyxcbiAgICBtYXhIZWFkZXJTaXplLFxuICAgIGhlYWRlcnNUaW1lb3V0LFxuICAgIHNvY2tldFRpbWVvdXQsXG4gICAgcmVxdWVzdFRpbWVvdXQsXG4gICAgY29ubmVjdFRpbWVvdXQsXG4gICAgYm9keVRpbWVvdXQsXG4gICAgaWRsZVRpbWVvdXQsXG4gICAga2VlcEFsaXZlLFxuICAgIGtlZXBBbGl2ZVRpbWVvdXQsXG4gICAgbWF4S2VlcEFsaXZlVGltZW91dCxcbiAgICBrZWVwQWxpdmVNYXhUaW1lb3V0LFxuICAgIGtlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGQsXG4gICAgc29ja2V0UGF0aCxcbiAgICBwaXBlbGluaW5nLFxuICAgIHRscyxcbiAgICBzdHJpY3RDb250ZW50TGVuZ3RoLFxuICAgIG1heENhY2hlZFNlc3Npb25zLFxuICAgIG1heFJlZGlyZWN0aW9ucyxcbiAgICBjb25uZWN0LFxuICAgIG1heFJlcXVlc3RzUGVyQ2xpZW50LFxuICAgIGxvY2FsQWRkcmVzcyxcbiAgICBtYXhSZXNwb25zZVNpemUsXG4gICAgYXV0b1NlbGVjdEZhbWlseSxcbiAgICBhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQsXG4gICAgLy8gaDJcbiAgICBhbGxvd0gyLFxuICAgIG1heENvbmN1cnJlbnRTdHJlYW1zXG4gIH0gPSB7fSkge1xuICAgIHN1cGVyKClcblxuICAgIGlmIChrZWVwQWxpdmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCd1bnN1cHBvcnRlZCBrZWVwQWxpdmUsIHVzZSBwaXBlbGluaW5nPTAgaW5zdGVhZCcpXG4gICAgfVxuXG4gICAgaWYgKHNvY2tldFRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCd1bnN1cHBvcnRlZCBzb2NrZXRUaW1lb3V0LCB1c2UgaGVhZGVyc1RpbWVvdXQgJiBib2R5VGltZW91dCBpbnN0ZWFkJylcbiAgICB9XG5cbiAgICBpZiAocmVxdWVzdFRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCd1bnN1cHBvcnRlZCByZXF1ZXN0VGltZW91dCwgdXNlIGhlYWRlcnNUaW1lb3V0ICYgYm9keVRpbWVvdXQgaW5zdGVhZCcpXG4gICAgfVxuXG4gICAgaWYgKGlkbGVUaW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndW5zdXBwb3J0ZWQgaWRsZVRpbWVvdXQsIHVzZSBrZWVwQWxpdmVUaW1lb3V0IGluc3RlYWQnKVxuICAgIH1cblxuICAgIGlmIChtYXhLZWVwQWxpdmVUaW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndW5zdXBwb3J0ZWQgbWF4S2VlcEFsaXZlVGltZW91dCwgdXNlIGtlZXBBbGl2ZU1heFRpbWVvdXQgaW5zdGVhZCcpXG4gICAgfVxuXG4gICAgaWYgKG1heEhlYWRlclNpemUgIT0gbnVsbCAmJiAhTnVtYmVyLmlzRmluaXRlKG1heEhlYWRlclNpemUpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgbWF4SGVhZGVyU2l6ZScpXG4gICAgfVxuXG4gICAgaWYgKHNvY2tldFBhdGggIT0gbnVsbCAmJiB0eXBlb2Ygc29ja2V0UGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBzb2NrZXRQYXRoJylcbiAgICB9XG5cbiAgICBpZiAoY29ubmVjdFRpbWVvdXQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0Zpbml0ZShjb25uZWN0VGltZW91dCkgfHwgY29ubmVjdFRpbWVvdXQgPCAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGNvbm5lY3RUaW1lb3V0JylcbiAgICB9XG5cbiAgICBpZiAoa2VlcEFsaXZlVGltZW91dCAhPSBudWxsICYmICghTnVtYmVyLmlzRmluaXRlKGtlZXBBbGl2ZVRpbWVvdXQpIHx8IGtlZXBBbGl2ZVRpbWVvdXQgPD0gMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBrZWVwQWxpdmVUaW1lb3V0JylcbiAgICB9XG5cbiAgICBpZiAoa2VlcEFsaXZlTWF4VGltZW91dCAhPSBudWxsICYmICghTnVtYmVyLmlzRmluaXRlKGtlZXBBbGl2ZU1heFRpbWVvdXQpIHx8IGtlZXBBbGl2ZU1heFRpbWVvdXQgPD0gMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBrZWVwQWxpdmVNYXhUaW1lb3V0JylcbiAgICB9XG5cbiAgICBpZiAoa2VlcEFsaXZlVGltZW91dFRocmVzaG9sZCAhPSBudWxsICYmICFOdW1iZXIuaXNGaW5pdGUoa2VlcEFsaXZlVGltZW91dFRocmVzaG9sZCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBrZWVwQWxpdmVUaW1lb3V0VGhyZXNob2xkJylcbiAgICB9XG5cbiAgICBpZiAoaGVhZGVyc1RpbWVvdXQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0ludGVnZXIoaGVhZGVyc1RpbWVvdXQpIHx8IGhlYWRlcnNUaW1lb3V0IDwgMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaGVhZGVyc1RpbWVvdXQgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgb3IgemVybycpXG4gICAgfVxuXG4gICAgaWYgKGJvZHlUaW1lb3V0ICE9IG51bGwgJiYgKCFOdW1iZXIuaXNJbnRlZ2VyKGJvZHlUaW1lb3V0KSB8fCBib2R5VGltZW91dCA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2JvZHlUaW1lb3V0IG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIG9yIHplcm8nKVxuICAgIH1cblxuICAgIGlmIChjb25uZWN0ICE9IG51bGwgJiYgdHlwZW9mIGNvbm5lY3QgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGNvbm5lY3QgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2Nvbm5lY3QgbXVzdCBiZSBhIGZ1bmN0aW9uIG9yIGFuIG9iamVjdCcpXG4gICAgfVxuXG4gICAgaWYgKG1heFJlZGlyZWN0aW9ucyAhPSBudWxsICYmICghTnVtYmVyLmlzSW50ZWdlcihtYXhSZWRpcmVjdGlvbnMpIHx8IG1heFJlZGlyZWN0aW9ucyA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ21heFJlZGlyZWN0aW9ucyBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJylcbiAgICB9XG5cbiAgICBpZiAobWF4UmVxdWVzdHNQZXJDbGllbnQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0ludGVnZXIobWF4UmVxdWVzdHNQZXJDbGllbnQpIHx8IG1heFJlcXVlc3RzUGVyQ2xpZW50IDwgMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignbWF4UmVxdWVzdHNQZXJDbGllbnQgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpXG4gICAgfVxuXG4gICAgaWYgKGxvY2FsQWRkcmVzcyAhPSBudWxsICYmICh0eXBlb2YgbG9jYWxBZGRyZXNzICE9PSAnc3RyaW5nJyB8fCBuZXQuaXNJUChsb2NhbEFkZHJlc3MpID09PSAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdsb2NhbEFkZHJlc3MgbXVzdCBiZSB2YWxpZCBzdHJpbmcgSVAgYWRkcmVzcycpXG4gICAgfVxuXG4gICAgaWYgKG1heFJlc3BvbnNlU2l6ZSAhPSBudWxsICYmICghTnVtYmVyLmlzSW50ZWdlcihtYXhSZXNwb25zZVNpemUpIHx8IG1heFJlc3BvbnNlU2l6ZSA8IC0xKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdtYXhSZXNwb25zZVNpemUgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgYXV0b1NlbGVjdEZhbWlseUF0dGVtcHRUaW1lb3V0ICE9IG51bGwgJiZcbiAgICAgICghTnVtYmVyLmlzSW50ZWdlcihhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQpIHx8IGF1dG9TZWxlY3RGYW1pbHlBdHRlbXB0VGltZW91dCA8IC0xKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpXG4gICAgfVxuXG4gICAgLy8gaDJcbiAgICBpZiAoYWxsb3dIMiAhPSBudWxsICYmIHR5cGVvZiBhbGxvd0gyICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignYWxsb3dIMiBtdXN0IGJlIGEgdmFsaWQgYm9vbGVhbiB2YWx1ZScpXG4gICAgfVxuXG4gICAgaWYgKG1heENvbmN1cnJlbnRTdHJlYW1zICE9IG51bGwgJiYgKHR5cGVvZiBtYXhDb25jdXJyZW50U3RyZWFtcyAhPT0gJ251bWJlcicgfHwgbWF4Q29uY3VycmVudFN0cmVhbXMgPCAxKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdtYXhDb25jdXJyZW50U3RyZWFtcyBtdXN0IGJlIGEgcG9zc2l0aXZlIGludGVnZXIsIGdyZWF0ZXIgdGhhbiAwJylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNvbm5lY3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbm5lY3QgPSBidWlsZENvbm5lY3Rvcih7XG4gICAgICAgIC4uLnRscyxcbiAgICAgICAgbWF4Q2FjaGVkU2Vzc2lvbnMsXG4gICAgICAgIGFsbG93SDIsXG4gICAgICAgIHNvY2tldFBhdGgsXG4gICAgICAgIHRpbWVvdXQ6IGNvbm5lY3RUaW1lb3V0LFxuICAgICAgICAuLi4odXRpbC5ub2RlSGFzQXV0b1NlbGVjdEZhbWlseSAmJiBhdXRvU2VsZWN0RmFtaWx5ID8geyBhdXRvU2VsZWN0RmFtaWx5LCBhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQgfSA6IHVuZGVmaW5lZCksXG4gICAgICAgIC4uLmNvbm5lY3RcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgdGhpc1trSW50ZXJjZXB0b3JzXSA9IGludGVyY2VwdG9ycyAmJiBpbnRlcmNlcHRvcnMuQ2xpZW50ICYmIEFycmF5LmlzQXJyYXkoaW50ZXJjZXB0b3JzLkNsaWVudClcbiAgICAgID8gaW50ZXJjZXB0b3JzLkNsaWVudFxuICAgICAgOiBbY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvcih7IG1heFJlZGlyZWN0aW9ucyB9KV1cbiAgICB0aGlzW2tVcmxdID0gdXRpbC5wYXJzZU9yaWdpbih1cmwpXG4gICAgdGhpc1trQ29ubmVjdG9yXSA9IGNvbm5lY3RcbiAgICB0aGlzW2tTb2NrZXRdID0gbnVsbFxuICAgIHRoaXNba1BpcGVsaW5pbmddID0gcGlwZWxpbmluZyAhPSBudWxsID8gcGlwZWxpbmluZyA6IDFcbiAgICB0aGlzW2tNYXhIZWFkZXJzU2l6ZV0gPSBtYXhIZWFkZXJTaXplIHx8IGh0dHAubWF4SGVhZGVyU2l6ZVxuICAgIHRoaXNba0tlZXBBbGl2ZURlZmF1bHRUaW1lb3V0XSA9IGtlZXBBbGl2ZVRpbWVvdXQgPT0gbnVsbCA/IDRlMyA6IGtlZXBBbGl2ZVRpbWVvdXRcbiAgICB0aGlzW2tLZWVwQWxpdmVNYXhUaW1lb3V0XSA9IGtlZXBBbGl2ZU1heFRpbWVvdXQgPT0gbnVsbCA/IDYwMGUzIDoga2VlcEFsaXZlTWF4VGltZW91dFxuICAgIHRoaXNba0tlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGRdID0ga2VlcEFsaXZlVGltZW91dFRocmVzaG9sZCA9PSBudWxsID8gMWUzIDoga2VlcEFsaXZlVGltZW91dFRocmVzaG9sZFxuICAgIHRoaXNba0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZV0gPSB0aGlzW2tLZWVwQWxpdmVEZWZhdWx0VGltZW91dF1cbiAgICB0aGlzW2tTZXJ2ZXJOYW1lXSA9IG51bGxcbiAgICB0aGlzW2tMb2NhbEFkZHJlc3NdID0gbG9jYWxBZGRyZXNzICE9IG51bGwgPyBsb2NhbEFkZHJlc3MgOiBudWxsXG4gICAgdGhpc1trUmVzdW1pbmddID0gMCAvLyAwLCBpZGxlLCAxLCBzY2hlZHVsZWQsIDIgcmVzdW1pbmdcbiAgICB0aGlzW2tOZWVkRHJhaW5dID0gMCAvLyAwLCBpZGxlLCAxLCBzY2hlZHVsZWQsIDIgcmVzdW1pbmdcbiAgICB0aGlzW2tIb3N0SGVhZGVyXSA9IGBob3N0OiAke3RoaXNba1VybF0uaG9zdG5hbWV9JHt0aGlzW2tVcmxdLnBvcnQgPyBgOiR7dGhpc1trVXJsXS5wb3J0fWAgOiAnJ31cXHJcXG5gXG4gICAgdGhpc1trQm9keVRpbWVvdXRdID0gYm9keVRpbWVvdXQgIT0gbnVsbCA/IGJvZHlUaW1lb3V0IDogMzAwZTNcbiAgICB0aGlzW2tIZWFkZXJzVGltZW91dF0gPSBoZWFkZXJzVGltZW91dCAhPSBudWxsID8gaGVhZGVyc1RpbWVvdXQgOiAzMDBlM1xuICAgIHRoaXNba1N0cmljdENvbnRlbnRMZW5ndGhdID0gc3RyaWN0Q29udGVudExlbmd0aCA9PSBudWxsID8gdHJ1ZSA6IHN0cmljdENvbnRlbnRMZW5ndGhcbiAgICB0aGlzW2tNYXhSZWRpcmVjdGlvbnNdID0gbWF4UmVkaXJlY3Rpb25zXG4gICAgdGhpc1trTWF4UmVxdWVzdHNdID0gbWF4UmVxdWVzdHNQZXJDbGllbnRcbiAgICB0aGlzW2tDbG9zZWRSZXNvbHZlXSA9IG51bGxcbiAgICB0aGlzW2tNYXhSZXNwb25zZVNpemVdID0gbWF4UmVzcG9uc2VTaXplID4gLTEgPyBtYXhSZXNwb25zZVNpemUgOiAtMVxuICAgIHRoaXNba0hUVFBDb25uVmVyc2lvbl0gPSAnaDEnXG5cbiAgICAvLyBIVFRQLzJcbiAgICB0aGlzW2tIVFRQMlNlc3Npb25dID0gbnVsbFxuICAgIHRoaXNba0hUVFAyU2Vzc2lvblN0YXRlXSA9ICFhbGxvd0gyXG4gICAgICA/IG51bGxcbiAgICAgIDoge1xuICAgICAgICAvLyBzdHJlYW1zOiBudWxsLCAvLyBGaXhlZCBxdWV1ZSBvZiBzdHJlYW1zIC0gRm9yIGZ1dHVyZSBzdXBwb3J0IG9mIGBwdXNoYFxuICAgICAgICAgIG9wZW5TdHJlYW1zOiAwLCAvLyBLZWVwIHRyYWNrIG9mIHRoZW0gdG8gZGVjaWRlIHdldGhlciBvciBub3QgdW5yZWYgdGhlIHNlc3Npb25cbiAgICAgICAgICBtYXhDb25jdXJyZW50U3RyZWFtczogbWF4Q29uY3VycmVudFN0cmVhbXMgIT0gbnVsbCA/IG1heENvbmN1cnJlbnRTdHJlYW1zIDogMTAwIC8vIE1heCBwZWVyQ29uY3VycmVudFN0cmVhbXMgZm9yIGEgTm9kZSBoMiBzZXJ2ZXJcbiAgICAgICAgfVxuICAgIHRoaXNba0hvc3RdID0gYCR7dGhpc1trVXJsXS5ob3N0bmFtZX0ke3RoaXNba1VybF0ucG9ydCA/IGA6JHt0aGlzW2tVcmxdLnBvcnR9YCA6ICcnfWBcblxuICAgIC8vIGtRdWV1ZSBpcyBidWlsdCB1cCBvZiAzIHNlY3Rpb25zIHNlcGFyYXRlZCBieVxuICAgIC8vIHRoZSBrUnVubmluZ0lkeCBhbmQga1BlbmRpbmdJZHggaW5kaWNlcy5cbiAgICAvLyB8ICAgY29tcGxldGUgICB8ICAgcnVubmluZyAgIHwgICBwZW5kaW5nICAgfFxuICAgIC8vICAgICAgICAgICAgICAgIF4ga1J1bm5pbmdJZHggXiBrUGVuZGluZ0lkeCBeIGtRdWV1ZS5sZW5ndGhcbiAgICAvLyBrUnVubmluZ0lkeCBwb2ludHMgdG8gdGhlIGZpcnN0IHJ1bm5pbmcgZWxlbWVudC5cbiAgICAvLyBrUGVuZGluZ0lkeCBwb2ludHMgdG8gdGhlIGZpcnN0IHBlbmRpbmcgZWxlbWVudC5cbiAgICAvLyBUaGlzIGltcGxlbWVudHMgYSBmYXN0IHF1ZXVlIHdpdGggYW4gYW1vcnRpemVkXG4gICAgLy8gdGltZSBvZiBPKDEpLlxuXG4gICAgdGhpc1trUXVldWVdID0gW11cbiAgICB0aGlzW2tSdW5uaW5nSWR4XSA9IDBcbiAgICB0aGlzW2tQZW5kaW5nSWR4XSA9IDBcbiAgfVxuXG4gIGdldCBwaXBlbGluaW5nICgpIHtcbiAgICByZXR1cm4gdGhpc1trUGlwZWxpbmluZ11cbiAgfVxuXG4gIHNldCBwaXBlbGluaW5nICh2YWx1ZSkge1xuICAgIHRoaXNba1BpcGVsaW5pbmddID0gdmFsdWVcbiAgICByZXN1bWUodGhpcywgdHJ1ZSlcbiAgfVxuXG4gIGdldCBba1BlbmRpbmddICgpIHtcbiAgICByZXR1cm4gdGhpc1trUXVldWVdLmxlbmd0aCAtIHRoaXNba1BlbmRpbmdJZHhdXG4gIH1cblxuICBnZXQgW2tSdW5uaW5nXSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1BlbmRpbmdJZHhdIC0gdGhpc1trUnVubmluZ0lkeF1cbiAgfVxuXG4gIGdldCBba1NpemVdICgpIHtcbiAgICByZXR1cm4gdGhpc1trUXVldWVdLmxlbmd0aCAtIHRoaXNba1J1bm5pbmdJZHhdXG4gIH1cblxuICBnZXQgW2tDb25uZWN0ZWRdICgpIHtcbiAgICByZXR1cm4gISF0aGlzW2tTb2NrZXRdICYmICF0aGlzW2tDb25uZWN0aW5nXSAmJiAhdGhpc1trU29ja2V0XS5kZXN0cm95ZWRcbiAgfVxuXG4gIGdldCBba0J1c3ldICgpIHtcbiAgICBjb25zdCBzb2NrZXQgPSB0aGlzW2tTb2NrZXRdXG4gICAgcmV0dXJuIChcbiAgICAgIChzb2NrZXQgJiYgKHNvY2tldFtrUmVzZXRdIHx8IHNvY2tldFtrV3JpdGluZ10gfHwgc29ja2V0W2tCbG9ja2luZ10pKSB8fFxuICAgICAgKHRoaXNba1NpemVdID49ICh0aGlzW2tQaXBlbGluaW5nXSB8fCAxKSkgfHxcbiAgICAgIHRoaXNba1BlbmRpbmddID4gMFxuICAgIClcbiAgfVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZTogb25seSB1c2VkIGZvciB0ZXN0ICovXG4gIFtrQ29ubmVjdF0gKGNiKSB7XG4gICAgY29ubmVjdCh0aGlzKVxuICAgIHRoaXMub25jZSgnY29ubmVjdCcsIGNiKVxuICB9XG5cbiAgW2tEaXNwYXRjaF0gKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBjb25zdCBvcmlnaW4gPSBvcHRzLm9yaWdpbiB8fCB0aGlzW2tVcmxdLm9yaWdpblxuXG4gICAgY29uc3QgcmVxdWVzdCA9IHRoaXNba0hUVFBDb25uVmVyc2lvbl0gPT09ICdoMidcbiAgICAgID8gUmVxdWVzdFtrSFRUUDJCdWlsZFJlcXVlc3RdKG9yaWdpbiwgb3B0cywgaGFuZGxlcilcbiAgICAgIDogUmVxdWVzdFtrSFRUUDFCdWlsZFJlcXVlc3RdKG9yaWdpbiwgb3B0cywgaGFuZGxlcilcblxuICAgIHRoaXNba1F1ZXVlXS5wdXNoKHJlcXVlc3QpXG4gICAgaWYgKHRoaXNba1Jlc3VtaW5nXSkge1xuICAgICAgLy8gRG8gbm90aGluZy5cbiAgICB9IGVsc2UgaWYgKHV0aWwuYm9keUxlbmd0aChyZXF1ZXN0LmJvZHkpID09IG51bGwgJiYgdXRpbC5pc0l0ZXJhYmxlKHJlcXVlc3QuYm9keSkpIHtcbiAgICAgIC8vIFdhaXQgYSB0aWNrIGluIGNhc2Ugc3RyZWFtL2l0ZXJhdG9yIGlzIGVuZGVkIGluIHRoZSBzYW1lIHRpY2suXG4gICAgICB0aGlzW2tSZXN1bWluZ10gPSAxXG4gICAgICBwcm9jZXNzLm5leHRUaWNrKHJlc3VtZSwgdGhpcylcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdW1lKHRoaXMsIHRydWUpXG4gICAgfVxuXG4gICAgaWYgKHRoaXNba1Jlc3VtaW5nXSAmJiB0aGlzW2tOZWVkRHJhaW5dICE9PSAyICYmIHRoaXNba0J1c3ldKSB7XG4gICAgICB0aGlzW2tOZWVkRHJhaW5dID0gMlxuICAgIH1cblxuICAgIHJldHVybiB0aGlzW2tOZWVkRHJhaW5dIDwgMlxuICB9XG5cbiAgYXN5bmMgW2tDbG9zZV0gKCkge1xuICAgIC8vIFRPRE86IGZvciBIMiB3ZSBuZWVkIHRvIGdyYWNlZnVsbHkgZmx1c2ggdGhlIHJlbWFpbmluZyBlbnF1ZXVlZFxuICAgIC8vIHJlcXVlc3QgYW5kIGNsb3NlIGVhY2ggc3RyZWFtLlxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgaWYgKCF0aGlzW2tTaXplXSkge1xuICAgICAgICByZXNvbHZlKG51bGwpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzW2tDbG9zZWRSZXNvbHZlXSA9IHJlc29sdmVcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgYXN5bmMgW2tEZXN0cm95XSAoZXJyKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBjb25zdCByZXF1ZXN0cyA9IHRoaXNba1F1ZXVlXS5zcGxpY2UodGhpc1trUGVuZGluZ0lkeF0pXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcXVlc3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSByZXF1ZXN0c1tpXVxuICAgICAgICBlcnJvclJlcXVlc3QodGhpcywgcmVxdWVzdCwgZXJyKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBjYWxsYmFjayA9ICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXNba0Nsb3NlZFJlc29sdmVdKSB7XG4gICAgICAgICAgLy8gVE9ETyAoZml4KTogU2hvdWxkIHdlIGVycm9yIGhlcmUgd2l0aCBDbGllbnREZXN0cm95ZWRFcnJvcj9cbiAgICAgICAgICB0aGlzW2tDbG9zZWRSZXNvbHZlXSgpXG4gICAgICAgICAgdGhpc1trQ2xvc2VkUmVzb2x2ZV0gPSBudWxsXG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZSgpXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzW2tIVFRQMlNlc3Npb25dICE9IG51bGwpIHtcbiAgICAgICAgdXRpbC5kZXN0cm95KHRoaXNba0hUVFAyU2Vzc2lvbl0sIGVycilcbiAgICAgICAgdGhpc1trSFRUUDJTZXNzaW9uXSA9IG51bGxcbiAgICAgICAgdGhpc1trSFRUUDJTZXNzaW9uU3RhdGVdID0gbnVsbFxuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXNba1NvY2tldF0pIHtcbiAgICAgICAgcXVldWVNaWNyb3Rhc2soY2FsbGJhY2spXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1dGlsLmRlc3Ryb3kodGhpc1trU29ja2V0XS5vbignY2xvc2UnLCBjYWxsYmFjayksIGVycilcbiAgICAgIH1cblxuICAgICAgcmVzdW1lKHRoaXMpXG4gICAgfSlcbiAgfVxufVxuXG5mdW5jdGlvbiBvbkh0dHAyU2Vzc2lvbkVycm9yIChlcnIpIHtcbiAgYXNzZXJ0KGVyci5jb2RlICE9PSAnRVJSX1RMU19DRVJUX0FMVE5BTUVfSU5WQUxJRCcpXG5cbiAgdGhpc1trU29ja2V0XVtrRXJyb3JdID0gZXJyXG5cbiAgb25FcnJvcih0aGlzW2tDbGllbnRdLCBlcnIpXG59XG5cbmZ1bmN0aW9uIG9uSHR0cDJGcmFtZUVycm9yICh0eXBlLCBjb2RlLCBpZCkge1xuICBjb25zdCBlcnIgPSBuZXcgSW5mb3JtYXRpb25hbEVycm9yKGBIVFRQLzI6IFwiZnJhbWVFcnJvclwiIHJlY2VpdmVkIC0gdHlwZSAke3R5cGV9LCBjb2RlICR7Y29kZX1gKVxuXG4gIGlmIChpZCA9PT0gMCkge1xuICAgIHRoaXNba1NvY2tldF1ba0Vycm9yXSA9IGVyclxuICAgIG9uRXJyb3IodGhpc1trQ2xpZW50XSwgZXJyKVxuICB9XG59XG5cbmZ1bmN0aW9uIG9uSHR0cDJTZXNzaW9uRW5kICgpIHtcbiAgdXRpbC5kZXN0cm95KHRoaXMsIG5ldyBTb2NrZXRFcnJvcignb3RoZXIgc2lkZSBjbG9zZWQnKSlcbiAgdXRpbC5kZXN0cm95KHRoaXNba1NvY2tldF0sIG5ldyBTb2NrZXRFcnJvcignb3RoZXIgc2lkZSBjbG9zZWQnKSlcbn1cblxuZnVuY3Rpb24gb25IVFRQMkdvQXdheSAoY29kZSkge1xuICBjb25zdCBjbGllbnQgPSB0aGlzW2tDbGllbnRdXG4gIGNvbnN0IGVyciA9IG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoYEhUVFAvMjogXCJHT0FXQVlcIiBmcmFtZSByZWNlaXZlZCB3aXRoIGNvZGUgJHtjb2RlfWApXG4gIGNsaWVudFtrU29ja2V0XSA9IG51bGxcbiAgY2xpZW50W2tIVFRQMlNlc3Npb25dID0gbnVsbFxuXG4gIGlmIChjbGllbnQuZGVzdHJveWVkKSB7XG4gICAgYXNzZXJ0KHRoaXNba1BlbmRpbmddID09PSAwKVxuXG4gICAgLy8gRmFpbCBlbnRpcmUgcXVldWUuXG4gICAgY29uc3QgcmVxdWVzdHMgPSBjbGllbnRba1F1ZXVlXS5zcGxpY2UoY2xpZW50W2tSdW5uaW5nSWR4XSlcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcXVlc3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCByZXF1ZXN0ID0gcmVxdWVzdHNbaV1cbiAgICAgIGVycm9yUmVxdWVzdCh0aGlzLCByZXF1ZXN0LCBlcnIpXG4gICAgfVxuICB9IGVsc2UgaWYgKGNsaWVudFtrUnVubmluZ10gPiAwKSB7XG4gICAgLy8gRmFpbCBoZWFkIG9mIHBpcGVsaW5lLlxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdXVxuICAgIGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF0rK10gPSBudWxsXG5cbiAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIpXG4gIH1cblxuICBjbGllbnRba1BlbmRpbmdJZHhdID0gY2xpZW50W2tSdW5uaW5nSWR4XVxuXG4gIGFzc2VydChjbGllbnRba1J1bm5pbmddID09PSAwKVxuXG4gIGNsaWVudC5lbWl0KCdkaXNjb25uZWN0JyxcbiAgICBjbGllbnRba1VybF0sXG4gICAgW2NsaWVudF0sXG4gICAgZXJyXG4gIClcblxuICByZXN1bWUoY2xpZW50KVxufVxuXG5jb25zdCBjb25zdGFudHMgPSByZXF1aXJlKCcuL2xsaHR0cC9jb25zdGFudHMnKVxuY29uc3QgY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvciA9IHJlcXVpcmUoJy4vaW50ZXJjZXB0b3IvcmVkaXJlY3RJbnRlcmNlcHRvcicpXG5jb25zdCBFTVBUWV9CVUYgPSBCdWZmZXIuYWxsb2MoMClcblxuYXN5bmMgZnVuY3Rpb24gbGF6eWxsaHR0cCAoKSB7XG4gIGNvbnN0IGxsaHR0cFdhc21EYXRhID0gcHJvY2Vzcy5lbnYuSkVTVF9XT1JLRVJfSUQgPyByZXF1aXJlKCcuL2xsaHR0cC9sbGh0dHAtd2FzbS5qcycpIDogdW5kZWZpbmVkXG5cbiAgbGV0IG1vZFxuICB0cnkge1xuICAgIG1vZCA9IGF3YWl0IFdlYkFzc2VtYmx5LmNvbXBpbGUoQnVmZmVyLmZyb20ocmVxdWlyZSgnLi9sbGh0dHAvbGxodHRwX3NpbWQtd2FzbS5qcycpLCAnYmFzZTY0JykpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXG4gICAgLy8gV2UgY291bGQgY2hlY2sgaWYgdGhlIGVycm9yIHdhcyBjYXVzZWQgYnkgdGhlIHNpbWQgb3B0aW9uIG5vdFxuICAgIC8vIGJlaW5nIGVuYWJsZWQsIGJ1dCB0aGUgb2NjdXJyaW5nIG9mIHRoaXMgb3RoZXIgZXJyb3JcbiAgICAvLyAqIGh0dHBzOi8vZ2l0aHViLmNvbS9lbXNjcmlwdGVuLWNvcmUvZW1zY3JpcHRlbi9pc3N1ZXMvMTE0OTVcbiAgICAvLyBnb3QgbWUgdG8gcmVtb3ZlIHRoYXQgY2hlY2sgdG8gYXZvaWQgYnJlYWtpbmcgTm9kZSAxMi5cbiAgICBtb2QgPSBhd2FpdCBXZWJBc3NlbWJseS5jb21waWxlKEJ1ZmZlci5mcm9tKGxsaHR0cFdhc21EYXRhIHx8IHJlcXVpcmUoJy4vbGxodHRwL2xsaHR0cC13YXNtLmpzJyksICdiYXNlNjQnKSlcbiAgfVxuXG4gIHJldHVybiBhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShtb2QsIHtcbiAgICBlbnY6IHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIGNhbWVsY2FzZSAqL1xuXG4gICAgICB3YXNtX29uX3VybDogKHAsIGF0LCBsZW4pID0+IHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgcmV0dXJuIDBcbiAgICAgIH0sXG4gICAgICB3YXNtX29uX3N0YXR1czogKHAsIGF0LCBsZW4pID0+IHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGN1cnJlbnRQYXJzZXIucHRyLCBwKVxuICAgICAgICBjb25zdCBzdGFydCA9IGF0IC0gY3VycmVudEJ1ZmZlclB0ciArIGN1cnJlbnRCdWZmZXJSZWYuYnl0ZU9mZnNldFxuICAgICAgICByZXR1cm4gY3VycmVudFBhcnNlci5vblN0YXR1cyhuZXcgRmFzdEJ1ZmZlcihjdXJyZW50QnVmZmVyUmVmLmJ1ZmZlciwgc3RhcnQsIGxlbikpIHx8IDBcbiAgICAgIH0sXG4gICAgICB3YXNtX29uX21lc3NhZ2VfYmVnaW46IChwKSA9PiB7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjdXJyZW50UGFyc2VyLnB0ciwgcClcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRQYXJzZXIub25NZXNzYWdlQmVnaW4oKSB8fCAwXG4gICAgICB9LFxuICAgICAgd2FzbV9vbl9oZWFkZXJfZmllbGQ6IChwLCBhdCwgbGVuKSA9PiB7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjdXJyZW50UGFyc2VyLnB0ciwgcClcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBhdCAtIGN1cnJlbnRCdWZmZXJQdHIgKyBjdXJyZW50QnVmZmVyUmVmLmJ5dGVPZmZzZXRcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRQYXJzZXIub25IZWFkZXJGaWVsZChuZXcgRmFzdEJ1ZmZlcihjdXJyZW50QnVmZmVyUmVmLmJ1ZmZlciwgc3RhcnQsIGxlbikpIHx8IDBcbiAgICAgIH0sXG4gICAgICB3YXNtX29uX2hlYWRlcl92YWx1ZTogKHAsIGF0LCBsZW4pID0+IHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGN1cnJlbnRQYXJzZXIucHRyLCBwKVxuICAgICAgICBjb25zdCBzdGFydCA9IGF0IC0gY3VycmVudEJ1ZmZlclB0ciArIGN1cnJlbnRCdWZmZXJSZWYuYnl0ZU9mZnNldFxuICAgICAgICByZXR1cm4gY3VycmVudFBhcnNlci5vbkhlYWRlclZhbHVlKG5ldyBGYXN0QnVmZmVyKGN1cnJlbnRCdWZmZXJSZWYuYnVmZmVyLCBzdGFydCwgbGVuKSkgfHwgMFxuICAgICAgfSxcbiAgICAgIHdhc21fb25faGVhZGVyc19jb21wbGV0ZTogKHAsIHN0YXR1c0NvZGUsIHVwZ3JhZGUsIHNob3VsZEtlZXBBbGl2ZSkgPT4ge1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY3VycmVudFBhcnNlci5wdHIsIHApXG4gICAgICAgIHJldHVybiBjdXJyZW50UGFyc2VyLm9uSGVhZGVyc0NvbXBsZXRlKHN0YXR1c0NvZGUsIEJvb2xlYW4odXBncmFkZSksIEJvb2xlYW4oc2hvdWxkS2VlcEFsaXZlKSkgfHwgMFxuICAgICAgfSxcbiAgICAgIHdhc21fb25fYm9keTogKHAsIGF0LCBsZW4pID0+IHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGN1cnJlbnRQYXJzZXIucHRyLCBwKVxuICAgICAgICBjb25zdCBzdGFydCA9IGF0IC0gY3VycmVudEJ1ZmZlclB0ciArIGN1cnJlbnRCdWZmZXJSZWYuYnl0ZU9mZnNldFxuICAgICAgICByZXR1cm4gY3VycmVudFBhcnNlci5vbkJvZHkobmV3IEZhc3RCdWZmZXIoY3VycmVudEJ1ZmZlclJlZi5idWZmZXIsIHN0YXJ0LCBsZW4pKSB8fCAwXG4gICAgICB9LFxuICAgICAgd2FzbV9vbl9tZXNzYWdlX2NvbXBsZXRlOiAocCkgPT4ge1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY3VycmVudFBhcnNlci5wdHIsIHApXG4gICAgICAgIHJldHVybiBjdXJyZW50UGFyc2VyLm9uTWVzc2FnZUNvbXBsZXRlKCkgfHwgMFxuICAgICAgfVxuXG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIGNhbWVsY2FzZSAqL1xuICAgIH1cbiAgfSlcbn1cblxubGV0IGxsaHR0cEluc3RhbmNlID0gbnVsbFxubGV0IGxsaHR0cFByb21pc2UgPSBsYXp5bGxodHRwKClcbmxsaHR0cFByb21pc2UuY2F0Y2goKVxuXG5sZXQgY3VycmVudFBhcnNlciA9IG51bGxcbmxldCBjdXJyZW50QnVmZmVyUmVmID0gbnVsbFxubGV0IGN1cnJlbnRCdWZmZXJTaXplID0gMFxubGV0IGN1cnJlbnRCdWZmZXJQdHIgPSBudWxsXG5cbmNvbnN0IFRJTUVPVVRfSEVBREVSUyA9IDFcbmNvbnN0IFRJTUVPVVRfQk9EWSA9IDJcbmNvbnN0IFRJTUVPVVRfSURMRSA9IDNcblxuY2xhc3MgUGFyc2VyIHtcbiAgY29uc3RydWN0b3IgKGNsaWVudCwgc29ja2V0LCB7IGV4cG9ydHMgfSkge1xuICAgIGFzc2VydChOdW1iZXIuaXNGaW5pdGUoY2xpZW50W2tNYXhIZWFkZXJzU2l6ZV0pICYmIGNsaWVudFtrTWF4SGVhZGVyc1NpemVdID4gMClcblxuICAgIHRoaXMubGxodHRwID0gZXhwb3J0c1xuICAgIHRoaXMucHRyID0gdGhpcy5sbGh0dHAubGxodHRwX2FsbG9jKGNvbnN0YW50cy5UWVBFLlJFU1BPTlNFKVxuICAgIHRoaXMuY2xpZW50ID0gY2xpZW50XG4gICAgdGhpcy5zb2NrZXQgPSBzb2NrZXRcbiAgICB0aGlzLnRpbWVvdXQgPSBudWxsXG4gICAgdGhpcy50aW1lb3V0VmFsdWUgPSBudWxsXG4gICAgdGhpcy50aW1lb3V0VHlwZSA9IG51bGxcbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBudWxsXG4gICAgdGhpcy5zdGF0dXNUZXh0ID0gJydcbiAgICB0aGlzLnVwZ3JhZGUgPSBmYWxzZVxuICAgIHRoaXMuaGVhZGVycyA9IFtdXG4gICAgdGhpcy5oZWFkZXJzU2l6ZSA9IDBcbiAgICB0aGlzLmhlYWRlcnNNYXhTaXplID0gY2xpZW50W2tNYXhIZWFkZXJzU2l6ZV1cbiAgICB0aGlzLnNob3VsZEtlZXBBbGl2ZSA9IGZhbHNlXG4gICAgdGhpcy5wYXVzZWQgPSBmYWxzZVxuICAgIHRoaXMucmVzdW1lID0gdGhpcy5yZXN1bWUuYmluZCh0aGlzKVxuXG4gICAgdGhpcy5ieXRlc1JlYWQgPSAwXG5cbiAgICB0aGlzLmtlZXBBbGl2ZSA9ICcnXG4gICAgdGhpcy5jb250ZW50TGVuZ3RoID0gJydcbiAgICB0aGlzLmNvbm5lY3Rpb24gPSAnJ1xuICAgIHRoaXMubWF4UmVzcG9uc2VTaXplID0gY2xpZW50W2tNYXhSZXNwb25zZVNpemVdXG4gIH1cblxuICBzZXRUaW1lb3V0ICh2YWx1ZSwgdHlwZSkge1xuICAgIHRoaXMudGltZW91dFR5cGUgPSB0eXBlXG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLnRpbWVvdXRWYWx1ZSkge1xuICAgICAgdGltZXJzLmNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpXG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgdGhpcy50aW1lb3V0ID0gdGltZXJzLnNldFRpbWVvdXQob25QYXJzZXJUaW1lb3V0LCB2YWx1ZSwgdGhpcylcbiAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIGVsc2U6IG9ubHkgZm9yIGplc3RcbiAgICAgICAgaWYgKHRoaXMudGltZW91dC51bnJlZikge1xuICAgICAgICAgIHRoaXMudGltZW91dC51bnJlZigpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudGltZW91dCA9IG51bGxcbiAgICAgIH1cbiAgICAgIHRoaXMudGltZW91dFZhbHVlID0gdmFsdWVcbiAgICB9IGVsc2UgaWYgKHRoaXMudGltZW91dCkge1xuICAgICAgLy8gaXN0YW5idWwgaWdub3JlIGVsc2U6IG9ubHkgZm9yIGplc3RcbiAgICAgIGlmICh0aGlzLnRpbWVvdXQucmVmcmVzaCkge1xuICAgICAgICB0aGlzLnRpbWVvdXQucmVmcmVzaCgpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmVzdW1lICgpIHtcbiAgICBpZiAodGhpcy5zb2NrZXQuZGVzdHJveWVkIHx8ICF0aGlzLnBhdXNlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgYXNzZXJ0KHRoaXMucHRyICE9IG51bGwpXG4gICAgYXNzZXJ0KGN1cnJlbnRQYXJzZXIgPT0gbnVsbClcblxuICAgIHRoaXMubGxodHRwLmxsaHR0cF9yZXN1bWUodGhpcy5wdHIpXG5cbiAgICBhc3NlcnQodGhpcy50aW1lb3V0VHlwZSA9PT0gVElNRU9VVF9CT0RZKVxuICAgIGlmICh0aGlzLnRpbWVvdXQpIHtcbiAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBvbmx5IGZvciBqZXN0XG4gICAgICBpZiAodGhpcy50aW1lb3V0LnJlZnJlc2gpIHtcbiAgICAgICAgdGhpcy50aW1lb3V0LnJlZnJlc2goKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucGF1c2VkID0gZmFsc2VcbiAgICB0aGlzLmV4ZWN1dGUodGhpcy5zb2NrZXQucmVhZCgpIHx8IEVNUFRZX0JVRikgLy8gRmx1c2ggcGFyc2VyLlxuICAgIHRoaXMucmVhZE1vcmUoKVxuICB9XG5cbiAgcmVhZE1vcmUgKCkge1xuICAgIHdoaWxlICghdGhpcy5wYXVzZWQgJiYgdGhpcy5wdHIpIHtcbiAgICAgIGNvbnN0IGNodW5rID0gdGhpcy5zb2NrZXQucmVhZCgpXG4gICAgICBpZiAoY2h1bmsgPT09IG51bGwpIHtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIHRoaXMuZXhlY3V0ZShjaHVuaylcbiAgICB9XG4gIH1cblxuICBleGVjdXRlIChkYXRhKSB7XG4gICAgYXNzZXJ0KHRoaXMucHRyICE9IG51bGwpXG4gICAgYXNzZXJ0KGN1cnJlbnRQYXJzZXIgPT0gbnVsbClcbiAgICBhc3NlcnQoIXRoaXMucGF1c2VkKVxuXG4gICAgY29uc3QgeyBzb2NrZXQsIGxsaHR0cCB9ID0gdGhpc1xuXG4gICAgaWYgKGRhdGEubGVuZ3RoID4gY3VycmVudEJ1ZmZlclNpemUpIHtcbiAgICAgIGlmIChjdXJyZW50QnVmZmVyUHRyKSB7XG4gICAgICAgIGxsaHR0cC5mcmVlKGN1cnJlbnRCdWZmZXJQdHIpXG4gICAgICB9XG4gICAgICBjdXJyZW50QnVmZmVyU2l6ZSA9IE1hdGguY2VpbChkYXRhLmxlbmd0aCAvIDQwOTYpICogNDA5NlxuICAgICAgY3VycmVudEJ1ZmZlclB0ciA9IGxsaHR0cC5tYWxsb2MoY3VycmVudEJ1ZmZlclNpemUpXG4gICAgfVxuXG4gICAgbmV3IFVpbnQ4QXJyYXkobGxodHRwLm1lbW9yeS5idWZmZXIsIGN1cnJlbnRCdWZmZXJQdHIsIGN1cnJlbnRCdWZmZXJTaXplKS5zZXQoZGF0YSlcblxuICAgIC8vIENhbGwgYGV4ZWN1dGVgIG9uIHRoZSB3YXNtIHBhcnNlci5cbiAgICAvLyBXZSBwYXNzIHRoZSBgbGxodHRwX3BhcnNlcmAgcG9pbnRlciBhZGRyZXNzLCB0aGUgcG9pbnRlciBhZGRyZXNzIG9mIGJ1ZmZlciB2aWV3IGRhdGEsXG4gICAgLy8gYW5kIGZpbmFsbHkgdGhlIGxlbmd0aCBvZiBieXRlcyB0byBwYXJzZS5cbiAgICAvLyBUaGUgcmV0dXJuIHZhbHVlIGlzIGFuIGVycm9yIGNvZGUgb3IgYGNvbnN0YW50cy5FUlJPUi5PS2AuXG4gICAgdHJ5IHtcbiAgICAgIGxldCByZXRcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY3VycmVudEJ1ZmZlclJlZiA9IGRhdGFcbiAgICAgICAgY3VycmVudFBhcnNlciA9IHRoaXNcbiAgICAgICAgcmV0ID0gbGxodHRwLmxsaHR0cF9leGVjdXRlKHRoaXMucHRyLCBjdXJyZW50QnVmZmVyUHRyLCBkYXRhLmxlbmd0aClcbiAgICAgICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY2F0Y2ggKi9cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogZGlmZmljdWx0IHRvIG1ha2UgYSB0ZXN0IGNhc2UgZm9yICovXG4gICAgICAgIHRocm93IGVyclxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgY3VycmVudFBhcnNlciA9IG51bGxcbiAgICAgICAgY3VycmVudEJ1ZmZlclJlZiA9IG51bGxcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb2Zmc2V0ID0gbGxodHRwLmxsaHR0cF9nZXRfZXJyb3JfcG9zKHRoaXMucHRyKSAtIGN1cnJlbnRCdWZmZXJQdHJcblxuICAgICAgaWYgKHJldCA9PT0gY29uc3RhbnRzLkVSUk9SLlBBVVNFRF9VUEdSQURFKSB7XG4gICAgICAgIHRoaXMub25VcGdyYWRlKGRhdGEuc2xpY2Uob2Zmc2V0KSlcbiAgICAgIH0gZWxzZSBpZiAocmV0ID09PSBjb25zdGFudHMuRVJST1IuUEFVU0VEKSB7XG4gICAgICAgIHRoaXMucGF1c2VkID0gdHJ1ZVxuICAgICAgICBzb2NrZXQudW5zaGlmdChkYXRhLnNsaWNlKG9mZnNldCkpXG4gICAgICB9IGVsc2UgaWYgKHJldCAhPT0gY29uc3RhbnRzLkVSUk9SLk9LKSB7XG4gICAgICAgIGNvbnN0IHB0ciA9IGxsaHR0cC5sbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbih0aGlzLnB0cilcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSAnJ1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogZGlmZmljdWx0IHRvIG1ha2UgYSB0ZXN0IGNhc2UgZm9yICovXG4gICAgICAgIGlmIChwdHIpIHtcbiAgICAgICAgICBjb25zdCBsZW4gPSBuZXcgVWludDhBcnJheShsbGh0dHAubWVtb3J5LmJ1ZmZlciwgcHRyKS5pbmRleE9mKDApXG4gICAgICAgICAgbWVzc2FnZSA9XG4gICAgICAgICAgICAnUmVzcG9uc2UgZG9lcyBub3QgbWF0Y2ggdGhlIEhUVFAvMS4xIHByb3RvY29sICgnICtcbiAgICAgICAgICAgIEJ1ZmZlci5mcm9tKGxsaHR0cC5tZW1vcnkuYnVmZmVyLCBwdHIsIGxlbikudG9TdHJpbmcoKSArXG4gICAgICAgICAgICAnKSdcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgSFRUUFBhcnNlckVycm9yKG1lc3NhZ2UsIGNvbnN0YW50cy5FUlJPUltyZXRdLCBkYXRhLnNsaWNlKG9mZnNldCkpXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBlcnIpXG4gICAgfVxuICB9XG5cbiAgZGVzdHJveSAoKSB7XG4gICAgYXNzZXJ0KHRoaXMucHRyICE9IG51bGwpXG4gICAgYXNzZXJ0KGN1cnJlbnRQYXJzZXIgPT0gbnVsbClcblxuICAgIHRoaXMubGxodHRwLmxsaHR0cF9mcmVlKHRoaXMucHRyKVxuICAgIHRoaXMucHRyID0gbnVsbFxuXG4gICAgdGltZXJzLmNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpXG4gICAgdGhpcy50aW1lb3V0ID0gbnVsbFxuICAgIHRoaXMudGltZW91dFZhbHVlID0gbnVsbFxuICAgIHRoaXMudGltZW91dFR5cGUgPSBudWxsXG5cbiAgICB0aGlzLnBhdXNlZCA9IGZhbHNlXG4gIH1cblxuICBvblN0YXR1cyAoYnVmKSB7XG4gICAgdGhpcy5zdGF0dXNUZXh0ID0gYnVmLnRvU3RyaW5nKClcbiAgfVxuXG4gIG9uTWVzc2FnZUJlZ2luICgpIHtcbiAgICBjb25zdCB7IHNvY2tldCwgY2xpZW50IH0gPSB0aGlzXG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogZGlmZmljdWx0IHRvIG1ha2UgYSB0ZXN0IGNhc2UgZm9yICovXG4gICAgaWYgKHNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdXVxuICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuICB9XG5cbiAgb25IZWFkZXJGaWVsZCAoYnVmKSB7XG4gICAgY29uc3QgbGVuID0gdGhpcy5oZWFkZXJzLmxlbmd0aFxuXG4gICAgaWYgKChsZW4gJiAxKSA9PT0gMCkge1xuICAgICAgdGhpcy5oZWFkZXJzLnB1c2goYnVmKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhlYWRlcnNbbGVuIC0gMV0gPSBCdWZmZXIuY29uY2F0KFt0aGlzLmhlYWRlcnNbbGVuIC0gMV0sIGJ1Zl0pXG4gICAgfVxuXG4gICAgdGhpcy50cmFja0hlYWRlcihidWYubGVuZ3RoKVxuICB9XG5cbiAgb25IZWFkZXJWYWx1ZSAoYnVmKSB7XG4gICAgbGV0IGxlbiA9IHRoaXMuaGVhZGVycy5sZW5ndGhcblxuICAgIGlmICgobGVuICYgMSkgPT09IDEpIHtcbiAgICAgIHRoaXMuaGVhZGVycy5wdXNoKGJ1ZilcbiAgICAgIGxlbiArPSAxXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGVhZGVyc1tsZW4gLSAxXSA9IEJ1ZmZlci5jb25jYXQoW3RoaXMuaGVhZGVyc1tsZW4gLSAxXSwgYnVmXSlcbiAgICB9XG5cbiAgICBjb25zdCBrZXkgPSB0aGlzLmhlYWRlcnNbbGVuIC0gMl1cbiAgICBpZiAoa2V5Lmxlbmd0aCA9PT0gMTAgJiYga2V5LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT0gJ2tlZXAtYWxpdmUnKSB7XG4gICAgICB0aGlzLmtlZXBBbGl2ZSArPSBidWYudG9TdHJpbmcoKVxuICAgIH0gZWxzZSBpZiAoa2V5Lmxlbmd0aCA9PT0gMTAgJiYga2V5LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT0gJ2Nvbm5lY3Rpb24nKSB7XG4gICAgICB0aGlzLmNvbm5lY3Rpb24gKz0gYnVmLnRvU3RyaW5nKClcbiAgICB9IGVsc2UgaWYgKGtleS5sZW5ndGggPT09IDE0ICYmIGtleS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT09ICdjb250ZW50LWxlbmd0aCcpIHtcbiAgICAgIHRoaXMuY29udGVudExlbmd0aCArPSBidWYudG9TdHJpbmcoKVxuICAgIH1cblxuICAgIHRoaXMudHJhY2tIZWFkZXIoYnVmLmxlbmd0aClcbiAgfVxuXG4gIHRyYWNrSGVhZGVyIChsZW4pIHtcbiAgICB0aGlzLmhlYWRlcnNTaXplICs9IGxlblxuICAgIGlmICh0aGlzLmhlYWRlcnNTaXplID49IHRoaXMuaGVhZGVyc01heFNpemUpIHtcbiAgICAgIHV0aWwuZGVzdHJveSh0aGlzLnNvY2tldCwgbmV3IEhlYWRlcnNPdmVyZmxvd0Vycm9yKCkpXG4gICAgfVxuICB9XG5cbiAgb25VcGdyYWRlIChoZWFkKSB7XG4gICAgY29uc3QgeyB1cGdyYWRlLCBjbGllbnQsIHNvY2tldCwgaGVhZGVycywgc3RhdHVzQ29kZSB9ID0gdGhpc1xuXG4gICAgYXNzZXJ0KHVwZ3JhZGUpXG5cbiAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XV1cbiAgICBhc3NlcnQocmVxdWVzdClcblxuICAgIGFzc2VydCghc29ja2V0LmRlc3Ryb3llZClcbiAgICBhc3NlcnQoc29ja2V0ID09PSBjbGllbnRba1NvY2tldF0pXG4gICAgYXNzZXJ0KCF0aGlzLnBhdXNlZClcbiAgICBhc3NlcnQocmVxdWVzdC51cGdyYWRlIHx8IHJlcXVlc3QubWV0aG9kID09PSAnQ09OTkVDVCcpXG5cbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBudWxsXG4gICAgdGhpcy5zdGF0dXNUZXh0ID0gJydcbiAgICB0aGlzLnNob3VsZEtlZXBBbGl2ZSA9IG51bGxcblxuICAgIGFzc2VydCh0aGlzLmhlYWRlcnMubGVuZ3RoICUgMiA9PT0gMClcbiAgICB0aGlzLmhlYWRlcnMgPSBbXVxuICAgIHRoaXMuaGVhZGVyc1NpemUgPSAwXG5cbiAgICBzb2NrZXQudW5zaGlmdChoZWFkKVxuXG4gICAgc29ja2V0W2tQYXJzZXJdLmRlc3Ryb3koKVxuICAgIHNvY2tldFtrUGFyc2VyXSA9IG51bGxcblxuICAgIHNvY2tldFtrQ2xpZW50XSA9IG51bGxcbiAgICBzb2NrZXRba0Vycm9yXSA9IG51bGxcbiAgICBzb2NrZXRcbiAgICAgIC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvblNvY2tldEVycm9yKVxuICAgICAgLnJlbW92ZUxpc3RlbmVyKCdyZWFkYWJsZScsIG9uU29ja2V0UmVhZGFibGUpXG4gICAgICAucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIG9uU29ja2V0RW5kKVxuICAgICAgLnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uU29ja2V0Q2xvc2UpXG5cbiAgICBjbGllbnRba1NvY2tldF0gPSBudWxsXG4gICAgY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XSsrXSA9IG51bGxcbiAgICBjbGllbnQuZW1pdCgnZGlzY29ubmVjdCcsIGNsaWVudFtrVXJsXSwgW2NsaWVudF0sIG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoJ3VwZ3JhZGUnKSlcblxuICAgIHRyeSB7XG4gICAgICByZXF1ZXN0Lm9uVXBncmFkZShzdGF0dXNDb2RlLCBoZWFkZXJzLCBzb2NrZXQpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBlcnIpXG4gICAgfVxuXG4gICAgcmVzdW1lKGNsaWVudClcbiAgfVxuXG4gIG9uSGVhZGVyc0NvbXBsZXRlIChzdGF0dXNDb2RlLCB1cGdyYWRlLCBzaG91bGRLZWVwQWxpdmUpIHtcbiAgICBjb25zdCB7IGNsaWVudCwgc29ja2V0LCBoZWFkZXJzLCBzdGF0dXNUZXh0IH0gPSB0aGlzXG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogZGlmZmljdWx0IHRvIG1ha2UgYSB0ZXN0IGNhc2UgZm9yICovXG4gICAgaWYgKHNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdXVxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IGRpZmZpY3VsdCB0byBtYWtlIGEgdGVzdCBjYXNlIGZvciAqL1xuICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgYXNzZXJ0KCF0aGlzLnVwZ3JhZGUpXG4gICAgYXNzZXJ0KHRoaXMuc3RhdHVzQ29kZSA8IDIwMClcblxuICAgIGlmIChzdGF0dXNDb2RlID09PSAxMDApIHtcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBTb2NrZXRFcnJvcignYmFkIHJlc3BvbnNlJywgdXRpbC5nZXRTb2NrZXRJbmZvKHNvY2tldCkpKVxuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgLyogdGhpcyBjYW4gb25seSBoYXBwZW4gaWYgc2VydmVyIGlzIG1pc2JlaGF2aW5nICovXG4gICAgaWYgKHVwZ3JhZGUgJiYgIXJlcXVlc3QudXBncmFkZSkge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IFNvY2tldEVycm9yKCdiYWQgdXBncmFkZScsIHV0aWwuZ2V0U29ja2V0SW5mbyhzb2NrZXQpKSlcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0aGlzLnRpbWVvdXRUeXBlLCBUSU1FT1VUX0hFQURFUlMpXG5cbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBzdGF0dXNDb2RlXG4gICAgdGhpcy5zaG91bGRLZWVwQWxpdmUgPSAoXG4gICAgICBzaG91bGRLZWVwQWxpdmUgfHxcbiAgICAgIC8vIE92ZXJyaWRlIGxsaHR0cCB2YWx1ZSB3aGljaCBkb2VzIG5vdCBhbGxvdyBrZWVwQWxpdmUgZm9yIEhFQUQuXG4gICAgICAocmVxdWVzdC5tZXRob2QgPT09ICdIRUFEJyAmJiAhc29ja2V0W2tSZXNldF0gJiYgdGhpcy5jb25uZWN0aW9uLnRvTG93ZXJDYXNlKCkgPT09ICdrZWVwLWFsaXZlJylcbiAgICApXG5cbiAgICBpZiAodGhpcy5zdGF0dXNDb2RlID49IDIwMCkge1xuICAgICAgY29uc3QgYm9keVRpbWVvdXQgPSByZXF1ZXN0LmJvZHlUaW1lb3V0ICE9IG51bGxcbiAgICAgICAgPyByZXF1ZXN0LmJvZHlUaW1lb3V0XG4gICAgICAgIDogY2xpZW50W2tCb2R5VGltZW91dF1cbiAgICAgIHRoaXMuc2V0VGltZW91dChib2R5VGltZW91dCwgVElNRU9VVF9CT0RZKVxuICAgIH0gZWxzZSBpZiAodGhpcy50aW1lb3V0KSB7XG4gICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogb25seSBmb3IgamVzdFxuICAgICAgaWYgKHRoaXMudGltZW91dC5yZWZyZXNoKSB7XG4gICAgICAgIHRoaXMudGltZW91dC5yZWZyZXNoKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocmVxdWVzdC5tZXRob2QgPT09ICdDT05ORUNUJykge1xuICAgICAgYXNzZXJ0KGNsaWVudFtrUnVubmluZ10gPT09IDEpXG4gICAgICB0aGlzLnVwZ3JhZGUgPSB0cnVlXG4gICAgICByZXR1cm4gMlxuICAgIH1cblxuICAgIGlmICh1cGdyYWRlKSB7XG4gICAgICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA9PT0gMSlcbiAgICAgIHRoaXMudXBncmFkZSA9IHRydWVcbiAgICAgIHJldHVybiAyXG4gICAgfVxuXG4gICAgYXNzZXJ0KHRoaXMuaGVhZGVycy5sZW5ndGggJSAyID09PSAwKVxuICAgIHRoaXMuaGVhZGVycyA9IFtdXG4gICAgdGhpcy5oZWFkZXJzU2l6ZSA9IDBcblxuICAgIGlmICh0aGlzLnNob3VsZEtlZXBBbGl2ZSAmJiBjbGllbnRba1BpcGVsaW5pbmddKSB7XG4gICAgICBjb25zdCBrZWVwQWxpdmVUaW1lb3V0ID0gdGhpcy5rZWVwQWxpdmUgPyB1dGlsLnBhcnNlS2VlcEFsaXZlVGltZW91dCh0aGlzLmtlZXBBbGl2ZSkgOiBudWxsXG5cbiAgICAgIGlmIChrZWVwQWxpdmVUaW1lb3V0ICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgdGltZW91dCA9IE1hdGgubWluKFxuICAgICAgICAgIGtlZXBBbGl2ZVRpbWVvdXQgLSBjbGllbnRba0tlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGRdLFxuICAgICAgICAgIGNsaWVudFtrS2VlcEFsaXZlTWF4VGltZW91dF1cbiAgICAgICAgKVxuICAgICAgICBpZiAodGltZW91dCA8PSAwKSB7XG4gICAgICAgICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2xpZW50W2tLZWVwQWxpdmVUaW1lb3V0VmFsdWVdID0gdGltZW91dFxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjbGllbnRba0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZV0gPSBjbGllbnRba0tlZXBBbGl2ZURlZmF1bHRUaW1lb3V0XVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTdG9wIG1vcmUgcmVxdWVzdHMgZnJvbSBiZWluZyBkaXNwYXRjaGVkLlxuICAgICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gICAgfVxuXG4gICAgY29uc3QgcGF1c2UgPSByZXF1ZXN0Lm9uSGVhZGVycyhzdGF0dXNDb2RlLCBoZWFkZXJzLCB0aGlzLnJlc3VtZSwgc3RhdHVzVGV4dCkgPT09IGZhbHNlXG5cbiAgICBpZiAocmVxdWVzdC5hYm9ydGVkKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICBpZiAocmVxdWVzdC5tZXRob2QgPT09ICdIRUFEJykge1xuICAgICAgcmV0dXJuIDFcbiAgICB9XG5cbiAgICBpZiAoc3RhdHVzQ29kZSA8IDIwMCkge1xuICAgICAgcmV0dXJuIDFcbiAgICB9XG5cbiAgICBpZiAoc29ja2V0W2tCbG9ja2luZ10pIHtcbiAgICAgIHNvY2tldFtrQmxvY2tpbmddID0gZmFsc2VcbiAgICAgIHJlc3VtZShjbGllbnQpXG4gICAgfVxuXG4gICAgcmV0dXJuIHBhdXNlID8gY29uc3RhbnRzLkVSUk9SLlBBVVNFRCA6IDBcbiAgfVxuXG4gIG9uQm9keSAoYnVmKSB7XG4gICAgY29uc3QgeyBjbGllbnQsIHNvY2tldCwgc3RhdHVzQ29kZSwgbWF4UmVzcG9uc2VTaXplIH0gPSB0aGlzXG5cbiAgICBpZiAoc29ja2V0LmRlc3Ryb3llZCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdCA9IGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF1dXG4gICAgYXNzZXJ0KHJlcXVlc3QpXG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwodGhpcy50aW1lb3V0VHlwZSwgVElNRU9VVF9CT0RZKVxuICAgIGlmICh0aGlzLnRpbWVvdXQpIHtcbiAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBvbmx5IGZvciBqZXN0XG4gICAgICBpZiAodGhpcy50aW1lb3V0LnJlZnJlc2gpIHtcbiAgICAgICAgdGhpcy50aW1lb3V0LnJlZnJlc2goKVxuICAgICAgfVxuICAgIH1cblxuICAgIGFzc2VydChzdGF0dXNDb2RlID49IDIwMClcblxuICAgIGlmIChtYXhSZXNwb25zZVNpemUgPiAtMSAmJiB0aGlzLmJ5dGVzUmVhZCArIGJ1Zi5sZW5ndGggPiBtYXhSZXNwb25zZVNpemUpIHtcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBSZXNwb25zZUV4Y2VlZGVkTWF4U2l6ZUVycm9yKCkpXG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICB0aGlzLmJ5dGVzUmVhZCArPSBidWYubGVuZ3RoXG5cbiAgICBpZiAocmVxdWVzdC5vbkRhdGEoYnVmKSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBjb25zdGFudHMuRVJST1IuUEFVU0VEXG4gICAgfVxuICB9XG5cbiAgb25NZXNzYWdlQ29tcGxldGUgKCkge1xuICAgIGNvbnN0IHsgY2xpZW50LCBzb2NrZXQsIHN0YXR1c0NvZGUsIHVwZ3JhZGUsIGhlYWRlcnMsIGNvbnRlbnRMZW5ndGgsIGJ5dGVzUmVhZCwgc2hvdWxkS2VlcEFsaXZlIH0gPSB0aGlzXG5cbiAgICBpZiAoc29ja2V0LmRlc3Ryb3llZCAmJiAoIXN0YXR1c0NvZGUgfHwgc2hvdWxkS2VlcEFsaXZlKSkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgaWYgKHVwZ3JhZGUpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdXVxuICAgIGFzc2VydChyZXF1ZXN0KVxuXG4gICAgYXNzZXJ0KHN0YXR1c0NvZGUgPj0gMTAwKVxuXG4gICAgdGhpcy5zdGF0dXNDb2RlID0gbnVsbFxuICAgIHRoaXMuc3RhdHVzVGV4dCA9ICcnXG4gICAgdGhpcy5ieXRlc1JlYWQgPSAwXG4gICAgdGhpcy5jb250ZW50TGVuZ3RoID0gJydcbiAgICB0aGlzLmtlZXBBbGl2ZSA9ICcnXG4gICAgdGhpcy5jb25uZWN0aW9uID0gJydcblxuICAgIGFzc2VydCh0aGlzLmhlYWRlcnMubGVuZ3RoICUgMiA9PT0gMClcbiAgICB0aGlzLmhlYWRlcnMgPSBbXVxuICAgIHRoaXMuaGVhZGVyc1NpemUgPSAwXG5cbiAgICBpZiAoc3RhdHVzQ29kZSA8IDIwMCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IHNob3VsZCBiZSBoYW5kbGVkIGJ5IGxsaHR0cD8gKi9cbiAgICBpZiAocmVxdWVzdC5tZXRob2QgIT09ICdIRUFEJyAmJiBjb250ZW50TGVuZ3RoICYmIGJ5dGVzUmVhZCAhPT0gcGFyc2VJbnQoY29udGVudExlbmd0aCwgMTApKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgUmVzcG9uc2VDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpKVxuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgcmVxdWVzdC5vbkNvbXBsZXRlKGhlYWRlcnMpXG5cbiAgICBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdKytdID0gbnVsbFxuXG4gICAgaWYgKHNvY2tldFtrV3JpdGluZ10pIHtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjbGllbnRba1J1bm5pbmddLCAwKVxuICAgICAgLy8gUmVzcG9uc2UgY29tcGxldGVkIGJlZm9yZSByZXF1ZXN0LlxuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEluZm9ybWF0aW9uYWxFcnJvcigncmVzZXQnKSlcbiAgICAgIHJldHVybiBjb25zdGFudHMuRVJST1IuUEFVU0VEXG4gICAgfSBlbHNlIGlmICghc2hvdWxkS2VlcEFsaXZlKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgSW5mb3JtYXRpb25hbEVycm9yKCdyZXNldCcpKVxuICAgICAgcmV0dXJuIGNvbnN0YW50cy5FUlJPUi5QQVVTRURcbiAgICB9IGVsc2UgaWYgKHNvY2tldFtrUmVzZXRdICYmIGNsaWVudFtrUnVubmluZ10gPT09IDApIHtcbiAgICAgIC8vIERlc3Ryb3kgc29ja2V0IG9uY2UgYWxsIHJlcXVlc3RzIGhhdmUgY29tcGxldGVkLlxuICAgICAgLy8gVGhlIHJlcXVlc3QgYXQgdGhlIHRhaWwgb2YgdGhlIHBpcGVsaW5lIGlzIHRoZSBvbmVcbiAgICAgIC8vIHRoYXQgcmVxdWVzdGVkIHJlc2V0IGFuZCBubyBmdXJ0aGVyIHJlcXVlc3RzIHNob3VsZFxuICAgICAgLy8gaGF2ZSBiZWVuIHF1ZXVlZCBzaW5jZSB0aGVuLlxuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEluZm9ybWF0aW9uYWxFcnJvcigncmVzZXQnKSlcbiAgICAgIHJldHVybiBjb25zdGFudHMuRVJST1IuUEFVU0VEXG4gICAgfSBlbHNlIGlmIChjbGllbnRba1BpcGVsaW5pbmddID09PSAxKSB7XG4gICAgICAvLyBXZSBtdXN0IHdhaXQgYSBmdWxsIGV2ZW50IGxvb3AgY3ljbGUgdG8gcmV1c2UgdGhpcyBzb2NrZXQgdG8gbWFrZSBzdXJlXG4gICAgICAvLyB0aGF0IG5vbi1zcGVjIGNvbXBsaWFudCBzZXJ2ZXJzIGFyZSBub3QgY2xvc2luZyB0aGUgY29ubmVjdGlvbiBldmVuIGlmIHRoZXlcbiAgICAgIC8vIHNhaWQgdGhleSB3b24ndC5cbiAgICAgIHNldEltbWVkaWF0ZShyZXN1bWUsIGNsaWVudClcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdW1lKGNsaWVudClcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gb25QYXJzZXJUaW1lb3V0IChwYXJzZXIpIHtcbiAgY29uc3QgeyBzb2NrZXQsIHRpbWVvdXRUeXBlLCBjbGllbnQgfSA9IHBhcnNlclxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmICh0aW1lb3V0VHlwZSA9PT0gVElNRU9VVF9IRUFERVJTKSB7XG4gICAgaWYgKCFzb2NrZXRba1dyaXRpbmddIHx8IHNvY2tldC53cml0YWJsZU5lZWREcmFpbiB8fCBjbGllbnRba1J1bm5pbmddID4gMSkge1xuICAgICAgYXNzZXJ0KCFwYXJzZXIucGF1c2VkLCAnY2Fubm90IGJlIHBhdXNlZCB3aGlsZSB3YWl0aW5nIGZvciBoZWFkZXJzJylcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBIZWFkZXJzVGltZW91dEVycm9yKCkpXG4gICAgfVxuICB9IGVsc2UgaWYgKHRpbWVvdXRUeXBlID09PSBUSU1FT1VUX0JPRFkpIHtcbiAgICBpZiAoIXBhcnNlci5wYXVzZWQpIHtcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBCb2R5VGltZW91dEVycm9yKCkpXG4gICAgfVxuICB9IGVsc2UgaWYgKHRpbWVvdXRUeXBlID09PSBUSU1FT1VUX0lETEUpIHtcbiAgICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA9PT0gMCAmJiBjbGllbnRba0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZV0pXG4gICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEluZm9ybWF0aW9uYWxFcnJvcignc29ja2V0IGlkbGUgdGltZW91dCcpKVxuICB9XG59XG5cbmZ1bmN0aW9uIG9uU29ja2V0UmVhZGFibGUgKCkge1xuICBjb25zdCB7IFtrUGFyc2VyXTogcGFyc2VyIH0gPSB0aGlzXG4gIGlmIChwYXJzZXIpIHtcbiAgICBwYXJzZXIucmVhZE1vcmUoKVxuICB9XG59XG5cbmZ1bmN0aW9uIG9uU29ja2V0RXJyb3IgKGVycikge1xuICBjb25zdCB7IFtrQ2xpZW50XTogY2xpZW50LCBba1BhcnNlcl06IHBhcnNlciB9ID0gdGhpc1xuXG4gIGFzc2VydChlcnIuY29kZSAhPT0gJ0VSUl9UTFNfQ0VSVF9BTFROQU1FX0lOVkFMSUQnKVxuXG4gIGlmIChjbGllbnRba0hUVFBDb25uVmVyc2lvbl0gIT09ICdoMicpIHtcbiAgICAvLyBPbiBNYWMgT1MsIHdlIGdldCBhbiBFQ09OTlJFU0VUIGV2ZW4gaWYgdGhlcmUgaXMgYSBmdWxsIGJvZHkgdG8gYmUgZm9yd2FyZGVkXG4gICAgLy8gdG8gdGhlIHVzZXIuXG4gICAgaWYgKGVyci5jb2RlID09PSAnRUNPTk5SRVNFVCcgJiYgcGFyc2VyLnN0YXR1c0NvZGUgJiYgIXBhcnNlci5zaG91bGRLZWVwQWxpdmUpIHtcbiAgICAgIC8vIFdlIHRyZWF0IGFsbCBpbmNvbWluZyBkYXRhIHNvIGZvciBhcyBhIHZhbGlkIHJlc3BvbnNlLlxuICAgICAgcGFyc2VyLm9uTWVzc2FnZUNvbXBsZXRlKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgfVxuXG4gIHRoaXNba0Vycm9yXSA9IGVyclxuXG4gIG9uRXJyb3IodGhpc1trQ2xpZW50XSwgZXJyKVxufVxuXG5mdW5jdGlvbiBvbkVycm9yIChjbGllbnQsIGVycikge1xuICBpZiAoXG4gICAgY2xpZW50W2tSdW5uaW5nXSA9PT0gMCAmJlxuICAgIGVyci5jb2RlICE9PSAnVU5EX0VSUl9JTkZPJyAmJlxuICAgIGVyci5jb2RlICE9PSAnVU5EX0VSUl9TT0NLRVQnXG4gICkge1xuICAgIC8vIEVycm9yIGlzIG5vdCBjYXVzZWQgYnkgcnVubmluZyByZXF1ZXN0IGFuZCBub3QgYSByZWNvdmVyYWJsZVxuICAgIC8vIHNvY2tldCBlcnJvci5cblxuICAgIGFzc2VydChjbGllbnRba1BlbmRpbmdJZHhdID09PSBjbGllbnRba1J1bm5pbmdJZHhdKVxuXG4gICAgY29uc3QgcmVxdWVzdHMgPSBjbGllbnRba1F1ZXVlXS5zcGxpY2UoY2xpZW50W2tSdW5uaW5nSWR4XSlcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcXVlc3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCByZXF1ZXN0ID0gcmVxdWVzdHNbaV1cbiAgICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIGVycilcbiAgICB9XG4gICAgYXNzZXJ0KGNsaWVudFtrU2l6ZV0gPT09IDApXG4gIH1cbn1cblxuZnVuY3Rpb24gb25Tb2NrZXRFbmQgKCkge1xuICBjb25zdCB7IFtrUGFyc2VyXTogcGFyc2VyLCBba0NsaWVudF06IGNsaWVudCB9ID0gdGhpc1xuXG4gIGlmIChjbGllbnRba0hUVFBDb25uVmVyc2lvbl0gIT09ICdoMicpIHtcbiAgICBpZiAocGFyc2VyLnN0YXR1c0NvZGUgJiYgIXBhcnNlci5zaG91bGRLZWVwQWxpdmUpIHtcbiAgICAgIC8vIFdlIHRyZWF0IGFsbCBpbmNvbWluZyBkYXRhIHNvIGZhciBhcyBhIHZhbGlkIHJlc3BvbnNlLlxuICAgICAgcGFyc2VyLm9uTWVzc2FnZUNvbXBsZXRlKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgfVxuXG4gIHV0aWwuZGVzdHJveSh0aGlzLCBuZXcgU29ja2V0RXJyb3IoJ290aGVyIHNpZGUgY2xvc2VkJywgdXRpbC5nZXRTb2NrZXRJbmZvKHRoaXMpKSlcbn1cblxuZnVuY3Rpb24gb25Tb2NrZXRDbG9zZSAoKSB7XG4gIGNvbnN0IHsgW2tDbGllbnRdOiBjbGllbnQsIFtrUGFyc2VyXTogcGFyc2VyIH0gPSB0aGlzXG5cbiAgaWYgKGNsaWVudFtrSFRUUENvbm5WZXJzaW9uXSA9PT0gJ2gxJyAmJiBwYXJzZXIpIHtcbiAgICBpZiAoIXRoaXNba0Vycm9yXSAmJiBwYXJzZXIuc3RhdHVzQ29kZSAmJiAhcGFyc2VyLnNob3VsZEtlZXBBbGl2ZSkge1xuICAgICAgLy8gV2UgdHJlYXQgYWxsIGluY29taW5nIGRhdGEgc28gZmFyIGFzIGEgdmFsaWQgcmVzcG9uc2UuXG4gICAgICBwYXJzZXIub25NZXNzYWdlQ29tcGxldGUoKVxuICAgIH1cblxuICAgIHRoaXNba1BhcnNlcl0uZGVzdHJveSgpXG4gICAgdGhpc1trUGFyc2VyXSA9IG51bGxcbiAgfVxuXG4gIGNvbnN0IGVyciA9IHRoaXNba0Vycm9yXSB8fCBuZXcgU29ja2V0RXJyb3IoJ2Nsb3NlZCcsIHV0aWwuZ2V0U29ja2V0SW5mbyh0aGlzKSlcblxuICBjbGllbnRba1NvY2tldF0gPSBudWxsXG5cbiAgaWYgKGNsaWVudC5kZXN0cm95ZWQpIHtcbiAgICBhc3NlcnQoY2xpZW50W2tQZW5kaW5nXSA9PT0gMClcblxuICAgIC8vIEZhaWwgZW50aXJlIHF1ZXVlLlxuICAgIGNvbnN0IHJlcXVlc3RzID0gY2xpZW50W2tRdWV1ZV0uc3BsaWNlKGNsaWVudFtrUnVubmluZ0lkeF0pXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXF1ZXN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgcmVxdWVzdCA9IHJlcXVlc3RzW2ldXG4gICAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIpXG4gICAgfVxuICB9IGVsc2UgaWYgKGNsaWVudFtrUnVubmluZ10gPiAwICYmIGVyci5jb2RlICE9PSAnVU5EX0VSUl9JTkZPJykge1xuICAgIC8vIEZhaWwgaGVhZCBvZiBwaXBlbGluZS5cbiAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XV1cbiAgICBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdKytdID0gbnVsbFxuXG4gICAgZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyKVxuICB9XG5cbiAgY2xpZW50W2tQZW5kaW5nSWR4XSA9IGNsaWVudFtrUnVubmluZ0lkeF1cblxuICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA9PT0gMClcblxuICBjbGllbnQuZW1pdCgnZGlzY29ubmVjdCcsIGNsaWVudFtrVXJsXSwgW2NsaWVudF0sIGVycilcblxuICByZXN1bWUoY2xpZW50KVxufVxuXG5hc3luYyBmdW5jdGlvbiBjb25uZWN0IChjbGllbnQpIHtcbiAgYXNzZXJ0KCFjbGllbnRba0Nvbm5lY3RpbmddKVxuICBhc3NlcnQoIWNsaWVudFtrU29ja2V0XSlcblxuICBsZXQgeyBob3N0LCBob3N0bmFtZSwgcHJvdG9jb2wsIHBvcnQgfSA9IGNsaWVudFtrVXJsXVxuXG4gIC8vIFJlc29sdmUgaXB2NlxuICBpZiAoaG9zdG5hbWVbMF0gPT09ICdbJykge1xuICAgIGNvbnN0IGlkeCA9IGhvc3RuYW1lLmluZGV4T2YoJ10nKVxuXG4gICAgYXNzZXJ0KGlkeCAhPT0gLTEpXG4gICAgY29uc3QgaXAgPSBob3N0bmFtZS5zdWJzdHJpbmcoMSwgaWR4KVxuXG4gICAgYXNzZXJ0KG5ldC5pc0lQKGlwKSlcbiAgICBob3N0bmFtZSA9IGlwXG4gIH1cblxuICBjbGllbnRba0Nvbm5lY3RpbmddID0gdHJ1ZVxuXG4gIGlmIChjaGFubmVscy5iZWZvcmVDb25uZWN0Lmhhc1N1YnNjcmliZXJzKSB7XG4gICAgY2hhbm5lbHMuYmVmb3JlQ29ubmVjdC5wdWJsaXNoKHtcbiAgICAgIGNvbm5lY3RQYXJhbXM6IHtcbiAgICAgICAgaG9zdCxcbiAgICAgICAgaG9zdG5hbWUsXG4gICAgICAgIHByb3RvY29sLFxuICAgICAgICBwb3J0LFxuICAgICAgICBzZXJ2ZXJuYW1lOiBjbGllbnRba1NlcnZlck5hbWVdLFxuICAgICAgICBsb2NhbEFkZHJlc3M6IGNsaWVudFtrTG9jYWxBZGRyZXNzXVxuICAgICAgfSxcbiAgICAgIGNvbm5lY3RvcjogY2xpZW50W2tDb25uZWN0b3JdXG4gICAgfSlcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3Qgc29ja2V0ID0gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY2xpZW50W2tDb25uZWN0b3JdKHtcbiAgICAgICAgaG9zdCxcbiAgICAgICAgaG9zdG5hbWUsXG4gICAgICAgIHByb3RvY29sLFxuICAgICAgICBwb3J0LFxuICAgICAgICBzZXJ2ZXJuYW1lOiBjbGllbnRba1NlcnZlck5hbWVdLFxuICAgICAgICBsb2NhbEFkZHJlc3M6IGNsaWVudFtrTG9jYWxBZGRyZXNzXVxuICAgICAgfSwgKGVyciwgc29ja2V0KSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICByZWplY3QoZXJyKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc29sdmUoc29ja2V0KVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0pXG5cbiAgICBpZiAoY2xpZW50LmRlc3Ryb3llZCkge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldC5vbignZXJyb3InLCAoKSA9PiB7fSksIG5ldyBDbGllbnREZXN0cm95ZWRFcnJvcigpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY2xpZW50W2tDb25uZWN0aW5nXSA9IGZhbHNlXG5cbiAgICBhc3NlcnQoc29ja2V0KVxuXG4gICAgY29uc3QgaXNIMiA9IHNvY2tldC5hbHBuUHJvdG9jb2wgPT09ICdoMidcbiAgICBpZiAoaXNIMikge1xuICAgICAgaWYgKCFoMkV4cGVyaW1lbnRhbFdhcm5lZCkge1xuICAgICAgICBoMkV4cGVyaW1lbnRhbFdhcm5lZCA9IHRydWVcbiAgICAgICAgcHJvY2Vzcy5lbWl0V2FybmluZygnSDIgc3VwcG9ydCBpcyBleHBlcmltZW50YWwsIGV4cGVjdCB0aGVtIHRvIGNoYW5nZSBhdCBhbnkgdGltZS4nLCB7XG4gICAgICAgICAgY29kZTogJ1VORElDSS1IMidcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2Vzc2lvbiA9IGh0dHAyLmNvbm5lY3QoY2xpZW50W2tVcmxdLCB7XG4gICAgICAgIGNyZWF0ZUNvbm5lY3Rpb246ICgpID0+IHNvY2tldCxcbiAgICAgICAgcGVlck1heENvbmN1cnJlbnRTdHJlYW1zOiBjbGllbnRba0hUVFAyU2Vzc2lvblN0YXRlXS5tYXhDb25jdXJyZW50U3RyZWFtc1xuICAgICAgfSlcblxuICAgICAgY2xpZW50W2tIVFRQQ29ublZlcnNpb25dID0gJ2gyJ1xuICAgICAgc2Vzc2lvbltrQ2xpZW50XSA9IGNsaWVudFxuICAgICAgc2Vzc2lvbltrU29ja2V0XSA9IHNvY2tldFxuICAgICAgc2Vzc2lvbi5vbignZXJyb3InLCBvbkh0dHAyU2Vzc2lvbkVycm9yKVxuICAgICAgc2Vzc2lvbi5vbignZnJhbWVFcnJvcicsIG9uSHR0cDJGcmFtZUVycm9yKVxuICAgICAgc2Vzc2lvbi5vbignZW5kJywgb25IdHRwMlNlc3Npb25FbmQpXG4gICAgICBzZXNzaW9uLm9uKCdnb2F3YXknLCBvbkhUVFAyR29Bd2F5KVxuICAgICAgc2Vzc2lvbi5vbignY2xvc2UnLCBvblNvY2tldENsb3NlKVxuICAgICAgc2Vzc2lvbi51bnJlZigpXG5cbiAgICAgIGNsaWVudFtrSFRUUDJTZXNzaW9uXSA9IHNlc3Npb25cbiAgICAgIHNvY2tldFtrSFRUUDJTZXNzaW9uXSA9IHNlc3Npb25cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFsbGh0dHBJbnN0YW5jZSkge1xuICAgICAgICBsbGh0dHBJbnN0YW5jZSA9IGF3YWl0IGxsaHR0cFByb21pc2VcbiAgICAgICAgbGxodHRwUHJvbWlzZSA9IG51bGxcbiAgICAgIH1cblxuICAgICAgc29ja2V0W2tOb1JlZl0gPSBmYWxzZVxuICAgICAgc29ja2V0W2tXcml0aW5nXSA9IGZhbHNlXG4gICAgICBzb2NrZXRba1Jlc2V0XSA9IGZhbHNlXG4gICAgICBzb2NrZXRba0Jsb2NraW5nXSA9IGZhbHNlXG4gICAgICBzb2NrZXRba1BhcnNlcl0gPSBuZXcgUGFyc2VyKGNsaWVudCwgc29ja2V0LCBsbGh0dHBJbnN0YW5jZSlcbiAgICB9XG5cbiAgICBzb2NrZXRba0NvdW50ZXJdID0gMFxuICAgIHNvY2tldFtrTWF4UmVxdWVzdHNdID0gY2xpZW50W2tNYXhSZXF1ZXN0c11cbiAgICBzb2NrZXRba0NsaWVudF0gPSBjbGllbnRcbiAgICBzb2NrZXRba0Vycm9yXSA9IG51bGxcblxuICAgIHNvY2tldFxuICAgICAgLm9uKCdlcnJvcicsIG9uU29ja2V0RXJyb3IpXG4gICAgICAub24oJ3JlYWRhYmxlJywgb25Tb2NrZXRSZWFkYWJsZSlcbiAgICAgIC5vbignZW5kJywgb25Tb2NrZXRFbmQpXG4gICAgICAub24oJ2Nsb3NlJywgb25Tb2NrZXRDbG9zZSlcblxuICAgIGNsaWVudFtrU29ja2V0XSA9IHNvY2tldFxuXG4gICAgaWYgKGNoYW5uZWxzLmNvbm5lY3RlZC5oYXNTdWJzY3JpYmVycykge1xuICAgICAgY2hhbm5lbHMuY29ubmVjdGVkLnB1Ymxpc2goe1xuICAgICAgICBjb25uZWN0UGFyYW1zOiB7XG4gICAgICAgICAgaG9zdCxcbiAgICAgICAgICBob3N0bmFtZSxcbiAgICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgICBwb3J0LFxuICAgICAgICAgIHNlcnZlcm5hbWU6IGNsaWVudFtrU2VydmVyTmFtZV0sXG4gICAgICAgICAgbG9jYWxBZGRyZXNzOiBjbGllbnRba0xvY2FsQWRkcmVzc11cbiAgICAgICAgfSxcbiAgICAgICAgY29ubmVjdG9yOiBjbGllbnRba0Nvbm5lY3Rvcl0sXG4gICAgICAgIHNvY2tldFxuICAgICAgfSlcbiAgICB9XG4gICAgY2xpZW50LmVtaXQoJ2Nvbm5lY3QnLCBjbGllbnRba1VybF0sIFtjbGllbnRdKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoY2xpZW50LmRlc3Ryb3llZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY2xpZW50W2tDb25uZWN0aW5nXSA9IGZhbHNlXG5cbiAgICBpZiAoY2hhbm5lbHMuY29ubmVjdEVycm9yLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICBjaGFubmVscy5jb25uZWN0RXJyb3IucHVibGlzaCh7XG4gICAgICAgIGNvbm5lY3RQYXJhbXM6IHtcbiAgICAgICAgICBob3N0LFxuICAgICAgICAgIGhvc3RuYW1lLFxuICAgICAgICAgIHByb3RvY29sLFxuICAgICAgICAgIHBvcnQsXG4gICAgICAgICAgc2VydmVybmFtZTogY2xpZW50W2tTZXJ2ZXJOYW1lXSxcbiAgICAgICAgICBsb2NhbEFkZHJlc3M6IGNsaWVudFtrTG9jYWxBZGRyZXNzXVxuICAgICAgICB9LFxuICAgICAgICBjb25uZWN0b3I6IGNsaWVudFtrQ29ubmVjdG9yXSxcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAoZXJyLmNvZGUgPT09ICdFUlJfVExTX0NFUlRfQUxUTkFNRV9JTlZBTElEJykge1xuICAgICAgYXNzZXJ0KGNsaWVudFtrUnVubmluZ10gPT09IDApXG4gICAgICB3aGlsZSAoY2xpZW50W2tQZW5kaW5nXSA+IDAgJiYgY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tQZW5kaW5nSWR4XV0uc2VydmVybmFtZSA9PT0gY2xpZW50W2tTZXJ2ZXJOYW1lXSkge1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tQZW5kaW5nSWR4XSsrXVxuICAgICAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG9uRXJyb3IoY2xpZW50LCBlcnIpXG4gICAgfVxuXG4gICAgY2xpZW50LmVtaXQoJ2Nvbm5lY3Rpb25FcnJvcicsIGNsaWVudFtrVXJsXSwgW2NsaWVudF0sIGVycilcbiAgfVxuXG4gIHJlc3VtZShjbGllbnQpXG59XG5cbmZ1bmN0aW9uIGVtaXREcmFpbiAoY2xpZW50KSB7XG4gIGNsaWVudFtrTmVlZERyYWluXSA9IDBcbiAgY2xpZW50LmVtaXQoJ2RyYWluJywgY2xpZW50W2tVcmxdLCBbY2xpZW50XSlcbn1cblxuZnVuY3Rpb24gcmVzdW1lIChjbGllbnQsIHN5bmMpIHtcbiAgaWYgKGNsaWVudFtrUmVzdW1pbmddID09PSAyKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBjbGllbnRba1Jlc3VtaW5nXSA9IDJcblxuICBfcmVzdW1lKGNsaWVudCwgc3luYylcbiAgY2xpZW50W2tSZXN1bWluZ10gPSAwXG5cbiAgaWYgKGNsaWVudFtrUnVubmluZ0lkeF0gPiAyNTYpIHtcbiAgICBjbGllbnRba1F1ZXVlXS5zcGxpY2UoMCwgY2xpZW50W2tSdW5uaW5nSWR4XSlcbiAgICBjbGllbnRba1BlbmRpbmdJZHhdIC09IGNsaWVudFtrUnVubmluZ0lkeF1cbiAgICBjbGllbnRba1J1bm5pbmdJZHhdID0gMFxuICB9XG59XG5cbmZ1bmN0aW9uIF9yZXN1bWUgKGNsaWVudCwgc3luYykge1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIGlmIChjbGllbnQuZGVzdHJveWVkKSB7XG4gICAgICBhc3NlcnQoY2xpZW50W2tQZW5kaW5nXSA9PT0gMClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChjbGllbnRba0Nsb3NlZFJlc29sdmVdICYmICFjbGllbnRba1NpemVdKSB7XG4gICAgICBjbGllbnRba0Nsb3NlZFJlc29sdmVdKClcbiAgICAgIGNsaWVudFtrQ2xvc2VkUmVzb2x2ZV0gPSBudWxsXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBzb2NrZXQgPSBjbGllbnRba1NvY2tldF1cblxuICAgIGlmIChzb2NrZXQgJiYgIXNvY2tldC5kZXN0cm95ZWQgJiYgc29ja2V0LmFscG5Qcm90b2NvbCAhPT0gJ2gyJykge1xuICAgICAgaWYgKGNsaWVudFtrU2l6ZV0gPT09IDApIHtcbiAgICAgICAgaWYgKCFzb2NrZXRba05vUmVmXSAmJiBzb2NrZXQudW5yZWYpIHtcbiAgICAgICAgICBzb2NrZXQudW5yZWYoKVxuICAgICAgICAgIHNvY2tldFtrTm9SZWZdID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHNvY2tldFtrTm9SZWZdICYmIHNvY2tldC5yZWYpIHtcbiAgICAgICAgc29ja2V0LnJlZigpXG4gICAgICAgIHNvY2tldFtrTm9SZWZdID0gZmFsc2VcbiAgICAgIH1cblxuICAgICAgaWYgKGNsaWVudFtrU2l6ZV0gPT09IDApIHtcbiAgICAgICAgaWYgKHNvY2tldFtrUGFyc2VyXS50aW1lb3V0VHlwZSAhPT0gVElNRU9VVF9JRExFKSB7XG4gICAgICAgICAgc29ja2V0W2tQYXJzZXJdLnNldFRpbWVvdXQoY2xpZW50W2tLZWVwQWxpdmVUaW1lb3V0VmFsdWVdLCBUSU1FT1VUX0lETEUpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDAgJiYgc29ja2V0W2tQYXJzZXJdLnN0YXR1c0NvZGUgPCAyMDApIHtcbiAgICAgICAgaWYgKHNvY2tldFtrUGFyc2VyXS50aW1lb3V0VHlwZSAhPT0gVElNRU9VVF9IRUFERVJTKSB7XG4gICAgICAgICAgY29uc3QgcmVxdWVzdCA9IGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF1dXG4gICAgICAgICAgY29uc3QgaGVhZGVyc1RpbWVvdXQgPSByZXF1ZXN0LmhlYWRlcnNUaW1lb3V0ICE9IG51bGxcbiAgICAgICAgICAgID8gcmVxdWVzdC5oZWFkZXJzVGltZW91dFxuICAgICAgICAgICAgOiBjbGllbnRba0hlYWRlcnNUaW1lb3V0XVxuICAgICAgICAgIHNvY2tldFtrUGFyc2VyXS5zZXRUaW1lb3V0KGhlYWRlcnNUaW1lb3V0LCBUSU1FT1VUX0hFQURFUlMpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tCdXN5XSkge1xuICAgICAgY2xpZW50W2tOZWVkRHJhaW5dID0gMlxuICAgIH0gZWxzZSBpZiAoY2xpZW50W2tOZWVkRHJhaW5dID09PSAyKSB7XG4gICAgICBpZiAoc3luYykge1xuICAgICAgICBjbGllbnRba05lZWREcmFpbl0gPSAxXG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soZW1pdERyYWluLCBjbGllbnQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbWl0RHJhaW4oY2xpZW50KVxuICAgICAgfVxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tQZW5kaW5nXSA9PT0gMCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGNsaWVudFtrUnVubmluZ10gPj0gKGNsaWVudFtrUGlwZWxpbmluZ10gfHwgMSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1BlbmRpbmdJZHhdXVxuXG4gICAgaWYgKGNsaWVudFtrVXJsXS5wcm90b2NvbCA9PT0gJ2h0dHBzOicgJiYgY2xpZW50W2tTZXJ2ZXJOYW1lXSAhPT0gcmVxdWVzdC5zZXJ2ZXJuYW1lKSB7XG4gICAgICBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDApIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNsaWVudFtrU2VydmVyTmFtZV0gPSByZXF1ZXN0LnNlcnZlcm5hbWVcblxuICAgICAgaWYgKHNvY2tldCAmJiBzb2NrZXQuc2VydmVybmFtZSAhPT0gcmVxdWVzdC5zZXJ2ZXJuYW1lKSB7XG4gICAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoJ3NlcnZlcm5hbWUgY2hhbmdlZCcpKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tDb25uZWN0aW5nXSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKCFzb2NrZXQgJiYgIWNsaWVudFtrSFRUUDJTZXNzaW9uXSkge1xuICAgICAgY29ubmVjdChjbGllbnQpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoc29ja2V0LmRlc3Ryb3llZCB8fCBzb2NrZXRba1dyaXRpbmddIHx8IHNvY2tldFtrUmVzZXRdIHx8IHNvY2tldFtrQmxvY2tpbmddKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDAgJiYgIXJlcXVlc3QuaWRlbXBvdGVudCkge1xuICAgICAgLy8gTm9uLWlkZW1wb3RlbnQgcmVxdWVzdCBjYW5ub3QgYmUgcmV0cmllZC5cbiAgICAgIC8vIEVuc3VyZSB0aGF0IG5vIG90aGVyIHJlcXVlc3RzIGFyZSBpbmZsaWdodCBhbmRcbiAgICAgIC8vIGNvdWxkIGNhdXNlIGZhaWx1cmUuXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDAgJiYgKHJlcXVlc3QudXBncmFkZSB8fCByZXF1ZXN0Lm1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSkge1xuICAgICAgLy8gRG9uJ3QgZGlzcGF0Y2ggYW4gdXBncmFkZSB1bnRpbCBhbGwgcHJlY2VkaW5nIHJlcXVlc3RzIGhhdmUgY29tcGxldGVkLlxuICAgICAgLy8gQSBtaXNiZWhhdmluZyBzZXJ2ZXIgbWlnaHQgdXBncmFkZSB0aGUgY29ubmVjdGlvbiBiZWZvcmUgYWxsIHBpcGVsaW5lZFxuICAgICAgLy8gcmVxdWVzdCBoYXMgY29tcGxldGVkLlxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGNsaWVudFtrUnVubmluZ10gPiAwICYmIHV0aWwuYm9keUxlbmd0aChyZXF1ZXN0LmJvZHkpICE9PSAwICYmXG4gICAgICAodXRpbC5pc1N0cmVhbShyZXF1ZXN0LmJvZHkpIHx8IHV0aWwuaXNBc3luY0l0ZXJhYmxlKHJlcXVlc3QuYm9keSkpKSB7XG4gICAgICAvLyBSZXF1ZXN0IHdpdGggc3RyZWFtIG9yIGl0ZXJhdG9yIGJvZHkgY2FuIGVycm9yIHdoaWxlIG90aGVyIHJlcXVlc3RzXG4gICAgICAvLyBhcmUgaW5mbGlnaHQgYW5kIGluZGlyZWN0bHkgZXJyb3IgdGhvc2UgYXMgd2VsbC5cbiAgICAgIC8vIEVuc3VyZSB0aGlzIGRvZXNuJ3QgaGFwcGVuIGJ5IHdhaXRpbmcgZm9yIGluZmxpZ2h0XG4gICAgICAvLyB0byBjb21wbGV0ZSBiZWZvcmUgZGlzcGF0Y2hpbmcuXG5cbiAgICAgIC8vIFJlcXVlc3Qgd2l0aCBzdHJlYW0gb3IgaXRlcmF0b3IgYm9keSBjYW5ub3QgYmUgcmV0cmllZC5cbiAgICAgIC8vIEVuc3VyZSB0aGF0IG5vIG90aGVyIHJlcXVlc3RzIGFyZSBpbmZsaWdodCBhbmRcbiAgICAgIC8vIGNvdWxkIGNhdXNlIGZhaWx1cmUuXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIXJlcXVlc3QuYWJvcnRlZCAmJiB3cml0ZShjbGllbnQsIHJlcXVlc3QpKSB7XG4gICAgICBjbGllbnRba1BlbmRpbmdJZHhdKytcbiAgICB9IGVsc2Uge1xuICAgICAgY2xpZW50W2tRdWV1ZV0uc3BsaWNlKGNsaWVudFtrUGVuZGluZ0lkeF0sIDEpXG4gICAgfVxuICB9XG59XG5cbi8vIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM3MjMwI3NlY3Rpb24tMy4zLjJcbmZ1bmN0aW9uIHNob3VsZFNlbmRDb250ZW50TGVuZ3RoIChtZXRob2QpIHtcbiAgcmV0dXJuIG1ldGhvZCAhPT0gJ0dFVCcgJiYgbWV0aG9kICE9PSAnSEVBRCcgJiYgbWV0aG9kICE9PSAnT1BUSU9OUycgJiYgbWV0aG9kICE9PSAnVFJBQ0UnICYmIG1ldGhvZCAhPT0gJ0NPTk5FQ1QnXG59XG5cbmZ1bmN0aW9uIHdyaXRlIChjbGllbnQsIHJlcXVlc3QpIHtcbiAgaWYgKGNsaWVudFtrSFRUUENvbm5WZXJzaW9uXSA9PT0gJ2gyJykge1xuICAgIHdyaXRlSDIoY2xpZW50LCBjbGllbnRba0hUVFAyU2Vzc2lvbl0sIHJlcXVlc3QpXG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCB7IGJvZHksIG1ldGhvZCwgcGF0aCwgaG9zdCwgdXBncmFkZSwgaGVhZGVycywgYmxvY2tpbmcsIHJlc2V0IH0gPSByZXF1ZXN0XG5cbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi00LjMuMVxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTQuMy4yXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNC4zLjVcblxuICAvLyBTZW5kaW5nIGEgcGF5bG9hZCBib2R5IG9uIGEgcmVxdWVzdCB0aGF0IGRvZXMgbm90XG4gIC8vIGV4cGVjdCBpdCBjYW4gY2F1c2UgdW5kZWZpbmVkIGJlaGF2aW9yIG9uIHNvbWVcbiAgLy8gc2VydmVycyBhbmQgY29ycnVwdCBjb25uZWN0aW9uIHN0YXRlLiBEbyBub3RcbiAgLy8gcmUtdXNlIHRoZSBjb25uZWN0aW9uIGZvciBmdXJ0aGVyIHJlcXVlc3RzLlxuXG4gIGNvbnN0IGV4cGVjdHNQYXlsb2FkID0gKFxuICAgIG1ldGhvZCA9PT0gJ1BVVCcgfHxcbiAgICBtZXRob2QgPT09ICdQT1NUJyB8fFxuICAgIG1ldGhvZCA9PT0gJ1BBVENIJ1xuICApXG5cbiAgaWYgKGJvZHkgJiYgdHlwZW9mIGJvZHkucmVhZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIFRyeSB0byByZWFkIEVPRiBpbiBvcmRlciB0byBnZXQgbGVuZ3RoLlxuICAgIGJvZHkucmVhZCgwKVxuICB9XG5cbiAgY29uc3QgYm9keUxlbmd0aCA9IHV0aWwuYm9keUxlbmd0aChib2R5KVxuXG4gIGxldCBjb250ZW50TGVuZ3RoID0gYm9keUxlbmd0aFxuXG4gIGlmIChjb250ZW50TGVuZ3RoID09PSBudWxsKSB7XG4gICAgY29udGVudExlbmd0aCA9IHJlcXVlc3QuY29udGVudExlbmd0aFxuICB9XG5cbiAgaWYgKGNvbnRlbnRMZW5ndGggPT09IDAgJiYgIWV4cGVjdHNQYXlsb2FkKSB7XG4gICAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjMuMlxuICAgIC8vIEEgdXNlciBhZ2VudCBTSE9VTEQgTk9UIHNlbmQgYSBDb250ZW50LUxlbmd0aCBoZWFkZXIgZmllbGQgd2hlblxuICAgIC8vIHRoZSByZXF1ZXN0IG1lc3NhZ2UgZG9lcyBub3QgY29udGFpbiBhIHBheWxvYWQgYm9keSBhbmQgdGhlIG1ldGhvZFxuICAgIC8vIHNlbWFudGljcyBkbyBub3QgYW50aWNpcGF0ZSBzdWNoIGEgYm9keS5cblxuICAgIGNvbnRlbnRMZW5ndGggPSBudWxsXG4gIH1cblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMjA0NlxuICAvLyBBIHVzZXIgYWdlbnQgbWF5IHNlbmQgYSBDb250ZW50LUxlbmd0aCBoZWFkZXIgd2l0aCAwIHZhbHVlLCB0aGlzIHNob3VsZCBiZSBhbGxvd2VkLlxuICBpZiAoc2hvdWxkU2VuZENvbnRlbnRMZW5ndGgobWV0aG9kKSAmJiBjb250ZW50TGVuZ3RoID4gMCAmJiByZXF1ZXN0LmNvbnRlbnRMZW5ndGggIT09IG51bGwgJiYgcmVxdWVzdC5jb250ZW50TGVuZ3RoICE9PSBjb250ZW50TGVuZ3RoKSB7XG4gICAgaWYgKGNsaWVudFtrU3RyaWN0Q29udGVudExlbmd0aF0pIHtcbiAgICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKSlcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIHByb2Nlc3MuZW1pdFdhcm5pbmcobmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpKVxuICB9XG5cbiAgY29uc3Qgc29ja2V0ID0gY2xpZW50W2tTb2NrZXRdXG5cbiAgdHJ5IHtcbiAgICByZXF1ZXN0Lm9uQ29ubmVjdCgoZXJyKSA9PiB7XG4gICAgICBpZiAocmVxdWVzdC5hYm9ydGVkIHx8IHJlcXVlc3QuY29tcGxldGVkKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIgfHwgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKSlcblxuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEluZm9ybWF0aW9uYWxFcnJvcignYWJvcnRlZCcpKVxuICAgIH0pXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIGVycilcbiAgfVxuXG4gIGlmIChyZXF1ZXN0LmFib3J0ZWQpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlmIChtZXRob2QgPT09ICdIRUFEJykge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tY29sbGluYS91bmRpY2kvaXNzdWVzLzI1OFxuICAgIC8vIENsb3NlIGFmdGVyIGEgSEVBRCByZXF1ZXN0IHRvIGludGVyb3Agd2l0aCBtaXNiZWhhdmluZyBzZXJ2ZXJzXG4gICAgLy8gdGhhdCBtYXkgc2VuZCBhIGJvZHkgaW4gdGhlIHJlc3BvbnNlLlxuXG4gICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gIH1cblxuICBpZiAodXBncmFkZSB8fCBtZXRob2QgPT09ICdDT05ORUNUJykge1xuICAgIC8vIE9uIENPTk5FQ1Qgb3IgdXBncmFkZSwgYmxvY2sgcGlwZWxpbmUgZnJvbSBkaXNwYXRjaGluZyBmdXJ0aGVyXG4gICAgLy8gcmVxdWVzdHMgb24gdGhpcyBjb25uZWN0aW9uLlxuXG4gICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gIH1cblxuICBpZiAocmVzZXQgIT0gbnVsbCkge1xuICAgIHNvY2tldFtrUmVzZXRdID0gcmVzZXRcbiAgfVxuXG4gIGlmIChjbGllbnRba01heFJlcXVlc3RzXSAmJiBzb2NrZXRba0NvdW50ZXJdKysgPj0gY2xpZW50W2tNYXhSZXF1ZXN0c10pIHtcbiAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgfVxuXG4gIGlmIChibG9ja2luZykge1xuICAgIHNvY2tldFtrQmxvY2tpbmddID0gdHJ1ZVxuICB9XG5cbiAgbGV0IGhlYWRlciA9IGAke21ldGhvZH0gJHtwYXRofSBIVFRQLzEuMVxcclxcbmBcblxuICBpZiAodHlwZW9mIGhvc3QgPT09ICdzdHJpbmcnKSB7XG4gICAgaGVhZGVyICs9IGBob3N0OiAke2hvc3R9XFxyXFxuYFxuICB9IGVsc2Uge1xuICAgIGhlYWRlciArPSBjbGllbnRba0hvc3RIZWFkZXJdXG4gIH1cblxuICBpZiAodXBncmFkZSkge1xuICAgIGhlYWRlciArPSBgY29ubmVjdGlvbjogdXBncmFkZVxcclxcbnVwZ3JhZGU6ICR7dXBncmFkZX1cXHJcXG5gXG4gIH0gZWxzZSBpZiAoY2xpZW50W2tQaXBlbGluaW5nXSAmJiAhc29ja2V0W2tSZXNldF0pIHtcbiAgICBoZWFkZXIgKz0gJ2Nvbm5lY3Rpb246IGtlZXAtYWxpdmVcXHJcXG4nXG4gIH0gZWxzZSB7XG4gICAgaGVhZGVyICs9ICdjb25uZWN0aW9uOiBjbG9zZVxcclxcbidcbiAgfVxuXG4gIGlmIChoZWFkZXJzKSB7XG4gICAgaGVhZGVyICs9IGhlYWRlcnNcbiAgfVxuXG4gIGlmIChjaGFubmVscy5zZW5kSGVhZGVycy5oYXNTdWJzY3JpYmVycykge1xuICAgIGNoYW5uZWxzLnNlbmRIZWFkZXJzLnB1Ymxpc2goeyByZXF1ZXN0LCBoZWFkZXJzOiBoZWFkZXIsIHNvY2tldCB9KVxuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2U6IGFzc2VydGlvbiAqL1xuICBpZiAoIWJvZHkgfHwgYm9keUxlbmd0aCA9PT0gMCkge1xuICAgIGlmIChjb250ZW50TGVuZ3RoID09PSAwKSB7XG4gICAgICBzb2NrZXQud3JpdGUoYCR7aGVhZGVyfWNvbnRlbnQtbGVuZ3RoOiAwXFxyXFxuXFxyXFxuYCwgJ2xhdGluMScpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydChjb250ZW50TGVuZ3RoID09PSBudWxsLCAnbm8gYm9keSBtdXN0IG5vdCBoYXZlIGNvbnRlbnQgbGVuZ3RoJylcbiAgICAgIHNvY2tldC53cml0ZShgJHtoZWFkZXJ9XFxyXFxuYCwgJ2xhdGluMScpXG4gICAgfVxuICAgIHJlcXVlc3Qub25SZXF1ZXN0U2VudCgpXG4gIH0gZWxzZSBpZiAodXRpbC5pc0J1ZmZlcihib2R5KSkge1xuICAgIGFzc2VydChjb250ZW50TGVuZ3RoID09PSBib2R5LmJ5dGVMZW5ndGgsICdidWZmZXIgYm9keSBtdXN0IGhhdmUgY29udGVudCBsZW5ndGgnKVxuXG4gICAgc29ja2V0LmNvcmsoKVxuICAgIHNvY2tldC53cml0ZShgJHtoZWFkZXJ9Y29udGVudC1sZW5ndGg6ICR7Y29udGVudExlbmd0aH1cXHJcXG5cXHJcXG5gLCAnbGF0aW4xJylcbiAgICBzb2NrZXQud3JpdGUoYm9keSlcbiAgICBzb2NrZXQudW5jb3JrKClcbiAgICByZXF1ZXN0Lm9uQm9keVNlbnQoYm9keSlcbiAgICByZXF1ZXN0Lm9uUmVxdWVzdFNlbnQoKVxuICAgIGlmICghZXhwZWN0c1BheWxvYWQpIHtcbiAgICAgIHNvY2tldFtrUmVzZXRdID0gdHJ1ZVxuICAgIH1cbiAgfSBlbHNlIGlmICh1dGlsLmlzQmxvYkxpa2UoYm9keSkpIHtcbiAgICBpZiAodHlwZW9mIGJvZHkuc3RyZWFtID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB3cml0ZUl0ZXJhYmxlKHsgYm9keTogYm9keS5zdHJlYW0oKSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgd3JpdGVCbG9iKHsgYm9keSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQgfSlcbiAgICB9XG4gIH0gZWxzZSBpZiAodXRpbC5pc1N0cmVhbShib2R5KSkge1xuICAgIHdyaXRlU3RyZWFtKHsgYm9keSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQgfSlcbiAgfSBlbHNlIGlmICh1dGlsLmlzSXRlcmFibGUoYm9keSkpIHtcbiAgICB3cml0ZUl0ZXJhYmxlKHsgYm9keSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQgfSlcbiAgfSBlbHNlIHtcbiAgICBhc3NlcnQoZmFsc2UpXG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiB3cml0ZUgyIChjbGllbnQsIHNlc3Npb24sIHJlcXVlc3QpIHtcbiAgY29uc3QgeyBib2R5LCBtZXRob2QsIHBhdGgsIGhvc3QsIHVwZ3JhZGUsIGV4cGVjdENvbnRpbnVlLCBzaWduYWwsIGhlYWRlcnM6IHJlcUhlYWRlcnMgfSA9IHJlcXVlc3RcblxuICBsZXQgaGVhZGVyc1xuICBpZiAodHlwZW9mIHJlcUhlYWRlcnMgPT09ICdzdHJpbmcnKSBoZWFkZXJzID0gUmVxdWVzdFtrSFRUUDJDb3B5SGVhZGVyc10ocmVxSGVhZGVycy50cmltKCkpXG4gIGVsc2UgaGVhZGVycyA9IHJlcUhlYWRlcnNcblxuICBpZiAodXBncmFkZSkge1xuICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIG5ldyBFcnJvcignVXBncmFkZSBub3Qgc3VwcG9ydGVkIGZvciBIMicpKVxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBUT0RPKEhUVFAvMik6IFNob3VsZCB3ZSBjYWxsIG9uQ29ubmVjdCBpbW1lZGlhdGVseSBvciBvbiBzdHJlYW0gcmVhZHkgZXZlbnQ/XG4gICAgcmVxdWVzdC5vbkNvbm5lY3QoKGVycikgPT4ge1xuICAgICAgaWYgKHJlcXVlc3QuYWJvcnRlZCB8fCByZXF1ZXN0LmNvbXBsZXRlZCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyIHx8IG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKCkpXG4gICAgfSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyKVxuICB9XG5cbiAgaWYgKHJlcXVlc3QuYWJvcnRlZCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLyoqIEB0eXBlIHtpbXBvcnQoJ25vZGU6aHR0cDInKS5DbGllbnRIdHRwMlN0cmVhbX0gKi9cbiAgbGV0IHN0cmVhbVxuICBjb25zdCBoMlN0YXRlID0gY2xpZW50W2tIVFRQMlNlc3Npb25TdGF0ZV1cblxuICBoZWFkZXJzW0hUVFAyX0hFQURFUl9BVVRIT1JJVFldID0gaG9zdCB8fCBjbGllbnRba0hvc3RdXG4gIGhlYWRlcnNbSFRUUDJfSEVBREVSX01FVEhPRF0gPSBtZXRob2RcblxuICBpZiAobWV0aG9kID09PSAnQ09OTkVDVCcpIHtcbiAgICBzZXNzaW9uLnJlZigpXG4gICAgLy8gd2UgYXJlIGFscmVhZHkgY29ubmVjdGVkLCBzdHJlYW1zIGFyZSBwZW5kaW5nLCBmaXJzdCByZXF1ZXN0XG4gICAgLy8gd2lsbCBjcmVhdGUgYSBuZXcgc3RyZWFtLiBXZSB0cmlnZ2VyIGEgcmVxdWVzdCB0byBjcmVhdGUgdGhlIHN0cmVhbSBhbmQgd2FpdCB1bnRpbFxuICAgIC8vIGByZWFkeWAgZXZlbnQgaXMgdHJpZ2dlcmVkXG4gICAgLy8gV2UgZGlzYWJsZWQgZW5kU3RyZWFtIHRvIGFsbG93IHRoZSB1c2VyIHRvIHdyaXRlIHRvIHRoZSBzdHJlYW1cbiAgICBzdHJlYW0gPSBzZXNzaW9uLnJlcXVlc3QoaGVhZGVycywgeyBlbmRTdHJlYW06IGZhbHNlLCBzaWduYWwgfSlcblxuICAgIGlmIChzdHJlYW0uaWQgJiYgIXN0cmVhbS5wZW5kaW5nKSB7XG4gICAgICByZXF1ZXN0Lm9uVXBncmFkZShudWxsLCBudWxsLCBzdHJlYW0pXG4gICAgICArK2gyU3RhdGUub3BlblN0cmVhbXNcbiAgICB9IGVsc2Uge1xuICAgICAgc3RyZWFtLm9uY2UoJ3JlYWR5JywgKCkgPT4ge1xuICAgICAgICByZXF1ZXN0Lm9uVXBncmFkZShudWxsLCBudWxsLCBzdHJlYW0pXG4gICAgICAgICsraDJTdGF0ZS5vcGVuU3RyZWFtc1xuICAgICAgfSlcbiAgICB9XG5cbiAgICBzdHJlYW0ub25jZSgnY2xvc2UnLCAoKSA9PiB7XG4gICAgICBoMlN0YXRlLm9wZW5TdHJlYW1zIC09IDFcbiAgICAgIC8vIFRPRE8oSFRUUC8yKTogdW5yZWYgb25seSBpZiBjdXJyZW50IHN0cmVhbXMgY291bnQgaXMgMFxuICAgICAgaWYgKGgyU3RhdGUub3BlblN0cmVhbXMgPT09IDApIHNlc3Npb24udW5yZWYoKVxuICAgIH0pXG5cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc1NDAjc2VjdGlvbi04LjNcbiAgLy8gOnBhdGggYW5kIDpzY2hlbWUgaGVhZGVycyBtdXN0IGJlIG9taXRlZCB3aGVuIHNlbmRpbmcgQ09OTkVDVFxuXG4gIGhlYWRlcnNbSFRUUDJfSEVBREVSX1BBVEhdID0gcGF0aFxuICBoZWFkZXJzW0hUVFAyX0hFQURFUl9TQ0hFTUVdID0gJ2h0dHBzJ1xuXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNC4zLjFcbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi00LjMuMlxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTQuMy41XG5cbiAgLy8gU2VuZGluZyBhIHBheWxvYWQgYm9keSBvbiBhIHJlcXVlc3QgdGhhdCBkb2VzIG5vdFxuICAvLyBleHBlY3QgaXQgY2FuIGNhdXNlIHVuZGVmaW5lZCBiZWhhdmlvciBvbiBzb21lXG4gIC8vIHNlcnZlcnMgYW5kIGNvcnJ1cHQgY29ubmVjdGlvbiBzdGF0ZS4gRG8gbm90XG4gIC8vIHJlLXVzZSB0aGUgY29ubmVjdGlvbiBmb3IgZnVydGhlciByZXF1ZXN0cy5cblxuICBjb25zdCBleHBlY3RzUGF5bG9hZCA9IChcbiAgICBtZXRob2QgPT09ICdQVVQnIHx8XG4gICAgbWV0aG9kID09PSAnUE9TVCcgfHxcbiAgICBtZXRob2QgPT09ICdQQVRDSCdcbiAgKVxuXG4gIGlmIChib2R5ICYmIHR5cGVvZiBib2R5LnJlYWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBUcnkgdG8gcmVhZCBFT0YgaW4gb3JkZXIgdG8gZ2V0IGxlbmd0aC5cbiAgICBib2R5LnJlYWQoMClcbiAgfVxuXG4gIGxldCBjb250ZW50TGVuZ3RoID0gdXRpbC5ib2R5TGVuZ3RoKGJvZHkpXG5cbiAgaWYgKGNvbnRlbnRMZW5ndGggPT0gbnVsbCkge1xuICAgIGNvbnRlbnRMZW5ndGggPSByZXF1ZXN0LmNvbnRlbnRMZW5ndGhcbiAgfVxuXG4gIGlmIChjb250ZW50TGVuZ3RoID09PSAwIHx8ICFleHBlY3RzUGF5bG9hZCkge1xuICAgIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4zLjJcbiAgICAvLyBBIHVzZXIgYWdlbnQgU0hPVUxEIE5PVCBzZW5kIGEgQ29udGVudC1MZW5ndGggaGVhZGVyIGZpZWxkIHdoZW5cbiAgICAvLyB0aGUgcmVxdWVzdCBtZXNzYWdlIGRvZXMgbm90IGNvbnRhaW4gYSBwYXlsb2FkIGJvZHkgYW5kIHRoZSBtZXRob2RcbiAgICAvLyBzZW1hbnRpY3MgZG8gbm90IGFudGljaXBhdGUgc3VjaCBhIGJvZHkuXG5cbiAgICBjb250ZW50TGVuZ3RoID0gbnVsbFxuICB9XG5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzIwNDZcbiAgLy8gQSB1c2VyIGFnZW50IG1heSBzZW5kIGEgQ29udGVudC1MZW5ndGggaGVhZGVyIHdpdGggMCB2YWx1ZSwgdGhpcyBzaG91bGQgYmUgYWxsb3dlZC5cbiAgaWYgKHNob3VsZFNlbmRDb250ZW50TGVuZ3RoKG1ldGhvZCkgJiYgY29udGVudExlbmd0aCA+IDAgJiYgcmVxdWVzdC5jb250ZW50TGVuZ3RoICE9IG51bGwgJiYgcmVxdWVzdC5jb250ZW50TGVuZ3RoICE9PSBjb250ZW50TGVuZ3RoKSB7XG4gICAgaWYgKGNsaWVudFtrU3RyaWN0Q29udGVudExlbmd0aF0pIHtcbiAgICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKSlcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIHByb2Nlc3MuZW1pdFdhcm5pbmcobmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpKVxuICB9XG5cbiAgaWYgKGNvbnRlbnRMZW5ndGggIT0gbnVsbCkge1xuICAgIGFzc2VydChib2R5LCAnbm8gYm9keSBtdXN0IG5vdCBoYXZlIGNvbnRlbnQgbGVuZ3RoJylcbiAgICBoZWFkZXJzW0hUVFAyX0hFQURFUl9DT05URU5UX0xFTkdUSF0gPSBgJHtjb250ZW50TGVuZ3RofWBcbiAgfVxuXG4gIHNlc3Npb24ucmVmKClcblxuICBjb25zdCBzaG91bGRFbmRTdHJlYW0gPSBtZXRob2QgPT09ICdHRVQnIHx8IG1ldGhvZCA9PT0gJ0hFQUQnXG4gIGlmIChleHBlY3RDb250aW51ZSkge1xuICAgIGhlYWRlcnNbSFRUUDJfSEVBREVSX0VYUEVDVF0gPSAnMTAwLWNvbnRpbnVlJ1xuICAgIHN0cmVhbSA9IHNlc3Npb24ucmVxdWVzdChoZWFkZXJzLCB7IGVuZFN0cmVhbTogc2hvdWxkRW5kU3RyZWFtLCBzaWduYWwgfSlcblxuICAgIHN0cmVhbS5vbmNlKCdjb250aW51ZScsIHdyaXRlQm9keUgyKVxuICB9IGVsc2Uge1xuICAgIHN0cmVhbSA9IHNlc3Npb24ucmVxdWVzdChoZWFkZXJzLCB7XG4gICAgICBlbmRTdHJlYW06IHNob3VsZEVuZFN0cmVhbSxcbiAgICAgIHNpZ25hbFxuICAgIH0pXG4gICAgd3JpdGVCb2R5SDIoKVxuICB9XG5cbiAgLy8gSW5jcmVtZW50IGNvdW50ZXIgYXMgd2UgaGF2ZSBuZXcgc2V2ZXJhbCBzdHJlYW1zIG9wZW5cbiAgKytoMlN0YXRlLm9wZW5TdHJlYW1zXG5cbiAgc3RyZWFtLm9uY2UoJ3Jlc3BvbnNlJywgaGVhZGVycyA9PiB7XG4gICAgY29uc3QgeyBbSFRUUDJfSEVBREVSX1NUQVRVU106IHN0YXR1c0NvZGUsIC4uLnJlYWxIZWFkZXJzIH0gPSBoZWFkZXJzXG5cbiAgICBpZiAocmVxdWVzdC5vbkhlYWRlcnMoTnVtYmVyKHN0YXR1c0NvZGUpLCByZWFsSGVhZGVycywgc3RyZWFtLnJlc3VtZS5iaW5kKHN0cmVhbSksICcnKSA9PT0gZmFsc2UpIHtcbiAgICAgIHN0cmVhbS5wYXVzZSgpXG4gICAgfVxuICB9KVxuXG4gIHN0cmVhbS5vbmNlKCdlbmQnLCAoKSA9PiB7XG4gICAgcmVxdWVzdC5vbkNvbXBsZXRlKFtdKVxuICB9KVxuXG4gIHN0cmVhbS5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgIGlmIChyZXF1ZXN0Lm9uRGF0YShjaHVuaykgPT09IGZhbHNlKSB7XG4gICAgICBzdHJlYW0ucGF1c2UoKVxuICAgIH1cbiAgfSlcblxuICBzdHJlYW0ub25jZSgnY2xvc2UnLCAoKSA9PiB7XG4gICAgaDJTdGF0ZS5vcGVuU3RyZWFtcyAtPSAxXG4gICAgLy8gVE9ETyhIVFRQLzIpOiB1bnJlZiBvbmx5IGlmIGN1cnJlbnQgc3RyZWFtcyBjb3VudCBpcyAwXG4gICAgaWYgKGgyU3RhdGUub3BlblN0cmVhbXMgPT09IDApIHtcbiAgICAgIHNlc3Npb24udW5yZWYoKVxuICAgIH1cbiAgfSlcblxuICBzdHJlYW0ub25jZSgnZXJyb3InLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgaWYgKGNsaWVudFtrSFRUUDJTZXNzaW9uXSAmJiAhY2xpZW50W2tIVFRQMlNlc3Npb25dLmRlc3Ryb3llZCAmJiAhdGhpcy5jbG9zZWQgJiYgIXRoaXMuZGVzdHJveWVkKSB7XG4gICAgICBoMlN0YXRlLnN0cmVhbXMgLT0gMVxuICAgICAgdXRpbC5kZXN0cm95KHN0cmVhbSwgZXJyKVxuICAgIH1cbiAgfSlcblxuICBzdHJlYW0ub25jZSgnZnJhbWVFcnJvcicsICh0eXBlLCBjb2RlKSA9PiB7XG4gICAgY29uc3QgZXJyID0gbmV3IEluZm9ybWF0aW9uYWxFcnJvcihgSFRUUC8yOiBcImZyYW1lRXJyb3JcIiByZWNlaXZlZCAtIHR5cGUgJHt0eXBlfSwgY29kZSAke2NvZGV9YClcbiAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIpXG5cbiAgICBpZiAoY2xpZW50W2tIVFRQMlNlc3Npb25dICYmICFjbGllbnRba0hUVFAyU2Vzc2lvbl0uZGVzdHJveWVkICYmICF0aGlzLmNsb3NlZCAmJiAhdGhpcy5kZXN0cm95ZWQpIHtcbiAgICAgIGgyU3RhdGUuc3RyZWFtcyAtPSAxXG4gICAgICB1dGlsLmRlc3Ryb3koc3RyZWFtLCBlcnIpXG4gICAgfVxuICB9KVxuXG4gIC8vIHN0cmVhbS5vbignYWJvcnRlZCcsICgpID0+IHtcbiAgLy8gICAvLyBUT0RPKEhUVFAvMik6IFN1cHBvcnQgYWJvcnRlZFxuICAvLyB9KVxuXG4gIC8vIHN0cmVhbS5vbigndGltZW91dCcsICgpID0+IHtcbiAgLy8gICAvLyBUT0RPKEhUVFAvMik6IFN1cHBvcnQgdGltZW91dFxuICAvLyB9KVxuXG4gIC8vIHN0cmVhbS5vbigncHVzaCcsIGhlYWRlcnMgPT4ge1xuICAvLyAgIC8vIFRPRE8oSFRUUC8yKTogU3VwcG9yIHB1c2hcbiAgLy8gfSlcblxuICAvLyBzdHJlYW0ub24oJ3RyYWlsZXJzJywgaGVhZGVycyA9PiB7XG4gIC8vICAgLy8gVE9ETyhIVFRQLzIpOiBTdXBwb3J0IHRyYWlsZXJzXG4gIC8vIH0pXG5cbiAgcmV0dXJuIHRydWVcblxuICBmdW5jdGlvbiB3cml0ZUJvZHlIMiAoKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2U6IGFzc2VydGlvbiAqL1xuICAgIGlmICghYm9keSkge1xuICAgICAgcmVxdWVzdC5vblJlcXVlc3RTZW50KClcbiAgICB9IGVsc2UgaWYgKHV0aWwuaXNCdWZmZXIoYm9keSkpIHtcbiAgICAgIGFzc2VydChjb250ZW50TGVuZ3RoID09PSBib2R5LmJ5dGVMZW5ndGgsICdidWZmZXIgYm9keSBtdXN0IGhhdmUgY29udGVudCBsZW5ndGgnKVxuICAgICAgc3RyZWFtLmNvcmsoKVxuICAgICAgc3RyZWFtLndyaXRlKGJvZHkpXG4gICAgICBzdHJlYW0udW5jb3JrKClcbiAgICAgIHN0cmVhbS5lbmQoKVxuICAgICAgcmVxdWVzdC5vbkJvZHlTZW50KGJvZHkpXG4gICAgICByZXF1ZXN0Lm9uUmVxdWVzdFNlbnQoKVxuICAgIH0gZWxzZSBpZiAodXRpbC5pc0Jsb2JMaWtlKGJvZHkpKSB7XG4gICAgICBpZiAodHlwZW9mIGJvZHkuc3RyZWFtID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHdyaXRlSXRlcmFibGUoe1xuICAgICAgICAgIGNsaWVudCxcbiAgICAgICAgICByZXF1ZXN0LFxuICAgICAgICAgIGNvbnRlbnRMZW5ndGgsXG4gICAgICAgICAgaDJzdHJlYW06IHN0cmVhbSxcbiAgICAgICAgICBleHBlY3RzUGF5bG9hZCxcbiAgICAgICAgICBib2R5OiBib2R5LnN0cmVhbSgpLFxuICAgICAgICAgIHNvY2tldDogY2xpZW50W2tTb2NrZXRdLFxuICAgICAgICAgIGhlYWRlcjogJydcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdyaXRlQmxvYih7XG4gICAgICAgICAgYm9keSxcbiAgICAgICAgICBjbGllbnQsXG4gICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgICBjb250ZW50TGVuZ3RoLFxuICAgICAgICAgIGV4cGVjdHNQYXlsb2FkLFxuICAgICAgICAgIGgyc3RyZWFtOiBzdHJlYW0sXG4gICAgICAgICAgaGVhZGVyOiAnJyxcbiAgICAgICAgICBzb2NrZXQ6IGNsaWVudFtrU29ja2V0XVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodXRpbC5pc1N0cmVhbShib2R5KSkge1xuICAgICAgd3JpdGVTdHJlYW0oe1xuICAgICAgICBib2R5LFxuICAgICAgICBjbGllbnQsXG4gICAgICAgIHJlcXVlc3QsXG4gICAgICAgIGNvbnRlbnRMZW5ndGgsXG4gICAgICAgIGV4cGVjdHNQYXlsb2FkLFxuICAgICAgICBzb2NrZXQ6IGNsaWVudFtrU29ja2V0XSxcbiAgICAgICAgaDJzdHJlYW06IHN0cmVhbSxcbiAgICAgICAgaGVhZGVyOiAnJ1xuICAgICAgfSlcbiAgICB9IGVsc2UgaWYgKHV0aWwuaXNJdGVyYWJsZShib2R5KSkge1xuICAgICAgd3JpdGVJdGVyYWJsZSh7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGNsaWVudCxcbiAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgZXhwZWN0c1BheWxvYWQsXG4gICAgICAgIGhlYWRlcjogJycsXG4gICAgICAgIGgyc3RyZWFtOiBzdHJlYW0sXG4gICAgICAgIHNvY2tldDogY2xpZW50W2tTb2NrZXRdXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBhc3NlcnQoZmFsc2UpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHdyaXRlU3RyZWFtICh7IGgyc3RyZWFtLCBib2R5LCBjbGllbnQsIHJlcXVlc3QsIHNvY2tldCwgY29udGVudExlbmd0aCwgaGVhZGVyLCBleHBlY3RzUGF5bG9hZCB9KSB7XG4gIGFzc2VydChjb250ZW50TGVuZ3RoICE9PSAwIHx8IGNsaWVudFtrUnVubmluZ10gPT09IDAsICdzdHJlYW0gYm9keSBjYW5ub3QgYmUgcGlwZWxpbmVkJylcblxuICBpZiAoY2xpZW50W2tIVFRQQ29ublZlcnNpb25dID09PSAnaDInKSB7XG4gICAgLy8gRm9yIEhUVFAvMiwgaXMgZW5vdWdoIHRvIHBpcGUgdGhlIHN0cmVhbVxuICAgIGNvbnN0IHBpcGUgPSBwaXBlbGluZShcbiAgICAgIGJvZHksXG4gICAgICBoMnN0cmVhbSxcbiAgICAgIChlcnIpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHV0aWwuZGVzdHJveShib2R5LCBlcnIpXG4gICAgICAgICAgdXRpbC5kZXN0cm95KGgyc3RyZWFtLCBlcnIpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVxdWVzdC5vblJlcXVlc3RTZW50KClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIClcblxuICAgIHBpcGUub24oJ2RhdGEnLCBvblBpcGVEYXRhKVxuICAgIHBpcGUub25jZSgnZW5kJywgKCkgPT4ge1xuICAgICAgcGlwZS5yZW1vdmVMaXN0ZW5lcignZGF0YScsIG9uUGlwZURhdGEpXG4gICAgICB1dGlsLmRlc3Ryb3kocGlwZSlcbiAgICB9KVxuXG4gICAgZnVuY3Rpb24gb25QaXBlRGF0YSAoY2h1bmspIHtcbiAgICAgIHJlcXVlc3Qub25Cb2R5U2VudChjaHVuaylcbiAgICB9XG5cbiAgICByZXR1cm5cbiAgfVxuXG4gIGxldCBmaW5pc2hlZCA9IGZhbHNlXG5cbiAgY29uc3Qgd3JpdGVyID0gbmV3IEFzeW5jV3JpdGVyKHsgc29ja2V0LCByZXF1ZXN0LCBjb250ZW50TGVuZ3RoLCBjbGllbnQsIGV4cGVjdHNQYXlsb2FkLCBoZWFkZXIgfSlcblxuICBjb25zdCBvbkRhdGEgPSBmdW5jdGlvbiAoY2h1bmspIHtcbiAgICBpZiAoZmluaXNoZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBpZiAoIXdyaXRlci53cml0ZShjaHVuaykgJiYgdGhpcy5wYXVzZSkge1xuICAgICAgICB0aGlzLnBhdXNlKClcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHV0aWwuZGVzdHJveSh0aGlzLCBlcnIpXG4gICAgfVxuICB9XG4gIGNvbnN0IG9uRHJhaW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGZpbmlzaGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoYm9keS5yZXN1bWUpIHtcbiAgICAgIGJvZHkucmVzdW1lKClcbiAgICB9XG4gIH1cbiAgY29uc3Qgb25BYm9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoZmluaXNoZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjb25zdCBlcnIgPSBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gb25GaW5pc2hlZChlcnIpKVxuICB9XG4gIGNvbnN0IG9uRmluaXNoZWQgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgaWYgKGZpbmlzaGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBmaW5pc2hlZCA9IHRydWVcblxuICAgIGFzc2VydChzb2NrZXQuZGVzdHJveWVkIHx8IChzb2NrZXRba1dyaXRpbmddICYmIGNsaWVudFtrUnVubmluZ10gPD0gMSkpXG5cbiAgICBzb2NrZXRcbiAgICAgIC5vZmYoJ2RyYWluJywgb25EcmFpbilcbiAgICAgIC5vZmYoJ2Vycm9yJywgb25GaW5pc2hlZClcblxuICAgIGJvZHlcbiAgICAgIC5yZW1vdmVMaXN0ZW5lcignZGF0YScsIG9uRGF0YSlcbiAgICAgIC5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25GaW5pc2hlZClcbiAgICAgIC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbkZpbmlzaGVkKVxuICAgICAgLnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uQWJvcnQpXG5cbiAgICBpZiAoIWVycikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgd3JpdGVyLmVuZCgpXG4gICAgICB9IGNhdGNoIChlcikge1xuICAgICAgICBlcnIgPSBlclxuICAgICAgfVxuICAgIH1cblxuICAgIHdyaXRlci5kZXN0cm95KGVycilcblxuICAgIGlmIChlcnIgJiYgKGVyci5jb2RlICE9PSAnVU5EX0VSUl9JTkZPJyB8fCBlcnIubWVzc2FnZSAhPT0gJ3Jlc2V0JykpIHtcbiAgICAgIHV0aWwuZGVzdHJveShib2R5LCBlcnIpXG4gICAgfSBlbHNlIHtcbiAgICAgIHV0aWwuZGVzdHJveShib2R5KVxuICAgIH1cbiAgfVxuXG4gIGJvZHlcbiAgICAub24oJ2RhdGEnLCBvbkRhdGEpXG4gICAgLm9uKCdlbmQnLCBvbkZpbmlzaGVkKVxuICAgIC5vbignZXJyb3InLCBvbkZpbmlzaGVkKVxuICAgIC5vbignY2xvc2UnLCBvbkFib3J0KVxuXG4gIGlmIChib2R5LnJlc3VtZSkge1xuICAgIGJvZHkucmVzdW1lKClcbiAgfVxuXG4gIHNvY2tldFxuICAgIC5vbignZHJhaW4nLCBvbkRyYWluKVxuICAgIC5vbignZXJyb3InLCBvbkZpbmlzaGVkKVxufVxuXG5hc3luYyBmdW5jdGlvbiB3cml0ZUJsb2IgKHsgaDJzdHJlYW0sIGJvZHksIGNsaWVudCwgcmVxdWVzdCwgc29ja2V0LCBjb250ZW50TGVuZ3RoLCBoZWFkZXIsIGV4cGVjdHNQYXlsb2FkIH0pIHtcbiAgYXNzZXJ0KGNvbnRlbnRMZW5ndGggPT09IGJvZHkuc2l6ZSwgJ2Jsb2IgYm9keSBtdXN0IGhhdmUgY29udGVudCBsZW5ndGgnKVxuXG4gIGNvbnN0IGlzSDIgPSBjbGllbnRba0hUVFBDb25uVmVyc2lvbl0gPT09ICdoMidcbiAgdHJ5IHtcbiAgICBpZiAoY29udGVudExlbmd0aCAhPSBudWxsICYmIGNvbnRlbnRMZW5ndGggIT09IGJvZHkuc2l6ZSkge1xuICAgICAgdGhyb3cgbmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpXG4gICAgfVxuXG4gICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20oYXdhaXQgYm9keS5hcnJheUJ1ZmZlcigpKVxuXG4gICAgaWYgKGlzSDIpIHtcbiAgICAgIGgyc3RyZWFtLmNvcmsoKVxuICAgICAgaDJzdHJlYW0ud3JpdGUoYnVmZmVyKVxuICAgICAgaDJzdHJlYW0udW5jb3JrKClcbiAgICB9IGVsc2Uge1xuICAgICAgc29ja2V0LmNvcmsoKVxuICAgICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn1jb250ZW50LWxlbmd0aDogJHtjb250ZW50TGVuZ3RofVxcclxcblxcclxcbmAsICdsYXRpbjEnKVxuICAgICAgc29ja2V0LndyaXRlKGJ1ZmZlcilcbiAgICAgIHNvY2tldC51bmNvcmsoKVxuICAgIH1cblxuICAgIHJlcXVlc3Qub25Cb2R5U2VudChidWZmZXIpXG4gICAgcmVxdWVzdC5vblJlcXVlc3RTZW50KClcblxuICAgIGlmICghZXhwZWN0c1BheWxvYWQpIHtcbiAgICAgIHNvY2tldFtrUmVzZXRdID0gdHJ1ZVxuICAgIH1cblxuICAgIHJlc3VtZShjbGllbnQpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHV0aWwuZGVzdHJveShpc0gyID8gaDJzdHJlYW0gOiBzb2NrZXQsIGVycilcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiB3cml0ZUl0ZXJhYmxlICh7IGgyc3RyZWFtLCBib2R5LCBjbGllbnQsIHJlcXVlc3QsIHNvY2tldCwgY29udGVudExlbmd0aCwgaGVhZGVyLCBleHBlY3RzUGF5bG9hZCB9KSB7XG4gIGFzc2VydChjb250ZW50TGVuZ3RoICE9PSAwIHx8IGNsaWVudFtrUnVubmluZ10gPT09IDAsICdpdGVyYXRvciBib2R5IGNhbm5vdCBiZSBwaXBlbGluZWQnKVxuXG4gIGxldCBjYWxsYmFjayA9IG51bGxcbiAgZnVuY3Rpb24gb25EcmFpbiAoKSB7XG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBjb25zdCBjYiA9IGNhbGxiYWNrXG4gICAgICBjYWxsYmFjayA9IG51bGxcbiAgICAgIGNiKClcbiAgICB9XG4gIH1cblxuICBjb25zdCB3YWl0Rm9yRHJhaW4gPSAoKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgYXNzZXJ0KGNhbGxiYWNrID09PSBudWxsKVxuXG4gICAgaWYgKHNvY2tldFtrRXJyb3JdKSB7XG4gICAgICByZWplY3Qoc29ja2V0W2tFcnJvcl0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbGxiYWNrID0gcmVzb2x2ZVxuICAgIH1cbiAgfSlcblxuICBpZiAoY2xpZW50W2tIVFRQQ29ublZlcnNpb25dID09PSAnaDInKSB7XG4gICAgaDJzdHJlYW1cbiAgICAgIC5vbignY2xvc2UnLCBvbkRyYWluKVxuICAgICAgLm9uKCdkcmFpbicsIG9uRHJhaW4pXG5cbiAgICB0cnkge1xuICAgICAgLy8gSXQncyB1cCB0byB0aGUgdXNlciB0byBzb21laG93IGFib3J0IHRoZSBhc3luYyBpdGVyYWJsZS5cbiAgICAgIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgYm9keSkge1xuICAgICAgICBpZiAoc29ja2V0W2tFcnJvcl0pIHtcbiAgICAgICAgICB0aHJvdyBzb2NrZXRba0Vycm9yXVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzID0gaDJzdHJlYW0ud3JpdGUoY2h1bmspXG4gICAgICAgIHJlcXVlc3Qub25Cb2R5U2VudChjaHVuaylcbiAgICAgICAgaWYgKCFyZXMpIHtcbiAgICAgICAgICBhd2FpdCB3YWl0Rm9yRHJhaW4oKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBoMnN0cmVhbS5kZXN0cm95KGVycilcbiAgICB9IGZpbmFsbHkge1xuICAgICAgcmVxdWVzdC5vblJlcXVlc3RTZW50KClcbiAgICAgIGgyc3RyZWFtLmVuZCgpXG4gICAgICBoMnN0cmVhbVxuICAgICAgICAub2ZmKCdjbG9zZScsIG9uRHJhaW4pXG4gICAgICAgIC5vZmYoJ2RyYWluJywgb25EcmFpbilcbiAgICB9XG5cbiAgICByZXR1cm5cbiAgfVxuXG4gIHNvY2tldFxuICAgIC5vbignY2xvc2UnLCBvbkRyYWluKVxuICAgIC5vbignZHJhaW4nLCBvbkRyYWluKVxuXG4gIGNvbnN0IHdyaXRlciA9IG5ldyBBc3luY1dyaXRlcih7IHNvY2tldCwgcmVxdWVzdCwgY29udGVudExlbmd0aCwgY2xpZW50LCBleHBlY3RzUGF5bG9hZCwgaGVhZGVyIH0pXG4gIHRyeSB7XG4gICAgLy8gSXQncyB1cCB0byB0aGUgdXNlciB0byBzb21laG93IGFib3J0IHRoZSBhc3luYyBpdGVyYWJsZS5cbiAgICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIGJvZHkpIHtcbiAgICAgIGlmIChzb2NrZXRba0Vycm9yXSkge1xuICAgICAgICB0aHJvdyBzb2NrZXRba0Vycm9yXVxuICAgICAgfVxuXG4gICAgICBpZiAoIXdyaXRlci53cml0ZShjaHVuaykpIHtcbiAgICAgICAgYXdhaXQgd2FpdEZvckRyYWluKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICB3cml0ZXIuZW5kKClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgd3JpdGVyLmRlc3Ryb3koZXJyKVxuICB9IGZpbmFsbHkge1xuICAgIHNvY2tldFxuICAgICAgLm9mZignY2xvc2UnLCBvbkRyYWluKVxuICAgICAgLm9mZignZHJhaW4nLCBvbkRyYWluKVxuICB9XG59XG5cbmNsYXNzIEFzeW5jV3JpdGVyIHtcbiAgY29uc3RydWN0b3IgKHsgc29ja2V0LCByZXF1ZXN0LCBjb250ZW50TGVuZ3RoLCBjbGllbnQsIGV4cGVjdHNQYXlsb2FkLCBoZWFkZXIgfSkge1xuICAgIHRoaXMuc29ja2V0ID0gc29ja2V0XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdFxuICAgIHRoaXMuY29udGVudExlbmd0aCA9IGNvbnRlbnRMZW5ndGhcbiAgICB0aGlzLmNsaWVudCA9IGNsaWVudFxuICAgIHRoaXMuYnl0ZXNXcml0dGVuID0gMFxuICAgIHRoaXMuZXhwZWN0c1BheWxvYWQgPSBleHBlY3RzUGF5bG9hZFxuICAgIHRoaXMuaGVhZGVyID0gaGVhZGVyXG5cbiAgICBzb2NrZXRba1dyaXRpbmddID0gdHJ1ZVxuICB9XG5cbiAgd3JpdGUgKGNodW5rKSB7XG4gICAgY29uc3QgeyBzb2NrZXQsIHJlcXVlc3QsIGNvbnRlbnRMZW5ndGgsIGNsaWVudCwgYnl0ZXNXcml0dGVuLCBleHBlY3RzUGF5bG9hZCwgaGVhZGVyIH0gPSB0aGlzXG5cbiAgICBpZiAoc29ja2V0W2tFcnJvcl0pIHtcbiAgICAgIHRocm93IHNvY2tldFtrRXJyb3JdXG4gICAgfVxuXG4gICAgaWYgKHNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGNvbnN0IGxlbiA9IEJ1ZmZlci5ieXRlTGVuZ3RoKGNodW5rKVxuICAgIGlmICghbGVuKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIC8vIFdlIHNob3VsZCBkZWZlciB3cml0aW5nIGNodW5rcy5cbiAgICBpZiAoY29udGVudExlbmd0aCAhPT0gbnVsbCAmJiBieXRlc1dyaXR0ZW4gKyBsZW4gPiBjb250ZW50TGVuZ3RoKSB7XG4gICAgICBpZiAoY2xpZW50W2tTdHJpY3RDb250ZW50TGVuZ3RoXSkge1xuICAgICAgICB0aHJvdyBuZXcgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKClcbiAgICAgIH1cblxuICAgICAgcHJvY2Vzcy5lbWl0V2FybmluZyhuZXcgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKCkpXG4gICAgfVxuXG4gICAgc29ja2V0LmNvcmsoKVxuXG4gICAgaWYgKGJ5dGVzV3JpdHRlbiA9PT0gMCkge1xuICAgICAgaWYgKCFleHBlY3RzUGF5bG9hZCkge1xuICAgICAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbnRlbnRMZW5ndGggPT09IG51bGwpIHtcbiAgICAgICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn10cmFuc2Zlci1lbmNvZGluZzogY2h1bmtlZFxcclxcbmAsICdsYXRpbjEnKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn1jb250ZW50LWxlbmd0aDogJHtjb250ZW50TGVuZ3RofVxcclxcblxcclxcbmAsICdsYXRpbjEnKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb250ZW50TGVuZ3RoID09PSBudWxsKSB7XG4gICAgICBzb2NrZXQud3JpdGUoYFxcclxcbiR7bGVuLnRvU3RyaW5nKDE2KX1cXHJcXG5gLCAnbGF0aW4xJylcbiAgICB9XG5cbiAgICB0aGlzLmJ5dGVzV3JpdHRlbiArPSBsZW5cblxuICAgIGNvbnN0IHJldCA9IHNvY2tldC53cml0ZShjaHVuaylcblxuICAgIHNvY2tldC51bmNvcmsoKVxuXG4gICAgcmVxdWVzdC5vbkJvZHlTZW50KGNodW5rKVxuXG4gICAgaWYgKCFyZXQpIHtcbiAgICAgIGlmIChzb2NrZXRba1BhcnNlcl0udGltZW91dCAmJiBzb2NrZXRba1BhcnNlcl0udGltZW91dFR5cGUgPT09IFRJTUVPVVRfSEVBREVSUykge1xuICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogb25seSBmb3IgamVzdFxuICAgICAgICBpZiAoc29ja2V0W2tQYXJzZXJdLnRpbWVvdXQucmVmcmVzaCkge1xuICAgICAgICAgIHNvY2tldFtrUGFyc2VyXS50aW1lb3V0LnJlZnJlc2goKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgZW5kICgpIHtcbiAgICBjb25zdCB7IHNvY2tldCwgY29udGVudExlbmd0aCwgY2xpZW50LCBieXRlc1dyaXR0ZW4sIGV4cGVjdHNQYXlsb2FkLCBoZWFkZXIsIHJlcXVlc3QgfSA9IHRoaXNcbiAgICByZXF1ZXN0Lm9uUmVxdWVzdFNlbnQoKVxuXG4gICAgc29ja2V0W2tXcml0aW5nXSA9IGZhbHNlXG5cbiAgICBpZiAoc29ja2V0W2tFcnJvcl0pIHtcbiAgICAgIHRocm93IHNvY2tldFtrRXJyb3JdXG4gICAgfVxuXG4gICAgaWYgKHNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChieXRlc1dyaXR0ZW4gPT09IDApIHtcbiAgICAgIGlmIChleHBlY3RzUGF5bG9hZCkge1xuICAgICAgICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMCNzZWN0aW9uLTMuMy4yXG4gICAgICAgIC8vIEEgdXNlciBhZ2VudCBTSE9VTEQgc2VuZCBhIENvbnRlbnQtTGVuZ3RoIGluIGEgcmVxdWVzdCBtZXNzYWdlIHdoZW5cbiAgICAgICAgLy8gbm8gVHJhbnNmZXItRW5jb2RpbmcgaXMgc2VudCBhbmQgdGhlIHJlcXVlc3QgbWV0aG9kIGRlZmluZXMgYSBtZWFuaW5nXG4gICAgICAgIC8vIGZvciBhbiBlbmNsb3NlZCBwYXlsb2FkIGJvZHkuXG5cbiAgICAgICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn1jb250ZW50LWxlbmd0aDogMFxcclxcblxcclxcbmAsICdsYXRpbjEnKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn1cXHJcXG5gLCAnbGF0aW4xJylcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNvbnRlbnRMZW5ndGggPT09IG51bGwpIHtcbiAgICAgIHNvY2tldC53cml0ZSgnXFxyXFxuMFxcclxcblxcclxcbicsICdsYXRpbjEnKVxuICAgIH1cblxuICAgIGlmIChjb250ZW50TGVuZ3RoICE9PSBudWxsICYmIGJ5dGVzV3JpdHRlbiAhPT0gY29udGVudExlbmd0aCkge1xuICAgICAgaWYgKGNsaWVudFtrU3RyaWN0Q29udGVudExlbmd0aF0pIHtcbiAgICAgICAgdGhyb3cgbmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9jZXNzLmVtaXRXYXJuaW5nKG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc29ja2V0W2tQYXJzZXJdLnRpbWVvdXQgJiYgc29ja2V0W2tQYXJzZXJdLnRpbWVvdXRUeXBlID09PSBUSU1FT1VUX0hFQURFUlMpIHtcbiAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBvbmx5IGZvciBqZXN0XG4gICAgICBpZiAoc29ja2V0W2tQYXJzZXJdLnRpbWVvdXQucmVmcmVzaCkge1xuICAgICAgICBzb2NrZXRba1BhcnNlcl0udGltZW91dC5yZWZyZXNoKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXN1bWUoY2xpZW50KVxuICB9XG5cbiAgZGVzdHJveSAoZXJyKSB7XG4gICAgY29uc3QgeyBzb2NrZXQsIGNsaWVudCB9ID0gdGhpc1xuXG4gICAgc29ja2V0W2tXcml0aW5nXSA9IGZhbHNlXG5cbiAgICBpZiAoZXJyKSB7XG4gICAgICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA8PSAxLCAncGlwZWxpbmUgc2hvdWxkIG9ubHkgY29udGFpbiB0aGlzIHJlcXVlc3QnKVxuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgZXJyKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBlcnJvclJlcXVlc3QgKGNsaWVudCwgcmVxdWVzdCwgZXJyKSB7XG4gIHRyeSB7XG4gICAgcmVxdWVzdC5vbkVycm9yKGVycilcbiAgICBhc3NlcnQocmVxdWVzdC5hYm9ydGVkKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjbGllbnQuZW1pdCgnZXJyb3InLCBlcnIpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBDbGllbnRcbiIsCiAgICAiLyogZXNsaW50LWRpc2FibGUgKi9cblxuJ3VzZSBzdHJpY3QnXG5cbi8vIEV4dHJhY3RlZCBmcm9tIG5vZGUvbGliL2ludGVybmFsL2ZpeGVkX3F1ZXVlLmpzXG5cbi8vIEN1cnJlbnRseSBvcHRpbWFsIHF1ZXVlIHNpemUsIHRlc3RlZCBvbiBWOCA2LjAgLSA2LjYuIE11c3QgYmUgcG93ZXIgb2YgdHdvLlxuY29uc3Qga1NpemUgPSAyMDQ4O1xuY29uc3Qga01hc2sgPSBrU2l6ZSAtIDE7XG5cbi8vIFRoZSBGaXhlZFF1ZXVlIGlzIGltcGxlbWVudGVkIGFzIGEgc2luZ2x5LWxpbmtlZCBsaXN0IG9mIGZpeGVkLXNpemVcbi8vIGNpcmN1bGFyIGJ1ZmZlcnMuIEl0IGxvb2tzIHNvbWV0aGluZyBsaWtlIHRoaXM6XG4vL1xuLy8gIGhlYWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFpbFxuLy8gICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4vLyAgICB2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZcbi8vICstLS0tLS0tLS0tLSsgPC0tLS0tXFwgICAgICAgKy0tLS0tLS0tLS0tKyA8LS0tLS0tXFwgICAgICAgICArLS0tLS0tLS0tLS0rXG4vLyB8ICBbbnVsbF0gICB8ICAgICAgICBcXC0tLS0tIHwgICBuZXh0ICAgIHwgICAgICAgICBcXC0tLS0tLS0gfCAgIG5leHQgICAgfFxuLy8gKy0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rXG4vLyB8ICAgaXRlbSAgICB8IDwtLSBib3R0b20gICAgfCAgIGl0ZW0gICAgfCA8LS0gYm90dG9tICAgICAgIHwgIFtlbXB0eV0gIHxcbi8vIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgfCAgW2VtcHR5XSAgfFxuLy8gfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICB8ICBbZW1wdHldICB8XG4vLyB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgIHwgIFtlbXB0eV0gIHxcbi8vIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgIGJvdHRvbSAtLT4gfCAgIGl0ZW0gICAgfFxuLy8gfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8XG4vLyB8ICAgIC4uLiAgICB8ICAgICAgICAgICAgICAgfCAgICAuLi4gICAgfCAgICAgICAgICAgICAgICAgIHwgICAgLi4uICAgIHxcbi8vIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfFxuLy8gfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8XG4vLyB8ICBbZW1wdHldICB8IDwtLSB0b3AgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHxcbi8vIHwgIFtlbXB0eV0gIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfFxuLy8gfCAgW2VtcHR5XSAgfCAgICAgICAgICAgICAgIHwgIFtlbXB0eV0gIHwgPC0tIHRvcCAgdG9wIC0tPiB8ICBbZW1wdHldICB8XG4vLyArLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLStcbi8vXG4vLyBPciwgaWYgdGhlcmUgaXMgb25seSBvbmUgY2lyY3VsYXIgYnVmZmVyLCBpdCBsb29rcyBzb21ldGhpbmdcbi8vIGxpa2UgZWl0aGVyIG9mIHRoZXNlOlxuLy9cbi8vICBoZWFkICAgdGFpbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWQgICB0YWlsXG4vLyAgICB8ICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHxcbi8vICAgIHYgICAgIHYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdiAgICAgdlxuLy8gKy0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rXG4vLyB8ICBbbnVsbF0gICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFtudWxsXSAgIHxcbi8vICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tK1xuLy8gfCAgW2VtcHR5XSAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8XG4vLyB8ICBbZW1wdHldICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHxcbi8vIHwgICBpdGVtICAgIHwgPC0tIGJvdHRvbSAgICAgICAgICAgIHRvcCAtLT4gfCAgW2VtcHR5XSAgfFxuLy8gfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBbZW1wdHldICB8XG4vLyB8ICBbZW1wdHldICB8IDwtLSB0b3AgICAgICAgICAgICBib3R0b20gLS0+IHwgICBpdGVtICAgIHxcbi8vIHwgIFtlbXB0eV0gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfFxuLy8gKy0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rXG4vL1xuLy8gQWRkaW5nIGEgdmFsdWUgbWVhbnMgbW92aW5nIGB0b3BgIGZvcndhcmQgYnkgb25lLCByZW1vdmluZyBtZWFuc1xuLy8gbW92aW5nIGBib3R0b21gIGZvcndhcmQgYnkgb25lLiBBZnRlciByZWFjaGluZyB0aGUgZW5kLCB0aGUgcXVldWVcbi8vIHdyYXBzIGFyb3VuZC5cbi8vXG4vLyBXaGVuIGB0b3AgPT09IGJvdHRvbWAgdGhlIGN1cnJlbnQgcXVldWUgaXMgZW1wdHkgYW5kIHdoZW5cbi8vIGB0b3AgKyAxID09PSBib3R0b21gIGl0J3MgZnVsbC4gVGhpcyB3YXN0ZXMgYSBzaW5nbGUgc3BhY2Ugb2Ygc3RvcmFnZVxuLy8gYnV0IGFsbG93cyBtdWNoIHF1aWNrZXIgY2hlY2tzLlxuXG5jbGFzcyBGaXhlZENpcmN1bGFyQnVmZmVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5ib3R0b20gPSAwO1xuICAgIHRoaXMudG9wID0gMDtcbiAgICB0aGlzLmxpc3QgPSBuZXcgQXJyYXkoa1NpemUpO1xuICAgIHRoaXMubmV4dCA9IG51bGw7XG4gIH1cblxuICBpc0VtcHR5KCkge1xuICAgIHJldHVybiB0aGlzLnRvcCA9PT0gdGhpcy5ib3R0b207XG4gIH1cblxuICBpc0Z1bGwoKSB7XG4gICAgcmV0dXJuICgodGhpcy50b3AgKyAxKSAmIGtNYXNrKSA9PT0gdGhpcy5ib3R0b207XG4gIH1cblxuICBwdXNoKGRhdGEpIHtcbiAgICB0aGlzLmxpc3RbdGhpcy50b3BdID0gZGF0YTtcbiAgICB0aGlzLnRvcCA9ICh0aGlzLnRvcCArIDEpICYga01hc2s7XG4gIH1cblxuICBzaGlmdCgpIHtcbiAgICBjb25zdCBuZXh0SXRlbSA9IHRoaXMubGlzdFt0aGlzLmJvdHRvbV07XG4gICAgaWYgKG5leHRJdGVtID09PSB1bmRlZmluZWQpXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB0aGlzLmxpc3RbdGhpcy5ib3R0b21dID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuYm90dG9tID0gKHRoaXMuYm90dG9tICsgMSkgJiBrTWFzaztcbiAgICByZXR1cm4gbmV4dEl0ZW07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBGaXhlZFF1ZXVlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5oZWFkID0gdGhpcy50YWlsID0gbmV3IEZpeGVkQ2lyY3VsYXJCdWZmZXIoKTtcbiAgfVxuXG4gIGlzRW1wdHkoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGVhZC5pc0VtcHR5KCk7XG4gIH1cblxuICBwdXNoKGRhdGEpIHtcbiAgICBpZiAodGhpcy5oZWFkLmlzRnVsbCgpKSB7XG4gICAgICAvLyBIZWFkIGlzIGZ1bGw6IENyZWF0ZXMgYSBuZXcgcXVldWUsIHNldHMgdGhlIG9sZCBxdWV1ZSdzIGAubmV4dGAgdG8gaXQsXG4gICAgICAvLyBhbmQgc2V0cyBpdCBhcyB0aGUgbmV3IG1haW4gcXVldWUuXG4gICAgICB0aGlzLmhlYWQgPSB0aGlzLmhlYWQubmV4dCA9IG5ldyBGaXhlZENpcmN1bGFyQnVmZmVyKCk7XG4gICAgfVxuICAgIHRoaXMuaGVhZC5wdXNoKGRhdGEpO1xuICB9XG5cbiAgc2hpZnQoKSB7XG4gICAgY29uc3QgdGFpbCA9IHRoaXMudGFpbDtcbiAgICBjb25zdCBuZXh0ID0gdGFpbC5zaGlmdCgpO1xuICAgIGlmICh0YWlsLmlzRW1wdHkoKSAmJiB0YWlsLm5leHQgIT09IG51bGwpIHtcbiAgICAgIC8vIElmIHRoZXJlIGlzIGFub3RoZXIgcXVldWUsIGl0IGZvcm1zIHRoZSBuZXcgdGFpbC5cbiAgICAgIHRoaXMudGFpbCA9IHRhaWwubmV4dDtcbiAgICB9XG4gICAgcmV0dXJuIG5leHQ7XG4gIH1cbn07XG4iLAogICAgImNvbnN0IHsga0ZyZWUsIGtDb25uZWN0ZWQsIGtQZW5kaW5nLCBrUXVldWVkLCBrUnVubmluZywga1NpemUgfSA9IHJlcXVpcmUoJy4vY29yZS9zeW1ib2xzJylcbmNvbnN0IGtQb29sID0gU3ltYm9sKCdwb29sJylcblxuY2xhc3MgUG9vbFN0YXRzIHtcbiAgY29uc3RydWN0b3IgKHBvb2wpIHtcbiAgICB0aGlzW2tQb29sXSA9IHBvb2xcbiAgfVxuXG4gIGdldCBjb25uZWN0ZWQgKCkge1xuICAgIHJldHVybiB0aGlzW2tQb29sXVtrQ29ubmVjdGVkXVxuICB9XG5cbiAgZ2V0IGZyZWUgKCkge1xuICAgIHJldHVybiB0aGlzW2tQb29sXVtrRnJlZV1cbiAgfVxuXG4gIGdldCBwZW5kaW5nICgpIHtcbiAgICByZXR1cm4gdGhpc1trUG9vbF1ba1BlbmRpbmddXG4gIH1cblxuICBnZXQgcXVldWVkICgpIHtcbiAgICByZXR1cm4gdGhpc1trUG9vbF1ba1F1ZXVlZF1cbiAgfVxuXG4gIGdldCBydW5uaW5nICgpIHtcbiAgICByZXR1cm4gdGhpc1trUG9vbF1ba1J1bm5pbmddXG4gIH1cblxuICBnZXQgc2l6ZSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1Bvb2xdW2tTaXplXVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUG9vbFN0YXRzXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBEaXNwYXRjaGVyQmFzZSA9IHJlcXVpcmUoJy4vZGlzcGF0Y2hlci1iYXNlJylcbmNvbnN0IEZpeGVkUXVldWUgPSByZXF1aXJlKCcuL25vZGUvZml4ZWQtcXVldWUnKVxuY29uc3QgeyBrQ29ubmVjdGVkLCBrU2l6ZSwga1J1bm5pbmcsIGtQZW5kaW5nLCBrUXVldWVkLCBrQnVzeSwga0ZyZWUsIGtVcmwsIGtDbG9zZSwga0Rlc3Ryb3ksIGtEaXNwYXRjaCB9ID0gcmVxdWlyZSgnLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgUG9vbFN0YXRzID0gcmVxdWlyZSgnLi9wb29sLXN0YXRzJylcblxuY29uc3Qga0NsaWVudHMgPSBTeW1ib2woJ2NsaWVudHMnKVxuY29uc3Qga05lZWREcmFpbiA9IFN5bWJvbCgnbmVlZERyYWluJylcbmNvbnN0IGtRdWV1ZSA9IFN5bWJvbCgncXVldWUnKVxuY29uc3Qga0Nsb3NlZFJlc29sdmUgPSBTeW1ib2woJ2Nsb3NlZCByZXNvbHZlJylcbmNvbnN0IGtPbkRyYWluID0gU3ltYm9sKCdvbkRyYWluJylcbmNvbnN0IGtPbkNvbm5lY3QgPSBTeW1ib2woJ29uQ29ubmVjdCcpXG5jb25zdCBrT25EaXNjb25uZWN0ID0gU3ltYm9sKCdvbkRpc2Nvbm5lY3QnKVxuY29uc3Qga09uQ29ubmVjdGlvbkVycm9yID0gU3ltYm9sKCdvbkNvbm5lY3Rpb25FcnJvcicpXG5jb25zdCBrR2V0RGlzcGF0Y2hlciA9IFN5bWJvbCgnZ2V0IGRpc3BhdGNoZXInKVxuY29uc3Qga0FkZENsaWVudCA9IFN5bWJvbCgnYWRkIGNsaWVudCcpXG5jb25zdCBrUmVtb3ZlQ2xpZW50ID0gU3ltYm9sKCdyZW1vdmUgY2xpZW50JylcbmNvbnN0IGtTdGF0cyA9IFN5bWJvbCgnc3RhdHMnKVxuXG5jbGFzcyBQb29sQmFzZSBleHRlbmRzIERpc3BhdGNoZXJCYXNlIHtcbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXNba1F1ZXVlXSA9IG5ldyBGaXhlZFF1ZXVlKClcbiAgICB0aGlzW2tDbGllbnRzXSA9IFtdXG4gICAgdGhpc1trUXVldWVkXSA9IDBcblxuICAgIGNvbnN0IHBvb2wgPSB0aGlzXG5cbiAgICB0aGlzW2tPbkRyYWluXSA9IGZ1bmN0aW9uIG9uRHJhaW4gKG9yaWdpbiwgdGFyZ2V0cykge1xuICAgICAgY29uc3QgcXVldWUgPSBwb29sW2tRdWV1ZV1cblxuICAgICAgbGV0IG5lZWREcmFpbiA9IGZhbHNlXG5cbiAgICAgIHdoaWxlICghbmVlZERyYWluKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBxdWV1ZS5zaGlmdCgpXG4gICAgICAgIGlmICghaXRlbSkge1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgcG9vbFtrUXVldWVkXS0tXG4gICAgICAgIG5lZWREcmFpbiA9ICF0aGlzLmRpc3BhdGNoKGl0ZW0ub3B0cywgaXRlbS5oYW5kbGVyKVxuICAgICAgfVxuXG4gICAgICB0aGlzW2tOZWVkRHJhaW5dID0gbmVlZERyYWluXG5cbiAgICAgIGlmICghdGhpc1trTmVlZERyYWluXSAmJiBwb29sW2tOZWVkRHJhaW5dKSB7XG4gICAgICAgIHBvb2xba05lZWREcmFpbl0gPSBmYWxzZVxuICAgICAgICBwb29sLmVtaXQoJ2RyYWluJywgb3JpZ2luLCBbcG9vbCwgLi4udGFyZ2V0c10pXG4gICAgICB9XG5cbiAgICAgIGlmIChwb29sW2tDbG9zZWRSZXNvbHZlXSAmJiBxdWV1ZS5pc0VtcHR5KCkpIHtcbiAgICAgICAgUHJvbWlzZVxuICAgICAgICAgIC5hbGwocG9vbFtrQ2xpZW50c10ubWFwKGMgPT4gYy5jbG9zZSgpKSlcbiAgICAgICAgICAudGhlbihwb29sW2tDbG9zZWRSZXNvbHZlXSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzW2tPbkNvbm5lY3RdID0gKG9yaWdpbiwgdGFyZ2V0cykgPT4ge1xuICAgICAgcG9vbC5lbWl0KCdjb25uZWN0Jywgb3JpZ2luLCBbcG9vbCwgLi4udGFyZ2V0c10pXG4gICAgfVxuXG4gICAgdGhpc1trT25EaXNjb25uZWN0XSA9IChvcmlnaW4sIHRhcmdldHMsIGVycikgPT4ge1xuICAgICAgcG9vbC5lbWl0KCdkaXNjb25uZWN0Jywgb3JpZ2luLCBbcG9vbCwgLi4udGFyZ2V0c10sIGVycilcbiAgICB9XG5cbiAgICB0aGlzW2tPbkNvbm5lY3Rpb25FcnJvcl0gPSAob3JpZ2luLCB0YXJnZXRzLCBlcnIpID0+IHtcbiAgICAgIHBvb2wuZW1pdCgnY29ubmVjdGlvbkVycm9yJywgb3JpZ2luLCBbcG9vbCwgLi4udGFyZ2V0c10sIGVycilcbiAgICB9XG5cbiAgICB0aGlzW2tTdGF0c10gPSBuZXcgUG9vbFN0YXRzKHRoaXMpXG4gIH1cblxuICBnZXQgW2tCdXN5XSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba05lZWREcmFpbl1cbiAgfVxuXG4gIGdldCBba0Nvbm5lY3RlZF0gKCkge1xuICAgIHJldHVybiB0aGlzW2tDbGllbnRzXS5maWx0ZXIoY2xpZW50ID0+IGNsaWVudFtrQ29ubmVjdGVkXSkubGVuZ3RoXG4gIH1cblxuICBnZXQgW2tGcmVlXSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0NsaWVudHNdLmZpbHRlcihjbGllbnQgPT4gY2xpZW50W2tDb25uZWN0ZWRdICYmICFjbGllbnRba05lZWREcmFpbl0pLmxlbmd0aFxuICB9XG5cbiAgZ2V0IFtrUGVuZGluZ10gKCkge1xuICAgIGxldCByZXQgPSB0aGlzW2tRdWV1ZWRdXG4gICAgZm9yIChjb25zdCB7IFtrUGVuZGluZ106IHBlbmRpbmcgfSBvZiB0aGlzW2tDbGllbnRzXSkge1xuICAgICAgcmV0ICs9IHBlbmRpbmdcbiAgICB9XG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgZ2V0IFtrUnVubmluZ10gKCkge1xuICAgIGxldCByZXQgPSAwXG4gICAgZm9yIChjb25zdCB7IFtrUnVubmluZ106IHJ1bm5pbmcgfSBvZiB0aGlzW2tDbGllbnRzXSkge1xuICAgICAgcmV0ICs9IHJ1bm5pbmdcbiAgICB9XG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgZ2V0IFtrU2l6ZV0gKCkge1xuICAgIGxldCByZXQgPSB0aGlzW2tRdWV1ZWRdXG4gICAgZm9yIChjb25zdCB7IFtrU2l6ZV06IHNpemUgfSBvZiB0aGlzW2tDbGllbnRzXSkge1xuICAgICAgcmV0ICs9IHNpemVcbiAgICB9XG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgZ2V0IHN0YXRzICgpIHtcbiAgICByZXR1cm4gdGhpc1trU3RhdHNdXG4gIH1cblxuICBhc3luYyBba0Nsb3NlXSAoKSB7XG4gICAgaWYgKHRoaXNba1F1ZXVlXS5pc0VtcHR5KCkpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLmFsbCh0aGlzW2tDbGllbnRzXS5tYXAoYyA9PiBjLmNsb3NlKCkpKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgdGhpc1trQ2xvc2VkUmVzb2x2ZV0gPSByZXNvbHZlXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIFtrRGVzdHJveV0gKGVycikge1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCBpdGVtID0gdGhpc1trUXVldWVdLnNoaWZ0KClcbiAgICAgIGlmICghaXRlbSkge1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgaXRlbS5oYW5kbGVyLm9uRXJyb3IoZXJyKVxuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLmFsbCh0aGlzW2tDbGllbnRzXS5tYXAoYyA9PiBjLmRlc3Ryb3koZXJyKSkpXG4gIH1cblxuICBba0Rpc3BhdGNoXSAob3B0cywgaGFuZGxlcikge1xuICAgIGNvbnN0IGRpc3BhdGNoZXIgPSB0aGlzW2tHZXREaXNwYXRjaGVyXSgpXG5cbiAgICBpZiAoIWRpc3BhdGNoZXIpIHtcbiAgICAgIHRoaXNba05lZWREcmFpbl0gPSB0cnVlXG4gICAgICB0aGlzW2tRdWV1ZV0ucHVzaCh7IG9wdHMsIGhhbmRsZXIgfSlcbiAgICAgIHRoaXNba1F1ZXVlZF0rK1xuICAgIH0gZWxzZSBpZiAoIWRpc3BhdGNoZXIuZGlzcGF0Y2gob3B0cywgaGFuZGxlcikpIHtcbiAgICAgIGRpc3BhdGNoZXJba05lZWREcmFpbl0gPSB0cnVlXG4gICAgICB0aGlzW2tOZWVkRHJhaW5dID0gIXRoaXNba0dldERpc3BhdGNoZXJdKClcbiAgICB9XG5cbiAgICByZXR1cm4gIXRoaXNba05lZWREcmFpbl1cbiAgfVxuXG4gIFtrQWRkQ2xpZW50XSAoY2xpZW50KSB7XG4gICAgY2xpZW50XG4gICAgICAub24oJ2RyYWluJywgdGhpc1trT25EcmFpbl0pXG4gICAgICAub24oJ2Nvbm5lY3QnLCB0aGlzW2tPbkNvbm5lY3RdKVxuICAgICAgLm9uKCdkaXNjb25uZWN0JywgdGhpc1trT25EaXNjb25uZWN0XSlcbiAgICAgIC5vbignY29ubmVjdGlvbkVycm9yJywgdGhpc1trT25Db25uZWN0aW9uRXJyb3JdKVxuXG4gICAgdGhpc1trQ2xpZW50c10ucHVzaChjbGllbnQpXG5cbiAgICBpZiAodGhpc1trTmVlZERyYWluXSkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzW2tOZWVkRHJhaW5dKSB7XG4gICAgICAgICAgdGhpc1trT25EcmFpbl0oY2xpZW50W2tVcmxdLCBbdGhpcywgY2xpZW50XSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgW2tSZW1vdmVDbGllbnRdIChjbGllbnQpIHtcbiAgICBjbGllbnQuY2xvc2UoKCkgPT4ge1xuICAgICAgY29uc3QgaWR4ID0gdGhpc1trQ2xpZW50c10uaW5kZXhPZihjbGllbnQpXG4gICAgICBpZiAoaWR4ICE9PSAtMSkge1xuICAgICAgICB0aGlzW2tDbGllbnRzXS5zcGxpY2UoaWR4LCAxKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICB0aGlzW2tOZWVkRHJhaW5dID0gdGhpc1trQ2xpZW50c10uc29tZShkaXNwYXRjaGVyID0+IChcbiAgICAgICFkaXNwYXRjaGVyW2tOZWVkRHJhaW5dICYmXG4gICAgICBkaXNwYXRjaGVyLmNsb3NlZCAhPT0gdHJ1ZSAmJlxuICAgICAgZGlzcGF0Y2hlci5kZXN0cm95ZWQgIT09IHRydWVcbiAgICApKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBQb29sQmFzZSxcbiAga0NsaWVudHMsXG4gIGtOZWVkRHJhaW4sXG4gIGtBZGRDbGllbnQsXG4gIGtSZW1vdmVDbGllbnQsXG4gIGtHZXREaXNwYXRjaGVyXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIFBvb2xCYXNlLFxuICBrQ2xpZW50cyxcbiAga05lZWREcmFpbixcbiAga0FkZENsaWVudCxcbiAga0dldERpc3BhdGNoZXJcbn0gPSByZXF1aXJlKCcuL3Bvb2wtYmFzZScpXG5jb25zdCBDbGllbnQgPSByZXF1aXJlKCcuL2NsaWVudCcpXG5jb25zdCB7XG4gIEludmFsaWRBcmd1bWVudEVycm9yXG59ID0gcmVxdWlyZSgnLi9jb3JlL2Vycm9ycycpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBrVXJsLCBrSW50ZXJjZXB0b3JzIH0gPSByZXF1aXJlKCcuL2NvcmUvc3ltYm9scycpXG5jb25zdCBidWlsZENvbm5lY3RvciA9IHJlcXVpcmUoJy4vY29yZS9jb25uZWN0JylcblxuY29uc3Qga09wdGlvbnMgPSBTeW1ib2woJ29wdGlvbnMnKVxuY29uc3Qga0Nvbm5lY3Rpb25zID0gU3ltYm9sKCdjb25uZWN0aW9ucycpXG5jb25zdCBrRmFjdG9yeSA9IFN5bWJvbCgnZmFjdG9yeScpXG5cbmZ1bmN0aW9uIGRlZmF1bHRGYWN0b3J5IChvcmlnaW4sIG9wdHMpIHtcbiAgcmV0dXJuIG5ldyBDbGllbnQob3JpZ2luLCBvcHRzKVxufVxuXG5jbGFzcyBQb29sIGV4dGVuZHMgUG9vbEJhc2Uge1xuICBjb25zdHJ1Y3RvciAob3JpZ2luLCB7XG4gICAgY29ubmVjdGlvbnMsXG4gICAgZmFjdG9yeSA9IGRlZmF1bHRGYWN0b3J5LFxuICAgIGNvbm5lY3QsXG4gICAgY29ubmVjdFRpbWVvdXQsXG4gICAgdGxzLFxuICAgIG1heENhY2hlZFNlc3Npb25zLFxuICAgIHNvY2tldFBhdGgsXG4gICAgYXV0b1NlbGVjdEZhbWlseSxcbiAgICBhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQsXG4gICAgYWxsb3dIMixcbiAgICAuLi5vcHRpb25zXG4gIH0gPSB7fSkge1xuICAgIHN1cGVyKClcblxuICAgIGlmIChjb25uZWN0aW9ucyAhPSBudWxsICYmICghTnVtYmVyLmlzRmluaXRlKGNvbm5lY3Rpb25zKSB8fCBjb25uZWN0aW9ucyA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY29ubmVjdGlvbnMnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZmFjdG9yeSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdmYWN0b3J5IG11c3QgYmUgYSBmdW5jdGlvbi4nKVxuICAgIH1cblxuICAgIGlmIChjb25uZWN0ICE9IG51bGwgJiYgdHlwZW9mIGNvbm5lY3QgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGNvbm5lY3QgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2Nvbm5lY3QgbXVzdCBiZSBhIGZ1bmN0aW9uIG9yIGFuIG9iamVjdCcpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjb25uZWN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25uZWN0ID0gYnVpbGRDb25uZWN0b3Ioe1xuICAgICAgICAuLi50bHMsXG4gICAgICAgIG1heENhY2hlZFNlc3Npb25zLFxuICAgICAgICBhbGxvd0gyLFxuICAgICAgICBzb2NrZXRQYXRoLFxuICAgICAgICB0aW1lb3V0OiBjb25uZWN0VGltZW91dCxcbiAgICAgICAgLi4uKHV0aWwubm9kZUhhc0F1dG9TZWxlY3RGYW1pbHkgJiYgYXV0b1NlbGVjdEZhbWlseSA/IHsgYXV0b1NlbGVjdEZhbWlseSwgYXV0b1NlbGVjdEZhbWlseUF0dGVtcHRUaW1lb3V0IH0gOiB1bmRlZmluZWQpLFxuICAgICAgICAuLi5jb25uZWN0XG4gICAgICB9KVxuICAgIH1cblxuICAgIHRoaXNba0ludGVyY2VwdG9yc10gPSBvcHRpb25zLmludGVyY2VwdG9ycyAmJiBvcHRpb25zLmludGVyY2VwdG9ycy5Qb29sICYmIEFycmF5LmlzQXJyYXkob3B0aW9ucy5pbnRlcmNlcHRvcnMuUG9vbClcbiAgICAgID8gb3B0aW9ucy5pbnRlcmNlcHRvcnMuUG9vbFxuICAgICAgOiBbXVxuICAgIHRoaXNba0Nvbm5lY3Rpb25zXSA9IGNvbm5lY3Rpb25zIHx8IG51bGxcbiAgICB0aGlzW2tVcmxdID0gdXRpbC5wYXJzZU9yaWdpbihvcmlnaW4pXG4gICAgdGhpc1trT3B0aW9uc10gPSB7IC4uLnV0aWwuZGVlcENsb25lKG9wdGlvbnMpLCBjb25uZWN0LCBhbGxvd0gyIH1cbiAgICB0aGlzW2tPcHRpb25zXS5pbnRlcmNlcHRvcnMgPSBvcHRpb25zLmludGVyY2VwdG9yc1xuICAgICAgPyB7IC4uLm9wdGlvbnMuaW50ZXJjZXB0b3JzIH1cbiAgICAgIDogdW5kZWZpbmVkXG4gICAgdGhpc1trRmFjdG9yeV0gPSBmYWN0b3J5XG4gIH1cblxuICBba0dldERpc3BhdGNoZXJdICgpIHtcbiAgICBsZXQgZGlzcGF0Y2hlciA9IHRoaXNba0NsaWVudHNdLmZpbmQoZGlzcGF0Y2hlciA9PiAhZGlzcGF0Y2hlcltrTmVlZERyYWluXSlcblxuICAgIGlmIChkaXNwYXRjaGVyKSB7XG4gICAgICByZXR1cm4gZGlzcGF0Y2hlclxuICAgIH1cblxuICAgIGlmICghdGhpc1trQ29ubmVjdGlvbnNdIHx8IHRoaXNba0NsaWVudHNdLmxlbmd0aCA8IHRoaXNba0Nvbm5lY3Rpb25zXSkge1xuICAgICAgZGlzcGF0Y2hlciA9IHRoaXNba0ZhY3RvcnldKHRoaXNba1VybF0sIHRoaXNba09wdGlvbnNdKVxuICAgICAgdGhpc1trQWRkQ2xpZW50XShkaXNwYXRjaGVyKVxuICAgIH1cblxuICAgIHJldHVybiBkaXNwYXRjaGVyXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBQb29sXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIEJhbGFuY2VkUG9vbE1pc3NpbmdVcHN0cmVhbUVycm9yLFxuICBJbnZhbGlkQXJndW1lbnRFcnJvclxufSA9IHJlcXVpcmUoJy4vY29yZS9lcnJvcnMnKVxuY29uc3Qge1xuICBQb29sQmFzZSxcbiAga0NsaWVudHMsXG4gIGtOZWVkRHJhaW4sXG4gIGtBZGRDbGllbnQsXG4gIGtSZW1vdmVDbGllbnQsXG4gIGtHZXREaXNwYXRjaGVyXG59ID0gcmVxdWlyZSgnLi9wb29sLWJhc2UnKVxuY29uc3QgUG9vbCA9IHJlcXVpcmUoJy4vcG9vbCcpXG5jb25zdCB7IGtVcmwsIGtJbnRlcmNlcHRvcnMgfSA9IHJlcXVpcmUoJy4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsgcGFyc2VPcmlnaW4gfSA9IHJlcXVpcmUoJy4vY29yZS91dGlsJylcbmNvbnN0IGtGYWN0b3J5ID0gU3ltYm9sKCdmYWN0b3J5JylcblxuY29uc3Qga09wdGlvbnMgPSBTeW1ib2woJ29wdGlvbnMnKVxuY29uc3Qga0dyZWF0ZXN0Q29tbW9uRGl2aXNvciA9IFN5bWJvbCgna0dyZWF0ZXN0Q29tbW9uRGl2aXNvcicpXG5jb25zdCBrQ3VycmVudFdlaWdodCA9IFN5bWJvbCgna0N1cnJlbnRXZWlnaHQnKVxuY29uc3Qga0luZGV4ID0gU3ltYm9sKCdrSW5kZXgnKVxuY29uc3Qga1dlaWdodCA9IFN5bWJvbCgna1dlaWdodCcpXG5jb25zdCBrTWF4V2VpZ2h0UGVyU2VydmVyID0gU3ltYm9sKCdrTWF4V2VpZ2h0UGVyU2VydmVyJylcbmNvbnN0IGtFcnJvclBlbmFsdHkgPSBTeW1ib2woJ2tFcnJvclBlbmFsdHknKVxuXG5mdW5jdGlvbiBnZXRHcmVhdGVzdENvbW1vbkRpdmlzb3IgKGEsIGIpIHtcbiAgaWYgKGIgPT09IDApIHJldHVybiBhXG4gIHJldHVybiBnZXRHcmVhdGVzdENvbW1vbkRpdmlzb3IoYiwgYSAlIGIpXG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRGYWN0b3J5IChvcmlnaW4sIG9wdHMpIHtcbiAgcmV0dXJuIG5ldyBQb29sKG9yaWdpbiwgb3B0cylcbn1cblxuY2xhc3MgQmFsYW5jZWRQb29sIGV4dGVuZHMgUG9vbEJhc2Uge1xuICBjb25zdHJ1Y3RvciAodXBzdHJlYW1zID0gW10sIHsgZmFjdG9yeSA9IGRlZmF1bHRGYWN0b3J5LCAuLi5vcHRzIH0gPSB7fSkge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXNba09wdGlvbnNdID0gb3B0c1xuICAgIHRoaXNba0luZGV4XSA9IC0xXG4gICAgdGhpc1trQ3VycmVudFdlaWdodF0gPSAwXG5cbiAgICB0aGlzW2tNYXhXZWlnaHRQZXJTZXJ2ZXJdID0gdGhpc1trT3B0aW9uc10ubWF4V2VpZ2h0UGVyU2VydmVyIHx8IDEwMFxuICAgIHRoaXNba0Vycm9yUGVuYWx0eV0gPSB0aGlzW2tPcHRpb25zXS5lcnJvclBlbmFsdHkgfHwgMTVcblxuICAgIGlmICghQXJyYXkuaXNBcnJheSh1cHN0cmVhbXMpKSB7XG4gICAgICB1cHN0cmVhbXMgPSBbdXBzdHJlYW1zXVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZmFjdG9yeSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdmYWN0b3J5IG11c3QgYmUgYSBmdW5jdGlvbi4nKVxuICAgIH1cblxuICAgIHRoaXNba0ludGVyY2VwdG9yc10gPSBvcHRzLmludGVyY2VwdG9ycyAmJiBvcHRzLmludGVyY2VwdG9ycy5CYWxhbmNlZFBvb2wgJiYgQXJyYXkuaXNBcnJheShvcHRzLmludGVyY2VwdG9ycy5CYWxhbmNlZFBvb2wpXG4gICAgICA/IG9wdHMuaW50ZXJjZXB0b3JzLkJhbGFuY2VkUG9vbFxuICAgICAgOiBbXVxuICAgIHRoaXNba0ZhY3RvcnldID0gZmFjdG9yeVxuXG4gICAgZm9yIChjb25zdCB1cHN0cmVhbSBvZiB1cHN0cmVhbXMpIHtcbiAgICAgIHRoaXMuYWRkVXBzdHJlYW0odXBzdHJlYW0pXG4gICAgfVxuICAgIHRoaXMuX3VwZGF0ZUJhbGFuY2VkUG9vbFN0YXRzKClcbiAgfVxuXG4gIGFkZFVwc3RyZWFtICh1cHN0cmVhbSkge1xuICAgIGNvbnN0IHVwc3RyZWFtT3JpZ2luID0gcGFyc2VPcmlnaW4odXBzdHJlYW0pLm9yaWdpblxuXG4gICAgaWYgKHRoaXNba0NsaWVudHNdLmZpbmQoKHBvb2wpID0+IChcbiAgICAgIHBvb2xba1VybF0ub3JpZ2luID09PSB1cHN0cmVhbU9yaWdpbiAmJlxuICAgICAgcG9vbC5jbG9zZWQgIT09IHRydWUgJiZcbiAgICAgIHBvb2wuZGVzdHJveWVkICE9PSB0cnVlXG4gICAgKSkpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuICAgIGNvbnN0IHBvb2wgPSB0aGlzW2tGYWN0b3J5XSh1cHN0cmVhbU9yaWdpbiwgT2JqZWN0LmFzc2lnbih7fSwgdGhpc1trT3B0aW9uc10pKVxuXG4gICAgdGhpc1trQWRkQ2xpZW50XShwb29sKVxuICAgIHBvb2wub24oJ2Nvbm5lY3QnLCAoKSA9PiB7XG4gICAgICBwb29sW2tXZWlnaHRdID0gTWF0aC5taW4odGhpc1trTWF4V2VpZ2h0UGVyU2VydmVyXSwgcG9vbFtrV2VpZ2h0XSArIHRoaXNba0Vycm9yUGVuYWx0eV0pXG4gICAgfSlcblxuICAgIHBvb2wub24oJ2Nvbm5lY3Rpb25FcnJvcicsICgpID0+IHtcbiAgICAgIHBvb2xba1dlaWdodF0gPSBNYXRoLm1heCgxLCBwb29sW2tXZWlnaHRdIC0gdGhpc1trRXJyb3JQZW5hbHR5XSlcbiAgICAgIHRoaXMuX3VwZGF0ZUJhbGFuY2VkUG9vbFN0YXRzKClcbiAgICB9KVxuXG4gICAgcG9vbC5vbignZGlzY29ubmVjdCcsICguLi5hcmdzKSA9PiB7XG4gICAgICBjb25zdCBlcnIgPSBhcmdzWzJdXG4gICAgICBpZiAoZXJyICYmIGVyci5jb2RlID09PSAnVU5EX0VSUl9TT0NLRVQnKSB7XG4gICAgICAgIC8vIGRlY3JlYXNlIHRoZSB3ZWlnaHQgb2YgdGhlIHBvb2wuXG4gICAgICAgIHBvb2xba1dlaWdodF0gPSBNYXRoLm1heCgxLCBwb29sW2tXZWlnaHRdIC0gdGhpc1trRXJyb3JQZW5hbHR5XSlcbiAgICAgICAgdGhpcy5fdXBkYXRlQmFsYW5jZWRQb29sU3RhdHMoKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBmb3IgKGNvbnN0IGNsaWVudCBvZiB0aGlzW2tDbGllbnRzXSkge1xuICAgICAgY2xpZW50W2tXZWlnaHRdID0gdGhpc1trTWF4V2VpZ2h0UGVyU2VydmVyXVxuICAgIH1cblxuICAgIHRoaXMuX3VwZGF0ZUJhbGFuY2VkUG9vbFN0YXRzKClcblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBfdXBkYXRlQmFsYW5jZWRQb29sU3RhdHMgKCkge1xuICAgIHRoaXNba0dyZWF0ZXN0Q29tbW9uRGl2aXNvcl0gPSB0aGlzW2tDbGllbnRzXS5tYXAocCA9PiBwW2tXZWlnaHRdKS5yZWR1Y2UoZ2V0R3JlYXRlc3RDb21tb25EaXZpc29yLCAwKVxuICB9XG5cbiAgcmVtb3ZlVXBzdHJlYW0gKHVwc3RyZWFtKSB7XG4gICAgY29uc3QgdXBzdHJlYW1PcmlnaW4gPSBwYXJzZU9yaWdpbih1cHN0cmVhbSkub3JpZ2luXG5cbiAgICBjb25zdCBwb29sID0gdGhpc1trQ2xpZW50c10uZmluZCgocG9vbCkgPT4gKFxuICAgICAgcG9vbFtrVXJsXS5vcmlnaW4gPT09IHVwc3RyZWFtT3JpZ2luICYmXG4gICAgICBwb29sLmNsb3NlZCAhPT0gdHJ1ZSAmJlxuICAgICAgcG9vbC5kZXN0cm95ZWQgIT09IHRydWVcbiAgICApKVxuXG4gICAgaWYgKHBvb2wpIHtcbiAgICAgIHRoaXNba1JlbW92ZUNsaWVudF0ocG9vbClcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgZ2V0IHVwc3RyZWFtcyAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0NsaWVudHNdXG4gICAgICAuZmlsdGVyKGRpc3BhdGNoZXIgPT4gZGlzcGF0Y2hlci5jbG9zZWQgIT09IHRydWUgJiYgZGlzcGF0Y2hlci5kZXN0cm95ZWQgIT09IHRydWUpXG4gICAgICAubWFwKChwKSA9PiBwW2tVcmxdLm9yaWdpbilcbiAgfVxuXG4gIFtrR2V0RGlzcGF0Y2hlcl0gKCkge1xuICAgIC8vIFdlIHZhbGlkYXRlIHRoYXQgcG9vbHMgaXMgZ3JlYXRlciB0aGFuIDAsXG4gICAgLy8gb3RoZXJ3aXNlIHdlIHdvdWxkIGhhdmUgdG8gd2FpdCB1bnRpbCBhbiB1cHN0cmVhbVxuICAgIC8vIGlzIGFkZGVkLCB3aGljaCBtaWdodCBuZXZlciBoYXBwZW4uXG4gICAgaWYgKHRoaXNba0NsaWVudHNdLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEJhbGFuY2VkUG9vbE1pc3NpbmdVcHN0cmVhbUVycm9yKClcbiAgICB9XG5cbiAgICBjb25zdCBkaXNwYXRjaGVyID0gdGhpc1trQ2xpZW50c10uZmluZChkaXNwYXRjaGVyID0+IChcbiAgICAgICFkaXNwYXRjaGVyW2tOZWVkRHJhaW5dICYmXG4gICAgICBkaXNwYXRjaGVyLmNsb3NlZCAhPT0gdHJ1ZSAmJlxuICAgICAgZGlzcGF0Y2hlci5kZXN0cm95ZWQgIT09IHRydWVcbiAgICApKVxuXG4gICAgaWYgKCFkaXNwYXRjaGVyKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBhbGxDbGllbnRzQnVzeSA9IHRoaXNba0NsaWVudHNdLm1hcChwb29sID0+IHBvb2xba05lZWREcmFpbl0pLnJlZHVjZSgoYSwgYikgPT4gYSAmJiBiLCB0cnVlKVxuXG4gICAgaWYgKGFsbENsaWVudHNCdXN5KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBsZXQgY291bnRlciA9IDBcblxuICAgIGxldCBtYXhXZWlnaHRJbmRleCA9IHRoaXNba0NsaWVudHNdLmZpbmRJbmRleChwb29sID0+ICFwb29sW2tOZWVkRHJhaW5dKVxuXG4gICAgd2hpbGUgKGNvdW50ZXIrKyA8IHRoaXNba0NsaWVudHNdLmxlbmd0aCkge1xuICAgICAgdGhpc1trSW5kZXhdID0gKHRoaXNba0luZGV4XSArIDEpICUgdGhpc1trQ2xpZW50c10ubGVuZ3RoXG4gICAgICBjb25zdCBwb29sID0gdGhpc1trQ2xpZW50c11bdGhpc1trSW5kZXhdXVxuXG4gICAgICAvLyBmaW5kIHBvb2wgaW5kZXggd2l0aCB0aGUgbGFyZ2VzdCB3ZWlnaHRcbiAgICAgIGlmIChwb29sW2tXZWlnaHRdID4gdGhpc1trQ2xpZW50c11bbWF4V2VpZ2h0SW5kZXhdW2tXZWlnaHRdICYmICFwb29sW2tOZWVkRHJhaW5dKSB7XG4gICAgICAgIG1heFdlaWdodEluZGV4ID0gdGhpc1trSW5kZXhdXG4gICAgICB9XG5cbiAgICAgIC8vIGRlY3JlYXNlIHRoZSBjdXJyZW50IHdlaWdodCBldmVyeSBgdGhpc1trQ2xpZW50c10ubGVuZ3RoYC5cbiAgICAgIGlmICh0aGlzW2tJbmRleF0gPT09IDApIHtcbiAgICAgICAgLy8gU2V0IHRoZSBjdXJyZW50IHdlaWdodCB0byB0aGUgbmV4dCBsb3dlciB3ZWlnaHQuXG4gICAgICAgIHRoaXNba0N1cnJlbnRXZWlnaHRdID0gdGhpc1trQ3VycmVudFdlaWdodF0gLSB0aGlzW2tHcmVhdGVzdENvbW1vbkRpdmlzb3JdXG5cbiAgICAgICAgaWYgKHRoaXNba0N1cnJlbnRXZWlnaHRdIDw9IDApIHtcbiAgICAgICAgICB0aGlzW2tDdXJyZW50V2VpZ2h0XSA9IHRoaXNba01heFdlaWdodFBlclNlcnZlcl1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHBvb2xba1dlaWdodF0gPj0gdGhpc1trQ3VycmVudFdlaWdodF0gJiYgKCFwb29sW2tOZWVkRHJhaW5dKSkge1xuICAgICAgICByZXR1cm4gcG9vbFxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXNba0N1cnJlbnRXZWlnaHRdID0gdGhpc1trQ2xpZW50c11bbWF4V2VpZ2h0SW5kZXhdW2tXZWlnaHRdXG4gICAgdGhpc1trSW5kZXhdID0gbWF4V2VpZ2h0SW5kZXhcbiAgICByZXR1cm4gdGhpc1trQ2xpZW50c11bbWF4V2VpZ2h0SW5kZXhdXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBCYWxhbmNlZFBvb2xcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBmaWxlOiBvbmx5IGZvciBOb2RlIDEyICovXG5cbmNvbnN0IHsga0Nvbm5lY3RlZCwga1NpemUgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5cbmNsYXNzIENvbXBhdFdlYWtSZWYge1xuICBjb25zdHJ1Y3RvciAodmFsdWUpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWVcbiAgfVxuXG4gIGRlcmVmICgpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZVtrQ29ubmVjdGVkXSA9PT0gMCAmJiB0aGlzLnZhbHVlW2tTaXplXSA9PT0gMFxuICAgICAgPyB1bmRlZmluZWRcbiAgICAgIDogdGhpcy52YWx1ZVxuICB9XG59XG5cbmNsYXNzIENvbXBhdEZpbmFsaXplciB7XG4gIGNvbnN0cnVjdG9yIChmaW5hbGl6ZXIpIHtcbiAgICB0aGlzLmZpbmFsaXplciA9IGZpbmFsaXplclxuICB9XG5cbiAgcmVnaXN0ZXIgKGRpc3BhdGNoZXIsIGtleSkge1xuICAgIGlmIChkaXNwYXRjaGVyLm9uKSB7XG4gICAgICBkaXNwYXRjaGVyLm9uKCdkaXNjb25uZWN0JywgKCkgPT4ge1xuICAgICAgICBpZiAoZGlzcGF0Y2hlcltrQ29ubmVjdGVkXSA9PT0gMCAmJiBkaXNwYXRjaGVyW2tTaXplXSA9PT0gMCkge1xuICAgICAgICAgIHRoaXMuZmluYWxpemVyKGtleSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIEZJWE1FOiByZW1vdmUgd29ya2Fyb3VuZCB3aGVuIHRoZSBOb2RlIGJ1ZyBpcyBmaXhlZFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvaXNzdWVzLzQ5MzQ0I2lzc3VlY29tbWVudC0xNzQxNzc2MzA4XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX1Y4X0NPVkVSQUdFKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFdlYWtSZWY6IENvbXBhdFdlYWtSZWYsXG4gICAgICBGaW5hbGl6YXRpb25SZWdpc3RyeTogQ29tcGF0RmluYWxpemVyXG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgV2Vha1JlZjogZ2xvYmFsLldlYWtSZWYgfHwgQ29tcGF0V2Vha1JlZixcbiAgICBGaW5hbGl6YXRpb25SZWdpc3RyeTogZ2xvYmFsLkZpbmFsaXphdGlvblJlZ2lzdHJ5IHx8IENvbXBhdEZpbmFsaXplclxuICB9XG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gPSByZXF1aXJlKCcuL2NvcmUvZXJyb3JzJylcbmNvbnN0IHsga0NsaWVudHMsIGtSdW5uaW5nLCBrQ2xvc2UsIGtEZXN0cm95LCBrRGlzcGF0Y2gsIGtJbnRlcmNlcHRvcnMgfSA9IHJlcXVpcmUoJy4vY29yZS9zeW1ib2xzJylcbmNvbnN0IERpc3BhdGNoZXJCYXNlID0gcmVxdWlyZSgnLi9kaXNwYXRjaGVyLWJhc2UnKVxuY29uc3QgUG9vbCA9IHJlcXVpcmUoJy4vcG9vbCcpXG5jb25zdCBDbGllbnQgPSByZXF1aXJlKCcuL2NsaWVudCcpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi9jb3JlL3V0aWwnKVxuY29uc3QgY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvciA9IHJlcXVpcmUoJy4vaW50ZXJjZXB0b3IvcmVkaXJlY3RJbnRlcmNlcHRvcicpXG5jb25zdCB7IFdlYWtSZWYsIEZpbmFsaXphdGlvblJlZ2lzdHJ5IH0gPSByZXF1aXJlKCcuL2NvbXBhdC9kaXNwYXRjaGVyLXdlYWtyZWYnKSgpXG5cbmNvbnN0IGtPbkNvbm5lY3QgPSBTeW1ib2woJ29uQ29ubmVjdCcpXG5jb25zdCBrT25EaXNjb25uZWN0ID0gU3ltYm9sKCdvbkRpc2Nvbm5lY3QnKVxuY29uc3Qga09uQ29ubmVjdGlvbkVycm9yID0gU3ltYm9sKCdvbkNvbm5lY3Rpb25FcnJvcicpXG5jb25zdCBrTWF4UmVkaXJlY3Rpb25zID0gU3ltYm9sKCdtYXhSZWRpcmVjdGlvbnMnKVxuY29uc3Qga09uRHJhaW4gPSBTeW1ib2woJ29uRHJhaW4nKVxuY29uc3Qga0ZhY3RvcnkgPSBTeW1ib2woJ2ZhY3RvcnknKVxuY29uc3Qga0ZpbmFsaXplciA9IFN5bWJvbCgnZmluYWxpemVyJylcbmNvbnN0IGtPcHRpb25zID0gU3ltYm9sKCdvcHRpb25zJylcblxuZnVuY3Rpb24gZGVmYXVsdEZhY3RvcnkgKG9yaWdpbiwgb3B0cykge1xuICByZXR1cm4gb3B0cyAmJiBvcHRzLmNvbm5lY3Rpb25zID09PSAxXG4gICAgPyBuZXcgQ2xpZW50KG9yaWdpbiwgb3B0cylcbiAgICA6IG5ldyBQb29sKG9yaWdpbiwgb3B0cylcbn1cblxuY2xhc3MgQWdlbnQgZXh0ZW5kcyBEaXNwYXRjaGVyQmFzZSB7XG4gIGNvbnN0cnVjdG9yICh7IGZhY3RvcnkgPSBkZWZhdWx0RmFjdG9yeSwgbWF4UmVkaXJlY3Rpb25zID0gMCwgY29ubmVjdCwgLi4ub3B0aW9ucyB9ID0ge30pIHtcbiAgICBzdXBlcigpXG5cbiAgICBpZiAodHlwZW9mIGZhY3RvcnkgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignZmFjdG9yeSBtdXN0IGJlIGEgZnVuY3Rpb24uJylcbiAgICB9XG5cbiAgICBpZiAoY29ubmVjdCAhPSBudWxsICYmIHR5cGVvZiBjb25uZWN0ICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBjb25uZWN0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdjb25uZWN0IG11c3QgYmUgYSBmdW5jdGlvbiBvciBhbiBvYmplY3QnKVxuICAgIH1cblxuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihtYXhSZWRpcmVjdGlvbnMpIHx8IG1heFJlZGlyZWN0aW9ucyA8IDApIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignbWF4UmVkaXJlY3Rpb25zIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKVxuICAgIH1cblxuICAgIGlmIChjb25uZWN0ICYmIHR5cGVvZiBjb25uZWN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25uZWN0ID0geyAuLi5jb25uZWN0IH1cbiAgICB9XG5cbiAgICB0aGlzW2tJbnRlcmNlcHRvcnNdID0gb3B0aW9ucy5pbnRlcmNlcHRvcnMgJiYgb3B0aW9ucy5pbnRlcmNlcHRvcnMuQWdlbnQgJiYgQXJyYXkuaXNBcnJheShvcHRpb25zLmludGVyY2VwdG9ycy5BZ2VudClcbiAgICAgID8gb3B0aW9ucy5pbnRlcmNlcHRvcnMuQWdlbnRcbiAgICAgIDogW2NyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3IoeyBtYXhSZWRpcmVjdGlvbnMgfSldXG5cbiAgICB0aGlzW2tPcHRpb25zXSA9IHsgLi4udXRpbC5kZWVwQ2xvbmUob3B0aW9ucyksIGNvbm5lY3QgfVxuICAgIHRoaXNba09wdGlvbnNdLmludGVyY2VwdG9ycyA9IG9wdGlvbnMuaW50ZXJjZXB0b3JzXG4gICAgICA/IHsgLi4ub3B0aW9ucy5pbnRlcmNlcHRvcnMgfVxuICAgICAgOiB1bmRlZmluZWRcbiAgICB0aGlzW2tNYXhSZWRpcmVjdGlvbnNdID0gbWF4UmVkaXJlY3Rpb25zXG4gICAgdGhpc1trRmFjdG9yeV0gPSBmYWN0b3J5XG4gICAgdGhpc1trQ2xpZW50c10gPSBuZXcgTWFwKClcbiAgICB0aGlzW2tGaW5hbGl6ZXJdID0gbmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBnYyBpcyB1bmRldGVybWluaXN0aWMgKi8ga2V5ID0+IHtcbiAgICAgIGNvbnN0IHJlZiA9IHRoaXNba0NsaWVudHNdLmdldChrZXkpXG4gICAgICBpZiAocmVmICE9PSB1bmRlZmluZWQgJiYgcmVmLmRlcmVmKCkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzW2tDbGllbnRzXS5kZWxldGUoa2V5KVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBjb25zdCBhZ2VudCA9IHRoaXNcblxuICAgIHRoaXNba09uRHJhaW5dID0gKG9yaWdpbiwgdGFyZ2V0cykgPT4ge1xuICAgICAgYWdlbnQuZW1pdCgnZHJhaW4nLCBvcmlnaW4sIFthZ2VudCwgLi4udGFyZ2V0c10pXG4gICAgfVxuXG4gICAgdGhpc1trT25Db25uZWN0XSA9IChvcmlnaW4sIHRhcmdldHMpID0+IHtcbiAgICAgIGFnZW50LmVtaXQoJ2Nvbm5lY3QnLCBvcmlnaW4sIFthZ2VudCwgLi4udGFyZ2V0c10pXG4gICAgfVxuXG4gICAgdGhpc1trT25EaXNjb25uZWN0XSA9IChvcmlnaW4sIHRhcmdldHMsIGVycikgPT4ge1xuICAgICAgYWdlbnQuZW1pdCgnZGlzY29ubmVjdCcsIG9yaWdpbiwgW2FnZW50LCAuLi50YXJnZXRzXSwgZXJyKVxuICAgIH1cblxuICAgIHRoaXNba09uQ29ubmVjdGlvbkVycm9yXSA9IChvcmlnaW4sIHRhcmdldHMsIGVycikgPT4ge1xuICAgICAgYWdlbnQuZW1pdCgnY29ubmVjdGlvbkVycm9yJywgb3JpZ2luLCBbYWdlbnQsIC4uLnRhcmdldHNdLCBlcnIpXG4gICAgfVxuICB9XG5cbiAgZ2V0IFtrUnVubmluZ10gKCkge1xuICAgIGxldCByZXQgPSAwXG4gICAgZm9yIChjb25zdCByZWYgb2YgdGhpc1trQ2xpZW50c10udmFsdWVzKCkpIHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IHJlZi5kZXJlZigpXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogZ2MgaXMgdW5kZXRlcm1pbmlzdGljICovXG4gICAgICBpZiAoY2xpZW50KSB7XG4gICAgICAgIHJldCArPSBjbGllbnRba1J1bm5pbmddXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXRcbiAgfVxuXG4gIFtrRGlzcGF0Y2hdIChvcHRzLCBoYW5kbGVyKSB7XG4gICAgbGV0IGtleVxuICAgIGlmIChvcHRzLm9yaWdpbiAmJiAodHlwZW9mIG9wdHMub3JpZ2luID09PSAnc3RyaW5nJyB8fCBvcHRzLm9yaWdpbiBpbnN0YW5jZW9mIFVSTCkpIHtcbiAgICAgIGtleSA9IFN0cmluZyhvcHRzLm9yaWdpbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdvcHRzLm9yaWdpbiBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyBvciBVUkwuJylcbiAgICB9XG5cbiAgICBjb25zdCByZWYgPSB0aGlzW2tDbGllbnRzXS5nZXQoa2V5KVxuXG4gICAgbGV0IGRpc3BhdGNoZXIgPSByZWYgPyByZWYuZGVyZWYoKSA6IG51bGxcbiAgICBpZiAoIWRpc3BhdGNoZXIpIHtcbiAgICAgIGRpc3BhdGNoZXIgPSB0aGlzW2tGYWN0b3J5XShvcHRzLm9yaWdpbiwgdGhpc1trT3B0aW9uc10pXG4gICAgICAgIC5vbignZHJhaW4nLCB0aGlzW2tPbkRyYWluXSlcbiAgICAgICAgLm9uKCdjb25uZWN0JywgdGhpc1trT25Db25uZWN0XSlcbiAgICAgICAgLm9uKCdkaXNjb25uZWN0JywgdGhpc1trT25EaXNjb25uZWN0XSlcbiAgICAgICAgLm9uKCdjb25uZWN0aW9uRXJyb3InLCB0aGlzW2tPbkNvbm5lY3Rpb25FcnJvcl0pXG5cbiAgICAgIHRoaXNba0NsaWVudHNdLnNldChrZXksIG5ldyBXZWFrUmVmKGRpc3BhdGNoZXIpKVxuICAgICAgdGhpc1trRmluYWxpemVyXS5yZWdpc3RlcihkaXNwYXRjaGVyLCBrZXkpXG4gICAgfVxuXG4gICAgcmV0dXJuIGRpc3BhdGNoZXIuZGlzcGF0Y2gob3B0cywgaGFuZGxlcilcbiAgfVxuXG4gIGFzeW5jIFtrQ2xvc2VdICgpIHtcbiAgICBjb25zdCBjbG9zZVByb21pc2VzID0gW11cbiAgICBmb3IgKGNvbnN0IHJlZiBvZiB0aGlzW2tDbGllbnRzXS52YWx1ZXMoKSkge1xuICAgICAgY29uc3QgY2xpZW50ID0gcmVmLmRlcmVmKClcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBnYyBpcyB1bmRldGVybWluaXN0aWMgKi9cbiAgICAgIGlmIChjbGllbnQpIHtcbiAgICAgICAgY2xvc2VQcm9taXNlcy5wdXNoKGNsaWVudC5jbG9zZSgpKVxuICAgICAgfVxuICAgIH1cblxuICAgIGF3YWl0IFByb21pc2UuYWxsKGNsb3NlUHJvbWlzZXMpXG4gIH1cblxuICBhc3luYyBba0Rlc3Ryb3ldIChlcnIpIHtcbiAgICBjb25zdCBkZXN0cm95UHJvbWlzZXMgPSBbXVxuICAgIGZvciAoY29uc3QgcmVmIG9mIHRoaXNba0NsaWVudHNdLnZhbHVlcygpKSB7XG4gICAgICBjb25zdCBjbGllbnQgPSByZWYuZGVyZWYoKVxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2U6IGdjIGlzIHVuZGV0ZXJtaW5pc3RpYyAqL1xuICAgICAgaWYgKGNsaWVudCkge1xuICAgICAgICBkZXN0cm95UHJvbWlzZXMucHVzaChjbGllbnQuZGVzdHJveShlcnIpKVxuICAgICAgfVxuICAgIH1cblxuICAgIGF3YWl0IFByb21pc2UuYWxsKGRlc3Ryb3lQcm9taXNlcylcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEFnZW50XG4iLAogICAgIi8vIFBvcnRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL3B1bGwvOTA3XG5cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBSZWFkYWJsZSB9ID0gcmVxdWlyZSgnc3RyZWFtJylcbmNvbnN0IHsgUmVxdWVzdEFib3J0ZWRFcnJvciwgTm90U3VwcG9ydGVkRXJyb3IsIEludmFsaWRBcmd1bWVudEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgUmVhZGFibGVTdHJlYW1Gcm9tLCB0b1VTVlN0cmluZyB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcblxubGV0IEJsb2JcblxuY29uc3Qga0NvbnN1bWUgPSBTeW1ib2woJ2tDb25zdW1lJylcbmNvbnN0IGtSZWFkaW5nID0gU3ltYm9sKCdrUmVhZGluZycpXG5jb25zdCBrQm9keSA9IFN5bWJvbCgna0JvZHknKVxuY29uc3Qga0Fib3J0ID0gU3ltYm9sKCdhYm9ydCcpXG5jb25zdCBrQ29udGVudFR5cGUgPSBTeW1ib2woJ2tDb250ZW50VHlwZScpXG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7fVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIEJvZHlSZWFkYWJsZSBleHRlbmRzIFJlYWRhYmxlIHtcbiAgY29uc3RydWN0b3IgKHtcbiAgICByZXN1bWUsXG4gICAgYWJvcnQsXG4gICAgY29udGVudFR5cGUgPSAnJyxcbiAgICBoaWdoV2F0ZXJNYXJrID0gNjQgKiAxMDI0IC8vIFNhbWUgYXMgbm9kZWpzIGZzIHN0cmVhbXMuXG4gIH0pIHtcbiAgICBzdXBlcih7XG4gICAgICBhdXRvRGVzdHJveTogdHJ1ZSxcbiAgICAgIHJlYWQ6IHJlc3VtZSxcbiAgICAgIGhpZ2hXYXRlck1hcmtcbiAgICB9KVxuXG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5kYXRhRW1pdHRlZCA9IGZhbHNlXG5cbiAgICB0aGlzW2tBYm9ydF0gPSBhYm9ydFxuICAgIHRoaXNba0NvbnN1bWVdID0gbnVsbFxuICAgIHRoaXNba0JvZHldID0gbnVsbFxuICAgIHRoaXNba0NvbnRlbnRUeXBlXSA9IGNvbnRlbnRUeXBlXG5cbiAgICAvLyBJcyBzdHJlYW0gYmVpbmcgY29uc3VtZWQgdGhyb3VnaCBSZWFkYWJsZSBBUEk/XG4gICAgLy8gVGhpcyBpcyBhbiBvcHRpbWl6YXRpb24gc28gdGhhdCB3ZSBhdm9pZCBjaGVja2luZ1xuICAgIC8vIGZvciAnZGF0YScgYW5kICdyZWFkYWJsZScgbGlzdGVuZXJzIGluIHRoZSBob3QgcGF0aFxuICAgIC8vIGluc2lkZSBwdXNoKCkuXG4gICAgdGhpc1trUmVhZGluZ10gPSBmYWxzZVxuICB9XG5cbiAgZGVzdHJveSAoZXJyKSB7XG4gICAgaWYgKHRoaXMuZGVzdHJveWVkKSB7XG4gICAgICAvLyBOb2RlIDwgMTZcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuXG4gICAgaWYgKCFlcnIgJiYgIXRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCkge1xuICAgICAgZXJyID0gbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgIH1cblxuICAgIGlmIChlcnIpIHtcbiAgICAgIHRoaXNba0Fib3J0XSgpXG4gICAgfVxuXG4gICAgcmV0dXJuIHN1cGVyLmRlc3Ryb3koZXJyKVxuICB9XG5cbiAgZW1pdCAoZXYsIC4uLmFyZ3MpIHtcbiAgICBpZiAoZXYgPT09ICdkYXRhJykge1xuICAgICAgLy8gTm9kZSA8IDE2LjdcbiAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGF0YUVtaXR0ZWQgPSB0cnVlXG4gICAgfSBlbHNlIGlmIChldiA9PT0gJ2Vycm9yJykge1xuICAgICAgLy8gTm9kZSA8IDE2XG4gICAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmVycm9yRW1pdHRlZCA9IHRydWVcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLmVtaXQoZXYsIC4uLmFyZ3MpXG4gIH1cblxuICBvbiAoZXYsIC4uLmFyZ3MpIHtcbiAgICBpZiAoZXYgPT09ICdkYXRhJyB8fCBldiA9PT0gJ3JlYWRhYmxlJykge1xuICAgICAgdGhpc1trUmVhZGluZ10gPSB0cnVlXG4gICAgfVxuICAgIHJldHVybiBzdXBlci5vbihldiwgLi4uYXJncylcbiAgfVxuXG4gIGFkZExpc3RlbmVyIChldiwgLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLm9uKGV2LCAuLi5hcmdzKVxuICB9XG5cbiAgb2ZmIChldiwgLi4uYXJncykge1xuICAgIGNvbnN0IHJldCA9IHN1cGVyLm9mZihldiwgLi4uYXJncylcbiAgICBpZiAoZXYgPT09ICdkYXRhJyB8fCBldiA9PT0gJ3JlYWRhYmxlJykge1xuICAgICAgdGhpc1trUmVhZGluZ10gPSAoXG4gICAgICAgIHRoaXMubGlzdGVuZXJDb3VudCgnZGF0YScpID4gMCB8fFxuICAgICAgICB0aGlzLmxpc3RlbmVyQ291bnQoJ3JlYWRhYmxlJykgPiAwXG4gICAgICApXG4gICAgfVxuICAgIHJldHVybiByZXRcbiAgfVxuXG4gIHJlbW92ZUxpc3RlbmVyIChldiwgLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLm9mZihldiwgLi4uYXJncylcbiAgfVxuXG4gIHB1c2ggKGNodW5rKSB7XG4gICAgaWYgKHRoaXNba0NvbnN1bWVdICYmIGNodW5rICE9PSBudWxsICYmIHRoaXMucmVhZGFibGVMZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnN1bWVQdXNoKHRoaXNba0NvbnN1bWVdLCBjaHVuaylcbiAgICAgIHJldHVybiB0aGlzW2tSZWFkaW5nXSA/IHN1cGVyLnB1c2goY2h1bmspIDogdHJ1ZVxuICAgIH1cbiAgICByZXR1cm4gc3VwZXIucHVzaChjaHVuaylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS10ZXh0XG4gIGFzeW5jIHRleHQgKCkge1xuICAgIHJldHVybiBjb25zdW1lKHRoaXMsICd0ZXh0JylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS1qc29uXG4gIGFzeW5jIGpzb24gKCkge1xuICAgIHJldHVybiBjb25zdW1lKHRoaXMsICdqc29uJylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS1ibG9iXG4gIGFzeW5jIGJsb2IgKCkge1xuICAgIHJldHVybiBjb25zdW1lKHRoaXMsICdibG9iJylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS1hcnJheWJ1ZmZlclxuICBhc3luYyBhcnJheUJ1ZmZlciAoKSB7XG4gICAgcmV0dXJuIGNvbnN1bWUodGhpcywgJ2FycmF5QnVmZmVyJylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS1mb3JtZGF0YVxuICBhc3luYyBmb3JtRGF0YSAoKSB7XG4gICAgLy8gVE9ETzogSW1wbGVtZW50LlxuICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWRFcnJvcigpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWJvZHktYm9keXVzZWRcbiAgZ2V0IGJvZHlVc2VkICgpIHtcbiAgICByZXR1cm4gdXRpbC5pc0Rpc3R1cmJlZCh0aGlzKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1ib2R5LWJvZHlcbiAgZ2V0IGJvZHkgKCkge1xuICAgIGlmICghdGhpc1trQm9keV0pIHtcbiAgICAgIHRoaXNba0JvZHldID0gUmVhZGFibGVTdHJlYW1Gcm9tKHRoaXMpXG4gICAgICBpZiAodGhpc1trQ29uc3VtZV0pIHtcbiAgICAgICAgLy8gVE9ETzogSXMgdGhpcyB0aGUgYmVzdCB3YXkgdG8gZm9yY2UgYSBsb2NrP1xuICAgICAgICB0aGlzW2tCb2R5XS5nZXRSZWFkZXIoKSAvLyBFbnN1cmUgc3RyZWFtIGlzIGxvY2tlZC5cbiAgICAgICAgYXNzZXJ0KHRoaXNba0JvZHldLmxvY2tlZClcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXNba0JvZHldXG4gIH1cblxuICBkdW1wIChvcHRzKSB7XG4gICAgbGV0IGxpbWl0ID0gb3B0cyAmJiBOdW1iZXIuaXNGaW5pdGUob3B0cy5saW1pdCkgPyBvcHRzLmxpbWl0IDogMjYyMTQ0XG4gICAgY29uc3Qgc2lnbmFsID0gb3B0cyAmJiBvcHRzLnNpZ25hbFxuXG4gICAgaWYgKHNpZ25hbCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBzaWduYWwgIT09ICdvYmplY3QnIHx8ICEoJ2Fib3J0ZWQnIGluIHNpZ25hbCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3NpZ25hbCBtdXN0IGJlIGFuIEFib3J0U2lnbmFsJylcbiAgICAgICAgfVxuICAgICAgICB1dGlsLnRocm93SWZBYm9ydGVkKHNpZ25hbClcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBzaWduYWxMaXN0ZW5lckNsZWFudXAgPSBzaWduYWxcbiAgICAgICAgPyB1dGlsLmFkZEFib3J0TGlzdGVuZXIoc2lnbmFsLCAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5kZXN0cm95KClcbiAgICAgICAgfSlcbiAgICAgICAgOiBub29wXG5cbiAgICAgIHRoaXNcbiAgICAgICAgLm9uKCdjbG9zZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBzaWduYWxMaXN0ZW5lckNsZWFudXAoKVxuICAgICAgICAgIGlmIChzaWduYWwgJiYgc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgICAgIHJlamVjdChzaWduYWwucmVhc29uIHx8IE9iamVjdC5hc3NpZ24obmV3IEVycm9yKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkJyksIHsgbmFtZTogJ0Fib3J0RXJyb3InIH0pKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNvbHZlKG51bGwpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAub24oJ2Vycm9yJywgbm9vcClcbiAgICAgICAgLm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7XG4gICAgICAgICAgbGltaXQgLT0gY2h1bmsubGVuZ3RoXG4gICAgICAgICAgaWYgKGxpbWl0IDw9IDApIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdHJveSgpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAucmVzdW1lKClcbiAgICB9KVxuICB9XG59XG5cbi8vIGh0dHBzOi8vc3RyZWFtcy5zcGVjLndoYXR3Zy5vcmcvI3JlYWRhYmxlc3RyZWFtLWxvY2tlZFxuZnVuY3Rpb24gaXNMb2NrZWQgKHNlbGYpIHtcbiAgLy8gQ29uc3VtZSBpcyBhbiBpbXBsaWNpdCBsb2NrLlxuICByZXR1cm4gKHNlbGZba0JvZHldICYmIHNlbGZba0JvZHldLmxvY2tlZCA9PT0gdHJ1ZSkgfHwgc2VsZltrQ29uc3VtZV1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2JvZHktdW51c2FibGVcbmZ1bmN0aW9uIGlzVW51c2FibGUgKHNlbGYpIHtcbiAgcmV0dXJuIHV0aWwuaXNEaXN0dXJiZWQoc2VsZikgfHwgaXNMb2NrZWQoc2VsZilcbn1cblxuYXN5bmMgZnVuY3Rpb24gY29uc3VtZSAoc3RyZWFtLCB0eXBlKSB7XG4gIGlmIChpc1VudXNhYmxlKHN0cmVhbSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd1bnVzYWJsZScpXG4gIH1cblxuICBhc3NlcnQoIXN0cmVhbVtrQ29uc3VtZV0pXG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBzdHJlYW1ba0NvbnN1bWVdID0ge1xuICAgICAgdHlwZSxcbiAgICAgIHN0cmVhbSxcbiAgICAgIHJlc29sdmUsXG4gICAgICByZWplY3QsXG4gICAgICBsZW5ndGg6IDAsXG4gICAgICBib2R5OiBbXVxuICAgIH1cblxuICAgIHN0cmVhbVxuICAgICAgLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgY29uc3VtZUZpbmlzaCh0aGlzW2tDb25zdW1lXSwgZXJyKVxuICAgICAgfSlcbiAgICAgIC5vbignY2xvc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzW2tDb25zdW1lXS5ib2R5ICE9PSBudWxsKSB7XG4gICAgICAgICAgY29uc3VtZUZpbmlzaCh0aGlzW2tDb25zdW1lXSwgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKSlcbiAgICAgICAgfVxuICAgICAgfSlcblxuICAgIHByb2Nlc3MubmV4dFRpY2soY29uc3VtZVN0YXJ0LCBzdHJlYW1ba0NvbnN1bWVdKVxuICB9KVxufVxuXG5mdW5jdGlvbiBjb25zdW1lU3RhcnQgKGNvbnN1bWUpIHtcbiAgaWYgKGNvbnN1bWUuYm9keSA9PT0gbnVsbCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgY29uc3QgeyBfcmVhZGFibGVTdGF0ZTogc3RhdGUgfSA9IGNvbnN1bWUuc3RyZWFtXG5cbiAgZm9yIChjb25zdCBjaHVuayBvZiBzdGF0ZS5idWZmZXIpIHtcbiAgICBjb25zdW1lUHVzaChjb25zdW1lLCBjaHVuaylcbiAgfVxuXG4gIGlmIChzdGF0ZS5lbmRFbWl0dGVkKSB7XG4gICAgY29uc3VtZUVuZCh0aGlzW2tDb25zdW1lXSlcbiAgfSBlbHNlIHtcbiAgICBjb25zdW1lLnN0cmVhbS5vbignZW5kJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3VtZUVuZCh0aGlzW2tDb25zdW1lXSlcbiAgICB9KVxuICB9XG5cbiAgY29uc3VtZS5zdHJlYW0ucmVzdW1lKClcblxuICB3aGlsZSAoY29uc3VtZS5zdHJlYW0ucmVhZCgpICE9IG51bGwpIHtcbiAgICAvLyBMb29wXG4gIH1cbn1cblxuZnVuY3Rpb24gY29uc3VtZUVuZCAoY29uc3VtZSkge1xuICBjb25zdCB7IHR5cGUsIGJvZHksIHJlc29sdmUsIHN0cmVhbSwgbGVuZ3RoIH0gPSBjb25zdW1lXG5cbiAgdHJ5IHtcbiAgICBpZiAodHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICByZXNvbHZlKHRvVVNWU3RyaW5nKEJ1ZmZlci5jb25jYXQoYm9keSkpKVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2pzb24nKSB7XG4gICAgICByZXNvbHZlKEpTT04ucGFyc2UoQnVmZmVyLmNvbmNhdChib2R5KSkpXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnYXJyYXlCdWZmZXInKSB7XG4gICAgICBjb25zdCBkc3QgPSBuZXcgVWludDhBcnJheShsZW5ndGgpXG5cbiAgICAgIGxldCBwb3MgPSAwXG4gICAgICBmb3IgKGNvbnN0IGJ1ZiBvZiBib2R5KSB7XG4gICAgICAgIGRzdC5zZXQoYnVmLCBwb3MpXG4gICAgICAgIHBvcyArPSBidWYuYnl0ZUxlbmd0aFxuICAgICAgfVxuXG4gICAgICByZXNvbHZlKGRzdC5idWZmZXIpXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnYmxvYicpIHtcbiAgICAgIGlmICghQmxvYikge1xuICAgICAgICBCbG9iID0gcmVxdWlyZSgnYnVmZmVyJykuQmxvYlxuICAgICAgfVxuICAgICAgcmVzb2x2ZShuZXcgQmxvYihib2R5LCB7IHR5cGU6IHN0cmVhbVtrQ29udGVudFR5cGVdIH0pKVxuICAgIH1cblxuICAgIGNvbnN1bWVGaW5pc2goY29uc3VtZSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgc3RyZWFtLmRlc3Ryb3koZXJyKVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbnN1bWVQdXNoIChjb25zdW1lLCBjaHVuaykge1xuICBjb25zdW1lLmxlbmd0aCArPSBjaHVuay5sZW5ndGhcbiAgY29uc3VtZS5ib2R5LnB1c2goY2h1bmspXG59XG5cbmZ1bmN0aW9uIGNvbnN1bWVGaW5pc2ggKGNvbnN1bWUsIGVycikge1xuICBpZiAoY29uc3VtZS5ib2R5ID09PSBudWxsKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoZXJyKSB7XG4gICAgY29uc3VtZS5yZWplY3QoZXJyKVxuICB9IGVsc2Uge1xuICAgIGNvbnN1bWUucmVzb2x2ZSgpXG4gIH1cblxuICBjb25zdW1lLnR5cGUgPSBudWxsXG4gIGNvbnN1bWUuc3RyZWFtID0gbnVsbFxuICBjb25zdW1lLnJlc29sdmUgPSBudWxsXG4gIGNvbnN1bWUucmVqZWN0ID0gbnVsbFxuICBjb25zdW1lLmxlbmd0aCA9IDBcbiAgY29uc3VtZS5ib2R5ID0gbnVsbFxufVxuIiwKICAgICJjb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3Qge1xuICBSZXNwb25zZVN0YXR1c0NvZGVFcnJvclxufSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHsgdG9VU1ZTdHJpbmcgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5cbmFzeW5jIGZ1bmN0aW9uIGdldFJlc29sdmVFcnJvckJvZHlDYWxsYmFjayAoeyBjYWxsYmFjaywgYm9keSwgY29udGVudFR5cGUsIHN0YXR1c0NvZGUsIHN0YXR1c01lc3NhZ2UsIGhlYWRlcnMgfSkge1xuICBhc3NlcnQoYm9keSlcblxuICBsZXQgY2h1bmtzID0gW11cbiAgbGV0IGxpbWl0ID0gMFxuXG4gIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgYm9keSkge1xuICAgIGNodW5rcy5wdXNoKGNodW5rKVxuICAgIGxpbWl0ICs9IGNodW5rLmxlbmd0aFxuICAgIGlmIChsaW1pdCA+IDEyOCAqIDEwMjQpIHtcbiAgICAgIGNodW5rcyA9IG51bGxcbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaWYgKHN0YXR1c0NvZGUgPT09IDIwNCB8fCAhY29udGVudFR5cGUgfHwgIWNodW5rcykge1xuICAgIHByb2Nlc3MubmV4dFRpY2soY2FsbGJhY2ssIG5ldyBSZXNwb25zZVN0YXR1c0NvZGVFcnJvcihgUmVzcG9uc2Ugc3RhdHVzIGNvZGUgJHtzdGF0dXNDb2RlfSR7c3RhdHVzTWVzc2FnZSA/IGA6ICR7c3RhdHVzTWVzc2FnZX1gIDogJyd9YCwgc3RhdHVzQ29kZSwgaGVhZGVycykpXG4gICAgcmV0dXJuXG4gIH1cblxuICB0cnkge1xuICAgIGlmIChjb250ZW50VHlwZS5zdGFydHNXaXRoKCdhcHBsaWNhdGlvbi9qc29uJykpIHtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSBKU09OLnBhcnNlKHRvVVNWU3RyaW5nKEJ1ZmZlci5jb25jYXQoY2h1bmtzKSkpXG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGNhbGxiYWNrLCBuZXcgUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IoYFJlc3BvbnNlIHN0YXR1cyBjb2RlICR7c3RhdHVzQ29kZX0ke3N0YXR1c01lc3NhZ2UgPyBgOiAke3N0YXR1c01lc3NhZ2V9YCA6ICcnfWAsIHN0YXR1c0NvZGUsIGhlYWRlcnMsIHBheWxvYWQpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGNvbnRlbnRUeXBlLnN0YXJ0c1dpdGgoJ3RleHQvJykpIHtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSB0b1VTVlN0cmluZyhCdWZmZXIuY29uY2F0KGNodW5rcykpXG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGNhbGxiYWNrLCBuZXcgUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IoYFJlc3BvbnNlIHN0YXR1cyBjb2RlICR7c3RhdHVzQ29kZX0ke3N0YXR1c01lc3NhZ2UgPyBgOiAke3N0YXR1c01lc3NhZ2V9YCA6ICcnfWAsIHN0YXR1c0NvZGUsIGhlYWRlcnMsIHBheWxvYWQpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBQcm9jZXNzIGluIGEgZmFsbGJhY2sgaWYgZXJyb3JcbiAgfVxuXG4gIHByb2Nlc3MubmV4dFRpY2soY2FsbGJhY2ssIG5ldyBSZXNwb25zZVN0YXR1c0NvZGVFcnJvcihgUmVzcG9uc2Ugc3RhdHVzIGNvZGUgJHtzdGF0dXNDb2RlfSR7c3RhdHVzTWVzc2FnZSA/IGA6ICR7c3RhdHVzTWVzc2FnZX1gIDogJyd9YCwgc3RhdHVzQ29kZSwgaGVhZGVycykpXG59XG5cbm1vZHVsZS5leHBvcnRzID0geyBnZXRSZXNvbHZlRXJyb3JCb2R5Q2FsbGJhY2sgfVxuIiwKICAgICJjb25zdCB7IGFkZEFib3J0TGlzdGVuZXIgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IFJlcXVlc3RBYm9ydGVkRXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcblxuY29uc3Qga0xpc3RlbmVyID0gU3ltYm9sKCdrTGlzdGVuZXInKVxuY29uc3Qga1NpZ25hbCA9IFN5bWJvbCgna1NpZ25hbCcpXG5cbmZ1bmN0aW9uIGFib3J0IChzZWxmKSB7XG4gIGlmIChzZWxmLmFib3J0KSB7XG4gICAgc2VsZi5hYm9ydCgpXG4gIH0gZWxzZSB7XG4gICAgc2VsZi5vbkVycm9yKG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKCkpXG4gIH1cbn1cblxuZnVuY3Rpb24gYWRkU2lnbmFsIChzZWxmLCBzaWduYWwpIHtcbiAgc2VsZltrU2lnbmFsXSA9IG51bGxcbiAgc2VsZltrTGlzdGVuZXJdID0gbnVsbFxuXG4gIGlmICghc2lnbmFsKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcbiAgICBhYm9ydChzZWxmKVxuICAgIHJldHVyblxuICB9XG5cbiAgc2VsZltrU2lnbmFsXSA9IHNpZ25hbFxuICBzZWxmW2tMaXN0ZW5lcl0gPSAoKSA9PiB7XG4gICAgYWJvcnQoc2VsZilcbiAgfVxuXG4gIGFkZEFib3J0TGlzdGVuZXIoc2VsZltrU2lnbmFsXSwgc2VsZltrTGlzdGVuZXJdKVxufVxuXG5mdW5jdGlvbiByZW1vdmVTaWduYWwgKHNlbGYpIHtcbiAgaWYgKCFzZWxmW2tTaWduYWxdKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoJ3JlbW92ZUV2ZW50TGlzdGVuZXInIGluIHNlbGZba1NpZ25hbF0pIHtcbiAgICBzZWxmW2tTaWduYWxdLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgc2VsZltrTGlzdGVuZXJdKVxuICB9IGVsc2Uge1xuICAgIHNlbGZba1NpZ25hbF0ucmVtb3ZlTGlzdGVuZXIoJ2Fib3J0Jywgc2VsZltrTGlzdGVuZXJdKVxuICB9XG5cbiAgc2VsZltrU2lnbmFsXSA9IG51bGxcbiAgc2VsZltrTGlzdGVuZXJdID0gbnVsbFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgYWRkU2lnbmFsLFxuICByZW1vdmVTaWduYWxcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFJlYWRhYmxlID0gcmVxdWlyZSgnLi9yZWFkYWJsZScpXG5jb25zdCB7XG4gIEludmFsaWRBcmd1bWVudEVycm9yLFxuICBSZXF1ZXN0QWJvcnRlZEVycm9yXG59ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGdldFJlc29sdmVFcnJvckJvZHlDYWxsYmFjayB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgQXN5bmNSZXNvdXJjZSB9ID0gcmVxdWlyZSgnYXN5bmNfaG9va3MnKVxuY29uc3QgeyBhZGRTaWduYWwsIHJlbW92ZVNpZ25hbCB9ID0gcmVxdWlyZSgnLi9hYm9ydC1zaWduYWwnKVxuXG5jbGFzcyBSZXF1ZXN0SGFuZGxlciBleHRlbmRzIEFzeW5jUmVzb3VyY2Uge1xuICBjb25zdHJ1Y3RvciAob3B0cywgY2FsbGJhY2spIHtcbiAgICBpZiAoIW9wdHMgfHwgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb3B0cycpXG4gICAgfVxuXG4gICAgY29uc3QgeyBzaWduYWwsIG1ldGhvZCwgb3BhcXVlLCBib2R5LCBvbkluZm8sIHJlc3BvbnNlSGVhZGVycywgdGhyb3dPbkVycm9yLCBoaWdoV2F0ZXJNYXJrIH0gPSBvcHRzXG5cbiAgICB0cnkge1xuICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY2FsbGJhY2snKVxuICAgICAgfVxuXG4gICAgICBpZiAoaGlnaFdhdGVyTWFyayAmJiAodHlwZW9mIGhpZ2hXYXRlck1hcmsgIT09ICdudW1iZXInIHx8IGhpZ2hXYXRlck1hcmsgPCAwKSkge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgaGlnaFdhdGVyTWFyaycpXG4gICAgICB9XG5cbiAgICAgIGlmIChzaWduYWwgJiYgdHlwZW9mIHNpZ25hbC5vbiAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2Ygc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdzaWduYWwgbXVzdCBiZSBhbiBFdmVudEVtaXR0ZXIgb3IgRXZlbnRUYXJnZXQnKVxuICAgICAgfVxuXG4gICAgICBpZiAobWV0aG9kID09PSAnQ09OTkVDVCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG1ldGhvZCcpXG4gICAgICB9XG5cbiAgICAgIGlmIChvbkluZm8gJiYgdHlwZW9mIG9uSW5mbyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25JbmZvIGNhbGxiYWNrJylcbiAgICAgIH1cblxuICAgICAgc3VwZXIoJ1VORElDSV9SRVFVRVNUJylcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICh1dGlsLmlzU3RyZWFtKGJvZHkpKSB7XG4gICAgICAgIHV0aWwuZGVzdHJveShib2R5Lm9uKCdlcnJvcicsIHV0aWwubm9wKSwgZXJyKVxuICAgICAgfVxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuXG4gICAgdGhpcy5yZXNwb25zZUhlYWRlcnMgPSByZXNwb25zZUhlYWRlcnMgfHwgbnVsbFxuICAgIHRoaXMub3BhcXVlID0gb3BhcXVlIHx8IG51bGxcbiAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2tcbiAgICB0aGlzLnJlcyA9IG51bGxcbiAgICB0aGlzLmFib3J0ID0gbnVsbFxuICAgIHRoaXMuYm9keSA9IGJvZHlcbiAgICB0aGlzLnRyYWlsZXJzID0ge31cbiAgICB0aGlzLmNvbnRleHQgPSBudWxsXG4gICAgdGhpcy5vbkluZm8gPSBvbkluZm8gfHwgbnVsbFxuICAgIHRoaXMudGhyb3dPbkVycm9yID0gdGhyb3dPbkVycm9yXG4gICAgdGhpcy5oaWdoV2F0ZXJNYXJrID0gaGlnaFdhdGVyTWFya1xuXG4gICAgaWYgKHV0aWwuaXNTdHJlYW0oYm9keSkpIHtcbiAgICAgIGJvZHkub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgICB0aGlzLm9uRXJyb3IoZXJyKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBhZGRTaWduYWwodGhpcywgc2lnbmFsKVxuICB9XG5cbiAgb25Db25uZWN0IChhYm9ydCwgY29udGV4dCkge1xuICAgIGlmICghdGhpcy5jYWxsYmFjaykge1xuICAgICAgdGhyb3cgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgIH1cblxuICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHRcbiAgfVxuXG4gIG9uSGVhZGVycyAoc3RhdHVzQ29kZSwgcmF3SGVhZGVycywgcmVzdW1lLCBzdGF0dXNNZXNzYWdlKSB7XG4gICAgY29uc3QgeyBjYWxsYmFjaywgb3BhcXVlLCBhYm9ydCwgY29udGV4dCwgcmVzcG9uc2VIZWFkZXJzLCBoaWdoV2F0ZXJNYXJrIH0gPSB0aGlzXG5cbiAgICBjb25zdCBoZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VSYXdIZWFkZXJzKHJhd0hlYWRlcnMpIDogdXRpbC5wYXJzZUhlYWRlcnMocmF3SGVhZGVycylcblxuICAgIGlmIChzdGF0dXNDb2RlIDwgMjAwKSB7XG4gICAgICBpZiAodGhpcy5vbkluZm8pIHtcbiAgICAgICAgdGhpcy5vbkluZm8oeyBzdGF0dXNDb2RlLCBoZWFkZXJzIH0pXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBwYXJzZWRIZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpIDogaGVhZGVyc1xuICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcGFyc2VkSGVhZGVyc1snY29udGVudC10eXBlJ11cbiAgICBjb25zdCBib2R5ID0gbmV3IFJlYWRhYmxlKHsgcmVzdW1lLCBhYm9ydCwgY29udGVudFR5cGUsIGhpZ2hXYXRlck1hcmsgfSlcblxuICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG4gICAgdGhpcy5yZXMgPSBib2R5XG4gICAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICBpZiAodGhpcy50aHJvd09uRXJyb3IgJiYgc3RhdHVzQ29kZSA+PSA0MDApIHtcbiAgICAgICAgdGhpcy5ydW5JbkFzeW5jU2NvcGUoZ2V0UmVzb2x2ZUVycm9yQm9keUNhbGxiYWNrLCBudWxsLFxuICAgICAgICAgIHsgY2FsbGJhY2ssIGJvZHksIGNvbnRlbnRUeXBlLCBzdGF0dXNDb2RlLCBzdGF0dXNNZXNzYWdlLCBoZWFkZXJzIH1cbiAgICAgICAgKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5ydW5JbkFzeW5jU2NvcGUoY2FsbGJhY2ssIG51bGwsIG51bGwsIHtcbiAgICAgICAgICBzdGF0dXNDb2RlLFxuICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgdHJhaWxlcnM6IHRoaXMudHJhaWxlcnMsXG4gICAgICAgICAgb3BhcXVlLFxuICAgICAgICAgIGJvZHksXG4gICAgICAgICAgY29udGV4dFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uRGF0YSAoY2h1bmspIHtcbiAgICBjb25zdCB7IHJlcyB9ID0gdGhpc1xuICAgIHJldHVybiByZXMucHVzaChjaHVuaylcbiAgfVxuXG4gIG9uQ29tcGxldGUgKHRyYWlsZXJzKSB7XG4gICAgY29uc3QgeyByZXMgfSA9IHRoaXNcblxuICAgIHJlbW92ZVNpZ25hbCh0aGlzKVxuXG4gICAgdXRpbC5wYXJzZUhlYWRlcnModHJhaWxlcnMsIHRoaXMudHJhaWxlcnMpXG5cbiAgICByZXMucHVzaChudWxsKVxuICB9XG5cbiAgb25FcnJvciAoZXJyKSB7XG4gICAgY29uc3QgeyByZXMsIGNhbGxiYWNrLCBib2R5LCBvcGFxdWUgfSA9IHRoaXNcblxuICAgIHJlbW92ZVNpZ25hbCh0aGlzKVxuXG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAvLyBUT0RPOiBEb2VzIHRoaXMgbmVlZCBxdWV1ZU1pY3JvdGFzaz9cbiAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGNhbGxiYWNrLCBudWxsLCBlcnIsIHsgb3BhcXVlIH0pXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChyZXMpIHtcbiAgICAgIHRoaXMucmVzID0gbnVsbFxuICAgICAgLy8gRW5zdXJlIGFsbCBxdWV1ZWQgaGFuZGxlcnMgYXJlIGludm9rZWQgYmVmb3JlIGRlc3Ryb3lpbmcgcmVzLlxuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICB1dGlsLmRlc3Ryb3kocmVzLCBlcnIpXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChib2R5KSB7XG4gICAgICB0aGlzLmJvZHkgPSBudWxsXG4gICAgICB1dGlsLmRlc3Ryb3koYm9keSwgZXJyKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiByZXF1ZXN0IChvcHRzLCBjYWxsYmFjaykge1xuICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICByZXF1ZXN0LmNhbGwodGhpcywgb3B0cywgKGVyciwgZGF0YSkgPT4ge1xuICAgICAgICByZXR1cm4gZXJyID8gcmVqZWN0KGVycikgOiByZXNvbHZlKGRhdGEpXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICB0cnkge1xuICAgIHRoaXMuZGlzcGF0Y2gob3B0cywgbmV3IFJlcXVlc3RIYW5kbGVyKG9wdHMsIGNhbGxiYWNrKSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICAgIGNvbnN0IG9wYXF1ZSA9IG9wdHMgJiYgb3B0cy5vcGFxdWVcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhlcnIsIHsgb3BhcXVlIH0pKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWVzdFxubW9kdWxlLmV4cG9ydHMuUmVxdWVzdEhhbmRsZXIgPSBSZXF1ZXN0SGFuZGxlclxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBmaW5pc2hlZCwgUGFzc1Rocm91Z2ggfSA9IHJlcXVpcmUoJ3N0cmVhbScpXG5jb25zdCB7XG4gIEludmFsaWRBcmd1bWVudEVycm9yLFxuICBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcixcbiAgUmVxdWVzdEFib3J0ZWRFcnJvclxufSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBnZXRSZXNvbHZlRXJyb3JCb2R5Q2FsbGJhY2sgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IEFzeW5jUmVzb3VyY2UgfSA9IHJlcXVpcmUoJ2FzeW5jX2hvb2tzJylcbmNvbnN0IHsgYWRkU2lnbmFsLCByZW1vdmVTaWduYWwgfSA9IHJlcXVpcmUoJy4vYWJvcnQtc2lnbmFsJylcblxuY2xhc3MgU3RyZWFtSGFuZGxlciBleHRlbmRzIEFzeW5jUmVzb3VyY2Uge1xuICBjb25zdHJ1Y3RvciAob3B0cywgZmFjdG9yeSwgY2FsbGJhY2spIHtcbiAgICBpZiAoIW9wdHMgfHwgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb3B0cycpXG4gICAgfVxuXG4gICAgY29uc3QgeyBzaWduYWwsIG1ldGhvZCwgb3BhcXVlLCBib2R5LCBvbkluZm8sIHJlc3BvbnNlSGVhZGVycywgdGhyb3dPbkVycm9yIH0gPSBvcHRzXG5cbiAgICB0cnkge1xuICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY2FsbGJhY2snKVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGZhY3RvcnkgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGZhY3RvcnknKVxuICAgICAgfVxuXG4gICAgICBpZiAoc2lnbmFsICYmIHR5cGVvZiBzaWduYWwub24gIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignc2lnbmFsIG11c3QgYmUgYW4gRXZlbnRFbWl0dGVyIG9yIEV2ZW50VGFyZ2V0JylcbiAgICAgIH1cblxuICAgICAgaWYgKG1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBtZXRob2QnKVxuICAgICAgfVxuXG4gICAgICBpZiAob25JbmZvICYmIHR5cGVvZiBvbkluZm8gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uSW5mbyBjYWxsYmFjaycpXG4gICAgICB9XG5cbiAgICAgIHN1cGVyKCdVTkRJQ0lfU1RSRUFNJylcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICh1dGlsLmlzU3RyZWFtKGJvZHkpKSB7XG4gICAgICAgIHV0aWwuZGVzdHJveShib2R5Lm9uKCdlcnJvcicsIHV0aWwubm9wKSwgZXJyKVxuICAgICAgfVxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuXG4gICAgdGhpcy5yZXNwb25zZUhlYWRlcnMgPSByZXNwb25zZUhlYWRlcnMgfHwgbnVsbFxuICAgIHRoaXMub3BhcXVlID0gb3BhcXVlIHx8IG51bGxcbiAgICB0aGlzLmZhY3RvcnkgPSBmYWN0b3J5XG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrXG4gICAgdGhpcy5yZXMgPSBudWxsXG4gICAgdGhpcy5hYm9ydCA9IG51bGxcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsXG4gICAgdGhpcy50cmFpbGVycyA9IG51bGxcbiAgICB0aGlzLmJvZHkgPSBib2R5XG4gICAgdGhpcy5vbkluZm8gPSBvbkluZm8gfHwgbnVsbFxuICAgIHRoaXMudGhyb3dPbkVycm9yID0gdGhyb3dPbkVycm9yIHx8IGZhbHNlXG5cbiAgICBpZiAodXRpbC5pc1N0cmVhbShib2R5KSkge1xuICAgICAgYm9keS5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMub25FcnJvcihlcnIpXG4gICAgICB9KVxuICAgIH1cblxuICAgIGFkZFNpZ25hbCh0aGlzLCBzaWduYWwpXG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0LCBjb250ZXh0KSB7XG4gICAgaWYgKCF0aGlzLmNhbGxiYWNrKSB7XG4gICAgICB0aHJvdyBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gICAgfVxuXG4gICAgdGhpcy5hYm9ydCA9IGFib3J0XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dFxuICB9XG5cbiAgb25IZWFkZXJzIChzdGF0dXNDb2RlLCByYXdIZWFkZXJzLCByZXN1bWUsIHN0YXR1c01lc3NhZ2UpIHtcbiAgICBjb25zdCB7IGZhY3RvcnksIG9wYXF1ZSwgY29udGV4dCwgY2FsbGJhY2ssIHJlc3BvbnNlSGVhZGVycyB9ID0gdGhpc1xuXG4gICAgY29uc3QgaGVhZGVycyA9IHJlc3BvbnNlSGVhZGVycyA9PT0gJ3JhdycgPyB1dGlsLnBhcnNlUmF3SGVhZGVycyhyYXdIZWFkZXJzKSA6IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpXG5cbiAgICBpZiAoc3RhdHVzQ29kZSA8IDIwMCkge1xuICAgICAgaWYgKHRoaXMub25JbmZvKSB7XG4gICAgICAgIHRoaXMub25JbmZvKHsgc3RhdHVzQ29kZSwgaGVhZGVycyB9KVxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5mYWN0b3J5ID0gbnVsbFxuXG4gICAgbGV0IHJlc1xuXG4gICAgaWYgKHRoaXMudGhyb3dPbkVycm9yICYmIHN0YXR1c0NvZGUgPj0gNDAwKSB7XG4gICAgICBjb25zdCBwYXJzZWRIZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpIDogaGVhZGVyc1xuICAgICAgY29uc3QgY29udGVudFR5cGUgPSBwYXJzZWRIZWFkZXJzWydjb250ZW50LXR5cGUnXVxuICAgICAgcmVzID0gbmV3IFBhc3NUaHJvdWdoKClcblxuICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGxcbiAgICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGdldFJlc29sdmVFcnJvckJvZHlDYWxsYmFjaywgbnVsbCxcbiAgICAgICAgeyBjYWxsYmFjaywgYm9keTogcmVzLCBjb250ZW50VHlwZSwgc3RhdHVzQ29kZSwgc3RhdHVzTWVzc2FnZSwgaGVhZGVycyB9XG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChmYWN0b3J5ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICByZXMgPSB0aGlzLnJ1bkluQXN5bmNTY29wZShmYWN0b3J5LCBudWxsLCB7XG4gICAgICAgIHN0YXR1c0NvZGUsXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIG9wYXF1ZSxcbiAgICAgICAgY29udGV4dFxuICAgICAgfSlcblxuICAgICAgaWYgKFxuICAgICAgICAhcmVzIHx8XG4gICAgICAgIHR5cGVvZiByZXMud3JpdGUgIT09ICdmdW5jdGlvbicgfHxcbiAgICAgICAgdHlwZW9mIHJlcy5lbmQgIT09ICdmdW5jdGlvbicgfHxcbiAgICAgICAgdHlwZW9mIHJlcy5vbiAhPT0gJ2Z1bmN0aW9uJ1xuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcignZXhwZWN0ZWQgV3JpdGFibGUnKVxuICAgICAgfVxuXG4gICAgICAvLyBUT0RPOiBBdm9pZCBmaW5pc2hlZC4gSXQgcmVnaXN0ZXJzIGFuIHVubmVjZXNzYXJ5IGFtb3VudCBvZiBsaXN0ZW5lcnMuXG4gICAgICBmaW5pc2hlZChyZXMsIHsgcmVhZGFibGU6IGZhbHNlIH0sIChlcnIpID0+IHtcbiAgICAgICAgY29uc3QgeyBjYWxsYmFjaywgcmVzLCBvcGFxdWUsIHRyYWlsZXJzLCBhYm9ydCB9ID0gdGhpc1xuXG4gICAgICAgIHRoaXMucmVzID0gbnVsbFxuICAgICAgICBpZiAoZXJyIHx8ICFyZXMucmVhZGFibGUpIHtcbiAgICAgICAgICB1dGlsLmRlc3Ryb3kocmVzLCBlcnIpXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNhbGxiYWNrID0gbnVsbFxuICAgICAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgZXJyIHx8IG51bGwsIHsgb3BhcXVlLCB0cmFpbGVycyB9KVxuXG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICBhYm9ydCgpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmVzLm9uKCdkcmFpbicsIHJlc3VtZSlcblxuICAgIHRoaXMucmVzID0gcmVzXG5cbiAgICBjb25zdCBuZWVkRHJhaW4gPSByZXMud3JpdGFibGVOZWVkRHJhaW4gIT09IHVuZGVmaW5lZFxuICAgICAgPyByZXMud3JpdGFibGVOZWVkRHJhaW5cbiAgICAgIDogcmVzLl93cml0YWJsZVN0YXRlICYmIHJlcy5fd3JpdGFibGVTdGF0ZS5uZWVkRHJhaW5cblxuICAgIHJldHVybiBuZWVkRHJhaW4gIT09IHRydWVcbiAgfVxuXG4gIG9uRGF0YSAoY2h1bmspIHtcbiAgICBjb25zdCB7IHJlcyB9ID0gdGhpc1xuXG4gICAgcmV0dXJuIHJlcyA/IHJlcy53cml0ZShjaHVuaykgOiB0cnVlXG4gIH1cblxuICBvbkNvbXBsZXRlICh0cmFpbGVycykge1xuICAgIGNvbnN0IHsgcmVzIH0gPSB0aGlzXG5cbiAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgIGlmICghcmVzKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLnRyYWlsZXJzID0gdXRpbC5wYXJzZUhlYWRlcnModHJhaWxlcnMpXG5cbiAgICByZXMuZW5kKClcbiAgfVxuXG4gIG9uRXJyb3IgKGVycikge1xuICAgIGNvbnN0IHsgcmVzLCBjYWxsYmFjaywgb3BhcXVlLCBib2R5IH0gPSB0aGlzXG5cbiAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgIHRoaXMuZmFjdG9yeSA9IG51bGxcblxuICAgIGlmIChyZXMpIHtcbiAgICAgIHRoaXMucmVzID0gbnVsbFxuICAgICAgdXRpbC5kZXN0cm95KHJlcywgZXJyKVxuICAgIH0gZWxzZSBpZiAoY2FsbGJhY2spIHtcbiAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGNhbGxiYWNrLCBudWxsLCBlcnIsIHsgb3BhcXVlIH0pXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChib2R5KSB7XG4gICAgICB0aGlzLmJvZHkgPSBudWxsXG4gICAgICB1dGlsLmRlc3Ryb3koYm9keSwgZXJyKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzdHJlYW0gKG9wdHMsIGZhY3RvcnksIGNhbGxiYWNrKSB7XG4gIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHN0cmVhbS5jYWxsKHRoaXMsIG9wdHMsIGZhY3RvcnksIChlcnIsIGRhdGEpID0+IHtcbiAgICAgICAgcmV0dXJuIGVyciA/IHJlamVjdChlcnIpIDogcmVzb2x2ZShkYXRhKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgdHJ5IHtcbiAgICB0aGlzLmRpc3BhdGNoKG9wdHMsIG5ldyBTdHJlYW1IYW5kbGVyKG9wdHMsIGZhY3RvcnksIGNhbGxiYWNrKSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICAgIGNvbnN0IG9wYXF1ZSA9IG9wdHMgJiYgb3B0cy5vcGFxdWVcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhlcnIsIHsgb3BhcXVlIH0pKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RyZWFtXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIFJlYWRhYmxlLFxuICBEdXBsZXgsXG4gIFBhc3NUaHJvdWdoXG59ID0gcmVxdWlyZSgnc3RyZWFtJylcbmNvbnN0IHtcbiAgSW52YWxpZEFyZ3VtZW50RXJyb3IsXG4gIEludmFsaWRSZXR1cm5WYWx1ZUVycm9yLFxuICBSZXF1ZXN0QWJvcnRlZEVycm9yXG59ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IEFzeW5jUmVzb3VyY2UgfSA9IHJlcXVpcmUoJ2FzeW5jX2hvb2tzJylcbmNvbnN0IHsgYWRkU2lnbmFsLCByZW1vdmVTaWduYWwgfSA9IHJlcXVpcmUoJy4vYWJvcnQtc2lnbmFsJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5cbmNvbnN0IGtSZXN1bWUgPSBTeW1ib2woJ3Jlc3VtZScpXG5cbmNsYXNzIFBpcGVsaW5lUmVxdWVzdCBleHRlbmRzIFJlYWRhYmxlIHtcbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHN1cGVyKHsgYXV0b0Rlc3Ryb3k6IHRydWUgfSlcblxuICAgIHRoaXNba1Jlc3VtZV0gPSBudWxsXG4gIH1cblxuICBfcmVhZCAoKSB7XG4gICAgY29uc3QgeyBba1Jlc3VtZV06IHJlc3VtZSB9ID0gdGhpc1xuXG4gICAgaWYgKHJlc3VtZSkge1xuICAgICAgdGhpc1trUmVzdW1lXSA9IG51bGxcbiAgICAgIHJlc3VtZSgpXG4gICAgfVxuICB9XG5cbiAgX2Rlc3Ryb3kgKGVyciwgY2FsbGJhY2spIHtcbiAgICB0aGlzLl9yZWFkKClcblxuICAgIGNhbGxiYWNrKGVycilcbiAgfVxufVxuXG5jbGFzcyBQaXBlbGluZVJlc3BvbnNlIGV4dGVuZHMgUmVhZGFibGUge1xuICBjb25zdHJ1Y3RvciAocmVzdW1lKSB7XG4gICAgc3VwZXIoeyBhdXRvRGVzdHJveTogdHJ1ZSB9KVxuICAgIHRoaXNba1Jlc3VtZV0gPSByZXN1bWVcbiAgfVxuXG4gIF9yZWFkICgpIHtcbiAgICB0aGlzW2tSZXN1bWVdKClcbiAgfVxuXG4gIF9kZXN0cm95IChlcnIsIGNhbGxiYWNrKSB7XG4gICAgaWYgKCFlcnIgJiYgIXRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCkge1xuICAgICAgZXJyID0gbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgIH1cblxuICAgIGNhbGxiYWNrKGVycilcbiAgfVxufVxuXG5jbGFzcyBQaXBlbGluZUhhbmRsZXIgZXh0ZW5kcyBBc3luY1Jlc291cmNlIHtcbiAgY29uc3RydWN0b3IgKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBpZiAoIW9wdHMgfHwgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb3B0cycpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBoYW5kbGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgaGFuZGxlcicpXG4gICAgfVxuXG4gICAgY29uc3QgeyBzaWduYWwsIG1ldGhvZCwgb3BhcXVlLCBvbkluZm8sIHJlc3BvbnNlSGVhZGVycyB9ID0gb3B0c1xuXG4gICAgaWYgKHNpZ25hbCAmJiB0eXBlb2Ygc2lnbmFsLm9uICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdzaWduYWwgbXVzdCBiZSBhbiBFdmVudEVtaXR0ZXIgb3IgRXZlbnRUYXJnZXQnKVxuICAgIH1cblxuICAgIGlmIChtZXRob2QgPT09ICdDT05ORUNUJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG1ldGhvZCcpXG4gICAgfVxuXG4gICAgaWYgKG9uSW5mbyAmJiB0eXBlb2Ygb25JbmZvICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25JbmZvIGNhbGxiYWNrJylcbiAgICB9XG5cbiAgICBzdXBlcignVU5ESUNJX1BJUEVMSU5FJylcblxuICAgIHRoaXMub3BhcXVlID0gb3BhcXVlIHx8IG51bGxcbiAgICB0aGlzLnJlc3BvbnNlSGVhZGVycyA9IHJlc3BvbnNlSGVhZGVycyB8fCBudWxsXG4gICAgdGhpcy5oYW5kbGVyID0gaGFuZGxlclxuICAgIHRoaXMuYWJvcnQgPSBudWxsXG4gICAgdGhpcy5jb250ZXh0ID0gbnVsbFxuICAgIHRoaXMub25JbmZvID0gb25JbmZvIHx8IG51bGxcblxuICAgIHRoaXMucmVxID0gbmV3IFBpcGVsaW5lUmVxdWVzdCgpLm9uKCdlcnJvcicsIHV0aWwubm9wKVxuXG4gICAgdGhpcy5yZXQgPSBuZXcgRHVwbGV4KHtcbiAgICAgIHJlYWRhYmxlT2JqZWN0TW9kZTogb3B0cy5vYmplY3RNb2RlLFxuICAgICAgYXV0b0Rlc3Ryb3k6IHRydWUsXG4gICAgICByZWFkOiAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgYm9keSB9ID0gdGhpc1xuXG4gICAgICAgIGlmIChib2R5ICYmIGJvZHkucmVzdW1lKSB7XG4gICAgICAgICAgYm9keS5yZXN1bWUoKVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgd3JpdGU6IChjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcmVxIH0gPSB0aGlzXG5cbiAgICAgICAgaWYgKHJlcS5wdXNoKGNodW5rLCBlbmNvZGluZykgfHwgcmVxLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCkge1xuICAgICAgICAgIGNhbGxiYWNrKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXFba1Jlc3VtZV0gPSBjYWxsYmFja1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZGVzdHJveTogKGVyciwgY2FsbGJhY2spID0+IHtcbiAgICAgICAgY29uc3QgeyBib2R5LCByZXEsIHJlcywgcmV0LCBhYm9ydCB9ID0gdGhpc1xuXG4gICAgICAgIGlmICghZXJyICYmICFyZXQuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCkge1xuICAgICAgICAgIGVyciA9IG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKClcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhYm9ydCAmJiBlcnIpIHtcbiAgICAgICAgICBhYm9ydCgpXG4gICAgICAgIH1cblxuICAgICAgICB1dGlsLmRlc3Ryb3koYm9keSwgZXJyKVxuICAgICAgICB1dGlsLmRlc3Ryb3kocmVxLCBlcnIpXG4gICAgICAgIHV0aWwuZGVzdHJveShyZXMsIGVycilcblxuICAgICAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgICAgICBjYWxsYmFjayhlcnIpXG4gICAgICB9XG4gICAgfSkub24oJ3ByZWZpbmlzaCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgcmVxIH0gPSB0aGlzXG5cbiAgICAgIC8vIE5vZGUgPCAxNSBkb2VzIG5vdCBjYWxsIF9maW5hbCBpbiBzYW1lIHRpY2suXG4gICAgICByZXEucHVzaChudWxsKVxuICAgIH0pXG5cbiAgICB0aGlzLnJlcyA9IG51bGxcblxuICAgIGFkZFNpZ25hbCh0aGlzLCBzaWduYWwpXG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0LCBjb250ZXh0KSB7XG4gICAgY29uc3QgeyByZXQsIHJlcyB9ID0gdGhpc1xuXG4gICAgYXNzZXJ0KCFyZXMsICdwaXBlbGluZSBjYW5ub3QgYmUgcmV0cmllZCcpXG5cbiAgICBpZiAocmV0LmRlc3Ryb3llZCkge1xuICAgICAgdGhyb3cgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgIH1cblxuICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHRcbiAgfVxuXG4gIG9uSGVhZGVycyAoc3RhdHVzQ29kZSwgcmF3SGVhZGVycywgcmVzdW1lKSB7XG4gICAgY29uc3QgeyBvcGFxdWUsIGhhbmRsZXIsIGNvbnRleHQgfSA9IHRoaXNcblxuICAgIGlmIChzdGF0dXNDb2RlIDwgMjAwKSB7XG4gICAgICBpZiAodGhpcy5vbkluZm8pIHtcbiAgICAgICAgY29uc3QgaGVhZGVycyA9IHRoaXMucmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VSYXdIZWFkZXJzKHJhd0hlYWRlcnMpIDogdXRpbC5wYXJzZUhlYWRlcnMocmF3SGVhZGVycylcbiAgICAgICAgdGhpcy5vbkluZm8oeyBzdGF0dXNDb2RlLCBoZWFkZXJzIH0pXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLnJlcyA9IG5ldyBQaXBlbGluZVJlc3BvbnNlKHJlc3VtZSlcblxuICAgIGxldCBib2R5XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuaGFuZGxlciA9IG51bGxcbiAgICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLnJlc3BvbnNlSGVhZGVycyA9PT0gJ3JhdycgPyB1dGlsLnBhcnNlUmF3SGVhZGVycyhyYXdIZWFkZXJzKSA6IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpXG4gICAgICBib2R5ID0gdGhpcy5ydW5JbkFzeW5jU2NvcGUoaGFuZGxlciwgbnVsbCwge1xuICAgICAgICBzdGF0dXNDb2RlLFxuICAgICAgICBoZWFkZXJzLFxuICAgICAgICBvcGFxdWUsXG4gICAgICAgIGJvZHk6IHRoaXMucmVzLFxuICAgICAgICBjb250ZXh0XG4gICAgICB9KVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5yZXMub24oJ2Vycm9yJywgdXRpbC5ub3ApXG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG5cbiAgICBpZiAoIWJvZHkgfHwgdHlwZW9mIGJvZHkub24gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcignZXhwZWN0ZWQgUmVhZGFibGUnKVxuICAgIH1cblxuICAgIGJvZHlcbiAgICAgIC5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgICAgICBjb25zdCB7IHJldCwgYm9keSB9ID0gdGhpc1xuXG4gICAgICAgIGlmICghcmV0LnB1c2goY2h1bmspICYmIGJvZHkucGF1c2UpIHtcbiAgICAgICAgICBib2R5LnBhdXNlKClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcmV0IH0gPSB0aGlzXG5cbiAgICAgICAgdXRpbC5kZXN0cm95KHJldCwgZXJyKVxuICAgICAgfSlcbiAgICAgIC5vbignZW5kJywgKCkgPT4ge1xuICAgICAgICBjb25zdCB7IHJldCB9ID0gdGhpc1xuXG4gICAgICAgIHJldC5wdXNoKG51bGwpXG4gICAgICB9KVxuICAgICAgLm9uKCdjbG9zZScsICgpID0+IHtcbiAgICAgICAgY29uc3QgeyByZXQgfSA9IHRoaXNcblxuICAgICAgICBpZiAoIXJldC5fcmVhZGFibGVTdGF0ZS5lbmRlZCkge1xuICAgICAgICAgIHV0aWwuZGVzdHJveShyZXQsIG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKCkpXG4gICAgICAgIH1cbiAgICAgIH0pXG5cbiAgICB0aGlzLmJvZHkgPSBib2R5XG4gIH1cblxuICBvbkRhdGEgKGNodW5rKSB7XG4gICAgY29uc3QgeyByZXMgfSA9IHRoaXNcbiAgICByZXR1cm4gcmVzLnB1c2goY2h1bmspXG4gIH1cblxuICBvbkNvbXBsZXRlICh0cmFpbGVycykge1xuICAgIGNvbnN0IHsgcmVzIH0gPSB0aGlzXG4gICAgcmVzLnB1c2gobnVsbClcbiAgfVxuXG4gIG9uRXJyb3IgKGVycikge1xuICAgIGNvbnN0IHsgcmV0IH0gPSB0aGlzXG4gICAgdGhpcy5oYW5kbGVyID0gbnVsbFxuICAgIHV0aWwuZGVzdHJveShyZXQsIGVycilcbiAgfVxufVxuXG5mdW5jdGlvbiBwaXBlbGluZSAob3B0cywgaGFuZGxlcikge1xuICB0cnkge1xuICAgIGNvbnN0IHBpcGVsaW5lSGFuZGxlciA9IG5ldyBQaXBlbGluZUhhbmRsZXIob3B0cywgaGFuZGxlcilcbiAgICB0aGlzLmRpc3BhdGNoKHsgLi4ub3B0cywgYm9keTogcGlwZWxpbmVIYW5kbGVyLnJlcSB9LCBwaXBlbGluZUhhbmRsZXIpXG4gICAgcmV0dXJuIHBpcGVsaW5lSGFuZGxlci5yZXRcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIG5ldyBQYXNzVGhyb3VnaCgpLmRlc3Ryb3koZXJyKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGlwZWxpbmVcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IsIFJlcXVlc3RBYm9ydGVkRXJyb3IsIFNvY2tldEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB7IEFzeW5jUmVzb3VyY2UgfSA9IHJlcXVpcmUoJ2FzeW5jX2hvb2tzJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBhZGRTaWduYWwsIHJlbW92ZVNpZ25hbCB9ID0gcmVxdWlyZSgnLi9hYm9ydC1zaWduYWwnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcblxuY2xhc3MgVXBncmFkZUhhbmRsZXIgZXh0ZW5kcyBBc3luY1Jlc291cmNlIHtcbiAgY29uc3RydWN0b3IgKG9wdHMsIGNhbGxiYWNrKSB7XG4gICAgaWYgKCFvcHRzIHx8IHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9wdHMnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjYWxsYmFjaycpXG4gICAgfVxuXG4gICAgY29uc3QgeyBzaWduYWwsIG9wYXF1ZSwgcmVzcG9uc2VIZWFkZXJzIH0gPSBvcHRzXG5cbiAgICBpZiAoc2lnbmFsICYmIHR5cGVvZiBzaWduYWwub24gIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3NpZ25hbCBtdXN0IGJlIGFuIEV2ZW50RW1pdHRlciBvciBFdmVudFRhcmdldCcpXG4gICAgfVxuXG4gICAgc3VwZXIoJ1VORElDSV9VUEdSQURFJylcblxuICAgIHRoaXMucmVzcG9uc2VIZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzIHx8IG51bGxcbiAgICB0aGlzLm9wYXF1ZSA9IG9wYXF1ZSB8fCBudWxsXG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrXG4gICAgdGhpcy5hYm9ydCA9IG51bGxcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsXG5cbiAgICBhZGRTaWduYWwodGhpcywgc2lnbmFsKVxuICB9XG5cbiAgb25Db25uZWN0IChhYm9ydCwgY29udGV4dCkge1xuICAgIGlmICghdGhpcy5jYWxsYmFjaykge1xuICAgICAgdGhyb3cgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgIH1cblxuICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIHRoaXMuY29udGV4dCA9IG51bGxcbiAgfVxuXG4gIG9uSGVhZGVycyAoKSB7XG4gICAgdGhyb3cgbmV3IFNvY2tldEVycm9yKCdiYWQgdXBncmFkZScsIG51bGwpXG4gIH1cblxuICBvblVwZ3JhZGUgKHN0YXR1c0NvZGUsIHJhd0hlYWRlcnMsIHNvY2tldCkge1xuICAgIGNvbnN0IHsgY2FsbGJhY2ssIG9wYXF1ZSwgY29udGV4dCB9ID0gdGhpc1xuXG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHN0YXR1c0NvZGUsIDEwMSlcblxuICAgIHJlbW92ZVNpZ25hbCh0aGlzKVxuXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGxcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5yZXNwb25zZUhlYWRlcnMgPT09ICdyYXcnID8gdXRpbC5wYXJzZVJhd0hlYWRlcnMocmF3SGVhZGVycykgOiB1dGlsLnBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKVxuICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGNhbGxiYWNrLCBudWxsLCBudWxsLCB7XG4gICAgICBoZWFkZXJzLFxuICAgICAgc29ja2V0LFxuICAgICAgb3BhcXVlLFxuICAgICAgY29udGV4dFxuICAgIH0pXG4gIH1cblxuICBvbkVycm9yIChlcnIpIHtcbiAgICBjb25zdCB7IGNhbGxiYWNrLCBvcGFxdWUgfSA9IHRoaXNcblxuICAgIHJlbW92ZVNpZ25hbCh0aGlzKVxuXG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICB0aGlzLmNhbGxiYWNrID0gbnVsbFxuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgZXJyLCB7IG9wYXF1ZSB9KVxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdXBncmFkZSAob3B0cywgY2FsbGJhY2spIHtcbiAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdXBncmFkZS5jYWxsKHRoaXMsIG9wdHMsIChlcnIsIGRhdGEpID0+IHtcbiAgICAgICAgcmV0dXJuIGVyciA/IHJlamVjdChlcnIpIDogcmVzb2x2ZShkYXRhKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB1cGdyYWRlSGFuZGxlciA9IG5ldyBVcGdyYWRlSGFuZGxlcihvcHRzLCBjYWxsYmFjaylcbiAgICB0aGlzLmRpc3BhdGNoKHtcbiAgICAgIC4uLm9wdHMsXG4gICAgICBtZXRob2Q6IG9wdHMubWV0aG9kIHx8ICdHRVQnLFxuICAgICAgdXBncmFkZTogb3B0cy5wcm90b2NvbCB8fCAnV2Vic29ja2V0J1xuICAgIH0sIHVwZ3JhZGVIYW5kbGVyKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gICAgY29uc3Qgb3BhcXVlID0gb3B0cyAmJiBvcHRzLm9wYXF1ZVxuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGNhbGxiYWNrKGVyciwgeyBvcGFxdWUgfSkpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB1cGdyYWRlXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IEFzeW5jUmVzb3VyY2UgfSA9IHJlcXVpcmUoJ2FzeW5jX2hvb2tzJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IsIFJlcXVlc3RBYm9ydGVkRXJyb3IsIFNvY2tldEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgYWRkU2lnbmFsLCByZW1vdmVTaWduYWwgfSA9IHJlcXVpcmUoJy4vYWJvcnQtc2lnbmFsJylcblxuY2xhc3MgQ29ubmVjdEhhbmRsZXIgZXh0ZW5kcyBBc3luY1Jlc291cmNlIHtcbiAgY29uc3RydWN0b3IgKG9wdHMsIGNhbGxiYWNrKSB7XG4gICAgaWYgKCFvcHRzIHx8IHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9wdHMnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjYWxsYmFjaycpXG4gICAgfVxuXG4gICAgY29uc3QgeyBzaWduYWwsIG9wYXF1ZSwgcmVzcG9uc2VIZWFkZXJzIH0gPSBvcHRzXG5cbiAgICBpZiAoc2lnbmFsICYmIHR5cGVvZiBzaWduYWwub24gIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3NpZ25hbCBtdXN0IGJlIGFuIEV2ZW50RW1pdHRlciBvciBFdmVudFRhcmdldCcpXG4gICAgfVxuXG4gICAgc3VwZXIoJ1VORElDSV9DT05ORUNUJylcblxuICAgIHRoaXMub3BhcXVlID0gb3BhcXVlIHx8IG51bGxcbiAgICB0aGlzLnJlc3BvbnNlSGVhZGVycyA9IHJlc3BvbnNlSGVhZGVycyB8fCBudWxsXG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrXG4gICAgdGhpcy5hYm9ydCA9IG51bGxcblxuICAgIGFkZFNpZ25hbCh0aGlzLCBzaWduYWwpXG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0LCBjb250ZXh0KSB7XG4gICAgaWYgKCF0aGlzLmNhbGxiYWNrKSB7XG4gICAgICB0aHJvdyBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gICAgfVxuXG4gICAgdGhpcy5hYm9ydCA9IGFib3J0XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dFxuICB9XG5cbiAgb25IZWFkZXJzICgpIHtcbiAgICB0aHJvdyBuZXcgU29ja2V0RXJyb3IoJ2JhZCBjb25uZWN0JywgbnVsbClcbiAgfVxuXG4gIG9uVXBncmFkZSAoc3RhdHVzQ29kZSwgcmF3SGVhZGVycywgc29ja2V0KSB7XG4gICAgY29uc3QgeyBjYWxsYmFjaywgb3BhcXVlLCBjb250ZXh0IH0gPSB0aGlzXG5cbiAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG5cbiAgICBsZXQgaGVhZGVycyA9IHJhd0hlYWRlcnNcbiAgICAvLyBJbmRpY2F0ZXMgaXMgYW4gSFRUUDJTZXNzaW9uXG4gICAgaWYgKGhlYWRlcnMgIT0gbnVsbCkge1xuICAgICAgaGVhZGVycyA9IHRoaXMucmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VSYXdIZWFkZXJzKHJhd0hlYWRlcnMpIDogdXRpbC5wYXJzZUhlYWRlcnMocmF3SGVhZGVycylcbiAgICB9XG5cbiAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgbnVsbCwge1xuICAgICAgc3RhdHVzQ29kZSxcbiAgICAgIGhlYWRlcnMsXG4gICAgICBzb2NrZXQsXG4gICAgICBvcGFxdWUsXG4gICAgICBjb250ZXh0XG4gICAgfSlcbiAgfVxuXG4gIG9uRXJyb3IgKGVycikge1xuICAgIGNvbnN0IHsgY2FsbGJhY2ssIG9wYXF1ZSB9ID0gdGhpc1xuXG4gICAgcmVtb3ZlU2lnbmFsKHRoaXMpXG5cbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGNhbGxiYWNrLCBudWxsLCBlcnIsIHsgb3BhcXVlIH0pXG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb25uZWN0IChvcHRzLCBjYWxsYmFjaykge1xuICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25uZWN0LmNhbGwodGhpcywgb3B0cywgKGVyciwgZGF0YSkgPT4ge1xuICAgICAgICByZXR1cm4gZXJyID8gcmVqZWN0KGVycikgOiByZXNvbHZlKGRhdGEpXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IGNvbm5lY3RIYW5kbGVyID0gbmV3IENvbm5lY3RIYW5kbGVyKG9wdHMsIGNhbGxiYWNrKVxuICAgIHRoaXMuZGlzcGF0Y2goeyAuLi5vcHRzLCBtZXRob2Q6ICdDT05ORUNUJyB9LCBjb25uZWN0SGFuZGxlcilcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICAgIGNvbnN0IG9wYXF1ZSA9IG9wdHMgJiYgb3B0cy5vcGFxdWVcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhlcnIsIHsgb3BhcXVlIH0pKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29ubmVjdFxuIiwKICAgICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMucmVxdWVzdCA9IHJlcXVpcmUoJy4vYXBpLXJlcXVlc3QnKVxubW9kdWxlLmV4cG9ydHMuc3RyZWFtID0gcmVxdWlyZSgnLi9hcGktc3RyZWFtJylcbm1vZHVsZS5leHBvcnRzLnBpcGVsaW5lID0gcmVxdWlyZSgnLi9hcGktcGlwZWxpbmUnKVxubW9kdWxlLmV4cG9ydHMudXBncmFkZSA9IHJlcXVpcmUoJy4vYXBpLXVwZ3JhZGUnKVxubW9kdWxlLmV4cG9ydHMuY29ubmVjdCA9IHJlcXVpcmUoJy4vYXBpLWNvbm5lY3QnKVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBVbmRpY2lFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuXG5jbGFzcyBNb2NrTm90TWF0Y2hlZEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgTW9ja05vdE1hdGNoZWRFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnTW9ja05vdE1hdGNoZWRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdUaGUgcmVxdWVzdCBkb2VzIG5vdCBtYXRjaCBhbnkgcmVnaXN0ZXJlZCBtb2NrIGRpc3BhdGNoZXMnXG4gICAgdGhpcy5jb2RlID0gJ1VORF9NT0NLX0VSUl9NT0NLX05PVF9NQVRDSEVEJ1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBNb2NrTm90TWF0Y2hlZEVycm9yXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAga0FnZW50OiBTeW1ib2woJ2FnZW50JyksXG4gIGtPcHRpb25zOiBTeW1ib2woJ29wdGlvbnMnKSxcbiAga0ZhY3Rvcnk6IFN5bWJvbCgnZmFjdG9yeScpLFxuICBrRGlzcGF0Y2hlczogU3ltYm9sKCdkaXNwYXRjaGVzJyksXG4gIGtEaXNwYXRjaEtleTogU3ltYm9sKCdkaXNwYXRjaCBrZXknKSxcbiAga0RlZmF1bHRIZWFkZXJzOiBTeW1ib2woJ2RlZmF1bHQgaGVhZGVycycpLFxuICBrRGVmYXVsdFRyYWlsZXJzOiBTeW1ib2woJ2RlZmF1bHQgdHJhaWxlcnMnKSxcbiAga0NvbnRlbnRMZW5ndGg6IFN5bWJvbCgnY29udGVudCBsZW5ndGgnKSxcbiAga01vY2tBZ2VudDogU3ltYm9sKCdtb2NrIGFnZW50JyksXG4gIGtNb2NrQWdlbnRTZXQ6IFN5bWJvbCgnbW9jayBhZ2VudCBzZXQnKSxcbiAga01vY2tBZ2VudEdldDogU3ltYm9sKCdtb2NrIGFnZW50IGdldCcpLFxuICBrTW9ja0Rpc3BhdGNoOiBTeW1ib2woJ21vY2sgZGlzcGF0Y2gnKSxcbiAga0Nsb3NlOiBTeW1ib2woJ2Nsb3NlJyksXG4gIGtPcmlnaW5hbENsb3NlOiBTeW1ib2woJ29yaWdpbmFsIGFnZW50IGNsb3NlJyksXG4gIGtPcmlnaW46IFN5bWJvbCgnb3JpZ2luJyksXG4gIGtJc01vY2tBY3RpdmU6IFN5bWJvbCgnaXMgbW9jayBhY3RpdmUnKSxcbiAga05ldENvbm5lY3Q6IFN5bWJvbCgnbmV0IGNvbm5lY3QnKSxcbiAga0dldE5ldENvbm5lY3Q6IFN5bWJvbCgnZ2V0IG5ldCBjb25uZWN0JyksXG4gIGtDb25uZWN0ZWQ6IFN5bWJvbCgnY29ubmVjdGVkJylcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgTW9ja05vdE1hdGNoZWRFcnJvciB9ID0gcmVxdWlyZSgnLi9tb2NrLWVycm9ycycpXG5jb25zdCB7XG4gIGtEaXNwYXRjaGVzLFxuICBrTW9ja0FnZW50LFxuICBrT3JpZ2luYWxEaXNwYXRjaCxcbiAga09yaWdpbixcbiAga0dldE5ldENvbm5lY3Rcbn0gPSByZXF1aXJlKCcuL21vY2stc3ltYm9scycpXG5jb25zdCB7IGJ1aWxkVVJMLCBub3AgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IFNUQVRVU19DT0RFUyB9ID0gcmVxdWlyZSgnaHR0cCcpXG5jb25zdCB7XG4gIHR5cGVzOiB7XG4gICAgaXNQcm9taXNlXG4gIH1cbn0gPSByZXF1aXJlKCd1dGlsJylcblxuZnVuY3Rpb24gbWF0Y2hWYWx1ZSAobWF0Y2gsIHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgbWF0Y2ggPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIG1hdGNoID09PSB2YWx1ZVxuICB9XG4gIGlmIChtYXRjaCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgIHJldHVybiBtYXRjaC50ZXN0KHZhbHVlKVxuICB9XG4gIGlmICh0eXBlb2YgbWF0Y2ggPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gbWF0Y2godmFsdWUpID09PSB0cnVlXG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmZ1bmN0aW9uIGxvd2VyQ2FzZUVudHJpZXMgKGhlYWRlcnMpIHtcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhoZWFkZXJzKS5tYXAoKFtoZWFkZXJOYW1lLCBoZWFkZXJWYWx1ZV0pID0+IHtcbiAgICAgIHJldHVybiBbaGVhZGVyTmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpLCBoZWFkZXJWYWx1ZV1cbiAgICB9KVxuICApXG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4uLy4uL2luZGV4JykuSGVhZGVyc3xzdHJpbmdbXXxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSBoZWFkZXJzXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKi9cbmZ1bmN0aW9uIGdldEhlYWRlckJ5TmFtZSAoaGVhZGVycywga2V5KSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICBpZiAoaGVhZGVyc1tpXS50b0xvY2FsZUxvd2VyQ2FzZSgpID09PSBrZXkudG9Mb2NhbGVMb3dlckNhc2UoKSkge1xuICAgICAgICByZXR1cm4gaGVhZGVyc1tpICsgMV1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH0gZWxzZSBpZiAodHlwZW9mIGhlYWRlcnMuZ2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGhlYWRlcnMuZ2V0KGtleSlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbG93ZXJDYXNlRW50cmllcyhoZWFkZXJzKVtrZXkudG9Mb2NhbGVMb3dlckNhc2UoKV1cbiAgfVxufVxuXG4vKiogQHBhcmFtIHtzdHJpbmdbXX0gaGVhZGVycyAqL1xuZnVuY3Rpb24gYnVpbGRIZWFkZXJzRnJvbUFycmF5IChoZWFkZXJzKSB7IC8vIGZldGNoIEhlYWRlcnNMaXN0XG4gIGNvbnN0IGNsb25lID0gaGVhZGVycy5zbGljZSgpXG4gIGNvbnN0IGVudHJpZXMgPSBbXVxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgY2xvbmUubGVuZ3RoOyBpbmRleCArPSAyKSB7XG4gICAgZW50cmllcy5wdXNoKFtjbG9uZVtpbmRleF0sIGNsb25lW2luZGV4ICsgMV1dKVxuICB9XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoZW50cmllcylcbn1cblxuZnVuY3Rpb24gbWF0Y2hIZWFkZXJzIChtb2NrRGlzcGF0Y2gsIGhlYWRlcnMpIHtcbiAgaWYgKHR5cGVvZiBtb2NrRGlzcGF0Y2guaGVhZGVycyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7IC8vIGZldGNoIEhlYWRlcnNMaXN0XG4gICAgICBoZWFkZXJzID0gYnVpbGRIZWFkZXJzRnJvbUFycmF5KGhlYWRlcnMpXG4gICAgfVxuICAgIHJldHVybiBtb2NrRGlzcGF0Y2guaGVhZGVycyhoZWFkZXJzID8gbG93ZXJDYXNlRW50cmllcyhoZWFkZXJzKSA6IHt9KVxuICB9XG4gIGlmICh0eXBlb2YgbW9ja0Rpc3BhdGNoLmhlYWRlcnMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICBpZiAodHlwZW9mIGhlYWRlcnMgIT09ICdvYmplY3QnIHx8IHR5cGVvZiBtb2NrRGlzcGF0Y2guaGVhZGVycyAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGZvciAoY29uc3QgW21hdGNoSGVhZGVyTmFtZSwgbWF0Y2hIZWFkZXJWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMobW9ja0Rpc3BhdGNoLmhlYWRlcnMpKSB7XG4gICAgY29uc3QgaGVhZGVyVmFsdWUgPSBnZXRIZWFkZXJCeU5hbWUoaGVhZGVycywgbWF0Y2hIZWFkZXJOYW1lKVxuXG4gICAgaWYgKCFtYXRjaFZhbHVlKG1hdGNoSGVhZGVyVmFsdWUsIGhlYWRlclZhbHVlKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlXG59XG5cbmZ1bmN0aW9uIHNhZmVVcmwgKHBhdGgpIHtcbiAgaWYgKHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBwYXRoXG4gIH1cblxuICBjb25zdCBwYXRoU2VnbWVudHMgPSBwYXRoLnNwbGl0KCc/JylcblxuICBpZiAocGF0aFNlZ21lbnRzLmxlbmd0aCAhPT0gMikge1xuICAgIHJldHVybiBwYXRoXG4gIH1cblxuICBjb25zdCBxcCA9IG5ldyBVUkxTZWFyY2hQYXJhbXMocGF0aFNlZ21lbnRzLnBvcCgpKVxuICBxcC5zb3J0KClcbiAgcmV0dXJuIFsuLi5wYXRoU2VnbWVudHMsIHFwLnRvU3RyaW5nKCldLmpvaW4oJz8nKVxufVxuXG5mdW5jdGlvbiBtYXRjaEtleSAobW9ja0Rpc3BhdGNoLCB7IHBhdGgsIG1ldGhvZCwgYm9keSwgaGVhZGVycyB9KSB7XG4gIGNvbnN0IHBhdGhNYXRjaCA9IG1hdGNoVmFsdWUobW9ja0Rpc3BhdGNoLnBhdGgsIHBhdGgpXG4gIGNvbnN0IG1ldGhvZE1hdGNoID0gbWF0Y2hWYWx1ZShtb2NrRGlzcGF0Y2gubWV0aG9kLCBtZXRob2QpXG4gIGNvbnN0IGJvZHlNYXRjaCA9IHR5cGVvZiBtb2NrRGlzcGF0Y2guYm9keSAhPT0gJ3VuZGVmaW5lZCcgPyBtYXRjaFZhbHVlKG1vY2tEaXNwYXRjaC5ib2R5LCBib2R5KSA6IHRydWVcbiAgY29uc3QgaGVhZGVyc01hdGNoID0gbWF0Y2hIZWFkZXJzKG1vY2tEaXNwYXRjaCwgaGVhZGVycylcbiAgcmV0dXJuIHBhdGhNYXRjaCAmJiBtZXRob2RNYXRjaCAmJiBib2R5TWF0Y2ggJiYgaGVhZGVyc01hdGNoXG59XG5cbmZ1bmN0aW9uIGdldFJlc3BvbnNlRGF0YSAoZGF0YSkge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKGRhdGEpKSB7XG4gICAgcmV0dXJuIGRhdGFcbiAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZGF0YSlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZGF0YS50b1N0cmluZygpXG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0TW9ja0Rpc3BhdGNoIChtb2NrRGlzcGF0Y2hlcywga2V5KSB7XG4gIGNvbnN0IGJhc2VQYXRoID0ga2V5LnF1ZXJ5ID8gYnVpbGRVUkwoa2V5LnBhdGgsIGtleS5xdWVyeSkgOiBrZXkucGF0aFxuICBjb25zdCByZXNvbHZlZFBhdGggPSB0eXBlb2YgYmFzZVBhdGggPT09ICdzdHJpbmcnID8gc2FmZVVybChiYXNlUGF0aCkgOiBiYXNlUGF0aFxuXG4gIC8vIE1hdGNoIHBhdGhcbiAgbGV0IG1hdGNoZWRNb2NrRGlzcGF0Y2hlcyA9IG1vY2tEaXNwYXRjaGVzLmZpbHRlcigoeyBjb25zdW1lZCB9KSA9PiAhY29uc3VtZWQpLmZpbHRlcigoeyBwYXRoIH0pID0+IG1hdGNoVmFsdWUoc2FmZVVybChwYXRoKSwgcmVzb2x2ZWRQYXRoKSlcbiAgaWYgKG1hdGNoZWRNb2NrRGlzcGF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgTW9ja05vdE1hdGNoZWRFcnJvcihgTW9jayBkaXNwYXRjaCBub3QgbWF0Y2hlZCBmb3IgcGF0aCAnJHtyZXNvbHZlZFBhdGh9J2ApXG4gIH1cblxuICAvLyBNYXRjaCBtZXRob2RcbiAgbWF0Y2hlZE1vY2tEaXNwYXRjaGVzID0gbWF0Y2hlZE1vY2tEaXNwYXRjaGVzLmZpbHRlcigoeyBtZXRob2QgfSkgPT4gbWF0Y2hWYWx1ZShtZXRob2QsIGtleS5tZXRob2QpKVxuICBpZiAobWF0Y2hlZE1vY2tEaXNwYXRjaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBNb2NrTm90TWF0Y2hlZEVycm9yKGBNb2NrIGRpc3BhdGNoIG5vdCBtYXRjaGVkIGZvciBtZXRob2QgJyR7a2V5Lm1ldGhvZH0nYClcbiAgfVxuXG4gIC8vIE1hdGNoIGJvZHlcbiAgbWF0Y2hlZE1vY2tEaXNwYXRjaGVzID0gbWF0Y2hlZE1vY2tEaXNwYXRjaGVzLmZpbHRlcigoeyBib2R5IH0pID0+IHR5cGVvZiBib2R5ICE9PSAndW5kZWZpbmVkJyA/IG1hdGNoVmFsdWUoYm9keSwga2V5LmJvZHkpIDogdHJ1ZSlcbiAgaWYgKG1hdGNoZWRNb2NrRGlzcGF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgTW9ja05vdE1hdGNoZWRFcnJvcihgTW9jayBkaXNwYXRjaCBub3QgbWF0Y2hlZCBmb3IgYm9keSAnJHtrZXkuYm9keX0nYClcbiAgfVxuXG4gIC8vIE1hdGNoIGhlYWRlcnNcbiAgbWF0Y2hlZE1vY2tEaXNwYXRjaGVzID0gbWF0Y2hlZE1vY2tEaXNwYXRjaGVzLmZpbHRlcigobW9ja0Rpc3BhdGNoKSA9PiBtYXRjaEhlYWRlcnMobW9ja0Rpc3BhdGNoLCBrZXkuaGVhZGVycykpXG4gIGlmIChtYXRjaGVkTW9ja0Rpc3BhdGNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IE1vY2tOb3RNYXRjaGVkRXJyb3IoYE1vY2sgZGlzcGF0Y2ggbm90IG1hdGNoZWQgZm9yIGhlYWRlcnMgJyR7dHlwZW9mIGtleS5oZWFkZXJzID09PSAnb2JqZWN0JyA/IEpTT04uc3RyaW5naWZ5KGtleS5oZWFkZXJzKSA6IGtleS5oZWFkZXJzfSdgKVxuICB9XG5cbiAgcmV0dXJuIG1hdGNoZWRNb2NrRGlzcGF0Y2hlc1swXVxufVxuXG5mdW5jdGlvbiBhZGRNb2NrRGlzcGF0Y2ggKG1vY2tEaXNwYXRjaGVzLCBrZXksIGRhdGEpIHtcbiAgY29uc3QgYmFzZURhdGEgPSB7IHRpbWVzSW52b2tlZDogMCwgdGltZXM6IDEsIHBlcnNpc3Q6IGZhbHNlLCBjb25zdW1lZDogZmFsc2UgfVxuICBjb25zdCByZXBseURhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ2Z1bmN0aW9uJyA/IHsgY2FsbGJhY2s6IGRhdGEgfSA6IHsgLi4uZGF0YSB9XG4gIGNvbnN0IG5ld01vY2tEaXNwYXRjaCA9IHsgLi4uYmFzZURhdGEsIC4uLmtleSwgcGVuZGluZzogdHJ1ZSwgZGF0YTogeyBlcnJvcjogbnVsbCwgLi4ucmVwbHlEYXRhIH0gfVxuICBtb2NrRGlzcGF0Y2hlcy5wdXNoKG5ld01vY2tEaXNwYXRjaClcbiAgcmV0dXJuIG5ld01vY2tEaXNwYXRjaFxufVxuXG5mdW5jdGlvbiBkZWxldGVNb2NrRGlzcGF0Y2ggKG1vY2tEaXNwYXRjaGVzLCBrZXkpIHtcbiAgY29uc3QgaW5kZXggPSBtb2NrRGlzcGF0Y2hlcy5maW5kSW5kZXgoZGlzcGF0Y2ggPT4ge1xuICAgIGlmICghZGlzcGF0Y2guY29uc3VtZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICByZXR1cm4gbWF0Y2hLZXkoZGlzcGF0Y2gsIGtleSlcbiAgfSlcbiAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgIG1vY2tEaXNwYXRjaGVzLnNwbGljZShpbmRleCwgMSlcbiAgfVxufVxuXG5mdW5jdGlvbiBidWlsZEtleSAob3B0cykge1xuICBjb25zdCB7IHBhdGgsIG1ldGhvZCwgYm9keSwgaGVhZGVycywgcXVlcnkgfSA9IG9wdHNcbiAgcmV0dXJuIHtcbiAgICBwYXRoLFxuICAgIG1ldGhvZCxcbiAgICBib2R5LFxuICAgIGhlYWRlcnMsXG4gICAgcXVlcnlcbiAgfVxufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUtleVZhbHVlcyAoZGF0YSkge1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoZGF0YSkucmVkdWNlKChrZXlWYWx1ZVBhaXJzLCBba2V5LCB2YWx1ZV0pID0+IFtcbiAgICAuLi5rZXlWYWx1ZVBhaXJzLFxuICAgIEJ1ZmZlci5mcm9tKGAke2tleX1gKSxcbiAgICBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLm1hcCh4ID0+IEJ1ZmZlci5mcm9tKGAke3h9YCkpIDogQnVmZmVyLmZyb20oYCR7dmFsdWV9YClcbiAgXSwgW10pXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL1N0YXR1c1xuICogQHBhcmFtIHtudW1iZXJ9IHN0YXR1c0NvZGVcbiAqL1xuZnVuY3Rpb24gZ2V0U3RhdHVzVGV4dCAoc3RhdHVzQ29kZSkge1xuICByZXR1cm4gU1RBVFVTX0NPREVTW3N0YXR1c0NvZGVdIHx8ICd1bmtub3duJ1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRSZXNwb25zZSAoYm9keSkge1xuICBjb25zdCBidWZmZXJzID0gW11cbiAgZm9yIGF3YWl0IChjb25zdCBkYXRhIG9mIGJvZHkpIHtcbiAgICBidWZmZXJzLnB1c2goZGF0YSlcbiAgfVxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChidWZmZXJzKS50b1N0cmluZygndXRmOCcpXG59XG5cbi8qKlxuICogTW9jayBkaXNwYXRjaCBmdW5jdGlvbiB1c2VkIHRvIHNpbXVsYXRlIHVuZGljaSBkaXNwYXRjaGVzXG4gKi9cbmZ1bmN0aW9uIG1vY2tEaXNwYXRjaCAob3B0cywgaGFuZGxlcikge1xuICAvLyBHZXQgbW9jayBkaXNwYXRjaCBmcm9tIGJ1aWx0IGtleVxuICBjb25zdCBrZXkgPSBidWlsZEtleShvcHRzKVxuICBjb25zdCBtb2NrRGlzcGF0Y2ggPSBnZXRNb2NrRGlzcGF0Y2godGhpc1trRGlzcGF0Y2hlc10sIGtleSlcblxuICBtb2NrRGlzcGF0Y2gudGltZXNJbnZva2VkKytcblxuICAvLyBIZXJlJ3Mgd2hlcmUgd2UgcmVzb2x2ZSBhIGNhbGxiYWNrIGlmIGEgY2FsbGJhY2sgaXMgcHJlc2VudCBmb3IgdGhlIGRpc3BhdGNoIGRhdGEuXG4gIGlmIChtb2NrRGlzcGF0Y2guZGF0YS5jYWxsYmFjaykge1xuICAgIG1vY2tEaXNwYXRjaC5kYXRhID0geyAuLi5tb2NrRGlzcGF0Y2guZGF0YSwgLi4ubW9ja0Rpc3BhdGNoLmRhdGEuY2FsbGJhY2sob3B0cykgfVxuICB9XG5cbiAgLy8gUGFyc2UgbW9ja0Rpc3BhdGNoIGRhdGFcbiAgY29uc3QgeyBkYXRhOiB7IHN0YXR1c0NvZGUsIGRhdGEsIGhlYWRlcnMsIHRyYWlsZXJzLCBlcnJvciB9LCBkZWxheSwgcGVyc2lzdCB9ID0gbW9ja0Rpc3BhdGNoXG4gIGNvbnN0IHsgdGltZXNJbnZva2VkLCB0aW1lcyB9ID0gbW9ja0Rpc3BhdGNoXG5cbiAgLy8gSWYgaXQncyB1c2VkIHVwIGFuZCBub3QgcGVyc2lzdGVudCwgbWFyayBhcyBjb25zdW1lZFxuICBtb2NrRGlzcGF0Y2guY29uc3VtZWQgPSAhcGVyc2lzdCAmJiB0aW1lc0ludm9rZWQgPj0gdGltZXNcbiAgbW9ja0Rpc3BhdGNoLnBlbmRpbmcgPSB0aW1lc0ludm9rZWQgPCB0aW1lc1xuXG4gIC8vIElmIHNwZWNpZmllZCwgdHJpZ2dlciBkaXNwYXRjaCBlcnJvclxuICBpZiAoZXJyb3IgIT09IG51bGwpIHtcbiAgICBkZWxldGVNb2NrRGlzcGF0Y2godGhpc1trRGlzcGF0Y2hlc10sIGtleSlcbiAgICBoYW5kbGVyLm9uRXJyb3IoZXJyb3IpXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8vIEhhbmRsZSB0aGUgcmVxdWVzdCB3aXRoIGEgZGVsYXkgaWYgbmVjZXNzYXJ5XG4gIGlmICh0eXBlb2YgZGVsYXkgPT09ICdudW1iZXInICYmIGRlbGF5ID4gMCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaGFuZGxlUmVwbHkodGhpc1trRGlzcGF0Y2hlc10pXG4gICAgfSwgZGVsYXkpXG4gIH0gZWxzZSB7XG4gICAgaGFuZGxlUmVwbHkodGhpc1trRGlzcGF0Y2hlc10pXG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVSZXBseSAobW9ja0Rpc3BhdGNoZXMsIF9kYXRhID0gZGF0YSkge1xuICAgIC8vIGZldGNoJ3MgSGVhZGVyc0xpc3QgaXMgYSAxRCBzdHJpbmcgYXJyYXlcbiAgICBjb25zdCBvcHRzSGVhZGVycyA9IEFycmF5LmlzQXJyYXkob3B0cy5oZWFkZXJzKVxuICAgICAgPyBidWlsZEhlYWRlcnNGcm9tQXJyYXkob3B0cy5oZWFkZXJzKVxuICAgICAgOiBvcHRzLmhlYWRlcnNcbiAgICBjb25zdCBib2R5ID0gdHlwZW9mIF9kYXRhID09PSAnZnVuY3Rpb24nXG4gICAgICA/IF9kYXRhKHsgLi4ub3B0cywgaGVhZGVyczogb3B0c0hlYWRlcnMgfSlcbiAgICAgIDogX2RhdGFcblxuICAgIC8vIHV0aWwudHlwZXMuaXNQcm9taXNlIGlzIGxpa2VseSBuZWVkZWQgZm9yIGplc3QuXG4gICAgaWYgKGlzUHJvbWlzZShib2R5KSkge1xuICAgICAgLy8gSWYgaGFuZGxlUmVwbHkgaXMgYXN5bmNocm9ub3VzLCB0aHJvd2luZyBhbiBlcnJvclxuICAgICAgLy8gaW4gdGhlIGNhbGxiYWNrIHdpbGwgcmVqZWN0IHRoZSBwcm9taXNlLCByYXRoZXIgdGhhblxuICAgICAgLy8gc3luY2hyb25vdXNseSB0aHJvdyB0aGUgZXJyb3IsIHdoaWNoIGJyZWFrcyBzb21lIHRlc3RzLlxuICAgICAgLy8gUmF0aGVyLCB3ZSB3YWl0IGZvciB0aGUgY2FsbGJhY2sgdG8gcmVzb2x2ZSBpZiBpdCBpcyBhXG4gICAgICAvLyBwcm9taXNlLCBhbmQgdGhlbiByZS1ydW4gaGFuZGxlUmVwbHkgd2l0aCB0aGUgbmV3IGJvZHkuXG4gICAgICBib2R5LnRoZW4oKG5ld0RhdGEpID0+IGhhbmRsZVJlcGx5KG1vY2tEaXNwYXRjaGVzLCBuZXdEYXRhKSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9IGdldFJlc3BvbnNlRGF0YShib2R5KVxuICAgIGNvbnN0IHJlc3BvbnNlSGVhZGVycyA9IGdlbmVyYXRlS2V5VmFsdWVzKGhlYWRlcnMpXG4gICAgY29uc3QgcmVzcG9uc2VUcmFpbGVycyA9IGdlbmVyYXRlS2V5VmFsdWVzKHRyYWlsZXJzKVxuXG4gICAgaGFuZGxlci5hYm9ydCA9IG5vcFxuICAgIGhhbmRsZXIub25IZWFkZXJzKHN0YXR1c0NvZGUsIHJlc3BvbnNlSGVhZGVycywgcmVzdW1lLCBnZXRTdGF0dXNUZXh0KHN0YXR1c0NvZGUpKVxuICAgIGhhbmRsZXIub25EYXRhKEJ1ZmZlci5mcm9tKHJlc3BvbnNlRGF0YSkpXG4gICAgaGFuZGxlci5vbkNvbXBsZXRlKHJlc3BvbnNlVHJhaWxlcnMpXG4gICAgZGVsZXRlTW9ja0Rpc3BhdGNoKG1vY2tEaXNwYXRjaGVzLCBrZXkpXG4gIH1cblxuICBmdW5jdGlvbiByZXN1bWUgKCkge31cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiBidWlsZE1vY2tEaXNwYXRjaCAoKSB7XG4gIGNvbnN0IGFnZW50ID0gdGhpc1trTW9ja0FnZW50XVxuICBjb25zdCBvcmlnaW4gPSB0aGlzW2tPcmlnaW5dXG4gIGNvbnN0IG9yaWdpbmFsRGlzcGF0Y2ggPSB0aGlzW2tPcmlnaW5hbERpc3BhdGNoXVxuXG4gIHJldHVybiBmdW5jdGlvbiBkaXNwYXRjaCAob3B0cywgaGFuZGxlcikge1xuICAgIGlmIChhZ2VudC5pc01vY2tBY3RpdmUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG1vY2tEaXNwYXRjaC5jYWxsKHRoaXMsIG9wdHMsIGhhbmRsZXIpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBNb2NrTm90TWF0Y2hlZEVycm9yKSB7XG4gICAgICAgICAgY29uc3QgbmV0Q29ubmVjdCA9IGFnZW50W2tHZXROZXRDb25uZWN0XSgpXG4gICAgICAgICAgaWYgKG5ldENvbm5lY3QgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgTW9ja05vdE1hdGNoZWRFcnJvcihgJHtlcnJvci5tZXNzYWdlfTogc3Vic2VxdWVudCByZXF1ZXN0IHRvIG9yaWdpbiAke29yaWdpbn0gd2FzIG5vdCBhbGxvd2VkIChuZXQuY29ubmVjdCBkaXNhYmxlZClgKVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY2hlY2tOZXRDb25uZWN0KG5ldENvbm5lY3QsIG9yaWdpbikpIHtcbiAgICAgICAgICAgIG9yaWdpbmFsRGlzcGF0Y2guY2FsbCh0aGlzLCBvcHRzLCBoYW5kbGVyKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgTW9ja05vdE1hdGNoZWRFcnJvcihgJHtlcnJvci5tZXNzYWdlfTogc3Vic2VxdWVudCByZXF1ZXN0IHRvIG9yaWdpbiAke29yaWdpbn0gd2FzIG5vdCBhbGxvd2VkIChuZXQuY29ubmVjdCBpcyBub3QgZW5hYmxlZCBmb3IgdGhpcyBvcmlnaW4pYClcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvcmlnaW5hbERpc3BhdGNoLmNhbGwodGhpcywgb3B0cywgaGFuZGxlcilcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tOZXRDb25uZWN0IChuZXRDb25uZWN0LCBvcmlnaW4pIHtcbiAgY29uc3QgdXJsID0gbmV3IFVSTChvcmlnaW4pXG4gIGlmIChuZXRDb25uZWN0ID09PSB0cnVlKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG5ldENvbm5lY3QpICYmIG5ldENvbm5lY3Quc29tZSgobWF0Y2hlcikgPT4gbWF0Y2hWYWx1ZShtYXRjaGVyLCB1cmwuaG9zdCkpKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gYnVpbGRNb2NrT3B0aW9ucyAob3B0cykge1xuICBpZiAob3B0cykge1xuICAgIGNvbnN0IHsgYWdlbnQsIC4uLm1vY2tPcHRpb25zIH0gPSBvcHRzXG4gICAgcmV0dXJuIG1vY2tPcHRpb25zXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldFJlc3BvbnNlRGF0YSxcbiAgZ2V0TW9ja0Rpc3BhdGNoLFxuICBhZGRNb2NrRGlzcGF0Y2gsXG4gIGRlbGV0ZU1vY2tEaXNwYXRjaCxcbiAgYnVpbGRLZXksXG4gIGdlbmVyYXRlS2V5VmFsdWVzLFxuICBtYXRjaFZhbHVlLFxuICBnZXRSZXNwb25zZSxcbiAgZ2V0U3RhdHVzVGV4dCxcbiAgbW9ja0Rpc3BhdGNoLFxuICBidWlsZE1vY2tEaXNwYXRjaCxcbiAgY2hlY2tOZXRDb25uZWN0LFxuICBidWlsZE1vY2tPcHRpb25zLFxuICBnZXRIZWFkZXJCeU5hbWVcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgZ2V0UmVzcG9uc2VEYXRhLCBidWlsZEtleSwgYWRkTW9ja0Rpc3BhdGNoIH0gPSByZXF1aXJlKCcuL21vY2stdXRpbHMnKVxuY29uc3Qge1xuICBrRGlzcGF0Y2hlcyxcbiAga0Rpc3BhdGNoS2V5LFxuICBrRGVmYXVsdEhlYWRlcnMsXG4gIGtEZWZhdWx0VHJhaWxlcnMsXG4gIGtDb250ZW50TGVuZ3RoLFxuICBrTW9ja0Rpc3BhdGNoXG59ID0gcmVxdWlyZSgnLi9tb2NrLXN5bWJvbHMnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgeyBidWlsZFVSTCB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcblxuLyoqXG4gKiBEZWZpbmVzIHRoZSBzY29wZSBBUEkgZm9yIGFuIGludGVyY2VwdG9yIHJlcGx5XG4gKi9cbmNsYXNzIE1vY2tTY29wZSB7XG4gIGNvbnN0cnVjdG9yIChtb2NrRGlzcGF0Y2gpIHtcbiAgICB0aGlzW2tNb2NrRGlzcGF0Y2hdID0gbW9ja0Rpc3BhdGNoXG4gIH1cblxuICAvKipcbiAgICogRGVsYXkgYSByZXBseSBieSBhIHNldCBhbW91bnQgaW4gbXMuXG4gICAqL1xuICBkZWxheSAod2FpdEluTXMpIHtcbiAgICBpZiAodHlwZW9mIHdhaXRJbk1zICE9PSAnbnVtYmVyJyB8fCAhTnVtYmVyLmlzSW50ZWdlcih3YWl0SW5NcykgfHwgd2FpdEluTXMgPD0gMCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCd3YWl0SW5NcyBtdXN0IGJlIGEgdmFsaWQgaW50ZWdlciA+IDAnKVxuICAgIH1cblxuICAgIHRoaXNba01vY2tEaXNwYXRjaF0uZGVsYXkgPSB3YWl0SW5Nc1xuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogRm9yIGEgZGVmaW5lZCByZXBseSwgbmV2ZXIgbWFyayBhcyBjb25zdW1lZC5cbiAgICovXG4gIHBlcnNpc3QgKCkge1xuICAgIHRoaXNba01vY2tEaXNwYXRjaF0ucGVyc2lzdCA9IHRydWVcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93IG9uZSB0byBkZWZpbmUgYSByZXBseSBmb3IgYSBzZXQgYW1vdW50IG9mIG1hdGNoaW5nIHJlcXVlc3RzLlxuICAgKi9cbiAgdGltZXMgKHJlcGVhdFRpbWVzKSB7XG4gICAgaWYgKHR5cGVvZiByZXBlYXRUaW1lcyAhPT0gJ251bWJlcicgfHwgIU51bWJlci5pc0ludGVnZXIocmVwZWF0VGltZXMpIHx8IHJlcGVhdFRpbWVzIDw9IDApIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigncmVwZWF0VGltZXMgbXVzdCBiZSBhIHZhbGlkIGludGVnZXIgPiAwJylcbiAgICB9XG5cbiAgICB0aGlzW2tNb2NrRGlzcGF0Y2hdLnRpbWVzID0gcmVwZWF0VGltZXNcbiAgICByZXR1cm4gdGhpc1xuICB9XG59XG5cbi8qKlxuICogRGVmaW5lcyBhbiBpbnRlcmNlcHRvciBmb3IgYSBNb2NrXG4gKi9cbmNsYXNzIE1vY2tJbnRlcmNlcHRvciB7XG4gIGNvbnN0cnVjdG9yIChvcHRzLCBtb2NrRGlzcGF0Y2hlcykge1xuICAgIGlmICh0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignb3B0cyBtdXN0IGJlIGFuIG9iamVjdCcpXG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3B0cy5wYXRoID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdvcHRzLnBhdGggbXVzdCBiZSBkZWZpbmVkJylcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvcHRzLm1ldGhvZCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIG9wdHMubWV0aG9kID0gJ0dFVCdcbiAgICB9XG4gICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8xMjQ1XG4gICAgLy8gQXMgcGVyIFJGQyAzOTg2LCBjbGllbnRzIGFyZSBub3Qgc3VwcG9zZWQgdG8gc2VuZCBVUklcbiAgICAvLyBmcmFnbWVudHMgdG8gc2VydmVycyB3aGVuIHRoZXkgcmV0cmlldmUgYSBkb2N1bWVudCxcbiAgICBpZiAodHlwZW9mIG9wdHMucGF0aCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmIChvcHRzLnF1ZXJ5KSB7XG4gICAgICAgIG9wdHMucGF0aCA9IGJ1aWxkVVJMKG9wdHMucGF0aCwgb3B0cy5xdWVyeSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE1hdGNoZXMgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvYmxvYi9tYWluL2xpYi9mZXRjaC9pbmRleC5qcyNMMTgxMVxuICAgICAgICBjb25zdCBwYXJzZWRVUkwgPSBuZXcgVVJMKG9wdHMucGF0aCwgJ2RhdGE6Ly8nKVxuICAgICAgICBvcHRzLnBhdGggPSBwYXJzZWRVUkwucGF0aG5hbWUgKyBwYXJzZWRVUkwuc2VhcmNoXG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3B0cy5tZXRob2QgPT09ICdzdHJpbmcnKSB7XG4gICAgICBvcHRzLm1ldGhvZCA9IG9wdHMubWV0aG9kLnRvVXBwZXJDYXNlKClcbiAgICB9XG5cbiAgICB0aGlzW2tEaXNwYXRjaEtleV0gPSBidWlsZEtleShvcHRzKVxuICAgIHRoaXNba0Rpc3BhdGNoZXNdID0gbW9ja0Rpc3BhdGNoZXNcbiAgICB0aGlzW2tEZWZhdWx0SGVhZGVyc10gPSB7fVxuICAgIHRoaXNba0RlZmF1bHRUcmFpbGVyc10gPSB7fVxuICAgIHRoaXNba0NvbnRlbnRMZW5ndGhdID0gZmFsc2VcbiAgfVxuXG4gIGNyZWF0ZU1vY2tTY29wZURpc3BhdGNoRGF0YSAoc3RhdHVzQ29kZSwgZGF0YSwgcmVzcG9uc2VPcHRpb25zID0ge30pIHtcbiAgICBjb25zdCByZXNwb25zZURhdGEgPSBnZXRSZXNwb25zZURhdGEoZGF0YSlcbiAgICBjb25zdCBjb250ZW50TGVuZ3RoID0gdGhpc1trQ29udGVudExlbmd0aF0gPyB7ICdjb250ZW50LWxlbmd0aCc6IHJlc3BvbnNlRGF0YS5sZW5ndGggfSA6IHt9XG4gICAgY29uc3QgaGVhZGVycyA9IHsgLi4udGhpc1trRGVmYXVsdEhlYWRlcnNdLCAuLi5jb250ZW50TGVuZ3RoLCAuLi5yZXNwb25zZU9wdGlvbnMuaGVhZGVycyB9XG4gICAgY29uc3QgdHJhaWxlcnMgPSB7IC4uLnRoaXNba0RlZmF1bHRUcmFpbGVyc10sIC4uLnJlc3BvbnNlT3B0aW9ucy50cmFpbGVycyB9XG5cbiAgICByZXR1cm4geyBzdGF0dXNDb2RlLCBkYXRhLCBoZWFkZXJzLCB0cmFpbGVycyB9XG4gIH1cblxuICB2YWxpZGF0ZVJlcGx5UGFyYW1ldGVycyAoc3RhdHVzQ29kZSwgZGF0YSwgcmVzcG9uc2VPcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBzdGF0dXNDb2RlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdzdGF0dXNDb2RlIG11c3QgYmUgZGVmaW5lZCcpXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignZGF0YSBtdXN0IGJlIGRlZmluZWQnKVxuICAgIH1cbiAgICBpZiAodHlwZW9mIHJlc3BvbnNlT3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigncmVzcG9uc2VPcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0JylcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTW9jayBhbiB1bmRpY2kgcmVxdWVzdCB3aXRoIGEgZGVmaW5lZCByZXBseS5cbiAgICovXG4gIHJlcGx5IChyZXBseURhdGEpIHtcbiAgICAvLyBWYWx1ZXMgb2YgcmVwbHkgYXJlbid0IGF2YWlsYWJsZSByaWdodCBub3cgYXMgdGhleVxuICAgIC8vIGNhbiBvbmx5IGJlIGF2YWlsYWJsZSB3aGVuIHRoZSByZXBseSBjYWxsYmFjayBpcyBpbnZva2VkLlxuICAgIGlmICh0eXBlb2YgcmVwbHlEYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBXZSdsbCBmaXJzdCB3cmFwIHRoZSBwcm92aWRlZCBjYWxsYmFjayBpbiBhbm90aGVyIGZ1bmN0aW9uLFxuICAgICAgLy8gdGhpcyBmdW5jdGlvbiB3aWxsIHByb3Blcmx5IHJlc29sdmUgdGhlIGRhdGEgZnJvbSB0aGUgY2FsbGJhY2tcbiAgICAgIC8vIHdoZW4gaW52b2tlZC5cbiAgICAgIGNvbnN0IHdyYXBwZWREZWZhdWx0c0NhbGxiYWNrID0gKG9wdHMpID0+IHtcbiAgICAgICAgLy8gT3VyIHJlcGx5IG9wdGlvbnMgY2FsbGJhY2sgY29udGFpbnMgdGhlIHBhcmFtZXRlciBmb3Igc3RhdHVzQ29kZSwgZGF0YSBhbmQgb3B0aW9ucy5cbiAgICAgICAgY29uc3QgcmVzb2x2ZWREYXRhID0gcmVwbHlEYXRhKG9wdHMpXG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgaXQgaXMgaW4gdGhlIHJpZ2h0IGZvcm1hdFxuICAgICAgICBpZiAodHlwZW9mIHJlc29sdmVkRGF0YSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3JlcGx5IG9wdGlvbnMgY2FsbGJhY2sgbXVzdCByZXR1cm4gYW4gb2JqZWN0JylcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgc3RhdHVzQ29kZSwgZGF0YSA9ICcnLCByZXNwb25zZU9wdGlvbnMgPSB7fSB9ID0gcmVzb2x2ZWREYXRhXG4gICAgICAgIHRoaXMudmFsaWRhdGVSZXBseVBhcmFtZXRlcnMoc3RhdHVzQ29kZSwgZGF0YSwgcmVzcG9uc2VPcHRpb25zKVxuICAgICAgICAvLyBTaW5jZSB0aGUgdmFsdWVzIGNhbiBiZSBvYnRhaW5lZCBpbW1lZGlhdGVseSB3ZSByZXR1cm4gdGhlbVxuICAgICAgICAvLyBmcm9tIHRoaXMgaGlnaGVyIG9yZGVyIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSByZXNvbHZlZCBsYXRlci5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi50aGlzLmNyZWF0ZU1vY2tTY29wZURpc3BhdGNoRGF0YShzdGF0dXNDb2RlLCBkYXRhLCByZXNwb25zZU9wdGlvbnMpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQWRkIHVzdWFsIGRpc3BhdGNoIGRhdGEsIGJ1dCB0aGlzIHRpbWUgc2V0IHRoZSBkYXRhIHBhcmFtZXRlciB0byBmdW5jdGlvbiB0aGF0IHdpbGwgZXZlbnR1YWxseSBwcm92aWRlIGRhdGEuXG4gICAgICBjb25zdCBuZXdNb2NrRGlzcGF0Y2ggPSBhZGRNb2NrRGlzcGF0Y2godGhpc1trRGlzcGF0Y2hlc10sIHRoaXNba0Rpc3BhdGNoS2V5XSwgd3JhcHBlZERlZmF1bHRzQ2FsbGJhY2spXG4gICAgICByZXR1cm4gbmV3IE1vY2tTY29wZShuZXdNb2NrRGlzcGF0Y2gpXG4gICAgfVxuXG4gICAgLy8gV2UgY2FuIGhhdmUgZWl0aGVyIG9uZSBvciB0aHJlZSBwYXJhbWV0ZXJzLCBpZiB3ZSBnZXQgaGVyZSxcbiAgICAvLyB3ZSBzaG91bGQgaGF2ZSAxLTMgcGFyYW1ldGVycy4gU28gd2Ugc3ByZWFkIHRoZSBhcmd1bWVudHMgb2ZcbiAgICAvLyB0aGlzIGZ1bmN0aW9uIHRvIG9idGFpbiB0aGUgcGFyYW1ldGVycywgc2luY2UgcmVwbHlEYXRhIHdpbGwgYWx3YXlzXG4gICAgLy8ganVzdCBiZSB0aGUgc3RhdHVzQ29kZS5cbiAgICBjb25zdCBbc3RhdHVzQ29kZSwgZGF0YSA9ICcnLCByZXNwb25zZU9wdGlvbnMgPSB7fV0gPSBbLi4uYXJndW1lbnRzXVxuICAgIHRoaXMudmFsaWRhdGVSZXBseVBhcmFtZXRlcnMoc3RhdHVzQ29kZSwgZGF0YSwgcmVzcG9uc2VPcHRpb25zKVxuXG4gICAgLy8gU2VuZCBpbi1hbHJlYWR5IHByb3ZpZGVkIGRhdGEgbGlrZSB1c3VhbFxuICAgIGNvbnN0IGRpc3BhdGNoRGF0YSA9IHRoaXMuY3JlYXRlTW9ja1Njb3BlRGlzcGF0Y2hEYXRhKHN0YXR1c0NvZGUsIGRhdGEsIHJlc3BvbnNlT3B0aW9ucylcbiAgICBjb25zdCBuZXdNb2NrRGlzcGF0Y2ggPSBhZGRNb2NrRGlzcGF0Y2godGhpc1trRGlzcGF0Y2hlc10sIHRoaXNba0Rpc3BhdGNoS2V5XSwgZGlzcGF0Y2hEYXRhKVxuICAgIHJldHVybiBuZXcgTW9ja1Njb3BlKG5ld01vY2tEaXNwYXRjaClcbiAgfVxuXG4gIC8qKlxuICAgKiBNb2NrIGFuIHVuZGljaSByZXF1ZXN0IHdpdGggYSBkZWZpbmVkIGVycm9yLlxuICAgKi9cbiAgcmVwbHlXaXRoRXJyb3IgKGVycm9yKSB7XG4gICAgaWYgKHR5cGVvZiBlcnJvciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignZXJyb3IgbXVzdCBiZSBkZWZpbmVkJylcbiAgICB9XG5cbiAgICBjb25zdCBuZXdNb2NrRGlzcGF0Y2ggPSBhZGRNb2NrRGlzcGF0Y2godGhpc1trRGlzcGF0Y2hlc10sIHRoaXNba0Rpc3BhdGNoS2V5XSwgeyBlcnJvciB9KVxuICAgIHJldHVybiBuZXcgTW9ja1Njb3BlKG5ld01vY2tEaXNwYXRjaClcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgZGVmYXVsdCByZXBseSBoZWFkZXJzIG9uIHRoZSBpbnRlcmNlcHRvciBmb3Igc3Vic2VxdWVudCByZXBsaWVzXG4gICAqL1xuICBkZWZhdWx0UmVwbHlIZWFkZXJzIChoZWFkZXJzKSB7XG4gICAgaWYgKHR5cGVvZiBoZWFkZXJzID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdoZWFkZXJzIG11c3QgYmUgZGVmaW5lZCcpXG4gICAgfVxuXG4gICAgdGhpc1trRGVmYXVsdEhlYWRlcnNdID0gaGVhZGVyc1xuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogU2V0IGRlZmF1bHQgcmVwbHkgdHJhaWxlcnMgb24gdGhlIGludGVyY2VwdG9yIGZvciBzdWJzZXF1ZW50IHJlcGxpZXNcbiAgICovXG4gIGRlZmF1bHRSZXBseVRyYWlsZXJzICh0cmFpbGVycykge1xuICAgIGlmICh0eXBlb2YgdHJhaWxlcnMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3RyYWlsZXJzIG11c3QgYmUgZGVmaW5lZCcpXG4gICAgfVxuXG4gICAgdGhpc1trRGVmYXVsdFRyYWlsZXJzXSA9IHRyYWlsZXJzXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgcmVwbHkgY29udGVudCBsZW5ndGggaGVhZGVyIGZvciByZXBsaWVzIG9uIHRoZSBpbnRlcmNlcHRvclxuICAgKi9cbiAgcmVwbHlDb250ZW50TGVuZ3RoICgpIHtcbiAgICB0aGlzW2tDb250ZW50TGVuZ3RoXSA9IHRydWVcbiAgICByZXR1cm4gdGhpc1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzLk1vY2tJbnRlcmNlcHRvciA9IE1vY2tJbnRlcmNlcHRvclxubW9kdWxlLmV4cG9ydHMuTW9ja1Njb3BlID0gTW9ja1Njb3BlXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHByb21pc2lmeSB9ID0gcmVxdWlyZSgndXRpbCcpXG5jb25zdCBDbGllbnQgPSByZXF1aXJlKCcuLi9jbGllbnQnKVxuY29uc3QgeyBidWlsZE1vY2tEaXNwYXRjaCB9ID0gcmVxdWlyZSgnLi9tb2NrLXV0aWxzJylcbmNvbnN0IHtcbiAga0Rpc3BhdGNoZXMsXG4gIGtNb2NrQWdlbnQsXG4gIGtDbG9zZSxcbiAga09yaWdpbmFsQ2xvc2UsXG4gIGtPcmlnaW4sXG4gIGtPcmlnaW5hbERpc3BhdGNoLFxuICBrQ29ubmVjdGVkXG59ID0gcmVxdWlyZSgnLi9tb2NrLXN5bWJvbHMnKVxuY29uc3QgeyBNb2NrSW50ZXJjZXB0b3IgfSA9IHJlcXVpcmUoJy4vbW9jay1pbnRlcmNlcHRvcicpXG5jb25zdCBTeW1ib2xzID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcblxuLyoqXG4gKiBNb2NrQ2xpZW50IHByb3ZpZGVzIGFuIEFQSSB0aGF0IGV4dGVuZHMgdGhlIENsaWVudCB0byBpbmZsdWVuY2UgdGhlIG1vY2tEaXNwYXRjaGVzLlxuICovXG5jbGFzcyBNb2NrQ2xpZW50IGV4dGVuZHMgQ2xpZW50IHtcbiAgY29uc3RydWN0b3IgKG9yaWdpbiwgb3B0cykge1xuICAgIHN1cGVyKG9yaWdpbiwgb3B0cylcblxuICAgIGlmICghb3B0cyB8fCAhb3B0cy5hZ2VudCB8fCB0eXBlb2Ygb3B0cy5hZ2VudC5kaXNwYXRjaCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdBcmd1bWVudCBvcHRzLmFnZW50IG11c3QgaW1wbGVtZW50IEFnZW50JylcbiAgICB9XG5cbiAgICB0aGlzW2tNb2NrQWdlbnRdID0gb3B0cy5hZ2VudFxuICAgIHRoaXNba09yaWdpbl0gPSBvcmlnaW5cbiAgICB0aGlzW2tEaXNwYXRjaGVzXSA9IFtdXG4gICAgdGhpc1trQ29ubmVjdGVkXSA9IDFcbiAgICB0aGlzW2tPcmlnaW5hbERpc3BhdGNoXSA9IHRoaXMuZGlzcGF0Y2hcbiAgICB0aGlzW2tPcmlnaW5hbENsb3NlXSA9IHRoaXMuY2xvc2UuYmluZCh0aGlzKVxuXG4gICAgdGhpcy5kaXNwYXRjaCA9IGJ1aWxkTW9ja0Rpc3BhdGNoLmNhbGwodGhpcylcbiAgICB0aGlzLmNsb3NlID0gdGhpc1trQ2xvc2VdXG4gIH1cblxuICBnZXQgW1N5bWJvbHMua0Nvbm5lY3RlZF0gKCkge1xuICAgIHJldHVybiB0aGlzW2tDb25uZWN0ZWRdXG4gIH1cblxuICAvKipcbiAgICogU2V0cyB1cCB0aGUgYmFzZSBpbnRlcmNlcHRvciBmb3IgbW9ja2luZyByZXBsaWVzIGZyb20gdW5kaWNpLlxuICAgKi9cbiAgaW50ZXJjZXB0IChvcHRzKSB7XG4gICAgcmV0dXJuIG5ldyBNb2NrSW50ZXJjZXB0b3Iob3B0cywgdGhpc1trRGlzcGF0Y2hlc10pXG4gIH1cblxuICBhc3luYyBba0Nsb3NlXSAoKSB7XG4gICAgYXdhaXQgcHJvbWlzaWZ5KHRoaXNba09yaWdpbmFsQ2xvc2VdKSgpXG4gICAgdGhpc1trQ29ubmVjdGVkXSA9IDBcbiAgICB0aGlzW2tNb2NrQWdlbnRdW1N5bWJvbHMua0NsaWVudHNdLmRlbGV0ZSh0aGlzW2tPcmlnaW5dKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gTW9ja0NsaWVudFxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBwcm9taXNpZnkgfSA9IHJlcXVpcmUoJ3V0aWwnKVxuY29uc3QgUG9vbCA9IHJlcXVpcmUoJy4uL3Bvb2wnKVxuY29uc3QgeyBidWlsZE1vY2tEaXNwYXRjaCB9ID0gcmVxdWlyZSgnLi9tb2NrLXV0aWxzJylcbmNvbnN0IHtcbiAga0Rpc3BhdGNoZXMsXG4gIGtNb2NrQWdlbnQsXG4gIGtDbG9zZSxcbiAga09yaWdpbmFsQ2xvc2UsXG4gIGtPcmlnaW4sXG4gIGtPcmlnaW5hbERpc3BhdGNoLFxuICBrQ29ubmVjdGVkXG59ID0gcmVxdWlyZSgnLi9tb2NrLXN5bWJvbHMnKVxuY29uc3QgeyBNb2NrSW50ZXJjZXB0b3IgfSA9IHJlcXVpcmUoJy4vbW9jay1pbnRlcmNlcHRvcicpXG5jb25zdCBTeW1ib2xzID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcblxuLyoqXG4gKiBNb2NrUG9vbCBwcm92aWRlcyBhbiBBUEkgdGhhdCBleHRlbmRzIHRoZSBQb29sIHRvIGluZmx1ZW5jZSB0aGUgbW9ja0Rpc3BhdGNoZXMuXG4gKi9cbmNsYXNzIE1vY2tQb29sIGV4dGVuZHMgUG9vbCB7XG4gIGNvbnN0cnVjdG9yIChvcmlnaW4sIG9wdHMpIHtcbiAgICBzdXBlcihvcmlnaW4sIG9wdHMpXG5cbiAgICBpZiAoIW9wdHMgfHwgIW9wdHMuYWdlbnQgfHwgdHlwZW9mIG9wdHMuYWdlbnQuZGlzcGF0Y2ggIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignQXJndW1lbnQgb3B0cy5hZ2VudCBtdXN0IGltcGxlbWVudCBBZ2VudCcpXG4gICAgfVxuXG4gICAgdGhpc1trTW9ja0FnZW50XSA9IG9wdHMuYWdlbnRcbiAgICB0aGlzW2tPcmlnaW5dID0gb3JpZ2luXG4gICAgdGhpc1trRGlzcGF0Y2hlc10gPSBbXVxuICAgIHRoaXNba0Nvbm5lY3RlZF0gPSAxXG4gICAgdGhpc1trT3JpZ2luYWxEaXNwYXRjaF0gPSB0aGlzLmRpc3BhdGNoXG4gICAgdGhpc1trT3JpZ2luYWxDbG9zZV0gPSB0aGlzLmNsb3NlLmJpbmQodGhpcylcblxuICAgIHRoaXMuZGlzcGF0Y2ggPSBidWlsZE1vY2tEaXNwYXRjaC5jYWxsKHRoaXMpXG4gICAgdGhpcy5jbG9zZSA9IHRoaXNba0Nsb3NlXVxuICB9XG5cbiAgZ2V0IFtTeW1ib2xzLmtDb25uZWN0ZWRdICgpIHtcbiAgICByZXR1cm4gdGhpc1trQ29ubmVjdGVkXVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdXAgdGhlIGJhc2UgaW50ZXJjZXB0b3IgZm9yIG1vY2tpbmcgcmVwbGllcyBmcm9tIHVuZGljaS5cbiAgICovXG4gIGludGVyY2VwdCAob3B0cykge1xuICAgIHJldHVybiBuZXcgTW9ja0ludGVyY2VwdG9yKG9wdHMsIHRoaXNba0Rpc3BhdGNoZXNdKVxuICB9XG5cbiAgYXN5bmMgW2tDbG9zZV0gKCkge1xuICAgIGF3YWl0IHByb21pc2lmeSh0aGlzW2tPcmlnaW5hbENsb3NlXSkoKVxuICAgIHRoaXNba0Nvbm5lY3RlZF0gPSAwXG4gICAgdGhpc1trTW9ja0FnZW50XVtTeW1ib2xzLmtDbGllbnRzXS5kZWxldGUodGhpc1trT3JpZ2luXSlcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IE1vY2tQb29sXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBzaW5ndWxhcnMgPSB7XG4gIHByb25vdW46ICdpdCcsXG4gIGlzOiAnaXMnLFxuICB3YXM6ICd3YXMnLFxuICB0aGlzOiAndGhpcydcbn1cblxuY29uc3QgcGx1cmFscyA9IHtcbiAgcHJvbm91bjogJ3RoZXknLFxuICBpczogJ2FyZScsXG4gIHdhczogJ3dlcmUnLFxuICB0aGlzOiAndGhlc2UnXG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xhc3MgUGx1cmFsaXplciB7XG4gIGNvbnN0cnVjdG9yIChzaW5ndWxhciwgcGx1cmFsKSB7XG4gICAgdGhpcy5zaW5ndWxhciA9IHNpbmd1bGFyXG4gICAgdGhpcy5wbHVyYWwgPSBwbHVyYWxcbiAgfVxuXG4gIHBsdXJhbGl6ZSAoY291bnQpIHtcbiAgICBjb25zdCBvbmUgPSBjb3VudCA9PT0gMVxuICAgIGNvbnN0IGtleXMgPSBvbmUgPyBzaW5ndWxhcnMgOiBwbHVyYWxzXG4gICAgY29uc3Qgbm91biA9IG9uZSA/IHRoaXMuc2luZ3VsYXIgOiB0aGlzLnBsdXJhbFxuICAgIHJldHVybiB7IC4uLmtleXMsIGNvdW50LCBub3VuIH1cbiAgfVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBUcmFuc2Zvcm0gfSA9IHJlcXVpcmUoJ3N0cmVhbScpXG5jb25zdCB7IENvbnNvbGUgfSA9IHJlcXVpcmUoJ2NvbnNvbGUnKVxuXG4vKipcbiAqIEdldHMgdGhlIG91dHB1dCBvZiBgY29uc29sZS50YWJsZSjigKYpYCBhcyBhIHN0cmluZy5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBQZW5kaW5nSW50ZXJjZXB0b3JzRm9ybWF0dGVyIHtcbiAgY29uc3RydWN0b3IgKHsgZGlzYWJsZUNvbG9ycyB9ID0ge30pIHtcbiAgICB0aGlzLnRyYW5zZm9ybSA9IG5ldyBUcmFuc2Zvcm0oe1xuICAgICAgdHJhbnNmb3JtIChjaHVuaywgX2VuYywgY2IpIHtcbiAgICAgICAgY2IobnVsbCwgY2h1bmspXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXMubG9nZ2VyID0gbmV3IENvbnNvbGUoe1xuICAgICAgc3Rkb3V0OiB0aGlzLnRyYW5zZm9ybSxcbiAgICAgIGluc3BlY3RPcHRpb25zOiB7XG4gICAgICAgIGNvbG9yczogIWRpc2FibGVDb2xvcnMgJiYgIXByb2Nlc3MuZW52LkNJXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGZvcm1hdCAocGVuZGluZ0ludGVyY2VwdG9ycykge1xuICAgIGNvbnN0IHdpdGhQcmV0dHlIZWFkZXJzID0gcGVuZGluZ0ludGVyY2VwdG9ycy5tYXAoXG4gICAgICAoeyBtZXRob2QsIHBhdGgsIGRhdGE6IHsgc3RhdHVzQ29kZSB9LCBwZXJzaXN0LCB0aW1lcywgdGltZXNJbnZva2VkLCBvcmlnaW4gfSkgPT4gKHtcbiAgICAgICAgTWV0aG9kOiBtZXRob2QsXG4gICAgICAgIE9yaWdpbjogb3JpZ2luLFxuICAgICAgICBQYXRoOiBwYXRoLFxuICAgICAgICAnU3RhdHVzIGNvZGUnOiBzdGF0dXNDb2RlLFxuICAgICAgICBQZXJzaXN0ZW50OiBwZXJzaXN0ID8gJ+KchScgOiAn4p2MJyxcbiAgICAgICAgSW52b2NhdGlvbnM6IHRpbWVzSW52b2tlZCxcbiAgICAgICAgUmVtYWluaW5nOiBwZXJzaXN0ID8gSW5maW5pdHkgOiB0aW1lcyAtIHRpbWVzSW52b2tlZFxuICAgICAgfSkpXG5cbiAgICB0aGlzLmxvZ2dlci50YWJsZSh3aXRoUHJldHR5SGVhZGVycylcbiAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm0ucmVhZCgpLnRvU3RyaW5nKClcbiAgfVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBrQ2xpZW50cyB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IEFnZW50ID0gcmVxdWlyZSgnLi4vYWdlbnQnKVxuY29uc3Qge1xuICBrQWdlbnQsXG4gIGtNb2NrQWdlbnRTZXQsXG4gIGtNb2NrQWdlbnRHZXQsXG4gIGtEaXNwYXRjaGVzLFxuICBrSXNNb2NrQWN0aXZlLFxuICBrTmV0Q29ubmVjdCxcbiAga0dldE5ldENvbm5lY3QsXG4gIGtPcHRpb25zLFxuICBrRmFjdG9yeVxufSA9IHJlcXVpcmUoJy4vbW9jay1zeW1ib2xzJylcbmNvbnN0IE1vY2tDbGllbnQgPSByZXF1aXJlKCcuL21vY2stY2xpZW50JylcbmNvbnN0IE1vY2tQb29sID0gcmVxdWlyZSgnLi9tb2NrLXBvb2wnKVxuY29uc3QgeyBtYXRjaFZhbHVlLCBidWlsZE1vY2tPcHRpb25zIH0gPSByZXF1aXJlKCcuL21vY2stdXRpbHMnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciwgVW5kaWNpRXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IERpc3BhdGNoZXIgPSByZXF1aXJlKCcuLi9kaXNwYXRjaGVyJylcbmNvbnN0IFBsdXJhbGl6ZXIgPSByZXF1aXJlKCcuL3BsdXJhbGl6ZXInKVxuY29uc3QgUGVuZGluZ0ludGVyY2VwdG9yc0Zvcm1hdHRlciA9IHJlcXVpcmUoJy4vcGVuZGluZy1pbnRlcmNlcHRvcnMtZm9ybWF0dGVyJylcblxuY2xhc3MgRmFrZVdlYWtSZWYge1xuICBjb25zdHJ1Y3RvciAodmFsdWUpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWVcbiAgfVxuXG4gIGRlcmVmICgpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZVxuICB9XG59XG5cbmNsYXNzIE1vY2tBZ2VudCBleHRlbmRzIERpc3BhdGNoZXIge1xuICBjb25zdHJ1Y3RvciAob3B0cykge1xuICAgIHN1cGVyKG9wdHMpXG5cbiAgICB0aGlzW2tOZXRDb25uZWN0XSA9IHRydWVcbiAgICB0aGlzW2tJc01vY2tBY3RpdmVdID0gdHJ1ZVxuXG4gICAgLy8gSW5zdGFudGlhdGUgQWdlbnQgYW5kIGVuY2Fwc3VsYXRlXG4gICAgaWYgKChvcHRzICYmIG9wdHMuYWdlbnQgJiYgdHlwZW9mIG9wdHMuYWdlbnQuZGlzcGF0Y2ggIT09ICdmdW5jdGlvbicpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0FyZ3VtZW50IG9wdHMuYWdlbnQgbXVzdCBpbXBsZW1lbnQgQWdlbnQnKVxuICAgIH1cbiAgICBjb25zdCBhZ2VudCA9IG9wdHMgJiYgb3B0cy5hZ2VudCA/IG9wdHMuYWdlbnQgOiBuZXcgQWdlbnQob3B0cylcbiAgICB0aGlzW2tBZ2VudF0gPSBhZ2VudFxuXG4gICAgdGhpc1trQ2xpZW50c10gPSBhZ2VudFtrQ2xpZW50c11cbiAgICB0aGlzW2tPcHRpb25zXSA9IGJ1aWxkTW9ja09wdGlvbnMob3B0cylcbiAgfVxuXG4gIGdldCAob3JpZ2luKSB7XG4gICAgbGV0IGRpc3BhdGNoZXIgPSB0aGlzW2tNb2NrQWdlbnRHZXRdKG9yaWdpbilcblxuICAgIGlmICghZGlzcGF0Y2hlcikge1xuICAgICAgZGlzcGF0Y2hlciA9IHRoaXNba0ZhY3RvcnldKG9yaWdpbilcbiAgICAgIHRoaXNba01vY2tBZ2VudFNldF0ob3JpZ2luLCBkaXNwYXRjaGVyKVxuICAgIH1cbiAgICByZXR1cm4gZGlzcGF0Y2hlclxuICB9XG5cbiAgZGlzcGF0Y2ggKG9wdHMsIGhhbmRsZXIpIHtcbiAgICAvLyBDYWxsIE1vY2tBZ2VudC5nZXQgdG8gcGVyZm9ybSBhZGRpdGlvbmFsIHNldHVwIGJlZm9yZSBkaXNwYXRjaGluZyBhcyBub3JtYWxcbiAgICB0aGlzLmdldChvcHRzLm9yaWdpbilcbiAgICByZXR1cm4gdGhpc1trQWdlbnRdLmRpc3BhdGNoKG9wdHMsIGhhbmRsZXIpXG4gIH1cblxuICBhc3luYyBjbG9zZSAoKSB7XG4gICAgYXdhaXQgdGhpc1trQWdlbnRdLmNsb3NlKClcbiAgICB0aGlzW2tDbGllbnRzXS5jbGVhcigpXG4gIH1cblxuICBkZWFjdGl2YXRlICgpIHtcbiAgICB0aGlzW2tJc01vY2tBY3RpdmVdID0gZmFsc2VcbiAgfVxuXG4gIGFjdGl2YXRlICgpIHtcbiAgICB0aGlzW2tJc01vY2tBY3RpdmVdID0gdHJ1ZVxuICB9XG5cbiAgZW5hYmxlTmV0Q29ubmVjdCAobWF0Y2hlcikge1xuICAgIGlmICh0eXBlb2YgbWF0Y2hlciA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG1hdGNoZXIgPT09ICdmdW5jdGlvbicgfHwgbWF0Y2hlciBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpc1trTmV0Q29ubmVjdF0pKSB7XG4gICAgICAgIHRoaXNba05ldENvbm5lY3RdLnB1c2gobWF0Y2hlcilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXNba05ldENvbm5lY3RdID0gW21hdGNoZXJdXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbWF0Y2hlciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRoaXNba05ldENvbm5lY3RdID0gdHJ1ZVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ1Vuc3VwcG9ydGVkIG1hdGNoZXIuIE11c3QgYmUgb25lIG9mIFN0cmluZ3xGdW5jdGlvbnxSZWdFeHAuJylcbiAgICB9XG4gIH1cblxuICBkaXNhYmxlTmV0Q29ubmVjdCAoKSB7XG4gICAgdGhpc1trTmV0Q29ubmVjdF0gPSBmYWxzZVxuICB9XG5cbiAgLy8gVGhpcyBpcyByZXF1aXJlZCB0byBieXBhc3MgaXNzdWVzIGNhdXNlZCBieSB1c2luZyBnbG9iYWwgc3ltYm9scyAtIHNlZTpcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzE0NDdcbiAgZ2V0IGlzTW9ja0FjdGl2ZSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0lzTW9ja0FjdGl2ZV1cbiAgfVxuXG4gIFtrTW9ja0FnZW50U2V0XSAob3JpZ2luLCBkaXNwYXRjaGVyKSB7XG4gICAgdGhpc1trQ2xpZW50c10uc2V0KG9yaWdpbiwgbmV3IEZha2VXZWFrUmVmKGRpc3BhdGNoZXIpKVxuICB9XG5cbiAgW2tGYWN0b3J5XSAob3JpZ2luKSB7XG4gICAgY29uc3QgbW9ja09wdGlvbnMgPSBPYmplY3QuYXNzaWduKHsgYWdlbnQ6IHRoaXMgfSwgdGhpc1trT3B0aW9uc10pXG4gICAgcmV0dXJuIHRoaXNba09wdGlvbnNdICYmIHRoaXNba09wdGlvbnNdLmNvbm5lY3Rpb25zID09PSAxXG4gICAgICA/IG5ldyBNb2NrQ2xpZW50KG9yaWdpbiwgbW9ja09wdGlvbnMpXG4gICAgICA6IG5ldyBNb2NrUG9vbChvcmlnaW4sIG1vY2tPcHRpb25zKVxuICB9XG5cbiAgW2tNb2NrQWdlbnRHZXRdIChvcmlnaW4pIHtcbiAgICAvLyBGaXJzdCBjaGVjayBpZiB3ZSBjYW4gaW1tZWRpYXRlbHkgZmluZCBpdFxuICAgIGNvbnN0IHJlZiA9IHRoaXNba0NsaWVudHNdLmdldChvcmlnaW4pXG4gICAgaWYgKHJlZikge1xuICAgICAgcmV0dXJuIHJlZi5kZXJlZigpXG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIG9yaWdpbiBpcyBub3QgYSBzdHJpbmcgY3JlYXRlIGEgZHVtbXkgcGFyZW50IHBvb2wgYW5kIHJldHVybiB0byB1c2VyXG4gICAgaWYgKHR5cGVvZiBvcmlnaW4gIT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBkaXNwYXRjaGVyID0gdGhpc1trRmFjdG9yeV0oJ2h0dHA6Ly9sb2NhbGhvc3Q6OTk5OScpXG4gICAgICB0aGlzW2tNb2NrQWdlbnRTZXRdKG9yaWdpbiwgZGlzcGF0Y2hlcilcbiAgICAgIHJldHVybiBkaXNwYXRjaGVyXG4gICAgfVxuXG4gICAgLy8gSWYgd2UgbWF0Y2gsIGNyZWF0ZSBhIHBvb2wgYW5kIGFzc2lnbiB0aGUgc2FtZSBkaXNwYXRjaGVzXG4gICAgZm9yIChjb25zdCBba2V5TWF0Y2hlciwgbm9uRXhwbGljaXRSZWZdIG9mIEFycmF5LmZyb20odGhpc1trQ2xpZW50c10pKSB7XG4gICAgICBjb25zdCBub25FeHBsaWNpdERpc3BhdGNoZXIgPSBub25FeHBsaWNpdFJlZi5kZXJlZigpXG4gICAgICBpZiAobm9uRXhwbGljaXREaXNwYXRjaGVyICYmIHR5cGVvZiBrZXlNYXRjaGVyICE9PSAnc3RyaW5nJyAmJiBtYXRjaFZhbHVlKGtleU1hdGNoZXIsIG9yaWdpbikpIHtcbiAgICAgICAgY29uc3QgZGlzcGF0Y2hlciA9IHRoaXNba0ZhY3RvcnldKG9yaWdpbilcbiAgICAgICAgdGhpc1trTW9ja0FnZW50U2V0XShvcmlnaW4sIGRpc3BhdGNoZXIpXG4gICAgICAgIGRpc3BhdGNoZXJba0Rpc3BhdGNoZXNdID0gbm9uRXhwbGljaXREaXNwYXRjaGVyW2tEaXNwYXRjaGVzXVxuICAgICAgICByZXR1cm4gZGlzcGF0Y2hlclxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIFtrR2V0TmV0Q29ubmVjdF0gKCkge1xuICAgIHJldHVybiB0aGlzW2tOZXRDb25uZWN0XVxuICB9XG5cbiAgcGVuZGluZ0ludGVyY2VwdG9ycyAoKSB7XG4gICAgY29uc3QgbW9ja0FnZW50Q2xpZW50cyA9IHRoaXNba0NsaWVudHNdXG5cbiAgICByZXR1cm4gQXJyYXkuZnJvbShtb2NrQWdlbnRDbGllbnRzLmVudHJpZXMoKSlcbiAgICAgIC5mbGF0TWFwKChbb3JpZ2luLCBzY29wZV0pID0+IHNjb3BlLmRlcmVmKClba0Rpc3BhdGNoZXNdLm1hcChkaXNwYXRjaCA9PiAoeyAuLi5kaXNwYXRjaCwgb3JpZ2luIH0pKSlcbiAgICAgIC5maWx0ZXIoKHsgcGVuZGluZyB9KSA9PiBwZW5kaW5nKVxuICB9XG5cbiAgYXNzZXJ0Tm9QZW5kaW5nSW50ZXJjZXB0b3JzICh7IHBlbmRpbmdJbnRlcmNlcHRvcnNGb3JtYXR0ZXIgPSBuZXcgUGVuZGluZ0ludGVyY2VwdG9yc0Zvcm1hdHRlcigpIH0gPSB7fSkge1xuICAgIGNvbnN0IHBlbmRpbmcgPSB0aGlzLnBlbmRpbmdJbnRlcmNlcHRvcnMoKVxuXG4gICAgaWYgKHBlbmRpbmcubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBwbHVyYWxpemVyID0gbmV3IFBsdXJhbGl6ZXIoJ2ludGVyY2VwdG9yJywgJ2ludGVyY2VwdG9ycycpLnBsdXJhbGl6ZShwZW5kaW5nLmxlbmd0aClcblxuICAgIHRocm93IG5ldyBVbmRpY2lFcnJvcihgXG4ke3BsdXJhbGl6ZXIuY291bnR9ICR7cGx1cmFsaXplci5ub3VufSAke3BsdXJhbGl6ZXIuaXN9IHBlbmRpbmc6XG5cbiR7cGVuZGluZ0ludGVyY2VwdG9yc0Zvcm1hdHRlci5mb3JtYXQocGVuZGluZyl9XG5gLnRyaW0oKSlcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IE1vY2tBZ2VudFxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBrUHJveHksIGtDbG9zZSwga0Rlc3Ryb3ksIGtJbnRlcmNlcHRvcnMgfSA9IHJlcXVpcmUoJy4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsgVVJMIH0gPSByZXF1aXJlKCd1cmwnKVxuY29uc3QgQWdlbnQgPSByZXF1aXJlKCcuL2FnZW50JylcbmNvbnN0IFBvb2wgPSByZXF1aXJlKCcuL3Bvb2wnKVxuY29uc3QgRGlzcGF0Y2hlckJhc2UgPSByZXF1aXJlKCcuL2Rpc3BhdGNoZXItYmFzZScpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yLCBSZXF1ZXN0QWJvcnRlZEVycm9yIH0gPSByZXF1aXJlKCcuL2NvcmUvZXJyb3JzJylcbmNvbnN0IGJ1aWxkQ29ubmVjdG9yID0gcmVxdWlyZSgnLi9jb3JlL2Nvbm5lY3QnKVxuXG5jb25zdCBrQWdlbnQgPSBTeW1ib2woJ3Byb3h5IGFnZW50JylcbmNvbnN0IGtDbGllbnQgPSBTeW1ib2woJ3Byb3h5IGNsaWVudCcpXG5jb25zdCBrUHJveHlIZWFkZXJzID0gU3ltYm9sKCdwcm94eSBoZWFkZXJzJylcbmNvbnN0IGtSZXF1ZXN0VGxzID0gU3ltYm9sKCdyZXF1ZXN0IHRscyBzZXR0aW5ncycpXG5jb25zdCBrUHJveHlUbHMgPSBTeW1ib2woJ3Byb3h5IHRscyBzZXR0aW5ncycpXG5jb25zdCBrQ29ubmVjdEVuZHBvaW50ID0gU3ltYm9sKCdjb25uZWN0IGVuZHBvaW50IGZ1bmN0aW9uJylcblxuZnVuY3Rpb24gZGVmYXVsdFByb3RvY29sUG9ydCAocHJvdG9jb2wpIHtcbiAgcmV0dXJuIHByb3RvY29sID09PSAnaHR0cHM6JyA/IDQ0MyA6IDgwXG59XG5cbmZ1bmN0aW9uIGJ1aWxkUHJveHlPcHRpb25zIChvcHRzKSB7XG4gIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ3N0cmluZycpIHtcbiAgICBvcHRzID0geyB1cmk6IG9wdHMgfVxuICB9XG5cbiAgaWYgKCFvcHRzIHx8ICFvcHRzLnVyaSkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignUHJveHkgb3B0cy51cmkgaXMgbWFuZGF0b3J5JylcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdXJpOiBvcHRzLnVyaSxcbiAgICBwcm90b2NvbDogb3B0cy5wcm90b2NvbCB8fCAnaHR0cHMnXG4gIH1cbn1cblxuZnVuY3Rpb24gZGVmYXVsdEZhY3RvcnkgKG9yaWdpbiwgb3B0cykge1xuICByZXR1cm4gbmV3IFBvb2wob3JpZ2luLCBvcHRzKVxufVxuXG5jbGFzcyBQcm94eUFnZW50IGV4dGVuZHMgRGlzcGF0Y2hlckJhc2Uge1xuICBjb25zdHJ1Y3RvciAob3B0cykge1xuICAgIHN1cGVyKG9wdHMpXG4gICAgdGhpc1trUHJveHldID0gYnVpbGRQcm94eU9wdGlvbnMob3B0cylcbiAgICB0aGlzW2tBZ2VudF0gPSBuZXcgQWdlbnQob3B0cylcbiAgICB0aGlzW2tJbnRlcmNlcHRvcnNdID0gb3B0cy5pbnRlcmNlcHRvcnMgJiYgb3B0cy5pbnRlcmNlcHRvcnMuUHJveHlBZ2VudCAmJiBBcnJheS5pc0FycmF5KG9wdHMuaW50ZXJjZXB0b3JzLlByb3h5QWdlbnQpXG4gICAgICA/IG9wdHMuaW50ZXJjZXB0b3JzLlByb3h5QWdlbnRcbiAgICAgIDogW11cblxuICAgIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG9wdHMgPSB7IHVyaTogb3B0cyB9XG4gICAgfVxuXG4gICAgaWYgKCFvcHRzIHx8ICFvcHRzLnVyaSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdQcm94eSBvcHRzLnVyaSBpcyBtYW5kYXRvcnknKVxuICAgIH1cblxuICAgIGNvbnN0IHsgY2xpZW50RmFjdG9yeSA9IGRlZmF1bHRGYWN0b3J5IH0gPSBvcHRzXG5cbiAgICBpZiAodHlwZW9mIGNsaWVudEZhY3RvcnkgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignUHJveHkgb3B0cy5jbGllbnRGYWN0b3J5IG11c3QgYmUgYSBmdW5jdGlvbi4nKVxuICAgIH1cblxuICAgIHRoaXNba1JlcXVlc3RUbHNdID0gb3B0cy5yZXF1ZXN0VGxzXG4gICAgdGhpc1trUHJveHlUbHNdID0gb3B0cy5wcm94eVRsc1xuICAgIHRoaXNba1Byb3h5SGVhZGVyc10gPSBvcHRzLmhlYWRlcnMgfHwge31cblxuICAgIGNvbnN0IHJlc29sdmVkVXJsID0gbmV3IFVSTChvcHRzLnVyaSlcbiAgICBjb25zdCB7IG9yaWdpbiwgcG9ydCwgaG9zdCwgdXNlcm5hbWUsIHBhc3N3b3JkIH0gPSByZXNvbHZlZFVybFxuXG4gICAgaWYgKG9wdHMuYXV0aCAmJiBvcHRzLnRva2VuKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ29wdHMuYXV0aCBjYW5ub3QgYmUgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIG9wdHMudG9rZW4nKVxuICAgIH0gZWxzZSBpZiAob3B0cy5hdXRoKSB7XG4gICAgICAvKiBAZGVwcmVjYXRlZCBpbiBmYXZvdXIgb2Ygb3B0cy50b2tlbiAqL1xuICAgICAgdGhpc1trUHJveHlIZWFkZXJzXVsncHJveHktYXV0aG9yaXphdGlvbiddID0gYEJhc2ljICR7b3B0cy5hdXRofWBcbiAgICB9IGVsc2UgaWYgKG9wdHMudG9rZW4pIHtcbiAgICAgIHRoaXNba1Byb3h5SGVhZGVyc11bJ3Byb3h5LWF1dGhvcml6YXRpb24nXSA9IG9wdHMudG9rZW5cbiAgICB9IGVsc2UgaWYgKHVzZXJuYW1lICYmIHBhc3N3b3JkKSB7XG4gICAgICB0aGlzW2tQcm94eUhlYWRlcnNdWydwcm94eS1hdXRob3JpemF0aW9uJ10gPSBgQmFzaWMgJHtCdWZmZXIuZnJvbShgJHtkZWNvZGVVUklDb21wb25lbnQodXNlcm5hbWUpfToke2RlY29kZVVSSUNvbXBvbmVudChwYXNzd29yZCl9YCkudG9TdHJpbmcoJ2Jhc2U2NCcpfWBcbiAgICB9XG5cbiAgICBjb25zdCBjb25uZWN0ID0gYnVpbGRDb25uZWN0b3IoeyAuLi5vcHRzLnByb3h5VGxzIH0pXG4gICAgdGhpc1trQ29ubmVjdEVuZHBvaW50XSA9IGJ1aWxkQ29ubmVjdG9yKHsgLi4ub3B0cy5yZXF1ZXN0VGxzIH0pXG4gICAgdGhpc1trQ2xpZW50XSA9IGNsaWVudEZhY3RvcnkocmVzb2x2ZWRVcmwsIHsgY29ubmVjdCB9KVxuICAgIHRoaXNba0FnZW50XSA9IG5ldyBBZ2VudCh7XG4gICAgICAuLi5vcHRzLFxuICAgICAgY29ubmVjdDogYXN5bmMgKG9wdHMsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGxldCByZXF1ZXN0ZWRIb3N0ID0gb3B0cy5ob3N0XG4gICAgICAgIGlmICghb3B0cy5wb3J0KSB7XG4gICAgICAgICAgcmVxdWVzdGVkSG9zdCArPSBgOiR7ZGVmYXVsdFByb3RvY29sUG9ydChvcHRzLnByb3RvY29sKX1gXG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB7IHNvY2tldCwgc3RhdHVzQ29kZSB9ID0gYXdhaXQgdGhpc1trQ2xpZW50XS5jb25uZWN0KHtcbiAgICAgICAgICAgIG9yaWdpbixcbiAgICAgICAgICAgIHBvcnQsXG4gICAgICAgICAgICBwYXRoOiByZXF1ZXN0ZWRIb3N0LFxuICAgICAgICAgICAgc2lnbmFsOiBvcHRzLnNpZ25hbCxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgLi4udGhpc1trUHJveHlIZWFkZXJzXSxcbiAgICAgICAgICAgICAgaG9zdFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICAgaWYgKHN0YXR1c0NvZGUgIT09IDIwMCkge1xuICAgICAgICAgICAgc29ja2V0Lm9uKCdlcnJvcicsICgpID0+IHt9KS5kZXN0cm95KClcbiAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKGBQcm94eSByZXNwb25zZSAoJHtzdGF0dXNDb2RlfSkgIT09IDIwMCB3aGVuIEhUVFAgVHVubmVsaW5nYCkpXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChvcHRzLnByb3RvY29sICE9PSAnaHR0cHM6Jykge1xuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgc29ja2V0KVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICAgIGxldCBzZXJ2ZXJuYW1lXG4gICAgICAgICAgaWYgKHRoaXNba1JlcXVlc3RUbHNdKSB7XG4gICAgICAgICAgICBzZXJ2ZXJuYW1lID0gdGhpc1trUmVxdWVzdFRsc10uc2VydmVybmFtZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXJ2ZXJuYW1lID0gb3B0cy5zZXJ2ZXJuYW1lXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXNba0Nvbm5lY3RFbmRwb2ludF0oeyAuLi5vcHRzLCBzZXJ2ZXJuYW1lLCBodHRwU29ja2V0OiBzb2NrZXQgfSwgY2FsbGJhY2spXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNhbGxiYWNrKGVycilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBkaXNwYXRjaCAob3B0cywgaGFuZGxlcikge1xuICAgIGNvbnN0IHsgaG9zdCB9ID0gbmV3IFVSTChvcHRzLm9yaWdpbilcbiAgICBjb25zdCBoZWFkZXJzID0gYnVpbGRIZWFkZXJzKG9wdHMuaGVhZGVycylcbiAgICB0aHJvd0lmUHJveHlBdXRoSXNTZW50KGhlYWRlcnMpXG4gICAgcmV0dXJuIHRoaXNba0FnZW50XS5kaXNwYXRjaChcbiAgICAgIHtcbiAgICAgICAgLi4ub3B0cyxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIC4uLmhlYWRlcnMsXG4gICAgICAgICAgaG9zdFxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgaGFuZGxlclxuICAgIClcbiAgfVxuXG4gIGFzeW5jIFtrQ2xvc2VdICgpIHtcbiAgICBhd2FpdCB0aGlzW2tBZ2VudF0uY2xvc2UoKVxuICAgIGF3YWl0IHRoaXNba0NsaWVudF0uY2xvc2UoKVxuICB9XG5cbiAgYXN5bmMgW2tEZXN0cm95XSAoKSB7XG4gICAgYXdhaXQgdGhpc1trQWdlbnRdLmRlc3Ryb3koKVxuICAgIGF3YWl0IHRoaXNba0NsaWVudF0uZGVzdHJveSgpXG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ1tdIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nPn0gaGVhZGVyc1xuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHN0cmluZz59XG4gKi9cbmZ1bmN0aW9uIGJ1aWxkSGVhZGVycyAoaGVhZGVycykge1xuICAvLyBXaGVuIHVzaW5nIHVuZGljaS5mZXRjaCwgdGhlIGhlYWRlcnMgbGlzdCBpcyBzdG9yZWRcbiAgLy8gYXMgYW4gYXJyYXkuXG4gIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSAqL1xuICAgIGNvbnN0IGhlYWRlcnNQYWlyID0ge31cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGVhZGVycy5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgaGVhZGVyc1BhaXJbaGVhZGVyc1tpXV0gPSBoZWFkZXJzW2kgKyAxXVxuICAgIH1cblxuICAgIHJldHVybiBoZWFkZXJzUGFpclxuICB9XG5cbiAgcmV0dXJuIGhlYWRlcnNcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIHN0cmluZz59IGhlYWRlcnNcbiAqXG4gKiBQcmV2aW91cyB2ZXJzaW9ucyBvZiBQcm94eUFnZW50IHN1Z2dlc3RzIHRoZSBQcm94eS1BdXRob3JpemF0aW9uIGluIHJlcXVlc3QgaGVhZGVyc1xuICogTmV2ZXJ0aGVsZXNzLCBpdCB3YXMgY2hhbmdlZCBhbmQgdG8gYXZvaWQgYSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5IGJ5IGVuZCB1c2Vyc1xuICogdGhpcyBjaGVjayB3YXMgY3JlYXRlZC5cbiAqIEl0IHNob3VsZCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24gZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnNcbiAqL1xuZnVuY3Rpb24gdGhyb3dJZlByb3h5QXV0aElzU2VudCAoaGVhZGVycykge1xuICBjb25zdCBleGlzdFByb3h5QXV0aCA9IGhlYWRlcnMgJiYgT2JqZWN0LmtleXMoaGVhZGVycylcbiAgICAuZmluZCgoa2V5KSA9PiBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3Byb3h5LWF1dGhvcml6YXRpb24nKVxuICBpZiAoZXhpc3RQcm94eUF1dGgpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ1Byb3h5LUF1dGhvcml6YXRpb24gc2hvdWxkIGJlIHNlbnQgaW4gUHJveHlBZ2VudCBjb25zdHJ1Y3RvcicpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBQcm94eUFnZW50XG4iLAogICAgImNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5cbmNvbnN0IHsga1JldHJ5SGFuZGxlckRlZmF1bHRSZXRyeSB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsgUmVxdWVzdFJldHJ5RXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHsgaXNEaXN0dXJiZWQsIHBhcnNlSGVhZGVycywgcGFyc2VSYW5nZUhlYWRlciB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcblxuZnVuY3Rpb24gY2FsY3VsYXRlUmV0cnlBZnRlckhlYWRlciAocmV0cnlBZnRlcikge1xuICBjb25zdCBjdXJyZW50ID0gRGF0ZS5ub3coKVxuICBjb25zdCBkaWZmID0gbmV3IERhdGUocmV0cnlBZnRlcikuZ2V0VGltZSgpIC0gY3VycmVudFxuXG4gIHJldHVybiBkaWZmXG59XG5cbmNsYXNzIFJldHJ5SGFuZGxlciB7XG4gIGNvbnN0cnVjdG9yIChvcHRzLCBoYW5kbGVycykge1xuICAgIGNvbnN0IHsgcmV0cnlPcHRpb25zLCAuLi5kaXNwYXRjaE9wdHMgfSA9IG9wdHNcbiAgICBjb25zdCB7XG4gICAgICAvLyBSZXRyeSBzY29wZWRcbiAgICAgIHJldHJ5OiByZXRyeUZuLFxuICAgICAgbWF4UmV0cmllcyxcbiAgICAgIG1heFRpbWVvdXQsXG4gICAgICBtaW5UaW1lb3V0LFxuICAgICAgdGltZW91dEZhY3RvcixcbiAgICAgIC8vIFJlc3BvbnNlIHNjb3BlZFxuICAgICAgbWV0aG9kcyxcbiAgICAgIGVycm9yQ29kZXMsXG4gICAgICByZXRyeUFmdGVyLFxuICAgICAgc3RhdHVzQ29kZXNcbiAgICB9ID0gcmV0cnlPcHRpb25zID8/IHt9XG5cbiAgICB0aGlzLmRpc3BhdGNoID0gaGFuZGxlcnMuZGlzcGF0Y2hcbiAgICB0aGlzLmhhbmRsZXIgPSBoYW5kbGVycy5oYW5kbGVyXG4gICAgdGhpcy5vcHRzID0gZGlzcGF0Y2hPcHRzXG4gICAgdGhpcy5hYm9ydCA9IG51bGxcbiAgICB0aGlzLmFib3J0ZWQgPSBmYWxzZVxuICAgIHRoaXMucmV0cnlPcHRzID0ge1xuICAgICAgcmV0cnk6IHJldHJ5Rm4gPz8gUmV0cnlIYW5kbGVyW2tSZXRyeUhhbmRsZXJEZWZhdWx0UmV0cnldLFxuICAgICAgcmV0cnlBZnRlcjogcmV0cnlBZnRlciA/PyB0cnVlLFxuICAgICAgbWF4VGltZW91dDogbWF4VGltZW91dCA/PyAzMCAqIDEwMDAsIC8vIDMwcyxcbiAgICAgIHRpbWVvdXQ6IG1pblRpbWVvdXQgPz8gNTAwLCAvLyAuNXNcbiAgICAgIHRpbWVvdXRGYWN0b3I6IHRpbWVvdXRGYWN0b3IgPz8gMixcbiAgICAgIG1heFJldHJpZXM6IG1heFJldHJpZXMgPz8gNSxcbiAgICAgIC8vIFdoYXQgZXJyb3JzIHdlIHNob3VsZCByZXRyeVxuICAgICAgbWV0aG9kczogbWV0aG9kcyA/PyBbJ0dFVCcsICdIRUFEJywgJ09QVElPTlMnLCAnUFVUJywgJ0RFTEVURScsICdUUkFDRSddLFxuICAgICAgLy8gSW5kaWNhdGVzIHdoaWNoIGVycm9ycyB0byByZXRyeVxuICAgICAgc3RhdHVzQ29kZXM6IHN0YXR1c0NvZGVzID8/IFs1MDAsIDUwMiwgNTAzLCA1MDQsIDQyOV0sXG4gICAgICAvLyBMaXN0IG9mIGVycm9ycyB0byByZXRyeVxuICAgICAgZXJyb3JDb2RlczogZXJyb3JDb2RlcyA/PyBbXG4gICAgICAgICdFQ09OTlJFU0VUJyxcbiAgICAgICAgJ0VDT05OUkVGVVNFRCcsXG4gICAgICAgICdFTk9URk9VTkQnLFxuICAgICAgICAnRU5FVERPV04nLFxuICAgICAgICAnRU5FVFVOUkVBQ0gnLFxuICAgICAgICAnRUhPU1RET1dOJyxcbiAgICAgICAgJ0VIT1NUVU5SRUFDSCcsXG4gICAgICAgICdFUElQRSdcbiAgICAgIF1cbiAgICB9XG5cbiAgICB0aGlzLnJldHJ5Q291bnQgPSAwXG4gICAgdGhpcy5zdGFydCA9IDBcbiAgICB0aGlzLmVuZCA9IG51bGxcbiAgICB0aGlzLmV0YWcgPSBudWxsXG4gICAgdGhpcy5yZXN1bWUgPSBudWxsXG5cbiAgICAvLyBIYW5kbGUgcG9zc2libGUgb25Db25uZWN0IGR1cGxpY2F0aW9uXG4gICAgdGhpcy5oYW5kbGVyLm9uQ29ubmVjdChyZWFzb24gPT4ge1xuICAgICAgdGhpcy5hYm9ydGVkID0gdHJ1ZVxuICAgICAgaWYgKHRoaXMuYWJvcnQpIHtcbiAgICAgICAgdGhpcy5hYm9ydChyZWFzb24pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlYXNvbiA9IHJlYXNvblxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBvblJlcXVlc3RTZW50ICgpIHtcbiAgICBpZiAodGhpcy5oYW5kbGVyLm9uUmVxdWVzdFNlbnQpIHtcbiAgICAgIHRoaXMuaGFuZGxlci5vblJlcXVlc3RTZW50KClcbiAgICB9XG4gIH1cblxuICBvblVwZ3JhZGUgKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHNvY2tldCkge1xuICAgIGlmICh0aGlzLmhhbmRsZXIub25VcGdyYWRlKSB7XG4gICAgICB0aGlzLmhhbmRsZXIub25VcGdyYWRlKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHNvY2tldClcbiAgICB9XG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0KSB7XG4gICAgaWYgKHRoaXMuYWJvcnRlZCkge1xuICAgICAgYWJvcnQodGhpcy5yZWFzb24pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIH1cbiAgfVxuXG4gIG9uQm9keVNlbnQgKGNodW5rKSB7XG4gICAgaWYgKHRoaXMuaGFuZGxlci5vbkJvZHlTZW50KSByZXR1cm4gdGhpcy5oYW5kbGVyLm9uQm9keVNlbnQoY2h1bmspXG4gIH1cblxuICBzdGF0aWMgW2tSZXRyeUhhbmRsZXJEZWZhdWx0UmV0cnldIChlcnIsIHsgc3RhdGUsIG9wdHMgfSwgY2IpIHtcbiAgICBjb25zdCB7IHN0YXR1c0NvZGUsIGNvZGUsIGhlYWRlcnMgfSA9IGVyclxuICAgIGNvbnN0IHsgbWV0aG9kLCByZXRyeU9wdGlvbnMgfSA9IG9wdHNcbiAgICBjb25zdCB7XG4gICAgICBtYXhSZXRyaWVzLFxuICAgICAgdGltZW91dCxcbiAgICAgIG1heFRpbWVvdXQsXG4gICAgICB0aW1lb3V0RmFjdG9yLFxuICAgICAgc3RhdHVzQ29kZXMsXG4gICAgICBlcnJvckNvZGVzLFxuICAgICAgbWV0aG9kc1xuICAgIH0gPSByZXRyeU9wdGlvbnNcbiAgICBsZXQgeyBjb3VudGVyLCBjdXJyZW50VGltZW91dCB9ID0gc3RhdGVcblxuICAgIGN1cnJlbnRUaW1lb3V0ID1cbiAgICAgIGN1cnJlbnRUaW1lb3V0ICE9IG51bGwgJiYgY3VycmVudFRpbWVvdXQgPiAwID8gY3VycmVudFRpbWVvdXQgOiB0aW1lb3V0XG5cbiAgICAvLyBBbnkgY29kZSB0aGF0IGlzIG5vdCBhIFVuZGljaSdzIG9yaWdpbmF0ZWQgYW5kIGFsbG93ZWQgdG8gcmV0cnlcbiAgICBpZiAoXG4gICAgICBjb2RlICYmXG4gICAgICBjb2RlICE9PSAnVU5EX0VSUl9SRVFfUkVUUlknICYmXG4gICAgICBjb2RlICE9PSAnVU5EX0VSUl9TT0NLRVQnICYmXG4gICAgICAhZXJyb3JDb2Rlcy5pbmNsdWRlcyhjb2RlKVxuICAgICkge1xuICAgICAgY2IoZXJyKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gSWYgYSBzZXQgb2YgbWV0aG9kIGFyZSBwcm92aWRlZCBhbmQgdGhlIGN1cnJlbnQgbWV0aG9kIGlzIG5vdCBpbiB0aGUgbGlzdFxuICAgIGlmIChBcnJheS5pc0FycmF5KG1ldGhvZHMpICYmICFtZXRob2RzLmluY2x1ZGVzKG1ldGhvZCkpIHtcbiAgICAgIGNiKGVycilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIElmIGEgc2V0IG9mIHN0YXR1cyBjb2RlIGFyZSBwcm92aWRlZCBhbmQgdGhlIGN1cnJlbnQgc3RhdHVzIGNvZGUgaXMgbm90IGluIHRoZSBsaXN0XG4gICAgaWYgKFxuICAgICAgc3RhdHVzQ29kZSAhPSBudWxsICYmXG4gICAgICBBcnJheS5pc0FycmF5KHN0YXR1c0NvZGVzKSAmJlxuICAgICAgIXN0YXR1c0NvZGVzLmluY2x1ZGVzKHN0YXR1c0NvZGUpXG4gICAgKSB7XG4gICAgICBjYihlcnIpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBJZiB3ZSByZWFjaGVkIHRoZSBtYXggbnVtYmVyIG9mIHJldHJpZXNcbiAgICBpZiAoY291bnRlciA+IG1heFJldHJpZXMpIHtcbiAgICAgIGNiKGVycilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGxldCByZXRyeUFmdGVySGVhZGVyID0gaGVhZGVycyAhPSBudWxsICYmIGhlYWRlcnNbJ3JldHJ5LWFmdGVyJ11cbiAgICBpZiAocmV0cnlBZnRlckhlYWRlcikge1xuICAgICAgcmV0cnlBZnRlckhlYWRlciA9IE51bWJlcihyZXRyeUFmdGVySGVhZGVyKVxuICAgICAgcmV0cnlBZnRlckhlYWRlciA9IGlzTmFOKHJldHJ5QWZ0ZXJIZWFkZXIpXG4gICAgICAgID8gY2FsY3VsYXRlUmV0cnlBZnRlckhlYWRlcihyZXRyeUFmdGVySGVhZGVyKVxuICAgICAgICA6IHJldHJ5QWZ0ZXJIZWFkZXIgKiAxZTMgLy8gUmV0cnktQWZ0ZXIgaXMgaW4gc2Vjb25kc1xuICAgIH1cblxuICAgIGNvbnN0IHJldHJ5VGltZW91dCA9XG4gICAgICByZXRyeUFmdGVySGVhZGVyID4gMFxuICAgICAgICA/IE1hdGgubWluKHJldHJ5QWZ0ZXJIZWFkZXIsIG1heFRpbWVvdXQpXG4gICAgICAgIDogTWF0aC5taW4oY3VycmVudFRpbWVvdXQgKiB0aW1lb3V0RmFjdG9yICoqIGNvdW50ZXIsIG1heFRpbWVvdXQpXG5cbiAgICBzdGF0ZS5jdXJyZW50VGltZW91dCA9IHJldHJ5VGltZW91dFxuXG4gICAgc2V0VGltZW91dCgoKSA9PiBjYihudWxsKSwgcmV0cnlUaW1lb3V0KVxuICB9XG5cbiAgb25IZWFkZXJzIChzdGF0dXNDb2RlLCByYXdIZWFkZXJzLCByZXN1bWUsIHN0YXR1c01lc3NhZ2UpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gcGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpXG5cbiAgICB0aGlzLnJldHJ5Q291bnQgKz0gMVxuXG4gICAgaWYgKHN0YXR1c0NvZGUgPj0gMzAwKSB7XG4gICAgICB0aGlzLmFib3J0KFxuICAgICAgICBuZXcgUmVxdWVzdFJldHJ5RXJyb3IoJ1JlcXVlc3QgZmFpbGVkJywgc3RhdHVzQ29kZSwge1xuICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgY291bnQ6IHRoaXMucmV0cnlDb3VudFxuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgLy8gQ2hlY2twb2ludCBmb3IgcmVzdW1lIGZyb20gd2hlcmUgd2UgbGVmdCBpdFxuICAgIGlmICh0aGlzLnJlc3VtZSAhPSBudWxsKSB7XG4gICAgICB0aGlzLnJlc3VtZSA9IG51bGxcblxuICAgICAgaWYgKHN0YXR1c0NvZGUgIT09IDIwNikge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuXG4gICAgICBjb25zdCBjb250ZW50UmFuZ2UgPSBwYXJzZVJhbmdlSGVhZGVyKGhlYWRlcnNbJ2NvbnRlbnQtcmFuZ2UnXSlcbiAgICAgIC8vIElmIG5vIGNvbnRlbnQgcmFuZ2VcbiAgICAgIGlmICghY29udGVudFJhbmdlKSB7XG4gICAgICAgIHRoaXMuYWJvcnQoXG4gICAgICAgICAgbmV3IFJlcXVlc3RSZXRyeUVycm9yKCdDb250ZW50LVJhbmdlIG1pc21hdGNoJywgc3RhdHVzQ29kZSwge1xuICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICAgIGNvdW50OiB0aGlzLnJldHJ5Q291bnRcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuXG4gICAgICAvLyBMZXQncyBzdGFydCB3aXRoIGEgd2VhayBldGFnIGNoZWNrXG4gICAgICBpZiAodGhpcy5ldGFnICE9IG51bGwgJiYgdGhpcy5ldGFnICE9PSBoZWFkZXJzLmV0YWcpIHtcbiAgICAgICAgdGhpcy5hYm9ydChcbiAgICAgICAgICBuZXcgUmVxdWVzdFJldHJ5RXJyb3IoJ0VUYWcgbWlzbWF0Y2gnLCBzdGF0dXNDb2RlLCB7XG4gICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgICAgY291bnQ6IHRoaXMucmV0cnlDb3VudFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgc3RhcnQsIHNpemUsIGVuZCA9IHNpemUgfSA9IGNvbnRlbnRSYW5nZVxuXG4gICAgICBhc3NlcnQodGhpcy5zdGFydCA9PT0gc3RhcnQsICdjb250ZW50LXJhbmdlIG1pc21hdGNoJylcbiAgICAgIGFzc2VydCh0aGlzLmVuZCA9PSBudWxsIHx8IHRoaXMuZW5kID09PSBlbmQsICdjb250ZW50LXJhbmdlIG1pc21hdGNoJylcblxuICAgICAgdGhpcy5yZXN1bWUgPSByZXN1bWVcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZW5kID09IG51bGwpIHtcbiAgICAgIGlmIChzdGF0dXNDb2RlID09PSAyMDYpIHtcbiAgICAgICAgLy8gRmlyc3QgdGltZSB3ZSByZWNlaXZlIDIwNlxuICAgICAgICBjb25zdCByYW5nZSA9IHBhcnNlUmFuZ2VIZWFkZXIoaGVhZGVyc1snY29udGVudC1yYW5nZSddKVxuXG4gICAgICAgIGlmIChyYW5nZSA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkhlYWRlcnMoXG4gICAgICAgICAgICBzdGF0dXNDb2RlLFxuICAgICAgICAgICAgcmF3SGVhZGVycyxcbiAgICAgICAgICAgIHJlc3VtZSxcbiAgICAgICAgICAgIHN0YXR1c01lc3NhZ2VcbiAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IHN0YXJ0LCBzaXplLCBlbmQgPSBzaXplIH0gPSByYW5nZVxuXG4gICAgICAgIGFzc2VydChcbiAgICAgICAgICBzdGFydCAhPSBudWxsICYmIE51bWJlci5pc0Zpbml0ZShzdGFydCkgJiYgdGhpcy5zdGFydCAhPT0gc3RhcnQsXG4gICAgICAgICAgJ2NvbnRlbnQtcmFuZ2UgbWlzbWF0Y2gnXG4gICAgICAgIClcbiAgICAgICAgYXNzZXJ0KE51bWJlci5pc0Zpbml0ZShzdGFydCkpXG4gICAgICAgIGFzc2VydChcbiAgICAgICAgICBlbmQgIT0gbnVsbCAmJiBOdW1iZXIuaXNGaW5pdGUoZW5kKSAmJiB0aGlzLmVuZCAhPT0gZW5kLFxuICAgICAgICAgICdpbnZhbGlkIGNvbnRlbnQtbGVuZ3RoJ1xuICAgICAgICApXG5cbiAgICAgICAgdGhpcy5zdGFydCA9IHN0YXJ0XG4gICAgICAgIHRoaXMuZW5kID0gZW5kXG4gICAgICB9XG5cbiAgICAgIC8vIFdlIG1ha2Ugb3VyIGJlc3QgdG8gY2hlY2twb2ludCB0aGUgYm9keSBmb3IgZnVydGhlciByYW5nZSBoZWFkZXJzXG4gICAgICBpZiAodGhpcy5lbmQgPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBjb250ZW50TGVuZ3RoID0gaGVhZGVyc1snY29udGVudC1sZW5ndGgnXVxuICAgICAgICB0aGlzLmVuZCA9IGNvbnRlbnRMZW5ndGggIT0gbnVsbCA/IE51bWJlcihjb250ZW50TGVuZ3RoKSA6IG51bGxcbiAgICAgIH1cblxuICAgICAgYXNzZXJ0KE51bWJlci5pc0Zpbml0ZSh0aGlzLnN0YXJ0KSlcbiAgICAgIGFzc2VydChcbiAgICAgICAgdGhpcy5lbmQgPT0gbnVsbCB8fCBOdW1iZXIuaXNGaW5pdGUodGhpcy5lbmQpLFxuICAgICAgICAnaW52YWxpZCBjb250ZW50LWxlbmd0aCdcbiAgICAgIClcblxuICAgICAgdGhpcy5yZXN1bWUgPSByZXN1bWVcbiAgICAgIHRoaXMuZXRhZyA9IGhlYWRlcnMuZXRhZyAhPSBudWxsID8gaGVhZGVycy5ldGFnIDogbnVsbFxuXG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uSGVhZGVycyhcbiAgICAgICAgc3RhdHVzQ29kZSxcbiAgICAgICAgcmF3SGVhZGVycyxcbiAgICAgICAgcmVzdW1lLFxuICAgICAgICBzdGF0dXNNZXNzYWdlXG4gICAgICApXG4gICAgfVxuXG4gICAgY29uc3QgZXJyID0gbmV3IFJlcXVlc3RSZXRyeUVycm9yKCdSZXF1ZXN0IGZhaWxlZCcsIHN0YXR1c0NvZGUsIHtcbiAgICAgIGhlYWRlcnMsXG4gICAgICBjb3VudDogdGhpcy5yZXRyeUNvdW50XG4gICAgfSlcblxuICAgIHRoaXMuYWJvcnQoZXJyKVxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBvbkRhdGEgKGNodW5rKSB7XG4gICAgdGhpcy5zdGFydCArPSBjaHVuay5sZW5ndGhcblxuICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25EYXRhKGNodW5rKVxuICB9XG5cbiAgb25Db21wbGV0ZSAocmF3VHJhaWxlcnMpIHtcbiAgICB0aGlzLnJldHJ5Q291bnQgPSAwXG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkNvbXBsZXRlKHJhd1RyYWlsZXJzKVxuICB9XG5cbiAgb25FcnJvciAoZXJyKSB7XG4gICAgaWYgKHRoaXMuYWJvcnRlZCB8fCBpc0Rpc3R1cmJlZCh0aGlzLm9wdHMuYm9keSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25FcnJvcihlcnIpXG4gICAgfVxuXG4gICAgdGhpcy5yZXRyeU9wdHMucmV0cnkoXG4gICAgICBlcnIsXG4gICAgICB7XG4gICAgICAgIHN0YXRlOiB7IGNvdW50ZXI6IHRoaXMucmV0cnlDb3VudCsrLCBjdXJyZW50VGltZW91dDogdGhpcy5yZXRyeUFmdGVyIH0sXG4gICAgICAgIG9wdHM6IHsgcmV0cnlPcHRpb25zOiB0aGlzLnJldHJ5T3B0cywgLi4udGhpcy5vcHRzIH1cbiAgICAgIH0sXG4gICAgICBvblJldHJ5LmJpbmQodGhpcylcbiAgICApXG5cbiAgICBmdW5jdGlvbiBvblJldHJ5IChlcnIpIHtcbiAgICAgIGlmIChlcnIgIT0gbnVsbCB8fCB0aGlzLmFib3J0ZWQgfHwgaXNEaXN0dXJiZWQodGhpcy5vcHRzLmJvZHkpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25FcnJvcihlcnIpXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnN0YXJ0ICE9PSAwKSB7XG4gICAgICAgIHRoaXMub3B0cyA9IHtcbiAgICAgICAgICAuLi50aGlzLm9wdHMsXG4gICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgLi4udGhpcy5vcHRzLmhlYWRlcnMsXG4gICAgICAgICAgICByYW5nZTogYGJ5dGVzPSR7dGhpcy5zdGFydH0tJHt0aGlzLmVuZCA/PyAnJ31gXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2godGhpcy5vcHRzLCB0aGlzKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlci5vbkVycm9yKGVycilcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBSZXRyeUhhbmRsZXJcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbi8vIFdlIGluY2x1ZGUgYSB2ZXJzaW9uIG51bWJlciBmb3IgdGhlIERpc3BhdGNoZXIgQVBJLiBJbiBjYXNlIG9mIGJyZWFraW5nIGNoYW5nZXMsXG4vLyB0aGlzIHZlcnNpb24gbnVtYmVyIG11c3QgYmUgaW5jcmVhc2VkIHRvIGF2b2lkIGNvbmZsaWN0cy5cbmNvbnN0IGdsb2JhbERpc3BhdGNoZXIgPSBTeW1ib2wuZm9yKCd1bmRpY2kuZ2xvYmFsRGlzcGF0Y2hlci4xJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IHJlcXVpcmUoJy4vY29yZS9lcnJvcnMnKVxuY29uc3QgQWdlbnQgPSByZXF1aXJlKCcuL2FnZW50JylcblxuaWYgKGdldEdsb2JhbERpc3BhdGNoZXIoKSA9PT0gdW5kZWZpbmVkKSB7XG4gIHNldEdsb2JhbERpc3BhdGNoZXIobmV3IEFnZW50KCkpXG59XG5cbmZ1bmN0aW9uIHNldEdsb2JhbERpc3BhdGNoZXIgKGFnZW50KSB7XG4gIGlmICghYWdlbnQgfHwgdHlwZW9mIGFnZW50LmRpc3BhdGNoICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdBcmd1bWVudCBhZ2VudCBtdXN0IGltcGxlbWVudCBBZ2VudCcpXG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGdsb2JhbFRoaXMsIGdsb2JhbERpc3BhdGNoZXIsIHtcbiAgICB2YWx1ZTogYWdlbnQsXG4gICAgd3JpdGFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiBmYWxzZVxuICB9KVxufVxuXG5mdW5jdGlvbiBnZXRHbG9iYWxEaXNwYXRjaGVyICgpIHtcbiAgcmV0dXJuIGdsb2JhbFRoaXNbZ2xvYmFsRGlzcGF0Y2hlcl1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldEdsb2JhbERpc3BhdGNoZXIsXG4gIGdldEdsb2JhbERpc3BhdGNoZXJcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0gY2xhc3MgRGVjb3JhdG9ySGFuZGxlciB7XG4gIGNvbnN0cnVjdG9yIChoYW5kbGVyKSB7XG4gICAgdGhpcy5oYW5kbGVyID0gaGFuZGxlclxuICB9XG5cbiAgb25Db25uZWN0ICguLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkNvbm5lY3QoLi4uYXJncylcbiAgfVxuXG4gIG9uRXJyb3IgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uRXJyb3IoLi4uYXJncylcbiAgfVxuXG4gIG9uVXBncmFkZSAoLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25VcGdyYWRlKC4uLmFyZ3MpXG4gIH1cblxuICBvbkhlYWRlcnMgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uSGVhZGVycyguLi5hcmdzKVxuICB9XG5cbiAgb25EYXRhICguLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkRhdGEoLi4uYXJncylcbiAgfVxuXG4gIG9uQ29tcGxldGUgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uQ29tcGxldGUoLi4uYXJncylcbiAgfVxuXG4gIG9uQm9keVNlbnQgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uQm9keVNlbnQoLi4uYXJncylcbiAgfVxufVxuIiwKICAgICIvLyBodHRwczovL2dpdGh1Yi5jb20vRXRoYW4tQXJyb3dvb2QvdW5kaWNpLWZldGNoXG5cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGtIZWFkZXJzTGlzdCwga0NvbnN0cnVjdCB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsga0d1YXJkIH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5IH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3Qge1xuICBtYWtlSXRlcmF0b3IsXG4gIGlzVmFsaWRIZWFkZXJOYW1lLFxuICBpc1ZhbGlkSGVhZGVyVmFsdWVcbn0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4vd2ViaWRsJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5cbmNvbnN0IGtIZWFkZXJzTWFwID0gU3ltYm9sKCdoZWFkZXJzIG1hcCcpXG5jb25zdCBrSGVhZGVyc1NvcnRlZE1hcCA9IFN5bWJvbCgnaGVhZGVycyBtYXAgc29ydGVkJylcblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gY29kZVxuICovXG5mdW5jdGlvbiBpc0hUVFBXaGl0ZVNwYWNlQ2hhckNvZGUgKGNvZGUpIHtcbiAgcmV0dXJuIGNvZGUgPT09IDB4MDBhIHx8IGNvZGUgPT09IDB4MDBkIHx8IGNvZGUgPT09IDB4MDA5IHx8IGNvZGUgPT09IDB4MDIwXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXItdmFsdWUtbm9ybWFsaXplXG4gKiBAcGFyYW0ge3N0cmluZ30gcG90ZW50aWFsVmFsdWVcbiAqL1xuZnVuY3Rpb24gaGVhZGVyVmFsdWVOb3JtYWxpemUgKHBvdGVudGlhbFZhbHVlKSB7XG4gIC8vICBUbyBub3JtYWxpemUgYSBieXRlIHNlcXVlbmNlIHBvdGVudGlhbFZhbHVlLCByZW1vdmVcbiAgLy8gIGFueSBsZWFkaW5nIGFuZCB0cmFpbGluZyBIVFRQIHdoaXRlc3BhY2UgYnl0ZXMgZnJvbVxuICAvLyAgcG90ZW50aWFsVmFsdWUuXG4gIGxldCBpID0gMDsgbGV0IGogPSBwb3RlbnRpYWxWYWx1ZS5sZW5ndGhcblxuICB3aGlsZSAoaiA+IGkgJiYgaXNIVFRQV2hpdGVTcGFjZUNoYXJDb2RlKHBvdGVudGlhbFZhbHVlLmNoYXJDb2RlQXQoaiAtIDEpKSkgLS1qXG4gIHdoaWxlIChqID4gaSAmJiBpc0hUVFBXaGl0ZVNwYWNlQ2hhckNvZGUocG90ZW50aWFsVmFsdWUuY2hhckNvZGVBdChpKSkpICsraVxuXG4gIHJldHVybiBpID09PSAwICYmIGogPT09IHBvdGVudGlhbFZhbHVlLmxlbmd0aCA/IHBvdGVudGlhbFZhbHVlIDogcG90ZW50aWFsVmFsdWUuc3Vic3RyaW5nKGksIGopXG59XG5cbmZ1bmN0aW9uIGZpbGwgKGhlYWRlcnMsIG9iamVjdCkge1xuICAvLyBUbyBmaWxsIGEgSGVhZGVycyBvYmplY3QgaGVhZGVycyB3aXRoIGEgZ2l2ZW4gb2JqZWN0IG9iamVjdCwgcnVuIHRoZXNlIHN0ZXBzOlxuXG4gIC8vIDEuIElmIG9iamVjdCBpcyBhIHNlcXVlbmNlLCB0aGVuIGZvciBlYWNoIGhlYWRlciBpbiBvYmplY3Q6XG4gIC8vIE5vdGU6IHdlYmlkbCBjb252ZXJzaW9uIHRvIGFycmF5IGhhcyBhbHJlYWR5IGJlZW4gZG9uZS5cbiAgaWYgKEFycmF5LmlzQXJyYXkob2JqZWN0KSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2JqZWN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICBjb25zdCBoZWFkZXIgPSBvYmplY3RbaV1cbiAgICAgIC8vIDEuIElmIGhlYWRlciBkb2VzIG5vdCBjb250YWluIGV4YWN0bHkgdHdvIGl0ZW1zLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgaWYgKGhlYWRlci5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgIGhlYWRlcjogJ0hlYWRlcnMgY29uc3RydWN0b3InLFxuICAgICAgICAgIG1lc3NhZ2U6IGBleHBlY3RlZCBuYW1lL3ZhbHVlIHBhaXIgdG8gYmUgbGVuZ3RoIDIsIGZvdW5kICR7aGVhZGVyLmxlbmd0aH0uYFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICAvLyAyLiBBcHBlbmQgKGhlYWRlcuKAmXMgZmlyc3QgaXRlbSwgaGVhZGVy4oCZcyBzZWNvbmQgaXRlbSkgdG8gaGVhZGVycy5cbiAgICAgIGFwcGVuZEhlYWRlcihoZWFkZXJzLCBoZWFkZXJbMF0sIGhlYWRlclsxXSlcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsKSB7XG4gICAgLy8gTm90ZTogbnVsbCBzaG91bGQgdGhyb3dcblxuICAgIC8vIDIuIE90aGVyd2lzZSwgb2JqZWN0IGlzIGEgcmVjb3JkLCB0aGVuIGZvciBlYWNoIGtleSDihpIgdmFsdWUgaW4gb2JqZWN0LFxuICAgIC8vICAgIGFwcGVuZCAoa2V5LCB2YWx1ZSkgdG8gaGVhZGVyc1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICBhcHBlbmRIZWFkZXIoaGVhZGVycywga2V5c1tpXSwgb2JqZWN0W2tleXNbaV1dKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmNvbnZlcnNpb25GYWlsZWQoe1xuICAgICAgcHJlZml4OiAnSGVhZGVycyBjb25zdHJ1Y3RvcicsXG4gICAgICBhcmd1bWVudDogJ0FyZ3VtZW50IDEnLFxuICAgICAgdHlwZXM6IFsnc2VxdWVuY2U8c2VxdWVuY2U8Qnl0ZVN0cmluZz4+JywgJ3JlY29yZDxCeXRlU3RyaW5nLCBCeXRlU3RyaW5nPiddXG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtaGVhZGVycy1hcHBlbmRcbiAqL1xuZnVuY3Rpb24gYXBwZW5kSGVhZGVyIChoZWFkZXJzLCBuYW1lLCB2YWx1ZSkge1xuICAvLyAxLiBOb3JtYWxpemUgdmFsdWUuXG4gIHZhbHVlID0gaGVhZGVyVmFsdWVOb3JtYWxpemUodmFsdWUpXG5cbiAgLy8gMi4gSWYgbmFtZSBpcyBub3QgYSBoZWFkZXIgbmFtZSBvciB2YWx1ZSBpcyBub3QgYVxuICAvLyAgICBoZWFkZXIgdmFsdWUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIGlmICghaXNWYWxpZEhlYWRlck5hbWUobmFtZSkpIHtcbiAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmludmFsaWRBcmd1bWVudCh7XG4gICAgICBwcmVmaXg6ICdIZWFkZXJzLmFwcGVuZCcsXG4gICAgICB2YWx1ZTogbmFtZSxcbiAgICAgIHR5cGU6ICdoZWFkZXIgbmFtZSdcbiAgICB9KVxuICB9IGVsc2UgaWYgKCFpc1ZhbGlkSGVhZGVyVmFsdWUodmFsdWUpKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5pbnZhbGlkQXJndW1lbnQoe1xuICAgICAgcHJlZml4OiAnSGVhZGVycy5hcHBlbmQnLFxuICAgICAgdmFsdWUsXG4gICAgICB0eXBlOiAnaGVhZGVyIHZhbHVlJ1xuICAgIH0pXG4gIH1cblxuICAvLyAzLiBJZiBoZWFkZXJz4oCZcyBndWFyZCBpcyBcImltbXV0YWJsZVwiLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAvLyA0LiBPdGhlcndpc2UsIGlmIGhlYWRlcnPigJlzIGd1YXJkIGlzIFwicmVxdWVzdFwiIGFuZCBuYW1lIGlzIGFcbiAgLy8gICAgZm9yYmlkZGVuIGhlYWRlciBuYW1lLCByZXR1cm4uXG4gIC8vIE5vdGU6IHVuZGljaSBkb2VzIG5vdCBpbXBsZW1lbnQgZm9yYmlkZGVuIGhlYWRlciBuYW1lc1xuICBpZiAoaGVhZGVyc1trR3VhcmRdID09PSAnaW1tdXRhYmxlJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ltbXV0YWJsZScpXG4gIH0gZWxzZSBpZiAoaGVhZGVyc1trR3VhcmRdID09PSAncmVxdWVzdC1uby1jb3JzJykge1xuICAgIC8vIDUuIE90aGVyd2lzZSwgaWYgaGVhZGVyc+KAmXMgZ3VhcmQgaXMgXCJyZXF1ZXN0LW5vLWNvcnNcIjpcbiAgICAvLyBUT0RPXG4gIH1cblxuICAvLyA2LiBPdGhlcndpc2UsIGlmIGhlYWRlcnPigJlzIGd1YXJkIGlzIFwicmVzcG9uc2VcIiBhbmQgbmFtZSBpcyBhXG4gIC8vICAgIGZvcmJpZGRlbiByZXNwb25zZS1oZWFkZXIgbmFtZSwgcmV0dXJuLlxuXG4gIC8vIDcuIEFwcGVuZCAobmFtZSwgdmFsdWUpIHRvIGhlYWRlcnPigJlzIGhlYWRlciBsaXN0LlxuICByZXR1cm4gaGVhZGVyc1trSGVhZGVyc0xpc3RdLmFwcGVuZChuYW1lLCB2YWx1ZSlcblxuICAvLyA4LiBJZiBoZWFkZXJz4oCZcyBndWFyZCBpcyBcInJlcXVlc3Qtbm8tY29yc1wiLCB0aGVuIHJlbW92ZVxuICAvLyAgICBwcml2aWxlZ2VkIG5vLUNPUlMgcmVxdWVzdCBoZWFkZXJzIGZyb20gaGVhZGVyc1xufVxuXG5jbGFzcyBIZWFkZXJzTGlzdCB7XG4gIC8qKiBAdHlwZSB7W3N0cmluZywgc3RyaW5nXVtdfG51bGx9ICovXG4gIGNvb2tpZXMgPSBudWxsXG5cbiAgY29uc3RydWN0b3IgKGluaXQpIHtcbiAgICBpZiAoaW5pdCBpbnN0YW5jZW9mIEhlYWRlcnNMaXN0KSB7XG4gICAgICB0aGlzW2tIZWFkZXJzTWFwXSA9IG5ldyBNYXAoaW5pdFtrSGVhZGVyc01hcF0pXG4gICAgICB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXSA9IGluaXRba0hlYWRlcnNTb3J0ZWRNYXBdXG4gICAgICB0aGlzLmNvb2tpZXMgPSBpbml0LmNvb2tpZXMgPT09IG51bGwgPyBudWxsIDogWy4uLmluaXQuY29va2llc11cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trSGVhZGVyc01hcF0gPSBuZXcgTWFwKGluaXQpXG4gICAgICB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXSA9IG51bGxcbiAgICB9XG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaGVhZGVyLWxpc3QtY29udGFpbnNcbiAgY29udGFpbnMgKG5hbWUpIHtcbiAgICAvLyBBIGhlYWRlciBsaXN0IGxpc3QgY29udGFpbnMgYSBoZWFkZXIgbmFtZSBuYW1lIGlmIGxpc3RcbiAgICAvLyBjb250YWlucyBhIGhlYWRlciB3aG9zZSBuYW1lIGlzIGEgYnl0ZS1jYXNlLWluc2Vuc2l0aXZlXG4gICAgLy8gbWF0Y2ggZm9yIG5hbWUuXG4gICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKVxuXG4gICAgcmV0dXJuIHRoaXNba0hlYWRlcnNNYXBdLmhhcyhuYW1lKVxuICB9XG5cbiAgY2xlYXIgKCkge1xuICAgIHRoaXNba0hlYWRlcnNNYXBdLmNsZWFyKClcbiAgICB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXSA9IG51bGxcbiAgICB0aGlzLmNvb2tpZXMgPSBudWxsXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXItbGlzdC1hcHBlbmRcbiAgYXBwZW5kIChuYW1lLCB2YWx1ZSkge1xuICAgIHRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdID0gbnVsbFxuXG4gICAgLy8gMS4gSWYgbGlzdCBjb250YWlucyBuYW1lLCB0aGVuIHNldCBuYW1lIHRvIHRoZSBmaXJzdCBzdWNoXG4gICAgLy8gICAgaGVhZGVy4oCZcyBuYW1lLlxuICAgIGNvbnN0IGxvd2VyY2FzZU5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKClcbiAgICBjb25zdCBleGlzdHMgPSB0aGlzW2tIZWFkZXJzTWFwXS5nZXQobG93ZXJjYXNlTmFtZSlcblxuICAgIC8vIDIuIEFwcGVuZCAobmFtZSwgdmFsdWUpIHRvIGxpc3QuXG4gICAgaWYgKGV4aXN0cykge1xuICAgICAgY29uc3QgZGVsaW1pdGVyID0gbG93ZXJjYXNlTmFtZSA9PT0gJ2Nvb2tpZScgPyAnOyAnIDogJywgJ1xuICAgICAgdGhpc1trSGVhZGVyc01hcF0uc2V0KGxvd2VyY2FzZU5hbWUsIHtcbiAgICAgICAgbmFtZTogZXhpc3RzLm5hbWUsXG4gICAgICAgIHZhbHVlOiBgJHtleGlzdHMudmFsdWV9JHtkZWxpbWl0ZXJ9JHt2YWx1ZX1gXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tIZWFkZXJzTWFwXS5zZXQobG93ZXJjYXNlTmFtZSwgeyBuYW1lLCB2YWx1ZSB9KVxuICAgIH1cblxuICAgIGlmIChsb3dlcmNhc2VOYW1lID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgIHRoaXMuY29va2llcyA/Pz0gW11cbiAgICAgIHRoaXMuY29va2llcy5wdXNoKHZhbHVlKVxuICAgIH1cbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWhlYWRlci1saXN0LXNldFxuICBzZXQgKG5hbWUsIHZhbHVlKSB7XG4gICAgdGhpc1trSGVhZGVyc1NvcnRlZE1hcF0gPSBudWxsXG4gICAgY29uc3QgbG93ZXJjYXNlTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKVxuXG4gICAgaWYgKGxvd2VyY2FzZU5hbWUgPT09ICdzZXQtY29va2llJykge1xuICAgICAgdGhpcy5jb29raWVzID0gW3ZhbHVlXVxuICAgIH1cblxuICAgIC8vIDEuIElmIGxpc3QgY29udGFpbnMgbmFtZSwgdGhlbiBzZXQgdGhlIHZhbHVlIG9mXG4gICAgLy8gICAgdGhlIGZpcnN0IHN1Y2ggaGVhZGVyIHRvIHZhbHVlIGFuZCByZW1vdmUgdGhlXG4gICAgLy8gICAgb3RoZXJzLlxuICAgIC8vIDIuIE90aGVyd2lzZSwgYXBwZW5kIGhlYWRlciAobmFtZSwgdmFsdWUpIHRvIGxpc3QuXG4gICAgdGhpc1trSGVhZGVyc01hcF0uc2V0KGxvd2VyY2FzZU5hbWUsIHsgbmFtZSwgdmFsdWUgfSlcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWhlYWRlci1saXN0LWRlbGV0ZVxuICBkZWxldGUgKG5hbWUpIHtcbiAgICB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXSA9IG51bGxcblxuICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKClcblxuICAgIGlmIChuYW1lID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgIHRoaXMuY29va2llcyA9IG51bGxcbiAgICB9XG5cbiAgICB0aGlzW2tIZWFkZXJzTWFwXS5kZWxldGUobmFtZSlcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWhlYWRlci1saXN0LWdldFxuICBnZXQgKG5hbWUpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXNba0hlYWRlcnNNYXBdLmdldChuYW1lLnRvTG93ZXJDYXNlKCkpXG5cbiAgICAvLyAxLiBJZiBsaXN0IGRvZXMgbm90IGNvbnRhaW4gbmFtZSwgdGhlbiByZXR1cm4gbnVsbC5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIHZhbHVlcyBvZiBhbGwgaGVhZGVycyBpbiBsaXN0IHdob3NlIG5hbWVcbiAgICAvLyAgICBpcyBhIGJ5dGUtY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBmb3IgbmFtZSxcbiAgICAvLyAgICBzZXBhcmF0ZWQgZnJvbSBlYWNoIG90aGVyIGJ5IDB4MkMgMHgyMCwgaW4gb3JkZXIuXG4gICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyBudWxsIDogdmFsdWUudmFsdWVcbiAgfVxuXG4gICogW1N5bWJvbC5pdGVyYXRvcl0gKCkge1xuICAgIC8vIHVzZSB0aGUgbG93ZXJjYXNlZCBuYW1lXG4gICAgZm9yIChjb25zdCBbbmFtZSwgeyB2YWx1ZSB9XSBvZiB0aGlzW2tIZWFkZXJzTWFwXSkge1xuICAgICAgeWllbGQgW25hbWUsIHZhbHVlXVxuICAgIH1cbiAgfVxuXG4gIGdldCBlbnRyaWVzICgpIHtcbiAgICBjb25zdCBoZWFkZXJzID0ge31cblxuICAgIGlmICh0aGlzW2tIZWFkZXJzTWFwXS5zaXplKSB7XG4gICAgICBmb3IgKGNvbnN0IHsgbmFtZSwgdmFsdWUgfSBvZiB0aGlzW2tIZWFkZXJzTWFwXS52YWx1ZXMoKSkge1xuICAgICAgICBoZWFkZXJzW25hbWVdID0gdmFsdWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaGVhZGVyc1xuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNoZWFkZXJzLWNsYXNzXG5jbGFzcyBIZWFkZXJzIHtcbiAgY29uc3RydWN0b3IgKGluaXQgPSB1bmRlZmluZWQpIHtcbiAgICBpZiAoaW5pdCA9PT0ga0NvbnN0cnVjdCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHRoaXNba0hlYWRlcnNMaXN0XSA9IG5ldyBIZWFkZXJzTGlzdCgpXG5cbiAgICAvLyBUaGUgbmV3IEhlYWRlcnMoaW5pdCkgY29uc3RydWN0b3Igc3RlcHMgYXJlOlxuXG4gICAgLy8gMS4gU2V0IHRoaXPigJlzIGd1YXJkIHRvIFwibm9uZVwiLlxuICAgIHRoaXNba0d1YXJkXSA9ICdub25lJ1xuXG4gICAgLy8gMi4gSWYgaW5pdCBpcyBnaXZlbiwgdGhlbiBmaWxsIHRoaXMgd2l0aCBpbml0LlxuICAgIGlmIChpbml0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGluaXQgPSB3ZWJpZGwuY29udmVydGVycy5IZWFkZXJzSW5pdChpbml0KVxuICAgICAgZmlsbCh0aGlzLCBpbml0KVxuICAgIH1cbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20taGVhZGVycy1hcHBlbmRcbiAgYXBwZW5kIChuYW1lLCB2YWx1ZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnSGVhZGVycy5hcHBlbmQnIH0pXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyhuYW1lKVxuICAgIHZhbHVlID0gd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyh2YWx1ZSlcblxuICAgIHJldHVybiBhcHBlbmRIZWFkZXIodGhpcywgbmFtZSwgdmFsdWUpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWhlYWRlcnMtZGVsZXRlXG4gIGRlbGV0ZSAobmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnSGVhZGVycy5kZWxldGUnIH0pXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyhuYW1lKVxuXG4gICAgLy8gMS4gSWYgbmFtZSBpcyBub3QgYSBoZWFkZXIgbmFtZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoIWlzVmFsaWRIZWFkZXJOYW1lKG5hbWUpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmludmFsaWRBcmd1bWVudCh7XG4gICAgICAgIHByZWZpeDogJ0hlYWRlcnMuZGVsZXRlJyxcbiAgICAgICAgdmFsdWU6IG5hbWUsXG4gICAgICAgIHR5cGU6ICdoZWFkZXIgbmFtZSdcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gSWYgdGhpc+KAmXMgZ3VhcmQgaXMgXCJpbW11dGFibGVcIiwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAvLyAzLiBPdGhlcndpc2UsIGlmIHRoaXPigJlzIGd1YXJkIGlzIFwicmVxdWVzdFwiIGFuZCBuYW1lIGlzIGFcbiAgICAvLyAgICBmb3JiaWRkZW4gaGVhZGVyIG5hbWUsIHJldHVybi5cbiAgICAvLyA0LiBPdGhlcndpc2UsIGlmIHRoaXPigJlzIGd1YXJkIGlzIFwicmVxdWVzdC1uby1jb3JzXCIsIG5hbWVcbiAgICAvLyAgICBpcyBub3QgYSBuby1DT1JTLXNhZmVsaXN0ZWQgcmVxdWVzdC1oZWFkZXIgbmFtZSwgYW5kXG4gICAgLy8gICAgbmFtZSBpcyBub3QgYSBwcml2aWxlZ2VkIG5vLUNPUlMgcmVxdWVzdC1oZWFkZXIgbmFtZSxcbiAgICAvLyAgICByZXR1cm4uXG4gICAgLy8gNS4gT3RoZXJ3aXNlLCBpZiB0aGlz4oCZcyBndWFyZCBpcyBcInJlc3BvbnNlXCIgYW5kIG5hbWUgaXNcbiAgICAvLyAgICBhIGZvcmJpZGRlbiByZXNwb25zZS1oZWFkZXIgbmFtZSwgcmV0dXJuLlxuICAgIC8vIE5vdGU6IHVuZGljaSBkb2VzIG5vdCBpbXBsZW1lbnQgZm9yYmlkZGVuIGhlYWRlciBuYW1lc1xuICAgIGlmICh0aGlzW2tHdWFyZF0gPT09ICdpbW11dGFibGUnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbW11dGFibGUnKVxuICAgIH0gZWxzZSBpZiAodGhpc1trR3VhcmRdID09PSAncmVxdWVzdC1uby1jb3JzJykge1xuICAgICAgLy8gVE9ET1xuICAgIH1cblxuICAgIC8vIDYuIElmIHRoaXPigJlzIGhlYWRlciBsaXN0IGRvZXMgbm90IGNvbnRhaW4gbmFtZSwgdGhlblxuICAgIC8vICAgIHJldHVybi5cbiAgICBpZiAoIXRoaXNba0hlYWRlcnNMaXN0XS5jb250YWlucyhuYW1lKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gNy4gRGVsZXRlIG5hbWUgZnJvbSB0aGlz4oCZcyBoZWFkZXIgbGlzdC5cbiAgICAvLyA4LiBJZiB0aGlz4oCZcyBndWFyZCBpcyBcInJlcXVlc3Qtbm8tY29yc1wiLCB0aGVuIHJlbW92ZVxuICAgIC8vICAgIHByaXZpbGVnZWQgbm8tQ09SUyByZXF1ZXN0IGhlYWRlcnMgZnJvbSB0aGlzLlxuICAgIHRoaXNba0hlYWRlcnNMaXN0XS5kZWxldGUobmFtZSlcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20taGVhZGVycy1nZXRcbiAgZ2V0IChuYW1lKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdIZWFkZXJzLmdldCcgfSlcblxuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nKG5hbWUpXG5cbiAgICAvLyAxLiBJZiBuYW1lIGlzIG5vdCBhIGhlYWRlciBuYW1lLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICghaXNWYWxpZEhlYWRlck5hbWUobmFtZSkpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuaW52YWxpZEFyZ3VtZW50KHtcbiAgICAgICAgcHJlZml4OiAnSGVhZGVycy5nZXQnLFxuICAgICAgICB2YWx1ZTogbmFtZSxcbiAgICAgICAgdHlwZTogJ2hlYWRlciBuYW1lJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBnZXR0aW5nIG5hbWUgZnJvbSB0aGlz4oCZcyBoZWFkZXJcbiAgICAvLyAgICBsaXN0LlxuICAgIHJldHVybiB0aGlzW2tIZWFkZXJzTGlzdF0uZ2V0KG5hbWUpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWhlYWRlcnMtaGFzXG4gIGhhcyAobmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnSGVhZGVycy5oYXMnIH0pXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyhuYW1lKVxuXG4gICAgLy8gMS4gSWYgbmFtZSBpcyBub3QgYSBoZWFkZXIgbmFtZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoIWlzVmFsaWRIZWFkZXJOYW1lKG5hbWUpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmludmFsaWRBcmd1bWVudCh7XG4gICAgICAgIHByZWZpeDogJ0hlYWRlcnMuaGFzJyxcbiAgICAgICAgdmFsdWU6IG5hbWUsXG4gICAgICAgIHR5cGU6ICdoZWFkZXIgbmFtZSdcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gUmV0dXJuIHRydWUgaWYgdGhpc+KAmXMgaGVhZGVyIGxpc3QgY29udGFpbnMgbmFtZTtcbiAgICAvLyAgICBvdGhlcndpc2UgZmFsc2UuXG4gICAgcmV0dXJuIHRoaXNba0hlYWRlcnNMaXN0XS5jb250YWlucyhuYW1lKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1oZWFkZXJzLXNldFxuICBzZXQgKG5hbWUsIHZhbHVlKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMiwgeyBoZWFkZXI6ICdIZWFkZXJzLnNldCcgfSlcblxuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nKG5hbWUpXG4gICAgdmFsdWUgPSB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nKHZhbHVlKVxuXG4gICAgLy8gMS4gTm9ybWFsaXplIHZhbHVlLlxuICAgIHZhbHVlID0gaGVhZGVyVmFsdWVOb3JtYWxpemUodmFsdWUpXG5cbiAgICAvLyAyLiBJZiBuYW1lIGlzIG5vdCBhIGhlYWRlciBuYW1lIG9yIHZhbHVlIGlzIG5vdCBhXG4gICAgLy8gICAgaGVhZGVyIHZhbHVlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICghaXNWYWxpZEhlYWRlck5hbWUobmFtZSkpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuaW52YWxpZEFyZ3VtZW50KHtcbiAgICAgICAgcHJlZml4OiAnSGVhZGVycy5zZXQnLFxuICAgICAgICB2YWx1ZTogbmFtZSxcbiAgICAgICAgdHlwZTogJ2hlYWRlciBuYW1lJ1xuICAgICAgfSlcbiAgICB9IGVsc2UgaWYgKCFpc1ZhbGlkSGVhZGVyVmFsdWUodmFsdWUpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmludmFsaWRBcmd1bWVudCh7XG4gICAgICAgIHByZWZpeDogJ0hlYWRlcnMuc2V0JyxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHR5cGU6ICdoZWFkZXIgdmFsdWUnXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDMuIElmIHRoaXPigJlzIGd1YXJkIGlzIFwiaW1tdXRhYmxlXCIsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgLy8gNC4gT3RoZXJ3aXNlLCBpZiB0aGlz4oCZcyBndWFyZCBpcyBcInJlcXVlc3RcIiBhbmQgbmFtZSBpcyBhXG4gICAgLy8gICAgZm9yYmlkZGVuIGhlYWRlciBuYW1lLCByZXR1cm4uXG4gICAgLy8gNS4gT3RoZXJ3aXNlLCBpZiB0aGlz4oCZcyBndWFyZCBpcyBcInJlcXVlc3Qtbm8tY29yc1wiIGFuZFxuICAgIC8vICAgIG5hbWUvdmFsdWUgaXMgbm90IGEgbm8tQ09SUy1zYWZlbGlzdGVkIHJlcXVlc3QtaGVhZGVyLFxuICAgIC8vICAgIHJldHVybi5cbiAgICAvLyA2LiBPdGhlcndpc2UsIGlmIHRoaXPigJlzIGd1YXJkIGlzIFwicmVzcG9uc2VcIiBhbmQgbmFtZSBpcyBhXG4gICAgLy8gICAgZm9yYmlkZGVuIHJlc3BvbnNlLWhlYWRlciBuYW1lLCByZXR1cm4uXG4gICAgLy8gTm90ZTogdW5kaWNpIGRvZXMgbm90IGltcGxlbWVudCBmb3JiaWRkZW4gaGVhZGVyIG5hbWVzXG4gICAgaWYgKHRoaXNba0d1YXJkXSA9PT0gJ2ltbXV0YWJsZScpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ltbXV0YWJsZScpXG4gICAgfSBlbHNlIGlmICh0aGlzW2tHdWFyZF0gPT09ICdyZXF1ZXN0LW5vLWNvcnMnKSB7XG4gICAgICAvLyBUT0RPXG4gICAgfVxuXG4gICAgLy8gNy4gU2V0IChuYW1lLCB2YWx1ZSkgaW4gdGhpc+KAmXMgaGVhZGVyIGxpc3QuXG4gICAgLy8gOC4gSWYgdGhpc+KAmXMgZ3VhcmQgaXMgXCJyZXF1ZXN0LW5vLWNvcnNcIiwgdGhlbiByZW1vdmVcbiAgICAvLyAgICBwcml2aWxlZ2VkIG5vLUNPUlMgcmVxdWVzdCBoZWFkZXJzIGZyb20gdGhpc1xuICAgIHRoaXNba0hlYWRlcnNMaXN0XS5zZXQobmFtZSwgdmFsdWUpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWhlYWRlcnMtZ2V0c2V0Y29va2llXG4gIGdldFNldENvb2tpZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIC8vIDEuIElmIHRoaXPigJlzIGhlYWRlciBsaXN0IGRvZXMgbm90IGNvbnRhaW4gYFNldC1Db29raWVgLCB0aGVuIHJldHVybiDCqyDCuy5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIHZhbHVlcyBvZiBhbGwgaGVhZGVycyBpbiB0aGlz4oCZcyBoZWFkZXIgbGlzdCB3aG9zZSBuYW1lIGlzXG4gICAgLy8gICAgYSBieXRlLWNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yIGBTZXQtQ29va2llYCwgaW4gb3JkZXIuXG5cbiAgICBjb25zdCBsaXN0ID0gdGhpc1trSGVhZGVyc0xpc3RdLmNvb2tpZXNcblxuICAgIGlmIChsaXN0KSB7XG4gICAgICByZXR1cm4gWy4uLmxpc3RdXG4gICAgfVxuXG4gICAgcmV0dXJuIFtdXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXItbGlzdC1zb3J0LWFuZC1jb21iaW5lXG4gIGdldCBba0hlYWRlcnNTb3J0ZWRNYXBdICgpIHtcbiAgICBpZiAodGhpc1trSGVhZGVyc0xpc3RdW2tIZWFkZXJzU29ydGVkTWFwXSkge1xuICAgICAgcmV0dXJuIHRoaXNba0hlYWRlcnNMaXN0XVtrSGVhZGVyc1NvcnRlZE1hcF1cbiAgICB9XG5cbiAgICAvLyAxLiBMZXQgaGVhZGVycyBiZSBhbiBlbXB0eSBsaXN0IG9mIGhlYWRlcnMgd2l0aCB0aGUga2V5IGJlaW5nIHRoZSBuYW1lXG4gICAgLy8gICAgYW5kIHZhbHVlIHRoZSB2YWx1ZS5cbiAgICBjb25zdCBoZWFkZXJzID0gW11cblxuICAgIC8vIDIuIExldCBuYW1lcyBiZSB0aGUgcmVzdWx0IG9mIGNvbnZlcnQgaGVhZGVyIG5hbWVzIHRvIGEgc29ydGVkLWxvd2VyY2FzZVxuICAgIC8vICAgIHNldCB3aXRoIGFsbCB0aGUgbmFtZXMgb2YgdGhlIGhlYWRlcnMgaW4gbGlzdC5cbiAgICBjb25zdCBuYW1lcyA9IFsuLi50aGlzW2tIZWFkZXJzTGlzdF1dLnNvcnQoKGEsIGIpID0+IGFbMF0gPCBiWzBdID8gLTEgOiAxKVxuICAgIGNvbnN0IGNvb2tpZXMgPSB0aGlzW2tIZWFkZXJzTGlzdF0uY29va2llc1xuXG4gICAgLy8gMy4gRm9yIGVhY2ggbmFtZSBvZiBuYW1lczpcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgKytpKSB7XG4gICAgICBjb25zdCBbbmFtZSwgdmFsdWVdID0gbmFtZXNbaV1cbiAgICAgIC8vIDEuIElmIG5hbWUgaXMgYHNldC1jb29raWVgLCB0aGVuOlxuICAgICAgaWYgKG5hbWUgPT09ICdzZXQtY29va2llJykge1xuICAgICAgICAvLyAxLiBMZXQgdmFsdWVzIGJlIGEgbGlzdCBvZiBhbGwgdmFsdWVzIG9mIGhlYWRlcnMgaW4gbGlzdCB3aG9zZSBuYW1lXG4gICAgICAgIC8vICAgIGlzIGEgYnl0ZS1jYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvciBuYW1lLCBpbiBvcmRlci5cblxuICAgICAgICAvLyAyLiBGb3IgZWFjaCB2YWx1ZSBvZiB2YWx1ZXM6XG4gICAgICAgIC8vIDEuIEFwcGVuZCAobmFtZSwgdmFsdWUpIHRvIGhlYWRlcnMuXG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29va2llcy5sZW5ndGg7ICsraikge1xuICAgICAgICAgIGhlYWRlcnMucHVzaChbbmFtZSwgY29va2llc1tqXV0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIDIuIE90aGVyd2lzZTpcblxuICAgICAgICAvLyAxLiBMZXQgdmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBnZXR0aW5nIG5hbWUgZnJvbSBsaXN0LlxuXG4gICAgICAgIC8vIDIuIEFzc2VydDogdmFsdWUgaXMgbm9uLW51bGwuXG4gICAgICAgIGFzc2VydCh2YWx1ZSAhPT0gbnVsbClcblxuICAgICAgICAvLyAzLiBBcHBlbmQgKG5hbWUsIHZhbHVlKSB0byBoZWFkZXJzLlxuICAgICAgICBoZWFkZXJzLnB1c2goW25hbWUsIHZhbHVlXSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzW2tIZWFkZXJzTGlzdF1ba0hlYWRlcnNTb3J0ZWRNYXBdID0gaGVhZGVyc1xuXG4gICAgLy8gNC4gUmV0dXJuIGhlYWRlcnMuXG4gICAgcmV0dXJuIGhlYWRlcnNcbiAgfVxuXG4gIGtleXMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICBpZiAodGhpc1trR3VhcmRdID09PSAnaW1tdXRhYmxlJykge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXVxuICAgICAgcmV0dXJuIG1ha2VJdGVyYXRvcigoKSA9PiB2YWx1ZSwgJ0hlYWRlcnMnLFxuICAgICAgICAna2V5JylcbiAgICB9XG5cbiAgICByZXR1cm4gbWFrZUl0ZXJhdG9yKFxuICAgICAgKCkgPT4gWy4uLnRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdLnZhbHVlcygpXSxcbiAgICAgICdIZWFkZXJzJyxcbiAgICAgICdrZXknXG4gICAgKVxuICB9XG5cbiAgdmFsdWVzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBIZWFkZXJzKVxuXG4gICAgaWYgKHRoaXNba0d1YXJkXSA9PT0gJ2ltbXV0YWJsZScpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1trSGVhZGVyc1NvcnRlZE1hcF1cbiAgICAgIHJldHVybiBtYWtlSXRlcmF0b3IoKCkgPT4gdmFsdWUsICdIZWFkZXJzJyxcbiAgICAgICAgJ3ZhbHVlJylcbiAgICB9XG5cbiAgICByZXR1cm4gbWFrZUl0ZXJhdG9yKFxuICAgICAgKCkgPT4gWy4uLnRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdLnZhbHVlcygpXSxcbiAgICAgICdIZWFkZXJzJyxcbiAgICAgICd2YWx1ZSdcbiAgICApXG4gIH1cblxuICBlbnRyaWVzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBIZWFkZXJzKVxuXG4gICAgaWYgKHRoaXNba0d1YXJkXSA9PT0gJ2ltbXV0YWJsZScpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1trSGVhZGVyc1NvcnRlZE1hcF1cbiAgICAgIHJldHVybiBtYWtlSXRlcmF0b3IoKCkgPT4gdmFsdWUsICdIZWFkZXJzJyxcbiAgICAgICAgJ2tleSt2YWx1ZScpXG4gICAgfVxuXG4gICAgcmV0dXJuIG1ha2VJdGVyYXRvcihcbiAgICAgICgpID0+IFsuLi50aGlzW2tIZWFkZXJzU29ydGVkTWFwXS52YWx1ZXMoKV0sXG4gICAgICAnSGVhZGVycycsXG4gICAgICAna2V5K3ZhbHVlJ1xuICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0geyh2YWx1ZTogc3RyaW5nLCBrZXk6IHN0cmluZywgc2VsZjogSGVhZGVycykgPT4gdm9pZH0gY2FsbGJhY2tGblxuICAgKiBAcGFyYW0ge3Vua25vd259IHRoaXNBcmdcbiAgICovXG4gIGZvckVhY2ggKGNhbGxiYWNrRm4sIHRoaXNBcmcgPSBnbG9iYWxUaGlzKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdIZWFkZXJzLmZvckVhY2gnIH0pXG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrRm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ2ZvckVhY2gnIG9uICdIZWFkZXJzJzogcGFyYW1ldGVyIDEgaXMgbm90IG9mIHR5cGUgJ0Z1bmN0aW9uJy5cIlxuICAgICAgKVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHRoaXMpIHtcbiAgICAgIGNhbGxiYWNrRm4uYXBwbHkodGhpc0FyZywgW3ZhbHVlLCBrZXksIHRoaXNdKVxuICAgIH1cbiAgfVxuXG4gIFtTeW1ib2wuZm9yKCdub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbScpXSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIHJldHVybiB0aGlzW2tIZWFkZXJzTGlzdF1cbiAgfVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdID0gSGVhZGVycy5wcm90b3R5cGUuZW50cmllc1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhIZWFkZXJzLnByb3RvdHlwZSwge1xuICBhcHBlbmQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGRlbGV0ZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZ2V0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBoYXM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHNldDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZ2V0U2V0Q29va2llOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBrZXlzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICB2YWx1ZXM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGVudHJpZXM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGZvckVhY2g6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIFtTeW1ib2wuaXRlcmF0b3JdOiB7IGVudW1lcmFibGU6IGZhbHNlIH0sXG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdIZWFkZXJzJyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfVxufSlcblxud2ViaWRsLmNvbnZlcnRlcnMuSGVhZGVyc0luaXQgPSBmdW5jdGlvbiAoVikge1xuICBpZiAod2ViaWRsLnV0aWwuVHlwZShWKSA9PT0gJ09iamVjdCcpIHtcbiAgICBpZiAoVltTeW1ib2wuaXRlcmF0b3JdKSB7XG4gICAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPHNlcXVlbmNlPEJ5dGVTdHJpbmc+PiddKFYpXG4gICAgfVxuXG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzWydyZWNvcmQ8Qnl0ZVN0cmluZywgQnl0ZVN0cmluZz4nXShWKVxuICB9XG5cbiAgdGhyb3cgd2ViaWRsLmVycm9ycy5jb252ZXJzaW9uRmFpbGVkKHtcbiAgICBwcmVmaXg6ICdIZWFkZXJzIGNvbnN0cnVjdG9yJyxcbiAgICBhcmd1bWVudDogJ0FyZ3VtZW50IDEnLFxuICAgIHR5cGVzOiBbJ3NlcXVlbmNlPHNlcXVlbmNlPEJ5dGVTdHJpbmc+PicsICdyZWNvcmQ8Qnl0ZVN0cmluZywgQnl0ZVN0cmluZz4nXVxuICB9KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZmlsbCxcbiAgSGVhZGVycyxcbiAgSGVhZGVyc0xpc3Rcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgSGVhZGVycywgSGVhZGVyc0xpc3QsIGZpbGwgfSA9IHJlcXVpcmUoJy4vaGVhZGVycycpXG5jb25zdCB7IGV4dHJhY3RCb2R5LCBjbG9uZUJvZHksIG1peGluQm9keSB9ID0gcmVxdWlyZSgnLi9ib2R5JylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5IH0gPSB1dGlsXG5jb25zdCB7XG4gIGlzVmFsaWRSZWFzb25QaHJhc2UsXG4gIGlzQ2FuY2VsbGVkLFxuICBpc0Fib3J0ZWQsXG4gIGlzQmxvYkxpa2UsXG4gIHNlcmlhbGl6ZUphdmFzY3JpcHRWYWx1ZVRvSlNPTlN0cmluZyxcbiAgaXNFcnJvckxpa2UsXG4gIGlzb21vcnBoaWNFbmNvZGVcbn0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3Qge1xuICByZWRpcmVjdFN0YXR1c1NldCxcbiAgbnVsbEJvZHlTdGF0dXMsXG4gIERPTUV4Y2VwdGlvblxufSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IHsga1N0YXRlLCBrSGVhZGVycywga0d1YXJkLCBrUmVhbG0gfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi93ZWJpZGwnKVxuY29uc3QgeyBGb3JtRGF0YSB9ID0gcmVxdWlyZSgnLi9mb3JtZGF0YScpXG5jb25zdCB7IGdldEdsb2JhbE9yaWdpbiB9ID0gcmVxdWlyZSgnLi9nbG9iYWwnKVxuY29uc3QgeyBVUkxTZXJpYWxpemVyIH0gPSByZXF1aXJlKCcuL2RhdGFVUkwnKVxuY29uc3QgeyBrSGVhZGVyc0xpc3QsIGtDb25zdHJ1Y3QgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyB0eXBlcyB9ID0gcmVxdWlyZSgndXRpbCcpXG5cbmNvbnN0IFJlYWRhYmxlU3RyZWFtID0gZ2xvYmFsVGhpcy5SZWFkYWJsZVN0cmVhbSB8fCByZXF1aXJlKCdzdHJlYW0vd2ViJykuUmVhZGFibGVTdHJlYW1cbmNvbnN0IHRleHRFbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCd1dGYtOCcpXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXNwb25zZS1jbGFzc1xuY2xhc3MgUmVzcG9uc2Uge1xuICAvLyBDcmVhdGVzIG5ldHdvcmsgZXJyb3IgUmVzcG9uc2UuXG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgLy8gVE9ET1xuICAgIGNvbnN0IHJlbGV2YW50UmVhbG0gPSB7IHNldHRpbmdzT2JqZWN0OiB7fSB9XG5cbiAgICAvLyBUaGUgc3RhdGljIGVycm9yKCkgbWV0aG9kIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhXG4gICAgLy8gUmVzcG9uc2Ugb2JqZWN0LCBnaXZlbiBhIG5ldyBuZXR3b3JrIGVycm9yLCBcImltbXV0YWJsZVwiLCBhbmQgdGhpc+KAmXNcbiAgICAvLyByZWxldmFudCBSZWFsbS5cbiAgICBjb25zdCByZXNwb25zZU9iamVjdCA9IG5ldyBSZXNwb25zZSgpXG4gICAgcmVzcG9uc2VPYmplY3Rba1N0YXRlXSA9IG1ha2VOZXR3b3JrRXJyb3IoKVxuICAgIHJlc3BvbnNlT2JqZWN0W2tSZWFsbV0gPSByZWxldmFudFJlYWxtXG4gICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tIZWFkZXJzTGlzdF0gPSByZXNwb25zZU9iamVjdFtrU3RhdGVdLmhlYWRlcnNMaXN0XG4gICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tHdWFyZF0gPSAnaW1tdXRhYmxlJ1xuICAgIHJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrUmVhbG1dID0gcmVsZXZhbnRSZWFsbVxuICAgIHJldHVybiByZXNwb25zZU9iamVjdFxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1yZXNwb25zZS1qc29uXG4gIHN0YXRpYyBqc29uIChkYXRhLCBpbml0ID0ge30pIHtcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnUmVzcG9uc2UuanNvbicgfSlcblxuICAgIGlmIChpbml0ICE9PSBudWxsKSB7XG4gICAgICBpbml0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVzcG9uc2VJbml0KGluaXQpXG4gICAgfVxuXG4gICAgLy8gMS4gTGV0IGJ5dGVzIHRoZSByZXN1bHQgb2YgcnVubmluZyBzZXJpYWxpemUgYSBKYXZhU2NyaXB0IHZhbHVlIHRvIEpTT04gYnl0ZXMgb24gZGF0YS5cbiAgICBjb25zdCBieXRlcyA9IHRleHRFbmNvZGVyLmVuY29kZShcbiAgICAgIHNlcmlhbGl6ZUphdmFzY3JpcHRWYWx1ZVRvSlNPTlN0cmluZyhkYXRhKVxuICAgIClcblxuICAgIC8vIDIuIExldCBib2R5IGJlIHRoZSByZXN1bHQgb2YgZXh0cmFjdGluZyBieXRlcy5cbiAgICBjb25zdCBib2R5ID0gZXh0cmFjdEJvZHkoYnl0ZXMpXG5cbiAgICAvLyAzLiBMZXQgcmVzcG9uc2VPYmplY3QgYmUgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhIFJlc3BvbnNlIG9iamVjdCwgZ2l2ZW4gYSBuZXcgcmVzcG9uc2UsXG4gICAgLy8gICAgXCJyZXNwb25zZVwiLCBhbmQgdGhpc+KAmXMgcmVsZXZhbnQgUmVhbG0uXG4gICAgY29uc3QgcmVsZXZhbnRSZWFsbSA9IHsgc2V0dGluZ3NPYmplY3Q6IHt9IH1cbiAgICBjb25zdCByZXNwb25zZU9iamVjdCA9IG5ldyBSZXNwb25zZSgpXG4gICAgcmVzcG9uc2VPYmplY3Rba1JlYWxtXSA9IHJlbGV2YW50UmVhbG1cbiAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba0d1YXJkXSA9ICdyZXNwb25zZSdcbiAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba1JlYWxtXSA9IHJlbGV2YW50UmVhbG1cblxuICAgIC8vIDQuIFBlcmZvcm0gaW5pdGlhbGl6ZSBhIHJlc3BvbnNlIGdpdmVuIHJlc3BvbnNlT2JqZWN0LCBpbml0LCBhbmQgKGJvZHksIFwiYXBwbGljYXRpb24vanNvblwiKS5cbiAgICBpbml0aWFsaXplUmVzcG9uc2UocmVzcG9uc2VPYmplY3QsIGluaXQsIHsgYm9keTogYm9keVswXSwgdHlwZTogJ2FwcGxpY2F0aW9uL2pzb24nIH0pXG5cbiAgICAvLyA1LiBSZXR1cm4gcmVzcG9uc2VPYmplY3QuXG4gICAgcmV0dXJuIHJlc3BvbnNlT2JqZWN0XG4gIH1cblxuICAvLyBDcmVhdGVzIGEgcmVkaXJlY3QgUmVzcG9uc2UgdGhhdCByZWRpcmVjdHMgdG8gdXJsIHdpdGggc3RhdHVzIHN0YXR1cy5cbiAgc3RhdGljIHJlZGlyZWN0ICh1cmwsIHN0YXR1cyA9IDMwMikge1xuICAgIGNvbnN0IHJlbGV2YW50UmVhbG0gPSB7IHNldHRpbmdzT2JqZWN0OiB7fSB9XG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnUmVzcG9uc2UucmVkaXJlY3QnIH0pXG5cbiAgICB1cmwgPSB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcodXJsKVxuICAgIHN0YXR1cyA9IHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBzaG9ydCddKHN0YXR1cylcblxuICAgIC8vIDEuIExldCBwYXJzZWRVUkwgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIHVybCB3aXRoIGN1cnJlbnQgc2V0dGluZ3NcbiAgICAvLyBvYmplY3TigJlzIEFQSSBiYXNlIFVSTC5cbiAgICAvLyAyLiBJZiBwYXJzZWRVUkwgaXMgZmFpbHVyZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAvLyBUT0RPOiBiYXNlLVVSTD9cbiAgICBsZXQgcGFyc2VkVVJMXG4gICAgdHJ5IHtcbiAgICAgIHBhcnNlZFVSTCA9IG5ldyBVUkwodXJsLCBnZXRHbG9iYWxPcmlnaW4oKSlcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRocm93IE9iamVjdC5hc3NpZ24obmV3IFR5cGVFcnJvcignRmFpbGVkIHRvIHBhcnNlIFVSTCBmcm9tICcgKyB1cmwpLCB7XG4gICAgICAgIGNhdXNlOiBlcnJcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMy4gSWYgc3RhdHVzIGlzIG5vdCBhIHJlZGlyZWN0IHN0YXR1cywgdGhlbiB0aHJvdyBhIFJhbmdlRXJyb3IuXG4gICAgaWYgKCFyZWRpcmVjdFN0YXR1c1NldC5oYXMoc3RhdHVzKSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgc3RhdHVzIGNvZGUgJyArIHN0YXR1cylcbiAgICB9XG5cbiAgICAvLyA0LiBMZXQgcmVzcG9uc2VPYmplY3QgYmUgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhIFJlc3BvbnNlIG9iamVjdCxcbiAgICAvLyBnaXZlbiBhIG5ldyByZXNwb25zZSwgXCJpbW11dGFibGVcIiwgYW5kIHRoaXPigJlzIHJlbGV2YW50IFJlYWxtLlxuICAgIGNvbnN0IHJlc3BvbnNlT2JqZWN0ID0gbmV3IFJlc3BvbnNlKClcbiAgICByZXNwb25zZU9iamVjdFtrUmVhbG1dID0gcmVsZXZhbnRSZWFsbVxuICAgIHJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrR3VhcmRdID0gJ2ltbXV0YWJsZSdcbiAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba1JlYWxtXSA9IHJlbGV2YW50UmVhbG1cblxuICAgIC8vIDUuIFNldCByZXNwb25zZU9iamVjdOKAmXMgcmVzcG9uc2XigJlzIHN0YXR1cyB0byBzdGF0dXMuXG4gICAgcmVzcG9uc2VPYmplY3Rba1N0YXRlXS5zdGF0dXMgPSBzdGF0dXNcblxuICAgIC8vIDYuIExldCB2YWx1ZSBiZSBwYXJzZWRVUkwsIHNlcmlhbGl6ZWQgYW5kIGlzb21vcnBoaWMgZW5jb2RlZC5cbiAgICBjb25zdCB2YWx1ZSA9IGlzb21vcnBoaWNFbmNvZGUoVVJMU2VyaWFsaXplcihwYXJzZWRVUkwpKVxuXG4gICAgLy8gNy4gQXBwZW5kIGBMb2NhdGlvbmAvdmFsdWUgdG8gcmVzcG9uc2VPYmplY3TigJlzIHJlc3BvbnNl4oCZcyBoZWFkZXIgbGlzdC5cbiAgICByZXNwb25zZU9iamVjdFtrU3RhdGVdLmhlYWRlcnNMaXN0LmFwcGVuZCgnbG9jYXRpb24nLCB2YWx1ZSlcblxuICAgIC8vIDguIFJldHVybiByZXNwb25zZU9iamVjdC5cbiAgICByZXR1cm4gcmVzcG9uc2VPYmplY3RcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tcmVzcG9uc2VcbiAgY29uc3RydWN0b3IgKGJvZHkgPSBudWxsLCBpbml0ID0ge30pIHtcbiAgICBpZiAoYm9keSAhPT0gbnVsbCkge1xuICAgICAgYm9keSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkJvZHlJbml0KGJvZHkpXG4gICAgfVxuXG4gICAgaW5pdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlc3BvbnNlSW5pdChpbml0KVxuXG4gICAgLy8gVE9ET1xuICAgIHRoaXNba1JlYWxtXSA9IHsgc2V0dGluZ3NPYmplY3Q6IHt9IH1cblxuICAgIC8vIDEuIFNldCB0aGlz4oCZcyByZXNwb25zZSB0byBhIG5ldyByZXNwb25zZS5cbiAgICB0aGlzW2tTdGF0ZV0gPSBtYWtlUmVzcG9uc2Uoe30pXG5cbiAgICAvLyAyLiBTZXQgdGhpc+KAmXMgaGVhZGVycyB0byBhIG5ldyBIZWFkZXJzIG9iamVjdCB3aXRoIHRoaXPigJlzIHJlbGV2YW50XG4gICAgLy8gUmVhbG0sIHdob3NlIGhlYWRlciBsaXN0IGlzIHRoaXPigJlzIHJlc3BvbnNl4oCZcyBoZWFkZXIgbGlzdCBhbmQgZ3VhcmRcbiAgICAvLyBpcyBcInJlc3BvbnNlXCIuXG4gICAgdGhpc1trSGVhZGVyc10gPSBuZXcgSGVhZGVycyhrQ29uc3RydWN0KVxuICAgIHRoaXNba0hlYWRlcnNdW2tHdWFyZF0gPSAncmVzcG9uc2UnXG4gICAgdGhpc1trSGVhZGVyc11ba0hlYWRlcnNMaXN0XSA9IHRoaXNba1N0YXRlXS5oZWFkZXJzTGlzdFxuICAgIHRoaXNba0hlYWRlcnNdW2tSZWFsbV0gPSB0aGlzW2tSZWFsbV1cblxuICAgIC8vIDMuIExldCBib2R5V2l0aFR5cGUgYmUgbnVsbC5cbiAgICBsZXQgYm9keVdpdGhUeXBlID0gbnVsbFxuXG4gICAgLy8gNC4gSWYgYm9keSBpcyBub24tbnVsbCwgdGhlbiBzZXQgYm9keVdpdGhUeXBlIHRvIHRoZSByZXN1bHQgb2YgZXh0cmFjdGluZyBib2R5LlxuICAgIGlmIChib2R5ICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IFtleHRyYWN0ZWRCb2R5LCB0eXBlXSA9IGV4dHJhY3RCb2R5KGJvZHkpXG4gICAgICBib2R5V2l0aFR5cGUgPSB7IGJvZHk6IGV4dHJhY3RlZEJvZHksIHR5cGUgfVxuICAgIH1cblxuICAgIC8vIDUuIFBlcmZvcm0gaW5pdGlhbGl6ZSBhIHJlc3BvbnNlIGdpdmVuIHRoaXMsIGluaXQsIGFuZCBib2R5V2l0aFR5cGUuXG4gICAgaW5pdGlhbGl6ZVJlc3BvbnNlKHRoaXMsIGluaXQsIGJvZHlXaXRoVHlwZSlcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2XigJlzIHR5cGUsIGUuZy4sIFwiY29yc1wiLlxuICBnZXQgdHlwZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICAvLyBUaGUgdHlwZSBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlz4oCZcyByZXNwb25zZeKAmXMgdHlwZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnR5cGVcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2XigJlzIFVSTCwgaWYgaXQgaGFzIG9uZTsgb3RoZXJ3aXNlIHRoZSBlbXB0eSBzdHJpbmcuXG4gIGdldCB1cmwgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgY29uc3QgdXJsTGlzdCA9IHRoaXNba1N0YXRlXS51cmxMaXN0XG5cbiAgICAvLyBUaGUgdXJsIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoZSBlbXB0eSBzdHJpbmcgaWYgdGhpc+KAmXNcbiAgICAvLyByZXNwb25zZeKAmXMgVVJMIGlzIG51bGw7IG90aGVyd2lzZSB0aGlz4oCZcyByZXNwb25zZeKAmXMgVVJMLFxuICAgIC8vIHNlcmlhbGl6ZWQgd2l0aCBleGNsdWRlIGZyYWdtZW50IHNldCB0byB0cnVlLlxuICAgIGNvbnN0IHVybCA9IHVybExpc3RbdXJsTGlzdC5sZW5ndGggLSAxXSA/PyBudWxsXG5cbiAgICBpZiAodXJsID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG5cbiAgICByZXR1cm4gVVJMU2VyaWFsaXplcih1cmwsIHRydWUpXG4gIH1cblxuICAvLyBSZXR1cm5zIHdoZXRoZXIgcmVzcG9uc2Ugd2FzIG9idGFpbmVkIHRocm91Z2ggYSByZWRpcmVjdC5cbiAgZ2V0IHJlZGlyZWN0ZWQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgLy8gVGhlIHJlZGlyZWN0ZWQgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdHJ1ZSBpZiB0aGlz4oCZcyByZXNwb25zZeKAmXMgVVJMXG4gICAgLy8gbGlzdCBoYXMgbW9yZSB0aGFuIG9uZSBpdGVtOyBvdGhlcndpc2UgZmFsc2UuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS51cmxMaXN0Lmxlbmd0aCA+IDFcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2XigJlzIHN0YXR1cy5cbiAgZ2V0IHN0YXR1cyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICAvLyBUaGUgc3RhdHVzIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXPigJlzIHJlc3BvbnNl4oCZcyBzdGF0dXMuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5zdGF0dXNcbiAgfVxuXG4gIC8vIFJldHVybnMgd2hldGhlciByZXNwb25zZeKAmXMgc3RhdHVzIGlzIGFuIG9rIHN0YXR1cy5cbiAgZ2V0IG9rICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXNwb25zZSlcblxuICAgIC8vIFRoZSBvayBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0cnVlIGlmIHRoaXPigJlzIHJlc3BvbnNl4oCZcyBzdGF0dXMgaXMgYW5cbiAgICAvLyBvayBzdGF0dXM7IG90aGVyd2lzZSBmYWxzZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnN0YXR1cyA+PSAyMDAgJiYgdGhpc1trU3RhdGVdLnN0YXR1cyA8PSAyOTlcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2XigJlzIHN0YXR1cyBtZXNzYWdlLlxuICBnZXQgc3RhdHVzVGV4dCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICAvLyBUaGUgc3RhdHVzVGV4dCBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlz4oCZcyByZXNwb25zZeKAmXMgc3RhdHVzXG4gICAgLy8gbWVzc2FnZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnN0YXR1c1RleHRcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2XigJlzIGhlYWRlcnMgYXMgSGVhZGVycy5cbiAgZ2V0IGhlYWRlcnMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgLy8gVGhlIGhlYWRlcnMgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc+KAmXMgaGVhZGVycy5cbiAgICByZXR1cm4gdGhpc1trSGVhZGVyc11cbiAgfVxuXG4gIGdldCBib2R5ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXNwb25zZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uYm9keSA/IHRoaXNba1N0YXRlXS5ib2R5LnN0cmVhbSA6IG51bGxcbiAgfVxuXG4gIGdldCBib2R5VXNlZCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICByZXR1cm4gISF0aGlzW2tTdGF0ZV0uYm9keSAmJiB1dGlsLmlzRGlzdHVyYmVkKHRoaXNba1N0YXRlXS5ib2R5LnN0cmVhbSlcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBjbG9uZSBvZiByZXNwb25zZS5cbiAgY2xvbmUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgLy8gMS4gSWYgdGhpcyBpcyB1bnVzYWJsZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAodGhpcy5ib2R5VXNlZCB8fCAodGhpcy5ib2R5ICYmIHRoaXMuYm9keS5sb2NrZWQpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ1Jlc3BvbnNlLmNsb25lJyxcbiAgICAgICAgbWVzc2FnZTogJ0JvZHkgaGFzIGFscmVhZHkgYmVlbiBjb25zdW1lZC4nXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDIuIExldCBjbG9uZWRSZXNwb25zZSBiZSB0aGUgcmVzdWx0IG9mIGNsb25pbmcgdGhpc+KAmXMgcmVzcG9uc2UuXG4gICAgY29uc3QgY2xvbmVkUmVzcG9uc2UgPSBjbG9uZVJlc3BvbnNlKHRoaXNba1N0YXRlXSlcblxuICAgIC8vIDMuIFJldHVybiB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEgUmVzcG9uc2Ugb2JqZWN0LCBnaXZlblxuICAgIC8vIGNsb25lZFJlc3BvbnNlLCB0aGlz4oCZcyBoZWFkZXJz4oCZcyBndWFyZCwgYW5kIHRoaXPigJlzIHJlbGV2YW50IFJlYWxtLlxuICAgIGNvbnN0IGNsb25lZFJlc3BvbnNlT2JqZWN0ID0gbmV3IFJlc3BvbnNlKClcbiAgICBjbG9uZWRSZXNwb25zZU9iamVjdFtrU3RhdGVdID0gY2xvbmVkUmVzcG9uc2VcbiAgICBjbG9uZWRSZXNwb25zZU9iamVjdFtrUmVhbG1dID0gdGhpc1trUmVhbG1dXG4gICAgY2xvbmVkUmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tIZWFkZXJzTGlzdF0gPSBjbG9uZWRSZXNwb25zZS5oZWFkZXJzTGlzdFxuICAgIGNsb25lZFJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrR3VhcmRdID0gdGhpc1trSGVhZGVyc11ba0d1YXJkXVxuICAgIGNsb25lZFJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrUmVhbG1dID0gdGhpc1trSGVhZGVyc11ba1JlYWxtXVxuXG4gICAgcmV0dXJuIGNsb25lZFJlc3BvbnNlT2JqZWN0XG4gIH1cbn1cblxubWl4aW5Cb2R5KFJlc3BvbnNlKVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhSZXNwb25zZS5wcm90b3R5cGUsIHtcbiAgdHlwZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgdXJsOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBzdGF0dXM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9rOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWRpcmVjdGVkOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBzdGF0dXNUZXh0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBoZWFkZXJzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBjbG9uZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYm9keToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYm9keVVzZWQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdSZXNwb25zZScsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH1cbn0pXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFJlc3BvbnNlLCB7XG4gIGpzb246IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlZGlyZWN0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBlcnJvcjoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtcmVzcG9uc2UtY2xvbmVcbmZ1bmN0aW9uIGNsb25lUmVzcG9uc2UgKHJlc3BvbnNlKSB7XG4gIC8vIFRvIGNsb25lIGEgcmVzcG9uc2UgcmVzcG9uc2UsIHJ1biB0aGVzZSBzdGVwczpcblxuICAvLyAxLiBJZiByZXNwb25zZSBpcyBhIGZpbHRlcmVkIHJlc3BvbnNlLCB0aGVuIHJldHVybiBhIG5ldyBpZGVudGljYWxcbiAgLy8gZmlsdGVyZWQgcmVzcG9uc2Ugd2hvc2UgaW50ZXJuYWwgcmVzcG9uc2UgaXMgYSBjbG9uZSBvZiByZXNwb25zZeKAmXNcbiAgLy8gaW50ZXJuYWwgcmVzcG9uc2UuXG4gIGlmIChyZXNwb25zZS5pbnRlcm5hbFJlc3BvbnNlKSB7XG4gICAgcmV0dXJuIGZpbHRlclJlc3BvbnNlKFxuICAgICAgY2xvbmVSZXNwb25zZShyZXNwb25zZS5pbnRlcm5hbFJlc3BvbnNlKSxcbiAgICAgIHJlc3BvbnNlLnR5cGVcbiAgICApXG4gIH1cblxuICAvLyAyLiBMZXQgbmV3UmVzcG9uc2UgYmUgYSBjb3B5IG9mIHJlc3BvbnNlLCBleGNlcHQgZm9yIGl0cyBib2R5LlxuICBjb25zdCBuZXdSZXNwb25zZSA9IG1ha2VSZXNwb25zZSh7IC4uLnJlc3BvbnNlLCBib2R5OiBudWxsIH0pXG5cbiAgLy8gMy4gSWYgcmVzcG9uc2XigJlzIGJvZHkgaXMgbm9uLW51bGwsIHRoZW4gc2V0IG5ld1Jlc3BvbnNl4oCZcyBib2R5IHRvIHRoZVxuICAvLyByZXN1bHQgb2YgY2xvbmluZyByZXNwb25zZeKAmXMgYm9keS5cbiAgaWYgKHJlc3BvbnNlLmJvZHkgIT0gbnVsbCkge1xuICAgIG5ld1Jlc3BvbnNlLmJvZHkgPSBjbG9uZUJvZHkocmVzcG9uc2UuYm9keSlcbiAgfVxuXG4gIC8vIDQuIFJldHVybiBuZXdSZXNwb25zZS5cbiAgcmV0dXJuIG5ld1Jlc3BvbnNlXG59XG5cbmZ1bmN0aW9uIG1ha2VSZXNwb25zZSAoaW5pdCkge1xuICByZXR1cm4ge1xuICAgIGFib3J0ZWQ6IGZhbHNlLFxuICAgIHJhbmdlUmVxdWVzdGVkOiBmYWxzZSxcbiAgICB0aW1pbmdBbGxvd1Bhc3NlZDogZmFsc2UsXG4gICAgcmVxdWVzdEluY2x1ZGVzQ3JlZGVudGlhbHM6IGZhbHNlLFxuICAgIHR5cGU6ICdkZWZhdWx0JyxcbiAgICBzdGF0dXM6IDIwMCxcbiAgICB0aW1pbmdJbmZvOiBudWxsLFxuICAgIGNhY2hlU3RhdGU6ICcnLFxuICAgIHN0YXR1c1RleHQ6ICcnLFxuICAgIC4uLmluaXQsXG4gICAgaGVhZGVyc0xpc3Q6IGluaXQuaGVhZGVyc0xpc3RcbiAgICAgID8gbmV3IEhlYWRlcnNMaXN0KGluaXQuaGVhZGVyc0xpc3QpXG4gICAgICA6IG5ldyBIZWFkZXJzTGlzdCgpLFxuICAgIHVybExpc3Q6IGluaXQudXJsTGlzdCA/IFsuLi5pbml0LnVybExpc3RdIDogW11cbiAgfVxufVxuXG5mdW5jdGlvbiBtYWtlTmV0d29ya0Vycm9yIChyZWFzb24pIHtcbiAgY29uc3QgaXNFcnJvciA9IGlzRXJyb3JMaWtlKHJlYXNvbilcbiAgcmV0dXJuIG1ha2VSZXNwb25zZSh7XG4gICAgdHlwZTogJ2Vycm9yJyxcbiAgICBzdGF0dXM6IDAsXG4gICAgZXJyb3I6IGlzRXJyb3JcbiAgICAgID8gcmVhc29uXG4gICAgICA6IG5ldyBFcnJvcihyZWFzb24gPyBTdHJpbmcocmVhc29uKSA6IHJlYXNvbiksXG4gICAgYWJvcnRlZDogcmVhc29uICYmIHJlYXNvbi5uYW1lID09PSAnQWJvcnRFcnJvcidcbiAgfSlcbn1cblxuZnVuY3Rpb24gbWFrZUZpbHRlcmVkUmVzcG9uc2UgKHJlc3BvbnNlLCBzdGF0ZSkge1xuICBzdGF0ZSA9IHtcbiAgICBpbnRlcm5hbFJlc3BvbnNlOiByZXNwb25zZSxcbiAgICAuLi5zdGF0ZVxuICB9XG5cbiAgcmV0dXJuIG5ldyBQcm94eShyZXNwb25zZSwge1xuICAgIGdldCAodGFyZ2V0LCBwKSB7XG4gICAgICByZXR1cm4gcCBpbiBzdGF0ZSA/IHN0YXRlW3BdIDogdGFyZ2V0W3BdXG4gICAgfSxcbiAgICBzZXQgKHRhcmdldCwgcCwgdmFsdWUpIHtcbiAgICAgIGFzc2VydCghKHAgaW4gc3RhdGUpKVxuICAgICAgdGFyZ2V0W3BdID0gdmFsdWVcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICB9KVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1maWx0ZXJlZC1yZXNwb25zZVxuZnVuY3Rpb24gZmlsdGVyUmVzcG9uc2UgKHJlc3BvbnNlLCB0eXBlKSB7XG4gIC8vIFNldCByZXNwb25zZSB0byB0aGUgZm9sbG93aW5nIGZpbHRlcmVkIHJlc3BvbnNlIHdpdGggcmVzcG9uc2UgYXMgaXRzXG4gIC8vIGludGVybmFsIHJlc3BvbnNlLCBkZXBlbmRpbmcgb24gcmVxdWVzdOKAmXMgcmVzcG9uc2UgdGFpbnRpbmc6XG4gIGlmICh0eXBlID09PSAnYmFzaWMnKSB7XG4gICAgLy8gQSBiYXNpYyBmaWx0ZXJlZCByZXNwb25zZSBpcyBhIGZpbHRlcmVkIHJlc3BvbnNlIHdob3NlIHR5cGUgaXMgXCJiYXNpY1wiXG4gICAgLy8gYW5kIGhlYWRlciBsaXN0IGV4Y2x1ZGVzIGFueSBoZWFkZXJzIGluIGludGVybmFsIHJlc3BvbnNl4oCZcyBoZWFkZXIgbGlzdFxuICAgIC8vIHdob3NlIG5hbWUgaXMgYSBmb3JiaWRkZW4gcmVzcG9uc2UtaGVhZGVyIG5hbWUuXG5cbiAgICAvLyBOb3RlOiB1bmRpY2kgZG9lcyBub3QgaW1wbGVtZW50IGZvcmJpZGRlbiByZXNwb25zZS1oZWFkZXIgbmFtZXNcbiAgICByZXR1cm4gbWFrZUZpbHRlcmVkUmVzcG9uc2UocmVzcG9uc2UsIHtcbiAgICAgIHR5cGU6ICdiYXNpYycsXG4gICAgICBoZWFkZXJzTGlzdDogcmVzcG9uc2UuaGVhZGVyc0xpc3RcbiAgICB9KVxuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdjb3JzJykge1xuICAgIC8vIEEgQ09SUyBmaWx0ZXJlZCByZXNwb25zZSBpcyBhIGZpbHRlcmVkIHJlc3BvbnNlIHdob3NlIHR5cGUgaXMgXCJjb3JzXCJcbiAgICAvLyBhbmQgaGVhZGVyIGxpc3QgZXhjbHVkZXMgYW55IGhlYWRlcnMgaW4gaW50ZXJuYWwgcmVzcG9uc2XigJlzIGhlYWRlclxuICAgIC8vIGxpc3Qgd2hvc2UgbmFtZSBpcyBub3QgYSBDT1JTLXNhZmVsaXN0ZWQgcmVzcG9uc2UtaGVhZGVyIG5hbWUsIGdpdmVuXG4gICAgLy8gaW50ZXJuYWwgcmVzcG9uc2XigJlzIENPUlMtZXhwb3NlZCBoZWFkZXItbmFtZSBsaXN0LlxuXG4gICAgLy8gTm90ZTogdW5kaWNpIGRvZXMgbm90IGltcGxlbWVudCBDT1JTLXNhZmVsaXN0ZWQgcmVzcG9uc2UtaGVhZGVyIG5hbWVzXG4gICAgcmV0dXJuIG1ha2VGaWx0ZXJlZFJlc3BvbnNlKHJlc3BvbnNlLCB7XG4gICAgICB0eXBlOiAnY29ycycsXG4gICAgICBoZWFkZXJzTGlzdDogcmVzcG9uc2UuaGVhZGVyc0xpc3RcbiAgICB9KVxuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdvcGFxdWUnKSB7XG4gICAgLy8gQW4gb3BhcXVlIGZpbHRlcmVkIHJlc3BvbnNlIGlzIGEgZmlsdGVyZWQgcmVzcG9uc2Ugd2hvc2UgdHlwZSBpc1xuICAgIC8vIFwib3BhcXVlXCIsIFVSTCBsaXN0IGlzIHRoZSBlbXB0eSBsaXN0LCBzdGF0dXMgaXMgMCwgc3RhdHVzIG1lc3NhZ2VcbiAgICAvLyBpcyB0aGUgZW1wdHkgYnl0ZSBzZXF1ZW5jZSwgaGVhZGVyIGxpc3QgaXMgZW1wdHksIGFuZCBib2R5IGlzIG51bGwuXG5cbiAgICByZXR1cm4gbWFrZUZpbHRlcmVkUmVzcG9uc2UocmVzcG9uc2UsIHtcbiAgICAgIHR5cGU6ICdvcGFxdWUnLFxuICAgICAgdXJsTGlzdDogT2JqZWN0LmZyZWV6ZShbXSksXG4gICAgICBzdGF0dXM6IDAsXG4gICAgICBzdGF0dXNUZXh0OiAnJyxcbiAgICAgIGJvZHk6IG51bGxcbiAgICB9KVxuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdvcGFxdWVyZWRpcmVjdCcpIHtcbiAgICAvLyBBbiBvcGFxdWUtcmVkaXJlY3QgZmlsdGVyZWQgcmVzcG9uc2UgaXMgYSBmaWx0ZXJlZCByZXNwb25zZSB3aG9zZSB0eXBlXG4gICAgLy8gaXMgXCJvcGFxdWVyZWRpcmVjdFwiLCBzdGF0dXMgaXMgMCwgc3RhdHVzIG1lc3NhZ2UgaXMgdGhlIGVtcHR5IGJ5dGVcbiAgICAvLyBzZXF1ZW5jZSwgaGVhZGVyIGxpc3QgaXMgZW1wdHksIGFuZCBib2R5IGlzIG51bGwuXG5cbiAgICByZXR1cm4gbWFrZUZpbHRlcmVkUmVzcG9uc2UocmVzcG9uc2UsIHtcbiAgICAgIHR5cGU6ICdvcGFxdWVyZWRpcmVjdCcsXG4gICAgICBzdGF0dXM6IDAsXG4gICAgICBzdGF0dXNUZXh0OiAnJyxcbiAgICAgIGhlYWRlcnNMaXN0OiBbXSxcbiAgICAgIGJvZHk6IG51bGxcbiAgICB9KVxuICB9IGVsc2Uge1xuICAgIGFzc2VydChmYWxzZSlcbiAgfVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYXBwcm9wcmlhdGUtbmV0d29yay1lcnJvclxuZnVuY3Rpb24gbWFrZUFwcHJvcHJpYXRlTmV0d29ya0Vycm9yIChmZXRjaFBhcmFtcywgZXJyID0gbnVsbCkge1xuICAvLyAxLiBBc3NlcnQ6IGZldGNoUGFyYW1zIGlzIGNhbmNlbGVkLlxuICBhc3NlcnQoaXNDYW5jZWxsZWQoZmV0Y2hQYXJhbXMpKVxuXG4gIC8vIDIuIFJldHVybiBhbiBhYm9ydGVkIG5ldHdvcmsgZXJyb3IgaWYgZmV0Y2hQYXJhbXMgaXMgYWJvcnRlZDtcbiAgLy8gb3RoZXJ3aXNlIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gIHJldHVybiBpc0Fib3J0ZWQoZmV0Y2hQYXJhbXMpXG4gICAgPyBtYWtlTmV0d29ya0Vycm9yKE9iamVjdC5hc3NpZ24obmV3IERPTUV4Y2VwdGlvbignVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC4nLCAnQWJvcnRFcnJvcicpLCB7IGNhdXNlOiBlcnIgfSkpXG4gICAgOiBtYWtlTmV0d29ya0Vycm9yKE9iamVjdC5hc3NpZ24obmV3IERPTUV4Y2VwdGlvbignUmVxdWVzdCB3YXMgY2FuY2VsbGVkLicpLCB7IGNhdXNlOiBlcnIgfSkpXG59XG5cbi8vIGh0dHBzOi8vd2hhdHByLm9yZy9mZXRjaC8xMzkyLmh0bWwjaW5pdGlhbGl6ZS1hLXJlc3BvbnNlXG5mdW5jdGlvbiBpbml0aWFsaXplUmVzcG9uc2UgKHJlc3BvbnNlLCBpbml0LCBib2R5KSB7XG4gIC8vIDEuIElmIGluaXRbXCJzdGF0dXNcIl0gaXMgbm90IGluIHRoZSByYW5nZSAyMDAgdG8gNTk5LCBpbmNsdXNpdmUsIHRoZW5cbiAgLy8gICAgdGhyb3cgYSBSYW5nZUVycm9yLlxuICBpZiAoaW5pdC5zdGF0dXMgIT09IG51bGwgJiYgKGluaXQuc3RhdHVzIDwgMjAwIHx8IGluaXQuc3RhdHVzID4gNTk5KSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdpbml0W1wic3RhdHVzXCJdIG11c3QgYmUgaW4gdGhlIHJhbmdlIG9mIDIwMCB0byA1OTksIGluY2x1c2l2ZS4nKVxuICB9XG5cbiAgLy8gMi4gSWYgaW5pdFtcInN0YXR1c1RleHRcIl0gZG9lcyBub3QgbWF0Y2ggdGhlIHJlYXNvbi1waHJhc2UgdG9rZW4gcHJvZHVjdGlvbixcbiAgLy8gICAgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKCdzdGF0dXNUZXh0JyBpbiBpbml0ICYmIGluaXQuc3RhdHVzVGV4dCAhPSBudWxsKSB7XG4gICAgLy8gU2VlLCBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjEuMjpcbiAgICAvLyAgIHJlYXNvbi1waHJhc2UgID0gKiggSFRBQiAvIFNQIC8gVkNIQVIgLyBvYnMtdGV4dCApXG4gICAgaWYgKCFpc1ZhbGlkUmVhc29uUGhyYXNlKFN0cmluZyhpbml0LnN0YXR1c1RleHQpKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBzdGF0dXNUZXh0JylcbiAgICB9XG4gIH1cblxuICAvLyAzLiBTZXQgcmVzcG9uc2XigJlzIHJlc3BvbnNl4oCZcyBzdGF0dXMgdG8gaW5pdFtcInN0YXR1c1wiXS5cbiAgaWYgKCdzdGF0dXMnIGluIGluaXQgJiYgaW5pdC5zdGF0dXMgIT0gbnVsbCkge1xuICAgIHJlc3BvbnNlW2tTdGF0ZV0uc3RhdHVzID0gaW5pdC5zdGF0dXNcbiAgfVxuXG4gIC8vIDQuIFNldCByZXNwb25zZeKAmXMgcmVzcG9uc2XigJlzIHN0YXR1cyBtZXNzYWdlIHRvIGluaXRbXCJzdGF0dXNUZXh0XCJdLlxuICBpZiAoJ3N0YXR1c1RleHQnIGluIGluaXQgJiYgaW5pdC5zdGF0dXNUZXh0ICE9IG51bGwpIHtcbiAgICByZXNwb25zZVtrU3RhdGVdLnN0YXR1c1RleHQgPSBpbml0LnN0YXR1c1RleHRcbiAgfVxuXG4gIC8vIDUuIElmIGluaXRbXCJoZWFkZXJzXCJdIGV4aXN0cywgdGhlbiBmaWxsIHJlc3BvbnNl4oCZcyBoZWFkZXJzIHdpdGggaW5pdFtcImhlYWRlcnNcIl0uXG4gIGlmICgnaGVhZGVycycgaW4gaW5pdCAmJiBpbml0LmhlYWRlcnMgIT0gbnVsbCkge1xuICAgIGZpbGwocmVzcG9uc2Vba0hlYWRlcnNdLCBpbml0LmhlYWRlcnMpXG4gIH1cblxuICAvLyA2LiBJZiBib2R5IHdhcyBnaXZlbiwgdGhlbjpcbiAgaWYgKGJvZHkpIHtcbiAgICAvLyAxLiBJZiByZXNwb25zZSdzIHN0YXR1cyBpcyBhIG51bGwgYm9keSBzdGF0dXMsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKG51bGxCb2R5U3RhdHVzLmluY2x1ZGVzKHJlc3BvbnNlLnN0YXR1cykpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnUmVzcG9uc2UgY29uc3RydWN0b3InLFxuICAgICAgICBtZXNzYWdlOiAnSW52YWxpZCByZXNwb25zZSBzdGF0dXMgY29kZSAnICsgcmVzcG9uc2Uuc3RhdHVzXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDIuIFNldCByZXNwb25zZSdzIGJvZHkgdG8gYm9keSdzIGJvZHkuXG4gICAgcmVzcG9uc2Vba1N0YXRlXS5ib2R5ID0gYm9keS5ib2R5XG5cbiAgICAvLyAzLiBJZiBib2R5J3MgdHlwZSBpcyBub24tbnVsbCBhbmQgcmVzcG9uc2UncyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluXG4gICAgLy8gICAgYENvbnRlbnQtVHlwZWAsIHRoZW4gYXBwZW5kIChgQ29udGVudC1UeXBlYCwgYm9keSdzIHR5cGUpIHRvIHJlc3BvbnNlJ3MgaGVhZGVyIGxpc3QuXG4gICAgaWYgKGJvZHkudHlwZSAhPSBudWxsICYmICFyZXNwb25zZVtrU3RhdGVdLmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdDb250ZW50LVR5cGUnKSkge1xuICAgICAgcmVzcG9uc2Vba1N0YXRlXS5oZWFkZXJzTGlzdC5hcHBlbmQoJ2NvbnRlbnQtdHlwZScsIGJvZHkudHlwZSlcbiAgICB9XG4gIH1cbn1cblxud2ViaWRsLmNvbnZlcnRlcnMuUmVhZGFibGVTdHJlYW0gPSB3ZWJpZGwuaW50ZXJmYWNlQ29udmVydGVyKFxuICBSZWFkYWJsZVN0cmVhbVxuKVxuXG53ZWJpZGwuY29udmVydGVycy5Gb3JtRGF0YSA9IHdlYmlkbC5pbnRlcmZhY2VDb252ZXJ0ZXIoXG4gIEZvcm1EYXRhXG4pXG5cbndlYmlkbC5jb252ZXJ0ZXJzLlVSTFNlYXJjaFBhcmFtcyA9IHdlYmlkbC5pbnRlcmZhY2VDb252ZXJ0ZXIoXG4gIFVSTFNlYXJjaFBhcmFtc1xuKVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jdHlwZWRlZmRlZi14bWxodHRwcmVxdWVzdGJvZHlpbml0XG53ZWJpZGwuY29udmVydGVycy5YTUxIdHRwUmVxdWVzdEJvZHlJbml0ID0gZnVuY3Rpb24gKFYpIHtcbiAgaWYgKHR5cGVvZiBWID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcoVilcbiAgfVxuXG4gIGlmIChpc0Jsb2JMaWtlKFYpKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkJsb2IoViwgeyBzdHJpY3Q6IGZhbHNlIH0pXG4gIH1cblxuICBpZiAodHlwZXMuaXNBcnJheUJ1ZmZlcihWKSB8fCB0eXBlcy5pc1R5cGVkQXJyYXkoVikgfHwgdHlwZXMuaXNEYXRhVmlldyhWKSkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5CdWZmZXJTb3VyY2UoVilcbiAgfVxuXG4gIGlmICh1dGlsLmlzRm9ybURhdGFMaWtlKFYpKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkZvcm1EYXRhKFYsIHsgc3RyaWN0OiBmYWxzZSB9KVxuICB9XG5cbiAgaWYgKFYgaW5zdGFuY2VvZiBVUkxTZWFyY2hQYXJhbXMpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuVVJMU2VhcmNoUGFyYW1zKFYpXG4gIH1cblxuICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKFYpXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNib2R5aW5pdFxud2ViaWRsLmNvbnZlcnRlcnMuQm9keUluaXQgPSBmdW5jdGlvbiAoVikge1xuICBpZiAoViBpbnN0YW5jZW9mIFJlYWRhYmxlU3RyZWFtKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLlJlYWRhYmxlU3RyZWFtKFYpXG4gIH1cblxuICAvLyBOb3RlOiB0aGUgc3BlYyBkb2Vzbid0IGluY2x1ZGUgYXN5bmMgaXRlcmFibGVzLFxuICAvLyB0aGlzIGlzIGFuIHVuZGljaSBleHRlbnNpb24uXG4gIGlmIChWPy5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdKSB7XG4gICAgcmV0dXJuIFZcbiAgfVxuXG4gIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5YTUxIdHRwUmVxdWVzdEJvZHlJbml0KFYpXG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLlJlc3BvbnNlSW5pdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGtleTogJ3N0YXR1cycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgc2hvcnQnXSxcbiAgICBkZWZhdWx0VmFsdWU6IDIwMFxuICB9LFxuICB7XG4gICAga2V5OiAnc3RhdHVzVGV4dCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZTogJydcbiAgfSxcbiAge1xuICAgIGtleTogJ2hlYWRlcnMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuSGVhZGVyc0luaXRcbiAgfVxuXSlcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1ha2VOZXR3b3JrRXJyb3IsXG4gIG1ha2VSZXNwb25zZSxcbiAgbWFrZUFwcHJvcHJpYXRlTmV0d29ya0Vycm9yLFxuICBmaWx0ZXJSZXNwb25zZSxcbiAgUmVzcG9uc2UsXG4gIGNsb25lUmVzcG9uc2Vcbn1cbiIsCiAgICAiLyogZ2xvYmFscyBBYm9ydENvbnRyb2xsZXIgKi9cblxuJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgZXh0cmFjdEJvZHksIG1peGluQm9keSwgY2xvbmVCb2R5IH0gPSByZXF1aXJlKCcuL2JvZHknKVxuY29uc3QgeyBIZWFkZXJzLCBmaWxsOiBmaWxsSGVhZGVycywgSGVhZGVyc0xpc3QgfSA9IHJlcXVpcmUoJy4vaGVhZGVycycpXG5jb25zdCB7IEZpbmFsaXphdGlvblJlZ2lzdHJ5IH0gPSByZXF1aXJlKCcuLi9jb21wYXQvZGlzcGF0Y2hlci13ZWFrcmVmJykoKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7XG4gIGlzVmFsaWRIVFRQVG9rZW4sXG4gIHNhbWVPcmlnaW4sXG4gIG5vcm1hbGl6ZU1ldGhvZCxcbiAgbWFrZVBvbGljeUNvbnRhaW5lcixcbiAgbm9ybWFsaXplTWV0aG9kUmVjb3JkXG59ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHtcbiAgZm9yYmlkZGVuTWV0aG9kc1NldCxcbiAgY29yc1NhZmVMaXN0ZWRNZXRob2RzU2V0LFxuICByZWZlcnJlclBvbGljeSxcbiAgcmVxdWVzdFJlZGlyZWN0LFxuICByZXF1ZXN0TW9kZSxcbiAgcmVxdWVzdENyZWRlbnRpYWxzLFxuICByZXF1ZXN0Q2FjaGUsXG4gIHJlcXVlc3REdXBsZXhcbn0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7IGtFbnVtZXJhYmxlUHJvcGVydHkgfSA9IHV0aWxcbmNvbnN0IHsga0hlYWRlcnMsIGtTaWduYWwsIGtTdGF0ZSwga0d1YXJkLCBrUmVhbG0gfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi93ZWJpZGwnKVxuY29uc3QgeyBnZXRHbG9iYWxPcmlnaW4gfSA9IHJlcXVpcmUoJy4vZ2xvYmFsJylcbmNvbnN0IHsgVVJMU2VyaWFsaXplciB9ID0gcmVxdWlyZSgnLi9kYXRhVVJMJylcbmNvbnN0IHsga0hlYWRlcnNMaXN0LCBrQ29uc3RydWN0IH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbmNvbnN0IHsgZ2V0TWF4TGlzdGVuZXJzLCBzZXRNYXhMaXN0ZW5lcnMsIGdldEV2ZW50TGlzdGVuZXJzLCBkZWZhdWx0TWF4TGlzdGVuZXJzIH0gPSByZXF1aXJlKCdldmVudHMnKVxuXG5sZXQgVHJhbnNmb3JtU3RyZWFtID0gZ2xvYmFsVGhpcy5UcmFuc2Zvcm1TdHJlYW1cblxuY29uc3Qga0Fib3J0Q29udHJvbGxlciA9IFN5bWJvbCgnYWJvcnRDb250cm9sbGVyJylcblxuY29uc3QgcmVxdWVzdEZpbmFsaXplciA9IG5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeSgoeyBzaWduYWwsIGFib3J0IH0pID0+IHtcbiAgc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnQpXG59KVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdC1jbGFzc1xuY2xhc3MgUmVxdWVzdCB7XG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tcmVxdWVzdFxuICBjb25zdHJ1Y3RvciAoaW5wdXQsIGluaXQgPSB7fSkge1xuICAgIGlmIChpbnB1dCA9PT0ga0NvbnN0cnVjdCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ1JlcXVlc3QgY29uc3RydWN0b3InIH0pXG5cbiAgICBpbnB1dCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKGlucHV0KVxuICAgIGluaXQgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5pdChpbml0KVxuXG4gICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvd2ViYXBwYXBpcy5odG1sI2Vudmlyb25tZW50LXNldHRpbmdzLW9iamVjdFxuICAgIHRoaXNba1JlYWxtXSA9IHtcbiAgICAgIHNldHRpbmdzT2JqZWN0OiB7XG4gICAgICAgIGJhc2VVcmw6IGdldEdsb2JhbE9yaWdpbigpLFxuICAgICAgICBnZXQgb3JpZ2luICgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5iYXNlVXJsPy5vcmlnaW5cbiAgICAgICAgfSxcbiAgICAgICAgcG9saWN5Q29udGFpbmVyOiBtYWtlUG9saWN5Q29udGFpbmVyKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAxLiBMZXQgcmVxdWVzdCBiZSBudWxsLlxuICAgIGxldCByZXF1ZXN0ID0gbnVsbFxuXG4gICAgLy8gMi4gTGV0IGZhbGxiYWNrTW9kZSBiZSBudWxsLlxuICAgIGxldCBmYWxsYmFja01vZGUgPSBudWxsXG5cbiAgICAvLyAzLiBMZXQgYmFzZVVSTCBiZSB0aGlz4oCZcyByZWxldmFudCBzZXR0aW5ncyBvYmplY3TigJlzIEFQSSBiYXNlIFVSTC5cbiAgICBjb25zdCBiYXNlVXJsID0gdGhpc1trUmVhbG1dLnNldHRpbmdzT2JqZWN0LmJhc2VVcmxcblxuICAgIC8vIDQuIExldCBzaWduYWwgYmUgbnVsbC5cbiAgICBsZXQgc2lnbmFsID0gbnVsbFxuXG4gICAgLy8gNS4gSWYgaW5wdXQgaXMgYSBzdHJpbmcsIHRoZW46XG4gICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIDEuIExldCBwYXJzZWRVUkwgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIGlucHV0IHdpdGggYmFzZVVSTC5cbiAgICAgIC8vIDIuIElmIHBhcnNlZFVSTCBpcyBmYWlsdXJlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgbGV0IHBhcnNlZFVSTFxuICAgICAgdHJ5IHtcbiAgICAgICAgcGFyc2VkVVJMID0gbmV3IFVSTChpbnB1dCwgYmFzZVVybClcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGYWlsZWQgdG8gcGFyc2UgVVJMIGZyb20gJyArIGlucHV0LCB7IGNhdXNlOiBlcnIgfSlcbiAgICAgIH1cblxuICAgICAgLy8gMy4gSWYgcGFyc2VkVVJMIGluY2x1ZGVzIGNyZWRlbnRpYWxzLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgaWYgKHBhcnNlZFVSTC51c2VybmFtZSB8fCBwYXJzZWRVUkwucGFzc3dvcmQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAnUmVxdWVzdCBjYW5ub3QgYmUgY29uc3RydWN0ZWQgZnJvbSBhIFVSTCB0aGF0IGluY2x1ZGVzIGNyZWRlbnRpYWxzOiAnICtcbiAgICAgICAgICAgIGlucHV0XG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgLy8gNC4gU2V0IHJlcXVlc3QgdG8gYSBuZXcgcmVxdWVzdCB3aG9zZSBVUkwgaXMgcGFyc2VkVVJMLlxuICAgICAgcmVxdWVzdCA9IG1ha2VSZXF1ZXN0KHsgdXJsTGlzdDogW3BhcnNlZFVSTF0gfSlcblxuICAgICAgLy8gNS4gU2V0IGZhbGxiYWNrTW9kZSB0byBcImNvcnNcIi5cbiAgICAgIGZhbGxiYWNrTW9kZSA9ICdjb3JzJ1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyA2LiBPdGhlcndpc2U6XG5cbiAgICAgIC8vIDcuIEFzc2VydDogaW5wdXQgaXMgYSBSZXF1ZXN0IG9iamVjdC5cbiAgICAgIGFzc2VydChpbnB1dCBpbnN0YW5jZW9mIFJlcXVlc3QpXG5cbiAgICAgIC8vIDguIFNldCByZXF1ZXN0IHRvIGlucHV04oCZcyByZXF1ZXN0LlxuICAgICAgcmVxdWVzdCA9IGlucHV0W2tTdGF0ZV1cblxuICAgICAgLy8gOS4gU2V0IHNpZ25hbCB0byBpbnB1dOKAmXMgc2lnbmFsLlxuICAgICAgc2lnbmFsID0gaW5wdXRba1NpZ25hbF1cbiAgICB9XG5cbiAgICAvLyA3LiBMZXQgb3JpZ2luIGJlIHRoaXPigJlzIHJlbGV2YW50IHNldHRpbmdzIG9iamVjdOKAmXMgb3JpZ2luLlxuICAgIGNvbnN0IG9yaWdpbiA9IHRoaXNba1JlYWxtXS5zZXR0aW5nc09iamVjdC5vcmlnaW5cblxuICAgIC8vIDguIExldCB3aW5kb3cgYmUgXCJjbGllbnRcIi5cbiAgICBsZXQgd2luZG93ID0gJ2NsaWVudCdcblxuICAgIC8vIDkuIElmIHJlcXVlc3TigJlzIHdpbmRvdyBpcyBhbiBlbnZpcm9ubWVudCBzZXR0aW5ncyBvYmplY3QgYW5kIGl0cyBvcmlnaW5cbiAgICAvLyBpcyBzYW1lIG9yaWdpbiB3aXRoIG9yaWdpbiwgdGhlbiBzZXQgd2luZG93IHRvIHJlcXVlc3TigJlzIHdpbmRvdy5cbiAgICBpZiAoXG4gICAgICByZXF1ZXN0LndpbmRvdz8uY29uc3RydWN0b3I/Lm5hbWUgPT09ICdFbnZpcm9ubWVudFNldHRpbmdzT2JqZWN0JyAmJlxuICAgICAgc2FtZU9yaWdpbihyZXF1ZXN0LndpbmRvdywgb3JpZ2luKVxuICAgICkge1xuICAgICAgd2luZG93ID0gcmVxdWVzdC53aW5kb3dcbiAgICB9XG5cbiAgICAvLyAxMC4gSWYgaW5pdFtcIndpbmRvd1wiXSBleGlzdHMgYW5kIGlzIG5vbi1udWxsLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmIChpbml0LndpbmRvdyAhPSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAnd2luZG93JyBvcHRpb24gJyR7d2luZG93fScgbXVzdCBiZSBudWxsYClcbiAgICB9XG5cbiAgICAvLyAxMS4gSWYgaW5pdFtcIndpbmRvd1wiXSBleGlzdHMsIHRoZW4gc2V0IHdpbmRvdyB0byBcIm5vLXdpbmRvd1wiLlxuICAgIGlmICgnd2luZG93JyBpbiBpbml0KSB7XG4gICAgICB3aW5kb3cgPSAnbm8td2luZG93J1xuICAgIH1cblxuICAgIC8vIDEyLiBTZXQgcmVxdWVzdCB0byBhIG5ldyByZXF1ZXN0IHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICAgIHJlcXVlc3QgPSBtYWtlUmVxdWVzdCh7XG4gICAgICAvLyBVUkwgcmVxdWVzdOKAmXMgVVJMLlxuICAgICAgLy8gdW5kaWNpIGltcGxlbWVudGF0aW9uIG5vdGU6IHRoaXMgaXMgc2V0IGFzIHRoZSBmaXJzdCBpdGVtIGluIHJlcXVlc3QncyB1cmxMaXN0IGluIG1ha2VSZXF1ZXN0XG4gICAgICAvLyBtZXRob2QgcmVxdWVzdOKAmXMgbWV0aG9kLlxuICAgICAgbWV0aG9kOiByZXF1ZXN0Lm1ldGhvZCxcbiAgICAgIC8vIGhlYWRlciBsaXN0IEEgY29weSBvZiByZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cbiAgICAgIC8vIHVuZGljaSBpbXBsZW1lbnRhdGlvbiBub3RlOiBoZWFkZXJzTGlzdCBpcyBjbG9uZWQgaW4gbWFrZVJlcXVlc3RcbiAgICAgIGhlYWRlcnNMaXN0OiByZXF1ZXN0LmhlYWRlcnNMaXN0LFxuICAgICAgLy8gdW5zYWZlLXJlcXVlc3QgZmxhZyBTZXQuXG4gICAgICB1bnNhZmVSZXF1ZXN0OiByZXF1ZXN0LnVuc2FmZVJlcXVlc3QsXG4gICAgICAvLyBjbGllbnQgVGhpc+KAmXMgcmVsZXZhbnQgc2V0dGluZ3Mgb2JqZWN0LlxuICAgICAgY2xpZW50OiB0aGlzW2tSZWFsbV0uc2V0dGluZ3NPYmplY3QsXG4gICAgICAvLyB3aW5kb3cgd2luZG93LlxuICAgICAgd2luZG93LFxuICAgICAgLy8gcHJpb3JpdHkgcmVxdWVzdOKAmXMgcHJpb3JpdHkuXG4gICAgICBwcmlvcml0eTogcmVxdWVzdC5wcmlvcml0eSxcbiAgICAgIC8vIG9yaWdpbiByZXF1ZXN04oCZcyBvcmlnaW4uIFRoZSBwcm9wYWdhdGlvbiBvZiB0aGUgb3JpZ2luIGlzIG9ubHkgc2lnbmlmaWNhbnQgZm9yIG5hdmlnYXRpb24gcmVxdWVzdHNcbiAgICAgIC8vIGJlaW5nIGhhbmRsZWQgYnkgYSBzZXJ2aWNlIHdvcmtlci4gSW4gdGhpcyBzY2VuYXJpbyBhIHJlcXVlc3QgY2FuIGhhdmUgYW4gb3JpZ2luIHRoYXQgaXMgZGlmZmVyZW50XG4gICAgICAvLyBmcm9tIHRoZSBjdXJyZW50IGNsaWVudC5cbiAgICAgIG9yaWdpbjogcmVxdWVzdC5vcmlnaW4sXG4gICAgICAvLyByZWZlcnJlciByZXF1ZXN04oCZcyByZWZlcnJlci5cbiAgICAgIHJlZmVycmVyOiByZXF1ZXN0LnJlZmVycmVyLFxuICAgICAgLy8gcmVmZXJyZXIgcG9saWN5IHJlcXVlc3TigJlzIHJlZmVycmVyIHBvbGljeS5cbiAgICAgIHJlZmVycmVyUG9saWN5OiByZXF1ZXN0LnJlZmVycmVyUG9saWN5LFxuICAgICAgLy8gbW9kZSByZXF1ZXN04oCZcyBtb2RlLlxuICAgICAgbW9kZTogcmVxdWVzdC5tb2RlLFxuICAgICAgLy8gY3JlZGVudGlhbHMgbW9kZSByZXF1ZXN04oCZcyBjcmVkZW50aWFscyBtb2RlLlxuICAgICAgY3JlZGVudGlhbHM6IHJlcXVlc3QuY3JlZGVudGlhbHMsXG4gICAgICAvLyBjYWNoZSBtb2RlIHJlcXVlc3TigJlzIGNhY2hlIG1vZGUuXG4gICAgICBjYWNoZTogcmVxdWVzdC5jYWNoZSxcbiAgICAgIC8vIHJlZGlyZWN0IG1vZGUgcmVxdWVzdOKAmXMgcmVkaXJlY3QgbW9kZS5cbiAgICAgIHJlZGlyZWN0OiByZXF1ZXN0LnJlZGlyZWN0LFxuICAgICAgLy8gaW50ZWdyaXR5IG1ldGFkYXRhIHJlcXVlc3TigJlzIGludGVncml0eSBtZXRhZGF0YS5cbiAgICAgIGludGVncml0eTogcmVxdWVzdC5pbnRlZ3JpdHksXG4gICAgICAvLyBrZWVwYWxpdmUgcmVxdWVzdOKAmXMga2VlcGFsaXZlLlxuICAgICAga2VlcGFsaXZlOiByZXF1ZXN0LmtlZXBhbGl2ZSxcbiAgICAgIC8vIHJlbG9hZC1uYXZpZ2F0aW9uIGZsYWcgcmVxdWVzdOKAmXMgcmVsb2FkLW5hdmlnYXRpb24gZmxhZy5cbiAgICAgIHJlbG9hZE5hdmlnYXRpb246IHJlcXVlc3QucmVsb2FkTmF2aWdhdGlvbixcbiAgICAgIC8vIGhpc3RvcnktbmF2aWdhdGlvbiBmbGFnIHJlcXVlc3TigJlzIGhpc3RvcnktbmF2aWdhdGlvbiBmbGFnLlxuICAgICAgaGlzdG9yeU5hdmlnYXRpb246IHJlcXVlc3QuaGlzdG9yeU5hdmlnYXRpb24sXG4gICAgICAvLyBVUkwgbGlzdCBBIGNsb25lIG9mIHJlcXVlc3TigJlzIFVSTCBsaXN0LlxuICAgICAgdXJsTGlzdDogWy4uLnJlcXVlc3QudXJsTGlzdF1cbiAgICB9KVxuXG4gICAgY29uc3QgaW5pdEhhc0tleSA9IE9iamVjdC5rZXlzKGluaXQpLmxlbmd0aCAhPT0gMFxuXG4gICAgLy8gMTMuIElmIGluaXQgaXMgbm90IGVtcHR5LCB0aGVuOlxuICAgIGlmIChpbml0SGFzS2V5KSB7XG4gICAgICAvLyAxLiBJZiByZXF1ZXN04oCZcyBtb2RlIGlzIFwibmF2aWdhdGVcIiwgdGhlbiBzZXQgaXQgdG8gXCJzYW1lLW9yaWdpblwiLlxuICAgICAgaWYgKHJlcXVlc3QubW9kZSA9PT0gJ25hdmlnYXRlJykge1xuICAgICAgICByZXF1ZXN0Lm1vZGUgPSAnc2FtZS1vcmlnaW4nXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIFVuc2V0IHJlcXVlc3TigJlzIHJlbG9hZC1uYXZpZ2F0aW9uIGZsYWcuXG4gICAgICByZXF1ZXN0LnJlbG9hZE5hdmlnYXRpb24gPSBmYWxzZVxuXG4gICAgICAvLyAzLiBVbnNldCByZXF1ZXN04oCZcyBoaXN0b3J5LW5hdmlnYXRpb24gZmxhZy5cbiAgICAgIHJlcXVlc3QuaGlzdG9yeU5hdmlnYXRpb24gPSBmYWxzZVxuXG4gICAgICAvLyA0LiBTZXQgcmVxdWVzdOKAmXMgb3JpZ2luIHRvIFwiY2xpZW50XCIuXG4gICAgICByZXF1ZXN0Lm9yaWdpbiA9ICdjbGllbnQnXG5cbiAgICAgIC8vIDUuIFNldCByZXF1ZXN04oCZcyByZWZlcnJlciB0byBcImNsaWVudFwiXG4gICAgICByZXF1ZXN0LnJlZmVycmVyID0gJ2NsaWVudCdcblxuICAgICAgLy8gNi4gU2V0IHJlcXVlc3TigJlzIHJlZmVycmVyIHBvbGljeSB0byB0aGUgZW1wdHkgc3RyaW5nLlxuICAgICAgcmVxdWVzdC5yZWZlcnJlclBvbGljeSA9ICcnXG5cbiAgICAgIC8vIDcuIFNldCByZXF1ZXN04oCZcyBVUkwgdG8gcmVxdWVzdOKAmXMgY3VycmVudCBVUkwuXG4gICAgICByZXF1ZXN0LnVybCA9IHJlcXVlc3QudXJsTGlzdFtyZXF1ZXN0LnVybExpc3QubGVuZ3RoIC0gMV1cblxuICAgICAgLy8gOC4gU2V0IHJlcXVlc3TigJlzIFVSTCBsaXN0IHRvIMKrIHJlcXVlc3TigJlzIFVSTCDCuy5cbiAgICAgIHJlcXVlc3QudXJsTGlzdCA9IFtyZXF1ZXN0LnVybF1cbiAgICB9XG5cbiAgICAvLyAxNC4gSWYgaW5pdFtcInJlZmVycmVyXCJdIGV4aXN0cywgdGhlbjpcbiAgICBpZiAoaW5pdC5yZWZlcnJlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyAxLiBMZXQgcmVmZXJyZXIgYmUgaW5pdFtcInJlZmVycmVyXCJdLlxuICAgICAgY29uc3QgcmVmZXJyZXIgPSBpbml0LnJlZmVycmVyXG5cbiAgICAgIC8vIDIuIElmIHJlZmVycmVyIGlzIHRoZSBlbXB0eSBzdHJpbmcsIHRoZW4gc2V0IHJlcXVlc3TigJlzIHJlZmVycmVyIHRvIFwibm8tcmVmZXJyZXJcIi5cbiAgICAgIGlmIChyZWZlcnJlciA9PT0gJycpIHtcbiAgICAgICAgcmVxdWVzdC5yZWZlcnJlciA9ICduby1yZWZlcnJlcidcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIDEuIExldCBwYXJzZWRSZWZlcnJlciBiZSB0aGUgcmVzdWx0IG9mIHBhcnNpbmcgcmVmZXJyZXIgd2l0aFxuICAgICAgICAvLyBiYXNlVVJMLlxuICAgICAgICAvLyAyLiBJZiBwYXJzZWRSZWZlcnJlciBpcyBmYWlsdXJlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgICBsZXQgcGFyc2VkUmVmZXJyZXJcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBwYXJzZWRSZWZlcnJlciA9IG5ldyBVUkwocmVmZXJyZXIsIGJhc2VVcmwpXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFJlZmVycmVyIFwiJHtyZWZlcnJlcn1cIiBpcyBub3QgYSB2YWxpZCBVUkwuYCwgeyBjYXVzZTogZXJyIH0pXG4gICAgICAgIH1cblxuICAgICAgICAvLyAzLiBJZiBvbmUgb2YgdGhlIGZvbGxvd2luZyBpcyB0cnVlXG4gICAgICAgIC8vIC0gcGFyc2VkUmVmZXJyZXLigJlzIHNjaGVtZSBpcyBcImFib3V0XCIgYW5kIHBhdGggaXMgdGhlIHN0cmluZyBcImNsaWVudFwiXG4gICAgICAgIC8vIC0gcGFyc2VkUmVmZXJyZXLigJlzIG9yaWdpbiBpcyBub3Qgc2FtZSBvcmlnaW4gd2l0aCBvcmlnaW5cbiAgICAgICAgLy8gdGhlbiBzZXQgcmVxdWVzdOKAmXMgcmVmZXJyZXIgdG8gXCJjbGllbnRcIi5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIChwYXJzZWRSZWZlcnJlci5wcm90b2NvbCA9PT0gJ2Fib3V0OicgJiYgcGFyc2VkUmVmZXJyZXIuaG9zdG5hbWUgPT09ICdjbGllbnQnKSB8fFxuICAgICAgICAgIChvcmlnaW4gJiYgIXNhbWVPcmlnaW4ocGFyc2VkUmVmZXJyZXIsIHRoaXNba1JlYWxtXS5zZXR0aW5nc09iamVjdC5iYXNlVXJsKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmVxdWVzdC5yZWZlcnJlciA9ICdjbGllbnQnXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gNC4gT3RoZXJ3aXNlLCBzZXQgcmVxdWVzdOKAmXMgcmVmZXJyZXIgdG8gcGFyc2VkUmVmZXJyZXIuXG4gICAgICAgICAgcmVxdWVzdC5yZWZlcnJlciA9IHBhcnNlZFJlZmVycmVyXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAxNS4gSWYgaW5pdFtcInJlZmVycmVyUG9saWN5XCJdIGV4aXN0cywgdGhlbiBzZXQgcmVxdWVzdOKAmXMgcmVmZXJyZXIgcG9saWN5XG4gICAgLy8gdG8gaXQuXG4gICAgaWYgKGluaXQucmVmZXJyZXJQb2xpY3kgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVxdWVzdC5yZWZlcnJlclBvbGljeSA9IGluaXQucmVmZXJyZXJQb2xpY3lcbiAgICB9XG5cbiAgICAvLyAxNi4gTGV0IG1vZGUgYmUgaW5pdFtcIm1vZGVcIl0gaWYgaXQgZXhpc3RzLCBhbmQgZmFsbGJhY2tNb2RlIG90aGVyd2lzZS5cbiAgICBsZXQgbW9kZVxuICAgIGlmIChpbml0Lm1vZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbW9kZSA9IGluaXQubW9kZVxuICAgIH0gZWxzZSB7XG4gICAgICBtb2RlID0gZmFsbGJhY2tNb2RlXG4gICAgfVxuXG4gICAgLy8gMTcuIElmIG1vZGUgaXMgXCJuYXZpZ2F0ZVwiLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmIChtb2RlID09PSAnbmF2aWdhdGUnKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ1JlcXVlc3QgY29uc3RydWN0b3InLFxuICAgICAgICBtZXNzYWdlOiAnaW52YWxpZCByZXF1ZXN0IG1vZGUgbmF2aWdhdGUuJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAxOC4gSWYgbW9kZSBpcyBub24tbnVsbCwgc2V0IHJlcXVlc3TigJlzIG1vZGUgdG8gbW9kZS5cbiAgICBpZiAobW9kZSAhPSBudWxsKSB7XG4gICAgICByZXF1ZXN0Lm1vZGUgPSBtb2RlXG4gICAgfVxuXG4gICAgLy8gMTkuIElmIGluaXRbXCJjcmVkZW50aWFsc1wiXSBleGlzdHMsIHRoZW4gc2V0IHJlcXVlc3TigJlzIGNyZWRlbnRpYWxzIG1vZGVcbiAgICAvLyB0byBpdC5cbiAgICBpZiAoaW5pdC5jcmVkZW50aWFscyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXF1ZXN0LmNyZWRlbnRpYWxzID0gaW5pdC5jcmVkZW50aWFsc1xuICAgIH1cblxuICAgIC8vIDE4LiBJZiBpbml0W1wiY2FjaGVcIl0gZXhpc3RzLCB0aGVuIHNldCByZXF1ZXN04oCZcyBjYWNoZSBtb2RlIHRvIGl0LlxuICAgIGlmIChpbml0LmNhY2hlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlcXVlc3QuY2FjaGUgPSBpbml0LmNhY2hlXG4gICAgfVxuXG4gICAgLy8gMjEuIElmIHJlcXVlc3TigJlzIGNhY2hlIG1vZGUgaXMgXCJvbmx5LWlmLWNhY2hlZFwiIGFuZCByZXF1ZXN04oCZcyBtb2RlIGlzXG4gICAgLy8gbm90IFwic2FtZS1vcmlnaW5cIiwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAocmVxdWVzdC5jYWNoZSA9PT0gJ29ubHktaWYtY2FjaGVkJyAmJiByZXF1ZXN0Lm1vZGUgIT09ICdzYW1lLW9yaWdpbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIFwiJ29ubHktaWYtY2FjaGVkJyBjYW4gYmUgc2V0IG9ubHkgd2l0aCAnc2FtZS1vcmlnaW4nIG1vZGVcIlxuICAgICAgKVxuICAgIH1cblxuICAgIC8vIDIyLiBJZiBpbml0W1wicmVkaXJlY3RcIl0gZXhpc3RzLCB0aGVuIHNldCByZXF1ZXN04oCZcyByZWRpcmVjdCBtb2RlIHRvIGl0LlxuICAgIGlmIChpbml0LnJlZGlyZWN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlcXVlc3QucmVkaXJlY3QgPSBpbml0LnJlZGlyZWN0XG4gICAgfVxuXG4gICAgLy8gMjMuIElmIGluaXRbXCJpbnRlZ3JpdHlcIl0gZXhpc3RzLCB0aGVuIHNldCByZXF1ZXN04oCZcyBpbnRlZ3JpdHkgbWV0YWRhdGEgdG8gaXQuXG4gICAgaWYgKGluaXQuaW50ZWdyaXR5ICE9IG51bGwpIHtcbiAgICAgIHJlcXVlc3QuaW50ZWdyaXR5ID0gU3RyaW5nKGluaXQuaW50ZWdyaXR5KVxuICAgIH1cblxuICAgIC8vIDI0LiBJZiBpbml0W1wia2VlcGFsaXZlXCJdIGV4aXN0cywgdGhlbiBzZXQgcmVxdWVzdOKAmXMga2VlcGFsaXZlIHRvIGl0LlxuICAgIGlmIChpbml0LmtlZXBhbGl2ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXF1ZXN0LmtlZXBhbGl2ZSA9IEJvb2xlYW4oaW5pdC5rZWVwYWxpdmUpXG4gICAgfVxuXG4gICAgLy8gMjUuIElmIGluaXRbXCJtZXRob2RcIl0gZXhpc3RzLCB0aGVuOlxuICAgIGlmIChpbml0Lm1ldGhvZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyAxLiBMZXQgbWV0aG9kIGJlIGluaXRbXCJtZXRob2RcIl0uXG4gICAgICBsZXQgbWV0aG9kID0gaW5pdC5tZXRob2RcblxuICAgICAgLy8gMi4gSWYgbWV0aG9kIGlzIG5vdCBhIG1ldGhvZCBvciBtZXRob2QgaXMgYSBmb3JiaWRkZW4gbWV0aG9kLCB0aGVuXG4gICAgICAvLyB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGlmICghaXNWYWxpZEhUVFBUb2tlbihtZXRob2QpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCcke21ldGhvZH0nIGlzIG5vdCBhIHZhbGlkIEhUVFAgbWV0aG9kLmApXG4gICAgICB9XG5cbiAgICAgIGlmIChmb3JiaWRkZW5NZXRob2RzU2V0LmhhcyhtZXRob2QudG9VcHBlckNhc2UoKSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJyR7bWV0aG9kfScgSFRUUCBtZXRob2QgaXMgdW5zdXBwb3J0ZWQuYClcbiAgICAgIH1cblxuICAgICAgLy8gMy4gTm9ybWFsaXplIG1ldGhvZC5cbiAgICAgIG1ldGhvZCA9IG5vcm1hbGl6ZU1ldGhvZFJlY29yZFttZXRob2RdID8/IG5vcm1hbGl6ZU1ldGhvZChtZXRob2QpXG5cbiAgICAgIC8vIDQuIFNldCByZXF1ZXN04oCZcyBtZXRob2QgdG8gbWV0aG9kLlxuICAgICAgcmVxdWVzdC5tZXRob2QgPSBtZXRob2RcbiAgICB9XG5cbiAgICAvLyAyNi4gSWYgaW5pdFtcInNpZ25hbFwiXSBleGlzdHMsIHRoZW4gc2V0IHNpZ25hbCB0byBpdC5cbiAgICBpZiAoaW5pdC5zaWduYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgc2lnbmFsID0gaW5pdC5zaWduYWxcbiAgICB9XG5cbiAgICAvLyAyNy4gU2V0IHRoaXPigJlzIHJlcXVlc3QgdG8gcmVxdWVzdC5cbiAgICB0aGlzW2tTdGF0ZV0gPSByZXF1ZXN0XG5cbiAgICAvLyAyOC4gU2V0IHRoaXPigJlzIHNpZ25hbCB0byBhIG5ldyBBYm9ydFNpZ25hbCBvYmplY3Qgd2l0aCB0aGlz4oCZcyByZWxldmFudFxuICAgIC8vIFJlYWxtLlxuICAgIC8vIFRPRE86IGNvdWxkIHRoaXMgYmUgc2ltcGxpZmllZCB3aXRoIEFib3J0U2lnbmFsLmFueVxuICAgIC8vIChodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2RvbS1hYm9ydHNpZ25hbC1hbnkpXG4gICAgY29uc3QgYWMgPSBuZXcgQWJvcnRDb250cm9sbGVyKClcbiAgICB0aGlzW2tTaWduYWxdID0gYWMuc2lnbmFsXG4gICAgdGhpc1trU2lnbmFsXVtrUmVhbG1dID0gdGhpc1trUmVhbG1dXG5cbiAgICAvLyAyOS4gSWYgc2lnbmFsIGlzIG5vdCBudWxsLCB0aGVuIG1ha2UgdGhpc+KAmXMgc2lnbmFsIGZvbGxvdyBzaWduYWwuXG4gICAgaWYgKHNpZ25hbCAhPSBudWxsKSB7XG4gICAgICBpZiAoXG4gICAgICAgICFzaWduYWwgfHxcbiAgICAgICAgdHlwZW9mIHNpZ25hbC5hYm9ydGVkICE9PSAnYm9vbGVhbicgfHxcbiAgICAgICAgdHlwZW9mIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyICE9PSAnZnVuY3Rpb24nXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICBcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ1JlcXVlc3QnOiBtZW1iZXIgc2lnbmFsIGlzIG5vdCBvZiB0eXBlIEFib3J0U2lnbmFsLlwiXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgIGFjLmFib3J0KHNpZ25hbC5yZWFzb24pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBLZWVwIGEgc3Ryb25nIHJlZiB0byBhYyB3aGlsZSByZXF1ZXN0IG9iamVjdFxuICAgICAgICAvLyBpcyBhbGl2ZS4gVGhpcyBpcyBuZWVkZWQgdG8gcHJldmVudCBBYm9ydENvbnRyb2xsZXJcbiAgICAgICAgLy8gZnJvbSBiZWluZyBwcmVtYXR1cmVseSBnYXJiYWdlIGNvbGxlY3RlZC5cbiAgICAgICAgLy8gU2VlLCBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMTkyNi5cbiAgICAgICAgdGhpc1trQWJvcnRDb250cm9sbGVyXSA9IGFjXG5cbiAgICAgICAgY29uc3QgYWNSZWYgPSBuZXcgV2Vha1JlZihhYylcbiAgICAgICAgY29uc3QgYWJvcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3QgYWMgPSBhY1JlZi5kZXJlZigpXG4gICAgICAgICAgaWYgKGFjICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGFjLmFib3J0KHRoaXMucmVhc29uKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoaXJkLXBhcnR5IEFib3J0Q29udHJvbGxlcnMgbWF5IG5vdCB3b3JrIHdpdGggdGhlc2UuXG4gICAgICAgIC8vIFNlZSwgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvcHVsbC8xOTEwI2lzc3VlY29tbWVudC0xNDY0NDk1NjE5LlxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIElmIHRoZSBtYXggYW1vdW50IG9mIGxpc3RlbmVycyBpcyBlcXVhbCB0byB0aGUgZGVmYXVsdCwgaW5jcmVhc2UgaXRcbiAgICAgICAgICAvLyBUaGlzIGlzIG9ubHkgYXZhaWxhYmxlIGluIG5vZGUgPj0gdjE5LjkuMFxuICAgICAgICAgIGlmICh0eXBlb2YgZ2V0TWF4TGlzdGVuZXJzID09PSAnZnVuY3Rpb24nICYmIGdldE1heExpc3RlbmVycyhzaWduYWwpID09PSBkZWZhdWx0TWF4TGlzdGVuZXJzKSB7XG4gICAgICAgICAgICBzZXRNYXhMaXN0ZW5lcnMoMTAwLCBzaWduYWwpXG4gICAgICAgICAgfSBlbHNlIGlmIChnZXRFdmVudExpc3RlbmVycyhzaWduYWwsICdhYm9ydCcpLmxlbmd0aCA+PSBkZWZhdWx0TWF4TGlzdGVuZXJzKSB7XG4gICAgICAgICAgICBzZXRNYXhMaXN0ZW5lcnMoMTAwLCBzaWduYWwpXG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIHt9XG5cbiAgICAgICAgdXRpbC5hZGRBYm9ydExpc3RlbmVyKHNpZ25hbCwgYWJvcnQpXG4gICAgICAgIHJlcXVlc3RGaW5hbGl6ZXIucmVnaXN0ZXIoYWMsIHsgc2lnbmFsLCBhYm9ydCB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDMwLiBTZXQgdGhpc+KAmXMgaGVhZGVycyB0byBhIG5ldyBIZWFkZXJzIG9iamVjdCB3aXRoIHRoaXPigJlzIHJlbGV2YW50XG4gICAgLy8gUmVhbG0sIHdob3NlIGhlYWRlciBsaXN0IGlzIHJlcXVlc3TigJlzIGhlYWRlciBsaXN0IGFuZCBndWFyZCBpc1xuICAgIC8vIFwicmVxdWVzdFwiLlxuICAgIHRoaXNba0hlYWRlcnNdID0gbmV3IEhlYWRlcnMoa0NvbnN0cnVjdClcbiAgICB0aGlzW2tIZWFkZXJzXVtrSGVhZGVyc0xpc3RdID0gcmVxdWVzdC5oZWFkZXJzTGlzdFxuICAgIHRoaXNba0hlYWRlcnNdW2tHdWFyZF0gPSAncmVxdWVzdCdcbiAgICB0aGlzW2tIZWFkZXJzXVtrUmVhbG1dID0gdGhpc1trUmVhbG1dXG5cbiAgICAvLyAzMS4gSWYgdGhpc+KAmXMgcmVxdWVzdOKAmXMgbW9kZSBpcyBcIm5vLWNvcnNcIiwgdGhlbjpcbiAgICBpZiAobW9kZSA9PT0gJ25vLWNvcnMnKSB7XG4gICAgICAvLyAxLiBJZiB0aGlz4oCZcyByZXF1ZXN04oCZcyBtZXRob2QgaXMgbm90IGEgQ09SUy1zYWZlbGlzdGVkIG1ldGhvZCxcbiAgICAgIC8vIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICBpZiAoIWNvcnNTYWZlTGlzdGVkTWV0aG9kc1NldC5oYXMocmVxdWVzdC5tZXRob2QpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgYCcke3JlcXVlc3QubWV0aG9kfSBpcyB1bnN1cHBvcnRlZCBpbiBuby1jb3JzIG1vZGUuYFxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIFNldCB0aGlz4oCZcyBoZWFkZXJz4oCZcyBndWFyZCB0byBcInJlcXVlc3Qtbm8tY29yc1wiLlxuICAgICAgdGhpc1trSGVhZGVyc11ba0d1YXJkXSA9ICdyZXF1ZXN0LW5vLWNvcnMnXG4gICAgfVxuXG4gICAgLy8gMzIuIElmIGluaXQgaXMgbm90IGVtcHR5LCB0aGVuOlxuICAgIGlmIChpbml0SGFzS2V5KSB7XG4gICAgICAvKiogQHR5cGUge0hlYWRlcnNMaXN0fSAqL1xuICAgICAgY29uc3QgaGVhZGVyc0xpc3QgPSB0aGlzW2tIZWFkZXJzXVtrSGVhZGVyc0xpc3RdXG4gICAgICAvLyAxLiBMZXQgaGVhZGVycyBiZSBhIGNvcHkgb2YgdGhpc+KAmXMgaGVhZGVycyBhbmQgaXRzIGFzc29jaWF0ZWQgaGVhZGVyXG4gICAgICAvLyBsaXN0LlxuICAgICAgLy8gMi4gSWYgaW5pdFtcImhlYWRlcnNcIl0gZXhpc3RzLCB0aGVuIHNldCBoZWFkZXJzIHRvIGluaXRbXCJoZWFkZXJzXCJdLlxuICAgICAgY29uc3QgaGVhZGVycyA9IGluaXQuaGVhZGVycyAhPT0gdW5kZWZpbmVkID8gaW5pdC5oZWFkZXJzIDogbmV3IEhlYWRlcnNMaXN0KGhlYWRlcnNMaXN0KVxuXG4gICAgICAvLyAzLiBFbXB0eSB0aGlz4oCZcyBoZWFkZXJz4oCZcyBoZWFkZXIgbGlzdC5cbiAgICAgIGhlYWRlcnNMaXN0LmNsZWFyKClcblxuICAgICAgLy8gNC4gSWYgaGVhZGVycyBpcyBhIEhlYWRlcnMgb2JqZWN0LCB0aGVuIGZvciBlYWNoIGhlYWRlciBpbiBpdHMgaGVhZGVyXG4gICAgICAvLyBsaXN0LCBhcHBlbmQgaGVhZGVy4oCZcyBuYW1lL2hlYWRlcuKAmXMgdmFsdWUgdG8gdGhpc+KAmXMgaGVhZGVycy5cbiAgICAgIGlmIChoZWFkZXJzIGluc3RhbmNlb2YgSGVhZGVyc0xpc3QpIHtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIGhlYWRlcnMpIHtcbiAgICAgICAgICBoZWFkZXJzTGlzdC5hcHBlbmQoa2V5LCB2YWwpXG4gICAgICAgIH1cbiAgICAgICAgLy8gTm90ZTogQ29weSB0aGUgYHNldC1jb29raWVgIG1ldGEtZGF0YS5cbiAgICAgICAgaGVhZGVyc0xpc3QuY29va2llcyA9IGhlYWRlcnMuY29va2llc1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gNS4gT3RoZXJ3aXNlLCBmaWxsIHRoaXPigJlzIGhlYWRlcnMgd2l0aCBoZWFkZXJzLlxuICAgICAgICBmaWxsSGVhZGVycyh0aGlzW2tIZWFkZXJzXSwgaGVhZGVycylcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAzMy4gTGV0IGlucHV0Qm9keSBiZSBpbnB1dOKAmXMgcmVxdWVzdOKAmXMgYm9keSBpZiBpbnB1dCBpcyBhIFJlcXVlc3RcbiAgICAvLyBvYmplY3Q7IG90aGVyd2lzZSBudWxsLlxuICAgIGNvbnN0IGlucHV0Qm9keSA9IGlucHV0IGluc3RhbmNlb2YgUmVxdWVzdCA/IGlucHV0W2tTdGF0ZV0uYm9keSA6IG51bGxcblxuICAgIC8vIDM0LiBJZiBlaXRoZXIgaW5pdFtcImJvZHlcIl0gZXhpc3RzIGFuZCBpcyBub24tbnVsbCBvciBpbnB1dEJvZHkgaXNcbiAgICAvLyBub24tbnVsbCwgYW5kIHJlcXVlc3TigJlzIG1ldGhvZCBpcyBgR0VUYCBvciBgSEVBRGAsIHRoZW4gdGhyb3cgYVxuICAgIC8vIFR5cGVFcnJvci5cbiAgICBpZiAoXG4gICAgICAoaW5pdC5ib2R5ICE9IG51bGwgfHwgaW5wdXRCb2R5ICE9IG51bGwpICYmXG4gICAgICAocmVxdWVzdC5tZXRob2QgPT09ICdHRVQnIHx8IHJlcXVlc3QubWV0aG9kID09PSAnSEVBRCcpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZXF1ZXN0IHdpdGggR0VUL0hFQUQgbWV0aG9kIGNhbm5vdCBoYXZlIGJvZHkuJylcbiAgICB9XG5cbiAgICAvLyAzNS4gTGV0IGluaXRCb2R5IGJlIG51bGwuXG4gICAgbGV0IGluaXRCb2R5ID0gbnVsbFxuXG4gICAgLy8gMzYuIElmIGluaXRbXCJib2R5XCJdIGV4aXN0cyBhbmQgaXMgbm9uLW51bGwsIHRoZW46XG4gICAgaWYgKGluaXQuYm9keSAhPSBudWxsKSB7XG4gICAgICAvLyAxLiBMZXQgQ29udGVudC1UeXBlIGJlIG51bGwuXG4gICAgICAvLyAyLiBTZXQgaW5pdEJvZHkgYW5kIENvbnRlbnQtVHlwZSB0byB0aGUgcmVzdWx0IG9mIGV4dHJhY3RpbmdcbiAgICAgIC8vIGluaXRbXCJib2R5XCJdLCB3aXRoIGtlZXBhbGl2ZSBzZXQgdG8gcmVxdWVzdOKAmXMga2VlcGFsaXZlLlxuICAgICAgY29uc3QgW2V4dHJhY3RlZEJvZHksIGNvbnRlbnRUeXBlXSA9IGV4dHJhY3RCb2R5KFxuICAgICAgICBpbml0LmJvZHksXG4gICAgICAgIHJlcXVlc3Qua2VlcGFsaXZlXG4gICAgICApXG4gICAgICBpbml0Qm9keSA9IGV4dHJhY3RlZEJvZHlcblxuICAgICAgLy8gMywgSWYgQ29udGVudC1UeXBlIGlzIG5vbi1udWxsIGFuZCB0aGlz4oCZcyBoZWFkZXJz4oCZcyBoZWFkZXIgbGlzdCBkb2VzXG4gICAgICAvLyBub3QgY29udGFpbiBgQ29udGVudC1UeXBlYCwgdGhlbiBhcHBlbmQgYENvbnRlbnQtVHlwZWAvQ29udGVudC1UeXBlIHRvXG4gICAgICAvLyB0aGlz4oCZcyBoZWFkZXJzLlxuICAgICAgaWYgKGNvbnRlbnRUeXBlICYmICF0aGlzW2tIZWFkZXJzXVtrSGVhZGVyc0xpc3RdLmNvbnRhaW5zKCdjb250ZW50LXR5cGUnKSkge1xuICAgICAgICB0aGlzW2tIZWFkZXJzXS5hcHBlbmQoJ2NvbnRlbnQtdHlwZScsIGNvbnRlbnRUeXBlKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDM3LiBMZXQgaW5wdXRPckluaXRCb2R5IGJlIGluaXRCb2R5IGlmIGl0IGlzIG5vbi1udWxsOyBvdGhlcndpc2VcbiAgICAvLyBpbnB1dEJvZHkuXG4gICAgY29uc3QgaW5wdXRPckluaXRCb2R5ID0gaW5pdEJvZHkgPz8gaW5wdXRCb2R5XG5cbiAgICAvLyAzOC4gSWYgaW5wdXRPckluaXRCb2R5IGlzIG5vbi1udWxsIGFuZCBpbnB1dE9ySW5pdEJvZHnigJlzIHNvdXJjZSBpc1xuICAgIC8vIG51bGwsIHRoZW46XG4gICAgaWYgKGlucHV0T3JJbml0Qm9keSAhPSBudWxsICYmIGlucHV0T3JJbml0Qm9keS5zb3VyY2UgPT0gbnVsbCkge1xuICAgICAgLy8gMS4gSWYgaW5pdEJvZHkgaXMgbm9uLW51bGwgYW5kIGluaXRbXCJkdXBsZXhcIl0gZG9lcyBub3QgZXhpc3QsXG4gICAgICAvLyAgICB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgaWYgKGluaXRCb2R5ICE9IG51bGwgJiYgaW5pdC5kdXBsZXggPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZXF1ZXN0SW5pdDogZHVwbGV4IG9wdGlvbiBpcyByZXF1aXJlZCB3aGVuIHNlbmRpbmcgYSBib2R5LicpXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIElmIHRoaXPigJlzIHJlcXVlc3TigJlzIG1vZGUgaXMgbmVpdGhlciBcInNhbWUtb3JpZ2luXCIgbm9yIFwiY29yc1wiLFxuICAgICAgLy8gdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGlmIChyZXF1ZXN0Lm1vZGUgIT09ICdzYW1lLW9yaWdpbicgJiYgcmVxdWVzdC5tb2RlICE9PSAnY29ycycpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAnSWYgcmVxdWVzdCBpcyBtYWRlIGZyb20gUmVhZGFibGVTdHJlYW0sIG1vZGUgc2hvdWxkIGJlIFwic2FtZS1vcmlnaW5cIiBvciBcImNvcnNcIidcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICAvLyAzLiBTZXQgdGhpc+KAmXMgcmVxdWVzdOKAmXMgdXNlLUNPUlMtcHJlZmxpZ2h0IGZsYWcuXG4gICAgICByZXF1ZXN0LnVzZUNPUlNQcmVmbGlnaHRGbGFnID0gdHJ1ZVxuICAgIH1cblxuICAgIC8vIDM5LiBMZXQgZmluYWxCb2R5IGJlIGlucHV0T3JJbml0Qm9keS5cbiAgICBsZXQgZmluYWxCb2R5ID0gaW5wdXRPckluaXRCb2R5XG5cbiAgICAvLyA0MC4gSWYgaW5pdEJvZHkgaXMgbnVsbCBhbmQgaW5wdXRCb2R5IGlzIG5vbi1udWxsLCB0aGVuOlxuICAgIGlmIChpbml0Qm9keSA9PSBudWxsICYmIGlucHV0Qm9keSAhPSBudWxsKSB7XG4gICAgICAvLyAxLiBJZiBpbnB1dCBpcyB1bnVzYWJsZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGlmICh1dGlsLmlzRGlzdHVyYmVkKGlucHV0Qm9keS5zdHJlYW0pIHx8IGlucHV0Qm9keS5zdHJlYW0ubG9ja2VkKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgJ0Nhbm5vdCBjb25zdHJ1Y3QgYSBSZXF1ZXN0IHdpdGggYSBSZXF1ZXN0IG9iamVjdCB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gdXNlZC4nXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgLy8gMi4gU2V0IGZpbmFsQm9keSB0byB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEgcHJveHkgZm9yIGlucHV0Qm9keS5cbiAgICAgIGlmICghVHJhbnNmb3JtU3RyZWFtKSB7XG4gICAgICAgIFRyYW5zZm9ybVN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbS93ZWInKS5UcmFuc2Zvcm1TdHJlYW1cbiAgICAgIH1cblxuICAgICAgLy8gaHR0cHM6Ly9zdHJlYW1zLnNwZWMud2hhdHdnLm9yZy8jcmVhZGFibGVzdHJlYW0tY3JlYXRlLWEtcHJveHlcbiAgICAgIGNvbnN0IGlkZW50aXR5VHJhbnNmb3JtID0gbmV3IFRyYW5zZm9ybVN0cmVhbSgpXG4gICAgICBpbnB1dEJvZHkuc3RyZWFtLnBpcGVUaHJvdWdoKGlkZW50aXR5VHJhbnNmb3JtKVxuICAgICAgZmluYWxCb2R5ID0ge1xuICAgICAgICBzb3VyY2U6IGlucHV0Qm9keS5zb3VyY2UsXG4gICAgICAgIGxlbmd0aDogaW5wdXRCb2R5Lmxlbmd0aCxcbiAgICAgICAgc3RyZWFtOiBpZGVudGl0eVRyYW5zZm9ybS5yZWFkYWJsZVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDQxLiBTZXQgdGhpc+KAmXMgcmVxdWVzdOKAmXMgYm9keSB0byBmaW5hbEJvZHkuXG4gICAgdGhpc1trU3RhdGVdLmJvZHkgPSBmaW5hbEJvZHlcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVxdWVzdOKAmXMgSFRUUCBtZXRob2QsIHdoaWNoIGlzIFwiR0VUXCIgYnkgZGVmYXVsdC5cbiAgZ2V0IG1ldGhvZCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBtZXRob2QgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc+KAmXMgcmVxdWVzdOKAmXMgbWV0aG9kLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ubWV0aG9kXG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSBVUkwgb2YgcmVxdWVzdCBhcyBhIHN0cmluZy5cbiAgZ2V0IHVybCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSB1cmwgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc+KAmXMgcmVxdWVzdOKAmXMgVVJMLCBzZXJpYWxpemVkLlxuICAgIHJldHVybiBVUkxTZXJpYWxpemVyKHRoaXNba1N0YXRlXS51cmwpXG4gIH1cblxuICAvLyBSZXR1cm5zIGEgSGVhZGVycyBvYmplY3QgY29uc2lzdGluZyBvZiB0aGUgaGVhZGVycyBhc3NvY2lhdGVkIHdpdGggcmVxdWVzdC5cbiAgLy8gTm90ZSB0aGF0IGhlYWRlcnMgYWRkZWQgaW4gdGhlIG5ldHdvcmsgbGF5ZXIgYnkgdGhlIHVzZXIgYWdlbnQgd2lsbCBub3RcbiAgLy8gYmUgYWNjb3VudGVkIGZvciBpbiB0aGlzIG9iamVjdCwgZS5nLiwgdGhlIFwiSG9zdFwiIGhlYWRlci5cbiAgZ2V0IGhlYWRlcnMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgaGVhZGVycyBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlz4oCZcyBoZWFkZXJzLlxuICAgIHJldHVybiB0aGlzW2tIZWFkZXJzXVxuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUga2luZCBvZiByZXNvdXJjZSByZXF1ZXN0ZWQgYnkgcmVxdWVzdCwgZS5nLiwgXCJkb2N1bWVudFwiXG4gIC8vIG9yIFwic2NyaXB0XCIuXG4gIGdldCBkZXN0aW5hdGlvbiAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBkZXN0aW5hdGlvbiBnZXR0ZXIgYXJlIHRvIHJldHVybiB0aGlz4oCZcyByZXF1ZXN04oCZcyBkZXN0aW5hdGlvbi5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmRlc3RpbmF0aW9uXG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSByZWZlcnJlciBvZiByZXF1ZXN0LiBJdHMgdmFsdWUgY2FuIGJlIGEgc2FtZS1vcmlnaW4gVVJMIGlmXG4gIC8vIGV4cGxpY2l0bHkgc2V0IGluIGluaXQsIHRoZSBlbXB0eSBzdHJpbmcgdG8gaW5kaWNhdGUgbm8gcmVmZXJyZXIsIGFuZFxuICAvLyBcImFib3V0OmNsaWVudFwiIHdoZW4gZGVmYXVsdGluZyB0byB0aGUgZ2xvYmFs4oCZcyBkZWZhdWx0LiBUaGlzIGlzIHVzZWRcbiAgLy8gZHVyaW5nIGZldGNoaW5nIHRvIGRldGVybWluZSB0aGUgdmFsdWUgb2YgdGhlIGBSZWZlcmVyYCBoZWFkZXIgb2YgdGhlXG4gIC8vIHJlcXVlc3QgYmVpbmcgbWFkZS5cbiAgZ2V0IHJlZmVycmVyICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gMS4gSWYgdGhpc+KAmXMgcmVxdWVzdOKAmXMgcmVmZXJyZXIgaXMgXCJuby1yZWZlcnJlclwiLCB0aGVuIHJldHVybiB0aGVcbiAgICAvLyBlbXB0eSBzdHJpbmcuXG4gICAgaWYgKHRoaXNba1N0YXRlXS5yZWZlcnJlciA9PT0gJ25vLXJlZmVycmVyJykge1xuICAgICAgcmV0dXJuICcnXG4gICAgfVxuXG4gICAgLy8gMi4gSWYgdGhpc+KAmXMgcmVxdWVzdOKAmXMgcmVmZXJyZXIgaXMgXCJjbGllbnRcIiwgdGhlbiByZXR1cm5cbiAgICAvLyBcImFib3V0OmNsaWVudFwiLlxuICAgIGlmICh0aGlzW2tTdGF0ZV0ucmVmZXJyZXIgPT09ICdjbGllbnQnKSB7XG4gICAgICByZXR1cm4gJ2Fib3V0OmNsaWVudCdcbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gdGhpc+KAmXMgcmVxdWVzdOKAmXMgcmVmZXJyZXIsIHNlcmlhbGl6ZWQuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5yZWZlcnJlci50b1N0cmluZygpXG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSByZWZlcnJlciBwb2xpY3kgYXNzb2NpYXRlZCB3aXRoIHJlcXVlc3QuXG4gIC8vIFRoaXMgaXMgdXNlZCBkdXJpbmcgZmV0Y2hpbmcgdG8gY29tcHV0ZSB0aGUgdmFsdWUgb2YgdGhlIHJlcXVlc3TigJlzXG4gIC8vIHJlZmVycmVyLlxuICBnZXQgcmVmZXJyZXJQb2xpY3kgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgcmVmZXJyZXJQb2xpY3kgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc+KAmXMgcmVxdWVzdOKAmXMgcmVmZXJyZXIgcG9saWN5LlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ucmVmZXJyZXJQb2xpY3lcbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIG1vZGUgYXNzb2NpYXRlZCB3aXRoIHJlcXVlc3QsIHdoaWNoIGlzIGEgc3RyaW5nIGluZGljYXRpbmdcbiAgLy8gd2hldGhlciB0aGUgcmVxdWVzdCB3aWxsIHVzZSBDT1JTLCBvciB3aWxsIGJlIHJlc3RyaWN0ZWQgdG8gc2FtZS1vcmlnaW5cbiAgLy8gVVJMcy5cbiAgZ2V0IG1vZGUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgbW9kZSBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlz4oCZcyByZXF1ZXN04oCZcyBtb2RlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ubW9kZVxuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgY3JlZGVudGlhbHMgbW9kZSBhc3NvY2lhdGVkIHdpdGggcmVxdWVzdCxcbiAgLy8gd2hpY2ggaXMgYSBzdHJpbmcgaW5kaWNhdGluZyB3aGV0aGVyIGNyZWRlbnRpYWxzIHdpbGwgYmUgc2VudCB3aXRoIHRoZVxuICAvLyByZXF1ZXN0IGFsd2F5cywgbmV2ZXIsIG9yIG9ubHkgd2hlbiBzZW50IHRvIGEgc2FtZS1vcmlnaW4gVVJMLlxuICBnZXQgY3JlZGVudGlhbHMgKCkge1xuICAgIC8vIFRoZSBjcmVkZW50aWFscyBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlz4oCZcyByZXF1ZXN04oCZcyBjcmVkZW50aWFscyBtb2RlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uY3JlZGVudGlhbHNcbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIGNhY2hlIG1vZGUgYXNzb2NpYXRlZCB3aXRoIHJlcXVlc3QsXG4gIC8vIHdoaWNoIGlzIGEgc3RyaW5nIGluZGljYXRpbmcgaG93IHRoZSByZXF1ZXN0IHdpbGxcbiAgLy8gaW50ZXJhY3Qgd2l0aCB0aGUgYnJvd3NlcuKAmXMgY2FjaGUgd2hlbiBmZXRjaGluZy5cbiAgZ2V0IGNhY2hlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIGNhY2hlIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXPigJlzIHJlcXVlc3TigJlzIGNhY2hlIG1vZGUuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5jYWNoZVxuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgcmVkaXJlY3QgbW9kZSBhc3NvY2lhdGVkIHdpdGggcmVxdWVzdCxcbiAgLy8gd2hpY2ggaXMgYSBzdHJpbmcgaW5kaWNhdGluZyBob3cgcmVkaXJlY3RzIGZvciB0aGVcbiAgLy8gcmVxdWVzdCB3aWxsIGJlIGhhbmRsZWQgZHVyaW5nIGZldGNoaW5nLiBBIHJlcXVlc3RcbiAgLy8gd2lsbCBmb2xsb3cgcmVkaXJlY3RzIGJ5IGRlZmF1bHQuXG4gIGdldCByZWRpcmVjdCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSByZWRpcmVjdCBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlz4oCZcyByZXF1ZXN04oCZcyByZWRpcmVjdCBtb2RlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ucmVkaXJlY3RcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVxdWVzdOKAmXMgc3VicmVzb3VyY2UgaW50ZWdyaXR5IG1ldGFkYXRhLCB3aGljaCBpcyBhXG4gIC8vIGNyeXB0b2dyYXBoaWMgaGFzaCBvZiB0aGUgcmVzb3VyY2UgYmVpbmcgZmV0Y2hlZC4gSXRzIHZhbHVlXG4gIC8vIGNvbnNpc3RzIG9mIG11bHRpcGxlIGhhc2hlcyBzZXBhcmF0ZWQgYnkgd2hpdGVzcGFjZS4gW1NSSV1cbiAgZ2V0IGludGVncml0eSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBpbnRlZ3JpdHkgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc+KAmXMgcmVxdWVzdOKAmXMgaW50ZWdyaXR5XG4gICAgLy8gbWV0YWRhdGEuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5pbnRlZ3JpdHlcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgcmVxdWVzdCBjYW4gb3V0bGl2ZSB0aGVcbiAgLy8gZ2xvYmFsIGluIHdoaWNoIGl0IHdhcyBjcmVhdGVkLlxuICBnZXQga2VlcGFsaXZlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIGtlZXBhbGl2ZSBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlz4oCZcyByZXF1ZXN04oCZcyBrZWVwYWxpdmUuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5rZWVwYWxpdmVcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgcmVxdWVzdCBpcyBmb3IgYSByZWxvYWRcbiAgLy8gbmF2aWdhdGlvbi5cbiAgZ2V0IGlzUmVsb2FkTmF2aWdhdGlvbiAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBpc1JlbG9hZE5hdmlnYXRpb24gZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdHJ1ZSBpZiB0aGlz4oCZc1xuICAgIC8vIHJlcXVlc3TigJlzIHJlbG9hZC1uYXZpZ2F0aW9uIGZsYWcgaXMgc2V0OyBvdGhlcndpc2UgZmFsc2UuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5yZWxvYWROYXZpZ2F0aW9uXG4gIH1cblxuICAvLyBSZXR1cm5zIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90IHJlcXVlc3QgaXMgZm9yIGEgaGlzdG9yeVxuICAvLyBuYXZpZ2F0aW9uIChhLmsuYS4gYmFjay1mb3dhcmQgbmF2aWdhdGlvbikuXG4gIGdldCBpc0hpc3RvcnlOYXZpZ2F0aW9uICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIGlzSGlzdG9yeU5hdmlnYXRpb24gZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdHJ1ZSBpZiB0aGlz4oCZcyByZXF1ZXN04oCZc1xuICAgIC8vIGhpc3RvcnktbmF2aWdhdGlvbiBmbGFnIGlzIHNldDsgb3RoZXJ3aXNlIGZhbHNlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uaGlzdG9yeU5hdmlnYXRpb25cbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIHNpZ25hbCBhc3NvY2lhdGVkIHdpdGggcmVxdWVzdCwgd2hpY2ggaXMgYW4gQWJvcnRTaWduYWxcbiAgLy8gb2JqZWN0IGluZGljYXRpbmcgd2hldGhlciBvciBub3QgcmVxdWVzdCBoYXMgYmVlbiBhYm9ydGVkLCBhbmQgaXRzXG4gIC8vIGFib3J0IGV2ZW50IGhhbmRsZXIuXG4gIGdldCBzaWduYWwgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgc2lnbmFsIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXPigJlzIHNpZ25hbC5cbiAgICByZXR1cm4gdGhpc1trU2lnbmFsXVxuICB9XG5cbiAgZ2V0IGJvZHkgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmJvZHkgPyB0aGlzW2tTdGF0ZV0uYm9keS5zdHJlYW0gOiBudWxsXG4gIH1cblxuICBnZXQgYm9keVVzZWQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICByZXR1cm4gISF0aGlzW2tTdGF0ZV0uYm9keSAmJiB1dGlsLmlzRGlzdHVyYmVkKHRoaXNba1N0YXRlXS5ib2R5LnN0cmVhbSlcbiAgfVxuXG4gIGdldCBkdXBsZXggKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICByZXR1cm4gJ2hhbGYnXG4gIH1cblxuICAvLyBSZXR1cm5zIGEgY2xvbmUgb2YgcmVxdWVzdC5cbiAgY2xvbmUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyAxLiBJZiB0aGlzIGlzIHVudXNhYmxlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICh0aGlzLmJvZHlVc2VkIHx8IHRoaXMuYm9keT8ubG9ja2VkKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd1bnVzYWJsZScpXG4gICAgfVxuXG4gICAgLy8gMi4gTGV0IGNsb25lZFJlcXVlc3QgYmUgdGhlIHJlc3VsdCBvZiBjbG9uaW5nIHRoaXPigJlzIHJlcXVlc3QuXG4gICAgY29uc3QgY2xvbmVkUmVxdWVzdCA9IGNsb25lUmVxdWVzdCh0aGlzW2tTdGF0ZV0pXG5cbiAgICAvLyAzLiBMZXQgY2xvbmVkUmVxdWVzdE9iamVjdCBiZSB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEgUmVxdWVzdCBvYmplY3QsXG4gICAgLy8gZ2l2ZW4gY2xvbmVkUmVxdWVzdCwgdGhpc+KAmXMgaGVhZGVyc+KAmXMgZ3VhcmQsIGFuZCB0aGlz4oCZcyByZWxldmFudCBSZWFsbS5cbiAgICBjb25zdCBjbG9uZWRSZXF1ZXN0T2JqZWN0ID0gbmV3IFJlcXVlc3Qoa0NvbnN0cnVjdClcbiAgICBjbG9uZWRSZXF1ZXN0T2JqZWN0W2tTdGF0ZV0gPSBjbG9uZWRSZXF1ZXN0XG4gICAgY2xvbmVkUmVxdWVzdE9iamVjdFtrUmVhbG1dID0gdGhpc1trUmVhbG1dXG4gICAgY2xvbmVkUmVxdWVzdE9iamVjdFtrSGVhZGVyc10gPSBuZXcgSGVhZGVycyhrQ29uc3RydWN0KVxuICAgIGNsb25lZFJlcXVlc3RPYmplY3Rba0hlYWRlcnNdW2tIZWFkZXJzTGlzdF0gPSBjbG9uZWRSZXF1ZXN0LmhlYWRlcnNMaXN0XG4gICAgY2xvbmVkUmVxdWVzdE9iamVjdFtrSGVhZGVyc11ba0d1YXJkXSA9IHRoaXNba0hlYWRlcnNdW2tHdWFyZF1cbiAgICBjbG9uZWRSZXF1ZXN0T2JqZWN0W2tIZWFkZXJzXVtrUmVhbG1dID0gdGhpc1trSGVhZGVyc11ba1JlYWxtXVxuXG4gICAgLy8gNC4gTWFrZSBjbG9uZWRSZXF1ZXN0T2JqZWN04oCZcyBzaWduYWwgZm9sbG93IHRoaXPigJlzIHNpZ25hbC5cbiAgICBjb25zdCBhYyA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuICAgIGlmICh0aGlzLnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICBhYy5hYm9ydCh0aGlzLnNpZ25hbC5yZWFzb24pXG4gICAgfSBlbHNlIHtcbiAgICAgIHV0aWwuYWRkQWJvcnRMaXN0ZW5lcihcbiAgICAgICAgdGhpcy5zaWduYWwsXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBhYy5hYm9ydCh0aGlzLnNpZ25hbC5yZWFzb24pXG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9XG4gICAgY2xvbmVkUmVxdWVzdE9iamVjdFtrU2lnbmFsXSA9IGFjLnNpZ25hbFxuXG4gICAgLy8gNC4gUmV0dXJuIGNsb25lZFJlcXVlc3RPYmplY3QuXG4gICAgcmV0dXJuIGNsb25lZFJlcXVlc3RPYmplY3RcbiAgfVxufVxuXG5taXhpbkJvZHkoUmVxdWVzdClcblxuZnVuY3Rpb24gbWFrZVJlcXVlc3QgKGluaXQpIHtcbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3RzXG4gIGNvbnN0IHJlcXVlc3QgPSB7XG4gICAgbWV0aG9kOiAnR0VUJyxcbiAgICBsb2NhbFVSTHNPbmx5OiBmYWxzZSxcbiAgICB1bnNhZmVSZXF1ZXN0OiBmYWxzZSxcbiAgICBib2R5OiBudWxsLFxuICAgIGNsaWVudDogbnVsbCxcbiAgICByZXNlcnZlZENsaWVudDogbnVsbCxcbiAgICByZXBsYWNlc0NsaWVudElkOiAnJyxcbiAgICB3aW5kb3c6ICdjbGllbnQnLFxuICAgIGtlZXBhbGl2ZTogZmFsc2UsXG4gICAgc2VydmljZVdvcmtlcnM6ICdhbGwnLFxuICAgIGluaXRpYXRvcjogJycsXG4gICAgZGVzdGluYXRpb246ICcnLFxuICAgIHByaW9yaXR5OiBudWxsLFxuICAgIG9yaWdpbjogJ2NsaWVudCcsXG4gICAgcG9saWN5Q29udGFpbmVyOiAnY2xpZW50JyxcbiAgICByZWZlcnJlcjogJ2NsaWVudCcsXG4gICAgcmVmZXJyZXJQb2xpY3k6ICcnLFxuICAgIG1vZGU6ICduby1jb3JzJyxcbiAgICB1c2VDT1JTUHJlZmxpZ2h0RmxhZzogZmFsc2UsXG4gICAgY3JlZGVudGlhbHM6ICdzYW1lLW9yaWdpbicsXG4gICAgdXNlQ3JlZGVudGlhbHM6IGZhbHNlLFxuICAgIGNhY2hlOiAnZGVmYXVsdCcsXG4gICAgcmVkaXJlY3Q6ICdmb2xsb3cnLFxuICAgIGludGVncml0eTogJycsXG4gICAgY3J5cHRvR3JhcGhpY3NOb25jZU1ldGFkYXRhOiAnJyxcbiAgICBwYXJzZXJNZXRhZGF0YTogJycsXG4gICAgcmVsb2FkTmF2aWdhdGlvbjogZmFsc2UsXG4gICAgaGlzdG9yeU5hdmlnYXRpb246IGZhbHNlLFxuICAgIHVzZXJBY3RpdmF0aW9uOiBmYWxzZSxcbiAgICB0YWludGVkT3JpZ2luOiBmYWxzZSxcbiAgICByZWRpcmVjdENvdW50OiAwLFxuICAgIHJlc3BvbnNlVGFpbnRpbmc6ICdiYXNpYycsXG4gICAgcHJldmVudE5vQ2FjaGVDYWNoZUNvbnRyb2xIZWFkZXJNb2RpZmljYXRpb246IGZhbHNlLFxuICAgIGRvbmU6IGZhbHNlLFxuICAgIHRpbWluZ0FsbG93RmFpbGVkOiBmYWxzZSxcbiAgICAuLi5pbml0LFxuICAgIGhlYWRlcnNMaXN0OiBpbml0LmhlYWRlcnNMaXN0XG4gICAgICA/IG5ldyBIZWFkZXJzTGlzdChpbml0LmhlYWRlcnNMaXN0KVxuICAgICAgOiBuZXcgSGVhZGVyc0xpc3QoKVxuICB9XG4gIHJlcXVlc3QudXJsID0gcmVxdWVzdC51cmxMaXN0WzBdXG4gIHJldHVybiByZXF1ZXN0XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LXJlcXVlc3QtY2xvbmVcbmZ1bmN0aW9uIGNsb25lUmVxdWVzdCAocmVxdWVzdCkge1xuICAvLyBUbyBjbG9uZSBhIHJlcXVlc3QgcmVxdWVzdCwgcnVuIHRoZXNlIHN0ZXBzOlxuXG4gIC8vIDEuIExldCBuZXdSZXF1ZXN0IGJlIGEgY29weSBvZiByZXF1ZXN0LCBleGNlcHQgZm9yIGl0cyBib2R5LlxuICBjb25zdCBuZXdSZXF1ZXN0ID0gbWFrZVJlcXVlc3QoeyAuLi5yZXF1ZXN0LCBib2R5OiBudWxsIH0pXG5cbiAgLy8gMi4gSWYgcmVxdWVzdOKAmXMgYm9keSBpcyBub24tbnVsbCwgc2V0IG5ld1JlcXVlc3TigJlzIGJvZHkgdG8gdGhlXG4gIC8vIHJlc3VsdCBvZiBjbG9uaW5nIHJlcXVlc3TigJlzIGJvZHkuXG4gIGlmIChyZXF1ZXN0LmJvZHkgIT0gbnVsbCkge1xuICAgIG5ld1JlcXVlc3QuYm9keSA9IGNsb25lQm9keShyZXF1ZXN0LmJvZHkpXG4gIH1cblxuICAvLyAzLiBSZXR1cm4gbmV3UmVxdWVzdC5cbiAgcmV0dXJuIG5ld1JlcXVlc3Rcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUmVxdWVzdC5wcm90b3R5cGUsIHtcbiAgbWV0aG9kOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICB1cmw6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGhlYWRlcnM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlZGlyZWN0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBjbG9uZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgc2lnbmFsOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBkdXBsZXg6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGRlc3RpbmF0aW9uOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBib2R5OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBib2R5VXNlZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgaXNIaXN0b3J5TmF2aWdhdGlvbjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgaXNSZWxvYWROYXZpZ2F0aW9uOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBrZWVwYWxpdmU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGludGVncml0eToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgY2FjaGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNyZWRlbnRpYWxzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBhdHRyaWJ1dGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlZmVycmVyUG9saWN5OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWZlcnJlcjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgbW9kZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ1JlcXVlc3QnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9XG59KVxuXG53ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0ID0gd2ViaWRsLmludGVyZmFjZUNvbnZlcnRlcihcbiAgUmVxdWVzdFxuKVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdGluZm9cbndlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvID0gZnVuY3Rpb24gKFYpIHtcbiAgaWYgKHR5cGVvZiBWID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcoVilcbiAgfVxuXG4gIGlmIChWIGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0KFYpXG4gIH1cblxuICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKFYpXG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLkFib3J0U2lnbmFsID0gd2ViaWRsLmludGVyZmFjZUNvbnZlcnRlcihcbiAgQWJvcnRTaWduYWxcbilcblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3Rpbml0XG53ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5pdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGtleTogJ21ldGhvZCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdoZWFkZXJzJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkhlYWRlcnNJbml0XG4gIH0sXG4gIHtcbiAgICBrZXk6ICdib2R5JyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcihcbiAgICAgIHdlYmlkbC5jb252ZXJ0ZXJzLkJvZHlJbml0XG4gICAgKVxuICB9LFxuICB7XG4gICAga2V5OiAncmVmZXJyZXInLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdyZWZlcnJlclBvbGljeScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAgLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1yZWZlcnJlci1wb2xpY3kvI3JlZmVycmVyLXBvbGljeVxuICAgIGFsbG93ZWRWYWx1ZXM6IHJlZmVycmVyUG9saWN5XG4gIH0sXG4gIHtcbiAgICBrZXk6ICdtb2RlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1yZXF1ZXN0LW1vZGVcbiAgICBhbGxvd2VkVmFsdWVzOiByZXF1ZXN0TW9kZVxuICB9LFxuICB7XG4gICAga2V5OiAnY3JlZGVudGlhbHMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXF1ZXN0Y3JlZGVudGlhbHNcbiAgICBhbGxvd2VkVmFsdWVzOiByZXF1ZXN0Q3JlZGVudGlhbHNcbiAgfSxcbiAge1xuICAgIGtleTogJ2NhY2hlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdGNhY2hlXG4gICAgYWxsb3dlZFZhbHVlczogcmVxdWVzdENhY2hlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdyZWRpcmVjdCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3RyZWRpcmVjdFxuICAgIGFsbG93ZWRWYWx1ZXM6IHJlcXVlc3RSZWRpcmVjdFxuICB9LFxuICB7XG4gICAga2V5OiAnaW50ZWdyaXR5JyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZ1xuICB9LFxuICB7XG4gICAga2V5OiAna2VlcGFsaXZlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW5cbiAgfSxcbiAge1xuICAgIGtleTogJ3NpZ25hbCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIoXG4gICAgICAoc2lnbmFsKSA9PiB3ZWJpZGwuY29udmVydGVycy5BYm9ydFNpZ25hbChcbiAgICAgICAgc2lnbmFsLFxuICAgICAgICB7IHN0cmljdDogZmFsc2UgfVxuICAgICAgKVxuICAgIClcbiAgfSxcbiAge1xuICAgIGtleTogJ3dpbmRvdycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5hbnlcbiAgfSxcbiAge1xuICAgIGtleTogJ2R1cGxleCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAgYWxsb3dlZFZhbHVlczogcmVxdWVzdER1cGxleFxuICB9XG5dKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHsgUmVxdWVzdCwgbWFrZVJlcXVlc3QgfVxuIiwKICAgICIvLyBodHRwczovL2dpdGh1Yi5jb20vRXRoYW4tQXJyb3dvb2QvdW5kaWNpLWZldGNoXG5cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIFJlc3BvbnNlLFxuICBtYWtlTmV0d29ya0Vycm9yLFxuICBtYWtlQXBwcm9wcmlhdGVOZXR3b3JrRXJyb3IsXG4gIGZpbHRlclJlc3BvbnNlLFxuICBtYWtlUmVzcG9uc2Vcbn0gPSByZXF1aXJlKCcuL3Jlc3BvbnNlJylcbmNvbnN0IHsgSGVhZGVycyB9ID0gcmVxdWlyZSgnLi9oZWFkZXJzJylcbmNvbnN0IHsgUmVxdWVzdCwgbWFrZVJlcXVlc3QgfSA9IHJlcXVpcmUoJy4vcmVxdWVzdCcpXG5jb25zdCB6bGliID0gcmVxdWlyZSgnemxpYicpXG5jb25zdCB7XG4gIGJ5dGVzTWF0Y2gsXG4gIG1ha2VQb2xpY3lDb250YWluZXIsXG4gIGNsb25lUG9saWN5Q29udGFpbmVyLFxuICByZXF1ZXN0QmFkUG9ydCxcbiAgVEFPQ2hlY2ssXG4gIGFwcGVuZFJlcXVlc3RPcmlnaW5IZWFkZXIsXG4gIHJlc3BvbnNlTG9jYXRpb25VUkwsXG4gIHJlcXVlc3RDdXJyZW50VVJMLFxuICBzZXRSZXF1ZXN0UmVmZXJyZXJQb2xpY3lPblJlZGlyZWN0LFxuICB0cnlVcGdyYWRlUmVxdWVzdFRvQVBvdGVudGlhbGx5VHJ1c3R3b3J0aHlVUkwsXG4gIGNyZWF0ZU9wYXF1ZVRpbWluZ0luZm8sXG4gIGFwcGVuZEZldGNoTWV0YWRhdGEsXG4gIGNvcnNDaGVjayxcbiAgY3Jvc3NPcmlnaW5SZXNvdXJjZVBvbGljeUNoZWNrLFxuICBkZXRlcm1pbmVSZXF1ZXN0c1JlZmVycmVyLFxuICBjb2Fyc2VuZWRTaGFyZWRDdXJyZW50VGltZSxcbiAgY3JlYXRlRGVmZXJyZWRQcm9taXNlLFxuICBpc0Jsb2JMaWtlLFxuICBzYW1lT3JpZ2luLFxuICBpc0NhbmNlbGxlZCxcbiAgaXNBYm9ydGVkLFxuICBpc0Vycm9yTGlrZSxcbiAgZnVsbHlSZWFkQm9keSxcbiAgcmVhZGFibGVTdHJlYW1DbG9zZSxcbiAgaXNvbW9ycGhpY0VuY29kZSxcbiAgdXJsSXNMb2NhbCxcbiAgdXJsSXNIdHRwSHR0cHNTY2hlbWUsXG4gIHVybEhhc0h0dHBzU2NoZW1lXG59ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsga1N0YXRlLCBrSGVhZGVycywga0d1YXJkLCBrUmVhbG0gfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBzYWZlbHlFeHRyYWN0Qm9keSB9ID0gcmVxdWlyZSgnLi9ib2R5JylcbmNvbnN0IHtcbiAgcmVkaXJlY3RTdGF0dXNTZXQsXG4gIG51bGxCb2R5U3RhdHVzLFxuICBzYWZlTWV0aG9kc1NldCxcbiAgcmVxdWVzdEJvZHlIZWFkZXIsXG4gIHN1YnJlc291cmNlU2V0LFxuICBET01FeGNlcHRpb25cbn0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7IGtIZWFkZXJzTGlzdCB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IEVFID0gcmVxdWlyZSgnZXZlbnRzJylcbmNvbnN0IHsgUmVhZGFibGUsIHBpcGVsaW5lIH0gPSByZXF1aXJlKCdzdHJlYW0nKVxuY29uc3QgeyBhZGRBYm9ydExpc3RlbmVyLCBpc0Vycm9yZWQsIGlzUmVhZGFibGUsIG5vZGVNYWpvciwgbm9kZU1pbm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBkYXRhVVJMUHJvY2Vzc29yLCBzZXJpYWxpemVBTWltZVR5cGUgfSA9IHJlcXVpcmUoJy4vZGF0YVVSTCcpXG5jb25zdCB7IFRyYW5zZm9ybVN0cmVhbSB9ID0gcmVxdWlyZSgnc3RyZWFtL3dlYicpXG5jb25zdCB7IGdldEdsb2JhbERpc3BhdGNoZXIgfSA9IHJlcXVpcmUoJy4uL2dsb2JhbCcpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi93ZWJpZGwnKVxuY29uc3QgeyBTVEFUVVNfQ09ERVMgfSA9IHJlcXVpcmUoJ2h0dHAnKVxuY29uc3QgR0VUX09SX0hFQUQgPSBbJ0dFVCcsICdIRUFEJ11cblxuLyoqIEB0eXBlIHtpbXBvcnQoJ2J1ZmZlcicpLnJlc29sdmVPYmplY3RVUkx9ICovXG5sZXQgcmVzb2x2ZU9iamVjdFVSTFxubGV0IFJlYWRhYmxlU3RyZWFtID0gZ2xvYmFsVGhpcy5SZWFkYWJsZVN0cmVhbVxuXG5jbGFzcyBGZXRjaCBleHRlbmRzIEVFIHtcbiAgY29uc3RydWN0b3IgKGRpc3BhdGNoZXIpIHtcbiAgICBzdXBlcigpXG5cbiAgICB0aGlzLmRpc3BhdGNoZXIgPSBkaXNwYXRjaGVyXG4gICAgdGhpcy5jb25uZWN0aW9uID0gbnVsbFxuICAgIHRoaXMuZHVtcCA9IGZhbHNlXG4gICAgdGhpcy5zdGF0ZSA9ICdvbmdvaW5nJ1xuICAgIC8vIDIgdGVybWluYXRlZCBsaXN0ZW5lcnMgZ2V0IGFkZGVkIHBlciByZXF1ZXN0LFxuICAgIC8vIGJ1dCBvbmx5IDEgZ2V0cyByZW1vdmVkLiBJZiB0aGVyZSBhcmUgMjAgcmVkaXJlY3RzLFxuICAgIC8vIDIxIGxpc3RlbmVycyB3aWxsIGJlIGFkZGVkLlxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMTcxMVxuICAgIC8vIFRPRE8gKGZpeCk6IEZpbmQgYW5kIGZpeCByb290IGNhdXNlIGZvciBsZWFrZWQgbGlzdGVuZXIuXG4gICAgdGhpcy5zZXRNYXhMaXN0ZW5lcnMoMjEpXG4gIH1cblxuICB0ZXJtaW5hdGUgKHJlYXNvbikge1xuICAgIGlmICh0aGlzLnN0YXRlICE9PSAnb25nb2luZycpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuc3RhdGUgPSAndGVybWluYXRlZCdcbiAgICB0aGlzLmNvbm5lY3Rpb24/LmRlc3Ryb3kocmVhc29uKVxuICAgIHRoaXMuZW1pdCgndGVybWluYXRlZCcsIHJlYXNvbilcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmZXRjaC1jb250cm9sbGVyLWFib3J0XG4gIGFib3J0IChlcnJvcikge1xuICAgIGlmICh0aGlzLnN0YXRlICE9PSAnb25nb2luZycpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIDEuIFNldCBjb250cm9sbGVy4oCZcyBzdGF0ZSB0byBcImFib3J0ZWRcIi5cbiAgICB0aGlzLnN0YXRlID0gJ2Fib3J0ZWQnXG5cbiAgICAvLyAyLiBMZXQgZmFsbGJhY2tFcnJvciBiZSBhbiBcIkFib3J0RXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgLy8gMy4gU2V0IGVycm9yIHRvIGZhbGxiYWNrRXJyb3IgaWYgaXQgaXMgbm90IGdpdmVuLlxuICAgIGlmICghZXJyb3IpIHtcbiAgICAgIGVycm9yID0gbmV3IERPTUV4Y2VwdGlvbignVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC4nLCAnQWJvcnRFcnJvcicpXG4gICAgfVxuXG4gICAgLy8gNC4gTGV0IHNlcmlhbGl6ZWRFcnJvciBiZSBTdHJ1Y3R1cmVkU2VyaWFsaXplKGVycm9yKS5cbiAgICAvLyAgICBJZiB0aGF0IHRocmV3IGFuIGV4Y2VwdGlvbiwgY2F0Y2ggaXQsIGFuZCBsZXRcbiAgICAvLyAgICBzZXJpYWxpemVkRXJyb3IgYmUgU3RydWN0dXJlZFNlcmlhbGl6ZShmYWxsYmFja0Vycm9yKS5cblxuICAgIC8vIDUuIFNldCBjb250cm9sbGVy4oCZcyBzZXJpYWxpemVkIGFib3J0IHJlYXNvbiB0byBzZXJpYWxpemVkRXJyb3IuXG4gICAgdGhpcy5zZXJpYWxpemVkQWJvcnRSZWFzb24gPSBlcnJvclxuXG4gICAgdGhpcy5jb25uZWN0aW9uPy5kZXN0cm95KGVycm9yKVxuICAgIHRoaXMuZW1pdCgndGVybWluYXRlZCcsIGVycm9yKVxuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmZXRjaC1tZXRob2RcbmZ1bmN0aW9uIGZldGNoIChpbnB1dCwgaW5pdCA9IHt9KSB7XG4gIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdnbG9iYWxUaGlzLmZldGNoJyB9KVxuXG4gIC8vIDEuIExldCBwIGJlIGEgbmV3IHByb21pc2UuXG4gIGNvbnN0IHAgPSBjcmVhdGVEZWZlcnJlZFByb21pc2UoKVxuXG4gIC8vIDIuIExldCByZXF1ZXN0T2JqZWN0IGJlIHRoZSByZXN1bHQgb2YgaW52b2tpbmcgdGhlIGluaXRpYWwgdmFsdWUgb2ZcbiAgLy8gUmVxdWVzdCBhcyBjb25zdHJ1Y3RvciB3aXRoIGlucHV0IGFuZCBpbml0IGFzIGFyZ3VtZW50cy4gSWYgdGhpcyB0aHJvd3NcbiAgLy8gYW4gZXhjZXB0aW9uLCByZWplY3QgcCB3aXRoIGl0IGFuZCByZXR1cm4gcC5cbiAgbGV0IHJlcXVlc3RPYmplY3RcblxuICB0cnkge1xuICAgIHJlcXVlc3RPYmplY3QgPSBuZXcgUmVxdWVzdChpbnB1dCwgaW5pdClcbiAgfSBjYXRjaCAoZSkge1xuICAgIHAucmVqZWN0KGUpXG4gICAgcmV0dXJuIHAucHJvbWlzZVxuICB9XG5cbiAgLy8gMy4gTGV0IHJlcXVlc3QgYmUgcmVxdWVzdE9iamVjdOKAmXMgcmVxdWVzdC5cbiAgY29uc3QgcmVxdWVzdCA9IHJlcXVlc3RPYmplY3Rba1N0YXRlXVxuXG4gIC8vIDQuIElmIHJlcXVlc3RPYmplY3TigJlzIHNpZ25hbOKAmXMgYWJvcnRlZCBmbGFnIGlzIHNldCwgdGhlbjpcbiAgaWYgKHJlcXVlc3RPYmplY3Quc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAvLyAxLiBBYm9ydCB0aGUgZmV0Y2goKSBjYWxsIHdpdGggcCwgcmVxdWVzdCwgbnVsbCwgYW5kXG4gICAgLy8gICAgcmVxdWVzdE9iamVjdOKAmXMgc2lnbmFs4oCZcyBhYm9ydCByZWFzb24uXG4gICAgYWJvcnRGZXRjaChwLCByZXF1ZXN0LCBudWxsLCByZXF1ZXN0T2JqZWN0LnNpZ25hbC5yZWFzb24pXG5cbiAgICAvLyAyLiBSZXR1cm4gcC5cbiAgICByZXR1cm4gcC5wcm9taXNlXG4gIH1cblxuICAvLyA1LiBMZXQgZ2xvYmFsT2JqZWN0IGJlIHJlcXVlc3TigJlzIGNsaWVudOKAmXMgZ2xvYmFsIG9iamVjdC5cbiAgY29uc3QgZ2xvYmFsT2JqZWN0ID0gcmVxdWVzdC5jbGllbnQuZ2xvYmFsT2JqZWN0XG5cbiAgLy8gNi4gSWYgZ2xvYmFsT2JqZWN0IGlzIGEgU2VydmljZVdvcmtlckdsb2JhbFNjb3BlIG9iamVjdCwgdGhlbiBzZXRcbiAgLy8gcmVxdWVzdOKAmXMgc2VydmljZS13b3JrZXJzIG1vZGUgdG8gXCJub25lXCIuXG4gIGlmIChnbG9iYWxPYmplY3Q/LmNvbnN0cnVjdG9yPy5uYW1lID09PSAnU2VydmljZVdvcmtlckdsb2JhbFNjb3BlJykge1xuICAgIHJlcXVlc3Quc2VydmljZVdvcmtlcnMgPSAnbm9uZSdcbiAgfVxuXG4gIC8vIDcuIExldCByZXNwb25zZU9iamVjdCBiZSBudWxsLlxuICBsZXQgcmVzcG9uc2VPYmplY3QgPSBudWxsXG5cbiAgLy8gOC4gTGV0IHJlbGV2YW50UmVhbG0gYmUgdGhpc+KAmXMgcmVsZXZhbnQgUmVhbG0uXG4gIGNvbnN0IHJlbGV2YW50UmVhbG0gPSBudWxsXG5cbiAgLy8gOS4gTGV0IGxvY2FsbHlBYm9ydGVkIGJlIGZhbHNlLlxuICBsZXQgbG9jYWxseUFib3J0ZWQgPSBmYWxzZVxuXG4gIC8vIDEwLiBMZXQgY29udHJvbGxlciBiZSBudWxsLlxuICBsZXQgY29udHJvbGxlciA9IG51bGxcblxuICAvLyAxMS4gQWRkIHRoZSBmb2xsb3dpbmcgYWJvcnQgc3RlcHMgdG8gcmVxdWVzdE9iamVjdOKAmXMgc2lnbmFsOlxuICBhZGRBYm9ydExpc3RlbmVyKFxuICAgIHJlcXVlc3RPYmplY3Quc2lnbmFsLFxuICAgICgpID0+IHtcbiAgICAgIC8vIDEuIFNldCBsb2NhbGx5QWJvcnRlZCB0byB0cnVlLlxuICAgICAgbG9jYWxseUFib3J0ZWQgPSB0cnVlXG5cbiAgICAgIC8vIDIuIEFzc2VydDogY29udHJvbGxlciBpcyBub24tbnVsbC5cbiAgICAgIGFzc2VydChjb250cm9sbGVyICE9IG51bGwpXG5cbiAgICAgIC8vIDMuIEFib3J0IGNvbnRyb2xsZXIgd2l0aCByZXF1ZXN0T2JqZWN04oCZcyBzaWduYWzigJlzIGFib3J0IHJlYXNvbi5cbiAgICAgIGNvbnRyb2xsZXIuYWJvcnQocmVxdWVzdE9iamVjdC5zaWduYWwucmVhc29uKVxuXG4gICAgICAvLyA0LiBBYm9ydCB0aGUgZmV0Y2goKSBjYWxsIHdpdGggcCwgcmVxdWVzdCwgcmVzcG9uc2VPYmplY3QsXG4gICAgICAvLyAgICBhbmQgcmVxdWVzdE9iamVjdOKAmXMgc2lnbmFs4oCZcyBhYm9ydCByZWFzb24uXG4gICAgICBhYm9ydEZldGNoKHAsIHJlcXVlc3QsIHJlc3BvbnNlT2JqZWN0LCByZXF1ZXN0T2JqZWN0LnNpZ25hbC5yZWFzb24pXG4gICAgfVxuICApXG5cbiAgLy8gMTIuIExldCBoYW5kbGVGZXRjaERvbmUgZ2l2ZW4gcmVzcG9uc2UgcmVzcG9uc2UgYmUgdG8gZmluYWxpemUgYW5kXG4gIC8vIHJlcG9ydCB0aW1pbmcgd2l0aCByZXNwb25zZSwgZ2xvYmFsT2JqZWN0LCBhbmQgXCJmZXRjaFwiLlxuICBjb25zdCBoYW5kbGVGZXRjaERvbmUgPSAocmVzcG9uc2UpID0+XG4gICAgZmluYWxpemVBbmRSZXBvcnRUaW1pbmcocmVzcG9uc2UsICdmZXRjaCcpXG5cbiAgLy8gMTMuIFNldCBjb250cm9sbGVyIHRvIHRoZSByZXN1bHQgb2YgY2FsbGluZyBmZXRjaCBnaXZlbiByZXF1ZXN0LFxuICAvLyB3aXRoIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSBzZXQgdG8gaGFuZGxlRmV0Y2hEb25lLCBhbmQgcHJvY2Vzc1Jlc3BvbnNlXG4gIC8vIGdpdmVuIHJlc3BvbnNlIGJlaW5nIHRoZXNlIHN1YnN0ZXBzOlxuXG4gIGNvbnN0IHByb2Nlc3NSZXNwb25zZSA9IChyZXNwb25zZSkgPT4ge1xuICAgIC8vIDEuIElmIGxvY2FsbHlBYm9ydGVkIGlzIHRydWUsIHRlcm1pbmF0ZSB0aGVzZSBzdWJzdGVwcy5cbiAgICBpZiAobG9jYWxseUFib3J0ZWQpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgIH1cblxuICAgIC8vIDIuIElmIHJlc3BvbnNl4oCZcyBhYm9ydGVkIGZsYWcgaXMgc2V0LCB0aGVuOlxuICAgIGlmIChyZXNwb25zZS5hYm9ydGVkKSB7XG4gICAgICAvLyAxLiBMZXQgZGVzZXJpYWxpemVkRXJyb3IgYmUgdGhlIHJlc3VsdCBvZiBkZXNlcmlhbGl6ZSBhIHNlcmlhbGl6ZWRcbiAgICAgIC8vICAgIGFib3J0IHJlYXNvbiBnaXZlbiBjb250cm9sbGVy4oCZcyBzZXJpYWxpemVkIGFib3J0IHJlYXNvbiBhbmRcbiAgICAgIC8vICAgIHJlbGV2YW50UmVhbG0uXG5cbiAgICAgIC8vIDIuIEFib3J0IHRoZSBmZXRjaCgpIGNhbGwgd2l0aCBwLCByZXF1ZXN0LCByZXNwb25zZU9iamVjdCwgYW5kXG4gICAgICAvLyAgICBkZXNlcmlhbGl6ZWRFcnJvci5cblxuICAgICAgYWJvcnRGZXRjaChwLCByZXF1ZXN0LCByZXNwb25zZU9iamVjdCwgY29udHJvbGxlci5zZXJpYWxpemVkQWJvcnRSZWFzb24pXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICB9XG5cbiAgICAvLyAzLiBJZiByZXNwb25zZSBpcyBhIG5ldHdvcmsgZXJyb3IsIHRoZW4gcmVqZWN0IHAgd2l0aCBhIFR5cGVFcnJvclxuICAgIC8vIGFuZCB0ZXJtaW5hdGUgdGhlc2Ugc3Vic3RlcHMuXG4gICAgaWYgKHJlc3BvbnNlLnR5cGUgPT09ICdlcnJvcicpIHtcbiAgICAgIHAucmVqZWN0KFxuICAgICAgICBPYmplY3QuYXNzaWduKG5ldyBUeXBlRXJyb3IoJ2ZldGNoIGZhaWxlZCcpLCB7IGNhdXNlOiByZXNwb25zZS5lcnJvciB9KVxuICAgICAgKVxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgfVxuXG4gICAgLy8gNC4gU2V0IHJlc3BvbnNlT2JqZWN0IHRvIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYSBSZXNwb25zZSBvYmplY3QsXG4gICAgLy8gZ2l2ZW4gcmVzcG9uc2UsIFwiaW1tdXRhYmxlXCIsIGFuZCByZWxldmFudFJlYWxtLlxuICAgIHJlc3BvbnNlT2JqZWN0ID0gbmV3IFJlc3BvbnNlKClcbiAgICByZXNwb25zZU9iamVjdFtrU3RhdGVdID0gcmVzcG9uc2VcbiAgICByZXNwb25zZU9iamVjdFtrUmVhbG1dID0gcmVsZXZhbnRSZWFsbVxuICAgIHJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrSGVhZGVyc0xpc3RdID0gcmVzcG9uc2UuaGVhZGVyc0xpc3RcbiAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba0d1YXJkXSA9ICdpbW11dGFibGUnXG4gICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tSZWFsbV0gPSByZWxldmFudFJlYWxtXG5cbiAgICAvLyA1LiBSZXNvbHZlIHAgd2l0aCByZXNwb25zZU9iamVjdC5cbiAgICBwLnJlc29sdmUocmVzcG9uc2VPYmplY3QpXG4gIH1cblxuICBjb250cm9sbGVyID0gZmV0Y2hpbmcoe1xuICAgIHJlcXVlc3QsXG4gICAgcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5OiBoYW5kbGVGZXRjaERvbmUsXG4gICAgcHJvY2Vzc1Jlc3BvbnNlLFxuICAgIGRpc3BhdGNoZXI6IGluaXQuZGlzcGF0Y2hlciA/PyBnZXRHbG9iYWxEaXNwYXRjaGVyKCkgLy8gdW5kaWNpXG4gIH0pXG5cbiAgLy8gMTQuIFJldHVybiBwLlxuICByZXR1cm4gcC5wcm9taXNlXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmaW5hbGl6ZS1hbmQtcmVwb3J0LXRpbWluZ1xuZnVuY3Rpb24gZmluYWxpemVBbmRSZXBvcnRUaW1pbmcgKHJlc3BvbnNlLCBpbml0aWF0b3JUeXBlID0gJ290aGVyJykge1xuICAvLyAxLiBJZiByZXNwb25zZSBpcyBhbiBhYm9ydGVkIG5ldHdvcmsgZXJyb3IsIHRoZW4gcmV0dXJuLlxuICBpZiAocmVzcG9uc2UudHlwZSA9PT0gJ2Vycm9yJyAmJiByZXNwb25zZS5hYm9ydGVkKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyAyLiBJZiByZXNwb25zZeKAmXMgVVJMIGxpc3QgaXMgbnVsbCBvciBlbXB0eSwgdGhlbiByZXR1cm4uXG4gIGlmICghcmVzcG9uc2UudXJsTGlzdD8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyAzLiBMZXQgb3JpZ2luYWxVUkwgYmUgcmVzcG9uc2XigJlzIFVSTCBsaXN0WzBdLlxuICBjb25zdCBvcmlnaW5hbFVSTCA9IHJlc3BvbnNlLnVybExpc3RbMF1cblxuICAvLyA0LiBMZXQgdGltaW5nSW5mbyBiZSByZXNwb25zZeKAmXMgdGltaW5nIGluZm8uXG4gIGxldCB0aW1pbmdJbmZvID0gcmVzcG9uc2UudGltaW5nSW5mb1xuXG4gIC8vIDUuIExldCBjYWNoZVN0YXRlIGJlIHJlc3BvbnNl4oCZcyBjYWNoZSBzdGF0ZS5cbiAgbGV0IGNhY2hlU3RhdGUgPSByZXNwb25zZS5jYWNoZVN0YXRlXG5cbiAgLy8gNi4gSWYgb3JpZ2luYWxVUkzigJlzIHNjaGVtZSBpcyBub3QgYW4gSFRUUChTKSBzY2hlbWUsIHRoZW4gcmV0dXJuLlxuICBpZiAoIXVybElzSHR0cEh0dHBzU2NoZW1lKG9yaWdpbmFsVVJMKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgLy8gNy4gSWYgdGltaW5nSW5mbyBpcyBudWxsLCB0aGVuIHJldHVybi5cbiAgaWYgKHRpbWluZ0luZm8gPT09IG51bGwpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIDguIElmIHJlc3BvbnNl4oCZcyB0aW1pbmcgYWxsb3cgcGFzc2VkIGZsYWcgaXMgbm90IHNldCwgdGhlbjpcbiAgaWYgKCFyZXNwb25zZS50aW1pbmdBbGxvd1Bhc3NlZCkge1xuICAgIC8vICAxLiBTZXQgdGltaW5nSW5mbyB0byBhIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYW4gb3BhcXVlIHRpbWluZyBpbmZvIGZvciB0aW1pbmdJbmZvLlxuICAgIHRpbWluZ0luZm8gPSBjcmVhdGVPcGFxdWVUaW1pbmdJbmZvKHtcbiAgICAgIHN0YXJ0VGltZTogdGltaW5nSW5mby5zdGFydFRpbWVcbiAgICB9KVxuXG4gICAgLy8gIDIuIFNldCBjYWNoZVN0YXRlIHRvIHRoZSBlbXB0eSBzdHJpbmcuXG4gICAgY2FjaGVTdGF0ZSA9ICcnXG4gIH1cblxuICAvLyA5LiBTZXQgdGltaW5nSW5mb+KAmXMgZW5kIHRpbWUgdG8gdGhlIGNvYXJzZW5lZCBzaGFyZWQgY3VycmVudCB0aW1lXG4gIC8vIGdpdmVuIGdsb2JhbOKAmXMgcmVsZXZhbnQgc2V0dGluZ3Mgb2JqZWN04oCZcyBjcm9zcy1vcmlnaW4gaXNvbGF0ZWRcbiAgLy8gY2FwYWJpbGl0eS5cbiAgLy8gVE9ETzogZ2l2ZW4gZ2xvYmFs4oCZcyByZWxldmFudCBzZXR0aW5ncyBvYmplY3TigJlzIGNyb3NzLW9yaWdpbiBpc29sYXRlZFxuICAvLyBjYXBhYmlsaXR5P1xuICB0aW1pbmdJbmZvLmVuZFRpbWUgPSBjb2Fyc2VuZWRTaGFyZWRDdXJyZW50VGltZSgpXG5cbiAgLy8gMTAuIFNldCByZXNwb25zZeKAmXMgdGltaW5nIGluZm8gdG8gdGltaW5nSW5mby5cbiAgcmVzcG9uc2UudGltaW5nSW5mbyA9IHRpbWluZ0luZm9cblxuICAvLyAxMS4gTWFyayByZXNvdXJjZSB0aW1pbmcgZm9yIHRpbWluZ0luZm8sIG9yaWdpbmFsVVJMLCBpbml0aWF0b3JUeXBlLFxuICAvLyBnbG9iYWwsIGFuZCBjYWNoZVN0YXRlLlxuICBtYXJrUmVzb3VyY2VUaW1pbmcoXG4gICAgdGltaW5nSW5mbyxcbiAgICBvcmlnaW5hbFVSTCxcbiAgICBpbml0aWF0b3JUeXBlLFxuICAgIGdsb2JhbFRoaXMsXG4gICAgY2FjaGVTdGF0ZVxuICApXG59XG5cbi8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9yZXNvdXJjZS10aW1pbmcvI2Rmbi1tYXJrLXJlc291cmNlLXRpbWluZ1xuZnVuY3Rpb24gbWFya1Jlc291cmNlVGltaW5nICh0aW1pbmdJbmZvLCBvcmlnaW5hbFVSTCwgaW5pdGlhdG9yVHlwZSwgZ2xvYmFsVGhpcywgY2FjaGVTdGF0ZSkge1xuICBpZiAobm9kZU1ham9yID4gMTggfHwgKG5vZGVNYWpvciA9PT0gMTggJiYgbm9kZU1pbm9yID49IDIpKSB7XG4gICAgcGVyZm9ybWFuY2UubWFya1Jlc291cmNlVGltaW5nKHRpbWluZ0luZm8sIG9yaWdpbmFsVVJMLmhyZWYsIGluaXRpYXRvclR5cGUsIGdsb2JhbFRoaXMsIGNhY2hlU3RhdGUpXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2Fib3J0LWZldGNoXG5mdW5jdGlvbiBhYm9ydEZldGNoIChwLCByZXF1ZXN0LCByZXNwb25zZU9iamVjdCwgZXJyb3IpIHtcbiAgLy8gTm90ZTogQWJvcnRTaWduYWwucmVhc29uIHdhcyBhZGRlZCBpbiBub2RlIHYxNy4yLjBcbiAgLy8gd2hpY2ggd291bGQgZ2l2ZSB1cyBhbiB1bmRlZmluZWQgZXJyb3IgdG8gcmVqZWN0IHdpdGguXG4gIC8vIFJlbW92ZSB0aGlzIG9uY2Ugbm9kZSB2MTYgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC5cbiAgaWYgKCFlcnJvcikge1xuICAgIGVycm9yID0gbmV3IERPTUV4Y2VwdGlvbignVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC4nLCAnQWJvcnRFcnJvcicpXG4gIH1cblxuICAvLyAxLiBSZWplY3QgcHJvbWlzZSB3aXRoIGVycm9yLlxuICBwLnJlamVjdChlcnJvcilcblxuICAvLyAyLiBJZiByZXF1ZXN04oCZcyBib2R5IGlzIG5vdCBudWxsIGFuZCBpcyByZWFkYWJsZSwgdGhlbiBjYW5jZWwgcmVxdWVzdOKAmXNcbiAgLy8gYm9keSB3aXRoIGVycm9yLlxuICBpZiAocmVxdWVzdC5ib2R5ICE9IG51bGwgJiYgaXNSZWFkYWJsZShyZXF1ZXN0LmJvZHk/LnN0cmVhbSkpIHtcbiAgICByZXF1ZXN0LmJvZHkuc3RyZWFtLmNhbmNlbChlcnJvcikuY2F0Y2goKGVycikgPT4ge1xuICAgICAgaWYgKGVyci5jb2RlID09PSAnRVJSX0lOVkFMSURfU1RBVEUnKSB7XG4gICAgICAgIC8vIE5vZGUgYnVnP1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIHRocm93IGVyclxuICAgIH0pXG4gIH1cblxuICAvLyAzLiBJZiByZXNwb25zZU9iamVjdCBpcyBudWxsLCB0aGVuIHJldHVybi5cbiAgaWYgKHJlc3BvbnNlT2JqZWN0ID09IG51bGwpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIDQuIExldCByZXNwb25zZSBiZSByZXNwb25zZU9iamVjdOKAmXMgcmVzcG9uc2UuXG4gIGNvbnN0IHJlc3BvbnNlID0gcmVzcG9uc2VPYmplY3Rba1N0YXRlXVxuXG4gIC8vIDUuIElmIHJlc3BvbnNl4oCZcyBib2R5IGlzIG5vdCBudWxsIGFuZCBpcyByZWFkYWJsZSwgdGhlbiBlcnJvciByZXNwb25zZeKAmXNcbiAgLy8gYm9keSB3aXRoIGVycm9yLlxuICBpZiAocmVzcG9uc2UuYm9keSAhPSBudWxsICYmIGlzUmVhZGFibGUocmVzcG9uc2UuYm9keT8uc3RyZWFtKSkge1xuICAgIHJlc3BvbnNlLmJvZHkuc3RyZWFtLmNhbmNlbChlcnJvcikuY2F0Y2goKGVycikgPT4ge1xuICAgICAgaWYgKGVyci5jb2RlID09PSAnRVJSX0lOVkFMSURfU1RBVEUnKSB7XG4gICAgICAgIC8vIE5vZGUgYnVnP1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIHRocm93IGVyclxuICAgIH0pXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2ZldGNoaW5nXG5mdW5jdGlvbiBmZXRjaGluZyAoe1xuICByZXF1ZXN0LFxuICBwcm9jZXNzUmVxdWVzdEJvZHlDaHVua0xlbmd0aCxcbiAgcHJvY2Vzc1JlcXVlc3RFbmRPZkJvZHksXG4gIHByb2Nlc3NSZXNwb25zZSxcbiAgcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5LFxuICBwcm9jZXNzUmVzcG9uc2VDb25zdW1lQm9keSxcbiAgdXNlUGFyYWxsZWxRdWV1ZSA9IGZhbHNlLFxuICBkaXNwYXRjaGVyIC8vIHVuZGljaVxufSkge1xuICAvLyAxLiBMZXQgdGFza0Rlc3RpbmF0aW9uIGJlIG51bGwuXG4gIGxldCB0YXNrRGVzdGluYXRpb24gPSBudWxsXG5cbiAgLy8gMi4gTGV0IGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5IGJlIGZhbHNlLlxuICBsZXQgY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkgPSBmYWxzZVxuXG4gIC8vIDMuIElmIHJlcXVlc3TigJlzIGNsaWVudCBpcyBub24tbnVsbCwgdGhlbjpcbiAgaWYgKHJlcXVlc3QuY2xpZW50ICE9IG51bGwpIHtcbiAgICAvLyAxLiBTZXQgdGFza0Rlc3RpbmF0aW9uIHRvIHJlcXVlc3TigJlzIGNsaWVudOKAmXMgZ2xvYmFsIG9iamVjdC5cbiAgICB0YXNrRGVzdGluYXRpb24gPSByZXF1ZXN0LmNsaWVudC5nbG9iYWxPYmplY3RcblxuICAgIC8vIDIuIFNldCBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSB0byByZXF1ZXN04oCZcyBjbGllbnTigJlzIGNyb3NzLW9yaWdpblxuICAgIC8vIGlzb2xhdGVkIGNhcGFiaWxpdHkuXG4gICAgY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkgPVxuICAgICAgcmVxdWVzdC5jbGllbnQuY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHlcbiAgfVxuXG4gIC8vIDQuIElmIHVzZVBhcmFsbGVsUXVldWUgaXMgdHJ1ZSwgdGhlbiBzZXQgdGFza0Rlc3RpbmF0aW9uIHRvIHRoZSByZXN1bHQgb2ZcbiAgLy8gc3RhcnRpbmcgYSBuZXcgcGFyYWxsZWwgcXVldWUuXG4gIC8vIFRPRE9cblxuICAvLyA1LiBMZXQgdGltaW5nSW5mbyBiZSBhIG5ldyBmZXRjaCB0aW1pbmcgaW5mbyB3aG9zZSBzdGFydCB0aW1lIGFuZFxuICAvLyBwb3N0LXJlZGlyZWN0IHN0YXJ0IHRpbWUgYXJlIHRoZSBjb2Fyc2VuZWQgc2hhcmVkIGN1cnJlbnQgdGltZSBnaXZlblxuICAvLyBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eS5cbiAgY29uc3QgY3VycmVuVGltZSA9IGNvYXJzZW5lZFNoYXJlZEN1cnJlbnRUaW1lKGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5KVxuICBjb25zdCB0aW1pbmdJbmZvID0gY3JlYXRlT3BhcXVlVGltaW5nSW5mbyh7XG4gICAgc3RhcnRUaW1lOiBjdXJyZW5UaW1lXG4gIH0pXG5cbiAgLy8gNi4gTGV0IGZldGNoUGFyYW1zIGJlIGEgbmV3IGZldGNoIHBhcmFtcyB3aG9zZVxuICAvLyByZXF1ZXN0IGlzIHJlcXVlc3QsXG4gIC8vIHRpbWluZyBpbmZvIGlzIHRpbWluZ0luZm8sXG4gIC8vIHByb2Nlc3MgcmVxdWVzdCBib2R5IGNodW5rIGxlbmd0aCBpcyBwcm9jZXNzUmVxdWVzdEJvZHlDaHVua0xlbmd0aCxcbiAgLy8gcHJvY2VzcyByZXF1ZXN0IGVuZC1vZi1ib2R5IGlzIHByb2Nlc3NSZXF1ZXN0RW5kT2ZCb2R5LFxuICAvLyBwcm9jZXNzIHJlc3BvbnNlIGlzIHByb2Nlc3NSZXNwb25zZSxcbiAgLy8gcHJvY2VzcyByZXNwb25zZSBjb25zdW1lIGJvZHkgaXMgcHJvY2Vzc1Jlc3BvbnNlQ29uc3VtZUJvZHksXG4gIC8vIHByb2Nlc3MgcmVzcG9uc2UgZW5kLW9mLWJvZHkgaXMgcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5LFxuICAvLyB0YXNrIGRlc3RpbmF0aW9uIGlzIHRhc2tEZXN0aW5hdGlvbixcbiAgLy8gYW5kIGNyb3NzLW9yaWdpbiBpc29sYXRlZCBjYXBhYmlsaXR5IGlzIGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5LlxuICBjb25zdCBmZXRjaFBhcmFtcyA9IHtcbiAgICBjb250cm9sbGVyOiBuZXcgRmV0Y2goZGlzcGF0Y2hlciksXG4gICAgcmVxdWVzdCxcbiAgICB0aW1pbmdJbmZvLFxuICAgIHByb2Nlc3NSZXF1ZXN0Qm9keUNodW5rTGVuZ3RoLFxuICAgIHByb2Nlc3NSZXF1ZXN0RW5kT2ZCb2R5LFxuICAgIHByb2Nlc3NSZXNwb25zZSxcbiAgICBwcm9jZXNzUmVzcG9uc2VDb25zdW1lQm9keSxcbiAgICBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHksXG4gICAgdGFza0Rlc3RpbmF0aW9uLFxuICAgIGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5XG4gIH1cblxuICAvLyA3LiBJZiByZXF1ZXN04oCZcyBib2R5IGlzIGEgYnl0ZSBzZXF1ZW5jZSwgdGhlbiBzZXQgcmVxdWVzdOKAmXMgYm9keSB0b1xuICAvLyAgICByZXF1ZXN04oCZcyBib2R5IGFzIGEgYm9keS5cbiAgLy8gTk9URTogU2luY2UgZmV0Y2hpbmcgaXMgb25seSBjYWxsZWQgZnJvbSBmZXRjaCwgYm9keSBzaG91bGQgYWxyZWFkeSBiZVxuICAvLyBleHRyYWN0ZWQuXG4gIGFzc2VydCghcmVxdWVzdC5ib2R5IHx8IHJlcXVlc3QuYm9keS5zdHJlYW0pXG5cbiAgLy8gOC4gSWYgcmVxdWVzdOKAmXMgd2luZG93IGlzIFwiY2xpZW50XCIsIHRoZW4gc2V0IHJlcXVlc3TigJlzIHdpbmRvdyB0byByZXF1ZXN04oCZc1xuICAvLyBjbGllbnQsIGlmIHJlcXVlc3TigJlzIGNsaWVudOKAmXMgZ2xvYmFsIG9iamVjdCBpcyBhIFdpbmRvdyBvYmplY3Q7IG90aGVyd2lzZVxuICAvLyBcIm5vLXdpbmRvd1wiLlxuICBpZiAocmVxdWVzdC53aW5kb3cgPT09ICdjbGllbnQnKSB7XG4gICAgLy8gVE9ETzogV2hhdCBpZiByZXF1ZXN0LmNsaWVudCBpcyBudWxsP1xuICAgIHJlcXVlc3Qud2luZG93ID1cbiAgICAgIHJlcXVlc3QuY2xpZW50Py5nbG9iYWxPYmplY3Q/LmNvbnN0cnVjdG9yPy5uYW1lID09PSAnV2luZG93J1xuICAgICAgICA/IHJlcXVlc3QuY2xpZW50XG4gICAgICAgIDogJ25vLXdpbmRvdydcbiAgfVxuXG4gIC8vIDkuIElmIHJlcXVlc3TigJlzIG9yaWdpbiBpcyBcImNsaWVudFwiLCB0aGVuIHNldCByZXF1ZXN04oCZcyBvcmlnaW4gdG8gcmVxdWVzdOKAmXNcbiAgLy8gY2xpZW504oCZcyBvcmlnaW4uXG4gIGlmIChyZXF1ZXN0Lm9yaWdpbiA9PT0gJ2NsaWVudCcpIHtcbiAgICAvLyBUT0RPOiBXaGF0IGlmIHJlcXVlc3QuY2xpZW50IGlzIG51bGw/XG4gICAgcmVxdWVzdC5vcmlnaW4gPSByZXF1ZXN0LmNsaWVudD8ub3JpZ2luXG4gIH1cblxuICAvLyAxMC4gSWYgYWxsIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgdHJ1ZTpcbiAgLy8gVE9ET1xuXG4gIC8vIDExLiBJZiByZXF1ZXN04oCZcyBwb2xpY3kgY29udGFpbmVyIGlzIFwiY2xpZW50XCIsIHRoZW46XG4gIGlmIChyZXF1ZXN0LnBvbGljeUNvbnRhaW5lciA9PT0gJ2NsaWVudCcpIHtcbiAgICAvLyAxLiBJZiByZXF1ZXN04oCZcyBjbGllbnQgaXMgbm9uLW51bGwsIHRoZW4gc2V0IHJlcXVlc3TigJlzIHBvbGljeVxuICAgIC8vIGNvbnRhaW5lciB0byBhIGNsb25lIG9mIHJlcXVlc3TigJlzIGNsaWVudOKAmXMgcG9saWN5IGNvbnRhaW5lci4gW0hUTUxdXG4gICAgaWYgKHJlcXVlc3QuY2xpZW50ICE9IG51bGwpIHtcbiAgICAgIHJlcXVlc3QucG9saWN5Q29udGFpbmVyID0gY2xvbmVQb2xpY3lDb250YWluZXIoXG4gICAgICAgIHJlcXVlc3QuY2xpZW50LnBvbGljeUNvbnRhaW5lclxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyAyLiBPdGhlcndpc2UsIHNldCByZXF1ZXN04oCZcyBwb2xpY3kgY29udGFpbmVyIHRvIGEgbmV3IHBvbGljeVxuICAgICAgLy8gY29udGFpbmVyLlxuICAgICAgcmVxdWVzdC5wb2xpY3lDb250YWluZXIgPSBtYWtlUG9saWN5Q29udGFpbmVyKClcbiAgICB9XG4gIH1cblxuICAvLyAxMi4gSWYgcmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgQWNjZXB0YCwgdGhlbjpcbiAgaWYgKCFyZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdhY2NlcHQnKSkge1xuICAgIC8vIDEuIExldCB2YWx1ZSBiZSBgKi8qYC5cbiAgICBjb25zdCB2YWx1ZSA9ICcqLyonXG5cbiAgICAvLyAyLiBBIHVzZXIgYWdlbnQgc2hvdWxkIHNldCB2YWx1ZSB0byB0aGUgZmlyc3QgbWF0Y2hpbmcgc3RhdGVtZW50LCBpZlxuICAgIC8vIGFueSwgc3dpdGNoaW5nIG9uIHJlcXVlc3TigJlzIGRlc3RpbmF0aW9uOlxuICAgIC8vIFwiZG9jdW1lbnRcIlxuICAgIC8vIFwiZnJhbWVcIlxuICAgIC8vIFwiaWZyYW1lXCJcbiAgICAvLyBgdGV4dC9odG1sLGFwcGxpY2F0aW9uL3hodG1sK3htbCxhcHBsaWNhdGlvbi94bWw7cT0wLjksKi8qO3E9MC44YFxuICAgIC8vIFwiaW1hZ2VcIlxuICAgIC8vIGBpbWFnZS9wbmcsaW1hZ2Uvc3ZnK3htbCxpbWFnZS8qO3E9MC44LCovKjtxPTAuNWBcbiAgICAvLyBcInN0eWxlXCJcbiAgICAvLyBgdGV4dC9jc3MsKi8qO3E9MC4xYFxuICAgIC8vIFRPRE9cblxuICAgIC8vIDMuIEFwcGVuZCBgQWNjZXB0YC92YWx1ZSB0byByZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cbiAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnYWNjZXB0JywgdmFsdWUpXG4gIH1cblxuICAvLyAxMy4gSWYgcmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgQWNjZXB0LUxhbmd1YWdlYCwgdGhlblxuICAvLyB1c2VyIGFnZW50cyBzaG91bGQgYXBwZW5kIGBBY2NlcHQtTGFuZ3VhZ2VgL2FuIGFwcHJvcHJpYXRlIHZhbHVlIHRvXG4gIC8vIHJlcXVlc3TigJlzIGhlYWRlciBsaXN0LlxuICBpZiAoIXJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2FjY2VwdC1sYW5ndWFnZScpKSB7XG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ2FjY2VwdC1sYW5ndWFnZScsICcqJylcbiAgfVxuXG4gIC8vIDE0LiBJZiByZXF1ZXN04oCZcyBwcmlvcml0eSBpcyBudWxsLCB0aGVuIHVzZSByZXF1ZXN04oCZcyBpbml0aWF0b3IgYW5kXG4gIC8vIGRlc3RpbmF0aW9uIGFwcHJvcHJpYXRlbHkgaW4gc2V0dGluZyByZXF1ZXN04oCZcyBwcmlvcml0eSB0byBhXG4gIC8vIHVzZXItYWdlbnQtZGVmaW5lZCBvYmplY3QuXG4gIGlmIChyZXF1ZXN0LnByaW9yaXR5ID09PSBudWxsKSB7XG4gICAgLy8gVE9ET1xuICB9XG5cbiAgLy8gMTUuIElmIHJlcXVlc3QgaXMgYSBzdWJyZXNvdXJjZSByZXF1ZXN0LCB0aGVuOlxuICBpZiAoc3VicmVzb3VyY2VTZXQuaGFzKHJlcXVlc3QuZGVzdGluYXRpb24pKSB7XG4gICAgLy8gVE9ET1xuICB9XG5cbiAgLy8gMTYuIFJ1biBtYWluIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLlxuICBtYWluRmV0Y2goZmV0Y2hQYXJhbXMpXG4gICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnRlcm1pbmF0ZShlcnIpXG4gICAgfSlcblxuICAvLyAxNy4gUmV0dXJuIGZldGNoUGFyYW0ncyBjb250cm9sbGVyXG4gIHJldHVybiBmZXRjaFBhcmFtcy5jb250cm9sbGVyXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LW1haW4tZmV0Y2hcbmFzeW5jIGZ1bmN0aW9uIG1haW5GZXRjaCAoZmV0Y2hQYXJhbXMsIHJlY3Vyc2l2ZSA9IGZhbHNlKSB7XG4gIC8vIDEuIExldCByZXF1ZXN0IGJlIGZldGNoUGFyYW1z4oCZcyByZXF1ZXN0LlxuICBjb25zdCByZXF1ZXN0ID0gZmV0Y2hQYXJhbXMucmVxdWVzdFxuXG4gIC8vIDIuIExldCByZXNwb25zZSBiZSBudWxsLlxuICBsZXQgcmVzcG9uc2UgPSBudWxsXG5cbiAgLy8gMy4gSWYgcmVxdWVzdOKAmXMgbG9jYWwtVVJMcy1vbmx5IGZsYWcgaXMgc2V0IGFuZCByZXF1ZXN04oCZcyBjdXJyZW50IFVSTCBpc1xuICAvLyBub3QgbG9jYWwsIHRoZW4gc2V0IHJlc3BvbnNlIHRvIGEgbmV0d29yayBlcnJvci5cbiAgaWYgKHJlcXVlc3QubG9jYWxVUkxzT25seSAmJiAhdXJsSXNMb2NhbChyZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KSkpIHtcbiAgICByZXNwb25zZSA9IG1ha2VOZXR3b3JrRXJyb3IoJ2xvY2FsIFVSTHMgb25seScpXG4gIH1cblxuICAvLyA0LiBSdW4gcmVwb3J0IENvbnRlbnQgU2VjdXJpdHkgUG9saWN5IHZpb2xhdGlvbnMgZm9yIHJlcXVlc3QuXG4gIC8vIFRPRE9cblxuICAvLyA1LiBVcGdyYWRlIHJlcXVlc3QgdG8gYSBwb3RlbnRpYWxseSB0cnVzdHdvcnRoeSBVUkwsIGlmIGFwcHJvcHJpYXRlLlxuICB0cnlVcGdyYWRlUmVxdWVzdFRvQVBvdGVudGlhbGx5VHJ1c3R3b3J0aHlVUkwocmVxdWVzdClcblxuICAvLyA2LiBJZiBzaG91bGQgcmVxdWVzdCBiZSBibG9ja2VkIGR1ZSB0byBhIGJhZCBwb3J0LCBzaG91bGQgZmV0Y2hpbmcgcmVxdWVzdFxuICAvLyBiZSBibG9ja2VkIGFzIG1peGVkIGNvbnRlbnQsIG9yIHNob3VsZCByZXF1ZXN0IGJlIGJsb2NrZWQgYnkgQ29udGVudFxuICAvLyBTZWN1cml0eSBQb2xpY3kgcmV0dXJucyBibG9ja2VkLCB0aGVuIHNldCByZXNwb25zZSB0byBhIG5ldHdvcmsgZXJyb3IuXG4gIGlmIChyZXF1ZXN0QmFkUG9ydChyZXF1ZXN0KSA9PT0gJ2Jsb2NrZWQnKSB7XG4gICAgcmVzcG9uc2UgPSBtYWtlTmV0d29ya0Vycm9yKCdiYWQgcG9ydCcpXG4gIH1cbiAgLy8gVE9ETzogc2hvdWxkIGZldGNoaW5nIHJlcXVlc3QgYmUgYmxvY2tlZCBhcyBtaXhlZCBjb250ZW50P1xuICAvLyBUT0RPOiBzaG91bGQgcmVxdWVzdCBiZSBibG9ja2VkIGJ5IENvbnRlbnQgU2VjdXJpdHkgUG9saWN5P1xuXG4gIC8vIDcuIElmIHJlcXVlc3TigJlzIHJlZmVycmVyIHBvbGljeSBpcyB0aGUgZW1wdHkgc3RyaW5nLCB0aGVuIHNldCByZXF1ZXN04oCZc1xuICAvLyByZWZlcnJlciBwb2xpY3kgdG8gcmVxdWVzdOKAmXMgcG9saWN5IGNvbnRhaW5lcuKAmXMgcmVmZXJyZXIgcG9saWN5LlxuICBpZiAocmVxdWVzdC5yZWZlcnJlclBvbGljeSA9PT0gJycpIHtcbiAgICByZXF1ZXN0LnJlZmVycmVyUG9saWN5ID0gcmVxdWVzdC5wb2xpY3lDb250YWluZXIucmVmZXJyZXJQb2xpY3lcbiAgfVxuXG4gIC8vIDguIElmIHJlcXVlc3TigJlzIHJlZmVycmVyIGlzIG5vdCBcIm5vLXJlZmVycmVyXCIsIHRoZW4gc2V0IHJlcXVlc3TigJlzXG4gIC8vIHJlZmVycmVyIHRvIHRoZSByZXN1bHQgb2YgaW52b2tpbmcgZGV0ZXJtaW5lIHJlcXVlc3TigJlzIHJlZmVycmVyLlxuICBpZiAocmVxdWVzdC5yZWZlcnJlciAhPT0gJ25vLXJlZmVycmVyJykge1xuICAgIHJlcXVlc3QucmVmZXJyZXIgPSBkZXRlcm1pbmVSZXF1ZXN0c1JlZmVycmVyKHJlcXVlc3QpXG4gIH1cblxuICAvLyA5LiBTZXQgcmVxdWVzdOKAmXMgY3VycmVudCBVUkzigJlzIHNjaGVtZSB0byBcImh0dHBzXCIgaWYgYWxsIG9mIHRoZSBmb2xsb3dpbmdcbiAgLy8gY29uZGl0aW9ucyBhcmUgdHJ1ZTpcbiAgLy8gLSByZXF1ZXN04oCZcyBjdXJyZW50IFVSTOKAmXMgc2NoZW1lIGlzIFwiaHR0cFwiXG4gIC8vIC0gcmVxdWVzdOKAmXMgY3VycmVudCBVUkzigJlzIGhvc3QgaXMgYSBkb21haW5cbiAgLy8gLSBNYXRjaGluZyByZXF1ZXN04oCZcyBjdXJyZW50IFVSTOKAmXMgaG9zdCBwZXIgS25vd24gSFNUUyBIb3N0IERvbWFpbiBOYW1lXG4gIC8vICAgTWF0Y2hpbmcgcmVzdWx0cyBpbiBlaXRoZXIgYSBzdXBlcmRvbWFpbiBtYXRjaCB3aXRoIGFuIGFzc2VydGVkXG4gIC8vICAgaW5jbHVkZVN1YkRvbWFpbnMgZGlyZWN0aXZlIG9yIGEgY29uZ3J1ZW50IG1hdGNoICh3aXRoIG9yIHdpdGhvdXQgYW5cbiAgLy8gICBhc3NlcnRlZCBpbmNsdWRlU3ViRG9tYWlucyBkaXJlY3RpdmUpLiBbSFNUU11cbiAgLy8gVE9ET1xuXG4gIC8vIDEwLiBJZiByZWN1cnNpdmUgaXMgZmFsc2UsIHRoZW4gcnVuIHRoZSByZW1haW5pbmcgc3RlcHMgaW4gcGFyYWxsZWwuXG4gIC8vIFRPRE9cblxuICAvLyAxMS4gSWYgcmVzcG9uc2UgaXMgbnVsbCwgdGhlbiBzZXQgcmVzcG9uc2UgdG8gdGhlIHJlc3VsdCBvZiBydW5uaW5nXG4gIC8vIHRoZSBzdGVwcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBmaXJzdCBtYXRjaGluZyBzdGF0ZW1lbnQ6XG4gIGlmIChyZXNwb25zZSA9PT0gbnVsbCkge1xuICAgIHJlc3BvbnNlID0gYXdhaXQgKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRVUkwgPSByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KVxuXG4gICAgICBpZiAoXG4gICAgICAgIC8vIC0gcmVxdWVzdOKAmXMgY3VycmVudCBVUkzigJlzIG9yaWdpbiBpcyBzYW1lIG9yaWdpbiB3aXRoIHJlcXVlc3TigJlzIG9yaWdpbixcbiAgICAgICAgLy8gICBhbmQgcmVxdWVzdOKAmXMgcmVzcG9uc2UgdGFpbnRpbmcgaXMgXCJiYXNpY1wiXG4gICAgICAgIChzYW1lT3JpZ2luKGN1cnJlbnRVUkwsIHJlcXVlc3QudXJsKSAmJiByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdiYXNpYycpIHx8XG4gICAgICAgIC8vIHJlcXVlc3TigJlzIGN1cnJlbnQgVVJM4oCZcyBzY2hlbWUgaXMgXCJkYXRhXCJcbiAgICAgICAgKGN1cnJlbnRVUkwucHJvdG9jb2wgPT09ICdkYXRhOicpIHx8XG4gICAgICAgIC8vIC0gcmVxdWVzdOKAmXMgbW9kZSBpcyBcIm5hdmlnYXRlXCIgb3IgXCJ3ZWJzb2NrZXRcIlxuICAgICAgICAocmVxdWVzdC5tb2RlID09PSAnbmF2aWdhdGUnIHx8IHJlcXVlc3QubW9kZSA9PT0gJ3dlYnNvY2tldCcpXG4gICAgICApIHtcbiAgICAgICAgLy8gMS4gU2V0IHJlcXVlc3TigJlzIHJlc3BvbnNlIHRhaW50aW5nIHRvIFwiYmFzaWNcIi5cbiAgICAgICAgcmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID0gJ2Jhc2ljJ1xuXG4gICAgICAgIC8vIDIuIFJldHVybiB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgc2NoZW1lIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLlxuICAgICAgICByZXR1cm4gYXdhaXQgc2NoZW1lRmV0Y2goZmV0Y2hQYXJhbXMpXG4gICAgICB9XG5cbiAgICAgIC8vIHJlcXVlc3TigJlzIG1vZGUgaXMgXCJzYW1lLW9yaWdpblwiXG4gICAgICBpZiAocmVxdWVzdC5tb2RlID09PSAnc2FtZS1vcmlnaW4nKSB7XG4gICAgICAgIC8vIDEuIFJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdyZXF1ZXN0IG1vZGUgY2Fubm90IGJlIFwic2FtZS1vcmlnaW5cIicpXG4gICAgICB9XG5cbiAgICAgIC8vIHJlcXVlc3TigJlzIG1vZGUgaXMgXCJuby1jb3JzXCJcbiAgICAgIGlmIChyZXF1ZXN0Lm1vZGUgPT09ICduby1jb3JzJykge1xuICAgICAgICAvLyAxLiBJZiByZXF1ZXN04oCZcyByZWRpcmVjdCBtb2RlIGlzIG5vdCBcImZvbGxvd1wiLCB0aGVuIHJldHVybiBhIG5ldHdvcmtcbiAgICAgICAgLy8gZXJyb3IuXG4gICAgICAgIGlmIChyZXF1ZXN0LnJlZGlyZWN0ICE9PSAnZm9sbG93Jykge1xuICAgICAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKFxuICAgICAgICAgICAgJ3JlZGlyZWN0IG1vZGUgY2Fubm90IGJlIFwiZm9sbG93XCIgZm9yIFwibm8tY29yc1wiIHJlcXVlc3QnXG4gICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gMi4gU2V0IHJlcXVlc3TigJlzIHJlc3BvbnNlIHRhaW50aW5nIHRvIFwib3BhcXVlXCIuXG4gICAgICAgIHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9ICdvcGFxdWUnXG5cbiAgICAgICAgLy8gMy4gUmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZyBzY2hlbWUgZmV0Y2ggZ2l2ZW4gZmV0Y2hQYXJhbXMuXG4gICAgICAgIHJldHVybiBhd2FpdCBzY2hlbWVGZXRjaChmZXRjaFBhcmFtcylcbiAgICAgIH1cblxuICAgICAgLy8gcmVxdWVzdOKAmXMgY3VycmVudCBVUkzigJlzIHNjaGVtZSBpcyBub3QgYW4gSFRUUChTKSBzY2hlbWVcbiAgICAgIGlmICghdXJsSXNIdHRwSHR0cHNTY2hlbWUocmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdCkpKSB7XG4gICAgICAgIC8vIFJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdVUkwgc2NoZW1lIG11c3QgYmUgYSBIVFRQKFMpIHNjaGVtZScpXG4gICAgICB9XG5cbiAgICAgIC8vIC0gcmVxdWVzdOKAmXMgdXNlLUNPUlMtcHJlZmxpZ2h0IGZsYWcgaXMgc2V0XG4gICAgICAvLyAtIHJlcXVlc3TigJlzIHVuc2FmZS1yZXF1ZXN0IGZsYWcgaXMgc2V0IGFuZCBlaXRoZXIgcmVxdWVzdOKAmXMgbWV0aG9kIGlzXG4gICAgICAvLyAgIG5vdCBhIENPUlMtc2FmZWxpc3RlZCBtZXRob2Qgb3IgQ09SUy11bnNhZmUgcmVxdWVzdC1oZWFkZXIgbmFtZXMgd2l0aFxuICAgICAgLy8gICByZXF1ZXN04oCZcyBoZWFkZXIgbGlzdCBpcyBub3QgZW1wdHlcbiAgICAgIC8vICAgIDEuIFNldCByZXF1ZXN04oCZcyByZXNwb25zZSB0YWludGluZyB0byBcImNvcnNcIi5cbiAgICAgIC8vICAgIDIuIExldCBjb3JzV2l0aFByZWZsaWdodFJlc3BvbnNlIGJlIHRoZSByZXN1bHQgb2YgcnVubmluZyBIVFRQIGZldGNoXG4gICAgICAvLyAgICBnaXZlbiBmZXRjaFBhcmFtcyBhbmQgdHJ1ZS5cbiAgICAgIC8vICAgIDMuIElmIGNvcnNXaXRoUHJlZmxpZ2h0UmVzcG9uc2UgaXMgYSBuZXR3b3JrIGVycm9yLCB0aGVuIGNsZWFyIGNhY2hlXG4gICAgICAvLyAgICBlbnRyaWVzIHVzaW5nIHJlcXVlc3QuXG4gICAgICAvLyAgICA0LiBSZXR1cm4gY29yc1dpdGhQcmVmbGlnaHRSZXNwb25zZS5cbiAgICAgIC8vIFRPRE9cblxuICAgICAgLy8gT3RoZXJ3aXNlXG4gICAgICAvLyAgICAxLiBTZXQgcmVxdWVzdOKAmXMgcmVzcG9uc2UgdGFpbnRpbmcgdG8gXCJjb3JzXCIuXG4gICAgICByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPSAnY29ycydcblxuICAgICAgLy8gICAgMi4gUmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZyBIVFRQIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLlxuICAgICAgcmV0dXJuIGF3YWl0IGh0dHBGZXRjaChmZXRjaFBhcmFtcylcbiAgICB9KSgpXG4gIH1cblxuICAvLyAxMi4gSWYgcmVjdXJzaXZlIGlzIHRydWUsIHRoZW4gcmV0dXJuIHJlc3BvbnNlLlxuICBpZiAocmVjdXJzaXZlKSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlXG4gIH1cblxuICAvLyAxMy4gSWYgcmVzcG9uc2UgaXMgbm90IGEgbmV0d29yayBlcnJvciBhbmQgcmVzcG9uc2UgaXMgbm90IGEgZmlsdGVyZWRcbiAgLy8gcmVzcG9uc2UsIHRoZW46XG4gIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IDAgJiYgIXJlc3BvbnNlLmludGVybmFsUmVzcG9uc2UpIHtcbiAgICAvLyBJZiByZXF1ZXN04oCZcyByZXNwb25zZSB0YWludGluZyBpcyBcImNvcnNcIiwgdGhlbjpcbiAgICBpZiAocmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnY29ycycpIHtcbiAgICAgIC8vIDEuIExldCBoZWFkZXJOYW1lcyBiZSB0aGUgcmVzdWx0IG9mIGV4dHJhY3RpbmcgaGVhZGVyIGxpc3QgdmFsdWVzXG4gICAgICAvLyBnaXZlbiBgQWNjZXNzLUNvbnRyb2wtRXhwb3NlLUhlYWRlcnNgIGFuZCByZXNwb25zZeKAmXMgaGVhZGVyIGxpc3QuXG4gICAgICAvLyBUT0RPXG4gICAgICAvLyAyLiBJZiByZXF1ZXN04oCZcyBjcmVkZW50aWFscyBtb2RlIGlzIG5vdCBcImluY2x1ZGVcIiBhbmQgaGVhZGVyTmFtZXNcbiAgICAgIC8vIGNvbnRhaW5zIGAqYCwgdGhlbiBzZXQgcmVzcG9uc2XigJlzIENPUlMtZXhwb3NlZCBoZWFkZXItbmFtZSBsaXN0IHRvXG4gICAgICAvLyBhbGwgdW5pcXVlIGhlYWRlciBuYW1lcyBpbiByZXNwb25zZeKAmXMgaGVhZGVyIGxpc3QuXG4gICAgICAvLyBUT0RPXG4gICAgICAvLyAzLiBPdGhlcndpc2UsIGlmIGhlYWRlck5hbWVzIGlzIG5vdCBudWxsIG9yIGZhaWx1cmUsIHRoZW4gc2V0XG4gICAgICAvLyByZXNwb25zZeKAmXMgQ09SUy1leHBvc2VkIGhlYWRlci1uYW1lIGxpc3QgdG8gaGVhZGVyTmFtZXMuXG4gICAgICAvLyBUT0RPXG4gICAgfVxuXG4gICAgLy8gU2V0IHJlc3BvbnNlIHRvIHRoZSBmb2xsb3dpbmcgZmlsdGVyZWQgcmVzcG9uc2Ugd2l0aCByZXNwb25zZSBhcyBpdHNcbiAgICAvLyBpbnRlcm5hbCByZXNwb25zZSwgZGVwZW5kaW5nIG9uIHJlcXVlc3TigJlzIHJlc3BvbnNlIHRhaW50aW5nOlxuICAgIGlmIChyZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdiYXNpYycpIHtcbiAgICAgIHJlc3BvbnNlID0gZmlsdGVyUmVzcG9uc2UocmVzcG9uc2UsICdiYXNpYycpXG4gICAgfSBlbHNlIGlmIChyZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdjb3JzJykge1xuICAgICAgcmVzcG9uc2UgPSBmaWx0ZXJSZXNwb25zZShyZXNwb25zZSwgJ2NvcnMnKVxuICAgIH0gZWxzZSBpZiAocmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnb3BhcXVlJykge1xuICAgICAgcmVzcG9uc2UgPSBmaWx0ZXJSZXNwb25zZShyZXNwb25zZSwgJ29wYXF1ZScpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydChmYWxzZSlcbiAgICB9XG4gIH1cblxuICAvLyAxNC4gTGV0IGludGVybmFsUmVzcG9uc2UgYmUgcmVzcG9uc2UsIGlmIHJlc3BvbnNlIGlzIGEgbmV0d29yayBlcnJvcixcbiAgLy8gYW5kIHJlc3BvbnNl4oCZcyBpbnRlcm5hbCByZXNwb25zZSBvdGhlcndpc2UuXG4gIGxldCBpbnRlcm5hbFJlc3BvbnNlID1cbiAgICByZXNwb25zZS5zdGF0dXMgPT09IDAgPyByZXNwb25zZSA6IHJlc3BvbnNlLmludGVybmFsUmVzcG9uc2VcblxuICAvLyAxNS4gSWYgaW50ZXJuYWxSZXNwb25zZeKAmXMgVVJMIGxpc3QgaXMgZW1wdHksIHRoZW4gc2V0IGl0IHRvIGEgY2xvbmUgb2ZcbiAgLy8gcmVxdWVzdOKAmXMgVVJMIGxpc3QuXG4gIGlmIChpbnRlcm5hbFJlc3BvbnNlLnVybExpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgaW50ZXJuYWxSZXNwb25zZS51cmxMaXN0LnB1c2goLi4ucmVxdWVzdC51cmxMaXN0KVxuICB9XG5cbiAgLy8gMTYuIElmIHJlcXVlc3TigJlzIHRpbWluZyBhbGxvdyBmYWlsZWQgZmxhZyBpcyB1bnNldCwgdGhlbiBzZXRcbiAgLy8gaW50ZXJuYWxSZXNwb25zZeKAmXMgdGltaW5nIGFsbG93IHBhc3NlZCBmbGFnLlxuICBpZiAoIXJlcXVlc3QudGltaW5nQWxsb3dGYWlsZWQpIHtcbiAgICByZXNwb25zZS50aW1pbmdBbGxvd1Bhc3NlZCA9IHRydWVcbiAgfVxuXG4gIC8vIDE3LiBJZiByZXNwb25zZSBpcyBub3QgYSBuZXR3b3JrIGVycm9yIGFuZCBhbnkgb2YgdGhlIGZvbGxvd2luZyByZXR1cm5zXG4gIC8vIGJsb2NrZWRcbiAgLy8gLSBzaG91bGQgaW50ZXJuYWxSZXNwb25zZSB0byByZXF1ZXN0IGJlIGJsb2NrZWQgYXMgbWl4ZWQgY29udGVudFxuICAvLyAtIHNob3VsZCBpbnRlcm5hbFJlc3BvbnNlIHRvIHJlcXVlc3QgYmUgYmxvY2tlZCBieSBDb250ZW50IFNlY3VyaXR5IFBvbGljeVxuICAvLyAtIHNob3VsZCBpbnRlcm5hbFJlc3BvbnNlIHRvIHJlcXVlc3QgYmUgYmxvY2tlZCBkdWUgdG8gaXRzIE1JTUUgdHlwZVxuICAvLyAtIHNob3VsZCBpbnRlcm5hbFJlc3BvbnNlIHRvIHJlcXVlc3QgYmUgYmxvY2tlZCBkdWUgdG8gbm9zbmlmZlxuICAvLyBUT0RPXG5cbiAgLy8gMTguIElmIHJlc3BvbnNl4oCZcyB0eXBlIGlzIFwib3BhcXVlXCIsIGludGVybmFsUmVzcG9uc2XigJlzIHN0YXR1cyBpcyAyMDYsXG4gIC8vIGludGVybmFsUmVzcG9uc2XigJlzIHJhbmdlLXJlcXVlc3RlZCBmbGFnIGlzIHNldCwgYW5kIHJlcXVlc3TigJlzIGhlYWRlclxuICAvLyBsaXN0IGRvZXMgbm90IGNvbnRhaW4gYFJhbmdlYCwgdGhlbiBzZXQgcmVzcG9uc2UgYW5kIGludGVybmFsUmVzcG9uc2VcbiAgLy8gdG8gYSBuZXR3b3JrIGVycm9yLlxuICBpZiAoXG4gICAgcmVzcG9uc2UudHlwZSA9PT0gJ29wYXF1ZScgJiZcbiAgICBpbnRlcm5hbFJlc3BvbnNlLnN0YXR1cyA9PT0gMjA2ICYmXG4gICAgaW50ZXJuYWxSZXNwb25zZS5yYW5nZVJlcXVlc3RlZCAmJlxuICAgICFyZXF1ZXN0LmhlYWRlcnMuY29udGFpbnMoJ3JhbmdlJylcbiAgKSB7XG4gICAgcmVzcG9uc2UgPSBpbnRlcm5hbFJlc3BvbnNlID0gbWFrZU5ldHdvcmtFcnJvcigpXG4gIH1cblxuICAvLyAxOS4gSWYgcmVzcG9uc2UgaXMgbm90IGEgbmV0d29yayBlcnJvciBhbmQgZWl0aGVyIHJlcXVlc3TigJlzIG1ldGhvZCBpc1xuICAvLyBgSEVBRGAgb3IgYENPTk5FQ1RgLCBvciBpbnRlcm5hbFJlc3BvbnNl4oCZcyBzdGF0dXMgaXMgYSBudWxsIGJvZHkgc3RhdHVzLFxuICAvLyBzZXQgaW50ZXJuYWxSZXNwb25zZeKAmXMgYm9keSB0byBudWxsIGFuZCBkaXNyZWdhcmQgYW55IGVucXVldWluZyB0b3dhcmRcbiAgLy8gaXQgKGlmIGFueSkuXG4gIGlmIChcbiAgICByZXNwb25zZS5zdGF0dXMgIT09IDAgJiZcbiAgICAocmVxdWVzdC5tZXRob2QgPT09ICdIRUFEJyB8fFxuICAgICAgcmVxdWVzdC5tZXRob2QgPT09ICdDT05ORUNUJyB8fFxuICAgICAgbnVsbEJvZHlTdGF0dXMuaW5jbHVkZXMoaW50ZXJuYWxSZXNwb25zZS5zdGF0dXMpKVxuICApIHtcbiAgICBpbnRlcm5hbFJlc3BvbnNlLmJvZHkgPSBudWxsXG4gICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5kdW1wID0gdHJ1ZVxuICB9XG5cbiAgLy8gMjAuIElmIHJlcXVlc3TigJlzIGludGVncml0eSBtZXRhZGF0YSBpcyBub3QgdGhlIGVtcHR5IHN0cmluZywgdGhlbjpcbiAgaWYgKHJlcXVlc3QuaW50ZWdyaXR5KSB7XG4gICAgLy8gMS4gTGV0IHByb2Nlc3NCb2R5RXJyb3IgYmUgdGhpcyBzdGVwOiBydW4gZmV0Y2ggZmluYWxlIGdpdmVuIGZldGNoUGFyYW1zXG4gICAgLy8gYW5kIGEgbmV0d29yayBlcnJvci5cbiAgICBjb25zdCBwcm9jZXNzQm9keUVycm9yID0gKHJlYXNvbikgPT5cbiAgICAgIGZldGNoRmluYWxlKGZldGNoUGFyYW1zLCBtYWtlTmV0d29ya0Vycm9yKHJlYXNvbikpXG5cbiAgICAvLyAyLiBJZiByZXF1ZXN04oCZcyByZXNwb25zZSB0YWludGluZyBpcyBcIm9wYXF1ZVwiLCBvciByZXNwb25zZeKAmXMgYm9keSBpcyBudWxsLFxuICAgIC8vIHRoZW4gcnVuIHByb2Nlc3NCb2R5RXJyb3IgYW5kIGFib3J0IHRoZXNlIHN0ZXBzLlxuICAgIGlmIChyZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdvcGFxdWUnIHx8IHJlc3BvbnNlLmJvZHkgPT0gbnVsbCkge1xuICAgICAgcHJvY2Vzc0JvZHlFcnJvcihyZXNwb25zZS5lcnJvcilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIDMuIExldCBwcm9jZXNzQm9keSBnaXZlbiBieXRlcyBiZSB0aGVzZSBzdGVwczpcbiAgICBjb25zdCBwcm9jZXNzQm9keSA9IChieXRlcykgPT4ge1xuICAgICAgLy8gMS4gSWYgYnl0ZXMgZG8gbm90IG1hdGNoIHJlcXVlc3TigJlzIGludGVncml0eSBtZXRhZGF0YSxcbiAgICAgIC8vIHRoZW4gcnVuIHByb2Nlc3NCb2R5RXJyb3IgYW5kIGFib3J0IHRoZXNlIHN0ZXBzLiBbU1JJXVxuICAgICAgaWYgKCFieXRlc01hdGNoKGJ5dGVzLCByZXF1ZXN0LmludGVncml0eSkpIHtcbiAgICAgICAgcHJvY2Vzc0JvZHlFcnJvcignaW50ZWdyaXR5IG1pc21hdGNoJylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIFNldCByZXNwb25zZeKAmXMgYm9keSB0byBieXRlcyBhcyBhIGJvZHkuXG4gICAgICByZXNwb25zZS5ib2R5ID0gc2FmZWx5RXh0cmFjdEJvZHkoYnl0ZXMpWzBdXG5cbiAgICAgIC8vIDMuIFJ1biBmZXRjaCBmaW5hbGUgZ2l2ZW4gZmV0Y2hQYXJhbXMgYW5kIHJlc3BvbnNlLlxuICAgICAgZmV0Y2hGaW5hbGUoZmV0Y2hQYXJhbXMsIHJlc3BvbnNlKVxuICAgIH1cblxuICAgIC8vIDQuIEZ1bGx5IHJlYWQgcmVzcG9uc2XigJlzIGJvZHkgZ2l2ZW4gcHJvY2Vzc0JvZHkgYW5kIHByb2Nlc3NCb2R5RXJyb3IuXG4gICAgYXdhaXQgZnVsbHlSZWFkQm9keShyZXNwb25zZS5ib2R5LCBwcm9jZXNzQm9keSwgcHJvY2Vzc0JvZHlFcnJvcilcbiAgfSBlbHNlIHtcbiAgICAvLyAyMS4gT3RoZXJ3aXNlLCBydW4gZmV0Y2ggZmluYWxlIGdpdmVuIGZldGNoUGFyYW1zIGFuZCByZXNwb25zZS5cbiAgICBmZXRjaEZpbmFsZShmZXRjaFBhcmFtcywgcmVzcG9uc2UpXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtc2NoZW1lLWZldGNoXG4vLyBnaXZlbiBhIGZldGNoIHBhcmFtcyBmZXRjaFBhcmFtc1xuZnVuY3Rpb24gc2NoZW1lRmV0Y2ggKGZldGNoUGFyYW1zKSB7XG4gIC8vIE5vdGU6IHNpbmNlIHRoZSBjb25uZWN0aW9uIGlzIGRlc3Ryb3llZCBvbiByZWRpcmVjdCwgd2hpY2ggc2V0cyBmZXRjaFBhcmFtcyB0byBhXG4gIC8vIGNhbmNlbGxlZCBzdGF0ZSwgd2UgZG8gbm90IHdhbnQgdGhpcyBjb25kaXRpb24gdG8gdHJpZ2dlciAqdW5sZXNzKiB0aGVyZSBoYXZlIGJlZW5cbiAgLy8gbm8gcmVkaXJlY3RzLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzE3NzZcbiAgLy8gMS4gSWYgZmV0Y2hQYXJhbXMgaXMgY2FuY2VsZWQsIHRoZW4gcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSBuZXR3b3JrIGVycm9yIGZvciBmZXRjaFBhcmFtcy5cbiAgaWYgKGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSAmJiBmZXRjaFBhcmFtcy5yZXF1ZXN0LnJlZGlyZWN0Q291bnQgPT09IDApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VBcHByb3ByaWF0ZU5ldHdvcmtFcnJvcihmZXRjaFBhcmFtcykpXG4gIH1cblxuICAvLyAyLiBMZXQgcmVxdWVzdCBiZSBmZXRjaFBhcmFtc+KAmXMgcmVxdWVzdC5cbiAgY29uc3QgeyByZXF1ZXN0IH0gPSBmZXRjaFBhcmFtc1xuXG4gIGNvbnN0IHsgcHJvdG9jb2w6IHNjaGVtZSB9ID0gcmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdClcblxuICAvLyAzLiBTd2l0Y2ggb24gcmVxdWVzdOKAmXMgY3VycmVudCBVUkzigJlzIHNjaGVtZSBhbmQgcnVuIHRoZSBhc3NvY2lhdGVkIHN0ZXBzOlxuICBzd2l0Y2ggKHNjaGVtZSkge1xuICAgIGNhc2UgJ2Fib3V0Oic6IHtcbiAgICAgIC8vIElmIHJlcXVlc3TigJlzIGN1cnJlbnQgVVJM4oCZcyBwYXRoIGlzIHRoZSBzdHJpbmcgXCJibGFua1wiLCB0aGVuIHJldHVybiBhIG5ldyByZXNwb25zZVxuICAgICAgLy8gd2hvc2Ugc3RhdHVzIG1lc3NhZ2UgaXMgYE9LYCwgaGVhZGVyIGxpc3QgaXMgwqsgKGBDb250ZW50LVR5cGVgLCBgdGV4dC9odG1sO2NoYXJzZXQ9dXRmLThgKSDCuyxcbiAgICAgIC8vIGFuZCBib2R5IGlzIHRoZSBlbXB0eSBieXRlIHNlcXVlbmNlIGFzIGEgYm9keS5cblxuICAgICAgLy8gT3RoZXJ3aXNlLCByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKCdhYm91dCBzY2hlbWUgaXMgbm90IHN1cHBvcnRlZCcpKVxuICAgIH1cbiAgICBjYXNlICdibG9iOic6IHtcbiAgICAgIGlmICghcmVzb2x2ZU9iamVjdFVSTCkge1xuICAgICAgICByZXNvbHZlT2JqZWN0VVJMID0gcmVxdWlyZSgnYnVmZmVyJykucmVzb2x2ZU9iamVjdFVSTFxuICAgICAgfVxuXG4gICAgICAvLyAxLiBMZXQgYmxvYlVSTEVudHJ5IGJlIHJlcXVlc3TigJlzIGN1cnJlbnQgVVJM4oCZcyBibG9iIFVSTCBlbnRyeS5cbiAgICAgIGNvbnN0IGJsb2JVUkxFbnRyeSA9IHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpXG5cbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS93ZWItcGxhdGZvcm0tdGVzdHMvd3B0L2Jsb2IvN2IwZWJhY2NjNjJiNTY2YTE5NjUzOTZlNWJlN2JiMmJjMDZmODQxZi9GaWxlQVBJL3VybC9yZXNvdXJjZXMvZmV0Y2gtdGVzdHMuanMjTDUyLUw1NlxuICAgICAgLy8gQnVmZmVyLnJlc29sdmVPYmplY3RVUkwgZG9lcyBub3QgaWdub3JlIFVSTCBxdWVyaWVzLlxuICAgICAgaWYgKGJsb2JVUkxFbnRyeS5zZWFyY2gubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignTmV0d29ya0Vycm9yIHdoZW4gYXR0ZW1wdGluZyB0byBmZXRjaCByZXNvdXJjZS4nKSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgYmxvYlVSTEVudHJ5T2JqZWN0ID0gcmVzb2x2ZU9iamVjdFVSTChibG9iVVJMRW50cnkudG9TdHJpbmcoKSlcblxuICAgICAgLy8gMi4gSWYgcmVxdWVzdOKAmXMgbWV0aG9kIGlzIG5vdCBgR0VUYCwgYmxvYlVSTEVudHJ5IGlzIG51bGwsIG9yIGJsb2JVUkxFbnRyeeKAmXNcbiAgICAgIC8vICAgIG9iamVjdCBpcyBub3QgYSBCbG9iIG9iamVjdCwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICAgICAgaWYgKHJlcXVlc3QubWV0aG9kICE9PSAnR0VUJyB8fCAhaXNCbG9iTGlrZShibG9iVVJMRW50cnlPYmplY3QpKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignaW52YWxpZCBtZXRob2QnKSlcbiAgICAgIH1cblxuICAgICAgLy8gMy4gTGV0IGJvZHlXaXRoVHlwZSBiZSB0aGUgcmVzdWx0IG9mIHNhZmVseSBleHRyYWN0aW5nIGJsb2JVUkxFbnRyeeKAmXMgb2JqZWN0LlxuICAgICAgY29uc3QgYm9keVdpdGhUeXBlID0gc2FmZWx5RXh0cmFjdEJvZHkoYmxvYlVSTEVudHJ5T2JqZWN0KVxuXG4gICAgICAvLyA0LiBMZXQgYm9keSBiZSBib2R5V2l0aFR5cGXigJlzIGJvZHkuXG4gICAgICBjb25zdCBib2R5ID0gYm9keVdpdGhUeXBlWzBdXG5cbiAgICAgIC8vIDUuIExldCBsZW5ndGggYmUgYm9keeKAmXMgbGVuZ3RoLCBzZXJpYWxpemVkIGFuZCBpc29tb3JwaGljIGVuY29kZWQuXG4gICAgICBjb25zdCBsZW5ndGggPSBpc29tb3JwaGljRW5jb2RlKGAke2JvZHkubGVuZ3RofWApXG5cbiAgICAgIC8vIDYuIExldCB0eXBlIGJlIGJvZHlXaXRoVHlwZeKAmXMgdHlwZSBpZiBpdCBpcyBub24tbnVsbDsgb3RoZXJ3aXNlIHRoZSBlbXB0eSBieXRlIHNlcXVlbmNlLlxuICAgICAgY29uc3QgdHlwZSA9IGJvZHlXaXRoVHlwZVsxXSA/PyAnJ1xuXG4gICAgICAvLyA3LiBSZXR1cm4gYSBuZXcgcmVzcG9uc2Ugd2hvc2Ugc3RhdHVzIG1lc3NhZ2UgaXMgYE9LYCwgaGVhZGVyIGxpc3QgaXNcbiAgICAgIC8vICAgIMKrIChgQ29udGVudC1MZW5ndGhgLCBsZW5ndGgpLCAoYENvbnRlbnQtVHlwZWAsIHR5cGUpIMK7LCBhbmQgYm9keSBpcyBib2R5LlxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBtYWtlUmVzcG9uc2Uoe1xuICAgICAgICBzdGF0dXNUZXh0OiAnT0snLFxuICAgICAgICBoZWFkZXJzTGlzdDogW1xuICAgICAgICAgIFsnY29udGVudC1sZW5ndGgnLCB7IG5hbWU6ICdDb250ZW50LUxlbmd0aCcsIHZhbHVlOiBsZW5ndGggfV0sXG4gICAgICAgICAgWydjb250ZW50LXR5cGUnLCB7IG5hbWU6ICdDb250ZW50LVR5cGUnLCB2YWx1ZTogdHlwZSB9XVxuICAgICAgICBdXG4gICAgICB9KVxuXG4gICAgICByZXNwb25zZS5ib2R5ID0gYm9keVxuXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3BvbnNlKVxuICAgIH1cbiAgICBjYXNlICdkYXRhOic6IHtcbiAgICAgIC8vIDEuIExldCBkYXRhVVJMU3RydWN0IGJlIHRoZSByZXN1bHQgb2YgcnVubmluZyB0aGVcbiAgICAgIC8vICAgIGRhdGE6IFVSTCBwcm9jZXNzb3Igb24gcmVxdWVzdOKAmXMgY3VycmVudCBVUkwuXG4gICAgICBjb25zdCBjdXJyZW50VVJMID0gcmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdClcbiAgICAgIGNvbnN0IGRhdGFVUkxTdHJ1Y3QgPSBkYXRhVVJMUHJvY2Vzc29yKGN1cnJlbnRVUkwpXG5cbiAgICAgIC8vIDIuIElmIGRhdGFVUkxTdHJ1Y3QgaXMgZmFpbHVyZSwgdGhlbiByZXR1cm4gYVxuICAgICAgLy8gICAgbmV0d29yayBlcnJvci5cbiAgICAgIGlmIChkYXRhVVJMU3RydWN0ID09PSAnZmFpbHVyZScpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKCdmYWlsZWQgdG8gZmV0Y2ggdGhlIGRhdGEgVVJMJykpXG4gICAgICB9XG5cbiAgICAgIC8vIDMuIExldCBtaW1lVHlwZSBiZSBkYXRhVVJMU3RydWN04oCZcyBNSU1FIHR5cGUsIHNlcmlhbGl6ZWQuXG4gICAgICBjb25zdCBtaW1lVHlwZSA9IHNlcmlhbGl6ZUFNaW1lVHlwZShkYXRhVVJMU3RydWN0Lm1pbWVUeXBlKVxuXG4gICAgICAvLyA0LiBSZXR1cm4gYSByZXNwb25zZSB3aG9zZSBzdGF0dXMgbWVzc2FnZSBpcyBgT0tgLFxuICAgICAgLy8gICAgaGVhZGVyIGxpc3QgaXMgwqsgKGBDb250ZW50LVR5cGVgLCBtaW1lVHlwZSkgwrssXG4gICAgICAvLyAgICBhbmQgYm9keSBpcyBkYXRhVVJMU3RydWN04oCZcyBib2R5IGFzIGEgYm9keS5cbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZVJlc3BvbnNlKHtcbiAgICAgICAgc3RhdHVzVGV4dDogJ09LJyxcbiAgICAgICAgaGVhZGVyc0xpc3Q6IFtcbiAgICAgICAgICBbJ2NvbnRlbnQtdHlwZScsIHsgbmFtZTogJ0NvbnRlbnQtVHlwZScsIHZhbHVlOiBtaW1lVHlwZSB9XVxuICAgICAgICBdLFxuICAgICAgICBib2R5OiBzYWZlbHlFeHRyYWN0Qm9keShkYXRhVVJMU3RydWN0LmJvZHkpWzBdXG4gICAgICB9KSlcbiAgICB9XG4gICAgY2FzZSAnZmlsZTonOiB7XG4gICAgICAvLyBGb3Igbm93LCB1bmZvcnR1bmF0ZSBhcyBpdCBpcywgZmlsZSBVUkxzIGFyZSBsZWZ0IGFzIGFuIGV4ZXJjaXNlIGZvciB0aGUgcmVhZGVyLlxuICAgICAgLy8gV2hlbiBpbiBkb3VidCwgcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignbm90IGltcGxlbWVudGVkLi4uIHlldC4uLicpKVxuICAgIH1cbiAgICBjYXNlICdodHRwOic6XG4gICAgY2FzZSAnaHR0cHM6Jzoge1xuICAgICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZyBIVFRQIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLlxuXG4gICAgICByZXR1cm4gaHR0cEZldGNoKGZldGNoUGFyYW1zKVxuICAgICAgICAuY2F0Y2goKGVycikgPT4gbWFrZU5ldHdvcmtFcnJvcihlcnIpKVxuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoJ3Vua25vd24gc2NoZW1lJykpXG4gICAgfVxuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmaW5hbGl6ZS1yZXNwb25zZVxuZnVuY3Rpb24gZmluYWxpemVSZXNwb25zZSAoZmV0Y2hQYXJhbXMsIHJlc3BvbnNlKSB7XG4gIC8vIDEuIFNldCBmZXRjaFBhcmFtc+KAmXMgcmVxdWVzdOKAmXMgZG9uZSBmbGFnLlxuICBmZXRjaFBhcmFtcy5yZXF1ZXN0LmRvbmUgPSB0cnVlXG5cbiAgLy8gMiwgSWYgZmV0Y2hQYXJhbXPigJlzIHByb2Nlc3MgcmVzcG9uc2UgZG9uZSBpcyBub3QgbnVsbCwgdGhlbiBxdWV1ZSBhIGZldGNoXG4gIC8vIHRhc2sgdG8gcnVuIGZldGNoUGFyYW1z4oCZcyBwcm9jZXNzIHJlc3BvbnNlIGRvbmUgZ2l2ZW4gcmVzcG9uc2UsIHdpdGhcbiAgLy8gZmV0Y2hQYXJhbXPigJlzIHRhc2sgZGVzdGluYXRpb24uXG4gIGlmIChmZXRjaFBhcmFtcy5wcm9jZXNzUmVzcG9uc2VEb25lICE9IG51bGwpIHtcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBmZXRjaFBhcmFtcy5wcm9jZXNzUmVzcG9uc2VEb25lKHJlc3BvbnNlKSlcbiAgfVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZmV0Y2gtZmluYWxlXG5mdW5jdGlvbiBmZXRjaEZpbmFsZSAoZmV0Y2hQYXJhbXMsIHJlc3BvbnNlKSB7XG4gIC8vIDEuIElmIHJlc3BvbnNlIGlzIGEgbmV0d29yayBlcnJvciwgdGhlbjpcbiAgaWYgKHJlc3BvbnNlLnR5cGUgPT09ICdlcnJvcicpIHtcbiAgICAvLyAxLiBTZXQgcmVzcG9uc2XigJlzIFVSTCBsaXN0IHRvIMKrIGZldGNoUGFyYW1z4oCZcyByZXF1ZXN04oCZcyBVUkwgbGlzdFswXSDCuy5cbiAgICByZXNwb25zZS51cmxMaXN0ID0gW2ZldGNoUGFyYW1zLnJlcXVlc3QudXJsTGlzdFswXV1cblxuICAgIC8vIDIuIFNldCByZXNwb25zZeKAmXMgdGltaW5nIGluZm8gdG8gdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhbiBvcGFxdWUgdGltaW5nXG4gICAgLy8gaW5mbyBmb3IgZmV0Y2hQYXJhbXPigJlzIHRpbWluZyBpbmZvLlxuICAgIHJlc3BvbnNlLnRpbWluZ0luZm8gPSBjcmVhdGVPcGFxdWVUaW1pbmdJbmZvKHtcbiAgICAgIHN0YXJ0VGltZTogZmV0Y2hQYXJhbXMudGltaW5nSW5mby5zdGFydFRpbWVcbiAgICB9KVxuICB9XG5cbiAgLy8gMi4gTGV0IHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSBiZSB0aGUgZm9sbG93aW5nIHN0ZXBzOlxuICBjb25zdCBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHkgPSAoKSA9PiB7XG4gICAgLy8gMS4gU2V0IGZldGNoUGFyYW1z4oCZcyByZXF1ZXN04oCZcyBkb25lIGZsYWcuXG4gICAgZmV0Y2hQYXJhbXMucmVxdWVzdC5kb25lID0gdHJ1ZVxuXG4gICAgLy8gSWYgZmV0Y2hQYXJhbXPigJlzIHByb2Nlc3MgcmVzcG9uc2UgZW5kLW9mLWJvZHkgaXMgbm90IG51bGwsXG4gICAgLy8gdGhlbiBxdWV1ZSBhIGZldGNoIHRhc2sgdG8gcnVuIGZldGNoUGFyYW1z4oCZcyBwcm9jZXNzIHJlc3BvbnNlXG4gICAgLy8gZW5kLW9mLWJvZHkgZ2l2ZW4gcmVzcG9uc2Ugd2l0aCBmZXRjaFBhcmFtc+KAmXMgdGFzayBkZXN0aW5hdGlvbi5cbiAgICBpZiAoZmV0Y2hQYXJhbXMucHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5ICE9IG51bGwpIHtcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZUVuZE9mQm9keShyZXNwb25zZSkpXG4gICAgfVxuICB9XG5cbiAgLy8gMy4gSWYgZmV0Y2hQYXJhbXPigJlzIHByb2Nlc3MgcmVzcG9uc2UgaXMgbm9uLW51bGwsIHRoZW4gcXVldWUgYSBmZXRjaCB0YXNrXG4gIC8vIHRvIHJ1biBmZXRjaFBhcmFtc+KAmXMgcHJvY2VzcyByZXNwb25zZSBnaXZlbiByZXNwb25zZSwgd2l0aCBmZXRjaFBhcmFtc+KAmXNcbiAgLy8gdGFzayBkZXN0aW5hdGlvbi5cbiAgaWYgKGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZSAhPSBudWxsKSB7XG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gZmV0Y2hQYXJhbXMucHJvY2Vzc1Jlc3BvbnNlKHJlc3BvbnNlKSlcbiAgfVxuXG4gIC8vIDQuIElmIHJlc3BvbnNl4oCZcyBib2R5IGlzIG51bGwsIHRoZW4gcnVuIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keS5cbiAgaWYgKHJlc3BvbnNlLmJvZHkgPT0gbnVsbCkge1xuICAgIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSgpXG4gIH0gZWxzZSB7XG4gIC8vIDUuIE90aGVyd2lzZTpcblxuICAgIC8vIDEuIExldCB0cmFuc2Zvcm1TdHJlYW0gYmUgYSBuZXcgYSBUcmFuc2Zvcm1TdHJlYW0uXG5cbiAgICAvLyAyLiBMZXQgaWRlbnRpdHlUcmFuc2Zvcm1BbGdvcml0aG0gYmUgYW4gYWxnb3JpdGhtIHdoaWNoLCBnaXZlbiBjaHVuayxcbiAgICAvLyBlbnF1ZXVlcyBjaHVuayBpbiB0cmFuc2Zvcm1TdHJlYW0uXG4gICAgY29uc3QgaWRlbnRpdHlUcmFuc2Zvcm1BbGdvcml0aG0gPSAoY2h1bmssIGNvbnRyb2xsZXIpID0+IHtcbiAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShjaHVuaylcbiAgICB9XG5cbiAgICAvLyAzLiBTZXQgdXAgdHJhbnNmb3JtU3RyZWFtIHdpdGggdHJhbnNmb3JtQWxnb3JpdGhtIHNldCB0byBpZGVudGl0eVRyYW5zZm9ybUFsZ29yaXRobVxuICAgIC8vIGFuZCBmbHVzaEFsZ29yaXRobSBzZXQgdG8gcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5LlxuICAgIGNvbnN0IHRyYW5zZm9ybVN0cmVhbSA9IG5ldyBUcmFuc2Zvcm1TdHJlYW0oe1xuICAgICAgc3RhcnQgKCkge30sXG4gICAgICB0cmFuc2Zvcm06IGlkZW50aXR5VHJhbnNmb3JtQWxnb3JpdGhtLFxuICAgICAgZmx1c2g6IHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keVxuICAgIH0sIHtcbiAgICAgIHNpemUgKCkge1xuICAgICAgICByZXR1cm4gMVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIHNpemUgKCkge1xuICAgICAgICByZXR1cm4gMVxuICAgICAgfVxuICAgIH0pXG5cbiAgICAvLyA0LiBTZXQgcmVzcG9uc2XigJlzIGJvZHkgdG8gdGhlIHJlc3VsdCBvZiBwaXBpbmcgcmVzcG9uc2XigJlzIGJvZHkgdGhyb3VnaCB0cmFuc2Zvcm1TdHJlYW0uXG4gICAgcmVzcG9uc2UuYm9keSA9IHsgc3RyZWFtOiByZXNwb25zZS5ib2R5LnN0cmVhbS5waXBlVGhyb3VnaCh0cmFuc2Zvcm1TdHJlYW0pIH1cbiAgfVxuXG4gIC8vIDYuIElmIGZldGNoUGFyYW1z4oCZcyBwcm9jZXNzIHJlc3BvbnNlIGNvbnN1bWUgYm9keSBpcyBub24tbnVsbCwgdGhlbjpcbiAgaWYgKGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZUNvbnN1bWVCb2R5ICE9IG51bGwpIHtcbiAgICAvLyAxLiBMZXQgcHJvY2Vzc0JvZHkgZ2l2ZW4gbnVsbE9yQnl0ZXMgYmUgdGhpcyBzdGVwOiBydW4gZmV0Y2hQYXJhbXPigJlzXG4gICAgLy8gcHJvY2VzcyByZXNwb25zZSBjb25zdW1lIGJvZHkgZ2l2ZW4gcmVzcG9uc2UgYW5kIG51bGxPckJ5dGVzLlxuICAgIGNvbnN0IHByb2Nlc3NCb2R5ID0gKG51bGxPckJ5dGVzKSA9PiBmZXRjaFBhcmFtcy5wcm9jZXNzUmVzcG9uc2VDb25zdW1lQm9keShyZXNwb25zZSwgbnVsbE9yQnl0ZXMpXG5cbiAgICAvLyAyLiBMZXQgcHJvY2Vzc0JvZHlFcnJvciBiZSB0aGlzIHN0ZXA6IHJ1biBmZXRjaFBhcmFtc+KAmXMgcHJvY2Vzc1xuICAgIC8vIHJlc3BvbnNlIGNvbnN1bWUgYm9keSBnaXZlbiByZXNwb25zZSBhbmQgZmFpbHVyZS5cbiAgICBjb25zdCBwcm9jZXNzQm9keUVycm9yID0gKGZhaWx1cmUpID0+IGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZUNvbnN1bWVCb2R5KHJlc3BvbnNlLCBmYWlsdXJlKVxuXG4gICAgLy8gMy4gSWYgcmVzcG9uc2XigJlzIGJvZHkgaXMgbnVsbCwgdGhlbiBxdWV1ZSBhIGZldGNoIHRhc2sgdG8gcnVuIHByb2Nlc3NCb2R5XG4gICAgLy8gZ2l2ZW4gbnVsbCwgd2l0aCBmZXRjaFBhcmFtc+KAmXMgdGFzayBkZXN0aW5hdGlvbi5cbiAgICBpZiAocmVzcG9uc2UuYm9keSA9PSBudWxsKSB7XG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBwcm9jZXNzQm9keShudWxsKSlcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gNC4gT3RoZXJ3aXNlLCBmdWxseSByZWFkIHJlc3BvbnNl4oCZcyBib2R5IGdpdmVuIHByb2Nlc3NCb2R5LCBwcm9jZXNzQm9keUVycm9yLFxuICAgICAgLy8gYW5kIGZldGNoUGFyYW1z4oCZcyB0YXNrIGRlc3RpbmF0aW9uLlxuICAgICAgcmV0dXJuIGZ1bGx5UmVhZEJvZHkocmVzcG9uc2UuYm9keSwgcHJvY2Vzc0JvZHksIHByb2Nlc3NCb2R5RXJyb3IpXG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNodHRwLWZldGNoXG5hc3luYyBmdW5jdGlvbiBodHRwRmV0Y2ggKGZldGNoUGFyYW1zKSB7XG4gIC8vIDEuIExldCByZXF1ZXN0IGJlIGZldGNoUGFyYW1z4oCZcyByZXF1ZXN0LlxuICBjb25zdCByZXF1ZXN0ID0gZmV0Y2hQYXJhbXMucmVxdWVzdFxuXG4gIC8vIDIuIExldCByZXNwb25zZSBiZSBudWxsLlxuICBsZXQgcmVzcG9uc2UgPSBudWxsXG5cbiAgLy8gMy4gTGV0IGFjdHVhbFJlc3BvbnNlIGJlIG51bGwuXG4gIGxldCBhY3R1YWxSZXNwb25zZSA9IG51bGxcblxuICAvLyA0LiBMZXQgdGltaW5nSW5mbyBiZSBmZXRjaFBhcmFtc+KAmXMgdGltaW5nIGluZm8uXG4gIGNvbnN0IHRpbWluZ0luZm8gPSBmZXRjaFBhcmFtcy50aW1pbmdJbmZvXG5cbiAgLy8gNS4gSWYgcmVxdWVzdOKAmXMgc2VydmljZS13b3JrZXJzIG1vZGUgaXMgXCJhbGxcIiwgdGhlbjpcbiAgaWYgKHJlcXVlc3Quc2VydmljZVdvcmtlcnMgPT09ICdhbGwnKSB7XG4gICAgLy8gVE9ET1xuICB9XG5cbiAgLy8gNi4gSWYgcmVzcG9uc2UgaXMgbnVsbCwgdGhlbjpcbiAgaWYgKHJlc3BvbnNlID09PSBudWxsKSB7XG4gICAgLy8gMS4gSWYgbWFrZUNPUlNQcmVmbGlnaHQgaXMgdHJ1ZSBhbmQgb25lIG9mIHRoZXNlIGNvbmRpdGlvbnMgaXMgdHJ1ZTpcbiAgICAvLyBUT0RPXG5cbiAgICAvLyAyLiBJZiByZXF1ZXN04oCZcyByZWRpcmVjdCBtb2RlIGlzIFwiZm9sbG93XCIsIHRoZW4gc2V0IHJlcXVlc3TigJlzXG4gICAgLy8gc2VydmljZS13b3JrZXJzIG1vZGUgdG8gXCJub25lXCIuXG4gICAgaWYgKHJlcXVlc3QucmVkaXJlY3QgPT09ICdmb2xsb3cnKSB7XG4gICAgICByZXF1ZXN0LnNlcnZpY2VXb3JrZXJzID0gJ25vbmUnXG4gICAgfVxuXG4gICAgLy8gMy4gU2V0IHJlc3BvbnNlIGFuZCBhY3R1YWxSZXNwb25zZSB0byB0aGUgcmVzdWx0IG9mIHJ1bm5pbmdcbiAgICAvLyBIVFRQLW5ldHdvcmstb3ItY2FjaGUgZmV0Y2ggZ2l2ZW4gZmV0Y2hQYXJhbXMuXG4gICAgYWN0dWFsUmVzcG9uc2UgPSByZXNwb25zZSA9IGF3YWl0IGh0dHBOZXR3b3JrT3JDYWNoZUZldGNoKGZldGNoUGFyYW1zKVxuXG4gICAgLy8gNC4gSWYgcmVxdWVzdOKAmXMgcmVzcG9uc2UgdGFpbnRpbmcgaXMgXCJjb3JzXCIgYW5kIGEgQ09SUyBjaGVja1xuICAgIC8vIGZvciByZXF1ZXN0IGFuZCByZXNwb25zZSByZXR1cm5zIGZhaWx1cmUsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgICBpZiAoXG4gICAgICByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdjb3JzJyAmJlxuICAgICAgY29yc0NoZWNrKHJlcXVlc3QsIHJlc3BvbnNlKSA9PT0gJ2ZhaWx1cmUnXG4gICAgKSB7XG4gICAgICByZXR1cm4gbWFrZU5ldHdvcmtFcnJvcignY29ycyBmYWlsdXJlJylcbiAgICB9XG5cbiAgICAvLyA1LiBJZiB0aGUgVEFPIGNoZWNrIGZvciByZXF1ZXN0IGFuZCByZXNwb25zZSByZXR1cm5zIGZhaWx1cmUsIHRoZW4gc2V0XG4gICAgLy8gcmVxdWVzdOKAmXMgdGltaW5nIGFsbG93IGZhaWxlZCBmbGFnLlxuICAgIGlmIChUQU9DaGVjayhyZXF1ZXN0LCByZXNwb25zZSkgPT09ICdmYWlsdXJlJykge1xuICAgICAgcmVxdWVzdC50aW1pbmdBbGxvd0ZhaWxlZCA9IHRydWVcbiAgICB9XG4gIH1cblxuICAvLyA3LiBJZiBlaXRoZXIgcmVxdWVzdOKAmXMgcmVzcG9uc2UgdGFpbnRpbmcgb3IgcmVzcG9uc2XigJlzIHR5cGVcbiAgLy8gaXMgXCJvcGFxdWVcIiwgYW5kIHRoZSBjcm9zcy1vcmlnaW4gcmVzb3VyY2UgcG9saWN5IGNoZWNrIHdpdGhcbiAgLy8gcmVxdWVzdOKAmXMgb3JpZ2luLCByZXF1ZXN04oCZcyBjbGllbnQsIHJlcXVlc3TigJlzIGRlc3RpbmF0aW9uLFxuICAvLyBhbmQgYWN0dWFsUmVzcG9uc2UgcmV0dXJucyBibG9ja2VkLCB0aGVuIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gIGlmIChcbiAgICAocmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnb3BhcXVlJyB8fCByZXNwb25zZS50eXBlID09PSAnb3BhcXVlJykgJiZcbiAgICBjcm9zc09yaWdpblJlc291cmNlUG9saWN5Q2hlY2soXG4gICAgICByZXF1ZXN0Lm9yaWdpbixcbiAgICAgIHJlcXVlc3QuY2xpZW50LFxuICAgICAgcmVxdWVzdC5kZXN0aW5hdGlvbixcbiAgICAgIGFjdHVhbFJlc3BvbnNlXG4gICAgKSA9PT0gJ2Jsb2NrZWQnXG4gICkge1xuICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdibG9ja2VkJylcbiAgfVxuXG4gIC8vIDguIElmIGFjdHVhbFJlc3BvbnNl4oCZcyBzdGF0dXMgaXMgYSByZWRpcmVjdCBzdGF0dXMsIHRoZW46XG4gIGlmIChyZWRpcmVjdFN0YXR1c1NldC5oYXMoYWN0dWFsUmVzcG9uc2Uuc3RhdHVzKSkge1xuICAgIC8vIDEuIElmIGFjdHVhbFJlc3BvbnNl4oCZcyBzdGF0dXMgaXMgbm90IDMwMywgcmVxdWVzdOKAmXMgYm9keSBpcyBub3QgbnVsbCxcbiAgICAvLyBhbmQgdGhlIGNvbm5lY3Rpb24gdXNlcyBIVFRQLzIsIHRoZW4gdXNlciBhZ2VudHMgbWF5LCBhbmQgYXJlIGV2ZW5cbiAgICAvLyBlbmNvdXJhZ2VkIHRvLCB0cmFuc21pdCBhbiBSU1RfU1RSRUFNIGZyYW1lLlxuICAgIC8vIFNlZSwgaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy9mZXRjaC9pc3N1ZXMvMTI4OFxuICAgIGlmIChyZXF1ZXN0LnJlZGlyZWN0ICE9PSAnbWFudWFsJykge1xuICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb25uZWN0aW9uLmRlc3Ryb3koKVxuICAgIH1cblxuICAgIC8vIDIuIFN3aXRjaCBvbiByZXF1ZXN04oCZcyByZWRpcmVjdCBtb2RlOlxuICAgIGlmIChyZXF1ZXN0LnJlZGlyZWN0ID09PSAnZXJyb3InKSB7XG4gICAgICAvLyBTZXQgcmVzcG9uc2UgdG8gYSBuZXR3b3JrIGVycm9yLlxuICAgICAgcmVzcG9uc2UgPSBtYWtlTmV0d29ya0Vycm9yKCd1bmV4cGVjdGVkIHJlZGlyZWN0JylcbiAgICB9IGVsc2UgaWYgKHJlcXVlc3QucmVkaXJlY3QgPT09ICdtYW51YWwnKSB7XG4gICAgICAvLyBTZXQgcmVzcG9uc2UgdG8gYW4gb3BhcXVlLXJlZGlyZWN0IGZpbHRlcmVkIHJlc3BvbnNlIHdob3NlIGludGVybmFsXG4gICAgICAvLyByZXNwb25zZSBpcyBhY3R1YWxSZXNwb25zZS5cbiAgICAgIC8vIE5PVEUoc3BlYyk6IE9uIHRoZSB3ZWIgdGhpcyB3b3VsZCByZXR1cm4gYW4gYG9wYXF1ZXJlZGlyZWN0YCByZXNwb25zZSxcbiAgICAgIC8vIGJ1dCB0aGF0IGRvZXNuJ3QgbWFrZSBzZW5zZSBzZXJ2ZXIgc2lkZS5cbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMTE5My5cbiAgICAgIHJlc3BvbnNlID0gYWN0dWFsUmVzcG9uc2VcbiAgICB9IGVsc2UgaWYgKHJlcXVlc3QucmVkaXJlY3QgPT09ICdmb2xsb3cnKSB7XG4gICAgICAvLyBTZXQgcmVzcG9uc2UgdG8gdGhlIHJlc3VsdCBvZiBydW5uaW5nIEhUVFAtcmVkaXJlY3QgZmV0Y2ggZ2l2ZW5cbiAgICAgIC8vIGZldGNoUGFyYW1zIGFuZCByZXNwb25zZS5cbiAgICAgIHJlc3BvbnNlID0gYXdhaXQgaHR0cFJlZGlyZWN0RmV0Y2goZmV0Y2hQYXJhbXMsIHJlc3BvbnNlKVxuICAgIH0gZWxzZSB7XG4gICAgICBhc3NlcnQoZmFsc2UpXG4gICAgfVxuICB9XG5cbiAgLy8gOS4gU2V0IHJlc3BvbnNl4oCZcyB0aW1pbmcgaW5mbyB0byB0aW1pbmdJbmZvLlxuICByZXNwb25zZS50aW1pbmdJbmZvID0gdGltaW5nSW5mb1xuXG4gIC8vIDEwLiBSZXR1cm4gcmVzcG9uc2UuXG4gIHJldHVybiByZXNwb25zZVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC1yZWRpcmVjdC1mZXRjaFxuZnVuY3Rpb24gaHR0cFJlZGlyZWN0RmV0Y2ggKGZldGNoUGFyYW1zLCByZXNwb25zZSkge1xuICAvLyAxLiBMZXQgcmVxdWVzdCBiZSBmZXRjaFBhcmFtc+KAmXMgcmVxdWVzdC5cbiAgY29uc3QgcmVxdWVzdCA9IGZldGNoUGFyYW1zLnJlcXVlc3RcblxuICAvLyAyLiBMZXQgYWN0dWFsUmVzcG9uc2UgYmUgcmVzcG9uc2UsIGlmIHJlc3BvbnNlIGlzIG5vdCBhIGZpbHRlcmVkIHJlc3BvbnNlLFxuICAvLyBhbmQgcmVzcG9uc2XigJlzIGludGVybmFsIHJlc3BvbnNlIG90aGVyd2lzZS5cbiAgY29uc3QgYWN0dWFsUmVzcG9uc2UgPSByZXNwb25zZS5pbnRlcm5hbFJlc3BvbnNlXG4gICAgPyByZXNwb25zZS5pbnRlcm5hbFJlc3BvbnNlXG4gICAgOiByZXNwb25zZVxuXG4gIC8vIDMuIExldCBsb2NhdGlvblVSTCBiZSBhY3R1YWxSZXNwb25zZeKAmXMgbG9jYXRpb24gVVJMIGdpdmVuIHJlcXVlc3TigJlzIGN1cnJlbnRcbiAgLy8gVVJM4oCZcyBmcmFnbWVudC5cbiAgbGV0IGxvY2F0aW9uVVJMXG5cbiAgdHJ5IHtcbiAgICBsb2NhdGlvblVSTCA9IHJlc3BvbnNlTG9jYXRpb25VUkwoXG4gICAgICBhY3R1YWxSZXNwb25zZSxcbiAgICAgIHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpLmhhc2hcbiAgICApXG5cbiAgICAvLyA0LiBJZiBsb2NhdGlvblVSTCBpcyBudWxsLCB0aGVuIHJldHVybiByZXNwb25zZS5cbiAgICBpZiAobG9jYXRpb25VUkwgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyA1LiBJZiBsb2NhdGlvblVSTCBpcyBmYWlsdXJlLCB0aGVuIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKGVycikpXG4gIH1cblxuICAvLyA2LiBJZiBsb2NhdGlvblVSTOKAmXMgc2NoZW1lIGlzIG5vdCBhbiBIVFRQKFMpIHNjaGVtZSwgdGhlbiByZXR1cm4gYSBuZXR3b3JrXG4gIC8vIGVycm9yLlxuICBpZiAoIXVybElzSHR0cEh0dHBzU2NoZW1lKGxvY2F0aW9uVVJMKSkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignVVJMIHNjaGVtZSBtdXN0IGJlIGEgSFRUUChTKSBzY2hlbWUnKSlcbiAgfVxuXG4gIC8vIDcuIElmIHJlcXVlc3TigJlzIHJlZGlyZWN0IGNvdW50IGlzIDIwLCB0aGVuIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gIGlmIChyZXF1ZXN0LnJlZGlyZWN0Q291bnQgPT09IDIwKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKCdyZWRpcmVjdCBjb3VudCBleGNlZWRlZCcpKVxuICB9XG5cbiAgLy8gOC4gSW5jcmVhc2UgcmVxdWVzdOKAmXMgcmVkaXJlY3QgY291bnQgYnkgMS5cbiAgcmVxdWVzdC5yZWRpcmVjdENvdW50ICs9IDFcblxuICAvLyA5LiBJZiByZXF1ZXN04oCZcyBtb2RlIGlzIFwiY29yc1wiLCBsb2NhdGlvblVSTCBpbmNsdWRlcyBjcmVkZW50aWFscywgYW5kXG4gIC8vIHJlcXVlc3TigJlzIG9yaWdpbiBpcyBub3Qgc2FtZSBvcmlnaW4gd2l0aCBsb2NhdGlvblVSTOKAmXMgb3JpZ2luLCB0aGVuIHJldHVyblxuICAvLyAgYSBuZXR3b3JrIGVycm9yLlxuICBpZiAoXG4gICAgcmVxdWVzdC5tb2RlID09PSAnY29ycycgJiZcbiAgICAobG9jYXRpb25VUkwudXNlcm5hbWUgfHwgbG9jYXRpb25VUkwucGFzc3dvcmQpICYmXG4gICAgIXNhbWVPcmlnaW4ocmVxdWVzdCwgbG9jYXRpb25VUkwpXG4gICkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignY3Jvc3Mgb3JpZ2luIG5vdCBhbGxvd2VkIGZvciByZXF1ZXN0IG1vZGUgXCJjb3JzXCInKSlcbiAgfVxuXG4gIC8vIDEwLiBJZiByZXF1ZXN04oCZcyByZXNwb25zZSB0YWludGluZyBpcyBcImNvcnNcIiBhbmQgbG9jYXRpb25VUkwgaW5jbHVkZXNcbiAgLy8gY3JlZGVudGlhbHMsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgaWYgKFxuICAgIHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ2NvcnMnICYmXG4gICAgKGxvY2F0aW9uVVJMLnVzZXJuYW1lIHx8IGxvY2F0aW9uVVJMLnBhc3N3b3JkKVxuICApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoXG4gICAgICAnVVJMIGNhbm5vdCBjb250YWluIGNyZWRlbnRpYWxzIGZvciByZXF1ZXN0IG1vZGUgXCJjb3JzXCInXG4gICAgKSlcbiAgfVxuXG4gIC8vIDExLiBJZiBhY3R1YWxSZXNwb25zZeKAmXMgc3RhdHVzIGlzIG5vdCAzMDMsIHJlcXVlc3TigJlzIGJvZHkgaXMgbm9uLW51bGwsXG4gIC8vIGFuZCByZXF1ZXN04oCZcyBib2R54oCZcyBzb3VyY2UgaXMgbnVsbCwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICBpZiAoXG4gICAgYWN0dWFsUmVzcG9uc2Uuc3RhdHVzICE9PSAzMDMgJiZcbiAgICByZXF1ZXN0LmJvZHkgIT0gbnVsbCAmJlxuICAgIHJlcXVlc3QuYm9keS5zb3VyY2UgPT0gbnVsbFxuICApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoKSlcbiAgfVxuXG4gIC8vIDEyLiBJZiBvbmUgb2YgdGhlIGZvbGxvd2luZyBpcyB0cnVlXG4gIC8vIC0gYWN0dWFsUmVzcG9uc2XigJlzIHN0YXR1cyBpcyAzMDEgb3IgMzAyIGFuZCByZXF1ZXN04oCZcyBtZXRob2QgaXMgYFBPU1RgXG4gIC8vIC0gYWN0dWFsUmVzcG9uc2XigJlzIHN0YXR1cyBpcyAzMDMgYW5kIHJlcXVlc3TigJlzIG1ldGhvZCBpcyBub3QgYEdFVGAgb3IgYEhFQURgXG4gIGlmIChcbiAgICAoWzMwMSwgMzAyXS5pbmNsdWRlcyhhY3R1YWxSZXNwb25zZS5zdGF0dXMpICYmIHJlcXVlc3QubWV0aG9kID09PSAnUE9TVCcpIHx8XG4gICAgKGFjdHVhbFJlc3BvbnNlLnN0YXR1cyA9PT0gMzAzICYmXG4gICAgICAhR0VUX09SX0hFQUQuaW5jbHVkZXMocmVxdWVzdC5tZXRob2QpKVxuICApIHtcbiAgICAvLyB0aGVuOlxuICAgIC8vIDEuIFNldCByZXF1ZXN04oCZcyBtZXRob2QgdG8gYEdFVGAgYW5kIHJlcXVlc3TigJlzIGJvZHkgdG8gbnVsbC5cbiAgICByZXF1ZXN0Lm1ldGhvZCA9ICdHRVQnXG4gICAgcmVxdWVzdC5ib2R5ID0gbnVsbFxuXG4gICAgLy8gMi4gRm9yIGVhY2ggaGVhZGVyTmFtZSBvZiByZXF1ZXN0LWJvZHktaGVhZGVyIG5hbWUsIGRlbGV0ZSBoZWFkZXJOYW1lIGZyb21cbiAgICAvLyByZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cbiAgICBmb3IgKGNvbnN0IGhlYWRlck5hbWUgb2YgcmVxdWVzdEJvZHlIZWFkZXIpIHtcbiAgICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QuZGVsZXRlKGhlYWRlck5hbWUpXG4gICAgfVxuICB9XG5cbiAgLy8gMTMuIElmIHJlcXVlc3TigJlzIGN1cnJlbnQgVVJM4oCZcyBvcmlnaW4gaXMgbm90IHNhbWUgb3JpZ2luIHdpdGggbG9jYXRpb25VUkzigJlzXG4gIC8vICAgICBvcmlnaW4sIHRoZW4gZm9yIGVhY2ggaGVhZGVyTmFtZSBvZiBDT1JTIG5vbi13aWxkY2FyZCByZXF1ZXN0LWhlYWRlciBuYW1lLFxuICAvLyAgICAgZGVsZXRlIGhlYWRlck5hbWUgZnJvbSByZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cbiAgaWYgKCFzYW1lT3JpZ2luKHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpLCBsb2NhdGlvblVSTCkpIHtcbiAgICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29ycy1ub24td2lsZGNhcmQtcmVxdWVzdC1oZWFkZXItbmFtZVxuICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QuZGVsZXRlKCdhdXRob3JpemF0aW9uJylcblxuICAgIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNhdXRoZW50aWNhdGlvbi1lbnRyaWVzXG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5kZWxldGUoJ3Byb3h5LWF1dGhvcml6YXRpb24nLCB0cnVlKVxuXG4gICAgLy8gXCJDb29raWVcIiBhbmQgXCJIb3N0XCIgYXJlIGZvcmJpZGRlbiByZXF1ZXN0LWhlYWRlcnMsIHdoaWNoIHVuZGljaSBkb2Vzbid0IGltcGxlbWVudC5cbiAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmRlbGV0ZSgnY29va2llJylcbiAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmRlbGV0ZSgnaG9zdCcpXG4gIH1cblxuICAvLyAxNC4gSWYgcmVxdWVzdOKAmXMgYm9keSBpcyBub24tbnVsbCwgdGhlbiBzZXQgcmVxdWVzdOKAmXMgYm9keSB0byB0aGUgZmlyc3QgcmV0dXJuXG4gIC8vIHZhbHVlIG9mIHNhZmVseSBleHRyYWN0aW5nIHJlcXVlc3TigJlzIGJvZHnigJlzIHNvdXJjZS5cbiAgaWYgKHJlcXVlc3QuYm9keSAhPSBudWxsKSB7XG4gICAgYXNzZXJ0KHJlcXVlc3QuYm9keS5zb3VyY2UgIT0gbnVsbClcbiAgICByZXF1ZXN0LmJvZHkgPSBzYWZlbHlFeHRyYWN0Qm9keShyZXF1ZXN0LmJvZHkuc291cmNlKVswXVxuICB9XG5cbiAgLy8gMTUuIExldCB0aW1pbmdJbmZvIGJlIGZldGNoUGFyYW1z4oCZcyB0aW1pbmcgaW5mby5cbiAgY29uc3QgdGltaW5nSW5mbyA9IGZldGNoUGFyYW1zLnRpbWluZ0luZm9cblxuICAvLyAxNi4gU2V0IHRpbWluZ0luZm/igJlzIHJlZGlyZWN0IGVuZCB0aW1lIGFuZCBwb3N0LXJlZGlyZWN0IHN0YXJ0IHRpbWUgdG8gdGhlXG4gIC8vIGNvYXJzZW5lZCBzaGFyZWQgY3VycmVudCB0aW1lIGdpdmVuIGZldGNoUGFyYW1z4oCZcyBjcm9zcy1vcmlnaW4gaXNvbGF0ZWRcbiAgLy8gY2FwYWJpbGl0eS5cbiAgdGltaW5nSW5mby5yZWRpcmVjdEVuZFRpbWUgPSB0aW1pbmdJbmZvLnBvc3RSZWRpcmVjdFN0YXJ0VGltZSA9XG4gICAgY29hcnNlbmVkU2hhcmVkQ3VycmVudFRpbWUoZmV0Y2hQYXJhbXMuY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkpXG5cbiAgLy8gMTcuIElmIHRpbWluZ0luZm/igJlzIHJlZGlyZWN0IHN0YXJ0IHRpbWUgaXMgMCwgdGhlbiBzZXQgdGltaW5nSW5mb+KAmXNcbiAgLy8gIHJlZGlyZWN0IHN0YXJ0IHRpbWUgdG8gdGltaW5nSW5mb+KAmXMgc3RhcnQgdGltZS5cbiAgaWYgKHRpbWluZ0luZm8ucmVkaXJlY3RTdGFydFRpbWUgPT09IDApIHtcbiAgICB0aW1pbmdJbmZvLnJlZGlyZWN0U3RhcnRUaW1lID0gdGltaW5nSW5mby5zdGFydFRpbWVcbiAgfVxuXG4gIC8vIDE4LiBBcHBlbmQgbG9jYXRpb25VUkwgdG8gcmVxdWVzdOKAmXMgVVJMIGxpc3QuXG4gIHJlcXVlc3QudXJsTGlzdC5wdXNoKGxvY2F0aW9uVVJMKVxuXG4gIC8vIDE5LiBJbnZva2Ugc2V0IHJlcXVlc3TigJlzIHJlZmVycmVyIHBvbGljeSBvbiByZWRpcmVjdCBvbiByZXF1ZXN0IGFuZFxuICAvLyBhY3R1YWxSZXNwb25zZS5cbiAgc2V0UmVxdWVzdFJlZmVycmVyUG9saWN5T25SZWRpcmVjdChyZXF1ZXN0LCBhY3R1YWxSZXNwb25zZSlcblxuICAvLyAyMC4gUmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZyBtYWluIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zIGFuZCB0cnVlLlxuICByZXR1cm4gbWFpbkZldGNoKGZldGNoUGFyYW1zLCB0cnVlKVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC1uZXR3b3JrLW9yLWNhY2hlLWZldGNoXG5hc3luYyBmdW5jdGlvbiBodHRwTmV0d29ya09yQ2FjaGVGZXRjaCAoXG4gIGZldGNoUGFyYW1zLFxuICBpc0F1dGhlbnRpY2F0aW9uRmV0Y2ggPSBmYWxzZSxcbiAgaXNOZXdDb25uZWN0aW9uRmV0Y2ggPSBmYWxzZVxuKSB7XG4gIC8vIDEuIExldCByZXF1ZXN0IGJlIGZldGNoUGFyYW1z4oCZcyByZXF1ZXN0LlxuICBjb25zdCByZXF1ZXN0ID0gZmV0Y2hQYXJhbXMucmVxdWVzdFxuXG4gIC8vIDIuIExldCBodHRwRmV0Y2hQYXJhbXMgYmUgbnVsbC5cbiAgbGV0IGh0dHBGZXRjaFBhcmFtcyA9IG51bGxcblxuICAvLyAzLiBMZXQgaHR0cFJlcXVlc3QgYmUgbnVsbC5cbiAgbGV0IGh0dHBSZXF1ZXN0ID0gbnVsbFxuXG4gIC8vIDQuIExldCByZXNwb25zZSBiZSBudWxsLlxuICBsZXQgcmVzcG9uc2UgPSBudWxsXG5cbiAgLy8gNS4gTGV0IHN0b3JlZFJlc3BvbnNlIGJlIG51bGwuXG4gIC8vIFRPRE86IGNhY2hlXG5cbiAgLy8gNi4gTGV0IGh0dHBDYWNoZSBiZSBudWxsLlxuICBjb25zdCBodHRwQ2FjaGUgPSBudWxsXG5cbiAgLy8gNy4gTGV0IHRoZSByZXZhbGlkYXRpbmdGbGFnIGJlIHVuc2V0LlxuICBjb25zdCByZXZhbGlkYXRpbmdGbGFnID0gZmFsc2VcblxuICAvLyA4LiBSdW4gdGhlc2Ugc3RlcHMsIGJ1dCBhYm9ydCB3aGVuIHRoZSBvbmdvaW5nIGZldGNoIGlzIHRlcm1pbmF0ZWQ6XG5cbiAgLy8gICAgMS4gSWYgcmVxdWVzdOKAmXMgd2luZG93IGlzIFwibm8td2luZG93XCIgYW5kIHJlcXVlc3TigJlzIHJlZGlyZWN0IG1vZGUgaXNcbiAgLy8gICAgXCJlcnJvclwiLCB0aGVuIHNldCBodHRwRmV0Y2hQYXJhbXMgdG8gZmV0Y2hQYXJhbXMgYW5kIGh0dHBSZXF1ZXN0IHRvXG4gIC8vICAgIHJlcXVlc3QuXG4gIGlmIChyZXF1ZXN0LndpbmRvdyA9PT0gJ25vLXdpbmRvdycgJiYgcmVxdWVzdC5yZWRpcmVjdCA9PT0gJ2Vycm9yJykge1xuICAgIGh0dHBGZXRjaFBhcmFtcyA9IGZldGNoUGFyYW1zXG4gICAgaHR0cFJlcXVlc3QgPSByZXF1ZXN0XG4gIH0gZWxzZSB7XG4gICAgLy8gT3RoZXJ3aXNlOlxuXG4gICAgLy8gMS4gU2V0IGh0dHBSZXF1ZXN0IHRvIGEgY2xvbmUgb2YgcmVxdWVzdC5cbiAgICBodHRwUmVxdWVzdCA9IG1ha2VSZXF1ZXN0KHJlcXVlc3QpXG5cbiAgICAvLyAyLiBTZXQgaHR0cEZldGNoUGFyYW1zIHRvIGEgY29weSBvZiBmZXRjaFBhcmFtcy5cbiAgICBodHRwRmV0Y2hQYXJhbXMgPSB7IC4uLmZldGNoUGFyYW1zIH1cblxuICAgIC8vIDMuIFNldCBodHRwRmV0Y2hQYXJhbXPigJlzIHJlcXVlc3QgdG8gaHR0cFJlcXVlc3QuXG4gICAgaHR0cEZldGNoUGFyYW1zLnJlcXVlc3QgPSBodHRwUmVxdWVzdFxuICB9XG5cbiAgLy8gICAgMy4gTGV0IGluY2x1ZGVDcmVkZW50aWFscyBiZSB0cnVlIGlmIG9uZSBvZlxuICBjb25zdCBpbmNsdWRlQ3JlZGVudGlhbHMgPVxuICAgIHJlcXVlc3QuY3JlZGVudGlhbHMgPT09ICdpbmNsdWRlJyB8fFxuICAgIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnc2FtZS1vcmlnaW4nICYmXG4gICAgICByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdiYXNpYycpXG5cbiAgLy8gICAgNC4gTGV0IGNvbnRlbnRMZW5ndGggYmUgaHR0cFJlcXVlc3TigJlzIGJvZHnigJlzIGxlbmd0aCwgaWYgaHR0cFJlcXVlc3TigJlzXG4gIC8vICAgIGJvZHkgaXMgbm9uLW51bGw7IG90aGVyd2lzZSBudWxsLlxuICBjb25zdCBjb250ZW50TGVuZ3RoID0gaHR0cFJlcXVlc3QuYm9keSA/IGh0dHBSZXF1ZXN0LmJvZHkubGVuZ3RoIDogbnVsbFxuXG4gIC8vICAgIDUuIExldCBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgYmUgbnVsbC5cbiAgbGV0IGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSA9IG51bGxcblxuICAvLyAgICA2LiBJZiBodHRwUmVxdWVzdOKAmXMgYm9keSBpcyBudWxsIGFuZCBodHRwUmVxdWVzdOKAmXMgbWV0aG9kIGlzIGBQT1NUYCBvclxuICAvLyAgICBgUFVUYCwgdGhlbiBzZXQgY29udGVudExlbmd0aEhlYWRlclZhbHVlIHRvIGAwYC5cbiAgaWYgKFxuICAgIGh0dHBSZXF1ZXN0LmJvZHkgPT0gbnVsbCAmJlxuICAgIFsnUE9TVCcsICdQVVQnXS5pbmNsdWRlcyhodHRwUmVxdWVzdC5tZXRob2QpXG4gICkge1xuICAgIGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSA9ICcwJ1xuICB9XG5cbiAgLy8gICAgNy4gSWYgY29udGVudExlbmd0aCBpcyBub24tbnVsbCwgdGhlbiBzZXQgY29udGVudExlbmd0aEhlYWRlclZhbHVlIHRvXG4gIC8vICAgIGNvbnRlbnRMZW5ndGgsIHNlcmlhbGl6ZWQgYW5kIGlzb21vcnBoaWMgZW5jb2RlZC5cbiAgaWYgKGNvbnRlbnRMZW5ndGggIT0gbnVsbCkge1xuICAgIGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSA9IGlzb21vcnBoaWNFbmNvZGUoYCR7Y29udGVudExlbmd0aH1gKVxuICB9XG5cbiAgLy8gICAgOC4gSWYgY29udGVudExlbmd0aEhlYWRlclZhbHVlIGlzIG5vbi1udWxsLCB0aGVuIGFwcGVuZFxuICAvLyAgICBgQ29udGVudC1MZW5ndGhgL2NvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSB0byBodHRwUmVxdWVzdOKAmXMgaGVhZGVyXG4gIC8vICAgIGxpc3QuXG4gIGlmIChjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgIT0gbnVsbCkge1xuICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnY29udGVudC1sZW5ndGgnLCBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUpXG4gIH1cblxuICAvLyAgICA5LiBJZiBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgaXMgbm9uLW51bGwsIHRoZW4gYXBwZW5kIChgQ29udGVudC1MZW5ndGhgLFxuICAvLyAgICBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUpIHRvIGh0dHBSZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cblxuICAvLyAgICAxMC4gSWYgY29udGVudExlbmd0aCBpcyBub24tbnVsbCBhbmQgaHR0cFJlcXVlc3TigJlzIGtlZXBhbGl2ZSBpcyB0cnVlLFxuICAvLyAgICB0aGVuOlxuICBpZiAoY29udGVudExlbmd0aCAhPSBudWxsICYmIGh0dHBSZXF1ZXN0LmtlZXBhbGl2ZSkge1xuICAgIC8vIE5PVEU6IGtlZXBhbGl2ZSBpcyBhIG5vb3Agb3V0c2lkZSBvZiBicm93c2VyIGNvbnRleHQuXG4gIH1cblxuICAvLyAgICAxMS4gSWYgaHR0cFJlcXVlc3TigJlzIHJlZmVycmVyIGlzIGEgVVJMLCB0aGVuIGFwcGVuZFxuICAvLyAgICBgUmVmZXJlcmAvaHR0cFJlcXVlc3TigJlzIHJlZmVycmVyLCBzZXJpYWxpemVkIGFuZCBpc29tb3JwaGljIGVuY29kZWQsXG4gIC8vICAgICB0byBodHRwUmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QuXG4gIGlmIChodHRwUmVxdWVzdC5yZWZlcnJlciBpbnN0YW5jZW9mIFVSTCkge1xuICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgncmVmZXJlcicsIGlzb21vcnBoaWNFbmNvZGUoaHR0cFJlcXVlc3QucmVmZXJyZXIuaHJlZikpXG4gIH1cblxuICAvLyAgICAxMi4gQXBwZW5kIGEgcmVxdWVzdCBgT3JpZ2luYCBoZWFkZXIgZm9yIGh0dHBSZXF1ZXN0LlxuICBhcHBlbmRSZXF1ZXN0T3JpZ2luSGVhZGVyKGh0dHBSZXF1ZXN0KVxuXG4gIC8vICAgIDEzLiBBcHBlbmQgdGhlIEZldGNoIG1ldGFkYXRhIGhlYWRlcnMgZm9yIGh0dHBSZXF1ZXN0LiBbRkVUQ0gtTUVUQURBVEFdXG4gIGFwcGVuZEZldGNoTWV0YWRhdGEoaHR0cFJlcXVlc3QpXG5cbiAgLy8gICAgMTQuIElmIGh0dHBSZXF1ZXN04oCZcyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluIGBVc2VyLUFnZW50YCwgdGhlblxuICAvLyAgICB1c2VyIGFnZW50cyBzaG91bGQgYXBwZW5kIGBVc2VyLUFnZW50YC9kZWZhdWx0IGBVc2VyLUFnZW50YCB2YWx1ZSB0b1xuICAvLyAgICBodHRwUmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QuXG4gIGlmICghaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ3VzZXItYWdlbnQnKSkge1xuICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgndXNlci1hZ2VudCcsIHR5cGVvZiBlc2J1aWxkRGV0ZWN0aW9uID09PSAndW5kZWZpbmVkJyA/ICd1bmRpY2knIDogJ25vZGUnKVxuICB9XG5cbiAgLy8gICAgMTUuIElmIGh0dHBSZXF1ZXN04oCZcyBjYWNoZSBtb2RlIGlzIFwiZGVmYXVsdFwiIGFuZCBodHRwUmVxdWVzdOKAmXMgaGVhZGVyXG4gIC8vICAgIGxpc3QgY29udGFpbnMgYElmLU1vZGlmaWVkLVNpbmNlYCwgYElmLU5vbmUtTWF0Y2hgLFxuICAvLyAgICBgSWYtVW5tb2RpZmllZC1TaW5jZWAsIGBJZi1NYXRjaGAsIG9yIGBJZi1SYW5nZWAsIHRoZW4gc2V0XG4gIC8vICAgIGh0dHBSZXF1ZXN04oCZcyBjYWNoZSBtb2RlIHRvIFwibm8tc3RvcmVcIi5cbiAgaWYgKFxuICAgIGh0dHBSZXF1ZXN0LmNhY2hlID09PSAnZGVmYXVsdCcgJiZcbiAgICAoaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2lmLW1vZGlmaWVkLXNpbmNlJykgfHxcbiAgICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdpZi1ub25lLW1hdGNoJykgfHxcbiAgICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdpZi11bm1vZGlmaWVkLXNpbmNlJykgfHxcbiAgICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdpZi1tYXRjaCcpIHx8XG4gICAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygnaWYtcmFuZ2UnKSlcbiAgKSB7XG4gICAgaHR0cFJlcXVlc3QuY2FjaGUgPSAnbm8tc3RvcmUnXG4gIH1cblxuICAvLyAgICAxNi4gSWYgaHR0cFJlcXVlc3TigJlzIGNhY2hlIG1vZGUgaXMgXCJuby1jYWNoZVwiLCBodHRwUmVxdWVzdOKAmXMgcHJldmVudFxuICAvLyAgICBuby1jYWNoZSBjYWNoZS1jb250cm9sIGhlYWRlciBtb2RpZmljYXRpb24gZmxhZyBpcyB1bnNldCwgYW5kXG4gIC8vICAgIGh0dHBSZXF1ZXN04oCZcyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluIGBDYWNoZS1Db250cm9sYCwgdGhlbiBhcHBlbmRcbiAgLy8gICAgYENhY2hlLUNvbnRyb2xgL2BtYXgtYWdlPTBgIHRvIGh0dHBSZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cbiAgaWYgKFxuICAgIGh0dHBSZXF1ZXN0LmNhY2hlID09PSAnbm8tY2FjaGUnICYmXG4gICAgIWh0dHBSZXF1ZXN0LnByZXZlbnROb0NhY2hlQ2FjaGVDb250cm9sSGVhZGVyTW9kaWZpY2F0aW9uICYmXG4gICAgIWh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdjYWNoZS1jb250cm9sJylcbiAgKSB7XG4gICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdjYWNoZS1jb250cm9sJywgJ21heC1hZ2U9MCcpXG4gIH1cblxuICAvLyAgICAxNy4gSWYgaHR0cFJlcXVlc3TigJlzIGNhY2hlIG1vZGUgaXMgXCJuby1zdG9yZVwiIG9yIFwicmVsb2FkXCIsIHRoZW46XG4gIGlmIChodHRwUmVxdWVzdC5jYWNoZSA9PT0gJ25vLXN0b3JlJyB8fCBodHRwUmVxdWVzdC5jYWNoZSA9PT0gJ3JlbG9hZCcpIHtcbiAgICAvLyAxLiBJZiBodHRwUmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgUHJhZ21hYCwgdGhlbiBhcHBlbmRcbiAgICAvLyBgUHJhZ21hYC9gbm8tY2FjaGVgIHRvIGh0dHBSZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cbiAgICBpZiAoIWh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdwcmFnbWEnKSkge1xuICAgICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdwcmFnbWEnLCAnbm8tY2FjaGUnKVxuICAgIH1cblxuICAgIC8vIDIuIElmIGh0dHBSZXF1ZXN04oCZcyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluIGBDYWNoZS1Db250cm9sYCxcbiAgICAvLyB0aGVuIGFwcGVuZCBgQ2FjaGUtQ29udHJvbGAvYG5vLWNhY2hlYCB0byBodHRwUmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QuXG4gICAgaWYgKCFodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygnY2FjaGUtY29udHJvbCcpKSB7XG4gICAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ2NhY2hlLWNvbnRyb2wnLCAnbm8tY2FjaGUnKVxuICAgIH1cbiAgfVxuXG4gIC8vICAgIDE4LiBJZiBodHRwUmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QgY29udGFpbnMgYFJhbmdlYCwgdGhlbiBhcHBlbmRcbiAgLy8gICAgYEFjY2VwdC1FbmNvZGluZ2AvYGlkZW50aXR5YCB0byBodHRwUmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QuXG4gIGlmIChodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygncmFuZ2UnKSkge1xuICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnYWNjZXB0LWVuY29kaW5nJywgJ2lkZW50aXR5JylcbiAgfVxuXG4gIC8vICAgIDE5LiBNb2RpZnkgaHR0cFJlcXVlc3TigJlzIGhlYWRlciBsaXN0IHBlciBIVFRQLiBEbyBub3QgYXBwZW5kIGEgZ2l2ZW5cbiAgLy8gICAgaGVhZGVyIGlmIGh0dHBSZXF1ZXN04oCZcyBoZWFkZXIgbGlzdCBjb250YWlucyB0aGF0IGhlYWRlcuKAmXMgbmFtZS5cbiAgLy8gICAgVE9ETzogaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy9mZXRjaC9pc3N1ZXMvMTI4NSNpc3N1ZWNvbW1lbnQtODk2NTYwMTI5XG4gIGlmICghaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2FjY2VwdC1lbmNvZGluZycpKSB7XG4gICAgaWYgKHVybEhhc0h0dHBzU2NoZW1lKHJlcXVlc3RDdXJyZW50VVJMKGh0dHBSZXF1ZXN0KSkpIHtcbiAgICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnYWNjZXB0LWVuY29kaW5nJywgJ2JyLCBnemlwLCBkZWZsYXRlJylcbiAgICB9IGVsc2Uge1xuICAgICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdhY2NlcHQtZW5jb2RpbmcnLCAnZ3ppcCwgZGVmbGF0ZScpXG4gICAgfVxuICB9XG5cbiAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuZGVsZXRlKCdob3N0JylcblxuICAvLyAgICAyMC4gSWYgaW5jbHVkZUNyZWRlbnRpYWxzIGlzIHRydWUsIHRoZW46XG4gIGlmIChpbmNsdWRlQ3JlZGVudGlhbHMpIHtcbiAgICAvLyAxLiBJZiB0aGUgdXNlciBhZ2VudCBpcyBub3QgY29uZmlndXJlZCB0byBibG9jayBjb29raWVzIGZvciBodHRwUmVxdWVzdFxuICAgIC8vIChzZWUgc2VjdGlvbiA3IG9mIFtDT09LSUVTXSksIHRoZW46XG4gICAgLy8gVE9ETzogY3JlZGVudGlhbHNcbiAgICAvLyAyLiBJZiBodHRwUmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgQXV0aG9yaXphdGlvbmAsIHRoZW46XG4gICAgLy8gVE9ETzogY3JlZGVudGlhbHNcbiAgfVxuXG4gIC8vICAgIDIxLiBJZiB0aGVyZeKAmXMgYSBwcm94eS1hdXRoZW50aWNhdGlvbiBlbnRyeSwgdXNlIGl0IGFzIGFwcHJvcHJpYXRlLlxuICAvLyAgICBUT0RPOiBwcm94eS1hdXRoZW50aWNhdGlvblxuXG4gIC8vICAgIDIyLiBTZXQgaHR0cENhY2hlIHRvIHRoZSByZXN1bHQgb2YgZGV0ZXJtaW5pbmcgdGhlIEhUVFAgY2FjaGVcbiAgLy8gICAgcGFydGl0aW9uLCBnaXZlbiBodHRwUmVxdWVzdC5cbiAgLy8gICAgVE9ETzogY2FjaGVcblxuICAvLyAgICAyMy4gSWYgaHR0cENhY2hlIGlzIG51bGwsIHRoZW4gc2V0IGh0dHBSZXF1ZXN04oCZcyBjYWNoZSBtb2RlIHRvXG4gIC8vICAgIFwibm8tc3RvcmVcIi5cbiAgaWYgKGh0dHBDYWNoZSA9PSBudWxsKSB7XG4gICAgaHR0cFJlcXVlc3QuY2FjaGUgPSAnbm8tc3RvcmUnXG4gIH1cblxuICAvLyAgICAyNC4gSWYgaHR0cFJlcXVlc3TigJlzIGNhY2hlIG1vZGUgaXMgbmVpdGhlciBcIm5vLXN0b3JlXCIgbm9yIFwicmVsb2FkXCIsXG4gIC8vICAgIHRoZW46XG4gIGlmIChodHRwUmVxdWVzdC5tb2RlICE9PSAnbm8tc3RvcmUnICYmIGh0dHBSZXF1ZXN0Lm1vZGUgIT09ICdyZWxvYWQnKSB7XG4gICAgLy8gVE9ETzogY2FjaGVcbiAgfVxuXG4gIC8vIDkuIElmIGFib3J0ZWQsIHRoZW4gcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSBuZXR3b3JrIGVycm9yIGZvciBmZXRjaFBhcmFtcy5cbiAgLy8gVE9ET1xuXG4gIC8vIDEwLiBJZiByZXNwb25zZSBpcyBudWxsLCB0aGVuOlxuICBpZiAocmVzcG9uc2UgPT0gbnVsbCkge1xuICAgIC8vIDEuIElmIGh0dHBSZXF1ZXN04oCZcyBjYWNoZSBtb2RlIGlzIFwib25seS1pZi1jYWNoZWRcIiwgdGhlbiByZXR1cm4gYVxuICAgIC8vIG5ldHdvcmsgZXJyb3IuXG4gICAgaWYgKGh0dHBSZXF1ZXN0Lm1vZGUgPT09ICdvbmx5LWlmLWNhY2hlZCcpIHtcbiAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdvbmx5IGlmIGNhY2hlZCcpXG4gICAgfVxuXG4gICAgLy8gMi4gTGV0IGZvcndhcmRSZXNwb25zZSBiZSB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgSFRUUC1uZXR3b3JrIGZldGNoXG4gICAgLy8gZ2l2ZW4gaHR0cEZldGNoUGFyYW1zLCBpbmNsdWRlQ3JlZGVudGlhbHMsIGFuZCBpc05ld0Nvbm5lY3Rpb25GZXRjaC5cbiAgICBjb25zdCBmb3J3YXJkUmVzcG9uc2UgPSBhd2FpdCBodHRwTmV0d29ya0ZldGNoKFxuICAgICAgaHR0cEZldGNoUGFyYW1zLFxuICAgICAgaW5jbHVkZUNyZWRlbnRpYWxzLFxuICAgICAgaXNOZXdDb25uZWN0aW9uRmV0Y2hcbiAgICApXG5cbiAgICAvLyAzLiBJZiBodHRwUmVxdWVzdOKAmXMgbWV0aG9kIGlzIHVuc2FmZSBhbmQgZm9yd2FyZFJlc3BvbnNl4oCZcyBzdGF0dXMgaXNcbiAgICAvLyBpbiB0aGUgcmFuZ2UgMjAwIHRvIDM5OSwgaW5jbHVzaXZlLCBpbnZhbGlkYXRlIGFwcHJvcHJpYXRlIHN0b3JlZFxuICAgIC8vIHJlc3BvbnNlcyBpbiBodHRwQ2FjaGUsIGFzIHBlciB0aGUgXCJJbnZhbGlkYXRpb25cIiBjaGFwdGVyIG9mIEhUVFBcbiAgICAvLyBDYWNoaW5nLCBhbmQgc2V0IHN0b3JlZFJlc3BvbnNlIHRvIG51bGwuIFtIVFRQLUNBQ0hJTkddXG4gICAgaWYgKFxuICAgICAgIXNhZmVNZXRob2RzU2V0LmhhcyhodHRwUmVxdWVzdC5tZXRob2QpICYmXG4gICAgICBmb3J3YXJkUmVzcG9uc2Uuc3RhdHVzID49IDIwMCAmJlxuICAgICAgZm9yd2FyZFJlc3BvbnNlLnN0YXR1cyA8PSAzOTlcbiAgICApIHtcbiAgICAgIC8vIFRPRE86IGNhY2hlXG4gICAgfVxuXG4gICAgLy8gNC4gSWYgdGhlIHJldmFsaWRhdGluZ0ZsYWcgaXMgc2V0IGFuZCBmb3J3YXJkUmVzcG9uc2XigJlzIHN0YXR1cyBpcyAzMDQsXG4gICAgLy8gdGhlbjpcbiAgICBpZiAocmV2YWxpZGF0aW5nRmxhZyAmJiBmb3J3YXJkUmVzcG9uc2Uuc3RhdHVzID09PSAzMDQpIHtcbiAgICAgIC8vIFRPRE86IGNhY2hlXG4gICAgfVxuXG4gICAgLy8gNS4gSWYgcmVzcG9uc2UgaXMgbnVsbCwgdGhlbjpcbiAgICBpZiAocmVzcG9uc2UgPT0gbnVsbCkge1xuICAgICAgLy8gMS4gU2V0IHJlc3BvbnNlIHRvIGZvcndhcmRSZXNwb25zZS5cbiAgICAgIHJlc3BvbnNlID0gZm9yd2FyZFJlc3BvbnNlXG5cbiAgICAgIC8vIDIuIFN0b3JlIGh0dHBSZXF1ZXN0IGFuZCBmb3J3YXJkUmVzcG9uc2UgaW4gaHR0cENhY2hlLCBhcyBwZXIgdGhlXG4gICAgICAvLyBcIlN0b3JpbmcgUmVzcG9uc2VzIGluIENhY2hlc1wiIGNoYXB0ZXIgb2YgSFRUUCBDYWNoaW5nLiBbSFRUUC1DQUNISU5HXVxuICAgICAgLy8gVE9ETzogY2FjaGVcbiAgICB9XG4gIH1cblxuICAvLyAxMS4gU2V0IHJlc3BvbnNl4oCZcyBVUkwgbGlzdCB0byBhIGNsb25lIG9mIGh0dHBSZXF1ZXN04oCZcyBVUkwgbGlzdC5cbiAgcmVzcG9uc2UudXJsTGlzdCA9IFsuLi5odHRwUmVxdWVzdC51cmxMaXN0XVxuXG4gIC8vIDEyLiBJZiBodHRwUmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QgY29udGFpbnMgYFJhbmdlYCwgdGhlbiBzZXQgcmVzcG9uc2XigJlzXG4gIC8vIHJhbmdlLXJlcXVlc3RlZCBmbGFnLlxuICBpZiAoaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ3JhbmdlJykpIHtcbiAgICByZXNwb25zZS5yYW5nZVJlcXVlc3RlZCA9IHRydWVcbiAgfVxuXG4gIC8vIDEzLiBTZXQgcmVzcG9uc2XigJlzIHJlcXVlc3QtaW5jbHVkZXMtY3JlZGVudGlhbHMgdG8gaW5jbHVkZUNyZWRlbnRpYWxzLlxuICByZXNwb25zZS5yZXF1ZXN0SW5jbHVkZXNDcmVkZW50aWFscyA9IGluY2x1ZGVDcmVkZW50aWFsc1xuXG4gIC8vIDE0LiBJZiByZXNwb25zZeKAmXMgc3RhdHVzIGlzIDQwMSwgaHR0cFJlcXVlc3TigJlzIHJlc3BvbnNlIHRhaW50aW5nIGlzIG5vdFxuICAvLyBcImNvcnNcIiwgaW5jbHVkZUNyZWRlbnRpYWxzIGlzIHRydWUsIGFuZCByZXF1ZXN04oCZcyB3aW5kb3cgaXMgYW4gZW52aXJvbm1lbnRcbiAgLy8gc2V0dGluZ3Mgb2JqZWN0LCB0aGVuOlxuICAvLyBUT0RPXG5cbiAgLy8gMTUuIElmIHJlc3BvbnNl4oCZcyBzdGF0dXMgaXMgNDA3LCB0aGVuOlxuICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDcpIHtcbiAgICAvLyAxLiBJZiByZXF1ZXN04oCZcyB3aW5kb3cgaXMgXCJuby13aW5kb3dcIiwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICAgIGlmIChyZXF1ZXN0LndpbmRvdyA9PT0gJ25vLXdpbmRvdycpIHtcbiAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKClcbiAgICB9XG5cbiAgICAvLyAyLiA/Pz9cblxuICAgIC8vIDMuIElmIGZldGNoUGFyYW1zIGlzIGNhbmNlbGVkLCB0aGVuIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgbmV0d29yayBlcnJvciBmb3IgZmV0Y2hQYXJhbXMuXG4gICAgaWYgKGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSkge1xuICAgICAgcmV0dXJuIG1ha2VBcHByb3ByaWF0ZU5ldHdvcmtFcnJvcihmZXRjaFBhcmFtcylcbiAgICB9XG5cbiAgICAvLyA0LiBQcm9tcHQgdGhlIGVuZCB1c2VyIGFzIGFwcHJvcHJpYXRlIGluIHJlcXVlc3TigJlzIHdpbmRvdyBhbmQgc3RvcmVcbiAgICAvLyB0aGUgcmVzdWx0IGFzIGEgcHJveHktYXV0aGVudGljYXRpb24gZW50cnkuIFtIVFRQLUFVVEhdXG4gICAgLy8gVE9ETzogSW52b2tlIHNvbWUga2luZCBvZiBjYWxsYmFjaz9cblxuICAgIC8vIDUuIFNldCByZXNwb25zZSB0byB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgSFRUUC1uZXR3b3JrLW9yLWNhY2hlIGZldGNoIGdpdmVuXG4gICAgLy8gZmV0Y2hQYXJhbXMuXG4gICAgLy8gVE9ET1xuICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdwcm94eSBhdXRoZW50aWNhdGlvbiByZXF1aXJlZCcpXG4gIH1cblxuICAvLyAxNi4gSWYgYWxsIG9mIHRoZSBmb2xsb3dpbmcgYXJlIHRydWVcbiAgaWYgKFxuICAgIC8vIHJlc3BvbnNl4oCZcyBzdGF0dXMgaXMgNDIxXG4gICAgcmVzcG9uc2Uuc3RhdHVzID09PSA0MjEgJiZcbiAgICAvLyBpc05ld0Nvbm5lY3Rpb25GZXRjaCBpcyBmYWxzZVxuICAgICFpc05ld0Nvbm5lY3Rpb25GZXRjaCAmJlxuICAgIC8vIHJlcXVlc3TigJlzIGJvZHkgaXMgbnVsbCwgb3IgcmVxdWVzdOKAmXMgYm9keSBpcyBub24tbnVsbCBhbmQgcmVxdWVzdOKAmXMgYm9keeKAmXMgc291cmNlIGlzIG5vbi1udWxsXG4gICAgKHJlcXVlc3QuYm9keSA9PSBudWxsIHx8IHJlcXVlc3QuYm9keS5zb3VyY2UgIT0gbnVsbClcbiAgKSB7XG4gICAgLy8gdGhlbjpcblxuICAgIC8vIDEuIElmIGZldGNoUGFyYW1zIGlzIGNhbmNlbGVkLCB0aGVuIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgbmV0d29yayBlcnJvciBmb3IgZmV0Y2hQYXJhbXMuXG4gICAgaWYgKGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSkge1xuICAgICAgcmV0dXJuIG1ha2VBcHByb3ByaWF0ZU5ldHdvcmtFcnJvcihmZXRjaFBhcmFtcylcbiAgICB9XG5cbiAgICAvLyAyLiBTZXQgcmVzcG9uc2UgdG8gdGhlIHJlc3VsdCBvZiBydW5uaW5nIEhUVFAtbmV0d29yay1vci1jYWNoZVxuICAgIC8vIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLCBpc0F1dGhlbnRpY2F0aW9uRmV0Y2gsIGFuZCB0cnVlLlxuXG4gICAgLy8gVE9ETyAoc3BlYyk6IFRoZSBzcGVjIGRvZXNuJ3Qgc3BlY2lmeSB0aGlzIGJ1dCB3ZSBuZWVkIHRvIGNhbmNlbFxuICAgIC8vIHRoZSBhY3RpdmUgcmVzcG9uc2UgYmVmb3JlIHdlIGNhbiBzdGFydCBhIG5ldyBvbmUuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy9mZXRjaC9pc3N1ZXMvMTI5M1xuICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29ubmVjdGlvbi5kZXN0cm95KClcblxuICAgIHJlc3BvbnNlID0gYXdhaXQgaHR0cE5ldHdvcmtPckNhY2hlRmV0Y2goXG4gICAgICBmZXRjaFBhcmFtcyxcbiAgICAgIGlzQXV0aGVudGljYXRpb25GZXRjaCxcbiAgICAgIHRydWVcbiAgICApXG4gIH1cblxuICAvLyAxNy4gSWYgaXNBdXRoZW50aWNhdGlvbkZldGNoIGlzIHRydWUsIHRoZW4gY3JlYXRlIGFuIGF1dGhlbnRpY2F0aW9uIGVudHJ5XG4gIGlmIChpc0F1dGhlbnRpY2F0aW9uRmV0Y2gpIHtcbiAgICAvLyBUT0RPXG4gIH1cblxuICAvLyAxOC4gUmV0dXJuIHJlc3BvbnNlLlxuICByZXR1cm4gcmVzcG9uc2Vcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtbmV0d29yay1mZXRjaFxuYXN5bmMgZnVuY3Rpb24gaHR0cE5ldHdvcmtGZXRjaCAoXG4gIGZldGNoUGFyYW1zLFxuICBpbmNsdWRlQ3JlZGVudGlhbHMgPSBmYWxzZSxcbiAgZm9yY2VOZXdDb25uZWN0aW9uID0gZmFsc2Vcbikge1xuICBhc3NlcnQoIWZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29ubmVjdGlvbiB8fCBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbm5lY3Rpb24uZGVzdHJveWVkKVxuXG4gIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29ubmVjdGlvbiA9IHtcbiAgICBhYm9ydDogbnVsbCxcbiAgICBkZXN0cm95ZWQ6IGZhbHNlLFxuICAgIGRlc3Ryb3kgKGVycikge1xuICAgICAgaWYgKCF0aGlzLmRlc3Ryb3llZCkge1xuICAgICAgICB0aGlzLmRlc3Ryb3llZCA9IHRydWVcbiAgICAgICAgdGhpcy5hYm9ydD8uKGVyciA/PyBuZXcgRE9NRXhjZXB0aW9uKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLicsICdBYm9ydEVycm9yJykpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gMS4gTGV0IHJlcXVlc3QgYmUgZmV0Y2hQYXJhbXPigJlzIHJlcXVlc3QuXG4gIGNvbnN0IHJlcXVlc3QgPSBmZXRjaFBhcmFtcy5yZXF1ZXN0XG5cbiAgLy8gMi4gTGV0IHJlc3BvbnNlIGJlIG51bGwuXG4gIGxldCByZXNwb25zZSA9IG51bGxcblxuICAvLyAzLiBMZXQgdGltaW5nSW5mbyBiZSBmZXRjaFBhcmFtc+KAmXMgdGltaW5nIGluZm8uXG4gIGNvbnN0IHRpbWluZ0luZm8gPSBmZXRjaFBhcmFtcy50aW1pbmdJbmZvXG5cbiAgLy8gNC4gTGV0IGh0dHBDYWNoZSBiZSB0aGUgcmVzdWx0IG9mIGRldGVybWluaW5nIHRoZSBIVFRQIGNhY2hlIHBhcnRpdGlvbixcbiAgLy8gZ2l2ZW4gcmVxdWVzdC5cbiAgLy8gVE9ETzogY2FjaGVcbiAgY29uc3QgaHR0cENhY2hlID0gbnVsbFxuXG4gIC8vIDUuIElmIGh0dHBDYWNoZSBpcyBudWxsLCB0aGVuIHNldCByZXF1ZXN04oCZcyBjYWNoZSBtb2RlIHRvIFwibm8tc3RvcmVcIi5cbiAgaWYgKGh0dHBDYWNoZSA9PSBudWxsKSB7XG4gICAgcmVxdWVzdC5jYWNoZSA9ICduby1zdG9yZSdcbiAgfVxuXG4gIC8vIDYuIExldCBuZXR3b3JrUGFydGl0aW9uS2V5IGJlIHRoZSByZXN1bHQgb2YgZGV0ZXJtaW5pbmcgdGhlIG5ldHdvcmtcbiAgLy8gcGFydGl0aW9uIGtleSBnaXZlbiByZXF1ZXN0LlxuICAvLyBUT0RPXG5cbiAgLy8gNy4gTGV0IG5ld0Nvbm5lY3Rpb24gYmUgXCJ5ZXNcIiBpZiBmb3JjZU5ld0Nvbm5lY3Rpb24gaXMgdHJ1ZTsgb3RoZXJ3aXNlXG4gIC8vIFwibm9cIi5cbiAgY29uc3QgbmV3Q29ubmVjdGlvbiA9IGZvcmNlTmV3Q29ubmVjdGlvbiA/ICd5ZXMnIDogJ25vJyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG5cbiAgLy8gOC4gU3dpdGNoIG9uIHJlcXVlc3TigJlzIG1vZGU6XG4gIGlmIChyZXF1ZXN0Lm1vZGUgPT09ICd3ZWJzb2NrZXQnKSB7XG4gICAgLy8gTGV0IGNvbm5lY3Rpb24gYmUgdGhlIHJlc3VsdCBvZiBvYnRhaW5pbmcgYSBXZWJTb2NrZXQgY29ubmVjdGlvbixcbiAgICAvLyBnaXZlbiByZXF1ZXN04oCZcyBjdXJyZW50IFVSTC5cbiAgICAvLyBUT0RPXG4gIH0gZWxzZSB7XG4gICAgLy8gTGV0IGNvbm5lY3Rpb24gYmUgdGhlIHJlc3VsdCBvZiBvYnRhaW5pbmcgYSBjb25uZWN0aW9uLCBnaXZlblxuICAgIC8vIG5ldHdvcmtQYXJ0aXRpb25LZXksIHJlcXVlc3TigJlzIGN1cnJlbnQgVVJM4oCZcyBvcmlnaW4sXG4gICAgLy8gaW5jbHVkZUNyZWRlbnRpYWxzLCBhbmQgZm9yY2VOZXdDb25uZWN0aW9uLlxuICAgIC8vIFRPRE9cbiAgfVxuXG4gIC8vIDkuIFJ1biB0aGVzZSBzdGVwcywgYnV0IGFib3J0IHdoZW4gdGhlIG9uZ29pbmcgZmV0Y2ggaXMgdGVybWluYXRlZDpcblxuICAvLyAgICAxLiBJZiBjb25uZWN0aW9uIGlzIGZhaWx1cmUsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cblxuICAvLyAgICAyLiBTZXQgdGltaW5nSW5mb+KAmXMgZmluYWwgY29ubmVjdGlvbiB0aW1pbmcgaW5mbyB0byB0aGUgcmVzdWx0IG9mXG4gIC8vICAgIGNhbGxpbmcgY2xhbXAgYW5kIGNvYXJzZW4gY29ubmVjdGlvbiB0aW1pbmcgaW5mbyB3aXRoIGNvbm5lY3Rpb27igJlzXG4gIC8vICAgIHRpbWluZyBpbmZvLCB0aW1pbmdJbmZv4oCZcyBwb3N0LXJlZGlyZWN0IHN0YXJ0IHRpbWUsIGFuZCBmZXRjaFBhcmFtc+KAmXNcbiAgLy8gICAgY3Jvc3Mtb3JpZ2luIGlzb2xhdGVkIGNhcGFiaWxpdHkuXG5cbiAgLy8gICAgMy4gSWYgY29ubmVjdGlvbiBpcyBub3QgYW4gSFRUUC8yIGNvbm5lY3Rpb24sIHJlcXVlc3TigJlzIGJvZHkgaXMgbm9uLW51bGwsXG4gIC8vICAgIGFuZCByZXF1ZXN04oCZcyBib2R54oCZcyBzb3VyY2UgaXMgbnVsbCwgdGhlbiBhcHBlbmQgKGBUcmFuc2Zlci1FbmNvZGluZ2AsXG4gIC8vICAgIGBjaHVua2VkYCkgdG8gcmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QuXG5cbiAgLy8gICAgNC4gU2V0IHRpbWluZ0luZm/igJlzIGZpbmFsIG5ldHdvcmstcmVxdWVzdCBzdGFydCB0aW1lIHRvIHRoZSBjb2Fyc2VuZWRcbiAgLy8gICAgc2hhcmVkIGN1cnJlbnQgdGltZSBnaXZlbiBmZXRjaFBhcmFtc+KAmXMgY3Jvc3Mtb3JpZ2luIGlzb2xhdGVkXG4gIC8vICAgIGNhcGFiaWxpdHkuXG5cbiAgLy8gICAgNS4gU2V0IHJlc3BvbnNlIHRvIHRoZSByZXN1bHQgb2YgbWFraW5nIGFuIEhUVFAgcmVxdWVzdCBvdmVyIGNvbm5lY3Rpb25cbiAgLy8gICAgdXNpbmcgcmVxdWVzdCB3aXRoIHRoZSBmb2xsb3dpbmcgY2F2ZWF0czpcblxuICAvLyAgICAgICAgLSBGb2xsb3cgdGhlIHJlbGV2YW50IHJlcXVpcmVtZW50cyBmcm9tIEhUVFAuIFtIVFRQXSBbSFRUUC1TRU1BTlRJQ1NdXG4gIC8vICAgICAgICBbSFRUUC1DT05EXSBbSFRUUC1DQUNISU5HXSBbSFRUUC1BVVRIXVxuXG4gIC8vICAgICAgICAtIElmIHJlcXVlc3TigJlzIGJvZHkgaXMgbm9uLW51bGwsIGFuZCByZXF1ZXN04oCZcyBib2R54oCZcyBzb3VyY2UgaXMgbnVsbCxcbiAgLy8gICAgICAgIHRoZW4gdGhlIHVzZXIgYWdlbnQgbWF5IGhhdmUgYSBidWZmZXIgb2YgdXAgdG8gNjQga2liaWJ5dGVzIGFuZCBzdG9yZVxuICAvLyAgICAgICAgYSBwYXJ0IG9mIHJlcXVlc3TigJlzIGJvZHkgaW4gdGhhdCBidWZmZXIuIElmIHRoZSB1c2VyIGFnZW50IHJlYWRzIGZyb21cbiAgLy8gICAgICAgIHJlcXVlc3TigJlzIGJvZHkgYmV5b25kIHRoYXQgYnVmZmVy4oCZcyBzaXplIGFuZCB0aGUgdXNlciBhZ2VudCBuZWVkcyB0b1xuICAvLyAgICAgICAgcmVzZW5kIHJlcXVlc3QsIHRoZW4gaW5zdGVhZCByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuXG4gIC8vICAgICAgICAtIFNldCB0aW1pbmdJbmZv4oCZcyBmaW5hbCBuZXR3b3JrLXJlc3BvbnNlIHN0YXJ0IHRpbWUgdG8gdGhlIGNvYXJzZW5lZFxuICAvLyAgICAgICAgc2hhcmVkIGN1cnJlbnQgdGltZSBnaXZlbiBmZXRjaFBhcmFtc+KAmXMgY3Jvc3Mtb3JpZ2luIGlzb2xhdGVkIGNhcGFiaWxpdHksXG4gIC8vICAgICAgICBpbW1lZGlhdGVseSBhZnRlciB0aGUgdXNlciBhZ2VudOKAmXMgSFRUUCBwYXJzZXIgcmVjZWl2ZXMgdGhlIGZpcnN0IGJ5dGVcbiAgLy8gICAgICAgIG9mIHRoZSByZXNwb25zZSAoZS5nLiwgZnJhbWUgaGVhZGVyIGJ5dGVzIGZvciBIVFRQLzIgb3IgcmVzcG9uc2Ugc3RhdHVzXG4gIC8vICAgICAgICBsaW5lIGZvciBIVFRQLzEueCkuXG5cbiAgLy8gICAgICAgIC0gV2FpdCB1bnRpbCBhbGwgdGhlIGhlYWRlcnMgYXJlIHRyYW5zbWl0dGVkLlxuXG4gIC8vICAgICAgICAtIEFueSByZXNwb25zZXMgd2hvc2Ugc3RhdHVzIGlzIGluIHRoZSByYW5nZSAxMDAgdG8gMTk5LCBpbmNsdXNpdmUsXG4gIC8vICAgICAgICBhbmQgaXMgbm90IDEwMSwgYXJlIHRvIGJlIGlnbm9yZWQsIGV4Y2VwdCBmb3IgdGhlIHB1cnBvc2VzIG9mIHNldHRpbmdcbiAgLy8gICAgICAgIHRpbWluZ0luZm/igJlzIGZpbmFsIG5ldHdvcmstcmVzcG9uc2Ugc3RhcnQgdGltZSBhYm92ZS5cblxuICAvLyAgICAtIElmIHJlcXVlc3TigJlzIGhlYWRlciBsaXN0IGNvbnRhaW5zIGBUcmFuc2Zlci1FbmNvZGluZ2AvYGNodW5rZWRgIGFuZFxuICAvLyAgICByZXNwb25zZSBpcyB0cmFuc2ZlcnJlZCB2aWEgSFRUUC8xLjAgb3Igb2xkZXIsIHRoZW4gcmV0dXJuIGEgbmV0d29ya1xuICAvLyAgICBlcnJvci5cblxuICAvLyAgICAtIElmIHRoZSBIVFRQIHJlcXVlc3QgcmVzdWx0cyBpbiBhIFRMUyBjbGllbnQgY2VydGlmaWNhdGUgZGlhbG9nLCB0aGVuOlxuXG4gIC8vICAgICAgICAxLiBJZiByZXF1ZXN04oCZcyB3aW5kb3cgaXMgYW4gZW52aXJvbm1lbnQgc2V0dGluZ3Mgb2JqZWN0LCBtYWtlIHRoZVxuICAvLyAgICAgICAgZGlhbG9nIGF2YWlsYWJsZSBpbiByZXF1ZXN04oCZcyB3aW5kb3cuXG5cbiAgLy8gICAgICAgIDIuIE90aGVyd2lzZSwgcmV0dXJuIGEgbmV0d29yayBlcnJvci5cblxuICAvLyBUbyB0cmFuc21pdCByZXF1ZXN04oCZcyBib2R5IGJvZHksIHJ1biB0aGVzZSBzdGVwczpcbiAgbGV0IHJlcXVlc3RCb2R5ID0gbnVsbFxuICAvLyAxLiBJZiBib2R5IGlzIG51bGwgYW5kIGZldGNoUGFyYW1z4oCZcyBwcm9jZXNzIHJlcXVlc3QgZW5kLW9mLWJvZHkgaXNcbiAgLy8gbm9uLW51bGwsIHRoZW4gcXVldWUgYSBmZXRjaCB0YXNrIGdpdmVuIGZldGNoUGFyYW1z4oCZcyBwcm9jZXNzIHJlcXVlc3RcbiAgLy8gZW5kLW9mLWJvZHkgYW5kIGZldGNoUGFyYW1z4oCZcyB0YXNrIGRlc3RpbmF0aW9uLlxuICBpZiAocmVxdWVzdC5ib2R5ID09IG51bGwgJiYgZmV0Y2hQYXJhbXMucHJvY2Vzc1JlcXVlc3RFbmRPZkJvZHkpIHtcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBmZXRjaFBhcmFtcy5wcm9jZXNzUmVxdWVzdEVuZE9mQm9keSgpKVxuICB9IGVsc2UgaWYgKHJlcXVlc3QuYm9keSAhPSBudWxsKSB7XG4gICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiBib2R5IGlzIG5vbi1udWxsOlxuXG4gICAgLy8gICAgMS4gTGV0IHByb2Nlc3NCb2R5Q2h1bmsgZ2l2ZW4gYnl0ZXMgYmUgdGhlc2Ugc3RlcHM6XG4gICAgY29uc3QgcHJvY2Vzc0JvZHlDaHVuayA9IGFzeW5jIGZ1bmN0aW9uICogKGJ5dGVzKSB7XG4gICAgICAvLyAxLiBJZiB0aGUgb25nb2luZyBmZXRjaCBpcyB0ZXJtaW5hdGVkLCB0aGVuIGFib3J0IHRoZXNlIHN0ZXBzLlxuICAgICAgaWYgKGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gMi4gUnVuIHRoaXMgc3RlcCBpbiBwYXJhbGxlbDogdHJhbnNtaXQgYnl0ZXMuXG4gICAgICB5aWVsZCBieXRlc1xuXG4gICAgICAvLyAzLiBJZiBmZXRjaFBhcmFtc+KAmXMgcHJvY2VzcyByZXF1ZXN0IGJvZHkgaXMgbm9uLW51bGwsIHRoZW4gcnVuXG4gICAgICAvLyBmZXRjaFBhcmFtc+KAmXMgcHJvY2VzcyByZXF1ZXN0IGJvZHkgZ2l2ZW4gYnl0ZXPigJlzIGxlbmd0aC5cbiAgICAgIGZldGNoUGFyYW1zLnByb2Nlc3NSZXF1ZXN0Qm9keUNodW5rTGVuZ3RoPy4oYnl0ZXMuYnl0ZUxlbmd0aClcbiAgICB9XG5cbiAgICAvLyAyLiBMZXQgcHJvY2Vzc0VuZE9mQm9keSBiZSB0aGVzZSBzdGVwczpcbiAgICBjb25zdCBwcm9jZXNzRW5kT2ZCb2R5ID0gKCkgPT4ge1xuICAgICAgLy8gMS4gSWYgZmV0Y2hQYXJhbXMgaXMgY2FuY2VsZWQsIHRoZW4gYWJvcnQgdGhlc2Ugc3RlcHMuXG4gICAgICBpZiAoaXNDYW5jZWxsZWQoZmV0Y2hQYXJhbXMpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyAyLiBJZiBmZXRjaFBhcmFtc+KAmXMgcHJvY2VzcyByZXF1ZXN0IGVuZC1vZi1ib2R5IGlzIG5vbi1udWxsLFxuICAgICAgLy8gdGhlbiBydW4gZmV0Y2hQYXJhbXPigJlzIHByb2Nlc3MgcmVxdWVzdCBlbmQtb2YtYm9keS5cbiAgICAgIGlmIChmZXRjaFBhcmFtcy5wcm9jZXNzUmVxdWVzdEVuZE9mQm9keSkge1xuICAgICAgICBmZXRjaFBhcmFtcy5wcm9jZXNzUmVxdWVzdEVuZE9mQm9keSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gMy4gTGV0IHByb2Nlc3NCb2R5RXJyb3IgZ2l2ZW4gZSBiZSB0aGVzZSBzdGVwczpcbiAgICBjb25zdCBwcm9jZXNzQm9keUVycm9yID0gKGUpID0+IHtcbiAgICAgIC8vIDEuIElmIGZldGNoUGFyYW1zIGlzIGNhbmNlbGVkLCB0aGVuIGFib3J0IHRoZXNlIHN0ZXBzLlxuICAgICAgaWYgKGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gMi4gSWYgZSBpcyBhbiBcIkFib3J0RXJyb3JcIiBET01FeGNlcHRpb24sIHRoZW4gYWJvcnQgZmV0Y2hQYXJhbXPigJlzIGNvbnRyb2xsZXIuXG4gICAgICBpZiAoZS5uYW1lID09PSAnQWJvcnRFcnJvcicpIHtcbiAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5hYm9ydCgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnRlcm1pbmF0ZShlKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDQuIEluY3JlbWVudGFsbHkgcmVhZCByZXF1ZXN04oCZcyBib2R5IGdpdmVuIHByb2Nlc3NCb2R5Q2h1bmssIHByb2Nlc3NFbmRPZkJvZHksXG4gICAgLy8gcHJvY2Vzc0JvZHlFcnJvciwgYW5kIGZldGNoUGFyYW1z4oCZcyB0YXNrIGRlc3RpbmF0aW9uLlxuICAgIHJlcXVlc3RCb2R5ID0gKGFzeW5jIGZ1bmN0aW9uICogKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm9yIGF3YWl0IChjb25zdCBieXRlcyBvZiByZXF1ZXN0LmJvZHkuc3RyZWFtKSB7XG4gICAgICAgICAgeWllbGQgKiBwcm9jZXNzQm9keUNodW5rKGJ5dGVzKVxuICAgICAgICB9XG4gICAgICAgIHByb2Nlc3NFbmRPZkJvZHkoKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHByb2Nlc3NCb2R5RXJyb3IoZXJyKVxuICAgICAgfVxuICAgIH0pKClcbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gc29ja2V0IGlzIG9ubHkgcHJvdmlkZWQgZm9yIHdlYnNvY2tldHNcbiAgICBjb25zdCB7IGJvZHksIHN0YXR1cywgc3RhdHVzVGV4dCwgaGVhZGVyc0xpc3QsIHNvY2tldCB9ID0gYXdhaXQgZGlzcGF0Y2goeyBib2R5OiByZXF1ZXN0Qm9keSB9KVxuXG4gICAgaWYgKHNvY2tldCkge1xuICAgICAgcmVzcG9uc2UgPSBtYWtlUmVzcG9uc2UoeyBzdGF0dXMsIHN0YXR1c1RleHQsIGhlYWRlcnNMaXN0LCBzb2NrZXQgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgaXRlcmF0b3IgPSBib2R5W1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpXG4gICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLm5leHQgPSAoKSA9PiBpdGVyYXRvci5uZXh0KClcblxuICAgICAgcmVzcG9uc2UgPSBtYWtlUmVzcG9uc2UoeyBzdGF0dXMsIHN0YXR1c1RleHQsIGhlYWRlcnNMaXN0IH0pXG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyAxMC4gSWYgYWJvcnRlZCwgdGhlbjpcbiAgICBpZiAoZXJyLm5hbWUgPT09ICdBYm9ydEVycm9yJykge1xuICAgICAgLy8gMS4gSWYgY29ubmVjdGlvbiB1c2VzIEhUVFAvMiwgdGhlbiB0cmFuc21pdCBhbiBSU1RfU1RSRUFNIGZyYW1lLlxuICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb25uZWN0aW9uLmRlc3Ryb3koKVxuXG4gICAgICAvLyAyLiBSZXR1cm4gdGhlIGFwcHJvcHJpYXRlIG5ldHdvcmsgZXJyb3IgZm9yIGZldGNoUGFyYW1zLlxuICAgICAgcmV0dXJuIG1ha2VBcHByb3ByaWF0ZU5ldHdvcmtFcnJvcihmZXRjaFBhcmFtcywgZXJyKVxuICAgIH1cblxuICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKGVycilcbiAgfVxuXG4gIC8vIDExLiBMZXQgcHVsbEFsZ29yaXRobSBiZSBhbiBhY3Rpb24gdGhhdCByZXN1bWVzIHRoZSBvbmdvaW5nIGZldGNoXG4gIC8vIGlmIGl0IGlzIHN1c3BlbmRlZC5cbiAgY29uc3QgcHVsbEFsZ29yaXRobSA9ICgpID0+IHtcbiAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnJlc3VtZSgpXG4gIH1cblxuICAvLyAxMi4gTGV0IGNhbmNlbEFsZ29yaXRobSBiZSBhbiBhbGdvcml0aG0gdGhhdCBhYm9ydHMgZmV0Y2hQYXJhbXPigJlzXG4gIC8vIGNvbnRyb2xsZXIgd2l0aCByZWFzb24sIGdpdmVuIHJlYXNvbi5cbiAgY29uc3QgY2FuY2VsQWxnb3JpdGhtID0gKHJlYXNvbikgPT4ge1xuICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuYWJvcnQocmVhc29uKVxuICB9XG5cbiAgLy8gMTMuIExldCBoaWdoV2F0ZXJNYXJrIGJlIGEgbm9uLW5lZ2F0aXZlLCBub24tTmFOIG51bWJlciwgY2hvc2VuIGJ5XG4gIC8vIHRoZSB1c2VyIGFnZW50LlxuICAvLyBUT0RPXG5cbiAgLy8gMTQuIExldCBzaXplQWxnb3JpdGhtIGJlIGFuIGFsZ29yaXRobSB0aGF0IGFjY2VwdHMgYSBjaHVuayBvYmplY3RcbiAgLy8gYW5kIHJldHVybnMgYSBub24tbmVnYXRpdmUsIG5vbi1OYU4sIG5vbi1pbmZpbml0ZSBudW1iZXIsIGNob3NlbiBieSB0aGUgdXNlciBhZ2VudC5cbiAgLy8gVE9ET1xuXG4gIC8vIDE1LiBMZXQgc3RyZWFtIGJlIGEgbmV3IFJlYWRhYmxlU3RyZWFtLlxuICAvLyAxNi4gU2V0IHVwIHN0cmVhbSB3aXRoIHB1bGxBbGdvcml0aG0gc2V0IHRvIHB1bGxBbGdvcml0aG0sXG4gIC8vIGNhbmNlbEFsZ29yaXRobSBzZXQgdG8gY2FuY2VsQWxnb3JpdGhtLCBoaWdoV2F0ZXJNYXJrIHNldCB0b1xuICAvLyBoaWdoV2F0ZXJNYXJrLCBhbmQgc2l6ZUFsZ29yaXRobSBzZXQgdG8gc2l6ZUFsZ29yaXRobS5cbiAgaWYgKCFSZWFkYWJsZVN0cmVhbSkge1xuICAgIFJlYWRhYmxlU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtL3dlYicpLlJlYWRhYmxlU3RyZWFtXG4gIH1cblxuICBjb25zdCBzdHJlYW0gPSBuZXcgUmVhZGFibGVTdHJlYW0oXG4gICAge1xuICAgICAgYXN5bmMgc3RhcnQgKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb250cm9sbGVyID0gY29udHJvbGxlclxuICAgICAgfSxcbiAgICAgIGFzeW5jIHB1bGwgKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgYXdhaXQgcHVsbEFsZ29yaXRobShjb250cm9sbGVyKVxuICAgICAgfSxcbiAgICAgIGFzeW5jIGNhbmNlbCAocmVhc29uKSB7XG4gICAgICAgIGF3YWl0IGNhbmNlbEFsZ29yaXRobShyZWFzb24pXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBoaWdoV2F0ZXJNYXJrOiAwLFxuICAgICAgc2l6ZSAoKSB7XG4gICAgICAgIHJldHVybiAxXG4gICAgICB9XG4gICAgfVxuICApXG5cbiAgLy8gMTcuIFJ1biB0aGVzZSBzdGVwcywgYnV0IGFib3J0IHdoZW4gdGhlIG9uZ29pbmcgZmV0Y2ggaXMgdGVybWluYXRlZDpcblxuICAvLyAgICAxLiBTZXQgcmVzcG9uc2XigJlzIGJvZHkgdG8gYSBuZXcgYm9keSB3aG9zZSBzdHJlYW0gaXMgc3RyZWFtLlxuICByZXNwb25zZS5ib2R5ID0geyBzdHJlYW0gfVxuXG4gIC8vICAgIDIuIElmIHJlc3BvbnNlIGlzIG5vdCBhIG5ldHdvcmsgZXJyb3IgYW5kIHJlcXVlc3TigJlzIGNhY2hlIG1vZGUgaXNcbiAgLy8gICAgbm90IFwibm8tc3RvcmVcIiwgdGhlbiB1cGRhdGUgcmVzcG9uc2UgaW4gaHR0cENhY2hlIGZvciByZXF1ZXN0LlxuICAvLyAgICBUT0RPXG5cbiAgLy8gICAgMy4gSWYgaW5jbHVkZUNyZWRlbnRpYWxzIGlzIHRydWUgYW5kIHRoZSB1c2VyIGFnZW50IGlzIG5vdCBjb25maWd1cmVkXG4gIC8vICAgIHRvIGJsb2NrIGNvb2tpZXMgZm9yIHJlcXVlc3QgKHNlZSBzZWN0aW9uIDcgb2YgW0NPT0tJRVNdKSwgdGhlbiBydW4gdGhlXG4gIC8vICAgIFwic2V0LWNvb2tpZS1zdHJpbmdcIiBwYXJzaW5nIGFsZ29yaXRobSAoc2VlIHNlY3Rpb24gNS4yIG9mIFtDT09LSUVTXSkgb25cbiAgLy8gICAgdGhlIHZhbHVlIG9mIGVhY2ggaGVhZGVyIHdob3NlIG5hbWUgaXMgYSBieXRlLWNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yXG4gIC8vICAgIGBTZXQtQ29va2llYCBpbiByZXNwb25zZeKAmXMgaGVhZGVyIGxpc3QsIGlmIGFueSwgYW5kIHJlcXVlc3TigJlzIGN1cnJlbnQgVVJMLlxuICAvLyAgICBUT0RPXG5cbiAgLy8gMTguIElmIGFib3J0ZWQsIHRoZW46XG4gIC8vIFRPRE9cblxuICAvLyAxOS4gUnVuIHRoZXNlIHN0ZXBzIGluIHBhcmFsbGVsOlxuXG4gIC8vICAgIDEuIFJ1biB0aGVzZSBzdGVwcywgYnV0IGFib3J0IHdoZW4gZmV0Y2hQYXJhbXMgaXMgY2FuY2VsZWQ6XG4gIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIub24oJ3Rlcm1pbmF0ZWQnLCBvbkFib3J0ZWQpXG4gIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIucmVzdW1lID0gYXN5bmMgKCkgPT4ge1xuICAgIC8vIDEuIFdoaWxlIHRydWVcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgLy8gMS0zLiBTZWUgb25EYXRhLi4uXG5cbiAgICAgIC8vIDQuIFNldCBieXRlcyB0byB0aGUgcmVzdWx0IG9mIGhhbmRsaW5nIGNvbnRlbnQgY29kaW5ncyBnaXZlblxuICAgICAgLy8gY29kaW5ncyBhbmQgYnl0ZXMuXG4gICAgICBsZXQgYnl0ZXNcbiAgICAgIGxldCBpc0ZhaWx1cmVcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IGZldGNoUGFyYW1zLmNvbnRyb2xsZXIubmV4dCgpXG5cbiAgICAgICAgaWYgKGlzQWJvcnRlZChmZXRjaFBhcmFtcykpIHtcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG5cbiAgICAgICAgYnl0ZXMgPSBkb25lID8gdW5kZWZpbmVkIDogdmFsdWVcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoZmV0Y2hQYXJhbXMuY29udHJvbGxlci5lbmRlZCAmJiAhdGltaW5nSW5mby5lbmNvZGVkQm9keVNpemUpIHtcbiAgICAgICAgICAvLyB6bGliIGRvZXNuJ3QgbGlrZSBlbXB0eSBzdHJlYW1zLlxuICAgICAgICAgIGJ5dGVzID0gdW5kZWZpbmVkXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnl0ZXMgPSBlcnJcblxuICAgICAgICAgIC8vIGVyciBtYXkgYmUgcHJvcGFnYXRlZCBmcm9tIHRoZSByZXN1bHQgb2YgY2FsbGluZyByZWFkYWJsZXN0cmVhbS5jYW5jZWwsXG4gICAgICAgICAgLy8gd2hpY2ggbWlnaHQgbm90IGJlIGFuIGVycm9yLiBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMjAwOVxuICAgICAgICAgIGlzRmFpbHVyZSA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoYnl0ZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyAyLiBPdGhlcndpc2UsIGlmIHRoZSBieXRlcyB0cmFuc21pc3Npb24gZm9yIHJlc3BvbnNl4oCZcyBtZXNzYWdlXG4gICAgICAgIC8vIGJvZHkgaXMgZG9uZSBub3JtYWxseSBhbmQgc3RyZWFtIGlzIHJlYWRhYmxlLCB0aGVuIGNsb3NlXG4gICAgICAgIC8vIHN0cmVhbSwgZmluYWxpemUgcmVzcG9uc2UgZm9yIGZldGNoUGFyYW1zIGFuZCByZXNwb25zZSwgYW5kXG4gICAgICAgIC8vIGFib3J0IHRoZXNlIGluLXBhcmFsbGVsIHN0ZXBzLlxuICAgICAgICByZWFkYWJsZVN0cmVhbUNsb3NlKGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29udHJvbGxlcilcblxuICAgICAgICBmaW5hbGl6ZVJlc3BvbnNlKGZldGNoUGFyYW1zLCByZXNwb25zZSlcblxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gNS4gSW5jcmVhc2UgdGltaW5nSW5mb+KAmXMgZGVjb2RlZCBib2R5IHNpemUgYnkgYnl0ZXPigJlzIGxlbmd0aC5cbiAgICAgIHRpbWluZ0luZm8uZGVjb2RlZEJvZHlTaXplICs9IGJ5dGVzPy5ieXRlTGVuZ3RoID8/IDBcblxuICAgICAgLy8gNi4gSWYgYnl0ZXMgaXMgZmFpbHVyZSwgdGhlbiB0ZXJtaW5hdGUgZmV0Y2hQYXJhbXPigJlzIGNvbnRyb2xsZXIuXG4gICAgICBpZiAoaXNGYWlsdXJlKSB7XG4gICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIudGVybWluYXRlKGJ5dGVzKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gNy4gRW5xdWV1ZSBhIFVpbnQ4QXJyYXkgd3JhcHBpbmcgYW4gQXJyYXlCdWZmZXIgY29udGFpbmluZyBieXRlc1xuICAgICAgLy8gaW50byBzdHJlYW0uXG4gICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbnRyb2xsZXIuZW5xdWV1ZShuZXcgVWludDhBcnJheShieXRlcykpXG5cbiAgICAgIC8vIDguIElmIHN0cmVhbSBpcyBlcnJvcmVkLCB0aGVuIHRlcm1pbmF0ZSB0aGUgb25nb2luZyBmZXRjaC5cbiAgICAgIGlmIChpc0Vycm9yZWQoc3RyZWFtKSkge1xuICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnRlcm1pbmF0ZSgpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyA5LiBJZiBzdHJlYW0gZG9lc27igJl0IG5lZWQgbW9yZSBkYXRhIGFzayB0aGUgdXNlciBhZ2VudCB0byBzdXNwZW5kXG4gICAgICAvLyB0aGUgb25nb2luZyBmZXRjaC5cbiAgICAgIGlmICghZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb250cm9sbGVyLmRlc2lyZWRTaXplKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vICAgIDIuIElmIGFib3J0ZWQsIHRoZW46XG4gIGZ1bmN0aW9uIG9uQWJvcnRlZCAocmVhc29uKSB7XG4gICAgLy8gMi4gSWYgZmV0Y2hQYXJhbXMgaXMgYWJvcnRlZCwgdGhlbjpcbiAgICBpZiAoaXNBYm9ydGVkKGZldGNoUGFyYW1zKSkge1xuICAgICAgLy8gMS4gU2V0IHJlc3BvbnNl4oCZcyBhYm9ydGVkIGZsYWcuXG4gICAgICByZXNwb25zZS5hYm9ydGVkID0gdHJ1ZVxuXG4gICAgICAvLyAyLiBJZiBzdHJlYW0gaXMgcmVhZGFibGUsIHRoZW4gZXJyb3Igc3RyZWFtIHdpdGggdGhlIHJlc3VsdCBvZlxuICAgICAgLy8gICAgZGVzZXJpYWxpemUgYSBzZXJpYWxpemVkIGFib3J0IHJlYXNvbiBnaXZlbiBmZXRjaFBhcmFtc+KAmXNcbiAgICAgIC8vICAgIGNvbnRyb2xsZXLigJlzIHNlcmlhbGl6ZWQgYWJvcnQgcmVhc29uIGFuZCBhblxuICAgICAgLy8gICAgaW1wbGVtZW50YXRpb24tZGVmaW5lZCByZWFsbS5cbiAgICAgIGlmIChpc1JlYWRhYmxlKHN0cmVhbSkpIHtcbiAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb250cm9sbGVyLmVycm9yKFxuICAgICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuc2VyaWFsaXplZEFib3J0UmVhc29uXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gMy4gT3RoZXJ3aXNlLCBpZiBzdHJlYW0gaXMgcmVhZGFibGUsIGVycm9yIHN0cmVhbSB3aXRoIGEgVHlwZUVycm9yLlxuICAgICAgaWYgKGlzUmVhZGFibGUoc3RyZWFtKSkge1xuICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbnRyb2xsZXIuZXJyb3IobmV3IFR5cGVFcnJvcigndGVybWluYXRlZCcsIHtcbiAgICAgICAgICBjYXVzZTogaXNFcnJvckxpa2UocmVhc29uKSA/IHJlYXNvbiA6IHVuZGVmaW5lZFxuICAgICAgICB9KSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA0LiBJZiBjb25uZWN0aW9uIHVzZXMgSFRUUC8yLCB0aGVuIHRyYW5zbWl0IGFuIFJTVF9TVFJFQU0gZnJhbWUuXG4gICAgLy8gNS4gT3RoZXJ3aXNlLCB0aGUgdXNlciBhZ2VudCBzaG91bGQgY2xvc2UgY29ubmVjdGlvbiB1bmxlc3MgaXQgd291bGQgYmUgYmFkIGZvciBwZXJmb3JtYW5jZSB0byBkbyBzby5cbiAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbm5lY3Rpb24uZGVzdHJveSgpXG4gIH1cblxuICAvLyAyMC4gUmV0dXJuIHJlc3BvbnNlLlxuICByZXR1cm4gcmVzcG9uc2VcblxuICBhc3luYyBmdW5jdGlvbiBkaXNwYXRjaCAoeyBib2R5IH0pIHtcbiAgICBjb25zdCB1cmwgPSByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KVxuICAgIC8qKiBAdHlwZSB7aW1wb3J0KCcuLi8uLicpLkFnZW50fSAqL1xuICAgIGNvbnN0IGFnZW50ID0gZmV0Y2hQYXJhbXMuY29udHJvbGxlci5kaXNwYXRjaGVyXG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gYWdlbnQuZGlzcGF0Y2goXG4gICAgICB7XG4gICAgICAgIHBhdGg6IHVybC5wYXRobmFtZSArIHVybC5zZWFyY2gsXG4gICAgICAgIG9yaWdpbjogdXJsLm9yaWdpbixcbiAgICAgICAgbWV0aG9kOiByZXF1ZXN0Lm1ldGhvZCxcbiAgICAgICAgYm9keTogZmV0Y2hQYXJhbXMuY29udHJvbGxlci5kaXNwYXRjaGVyLmlzTW9ja0FjdGl2ZSA/IHJlcXVlc3QuYm9keSAmJiAocmVxdWVzdC5ib2R5LnNvdXJjZSB8fCByZXF1ZXN0LmJvZHkuc3RyZWFtKSA6IGJvZHksXG4gICAgICAgIGhlYWRlcnM6IHJlcXVlc3QuaGVhZGVyc0xpc3QuZW50cmllcyxcbiAgICAgICAgbWF4UmVkaXJlY3Rpb25zOiAwLFxuICAgICAgICB1cGdyYWRlOiByZXF1ZXN0Lm1vZGUgPT09ICd3ZWJzb2NrZXQnID8gJ3dlYnNvY2tldCcgOiB1bmRlZmluZWRcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJvZHk6IG51bGwsXG4gICAgICAgIGFib3J0OiBudWxsLFxuXG4gICAgICAgIG9uQ29ubmVjdCAoYWJvcnQpIHtcbiAgICAgICAgICAvLyBUT0RPIChmaXgpOiBEbyB3ZSBuZWVkIGNvbm5lY3Rpb24gaGVyZT9cbiAgICAgICAgICBjb25zdCB7IGNvbm5lY3Rpb24gfSA9IGZldGNoUGFyYW1zLmNvbnRyb2xsZXJcblxuICAgICAgICAgIGlmIChjb25uZWN0aW9uLmRlc3Ryb3llZCkge1xuICAgICAgICAgICAgYWJvcnQobmV3IERPTUV4Y2VwdGlvbignVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC4nLCAnQWJvcnRFcnJvcicpKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLm9uKCd0ZXJtaW5hdGVkJywgYWJvcnQpXG4gICAgICAgICAgICB0aGlzLmFib3J0ID0gY29ubmVjdGlvbi5hYm9ydCA9IGFib3J0XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIG9uSGVhZGVycyAoc3RhdHVzLCBoZWFkZXJzTGlzdCwgcmVzdW1lLCBzdGF0dXNUZXh0KSB7XG4gICAgICAgICAgaWYgKHN0YXR1cyA8IDIwMCkge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IGNvZGluZ3MgPSBbXVxuICAgICAgICAgIGxldCBsb2NhdGlvbiA9ICcnXG5cbiAgICAgICAgICBjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKVxuXG4gICAgICAgICAgLy8gRm9yIEgyLCB0aGUgaGVhZGVycyBhcmUgYSBwbGFpbiBKUyBvYmplY3RcbiAgICAgICAgICAvLyBXZSBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZW0gYW5kIGl0ZXJhdGUgYWNjb3JkaW5nbHlcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzTGlzdCkpIHtcbiAgICAgICAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgaGVhZGVyc0xpc3QubGVuZ3RoOyBuICs9IDIpIHtcbiAgICAgICAgICAgICAgY29uc3Qga2V5ID0gaGVhZGVyc0xpc3RbbiArIDBdLnRvU3RyaW5nKCdsYXRpbjEnKVxuICAgICAgICAgICAgICBjb25zdCB2YWwgPSBoZWFkZXJzTGlzdFtuICsgMV0udG9TdHJpbmcoJ2xhdGluMScpXG4gICAgICAgICAgICAgIGlmIChrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtZW5jb2RpbmcnKSB7XG4gICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzcyMzEjc2VjdGlvbi0zLjEuMi4xXG4gICAgICAgICAgICAgICAgLy8gXCJBbGwgY29udGVudC1jb2RpbmcgdmFsdWVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlLi4uXCJcbiAgICAgICAgICAgICAgICBjb2RpbmdzID0gdmFsLnRvTG93ZXJDYXNlKCkuc3BsaXQoJywnKS5tYXAoKHgpID0+IHgudHJpbSgpKVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleS50b0xvd2VyQ2FzZSgpID09PSAnbG9jYXRpb24nKSB7XG4gICAgICAgICAgICAgICAgbG9jYXRpb24gPSB2YWxcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGhlYWRlcnNba0hlYWRlcnNMaXN0XS5hcHBlbmQoa2V5LCB2YWwpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhoZWFkZXJzTGlzdClcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgICAgICAgY29uc3QgdmFsID0gaGVhZGVyc0xpc3Rba2V5XVxuICAgICAgICAgICAgICBpZiAoa2V5LnRvTG93ZXJDYXNlKCkgPT09ICdjb250ZW50LWVuY29kaW5nJykge1xuICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM3MjMxI3NlY3Rpb24tMy4xLjIuMVxuICAgICAgICAgICAgICAgIC8vIFwiQWxsIGNvbnRlbnQtY29kaW5nIHZhbHVlcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZS4uLlwiXG4gICAgICAgICAgICAgICAgY29kaW5ncyA9IHZhbC50b0xvd2VyQ2FzZSgpLnNwbGl0KCcsJykubWFwKCh4KSA9PiB4LnRyaW0oKSkucmV2ZXJzZSgpXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5LnRvTG93ZXJDYXNlKCkgPT09ICdsb2NhdGlvbicpIHtcbiAgICAgICAgICAgICAgICBsb2NhdGlvbiA9IHZhbFxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaGVhZGVyc1trSGVhZGVyc0xpc3RdLmFwcGVuZChrZXksIHZhbClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmJvZHkgPSBuZXcgUmVhZGFibGUoeyByZWFkOiByZXN1bWUgfSlcblxuICAgICAgICAgIGNvbnN0IGRlY29kZXJzID0gW11cblxuICAgICAgICAgIGNvbnN0IHdpbGxGb2xsb3cgPSByZXF1ZXN0LnJlZGlyZWN0ID09PSAnZm9sbG93JyAmJlxuICAgICAgICAgICAgbG9jYXRpb24gJiZcbiAgICAgICAgICAgIHJlZGlyZWN0U3RhdHVzU2V0LmhhcyhzdGF0dXMpXG5cbiAgICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvQ29udGVudC1FbmNvZGluZ1xuICAgICAgICAgIGlmIChyZXF1ZXN0Lm1ldGhvZCAhPT0gJ0hFQUQnICYmIHJlcXVlc3QubWV0aG9kICE9PSAnQ09OTkVDVCcgJiYgIW51bGxCb2R5U3RhdHVzLmluY2x1ZGVzKHN0YXR1cykgJiYgIXdpbGxGb2xsb3cpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29kaW5nIG9mIGNvZGluZ3MpIHtcbiAgICAgICAgICAgICAgLy8gaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzkxMTIuaHRtbCNzZWN0aW9uLTcuMlxuICAgICAgICAgICAgICBpZiAoY29kaW5nID09PSAneC1nemlwJyB8fCBjb2RpbmcgPT09ICdnemlwJykge1xuICAgICAgICAgICAgICAgIGRlY29kZXJzLnB1c2goemxpYi5jcmVhdGVHdW56aXAoe1xuICAgICAgICAgICAgICAgICAgLy8gQmUgbGVzcyBzdHJpY3Qgd2hlbiBkZWNvZGluZyBjb21wcmVzc2VkIHJlc3BvbnNlcywgc2luY2Ugc29tZXRpbWVzXG4gICAgICAgICAgICAgICAgICAvLyBzZXJ2ZXJzIHNlbmQgc2xpZ2h0bHkgaW52YWxpZCByZXNwb25zZXMgdGhhdCBhcmUgc3RpbGwgYWNjZXB0ZWRcbiAgICAgICAgICAgICAgICAgIC8vIGJ5IGNvbW1vbiBicm93c2Vycy5cbiAgICAgICAgICAgICAgICAgIC8vIEFsd2F5cyB1c2luZyBaX1NZTkNfRkxVU0ggaXMgd2hhdCBjVVJMIGRvZXMuXG4gICAgICAgICAgICAgICAgICBmbHVzaDogemxpYi5jb25zdGFudHMuWl9TWU5DX0ZMVVNILFxuICAgICAgICAgICAgICAgICAgZmluaXNoRmx1c2g6IHpsaWIuY29uc3RhbnRzLlpfU1lOQ19GTFVTSFxuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvZGluZyA9PT0gJ2RlZmxhdGUnKSB7XG4gICAgICAgICAgICAgICAgZGVjb2RlcnMucHVzaCh6bGliLmNyZWF0ZUluZmxhdGUoKSlcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb2RpbmcgPT09ICdicicpIHtcbiAgICAgICAgICAgICAgICBkZWNvZGVycy5wdXNoKHpsaWIuY3JlYXRlQnJvdGxpRGVjb21wcmVzcygpKVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRlY29kZXJzLmxlbmd0aCA9IDBcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgICBzdGF0dXNUZXh0LFxuICAgICAgICAgICAgaGVhZGVyc0xpc3Q6IGhlYWRlcnNba0hlYWRlcnNMaXN0XSxcbiAgICAgICAgICAgIGJvZHk6IGRlY29kZXJzLmxlbmd0aFxuICAgICAgICAgICAgICA/IHBpcGVsaW5lKHRoaXMuYm9keSwgLi4uZGVjb2RlcnMsICgpID0+IHsgfSlcbiAgICAgICAgICAgICAgOiB0aGlzLmJvZHkub24oJ2Vycm9yJywgKCkgPT4ge30pXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH0sXG5cbiAgICAgICAgb25EYXRhIChjaHVuaykge1xuICAgICAgICAgIGlmIChmZXRjaFBhcmFtcy5jb250cm9sbGVyLmR1bXApIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDEuIElmIG9uZSBvciBtb3JlIGJ5dGVzIGhhdmUgYmVlbiB0cmFuc21pdHRlZCBmcm9tIHJlc3BvbnNl4oCZc1xuICAgICAgICAgIC8vIG1lc3NhZ2UgYm9keSwgdGhlbjpcblxuICAgICAgICAgIC8vICAxLiBMZXQgYnl0ZXMgYmUgdGhlIHRyYW5zbWl0dGVkIGJ5dGVzLlxuICAgICAgICAgIGNvbnN0IGJ5dGVzID0gY2h1bmtcblxuICAgICAgICAgIC8vICAyLiBMZXQgY29kaW5ncyBiZSB0aGUgcmVzdWx0IG9mIGV4dHJhY3RpbmcgaGVhZGVyIGxpc3QgdmFsdWVzXG4gICAgICAgICAgLy8gIGdpdmVuIGBDb250ZW50LUVuY29kaW5nYCBhbmQgcmVzcG9uc2XigJlzIGhlYWRlciBsaXN0LlxuICAgICAgICAgIC8vICBTZWUgcHVsbEFsZ29yaXRobS5cblxuICAgICAgICAgIC8vICAzLiBJbmNyZWFzZSB0aW1pbmdJbmZv4oCZcyBlbmNvZGVkIGJvZHkgc2l6ZSBieSBieXRlc+KAmXMgbGVuZ3RoLlxuICAgICAgICAgIHRpbWluZ0luZm8uZW5jb2RlZEJvZHlTaXplICs9IGJ5dGVzLmJ5dGVMZW5ndGhcblxuICAgICAgICAgIC8vICA0LiBTZWUgcHVsbEFsZ29yaXRobS4uLlxuXG4gICAgICAgICAgcmV0dXJuIHRoaXMuYm9keS5wdXNoKGJ5dGVzKVxuICAgICAgICB9LFxuXG4gICAgICAgIG9uQ29tcGxldGUgKCkge1xuICAgICAgICAgIGlmICh0aGlzLmFib3J0KSB7XG4gICAgICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLm9mZigndGVybWluYXRlZCcsIHRoaXMuYWJvcnQpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5lbmRlZCA9IHRydWVcblxuICAgICAgICAgIHRoaXMuYm9keS5wdXNoKG51bGwpXG4gICAgICAgIH0sXG5cbiAgICAgICAgb25FcnJvciAoZXJyb3IpIHtcbiAgICAgICAgICBpZiAodGhpcy5hYm9ydCkge1xuICAgICAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5vZmYoJ3Rlcm1pbmF0ZWQnLCB0aGlzLmFib3J0KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuYm9keT8uZGVzdHJveShlcnJvcilcblxuICAgICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIudGVybWluYXRlKGVycm9yKVxuXG4gICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICB9LFxuXG4gICAgICAgIG9uVXBncmFkZSAoc3RhdHVzLCBoZWFkZXJzTGlzdCwgc29ja2V0KSB7XG4gICAgICAgICAgaWYgKHN0YXR1cyAhPT0gMTAxKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKVxuXG4gICAgICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBoZWFkZXJzTGlzdC5sZW5ndGg7IG4gKz0gMikge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gaGVhZGVyc0xpc3RbbiArIDBdLnRvU3RyaW5nKCdsYXRpbjEnKVxuICAgICAgICAgICAgY29uc3QgdmFsID0gaGVhZGVyc0xpc3RbbiArIDFdLnRvU3RyaW5nKCdsYXRpbjEnKVxuXG4gICAgICAgICAgICBoZWFkZXJzW2tIZWFkZXJzTGlzdF0uYXBwZW5kKGtleSwgdmFsKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgICAgc3RhdHVzVGV4dDogU1RBVFVTX0NPREVTW3N0YXR1c10sXG4gICAgICAgICAgICBoZWFkZXJzTGlzdDogaGVhZGVyc1trSGVhZGVyc0xpc3RdLFxuICAgICAgICAgICAgc29ja2V0XG4gICAgICAgICAgfSlcblxuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBmZXRjaCxcbiAgRmV0Y2gsXG4gIGZldGNoaW5nLFxuICBmaW5hbGl6ZUFuZFJlcG9ydFRpbWluZ1xufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGtTdGF0ZTogU3ltYm9sKCdGaWxlUmVhZGVyIHN0YXRlJyksXG4gIGtSZXN1bHQ6IFN5bWJvbCgnRmlsZVJlYWRlciByZXN1bHQnKSxcbiAga0Vycm9yOiBTeW1ib2woJ0ZpbGVSZWFkZXIgZXJyb3InKSxcbiAga0xhc3RQcm9ncmVzc0V2ZW50RmlyZWQ6IFN5bWJvbCgnRmlsZVJlYWRlciBsYXN0IHByb2dyZXNzIGV2ZW50IGZpcmVkIHRpbWVzdGFtcCcpLFxuICBrRXZlbnRzOiBTeW1ib2woJ0ZpbGVSZWFkZXIgZXZlbnRzJyksXG4gIGtBYm9ydGVkOiBTeW1ib2woJ0ZpbGVSZWFkZXIgYWJvcnRlZCcpXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvd2ViaWRsJylcblxuY29uc3Qga1N0YXRlID0gU3ltYm9sKCdQcm9ncmVzc0V2ZW50IHN0YXRlJylcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8veGhyLnNwZWMud2hhdHdnLm9yZy8jcHJvZ3Jlc3NldmVudFxuICovXG5jbGFzcyBQcm9ncmVzc0V2ZW50IGV4dGVuZHMgRXZlbnQge1xuICBjb25zdHJ1Y3RvciAodHlwZSwgZXZlbnRJbml0RGljdCA9IHt9KSB7XG4gICAgdHlwZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyh0eXBlKVxuICAgIGV2ZW50SW5pdERpY3QgPSB3ZWJpZGwuY29udmVydGVycy5Qcm9ncmVzc0V2ZW50SW5pdChldmVudEluaXREaWN0ID8/IHt9KVxuXG4gICAgc3VwZXIodHlwZSwgZXZlbnRJbml0RGljdClcblxuICAgIHRoaXNba1N0YXRlXSA9IHtcbiAgICAgIGxlbmd0aENvbXB1dGFibGU6IGV2ZW50SW5pdERpY3QubGVuZ3RoQ29tcHV0YWJsZSxcbiAgICAgIGxvYWRlZDogZXZlbnRJbml0RGljdC5sb2FkZWQsXG4gICAgICB0b3RhbDogZXZlbnRJbml0RGljdC50b3RhbFxuICAgIH1cbiAgfVxuXG4gIGdldCBsZW5ndGhDb21wdXRhYmxlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBQcm9ncmVzc0V2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5sZW5ndGhDb21wdXRhYmxlXG4gIH1cblxuICBnZXQgbG9hZGVkICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBQcm9ncmVzc0V2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5sb2FkZWRcbiAgfVxuXG4gIGdldCB0b3RhbCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUHJvZ3Jlc3NFdmVudClcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0udG90YWxcbiAgfVxufVxuXG53ZWJpZGwuY29udmVydGVycy5Qcm9ncmVzc0V2ZW50SW5pdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGtleTogJ2xlbmd0aENvbXB1dGFibGUnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdsb2FkZWQnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIGxvbmcgbG9uZyddLFxuICAgIGRlZmF1bHRWYWx1ZTogMFxuICB9LFxuICB7XG4gICAga2V5OiAndG90YWwnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIGxvbmcgbG9uZyddLFxuICAgIGRlZmF1bHRWYWx1ZTogMFxuICB9LFxuICB7XG4gICAga2V5OiAnYnViYmxlcycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2VcbiAgfSxcbiAge1xuICAgIGtleTogJ2NhbmNlbGFibGUnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjb21wb3NlZCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2VcbiAgfVxuXSlcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFByb2dyZXNzRXZlbnRcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbi8qKlxuICogQHNlZSBodHRwczovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1lbmNvZGluZy1nZXRcbiAqIEBwYXJhbSB7c3RyaW5nfHVuZGVmaW5lZH0gbGFiZWxcbiAqL1xuZnVuY3Rpb24gZ2V0RW5jb2RpbmcgKGxhYmVsKSB7XG4gIGlmICghbGFiZWwpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICAvLyAxLiBSZW1vdmUgYW55IGxlYWRpbmcgYW5kIHRyYWlsaW5nIEFTQ0lJIHdoaXRlc3BhY2UgZnJvbSBsYWJlbC5cbiAgLy8gMi4gSWYgbGFiZWwgaXMgYW4gQVNDSUkgY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBmb3IgYW55IG9mIHRoZVxuICAvLyAgICBsYWJlbHMgbGlzdGVkIGluIHRoZSB0YWJsZSBiZWxvdywgdGhlbiByZXR1cm4gdGhlXG4gIC8vICAgIGNvcnJlc3BvbmRpbmcgZW5jb2Rpbmc7IG90aGVyd2lzZSByZXR1cm4gZmFpbHVyZS5cbiAgc3dpdGNoIChsYWJlbC50cmltKCkudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgJ3VuaWNvZGUtMS0xLXV0Zi04JzpcbiAgICBjYXNlICd1bmljb2RlMTF1dGY4JzpcbiAgICBjYXNlICd1bmljb2RlMjB1dGY4JzpcbiAgICBjYXNlICd1dGYtOCc6XG4gICAgY2FzZSAndXRmOCc6XG4gICAgY2FzZSAneC11bmljb2RlMjB1dGY4JzpcbiAgICAgIHJldHVybiAnVVRGLTgnXG4gICAgY2FzZSAnODY2JzpcbiAgICBjYXNlICdjcDg2Nic6XG4gICAgY2FzZSAnY3NpYm04NjYnOlxuICAgIGNhc2UgJ2libTg2Nic6XG4gICAgICByZXR1cm4gJ0lCTTg2NidcbiAgICBjYXNlICdjc2lzb2xhdGluMic6XG4gICAgY2FzZSAnaXNvLTg4NTktMic6XG4gICAgY2FzZSAnaXNvLWlyLTEwMSc6XG4gICAgY2FzZSAnaXNvODg1OS0yJzpcbiAgICBjYXNlICdpc284ODU5Mic6XG4gICAgY2FzZSAnaXNvXzg4NTktMic6XG4gICAgY2FzZSAnaXNvXzg4NTktMjoxOTg3JzpcbiAgICBjYXNlICdsMic6XG4gICAgY2FzZSAnbGF0aW4yJzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktMidcbiAgICBjYXNlICdjc2lzb2xhdGluMyc6XG4gICAgY2FzZSAnaXNvLTg4NTktMyc6XG4gICAgY2FzZSAnaXNvLWlyLTEwOSc6XG4gICAgY2FzZSAnaXNvODg1OS0zJzpcbiAgICBjYXNlICdpc284ODU5Myc6XG4gICAgY2FzZSAnaXNvXzg4NTktMyc6XG4gICAgY2FzZSAnaXNvXzg4NTktMzoxOTg4JzpcbiAgICBjYXNlICdsMyc6XG4gICAgY2FzZSAnbGF0aW4zJzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktMydcbiAgICBjYXNlICdjc2lzb2xhdGluNCc6XG4gICAgY2FzZSAnaXNvLTg4NTktNCc6XG4gICAgY2FzZSAnaXNvLWlyLTExMCc6XG4gICAgY2FzZSAnaXNvODg1OS00JzpcbiAgICBjYXNlICdpc284ODU5NCc6XG4gICAgY2FzZSAnaXNvXzg4NTktNCc6XG4gICAgY2FzZSAnaXNvXzg4NTktNDoxOTg4JzpcbiAgICBjYXNlICdsNCc6XG4gICAgY2FzZSAnbGF0aW40JzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktNCdcbiAgICBjYXNlICdjc2lzb2xhdGluY3lyaWxsaWMnOlxuICAgIGNhc2UgJ2N5cmlsbGljJzpcbiAgICBjYXNlICdpc28tODg1OS01JzpcbiAgICBjYXNlICdpc28taXItMTQ0JzpcbiAgICBjYXNlICdpc284ODU5LTUnOlxuICAgIGNhc2UgJ2lzbzg4NTk1JzpcbiAgICBjYXNlICdpc29fODg1OS01JzpcbiAgICBjYXNlICdpc29fODg1OS01OjE5ODgnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS01J1xuICAgIGNhc2UgJ2FyYWJpYyc6XG4gICAgY2FzZSAnYXNtby03MDgnOlxuICAgIGNhc2UgJ2NzaXNvODg1OTZlJzpcbiAgICBjYXNlICdjc2lzbzg4NTk2aSc6XG4gICAgY2FzZSAnY3Npc29sYXRpbmFyYWJpYyc6XG4gICAgY2FzZSAnZWNtYS0xMTQnOlxuICAgIGNhc2UgJ2lzby04ODU5LTYnOlxuICAgIGNhc2UgJ2lzby04ODU5LTYtZSc6XG4gICAgY2FzZSAnaXNvLTg4NTktNi1pJzpcbiAgICBjYXNlICdpc28taXItMTI3JzpcbiAgICBjYXNlICdpc284ODU5LTYnOlxuICAgIGNhc2UgJ2lzbzg4NTk2JzpcbiAgICBjYXNlICdpc29fODg1OS02JzpcbiAgICBjYXNlICdpc29fODg1OS02OjE5ODcnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS02J1xuICAgIGNhc2UgJ2NzaXNvbGF0aW5ncmVlayc6XG4gICAgY2FzZSAnZWNtYS0xMTgnOlxuICAgIGNhc2UgJ2Vsb3RfOTI4JzpcbiAgICBjYXNlICdncmVlayc6XG4gICAgY2FzZSAnZ3JlZWs4JzpcbiAgICBjYXNlICdpc28tODg1OS03JzpcbiAgICBjYXNlICdpc28taXItMTI2JzpcbiAgICBjYXNlICdpc284ODU5LTcnOlxuICAgIGNhc2UgJ2lzbzg4NTk3JzpcbiAgICBjYXNlICdpc29fODg1OS03JzpcbiAgICBjYXNlICdpc29fODg1OS03OjE5ODcnOlxuICAgIGNhc2UgJ3N1bl9ldV9ncmVlayc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTcnXG4gICAgY2FzZSAnY3Npc284ODU5OGUnOlxuICAgIGNhc2UgJ2NzaXNvbGF0aW5oZWJyZXcnOlxuICAgIGNhc2UgJ2hlYnJldyc6XG4gICAgY2FzZSAnaXNvLTg4NTktOCc6XG4gICAgY2FzZSAnaXNvLTg4NTktOC1lJzpcbiAgICBjYXNlICdpc28taXItMTM4JzpcbiAgICBjYXNlICdpc284ODU5LTgnOlxuICAgIGNhc2UgJ2lzbzg4NTk4JzpcbiAgICBjYXNlICdpc29fODg1OS04JzpcbiAgICBjYXNlICdpc29fODg1OS04OjE5ODgnOlxuICAgIGNhc2UgJ3Zpc3VhbCc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTgnXG4gICAgY2FzZSAnY3Npc284ODU5OGknOlxuICAgIGNhc2UgJ2lzby04ODU5LTgtaSc6XG4gICAgY2FzZSAnbG9naWNhbCc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTgtSSdcbiAgICBjYXNlICdjc2lzb2xhdGluNic6XG4gICAgY2FzZSAnaXNvLTg4NTktMTAnOlxuICAgIGNhc2UgJ2lzby1pci0xNTcnOlxuICAgIGNhc2UgJ2lzbzg4NTktMTAnOlxuICAgIGNhc2UgJ2lzbzg4NTkxMCc6XG4gICAgY2FzZSAnbDYnOlxuICAgIGNhc2UgJ2xhdGluNic6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTEwJ1xuICAgIGNhc2UgJ2lzby04ODU5LTEzJzpcbiAgICBjYXNlICdpc284ODU5LTEzJzpcbiAgICBjYXNlICdpc284ODU5MTMnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS0xMydcbiAgICBjYXNlICdpc28tODg1OS0xNCc6XG4gICAgY2FzZSAnaXNvODg1OS0xNCc6XG4gICAgY2FzZSAnaXNvODg1OTE0JzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktMTQnXG4gICAgY2FzZSAnY3Npc29sYXRpbjknOlxuICAgIGNhc2UgJ2lzby04ODU5LTE1JzpcbiAgICBjYXNlICdpc284ODU5LTE1JzpcbiAgICBjYXNlICdpc284ODU5MTUnOlxuICAgIGNhc2UgJ2lzb184ODU5LTE1JzpcbiAgICBjYXNlICdsOSc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTE1J1xuICAgIGNhc2UgJ2lzby04ODU5LTE2JzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktMTYnXG4gICAgY2FzZSAnY3Nrb2k4cic6XG4gICAgY2FzZSAna29pJzpcbiAgICBjYXNlICdrb2k4JzpcbiAgICBjYXNlICdrb2k4LXInOlxuICAgIGNhc2UgJ2tvaThfcic6XG4gICAgICByZXR1cm4gJ0tPSTgtUidcbiAgICBjYXNlICdrb2k4LXJ1JzpcbiAgICBjYXNlICdrb2k4LXUnOlxuICAgICAgcmV0dXJuICdLT0k4LVUnXG4gICAgY2FzZSAnY3NtYWNpbnRvc2gnOlxuICAgIGNhc2UgJ21hYyc6XG4gICAgY2FzZSAnbWFjaW50b3NoJzpcbiAgICBjYXNlICd4LW1hYy1yb21hbic6XG4gICAgICByZXR1cm4gJ21hY2ludG9zaCdcbiAgICBjYXNlICdpc28tODg1OS0xMSc6XG4gICAgY2FzZSAnaXNvODg1OS0xMSc6XG4gICAgY2FzZSAnaXNvODg1OTExJzpcbiAgICBjYXNlICd0aXMtNjIwJzpcbiAgICBjYXNlICd3aW5kb3dzLTg3NCc6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtODc0J1xuICAgIGNhc2UgJ2NwMTI1MCc6XG4gICAgY2FzZSAnd2luZG93cy0xMjUwJzpcbiAgICBjYXNlICd4LWNwMTI1MCc6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtMTI1MCdcbiAgICBjYXNlICdjcDEyNTEnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMTI1MSc6XG4gICAgY2FzZSAneC1jcDEyNTEnOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTEyNTEnXG4gICAgY2FzZSAnYW5zaV94My40LTE5NjgnOlxuICAgIGNhc2UgJ2FzY2lpJzpcbiAgICBjYXNlICdjcDEyNTInOlxuICAgIGNhc2UgJ2NwODE5JzpcbiAgICBjYXNlICdjc2lzb2xhdGluMSc6XG4gICAgY2FzZSAnaWJtODE5JzpcbiAgICBjYXNlICdpc28tODg1OS0xJzpcbiAgICBjYXNlICdpc28taXItMTAwJzpcbiAgICBjYXNlICdpc284ODU5LTEnOlxuICAgIGNhc2UgJ2lzbzg4NTkxJzpcbiAgICBjYXNlICdpc29fODg1OS0xJzpcbiAgICBjYXNlICdpc29fODg1OS0xOjE5ODcnOlxuICAgIGNhc2UgJ2wxJzpcbiAgICBjYXNlICdsYXRpbjEnOlxuICAgIGNhc2UgJ3VzLWFzY2lpJzpcbiAgICBjYXNlICd3aW5kb3dzLTEyNTInOlxuICAgIGNhc2UgJ3gtY3AxMjUyJzpcbiAgICAgIHJldHVybiAnd2luZG93cy0xMjUyJ1xuICAgIGNhc2UgJ2NwMTI1Myc6XG4gICAgY2FzZSAnd2luZG93cy0xMjUzJzpcbiAgICBjYXNlICd4LWNwMTI1Myc6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtMTI1MydcbiAgICBjYXNlICdjcDEyNTQnOlxuICAgIGNhc2UgJ2NzaXNvbGF0aW41JzpcbiAgICBjYXNlICdpc28tODg1OS05JzpcbiAgICBjYXNlICdpc28taXItMTQ4JzpcbiAgICBjYXNlICdpc284ODU5LTknOlxuICAgIGNhc2UgJ2lzbzg4NTk5JzpcbiAgICBjYXNlICdpc29fODg1OS05JzpcbiAgICBjYXNlICdpc29fODg1OS05OjE5ODknOlxuICAgIGNhc2UgJ2w1JzpcbiAgICBjYXNlICdsYXRpbjUnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMTI1NCc6XG4gICAgY2FzZSAneC1jcDEyNTQnOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTEyNTQnXG4gICAgY2FzZSAnY3AxMjU1JzpcbiAgICBjYXNlICd3aW5kb3dzLTEyNTUnOlxuICAgIGNhc2UgJ3gtY3AxMjU1JzpcbiAgICAgIHJldHVybiAnd2luZG93cy0xMjU1J1xuICAgIGNhc2UgJ2NwMTI1Nic6XG4gICAgY2FzZSAnd2luZG93cy0xMjU2JzpcbiAgICBjYXNlICd4LWNwMTI1Nic6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtMTI1NidcbiAgICBjYXNlICdjcDEyNTcnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMTI1Nyc6XG4gICAgY2FzZSAneC1jcDEyNTcnOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTEyNTcnXG4gICAgY2FzZSAnY3AxMjU4JzpcbiAgICBjYXNlICd3aW5kb3dzLTEyNTgnOlxuICAgIGNhc2UgJ3gtY3AxMjU4JzpcbiAgICAgIHJldHVybiAnd2luZG93cy0xMjU4J1xuICAgIGNhc2UgJ3gtbWFjLWN5cmlsbGljJzpcbiAgICBjYXNlICd4LW1hYy11a3JhaW5pYW4nOlxuICAgICAgcmV0dXJuICd4LW1hYy1jeXJpbGxpYydcbiAgICBjYXNlICdjaGluZXNlJzpcbiAgICBjYXNlICdjc2diMjMxMic6XG4gICAgY2FzZSAnY3Npc281OGdiMjMxMjgwJzpcbiAgICBjYXNlICdnYjIzMTInOlxuICAgIGNhc2UgJ2diXzIzMTInOlxuICAgIGNhc2UgJ2diXzIzMTItODAnOlxuICAgIGNhc2UgJ2diayc6XG4gICAgY2FzZSAnaXNvLWlyLTU4JzpcbiAgICBjYXNlICd4LWdiayc6XG4gICAgICByZXR1cm4gJ0dCSydcbiAgICBjYXNlICdnYjE4MDMwJzpcbiAgICAgIHJldHVybiAnZ2IxODAzMCdcbiAgICBjYXNlICdiaWc1JzpcbiAgICBjYXNlICdiaWc1LWhrc2NzJzpcbiAgICBjYXNlICdjbi1iaWc1JzpcbiAgICBjYXNlICdjc2JpZzUnOlxuICAgIGNhc2UgJ3gteC1iaWc1JzpcbiAgICAgIHJldHVybiAnQmlnNSdcbiAgICBjYXNlICdjc2V1Y3BrZGZtdGphcGFuZXNlJzpcbiAgICBjYXNlICdldWMtanAnOlxuICAgIGNhc2UgJ3gtZXVjLWpwJzpcbiAgICAgIHJldHVybiAnRVVDLUpQJ1xuICAgIGNhc2UgJ2NzaXNvMjAyMmpwJzpcbiAgICBjYXNlICdpc28tMjAyMi1qcCc6XG4gICAgICByZXR1cm4gJ0lTTy0yMDIyLUpQJ1xuICAgIGNhc2UgJ2Nzc2hpZnRqaXMnOlxuICAgIGNhc2UgJ21zOTMyJzpcbiAgICBjYXNlICdtc19rYW5qaSc6XG4gICAgY2FzZSAnc2hpZnQtamlzJzpcbiAgICBjYXNlICdzaGlmdF9qaXMnOlxuICAgIGNhc2UgJ3NqaXMnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMzFqJzpcbiAgICBjYXNlICd4LXNqaXMnOlxuICAgICAgcmV0dXJuICdTaGlmdF9KSVMnXG4gICAgY2FzZSAnY3NldWNrcic6XG4gICAgY2FzZSAnY3Nrc2M1NjAxMTk4Nyc6XG4gICAgY2FzZSAnZXVjLWtyJzpcbiAgICBjYXNlICdpc28taXItMTQ5JzpcbiAgICBjYXNlICdrb3JlYW4nOlxuICAgIGNhc2UgJ2tzX2NfNTYwMS0xOTg3JzpcbiAgICBjYXNlICdrc19jXzU2MDEtMTk4OSc6XG4gICAgY2FzZSAna3NjNTYwMSc6XG4gICAgY2FzZSAna3NjXzU2MDEnOlxuICAgIGNhc2UgJ3dpbmRvd3MtOTQ5JzpcbiAgICAgIHJldHVybiAnRVVDLUtSJ1xuICAgIGNhc2UgJ2NzaXNvMjAyMmtyJzpcbiAgICBjYXNlICdoei1nYi0yMzEyJzpcbiAgICBjYXNlICdpc28tMjAyMi1jbic6XG4gICAgY2FzZSAnaXNvLTIwMjItY24tZXh0JzpcbiAgICBjYXNlICdpc28tMjAyMi1rcic6XG4gICAgY2FzZSAncmVwbGFjZW1lbnQnOlxuICAgICAgcmV0dXJuICdyZXBsYWNlbWVudCdcbiAgICBjYXNlICd1bmljb2RlZmZmZSc6XG4gICAgY2FzZSAndXRmLTE2YmUnOlxuICAgICAgcmV0dXJuICdVVEYtMTZCRSdcbiAgICBjYXNlICdjc3VuaWNvZGUnOlxuICAgIGNhc2UgJ2lzby0xMDY0Ni11Y3MtMic6XG4gICAgY2FzZSAndWNzLTInOlxuICAgIGNhc2UgJ3VuaWNvZGUnOlxuICAgIGNhc2UgJ3VuaWNvZGVmZWZmJzpcbiAgICBjYXNlICd1dGYtMTYnOlxuICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgIHJldHVybiAnVVRGLTE2TEUnXG4gICAgY2FzZSAneC11c2VyLWRlZmluZWQnOlxuICAgICAgcmV0dXJuICd4LXVzZXItZGVmaW5lZCdcbiAgICBkZWZhdWx0OiByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldEVuY29kaW5nXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIGtTdGF0ZSxcbiAga0Vycm9yLFxuICBrUmVzdWx0LFxuICBrQWJvcnRlZCxcbiAga0xhc3RQcm9ncmVzc0V2ZW50RmlyZWRcbn0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBQcm9ncmVzc0V2ZW50IH0gPSByZXF1aXJlKCcuL3Byb2dyZXNzZXZlbnQnKVxuY29uc3QgeyBnZXRFbmNvZGluZyB9ID0gcmVxdWlyZSgnLi9lbmNvZGluZycpXG5jb25zdCB7IERPTUV4Y2VwdGlvbiB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvY29uc3RhbnRzJylcbmNvbnN0IHsgc2VyaWFsaXplQU1pbWVUeXBlLCBwYXJzZU1JTUVUeXBlIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9kYXRhVVJMJylcbmNvbnN0IHsgdHlwZXMgfSA9IHJlcXVpcmUoJ3V0aWwnKVxuY29uc3QgeyBTdHJpbmdEZWNvZGVyIH0gPSByZXF1aXJlKCdzdHJpbmdfZGVjb2RlcicpXG5jb25zdCB7IGJ0b2EgfSA9IHJlcXVpcmUoJ2J1ZmZlcicpXG5cbi8qKiBAdHlwZSB7UHJvcGVydHlEZXNjcmlwdG9yfSAqL1xuY29uc3Qgc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyA9IHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgd3JpdGFibGU6IGZhbHNlLFxuICBjb25maWd1cmFibGU6IGZhbHNlXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jcmVhZE9wZXJhdGlvblxuICogQHBhcmFtIHtpbXBvcnQoJy4vZmlsZXJlYWRlcicpLkZpbGVSZWFkZXJ9IGZyXG4gKiBAcGFyYW0ge2ltcG9ydCgnYnVmZmVyJykuQmxvYn0gYmxvYlxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nP30gZW5jb2RpbmdOYW1lXG4gKi9cbmZ1bmN0aW9uIHJlYWRPcGVyYXRpb24gKGZyLCBibG9iLCB0eXBlLCBlbmNvZGluZ05hbWUpIHtcbiAgLy8gMS4gSWYgZnLigJlzIHN0YXRlIGlzIFwibG9hZGluZ1wiLCB0aHJvdyBhbiBJbnZhbGlkU3RhdGVFcnJvclxuICAvLyAgICBET01FeGNlcHRpb24uXG4gIGlmIChmcltrU3RhdGVdID09PSAnbG9hZGluZycpIHtcbiAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCdJbnZhbGlkIHN0YXRlJywgJ0ludmFsaWRTdGF0ZUVycm9yJylcbiAgfVxuXG4gIC8vIDIuIFNldCBmcuKAmXMgc3RhdGUgdG8gXCJsb2FkaW5nXCIuXG4gIGZyW2tTdGF0ZV0gPSAnbG9hZGluZydcblxuICAvLyAzLiBTZXQgZnLigJlzIHJlc3VsdCB0byBudWxsLlxuICBmcltrUmVzdWx0XSA9IG51bGxcblxuICAvLyA0LiBTZXQgZnLigJlzIGVycm9yIHRvIG51bGwuXG4gIGZyW2tFcnJvcl0gPSBudWxsXG5cbiAgLy8gNS4gTGV0IHN0cmVhbSBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgZ2V0IHN0cmVhbSBvbiBibG9iLlxuICAvKiogQHR5cGUge2ltcG9ydCgnc3RyZWFtL3dlYicpLlJlYWRhYmxlU3RyZWFtfSAqL1xuICBjb25zdCBzdHJlYW0gPSBibG9iLnN0cmVhbSgpXG5cbiAgLy8gNi4gTGV0IHJlYWRlciBiZSB0aGUgcmVzdWx0IG9mIGdldHRpbmcgYSByZWFkZXIgZnJvbSBzdHJlYW0uXG4gIGNvbnN0IHJlYWRlciA9IHN0cmVhbS5nZXRSZWFkZXIoKVxuXG4gIC8vIDcuIExldCBieXRlcyBiZSBhbiBlbXB0eSBieXRlIHNlcXVlbmNlLlxuICAvKiogQHR5cGUge1VpbnQ4QXJyYXlbXX0gKi9cbiAgY29uc3QgYnl0ZXMgPSBbXVxuXG4gIC8vIDguIExldCBjaHVua1Byb21pc2UgYmUgdGhlIHJlc3VsdCBvZiByZWFkaW5nIGEgY2h1bmsgZnJvbVxuICAvLyAgICBzdHJlYW0gd2l0aCByZWFkZXIuXG4gIGxldCBjaHVua1Byb21pc2UgPSByZWFkZXIucmVhZCgpXG5cbiAgLy8gOS4gTGV0IGlzRmlyc3RDaHVuayBiZSB0cnVlLlxuICBsZXQgaXNGaXJzdENodW5rID0gdHJ1ZVxuXG4gIC8vIDEwLiBJbiBwYXJhbGxlbCwgd2hpbGUgdHJ1ZTpcbiAgLy8gTm90ZTogXCJJbiBwYXJhbGxlbFwiIGp1c3QgbWVhbnMgbm9uLWJsb2NraW5nXG4gIC8vIE5vdGUgMjogcmVhZE9wZXJhdGlvbiBpdHNlbGYgY2Fubm90IGJlIGFzeW5jIGFzIGRvdWJsZVxuICAvLyByZWFkaW5nIHRoZSBib2R5IHdvdWxkIHRoZW4gcmVqZWN0IHRoZSBwcm9taXNlLCBpbnN0ZWFkXG4gIC8vIG9mIHRocm93aW5nIGFuIGVycm9yLlxuICA7KGFzeW5jICgpID0+IHtcbiAgICB3aGlsZSAoIWZyW2tBYm9ydGVkXSkge1xuICAgICAgLy8gMS4gV2FpdCBmb3IgY2h1bmtQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZCBvciByZWplY3RlZC5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IGNodW5rUHJvbWlzZVxuXG4gICAgICAgIC8vIDIuIElmIGNodW5rUHJvbWlzZSBpcyBmdWxmaWxsZWQsIGFuZCBpc0ZpcnN0Q2h1bmsgaXNcbiAgICAgICAgLy8gICAgdHJ1ZSwgcXVldWUgYSB0YXNrIHRvIGZpcmUgYSBwcm9ncmVzcyBldmVudCBjYWxsZWRcbiAgICAgICAgLy8gICAgbG9hZHN0YXJ0IGF0IGZyLlxuICAgICAgICBpZiAoaXNGaXJzdENodW5rICYmICFmcltrQWJvcnRlZF0pIHtcbiAgICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgICAgICBmaXJlQVByb2dyZXNzRXZlbnQoJ2xvYWRzdGFydCcsIGZyKVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgICAgICAvLyAzLiBTZXQgaXNGaXJzdENodW5rIHRvIGZhbHNlLlxuICAgICAgICBpc0ZpcnN0Q2h1bmsgPSBmYWxzZVxuXG4gICAgICAgIC8vIDQuIElmIGNodW5rUHJvbWlzZSBpcyBmdWxmaWxsZWQgd2l0aCBhbiBvYmplY3Qgd2hvc2VcbiAgICAgICAgLy8gICAgZG9uZSBwcm9wZXJ0eSBpcyBmYWxzZSBhbmQgd2hvc2UgdmFsdWUgcHJvcGVydHkgaXNcbiAgICAgICAgLy8gICAgYSBVaW50OEFycmF5IG9iamVjdCwgcnVuIHRoZXNlIHN0ZXBzOlxuICAgICAgICBpZiAoIWRvbmUgJiYgdHlwZXMuaXNVaW50OEFycmF5KHZhbHVlKSkge1xuICAgICAgICAgIC8vIDEuIExldCBicyBiZSB0aGUgYnl0ZSBzZXF1ZW5jZSByZXByZXNlbnRlZCBieSB0aGVcbiAgICAgICAgICAvLyAgICBVaW50OEFycmF5IG9iamVjdC5cblxuICAgICAgICAgIC8vIDIuIEFwcGVuZCBicyB0byBieXRlcy5cbiAgICAgICAgICBieXRlcy5wdXNoKHZhbHVlKVxuXG4gICAgICAgICAgLy8gMy4gSWYgcm91Z2hseSA1MG1zIGhhdmUgcGFzc2VkIHNpbmNlIHRoZXNlIHN0ZXBzXG4gICAgICAgICAgLy8gICAgd2VyZSBsYXN0IGludm9rZWQsIHF1ZXVlIGEgdGFzayB0byBmaXJlIGFcbiAgICAgICAgICAvLyAgICBwcm9ncmVzcyBldmVudCBjYWxsZWQgcHJvZ3Jlc3MgYXQgZnIuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgKFxuICAgICAgICAgICAgICBmcltrTGFzdFByb2dyZXNzRXZlbnRGaXJlZF0gPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICBEYXRlLm5vdygpIC0gZnJba0xhc3RQcm9ncmVzc0V2ZW50RmlyZWRdID49IDUwXG4gICAgICAgICAgICApICYmXG4gICAgICAgICAgICAhZnJba0Fib3J0ZWRdXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBmcltrTGFzdFByb2dyZXNzRXZlbnRGaXJlZF0gPSBEYXRlLm5vdygpXG4gICAgICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgICAgICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgncHJvZ3Jlc3MnLCBmcilcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gNC4gU2V0IGNodW5rUHJvbWlzZSB0byB0aGUgcmVzdWx0IG9mIHJlYWRpbmcgYVxuICAgICAgICAgIC8vICAgIGNodW5rIGZyb20gc3RyZWFtIHdpdGggcmVhZGVyLlxuICAgICAgICAgIGNodW5rUHJvbWlzZSA9IHJlYWRlci5yZWFkKClcbiAgICAgICAgfSBlbHNlIGlmIChkb25lKSB7XG4gICAgICAgICAgLy8gNS4gT3RoZXJ3aXNlLCBpZiBjaHVua1Byb21pc2UgaXMgZnVsZmlsbGVkIHdpdGggYW5cbiAgICAgICAgICAvLyAgICBvYmplY3Qgd2hvc2UgZG9uZSBwcm9wZXJ0eSBpcyB0cnVlLCBxdWV1ZSBhIHRhc2tcbiAgICAgICAgICAvLyAgICB0byBydW4gdGhlIGZvbGxvd2luZyBzdGVwcyBhbmQgYWJvcnQgdGhpcyBhbGdvcml0aG06XG4gICAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICAgICAgLy8gMS4gU2V0IGZy4oCZcyBzdGF0ZSB0byBcImRvbmVcIi5cbiAgICAgICAgICAgIGZyW2tTdGF0ZV0gPSAnZG9uZSdcblxuICAgICAgICAgICAgLy8gMi4gTGV0IHJlc3VsdCBiZSB0aGUgcmVzdWx0IG9mIHBhY2thZ2UgZGF0YSBnaXZlblxuICAgICAgICAgICAgLy8gICAgYnl0ZXMsIHR5cGUsIGJsb2LigJlzIHR5cGUsIGFuZCBlbmNvZGluZ05hbWUuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYWNrYWdlRGF0YShieXRlcywgdHlwZSwgYmxvYi50eXBlLCBlbmNvZGluZ05hbWUpXG5cbiAgICAgICAgICAgICAgLy8gNC4gRWxzZTpcblxuICAgICAgICAgICAgICBpZiAoZnJba0Fib3J0ZWRdKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAvLyAxLiBTZXQgZnLigJlzIHJlc3VsdCB0byByZXN1bHQuXG4gICAgICAgICAgICAgIGZyW2tSZXN1bHRdID0gcmVzdWx0XG5cbiAgICAgICAgICAgICAgLy8gMi4gRmlyZSBhIHByb2dyZXNzIGV2ZW50IGNhbGxlZCBsb2FkIGF0IHRoZSBmci5cbiAgICAgICAgICAgICAgZmlyZUFQcm9ncmVzc0V2ZW50KCdsb2FkJywgZnIpXG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAvLyAzLiBJZiBwYWNrYWdlIGRhdGEgdGhyZXcgYW4gZXhjZXB0aW9uIGVycm9yOlxuXG4gICAgICAgICAgICAgIC8vIDEuIFNldCBmcuKAmXMgZXJyb3IgdG8gZXJyb3IuXG4gICAgICAgICAgICAgIGZyW2tFcnJvcl0gPSBlcnJvclxuXG4gICAgICAgICAgICAgIC8vIDIuIEZpcmUgYSBwcm9ncmVzcyBldmVudCBjYWxsZWQgZXJyb3IgYXQgZnIuXG4gICAgICAgICAgICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgnZXJyb3InLCBmcilcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gNS4gSWYgZnLigJlzIHN0YXRlIGlzIG5vdCBcImxvYWRpbmdcIiwgZmlyZSBhIHByb2dyZXNzXG4gICAgICAgICAgICAvLyAgICBldmVudCBjYWxsZWQgbG9hZGVuZCBhdCB0aGUgZnIuXG4gICAgICAgICAgICBpZiAoZnJba1N0YXRlXSAhPT0gJ2xvYWRpbmcnKSB7XG4gICAgICAgICAgICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgnbG9hZGVuZCcsIGZyKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoZnJba0Fib3J0ZWRdKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICAvLyA2LiBPdGhlcndpc2UsIGlmIGNodW5rUHJvbWlzZSBpcyByZWplY3RlZCB3aXRoIGFuXG4gICAgICAgIC8vICAgIGVycm9yIGVycm9yLCBxdWV1ZSBhIHRhc2sgdG8gcnVuIHRoZSBmb2xsb3dpbmdcbiAgICAgICAgLy8gICAgc3RlcHMgYW5kIGFib3J0IHRoaXMgYWxnb3JpdGhtOlxuICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgICAgLy8gMS4gU2V0IGZy4oCZcyBzdGF0ZSB0byBcImRvbmVcIi5cbiAgICAgICAgICBmcltrU3RhdGVdID0gJ2RvbmUnXG5cbiAgICAgICAgICAvLyAyLiBTZXQgZnLigJlzIGVycm9yIHRvIGVycm9yLlxuICAgICAgICAgIGZyW2tFcnJvcl0gPSBlcnJvclxuXG4gICAgICAgICAgLy8gMy4gRmlyZSBhIHByb2dyZXNzIGV2ZW50IGNhbGxlZCBlcnJvciBhdCBmci5cbiAgICAgICAgICBmaXJlQVByb2dyZXNzRXZlbnQoJ2Vycm9yJywgZnIpXG5cbiAgICAgICAgICAvLyA0LiBJZiBmcuKAmXMgc3RhdGUgaXMgbm90IFwibG9hZGluZ1wiLCBmaXJlIGEgcHJvZ3Jlc3NcbiAgICAgICAgICAvLyAgICBldmVudCBjYWxsZWQgbG9hZGVuZCBhdCBmci5cbiAgICAgICAgICBpZiAoZnJba1N0YXRlXSAhPT0gJ2xvYWRpbmcnKSB7XG4gICAgICAgICAgICBmaXJlQVByb2dyZXNzRXZlbnQoJ2xvYWRlbmQnLCBmcilcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG5cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gIH0pKClcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNmaXJlLWEtcHJvZ3Jlc3MtZXZlbnRcbiAqIEBzZWUgaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWV2ZW50LWZpcmVcbiAqIEBwYXJhbSB7c3RyaW5nfSBlIFRoZSBuYW1lIG9mIHRoZSBldmVudFxuICogQHBhcmFtIHtpbXBvcnQoJy4vZmlsZXJlYWRlcicpLkZpbGVSZWFkZXJ9IHJlYWRlclxuICovXG5mdW5jdGlvbiBmaXJlQVByb2dyZXNzRXZlbnQgKGUsIHJlYWRlcikge1xuICAvLyBUaGUgcHJvZ3Jlc3MgZXZlbnQgZSBkb2VzIG5vdCBidWJibGUuIGUuYnViYmxlcyBtdXN0IGJlIGZhbHNlXG4gIC8vIFRoZSBwcm9ncmVzcyBldmVudCBlIGlzIE5PVCBjYW5jZWxhYmxlLiBlLmNhbmNlbGFibGUgbXVzdCBiZSBmYWxzZVxuICBjb25zdCBldmVudCA9IG5ldyBQcm9ncmVzc0V2ZW50KGUsIHtcbiAgICBidWJibGVzOiBmYWxzZSxcbiAgICBjYW5jZWxhYmxlOiBmYWxzZVxuICB9KVxuXG4gIHJlYWRlci5kaXNwYXRjaEV2ZW50KGV2ZW50KVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2Jsb2ItcGFja2FnZS1kYXRhXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXlbXX0gYnl0ZXNcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge3N0cmluZz99IG1pbWVUeXBlXG4gKiBAcGFyYW0ge3N0cmluZz99IGVuY29kaW5nTmFtZVxuICovXG5mdW5jdGlvbiBwYWNrYWdlRGF0YSAoYnl0ZXMsIHR5cGUsIG1pbWVUeXBlLCBlbmNvZGluZ05hbWUpIHtcbiAgLy8gMS4gQSBCbG9iIGhhcyBhbiBhc3NvY2lhdGVkIHBhY2thZ2UgZGF0YSBhbGdvcml0aG0sIGdpdmVuXG4gIC8vICAgIGJ5dGVzLCBhIHR5cGUsIGEgb3B0aW9uYWwgbWltZVR5cGUsIGFuZCBhIG9wdGlvbmFsXG4gIC8vICAgIGVuY29kaW5nTmFtZSwgd2hpY2ggc3dpdGNoZXMgb24gdHlwZSBhbmQgcnVucyB0aGVcbiAgLy8gICAgYXNzb2NpYXRlZCBzdGVwczpcblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdEYXRhVVJMJzoge1xuICAgICAgLy8gMS4gUmV0dXJuIGJ5dGVzIGFzIGEgRGF0YVVSTCBbUkZDMjM5N10gc3ViamVjdCB0b1xuICAgICAgLy8gICAgdGhlIGNvbnNpZGVyYXRpb25zIGJlbG93OlxuICAgICAgLy8gICogVXNlIG1pbWVUeXBlIGFzIHBhcnQgb2YgdGhlIERhdGEgVVJMIGlmIGl0IGlzXG4gICAgICAvLyAgICBhdmFpbGFibGUgaW4ga2VlcGluZyB3aXRoIHRoZSBEYXRhIFVSTFxuICAgICAgLy8gICAgc3BlY2lmaWNhdGlvbiBbUkZDMjM5N10uXG4gICAgICAvLyAgKiBJZiBtaW1lVHlwZSBpcyBub3QgYXZhaWxhYmxlIHJldHVybiBhIERhdGEgVVJMXG4gICAgICAvLyAgICB3aXRob3V0IGEgbWVkaWEtdHlwZS4gW1JGQzIzOTddLlxuXG4gICAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzIzOTcjc2VjdGlvbi0zXG4gICAgICAvLyBkYXRhdXJsICAgIDo9IFwiZGF0YTpcIiBbIG1lZGlhdHlwZSBdIFsgXCI7YmFzZTY0XCIgXSBcIixcIiBkYXRhXG4gICAgICAvLyBtZWRpYXR5cGUgIDo9IFsgdHlwZSBcIi9cIiBzdWJ0eXBlIF0gKiggXCI7XCIgcGFyYW1ldGVyIClcbiAgICAgIC8vIGRhdGEgICAgICAgOj0gKnVybGNoYXJcbiAgICAgIC8vIHBhcmFtZXRlciAgOj0gYXR0cmlidXRlIFwiPVwiIHZhbHVlXG4gICAgICBsZXQgZGF0YVVSTCA9ICdkYXRhOidcblxuICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VNSU1FVHlwZShtaW1lVHlwZSB8fCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJylcblxuICAgICAgaWYgKHBhcnNlZCAhPT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgIGRhdGFVUkwgKz0gc2VyaWFsaXplQU1pbWVUeXBlKHBhcnNlZClcbiAgICAgIH1cblxuICAgICAgZGF0YVVSTCArPSAnO2Jhc2U2NCwnXG5cbiAgICAgIGNvbnN0IGRlY29kZXIgPSBuZXcgU3RyaW5nRGVjb2RlcignbGF0aW4xJylcblxuICAgICAgZm9yIChjb25zdCBjaHVuayBvZiBieXRlcykge1xuICAgICAgICBkYXRhVVJMICs9IGJ0b2EoZGVjb2Rlci53cml0ZShjaHVuaykpXG4gICAgICB9XG5cbiAgICAgIGRhdGFVUkwgKz0gYnRvYShkZWNvZGVyLmVuZCgpKVxuXG4gICAgICByZXR1cm4gZGF0YVVSTFxuICAgIH1cbiAgICBjYXNlICdUZXh0Jzoge1xuICAgICAgLy8gMS4gTGV0IGVuY29kaW5nIGJlIGZhaWx1cmVcbiAgICAgIGxldCBlbmNvZGluZyA9ICdmYWlsdXJlJ1xuXG4gICAgICAvLyAyLiBJZiB0aGUgZW5jb2RpbmdOYW1lIGlzIHByZXNlbnQsIHNldCBlbmNvZGluZyB0byB0aGVcbiAgICAgIC8vICAgIHJlc3VsdCBvZiBnZXR0aW5nIGFuIGVuY29kaW5nIGZyb20gZW5jb2RpbmdOYW1lLlxuICAgICAgaWYgKGVuY29kaW5nTmFtZSkge1xuICAgICAgICBlbmNvZGluZyA9IGdldEVuY29kaW5nKGVuY29kaW5nTmFtZSlcbiAgICAgIH1cblxuICAgICAgLy8gMy4gSWYgZW5jb2RpbmcgaXMgZmFpbHVyZSwgYW5kIG1pbWVUeXBlIGlzIHByZXNlbnQ6XG4gICAgICBpZiAoZW5jb2RpbmcgPT09ICdmYWlsdXJlJyAmJiBtaW1lVHlwZSkge1xuICAgICAgICAvLyAxLiBMZXQgdHlwZSBiZSB0aGUgcmVzdWx0IG9mIHBhcnNlIGEgTUlNRSB0eXBlXG4gICAgICAgIC8vICAgIGdpdmVuIG1pbWVUeXBlLlxuICAgICAgICBjb25zdCB0eXBlID0gcGFyc2VNSU1FVHlwZShtaW1lVHlwZSlcblxuICAgICAgICAvLyAyLiBJZiB0eXBlIGlzIG5vdCBmYWlsdXJlLCBzZXQgZW5jb2RpbmcgdG8gdGhlIHJlc3VsdFxuICAgICAgICAvLyAgICBvZiBnZXR0aW5nIGFuIGVuY29kaW5nIGZyb20gdHlwZeKAmXMgcGFyYW1ldGVyc1tcImNoYXJzZXRcIl0uXG4gICAgICAgIGlmICh0eXBlICE9PSAnZmFpbHVyZScpIHtcbiAgICAgICAgICBlbmNvZGluZyA9IGdldEVuY29kaW5nKHR5cGUucGFyYW1ldGVycy5nZXQoJ2NoYXJzZXQnKSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyA0LiBJZiBlbmNvZGluZyBpcyBmYWlsdXJlLCB0aGVuIHNldCBlbmNvZGluZyB0byBVVEYtOC5cbiAgICAgIGlmIChlbmNvZGluZyA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgIGVuY29kaW5nID0gJ1VURi04J1xuICAgICAgfVxuXG4gICAgICAvLyA1LiBEZWNvZGUgYnl0ZXMgdXNpbmcgZmFsbGJhY2sgZW5jb2RpbmcgZW5jb2RpbmcsIGFuZFxuICAgICAgLy8gICAgcmV0dXJuIHRoZSByZXN1bHQuXG4gICAgICByZXR1cm4gZGVjb2RlKGJ5dGVzLCBlbmNvZGluZylcbiAgICB9XG4gICAgY2FzZSAnQXJyYXlCdWZmZXInOiB7XG4gICAgICAvLyBSZXR1cm4gYSBuZXcgQXJyYXlCdWZmZXIgd2hvc2UgY29udGVudHMgYXJlIGJ5dGVzLlxuICAgICAgY29uc3Qgc2VxdWVuY2UgPSBjb21iaW5lQnl0ZVNlcXVlbmNlcyhieXRlcylcblxuICAgICAgcmV0dXJuIHNlcXVlbmNlLmJ1ZmZlclxuICAgIH1cbiAgICBjYXNlICdCaW5hcnlTdHJpbmcnOiB7XG4gICAgICAvLyBSZXR1cm4gYnl0ZXMgYXMgYSBiaW5hcnkgc3RyaW5nLCBpbiB3aGljaCBldmVyeSBieXRlXG4gICAgICAvLyAgaXMgcmVwcmVzZW50ZWQgYnkgYSBjb2RlIHVuaXQgb2YgZXF1YWwgdmFsdWUgWzAuLjI1NV0uXG4gICAgICBsZXQgYmluYXJ5U3RyaW5nID0gJydcblxuICAgICAgY29uc3QgZGVjb2RlciA9IG5ldyBTdHJpbmdEZWNvZGVyKCdsYXRpbjEnKVxuXG4gICAgICBmb3IgKGNvbnN0IGNodW5rIG9mIGJ5dGVzKSB7XG4gICAgICAgIGJpbmFyeVN0cmluZyArPSBkZWNvZGVyLndyaXRlKGNodW5rKVxuICAgICAgfVxuXG4gICAgICBiaW5hcnlTdHJpbmcgKz0gZGVjb2Rlci5lbmQoKVxuXG4gICAgICByZXR1cm4gYmluYXJ5U3RyaW5nXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy8jZGVjb2RlXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXlbXX0gaW9RdWV1ZVxuICogQHBhcmFtIHtzdHJpbmd9IGVuY29kaW5nXG4gKi9cbmZ1bmN0aW9uIGRlY29kZSAoaW9RdWV1ZSwgZW5jb2RpbmcpIHtcbiAgY29uc3QgYnl0ZXMgPSBjb21iaW5lQnl0ZVNlcXVlbmNlcyhpb1F1ZXVlKVxuXG4gIC8vIDEuIExldCBCT01FbmNvZGluZyBiZSB0aGUgcmVzdWx0IG9mIEJPTSBzbmlmZmluZyBpb1F1ZXVlLlxuICBjb25zdCBCT01FbmNvZGluZyA9IEJPTVNuaWZmaW5nKGJ5dGVzKVxuXG4gIGxldCBzbGljZSA9IDBcblxuICAvLyAyLiBJZiBCT01FbmNvZGluZyBpcyBub24tbnVsbDpcbiAgaWYgKEJPTUVuY29kaW5nICE9PSBudWxsKSB7XG4gICAgLy8gMS4gU2V0IGVuY29kaW5nIHRvIEJPTUVuY29kaW5nLlxuICAgIGVuY29kaW5nID0gQk9NRW5jb2RpbmdcblxuICAgIC8vIDIuIFJlYWQgdGhyZWUgYnl0ZXMgZnJvbSBpb1F1ZXVlLCBpZiBCT01FbmNvZGluZyBpc1xuICAgIC8vICAgIFVURi04OyBvdGhlcndpc2UgcmVhZCB0d28gYnl0ZXMuXG4gICAgLy8gICAgKERvIG5vdGhpbmcgd2l0aCB0aG9zZSBieXRlcy4pXG4gICAgc2xpY2UgPSBCT01FbmNvZGluZyA9PT0gJ1VURi04JyA/IDMgOiAyXG4gIH1cblxuICAvLyAzLiBQcm9jZXNzIGEgcXVldWUgd2l0aCBhbiBpbnN0YW5jZSBvZiBlbmNvZGluZ+KAmXNcbiAgLy8gICAgZGVjb2RlciwgaW9RdWV1ZSwgb3V0cHV0LCBhbmQgXCJyZXBsYWNlbWVudFwiLlxuXG4gIC8vIDQuIFJldHVybiBvdXRwdXQuXG5cbiAgY29uc3Qgc2xpY2VkID0gYnl0ZXMuc2xpY2Uoc2xpY2UpXG4gIHJldHVybiBuZXcgVGV4dERlY29kZXIoZW5jb2RpbmcpLmRlY29kZShzbGljZWQpXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy8jYm9tLXNuaWZmXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGlvUXVldWVcbiAqL1xuZnVuY3Rpb24gQk9NU25pZmZpbmcgKGlvUXVldWUpIHtcbiAgLy8gMS4gTGV0IEJPTSBiZSB0aGUgcmVzdWx0IG9mIHBlZWtpbmcgMyBieXRlcyBmcm9tIGlvUXVldWUsXG4gIC8vICAgIGNvbnZlcnRlZCB0byBhIGJ5dGUgc2VxdWVuY2UuXG4gIGNvbnN0IFthLCBiLCBjXSA9IGlvUXVldWVcblxuICAvLyAyLiBGb3IgZWFjaCBvZiB0aGUgcm93cyBpbiB0aGUgdGFibGUgYmVsb3csIHN0YXJ0aW5nIHdpdGhcbiAgLy8gICAgdGhlIGZpcnN0IG9uZSBhbmQgZ29pbmcgZG93biwgaWYgQk9NIHN0YXJ0cyB3aXRoIHRoZVxuICAvLyAgICBieXRlcyBnaXZlbiBpbiB0aGUgZmlyc3QgY29sdW1uLCB0aGVuIHJldHVybiB0aGVcbiAgLy8gICAgZW5jb2RpbmcgZ2l2ZW4gaW4gdGhlIGNlbGwgaW4gdGhlIHNlY29uZCBjb2x1bW4gb2YgdGhhdFxuICAvLyAgICByb3cuIE90aGVyd2lzZSwgcmV0dXJuIG51bGwuXG4gIGlmIChhID09PSAweEVGICYmIGIgPT09IDB4QkIgJiYgYyA9PT0gMHhCRikge1xuICAgIHJldHVybiAnVVRGLTgnXG4gIH0gZWxzZSBpZiAoYSA9PT0gMHhGRSAmJiBiID09PSAweEZGKSB7XG4gICAgcmV0dXJuICdVVEYtMTZCRSdcbiAgfSBlbHNlIGlmIChhID09PSAweEZGICYmIGIgPT09IDB4RkUpIHtcbiAgICByZXR1cm4gJ1VURi0xNkxFJ1xuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXlbXX0gc2VxdWVuY2VzXG4gKi9cbmZ1bmN0aW9uIGNvbWJpbmVCeXRlU2VxdWVuY2VzIChzZXF1ZW5jZXMpIHtcbiAgY29uc3Qgc2l6ZSA9IHNlcXVlbmNlcy5yZWR1Y2UoKGEsIGIpID0+IHtcbiAgICByZXR1cm4gYSArIGIuYnl0ZUxlbmd0aFxuICB9LCAwKVxuXG4gIGxldCBvZmZzZXQgPSAwXG5cbiAgcmV0dXJuIHNlcXVlbmNlcy5yZWR1Y2UoKGEsIGIpID0+IHtcbiAgICBhLnNldChiLCBvZmZzZXQpXG4gICAgb2Zmc2V0ICs9IGIuYnl0ZUxlbmd0aFxuICAgIHJldHVybiBhXG4gIH0sIG5ldyBVaW50OEFycmF5KHNpemUpKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgcmVhZE9wZXJhdGlvbixcbiAgZmlyZUFQcm9ncmVzc0V2ZW50XG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIHJlYWRPcGVyYXRpb24sXG4gIGZpcmVBUHJvZ3Jlc3NFdmVudFxufSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7XG4gIGtTdGF0ZSxcbiAga0Vycm9yLFxuICBrUmVzdWx0LFxuICBrRXZlbnRzLFxuICBrQWJvcnRlZFxufSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvd2ViaWRsJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcblxuY2xhc3MgRmlsZVJlYWRlciBleHRlbmRzIEV2ZW50VGFyZ2V0IHtcbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXNba1N0YXRlXSA9ICdlbXB0eSdcbiAgICB0aGlzW2tSZXN1bHRdID0gbnVsbFxuICAgIHRoaXNba0Vycm9yXSA9IG51bGxcbiAgICB0aGlzW2tFdmVudHNdID0ge1xuICAgICAgbG9hZGVuZDogbnVsbCxcbiAgICAgIGVycm9yOiBudWxsLFxuICAgICAgYWJvcnQ6IG51bGwsXG4gICAgICBsb2FkOiBudWxsLFxuICAgICAgcHJvZ3Jlc3M6IG51bGwsXG4gICAgICBsb2Fkc3RhcnQ6IG51bGxcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZGZuLXJlYWRBc0FycmF5QnVmZmVyXG4gICAqIEBwYXJhbSB7aW1wb3J0KCdidWZmZXInKS5CbG9ifSBibG9iXG4gICAqL1xuICByZWFkQXNBcnJheUJ1ZmZlciAoYmxvYikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRmlsZVJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcicgfSlcblxuICAgIGJsb2IgPSB3ZWJpZGwuY29udmVydGVycy5CbG9iKGJsb2IsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gICAgLy8gVGhlIHJlYWRBc0FycmF5QnVmZmVyKGJsb2IpIG1ldGhvZCwgd2hlbiBpbnZva2VkLFxuICAgIC8vIG11c3QgaW5pdGlhdGUgYSByZWFkIG9wZXJhdGlvbiBmb3IgYmxvYiB3aXRoIEFycmF5QnVmZmVyLlxuICAgIHJlYWRPcGVyYXRpb24odGhpcywgYmxvYiwgJ0FycmF5QnVmZmVyJylcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNyZWFkQXNCaW5hcnlTdHJpbmdcbiAgICogQHBhcmFtIHtpbXBvcnQoJ2J1ZmZlcicpLkJsb2J9IGJsb2JcbiAgICovXG4gIHJlYWRBc0JpbmFyeVN0cmluZyAoYmxvYikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRmlsZVJlYWRlci5yZWFkQXNCaW5hcnlTdHJpbmcnIH0pXG5cbiAgICBibG9iID0gd2ViaWRsLmNvbnZlcnRlcnMuQmxvYihibG9iLCB7IHN0cmljdDogZmFsc2UgfSlcblxuICAgIC8vIFRoZSByZWFkQXNCaW5hcnlTdHJpbmcoYmxvYikgbWV0aG9kLCB3aGVuIGludm9rZWQsXG4gICAgLy8gbXVzdCBpbml0aWF0ZSBhIHJlYWQgb3BlcmF0aW9uIGZvciBibG9iIHdpdGggQmluYXJ5U3RyaW5nLlxuICAgIHJlYWRPcGVyYXRpb24odGhpcywgYmxvYiwgJ0JpbmFyeVN0cmluZycpXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jcmVhZEFzRGF0YVRleHRcbiAgICogQHBhcmFtIHtpbXBvcnQoJ2J1ZmZlcicpLkJsb2J9IGJsb2JcbiAgICogQHBhcmFtIHtzdHJpbmc/fSBlbmNvZGluZ1xuICAgKi9cbiAgcmVhZEFzVGV4dCAoYmxvYiwgZW5jb2RpbmcgPSB1bmRlZmluZWQpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0ZpbGVSZWFkZXIucmVhZEFzVGV4dCcgfSlcblxuICAgIGJsb2IgPSB3ZWJpZGwuY29udmVydGVycy5CbG9iKGJsb2IsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gICAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGVuY29kaW5nID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKGVuY29kaW5nKVxuICAgIH1cblxuICAgIC8vIFRoZSByZWFkQXNUZXh0KGJsb2IsIGVuY29kaW5nKSBtZXRob2QsIHdoZW4gaW52b2tlZCxcbiAgICAvLyBtdXN0IGluaXRpYXRlIGEgcmVhZCBvcGVyYXRpb24gZm9yIGJsb2Igd2l0aCBUZXh0IGFuZCBlbmNvZGluZy5cbiAgICByZWFkT3BlcmF0aW9uKHRoaXMsIGJsb2IsICdUZXh0JywgZW5jb2RpbmcpXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZGZuLXJlYWRBc0RhdGFVUkxcbiAgICogQHBhcmFtIHtpbXBvcnQoJ2J1ZmZlcicpLkJsb2J9IGJsb2JcbiAgICovXG4gIHJlYWRBc0RhdGFVUkwgKGJsb2IpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0ZpbGVSZWFkZXIucmVhZEFzRGF0YVVSTCcgfSlcblxuICAgIGJsb2IgPSB3ZWJpZGwuY29udmVydGVycy5CbG9iKGJsb2IsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gICAgLy8gVGhlIHJlYWRBc0RhdGFVUkwoYmxvYikgbWV0aG9kLCB3aGVuIGludm9rZWQsIG11c3RcbiAgICAvLyBpbml0aWF0ZSBhIHJlYWQgb3BlcmF0aW9uIGZvciBibG9iIHdpdGggRGF0YVVSTC5cbiAgICByZWFkT3BlcmF0aW9uKHRoaXMsIGJsb2IsICdEYXRhVVJMJylcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNkZm4tYWJvcnRcbiAgICovXG4gIGFib3J0ICgpIHtcbiAgICAvLyAxLiBJZiB0aGlzJ3Mgc3RhdGUgaXMgXCJlbXB0eVwiIG9yIGlmIHRoaXMncyBzdGF0ZSBpc1xuICAgIC8vICAgIFwiZG9uZVwiIHNldCB0aGlzJ3MgcmVzdWx0IHRvIG51bGwgYW5kIHRlcm1pbmF0ZVxuICAgIC8vICAgIHRoaXMgYWxnb3JpdGhtLlxuICAgIGlmICh0aGlzW2tTdGF0ZV0gPT09ICdlbXB0eScgfHwgdGhpc1trU3RhdGVdID09PSAnZG9uZScpIHtcbiAgICAgIHRoaXNba1Jlc3VsdF0gPSBudWxsXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyAyLiBJZiB0aGlzJ3Mgc3RhdGUgaXMgXCJsb2FkaW5nXCIgc2V0IHRoaXMncyBzdGF0ZSB0b1xuICAgIC8vICAgIFwiZG9uZVwiIGFuZCBzZXQgdGhpcydzIHJlc3VsdCB0byBudWxsLlxuICAgIGlmICh0aGlzW2tTdGF0ZV0gPT09ICdsb2FkaW5nJykge1xuICAgICAgdGhpc1trU3RhdGVdID0gJ2RvbmUnXG4gICAgICB0aGlzW2tSZXN1bHRdID0gbnVsbFxuICAgIH1cblxuICAgIC8vIDMuIElmIHRoZXJlIGFyZSBhbnkgdGFza3MgZnJvbSB0aGlzIG9uIHRoZSBmaWxlIHJlYWRpbmdcbiAgICAvLyAgICB0YXNrIHNvdXJjZSBpbiBhbiBhZmZpbGlhdGVkIHRhc2sgcXVldWUsIHRoZW4gcmVtb3ZlXG4gICAgLy8gICAgdGhvc2UgdGFza3MgZnJvbSB0aGF0IHRhc2sgcXVldWUuXG4gICAgdGhpc1trQWJvcnRlZF0gPSB0cnVlXG5cbiAgICAvLyA0LiBUZXJtaW5hdGUgdGhlIGFsZ29yaXRobSBmb3IgdGhlIHJlYWQgbWV0aG9kIGJlaW5nIHByb2Nlc3NlZC5cbiAgICAvLyBUT0RPXG5cbiAgICAvLyA1LiBGaXJlIGEgcHJvZ3Jlc3MgZXZlbnQgY2FsbGVkIGFib3J0IGF0IHRoaXMuXG4gICAgZmlyZUFQcm9ncmVzc0V2ZW50KCdhYm9ydCcsIHRoaXMpXG5cbiAgICAvLyA2LiBJZiB0aGlzJ3Mgc3RhdGUgaXMgbm90IFwibG9hZGluZ1wiLCBmaXJlIGEgcHJvZ3Jlc3NcbiAgICAvLyAgICBldmVudCBjYWxsZWQgbG9hZGVuZCBhdCB0aGlzLlxuICAgIGlmICh0aGlzW2tTdGF0ZV0gIT09ICdsb2FkaW5nJykge1xuICAgICAgZmlyZUFQcm9ncmVzc0V2ZW50KCdsb2FkZW5kJywgdGhpcylcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZG9tLWZpbGVyZWFkZXItcmVhZHlzdGF0ZVxuICAgKi9cbiAgZ2V0IHJlYWR5U3RhdGUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICBzd2l0Y2ggKHRoaXNba1N0YXRlXSkge1xuICAgICAgY2FzZSAnZW1wdHknOiByZXR1cm4gdGhpcy5FTVBUWVxuICAgICAgY2FzZSAnbG9hZGluZyc6IHJldHVybiB0aGlzLkxPQURJTkdcbiAgICAgIGNhc2UgJ2RvbmUnOiByZXR1cm4gdGhpcy5ET05FXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2RvbS1maWxlcmVhZGVyLXJlc3VsdFxuICAgKi9cbiAgZ2V0IHJlc3VsdCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIC8vIFRoZSByZXN1bHQgYXR0cmlidXRl4oCZcyBnZXR0ZXIsIHdoZW4gaW52b2tlZCwgbXVzdCByZXR1cm5cbiAgICAvLyB0aGlzJ3MgcmVzdWx0LlxuICAgIHJldHVybiB0aGlzW2tSZXN1bHRdXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZG9tLWZpbGVyZWFkZXItZXJyb3JcbiAgICovXG4gIGdldCBlcnJvciAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIC8vIFRoZSBlcnJvciBhdHRyaWJ1dGXigJlzIGdldHRlciwgd2hlbiBpbnZva2VkLCBtdXN0IHJldHVyblxuICAgIC8vIHRoaXMncyBlcnJvci5cbiAgICByZXR1cm4gdGhpc1trRXJyb3JdXG4gIH1cblxuICBnZXQgb25sb2FkZW5kICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgcmV0dXJuIHRoaXNba0V2ZW50c10ubG9hZGVuZFxuICB9XG5cbiAgc2V0IG9ubG9hZGVuZCAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgaWYgKHRoaXNba0V2ZW50c10ubG9hZGVuZCkge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkZW5kJywgdGhpc1trRXZlbnRzXS5sb2FkZW5kKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXNba0V2ZW50c10ubG9hZGVuZCA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlbmQnLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trRXZlbnRzXS5sb2FkZW5kID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBvbmVycm9yICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgcmV0dXJuIHRoaXNba0V2ZW50c10uZXJyb3JcbiAgfVxuXG4gIHNldCBvbmVycm9yIChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICBpZiAodGhpc1trRXZlbnRzXS5lcnJvcikge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXNba0V2ZW50c10uZXJyb3IpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpc1trRXZlbnRzXS5lcnJvciA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgZm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNba0V2ZW50c10uZXJyb3IgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgZ2V0IG9ubG9hZHN0YXJ0ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgcmV0dXJuIHRoaXNba0V2ZW50c10ubG9hZHN0YXJ0XG4gIH1cblxuICBzZXQgb25sb2Fkc3RhcnQgKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIGlmICh0aGlzW2tFdmVudHNdLmxvYWRzdGFydCkge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2Fkc3RhcnQnLCB0aGlzW2tFdmVudHNdLmxvYWRzdGFydClcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmxvYWRzdGFydCA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRzdGFydCcsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmxvYWRzdGFydCA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgb25wcm9ncmVzcyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIHJldHVybiB0aGlzW2tFdmVudHNdLnByb2dyZXNzXG4gIH1cblxuICBzZXQgb25wcm9ncmVzcyAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgaWYgKHRoaXNba0V2ZW50c10ucHJvZ3Jlc3MpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzW2tFdmVudHNdLnByb2dyZXNzKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXNba0V2ZW50c10ucHJvZ3Jlc3MgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tFdmVudHNdLnByb2dyZXNzID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBvbmxvYWQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICByZXR1cm4gdGhpc1trRXZlbnRzXS5sb2FkXG4gIH1cblxuICBzZXQgb25sb2FkIChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICBpZiAodGhpc1trRXZlbnRzXS5sb2FkKSB7XG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzW2tFdmVudHNdLmxvYWQpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpc1trRXZlbnRzXS5sb2FkID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmxvYWQgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgZ2V0IG9uYWJvcnQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICByZXR1cm4gdGhpc1trRXZlbnRzXS5hYm9ydFxuICB9XG5cbiAgc2V0IG9uYWJvcnQgKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIGlmICh0aGlzW2tFdmVudHNdLmFib3J0KSB7XG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgdGhpc1trRXZlbnRzXS5hYm9ydClcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmFib3J0ID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trRXZlbnRzXS5hYm9ydCA9IG51bGxcbiAgICB9XG4gIH1cbn1cblxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2RvbS1maWxlcmVhZGVyLWVtcHR5XG5GaWxlUmVhZGVyLkVNUFRZID0gRmlsZVJlYWRlci5wcm90b3R5cGUuRU1QVFkgPSAwXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZG9tLWZpbGVyZWFkZXItbG9hZGluZ1xuRmlsZVJlYWRlci5MT0FESU5HID0gRmlsZVJlYWRlci5wcm90b3R5cGUuTE9BRElORyA9IDFcbi8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNkb20tZmlsZXJlYWRlci1kb25lXG5GaWxlUmVhZGVyLkRPTkUgPSBGaWxlUmVhZGVyLnByb3RvdHlwZS5ET05FID0gMlxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhGaWxlUmVhZGVyLnByb3RvdHlwZSwge1xuICBFTVBUWTogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgTE9BRElORzogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgRE9ORTogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgcmVhZEFzQXJyYXlCdWZmZXI6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlYWRBc0JpbmFyeVN0cmluZzoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcmVhZEFzVGV4dDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcmVhZEFzRGF0YVVSTDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYWJvcnQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlYWR5U3RhdGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlc3VsdDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZXJyb3I6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9ubG9hZHN0YXJ0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbnByb2dyZXNzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbmxvYWQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9uYWJvcnQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9uZXJyb3I6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9ubG9hZGVuZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0ZpbGVSZWFkZXInLFxuICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfVxufSlcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRmlsZVJlYWRlciwge1xuICBFTVBUWTogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgTE9BRElORzogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgRE9ORTogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9yc1xufSlcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEZpbGVSZWFkZXJcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBrQ29uc3RydWN0OiByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKS5rQ29uc3RydWN0XG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBVUkxTZXJpYWxpemVyIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9kYXRhVVJMJylcbmNvbnN0IHsgaXNWYWxpZEhlYWRlck5hbWUgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3V0aWwnKVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LXVybC1lcXVhbHNcbiAqIEBwYXJhbSB7VVJMfSBBXG4gKiBAcGFyYW0ge1VSTH0gQlxuICogQHBhcmFtIHtib29sZWFuIHwgdW5kZWZpbmVkfSBleGNsdWRlRnJhZ21lbnRcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiB1cmxFcXVhbHMgKEEsIEIsIGV4Y2x1ZGVGcmFnbWVudCA9IGZhbHNlKSB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRBID0gVVJMU2VyaWFsaXplcihBLCBleGNsdWRlRnJhZ21lbnQpXG5cbiAgY29uc3Qgc2VyaWFsaXplZEIgPSBVUkxTZXJpYWxpemVyKEIsIGV4Y2x1ZGVGcmFnbWVudClcblxuICByZXR1cm4gc2VyaWFsaXplZEEgPT09IHNlcmlhbGl6ZWRCXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vY2hyb21pdW0vY2hyb21pdW0vYmxvYi82OTRkMjBkMTM0Y2I1NTNkOGQ4OWU1NTAwYjkxNDgwMTJiMWJhMjk5L2NvbnRlbnQvYnJvd3Nlci9jYWNoZV9zdG9yYWdlL2NhY2hlX3N0b3JhZ2VfY2FjaGUuY2MjTDI2MC1MMjYyXG4gKiBAcGFyYW0ge3N0cmluZ30gaGVhZGVyXG4gKi9cbmZ1bmN0aW9uIGZpZWxkVmFsdWVzIChoZWFkZXIpIHtcbiAgYXNzZXJ0KGhlYWRlciAhPT0gbnVsbClcblxuICBjb25zdCB2YWx1ZXMgPSBbXVxuXG4gIGZvciAobGV0IHZhbHVlIG9mIGhlYWRlci5zcGxpdCgnLCcpKSB7XG4gICAgdmFsdWUgPSB2YWx1ZS50cmltKClcblxuICAgIGlmICghdmFsdWUubGVuZ3RoKSB7XG4gICAgICBjb250aW51ZVxuICAgIH0gZWxzZSBpZiAoIWlzVmFsaWRIZWFkZXJOYW1lKHZhbHVlKSkge1xuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICB2YWx1ZXMucHVzaCh2YWx1ZSlcbiAgfVxuXG4gIHJldHVybiB2YWx1ZXNcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHVybEVxdWFscyxcbiAgZmllbGRWYWx1ZXNcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsga0NvbnN0cnVjdCB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgdXJsRXF1YWxzLCBmaWVsZFZhbHVlczogZ2V0RmllbGRWYWx1ZXMgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IGtFbnVtZXJhYmxlUHJvcGVydHksIGlzRGlzdHVyYmVkIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBrSGVhZGVyc0xpc3QgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvd2ViaWRsJylcbmNvbnN0IHsgUmVzcG9uc2UsIGNsb25lUmVzcG9uc2UgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3Jlc3BvbnNlJylcbmNvbnN0IHsgUmVxdWVzdCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvcmVxdWVzdCcpXG5jb25zdCB7IGtTdGF0ZSwga0hlYWRlcnMsIGtHdWFyZCwga1JlYWxtIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9zeW1ib2xzJylcbmNvbnN0IHsgZmV0Y2hpbmcgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2luZGV4JylcbmNvbnN0IHsgdXJsSXNIdHRwSHR0cHNTY2hlbWUsIGNyZWF0ZURlZmVycmVkUHJvbWlzZSwgcmVhZEFsbEJ5dGVzIH0gPSByZXF1aXJlKCcuLi9mZXRjaC91dGlsJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7IGdldEdsb2JhbERpc3BhdGNoZXIgfSA9IHJlcXVpcmUoJy4uL2dsb2JhbCcpXG5cbi8qKlxuICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jZGZuLWNhY2hlLWJhdGNoLW9wZXJhdGlvblxuICogQHR5cGVkZWYge09iamVjdH0gQ2FjaGVCYXRjaE9wZXJhdGlvblxuICogQHByb3BlcnR5IHsnZGVsZXRlJyB8ICdwdXQnfSB0eXBlXG4gKiBAcHJvcGVydHkge2FueX0gcmVxdWVzdFxuICogQHByb3BlcnR5IHthbnl9IHJlc3BvbnNlXG4gKiBAcHJvcGVydHkge2ltcG9ydCgnLi4vLi4vdHlwZXMvY2FjaGUnKS5DYWNoZVF1ZXJ5T3B0aW9uc30gb3B0aW9uc1xuICovXG5cbi8qKlxuICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jZGZuLXJlcXVlc3QtcmVzcG9uc2UtbGlzdFxuICogQHR5cGVkZWYge1thbnksIGFueV1bXX0gcmVxdWVzdFJlc3BvbnNlTGlzdFxuICovXG5cbmNsYXNzIENhY2hlIHtcbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2Rmbi1yZWxldmFudC1yZXF1ZXN0LXJlc3BvbnNlLWxpc3RcbiAgICogQHR5cGUge3JlcXVlc3RSZXNwb25zZUxpc3R9XG4gICAqL1xuICAjcmVsZXZhbnRSZXF1ZXN0UmVzcG9uc2VMaXN0XG5cbiAgY29uc3RydWN0b3IgKCkge1xuICAgIGlmIChhcmd1bWVudHNbMF0gIT09IGtDb25zdHJ1Y3QpIHtcbiAgICAgIHdlYmlkbC5pbGxlZ2FsQ29uc3RydWN0b3IoKVxuICAgIH1cblxuICAgIHRoaXMuI3JlbGV2YW50UmVxdWVzdFJlc3BvbnNlTGlzdCA9IGFyZ3VtZW50c1sxXVxuICB9XG5cbiAgYXN5bmMgbWF0Y2ggKHJlcXVlc3QsIG9wdGlvbnMgPSB7fSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlKVxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdDYWNoZS5tYXRjaCcgfSlcblxuICAgIHJlcXVlc3QgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mbyhyZXF1ZXN0KVxuICAgIG9wdGlvbnMgPSB3ZWJpZGwuY29udmVydGVycy5DYWNoZVF1ZXJ5T3B0aW9ucyhvcHRpb25zKVxuXG4gICAgY29uc3QgcCA9IGF3YWl0IHRoaXMubWF0Y2hBbGwocmVxdWVzdCwgb3B0aW9ucylcblxuICAgIGlmIChwLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgcmV0dXJuIHBbMF1cbiAgfVxuXG4gIGFzeW5jIG1hdGNoQWxsIChyZXF1ZXN0ID0gdW5kZWZpbmVkLCBvcHRpb25zID0ge30pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZSlcblxuICAgIGlmIChyZXF1ZXN0ICE9PSB1bmRlZmluZWQpIHJlcXVlc3QgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mbyhyZXF1ZXN0KVxuICAgIG9wdGlvbnMgPSB3ZWJpZGwuY29udmVydGVycy5DYWNoZVF1ZXJ5T3B0aW9ucyhvcHRpb25zKVxuXG4gICAgLy8gMS5cbiAgICBsZXQgciA9IG51bGxcblxuICAgIC8vIDIuXG4gICAgaWYgKHJlcXVlc3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHJlcXVlc3QgaW5zdGFuY2VvZiBSZXF1ZXN0KSB7XG4gICAgICAgIC8vIDIuMS4xXG4gICAgICAgIHIgPSByZXF1ZXN0W2tTdGF0ZV1cblxuICAgICAgICAvLyAyLjEuMlxuICAgICAgICBpZiAoci5tZXRob2QgIT09ICdHRVQnICYmICFvcHRpb25zLmlnbm9yZU1ldGhvZCkge1xuICAgICAgICAgIHJldHVybiBbXVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiByZXF1ZXN0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAvLyAyLjIuMVxuICAgICAgICByID0gbmV3IFJlcXVlc3QocmVxdWVzdClba1N0YXRlXVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDUuXG4gICAgLy8gNS4xXG4gICAgY29uc3QgcmVzcG9uc2VzID0gW11cblxuICAgIC8vIDUuMlxuICAgIGlmIChyZXF1ZXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIDUuMi4xXG4gICAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiB0aGlzLiNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3QpIHtcbiAgICAgICAgcmVzcG9uc2VzLnB1c2gocmVxdWVzdFJlc3BvbnNlWzFdKVxuICAgICAgfVxuICAgIH0gZWxzZSB7IC8vIDUuM1xuICAgICAgLy8gNS4zLjFcbiAgICAgIGNvbnN0IHJlcXVlc3RSZXNwb25zZXMgPSB0aGlzLiNxdWVyeUNhY2hlKHIsIG9wdGlvbnMpXG5cbiAgICAgIC8vIDUuMy4yXG4gICAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiByZXF1ZXN0UmVzcG9uc2VzKSB7XG4gICAgICAgIHJlc3BvbnNlcy5wdXNoKHJlcXVlc3RSZXNwb25zZVsxXSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA1LjRcbiAgICAvLyBXZSBkb24ndCBpbXBsZW1lbnQgQ09ScyBzbyB3ZSBkb24ndCBuZWVkIHRvIGxvb3Agb3ZlciB0aGUgcmVzcG9uc2VzLCB5YXkhXG5cbiAgICAvLyA1LjUuMVxuICAgIGNvbnN0IHJlc3BvbnNlTGlzdCA9IFtdXG5cbiAgICAvLyA1LjUuMlxuICAgIGZvciAoY29uc3QgcmVzcG9uc2Ugb2YgcmVzcG9uc2VzKSB7XG4gICAgICAvLyA1LjUuMi4xXG4gICAgICBjb25zdCByZXNwb25zZU9iamVjdCA9IG5ldyBSZXNwb25zZShyZXNwb25zZS5ib2R5Py5zb3VyY2UgPz8gbnVsbClcbiAgICAgIGNvbnN0IGJvZHkgPSByZXNwb25zZU9iamVjdFtrU3RhdGVdLmJvZHlcbiAgICAgIHJlc3BvbnNlT2JqZWN0W2tTdGF0ZV0gPSByZXNwb25zZVxuICAgICAgcmVzcG9uc2VPYmplY3Rba1N0YXRlXS5ib2R5ID0gYm9keVxuICAgICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tIZWFkZXJzTGlzdF0gPSByZXNwb25zZS5oZWFkZXJzTGlzdFxuICAgICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tHdWFyZF0gPSAnaW1tdXRhYmxlJ1xuXG4gICAgICByZXNwb25zZUxpc3QucHVzaChyZXNwb25zZU9iamVjdClcbiAgICB9XG5cbiAgICAvLyA2LlxuICAgIHJldHVybiBPYmplY3QuZnJlZXplKHJlc3BvbnNlTGlzdClcbiAgfVxuXG4gIGFzeW5jIGFkZCAocmVxdWVzdCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlKVxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdDYWNoZS5hZGQnIH0pXG5cbiAgICByZXF1ZXN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluZm8ocmVxdWVzdClcblxuICAgIC8vIDEuXG4gICAgY29uc3QgcmVxdWVzdHMgPSBbcmVxdWVzdF1cblxuICAgIC8vIDIuXG4gICAgY29uc3QgcmVzcG9uc2VBcnJheVByb21pc2UgPSB0aGlzLmFkZEFsbChyZXF1ZXN0cylcblxuICAgIC8vIDMuXG4gICAgcmV0dXJuIGF3YWl0IHJlc3BvbnNlQXJyYXlQcm9taXNlXG4gIH1cblxuICBhc3luYyBhZGRBbGwgKHJlcXVlc3RzKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGUpXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0NhY2hlLmFkZEFsbCcgfSlcblxuICAgIHJlcXVlc3RzID0gd2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPFJlcXVlc3RJbmZvPiddKHJlcXVlc3RzKVxuXG4gICAgLy8gMS5cbiAgICBjb25zdCByZXNwb25zZVByb21pc2VzID0gW11cblxuICAgIC8vIDIuXG4gICAgY29uc3QgcmVxdWVzdExpc3QgPSBbXVxuXG4gICAgLy8gMy5cbiAgICBmb3IgKGNvbnN0IHJlcXVlc3Qgb2YgcmVxdWVzdHMpIHtcbiAgICAgIGlmICh0eXBlb2YgcmVxdWVzdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gMy4xXG4gICAgICBjb25zdCByID0gcmVxdWVzdFtrU3RhdGVdXG5cbiAgICAgIC8vIDMuMlxuICAgICAgaWYgKCF1cmxJc0h0dHBIdHRwc1NjaGVtZShyLnVybCkgfHwgci5tZXRob2QgIT09ICdHRVQnKSB7XG4gICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICBoZWFkZXI6ICdDYWNoZS5hZGRBbGwnLFxuICAgICAgICAgIG1lc3NhZ2U6ICdFeHBlY3RlZCBodHRwL3Mgc2NoZW1lIHdoZW4gbWV0aG9kIGlzIG5vdCBHRVQuJ1xuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDQuXG4gICAgLyoqIEB0eXBlIHtSZXR1cm5UeXBlPHR5cGVvZiBmZXRjaGluZz5bXX0gKi9cbiAgICBjb25zdCBmZXRjaENvbnRyb2xsZXJzID0gW11cblxuICAgIC8vIDUuXG4gICAgZm9yIChjb25zdCByZXF1ZXN0IG9mIHJlcXVlc3RzKSB7XG4gICAgICAvLyA1LjFcbiAgICAgIGNvbnN0IHIgPSBuZXcgUmVxdWVzdChyZXF1ZXN0KVtrU3RhdGVdXG5cbiAgICAgIC8vIDUuMlxuICAgICAgaWYgKCF1cmxJc0h0dHBIdHRwc1NjaGVtZShyLnVybCkpIHtcbiAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLmFkZEFsbCcsXG4gICAgICAgICAgbWVzc2FnZTogJ0V4cGVjdGVkIGh0dHAvcyBzY2hlbWUuJ1xuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICAvLyA1LjRcbiAgICAgIHIuaW5pdGlhdG9yID0gJ2ZldGNoJ1xuICAgICAgci5kZXN0aW5hdGlvbiA9ICdzdWJyZXNvdXJjZSdcblxuICAgICAgLy8gNS41XG4gICAgICByZXF1ZXN0TGlzdC5wdXNoKHIpXG5cbiAgICAgIC8vIDUuNlxuICAgICAgY29uc3QgcmVzcG9uc2VQcm9taXNlID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKClcblxuICAgICAgLy8gNS43XG4gICAgICBmZXRjaENvbnRyb2xsZXJzLnB1c2goZmV0Y2hpbmcoe1xuICAgICAgICByZXF1ZXN0OiByLFxuICAgICAgICBkaXNwYXRjaGVyOiBnZXRHbG9iYWxEaXNwYXRjaGVyKCksXG4gICAgICAgIHByb2Nlc3NSZXNwb25zZSAocmVzcG9uc2UpIHtcbiAgICAgICAgICAvLyAxLlxuICAgICAgICAgIGlmIChyZXNwb25zZS50eXBlID09PSAnZXJyb3InIHx8IHJlc3BvbnNlLnN0YXR1cyA9PT0gMjA2IHx8IHJlc3BvbnNlLnN0YXR1cyA8IDIwMCB8fCByZXNwb25zZS5zdGF0dXMgPiAyOTkpIHtcbiAgICAgICAgICAgIHJlc3BvbnNlUHJvbWlzZS5yZWplY3Qod2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgICBoZWFkZXI6ICdDYWNoZS5hZGRBbGwnLFxuICAgICAgICAgICAgICBtZXNzYWdlOiAnUmVjZWl2ZWQgYW4gaW52YWxpZCBzdGF0dXMgY29kZSBvciB0aGUgcmVxdWVzdCBmYWlsZWQuJ1xuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgfSBlbHNlIGlmIChyZXNwb25zZS5oZWFkZXJzTGlzdC5jb250YWlucygndmFyeScpKSB7IC8vIDIuXG4gICAgICAgICAgICAvLyAyLjFcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkVmFsdWVzID0gZ2V0RmllbGRWYWx1ZXMocmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCd2YXJ5JykpXG5cbiAgICAgICAgICAgIC8vIDIuMlxuICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZFZhbHVlIG9mIGZpZWxkVmFsdWVzKSB7XG4gICAgICAgICAgICAgIC8vIDIuMi4xXG4gICAgICAgICAgICAgIGlmIChmaWVsZFZhbHVlID09PSAnKicpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVByb21pc2UucmVqZWN0KHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLmFkZEFsbCcsXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnaW52YWxpZCB2YXJ5IGZpZWxkIHZhbHVlJ1xuICAgICAgICAgICAgICAgIH0pKVxuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBjb250cm9sbGVyIG9mIGZldGNoQ29udHJvbGxlcnMpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuYWJvcnQoKVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHkgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgLy8gMS5cbiAgICAgICAgICBpZiAocmVzcG9uc2UuYWJvcnRlZCkge1xuICAgICAgICAgICAgcmVzcG9uc2VQcm9taXNlLnJlamVjdChuZXcgRE9NRXhjZXB0aW9uKCdhYm9ydGVkJywgJ0Fib3J0RXJyb3InKSlcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDIuXG4gICAgICAgICAgcmVzcG9uc2VQcm9taXNlLnJlc29sdmUocmVzcG9uc2UpXG4gICAgICAgIH1cbiAgICAgIH0pKVxuXG4gICAgICAvLyA1LjhcbiAgICAgIHJlc3BvbnNlUHJvbWlzZXMucHVzaChyZXNwb25zZVByb21pc2UucHJvbWlzZSlcbiAgICB9XG5cbiAgICAvLyA2LlxuICAgIGNvbnN0IHAgPSBQcm9taXNlLmFsbChyZXNwb25zZVByb21pc2VzKVxuXG4gICAgLy8gNy5cbiAgICBjb25zdCByZXNwb25zZXMgPSBhd2FpdCBwXG5cbiAgICAvLyA3LjFcbiAgICBjb25zdCBvcGVyYXRpb25zID0gW11cblxuICAgIC8vIDcuMlxuICAgIGxldCBpbmRleCA9IDBcblxuICAgIC8vIDcuM1xuICAgIGZvciAoY29uc3QgcmVzcG9uc2Ugb2YgcmVzcG9uc2VzKSB7XG4gICAgICAvLyA3LjMuMVxuICAgICAgLyoqIEB0eXBlIHtDYWNoZUJhdGNoT3BlcmF0aW9ufSAqL1xuICAgICAgY29uc3Qgb3BlcmF0aW9uID0ge1xuICAgICAgICB0eXBlOiAncHV0JywgLy8gNy4zLjJcbiAgICAgICAgcmVxdWVzdDogcmVxdWVzdExpc3RbaW5kZXhdLCAvLyA3LjMuM1xuICAgICAgICByZXNwb25zZSAvLyA3LjMuNFxuICAgICAgfVxuXG4gICAgICBvcGVyYXRpb25zLnB1c2gob3BlcmF0aW9uKSAvLyA3LjMuNVxuXG4gICAgICBpbmRleCsrIC8vIDcuMy42XG4gICAgfVxuXG4gICAgLy8gNy41XG4gICAgY29uc3QgY2FjaGVKb2JQcm9taXNlID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKClcblxuICAgIC8vIDcuNi4xXG4gICAgbGV0IGVycm9yRGF0YSA9IG51bGxcblxuICAgIC8vIDcuNi4yXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuI2JhdGNoQ2FjaGVPcGVyYXRpb25zKG9wZXJhdGlvbnMpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZXJyb3JEYXRhID0gZVxuICAgIH1cblxuICAgIC8vIDcuNi4zXG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgLy8gNy42LjMuMVxuICAgICAgaWYgKGVycm9yRGF0YSA9PT0gbnVsbCkge1xuICAgICAgICBjYWNoZUpvYlByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyA3LjYuMy4yXG4gICAgICAgIGNhY2hlSm9iUHJvbWlzZS5yZWplY3QoZXJyb3JEYXRhKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICAvLyA3LjdcbiAgICByZXR1cm4gY2FjaGVKb2JQcm9taXNlLnByb21pc2VcbiAgfVxuXG4gIGFzeW5jIHB1dCAocmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZSlcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnQ2FjaGUucHV0JyB9KVxuXG4gICAgcmVxdWVzdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKHJlcXVlc3QpXG4gICAgcmVzcG9uc2UgPSB3ZWJpZGwuY29udmVydGVycy5SZXNwb25zZShyZXNwb25zZSlcblxuICAgIC8vIDEuXG4gICAgbGV0IGlubmVyUmVxdWVzdCA9IG51bGxcblxuICAgIC8vIDIuXG4gICAgaWYgKHJlcXVlc3QgaW5zdGFuY2VvZiBSZXF1ZXN0KSB7XG4gICAgICBpbm5lclJlcXVlc3QgPSByZXF1ZXN0W2tTdGF0ZV1cbiAgICB9IGVsc2UgeyAvLyAzLlxuICAgICAgaW5uZXJSZXF1ZXN0ID0gbmV3IFJlcXVlc3QocmVxdWVzdClba1N0YXRlXVxuICAgIH1cblxuICAgIC8vIDQuXG4gICAgaWYgKCF1cmxJc0h0dHBIdHRwc1NjaGVtZShpbm5lclJlcXVlc3QudXJsKSB8fCBpbm5lclJlcXVlc3QubWV0aG9kICE9PSAnR0VUJykge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6ICdDYWNoZS5wdXQnLFxuICAgICAgICBtZXNzYWdlOiAnRXhwZWN0ZWQgYW4gaHR0cC9zIHNjaGVtZSB3aGVuIG1ldGhvZCBpcyBub3QgR0VUJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyA1LlxuICAgIGNvbnN0IGlubmVyUmVzcG9uc2UgPSByZXNwb25zZVtrU3RhdGVdXG5cbiAgICAvLyA2LlxuICAgIGlmIChpbm5lclJlc3BvbnNlLnN0YXR1cyA9PT0gMjA2KSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ0NhY2hlLnB1dCcsXG4gICAgICAgIG1lc3NhZ2U6ICdHb3QgMjA2IHN0YXR1cydcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gNy5cbiAgICBpZiAoaW5uZXJSZXNwb25zZS5oZWFkZXJzTGlzdC5jb250YWlucygndmFyeScpKSB7XG4gICAgICAvLyA3LjEuXG4gICAgICBjb25zdCBmaWVsZFZhbHVlcyA9IGdldEZpZWxkVmFsdWVzKGlubmVyUmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCd2YXJ5JykpXG5cbiAgICAgIC8vIDcuMi5cbiAgICAgIGZvciAoY29uc3QgZmllbGRWYWx1ZSBvZiBmaWVsZFZhbHVlcykge1xuICAgICAgICAvLyA3LjIuMVxuICAgICAgICBpZiAoZmllbGRWYWx1ZSA9PT0gJyonKSB7XG4gICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgaGVhZGVyOiAnQ2FjaGUucHV0JyxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdHb3QgKiB2YXJ5IGZpZWxkIHZhbHVlJ1xuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA4LlxuICAgIGlmIChpbm5lclJlc3BvbnNlLmJvZHkgJiYgKGlzRGlzdHVyYmVkKGlubmVyUmVzcG9uc2UuYm9keS5zdHJlYW0pIHx8IGlubmVyUmVzcG9uc2UuYm9keS5zdHJlYW0ubG9ja2VkKSkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6ICdDYWNoZS5wdXQnLFxuICAgICAgICBtZXNzYWdlOiAnUmVzcG9uc2UgYm9keSBpcyBsb2NrZWQgb3IgZGlzdHVyYmVkJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyA5LlxuICAgIGNvbnN0IGNsb25lZFJlc3BvbnNlID0gY2xvbmVSZXNwb25zZShpbm5lclJlc3BvbnNlKVxuXG4gICAgLy8gMTAuXG4gICAgY29uc3QgYm9keVJlYWRQcm9taXNlID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKClcblxuICAgIC8vIDExLlxuICAgIGlmIChpbm5lclJlc3BvbnNlLmJvZHkgIT0gbnVsbCkge1xuICAgICAgLy8gMTEuMVxuICAgICAgY29uc3Qgc3RyZWFtID0gaW5uZXJSZXNwb25zZS5ib2R5LnN0cmVhbVxuXG4gICAgICAvLyAxMS4yXG4gICAgICBjb25zdCByZWFkZXIgPSBzdHJlYW0uZ2V0UmVhZGVyKClcblxuICAgICAgLy8gMTEuM1xuICAgICAgcmVhZEFsbEJ5dGVzKHJlYWRlcikudGhlbihib2R5UmVhZFByb21pc2UucmVzb2x2ZSwgYm9keVJlYWRQcm9taXNlLnJlamVjdClcbiAgICB9IGVsc2Uge1xuICAgICAgYm9keVJlYWRQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKVxuICAgIH1cblxuICAgIC8vIDEyLlxuICAgIC8qKiBAdHlwZSB7Q2FjaGVCYXRjaE9wZXJhdGlvbltdfSAqL1xuICAgIGNvbnN0IG9wZXJhdGlvbnMgPSBbXVxuXG4gICAgLy8gMTMuXG4gICAgLyoqIEB0eXBlIHtDYWNoZUJhdGNoT3BlcmF0aW9ufSAqL1xuICAgIGNvbnN0IG9wZXJhdGlvbiA9IHtcbiAgICAgIHR5cGU6ICdwdXQnLCAvLyAxNC5cbiAgICAgIHJlcXVlc3Q6IGlubmVyUmVxdWVzdCwgLy8gMTUuXG4gICAgICByZXNwb25zZTogY2xvbmVkUmVzcG9uc2UgLy8gMTYuXG4gICAgfVxuXG4gICAgLy8gMTcuXG4gICAgb3BlcmF0aW9ucy5wdXNoKG9wZXJhdGlvbilcblxuICAgIC8vIDE5LlxuICAgIGNvbnN0IGJ5dGVzID0gYXdhaXQgYm9keVJlYWRQcm9taXNlLnByb21pc2VcblxuICAgIGlmIChjbG9uZWRSZXNwb25zZS5ib2R5ICE9IG51bGwpIHtcbiAgICAgIGNsb25lZFJlc3BvbnNlLmJvZHkuc291cmNlID0gYnl0ZXNcbiAgICB9XG5cbiAgICAvLyAxOS4xXG4gICAgY29uc3QgY2FjaGVKb2JQcm9taXNlID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKClcblxuICAgIC8vIDE5LjIuMVxuICAgIGxldCBlcnJvckRhdGEgPSBudWxsXG5cbiAgICAvLyAxOS4yLjJcbiAgICB0cnkge1xuICAgICAgdGhpcy4jYmF0Y2hDYWNoZU9wZXJhdGlvbnMob3BlcmF0aW9ucylcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlcnJvckRhdGEgPSBlXG4gICAgfVxuXG4gICAgLy8gMTkuMi4zXG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgLy8gMTkuMi4zLjFcbiAgICAgIGlmIChlcnJvckRhdGEgPT09IG51bGwpIHtcbiAgICAgICAgY2FjaGVKb2JQcm9taXNlLnJlc29sdmUoKVxuICAgICAgfSBlbHNlIHsgLy8gMTkuMi4zLjJcbiAgICAgICAgY2FjaGVKb2JQcm9taXNlLnJlamVjdChlcnJvckRhdGEpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHJldHVybiBjYWNoZUpvYlByb21pc2UucHJvbWlzZVxuICB9XG5cbiAgYXN5bmMgZGVsZXRlIChyZXF1ZXN0LCBvcHRpb25zID0ge30pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZSlcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnQ2FjaGUuZGVsZXRlJyB9KVxuXG4gICAgcmVxdWVzdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKHJlcXVlc3QpXG4gICAgb3B0aW9ucyA9IHdlYmlkbC5jb252ZXJ0ZXJzLkNhY2hlUXVlcnlPcHRpb25zKG9wdGlvbnMpXG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7UmVxdWVzdH1cbiAgICAgKi9cbiAgICBsZXQgciA9IG51bGxcblxuICAgIGlmIChyZXF1ZXN0IGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgICAgciA9IHJlcXVlc3Rba1N0YXRlXVxuXG4gICAgICBpZiAoci5tZXRob2QgIT09ICdHRVQnICYmICFvcHRpb25zLmlnbm9yZU1ldGhvZCkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYXNzZXJ0KHR5cGVvZiByZXF1ZXN0ID09PSAnc3RyaW5nJylcblxuICAgICAgciA9IG5ldyBSZXF1ZXN0KHJlcXVlc3QpW2tTdGF0ZV1cbiAgICB9XG5cbiAgICAvKiogQHR5cGUge0NhY2hlQmF0Y2hPcGVyYXRpb25bXX0gKi9cbiAgICBjb25zdCBvcGVyYXRpb25zID0gW11cblxuICAgIC8qKiBAdHlwZSB7Q2FjaGVCYXRjaE9wZXJhdGlvbn0gKi9cbiAgICBjb25zdCBvcGVyYXRpb24gPSB7XG4gICAgICB0eXBlOiAnZGVsZXRlJyxcbiAgICAgIHJlcXVlc3Q6IHIsXG4gICAgICBvcHRpb25zXG4gICAgfVxuXG4gICAgb3BlcmF0aW9ucy5wdXNoKG9wZXJhdGlvbilcblxuICAgIGNvbnN0IGNhY2hlSm9iUHJvbWlzZSA9IGNyZWF0ZURlZmVycmVkUHJvbWlzZSgpXG5cbiAgICBsZXQgZXJyb3JEYXRhID0gbnVsbFxuICAgIGxldCByZXF1ZXN0UmVzcG9uc2VzXG5cbiAgICB0cnkge1xuICAgICAgcmVxdWVzdFJlc3BvbnNlcyA9IHRoaXMuI2JhdGNoQ2FjaGVPcGVyYXRpb25zKG9wZXJhdGlvbnMpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZXJyb3JEYXRhID0gZVxuICAgIH1cblxuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgIGlmIChlcnJvckRhdGEgPT09IG51bGwpIHtcbiAgICAgICAgY2FjaGVKb2JQcm9taXNlLnJlc29sdmUoISFyZXF1ZXN0UmVzcG9uc2VzPy5sZW5ndGgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWNoZUpvYlByb21pc2UucmVqZWN0KGVycm9yRGF0YSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIGNhY2hlSm9iUHJvbWlzZS5wcm9taXNlXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jZG9tLWNhY2hlLWtleXNcbiAgICogQHBhcmFtIHthbnl9IHJlcXVlc3RcbiAgICogQHBhcmFtIHtpbXBvcnQoJy4uLy4uL3R5cGVzL2NhY2hlJykuQ2FjaGVRdWVyeU9wdGlvbnN9IG9wdGlvbnNcbiAgICogQHJldHVybnMge3JlYWRvbmx5IFJlcXVlc3RbXX1cbiAgICovXG4gIGFzeW5jIGtleXMgKHJlcXVlc3QgPSB1bmRlZmluZWQsIG9wdGlvbnMgPSB7fSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlKVxuXG4gICAgaWYgKHJlcXVlc3QgIT09IHVuZGVmaW5lZCkgcmVxdWVzdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKHJlcXVlc3QpXG4gICAgb3B0aW9ucyA9IHdlYmlkbC5jb252ZXJ0ZXJzLkNhY2hlUXVlcnlPcHRpb25zKG9wdGlvbnMpXG5cbiAgICAvLyAxLlxuICAgIGxldCByID0gbnVsbFxuXG4gICAgLy8gMi5cbiAgICBpZiAocmVxdWVzdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyAyLjFcbiAgICAgIGlmIChyZXF1ZXN0IGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgICAgICAvLyAyLjEuMVxuICAgICAgICByID0gcmVxdWVzdFtrU3RhdGVdXG5cbiAgICAgICAgLy8gMi4xLjJcbiAgICAgICAgaWYgKHIubWV0aG9kICE9PSAnR0VUJyAmJiAhb3B0aW9ucy5pZ25vcmVNZXRob2QpIHtcbiAgICAgICAgICByZXR1cm4gW11cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcmVxdWVzdCA9PT0gJ3N0cmluZycpIHsgLy8gMi4yXG4gICAgICAgIHIgPSBuZXcgUmVxdWVzdChyZXF1ZXN0KVtrU3RhdGVdXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNC5cbiAgICBjb25zdCBwcm9taXNlID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKClcblxuICAgIC8vIDUuXG4gICAgLy8gNS4xXG4gICAgY29uc3QgcmVxdWVzdHMgPSBbXVxuXG4gICAgLy8gNS4yXG4gICAgaWYgKHJlcXVlc3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gNS4yLjFcbiAgICAgIGZvciAoY29uc3QgcmVxdWVzdFJlc3BvbnNlIG9mIHRoaXMuI3JlbGV2YW50UmVxdWVzdFJlc3BvbnNlTGlzdCkge1xuICAgICAgICAvLyA1LjIuMS4xXG4gICAgICAgIHJlcXVlc3RzLnB1c2gocmVxdWVzdFJlc3BvbnNlWzBdKVxuICAgICAgfVxuICAgIH0gZWxzZSB7IC8vIDUuM1xuICAgICAgLy8gNS4zLjFcbiAgICAgIGNvbnN0IHJlcXVlc3RSZXNwb25zZXMgPSB0aGlzLiNxdWVyeUNhY2hlKHIsIG9wdGlvbnMpXG5cbiAgICAgIC8vIDUuMy4yXG4gICAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiByZXF1ZXN0UmVzcG9uc2VzKSB7XG4gICAgICAgIC8vIDUuMy4yLjFcbiAgICAgICAgcmVxdWVzdHMucHVzaChyZXF1ZXN0UmVzcG9uc2VbMF0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNS40XG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgLy8gNS40LjFcbiAgICAgIGNvbnN0IHJlcXVlc3RMaXN0ID0gW11cblxuICAgICAgLy8gNS40LjJcbiAgICAgIGZvciAoY29uc3QgcmVxdWVzdCBvZiByZXF1ZXN0cykge1xuICAgICAgICBjb25zdCByZXF1ZXN0T2JqZWN0ID0gbmV3IFJlcXVlc3QoJ2h0dHBzOi8vYScpXG4gICAgICAgIHJlcXVlc3RPYmplY3Rba1N0YXRlXSA9IHJlcXVlc3RcbiAgICAgICAgcmVxdWVzdE9iamVjdFtrSGVhZGVyc11ba0hlYWRlcnNMaXN0XSA9IHJlcXVlc3QuaGVhZGVyc0xpc3RcbiAgICAgICAgcmVxdWVzdE9iamVjdFtrSGVhZGVyc11ba0d1YXJkXSA9ICdpbW11dGFibGUnXG4gICAgICAgIHJlcXVlc3RPYmplY3Rba1JlYWxtXSA9IHJlcXVlc3QuY2xpZW50XG5cbiAgICAgICAgLy8gNS40LjIuMVxuICAgICAgICByZXF1ZXN0TGlzdC5wdXNoKHJlcXVlc3RPYmplY3QpXG4gICAgICB9XG5cbiAgICAgIC8vIDUuNC4zXG4gICAgICBwcm9taXNlLnJlc29sdmUoT2JqZWN0LmZyZWV6ZShyZXF1ZXN0TGlzdCkpXG4gICAgfSlcblxuICAgIHJldHVybiBwcm9taXNlLnByb21pc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNiYXRjaC1jYWNoZS1vcGVyYXRpb25zLWFsZ29yaXRobVxuICAgKiBAcGFyYW0ge0NhY2hlQmF0Y2hPcGVyYXRpb25bXX0gb3BlcmF0aW9uc1xuICAgKiBAcmV0dXJucyB7cmVxdWVzdFJlc3BvbnNlTGlzdH1cbiAgICovXG4gICNiYXRjaENhY2hlT3BlcmF0aW9ucyAob3BlcmF0aW9ucykge1xuICAgIC8vIDEuXG4gICAgY29uc3QgY2FjaGUgPSB0aGlzLiNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3RcblxuICAgIC8vIDIuXG4gICAgY29uc3QgYmFja3VwQ2FjaGUgPSBbLi4uY2FjaGVdXG5cbiAgICAvLyAzLlxuICAgIGNvbnN0IGFkZGVkSXRlbXMgPSBbXVxuXG4gICAgLy8gNC4xXG4gICAgY29uc3QgcmVzdWx0TGlzdCA9IFtdXG5cbiAgICB0cnkge1xuICAgICAgLy8gNC4yXG4gICAgICBmb3IgKGNvbnN0IG9wZXJhdGlvbiBvZiBvcGVyYXRpb25zKSB7XG4gICAgICAgIC8vIDQuMi4xXG4gICAgICAgIGlmIChvcGVyYXRpb24udHlwZSAhPT0gJ2RlbGV0ZScgJiYgb3BlcmF0aW9uLnR5cGUgIT09ICdwdXQnKSB7XG4gICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgaGVhZGVyOiAnQ2FjaGUuI2JhdGNoQ2FjaGVPcGVyYXRpb25zJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdvcGVyYXRpb24gdHlwZSBkb2VzIG5vdCBtYXRjaCBcImRlbGV0ZVwiIG9yIFwicHV0XCInXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDQuMi4yXG4gICAgICAgIGlmIChvcGVyYXRpb24udHlwZSA9PT0gJ2RlbGV0ZScgJiYgb3BlcmF0aW9uLnJlc3BvbnNlICE9IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICBoZWFkZXI6ICdDYWNoZS4jYmF0Y2hDYWNoZU9wZXJhdGlvbnMnLFxuICAgICAgICAgICAgbWVzc2FnZTogJ2RlbGV0ZSBvcGVyYXRpb24gc2hvdWxkIG5vdCBoYXZlIGFuIGFzc29jaWF0ZWQgcmVzcG9uc2UnXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDQuMi4zXG4gICAgICAgIGlmICh0aGlzLiNxdWVyeUNhY2hlKG9wZXJhdGlvbi5yZXF1ZXN0LCBvcGVyYXRpb24ub3B0aW9ucywgYWRkZWRJdGVtcykubGVuZ3RoKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignPz8/JywgJ0ludmFsaWRTdGF0ZUVycm9yJylcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDQuMi40XG4gICAgICAgIGxldCByZXF1ZXN0UmVzcG9uc2VzXG5cbiAgICAgICAgLy8gNC4yLjVcbiAgICAgICAgaWYgKG9wZXJhdGlvbi50eXBlID09PSAnZGVsZXRlJykge1xuICAgICAgICAgIC8vIDQuMi41LjFcbiAgICAgICAgICByZXF1ZXN0UmVzcG9uc2VzID0gdGhpcy4jcXVlcnlDYWNoZShvcGVyYXRpb24ucmVxdWVzdCwgb3BlcmF0aW9uLm9wdGlvbnMpXG5cbiAgICAgICAgICAvLyBUT0RPOiB0aGUgc3BlYyBpcyB3cm9uZywgdGhpcyBpcyBuZWVkZWQgdG8gcGFzcyBXUFRzXG4gICAgICAgICAgaWYgKHJlcXVlc3RSZXNwb25zZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gW11cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyA0LjIuNS4yXG4gICAgICAgICAgZm9yIChjb25zdCByZXF1ZXN0UmVzcG9uc2Ugb2YgcmVxdWVzdFJlc3BvbnNlcykge1xuICAgICAgICAgICAgY29uc3QgaWR4ID0gY2FjaGUuaW5kZXhPZihyZXF1ZXN0UmVzcG9uc2UpXG4gICAgICAgICAgICBhc3NlcnQoaWR4ICE9PSAtMSlcblxuICAgICAgICAgICAgLy8gNC4yLjUuMi4xXG4gICAgICAgICAgICBjYWNoZS5zcGxpY2UoaWR4LCAxKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24udHlwZSA9PT0gJ3B1dCcpIHsgLy8gNC4yLjZcbiAgICAgICAgICAvLyA0LjIuNi4xXG4gICAgICAgICAgaWYgKG9wZXJhdGlvbi5yZXNwb25zZSA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLiNiYXRjaENhY2hlT3BlcmF0aW9ucycsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdwdXQgb3BlcmF0aW9uIHNob3VsZCBoYXZlIGFuIGFzc29jaWF0ZWQgcmVzcG9uc2UnXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDQuMi42LjJcbiAgICAgICAgICBjb25zdCByID0gb3BlcmF0aW9uLnJlcXVlc3RcblxuICAgICAgICAgIC8vIDQuMi42LjNcbiAgICAgICAgICBpZiAoIXVybElzSHR0cEh0dHBzU2NoZW1lKHIudXJsKSkge1xuICAgICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgICBoZWFkZXI6ICdDYWNoZS4jYmF0Y2hDYWNoZU9wZXJhdGlvbnMnLFxuICAgICAgICAgICAgICBtZXNzYWdlOiAnZXhwZWN0ZWQgaHR0cCBvciBodHRwcyBzY2hlbWUnXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDQuMi42LjRcbiAgICAgICAgICBpZiAoci5tZXRob2QgIT09ICdHRVQnKSB7XG4gICAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLiNiYXRjaENhY2hlT3BlcmF0aW9ucycsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdub3QgZ2V0IG1ldGhvZCdcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gNC4yLjYuNVxuICAgICAgICAgIGlmIChvcGVyYXRpb24ub3B0aW9ucyAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLiNiYXRjaENhY2hlT3BlcmF0aW9ucycsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdvcHRpb25zIG11c3Qgbm90IGJlIGRlZmluZWQnXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDQuMi42LjZcbiAgICAgICAgICByZXF1ZXN0UmVzcG9uc2VzID0gdGhpcy4jcXVlcnlDYWNoZShvcGVyYXRpb24ucmVxdWVzdClcblxuICAgICAgICAgIC8vIDQuMi42LjdcbiAgICAgICAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiByZXF1ZXN0UmVzcG9uc2VzKSB7XG4gICAgICAgICAgICBjb25zdCBpZHggPSBjYWNoZS5pbmRleE9mKHJlcXVlc3RSZXNwb25zZSlcbiAgICAgICAgICAgIGFzc2VydChpZHggIT09IC0xKVxuXG4gICAgICAgICAgICAvLyA0LjIuNi43LjFcbiAgICAgICAgICAgIGNhY2hlLnNwbGljZShpZHgsIDEpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gNC4yLjYuOFxuICAgICAgICAgIGNhY2hlLnB1c2goW29wZXJhdGlvbi5yZXF1ZXN0LCBvcGVyYXRpb24ucmVzcG9uc2VdKVxuXG4gICAgICAgICAgLy8gNC4yLjYuMTBcbiAgICAgICAgICBhZGRlZEl0ZW1zLnB1c2goW29wZXJhdGlvbi5yZXF1ZXN0LCBvcGVyYXRpb24ucmVzcG9uc2VdKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gNC4yLjdcbiAgICAgICAgcmVzdWx0TGlzdC5wdXNoKFtvcGVyYXRpb24ucmVxdWVzdCwgb3BlcmF0aW9uLnJlc3BvbnNlXSlcbiAgICAgIH1cblxuICAgICAgLy8gNC4zXG4gICAgICByZXR1cm4gcmVzdWx0TGlzdFxuICAgIH0gY2F0Y2ggKGUpIHsgLy8gNS5cbiAgICAgIC8vIDUuMVxuICAgICAgdGhpcy4jcmVsZXZhbnRSZXF1ZXN0UmVzcG9uc2VMaXN0Lmxlbmd0aCA9IDBcblxuICAgICAgLy8gNS4yXG4gICAgICB0aGlzLiNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3QgPSBiYWNrdXBDYWNoZVxuXG4gICAgICAvLyA1LjNcbiAgICAgIHRocm93IGVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jcXVlcnktY2FjaGVcbiAgICogQHBhcmFtIHthbnl9IHJlcXVlc3RRdWVyeVxuICAgKiBAcGFyYW0ge2ltcG9ydCgnLi4vLi4vdHlwZXMvY2FjaGUnKS5DYWNoZVF1ZXJ5T3B0aW9uc30gb3B0aW9uc1xuICAgKiBAcGFyYW0ge3JlcXVlc3RSZXNwb25zZUxpc3R9IHRhcmdldFN0b3JhZ2VcbiAgICogQHJldHVybnMge3JlcXVlc3RSZXNwb25zZUxpc3R9XG4gICAqL1xuICAjcXVlcnlDYWNoZSAocmVxdWVzdFF1ZXJ5LCBvcHRpb25zLCB0YXJnZXRTdG9yYWdlKSB7XG4gICAgLyoqIEB0eXBlIHtyZXF1ZXN0UmVzcG9uc2VMaXN0fSAqL1xuICAgIGNvbnN0IHJlc3VsdExpc3QgPSBbXVxuXG4gICAgY29uc3Qgc3RvcmFnZSA9IHRhcmdldFN0b3JhZ2UgPz8gdGhpcy4jcmVsZXZhbnRSZXF1ZXN0UmVzcG9uc2VMaXN0XG5cbiAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiBzdG9yYWdlKSB7XG4gICAgICBjb25zdCBbY2FjaGVkUmVxdWVzdCwgY2FjaGVkUmVzcG9uc2VdID0gcmVxdWVzdFJlc3BvbnNlXG4gICAgICBpZiAodGhpcy4jcmVxdWVzdE1hdGNoZXNDYWNoZWRJdGVtKHJlcXVlc3RRdWVyeSwgY2FjaGVkUmVxdWVzdCwgY2FjaGVkUmVzcG9uc2UsIG9wdGlvbnMpKSB7XG4gICAgICAgIHJlc3VsdExpc3QucHVzaChyZXF1ZXN0UmVzcG9uc2UpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdExpc3RcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNyZXF1ZXN0LW1hdGNoZXMtY2FjaGVkLWl0ZW0tYWxnb3JpdGhtXG4gICAqIEBwYXJhbSB7YW55fSByZXF1ZXN0UXVlcnlcbiAgICogQHBhcmFtIHthbnl9IHJlcXVlc3RcbiAgICogQHBhcmFtIHthbnkgfCBudWxsfSByZXNwb25zZVxuICAgKiBAcGFyYW0ge2ltcG9ydCgnLi4vLi4vdHlwZXMvY2FjaGUnKS5DYWNoZVF1ZXJ5T3B0aW9ucyB8IHVuZGVmaW5lZH0gb3B0aW9uc1xuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gICNyZXF1ZXN0TWF0Y2hlc0NhY2hlZEl0ZW0gKHJlcXVlc3RRdWVyeSwgcmVxdWVzdCwgcmVzcG9uc2UgPSBudWxsLCBvcHRpb25zKSB7XG4gICAgLy8gaWYgKG9wdGlvbnM/Lmlnbm9yZU1ldGhvZCA9PT0gZmFsc2UgJiYgcmVxdWVzdC5tZXRob2QgPT09ICdHRVQnKSB7XG4gICAgLy8gICByZXR1cm4gZmFsc2VcbiAgICAvLyB9XG5cbiAgICBjb25zdCBxdWVyeVVSTCA9IG5ldyBVUkwocmVxdWVzdFF1ZXJ5LnVybClcblxuICAgIGNvbnN0IGNhY2hlZFVSTCA9IG5ldyBVUkwocmVxdWVzdC51cmwpXG5cbiAgICBpZiAob3B0aW9ucz8uaWdub3JlU2VhcmNoKSB7XG4gICAgICBjYWNoZWRVUkwuc2VhcmNoID0gJydcblxuICAgICAgcXVlcnlVUkwuc2VhcmNoID0gJydcbiAgICB9XG5cbiAgICBpZiAoIXVybEVxdWFscyhxdWVyeVVSTCwgY2FjaGVkVVJMLCB0cnVlKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgcmVzcG9uc2UgPT0gbnVsbCB8fFxuICAgICAgb3B0aW9ucz8uaWdub3JlVmFyeSB8fFxuICAgICAgIXJlc3BvbnNlLmhlYWRlcnNMaXN0LmNvbnRhaW5zKCd2YXJ5JylcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgY29uc3QgZmllbGRWYWx1ZXMgPSBnZXRGaWVsZFZhbHVlcyhyZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ3ZhcnknKSlcblxuICAgIGZvciAoY29uc3QgZmllbGRWYWx1ZSBvZiBmaWVsZFZhbHVlcykge1xuICAgICAgaWYgKGZpZWxkVmFsdWUgPT09ICcqJykge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVxdWVzdFZhbHVlID0gcmVxdWVzdC5oZWFkZXJzTGlzdC5nZXQoZmllbGRWYWx1ZSlcbiAgICAgIGNvbnN0IHF1ZXJ5VmFsdWUgPSByZXF1ZXN0UXVlcnkuaGVhZGVyc0xpc3QuZ2V0KGZpZWxkVmFsdWUpXG5cbiAgICAgIC8vIElmIG9uZSBoYXMgdGhlIGhlYWRlciBhbmQgdGhlIG90aGVyIGRvZXNuJ3QsIG9yIG9uZSBoYXNcbiAgICAgIC8vIGEgZGlmZmVyZW50IHZhbHVlIHRoYW4gdGhlIG90aGVyLCByZXR1cm4gZmFsc2VcbiAgICAgIGlmIChyZXF1ZXN0VmFsdWUgIT09IHF1ZXJ5VmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWVcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDYWNoZS5wcm90b3R5cGUsIHtcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0NhY2hlJyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSxcbiAgbWF0Y2g6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG1hdGNoQWxsOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBhZGQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGFkZEFsbDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcHV0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBkZWxldGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGtleXM6IGtFbnVtZXJhYmxlUHJvcGVydHlcbn0pXG5cbmNvbnN0IGNhY2hlUXVlcnlPcHRpb25Db252ZXJ0ZXJzID0gW1xuICB7XG4gICAga2V5OiAnaWdub3JlU2VhcmNoJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4sXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZVxuICB9LFxuICB7XG4gICAga2V5OiAnaWdub3JlTWV0aG9kJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4sXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZVxuICB9LFxuICB7XG4gICAga2V5OiAnaWdub3JlVmFyeScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2VcbiAgfVxuXVxuXG53ZWJpZGwuY29udmVydGVycy5DYWNoZVF1ZXJ5T3B0aW9ucyA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKGNhY2hlUXVlcnlPcHRpb25Db252ZXJ0ZXJzKVxuXG53ZWJpZGwuY29udmVydGVycy5NdWx0aUNhY2hlUXVlcnlPcHRpb25zID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICAuLi5jYWNoZVF1ZXJ5T3B0aW9uQ29udmVydGVycyxcbiAge1xuICAgIGtleTogJ2NhY2hlTmFtZScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmdcbiAgfVxuXSlcblxud2ViaWRsLmNvbnZlcnRlcnMuUmVzcG9uc2UgPSB3ZWJpZGwuaW50ZXJmYWNlQ29udmVydGVyKFJlc3BvbnNlKVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8UmVxdWVzdEluZm8+J10gPSB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvXG4pXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBDYWNoZVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBrQ29uc3RydWN0IH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBDYWNoZSB9ID0gcmVxdWlyZSgnLi9jYWNoZScpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvd2ViaWRsJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcblxuY2xhc3MgQ2FjaGVTdG9yYWdlIHtcbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2Rmbi1yZWxldmFudC1uYW1lLXRvLWNhY2hlLW1hcFxuICAgKiBAdHlwZSB7TWFwPHN0cmluZywgaW1wb3J0KCcuL2NhY2hlJykucmVxdWVzdFJlc3BvbnNlTGlzdH1cbiAgICovXG4gICNjYWNoZXMgPSBuZXcgTWFwKClcblxuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgaWYgKGFyZ3VtZW50c1swXSAhPT0ga0NvbnN0cnVjdCkge1xuICAgICAgd2ViaWRsLmlsbGVnYWxDb25zdHJ1Y3RvcigpXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbWF0Y2ggKHJlcXVlc3QsIG9wdGlvbnMgPSB7fSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlU3RvcmFnZSlcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnQ2FjaGVTdG9yYWdlLm1hdGNoJyB9KVxuXG4gICAgcmVxdWVzdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKHJlcXVlc3QpXG4gICAgb3B0aW9ucyA9IHdlYmlkbC5jb252ZXJ0ZXJzLk11bHRpQ2FjaGVRdWVyeU9wdGlvbnMob3B0aW9ucylcblxuICAgIC8vIDEuXG4gICAgaWYgKG9wdGlvbnMuY2FjaGVOYW1lICE9IG51bGwpIHtcbiAgICAgIC8vIDEuMS4xLjFcbiAgICAgIGlmICh0aGlzLiNjYWNoZXMuaGFzKG9wdGlvbnMuY2FjaGVOYW1lKSkge1xuICAgICAgICAvLyAxLjEuMS4xLjFcbiAgICAgICAgY29uc3QgY2FjaGVMaXN0ID0gdGhpcy4jY2FjaGVzLmdldChvcHRpb25zLmNhY2hlTmFtZSlcbiAgICAgICAgY29uc3QgY2FjaGUgPSBuZXcgQ2FjaGUoa0NvbnN0cnVjdCwgY2FjaGVMaXN0KVxuXG4gICAgICAgIHJldHVybiBhd2FpdCBjYWNoZS5tYXRjaChyZXF1ZXN0LCBvcHRpb25zKVxuICAgICAgfVxuICAgIH0gZWxzZSB7IC8vIDIuXG4gICAgICAvLyAyLjJcbiAgICAgIGZvciAoY29uc3QgY2FjaGVMaXN0IG9mIHRoaXMuI2NhY2hlcy52YWx1ZXMoKSkge1xuICAgICAgICBjb25zdCBjYWNoZSA9IG5ldyBDYWNoZShrQ29uc3RydWN0LCBjYWNoZUxpc3QpXG5cbiAgICAgICAgLy8gMi4yLjEuMlxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNhY2hlLm1hdGNoKHJlcXVlc3QsIG9wdGlvbnMpXG5cbiAgICAgICAgaWYgKHJlc3BvbnNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNjYWNoZS1zdG9yYWdlLWhhc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fVxuICAgKi9cbiAgYXN5bmMgaGFzIChjYWNoZU5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZVN0b3JhZ2UpXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0NhY2hlU3RvcmFnZS5oYXMnIH0pXG5cbiAgICBjYWNoZU5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcoY2FjaGVOYW1lKVxuXG4gICAgLy8gMi4xLjFcbiAgICAvLyAyLjJcbiAgICByZXR1cm4gdGhpcy4jY2FjaGVzLmhhcyhjYWNoZU5hbWUpXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jZG9tLWNhY2hlc3RvcmFnZS1vcGVuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWVcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2FjaGU+fVxuICAgKi9cbiAgYXN5bmMgb3BlbiAoY2FjaGVOYW1lKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGVTdG9yYWdlKVxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdDYWNoZVN0b3JhZ2Uub3BlbicgfSlcblxuICAgIGNhY2hlTmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyhjYWNoZU5hbWUpXG5cbiAgICAvLyAyLjFcbiAgICBpZiAodGhpcy4jY2FjaGVzLmhhcyhjYWNoZU5hbWUpKSB7XG4gICAgICAvLyBhd2FpdCBjYWNoZXMub3BlbigndjEnKSAhPT0gYXdhaXQgY2FjaGVzLm9wZW4oJ3YxJylcblxuICAgICAgLy8gMi4xLjFcbiAgICAgIGNvbnN0IGNhY2hlID0gdGhpcy4jY2FjaGVzLmdldChjYWNoZU5hbWUpXG5cbiAgICAgIC8vIDIuMS4xLjFcbiAgICAgIHJldHVybiBuZXcgQ2FjaGUoa0NvbnN0cnVjdCwgY2FjaGUpXG4gICAgfVxuXG4gICAgLy8gMi4yXG4gICAgY29uc3QgY2FjaGUgPSBbXVxuXG4gICAgLy8gMi4zXG4gICAgdGhpcy4jY2FjaGVzLnNldChjYWNoZU5hbWUsIGNhY2hlKVxuXG4gICAgLy8gMi40XG4gICAgcmV0dXJuIG5ldyBDYWNoZShrQ29uc3RydWN0LCBjYWNoZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNjYWNoZS1zdG9yYWdlLWRlbGV0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fVxuICAgKi9cbiAgYXN5bmMgZGVsZXRlIChjYWNoZU5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZVN0b3JhZ2UpXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0NhY2hlU3RvcmFnZS5kZWxldGUnIH0pXG5cbiAgICBjYWNoZU5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcoY2FjaGVOYW1lKVxuXG4gICAgcmV0dXJuIHRoaXMuI2NhY2hlcy5kZWxldGUoY2FjaGVOYW1lKVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2NhY2hlLXN0b3JhZ2Uta2V5c1xuICAgKiBAcmV0dXJucyB7c3RyaW5nW119XG4gICAqL1xuICBhc3luYyBrZXlzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZVN0b3JhZ2UpXG5cbiAgICAvLyAyLjFcbiAgICBjb25zdCBrZXlzID0gdGhpcy4jY2FjaGVzLmtleXMoKVxuXG4gICAgLy8gMi4yXG4gICAgcmV0dXJuIFsuLi5rZXlzXVxuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENhY2hlU3RvcmFnZS5wcm90b3R5cGUsIHtcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0NhY2hlU3RvcmFnZScsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0sXG4gIG1hdGNoOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBoYXM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9wZW46IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGRlbGV0ZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAga2V5czoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIENhY2hlU3RvcmFnZVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuLy8gaHR0cHM6Ly93aWNnLmdpdGh1Yi5pby9jb29raWUtc3RvcmUvI2Nvb2tpZS1tYXhpbXVtLWF0dHJpYnV0ZS12YWx1ZS1zaXplXG5jb25zdCBtYXhBdHRyaWJ1dGVWYWx1ZVNpemUgPSAxMDI0XG5cbi8vIGh0dHBzOi8vd2ljZy5naXRodWIuaW8vY29va2llLXN0b3JlLyNjb29raWUtbWF4aW11bS1uYW1lLXZhbHVlLXBhaXItc2l6ZVxuY29uc3QgbWF4TmFtZVZhbHVlUGFpclNpemUgPSA0MDk2XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtYXhBdHRyaWJ1dGVWYWx1ZVNpemUsXG4gIG1heE5hbWVWYWx1ZVBhaXJTaXplXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBrSGVhZGVyc0xpc3QgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5cbmZ1bmN0aW9uIGlzQ1RMRXhjbHVkaW5nSHRhYiAodmFsdWUpIHtcbiAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgZm9yIChjb25zdCBjaGFyIG9mIHZhbHVlKSB7XG4gICAgY29uc3QgY29kZSA9IGNoYXIuY2hhckNvZGVBdCgwKVxuXG4gICAgaWYgKFxuICAgICAgKGNvZGUgPj0gMHgwMCB8fCBjb2RlIDw9IDB4MDgpIHx8XG4gICAgICAoY29kZSA+PSAweDBBIHx8IGNvZGUgPD0gMHgxRikgfHxcbiAgICAgIGNvZGUgPT09IDB4N0ZcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiBDSEFSICAgICAgICAgICA9IDxhbnkgVVMtQVNDSUkgY2hhcmFjdGVyIChvY3RldHMgMCAtIDEyNyk+XG4gdG9rZW4gICAgICAgICAgPSAxKjxhbnkgQ0hBUiBleGNlcHQgQ1RMcyBvciBzZXBhcmF0b3JzPlxuIHNlcGFyYXRvcnMgICAgID0gXCIoXCIgfCBcIilcIiB8IFwiPFwiIHwgXCI+XCIgfCBcIkBcIlxuICAgICAgICAgICAgICAgIHwgXCIsXCIgfCBcIjtcIiB8IFwiOlwiIHwgXCJcXFwiIHwgPFwiPlxuICAgICAgICAgICAgICAgIHwgXCIvXCIgfCBcIltcIiB8IFwiXVwiIHwgXCI/XCIgfCBcIj1cIlxuICAgICAgICAgICAgICAgIHwgXCJ7XCIgfCBcIn1cIiB8IFNQIHwgSFRcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQ29va2llTmFtZSAobmFtZSkge1xuICBmb3IgKGNvbnN0IGNoYXIgb2YgbmFtZSkge1xuICAgIGNvbnN0IGNvZGUgPSBjaGFyLmNoYXJDb2RlQXQoMClcblxuICAgIGlmIChcbiAgICAgIChjb2RlIDw9IDB4MjAgfHwgY29kZSA+IDB4N0YpIHx8XG4gICAgICBjaGFyID09PSAnKCcgfHxcbiAgICAgIGNoYXIgPT09ICcpJyB8fFxuICAgICAgY2hhciA9PT0gJz4nIHx8XG4gICAgICBjaGFyID09PSAnPCcgfHxcbiAgICAgIGNoYXIgPT09ICdAJyB8fFxuICAgICAgY2hhciA9PT0gJywnIHx8XG4gICAgICBjaGFyID09PSAnOycgfHxcbiAgICAgIGNoYXIgPT09ICc6JyB8fFxuICAgICAgY2hhciA9PT0gJ1xcXFwnIHx8XG4gICAgICBjaGFyID09PSAnXCInIHx8XG4gICAgICBjaGFyID09PSAnLycgfHxcbiAgICAgIGNoYXIgPT09ICdbJyB8fFxuICAgICAgY2hhciA9PT0gJ10nIHx8XG4gICAgICBjaGFyID09PSAnPycgfHxcbiAgICAgIGNoYXIgPT09ICc9JyB8fFxuICAgICAgY2hhciA9PT0gJ3snIHx8XG4gICAgICBjaGFyID09PSAnfSdcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb29raWUgbmFtZScpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuIGNvb2tpZS12YWx1ZSAgICAgID0gKmNvb2tpZS1vY3RldCAvICggRFFVT1RFICpjb29raWUtb2N0ZXQgRFFVT1RFIClcbiBjb29raWUtb2N0ZXQgICAgICA9ICV4MjEgLyAleDIzLTJCIC8gJXgyRC0zQSAvICV4M0MtNUIgLyAleDVELTdFXG4gICAgICAgICAgICAgICAgICAgICAgIDsgVVMtQVNDSUkgY2hhcmFjdGVycyBleGNsdWRpbmcgQ1RMcyxcbiAgICAgICAgICAgICAgICAgICAgICAgOyB3aGl0ZXNwYWNlIERRVU9URSwgY29tbWEsIHNlbWljb2xvbixcbiAgICAgICAgICAgICAgICAgICAgICAgOyBhbmQgYmFja3NsYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVDb29raWVWYWx1ZSAodmFsdWUpIHtcbiAgZm9yIChjb25zdCBjaGFyIG9mIHZhbHVlKSB7XG4gICAgY29uc3QgY29kZSA9IGNoYXIuY2hhckNvZGVBdCgwKVxuXG4gICAgaWYgKFxuICAgICAgY29kZSA8IDB4MjEgfHwgLy8gZXhjbHVkZSBDVExzICgwLTMxKVxuICAgICAgY29kZSA9PT0gMHgyMiB8fFxuICAgICAgY29kZSA9PT0gMHgyQyB8fFxuICAgICAgY29kZSA9PT0gMHgzQiB8fFxuICAgICAgY29kZSA9PT0gMHg1QyB8fFxuICAgICAgY29kZSA+IDB4N0UgLy8gbm9uLWFzY2lpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaGVhZGVyIHZhbHVlJylcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBwYXRoLXZhbHVlICAgICAgICA9IDxhbnkgQ0hBUiBleGNlcHQgQ1RMcyBvciBcIjtcIj5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQ29va2llUGF0aCAocGF0aCkge1xuICBmb3IgKGNvbnN0IGNoYXIgb2YgcGF0aCkge1xuICAgIGNvbnN0IGNvZGUgPSBjaGFyLmNoYXJDb2RlQXQoMClcblxuICAgIGlmIChjb2RlIDwgMHgyMSB8fCBjaGFyID09PSAnOycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb29raWUgcGF0aCcpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogSSBoYXZlIG5vIGlkZWEgd2h5IHRoZXNlIHZhbHVlcyBhcmVuJ3QgYWxsb3dlZCB0byBiZSBob25lc3QsXG4gKiBidXQgRGVubyB0ZXN0cyB0aGVzZS4gLSBLaGFmcmFcbiAqIEBwYXJhbSB7c3RyaW5nfSBkb21haW5cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVDb29raWVEb21haW4gKGRvbWFpbikge1xuICBpZiAoXG4gICAgZG9tYWluLnN0YXJ0c1dpdGgoJy0nKSB8fFxuICAgIGRvbWFpbi5lbmRzV2l0aCgnLicpIHx8XG4gICAgZG9tYWluLmVuZHNXaXRoKCctJylcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvb2tpZSBkb21haW4nKVxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNzIzMSNzZWN0aW9uLTcuMS4xLjFcbiAqIEBwYXJhbSB7bnVtYmVyfERhdGV9IGRhdGVcbiAgSU1GLWZpeGRhdGUgID0gZGF5LW5hbWUgXCIsXCIgU1AgZGF0ZTEgU1AgdGltZS1vZi1kYXkgU1AgR01UXG4gIDsgZml4ZWQgbGVuZ3RoL3pvbmUvY2FwaXRhbGl6YXRpb24gc3Vic2V0IG9mIHRoZSBmb3JtYXRcbiAgOyBzZWUgU2VjdGlvbiAzLjMgb2YgW1JGQzUzMjJdXG5cbiAgZGF5LW5hbWUgICAgID0gJXg0RC42Ri42RSA7IFwiTW9uXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg1NC43NS42NSA7IFwiVHVlXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg1Ny42NS42NCA7IFwiV2VkXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg1NC42OC43NSA7IFwiVGh1XCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0Ni43Mi42OSA7IFwiRnJpXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg1My42MS43NCA7IFwiU2F0XCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg1My43NS42RSA7IFwiU3VuXCIsIGNhc2Utc2Vuc2l0aXZlXG4gIGRhdGUxICAgICAgICA9IGRheSBTUCBtb250aCBTUCB5ZWFyXG4gICAgICAgICAgICAgICAgICA7IGUuZy4sIDAyIEp1biAxOTgyXG5cbiAgZGF5ICAgICAgICAgID0gMkRJR0lUXG4gIG1vbnRoICAgICAgICA9ICV4NEEuNjEuNkUgOyBcIkphblwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NDYuNjUuNjIgOyBcIkZlYlwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NEQuNjEuNzIgOyBcIk1hclwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NDEuNzAuNzIgOyBcIkFwclwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NEQuNjEuNzkgOyBcIk1heVwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NEEuNzUuNkUgOyBcIkp1blwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NEEuNzUuNkMgOyBcIkp1bFwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NDEuNzUuNjcgOyBcIkF1Z1wiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NTMuNjUuNzAgOyBcIlNlcFwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NEYuNjMuNzQgOyBcIk9jdFwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NEUuNkYuNzYgOyBcIk5vdlwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NDQuNjUuNjMgOyBcIkRlY1wiLCBjYXNlLXNlbnNpdGl2ZVxuICB5ZWFyICAgICAgICAgPSA0RElHSVRcblxuICBHTVQgICAgICAgICAgPSAleDQ3LjRELjU0IDsgXCJHTVRcIiwgY2FzZS1zZW5zaXRpdmVcblxuICB0aW1lLW9mLWRheSAgPSBob3VyIFwiOlwiIG1pbnV0ZSBcIjpcIiBzZWNvbmRcbiAgICAgICAgICAgICAgOyAwMDowMDowMCAtIDIzOjU5OjYwIChsZWFwIHNlY29uZClcblxuICBob3VyICAgICAgICAgPSAyRElHSVRcbiAgbWludXRlICAgICAgID0gMkRJR0lUXG4gIHNlY29uZCAgICAgICA9IDJESUdJVFxuICovXG5mdW5jdGlvbiB0b0lNRkRhdGUgKGRhdGUpIHtcbiAgaWYgKHR5cGVvZiBkYXRlID09PSAnbnVtYmVyJykge1xuICAgIGRhdGUgPSBuZXcgRGF0ZShkYXRlKVxuICB9XG5cbiAgY29uc3QgZGF5cyA9IFtcbiAgICAnU3VuJywgJ01vbicsICdUdWUnLCAnV2VkJyxcbiAgICAnVGh1JywgJ0ZyaScsICdTYXQnXG4gIF1cblxuICBjb25zdCBtb250aHMgPSBbXG4gICAgJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJyxcbiAgICAnSnVsJywgJ0F1ZycsICdTZXAnLCAnT2N0JywgJ05vdicsICdEZWMnXG4gIF1cblxuICBjb25zdCBkYXlOYW1lID0gZGF5c1tkYXRlLmdldFVUQ0RheSgpXVxuICBjb25zdCBkYXkgPSBkYXRlLmdldFVUQ0RhdGUoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcbiAgY29uc3QgbW9udGggPSBtb250aHNbZGF0ZS5nZXRVVENNb250aCgpXVxuICBjb25zdCB5ZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpXG4gIGNvbnN0IGhvdXIgPSBkYXRlLmdldFVUQ0hvdXJzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpXG4gIGNvbnN0IG1pbnV0ZSA9IGRhdGUuZ2V0VVRDTWludXRlcygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKVxuICBjb25zdCBzZWNvbmQgPSBkYXRlLmdldFVUQ1NlY29uZHMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcblxuICByZXR1cm4gYCR7ZGF5TmFtZX0sICR7ZGF5fSAke21vbnRofSAke3llYXJ9ICR7aG91cn06JHttaW51dGV9OiR7c2Vjb25kfSBHTVRgXG59XG5cbi8qKlxuIG1heC1hZ2UtYXYgICAgICAgID0gXCJNYXgtQWdlPVwiIG5vbi16ZXJvLWRpZ2l0ICpESUdJVFxuICAgICAgICAgICAgICAgICAgICAgICA7IEluIHByYWN0aWNlLCBib3RoIGV4cGlyZXMtYXYgYW5kIG1heC1hZ2UtYXZcbiAgICAgICAgICAgICAgICAgICAgICAgOyBhcmUgbGltaXRlZCB0byBkYXRlcyByZXByZXNlbnRhYmxlIGJ5IHRoZVxuICAgICAgICAgICAgICAgICAgICAgICA7IHVzZXIgYWdlbnQuXG4gKiBAcGFyYW0ge251bWJlcn0gbWF4QWdlXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQ29va2llTWF4QWdlIChtYXhBZ2UpIHtcbiAgaWYgKG1heEFnZSA8IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29va2llIG1heC1hZ2UnKVxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNjI2NSNzZWN0aW9uLTQuMS4xXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbmRleCcpLkNvb2tpZX0gY29va2llXG4gKi9cbmZ1bmN0aW9uIHN0cmluZ2lmeSAoY29va2llKSB7XG4gIGlmIChjb29raWUubmFtZS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgdmFsaWRhdGVDb29raWVOYW1lKGNvb2tpZS5uYW1lKVxuICB2YWxpZGF0ZUNvb2tpZVZhbHVlKGNvb2tpZS52YWx1ZSlcblxuICBjb25zdCBvdXQgPSBbYCR7Y29va2llLm5hbWV9PSR7Y29va2llLnZhbHVlfWBdXG5cbiAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtY29va2llLXByZWZpeGVzLTAwI3NlY3Rpb24tMy4xXG4gIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLWNvb2tpZS1wcmVmaXhlcy0wMCNzZWN0aW9uLTMuMlxuICBpZiAoY29va2llLm5hbWUuc3RhcnRzV2l0aCgnX19TZWN1cmUtJykpIHtcbiAgICBjb29raWUuc2VjdXJlID0gdHJ1ZVxuICB9XG5cbiAgaWYgKGNvb2tpZS5uYW1lLnN0YXJ0c1dpdGgoJ19fSG9zdC0nKSkge1xuICAgIGNvb2tpZS5zZWN1cmUgPSB0cnVlXG4gICAgY29va2llLmRvbWFpbiA9IG51bGxcbiAgICBjb29raWUucGF0aCA9ICcvJ1xuICB9XG5cbiAgaWYgKGNvb2tpZS5zZWN1cmUpIHtcbiAgICBvdXQucHVzaCgnU2VjdXJlJylcbiAgfVxuXG4gIGlmIChjb29raWUuaHR0cE9ubHkpIHtcbiAgICBvdXQucHVzaCgnSHR0cE9ubHknKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBjb29raWUubWF4QWdlID09PSAnbnVtYmVyJykge1xuICAgIHZhbGlkYXRlQ29va2llTWF4QWdlKGNvb2tpZS5tYXhBZ2UpXG4gICAgb3V0LnB1c2goYE1heC1BZ2U9JHtjb29raWUubWF4QWdlfWApXG4gIH1cblxuICBpZiAoY29va2llLmRvbWFpbikge1xuICAgIHZhbGlkYXRlQ29va2llRG9tYWluKGNvb2tpZS5kb21haW4pXG4gICAgb3V0LnB1c2goYERvbWFpbj0ke2Nvb2tpZS5kb21haW59YClcbiAgfVxuXG4gIGlmIChjb29raWUucGF0aCkge1xuICAgIHZhbGlkYXRlQ29va2llUGF0aChjb29raWUucGF0aClcbiAgICBvdXQucHVzaChgUGF0aD0ke2Nvb2tpZS5wYXRofWApXG4gIH1cblxuICBpZiAoY29va2llLmV4cGlyZXMgJiYgY29va2llLmV4cGlyZXMudG9TdHJpbmcoKSAhPT0gJ0ludmFsaWQgRGF0ZScpIHtcbiAgICBvdXQucHVzaChgRXhwaXJlcz0ke3RvSU1GRGF0ZShjb29raWUuZXhwaXJlcyl9YClcbiAgfVxuXG4gIGlmIChjb29raWUuc2FtZVNpdGUpIHtcbiAgICBvdXQucHVzaChgU2FtZVNpdGU9JHtjb29raWUuc2FtZVNpdGV9YClcbiAgfVxuXG4gIGZvciAoY29uc3QgcGFydCBvZiBjb29raWUudW5wYXJzZWQpIHtcbiAgICBpZiAoIXBhcnQuaW5jbHVkZXMoJz0nKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHVucGFyc2VkJylcbiAgICB9XG5cbiAgICBjb25zdCBba2V5LCAuLi52YWx1ZV0gPSBwYXJ0LnNwbGl0KCc9JylcblxuICAgIG91dC5wdXNoKGAke2tleS50cmltKCl9PSR7dmFsdWUuam9pbignPScpfWApXG4gIH1cblxuICByZXR1cm4gb3V0LmpvaW4oJzsgJylcbn1cblxubGV0IGtIZWFkZXJzTGlzdE5vZGVcblxuZnVuY3Rpb24gZ2V0SGVhZGVyc0xpc3QgKGhlYWRlcnMpIHtcbiAgaWYgKGhlYWRlcnNba0hlYWRlcnNMaXN0XSkge1xuICAgIHJldHVybiBoZWFkZXJzW2tIZWFkZXJzTGlzdF1cbiAgfVxuXG4gIGlmICgha0hlYWRlcnNMaXN0Tm9kZSkge1xuICAgIGtIZWFkZXJzTGlzdE5vZGUgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGhlYWRlcnMpLmZpbmQoXG4gICAgICAoc3ltYm9sKSA9PiBzeW1ib2wuZGVzY3JpcHRpb24gPT09ICdoZWFkZXJzIGxpc3QnXG4gICAgKVxuXG4gICAgYXNzZXJ0KGtIZWFkZXJzTGlzdE5vZGUsICdIZWFkZXJzIGNhbm5vdCBiZSBwYXJzZWQnKVxuICB9XG5cbiAgY29uc3QgaGVhZGVyc0xpc3QgPSBoZWFkZXJzW2tIZWFkZXJzTGlzdE5vZGVdXG4gIGFzc2VydChoZWFkZXJzTGlzdClcblxuICByZXR1cm4gaGVhZGVyc0xpc3Rcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGlzQ1RMRXhjbHVkaW5nSHRhYixcbiAgc3RyaW5naWZ5LFxuICBnZXRIZWFkZXJzTGlzdFxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBtYXhOYW1lVmFsdWVQYWlyU2l6ZSwgbWF4QXR0cmlidXRlVmFsdWVTaXplIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7IGlzQ1RMRXhjbHVkaW5nSHRhYiB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2RhdGFVUkwnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUGFyc2VzIHRoZSBmaWVsZC12YWx1ZSBhdHRyaWJ1dGVzIG9mIGEgc2V0LWNvb2tpZSBoZWFkZXIgc3RyaW5nLlxuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1yZmM2MjY1YmlzI3NlY3Rpb24tNS40XG4gKiBAcGFyYW0ge3N0cmluZ30gaGVhZGVyXG4gKiBAcmV0dXJucyBpZiB0aGUgaGVhZGVyIGlzIGludmFsaWQsIG51bGwgd2lsbCBiZSByZXR1cm5lZFxuICovXG5mdW5jdGlvbiBwYXJzZVNldENvb2tpZSAoaGVhZGVyKSB7XG4gIC8vIDEuIElmIHRoZSBzZXQtY29va2llLXN0cmluZyBjb250YWlucyBhICV4MDAtMDggLyAleDBBLTFGIC8gJXg3RlxuICAvLyAgICBjaGFyYWN0ZXIgKENUTCBjaGFyYWN0ZXJzIGV4Y2x1ZGluZyBIVEFCKTogQWJvcnQgdGhlc2Ugc3RlcHMgYW5kXG4gIC8vICAgIGlnbm9yZSB0aGUgc2V0LWNvb2tpZS1zdHJpbmcgZW50aXJlbHkuXG4gIGlmIChpc0NUTEV4Y2x1ZGluZ0h0YWIoaGVhZGVyKSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBsZXQgbmFtZVZhbHVlUGFpciA9ICcnXG4gIGxldCB1bnBhcnNlZEF0dHJpYnV0ZXMgPSAnJ1xuICBsZXQgbmFtZSA9ICcnXG4gIGxldCB2YWx1ZSA9ICcnXG5cbiAgLy8gMi4gSWYgdGhlIHNldC1jb29raWUtc3RyaW5nIGNvbnRhaW5zIGEgJXgzQiAoXCI7XCIpIGNoYXJhY3RlcjpcbiAgaWYgKGhlYWRlci5pbmNsdWRlcygnOycpKSB7XG4gICAgLy8gMS4gVGhlIG5hbWUtdmFsdWUtcGFpciBzdHJpbmcgY29uc2lzdHMgb2YgdGhlIGNoYXJhY3RlcnMgdXAgdG8sXG4gICAgLy8gICAgYnV0IG5vdCBpbmNsdWRpbmcsIHRoZSBmaXJzdCAleDNCIChcIjtcIiksIGFuZCB0aGUgdW5wYXJzZWQtXG4gICAgLy8gICAgYXR0cmlidXRlcyBjb25zaXN0IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHNldC1jb29raWUtc3RyaW5nXG4gICAgLy8gICAgKGluY2x1ZGluZyB0aGUgJXgzQiAoXCI7XCIpIGluIHF1ZXN0aW9uKS5cbiAgICBjb25zdCBwb3NpdGlvbiA9IHsgcG9zaXRpb246IDAgfVxuXG4gICAgbmFtZVZhbHVlUGFpciA9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0KCc7JywgaGVhZGVyLCBwb3NpdGlvbilcbiAgICB1bnBhcnNlZEF0dHJpYnV0ZXMgPSBoZWFkZXIuc2xpY2UocG9zaXRpb24ucG9zaXRpb24pXG4gIH0gZWxzZSB7XG4gICAgLy8gT3RoZXJ3aXNlOlxuXG4gICAgLy8gMS4gVGhlIG5hbWUtdmFsdWUtcGFpciBzdHJpbmcgY29uc2lzdHMgb2YgYWxsIHRoZSBjaGFyYWN0ZXJzXG4gICAgLy8gICAgY29udGFpbmVkIGluIHRoZSBzZXQtY29va2llLXN0cmluZywgYW5kIHRoZSB1bnBhcnNlZC1cbiAgICAvLyAgICBhdHRyaWJ1dGVzIGlzIHRoZSBlbXB0eSBzdHJpbmcuXG4gICAgbmFtZVZhbHVlUGFpciA9IGhlYWRlclxuICB9XG5cbiAgLy8gMy4gSWYgdGhlIG5hbWUtdmFsdWUtcGFpciBzdHJpbmcgbGFja3MgYSAleDNEIChcIj1cIikgY2hhcmFjdGVyLCB0aGVuXG4gIC8vICAgIHRoZSBuYW1lIHN0cmluZyBpcyBlbXB0eSwgYW5kIHRoZSB2YWx1ZSBzdHJpbmcgaXMgdGhlIHZhbHVlIG9mXG4gIC8vICAgIG5hbWUtdmFsdWUtcGFpci5cbiAgaWYgKCFuYW1lVmFsdWVQYWlyLmluY2x1ZGVzKCc9JykpIHtcbiAgICB2YWx1ZSA9IG5hbWVWYWx1ZVBhaXJcbiAgfSBlbHNlIHtcbiAgICAvLyAgICBPdGhlcndpc2UsIHRoZSBuYW1lIHN0cmluZyBjb25zaXN0cyBvZiB0aGUgY2hhcmFjdGVycyB1cCB0bywgYnV0XG4gICAgLy8gICAgbm90IGluY2x1ZGluZywgdGhlIGZpcnN0ICV4M0QgKFwiPVwiKSBjaGFyYWN0ZXIsIGFuZCB0aGUgKHBvc3NpYmx5XG4gICAgLy8gICAgZW1wdHkpIHZhbHVlIHN0cmluZyBjb25zaXN0cyBvZiB0aGUgY2hhcmFjdGVycyBhZnRlciB0aGUgZmlyc3RcbiAgICAvLyAgICAleDNEIChcIj1cIikgY2hhcmFjdGVyLlxuICAgIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogMCB9XG4gICAgbmFtZSA9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0KFxuICAgICAgJz0nLFxuICAgICAgbmFtZVZhbHVlUGFpcixcbiAgICAgIHBvc2l0aW9uXG4gICAgKVxuICAgIHZhbHVlID0gbmFtZVZhbHVlUGFpci5zbGljZShwb3NpdGlvbi5wb3NpdGlvbiArIDEpXG4gIH1cblxuICAvLyA0LiBSZW1vdmUgYW55IGxlYWRpbmcgb3IgdHJhaWxpbmcgV1NQIGNoYXJhY3RlcnMgZnJvbSB0aGUgbmFtZVxuICAvLyAgICBzdHJpbmcgYW5kIHRoZSB2YWx1ZSBzdHJpbmcuXG4gIG5hbWUgPSBuYW1lLnRyaW0oKVxuICB2YWx1ZSA9IHZhbHVlLnRyaW0oKVxuXG4gIC8vIDUuIElmIHRoZSBzdW0gb2YgdGhlIGxlbmd0aHMgb2YgdGhlIG5hbWUgc3RyaW5nIGFuZCB0aGUgdmFsdWUgc3RyaW5nXG4gIC8vICAgIGlzIG1vcmUgdGhhbiA0MDk2IG9jdGV0cywgYWJvcnQgdGhlc2Ugc3RlcHMgYW5kIGlnbm9yZSB0aGUgc2V0LVxuICAvLyAgICBjb29raWUtc3RyaW5nIGVudGlyZWx5LlxuICBpZiAobmFtZS5sZW5ndGggKyB2YWx1ZS5sZW5ndGggPiBtYXhOYW1lVmFsdWVQYWlyU2l6ZSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvLyA2LiBUaGUgY29va2llLW5hbWUgaXMgdGhlIG5hbWUgc3RyaW5nLCBhbmQgdGhlIGNvb2tpZS12YWx1ZSBpcyB0aGVcbiAgLy8gICAgdmFsdWUgc3RyaW5nLlxuICByZXR1cm4ge1xuICAgIG5hbWUsIHZhbHVlLCAuLi5wYXJzZVVucGFyc2VkQXR0cmlidXRlcyh1bnBhcnNlZEF0dHJpYnV0ZXMpXG4gIH1cbn1cblxuLyoqXG4gKiBQYXJzZXMgdGhlIHJlbWFpbmluZyBhdHRyaWJ1dGVzIG9mIGEgc2V0LWNvb2tpZSBoZWFkZXJcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtcmZjNjI2NWJpcyNzZWN0aW9uLTUuNFxuICogQHBhcmFtIHtzdHJpbmd9IHVucGFyc2VkQXR0cmlidXRlc1xuICogQHBhcmFtIHtbT2JqZWN0LjxzdHJpbmcsIHVua25vd24+XT17fX0gY29va2llQXR0cmlidXRlTGlzdFxuICovXG5mdW5jdGlvbiBwYXJzZVVucGFyc2VkQXR0cmlidXRlcyAodW5wYXJzZWRBdHRyaWJ1dGVzLCBjb29raWVBdHRyaWJ1dGVMaXN0ID0ge30pIHtcbiAgLy8gMS4gSWYgdGhlIHVucGFyc2VkLWF0dHJpYnV0ZXMgc3RyaW5nIGlzIGVtcHR5LCBza2lwIHRoZSByZXN0IG9mXG4gIC8vICAgIHRoZXNlIHN0ZXBzLlxuICBpZiAodW5wYXJzZWRBdHRyaWJ1dGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBjb29raWVBdHRyaWJ1dGVMaXN0XG4gIH1cblxuICAvLyAyLiBEaXNjYXJkIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIHVucGFyc2VkLWF0dHJpYnV0ZXMgKHdoaWNoXG4gIC8vICAgIHdpbGwgYmUgYSAleDNCIChcIjtcIikgY2hhcmFjdGVyKS5cbiAgYXNzZXJ0KHVucGFyc2VkQXR0cmlidXRlc1swXSA9PT0gJzsnKVxuICB1bnBhcnNlZEF0dHJpYnV0ZXMgPSB1bnBhcnNlZEF0dHJpYnV0ZXMuc2xpY2UoMSlcblxuICBsZXQgY29va2llQXYgPSAnJ1xuXG4gIC8vIDMuIElmIHRoZSByZW1haW5pbmcgdW5wYXJzZWQtYXR0cmlidXRlcyBjb250YWlucyBhICV4M0IgKFwiO1wiKVxuICAvLyAgICBjaGFyYWN0ZXI6XG4gIGlmICh1bnBhcnNlZEF0dHJpYnV0ZXMuaW5jbHVkZXMoJzsnKSkge1xuICAgIC8vIDEuIENvbnN1bWUgdGhlIGNoYXJhY3RlcnMgb2YgdGhlIHVucGFyc2VkLWF0dHJpYnV0ZXMgdXAgdG8sIGJ1dFxuICAgIC8vICAgIG5vdCBpbmNsdWRpbmcsIHRoZSBmaXJzdCAleDNCIChcIjtcIikgY2hhcmFjdGVyLlxuICAgIGNvb2tpZUF2ID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoXG4gICAgICAnOycsXG4gICAgICB1bnBhcnNlZEF0dHJpYnV0ZXMsXG4gICAgICB7IHBvc2l0aW9uOiAwIH1cbiAgICApXG4gICAgdW5wYXJzZWRBdHRyaWJ1dGVzID0gdW5wYXJzZWRBdHRyaWJ1dGVzLnNsaWNlKGNvb2tpZUF2Lmxlbmd0aClcbiAgfSBlbHNlIHtcbiAgICAvLyBPdGhlcndpc2U6XG5cbiAgICAvLyAxLiBDb25zdW1lIHRoZSByZW1haW5kZXIgb2YgdGhlIHVucGFyc2VkLWF0dHJpYnV0ZXMuXG4gICAgY29va2llQXYgPSB1bnBhcnNlZEF0dHJpYnV0ZXNcbiAgICB1bnBhcnNlZEF0dHJpYnV0ZXMgPSAnJ1xuICB9XG5cbiAgLy8gTGV0IHRoZSBjb29raWUtYXYgc3RyaW5nIGJlIHRoZSBjaGFyYWN0ZXJzIGNvbnN1bWVkIGluIHRoaXMgc3RlcC5cblxuICBsZXQgYXR0cmlidXRlTmFtZSA9ICcnXG4gIGxldCBhdHRyaWJ1dGVWYWx1ZSA9ICcnXG5cbiAgLy8gNC4gSWYgdGhlIGNvb2tpZS1hdiBzdHJpbmcgY29udGFpbnMgYSAleDNEIChcIj1cIikgY2hhcmFjdGVyOlxuICBpZiAoY29va2llQXYuaW5jbHVkZXMoJz0nKSkge1xuICAgIC8vIDEuIFRoZSAocG9zc2libHkgZW1wdHkpIGF0dHJpYnV0ZS1uYW1lIHN0cmluZyBjb25zaXN0cyBvZiB0aGVcbiAgICAvLyAgICBjaGFyYWN0ZXJzIHVwIHRvLCBidXQgbm90IGluY2x1ZGluZywgdGhlIGZpcnN0ICV4M0QgKFwiPVwiKVxuICAgIC8vICAgIGNoYXJhY3RlciwgYW5kIHRoZSAocG9zc2libHkgZW1wdHkpIGF0dHJpYnV0ZS12YWx1ZSBzdHJpbmdcbiAgICAvLyAgICBjb25zaXN0cyBvZiB0aGUgY2hhcmFjdGVycyBhZnRlciB0aGUgZmlyc3QgJXgzRCAoXCI9XCIpXG4gICAgLy8gICAgY2hhcmFjdGVyLlxuICAgIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogMCB9XG5cbiAgICBhdHRyaWJ1dGVOYW1lID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoXG4gICAgICAnPScsXG4gICAgICBjb29raWVBdixcbiAgICAgIHBvc2l0aW9uXG4gICAgKVxuICAgIGF0dHJpYnV0ZVZhbHVlID0gY29va2llQXYuc2xpY2UocG9zaXRpb24ucG9zaXRpb24gKyAxKVxuICB9IGVsc2Uge1xuICAgIC8vIE90aGVyd2lzZTpcblxuICAgIC8vIDEuIFRoZSBhdHRyaWJ1dGUtbmFtZSBzdHJpbmcgY29uc2lzdHMgb2YgdGhlIGVudGlyZSBjb29raWUtYXZcbiAgICAvLyAgICBzdHJpbmcsIGFuZCB0aGUgYXR0cmlidXRlLXZhbHVlIHN0cmluZyBpcyBlbXB0eS5cbiAgICBhdHRyaWJ1dGVOYW1lID0gY29va2llQXZcbiAgfVxuXG4gIC8vIDUuIFJlbW92ZSBhbnkgbGVhZGluZyBvciB0cmFpbGluZyBXU1AgY2hhcmFjdGVycyBmcm9tIHRoZSBhdHRyaWJ1dGUtXG4gIC8vICAgIG5hbWUgc3RyaW5nIGFuZCB0aGUgYXR0cmlidXRlLXZhbHVlIHN0cmluZy5cbiAgYXR0cmlidXRlTmFtZSA9IGF0dHJpYnV0ZU5hbWUudHJpbSgpXG4gIGF0dHJpYnV0ZVZhbHVlID0gYXR0cmlidXRlVmFsdWUudHJpbSgpXG5cbiAgLy8gNi4gSWYgdGhlIGF0dHJpYnV0ZS12YWx1ZSBpcyBsb25nZXIgdGhhbiAxMDI0IG9jdGV0cywgaWdub3JlIHRoZVxuICAvLyAgICBjb29raWUtYXYgc3RyaW5nIGFuZCByZXR1cm4gdG8gU3RlcCAxIG9mIHRoaXMgYWxnb3JpdGhtLlxuICBpZiAoYXR0cmlidXRlVmFsdWUubGVuZ3RoID4gbWF4QXR0cmlidXRlVmFsdWVTaXplKSB7XG4gICAgcmV0dXJuIHBhcnNlVW5wYXJzZWRBdHRyaWJ1dGVzKHVucGFyc2VkQXR0cmlidXRlcywgY29va2llQXR0cmlidXRlTGlzdClcbiAgfVxuXG4gIC8vIDcuIFByb2Nlc3MgdGhlIGF0dHJpYnV0ZS1uYW1lIGFuZCBhdHRyaWJ1dGUtdmFsdWUgYWNjb3JkaW5nIHRvIHRoZVxuICAvLyAgICByZXF1aXJlbWVudHMgaW4gdGhlIGZvbGxvd2luZyBzdWJzZWN0aW9ucy4gIChOb3RpY2UgdGhhdFxuICAvLyAgICBhdHRyaWJ1dGVzIHdpdGggdW5yZWNvZ25pemVkIGF0dHJpYnV0ZS1uYW1lcyBhcmUgaWdub3JlZC4pXG4gIGNvbnN0IGF0dHJpYnV0ZU5hbWVMb3dlcmNhc2UgPSBhdHRyaWJ1dGVOYW1lLnRvTG93ZXJDYXNlKClcblxuICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1yZmM2MjY1YmlzI3NlY3Rpb24tNS40LjFcbiAgLy8gSWYgdGhlIGF0dHJpYnV0ZS1uYW1lIGNhc2UtaW5zZW5zaXRpdmVseSBtYXRjaGVzIHRoZSBzdHJpbmdcbiAgLy8gXCJFeHBpcmVzXCIsIHRoZSB1c2VyIGFnZW50IE1VU1QgcHJvY2VzcyB0aGUgY29va2llLWF2IGFzIGZvbGxvd3MuXG4gIGlmIChhdHRyaWJ1dGVOYW1lTG93ZXJjYXNlID09PSAnZXhwaXJlcycpIHtcbiAgICAvLyAxLiBMZXQgdGhlIGV4cGlyeS10aW1lIGJlIHRoZSByZXN1bHQgb2YgcGFyc2luZyB0aGUgYXR0cmlidXRlLXZhbHVlXG4gICAgLy8gICAgYXMgY29va2llLWRhdGUgKHNlZSBTZWN0aW9uIDUuMS4xKS5cbiAgICBjb25zdCBleHBpcnlUaW1lID0gbmV3IERhdGUoYXR0cmlidXRlVmFsdWUpXG5cbiAgICAvLyAyLiBJZiB0aGUgYXR0cmlidXRlLXZhbHVlIGZhaWxlZCB0byBwYXJzZSBhcyBhIGNvb2tpZSBkYXRlLCBpZ25vcmVcbiAgICAvLyAgICB0aGUgY29va2llLWF2LlxuXG4gICAgY29va2llQXR0cmlidXRlTGlzdC5leHBpcmVzID0gZXhwaXJ5VGltZVxuICB9IGVsc2UgaWYgKGF0dHJpYnV0ZU5hbWVMb3dlcmNhc2UgPT09ICdtYXgtYWdlJykge1xuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjQuMlxuICAgIC8vIElmIHRoZSBhdHRyaWJ1dGUtbmFtZSBjYXNlLWluc2Vuc2l0aXZlbHkgbWF0Y2hlcyB0aGUgc3RyaW5nIFwiTWF4LVxuICAgIC8vIEFnZVwiLCB0aGUgdXNlciBhZ2VudCBNVVNUIHByb2Nlc3MgdGhlIGNvb2tpZS1hdiBhcyBmb2xsb3dzLlxuXG4gICAgLy8gMS4gSWYgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgYXR0cmlidXRlLXZhbHVlIGlzIG5vdCBhIERJR0lUIG9yIGFcbiAgICAvLyAgICBcIi1cIiBjaGFyYWN0ZXIsIGlnbm9yZSB0aGUgY29va2llLWF2LlxuICAgIGNvbnN0IGNoYXJDb2RlID0gYXR0cmlidXRlVmFsdWUuY2hhckNvZGVBdCgwKVxuXG4gICAgaWYgKChjaGFyQ29kZSA8IDQ4IHx8IGNoYXJDb2RlID4gNTcpICYmIGF0dHJpYnV0ZVZhbHVlWzBdICE9PSAnLScpIHtcbiAgICAgIHJldHVybiBwYXJzZVVucGFyc2VkQXR0cmlidXRlcyh1bnBhcnNlZEF0dHJpYnV0ZXMsIGNvb2tpZUF0dHJpYnV0ZUxpc3QpXG4gICAgfVxuXG4gICAgLy8gMi4gSWYgdGhlIHJlbWFpbmRlciBvZiBhdHRyaWJ1dGUtdmFsdWUgY29udGFpbnMgYSBub24tRElHSVRcbiAgICAvLyAgICBjaGFyYWN0ZXIsIGlnbm9yZSB0aGUgY29va2llLWF2LlxuICAgIGlmICghL15cXGQrJC8udGVzdChhdHRyaWJ1dGVWYWx1ZSkpIHtcbiAgICAgIHJldHVybiBwYXJzZVVucGFyc2VkQXR0cmlidXRlcyh1bnBhcnNlZEF0dHJpYnV0ZXMsIGNvb2tpZUF0dHJpYnV0ZUxpc3QpXG4gICAgfVxuXG4gICAgLy8gMy4gTGV0IGRlbHRhLXNlY29uZHMgYmUgdGhlIGF0dHJpYnV0ZS12YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gaW50ZWdlci5cbiAgICBjb25zdCBkZWx0YVNlY29uZHMgPSBOdW1iZXIoYXR0cmlidXRlVmFsdWUpXG5cbiAgICAvLyA0LiBMZXQgY29va2llLWFnZS1saW1pdCBiZSB0aGUgbWF4aW11bSBhZ2Ugb2YgdGhlIGNvb2tpZSAod2hpY2hcbiAgICAvLyAgICBTSE9VTEQgYmUgNDAwIGRheXMgb3IgbGVzcywgc2VlIFNlY3Rpb24gNC4xLjIuMikuXG5cbiAgICAvLyA1LiBTZXQgZGVsdGEtc2Vjb25kcyB0byB0aGUgc21hbGxlciBvZiBpdHMgcHJlc2VudCB2YWx1ZSBhbmQgY29va2llLVxuICAgIC8vICAgIGFnZS1saW1pdC5cbiAgICAvLyBkZWx0YVNlY29uZHMgPSBNYXRoLm1pbihkZWx0YVNlY29uZHMgKiAxMDAwLCBtYXhFeHBpcmVzTXMpXG5cbiAgICAvLyA2LiBJZiBkZWx0YS1zZWNvbmRzIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB6ZXJvICgwKSwgbGV0IGV4cGlyeS1cbiAgICAvLyAgICB0aW1lIGJlIHRoZSBlYXJsaWVzdCByZXByZXNlbnRhYmxlIGRhdGUgYW5kIHRpbWUuICBPdGhlcndpc2UsIGxldFxuICAgIC8vICAgIHRoZSBleHBpcnktdGltZSBiZSB0aGUgY3VycmVudCBkYXRlIGFuZCB0aW1lIHBsdXMgZGVsdGEtc2Vjb25kc1xuICAgIC8vICAgIHNlY29uZHMuXG4gICAgLy8gY29uc3QgZXhwaXJ5VGltZSA9IGRlbHRhU2Vjb25kcyA8PSAwID8gRGF0ZS5ub3coKSA6IERhdGUubm93KCkgKyBkZWx0YVNlY29uZHNcblxuICAgIC8vIDcuIEFwcGVuZCBhbiBhdHRyaWJ1dGUgdG8gdGhlIGNvb2tpZS1hdHRyaWJ1dGUtbGlzdCB3aXRoIGFuXG4gICAgLy8gICAgYXR0cmlidXRlLW5hbWUgb2YgTWF4LUFnZSBhbmQgYW4gYXR0cmlidXRlLXZhbHVlIG9mIGV4cGlyeS10aW1lLlxuICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3QubWF4QWdlID0gZGVsdGFTZWNvbmRzXG4gIH0gZWxzZSBpZiAoYXR0cmlidXRlTmFtZUxvd2VyY2FzZSA9PT0gJ2RvbWFpbicpIHtcbiAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1yZmM2MjY1YmlzI3NlY3Rpb24tNS40LjNcbiAgICAvLyBJZiB0aGUgYXR0cmlidXRlLW5hbWUgY2FzZS1pbnNlbnNpdGl2ZWx5IG1hdGNoZXMgdGhlIHN0cmluZyBcIkRvbWFpblwiLFxuICAgIC8vIHRoZSB1c2VyIGFnZW50IE1VU1QgcHJvY2VzcyB0aGUgY29va2llLWF2IGFzIGZvbGxvd3MuXG5cbiAgICAvLyAxLiBMZXQgY29va2llLWRvbWFpbiBiZSB0aGUgYXR0cmlidXRlLXZhbHVlLlxuICAgIGxldCBjb29raWVEb21haW4gPSBhdHRyaWJ1dGVWYWx1ZVxuXG4gICAgLy8gMi4gSWYgY29va2llLWRvbWFpbiBzdGFydHMgd2l0aCAleDJFIChcIi5cIiksIGxldCBjb29raWUtZG9tYWluIGJlXG4gICAgLy8gICAgY29va2llLWRvbWFpbiB3aXRob3V0IGl0cyBsZWFkaW5nICV4MkUgKFwiLlwiKS5cbiAgICBpZiAoY29va2llRG9tYWluWzBdID09PSAnLicpIHtcbiAgICAgIGNvb2tpZURvbWFpbiA9IGNvb2tpZURvbWFpbi5zbGljZSgxKVxuICAgIH1cblxuICAgIC8vIDMuIENvbnZlcnQgdGhlIGNvb2tpZS1kb21haW4gdG8gbG93ZXIgY2FzZS5cbiAgICBjb29raWVEb21haW4gPSBjb29raWVEb21haW4udG9Mb3dlckNhc2UoKVxuXG4gICAgLy8gNC4gQXBwZW5kIGFuIGF0dHJpYnV0ZSB0byB0aGUgY29va2llLWF0dHJpYnV0ZS1saXN0IHdpdGggYW5cbiAgICAvLyAgICBhdHRyaWJ1dGUtbmFtZSBvZiBEb21haW4gYW5kIGFuIGF0dHJpYnV0ZS12YWx1ZSBvZiBjb29raWUtZG9tYWluLlxuICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3QuZG9tYWluID0gY29va2llRG9tYWluXG4gIH0gZWxzZSBpZiAoYXR0cmlidXRlTmFtZUxvd2VyY2FzZSA9PT0gJ3BhdGgnKSB7XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtcmZjNjI2NWJpcyNzZWN0aW9uLTUuNC40XG4gICAgLy8gSWYgdGhlIGF0dHJpYnV0ZS1uYW1lIGNhc2UtaW5zZW5zaXRpdmVseSBtYXRjaGVzIHRoZSBzdHJpbmcgXCJQYXRoXCIsXG4gICAgLy8gdGhlIHVzZXIgYWdlbnQgTVVTVCBwcm9jZXNzIHRoZSBjb29raWUtYXYgYXMgZm9sbG93cy5cblxuICAgIC8vIDEuIElmIHRoZSBhdHRyaWJ1dGUtdmFsdWUgaXMgZW1wdHkgb3IgaWYgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGVcbiAgICAvLyAgICBhdHRyaWJ1dGUtdmFsdWUgaXMgbm90ICV4MkYgKFwiL1wiKTpcbiAgICBsZXQgY29va2llUGF0aCA9ICcnXG4gICAgaWYgKGF0dHJpYnV0ZVZhbHVlLmxlbmd0aCA9PT0gMCB8fCBhdHRyaWJ1dGVWYWx1ZVswXSAhPT0gJy8nKSB7XG4gICAgICAvLyAxLiBMZXQgY29va2llLXBhdGggYmUgdGhlIGRlZmF1bHQtcGF0aC5cbiAgICAgIGNvb2tpZVBhdGggPSAnLydcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT3RoZXJ3aXNlOlxuXG4gICAgICAvLyAxLiBMZXQgY29va2llLXBhdGggYmUgdGhlIGF0dHJpYnV0ZS12YWx1ZS5cbiAgICAgIGNvb2tpZVBhdGggPSBhdHRyaWJ1dGVWYWx1ZVxuICAgIH1cblxuICAgIC8vIDIuIEFwcGVuZCBhbiBhdHRyaWJ1dGUgdG8gdGhlIGNvb2tpZS1hdHRyaWJ1dGUtbGlzdCB3aXRoIGFuXG4gICAgLy8gICAgYXR0cmlidXRlLW5hbWUgb2YgUGF0aCBhbmQgYW4gYXR0cmlidXRlLXZhbHVlIG9mIGNvb2tpZS1wYXRoLlxuICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3QucGF0aCA9IGNvb2tpZVBhdGhcbiAgfSBlbHNlIGlmIChhdHRyaWJ1dGVOYW1lTG93ZXJjYXNlID09PSAnc2VjdXJlJykge1xuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjQuNVxuICAgIC8vIElmIHRoZSBhdHRyaWJ1dGUtbmFtZSBjYXNlLWluc2Vuc2l0aXZlbHkgbWF0Y2hlcyB0aGUgc3RyaW5nIFwiU2VjdXJlXCIsXG4gICAgLy8gdGhlIHVzZXIgYWdlbnQgTVVTVCBhcHBlbmQgYW4gYXR0cmlidXRlIHRvIHRoZSBjb29raWUtYXR0cmlidXRlLWxpc3RcbiAgICAvLyB3aXRoIGFuIGF0dHJpYnV0ZS1uYW1lIG9mIFNlY3VyZSBhbmQgYW4gZW1wdHkgYXR0cmlidXRlLXZhbHVlLlxuXG4gICAgY29va2llQXR0cmlidXRlTGlzdC5zZWN1cmUgPSB0cnVlXG4gIH0gZWxzZSBpZiAoYXR0cmlidXRlTmFtZUxvd2VyY2FzZSA9PT0gJ2h0dHBvbmx5Jykge1xuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjQuNlxuICAgIC8vIElmIHRoZSBhdHRyaWJ1dGUtbmFtZSBjYXNlLWluc2Vuc2l0aXZlbHkgbWF0Y2hlcyB0aGUgc3RyaW5nXG4gICAgLy8gXCJIdHRwT25seVwiLCB0aGUgdXNlciBhZ2VudCBNVVNUIGFwcGVuZCBhbiBhdHRyaWJ1dGUgdG8gdGhlIGNvb2tpZS1cbiAgICAvLyBhdHRyaWJ1dGUtbGlzdCB3aXRoIGFuIGF0dHJpYnV0ZS1uYW1lIG9mIEh0dHBPbmx5IGFuZCBhbiBlbXB0eVxuICAgIC8vIGF0dHJpYnV0ZS12YWx1ZS5cblxuICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3QuaHR0cE9ubHkgPSB0cnVlXG4gIH0gZWxzZSBpZiAoYXR0cmlidXRlTmFtZUxvd2VyY2FzZSA9PT0gJ3NhbWVzaXRlJykge1xuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjQuN1xuICAgIC8vIElmIHRoZSBhdHRyaWJ1dGUtbmFtZSBjYXNlLWluc2Vuc2l0aXZlbHkgbWF0Y2hlcyB0aGUgc3RyaW5nXG4gICAgLy8gXCJTYW1lU2l0ZVwiLCB0aGUgdXNlciBhZ2VudCBNVVNUIHByb2Nlc3MgdGhlIGNvb2tpZS1hdiBhcyBmb2xsb3dzOlxuXG4gICAgLy8gMS4gTGV0IGVuZm9yY2VtZW50IGJlIFwiRGVmYXVsdFwiLlxuICAgIGxldCBlbmZvcmNlbWVudCA9ICdEZWZhdWx0J1xuXG4gICAgY29uc3QgYXR0cmlidXRlVmFsdWVMb3dlcmNhc2UgPSBhdHRyaWJ1dGVWYWx1ZS50b0xvd2VyQ2FzZSgpXG4gICAgLy8gMi4gSWYgY29va2llLWF2J3MgYXR0cmlidXRlLXZhbHVlIGlzIGEgY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBmb3JcbiAgICAvLyAgICBcIk5vbmVcIiwgc2V0IGVuZm9yY2VtZW50IHRvIFwiTm9uZVwiLlxuICAgIGlmIChhdHRyaWJ1dGVWYWx1ZUxvd2VyY2FzZS5pbmNsdWRlcygnbm9uZScpKSB7XG4gICAgICBlbmZvcmNlbWVudCA9ICdOb25lJ1xuICAgIH1cblxuICAgIC8vIDMuIElmIGNvb2tpZS1hdidzIGF0dHJpYnV0ZS12YWx1ZSBpcyBhIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yXG4gICAgLy8gICAgXCJTdHJpY3RcIiwgc2V0IGVuZm9yY2VtZW50IHRvIFwiU3RyaWN0XCIuXG4gICAgaWYgKGF0dHJpYnV0ZVZhbHVlTG93ZXJjYXNlLmluY2x1ZGVzKCdzdHJpY3QnKSkge1xuICAgICAgZW5mb3JjZW1lbnQgPSAnU3RyaWN0J1xuICAgIH1cblxuICAgIC8vIDQuIElmIGNvb2tpZS1hdidzIGF0dHJpYnV0ZS12YWx1ZSBpcyBhIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yXG4gICAgLy8gICAgXCJMYXhcIiwgc2V0IGVuZm9yY2VtZW50IHRvIFwiTGF4XCIuXG4gICAgaWYgKGF0dHJpYnV0ZVZhbHVlTG93ZXJjYXNlLmluY2x1ZGVzKCdsYXgnKSkge1xuICAgICAgZW5mb3JjZW1lbnQgPSAnTGF4J1xuICAgIH1cblxuICAgIC8vIDUuIEFwcGVuZCBhbiBhdHRyaWJ1dGUgdG8gdGhlIGNvb2tpZS1hdHRyaWJ1dGUtbGlzdCB3aXRoIGFuXG4gICAgLy8gICAgYXR0cmlidXRlLW5hbWUgb2YgXCJTYW1lU2l0ZVwiIGFuZCBhbiBhdHRyaWJ1dGUtdmFsdWUgb2ZcbiAgICAvLyAgICBlbmZvcmNlbWVudC5cbiAgICBjb29raWVBdHRyaWJ1dGVMaXN0LnNhbWVTaXRlID0gZW5mb3JjZW1lbnRcbiAgfSBlbHNlIHtcbiAgICBjb29raWVBdHRyaWJ1dGVMaXN0LnVucGFyc2VkID8/PSBbXVxuXG4gICAgY29va2llQXR0cmlidXRlTGlzdC51bnBhcnNlZC5wdXNoKGAke2F0dHJpYnV0ZU5hbWV9PSR7YXR0cmlidXRlVmFsdWV9YClcbiAgfVxuXG4gIC8vIDguIFJldHVybiB0byBTdGVwIDEgb2YgdGhpcyBhbGdvcml0aG0uXG4gIHJldHVybiBwYXJzZVVucGFyc2VkQXR0cmlidXRlcyh1bnBhcnNlZEF0dHJpYnV0ZXMsIGNvb2tpZUF0dHJpYnV0ZUxpc3QpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBwYXJzZVNldENvb2tpZSxcbiAgcGFyc2VVbnBhcnNlZEF0dHJpYnV0ZXNcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgcGFyc2VTZXRDb29raWUgfSA9IHJlcXVpcmUoJy4vcGFyc2UnKVxuY29uc3QgeyBzdHJpbmdpZnksIGdldEhlYWRlcnNMaXN0IH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3dlYmlkbCcpXG5jb25zdCB7IEhlYWRlcnMgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2hlYWRlcnMnKVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IENvb2tpZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IG5hbWVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2YWx1ZVxuICogQHByb3BlcnR5IHtEYXRlfG51bWJlcnx1bmRlZmluZWR9IGV4cGlyZXNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfHVuZGVmaW5lZH0gbWF4QWdlXG4gKiBAcHJvcGVydHkge3N0cmluZ3x1bmRlZmluZWR9IGRvbWFpblxuICogQHByb3BlcnR5IHtzdHJpbmd8dW5kZWZpbmVkfSBwYXRoXG4gKiBAcHJvcGVydHkge2Jvb2xlYW58dW5kZWZpbmVkfSBzZWN1cmVcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbnx1bmRlZmluZWR9IGh0dHBPbmx5XG4gKiBAcHJvcGVydHkgeydTdHJpY3QnfCdMYXgnfCdOb25lJ30gc2FtZVNpdGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IHVucGFyc2VkXG4gKi9cblxuLyoqXG4gKiBAcGFyYW0ge0hlYWRlcnN9IGhlYWRlcnNcbiAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fVxuICovXG5mdW5jdGlvbiBnZXRDb29raWVzIChoZWFkZXJzKSB7XG4gIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdnZXRDb29raWVzJyB9KVxuXG4gIHdlYmlkbC5icmFuZENoZWNrKGhlYWRlcnMsIEhlYWRlcnMsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gIGNvbnN0IGNvb2tpZSA9IGhlYWRlcnMuZ2V0KCdjb29raWUnKVxuICBjb25zdCBvdXQgPSB7fVxuXG4gIGlmICghY29va2llKSB7XG4gICAgcmV0dXJuIG91dFxuICB9XG5cbiAgZm9yIChjb25zdCBwaWVjZSBvZiBjb29raWUuc3BsaXQoJzsnKSkge1xuICAgIGNvbnN0IFtuYW1lLCAuLi52YWx1ZV0gPSBwaWVjZS5zcGxpdCgnPScpXG5cbiAgICBvdXRbbmFtZS50cmltKCldID0gdmFsdWUuam9pbignPScpXG4gIH1cblxuICByZXR1cm4gb3V0XG59XG5cbi8qKlxuICogQHBhcmFtIHtIZWFkZXJzfSBoZWFkZXJzXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHt7IHBhdGg/OiBzdHJpbmcsIGRvbWFpbj86IHN0cmluZyB9fHVuZGVmaW5lZH0gYXR0cmlidXRlc1xuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIGRlbGV0ZUNvb2tpZSAoaGVhZGVycywgbmFtZSwgYXR0cmlidXRlcykge1xuICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnZGVsZXRlQ29va2llJyB9KVxuXG4gIHdlYmlkbC5icmFuZENoZWNrKGhlYWRlcnMsIEhlYWRlcnMsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcobmFtZSlcbiAgYXR0cmlidXRlcyA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRlbGV0ZUNvb2tpZUF0dHJpYnV0ZXMoYXR0cmlidXRlcylcblxuICAvLyBNYXRjaGVzIGJlaGF2aW9yIG9mXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9kZW5vbGFuZC9kZW5vX3N0ZC9ibG9iLzYzODI3YjE2MzMwYjgyNDg5YTA0NjE0MDI3YzMzYjc5MDRlMDhiZTUvaHR0cC9jb29raWUudHMjTDI3OFxuICBzZXRDb29raWUoaGVhZGVycywge1xuICAgIG5hbWUsXG4gICAgdmFsdWU6ICcnLFxuICAgIGV4cGlyZXM6IG5ldyBEYXRlKDApLFxuICAgIC4uLmF0dHJpYnV0ZXNcbiAgfSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0hlYWRlcnN9IGhlYWRlcnNcbiAqIEByZXR1cm5zIHtDb29raWVbXX1cbiAqL1xuZnVuY3Rpb24gZ2V0U2V0Q29va2llcyAoaGVhZGVycykge1xuICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnZ2V0U2V0Q29va2llcycgfSlcblxuICB3ZWJpZGwuYnJhbmRDaGVjayhoZWFkZXJzLCBIZWFkZXJzLCB7IHN0cmljdDogZmFsc2UgfSlcblxuICBjb25zdCBjb29raWVzID0gZ2V0SGVhZGVyc0xpc3QoaGVhZGVycykuY29va2llc1xuXG4gIGlmICghY29va2llcykge1xuICAgIHJldHVybiBbXVxuICB9XG5cbiAgLy8gSW4gb2xkZXIgdmVyc2lvbnMgb2YgdW5kaWNpLCBjb29raWVzIGlzIGEgbGlzdCBvZiBuYW1lOnZhbHVlLlxuICByZXR1cm4gY29va2llcy5tYXAoKHBhaXIpID0+IHBhcnNlU2V0Q29va2llKEFycmF5LmlzQXJyYXkocGFpcikgPyBwYWlyWzFdIDogcGFpcikpXG59XG5cbi8qKlxuICogQHBhcmFtIHtIZWFkZXJzfSBoZWFkZXJzXG4gKiBAcGFyYW0ge0Nvb2tpZX0gY29va2llXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gc2V0Q29va2llIChoZWFkZXJzLCBjb29raWUpIHtcbiAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAyLCB7IGhlYWRlcjogJ3NldENvb2tpZScgfSlcblxuICB3ZWJpZGwuYnJhbmRDaGVjayhoZWFkZXJzLCBIZWFkZXJzLCB7IHN0cmljdDogZmFsc2UgfSlcblxuICBjb29raWUgPSB3ZWJpZGwuY29udmVydGVycy5Db29raWUoY29va2llKVxuXG4gIGNvbnN0IHN0ciA9IHN0cmluZ2lmeShjb29raWUpXG5cbiAgaWYgKHN0cikge1xuICAgIGhlYWRlcnMuYXBwZW5kKCdTZXQtQ29va2llJywgc3RyaW5naWZ5KGNvb2tpZSkpXG4gIH1cbn1cblxud2ViaWRsLmNvbnZlcnRlcnMuRGVsZXRlQ29va2llQXR0cmlidXRlcyA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyksXG4gICAga2V5OiAncGF0aCcsXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcih3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcpLFxuICAgIGtleTogJ2RvbWFpbicsXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH1cbl0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzLkNvb2tpZSA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIGtleTogJ25hbWUnXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICBrZXk6ICd2YWx1ZSdcbiAgfSxcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKCh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBsb25nIGxvbmcnXSh2YWx1ZSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBEYXRlKHZhbHVlKVxuICAgIH0pLFxuICAgIGtleTogJ2V4cGlyZXMnLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbFxuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnNbJ2xvbmcgbG9uZyddKSxcbiAgICBrZXk6ICdtYXhBZ2UnLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbFxuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKSxcbiAgICBrZXk6ICdkb21haW4nLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbFxuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKSxcbiAgICBrZXk6ICdwYXRoJyxcbiAgICBkZWZhdWx0VmFsdWU6IG51bGxcbiAgfSxcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4pLFxuICAgIGtleTogJ3NlY3VyZScsXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcih3ZWJpZGwuY29udmVydGVycy5ib29sZWFuKSxcbiAgICBrZXk6ICdodHRwT25seScsXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyxcbiAgICBrZXk6ICdzYW1lU2l0ZScsXG4gICAgYWxsb3dlZFZhbHVlczogWydTdHJpY3QnLCAnTGF4JywgJ05vbmUnXVxuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKSxcbiAgICBrZXk6ICd1bnBhcnNlZCcsXG4gICAgZGVmYXVsdFZhbHVlOiBbXVxuICB9XG5dKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0Q29va2llcyxcbiAgZGVsZXRlQ29va2llLFxuICBnZXRTZXRDb29raWVzLFxuICBzZXRDb29raWVcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbi8vIFRoaXMgaXMgYSBHbG9iYWxseSBVbmlxdWUgSWRlbnRpZmllciB1bmlxdWUgdXNlZFxuLy8gdG8gdmFsaWRhdGUgdGhhdCB0aGUgZW5kcG9pbnQgYWNjZXB0cyB3ZWJzb2NrZXRcbi8vIGNvbm5lY3Rpb25zLlxuLy8gU2VlIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM2NDU1Lmh0bWwjc2VjdGlvbi0xLjNcbmNvbnN0IHVpZCA9ICcyNThFQUZBNS1FOTE0LTQ3REEtOTVDQS1DNUFCMERDODVCMTEnXG5cbi8qKiBAdHlwZSB7UHJvcGVydHlEZXNjcmlwdG9yfSAqL1xuY29uc3Qgc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyA9IHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgd3JpdGFibGU6IGZhbHNlLFxuICBjb25maWd1cmFibGU6IGZhbHNlXG59XG5cbmNvbnN0IHN0YXRlcyA9IHtcbiAgQ09OTkVDVElORzogMCxcbiAgT1BFTjogMSxcbiAgQ0xPU0lORzogMixcbiAgQ0xPU0VEOiAzXG59XG5cbmNvbnN0IG9wY29kZXMgPSB7XG4gIENPTlRJTlVBVElPTjogMHgwLFxuICBURVhUOiAweDEsXG4gIEJJTkFSWTogMHgyLFxuICBDTE9TRTogMHg4LFxuICBQSU5HOiAweDksXG4gIFBPTkc6IDB4QVxufVxuXG5jb25zdCBtYXhVbnNpZ25lZDE2Qml0ID0gMiAqKiAxNiAtIDEgLy8gNjU1MzVcblxuY29uc3QgcGFyc2VyU3RhdGVzID0ge1xuICBJTkZPOiAwLFxuICBQQVlMT0FETEVOR1RIXzE2OiAyLFxuICBQQVlMT0FETEVOR1RIXzY0OiAzLFxuICBSRUFEX0RBVEE6IDRcbn1cblxuY29uc3QgZW1wdHlCdWZmZXIgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMClcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHVpZCxcbiAgc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgc3RhdGVzLFxuICBvcGNvZGVzLFxuICBtYXhVbnNpZ25lZDE2Qml0LFxuICBwYXJzZXJTdGF0ZXMsXG4gIGVtcHR5QnVmZmVyXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAga1dlYlNvY2tldFVSTDogU3ltYm9sKCd1cmwnKSxcbiAga1JlYWR5U3RhdGU6IFN5bWJvbCgncmVhZHkgc3RhdGUnKSxcbiAga0NvbnRyb2xsZXI6IFN5bWJvbCgnY29udHJvbGxlcicpLFxuICBrUmVzcG9uc2U6IFN5bWJvbCgncmVzcG9uc2UnKSxcbiAga0JpbmFyeVR5cGU6IFN5bWJvbCgnYmluYXJ5IHR5cGUnKSxcbiAga1NlbnRDbG9zZTogU3ltYm9sKCdzZW50IGNsb3NlJyksXG4gIGtSZWNlaXZlZENsb3NlOiBTeW1ib2woJ3JlY2VpdmVkIGNsb3NlJyksXG4gIGtCeXRlUGFyc2VyOiBTeW1ib2woJ2J5dGUgcGFyc2VyJylcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuLi9mZXRjaC93ZWJpZGwnKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5IH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBNZXNzYWdlUG9ydCB9ID0gcmVxdWlyZSgnd29ya2VyX3RocmVhZHMnKVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvY29tbXMuaHRtbCNtZXNzYWdlZXZlbnRcbiAqL1xuY2xhc3MgTWVzc2FnZUV2ZW50IGV4dGVuZHMgRXZlbnQge1xuICAjZXZlbnRJbml0XG5cbiAgY29uc3RydWN0b3IgKHR5cGUsIGV2ZW50SW5pdERpY3QgPSB7fSkge1xuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdNZXNzYWdlRXZlbnQgY29uc3RydWN0b3InIH0pXG5cbiAgICB0eXBlID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKHR5cGUpXG4gICAgZXZlbnRJbml0RGljdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLk1lc3NhZ2VFdmVudEluaXQoZXZlbnRJbml0RGljdClcblxuICAgIHN1cGVyKHR5cGUsIGV2ZW50SW5pdERpY3QpXG5cbiAgICB0aGlzLiNldmVudEluaXQgPSBldmVudEluaXREaWN0XG4gIH1cblxuICBnZXQgZGF0YSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgTWVzc2FnZUV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5kYXRhXG4gIH1cblxuICBnZXQgb3JpZ2luICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBNZXNzYWdlRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0Lm9yaWdpblxuICB9XG5cbiAgZ2V0IGxhc3RFdmVudElkICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBNZXNzYWdlRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0Lmxhc3RFdmVudElkXG4gIH1cblxuICBnZXQgc291cmNlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBNZXNzYWdlRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LnNvdXJjZVxuICB9XG5cbiAgZ2V0IHBvcnRzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBNZXNzYWdlRXZlbnQpXG5cbiAgICBpZiAoIU9iamVjdC5pc0Zyb3plbih0aGlzLiNldmVudEluaXQucG9ydHMpKSB7XG4gICAgICBPYmplY3QuZnJlZXplKHRoaXMuI2V2ZW50SW5pdC5wb3J0cylcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LnBvcnRzXG4gIH1cblxuICBpbml0TWVzc2FnZUV2ZW50IChcbiAgICB0eXBlLFxuICAgIGJ1YmJsZXMgPSBmYWxzZSxcbiAgICBjYW5jZWxhYmxlID0gZmFsc2UsXG4gICAgZGF0YSA9IG51bGwsXG4gICAgb3JpZ2luID0gJycsXG4gICAgbGFzdEV2ZW50SWQgPSAnJyxcbiAgICBzb3VyY2UgPSBudWxsLFxuICAgIHBvcnRzID0gW11cbiAgKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgTWVzc2FnZUV2ZW50KVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ01lc3NhZ2VFdmVudC5pbml0TWVzc2FnZUV2ZW50JyB9KVxuXG4gICAgcmV0dXJuIG5ldyBNZXNzYWdlRXZlbnQodHlwZSwge1xuICAgICAgYnViYmxlcywgY2FuY2VsYWJsZSwgZGF0YSwgb3JpZ2luLCBsYXN0RXZlbnRJZCwgc291cmNlLCBwb3J0c1xuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI3RoZS1jbG9zZWV2ZW50LWludGVyZmFjZVxuICovXG5jbGFzcyBDbG9zZUV2ZW50IGV4dGVuZHMgRXZlbnQge1xuICAjZXZlbnRJbml0XG5cbiAgY29uc3RydWN0b3IgKHR5cGUsIGV2ZW50SW5pdERpY3QgPSB7fSkge1xuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdDbG9zZUV2ZW50IGNvbnN0cnVjdG9yJyB9KVxuXG4gICAgdHlwZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyh0eXBlKVxuICAgIGV2ZW50SW5pdERpY3QgPSB3ZWJpZGwuY29udmVydGVycy5DbG9zZUV2ZW50SW5pdChldmVudEluaXREaWN0KVxuXG4gICAgc3VwZXIodHlwZSwgZXZlbnRJbml0RGljdClcblxuICAgIHRoaXMuI2V2ZW50SW5pdCA9IGV2ZW50SW5pdERpY3RcbiAgfVxuXG4gIGdldCB3YXNDbGVhbiAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2xvc2VFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQud2FzQ2xlYW5cbiAgfVxuXG4gIGdldCBjb2RlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDbG9zZUV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5jb2RlXG4gIH1cblxuICBnZXQgcmVhc29uICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDbG9zZUV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5yZWFzb25cbiAgfVxufVxuXG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS93ZWJhcHBhcGlzLmh0bWwjdGhlLWVycm9yZXZlbnQtaW50ZXJmYWNlXG5jbGFzcyBFcnJvckV2ZW50IGV4dGVuZHMgRXZlbnQge1xuICAjZXZlbnRJbml0XG5cbiAgY29uc3RydWN0b3IgKHR5cGUsIGV2ZW50SW5pdERpY3QpIHtcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRXJyb3JFdmVudCBjb25zdHJ1Y3RvcicgfSlcblxuICAgIHN1cGVyKHR5cGUsIGV2ZW50SW5pdERpY3QpXG5cbiAgICB0eXBlID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKHR5cGUpXG4gICAgZXZlbnRJbml0RGljdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLkVycm9yRXZlbnRJbml0KGV2ZW50SW5pdERpY3QgPz8ge30pXG5cbiAgICB0aGlzLiNldmVudEluaXQgPSBldmVudEluaXREaWN0XG4gIH1cblxuICBnZXQgbWVzc2FnZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRXJyb3JFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQubWVzc2FnZVxuICB9XG5cbiAgZ2V0IGZpbGVuYW1lICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBFcnJvckV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5maWxlbmFtZVxuICB9XG5cbiAgZ2V0IGxpbmVubyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRXJyb3JFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQubGluZW5vXG4gIH1cblxuICBnZXQgY29sbm8gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEVycm9yRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LmNvbG5vXG4gIH1cblxuICBnZXQgZXJyb3IgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEVycm9yRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LmVycm9yXG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTWVzc2FnZUV2ZW50LnByb3RvdHlwZSwge1xuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnTWVzc2FnZUV2ZW50JyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSxcbiAgZGF0YToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb3JpZ2luOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBsYXN0RXZlbnRJZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgc291cmNlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBwb3J0czoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgaW5pdE1lc3NhZ2VFdmVudDoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2xvc2VFdmVudC5wcm90b3R5cGUsIHtcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0Nsb3NlRXZlbnQnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9LFxuICByZWFzb246IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNvZGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHdhc0NsZWFuOiBrRW51bWVyYWJsZVByb3BlcnR5XG59KVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhFcnJvckV2ZW50LnByb3RvdHlwZSwge1xuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnRXJyb3JFdmVudCcsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0sXG4gIG1lc3NhZ2U6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGZpbGVuYW1lOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBsaW5lbm86IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNvbG5vOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBlcnJvcjoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxud2ViaWRsLmNvbnZlcnRlcnMuTWVzc2FnZVBvcnQgPSB3ZWJpZGwuaW50ZXJmYWNlQ29udmVydGVyKE1lc3NhZ2VQb3J0KVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8TWVzc2FnZVBvcnQ+J10gPSB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLk1lc3NhZ2VQb3J0XG4pXG5cbmNvbnN0IGV2ZW50SW5pdCA9IFtcbiAge1xuICAgIGtleTogJ2J1YmJsZXMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjYW5jZWxhYmxlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4sXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZVxuICB9LFxuICB7XG4gICAga2V5OiAnY29tcG9zZWQnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH1cbl1cblxud2ViaWRsLmNvbnZlcnRlcnMuTWVzc2FnZUV2ZW50SW5pdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAgLi4uZXZlbnRJbml0LFxuICB7XG4gICAga2V5OiAnZGF0YScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5hbnksXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdvcmlnaW4nLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZTogJydcbiAgfSxcbiAge1xuICAgIGtleTogJ2xhc3RFdmVudElkJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6ICcnXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdzb3VyY2UnLFxuICAgIC8vIE5vZGUgZG9lc24ndCBpbXBsZW1lbnQgV2luZG93UHJveHkgb3IgU2VydmljZVdvcmtlciwgc28gdGhlIG9ubHlcbiAgICAvLyB2YWxpZCB2YWx1ZSBmb3Igc291cmNlIGlzIGEgTWVzc2FnZVBvcnQuXG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuTWVzc2FnZVBvcnQpLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbFxuICB9LFxuICB7XG4gICAga2V5OiAncG9ydHMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPE1lc3NhZ2VQb3J0PiddLFxuICAgIGdldCBkZWZhdWx0VmFsdWUgKCkge1xuICAgICAgcmV0dXJuIFtdXG4gICAgfVxuICB9XG5dKVxuXG53ZWJpZGwuY29udmVydGVycy5DbG9zZUV2ZW50SW5pdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAgLi4uZXZlbnRJbml0LFxuICB7XG4gICAga2V5OiAnd2FzQ2xlYW4nLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjb2RlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBzaG9ydCddLFxuICAgIGRlZmF1bHRWYWx1ZTogMFxuICB9LFxuICB7XG4gICAga2V5OiAncmVhc29uJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6ICcnXG4gIH1cbl0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzLkVycm9yRXZlbnRJbml0ID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICAuLi5ldmVudEluaXQsXG4gIHtcbiAgICBrZXk6ICdtZXNzYWdlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6ICcnXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdmaWxlbmFtZScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcsXG4gICAgZGVmYXVsdFZhbHVlOiAnJ1xuICB9LFxuICB7XG4gICAga2V5OiAnbGluZW5vJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBsb25nJ10sXG4gICAgZGVmYXVsdFZhbHVlOiAwXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjb2xubycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgbG9uZyddLFxuICAgIGRlZmF1bHRWYWx1ZTogMFxuICB9LFxuICB7XG4gICAga2V5OiAnZXJyb3InLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYW55XG4gIH1cbl0pXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBNZXNzYWdlRXZlbnQsXG4gIENsb3NlRXZlbnQsXG4gIEVycm9yRXZlbnRcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsga1JlYWR5U3RhdGUsIGtDb250cm9sbGVyLCBrUmVzcG9uc2UsIGtCaW5hcnlUeXBlLCBrV2ViU29ja2V0VVJMIH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBzdGF0ZXMsIG9wY29kZXMgfSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IHsgTWVzc2FnZUV2ZW50LCBFcnJvckV2ZW50IH0gPSByZXF1aXJlKCcuL2V2ZW50cycpXG5cbi8qIGdsb2JhbHMgQmxvYiAqL1xuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL3dlYnNvY2tldCcpLldlYlNvY2tldH0gd3NcbiAqL1xuZnVuY3Rpb24gaXNFc3RhYmxpc2hlZCAod3MpIHtcbiAgLy8gSWYgdGhlIHNlcnZlcidzIHJlc3BvbnNlIGlzIHZhbGlkYXRlZCBhcyBwcm92aWRlZCBmb3IgYWJvdmUsIGl0IGlzXG4gIC8vIHNhaWQgdGhhdCBfVGhlIFdlYlNvY2tldCBDb25uZWN0aW9uIGlzIEVzdGFibGlzaGVkXyBhbmQgdGhhdCB0aGVcbiAgLy8gV2ViU29ja2V0IENvbm5lY3Rpb24gaXMgaW4gdGhlIE9QRU4gc3RhdGUuXG4gIHJldHVybiB3c1trUmVhZHlTdGF0ZV0gPT09IHN0YXRlcy5PUEVOXG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vd2Vic29ja2V0JykuV2ViU29ja2V0fSB3c1xuICovXG5mdW5jdGlvbiBpc0Nsb3NpbmcgKHdzKSB7XG4gIC8vIFVwb24gZWl0aGVyIHNlbmRpbmcgb3IgcmVjZWl2aW5nIGEgQ2xvc2UgY29udHJvbCBmcmFtZSwgaXQgaXMgc2FpZFxuICAvLyB0aGF0IF9UaGUgV2ViU29ja2V0IENsb3NpbmcgSGFuZHNoYWtlIGlzIFN0YXJ0ZWRfIGFuZCB0aGF0IHRoZVxuICAvLyBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBpbiB0aGUgQ0xPU0lORyBzdGF0ZS5cbiAgcmV0dXJuIHdzW2tSZWFkeVN0YXRlXSA9PT0gc3RhdGVzLkNMT1NJTkdcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi93ZWJzb2NrZXQnKS5XZWJTb2NrZXR9IHdzXG4gKi9cbmZ1bmN0aW9uIGlzQ2xvc2VkICh3cykge1xuICByZXR1cm4gd3Nba1JlYWR5U3RhdGVdID09PSBzdGF0ZXMuQ0xPU0VEXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtZXZlbnQtZmlyZVxuICogQHBhcmFtIHtzdHJpbmd9IGVcbiAqIEBwYXJhbSB7RXZlbnRUYXJnZXR9IHRhcmdldFxuICogQHBhcmFtIHtFdmVudEluaXQgfCB1bmRlZmluZWR9IGV2ZW50SW5pdERpY3RcbiAqL1xuZnVuY3Rpb24gZmlyZUV2ZW50IChlLCB0YXJnZXQsIGV2ZW50Q29uc3RydWN0b3IgPSBFdmVudCwgZXZlbnRJbml0RGljdCkge1xuICAvLyAxLiBJZiBldmVudENvbnN0cnVjdG9yIGlzIG5vdCBnaXZlbiwgdGhlbiBsZXQgZXZlbnRDb25zdHJ1Y3RvciBiZSBFdmVudC5cblxuICAvLyAyLiBMZXQgZXZlbnQgYmUgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhbiBldmVudCBnaXZlbiBldmVudENvbnN0cnVjdG9yLFxuICAvLyAgICBpbiB0aGUgcmVsZXZhbnQgcmVhbG0gb2YgdGFyZ2V0LlxuICAvLyAzLiBJbml0aWFsaXplIGV2ZW504oCZcyB0eXBlIGF0dHJpYnV0ZSB0byBlLlxuICBjb25zdCBldmVudCA9IG5ldyBldmVudENvbnN0cnVjdG9yKGUsIGV2ZW50SW5pdERpY3QpIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbmV3LWNhcFxuXG4gIC8vIDQuIEluaXRpYWxpemUgYW55IG90aGVyIElETCBhdHRyaWJ1dGVzIG9mIGV2ZW50IGFzIGRlc2NyaWJlZCBpbiB0aGVcbiAgLy8gICAgaW52b2NhdGlvbiBvZiB0aGlzIGFsZ29yaXRobS5cblxuICAvLyA1LiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBkaXNwYXRjaGluZyBldmVudCBhdCB0YXJnZXQsIHdpdGggbGVnYWN5IHRhcmdldFxuICAvLyAgICBvdmVycmlkZSBmbGFnIHNldCBpZiBzZXQuXG4gIHRhcmdldC5kaXNwYXRjaEV2ZW50KGV2ZW50KVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZmVlZGJhY2stZnJvbS10aGUtcHJvdG9jb2xcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL3dlYnNvY2tldCcpLldlYlNvY2tldH0gd3NcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlIE9wY29kZVxuICogQHBhcmFtIHtCdWZmZXJ9IGRhdGEgYXBwbGljYXRpb24gZGF0YVxuICovXG5mdW5jdGlvbiB3ZWJzb2NrZXRNZXNzYWdlUmVjZWl2ZWQgKHdzLCB0eXBlLCBkYXRhKSB7XG4gIC8vIDEuIElmIHJlYWR5IHN0YXRlIGlzIG5vdCBPUEVOICgxKSwgdGhlbiByZXR1cm4uXG4gIGlmICh3c1trUmVhZHlTdGF0ZV0gIT09IHN0YXRlcy5PUEVOKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyAyLiBMZXQgZGF0YUZvckV2ZW50IGJlIGRldGVybWluZWQgYnkgc3dpdGNoaW5nIG9uIHR5cGUgYW5kIGJpbmFyeSB0eXBlOlxuICBsZXQgZGF0YUZvckV2ZW50XG5cbiAgaWYgKHR5cGUgPT09IG9wY29kZXMuVEVYVCkge1xuICAgIC8vIC0+IHR5cGUgaW5kaWNhdGVzIHRoYXQgdGhlIGRhdGEgaXMgVGV4dFxuICAgIC8vICAgICAgYSBuZXcgRE9NU3RyaW5nIGNvbnRhaW5pbmcgZGF0YVxuICAgIHRyeSB7XG4gICAgICBkYXRhRm9yRXZlbnQgPSBuZXcgVGV4dERlY29kZXIoJ3V0Zi04JywgeyBmYXRhbDogdHJ1ZSB9KS5kZWNvZGUoZGF0YSlcbiAgICB9IGNhdGNoIHtcbiAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnUmVjZWl2ZWQgaW52YWxpZCBVVEYtOCBpbiB0ZXh0IGZyYW1lLicpXG4gICAgICByZXR1cm5cbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gb3Bjb2Rlcy5CSU5BUlkpIHtcbiAgICBpZiAod3Nba0JpbmFyeVR5cGVdID09PSAnYmxvYicpIHtcbiAgICAgIC8vIC0+IHR5cGUgaW5kaWNhdGVzIHRoYXQgdGhlIGRhdGEgaXMgQmluYXJ5IGFuZCBiaW5hcnkgdHlwZSBpcyBcImJsb2JcIlxuICAgICAgLy8gICAgICBhIG5ldyBCbG9iIG9iamVjdCwgY3JlYXRlZCBpbiB0aGUgcmVsZXZhbnQgUmVhbG0gb2YgdGhlIFdlYlNvY2tldFxuICAgICAgLy8gICAgICBvYmplY3QsIHRoYXQgcmVwcmVzZW50cyBkYXRhIGFzIGl0cyByYXcgZGF0YVxuICAgICAgZGF0YUZvckV2ZW50ID0gbmV3IEJsb2IoW2RhdGFdKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyAtPiB0eXBlIGluZGljYXRlcyB0aGF0IHRoZSBkYXRhIGlzIEJpbmFyeSBhbmQgYmluYXJ5IHR5cGUgaXMgXCJhcnJheWJ1ZmZlclwiXG4gICAgICAvLyAgICAgIGEgbmV3IEFycmF5QnVmZmVyIG9iamVjdCwgY3JlYXRlZCBpbiB0aGUgcmVsZXZhbnQgUmVhbG0gb2YgdGhlXG4gICAgICAvLyAgICAgIFdlYlNvY2tldCBvYmplY3QsIHdob3NlIGNvbnRlbnRzIGFyZSBkYXRhXG4gICAgICBkYXRhRm9yRXZlbnQgPSBuZXcgVWludDhBcnJheShkYXRhKS5idWZmZXJcbiAgICB9XG4gIH1cblxuICAvLyAzLiBGaXJlIGFuIGV2ZW50IG5hbWVkIG1lc3NhZ2UgYXQgdGhlIFdlYlNvY2tldCBvYmplY3QsIHVzaW5nIE1lc3NhZ2VFdmVudCxcbiAgLy8gICAgd2l0aCB0aGUgb3JpZ2luIGF0dHJpYnV0ZSBpbml0aWFsaXplZCB0byB0aGUgc2VyaWFsaXphdGlvbiBvZiB0aGUgV2ViU29ja2V0XG4gIC8vICAgIG9iamVjdOKAmXMgdXJsJ3Mgb3JpZ2luLCBhbmQgdGhlIGRhdGEgYXR0cmlidXRlIGluaXRpYWxpemVkIHRvIGRhdGFGb3JFdmVudC5cbiAgZmlyZUV2ZW50KCdtZXNzYWdlJywgd3MsIE1lc3NhZ2VFdmVudCwge1xuICAgIG9yaWdpbjogd3Nba1dlYlNvY2tldFVSTF0ub3JpZ2luLFxuICAgIGRhdGE6IGRhdGFGb3JFdmVudFxuICB9KVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1XG4gKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMjYxNlxuICogQHNlZSBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0zOTg0MDdcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm90b2NvbFxuICovXG5mdW5jdGlvbiBpc1ZhbGlkU3VicHJvdG9jb2wgKHByb3RvY29sKSB7XG4gIC8vIElmIHByZXNlbnQsIHRoaXMgdmFsdWUgaW5kaWNhdGVzIG9uZVxuICAvLyBvciBtb3JlIGNvbW1hLXNlcGFyYXRlZCBzdWJwcm90b2NvbCB0aGUgY2xpZW50IHdpc2hlcyB0byBzcGVhayxcbiAgLy8gb3JkZXJlZCBieSBwcmVmZXJlbmNlLiAgVGhlIGVsZW1lbnRzIHRoYXQgY29tcHJpc2UgdGhpcyB2YWx1ZVxuICAvLyBNVVNUIGJlIG5vbi1lbXB0eSBzdHJpbmdzIHdpdGggY2hhcmFjdGVycyBpbiB0aGUgcmFuZ2UgVSswMDIxIHRvXG4gIC8vIFUrMDA3RSBub3QgaW5jbHVkaW5nIHNlcGFyYXRvciBjaGFyYWN0ZXJzIGFzIGRlZmluZWQgaW5cbiAgLy8gW1JGQzI2MTZdIGFuZCBNVVNUIGFsbCBiZSB1bmlxdWUgc3RyaW5ncy5cbiAgaWYgKHByb3RvY29sLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgZm9yIChjb25zdCBjaGFyIG9mIHByb3RvY29sKSB7XG4gICAgY29uc3QgY29kZSA9IGNoYXIuY2hhckNvZGVBdCgwKVxuXG4gICAgaWYgKFxuICAgICAgY29kZSA8IDB4MjEgfHxcbiAgICAgIGNvZGUgPiAweDdFIHx8XG4gICAgICBjaGFyID09PSAnKCcgfHxcbiAgICAgIGNoYXIgPT09ICcpJyB8fFxuICAgICAgY2hhciA9PT0gJzwnIHx8XG4gICAgICBjaGFyID09PSAnPicgfHxcbiAgICAgIGNoYXIgPT09ICdAJyB8fFxuICAgICAgY2hhciA9PT0gJywnIHx8XG4gICAgICBjaGFyID09PSAnOycgfHxcbiAgICAgIGNoYXIgPT09ICc6JyB8fFxuICAgICAgY2hhciA9PT0gJ1xcXFwnIHx8XG4gICAgICBjaGFyID09PSAnXCInIHx8XG4gICAgICBjaGFyID09PSAnLycgfHxcbiAgICAgIGNoYXIgPT09ICdbJyB8fFxuICAgICAgY2hhciA9PT0gJ10nIHx8XG4gICAgICBjaGFyID09PSAnPycgfHxcbiAgICAgIGNoYXIgPT09ICc9JyB8fFxuICAgICAgY2hhciA9PT0gJ3snIHx8XG4gICAgICBjaGFyID09PSAnfScgfHxcbiAgICAgIGNvZGUgPT09IDMyIHx8IC8vIFNQXG4gICAgICBjb2RlID09PSA5IC8vIEhUXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tNy00XG4gKiBAcGFyYW0ge251bWJlcn0gY29kZVxuICovXG5mdW5jdGlvbiBpc1ZhbGlkU3RhdHVzQ29kZSAoY29kZSkge1xuICBpZiAoY29kZSA+PSAxMDAwICYmIGNvZGUgPCAxMDE1KSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGNvZGUgIT09IDEwMDQgJiYgLy8gcmVzZXJ2ZWRcbiAgICAgIGNvZGUgIT09IDEwMDUgJiYgLy8gXCJNVVNUIE5PVCBiZSBzZXQgYXMgYSBzdGF0dXMgY29kZVwiXG4gICAgICBjb2RlICE9PSAxMDA2IC8vIFwiTVVTVCBOT1QgYmUgc2V0IGFzIGEgc3RhdHVzIGNvZGVcIlxuICAgIClcbiAgfVxuXG4gIHJldHVybiBjb2RlID49IDMwMDAgJiYgY29kZSA8PSA0OTk5XG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vd2Vic29ja2V0JykuV2ViU29ja2V0fSB3c1xuICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSByZWFzb25cbiAqL1xuZnVuY3Rpb24gZmFpbFdlYnNvY2tldENvbm5lY3Rpb24gKHdzLCByZWFzb24pIHtcbiAgY29uc3QgeyBba0NvbnRyb2xsZXJdOiBjb250cm9sbGVyLCBba1Jlc3BvbnNlXTogcmVzcG9uc2UgfSA9IHdzXG5cbiAgY29udHJvbGxlci5hYm9ydCgpXG5cbiAgaWYgKHJlc3BvbnNlPy5zb2NrZXQgJiYgIXJlc3BvbnNlLnNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICByZXNwb25zZS5zb2NrZXQuZGVzdHJveSgpXG4gIH1cblxuICBpZiAocmVhc29uKSB7XG4gICAgZmlyZUV2ZW50KCdlcnJvcicsIHdzLCBFcnJvckV2ZW50LCB7XG4gICAgICBlcnJvcjogbmV3IEVycm9yKHJlYXNvbilcbiAgICB9KVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc0VzdGFibGlzaGVkLFxuICBpc0Nsb3NpbmcsXG4gIGlzQ2xvc2VkLFxuICBmaXJlRXZlbnQsXG4gIGlzVmFsaWRTdWJwcm90b2NvbCxcbiAgaXNWYWxpZFN0YXR1c0NvZGUsXG4gIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uLFxuICB3ZWJzb2NrZXRNZXNzYWdlUmVjZWl2ZWRcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGRpYWdub3N0aWNzQ2hhbm5lbCA9IHJlcXVpcmUoJ2RpYWdub3N0aWNzX2NoYW5uZWwnKVxuY29uc3QgeyB1aWQsIHN0YXRlcyB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3Qge1xuICBrUmVhZHlTdGF0ZSxcbiAga1NlbnRDbG9zZSxcbiAga0J5dGVQYXJzZXIsXG4gIGtSZWNlaXZlZENsb3NlXG59ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgZmlyZUV2ZW50LCBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbiB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgQ2xvc2VFdmVudCB9ID0gcmVxdWlyZSgnLi9ldmVudHMnKVxuY29uc3QgeyBtYWtlUmVxdWVzdCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvcmVxdWVzdCcpXG5jb25zdCB7IGZldGNoaW5nIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9pbmRleCcpXG5jb25zdCB7IEhlYWRlcnMgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2hlYWRlcnMnKVxuY29uc3QgeyBnZXRHbG9iYWxEaXNwYXRjaGVyIH0gPSByZXF1aXJlKCcuLi9nbG9iYWwnKVxuY29uc3QgeyBrSGVhZGVyc0xpc3QgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5cbmNvbnN0IGNoYW5uZWxzID0ge31cbmNoYW5uZWxzLm9wZW4gPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOndlYnNvY2tldDpvcGVuJylcbmNoYW5uZWxzLmNsb3NlID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTp3ZWJzb2NrZXQ6Y2xvc2UnKVxuY2hhbm5lbHMuc29ja2V0RXJyb3IgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOndlYnNvY2tldDpzb2NrZXRfZXJyb3InKVxuXG4vKiogQHR5cGUge2ltcG9ydCgnY3J5cHRvJyl9ICovXG5sZXQgY3J5cHRvXG50cnkge1xuICBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKVxufSBjYXRjaCB7XG5cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtd2Vic29ja2V0LWVzdGFibGlzaFxuICogQHBhcmFtIHtVUkx9IHVybFxuICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IHByb3RvY29sc1xuICogQHBhcmFtIHtpbXBvcnQoJy4vd2Vic29ja2V0JykuV2ViU29ja2V0fSB3c1xuICogQHBhcmFtIHsocmVzcG9uc2U6IGFueSkgPT4gdm9pZH0gb25Fc3RhYmxpc2hcbiAqIEBwYXJhbSB7UGFydGlhbDxpbXBvcnQoJy4uLy4uL3R5cGVzL3dlYnNvY2tldCcpLldlYlNvY2tldEluaXQ+fSBvcHRpb25zXG4gKi9cbmZ1bmN0aW9uIGVzdGFibGlzaFdlYlNvY2tldENvbm5lY3Rpb24gKHVybCwgcHJvdG9jb2xzLCB3cywgb25Fc3RhYmxpc2gsIG9wdGlvbnMpIHtcbiAgLy8gMS4gTGV0IHJlcXVlc3RVUkwgYmUgYSBjb3B5IG9mIHVybCwgd2l0aCBpdHMgc2NoZW1lIHNldCB0byBcImh0dHBcIiwgaWYgdXJs4oCZc1xuICAvLyAgICBzY2hlbWUgaXMgXCJ3c1wiLCBhbmQgdG8gXCJodHRwc1wiIG90aGVyd2lzZS5cbiAgY29uc3QgcmVxdWVzdFVSTCA9IHVybFxuXG4gIHJlcXVlc3RVUkwucHJvdG9jb2wgPSB1cmwucHJvdG9jb2wgPT09ICd3czonID8gJ2h0dHA6JyA6ICdodHRwczonXG5cbiAgLy8gMi4gTGV0IHJlcXVlc3QgYmUgYSBuZXcgcmVxdWVzdCwgd2hvc2UgVVJMIGlzIHJlcXVlc3RVUkwsIGNsaWVudCBpcyBjbGllbnQsXG4gIC8vICAgIHNlcnZpY2Utd29ya2VycyBtb2RlIGlzIFwibm9uZVwiLCByZWZlcnJlciBpcyBcIm5vLXJlZmVycmVyXCIsIG1vZGUgaXNcbiAgLy8gICAgXCJ3ZWJzb2NrZXRcIiwgY3JlZGVudGlhbHMgbW9kZSBpcyBcImluY2x1ZGVcIiwgY2FjaGUgbW9kZSBpcyBcIm5vLXN0b3JlXCIgLFxuICAvLyAgICBhbmQgcmVkaXJlY3QgbW9kZSBpcyBcImVycm9yXCIuXG4gIGNvbnN0IHJlcXVlc3QgPSBtYWtlUmVxdWVzdCh7XG4gICAgdXJsTGlzdDogW3JlcXVlc3RVUkxdLFxuICAgIHNlcnZpY2VXb3JrZXJzOiAnbm9uZScsXG4gICAgcmVmZXJyZXI6ICduby1yZWZlcnJlcicsXG4gICAgbW9kZTogJ3dlYnNvY2tldCcsXG4gICAgY3JlZGVudGlhbHM6ICdpbmNsdWRlJyxcbiAgICBjYWNoZTogJ25vLXN0b3JlJyxcbiAgICByZWRpcmVjdDogJ2Vycm9yJ1xuICB9KVxuXG4gIC8vIE5vdGU6IHVuZGljaSBleHRlbnNpb24sIGFsbG93IHNldHRpbmcgY3VzdG9tIGhlYWRlcnMuXG4gIGlmIChvcHRpb25zLmhlYWRlcnMpIHtcbiAgICBjb25zdCBoZWFkZXJzTGlzdCA9IG5ldyBIZWFkZXJzKG9wdGlvbnMuaGVhZGVycylba0hlYWRlcnNMaXN0XVxuXG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdCA9IGhlYWRlcnNMaXN0XG4gIH1cblxuICAvLyAzLiBBcHBlbmQgKGBVcGdyYWRlYCwgYHdlYnNvY2tldGApIHRvIHJlcXVlc3TigJlzIGhlYWRlciBsaXN0LlxuICAvLyA0LiBBcHBlbmQgKGBDb25uZWN0aW9uYCwgYFVwZ3JhZGVgKSB0byByZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cbiAgLy8gTm90ZTogYm90aCBvZiB0aGVzZSBhcmUgaGFuZGxlZCBieSB1bmRpY2kgY3VycmVudGx5LlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9ibG9iLzY4YzI2OWM0MTQ0YzQ0NmYzZjEyMjA5NTEzMzhkYWVmNGE2YjVlYzQvbGliL2NsaWVudC5qcyNMMTM5N1xuXG4gIC8vIDUuIExldCBrZXlWYWx1ZSBiZSBhIG5vbmNlIGNvbnNpc3Rpbmcgb2YgYSByYW5kb21seSBzZWxlY3RlZFxuICAvLyAgICAxNi1ieXRlIHZhbHVlIHRoYXQgaGFzIGJlZW4gZm9yZ2l2aW5nLWJhc2U2NC1lbmNvZGVkIGFuZFxuICAvLyAgICBpc29tb3JwaGljIGVuY29kZWQuXG4gIGNvbnN0IGtleVZhbHVlID0gY3J5cHRvLnJhbmRvbUJ5dGVzKDE2KS50b1N0cmluZygnYmFzZTY0JylcblxuICAvLyA2LiBBcHBlbmQgKGBTZWMtV2ViU29ja2V0LUtleWAsIGtleVZhbHVlKSB0byByZXF1ZXN04oCZc1xuICAvLyAgICBoZWFkZXIgbGlzdC5cbiAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ3NlYy13ZWJzb2NrZXQta2V5Jywga2V5VmFsdWUpXG5cbiAgLy8gNy4gQXBwZW5kIChgU2VjLVdlYlNvY2tldC1WZXJzaW9uYCwgYDEzYCkgdG8gcmVxdWVzdOKAmXNcbiAgLy8gICAgaGVhZGVyIGxpc3QuXG4gIHJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdzZWMtd2Vic29ja2V0LXZlcnNpb24nLCAnMTMnKVxuXG4gIC8vIDguIEZvciBlYWNoIHByb3RvY29sIGluIHByb3RvY29scywgY29tYmluZVxuICAvLyAgICAoYFNlYy1XZWJTb2NrZXQtUHJvdG9jb2xgLCBwcm90b2NvbCkgaW4gcmVxdWVzdOKAmXMgaGVhZGVyXG4gIC8vICAgIGxpc3QuXG4gIGZvciAoY29uc3QgcHJvdG9jb2wgb2YgcHJvdG9jb2xzKSB7XG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ3NlYy13ZWJzb2NrZXQtcHJvdG9jb2wnLCBwcm90b2NvbClcbiAgfVxuXG4gIC8vIDkuIExldCBwZXJtZXNzYWdlRGVmbGF0ZSBiZSBhIHVzZXItYWdlbnQgZGVmaW5lZFxuICAvLyAgICBcInBlcm1lc3NhZ2UtZGVmbGF0ZVwiIGV4dGVuc2lvbiBoZWFkZXIgdmFsdWUuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL2dlY2tvLWRldi9ibG9iL2NlNzgyMzRmNWU2NTNhNWQzOTE2ODEzZmY5OTBmMDUzNTEwMjI3YmMvbmV0d2Vyay9wcm90b2NvbC93ZWJzb2NrZXQvV2ViU29ja2V0Q2hhbm5lbC5jcHAjTDI2NzNcbiAgLy8gVE9ETzogZW5hYmxlIG9uY2UgcGVybWVzc2FnZS1kZWZsYXRlIGlzIHN1cHBvcnRlZFxuICBjb25zdCBwZXJtZXNzYWdlRGVmbGF0ZSA9ICcnIC8vICdwZXJtZXNzYWdlLWRlZmxhdGU7IDE1J1xuXG4gIC8vIDEwLiBBcHBlbmQgKGBTZWMtV2ViU29ja2V0LUV4dGVuc2lvbnNgLCBwZXJtZXNzYWdlRGVmbGF0ZSkgdG9cbiAgLy8gICAgIHJlcXVlc3TigJlzIGhlYWRlciBsaXN0LlxuICAvLyByZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnc2VjLXdlYnNvY2tldC1leHRlbnNpb25zJywgcGVybWVzc2FnZURlZmxhdGUpXG5cbiAgLy8gMTEuIEZldGNoIHJlcXVlc3Qgd2l0aCB1c2VQYXJhbGxlbFF1ZXVlIHNldCB0byB0cnVlLCBhbmRcbiAgLy8gICAgIHByb2Nlc3NSZXNwb25zZSBnaXZlbiByZXNwb25zZSBiZWluZyB0aGVzZSBzdGVwczpcbiAgY29uc3QgY29udHJvbGxlciA9IGZldGNoaW5nKHtcbiAgICByZXF1ZXN0LFxuICAgIHVzZVBhcmFsbGVsUXVldWU6IHRydWUsXG4gICAgZGlzcGF0Y2hlcjogb3B0aW9ucy5kaXNwYXRjaGVyID8/IGdldEdsb2JhbERpc3BhdGNoZXIoKSxcbiAgICBwcm9jZXNzUmVzcG9uc2UgKHJlc3BvbnNlKSB7XG4gICAgICAvLyAxLiBJZiByZXNwb25zZSBpcyBhIG5ldHdvcmsgZXJyb3Igb3IgaXRzIHN0YXR1cyBpcyBub3QgMTAxLFxuICAgICAgLy8gICAgZmFpbCB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24uXG4gICAgICBpZiAocmVzcG9uc2UudHlwZSA9PT0gJ2Vycm9yJyB8fCByZXNwb25zZS5zdGF0dXMgIT09IDEwMSkge1xuICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1JlY2VpdmVkIG5ldHdvcmsgZXJyb3Igb3Igbm9uLTEwMSBzdGF0dXMgY29kZS4nKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gMi4gSWYgcHJvdG9jb2xzIGlzIG5vdCB0aGUgZW1wdHkgbGlzdCBhbmQgZXh0cmFjdGluZyBoZWFkZXJcbiAgICAgIC8vICAgIGxpc3QgdmFsdWVzIGdpdmVuIGBTZWMtV2ViU29ja2V0LVByb3RvY29sYCBhbmQgcmVzcG9uc2XigJlzXG4gICAgICAvLyAgICBoZWFkZXIgbGlzdCByZXN1bHRzIGluIG51bGwsIGZhaWx1cmUsIG9yIHRoZSBlbXB0eSBieXRlXG4gICAgICAvLyAgICBzZXF1ZW5jZSwgdGhlbiBmYWlsIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbi5cbiAgICAgIGlmIChwcm90b2NvbHMubGVuZ3RoICE9PSAwICYmICFyZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ1NlYy1XZWJTb2NrZXQtUHJvdG9jb2wnKSkge1xuICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1NlcnZlciBkaWQgbm90IHJlc3BvbmQgd2l0aCBzZW50IHByb3RvY29scy4nKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gMy4gRm9sbG93IHRoZSByZXF1aXJlbWVudHMgc3RhdGVkIHN0ZXAgMiB0byBzdGVwIDYsIGluY2x1c2l2ZSxcbiAgICAgIC8vICAgIG9mIHRoZSBsYXN0IHNldCBvZiBzdGVwcyBpbiBzZWN0aW9uIDQuMSBvZiBUaGUgV2ViU29ja2V0XG4gICAgICAvLyAgICBQcm90b2NvbCB0byB2YWxpZGF0ZSByZXNwb25zZS4gVGhpcyBlaXRoZXIgcmVzdWx0cyBpbiBmYWlsXG4gICAgICAvLyAgICB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gb3IgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzXG4gICAgICAvLyAgICBlc3RhYmxpc2hlZC5cblxuICAgICAgLy8gMi4gSWYgdGhlIHJlc3BvbnNlIGxhY2tzIGFuIHxVcGdyYWRlfCBoZWFkZXIgZmllbGQgb3IgdGhlIHxVcGdyYWRlfFxuICAgICAgLy8gICAgaGVhZGVyIGZpZWxkIGNvbnRhaW5zIGEgdmFsdWUgdGhhdCBpcyBub3QgYW4gQVNDSUkgY2FzZS1cbiAgICAgIC8vICAgIGluc2Vuc2l0aXZlIG1hdGNoIGZvciB0aGUgdmFsdWUgXCJ3ZWJzb2NrZXRcIiwgdGhlIGNsaWVudCBNVVNUXG4gICAgICAvLyAgICBfRmFpbCB0aGUgV2ViU29ja2V0IENvbm5lY3Rpb25fLlxuICAgICAgaWYgKHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnVXBncmFkZScpPy50b0xvd2VyQ2FzZSgpICE9PSAnd2Vic29ja2V0Jykge1xuICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1NlcnZlciBkaWQgbm90IHNldCBVcGdyYWRlIGhlYWRlciB0byBcIndlYnNvY2tldFwiLicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyAzLiBJZiB0aGUgcmVzcG9uc2UgbGFja3MgYSB8Q29ubmVjdGlvbnwgaGVhZGVyIGZpZWxkIG9yIHRoZVxuICAgICAgLy8gICAgfENvbm5lY3Rpb258IGhlYWRlciBmaWVsZCBkb2Vzbid0IGNvbnRhaW4gYSB0b2tlbiB0aGF0IGlzIGFuXG4gICAgICAvLyAgICBBU0NJSSBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvciB0aGUgdmFsdWUgXCJVcGdyYWRlXCIsIHRoZSBjbGllbnRcbiAgICAgIC8vICAgIE1VU1QgX0ZhaWwgdGhlIFdlYlNvY2tldCBDb25uZWN0aW9uXy5cbiAgICAgIGlmIChyZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ0Nvbm5lY3Rpb24nKT8udG9Mb3dlckNhc2UoKSAhPT0gJ3VwZ3JhZGUnKSB7XG4gICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnU2VydmVyIGRpZCBub3Qgc2V0IENvbm5lY3Rpb24gaGVhZGVyIHRvIFwidXBncmFkZVwiLicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyA0LiBJZiB0aGUgcmVzcG9uc2UgbGFja3MgYSB8U2VjLVdlYlNvY2tldC1BY2NlcHR8IGhlYWRlciBmaWVsZCBvclxuICAgICAgLy8gICAgdGhlIHxTZWMtV2ViU29ja2V0LUFjY2VwdHwgY29udGFpbnMgYSB2YWx1ZSBvdGhlciB0aGFuIHRoZVxuICAgICAgLy8gICAgYmFzZTY0LWVuY29kZWQgU0hBLTEgb2YgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlIHxTZWMtV2ViU29ja2V0LVxuICAgICAgLy8gICAgS2V5fCAoYXMgYSBzdHJpbmcsIG5vdCBiYXNlNjQtZGVjb2RlZCkgd2l0aCB0aGUgc3RyaW5nIFwiMjU4RUFGQTUtXG4gICAgICAvLyAgICBFOTE0LTQ3REEtOTVDQS1DNUFCMERDODVCMTFcIiBidXQgaWdub3JpbmcgYW55IGxlYWRpbmcgYW5kXG4gICAgICAvLyAgICB0cmFpbGluZyB3aGl0ZXNwYWNlLCB0aGUgY2xpZW50IE1VU1QgX0ZhaWwgdGhlIFdlYlNvY2tldFxuICAgICAgLy8gICAgQ29ubmVjdGlvbl8uXG4gICAgICBjb25zdCBzZWNXU0FjY2VwdCA9IHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnU2VjLVdlYlNvY2tldC1BY2NlcHQnKVxuICAgICAgY29uc3QgZGlnZXN0ID0gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTEnKS51cGRhdGUoa2V5VmFsdWUgKyB1aWQpLmRpZ2VzdCgnYmFzZTY0JylcbiAgICAgIGlmIChzZWNXU0FjY2VwdCAhPT0gZGlnZXN0KSB7XG4gICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnSW5jb3JyZWN0IGhhc2ggcmVjZWl2ZWQgaW4gU2VjLVdlYlNvY2tldC1BY2NlcHQgaGVhZGVyLicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyA1LiBJZiB0aGUgcmVzcG9uc2UgaW5jbHVkZXMgYSB8U2VjLVdlYlNvY2tldC1FeHRlbnNpb25zfCBoZWFkZXJcbiAgICAgIC8vICAgIGZpZWxkIGFuZCB0aGlzIGhlYWRlciBmaWVsZCBpbmRpY2F0ZXMgdGhlIHVzZSBvZiBhbiBleHRlbnNpb25cbiAgICAgIC8vICAgIHRoYXQgd2FzIG5vdCBwcmVzZW50IGluIHRoZSBjbGllbnQncyBoYW5kc2hha2UgKHRoZSBzZXJ2ZXIgaGFzXG4gICAgICAvLyAgICBpbmRpY2F0ZWQgYW4gZXh0ZW5zaW9uIG5vdCByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCksIHRoZSBjbGllbnRcbiAgICAgIC8vICAgIE1VU1QgX0ZhaWwgdGhlIFdlYlNvY2tldCBDb25uZWN0aW9uXy4gIChUaGUgcGFyc2luZyBvZiB0aGlzXG4gICAgICAvLyAgICBoZWFkZXIgZmllbGQgdG8gZGV0ZXJtaW5lIHdoaWNoIGV4dGVuc2lvbnMgYXJlIHJlcXVlc3RlZCBpc1xuICAgICAgLy8gICAgZGlzY3Vzc2VkIGluIFNlY3Rpb24gOS4xLilcbiAgICAgIGNvbnN0IHNlY0V4dGVuc2lvbiA9IHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnU2VjLVdlYlNvY2tldC1FeHRlbnNpb25zJylcblxuICAgICAgaWYgKHNlY0V4dGVuc2lvbiAhPT0gbnVsbCAmJiBzZWNFeHRlbnNpb24gIT09IHBlcm1lc3NhZ2VEZWZsYXRlKSB7XG4gICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnUmVjZWl2ZWQgZGlmZmVyZW50IHBlcm1lc3NhZ2UtZGVmbGF0ZSB0aGFuIHRoZSBvbmUgc2V0LicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyA2LiBJZiB0aGUgcmVzcG9uc2UgaW5jbHVkZXMgYSB8U2VjLVdlYlNvY2tldC1Qcm90b2NvbHwgaGVhZGVyIGZpZWxkXG4gICAgICAvLyAgICBhbmQgdGhpcyBoZWFkZXIgZmllbGQgaW5kaWNhdGVzIHRoZSB1c2Ugb2YgYSBzdWJwcm90b2NvbCB0aGF0IHdhc1xuICAgICAgLy8gICAgbm90IHByZXNlbnQgaW4gdGhlIGNsaWVudCdzIGhhbmRzaGFrZSAodGhlIHNlcnZlciBoYXMgaW5kaWNhdGVkIGFcbiAgICAgIC8vICAgIHN1YnByb3RvY29sIG5vdCByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCksIHRoZSBjbGllbnQgTVVTVCBfRmFpbFxuICAgICAgLy8gICAgdGhlIFdlYlNvY2tldCBDb25uZWN0aW9uXy5cbiAgICAgIGNvbnN0IHNlY1Byb3RvY29sID0gcmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdTZWMtV2ViU29ja2V0LVByb3RvY29sJylcblxuICAgICAgaWYgKHNlY1Byb3RvY29sICE9PSBudWxsICYmIHNlY1Byb3RvY29sICE9PSByZXF1ZXN0LmhlYWRlcnNMaXN0LmdldCgnU2VjLVdlYlNvY2tldC1Qcm90b2NvbCcpKSB7XG4gICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnUHJvdG9jb2wgd2FzIG5vdCBzZXQgaW4gdGhlIG9wZW5pbmcgaGFuZHNoYWtlLicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICByZXNwb25zZS5zb2NrZXQub24oJ2RhdGEnLCBvblNvY2tldERhdGEpXG4gICAgICByZXNwb25zZS5zb2NrZXQub24oJ2Nsb3NlJywgb25Tb2NrZXRDbG9zZSlcbiAgICAgIHJlc3BvbnNlLnNvY2tldC5vbignZXJyb3InLCBvblNvY2tldEVycm9yKVxuXG4gICAgICBpZiAoY2hhbm5lbHMub3Blbi5oYXNTdWJzY3JpYmVycykge1xuICAgICAgICBjaGFubmVscy5vcGVuLnB1Ymxpc2goe1xuICAgICAgICAgIGFkZHJlc3M6IHJlc3BvbnNlLnNvY2tldC5hZGRyZXNzKCksXG4gICAgICAgICAgcHJvdG9jb2w6IHNlY1Byb3RvY29sLFxuICAgICAgICAgIGV4dGVuc2lvbnM6IHNlY0V4dGVuc2lvblxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBvbkVzdGFibGlzaChyZXNwb25zZSlcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIGNvbnRyb2xsZXJcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0J1ZmZlcn0gY2h1bmtcbiAqL1xuZnVuY3Rpb24gb25Tb2NrZXREYXRhIChjaHVuaykge1xuICBpZiAoIXRoaXMud3Nba0J5dGVQYXJzZXJdLndyaXRlKGNodW5rKSkge1xuICAgIHRoaXMucGF1c2UoKVxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNmZWVkYmFjay1mcm9tLXRoZS1wcm90b2NvbFxuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzY0NTUjc2VjdGlvbi03LjEuNFxuICovXG5mdW5jdGlvbiBvblNvY2tldENsb3NlICgpIHtcbiAgY29uc3QgeyB3cyB9ID0gdGhpc1xuXG4gIC8vIElmIHRoZSBUQ1AgY29ubmVjdGlvbiB3YXMgY2xvc2VkIGFmdGVyIHRoZVxuICAvLyBXZWJTb2NrZXQgY2xvc2luZyBoYW5kc2hha2Ugd2FzIGNvbXBsZXRlZCwgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uXG4gIC8vIGlzIHNhaWQgdG8gaGF2ZSBiZWVuIGNsb3NlZCBfY2xlYW5seV8uXG4gIGNvbnN0IHdhc0NsZWFuID0gd3Nba1NlbnRDbG9zZV0gJiYgd3Nba1JlY2VpdmVkQ2xvc2VdXG5cbiAgbGV0IGNvZGUgPSAxMDA1XG4gIGxldCByZWFzb24gPSAnJ1xuXG4gIGNvbnN0IHJlc3VsdCA9IHdzW2tCeXRlUGFyc2VyXS5jbG9zaW5nSW5mb1xuXG4gIGlmIChyZXN1bHQpIHtcbiAgICBjb2RlID0gcmVzdWx0LmNvZGUgPz8gMTAwNVxuICAgIHJlYXNvbiA9IHJlc3VsdC5yZWFzb25cbiAgfSBlbHNlIGlmICghd3Nba1NlbnRDbG9zZV0pIHtcbiAgICAvLyBJZiBfVGhlIFdlYlNvY2tldFxuICAgIC8vIENvbm5lY3Rpb24gaXMgQ2xvc2VkXyBhbmQgbm8gQ2xvc2UgY29udHJvbCBmcmFtZSB3YXMgcmVjZWl2ZWQgYnkgdGhlXG4gICAgLy8gZW5kcG9pbnQgKHN1Y2ggYXMgY291bGQgb2NjdXIgaWYgdGhlIHVuZGVybHlpbmcgdHJhbnNwb3J0IGNvbm5lY3Rpb25cbiAgICAvLyBpcyBsb3N0KSwgX1RoZSBXZWJTb2NrZXQgQ29ubmVjdGlvbiBDbG9zZSBDb2RlXyBpcyBjb25zaWRlcmVkIHRvIGJlXG4gICAgLy8gMTAwNi5cbiAgICBjb2RlID0gMTAwNlxuICB9XG5cbiAgLy8gMS4gQ2hhbmdlIHRoZSByZWFkeSBzdGF0ZSB0byBDTE9TRUQgKDMpLlxuICB3c1trUmVhZHlTdGF0ZV0gPSBzdGF0ZXMuQ0xPU0VEXG5cbiAgLy8gMi4gSWYgdGhlIHVzZXIgYWdlbnQgd2FzIHJlcXVpcmVkIHRvIGZhaWwgdGhlIFdlYlNvY2tldFxuICAvLyAgICBjb25uZWN0aW9uLCBvciBpZiB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gd2FzIGNsb3NlZFxuICAvLyAgICBhZnRlciBiZWluZyBmbGFnZ2VkIGFzIGZ1bGwsIGZpcmUgYW4gZXZlbnQgbmFtZWQgZXJyb3JcbiAgLy8gICAgYXQgdGhlIFdlYlNvY2tldCBvYmplY3QuXG4gIC8vIFRPRE9cblxuICAvLyAzLiBGaXJlIGFuIGV2ZW50IG5hbWVkIGNsb3NlIGF0IHRoZSBXZWJTb2NrZXQgb2JqZWN0LFxuICAvLyAgICB1c2luZyBDbG9zZUV2ZW50LCB3aXRoIHRoZSB3YXNDbGVhbiBhdHRyaWJ1dGVcbiAgLy8gICAgaW5pdGlhbGl6ZWQgdG8gdHJ1ZSBpZiB0aGUgY29ubmVjdGlvbiBjbG9zZWQgY2xlYW5seVxuICAvLyAgICBhbmQgZmFsc2Ugb3RoZXJ3aXNlLCB0aGUgY29kZSBhdHRyaWJ1dGUgaW5pdGlhbGl6ZWQgdG9cbiAgLy8gICAgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGNsb3NlIGNvZGUsIGFuZCB0aGUgcmVhc29uXG4gIC8vICAgIGF0dHJpYnV0ZSBpbml0aWFsaXplZCB0byB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIFVURi04XG4gIC8vICAgIGRlY29kZSB3aXRob3V0IEJPTSB0byB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gY2xvc2VcbiAgLy8gICAgcmVhc29uLlxuICBmaXJlRXZlbnQoJ2Nsb3NlJywgd3MsIENsb3NlRXZlbnQsIHtcbiAgICB3YXNDbGVhbiwgY29kZSwgcmVhc29uXG4gIH0pXG5cbiAgaWYgKGNoYW5uZWxzLmNsb3NlLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgY2hhbm5lbHMuY2xvc2UucHVibGlzaCh7XG4gICAgICB3ZWJzb2NrZXQ6IHdzLFxuICAgICAgY29kZSxcbiAgICAgIHJlYXNvblxuICAgIH0pXG4gIH1cbn1cblxuZnVuY3Rpb24gb25Tb2NrZXRFcnJvciAoZXJyb3IpIHtcbiAgY29uc3QgeyB3cyB9ID0gdGhpc1xuXG4gIHdzW2tSZWFkeVN0YXRlXSA9IHN0YXRlcy5DTE9TSU5HXG5cbiAgaWYgKGNoYW5uZWxzLnNvY2tldEVycm9yLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgY2hhbm5lbHMuc29ja2V0RXJyb3IucHVibGlzaChlcnJvcilcbiAgfVxuXG4gIHRoaXMuZGVzdHJveSgpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBlc3RhYmxpc2hXZWJTb2NrZXRDb25uZWN0aW9uXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IG1heFVuc2lnbmVkMTZCaXQgfSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcblxuLyoqIEB0eXBlIHtpbXBvcnQoJ2NyeXB0bycpfSAqL1xubGV0IGNyeXB0b1xudHJ5IHtcbiAgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJylcbn0gY2F0Y2gge1xuXG59XG5cbmNsYXNzIFdlYnNvY2tldEZyYW1lU2VuZCB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge0J1ZmZlcnx1bmRlZmluZWR9IGRhdGFcbiAgICovXG4gIGNvbnN0cnVjdG9yIChkYXRhKSB7XG4gICAgdGhpcy5mcmFtZURhdGEgPSBkYXRhXG4gICAgdGhpcy5tYXNrS2V5ID0gY3J5cHRvLnJhbmRvbUJ5dGVzKDQpXG4gIH1cblxuICBjcmVhdGVGcmFtZSAob3Bjb2RlKSB7XG4gICAgY29uc3QgYm9keUxlbmd0aCA9IHRoaXMuZnJhbWVEYXRhPy5ieXRlTGVuZ3RoID8/IDBcblxuICAgIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICAgIGxldCBwYXlsb2FkTGVuZ3RoID0gYm9keUxlbmd0aCAvLyAwLTEyNVxuICAgIGxldCBvZmZzZXQgPSA2XG5cbiAgICBpZiAoYm9keUxlbmd0aCA+IG1heFVuc2lnbmVkMTZCaXQpIHtcbiAgICAgIG9mZnNldCArPSA4IC8vIHBheWxvYWQgbGVuZ3RoIGlzIG5leHQgOCBieXRlc1xuICAgICAgcGF5bG9hZExlbmd0aCA9IDEyN1xuICAgIH0gZWxzZSBpZiAoYm9keUxlbmd0aCA+IDEyNSkge1xuICAgICAgb2Zmc2V0ICs9IDIgLy8gcGF5bG9hZCBsZW5ndGggaXMgbmV4dCAyIGJ5dGVzXG4gICAgICBwYXlsb2FkTGVuZ3RoID0gMTI2XG4gICAgfVxuXG4gICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKGJvZHlMZW5ndGggKyBvZmZzZXQpXG5cbiAgICAvLyBDbGVhciBmaXJzdCAyIGJ5dGVzLCBldmVyeXRoaW5nIGVsc2UgaXMgb3ZlcndyaXR0ZW5cbiAgICBidWZmZXJbMF0gPSBidWZmZXJbMV0gPSAwXG4gICAgYnVmZmVyWzBdIHw9IDB4ODAgLy8gRklOXG4gICAgYnVmZmVyWzBdID0gKGJ1ZmZlclswXSAmIDB4RjApICsgb3Bjb2RlIC8vIG9wY29kZVxuXG4gICAgLyohIHdzLiBNSVQgTGljZW5zZS4gRWluYXIgT3R0byBTdGFuZ3ZpayA8ZWluYXJvc0BnbWFpbC5jb20+ICovXG4gICAgYnVmZmVyW29mZnNldCAtIDRdID0gdGhpcy5tYXNrS2V5WzBdXG4gICAgYnVmZmVyW29mZnNldCAtIDNdID0gdGhpcy5tYXNrS2V5WzFdXG4gICAgYnVmZmVyW29mZnNldCAtIDJdID0gdGhpcy5tYXNrS2V5WzJdXG4gICAgYnVmZmVyW29mZnNldCAtIDFdID0gdGhpcy5tYXNrS2V5WzNdXG5cbiAgICBidWZmZXJbMV0gPSBwYXlsb2FkTGVuZ3RoXG5cbiAgICBpZiAocGF5bG9hZExlbmd0aCA9PT0gMTI2KSB7XG4gICAgICBidWZmZXIud3JpdGVVSW50MTZCRShib2R5TGVuZ3RoLCAyKVxuICAgIH0gZWxzZSBpZiAocGF5bG9hZExlbmd0aCA9PT0gMTI3KSB7XG4gICAgICAvLyBDbGVhciBleHRlbmRlZCBwYXlsb2FkIGxlbmd0aFxuICAgICAgYnVmZmVyWzJdID0gYnVmZmVyWzNdID0gMFxuICAgICAgYnVmZmVyLndyaXRlVUludEJFKGJvZHlMZW5ndGgsIDQsIDYpXG4gICAgfVxuXG4gICAgYnVmZmVyWzFdIHw9IDB4ODAgLy8gTUFTS1xuXG4gICAgLy8gbWFzayBib2R5XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBib2R5TGVuZ3RoOyBpKyspIHtcbiAgICAgIGJ1ZmZlcltvZmZzZXQgKyBpXSA9IHRoaXMuZnJhbWVEYXRhW2ldIF4gdGhpcy5tYXNrS2V5W2kgJSA0XVxuICAgIH1cblxuICAgIHJldHVybiBidWZmZXJcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgV2Vic29ja2V0RnJhbWVTZW5kXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IFdyaXRhYmxlIH0gPSByZXF1aXJlKCdzdHJlYW0nKVxuY29uc3QgZGlhZ25vc3RpY3NDaGFubmVsID0gcmVxdWlyZSgnZGlhZ25vc3RpY3NfY2hhbm5lbCcpXG5jb25zdCB7IHBhcnNlclN0YXRlcywgb3Bjb2Rlcywgc3RhdGVzLCBlbXB0eUJ1ZmZlciB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3QgeyBrUmVhZHlTdGF0ZSwga1NlbnRDbG9zZSwga1Jlc3BvbnNlLCBrUmVjZWl2ZWRDbG9zZSB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgaXNWYWxpZFN0YXR1c0NvZGUsIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uLCB3ZWJzb2NrZXRNZXNzYWdlUmVjZWl2ZWQgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IFdlYnNvY2tldEZyYW1lU2VuZCB9ID0gcmVxdWlyZSgnLi9mcmFtZScpXG5cbi8vIFRoaXMgY29kZSB3YXMgaW5mbHVlbmNlZCBieSB3cyByZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4vLyBDb3B5cmlnaHQgKGMpIDIwMTEgRWluYXIgT3R0byBTdGFuZ3ZpayA8ZWluYXJvc0BnbWFpbC5jb20+XG4vLyBDb3B5cmlnaHQgKGMpIDIwMTMgQXJub3V0IEthemVtaWVyIGFuZCBjb250cmlidXRvcnNcbi8vIENvcHlyaWdodCAoYykgMjAxNiBMdWlnaSBQaW5jYSBhbmQgY29udHJpYnV0b3JzXG5cbmNvbnN0IGNoYW5uZWxzID0ge31cbmNoYW5uZWxzLnBpbmcgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOndlYnNvY2tldDpwaW5nJylcbmNoYW5uZWxzLnBvbmcgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOndlYnNvY2tldDpwb25nJylcblxuY2xhc3MgQnl0ZVBhcnNlciBleHRlbmRzIFdyaXRhYmxlIHtcbiAgI2J1ZmZlcnMgPSBbXVxuICAjYnl0ZU9mZnNldCA9IDBcblxuICAjc3RhdGUgPSBwYXJzZXJTdGF0ZXMuSU5GT1xuXG4gICNpbmZvID0ge31cbiAgI2ZyYWdtZW50cyA9IFtdXG5cbiAgY29uc3RydWN0b3IgKHdzKSB7XG4gICAgc3VwZXIoKVxuXG4gICAgdGhpcy53cyA9IHdzXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtCdWZmZXJ9IGNodW5rXG4gICAqIEBwYXJhbSB7KCkgPT4gdm9pZH0gY2FsbGJhY2tcbiAgICovXG4gIF93cml0ZSAoY2h1bmssIF8sIGNhbGxiYWNrKSB7XG4gICAgdGhpcy4jYnVmZmVycy5wdXNoKGNodW5rKVxuICAgIHRoaXMuI2J5dGVPZmZzZXQgKz0gY2h1bmsubGVuZ3RoXG5cbiAgICB0aGlzLnJ1bihjYWxsYmFjaylcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHdoZW5ldmVyIGEgbmV3IGNodW5rIGlzIHJlY2VpdmVkLlxuICAgKiBDYWxsYmFjayBpcyBjYWxsZWQgd2hlbmV2ZXIgdGhlcmUgYXJlIG5vIG1vcmUgY2h1bmtzIGJ1ZmZlcmluZyxcbiAgICogb3Igbm90IGVub3VnaCBieXRlcyBhcmUgYnVmZmVyZWQgdG8gcGFyc2UuXG4gICAqL1xuICBydW4gKGNhbGxiYWNrKSB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmICh0aGlzLiNzdGF0ZSA9PT0gcGFyc2VyU3RhdGVzLklORk8pIHtcbiAgICAgICAgLy8gSWYgdGhlcmUgYXJlbid0IGVub3VnaCBieXRlcyB0byBwYXJzZSB0aGUgcGF5bG9hZCBsZW5ndGgsIGV0Yy5cbiAgICAgICAgaWYgKHRoaXMuI2J5dGVPZmZzZXQgPCAyKSB7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IHRoaXMuY29uc3VtZSgyKVxuXG4gICAgICAgIHRoaXMuI2luZm8uZmluID0gKGJ1ZmZlclswXSAmIDB4ODApICE9PSAwXG4gICAgICAgIHRoaXMuI2luZm8ub3Bjb2RlID0gYnVmZmVyWzBdICYgMHgwRlxuXG4gICAgICAgIC8vIElmIHdlIHJlY2VpdmUgYSBmcmFnbWVudGVkIG1lc3NhZ2UsIHdlIHVzZSB0aGUgdHlwZSBvZiB0aGUgZmlyc3RcbiAgICAgICAgLy8gZnJhbWUgdG8gcGFyc2UgdGhlIGZ1bGwgbWVzc2FnZSBhcyBiaW5hcnkvdGV4dCwgd2hlbiBpdCdzIHRlcm1pbmF0ZWRcbiAgICAgICAgdGhpcy4jaW5mby5vcmlnaW5hbE9wY29kZSA/Pz0gdGhpcy4jaW5mby5vcGNvZGVcblxuICAgICAgICB0aGlzLiNpbmZvLmZyYWdtZW50ZWQgPSAhdGhpcy4jaW5mby5maW4gJiYgdGhpcy4jaW5mby5vcGNvZGUgIT09IG9wY29kZXMuQ09OVElOVUFUSU9OXG5cbiAgICAgICAgaWYgKHRoaXMuI2luZm8uZnJhZ21lbnRlZCAmJiB0aGlzLiNpbmZvLm9wY29kZSAhPT0gb3Bjb2Rlcy5CSU5BUlkgJiYgdGhpcy4jaW5mby5vcGNvZGUgIT09IG9wY29kZXMuVEVYVCkge1xuICAgICAgICAgIC8vIE9ubHkgdGV4dCBhbmQgYmluYXJ5IGZyYW1lcyBjYW4gYmUgZnJhZ21lbnRlZFxuICAgICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHRoaXMud3MsICdJbnZhbGlkIGZyYW1lIHR5cGUgd2FzIGZyYWdtZW50ZWQuJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBheWxvYWRMZW5ndGggPSBidWZmZXJbMV0gJiAweDdGXG5cbiAgICAgICAgaWYgKHBheWxvYWRMZW5ndGggPD0gMTI1KSB7XG4gICAgICAgICAgdGhpcy4jaW5mby5wYXlsb2FkTGVuZ3RoID0gcGF5bG9hZExlbmd0aFxuICAgICAgICAgIHRoaXMuI3N0YXRlID0gcGFyc2VyU3RhdGVzLlJFQURfREFUQVxuICAgICAgICB9IGVsc2UgaWYgKHBheWxvYWRMZW5ndGggPT09IDEyNikge1xuICAgICAgICAgIHRoaXMuI3N0YXRlID0gcGFyc2VyU3RhdGVzLlBBWUxPQURMRU5HVEhfMTZcbiAgICAgICAgfSBlbHNlIGlmIChwYXlsb2FkTGVuZ3RoID09PSAxMjcpIHtcbiAgICAgICAgICB0aGlzLiNzdGF0ZSA9IHBhcnNlclN0YXRlcy5QQVlMT0FETEVOR1RIXzY0XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy4jaW5mby5mcmFnbWVudGVkICYmIHBheWxvYWRMZW5ndGggPiAxMjUpIHtcbiAgICAgICAgICAvLyBBIGZyYWdtZW50ZWQgZnJhbWUgY2FuJ3QgYmUgZnJhZ21lbnRlZCBpdHNlbGZcbiAgICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih0aGlzLndzLCAnRnJhZ21lbnRlZCBmcmFtZSBleGNlZWRlZCAxMjUgYnl0ZXMuJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAodGhpcy4jaW5mby5vcGNvZGUgPT09IG9wY29kZXMuUElORyB8fFxuICAgICAgICAgICAgdGhpcy4jaW5mby5vcGNvZGUgPT09IG9wY29kZXMuUE9ORyB8fFxuICAgICAgICAgICAgdGhpcy4jaW5mby5vcGNvZGUgPT09IG9wY29kZXMuQ0xPU0UpICYmXG4gICAgICAgICAgcGF5bG9hZExlbmd0aCA+IDEyNVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBDb250cm9sIGZyYW1lcyBjYW4gaGF2ZSBhIHBheWxvYWQgbGVuZ3RoIG9mIDEyNSBieXRlcyBNQVhcbiAgICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih0aGlzLndzLCAnUGF5bG9hZCBsZW5ndGggZm9yIGNvbnRyb2wgZnJhbWUgZXhjZWVkZWQgMTI1IGJ5dGVzLicpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy4jaW5mby5vcGNvZGUgPT09IG9wY29kZXMuQ0xPU0UpIHtcbiAgICAgICAgICBpZiAocGF5bG9hZExlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24odGhpcy53cywgJ1JlY2VpdmVkIGNsb3NlIGZyYW1lIHdpdGggYSAxLWJ5dGUgYm9keS4nKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgYm9keSA9IHRoaXMuY29uc3VtZShwYXlsb2FkTGVuZ3RoKVxuXG4gICAgICAgICAgdGhpcy4jaW5mby5jbG9zZUluZm8gPSB0aGlzLnBhcnNlQ2xvc2VCb2R5KGZhbHNlLCBib2R5KVxuXG4gICAgICAgICAgaWYgKCF0aGlzLndzW2tTZW50Q2xvc2VdKSB7XG4gICAgICAgICAgICAvLyBJZiBhbiBlbmRwb2ludCByZWNlaXZlcyBhIENsb3NlIGZyYW1lIGFuZCBkaWQgbm90IHByZXZpb3VzbHkgc2VuZCBhXG4gICAgICAgICAgICAvLyBDbG9zZSBmcmFtZSwgdGhlIGVuZHBvaW50IE1VU1Qgc2VuZCBhIENsb3NlIGZyYW1lIGluIHJlc3BvbnNlLiAgKFdoZW5cbiAgICAgICAgICAgIC8vIHNlbmRpbmcgYSBDbG9zZSBmcmFtZSBpbiByZXNwb25zZSwgdGhlIGVuZHBvaW50IHR5cGljYWxseSBlY2hvcyB0aGVcbiAgICAgICAgICAgIC8vIHN0YXR1cyBjb2RlIGl0IHJlY2VpdmVkLilcbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMilcbiAgICAgICAgICAgIGJvZHkud3JpdGVVSW50MTZCRSh0aGlzLiNpbmZvLmNsb3NlSW5mby5jb2RlLCAwKVxuICAgICAgICAgICAgY29uc3QgY2xvc2VGcmFtZSA9IG5ldyBXZWJzb2NrZXRGcmFtZVNlbmQoYm9keSlcblxuICAgICAgICAgICAgdGhpcy53c1trUmVzcG9uc2VdLnNvY2tldC53cml0ZShcbiAgICAgICAgICAgICAgY2xvc2VGcmFtZS5jcmVhdGVGcmFtZShvcGNvZGVzLkNMT1NFKSxcbiAgICAgICAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghZXJyKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLndzW2tTZW50Q2xvc2VdID0gdHJ1ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFVwb24gZWl0aGVyIHNlbmRpbmcgb3IgcmVjZWl2aW5nIGEgQ2xvc2UgY29udHJvbCBmcmFtZSwgaXQgaXMgc2FpZFxuICAgICAgICAgIC8vIHRoYXQgX1RoZSBXZWJTb2NrZXQgQ2xvc2luZyBIYW5kc2hha2UgaXMgU3RhcnRlZF8gYW5kIHRoYXQgdGhlXG4gICAgICAgICAgLy8gV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgaW4gdGhlIENMT1NJTkcgc3RhdGUuXG4gICAgICAgICAgdGhpcy53c1trUmVhZHlTdGF0ZV0gPSBzdGF0ZXMuQ0xPU0lOR1xuICAgICAgICAgIHRoaXMud3Nba1JlY2VpdmVkQ2xvc2VdID0gdHJ1ZVxuXG4gICAgICAgICAgdGhpcy5lbmQoKVxuXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy4jaW5mby5vcGNvZGUgPT09IG9wY29kZXMuUElORykge1xuICAgICAgICAgIC8vIFVwb24gcmVjZWlwdCBvZiBhIFBpbmcgZnJhbWUsIGFuIGVuZHBvaW50IE1VU1Qgc2VuZCBhIFBvbmcgZnJhbWUgaW5cbiAgICAgICAgICAvLyByZXNwb25zZSwgdW5sZXNzIGl0IGFscmVhZHkgcmVjZWl2ZWQgYSBDbG9zZSBmcmFtZS5cbiAgICAgICAgICAvLyBBIFBvbmcgZnJhbWUgc2VudCBpbiByZXNwb25zZSB0byBhIFBpbmcgZnJhbWUgbXVzdCBoYXZlIGlkZW50aWNhbFxuICAgICAgICAgIC8vIFwiQXBwbGljYXRpb24gZGF0YVwiXG5cbiAgICAgICAgICBjb25zdCBib2R5ID0gdGhpcy5jb25zdW1lKHBheWxvYWRMZW5ndGgpXG5cbiAgICAgICAgICBpZiAoIXRoaXMud3Nba1JlY2VpdmVkQ2xvc2VdKSB7XG4gICAgICAgICAgICBjb25zdCBmcmFtZSA9IG5ldyBXZWJzb2NrZXRGcmFtZVNlbmQoYm9keSlcblxuICAgICAgICAgICAgdGhpcy53c1trUmVzcG9uc2VdLnNvY2tldC53cml0ZShmcmFtZS5jcmVhdGVGcmFtZShvcGNvZGVzLlBPTkcpKVxuXG4gICAgICAgICAgICBpZiAoY2hhbm5lbHMucGluZy5oYXNTdWJzY3JpYmVycykge1xuICAgICAgICAgICAgICBjaGFubmVscy5waW5nLnB1Ymxpc2goe1xuICAgICAgICAgICAgICAgIHBheWxvYWQ6IGJvZHlcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLiNzdGF0ZSA9IHBhcnNlclN0YXRlcy5JTkZPXG5cbiAgICAgICAgICBpZiAodGhpcy4jYnl0ZU9mZnNldCA+IDApIHtcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKClcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLiNpbmZvLm9wY29kZSA9PT0gb3Bjb2Rlcy5QT05HKSB7XG4gICAgICAgICAgLy8gQSBQb25nIGZyYW1lIE1BWSBiZSBzZW50IHVuc29saWNpdGVkLiAgVGhpcyBzZXJ2ZXMgYXMgYVxuICAgICAgICAgIC8vIHVuaWRpcmVjdGlvbmFsIGhlYXJ0YmVhdC4gIEEgcmVzcG9uc2UgdG8gYW4gdW5zb2xpY2l0ZWQgUG9uZyBmcmFtZSBpc1xuICAgICAgICAgIC8vIG5vdCBleHBlY3RlZC5cblxuICAgICAgICAgIGNvbnN0IGJvZHkgPSB0aGlzLmNvbnN1bWUocGF5bG9hZExlbmd0aClcblxuICAgICAgICAgIGlmIChjaGFubmVscy5wb25nLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICAgICAgICBjaGFubmVscy5wb25nLnB1Ymxpc2goe1xuICAgICAgICAgICAgICBwYXlsb2FkOiBib2R5XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0aGlzLiNieXRlT2Zmc2V0ID4gMCkge1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2soKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuI3N0YXRlID09PSBwYXJzZXJTdGF0ZXMuUEFZTE9BRExFTkdUSF8xNikge1xuICAgICAgICBpZiAodGhpcy4jYnl0ZU9mZnNldCA8IDIpIHtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYnVmZmVyID0gdGhpcy5jb25zdW1lKDIpXG5cbiAgICAgICAgdGhpcy4jaW5mby5wYXlsb2FkTGVuZ3RoID0gYnVmZmVyLnJlYWRVSW50MTZCRSgwKVxuICAgICAgICB0aGlzLiNzdGF0ZSA9IHBhcnNlclN0YXRlcy5SRUFEX0RBVEFcbiAgICAgIH0gZWxzZSBpZiAodGhpcy4jc3RhdGUgPT09IHBhcnNlclN0YXRlcy5QQVlMT0FETEVOR1RIXzY0KSB7XG4gICAgICAgIGlmICh0aGlzLiNieXRlT2Zmc2V0IDwgOCkge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBidWZmZXIgPSB0aGlzLmNvbnN1bWUoOClcbiAgICAgICAgY29uc3QgdXBwZXIgPSBidWZmZXIucmVhZFVJbnQzMkJFKDApXG5cbiAgICAgICAgLy8gMl4zMSBpcyB0aGUgbWF4aW5pbXVtIGJ5dGVzIGFuIGFycmF5YnVmZmVyIGNhbiBjb250YWluXG4gICAgICAgIC8vIG9uIDMyLWJpdCBzeXN0ZW1zLiBBbHRob3VnaCwgb24gNjQtYml0IHN5c3RlbXMsIHRoaXMgaXNcbiAgICAgICAgLy8gMl41My0xIGJ5dGVzLlxuICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9FcnJvcnMvSW52YWxpZF9hcnJheV9sZW5ndGhcbiAgICAgICAgLy8gaHR0cHM6Ly9zb3VyY2UuY2hyb21pdW0ub3JnL2Nocm9taXVtL2Nocm9taXVtL3NyYy8rL21haW46djgvc3JjL2NvbW1vbi9nbG9iYWxzLmg7ZHJjPTE5NDYyMTJhYzAxMDA2NjhmMTRlYjllMjg0M2JkZDg0NmU1MTBhMWU7YnB2PTE7YnB0PTE7bD0xMjc1XG4gICAgICAgIC8vIGh0dHBzOi8vc291cmNlLmNocm9taXVtLm9yZy9jaHJvbWl1bS9jaHJvbWl1bS9zcmMvKy9tYWluOnY4L3NyYy9vYmplY3RzL2pzLWFycmF5LWJ1ZmZlci5oO2w9MzQ7ZHJjPTE5NDYyMTJhYzAxMDA2NjhmMTRlYjllMjg0M2JkZDg0NmU1MTBhMWVcbiAgICAgICAgaWYgKHVwcGVyID4gMiAqKiAzMSAtIDEpIHtcbiAgICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih0aGlzLndzLCAnUmVjZWl2ZWQgcGF5bG9hZCBsZW5ndGggPiAyXjMxIGJ5dGVzLicpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsb3dlciA9IGJ1ZmZlci5yZWFkVUludDMyQkUoNClcblxuICAgICAgICB0aGlzLiNpbmZvLnBheWxvYWRMZW5ndGggPSAodXBwZXIgPDwgOCkgKyBsb3dlclxuICAgICAgICB0aGlzLiNzdGF0ZSA9IHBhcnNlclN0YXRlcy5SRUFEX0RBVEFcbiAgICAgIH0gZWxzZSBpZiAodGhpcy4jc3RhdGUgPT09IHBhcnNlclN0YXRlcy5SRUFEX0RBVEEpIHtcbiAgICAgICAgaWYgKHRoaXMuI2J5dGVPZmZzZXQgPCB0aGlzLiNpbmZvLnBheWxvYWRMZW5ndGgpIHtcbiAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBzdGlsbCBtb3JlIGRhdGEgaW4gdGhpcyBjaHVuayB0aGF0IG5lZWRzIHRvIGJlIHJlYWRcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuI2J5dGVPZmZzZXQgPj0gdGhpcy4jaW5mby5wYXlsb2FkTGVuZ3RoKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIHNlcnZlciBzZW50IG11bHRpcGxlIGZyYW1lcyBpbiBhIHNpbmdsZSBjaHVua1xuXG4gICAgICAgICAgY29uc3QgYm9keSA9IHRoaXMuY29uc3VtZSh0aGlzLiNpbmZvLnBheWxvYWRMZW5ndGgpXG5cbiAgICAgICAgICB0aGlzLiNmcmFnbWVudHMucHVzaChib2R5KVxuXG4gICAgICAgICAgLy8gSWYgdGhlIGZyYW1lIGlzIHVuZnJhZ21lbnRlZCwgb3IgYSBmcmFnbWVudGVkIGZyYW1lIHdhcyB0ZXJtaW5hdGVkLFxuICAgICAgICAgIC8vIGEgbWVzc2FnZSB3YXMgcmVjZWl2ZWRcbiAgICAgICAgICBpZiAoIXRoaXMuI2luZm8uZnJhZ21lbnRlZCB8fCAodGhpcy4jaW5mby5maW4gJiYgdGhpcy4jaW5mby5vcGNvZGUgPT09IG9wY29kZXMuQ09OVElOVUFUSU9OKSkge1xuICAgICAgICAgICAgY29uc3QgZnVsbE1lc3NhZ2UgPSBCdWZmZXIuY29uY2F0KHRoaXMuI2ZyYWdtZW50cylcblxuICAgICAgICAgICAgd2Vic29ja2V0TWVzc2FnZVJlY2VpdmVkKHRoaXMud3MsIHRoaXMuI2luZm8ub3JpZ2luYWxPcGNvZGUsIGZ1bGxNZXNzYWdlKVxuXG4gICAgICAgICAgICB0aGlzLiNpbmZvID0ge31cbiAgICAgICAgICAgIHRoaXMuI2ZyYWdtZW50cy5sZW5ndGggPSAwXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy4jc3RhdGUgPSBwYXJzZXJTdGF0ZXMuSU5GT1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLiNieXRlT2Zmc2V0ID4gMCkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2soKVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUYWtlIG4gYnl0ZXMgZnJvbSB0aGUgYnVmZmVyZWQgQnVmZmVyc1xuICAgKiBAcGFyYW0ge251bWJlcn0gblxuICAgKiBAcmV0dXJucyB7QnVmZmVyfG51bGx9XG4gICAqL1xuICBjb25zdW1lIChuKSB7XG4gICAgaWYgKG4gPiB0aGlzLiNieXRlT2Zmc2V0KSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0gZWxzZSBpZiAobiA9PT0gMCkge1xuICAgICAgcmV0dXJuIGVtcHR5QnVmZmVyXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuI2J1ZmZlcnNbMF0ubGVuZ3RoID09PSBuKSB7XG4gICAgICB0aGlzLiNieXRlT2Zmc2V0IC09IHRoaXMuI2J1ZmZlcnNbMF0ubGVuZ3RoXG4gICAgICByZXR1cm4gdGhpcy4jYnVmZmVycy5zaGlmdCgpXG4gICAgfVxuXG4gICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKG4pXG4gICAgbGV0IG9mZnNldCA9IDBcblxuICAgIHdoaWxlIChvZmZzZXQgIT09IG4pIHtcbiAgICAgIGNvbnN0IG5leHQgPSB0aGlzLiNidWZmZXJzWzBdXG4gICAgICBjb25zdCB7IGxlbmd0aCB9ID0gbmV4dFxuXG4gICAgICBpZiAobGVuZ3RoICsgb2Zmc2V0ID09PSBuKSB7XG4gICAgICAgIGJ1ZmZlci5zZXQodGhpcy4jYnVmZmVycy5zaGlmdCgpLCBvZmZzZXQpXG4gICAgICAgIGJyZWFrXG4gICAgICB9IGVsc2UgaWYgKGxlbmd0aCArIG9mZnNldCA+IG4pIHtcbiAgICAgICAgYnVmZmVyLnNldChuZXh0LnN1YmFycmF5KDAsIG4gLSBvZmZzZXQpLCBvZmZzZXQpXG4gICAgICAgIHRoaXMuI2J1ZmZlcnNbMF0gPSBuZXh0LnN1YmFycmF5KG4gLSBvZmZzZXQpXG4gICAgICAgIGJyZWFrXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBidWZmZXIuc2V0KHRoaXMuI2J1ZmZlcnMuc2hpZnQoKSwgb2Zmc2V0KVxuICAgICAgICBvZmZzZXQgKz0gbmV4dC5sZW5ndGhcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLiNieXRlT2Zmc2V0IC09IG5cblxuICAgIHJldHVybiBidWZmZXJcbiAgfVxuXG4gIHBhcnNlQ2xvc2VCb2R5IChvbmx5Q29kZSwgZGF0YSkge1xuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NSNzZWN0aW9uLTcuMS41XG4gICAgLyoqIEB0eXBlIHtudW1iZXJ8dW5kZWZpbmVkfSAqL1xuICAgIGxldCBjb2RlXG5cbiAgICBpZiAoZGF0YS5sZW5ndGggPj0gMikge1xuICAgICAgLy8gX1RoZSBXZWJTb2NrZXQgQ29ubmVjdGlvbiBDbG9zZSBDb2RlXyBpc1xuICAgICAgLy8gZGVmaW5lZCBhcyB0aGUgc3RhdHVzIGNvZGUgKFNlY3Rpb24gNy40KSBjb250YWluZWQgaW4gdGhlIGZpcnN0IENsb3NlXG4gICAgICAvLyBjb250cm9sIGZyYW1lIHJlY2VpdmVkIGJ5IHRoZSBhcHBsaWNhdGlvblxuICAgICAgY29kZSA9IGRhdGEucmVhZFVJbnQxNkJFKDApXG4gICAgfVxuXG4gICAgaWYgKG9ubHlDb2RlKSB7XG4gICAgICBpZiAoIWlzVmFsaWRTdGF0dXNDb2RlKGNvZGUpKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7IGNvZGUgfVxuICAgIH1cblxuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NSNzZWN0aW9uLTcuMS42XG4gICAgLyoqIEB0eXBlIHtCdWZmZXJ9ICovXG4gICAgbGV0IHJlYXNvbiA9IGRhdGEuc3ViYXJyYXkoMilcblxuICAgIC8vIFJlbW92ZSBCT01cbiAgICBpZiAocmVhc29uWzBdID09PSAweEVGICYmIHJlYXNvblsxXSA9PT0gMHhCQiAmJiByZWFzb25bMl0gPT09IDB4QkYpIHtcbiAgICAgIHJlYXNvbiA9IHJlYXNvbi5zdWJhcnJheSgzKVxuICAgIH1cblxuICAgIGlmIChjb2RlICE9PSB1bmRlZmluZWQgJiYgIWlzVmFsaWRTdGF0dXNDb2RlKGNvZGUpKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAvLyBUT0RPOiBvcHRpbWl6ZSB0aGlzXG4gICAgICByZWFzb24gPSBuZXcgVGV4dERlY29kZXIoJ3V0Zi04JywgeyBmYXRhbDogdHJ1ZSB9KS5kZWNvZGUocmVhc29uKVxuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICByZXR1cm4geyBjb2RlLCByZWFzb24gfVxuICB9XG5cbiAgZ2V0IGNsb3NpbmdJbmZvICgpIHtcbiAgICByZXR1cm4gdGhpcy4jaW5mby5jbG9zZUluZm9cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQnl0ZVBhcnNlclxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3dlYmlkbCcpXG5jb25zdCB7IERPTUV4Y2VwdGlvbiB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvY29uc3RhbnRzJylcbmNvbnN0IHsgVVJMU2VyaWFsaXplciB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvZGF0YVVSTCcpXG5jb25zdCB7IGdldEdsb2JhbE9yaWdpbiB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvZ2xvYmFsJylcbmNvbnN0IHsgc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycywgc3RhdGVzLCBvcGNvZGVzLCBlbXB0eUJ1ZmZlciB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3Qge1xuICBrV2ViU29ja2V0VVJMLFxuICBrUmVhZHlTdGF0ZSxcbiAga0NvbnRyb2xsZXIsXG4gIGtCaW5hcnlUeXBlLFxuICBrUmVzcG9uc2UsXG4gIGtTZW50Q2xvc2UsXG4gIGtCeXRlUGFyc2VyXG59ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgaXNFc3RhYmxpc2hlZCwgaXNDbG9zaW5nLCBpc1ZhbGlkU3VicHJvdG9jb2wsIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uLCBmaXJlRXZlbnQgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IGVzdGFibGlzaFdlYlNvY2tldENvbm5lY3Rpb24gfSA9IHJlcXVpcmUoJy4vY29ubmVjdGlvbicpXG5jb25zdCB7IFdlYnNvY2tldEZyYW1lU2VuZCB9ID0gcmVxdWlyZSgnLi9mcmFtZScpXG5jb25zdCB7IEJ5dGVQYXJzZXIgfSA9IHJlcXVpcmUoJy4vcmVjZWl2ZXInKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5LCBpc0Jsb2JMaWtlIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBnZXRHbG9iYWxEaXNwYXRjaGVyIH0gPSByZXF1aXJlKCcuLi9nbG9iYWwnKVxuY29uc3QgeyB0eXBlcyB9ID0gcmVxdWlyZSgndXRpbCcpXG5cbmxldCBleHBlcmltZW50YWxXYXJuZWQgPSBmYWxzZVxuXG4vLyBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNpbnRlcmZhY2UtZGVmaW5pdGlvblxuY2xhc3MgV2ViU29ja2V0IGV4dGVuZHMgRXZlbnRUYXJnZXQge1xuICAjZXZlbnRzID0ge1xuICAgIG9wZW46IG51bGwsXG4gICAgZXJyb3I6IG51bGwsXG4gICAgY2xvc2U6IG51bGwsXG4gICAgbWVzc2FnZTogbnVsbFxuICB9XG5cbiAgI2J1ZmZlcmVkQW1vdW50ID0gMFxuICAjcHJvdG9jb2wgPSAnJ1xuICAjZXh0ZW5zaW9ucyA9ICcnXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAgICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IHByb3RvY29sc1xuICAgKi9cbiAgY29uc3RydWN0b3IgKHVybCwgcHJvdG9jb2xzID0gW10pIHtcbiAgICBzdXBlcigpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnV2ViU29ja2V0IGNvbnN0cnVjdG9yJyB9KVxuXG4gICAgaWYgKCFleHBlcmltZW50YWxXYXJuZWQpIHtcbiAgICAgIGV4cGVyaW1lbnRhbFdhcm5lZCA9IHRydWVcbiAgICAgIHByb2Nlc3MuZW1pdFdhcm5pbmcoJ1dlYlNvY2tldHMgYXJlIGV4cGVyaW1lbnRhbCwgZXhwZWN0IHRoZW0gdG8gY2hhbmdlIGF0IGFueSB0aW1lLicsIHtcbiAgICAgICAgY29kZTogJ1VORElDSS1XUydcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgY29uc3Qgb3B0aW9ucyA9IHdlYmlkbC5jb252ZXJ0ZXJzWydET01TdHJpbmcgb3Igc2VxdWVuY2U8RE9NU3RyaW5nPiBvciBXZWJTb2NrZXRJbml0J10ocHJvdG9jb2xzKVxuXG4gICAgdXJsID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKHVybClcbiAgICBwcm90b2NvbHMgPSBvcHRpb25zLnByb3RvY29sc1xuXG4gICAgLy8gMS4gTGV0IGJhc2VVUkwgYmUgdGhpcydzIHJlbGV2YW50IHNldHRpbmdzIG9iamVjdCdzIEFQSSBiYXNlIFVSTC5cbiAgICBjb25zdCBiYXNlVVJMID0gZ2V0R2xvYmFsT3JpZ2luKClcblxuICAgIC8vIDEuIExldCB1cmxSZWNvcmQgYmUgdGhlIHJlc3VsdCBvZiBhcHBseWluZyB0aGUgVVJMIHBhcnNlciB0byB1cmwgd2l0aCBiYXNlVVJMLlxuICAgIGxldCB1cmxSZWNvcmRcblxuICAgIHRyeSB7XG4gICAgICB1cmxSZWNvcmQgPSBuZXcgVVJMKHVybCwgYmFzZVVSTClcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyAzLiBJZiB1cmxSZWNvcmQgaXMgZmFpbHVyZSwgdGhlbiB0aHJvdyBhIFwiU3ludGF4RXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKGUsICdTeW50YXhFcnJvcicpXG4gICAgfVxuXG4gICAgLy8gNC4gSWYgdXJsUmVjb3Jk4oCZcyBzY2hlbWUgaXMgXCJodHRwXCIsIHRoZW4gc2V0IHVybFJlY29yZOKAmXMgc2NoZW1lIHRvIFwid3NcIi5cbiAgICBpZiAodXJsUmVjb3JkLnByb3RvY29sID09PSAnaHR0cDonKSB7XG4gICAgICB1cmxSZWNvcmQucHJvdG9jb2wgPSAnd3M6J1xuICAgIH0gZWxzZSBpZiAodXJsUmVjb3JkLnByb3RvY29sID09PSAnaHR0cHM6Jykge1xuICAgICAgLy8gNS4gT3RoZXJ3aXNlLCBpZiB1cmxSZWNvcmTigJlzIHNjaGVtZSBpcyBcImh0dHBzXCIsIHNldCB1cmxSZWNvcmTigJlzIHNjaGVtZSB0byBcIndzc1wiLlxuICAgICAgdXJsUmVjb3JkLnByb3RvY29sID0gJ3dzczonXG4gICAgfVxuXG4gICAgLy8gNi4gSWYgdXJsUmVjb3Jk4oCZcyBzY2hlbWUgaXMgbm90IFwid3NcIiBvciBcIndzc1wiLCB0aGVuIHRocm93IGEgXCJTeW50YXhFcnJvclwiIERPTUV4Y2VwdGlvbi5cbiAgICBpZiAodXJsUmVjb3JkLnByb3RvY29sICE9PSAnd3M6JyAmJiB1cmxSZWNvcmQucHJvdG9jb2wgIT09ICd3c3M6Jykge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihcbiAgICAgICAgYEV4cGVjdGVkIGEgd3M6IG9yIHdzczogcHJvdG9jb2wsIGdvdCAke3VybFJlY29yZC5wcm90b2NvbH1gLFxuICAgICAgICAnU3ludGF4RXJyb3InXG4gICAgICApXG4gICAgfVxuXG4gICAgLy8gNy4gSWYgdXJsUmVjb3Jk4oCZcyBmcmFnbWVudCBpcyBub24tbnVsbCwgdGhlbiB0aHJvdyBhIFwiU3ludGF4RXJyb3JcIlxuICAgIC8vICAgIERPTUV4Y2VwdGlvbi5cbiAgICBpZiAodXJsUmVjb3JkLmhhc2ggfHwgdXJsUmVjb3JkLmhyZWYuZW5kc1dpdGgoJyMnKSkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignR290IGZyYWdtZW50JywgJ1N5bnRheEVycm9yJylcbiAgICB9XG5cbiAgICAvLyA4LiBJZiBwcm90b2NvbHMgaXMgYSBzdHJpbmcsIHNldCBwcm90b2NvbHMgdG8gYSBzZXF1ZW5jZSBjb25zaXN0aW5nXG4gICAgLy8gICAgb2YganVzdCB0aGF0IHN0cmluZy5cbiAgICBpZiAodHlwZW9mIHByb3RvY29scyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHByb3RvY29scyA9IFtwcm90b2NvbHNdXG4gICAgfVxuXG4gICAgLy8gOS4gSWYgYW55IG9mIHRoZSB2YWx1ZXMgaW4gcHJvdG9jb2xzIG9jY3VyIG1vcmUgdGhhbiBvbmNlIG9yIG90aGVyd2lzZVxuICAgIC8vICAgIGZhaWwgdG8gbWF0Y2ggdGhlIHJlcXVpcmVtZW50cyBmb3IgZWxlbWVudHMgdGhhdCBjb21wcmlzZSB0aGUgdmFsdWVcbiAgICAvLyAgICBvZiBgU2VjLVdlYlNvY2tldC1Qcm90b2NvbGAgZmllbGRzIGFzIGRlZmluZWQgYnkgVGhlIFdlYlNvY2tldFxuICAgIC8vICAgIHByb3RvY29sLCB0aGVuIHRocm93IGEgXCJTeW50YXhFcnJvclwiIERPTUV4Y2VwdGlvbi5cbiAgICBpZiAocHJvdG9jb2xzLmxlbmd0aCAhPT0gbmV3IFNldChwcm90b2NvbHMubWFwKHAgPT4gcC50b0xvd2VyQ2FzZSgpKSkuc2l6ZSkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignSW52YWxpZCBTZWMtV2ViU29ja2V0LVByb3RvY29sIHZhbHVlJywgJ1N5bnRheEVycm9yJylcbiAgICB9XG5cbiAgICBpZiAocHJvdG9jb2xzLmxlbmd0aCA+IDAgJiYgIXByb3RvY29scy5ldmVyeShwID0+IGlzVmFsaWRTdWJwcm90b2NvbChwKSkpIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oJ0ludmFsaWQgU2VjLVdlYlNvY2tldC1Qcm90b2NvbCB2YWx1ZScsICdTeW50YXhFcnJvcicpXG4gICAgfVxuXG4gICAgLy8gMTAuIFNldCB0aGlzJ3MgdXJsIHRvIHVybFJlY29yZC5cbiAgICB0aGlzW2tXZWJTb2NrZXRVUkxdID0gbmV3IFVSTCh1cmxSZWNvcmQuaHJlZilcblxuICAgIC8vIDExLiBMZXQgY2xpZW50IGJlIHRoaXMncyByZWxldmFudCBzZXR0aW5ncyBvYmplY3QuXG5cbiAgICAvLyAxMi4gUnVuIHRoaXMgc3RlcCBpbiBwYXJhbGxlbDpcblxuICAgIC8vICAgIDEuIEVzdGFibGlzaCBhIFdlYlNvY2tldCBjb25uZWN0aW9uIGdpdmVuIHVybFJlY29yZCwgcHJvdG9jb2xzLFxuICAgIC8vICAgICAgIGFuZCBjbGllbnQuXG4gICAgdGhpc1trQ29udHJvbGxlcl0gPSBlc3RhYmxpc2hXZWJTb2NrZXRDb25uZWN0aW9uKFxuICAgICAgdXJsUmVjb3JkLFxuICAgICAgcHJvdG9jb2xzLFxuICAgICAgdGhpcyxcbiAgICAgIChyZXNwb25zZSkgPT4gdGhpcy4jb25Db25uZWN0aW9uRXN0YWJsaXNoZWQocmVzcG9uc2UpLFxuICAgICAgb3B0aW9uc1xuICAgIClcblxuICAgIC8vIEVhY2ggV2ViU29ja2V0IG9iamVjdCBoYXMgYW4gYXNzb2NpYXRlZCByZWFkeSBzdGF0ZSwgd2hpY2ggaXMgYVxuICAgIC8vIG51bWJlciByZXByZXNlbnRpbmcgdGhlIHN0YXRlIG9mIHRoZSBjb25uZWN0aW9uLiBJbml0aWFsbHkgaXQgbXVzdFxuICAgIC8vIGJlIENPTk5FQ1RJTkcgKDApLlxuICAgIHRoaXNba1JlYWR5U3RhdGVdID0gV2ViU29ja2V0LkNPTk5FQ1RJTkdcblxuICAgIC8vIFRoZSBleHRlbnNpb25zIGF0dHJpYnV0ZSBtdXN0IGluaXRpYWxseSByZXR1cm4gdGhlIGVtcHR5IHN0cmluZy5cblxuICAgIC8vIFRoZSBwcm90b2NvbCBhdHRyaWJ1dGUgbXVzdCBpbml0aWFsbHkgcmV0dXJuIHRoZSBlbXB0eSBzdHJpbmcuXG5cbiAgICAvLyBFYWNoIFdlYlNvY2tldCBvYmplY3QgaGFzIGFuIGFzc29jaWF0ZWQgYmluYXJ5IHR5cGUsIHdoaWNoIGlzIGFcbiAgICAvLyBCaW5hcnlUeXBlLiBJbml0aWFsbHkgaXQgbXVzdCBiZSBcImJsb2JcIi5cbiAgICB0aGlzW2tCaW5hcnlUeXBlXSA9ICdibG9iJ1xuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZG9tLXdlYnNvY2tldC1jbG9zZVxuICAgKiBAcGFyYW0ge251bWJlcnx1bmRlZmluZWR9IGNvZGVcbiAgICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSByZWFzb25cbiAgICovXG4gIGNsb3NlIChjb2RlID0gdW5kZWZpbmVkLCByZWFzb24gPSB1bmRlZmluZWQpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICBpZiAoY29kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb2RlID0gd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIHNob3J0J10oY29kZSwgeyBjbGFtcDogdHJ1ZSB9KVxuICAgIH1cblxuICAgIGlmIChyZWFzb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVhc29uID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKHJlYXNvbilcbiAgICB9XG5cbiAgICAvLyAxLiBJZiBjb2RlIGlzIHByZXNlbnQsIGJ1dCBpcyBuZWl0aGVyIGFuIGludGVnZXIgZXF1YWwgdG8gMTAwMCBub3IgYW5cbiAgICAvLyAgICBpbnRlZ2VyIGluIHRoZSByYW5nZSAzMDAwIHRvIDQ5OTksIGluY2x1c2l2ZSwgdGhyb3cgYW5cbiAgICAvLyAgICBcIkludmFsaWRBY2Nlc3NFcnJvclwiIERPTUV4Y2VwdGlvbi5cbiAgICBpZiAoY29kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoY29kZSAhPT0gMTAwMCAmJiAoY29kZSA8IDMwMDAgfHwgY29kZSA+IDQ5OTkpKSB7XG4gICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oJ2ludmFsaWQgY29kZScsICdJbnZhbGlkQWNjZXNzRXJyb3InKVxuICAgICAgfVxuICAgIH1cblxuICAgIGxldCByZWFzb25CeXRlTGVuZ3RoID0gMFxuXG4gICAgLy8gMi4gSWYgcmVhc29uIGlzIHByZXNlbnQsIHRoZW4gcnVuIHRoZXNlIHN1YnN0ZXBzOlxuICAgIGlmIChyZWFzb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gMS4gTGV0IHJlYXNvbkJ5dGVzIGJlIHRoZSByZXN1bHQgb2YgZW5jb2RpbmcgcmVhc29uLlxuICAgICAgLy8gMi4gSWYgcmVhc29uQnl0ZXMgaXMgbG9uZ2VyIHRoYW4gMTIzIGJ5dGVzLCB0aGVuIHRocm93IGFcbiAgICAgIC8vICAgIFwiU3ludGF4RXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgICByZWFzb25CeXRlTGVuZ3RoID0gQnVmZmVyLmJ5dGVMZW5ndGgocmVhc29uKVxuXG4gICAgICBpZiAocmVhc29uQnl0ZUxlbmd0aCA+IDEyMykge1xuICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKFxuICAgICAgICAgIGBSZWFzb24gbXVzdCBiZSBsZXNzIHRoYW4gMTIzIGJ5dGVzOyByZWNlaXZlZCAke3JlYXNvbkJ5dGVMZW5ndGh9YCxcbiAgICAgICAgICAnU3ludGF4RXJyb3InXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAzLiBSdW4gdGhlIGZpcnN0IG1hdGNoaW5nIHN0ZXBzIGZyb20gdGhlIGZvbGxvd2luZyBsaXN0OlxuICAgIGlmICh0aGlzW2tSZWFkeVN0YXRlXSA9PT0gV2ViU29ja2V0LkNMT1NJTkcgfHwgdGhpc1trUmVhZHlTdGF0ZV0gPT09IFdlYlNvY2tldC5DTE9TRUQpIHtcbiAgICAgIC8vIElmIHRoaXMncyByZWFkeSBzdGF0ZSBpcyBDTE9TSU5HICgyKSBvciBDTE9TRUQgKDMpXG4gICAgICAvLyBEbyBub3RoaW5nLlxuICAgIH0gZWxzZSBpZiAoIWlzRXN0YWJsaXNoZWQodGhpcykpIHtcbiAgICAgIC8vIElmIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBub3QgeWV0IGVzdGFibGlzaGVkXG4gICAgICAvLyBGYWlsIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBhbmQgc2V0IHRoaXMncyByZWFkeSBzdGF0ZVxuICAgICAgLy8gdG8gQ0xPU0lORyAoMikuXG4gICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih0aGlzLCAnQ29ubmVjdGlvbiB3YXMgY2xvc2VkIGJlZm9yZSBpdCB3YXMgZXN0YWJsaXNoZWQuJylcbiAgICAgIHRoaXNba1JlYWR5U3RhdGVdID0gV2ViU29ja2V0LkNMT1NJTkdcbiAgICB9IGVsc2UgaWYgKCFpc0Nsb3NpbmcodGhpcykpIHtcbiAgICAgIC8vIElmIHRoZSBXZWJTb2NrZXQgY2xvc2luZyBoYW5kc2hha2UgaGFzIG5vdCB5ZXQgYmVlbiBzdGFydGVkXG4gICAgICAvLyBTdGFydCB0aGUgV2ViU29ja2V0IGNsb3NpbmcgaGFuZHNoYWtlIGFuZCBzZXQgdGhpcydzIHJlYWR5XG4gICAgICAvLyBzdGF0ZSB0byBDTE9TSU5HICgyKS5cbiAgICAgIC8vIC0gSWYgbmVpdGhlciBjb2RlIG5vciByZWFzb24gaXMgcHJlc2VudCwgdGhlIFdlYlNvY2tldCBDbG9zZVxuICAgICAgLy8gICBtZXNzYWdlIG11c3Qgbm90IGhhdmUgYSBib2R5LlxuICAgICAgLy8gLSBJZiBjb2RlIGlzIHByZXNlbnQsIHRoZW4gdGhlIHN0YXR1cyBjb2RlIHRvIHVzZSBpbiB0aGVcbiAgICAgIC8vICAgV2ViU29ja2V0IENsb3NlIG1lc3NhZ2UgbXVzdCBiZSB0aGUgaW50ZWdlciBnaXZlbiBieSBjb2RlLlxuICAgICAgLy8gLSBJZiByZWFzb24gaXMgYWxzbyBwcmVzZW50LCB0aGVuIHJlYXNvbkJ5dGVzIG11c3QgYmVcbiAgICAgIC8vICAgcHJvdmlkZWQgaW4gdGhlIENsb3NlIG1lc3NhZ2UgYWZ0ZXIgdGhlIHN0YXR1cyBjb2RlLlxuXG4gICAgICBjb25zdCBmcmFtZSA9IG5ldyBXZWJzb2NrZXRGcmFtZVNlbmQoKVxuXG4gICAgICAvLyBJZiBuZWl0aGVyIGNvZGUgbm9yIHJlYXNvbiBpcyBwcmVzZW50LCB0aGUgV2ViU29ja2V0IENsb3NlXG4gICAgICAvLyBtZXNzYWdlIG11c3Qgbm90IGhhdmUgYSBib2R5LlxuXG4gICAgICAvLyBJZiBjb2RlIGlzIHByZXNlbnQsIHRoZW4gdGhlIHN0YXR1cyBjb2RlIHRvIHVzZSBpbiB0aGVcbiAgICAgIC8vIFdlYlNvY2tldCBDbG9zZSBtZXNzYWdlIG11c3QgYmUgdGhlIGludGVnZXIgZ2l2ZW4gYnkgY29kZS5cbiAgICAgIGlmIChjb2RlICE9PSB1bmRlZmluZWQgJiYgcmVhc29uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZnJhbWUuZnJhbWVEYXRhID0gQnVmZmVyLmFsbG9jVW5zYWZlKDIpXG4gICAgICAgIGZyYW1lLmZyYW1lRGF0YS53cml0ZVVJbnQxNkJFKGNvZGUsIDApXG4gICAgICB9IGVsc2UgaWYgKGNvZGUgIT09IHVuZGVmaW5lZCAmJiByZWFzb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBJZiByZWFzb24gaXMgYWxzbyBwcmVzZW50LCB0aGVuIHJlYXNvbkJ5dGVzIG11c3QgYmVcbiAgICAgICAgLy8gcHJvdmlkZWQgaW4gdGhlIENsb3NlIG1lc3NhZ2UgYWZ0ZXIgdGhlIHN0YXR1cyBjb2RlLlxuICAgICAgICBmcmFtZS5mcmFtZURhdGEgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMiArIHJlYXNvbkJ5dGVMZW5ndGgpXG4gICAgICAgIGZyYW1lLmZyYW1lRGF0YS53cml0ZVVJbnQxNkJFKGNvZGUsIDApXG4gICAgICAgIC8vIHRoZSBib2R5IE1BWSBjb250YWluIFVURi04LWVuY29kZWQgZGF0YSB3aXRoIHZhbHVlIC9yZWFzb24vXG4gICAgICAgIGZyYW1lLmZyYW1lRGF0YS53cml0ZShyZWFzb24sIDIsICd1dGYtOCcpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmcmFtZS5mcmFtZURhdGEgPSBlbXB0eUJ1ZmZlclxuICAgICAgfVxuXG4gICAgICAvKiogQHR5cGUge2ltcG9ydCgnc3RyZWFtJykuRHVwbGV4fSAqL1xuICAgICAgY29uc3Qgc29ja2V0ID0gdGhpc1trUmVzcG9uc2VdLnNvY2tldFxuXG4gICAgICBzb2NrZXQud3JpdGUoZnJhbWUuY3JlYXRlRnJhbWUob3Bjb2Rlcy5DTE9TRSksIChlcnIpID0+IHtcbiAgICAgICAgaWYgKCFlcnIpIHtcbiAgICAgICAgICB0aGlzW2tTZW50Q2xvc2VdID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgICAvLyBVcG9uIGVpdGhlciBzZW5kaW5nIG9yIHJlY2VpdmluZyBhIENsb3NlIGNvbnRyb2wgZnJhbWUsIGl0IGlzIHNhaWRcbiAgICAgIC8vIHRoYXQgX1RoZSBXZWJTb2NrZXQgQ2xvc2luZyBIYW5kc2hha2UgaXMgU3RhcnRlZF8gYW5kIHRoYXQgdGhlXG4gICAgICAvLyBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBpbiB0aGUgQ0xPU0lORyBzdGF0ZS5cbiAgICAgIHRoaXNba1JlYWR5U3RhdGVdID0gc3RhdGVzLkNMT1NJTkdcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT3RoZXJ3aXNlXG4gICAgICAvLyBTZXQgdGhpcydzIHJlYWR5IHN0YXRlIHRvIENMT1NJTkcgKDIpLlxuICAgICAgdGhpc1trUmVhZHlTdGF0ZV0gPSBXZWJTb2NrZXQuQ0xPU0lOR1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2RvbS13ZWJzb2NrZXQtc2VuZFxuICAgKiBAcGFyYW0ge05vZGVKUy5UeXBlZEFycmF5fEFycmF5QnVmZmVyfEJsb2J8c3RyaW5nfSBkYXRhXG4gICAqL1xuICBzZW5kIChkYXRhKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ1dlYlNvY2tldC5zZW5kJyB9KVxuXG4gICAgZGF0YSA9IHdlYmlkbC5jb252ZXJ0ZXJzLldlYlNvY2tldFNlbmREYXRhKGRhdGEpXG5cbiAgICAvLyAxLiBJZiB0aGlzJ3MgcmVhZHkgc3RhdGUgaXMgQ09OTkVDVElORywgdGhlbiB0aHJvdyBhblxuICAgIC8vICAgIFwiSW52YWxpZFN0YXRlRXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgaWYgKHRoaXNba1JlYWR5U3RhdGVdID09PSBXZWJTb2NrZXQuQ09OTkVDVElORykge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignU2VudCBiZWZvcmUgY29ubmVjdGVkLicsICdJbnZhbGlkU3RhdGVFcnJvcicpXG4gICAgfVxuXG4gICAgLy8gMi4gUnVuIHRoZSBhcHByb3ByaWF0ZSBzZXQgb2Ygc3RlcHMgZnJvbSB0aGUgZm9sbG93aW5nIGxpc3Q6XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tNi4xXG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tNS4yXG5cbiAgICBpZiAoIWlzRXN0YWJsaXNoZWQodGhpcykgfHwgaXNDbG9zaW5nKHRoaXMpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvKiogQHR5cGUge2ltcG9ydCgnc3RyZWFtJykuRHVwbGV4fSAqL1xuICAgIGNvbnN0IHNvY2tldCA9IHRoaXNba1Jlc3BvbnNlXS5zb2NrZXRcblxuICAgIC8vIElmIGRhdGEgaXMgYSBzdHJpbmdcbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBJZiB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQgYW5kIHRoZSBXZWJTb2NrZXRcbiAgICAgIC8vIGNsb3NpbmcgaGFuZHNoYWtlIGhhcyBub3QgeWV0IHN0YXJ0ZWQsIHRoZW4gdGhlIHVzZXIgYWdlbnRcbiAgICAgIC8vIG11c3Qgc2VuZCBhIFdlYlNvY2tldCBNZXNzYWdlIGNvbXByaXNlZCBvZiB0aGUgZGF0YSBhcmd1bWVudFxuICAgICAgLy8gdXNpbmcgYSB0ZXh0IGZyYW1lIG9wY29kZTsgaWYgdGhlIGRhdGEgY2Fubm90IGJlIHNlbnQsIGUuZy5cbiAgICAgIC8vIGJlY2F1c2UgaXQgd291bGQgbmVlZCB0byBiZSBidWZmZXJlZCBidXQgdGhlIGJ1ZmZlciBpcyBmdWxsLFxuICAgICAgLy8gdGhlIHVzZXIgYWdlbnQgbXVzdCBmbGFnIHRoZSBXZWJTb2NrZXQgYXMgZnVsbCBhbmQgdGhlbiBjbG9zZVxuICAgICAgLy8gdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uLiBBbnkgaW52b2NhdGlvbiBvZiB0aGlzIG1ldGhvZCB3aXRoIGFcbiAgICAgIC8vIHN0cmluZyBhcmd1bWVudCB0aGF0IGRvZXMgbm90IHRocm93IGFuIGV4Y2VwdGlvbiBtdXN0IGluY3JlYXNlXG4gICAgICAvLyB0aGUgYnVmZmVyZWRBbW91bnQgYXR0cmlidXRlIGJ5IHRoZSBudW1iZXIgb2YgYnl0ZXMgbmVlZGVkIHRvXG4gICAgICAvLyBleHByZXNzIHRoZSBhcmd1bWVudCBhcyBVVEYtOC5cblxuICAgICAgY29uc3QgdmFsdWUgPSBCdWZmZXIuZnJvbShkYXRhKVxuICAgICAgY29uc3QgZnJhbWUgPSBuZXcgV2Vic29ja2V0RnJhbWVTZW5kKHZhbHVlKVxuICAgICAgY29uc3QgYnVmZmVyID0gZnJhbWUuY3JlYXRlRnJhbWUob3Bjb2Rlcy5URVhUKVxuXG4gICAgICB0aGlzLiNidWZmZXJlZEFtb3VudCArPSB2YWx1ZS5ieXRlTGVuZ3RoXG4gICAgICBzb2NrZXQud3JpdGUoYnVmZmVyLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuI2J1ZmZlcmVkQW1vdW50IC09IHZhbHVlLmJ5dGVMZW5ndGhcbiAgICAgIH0pXG4gICAgfSBlbHNlIGlmICh0eXBlcy5pc0FycmF5QnVmZmVyKGRhdGEpKSB7XG4gICAgICAvLyBJZiB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQsIGFuZCB0aGUgV2ViU29ja2V0XG4gICAgICAvLyBjbG9zaW5nIGhhbmRzaGFrZSBoYXMgbm90IHlldCBzdGFydGVkLCB0aGVuIHRoZSB1c2VyIGFnZW50IG11c3RcbiAgICAgIC8vIHNlbmQgYSBXZWJTb2NrZXQgTWVzc2FnZSBjb21wcmlzZWQgb2YgZGF0YSB1c2luZyBhIGJpbmFyeSBmcmFtZVxuICAgICAgLy8gb3Bjb2RlOyBpZiB0aGUgZGF0YSBjYW5ub3QgYmUgc2VudCwgZS5nLiBiZWNhdXNlIGl0IHdvdWxkIG5lZWRcbiAgICAgIC8vIHRvIGJlIGJ1ZmZlcmVkIGJ1dCB0aGUgYnVmZmVyIGlzIGZ1bGwsIHRoZSB1c2VyIGFnZW50IG11c3QgZmxhZ1xuICAgICAgLy8gdGhlIFdlYlNvY2tldCBhcyBmdWxsIGFuZCB0aGVuIGNsb3NlIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbi5cbiAgICAgIC8vIFRoZSBkYXRhIHRvIGJlIHNlbnQgaXMgdGhlIGRhdGEgc3RvcmVkIGluIHRoZSBidWZmZXIgZGVzY3JpYmVkXG4gICAgICAvLyBieSB0aGUgQXJyYXlCdWZmZXIgb2JqZWN0LiBBbnkgaW52b2NhdGlvbiBvZiB0aGlzIG1ldGhvZCB3aXRoIGFuXG4gICAgICAvLyBBcnJheUJ1ZmZlciBhcmd1bWVudCB0aGF0IGRvZXMgbm90IHRocm93IGFuIGV4Y2VwdGlvbiBtdXN0XG4gICAgICAvLyBpbmNyZWFzZSB0aGUgYnVmZmVyZWRBbW91bnQgYXR0cmlidXRlIGJ5IHRoZSBsZW5ndGggb2YgdGhlXG4gICAgICAvLyBBcnJheUJ1ZmZlciBpbiBieXRlcy5cblxuICAgICAgY29uc3QgdmFsdWUgPSBCdWZmZXIuZnJvbShkYXRhKVxuICAgICAgY29uc3QgZnJhbWUgPSBuZXcgV2Vic29ja2V0RnJhbWVTZW5kKHZhbHVlKVxuICAgICAgY29uc3QgYnVmZmVyID0gZnJhbWUuY3JlYXRlRnJhbWUob3Bjb2Rlcy5CSU5BUlkpXG5cbiAgICAgIHRoaXMuI2J1ZmZlcmVkQW1vdW50ICs9IHZhbHVlLmJ5dGVMZW5ndGhcbiAgICAgIHNvY2tldC53cml0ZShidWZmZXIsICgpID0+IHtcbiAgICAgICAgdGhpcy4jYnVmZmVyZWRBbW91bnQgLT0gdmFsdWUuYnl0ZUxlbmd0aFxuICAgICAgfSlcbiAgICB9IGVsc2UgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhkYXRhKSkge1xuICAgICAgLy8gSWYgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkLCBhbmQgdGhlIFdlYlNvY2tldFxuICAgICAgLy8gY2xvc2luZyBoYW5kc2hha2UgaGFzIG5vdCB5ZXQgc3RhcnRlZCwgdGhlbiB0aGUgdXNlciBhZ2VudCBtdXN0XG4gICAgICAvLyBzZW5kIGEgV2ViU29ja2V0IE1lc3NhZ2UgY29tcHJpc2VkIG9mIGRhdGEgdXNpbmcgYSBiaW5hcnkgZnJhbWVcbiAgICAgIC8vIG9wY29kZTsgaWYgdGhlIGRhdGEgY2Fubm90IGJlIHNlbnQsIGUuZy4gYmVjYXVzZSBpdCB3b3VsZCBuZWVkIHRvXG4gICAgICAvLyBiZSBidWZmZXJlZCBidXQgdGhlIGJ1ZmZlciBpcyBmdWxsLCB0aGUgdXNlciBhZ2VudCBtdXN0IGZsYWcgdGhlXG4gICAgICAvLyBXZWJTb2NrZXQgYXMgZnVsbCBhbmQgdGhlbiBjbG9zZSB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24uIFRoZVxuICAgICAgLy8gZGF0YSB0byBiZSBzZW50IGlzIHRoZSBkYXRhIHN0b3JlZCBpbiB0aGUgc2VjdGlvbiBvZiB0aGUgYnVmZmVyXG4gICAgICAvLyBkZXNjcmliZWQgYnkgdGhlIEFycmF5QnVmZmVyIG9iamVjdCB0aGF0IGRhdGEgcmVmZXJlbmNlcy4gQW55XG4gICAgICAvLyBpbnZvY2F0aW9uIG9mIHRoaXMgbWV0aG9kIHdpdGggdGhpcyBraW5kIG9mIGFyZ3VtZW50IHRoYXQgZG9lc1xuICAgICAgLy8gbm90IHRocm93IGFuIGV4Y2VwdGlvbiBtdXN0IGluY3JlYXNlIHRoZSBidWZmZXJlZEFtb3VudCBhdHRyaWJ1dGVcbiAgICAgIC8vIGJ5IHRoZSBsZW5ndGggb2YgZGF0YeKAmXMgYnVmZmVyIGluIGJ5dGVzLlxuXG4gICAgICBjb25zdCBhYiA9IEJ1ZmZlci5mcm9tKGRhdGEsIGRhdGEuYnl0ZU9mZnNldCwgZGF0YS5ieXRlTGVuZ3RoKVxuXG4gICAgICBjb25zdCBmcmFtZSA9IG5ldyBXZWJzb2NrZXRGcmFtZVNlbmQoYWIpXG4gICAgICBjb25zdCBidWZmZXIgPSBmcmFtZS5jcmVhdGVGcmFtZShvcGNvZGVzLkJJTkFSWSlcblxuICAgICAgdGhpcy4jYnVmZmVyZWRBbW91bnQgKz0gYWIuYnl0ZUxlbmd0aFxuICAgICAgc29ja2V0LndyaXRlKGJ1ZmZlciwgKCkgPT4ge1xuICAgICAgICB0aGlzLiNidWZmZXJlZEFtb3VudCAtPSBhYi5ieXRlTGVuZ3RoXG4gICAgICB9KVxuICAgIH0gZWxzZSBpZiAoaXNCbG9iTGlrZShkYXRhKSkge1xuICAgICAgLy8gSWYgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkLCBhbmQgdGhlIFdlYlNvY2tldFxuICAgICAgLy8gY2xvc2luZyBoYW5kc2hha2UgaGFzIG5vdCB5ZXQgc3RhcnRlZCwgdGhlbiB0aGUgdXNlciBhZ2VudCBtdXN0XG4gICAgICAvLyBzZW5kIGEgV2ViU29ja2V0IE1lc3NhZ2UgY29tcHJpc2VkIG9mIGRhdGEgdXNpbmcgYSBiaW5hcnkgZnJhbWVcbiAgICAgIC8vIG9wY29kZTsgaWYgdGhlIGRhdGEgY2Fubm90IGJlIHNlbnQsIGUuZy4gYmVjYXVzZSBpdCB3b3VsZCBuZWVkIHRvXG4gICAgICAvLyBiZSBidWZmZXJlZCBidXQgdGhlIGJ1ZmZlciBpcyBmdWxsLCB0aGUgdXNlciBhZ2VudCBtdXN0IGZsYWcgdGhlXG4gICAgICAvLyBXZWJTb2NrZXQgYXMgZnVsbCBhbmQgdGhlbiBjbG9zZSB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24uIFRoZSBkYXRhXG4gICAgICAvLyB0byBiZSBzZW50IGlzIHRoZSByYXcgZGF0YSByZXByZXNlbnRlZCBieSB0aGUgQmxvYiBvYmplY3QuIEFueVxuICAgICAgLy8gaW52b2NhdGlvbiBvZiB0aGlzIG1ldGhvZCB3aXRoIGEgQmxvYiBhcmd1bWVudCB0aGF0IGRvZXMgbm90IHRocm93XG4gICAgICAvLyBhbiBleGNlcHRpb24gbXVzdCBpbmNyZWFzZSB0aGUgYnVmZmVyZWRBbW91bnQgYXR0cmlidXRlIGJ5IHRoZSBzaXplXG4gICAgICAvLyBvZiB0aGUgQmxvYiBvYmplY3TigJlzIHJhdyBkYXRhLCBpbiBieXRlcy5cblxuICAgICAgY29uc3QgZnJhbWUgPSBuZXcgV2Vic29ja2V0RnJhbWVTZW5kKClcblxuICAgICAgZGF0YS5hcnJheUJ1ZmZlcigpLnRoZW4oKGFiKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gQnVmZmVyLmZyb20oYWIpXG4gICAgICAgIGZyYW1lLmZyYW1lRGF0YSA9IHZhbHVlXG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IGZyYW1lLmNyZWF0ZUZyYW1lKG9wY29kZXMuQklOQVJZKVxuXG4gICAgICAgIHRoaXMuI2J1ZmZlcmVkQW1vdW50ICs9IHZhbHVlLmJ5dGVMZW5ndGhcbiAgICAgICAgc29ja2V0LndyaXRlKGJ1ZmZlciwgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuI2J1ZmZlcmVkQW1vdW50IC09IHZhbHVlLmJ5dGVMZW5ndGhcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgZ2V0IHJlYWR5U3RhdGUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIC8vIFRoZSByZWFkeVN0YXRlIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXMncyByZWFkeSBzdGF0ZS5cbiAgICByZXR1cm4gdGhpc1trUmVhZHlTdGF0ZV1cbiAgfVxuXG4gIGdldCBidWZmZXJlZEFtb3VudCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgcmV0dXJuIHRoaXMuI2J1ZmZlcmVkQW1vdW50XG4gIH1cblxuICBnZXQgdXJsICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICAvLyBUaGUgdXJsIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXMncyB1cmwsIHNlcmlhbGl6ZWQuXG4gICAgcmV0dXJuIFVSTFNlcmlhbGl6ZXIodGhpc1trV2ViU29ja2V0VVJMXSlcbiAgfVxuXG4gIGdldCBleHRlbnNpb25zICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXh0ZW5zaW9uc1xuICB9XG5cbiAgZ2V0IHByb3RvY29sICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICByZXR1cm4gdGhpcy4jcHJvdG9jb2xcbiAgfVxuXG4gIGdldCBvbm9wZW4gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIHJldHVybiB0aGlzLiNldmVudHMub3BlblxuICB9XG5cbiAgc2V0IG9ub3BlbiAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICBpZiAodGhpcy4jZXZlbnRzLm9wZW4pIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignb3BlbicsIHRoaXMuI2V2ZW50cy5vcGVuKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5vcGVuID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignb3BlbicsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNldmVudHMub3BlbiA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgb25lcnJvciAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50cy5lcnJvclxuICB9XG5cbiAgc2V0IG9uZXJyb3IgKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgaWYgKHRoaXMuI2V2ZW50cy5lcnJvcikge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuI2V2ZW50cy5lcnJvcilcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLiNldmVudHMuZXJyb3IgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNldmVudHMuZXJyb3IgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgZ2V0IG9uY2xvc2UgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIHJldHVybiB0aGlzLiNldmVudHMuY2xvc2VcbiAgfVxuXG4gIHNldCBvbmNsb3NlIChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIGlmICh0aGlzLiNldmVudHMuY2xvc2UpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xvc2UnLCB0aGlzLiNldmVudHMuY2xvc2UpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy4jZXZlbnRzLmNsb3NlID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignY2xvc2UnLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy4jZXZlbnRzLmNsb3NlID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBvbm1lc3NhZ2UgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIHJldHVybiB0aGlzLiNldmVudHMubWVzc2FnZVxuICB9XG5cbiAgc2V0IG9ubWVzc2FnZSAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICBpZiAodGhpcy4jZXZlbnRzLm1lc3NhZ2UpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHRoaXMuI2V2ZW50cy5tZXNzYWdlKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5tZXNzYWdlID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNldmVudHMubWVzc2FnZSA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgYmluYXJ5VHlwZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgcmV0dXJuIHRoaXNba0JpbmFyeVR5cGVdXG4gIH1cblxuICBzZXQgYmluYXJ5VHlwZSAodHlwZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIGlmICh0eXBlICE9PSAnYmxvYicgJiYgdHlwZSAhPT0gJ2FycmF5YnVmZmVyJykge1xuICAgICAgdGhpc1trQmluYXJ5VHlwZV0gPSAnYmxvYidcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trQmluYXJ5VHlwZV0gPSB0eXBlXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZmVlZGJhY2stZnJvbS10aGUtcHJvdG9jb2xcbiAgICovXG4gICNvbkNvbm5lY3Rpb25Fc3RhYmxpc2hlZCAocmVzcG9uc2UpIHtcbiAgICAvLyBwcm9jZXNzUmVzcG9uc2UgaXMgY2FsbGVkIHdoZW4gdGhlIFwicmVzcG9uc2XigJlzIGhlYWRlciBsaXN0IGhhcyBiZWVuIHJlY2VpdmVkIGFuZCBpbml0aWFsaXplZC5cIlxuICAgIC8vIG9uY2UgdGhpcyBoYXBwZW5zLCB0aGUgY29ubmVjdGlvbiBpcyBvcGVuXG4gICAgdGhpc1trUmVzcG9uc2VdID0gcmVzcG9uc2VcblxuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBCeXRlUGFyc2VyKHRoaXMpXG4gICAgcGFyc2VyLm9uKCdkcmFpbicsIGZ1bmN0aW9uIG9uUGFyc2VyRHJhaW4gKCkge1xuICAgICAgdGhpcy53c1trUmVzcG9uc2VdLnNvY2tldC5yZXN1bWUoKVxuICAgIH0pXG5cbiAgICByZXNwb25zZS5zb2NrZXQud3MgPSB0aGlzXG4gICAgdGhpc1trQnl0ZVBhcnNlcl0gPSBwYXJzZXJcblxuICAgIC8vIDEuIENoYW5nZSB0aGUgcmVhZHkgc3RhdGUgdG8gT1BFTiAoMSkuXG4gICAgdGhpc1trUmVhZHlTdGF0ZV0gPSBzdGF0ZXMuT1BFTlxuXG4gICAgLy8gMi4gQ2hhbmdlIHRoZSBleHRlbnNpb25zIGF0dHJpYnV0ZeKAmXMgdmFsdWUgdG8gdGhlIGV4dGVuc2lvbnMgaW4gdXNlLCBpZlxuICAgIC8vICAgIGl0IGlzIG5vdCB0aGUgbnVsbCB2YWx1ZS5cbiAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzY0NTUjc2VjdGlvbi05LjFcbiAgICBjb25zdCBleHRlbnNpb25zID0gcmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdzZWMtd2Vic29ja2V0LWV4dGVuc2lvbnMnKVxuXG4gICAgaWYgKGV4dGVuc2lvbnMgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuI2V4dGVuc2lvbnMgPSBleHRlbnNpb25zXG4gICAgfVxuXG4gICAgLy8gMy4gQ2hhbmdlIHRoZSBwcm90b2NvbCBhdHRyaWJ1dGXigJlzIHZhbHVlIHRvIHRoZSBzdWJwcm90b2NvbCBpbiB1c2UsIGlmXG4gICAgLy8gICAgaXQgaXMgbm90IHRoZSBudWxsIHZhbHVlLlxuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NSNzZWN0aW9uLTEuOVxuICAgIGNvbnN0IHByb3RvY29sID0gcmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdzZWMtd2Vic29ja2V0LXByb3RvY29sJylcblxuICAgIGlmIChwcm90b2NvbCAhPT0gbnVsbCkge1xuICAgICAgdGhpcy4jcHJvdG9jb2wgPSBwcm90b2NvbFxuICAgIH1cblxuICAgIC8vIDQuIEZpcmUgYW4gZXZlbnQgbmFtZWQgb3BlbiBhdCB0aGUgV2ViU29ja2V0IG9iamVjdC5cbiAgICBmaXJlRXZlbnQoJ29wZW4nLCB0aGlzKVxuICB9XG59XG5cbi8vIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2RvbS13ZWJzb2NrZXQtY29ubmVjdGluZ1xuV2ViU29ja2V0LkNPTk5FQ1RJTkcgPSBXZWJTb2NrZXQucHJvdG90eXBlLkNPTk5FQ1RJTkcgPSBzdGF0ZXMuQ09OTkVDVElOR1xuLy8gaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZG9tLXdlYnNvY2tldC1vcGVuXG5XZWJTb2NrZXQuT1BFTiA9IFdlYlNvY2tldC5wcm90b3R5cGUuT1BFTiA9IHN0YXRlcy5PUEVOXG4vLyBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNkb20td2Vic29ja2V0LWNsb3NpbmdcbldlYlNvY2tldC5DTE9TSU5HID0gV2ViU29ja2V0LnByb3RvdHlwZS5DTE9TSU5HID0gc3RhdGVzLkNMT1NJTkdcbi8vIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2RvbS13ZWJzb2NrZXQtY2xvc2VkXG5XZWJTb2NrZXQuQ0xPU0VEID0gV2ViU29ja2V0LnByb3RvdHlwZS5DTE9TRUQgPSBzdGF0ZXMuQ0xPU0VEXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFdlYlNvY2tldC5wcm90b3R5cGUsIHtcbiAgQ09OTkVDVElORzogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgT1BFTjogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgQ0xPU0lORzogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgQ0xPU0VEOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICB1cmw6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlYWR5U3RhdGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGJ1ZmZlcmVkQW1vdW50OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbm9wZW46IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9uZXJyb3I6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9uY2xvc2U6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNsb3NlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbm1lc3NhZ2U6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGJpbmFyeVR5cGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHNlbmQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGV4dGVuc2lvbnM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHByb3RvY29sOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnV2ViU29ja2V0JyxcbiAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH1cbn0pXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFdlYlNvY2tldCwge1xuICBDT05ORUNUSU5HOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBPUEVOOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBDTE9TSU5HOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBDTE9TRUQ6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnNcbn0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxET01TdHJpbmc+J10gPSB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZ1xuKVxuXG53ZWJpZGwuY29udmVydGVyc1snRE9NU3RyaW5nIG9yIHNlcXVlbmNlPERPTVN0cmluZz4nXSA9IGZ1bmN0aW9uIChWKSB7XG4gIGlmICh3ZWJpZGwudXRpbC5UeXBlKFYpID09PSAnT2JqZWN0JyAmJiBTeW1ib2wuaXRlcmF0b3IgaW4gVikge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8RE9NU3RyaW5nPiddKFYpXG4gIH1cblxuICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKFYpXG59XG5cbi8vIFRoaXMgaW1wbGVtZW50cyB0aGUgcHJvcHNhbCBtYWRlIGluIGh0dHBzOi8vZ2l0aHViLmNvbS93aGF0d2cvd2Vic29ja2V0cy9pc3N1ZXMvNDJcbndlYmlkbC5jb252ZXJ0ZXJzLldlYlNvY2tldEluaXQgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIHtcbiAgICBrZXk6ICdwcm90b2NvbHMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ0RPTVN0cmluZyBvciBzZXF1ZW5jZTxET01TdHJpbmc+J10sXG4gICAgZ2V0IGRlZmF1bHRWYWx1ZSAoKSB7XG4gICAgICByZXR1cm4gW11cbiAgICB9XG4gIH0sXG4gIHtcbiAgICBrZXk6ICdkaXNwYXRjaGVyJyxcbiAgICBjb252ZXJ0ZXI6IChWKSA9PiBWLFxuICAgIGdldCBkZWZhdWx0VmFsdWUgKCkge1xuICAgICAgcmV0dXJuIGdldEdsb2JhbERpc3BhdGNoZXIoKVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGtleTogJ2hlYWRlcnMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzLkhlYWRlcnNJbml0KVxuICB9XG5dKVxuXG53ZWJpZGwuY29udmVydGVyc1snRE9NU3RyaW5nIG9yIHNlcXVlbmNlPERPTVN0cmluZz4gb3IgV2ViU29ja2V0SW5pdCddID0gZnVuY3Rpb24gKFYpIHtcbiAgaWYgKHdlYmlkbC51dGlsLlR5cGUoVikgPT09ICdPYmplY3QnICYmICEoU3ltYm9sLml0ZXJhdG9yIGluIFYpKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLldlYlNvY2tldEluaXQoVilcbiAgfVxuXG4gIHJldHVybiB7IHByb3RvY29sczogd2ViaWRsLmNvbnZlcnRlcnNbJ0RPTVN0cmluZyBvciBzZXF1ZW5jZTxET01TdHJpbmc+J10oVikgfVxufVxuXG53ZWJpZGwuY29udmVydGVycy5XZWJTb2NrZXRTZW5kRGF0YSA9IGZ1bmN0aW9uIChWKSB7XG4gIGlmICh3ZWJpZGwudXRpbC5UeXBlKFYpID09PSAnT2JqZWN0Jykge1xuICAgIGlmIChpc0Jsb2JMaWtlKFYpKSB7XG4gICAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuQmxvYihWLCB7IHN0cmljdDogZmFsc2UgfSlcbiAgICB9XG5cbiAgICBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KFYpIHx8IHR5cGVzLmlzQW55QXJyYXlCdWZmZXIoVikpIHtcbiAgICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5CdWZmZXJTb3VyY2UoVilcbiAgICB9XG4gIH1cblxuICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKFYpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBXZWJTb2NrZXRcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IENsaWVudCA9IHJlcXVpcmUoJy4vbGliL2NsaWVudCcpXG5jb25zdCBEaXNwYXRjaGVyID0gcmVxdWlyZSgnLi9saWIvZGlzcGF0Y2hlcicpXG5jb25zdCBlcnJvcnMgPSByZXF1aXJlKCcuL2xpYi9jb3JlL2Vycm9ycycpXG5jb25zdCBQb29sID0gcmVxdWlyZSgnLi9saWIvcG9vbCcpXG5jb25zdCBCYWxhbmNlZFBvb2wgPSByZXF1aXJlKCcuL2xpYi9iYWxhbmNlZC1wb29sJylcbmNvbnN0IEFnZW50ID0gcmVxdWlyZSgnLi9saWIvYWdlbnQnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4vbGliL2NvcmUvdXRpbCcpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gPSBlcnJvcnNcbmNvbnN0IGFwaSA9IHJlcXVpcmUoJy4vbGliL2FwaScpXG5jb25zdCBidWlsZENvbm5lY3RvciA9IHJlcXVpcmUoJy4vbGliL2NvcmUvY29ubmVjdCcpXG5jb25zdCBNb2NrQ2xpZW50ID0gcmVxdWlyZSgnLi9saWIvbW9jay9tb2NrLWNsaWVudCcpXG5jb25zdCBNb2NrQWdlbnQgPSByZXF1aXJlKCcuL2xpYi9tb2NrL21vY2stYWdlbnQnKVxuY29uc3QgTW9ja1Bvb2wgPSByZXF1aXJlKCcuL2xpYi9tb2NrL21vY2stcG9vbCcpXG5jb25zdCBtb2NrRXJyb3JzID0gcmVxdWlyZSgnLi9saWIvbW9jay9tb2NrLWVycm9ycycpXG5jb25zdCBQcm94eUFnZW50ID0gcmVxdWlyZSgnLi9saWIvcHJveHktYWdlbnQnKVxuY29uc3QgUmV0cnlIYW5kbGVyID0gcmVxdWlyZSgnLi9saWIvaGFuZGxlci9SZXRyeUhhbmRsZXInKVxuY29uc3QgeyBnZXRHbG9iYWxEaXNwYXRjaGVyLCBzZXRHbG9iYWxEaXNwYXRjaGVyIH0gPSByZXF1aXJlKCcuL2xpYi9nbG9iYWwnKVxuY29uc3QgRGVjb3JhdG9ySGFuZGxlciA9IHJlcXVpcmUoJy4vbGliL2hhbmRsZXIvRGVjb3JhdG9ySGFuZGxlcicpXG5jb25zdCBSZWRpcmVjdEhhbmRsZXIgPSByZXF1aXJlKCcuL2xpYi9oYW5kbGVyL1JlZGlyZWN0SGFuZGxlcicpXG5jb25zdCBjcmVhdGVSZWRpcmVjdEludGVyY2VwdG9yID0gcmVxdWlyZSgnLi9saWIvaW50ZXJjZXB0b3IvcmVkaXJlY3RJbnRlcmNlcHRvcicpXG5cbmxldCBoYXNDcnlwdG9cbnRyeSB7XG4gIHJlcXVpcmUoJ2NyeXB0bycpXG4gIGhhc0NyeXB0byA9IHRydWVcbn0gY2F0Y2gge1xuICBoYXNDcnlwdG8gPSBmYWxzZVxufVxuXG5PYmplY3QuYXNzaWduKERpc3BhdGNoZXIucHJvdG90eXBlLCBhcGkpXG5cbm1vZHVsZS5leHBvcnRzLkRpc3BhdGNoZXIgPSBEaXNwYXRjaGVyXG5tb2R1bGUuZXhwb3J0cy5DbGllbnQgPSBDbGllbnRcbm1vZHVsZS5leHBvcnRzLlBvb2wgPSBQb29sXG5tb2R1bGUuZXhwb3J0cy5CYWxhbmNlZFBvb2wgPSBCYWxhbmNlZFBvb2xcbm1vZHVsZS5leHBvcnRzLkFnZW50ID0gQWdlbnRcbm1vZHVsZS5leHBvcnRzLlByb3h5QWdlbnQgPSBQcm94eUFnZW50XG5tb2R1bGUuZXhwb3J0cy5SZXRyeUhhbmRsZXIgPSBSZXRyeUhhbmRsZXJcblxubW9kdWxlLmV4cG9ydHMuRGVjb3JhdG9ySGFuZGxlciA9IERlY29yYXRvckhhbmRsZXJcbm1vZHVsZS5leHBvcnRzLlJlZGlyZWN0SGFuZGxlciA9IFJlZGlyZWN0SGFuZGxlclxubW9kdWxlLmV4cG9ydHMuY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvciA9IGNyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3JcblxubW9kdWxlLmV4cG9ydHMuYnVpbGRDb25uZWN0b3IgPSBidWlsZENvbm5lY3RvclxubW9kdWxlLmV4cG9ydHMuZXJyb3JzID0gZXJyb3JzXG5cbmZ1bmN0aW9uIG1ha2VEaXNwYXRjaGVyIChmbikge1xuICByZXR1cm4gKHVybCwgb3B0cywgaGFuZGxlcikgPT4ge1xuICAgIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaGFuZGxlciA9IG9wdHNcbiAgICAgIG9wdHMgPSBudWxsXG4gICAgfVxuXG4gICAgaWYgKCF1cmwgfHwgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnICYmIHR5cGVvZiB1cmwgIT09ICdvYmplY3QnICYmICEodXJsIGluc3RhbmNlb2YgVVJMKSkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCB1cmwnKVxuICAgIH1cblxuICAgIGlmIChvcHRzICE9IG51bGwgJiYgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb3B0cycpXG4gICAgfVxuXG4gICAgaWYgKG9wdHMgJiYgb3B0cy5wYXRoICE9IG51bGwpIHtcbiAgICAgIGlmICh0eXBlb2Ygb3B0cy5wYXRoICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb3B0cy5wYXRoJylcbiAgICAgIH1cblxuICAgICAgbGV0IHBhdGggPSBvcHRzLnBhdGhcbiAgICAgIGlmICghb3B0cy5wYXRoLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgICBwYXRoID0gYC8ke3BhdGh9YFxuICAgICAgfVxuXG4gICAgICB1cmwgPSBuZXcgVVJMKHV0aWwucGFyc2VPcmlnaW4odXJsKS5vcmlnaW4gKyBwYXRoKVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIW9wdHMpIHtcbiAgICAgICAgb3B0cyA9IHR5cGVvZiB1cmwgPT09ICdvYmplY3QnID8gdXJsIDoge31cbiAgICAgIH1cblxuICAgICAgdXJsID0gdXRpbC5wYXJzZVVSTCh1cmwpXG4gICAgfVxuXG4gICAgY29uc3QgeyBhZ2VudCwgZGlzcGF0Y2hlciA9IGdldEdsb2JhbERpc3BhdGNoZXIoKSB9ID0gb3B0c1xuXG4gICAgaWYgKGFnZW50KSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3Vuc3VwcG9ydGVkIG9wdHMuYWdlbnQuIERpZCB5b3UgbWVhbiBvcHRzLmNsaWVudD8nKVxuICAgIH1cblxuICAgIHJldHVybiBmbi5jYWxsKGRpc3BhdGNoZXIsIHtcbiAgICAgIC4uLm9wdHMsXG4gICAgICBvcmlnaW46IHVybC5vcmlnaW4sXG4gICAgICBwYXRoOiB1cmwuc2VhcmNoID8gYCR7dXJsLnBhdGhuYW1lfSR7dXJsLnNlYXJjaH1gIDogdXJsLnBhdGhuYW1lLFxuICAgICAgbWV0aG9kOiBvcHRzLm1ldGhvZCB8fCAob3B0cy5ib2R5ID8gJ1BVVCcgOiAnR0VUJylcbiAgICB9LCBoYW5kbGVyKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzLnNldEdsb2JhbERpc3BhdGNoZXIgPSBzZXRHbG9iYWxEaXNwYXRjaGVyXG5tb2R1bGUuZXhwb3J0cy5nZXRHbG9iYWxEaXNwYXRjaGVyID0gZ2V0R2xvYmFsRGlzcGF0Y2hlclxuXG5pZiAodXRpbC5ub2RlTWFqb3IgPiAxNiB8fCAodXRpbC5ub2RlTWFqb3IgPT09IDE2ICYmIHV0aWwubm9kZU1pbm9yID49IDgpKSB7XG4gIGxldCBmZXRjaEltcGwgPSBudWxsXG4gIG1vZHVsZS5leHBvcnRzLmZldGNoID0gYXN5bmMgZnVuY3Rpb24gZmV0Y2ggKHJlc291cmNlKSB7XG4gICAgaWYgKCFmZXRjaEltcGwpIHtcbiAgICAgIGZldGNoSW1wbCA9IHJlcXVpcmUoJy4vbGliL2ZldGNoJykuZmV0Y2hcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGZldGNoSW1wbCguLi5hcmd1bWVudHMpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAodHlwZW9mIGVyciA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoZXJyLCB0aGlzKVxuICAgICAgfVxuXG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gIH1cbiAgbW9kdWxlLmV4cG9ydHMuSGVhZGVycyA9IHJlcXVpcmUoJy4vbGliL2ZldGNoL2hlYWRlcnMnKS5IZWFkZXJzXG4gIG1vZHVsZS5leHBvcnRzLlJlc3BvbnNlID0gcmVxdWlyZSgnLi9saWIvZmV0Y2gvcmVzcG9uc2UnKS5SZXNwb25zZVxuICBtb2R1bGUuZXhwb3J0cy5SZXF1ZXN0ID0gcmVxdWlyZSgnLi9saWIvZmV0Y2gvcmVxdWVzdCcpLlJlcXVlc3RcbiAgbW9kdWxlLmV4cG9ydHMuRm9ybURhdGEgPSByZXF1aXJlKCcuL2xpYi9mZXRjaC9mb3JtZGF0YScpLkZvcm1EYXRhXG4gIG1vZHVsZS5leHBvcnRzLkZpbGUgPSByZXF1aXJlKCcuL2xpYi9mZXRjaC9maWxlJykuRmlsZVxuICBtb2R1bGUuZXhwb3J0cy5GaWxlUmVhZGVyID0gcmVxdWlyZSgnLi9saWIvZmlsZWFwaS9maWxlcmVhZGVyJykuRmlsZVJlYWRlclxuXG4gIGNvbnN0IHsgc2V0R2xvYmFsT3JpZ2luLCBnZXRHbG9iYWxPcmlnaW4gfSA9IHJlcXVpcmUoJy4vbGliL2ZldGNoL2dsb2JhbCcpXG5cbiAgbW9kdWxlLmV4cG9ydHMuc2V0R2xvYmFsT3JpZ2luID0gc2V0R2xvYmFsT3JpZ2luXG4gIG1vZHVsZS5leHBvcnRzLmdldEdsb2JhbE9yaWdpbiA9IGdldEdsb2JhbE9yaWdpblxuXG4gIGNvbnN0IHsgQ2FjaGVTdG9yYWdlIH0gPSByZXF1aXJlKCcuL2xpYi9jYWNoZS9jYWNoZXN0b3JhZ2UnKVxuICBjb25zdCB7IGtDb25zdHJ1Y3QgfSA9IHJlcXVpcmUoJy4vbGliL2NhY2hlL3N5bWJvbHMnKVxuXG4gIC8vIENhY2hlICYgQ2FjaGVTdG9yYWdlIGFyZSB0aWdodGx5IGNvdXBsZWQgd2l0aCBmZXRjaC4gRXZlbiBpZiBpdCBtYXkgcnVuXG4gIC8vIGluIGFuIG9sZGVyIHZlcnNpb24gb2YgTm9kZSwgaXQgZG9lc24ndCBoYXZlIGFueSB1c2Ugd2l0aG91dCBmZXRjaC5cbiAgbW9kdWxlLmV4cG9ydHMuY2FjaGVzID0gbmV3IENhY2hlU3RvcmFnZShrQ29uc3RydWN0KVxufVxuXG5pZiAodXRpbC5ub2RlTWFqb3IgPj0gMTYpIHtcbiAgY29uc3QgeyBkZWxldGVDb29raWUsIGdldENvb2tpZXMsIGdldFNldENvb2tpZXMsIHNldENvb2tpZSB9ID0gcmVxdWlyZSgnLi9saWIvY29va2llcycpXG5cbiAgbW9kdWxlLmV4cG9ydHMuZGVsZXRlQ29va2llID0gZGVsZXRlQ29va2llXG4gIG1vZHVsZS5leHBvcnRzLmdldENvb2tpZXMgPSBnZXRDb29raWVzXG4gIG1vZHVsZS5leHBvcnRzLmdldFNldENvb2tpZXMgPSBnZXRTZXRDb29raWVzXG4gIG1vZHVsZS5leHBvcnRzLnNldENvb2tpZSA9IHNldENvb2tpZVxuXG4gIGNvbnN0IHsgcGFyc2VNSU1FVHlwZSwgc2VyaWFsaXplQU1pbWVUeXBlIH0gPSByZXF1aXJlKCcuL2xpYi9mZXRjaC9kYXRhVVJMJylcblxuICBtb2R1bGUuZXhwb3J0cy5wYXJzZU1JTUVUeXBlID0gcGFyc2VNSU1FVHlwZVxuICBtb2R1bGUuZXhwb3J0cy5zZXJpYWxpemVBTWltZVR5cGUgPSBzZXJpYWxpemVBTWltZVR5cGVcbn1cblxuaWYgKHV0aWwubm9kZU1ham9yID49IDE4ICYmIGhhc0NyeXB0bykge1xuICBjb25zdCB7IFdlYlNvY2tldCB9ID0gcmVxdWlyZSgnLi9saWIvd2Vic29ja2V0L3dlYnNvY2tldCcpXG5cbiAgbW9kdWxlLmV4cG9ydHMuV2ViU29ja2V0ID0gV2ViU29ja2V0XG59XG5cbm1vZHVsZS5leHBvcnRzLnJlcXVlc3QgPSBtYWtlRGlzcGF0Y2hlcihhcGkucmVxdWVzdClcbm1vZHVsZS5leHBvcnRzLnN0cmVhbSA9IG1ha2VEaXNwYXRjaGVyKGFwaS5zdHJlYW0pXG5tb2R1bGUuZXhwb3J0cy5waXBlbGluZSA9IG1ha2VEaXNwYXRjaGVyKGFwaS5waXBlbGluZSlcbm1vZHVsZS5leHBvcnRzLmNvbm5lY3QgPSBtYWtlRGlzcGF0Y2hlcihhcGkuY29ubmVjdClcbm1vZHVsZS5leHBvcnRzLnVwZ3JhZGUgPSBtYWtlRGlzcGF0Y2hlcihhcGkudXBncmFkZSlcblxubW9kdWxlLmV4cG9ydHMuTW9ja0NsaWVudCA9IE1vY2tDbGllbnRcbm1vZHVsZS5leHBvcnRzLk1vY2tQb29sID0gTW9ja1Bvb2xcbm1vZHVsZS5leHBvcnRzLk1vY2tBZ2VudCA9IE1vY2tBZ2VudFxubW9kdWxlLmV4cG9ydHMubW9ja0Vycm9ycyA9IG1vY2tFcnJvcnNcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5IdHRwQ2xpZW50ID0gZXhwb3J0cy5pc0h0dHBzID0gZXhwb3J0cy5IdHRwQ2xpZW50UmVzcG9uc2UgPSBleHBvcnRzLkh0dHBDbGllbnRFcnJvciA9IGV4cG9ydHMuZ2V0UHJveHlVcmwgPSBleHBvcnRzLk1lZGlhVHlwZXMgPSBleHBvcnRzLkhlYWRlcnMgPSBleHBvcnRzLkh0dHBDb2RlcyA9IHZvaWQgMDtcbmNvbnN0IGh0dHAgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcImh0dHBcIikpO1xuY29uc3QgaHR0cHMgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcImh0dHBzXCIpKTtcbmNvbnN0IHBtID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL3Byb3h5XCIpKTtcbmNvbnN0IHR1bm5lbCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwidHVubmVsXCIpKTtcbmNvbnN0IHVuZGljaV8xID0gcmVxdWlyZShcInVuZGljaVwiKTtcbnZhciBIdHRwQ29kZXM7XG4oZnVuY3Rpb24gKEh0dHBDb2Rlcykge1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJPS1wiXSA9IDIwMF0gPSBcIk9LXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIk11bHRpcGxlQ2hvaWNlc1wiXSA9IDMwMF0gPSBcIk11bHRpcGxlQ2hvaWNlc1wiO1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJNb3ZlZFBlcm1hbmVudGx5XCJdID0gMzAxXSA9IFwiTW92ZWRQZXJtYW5lbnRseVwiO1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJSZXNvdXJjZU1vdmVkXCJdID0gMzAyXSA9IFwiUmVzb3VyY2VNb3ZlZFwiO1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJTZWVPdGhlclwiXSA9IDMwM10gPSBcIlNlZU90aGVyXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIk5vdE1vZGlmaWVkXCJdID0gMzA0XSA9IFwiTm90TW9kaWZpZWRcIjtcbiAgICBIdHRwQ29kZXNbSHR0cENvZGVzW1wiVXNlUHJveHlcIl0gPSAzMDVdID0gXCJVc2VQcm94eVwiO1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJTd2l0Y2hQcm94eVwiXSA9IDMwNl0gPSBcIlN3aXRjaFByb3h5XCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIlRlbXBvcmFyeVJlZGlyZWN0XCJdID0gMzA3XSA9IFwiVGVtcG9yYXJ5UmVkaXJlY3RcIjtcbiAgICBIdHRwQ29kZXNbSHR0cENvZGVzW1wiUGVybWFuZW50UmVkaXJlY3RcIl0gPSAzMDhdID0gXCJQZXJtYW5lbnRSZWRpcmVjdFwiO1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJCYWRSZXF1ZXN0XCJdID0gNDAwXSA9IFwiQmFkUmVxdWVzdFwiO1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJVbmF1dGhvcml6ZWRcIl0gPSA0MDFdID0gXCJVbmF1dGhvcml6ZWRcIjtcbiAgICBIdHRwQ29kZXNbSHR0cENvZGVzW1wiUGF5bWVudFJlcXVpcmVkXCJdID0gNDAyXSA9IFwiUGF5bWVudFJlcXVpcmVkXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIkZvcmJpZGRlblwiXSA9IDQwM10gPSBcIkZvcmJpZGRlblwiO1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJOb3RGb3VuZFwiXSA9IDQwNF0gPSBcIk5vdEZvdW5kXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIk1ldGhvZE5vdEFsbG93ZWRcIl0gPSA0MDVdID0gXCJNZXRob2ROb3RBbGxvd2VkXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIk5vdEFjY2VwdGFibGVcIl0gPSA0MDZdID0gXCJOb3RBY2NlcHRhYmxlXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIlByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZFwiXSA9IDQwN10gPSBcIlByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZFwiO1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJSZXF1ZXN0VGltZW91dFwiXSA9IDQwOF0gPSBcIlJlcXVlc3RUaW1lb3V0XCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIkNvbmZsaWN0XCJdID0gNDA5XSA9IFwiQ29uZmxpY3RcIjtcbiAgICBIdHRwQ29kZXNbSHR0cENvZGVzW1wiR29uZVwiXSA9IDQxMF0gPSBcIkdvbmVcIjtcbiAgICBIdHRwQ29kZXNbSHR0cENvZGVzW1wiVG9vTWFueVJlcXVlc3RzXCJdID0gNDI5XSA9IFwiVG9vTWFueVJlcXVlc3RzXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIkludGVybmFsU2VydmVyRXJyb3JcIl0gPSA1MDBdID0gXCJJbnRlcm5hbFNlcnZlckVycm9yXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIk5vdEltcGxlbWVudGVkXCJdID0gNTAxXSA9IFwiTm90SW1wbGVtZW50ZWRcIjtcbiAgICBIdHRwQ29kZXNbSHR0cENvZGVzW1wiQmFkR2F0ZXdheVwiXSA9IDUwMl0gPSBcIkJhZEdhdGV3YXlcIjtcbiAgICBIdHRwQ29kZXNbSHR0cENvZGVzW1wiU2VydmljZVVuYXZhaWxhYmxlXCJdID0gNTAzXSA9IFwiU2VydmljZVVuYXZhaWxhYmxlXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIkdhdGV3YXlUaW1lb3V0XCJdID0gNTA0XSA9IFwiR2F0ZXdheVRpbWVvdXRcIjtcbn0pKEh0dHBDb2RlcyB8fCAoZXhwb3J0cy5IdHRwQ29kZXMgPSBIdHRwQ29kZXMgPSB7fSkpO1xudmFyIEhlYWRlcnM7XG4oZnVuY3Rpb24gKEhlYWRlcnMpIHtcbiAgICBIZWFkZXJzW1wiQWNjZXB0XCJdID0gXCJhY2NlcHRcIjtcbiAgICBIZWFkZXJzW1wiQ29udGVudFR5cGVcIl0gPSBcImNvbnRlbnQtdHlwZVwiO1xufSkoSGVhZGVycyB8fCAoZXhwb3J0cy5IZWFkZXJzID0gSGVhZGVycyA9IHt9KSk7XG52YXIgTWVkaWFUeXBlcztcbihmdW5jdGlvbiAoTWVkaWFUeXBlcykge1xuICAgIE1lZGlhVHlwZXNbXCJBcHBsaWNhdGlvbkpzb25cIl0gPSBcImFwcGxpY2F0aW9uL2pzb25cIjtcbn0pKE1lZGlhVHlwZXMgfHwgKGV4cG9ydHMuTWVkaWFUeXBlcyA9IE1lZGlhVHlwZXMgPSB7fSkpO1xuLyoqXG4gKiBSZXR1cm5zIHRoZSBwcm94eSBVUkwsIGRlcGVuZGluZyB1cG9uIHRoZSBzdXBwbGllZCB1cmwgYW5kIHByb3h5IGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiAqIEBwYXJhbSBzZXJ2ZXJVcmwgIFRoZSBzZXJ2ZXIgVVJMIHdoZXJlIHRoZSByZXF1ZXN0IHdpbGwgYmUgc2VudC4gRm9yIGV4YW1wbGUsIGh0dHBzOi8vYXBpLmdpdGh1Yi5jb21cbiAqL1xuZnVuY3Rpb24gZ2V0UHJveHlVcmwoc2VydmVyVXJsKSB7XG4gICAgY29uc3QgcHJveHlVcmwgPSBwbS5nZXRQcm94eVVybChuZXcgVVJMKHNlcnZlclVybCkpO1xuICAgIHJldHVybiBwcm94eVVybCA/IHByb3h5VXJsLmhyZWYgOiAnJztcbn1cbmV4cG9ydHMuZ2V0UHJveHlVcmwgPSBnZXRQcm94eVVybDtcbmNvbnN0IEh0dHBSZWRpcmVjdENvZGVzID0gW1xuICAgIEh0dHBDb2Rlcy5Nb3ZlZFBlcm1hbmVudGx5LFxuICAgIEh0dHBDb2Rlcy5SZXNvdXJjZU1vdmVkLFxuICAgIEh0dHBDb2Rlcy5TZWVPdGhlcixcbiAgICBIdHRwQ29kZXMuVGVtcG9yYXJ5UmVkaXJlY3QsXG4gICAgSHR0cENvZGVzLlBlcm1hbmVudFJlZGlyZWN0XG5dO1xuY29uc3QgSHR0cFJlc3BvbnNlUmV0cnlDb2RlcyA9IFtcbiAgICBIdHRwQ29kZXMuQmFkR2F0ZXdheSxcbiAgICBIdHRwQ29kZXMuU2VydmljZVVuYXZhaWxhYmxlLFxuICAgIEh0dHBDb2Rlcy5HYXRld2F5VGltZW91dFxuXTtcbmNvbnN0IFJldHJ5YWJsZUh0dHBWZXJicyA9IFsnT1BUSU9OUycsICdHRVQnLCAnREVMRVRFJywgJ0hFQUQnXTtcbmNvbnN0IEV4cG9uZW50aWFsQmFja29mZkNlaWxpbmcgPSAxMDtcbmNvbnN0IEV4cG9uZW50aWFsQmFja29mZlRpbWVTbGljZSA9IDU7XG5jbGFzcyBIdHRwQ2xpZW50RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZSwgc3RhdHVzQ29kZSkge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5uYW1lID0gJ0h0dHBDbGllbnRFcnJvcic7XG4gICAgICAgIHRoaXMuc3RhdHVzQ29kZSA9IHN0YXR1c0NvZGU7XG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBIdHRwQ2xpZW50RXJyb3IucHJvdG90eXBlKTtcbiAgICB9XG59XG5leHBvcnRzLkh0dHBDbGllbnRFcnJvciA9IEh0dHBDbGllbnRFcnJvcjtcbmNsYXNzIEh0dHBDbGllbnRSZXNwb25zZSB7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZSkge1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIH1cbiAgICByZWFkQm9keSgpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgIGxldCBvdXRwdXQgPSBCdWZmZXIuYWxsb2MoMCk7XG4gICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlLm9uKCdkYXRhJywgKGNodW5rKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IEJ1ZmZlci5jb25jYXQoW291dHB1dCwgY2h1bmtdKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2Uub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShvdXRwdXQudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZWFkQm9keUJ1ZmZlcigpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNodW5rcyA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZS5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjaHVua3MucHVzaChjaHVuayk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoQnVmZmVyLmNvbmNhdChjaHVua3MpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0cy5IdHRwQ2xpZW50UmVzcG9uc2UgPSBIdHRwQ2xpZW50UmVzcG9uc2U7XG5mdW5jdGlvbiBpc0h0dHBzKHJlcXVlc3RVcmwpIHtcbiAgICBjb25zdCBwYXJzZWRVcmwgPSBuZXcgVVJMKHJlcXVlc3RVcmwpO1xuICAgIHJldHVybiBwYXJzZWRVcmwucHJvdG9jb2wgPT09ICdodHRwczonO1xufVxuZXhwb3J0cy5pc0h0dHBzID0gaXNIdHRwcztcbmNsYXNzIEh0dHBDbGllbnQge1xuICAgIGNvbnN0cnVjdG9yKHVzZXJBZ2VudCwgaGFuZGxlcnMsIHJlcXVlc3RPcHRpb25zKSB7XG4gICAgICAgIHRoaXMuX2lnbm9yZVNzbEVycm9yID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2FsbG93UmVkaXJlY3RzID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fYWxsb3dSZWRpcmVjdERvd25ncmFkZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9tYXhSZWRpcmVjdHMgPSA1MDtcbiAgICAgICAgdGhpcy5fYWxsb3dSZXRyaWVzID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX21heFJldHJpZXMgPSAxO1xuICAgICAgICB0aGlzLl9rZWVwQWxpdmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fZGlzcG9zZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy51c2VyQWdlbnQgPSB1c2VyQWdlbnQ7XG4gICAgICAgIHRoaXMuaGFuZGxlcnMgPSBoYW5kbGVycyB8fCBbXTtcbiAgICAgICAgdGhpcy5yZXF1ZXN0T3B0aW9ucyA9IHJlcXVlc3RPcHRpb25zO1xuICAgICAgICBpZiAocmVxdWVzdE9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChyZXF1ZXN0T3B0aW9ucy5pZ25vcmVTc2xFcnJvciAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5faWdub3JlU3NsRXJyb3IgPSByZXF1ZXN0T3B0aW9ucy5pZ25vcmVTc2xFcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3NvY2tldFRpbWVvdXQgPSByZXF1ZXN0T3B0aW9ucy5zb2NrZXRUaW1lb3V0O1xuICAgICAgICAgICAgaWYgKHJlcXVlc3RPcHRpb25zLmFsbG93UmVkaXJlY3RzICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hbGxvd1JlZGlyZWN0cyA9IHJlcXVlc3RPcHRpb25zLmFsbG93UmVkaXJlY3RzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlcXVlc3RPcHRpb25zLmFsbG93UmVkaXJlY3REb3duZ3JhZGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FsbG93UmVkaXJlY3REb3duZ3JhZGUgPSByZXF1ZXN0T3B0aW9ucy5hbGxvd1JlZGlyZWN0RG93bmdyYWRlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlcXVlc3RPcHRpb25zLm1heFJlZGlyZWN0cyAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWF4UmVkaXJlY3RzID0gTWF0aC5tYXgocmVxdWVzdE9wdGlvbnMubWF4UmVkaXJlY3RzLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXF1ZXN0T3B0aW9ucy5rZWVwQWxpdmUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2tlZXBBbGl2ZSA9IHJlcXVlc3RPcHRpb25zLmtlZXBBbGl2ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXF1ZXN0T3B0aW9ucy5hbGxvd1JldHJpZXMgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FsbG93UmV0cmllcyA9IHJlcXVlc3RPcHRpb25zLmFsbG93UmV0cmllcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXF1ZXN0T3B0aW9ucy5tYXhSZXRyaWVzICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXhSZXRyaWVzID0gcmVxdWVzdE9wdGlvbnMubWF4UmV0cmllcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBvcHRpb25zKHJlcXVlc3RVcmwsIGFkZGl0aW9uYWxIZWFkZXJzKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KCdPUFRJT05TJywgcmVxdWVzdFVybCwgbnVsbCwgYWRkaXRpb25hbEhlYWRlcnMgfHwge30pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZ2V0KHJlcXVlc3RVcmwsIGFkZGl0aW9uYWxIZWFkZXJzKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KCdHRVQnLCByZXF1ZXN0VXJsLCBudWxsLCBhZGRpdGlvbmFsSGVhZGVycyB8fCB7fSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBkZWwocmVxdWVzdFVybCwgYWRkaXRpb25hbEhlYWRlcnMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QoJ0RFTEVURScsIHJlcXVlc3RVcmwsIG51bGwsIGFkZGl0aW9uYWxIZWFkZXJzIHx8IHt9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHBvc3QocmVxdWVzdFVybCwgZGF0YSwgYWRkaXRpb25hbEhlYWRlcnMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QoJ1BPU1QnLCByZXF1ZXN0VXJsLCBkYXRhLCBhZGRpdGlvbmFsSGVhZGVycyB8fCB7fSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwYXRjaChyZXF1ZXN0VXJsLCBkYXRhLCBhZGRpdGlvbmFsSGVhZGVycykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdCgnUEFUQ0gnLCByZXF1ZXN0VXJsLCBkYXRhLCBhZGRpdGlvbmFsSGVhZGVycyB8fCB7fSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwdXQocmVxdWVzdFVybCwgZGF0YSwgYWRkaXRpb25hbEhlYWRlcnMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QoJ1BVVCcsIHJlcXVlc3RVcmwsIGRhdGEsIGFkZGl0aW9uYWxIZWFkZXJzIHx8IHt9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGhlYWQocmVxdWVzdFVybCwgYWRkaXRpb25hbEhlYWRlcnMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QoJ0hFQUQnLCByZXF1ZXN0VXJsLCBudWxsLCBhZGRpdGlvbmFsSGVhZGVycyB8fCB7fSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBzZW5kU3RyZWFtKHZlcmIsIHJlcXVlc3RVcmwsIHN0cmVhbSwgYWRkaXRpb25hbEhlYWRlcnMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QodmVyYiwgcmVxdWVzdFVybCwgc3RyZWFtLCBhZGRpdGlvbmFsSGVhZGVycyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXRzIGEgdHlwZWQgb2JqZWN0IGZyb20gYW4gZW5kcG9pbnRcbiAgICAgKiBCZSBhd2FyZSB0aGF0IG5vdCBmb3VuZCByZXR1cm5zIGEgbnVsbC4gIE90aGVyIGVycm9ycyAoNHh4LCA1eHgpIHJlamVjdCB0aGUgcHJvbWlzZVxuICAgICAqL1xuICAgIGdldEpzb24ocmVxdWVzdFVybCwgYWRkaXRpb25hbEhlYWRlcnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgYWRkaXRpb25hbEhlYWRlcnNbSGVhZGVycy5BY2NlcHRdID0gdGhpcy5fZ2V0RXhpc3RpbmdPckRlZmF1bHRIZWFkZXIoYWRkaXRpb25hbEhlYWRlcnMsIEhlYWRlcnMuQWNjZXB0LCBNZWRpYVR5cGVzLkFwcGxpY2F0aW9uSnNvbik7XG4gICAgICAgICAgICBjb25zdCByZXMgPSB5aWVsZCB0aGlzLmdldChyZXF1ZXN0VXJsLCBhZGRpdGlvbmFsSGVhZGVycyk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJvY2Vzc1Jlc3BvbnNlKHJlcywgdGhpcy5yZXF1ZXN0T3B0aW9ucyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwb3N0SnNvbihyZXF1ZXN0VXJsLCBvYmosIGFkZGl0aW9uYWxIZWFkZXJzID0ge30pIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnN0cmluZ2lmeShvYmosIG51bGwsIDIpO1xuICAgICAgICAgICAgYWRkaXRpb25hbEhlYWRlcnNbSGVhZGVycy5BY2NlcHRdID0gdGhpcy5fZ2V0RXhpc3RpbmdPckRlZmF1bHRIZWFkZXIoYWRkaXRpb25hbEhlYWRlcnMsIEhlYWRlcnMuQWNjZXB0LCBNZWRpYVR5cGVzLkFwcGxpY2F0aW9uSnNvbik7XG4gICAgICAgICAgICBhZGRpdGlvbmFsSGVhZGVyc1tIZWFkZXJzLkNvbnRlbnRUeXBlXSA9IHRoaXMuX2dldEV4aXN0aW5nT3JEZWZhdWx0SGVhZGVyKGFkZGl0aW9uYWxIZWFkZXJzLCBIZWFkZXJzLkNvbnRlbnRUeXBlLCBNZWRpYVR5cGVzLkFwcGxpY2F0aW9uSnNvbik7XG4gICAgICAgICAgICBjb25zdCByZXMgPSB5aWVsZCB0aGlzLnBvc3QocmVxdWVzdFVybCwgZGF0YSwgYWRkaXRpb25hbEhlYWRlcnMpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2Nlc3NSZXNwb25zZShyZXMsIHRoaXMucmVxdWVzdE9wdGlvbnMpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcHV0SnNvbihyZXF1ZXN0VXJsLCBvYmosIGFkZGl0aW9uYWxIZWFkZXJzID0ge30pIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnN0cmluZ2lmeShvYmosIG51bGwsIDIpO1xuICAgICAgICAgICAgYWRkaXRpb25hbEhlYWRlcnNbSGVhZGVycy5BY2NlcHRdID0gdGhpcy5fZ2V0RXhpc3RpbmdPckRlZmF1bHRIZWFkZXIoYWRkaXRpb25hbEhlYWRlcnMsIEhlYWRlcnMuQWNjZXB0LCBNZWRpYVR5cGVzLkFwcGxpY2F0aW9uSnNvbik7XG4gICAgICAgICAgICBhZGRpdGlvbmFsSGVhZGVyc1tIZWFkZXJzLkNvbnRlbnRUeXBlXSA9IHRoaXMuX2dldEV4aXN0aW5nT3JEZWZhdWx0SGVhZGVyKGFkZGl0aW9uYWxIZWFkZXJzLCBIZWFkZXJzLkNvbnRlbnRUeXBlLCBNZWRpYVR5cGVzLkFwcGxpY2F0aW9uSnNvbik7XG4gICAgICAgICAgICBjb25zdCByZXMgPSB5aWVsZCB0aGlzLnB1dChyZXF1ZXN0VXJsLCBkYXRhLCBhZGRpdGlvbmFsSGVhZGVycyk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJvY2Vzc1Jlc3BvbnNlKHJlcywgdGhpcy5yZXF1ZXN0T3B0aW9ucyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwYXRjaEpzb24ocmVxdWVzdFVybCwgb2JqLCBhZGRpdGlvbmFsSGVhZGVycyA9IHt9KSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gSlNPTi5zdHJpbmdpZnkob2JqLCBudWxsLCAyKTtcbiAgICAgICAgICAgIGFkZGl0aW9uYWxIZWFkZXJzW0hlYWRlcnMuQWNjZXB0XSA9IHRoaXMuX2dldEV4aXN0aW5nT3JEZWZhdWx0SGVhZGVyKGFkZGl0aW9uYWxIZWFkZXJzLCBIZWFkZXJzLkFjY2VwdCwgTWVkaWFUeXBlcy5BcHBsaWNhdGlvbkpzb24pO1xuICAgICAgICAgICAgYWRkaXRpb25hbEhlYWRlcnNbSGVhZGVycy5Db250ZW50VHlwZV0gPSB0aGlzLl9nZXRFeGlzdGluZ09yRGVmYXVsdEhlYWRlcihhZGRpdGlvbmFsSGVhZGVycywgSGVhZGVycy5Db250ZW50VHlwZSwgTWVkaWFUeXBlcy5BcHBsaWNhdGlvbkpzb24pO1xuICAgICAgICAgICAgY29uc3QgcmVzID0geWllbGQgdGhpcy5wYXRjaChyZXF1ZXN0VXJsLCBkYXRhLCBhZGRpdGlvbmFsSGVhZGVycyk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJvY2Vzc1Jlc3BvbnNlKHJlcywgdGhpcy5yZXF1ZXN0T3B0aW9ucyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBNYWtlcyBhIHJhdyBodHRwIHJlcXVlc3QuXG4gICAgICogQWxsIG90aGVyIG1ldGhvZHMgc3VjaCBhcyBnZXQsIHBvc3QsIHBhdGNoLCBhbmQgcmVxdWVzdCB1bHRpbWF0ZWx5IGNhbGwgdGhpcy5cbiAgICAgKiBQcmVmZXIgZ2V0LCBkZWwsIHBvc3QgYW5kIHBhdGNoXG4gICAgICovXG4gICAgcmVxdWVzdCh2ZXJiLCByZXF1ZXN0VXJsLCBkYXRhLCBoZWFkZXJzKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NsaWVudCBoYXMgYWxyZWFkeSBiZWVuIGRpc3Bvc2VkLicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcGFyc2VkVXJsID0gbmV3IFVSTChyZXF1ZXN0VXJsKTtcbiAgICAgICAgICAgIGxldCBpbmZvID0gdGhpcy5fcHJlcGFyZVJlcXVlc3QodmVyYiwgcGFyc2VkVXJsLCBoZWFkZXJzKTtcbiAgICAgICAgICAgIC8vIE9ubHkgcGVyZm9ybSByZXRyaWVzIG9uIHJlYWRzIHNpbmNlIHdyaXRlcyBtYXkgbm90IGJlIGlkZW1wb3RlbnQuXG4gICAgICAgICAgICBjb25zdCBtYXhUcmllcyA9IHRoaXMuX2FsbG93UmV0cmllcyAmJiBSZXRyeWFibGVIdHRwVmVyYnMuaW5jbHVkZXModmVyYilcbiAgICAgICAgICAgICAgICA/IHRoaXMuX21heFJldHJpZXMgKyAxXG4gICAgICAgICAgICAgICAgOiAxO1xuICAgICAgICAgICAgbGV0IG51bVRyaWVzID0gMDtcbiAgICAgICAgICAgIGxldCByZXNwb25zZTtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZSA9IHlpZWxkIHRoaXMucmVxdWVzdFJhdyhpbmZvLCBkYXRhKTtcbiAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiBpdCdzIGFuIGF1dGhlbnRpY2F0aW9uIGNoYWxsZW5nZVxuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZSAmJlxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5tZXNzYWdlICYmXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLm1lc3NhZ2Uuc3RhdHVzQ29kZSA9PT0gSHR0cENvZGVzLlVuYXV0aG9yaXplZCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgYXV0aGVudGljYXRpb25IYW5kbGVyO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGhhbmRsZXIgb2YgdGhpcy5oYW5kbGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZXIuY2FuSGFuZGxlQXV0aGVudGljYXRpb24ocmVzcG9uc2UpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aGVudGljYXRpb25IYW5kbGVyID0gaGFuZGxlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoYXV0aGVudGljYXRpb25IYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXV0aGVudGljYXRpb25IYW5kbGVyLmhhbmRsZUF1dGhlbnRpY2F0aW9uKHRoaXMsIGluZm8sIGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSByZWNlaXZlZCBhbiB1bmF1dGhvcml6ZWQgcmVzcG9uc2UgYnV0IGhhdmUgbm8gaGFuZGxlcnMgdG8gaGFuZGxlIGl0LlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gTGV0IHRoZSByZXNwb25zZSByZXR1cm4gdG8gdGhlIGNhbGxlci5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgcmVkaXJlY3RzUmVtYWluaW5nID0gdGhpcy5fbWF4UmVkaXJlY3RzO1xuICAgICAgICAgICAgICAgIHdoaWxlIChyZXNwb25zZS5tZXNzYWdlLnN0YXR1c0NvZGUgJiZcbiAgICAgICAgICAgICAgICAgICAgSHR0cFJlZGlyZWN0Q29kZXMuaW5jbHVkZXMocmVzcG9uc2UubWVzc2FnZS5zdGF0dXNDb2RlKSAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hbGxvd1JlZGlyZWN0cyAmJlxuICAgICAgICAgICAgICAgICAgICByZWRpcmVjdHNSZW1haW5pbmcgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZGlyZWN0VXJsID0gcmVzcG9uc2UubWVzc2FnZS5oZWFkZXJzWydsb2NhdGlvbiddO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXJlZGlyZWN0VXJsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGVyZSdzIG5vIGxvY2F0aW9uIHRvIHJlZGlyZWN0IHRvLCB3ZSB3b24ndFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkUmVkaXJlY3RVcmwgPSBuZXcgVVJMKHJlZGlyZWN0VXJsKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlZFVybC5wcm90b2NvbCA9PT0gJ2h0dHBzOicgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZFVybC5wcm90b2NvbCAhPT0gcGFyc2VkUmVkaXJlY3RVcmwucHJvdG9jb2wgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICF0aGlzLl9hbGxvd1JlZGlyZWN0RG93bmdyYWRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlZGlyZWN0IGZyb20gSFRUUFMgdG8gSFRUUCBwcm90b2NvbC4gVGhpcyBkb3duZ3JhZGUgaXMgbm90IGFsbG93ZWQgZm9yIHNlY3VyaXR5IHJlYXNvbnMuIElmIHlvdSB3YW50IHRvIGFsbG93IHRoaXMgYmVoYXZpb3IsIHNldCB0aGUgYWxsb3dSZWRpcmVjdERvd25ncmFkZSBvcHRpb24gdG8gdHJ1ZS4nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIGZpbmlzaCByZWFkaW5nIHRoZSByZXNwb25zZSBiZWZvcmUgcmVhc3NpZ25pbmcgcmVzcG9uc2VcbiAgICAgICAgICAgICAgICAgICAgLy8gd2hpY2ggd2lsbCBsZWFrIHRoZSBvcGVuIHNvY2tldC5cbiAgICAgICAgICAgICAgICAgICAgeWllbGQgcmVzcG9uc2UucmVhZEJvZHkoKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gc3RyaXAgYXV0aG9yaXphdGlvbiBoZWFkZXIgaWYgcmVkaXJlY3RlZCB0byBhIGRpZmZlcmVudCBob3N0bmFtZVxuICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VkUmVkaXJlY3RVcmwuaG9zdG5hbWUgIT09IHBhcnNlZFVybC5ob3N0bmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBoZWFkZXIgaW4gaGVhZGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhlYWRlciBuYW1lcyBhcmUgY2FzZSBpbnNlbnNpdGl2ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoZWFkZXIudG9Mb3dlckNhc2UoKSA9PT0gJ2F1dGhvcml6YXRpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBoZWFkZXJzW2hlYWRlcl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIGxldCdzIG1ha2UgdGhlIHJlcXVlc3Qgd2l0aCB0aGUgbmV3IHJlZGlyZWN0VXJsXG4gICAgICAgICAgICAgICAgICAgIGluZm8gPSB0aGlzLl9wcmVwYXJlUmVxdWVzdCh2ZXJiLCBwYXJzZWRSZWRpcmVjdFVybCwgaGVhZGVycyk7XG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0geWllbGQgdGhpcy5yZXF1ZXN0UmF3KGluZm8sIGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICByZWRpcmVjdHNSZW1haW5pbmctLTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5tZXNzYWdlLnN0YXR1c0NvZGUgfHxcbiAgICAgICAgICAgICAgICAgICAgIUh0dHBSZXNwb25zZVJldHJ5Q29kZXMuaW5jbHVkZXMocmVzcG9uc2UubWVzc2FnZS5zdGF0dXNDb2RlKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBJZiBub3QgYSByZXRyeSBjb2RlLCByZXR1cm4gaW1tZWRpYXRlbHkgaW5zdGVhZCBvZiByZXRyeWluZ1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG51bVRyaWVzICs9IDE7XG4gICAgICAgICAgICAgICAgaWYgKG51bVRyaWVzIDwgbWF4VHJpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgcmVzcG9uc2UucmVhZEJvZHkoKTtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgdGhpcy5fcGVyZm9ybUV4cG9uZW50aWFsQmFja29mZihudW1Ucmllcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSB3aGlsZSAobnVtVHJpZXMgPCBtYXhUcmllcyk7XG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBOZWVkcyB0byBiZSBjYWxsZWQgaWYga2VlcEFsaXZlIGlzIHNldCB0byB0cnVlIGluIHJlcXVlc3Qgb3B0aW9ucy5cbiAgICAgKi9cbiAgICBkaXNwb3NlKCkge1xuICAgICAgICBpZiAodGhpcy5fYWdlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX2FnZW50LmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9kaXNwb3NlZCA9IHRydWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJhdyByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBpbmZvXG4gICAgICogQHBhcmFtIGRhdGFcbiAgICAgKi9cbiAgICByZXF1ZXN0UmF3KGluZm8sIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2tGb3JSZXN1bHQoZXJyLCByZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIXJlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgYGVycmAgaXMgbm90IHBhc3NlZCwgdGhlbiBgcmVzYCBtdXN0IGJlIHBhc3NlZC5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ1Vua25vd24gZXJyb3InKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5yZXF1ZXN0UmF3V2l0aENhbGxiYWNrKGluZm8sIGRhdGEsIGNhbGxiYWNrRm9yUmVzdWx0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmF3IHJlcXVlc3Qgd2l0aCBjYWxsYmFjay5cbiAgICAgKiBAcGFyYW0gaW5mb1xuICAgICAqIEBwYXJhbSBkYXRhXG4gICAgICogQHBhcmFtIG9uUmVzdWx0XG4gICAgICovXG4gICAgcmVxdWVzdFJhd1dpdGhDYWxsYmFjayhpbmZvLCBkYXRhLCBvblJlc3VsdCkge1xuICAgICAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBpZiAoIWluZm8ub3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgICAgICAgICAgICAgaW5mby5vcHRpb25zLmhlYWRlcnMgPSB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGluZm8ub3B0aW9ucy5oZWFkZXJzWydDb250ZW50LUxlbmd0aCddID0gQnVmZmVyLmJ5dGVMZW5ndGgoZGF0YSwgJ3V0ZjgnKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgY2FsbGJhY2tDYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgZnVuY3Rpb24gaGFuZGxlUmVzdWx0KGVyciwgcmVzKSB7XG4gICAgICAgICAgICBpZiAoIWNhbGxiYWNrQ2FsbGVkKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2tDYWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIG9uUmVzdWx0KGVyciwgcmVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXEgPSBpbmZvLmh0dHBNb2R1bGUucmVxdWVzdChpbmZvLm9wdGlvbnMsIChtc2cpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IG5ldyBIdHRwQ2xpZW50UmVzcG9uc2UobXNnKTtcbiAgICAgICAgICAgIGhhbmRsZVJlc3VsdCh1bmRlZmluZWQsIHJlcyk7XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgc29ja2V0O1xuICAgICAgICByZXEub24oJ3NvY2tldCcsIHNvY2sgPT4ge1xuICAgICAgICAgICAgc29ja2V0ID0gc29jaztcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIElmIHdlIGV2ZXIgZ2V0IGRpc2Nvbm5lY3RlZCwgd2Ugd2FudCB0aGUgc29ja2V0IHRvIHRpbWVvdXQgZXZlbnR1YWxseVxuICAgICAgICByZXEuc2V0VGltZW91dCh0aGlzLl9zb2NrZXRUaW1lb3V0IHx8IDMgKiA2MDAwMCwgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHNvY2tldCkge1xuICAgICAgICAgICAgICAgIHNvY2tldC5lbmQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGhhbmRsZVJlc3VsdChuZXcgRXJyb3IoYFJlcXVlc3QgdGltZW91dDogJHtpbmZvLm9wdGlvbnMucGF0aH1gKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXEub24oJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgLy8gZXJyIGhhcyBzdGF0dXNDb2RlIHByb3BlcnR5XG4gICAgICAgICAgICAvLyByZXMgc2hvdWxkIGhhdmUgaGVhZGVyc1xuICAgICAgICAgICAgaGFuZGxlUmVzdWx0KGVycik7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoZGF0YSAmJiB0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJlcS53cml0ZShkYXRhLCAndXRmOCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRhICYmIHR5cGVvZiBkYXRhICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZGF0YS5vbignY2xvc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmVxLmVuZCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBkYXRhLnBpcGUocmVxKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlcS5lbmQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXRzIGFuIGh0dHAgYWdlbnQuIFRoaXMgZnVuY3Rpb24gaXMgdXNlZnVsIHdoZW4geW91IG5lZWQgYW4gaHR0cCBhZ2VudCB0aGF0IGhhbmRsZXNcbiAgICAgKiByb3V0aW5nIHRocm91Z2ggYSBwcm94eSBzZXJ2ZXIgLSBkZXBlbmRpbmcgdXBvbiB0aGUgdXJsIGFuZCBwcm94eSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG4gICAgICogQHBhcmFtIHNlcnZlclVybCAgVGhlIHNlcnZlciBVUkwgd2hlcmUgdGhlIHJlcXVlc3Qgd2lsbCBiZSBzZW50LiBGb3IgZXhhbXBsZSwgaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbVxuICAgICAqL1xuICAgIGdldEFnZW50KHNlcnZlclVybCkge1xuICAgICAgICBjb25zdCBwYXJzZWRVcmwgPSBuZXcgVVJMKHNlcnZlclVybCk7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRBZ2VudChwYXJzZWRVcmwpO1xuICAgIH1cbiAgICBnZXRBZ2VudERpc3BhdGNoZXIoc2VydmVyVXJsKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFVybCA9IG5ldyBVUkwoc2VydmVyVXJsKTtcbiAgICAgICAgY29uc3QgcHJveHlVcmwgPSBwbS5nZXRQcm94eVVybChwYXJzZWRVcmwpO1xuICAgICAgICBjb25zdCB1c2VQcm94eSA9IHByb3h5VXJsICYmIHByb3h5VXJsLmhvc3RuYW1lO1xuICAgICAgICBpZiAoIXVzZVByb3h5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldFByb3h5QWdlbnREaXNwYXRjaGVyKHBhcnNlZFVybCwgcHJveHlVcmwpO1xuICAgIH1cbiAgICBfcHJlcGFyZVJlcXVlc3QobWV0aG9kLCByZXF1ZXN0VXJsLCBoZWFkZXJzKSB7XG4gICAgICAgIGNvbnN0IGluZm8gPSB7fTtcbiAgICAgICAgaW5mby5wYXJzZWRVcmwgPSByZXF1ZXN0VXJsO1xuICAgICAgICBjb25zdCB1c2luZ1NzbCA9IGluZm8ucGFyc2VkVXJsLnByb3RvY29sID09PSAnaHR0cHM6JztcbiAgICAgICAgaW5mby5odHRwTW9kdWxlID0gdXNpbmdTc2wgPyBodHRwcyA6IGh0dHA7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRQb3J0ID0gdXNpbmdTc2wgPyA0NDMgOiA4MDtcbiAgICAgICAgaW5mby5vcHRpb25zID0ge307XG4gICAgICAgIGluZm8ub3B0aW9ucy5ob3N0ID0gaW5mby5wYXJzZWRVcmwuaG9zdG5hbWU7XG4gICAgICAgIGluZm8ub3B0aW9ucy5wb3J0ID0gaW5mby5wYXJzZWRVcmwucG9ydFxuICAgICAgICAgICAgPyBwYXJzZUludChpbmZvLnBhcnNlZFVybC5wb3J0KVxuICAgICAgICAgICAgOiBkZWZhdWx0UG9ydDtcbiAgICAgICAgaW5mby5vcHRpb25zLnBhdGggPVxuICAgICAgICAgICAgKGluZm8ucGFyc2VkVXJsLnBhdGhuYW1lIHx8ICcnKSArIChpbmZvLnBhcnNlZFVybC5zZWFyY2ggfHwgJycpO1xuICAgICAgICBpbmZvLm9wdGlvbnMubWV0aG9kID0gbWV0aG9kO1xuICAgICAgICBpbmZvLm9wdGlvbnMuaGVhZGVycyA9IHRoaXMuX21lcmdlSGVhZGVycyhoZWFkZXJzKTtcbiAgICAgICAgaWYgKHRoaXMudXNlckFnZW50ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGluZm8ub3B0aW9ucy5oZWFkZXJzWyd1c2VyLWFnZW50J10gPSB0aGlzLnVzZXJBZ2VudDtcbiAgICAgICAgfVxuICAgICAgICBpbmZvLm9wdGlvbnMuYWdlbnQgPSB0aGlzLl9nZXRBZ2VudChpbmZvLnBhcnNlZFVybCk7XG4gICAgICAgIC8vIGdpdmVzIGhhbmRsZXJzIGFuIG9wcG9ydHVuaXR5IHRvIHBhcnRpY2lwYXRlXG4gICAgICAgIGlmICh0aGlzLmhhbmRsZXJzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGhhbmRsZXIgb2YgdGhpcy5oYW5kbGVycykge1xuICAgICAgICAgICAgICAgIGhhbmRsZXIucHJlcGFyZVJlcXVlc3QoaW5mby5vcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5mbztcbiAgICB9XG4gICAgX21lcmdlSGVhZGVycyhoZWFkZXJzKSB7XG4gICAgICAgIGlmICh0aGlzLnJlcXVlc3RPcHRpb25zICYmIHRoaXMucmVxdWVzdE9wdGlvbnMuaGVhZGVycykge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGxvd2VyY2FzZUtleXModGhpcy5yZXF1ZXN0T3B0aW9ucy5oZWFkZXJzKSwgbG93ZXJjYXNlS2V5cyhoZWFkZXJzIHx8IHt9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvd2VyY2FzZUtleXMoaGVhZGVycyB8fCB7fSk7XG4gICAgfVxuICAgIF9nZXRFeGlzdGluZ09yRGVmYXVsdEhlYWRlcihhZGRpdGlvbmFsSGVhZGVycywgaGVhZGVyLCBfZGVmYXVsdCkge1xuICAgICAgICBsZXQgY2xpZW50SGVhZGVyO1xuICAgICAgICBpZiAodGhpcy5yZXF1ZXN0T3B0aW9ucyAmJiB0aGlzLnJlcXVlc3RPcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgICAgICAgIGNsaWVudEhlYWRlciA9IGxvd2VyY2FzZUtleXModGhpcy5yZXF1ZXN0T3B0aW9ucy5oZWFkZXJzKVtoZWFkZXJdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhZGRpdGlvbmFsSGVhZGVyc1toZWFkZXJdIHx8IGNsaWVudEhlYWRlciB8fCBfZGVmYXVsdDtcbiAgICB9XG4gICAgX2dldEFnZW50KHBhcnNlZFVybCkge1xuICAgICAgICBsZXQgYWdlbnQ7XG4gICAgICAgIGNvbnN0IHByb3h5VXJsID0gcG0uZ2V0UHJveHlVcmwocGFyc2VkVXJsKTtcbiAgICAgICAgY29uc3QgdXNlUHJveHkgPSBwcm94eVVybCAmJiBwcm94eVVybC5ob3N0bmFtZTtcbiAgICAgICAgaWYgKHRoaXMuX2tlZXBBbGl2ZSAmJiB1c2VQcm94eSkge1xuICAgICAgICAgICAgYWdlbnQgPSB0aGlzLl9wcm94eUFnZW50O1xuICAgICAgICB9XG4gICAgICAgIGlmICghdXNlUHJveHkpIHtcbiAgICAgICAgICAgIGFnZW50ID0gdGhpcy5fYWdlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgYWdlbnQgaXMgYWxyZWFkeSBhc3NpZ25lZCB1c2UgdGhhdCBhZ2VudC5cbiAgICAgICAgaWYgKGFnZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gYWdlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdXNpbmdTc2wgPSBwYXJzZWRVcmwucHJvdG9jb2wgPT09ICdodHRwczonO1xuICAgICAgICBsZXQgbWF4U29ja2V0cyA9IDEwMDtcbiAgICAgICAgaWYgKHRoaXMucmVxdWVzdE9wdGlvbnMpIHtcbiAgICAgICAgICAgIG1heFNvY2tldHMgPSB0aGlzLnJlcXVlc3RPcHRpb25zLm1heFNvY2tldHMgfHwgaHR0cC5nbG9iYWxBZ2VudC5tYXhTb2NrZXRzO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRoaXMgaXMgYHVzZVByb3h5YCBhZ2FpbiwgYnV0IHdlIG5lZWQgdG8gY2hlY2sgYHByb3h5VVJsYCBkaXJlY3RseSBmb3IgVHlwZVNjcmlwdHMncyBmbG93IGFuYWx5c2lzLlxuICAgICAgICBpZiAocHJveHlVcmwgJiYgcHJveHlVcmwuaG9zdG5hbWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGFnZW50T3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICBtYXhTb2NrZXRzLFxuICAgICAgICAgICAgICAgIGtlZXBBbGl2ZTogdGhpcy5fa2VlcEFsaXZlLFxuICAgICAgICAgICAgICAgIHByb3h5OiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sICgocHJveHlVcmwudXNlcm5hbWUgfHwgcHJveHlVcmwucGFzc3dvcmQpICYmIHtcbiAgICAgICAgICAgICAgICAgICAgcHJveHlBdXRoOiBgJHtwcm94eVVybC51c2VybmFtZX06JHtwcm94eVVybC5wYXNzd29yZH1gXG4gICAgICAgICAgICAgICAgfSkpLCB7IGhvc3Q6IHByb3h5VXJsLmhvc3RuYW1lLCBwb3J0OiBwcm94eVVybC5wb3J0IH0pXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgbGV0IHR1bm5lbEFnZW50O1xuICAgICAgICAgICAgY29uc3Qgb3Zlckh0dHBzID0gcHJveHlVcmwucHJvdG9jb2wgPT09ICdodHRwczonO1xuICAgICAgICAgICAgaWYgKHVzaW5nU3NsKSB7XG4gICAgICAgICAgICAgICAgdHVubmVsQWdlbnQgPSBvdmVySHR0cHMgPyB0dW5uZWwuaHR0cHNPdmVySHR0cHMgOiB0dW5uZWwuaHR0cHNPdmVySHR0cDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHR1bm5lbEFnZW50ID0gb3Zlckh0dHBzID8gdHVubmVsLmh0dHBPdmVySHR0cHMgOiB0dW5uZWwuaHR0cE92ZXJIdHRwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWdlbnQgPSB0dW5uZWxBZ2VudChhZ2VudE9wdGlvbnMpO1xuICAgICAgICAgICAgdGhpcy5fcHJveHlBZ2VudCA9IGFnZW50O1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHR1bm5lbGluZyBhZ2VudCBpc24ndCBhc3NpZ25lZCBjcmVhdGUgYSBuZXcgYWdlbnRcbiAgICAgICAgaWYgKCFhZ2VudCkge1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHsga2VlcEFsaXZlOiB0aGlzLl9rZWVwQWxpdmUsIG1heFNvY2tldHMgfTtcbiAgICAgICAgICAgIGFnZW50ID0gdXNpbmdTc2wgPyBuZXcgaHR0cHMuQWdlbnQob3B0aW9ucykgOiBuZXcgaHR0cC5BZ2VudChvcHRpb25zKTtcbiAgICAgICAgICAgIHRoaXMuX2FnZW50ID0gYWdlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVzaW5nU3NsICYmIHRoaXMuX2lnbm9yZVNzbEVycm9yKSB7XG4gICAgICAgICAgICAvLyB3ZSBkb24ndCB3YW50IHRvIHNldCBOT0RFX1RMU19SRUpFQ1RfVU5BVVRIT1JJWkVEPTAgc2luY2UgdGhhdCB3aWxsIGFmZmVjdCByZXF1ZXN0IGZvciBlbnRpcmUgcHJvY2Vzc1xuICAgICAgICAgICAgLy8gaHR0cC5SZXF1ZXN0T3B0aW9ucyBkb2Vzbid0IGV4cG9zZSBhIHdheSB0byBtb2RpZnkgUmVxdWVzdE9wdGlvbnMuYWdlbnQub3B0aW9uc1xuICAgICAgICAgICAgLy8gd2UgaGF2ZSB0byBjYXN0IGl0IHRvIGFueSBhbmQgY2hhbmdlIGl0IGRpcmVjdGx5XG4gICAgICAgICAgICBhZ2VudC5vcHRpb25zID0gT2JqZWN0LmFzc2lnbihhZ2VudC5vcHRpb25zIHx8IHt9LCB7XG4gICAgICAgICAgICAgICAgcmVqZWN0VW5hdXRob3JpemVkOiBmYWxzZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFnZW50O1xuICAgIH1cbiAgICBfZ2V0UHJveHlBZ2VudERpc3BhdGNoZXIocGFyc2VkVXJsLCBwcm94eVVybCkge1xuICAgICAgICBsZXQgcHJveHlBZ2VudDtcbiAgICAgICAgaWYgKHRoaXMuX2tlZXBBbGl2ZSkge1xuICAgICAgICAgICAgcHJveHlBZ2VudCA9IHRoaXMuX3Byb3h5QWdlbnREaXNwYXRjaGVyO1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIGFnZW50IGlzIGFscmVhZHkgYXNzaWduZWQgdXNlIHRoYXQgYWdlbnQuXG4gICAgICAgIGlmIChwcm94eUFnZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gcHJveHlBZ2VudDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1c2luZ1NzbCA9IHBhcnNlZFVybC5wcm90b2NvbCA9PT0gJ2h0dHBzOic7XG4gICAgICAgIHByb3h5QWdlbnQgPSBuZXcgdW5kaWNpXzEuUHJveHlBZ2VudChPYmplY3QuYXNzaWduKHsgdXJpOiBwcm94eVVybC5ocmVmLCBwaXBlbGluaW5nOiAhdGhpcy5fa2VlcEFsaXZlID8gMCA6IDEgfSwgKChwcm94eVVybC51c2VybmFtZSB8fCBwcm94eVVybC5wYXNzd29yZCkgJiYge1xuICAgICAgICAgICAgdG9rZW46IGBCYXNpYyAke0J1ZmZlci5mcm9tKGAke3Byb3h5VXJsLnVzZXJuYW1lfToke3Byb3h5VXJsLnBhc3N3b3JkfWApLnRvU3RyaW5nKCdiYXNlNjQnKX1gXG4gICAgICAgIH0pKSk7XG4gICAgICAgIHRoaXMuX3Byb3h5QWdlbnREaXNwYXRjaGVyID0gcHJveHlBZ2VudDtcbiAgICAgICAgaWYgKHVzaW5nU3NsICYmIHRoaXMuX2lnbm9yZVNzbEVycm9yKSB7XG4gICAgICAgICAgICAvLyB3ZSBkb24ndCB3YW50IHRvIHNldCBOT0RFX1RMU19SRUpFQ1RfVU5BVVRIT1JJWkVEPTAgc2luY2UgdGhhdCB3aWxsIGFmZmVjdCByZXF1ZXN0IGZvciBlbnRpcmUgcHJvY2Vzc1xuICAgICAgICAgICAgLy8gaHR0cC5SZXF1ZXN0T3B0aW9ucyBkb2Vzbid0IGV4cG9zZSBhIHdheSB0byBtb2RpZnkgUmVxdWVzdE9wdGlvbnMuYWdlbnQub3B0aW9uc1xuICAgICAgICAgICAgLy8gd2UgaGF2ZSB0byBjYXN0IGl0IHRvIGFueSBhbmQgY2hhbmdlIGl0IGRpcmVjdGx5XG4gICAgICAgICAgICBwcm94eUFnZW50Lm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHByb3h5QWdlbnQub3B0aW9ucy5yZXF1ZXN0VGxzIHx8IHt9LCB7XG4gICAgICAgICAgICAgICAgcmVqZWN0VW5hdXRob3JpemVkOiBmYWxzZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb3h5QWdlbnQ7XG4gICAgfVxuICAgIF9wZXJmb3JtRXhwb25lbnRpYWxCYWNrb2ZmKHJldHJ5TnVtYmVyKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICByZXRyeU51bWJlciA9IE1hdGgubWluKEV4cG9uZW50aWFsQmFja29mZkNlaWxpbmcsIHJldHJ5TnVtYmVyKTtcbiAgICAgICAgICAgIGNvbnN0IG1zID0gRXhwb25lbnRpYWxCYWNrb2ZmVGltZVNsaWNlICogTWF0aC5wb3coMiwgcmV0cnlOdW1iZXIpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dCgoKSA9PiByZXNvbHZlKCksIG1zKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfcHJvY2Vzc1Jlc3BvbnNlKHJlcywgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGF0dXNDb2RlID0gcmVzLm1lc3NhZ2Uuc3RhdHVzQ29kZSB8fCAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0ge1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXNDb2RlLFxuICAgICAgICAgICAgICAgICAgICByZXN1bHQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHt9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAvLyBub3QgZm91bmQgbGVhZHMgdG8gbnVsbCBvYmogcmV0dXJuZWRcbiAgICAgICAgICAgICAgICBpZiAoc3RhdHVzQ29kZSA9PT0gSHR0cENvZGVzLk5vdEZvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBnZXQgdGhlIHJlc3VsdCBmcm9tIHRoZSBib2R5XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gZGF0ZVRpbWVEZXNlcmlhbGl6ZXIoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYSA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNOYU4oYS52YWx1ZU9mKCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgb2JqO1xuICAgICAgICAgICAgICAgIGxldCBjb250ZW50cztcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb250ZW50cyA9IHlpZWxkIHJlcy5yZWFkQm9keSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudHMgJiYgY29udGVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5kZXNlcmlhbGl6ZURhdGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqID0gSlNPTi5wYXJzZShjb250ZW50cywgZGF0ZVRpbWVEZXNlcmlhbGl6ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqID0gSlNPTi5wYXJzZShjb250ZW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5yZXN1bHQgPSBvYmo7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuaGVhZGVycyA9IHJlcy5tZXNzYWdlLmhlYWRlcnM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSW52YWxpZCByZXNvdXJjZSAoY29udGVudHMgbm90IGpzb24pOyAgbGVhdmluZyByZXN1bHQgb2JqIG51bGxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gbm90ZSB0aGF0IDN4eCByZWRpcmVjdHMgYXJlIGhhbmRsZWQgYnkgdGhlIGh0dHAgbGF5ZXIuXG4gICAgICAgICAgICAgICAgaWYgKHN0YXR1c0NvZGUgPiAyOTkpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG1zZztcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgZXhjZXB0aW9uL2Vycm9yIGluIGJvZHksIGF0dGVtcHQgdG8gZ2V0IGJldHRlciBlcnJvclxuICAgICAgICAgICAgICAgICAgICBpZiAob2JqICYmIG9iai5tZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSBvYmoubWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb250ZW50cyAmJiBjb250ZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpdCBtYXkgYmUgdGhlIGNhc2UgdGhhdCB0aGUgZXhjZXB0aW9uIGlzIGluIHRoZSBib2R5IG1lc3NhZ2UgYXMgc3RyaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSBjb250ZW50cztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9IGBGYWlsZWQgcmVxdWVzdDogKCR7c3RhdHVzQ29kZX0pYDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnIgPSBuZXcgSHR0cENsaWVudEVycm9yKG1zZywgc3RhdHVzQ29kZSk7XG4gICAgICAgICAgICAgICAgICAgIGVyci5yZXN1bHQgPSByZXNwb25zZS5yZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnRzLkh0dHBDbGllbnQgPSBIdHRwQ2xpZW50O1xuY29uc3QgbG93ZXJjYXNlS2V5cyA9IChvYmopID0+IE9iamVjdC5rZXlzKG9iaikucmVkdWNlKChjLCBrKSA9PiAoKGNbay50b0xvd2VyQ2FzZSgpXSA9IG9ialtrXSksIGMpLCB7fSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlBlcnNvbmFsQWNjZXNzVG9rZW5DcmVkZW50aWFsSGFuZGxlciA9IGV4cG9ydHMuQmVhcmVyQ3JlZGVudGlhbEhhbmRsZXIgPSBleHBvcnRzLkJhc2ljQ3JlZGVudGlhbEhhbmRsZXIgPSB2b2lkIDA7XG5jbGFzcyBCYXNpY0NyZWRlbnRpYWxIYW5kbGVyIHtcbiAgICBjb25zdHJ1Y3Rvcih1c2VybmFtZSwgcGFzc3dvcmQpIHtcbiAgICAgICAgdGhpcy51c2VybmFtZSA9IHVzZXJuYW1lO1xuICAgICAgICB0aGlzLnBhc3N3b3JkID0gcGFzc3dvcmQ7XG4gICAgfVxuICAgIHByZXBhcmVSZXF1ZXN0KG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKCFvcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCdUaGUgcmVxdWVzdCBoYXMgbm8gaGVhZGVycycpO1xuICAgICAgICB9XG4gICAgICAgIG9wdGlvbnMuaGVhZGVyc1snQXV0aG9yaXphdGlvbiddID0gYEJhc2ljICR7QnVmZmVyLmZyb20oYCR7dGhpcy51c2VybmFtZX06JHt0aGlzLnBhc3N3b3JkfWApLnRvU3RyaW5nKCdiYXNlNjQnKX1gO1xuICAgIH1cbiAgICAvLyBUaGlzIGhhbmRsZXIgY2Fubm90IGhhbmRsZSA0MDFcbiAgICBjYW5IYW5kbGVBdXRoZW50aWNhdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBoYW5kbGVBdXRoZW50aWNhdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbm90IGltcGxlbWVudGVkJyk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuQmFzaWNDcmVkZW50aWFsSGFuZGxlciA9IEJhc2ljQ3JlZGVudGlhbEhhbmRsZXI7XG5jbGFzcyBCZWFyZXJDcmVkZW50aWFsSGFuZGxlciB7XG4gICAgY29uc3RydWN0b3IodG9rZW4pIHtcbiAgICAgICAgdGhpcy50b2tlbiA9IHRva2VuO1xuICAgIH1cbiAgICAvLyBjdXJyZW50bHkgaW1wbGVtZW50cyBwcmUtYXV0aG9yaXphdGlvblxuICAgIC8vIFRPRE86IHN1cHBvcnQgcHJlQXV0aCA9IGZhbHNlIHdoZXJlIGl0IGhvb2tzIG9uIDQwMVxuICAgIHByZXBhcmVSZXF1ZXN0KG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKCFvcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCdUaGUgcmVxdWVzdCBoYXMgbm8gaGVhZGVycycpO1xuICAgICAgICB9XG4gICAgICAgIG9wdGlvbnMuaGVhZGVyc1snQXV0aG9yaXphdGlvbiddID0gYEJlYXJlciAke3RoaXMudG9rZW59YDtcbiAgICB9XG4gICAgLy8gVGhpcyBoYW5kbGVyIGNhbm5vdCBoYW5kbGUgNDAxXG4gICAgY2FuSGFuZGxlQXV0aGVudGljYXRpb24oKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaGFuZGxlQXV0aGVudGljYXRpb24oKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBpbXBsZW1lbnRlZCcpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnRzLkJlYXJlckNyZWRlbnRpYWxIYW5kbGVyID0gQmVhcmVyQ3JlZGVudGlhbEhhbmRsZXI7XG5jbGFzcyBQZXJzb25hbEFjY2Vzc1Rva2VuQ3JlZGVudGlhbEhhbmRsZXIge1xuICAgIGNvbnN0cnVjdG9yKHRva2VuKSB7XG4gICAgICAgIHRoaXMudG9rZW4gPSB0b2tlbjtcbiAgICB9XG4gICAgLy8gY3VycmVudGx5IGltcGxlbWVudHMgcHJlLWF1dGhvcml6YXRpb25cbiAgICAvLyBUT0RPOiBzdXBwb3J0IHByZUF1dGggPSBmYWxzZSB3aGVyZSBpdCBob29rcyBvbiA0MDFcbiAgICBwcmVwYXJlUmVxdWVzdChvcHRpb25zKSB7XG4gICAgICAgIGlmICghb3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcignVGhlIHJlcXVlc3QgaGFzIG5vIGhlYWRlcnMnKTtcbiAgICAgICAgfVxuICAgICAgICBvcHRpb25zLmhlYWRlcnNbJ0F1dGhvcml6YXRpb24nXSA9IGBCYXNpYyAke0J1ZmZlci5mcm9tKGBQQVQ6JHt0aGlzLnRva2VufWApLnRvU3RyaW5nKCdiYXNlNjQnKX1gO1xuICAgIH1cbiAgICAvLyBUaGlzIGhhbmRsZXIgY2Fubm90IGhhbmRsZSA0MDFcbiAgICBjYW5IYW5kbGVBdXRoZW50aWNhdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBoYW5kbGVBdXRoZW50aWNhdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbm90IGltcGxlbWVudGVkJyk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuUGVyc29uYWxBY2Nlc3NUb2tlbkNyZWRlbnRpYWxIYW5kbGVyID0gUGVyc29uYWxBY2Nlc3NUb2tlbkNyZWRlbnRpYWxIYW5kbGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXV0aC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk9pZGNDbGllbnQgPSB2b2lkIDA7XG5jb25zdCBodHRwX2NsaWVudF8xID0gcmVxdWlyZShcIkBhY3Rpb25zL2h0dHAtY2xpZW50XCIpO1xuY29uc3QgYXV0aF8xID0gcmVxdWlyZShcIkBhY3Rpb25zL2h0dHAtY2xpZW50L2xpYi9hdXRoXCIpO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIi4vY29yZVwiKTtcbmNsYXNzIE9pZGNDbGllbnQge1xuICAgIHN0YXRpYyBjcmVhdGVIdHRwQ2xpZW50KGFsbG93UmV0cnkgPSB0cnVlLCBtYXhSZXRyeSA9IDEwKSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zID0ge1xuICAgICAgICAgICAgYWxsb3dSZXRyaWVzOiBhbGxvd1JldHJ5LFxuICAgICAgICAgICAgbWF4UmV0cmllczogbWF4UmV0cnlcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG5ldyBodHRwX2NsaWVudF8xLkh0dHBDbGllbnQoJ2FjdGlvbnMvb2lkYy1jbGllbnQnLCBbbmV3IGF1dGhfMS5CZWFyZXJDcmVkZW50aWFsSGFuZGxlcihPaWRjQ2xpZW50LmdldFJlcXVlc3RUb2tlbigpKV0sIHJlcXVlc3RPcHRpb25zKTtcbiAgICB9XG4gICAgc3RhdGljIGdldFJlcXVlc3RUb2tlbigpIHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSBwcm9jZXNzLmVudlsnQUNUSU9OU19JRF9UT0tFTl9SRVFVRVNUX1RPS0VOJ107XG4gICAgICAgIGlmICghdG9rZW4pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGdldCBBQ1RJT05TX0lEX1RPS0VOX1JFUVVFU1RfVE9LRU4gZW52IHZhcmlhYmxlJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgIH1cbiAgICBzdGF0aWMgZ2V0SURUb2tlblVybCgpIHtcbiAgICAgICAgY29uc3QgcnVudGltZVVybCA9IHByb2Nlc3MuZW52WydBQ1RJT05TX0lEX1RPS0VOX1JFUVVFU1RfVVJMJ107XG4gICAgICAgIGlmICghcnVudGltZVVybCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gZ2V0IEFDVElPTlNfSURfVE9LRU5fUkVRVUVTVF9VUkwgZW52IHZhcmlhYmxlJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJ1bnRpbWVVcmw7XG4gICAgfVxuICAgIHN0YXRpYyBnZXRDYWxsKGlkX3Rva2VuX3VybCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCBodHRwY2xpZW50ID0gT2lkY0NsaWVudC5jcmVhdGVIdHRwQ2xpZW50KCk7XG4gICAgICAgICAgICBjb25zdCByZXMgPSB5aWVsZCBodHRwY2xpZW50XG4gICAgICAgICAgICAgICAgLmdldEpzb24oaWRfdG9rZW5fdXJsKVxuICAgICAgICAgICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZ2V0IElEIFRva2VuLiBcXG4gXG4gICAgICAgIEVycm9yIENvZGUgOiAke2Vycm9yLnN0YXR1c0NvZGV9XFxuIFxuICAgICAgICBFcnJvciBNZXNzYWdlOiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGlkX3Rva2VuID0gKF9hID0gcmVzLnJlc3VsdCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlO1xuICAgICAgICAgICAgaWYgKCFpZF90b2tlbikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVzcG9uc2UganNvbiBib2R5IGRvIG5vdCBoYXZlIElEIFRva2VuIGZpZWxkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaWRfdG9rZW47XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBzdGF0aWMgZ2V0SURUb2tlbihhdWRpZW5jZSkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAvLyBOZXcgSUQgVG9rZW4gaXMgcmVxdWVzdGVkIGZyb20gYWN0aW9uIHNlcnZpY2VcbiAgICAgICAgICAgICAgICBsZXQgaWRfdG9rZW5fdXJsID0gT2lkY0NsaWVudC5nZXRJRFRva2VuVXJsKCk7XG4gICAgICAgICAgICAgICAgaWYgKGF1ZGllbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuY29kZWRBdWRpZW5jZSA9IGVuY29kZVVSSUNvbXBvbmVudChhdWRpZW5jZSk7XG4gICAgICAgICAgICAgICAgICAgIGlkX3Rva2VuX3VybCA9IGAke2lkX3Rva2VuX3VybH0mYXVkaWVuY2U9JHtlbmNvZGVkQXVkaWVuY2V9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKDAsIGNvcmVfMS5kZWJ1ZykoYElEIHRva2VuIHVybCBpcyAke2lkX3Rva2VuX3VybH1gKTtcbiAgICAgICAgICAgICAgICBjb25zdCBpZF90b2tlbiA9IHlpZWxkIE9pZGNDbGllbnQuZ2V0Q2FsbChpZF90b2tlbl91cmwpO1xuICAgICAgICAgICAgICAgICgwLCBjb3JlXzEuc2V0U2VjcmV0KShpZF90b2tlbik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlkX3Rva2VuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBtZXNzYWdlOiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuT2lkY0NsaWVudCA9IE9pZGNDbGllbnQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1vaWRjLXV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc3VtbWFyeSA9IGV4cG9ydHMubWFya2Rvd25TdW1tYXJ5ID0gZXhwb3J0cy5TVU1NQVJZX0RPQ1NfVVJMID0gZXhwb3J0cy5TVU1NQVJZX0VOVl9WQVIgPSB2b2lkIDA7XG5jb25zdCBvc18xID0gcmVxdWlyZShcIm9zXCIpO1xuY29uc3QgZnNfMSA9IHJlcXVpcmUoXCJmc1wiKTtcbmNvbnN0IHsgYWNjZXNzLCBhcHBlbmRGaWxlLCB3cml0ZUZpbGUgfSA9IGZzXzEucHJvbWlzZXM7XG5leHBvcnRzLlNVTU1BUllfRU5WX1ZBUiA9ICdHSVRIVUJfU1RFUF9TVU1NQVJZJztcbmV4cG9ydHMuU1VNTUFSWV9ET0NTX1VSTCA9ICdodHRwczovL2RvY3MuZ2l0aHViLmNvbS9hY3Rpb25zL3VzaW5nLXdvcmtmbG93cy93b3JrZmxvdy1jb21tYW5kcy1mb3ItZ2l0aHViLWFjdGlvbnMjYWRkaW5nLWEtam9iLXN1bW1hcnknO1xuY2xhc3MgU3VtbWFyeSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuX2J1ZmZlciA9ICcnO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBGaW5kcyB0aGUgc3VtbWFyeSBmaWxlIHBhdGggZnJvbSB0aGUgZW52aXJvbm1lbnQsIHJlamVjdHMgaWYgZW52IHZhciBpcyBub3QgZm91bmQgb3IgZmlsZSBkb2VzIG5vdCBleGlzdFxuICAgICAqIEFsc28gY2hlY2tzIHIvdyBwZXJtaXNzaW9ucy5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHN0ZXAgc3VtbWFyeSBmaWxlIHBhdGhcbiAgICAgKi9cbiAgICBmaWxlUGF0aCgpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9maWxlUGF0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9maWxlUGF0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHBhdGhGcm9tRW52ID0gcHJvY2Vzcy5lbnZbZXhwb3J0cy5TVU1NQVJZX0VOVl9WQVJdO1xuICAgICAgICAgICAgaWYgKCFwYXRoRnJvbUVudikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGZpbmQgZW52aXJvbm1lbnQgdmFyaWFibGUgZm9yICQke2V4cG9ydHMuU1VNTUFSWV9FTlZfVkFSfS4gQ2hlY2sgaWYgeW91ciBydW50aW1lIGVudmlyb25tZW50IHN1cHBvcnRzIGpvYiBzdW1tYXJpZXMuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHlpZWxkIGFjY2VzcyhwYXRoRnJvbUVudiwgZnNfMS5jb25zdGFudHMuUl9PSyB8IGZzXzEuY29uc3RhbnRzLldfT0spO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gYWNjZXNzIHN1bW1hcnkgZmlsZTogJyR7cGF0aEZyb21FbnZ9Jy4gQ2hlY2sgaWYgdGhlIGZpbGUgaGFzIGNvcnJlY3QgcmVhZC93cml0ZSBwZXJtaXNzaW9ucy5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX2ZpbGVQYXRoID0gcGF0aEZyb21FbnY7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZmlsZVBhdGg7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXcmFwcyBjb250ZW50IGluIGFuIEhUTUwgdGFnLCBhZGRpbmcgYW55IEhUTUwgYXR0cmlidXRlc1xuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRhZyBIVE1MIHRhZyB0byB3cmFwXG4gICAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsfSBjb250ZW50IGNvbnRlbnQgd2l0aGluIHRoZSB0YWdcbiAgICAgKiBAcGFyYW0ge1thdHRyaWJ1dGU6IHN0cmluZ106IHN0cmluZ30gYXR0cnMga2V5LXZhbHVlIGxpc3Qgb2YgSFRNTCBhdHRyaWJ1dGVzIHRvIGFkZFxuICAgICAqXG4gICAgICogQHJldHVybnMge3N0cmluZ30gY29udGVudCB3cmFwcGVkIGluIEhUTUwgZWxlbWVudFxuICAgICAqL1xuICAgIHdyYXAodGFnLCBjb250ZW50LCBhdHRycyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IGh0bWxBdHRycyA9IE9iamVjdC5lbnRyaWVzKGF0dHJzKVxuICAgICAgICAgICAgLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBgICR7a2V5fT1cIiR7dmFsdWV9XCJgKVxuICAgICAgICAgICAgLmpvaW4oJycpO1xuICAgICAgICBpZiAoIWNvbnRlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBgPCR7dGFnfSR7aHRtbEF0dHJzfT5gO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgPCR7dGFnfSR7aHRtbEF0dHJzfT4ke2NvbnRlbnR9PC8ke3RhZ30+YDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGVzIHRleHQgaW4gdGhlIGJ1ZmZlciB0byB0aGUgc3VtbWFyeSBidWZmZXIgZmlsZSBhbmQgZW1wdGllcyBidWZmZXIuIFdpbGwgYXBwZW5kIGJ5IGRlZmF1bHQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N1bW1hcnlXcml0ZU9wdGlvbnN9IFtvcHRpb25zXSAob3B0aW9uYWwpIG9wdGlvbnMgZm9yIHdyaXRlIG9wZXJhdGlvblxuICAgICAqXG4gICAgICogQHJldHVybnMge1Byb21pc2U8U3VtbWFyeT59IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICB3cml0ZShvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCBvdmVyd3JpdGUgPSAhIShvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMub3ZlcndyaXRlKTtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVQYXRoID0geWllbGQgdGhpcy5maWxlUGF0aCgpO1xuICAgICAgICAgICAgY29uc3Qgd3JpdGVGdW5jID0gb3ZlcndyaXRlID8gd3JpdGVGaWxlIDogYXBwZW5kRmlsZTtcbiAgICAgICAgICAgIHlpZWxkIHdyaXRlRnVuYyhmaWxlUGF0aCwgdGhpcy5fYnVmZmVyLCB7IGVuY29kaW5nOiAndXRmOCcgfSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lbXB0eUJ1ZmZlcigpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2xlYXJzIHRoZSBzdW1tYXJ5IGJ1ZmZlciBhbmQgd2lwZXMgdGhlIHN1bW1hcnkgZmlsZVxuICAgICAqXG4gICAgICogQHJldHVybnMge1N1bW1hcnl9IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBjbGVhcigpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVtcHR5QnVmZmVyKCkud3JpdGUoeyBvdmVyd3JpdGU6IHRydWUgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHN1bW1hcnkgYnVmZmVyIGFzIGEgc3RyaW5nXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBzdHJpbmcgb2Ygc3VtbWFyeSBidWZmZXJcbiAgICAgKi9cbiAgICBzdHJpbmdpZnkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9idWZmZXI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElmIHRoZSBzdW1tYXJ5IGJ1ZmZlciBpcyBlbXB0eVxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlbn0gdHJ1ZSBpZiB0aGUgYnVmZmVyIGlzIGVtcHR5XG4gICAgICovXG4gICAgaXNFbXB0eUJ1ZmZlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlci5sZW5ndGggPT09IDA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlc2V0cyB0aGUgc3VtbWFyeSBidWZmZXIgd2l0aG91dCB3cml0aW5nIHRvIHN1bW1hcnkgZmlsZVxuICAgICAqXG4gICAgICogQHJldHVybnMge1N1bW1hcnl9IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBlbXB0eUJ1ZmZlcigpIHtcbiAgICAgICAgdGhpcy5fYnVmZmVyID0gJyc7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIHJhdyB0ZXh0IHRvIHRoZSBzdW1tYXJ5IGJ1ZmZlclxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgY29udGVudCB0byBhZGRcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthZGRFT0w9ZmFsc2VdIChvcHRpb25hbCkgYXBwZW5kIGFuIEVPTCB0byB0aGUgcmF3IHRleHQgKGRlZmF1bHQ6IGZhbHNlKVxuICAgICAqXG4gICAgICogQHJldHVybnMge1N1bW1hcnl9IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBhZGRSYXcodGV4dCwgYWRkRU9MID0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5fYnVmZmVyICs9IHRleHQ7XG4gICAgICAgIHJldHVybiBhZGRFT0wgPyB0aGlzLmFkZEVPTCgpIDogdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyB0aGUgb3BlcmF0aW5nIHN5c3RlbS1zcGVjaWZpYyBlbmQtb2YtbGluZSBtYXJrZXIgdG8gdGhlIGJ1ZmZlclxuICAgICAqXG4gICAgICogQHJldHVybnMge1N1bW1hcnl9IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBhZGRFT0woKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZFJhdyhvc18xLkVPTCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYW4gSFRNTCBjb2RlYmxvY2sgdG8gdGhlIHN1bW1hcnkgYnVmZmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY29kZSBjb250ZW50IHRvIHJlbmRlciB3aXRoaW4gZmVuY2VkIGNvZGUgYmxvY2tcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbGFuZyAob3B0aW9uYWwpIGxhbmd1YWdlIHRvIHN5bnRheCBoaWdobGlnaHQgY29kZVxuICAgICAqXG4gICAgICogQHJldHVybnMge1N1bW1hcnl9IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBhZGRDb2RlQmxvY2soY29kZSwgbGFuZykge1xuICAgICAgICBjb25zdCBhdHRycyA9IE9iamVjdC5hc3NpZ24oe30sIChsYW5nICYmIHsgbGFuZyB9KSk7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLndyYXAoJ3ByZScsIHRoaXMud3JhcCgnY29kZScsIGNvZGUpLCBhdHRycyk7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZFJhdyhlbGVtZW50KS5hZGRFT0woKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhbiBIVE1MIGxpc3QgdG8gdGhlIHN1bW1hcnkgYnVmZmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBpdGVtcyBsaXN0IG9mIGl0ZW1zIHRvIHJlbmRlclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29yZGVyZWQ9ZmFsc2VdIChvcHRpb25hbCkgaWYgdGhlIHJlbmRlcmVkIGxpc3Qgc2hvdWxkIGJlIG9yZGVyZWQgb3Igbm90IChkZWZhdWx0OiBmYWxzZSlcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtTdW1tYXJ5fSBzdW1tYXJ5IGluc3RhbmNlXG4gICAgICovXG4gICAgYWRkTGlzdChpdGVtcywgb3JkZXJlZCA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IHRhZyA9IG9yZGVyZWQgPyAnb2wnIDogJ3VsJztcbiAgICAgICAgY29uc3QgbGlzdEl0ZW1zID0gaXRlbXMubWFwKGl0ZW0gPT4gdGhpcy53cmFwKCdsaScsIGl0ZW0pKS5qb2luKCcnKTtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMud3JhcCh0YWcsIGxpc3RJdGVtcyk7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZFJhdyhlbGVtZW50KS5hZGRFT0woKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhbiBIVE1MIHRhYmxlIHRvIHRoZSBzdW1tYXJ5IGJ1ZmZlclxuICAgICAqXG4gICAgICogQHBhcmFtIHtTdW1tYXJ5VGFibGVDZWxsW119IHJvd3MgdGFibGUgcm93c1xuICAgICAqXG4gICAgICogQHJldHVybnMge1N1bW1hcnl9IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBhZGRUYWJsZShyb3dzKSB7XG4gICAgICAgIGNvbnN0IHRhYmxlQm9keSA9IHJvd3NcbiAgICAgICAgICAgIC5tYXAocm93ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNlbGxzID0gcm93XG4gICAgICAgICAgICAgICAgLm1hcChjZWxsID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNlbGwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLndyYXAoJ3RkJywgY2VsbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHsgaGVhZGVyLCBkYXRhLCBjb2xzcGFuLCByb3dzcGFuIH0gPSBjZWxsO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhZyA9IGhlYWRlciA/ICd0aCcgOiAndGQnO1xuICAgICAgICAgICAgICAgIGNvbnN0IGF0dHJzID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCAoY29sc3BhbiAmJiB7IGNvbHNwYW4gfSkpLCAocm93c3BhbiAmJiB7IHJvd3NwYW4gfSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLndyYXAodGFnLCBkYXRhLCBhdHRycyk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5qb2luKCcnKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLndyYXAoJ3RyJywgY2VsbHMpO1xuICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oJycpO1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy53cmFwKCd0YWJsZScsIHRhYmxlQm9keSk7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZFJhdyhlbGVtZW50KS5hZGRFT0woKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhIGNvbGxhcHNhYmxlIEhUTUwgZGV0YWlscyBlbGVtZW50IHRvIHRoZSBzdW1tYXJ5IGJ1ZmZlclxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGxhYmVsIHRleHQgZm9yIHRoZSBjbG9zZWQgc3RhdGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCBjb2xsYXBzYWJsZSBjb250ZW50XG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7U3VtbWFyeX0gc3VtbWFyeSBpbnN0YW5jZVxuICAgICAqL1xuICAgIGFkZERldGFpbHMobGFiZWwsIGNvbnRlbnQpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMud3JhcCgnZGV0YWlscycsIHRoaXMud3JhcCgnc3VtbWFyeScsIGxhYmVsKSArIGNvbnRlbnQpO1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRSYXcoZWxlbWVudCkuYWRkRU9MKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYW4gSFRNTCBpbWFnZSB0YWcgdG8gdGhlIHN1bW1hcnkgYnVmZmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3JjIHBhdGggdG8gdGhlIGltYWdlIHlvdSB0byBlbWJlZFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhbHQgdGV4dCBkZXNjcmlwdGlvbiBvZiB0aGUgaW1hZ2VcbiAgICAgKiBAcGFyYW0ge1N1bW1hcnlJbWFnZU9wdGlvbnN9IG9wdGlvbnMgKG9wdGlvbmFsKSBhZGRpdGlvbiBpbWFnZSBhdHRyaWJ1dGVzXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7U3VtbWFyeX0gc3VtbWFyeSBpbnN0YW5jZVxuICAgICAqL1xuICAgIGFkZEltYWdlKHNyYywgYWx0LCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgY29uc3QgYXR0cnMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sICh3aWR0aCAmJiB7IHdpZHRoIH0pKSwgKGhlaWdodCAmJiB7IGhlaWdodCB9KSk7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLndyYXAoJ2ltZycsIG51bGwsIE9iamVjdC5hc3NpZ24oeyBzcmMsIGFsdCB9LCBhdHRycykpO1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRSYXcoZWxlbWVudCkuYWRkRU9MKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYW4gSFRNTCBzZWN0aW9uIGhlYWRpbmcgZWxlbWVudFxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgaGVhZGluZyB0ZXh0XG4gICAgICogQHBhcmFtIHtudW1iZXIgfCBzdHJpbmd9IFtsZXZlbD0xXSAob3B0aW9uYWwpIHRoZSBoZWFkaW5nIGxldmVsLCBkZWZhdWx0OiAxXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7U3VtbWFyeX0gc3VtbWFyeSBpbnN0YW5jZVxuICAgICAqL1xuICAgIGFkZEhlYWRpbmcodGV4dCwgbGV2ZWwpIHtcbiAgICAgICAgY29uc3QgdGFnID0gYGgke2xldmVsfWA7XG4gICAgICAgIGNvbnN0IGFsbG93ZWRUYWcgPSBbJ2gxJywgJ2gyJywgJ2gzJywgJ2g0JywgJ2g1JywgJ2g2J10uaW5jbHVkZXModGFnKVxuICAgICAgICAgICAgPyB0YWdcbiAgICAgICAgICAgIDogJ2gxJztcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMud3JhcChhbGxvd2VkVGFnLCB0ZXh0KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkUmF3KGVsZW1lbnQpLmFkZEVPTCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGFuIEhUTUwgdGhlbWF0aWMgYnJlYWsgKDxocj4pIHRvIHRoZSBzdW1tYXJ5IGJ1ZmZlclxuICAgICAqXG4gICAgICogQHJldHVybnMge1N1bW1hcnl9IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBhZGRTZXBhcmF0b3IoKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLndyYXAoJ2hyJywgbnVsbCk7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZFJhdyhlbGVtZW50KS5hZGRFT0woKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhbiBIVE1MIGxpbmUgYnJlYWsgKDxicj4pIHRvIHRoZSBzdW1tYXJ5IGJ1ZmZlclxuICAgICAqXG4gICAgICogQHJldHVybnMge1N1bW1hcnl9IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBhZGRCcmVhaygpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMud3JhcCgnYnInLCBudWxsKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkUmF3KGVsZW1lbnQpLmFkZEVPTCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGFuIEhUTUwgYmxvY2txdW90ZSB0byB0aGUgc3VtbWFyeSBidWZmZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IHF1b3RlIHRleHRcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY2l0ZSAob3B0aW9uYWwpIGNpdGF0aW9uIHVybFxuICAgICAqXG4gICAgICogQHJldHVybnMge1N1bW1hcnl9IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBhZGRRdW90ZSh0ZXh0LCBjaXRlKSB7XG4gICAgICAgIGNvbnN0IGF0dHJzID0gT2JqZWN0LmFzc2lnbih7fSwgKGNpdGUgJiYgeyBjaXRlIH0pKTtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMud3JhcCgnYmxvY2txdW90ZScsIHRleHQsIGF0dHJzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkUmF3KGVsZW1lbnQpLmFkZEVPTCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGFuIEhUTUwgYW5jaG9yIHRhZyB0byB0aGUgc3VtbWFyeSBidWZmZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IGxpbmsgdGV4dC9jb250ZW50XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGhyZWYgaHlwZXJsaW5rXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7U3VtbWFyeX0gc3VtbWFyeSBpbnN0YW5jZVxuICAgICAqL1xuICAgIGFkZExpbmsodGV4dCwgaHJlZikge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy53cmFwKCdhJywgdGV4dCwgeyBocmVmIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRSYXcoZWxlbWVudCkuYWRkRU9MKCk7XG4gICAgfVxufVxuY29uc3QgX3N1bW1hcnkgPSBuZXcgU3VtbWFyeSgpO1xuLyoqXG4gKiBAZGVwcmVjYXRlZCB1c2UgYGNvcmUuc3VtbWFyeWBcbiAqL1xuZXhwb3J0cy5tYXJrZG93blN1bW1hcnkgPSBfc3VtbWFyeTtcbmV4cG9ydHMuc3VtbWFyeSA9IF9zdW1tYXJ5O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3VtbWFyeS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRvUGxhdGZvcm1QYXRoID0gZXhwb3J0cy50b1dpbjMyUGF0aCA9IGV4cG9ydHMudG9Qb3NpeFBhdGggPSB2b2lkIDA7XG5jb25zdCBwYXRoID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJwYXRoXCIpKTtcbi8qKlxuICogdG9Qb3NpeFBhdGggY29udmVydHMgdGhlIGdpdmVuIHBhdGggdG8gdGhlIHBvc2l4IGZvcm0uIE9uIFdpbmRvd3MsIFxcXFwgd2lsbCBiZVxuICogcmVwbGFjZWQgd2l0aCAvLlxuICpcbiAqIEBwYXJhbSBwdGguIFBhdGggdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiBzdHJpbmcgUG9zaXggcGF0aC5cbiAqL1xuZnVuY3Rpb24gdG9Qb3NpeFBhdGgocHRoKSB7XG4gICAgcmV0dXJuIHB0aC5yZXBsYWNlKC9bXFxcXF0vZywgJy8nKTtcbn1cbmV4cG9ydHMudG9Qb3NpeFBhdGggPSB0b1Bvc2l4UGF0aDtcbi8qKlxuICogdG9XaW4zMlBhdGggY29udmVydHMgdGhlIGdpdmVuIHBhdGggdG8gdGhlIHdpbjMyIGZvcm0uIE9uIExpbnV4LCAvIHdpbGwgYmVcbiAqIHJlcGxhY2VkIHdpdGggXFxcXC5cbiAqXG4gKiBAcGFyYW0gcHRoLiBQYXRoIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4gc3RyaW5nIFdpbjMyIHBhdGguXG4gKi9cbmZ1bmN0aW9uIHRvV2luMzJQYXRoKHB0aCkge1xuICAgIHJldHVybiBwdGgucmVwbGFjZSgvWy9dL2csICdcXFxcJyk7XG59XG5leHBvcnRzLnRvV2luMzJQYXRoID0gdG9XaW4zMlBhdGg7XG4vKipcbiAqIHRvUGxhdGZvcm1QYXRoIGNvbnZlcnRzIHRoZSBnaXZlbiBwYXRoIHRvIGEgcGxhdGZvcm0tc3BlY2lmaWMgcGF0aC4gSXQgZG9lc1xuICogdGhpcyBieSByZXBsYWNpbmcgaW5zdGFuY2VzIG9mIC8gYW5kIFxcIHdpdGggdGhlIHBsYXRmb3JtLXNwZWNpZmljIHBhdGhcbiAqIHNlcGFyYXRvci5cbiAqXG4gKiBAcGFyYW0gcHRoIFRoZSBwYXRoIHRvIHBsYXRmb3JtaXplLlxuICogQHJldHVybiBzdHJpbmcgVGhlIHBsYXRmb3JtLXNwZWNpZmljIHBhdGguXG4gKi9cbmZ1bmN0aW9uIHRvUGxhdGZvcm1QYXRoKHB0aCkge1xuICAgIHJldHVybiBwdGgucmVwbGFjZSgvWy9cXFxcXS9nLCBwYXRoLnNlcCk7XG59XG5leHBvcnRzLnRvUGxhdGZvcm1QYXRoID0gdG9QbGF0Zm9ybVBhdGg7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wYXRoLXV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfSk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG52YXIgX2E7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldENtZFBhdGggPSBleHBvcnRzLnRyeUdldEV4ZWN1dGFibGVQYXRoID0gZXhwb3J0cy5pc1Jvb3RlZCA9IGV4cG9ydHMuaXNEaXJlY3RvcnkgPSBleHBvcnRzLmV4aXN0cyA9IGV4cG9ydHMuUkVBRE9OTFkgPSBleHBvcnRzLlVWX0ZTX09fRVhMT0NLID0gZXhwb3J0cy5JU19XSU5ET1dTID0gZXhwb3J0cy51bmxpbmsgPSBleHBvcnRzLnN5bWxpbmsgPSBleHBvcnRzLnN0YXQgPSBleHBvcnRzLnJtZGlyID0gZXhwb3J0cy5ybSA9IGV4cG9ydHMucmVuYW1lID0gZXhwb3J0cy5yZWFkbGluayA9IGV4cG9ydHMucmVhZGRpciA9IGV4cG9ydHMub3BlbiA9IGV4cG9ydHMubWtkaXIgPSBleHBvcnRzLmxzdGF0ID0gZXhwb3J0cy5jb3B5RmlsZSA9IGV4cG9ydHMuY2htb2QgPSB2b2lkIDA7XG5jb25zdCBmcyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiZnNcIikpO1xuY29uc3QgcGF0aCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwicGF0aFwiKSk7XG5fYSA9IGZzLnByb21pc2VzXG4vLyBleHBvcnQgY29uc3Qge29wZW59ID0gJ2ZzJ1xuLCBleHBvcnRzLmNobW9kID0gX2EuY2htb2QsIGV4cG9ydHMuY29weUZpbGUgPSBfYS5jb3B5RmlsZSwgZXhwb3J0cy5sc3RhdCA9IF9hLmxzdGF0LCBleHBvcnRzLm1rZGlyID0gX2EubWtkaXIsIGV4cG9ydHMub3BlbiA9IF9hLm9wZW4sIGV4cG9ydHMucmVhZGRpciA9IF9hLnJlYWRkaXIsIGV4cG9ydHMucmVhZGxpbmsgPSBfYS5yZWFkbGluaywgZXhwb3J0cy5yZW5hbWUgPSBfYS5yZW5hbWUsIGV4cG9ydHMucm0gPSBfYS5ybSwgZXhwb3J0cy5ybWRpciA9IF9hLnJtZGlyLCBleHBvcnRzLnN0YXQgPSBfYS5zdGF0LCBleHBvcnRzLnN5bWxpbmsgPSBfYS5zeW1saW5rLCBleHBvcnRzLnVubGluayA9IF9hLnVubGluaztcbi8vIGV4cG9ydCBjb25zdCB7b3Blbn0gPSAnZnMnXG5leHBvcnRzLklTX1dJTkRPV1MgPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInO1xuLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL2QwMTUzYWVlMzY3NDIyZDA4NTgxMDVhYmVjMTg2ZGE0ZGZmMGEwYzUvZGVwcy91di9pbmNsdWRlL3V2L3dpbi5oI0w2OTFcbmV4cG9ydHMuVVZfRlNfT19FWExPQ0sgPSAweDEwMDAwMDAwO1xuZXhwb3J0cy5SRUFET05MWSA9IGZzLmNvbnN0YW50cy5PX1JET05MWTtcbmZ1bmN0aW9uIGV4aXN0cyhmc1BhdGgpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgeWllbGQgZXhwb3J0cy5zdGF0KGZzUGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZXhpc3RzID0gZXhpc3RzO1xuZnVuY3Rpb24gaXNEaXJlY3RvcnkoZnNQYXRoLCB1c2VTdGF0ID0gZmFsc2UpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBzdGF0cyA9IHVzZVN0YXQgPyB5aWVsZCBleHBvcnRzLnN0YXQoZnNQYXRoKSA6IHlpZWxkIGV4cG9ydHMubHN0YXQoZnNQYXRoKTtcbiAgICAgICAgcmV0dXJuIHN0YXRzLmlzRGlyZWN0b3J5KCk7XG4gICAgfSk7XG59XG5leHBvcnRzLmlzRGlyZWN0b3J5ID0gaXNEaXJlY3Rvcnk7XG4vKipcbiAqIE9uIE9TWC9MaW51eCwgdHJ1ZSBpZiBwYXRoIHN0YXJ0cyB3aXRoICcvJy4gT24gV2luZG93cywgdHJ1ZSBmb3IgcGF0aHMgbGlrZTpcbiAqIFxcLCBcXGhlbGxvLCBcXFxcaGVsbG9cXHNoYXJlLCBDOiwgYW5kIEM6XFxoZWxsbyAoYW5kIGNvcnJlc3BvbmRpbmcgYWx0ZXJuYXRlIHNlcGFyYXRvciBjYXNlcykuXG4gKi9cbmZ1bmN0aW9uIGlzUm9vdGVkKHApIHtcbiAgICBwID0gbm9ybWFsaXplU2VwYXJhdG9ycyhwKTtcbiAgICBpZiAoIXApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpc1Jvb3RlZCgpIHBhcmFtZXRlciBcInBcIiBjYW5ub3QgYmUgZW1wdHknKTtcbiAgICB9XG4gICAgaWYgKGV4cG9ydHMuSVNfV0lORE9XUykge1xuICAgICAgICByZXR1cm4gKHAuc3RhcnRzV2l0aCgnXFxcXCcpIHx8IC9eW0EtWl06L2kudGVzdChwKSAvLyBlLmcuIFxcIG9yIFxcaGVsbG8gb3IgXFxcXGhlbGxvXG4gICAgICAgICk7IC8vIGUuZy4gQzogb3IgQzpcXGhlbGxvXG4gICAgfVxuICAgIHJldHVybiBwLnN0YXJ0c1dpdGgoJy8nKTtcbn1cbmV4cG9ydHMuaXNSb290ZWQgPSBpc1Jvb3RlZDtcbi8qKlxuICogQmVzdCBlZmZvcnQgYXR0ZW1wdCB0byBkZXRlcm1pbmUgd2hldGhlciBhIGZpbGUgZXhpc3RzIGFuZCBpcyBleGVjdXRhYmxlLlxuICogQHBhcmFtIGZpbGVQYXRoICAgIGZpbGUgcGF0aCB0byBjaGVja1xuICogQHBhcmFtIGV4dGVuc2lvbnMgIGFkZGl0aW9uYWwgZmlsZSBleHRlbnNpb25zIHRvIHRyeVxuICogQHJldHVybiBpZiBmaWxlIGV4aXN0cyBhbmQgaXMgZXhlY3V0YWJsZSwgcmV0dXJucyB0aGUgZmlsZSBwYXRoLiBvdGhlcndpc2UgZW1wdHkgc3RyaW5nLlxuICovXG5mdW5jdGlvbiB0cnlHZXRFeGVjdXRhYmxlUGF0aChmaWxlUGF0aCwgZXh0ZW5zaW9ucykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGxldCBzdGF0cyA9IHVuZGVmaW5lZDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIHRlc3QgZmlsZSBleGlzdHNcbiAgICAgICAgICAgIHN0YXRzID0geWllbGQgZXhwb3J0cy5zdGF0KGZpbGVQYXRoKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyLmNvZGUgIT09ICdFTk9FTlQnKSB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgVW5leHBlY3RlZCBlcnJvciBhdHRlbXB0aW5nIHRvIGRldGVybWluZSBpZiBleGVjdXRhYmxlIGZpbGUgZXhpc3RzICcke2ZpbGVQYXRofSc6ICR7ZXJyfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0cyAmJiBzdGF0cy5pc0ZpbGUoKSkge1xuICAgICAgICAgICAgaWYgKGV4cG9ydHMuSVNfV0lORE9XUykge1xuICAgICAgICAgICAgICAgIC8vIG9uIFdpbmRvd3MsIHRlc3QgZm9yIHZhbGlkIGV4dGVuc2lvblxuICAgICAgICAgICAgICAgIGNvbnN0IHVwcGVyRXh0ID0gcGF0aC5leHRuYW1lKGZpbGVQYXRoKS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIGlmIChleHRlbnNpb25zLnNvbWUodmFsaWRFeHQgPT4gdmFsaWRFeHQudG9VcHBlckNhc2UoKSA9PT0gdXBwZXJFeHQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmaWxlUGF0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNVbml4RXhlY3V0YWJsZShzdGF0cykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpbGVQYXRoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyB0cnkgZWFjaCBleHRlbnNpb25cbiAgICAgICAgY29uc3Qgb3JpZ2luYWxGaWxlUGF0aCA9IGZpbGVQYXRoO1xuICAgICAgICBmb3IgKGNvbnN0IGV4dGVuc2lvbiBvZiBleHRlbnNpb25zKSB7XG4gICAgICAgICAgICBmaWxlUGF0aCA9IG9yaWdpbmFsRmlsZVBhdGggKyBleHRlbnNpb247XG4gICAgICAgICAgICBzdGF0cyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgc3RhdHMgPSB5aWVsZCBleHBvcnRzLnN0YXQoZmlsZVBhdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIuY29kZSAhPT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFVuZXhwZWN0ZWQgZXJyb3IgYXR0ZW1wdGluZyB0byBkZXRlcm1pbmUgaWYgZXhlY3V0YWJsZSBmaWxlIGV4aXN0cyAnJHtmaWxlUGF0aH0nOiAke2Vycn1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3RhdHMgJiYgc3RhdHMuaXNGaWxlKCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXhwb3J0cy5JU19XSU5ET1dTKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHByZXNlcnZlIHRoZSBjYXNlIG9mIHRoZSBhY3R1YWwgZmlsZSAoc2luY2UgYW4gZXh0ZW5zaW9uIHdhcyBhcHBlbmRlZClcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpcmVjdG9yeSA9IHBhdGguZGlybmFtZShmaWxlUGF0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cHBlck5hbWUgPSBwYXRoLmJhc2VuYW1lKGZpbGVQYXRoKS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBhY3R1YWxOYW1lIG9mIHlpZWxkIGV4cG9ydHMucmVhZGRpcihkaXJlY3RvcnkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVwcGVyTmFtZSA9PT0gYWN0dWFsTmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVQYXRoID0gcGF0aC5qb2luKGRpcmVjdG9yeSwgYWN0dWFsTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFVuZXhwZWN0ZWQgZXJyb3IgYXR0ZW1wdGluZyB0byBkZXRlcm1pbmUgdGhlIGFjdHVhbCBjYXNlIG9mIHRoZSBmaWxlICcke2ZpbGVQYXRofSc6ICR7ZXJyfWApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmaWxlUGF0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1VuaXhFeGVjdXRhYmxlKHN0YXRzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpbGVQYXRoO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9KTtcbn1cbmV4cG9ydHMudHJ5R2V0RXhlY3V0YWJsZVBhdGggPSB0cnlHZXRFeGVjdXRhYmxlUGF0aDtcbmZ1bmN0aW9uIG5vcm1hbGl6ZVNlcGFyYXRvcnMocCkge1xuICAgIHAgPSBwIHx8ICcnO1xuICAgIGlmIChleHBvcnRzLklTX1dJTkRPV1MpIHtcbiAgICAgICAgLy8gY29udmVydCBzbGFzaGVzIG9uIFdpbmRvd3NcbiAgICAgICAgcCA9IHAucmVwbGFjZSgvXFwvL2csICdcXFxcJyk7XG4gICAgICAgIC8vIHJlbW92ZSByZWR1bmRhbnQgc2xhc2hlc1xuICAgICAgICByZXR1cm4gcC5yZXBsYWNlKC9cXFxcXFxcXCsvZywgJ1xcXFwnKTtcbiAgICB9XG4gICAgLy8gcmVtb3ZlIHJlZHVuZGFudCBzbGFzaGVzXG4gICAgcmV0dXJuIHAucmVwbGFjZSgvXFwvXFwvKy9nLCAnLycpO1xufVxuLy8gb24gTWFjL0xpbnV4LCB0ZXN0IHRoZSBleGVjdXRlIGJpdFxuLy8gICAgIFIgICBXICBYICBSICBXIFggUiBXIFhcbi8vICAgMjU2IDEyOCA2NCAzMiAxNiA4IDQgMiAxXG5mdW5jdGlvbiBpc1VuaXhFeGVjdXRhYmxlKHN0YXRzKSB7XG4gICAgcmV0dXJuICgoc3RhdHMubW9kZSAmIDEpID4gMCB8fFxuICAgICAgICAoKHN0YXRzLm1vZGUgJiA4KSA+IDAgJiYgc3RhdHMuZ2lkID09PSBwcm9jZXNzLmdldGdpZCgpKSB8fFxuICAgICAgICAoKHN0YXRzLm1vZGUgJiA2NCkgPiAwICYmIHN0YXRzLnVpZCA9PT0gcHJvY2Vzcy5nZXR1aWQoKSkpO1xufVxuLy8gR2V0IHRoZSBwYXRoIG9mIGNtZC5leGUgaW4gd2luZG93c1xuZnVuY3Rpb24gZ2V0Q21kUGF0aCgpIHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuIChfYSA9IHByb2Nlc3MuZW52WydDT01TUEVDJ10pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGBjbWQuZXhlYDtcbn1cbmV4cG9ydHMuZ2V0Q21kUGF0aCA9IGdldENtZFBhdGg7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pby11dGlsLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfSk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmZpbmRJblBhdGggPSBleHBvcnRzLndoaWNoID0gZXhwb3J0cy5ta2RpclAgPSBleHBvcnRzLnJtUkYgPSBleHBvcnRzLm12ID0gZXhwb3J0cy5jcCA9IHZvaWQgMDtcbmNvbnN0IGFzc2VydF8xID0gcmVxdWlyZShcImFzc2VydFwiKTtcbmNvbnN0IHBhdGggPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcInBhdGhcIikpO1xuY29uc3QgaW9VdGlsID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL2lvLXV0aWxcIikpO1xuLyoqXG4gKiBDb3BpZXMgYSBmaWxlIG9yIGZvbGRlci5cbiAqIEJhc2VkIG9mZiBvZiBzaGVsbGpzIC0gaHR0cHM6Ly9naXRodWIuY29tL3NoZWxsanMvc2hlbGxqcy9ibG9iLzkyMzdmNjZjNTJlNWRhYTQwNDU4Zjk0Zjk1NjVlMThlODEzMmY1YTYvc3JjL2NwLmpzXG4gKlxuICogQHBhcmFtICAgICBzb3VyY2UgICAgc291cmNlIHBhdGhcbiAqIEBwYXJhbSAgICAgZGVzdCAgICAgIGRlc3RpbmF0aW9uIHBhdGhcbiAqIEBwYXJhbSAgICAgb3B0aW9ucyAgIG9wdGlvbmFsLiBTZWUgQ29weU9wdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIGNwKHNvdXJjZSwgZGVzdCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgeyBmb3JjZSwgcmVjdXJzaXZlLCBjb3B5U291cmNlRGlyZWN0b3J5IH0gPSByZWFkQ29weU9wdGlvbnMob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGRlc3RTdGF0ID0gKHlpZWxkIGlvVXRpbC5leGlzdHMoZGVzdCkpID8geWllbGQgaW9VdGlsLnN0YXQoZGVzdCkgOiBudWxsO1xuICAgICAgICAvLyBEZXN0IGlzIGFuIGV4aXN0aW5nIGZpbGUsIGJ1dCBub3QgZm9yY2luZ1xuICAgICAgICBpZiAoZGVzdFN0YXQgJiYgZGVzdFN0YXQuaXNGaWxlKCkgJiYgIWZvcmNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgZGVzdCBpcyBhbiBleGlzdGluZyBkaXJlY3RvcnksIHNob3VsZCBjb3B5IGluc2lkZS5cbiAgICAgICAgY29uc3QgbmV3RGVzdCA9IGRlc3RTdGF0ICYmIGRlc3RTdGF0LmlzRGlyZWN0b3J5KCkgJiYgY29weVNvdXJjZURpcmVjdG9yeVxuICAgICAgICAgICAgPyBwYXRoLmpvaW4oZGVzdCwgcGF0aC5iYXNlbmFtZShzb3VyY2UpKVxuICAgICAgICAgICAgOiBkZXN0O1xuICAgICAgICBpZiAoISh5aWVsZCBpb1V0aWwuZXhpc3RzKHNvdXJjZSkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYG5vIHN1Y2ggZmlsZSBvciBkaXJlY3Rvcnk6ICR7c291cmNlfWApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNvdXJjZVN0YXQgPSB5aWVsZCBpb1V0aWwuc3RhdChzb3VyY2UpO1xuICAgICAgICBpZiAoc291cmNlU3RhdC5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgICAgICBpZiAoIXJlY3Vyc2l2ZSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGNvcHkuICR7c291cmNlfSBpcyBhIGRpcmVjdG9yeSwgYnV0IHRyaWVkIHRvIGNvcHkgd2l0aG91dCByZWN1cnNpdmUgZmxhZy5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHlpZWxkIGNwRGlyUmVjdXJzaXZlKHNvdXJjZSwgbmV3RGVzdCwgMCwgZm9yY2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHBhdGgucmVsYXRpdmUoc291cmNlLCBuZXdEZXN0KSA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICAvLyBhIGZpbGUgY2Fubm90IGJlIGNvcGllZCB0byBpdHNlbGZcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCcke25ld0Rlc3R9JyBhbmQgJyR7c291cmNlfScgYXJlIHRoZSBzYW1lIGZpbGVgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHlpZWxkIGNvcHlGaWxlKHNvdXJjZSwgbmV3RGVzdCwgZm9yY2UpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5leHBvcnRzLmNwID0gY3A7XG4vKipcbiAqIE1vdmVzIGEgcGF0aC5cbiAqXG4gKiBAcGFyYW0gICAgIHNvdXJjZSAgICBzb3VyY2UgcGF0aFxuICogQHBhcmFtICAgICBkZXN0ICAgICAgZGVzdGluYXRpb24gcGF0aFxuICogQHBhcmFtICAgICBvcHRpb25zICAgb3B0aW9uYWwuIFNlZSBNb3ZlT3B0aW9ucy5cbiAqL1xuZnVuY3Rpb24gbXYoc291cmNlLCBkZXN0LCBvcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBpZiAoeWllbGQgaW9VdGlsLmV4aXN0cyhkZXN0KSkge1xuICAgICAgICAgICAgbGV0IGRlc3RFeGlzdHMgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKHlpZWxkIGlvVXRpbC5pc0RpcmVjdG9yeShkZXN0KSkge1xuICAgICAgICAgICAgICAgIC8vIElmIGRlc3QgaXMgZGlyZWN0b3J5IGNvcHkgc3JjIGludG8gZGVzdFxuICAgICAgICAgICAgICAgIGRlc3QgPSBwYXRoLmpvaW4oZGVzdCwgcGF0aC5iYXNlbmFtZShzb3VyY2UpKTtcbiAgICAgICAgICAgICAgICBkZXN0RXhpc3RzID0geWllbGQgaW9VdGlsLmV4aXN0cyhkZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkZXN0RXhpc3RzKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZm9yY2UgPT0gbnVsbCB8fCBvcHRpb25zLmZvcmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIHJtUkYoZGVzdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rlc3RpbmF0aW9uIGFscmVhZHkgZXhpc3RzJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHlpZWxkIG1rZGlyUChwYXRoLmRpcm5hbWUoZGVzdCkpO1xuICAgICAgICB5aWVsZCBpb1V0aWwucmVuYW1lKHNvdXJjZSwgZGVzdCk7XG4gICAgfSk7XG59XG5leHBvcnRzLm12ID0gbXY7XG4vKipcbiAqIFJlbW92ZSBhIHBhdGggcmVjdXJzaXZlbHkgd2l0aCBmb3JjZVxuICpcbiAqIEBwYXJhbSBpbnB1dFBhdGggcGF0aCB0byByZW1vdmVcbiAqL1xuZnVuY3Rpb24gcm1SRihpbnB1dFBhdGgpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBpZiAoaW9VdGlsLklTX1dJTkRPV1MpIHtcbiAgICAgICAgICAgIC8vIENoZWNrIGZvciBpbnZhbGlkIGNoYXJhY3RlcnNcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3dpbmRvd3Mvd2luMzIvZmlsZWlvL25hbWluZy1hLWZpbGVcbiAgICAgICAgICAgIGlmICgvWypcIjw+fF0vLnRlc3QoaW5wdXRQYXRoKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRmlsZSBwYXRoIG11c3Qgbm90IGNvbnRhaW4gYCpgLCBgXCJgLCBgPGAsIGA+YCBvciBgfGAgb24gV2luZG93cycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBub3RlIGlmIHBhdGggZG9lcyBub3QgZXhpc3QsIGVycm9yIGlzIHNpbGVudFxuICAgICAgICAgICAgeWllbGQgaW9VdGlsLnJtKGlucHV0UGF0aCwge1xuICAgICAgICAgICAgICAgIGZvcmNlOiB0cnVlLFxuICAgICAgICAgICAgICAgIG1heFJldHJpZXM6IDMsXG4gICAgICAgICAgICAgICAgcmVjdXJzaXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHJldHJ5RGVsYXk6IDMwMFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGaWxlIHdhcyB1bmFibGUgdG8gYmUgcmVtb3ZlZCAke2Vycn1gKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuZXhwb3J0cy5ybVJGID0gcm1SRjtcbi8qKlxuICogTWFrZSBhIGRpcmVjdG9yeS4gIENyZWF0ZXMgdGhlIGZ1bGwgcGF0aCB3aXRoIGZvbGRlcnMgaW4gYmV0d2VlblxuICogV2lsbCB0aHJvdyBpZiBpdCBmYWlsc1xuICpcbiAqIEBwYXJhbSAgIGZzUGF0aCAgICAgICAgcGF0aCB0byBjcmVhdGVcbiAqIEByZXR1cm5zIFByb21pc2U8dm9pZD5cbiAqL1xuZnVuY3Rpb24gbWtkaXJQKGZzUGF0aCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGFzc2VydF8xLm9rKGZzUGF0aCwgJ2EgcGF0aCBhcmd1bWVudCBtdXN0IGJlIHByb3ZpZGVkJyk7XG4gICAgICAgIHlpZWxkIGlvVXRpbC5ta2Rpcihmc1BhdGgsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIH0pO1xufVxuZXhwb3J0cy5ta2RpclAgPSBta2RpclA7XG4vKipcbiAqIFJldHVybnMgcGF0aCBvZiBhIHRvb2wgaGFkIHRoZSB0b29sIGFjdHVhbGx5IGJlZW4gaW52b2tlZC4gIFJlc29sdmVzIHZpYSBwYXRocy5cbiAqIElmIHlvdSBjaGVjayBhbmQgdGhlIHRvb2wgZG9lcyBub3QgZXhpc3QsIGl0IHdpbGwgdGhyb3cuXG4gKlxuICogQHBhcmFtICAgICB0b29sICAgICAgICAgICAgICBuYW1lIG9mIHRoZSB0b29sXG4gKiBAcGFyYW0gICAgIGNoZWNrICAgICAgICAgICAgIHdoZXRoZXIgdG8gY2hlY2sgaWYgdG9vbCBleGlzdHNcbiAqIEByZXR1cm5zICAgUHJvbWlzZTxzdHJpbmc+ICAgcGF0aCB0byB0b29sXG4gKi9cbmZ1bmN0aW9uIHdoaWNoKHRvb2wsIGNoZWNrKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgaWYgKCF0b29sKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJwYXJhbWV0ZXIgJ3Rvb2wnIGlzIHJlcXVpcmVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHJlY3Vyc2l2ZSB3aGVuIGNoZWNrPXRydWVcbiAgICAgICAgaWYgKGNoZWNrKSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB5aWVsZCB3aGljaCh0b29sLCBmYWxzZSk7XG4gICAgICAgICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICAgICAgICAgIGlmIChpb1V0aWwuSVNfV0lORE9XUykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBsb2NhdGUgZXhlY3V0YWJsZSBmaWxlOiAke3Rvb2x9LiBQbGVhc2UgdmVyaWZ5IGVpdGhlciB0aGUgZmlsZSBwYXRoIGV4aXN0cyBvciB0aGUgZmlsZSBjYW4gYmUgZm91bmQgd2l0aGluIGEgZGlyZWN0b3J5IHNwZWNpZmllZCBieSB0aGUgUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZS4gQWxzbyB2ZXJpZnkgdGhlIGZpbGUgaGFzIGEgdmFsaWQgZXh0ZW5zaW9uIGZvciBhbiBleGVjdXRhYmxlIGZpbGUuYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBsb2NhdGUgZXhlY3V0YWJsZSBmaWxlOiAke3Rvb2x9LiBQbGVhc2UgdmVyaWZ5IGVpdGhlciB0aGUgZmlsZSBwYXRoIGV4aXN0cyBvciB0aGUgZmlsZSBjYW4gYmUgZm91bmQgd2l0aGluIGEgZGlyZWN0b3J5IHNwZWNpZmllZCBieSB0aGUgUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZS4gQWxzbyBjaGVjayB0aGUgZmlsZSBtb2RlIHRvIHZlcmlmeSB0aGUgZmlsZSBpcyBleGVjdXRhYmxlLmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWF0Y2hlcyA9IHlpZWxkIGZpbmRJblBhdGgodG9vbCk7XG4gICAgICAgIGlmIChtYXRjaGVzICYmIG1hdGNoZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXNbMF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH0pO1xufVxuZXhwb3J0cy53aGljaCA9IHdoaWNoO1xuLyoqXG4gKiBSZXR1cm5zIGEgbGlzdCBvZiBhbGwgb2NjdXJyZW5jZXMgb2YgdGhlIGdpdmVuIHRvb2wgb24gdGhlIHN5c3RlbSBwYXRoLlxuICpcbiAqIEByZXR1cm5zICAgUHJvbWlzZTxzdHJpbmdbXT4gIHRoZSBwYXRocyBvZiB0aGUgdG9vbFxuICovXG5mdW5jdGlvbiBmaW5kSW5QYXRoKHRvb2wpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBpZiAoIXRvb2wpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInBhcmFtZXRlciAndG9vbCcgaXMgcmVxdWlyZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gYnVpbGQgdGhlIGxpc3Qgb2YgZXh0ZW5zaW9ucyB0byB0cnlcbiAgICAgICAgY29uc3QgZXh0ZW5zaW9ucyA9IFtdO1xuICAgICAgICBpZiAoaW9VdGlsLklTX1dJTkRPV1MgJiYgcHJvY2Vzcy5lbnZbJ1BBVEhFWFQnXSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBleHRlbnNpb24gb2YgcHJvY2Vzcy5lbnZbJ1BBVEhFWFQnXS5zcGxpdChwYXRoLmRlbGltaXRlcikpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXh0ZW5zaW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbnMucHVzaChleHRlbnNpb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBpZiBpdCdzIHJvb3RlZCwgcmV0dXJuIGl0IGlmIGV4aXN0cy4gb3RoZXJ3aXNlIHJldHVybiBlbXB0eS5cbiAgICAgICAgaWYgKGlvVXRpbC5pc1Jvb3RlZCh0b29sKSkge1xuICAgICAgICAgICAgY29uc3QgZmlsZVBhdGggPSB5aWVsZCBpb1V0aWwudHJ5R2V0RXhlY3V0YWJsZVBhdGgodG9vbCwgZXh0ZW5zaW9ucyk7XG4gICAgICAgICAgICBpZiAoZmlsZVBhdGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW2ZpbGVQYXRoXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiBhbnkgcGF0aCBzZXBhcmF0b3JzLCByZXR1cm4gZW1wdHlcbiAgICAgICAgaWYgKHRvb2wuaW5jbHVkZXMocGF0aC5zZXApKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgLy8gYnVpbGQgdGhlIGxpc3Qgb2YgZGlyZWN0b3JpZXNcbiAgICAgICAgLy9cbiAgICAgICAgLy8gTm90ZSwgdGVjaG5pY2FsbHkgXCJ3aGVyZVwiIGNoZWNrcyB0aGUgY3VycmVudCBkaXJlY3Rvcnkgb24gV2luZG93cy4gRnJvbSBhIHRvb2xraXQgcGVyc3BlY3RpdmUsXG4gICAgICAgIC8vIGl0IGZlZWxzIGxpa2Ugd2Ugc2hvdWxkIG5vdCBkbyB0aGlzLiBDaGVja2luZyB0aGUgY3VycmVudCBkaXJlY3Rvcnkgc2VlbXMgbGlrZSBtb3JlIG9mIGEgdXNlXG4gICAgICAgIC8vIGNhc2Ugb2YgYSBzaGVsbCwgYW5kIHRoZSB3aGljaCgpIGZ1bmN0aW9uIGV4cG9zZWQgYnkgdGhlIHRvb2xraXQgc2hvdWxkIHN0cml2ZSBmb3IgY29uc2lzdGVuY3lcbiAgICAgICAgLy8gYWNyb3NzIHBsYXRmb3Jtcy5cbiAgICAgICAgY29uc3QgZGlyZWN0b3JpZXMgPSBbXTtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52LlBBVEgpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcCBvZiBwcm9jZXNzLmVudi5QQVRILnNwbGl0KHBhdGguZGVsaW1pdGVyKSkge1xuICAgICAgICAgICAgICAgIGlmIChwKSB7XG4gICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yaWVzLnB1c2gocCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGZpbmQgYWxsIG1hdGNoZXNcbiAgICAgICAgY29uc3QgbWF0Y2hlcyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGRpcmVjdG9yeSBvZiBkaXJlY3Rvcmllcykge1xuICAgICAgICAgICAgY29uc3QgZmlsZVBhdGggPSB5aWVsZCBpb1V0aWwudHJ5R2V0RXhlY3V0YWJsZVBhdGgocGF0aC5qb2luKGRpcmVjdG9yeSwgdG9vbCksIGV4dGVuc2lvbnMpO1xuICAgICAgICAgICAgaWYgKGZpbGVQYXRoKSB7XG4gICAgICAgICAgICAgICAgbWF0Y2hlcy5wdXNoKGZpbGVQYXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWF0Y2hlcztcbiAgICB9KTtcbn1cbmV4cG9ydHMuZmluZEluUGF0aCA9IGZpbmRJblBhdGg7XG5mdW5jdGlvbiByZWFkQ29weU9wdGlvbnMob3B0aW9ucykge1xuICAgIGNvbnN0IGZvcmNlID0gb3B0aW9ucy5mb3JjZSA9PSBudWxsID8gdHJ1ZSA6IG9wdGlvbnMuZm9yY2U7XG4gICAgY29uc3QgcmVjdXJzaXZlID0gQm9vbGVhbihvcHRpb25zLnJlY3Vyc2l2ZSk7XG4gICAgY29uc3QgY29weVNvdXJjZURpcmVjdG9yeSA9IG9wdGlvbnMuY29weVNvdXJjZURpcmVjdG9yeSA9PSBudWxsXG4gICAgICAgID8gdHJ1ZVxuICAgICAgICA6IEJvb2xlYW4ob3B0aW9ucy5jb3B5U291cmNlRGlyZWN0b3J5KTtcbiAgICByZXR1cm4geyBmb3JjZSwgcmVjdXJzaXZlLCBjb3B5U291cmNlRGlyZWN0b3J5IH07XG59XG5mdW5jdGlvbiBjcERpclJlY3Vyc2l2ZShzb3VyY2VEaXIsIGRlc3REaXIsIGN1cnJlbnREZXB0aCwgZm9yY2UpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAvLyBFbnN1cmUgdGhlcmUgaXMgbm90IGEgcnVuIGF3YXkgcmVjdXJzaXZlIGNvcHlcbiAgICAgICAgaWYgKGN1cnJlbnREZXB0aCA+PSAyNTUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGN1cnJlbnREZXB0aCsrO1xuICAgICAgICB5aWVsZCBta2RpclAoZGVzdERpcik7XG4gICAgICAgIGNvbnN0IGZpbGVzID0geWllbGQgaW9VdGlsLnJlYWRkaXIoc291cmNlRGlyKTtcbiAgICAgICAgZm9yIChjb25zdCBmaWxlTmFtZSBvZiBmaWxlcykge1xuICAgICAgICAgICAgY29uc3Qgc3JjRmlsZSA9IGAke3NvdXJjZURpcn0vJHtmaWxlTmFtZX1gO1xuICAgICAgICAgICAgY29uc3QgZGVzdEZpbGUgPSBgJHtkZXN0RGlyfS8ke2ZpbGVOYW1lfWA7XG4gICAgICAgICAgICBjb25zdCBzcmNGaWxlU3RhdCA9IHlpZWxkIGlvVXRpbC5sc3RhdChzcmNGaWxlKTtcbiAgICAgICAgICAgIGlmIChzcmNGaWxlU3RhdC5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgICAgICAgICAgLy8gUmVjdXJzZVxuICAgICAgICAgICAgICAgIHlpZWxkIGNwRGlyUmVjdXJzaXZlKHNyY0ZpbGUsIGRlc3RGaWxlLCBjdXJyZW50RGVwdGgsIGZvcmNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHlpZWxkIGNvcHlGaWxlKHNyY0ZpbGUsIGRlc3RGaWxlLCBmb3JjZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2hhbmdlIHRoZSBtb2RlIGZvciB0aGUgbmV3bHkgY3JlYXRlZCBkaXJlY3RvcnlcbiAgICAgICAgeWllbGQgaW9VdGlsLmNobW9kKGRlc3REaXIsICh5aWVsZCBpb1V0aWwuc3RhdChzb3VyY2VEaXIpKS5tb2RlKTtcbiAgICB9KTtcbn1cbi8vIEJ1ZmZlcmVkIGZpbGUgY29weVxuZnVuY3Rpb24gY29weUZpbGUoc3JjRmlsZSwgZGVzdEZpbGUsIGZvcmNlKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgaWYgKCh5aWVsZCBpb1V0aWwubHN0YXQoc3JjRmlsZSkpLmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICAgICAgICAgIC8vIHVubGluay9yZS1saW5rIGl0XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHlpZWxkIGlvVXRpbC5sc3RhdChkZXN0RmlsZSk7XG4gICAgICAgICAgICAgICAgeWllbGQgaW9VdGlsLnVubGluayhkZXN0RmlsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIC8vIFRyeSB0byBvdmVycmlkZSBmaWxlIHBlcm1pc3Npb25cbiAgICAgICAgICAgICAgICBpZiAoZS5jb2RlID09PSAnRVBFUk0nKSB7XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIGlvVXRpbC5jaG1vZChkZXN0RmlsZSwgJzA2NjYnKTtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgaW9VdGlsLnVubGluayhkZXN0RmlsZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIG90aGVyIGVycm9ycyA9IGl0IGRvZXNuJ3QgZXhpc3QsIG5vIHdvcmsgdG8gZG9cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIENvcHkgb3ZlciBzeW1saW5rXG4gICAgICAgICAgICBjb25zdCBzeW1saW5rRnVsbCA9IHlpZWxkIGlvVXRpbC5yZWFkbGluayhzcmNGaWxlKTtcbiAgICAgICAgICAgIHlpZWxkIGlvVXRpbC5zeW1saW5rKHN5bWxpbmtGdWxsLCBkZXN0RmlsZSwgaW9VdGlsLklTX1dJTkRPV1MgPyAnanVuY3Rpb24nIDogbnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoISh5aWVsZCBpb1V0aWwuZXhpc3RzKGRlc3RGaWxlKSkgfHwgZm9yY2UpIHtcbiAgICAgICAgICAgIHlpZWxkIGlvVXRpbC5jb3B5RmlsZShzcmNGaWxlLCBkZXN0RmlsZSk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlvLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfSk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmFyZ1N0cmluZ1RvQXJyYXkgPSBleHBvcnRzLlRvb2xSdW5uZXIgPSB2b2lkIDA7XG5jb25zdCBvcyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwib3NcIikpO1xuY29uc3QgZXZlbnRzID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJldmVudHNcIikpO1xuY29uc3QgY2hpbGQgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcImNoaWxkX3Byb2Nlc3NcIikpO1xuY29uc3QgcGF0aCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwicGF0aFwiKSk7XG5jb25zdCBpbyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiQGFjdGlvbnMvaW9cIikpO1xuY29uc3QgaW9VdGlsID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJAYWN0aW9ucy9pby9saWIvaW8tdXRpbFwiKSk7XG5jb25zdCB0aW1lcnNfMSA9IHJlcXVpcmUoXCJ0aW1lcnNcIik7XG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvdW5ib3VuZC1tZXRob2QgKi9cbmNvbnN0IElTX1dJTkRPV1MgPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInO1xuLypcbiAqIENsYXNzIGZvciBydW5uaW5nIGNvbW1hbmQgbGluZSB0b29scy4gSGFuZGxlcyBxdW90aW5nIGFuZCBhcmcgcGFyc2luZyBpbiBhIHBsYXRmb3JtIGFnbm9zdGljIHdheS5cbiAqL1xuY2xhc3MgVG9vbFJ1bm5lciBleHRlbmRzIGV2ZW50cy5FdmVudEVtaXR0ZXIge1xuICAgIGNvbnN0cnVjdG9yKHRvb2xQYXRoLCBhcmdzLCBvcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIGlmICghdG9vbFBhdGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhcmFtZXRlciAndG9vbFBhdGgnIGNhbm5vdCBiZSBudWxsIG9yIGVtcHR5LlwiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRvb2xQYXRoID0gdG9vbFBhdGg7XG4gICAgICAgIHRoaXMuYXJncyA9IGFyZ3MgfHwgW107XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgfVxuICAgIF9kZWJ1ZyhtZXNzYWdlKSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMubGlzdGVuZXJzICYmIHRoaXMub3B0aW9ucy5saXN0ZW5lcnMuZGVidWcpIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5saXN0ZW5lcnMuZGVidWcobWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX2dldENvbW1hbmRTdHJpbmcob3B0aW9ucywgbm9QcmVmaXgpIHtcbiAgICAgICAgY29uc3QgdG9vbFBhdGggPSB0aGlzLl9nZXRTcGF3bkZpbGVOYW1lKCk7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSB0aGlzLl9nZXRTcGF3bkFyZ3Mob3B0aW9ucyk7XG4gICAgICAgIGxldCBjbWQgPSBub1ByZWZpeCA/ICcnIDogJ1tjb21tYW5kXSc7IC8vIG9taXQgcHJlZml4IHdoZW4gcGlwZWQgdG8gYSBzZWNvbmQgdG9vbFxuICAgICAgICBpZiAoSVNfV0lORE9XUykge1xuICAgICAgICAgICAgLy8gV2luZG93cyArIGNtZCBmaWxlXG4gICAgICAgICAgICBpZiAodGhpcy5faXNDbWRGaWxlKCkpIHtcbiAgICAgICAgICAgICAgICBjbWQgKz0gdG9vbFBhdGg7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBhIG9mIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgY21kICs9IGAgJHthfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gV2luZG93cyArIHZlcmJhdGltXG4gICAgICAgICAgICBlbHNlIGlmIChvcHRpb25zLndpbmRvd3NWZXJiYXRpbUFyZ3VtZW50cykge1xuICAgICAgICAgICAgICAgIGNtZCArPSBgXCIke3Rvb2xQYXRofVwiYDtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGEgb2YgYXJncykge1xuICAgICAgICAgICAgICAgICAgICBjbWQgKz0gYCAke2F9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBXaW5kb3dzIChyZWd1bGFyKVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY21kICs9IHRoaXMuX3dpbmRvd3NRdW90ZUNtZEFyZyh0b29sUGF0aCk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBhIG9mIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgY21kICs9IGAgJHt0aGlzLl93aW5kb3dzUXVvdGVDbWRBcmcoYSl9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBPU1gvTGludXggLSB0aGlzIGNhbiBsaWtlbHkgYmUgaW1wcm92ZWQgd2l0aCBzb21lIGZvcm0gb2YgcXVvdGluZy5cbiAgICAgICAgICAgIC8vIGNyZWF0aW5nIHByb2Nlc3NlcyBvbiBVbml4IGlzIGZ1bmRhbWVudGFsbHkgZGlmZmVyZW50IHRoYW4gV2luZG93cy5cbiAgICAgICAgICAgIC8vIG9uIFVuaXgsIGV4ZWN2cCgpIHRha2VzIGFuIGFyZyBhcnJheS5cbiAgICAgICAgICAgIGNtZCArPSB0b29sUGF0aDtcbiAgICAgICAgICAgIGZvciAoY29uc3QgYSBvZiBhcmdzKSB7XG4gICAgICAgICAgICAgICAgY21kICs9IGAgJHthfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNtZDtcbiAgICB9XG4gICAgX3Byb2Nlc3NMaW5lQnVmZmVyKGRhdGEsIHN0ckJ1ZmZlciwgb25MaW5lKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsZXQgcyA9IHN0ckJ1ZmZlciArIGRhdGEudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIGxldCBuID0gcy5pbmRleE9mKG9zLkVPTCk7XG4gICAgICAgICAgICB3aGlsZSAobiA+IC0xKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGluZSA9IHMuc3Vic3RyaW5nKDAsIG4pO1xuICAgICAgICAgICAgICAgIG9uTGluZShsaW5lKTtcbiAgICAgICAgICAgICAgICAvLyB0aGUgcmVzdCBvZiB0aGUgc3RyaW5nIC4uLlxuICAgICAgICAgICAgICAgIHMgPSBzLnN1YnN0cmluZyhuICsgb3MuRU9MLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgbiA9IHMuaW5kZXhPZihvcy5FT0wpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHM7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgLy8gc3RyZWFtaW5nIGxpbmVzIHRvIGNvbnNvbGUgaXMgYmVzdCBlZmZvcnQuICBEb24ndCBmYWlsIGEgYnVpbGQuXG4gICAgICAgICAgICB0aGlzLl9kZWJ1ZyhgZXJyb3IgcHJvY2Vzc2luZyBsaW5lLiBGYWlsZWQgd2l0aCBlcnJvciAke2Vycn1gKTtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgICBfZ2V0U3Bhd25GaWxlTmFtZSgpIHtcbiAgICAgICAgaWYgKElTX1dJTkRPV1MpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9pc0NtZEZpbGUoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcm9jZXNzLmVudlsnQ09NU1BFQyddIHx8ICdjbWQuZXhlJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy50b29sUGF0aDtcbiAgICB9XG4gICAgX2dldFNwYXduQXJncyhvcHRpb25zKSB7XG4gICAgICAgIGlmIChJU19XSU5ET1dTKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5faXNDbWRGaWxlKCkpIHtcbiAgICAgICAgICAgICAgICBsZXQgYXJnbGluZSA9IGAvRCAvUyAvQyBcIiR7dGhpcy5fd2luZG93c1F1b3RlQ21kQXJnKHRoaXMudG9vbFBhdGgpfWA7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBhIG9mIHRoaXMuYXJncykge1xuICAgICAgICAgICAgICAgICAgICBhcmdsaW5lICs9ICcgJztcbiAgICAgICAgICAgICAgICAgICAgYXJnbGluZSArPSBvcHRpb25zLndpbmRvd3NWZXJiYXRpbUFyZ3VtZW50c1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBhXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuX3dpbmRvd3NRdW90ZUNtZEFyZyhhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXJnbGluZSArPSAnXCInO1xuICAgICAgICAgICAgICAgIHJldHVybiBbYXJnbGluZV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuYXJncztcbiAgICB9XG4gICAgX2VuZHNXaXRoKHN0ciwgZW5kKSB7XG4gICAgICAgIHJldHVybiBzdHIuZW5kc1dpdGgoZW5kKTtcbiAgICB9XG4gICAgX2lzQ21kRmlsZSgpIHtcbiAgICAgICAgY29uc3QgdXBwZXJUb29sUGF0aCA9IHRoaXMudG9vbFBhdGgudG9VcHBlckNhc2UoKTtcbiAgICAgICAgcmV0dXJuICh0aGlzLl9lbmRzV2l0aCh1cHBlclRvb2xQYXRoLCAnLkNNRCcpIHx8XG4gICAgICAgICAgICB0aGlzLl9lbmRzV2l0aCh1cHBlclRvb2xQYXRoLCAnLkJBVCcpKTtcbiAgICB9XG4gICAgX3dpbmRvd3NRdW90ZUNtZEFyZyhhcmcpIHtcbiAgICAgICAgLy8gZm9yIC5leGUsIGFwcGx5IHRoZSBub3JtYWwgcXVvdGluZyBydWxlcyB0aGF0IGxpYnV2IGFwcGxpZXNcbiAgICAgICAgaWYgKCF0aGlzLl9pc0NtZEZpbGUoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3V2UXVvdGVDbWRBcmcoYXJnKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBvdGhlcndpc2UgYXBwbHkgcXVvdGluZyBydWxlcyBzcGVjaWZpYyB0byB0aGUgY21kLmV4ZSBjb21tYW5kIGxpbmUgcGFyc2VyLlxuICAgICAgICAvLyB0aGUgbGlidXYgcnVsZXMgYXJlIGdlbmVyaWMgYW5kIGFyZSBub3QgZGVzaWduZWQgc3BlY2lmaWNhbGx5IGZvciBjbWQuZXhlXG4gICAgICAgIC8vIGNvbW1hbmQgbGluZSBwYXJzZXIuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIGZvciBhIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHRoZSBjbWQuZXhlIGNvbW1hbmQgbGluZSBwYXJzZXIsIHJlZmVyIHRvXG4gICAgICAgIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNDA5NDY5OS9ob3ctZG9lcy10aGUtd2luZG93cy1jb21tYW5kLWludGVycHJldGVyLWNtZC1leGUtcGFyc2Utc2NyaXB0cy83OTcwOTEyIzc5NzA5MTJcbiAgICAgICAgLy8gbmVlZCBxdW90ZXMgZm9yIGVtcHR5IGFyZ1xuICAgICAgICBpZiAoIWFyZykge1xuICAgICAgICAgICAgcmV0dXJuICdcIlwiJztcbiAgICAgICAgfVxuICAgICAgICAvLyBkZXRlcm1pbmUgd2hldGhlciB0aGUgYXJnIG5lZWRzIHRvIGJlIHF1b3RlZFxuICAgICAgICBjb25zdCBjbWRTcGVjaWFsQ2hhcnMgPSBbXG4gICAgICAgICAgICAnICcsXG4gICAgICAgICAgICAnXFx0JyxcbiAgICAgICAgICAgICcmJyxcbiAgICAgICAgICAgICcoJyxcbiAgICAgICAgICAgICcpJyxcbiAgICAgICAgICAgICdbJyxcbiAgICAgICAgICAgICddJyxcbiAgICAgICAgICAgICd7JyxcbiAgICAgICAgICAgICd9JyxcbiAgICAgICAgICAgICdeJyxcbiAgICAgICAgICAgICc9JyxcbiAgICAgICAgICAgICc7JyxcbiAgICAgICAgICAgICchJyxcbiAgICAgICAgICAgIFwiJ1wiLFxuICAgICAgICAgICAgJysnLFxuICAgICAgICAgICAgJywnLFxuICAgICAgICAgICAgJ2AnLFxuICAgICAgICAgICAgJ34nLFxuICAgICAgICAgICAgJ3wnLFxuICAgICAgICAgICAgJzwnLFxuICAgICAgICAgICAgJz4nLFxuICAgICAgICAgICAgJ1wiJ1xuICAgICAgICBdO1xuICAgICAgICBsZXQgbmVlZHNRdW90ZXMgPSBmYWxzZTtcbiAgICAgICAgZm9yIChjb25zdCBjaGFyIG9mIGFyZykge1xuICAgICAgICAgICAgaWYgKGNtZFNwZWNpYWxDaGFycy5zb21lKHggPT4geCA9PT0gY2hhcikpIHtcbiAgICAgICAgICAgICAgICBuZWVkc1F1b3RlcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gc2hvcnQtY2lyY3VpdCBpZiBxdW90ZXMgbm90IG5lZWRlZFxuICAgICAgICBpZiAoIW5lZWRzUXVvdGVzKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJnO1xuICAgICAgICB9XG4gICAgICAgIC8vIHRoZSBmb2xsb3dpbmcgcXVvdGluZyBydWxlcyBhcmUgdmVyeSBzaW1pbGFyIHRvIHRoZSBydWxlcyB0aGF0IGJ5IGxpYnV2IGFwcGxpZXMuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIDEpIHdyYXAgdGhlIHN0cmluZyBpbiBxdW90ZXNcbiAgICAgICAgLy9cbiAgICAgICAgLy8gMikgZG91YmxlLXVwIHF1b3RlcyAtIGkuZS4gXCIgPT4gXCJcIlxuICAgICAgICAvL1xuICAgICAgICAvLyAgICB0aGlzIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBsaWJ1diBxdW90aW5nIHJ1bGVzLiBsaWJ1diByZXBsYWNlcyBcIiB3aXRoIFxcXCIsIHdoaWNoIHVuZm9ydHVuYXRlbHlcbiAgICAgICAgLy8gICAgZG9lc24ndCB3b3JrIHdlbGwgd2l0aCBhIGNtZC5leGUgY29tbWFuZCBsaW5lLlxuICAgICAgICAvL1xuICAgICAgICAvLyAgICBub3RlLCByZXBsYWNpbmcgXCIgd2l0aCBcIlwiIGFsc28gd29ya3Mgd2VsbCBpZiB0aGUgYXJnIGlzIHBhc3NlZCB0byBhIGRvd25zdHJlYW0gLk5FVCBjb25zb2xlIGFwcC5cbiAgICAgICAgLy8gICAgZm9yIGV4YW1wbGUsIHRoZSBjb21tYW5kIGxpbmU6XG4gICAgICAgIC8vICAgICAgICAgIGZvby5leGUgXCJteWFyZzpcIlwibXkgdmFsXCJcIlwiXG4gICAgICAgIC8vICAgIGlzIHBhcnNlZCBieSBhIC5ORVQgY29uc29sZSBhcHAgaW50byBhbiBhcmcgYXJyYXk6XG4gICAgICAgIC8vICAgICAgICAgIFsgXCJteWFyZzpcXFwibXkgdmFsXFxcIlwiIF1cbiAgICAgICAgLy8gICAgd2hpY2ggaXMgdGhlIHNhbWUgZW5kIHJlc3VsdCB3aGVuIGFwcGx5aW5nIGxpYnV2IHF1b3RpbmcgcnVsZXMuIGFsdGhvdWdoIHRoZSBhY3R1YWxcbiAgICAgICAgLy8gICAgY29tbWFuZCBsaW5lIGZyb20gbGlidXYgcXVvdGluZyBydWxlcyB3b3VsZCBsb29rIGxpa2U6XG4gICAgICAgIC8vICAgICAgICAgIGZvby5leGUgXCJteWFyZzpcXFwibXkgdmFsXFxcIlwiXG4gICAgICAgIC8vXG4gICAgICAgIC8vIDMpIGRvdWJsZS11cCBzbGFzaGVzIHRoYXQgcHJlY2VkZSBhIHF1b3RlLFxuICAgICAgICAvLyAgICBlLmcuICBoZWxsbyBcXHdvcmxkICAgID0+IFwiaGVsbG8gXFx3b3JsZFwiXG4gICAgICAgIC8vICAgICAgICAgIGhlbGxvXFxcIndvcmxkICAgID0+IFwiaGVsbG9cXFxcXCJcIndvcmxkXCJcbiAgICAgICAgLy8gICAgICAgICAgaGVsbG9cXFxcXCJ3b3JsZCAgID0+IFwiaGVsbG9cXFxcXFxcXFwiXCJ3b3JsZFwiXG4gICAgICAgIC8vICAgICAgICAgIGhlbGxvIHdvcmxkXFwgICAgPT4gXCJoZWxsbyB3b3JsZFxcXFxcIlxuICAgICAgICAvL1xuICAgICAgICAvLyAgICB0ZWNobmljYWxseSB0aGlzIGlzIG5vdCByZXF1aXJlZCBmb3IgYSBjbWQuZXhlIGNvbW1hbmQgbGluZSwgb3IgdGhlIGJhdGNoIGFyZ3VtZW50IHBhcnNlci5cbiAgICAgICAgLy8gICAgdGhlIHJlYXNvbnMgZm9yIGluY2x1ZGluZyB0aGlzIGFzIGEgLmNtZCBxdW90aW5nIHJ1bGUgYXJlOlxuICAgICAgICAvL1xuICAgICAgICAvLyAgICBhKSB0aGlzIGlzIG9wdGltaXplZCBmb3IgdGhlIHNjZW5hcmlvIHdoZXJlIHRoZSBhcmd1bWVudCBpcyBwYXNzZWQgZnJvbSB0aGUgLmNtZCBmaWxlIHRvIGFuXG4gICAgICAgIC8vICAgICAgIGV4dGVybmFsIHByb2dyYW0uIG1hbnkgcHJvZ3JhbXMgKGUuZy4gLk5FVCBjb25zb2xlIGFwcHMpIHJlbHkgb24gdGhlIHNsYXNoLWRvdWJsaW5nIHJ1bGUuXG4gICAgICAgIC8vXG4gICAgICAgIC8vICAgIGIpIGl0J3Mgd2hhdCB3ZSd2ZSBiZWVuIGRvaW5nIHByZXZpb3VzbHkgKGJ5IGRlZmVycmluZyB0byBub2RlIGRlZmF1bHQgYmVoYXZpb3IpIGFuZCB3ZVxuICAgICAgICAvLyAgICAgICBoYXZlbid0IGhlYXJkIGFueSBjb21wbGFpbnRzIGFib3V0IHRoYXQgYXNwZWN0LlxuICAgICAgICAvL1xuICAgICAgICAvLyBub3RlLCBhIHdlYWtuZXNzIG9mIHRoZSBxdW90aW5nIHJ1bGVzIGNob3NlbiBoZXJlLCBpcyB0aGF0ICUgaXMgbm90IGVzY2FwZWQuIGluIGZhY3QsICUgY2Fubm90IGJlXG4gICAgICAgIC8vIGVzY2FwZWQgd2hlbiB1c2VkIG9uIHRoZSBjb21tYW5kIGxpbmUgZGlyZWN0bHkgLSBldmVuIHRob3VnaCB3aXRoaW4gYSAuY21kIGZpbGUgJSBjYW4gYmUgZXNjYXBlZFxuICAgICAgICAvLyBieSB1c2luZyAlJS5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gdGhlIHNhdmluZyBncmFjZSBpcywgb24gdGhlIGNvbW1hbmQgbGluZSwgJXZhciUgaXMgbGVmdCBhcy1pcyBpZiB2YXIgaXMgbm90IGRlZmluZWQuIHRoaXMgY29udHJhc3RzXG4gICAgICAgIC8vIHRoZSBsaW5lIHBhcnNpbmcgcnVsZXMgd2l0aGluIGEgLmNtZCBmaWxlLCB3aGVyZSBpZiB2YXIgaXMgbm90IGRlZmluZWQgaXQgaXMgcmVwbGFjZWQgd2l0aCBub3RoaW5nLlxuICAgICAgICAvL1xuICAgICAgICAvLyBvbmUgb3B0aW9uIHRoYXQgd2FzIGV4cGxvcmVkIHdhcyByZXBsYWNpbmcgJSB3aXRoIF4lIC0gaS5lLiAldmFyJSA9PiBeJXZhcl4lLiB0aGlzIGhhY2sgd291bGRcbiAgICAgICAgLy8gb2Z0ZW4gd29yaywgc2luY2UgaXQgaXMgdW5saWtlbHkgdGhhdCB2YXJeIHdvdWxkIGV4aXN0LCBhbmQgdGhlIF4gY2hhcmFjdGVyIGlzIHJlbW92ZWQgd2hlbiB0aGVcbiAgICAgICAgLy8gdmFyaWFibGUgaXMgdXNlZC4gdGhlIHByb2JsZW0sIGhvd2V2ZXIsIGlzIHRoYXQgXiBpcyBub3QgcmVtb3ZlZCB3aGVuICUqIGlzIHVzZWQgdG8gcGFzcyB0aGUgYXJnc1xuICAgICAgICAvLyB0byBhbiBleHRlcm5hbCBwcm9ncmFtLlxuICAgICAgICAvL1xuICAgICAgICAvLyBhbiB1bmV4cGxvcmVkIHBvdGVudGlhbCBzb2x1dGlvbiBmb3IgdGhlICUgZXNjYXBpbmcgcHJvYmxlbSwgaXMgdG8gY3JlYXRlIGEgd3JhcHBlciAuY21kIGZpbGUuXG4gICAgICAgIC8vICUgY2FuIGJlIGVzY2FwZWQgd2l0aGluIGEgLmNtZCBmaWxlLlxuICAgICAgICBsZXQgcmV2ZXJzZSA9ICdcIic7XG4gICAgICAgIGxldCBxdW90ZUhpdCA9IHRydWU7XG4gICAgICAgIGZvciAobGV0IGkgPSBhcmcubGVuZ3RoOyBpID4gMDsgaS0tKSB7XG4gICAgICAgICAgICAvLyB3YWxrIHRoZSBzdHJpbmcgaW4gcmV2ZXJzZVxuICAgICAgICAgICAgcmV2ZXJzZSArPSBhcmdbaSAtIDFdO1xuICAgICAgICAgICAgaWYgKHF1b3RlSGl0ICYmIGFyZ1tpIC0gMV0gPT09ICdcXFxcJykge1xuICAgICAgICAgICAgICAgIHJldmVyc2UgKz0gJ1xcXFwnOyAvLyBkb3VibGUgdGhlIHNsYXNoXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChhcmdbaSAtIDFdID09PSAnXCInKSB7XG4gICAgICAgICAgICAgICAgcXVvdGVIaXQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldmVyc2UgKz0gJ1wiJzsgLy8gZG91YmxlIHRoZSBxdW90ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcXVvdGVIaXQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXZlcnNlICs9ICdcIic7XG4gICAgICAgIHJldHVybiByZXZlcnNlXG4gICAgICAgICAgICAuc3BsaXQoJycpXG4gICAgICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgICAgICAuam9pbignJyk7XG4gICAgfVxuICAgIF91dlF1b3RlQ21kQXJnKGFyZykge1xuICAgICAgICAvLyBUb29sIHJ1bm5lciB3cmFwcyBjaGlsZF9wcm9jZXNzLnNwYXduKCkgYW5kIG5lZWRzIHRvIGFwcGx5IHRoZSBzYW1lIHF1b3RpbmcgYXNcbiAgICAgICAgLy8gTm9kZSBpbiBjZXJ0YWluIGNhc2VzIHdoZXJlIHRoZSB1bmRvY3VtZW50ZWQgc3Bhd24gb3B0aW9uIHdpbmRvd3NWZXJiYXRpbUFyZ3VtZW50c1xuICAgICAgICAvLyBpcyB1c2VkLlxuICAgICAgICAvL1xuICAgICAgICAvLyBTaW5jZSB0aGlzIGZ1bmN0aW9uIGlzIGEgcG9ydCBvZiBxdW90ZV9jbWRfYXJnIGZyb20gTm9kZSA0LnggKHRlY2huaWNhbGx5LCBsaWIgVVYsXG4gICAgICAgIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvYmxvYi92NC54L2RlcHMvdXYvc3JjL3dpbi9wcm9jZXNzLmMgZm9yIGRldGFpbHMpLFxuICAgICAgICAvLyBwYXN0aW5nIGNvcHlyaWdodCBub3RpY2UgZnJvbSBOb2RlIHdpdGhpbiB0aGlzIGZ1bmN0aW9uOlxuICAgICAgICAvL1xuICAgICAgICAvLyAgICAgIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICAgICAgICAvL1xuICAgICAgICAvLyAgICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiAgICAgICAgLy8gICAgICBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0b1xuICAgICAgICAvLyAgICAgIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlXG4gICAgICAgIC8vICAgICAgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yXG4gICAgICAgIC8vICAgICAgc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiAgICAgICAgLy8gICAgICBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICAgICAgICAvL1xuICAgICAgICAvLyAgICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4gICAgICAgIC8vICAgICAgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gICAgICAgIC8vXG4gICAgICAgIC8vICAgICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICAgICAgICAvLyAgICAgIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICAgICAgICAvLyAgICAgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICAgICAgICAvLyAgICAgIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAgICAgICAgLy8gICAgICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lOR1xuICAgICAgICAvLyAgICAgIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1NcbiAgICAgICAgLy8gICAgICBJTiBUSEUgU09GVFdBUkUuXG4gICAgICAgIGlmICghYXJnKSB7XG4gICAgICAgICAgICAvLyBOZWVkIGRvdWJsZSBxdW90YXRpb24gZm9yIGVtcHR5IGFyZ3VtZW50XG4gICAgICAgICAgICByZXR1cm4gJ1wiXCInO1xuICAgICAgICB9XG4gICAgICAgIGlmICghYXJnLmluY2x1ZGVzKCcgJykgJiYgIWFyZy5pbmNsdWRlcygnXFx0JykgJiYgIWFyZy5pbmNsdWRlcygnXCInKSkge1xuICAgICAgICAgICAgLy8gTm8gcXVvdGF0aW9uIG5lZWRlZFxuICAgICAgICAgICAgcmV0dXJuIGFyZztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWFyZy5pbmNsdWRlcygnXCInKSAmJiAhYXJnLmluY2x1ZGVzKCdcXFxcJykpIHtcbiAgICAgICAgICAgIC8vIE5vIGVtYmVkZGVkIGRvdWJsZSBxdW90ZXMgb3IgYmFja3NsYXNoZXMsIHNvIEkgY2FuIGp1c3Qgd3JhcFxuICAgICAgICAgICAgLy8gcXVvdGUgbWFya3MgYXJvdW5kIHRoZSB3aG9sZSB0aGluZy5cbiAgICAgICAgICAgIHJldHVybiBgXCIke2FyZ31cImA7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRXhwZWN0ZWQgaW5wdXQvb3V0cHV0OlxuICAgICAgICAvLyAgIGlucHV0IDogaGVsbG9cIndvcmxkXG4gICAgICAgIC8vICAgb3V0cHV0OiBcImhlbGxvXFxcIndvcmxkXCJcbiAgICAgICAgLy8gICBpbnB1dCA6IGhlbGxvXCJcIndvcmxkXG4gICAgICAgIC8vICAgb3V0cHV0OiBcImhlbGxvXFxcIlxcXCJ3b3JsZFwiXG4gICAgICAgIC8vICAgaW5wdXQgOiBoZWxsb1xcd29ybGRcbiAgICAgICAgLy8gICBvdXRwdXQ6IGhlbGxvXFx3b3JsZFxuICAgICAgICAvLyAgIGlucHV0IDogaGVsbG9cXFxcd29ybGRcbiAgICAgICAgLy8gICBvdXRwdXQ6IGhlbGxvXFxcXHdvcmxkXG4gICAgICAgIC8vICAgaW5wdXQgOiBoZWxsb1xcXCJ3b3JsZFxuICAgICAgICAvLyAgIG91dHB1dDogXCJoZWxsb1xcXFxcXFwid29ybGRcIlxuICAgICAgICAvLyAgIGlucHV0IDogaGVsbG9cXFxcXCJ3b3JsZFxuICAgICAgICAvLyAgIG91dHB1dDogXCJoZWxsb1xcXFxcXFxcXFxcIndvcmxkXCJcbiAgICAgICAgLy8gICBpbnB1dCA6IGhlbGxvIHdvcmxkXFxcbiAgICAgICAgLy8gICBvdXRwdXQ6IFwiaGVsbG8gd29ybGRcXFxcXCIgLSBub3RlIHRoZSBjb21tZW50IGluIGxpYnV2IGFjdHVhbGx5IHJlYWRzIFwiaGVsbG8gd29ybGRcXFwiXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXQgaXQgYXBwZWFycyB0aGUgY29tbWVudCBpcyB3cm9uZywgaXQgc2hvdWxkIGJlIFwiaGVsbG8gd29ybGRcXFxcXCJcbiAgICAgICAgbGV0IHJldmVyc2UgPSAnXCInO1xuICAgICAgICBsZXQgcXVvdGVIaXQgPSB0cnVlO1xuICAgICAgICBmb3IgKGxldCBpID0gYXJnLmxlbmd0aDsgaSA+IDA7IGktLSkge1xuICAgICAgICAgICAgLy8gd2FsayB0aGUgc3RyaW5nIGluIHJldmVyc2VcbiAgICAgICAgICAgIHJldmVyc2UgKz0gYXJnW2kgLSAxXTtcbiAgICAgICAgICAgIGlmIChxdW90ZUhpdCAmJiBhcmdbaSAtIDFdID09PSAnXFxcXCcpIHtcbiAgICAgICAgICAgICAgICByZXZlcnNlICs9ICdcXFxcJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGFyZ1tpIC0gMV0gPT09ICdcIicpIHtcbiAgICAgICAgICAgICAgICBxdW90ZUhpdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV2ZXJzZSArPSAnXFxcXCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBxdW90ZUhpdCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldmVyc2UgKz0gJ1wiJztcbiAgICAgICAgcmV0dXJuIHJldmVyc2VcbiAgICAgICAgICAgIC5zcGxpdCgnJylcbiAgICAgICAgICAgIC5yZXZlcnNlKClcbiAgICAgICAgICAgIC5qb2luKCcnKTtcbiAgICB9XG4gICAgX2Nsb25lRXhlY09wdGlvbnMob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgICAgICAgY3dkOiBvcHRpb25zLmN3ZCB8fCBwcm9jZXNzLmN3ZCgpLFxuICAgICAgICAgICAgZW52OiBvcHRpb25zLmVudiB8fCBwcm9jZXNzLmVudixcbiAgICAgICAgICAgIHNpbGVudDogb3B0aW9ucy5zaWxlbnQgfHwgZmFsc2UsXG4gICAgICAgICAgICB3aW5kb3dzVmVyYmF0aW1Bcmd1bWVudHM6IG9wdGlvbnMud2luZG93c1ZlcmJhdGltQXJndW1lbnRzIHx8IGZhbHNlLFxuICAgICAgICAgICAgZmFpbE9uU3RkRXJyOiBvcHRpb25zLmZhaWxPblN0ZEVyciB8fCBmYWxzZSxcbiAgICAgICAgICAgIGlnbm9yZVJldHVybkNvZGU6IG9wdGlvbnMuaWdub3JlUmV0dXJuQ29kZSB8fCBmYWxzZSxcbiAgICAgICAgICAgIGRlbGF5OiBvcHRpb25zLmRlbGF5IHx8IDEwMDAwXG4gICAgICAgIH07XG4gICAgICAgIHJlc3VsdC5vdXRTdHJlYW0gPSBvcHRpb25zLm91dFN0cmVhbSB8fCBwcm9jZXNzLnN0ZG91dDtcbiAgICAgICAgcmVzdWx0LmVyclN0cmVhbSA9IG9wdGlvbnMuZXJyU3RyZWFtIHx8IHByb2Nlc3Muc3RkZXJyO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBfZ2V0U3Bhd25PcHRpb25zKG9wdGlvbnMsIHRvb2xQYXRoKSB7XG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgICAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICAgICAgcmVzdWx0LmN3ZCA9IG9wdGlvbnMuY3dkO1xuICAgICAgICByZXN1bHQuZW52ID0gb3B0aW9ucy5lbnY7XG4gICAgICAgIHJlc3VsdFsnd2luZG93c1ZlcmJhdGltQXJndW1lbnRzJ10gPVxuICAgICAgICAgICAgb3B0aW9ucy53aW5kb3dzVmVyYmF0aW1Bcmd1bWVudHMgfHwgdGhpcy5faXNDbWRGaWxlKCk7XG4gICAgICAgIGlmIChvcHRpb25zLndpbmRvd3NWZXJiYXRpbUFyZ3VtZW50cykge1xuICAgICAgICAgICAgcmVzdWx0LmFyZ3YwID0gYFwiJHt0b29sUGF0aH1cImA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRXhlYyBhIHRvb2wuXG4gICAgICogT3V0cHV0IHdpbGwgYmUgc3RyZWFtZWQgdG8gdGhlIGxpdmUgY29uc29sZS5cbiAgICAgKiBSZXR1cm5zIHByb21pc2Ugd2l0aCByZXR1cm4gY29kZVxuICAgICAqXG4gICAgICogQHBhcmFtICAgICB0b29sICAgICBwYXRoIHRvIHRvb2wgdG8gZXhlY1xuICAgICAqIEBwYXJhbSAgICAgb3B0aW9ucyAgb3B0aW9uYWwgZXhlYyBvcHRpb25zLiAgU2VlIEV4ZWNPcHRpb25zXG4gICAgICogQHJldHVybnMgICBudW1iZXJcbiAgICAgKi9cbiAgICBleGVjKCkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgLy8gcm9vdCB0aGUgdG9vbCBwYXRoIGlmIGl0IGlzIHVucm9vdGVkIGFuZCBjb250YWlucyByZWxhdGl2ZSBwYXRoaW5nXG4gICAgICAgICAgICBpZiAoIWlvVXRpbC5pc1Jvb3RlZCh0aGlzLnRvb2xQYXRoKSAmJlxuICAgICAgICAgICAgICAgICh0aGlzLnRvb2xQYXRoLmluY2x1ZGVzKCcvJykgfHxcbiAgICAgICAgICAgICAgICAgICAgKElTX1dJTkRPV1MgJiYgdGhpcy50b29sUGF0aC5pbmNsdWRlcygnXFxcXCcpKSkpIHtcbiAgICAgICAgICAgICAgICAvLyBwcmVmZXIgb3B0aW9ucy5jd2QgaWYgaXQgaXMgc3BlY2lmaWVkLCBob3dldmVyIG9wdGlvbnMuY3dkIG1heSBhbHNvIG5lZWQgdG8gYmUgcm9vdGVkXG4gICAgICAgICAgICAgICAgdGhpcy50b29sUGF0aCA9IHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCB0aGlzLm9wdGlvbnMuY3dkIHx8IHByb2Nlc3MuY3dkKCksIHRoaXMudG9vbFBhdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgdGhlIHRvb2wgaXMgb25seSBhIGZpbGUgbmFtZSwgdGhlbiByZXNvbHZlIGl0IGZyb20gdGhlIFBBVEhcbiAgICAgICAgICAgIC8vIG90aGVyd2lzZSB2ZXJpZnkgaXQgZXhpc3RzIChhZGQgZXh0ZW5zaW9uIG9uIFdpbmRvd3MgaWYgbmVjZXNzYXJ5KVxuICAgICAgICAgICAgdGhpcy50b29sUGF0aCA9IHlpZWxkIGlvLndoaWNoKHRoaXMudG9vbFBhdGgsIHRydWUpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kZWJ1ZyhgZXhlYyB0b29sOiAke3RoaXMudG9vbFBhdGh9YCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGVidWcoJ2FyZ3VtZW50czonKTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGFyZyBvZiB0aGlzLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVidWcoYCAgICR7YXJnfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25zTm9uTnVsbCA9IHRoaXMuX2Nsb25lRXhlY09wdGlvbnModGhpcy5vcHRpb25zKTtcbiAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnNOb25OdWxsLnNpbGVudCAmJiBvcHRpb25zTm9uTnVsbC5vdXRTdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uc05vbk51bGwub3V0U3RyZWFtLndyaXRlKHRoaXMuX2dldENvbW1hbmRTdHJpbmcob3B0aW9uc05vbk51bGwpICsgb3MuRU9MKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhdGUgPSBuZXcgRXhlY1N0YXRlKG9wdGlvbnNOb25OdWxsLCB0aGlzLnRvb2xQYXRoKTtcbiAgICAgICAgICAgICAgICBzdGF0ZS5vbignZGVidWcnLCAobWVzc2FnZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWJ1ZyhtZXNzYWdlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmN3ZCAmJiAhKHlpZWxkIGlvVXRpbC5leGlzdHModGhpcy5vcHRpb25zLmN3ZCkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yKGBUaGUgY3dkOiAke3RoaXMub3B0aW9ucy5jd2R9IGRvZXMgbm90IGV4aXN0IWApKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZU5hbWUgPSB0aGlzLl9nZXRTcGF3bkZpbGVOYW1lKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgY3AgPSBjaGlsZC5zcGF3bihmaWxlTmFtZSwgdGhpcy5fZ2V0U3Bhd25BcmdzKG9wdGlvbnNOb25OdWxsKSwgdGhpcy5fZ2V0U3Bhd25PcHRpb25zKHRoaXMub3B0aW9ucywgZmlsZU5hbWUpKTtcbiAgICAgICAgICAgICAgICBsZXQgc3RkYnVmZmVyID0gJyc7XG4gICAgICAgICAgICAgICAgaWYgKGNwLnN0ZG91dCkge1xuICAgICAgICAgICAgICAgICAgICBjcC5zdGRvdXQub24oJ2RhdGEnLCAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5saXN0ZW5lcnMgJiYgdGhpcy5vcHRpb25zLmxpc3RlbmVycy5zdGRvdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMubGlzdGVuZXJzLnN0ZG91dChkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9uc05vbk51bGwuc2lsZW50ICYmIG9wdGlvbnNOb25OdWxsLm91dFN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNOb25OdWxsLm91dFN0cmVhbS53cml0ZShkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGJ1ZmZlciA9IHRoaXMuX3Byb2Nlc3NMaW5lQnVmZmVyKGRhdGEsIHN0ZGJ1ZmZlciwgKGxpbmUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxpc3RlbmVycyAmJiB0aGlzLm9wdGlvbnMubGlzdGVuZXJzLnN0ZGxpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmxpc3RlbmVycy5zdGRsaW5lKGxpbmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IGVycmJ1ZmZlciA9ICcnO1xuICAgICAgICAgICAgICAgIGlmIChjcC5zdGRlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY3Auc3RkZXJyLm9uKCdkYXRhJywgKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnByb2Nlc3NTdGRlcnIgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5saXN0ZW5lcnMgJiYgdGhpcy5vcHRpb25zLmxpc3RlbmVycy5zdGRlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMubGlzdGVuZXJzLnN0ZGVycihkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9uc05vbk51bGwuc2lsZW50ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uc05vbk51bGwuZXJyU3RyZWFtICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uc05vbk51bGwub3V0U3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcyA9IG9wdGlvbnNOb25OdWxsLmZhaWxPblN0ZEVyclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG9wdGlvbnNOb25OdWxsLmVyclN0cmVhbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG9wdGlvbnNOb25OdWxsLm91dFN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLndyaXRlKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyYnVmZmVyID0gdGhpcy5fcHJvY2Vzc0xpbmVCdWZmZXIoZGF0YSwgZXJyYnVmZmVyLCAobGluZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMubGlzdGVuZXJzICYmIHRoaXMub3B0aW9ucy5saXN0ZW5lcnMuZXJybGluZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMubGlzdGVuZXJzLmVycmxpbmUobGluZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjcC5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLnByb2Nlc3NFcnJvciA9IGVyci5tZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5wcm9jZXNzRXhpdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUucHJvY2Vzc0Nsb3NlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLkNoZWNrQ29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjcC5vbignZXhpdCcsIChjb2RlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLnByb2Nlc3NFeGl0Q29kZSA9IGNvZGU7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLnByb2Nlc3NFeGl0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWJ1ZyhgRXhpdCBjb2RlICR7Y29kZX0gcmVjZWl2ZWQgZnJvbSB0b29sICcke3RoaXMudG9vbFBhdGh9J2ApO1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5DaGVja0NvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY3Aub24oJ2Nsb3NlJywgKGNvZGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUucHJvY2Vzc0V4aXRDb2RlID0gY29kZTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUucHJvY2Vzc0V4aXRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLnByb2Nlc3NDbG9zZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWJ1ZyhgU1RESU8gc3RyZWFtcyBoYXZlIGNsb3NlZCBmb3IgdG9vbCAnJHt0aGlzLnRvb2xQYXRofSdgKTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuQ2hlY2tDb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHN0YXRlLm9uKCdkb25lJywgKGVycm9yLCBleGl0Q29kZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3RkYnVmZmVyLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnc3RkbGluZScsIHN0ZGJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycmJ1ZmZlci5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2VycmxpbmUnLCBlcnJidWZmZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNwLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGV4aXRDb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjcC5zdGRpbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjaGlsZCBwcm9jZXNzIG1pc3Npbmcgc3RkaW4nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjcC5zdGRpbi5lbmQodGhpcy5vcHRpb25zLmlucHV0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuVG9vbFJ1bm5lciA9IFRvb2xSdW5uZXI7XG4vKipcbiAqIENvbnZlcnQgYW4gYXJnIHN0cmluZyB0byBhbiBhcnJheSBvZiBhcmdzLiBIYW5kbGVzIGVzY2FwaW5nXG4gKlxuICogQHBhcmFtICAgIGFyZ1N0cmluZyAgIHN0cmluZyBvZiBhcmd1bWVudHNcbiAqIEByZXR1cm5zICBzdHJpbmdbXSAgICBhcnJheSBvZiBhcmd1bWVudHNcbiAqL1xuZnVuY3Rpb24gYXJnU3RyaW5nVG9BcnJheShhcmdTdHJpbmcpIHtcbiAgICBjb25zdCBhcmdzID0gW107XG4gICAgbGV0IGluUXVvdGVzID0gZmFsc2U7XG4gICAgbGV0IGVzY2FwZWQgPSBmYWxzZTtcbiAgICBsZXQgYXJnID0gJyc7XG4gICAgZnVuY3Rpb24gYXBwZW5kKGMpIHtcbiAgICAgICAgLy8gd2Ugb25seSBlc2NhcGUgZG91YmxlIHF1b3Rlcy5cbiAgICAgICAgaWYgKGVzY2FwZWQgJiYgYyAhPT0gJ1wiJykge1xuICAgICAgICAgICAgYXJnICs9ICdcXFxcJztcbiAgICAgICAgfVxuICAgICAgICBhcmcgKz0gYztcbiAgICAgICAgZXNjYXBlZCA9IGZhbHNlO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ1N0cmluZy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBjID0gYXJnU3RyaW5nLmNoYXJBdChpKTtcbiAgICAgICAgaWYgKGMgPT09ICdcIicpIHtcbiAgICAgICAgICAgIGlmICghZXNjYXBlZCkge1xuICAgICAgICAgICAgICAgIGluUXVvdGVzID0gIWluUXVvdGVzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYXBwZW5kKGMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGMgPT09ICdcXFxcJyAmJiBlc2NhcGVkKSB7XG4gICAgICAgICAgICBhcHBlbmQoYyk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYyA9PT0gJ1xcXFwnICYmIGluUXVvdGVzKSB7XG4gICAgICAgICAgICBlc2NhcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjID09PSAnICcgJiYgIWluUXVvdGVzKSB7XG4gICAgICAgICAgICBpZiAoYXJnLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBhcmdzLnB1c2goYXJnKTtcbiAgICAgICAgICAgICAgICBhcmcgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGFwcGVuZChjKTtcbiAgICB9XG4gICAgaWYgKGFyZy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGFyZ3MucHVzaChhcmcudHJpbSgpKTtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5leHBvcnRzLmFyZ1N0cmluZ1RvQXJyYXkgPSBhcmdTdHJpbmdUb0FycmF5O1xuY2xhc3MgRXhlY1N0YXRlIGV4dGVuZHMgZXZlbnRzLkV2ZW50RW1pdHRlciB7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucywgdG9vbFBhdGgpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5wcm9jZXNzQ2xvc2VkID0gZmFsc2U7IC8vIHRyYWNrcyB3aGV0aGVyIHRoZSBwcm9jZXNzIGhhcyBleGl0ZWQgYW5kIHN0ZGlvIGlzIGNsb3NlZFxuICAgICAgICB0aGlzLnByb2Nlc3NFcnJvciA9ICcnO1xuICAgICAgICB0aGlzLnByb2Nlc3NFeGl0Q29kZSA9IDA7XG4gICAgICAgIHRoaXMucHJvY2Vzc0V4aXRlZCA9IGZhbHNlOyAvLyB0cmFja3Mgd2hldGhlciB0aGUgcHJvY2VzcyBoYXMgZXhpdGVkXG4gICAgICAgIHRoaXMucHJvY2Vzc1N0ZGVyciA9IGZhbHNlOyAvLyB0cmFja3Mgd2hldGhlciBzdGRlcnIgd2FzIHdyaXR0ZW4gdG9cbiAgICAgICAgdGhpcy5kZWxheSA9IDEwMDAwOyAvLyAxMCBzZWNvbmRzXG4gICAgICAgIHRoaXMuZG9uZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnRpbWVvdXQgPSBudWxsO1xuICAgICAgICBpZiAoIXRvb2xQYXRoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Rvb2xQYXRoIG11c3Qgbm90IGJlIGVtcHR5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgdGhpcy50b29sUGF0aCA9IHRvb2xQYXRoO1xuICAgICAgICBpZiAob3B0aW9ucy5kZWxheSkge1xuICAgICAgICAgICAgdGhpcy5kZWxheSA9IG9wdGlvbnMuZGVsYXk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgQ2hlY2tDb21wbGV0ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnByb2Nlc3NDbG9zZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldFJlc3VsdCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMucHJvY2Vzc0V4aXRlZCkge1xuICAgICAgICAgICAgdGhpcy50aW1lb3V0ID0gdGltZXJzXzEuc2V0VGltZW91dChFeGVjU3RhdGUuSGFuZGxlVGltZW91dCwgdGhpcy5kZWxheSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX2RlYnVnKG1lc3NhZ2UpIHtcbiAgICAgICAgdGhpcy5lbWl0KCdkZWJ1ZycsIG1lc3NhZ2UpO1xuICAgIH1cbiAgICBfc2V0UmVzdWx0KCkge1xuICAgICAgICAvLyBkZXRlcm1pbmUgd2hldGhlciB0aGVyZSBpcyBhbiBlcnJvclxuICAgICAgICBsZXQgZXJyb3I7XG4gICAgICAgIGlmICh0aGlzLnByb2Nlc3NFeGl0ZWQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByb2Nlc3NFcnJvcikge1xuICAgICAgICAgICAgICAgIGVycm9yID0gbmV3IEVycm9yKGBUaGVyZSB3YXMgYW4gZXJyb3Igd2hlbiBhdHRlbXB0aW5nIHRvIGV4ZWN1dGUgdGhlIHByb2Nlc3MgJyR7dGhpcy50b29sUGF0aH0nLiBUaGlzIG1heSBpbmRpY2F0ZSB0aGUgcHJvY2VzcyBmYWlsZWQgdG8gc3RhcnQuIEVycm9yOiAke3RoaXMucHJvY2Vzc0Vycm9yfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5wcm9jZXNzRXhpdENvZGUgIT09IDAgJiYgIXRoaXMub3B0aW9ucy5pZ25vcmVSZXR1cm5Db2RlKSB7XG4gICAgICAgICAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoYFRoZSBwcm9jZXNzICcke3RoaXMudG9vbFBhdGh9JyBmYWlsZWQgd2l0aCBleGl0IGNvZGUgJHt0aGlzLnByb2Nlc3NFeGl0Q29kZX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMucHJvY2Vzc1N0ZGVyciAmJiB0aGlzLm9wdGlvbnMuZmFpbE9uU3RkRXJyKSB7XG4gICAgICAgICAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoYFRoZSBwcm9jZXNzICcke3RoaXMudG9vbFBhdGh9JyBmYWlsZWQgYmVjYXVzZSBvbmUgb3IgbW9yZSBsaW5lcyB3ZXJlIHdyaXR0ZW4gdG8gdGhlIFNUREVSUiBzdHJlYW1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBjbGVhciB0aGUgdGltZW91dFxuICAgICAgICBpZiAodGhpcy50aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTtcbiAgICAgICAgICAgIHRoaXMudGltZW91dCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kb25lID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5lbWl0KCdkb25lJywgZXJyb3IsIHRoaXMucHJvY2Vzc0V4aXRDb2RlKTtcbiAgICB9XG4gICAgc3RhdGljIEhhbmRsZVRpbWVvdXQoc3RhdGUpIHtcbiAgICAgICAgaWYgKHN0YXRlLmRvbmUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXN0YXRlLnByb2Nlc3NDbG9zZWQgJiYgc3RhdGUucHJvY2Vzc0V4aXRlZCkge1xuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGBUaGUgU1RESU8gc3RyZWFtcyBkaWQgbm90IGNsb3NlIHdpdGhpbiAke3N0YXRlLmRlbGF5IC9cbiAgICAgICAgICAgICAgICAxMDAwfSBzZWNvbmRzIG9mIHRoZSBleGl0IGV2ZW50IGZyb20gcHJvY2VzcyAnJHtzdGF0ZS50b29sUGF0aH0nLiBUaGlzIG1heSBpbmRpY2F0ZSBhIGNoaWxkIHByb2Nlc3MgaW5oZXJpdGVkIHRoZSBTVERJTyBzdHJlYW1zIGFuZCBoYXMgbm90IHlldCBleGl0ZWQuYDtcbiAgICAgICAgICAgIHN0YXRlLl9kZWJ1ZyhtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZS5fc2V0UmVzdWx0KCk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dG9vbHJ1bm5lci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH0pO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRFeGVjT3V0cHV0ID0gZXhwb3J0cy5leGVjID0gdm9pZCAwO1xuY29uc3Qgc3RyaW5nX2RlY29kZXJfMSA9IHJlcXVpcmUoXCJzdHJpbmdfZGVjb2RlclwiKTtcbmNvbnN0IHRyID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL3Rvb2xydW5uZXJcIikpO1xuLyoqXG4gKiBFeGVjIGEgY29tbWFuZC5cbiAqIE91dHB1dCB3aWxsIGJlIHN0cmVhbWVkIHRvIHRoZSBsaXZlIGNvbnNvbGUuXG4gKiBSZXR1cm5zIHByb21pc2Ugd2l0aCByZXR1cm4gY29kZVxuICpcbiAqIEBwYXJhbSAgICAgY29tbWFuZExpbmUgICAgICAgIGNvbW1hbmQgdG8gZXhlY3V0ZSAoY2FuIGluY2x1ZGUgYWRkaXRpb25hbCBhcmdzKS4gTXVzdCBiZSBjb3JyZWN0bHkgZXNjYXBlZC5cbiAqIEBwYXJhbSAgICAgYXJncyAgICAgICAgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50cyBmb3IgdG9vbC4gRXNjYXBpbmcgaXMgaGFuZGxlZCBieSB0aGUgbGliLlxuICogQHBhcmFtICAgICBvcHRpb25zICAgICAgICAgICAgb3B0aW9uYWwgZXhlYyBvcHRpb25zLiAgU2VlIEV4ZWNPcHRpb25zXG4gKiBAcmV0dXJucyAgIFByb21pc2U8bnVtYmVyPiAgICBleGl0IGNvZGVcbiAqL1xuZnVuY3Rpb24gZXhlYyhjb21tYW5kTGluZSwgYXJncywgb3B0aW9ucykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IGNvbW1hbmRBcmdzID0gdHIuYXJnU3RyaW5nVG9BcnJheShjb21tYW5kTGluZSk7XG4gICAgICAgIGlmIChjb21tYW5kQXJncy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUGFyYW1ldGVyICdjb21tYW5kTGluZScgY2Fubm90IGJlIG51bGwgb3IgZW1wdHkuYCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUGF0aCB0byB0b29sIHRvIGV4ZWN1dGUgc2hvdWxkIGJlIGZpcnN0IGFyZ1xuICAgICAgICBjb25zdCB0b29sUGF0aCA9IGNvbW1hbmRBcmdzWzBdO1xuICAgICAgICBhcmdzID0gY29tbWFuZEFyZ3Muc2xpY2UoMSkuY29uY2F0KGFyZ3MgfHwgW10pO1xuICAgICAgICBjb25zdCBydW5uZXIgPSBuZXcgdHIuVG9vbFJ1bm5lcih0b29sUGF0aCwgYXJncywgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBydW5uZXIuZXhlYygpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5leGVjID0gZXhlYztcbi8qKlxuICogRXhlYyBhIGNvbW1hbmQgYW5kIGdldCB0aGUgb3V0cHV0LlxuICogT3V0cHV0IHdpbGwgYmUgc3RyZWFtZWQgdG8gdGhlIGxpdmUgY29uc29sZS5cbiAqIFJldHVybnMgcHJvbWlzZSB3aXRoIHRoZSBleGl0IGNvZGUgYW5kIGNvbGxlY3RlZCBzdGRvdXQgYW5kIHN0ZGVyclxuICpcbiAqIEBwYXJhbSAgICAgY29tbWFuZExpbmUgICAgICAgICAgIGNvbW1hbmQgdG8gZXhlY3V0ZSAoY2FuIGluY2x1ZGUgYWRkaXRpb25hbCBhcmdzKS4gTXVzdCBiZSBjb3JyZWN0bHkgZXNjYXBlZC5cbiAqIEBwYXJhbSAgICAgYXJncyAgICAgICAgICAgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50cyBmb3IgdG9vbC4gRXNjYXBpbmcgaXMgaGFuZGxlZCBieSB0aGUgbGliLlxuICogQHBhcmFtICAgICBvcHRpb25zICAgICAgICAgICAgICAgb3B0aW9uYWwgZXhlYyBvcHRpb25zLiAgU2VlIEV4ZWNPcHRpb25zXG4gKiBAcmV0dXJucyAgIFByb21pc2U8RXhlY091dHB1dD4gICBleGl0IGNvZGUsIHN0ZG91dCwgYW5kIHN0ZGVyclxuICovXG5mdW5jdGlvbiBnZXRFeGVjT3V0cHV0KGNvbW1hbmRMaW5lLCBhcmdzLCBvcHRpb25zKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBsZXQgc3Rkb3V0ID0gJyc7XG4gICAgICAgIGxldCBzdGRlcnIgPSAnJztcbiAgICAgICAgLy9Vc2luZyBzdHJpbmcgZGVjb2RlciBjb3ZlcnMgdGhlIGNhc2Ugd2hlcmUgYSBtdWx0LWJ5dGUgY2hhcmFjdGVyIGlzIHNwbGl0XG4gICAgICAgIGNvbnN0IHN0ZG91dERlY29kZXIgPSBuZXcgc3RyaW5nX2RlY29kZXJfMS5TdHJpbmdEZWNvZGVyKCd1dGY4Jyk7XG4gICAgICAgIGNvbnN0IHN0ZGVyckRlY29kZXIgPSBuZXcgc3RyaW5nX2RlY29kZXJfMS5TdHJpbmdEZWNvZGVyKCd1dGY4Jyk7XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsU3Rkb3V0TGlzdGVuZXIgPSAoX2EgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMubGlzdGVuZXJzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc3Rkb3V0O1xuICAgICAgICBjb25zdCBvcmlnaW5hbFN0ZEVyckxpc3RlbmVyID0gKF9iID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmxpc3RlbmVycykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnN0ZGVycjtcbiAgICAgICAgY29uc3Qgc3RkRXJyTGlzdGVuZXIgPSAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgc3RkZXJyICs9IHN0ZGVyckRlY29kZXIud3JpdGUoZGF0YSk7XG4gICAgICAgICAgICBpZiAob3JpZ2luYWxTdGRFcnJMaXN0ZW5lcikge1xuICAgICAgICAgICAgICAgIG9yaWdpbmFsU3RkRXJyTGlzdGVuZXIoZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHN0ZE91dExpc3RlbmVyID0gKGRhdGEpID0+IHtcbiAgICAgICAgICAgIHN0ZG91dCArPSBzdGRvdXREZWNvZGVyLndyaXRlKGRhdGEpO1xuICAgICAgICAgICAgaWYgKG9yaWdpbmFsU3Rkb3V0TGlzdGVuZXIpIHtcbiAgICAgICAgICAgICAgICBvcmlnaW5hbFN0ZG91dExpc3RlbmVyKGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5saXN0ZW5lcnMpLCB7IHN0ZG91dDogc3RkT3V0TGlzdGVuZXIsIHN0ZGVycjogc3RkRXJyTGlzdGVuZXIgfSk7XG4gICAgICAgIGNvbnN0IGV4aXRDb2RlID0geWllbGQgZXhlYyhjb21tYW5kTGluZSwgYXJncywgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKSwgeyBsaXN0ZW5lcnMgfSkpO1xuICAgICAgICAvL2ZsdXNoIGFueSByZW1haW5pbmcgY2hhcmFjdGVyc1xuICAgICAgICBzdGRvdXQgKz0gc3Rkb3V0RGVjb2Rlci5lbmQoKTtcbiAgICAgICAgc3RkZXJyICs9IHN0ZGVyckRlY29kZXIuZW5kKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBleGl0Q29kZSxcbiAgICAgICAgICAgIHN0ZG91dCxcbiAgICAgICAgICAgIHN0ZGVyclxuICAgICAgICB9O1xuICAgIH0pO1xufVxuZXhwb3J0cy5nZXRFeGVjT3V0cHV0ID0gZ2V0RXhlY091dHB1dDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWV4ZWMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldERldGFpbHMgPSBleHBvcnRzLmlzTGludXggPSBleHBvcnRzLmlzTWFjT1MgPSBleHBvcnRzLmlzV2luZG93cyA9IGV4cG9ydHMuYXJjaCA9IGV4cG9ydHMucGxhdGZvcm0gPSB2b2lkIDA7XG5jb25zdCBvc18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJvc1wiKSk7XG5jb25zdCBleGVjID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJAYWN0aW9ucy9leGVjXCIpKTtcbmNvbnN0IGdldFdpbmRvd3NJbmZvID0gKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgY29uc3QgeyBzdGRvdXQ6IHZlcnNpb24gfSA9IHlpZWxkIGV4ZWMuZ2V0RXhlY091dHB1dCgncG93ZXJzaGVsbCAtY29tbWFuZCBcIihHZXQtQ2ltSW5zdGFuY2UgLUNsYXNzTmFtZSBXaW4zMl9PcGVyYXRpbmdTeXN0ZW0pLlZlcnNpb25cIicsIHVuZGVmaW5lZCwge1xuICAgICAgICBzaWxlbnQ6IHRydWVcbiAgICB9KTtcbiAgICBjb25zdCB7IHN0ZG91dDogbmFtZSB9ID0geWllbGQgZXhlYy5nZXRFeGVjT3V0cHV0KCdwb3dlcnNoZWxsIC1jb21tYW5kIFwiKEdldC1DaW1JbnN0YW5jZSAtQ2xhc3NOYW1lIFdpbjMyX09wZXJhdGluZ1N5c3RlbSkuQ2FwdGlvblwiJywgdW5kZWZpbmVkLCB7XG4gICAgICAgIHNpbGVudDogdHJ1ZVxuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IG5hbWUudHJpbSgpLFxuICAgICAgICB2ZXJzaW9uOiB2ZXJzaW9uLnRyaW0oKVxuICAgIH07XG59KTtcbmNvbnN0IGdldE1hY09zSW5mbyA9ICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgIHZhciBfYSwgX2IsIF9jLCBfZDtcbiAgICBjb25zdCB7IHN0ZG91dCB9ID0geWllbGQgZXhlYy5nZXRFeGVjT3V0cHV0KCdzd192ZXJzJywgdW5kZWZpbmVkLCB7XG4gICAgICAgIHNpbGVudDogdHJ1ZVxuICAgIH0pO1xuICAgIGNvbnN0IHZlcnNpb24gPSAoX2IgPSAoX2EgPSBzdGRvdXQubWF0Y2goL1Byb2R1Y3RWZXJzaW9uOlxccyooLispLykpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVsxXSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XG4gICAgY29uc3QgbmFtZSA9IChfZCA9IChfYyA9IHN0ZG91dC5tYXRjaCgvUHJvZHVjdE5hbWU6XFxzKiguKykvKSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jWzFdKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiAnJztcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lLFxuICAgICAgICB2ZXJzaW9uXG4gICAgfTtcbn0pO1xuY29uc3QgZ2V0TGludXhJbmZvID0gKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgY29uc3QgeyBzdGRvdXQgfSA9IHlpZWxkIGV4ZWMuZ2V0RXhlY091dHB1dCgnbHNiX3JlbGVhc2UnLCBbJy1pJywgJy1yJywgJy1zJ10sIHtcbiAgICAgICAgc2lsZW50OiB0cnVlXG4gICAgfSk7XG4gICAgY29uc3QgW25hbWUsIHZlcnNpb25dID0gc3Rkb3V0LnRyaW0oKS5zcGxpdCgnXFxuJyk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgdmVyc2lvblxuICAgIH07XG59KTtcbmV4cG9ydHMucGxhdGZvcm0gPSBvc18xLmRlZmF1bHQucGxhdGZvcm0oKTtcbmV4cG9ydHMuYXJjaCA9IG9zXzEuZGVmYXVsdC5hcmNoKCk7XG5leHBvcnRzLmlzV2luZG93cyA9IGV4cG9ydHMucGxhdGZvcm0gPT09ICd3aW4zMic7XG5leHBvcnRzLmlzTWFjT1MgPSBleHBvcnRzLnBsYXRmb3JtID09PSAnZGFyd2luJztcbmV4cG9ydHMuaXNMaW51eCA9IGV4cG9ydHMucGxhdGZvcm0gPT09ICdsaW51eCc7XG5mdW5jdGlvbiBnZXREZXRhaWxzKCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sICh5aWVsZCAoZXhwb3J0cy5pc1dpbmRvd3NcbiAgICAgICAgICAgID8gZ2V0V2luZG93c0luZm8oKVxuICAgICAgICAgICAgOiBleHBvcnRzLmlzTWFjT1NcbiAgICAgICAgICAgICAgICA/IGdldE1hY09zSW5mbygpXG4gICAgICAgICAgICAgICAgOiBnZXRMaW51eEluZm8oKSkpKSwgeyBwbGF0Zm9ybTogZXhwb3J0cy5wbGF0Zm9ybSxcbiAgICAgICAgICAgIGFyY2g6IGV4cG9ydHMuYXJjaCxcbiAgICAgICAgICAgIGlzV2luZG93czogZXhwb3J0cy5pc1dpbmRvd3MsXG4gICAgICAgICAgICBpc01hY09TOiBleHBvcnRzLmlzTWFjT1MsXG4gICAgICAgICAgICBpc0xpbnV4OiBleHBvcnRzLmlzTGludXggfSk7XG4gICAgfSk7XG59XG5leHBvcnRzLmdldERldGFpbHMgPSBnZXREZXRhaWxzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGxhdGZvcm0uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnBsYXRmb3JtID0gZXhwb3J0cy50b1BsYXRmb3JtUGF0aCA9IGV4cG9ydHMudG9XaW4zMlBhdGggPSBleHBvcnRzLnRvUG9zaXhQYXRoID0gZXhwb3J0cy5tYXJrZG93blN1bW1hcnkgPSBleHBvcnRzLnN1bW1hcnkgPSBleHBvcnRzLmdldElEVG9rZW4gPSBleHBvcnRzLmdldFN0YXRlID0gZXhwb3J0cy5zYXZlU3RhdGUgPSBleHBvcnRzLmdyb3VwID0gZXhwb3J0cy5lbmRHcm91cCA9IGV4cG9ydHMuc3RhcnRHcm91cCA9IGV4cG9ydHMuaW5mbyA9IGV4cG9ydHMubm90aWNlID0gZXhwb3J0cy53YXJuaW5nID0gZXhwb3J0cy5lcnJvciA9IGV4cG9ydHMuZGVidWcgPSBleHBvcnRzLmlzRGVidWcgPSBleHBvcnRzLnNldEZhaWxlZCA9IGV4cG9ydHMuc2V0Q29tbWFuZEVjaG8gPSBleHBvcnRzLnNldE91dHB1dCA9IGV4cG9ydHMuZ2V0Qm9vbGVhbklucHV0ID0gZXhwb3J0cy5nZXRNdWx0aWxpbmVJbnB1dCA9IGV4cG9ydHMuZ2V0SW5wdXQgPSBleHBvcnRzLmFkZFBhdGggPSBleHBvcnRzLnNldFNlY3JldCA9IGV4cG9ydHMuZXhwb3J0VmFyaWFibGUgPSBleHBvcnRzLkV4aXRDb2RlID0gdm9pZCAwO1xuY29uc3QgY29tbWFuZF8xID0gcmVxdWlyZShcIi4vY29tbWFuZFwiKTtcbmNvbnN0IGZpbGVfY29tbWFuZF8xID0gcmVxdWlyZShcIi4vZmlsZS1jb21tYW5kXCIpO1xuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoXCIuL3V0aWxzXCIpO1xuY29uc3Qgb3MgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIm9zXCIpKTtcbmNvbnN0IHBhdGggPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcInBhdGhcIikpO1xuY29uc3Qgb2lkY191dGlsc18xID0gcmVxdWlyZShcIi4vb2lkYy11dGlsc1wiKTtcbi8qKlxuICogVGhlIGNvZGUgdG8gZXhpdCBhbiBhY3Rpb25cbiAqL1xudmFyIEV4aXRDb2RlO1xuKGZ1bmN0aW9uIChFeGl0Q29kZSkge1xuICAgIC8qKlxuICAgICAqIEEgY29kZSBpbmRpY2F0aW5nIHRoYXQgdGhlIGFjdGlvbiB3YXMgc3VjY2Vzc2Z1bFxuICAgICAqL1xuICAgIEV4aXRDb2RlW0V4aXRDb2RlW1wiU3VjY2Vzc1wiXSA9IDBdID0gXCJTdWNjZXNzXCI7XG4gICAgLyoqXG4gICAgICogQSBjb2RlIGluZGljYXRpbmcgdGhhdCB0aGUgYWN0aW9uIHdhcyBhIGZhaWx1cmVcbiAgICAgKi9cbiAgICBFeGl0Q29kZVtFeGl0Q29kZVtcIkZhaWx1cmVcIl0gPSAxXSA9IFwiRmFpbHVyZVwiO1xufSkoRXhpdENvZGUgfHwgKGV4cG9ydHMuRXhpdENvZGUgPSBFeGl0Q29kZSA9IHt9KSk7XG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBWYXJpYWJsZXNcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8qKlxuICogU2V0cyBlbnYgdmFyaWFibGUgZm9yIHRoaXMgYWN0aW9uIGFuZCBmdXR1cmUgYWN0aW9ucyBpbiB0aGUgam9iXG4gKiBAcGFyYW0gbmFtZSB0aGUgbmFtZSBvZiB0aGUgdmFyaWFibGUgdG8gc2V0XG4gKiBAcGFyYW0gdmFsIHRoZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUuIE5vbi1zdHJpbmcgdmFsdWVzIHdpbGwgYmUgY29udmVydGVkIHRvIGEgc3RyaW5nIHZpYSBKU09OLnN0cmluZ2lmeVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZnVuY3Rpb24gZXhwb3J0VmFyaWFibGUobmFtZSwgdmFsKSB7XG4gICAgY29uc3QgY29udmVydGVkVmFsID0gKDAsIHV0aWxzXzEudG9Db21tYW5kVmFsdWUpKHZhbCk7XG4gICAgcHJvY2Vzcy5lbnZbbmFtZV0gPSBjb252ZXJ0ZWRWYWw7XG4gICAgY29uc3QgZmlsZVBhdGggPSBwcm9jZXNzLmVudlsnR0lUSFVCX0VOViddIHx8ICcnO1xuICAgIGlmIChmaWxlUGF0aCkge1xuICAgICAgICByZXR1cm4gKDAsIGZpbGVfY29tbWFuZF8xLmlzc3VlRmlsZUNvbW1hbmQpKCdFTlYnLCAoMCwgZmlsZV9jb21tYW5kXzEucHJlcGFyZUtleVZhbHVlTWVzc2FnZSkobmFtZSwgdmFsKSk7XG4gICAgfVxuICAgICgwLCBjb21tYW5kXzEuaXNzdWVDb21tYW5kKSgnc2V0LWVudicsIHsgbmFtZSB9LCBjb252ZXJ0ZWRWYWwpO1xufVxuZXhwb3J0cy5leHBvcnRWYXJpYWJsZSA9IGV4cG9ydFZhcmlhYmxlO1xuLyoqXG4gKiBSZWdpc3RlcnMgYSBzZWNyZXQgd2hpY2ggd2lsbCBnZXQgbWFza2VkIGZyb20gbG9nc1xuICogQHBhcmFtIHNlY3JldCB2YWx1ZSBvZiB0aGUgc2VjcmV0XG4gKi9cbmZ1bmN0aW9uIHNldFNlY3JldChzZWNyZXQpIHtcbiAgICAoMCwgY29tbWFuZF8xLmlzc3VlQ29tbWFuZCkoJ2FkZC1tYXNrJywge30sIHNlY3JldCk7XG59XG5leHBvcnRzLnNldFNlY3JldCA9IHNldFNlY3JldDtcbi8qKlxuICogUHJlcGVuZHMgaW5wdXRQYXRoIHRvIHRoZSBQQVRIIChmb3IgdGhpcyBhY3Rpb24gYW5kIGZ1dHVyZSBhY3Rpb25zKVxuICogQHBhcmFtIGlucHV0UGF0aFxuICovXG5mdW5jdGlvbiBhZGRQYXRoKGlucHV0UGF0aCkge1xuICAgIGNvbnN0IGZpbGVQYXRoID0gcHJvY2Vzcy5lbnZbJ0dJVEhVQl9QQVRIJ10gfHwgJyc7XG4gICAgaWYgKGZpbGVQYXRoKSB7XG4gICAgICAgICgwLCBmaWxlX2NvbW1hbmRfMS5pc3N1ZUZpbGVDb21tYW5kKSgnUEFUSCcsIGlucHV0UGF0aCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICAoMCwgY29tbWFuZF8xLmlzc3VlQ29tbWFuZCkoJ2FkZC1wYXRoJywge30sIGlucHV0UGF0aCk7XG4gICAgfVxuICAgIHByb2Nlc3MuZW52WydQQVRIJ10gPSBgJHtpbnB1dFBhdGh9JHtwYXRoLmRlbGltaXRlcn0ke3Byb2Nlc3MuZW52WydQQVRIJ119YDtcbn1cbmV4cG9ydHMuYWRkUGF0aCA9IGFkZFBhdGg7XG4vKipcbiAqIEdldHMgdGhlIHZhbHVlIG9mIGFuIGlucHV0LlxuICogVW5sZXNzIHRyaW1XaGl0ZXNwYWNlIGlzIHNldCB0byBmYWxzZSBpbiBJbnB1dE9wdGlvbnMsIHRoZSB2YWx1ZSBpcyBhbHNvIHRyaW1tZWQuXG4gKiBSZXR1cm5zIGFuIGVtcHR5IHN0cmluZyBpZiB0aGUgdmFsdWUgaXMgbm90IGRlZmluZWQuXG4gKlxuICogQHBhcmFtICAgICBuYW1lICAgICBuYW1lIG9mIHRoZSBpbnB1dCB0byBnZXRcbiAqIEBwYXJhbSAgICAgb3B0aW9ucyAgb3B0aW9uYWwuIFNlZSBJbnB1dE9wdGlvbnMuXG4gKiBAcmV0dXJucyAgIHN0cmluZ1xuICovXG5mdW5jdGlvbiBnZXRJbnB1dChuYW1lLCBvcHRpb25zKSB7XG4gICAgY29uc3QgdmFsID0gcHJvY2Vzcy5lbnZbYElOUFVUXyR7bmFtZS5yZXBsYWNlKC8gL2csICdfJykudG9VcHBlckNhc2UoKX1gXSB8fCAnJztcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnJlcXVpcmVkICYmICF2YWwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnB1dCByZXF1aXJlZCBhbmQgbm90IHN1cHBsaWVkOiAke25hbWV9YCk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMudHJpbVdoaXRlc3BhY2UgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICAgIHJldHVybiB2YWwudHJpbSgpO1xufVxuZXhwb3J0cy5nZXRJbnB1dCA9IGdldElucHV0O1xuLyoqXG4gKiBHZXRzIHRoZSB2YWx1ZXMgb2YgYW4gbXVsdGlsaW5lIGlucHV0LiAgRWFjaCB2YWx1ZSBpcyBhbHNvIHRyaW1tZWQuXG4gKlxuICogQHBhcmFtICAgICBuYW1lICAgICBuYW1lIG9mIHRoZSBpbnB1dCB0byBnZXRcbiAqIEBwYXJhbSAgICAgb3B0aW9ucyAgb3B0aW9uYWwuIFNlZSBJbnB1dE9wdGlvbnMuXG4gKiBAcmV0dXJucyAgIHN0cmluZ1tdXG4gKlxuICovXG5mdW5jdGlvbiBnZXRNdWx0aWxpbmVJbnB1dChuYW1lLCBvcHRpb25zKSB7XG4gICAgY29uc3QgaW5wdXRzID0gZ2V0SW5wdXQobmFtZSwgb3B0aW9ucylcbiAgICAgICAgLnNwbGl0KCdcXG4nKVxuICAgICAgICAuZmlsdGVyKHggPT4geCAhPT0gJycpO1xuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMudHJpbVdoaXRlc3BhY2UgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBpbnB1dHM7XG4gICAgfVxuICAgIHJldHVybiBpbnB1dHMubWFwKGlucHV0ID0+IGlucHV0LnRyaW0oKSk7XG59XG5leHBvcnRzLmdldE11bHRpbGluZUlucHV0ID0gZ2V0TXVsdGlsaW5lSW5wdXQ7XG4vKipcbiAqIEdldHMgdGhlIGlucHV0IHZhbHVlIG9mIHRoZSBib29sZWFuIHR5cGUgaW4gdGhlIFlBTUwgMS4yIFwiY29yZSBzY2hlbWFcIiBzcGVjaWZpY2F0aW9uLlxuICogU3VwcG9ydCBib29sZWFuIGlucHV0IGxpc3Q6IGB0cnVlIHwgVHJ1ZSB8IFRSVUUgfCBmYWxzZSB8IEZhbHNlIHwgRkFMU0VgIC5cbiAqIFRoZSByZXR1cm4gdmFsdWUgaXMgYWxzbyBpbiBib29sZWFuIHR5cGUuXG4gKiByZWY6IGh0dHBzOi8veWFtbC5vcmcvc3BlYy8xLjIvc3BlYy5odG1sI2lkMjgwNDkyM1xuICpcbiAqIEBwYXJhbSAgICAgbmFtZSAgICAgbmFtZSBvZiB0aGUgaW5wdXQgdG8gZ2V0XG4gKiBAcGFyYW0gICAgIG9wdGlvbnMgIG9wdGlvbmFsLiBTZWUgSW5wdXRPcHRpb25zLlxuICogQHJldHVybnMgICBib29sZWFuXG4gKi9cbmZ1bmN0aW9uIGdldEJvb2xlYW5JbnB1dChuYW1lLCBvcHRpb25zKSB7XG4gICAgY29uc3QgdHJ1ZVZhbHVlID0gWyd0cnVlJywgJ1RydWUnLCAnVFJVRSddO1xuICAgIGNvbnN0IGZhbHNlVmFsdWUgPSBbJ2ZhbHNlJywgJ0ZhbHNlJywgJ0ZBTFNFJ107XG4gICAgY29uc3QgdmFsID0gZ2V0SW5wdXQobmFtZSwgb3B0aW9ucyk7XG4gICAgaWYgKHRydWVWYWx1ZS5pbmNsdWRlcyh2YWwpKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoZmFsc2VWYWx1ZS5pbmNsdWRlcyh2YWwpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgSW5wdXQgZG9lcyBub3QgbWVldCBZQU1MIDEuMiBcIkNvcmUgU2NoZW1hXCIgc3BlY2lmaWNhdGlvbjogJHtuYW1lfVxcbmAgK1xuICAgICAgICBgU3VwcG9ydCBib29sZWFuIGlucHV0IGxpc3Q6IFxcYHRydWUgfCBUcnVlIHwgVFJVRSB8IGZhbHNlIHwgRmFsc2UgfCBGQUxTRVxcYGApO1xufVxuZXhwb3J0cy5nZXRCb29sZWFuSW5wdXQgPSBnZXRCb29sZWFuSW5wdXQ7XG4vKipcbiAqIFNldHMgdGhlIHZhbHVlIG9mIGFuIG91dHB1dC5cbiAqXG4gKiBAcGFyYW0gICAgIG5hbWUgICAgIG5hbWUgb2YgdGhlIG91dHB1dCB0byBzZXRcbiAqIEBwYXJhbSAgICAgdmFsdWUgICAgdmFsdWUgdG8gc3RvcmUuIE5vbi1zdHJpbmcgdmFsdWVzIHdpbGwgYmUgY29udmVydGVkIHRvIGEgc3RyaW5nIHZpYSBKU09OLnN0cmluZ2lmeVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZnVuY3Rpb24gc2V0T3V0cHV0KG5hbWUsIHZhbHVlKSB7XG4gICAgY29uc3QgZmlsZVBhdGggPSBwcm9jZXNzLmVudlsnR0lUSFVCX09VVFBVVCddIHx8ICcnO1xuICAgIGlmIChmaWxlUGF0aCkge1xuICAgICAgICByZXR1cm4gKDAsIGZpbGVfY29tbWFuZF8xLmlzc3VlRmlsZUNvbW1hbmQpKCdPVVRQVVQnLCAoMCwgZmlsZV9jb21tYW5kXzEucHJlcGFyZUtleVZhbHVlTWVzc2FnZSkobmFtZSwgdmFsdWUpKTtcbiAgICB9XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUob3MuRU9MKTtcbiAgICAoMCwgY29tbWFuZF8xLmlzc3VlQ29tbWFuZCkoJ3NldC1vdXRwdXQnLCB7IG5hbWUgfSwgKDAsIHV0aWxzXzEudG9Db21tYW5kVmFsdWUpKHZhbHVlKSk7XG59XG5leHBvcnRzLnNldE91dHB1dCA9IHNldE91dHB1dDtcbi8qKlxuICogRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgZWNob2luZyBvZiBjb21tYW5kcyBpbnRvIHN0ZG91dCBmb3IgdGhlIHJlc3Qgb2YgdGhlIHN0ZXAuXG4gKiBFY2hvaW5nIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQgaWYgQUNUSU9OU19TVEVQX0RFQlVHIGlzIG5vdCBzZXQuXG4gKlxuICovXG5mdW5jdGlvbiBzZXRDb21tYW5kRWNobyhlbmFibGVkKSB7XG4gICAgKDAsIGNvbW1hbmRfMS5pc3N1ZSkoJ2VjaG8nLCBlbmFibGVkID8gJ29uJyA6ICdvZmYnKTtcbn1cbmV4cG9ydHMuc2V0Q29tbWFuZEVjaG8gPSBzZXRDb21tYW5kRWNobztcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJlc3VsdHNcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8qKlxuICogU2V0cyB0aGUgYWN0aW9uIHN0YXR1cyB0byBmYWlsZWQuXG4gKiBXaGVuIHRoZSBhY3Rpb24gZXhpdHMgaXQgd2lsbCBiZSB3aXRoIGFuIGV4aXQgY29kZSBvZiAxXG4gKiBAcGFyYW0gbWVzc2FnZSBhZGQgZXJyb3IgaXNzdWUgbWVzc2FnZVxuICovXG5mdW5jdGlvbiBzZXRGYWlsZWQobWVzc2FnZSkge1xuICAgIHByb2Nlc3MuZXhpdENvZGUgPSBFeGl0Q29kZS5GYWlsdXJlO1xuICAgIGVycm9yKG1lc3NhZ2UpO1xufVxuZXhwb3J0cy5zZXRGYWlsZWQgPSBzZXRGYWlsZWQ7XG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBMb2dnaW5nIENvbW1hbmRzXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vKipcbiAqIEdldHMgd2hldGhlciBBY3Rpb25zIFN0ZXAgRGVidWcgaXMgb24gb3Igbm90XG4gKi9cbmZ1bmN0aW9uIGlzRGVidWcoKSB7XG4gICAgcmV0dXJuIHByb2Nlc3MuZW52WydSVU5ORVJfREVCVUcnXSA9PT0gJzEnO1xufVxuZXhwb3J0cy5pc0RlYnVnID0gaXNEZWJ1Zztcbi8qKlxuICogV3JpdGVzIGRlYnVnIG1lc3NhZ2UgdG8gdXNlciBsb2dcbiAqIEBwYXJhbSBtZXNzYWdlIGRlYnVnIG1lc3NhZ2VcbiAqL1xuZnVuY3Rpb24gZGVidWcobWVzc2FnZSkge1xuICAgICgwLCBjb21tYW5kXzEuaXNzdWVDb21tYW5kKSgnZGVidWcnLCB7fSwgbWVzc2FnZSk7XG59XG5leHBvcnRzLmRlYnVnID0gZGVidWc7XG4vKipcbiAqIEFkZHMgYW4gZXJyb3IgaXNzdWVcbiAqIEBwYXJhbSBtZXNzYWdlIGVycm9yIGlzc3VlIG1lc3NhZ2UuIEVycm9ycyB3aWxsIGJlIGNvbnZlcnRlZCB0byBzdHJpbmcgdmlhIHRvU3RyaW5nKClcbiAqIEBwYXJhbSBwcm9wZXJ0aWVzIG9wdGlvbmFsIHByb3BlcnRpZXMgdG8gYWRkIHRvIHRoZSBhbm5vdGF0aW9uLlxuICovXG5mdW5jdGlvbiBlcnJvcihtZXNzYWdlLCBwcm9wZXJ0aWVzID0ge30pIHtcbiAgICAoMCwgY29tbWFuZF8xLmlzc3VlQ29tbWFuZCkoJ2Vycm9yJywgKDAsIHV0aWxzXzEudG9Db21tYW5kUHJvcGVydGllcykocHJvcGVydGllcyksIG1lc3NhZ2UgaW5zdGFuY2VvZiBFcnJvciA/IG1lc3NhZ2UudG9TdHJpbmcoKSA6IG1lc3NhZ2UpO1xufVxuZXhwb3J0cy5lcnJvciA9IGVycm9yO1xuLyoqXG4gKiBBZGRzIGEgd2FybmluZyBpc3N1ZVxuICogQHBhcmFtIG1lc3NhZ2Ugd2FybmluZyBpc3N1ZSBtZXNzYWdlLiBFcnJvcnMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gc3RyaW5nIHZpYSB0b1N0cmluZygpXG4gKiBAcGFyYW0gcHJvcGVydGllcyBvcHRpb25hbCBwcm9wZXJ0aWVzIHRvIGFkZCB0byB0aGUgYW5ub3RhdGlvbi5cbiAqL1xuZnVuY3Rpb24gd2FybmluZyhtZXNzYWdlLCBwcm9wZXJ0aWVzID0ge30pIHtcbiAgICAoMCwgY29tbWFuZF8xLmlzc3VlQ29tbWFuZCkoJ3dhcm5pbmcnLCAoMCwgdXRpbHNfMS50b0NvbW1hbmRQcm9wZXJ0aWVzKShwcm9wZXJ0aWVzKSwgbWVzc2FnZSBpbnN0YW5jZW9mIEVycm9yID8gbWVzc2FnZS50b1N0cmluZygpIDogbWVzc2FnZSk7XG59XG5leHBvcnRzLndhcm5pbmcgPSB3YXJuaW5nO1xuLyoqXG4gKiBBZGRzIGEgbm90aWNlIGlzc3VlXG4gKiBAcGFyYW0gbWVzc2FnZSBub3RpY2UgaXNzdWUgbWVzc2FnZS4gRXJyb3JzIHdpbGwgYmUgY29udmVydGVkIHRvIHN0cmluZyB2aWEgdG9TdHJpbmcoKVxuICogQHBhcmFtIHByb3BlcnRpZXMgb3B0aW9uYWwgcHJvcGVydGllcyB0byBhZGQgdG8gdGhlIGFubm90YXRpb24uXG4gKi9cbmZ1bmN0aW9uIG5vdGljZShtZXNzYWdlLCBwcm9wZXJ0aWVzID0ge30pIHtcbiAgICAoMCwgY29tbWFuZF8xLmlzc3VlQ29tbWFuZCkoJ25vdGljZScsICgwLCB1dGlsc18xLnRvQ29tbWFuZFByb3BlcnRpZXMpKHByb3BlcnRpZXMpLCBtZXNzYWdlIGluc3RhbmNlb2YgRXJyb3IgPyBtZXNzYWdlLnRvU3RyaW5nKCkgOiBtZXNzYWdlKTtcbn1cbmV4cG9ydHMubm90aWNlID0gbm90aWNlO1xuLyoqXG4gKiBXcml0ZXMgaW5mbyB0byBsb2cgd2l0aCBjb25zb2xlLmxvZy5cbiAqIEBwYXJhbSBtZXNzYWdlIGluZm8gbWVzc2FnZVxuICovXG5mdW5jdGlvbiBpbmZvKG1lc3NhZ2UpIHtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShtZXNzYWdlICsgb3MuRU9MKTtcbn1cbmV4cG9ydHMuaW5mbyA9IGluZm87XG4vKipcbiAqIEJlZ2luIGFuIG91dHB1dCBncm91cC5cbiAqXG4gKiBPdXRwdXQgdW50aWwgdGhlIG5leHQgYGdyb3VwRW5kYCB3aWxsIGJlIGZvbGRhYmxlIGluIHRoaXMgZ3JvdXBcbiAqXG4gKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgb3V0cHV0IGdyb3VwXG4gKi9cbmZ1bmN0aW9uIHN0YXJ0R3JvdXAobmFtZSkge1xuICAgICgwLCBjb21tYW5kXzEuaXNzdWUpKCdncm91cCcsIG5hbWUpO1xufVxuZXhwb3J0cy5zdGFydEdyb3VwID0gc3RhcnRHcm91cDtcbi8qKlxuICogRW5kIGFuIG91dHB1dCBncm91cC5cbiAqL1xuZnVuY3Rpb24gZW5kR3JvdXAoKSB7XG4gICAgKDAsIGNvbW1hbmRfMS5pc3N1ZSkoJ2VuZGdyb3VwJyk7XG59XG5leHBvcnRzLmVuZEdyb3VwID0gZW5kR3JvdXA7XG4vKipcbiAqIFdyYXAgYW4gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIGNhbGwgaW4gYSBncm91cC5cbiAqXG4gKiBSZXR1cm5zIHRoZSBzYW1lIHR5cGUgYXMgdGhlIGZ1bmN0aW9uIGl0c2VsZi5cbiAqXG4gKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgZ3JvdXBcbiAqIEBwYXJhbSBmbiBUaGUgZnVuY3Rpb24gdG8gd3JhcCBpbiB0aGUgZ3JvdXBcbiAqL1xuZnVuY3Rpb24gZ3JvdXAobmFtZSwgZm4pIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBzdGFydEdyb3VwKG5hbWUpO1xuICAgICAgICBsZXQgcmVzdWx0O1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmVzdWx0ID0geWllbGQgZm4oKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIGVuZEdyb3VwKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZ3JvdXAgPSBncm91cDtcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFdyYXBwZXIgYWN0aW9uIHN0YXRlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vKipcbiAqIFNhdmVzIHN0YXRlIGZvciBjdXJyZW50IGFjdGlvbiwgdGhlIHN0YXRlIGNhbiBvbmx5IGJlIHJldHJpZXZlZCBieSB0aGlzIGFjdGlvbidzIHBvc3Qgam9iIGV4ZWN1dGlvbi5cbiAqXG4gKiBAcGFyYW0gICAgIG5hbWUgICAgIG5hbWUgb2YgdGhlIHN0YXRlIHRvIHN0b3JlXG4gKiBAcGFyYW0gICAgIHZhbHVlICAgIHZhbHVlIHRvIHN0b3JlLiBOb24tc3RyaW5nIHZhbHVlcyB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIHN0cmluZyB2aWEgSlNPTi5zdHJpbmdpZnlcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmZ1bmN0aW9uIHNhdmVTdGF0ZShuYW1lLCB2YWx1ZSkge1xuICAgIGNvbnN0IGZpbGVQYXRoID0gcHJvY2Vzcy5lbnZbJ0dJVEhVQl9TVEFURSddIHx8ICcnO1xuICAgIGlmIChmaWxlUGF0aCkge1xuICAgICAgICByZXR1cm4gKDAsIGZpbGVfY29tbWFuZF8xLmlzc3VlRmlsZUNvbW1hbmQpKCdTVEFURScsICgwLCBmaWxlX2NvbW1hbmRfMS5wcmVwYXJlS2V5VmFsdWVNZXNzYWdlKShuYW1lLCB2YWx1ZSkpO1xuICAgIH1cbiAgICAoMCwgY29tbWFuZF8xLmlzc3VlQ29tbWFuZCkoJ3NhdmUtc3RhdGUnLCB7IG5hbWUgfSwgKDAsIHV0aWxzXzEudG9Db21tYW5kVmFsdWUpKHZhbHVlKSk7XG59XG5leHBvcnRzLnNhdmVTdGF0ZSA9IHNhdmVTdGF0ZTtcbi8qKlxuICogR2V0cyB0aGUgdmFsdWUgb2YgYW4gc3RhdGUgc2V0IGJ5IHRoaXMgYWN0aW9uJ3MgbWFpbiBleGVjdXRpb24uXG4gKlxuICogQHBhcmFtICAgICBuYW1lICAgICBuYW1lIG9mIHRoZSBzdGF0ZSB0byBnZXRcbiAqIEByZXR1cm5zICAgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGdldFN0YXRlKG5hbWUpIHtcbiAgICByZXR1cm4gcHJvY2Vzcy5lbnZbYFNUQVRFXyR7bmFtZX1gXSB8fCAnJztcbn1cbmV4cG9ydHMuZ2V0U3RhdGUgPSBnZXRTdGF0ZTtcbmZ1bmN0aW9uIGdldElEVG9rZW4oYXVkKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgcmV0dXJuIHlpZWxkIG9pZGNfdXRpbHNfMS5PaWRjQ2xpZW50LmdldElEVG9rZW4oYXVkKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZ2V0SURUb2tlbiA9IGdldElEVG9rZW47XG4vKipcbiAqIFN1bW1hcnkgZXhwb3J0c1xuICovXG52YXIgc3VtbWFyeV8xID0gcmVxdWlyZShcIi4vc3VtbWFyeVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN1bW1hcnlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN1bW1hcnlfMS5zdW1tYXJ5OyB9IH0pO1xuLyoqXG4gKiBAZGVwcmVjYXRlZCB1c2UgY29yZS5zdW1tYXJ5XG4gKi9cbnZhciBzdW1tYXJ5XzIgPSByZXF1aXJlKFwiLi9zdW1tYXJ5XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibWFya2Rvd25TdW1tYXJ5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzdW1tYXJ5XzIubWFya2Rvd25TdW1tYXJ5OyB9IH0pO1xuLyoqXG4gKiBQYXRoIGV4cG9ydHNcbiAqL1xudmFyIHBhdGhfdXRpbHNfMSA9IHJlcXVpcmUoXCIuL3BhdGgtdXRpbHNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0b1Bvc2l4UGF0aFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcGF0aF91dGlsc18xLnRvUG9zaXhQYXRoOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidG9XaW4zMlBhdGhcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBhdGhfdXRpbHNfMS50b1dpbjMyUGF0aDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRvUGxhdGZvcm1QYXRoXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwYXRoX3V0aWxzXzEudG9QbGF0Zm9ybVBhdGg7IH0gfSk7XG4vKipcbiAqIFBsYXRmb3JtIHV0aWxpdGllcyBleHBvcnRzXG4gKi9cbmV4cG9ydHMucGxhdGZvcm0gPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIi4vcGxhdGZvcm1cIikpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29yZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Db250ZXh0ID0gdm9pZCAwO1xuY29uc3QgZnNfMSA9IHJlcXVpcmUoXCJmc1wiKTtcbmNvbnN0IG9zXzEgPSByZXF1aXJlKFwib3NcIik7XG5jbGFzcyBDb250ZXh0IHtcbiAgICAvKipcbiAgICAgKiBIeWRyYXRlIHRoZSBjb250ZXh0IGZyb20gdGhlIGVudmlyb25tZW50XG4gICAgICovXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jO1xuICAgICAgICB0aGlzLnBheWxvYWQgPSB7fTtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52LkdJVEhVQl9FVkVOVF9QQVRIKSB7XG4gICAgICAgICAgICBpZiAoKDAsIGZzXzEuZXhpc3RzU3luYykocHJvY2Vzcy5lbnYuR0lUSFVCX0VWRU5UX1BBVEgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYXlsb2FkID0gSlNPTi5wYXJzZSgoMCwgZnNfMS5yZWFkRmlsZVN5bmMpKHByb2Nlc3MuZW52LkdJVEhVQl9FVkVOVF9QQVRILCB7IGVuY29kaW5nOiAndXRmOCcgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IHByb2Nlc3MuZW52LkdJVEhVQl9FVkVOVF9QQVRIO1xuICAgICAgICAgICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGBHSVRIVUJfRVZFTlRfUEFUSCAke3BhdGh9IGRvZXMgbm90IGV4aXN0JHtvc18xLkVPTH1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmV2ZW50TmFtZSA9IHByb2Nlc3MuZW52LkdJVEhVQl9FVkVOVF9OQU1FO1xuICAgICAgICB0aGlzLnNoYSA9IHByb2Nlc3MuZW52LkdJVEhVQl9TSEE7XG4gICAgICAgIHRoaXMucmVmID0gcHJvY2Vzcy5lbnYuR0lUSFVCX1JFRjtcbiAgICAgICAgdGhpcy53b3JrZmxvdyA9IHByb2Nlc3MuZW52LkdJVEhVQl9XT1JLRkxPVztcbiAgICAgICAgdGhpcy5hY3Rpb24gPSBwcm9jZXNzLmVudi5HSVRIVUJfQUNUSU9OO1xuICAgICAgICB0aGlzLmFjdG9yID0gcHJvY2Vzcy5lbnYuR0lUSFVCX0FDVE9SO1xuICAgICAgICB0aGlzLmpvYiA9IHByb2Nlc3MuZW52LkdJVEhVQl9KT0I7XG4gICAgICAgIHRoaXMucnVuTnVtYmVyID0gcGFyc2VJbnQocHJvY2Vzcy5lbnYuR0lUSFVCX1JVTl9OVU1CRVIsIDEwKTtcbiAgICAgICAgdGhpcy5ydW5JZCA9IHBhcnNlSW50KHByb2Nlc3MuZW52LkdJVEhVQl9SVU5fSUQsIDEwKTtcbiAgICAgICAgdGhpcy5hcGlVcmwgPSAoX2EgPSBwcm9jZXNzLmVudi5HSVRIVUJfQVBJX1VSTCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogYGh0dHBzOi8vYXBpLmdpdGh1Yi5jb21gO1xuICAgICAgICB0aGlzLnNlcnZlclVybCA9IChfYiA9IHByb2Nlc3MuZW52LkdJVEhVQl9TRVJWRVJfVVJMKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBgaHR0cHM6Ly9naXRodWIuY29tYDtcbiAgICAgICAgdGhpcy5ncmFwaHFsVXJsID1cbiAgICAgICAgICAgIChfYyA9IHByb2Nlc3MuZW52LkdJVEhVQl9HUkFQSFFMX1VSTCkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogYGh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vZ3JhcGhxbGA7XG4gICAgfVxuICAgIGdldCBpc3N1ZSgpIHtcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IHRoaXMucGF5bG9hZDtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5yZXBvKSwgeyBudW1iZXI6IChwYXlsb2FkLmlzc3VlIHx8IHBheWxvYWQucHVsbF9yZXF1ZXN0IHx8IHBheWxvYWQpLm51bWJlciB9KTtcbiAgICB9XG4gICAgZ2V0IHJlcG8oKSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5HSVRIVUJfUkVQT1NJVE9SWSkge1xuICAgICAgICAgICAgY29uc3QgW293bmVyLCByZXBvXSA9IHByb2Nlc3MuZW52LkdJVEhVQl9SRVBPU0lUT1JZLnNwbGl0KCcvJyk7XG4gICAgICAgICAgICByZXR1cm4geyBvd25lciwgcmVwbyB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnBheWxvYWQucmVwb3NpdG9yeSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBvd25lcjogdGhpcy5wYXlsb2FkLnJlcG9zaXRvcnkub3duZXIubG9naW4sXG4gICAgICAgICAgICAgICAgcmVwbzogdGhpcy5wYXlsb2FkLnJlcG9zaXRvcnkubmFtZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJjb250ZXh0LnJlcG8gcmVxdWlyZXMgYSBHSVRIVUJfUkVQT1NJVE9SWSBlbnZpcm9ubWVudCB2YXJpYWJsZSBsaWtlICdvd25lci9yZXBvJ1wiKTtcbiAgICB9XG59XG5leHBvcnRzLkNvbnRleHQgPSBDb250ZXh0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29udGV4dC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0QXBpQmFzZVVybCA9IGV4cG9ydHMuZ2V0UHJveHlGZXRjaCA9IGV4cG9ydHMuZ2V0UHJveHlBZ2VudERpc3BhdGNoZXIgPSBleHBvcnRzLmdldFByb3h5QWdlbnQgPSBleHBvcnRzLmdldEF1dGhTdHJpbmcgPSB2b2lkIDA7XG5jb25zdCBodHRwQ2xpZW50ID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJAYWN0aW9ucy9odHRwLWNsaWVudFwiKSk7XG5jb25zdCB1bmRpY2lfMSA9IHJlcXVpcmUoXCJ1bmRpY2lcIik7XG5mdW5jdGlvbiBnZXRBdXRoU3RyaW5nKHRva2VuLCBvcHRpb25zKSB7XG4gICAgaWYgKCF0b2tlbiAmJiAhb3B0aW9ucy5hdXRoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUGFyYW1ldGVyIHRva2VuIG9yIG9wdHMuYXV0aCBpcyByZXF1aXJlZCcpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0b2tlbiAmJiBvcHRpb25zLmF1dGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJhbWV0ZXJzIHRva2VuIGFuZCBvcHRzLmF1dGggbWF5IG5vdCBib3RoIGJlIHNwZWNpZmllZCcpO1xuICAgIH1cbiAgICByZXR1cm4gdHlwZW9mIG9wdGlvbnMuYXV0aCA9PT0gJ3N0cmluZycgPyBvcHRpb25zLmF1dGggOiBgdG9rZW4gJHt0b2tlbn1gO1xufVxuZXhwb3J0cy5nZXRBdXRoU3RyaW5nID0gZ2V0QXV0aFN0cmluZztcbmZ1bmN0aW9uIGdldFByb3h5QWdlbnQoZGVzdGluYXRpb25VcmwpIHtcbiAgICBjb25zdCBoYyA9IG5ldyBodHRwQ2xpZW50Lkh0dHBDbGllbnQoKTtcbiAgICByZXR1cm4gaGMuZ2V0QWdlbnQoZGVzdGluYXRpb25VcmwpO1xufVxuZXhwb3J0cy5nZXRQcm94eUFnZW50ID0gZ2V0UHJveHlBZ2VudDtcbmZ1bmN0aW9uIGdldFByb3h5QWdlbnREaXNwYXRjaGVyKGRlc3RpbmF0aW9uVXJsKSB7XG4gICAgY29uc3QgaGMgPSBuZXcgaHR0cENsaWVudC5IdHRwQ2xpZW50KCk7XG4gICAgcmV0dXJuIGhjLmdldEFnZW50RGlzcGF0Y2hlcihkZXN0aW5hdGlvblVybCk7XG59XG5leHBvcnRzLmdldFByb3h5QWdlbnREaXNwYXRjaGVyID0gZ2V0UHJveHlBZ2VudERpc3BhdGNoZXI7XG5mdW5jdGlvbiBnZXRQcm94eUZldGNoKGRlc3RpbmF0aW9uVXJsKSB7XG4gICAgY29uc3QgaHR0cERpc3BhdGNoZXIgPSBnZXRQcm94eUFnZW50RGlzcGF0Y2hlcihkZXN0aW5hdGlvblVybCk7XG4gICAgY29uc3QgcHJveHlGZXRjaCA9ICh1cmwsIG9wdHMpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgcmV0dXJuICgwLCB1bmRpY2lfMS5mZXRjaCkodXJsLCBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdHMpLCB7IGRpc3BhdGNoZXI6IGh0dHBEaXNwYXRjaGVyIH0pKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcHJveHlGZXRjaDtcbn1cbmV4cG9ydHMuZ2V0UHJveHlGZXRjaCA9IGdldFByb3h5RmV0Y2g7XG5mdW5jdGlvbiBnZXRBcGlCYXNlVXJsKCkge1xuICAgIHJldHVybiBwcm9jZXNzLmVudlsnR0lUSFVCX0FQSV9VUkwnXSB8fCAnaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbSc7XG59XG5leHBvcnRzLmdldEFwaUJhc2VVcmwgPSBnZXRBcGlCYXNlVXJsO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbHMuanMubWFwIiwKICAgICIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmZ1bmN0aW9uIGdldFVzZXJBZ2VudCgpIHtcbiAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgPT09IFwib2JqZWN0XCIgJiYgXCJ1c2VyQWdlbnRcIiBpbiBuYXZpZ2F0b3IpIHtcbiAgICByZXR1cm4gbmF2aWdhdG9yLnVzZXJBZ2VudDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgcHJvY2VzcyA9PT0gXCJvYmplY3RcIiAmJiBwcm9jZXNzLnZlcnNpb24gIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBgTm9kZS5qcy8ke3Byb2Nlc3MudmVyc2lvbi5zdWJzdHIoMSl9ICgke3Byb2Nlc3MucGxhdGZvcm19OyAke3Byb2Nlc3MuYXJjaH0pYDtcbiAgfVxuXG4gIHJldHVybiBcIjxlbnZpcm9ubWVudCB1bmRldGVjdGFibGU+XCI7XG59XG5cbmV4cG9ydHMuZ2V0VXNlckFnZW50ID0gZ2V0VXNlckFnZW50O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXG4iLAogICAgIm1vZHVsZS5leHBvcnRzID0gcmVnaXN0ZXI7XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyKHN0YXRlLCBuYW1lLCBtZXRob2QsIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiBtZXRob2QgIT09IFwiZnVuY3Rpb25cIikge1xuICAgIHRocm93IG5ldyBFcnJvcihcIm1ldGhvZCBmb3IgYmVmb3JlIGhvb2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICB9XG5cbiAgaWYgKCFvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkobmFtZSkpIHtcbiAgICByZXR1cm4gbmFtZS5yZXZlcnNlKCkucmVkdWNlKGZ1bmN0aW9uIChjYWxsYmFjaywgbmFtZSkge1xuICAgICAgcmV0dXJuIHJlZ2lzdGVyLmJpbmQobnVsbCwgc3RhdGUsIG5hbWUsIGNhbGxiYWNrLCBvcHRpb25zKTtcbiAgICB9LCBtZXRob2QpKCk7XG4gIH1cblxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFzdGF0ZS5yZWdpc3RyeVtuYW1lXSkge1xuICAgICAgcmV0dXJuIG1ldGhvZChvcHRpb25zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGUucmVnaXN0cnlbbmFtZV0ucmVkdWNlKGZ1bmN0aW9uIChtZXRob2QsIHJlZ2lzdGVyZWQpIHtcbiAgICAgIHJldHVybiByZWdpc3RlcmVkLmhvb2suYmluZChudWxsLCBtZXRob2QsIG9wdGlvbnMpO1xuICAgIH0sIG1ldGhvZCkoKTtcbiAgfSk7XG59XG4iLAogICAgIm1vZHVsZS5leHBvcnRzID0gYWRkSG9vaztcblxuZnVuY3Rpb24gYWRkSG9vayhzdGF0ZSwga2luZCwgbmFtZSwgaG9vaykge1xuICB2YXIgb3JpZyA9IGhvb2s7XG4gIGlmICghc3RhdGUucmVnaXN0cnlbbmFtZV0pIHtcbiAgICBzdGF0ZS5yZWdpc3RyeVtuYW1lXSA9IFtdO1xuICB9XG5cbiAgaWYgKGtpbmQgPT09IFwiYmVmb3JlXCIpIHtcbiAgICBob29rID0gZnVuY3Rpb24gKG1ldGhvZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgICAgIC50aGVuKG9yaWcuYmluZChudWxsLCBvcHRpb25zKSlcbiAgICAgICAgLnRoZW4obWV0aG9kLmJpbmQobnVsbCwgb3B0aW9ucykpO1xuICAgIH07XG4gIH1cblxuICBpZiAoa2luZCA9PT0gXCJhZnRlclwiKSB7XG4gICAgaG9vayA9IGZ1bmN0aW9uIChtZXRob2QsIG9wdGlvbnMpIHtcbiAgICAgIHZhciByZXN1bHQ7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICAgICAgLnRoZW4obWV0aG9kLmJpbmQobnVsbCwgb3B0aW9ucykpXG4gICAgICAgIC50aGVuKGZ1bmN0aW9uIChyZXN1bHRfKSB7XG4gICAgICAgICAgcmVzdWx0ID0gcmVzdWx0XztcbiAgICAgICAgICByZXR1cm4gb3JpZyhyZXN1bHQsIG9wdGlvbnMpO1xuICAgICAgICB9KVxuICAgICAgICAudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgfVxuXG4gIGlmIChraW5kID09PSBcImVycm9yXCIpIHtcbiAgICBob29rID0gZnVuY3Rpb24gKG1ldGhvZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgICAgIC50aGVuKG1ldGhvZC5iaW5kKG51bGwsIG9wdGlvbnMpKVxuICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIG9yaWcoZXJyb3IsIG9wdGlvbnMpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGUucmVnaXN0cnlbbmFtZV0ucHVzaCh7XG4gICAgaG9vazogaG9vayxcbiAgICBvcmlnOiBvcmlnLFxuICB9KTtcbn1cbiIsCiAgICAibW9kdWxlLmV4cG9ydHMgPSByZW1vdmVIb29rO1xuXG5mdW5jdGlvbiByZW1vdmVIb29rKHN0YXRlLCBuYW1lLCBtZXRob2QpIHtcbiAgaWYgKCFzdGF0ZS5yZWdpc3RyeVtuYW1lXSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBpbmRleCA9IHN0YXRlLnJlZ2lzdHJ5W25hbWVdXG4gICAgLm1hcChmdW5jdGlvbiAocmVnaXN0ZXJlZCkge1xuICAgICAgcmV0dXJuIHJlZ2lzdGVyZWQub3JpZztcbiAgICB9KVxuICAgIC5pbmRleE9mKG1ldGhvZCk7XG5cbiAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRlLnJlZ2lzdHJ5W25hbWVdLnNwbGljZShpbmRleCwgMSk7XG59XG4iLAogICAgInZhciByZWdpc3RlciA9IHJlcXVpcmUoXCIuL2xpYi9yZWdpc3RlclwiKTtcbnZhciBhZGRIb29rID0gcmVxdWlyZShcIi4vbGliL2FkZFwiKTtcbnZhciByZW1vdmVIb29rID0gcmVxdWlyZShcIi4vbGliL3JlbW92ZVwiKTtcblxuLy8gYmluZCB3aXRoIGFycmF5IG9mIGFyZ3VtZW50czogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzIxNzkyOTEzXG52YXIgYmluZCA9IEZ1bmN0aW9uLmJpbmQ7XG52YXIgYmluZGFibGUgPSBiaW5kLmJpbmQoYmluZCk7XG5cbmZ1bmN0aW9uIGJpbmRBcGkoaG9vaywgc3RhdGUsIG5hbWUpIHtcbiAgdmFyIHJlbW92ZUhvb2tSZWYgPSBiaW5kYWJsZShyZW1vdmVIb29rLCBudWxsKS5hcHBseShcbiAgICBudWxsLFxuICAgIG5hbWUgPyBbc3RhdGUsIG5hbWVdIDogW3N0YXRlXVxuICApO1xuICBob29rLmFwaSA9IHsgcmVtb3ZlOiByZW1vdmVIb29rUmVmIH07XG4gIGhvb2sucmVtb3ZlID0gcmVtb3ZlSG9va1JlZjtcbiAgW1wiYmVmb3JlXCIsIFwiZXJyb3JcIiwgXCJhZnRlclwiLCBcIndyYXBcIl0uZm9yRWFjaChmdW5jdGlvbiAoa2luZCkge1xuICAgIHZhciBhcmdzID0gbmFtZSA/IFtzdGF0ZSwga2luZCwgbmFtZV0gOiBbc3RhdGUsIGtpbmRdO1xuICAgIGhvb2tba2luZF0gPSBob29rLmFwaVtraW5kXSA9IGJpbmRhYmxlKGFkZEhvb2ssIG51bGwpLmFwcGx5KG51bGwsIGFyZ3MpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gSG9va1Npbmd1bGFyKCkge1xuICB2YXIgc2luZ3VsYXJIb29rTmFtZSA9IFwiaFwiO1xuICB2YXIgc2luZ3VsYXJIb29rU3RhdGUgPSB7XG4gICAgcmVnaXN0cnk6IHt9LFxuICB9O1xuICB2YXIgc2luZ3VsYXJIb29rID0gcmVnaXN0ZXIuYmluZChudWxsLCBzaW5ndWxhckhvb2tTdGF0ZSwgc2luZ3VsYXJIb29rTmFtZSk7XG4gIGJpbmRBcGkoc2luZ3VsYXJIb29rLCBzaW5ndWxhckhvb2tTdGF0ZSwgc2luZ3VsYXJIb29rTmFtZSk7XG4gIHJldHVybiBzaW5ndWxhckhvb2s7XG59XG5cbmZ1bmN0aW9uIEhvb2tDb2xsZWN0aW9uKCkge1xuICB2YXIgc3RhdGUgPSB7XG4gICAgcmVnaXN0cnk6IHt9LFxuICB9O1xuXG4gIHZhciBob29rID0gcmVnaXN0ZXIuYmluZChudWxsLCBzdGF0ZSk7XG4gIGJpbmRBcGkoaG9vaywgc3RhdGUpO1xuXG4gIHJldHVybiBob29rO1xufVxuXG52YXIgY29sbGVjdGlvbkhvb2tEZXByZWNhdGlvbk1lc3NhZ2VEaXNwbGF5ZWQgPSBmYWxzZTtcbmZ1bmN0aW9uIEhvb2soKSB7XG4gIGlmICghY29sbGVjdGlvbkhvb2tEZXByZWNhdGlvbk1lc3NhZ2VEaXNwbGF5ZWQpIHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICAnW2JlZm9yZS1hZnRlci1ob29rXTogXCJIb29rKClcIiByZXB1cnBvc2luZyB3YXJuaW5nLCB1c2UgXCJIb29rLkNvbGxlY3Rpb24oKVwiLiBSZWFkIG1vcmU6IGh0dHBzOi8vZ2l0LmlvL3VwZ3JhZGUtYmVmb3JlLWFmdGVyLWhvb2stdG8tMS40J1xuICAgICk7XG4gICAgY29sbGVjdGlvbkhvb2tEZXByZWNhdGlvbk1lc3NhZ2VEaXNwbGF5ZWQgPSB0cnVlO1xuICB9XG4gIHJldHVybiBIb29rQ29sbGVjdGlvbigpO1xufVxuXG5Ib29rLlNpbmd1bGFyID0gSG9va1Npbmd1bGFyLmJpbmQoKTtcbkhvb2suQ29sbGVjdGlvbiA9IEhvb2tDb2xsZWN0aW9uLmJpbmQoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBIb29rO1xuLy8gZXhwb3NlIGNvbnN0cnVjdG9ycyBhcyBhIG5hbWVkIHByb3BlcnR5IGZvciBUeXBlU2NyaXB0XG5tb2R1bGUuZXhwb3J0cy5Ib29rID0gSG9vaztcbm1vZHVsZS5leHBvcnRzLlNpbmd1bGFyID0gSG9vay5TaW5ndWxhcjtcbm1vZHVsZS5leHBvcnRzLkNvbGxlY3Rpb24gPSBIb29rLkNvbGxlY3Rpb247XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BEZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBfX2dldE93blByb3BOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO1xudmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19leHBvcnQgPSAodGFyZ2V0LCBhbGwpID0+IHtcbiAgZm9yICh2YXIgbmFtZSBpbiBhbGwpXG4gICAgX19kZWZQcm9wKHRhcmdldCwgbmFtZSwgeyBnZXQ6IGFsbFtuYW1lXSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcbn07XG52YXIgX19jb3B5UHJvcHMgPSAodG8sIGZyb20sIGV4Y2VwdCwgZGVzYykgPT4ge1xuICBpZiAoZnJvbSAmJiB0eXBlb2YgZnJvbSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgZnJvbSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgZm9yIChsZXQga2V5IG9mIF9fZ2V0T3duUHJvcE5hbWVzKGZyb20pKVxuICAgICAgaWYgKCFfX2hhc093blByb3AuY2FsbCh0bywga2V5KSAmJiBrZXkgIT09IGV4Y2VwdClcbiAgICAgICAgX19kZWZQcm9wKHRvLCBrZXksIHsgZ2V0OiAoKSA9PiBmcm9tW2tleV0sIGVudW1lcmFibGU6ICEoZGVzYyA9IF9fZ2V0T3duUHJvcERlc2MoZnJvbSwga2V5KSkgfHwgZGVzYy5lbnVtZXJhYmxlIH0pO1xuICB9XG4gIHJldHVybiB0bztcbn07XG52YXIgX190b0NvbW1vbkpTID0gKG1vZCkgPT4gX19jb3B5UHJvcHMoX19kZWZQcm9wKHt9LCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KSwgbW9kKTtcblxuLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG52YXIgZGlzdF9zcmNfZXhwb3J0cyA9IHt9O1xuX19leHBvcnQoZGlzdF9zcmNfZXhwb3J0cywge1xuICBlbmRwb2ludDogKCkgPT4gZW5kcG9pbnRcbn0pO1xubW9kdWxlLmV4cG9ydHMgPSBfX3RvQ29tbW9uSlMoZGlzdF9zcmNfZXhwb3J0cyk7XG5cbi8vIHBrZy9kaXN0LXNyYy9kZWZhdWx0cy5qc1xudmFyIGltcG9ydF91bml2ZXJzYWxfdXNlcl9hZ2VudCA9IHJlcXVpcmUoXCJ1bml2ZXJzYWwtdXNlci1hZ2VudFwiKTtcblxuLy8gcGtnL2Rpc3Qtc3JjL3ZlcnNpb24uanNcbnZhciBWRVJTSU9OID0gXCI5LjAuNVwiO1xuXG4vLyBwa2cvZGlzdC1zcmMvZGVmYXVsdHMuanNcbnZhciB1c2VyQWdlbnQgPSBgb2N0b2tpdC1lbmRwb2ludC5qcy8ke1ZFUlNJT059ICR7KDAsIGltcG9ydF91bml2ZXJzYWxfdXNlcl9hZ2VudC5nZXRVc2VyQWdlbnQpKCl9YDtcbnZhciBERUZBVUxUUyA9IHtcbiAgbWV0aG9kOiBcIkdFVFwiLFxuICBiYXNlVXJsOiBcImh0dHBzOi8vYXBpLmdpdGh1Yi5jb21cIixcbiAgaGVhZGVyczoge1xuICAgIGFjY2VwdDogXCJhcHBsaWNhdGlvbi92bmQuZ2l0aHViLnYzK2pzb25cIixcbiAgICBcInVzZXItYWdlbnRcIjogdXNlckFnZW50XG4gIH0sXG4gIG1lZGlhVHlwZToge1xuICAgIGZvcm1hdDogXCJcIlxuICB9XG59O1xuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC9sb3dlcmNhc2Uta2V5cy5qc1xuZnVuY3Rpb24gbG93ZXJjYXNlS2V5cyhvYmplY3QpIHtcbiAgaWYgKCFvYmplY3QpIHtcbiAgICByZXR1cm4ge307XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCkucmVkdWNlKChuZXdPYmosIGtleSkgPT4ge1xuICAgIG5ld09ialtrZXkudG9Mb3dlckNhc2UoKV0gPSBvYmplY3Rba2V5XTtcbiAgICByZXR1cm4gbmV3T2JqO1xuICB9LCB7fSk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy91dGlsL2lzLXBsYWluLW9iamVjdC5qc1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IHZhbHVlID09PSBudWxsKVxuICAgIHJldHVybiBmYWxzZTtcbiAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgIT09IFwiW29iamVjdCBPYmplY3RdXCIpXG4gICAgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSk7XG4gIGlmIChwcm90byA9PT0gbnVsbClcbiAgICByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgQ3RvciA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwcm90bywgXCJjb25zdHJ1Y3RvclwiKSAmJiBwcm90by5jb25zdHJ1Y3RvcjtcbiAgcmV0dXJuIHR5cGVvZiBDdG9yID09PSBcImZ1bmN0aW9uXCIgJiYgQ3RvciBpbnN0YW5jZW9mIEN0b3IgJiYgRnVuY3Rpb24ucHJvdG90eXBlLmNhbGwoQ3RvcikgPT09IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsKHZhbHVlKTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3V0aWwvbWVyZ2UtZGVlcC5qc1xuZnVuY3Rpb24gbWVyZ2VEZWVwKGRlZmF1bHRzLCBvcHRpb25zKSB7XG4gIGNvbnN0IHJlc3VsdCA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRzKTtcbiAgT2JqZWN0LmtleXMob3B0aW9ucykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgaWYgKGlzUGxhaW5PYmplY3Qob3B0aW9uc1trZXldKSkge1xuICAgICAgaWYgKCEoa2V5IGluIGRlZmF1bHRzKSlcbiAgICAgICAgT2JqZWN0LmFzc2lnbihyZXN1bHQsIHsgW2tleV06IG9wdGlvbnNba2V5XSB9KTtcbiAgICAgIGVsc2VcbiAgICAgICAgcmVzdWx0W2tleV0gPSBtZXJnZURlZXAoZGVmYXVsdHNba2V5XSwgb3B0aW9uc1trZXldKTtcbiAgICB9IGVsc2Uge1xuICAgICAgT2JqZWN0LmFzc2lnbihyZXN1bHQsIHsgW2tleV06IG9wdGlvbnNba2V5XSB9KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC9yZW1vdmUtdW5kZWZpbmVkLXByb3BlcnRpZXMuanNcbmZ1bmN0aW9uIHJlbW92ZVVuZGVmaW5lZFByb3BlcnRpZXMob2JqKSB7XG4gIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xuICAgIGlmIChvYmpba2V5XSA9PT0gdm9pZCAwKSB7XG4gICAgICBkZWxldGUgb2JqW2tleV07XG4gICAgfVxuICB9XG4gIHJldHVybiBvYmo7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9tZXJnZS5qc1xuZnVuY3Rpb24gbWVyZ2UoZGVmYXVsdHMsIHJvdXRlLCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2Ygcm91dGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICBsZXQgW21ldGhvZCwgdXJsXSA9IHJvdXRlLnNwbGl0KFwiIFwiKTtcbiAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih1cmwgPyB7IG1ldGhvZCwgdXJsIH0gOiB7IHVybDogbWV0aG9kIH0sIG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCByb3V0ZSk7XG4gIH1cbiAgb3B0aW9ucy5oZWFkZXJzID0gbG93ZXJjYXNlS2V5cyhvcHRpb25zLmhlYWRlcnMpO1xuICByZW1vdmVVbmRlZmluZWRQcm9wZXJ0aWVzKG9wdGlvbnMpO1xuICByZW1vdmVVbmRlZmluZWRQcm9wZXJ0aWVzKG9wdGlvbnMuaGVhZGVycyk7XG4gIGNvbnN0IG1lcmdlZE9wdGlvbnMgPSBtZXJnZURlZXAoZGVmYXVsdHMgfHwge30sIG9wdGlvbnMpO1xuICBpZiAob3B0aW9ucy51cmwgPT09IFwiL2dyYXBocWxcIikge1xuICAgIGlmIChkZWZhdWx0cyAmJiBkZWZhdWx0cy5tZWRpYVR5cGUucHJldmlld3M/Lmxlbmd0aCkge1xuICAgICAgbWVyZ2VkT3B0aW9ucy5tZWRpYVR5cGUucHJldmlld3MgPSBkZWZhdWx0cy5tZWRpYVR5cGUucHJldmlld3MuZmlsdGVyKFxuICAgICAgICAocHJldmlldykgPT4gIW1lcmdlZE9wdGlvbnMubWVkaWFUeXBlLnByZXZpZXdzLmluY2x1ZGVzKHByZXZpZXcpXG4gICAgICApLmNvbmNhdChtZXJnZWRPcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cyk7XG4gICAgfVxuICAgIG1lcmdlZE9wdGlvbnMubWVkaWFUeXBlLnByZXZpZXdzID0gKG1lcmdlZE9wdGlvbnMubWVkaWFUeXBlLnByZXZpZXdzIHx8IFtdKS5tYXAoKHByZXZpZXcpID0+IHByZXZpZXcucmVwbGFjZSgvLXByZXZpZXcvLCBcIlwiKSk7XG4gIH1cbiAgcmV0dXJuIG1lcmdlZE9wdGlvbnM7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy91dGlsL2FkZC1xdWVyeS1wYXJhbWV0ZXJzLmpzXG5mdW5jdGlvbiBhZGRRdWVyeVBhcmFtZXRlcnModXJsLCBwYXJhbWV0ZXJzKSB7XG4gIGNvbnN0IHNlcGFyYXRvciA9IC9cXD8vLnRlc3QodXJsKSA/IFwiJlwiIDogXCI/XCI7XG4gIGNvbnN0IG5hbWVzID0gT2JqZWN0LmtleXMocGFyYW1ldGVycyk7XG4gIGlmIChuYW1lcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG4gIHJldHVybiB1cmwgKyBzZXBhcmF0b3IgKyBuYW1lcy5tYXAoKG5hbWUpID0+IHtcbiAgICBpZiAobmFtZSA9PT0gXCJxXCIpIHtcbiAgICAgIHJldHVybiBcInE9XCIgKyBwYXJhbWV0ZXJzLnEuc3BsaXQoXCIrXCIpLm1hcChlbmNvZGVVUklDb21wb25lbnQpLmpvaW4oXCIrXCIpO1xuICAgIH1cbiAgICByZXR1cm4gYCR7bmFtZX09JHtlbmNvZGVVUklDb21wb25lbnQocGFyYW1ldGVyc1tuYW1lXSl9YDtcbiAgfSkuam9pbihcIiZcIik7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy91dGlsL2V4dHJhY3QtdXJsLXZhcmlhYmxlLW5hbWVzLmpzXG52YXIgdXJsVmFyaWFibGVSZWdleCA9IC9cXHtbXn1dK1xcfS9nO1xuZnVuY3Rpb24gcmVtb3ZlTm9uQ2hhcnModmFyaWFibGVOYW1lKSB7XG4gIHJldHVybiB2YXJpYWJsZU5hbWUucmVwbGFjZSgvXlxcVyt8XFxXKyQvZywgXCJcIikuc3BsaXQoLywvKTtcbn1cbmZ1bmN0aW9uIGV4dHJhY3RVcmxWYXJpYWJsZU5hbWVzKHVybCkge1xuICBjb25zdCBtYXRjaGVzID0gdXJsLm1hdGNoKHVybFZhcmlhYmxlUmVnZXgpO1xuICBpZiAoIW1hdGNoZXMpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgcmV0dXJuIG1hdGNoZXMubWFwKHJlbW92ZU5vbkNoYXJzKS5yZWR1Y2UoKGEsIGIpID0+IGEuY29uY2F0KGIpLCBbXSk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy91dGlsL29taXQuanNcbmZ1bmN0aW9uIG9taXQob2JqZWN0LCBrZXlzVG9PbWl0KSB7XG4gIGNvbnN0IHJlc3VsdCA9IHsgX19wcm90b19fOiBudWxsIH07XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG9iamVjdCkpIHtcbiAgICBpZiAoa2V5c1RvT21pdC5pbmRleE9mKGtleSkgPT09IC0xKSB7XG4gICAgICByZXN1bHRba2V5XSA9IG9iamVjdFtrZXldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC91cmwtdGVtcGxhdGUuanNcbmZ1bmN0aW9uIGVuY29kZVJlc2VydmVkKHN0cikge1xuICByZXR1cm4gc3RyLnNwbGl0KC8oJVswLTlBLUZhLWZdezJ9KS9nKS5tYXAoZnVuY3Rpb24ocGFydCkge1xuICAgIGlmICghLyVbMC05QS1GYS1mXS8udGVzdChwYXJ0KSkge1xuICAgICAgcGFydCA9IGVuY29kZVVSSShwYXJ0KS5yZXBsYWNlKC8lNUIvZywgXCJbXCIpLnJlcGxhY2UoLyU1RC9nLCBcIl1cIik7XG4gICAgfVxuICAgIHJldHVybiBwYXJ0O1xuICB9KS5qb2luKFwiXCIpO1xufVxuZnVuY3Rpb24gZW5jb2RlVW5yZXNlcnZlZChzdHIpIHtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHIpLnJlcGxhY2UoL1shJygpKl0vZywgZnVuY3Rpb24oYykge1xuICAgIHJldHVybiBcIiVcIiArIGMuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWUsIGtleSkge1xuICB2YWx1ZSA9IG9wZXJhdG9yID09PSBcIitcIiB8fCBvcGVyYXRvciA9PT0gXCIjXCIgPyBlbmNvZGVSZXNlcnZlZCh2YWx1ZSkgOiBlbmNvZGVVbnJlc2VydmVkKHZhbHVlKTtcbiAgaWYgKGtleSkge1xuICAgIHJldHVybiBlbmNvZGVVbnJlc2VydmVkKGtleSkgKyBcIj1cIiArIHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuZnVuY3Rpb24gaXNEZWZpbmVkKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gdm9pZCAwICYmIHZhbHVlICE9PSBudWxsO1xufVxuZnVuY3Rpb24gaXNLZXlPcGVyYXRvcihvcGVyYXRvcikge1xuICByZXR1cm4gb3BlcmF0b3IgPT09IFwiO1wiIHx8IG9wZXJhdG9yID09PSBcIiZcIiB8fCBvcGVyYXRvciA9PT0gXCI/XCI7XG59XG5mdW5jdGlvbiBnZXRWYWx1ZXMoY29udGV4dCwgb3BlcmF0b3IsIGtleSwgbW9kaWZpZXIpIHtcbiAgdmFyIHZhbHVlID0gY29udGV4dFtrZXldLCByZXN1bHQgPSBbXTtcbiAgaWYgKGlzRGVmaW5lZCh2YWx1ZSkgJiYgdmFsdWUgIT09IFwiXCIpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICBpZiAobW9kaWZpZXIgJiYgbW9kaWZpZXIgIT09IFwiKlwiKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUuc3Vic3RyaW5nKDAsIHBhcnNlSW50KG1vZGlmaWVyLCAxMCkpO1xuICAgICAgfVxuICAgICAgcmVzdWx0LnB1c2goXG4gICAgICAgIGVuY29kZVZhbHVlKG9wZXJhdG9yLCB2YWx1ZSwgaXNLZXlPcGVyYXRvcihvcGVyYXRvcikgPyBrZXkgOiBcIlwiKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG1vZGlmaWVyID09PSBcIipcIikge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICB2YWx1ZS5maWx0ZXIoaXNEZWZpbmVkKS5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlMikge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goXG4gICAgICAgICAgICAgIGVuY29kZVZhbHVlKG9wZXJhdG9yLCB2YWx1ZTIsIGlzS2V5T3BlcmF0b3Iob3BlcmF0b3IpID8ga2V5IDogXCJcIilcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgT2JqZWN0LmtleXModmFsdWUpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgICAgICAgICAgaWYgKGlzRGVmaW5lZCh2YWx1ZVtrXSkpIHtcbiAgICAgICAgICAgICAgcmVzdWx0LnB1c2goZW5jb2RlVmFsdWUob3BlcmF0b3IsIHZhbHVlW2tdLCBrKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHRtcCA9IFtdO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICB2YWx1ZS5maWx0ZXIoaXNEZWZpbmVkKS5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlMikge1xuICAgICAgICAgICAgdG1wLnB1c2goZW5jb2RlVmFsdWUob3BlcmF0b3IsIHZhbHVlMikpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIE9iamVjdC5rZXlzKHZhbHVlKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHtcbiAgICAgICAgICAgIGlmIChpc0RlZmluZWQodmFsdWVba10pKSB7XG4gICAgICAgICAgICAgIHRtcC5wdXNoKGVuY29kZVVucmVzZXJ2ZWQoaykpO1xuICAgICAgICAgICAgICB0bXAucHVzaChlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWVba10udG9TdHJpbmcoKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0tleU9wZXJhdG9yKG9wZXJhdG9yKSkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKGVuY29kZVVucmVzZXJ2ZWQoa2V5KSArIFwiPVwiICsgdG1wLmpvaW4oXCIsXCIpKTtcbiAgICAgICAgfSBlbHNlIGlmICh0bXAubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2godG1wLmpvaW4oXCIsXCIpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAob3BlcmF0b3IgPT09IFwiO1wiKSB7XG4gICAgICBpZiAoaXNEZWZpbmVkKHZhbHVlKSkge1xuICAgICAgICByZXN1bHQucHVzaChlbmNvZGVVbnJlc2VydmVkKGtleSkpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFwiXCIgJiYgKG9wZXJhdG9yID09PSBcIiZcIiB8fCBvcGVyYXRvciA9PT0gXCI/XCIpKSB7XG4gICAgICByZXN1bHQucHVzaChlbmNvZGVVbnJlc2VydmVkKGtleSkgKyBcIj1cIik7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gXCJcIikge1xuICAgICAgcmVzdWx0LnB1c2goXCJcIik7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBwYXJzZVVybCh0ZW1wbGF0ZSkge1xuICByZXR1cm4ge1xuICAgIGV4cGFuZDogZXhwYW5kLmJpbmQobnVsbCwgdGVtcGxhdGUpXG4gIH07XG59XG5mdW5jdGlvbiBleHBhbmQodGVtcGxhdGUsIGNvbnRleHQpIHtcbiAgdmFyIG9wZXJhdG9ycyA9IFtcIitcIiwgXCIjXCIsIFwiLlwiLCBcIi9cIiwgXCI7XCIsIFwiP1wiLCBcIiZcIl07XG4gIHRlbXBsYXRlID0gdGVtcGxhdGUucmVwbGFjZShcbiAgICAvXFx7KFteXFx7XFx9XSspXFx9fChbXlxce1xcfV0rKS9nLFxuICAgIGZ1bmN0aW9uKF8sIGV4cHJlc3Npb24sIGxpdGVyYWwpIHtcbiAgICAgIGlmIChleHByZXNzaW9uKSB7XG4gICAgICAgIGxldCBvcGVyYXRvciA9IFwiXCI7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IFtdO1xuICAgICAgICBpZiAob3BlcmF0b3JzLmluZGV4T2YoZXhwcmVzc2lvbi5jaGFyQXQoMCkpICE9PSAtMSkge1xuICAgICAgICAgIG9wZXJhdG9yID0gZXhwcmVzc2lvbi5jaGFyQXQoMCk7XG4gICAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb24uc3Vic3RyKDEpO1xuICAgICAgICB9XG4gICAgICAgIGV4cHJlc3Npb24uc3BsaXQoLywvZykuZm9yRWFjaChmdW5jdGlvbih2YXJpYWJsZSkge1xuICAgICAgICAgIHZhciB0bXAgPSAvKFteOlxcKl0qKSg/OjooXFxkKyl8KFxcKikpPy8uZXhlYyh2YXJpYWJsZSk7XG4gICAgICAgICAgdmFsdWVzLnB1c2goZ2V0VmFsdWVzKGNvbnRleHQsIG9wZXJhdG9yLCB0bXBbMV0sIHRtcFsyXSB8fCB0bXBbM10pKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChvcGVyYXRvciAmJiBvcGVyYXRvciAhPT0gXCIrXCIpIHtcbiAgICAgICAgICB2YXIgc2VwYXJhdG9yID0gXCIsXCI7XG4gICAgICAgICAgaWYgKG9wZXJhdG9yID09PSBcIj9cIikge1xuICAgICAgICAgICAgc2VwYXJhdG9yID0gXCImXCI7XG4gICAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRvciAhPT0gXCIjXCIpIHtcbiAgICAgICAgICAgIHNlcGFyYXRvciA9IG9wZXJhdG9yO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gKHZhbHVlcy5sZW5ndGggIT09IDAgPyBvcGVyYXRvciA6IFwiXCIpICsgdmFsdWVzLmpvaW4oc2VwYXJhdG9yKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWVzLmpvaW4oXCIsXCIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZW5jb2RlUmVzZXJ2ZWQobGl0ZXJhbCk7XG4gICAgICB9XG4gICAgfVxuICApO1xuICBpZiAodGVtcGxhdGUgPT09IFwiL1wiKSB7XG4gICAgcmV0dXJuIHRlbXBsYXRlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB0ZW1wbGF0ZS5yZXBsYWNlKC9cXC8kLywgXCJcIik7XG4gIH1cbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3BhcnNlLmpzXG5mdW5jdGlvbiBwYXJzZShvcHRpb25zKSB7XG4gIGxldCBtZXRob2QgPSBvcHRpb25zLm1ldGhvZC50b1VwcGVyQ2FzZSgpO1xuICBsZXQgdXJsID0gKG9wdGlvbnMudXJsIHx8IFwiL1wiKS5yZXBsYWNlKC86KFthLXpdXFx3KykvZywgXCJ7JDF9XCIpO1xuICBsZXQgaGVhZGVycyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuaGVhZGVycyk7XG4gIGxldCBib2R5O1xuICBsZXQgcGFyYW1ldGVycyA9IG9taXQob3B0aW9ucywgW1xuICAgIFwibWV0aG9kXCIsXG4gICAgXCJiYXNlVXJsXCIsXG4gICAgXCJ1cmxcIixcbiAgICBcImhlYWRlcnNcIixcbiAgICBcInJlcXVlc3RcIixcbiAgICBcIm1lZGlhVHlwZVwiXG4gIF0pO1xuICBjb25zdCB1cmxWYXJpYWJsZU5hbWVzID0gZXh0cmFjdFVybFZhcmlhYmxlTmFtZXModXJsKTtcbiAgdXJsID0gcGFyc2VVcmwodXJsKS5leHBhbmQocGFyYW1ldGVycyk7XG4gIGlmICghL15odHRwLy50ZXN0KHVybCkpIHtcbiAgICB1cmwgPSBvcHRpb25zLmJhc2VVcmwgKyB1cmw7XG4gIH1cbiAgY29uc3Qgb21pdHRlZFBhcmFtZXRlcnMgPSBPYmplY3Qua2V5cyhvcHRpb25zKS5maWx0ZXIoKG9wdGlvbikgPT4gdXJsVmFyaWFibGVOYW1lcy5pbmNsdWRlcyhvcHRpb24pKS5jb25jYXQoXCJiYXNlVXJsXCIpO1xuICBjb25zdCByZW1haW5pbmdQYXJhbWV0ZXJzID0gb21pdChwYXJhbWV0ZXJzLCBvbWl0dGVkUGFyYW1ldGVycyk7XG4gIGNvbnN0IGlzQmluYXJ5UmVxdWVzdCA9IC9hcHBsaWNhdGlvblxcL29jdGV0LXN0cmVhbS9pLnRlc3QoaGVhZGVycy5hY2NlcHQpO1xuICBpZiAoIWlzQmluYXJ5UmVxdWVzdCkge1xuICAgIGlmIChvcHRpb25zLm1lZGlhVHlwZS5mb3JtYXQpIHtcbiAgICAgIGhlYWRlcnMuYWNjZXB0ID0gaGVhZGVycy5hY2NlcHQuc3BsaXQoLywvKS5tYXAoXG4gICAgICAgIChmb3JtYXQpID0+IGZvcm1hdC5yZXBsYWNlKFxuICAgICAgICAgIC9hcHBsaWNhdGlvblxcL3ZuZChcXC5cXHcrKShcXC52Myk/KFxcLlxcdyspPyhcXCtqc29uKT8kLyxcbiAgICAgICAgICBgYXBwbGljYXRpb24vdm5kJDEkMi4ke29wdGlvbnMubWVkaWFUeXBlLmZvcm1hdH1gXG4gICAgICAgIClcbiAgICAgICkuam9pbihcIixcIik7XG4gICAgfVxuICAgIGlmICh1cmwuZW5kc1dpdGgoXCIvZ3JhcGhxbFwiKSkge1xuICAgICAgaWYgKG9wdGlvbnMubWVkaWFUeXBlLnByZXZpZXdzPy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgcHJldmlld3NGcm9tQWNjZXB0SGVhZGVyID0gaGVhZGVycy5hY2NlcHQubWF0Y2goL1tcXHctXSsoPz0tcHJldmlldykvZykgfHwgW107XG4gICAgICAgIGhlYWRlcnMuYWNjZXB0ID0gcHJldmlld3NGcm9tQWNjZXB0SGVhZGVyLmNvbmNhdChvcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cykubWFwKChwcmV2aWV3KSA9PiB7XG4gICAgICAgICAgY29uc3QgZm9ybWF0ID0gb3B0aW9ucy5tZWRpYVR5cGUuZm9ybWF0ID8gYC4ke29wdGlvbnMubWVkaWFUeXBlLmZvcm1hdH1gIDogXCIranNvblwiO1xuICAgICAgICAgIHJldHVybiBgYXBwbGljYXRpb24vdm5kLmdpdGh1Yi4ke3ByZXZpZXd9LXByZXZpZXcke2Zvcm1hdH1gO1xuICAgICAgICB9KS5qb2luKFwiLFwiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKFtcIkdFVFwiLCBcIkhFQURcIl0uaW5jbHVkZXMobWV0aG9kKSkge1xuICAgIHVybCA9IGFkZFF1ZXJ5UGFyYW1ldGVycyh1cmwsIHJlbWFpbmluZ1BhcmFtZXRlcnMpO1xuICB9IGVsc2Uge1xuICAgIGlmIChcImRhdGFcIiBpbiByZW1haW5pbmdQYXJhbWV0ZXJzKSB7XG4gICAgICBib2R5ID0gcmVtYWluaW5nUGFyYW1ldGVycy5kYXRhO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoT2JqZWN0LmtleXMocmVtYWluaW5nUGFyYW1ldGVycykubGVuZ3RoKSB7XG4gICAgICAgIGJvZHkgPSByZW1haW5pbmdQYXJhbWV0ZXJzO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoIWhlYWRlcnNbXCJjb250ZW50LXR5cGVcIl0gJiYgdHlwZW9mIGJvZHkgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBoZWFkZXJzW1wiY29udGVudC10eXBlXCJdID0gXCJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04XCI7XG4gIH1cbiAgaWYgKFtcIlBBVENIXCIsIFwiUFVUXCJdLmluY2x1ZGVzKG1ldGhvZCkgJiYgdHlwZW9mIGJvZHkgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBib2R5ID0gXCJcIjtcbiAgfVxuICByZXR1cm4gT2JqZWN0LmFzc2lnbihcbiAgICB7IG1ldGhvZCwgdXJsLCBoZWFkZXJzIH0sXG4gICAgdHlwZW9mIGJvZHkgIT09IFwidW5kZWZpbmVkXCIgPyB7IGJvZHkgfSA6IG51bGwsXG4gICAgb3B0aW9ucy5yZXF1ZXN0ID8geyByZXF1ZXN0OiBvcHRpb25zLnJlcXVlc3QgfSA6IG51bGxcbiAgKTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2VuZHBvaW50LXdpdGgtZGVmYXVsdHMuanNcbmZ1bmN0aW9uIGVuZHBvaW50V2l0aERlZmF1bHRzKGRlZmF1bHRzLCByb3V0ZSwgb3B0aW9ucykge1xuICByZXR1cm4gcGFyc2UobWVyZ2UoZGVmYXVsdHMsIHJvdXRlLCBvcHRpb25zKSk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy93aXRoLWRlZmF1bHRzLmpzXG5mdW5jdGlvbiB3aXRoRGVmYXVsdHMob2xkRGVmYXVsdHMsIG5ld0RlZmF1bHRzKSB7XG4gIGNvbnN0IERFRkFVTFRTMiA9IG1lcmdlKG9sZERlZmF1bHRzLCBuZXdEZWZhdWx0cyk7XG4gIGNvbnN0IGVuZHBvaW50MiA9IGVuZHBvaW50V2l0aERlZmF1bHRzLmJpbmQobnVsbCwgREVGQVVMVFMyKTtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oZW5kcG9pbnQyLCB7XG4gICAgREVGQVVMVFM6IERFRkFVTFRTMixcbiAgICBkZWZhdWx0czogd2l0aERlZmF1bHRzLmJpbmQobnVsbCwgREVGQVVMVFMyKSxcbiAgICBtZXJnZTogbWVyZ2UuYmluZChudWxsLCBERUZBVUxUUzIpLFxuICAgIHBhcnNlXG4gIH0pO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbnZhciBlbmRwb2ludCA9IHdpdGhEZWZhdWx0cyhudWxsLCBERUZBVUxUUyk7XG4vLyBBbm5vdGF0ZSB0aGUgQ29tbW9uSlMgZXhwb3J0IG5hbWVzIGZvciBFU00gaW1wb3J0IGluIG5vZGU6XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgZW5kcG9pbnRcbn0pO1xuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmNsYXNzIERlcHJlY2F0aW9uIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7IC8vIE1haW50YWlucyBwcm9wZXIgc3RhY2sgdHJhY2UgKG9ubHkgYXZhaWxhYmxlIG9uIFY4KVxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblxuICAgIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gICAgfVxuXG4gICAgdGhpcy5uYW1lID0gJ0RlcHJlY2F0aW9uJztcbiAgfVxuXG59XG5cbmV4cG9ydHMuRGVwcmVjYXRpb24gPSBEZXByZWNhdGlvbjtcbiIsCiAgICAiLy8gUmV0dXJucyBhIHdyYXBwZXIgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgd3JhcHBlZCBjYWxsYmFja1xuLy8gVGhlIHdyYXBwZXIgZnVuY3Rpb24gc2hvdWxkIGRvIHNvbWUgc3R1ZmYsIGFuZCByZXR1cm4gYVxuLy8gcHJlc3VtYWJseSBkaWZmZXJlbnQgY2FsbGJhY2sgZnVuY3Rpb24uXG4vLyBUaGlzIG1ha2VzIHN1cmUgdGhhdCBvd24gcHJvcGVydGllcyBhcmUgcmV0YWluZWQsIHNvIHRoYXRcbi8vIGRlY29yYXRpb25zIGFuZCBzdWNoIGFyZSBub3QgbG9zdCBhbG9uZyB0aGUgd2F5LlxubW9kdWxlLmV4cG9ydHMgPSB3cmFwcHlcbmZ1bmN0aW9uIHdyYXBweSAoZm4sIGNiKSB7XG4gIGlmIChmbiAmJiBjYikgcmV0dXJuIHdyYXBweShmbikoY2IpXG5cbiAgaWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJylcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCduZWVkIHdyYXBwZXIgZnVuY3Rpb24nKVxuXG4gIE9iamVjdC5rZXlzKGZuKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgd3JhcHBlcltrXSA9IGZuW2tdXG4gIH0pXG5cbiAgcmV0dXJuIHdyYXBwZXJcblxuICBmdW5jdGlvbiB3cmFwcGVyKCkge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhcmdzW2ldID0gYXJndW1lbnRzW2ldXG4gICAgfVxuICAgIHZhciByZXQgPSBmbi5hcHBseSh0aGlzLCBhcmdzKVxuICAgIHZhciBjYiA9IGFyZ3NbYXJncy5sZW5ndGgtMV1cbiAgICBpZiAodHlwZW9mIHJldCA9PT0gJ2Z1bmN0aW9uJyAmJiByZXQgIT09IGNiKSB7XG4gICAgICBPYmplY3Qua2V5cyhjYikuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgICAgICByZXRba10gPSBjYltrXVxuICAgICAgfSlcbiAgICB9XG4gICAgcmV0dXJuIHJldFxuICB9XG59XG4iLAogICAgInZhciB3cmFwcHkgPSByZXF1aXJlKCd3cmFwcHknKVxubW9kdWxlLmV4cG9ydHMgPSB3cmFwcHkob25jZSlcbm1vZHVsZS5leHBvcnRzLnN0cmljdCA9IHdyYXBweShvbmNlU3RyaWN0KVxuXG5vbmNlLnByb3RvID0gb25jZShmdW5jdGlvbiAoKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGdW5jdGlvbi5wcm90b3R5cGUsICdvbmNlJywge1xuICAgIHZhbHVlOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gb25jZSh0aGlzKVxuICAgIH0sXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pXG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZ1bmN0aW9uLnByb3RvdHlwZSwgJ29uY2VTdHJpY3QnLCB7XG4gICAgdmFsdWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBvbmNlU3RyaWN0KHRoaXMpXG4gICAgfSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSlcbn0pXG5cbmZ1bmN0aW9uIG9uY2UgKGZuKSB7XG4gIHZhciBmID0gZnVuY3Rpb24gKCkge1xuICAgIGlmIChmLmNhbGxlZCkgcmV0dXJuIGYudmFsdWVcbiAgICBmLmNhbGxlZCA9IHRydWVcbiAgICByZXR1cm4gZi52YWx1ZSA9IGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgfVxuICBmLmNhbGxlZCA9IGZhbHNlXG4gIHJldHVybiBmXG59XG5cbmZ1bmN0aW9uIG9uY2VTdHJpY3QgKGZuKSB7XG4gIHZhciBmID0gZnVuY3Rpb24gKCkge1xuICAgIGlmIChmLmNhbGxlZClcbiAgICAgIHRocm93IG5ldyBFcnJvcihmLm9uY2VFcnJvcilcbiAgICBmLmNhbGxlZCA9IHRydWVcbiAgICByZXR1cm4gZi52YWx1ZSA9IGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgfVxuICB2YXIgbmFtZSA9IGZuLm5hbWUgfHwgJ0Z1bmN0aW9uIHdyYXBwZWQgd2l0aCBgb25jZWAnXG4gIGYub25jZUVycm9yID0gbmFtZSArIFwiIHNob3VsZG4ndCBiZSBjYWxsZWQgbW9yZSB0aGFuIG9uY2VcIlxuICBmLmNhbGxlZCA9IGZhbHNlXG4gIHJldHVybiBmXG59XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlID0gT2JqZWN0LmNyZWF0ZTtcbnZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wRGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgX19nZXRPd25Qcm9wTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcztcbnZhciBfX2dldFByb3RvT2YgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG52YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX2V4cG9ydCA9ICh0YXJnZXQsIGFsbCkgPT4ge1xuICBmb3IgKHZhciBuYW1lIGluIGFsbClcbiAgICBfX2RlZlByb3AodGFyZ2V0LCBuYW1lLCB7IGdldDogYWxsW25hbWVdLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xufTtcbnZhciBfX2NvcHlQcm9wcyA9ICh0bywgZnJvbSwgZXhjZXB0LCBkZXNjKSA9PiB7XG4gIGlmIChmcm9tICYmIHR5cGVvZiBmcm9tID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBmcm9tID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBmb3IgKGxldCBrZXkgb2YgX19nZXRPd25Qcm9wTmFtZXMoZnJvbSkpXG4gICAgICBpZiAoIV9faGFzT3duUHJvcC5jYWxsKHRvLCBrZXkpICYmIGtleSAhPT0gZXhjZXB0KVxuICAgICAgICBfX2RlZlByb3AodG8sIGtleSwgeyBnZXQ6ICgpID0+IGZyb21ba2V5XSwgZW51bWVyYWJsZTogIShkZXNjID0gX19nZXRPd25Qcm9wRGVzYyhmcm9tLCBrZXkpKSB8fCBkZXNjLmVudW1lcmFibGUgfSk7XG4gIH1cbiAgcmV0dXJuIHRvO1xufTtcbnZhciBfX3RvRVNNID0gKG1vZCwgaXNOb2RlTW9kZSwgdGFyZ2V0KSA9PiAodGFyZ2V0ID0gbW9kICE9IG51bGwgPyBfX2NyZWF0ZShfX2dldFByb3RvT2YobW9kKSkgOiB7fSwgX19jb3B5UHJvcHMoXG4gIC8vIElmIHRoZSBpbXBvcnRlciBpcyBpbiBub2RlIGNvbXBhdGliaWxpdHkgbW9kZSBvciB0aGlzIGlzIG5vdCBhbiBFU01cbiAgLy8gZmlsZSB0aGF0IGhhcyBiZWVuIGNvbnZlcnRlZCB0byBhIENvbW1vbkpTIGZpbGUgdXNpbmcgYSBCYWJlbC1cbiAgLy8gY29tcGF0aWJsZSB0cmFuc2Zvcm0gKGkuZS4gXCJfX2VzTW9kdWxlXCIgaGFzIG5vdCBiZWVuIHNldCksIHRoZW4gc2V0XG4gIC8vIFwiZGVmYXVsdFwiIHRvIHRoZSBDb21tb25KUyBcIm1vZHVsZS5leHBvcnRzXCIgZm9yIG5vZGUgY29tcGF0aWJpbGl0eS5cbiAgaXNOb2RlTW9kZSB8fCAhbW9kIHx8ICFtb2QuX19lc01vZHVsZSA/IF9fZGVmUHJvcCh0YXJnZXQsIFwiZGVmYXVsdFwiLCB7IHZhbHVlOiBtb2QsIGVudW1lcmFibGU6IHRydWUgfSkgOiB0YXJnZXQsXG4gIG1vZFxuKSk7XG52YXIgX190b0NvbW1vbkpTID0gKG1vZCkgPT4gX19jb3B5UHJvcHMoX19kZWZQcm9wKHt9LCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KSwgbW9kKTtcblxuLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG52YXIgZGlzdF9zcmNfZXhwb3J0cyA9IHt9O1xuX19leHBvcnQoZGlzdF9zcmNfZXhwb3J0cywge1xuICBSZXF1ZXN0RXJyb3I6ICgpID0+IFJlcXVlc3RFcnJvclxufSk7XG5tb2R1bGUuZXhwb3J0cyA9IF9fdG9Db21tb25KUyhkaXN0X3NyY19leHBvcnRzKTtcbnZhciBpbXBvcnRfZGVwcmVjYXRpb24gPSByZXF1aXJlKFwiZGVwcmVjYXRpb25cIik7XG52YXIgaW1wb3J0X29uY2UgPSBfX3RvRVNNKHJlcXVpcmUoXCJvbmNlXCIpKTtcbnZhciBsb2dPbmNlQ29kZSA9ICgwLCBpbXBvcnRfb25jZS5kZWZhdWx0KSgoZGVwcmVjYXRpb24pID0+IGNvbnNvbGUud2FybihkZXByZWNhdGlvbikpO1xudmFyIGxvZ09uY2VIZWFkZXJzID0gKDAsIGltcG9ydF9vbmNlLmRlZmF1bHQpKChkZXByZWNhdGlvbikgPT4gY29uc29sZS53YXJuKGRlcHJlY2F0aW9uKSk7XG52YXIgUmVxdWVzdEVycm9yID0gY2xhc3MgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2UsIHN0YXR1c0NvZGUsIG9wdGlvbnMpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuICAgIH1cbiAgICB0aGlzLm5hbWUgPSBcIkh0dHBFcnJvclwiO1xuICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzQ29kZTtcbiAgICBsZXQgaGVhZGVycztcbiAgICBpZiAoXCJoZWFkZXJzXCIgaW4gb3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucy5oZWFkZXJzICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBoZWFkZXJzID0gb3B0aW9ucy5oZWFkZXJzO1xuICAgIH1cbiAgICBpZiAoXCJyZXNwb25zZVwiIGluIG9wdGlvbnMpIHtcbiAgICAgIHRoaXMucmVzcG9uc2UgPSBvcHRpb25zLnJlc3BvbnNlO1xuICAgICAgaGVhZGVycyA9IG9wdGlvbnMucmVzcG9uc2UuaGVhZGVycztcbiAgICB9XG4gICAgY29uc3QgcmVxdWVzdENvcHkgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLnJlcXVlc3QpO1xuICAgIGlmIChvcHRpb25zLnJlcXVlc3QuaGVhZGVycy5hdXRob3JpemF0aW9uKSB7XG4gICAgICByZXF1ZXN0Q29weS5oZWFkZXJzID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5yZXF1ZXN0LmhlYWRlcnMsIHtcbiAgICAgICAgYXV0aG9yaXphdGlvbjogb3B0aW9ucy5yZXF1ZXN0LmhlYWRlcnMuYXV0aG9yaXphdGlvbi5yZXBsYWNlKFxuICAgICAgICAgIC8gLiokLyxcbiAgICAgICAgICBcIiBbUkVEQUNURURdXCJcbiAgICAgICAgKVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJlcXVlc3RDb3B5LnVybCA9IHJlcXVlc3RDb3B5LnVybC5yZXBsYWNlKC9cXGJjbGllbnRfc2VjcmV0PVxcdysvZywgXCJjbGllbnRfc2VjcmV0PVtSRURBQ1RFRF1cIikucmVwbGFjZSgvXFxiYWNjZXNzX3Rva2VuPVxcdysvZywgXCJhY2Nlc3NfdG9rZW49W1JFREFDVEVEXVwiKTtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0Q29weTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJjb2RlXCIsIHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgbG9nT25jZUNvZGUoXG4gICAgICAgICAgbmV3IGltcG9ydF9kZXByZWNhdGlvbi5EZXByZWNhdGlvbihcbiAgICAgICAgICAgIFwiW0BvY3Rva2l0L3JlcXVlc3QtZXJyb3JdIGBlcnJvci5jb2RlYCBpcyBkZXByZWNhdGVkLCB1c2UgYGVycm9yLnN0YXR1c2AuXCJcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBzdGF0dXNDb2RlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImhlYWRlcnNcIiwge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBsb2dPbmNlSGVhZGVycyhcbiAgICAgICAgICBuZXcgaW1wb3J0X2RlcHJlY2F0aW9uLkRlcHJlY2F0aW9uKFxuICAgICAgICAgICAgXCJbQG9jdG9raXQvcmVxdWVzdC1lcnJvcl0gYGVycm9yLmhlYWRlcnNgIGlzIGRlcHJlY2F0ZWQsIHVzZSBgZXJyb3IucmVzcG9uc2UuaGVhZGVyc2AuXCJcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBoZWFkZXJzIHx8IHt9O1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59O1xuLy8gQW5ub3RhdGUgdGhlIENvbW1vbkpTIGV4cG9ydCBuYW1lcyBmb3IgRVNNIGltcG9ydCBpbiBub2RlOlxuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gIFJlcXVlc3RFcnJvclxufSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BEZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBfX2dldE93blByb3BOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO1xudmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19leHBvcnQgPSAodGFyZ2V0LCBhbGwpID0+IHtcbiAgZm9yICh2YXIgbmFtZSBpbiBhbGwpXG4gICAgX19kZWZQcm9wKHRhcmdldCwgbmFtZSwgeyBnZXQ6IGFsbFtuYW1lXSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcbn07XG52YXIgX19jb3B5UHJvcHMgPSAodG8sIGZyb20sIGV4Y2VwdCwgZGVzYykgPT4ge1xuICBpZiAoZnJvbSAmJiB0eXBlb2YgZnJvbSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgZnJvbSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgZm9yIChsZXQga2V5IG9mIF9fZ2V0T3duUHJvcE5hbWVzKGZyb20pKVxuICAgICAgaWYgKCFfX2hhc093blByb3AuY2FsbCh0bywga2V5KSAmJiBrZXkgIT09IGV4Y2VwdClcbiAgICAgICAgX19kZWZQcm9wKHRvLCBrZXksIHsgZ2V0OiAoKSA9PiBmcm9tW2tleV0sIGVudW1lcmFibGU6ICEoZGVzYyA9IF9fZ2V0T3duUHJvcERlc2MoZnJvbSwga2V5KSkgfHwgZGVzYy5lbnVtZXJhYmxlIH0pO1xuICB9XG4gIHJldHVybiB0bztcbn07XG52YXIgX190b0NvbW1vbkpTID0gKG1vZCkgPT4gX19jb3B5UHJvcHMoX19kZWZQcm9wKHt9LCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KSwgbW9kKTtcblxuLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG52YXIgZGlzdF9zcmNfZXhwb3J0cyA9IHt9O1xuX19leHBvcnQoZGlzdF9zcmNfZXhwb3J0cywge1xuICByZXF1ZXN0OiAoKSA9PiByZXF1ZXN0XG59KTtcbm1vZHVsZS5leHBvcnRzID0gX190b0NvbW1vbkpTKGRpc3Rfc3JjX2V4cG9ydHMpO1xudmFyIGltcG9ydF9lbmRwb2ludCA9IHJlcXVpcmUoXCJAb2N0b2tpdC9lbmRwb2ludFwiKTtcbnZhciBpbXBvcnRfdW5pdmVyc2FsX3VzZXJfYWdlbnQgPSByZXF1aXJlKFwidW5pdmVyc2FsLXVzZXItYWdlbnRcIik7XG5cbi8vIHBrZy9kaXN0LXNyYy92ZXJzaW9uLmpzXG52YXIgVkVSU0lPTiA9IFwiOC40LjBcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL2lzLXBsYWluLW9iamVjdC5qc1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IHZhbHVlID09PSBudWxsKVxuICAgIHJldHVybiBmYWxzZTtcbiAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgIT09IFwiW29iamVjdCBPYmplY3RdXCIpXG4gICAgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSk7XG4gIGlmIChwcm90byA9PT0gbnVsbClcbiAgICByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgQ3RvciA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwcm90bywgXCJjb25zdHJ1Y3RvclwiKSAmJiBwcm90by5jb25zdHJ1Y3RvcjtcbiAgcmV0dXJuIHR5cGVvZiBDdG9yID09PSBcImZ1bmN0aW9uXCIgJiYgQ3RvciBpbnN0YW5jZW9mIEN0b3IgJiYgRnVuY3Rpb24ucHJvdG90eXBlLmNhbGwoQ3RvcikgPT09IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsKHZhbHVlKTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2ZldGNoLXdyYXBwZXIuanNcbnZhciBpbXBvcnRfcmVxdWVzdF9lcnJvciA9IHJlcXVpcmUoXCJAb2N0b2tpdC9yZXF1ZXN0LWVycm9yXCIpO1xuXG4vLyBwa2cvZGlzdC1zcmMvZ2V0LWJ1ZmZlci1yZXNwb25zZS5qc1xuZnVuY3Rpb24gZ2V0QnVmZmVyUmVzcG9uc2UocmVzcG9uc2UpIHtcbiAgcmV0dXJuIHJlc3BvbnNlLmFycmF5QnVmZmVyKCk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9mZXRjaC13cmFwcGVyLmpzXG5mdW5jdGlvbiBmZXRjaFdyYXBwZXIocmVxdWVzdE9wdGlvbnMpIHtcbiAgdmFyIF9hLCBfYiwgX2MsIF9kO1xuICBjb25zdCBsb2cgPSByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0ICYmIHJlcXVlc3RPcHRpb25zLnJlcXVlc3QubG9nID8gcmVxdWVzdE9wdGlvbnMucmVxdWVzdC5sb2cgOiBjb25zb2xlO1xuICBjb25zdCBwYXJzZVN1Y2Nlc3NSZXNwb25zZUJvZHkgPSAoKF9hID0gcmVxdWVzdE9wdGlvbnMucmVxdWVzdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnBhcnNlU3VjY2Vzc1Jlc3BvbnNlQm9keSkgIT09IGZhbHNlO1xuICBpZiAoaXNQbGFpbk9iamVjdChyZXF1ZXN0T3B0aW9ucy5ib2R5KSB8fCBBcnJheS5pc0FycmF5KHJlcXVlc3RPcHRpb25zLmJvZHkpKSB7XG4gICAgcmVxdWVzdE9wdGlvbnMuYm9keSA9IEpTT04uc3RyaW5naWZ5KHJlcXVlc3RPcHRpb25zLmJvZHkpO1xuICB9XG4gIGxldCBoZWFkZXJzID0ge307XG4gIGxldCBzdGF0dXM7XG4gIGxldCB1cmw7XG4gIGxldCB7IGZldGNoIH0gPSBnbG9iYWxUaGlzO1xuICBpZiAoKF9iID0gcmVxdWVzdE9wdGlvbnMucmVxdWVzdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmZldGNoKSB7XG4gICAgZmV0Y2ggPSByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0LmZldGNoO1xuICB9XG4gIGlmICghZmV0Y2gpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcImZldGNoIGlzIG5vdCBzZXQuIFBsZWFzZSBwYXNzIGEgZmV0Y2ggaW1wbGVtZW50YXRpb24gYXMgbmV3IE9jdG9raXQoeyByZXF1ZXN0OiB7IGZldGNoIH19KS4gTGVhcm4gbW9yZSBhdCBodHRwczovL2dpdGh1Yi5jb20vb2N0b2tpdC9vY3Rva2l0LmpzLyNmZXRjaC1taXNzaW5nXCJcbiAgICApO1xuICB9XG4gIHJldHVybiBmZXRjaChyZXF1ZXN0T3B0aW9ucy51cmwsIHtcbiAgICBtZXRob2Q6IHJlcXVlc3RPcHRpb25zLm1ldGhvZCxcbiAgICBib2R5OiByZXF1ZXN0T3B0aW9ucy5ib2R5LFxuICAgIHJlZGlyZWN0OiAoX2MgPSByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0KSA9PSBudWxsID8gdm9pZCAwIDogX2MucmVkaXJlY3QsXG4gICAgaGVhZGVyczogcmVxdWVzdE9wdGlvbnMuaGVhZGVycyxcbiAgICBzaWduYWw6IChfZCA9IHJlcXVlc3RPcHRpb25zLnJlcXVlc3QpID09IG51bGwgPyB2b2lkIDAgOiBfZC5zaWduYWwsXG4gICAgLy8gZHVwbGV4IG11c3QgYmUgc2V0IGlmIHJlcXVlc3QuYm9keSBpcyBSZWFkYWJsZVN0cmVhbSBvciBBc3luYyBJdGVyYWJsZXMuXG4gICAgLy8gU2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tcmVxdWVzdGluaXQtZHVwbGV4LlxuICAgIC4uLnJlcXVlc3RPcHRpb25zLmJvZHkgJiYgeyBkdXBsZXg6IFwiaGFsZlwiIH1cbiAgfSkudGhlbihhc3luYyAocmVzcG9uc2UpID0+IHtcbiAgICB1cmwgPSByZXNwb25zZS51cmw7XG4gICAgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgIGZvciAoY29uc3Qga2V5QW5kVmFsdWUgb2YgcmVzcG9uc2UuaGVhZGVycykge1xuICAgICAgaGVhZGVyc1trZXlBbmRWYWx1ZVswXV0gPSBrZXlBbmRWYWx1ZVsxXTtcbiAgICB9XG4gICAgaWYgKFwiZGVwcmVjYXRpb25cIiBpbiBoZWFkZXJzKSB7XG4gICAgICBjb25zdCBtYXRjaGVzID0gaGVhZGVycy5saW5rICYmIGhlYWRlcnMubGluay5tYXRjaCgvPChbXj5dKyk+OyByZWw9XCJkZXByZWNhdGlvblwiLyk7XG4gICAgICBjb25zdCBkZXByZWNhdGlvbkxpbmsgPSBtYXRjaGVzICYmIG1hdGNoZXMucG9wKCk7XG4gICAgICBsb2cud2FybihcbiAgICAgICAgYFtAb2N0b2tpdC9yZXF1ZXN0XSBcIiR7cmVxdWVzdE9wdGlvbnMubWV0aG9kfSAke3JlcXVlc3RPcHRpb25zLnVybH1cIiBpcyBkZXByZWNhdGVkLiBJdCBpcyBzY2hlZHVsZWQgdG8gYmUgcmVtb3ZlZCBvbiAke2hlYWRlcnMuc3Vuc2V0fSR7ZGVwcmVjYXRpb25MaW5rID8gYC4gU2VlICR7ZGVwcmVjYXRpb25MaW5rfWAgOiBcIlwifWBcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChzdGF0dXMgPT09IDIwNCB8fCBzdGF0dXMgPT09IDIwNSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAocmVxdWVzdE9wdGlvbnMubWV0aG9kID09PSBcIkhFQURcIikge1xuICAgICAgaWYgKHN0YXR1cyA8IDQwMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgaW1wb3J0X3JlcXVlc3RfZXJyb3IuUmVxdWVzdEVycm9yKHJlc3BvbnNlLnN0YXR1c1RleHQsIHN0YXR1cywge1xuICAgICAgICByZXNwb25zZToge1xuICAgICAgICAgIHVybCxcbiAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICBkYXRhOiB2b2lkIDBcbiAgICAgICAgfSxcbiAgICAgICAgcmVxdWVzdDogcmVxdWVzdE9wdGlvbnNcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoc3RhdHVzID09PSAzMDQpIHtcbiAgICAgIHRocm93IG5ldyBpbXBvcnRfcmVxdWVzdF9lcnJvci5SZXF1ZXN0RXJyb3IoXCJOb3QgbW9kaWZpZWRcIiwgc3RhdHVzLCB7XG4gICAgICAgIHJlc3BvbnNlOiB7XG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIHN0YXR1cyxcbiAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgIGRhdGE6IGF3YWl0IGdldFJlc3BvbnNlRGF0YShyZXNwb25zZSlcbiAgICAgICAgfSxcbiAgICAgICAgcmVxdWVzdDogcmVxdWVzdE9wdGlvbnNcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoc3RhdHVzID49IDQwMCkge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdldFJlc3BvbnNlRGF0YShyZXNwb25zZSk7XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBpbXBvcnRfcmVxdWVzdF9lcnJvci5SZXF1ZXN0RXJyb3IodG9FcnJvck1lc3NhZ2UoZGF0YSksIHN0YXR1cywge1xuICAgICAgICByZXNwb25zZToge1xuICAgICAgICAgIHVybCxcbiAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICBkYXRhXG4gICAgICAgIH0sXG4gICAgICAgIHJlcXVlc3Q6IHJlcXVlc3RPcHRpb25zXG4gICAgICB9KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VTdWNjZXNzUmVzcG9uc2VCb2R5ID8gYXdhaXQgZ2V0UmVzcG9uc2VEYXRhKHJlc3BvbnNlKSA6IHJlc3BvbnNlLmJvZHk7XG4gIH0pLnRoZW4oKGRhdGEpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzLFxuICAgICAgdXJsLFxuICAgICAgaGVhZGVycyxcbiAgICAgIGRhdGFcbiAgICB9O1xuICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBpbXBvcnRfcmVxdWVzdF9lcnJvci5SZXF1ZXN0RXJyb3IpXG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICBlbHNlIGlmIChlcnJvci5uYW1lID09PSBcIkFib3J0RXJyb3JcIilcbiAgICAgIHRocm93IGVycm9yO1xuICAgIGxldCBtZXNzYWdlID0gZXJyb3IubWVzc2FnZTtcbiAgICBpZiAoZXJyb3IubmFtZSA9PT0gXCJUeXBlRXJyb3JcIiAmJiBcImNhdXNlXCIgaW4gZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvci5jYXVzZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIG1lc3NhZ2UgPSBlcnJvci5jYXVzZS5tZXNzYWdlO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZXJyb3IuY2F1c2UgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgbWVzc2FnZSA9IGVycm9yLmNhdXNlO1xuICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBuZXcgaW1wb3J0X3JlcXVlc3RfZXJyb3IuUmVxdWVzdEVycm9yKG1lc3NhZ2UsIDUwMCwge1xuICAgICAgcmVxdWVzdDogcmVxdWVzdE9wdGlvbnNcbiAgICB9KTtcbiAgfSk7XG59XG5hc3luYyBmdW5jdGlvbiBnZXRSZXNwb25zZURhdGEocmVzcG9uc2UpIHtcbiAgY29uc3QgY29udGVudFR5cGUgPSByZXNwb25zZS5oZWFkZXJzLmdldChcImNvbnRlbnQtdHlwZVwiKTtcbiAgaWYgKC9hcHBsaWNhdGlvblxcL2pzb24vLnRlc3QoY29udGVudFR5cGUpKSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKS5jYXRjaCgoKSA9PiByZXNwb25zZS50ZXh0KCkpLmNhdGNoKCgpID0+IFwiXCIpO1xuICB9XG4gIGlmICghY29udGVudFR5cGUgfHwgL150ZXh0XFwvfGNoYXJzZXQ9dXRmLTgkLy50ZXN0KGNvbnRlbnRUeXBlKSkge1xuICAgIHJldHVybiByZXNwb25zZS50ZXh0KCk7XG4gIH1cbiAgcmV0dXJuIGdldEJ1ZmZlclJlc3BvbnNlKHJlc3BvbnNlKTtcbn1cbmZ1bmN0aW9uIHRvRXJyb3JNZXNzYWdlKGRhdGEpIHtcbiAgaWYgKHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiKVxuICAgIHJldHVybiBkYXRhO1xuICBsZXQgc3VmZml4O1xuICBpZiAoXCJkb2N1bWVudGF0aW9uX3VybFwiIGluIGRhdGEpIHtcbiAgICBzdWZmaXggPSBgIC0gJHtkYXRhLmRvY3VtZW50YXRpb25fdXJsfWA7XG4gIH0gZWxzZSB7XG4gICAgc3VmZml4ID0gXCJcIjtcbiAgfVxuICBpZiAoXCJtZXNzYWdlXCIgaW4gZGF0YSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEuZXJyb3JzKSkge1xuICAgICAgcmV0dXJuIGAke2RhdGEubWVzc2FnZX06ICR7ZGF0YS5lcnJvcnMubWFwKEpTT04uc3RyaW5naWZ5KS5qb2luKFwiLCBcIil9JHtzdWZmaXh9YDtcbiAgICB9XG4gICAgcmV0dXJuIGAke2RhdGEubWVzc2FnZX0ke3N1ZmZpeH1gO1xuICB9XG4gIHJldHVybiBgVW5rbm93biBlcnJvcjogJHtKU09OLnN0cmluZ2lmeShkYXRhKX1gO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvd2l0aC1kZWZhdWx0cy5qc1xuZnVuY3Rpb24gd2l0aERlZmF1bHRzKG9sZEVuZHBvaW50LCBuZXdEZWZhdWx0cykge1xuICBjb25zdCBlbmRwb2ludDIgPSBvbGRFbmRwb2ludC5kZWZhdWx0cyhuZXdEZWZhdWx0cyk7XG4gIGNvbnN0IG5ld0FwaSA9IGZ1bmN0aW9uKHJvdXRlLCBwYXJhbWV0ZXJzKSB7XG4gICAgY29uc3QgZW5kcG9pbnRPcHRpb25zID0gZW5kcG9pbnQyLm1lcmdlKHJvdXRlLCBwYXJhbWV0ZXJzKTtcbiAgICBpZiAoIWVuZHBvaW50T3B0aW9ucy5yZXF1ZXN0IHx8ICFlbmRwb2ludE9wdGlvbnMucmVxdWVzdC5ob29rKSB7XG4gICAgICByZXR1cm4gZmV0Y2hXcmFwcGVyKGVuZHBvaW50Mi5wYXJzZShlbmRwb2ludE9wdGlvbnMpKTtcbiAgICB9XG4gICAgY29uc3QgcmVxdWVzdDIgPSAocm91dGUyLCBwYXJhbWV0ZXJzMikgPT4ge1xuICAgICAgcmV0dXJuIGZldGNoV3JhcHBlcihcbiAgICAgICAgZW5kcG9pbnQyLnBhcnNlKGVuZHBvaW50Mi5tZXJnZShyb3V0ZTIsIHBhcmFtZXRlcnMyKSlcbiAgICAgICk7XG4gICAgfTtcbiAgICBPYmplY3QuYXNzaWduKHJlcXVlc3QyLCB7XG4gICAgICBlbmRwb2ludDogZW5kcG9pbnQyLFxuICAgICAgZGVmYXVsdHM6IHdpdGhEZWZhdWx0cy5iaW5kKG51bGwsIGVuZHBvaW50MilcbiAgICB9KTtcbiAgICByZXR1cm4gZW5kcG9pbnRPcHRpb25zLnJlcXVlc3QuaG9vayhyZXF1ZXN0MiwgZW5kcG9pbnRPcHRpb25zKTtcbiAgfTtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24obmV3QXBpLCB7XG4gICAgZW5kcG9pbnQ6IGVuZHBvaW50MixcbiAgICBkZWZhdWx0czogd2l0aERlZmF1bHRzLmJpbmQobnVsbCwgZW5kcG9pbnQyKVxuICB9KTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG52YXIgcmVxdWVzdCA9IHdpdGhEZWZhdWx0cyhpbXBvcnRfZW5kcG9pbnQuZW5kcG9pbnQsIHtcbiAgaGVhZGVyczoge1xuICAgIFwidXNlci1hZ2VudFwiOiBgb2N0b2tpdC1yZXF1ZXN0LmpzLyR7VkVSU0lPTn0gJHsoMCwgaW1wb3J0X3VuaXZlcnNhbF91c2VyX2FnZW50LmdldFVzZXJBZ2VudCkoKX1gXG4gIH1cbn0pO1xuLy8gQW5ub3RhdGUgdGhlIENvbW1vbkpTIGV4cG9ydCBuYW1lcyBmb3IgRVNNIGltcG9ydCBpbiBub2RlOlxuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gIHJlcXVlc3Rcbn0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wRGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgX19nZXRPd25Qcm9wTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcztcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fZXhwb3J0ID0gKHRhcmdldCwgYWxsKSA9PiB7XG4gIGZvciAodmFyIG5hbWUgaW4gYWxsKVxuICAgIF9fZGVmUHJvcCh0YXJnZXQsIG5hbWUsIHsgZ2V0OiBhbGxbbmFtZV0sIGVudW1lcmFibGU6IHRydWUgfSk7XG59O1xudmFyIF9fY29weVByb3BzID0gKHRvLCBmcm9tLCBleGNlcHQsIGRlc2MpID0+IHtcbiAgaWYgKGZyb20gJiYgdHlwZW9mIGZyb20gPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGZyb20gPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGZvciAobGV0IGtleSBvZiBfX2dldE93blByb3BOYW1lcyhmcm9tKSlcbiAgICAgIGlmICghX19oYXNPd25Qcm9wLmNhbGwodG8sIGtleSkgJiYga2V5ICE9PSBleGNlcHQpXG4gICAgICAgIF9fZGVmUHJvcCh0bywga2V5LCB7IGdldDogKCkgPT4gZnJvbVtrZXldLCBlbnVtZXJhYmxlOiAhKGRlc2MgPSBfX2dldE93blByb3BEZXNjKGZyb20sIGtleSkpIHx8IGRlc2MuZW51bWVyYWJsZSB9KTtcbiAgfVxuICByZXR1cm4gdG87XG59O1xudmFyIF9fdG9Db21tb25KUyA9IChtb2QpID0+IF9fY29weVByb3BzKF9fZGVmUHJvcCh7fSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSksIG1vZCk7XG5cbi8vIHBrZy9kaXN0LXNyYy9pbmRleC5qc1xudmFyIGRpc3Rfc3JjX2V4cG9ydHMgPSB7fTtcbl9fZXhwb3J0KGRpc3Rfc3JjX2V4cG9ydHMsIHtcbiAgR3JhcGhxbFJlc3BvbnNlRXJyb3I6ICgpID0+IEdyYXBocWxSZXNwb25zZUVycm9yLFxuICBncmFwaHFsOiAoKSA9PiBncmFwaHFsMixcbiAgd2l0aEN1c3RvbVJlcXVlc3Q6ICgpID0+IHdpdGhDdXN0b21SZXF1ZXN0XG59KTtcbm1vZHVsZS5leHBvcnRzID0gX190b0NvbW1vbkpTKGRpc3Rfc3JjX2V4cG9ydHMpO1xudmFyIGltcG9ydF9yZXF1ZXN0MyA9IHJlcXVpcmUoXCJAb2N0b2tpdC9yZXF1ZXN0XCIpO1xudmFyIGltcG9ydF91bml2ZXJzYWxfdXNlcl9hZ2VudCA9IHJlcXVpcmUoXCJ1bml2ZXJzYWwtdXNlci1hZ2VudFwiKTtcblxuLy8gcGtnL2Rpc3Qtc3JjL3ZlcnNpb24uanNcbnZhciBWRVJTSU9OID0gXCI3LjEuMFwiO1xuXG4vLyBwa2cvZGlzdC1zcmMvd2l0aC1kZWZhdWx0cy5qc1xudmFyIGltcG9ydF9yZXF1ZXN0MiA9IHJlcXVpcmUoXCJAb2N0b2tpdC9yZXF1ZXN0XCIpO1xuXG4vLyBwa2cvZGlzdC1zcmMvZ3JhcGhxbC5qc1xudmFyIGltcG9ydF9yZXF1ZXN0ID0gcmVxdWlyZShcIkBvY3Rva2l0L3JlcXVlc3RcIik7XG5cbi8vIHBrZy9kaXN0LXNyYy9lcnJvci5qc1xuZnVuY3Rpb24gX2J1aWxkTWVzc2FnZUZvclJlc3BvbnNlRXJyb3JzKGRhdGEpIHtcbiAgcmV0dXJuIGBSZXF1ZXN0IGZhaWxlZCBkdWUgdG8gZm9sbG93aW5nIHJlc3BvbnNlIGVycm9yczpcbmAgKyBkYXRhLmVycm9ycy5tYXAoKGUpID0+IGAgLSAke2UubWVzc2FnZX1gKS5qb2luKFwiXFxuXCIpO1xufVxudmFyIEdyYXBocWxSZXNwb25zZUVycm9yID0gY2xhc3MgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHJlcXVlc3QyLCBoZWFkZXJzLCByZXNwb25zZSkge1xuICAgIHN1cGVyKF9idWlsZE1lc3NhZ2VGb3JSZXNwb25zZUVycm9ycyhyZXNwb25zZSkpO1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3QyO1xuICAgIHRoaXMuaGVhZGVycyA9IGhlYWRlcnM7XG4gICAgdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICAgIHRoaXMubmFtZSA9IFwiR3JhcGhxbFJlc3BvbnNlRXJyb3JcIjtcbiAgICB0aGlzLmVycm9ycyA9IHJlc3BvbnNlLmVycm9ycztcbiAgICB0aGlzLmRhdGEgPSByZXNwb25zZS5kYXRhO1xuICAgIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gICAgfVxuICB9XG59O1xuXG4vLyBwa2cvZGlzdC1zcmMvZ3JhcGhxbC5qc1xudmFyIE5PTl9WQVJJQUJMRV9PUFRJT05TID0gW1xuICBcIm1ldGhvZFwiLFxuICBcImJhc2VVcmxcIixcbiAgXCJ1cmxcIixcbiAgXCJoZWFkZXJzXCIsXG4gIFwicmVxdWVzdFwiLFxuICBcInF1ZXJ5XCIsXG4gIFwibWVkaWFUeXBlXCJcbl07XG52YXIgRk9SQklEREVOX1ZBUklBQkxFX09QVElPTlMgPSBbXCJxdWVyeVwiLCBcIm1ldGhvZFwiLCBcInVybFwiXTtcbnZhciBHSEVTX1YzX1NVRkZJWF9SRUdFWCA9IC9cXC9hcGlcXC92M1xcLz8kLztcbmZ1bmN0aW9uIGdyYXBocWwocmVxdWVzdDIsIHF1ZXJ5LCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBxdWVyeSA9PT0gXCJzdHJpbmdcIiAmJiBcInF1ZXJ5XCIgaW4gb3B0aW9ucykge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KFxuICAgICAgICBuZXcgRXJyb3IoYFtAb2N0b2tpdC9ncmFwaHFsXSBcInF1ZXJ5XCIgY2Fubm90IGJlIHVzZWQgYXMgdmFyaWFibGUgbmFtZWApXG4gICAgICApO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvcHRpb25zKSB7XG4gICAgICBpZiAoIUZPUkJJRERFTl9WQVJJQUJMRV9PUFRJT05TLmluY2x1ZGVzKGtleSkpXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KFxuICAgICAgICBuZXcgRXJyb3IoXG4gICAgICAgICAgYFtAb2N0b2tpdC9ncmFwaHFsXSBcIiR7a2V5fVwiIGNhbm5vdCBiZSB1c2VkIGFzIHZhcmlhYmxlIG5hbWVgXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIGNvbnN0IHBhcnNlZE9wdGlvbnMgPSB0eXBlb2YgcXVlcnkgPT09IFwic3RyaW5nXCIgPyBPYmplY3QuYXNzaWduKHsgcXVlcnkgfSwgb3B0aW9ucykgOiBxdWVyeTtcbiAgY29uc3QgcmVxdWVzdE9wdGlvbnMgPSBPYmplY3Qua2V5cyhcbiAgICBwYXJzZWRPcHRpb25zXG4gICkucmVkdWNlKChyZXN1bHQsIGtleSkgPT4ge1xuICAgIGlmIChOT05fVkFSSUFCTEVfT1BUSU9OUy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IHBhcnNlZE9wdGlvbnNba2V5XTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGlmICghcmVzdWx0LnZhcmlhYmxlcykge1xuICAgICAgcmVzdWx0LnZhcmlhYmxlcyA9IHt9O1xuICAgIH1cbiAgICByZXN1bHQudmFyaWFibGVzW2tleV0gPSBwYXJzZWRPcHRpb25zW2tleV07XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSwge30pO1xuICBjb25zdCBiYXNlVXJsID0gcGFyc2VkT3B0aW9ucy5iYXNlVXJsIHx8IHJlcXVlc3QyLmVuZHBvaW50LkRFRkFVTFRTLmJhc2VVcmw7XG4gIGlmIChHSEVTX1YzX1NVRkZJWF9SRUdFWC50ZXN0KGJhc2VVcmwpKSB7XG4gICAgcmVxdWVzdE9wdGlvbnMudXJsID0gYmFzZVVybC5yZXBsYWNlKEdIRVNfVjNfU1VGRklYX1JFR0VYLCBcIi9hcGkvZ3JhcGhxbFwiKTtcbiAgfVxuICByZXR1cm4gcmVxdWVzdDIocmVxdWVzdE9wdGlvbnMpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgaWYgKHJlc3BvbnNlLmRhdGEuZXJyb3JzKSB7XG4gICAgICBjb25zdCBoZWFkZXJzID0ge307XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhyZXNwb25zZS5oZWFkZXJzKSkge1xuICAgICAgICBoZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzW2tleV07XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgR3JhcGhxbFJlc3BvbnNlRXJyb3IoXG4gICAgICAgIHJlcXVlc3RPcHRpb25zLFxuICAgICAgICBoZWFkZXJzLFxuICAgICAgICByZXNwb25zZS5kYXRhXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzcG9uc2UuZGF0YS5kYXRhO1xuICB9KTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3dpdGgtZGVmYXVsdHMuanNcbmZ1bmN0aW9uIHdpdGhEZWZhdWx0cyhyZXF1ZXN0MiwgbmV3RGVmYXVsdHMpIHtcbiAgY29uc3QgbmV3UmVxdWVzdCA9IHJlcXVlc3QyLmRlZmF1bHRzKG5ld0RlZmF1bHRzKTtcbiAgY29uc3QgbmV3QXBpID0gKHF1ZXJ5LCBvcHRpb25zKSA9PiB7XG4gICAgcmV0dXJuIGdyYXBocWwobmV3UmVxdWVzdCwgcXVlcnksIG9wdGlvbnMpO1xuICB9O1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihuZXdBcGksIHtcbiAgICBkZWZhdWx0czogd2l0aERlZmF1bHRzLmJpbmQobnVsbCwgbmV3UmVxdWVzdCksXG4gICAgZW5kcG9pbnQ6IG5ld1JlcXVlc3QuZW5kcG9pbnRcbiAgfSk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9pbmRleC5qc1xudmFyIGdyYXBocWwyID0gd2l0aERlZmF1bHRzKGltcG9ydF9yZXF1ZXN0My5yZXF1ZXN0LCB7XG4gIGhlYWRlcnM6IHtcbiAgICBcInVzZXItYWdlbnRcIjogYG9jdG9raXQtZ3JhcGhxbC5qcy8ke1ZFUlNJT059ICR7KDAsIGltcG9ydF91bml2ZXJzYWxfdXNlcl9hZ2VudC5nZXRVc2VyQWdlbnQpKCl9YFxuICB9LFxuICBtZXRob2Q6IFwiUE9TVFwiLFxuICB1cmw6IFwiL2dyYXBocWxcIlxufSk7XG5mdW5jdGlvbiB3aXRoQ3VzdG9tUmVxdWVzdChjdXN0b21SZXF1ZXN0KSB7XG4gIHJldHVybiB3aXRoRGVmYXVsdHMoY3VzdG9tUmVxdWVzdCwge1xuICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgdXJsOiBcIi9ncmFwaHFsXCJcbiAgfSk7XG59XG4vLyBBbm5vdGF0ZSB0aGUgQ29tbW9uSlMgZXhwb3J0IG5hbWVzIGZvciBFU00gaW1wb3J0IGluIG5vZGU6XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgR3JhcGhxbFJlc3BvbnNlRXJyb3IsXG4gIGdyYXBocWwsXG4gIHdpdGhDdXN0b21SZXF1ZXN0XG59KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIF9fZ2V0T3duUHJvcE5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XG52YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX2V4cG9ydCA9ICh0YXJnZXQsIGFsbCkgPT4ge1xuICBmb3IgKHZhciBuYW1lIGluIGFsbClcbiAgICBfX2RlZlByb3AodGFyZ2V0LCBuYW1lLCB7IGdldDogYWxsW25hbWVdLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xufTtcbnZhciBfX2NvcHlQcm9wcyA9ICh0bywgZnJvbSwgZXhjZXB0LCBkZXNjKSA9PiB7XG4gIGlmIChmcm9tICYmIHR5cGVvZiBmcm9tID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBmcm9tID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBmb3IgKGxldCBrZXkgb2YgX19nZXRPd25Qcm9wTmFtZXMoZnJvbSkpXG4gICAgICBpZiAoIV9faGFzT3duUHJvcC5jYWxsKHRvLCBrZXkpICYmIGtleSAhPT0gZXhjZXB0KVxuICAgICAgICBfX2RlZlByb3AodG8sIGtleSwgeyBnZXQ6ICgpID0+IGZyb21ba2V5XSwgZW51bWVyYWJsZTogIShkZXNjID0gX19nZXRPd25Qcm9wRGVzYyhmcm9tLCBrZXkpKSB8fCBkZXNjLmVudW1lcmFibGUgfSk7XG4gIH1cbiAgcmV0dXJuIHRvO1xufTtcbnZhciBfX3RvQ29tbW9uSlMgPSAobW9kKSA9PiBfX2NvcHlQcm9wcyhfX2RlZlByb3Aoe30sIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pLCBtb2QpO1xuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbnZhciBkaXN0X3NyY19leHBvcnRzID0ge307XG5fX2V4cG9ydChkaXN0X3NyY19leHBvcnRzLCB7XG4gIGNyZWF0ZVRva2VuQXV0aDogKCkgPT4gY3JlYXRlVG9rZW5BdXRoXG59KTtcbm1vZHVsZS5leHBvcnRzID0gX190b0NvbW1vbkpTKGRpc3Rfc3JjX2V4cG9ydHMpO1xuXG4vLyBwa2cvZGlzdC1zcmMvYXV0aC5qc1xudmFyIFJFR0VYX0lTX0lOU1RBTExBVElPTl9MRUdBQ1kgPSAvXnYxXFwuLztcbnZhciBSRUdFWF9JU19JTlNUQUxMQVRJT04gPSAvXmdoc18vO1xudmFyIFJFR0VYX0lTX1VTRVJfVE9fU0VSVkVSID0gL15naHVfLztcbmFzeW5jIGZ1bmN0aW9uIGF1dGgodG9rZW4pIHtcbiAgY29uc3QgaXNBcHAgPSB0b2tlbi5zcGxpdCgvXFwuLykubGVuZ3RoID09PSAzO1xuICBjb25zdCBpc0luc3RhbGxhdGlvbiA9IFJFR0VYX0lTX0lOU1RBTExBVElPTl9MRUdBQ1kudGVzdCh0b2tlbikgfHwgUkVHRVhfSVNfSU5TVEFMTEFUSU9OLnRlc3QodG9rZW4pO1xuICBjb25zdCBpc1VzZXJUb1NlcnZlciA9IFJFR0VYX0lTX1VTRVJfVE9fU0VSVkVSLnRlc3QodG9rZW4pO1xuICBjb25zdCB0b2tlblR5cGUgPSBpc0FwcCA/IFwiYXBwXCIgOiBpc0luc3RhbGxhdGlvbiA/IFwiaW5zdGFsbGF0aW9uXCIgOiBpc1VzZXJUb1NlcnZlciA/IFwidXNlci10by1zZXJ2ZXJcIiA6IFwib2F1dGhcIjtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBcInRva2VuXCIsXG4gICAgdG9rZW4sXG4gICAgdG9rZW5UeXBlXG4gIH07XG59XG5cbi8vIHBrZy9kaXN0LXNyYy93aXRoLWF1dGhvcml6YXRpb24tcHJlZml4LmpzXG5mdW5jdGlvbiB3aXRoQXV0aG9yaXphdGlvblByZWZpeCh0b2tlbikge1xuICBpZiAodG9rZW4uc3BsaXQoL1xcLi8pLmxlbmd0aCA9PT0gMykge1xuICAgIHJldHVybiBgYmVhcmVyICR7dG9rZW59YDtcbiAgfVxuICByZXR1cm4gYHRva2VuICR7dG9rZW59YDtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2hvb2suanNcbmFzeW5jIGZ1bmN0aW9uIGhvb2sodG9rZW4sIHJlcXVlc3QsIHJvdXRlLCBwYXJhbWV0ZXJzKSB7XG4gIGNvbnN0IGVuZHBvaW50ID0gcmVxdWVzdC5lbmRwb2ludC5tZXJnZShcbiAgICByb3V0ZSxcbiAgICBwYXJhbWV0ZXJzXG4gICk7XG4gIGVuZHBvaW50LmhlYWRlcnMuYXV0aG9yaXphdGlvbiA9IHdpdGhBdXRob3JpemF0aW9uUHJlZml4KHRva2VuKTtcbiAgcmV0dXJuIHJlcXVlc3QoZW5kcG9pbnQpO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbnZhciBjcmVhdGVUb2tlbkF1dGggPSBmdW5jdGlvbiBjcmVhdGVUb2tlbkF1dGgyKHRva2VuKSB7XG4gIGlmICghdG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJbQG9jdG9raXQvYXV0aC10b2tlbl0gTm8gdG9rZW4gcGFzc2VkIHRvIGNyZWF0ZVRva2VuQXV0aFwiKTtcbiAgfVxuICBpZiAodHlwZW9mIHRva2VuICE9PSBcInN0cmluZ1wiKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJbQG9jdG9raXQvYXV0aC10b2tlbl0gVG9rZW4gcGFzc2VkIHRvIGNyZWF0ZVRva2VuQXV0aCBpcyBub3QgYSBzdHJpbmdcIlxuICAgICk7XG4gIH1cbiAgdG9rZW4gPSB0b2tlbi5yZXBsYWNlKC9eKHRva2VufGJlYXJlcikgKy9pLCBcIlwiKTtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oYXV0aC5iaW5kKG51bGwsIHRva2VuKSwge1xuICAgIGhvb2s6IGhvb2suYmluZChudWxsLCB0b2tlbilcbiAgfSk7XG59O1xuLy8gQW5ub3RhdGUgdGhlIENvbW1vbkpTIGV4cG9ydCBuYW1lcyBmb3IgRVNNIGltcG9ydCBpbiBub2RlOlxuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gIGNyZWF0ZVRva2VuQXV0aFxufSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BEZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBfX2dldE93blByb3BOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO1xudmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19leHBvcnQgPSAodGFyZ2V0LCBhbGwpID0+IHtcbiAgZm9yICh2YXIgbmFtZSBpbiBhbGwpXG4gICAgX19kZWZQcm9wKHRhcmdldCwgbmFtZSwgeyBnZXQ6IGFsbFtuYW1lXSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcbn07XG52YXIgX19jb3B5UHJvcHMgPSAodG8sIGZyb20sIGV4Y2VwdCwgZGVzYykgPT4ge1xuICBpZiAoZnJvbSAmJiB0eXBlb2YgZnJvbSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgZnJvbSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgZm9yIChsZXQga2V5IG9mIF9fZ2V0T3duUHJvcE5hbWVzKGZyb20pKVxuICAgICAgaWYgKCFfX2hhc093blByb3AuY2FsbCh0bywga2V5KSAmJiBrZXkgIT09IGV4Y2VwdClcbiAgICAgICAgX19kZWZQcm9wKHRvLCBrZXksIHsgZ2V0OiAoKSA9PiBmcm9tW2tleV0sIGVudW1lcmFibGU6ICEoZGVzYyA9IF9fZ2V0T3duUHJvcERlc2MoZnJvbSwga2V5KSkgfHwgZGVzYy5lbnVtZXJhYmxlIH0pO1xuICB9XG4gIHJldHVybiB0bztcbn07XG52YXIgX190b0NvbW1vbkpTID0gKG1vZCkgPT4gX19jb3B5UHJvcHMoX19kZWZQcm9wKHt9LCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KSwgbW9kKTtcblxuLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG52YXIgZGlzdF9zcmNfZXhwb3J0cyA9IHt9O1xuX19leHBvcnQoZGlzdF9zcmNfZXhwb3J0cywge1xuICBPY3Rva2l0OiAoKSA9PiBPY3Rva2l0XG59KTtcbm1vZHVsZS5leHBvcnRzID0gX190b0NvbW1vbkpTKGRpc3Rfc3JjX2V4cG9ydHMpO1xudmFyIGltcG9ydF91bml2ZXJzYWxfdXNlcl9hZ2VudCA9IHJlcXVpcmUoXCJ1bml2ZXJzYWwtdXNlci1hZ2VudFwiKTtcbnZhciBpbXBvcnRfYmVmb3JlX2FmdGVyX2hvb2sgPSByZXF1aXJlKFwiYmVmb3JlLWFmdGVyLWhvb2tcIik7XG52YXIgaW1wb3J0X3JlcXVlc3QgPSByZXF1aXJlKFwiQG9jdG9raXQvcmVxdWVzdFwiKTtcbnZhciBpbXBvcnRfZ3JhcGhxbCA9IHJlcXVpcmUoXCJAb2N0b2tpdC9ncmFwaHFsXCIpO1xudmFyIGltcG9ydF9hdXRoX3Rva2VuID0gcmVxdWlyZShcIkBvY3Rva2l0L2F1dGgtdG9rZW5cIik7XG5cbi8vIHBrZy9kaXN0LXNyYy92ZXJzaW9uLmpzXG52YXIgVkVSU0lPTiA9IFwiNS4yLjBcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG52YXIgbm9vcCA9ICgpID0+IHtcbn07XG52YXIgY29uc29sZVdhcm4gPSBjb25zb2xlLndhcm4uYmluZChjb25zb2xlKTtcbnZhciBjb25zb2xlRXJyb3IgPSBjb25zb2xlLmVycm9yLmJpbmQoY29uc29sZSk7XG52YXIgdXNlckFnZW50VHJhaWwgPSBgb2N0b2tpdC1jb3JlLmpzLyR7VkVSU0lPTn0gJHsoMCwgaW1wb3J0X3VuaXZlcnNhbF91c2VyX2FnZW50LmdldFVzZXJBZ2VudCkoKX1gO1xudmFyIE9jdG9raXQgPSBjbGFzcyB7XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5WRVJTSU9OID0gVkVSU0lPTjtcbiAgfVxuICBzdGF0aWMgZGVmYXVsdHMoZGVmYXVsdHMpIHtcbiAgICBjb25zdCBPY3Rva2l0V2l0aERlZmF1bHRzID0gY2xhc3MgZXh0ZW5kcyB0aGlzIHtcbiAgICAgIGNvbnN0cnVjdG9yKC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGFyZ3NbMF0gfHwge307XG4gICAgICAgIGlmICh0eXBlb2YgZGVmYXVsdHMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIHN1cGVyKGRlZmF1bHRzKG9wdGlvbnMpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIoXG4gICAgICAgICAgT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgZGVmYXVsdHMsXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgb3B0aW9ucy51c2VyQWdlbnQgJiYgZGVmYXVsdHMudXNlckFnZW50ID8ge1xuICAgICAgICAgICAgICB1c2VyQWdlbnQ6IGAke29wdGlvbnMudXNlckFnZW50fSAke2RlZmF1bHRzLnVzZXJBZ2VudH1gXG4gICAgICAgICAgICB9IDogbnVsbFxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBPY3Rva2l0V2l0aERlZmF1bHRzO1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5wbHVnaW5zID0gW107XG4gIH1cbiAgLyoqXG4gICAqIEF0dGFjaCBhIHBsdWdpbiAob3IgbWFueSkgdG8geW91ciBPY3Rva2l0IGluc3RhbmNlLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBjb25zdCBBUEkgPSBPY3Rva2l0LnBsdWdpbihwbHVnaW4xLCBwbHVnaW4yLCBwbHVnaW4zLCAuLi4pXG4gICAqL1xuICBzdGF0aWMgcGx1Z2luKC4uLm5ld1BsdWdpbnMpIHtcbiAgICBjb25zdCBjdXJyZW50UGx1Z2lucyA9IHRoaXMucGx1Z2lucztcbiAgICBjb25zdCBOZXdPY3Rva2l0ID0gY2xhc3MgZXh0ZW5kcyB0aGlzIHtcbiAgICAgIHN0YXRpYyB7XG4gICAgICAgIHRoaXMucGx1Z2lucyA9IGN1cnJlbnRQbHVnaW5zLmNvbmNhdChcbiAgICAgICAgICBuZXdQbHVnaW5zLmZpbHRlcigocGx1Z2luKSA9PiAhY3VycmVudFBsdWdpbnMuaW5jbHVkZXMocGx1Z2luKSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBOZXdPY3Rva2l0O1xuICB9XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IGhvb2sgPSBuZXcgaW1wb3J0X2JlZm9yZV9hZnRlcl9ob29rLkNvbGxlY3Rpb24oKTtcbiAgICBjb25zdCByZXF1ZXN0RGVmYXVsdHMgPSB7XG4gICAgICBiYXNlVXJsOiBpbXBvcnRfcmVxdWVzdC5yZXF1ZXN0LmVuZHBvaW50LkRFRkFVTFRTLmJhc2VVcmwsXG4gICAgICBoZWFkZXJzOiB7fSxcbiAgICAgIHJlcXVlc3Q6IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMucmVxdWVzdCwge1xuICAgICAgICAvLyBAdHMtaWdub3JlIGludGVybmFsIHVzYWdlIG9ubHksIG5vIG5lZWQgdG8gdHlwZVxuICAgICAgICBob29rOiBob29rLmJpbmQobnVsbCwgXCJyZXF1ZXN0XCIpXG4gICAgICB9KSxcbiAgICAgIG1lZGlhVHlwZToge1xuICAgICAgICBwcmV2aWV3czogW10sXG4gICAgICAgIGZvcm1hdDogXCJcIlxuICAgICAgfVxuICAgIH07XG4gICAgcmVxdWVzdERlZmF1bHRzLmhlYWRlcnNbXCJ1c2VyLWFnZW50XCJdID0gb3B0aW9ucy51c2VyQWdlbnQgPyBgJHtvcHRpb25zLnVzZXJBZ2VudH0gJHt1c2VyQWdlbnRUcmFpbH1gIDogdXNlckFnZW50VHJhaWw7XG4gICAgaWYgKG9wdGlvbnMuYmFzZVVybCkge1xuICAgICAgcmVxdWVzdERlZmF1bHRzLmJhc2VVcmwgPSBvcHRpb25zLmJhc2VVcmw7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnByZXZpZXdzKSB7XG4gICAgICByZXF1ZXN0RGVmYXVsdHMubWVkaWFUeXBlLnByZXZpZXdzID0gb3B0aW9ucy5wcmV2aWV3cztcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMudGltZVpvbmUpIHtcbiAgICAgIHJlcXVlc3REZWZhdWx0cy5oZWFkZXJzW1widGltZS16b25lXCJdID0gb3B0aW9ucy50aW1lWm9uZTtcbiAgICB9XG4gICAgdGhpcy5yZXF1ZXN0ID0gaW1wb3J0X3JlcXVlc3QucmVxdWVzdC5kZWZhdWx0cyhyZXF1ZXN0RGVmYXVsdHMpO1xuICAgIHRoaXMuZ3JhcGhxbCA9ICgwLCBpbXBvcnRfZ3JhcGhxbC53aXRoQ3VzdG9tUmVxdWVzdCkodGhpcy5yZXF1ZXN0KS5kZWZhdWx0cyhyZXF1ZXN0RGVmYXVsdHMpO1xuICAgIHRoaXMubG9nID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHtcbiAgICAgICAgZGVidWc6IG5vb3AsXG4gICAgICAgIGluZm86IG5vb3AsXG4gICAgICAgIHdhcm46IGNvbnNvbGVXYXJuLFxuICAgICAgICBlcnJvcjogY29uc29sZUVycm9yXG4gICAgICB9LFxuICAgICAgb3B0aW9ucy5sb2dcbiAgICApO1xuICAgIHRoaXMuaG9vayA9IGhvb2s7XG4gICAgaWYgKCFvcHRpb25zLmF1dGhTdHJhdGVneSkge1xuICAgICAgaWYgKCFvcHRpb25zLmF1dGgpIHtcbiAgICAgICAgdGhpcy5hdXRoID0gYXN5bmMgKCkgPT4gKHtcbiAgICAgICAgICB0eXBlOiBcInVuYXV0aGVudGljYXRlZFwiXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgYXV0aCA9ICgwLCBpbXBvcnRfYXV0aF90b2tlbi5jcmVhdGVUb2tlbkF1dGgpKG9wdGlvbnMuYXV0aCk7XG4gICAgICAgIGhvb2sud3JhcChcInJlcXVlc3RcIiwgYXV0aC5ob29rKTtcbiAgICAgICAgdGhpcy5hdXRoID0gYXV0aDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgeyBhdXRoU3RyYXRlZ3ksIC4uLm90aGVyT3B0aW9ucyB9ID0gb3B0aW9ucztcbiAgICAgIGNvbnN0IGF1dGggPSBhdXRoU3RyYXRlZ3koXG4gICAgICAgIE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAge1xuICAgICAgICAgICAgcmVxdWVzdDogdGhpcy5yZXF1ZXN0LFxuICAgICAgICAgICAgbG9nOiB0aGlzLmxvZyxcbiAgICAgICAgICAgIC8vIHdlIHBhc3MgdGhlIGN1cnJlbnQgb2N0b2tpdCBpbnN0YW5jZSBhcyB3ZWxsIGFzIGl0cyBjb25zdHJ1Y3RvciBvcHRpb25zXG4gICAgICAgICAgICAvLyB0byBhbGxvdyBmb3IgYXV0aGVudGljYXRpb24gc3RyYXRlZ2llcyB0aGF0IHJldHVybiBhIG5ldyBvY3Rva2l0IGluc3RhbmNlXG4gICAgICAgICAgICAvLyB0aGF0IHNoYXJlcyB0aGUgc2FtZSBpbnRlcm5hbCBzdGF0ZSBhcyB0aGUgY3VycmVudCBvbmUuIFRoZSBvcmlnaW5hbFxuICAgICAgICAgICAgLy8gcmVxdWlyZW1lbnQgZm9yIHRoaXMgd2FzIHRoZSBcImV2ZW50LW9jdG9raXRcIiBhdXRoZW50aWNhdGlvbiBzdHJhdGVneVxuICAgICAgICAgICAgLy8gb2YgaHR0cHM6Ly9naXRodWIuY29tL3Byb2JvdC9vY3Rva2l0LWF1dGgtcHJvYm90LlxuICAgICAgICAgICAgb2N0b2tpdDogdGhpcyxcbiAgICAgICAgICAgIG9jdG9raXRPcHRpb25zOiBvdGhlck9wdGlvbnNcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9wdGlvbnMuYXV0aFxuICAgICAgICApXG4gICAgICApO1xuICAgICAgaG9vay53cmFwKFwicmVxdWVzdFwiLCBhdXRoLmhvb2spO1xuICAgICAgdGhpcy5hdXRoID0gYXV0aDtcbiAgICB9XG4gICAgY29uc3QgY2xhc3NDb25zdHJ1Y3RvciA9IHRoaXMuY29uc3RydWN0b3I7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjbGFzc0NvbnN0cnVjdG9yLnBsdWdpbnMubGVuZ3RoOyArK2kpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgY2xhc3NDb25zdHJ1Y3Rvci5wbHVnaW5zW2ldKHRoaXMsIG9wdGlvbnMpKTtcbiAgICB9XG4gIH1cbn07XG4vLyBBbm5vdGF0ZSB0aGUgQ29tbW9uSlMgZXhwb3J0IG5hbWVzIGZvciBFU00gaW1wb3J0IGluIG5vZGU6XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgT2N0b2tpdFxufSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BEZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBfX2dldE93blByb3BOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO1xudmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19leHBvcnQgPSAodGFyZ2V0LCBhbGwpID0+IHtcbiAgZm9yICh2YXIgbmFtZSBpbiBhbGwpXG4gICAgX19kZWZQcm9wKHRhcmdldCwgbmFtZSwgeyBnZXQ6IGFsbFtuYW1lXSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcbn07XG52YXIgX19jb3B5UHJvcHMgPSAodG8sIGZyb20sIGV4Y2VwdCwgZGVzYykgPT4ge1xuICBpZiAoZnJvbSAmJiB0eXBlb2YgZnJvbSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgZnJvbSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgZm9yIChsZXQga2V5IG9mIF9fZ2V0T3duUHJvcE5hbWVzKGZyb20pKVxuICAgICAgaWYgKCFfX2hhc093blByb3AuY2FsbCh0bywga2V5KSAmJiBrZXkgIT09IGV4Y2VwdClcbiAgICAgICAgX19kZWZQcm9wKHRvLCBrZXksIHsgZ2V0OiAoKSA9PiBmcm9tW2tleV0sIGVudW1lcmFibGU6ICEoZGVzYyA9IF9fZ2V0T3duUHJvcERlc2MoZnJvbSwga2V5KSkgfHwgZGVzYy5lbnVtZXJhYmxlIH0pO1xuICB9XG4gIHJldHVybiB0bztcbn07XG52YXIgX190b0NvbW1vbkpTID0gKG1vZCkgPT4gX19jb3B5UHJvcHMoX19kZWZQcm9wKHt9LCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KSwgbW9kKTtcblxuLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG52YXIgZGlzdF9zcmNfZXhwb3J0cyA9IHt9O1xuX19leHBvcnQoZGlzdF9zcmNfZXhwb3J0cywge1xuICBsZWdhY3lSZXN0RW5kcG9pbnRNZXRob2RzOiAoKSA9PiBsZWdhY3lSZXN0RW5kcG9pbnRNZXRob2RzLFxuICByZXN0RW5kcG9pbnRNZXRob2RzOiAoKSA9PiByZXN0RW5kcG9pbnRNZXRob2RzXG59KTtcbm1vZHVsZS5leHBvcnRzID0gX190b0NvbW1vbkpTKGRpc3Rfc3JjX2V4cG9ydHMpO1xuXG4vLyBwa2cvZGlzdC1zcmMvdmVyc2lvbi5qc1xudmFyIFZFUlNJT04gPSBcIjEwLjQuMVwiO1xuXG4vLyBwa2cvZGlzdC1zcmMvZ2VuZXJhdGVkL2VuZHBvaW50cy5qc1xudmFyIEVuZHBvaW50cyA9IHtcbiAgYWN0aW9uczoge1xuICAgIGFkZEN1c3RvbUxhYmVsc1RvU2VsZkhvc3RlZFJ1bm5lckZvck9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIlxuICAgIF0sXG4gICAgYWRkQ3VzdG9tTGFiZWxzVG9TZWxmSG9zdGVkUnVubmVyRm9yUmVwbzogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCJcbiAgICBdLFxuICAgIGFkZFNlbGVjdGVkUmVwb1RvT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCJcbiAgICBdLFxuICAgIGFkZFNlbGVjdGVkUmVwb1RvT3JnVmFyaWFibGU6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvdmFyaWFibGVzL3tuYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCJcbiAgICBdLFxuICAgIGFwcHJvdmVXb3JrZmxvd1J1bjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXBwcm92ZVwiXG4gICAgXSxcbiAgICBjYW5jZWxXb3JrZmxvd1J1bjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vY2FuY2VsXCJcbiAgICBdLFxuICAgIGNyZWF0ZUVudmlyb25tZW50VmFyaWFibGU6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3ZhcmlhYmxlc1wiXG4gICAgXSxcbiAgICBjcmVhdGVPclVwZGF0ZUVudmlyb25tZW50U2VjcmV0OiBbXG4gICAgICBcIlBVVCAvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHMve3NlY3JldF9uYW1lfVwiXG4gICAgXSxcbiAgICBjcmVhdGVPclVwZGF0ZU9yZ1NlY3JldDogW1wiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlUmVwb1NlY3JldDogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJcbiAgICBdLFxuICAgIGNyZWF0ZU9yZ1ZhcmlhYmxlOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2FjdGlvbnMvdmFyaWFibGVzXCJdLFxuICAgIGNyZWF0ZVJlZ2lzdHJhdGlvblRva2VuRm9yT3JnOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3JlZ2lzdHJhdGlvbi10b2tlblwiXG4gICAgXSxcbiAgICBjcmVhdGVSZWdpc3RyYXRpb25Ub2tlbkZvclJlcG86IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3JlZ2lzdHJhdGlvbi10b2tlblwiXG4gICAgXSxcbiAgICBjcmVhdGVSZW1vdmVUb2tlbkZvck9yZzogW1wiUE9TVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMvcmVtb3ZlLXRva2VuXCJdLFxuICAgIGNyZWF0ZVJlbW92ZVRva2VuRm9yUmVwbzogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMvcmVtb3ZlLXRva2VuXCJcbiAgICBdLFxuICAgIGNyZWF0ZVJlcG9WYXJpYWJsZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy92YXJpYWJsZXNcIl0sXG4gICAgY3JlYXRlV29ya2Zsb3dEaXNwYXRjaDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L2Rpc3BhdGNoZXNcIlxuICAgIF0sXG4gICAgZGVsZXRlQWN0aW9uc0NhY2hlQnlJZDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvY2FjaGVzL3tjYWNoZV9pZH1cIlxuICAgIF0sXG4gICAgZGVsZXRlQWN0aW9uc0NhY2hlQnlLZXk6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2NhY2hlc3s/a2V5LHJlZn1cIlxuICAgIF0sXG4gICAgZGVsZXRlQXJ0aWZhY3Q6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2FydGlmYWN0cy97YXJ0aWZhY3RfaWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZUVudmlyb25tZW50U2VjcmV0OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHMve3NlY3JldF9uYW1lfVwiXG4gICAgXSxcbiAgICBkZWxldGVFbnZpcm9ubWVudFZhcmlhYmxlOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3ZhcmlhYmxlcy97bmFtZX1cIlxuICAgIF0sXG4gICAgZGVsZXRlT3JnU2VjcmV0OiBbXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZGVsZXRlT3JnVmFyaWFibGU6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX1cIl0sXG4gICAgZGVsZXRlUmVwb1NlY3JldDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJcbiAgICBdLFxuICAgIGRlbGV0ZVJlcG9WYXJpYWJsZTogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvdmFyaWFibGVzL3tuYW1lfVwiXG4gICAgXSxcbiAgICBkZWxldGVTZWxmSG9zdGVkUnVubmVyRnJvbU9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZVNlbGZIb3N0ZWRSdW5uZXJGcm9tUmVwbzogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfVwiXG4gICAgXSxcbiAgICBkZWxldGVXb3JrZmxvd1J1bjogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH1cIl0sXG4gICAgZGVsZXRlV29ya2Zsb3dSdW5Mb2dzOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2xvZ3NcIlxuICAgIF0sXG4gICAgZGlzYWJsZVNlbGVjdGVkUmVwb3NpdG9yeUdpdGh1YkFjdGlvbnNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiXG4gICAgXSxcbiAgICBkaXNhYmxlV29ya2Zsb3c6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L2Rpc2FibGVcIlxuICAgIF0sXG4gICAgZG93bmxvYWRBcnRpZmFjdDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvYXJ0aWZhY3RzL3thcnRpZmFjdF9pZH0ve2FyY2hpdmVfZm9ybWF0fVwiXG4gICAgXSxcbiAgICBkb3dubG9hZEpvYkxvZ3NGb3JXb3JrZmxvd1J1bjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvam9icy97am9iX2lkfS9sb2dzXCJcbiAgICBdLFxuICAgIGRvd25sb2FkV29ya2Zsb3dSdW5BdHRlbXB0TG9nczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hdHRlbXB0cy97YXR0ZW1wdF9udW1iZXJ9L2xvZ3NcIlxuICAgIF0sXG4gICAgZG93bmxvYWRXb3JrZmxvd1J1bkxvZ3M6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vbG9nc1wiXG4gICAgXSxcbiAgICBlbmFibGVTZWxlY3RlZFJlcG9zaXRvcnlHaXRodWJBY3Rpb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIlxuICAgIF0sXG4gICAgZW5hYmxlV29ya2Zsb3c6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L2VuYWJsZVwiXG4gICAgXSxcbiAgICBmb3JjZUNhbmNlbFdvcmtmbG93UnVuOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9mb3JjZS1jYW5jZWxcIlxuICAgIF0sXG4gICAgZ2VuZXJhdGVSdW5uZXJKaXRjb25maWdGb3JPcmc6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMvZ2VuZXJhdGUtaml0Y29uZmlnXCJcbiAgICBdLFxuICAgIGdlbmVyYXRlUnVubmVySml0Y29uZmlnRm9yUmVwbzogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMvZ2VuZXJhdGUtaml0Y29uZmlnXCJcbiAgICBdLFxuICAgIGdldEFjdGlvbnNDYWNoZUxpc3Q6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9jYWNoZXNcIl0sXG4gICAgZ2V0QWN0aW9uc0NhY2hlVXNhZ2U6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9jYWNoZS91c2FnZVwiXSxcbiAgICBnZXRBY3Rpb25zQ2FjaGVVc2FnZUJ5UmVwb0Zvck9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9jYWNoZS91c2FnZS1ieS1yZXBvc2l0b3J5XCJcbiAgICBdLFxuICAgIGdldEFjdGlvbnNDYWNoZVVzYWdlRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9jYWNoZS91c2FnZVwiXSxcbiAgICBnZXRBbGxvd2VkQWN0aW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9zZWxlY3RlZC1hY3Rpb25zXCJcbiAgICBdLFxuICAgIGdldEFsbG93ZWRBY3Rpb25zUmVwb3NpdG9yeTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnMvc2VsZWN0ZWQtYWN0aW9uc1wiXG4gICAgXSxcbiAgICBnZXRBcnRpZmFjdDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2FydGlmYWN0cy97YXJ0aWZhY3RfaWR9XCJdLFxuICAgIGdldEN1c3RvbU9pZGNTdWJDbGFpbUZvclJlcG86IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL29pZGMvY3VzdG9taXphdGlvbi9zdWJcIlxuICAgIF0sXG4gICAgZ2V0RW52aXJvbm1lbnRQdWJsaWNLZXk6IFtcbiAgICAgIFwiR0VUIC9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vc2VjcmV0cy9wdWJsaWMta2V5XCJcbiAgICBdLFxuICAgIGdldEVudmlyb25tZW50U2VjcmV0OiBbXG4gICAgICBcIkdFVCAvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHMve3NlY3JldF9uYW1lfVwiXG4gICAgXSxcbiAgICBnZXRFbnZpcm9ubWVudFZhcmlhYmxlOiBbXG4gICAgICBcIkdFVCAvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3ZhcmlhYmxlcy97bmFtZX1cIlxuICAgIF0sXG4gICAgZ2V0R2l0aHViQWN0aW9uc0RlZmF1bHRXb3JrZmxvd1Blcm1pc3Npb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3dvcmtmbG93XCJcbiAgICBdLFxuICAgIGdldEdpdGh1YkFjdGlvbnNEZWZhdWx0V29ya2Zsb3dQZXJtaXNzaW9uc1JlcG9zaXRvcnk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zL3dvcmtmbG93XCJcbiAgICBdLFxuICAgIGdldEdpdGh1YkFjdGlvbnNQZXJtaXNzaW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9uc1wiXG4gICAgXSxcbiAgICBnZXRHaXRodWJBY3Rpb25zUGVybWlzc2lvbnNSZXBvc2l0b3J5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9uc1wiXG4gICAgXSxcbiAgICBnZXRKb2JGb3JXb3JrZmxvd1J1bjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2pvYnMve2pvYl9pZH1cIl0sXG4gICAgZ2V0T3JnUHVibGljS2V5OiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3B1YmxpYy1rZXlcIl0sXG4gICAgZ2V0T3JnU2VjcmV0OiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZ2V0T3JnVmFyaWFibGU6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX1cIl0sXG4gICAgZ2V0UGVuZGluZ0RlcGxveW1lbnRzRm9yUnVuOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L3BlbmRpbmdfZGVwbG95bWVudHNcIlxuICAgIF0sXG4gICAgZ2V0UmVwb1Blcm1pc3Npb25zOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9uc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcImFjdGlvbnNcIiwgXCJnZXRHaXRodWJBY3Rpb25zUGVybWlzc2lvbnNSZXBvc2l0b3J5XCJdIH1cbiAgICBdLFxuICAgIGdldFJlcG9QdWJsaWNLZXk6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9zZWNyZXRzL3B1YmxpYy1rZXlcIl0sXG4gICAgZ2V0UmVwb1NlY3JldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBnZXRSZXBvVmFyaWFibGU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCJdLFxuICAgIGdldFJldmlld3NGb3JSdW46IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXBwcm92YWxzXCJcbiAgICBdLFxuICAgIGdldFNlbGZIb3N0ZWRSdW5uZXJGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH1cIl0sXG4gICAgZ2V0U2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH1cIlxuICAgIF0sXG4gICAgZ2V0V29ya2Zsb3c6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3Mve3dvcmtmbG93X2lkfVwiXSxcbiAgICBnZXRXb3JrZmxvd0FjY2Vzc1RvUmVwb3NpdG9yeTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnMvYWNjZXNzXCJcbiAgICBdLFxuICAgIGdldFdvcmtmbG93UnVuOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfVwiXSxcbiAgICBnZXRXb3JrZmxvd1J1bkF0dGVtcHQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXR0ZW1wdHMve2F0dGVtcHRfbnVtYmVyfVwiXG4gICAgXSxcbiAgICBnZXRXb3JrZmxvd1J1blVzYWdlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L3RpbWluZ1wiXG4gICAgXSxcbiAgICBnZXRXb3JrZmxvd1VzYWdlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3Mve3dvcmtmbG93X2lkfS90aW1pbmdcIlxuICAgIF0sXG4gICAgbGlzdEFydGlmYWN0c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9hcnRpZmFjdHNcIl0sXG4gICAgbGlzdEVudmlyb25tZW50U2VjcmV0czogW1xuICAgICAgXCJHRVQgL3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH0vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9zZWNyZXRzXCJcbiAgICBdLFxuICAgIGxpc3RFbnZpcm9ubWVudFZhcmlhYmxlczogW1xuICAgICAgXCJHRVQgL3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH0vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS92YXJpYWJsZXNcIlxuICAgIF0sXG4gICAgbGlzdEpvYnNGb3JXb3JrZmxvd1J1bjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9qb2JzXCJcbiAgICBdLFxuICAgIGxpc3RKb2JzRm9yV29ya2Zsb3dSdW5BdHRlbXB0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2F0dGVtcHRzL3thdHRlbXB0X251bWJlcn0vam9ic1wiXG4gICAgXSxcbiAgICBsaXN0TGFiZWxzRm9yU2VsZkhvc3RlZFJ1bm5lckZvck9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVsc1wiXG4gICAgXSxcbiAgICBsaXN0TGFiZWxzRm9yU2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCJcbiAgICBdLFxuICAgIGxpc3RPcmdTZWNyZXRzOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzXCJdLFxuICAgIGxpc3RPcmdWYXJpYWJsZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlc1wiXSxcbiAgICBsaXN0UmVwb09yZ2FuaXphdGlvblNlY3JldHM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL29yZ2FuaXphdGlvbi1zZWNyZXRzXCJcbiAgICBdLFxuICAgIGxpc3RSZXBvT3JnYW5pemF0aW9uVmFyaWFibGVzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9vcmdhbml6YXRpb24tdmFyaWFibGVzXCJcbiAgICBdLFxuICAgIGxpc3RSZXBvU2VjcmV0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3NlY3JldHNcIl0sXG4gICAgbGlzdFJlcG9WYXJpYWJsZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy92YXJpYWJsZXNcIl0sXG4gICAgbGlzdFJlcG9Xb3JrZmxvd3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3NcIl0sXG4gICAgbGlzdFJ1bm5lckFwcGxpY2F0aW9uc0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy9kb3dubG9hZHNcIl0sXG4gICAgbGlzdFJ1bm5lckFwcGxpY2F0aW9uc0ZvclJlcG86IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMvZG93bmxvYWRzXCJcbiAgICBdLFxuICAgIGxpc3RTZWxlY3RlZFJlcG9zRm9yT3JnU2VjcmV0OiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIlxuICAgIF0sXG4gICAgbGlzdFNlbGVjdGVkUmVwb3NGb3JPcmdWYXJpYWJsZTogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9L3JlcG9zaXRvcmllc1wiXG4gICAgXSxcbiAgICBsaXN0U2VsZWN0ZWRSZXBvc2l0b3JpZXNFbmFibGVkR2l0aHViQWN0aW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9yZXBvc2l0b3JpZXNcIlxuICAgIF0sXG4gICAgbGlzdFNlbGZIb3N0ZWRSdW5uZXJzRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzXCJdLFxuICAgIGxpc3RTZWxmSG9zdGVkUnVubmVyc0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzXCJdLFxuICAgIGxpc3RXb3JrZmxvd1J1bkFydGlmYWN0czogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hcnRpZmFjdHNcIlxuICAgIF0sXG4gICAgbGlzdFdvcmtmbG93UnVuczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvd29ya2Zsb3dzL3t3b3JrZmxvd19pZH0vcnVuc1wiXG4gICAgXSxcbiAgICBsaXN0V29ya2Zsb3dSdW5zRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnNcIl0sXG4gICAgcmVSdW5Kb2JGb3JXb3JrZmxvd1J1bjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2pvYnMve2pvYl9pZH0vcmVydW5cIlxuICAgIF0sXG4gICAgcmVSdW5Xb3JrZmxvdzogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L3JlcnVuXCJdLFxuICAgIHJlUnVuV29ya2Zsb3dGYWlsZWRKb2JzOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9yZXJ1bi1mYWlsZWQtam9ic1wiXG4gICAgXSxcbiAgICByZW1vdmVBbGxDdXN0b21MYWJlbHNGcm9tU2VsZkhvc3RlZFJ1bm5lckZvck9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVsc1wiXG4gICAgXSxcbiAgICByZW1vdmVBbGxDdXN0b21MYWJlbHNGcm9tU2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCJcbiAgICBdLFxuICAgIHJlbW92ZUN1c3RvbUxhYmVsRnJvbVNlbGZIb3N0ZWRSdW5uZXJGb3JPcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHMve25hbWV9XCJcbiAgICBdLFxuICAgIHJlbW92ZUN1c3RvbUxhYmVsRnJvbVNlbGZIb3N0ZWRSdW5uZXJGb3JSZXBvOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVscy97bmFtZX1cIlxuICAgIF0sXG4gICAgcmVtb3ZlU2VsZWN0ZWRSZXBvRnJvbU9yZ1NlY3JldDogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiXG4gICAgXSxcbiAgICByZW1vdmVTZWxlY3RlZFJlcG9Gcm9tT3JnVmFyaWFibGU6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L2FjdGlvbnMvdmFyaWFibGVzL3tuYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCJcbiAgICBdLFxuICAgIHJldmlld0N1c3RvbUdhdGVzRm9yUnVuOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9kZXBsb3ltZW50X3Byb3RlY3Rpb25fcnVsZVwiXG4gICAgXSxcbiAgICByZXZpZXdQZW5kaW5nRGVwbG95bWVudHNGb3JSdW46IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L3BlbmRpbmdfZGVwbG95bWVudHNcIlxuICAgIF0sXG4gICAgc2V0QWxsb3dlZEFjdGlvbnNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvc2VsZWN0ZWQtYWN0aW9uc1wiXG4gICAgXSxcbiAgICBzZXRBbGxvd2VkQWN0aW9uc1JlcG9zaXRvcnk6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zL3NlbGVjdGVkLWFjdGlvbnNcIlxuICAgIF0sXG4gICAgc2V0Q3VzdG9tTGFiZWxzRm9yU2VsZkhvc3RlZFJ1bm5lckZvck9yZzogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVsc1wiXG4gICAgXSxcbiAgICBzZXRDdXN0b21MYWJlbHNGb3JTZWxmSG9zdGVkUnVubmVyRm9yUmVwbzogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIlxuICAgIF0sXG4gICAgc2V0Q3VzdG9tT2lkY1N1YkNsYWltRm9yUmVwbzogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvb2lkYy9jdXN0b21pemF0aW9uL3N1YlwiXG4gICAgXSxcbiAgICBzZXRHaXRodWJBY3Rpb25zRGVmYXVsdFdvcmtmbG93UGVybWlzc2lvbnNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvd29ya2Zsb3dcIlxuICAgIF0sXG4gICAgc2V0R2l0aHViQWN0aW9uc0RlZmF1bHRXb3JrZmxvd1Blcm1pc3Npb25zUmVwb3NpdG9yeTogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnMvd29ya2Zsb3dcIlxuICAgIF0sXG4gICAgc2V0R2l0aHViQWN0aW9uc1Blcm1pc3Npb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zXCJcbiAgICBdLFxuICAgIHNldEdpdGh1YkFjdGlvbnNQZXJtaXNzaW9uc1JlcG9zaXRvcnk6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zXCJcbiAgICBdLFxuICAgIHNldFNlbGVjdGVkUmVwb3NGb3JPcmdTZWNyZXQ6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiXG4gICAgXSxcbiAgICBzZXRTZWxlY3RlZFJlcG9zRm9yT3JnVmFyaWFibGU6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvdmFyaWFibGVzL3tuYW1lfS9yZXBvc2l0b3JpZXNcIlxuICAgIF0sXG4gICAgc2V0U2VsZWN0ZWRSZXBvc2l0b3JpZXNFbmFibGVkR2l0aHViQWN0aW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9yZXBvc2l0b3JpZXNcIlxuICAgIF0sXG4gICAgc2V0V29ya2Zsb3dBY2Nlc3NUb1JlcG9zaXRvcnk6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zL2FjY2Vzc1wiXG4gICAgXSxcbiAgICB1cGRhdGVFbnZpcm9ubWVudFZhcmlhYmxlOiBbXG4gICAgICBcIlBBVENIIC9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vdmFyaWFibGVzL3tuYW1lfVwiXG4gICAgXSxcbiAgICB1cGRhdGVPcmdWYXJpYWJsZTogW1wiUEFUQ0ggL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCJdLFxuICAgIHVwZGF0ZVJlcG9WYXJpYWJsZTogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCJcbiAgICBdXG4gIH0sXG4gIGFjdGl2aXR5OiB7XG4gICAgY2hlY2tSZXBvSXNTdGFycmVkQnlBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3N0YXJyZWQve293bmVyfS97cmVwb31cIl0sXG4gICAgZGVsZXRlUmVwb1N1YnNjcmlwdGlvbjogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdWJzY3JpcHRpb25cIl0sXG4gICAgZGVsZXRlVGhyZWFkU3Vic2NyaXB0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9L3N1YnNjcmlwdGlvblwiXG4gICAgXSxcbiAgICBnZXRGZWVkczogW1wiR0VUIC9mZWVkc1wiXSxcbiAgICBnZXRSZXBvU3Vic2NyaXB0aW9uOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmlwdGlvblwiXSxcbiAgICBnZXRUaHJlYWQ6IFtcIkdFVCAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9XCJdLFxuICAgIGdldFRocmVhZFN1YnNjcmlwdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9L3N1YnNjcmlwdGlvblwiXG4gICAgXSxcbiAgICBsaXN0RXZlbnRzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ldmVudHNcIl0sXG4gICAgbGlzdE5vdGlmaWNhdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC9ub3RpZmljYXRpb25zXCJdLFxuICAgIGxpc3RPcmdFdmVudHNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzL29yZ3Mve29yZ31cIlxuICAgIF0sXG4gICAgbGlzdFB1YmxpY0V2ZW50czogW1wiR0VUIC9ldmVudHNcIl0sXG4gICAgbGlzdFB1YmxpY0V2ZW50c0ZvclJlcG9OZXR3b3JrOiBbXCJHRVQgL25ldHdvcmtzL3tvd25lcn0ve3JlcG99L2V2ZW50c1wiXSxcbiAgICBsaXN0UHVibGljRXZlbnRzRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2V2ZW50cy9wdWJsaWNcIl0sXG4gICAgbGlzdFB1YmxpY09yZ0V2ZW50czogW1wiR0VUIC9vcmdzL3tvcmd9L2V2ZW50c1wiXSxcbiAgICBsaXN0UmVjZWl2ZWRFdmVudHNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcmVjZWl2ZWRfZXZlbnRzXCJdLFxuICAgIGxpc3RSZWNlaXZlZFB1YmxpY0V2ZW50c0ZvclVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3JlY2VpdmVkX2V2ZW50cy9wdWJsaWNcIlxuICAgIF0sXG4gICAgbGlzdFJlcG9FdmVudHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZXZlbnRzXCJdLFxuICAgIGxpc3RSZXBvTm90aWZpY2F0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbm90aWZpY2F0aW9uc1wiXG4gICAgXSxcbiAgICBsaXN0UmVwb3NTdGFycmVkQnlBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3N0YXJyZWRcIl0sXG4gICAgbGlzdFJlcG9zU3RhcnJlZEJ5VXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3N0YXJyZWRcIl0sXG4gICAgbGlzdFJlcG9zV2F0Y2hlZEJ5VXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3N1YnNjcmlwdGlvbnNcIl0sXG4gICAgbGlzdFN0YXJnYXplcnNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXJnYXplcnNcIl0sXG4gICAgbGlzdFdhdGNoZWRSZXBvc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvc3Vic2NyaXB0aW9uc1wiXSxcbiAgICBsaXN0V2F0Y2hlcnNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmliZXJzXCJdLFxuICAgIG1hcmtOb3RpZmljYXRpb25zQXNSZWFkOiBbXCJQVVQgL25vdGlmaWNhdGlvbnNcIl0sXG4gICAgbWFya1JlcG9Ob3RpZmljYXRpb25zQXNSZWFkOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L25vdGlmaWNhdGlvbnNcIl0sXG4gICAgbWFya1RocmVhZEFzRG9uZTogW1wiREVMRVRFIC9ub3RpZmljYXRpb25zL3RocmVhZHMve3RocmVhZF9pZH1cIl0sXG4gICAgbWFya1RocmVhZEFzUmVhZDogW1wiUEFUQ0ggL25vdGlmaWNhdGlvbnMvdGhyZWFkcy97dGhyZWFkX2lkfVwiXSxcbiAgICBzZXRSZXBvU3Vic2NyaXB0aW9uOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmlwdGlvblwiXSxcbiAgICBzZXRUaHJlYWRTdWJzY3JpcHRpb246IFtcbiAgICAgIFwiUFVUIC9ub3RpZmljYXRpb25zL3RocmVhZHMve3RocmVhZF9pZH0vc3Vic2NyaXB0aW9uXCJcbiAgICBdLFxuICAgIHN0YXJSZXBvRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBVVCAvdXNlci9zdGFycmVkL3tvd25lcn0ve3JlcG99XCJdLFxuICAgIHVuc3RhclJlcG9Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiREVMRVRFIC91c2VyL3N0YXJyZWQve293bmVyfS97cmVwb31cIl1cbiAgfSxcbiAgYXBwczoge1xuICAgIGFkZFJlcG9Ub0luc3RhbGxhdGlvbjogW1xuICAgICAgXCJQVVQgL3VzZXIvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiYXBwc1wiLCBcImFkZFJlcG9Ub0luc3RhbGxhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIGFkZFJlcG9Ub0luc3RhbGxhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBVVCAvdXNlci9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIlxuICAgIF0sXG4gICAgY2hlY2tUb2tlbjogW1wiUE9TVCAvYXBwbGljYXRpb25zL3tjbGllbnRfaWR9L3Rva2VuXCJdLFxuICAgIGNyZWF0ZUZyb21NYW5pZmVzdDogW1wiUE9TVCAvYXBwLW1hbmlmZXN0cy97Y29kZX0vY29udmVyc2lvbnNcIl0sXG4gICAgY3JlYXRlSW5zdGFsbGF0aW9uQWNjZXNzVG9rZW46IFtcbiAgICAgIFwiUE9TVCAvYXBwL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vYWNjZXNzX3Rva2Vuc1wiXG4gICAgXSxcbiAgICBkZWxldGVBdXRob3JpemF0aW9uOiBbXCJERUxFVEUgL2FwcGxpY2F0aW9ucy97Y2xpZW50X2lkfS9ncmFudFwiXSxcbiAgICBkZWxldGVJbnN0YWxsYXRpb246IFtcIkRFTEVURSAvYXBwL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH1cIl0sXG4gICAgZGVsZXRlVG9rZW46IFtcIkRFTEVURSAvYXBwbGljYXRpb25zL3tjbGllbnRfaWR9L3Rva2VuXCJdLFxuICAgIGdldEF1dGhlbnRpY2F0ZWQ6IFtcIkdFVCAvYXBwXCJdLFxuICAgIGdldEJ5U2x1ZzogW1wiR0VUIC9hcHBzL3thcHBfc2x1Z31cIl0sXG4gICAgZ2V0SW5zdGFsbGF0aW9uOiBbXCJHRVQgL2FwcC9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9XCJdLFxuICAgIGdldE9yZ0luc3RhbGxhdGlvbjogW1wiR0VUIC9vcmdzL3tvcmd9L2luc3RhbGxhdGlvblwiXSxcbiAgICBnZXRSZXBvSW5zdGFsbGF0aW9uOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2luc3RhbGxhdGlvblwiXSxcbiAgICBnZXRTdWJzY3JpcHRpb25QbGFuRm9yQWNjb3VudDogW1xuICAgICAgXCJHRVQgL21hcmtldHBsYWNlX2xpc3RpbmcvYWNjb3VudHMve2FjY291bnRfaWR9XCJcbiAgICBdLFxuICAgIGdldFN1YnNjcmlwdGlvblBsYW5Gb3JBY2NvdW50U3R1YmJlZDogW1xuICAgICAgXCJHRVQgL21hcmtldHBsYWNlX2xpc3Rpbmcvc3R1YmJlZC9hY2NvdW50cy97YWNjb3VudF9pZH1cIlxuICAgIF0sXG4gICAgZ2V0VXNlckluc3RhbGxhdGlvbjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2luc3RhbGxhdGlvblwiXSxcbiAgICBnZXRXZWJob29rQ29uZmlnRm9yQXBwOiBbXCJHRVQgL2FwcC9ob29rL2NvbmZpZ1wiXSxcbiAgICBnZXRXZWJob29rRGVsaXZlcnk6IFtcIkdFVCAvYXBwL2hvb2svZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9XCJdLFxuICAgIGxpc3RBY2NvdW50c0ZvclBsYW46IFtcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9wbGFucy97cGxhbl9pZH0vYWNjb3VudHNcIl0sXG4gICAgbGlzdEFjY291bnRzRm9yUGxhblN0dWJiZWQ6IFtcbiAgICAgIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3N0dWJiZWQvcGxhbnMve3BsYW5faWR9L2FjY291bnRzXCJcbiAgICBdLFxuICAgIGxpc3RJbnN0YWxsYXRpb25SZXBvc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3JlcG9zaXRvcmllc1wiXG4gICAgXSxcbiAgICBsaXN0SW5zdGFsbGF0aW9uUmVxdWVzdHNGb3JBdXRoZW50aWNhdGVkQXBwOiBbXG4gICAgICBcIkdFVCAvYXBwL2luc3RhbGxhdGlvbi1yZXF1ZXN0c1wiXG4gICAgXSxcbiAgICBsaXN0SW5zdGFsbGF0aW9uczogW1wiR0VUIC9hcHAvaW5zdGFsbGF0aW9uc1wiXSxcbiAgICBsaXN0SW5zdGFsbGF0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvaW5zdGFsbGF0aW9uc1wiXSxcbiAgICBsaXN0UGxhbnM6IFtcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9wbGFuc1wiXSxcbiAgICBsaXN0UGxhbnNTdHViYmVkOiBbXCJHRVQgL21hcmtldHBsYWNlX2xpc3Rpbmcvc3R1YmJlZC9wbGFuc1wiXSxcbiAgICBsaXN0UmVwb3NBY2Nlc3NpYmxlVG9JbnN0YWxsYXRpb246IFtcIkdFVCAvaW5zdGFsbGF0aW9uL3JlcG9zaXRvcmllc1wiXSxcbiAgICBsaXN0U3Vic2NyaXB0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvbWFya2V0cGxhY2VfcHVyY2hhc2VzXCJdLFxuICAgIGxpc3RTdWJzY3JpcHRpb25zRm9yQXV0aGVudGljYXRlZFVzZXJTdHViYmVkOiBbXG4gICAgICBcIkdFVCAvdXNlci9tYXJrZXRwbGFjZV9wdXJjaGFzZXMvc3R1YmJlZFwiXG4gICAgXSxcbiAgICBsaXN0V2ViaG9va0RlbGl2ZXJpZXM6IFtcIkdFVCAvYXBwL2hvb2svZGVsaXZlcmllc1wiXSxcbiAgICByZWRlbGl2ZXJXZWJob29rRGVsaXZlcnk6IFtcbiAgICAgIFwiUE9TVCAvYXBwL2hvb2svZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9L2F0dGVtcHRzXCJcbiAgICBdLFxuICAgIHJlbW92ZVJlcG9Gcm9tSW5zdGFsbGF0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJhcHBzXCIsIFwicmVtb3ZlUmVwb0Zyb21JbnN0YWxsYXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICByZW1vdmVSZXBvRnJvbUluc3RhbGxhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIlxuICAgIF0sXG4gICAgcmVzZXRUb2tlbjogW1wiUEFUQ0ggL2FwcGxpY2F0aW9ucy97Y2xpZW50X2lkfS90b2tlblwiXSxcbiAgICByZXZva2VJbnN0YWxsYXRpb25BY2Nlc3NUb2tlbjogW1wiREVMRVRFIC9pbnN0YWxsYXRpb24vdG9rZW5cIl0sXG4gICAgc2NvcGVUb2tlbjogW1wiUE9TVCAvYXBwbGljYXRpb25zL3tjbGllbnRfaWR9L3Rva2VuL3Njb3BlZFwiXSxcbiAgICBzdXNwZW5kSW5zdGFsbGF0aW9uOiBbXCJQVVQgL2FwcC9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3N1c3BlbmRlZFwiXSxcbiAgICB1bnN1c3BlbmRJbnN0YWxsYXRpb246IFtcbiAgICAgIFwiREVMRVRFIC9hcHAvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9zdXNwZW5kZWRcIlxuICAgIF0sXG4gICAgdXBkYXRlV2ViaG9va0NvbmZpZ0ZvckFwcDogW1wiUEFUQ0ggL2FwcC9ob29rL2NvbmZpZ1wiXVxuICB9LFxuICBiaWxsaW5nOiB7XG4gICAgZ2V0R2l0aHViQWN0aW9uc0JpbGxpbmdPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9zZXR0aW5ncy9iaWxsaW5nL2FjdGlvbnNcIl0sXG4gICAgZ2V0R2l0aHViQWN0aW9uc0JpbGxpbmdVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zZXR0aW5ncy9iaWxsaW5nL2FjdGlvbnNcIlxuICAgIF0sXG4gICAgZ2V0R2l0aHViUGFja2FnZXNCaWxsaW5nT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vc2V0dGluZ3MvYmlsbGluZy9wYWNrYWdlc1wiXSxcbiAgICBnZXRHaXRodWJQYWNrYWdlc0JpbGxpbmdVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zZXR0aW5ncy9iaWxsaW5nL3BhY2thZ2VzXCJcbiAgICBdLFxuICAgIGdldFNoYXJlZFN0b3JhZ2VCaWxsaW5nT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9zZXR0aW5ncy9iaWxsaW5nL3NoYXJlZC1zdG9yYWdlXCJcbiAgICBdLFxuICAgIGdldFNoYXJlZFN0b3JhZ2VCaWxsaW5nVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc2V0dGluZ3MvYmlsbGluZy9zaGFyZWQtc3RvcmFnZVwiXG4gICAgXVxuICB9LFxuICBjaGVja3M6IHtcbiAgICBjcmVhdGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXJ1bnNcIl0sXG4gICAgY3JlYXRlU3VpdGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXN1aXRlc1wiXSxcbiAgICBnZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stcnVucy97Y2hlY2tfcnVuX2lkfVwiXSxcbiAgICBnZXRTdWl0ZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1zdWl0ZXMve2NoZWNrX3N1aXRlX2lkfVwiXSxcbiAgICBsaXN0QW5ub3RhdGlvbnM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1ydW5zL3tjaGVja19ydW5faWR9L2Fubm90YXRpb25zXCJcbiAgICBdLFxuICAgIGxpc3RGb3JSZWY6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfS9jaGVjay1ydW5zXCJdLFxuICAgIGxpc3RGb3JTdWl0ZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXN1aXRlcy97Y2hlY2tfc3VpdGVfaWR9L2NoZWNrLXJ1bnNcIlxuICAgIF0sXG4gICAgbGlzdFN1aXRlc0ZvclJlZjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L2NoZWNrLXN1aXRlc1wiXSxcbiAgICByZXJlcXVlc3RSdW46IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stcnVucy97Y2hlY2tfcnVuX2lkfS9yZXJlcXVlc3RcIlxuICAgIF0sXG4gICAgcmVyZXF1ZXN0U3VpdGU6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stc3VpdGVzL3tjaGVja19zdWl0ZV9pZH0vcmVyZXF1ZXN0XCJcbiAgICBdLFxuICAgIHNldFN1aXRlc1ByZWZlcmVuY2VzOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1zdWl0ZXMvcHJlZmVyZW5jZXNcIlxuICAgIF0sXG4gICAgdXBkYXRlOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stcnVucy97Y2hlY2tfcnVuX2lkfVwiXVxuICB9LFxuICBjb2RlU2Nhbm5pbmc6IHtcbiAgICBkZWxldGVBbmFseXNpczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYW5hbHlzZXMve2FuYWx5c2lzX2lkfXs/Y29uZmlybV9kZWxldGV9XCJcbiAgICBdLFxuICAgIGdldEFsZXJ0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkUGFyYW1ldGVyczogeyBhbGVydF9pZDogXCJhbGVydF9udW1iZXJcIiB9IH1cbiAgICBdLFxuICAgIGdldEFuYWx5c2lzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbmFseXNlcy97YW5hbHlzaXNfaWR9XCJcbiAgICBdLFxuICAgIGdldENvZGVxbERhdGFiYXNlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9jb2RlcWwvZGF0YWJhc2VzL3tsYW5ndWFnZX1cIlxuICAgIF0sXG4gICAgZ2V0RGVmYXVsdFNldHVwOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvZGVmYXVsdC1zZXR1cFwiXSxcbiAgICBnZXRTYXJpZjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL3Nhcmlmcy97c2FyaWZfaWR9XCJdLFxuICAgIGxpc3RBbGVydEluc3RhbmNlczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9L2luc3RhbmNlc1wiXG4gICAgXSxcbiAgICBsaXN0QWxlcnRzRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vY29kZS1zY2FubmluZy9hbGVydHNcIl0sXG4gICAgbGlzdEFsZXJ0c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHNcIl0sXG4gICAgbGlzdEFsZXJ0c0luc3RhbmNlczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9L2luc3RhbmNlc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcImNvZGVTY2FubmluZ1wiLCBcImxpc3RBbGVydEluc3RhbmNlc1wiXSB9XG4gICAgXSxcbiAgICBsaXN0Q29kZXFsRGF0YWJhc2VzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9jb2RlcWwvZGF0YWJhc2VzXCJcbiAgICBdLFxuICAgIGxpc3RSZWNlbnRBbmFseXNlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FuYWx5c2VzXCJdLFxuICAgIHVwZGF0ZUFsZXJ0OiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfVwiXG4gICAgXSxcbiAgICB1cGRhdGVEZWZhdWx0U2V0dXA6IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvZGVmYXVsdC1zZXR1cFwiXG4gICAgXSxcbiAgICB1cGxvYWRTYXJpZjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9zYXJpZnNcIl1cbiAgfSxcbiAgY29kZXNPZkNvbmR1Y3Q6IHtcbiAgICBnZXRBbGxDb2Rlc09mQ29uZHVjdDogW1wiR0VUIC9jb2Rlc19vZl9jb25kdWN0XCJdLFxuICAgIGdldENvbmR1Y3RDb2RlOiBbXCJHRVQgL2NvZGVzX29mX2NvbmR1Y3Qve2tleX1cIl1cbiAgfSxcbiAgY29kZXNwYWNlczoge1xuICAgIGFkZFJlcG9zaXRvcnlGb3JTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQVVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiXG4gICAgXSxcbiAgICBhZGRTZWxlY3RlZFJlcG9Ub09yZ1NlY3JldDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiXG4gICAgXSxcbiAgICBjaGVja1Blcm1pc3Npb25zRm9yRGV2Y29udGFpbmVyOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9wZXJtaXNzaW9uc19jaGVja1wiXG4gICAgXSxcbiAgICBjb2Rlc3BhY2VNYWNoaW5lc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vbWFjaGluZXNcIlxuICAgIF0sXG4gICAgY3JlYXRlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvY29kZXNwYWNlc1wiXSxcbiAgICBjcmVhdGVPclVwZGF0ZU9yZ1NlY3JldDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIlxuICAgIF0sXG4gICAgY3JlYXRlT3JVcGRhdGVSZXBvU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIlxuICAgIF0sXG4gICAgY3JlYXRlT3JVcGRhdGVTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQVVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIlxuICAgIF0sXG4gICAgY3JlYXRlV2l0aFByRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb2Rlc3BhY2VzXCJcbiAgICBdLFxuICAgIGNyZWF0ZVdpdGhSZXBvRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlc1wiXG4gICAgXSxcbiAgICBkZWxldGVGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiREVMRVRFIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfVwiXSxcbiAgICBkZWxldGVGcm9tT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9tZW1iZXJzL3t1c2VybmFtZX0vY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9XCJcbiAgICBdLFxuICAgIGRlbGV0ZU9yZ1NlY3JldDogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGRlbGV0ZVJlcG9TZWNyZXQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXG4gICAgXSxcbiAgICBkZWxldGVTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIlxuICAgIF0sXG4gICAgZXhwb3J0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUE9TVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vZXhwb3J0c1wiXG4gICAgXSxcbiAgICBnZXRDb2Rlc3BhY2VzRm9yVXNlckluT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9tZW1iZXJzL3t1c2VybmFtZX0vY29kZXNwYWNlc1wiXG4gICAgXSxcbiAgICBnZXRFeHBvcnREZXRhaWxzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfS9leHBvcnRzL3tleHBvcnRfaWR9XCJcbiAgICBdLFxuICAgIGdldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9XCJdLFxuICAgIGdldE9yZ1B1YmxpY0tleTogW1wiR0VUIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0cy9wdWJsaWMta2V5XCJdLFxuICAgIGdldE9yZ1NlY3JldDogW1wiR0VUIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGdldFB1YmxpY0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMvcHVibGljLWtleVwiXG4gICAgXSxcbiAgICBnZXRSZXBvUHVibGljS2V5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9zZWNyZXRzL3B1YmxpYy1rZXlcIlxuICAgIF0sXG4gICAgZ2V0UmVwb1NlY3JldDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJcbiAgICBdLFxuICAgIGdldFNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXG4gICAgXSxcbiAgICBsaXN0RGV2Y29udGFpbmVyc0luUmVwb3NpdG9yeUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9kZXZjb250YWluZXJzXCJcbiAgICBdLFxuICAgIGxpc3RGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2NvZGVzcGFjZXNcIl0sXG4gICAgbGlzdEluT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZFBhcmFtZXRlcnM6IHsgb3JnX2lkOiBcIm9yZ1wiIH0gfVxuICAgIF0sXG4gICAgbGlzdEluUmVwb3NpdG9yeUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlc1wiXG4gICAgXSxcbiAgICBsaXN0T3JnU2VjcmV0czogW1wiR0VUIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0c1wiXSxcbiAgICBsaXN0UmVwb1NlY3JldHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9zZWNyZXRzXCJdLFxuICAgIGxpc3RSZXBvc2l0b3JpZXNGb3JTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCJcbiAgICBdLFxuICAgIGxpc3RTZWNyZXRzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHNcIl0sXG4gICAgbGlzdFNlbGVjdGVkUmVwb3NGb3JPcmdTZWNyZXQ6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiXG4gICAgXSxcbiAgICBwcmVGbGlnaHRXaXRoUmVwb0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9uZXdcIlxuICAgIF0sXG4gICAgcHVibGlzaEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBPU1QgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9L3B1Ymxpc2hcIlxuICAgIF0sXG4gICAgcmVtb3ZlUmVwb3NpdG9yeUZvclNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCJcbiAgICBdLFxuICAgIHJlbW92ZVNlbGVjdGVkUmVwb0Zyb21PcmdTZWNyZXQ6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIlxuICAgIF0sXG4gICAgcmVwb01hY2hpbmVzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL21hY2hpbmVzXCJcbiAgICBdLFxuICAgIHNldFJlcG9zaXRvcmllc0ZvclNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBVVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIlxuICAgIF0sXG4gICAgc2V0U2VsZWN0ZWRSZXBvc0Zvck9yZ1NlY3JldDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCJcbiAgICBdLFxuICAgIHN0YXJ0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9L3N0YXJ0XCJdLFxuICAgIHN0b3BGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vc3RvcFwiXSxcbiAgICBzdG9wSW5Pcmdhbml6YXRpb246IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9tZW1iZXJzL3t1c2VybmFtZX0vY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9L3N0b3BcIlxuICAgIF0sXG4gICAgdXBkYXRlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBBVENIIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfVwiXVxuICB9LFxuICBjb3BpbG90OiB7XG4gICAgYWRkQ29waWxvdFNlYXRzRm9yVGVhbXM6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmcvc2VsZWN0ZWRfdGVhbXNcIlxuICAgIF0sXG4gICAgYWRkQ29waWxvdFNlYXRzRm9yVXNlcnM6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmcvc2VsZWN0ZWRfdXNlcnNcIlxuICAgIF0sXG4gICAgY2FuY2VsQ29waWxvdFNlYXRBc3NpZ25tZW50Rm9yVGVhbXM6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L2NvcGlsb3QvYmlsbGluZy9zZWxlY3RlZF90ZWFtc1wiXG4gICAgXSxcbiAgICBjYW5jZWxDb3BpbG90U2VhdEFzc2lnbm1lbnRGb3JVc2VyczogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vY29waWxvdC9iaWxsaW5nL3NlbGVjdGVkX3VzZXJzXCJcbiAgICBdLFxuICAgIGdldENvcGlsb3RPcmdhbml6YXRpb25EZXRhaWxzOiBbXCJHRVQgL29yZ3Mve29yZ30vY29waWxvdC9iaWxsaW5nXCJdLFxuICAgIGdldENvcGlsb3RTZWF0RGV0YWlsc0ZvclVzZXI6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfS9jb3BpbG90XCJcbiAgICBdLFxuICAgIGxpc3RDb3BpbG90U2VhdHM6IFtcIkdFVCAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmcvc2VhdHNcIl1cbiAgfSxcbiAgZGVwZW5kYWJvdDoge1xuICAgIGFkZFNlbGVjdGVkUmVwb1RvT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCJcbiAgICBdLFxuICAgIGNyZWF0ZU9yVXBkYXRlT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfVwiXG4gICAgXSxcbiAgICBjcmVhdGVPclVwZGF0ZVJlcG9TZWNyZXQ6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfVwiXG4gICAgXSxcbiAgICBkZWxldGVPcmdTZWNyZXQ6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBkZWxldGVSZXBvU2VjcmV0OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIlxuICAgIF0sXG4gICAgZ2V0QWxlcnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9hbGVydHMve2FsZXJ0X251bWJlcn1cIl0sXG4gICAgZ2V0T3JnUHVibGljS2V5OiBbXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3B1YmxpYy1rZXlcIl0sXG4gICAgZ2V0T3JnU2VjcmV0OiBbXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZ2V0UmVwb1B1YmxpY0tleTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3Qvc2VjcmV0cy9wdWJsaWMta2V5XCJcbiAgICBdLFxuICAgIGdldFJlcG9TZWNyZXQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfVwiXG4gICAgXSxcbiAgICBsaXN0QWxlcnRzRm9yRW50ZXJwcmlzZTogW1xuICAgICAgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9kZXBlbmRhYm90L2FsZXJ0c1wiXG4gICAgXSxcbiAgICBsaXN0QWxlcnRzRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9hbGVydHNcIl0sXG4gICAgbGlzdEFsZXJ0c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9hbGVydHNcIl0sXG4gICAgbGlzdE9yZ1NlY3JldHM6IFtcIkdFVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHNcIl0sXG4gICAgbGlzdFJlcG9TZWNyZXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3Qvc2VjcmV0c1wiXSxcbiAgICBsaXN0U2VsZWN0ZWRSZXBvc0Zvck9yZ1NlY3JldDogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCJcbiAgICBdLFxuICAgIHJlbW92ZVNlbGVjdGVkUmVwb0Zyb21PcmdTZWNyZXQ6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIlxuICAgIF0sXG4gICAgc2V0U2VsZWN0ZWRSZXBvc0Zvck9yZ1NlY3JldDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCJcbiAgICBdLFxuICAgIHVwZGF0ZUFsZXJ0OiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L2FsZXJ0cy97YWxlcnRfbnVtYmVyfVwiXG4gICAgXVxuICB9LFxuICBkZXBlbmRlbmN5R3JhcGg6IHtcbiAgICBjcmVhdGVSZXBvc2l0b3J5U25hcHNob3Q6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kZW5jeS1ncmFwaC9zbmFwc2hvdHNcIlxuICAgIF0sXG4gICAgZGlmZlJhbmdlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kZW5jeS1ncmFwaC9jb21wYXJlL3tiYXNlaGVhZH1cIlxuICAgIF0sXG4gICAgZXhwb3J0U2JvbTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRlbmN5LWdyYXBoL3Nib21cIl1cbiAgfSxcbiAgZW1vamlzOiB7IGdldDogW1wiR0VUIC9lbW9qaXNcIl0gfSxcbiAgZ2lzdHM6IHtcbiAgICBjaGVja0lzU3RhcnJlZDogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH0vc3RhclwiXSxcbiAgICBjcmVhdGU6IFtcIlBPU1QgL2dpc3RzXCJdLFxuICAgIGNyZWF0ZUNvbW1lbnQ6IFtcIlBPU1QgL2dpc3RzL3tnaXN0X2lkfS9jb21tZW50c1wiXSxcbiAgICBkZWxldGU6IFtcIkRFTEVURSAvZ2lzdHMve2dpc3RfaWR9XCJdLFxuICAgIGRlbGV0ZUNvbW1lbnQ6IFtcIkRFTEVURSAvZ2lzdHMve2dpc3RfaWR9L2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBmb3JrOiBbXCJQT1NUIC9naXN0cy97Z2lzdF9pZH0vZm9ya3NcIl0sXG4gICAgZ2V0OiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfVwiXSxcbiAgICBnZXRDb21tZW50OiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfS9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgZ2V0UmV2aXNpb246IFtcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L3tzaGF9XCJdLFxuICAgIGxpc3Q6IFtcIkdFVCAvZ2lzdHNcIl0sXG4gICAgbGlzdENvbW1lbnRzOiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfS9jb21tZW50c1wiXSxcbiAgICBsaXN0Q29tbWl0czogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH0vY29tbWl0c1wiXSxcbiAgICBsaXN0Rm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2dpc3RzXCJdLFxuICAgIGxpc3RGb3JrczogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH0vZm9ya3NcIl0sXG4gICAgbGlzdFB1YmxpYzogW1wiR0VUIC9naXN0cy9wdWJsaWNcIl0sXG4gICAgbGlzdFN0YXJyZWQ6IFtcIkdFVCAvZ2lzdHMvc3RhcnJlZFwiXSxcbiAgICBzdGFyOiBbXCJQVVQgL2dpc3RzL3tnaXN0X2lkfS9zdGFyXCJdLFxuICAgIHVuc3RhcjogW1wiREVMRVRFIC9naXN0cy97Z2lzdF9pZH0vc3RhclwiXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9naXN0cy97Z2lzdF9pZH1cIl0sXG4gICAgdXBkYXRlQ29tbWVudDogW1wiUEFUQ0ggL2dpc3RzL3tnaXN0X2lkfS9jb21tZW50cy97Y29tbWVudF9pZH1cIl1cbiAgfSxcbiAgZ2l0OiB7XG4gICAgY3JlYXRlQmxvYjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L2Jsb2JzXCJdLFxuICAgIGNyZWF0ZUNvbW1pdDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L2NvbW1pdHNcIl0sXG4gICAgY3JlYXRlUmVmOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvcmVmc1wiXSxcbiAgICBjcmVhdGVUYWc6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC90YWdzXCJdLFxuICAgIGNyZWF0ZVRyZWU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC90cmVlc1wiXSxcbiAgICBkZWxldGVSZWY6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3JlZnMve3JlZn1cIl0sXG4gICAgZ2V0QmxvYjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvYmxvYnMve2ZpbGVfc2hhfVwiXSxcbiAgICBnZXRDb21taXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L2NvbW1pdHMve2NvbW1pdF9zaGF9XCJdLFxuICAgIGdldFJlZjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvcmVmL3tyZWZ9XCJdLFxuICAgIGdldFRhZzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvdGFncy97dGFnX3NoYX1cIl0sXG4gICAgZ2V0VHJlZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvdHJlZXMve3RyZWVfc2hhfVwiXSxcbiAgICBsaXN0TWF0Y2hpbmdSZWZzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9tYXRjaGluZy1yZWZzL3tyZWZ9XCJdLFxuICAgIHVwZGF0ZVJlZjogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9yZWZzL3tyZWZ9XCJdXG4gIH0sXG4gIGdpdGlnbm9yZToge1xuICAgIGdldEFsbFRlbXBsYXRlczogW1wiR0VUIC9naXRpZ25vcmUvdGVtcGxhdGVzXCJdLFxuICAgIGdldFRlbXBsYXRlOiBbXCJHRVQgL2dpdGlnbm9yZS90ZW1wbGF0ZXMve25hbWV9XCJdXG4gIH0sXG4gIGludGVyYWN0aW9uczoge1xuICAgIGdldFJlc3RyaWN0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIGdldFJlc3RyaWN0aW9uc0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICBnZXRSZXN0cmljdGlvbnNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICBnZXRSZXN0cmljdGlvbnNGb3JZb3VyUHVibGljUmVwb3M6IFtcbiAgICAgIFwiR0VUIC91c2VyL2ludGVyYWN0aW9uLWxpbWl0c1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcImludGVyYWN0aW9uc1wiLCBcImdldFJlc3RyaWN0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIHJlbW92ZVJlc3RyaWN0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIHJlbW92ZVJlc3RyaWN0aW9uc0Zvck9yZzogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICByZW1vdmVSZXN0cmljdGlvbnNGb3JSZXBvOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaW50ZXJhY3Rpb24tbGltaXRzXCJcbiAgICBdLFxuICAgIHJlbW92ZVJlc3RyaWN0aW9uc0ZvcllvdXJQdWJsaWNSZXBvczogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvaW50ZXJhY3Rpb24tbGltaXRzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiaW50ZXJhY3Rpb25zXCIsIFwicmVtb3ZlUmVzdHJpY3Rpb25zRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfVxuICAgIF0sXG4gICAgc2V0UmVzdHJpY3Rpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBVVCAvdXNlci9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgc2V0UmVzdHJpY3Rpb25zRm9yT3JnOiBbXCJQVVQgL29yZ3Mve29yZ30vaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIHNldFJlc3RyaWN0aW9uc0ZvclJlcG86IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIHNldFJlc3RyaWN0aW9uc0ZvcllvdXJQdWJsaWNSZXBvczogW1xuICAgICAgXCJQVVQgL3VzZXIvaW50ZXJhY3Rpb24tbGltaXRzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiaW50ZXJhY3Rpb25zXCIsIFwic2V0UmVzdHJpY3Rpb25zRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfVxuICAgIF1cbiAgfSxcbiAgaXNzdWVzOiB7XG4gICAgYWRkQXNzaWduZWVzOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9hc3NpZ25lZXNcIlxuICAgIF0sXG4gICAgYWRkTGFiZWxzOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbGFiZWxzXCJdLFxuICAgIGNoZWNrVXNlckNhbkJlQXNzaWduZWQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXNzaWduZWVzL3thc3NpZ25lZX1cIl0sXG4gICAgY2hlY2tVc2VyQ2FuQmVBc3NpZ25lZFRvSXNzdWU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vYXNzaWduZWVzL3thc3NpZ25lZX1cIlxuICAgIF0sXG4gICAgY3JlYXRlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXNcIl0sXG4gICAgY3JlYXRlQ29tbWVudDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vY29tbWVudHNcIlxuICAgIF0sXG4gICAgY3JlYXRlTGFiZWw6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhYmVsc1wiXSxcbiAgICBjcmVhdGVNaWxlc3RvbmU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXNcIl0sXG4gICAgZGVsZXRlQ29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50cy97Y29tbWVudF9pZH1cIlxuICAgIF0sXG4gICAgZGVsZXRlTGFiZWw6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vbGFiZWxzL3tuYW1lfVwiXSxcbiAgICBkZWxldGVNaWxlc3RvbmU6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzL3ttaWxlc3RvbmVfbnVtYmVyfVwiXG4gICAgXSxcbiAgICBnZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9XCJdLFxuICAgIGdldENvbW1lbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBnZXRFdmVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvZXZlbnRzL3tldmVudF9pZH1cIl0sXG4gICAgZ2V0TGFiZWw6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbGFiZWxzL3tuYW1lfVwiXSxcbiAgICBnZXRNaWxlc3RvbmU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lcy97bWlsZXN0b25lX251bWJlcn1cIl0sXG4gICAgbGlzdDogW1wiR0VUIC9pc3N1ZXNcIl0sXG4gICAgbGlzdEFzc2lnbmVlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hc3NpZ25lZXNcIl0sXG4gICAgbGlzdENvbW1lbnRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9jb21tZW50c1wiXSxcbiAgICBsaXN0Q29tbWVudHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50c1wiXSxcbiAgICBsaXN0RXZlbnRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9ldmVudHNcIl0sXG4gICAgbGlzdEV2ZW50c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2V2ZW50c1wiXSxcbiAgICBsaXN0RXZlbnRzRm9yVGltZWxpbmU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vdGltZWxpbmVcIlxuICAgIF0sXG4gICAgbGlzdEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvaXNzdWVzXCJdLFxuICAgIGxpc3RGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9pc3N1ZXNcIl0sXG4gICAgbGlzdEZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzXCJdLFxuICAgIGxpc3RMYWJlbHNGb3JNaWxlc3RvbmU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzL3ttaWxlc3RvbmVfbnVtYmVyfS9sYWJlbHNcIlxuICAgIF0sXG4gICAgbGlzdExhYmVsc0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbGFiZWxzXCJdLFxuICAgIGxpc3RMYWJlbHNPbklzc3VlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xhYmVsc1wiXG4gICAgXSxcbiAgICBsaXN0TWlsZXN0b25lczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzXCJdLFxuICAgIGxvY2s6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xvY2tcIl0sXG4gICAgcmVtb3ZlQWxsTGFiZWxzOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xhYmVsc1wiXG4gICAgXSxcbiAgICByZW1vdmVBc3NpZ25lZXM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vYXNzaWduZWVzXCJcbiAgICBdLFxuICAgIHJlbW92ZUxhYmVsOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xhYmVscy97bmFtZX1cIlxuICAgIF0sXG4gICAgc2V0TGFiZWxzOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sYWJlbHNcIl0sXG4gICAgdW5sb2NrOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sb2NrXCJdLFxuICAgIHVwZGF0ZTogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfVwiXSxcbiAgICB1cGRhdGVDb21tZW50OiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICB1cGRhdGVMYWJlbDogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhYmVscy97bmFtZX1cIl0sXG4gICAgdXBkYXRlTWlsZXN0b25lOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzL3ttaWxlc3RvbmVfbnVtYmVyfVwiXG4gICAgXVxuICB9LFxuICBsaWNlbnNlczoge1xuICAgIGdldDogW1wiR0VUIC9saWNlbnNlcy97bGljZW5zZX1cIl0sXG4gICAgZ2V0QWxsQ29tbW9ubHlVc2VkOiBbXCJHRVQgL2xpY2Vuc2VzXCJdLFxuICAgIGdldEZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbGljZW5zZVwiXVxuICB9LFxuICBtYXJrZG93bjoge1xuICAgIHJlbmRlcjogW1wiUE9TVCAvbWFya2Rvd25cIl0sXG4gICAgcmVuZGVyUmF3OiBbXG4gICAgICBcIlBPU1QgL21hcmtkb3duL3Jhd1wiLFxuICAgICAgeyBoZWFkZXJzOiB7IFwiY29udGVudC10eXBlXCI6IFwidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOFwiIH0gfVxuICAgIF1cbiAgfSxcbiAgbWV0YToge1xuICAgIGdldDogW1wiR0VUIC9tZXRhXCJdLFxuICAgIGdldEFsbFZlcnNpb25zOiBbXCJHRVQgL3ZlcnNpb25zXCJdLFxuICAgIGdldE9jdG9jYXQ6IFtcIkdFVCAvb2N0b2NhdFwiXSxcbiAgICBnZXRaZW46IFtcIkdFVCAvemVuXCJdLFxuICAgIHJvb3Q6IFtcIkdFVCAvXCJdXG4gIH0sXG4gIG1pZ3JhdGlvbnM6IHtcbiAgICBjYW5jZWxJbXBvcnQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbXBvcnRcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOiBcIm9jdG9raXQucmVzdC5taWdyYXRpb25zLmNhbmNlbEltcG9ydCgpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L21pZ3JhdGlvbnMvc291cmNlLWltcG9ydHMjY2FuY2VsLWFuLWltcG9ydFwiXG4gICAgICB9XG4gICAgXSxcbiAgICBkZWxldGVBcmNoaXZlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vYXJjaGl2ZVwiXG4gICAgXSxcbiAgICBkZWxldGVBcmNoaXZlRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L2FyY2hpdmVcIlxuICAgIF0sXG4gICAgZG93bmxvYWRBcmNoaXZlRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L2FyY2hpdmVcIlxuICAgIF0sXG4gICAgZ2V0QXJjaGl2ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L2FyY2hpdmVcIlxuICAgIF0sXG4gICAgZ2V0Q29tbWl0QXV0aG9yczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ltcG9ydC9hdXRob3JzXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDogXCJvY3Rva2l0LnJlc3QubWlncmF0aW9ucy5nZXRDb21taXRBdXRob3JzKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvbWlncmF0aW9ucy9zb3VyY2UtaW1wb3J0cyNnZXQtY29tbWl0LWF1dGhvcnNcIlxuICAgICAgfVxuICAgIF0sXG4gICAgZ2V0SW1wb3J0U3RhdHVzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaW1wb3J0XCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDogXCJvY3Rva2l0LnJlc3QubWlncmF0aW9ucy5nZXRJbXBvcnRTdGF0dXMoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9taWdyYXRpb25zL3NvdXJjZS1pbXBvcnRzI2dldC1hbi1pbXBvcnQtc3RhdHVzXCJcbiAgICAgIH1cbiAgICBdLFxuICAgIGdldExhcmdlRmlsZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbXBvcnQvbGFyZ2VfZmlsZXNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOiBcIm9jdG9raXQucmVzdC5taWdyYXRpb25zLmdldExhcmdlRmlsZXMoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9taWdyYXRpb25zL3NvdXJjZS1pbXBvcnRzI2dldC1sYXJnZS1maWxlc1wiXG4gICAgICB9XG4gICAgXSxcbiAgICBnZXRTdGF0dXNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH1cIl0sXG4gICAgZ2V0U3RhdHVzRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfVwiXSxcbiAgICBsaXN0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9taWdyYXRpb25zXCJdLFxuICAgIGxpc3RGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9taWdyYXRpb25zXCJdLFxuICAgIGxpc3RSZXBvc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiXG4gICAgXSxcbiAgICBsaXN0UmVwb3NGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiXSxcbiAgICBsaXN0UmVwb3NGb3JVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcIm1pZ3JhdGlvbnNcIiwgXCJsaXN0UmVwb3NGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBtYXBDb21taXRBdXRob3I6IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2ltcG9ydC9hdXRob3JzL3thdXRob3JfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDogXCJvY3Rva2l0LnJlc3QubWlncmF0aW9ucy5tYXBDb21taXRBdXRob3IoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9taWdyYXRpb25zL3NvdXJjZS1pbXBvcnRzI21hcC1hLWNvbW1pdC1hdXRob3JcIlxuICAgICAgfVxuICAgIF0sXG4gICAgc2V0TGZzUHJlZmVyZW5jZTogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaW1wb3J0L2xmc1wiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6IFwib2N0b2tpdC5yZXN0Lm1pZ3JhdGlvbnMuc2V0TGZzUHJlZmVyZW5jZSgpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L21pZ3JhdGlvbnMvc291cmNlLWltcG9ydHMjdXBkYXRlLWdpdC1sZnMtcHJlZmVyZW5jZVwiXG4gICAgICB9XG4gICAgXSxcbiAgICBzdGFydEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL21pZ3JhdGlvbnNcIl0sXG4gICAgc3RhcnRGb3JPcmc6IFtcIlBPU1QgL29yZ3Mve29yZ30vbWlncmF0aW9uc1wiXSxcbiAgICBzdGFydEltcG9ydDogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ltcG9ydFwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6IFwib2N0b2tpdC5yZXN0Lm1pZ3JhdGlvbnMuc3RhcnRJbXBvcnQoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9taWdyYXRpb25zL3NvdXJjZS1pbXBvcnRzI3N0YXJ0LWFuLWltcG9ydFwiXG4gICAgICB9XG4gICAgXSxcbiAgICB1bmxvY2tSZXBvRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3Mve3JlcG9fbmFtZX0vbG9ja1wiXG4gICAgXSxcbiAgICB1bmxvY2tSZXBvRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L3JlcG9zL3tyZXBvX25hbWV9L2xvY2tcIlxuICAgIF0sXG4gICAgdXBkYXRlSW1wb3J0OiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbXBvcnRcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOiBcIm9jdG9raXQucmVzdC5taWdyYXRpb25zLnVwZGF0ZUltcG9ydCgpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L21pZ3JhdGlvbnMvc291cmNlLWltcG9ydHMjdXBkYXRlLWFuLWltcG9ydFwiXG4gICAgICB9XG4gICAgXVxuICB9LFxuICBvaWRjOiB7XG4gICAgZ2V0T2lkY0N1c3RvbVN1YlRlbXBsYXRlRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL29pZGMvY3VzdG9taXphdGlvbi9zdWJcIlxuICAgIF0sXG4gICAgdXBkYXRlT2lkY0N1c3RvbVN1YlRlbXBsYXRlRm9yT3JnOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL29pZGMvY3VzdG9taXphdGlvbi9zdWJcIlxuICAgIF1cbiAgfSxcbiAgb3Jnczoge1xuICAgIGFkZFNlY3VyaXR5TWFuYWdlclRlYW06IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L3NlY3VyaXR5LW1hbmFnZXJzL3RlYW1zL3t0ZWFtX3NsdWd9XCJcbiAgICBdLFxuICAgIGFzc2lnblRlYW1Ub09yZ1JvbGU6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy90ZWFtcy97dGVhbV9zbHVnfS97cm9sZV9pZH1cIlxuICAgIF0sXG4gICAgYXNzaWduVXNlclRvT3JnUm9sZTogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3VzZXJzL3t1c2VybmFtZX0ve3JvbGVfaWR9XCJcbiAgICBdLFxuICAgIGJsb2NrVXNlcjogW1wiUFVUIC9vcmdzL3tvcmd9L2Jsb2Nrcy97dXNlcm5hbWV9XCJdLFxuICAgIGNhbmNlbEludml0YXRpb246IFtcIkRFTEVURSAvb3Jncy97b3JnfS9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIl0sXG4gICAgY2hlY2tCbG9ja2VkVXNlcjogW1wiR0VUIC9vcmdzL3tvcmd9L2Jsb2Nrcy97dXNlcm5hbWV9XCJdLFxuICAgIGNoZWNrTWVtYmVyc2hpcEZvclVzZXI6IFtcIkdFVCAvb3Jncy97b3JnfS9tZW1iZXJzL3t1c2VybmFtZX1cIl0sXG4gICAgY2hlY2tQdWJsaWNNZW1iZXJzaGlwRm9yVXNlcjogW1wiR0VUIC9vcmdzL3tvcmd9L3B1YmxpY19tZW1iZXJzL3t1c2VybmFtZX1cIl0sXG4gICAgY29udmVydE1lbWJlclRvT3V0c2lkZUNvbGxhYm9yYXRvcjogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vb3V0c2lkZV9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX1cIlxuICAgIF0sXG4gICAgY3JlYXRlQ3VzdG9tT3JnYW5pemF0aW9uUm9sZTogW1wiUE9TVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXNcIl0sXG4gICAgY3JlYXRlSW52aXRhdGlvbjogW1wiUE9TVCAvb3Jncy97b3JnfS9pbnZpdGF0aW9uc1wiXSxcbiAgICBjcmVhdGVPclVwZGF0ZUN1c3RvbVByb3BlcnRpZXM6IFtcIlBBVENIIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvc2NoZW1hXCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlQ3VzdG9tUHJvcGVydGllc1ZhbHVlc0ZvclJlcG9zOiBbXG4gICAgICBcIlBBVENIIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvdmFsdWVzXCJcbiAgICBdLFxuICAgIGNyZWF0ZU9yVXBkYXRlQ3VzdG9tUHJvcGVydHk6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvc2NoZW1hL3tjdXN0b21fcHJvcGVydHlfbmFtZX1cIlxuICAgIF0sXG4gICAgY3JlYXRlV2ViaG9vazogW1wiUE9TVCAvb3Jncy97b3JnfS9ob29rc1wiXSxcbiAgICBkZWxldGU6IFtcIkRFTEVURSAvb3Jncy97b3JnfVwiXSxcbiAgICBkZWxldGVDdXN0b21Pcmdhbml6YXRpb25Sb2xlOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMve3JvbGVfaWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZVdlYmhvb2s6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgZW5hYmxlT3JEaXNhYmxlU2VjdXJpdHlQcm9kdWN0T25BbGxPcmdSZXBvczogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3tzZWN1cml0eV9wcm9kdWN0fS97ZW5hYmxlbWVudH1cIlxuICAgIF0sXG4gICAgZ2V0OiBbXCJHRVQgL29yZ3Mve29yZ31cIl0sXG4gICAgZ2V0QWxsQ3VzdG9tUHJvcGVydGllczogW1wiR0VUIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvc2NoZW1hXCJdLFxuICAgIGdldEN1c3RvbVByb3BlcnR5OiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9wcm9wZXJ0aWVzL3NjaGVtYS97Y3VzdG9tX3Byb3BlcnR5X25hbWV9XCJcbiAgICBdLFxuICAgIGdldE1lbWJlcnNoaXBGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL21lbWJlcnNoaXBzL29yZ3Mve29yZ31cIl0sXG4gICAgZ2V0TWVtYmVyc2hpcEZvclVzZXI6IFtcIkdFVCAvb3Jncy97b3JnfS9tZW1iZXJzaGlwcy97dXNlcm5hbWV9XCJdLFxuICAgIGdldE9yZ1JvbGU6IFtcIkdFVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMve3JvbGVfaWR9XCJdLFxuICAgIGdldFdlYmhvb2s6IFtcIkdFVCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgZ2V0V2ViaG9va0NvbmZpZ0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfS9jb25maWdcIl0sXG4gICAgZ2V0V2ViaG9va0RlbGl2ZXJ5OiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9XCJcbiAgICBdLFxuICAgIGxpc3Q6IFtcIkdFVCAvb3JnYW5pemF0aW9uc1wiXSxcbiAgICBsaXN0QXBwSW5zdGFsbGF0aW9uczogW1wiR0VUIC9vcmdzL3tvcmd9L2luc3RhbGxhdGlvbnNcIl0sXG4gICAgbGlzdEJsb2NrZWRVc2VyczogW1wiR0VUIC9vcmdzL3tvcmd9L2Jsb2Nrc1wiXSxcbiAgICBsaXN0Q3VzdG9tUHJvcGVydGllc1ZhbHVlc0ZvclJlcG9zOiBbXCJHRVQgL29yZ3Mve29yZ30vcHJvcGVydGllcy92YWx1ZXNcIl0sXG4gICAgbGlzdEZhaWxlZEludml0YXRpb25zOiBbXCJHRVQgL29yZ3Mve29yZ30vZmFpbGVkX2ludml0YXRpb25zXCJdLFxuICAgIGxpc3RGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL29yZ3NcIl0sXG4gICAgbGlzdEZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9vcmdzXCJdLFxuICAgIGxpc3RJbnZpdGF0aW9uVGVhbXM6IFtcIkdFVCAvb3Jncy97b3JnfS9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH0vdGVhbXNcIl0sXG4gICAgbGlzdE1lbWJlcnM6IFtcIkdFVCAvb3Jncy97b3JnfS9tZW1iZXJzXCJdLFxuICAgIGxpc3RNZW1iZXJzaGlwc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvbWVtYmVyc2hpcHMvb3Jnc1wiXSxcbiAgICBsaXN0T3JnUm9sZVRlYW1zOiBbXCJHRVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3tyb2xlX2lkfS90ZWFtc1wiXSxcbiAgICBsaXN0T3JnUm9sZVVzZXJzOiBbXCJHRVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3tyb2xlX2lkfS91c2Vyc1wiXSxcbiAgICBsaXN0T3JnUm9sZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXNcIl0sXG4gICAgbGlzdE9yZ2FuaXphdGlvbkZpbmVHcmFpbmVkUGVybWlzc2lvbnM6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1maW5lLWdyYWluZWQtcGVybWlzc2lvbnNcIlxuICAgIF0sXG4gICAgbGlzdE91dHNpZGVDb2xsYWJvcmF0b3JzOiBbXCJHRVQgL29yZ3Mve29yZ30vb3V0c2lkZV9jb2xsYWJvcmF0b3JzXCJdLFxuICAgIGxpc3RQYXRHcmFudFJlcG9zaXRvcmllczogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2Vucy97cGF0X2lkfS9yZXBvc2l0b3JpZXNcIlxuICAgIF0sXG4gICAgbGlzdFBhdEdyYW50UmVxdWVzdFJlcG9zaXRvcmllczogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2VuLXJlcXVlc3RzL3twYXRfcmVxdWVzdF9pZH0vcmVwb3NpdG9yaWVzXCJcbiAgICBdLFxuICAgIGxpc3RQYXRHcmFudFJlcXVlc3RzOiBbXCJHRVQgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2VuLXJlcXVlc3RzXCJdLFxuICAgIGxpc3RQYXRHcmFudHM6IFtcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW5zXCJdLFxuICAgIGxpc3RQZW5kaW5nSW52aXRhdGlvbnM6IFtcIkdFVCAvb3Jncy97b3JnfS9pbnZpdGF0aW9uc1wiXSxcbiAgICBsaXN0UHVibGljTWVtYmVyczogW1wiR0VUIC9vcmdzL3tvcmd9L3B1YmxpY19tZW1iZXJzXCJdLFxuICAgIGxpc3RTZWN1cml0eU1hbmFnZXJUZWFtczogW1wiR0VUIC9vcmdzL3tvcmd9L3NlY3VyaXR5LW1hbmFnZXJzXCJdLFxuICAgIGxpc3RXZWJob29rRGVsaXZlcmllczogW1wiR0VUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzXCJdLFxuICAgIGxpc3RXZWJob29rczogW1wiR0VUIC9vcmdzL3tvcmd9L2hvb2tzXCJdLFxuICAgIHBhdGNoQ3VzdG9tT3JnYW5pemF0aW9uUm9sZTogW1xuICAgICAgXCJQQVRDSCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMve3JvbGVfaWR9XCJcbiAgICBdLFxuICAgIHBpbmdXZWJob29rOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfS9waW5nc1wiXSxcbiAgICByZWRlbGl2ZXJXZWJob29rRGVsaXZlcnk6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9L2F0dGVtcHRzXCJcbiAgICBdLFxuICAgIHJlbW92ZUN1c3RvbVByb3BlcnR5OiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9wcm9wZXJ0aWVzL3NjaGVtYS97Y3VzdG9tX3Byb3BlcnR5X25hbWV9XCJcbiAgICBdLFxuICAgIHJlbW92ZU1lbWJlcjogW1wiREVMRVRFIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfVwiXSxcbiAgICByZW1vdmVNZW1iZXJzaGlwRm9yVXNlcjogW1wiREVMRVRFIC9vcmdzL3tvcmd9L21lbWJlcnNoaXBzL3t1c2VybmFtZX1cIl0sXG4gICAgcmVtb3ZlT3V0c2lkZUNvbGxhYm9yYXRvcjogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vb3V0c2lkZV9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX1cIlxuICAgIF0sXG4gICAgcmVtb3ZlUHVibGljTWVtYmVyc2hpcEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9wdWJsaWNfbWVtYmVycy97dXNlcm5hbWV9XCJcbiAgICBdLFxuICAgIHJlbW92ZVNlY3VyaXR5TWFuYWdlclRlYW06IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3NlY3VyaXR5LW1hbmFnZXJzL3RlYW1zL3t0ZWFtX3NsdWd9XCJcbiAgICBdLFxuICAgIHJldmlld1BhdEdyYW50UmVxdWVzdDogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbi1yZXF1ZXN0cy97cGF0X3JlcXVlc3RfaWR9XCJcbiAgICBdLFxuICAgIHJldmlld1BhdEdyYW50UmVxdWVzdHNJbkJ1bGs6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW4tcmVxdWVzdHNcIlxuICAgIF0sXG4gICAgcmV2b2tlQWxsT3JnUm9sZXNUZWFtOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMvdGVhbXMve3RlYW1fc2x1Z31cIlxuICAgIF0sXG4gICAgcmV2b2tlQWxsT3JnUm9sZXNVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMvdXNlcnMve3VzZXJuYW1lfVwiXG4gICAgXSxcbiAgICByZXZva2VPcmdSb2xlVGVhbTogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3RlYW1zL3t0ZWFtX3NsdWd9L3tyb2xlX2lkfVwiXG4gICAgXSxcbiAgICByZXZva2VPcmdSb2xlVXNlcjogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3VzZXJzL3t1c2VybmFtZX0ve3JvbGVfaWR9XCJcbiAgICBdLFxuICAgIHNldE1lbWJlcnNoaXBGb3JVc2VyOiBbXCJQVVQgL29yZ3Mve29yZ30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiXSxcbiAgICBzZXRQdWJsaWNNZW1iZXJzaGlwRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L3B1YmxpY19tZW1iZXJzL3t1c2VybmFtZX1cIlxuICAgIF0sXG4gICAgdW5ibG9ja1VzZXI6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9ibG9ja3Mve3VzZXJuYW1lfVwiXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9vcmdzL3tvcmd9XCJdLFxuICAgIHVwZGF0ZU1lbWJlcnNoaXBGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQQVRDSCAvdXNlci9tZW1iZXJzaGlwcy9vcmdzL3tvcmd9XCJcbiAgICBdLFxuICAgIHVwZGF0ZVBhdEFjY2VzczogW1wiUE9TVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW5zL3twYXRfaWR9XCJdLFxuICAgIHVwZGF0ZVBhdEFjY2Vzc2VzOiBbXCJQT1NUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbnNcIl0sXG4gICAgdXBkYXRlV2ViaG9vazogW1wiUEFUQ0ggL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9XCJdLFxuICAgIHVwZGF0ZVdlYmhvb2tDb25maWdGb3JPcmc6IFtcIlBBVENIIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfS9jb25maWdcIl1cbiAgfSxcbiAgcGFja2FnZXM6IHtcbiAgICBkZWxldGVQYWNrYWdlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9XCJcbiAgICBdLFxuICAgIGRlbGV0ZVBhY2thZ2VGb3JPcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9XCJcbiAgICBdLFxuICAgIGRlbGV0ZVBhY2thZ2VGb3JVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfVwiXG4gICAgXSxcbiAgICBkZWxldGVQYWNrYWdlVmVyc2lvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfVwiXG4gICAgXSxcbiAgICBkZWxldGVQYWNrYWdlVmVyc2lvbkZvck9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH1cIlxuICAgIF0sXG4gICAgZGVsZXRlUGFja2FnZVZlcnNpb25Gb3JVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfVwiXG4gICAgXSxcbiAgICBnZXRBbGxQYWNrYWdlVmVyc2lvbnNGb3JBUGFja2FnZU93bmVkQnlBbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJwYWNrYWdlc1wiLCBcImdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvclBhY2thZ2VPd25lZEJ5T3JnXCJdIH1cbiAgICBdLFxuICAgIGdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvckFQYWNrYWdlT3duZWRCeVRoZUF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIHJlbmFtZWQ6IFtcbiAgICAgICAgICBcInBhY2thZ2VzXCIsXG4gICAgICAgICAgXCJnZXRBbGxQYWNrYWdlVmVyc2lvbnNGb3JQYWNrYWdlT3duZWRCeUF1dGhlbnRpY2F0ZWRVc2VyXCJcbiAgICAgICAgXVxuICAgICAgfVxuICAgIF0sXG4gICAgZ2V0QWxsUGFja2FnZVZlcnNpb25zRm9yUGFja2FnZU93bmVkQnlBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIlxuICAgIF0sXG4gICAgZ2V0QWxsUGFja2FnZVZlcnNpb25zRm9yUGFja2FnZU93bmVkQnlPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zXCJcbiAgICBdLFxuICAgIGdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvclBhY2thZ2VPd25lZEJ5VXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIlxuICAgIF0sXG4gICAgZ2V0UGFja2FnZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfVwiXG4gICAgXSxcbiAgICBnZXRQYWNrYWdlRm9yT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfVwiXG4gICAgXSxcbiAgICBnZXRQYWNrYWdlRm9yVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX1cIlxuICAgIF0sXG4gICAgZ2V0UGFja2FnZVZlcnNpb25Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH1cIlxuICAgIF0sXG4gICAgZ2V0UGFja2FnZVZlcnNpb25Gb3JPcmdhbml6YXRpb246IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9XCJcbiAgICBdLFxuICAgIGdldFBhY2thZ2VWZXJzaW9uRm9yVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH1cIlxuICAgIF0sXG4gICAgbGlzdERvY2tlck1pZ3JhdGlvbkNvbmZsaWN0aW5nUGFja2FnZXNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvZG9ja2VyL2NvbmZsaWN0c1wiXG4gICAgXSxcbiAgICBsaXN0RG9ja2VyTWlncmF0aW9uQ29uZmxpY3RpbmdQYWNrYWdlc0Zvck9yZ2FuaXphdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vZG9ja2VyL2NvbmZsaWN0c1wiXG4gICAgXSxcbiAgICBsaXN0RG9ja2VyTWlncmF0aW9uQ29uZmxpY3RpbmdQYWNrYWdlc0ZvclVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2RvY2tlci9jb25mbGljdHNcIlxuICAgIF0sXG4gICAgbGlzdFBhY2thZ2VzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9wYWNrYWdlc1wiXSxcbiAgICBsaXN0UGFja2FnZXNGb3JPcmdhbml6YXRpb246IFtcIkdFVCAvb3Jncy97b3JnfS9wYWNrYWdlc1wiXSxcbiAgICBsaXN0UGFja2FnZXNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXNcIl0sXG4gICAgcmVzdG9yZVBhY2thZ2VGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQT1NUIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3Jlc3RvcmV7P3Rva2VufVwiXG4gICAgXSxcbiAgICByZXN0b3JlUGFja2FnZUZvck9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3Jlc3RvcmV7P3Rva2VufVwiXG4gICAgXSxcbiAgICByZXN0b3JlUGFja2FnZUZvclVzZXI6IFtcbiAgICAgIFwiUE9TVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS9yZXN0b3Jlez90b2tlbn1cIlxuICAgIF0sXG4gICAgcmVzdG9yZVBhY2thZ2VWZXJzaW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUE9TVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfS9yZXN0b3JlXCJcbiAgICBdLFxuICAgIHJlc3RvcmVQYWNrYWdlVmVyc2lvbkZvck9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9L3Jlc3RvcmVcIlxuICAgIF0sXG4gICAgcmVzdG9yZVBhY2thZ2VWZXJzaW9uRm9yVXNlcjogW1xuICAgICAgXCJQT1NUIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9L3Jlc3RvcmVcIlxuICAgIF1cbiAgfSxcbiAgcHJvamVjdHM6IHtcbiAgICBhZGRDb2xsYWJvcmF0b3I6IFtcIlBVVCAvcHJvamVjdHMve3Byb2plY3RfaWR9L2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiXSxcbiAgICBjcmVhdGVDYXJkOiBbXCJQT1NUIC9wcm9qZWN0cy9jb2x1bW5zL3tjb2x1bW5faWR9L2NhcmRzXCJdLFxuICAgIGNyZWF0ZUNvbHVtbjogW1wiUE9TVCAvcHJvamVjdHMve3Byb2plY3RfaWR9L2NvbHVtbnNcIl0sXG4gICAgY3JlYXRlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvcHJvamVjdHNcIl0sXG4gICAgY3JlYXRlRm9yT3JnOiBbXCJQT1NUIC9vcmdzL3tvcmd9L3Byb2plY3RzXCJdLFxuICAgIGNyZWF0ZUZvclJlcG86IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Byb2plY3RzXCJdLFxuICAgIGRlbGV0ZTogW1wiREVMRVRFIC9wcm9qZWN0cy97cHJvamVjdF9pZH1cIl0sXG4gICAgZGVsZXRlQ2FyZDogW1wiREVMRVRFIC9wcm9qZWN0cy9jb2x1bW5zL2NhcmRzL3tjYXJkX2lkfVwiXSxcbiAgICBkZWxldGVDb2x1bW46IFtcIkRFTEVURSAvcHJvamVjdHMvY29sdW1ucy97Y29sdW1uX2lkfVwiXSxcbiAgICBnZXQ6IFtcIkdFVCAvcHJvamVjdHMve3Byb2plY3RfaWR9XCJdLFxuICAgIGdldENhcmQ6IFtcIkdFVCAvcHJvamVjdHMvY29sdW1ucy9jYXJkcy97Y2FyZF9pZH1cIl0sXG4gICAgZ2V0Q29sdW1uOiBbXCJHRVQgL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH1cIl0sXG4gICAgZ2V0UGVybWlzc2lvbkZvclVzZXI6IFtcbiAgICAgIFwiR0VUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sbGFib3JhdG9ycy97dXNlcm5hbWV9L3Blcm1pc3Npb25cIlxuICAgIF0sXG4gICAgbGlzdENhcmRzOiBbXCJHRVQgL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH0vY2FyZHNcIl0sXG4gICAgbGlzdENvbGxhYm9yYXRvcnM6IFtcIkdFVCAvcHJvamVjdHMve3Byb2plY3RfaWR9L2NvbGxhYm9yYXRvcnNcIl0sXG4gICAgbGlzdENvbHVtbnM6IFtcIkdFVCAvcHJvamVjdHMve3Byb2plY3RfaWR9L2NvbHVtbnNcIl0sXG4gICAgbGlzdEZvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3Byb2plY3RzXCJdLFxuICAgIGxpc3RGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Byb2plY3RzXCJdLFxuICAgIGxpc3RGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcHJvamVjdHNcIl0sXG4gICAgbW92ZUNhcmQ6IFtcIlBPU1QgL3Byb2plY3RzL2NvbHVtbnMvY2FyZHMve2NhcmRfaWR9L21vdmVzXCJdLFxuICAgIG1vdmVDb2x1bW46IFtcIlBPU1QgL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH0vbW92ZXNcIl0sXG4gICAgcmVtb3ZlQ29sbGFib3JhdG9yOiBbXG4gICAgICBcIkRFTEVURSAvcHJvamVjdHMve3Byb2plY3RfaWR9L2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiXG4gICAgXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9wcm9qZWN0cy97cHJvamVjdF9pZH1cIl0sXG4gICAgdXBkYXRlQ2FyZDogW1wiUEFUQ0ggL3Byb2plY3RzL2NvbHVtbnMvY2FyZHMve2NhcmRfaWR9XCJdLFxuICAgIHVwZGF0ZUNvbHVtbjogW1wiUEFUQ0ggL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH1cIl1cbiAgfSxcbiAgcHVsbHM6IHtcbiAgICBjaGVja0lmTWVyZ2VkOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vbWVyZ2VcIl0sXG4gICAgY3JlYXRlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxsc1wiXSxcbiAgICBjcmVhdGVSZXBseUZvclJldmlld0NvbW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9pZH0vcmVwbGllc1wiXG4gICAgXSxcbiAgICBjcmVhdGVSZXZpZXc6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3c1wiXSxcbiAgICBjcmVhdGVSZXZpZXdDb21tZW50OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vY29tbWVudHNcIlxuICAgIF0sXG4gICAgZGVsZXRlUGVuZGluZ1JldmlldzogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfVwiXG4gICAgXSxcbiAgICBkZWxldGVSZXZpZXdDb21tZW50OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9XCJcbiAgICBdLFxuICAgIGRpc21pc3NSZXZpZXc6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH0vZGlzbWlzc2Fsc1wiXG4gICAgXSxcbiAgICBnZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfVwiXSxcbiAgICBnZXRSZXZpZXc6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH1cIlxuICAgIF0sXG4gICAgZ2V0UmV2aWV3Q29tbWVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgbGlzdDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxsc1wiXSxcbiAgICBsaXN0Q29tbWVudHNGb3JSZXZpZXc6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH0vY29tbWVudHNcIlxuICAgIF0sXG4gICAgbGlzdENvbW1pdHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb21taXRzXCJdLFxuICAgIGxpc3RGaWxlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2ZpbGVzXCJdLFxuICAgIGxpc3RSZXF1ZXN0ZWRSZXZpZXdlcnM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3JlcXVlc3RlZF9yZXZpZXdlcnNcIlxuICAgIF0sXG4gICAgbGlzdFJldmlld0NvbW1lbnRzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb21tZW50c1wiXG4gICAgXSxcbiAgICBsaXN0UmV2aWV3Q29tbWVudHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzXCJdLFxuICAgIGxpc3RSZXZpZXdzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3c1wiXSxcbiAgICBtZXJnZTogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L21lcmdlXCJdLFxuICAgIHJlbW92ZVJlcXVlc3RlZFJldmlld2VyczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmVxdWVzdGVkX3Jldmlld2Vyc1wiXG4gICAgXSxcbiAgICByZXF1ZXN0UmV2aWV3ZXJzOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmVxdWVzdGVkX3Jldmlld2Vyc1wiXG4gICAgXSxcbiAgICBzdWJtaXRSZXZpZXc6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzL3tyZXZpZXdfaWR9L2V2ZW50c1wiXG4gICAgXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9XCJdLFxuICAgIHVwZGF0ZUJyYW5jaDogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vdXBkYXRlLWJyYW5jaFwiXG4gICAgXSxcbiAgICB1cGRhdGVSZXZpZXc6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH1cIlxuICAgIF0sXG4gICAgdXBkYXRlUmV2aWV3Q29tbWVudDogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9XCJcbiAgICBdXG4gIH0sXG4gIHJhdGVMaW1pdDogeyBnZXQ6IFtcIkdFVCAvcmF0ZV9saW1pdFwiXSB9LFxuICByZWFjdGlvbnM6IHtcbiAgICBjcmVhdGVGb3JDb21taXRDb21tZW50OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIlxuICAgIF0sXG4gICAgY3JlYXRlRm9ySXNzdWU6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L3JlYWN0aW9uc1wiXG4gICAgXSxcbiAgICBjcmVhdGVGb3JJc3N1ZUNvbW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIlxuICAgIF0sXG4gICAgY3JlYXRlRm9yUHVsbFJlcXVlc3RSZXZpZXdDb21tZW50OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIlxuICAgIF0sXG4gICAgY3JlYXRlRm9yUmVsZWFzZTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vcmVhY3Rpb25zXCJcbiAgICBdLFxuICAgIGNyZWF0ZUZvclRlYW1EaXNjdXNzaW9uQ29tbWVudEluT3JnOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9L3JlYWN0aW9uc1wiXG4gICAgXSxcbiAgICBjcmVhdGVGb3JUZWFtRGlzY3Vzc2lvbkluT3JnOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9yZWFjdGlvbnNcIlxuICAgIF0sXG4gICAgZGVsZXRlRm9yQ29tbWl0Q29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnMve3JlYWN0aW9uX2lkfVwiXG4gICAgXSxcbiAgICBkZWxldGVGb3JJc3N1ZTogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9yZWFjdGlvbnMve3JlYWN0aW9uX2lkfVwiXG4gICAgXSxcbiAgICBkZWxldGVGb3JJc3N1ZUNvbW1lbnQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZUZvclB1bGxSZXF1ZXN0Q29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnMve3JlYWN0aW9uX2lkfVwiXG4gICAgXSxcbiAgICBkZWxldGVGb3JSZWxlYXNlOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZUZvclRlYW1EaXNjdXNzaW9uOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZUZvclRlYW1EaXNjdXNzaW9uQ29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCJcbiAgICBdLFxuICAgIGxpc3RGb3JDb21taXRDb21tZW50OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiXG4gICAgXSxcbiAgICBsaXN0Rm9ySXNzdWU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L3JlYWN0aW9uc1wiXSxcbiAgICBsaXN0Rm9ySXNzdWVDb21tZW50OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIlxuICAgIF0sXG4gICAgbGlzdEZvclB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIlxuICAgIF0sXG4gICAgbGlzdEZvclJlbGVhc2U6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vcmVhY3Rpb25zXCJcbiAgICBdLFxuICAgIGxpc3RGb3JUZWFtRGlzY3Vzc2lvbkNvbW1lbnRJbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9L3JlYWN0aW9uc1wiXG4gICAgXSxcbiAgICBsaXN0Rm9yVGVhbURpc2N1c3Npb25Jbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9yZWFjdGlvbnNcIlxuICAgIF1cbiAgfSxcbiAgcmVwb3M6IHtcbiAgICBhY2NlcHRJbnZpdGF0aW9uOiBbXG4gICAgICBcIlBBVENIIC91c2VyL3JlcG9zaXRvcnlfaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wicmVwb3NcIiwgXCJhY2NlcHRJbnZpdGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfVxuICAgIF0sXG4gICAgYWNjZXB0SW52aXRhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBBVENIIC91c2VyL3JlcG9zaXRvcnlfaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9XCJcbiAgICBdLFxuICAgIGFkZEFwcEFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy9hcHBzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgbWFwVG9EYXRhOiBcImFwcHNcIiB9XG4gICAgXSxcbiAgICBhZGRDb2xsYWJvcmF0b3I6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29sbGFib3JhdG9ycy97dXNlcm5hbWV9XCJdLFxuICAgIGFkZFN0YXR1c0NoZWNrQ29udGV4dHM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zdGF0dXNfY2hlY2tzL2NvbnRleHRzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgbWFwVG9EYXRhOiBcImNvbnRleHRzXCIgfVxuICAgIF0sXG4gICAgYWRkVGVhbUFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy90ZWFtc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJ0ZWFtc1wiIH1cbiAgICBdLFxuICAgIGFkZFVzZXJBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdXNlcnNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwidXNlcnNcIiB9XG4gICAgXSxcbiAgICBjYW5jZWxQYWdlc0RlcGxveW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXMvZGVwbG95bWVudHMve3BhZ2VzX2RlcGxveW1lbnRfaWR9L2NhbmNlbFwiXG4gICAgXSxcbiAgICBjaGVja0F1dG9tYXRlZFNlY3VyaXR5Rml4ZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hdXRvbWF0ZWQtc2VjdXJpdHktZml4ZXNcIlxuICAgIF0sXG4gICAgY2hlY2tDb2xsYWJvcmF0b3I6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29sbGFib3JhdG9ycy97dXNlcm5hbWV9XCJdLFxuICAgIGNoZWNrVnVsbmVyYWJpbGl0eUFsZXJ0czogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Z1bG5lcmFiaWxpdHktYWxlcnRzXCJcbiAgICBdLFxuICAgIGNvZGVvd25lcnNFcnJvcnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZW93bmVycy9lcnJvcnNcIl0sXG4gICAgY29tcGFyZUNvbW1pdHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tcGFyZS97YmFzZX0uLi57aGVhZH1cIl0sXG4gICAgY29tcGFyZUNvbW1pdHNXaXRoQmFzZWhlYWQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21wYXJlL3tiYXNlaGVhZH1cIlxuICAgIF0sXG4gICAgY3JlYXRlQXV0b2xpbms6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9saW5rc1wiXSxcbiAgICBjcmVhdGVDb21taXRDb21tZW50OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve2NvbW1pdF9zaGF9L2NvbW1lbnRzXCJcbiAgICBdLFxuICAgIGNyZWF0ZUNvbW1pdFNpZ25hdHVyZVByb3RlY3Rpb246IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zaWduYXR1cmVzXCJcbiAgICBdLFxuICAgIGNyZWF0ZUNvbW1pdFN0YXR1czogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3RhdHVzZXMve3NoYX1cIl0sXG4gICAgY3JlYXRlRGVwbG95S2V5OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9rZXlzXCJdLFxuICAgIGNyZWF0ZURlcGxveW1lbnQ6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGxveW1lbnRzXCJdLFxuICAgIGNyZWF0ZURlcGxveW1lbnRCcmFuY2hQb2xpY3k6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50LWJyYW5jaC1wb2xpY2llc1wiXG4gICAgXSxcbiAgICBjcmVhdGVEZXBsb3ltZW50UHJvdGVjdGlvblJ1bGU6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50X3Byb3RlY3Rpb25fcnVsZXNcIlxuICAgIF0sXG4gICAgY3JlYXRlRGVwbG95bWVudFN0YXR1czogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50cy97ZGVwbG95bWVudF9pZH0vc3RhdHVzZXNcIlxuICAgIF0sXG4gICAgY3JlYXRlRGlzcGF0Y2hFdmVudDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGlzcGF0Y2hlc1wiXSxcbiAgICBjcmVhdGVGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9yZXBvc1wiXSxcbiAgICBjcmVhdGVGb3JrOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9mb3Jrc1wiXSxcbiAgICBjcmVhdGVJbk9yZzogW1wiUE9TVCAvb3Jncy97b3JnfS9yZXBvc1wiXSxcbiAgICBjcmVhdGVPclVwZGF0ZUN1c3RvbVByb3BlcnRpZXNWYWx1ZXM6IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L3Byb3BlcnRpZXMvdmFsdWVzXCJcbiAgICBdLFxuICAgIGNyZWF0ZU9yVXBkYXRlRW52aXJvbm1lbnQ6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9XCJcbiAgICBdLFxuICAgIGNyZWF0ZU9yVXBkYXRlRmlsZUNvbnRlbnRzOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbnRlbnRzL3twYXRofVwiXSxcbiAgICBjcmVhdGVPcmdSdWxlc2V0OiBbXCJQT1NUIC9vcmdzL3tvcmd9L3J1bGVzZXRzXCJdLFxuICAgIGNyZWF0ZVBhZ2VzRGVwbG95bWVudDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXMvZGVwbG95bWVudHNcIl0sXG4gICAgY3JlYXRlUGFnZXNTaXRlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlc1wiXSxcbiAgICBjcmVhdGVSZWxlYXNlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlc1wiXSxcbiAgICBjcmVhdGVSZXBvUnVsZXNldDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHNcIl0sXG4gICAgY3JlYXRlVGFnUHJvdGVjdGlvbjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vdGFncy9wcm90ZWN0aW9uXCJdLFxuICAgIGNyZWF0ZVVzaW5nVGVtcGxhdGU6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve3RlbXBsYXRlX293bmVyfS97dGVtcGxhdGVfcmVwb30vZ2VuZXJhdGVcIlxuICAgIF0sXG4gICAgY3JlYXRlV2ViaG9vazogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3NcIl0sXG4gICAgZGVjbGluZUludml0YXRpb246IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL3JlcG9zaXRvcnlfaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wicmVwb3NcIiwgXCJkZWNsaW5lSW52aXRhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIGRlY2xpbmVJbnZpdGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL3JlcG9zaXRvcnlfaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZTogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfVwiXSxcbiAgICBkZWxldGVBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9uc1wiXG4gICAgXSxcbiAgICBkZWxldGVBZG1pbkJyYW5jaFByb3RlY3Rpb246IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL2VuZm9yY2VfYWRtaW5zXCJcbiAgICBdLFxuICAgIGRlbGV0ZUFuRW52aXJvbm1lbnQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9XCJcbiAgICBdLFxuICAgIGRlbGV0ZUF1dG9saW5rOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9saW5rcy97YXV0b2xpbmtfaWR9XCJdLFxuICAgIGRlbGV0ZUJyYW5jaFByb3RlY3Rpb246IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uXCJcbiAgICBdLFxuICAgIGRlbGV0ZUNvbW1pdENvbW1lbnQ6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIGRlbGV0ZUNvbW1pdFNpZ25hdHVyZVByb3RlY3Rpb246IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3NpZ25hdHVyZXNcIlxuICAgIF0sXG4gICAgZGVsZXRlRGVwbG95S2V5OiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2tleXMve2tleV9pZH1cIl0sXG4gICAgZGVsZXRlRGVwbG95bWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGxveW1lbnRzL3tkZXBsb3ltZW50X2lkfVwiXG4gICAgXSxcbiAgICBkZWxldGVEZXBsb3ltZW50QnJhbmNoUG9saWN5OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50LWJyYW5jaC1wb2xpY2llcy97YnJhbmNoX3BvbGljeV9pZH1cIlxuICAgIF0sXG4gICAgZGVsZXRlRmlsZTogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb250ZW50cy97cGF0aH1cIl0sXG4gICAgZGVsZXRlSW52aXRhdGlvbjogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfVwiXG4gICAgXSxcbiAgICBkZWxldGVPcmdSdWxlc2V0OiBbXCJERUxFVEUgL29yZ3Mve29yZ30vcnVsZXNldHMve3J1bGVzZXRfaWR9XCJdLFxuICAgIGRlbGV0ZVBhZ2VzU2l0ZTogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlc1wiXSxcbiAgICBkZWxldGVQdWxsUmVxdWVzdFJldmlld1Byb3RlY3Rpb246IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3B1bGxfcmVxdWVzdF9yZXZpZXdzXCJcbiAgICBdLFxuICAgIGRlbGV0ZVJlbGVhc2U6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9XCJdLFxuICAgIGRlbGV0ZVJlbGVhc2VBc3NldDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL2Fzc2V0cy97YXNzZXRfaWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZVJlcG9SdWxlc2V0OiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzL3tydWxlc2V0X2lkfVwiXSxcbiAgICBkZWxldGVUYWdQcm90ZWN0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vdGFncy9wcm90ZWN0aW9uL3t0YWdfcHJvdGVjdGlvbl9pZH1cIlxuICAgIF0sXG4gICAgZGVsZXRlV2ViaG9vazogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgZGlzYWJsZUF1dG9tYXRlZFNlY3VyaXR5Rml4ZXM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hdXRvbWF0ZWQtc2VjdXJpdHktZml4ZXNcIlxuICAgIF0sXG4gICAgZGlzYWJsZURlcGxveW1lbnRQcm90ZWN0aW9uUnVsZTogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudF9wcm90ZWN0aW9uX3J1bGVzL3twcm90ZWN0aW9uX3J1bGVfaWR9XCJcbiAgICBdLFxuICAgIGRpc2FibGVQcml2YXRlVnVsbmVyYWJpbGl0eVJlcG9ydGluZzogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3ByaXZhdGUtdnVsbmVyYWJpbGl0eS1yZXBvcnRpbmdcIlxuICAgIF0sXG4gICAgZGlzYWJsZVZ1bG5lcmFiaWxpdHlBbGVydHM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS92dWxuZXJhYmlsaXR5LWFsZXJ0c1wiXG4gICAgXSxcbiAgICBkb3dubG9hZEFyY2hpdmU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS96aXBiYWxsL3tyZWZ9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wicmVwb3NcIiwgXCJkb3dubG9hZFppcGJhbGxBcmNoaXZlXCJdIH1cbiAgICBdLFxuICAgIGRvd25sb2FkVGFyYmFsbEFyY2hpdmU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdGFyYmFsbC97cmVmfVwiXSxcbiAgICBkb3dubG9hZFppcGJhbGxBcmNoaXZlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3ppcGJhbGwve3JlZn1cIl0sXG4gICAgZW5hYmxlQXV0b21hdGVkU2VjdXJpdHlGaXhlczogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9tYXRlZC1zZWN1cml0eS1maXhlc1wiXG4gICAgXSxcbiAgICBlbmFibGVQcml2YXRlVnVsbmVyYWJpbGl0eVJlcG9ydGluZzogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3ByaXZhdGUtdnVsbmVyYWJpbGl0eS1yZXBvcnRpbmdcIlxuICAgIF0sXG4gICAgZW5hYmxlVnVsbmVyYWJpbGl0eUFsZXJ0czogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Z1bG5lcmFiaWxpdHktYWxlcnRzXCJcbiAgICBdLFxuICAgIGdlbmVyYXRlUmVsZWFzZU5vdGVzOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL2dlbmVyYXRlLW5vdGVzXCJcbiAgICBdLFxuICAgIGdldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfVwiXSxcbiAgICBnZXRBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9uc1wiXG4gICAgXSxcbiAgICBnZXRBZG1pbkJyYW5jaFByb3RlY3Rpb246IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL2VuZm9yY2VfYWRtaW5zXCJcbiAgICBdLFxuICAgIGdldEFsbERlcGxveW1lbnRQcm90ZWN0aW9uUnVsZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnRfcHJvdGVjdGlvbl9ydWxlc1wiXG4gICAgXSxcbiAgICBnZXRBbGxFbnZpcm9ubWVudHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzXCJdLFxuICAgIGdldEFsbFN0YXR1c0NoZWNrQ29udGV4dHM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3MvY29udGV4dHNcIlxuICAgIF0sXG4gICAgZ2V0QWxsVG9waWNzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RvcGljc1wiXSxcbiAgICBnZXRBcHBzV2l0aEFjY2Vzc1RvUHJvdGVjdGVkQnJhbmNoOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvYXBwc1wiXG4gICAgXSxcbiAgICBnZXRBdXRvbGluazogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hdXRvbGlua3Mve2F1dG9saW5rX2lkfVwiXSxcbiAgICBnZXRCcmFuY2g6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH1cIl0sXG4gICAgZ2V0QnJhbmNoUHJvdGVjdGlvbjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb25cIlxuICAgIF0sXG4gICAgZ2V0QnJhbmNoUnVsZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXMvYnJhbmNoZXMve2JyYW5jaH1cIl0sXG4gICAgZ2V0Q2xvbmVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RyYWZmaWMvY2xvbmVzXCJdLFxuICAgIGdldENvZGVGcmVxdWVuY3lTdGF0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGF0cy9jb2RlX2ZyZXF1ZW5jeVwiXSxcbiAgICBnZXRDb2xsYWJvcmF0b3JQZXJtaXNzaW9uTGV2ZWw6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX0vcGVybWlzc2lvblwiXG4gICAgXSxcbiAgICBnZXRDb21iaW5lZFN0YXR1c0ZvclJlZjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L3N0YXR1c1wiXSxcbiAgICBnZXRDb21taXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfVwiXSxcbiAgICBnZXRDb21taXRBY3Rpdml0eVN0YXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXRzL2NvbW1pdF9hY3Rpdml0eVwiXSxcbiAgICBnZXRDb21taXRDb21tZW50OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBnZXRDb21taXRTaWduYXR1cmVQcm90ZWN0aW9uOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zaWduYXR1cmVzXCJcbiAgICBdLFxuICAgIGdldENvbW11bml0eVByb2ZpbGVNZXRyaWNzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW11bml0eS9wcm9maWxlXCJdLFxuICAgIGdldENvbnRlbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29udGVudHMve3BhdGh9XCJdLFxuICAgIGdldENvbnRyaWJ1dG9yc1N0YXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXRzL2NvbnRyaWJ1dG9yc1wiXSxcbiAgICBnZXRDdXN0b21EZXBsb3ltZW50UHJvdGVjdGlvblJ1bGU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnRfcHJvdGVjdGlvbl9ydWxlcy97cHJvdGVjdGlvbl9ydWxlX2lkfVwiXG4gICAgXSxcbiAgICBnZXRDdXN0b21Qcm9wZXJ0aWVzVmFsdWVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Byb3BlcnRpZXMvdmFsdWVzXCJdLFxuICAgIGdldERlcGxveUtleTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9rZXlzL3trZXlfaWR9XCJdLFxuICAgIGdldERlcGxveW1lbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHMve2RlcGxveW1lbnRfaWR9XCJdLFxuICAgIGdldERlcGxveW1lbnRCcmFuY2hQb2xpY3k6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnQtYnJhbmNoLXBvbGljaWVzL3ticmFuY2hfcG9saWN5X2lkfVwiXG4gICAgXSxcbiAgICBnZXREZXBsb3ltZW50U3RhdHVzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHMve2RlcGxveW1lbnRfaWR9L3N0YXR1c2VzL3tzdGF0dXNfaWR9XCJcbiAgICBdLFxuICAgIGdldEVudmlyb25tZW50OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfVwiXG4gICAgXSxcbiAgICBnZXRMYXRlc3RQYWdlc0J1aWxkOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2J1aWxkcy9sYXRlc3RcIl0sXG4gICAgZ2V0TGF0ZXN0UmVsZWFzZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy9sYXRlc3RcIl0sXG4gICAgZ2V0T3JnUnVsZVN1aXRlOiBbXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHMvcnVsZS1zdWl0ZXMve3J1bGVfc3VpdGVfaWR9XCJdLFxuICAgIGdldE9yZ1J1bGVTdWl0ZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9ydWxlc2V0cy9ydWxlLXN1aXRlc1wiXSxcbiAgICBnZXRPcmdSdWxlc2V0OiBbXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHMve3J1bGVzZXRfaWR9XCJdLFxuICAgIGdldE9yZ1J1bGVzZXRzOiBbXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHNcIl0sXG4gICAgZ2V0UGFnZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXNcIl0sXG4gICAgZ2V0UGFnZXNCdWlsZDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9idWlsZHMve2J1aWxkX2lkfVwiXSxcbiAgICBnZXRQYWdlc0RlcGxveW1lbnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9kZXBsb3ltZW50cy97cGFnZXNfZGVwbG95bWVudF9pZH1cIlxuICAgIF0sXG4gICAgZ2V0UGFnZXNIZWFsdGhDaGVjazogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9oZWFsdGhcIl0sXG4gICAgZ2V0UGFydGljaXBhdGlvblN0YXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXRzL3BhcnRpY2lwYXRpb25cIl0sXG4gICAgZ2V0UHVsbFJlcXVlc3RSZXZpZXdQcm90ZWN0aW9uOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9wdWxsX3JlcXVlc3RfcmV2aWV3c1wiXG4gICAgXSxcbiAgICBnZXRQdW5jaENhcmRTdGF0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGF0cy9wdW5jaF9jYXJkXCJdLFxuICAgIGdldFJlYWRtZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWFkbWVcIl0sXG4gICAgZ2V0UmVhZG1lSW5EaXJlY3Rvcnk6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVhZG1lL3tkaXJ9XCJdLFxuICAgIGdldFJlbGVhc2U6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9XCJdLFxuICAgIGdldFJlbGVhc2VBc3NldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy9hc3NldHMve2Fzc2V0X2lkfVwiXSxcbiAgICBnZXRSZWxlYXNlQnlUYWc6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMvdGFncy97dGFnfVwiXSxcbiAgICBnZXRSZXBvUnVsZVN1aXRlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHMvcnVsZS1zdWl0ZXMve3J1bGVfc3VpdGVfaWR9XCJcbiAgICBdLFxuICAgIGdldFJlcG9SdWxlU3VpdGVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzL3J1bGUtc3VpdGVzXCJdLFxuICAgIGdldFJlcG9SdWxlc2V0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzL3tydWxlc2V0X2lkfVwiXSxcbiAgICBnZXRSZXBvUnVsZXNldHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHNcIl0sXG4gICAgZ2V0U3RhdHVzQ2hlY2tzUHJvdGVjdGlvbjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrc1wiXG4gICAgXSxcbiAgICBnZXRUZWFtc1dpdGhBY2Nlc3NUb1Byb3RlY3RlZEJyYW5jaDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL3RlYW1zXCJcbiAgICBdLFxuICAgIGdldFRvcFBhdGhzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RyYWZmaWMvcG9wdWxhci9wYXRoc1wiXSxcbiAgICBnZXRUb3BSZWZlcnJlcnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdHJhZmZpYy9wb3B1bGFyL3JlZmVycmVyc1wiXSxcbiAgICBnZXRVc2Vyc1dpdGhBY2Nlc3NUb1Byb3RlY3RlZEJyYW5jaDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL3VzZXJzXCJcbiAgICBdLFxuICAgIGdldFZpZXdzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RyYWZmaWMvdmlld3NcIl0sXG4gICAgZ2V0V2ViaG9vazogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgZ2V0V2ViaG9va0NvbmZpZ0ZvclJlcG86IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vY29uZmlnXCJcbiAgICBdLFxuICAgIGdldFdlYmhvb2tEZWxpdmVyeTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzL3tkZWxpdmVyeV9pZH1cIlxuICAgIF0sXG4gICAgbGlzdEFjdGl2aXRpZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aXZpdHlcIl0sXG4gICAgbGlzdEF1dG9saW5rczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hdXRvbGlua3NcIl0sXG4gICAgbGlzdEJyYW5jaGVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzXCJdLFxuICAgIGxpc3RCcmFuY2hlc0ZvckhlYWRDb21taXQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tjb21taXRfc2hhfS9icmFuY2hlcy13aGVyZS1oZWFkXCJcbiAgICBdLFxuICAgIGxpc3RDb2xsYWJvcmF0b3JzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbGxhYm9yYXRvcnNcIl0sXG4gICAgbGlzdENvbW1lbnRzRm9yQ29tbWl0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97Y29tbWl0X3NoYX0vY29tbWVudHNcIlxuICAgIF0sXG4gICAgbGlzdENvbW1pdENvbW1lbnRzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50c1wiXSxcbiAgICBsaXN0Q29tbWl0U3RhdHVzZXNGb3JSZWY6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L3N0YXR1c2VzXCJcbiAgICBdLFxuICAgIGxpc3RDb21taXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHNcIl0sXG4gICAgbGlzdENvbnRyaWJ1dG9yczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb250cmlidXRvcnNcIl0sXG4gICAgbGlzdEN1c3RvbURlcGxveW1lbnRSdWxlSW50ZWdyYXRpb25zOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50X3Byb3RlY3Rpb25fcnVsZXMvYXBwc1wiXG4gICAgXSxcbiAgICBsaXN0RGVwbG95S2V5czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9rZXlzXCJdLFxuICAgIGxpc3REZXBsb3ltZW50QnJhbmNoUG9saWNpZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnQtYnJhbmNoLXBvbGljaWVzXCJcbiAgICBdLFxuICAgIGxpc3REZXBsb3ltZW50U3RhdHVzZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50cy97ZGVwbG95bWVudF9pZH0vc3RhdHVzZXNcIlxuICAgIF0sXG4gICAgbGlzdERlcGxveW1lbnRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGxveW1lbnRzXCJdLFxuICAgIGxpc3RGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3JlcG9zXCJdLFxuICAgIGxpc3RGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9yZXBvc1wiXSxcbiAgICBsaXN0Rm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3JlcG9zXCJdLFxuICAgIGxpc3RGb3JrczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9mb3Jrc1wiXSxcbiAgICBsaXN0SW52aXRhdGlvbnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaW52aXRhdGlvbnNcIl0sXG4gICAgbGlzdEludml0YXRpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9yZXBvc2l0b3J5X2ludml0YXRpb25zXCJdLFxuICAgIGxpc3RMYW5ndWFnZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbGFuZ3VhZ2VzXCJdLFxuICAgIGxpc3RQYWdlc0J1aWxkczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9idWlsZHNcIl0sXG4gICAgbGlzdFB1YmxpYzogW1wiR0VUIC9yZXBvc2l0b3JpZXNcIl0sXG4gICAgbGlzdFB1bGxSZXF1ZXN0c0Fzc29jaWF0ZWRXaXRoQ29tbWl0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97Y29tbWl0X3NoYX0vcHVsbHNcIlxuICAgIF0sXG4gICAgbGlzdFJlbGVhc2VBc3NldHM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vYXNzZXRzXCJcbiAgICBdLFxuICAgIGxpc3RSZWxlYXNlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlc1wiXSxcbiAgICBsaXN0VGFnUHJvdGVjdGlvbjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YWdzL3Byb3RlY3Rpb25cIl0sXG4gICAgbGlzdFRhZ3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdGFnc1wiXSxcbiAgICBsaXN0VGVhbXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdGVhbXNcIl0sXG4gICAgbGlzdFdlYmhvb2tEZWxpdmVyaWVzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXNcIlxuICAgIF0sXG4gICAgbGlzdFdlYmhvb2tzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzXCJdLFxuICAgIG1lcmdlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9tZXJnZXNcIl0sXG4gICAgbWVyZ2VVcHN0cmVhbTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWVyZ2UtdXBzdHJlYW1cIl0sXG4gICAgcGluZ1dlYmhvb2s6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS9waW5nc1wiXSxcbiAgICByZWRlbGl2ZXJXZWJob29rRGVsaXZlcnk6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXMve2RlbGl2ZXJ5X2lkfS9hdHRlbXB0c1wiXG4gICAgXSxcbiAgICByZW1vdmVBcHBBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy9hcHBzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgbWFwVG9EYXRhOiBcImFwcHNcIiB9XG4gICAgXSxcbiAgICByZW1vdmVDb2xsYWJvcmF0b3I6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX1cIlxuICAgIF0sXG4gICAgcmVtb3ZlU3RhdHVzQ2hlY2tDb250ZXh0czogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrcy9jb250ZXh0c1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJjb250ZXh0c1wiIH1cbiAgICBdLFxuICAgIHJlbW92ZVN0YXR1c0NoZWNrUHJvdGVjdGlvbjogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrc1wiXG4gICAgXSxcbiAgICByZW1vdmVUZWFtQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdGVhbXNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwidGVhbXNcIiB9XG4gICAgXSxcbiAgICByZW1vdmVVc2VyQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdXNlcnNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwidXNlcnNcIiB9XG4gICAgXSxcbiAgICByZW5hbWVCcmFuY2g6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3JlbmFtZVwiXSxcbiAgICByZXBsYWNlQWxsVG9waWNzOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RvcGljc1wiXSxcbiAgICByZXF1ZXN0UGFnZXNCdWlsZDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXMvYnVpbGRzXCJdLFxuICAgIHNldEFkbWluQnJhbmNoUHJvdGVjdGlvbjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL2VuZm9yY2VfYWRtaW5zXCJcbiAgICBdLFxuICAgIHNldEFwcEFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL2FwcHNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwiYXBwc1wiIH1cbiAgICBdLFxuICAgIHNldFN0YXR1c0NoZWNrQ29udGV4dHM6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3MvY29udGV4dHNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwiY29udGV4dHNcIiB9XG4gICAgXSxcbiAgICBzZXRUZWFtQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdGVhbXNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwidGVhbXNcIiB9XG4gICAgXSxcbiAgICBzZXRVc2VyQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdXNlcnNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwidXNlcnNcIiB9XG4gICAgXSxcbiAgICB0ZXN0UHVzaFdlYmhvb2s6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS90ZXN0c1wiXSxcbiAgICB0cmFuc2ZlcjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vdHJhbnNmZXJcIl0sXG4gICAgdXBkYXRlOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb31cIl0sXG4gICAgdXBkYXRlQnJhbmNoUHJvdGVjdGlvbjogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb25cIlxuICAgIF0sXG4gICAgdXBkYXRlQ29tbWl0Q29tbWVudDogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICB1cGRhdGVEZXBsb3ltZW50QnJhbmNoUG9saWN5OiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50LWJyYW5jaC1wb2xpY2llcy97YnJhbmNoX3BvbGljeV9pZH1cIlxuICAgIF0sXG4gICAgdXBkYXRlSW5mb3JtYXRpb25BYm91dFBhZ2VzU2l0ZTogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlc1wiXSxcbiAgICB1cGRhdGVJbnZpdGF0aW9uOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIlxuICAgIF0sXG4gICAgdXBkYXRlT3JnUnVsZXNldDogW1wiUFVUIC9vcmdzL3tvcmd9L3J1bGVzZXRzL3tydWxlc2V0X2lkfVwiXSxcbiAgICB1cGRhdGVQdWxsUmVxdWVzdFJldmlld1Byb3RlY3Rpb246IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfcHVsbF9yZXF1ZXN0X3Jldmlld3NcIlxuICAgIF0sXG4gICAgdXBkYXRlUmVsZWFzZTogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfVwiXSxcbiAgICB1cGRhdGVSZWxlYXNlQXNzZXQ6IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL2Fzc2V0cy97YXNzZXRfaWR9XCJcbiAgICBdLFxuICAgIHVwZGF0ZVJlcG9SdWxlc2V0OiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzL3tydWxlc2V0X2lkfVwiXSxcbiAgICB1cGRhdGVTdGF0dXNDaGVja1BvdGVjdGlvbjogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zdGF0dXNfY2hlY2tzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wicmVwb3NcIiwgXCJ1cGRhdGVTdGF0dXNDaGVja1Byb3RlY3Rpb25cIl0gfVxuICAgIF0sXG4gICAgdXBkYXRlU3RhdHVzQ2hlY2tQcm90ZWN0aW9uOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3NcIlxuICAgIF0sXG4gICAgdXBkYXRlV2ViaG9vazogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfVwiXSxcbiAgICB1cGRhdGVXZWJob29rQ29uZmlnRm9yUmVwbzogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L2NvbmZpZ1wiXG4gICAgXSxcbiAgICB1cGxvYWRSZWxlYXNlQXNzZXQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9L2Fzc2V0c3s/bmFtZSxsYWJlbH1cIixcbiAgICAgIHsgYmFzZVVybDogXCJodHRwczovL3VwbG9hZHMuZ2l0aHViLmNvbVwiIH1cbiAgICBdXG4gIH0sXG4gIHNlYXJjaDoge1xuICAgIGNvZGU6IFtcIkdFVCAvc2VhcmNoL2NvZGVcIl0sXG4gICAgY29tbWl0czogW1wiR0VUIC9zZWFyY2gvY29tbWl0c1wiXSxcbiAgICBpc3N1ZXNBbmRQdWxsUmVxdWVzdHM6IFtcIkdFVCAvc2VhcmNoL2lzc3Vlc1wiXSxcbiAgICBsYWJlbHM6IFtcIkdFVCAvc2VhcmNoL2xhYmVsc1wiXSxcbiAgICByZXBvczogW1wiR0VUIC9zZWFyY2gvcmVwb3NpdG9yaWVzXCJdLFxuICAgIHRvcGljczogW1wiR0VUIC9zZWFyY2gvdG9waWNzXCJdLFxuICAgIHVzZXJzOiBbXCJHRVQgL3NlYXJjaC91c2Vyc1wiXVxuICB9LFxuICBzZWNyZXRTY2FubmluZzoge1xuICAgIGdldEFsZXJ0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfVwiXG4gICAgXSxcbiAgICBsaXN0QWxlcnRzRm9yRW50ZXJwcmlzZTogW1xuICAgICAgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzXCJcbiAgICBdLFxuICAgIGxpc3RBbGVydHNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzXCJdLFxuICAgIGxpc3RBbGVydHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3JldC1zY2FubmluZy9hbGVydHNcIl0sXG4gICAgbGlzdExvY2F0aW9uc0ZvckFsZXJ0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9sb2NhdGlvbnNcIlxuICAgIF0sXG4gICAgdXBkYXRlQWxlcnQ6IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3JldC1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn1cIlxuICAgIF1cbiAgfSxcbiAgc2VjdXJpdHlBZHZpc29yaWVzOiB7XG4gICAgY3JlYXRlRm9yazogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWN1cml0eS1hZHZpc29yaWVzL3tnaHNhX2lkfS9mb3Jrc1wiXG4gICAgXSxcbiAgICBjcmVhdGVQcml2YXRlVnVsbmVyYWJpbGl0eVJlcG9ydDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWN1cml0eS1hZHZpc29yaWVzL3JlcG9ydHNcIlxuICAgIF0sXG4gICAgY3JlYXRlUmVwb3NpdG9yeUFkdmlzb3J5OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3VyaXR5LWFkdmlzb3JpZXNcIlxuICAgIF0sXG4gICAgY3JlYXRlUmVwb3NpdG9yeUFkdmlzb3J5Q3ZlUmVxdWVzdDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWN1cml0eS1hZHZpc29yaWVzL3tnaHNhX2lkfS9jdmVcIlxuICAgIF0sXG4gICAgZ2V0R2xvYmFsQWR2aXNvcnk6IFtcIkdFVCAvYWR2aXNvcmllcy97Z2hzYV9pZH1cIl0sXG4gICAgZ2V0UmVwb3NpdG9yeUFkdmlzb3J5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjdXJpdHktYWR2aXNvcmllcy97Z2hzYV9pZH1cIlxuICAgIF0sXG4gICAgbGlzdEdsb2JhbEFkdmlzb3JpZXM6IFtcIkdFVCAvYWR2aXNvcmllc1wiXSxcbiAgICBsaXN0T3JnUmVwb3NpdG9yeUFkdmlzb3JpZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9zZWN1cml0eS1hZHZpc29yaWVzXCJdLFxuICAgIGxpc3RSZXBvc2l0b3J5QWR2aXNvcmllczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWN1cml0eS1hZHZpc29yaWVzXCJdLFxuICAgIHVwZGF0ZVJlcG9zaXRvcnlBZHZpc29yeTogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjdXJpdHktYWR2aXNvcmllcy97Z2hzYV9pZH1cIlxuICAgIF1cbiAgfSxcbiAgdGVhbXM6IHtcbiAgICBhZGRPclVwZGF0ZU1lbWJlcnNoaXBGb3JVc2VySW5Pcmc6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L21lbWJlcnNoaXBzL3t1c2VybmFtZX1cIlxuICAgIF0sXG4gICAgYWRkT3JVcGRhdGVQcm9qZWN0UGVybWlzc2lvbnNJbk9yZzogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcHJvamVjdHMve3Byb2plY3RfaWR9XCJcbiAgICBdLFxuICAgIGFkZE9yVXBkYXRlUmVwb1Blcm1pc3Npb25zSW5Pcmc6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3JlcG9zL3tvd25lcn0ve3JlcG99XCJcbiAgICBdLFxuICAgIGNoZWNrUGVybWlzc2lvbnNGb3JQcm9qZWN0SW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3Byb2plY3RzL3twcm9qZWN0X2lkfVwiXG4gICAgXSxcbiAgICBjaGVja1Blcm1pc3Npb25zRm9yUmVwb0luT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9yZXBvcy97b3duZXJ9L3tyZXBvfVwiXG4gICAgXSxcbiAgICBjcmVhdGU6IFtcIlBPU1QgL29yZ3Mve29yZ30vdGVhbXNcIl0sXG4gICAgY3JlYXRlRGlzY3Vzc2lvbkNvbW1lbnRJbk9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHNcIlxuICAgIF0sXG4gICAgY3JlYXRlRGlzY3Vzc2lvbkluT3JnOiBbXCJQT1NUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zXCJdLFxuICAgIGRlbGV0ZURpc2N1c3Npb25Db21tZW50SW5Pcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfbnVtYmVyfVwiXG4gICAgXSxcbiAgICBkZWxldGVEaXNjdXNzaW9uSW5Pcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn1cIlxuICAgIF0sXG4gICAgZGVsZXRlSW5Pcmc6IFtcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfVwiXSxcbiAgICBnZXRCeU5hbWU6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfVwiXSxcbiAgICBnZXREaXNjdXNzaW9uQ29tbWVudEluT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn1cIlxuICAgIF0sXG4gICAgZ2V0RGlzY3Vzc2lvbkluT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9XCJcbiAgICBdLFxuICAgIGdldE1lbWJlcnNoaXBGb3JVc2VySW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L21lbWJlcnNoaXBzL3t1c2VybmFtZX1cIlxuICAgIF0sXG4gICAgbGlzdDogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zXCJdLFxuICAgIGxpc3RDaGlsZEluT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vdGVhbXNcIl0sXG4gICAgbGlzdERpc2N1c3Npb25Db21tZW50c0luT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzXCJcbiAgICBdLFxuICAgIGxpc3REaXNjdXNzaW9uc0luT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnNcIl0sXG4gICAgbGlzdEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvdGVhbXNcIl0sXG4gICAgbGlzdE1lbWJlcnNJbk9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L21lbWJlcnNcIl0sXG4gICAgbGlzdFBlbmRpbmdJbnZpdGF0aW9uc0luT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9pbnZpdGF0aW9uc1wiXG4gICAgXSxcbiAgICBsaXN0UHJvamVjdHNJbk9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3Byb2plY3RzXCJdLFxuICAgIGxpc3RSZXBvc0luT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcmVwb3NcIl0sXG4gICAgcmVtb3ZlTWVtYmVyc2hpcEZvclVzZXJJbk9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiXG4gICAgXSxcbiAgICByZW1vdmVQcm9qZWN0SW5Pcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3Byb2plY3RzL3twcm9qZWN0X2lkfVwiXG4gICAgXSxcbiAgICByZW1vdmVSZXBvSW5Pcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3JlcG9zL3tvd25lcn0ve3JlcG99XCJcbiAgICBdLFxuICAgIHVwZGF0ZURpc2N1c3Npb25Db21tZW50SW5Pcmc6IFtcbiAgICAgIFwiUEFUQ0ggL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9XCJcbiAgICBdLFxuICAgIHVwZGF0ZURpc2N1c3Npb25Jbk9yZzogW1xuICAgICAgXCJQQVRDSCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9XCJcbiAgICBdLFxuICAgIHVwZGF0ZUluT3JnOiBbXCJQQVRDSCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfVwiXVxuICB9LFxuICB1c2Vyczoge1xuICAgIGFkZEVtYWlsRm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJQT1NUIC91c2VyL2VtYWlsc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiYWRkRW1haWxGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBhZGRFbWFpbEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL2VtYWlsc1wiXSxcbiAgICBhZGRTb2NpYWxBY2NvdW50Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvc29jaWFsX2FjY291bnRzXCJdLFxuICAgIGJsb2NrOiBbXCJQVVQgL3VzZXIvYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgY2hlY2tCbG9ja2VkOiBbXCJHRVQgL3VzZXIvYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgY2hlY2tGb2xsb3dpbmdGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZm9sbG93aW5nL3t0YXJnZXRfdXNlcn1cIl0sXG4gICAgY2hlY2tQZXJzb25Jc0ZvbGxvd2VkQnlBdXRoZW50aWNhdGVkOiBbXCJHRVQgL3VzZXIvZm9sbG93aW5nL3t1c2VybmFtZX1cIl0sXG4gICAgY3JlYXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJQT1NUIC91c2VyL2dwZ19rZXlzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJjcmVhdGVHcGdLZXlGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBjcmVhdGVHcGdLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9ncGdfa2V5c1wiXSxcbiAgICBjcmVhdGVQdWJsaWNTc2hLZXlGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIlBPU1QgL3VzZXIva2V5c1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiY3JlYXRlUHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfVxuICAgIF0sXG4gICAgY3JlYXRlUHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIva2V5c1wiXSxcbiAgICBjcmVhdGVTc2hTaWduaW5nS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvc3NoX3NpZ25pbmdfa2V5c1wiXSxcbiAgICBkZWxldGVFbWFpbEZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL2VtYWlsc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiZGVsZXRlRW1haWxGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBkZWxldGVFbWFpbEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvZW1haWxzXCJdLFxuICAgIGRlbGV0ZUdwZ0tleUZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL2dwZ19rZXlzL3tncGdfa2V5X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiZGVsZXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfVxuICAgIF0sXG4gICAgZGVsZXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9ncGdfa2V5cy97Z3BnX2tleV9pZH1cIl0sXG4gICAgZGVsZXRlUHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJERUxFVEUgL3VzZXIva2V5cy97a2V5X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiZGVsZXRlUHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfVxuICAgIF0sXG4gICAgZGVsZXRlUHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9rZXlzL3trZXlfaWR9XCJdLFxuICAgIGRlbGV0ZVNvY2lhbEFjY291bnRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiREVMRVRFIC91c2VyL3NvY2lhbF9hY2NvdW50c1wiXSxcbiAgICBkZWxldGVTc2hTaWduaW5nS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL3NzaF9zaWduaW5nX2tleXMve3NzaF9zaWduaW5nX2tleV9pZH1cIlxuICAgIF0sXG4gICAgZm9sbG93OiBbXCJQVVQgL3VzZXIvZm9sbG93aW5nL3t1c2VybmFtZX1cIl0sXG4gICAgZ2V0QXV0aGVudGljYXRlZDogW1wiR0VUIC91c2VyXCJdLFxuICAgIGdldEJ5VXNlcm5hbWU6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfVwiXSxcbiAgICBnZXRDb250ZXh0Rm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2hvdmVyY2FyZFwiXSxcbiAgICBnZXRHcGdLZXlGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIkdFVCAvdXNlci9ncGdfa2V5cy97Z3BnX2tleV9pZH1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImdldEdwZ0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIGdldEdwZ0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvZ3BnX2tleXMve2dwZ19rZXlfaWR9XCJdLFxuICAgIGdldFB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL2tleXMve2tleV9pZH1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImdldFB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIGdldFB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIva2V5cy97a2V5X2lkfVwiXSxcbiAgICBnZXRTc2hTaWduaW5nS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL3NzaF9zaWduaW5nX2tleXMve3NzaF9zaWduaW5nX2tleV9pZH1cIlxuICAgIF0sXG4gICAgbGlzdDogW1wiR0VUIC91c2Vyc1wiXSxcbiAgICBsaXN0QmxvY2tlZEJ5QXV0aGVudGljYXRlZDogW1xuICAgICAgXCJHRVQgL3VzZXIvYmxvY2tzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJsaXN0QmxvY2tlZEJ5QXV0aGVudGljYXRlZFVzZXJcIl0gfVxuICAgIF0sXG4gICAgbGlzdEJsb2NrZWRCeUF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvYmxvY2tzXCJdLFxuICAgIGxpc3RFbWFpbHNGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIkdFVCAvdXNlci9lbWFpbHNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImxpc3RFbWFpbHNGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBsaXN0RW1haWxzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9lbWFpbHNcIl0sXG4gICAgbGlzdEZvbGxvd2VkQnlBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIkdFVCAvdXNlci9mb2xsb3dpbmdcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImxpc3RGb2xsb3dlZEJ5QXV0aGVudGljYXRlZFVzZXJcIl0gfVxuICAgIF0sXG4gICAgbGlzdEZvbGxvd2VkQnlBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2ZvbGxvd2luZ1wiXSxcbiAgICBsaXN0Rm9sbG93ZXJzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9mb2xsb3dlcnNcIl0sXG4gICAgbGlzdEZvbGxvd2Vyc0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9mb2xsb3dlcnNcIl0sXG4gICAgbGlzdEZvbGxvd2luZ0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9mb2xsb3dpbmdcIl0sXG4gICAgbGlzdEdwZ0tleXNGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIkdFVCAvdXNlci9ncGdfa2V5c1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwibGlzdEdwZ0tleXNGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBsaXN0R3BnS2V5c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvZ3BnX2tleXNcIl0sXG4gICAgbGlzdEdwZ0tleXNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZ3BnX2tleXNcIl0sXG4gICAgbGlzdFB1YmxpY0VtYWlsc0ZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL3B1YmxpY19lbWFpbHNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImxpc3RQdWJsaWNFbWFpbHNGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBsaXN0UHVibGljRW1haWxzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9wdWJsaWNfZW1haWxzXCJdLFxuICAgIGxpc3RQdWJsaWNLZXlzRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2tleXNcIl0sXG4gICAgbGlzdFB1YmxpY1NzaEtleXNGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIkdFVCAvdXNlci9rZXlzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJsaXN0UHVibGljU3NoS2V5c0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIGxpc3RQdWJsaWNTc2hLZXlzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9rZXlzXCJdLFxuICAgIGxpc3RTb2NpYWxBY2NvdW50c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvc29jaWFsX2FjY291bnRzXCJdLFxuICAgIGxpc3RTb2NpYWxBY2NvdW50c0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zb2NpYWxfYWNjb3VudHNcIl0sXG4gICAgbGlzdFNzaFNpZ25pbmdLZXlzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9zc2hfc2lnbmluZ19rZXlzXCJdLFxuICAgIGxpc3RTc2hTaWduaW5nS2V5c0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zc2hfc2lnbmluZ19rZXlzXCJdLFxuICAgIHNldFByaW1hcnlFbWFpbFZpc2liaWxpdHlGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIlBBVENIIC91c2VyL2VtYWlsL3Zpc2liaWxpdHlcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcInNldFByaW1hcnlFbWFpbFZpc2liaWxpdHlGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBzZXRQcmltYXJ5RW1haWxWaXNpYmlsaXR5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUEFUQ0ggL3VzZXIvZW1haWwvdmlzaWJpbGl0eVwiXG4gICAgXSxcbiAgICB1bmJsb2NrOiBbXCJERUxFVEUgL3VzZXIvYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgdW5mb2xsb3c6IFtcIkRFTEVURSAvdXNlci9mb2xsb3dpbmcve3VzZXJuYW1lfVwiXSxcbiAgICB1cGRhdGVBdXRoZW50aWNhdGVkOiBbXCJQQVRDSCAvdXNlclwiXVxuICB9XG59O1xudmFyIGVuZHBvaW50c19kZWZhdWx0ID0gRW5kcG9pbnRzO1xuXG4vLyBwa2cvZGlzdC1zcmMvZW5kcG9pbnRzLXRvLW1ldGhvZHMuanNcbnZhciBlbmRwb2ludE1ldGhvZHNNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuZm9yIChjb25zdCBbc2NvcGUsIGVuZHBvaW50c10gb2YgT2JqZWN0LmVudHJpZXMoZW5kcG9pbnRzX2RlZmF1bHQpKSB7XG4gIGZvciAoY29uc3QgW21ldGhvZE5hbWUsIGVuZHBvaW50XSBvZiBPYmplY3QuZW50cmllcyhlbmRwb2ludHMpKSB7XG4gICAgY29uc3QgW3JvdXRlLCBkZWZhdWx0cywgZGVjb3JhdGlvbnNdID0gZW5kcG9pbnQ7XG4gICAgY29uc3QgW21ldGhvZCwgdXJsXSA9IHJvdXRlLnNwbGl0KC8gLyk7XG4gICAgY29uc3QgZW5kcG9pbnREZWZhdWx0cyA9IE9iamVjdC5hc3NpZ24oXG4gICAgICB7XG4gICAgICAgIG1ldGhvZCxcbiAgICAgICAgdXJsXG4gICAgICB9LFxuICAgICAgZGVmYXVsdHNcbiAgICApO1xuICAgIGlmICghZW5kcG9pbnRNZXRob2RzTWFwLmhhcyhzY29wZSkpIHtcbiAgICAgIGVuZHBvaW50TWV0aG9kc01hcC5zZXQoc2NvcGUsIC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCkpO1xuICAgIH1cbiAgICBlbmRwb2ludE1ldGhvZHNNYXAuZ2V0KHNjb3BlKS5zZXQobWV0aG9kTmFtZSwge1xuICAgICAgc2NvcGUsXG4gICAgICBtZXRob2ROYW1lLFxuICAgICAgZW5kcG9pbnREZWZhdWx0cyxcbiAgICAgIGRlY29yYXRpb25zXG4gICAgfSk7XG4gIH1cbn1cbnZhciBoYW5kbGVyID0ge1xuICBoYXMoeyBzY29wZSB9LCBtZXRob2ROYW1lKSB7XG4gICAgcmV0dXJuIGVuZHBvaW50TWV0aG9kc01hcC5nZXQoc2NvcGUpLmhhcyhtZXRob2ROYW1lKTtcbiAgfSxcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgbWV0aG9kTmFtZSkge1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdGhpcy5nZXQodGFyZ2V0LCBtZXRob2ROYW1lKSxcbiAgICAgIC8vIGVuc3VyZXMgbWV0aG9kIGlzIGluIHRoZSBjYWNoZVxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgfTtcbiAgfSxcbiAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBtZXRob2ROYW1lLCBkZXNjcmlwdG9yKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldC5jYWNoZSwgbWV0aG9kTmFtZSwgZGVzY3JpcHRvcik7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG4gIGRlbGV0ZVByb3BlcnR5KHRhcmdldCwgbWV0aG9kTmFtZSkge1xuICAgIGRlbGV0ZSB0YXJnZXQuY2FjaGVbbWV0aG9kTmFtZV07XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG4gIG93bktleXMoeyBzY29wZSB9KSB7XG4gICAgcmV0dXJuIFsuLi5lbmRwb2ludE1ldGhvZHNNYXAuZ2V0KHNjb3BlKS5rZXlzKCldO1xuICB9LFxuICBzZXQodGFyZ2V0LCBtZXRob2ROYW1lLCB2YWx1ZSkge1xuICAgIHJldHVybiB0YXJnZXQuY2FjaGVbbWV0aG9kTmFtZV0gPSB2YWx1ZTtcbiAgfSxcbiAgZ2V0KHsgb2N0b2tpdCwgc2NvcGUsIGNhY2hlIH0sIG1ldGhvZE5hbWUpIHtcbiAgICBpZiAoY2FjaGVbbWV0aG9kTmFtZV0pIHtcbiAgICAgIHJldHVybiBjYWNoZVttZXRob2ROYW1lXTtcbiAgICB9XG4gICAgY29uc3QgbWV0aG9kID0gZW5kcG9pbnRNZXRob2RzTWFwLmdldChzY29wZSkuZ2V0KG1ldGhvZE5hbWUpO1xuICAgIGlmICghbWV0aG9kKSB7XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cbiAgICBjb25zdCB7IGVuZHBvaW50RGVmYXVsdHMsIGRlY29yYXRpb25zIH0gPSBtZXRob2Q7XG4gICAgaWYgKGRlY29yYXRpb25zKSB7XG4gICAgICBjYWNoZVttZXRob2ROYW1lXSA9IGRlY29yYXRlKFxuICAgICAgICBvY3Rva2l0LFxuICAgICAgICBzY29wZSxcbiAgICAgICAgbWV0aG9kTmFtZSxcbiAgICAgICAgZW5kcG9pbnREZWZhdWx0cyxcbiAgICAgICAgZGVjb3JhdGlvbnNcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhY2hlW21ldGhvZE5hbWVdID0gb2N0b2tpdC5yZXF1ZXN0LmRlZmF1bHRzKGVuZHBvaW50RGVmYXVsdHMpO1xuICAgIH1cbiAgICByZXR1cm4gY2FjaGVbbWV0aG9kTmFtZV07XG4gIH1cbn07XG5mdW5jdGlvbiBlbmRwb2ludHNUb01ldGhvZHMob2N0b2tpdCkge1xuICBjb25zdCBuZXdNZXRob2RzID0ge307XG4gIGZvciAoY29uc3Qgc2NvcGUgb2YgZW5kcG9pbnRNZXRob2RzTWFwLmtleXMoKSkge1xuICAgIG5ld01ldGhvZHNbc2NvcGVdID0gbmV3IFByb3h5KHsgb2N0b2tpdCwgc2NvcGUsIGNhY2hlOiB7fSB9LCBoYW5kbGVyKTtcbiAgfVxuICByZXR1cm4gbmV3TWV0aG9kcztcbn1cbmZ1bmN0aW9uIGRlY29yYXRlKG9jdG9raXQsIHNjb3BlLCBtZXRob2ROYW1lLCBkZWZhdWx0cywgZGVjb3JhdGlvbnMpIHtcbiAgY29uc3QgcmVxdWVzdFdpdGhEZWZhdWx0cyA9IG9jdG9raXQucmVxdWVzdC5kZWZhdWx0cyhkZWZhdWx0cyk7XG4gIGZ1bmN0aW9uIHdpdGhEZWNvcmF0aW9ucyguLi5hcmdzKSB7XG4gICAgbGV0IG9wdGlvbnMgPSByZXF1ZXN0V2l0aERlZmF1bHRzLmVuZHBvaW50Lm1lcmdlKC4uLmFyZ3MpO1xuICAgIGlmIChkZWNvcmF0aW9ucy5tYXBUb0RhdGEpIHtcbiAgICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLCB7XG4gICAgICAgIGRhdGE6IG9wdGlvbnNbZGVjb3JhdGlvbnMubWFwVG9EYXRhXSxcbiAgICAgICAgW2RlY29yYXRpb25zLm1hcFRvRGF0YV06IHZvaWQgMFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVxdWVzdFdpdGhEZWZhdWx0cyhvcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKGRlY29yYXRpb25zLnJlbmFtZWQpIHtcbiAgICAgIGNvbnN0IFtuZXdTY29wZSwgbmV3TWV0aG9kTmFtZV0gPSBkZWNvcmF0aW9ucy5yZW5hbWVkO1xuICAgICAgb2N0b2tpdC5sb2cud2FybihcbiAgICAgICAgYG9jdG9raXQuJHtzY29wZX0uJHttZXRob2ROYW1lfSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gb2N0b2tpdC4ke25ld1Njb3BlfS4ke25ld01ldGhvZE5hbWV9KClgXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoZGVjb3JhdGlvbnMuZGVwcmVjYXRlZCkge1xuICAgICAgb2N0b2tpdC5sb2cud2FybihkZWNvcmF0aW9ucy5kZXByZWNhdGVkKTtcbiAgICB9XG4gICAgaWYgKGRlY29yYXRpb25zLnJlbmFtZWRQYXJhbWV0ZXJzKSB7XG4gICAgICBjb25zdCBvcHRpb25zMiA9IHJlcXVlc3RXaXRoRGVmYXVsdHMuZW5kcG9pbnQubWVyZ2UoLi4uYXJncyk7XG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCBhbGlhc10gb2YgT2JqZWN0LmVudHJpZXMoXG4gICAgICAgIGRlY29yYXRpb25zLnJlbmFtZWRQYXJhbWV0ZXJzXG4gICAgICApKSB7XG4gICAgICAgIGlmIChuYW1lIGluIG9wdGlvbnMyKSB7XG4gICAgICAgICAgb2N0b2tpdC5sb2cud2FybihcbiAgICAgICAgICAgIGBcIiR7bmFtZX1cIiBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZCBmb3IgXCJvY3Rva2l0LiR7c2NvcGV9LiR7bWV0aG9kTmFtZX0oKVwiLiBVc2UgXCIke2FsaWFzfVwiIGluc3RlYWRgXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoIShhbGlhcyBpbiBvcHRpb25zMikpIHtcbiAgICAgICAgICAgIG9wdGlvbnMyW2FsaWFzXSA9IG9wdGlvbnMyW25hbWVdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkZWxldGUgb3B0aW9uczJbbmFtZV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXF1ZXN0V2l0aERlZmF1bHRzKG9wdGlvbnMyKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcXVlc3RXaXRoRGVmYXVsdHMoLi4uYXJncyk7XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24od2l0aERlY29yYXRpb25zLCByZXF1ZXN0V2l0aERlZmF1bHRzKTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG5mdW5jdGlvbiByZXN0RW5kcG9pbnRNZXRob2RzKG9jdG9raXQpIHtcbiAgY29uc3QgYXBpID0gZW5kcG9pbnRzVG9NZXRob2RzKG9jdG9raXQpO1xuICByZXR1cm4ge1xuICAgIHJlc3Q6IGFwaVxuICB9O1xufVxucmVzdEVuZHBvaW50TWV0aG9kcy5WRVJTSU9OID0gVkVSU0lPTjtcbmZ1bmN0aW9uIGxlZ2FjeVJlc3RFbmRwb2ludE1ldGhvZHMob2N0b2tpdCkge1xuICBjb25zdCBhcGkgPSBlbmRwb2ludHNUb01ldGhvZHMob2N0b2tpdCk7XG4gIHJldHVybiB7XG4gICAgLi4uYXBpLFxuICAgIHJlc3Q6IGFwaVxuICB9O1xufVxubGVnYWN5UmVzdEVuZHBvaW50TWV0aG9kcy5WRVJTSU9OID0gVkVSU0lPTjtcbi8vIEFubm90YXRlIHRoZSBDb21tb25KUyBleHBvcnQgbmFtZXMgZm9yIEVTTSBpbXBvcnQgaW4gbm9kZTpcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICBsZWdhY3lSZXN0RW5kcG9pbnRNZXRob2RzLFxuICByZXN0RW5kcG9pbnRNZXRob2RzXG59KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIF9fZ2V0T3duUHJvcE5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XG52YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX2V4cG9ydCA9ICh0YXJnZXQsIGFsbCkgPT4ge1xuICBmb3IgKHZhciBuYW1lIGluIGFsbClcbiAgICBfX2RlZlByb3AodGFyZ2V0LCBuYW1lLCB7IGdldDogYWxsW25hbWVdLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xufTtcbnZhciBfX2NvcHlQcm9wcyA9ICh0bywgZnJvbSwgZXhjZXB0LCBkZXNjKSA9PiB7XG4gIGlmIChmcm9tICYmIHR5cGVvZiBmcm9tID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBmcm9tID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBmb3IgKGxldCBrZXkgb2YgX19nZXRPd25Qcm9wTmFtZXMoZnJvbSkpXG4gICAgICBpZiAoIV9faGFzT3duUHJvcC5jYWxsKHRvLCBrZXkpICYmIGtleSAhPT0gZXhjZXB0KVxuICAgICAgICBfX2RlZlByb3AodG8sIGtleSwgeyBnZXQ6ICgpID0+IGZyb21ba2V5XSwgZW51bWVyYWJsZTogIShkZXNjID0gX19nZXRPd25Qcm9wRGVzYyhmcm9tLCBrZXkpKSB8fCBkZXNjLmVudW1lcmFibGUgfSk7XG4gIH1cbiAgcmV0dXJuIHRvO1xufTtcbnZhciBfX3RvQ29tbW9uSlMgPSAobW9kKSA9PiBfX2NvcHlQcm9wcyhfX2RlZlByb3Aoe30sIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pLCBtb2QpO1xuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbnZhciBkaXN0X3NyY19leHBvcnRzID0ge307XG5fX2V4cG9ydChkaXN0X3NyY19leHBvcnRzLCB7XG4gIGNvbXBvc2VQYWdpbmF0ZVJlc3Q6ICgpID0+IGNvbXBvc2VQYWdpbmF0ZVJlc3QsXG4gIGlzUGFnaW5hdGluZ0VuZHBvaW50OiAoKSA9PiBpc1BhZ2luYXRpbmdFbmRwb2ludCxcbiAgcGFnaW5hdGVSZXN0OiAoKSA9PiBwYWdpbmF0ZVJlc3QsXG4gIHBhZ2luYXRpbmdFbmRwb2ludHM6ICgpID0+IHBhZ2luYXRpbmdFbmRwb2ludHNcbn0pO1xubW9kdWxlLmV4cG9ydHMgPSBfX3RvQ29tbW9uSlMoZGlzdF9zcmNfZXhwb3J0cyk7XG5cbi8vIHBrZy9kaXN0LXNyYy92ZXJzaW9uLmpzXG52YXIgVkVSU0lPTiA9IFwiOS4yLjFcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL25vcm1hbGl6ZS1wYWdpbmF0ZWQtbGlzdC1yZXNwb25zZS5qc1xuZnVuY3Rpb24gbm9ybWFsaXplUGFnaW5hdGVkTGlzdFJlc3BvbnNlKHJlc3BvbnNlKSB7XG4gIGlmICghcmVzcG9uc2UuZGF0YSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5yZXNwb25zZSxcbiAgICAgIGRhdGE6IFtdXG4gICAgfTtcbiAgfVxuICBjb25zdCByZXNwb25zZU5lZWRzTm9ybWFsaXphdGlvbiA9IFwidG90YWxfY291bnRcIiBpbiByZXNwb25zZS5kYXRhICYmICEoXCJ1cmxcIiBpbiByZXNwb25zZS5kYXRhKTtcbiAgaWYgKCFyZXNwb25zZU5lZWRzTm9ybWFsaXphdGlvbilcbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIGNvbnN0IGluY29tcGxldGVSZXN1bHRzID0gcmVzcG9uc2UuZGF0YS5pbmNvbXBsZXRlX3Jlc3VsdHM7XG4gIGNvbnN0IHJlcG9zaXRvcnlTZWxlY3Rpb24gPSByZXNwb25zZS5kYXRhLnJlcG9zaXRvcnlfc2VsZWN0aW9uO1xuICBjb25zdCB0b3RhbENvdW50ID0gcmVzcG9uc2UuZGF0YS50b3RhbF9jb3VudDtcbiAgZGVsZXRlIHJlc3BvbnNlLmRhdGEuaW5jb21wbGV0ZV9yZXN1bHRzO1xuICBkZWxldGUgcmVzcG9uc2UuZGF0YS5yZXBvc2l0b3J5X3NlbGVjdGlvbjtcbiAgZGVsZXRlIHJlc3BvbnNlLmRhdGEudG90YWxfY291bnQ7XG4gIGNvbnN0IG5hbWVzcGFjZUtleSA9IE9iamVjdC5rZXlzKHJlc3BvbnNlLmRhdGEpWzBdO1xuICBjb25zdCBkYXRhID0gcmVzcG9uc2UuZGF0YVtuYW1lc3BhY2VLZXldO1xuICByZXNwb25zZS5kYXRhID0gZGF0YTtcbiAgaWYgKHR5cGVvZiBpbmNvbXBsZXRlUmVzdWx0cyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJlc3BvbnNlLmRhdGEuaW5jb21wbGV0ZV9yZXN1bHRzID0gaW5jb21wbGV0ZVJlc3VsdHM7XG4gIH1cbiAgaWYgKHR5cGVvZiByZXBvc2l0b3J5U2VsZWN0aW9uICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmVzcG9uc2UuZGF0YS5yZXBvc2l0b3J5X3NlbGVjdGlvbiA9IHJlcG9zaXRvcnlTZWxlY3Rpb247XG4gIH1cbiAgcmVzcG9uc2UuZGF0YS50b3RhbF9jb3VudCA9IHRvdGFsQ291bnQ7XG4gIHJldHVybiByZXNwb25zZTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2l0ZXJhdG9yLmpzXG5mdW5jdGlvbiBpdGVyYXRvcihvY3Rva2l0LCByb3V0ZSwgcGFyYW1ldGVycykge1xuICBjb25zdCBvcHRpb25zID0gdHlwZW9mIHJvdXRlID09PSBcImZ1bmN0aW9uXCIgPyByb3V0ZS5lbmRwb2ludChwYXJhbWV0ZXJzKSA6IG9jdG9raXQucmVxdWVzdC5lbmRwb2ludChyb3V0ZSwgcGFyYW1ldGVycyk7XG4gIGNvbnN0IHJlcXVlc3RNZXRob2QgPSB0eXBlb2Ygcm91dGUgPT09IFwiZnVuY3Rpb25cIiA/IHJvdXRlIDogb2N0b2tpdC5yZXF1ZXN0O1xuICBjb25zdCBtZXRob2QgPSBvcHRpb25zLm1ldGhvZDtcbiAgY29uc3QgaGVhZGVycyA9IG9wdGlvbnMuaGVhZGVycztcbiAgbGV0IHVybCA9IG9wdGlvbnMudXJsO1xuICByZXR1cm4ge1xuICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl06ICgpID0+ICh7XG4gICAgICBhc3luYyBuZXh0KCkge1xuICAgICAgICBpZiAoIXVybClcbiAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlIH07XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0TWV0aG9kKHsgbWV0aG9kLCB1cmwsIGhlYWRlcnMgfSk7XG4gICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFJlc3BvbnNlID0gbm9ybWFsaXplUGFnaW5hdGVkTGlzdFJlc3BvbnNlKHJlc3BvbnNlKTtcbiAgICAgICAgICB1cmwgPSAoKG5vcm1hbGl6ZWRSZXNwb25zZS5oZWFkZXJzLmxpbmsgfHwgXCJcIikubWF0Y2goXG4gICAgICAgICAgICAvPChbXj5dKyk+O1xccypyZWw9XCJuZXh0XCIvXG4gICAgICAgICAgKSB8fCBbXSlbMV07XG4gICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG5vcm1hbGl6ZWRSZXNwb25zZSB9O1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGlmIChlcnJvci5zdGF0dXMgIT09IDQwOSlcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgIHVybCA9IFwiXCI7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgIHN0YXR1czogMjAwLFxuICAgICAgICAgICAgICBoZWFkZXJzOiB7fSxcbiAgICAgICAgICAgICAgZGF0YTogW11cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3BhZ2luYXRlLmpzXG5mdW5jdGlvbiBwYWdpbmF0ZShvY3Rva2l0LCByb3V0ZSwgcGFyYW1ldGVycywgbWFwRm4pIHtcbiAgaWYgKHR5cGVvZiBwYXJhbWV0ZXJzID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBtYXBGbiA9IHBhcmFtZXRlcnM7XG4gICAgcGFyYW1ldGVycyA9IHZvaWQgMDtcbiAgfVxuICByZXR1cm4gZ2F0aGVyKFxuICAgIG9jdG9raXQsXG4gICAgW10sXG4gICAgaXRlcmF0b3Iob2N0b2tpdCwgcm91dGUsIHBhcmFtZXRlcnMpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpLFxuICAgIG1hcEZuXG4gICk7XG59XG5mdW5jdGlvbiBnYXRoZXIob2N0b2tpdCwgcmVzdWx0cywgaXRlcmF0b3IyLCBtYXBGbikge1xuICByZXR1cm4gaXRlcmF0b3IyLm5leHQoKS50aGVuKChyZXN1bHQpID0+IHtcbiAgICBpZiAocmVzdWx0LmRvbmUpIHtcbiAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbiAgICBsZXQgZWFybHlFeGl0ID0gZmFsc2U7XG4gICAgZnVuY3Rpb24gZG9uZSgpIHtcbiAgICAgIGVhcmx5RXhpdCA9IHRydWU7XG4gICAgfVxuICAgIHJlc3VsdHMgPSByZXN1bHRzLmNvbmNhdChcbiAgICAgIG1hcEZuID8gbWFwRm4ocmVzdWx0LnZhbHVlLCBkb25lKSA6IHJlc3VsdC52YWx1ZS5kYXRhXG4gICAgKTtcbiAgICBpZiAoZWFybHlFeGl0KSB7XG4gICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG4gICAgcmV0dXJuIGdhdGhlcihvY3Rva2l0LCByZXN1bHRzLCBpdGVyYXRvcjIsIG1hcEZuKTtcbiAgfSk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9jb21wb3NlLXBhZ2luYXRlLmpzXG52YXIgY29tcG9zZVBhZ2luYXRlUmVzdCA9IE9iamVjdC5hc3NpZ24ocGFnaW5hdGUsIHtcbiAgaXRlcmF0b3Jcbn0pO1xuXG4vLyBwa2cvZGlzdC1zcmMvZ2VuZXJhdGVkL3BhZ2luYXRpbmctZW5kcG9pbnRzLmpzXG52YXIgcGFnaW5hdGluZ0VuZHBvaW50cyA9IFtcbiAgXCJHRVQgL2Fkdmlzb3JpZXNcIixcbiAgXCJHRVQgL2FwcC9ob29rL2RlbGl2ZXJpZXNcIixcbiAgXCJHRVQgL2FwcC9pbnN0YWxsYXRpb24tcmVxdWVzdHNcIixcbiAgXCJHRVQgL2FwcC9pbnN0YWxsYXRpb25zXCIsXG4gIFwiR0VUIC9hc3NpZ25tZW50cy97YXNzaWdubWVudF9pZH0vYWNjZXB0ZWRfYXNzaWdubWVudHNcIixcbiAgXCJHRVQgL2NsYXNzcm9vbXNcIixcbiAgXCJHRVQgL2NsYXNzcm9vbXMve2NsYXNzcm9vbV9pZH0vYXNzaWdubWVudHNcIixcbiAgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9kZXBlbmRhYm90L2FsZXJ0c1wiLFxuICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L3NlY3JldC1zY2FubmluZy9hbGVydHNcIixcbiAgXCJHRVQgL2V2ZW50c1wiLFxuICBcIkdFVCAvZ2lzdHNcIixcbiAgXCJHRVQgL2dpc3RzL3B1YmxpY1wiLFxuICBcIkdFVCAvZ2lzdHMvc3RhcnJlZFwiLFxuICBcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L2NvbW1lbnRzXCIsXG4gIFwiR0VUIC9naXN0cy97Z2lzdF9pZH0vY29tbWl0c1wiLFxuICBcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L2ZvcmtzXCIsXG4gIFwiR0VUIC9pbnN0YWxsYXRpb24vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9pc3N1ZXNcIixcbiAgXCJHRVQgL2xpY2Vuc2VzXCIsXG4gIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3BsYW5zXCIsXG4gIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3BsYW5zL3twbGFuX2lkfS9hY2NvdW50c1wiLFxuICBcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9zdHViYmVkL3BsYW5zXCIsXG4gIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3N0dWJiZWQvcGxhbnMve3BsYW5faWR9L2FjY291bnRzXCIsXG4gIFwiR0VUIC9uZXR3b3Jrcy97b3duZXJ9L3tyZXBvfS9ldmVudHNcIixcbiAgXCJHRVQgL25vdGlmaWNhdGlvbnNcIixcbiAgXCJHRVQgL29yZ2FuaXphdGlvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9jYWNoZS91c2FnZS1ieS1yZXBvc2l0b3J5XCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVyc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvdmFyaWFibGVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvdmFyaWFibGVzL3tuYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYmxvY2tzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2NvZGUtc2Nhbm5pbmcvYWxlcnRzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmcvc2VhdHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9hbGVydHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9ldmVudHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vZmFpbGVkX2ludml0YXRpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2hvb2tzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2luc3RhbGxhdGlvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vaW52aXRhdGlvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9L3RlYW1zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2lzc3Vlc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9tZW1iZXJzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfS9jb2Rlc3BhY2VzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3tyb2xlX2lkfS90ZWFtc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMve3JvbGVfaWR9L3VzZXJzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L291dHNpZGVfY29sbGFib3JhdG9yc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wYWNrYWdlc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW4tcmVxdWVzdHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2VuLXJlcXVlc3RzL3twYXRfcmVxdWVzdF9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2Vucy97cGF0X2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcHJvamVjdHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcHJvcGVydGllcy92YWx1ZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcHVibGljX21lbWJlcnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcmVwb3NcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHMvcnVsZS1zdWl0ZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9zZWN1cml0eS1hZHZpc29yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9pbnZpdGF0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9tZW1iZXJzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3Byb2plY3RzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3JlcG9zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3RlYW1zXCIsXG4gIFwiR0VUIC9wcm9qZWN0cy9jb2x1bW5zL3tjb2x1bW5faWR9L2NhcmRzXCIsXG4gIFwiR0VUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sbGFib3JhdG9yc1wiLFxuICBcIkdFVCAvcHJvamVjdHMve3Byb2plY3RfaWR9L2NvbHVtbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvYXJ0aWZhY3RzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2NhY2hlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9vcmdhbml6YXRpb24tc2VjcmV0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9vcmdhbml6YXRpb24tdmFyaWFibGVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVuc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2FydGlmYWN0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2F0dGVtcHRzL3thdHRlbXB0X251bWJlcn0vam9ic1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2pvYnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvc2VjcmV0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy92YXJpYWJsZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvd29ya2Zsb3dzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L3J1bnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGl2aXR5XCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hc3NpZ25lZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1ydW5zL3tjaGVja19ydW5faWR9L2Fubm90YXRpb25zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1zdWl0ZXMve2NoZWNrX3N1aXRlX2lkfS9jaGVjay1ydW5zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn0vaW5zdGFuY2VzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FuYWx5c2VzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL2RldmNvbnRhaW5lcnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvc2VjcmV0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29sbGFib3JhdG9yc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve2NvbW1pdF9zaGF9L2NvbW1lbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tjb21taXRfc2hhfS9wdWxsc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfS9jaGVjay1ydW5zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L2NoZWNrLXN1aXRlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfS9zdGF0dXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vc3RhdHVzZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbnRyaWJ1dG9yc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9hbGVydHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3Qvc2VjcmV0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGxveW1lbnRzL3tkZXBsb3ltZW50X2lkfS9zdGF0dXNlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnQtYnJhbmNoLXBvbGljaWVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnRfcHJvdGVjdGlvbl9ydWxlcy9hcHBzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ldmVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ZvcmtzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludml0YXRpb25zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9ldmVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9jb21tZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2V2ZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xhYmVsc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L3RpbWVsaW5lXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9rZXlzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sYWJlbHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXMve21pbGVzdG9uZV9udW1iZXJ9L2xhYmVsc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbm90aWZpY2F0aW9uc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXMvYnVpbGRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wcm9qZWN0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2NvbW1lbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2NvbW1pdHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vZmlsZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzL3tyZXZpZXdfaWR9L2NvbW1lbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9L2Fzc2V0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXMvYnJhbmNoZXMve2JyYW5jaH1cIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlc2V0cy9ydWxlLXN1aXRlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9sb2NhdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3VyaXR5LWFkdmlzb3JpZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXJnYXplcnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmliZXJzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YWdzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90ZWFtc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdG9waWNzXCIsXG4gIFwiR0VUIC9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH0vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9zZWNyZXRzXCIsXG4gIFwiR0VUIC9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vdmFyaWFibGVzXCIsXG4gIFwiR0VUIC9zZWFyY2gvY29kZVwiLFxuICBcIkdFVCAvc2VhcmNoL2NvbW1pdHNcIixcbiAgXCJHRVQgL3NlYXJjaC9pc3N1ZXNcIixcbiAgXCJHRVQgL3NlYXJjaC9sYWJlbHNcIixcbiAgXCJHRVQgL3NlYXJjaC9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL3NlYXJjaC90b3BpY3NcIixcbiAgXCJHRVQgL3NlYXJjaC91c2Vyc1wiLFxuICBcIkdFVCAvdGVhbXMve3RlYW1faWR9L2Rpc2N1c3Npb25zXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50c1wiLFxuICBcIkdFVCAvdGVhbXMve3RlYW1faWR9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfbnVtYmVyfS9yZWFjdGlvbnNcIixcbiAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvdGVhbXMve3RlYW1faWR9L2ludml0YXRpb25zXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vbWVtYmVyc1wiLFxuICBcIkdFVCAvdGVhbXMve3RlYW1faWR9L3Byb2plY3RzXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vcmVwb3NcIixcbiAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS90ZWFtc1wiLFxuICBcIkdFVCAvdXNlci9ibG9ja3NcIixcbiAgXCJHRVQgL3VzZXIvY29kZXNwYWNlc1wiLFxuICBcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHNcIixcbiAgXCJHRVQgL3VzZXIvZW1haWxzXCIsXG4gIFwiR0VUIC91c2VyL2ZvbGxvd2Vyc1wiLFxuICBcIkdFVCAvdXNlci9mb2xsb3dpbmdcIixcbiAgXCJHRVQgL3VzZXIvZ3BnX2tleXNcIixcbiAgXCJHRVQgL3VzZXIvaW5zdGFsbGF0aW9uc1wiLFxuICBcIkdFVCAvdXNlci9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvdXNlci9pc3N1ZXNcIixcbiAgXCJHRVQgL3VzZXIva2V5c1wiLFxuICBcIkdFVCAvdXNlci9tYXJrZXRwbGFjZV9wdXJjaGFzZXNcIixcbiAgXCJHRVQgL3VzZXIvbWFya2V0cGxhY2VfcHVyY2hhc2VzL3N0dWJiZWRcIixcbiAgXCJHRVQgL3VzZXIvbWVtYmVyc2hpcHMvb3Jnc1wiLFxuICBcIkdFVCAvdXNlci9taWdyYXRpb25zXCIsXG4gIFwiR0VUIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC91c2VyL29yZ3NcIixcbiAgXCJHRVQgL3VzZXIvcGFja2FnZXNcIixcbiAgXCJHRVQgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIixcbiAgXCJHRVQgL3VzZXIvcHVibGljX2VtYWlsc1wiLFxuICBcIkdFVCAvdXNlci9yZXBvc1wiLFxuICBcIkdFVCAvdXNlci9yZXBvc2l0b3J5X2ludml0YXRpb25zXCIsXG4gIFwiR0VUIC91c2VyL3NvY2lhbF9hY2NvdW50c1wiLFxuICBcIkdFVCAvdXNlci9zc2hfc2lnbmluZ19rZXlzXCIsXG4gIFwiR0VUIC91c2VyL3N0YXJyZWRcIixcbiAgXCJHRVQgL3VzZXIvc3Vic2NyaXB0aW9uc1wiLFxuICBcIkdFVCAvdXNlci90ZWFtc1wiLFxuICBcIkdFVCAvdXNlcnNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2V2ZW50cy9vcmdzL3tvcmd9XCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2V2ZW50cy9wdWJsaWNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZm9sbG93ZXJzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2ZvbGxvd2luZ1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9naXN0c1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ncGdfa2V5c1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9rZXlzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L29yZ3NcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcHJvamVjdHNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcmVjZWl2ZWRfZXZlbnRzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3JlY2VpdmVkX2V2ZW50cy9wdWJsaWNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcmVwb3NcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc29jaWFsX2FjY291bnRzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NzaF9zaWduaW5nX2tleXNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc3RhcnJlZFwiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zdWJzY3JpcHRpb25zXCJcbl07XG5cbi8vIHBrZy9kaXN0LXNyYy9wYWdpbmF0aW5nLWVuZHBvaW50cy5qc1xuZnVuY3Rpb24gaXNQYWdpbmF0aW5nRW5kcG9pbnQoYXJnKSB7XG4gIGlmICh0eXBlb2YgYXJnID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIHBhZ2luYXRpbmdFbmRwb2ludHMuaW5jbHVkZXMoYXJnKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG5mdW5jdGlvbiBwYWdpbmF0ZVJlc3Qob2N0b2tpdCkge1xuICByZXR1cm4ge1xuICAgIHBhZ2luYXRlOiBPYmplY3QuYXNzaWduKHBhZ2luYXRlLmJpbmQobnVsbCwgb2N0b2tpdCksIHtcbiAgICAgIGl0ZXJhdG9yOiBpdGVyYXRvci5iaW5kKG51bGwsIG9jdG9raXQpXG4gICAgfSlcbiAgfTtcbn1cbnBhZ2luYXRlUmVzdC5WRVJTSU9OID0gVkVSU0lPTjtcbi8vIEFubm90YXRlIHRoZSBDb21tb25KUyBleHBvcnQgbmFtZXMgZm9yIEVTTSBpbXBvcnQgaW4gbm9kZTpcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICBjb21wb3NlUGFnaW5hdGVSZXN0LFxuICBpc1BhZ2luYXRpbmdFbmRwb2ludCxcbiAgcGFnaW5hdGVSZXN0LFxuICBwYWdpbmF0aW5nRW5kcG9pbnRzXG59KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0T2N0b2tpdE9wdGlvbnMgPSBleHBvcnRzLkdpdEh1YiA9IGV4cG9ydHMuZGVmYXVsdHMgPSBleHBvcnRzLmNvbnRleHQgPSB2b2lkIDA7XG5jb25zdCBDb250ZXh0ID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL2NvbnRleHRcIikpO1xuY29uc3QgVXRpbHMgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIi4vaW50ZXJuYWwvdXRpbHNcIikpO1xuLy8gb2N0b2tpdCArIHBsdWdpbnNcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCJAb2N0b2tpdC9jb3JlXCIpO1xuY29uc3QgcGx1Z2luX3Jlc3RfZW5kcG9pbnRfbWV0aG9kc18xID0gcmVxdWlyZShcIkBvY3Rva2l0L3BsdWdpbi1yZXN0LWVuZHBvaW50LW1ldGhvZHNcIik7XG5jb25zdCBwbHVnaW5fcGFnaW5hdGVfcmVzdF8xID0gcmVxdWlyZShcIkBvY3Rva2l0L3BsdWdpbi1wYWdpbmF0ZS1yZXN0XCIpO1xuZXhwb3J0cy5jb250ZXh0ID0gbmV3IENvbnRleHQuQ29udGV4dCgpO1xuY29uc3QgYmFzZVVybCA9IFV0aWxzLmdldEFwaUJhc2VVcmwoKTtcbmV4cG9ydHMuZGVmYXVsdHMgPSB7XG4gICAgYmFzZVVybCxcbiAgICByZXF1ZXN0OiB7XG4gICAgICAgIGFnZW50OiBVdGlscy5nZXRQcm94eUFnZW50KGJhc2VVcmwpLFxuICAgICAgICBmZXRjaDogVXRpbHMuZ2V0UHJveHlGZXRjaChiYXNlVXJsKVxuICAgIH1cbn07XG5leHBvcnRzLkdpdEh1YiA9IGNvcmVfMS5PY3Rva2l0LnBsdWdpbihwbHVnaW5fcmVzdF9lbmRwb2ludF9tZXRob2RzXzEucmVzdEVuZHBvaW50TWV0aG9kcywgcGx1Z2luX3BhZ2luYXRlX3Jlc3RfMS5wYWdpbmF0ZVJlc3QpLmRlZmF1bHRzKGV4cG9ydHMuZGVmYXVsdHMpO1xuLyoqXG4gKiBDb252aWVuY2UgZnVuY3Rpb24gdG8gY29ycmVjdGx5IGZvcm1hdCBPY3Rva2l0IE9wdGlvbnMgdG8gcGFzcyBpbnRvIHRoZSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gICAgIHRva2VuICAgIHRoZSByZXBvIFBBVCBvciBHSVRIVUJfVE9LRU5cbiAqIEBwYXJhbSAgICAgb3B0aW9ucyAgb3RoZXIgb3B0aW9ucyB0byBzZXRcbiAqL1xuZnVuY3Rpb24gZ2V0T2N0b2tpdE9wdGlvbnModG9rZW4sIG9wdGlvbnMpIHtcbiAgICBjb25zdCBvcHRzID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyB8fCB7fSk7IC8vIFNoYWxsb3cgY2xvbmUgLSBkb24ndCBtdXRhdGUgdGhlIG9iamVjdCBwcm92aWRlZCBieSB0aGUgY2FsbGVyXG4gICAgLy8gQXV0aFxuICAgIGNvbnN0IGF1dGggPSBVdGlscy5nZXRBdXRoU3RyaW5nKHRva2VuLCBvcHRzKTtcbiAgICBpZiAoYXV0aCkge1xuICAgICAgICBvcHRzLmF1dGggPSBhdXRoO1xuICAgIH1cbiAgICByZXR1cm4gb3B0cztcbn1cbmV4cG9ydHMuZ2V0T2N0b2tpdE9wdGlvbnMgPSBnZXRPY3Rva2l0T3B0aW9ucztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0T2N0b2tpdCA9IGV4cG9ydHMuY29udGV4dCA9IHZvaWQgMDtcbmNvbnN0IENvbnRleHQgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIi4vY29udGV4dFwiKSk7XG5jb25zdCB1dGlsc18xID0gcmVxdWlyZShcIi4vdXRpbHNcIik7XG5leHBvcnRzLmNvbnRleHQgPSBuZXcgQ29udGV4dC5Db250ZXh0KCk7XG4vKipcbiAqIFJldHVybnMgYSBoeWRyYXRlZCBvY3Rva2l0IHJlYWR5IHRvIHVzZSBmb3IgR2l0SHViIEFjdGlvbnNcbiAqXG4gKiBAcGFyYW0gICAgIHRva2VuICAgIHRoZSByZXBvIFBBVCBvciBHSVRIVUJfVE9LRU5cbiAqIEBwYXJhbSAgICAgb3B0aW9ucyAgb3RoZXIgb3B0aW9ucyB0byBzZXRcbiAqL1xuZnVuY3Rpb24gZ2V0T2N0b2tpdCh0b2tlbiwgb3B0aW9ucywgLi4uYWRkaXRpb25hbFBsdWdpbnMpIHtcbiAgICBjb25zdCBHaXRIdWJXaXRoUGx1Z2lucyA9IHV0aWxzXzEuR2l0SHViLnBsdWdpbiguLi5hZGRpdGlvbmFsUGx1Z2lucyk7XG4gICAgcmV0dXJuIG5ldyBHaXRIdWJXaXRoUGx1Z2lucygoMCwgdXRpbHNfMS5nZXRPY3Rva2l0T3B0aW9ucykodG9rZW4sIG9wdGlvbnMpKTtcbn1cbmV4cG9ydHMuZ2V0T2N0b2tpdCA9IGdldE9jdG9raXQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1naXRodWIuanMubWFwIiwKICAgICJpbXBvcnQgKiBhcyBmcyBmcm9tICdub2RlOmZzJ1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdub2RlOnBhdGgnXG5pbXBvcnQgeyBkZWJ1ZywgZ2V0SW5wdXQsIHNhdmVTdGF0ZSwgc2V0RmFpbGVkIH0gZnJvbSAnQGFjdGlvbnMvY29yZSdcbmltcG9ydCB7IGV4ZWMgfSBmcm9tICdAYWN0aW9ucy9leGVjJ1xuaW1wb3J0IHsgZ2VuZXJhdGVDb21wb3NlRmlsZSwgcHJvbWV0aGV1c0NvbmZpZywgeWRiQ29uZmlnIH0gZnJvbSAnLi4vY29uZmlncydcbmltcG9ydCB7IGNvbnRleHQgfSBmcm9tICdAYWN0aW9ucy9naXRodWInXG5pbXBvcnQgeyBnZXRQdWxsUmVxdWVzdE51bWJlciB9IGZyb20gJy4uL2hlbHAvcHVsbHMnXG5cbihhc3luYyBmdW5jdGlvbiBtYWluKCkge1xuXHRkZWJ1ZyhKU09OLnN0cmluZ2lmeShjb250ZXh0LCBudWxsLCA0KSlcblxuXHRsZXQgY3dkID0gcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIFwiLnNsb1wiKVxuXHRzYXZlU3RhdGUoXCJDV0RcIiwgY3dkKVxuXG5cdGRlYnVnKFwiQ3JlYXRpbmcgd29ya2luZyBkaXJlY3RvcnkuLi5cIilcblx0ZnMubWtkaXJTeW5jKGN3ZCwgeyByZWN1cnNpdmU6IHRydWUgfSlcblxuXHR7XG5cdFx0ZGVidWcoJ0FxdWlyZSBwdWxsIHJlcXVlc3QgbnVtYmVyLi4uJylcblx0XHRsZXQgcHJOdW1iZXIgPSBhd2FpdCBnZXRQdWxsUmVxdWVzdE51bWJlcigpXG5cdFx0c2F2ZVN0YXRlKFwiUFJOXCIsIHByTnVtYmVyKVxuXHRcdGlmICghcHJOdW1iZXIpIHtcblx0XHRcdHNldEZhaWxlZCgnUHVsbCBSZXF1ZXN0IG51bWJlciBjb3VsZCBub3QgYmUgZGV0ZXJtaW5lZC4nKTtcblx0XHRcdHJldHVyblxuXHRcdH1cblx0XHRkZWJ1ZyhgUHVsbCByZXF1ZXN0IG51bWJlcjogJHtwck51bWJlcn1gKVxuXHR9XG5cblx0e1xuXHRcdGRlYnVnKFwiQ3JlYXRpbmcgeWRiIGNvbmZpZy4uLlwiKVxuXHRcdGxldCBjb25maWdQYXRoID0gcGF0aC5qb2luKGN3ZCwgXCJ5ZGIueWFtbFwiKVxuXHRcdGxldCBjb25maWdDb250ZW50ID0geWRiQ29uZmlnXG5cdFx0ZnMud3JpdGVGaWxlU3luYyhjb25maWdQYXRoLCBjb25maWdDb250ZW50LCB7IGVuY29kaW5nOiBcInV0Zi04XCIgfSlcblx0XHRkZWJ1ZyhgQ3JlYXRlZCBjb25maWcgZm9yIHlkYjogJHtjb25maWdQYXRofWApXG5cdH1cblxuXHR7XG5cdFx0ZGVidWcoXCJDcmVhdGluZyBwcm9tZXRoZXVzIGNvbmZpZy4uLlwiKVxuXHRcdGxldCBjb25maWdQYXRoID0gcGF0aC5qb2luKGN3ZCwgXCJwcm9tZXRoZXVzLnltbFwiKVxuXHRcdGxldCBjb25maWdDb250ZW50ID0gcHJvbWV0aGV1c0NvbmZpZ1xuXHRcdGZzLndyaXRlRmlsZVN5bmMoY29uZmlnUGF0aCwgY29uZmlnQ29udGVudCwgeyBlbmNvZGluZzogXCJ1dGYtOFwiIH0pXG5cdFx0ZGVidWcoYENyZWF0ZWQgY29uZmlnIGZvciBwcm9tZXRoZXVzOiAke2NvbmZpZ1BhdGh9YClcblx0fVxuXG5cdHtcblx0XHRkZWJ1ZyhcIkNyZWF0aW5nIGNvbXBvc2UgY29uZmlnLi4uXCIpXG5cdFx0bGV0IGNvbXBvc2VQYXRoID0gcGF0aC5qb2luKGN3ZCwgXCJjb21wb3NlLnlhbWxcIilcblx0XHRsZXQgY29tcG9zZUNvbnRlbnQgPSBnZW5lcmF0ZUNvbXBvc2VGaWxlKHBhcnNlSW50KGdldElucHV0KFwiWURCX0RBVEFCQVNFX05PREVfQ09VTlRcIiwgeyByZXF1aXJlZDogdHJ1ZSB9KSkpXG5cdFx0ZnMud3JpdGVGaWxlU3luYyhjb21wb3NlUGF0aCwgY29tcG9zZUNvbnRlbnQsIHsgZW5jb2Rpbmc6IFwidXRmLThcIiB9KVxuXHRcdGRlYnVnKGBDcmVhdGVkIGNvbXBvc2UueWFtbDogJHtjb21wb3NlUGF0aH1gKVxuXHR9XG5cblx0ZGVidWcoXCJTdGFydGluZyBZREIuLi5cIilcblx0YXdhaXQgZXhlYyhgZG9ja2VyYCwgW2Bjb21wb3NlYCwgYC1mYCwgYGNvbXBvc2UueWFtbGAsIGB1cGAsIGAtLXF1aWV0LXB1bGxgLCBgLWRgXSwgeyBjd2QgfSlcblxuXHRsZXQgc3RhcnQgPSBuZXcgRGF0ZSgpXG5cdGRlYnVnKGBZREIgc3RhcnRlZCBhdCAke3N0YXJ0fWApXG5cdHNhdmVTdGF0ZShcIllEQl9TVEFSVF9USU1FXCIsIHN0YXJ0LnRvSVNPU3RyaW5nKCkpXG59KSgpXG4iLAogICAgIi8vIEhvc3RcbmV4cG9ydCBjb25zdCBIT1NUID0gJ2xvY2FsaG9zdCdcblxuLy8gWURCIFN0YXRpYyBub2RlIGNvbmZpZ3VyYXRpb24uIFByZWZlcmUgZG8gbm90IGVkaXQuXG5leHBvcnQgY29uc3QgWURCX0dSUENfUE9SVCA9IDIxMzVcbmV4cG9ydCBjb25zdCBZREJfTU9OX1BPUlQgPSA4NzY1XG5leHBvcnQgY29uc3QgWURCX0lDX1BPUlQgPSAxOTAwMVxuZXhwb3J0IGNvbnN0IFlEQl9URU5BTlQgPSAnL1Jvb3QvdGVzdGRiJ1xuXG4vLyBQYXNzIGludG8gd29ya2xvYWRcbmV4cG9ydCBjb25zdCBZREJfRU5EUE9JTlQgPSBgZ3JwYzovLyR7SE9TVH06JHtZREJfR1JQQ19QT1JUfWBcbmV4cG9ydCBjb25zdCBZQkRfQ09OTkVDVElPTl9TVFJJTkcgPSBgJHtZREJfRU5EUE9JTlR9JHtZREJfVEVOQU5UfWBcblxuZXhwb3J0IGNvbnN0IFBST01FVEhFVVNfUE9SVCA9IDkwOTBcbmV4cG9ydCBjb25zdCBQUk9NRVRIRVVTX1BVU0hHQVRFV0FZX1BPUlQgPSA5MDkxXG5cbmV4cG9ydCBjb25zdCBQUk9NRVRIRVVTX1VSTCA9IGBodHRwOi8vJHtIT1NUfToke1BST01FVEhFVVNfUE9SVH1gXG5leHBvcnQgY29uc3QgUFJPTUVUSEVVU19QVVNIR0FURVdBWV9VUkwgPSBgaHR0cDovLyR7SE9TVH06JHtQUk9NRVRIRVVTX1BVU0hHQVRFV0FZX1BPUlR9YFxuIiwKICAgICJpbXBvcnQge1xuXHRIT1NULFxuXHRQUk9NRVRIRVVTX1BPUlQsXG5cdFBST01FVEhFVVNfUFVTSEdBVEVXQVlfUE9SVCxcblx0WURCX0VORFBPSU5ULFxuXHRZREJfR1JQQ19QT1JULFxuXHRZREJfSUNfUE9SVCxcblx0WURCX01PTl9QT1JULFxuXHRZREJfVEVOQU5ULFxufSBmcm9tICcuL2NvbnN0YW50cydcblxuZXhwb3J0IGNvbnN0IHByb21ldGhldXNDb25maWcgPSAvKiogWUFNTCAqLyBgXG5nbG9iYWw6XG4gIHNjcmFwZV9pbnRlcnZhbDogMXNcbiAgZXZhbHVhdGlvbl9pbnRlcnZhbDogMXNcblxuc2NyYXBlX2NvbmZpZ3M6XG4gIC0gam9iX25hbWU6ICdwdXNoZ2F0ZXdheSdcbiAgICBzdGF0aWNfY29uZmlnczpcbiAgICAgIC0gdGFyZ2V0czogWycke0hPU1R9OiR7UFJPTUVUSEVVU19QVVNIR0FURVdBWV9QT1JUfSddXG5gXG5cbmV4cG9ydCBjb25zdCB5ZGJDb25maWcgPSAvKiogWUFNTCAqLyBgXG5hY3Rvcl9zeXN0ZW1fY29uZmlnOlxuICBjcHVfY291bnQ6IDFcbiAgbm9kZV90eXBlOiBTVE9SQUdFXG4gIHVzZV9hdXRvX2NvbmZpZzogdHJ1ZVxuYmxvYl9zdG9yYWdlX2NvbmZpZzpcbiAgc2VydmljZV9zZXQ6XG4gICAgZ3JvdXBzOlxuICAgICAgLSBlcmFzdXJlX3NwZWNpZXM6IG5vbmVcbiAgICAgICAgcmluZ3M6XG4gICAgICAgICAgLSBmYWlsX2RvbWFpbnM6XG4gICAgICAgICAgICAgIC0gdmRpc2tfbG9jYXRpb25zOlxuICAgICAgICAgICAgICAgICAgLSBub2RlX2lkOiAxXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IFNlY3Rvck1hcDoxOjY0XG4gICAgICAgICAgICAgICAgICAgIHBkaXNrX2NhdGVnb3J5OiBTU0RcbmNoYW5uZWxfcHJvZmlsZV9jb25maWc6XG4gIHByb2ZpbGU6XG4gICAgLSBjaGFubmVsOlxuICAgICAgICAtIGVyYXN1cmVfc3BlY2llczogbm9uZVxuICAgICAgICAgIHBkaXNrX2NhdGVnb3J5OiAwXG4gICAgICAgICAgc3RvcmFnZV9wb29sX2tpbmQ6IHNzZFxuICAgICAgICAtIGVyYXN1cmVfc3BlY2llczogbm9uZVxuICAgICAgICAgIHBkaXNrX2NhdGVnb3J5OiAwXG4gICAgICAgICAgc3RvcmFnZV9wb29sX2tpbmQ6IHNzZFxuICAgICAgICAtIGVyYXN1cmVfc3BlY2llczogbm9uZVxuICAgICAgICAgIHBkaXNrX2NhdGVnb3J5OiAwXG4gICAgICAgICAgc3RvcmFnZV9wb29sX2tpbmQ6IHNzZFxuICAgICAgcHJvZmlsZV9pZDogMFxuZG9tYWluc19jb25maWc6XG4gIGRvbWFpbjpcbiAgICAtIG5hbWU6IFJvb3RcbiAgICAgIHN0b3JhZ2VfcG9vbF90eXBlczpcbiAgICAgICAgLSBraW5kOiBzc2RcbiAgICAgICAgICBwb29sX2NvbmZpZzpcbiAgICAgICAgICAgIGJveF9pZDogMVxuICAgICAgICAgICAgZXJhc3VyZV9zcGVjaWVzOiBub25lXG4gICAgICAgICAgICBraW5kOiBzc2RcbiAgICAgICAgICAgIHBkaXNrX2ZpbHRlcjpcbiAgICAgICAgICAgICAgLSBwcm9wZXJ0eTpcbiAgICAgICAgICAgICAgICAgIC0gdHlwZTogU1NEXG4gICAgICAgICAgICB2ZGlza19raW5kOiBEZWZhdWx0XG4gIHN0YXRlX3N0b3JhZ2U6XG4gICAgLSByaW5nOlxuICAgICAgICBub2RlOlxuICAgICAgICAgIC0gMVxuICAgICAgICBudG9fc2VsZWN0OiAxXG4gICAgICBzc2lkOiAxXG5ncnBjX2NvbmZpZzpcbiAgcG9ydDogJHtZREJfR1JQQ19QT1JUfVxuaG9zdF9jb25maWdzOlxuICAtIGRyaXZlOlxuICAgICAgLSBwYXRoOiBTZWN0b3JNYXA6MTo2NFxuICAgICAgICB0eXBlOiBTU0RcbiAgICBob3N0X2NvbmZpZ19pZDogMVxuaG9zdHM6XG4gIC0gaG9zdDogJHtIT1NUfVxuICAgIGhvc3RfY29uZmlnX2lkOiAxXG4gICAgbm9kZV9pZDogMVxuICAgIHBvcnQ6ICR7WURCX0lDX1BPUlR9XG4gICAgd2FsbGVfbG9jYXRpb246XG4gICAgICBib2R5OiAxXG4gICAgICBkYXRhX2NlbnRlcjogYXotMVxuICAgICAgcmFjazogXCIwXCJcbnN0YXRpY19lcmFzdXJlOiBub25lXG5gXG5cbi8vIEdlbmVyYXRlIFlEQiBTdGF0aWMgTm9kZVxubGV0IGdlbmVyYXRlU3RhdGljTm9kZSA9ICgpID0+XG5cdC8qKiBZQU1MICovIGBcbiAgc3RhdGljLTA6XG4gICAgPDw6ICp5ZGItY29tbW9uXG4gICAgY29udGFpbmVyX25hbWU6IHlkYi1zdGF0aWMtMFxuICAgIGNvbW1hbmQ6XG4gICAgICAtIC9vcHQveWRiL2Jpbi95ZGJkXG4gICAgICAtIHNlcnZlclxuICAgICAgLSAtLWdycGMtcG9ydFxuICAgICAgLSBcIiR7WURCX0dSUENfUE9SVH1cIlxuICAgICAgLSAtLW1vbi1wb3J0XG4gICAgICAtIFwiJHtZREJfTU9OX1BPUlR9XCJcbiAgICAgIC0gLS1pYy1wb3J0XG4gICAgICAtIFwiJHtZREJfSUNfUE9SVH1cIlxuICAgICAgLSAtLXlhbWwtY29uZmlnXG4gICAgICAtIC9vcHQveWRiL2NmZy9jb25maWcueWFtbFxuICAgICAgLSAtLW5vZGVcbiAgICAgIC0gc3RhdGljXG4gICAgICAtIC0tbGFiZWxcbiAgICAgIC0gZGVwbG95bWVudD1kb2NrZXJcbiAgICBwb3J0czpcbiAgICAgIC0gJHtZREJfR1JQQ19QT1JUfToke1lEQl9HUlBDX1BPUlR9XG4gICAgICAtICR7WURCX01PTl9QT1JUfToke1lEQl9NT05fUE9SVH1cbiAgICAgIC0gJHtZREJfSUNfUE9SVH06JHtZREJfSUNfUE9SVH1cbiAgICBoZWFsdGhjaGVjazpcbiAgICAgIHRlc3Q6IGJhc2ggLWMgXCJleGVjIDY8PiAvZGV2L3RjcC8ke0hPU1R9LyR7WURCX0dSUENfUE9SVH1cIlxuICAgICAgaW50ZXJ2YWw6IDEwc1xuICAgICAgdGltZW91dDogMXNcbiAgICAgIHJldHJpZXM6IDNcbiAgICAgIHN0YXJ0X3BlcmlvZDogMzBzXG4gICAgZGVwbG95OlxuICAgICAgPDw6ICp5ZGItZGVwbG95XG5cbiAgc3RhdGljLWluaXQ6XG4gICAgPDw6ICp5ZGItY29tbW9uXG4gICAgcmVzdGFydDogb24tZmFpbHVyZVxuICAgIGNvbnRhaW5lcl9uYW1lOiB5ZGItc3RhdGljLWluaXRcbiAgICBjb21tYW5kOlxuICAgICAgLSAvb3B0L3lkYi9iaW4veWRiZFxuICAgICAgLSAtc1xuICAgICAgLSAke1lEQl9FTkRQT0lOVH1cbiAgICAgIC0gYWRtaW5cbiAgICAgIC0gYmxvYnN0b3JhZ2VcbiAgICAgIC0gY29uZmlnXG4gICAgICAtIGluaXRcbiAgICAgIC0gLS15YW1sLWZpbGVcbiAgICAgIC0gL29wdC95ZGIvY2ZnL2NvbmZpZy55YW1sXG4gICAgZGVwZW5kc19vbjpcbiAgICAgIHN0YXRpYy0wOlxuICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeVxuXG4gIHRlbmFudC1pbml0OlxuICAgIDw8OiAqeWRiLWNvbW1vblxuICAgIHJlc3RhcnQ6IG9uLWZhaWx1cmVcbiAgICBjb250YWluZXJfbmFtZTogeWRiLXRlbmFudC1pbml0XG4gICAgY29tbWFuZDpcbiAgICAgIC0gL29wdC95ZGIvYmluL3lkYmRcbiAgICAgIC0gLXNcbiAgICAgIC0gJHtZREJfRU5EUE9JTlR9XG4gICAgICAtIGFkbWluXG4gICAgICAtIGRhdGFiYXNlXG4gICAgICAtICR7WURCX1RFTkFOVH1cbiAgICAgIC0gY3JlYXRlXG4gICAgICAtIHNzZDoxXG4gICAgZGVwZW5kc19vbjpcbiAgICAgIHN0YXRpYy1pbml0OlxuICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfY29tcGxldGVkX3N1Y2Nlc3NmdWxseVxuYC5zbGljZSgxKVxuXG4vLyBHZW5lcmF0ZSBZREIgRHluYW1pYyBOb2RlXG5sZXQgZ2VuZXJhdGVEeW5hbWljTm9kZSA9IChpZHg6IG51bWJlcikgPT5cblx0LyoqIFlBTUwgKi8gYFxuICBkeW5hbWljLSR7aWR4fTpcbiAgICA8PDogKnlkYi1jb21tb25cbiAgICBjb250YWluZXJfbmFtZTogeWRiLWR5bmFtaWMtJHtpZHh9XG4gICAgY29tbWFuZDpcbiAgICAgIC0gL29wdC95ZGIvYmluL3lkYmRcbiAgICAgIC0gc2VydmVyXG4gICAgICAtIC0tZ3JwYy1wb3J0XG4gICAgICAtIFwiJHtZREJfR1JQQ19QT1JUICsgaWR4fVwiXG4gICAgICAtIC0tbW9uLXBvcnRcbiAgICAgIC0gXCIke1lEQl9NT05fUE9SVCArIGlkeH1cIlxuICAgICAgLSAtLWljLXBvcnRcbiAgICAgIC0gXCIke1lEQl9JQ19QT1JUICsgaWR4fVwiXG4gICAgICAtIC0teWFtbC1jb25maWdcbiAgICAgIC0gL29wdC95ZGIvY2ZnL2NvbmZpZy55YW1sXG4gICAgICAtIC0tdGVuYW50XG4gICAgICAtICR7WURCX1RFTkFOVH1cbiAgICAgIC0gLS1ub2RlLWJyb2tlclxuICAgICAgLSAke1lEQl9FTkRQT0lOVH1cbiAgICAgIC0gLS1sYWJlbFxuICAgICAgLSBkZXBsb3ltZW50PWRvY2tlclxuICAgIHBvcnRzOlxuICAgICAgLSAke1lEQl9HUlBDX1BPUlQgKyBpZHh9OiR7WURCX0dSUENfUE9SVCArIGlkeH1cbiAgICAgIC0gJHtZREJfTU9OX1BPUlQgKyBpZHh9OiR7WURCX01PTl9QT1JUICsgaWR4fVxuICAgICAgLSAke1lEQl9JQ19QT1JUICsgaWR4fToke1lEQl9JQ19QT1JUICsgaWR4fVxuICAgIGhlYWx0aGNoZWNrOlxuICAgICAgdGVzdDogYmFzaCAtYyBcImV4ZWMgNjw+IC9kZXYvdGNwLyR7SE9TVH0vJHtZREJfR1JQQ19QT1JUICsgaWR4fVwiXG4gICAgICBpbnRlcnZhbDogMTBzXG4gICAgICB0aW1lb3V0OiAxc1xuICAgICAgcmV0cmllczogM1xuICAgICAgc3RhcnRfcGVyaW9kOiAzMHNcbiAgICBkZXBlbmRzX29uOlxuICAgICAgc3RhdGljLTA6XG4gICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5XG4gICAgICBzdGF0aWMtaW5pdDpcbiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2NvbXBsZXRlZF9zdWNjZXNzZnVsbHlcbiAgICAgIHRlbmFudC1pbml0OlxuICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfY29tcGxldGVkX3N1Y2Nlc3NmdWxseVxuICAgIGRlcGxveTpcbiAgICAgIDw8OiAqeWRiLWRlcGxveVxuYC5zbGljZSgxKVxuXG4vLyBHZW5lcmF0ZSBNb25pdG9yaW5nXG5sZXQgZ2VuZXJhdGVNb25pdG9yaW5nID0gKCkgPT5cblx0LyoqIFlBTUwgKi8gYFxuICBwcm9tZXRoZXVzOlxuICAgIGltYWdlOiBwcm9tL3Byb21ldGhldXNcbiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZFxuICAgIDw8OiAqcnVudGltZVxuICAgIHBvcnRzOlxuICAgICAgLSBcIiR7UFJPTUVUSEVVU19QT1JUfToke1BST01FVEhFVVNfUE9SVH1cIlxuICAgIHZvbHVtZXM6XG4gICAgICAtIC4vcHJvbWV0aGV1cy55bWw6L2V0Yy9wcm9tZXRoZXVzL3Byb21ldGhldXMueW1sXG4gICAgZGVwbG95OiAmbW9uaXRvcmluZy1kZXBsb3lcbiAgICAgIHJlc291cmNlczpcbiAgICAgICAgbGltaXRzOlxuICAgICAgICAgIGNwdXM6ICcwLjEnXG4gICAgICAgICAgbWVtb3J5OiAxMDAwTVxuICAgICAgICByZXNlcnZhdGlvbnM6XG4gICAgICAgICAgY3B1czogJzAuMDAxJ1xuICAgICAgICAgIG1lbW9yeTogNTBNXG5cbiAgcHJvbWV0aGV1cy1wdXNoZ2F0ZXdheTpcbiAgICBpbWFnZTogcHJvbS9wdXNoZ2F0ZXdheVxuICAgIHJlc3RhcnQ6IHVubGVzcy1zdG9wcGVkXG4gICAgPDw6ICpydW50aW1lXG4gICAgcG9ydHM6XG4gICAgICAtIFwiJHtQUk9NRVRIRVVTX1BVU0hHQVRFV0FZX1BPUlR9OiR7UFJPTUVUSEVVU19QVVNIR0FURVdBWV9QT1JUfVwiXG4gICAgbmV0d29ya19tb2RlOiBob3N0XG4gICAgZGVwbG95OlxuICAgICAgPDw6ICptb25pdG9yaW5nLWRlcGxveVxuYC5zbGljZSgxKVxuXG4vLyBHZW5lcmF0ZSBDb21wb3NlXG5leHBvcnQgbGV0IGdlbmVyYXRlQ29tcG9zZUZpbGUgPSAoXG5cdHlkYkRhdGFiYXNlTm9kZUNvdW50OiBudW1iZXJcbikgPT4gLyoqIFlBTUwgKi8gYCMgQ29kZSBnZW5lcmF0ZWQgYnkgR2l0aHViIEFjdGlvbjsgRE8gTk9UIEVESVQuXG5cbngtcnVudGltZTogJnJ1bnRpbWVcbiAgcGxhdGZvcm06IGxpbnV4L2FtZDY0XG4gIHByaXZpbGVnZWQ6IHRydWVcbiAgbmV0d29ya19tb2RlOiBob3N0XG5cbngtbm9kZTogJnlkYi1jb21tb25cbiAgaW1hZ2U6IGNyLnlhbmRleC9jcnB0cW9udW9kZjUxa2RqN2E3ZC95ZGI6MjQuMi43XG4gIHJlc3RhcnQ6IGFsd2F5c1xuICBob3N0bmFtZTogJHtIT1NUfVxuICA8PDogKnJ1bnRpbWVcbiAgdm9sdW1lczpcbiAgICAtIC4veWRiLnlhbWw6L29wdC95ZGIvY2ZnL2NvbmZpZy55YW1sXG5cbngtZGVwbG95OiAmeWRiLWRlcGxveVxuICByZXN0YXJ0X3BvbGljeTpcbiAgICBjb25kaXRpb246IGFueVxuICByZXNvdXJjZXM6XG4gICAgbGltaXRzOlxuICAgICAgY3B1czogJzEnXG4gICAgICBtZW1vcnk6IDEwMDBNXG4gICAgcmVzZXJ2YXRpb25zOlxuICAgICAgY3B1czogJzAuMSdcbiAgICAgIG1lbW9yeTogMjUwTVxuXG5uYW1lOiB5ZGJcblxuc2VydmljZXM6XG4ke2dlbmVyYXRlU3RhdGljTm9kZSgpfVxuJHtBcnJheS5mcm9tKHsgbGVuZ3RoOiB5ZGJEYXRhYmFzZU5vZGVDb3VudCB9LCAoXywgaSkgPT4gaSArIDEpXG5cdC5tYXAoZ2VuZXJhdGVEeW5hbWljTm9kZSlcblx0LmpvaW4oJ1xcbicpfVxuJHtnZW5lcmF0ZU1vbml0b3JpbmcoKX1cbmBcbiIsCiAgICAiaW1wb3J0IHsgZ2V0SW5wdXQgfSBmcm9tIFwiQGFjdGlvbnMvY29yZVwiO1xuaW1wb3J0IHsgY29udGV4dCwgZ2V0T2N0b2tpdCB9IGZyb20gXCJAYWN0aW9ucy9naXRodWJcIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFB1bGxSZXF1ZXN0TnVtYmVyKCkge1xuXHRsZXQgdG9rZW4gPSBnZXRJbnB1dCgnZ2l0aHViX3Rva2VuJykgfHwgcHJvY2Vzcy5lbnYuR0lUSFVCX1RPS0VOO1xuXG5cdGxldCBwck51bWJlciA9IGdldElucHV0KFwiZ2l0aHViX3B1bGxfcmVxdWVzdF9udW1iZXJcIik7XG5cdGlmIChwck51bWJlci5sZW5ndGggPiAwKSB7XG5cdFx0cmV0dXJuIHBhcnNlSW50KHByTnVtYmVyKTtcblx0fVxuXG5cdGlmIChjb250ZXh0LmV2ZW50TmFtZSA9PT0gJ3B1bGxfcmVxdWVzdCcpIHtcblx0XHRyZXR1cm4gY29udGV4dC5wYXlsb2FkLnB1bGxfcmVxdWVzdCEubnVtYmVyO1xuXHR9XG5cblx0aWYgKHRva2VuKSB7XG5cdFx0bGV0IG9jdG9raXQgPSBnZXRPY3Rva2l0KHRva2VuKTtcblx0XHRsZXQgYnJhbmNoID0gY29udGV4dC5yZWYucmVwbGFjZSgncmVmcy9oZWFkcy8nLCAnJyk7XG5cblx0XHRjb25zdCB7IGRhdGE6IHB1bGxzIH0gPSBhd2FpdCBvY3Rva2l0LnJlc3QucHVsbHMubGlzdCh7XG5cdFx0XHRzdGF0ZTogJ29wZW4nLFxuXHRcdFx0b3duZXI6IGNvbnRleHQucmVwby5vd25lcixcblx0XHRcdHJlcG86IGNvbnRleHQucmVwby5yZXBvLFxuXHRcdFx0aGVhZDogYCR7Y29udGV4dC5hY3Rvcn06JHticmFuY2h9YCxcblx0XHR9KTtcblxuXHRcdGlmIChwdWxscy5sZW5ndGggPiAwKSB7XG5cdFx0XHRyZXR1cm4gcHVsbHNbMF0ubnVtYmVyO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBudWxsXG59XG4iCiAgXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdBLFNBQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUM1RCxFQUFRLDhCQUE4Qix5QkFBc0I7QUFLNUQsV0FBUyxjQUFjLENBQUMsT0FBTztBQUMzQixRQUFJLFVBQVUsUUFBUSxVQUFVLFdBQVc7QUFDdkMsYUFBTztBQUFBLElBQ1gsa0JBQ2dCLFVBQVUsWUFBWSxpQkFBaUIsUUFBUTtBQUMzRCxhQUFPO0FBQUEsSUFDWDtBQUNBLFdBQU8sS0FBSyxVQUFVLEtBQUs7QUFBQTtBQUUvQixFQUFRLHlCQUFpQjtBQU96QixXQUFTLG1CQUFtQixD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SUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9B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QUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQzdDO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFDN0M7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUM3QztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQzdDO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFDN0M7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUM3QztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7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ZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFDSCxlQUFPO0FBQUE7QUFDQSxlQUFPO0FBQUE7QUFBQTtBQUlwQixTQUFPLFVBQVU7QUFBQSxJQUNmO0FBQUEsRUFDRjtBQUFBOzs7O0FDL1JBO0FBQUEsSUFDRTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQTtBQUVGLFFBQVE7QUFDUixRQUFRO0FBQ1IsUUFBUTtBQUNSLFFBQVEsb0JBQW9CO0FBQzVCLFFBQVE7QUFDUixRQUFRO0FBQ1IsUUFBUTtBQUdSLE1BQU0sNEJBQTRCO0FBQUEsSUFDaEMsWUFBWTtBQUFBLElBQ1osVUFBVTtBQUFBLElBQ1YsY0FBYztBQUFBLEVBQ2hCO0FBU0EsV0FBUyxhQUFjLENBQUMsSUFBSSxNQUFNLE1BQU0sY0FBYztBQUdwRCxRQUFJLEdBQUcsWUFBWSxXQUFXO0FBQzVCLFlBQU0sSUFBSSxjQUFhLGlCQUFpQixtQkFBbUI7QUFBQSxJQUM3RDtBQUdBLE9BQUcsVUFBVTtBQUdiLE9BQUcsV0FBVztBQUdkLE9BQUcsVUFBVTtBQUliLFVBQU0sU0FBUyxLQUFLLE9BQU87QUFHM0IsVUFBTSxTQUFTLE9BQU8sVUFBVTtBQUloQyxVQUFNLFFBQVEsQ0FBQztBQUlmLFFBQUksZUFBZSxPQUFPLEtBQUs7QUFHL0IsUUFBSSxlQUFlO0FBT2xCLEtBQUMsWUFBWTtBQUNaLGNBQVEsR0FBRyxXQUFXO0FBRXBCLFlBQUk7QUFDRixrQkFBUSxNQUFNLFVBQVUsTUFBTTtBQUs5QixjQUFJLGlCQUFpQixHQUFHLFdBQVc7QUFDakMsMkJBQWUsTUFBTTtBQUNuQixpQ0FBbUIsYUFBYSxFQUFFO0FBQUEsYUFDbkM7QUFBQSxVQUNIO0FBR0EseUJBQWU7QUFLZixlQUFLLFFBQVEsTUFBTSxhQUFhLEtBQUssR0FBRztBQUt0QyxrQkFBTSxLQUFLLEtBQUs7QUFLaEIsaUJBRUksR0FBRyw2QkFBNkIsYUFDaEMsS0FBSyxJQUFJLElBQUksR0FBRyw0QkFBNEIsUUFFN0MsR0FBRyxXQUNKO0FBQ0EsaUJBQUcsMkJBQTJCLEtBQUssSUFBSTtBQUN2Qyw2QkFBZSxNQUFNO0FBQ25CLG1DQUFtQixZQUFZLEVBQUU7QUFBQSxlQUNsQztBQUFBLFlBQ0g7QUFJQSwyQkFBZSxPQUFPLEtBQUs7QUFBQSxVQUM3QixXQUFXLE1BQU07QUFJZiwyQkFBZSxNQUFNO0FBRW5CLGlCQUFHLFVBQVU7QUFJYixrQkFBSTtBQUNGLHNCQUFNLFNBQVMsWUFBWSxPQUFPLE1BQU0sS0FBSyxNQUFNLFlBQVk7QUFJL0Qsb0JBQUksR0FBRyxXQUFXO0FBQ2hCO0FBQUEsZ0JBQ0Y7QUFHQSxtQkFBRyxXQUFXO0FBR2QsbUNBQW1CLFFBQVEsRUFBRTtBQUFBLHVCQUN0QixPQUFQO0FBSUEsbUJBQUcsVUFBVTtBQUdiLG1DQUFtQixTQUFTLEVBQUU7QUFBQTtBQUtoQyxrQkFBSSxHQUFHLFlBQVksV0FBVztBQUM1QixtQ0FBbUIsV0FBVyxFQUFFO0FBQUEsY0FDbEM7QUFBQSxhQUNEO0FBRUQ7QUFBQSxVQUNGO0FBQUEsaUJBQ08sT0FBUDtBQUNBLGNBQUksR0FBRyxXQUFXO0FBQ2hCO0FBQUEsVUFDRjtBQUtBLHlCQUFlLE1BQU07QUFFbkIsZUFBRyxVQUFVO0FBR2IsZUFBRyxVQUFVO0FBR2IsK0JBQW1CLFNBQVMsRUFBRTtBQUk5QixnQkFBSSxHQUFHLFlBQVksV0FBVztBQUM1QixpQ0FBbUIsV0FBVyxFQUFFO0FBQUEsWUFDbEM7QUFBQSxXQUNEO0FBRUQ7QUFBQTtBQUFBLE1BRUo7QUFBQSxPQUNDO0FBQUE7QUFTTCxXQUFTLGtCQUFtQixDQUFDLEdBQUcsUUFBUTtBQUd0QyxVQUFNLFFBQVEsSUFBSSxjQUFjLEdBQUc7QUFBQSxNQUNqQyxTQUFTO0FBQUEsTUFDVCxZQUFZO0FBQUEsSUFDZCxDQUFDO0FBRUQsV0FBTyxjQUFjLEtBQUs7QUFBQTtBQVU1QixXQUFTLFdBQVksQ0FBQyxPQUFPLE1BQU0sVUFBVSxjQUFjO0FBTXpELFlBQVE7QUFBQSxXQUNELFdBQVc7QUFjZCxZQUFJLFVBQVU7QUFFZCxjQUFNLFNBQVMsY0FBYyxZQUFZLDBCQUEwQjtBQUVuRSxZQUFJLFdBQVcsV0FBVztBQUN4QixxQkFBVyxtQkFBbUIsTUFBTTtBQUFBLFFBQ3RDO0FBRUEsbUJBQVc7QUFFWCxjQUFNLFVBQVUsSUFBSSxjQUFjLFFBQVE7QUFFMUMsbUJBQVcsU0FBUyxPQUFPO0FBQ3pCLHFCQUFXLEtBQUssUUFBUSxNQUFNLEtBQUssQ0FBQztBQUFBLFFBQ3RDO0FBRUEsbUJBQVcsS0FBSyxRQUFRLElBQUksQ0FBQztBQUU3QixlQUFPO0FBQUEsTUFDVDtBQUFBLFdBQ0ssUUFBUTtBQUVYLFlBQUksV0FBVztBQUlmLFlBQUksY0FBYztBQUNoQixxQkFBVyxZQUFZLFlBQVk7QUFBQSxRQUNyQztBQUdBLFlBQUksYUFBYSxhQUFhLFVBQVU7QUFHdEMsZ0JBQU0sUUFBTyxjQUFjLFFBQVE7QUFJbkMsY0FBSSxVQUFTLFdBQVc7QUFDdEIsdUJBQVcsWUFBWSxNQUFLLFdBQVcsSUFBSSxTQUFTLENBQUM7QUFBQSxVQUN2RDtBQUFBLFFBQ0Y7QUFHQSxZQUFJLGFBQWEsV0FBVztBQUMxQixxQkFBVztBQUFBLFFBQ2I7QUFJQSxlQUFPLE9BQU8sT0FBTyxRQUFRO0FBQUEsTUFDL0I7QUFBQSxXQUNLLGVBQWU7QUFFbEIsY0FBTSxXQUFXLHFCQUFxQixLQUFLO0FBRTNDLGVBQU8sU0FBUztBQUFBLE1BQ2xCO0FBQUEsV0FDSyxnQkFBZ0I7QUFHbkIsWUFBSSxlQUFlO0FBRW5CLGNBQU0sVUFBVSxJQUFJLGNBQWMsUUFBUTtBQUUxQyxtQkFBVyxTQUFTLE9BQU87QUFDekIsMEJBQWdCLFFBQVEsTUFBTSxLQUFLO0FBQUEsUUFDckM7QUFFQSx3QkFBZ0IsUUFBUSxJQUFJO0FBRTVCLGVBQU87QUFBQSxNQUNUO0FBQUE7QUFBQTtBQVNKLFdBQVMsTUFBTyxDQUFDLFNBQVMsVUFBVTtBQUNsQyxVQUFNLFFBQVEscUJBQXFCLE9BQU87QUFHMUMsVUFBTSxjQUFjLFlBQVksS0FBSztBQUVyQyxRQUFJLFFBQVE7QUFHWixRQUFJLGdCQUFnQixNQUFNO0FBRXhCLGlCQUFXO0FBS1gsY0FBUSxnQkFBZ0IsVUFBVSxJQUFJO0FBQUEsSUFDeEM7QUFPQSxVQUFNLFNBQVMsTUFBTSxNQUFNLEtBQUs7QUFDaEMsV0FBTyxJQUFJLFlBQVksUUFBUSxFQUFFLE9BQU8sTUFBTTtBQUFBO0FBT2hELFdBQVMsV0FBWSxDQUFDLFNBQVM7QUFHN0IsV0FBTyxHQUFHLEdBQUcsS0FBSztBQU9sQixRQUFJLE1BQU0sT0FBUSxNQUFNLE9BQVEsTUFBTSxLQUFNO0FBQzFDLGFBQU87QUFBQSxJQUNULFdBQVcsTUFBTSxPQUFRLE1BQU0sS0FBTTtBQUNuQyxhQUFPO0FBQUEsSUFDVCxXQUFXLE1BQU0sT0FBUSxNQUFNLEtBQU07QUFDbkMsYUFBTztBQUFBLElBQ1Q7QUFFQSxXQUFPO0FBQUE7QUFNVCxXQUFTLG9CQUFxQixDQUFDLFdBQVc7QUFDeEMsVUFBTSxPQUFPLFVBQVUsT0FBTyxDQUFDLEdBQUcsTUFBTTtBQUN0QyxhQUFPLElBQUksRUFBRTtBQUFBLE9BQ1osQ0FBQztBQUVKLFFBQUksU0FBUztBQUViLFdBQU8sVUFBVSxPQUFPLENBQUMsR0FBRyxNQUFNO0FBQ2hDLFFBQUUsSUFBSSxHQUFHLE1BQU07QUFDZixnQkFBVSxFQUFFO0FBQ1osYUFBTztBQUFBLE9BQ04sSUFBSSxXQUFXLElBQUksQ0FBQztBQUFBO0FBR3pCLFNBQU8sVUFBVTtBQUFBLElBQ2Y7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0Y7QUFBQTs7OztBQ3JZQTtBQUFBLElBQ0U7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBO0FBRUY7QUFBQSxJQUNFO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBO0FBRUYsUUFBUTtBQUNSLFFBQVE7QUFFUjtBQUFBLFFBQU0sbUJBQW1CLFlBQVk7QUFBQSxJQUNuQyxXQUFZLEdBQUc7QUFDYixZQUFNO0FBRU4sV0FBSyxVQUFVO0FBQ2YsV0FBSyxXQUFXO0FBQ2hCLFdBQUssVUFBVTtBQUNmLFdBQUssV0FBVztBQUFBLFFBQ2QsU0FBUztBQUFBLFFBQ1QsT0FBTztBQUFBLFFBQ1AsT0FBTztBQUFBLFFBQ1AsTUFBTTtBQUFBLFFBQ04sVUFBVTtBQUFBLFFBQ1YsV0FBVztBQUFBLE1BQ2I7QUFBQTtBQUFBLElBT0YsaUJBQWtCLENBQUMsTUFBTTtBQUN2QixhQUFPLFdBQVcsTUFBTSxVQUFVO0FBRWxDLGFBQU8sb0JBQW9CLFdBQVcsR0FBRyxFQUFFLFFBQVEsK0JBQStCLENBQUM7QUFFbkYsYUFBTyxPQUFPLFdBQVcsS0FBSyxNQUFNLEVBQUUsUUFBUSxNQUFNLENBQUM7QUFJckQsb0JBQWMsTUFBTSxNQUFNLGFBQWE7QUFBQTtBQUFBLElBT3pDLGtCQUFtQixDQUFDLE1BQU07QUFDeEIsYUFBTyxXQUFXLE1BQU0sVUFBVTtBQUVsQyxhQUFPLG9CQUFvQixXQUFXLEdBQUcsRUFBRSxRQUFRLGdDQUFnQyxDQUFDO0FBRXBGLGFBQU8sT0FBTyxXQUFXLEtBQUssTUFBTSxFQUFFLFFBQVEsTUFBTSxDQUFDO0FBSXJELG9CQUFjLE1BQU0sTUFBTSxjQUFjO0FBQUE7QUFBQSxJQVExQyxVQUFXLENBQUMsTUFBTSxXQUFXLFdBQVc7QUFDdEMsYUFBTyxXQUFXLE1BQU0sVUFBVTtBQUVsQyxhQUFPLG9CQUFvQixXQUFXLEdBQUcsRUFBRSxRQUFRLHdCQUF3QixDQUFDO0FBRTVFLGFBQU8sT0FBTyxXQUFXLEtBQUssTUFBTSxFQUFFLFFBQVEsTUFBTSxDQUFDO0FBRXJELFVBQUksYUFBYSxXQUFXO0FBQzFCLG1CQUFXLE9BQU8sV0FBVyxVQUFVLFFBQVE7QUFBQSxNQUNqRDtBQUlBLG9CQUFjLE1BQU0sTUFBTSxRQUFRLFFBQVE7QUFBQTtBQUFBLElBTzVDLGFBQWMsQ0FBQyxNQUFNO0FBQ25CLGFBQU8sV0FBVyxNQUFNLFVBQVU7QUFFbEMsYUFBTyxvQkFBb0IsV0FBVyxHQUFHLEVBQUUsUUFBUSwyQkFBMkIsQ0FBQztBQUUvRSxhQUFPLE9BQU8sV0FBVyxLQUFLLE1BQU0sRUFBRSxRQUFRLE1BQU0sQ0FBQztBQUlyRCxvQkFBYyxNQUFNLE1BQU0sU0FBUztBQUFBO0FBQUEsSUFNckMsS0FBTSxHQUFHO0FBSVAsVUFBSSxLQUFLLFlBQVksV0FBVyxLQUFLLFlBQVksUUFBUTtBQUN2RCxhQUFLLFdBQVc7QUFDaEI7QUFBQSxNQUNGO0FBSUEsVUFBSSxLQUFLLFlBQVksV0FBVztBQUM5QixhQUFLLFVBQVU7QUFDZixhQUFLLFdBQVc7QUFBQSxNQUNsQjtBQUtBLFdBQUssWUFBWTtBQU1qQix5QkFBbUIsU0FBUyxJQUFJO0FBSWhDLFVBQUksS0FBSyxZQUFZLFdBQVc7QUFDOUIsMkJBQW1CLFdBQVcsSUFBSTtBQUFBLE1BQ3BDO0FBQUE7QUFBQSxRQU1FLFVBQVcsR0FBRztBQUNoQixhQUFPLFdBQVcsTUFBTSxVQUFVO0FBRWxDLGNBQVEsS0FBSztBQUFBLGFBQ047QUFBUyxpQkFBTyxLQUFLO0FBQUEsYUFDckI7QUFBVyxpQkFBTyxLQUFLO0FBQUEsYUFDdkI7QUFBUSxpQkFBTyxLQUFLO0FBQUE7QUFBQTtBQUFBLFFBT3pCLE1BQU8sR0FBRztBQUNaLGFBQU8sV0FBVyxNQUFNLFVBQVU7QUFJbEMsYUFBTyxLQUFLO0FBQUE7QUFBQSxRQU1WLEtBQU0sR0FBRztBQUNYLGFBQU8sV0FBVyxNQUFNLFVBQVU7QUFJbEMsYUFBTyxLQUFLO0FBQUE7QUFBQSxRQUdWLFNBQVUsR0FBRztBQUNmLGFBQU8sV0FBVyxNQUFNLFVBQVU7QUFFbEMsYUFBTyxLQUFLLFNBQVM7QUFBQTtBQUFBLFFBR25CLFNBQVUsQ0FBQyxJQUFJO0FBQ2pCLGFBQU8sV0FBVyxNQUFNLFVBQVU7QUFFbEMsVUFBSSxLQUFLLFNBQVMsU0FBUztBQUN6QixhQUFLLG9CQUFvQixXQUFXLEtBQUssU0FBUyxPQUFPO0FBQUEsTUFDM0Q7QUFFQSxpQkFBVyxPQUFPLFlBQVk7QUFDNUIsYUFBSyxTQUFTLFVBQVU7QUFDeEIsYUFBSyxpQkFBaUIsV0FBVyxFQUFFO0FBQUEsTUFDckMsT0FBTztBQUNMLGFBQUssU0FBUyxVQUFVO0FBQUE7QUFBQTtBQUFBLFFBSXhCLE9BQVEsR0FBRztBQUNiLGFBQU8sV0FBVyxNQUFNLFVBQVU7QUFFbEMsYUFBTyxLQUFLLFNBQVM7QUFBQTtBQUFBLFFBR25CLE9BQVEsQ0FBQyxJQUFJO0FBQ2YsYUFBTyxXQUFXLE1BQU0sVUFBVTtBQUVsQyxVQUFJLEtBQUssU0FBUyxPQUFPO0FBQ3ZCLGFBQUssb0JBQW9CLFNBQVMsS0FBSyxTQUFTLEtBQUs7QUFBQSxNQUN2RDtBQUVBLGlCQUFXLE9BQU8sWUFBWTtBQUM1QixhQUFLLFNBQVMsUUFBUTtBQUN0QixhQUFLLGlCQUFpQixTQUFTLEVBQUU7QUFBQSxNQUNuQyxPQUFPO0FBQ0wsYUFBSyxTQUFTLFFBQVE7QUFBQTtBQUFBO0FBQUEsUUFJdEIsV0FBWSxHQUFHO0FBQ2pCLGFBQU8sV0FBVyxNQUFNLFVBQVU7QUFFbEMsYUFBTyxLQUFLLFNBQVM7QUFBQTtBQUFBLFFBR25CLFdBQVksQ0FBQyxJQUFJO0FBQ25CLGFBQU8sV0FBVyxNQUFNLFVBQVU7QUFFbEMsVUFBSSxLQUFLLFNBQVMsV0FBVztBQUMzQixhQUFLLG9CQUFvQixhQUFhLEtBQUssU0FBUyxTQUFTO0FBQUEsTUFDL0Q7QUFFQSxpQkFBVyxPQUFPLFlBQVk7QUFDNUIsYUFBSyxTQUFTLFlBQVk7QUFDMUIsYUFBSyxpQkFBaUIsYUFBYSxFQUFFO0FBQUEsTUFDdkMsT0FBTztBQUNMLGFBQUssU0FBUyxZQUFZO0FBQUE7QUFBQTtBQUFBLFFBSTFCLFVBQVcsR0FBRztBQUNoQixhQUFPLFdBQVcsTUFBTSxVQUFVO0FBRWxDLGFBQU8sS0FBSyxTQUFTO0FBQUE7QUFBQSxRQUduQixVQUFXLENBQUMsSUFBSTtBQUNsQixhQUFPLFdBQVcsTUFBTSxVQUFVO0FBRWxDLFVBQUksS0FBSyxTQUFTLFVBQVU7QUFDMUIsYUFBSyxvQkFBb0IsWUFBWSxLQUFLLFNBQVMsUUFBUTtBQUFBLE1BQzdEO0FBRUEsaUJBQVcsT0FBTyxZQUFZO0FBQzVCLGFBQUssU0FBUyxXQUFXO0FBQ3pCLGFBQUssaUJBQWlCLFlBQVksRUFBRTtBQUFBLE1BQ3RDLE9BQU87QUFDTCxhQUFLLFNBQVMsV0FBVztBQUFBO0FBQUE7QUFBQSxRQUl6QixNQUFPLEdBQUc7QUFDWixhQUFPLFdBQVcsTUFBTSxVQUFVO0FBRWxDLGFBQU8sS0FBSyxTQUFTO0FBQUE7QUFBQSxRQUduQixNQUFPLENBQUMsSUFBSTtBQUNkLGFBQU8sV0FBVyxNQUFNLFVBQVU7QUFFbEMsVUFBSSxLQUFLLFNBQVMsTUFBTTtBQUN0QixhQUFLLG9CQUFvQixRQUFRLEtBQUssU0FBUyxJQUFJO0FBQUEsTUFDckQ7QUFFQSxpQkFBVyxPQUFPLFlBQVk7QUFDNUIsYUFBSyxTQUFTLE9BQU87QUFDckIsYUFBSyxpQkFBaUIsUUFBUSxFQUFFO0FBQUEsTUFDbEMsT0FBTztBQUNMLGFBQUssU0FBUyxPQUFPO0FBQUE7QUFBQTtBQUFBLFFBSXJCLE9BQVEsR0FBRztBQUNiLGFBQU8sV0FBVyxNQUFNLFVBQVU7QUFFbEMsYUFBTyxLQUFLLFNBQVM7QUFBQTtBQUFBLFFBR25CLE9BQVEsQ0FBQyxJQUFJO0FBQ2YsYUFBTyxXQUFXLE1BQU0sVUFBVTtBQUVsQyxVQUFJLEtBQUssU0FBUyxPQUFPO0FBQ3ZCLGFBQUssb0JBQW9CLFNBQVMsS0FBSyxTQUFTLEtBQUs7QUFBQSxNQUN2RDtBQUVBLGlCQUFXLE9BQU8sWUFBWTtBQUM1QixhQUFLLFNBQVMsUUFBUTtBQUN0QixhQUFLLGlCQUFpQixTQUFTLEVBQUU7QUFBQSxNQUNuQyxPQUFPO0FBQ0wsYUFBSyxTQUFTLFFBQVE7QUFBQTtBQUFBO0FBQUEsRUFHNUI7QUFHQSxhQUFXLFFBQVEsV0FBVyxVQUFVLFFBQVE7QUFFaEQsYUFBVyxVQUFVLFdBQVcsVUFBVSxVQUFVO0FBRXBELGFBQVcsT0FBTyxXQUFXLFVBQVUsT0FBTztBQUU5QyxTQUFPLGlCQUFpQixXQUFXLFdBQVc7QUFBQSxJQUM1QyxPQUFPO0FBQUEsSUFDUCxTQUFTO0FBQUEsSUFDVCxNQUFNO0FBQUEsSUFDTixtQkFBbUI7QUFBQSxJQUNuQixvQkFBb0I7QUFBQSxJQUNwQixZQUFZO0FBQUEsSUFDWixlQUFlO0FBQUEsSUFDZixPQUFPO0FBQUEsSUFDUCxZQUFZO0FBQUEsSUFDWixRQUFRO0FBQUEsSUFDUixPQUFPO0FBQUEsSUFDUCxhQUFhO0FBQUEsSUFDYixZQUFZO0FBQUEsSUFDWixRQUFRO0FBQUEsSUFDUixTQUFTO0FBQUEsSUFDVCxTQUFTO0FBQUEsSUFDVCxXQUFXO0FBQUEsS0FDVixPQUFPLGNBQWM7QUFBQSxNQUNwQixPQUFPO0FBQUEsTUFDUCxVQUFVO0FBQUEsTUFDVixZQUFZO0FBQUEsTUFDWixjQUFjO0FBQUEsSUFDaEI7QUFBQSxFQUNGLENBQUM7QUFFRCxTQUFPLGlCQUFpQixZQUFZO0FBQUEsSUFDbEMsT0FBTztBQUFBLElBQ1AsU0FBUztBQUFBLElBQ1QsTUFBTTtBQUFBLEVBQ1IsQ0FBQztBQUVELFNBQU8sVUFBVTtBQUFBLElBQ2Y7QUFBQSxFQUNGO0FBQUE7Ozs7QUNyVkEsU0FBTyxVQUFVO0FBQUEsSUFDZiw4QkFBdUM7QUFBQSxFQUN6QztBQUFBOzs7O0FDRkEsTUFBTTtBQUNOLFFBQVE7QUFDUixRQUFRO0FBU1IsV0FBUyxTQUFVLENBQUMsR0FBRyxHQUFHLGtCQUFrQixPQUFPO0FBQ2pELFVBQU0sY0FBYyxjQUFjLEdBQUcsZUFBZTtBQUVwRCxVQUFNLGNBQWMsY0FBYyxHQUFHLGVBQWU7QUFFcEQsV0FBTyxnQkFBZ0I7QUFBQTtBQU96QixXQUFTLFdBQVksQ0FBQyxRQUFRO0FBQzVCLFdBQU8sV0FBVyxJQUFJO0FBRXRCLFVBQU0sU0FBUyxDQUFDO0FBRWhCLGFBQVMsU0FBUyxPQUFPLE1BQU0sR0FBRyxHQUFHO0FBQ25DLGNBQVEsTUFBTSxLQUFLO0FBRW5CLFdBQUssTUFBTSxRQUFRO0FBQ2pCO0FBQUEsTUFDRixZQUFZLGtCQUFrQixLQUFLLEdBQUc7QUFDcEM7QUFBQSxNQUNGO0FBRUEsYUFBTyxLQUFLLEtBQUs7QUFBQSxJQUNuQjtBQUVBLFdBQU87QUFBQTtBQUdULFNBQU8sVUFBVTtBQUFBLElBQ2Y7QUFBQSxJQUNBO0FBQUEsRUFDRjtBQUFBOzs7O0FDOUNBLFFBQVE7QUFDUixRQUFRLFdBQVcsYUFBYTtBQUNoQyxRQUFRLHFCQUFxQjtBQUM3QixRQUFRO0FBQ1IsUUFBUTtBQUNSLFFBQVEsVUFBVTtBQUNsQixRQUFRO0FBQ1IsUUFBUSxRQUFRLFVBQVUsUUFBUTtBQUNsQyxRQUFRO0FBQ1IsUUFBUSxzQkFBc0IsdUJBQXVCO0FBQ3JELE1BQU07QUFDTixRQUFRO0FBZ0JSO0FBQUEsUUFBTSxNQUFNO0FBQUEsSUFLVjtBQUFBLElBRUEsV0FBWSxHQUFHO0FBQ2IsVUFBSSxVQUFVLE9BQU8sWUFBWTtBQUMvQixlQUFPLG1CQUFtQjtBQUFBLE1BQzVCO0FBRUEsV0FBSywrQkFBK0IsVUFBVTtBQUFBO0FBQUEsU0FHMUMsTUFBTSxDQUFDLFNBQVMsVUFBVSxDQUFDLEdBQUc7QUFDbEMsYUFBTyxXQUFXLE1BQU0sS0FBSztBQUM3QixhQUFPLG9CQUFvQixXQUFXLEdBQUcsRUFBRSxRQUFRLGNBQWMsQ0FBQztBQUVsRSxnQkFBVSxPQUFPLFdBQVcsWUFBWSxPQUFPO0FBQy9DLGdCQUFVLE9BQU8sV0FBVyxrQkFBa0IsT0FBTztBQUVyRCxZQUFNLElBQUksTUFBTSxLQUFLLFNBQVMsU0FBUyxPQUFPO0FBRTlDLFVBQUksRUFBRSxXQUFXLEdBQUc7QUFDbEI7QUFBQSxNQUNGO0FBRUEsYUFBTyxFQUFFO0FBQUE7QUFBQSxTQUdMLFNBQVMsQ0FBQyxVQUFVLFdBQVcsVUFBVSxDQUFDLEdBQUc7QUFDakQsYUFBTyxXQUFXLE1BQU0sS0FBSztBQUU3QixVQUFJLFlBQVk7QUFBVyxrQkFBVSxPQUFPLFdBQVcsWUFBWSxPQUFPO0FBQzFFLGdCQUFVLE9BQU8sV0FBVyxrQkFBa0IsT0FBTztBQUdyRCxVQUFJLElBQUk7QUFHUixVQUFJLFlBQVksV0FBVztBQUN6QixZQUFJLG1CQUFtQixTQUFTO0FBRTlCLGNBQUksUUFBUTtBQUdaLGNBQUksRUFBRSxXQUFXLFVBQVUsUUFBUSxjQUFjO0FBQy9DLG1CQUFPLENBQUM7QUFBQSxVQUNWO0FBQUEsUUFDRixrQkFBa0IsWUFBWSxVQUFVO0FBRXRDLGNBQUksSUFBSSxRQUFRLE9BQU8sRUFBRTtBQUFBLFFBQzNCO0FBQUEsTUFDRjtBQUlBLFlBQU0sWUFBWSxDQUFDO0FBR25CLFVBQUksWUFBWSxXQUFXO0FBRXpCLG1CQUFXLG1CQUFtQixLQUFLLDhCQUE4QjtBQUMvRCxvQkFBVSxLQUFLLGdCQUFnQixFQUFFO0FBQUEsUUFDbkM7QUFBQSxNQUNGLE9BQU87QUFFTCxjQUFNLG1CQUFtQixLQUFLLFlBQVksR0FBRyxPQUFPO0FBR3BELG1CQUFXLG1CQUFtQixrQkFBa0I7QUFDOUMsb0JBQVUsS0FBSyxnQkFBZ0IsRUFBRTtBQUFBLFFBQ25DO0FBQUE7QUFPRixZQUFNLGVBQWUsQ0FBQztBQUd0QixpQkFBVyxZQUFZLFdBQVc7QUFFaEMsY0FBTSxpQkFBaUIsSUFBSSxTQUFTLFNBQVMsTUFBTSxVQUFVLElBQUk7QUFDakUsY0FBTSxPQUFPLGVBQWUsUUFBUTtBQUNwQyx1QkFBZSxVQUFVO0FBQ3pCLHVCQUFlLFFBQVEsT0FBTztBQUM5Qix1QkFBZSxVQUFVLGdCQUFnQixTQUFTO0FBQ2xELHVCQUFlLFVBQVUsVUFBVTtBQUVuQyxxQkFBYSxLQUFLLGNBQWM7QUFBQSxNQUNsQztBQUdBLGFBQU8sT0FBTyxPQUFPLFlBQVk7QUFBQTtBQUFBLFNBRzdCLElBQUksQ0FBQyxTQUFTO0FBQ2xCLGFBQU8sV0FBVyxNQUFNLEtBQUs7QUFDN0IsYUFBTyxvQkFBb0IsV0FBVyxHQUFHLEVBQUUsUUFBUSxZQUFZLENBQUM7QUFFaEUsZ0JBQVUsT0FBTyxXQUFXLFlBQVksT0FBTztBQUcvQyxZQUFNLFdBQVcsQ0FBQyxPQUFPO0FBR3pCLFlBQU0sdUJBQXVCLEtBQUssT0FBTyxRQUFRO0FBR2pELGFBQU8sTUFBTTtBQUFBO0FBQUEsU0FHVCxPQUFPLENBQUMsVUFBVTtBQUN0QixhQUFPLFdBQVcsTUFBTSxLQUFLO0FBQzdCLGFBQU8sb0JBQW9CLFdBQVcsR0FBRyxFQUFFLFFBQVEsZUFBZSxDQUFDO0FBRW5FLGlCQUFXLE9BQU8sV0FBVyx5QkFBeUIsUUFBUTtBQUc5RCxZQUFNLG1CQUFtQixDQUFDO0FBRzFCLFlBQU0sY0FBYyxDQUFDO0FBR3JCLGlCQUFXLFdBQVcsVUFBVTtBQUM5QixtQkFBVyxZQUFZLFVBQVU7QUFDL0I7QUFBQSxRQUNGO0FBR0EsY0FBTSxJQUFJLFFBQVE7QUFHbEIsYUFBSyxxQkFBcUIsRUFBRSxHQUFHLEtBQUssRUFBRSxXQUFXLE9BQU87QUFDdEQsZ0JBQU0sT0FBTyxPQUFPLFVBQVU7QUFBQSxZQUM1QixRQUFRO0FBQUEsWUFDUixTQUFTO0FBQUEsVUFDWCxDQUFDO0FBQUEsUUFDSDtBQUFBLE1BQ0Y7QUFJQSxZQUFNLG1CQUFtQixDQUFDO0FBRzFCLGlCQUFXLFdBQVcsVUFBVTtBQUU5QixjQUFNLElBQUksSUFBSSxRQUFRLE9BQU8sRUFBRTtBQUcvQixhQUFLLHFCQUFxQixFQUFFLEdBQUcsR0FBRztBQUNoQyxnQkFBTSxPQUFPLE9BQU8sVUFBVTtBQUFBLFlBQzVCLFFBQVE7QUFBQSxZQUNSLFNBQVM7QUFBQSxVQUNYLENBQUM7QUFBQSxRQUNIO0FBR0EsVUFBRSxZQUFZO0FBQ2QsVUFBRSxjQUFjO0FBR2hCLG9CQUFZLEtBQUssQ0FBQztBQUdsQixjQUFNLGtCQUFrQixzQkFBc0I7QUFHOUMseUJBQWlCLEtBQUssU0FBUztBQUFBLFVBQzdCLFNBQVM7QUFBQSxVQUNULFlBQVksb0JBQW9CO0FBQUEsVUFDaEMsZUFBZ0IsQ0FBQyxVQUFVO0FBRXpCLGdCQUFJLFNBQVMsU0FBUyxXQUFXLFNBQVMsV0FBVyxPQUFPLFNBQVMsU0FBUyxPQUFPLFNBQVMsU0FBUyxLQUFLO0FBQzFHLDhCQUFnQixPQUFPLE9BQU8sT0FBTyxVQUFVO0FBQUEsZ0JBQzdDLFFBQVE7QUFBQSxnQkFDUixTQUFTO0FBQUEsY0FDWCxDQUFDLENBQUM7QUFBQSxZQUNKLFdBQVcsU0FBUyxZQUFZLFNBQVMsTUFBTSxHQUFHO0FBRWhELG9CQUFNLGNBQWMsZUFBZSxTQUFTLFlBQVksSUFBSSxNQUFNLENBQUM7QUFHbkUseUJBQVcsY0FBYyxhQUFhO0FBRXBDLG9CQUFJLGVBQWUsS0FBSztBQUN0QixrQ0FBZ0IsT0FBTyxPQUFPLE9BQU8sVUFBVTtBQUFBLG9CQUM3QyxRQUFRO0FBQUEsb0JBQ1IsU0FBUztBQUFBLGtCQUNYLENBQUMsQ0FBQztBQUVGLDZCQUFXLGNBQWMsa0JBQWtCO0FBQ3pDLCtCQUFXLE1BQU07QUFBQSxrQkFDbkI7QUFFQTtBQUFBLGdCQUNGO0FBQUEsY0FDRjtBQUFBLFlBQ0Y7QUFBQTtBQUFBLFVBRUYsd0JBQXlCLENBQUMsVUFBVTtBQUVsQyxnQkFBSSxTQUFTLFNBQVM7QUFDcEIsOEJBQWdCLE9BQU8sSUFBSSxhQUFhLFdBQVcsWUFBWSxDQUFDO0FBQ2hFO0FBQUEsWUFDRjtBQUdBLDRCQUFnQixRQUFRLFFBQVE7QUFBQTtBQUFBLFFBRXBDLENBQUMsQ0FBQztBQUdGLHlCQUFpQixLQUFLLGdCQUFnQixPQUFPO0FBQUEsTUFDL0M7QUFHQSxZQUFNLElBQUksUUFBUSxJQUFJLGdCQUFnQjtBQUd0QyxZQUFNLFlBQVksTUFBTTtBQUd4QixZQUFNLGFBQWEsQ0FBQztBQUdwQixVQUFJLFFBQVE7QUFHWixpQkFBVyxZQUFZLFdBQVc7QUFHaEMsY0FBTSxZQUFZO0FBQUEsVUFDaEIsTUFBTTtBQUFBLFVBQ04sU0FBUyxZQUFZO0FBQUEsVUFDckI7QUFBQSxRQUNGO0FBRUEsbUJBQVcsS0FBSyxTQUFTO0FBRXpCO0FBQUEsTUFDRjtBQUdBLFlBQU0sa0JBQWtCLHNCQUFzQjtBQUc5QyxVQUFJLFlBQVk7QUFHaEIsVUFBSTtBQUNGLGFBQUssc0JBQXNCLFVBQVU7QUFBQSxlQUM5QixHQUFQO0FBQ0Esb0JBQVk7QUFBQTtBQUlkLHFCQUFlLE1BQU07QUFFbkIsWUFBSSxjQUFjLE1BQU07QUFDdEIsMEJBQWdCLFFBQVEsU0FBUztBQUFBLFFBQ25DLE9BQU87QUFFTCwwQkFBZ0IsT0FBTyxTQUFTO0FBQUE7QUFBQSxPQUVuQztBQUdELGFBQU8sZ0JBQWdCO0FBQUE7QUFBQSxTQUduQixJQUFJLENBQUMsU0FBUyxVQUFVO0FBQzVCLGFBQU8sV0FBVyxNQUFNLEtBQUs7QUFDN0IsYUFBTyxvQkFBb0IsV0FBVyxHQUFHLEVBQUUsUUFBUSxZQUFZLENBQUM7QUFFaEUsZ0JBQVUsT0FBTyxXQUFXLFlBQVksT0FBTztBQUMvQyxpQkFBVyxPQUFPLFdBQVcsU0FBUyxRQUFRO0FBRzlDLFVBQUksZUFBZTtBQUduQixVQUFJLG1CQUFtQixTQUFTO0FBQzlCLHVCQUFlLFFBQVE7QUFBQSxNQUN6QixPQUFPO0FBQ0wsdUJBQWUsSUFBSSxRQUFRLE9BQU8sRUFBRTtBQUFBO0FBSXRDLFdBQUsscUJBQXFCLGFBQWEsR0FBRyxLQUFLLGFBQWEsV0FBVyxPQUFPO0FBQzVFLGNBQU0sT0FBTyxPQUFPLFVBQVU7QUFBQSxVQUM1QixRQUFRO0FBQUEsVUFDUixTQUFTO0FBQUEsUUFDWCxDQUFDO0FBQUEsTUFDSDtBQUdBLFlBQU0sZ0JBQWdCLFNBQVM7QUFHL0IsVUFBSSxjQUFjLFdBQVcsS0FBSztBQUNoQyxjQUFNLE9BQU8sT0FBTyxVQUFVO0FBQUEsVUFDNUIsUUFBUTtBQUFBLFVBQ1IsU0FBUztBQUFBLFFBQ1gsQ0FBQztBQUFBLE1BQ0g7QUFHQSxVQUFJLGNBQWMsWUFBWSxTQUFTLE1BQU0sR0FBRztBQUU5QyxjQUFNLGNBQWMsZUFBZSxjQUFjLFlBQVksSUFBSSxNQUFNLENBQUM7QUFHeEUsbUJBQVcsY0FBYyxhQUFhO0FBRXBDLGNBQUksZUFBZSxLQUFLO0FBQ3RCLGtCQUFNLE9BQU8sT0FBTyxVQUFVO0FBQUEsY0FDNUIsUUFBUTtBQUFBLGNBQ1IsU0FBUztBQUFBLFlBQ1gsQ0FBQztBQUFBLFVBQ0g7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUdBLFVBQUksY0FBYyxTQUFTLFlBQVksY0FBYyxLQUFLLE1BQU0sS0FBSyxjQUFjLEtBQUssT0FBTyxTQUFTO0FBQ3RHLGNBQU0sT0FBTyxPQUFPLFVBQVU7QUFBQSxVQUM1QixRQUFRO0FBQUEsVUFDUixTQUFTO0FBQUEsUUFDWCxDQUFDO0FBQUEsTUFDSDtBQUdBLFlBQU0saUJBQWlCLGNBQWMsYUFBYTtBQUdsRCxZQUFNLGtCQUFrQixzQkFBc0I7QUFHOUMsVUFBSSxjQUFjLFFBQVEsTUFBTTtBQUU5QixjQUFNLFNBQVMsY0FBYyxLQUFLO0FBR2xDLGNBQU0sU0FBUyxPQUFPLFVBQVU7QUFHaEMscUJBQWEsTUFBTSxFQUFFLEtBQUssZ0JBQWdCLFNBQVMsZ0JBQWdCLE1BQU07QUFBQSxNQUMzRSxPQUFPO0FBQ0wsd0JBQWdCLFFBQVEsU0FBUztBQUFBO0FBS25DLFlBQU0sYUFBYSxDQUFDO0FBSXBCLFlBQU0sWUFBWTtBQUFBLFFBQ2hCLE1BQU07QUFBQSxRQUNOLFNBQVM7QUFBQSxRQUNULFVBQVU7QUFBQSxNQUNaO0FBR0EsaUJBQVcsS0FBSyxTQUFTO0FBR3pCLFlBQU0sUUFBUSxNQUFNLGdCQUFnQjtBQUVwQyxVQUFJLGVBQWUsUUFBUSxNQUFNO0FBQy9CLHVCQUFlLEtBQUssU0FBUztBQUFBLE1BQy9CO0FBR0EsWUFBTSxrQkFBa0Isc0JBQXNCO0FBRzlDLFVBQUksWUFBWTtBQUdoQixVQUFJO0FBQ0YsYUFBSyxzQkFBc0IsVUFBVTtBQUFBLGVBQzlCLEdBQVA7QUFDQSxvQkFBWTtBQUFBO0FBSWQscUJBQWUsTUFBTTtBQUVuQixZQUFJLGNBQWMsTUFBTTtBQUN0QiwwQkFBZ0IsUUFBUTtBQUFBLFFBQzFCLE9BQU87QUFDTCwwQkFBZ0IsT0FBTyxTQUFTO0FBQUE7QUFBQSxPQUVuQztBQUVELGFBQU8sZ0JBQWdCO0FBQUE7QUFBQSxTQUduQixPQUFPLENBQUMsU0FBUyxVQUFVLENBQUMsR0FBRztBQUNuQyxhQUFPLFdBQVcsTUFBTSxLQUFLO0FBQzdCLGFBQU8sb0JBQW9CLFdBQVcsR0FBRyxFQUFFLFFBQVEsZUFBZSxDQUFDO0FBRW5FLGdCQUFVLE9BQU8sV0FBVyxZQUFZLE9BQU87QUFDL0MsZ0JBQVUsT0FBTyxXQUFXLGtCQUFrQixPQUFPO0FBS3JELFVBQUksSUFBSTtBQUVSLFVBQUksbUJBQW1CLFNBQVM7QUFDOUIsWUFBSSxRQUFRO0FBRVosWUFBSSxFQUFFLFdBQVcsVUFBVSxRQUFRLGNBQWM7QUFDL0MsaUJBQU87QUFBQSxRQUNUO0FBQUEsTUFDRixPQUFPO0FBQ0wsc0JBQWMsWUFBWSxRQUFRO0FBRWxDLFlBQUksSUFBSSxRQUFRLE9BQU8sRUFBRTtBQUFBO0FBSTNCLFlBQU0sYUFBYSxDQUFDO0FBR3BCLFlBQU0sWUFBWTtBQUFBLFFBQ2hCLE1BQU07QUFBQSxRQUNOLFNBQVM7QUFBQSxRQUNUO0FBQUEsTUFDRjtBQUVBLGlCQUFXLEtBQUssU0FBUztBQUV6QixZQUFNLGtCQUFrQixzQkFBc0I7QUFFOUMsVUFBSSxZQUFZO0FBQ2hCLFVBQUk7QUFFSixVQUFJO0FBQ0YsMkJBQW1CLEtBQUssc0JBQXNCLFVBQVU7QUFBQSxlQUNqRCxHQUFQO0FBQ0Esb0JBQVk7QUFBQTtBQUdkLHFCQUFlLE1BQU07QUFDbkIsWUFBSSxjQUFjLE1BQU07QUFDdEIsMEJBQWdCLFVBQVUsa0JBQWtCLE1BQU07QUFBQSxRQUNwRCxPQUFPO0FBQ0wsMEJBQWdCLE9BQU8sU0FBUztBQUFBO0FBQUEsT0FFbkM7QUFFRCxhQUFPLGdCQUFnQjtBQUFBO0FBQUEsU0FTbkIsS0FBSyxDQUFDLFVBQVUsV0FBVyxVQUFVLENBQUMsR0FBRztBQUM3QyxhQUFPLFdBQVcsTUFBTSxLQUFLO0FBRTdCLFVBQUksWUFBWTtBQUFXLGtCQUFVLE9BQU8sV0FBVyxZQUFZLE9BQU87QUFDMUUsZ0JBQVUsT0FBTyxXQUFXLGtCQUFrQixPQUFPO0FBR3JELFVBQUksSUFBSTtBQUdSLFVBQUksWUFBWSxXQUFXO0FBRXpCLFlBQUksbUJBQW1CLFNBQVM7QUFFOUIsY0FBSSxRQUFRO0FBR1osY0FBSSxFQUFFLFdBQVcsVUFBVSxRQUFRLGNBQWM7QUFDL0MsbUJBQU8sQ0FBQztBQUFBLFVBQ1Y7QUFBQSxRQUNGLGtCQUFrQixZQUFZLFVBQVU7QUFDdEMsY0FBSSxJQUFJLFFBQVEsT0FBTyxFQUFFO0FBQUEsUUFDM0I7QUFBQSxNQUNGO0FBR0EsWUFBTSxVQUFVLHNCQUFzQjtBQUl0QyxZQUFNLFdBQVcsQ0FBQztBQUdsQixVQUFJLFlBQVksV0FBVztBQUV6QixtQkFBVyxtQkFBbUIsS0FBSyw4QkFBOEI7QUFFL0QsbUJBQVMsS0FBSyxnQkFBZ0IsRUFBRTtBQUFBLFFBQ2xDO0FBQUEsTUFDRixPQUFPO0FBRUwsY0FBTSxtQkFBbUIsS0FBSyxZQUFZLEdBQUcsT0FBTztBQUdwRCxtQkFBVyxtQkFBbUIsa0JBQWtCO0FBRTlDLG1CQUFTLEtBQUssZ0JBQWdCLEVBQUU7QUFBQSxRQUNsQztBQUFBO0FBSUYscUJBQWUsTUFBTTtBQUVuQixjQUFNLGNBQWMsQ0FBQztBQUdyQixtQkFBVyxZQUFXLFVBQVU7QUFDOUIsZ0JBQU0sZ0JBQWdCLElBQUksUUFBUSxXQUFXO0FBQzdDLHdCQUFjLFVBQVU7QUFDeEIsd0JBQWMsVUFBVSxnQkFBZ0IsU0FBUTtBQUNoRCx3QkFBYyxVQUFVLFVBQVU7QUFDbEMsd0JBQWMsVUFBVSxTQUFRO0FBR2hDLHNCQUFZLEtBQUssYUFBYTtBQUFBLFFBQ2hDO0FBR0EsZ0JBQVEsUUFBUSxPQUFPLE9BQU8sV0FBVyxDQUFDO0FBQUEsT0FDM0M7QUFFRCxhQUFPLFFBQVE7QUFBQTtBQUFBLElBUWpCLHFCQUFzQixDQUFDLFlBQVk7QUFFakMsWUFBTSxRQUFRLEtBQUs7QUFHbkIsWUFBTSxjQUFjLENBQUMsR0FBRyxLQUFLO0FBRzdCLFlBQU0sYUFBYSxDQUFDO0FBR3BCLFlBQU0sYUFBYSxDQUFDO0FBRXBCLFVBQUk7QUFFRixtQkFBVyxhQUFhLFlBQVk7QUFFbEMsY0FBSSxVQUFVLFNBQVMsWUFBWSxVQUFVLFNBQVMsT0FBTztBQUMzRCxrQkFBTSxPQUFPLE9BQU8sVUFBVTtBQUFBLGNBQzVCLFFBQVE7QUFBQSxjQUNSLFNBQVM7QUFBQSxZQUNYLENBQUM7QUFBQSxVQUNIO0FBR0EsY0FBSSxVQUFVLFNBQVMsWUFBWSxVQUFVLFlBQVksTUFBTTtBQUM3RCxrQkFBTSxPQUFPLE9BQU8sVUFBVTtBQUFBLGNBQzVCLFFBQVE7QUFBQSxjQUNSLFNBQVM7QUFBQSxZQUNYLENBQUM7QUFBQSxVQUNIO0FBR0EsY0FBSSxLQUFLLFlBQVksVUFBVSxTQUFTLFVBQVUsU0FBUyxVQUFVLEVBQUUsUUFBUTtBQUM3RSxrQkFBTSxJQUFJLGFBQWEsT0FBTyxtQkFBbUI7QUFBQSxVQUNuRDtBQUdBLGNBQUk7QUFHSixjQUFJLFVBQVUsU0FBUyxVQUFVO0FBRS9CLCtCQUFtQixLQUFLLFlBQVksVUFBVSxTQUFTLFVBQVUsT0FBTztBQUd4RSxnQkFBSSxpQkFBaUIsV0FBVyxHQUFHO0FBQ2pDLHFCQUFPLENBQUM7QUFBQSxZQUNWO0FBR0EsdUJBQVcsbUJBQW1CLGtCQUFrQjtBQUM5QyxvQkFBTSxNQUFNLE1BQU0sUUFBUSxlQUFlO0FBQ3pDLHFCQUFPLFFBQVEsRUFBRTtBQUdqQixvQkFBTSxPQUFPLEtBQUssQ0FBQztBQUFBLFlBQ3JCO0FBQUEsVUFDRixXQUFXLFVBQVUsU0FBUyxPQUFPO0FBRW5DLGdCQUFJLFVBQVUsWUFBWSxNQUFNO0FBQzlCLG9CQUFNLE9BQU8sT0FBTyxVQUFVO0FBQUEsZ0JBQzVCLFFBQVE7QUFBQSxnQkFDUixTQUFTO0FBQUEsY0FDWCxDQUFDO0FBQUEsWUFDSDtBQUdBLGtCQUFNLElBQUksVUFBVTtBQUdwQixpQkFBSyxxQkFBcUIsRUFBRSxHQUFHLEdBQUc7QUFDaEMsb0JBQU0sT0FBTyxPQUFPLFVBQVU7QUFBQSxnQkFDNUIsUUFBUTtBQUFBLGdCQUNSLFNBQVM7QUFBQSxjQUNYLENBQUM7QUFBQSxZQUNIO0FBR0EsZ0JBQUksRUFBRSxXQUFXLE9BQU87QUFDdEIsb0JBQU0sT0FBTyxPQUFPLFVBQVU7QUFBQSxnQkFDNUIsUUFBUTtBQUFBLGdCQUNSLFNBQVM7QUFBQSxjQUNYLENBQUM7QUFBQSxZQUNIO0FBR0EsZ0JBQUksVUFBVSxXQUFXLE1BQU07QUFDN0Isb0JBQU0sT0FBTyxPQUFPLFVBQVU7QUFBQSxnQkFDNUIsUUFBUTtBQUFBLGdCQUNSLFNBQVM7QUFBQSxjQUNYLENBQUM7QUFBQSxZQUNIO0FBR0EsK0JBQW1CLEtBQUssWUFBWSxVQUFVLE9BQU87QUFHckQsdUJBQVcsbUJBQW1CLGtCQUFrQjtBQUM5QyxvQkFBTSxNQUFNLE1BQU0sUUFBUSxlQUFlO0FBQ3pDLHFCQUFPLFFBQVEsRUFBRTtBQUdqQixvQkFBTSxPQUFPLEtBQUssQ0FBQztBQUFBLFlBQ3JCO0FBR0Esa0JBQU0sS0FBSyxDQUFDLFVBQVUsU0FBUyxVQUFVLFFBQVEsQ0FBQztBQUdsRCx1QkFBVyxLQUFLLENBQUMsVUFBVSxTQUFTLFVBQVUsUUFBUSxDQUFDO0FBQUEsVUFDekQ7QUFHQSxxQkFBVyxLQUFLLENBQUMsVUFBVSxTQUFTLFVBQVUsUUFBUSxDQUFDO0FBQUEsUUFDekQ7QUFHQSxlQUFPO0FBQUEsZUFDQSxHQUFQO0FBRUEsYUFBSyw2QkFBNkIsU0FBUztBQUczQyxhQUFLLCtCQUErQjtBQUdwQyxjQUFNO0FBQUE7QUFBQTtBQUFBLElBV1YsV0FBWSxDQUFDLGNBQWMsU0FBUyxlQUFlO0FBRWpELFlBQU0sYUFBYSxDQUFDO0FBRXBCLFlBQU0sVUFBVSxpQkFBaUIsS0FBSztBQUV0QyxpQkFBVyxtQkFBbUIsU0FBUztBQUNyQyxlQUFPLGVBQWUsa0JBQWtCO0FBQ3hDLFlBQUksS0FBSywwQkFBMEIsY0FBYyxlQUFlLGdCQUFnQixPQUFPLEdBQUc7QUFDeEYscUJBQVcsS0FBSyxlQUFlO0FBQUEsUUFDakM7QUFBQSxNQUNGO0FBRUEsYUFBTztBQUFBO0FBQUEsSUFXVCx5QkFBMEIsQ0FBQyxjQUFjLFNBQVMsV0FBVyxNQUFNLFNBQVM7QUFLMUUsWUFBTSxXQUFXLElBQUksSUFBSSxhQUFhLEdBQUc7QUFFekMsWUFBTSxZQUFZLElBQUksSUFBSSxRQUFRLEdBQUc7QUFFckMsVUFBSSxTQUFTLGNBQWM7QUFDekIsa0JBQVUsU0FBUztBQUVuQixpQkFBUyxTQUFTO0FBQUEsTUFDcEI7QUFFQSxXQUFLLFVBQVUsVUFBVSxXQUFXLElBQUksR0FBRztBQUN6QyxlQUFPO0FBQUEsTUFDVDtBQUVBLFVBQ0UsWUFBWSxRQUNaLFNBQVMsZUFDUixTQUFTLFlBQVksU0FBUyxNQUFNLEdBQ3JDO0FBQ0EsZUFBTztBQUFBLE1BQ1Q7QUFFQSxZQUFNLGNBQWMsZUFBZSxTQUFTLFlBQVksSUFBSSxNQUFNLENBQUM7QUFFbkUsaUJBQVcsY0FBYyxhQUFhO0FBQ3BDLFlBQUksZUFBZSxLQUFLO0FBQ3RCLGlCQUFPO0FBQUEsUUFDVDtBQUVBLGNBQU0sZUFBZSxRQUFRLFlBQVksSUFBSSxVQUFVO0FBQ3ZELGNBQU0sYUFBYSxhQUFhLFlBQVksSUFBSSxVQUFVO0FBSTFELFlBQUksaUJBQWlCLFlBQVk7QUFDL0IsaUJBQU87QUFBQSxRQUNUO0FBQUEsTUFDRjtBQUVBLGFBQU87QUFBQTtBQUFBLEVBRVg7QUFFQSxTQUFPLGlCQUFpQixNQUFNLFdBQVc7QUFBQSxLQUN0QyxPQUFPLGNBQWM7QUFBQSxNQUNwQixPQUFPO0FBQUEsTUFDUCxjQUFjO0FBQUEsSUFDaEI7QUFBQSxJQUNBLE9BQU87QUFBQSxJQUNQLFVBQVU7QUFBQSxJQUNWLEtBQUs7QUFBQSxJQUNMLFFBQVE7QUFBQSxJQUNSLEtBQUs7QUFBQSxJQUNMLFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxFQUNSLENBQUM7QUFFRCxNQUFNLDZCQUE2QjtBQUFBLElBQ2pDO0FBQUEsTUFDRSxLQUFLO0FBQUEsTUFDTCxXQUFXLE9BQU8sV0FBVztBQUFBLE1BQzdCLGNBQWM7QUFBQSxJQUNoQjtBQUFBLElBQ0E7QUFBQSxNQUNFLEtBQUs7QUFBQSxNQUNMLFdBQVcsT0FBTyxXQUFXO0FBQUEsTUFDN0IsY0FBYztBQUFBLElBQ2hCO0FBQUEsSUFDQTtBQUFBLE1BQ0UsS0FBSztBQUFBLE1BQ0wsV0FBVyxPQUFPLFdBQVc7QUFBQSxNQUM3QixjQUFjO0FBQUEsSUFDaEI7QUFBQSxFQUNGO0FBRUEsU0FBTyxXQUFXLG9CQUFvQixPQUFPLG9CQUFvQiwwQkFBMEI7QUFFM0YsU0FBTyxXQUFXLHlCQUF5QixPQUFPLG9CQUFvQjtBQUFBLElBQ3BFLEdBQUc7QUFBQSxJQUNIO0FBQUEsTUFDRSxLQUFLO0FBQUEsTUFDTCxXQUFXLE9BQU8sV0FBVztBQUFBLElBQy9CO0FBQUEsRUFDRixDQUFDO0FBRUQsU0FBTyxXQUFXLFdBQVcsT0FBTyxtQkFBbUIsUUFBUTtBQUUvRCxTQUFPLFdBQVcsMkJBQTJCLE9BQU8sa0JBQ2xELE9BQU8sV0FBVyxXQUNwQjtBQUVBLFNBQU8sVUFBVTtBQUFBLElBQ2Y7QUFBQSxFQUNGO0FBQUE7Ozs7QUNuMEJBLFFBQVE7QUFDUixRQUFRO0FBQ1IsUUFBUTtBQUNSLFFBQVE7QUFFUjtBQUFBLFFBQU0sYUFBYTtBQUFBLElBS2pCLFVBQVUsSUFBSTtBQUFBLElBRWQsV0FBWSxHQUFHO0FBQ2IsVUFBSSxVQUFVLE9BQU8sWUFBWTtBQUMvQixlQUFPLG1CQUFtQjtBQUFBLE1BQzVCO0FBQUE7QUFBQSxTQUdJLE1BQU0sQ0FBQyxTQUFTLFVBQVUsQ0FBQyxHQUFHO0FBQ2xDLGFBQU8sV0FBVyxNQUFNLFlBQVk7QUFDcEMsYUFBTyxvQkFBb0IsV0FBVyxHQUFHLEVBQUUsUUFBUSxxQkFBcUIsQ0FBQztBQUV6RSxnQkFBVSxPQUFPLFdBQVcsWUFBWSxPQUFPO0FBQy9DLGdCQUFVLE9BQU8sV0FBVyx1QkFBdUIsT0FBTztBQUcxRCxVQUFJLFFBQVEsYUFBYSxNQUFNO0FBRTdCLFlBQUksS0FBSyxRQUFRLElBQUksUUFBUSxTQUFTLEdBQUc7QUFFdkMsZ0JBQU0sWUFBWSxLQUFLLFFBQVEsSUFBSSxRQUFRLFNBQVM7QUFDcEQsZ0JBQU0sUUFBUSxJQUFJLE1BQU0sWUFBWSxTQUFTO0FBRTdDLGlCQUFPLE1BQU0sTUFBTSxNQUFNLFNBQVMsT0FBTztBQUFBLFFBQzNDO0FBQUEsTUFDRixPQUFPO0FBRUwsbUJBQVcsYUFBYSxLQUFLLFFBQVEsT0FBTyxHQUFHO0FBQzdDLGdCQUFNLFFBQVEsSUFBSSxNQUFNLFlBQVksU0FBUztBQUc3QyxnQkFBTSxXQUFXLE1BQU0sTUFBTSxNQUFNLFNBQVMsT0FBTztBQUVuRCxjQUFJLGFBQWEsV0FBVztBQUMxQixtQkFBTztBQUFBLFVBQ1Q7QUFBQSxRQUNGO0FBQUE7QUFBQTtBQUFBLFNBU0UsSUFBSSxDQUFDLFdBQVc7QUFDcEIsYUFBTyxXQUFXLE1BQU0sWUFBWTtBQUNwQyxhQUFPLG9CQUFvQixXQUFXLEdBQUcsRUFBRSxRQUFRLG1CQUFtQixDQUFDO0FBRXZFLGtCQUFZLE9BQU8sV0FBVyxVQUFVLFNBQVM7QUFJakQsYUFBTyxLQUFLLFFBQVEsSUFBSSxTQUFTO0FBQUE7QUFBQSxTQVE3QixLQUFLLENBQUMsV0FBVztBQUNyQixhQUFPLFdBQVcsTUFBTSxZQUFZO0FBQ3BDLGFBQU8sb0JBQW9CLFdBQVcsR0FBRyxFQUFFLFFBQVEsb0JBQW9CLENBQUM7QUFFeEUsa0JBQVksT0FBTyxXQUFXLFVBQVUsU0FBUztBQUdqRCxVQUFJLEtBQUssUUFBUSxJQUFJLFNBQVMsR0FBRztBQUkvQixjQUFNLFNBQVEsS0FBSyxRQUFRLElBQUksU0FBUztBQUd4QyxlQUFPLElBQUksTUFBTSxZQUFZLE1BQUs7QUFBQSxNQUNwQztBQUdBLFlBQU0sUUFBUSxDQUFDO0FBR2YsV0FBSyxRQUFRLElBQUksV0FBVyxLQUFLO0FBR2pDLGFBQU8sSUFBSSxNQUFNLFlBQVksS0FBSztBQUFBO0FBQUEsU0FROUIsT0FBTyxDQUFDLFdBQVc7QUFDdkIsYUFBTyxXQUFXLE1BQU0sWUFBWTtBQUNwQyxhQUFPLG9CQUFvQixXQUFXLEdBQUcsRUFBRSxRQUFRLHNCQUFzQixDQUFDO0FBRTFFLGtCQUFZLE9BQU8sV0FBVyxVQUFVLFNBQVM7QUFFakQsYUFBTyxLQUFLLFFBQVEsT0FBTyxTQUFTO0FBQUE7QUFBQSxTQU9oQyxLQUFLLEdBQUc7QUFDWixhQUFPLFdBQVcsTUFBTSxZQUFZO0FBR3BDLFlBQU0sT0FBTyxLQUFLLFFBQVEsS0FBSztBQUcvQixhQUFPLENBQUMsR0FBRyxJQUFJO0FBQUE7QUFBQSxFQUVuQjtBQUVBLFNBQU8saUJBQWlCLGFBQWEsV0FBVztBQUFBLEtBQzdDLE9BQU8sY0FBYztBQUFBLE1BQ3BCLE9BQU87QUFBQSxNQUNQLGNBQWM7QUFBQSxJQUNoQjtBQUFBLElBQ0EsT0FBTztBQUFBLElBQ1AsS0FBSztBQUFBLElBQ0wsTUFBTTtBQUFBLElBQ04sUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLEVBQ1IsQ0FBQztBQUVELFNBQU8sVUFBVTtBQUFBLElBQ2Y7QUFBQSxFQUNGO0FBQUE7Ozs7QUM1SUEsTUFBTSx3QkFBd0I7QUFHOUIsTUFBTSx1QkFBdUI7QUFFN0IsU0FBTyxVQUFVO0FBQUEsSUFDZjtBQUFBLElBQ0E7QUFBQSxFQUNGO0FBQUE7Ozs7QUNUQSxNQUFNO0FBQ04sUUFBUTtBQUVSLFdBQVMsa0JBQW1CLENBQUMsT0FBTztBQUNsQyxRQUFJLE1BQU0sV0FBVyxHQUFHO0FBQ3RCLGFBQU87QUFBQSxJQUNUO0FBRUEsZUFBVyxRQUFRLE9BQU87QUFDeEIsWUFBTSxPQUFPLEtBQUssV0FBVyxDQUFDO0FBRTlCLFVBQ0csUUFBUSxLQUFRLFFBQVEsTUFDeEIsUUFBUSxNQUFRLFFBQVEsT0FDekIsU0FBUyxLQUNUO0FBQ0EsZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGO0FBQUE7QUFZRixXQUFTLGtCQUFtQixDQUFDLE1BQU07QUFDakMsZUFBVyxRQUFRLE1BQU07QUFDdkIsWUFBTSxPQUFPLEtBQUssV0FBVyxDQUFDO0FBRTlCLFVBQ0csUUFBUSxNQUFRLE9BQU8sT0FDeEIsU0FBUyxPQUNULFNBQVMsT0FDVCxTQUFTLE9BQ1QsU0FBUyxPQUNULFNBQVMsT0FDVCxTQUFTLE9BQ1QsU0FBUyxPQUNULFNBQVMsT0FDVCxTQUFTLFFBQ1QsU0FBUyxPQUNULFNBQVMsT0FDVCxTQUFTLE9BQ1QsU0FBUyxPQUNULFNBQVMsT0FDVCxTQUFTLE9BQ1QsU0FBUyxPQUNULFNBQVMsS0FDVDtBQUNBLGNBQU0sSUFBSSxNQUFNLHFCQUFxQjtBQUFBLE1BQ3ZDO0FBQUEsSUFDRjtBQUFBO0FBV0YsV0FBUyxtQkFBb0IsQ0FBQyxPQUFPO0FBQ25DLGVBQVcsUUFBUSxPQUFPO0FBQ3hCLFlBQU0sT0FBTyxLQUFLLFdBQVcsQ0FBQztBQUU5QixVQUNFLE9BQU8sTUFDUCxTQUFTLE1BQ1QsU0FBUyxNQUNULFNBQVMsTUFDVCxTQUFTLE1BQ1QsT0FBTyxLQUNQO0FBQ0EsY0FBTSxJQUFJLE1BQU0sc0JBQXNCO0FBQUEsTUFDeEM7QUFBQSxJQUNGO0FBQUE7QUFPRixXQUFTLGtCQUFtQixDQUFDLE1BQU07QUFDakMsZUFBVyxRQUFRLE1BQU07QUFDdkIsWUFBTSxPQUFPLEtBQUssV0FBVyxDQUFDO0FBRTlCLFVBQUksT0FBTyxNQUFRLFNBQVMsS0FBSztBQUMvQixjQUFNLElBQUksTUFBTSxxQkFBcUI7QUFBQSxNQUN2QztBQUFBLElBQ0Y7QUFBQTtBQVFGLFdBQVMsb0JBQXFCLENBQUMsUUFBUTtBQUNyQyxRQUNFLE9BQU8sV0FBVyxHQUFHLEtBQ3JCLE9BQU8sU0FBUyxHQUFHLEtBQ25CLE9BQU8sU0FBUyxHQUFHLEdBQ25CO0FBQ0EsWUFBTSxJQUFJLE1BQU0sdUJBQXVCO0FBQUEsSUFDekM7QUFBQTtBQTRDRixXQUFTLFNBQVUsQ0FBQyxNQUFNO0FBQ3hCLGVBQVcsU0FBUyxVQUFVO0FBQzVCLGFBQU8sSUFBSSxLQUFLLElBQUk7QUFBQSxJQUN0QjtBQUVBLFVBQU0sT0FBTztBQUFBLE1BQ1g7QUFBQSxNQUFPO0FBQUEsTUFBTztBQUFBLE1BQU87QUFBQSxNQUNyQjtBQUFBLE1BQU87QUFBQSxNQUFPO0FBQUEsSUFDaEI7QUFFQSxVQUFNLFNBQVM7QUFBQSxNQUNiO0FBQUEsTUFBTztBQUFBLE1BQU87QUFBQSxNQUFPO0FBQUEsTUFBTztBQUFBLE1BQU87QUFBQSxNQUNuQztBQUFBLE1BQU87QUFBQSxNQUFPO0FBQUEsTUFBTztBQUFBLE1BQU87QUFBQSxNQUFPO0FBQUEsSUFDckM7QUFFQSxVQUFNLFVBQVUsS0FBSyxLQUFLLFVBQVU7QUFDcEMsVUFBTSxNQUFNLEtBQUssV0FBVyxFQUFFLFNBQVMsRUFBRSxTQUFTLEdBQUcsR0FBRztBQUN4RCxVQUFNLFFBQVEsT0FBTyxLQUFLLFlBQVk7QUFDdEMsVUFBTSxPQUFPLEtBQUssZUFBZTtBQUNqQyxVQUFNLE9BQU8sS0FBSyxZQUFZLEVBQUUsU0FBUyxFQUFFLFNBQVMsR0FBRyxHQUFHO0FBQzFELFVBQU0sU0FBUyxLQUFLLGNBQWMsRUFBRSxTQUFTLEVBQUUsU0FBUyxHQUFHLEdBQUc7QUFDOUQsVUFBTSxTQUFTLEtBQUssY0FBYyxFQUFFLFNBQVMsRUFBRSxTQUFTLEdBQUcsR0FBRztBQUU5RCxXQUFPLEdBQUcsWUFBWSxPQUFPLFNBQVMsUUFBUSxRQUFRLFVBQVU7QUFBQTtBQVVsRSxXQUFTLG9CQUFxQixDQUFDLFFBQVE7QUFDckMsUUFBSSxTQUFTLEdBQUc7QUFDZCxZQUFNLElBQUksTUFBTSx3QkFBd0I7QUFBQSxJQUMxQztBQUFBO0FBT0YsV0FBUyxTQUFVLENBQUMsUUFBUTtBQUMxQixRQUFJLE9BQU8sS0FBSyxXQUFXLEdBQUc7QUFDNUIsYUFBTztBQUFBLElBQ1Q7QUFFQSx1QkFBbUIsT0FBTyxJQUFJO0FBQzlCLHdCQUFvQixPQUFPLEtBQUs7QUFFaEMsVUFBTSxNQUFNLENBQUMsR0FBRyxPQUFPLFFBQVEsT0FBTyxPQUFPO0FBSTdDLFFBQUksT0FBTyxLQUFLLFdBQVcsV0FBVyxHQUFHO0FBQ3ZDLGFBQU8sU0FBUztBQUFBLElBQ2xCO0FBRUEsUUFBSSxPQUFPLEtBQUssV0FBVyxTQUFTLEdBQUc7QUFDckMsYUFBTyxTQUFTO0FBQ2hCLGFBQU8sU0FBUztBQUNoQixhQUFPLE9BQU87QUFBQSxJQUNoQjtBQUVBLFFBQUksT0FBTyxRQUFRO0FBQ2pCLFVBQUksS0FBSyxRQUFRO0FBQUEsSUFDbkI7QUFFQSxRQUFJLE9BQU8sVUFBVTtBQUNuQixVQUFJLEtBQUssVUFBVTtBQUFBLElBQ3JCO0FBRUEsZUFBVyxPQUFPLFdBQVcsVUFBVTtBQUNyQywyQkFBcUIsT0FBTyxNQUFNO0FBQ2xDLFVBQUksS0FBSyxXQUFXLE9BQU8sUUFBUTtBQUFBLElBQ3JDO0FBRUEsUUFBSSxPQUFPLFFBQVE7QUFDakIsMkJBQXFCLE9BQU8sTUFBTTtBQUNsQyxVQUFJLEtBQUssVUFBVSxPQUFPLFFBQVE7QUFBQSxJQUNwQztBQUVBLFFBQUksT0FBTyxNQUFNO0FBQ2YseUJBQW1CLE9BQU8sSUFBSTtBQUM5QixVQUFJLEtBQUssUUFBUSxPQUFPLE1BQU07QUFBQSxJQUNoQztBQUVBLFFBQUksT0FBTyxXQUFXLE9BQU8sUUFBUSxTQUFTLE1BQU0sZ0JBQWdCO0FBQ2xFLFVBQUksS0FBSyxXQUFXLFVBQVUsT0FBTyxPQUFPLEdBQUc7QUFBQSxJQUNqRDtBQUVBLFFBQUksT0FBTyxVQUFVO0FBQ25CLFVBQUksS0FBSyxZQUFZLE9BQU8sVUFBVTtBQUFBLElBQ3hDO0FBRUEsZUFBVyxRQUFRLE9BQU8sVUFBVTtBQUNsQyxXQUFLLEtBQUssU0FBUyxHQUFHLEdBQUc7QUFDdkIsY0FBTSxJQUFJLE1BQU0sa0JBQWtCO0FBQUEsTUFDcEM7QUFFQSxhQUFPLFFBQVEsU0FBUyxLQUFLLE1BQU0sR0FBRztBQUV0QyxVQUFJLEtBQUssR0FBRyxJQUFJLEtBQUssS0FBSyxNQUFNLEtBQUssR0FBRyxHQUFHO0FBQUEsSUFDN0M7QUFFQSxXQUFPLElBQUksS0FBSyxJQUFJO0FBQUE7QUFHdEIsTUFBSTtBQUVKLFdBQVMsY0FBZSxDQUFDLFNBQVM7QUFDaEMsUUFBSSxRQUFRLGVBQWU7QUFDekIsYUFBTyxRQUFRO0FBQUEsSUFDakI7QUFFQSxTQUFLLGtCQUFrQjtBQUNyQix5QkFBbUIsT0FBTyxzQkFBc0IsT0FBTyxFQUFFLEtBQ3ZELENBQUMsV0FBVyxPQUFPLGdCQUFnQixjQUNyQztBQUVBLGFBQU8sa0JBQWtCLDBCQUEwQjtBQUFBLElBQ3JEO0FBRUEsVUFBTSxjQUFjLFFBQVE7QUFDNUIsV0FBTyxXQUFXO0FBRWxCLFdBQU87QUFBQTtBQUdULFNBQU8sVUFBVTtBQUFBLElBQ2Y7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0Y7QUFBQTs7OztBQ2hTQSxRQUFRLHNCQUFzQjtBQUM5QixRQUFRO0FBQ1IsUUFBUTtBQUNSLE1BQU07QUFRTixXQUFTLGNBQWUsQ0FBQyxRQUFRO0FBSS9CLFFBQUksbUJBQW1CLE1BQU0sR0FBRztBQUM5QixhQUFPO0FBQUEsSUFDVDtBQUVBLFFBQUksZ0JBQWdCO0FBQ3BCLFFBQUkscUJBQXFCO0FBQ3pCLFFBQUksT0FBTztBQUNYLFFBQUksUUFBUTtBQUdaLFFBQUksT0FBTyxTQUFTLEdBQUcsR0FBRztBQUt4QixZQUFNLFdBQVcsRUFBRSxVQUFVLEVBQUU7QUFFL0Isc0JBQWdCLGlDQUFpQyxLQUFLLFFBQVEsUUFBUTtBQUN0RSwyQkFBcUIsT0FBTyxNQUFNLFNBQVMsUUFBUTtBQUFBLElBQ3JELE9BQU87QUFNTCxzQkFBZ0I7QUFBQTtBQU1sQixTQUFLLGNBQWMsU0FBUyxHQUFHLEdBQUc7QUFDaEMsY0FBUTtBQUFBLElBQ1YsT0FBTztBQUtMLFlBQU0sV0FBVyxFQUFFLFVBQVUsRUFBRTtBQUMvQixhQUFPLGlDQUNMLEtBQ0EsZUFDQSxRQUNGO0FBQ0EsY0FBUSxjQUFjLE1BQU0sU0FBUyxXQUFXLENBQUM7QUFBQTtBQUtuRCxXQUFPLEtBQUssS0FBSztBQUNqQixZQUFRLE1BQU0sS0FBSztBQUtuQixRQUFJLEtBQUssU0FBUyxNQUFNLFNBQVMsc0JBQXNCO0FBQ3JELGFBQU87QUFBQSxJQUNUO0FBSUEsV0FBTztBQUFBLE1BQ0w7QUFBQSxNQUFNO0FBQUEsU0FBVSx3QkFBd0Isa0JBQWtCO0FBQUEsSUFDNUQ7QUFBQTtBQVNGLFdBQVMsdUJBQXdCLENBQUMsb0JBQW9CLHNCQUFzQixDQUFDLEdBQUc7QUFHOUUsUUFBSSxtQkFBbUIsV0FBVyxHQUFHO0FBQ25DLGFBQU87QUFBQSxJQUNUO0FBSUEsV0FBTyxtQkFBbUIsT0FBTyxHQUFHO0FBQ3BDLHlCQUFxQixtQkFBbUIsTUFBTSxDQUFDO0FBRS9DLFFBQUksV0FBVztBQUlmLFFBQUksbUJBQW1CLFNBQVMsR0FBRyxHQUFHO0FBR3BDLGlCQUFXLGlDQUNULEtBQ0Esb0JBQ0EsRUFBRSxVQUFVLEVBQUUsQ0FDaEI7QUFDQSwyQkFBcUIsbUJBQW1CLE1BQU0sU0FBUyxNQUFNO0FBQUEsSUFDL0QsT0FBTztBQUlMLGlCQUFXO0FBQ1gsMkJBQXFCO0FBQUE7QUFLdkIsUUFBSSxnQkFBZ0I7QUFDcEIsUUFBSSxpQkFBaUI7QUFHckIsUUFBSSxTQUFTLFNBQVMsR0FBRyxHQUFHO0FBTTFCLFlBQU0sV0FBVyxFQUFFLFVBQVUsRUFBRTtBQUUvQixzQkFBZ0IsaUNBQ2QsS0FDQSxVQUNBLFFBQ0Y7QUFDQSx1QkFBaUIsU0FBUyxNQUFNLFNBQVMsV0FBVyxDQUFDO0FBQUEsSUFDdkQsT0FBTztBQUtMLHNCQUFnQjtBQUFBO0FBS2xCLG9CQUFnQixjQUFjLEtBQUs7QUFDbkMscUJBQWlCLGVBQWUsS0FBSztBQUlyQyxRQUFJLGVBQWUsU0FBUyx1QkFBdUI7QUFDakQsYUFBTyx3QkFBd0Isb0JBQW9CLG1CQUFtQjtBQUFBLElBQ3hFO0FBS0EsVUFBTSx5QkFBeUIsY0FBYyxZQUFZO0FBS3pELFFBQUksMkJBQTJCLFdBQVc7QUFHeEMsWUFBTSxhQUFhLElBQUksS0FBSyxjQUFjO0FBSzFDLDBCQUFvQixVQUFVO0FBQUEsSUFDaEMsV0FBVywyQkFBMkIsV0FBVztBQU8vQyxZQUFNLFdBQVcsZUFBZSxXQUFXLENBQUM7QUFFNUMsV0FBSyxXQUFXLE1BQU0sV0FBVyxPQUFPLGVBQWUsT0FBTyxLQUFLO0FBQ2pFLGVBQU8sd0JBQXdCLG9CQUFvQixtQkFBbUI7QUFBQSxNQUN4RTtBQUlBLFdBQUssUUFBUSxLQUFLLGNBQWMsR0FBRztBQUNqQyxlQUFPLHdCQUF3QixvQkFBb0IsbUJBQW1CO0FBQUEsTUFDeEU7QUFHQSxZQUFNLGVBQWUsT0FBTyxjQUFjO0FBaUIxQywwQkFBb0IsU0FBUztBQUFBLElBQy9CLFdBQVcsMkJBQTJCLFVBQVU7QUFNOUMsVUFBSSxlQUFlO0FBSW5CLFVBQUksYUFBYSxPQUFPLEtBQUs7QUFDM0IsdUJBQWUsYUFBYSxNQUFNLENBQUM7QUFBQSxNQUNyQztBQUdBLHFCQUFlLGFBQWEsWUFBWTtBQUl4QywwQkFBb0IsU0FBUztBQUFBLElBQy9CLFdBQVcsMkJBQTJCLFFBQVE7QUFPNUMsVUFBSSxhQUFhO0FBQ2pCLFVBQUksZUFBZSxXQUFXLEtBQUssZUFBZSxPQUFPLEtBQUs7QUFFNUQscUJBQWE7QUFBQSxNQUNmLE9BQU87QUFJTCxxQkFBYTtBQUFBO0FBS2YsMEJBQW9CLE9BQU87QUFBQSxJQUM3QixXQUFXLDJCQUEyQixVQUFVO0FBTTlDLDBCQUFvQixTQUFTO0FBQUEsSUFDL0IsV0FBVywyQkFBMkIsWUFBWTtBQU9oRCwwQkFBb0IsV0FBVztBQUFBLElBQ2pDLFdBQVcsMkJBQTJCLFlBQVk7QUFNaEQsVUFBSSxjQUFjO0FBRWxCLFlBQU0sMEJBQTBCLGVBQWUsWUFBWTtBQUczRCxVQUFJLHdCQUF3QixTQUFTLE1BQU0sR0FBRztBQUM1QyxzQkFBYztBQUFBLE1BQ2hCO0FBSUEsVUFBSSx3QkFBd0IsU0FBUyxRQUFRLEdBQUc7QUFDOUMsc0JBQWM7QUFBQSxNQUNoQjtBQUlBLFVBQUksd0JBQXdCLFNBQVMsS0FBSyxHQUFHO0FBQzNDLHNCQUFjO0FBQUEsTUFDaEI7QUFLQSwwQkFBb0IsV0FBVztBQUFBLElBQ2pDLE9BQU87QUFDTCwwQkFBb0IsYUFBYSxDQUFDO0FBRWxDLDBCQUFvQixTQUFTLEtBQUssR0FBRyxpQkFBaUIsZ0JBQWdCO0FBQUE7QUFJeEUsV0FBTyx3QkFBd0Isb0JBQW9CLG1CQUFtQjtBQUFBO0FBR3hFLFNBQU8sVUFBVTtBQUFBLElBQ2Y7QUFBQSxJQUNBO0FBQUEsRUFDRjtBQUFBOzs7O0FDMVRBLFFBQVE7QUFDUixRQUFRLFdBQVc7QUFDbkIsUUFBUTtBQUNSLFFBQVE7QUFvQlIsV0FBUyxVQUFXLENBQUMsU0FBUztBQUM1QixXQUFPLG9CQUFvQixXQUFXLEdBQUcsRUFBRSxRQUFRLGFBQWEsQ0FBQztBQUVqRSxXQUFPLFdBQVcsU0FBUyxTQUFTLEVBQUUsUUFBUSxNQUFNLENBQUM7QUFFckQsVUFBTSxTQUFTLFFBQVEsSUFBSSxRQUFRO0FBQ25DLFVBQU0sTUFBTSxDQUFDO0FBRWIsU0FBSyxRQUFRO0FBQ1gsYUFBTztBQUFBLElBQ1Q7QUFFQSxlQUFXLFNBQVMsT0FBTyxNQUFNLEdBQUcsR0FBRztBQUNyQyxhQUFPLFNBQVMsU0FBUyxNQUFNLE1BQU0sR0FBRztBQUV4QyxVQUFJLEtBQUssS0FBSyxLQUFLLE1BQU0sS0FBSyxHQUFHO0FBQUEsSUFDbkM7QUFFQSxXQUFPO0FBQUE7QUFTVCxXQUFTLFlBQWEsQ0FBQyxTQUFTLE1BQU0sWUFBWTtBQUNoRCxXQUFPLG9CQUFvQixXQUFXLEdBQUcsRUFBRSxRQUFRLGVBQWUsQ0FBQztBQUVuRSxXQUFPLFdBQVcsU0FBUyxTQUFTLEVBQUUsUUFBUSxNQUFNLENBQUM7QUFFckQsV0FBTyxPQUFPLFdBQVcsVUFBVSxJQUFJO0FBQ3ZDLGlCQUFhLE9BQU8sV0FBVyx1QkFBdUIsVUFBVTtBQUloRSxjQUFVLFNBQVM7QUFBQSxNQUNqQjtBQUFBLE1BQ0EsT0FBTztBQUFBLE1BQ1AsU0FBUyxJQUFJLEtBQUssQ0FBQztBQUFBLFNBQ2hCO0FBQUEsSUFDTCxDQUFDO0FBQUE7QUFPSCxXQUFTLGFBQWMsQ0FBQyxTQUFTO0FBQy9CLFdBQU8sb0JBQW9CLFdBQVcsR0FBRyxFQUFFLFFBQVEsZ0JBQWdCLENBQUM7QUFFcEUsV0FBTyxXQUFXLFNBQVMsU0FBUyxFQUFFLFFBQVEsTUFBTSxDQUFDO0FBRXJELFVBQU0sVUFBVSxlQUFlLE9BQU8sRUFBRTtBQUV4QyxTQUFLLFNBQVM7QUFDWixhQUFPLENBQUM7QUFBQSxJQUNWO0FBR0EsV0FBTyxRQUFRLElBQUksQ0FBQyxTQUFTLGVBQWUsTUFBTSxRQUFRLElBQUksSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDO0FBQUE7QUFRbkYsV0FBUyxTQUFVLENBQUMsU0FBUyxRQUFRO0FBQ25DLFdBQU8sb0JBQW9CLFdBQVcsR0FBRyxFQUFFLFFBQVEsWUFBWSxDQUFDO0FBRWhFLFdBQU8sV0FBVyxTQUFTLFNBQVMsRUFBRSxRQUFRLE1BQU0sQ0FBQztBQUVyRCxhQUFTLE9BQU8sV0FBVyxPQUFPLE1BQU07QUFFeEMsVUFBTSxNQUFNLFVBQVUsTUFBTTtBQUU1QixRQUFJLEtBQUs7QUFDUCxjQUFRLE9BQU8sY0FBYyxVQUFVLE1BQU0sQ0FBQztBQUFBLElBQ2hEO0FBQUE7QUFHRixTQUFPLFdBQVcseUJBQXlCLE9BQU8sb0JBQW9CO0FBQUEsSUFDcEU7QUFBQSxNQUNFLFdBQVcsT0FBTyxrQkFBa0IsT0FBTyxXQUFXLFNBQVM7QUFBQSxNQUMvRCxLQUFLO0FBQUEsTUFDTCxjQUFjO0FBQUEsSUFDaEI7QUFBQSxJQUNBO0FBQUEsTUFDRSxXQUFXLE9BQU8sa0JBQWtCLE9BQU8sV0FBVyxTQUFTO0FBQUEsTUFDL0QsS0FBSztBQUFBLE1BQ0wsY0FBYztBQUFBLElBQ2hCO0FBQUEsRUFDRixDQUFDO0FBRUQsU0FBTyxXQUFXLFNBQVMsT0FBTyxvQkFBb0I7QUFBQSxJQUNwRDtBQUFBLE1BQ0UsV0FBVyxPQUFPLFdBQVc7QUFBQSxNQUM3QixLQUFLO0FBQUEsSUFDUDtBQUFBLElBQ0E7QUFBQSxNQUNFLFdBQVcsT0FBTyxXQUFXO0FBQUEsTUFDN0IsS0FBSztBQUFBLElBQ1A7QUFBQSxJQUNBO0FBQUEsTUFDRSxXQUFXLE9BQU8sa0JBQWtCLENBQUMsVUFBVTtBQUM3QyxtQkFBVyxVQUFVLFVBQVU7QUFDN0IsaUJBQU8sT0FBTyxXQUFXLHNCQUFzQixLQUFLO0FBQUEsUUFDdEQ7QUFFQSxlQUFPLElBQUksS0FBSyxLQUFLO0FBQUEsT0FDdEI7QUFBQSxNQUNELEtBQUs7QUFBQSxNQUNMLGNBQWM7QUFBQSxJQUNoQjtBQUFBLElBQ0E7QUFBQSxNQUNFLFdBQVcsT0FBTyxrQkFBa0IsT0FBTyxXQUFXLFlBQVk7QUFBQSxNQUNsRSxLQUFLO0FBQUEsTUFDTCxjQUFjO0FBQUEsSUFDaEI7QUFBQSxJQUNBO0FBQUEsTUFDRSxXQUFXLE9BQU8sa0JBQWtCLE9BQU8sV0FBVyxTQUFTO0FBQUEsTUFDL0QsS0FBSztBQUFBLE1BQ0wsY0FBYztBQUFBLElBQ2hCO0FBQUEsSUFDQTtBQUFBLE1BQ0UsV0FBVyxPQUFPLGtCQUFrQixPQUFPLFdBQVcsU0FBUztBQUFBLE1BQy9ELEtBQUs7QUFBQSxNQUNMLGNBQWM7QUFBQSxJQUNoQjtBQUFBLElBQ0E7QUFBQSxNQUNFLFdBQVcsT0FBTyxrQkFBa0IsT0FBTyxXQUFXLE9BQU87QUFBQSxNQUM3RCxLQUFLO0FBQUEsTUFDTCxjQUFjO0FBQUEsSUFDaEI7QUFBQSxJQUNBO0FBQUEsTUFDRSxXQUFXLE9BQU8sa0JBQWtCLE9BQU8sV0FBVyxPQUFPO0FBQUEsTUFDN0QsS0FBSztBQUFBLE1BQ0wsY0FBYztBQUFBLElBQ2hCO0FBQUEsSUFDQTtBQUFBLE1BQ0UsV0FBVyxPQUFPLFdBQVc7QUFBQSxNQUM3QixLQUFLO0FBQUEsTUFDTCxlQUFlLENBQUMsVUFBVSxPQUFPLE1BQU07QUFBQSxJQUN6QztBQUFBLElBQ0E7QUFBQSxNQUNFLFdBQVcsT0FBTyxrQkFBa0IsT0FBTyxXQUFXLFNBQVM7QUFBQSxNQUMvRCxLQUFLO0FBQUEsTUFDTCxjQUFjLENBQUM7QUFBQSxJQUNqQjtBQUFBLEVBQ0YsQ0FBQztBQUVELFNBQU8sVUFBVTtBQUFBLElBQ2Y7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNGO0FBQUE7Ozs7QUNqTEEsTUFBTSxNQUFNO0FBR1osTUFBTSw0QkFBNEI7QUFBQSxJQUNoQyxZQUFZO0FBQUEsSUFDWixVQUFVO0FBQUEsSUFDVixjQUFjO0FBQUEsRUFDaEI7QUFFQSxNQUFNLFNBQVM7QUFBQSxJQUNiLFlBQVk7QUFBQSxJQUNaLE1BQU07QUFBQSxJQUNOLFNBQVM7QUFBQSxJQUNULFFBQVE7QUFBQSxFQUNWO0FBRUEsTUFBTSxVQUFVO0FBQUEsSUFDZCxjQUFjO0FBQUEsSUFDZCxNQUFNO0FBQUEsSUFDTixRQUFRO0FBQUEsSUFDUixPQUFPO0FBQUEsSUFDUCxNQUFNO0FBQUEsSUFDTixNQUFNO0FBQUEsRUFDUjtBQUVBLE1BQU0sbUJBQW1CLEtBQUssS0FBSztBQUVuQyxNQUFNLGVBQWU7QUFBQSxJQUNuQixNQUFNO0FBQUEsSUFDTixrQkFBa0I7QUFBQSxJQUNsQixrQkFBa0I7QUFBQSxJQUNsQixXQUFXO0FBQUEsRUFDYjtBQUVBLE1BQU0sY0FBYyxPQUFPLFlBQVksQ0FBQztBQUV4QyxTQUFPLFVBQVU7QUFBQSxJQUNmO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDRjtBQUFBOzs7O0FDaERBLFNBQU8sVUFBVTtBQUFBLElBQ2YsZUFBZSxPQUFPLEtBQUs7QUFBQSxJQUMzQixhQUFhLE9BQU8sYUFBYTtBQUFBLElBQ2pDLGFBQWEsT0FBTyxZQUFZO0FBQUEsSUFDaEMsV0FBVyxPQUFPLFVBQVU7QUFBQSxJQUM1QixhQUFhLE9BQU8sYUFBYTtBQUFBLElBQ2pDLFlBQVksT0FBTyxZQUFZO0FBQUEsSUFDL0IsZ0JBQWdCLE9BQU8sZ0JBQWdCO0FBQUEsSUFDdkMsYUFBYSxPQUFPLGFBQWE7QUFBQSxFQUNuQztBQUFBOzs7O0FDVEEsUUFBUTtBQUNSLFFBQVE7QUFDUixRQUFRO0FBS1I7QUFBQSxRQUFNLHFCQUFxQixNQUFNO0FBQUEsSUFDL0I7QUFBQSxJQUVBLFdBQVksQ0FBQyxNQUFNLGdCQUFnQixDQUFDLEdBQUc7QUFDckMsYUFBTyxvQkFBb0IsV0FBVyxHQUFHLEVBQUUsUUFBUSwyQkFBMkIsQ0FBQztBQUUvRSxhQUFPLE9BQU8sV0FBVyxVQUFVLElBQUk7QUFDdkMsc0JBQWdCLE9BQU8sV0FBVyxpQkFBaUIsYUFBYTtBQUVoRSxZQUFNLE1BQU0sYUFBYTtBQUV6QixXQUFLLGFBQWE7QUFBQTtBQUFBLFFBR2hCLElBQUssR0FBRztBQUNWLGFBQU8sV0FBVyxNQUFNLFlBQVk7QUFFcEMsYUFBTyxLQUFLLFdBQVc7QUFBQTtBQUFBLFFBR3JCLE1BQU8sR0FBRztBQUNaLGFBQU8sV0FBVyxNQUFNLFlBQVk7QUFFcEMsYUFBTyxLQUFLLFdBQVc7QUFBQTtBQUFBLFFBR3JCLFdBQVksR0FBRztBQUNqQixhQUFPLFdBQVcsTUFBTSxZQUFZO0FBRXBDLGFBQU8sS0FBSyxXQUFXO0FBQUE7QUFBQSxRQUdyQixNQUFPLEdBQUc7QUFDWixhQUFPLFdBQVcsTUFBTSxZQUFZO0FBRXBDLGFBQU8sS0FBSyxXQUFXO0FBQUE7QUFBQSxRQUdyQixLQUFNLEdBQUc7QUFDWCxhQUFPLFdBQVcsTUFBTSxZQUFZO0FBRXBDLFdBQUssT0FBTyxTQUFTLEtBQUssV0FBVyxLQUFLLEdBQUc7QUFDM0MsZUFBTyxPQUFPLEtBQUssV0FBVyxLQUFLO0FBQUEsTUFDckM7QUFFQSxhQUFPLEtBQUssV0FBVztBQUFBO0FBQUEsSUFHekIsZ0JBQWlCLENBQ2YsTUFDQSxVQUFVLE9BQ1YsYUFBYSxPQUNiLE9BQU8sTUFDUCxTQUFTLElBQ1QsY0FBYyxJQUNkLFNBQVMsTUFDVCxRQUFRLENBQUMsR0FDVDtBQUNBLGFBQU8sV0FBVyxNQUFNLFlBQVk7QUFFcEMsYUFBTyxvQkFBb0IsV0FBVyxHQUFHLEVBQUUsUUFBUSxnQ0FBZ0MsQ0FBQztBQUVwRixhQUFPLElBQUksYUFBYSxNQUFNO0FBQUEsUUFDNUI7QUFBQSxRQUFTO0FBQUEsUUFBWTtBQUFBLFFBQU07QUFBQSxRQUFRO0FBQUEsUUFBYTtBQUFBLFFBQVE7QUFBQSxNQUMxRCxDQUFDO0FBQUE7QUFBQSxFQUVMO0FBS0E7QUFBQSxRQUFNLG1CQUFtQixNQUFNO0FBQUEsSUFDN0I7QUFBQSxJQUVBLFdBQVksQ0FBQyxNQUFNLGdCQUFnQixDQUFDLEdBQUc7QUFDckMsYUFBTyxvQkFBb0IsV0FBVyxHQUFHLEVBQUUsUUFBUSx5QkFBeUIsQ0FBQztBQUU3RSxhQUFPLE9BQU8sV0FBVyxVQUFVLElBQUk7QUFDdkMsc0JBQWdCLE9BQU8sV0FBVyxlQUFlLGFBQWE7QUFFOUQsWUFBTSxNQUFNLGFBQWE7QUFFekIsV0FBSyxhQUFhO0FBQUE7QUFBQSxRQUdoQixRQUFTLEdBQUc7QUFDZCxhQUFPLFdBQVcsTUFBTSxVQUFVO0FBRWxDLGFBQU8sS0FBSyxXQUFXO0FBQUE7QUFBQSxRQUdyQixJQUFLLEdBQUc7QUFDVixhQUFPLFdBQVcsTUFBTSxVQUFVO0FBRWxDLGFBQU8sS0FBSyxXQUFXO0FBQUE7QUFBQSxRQUdyQixNQUFPLEdBQUc7QUFDWixhQUFPLFdBQVcsTUFBTSxVQUFVO0FBRWxDLGFBQU8sS0FBSyxXQUFXO0FBQUE7QUFBQSxFQUUzQjtBQUdBO0FBQUEsUUFBTSxtQkFBbUIsTUFBTTtBQUFBLElBQzdCO0FBQUEsSUFFQSxXQUFZLENBQUMsTUFBTSxlQUFlO0FBQ2hDLGFBQU8sb0JBQW9CLFdBQVcsR0FBRyxFQUFFLFFBQVEseUJBQXlCLENBQUM7QUFFN0UsWUFBTSxNQUFNLGFBQWE7QUFFekIsYUFBTyxPQUFPLFdBQVcsVUFBVSxJQUFJO0FBQ3ZDLHNCQUFnQixPQUFPLFdBQVcsZUFBZSxpQkFBaUIsQ0FBQyxDQUFDO0FBRXBFLFdBQUssYUFBYTtBQUFBO0FBQUEsUUFHaEIsT0FBUSxHQUFHO0FBQ2IsYUFBTyxXQUFXLE1BQU0sVUFBVTtBQUVsQyxhQUFPLEtBQUssV0FBVztBQUFBO0FBQUEsUUFHckIsUUFBUyxHQUFHO0FBQ2QsYUFBTyxXQUFXLE1BQU0sVUFBVTtBQUVsQyxhQUFPLEtBQUssV0FBVztBQUFBO0FBQUEsUUFHckIsTUFBTyxHQUFHO0FBQ1osYUFBTyxXQUFXLE1BQU0sVUFBVTtBQUVsQyxhQUFPLEtBQUssV0FBVztBQUFBO0FBQUEsUUFHckIsS0FBTSxHQUFHO0FBQ1gsYUFBTyxXQUFXLE1BQU0sVUFBVTtBQUVsQyxhQUFPLEtBQUssV0FBVztBQUFBO0FBQUEsUUFHckIsS0FBTSxHQUFHO0FBQ1gsYUFBTyxXQUFXLE1BQU0sVUFBVTtBQUVsQyxhQUFPLEtBQUssV0FBVztBQUFBO0FBQUEsRUFFM0I7QUFFQSxTQUFPLGlCQUFpQixhQUFhLFdBQVc7QUFBQSxLQUM3QyxPQUFPLGNBQWM7QUFBQSxNQUNwQixPQUFPO0FBQUEsTUFDUCxjQUFjO0FBQUEsSUFDaEI7QUFBQSxJQUNBLE1BQU07QUFBQSxJQUNOLFFBQVE7QUFBQSxJQUNSLGFBQWE7QUFBQSxJQUNiLFFBQVE7QUFBQSxJQUNSLE9BQU87QUFBQSxJQUNQLGtCQUFrQjtBQUFBLEVBQ3BCLENBQUM7QUFFRCxTQUFPLGlCQUFpQixXQUFXLFdBQVc7QUFBQSxLQUMzQyxPQUFPLGNBQWM7QUFBQSxNQUNwQixPQUFPO0FBQUEsTUFDUCxjQUFjO0FBQUEsSUFDaEI7QUFBQSxJQUNBLFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxJQUNOLFVBQVU7QUFBQSxFQUNaLENBQUM7QUFFRCxTQUFPLGlCQUFpQixXQUFXLFdBQVc7QUFBQSxLQUMzQyxPQUFPLGNBQWM7QUFBQSxNQUNwQixPQUFPO0FBQUEsTUFDUCxjQUFjO0FBQUEsSUFDaEI7QUFBQSxJQUNBLFNBQVM7QUFBQSxJQUNULFVBQVU7QUFBQSxJQUNWLFFBQVE7QUFBQSxJQUNSLE9BQU87QUFBQSxJQUNQLE9BQU87QUFBQSxFQUNULENBQUM7QUFFRCxTQUFPLFdBQVcsY0FBYyxPQUFPLG1CQUFtQixXQUFXO0FBRXJFLFNBQU8sV0FBVywyQkFBMkIsT0FBTyxrQkFDbEQsT0FBTyxXQUFXLFdBQ3BCO0FBRUEsTUFBTSxZQUFZO0FBQUEsSUFDaEI7QUFBQSxNQUNFLEtBQUs7QUFBQSxNQUNMLFdBQVcsT0FBTyxXQUFXO0FBQUEsTUFDN0IsY0FBYztBQUFBLElBQ2hCO0FBQUEsSUFDQTtBQUFBLE1BQ0UsS0FBSztBQUFBLE1BQ0wsV0FBVyxPQUFPLFdBQVc7QUFBQSxNQUM3QixjQUFjO0FBQUEsSUFDaEI7QUFBQSxJQUNBO0FBQUEsTUFDRSxLQUFLO0FBQUEsTUFDTCxXQUFXLE9BQU8sV0FBVztBQUFBLE1BQzdCLGNBQWM7QUFBQSxJQUNoQjtBQUFBLEVBQ0Y7QUFFQSxTQUFPLFdBQVcsbUJBQW1CLE9BQU8sb0JBQW9CO0FBQUEsSUFDOUQsR0FBRztBQUFBLElBQ0g7QUFBQSxNQUNFLEtBQUs7QUFBQSxNQUNMLFdBQVcsT0FBTyxXQUFXO0FBQUEsTUFDN0IsY0FBYztBQUFBLElBQ2hCO0FBQUEsSUFDQTtBQUFBLE1BQ0UsS0FBSztBQUFBLE1BQ0wsV0FBVyxPQUFPLFdBQVc7QUFBQSxNQUM3QixjQUFjO0FBQUEsSUFDaEI7QUFBQSxJQUNBO0FBQUEsTUFDRSxLQUFLO0FBQUEsTUFDTCxXQUFXLE9BQU8sV0FBVztBQUFBLE1BQzdCLGNBQWM7QUFBQSxJQUNoQjtBQUFBLElBQ0E7QUFBQSxNQUNFLEtBQUs7QUFBQSxNQUdMLFdBQVcsT0FBTyxrQkFBa0IsT0FBTyxXQUFXLFdBQVc7QUFBQSxNQUNqRSxjQUFjO0FBQUEsSUFDaEI7QUFBQSxJQUNBO0FBQUEsTUFDRSxLQUFLO0FBQUEsTUFDTCxXQUFXLE9BQU8sV0FBVztBQUFBLFVBQ3pCLFlBQWEsR0FBRztBQUNsQixlQUFPLENBQUM7QUFBQTtBQUFBLElBRVo7QUFBQSxFQUNGLENBQUM7QUFFRCxTQUFPLFdBQVcsaUJBQWlCLE9BQU8sb0JBQW9CO0FBQUEsSUFDNUQsR0FBRztBQUFBLElBQ0g7QUFBQSxNQUNFLEtBQUs7QUFBQSxNQUNMLFdBQVcsT0FBTyxXQUFXO0FBQUEsTUFDN0IsY0FBYztBQUFBLElBQ2hCO0FBQUEsSUFDQTtBQUFBLE1BQ0UsS0FBSztBQUFBLE1BQ0wsV0FBVyxPQUFPLFdBQVc7QUFBQSxNQUM3QixjQUFjO0FBQUEsSUFDaEI7QUFBQSxJQUNBO0FBQUEsTUFDRSxLQUFLO0FBQUEsTUFDTCxXQUFXLE9BQU8sV0FBVztBQUFBLE1BQzdCLGNBQWM7QUFBQSxJQUNoQjtBQUFBLEVBQ0YsQ0FBQztBQUVELFNBQU8sV0FBVyxpQkFBaUIsT0FBTyxvQkFBb0I7QUFBQSxJQUM1RCxHQUFHO0FBQUEsSUFDSDtBQUFBLE1BQ0UsS0FBSztBQUFBLE1BQ0wsV0FBVyxPQUFPLFdBQVc7QUFBQSxNQUM3QixjQUFjO0FBQUEsSUFDaEI7QUFBQSxJQUNBO0FBQUEsTUFDRSxLQUFLO0FBQUEsTUFDTCxXQUFXLE9BQU8sV0FBVztBQUFBLE1BQzdCLGNBQWM7QUFBQSxJQUNoQjtBQUFBLElBQ0E7QUFBQSxNQUNFLEtBQUs7QUFBQSxNQUNMLFdBQVcsT0FBTyxXQUFXO0FBQUEsTUFDN0IsY0FBYztBQUFBLElBQ2hCO0FBQUEsSUFDQTtBQUFBLE1BQ0UsS0FBSztBQUFBLE1BQ0wsV0FBVyxPQUFPLFdBQVc7QUFBQSxNQUM3QixjQUFjO0FBQUEsSUFDaEI7QUFBQSxJQUNBO0FBQUEsTUFDRSxLQUFLO0FBQUEsTUFDTCxXQUFXLE9BQU8sV0FBVztBQUFBLElBQy9CO0FBQUEsRUFDRixDQUFDO0FBRUQsU0FBTyxVQUFVO0FBQUEsSUFDZjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDRjtBQUFBOzs7O0FDNVNBLFFBQVEsYUFBYSxhQUFhLFdBQVcsYUFBYTtBQUMxRCxRQUFRLFFBQVE7QUFDaEIsUUFBUSxjQUFjO0FBT3RCLFdBQVMsYUFBYyxDQUFDLElBQUk7QUFJMUIsV0FBTyxHQUFHLGlCQUFpQixPQUFPO0FBQUE7QUFNcEMsV0FBUyxTQUFVLENBQUMsSUFBSTtBQUl0QixXQUFPLEdBQUcsaUJBQWlCLE9BQU87QUFBQTtBQU1wQyxXQUFTLFFBQVMsQ0FBQyxJQUFJO0FBQ3JCLFdBQU8sR0FBRyxpQkFBaUIsT0FBTztBQUFBO0FBU3BDLFdBQVMsU0FBVSxDQUFDLEdBQUcsUUFBUSxtQkFBbUIsT0FBTyxlQUFlO0FBTXRFLFVBQU0sUUFBUSxJQUFJLGlCQUFpQixHQUFHLGFBQWE7QUFPbkQsV0FBTyxjQUFjLEtBQUs7QUFBQTtBQVM1QixXQUFTLHdCQUF5QixDQUFDLElBQUksTUFBTSxNQUFNO0FBRWpELFFBQUksR0FBRyxpQkFBaUIsT0FBTyxNQUFNO0FBQ25DO0FBQUEsSUFDRjtBQUdBLFFBQUk7QUFFSixRQUFJLFNBQVMsUUFBUSxNQUFNO0FBR3pCLFVBQUk7QUFDRix1QkFBZSxJQUFJLFlBQVksU0FBUyxFQUFFLE9BQU8sS0FBSyxDQUFDLEVBQUUsT0FBTyxJQUFJO0FBQUEsY0FDcEU7QUFDQSxnQ0FBd0IsSUFBSSx1Q0FBdUM7QUFDbkU7QUFBQTtBQUFBLElBRUosV0FBVyxTQUFTLFFBQVEsUUFBUTtBQUNsQyxVQUFJLEdBQUcsaUJBQWlCLFFBQVE7QUFJOUIsdUJBQWUsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDO0FBQUEsTUFDaEMsT0FBTztBQUlMLHVCQUFlLElBQUksV0FBVyxJQUFJLEVBQUU7QUFBQTtBQUFBLElBRXhDO0FBS0EsY0FBVSxXQUFXLElBQUksY0FBYztBQUFBLE1BQ3JDLFFBQVEsR0FBRyxlQUFlO0FBQUEsTUFDMUIsTUFBTTtBQUFBLElBQ1IsQ0FBQztBQUFBO0FBU0gsV0FBUyxrQkFBbUIsQ0FBQyxVQUFVO0FBT3JDLFFBQUksU0FBUyxXQUFXLEdBQUc7QUFDekIsYUFBTztBQUFBLElBQ1Q7QUFFQSxlQUFXLFFBQVEsVUFBVTtBQUMzQixZQUFNLE9BQU8sS0FBSyxXQUFXLENBQUM7QUFFOUIsVUFDRSxPQUFPLE1BQ1AsT0FBTyxPQUNQLFNBQVMsT0FDVCxTQUFTLE9BQ1QsU0FBUyxPQUNULFNBQVMsT0FDVCxTQUFTLE9BQ1QsU0FBUyxPQUNULFNBQVMsT0FDVCxTQUFTLE9BQ1QsU0FBUyxRQUNULFNBQVMsT0FDVCxTQUFTLE9BQ1QsU0FBUyxPQUNULFNBQVMsT0FDVCxTQUFTLE9BQ1QsU0FBUyxPQUNULFNBQVMsT0FDVCxTQUFTLE9BQ1QsU0FBUyxNQUNULFNBQVMsR0FDVDtBQUNBLGVBQU87QUFBQSxNQUNUO0FBQUEsSUFDRjtBQUVBLFdBQU87QUFBQTtBQU9ULFdBQVMsaUJBQWtCLENBQUMsTUFBTTtBQUNoQyxRQUFJLFFBQVEsUUFBUSxPQUFPLE1BQU07QUFDL0IsYUFDRSxTQUFTLFFBQ1QsU0FBUyxRQUNULFNBQVM7QUFBQSxJQUViO0FBRUEsV0FBTyxRQUFRLFFBQVEsUUFBUTtBQUFBO0FBT2pDLFdBQVMsdUJBQXdCLENBQUMsSUFBSSxRQUFRO0FBQzVDLGFBQVMsY0FBYyxhQUFhLFlBQVksYUFBYTtBQUU3RCxlQUFXLE1BQU07QUFFakIsUUFBSSxVQUFVLFdBQVcsU0FBUyxPQUFPLFdBQVc7QUFDbEQsZUFBUyxPQUFPLFFBQVE7QUFBQSxJQUMxQjtBQUVBLFFBQUksUUFBUTtBQUNWLGdCQUFVLFNBQVMsSUFBSSxZQUFZO0FBQUEsUUFDakMsT0FBTyxJQUFJLE1BQU0sTUFBTTtBQUFBLE1BQ3pCLENBQUM7QUFBQSxJQUNIO0FBQUE7QUFHRixTQUFPLFVBQVU7QUFBQSxJQUNmO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0Y7QUFBQTs7OztBQ3JNQSxNQUFNO0FBQ04sUUFBUSxLQUFLO0FBQ2I7QUFBQSxJQUNFO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUE7QUFFRixRQUFRLFdBQVc7QUFDbkIsUUFBUTtBQUNSLFFBQVE7QUFDUixRQUFRO0FBQ1IsUUFBUTtBQUNSLFFBQVE7QUFDUixRQUFRO0FBRVIsTUFBTSxXQUFXLENBQUM7QUFDbEIsV0FBUyxPQUFPLG1CQUFtQixRQUFRLHVCQUF1QjtBQUNsRSxXQUFTLFFBQVEsbUJBQW1CLFFBQVEsd0JBQXdCO0FBQ3BFLFdBQVMsY0FBYyxtQkFBbUIsUUFBUSwrQkFBK0I7QUFHakYsTUFBSTtBQUNKLE1BQUk7QUFDRjtBQUFBLFVBQ0E7QUFBQTtBQVlGLFdBQVMsNEJBQTZCLENBQUMsS0FBSyxXQUFXLElBQUksYUFBYSxTQUFTO0FBRy9FLFVBQU0sYUFBYTtBQUVuQixlQUFXLFdBQVcsSUFBSSxhQUFhLFFBQVEsVUFBVTtBQU16RCxVQUFNLFVBQVUsWUFBWTtBQUFBLE1BQzFCLFNBQVMsQ0FBQyxVQUFVO0FBQUEsTUFDcEIsZ0JBQWdCO0FBQUEsTUFDaEIsVUFBVTtBQUFBLE1BQ1YsTUFBTTtBQUFBLE1BQ04sYUFBYTtBQUFBLE1BQ2IsT0FBTztBQUFBLE1BQ1AsVUFBVTtBQUFBLElBQ1osQ0FBQztBQUdELFFBQUksUUFBUSxTQUFTO0FBQ25CLFlBQU0sY0FBYyxJQUFJLFFBQVEsUUFBUSxPQUFPLEVBQUU7QUFFakQsY0FBUSxjQUFjO0FBQUEsSUFDeEI7QUFVQSxVQUFNLFdBQVcsT0FBTyxZQUFZLEVBQUUsRUFBRSxTQUFTLFFBQVE7QUFJekQsWUFBUSxZQUFZLE9BQU8scUJBQXFCLFFBQVE7QUFJeEQsWUFBUSxZQUFZLE9BQU8seUJBQXlCLElBQUk7QUFLeEQsZUFBVyxZQUFZLFdBQVc7QUFDaEMsY0FBUSxZQUFZLE9BQU8sMEJBQTBCLFFBQVE7QUFBQSxJQUMvRDtBQU1BLFVBQU0sb0JBQW9CO0FBUTFCLFVBQU0sYUFBYSxTQUFTO0FBQUEsTUFDMUI7QUFBQSxNQUNBLGtCQUFrQjtBQUFBLE1BQ2xCLFlBQVksUUFBUSxjQUFjLG9CQUFvQjtBQUFBLE1BQ3RELGVBQWdCLENBQUMsVUFBVTtBQUd6QixZQUFJLFNBQVMsU0FBUyxXQUFXLFNBQVMsV0FBVyxLQUFLO0FBQ3hELGtDQUF3QixJQUFJLGdEQUFnRDtBQUM1RTtBQUFBLFFBQ0Y7QUFNQSxZQUFJLFVBQVUsV0FBVyxNQUFNLFNBQVMsWUFBWSxJQUFJLHdCQUF3QixHQUFHO0FBQ2pGLGtDQUF3QixJQUFJLDZDQUE2QztBQUN6RTtBQUFBLFFBQ0Y7QUFZQSxZQUFJLFNBQVMsWUFBWSxJQUFJLFNBQVMsR0FBRyxZQUFZLE1BQU0sYUFBYTtBQUN0RSxrQ0FBd0IsSUFBSSxtREFBbUQ7QUFDL0U7QUFBQSxRQUNGO0FBTUEsWUFBSSxTQUFTLFlBQVksSUFBSSxZQUFZLEdBQUcsWUFBWSxNQUFNLFdBQVc7QUFDdkUsa0NBQXdCLElBQUksb0RBQW9EO0FBQ2hGO0FBQUEsUUFDRjtBQVNBLGNBQU0sY0FBYyxTQUFTLFlBQVksSUFBSSxzQkFBc0I7QUFDbkUsY0FBTSxTQUFTLE9BQU8sV0FBVyxNQUFNLEVBQUUsT0FBTyxXQUFXLEdBQUcsRUFBRSxPQUFPLFFBQVE7QUFDL0UsWUFBSSxnQkFBZ0IsUUFBUTtBQUMxQixrQ0FBd0IsSUFBSSx5REFBeUQ7QUFDckY7QUFBQSxRQUNGO0FBU0EsY0FBTSxlQUFlLFNBQVMsWUFBWSxJQUFJLDBCQUEwQjtBQUV4RSxZQUFJLGlCQUFpQixRQUFRLGlCQUFpQixtQkFBbUI7QUFDL0Qsa0NBQXdCLElBQUkseURBQXlEO0FBQ3JGO0FBQUEsUUFDRjtBQU9BLGNBQU0sY0FBYyxTQUFTLFlBQVksSUFBSSx3QkFBd0I7QUFFckUsWUFBSSxnQkFBZ0IsUUFBUSxnQkFBZ0IsUUFBUSxZQUFZLElBQUksd0JBQXdCLEdBQUc7QUFDN0Ysa0NBQXdCLElBQUksZ0RBQWdEO0FBQzVFO0FBQUEsUUFDRjtBQUVBLGlCQUFTLE9BQU8sR0FBRyxRQUFRLFlBQVk7QUFDdkMsaUJBQVMsT0FBTyxHQUFHLFNBQVMsYUFBYTtBQUN6QyxpQkFBUyxPQUFPLEdBQUcsU0FBUyxhQUFhO0FBRXpDLFlBQUksU0FBUyxLQUFLLGdCQUFnQjtBQUNoQyxtQkFBUyxLQUFLLFFBQVE7QUFBQSxZQUNwQixTQUFTLFNBQVMsT0FBTyxRQUFRO0FBQUEsWUFDakMsVUFBVTtBQUFBLFlBQ1YsWUFBWTtBQUFBLFVBQ2QsQ0FBQztBQUFBLFFBQ0g7QUFFQSxvQkFBWSxRQUFRO0FBQUE7QUFBQSxJQUV4QixDQUFDO0FBRUQsV0FBTztBQUFBO0FBTVQsV0FBUyxZQUFhLENBQUMsT0FBTztBQUM1QixTQUFLLEtBQUssR0FBRyxhQUFhLE1BQU0sS0FBSyxHQUFHO0FBQ3RDLFdBQUssTUFBTTtBQUFBLElBQ2I7QUFBQTtBQU9GLFdBQVMsYUFBYyxHQUFHO0FBQ3hCLFlBQVEsT0FBTztBQUtmLFVBQU0sV0FBVyxHQUFHLGVBQWUsR0FBRztBQUV0QyxRQUFJLE9BQU87QUFDWCxRQUFJLFNBQVM7QUFFYixVQUFNLFNBQVMsR0FBRyxhQUFhO0FBRS9CLFFBQUksUUFBUTtBQUNWLGFBQU8sT0FBTyxRQUFRO0FBQ3RCLGVBQVMsT0FBTztBQUFBLElBQ2xCLFlBQVksR0FBRyxhQUFhO0FBTTFCLGFBQU87QUFBQSxJQUNUO0FBR0EsT0FBRyxlQUFlLE9BQU87QUFnQnpCLGNBQVUsU0FBUyxJQUFJLFlBQVk7QUFBQSxNQUNqQztBQUFBLE1BQVU7QUFBQSxNQUFNO0FBQUEsSUFDbEIsQ0FBQztBQUVELFFBQUksU0FBUyxNQUFNLGdCQUFnQjtBQUNqQyxlQUFTLE1BQU0sUUFBUTtBQUFBLFFBQ3JCLFdBQVc7QUFBQSxRQUNYO0FBQUEsUUFDQTtBQUFBLE1BQ0YsQ0FBQztBQUFBLElBQ0g7QUFBQTtBQUdGLFdBQVMsYUFBYyxDQUFDLE9BQU87QUFDN0IsWUFBUSxPQUFPO0FBRWYsT0FBRyxlQUFlLE9BQU87QUFFekIsUUFBSSxTQUFTLFlBQVksZ0JBQWdCO0FBQ3ZDLGVBQVMsWUFBWSxRQUFRLEtBQUs7QUFBQSxJQUNwQztBQUVBLFNBQUssUUFBUTtBQUFBO0FBR2YsU0FBTyxVQUFVO0FBQUEsSUFDZjtBQUFBLEVBQ0Y7QUFBQTs7OztBQ2hTQSxRQUFRO0FBR1IsTUFBSTtBQUNKLE1BQUk7QUFDRjtBQUFBLFVBQ0E7QUFBQTtBQUlGO0FBQUEsUUFBTSxtQkFBbUI7QUFBQSxJQUl2QixXQUFZLENBQUMsTUFBTTtBQUNqQixXQUFLLFlBQVk7QUFDakIsV0FBSyxVQUFVLE9BQU8sWUFBWSxDQUFDO0FBQUE7QUFBQSxJQUdyQyxXQUFZLENBQUMsUUFBUTtBQUNuQixZQUFNLGFBQWEsS0FBSyxXQUFXLGNBQWM7QUFHakQsVUFBSSxnQkFBZ0I7QUFDcEIsVUFBSSxTQUFTO0FBRWIsVUFBSSxhQUFhLGtCQUFrQjtBQUNqQyxrQkFBVTtBQUNWLHdCQUFnQjtBQUFBLE1BQ2xCLFdBQVcsYUFBYSxLQUFLO0FBQzNCLGtCQUFVO0FBQ1Ysd0JBQWdCO0FBQUEsTUFDbEI7QUFFQSxZQUFNLFNBQVMsT0FBTyxZQUFZLGFBQWEsTUFBTTtBQUdyRCxhQUFPLEtBQUssT0FBTyxLQUFLO0FBQ3hCLGFBQU8sTUFBTTtBQUNiLGFBQU8sTUFBTSxPQUFPLEtBQUssT0FBUTtBQUdqQztBQUFBLGFBQU8sU0FBUyxLQUFLLEtBQUssUUFBUTtBQUNsQyxhQUFPLFNBQVMsS0FBSyxLQUFLLFFBQVE7QUFDbEMsYUFBTyxTQUFTLEtBQUssS0FBSyxRQUFRO0FBQ2xDLGFBQU8sU0FBUyxLQUFLLEtBQUssUUFBUTtBQUVsQyxhQUFPLEtBQUs7QUFFWixVQUFJLGtCQUFrQixLQUFLO0FBQ3pCLGVBQU8sY0FBYyxZQUFZLENBQUM7QUFBQSxNQUNwQyxXQUFXLGtCQUFrQixLQUFLO0FBRWhDLGVBQU8sS0FBSyxPQUFPLEtBQUs7QUFDeEIsZUFBTyxZQUFZLFlBQVksR0FBRyxDQUFDO0FBQUEsTUFDckM7QUFFQSxhQUFPLE1BQU07QUFHYixlQUFTLElBQUksRUFBRyxJQUFJLFlBQVksS0FBSztBQUNuQyxlQUFPLFNBQVMsS0FBSyxLQUFLLFVBQVUsS0FBSyxLQUFLLFFBQVEsSUFBSTtBQUFBLE1BQzVEO0FBRUEsYUFBTztBQUFBO0FBQUEsRUFFWDtBQUVBLFNBQU8sVUFBVTtBQUFBLElBQ2Y7QUFBQSxFQUNGO0FBQUE7Ozs7QUN0RUEsUUFBUTtBQUNSLE1BQU07QUFDTixRQUFRLGNBQWMsU0FBUyxRQUFRO0FBQ3ZDLFFBQVEsYUFBYSxZQUFZLFdBQVc7QUFDNUMsUUFBUSxtQkFBbUIseUJBQXlCO0FBQ3BELFFBQVE7QUFPUixNQUFNLFdBQVcsQ0FBQztBQUNsQixXQUFTLE9BQU8sbUJBQW1CLFFBQVEsdUJBQXVCO0FBQ2xFLFdBQVMsT0FBTyxtQkFBbUIsUUFBUSx1QkFBdUI7QUFFbEU7QUFBQSxRQUFNLG1CQUFtQixTQUFTO0FBQUEsSUFDaEMsV0FBVyxDQUFDO0FBQUEsSUFDWixjQUFjO0FBQUEsSUFFZCxTQUFTLGFBQWE7QUFBQSxJQUV0QixRQUFRLENBQUM7QUFBQSxJQUNULGFBQWEsQ0FBQztBQUFBLElBRWQsV0FBWSxDQUFDLElBQUk7QUFDZixZQUFNO0FBRU4sV0FBSyxLQUFLO0FBQUE7QUFBQSxJQU9aLE1BQU8sQ0FBQyxPQUFPLEdBQUcsVUFBVTtBQUMxQixXQUFLLFNBQVMsS0FBSyxLQUFLO0FBQ3hCLFdBQUssZUFBZSxNQUFNO0FBRTFCLFdBQUssSUFBSSxRQUFRO0FBQUE7QUFBQSxJQVFuQixHQUFJLENBQUMsVUFBVTtBQUNiLGFBQU8sTUFBTTtBQUNYLFlBQUksS0FBSyxXQUFXLGFBQWEsTUFBTTtBQUVyQyxjQUFJLEtBQUssY0FBYyxHQUFHO0FBQ3hCLG1CQUFPLFNBQVM7QUFBQSxVQUNsQjtBQUVBLGdCQUFNLFNBQVMsS0FBSyxRQUFRLENBQUM7QUFFN0IsZUFBSyxNQUFNLE9BQU8sT0FBTyxLQUFLLFNBQVU7QUFDeEMsZUFBSyxNQUFNLFNBQVMsT0FBTyxLQUFLO0FBSWhDLGVBQUssTUFBTSxtQkFBbUIsS0FBSyxNQUFNO0FBRXpDLGVBQUssTUFBTSxjQUFjLEtBQUssTUFBTSxPQUFPLEtBQUssTUFBTSxXQUFXLFFBQVE7QUFFekUsY0FBSSxLQUFLLE1BQU0sY0FBYyxLQUFLLE1BQU0sV0FBVyxRQUFRLFVBQVUsS0FBSyxNQUFNLFdBQVcsUUFBUSxNQUFNO0FBRXZHLG9DQUF3QixLQUFLLElBQUksb0NBQW9DO0FBQ3JFO0FBQUEsVUFDRjtBQUVBLGdCQUFNLGdCQUFnQixPQUFPLEtBQUs7QUFFbEMsY0FBSSxpQkFBaUIsS0FBSztBQUN4QixpQkFBSyxNQUFNLGdCQUFnQjtBQUMzQixpQkFBSyxTQUFTLGFBQWE7QUFBQSxVQUM3QixXQUFXLGtCQUFrQixLQUFLO0FBQ2hDLGlCQUFLLFNBQVMsYUFBYTtBQUFBLFVBQzdCLFdBQVcsa0JBQWtCLEtBQUs7QUFDaEMsaUJBQUssU0FBUyxhQUFhO0FBQUEsVUFDN0I7QUFFQSxjQUFJLEtBQUssTUFBTSxjQUFjLGdCQUFnQixLQUFLO0FBRWhELG9DQUF3QixLQUFLLElBQUksc0NBQXNDO0FBQ3ZFO0FBQUEsVUFDRixZQUNHLEtBQUssTUFBTSxXQUFXLFFBQVEsUUFDN0IsS0FBSyxNQUFNLFdBQVcsUUFBUSxRQUM5QixLQUFLLE1BQU0sV0FBVyxRQUFRLFVBQ2hDLGdCQUFnQixLQUNoQjtBQUVBLG9DQUF3QixLQUFLLElBQUksc0RBQXNEO0FBQ3ZGO0FBQUEsVUFDRixXQUFXLEtBQUssTUFBTSxXQUFXLFFBQVEsT0FBTztBQUM5QyxnQkFBSSxrQkFBa0IsR0FBRztBQUN2QixzQ0FBd0IsS0FBSyxJQUFJLDBDQUEwQztBQUMzRTtBQUFBLFlBQ0Y7QUFFQSxrQkFBTSxPQUFPLEtBQUssUUFBUSxhQUFhO0FBRXZDLGlCQUFLLE1BQU0sWUFBWSxLQUFLLGVBQWUsT0FBTyxJQUFJO0FBRXRELGlCQUFLLEtBQUssR0FBRyxhQUFhO0FBS3hCLG9CQUFNLFFBQU8sT0FBTyxZQUFZLENBQUM7QUFDakMsb0JBQUssY0FBYyxLQUFLLE1BQU0sVUFBVSxNQUFNLENBQUM7QUFDL0Msb0JBQU0sYUFBYSxJQUFJLG1CQUFtQixLQUFJO0FBRTlDLG1CQUFLLEdBQUcsV0FBVyxPQUFPLE1BQ3hCLFdBQVcsWUFBWSxRQUFRLEtBQUssR0FDcEMsQ0FBQyxRQUFRO0FBQ1AscUJBQUssS0FBSztBQUNSLHVCQUFLLEdBQUcsY0FBYztBQUFBLGdCQUN4QjtBQUFBLGVBRUo7QUFBQSxZQUNGO0FBS0EsaUJBQUssR0FBRyxlQUFlLE9BQU87QUFDOUIsaUJBQUssR0FBRyxrQkFBa0I7QUFFMUIsaUJBQUssSUFBSTtBQUVUO0FBQUEsVUFDRixXQUFXLEtBQUssTUFBTSxXQUFXLFFBQVEsTUFBTTtBQU03QyxrQkFBTSxPQUFPLEtBQUssUUFBUSxhQUFhO0FBRXZDLGlCQUFLLEtBQUssR0FBRyxpQkFBaUI7QUFDNUIsb0JBQU0sUUFBUSxJQUFJLG1CQUFtQixJQUFJO0FBRXpDLG1CQUFLLEdBQUcsV0FBVyxPQUFPLE1BQU0sTUFBTSxZQUFZLFFBQVEsSUFBSSxDQUFDO0FBRS9ELGtCQUFJLFNBQVMsS0FBSyxnQkFBZ0I7QUFDaEMseUJBQVMsS0FBSyxRQUFRO0FBQUEsa0JBQ3BCLFNBQVM7QUFBQSxnQkFDWCxDQUFDO0FBQUEsY0FDSDtBQUFBLFlBQ0Y7QUFFQSxpQkFBSyxTQUFTLGFBQWE7QUFFM0IsZ0JBQUksS0FBSyxjQUFjLEdBQUc7QUFDeEI7QUFBQSxZQUNGLE9BQU87QUFDTCx1QkFBUztBQUNUO0FBQUE7QUFBQSxVQUVKLFdBQVcsS0FBSyxNQUFNLFdBQVcsUUFBUSxNQUFNO0FBSzdDLGtCQUFNLE9BQU8sS0FBSyxRQUFRLGFBQWE7QUFFdkMsZ0JBQUksU0FBUyxLQUFLLGdCQUFnQjtBQUNoQyx1QkFBUyxLQUFLLFFBQVE7QUFBQSxnQkFDcEIsU0FBUztBQUFBLGNBQ1gsQ0FBQztBQUFBLFlBQ0g7QUFFQSxnQkFBSSxLQUFLLGNBQWMsR0FBRztBQUN4QjtBQUFBLFlBQ0YsT0FBTztBQUNMLHVCQUFTO0FBQ1Q7QUFBQTtBQUFBLFVBRUo7QUFBQSxRQUNGLFdBQVcsS0FBSyxXQUFXLGFBQWEsa0JBQWtCO0FBQ3hELGNBQUksS0FBSyxjQUFjLEdBQUc7QUFDeEIsbUJBQU8sU0FBUztBQUFBLFVBQ2xCO0FBRUEsZ0JBQU0sU0FBUyxLQUFLLFFBQVEsQ0FBQztBQUU3QixlQUFLLE1BQU0sZ0JBQWdCLE9BQU8sYUFBYSxDQUFDO0FBQ2hELGVBQUssU0FBUyxhQUFhO0FBQUEsUUFDN0IsV0FBVyxLQUFLLFdBQVcsYUFBYSxrQkFBa0I7QUFDeEQsY0FBSSxLQUFLLGNBQWMsR0FBRztBQUN4QixtQkFBTyxTQUFTO0FBQUEsVUFDbEI7QUFFQSxnQkFBTSxTQUFTLEtBQUssUUFBUSxDQUFDO0FBQzdCLGdCQUFNLFFBQVEsT0FBTyxhQUFhLENBQUM7QUFRbkMsY0FBSSxRQUFRLEtBQUssS0FBSyxHQUFHO0FBQ3ZCLG9DQUF3QixLQUFLLElBQUksdUNBQXVDO0FBQ3hFO0FBQUEsVUFDRjtBQUVBLGdCQUFNLFFBQVEsT0FBTyxhQUFhLENBQUM7QUFFbkMsZUFBSyxNQUFNLGlCQUFpQixTQUFTLEtBQUs7QUFDMUMsZUFBSyxTQUFTLGFBQWE7QUFBQSxRQUM3QixXQUFXLEtBQUssV0FBVyxhQUFhLFdBQVc7QUFDakQsY0FBSSxLQUFLLGNBQWMsS0FBSyxNQUFNLGVBQWU7QUFFL0MsbUJBQU8sU0FBUztBQUFBLFVBQ2xCLFdBQVcsS0FBSyxlQUFlLEtBQUssTUFBTSxlQUFlO0FBR3ZELGtCQUFNLE9BQU8sS0FBSyxRQUFRLEtBQUssTUFBTSxhQUFhO0FBRWxELGlCQUFLLFdBQVcsS0FBSyxJQUFJO0FBSXpCLGlCQUFLLEtBQUssTUFBTSxjQUFlLEtBQUssTUFBTSxPQUFPLEtBQUssTUFBTSxXQUFXLFFBQVEsY0FBZTtBQUM1RixvQkFBTSxjQUFjLE9BQU8sT0FBTyxLQUFLLFVBQVU7QUFFakQsdUNBQXlCLEtBQUssSUFBSSxLQUFLLE1BQU0sZ0JBQWdCLFdBQVc7QUFFeEUsbUJBQUssUUFBUSxDQUFDO0FBQ2QsbUJBQUssV0FBVyxTQUFTO0FBQUEsWUFDM0I7QUFFQSxpQkFBSyxTQUFTLGFBQWE7QUFBQSxVQUM3QjtBQUFBLFFBQ0Y7QUFFQSxZQUFJLEtBQUssY0FBYyxHQUFHO0FBQ3hCO0FBQUEsUUFDRixPQUFPO0FBQ0wsbUJBQVM7QUFDVDtBQUFBO0FBQUEsTUFFSjtBQUFBO0FBQUEsSUFRRixPQUFRLENBQUMsR0FBRztBQUNWLFVBQUksSUFBSSxLQUFLLGFBQWE7QUFDeEIsZUFBTztBQUFBLE1BQ1QsV0FBVyxNQUFNLEdBQUc7QUFDbEIsZUFBTztBQUFBLE1BQ1Q7QUFFQSxVQUFJLEtBQUssU0FBUyxHQUFHLFdBQVcsR0FBRztBQUNqQyxhQUFLLGVBQWUsS0FBSyxTQUFTLEdBQUc7QUFDckMsZUFBTyxLQUFLLFNBQVMsTUFBTTtBQUFBLE1BQzdCO0FBRUEsWUFBTSxTQUFTLE9BQU8sWUFBWSxDQUFDO0FBQ25DLFVBQUksU0FBUztBQUViLGFBQU8sV0FBVyxHQUFHO0FBQ25CLGNBQU0sT0FBTyxLQUFLLFNBQVM7QUFDM0IsZ0JBQVEsV0FBVztBQUVuQixZQUFJLFNBQVMsV0FBVyxHQUFHO0FBQ3pCLGlCQUFPLElBQUksS0FBSyxTQUFTLE1BQU0sR0FBRyxNQUFNO0FBQ3hDO0FBQUEsUUFDRixXQUFXLFNBQVMsU0FBUyxHQUFHO0FBQzlCLGlCQUFPLElBQUksS0FBSyxTQUFTLEdBQUcsSUFBSSxNQUFNLEdBQUcsTUFBTTtBQUMvQyxlQUFLLFNBQVMsS0FBSyxLQUFLLFNBQVMsSUFBSSxNQUFNO0FBQzNDO0FBQUEsUUFDRixPQUFPO0FBQ0wsaUJBQU8sSUFBSSxLQUFLLFNBQVMsTUFBTSxHQUFHLE1BQU07QUFDeEMsb0JBQVUsS0FBSztBQUFBO0FBQUEsTUFFbkI7QUFFQSxXQUFLLGVBQWU7QUFFcEIsYUFBTztBQUFBO0FBQUEsSUFHVCxjQUFlLENBQUMsVUFBVSxNQUFNO0FBRzlCLFVBQUk7QUFFSixVQUFJLEtBQUssVUFBVSxHQUFHO0FBSXBCLGVBQU8sS0FBSyxhQUFhLENBQUM7QUFBQSxNQUM1QjtBQUVBLFVBQUksVUFBVTtBQUNaLGFBQUssa0JBQWtCLElBQUksR0FBRztBQUM1QixpQkFBTztBQUFBLFFBQ1Q7QUFFQSxlQUFPLEVBQUUsS0FBSztBQUFBLE1BQ2hCO0FBSUEsVUFBSSxTQUFTLEtBQUssU0FBUyxDQUFDO0FBRzVCLFVBQUksT0FBTyxPQUFPLE9BQVEsT0FBTyxPQUFPLE9BQVEsT0FBTyxPQUFPLEtBQU07QUFDbEUsaUJBQVMsT0FBTyxTQUFTLENBQUM7QUFBQSxNQUM1QjtBQUVBLFVBQUksU0FBUyxjQUFjLGtCQUFrQixJQUFJLEdBQUc7QUFDbEQsZUFBTztBQUFBLE1BQ1Q7QUFFQSxVQUFJO0FBRUYsaUJBQVMsSUFBSSxZQUFZLFNBQVMsRUFBRSxPQUFPLEtBQUssQ0FBQyxFQUFFLE9BQU8sTUFBTTtBQUFBLGNBQ2hFO0FBQ0EsZUFBTztBQUFBO0FBR1QsYUFBTyxFQUFFLE1BQU0sT0FBTztBQUFBO0FBQUEsUUFHcEIsV0FBWSxHQUFHO0FBQ2pCLGFBQU8sS0FBSyxNQUFNO0FBQUE7QUFBQSxFQUV0QjtBQUVBLFNBQU8sVUFBVTtBQUFBLElBQ2Y7QUFBQSxFQUNGO0FBQUE7Ozs7QUNyVkEsUUFBUTtBQUNSLFFBQVE7QUFDUixRQUFRO0FBQ1IsUUFBUTtBQUNSLFFBQVEsMkJBQTJCLFFBQVEsU0FBUztBQUNwRDtBQUFBLElBQ0U7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQTtBQUVGLFFBQVEsZUFBZSxXQUFXLG9CQUFvQix5QkFBeUI7QUFDL0UsUUFBUTtBQUNSLFFBQVE7QUFDUixRQUFRO0FBQ1IsUUFBUSxxQkFBcUI7QUFDN0IsUUFBUTtBQUNSLFFBQVE7QUFFUixNQUFJLHFCQUFxQjtBQUd6QjtBQUFBLFFBQU0sa0JBQWtCLFlBQVk7QUFBQSxJQUNsQyxVQUFVO0FBQUEsTUFDUixNQUFNO0FBQUEsTUFDTixPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxTQUFTO0FBQUEsSUFDWDtBQUFBLElBRUEsa0JBQWtCO0FBQUEsSUFDbEIsWUFBWTtBQUFBLElBQ1osY0FBYztBQUFBLElBTWQsV0FBWSxDQUFDLEtBQUssWUFBWSxDQUFDLEdBQUc7QUFDaEMsWUFBTTtBQUVOLGFBQU8sb0JBQW9CLFdBQVcsR0FBRyxFQUFFLFFBQVEsd0JBQXdCLENBQUM7QUFFNUUsV0FBSyxvQkFBb0I7QUFDdkIsNkJBQXFCO0FBQ3JCLGdCQUFRLFlBQVksbUVBQW1FO0FBQUEsVUFDckYsTUFBTTtBQUFBLFFBQ1IsQ0FBQztBQUFBLE1BQ0g7QUFFQSxZQUFNLFVBQVUsT0FBTyxXQUFXLHFEQUFxRCxTQUFTO0FBRWhHLFlBQU0sT0FBTyxXQUFXLFVBQVUsR0FBRztBQUNyQyxrQkFBWSxRQUFRO0FBR3BCLFlBQU0sVUFBVSxnQkFBZ0I7QUFHaEMsVUFBSTtBQUVKLFVBQUk7QUFDRixvQkFBWSxJQUFJLElBQUksS0FBSyxPQUFPO0FBQUEsZUFDekIsR0FBUDtBQUVBLGNBQU0sSUFBSSxjQUFhLEdBQUcsYUFBYTtBQUFBO0FBSXpDLFVBQUksVUFBVSxhQUFhLFNBQVM7QUFDbEMsa0JBQVUsV0FBVztBQUFBLE1BQ3ZCLFdBQVcsVUFBVSxhQUFhLFVBQVU7QUFFMUMsa0JBQVUsV0FBVztBQUFBLE1BQ3ZCO0FBR0EsVUFBSSxVQUFVLGFBQWEsU0FBUyxVQUFVLGFBQWEsUUFBUTtBQUNqRSxjQUFNLElBQUksY0FDUix3Q0FBd0MsVUFBVSxZQUNsRCxhQUNGO0FBQUEsTUFDRjtBQUlBLFVBQUksVUFBVSxRQUFRLFVBQVUsS0FBSyxTQUFTLEdBQUcsR0FBRztBQUNsRCxjQUFNLElBQUksY0FBYSxnQkFBZ0IsYUFBYTtBQUFBLE1BQ3REO0FBSUEsaUJBQVcsY0FBYyxVQUFVO0FBQ2pDLG9CQUFZLENBQUMsU0FBUztBQUFBLE1BQ3hCO0FBTUEsVUFBSSxVQUFVLFdBQVcsSUFBSSxJQUFJLFVBQVUsSUFBSSxPQUFLLEVBQUUsWUFBWSxDQUFDLENBQUMsRUFBRSxNQUFNO0FBQzFFLGNBQU0sSUFBSSxjQUFhLHdDQUF3QyxhQUFhO0FBQUEsTUFDOUU7QUFFQSxVQUFJLFVBQVUsU0FBUyxNQUFNLFVBQVUsTUFBTSxPQUFLLG1CQUFtQixDQUFDLENBQUMsR0FBRztBQUN4RSxjQUFNLElBQUksY0FBYSx3Q0FBd0MsYUFBYTtBQUFBLE1BQzlFO0FBR0EsV0FBSyxpQkFBaUIsSUFBSSxJQUFJLFVBQVUsSUFBSTtBQVE1QyxXQUFLLGVBQWUsNkJBQ2xCLFdBQ0EsV0FDQSxNQUNBLENBQUMsYUFBYSxLQUFLLHlCQUF5QixRQUFRLEdBQ3BELE9BQ0Y7QUFLQSxXQUFLLGVBQWUsVUFBVTtBQVE5QixXQUFLLGVBQWU7QUFBQTtBQUFBLElBUXRCLEtBQU0sQ0FBQyxPQUFPLFdBQVcsU0FBUyxXQUFXO0FBQzNDLGFBQU8sV0FBVyxNQUFNLFNBQVM7QUFFakMsVUFBSSxTQUFTLFdBQVc7QUFDdEIsZUFBTyxPQUFPLFdBQVcsa0JBQWtCLE1BQU0sRUFBRSxPQUFPLEtBQUssQ0FBQztBQUFBLE1BQ2xFO0FBRUEsVUFBSSxXQUFXLFdBQVc7QUFDeEIsaUJBQVMsT0FBTyxXQUFXLFVBQVUsTUFBTTtBQUFBLE1BQzdDO0FBS0EsVUFBSSxTQUFTLFdBQVc7QUFDdEIsWUFBSSxTQUFTLFNBQVMsT0FBTyxRQUFRLE9BQU8sT0FBTztBQUNqRCxnQkFBTSxJQUFJLGNBQWEsZ0JBQWdCLG9CQUFvQjtBQUFBLFFBQzdEO0FBQUEsTUFDRjtBQUVBLFVBQUksbUJBQW1CO0FBR3ZCLFVBQUksV0FBVyxXQUFXO0FBSXhCLDJCQUFtQixPQUFPLFdBQVcsTUFBTTtBQUUzQyxZQUFJLG1CQUFtQixLQUFLO0FBQzFCLGdCQUFNLElBQUksY0FDUixnREFBZ0Qsb0JBQ2hELGFBQ0Y7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUdBLFVBQUksS0FBSyxpQkFBaUIsVUFBVSxXQUFXLEtBQUssaUJBQWlCLFVBQVUsUUFBUTtBQUFBLE1BR3ZGLFlBQVksY0FBYyxJQUFJLEdBQUc7QUFJL0IsZ0NBQXdCLE1BQU0sa0RBQWtEO0FBQ2hGLGFBQUssZUFBZSxVQUFVO0FBQUEsTUFDaEMsWUFBWSxVQUFVLElBQUksR0FBRztBQVczQixjQUFNLFFBQVEsSUFBSTtBQU9sQixZQUFJLFNBQVMsYUFBYSxXQUFXLFdBQVc7QUFDOUMsZ0JBQU0sWUFBWSxPQUFPLFlBQVksQ0FBQztBQUN0QyxnQkFBTSxVQUFVLGNBQWMsTUFBTSxDQUFDO0FBQUEsUUFDdkMsV0FBVyxTQUFTLGFBQWEsV0FBVyxXQUFXO0FBR3JELGdCQUFNLFlBQVksT0FBTyxZQUFZLElBQUksZ0JBQWdCO0FBQ3pELGdCQUFNLFVBQVUsY0FBYyxNQUFNLENBQUM7QUFFckMsZ0JBQU0sVUFBVSxNQUFNLFFBQVEsR0FBRyxPQUFPO0FBQUEsUUFDMUMsT0FBTztBQUNMLGdCQUFNLFlBQVk7QUFBQTtBQUlwQixjQUFNLFNBQVMsS0FBSyxXQUFXO0FBRS9CLGVBQU8sTUFBTSxNQUFNLFlBQVksUUFBUSxLQUFLLEdBQUcsQ0FBQyxRQUFRO0FBQ3RELGVBQUssS0FBSztBQUNSLGlCQUFLLGNBQWM7QUFBQSxVQUNyQjtBQUFBLFNBQ0Q7QUFLRCxhQUFLLGVBQWUsT0FBTztBQUFBLE1BQzdCLE9BQU87QUFHTCxhQUFLLGVBQWUsVUFBVTtBQUFBO0FBQUE7QUFBQSxJQVFsQyxJQUFLLENBQUMsTUFBTTtBQUNWLGFBQU8sV0FBVyxNQUFNLFNBQVM7QUFFakMsYUFBTyxvQkFBb0IsV0FBVyxHQUFHLEVBQUUsUUFBUSxpQkFBaUIsQ0FBQztBQUVyRSxhQUFPLE9BQU8sV0FBVyxrQkFBa0IsSUFBSTtBQUkvQyxVQUFJLEtBQUssaUJBQWlCLFVBQVUsWUFBWTtBQUM5QyxjQUFNLElBQUksY0FBYSwwQkFBMEIsbUJBQW1CO0FBQUEsTUFDdEU7QUFNQSxXQUFLLGNBQWMsSUFBSSxLQUFLLFVBQVUsSUFBSSxHQUFHO0FBQzNDO0FBQUEsTUFDRjtBQUdBLFlBQU0sU0FBUyxLQUFLLFdBQVc7QUFHL0IsaUJBQVcsU0FBUyxVQUFVO0FBWTVCLGNBQU0sUUFBUSxPQUFPLEtBQUssSUFBSTtBQUM5QixjQUFNLFFBQVEsSUFBSSxtQkFBbUIsS0FBSztBQUMxQyxjQUFNLFNBQVMsTUFBTSxZQUFZLFFBQVEsSUFBSTtBQUU3QyxhQUFLLG1CQUFtQixNQUFNO0FBQzlCLGVBQU8sTUFBTSxRQUFRLE1BQU07QUFDekIsZUFBSyxtQkFBbUIsTUFBTTtBQUFBLFNBQy9CO0FBQUEsTUFDSCxXQUFXLE1BQU0sY0FBYyxJQUFJLEdBQUc7QUFhcEMsY0FBTSxRQUFRLE9BQU8sS0FBSyxJQUFJO0FBQzlCLGNBQU0sUUFBUSxJQUFJLG1CQUFtQixLQUFLO0FBQzFDLGNBQU0sU0FBUyxNQUFNLFlBQVksUUFBUSxNQUFNO0FBRS9DLGFBQUssbUJBQW1CLE1BQU07QUFDOUIsZUFBTyxNQUFNLFFBQVEsTUFBTTtBQUN6QixlQUFLLG1CQUFtQixNQUFNO0FBQUEsU0FDL0I7QUFBQSxNQUNILFdBQVcsWUFBWSxPQUFPLElBQUksR0FBRztBQWFuQyxjQUFNLEtBQUssT0FBTyxLQUFLLE1BQU0sS0FBSyxZQUFZLEtBQUssVUFBVTtBQUU3RCxjQUFNLFFBQVEsSUFBSSxtQkFBbUIsRUFBRTtBQUN2QyxjQUFNLFNBQVMsTUFBTSxZQUFZLFFBQVEsTUFBTTtBQUUvQyxhQUFLLG1CQUFtQixHQUFHO0FBQzNCLGVBQU8sTUFBTSxRQUFRLE1BQU07QUFDekIsZUFBSyxtQkFBbUIsR0FBRztBQUFBLFNBQzVCO0FBQUEsTUFDSCxXQUFXLFdBQVcsSUFBSSxHQUFHO0FBWTNCLGNBQU0sUUFBUSxJQUFJO0FBRWxCLGFBQUssWUFBWSxFQUFFLEtBQUssQ0FBQyxPQUFPO0FBQzlCLGdCQUFNLFFBQVEsT0FBTyxLQUFLLEVBQUU7QUFDNUIsZ0JBQU0sWUFBWTtBQUNsQixnQkFBTSxTQUFTLE1BQU0sWUFBWSxRQUFRLE1BQU07QUFFL0MsZUFBSyxtQkFBbUIsTUFBTTtBQUM5QixpQkFBTyxNQUFNLFFBQVEsTUFBTTtBQUN6QixpQkFBSyxtQkFBbUIsTUFBTTtBQUFBLFdBQy9CO0FBQUEsU0FDRjtBQUFBLE1BQ0g7QUFBQTtBQUFBLFFBR0UsVUFBVyxHQUFHO0FBQ2hCLGFBQU8sV0FBVyxNQUFNLFNBQVM7QUFHakMsYUFBTyxLQUFLO0FBQUE7QUFBQSxRQUdWLGNBQWUsR0FBRztBQUNwQixhQUFPLFdBQVcsTUFBTSxTQUFTO0FBRWpDLGFBQU8sS0FBSztBQUFBO0FBQUEsUUFHVixHQUFJLEdBQUc7QUFDVCxhQUFPLFdBQVcsTUFBTSxTQUFTO0FBR2pDLGFBQU8sY0FBYyxLQUFLLGNBQWM7QUFBQTtBQUFBLFFBR3RDLFVBQVcsR0FBRztBQUNoQixhQUFPLFdBQVcsTUFBTSxTQUFTO0FBRWpDLGFBQU8sS0FBSztBQUFBO0FBQUEsUUFHVixRQUFTLEdBQUc7QUFDZCxhQUFPLFdBQVcsTUFBTSxTQUFTO0FBRWpDLGFBQU8sS0FBSztBQUFBO0FBQUEsUUFHVixNQUFPLEdBQUc7QUFDWixhQUFPLFdBQVcsTUFBTSxTQUFTO0FBRWpDLGFBQU8sS0FBSyxRQUFRO0FBQUE7QUFBQSxRQUdsQixNQUFPLENBQUMsSUFBSTtBQUNkLGFBQU8sV0FBVyxNQUFNLFNBQVM7QUFFakMsVUFBSSxLQUFLLFFBQVEsTUFBTTtBQUNyQixhQUFLLG9CQUFvQixRQUFRLEtBQUssUUFBUSxJQUFJO0FBQUEsTUFDcEQ7QUFFQSxpQkFBVyxPQUFPLFlBQVk7QUFDNUIsYUFBSyxRQUFRLE9BQU87QUFDcEIsYUFBSyxpQkFBaUIsUUFBUSxFQUFFO0FBQUEsTUFDbEMsT0FBTztBQUNMLGFBQUssUUFBUSxPQUFPO0FBQUE7QUFBQTtBQUFBLFFBSXBCLE9BQVEsR0FBRztBQUNiLGFBQU8sV0FBVyxNQUFNLFNBQVM7QUFFakMsYUFBTyxLQUFLLFFBQVE7QUFBQTtBQUFBLFFBR2xCLE9BQVEsQ0FBQyxJQUFJO0FBQ2YsYUFBTyxXQUFXLE1BQU0sU0FBUztBQUVqQyxVQUFJLEtBQUssUUFBUSxPQUFPO0FBQ3RCLGFBQUssb0JBQW9CLFNBQVMsS0FBSyxRQUFRLEtBQUs7QUFBQSxNQUN0RDtBQUVBLGlCQUFXLE9BQU8sWUFBWTtBQUM1QixhQUFLLFFBQVEsUUFBUTtBQUNyQixhQUFLLGlCQUFpQixTQUFTLEVBQUU7QUFBQSxNQUNuQyxPQUFPO0FBQ0wsYUFBSyxRQUFRLFFBQVE7QUFBQTtBQUFBO0FBQUEsUUFJckIsT0FBUSxHQUFHO0FBQ2IsYUFBTyxXQUFXLE1BQU0sU0FBUztBQUVqQyxhQUFPLEtBQUssUUFBUTtBQUFBO0FBQUEsUUFHbEIsT0FBUSxDQUFDLElBQUk7QUFDZixhQUFPLFdBQVcsTUFBTSxTQUFTO0FBRWpDLFVBQUksS0FBSyxRQUFRLE9BQU87QUFDdEIsYUFBSyxvQkFBb0IsU0FBUyxLQUFLLFFBQVEsS0FBSztBQUFBLE1BQ3REO0FBRUEsaUJBQVcsT0FBTyxZQUFZO0FBQzVCLGFBQUssUUFBUSxRQUFRO0FBQ3JCLGFBQUssaUJBQWlCLFNBQVMsRUFBRTtBQUFBLE1BQ25DLE9BQU87QUFDTCxhQUFLLFFBQVEsUUFBUTtBQUFBO0FBQUE7QUFBQSxRQUlyQixTQUFVLEdBQUc7QUFDZixhQUFPLFdBQVcsTUFBTSxTQUFTO0FBRWpDLGFBQU8sS0FBSyxRQUFRO0FBQUE7QUFBQSxRQUdsQixTQUFVLENBQUMsSUFBSTtBQUNqQixhQUFPLFdBQVcsTUFBTSxTQUFTO0FBRWpDLFVBQUksS0FBSyxRQUFRLFNBQVM7QUFDeEIsYUFBSyxvQkFBb0IsV0FBVyxLQUFLLFFBQVEsT0FBTztBQUFBLE1BQzFEO0FBRUEsaUJBQVcsT0FBTyxZQUFZO0FBQzVCLGFBQUssUUFBUSxVQUFVO0FBQ3ZCLGFBQUssaUJBQWlCLFdBQVcsRUFBRTtBQUFBLE1BQ3JDLE9BQU87QUFDTCxhQUFLLFFBQVEsVUFBVTtBQUFBO0FBQUE7QUFBQSxRQUl2QixVQUFXLEdBQUc7QUFDaEIsYUFBTyxXQUFXLE1BQU0sU0FBUztBQUVqQyxhQUFPLEtBQUs7QUFBQTtBQUFBLFFBR1YsVUFBVyxDQUFDLE1BQU07QUFDcEIsYUFBTyxXQUFXLE1BQU0sU0FBUztBQUVqQyxVQUFJLFNBQVMsVUFBVSxTQUFTLGVBQWU7QUFDN0MsYUFBSyxlQUFlO0FBQUEsTUFDdEIsT0FBTztBQUNMLGFBQUssZUFBZTtBQUFBO0FBQUE7QUFBQSxJQU94Qix3QkFBeUIsQ0FBQyxVQUFVO0FBR2xDLFdBQUssYUFBYTtBQUVsQixZQUFNLFNBQVMsSUFBSSxXQUFXLElBQUk7QUFDbEMsYUFBTyxHQUFHLGtCQUFrQixhQUFjLEdBQUc7QUFDM0MsYUFBSyxHQUFHLFdBQVcsT0FBTyxPQUFPO0FBQUEsT0FDbEM7QUFFRCxlQUFTLE9BQU8sS0FBSztBQUNyQixXQUFLLGVBQWU7QUFHcEIsV0FBSyxlQUFlLE9BQU87QUFLM0IsWUFBTSxhQUFhLFNBQVMsWUFBWSxJQUFJLDBCQUEwQjtBQUV0RSxVQUFJLGVBQWUsTUFBTTtBQUN2QixhQUFLLGNBQWM7QUFBQSxNQUNyQjtBQUtBLFlBQU0sV0FBVyxTQUFTLFlBQVksSUFBSSx3QkFBd0I7QUFFbEUsVUFBSSxhQUFhLE1BQU07QUFDckIsYUFBSyxZQUFZO0FBQUEsTUFDbkI7QUFHQSxnQkFBVSxRQUFRLElBQUk7QUFBQTtBQUFBLEVBRTFCO0FBR0EsWUFBVSxhQUFhLFVBQVUsVUFBVSxhQUFhLE9BQU87QUFFL0QsWUFBVSxPQUFPLFVBQVUsVUFBVSxPQUFPLE9BQU87QUFFbkQsWUFBVSxVQUFVLFVBQVUsVUFBVSxVQUFVLE9BQU87QUFFekQsWUFBVSxTQUFTLFVBQVUsVUFBVSxTQUFTLE9BQU87QUFFdkQsU0FBTyxpQkFBaUIsVUFBVSxXQUFXO0FBQUEsSUFDM0MsWUFBWTtBQUFBLElBQ1osTUFBTTtBQUFBLElBQ04sU0FBUztBQUFBLElBQ1QsUUFBUTtBQUFBLElBQ1IsS0FBSztBQUFBLElBQ0wsWUFBWTtBQUFBLElBQ1osZ0JBQWdCO0FBQUEsSUFDaEIsUUFBUTtBQUFBLElBQ1IsU0FBUztBQUFBLElBQ1QsU0FBUztBQUFBLElBQ1QsT0FBTztBQUFBLElBQ1AsV0FBVztBQUFBLElBQ1gsWUFBWTtBQUFBLElBQ1osTUFBTTtBQUFBLElBQ04sWUFBWTtBQUFBLElBQ1osVUFBVTtBQUFBLEtBQ1QsT0FBTyxjQUFjO0FBQUEsTUFDcEIsT0FBTztBQUFBLE1BQ1AsVUFBVTtBQUFBLE1BQ1YsWUFBWTtBQUFBLE1BQ1osY0FBYztBQUFBLElBQ2hCO0FBQUEsRUFDRixDQUFDO0FBRUQsU0FBTyxpQkFBaUIsV0FBVztBQUFBLElBQ2pDLFlBQVk7QUFBQSxJQUNaLE1BQU07QUFBQSxJQUNOLFNBQVM7QUFBQSxJQUNULFFBQVE7QUFBQSxFQUNWLENBQUM7QUFFRCxTQUFPLFdBQVcseUJBQXlCLE9BQU8sa0JBQ2hELE9BQU8sV0FBVyxTQUNwQjtBQUVBLFNBQU8sV0FBVyw4Q0FBK0MsQ0FBQyxHQUFHO0FBQ25FLFFBQUksT0FBTyxLQUFLLEtBQUssQ0FBQyxNQUFNLFlBQVksT0FBTyxZQUFZLEdBQUc7QUFDNUQsYUFBTyxPQUFPLFdBQVcsdUJBQXVCLENBQUM7QUFBQSxJQUNuRDtBQUVBLFdBQU8sT0FBTyxXQUFXLFVBQVUsQ0FBQztBQUFBO0FBSXRDLFNBQU8sV0FBVyxnQkFBZ0IsT0FBTyxvQkFBb0I7QUFBQSxJQUMzRDtBQUFBLE1BQ0UsS0FBSztBQUFBLE1BQ0wsV0FBVyxPQUFPLFdBQVc7QUFBQSxVQUN6QixZQUFhLEdBQUc7QUFDbEIsZUFBTyxDQUFDO0FBQUE7QUFBQSxJQUVaO0FBQUEsSUFDQTtBQUFBLE1BQ0UsS0FBSztBQUFBLE1BQ0wsV0FBVyxDQUFDLE1BQU07QUFBQSxVQUNkLFlBQWEsR0FBRztBQUNsQixlQUFPLG9CQUFvQjtBQUFBO0FBQUEsSUFFL0I7QUFBQSxJQUNBO0FBQUEsTUFDRSxLQUFLO0FBQUEsTUFDTCxXQUFXLE9BQU8sa0JBQWtCLE9BQU8sV0FBVyxXQUFXO0FBQUEsSUFDbkU7QUFBQSxFQUNGLENBQUM7QUFFRCxTQUFPLFdBQVcsK0RBQWdFLENBQUMsR0FBRztBQUNwRixRQUFJLE9BQU8sS0FBSyxLQUFLLENBQUMsTUFBTSxjQUFjLE9BQU8sWUFBWSxJQUFJO0FBQy9ELGFBQU8sT0FBTyxXQUFXLGNBQWMsQ0FBQztBQUFBLElBQzFDO0FBRUEsV0FBTyxFQUFFLFdBQVcsT0FBTyxXQUFXLG9DQUFvQyxDQUFDLEVBQUU7QUFBQTtBQUcvRSxTQUFPLFdBQVcsNEJBQTZCLENBQUMsR0FBRztBQUNqRCxRQUFJLE9BQU8sS0FBSyxLQUFLLENBQUMsTUFBTSxVQUFVO0FBQ3BDLFVBQUksV0FBVyxDQUFDLEdBQUc7QUFDakIsZUFBTyxPQUFPLFdBQVcsS0FBSyxHQUFHLEVBQUUsUUFBUSxNQUFNLENBQUM7QUFBQSxNQUNwRDtBQUVBLFVBQUksWUFBWSxPQUFPLENBQUMsS0FBSyxNQUFNLGlCQUFpQixDQUFDLEdBQUc7QUFDdEQsZUFBTyxPQUFPLFdBQVcsYUFBYSxDQUFDO0FBQUEsTUFDekM7QUFBQSxJQUNGO0FBRUEsV0FBTyxPQUFPLFdBQVcsVUFBVSxDQUFDO0FBQUE7QUFHdEMsU0FBTyxVQUFVO0FBQUEsSUFDZjtBQUFBLEVBQ0Y7QUFBQTs7OztBQzluQkEsTUFBTTtBQUNOLE1BQU07QUFDTixNQUFNO0FBQ04sTUFBTTtBQUNOLE1BQU07QUFDTixNQUFNO0FBQ04sTUFBTTtBQUNOLFFBQVEseUJBQXlCO0FBQ2pDLE1BQU07QUFDTixNQUFNO0FBQ04sTUFBTTtBQUNOLE1BQU07QUFDTixNQUFNO0FBQ04sTUFBTTtBQUNOLE1BQU07QUFDTixNQUFNO0FBQ04sUUFBUSxxQkFBcUI7QUFDN0IsTUFBTTtBQUNOLE1BQU07QUFDTixNQUFNO0FBRU4sTUFBSTtBQUNKLE1BQUk7QUFDRjtBQUNBLGdCQUFZO0FBQUEsVUFDWjtBQUNBLGdCQUFZO0FBQUE7QUFHZCxTQUFPLE9BQU8sV0FBVyxXQUFXLEdBQUc7QUFFdkMsRUFBZSxxQkFBYTtBQUM1QixFQUFlLGlCQUFTO0FBQ3hCLEVBQWUsZUFBTztBQUN0QixFQUFlLHVCQUFlO0FBQzlCLEVBQWUsZ0JBQVE7QUFDdkIsRUFBZSxxQkFBYTtBQUM1QixFQUFlLHVCQUFlO0FBRTlCLEVBQWUsMkJBQW1CO0FBQ2xDLEVBQWUsMEJBQWtCO0FBQ2pDLEVBQWUsb0NBQTRCO0FBRTNDLEVBQWUseUJBQWlCO0FBQ2hDLEVBQWUsaUJBQVM7QUFFeEIsV0FBUyxjQUFlLENBQUMsSUFBSTtBQUMzQixXQUFPLENBQUMsS0FBSyxNQUFNLFlBQVk7QUFDN0IsaUJBQVcsU0FBUyxZQUFZO0FBQzlCLGtCQUFVO0FBQ1YsZUFBTztBQUFBLE1BQ1Q7QUFFQSxXQUFLLGNBQWUsUUFBUSxtQkFBbUIsUUFBUSxjQUFjLGVBQWUsTUFBTztBQUN6RixjQUFNLElBQUkscUJBQXFCLGFBQWE7QUFBQSxNQUM5QztBQUVBLFVBQUksUUFBUSxlQUFlLFNBQVMsVUFBVTtBQUM1QyxjQUFNLElBQUkscUJBQXFCLGNBQWM7QUFBQSxNQUMvQztBQUVBLFVBQUksUUFBUSxLQUFLLFFBQVEsTUFBTTtBQUM3QixtQkFBVyxLQUFLLFNBQVMsVUFBVTtBQUNqQyxnQkFBTSxJQUFJLHFCQUFxQixtQkFBbUI7QUFBQSxRQUNwRDtBQUVBLFlBQUksT0FBTyxLQUFLO0FBQ2hCLGFBQUssS0FBSyxLQUFLLFdBQVcsR0FBRyxHQUFHO0FBQzlCLGlCQUFPLElBQUk7QUFBQSxRQUNiO0FBRUEsY0FBTSxJQUFJLElBQUksS0FBSyxZQUFZLEdBQUcsRUFBRSxTQUFTLElBQUk7QUFBQSxNQUNuRCxPQUFPO0FBQ0wsYUFBSyxNQUFNO0FBQ1Qsd0JBQWMsUUFBUSxXQUFXLE1BQU0sQ0FBQztBQUFBLFFBQzFDO0FBRUEsY0FBTSxLQUFLLFNBQVMsR0FBRztBQUFBO0FBR3pCLGNBQVEsT0FBTyxhQUFhLG9CQUFvQixNQUFNO0FBRXRELFVBQUksT0FBTztBQUNULGNBQU0sSUFBSSxxQkFBcUIsbURBQW1EO0FBQUEsTUFDcEY7QUFFQSxhQUFPLEdBQUcsS0FBSyxZQUFZO0FBQUEsV0FDdEI7QUFBQSxRQUNILFFBQVEsSUFBSTtBQUFBLFFBQ1osTUFBTSxJQUFJLFNBQVMsR0FBRyxJQUFJLFdBQVcsSUFBSSxXQUFXLElBQUk7QUFBQSxRQUN4RCxRQUFRLEtBQUssV0FBVyxLQUFLLE9BQU8sUUFBUTtBQUFBLE1BQzlDLEdBQUcsT0FBTztBQUFBO0FBQUE7QUFJZCxFQUFlLDhCQUFzQjtBQUNyQyxFQUFlLDhCQUFzQjtBQUVyQyxNQUFJLEtBQUssWUFBWSxNQUFPLEtBQUssY0FBYyxNQUFNLEtBQUssYUFBYSxHQUFJO0FBQ3pFLFFBQUksWUFBWTtBQUNoQixJQUFlLGdCQUFRLGVBQWUsS0FBTSxDQUFDLFVBQVU7QUFDckQsV0FBSyxXQUFXO0FBQ2Qsb0NBQW1DO0FBQUEsTUFDckM7QUFFQSxVQUFJO0FBQ0YsZUFBTyxNQUFNLFVBQVUsR0FBRyxTQUFTO0FBQUEsZUFDNUIsS0FBUDtBQUNBLG1CQUFXLFFBQVEsVUFBVTtBQUMzQixnQkFBTSxrQkFBa0IsS0FBSyxJQUFJO0FBQUEsUUFDbkM7QUFFQSxjQUFNO0FBQUE7QUFBQTtBQUdWLElBQWUsb0NBQXlDO0FBQ3hELElBQWUsc0NBQTJDO0FBQzFELElBQWUscUNBQXlDO0FBQ3hELElBQWUsc0NBQTJDO0FBQzFELElBQWUsOEJBQW1DO0FBQ2xELElBQWUsMENBQWlEO0FBRWhFLFlBQVEsaUJBQWlCO0FBRXpCLElBQWUsMEJBQWtCO0FBQ2pDLElBQWUsMEJBQWtCO0FBRWpDLFlBQVE7QUFDUixZQUFRO0FBSVIsSUFBZSxpQkFBUyxJQUFJLGFBQWEsVUFBVTtBQUFBLEVBQ3JEO0FBRUEsTUFBSSxLQUFLLGFBQWEsSUFBSTtBQUN4QixZQUFRLGNBQWMsWUFBWSxlQUFlO0FBRWpELElBQWUsdUJBQWU7QUFDOUIsSUFBZSxxQkFBYTtBQUM1QixJQUFlLHdCQUFnQjtBQUMvQixJQUFlLG9CQUFZO0FBRTNCLFlBQVEsZUFBZTtBQUV2QixJQUFlLHdCQUFnQjtBQUMvQixJQUFlLDZCQUFxQjtBQUFBLEVBQ3RDO0FBRUEsTUFBSSxLQUFLLGFBQWEsTUFBTSxXQUFXO0FBQ3JDLFlBQVE7QUFFUixJQUFlLG9CQUFZO0FBQUEsRUFDN0I7QUFFQSxFQUFlLGtCQUFVLGVBQWUsSUFBSSxPQUFPO0FBQ25ELEVBQWUsaUJBQVMsZUFBZSxJQUFJLE1BQU07QUFDakQsRUFBZSxtQkFBVyxlQUFlLElBQUksUUFBUTtBQUNyRCxFQUFlLGtCQUFVLGVBQWUsSUFBSSxPQUFPO0FBQ25ELEVBQWUsa0JBQVUsZUFBZSxJQUFJLE9BQU87QUFFbkQsRUFBZSxxQkFBYTtBQUM1QixFQUFlLG1CQUFXO0FBQzFCLEVBQWUsb0JBQVk7QUFDM0IsRUFBZSxxQkFBYTtBQUFBOzs7O0FDcEs1QixNQUFJLGtCQUFtQixXQUFRLFFBQUssb0JBQXFCLE9BQU8saUJBQWtCLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSTtBQUM1RixRQUFJLE9BQU87QUFBVyxXQUFLO0FBQzNCLFFBQUksT0FBTyxPQUFPLHlCQUF5QixHQUFHLENBQUM7QUFDL0MsU0FBSyxTQUFTLFNBQVMsUUFBUSxFQUFFLGFBQWEsS0FBSyxZQUFZLEtBQUssZUFBZTtBQUNqRixhQUFPLEVBQUUsWUFBWSxNQUFNLGFBQWEsR0FBRztBQUFFLGVBQU8sRUFBRTtBQUFBLFFBQU07QUFBQSxJQUM5RDtBQUNBLFdBQU8sZUFBZSxHQUFHLElBQUksSUFBSTtBQUFBLGNBQ3ZCLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSTtBQUN4QixRQUFJLE9BQU87QUFBVyxXQUFLO0FBQzNCLE1BQUUsTUFBTSxFQUFFO0FBQUE7QUFFZCxNQUFJLHFCQUFzQixXQUFRLFFBQUssdUJBQXdCLE9BQU8saUJBQWtCLENBQUMsR0FBRyxHQUFHO0FBQzNGLFdBQU8sZUFBZSxHQUFHLFdBQVcsRUFBRSxZQUFZLE1BQU0sT0FBTyxFQUFFLENBQUM7QUFBQSxjQUN6RCxDQUFDLEdBQUcsR0FBRztBQUNoQixNQUFFLGFBQWE7QUFBQTtBQUVuQixNQUFJLGVBQWdCLFdBQVEsUUFBSyx3QkFBMEIsQ0FBQyxLQUFLO0FBQzdELFFBQUksT0FBTyxJQUFJO0FBQVksYUFBTztBQUNsQyxRQUFJLFNBQVMsQ0FBQztBQUNkLFFBQUksT0FBTztBQUFNLGVBQVMsS0FBSztBQUFLLFlBQUksTUFBTSxhQUFhLE9BQU8sVUFBVSxlQUFlLEtBQUssS0FBSyxDQUFDO0FBQUcsMEJBQWdCLFFBQVEsS0FBSyxDQUFDO0FBQUE7QUFDdkksdUJBQW1CLFFBQVEsR0FBRztBQUM5QixXQUFPO0FBQUE7QUFFWCxNQUFJLFlBQWEsV0FBUSxRQUFLLHFCQUF1QixDQUFDLFNBQVMsWUFBWSxHQUFHLFdBQVc7QUFDckYsYUFBUyxLQUFLLENBQUMsT0FBTztBQUFFLGFBQU8saUJBQWlCLElBQUksUUFBUSxJQUFJLFVBQVcsQ0FBQyxTQUFTO0FBQUUsZ0JBQVEsS0FBSztBQUFBLE9BQUk7QUFBQTtBQUN4RyxXQUFPLEtBQUssTUFBTSxJQUFJLGtCQUFtQixDQUFDLFNBQVMsUUFBUTtBQUN2RCxlQUFTLFNBQVMsQ0FBQyxPQUFPO0FBQUUsWUFBSTtBQUFFLGVBQUssVUFBVSxLQUFLLEtBQUssQ0FBQztBQUFBLGlCQUFZLEdBQVA7QUFBWSxpQkFBTyxDQUFDO0FBQUE7QUFBQTtBQUNyRixlQUFTLFFBQVEsQ0FBQyxPQUFPO0FBQUUsWUFBSTtBQUFFLGVBQUssVUFBVSxTQUFTLEtBQUssQ0FBQztBQUFBLGlCQUFZLEdBQVA7QUFBWSxpQkFBTyxDQUFDO0FBQUE7QUFBQTtBQUN4RixlQUFTLElBQUksQ0FBQyxRQUFRO0FBQUUsZUFBTyxPQUFPLFFBQVEsT0FBTyxLQUFLLElBQUksTUFBTSxPQUFPLEtBQUssRUFBRSxLQUFLLFdBQVcsUUFBUTtBQUFBO0FBQzFHLFlBQU0sWUFBWSxVQUFVLE1BQU0sU0FBUyxjQUFjLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUFBLEtBQ3ZFO0FBQUE7QUFFTCxTQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDNUQsVUFBUSxhQUFhLFFBQVEsVUFBVSxRQUFRLHFCQUFxQixRQUFRLGtCQUFrQixRQUFRLGNBQWMsUUFBUSxhQUFhLFFBQVEsVUFBVSxRQUFRLFlBQWlCO0FBQ3BMLE1BQU0sT0FBTyw4QkFBNEI7QUFDekMsTUFBTSxRQUFRLCtCQUE2QjtBQUMzQyxNQUFNLEtBQUssNEJBQStCO0FBQzFDLE1BQU0sU0FBUyw2QkFBOEI7QUFDN0MsTUFBTTtBQUNOLE1BQUk7QUFDSixXQUFVLENBQUMsWUFBVztBQUNsQixlQUFVLFdBQVUsUUFBUSxPQUFPO0FBQ25DLGVBQVUsV0FBVSxxQkFBcUIsT0FBTztBQUNoRCxlQUFVLFdBQVUsc0JBQXNCLE9BQU87QUFDakQsZUFBVSxXQUFVLG1CQUFtQixPQUFPO0FBQzlDLGVBQVUsV0FBVSxjQUFjLE9BQU87QUFDekMsZUFBVSxXQUFVLGlCQUFpQixPQUFPO0FBQzVDLGVBQVUsV0FBVSxjQUFjLE9BQU87QUFDekMsZUFBVSxXQUFVLGlCQUFpQixPQUFPO0FBQzVDLGVBQVUsV0FBVSx1QkFBdUIsT0FBTztBQUNsRCxlQUFVLFdBQVUsdUJBQXVCLE9BQU87QUFDbEQsZUFBVSxXQUFVLGdCQUFnQixPQUFPO0FBQzNDLGVBQVUsV0FBVSxrQkFBa0IsT0FBTztBQUM3QyxlQUFVLFdBQVUscUJBQXFCLE9BQU87QUFDaEQsZUFBVSxXQUFVLGVBQWUsT0FBTztBQUMxQyxlQUFVLFdBQVUsY0FBYyxPQUFPO0FBQ3pDLGVBQVUsV0FBVSxzQkFBc0IsT0FBTztBQUNqRCxlQUFVLFdBQVUsbUJBQW1CLE9BQU87QUFDOUMsZUFBVSxXQUFVLGlDQUFpQyxPQUFPO0FBQzVELGVBQVUsV0FBVSxvQkFBb0IsT0FBTztBQUMvQyxlQUFVLFdBQVUsY0FBYyxPQUFPO0FBQ3pDLGVBQVUsV0FBVSxVQUFVLE9BQU87QUFDckMsZUFBVSxXQUFVLHFCQUFxQixPQUFPO0FBQ2hELGVBQVUsV0FBVSx5QkFBeUIsT0FBTztBQUNwRCxlQUFVLFdBQVUsb0JBQW9CLE9BQU87QUFDL0MsZUFBVSxXQUFVLGdCQUFnQixPQUFPO0FBQzNDLGVBQVUsV0FBVSx3QkFBd0IsT0FBTztBQUNuRCxlQUFVLFdBQVUsb0JBQW9CLE9BQU87QUFBQSxLQUNoRCxjQUFjLFFBQVEsWUFBWSxZQUFZLENBQUMsRUFBRTtBQUNwRCxNQUFJO0FBQ0osV0FBVSxDQUFDLFVBQVM7QUFDaEIsYUFBUSxZQUFZO0FBQ3BCLGFBQVEsaUJBQWlCO0FBQUEsS0FDMUIsWUFBWSxRQUFRLFVBQVUsVUFBVSxDQUFDLEVBQUU7QUFDOUMsTUFBSTtBQUNKLFdBQVUsQ0FBQyxhQUFZO0FBQ25CLGdCQUFXLHFCQUFxQjtBQUFBLEtBQ2pDLGVBQWUsUUFBUSxhQUFhLGFBQWEsQ0FBQyxFQUFFO0FBS3ZELFdBQVMsV0FBVyxDQUFDLFdBQVc7QUFDNUIsVUFBTSxXQUFXLEdBQUcsWUFBWSxJQUFJLElBQUksU0FBUyxDQUFDO0FBQ2xELFdBQU8sV0FBVyxTQUFTLE9BQU87QUFBQTtBQUV0QyxVQUFRLGNBQWM7QUFDdEIsTUFBTSxvQkFBb0I7QUFBQSxJQUN0QixVQUFVO0FBQUEsSUFDVixVQUFVO0FBQUEsSUFDVixVQUFVO0FBQUEsSUFDVixVQUFVO0FBQUEsSUFDVixVQUFVO0FBQUEsRUFDZDtBQUNBLE1BQU0seUJBQXlCO0FBQUEsSUFDM0IsVUFBVTtBQUFBLElBQ1YsVUFBVTtBQUFBLElBQ1YsVUFBVTtBQUFBLEVBQ2Q7QUFDQSxNQUFNLHFCQUFxQixDQUFDLFdBQVcsT0FBTyxVQUFVLE1BQU07QUFDOUQsTUFBTSw0QkFBNEI7QUFDbEMsTUFBTSw4QkFBOEI7QUFDcEM7QUFBQSxRQUFNLHdCQUF3QixNQUFNO0FBQUEsSUFDaEMsV0FBVyxDQUFDLFNBQVMsWUFBWTtBQUM3QixZQUFNLE9BQU87QUFDYixXQUFLLE9BQU87QUFDWixXQUFLLGFBQWE7QUFDbEIsYUFBTyxlQUFlLE1BQU0sZ0JBQWdCLFNBQVM7QUFBQTtBQUFBLEVBRTdEO0FBQ0EsVUFBUSxrQkFBa0I7QUFDMUI7QUFBQSxRQUFNLG1CQUFtQjtBQUFBLElBQ3JCLFdBQVcsQ0FBQyxTQUFTO0FBQ2pCLFdBQUssVUFBVTtBQUFBO0FBQUEsSUFFbkIsUUFBUSxHQUFHO0FBQ1AsYUFBTyxVQUFVLE1BQVcsV0FBUSxxQkFBYSxHQUFHO0FBQ2hELGVBQU8sSUFBSSxRQUFRLENBQUMsWUFBWSxVQUFVLE1BQVcsV0FBUSxxQkFBYSxHQUFHO0FBQ3pFLGNBQUksU0FBUyxPQUFPLE1BQU0sQ0FBQztBQUMzQixlQUFLLFFBQVEsR0FBRyxRQUFRLENBQUMsVUFBVTtBQUMvQixxQkFBUyxPQUFPLE9BQU8sQ0FBQyxRQUFRLEtBQUssQ0FBQztBQUFBLFdBQ3pDO0FBQ0QsZUFBSyxRQUFRLEdBQUcsT0FBTyxNQUFNO0FBQ3pCLG9CQUFRLE9BQU8sU0FBUyxDQUFDO0FBQUEsV0FDNUI7QUFBQSxTQUNKLENBQUM7QUFBQSxPQUNMO0FBQUE7QUFBQSxJQUVMLGNBQWMsR0FBRztBQUNiLGFBQU8sVUFBVSxNQUFXLFdBQVEscUJBQWEsR0FBRztBQUNoRCxlQUFPLElBQUksUUFBUSxDQUFDLFlBQVksVUFBVSxNQUFXLFdBQVEscUJBQWEsR0FBRztBQUN6RSxnQkFBTSxTQUFTLENBQUM7QUFDaEIsZUFBSyxRQUFRLEdBQUcsUUFBUSxDQUFDLFVBQVU7QUFDL0IsbUJBQU8sS0FBSyxLQUFLO0FBQUEsV0FDcEI7QUFDRCxlQUFLLFFBQVEsR0FBRyxPQUFPLE1BQU07QUFDekIsb0JBQVEsT0FBTyxPQUFPLE1BQU0sQ0FBQztBQUFBLFdBQ2hDO0FBQUEsU0FDSixDQUFDO0FBQUEsT0FDTDtBQUFBO0FBQUEsRUFFVDtBQUNBLFVBQVEscUJBQXFCO0FBQzdCLFdBQVMsT0FBTyxDQUFDLFlBQVk7QUFDekIsVUFBTSxZQUFZLElBQUksSUFBSSxVQUFVO0FBQ3BDLFdBQU8sVUFBVSxhQUFhO0FBQUE7QUFFbEMsVUFBUSxVQUFVO0FBQ2xCO0FBQUEsUUFBTSxXQUFXO0FBQUEsSUFDYixXQUFXLENBQUMsV0FBVyxVQUFVLGdCQUFnQjtBQUM3QyxXQUFLLGtCQUFrQjtBQUN2QixXQUFLLGtCQUFrQjtBQUN2QixXQUFLLDBCQUEwQjtBQUMvQixXQUFLLGdCQUFnQjtBQUNyQixXQUFLLGdCQUFnQjtBQUNyQixXQUFLLGNBQWM7QUFDbkIsV0FBSyxhQUFhO0FBQ2xCLFdBQUssWUFBWTtBQUNqQixXQUFLLFlBQVk7QUFDakIsV0FBSyxXQUFXLFlBQVksQ0FBQztBQUM3QixXQUFLLGlCQUFpQjtBQUN0QixVQUFJLGdCQUFnQjtBQUNoQixZQUFJLGVBQWUsa0JBQWtCLE1BQU07QUFDdkMsZUFBSyxrQkFBa0IsZUFBZTtBQUFBLFFBQzFDO0FBQ0EsYUFBSyxpQkFBaUIsZUFBZTtBQUNyQyxZQUFJLGVBQWUsa0JBQWtCLE1BQU07QUFDdkMsZUFBSyxrQkFBa0IsZUFBZTtBQUFBLFFBQzFDO0FBQ0EsWUFBSSxlQUFlLDBCQUEwQixNQUFNO0FBQy9DLGVBQUssMEJBQTBCLGVBQWU7QUFBQSxRQUNsRDtBQUNBLFlBQUksZUFBZSxnQkFBZ0IsTUFBTTtBQUNyQyxlQUFLLGdCQUFnQixLQUFLLElBQUksZUFBZSxjQUFjLENBQUM7QUFBQSxRQUNoRTtBQUNBLFlBQUksZUFBZSxhQUFhLE1BQU07QUFDbEMsZUFBSyxhQUFhLGVBQWU7QUFBQSxRQUNyQztBQUNBLFlBQUksZUFBZSxnQkFBZ0IsTUFBTTtBQUNyQyxlQUFLLGdCQUFnQixlQUFlO0FBQUEsUUFDeEM7QUFDQSxZQUFJLGVBQWUsY0FBYyxNQUFNO0FBQ25DLGVBQUssY0FBYyxlQUFlO0FBQUEsUUFDdEM7QUFBQSxNQUNKO0FBQUE7QUFBQSxJQUVKLE9BQU8sQ0FBQyxZQUFZLG1CQUFtQjtBQUNuQyxhQUFPLFVBQVUsTUFBVyxXQUFRLHFCQUFhLEdBQUc7QUFDaEQsZUFBTyxLQUFLLFFBQVEsV0FBVyxZQUFZLE1BQU0scUJBQXFCLENBQUMsQ0FBQztBQUFBLE9BQzNFO0FBQUE7QUFBQSxJQUVMLEdBQUcsQ0FBQyxZQUFZLG1CQUFtQjtBQUMvQixhQUFPLFVBQVUsTUFBVyxXQUFRLHFCQUFhLEdBQUc7QUFDaEQsZUFBTyxLQUFLLFFBQVEsT0FBTyxZQUFZLE1BQU0scUJBQXFCLENBQUMsQ0FBQztBQUFBLE9BQ3ZFO0FBQUE7QUFBQSxJQUVMLEdBQUcsQ0FBQyxZQUFZLG1CQUFtQjtBQUMvQixhQUFPLFVBQVUsTUFBVyxXQUFRLHFCQUFhLEdBQUc7QUFDaEQsZUFBTyxLQUFLLFFBQVEsVUFBVSxZQUFZLE1BQU0scUJBQXFCLENBQUMsQ0FBQztBQUFBLE9BQzFFO0FBQUE7QUFBQSxJQUVMLElBQUksQ0FBQyxZQUFZLE1BQU0sbUJBQW1CO0FBQ3RDLGFBQU8sVUFBVSxNQUFXLFdBQVEscUJBQWEsR0FBRztBQUNoRCxlQUFPLEtBQUssUUFBUSxRQUFRLFlBQVksTUFBTSxxQkFBcUIsQ0FBQyxDQUFDO0FBQUEsT0FDeEU7QUFBQTtBQUFBLElBRUwsS0FBSyxDQUFDLFlBQVksTUFBTSxtQkFBbUI7QUFDdkMsYUFBTyxVQUFVLE1BQVcsV0FBUSxxQkFBYSxHQUFHO0FBQ2hELGVBQU8sS0FBSyxRQUFRLFNBQVMsWUFBWSxNQUFNLHFCQUFxQixDQUFDLENBQUM7QUFBQSxPQUN6RTtBQUFBO0FBQUEsSUFFTCxHQUFHLENBQUMsWUFBWSxNQUFNLG1CQUFtQjtBQUNyQyxhQUFPLFVBQVUsTUFBVyxXQUFRLHFCQUFhLEdBQUc7QUFDaEQsZUFBTyxLQUFLLFFBQVEsT0FBTyxZQUFZLE1BQU0scUJBQXFCLENBQUMsQ0FBQztBQUFBLE9BQ3ZFO0FBQUE7QUFBQSxJQUVMLElBQUksQ0FBQyxZQUFZLG1CQUFtQjtBQUNoQyxhQUFPLFVBQVUsTUFBVyxXQUFRLHFCQUFhLEdBQUc7QUFDaEQsZUFBTyxLQUFLLFFBQVEsUUFBUSxZQUFZLE1BQU0scUJBQXFCLENBQUMsQ0FBQztBQUFBLE9BQ3hFO0FBQUE7QUFBQSxJQUVMLFVBQVUsQ0FBQyxNQUFNLFlBQVksUUFBUSxtQkFBbUI7QUFDcEQsYUFBTyxVQUFVLE1BQVcsV0FBUSxxQkFBYSxHQUFHO0FBQ2hELGVBQU8sS0FBSyxRQUFRLE1BQU0sWUFBWSxRQUFRLGlCQUFpQjtBQUFBLE9BQ2xFO0FBQUE7QUFBQSxJQU1MLE9BQU8sQ0FBQyxZQUFZLG9CQUFvQixDQUFDLEdBQUc7QUFDeEMsYUFBTyxVQUFVLE1BQVcsV0FBUSxxQkFBYSxHQUFHO0FBQ2hELDBCQUFrQixRQUFRLFVBQVUsS0FBSyw0QkFBNEIsbUJBQW1CLFFBQVEsUUFBUSxXQUFXLGVBQWU7QUFDbEksY0FBTSxNQUFNLE1BQU0sS0FBSyxJQUFJLFlBQVksaUJBQWlCO0FBQ3hELGVBQU8sS0FBSyxpQkFBaUIsS0FBSyxLQUFLLGNBQWM7QUFBQSxPQUN4RDtBQUFBO0FBQUEsSUFFTCxRQUFRLENBQUMsWUFBWSxLQUFLLG9CQUFvQixDQUFDLEdBQUc7QUFDOUMsYUFBTyxVQUFVLE1BQVcsV0FBUSxxQkFBYSxHQUFHO0FBQ2hELGNBQU0sT0FBTyxLQUFLLFVBQVUsS0FBSyxNQUFNLENBQUM7QUFDeEMsMEJBQWtCLFFBQVEsVUFBVSxLQUFLLDRCQUE0QixtQkFBbUIsUUFBUSxRQUFRLFdBQVcsZUFBZTtBQUNsSSwwQkFBa0IsUUFBUSxlQUFlLEtBQUssNEJBQTRCLG1CQUFtQixRQUFRLGFBQWEsV0FBVyxlQUFlO0FBQzVJLGNBQU0sTUFBTSxNQUFNLEtBQUssS0FBSyxZQUFZLE1BQU0saUJBQWlCO0FBQy9ELGVBQU8sS0FBSyxpQkFBaUIsS0FBSyxLQUFLLGNBQWM7QUFBQSxPQUN4RDtBQUFBO0FBQUEsSUFFTCxPQUFPLENBQUMsWUFBWSxLQUFLLG9CQUFvQixDQUFDLEdBQUc7QUFDN0MsYUFBTyxVQUFVLE1BQVcsV0FBUSxxQkFBYSxHQUFHO0FBQ2hELGNBQU0sT0FBTyxLQUFLLFVBQVUsS0FBSyxNQUFNLENBQUM7QUFDeEMsMEJBQWtCLFFBQVEsVUFBVSxLQUFLLDRCQUE0QixtQkFBbUIsUUFBUSxRQUFRLFdBQVcsZUFBZTtBQUNsSSwwQkFBa0IsUUFBUSxlQUFlLEtBQUssNEJBQTRCLG1CQUFtQixRQUFRLGFBQWEsV0FBVyxlQUFlO0FBQzVJLGNBQU0sTUFBTSxNQUFNLEtBQUssSUFBSSxZQUFZLE1BQU0saUJBQWlCO0FBQzlELGVBQU8sS0FBSyxpQkFBaUIsS0FBSyxLQUFLLGNBQWM7QUFBQSxPQUN4RDtBQUFBO0FBQUEsSUFFTCxTQUFTLENBQUMsWUFBWSxLQUFLLG9CQUFvQixDQUFDLEdBQUc7QUFDL0MsYUFBTyxVQUFVLE1BQVcsV0FBUSxxQkFBYSxHQUFHO0FBQ2hELGNBQU0sT0FBTyxLQUFLLFVBQVUsS0FBSyxNQUFNLENBQUM7QUFDeEMsMEJBQWtCLFFBQVEsVUFBVSxLQUFLLDRCQUE0QixtQkFBbUIsUUFBUSxRQUFRLFdBQVcsZUFBZTtBQUNsSSwwQkFBa0IsUUFBUSxlQUFlLEtBQUssNEJBQTRCLG1CQUFtQixRQUFRLGFBQWEsV0FBVyxlQUFlO0FBQzVJLGNBQU0sTUFBTSxNQUFNLEtBQUssTUFBTSxZQUFZLE1BQU0saUJBQWlCO0FBQ2hFLGVBQU8sS0FBSyxpQkFBaUIsS0FBSyxLQUFLLGNBQWM7QUFBQSxPQUN4RDtBQUFBO0FBQUEsSUFPTCxPQUFPLENBQUMsTUFBTSxZQUFZLE1BQU0sU0FBUztBQUNyQyxhQUFPLFVBQVUsTUFBVyxXQUFRLHFCQUFhLEdBQUc7QUFDaEQsWUFBSSxLQUFLLFdBQVc7QUFDaEIsZ0JBQU0sSUFBSSxNQUFNLG1DQUFtQztBQUFBLFFBQ3ZEO0FBQ0EsY0FBTSxZQUFZLElBQUksSUFBSSxVQUFVO0FBQ3BDLFlBQUksT0FBTyxLQUFLLGdCQUFnQixNQUFNLFdBQVcsT0FBTztBQUV4RCxjQUFNLFdBQVcsS0FBSyxpQkFBaUIsbUJBQW1CLFNBQVMsSUFBSSxJQUNqRSxLQUFLLGNBQWMsSUFDbkI7QUFDTixZQUFJLFdBQVc7QUFDZixZQUFJO0FBQ0osV0FBRztBQUNDLHFCQUFXLE1BQU0sS0FBSyxXQUFXLE1BQU0sSUFBSTtBQUUzQyxjQUFJLFlBQ0EsU0FBUyxXQUNULFNBQVMsUUFBUSxlQUFlLFVBQVUsY0FBYztBQUN4RCxnQkFBSTtBQUNKLHVCQUFXLFdBQVcsS0FBSyxVQUFVO0FBQ2pDLGtCQUFJLFFBQVEsd0JBQXdCLFFBQVEsR0FBRztBQUMzQyx3Q0FBd0I7QUFDeEI7QUFBQSxjQUNKO0FBQUEsWUFDSjtBQUNBLGdCQUFJLHVCQUF1QjtBQUN2QixxQkFBTyxzQkFBc0IscUJBQXFCLE1BQU0sTUFBTSxJQUFJO0FBQUEsWUFDdEUsT0FDSztBQUdELHFCQUFPO0FBQUE7QUFBQSxVQUVmO0FBQ0EsY0FBSSxxQkFBcUIsS0FBSztBQUM5QixpQkFBTyxTQUFTLFFBQVEsY0FDcEIsa0JBQWtCLFNBQVMsU0FBUyxRQUFRLFVBQVUsS0FDdEQsS0FBSyxtQkFDTCxxQkFBcUIsR0FBRztBQUN4QixrQkFBTSxjQUFjLFNBQVMsUUFBUSxRQUFRO0FBQzdDLGlCQUFLLGFBQWE7QUFFZDtBQUFBLFlBQ0o7QUFDQSxrQkFBTSxvQkFBb0IsSUFBSSxJQUFJLFdBQVc7QUFDN0MsZ0JBQUksVUFBVSxhQUFhLFlBQ3ZCLFVBQVUsYUFBYSxrQkFBa0IsYUFDeEMsS0FBSyx5QkFBeUI7QUFDL0Isb0JBQU0sSUFBSSxNQUFNLDhLQUE4SztBQUFBLFlBQ2xNO0FBR0Esa0JBQU0sU0FBUyxTQUFTO0FBRXhCLGdCQUFJLGtCQUFrQixhQUFhLFVBQVUsVUFBVTtBQUNuRCx5QkFBVyxVQUFVLFNBQVM7QUFFMUIsb0JBQUksT0FBTyxZQUFZLE1BQU0saUJBQWlCO0FBQzFDLHlCQUFPLFFBQVE7QUFBQSxnQkFDbkI7QUFBQSxjQUNKO0FBQUEsWUFDSjtBQUVBLG1CQUFPLEtBQUssZ0JBQWdCLE1BQU0sbUJBQW1CLE9BQU87QUFDNUQsdUJBQVcsTUFBTSxLQUFLLFdBQVcsTUFBTSxJQUFJO0FBQzNDO0FBQUEsVUFDSjtBQUNBLGVBQUssU0FBUyxRQUFRLGVBQ2pCLHVCQUF1QixTQUFTLFNBQVMsUUFBUSxVQUFVLEdBQUc7QUFFL0QsbUJBQU87QUFBQSxVQUNYO0FBQ0Esc0JBQVk7QUFDWixjQUFJLFdBQVcsVUFBVTtBQUNyQixrQkFBTSxTQUFTLFNBQVM7QUFDeEIsa0JBQU0sS0FBSywyQkFBMkIsUUFBUTtBQUFBLFVBQ2xEO0FBQUEsUUFDSixTQUFTLFdBQVc7QUFDcEIsZUFBTztBQUFBLE9BQ1Y7QUFBQTtBQUFBLElBS0wsT0FBTyxHQUFHO0FBQ04sVUFBSSxLQUFLLFFBQVE7QUFDYixhQUFLLE9BQU8sUUFBUTtBQUFBLE1BQ3hCO0FBQ0EsV0FBSyxZQUFZO0FBQUE7QUFBQSxJQU9yQixVQUFVLENBQUMsTUFBTSxNQUFNO0FBQ25CLGFBQU8sVUFBVSxNQUFXLFdBQVEscUJBQWEsR0FBRztBQUNoRCxlQUFPLElBQUksUUFBUSxDQUFDLFNBQVMsV0FBVztBQUNwQyxtQkFBUyxpQkFBaUIsQ0FBQyxLQUFLLEtBQUs7QUFDakMsZ0JBQUksS0FBSztBQUNMLHFCQUFPLEdBQUc7QUFBQSxZQUNkLFlBQ1UsS0FBSztBQUVYLHFCQUFPLElBQUksTUFBTSxlQUFlLENBQUM7QUFBQSxZQUNyQyxPQUNLO0FBQ0Qsc0JBQVEsR0FBRztBQUFBO0FBQUE7QUFHbkIsZUFBSyx1QkFBdUIsTUFBTSxNQUFNLGlCQUFpQjtBQUFBLFNBQzVEO0FBQUEsT0FDSjtBQUFBO0FBQUEsSUFRTCxzQkFBc0IsQ0FBQyxNQUFNLE1BQU0sVUFBVTtBQUN6QyxpQkFBVyxTQUFTLFVBQVU7QUFDMUIsYUFBSyxLQUFLLFFBQVEsU0FBUztBQUN2QixlQUFLLFFBQVEsVUFBVSxDQUFDO0FBQUEsUUFDNUI7QUFDQSxhQUFLLFFBQVEsUUFBUSxvQkFBb0IsT0FBTyxXQUFXLE1BQU0sTUFBTTtBQUFBLE1BQzNFO0FBQ0EsVUFBSSxpQkFBaUI7QUFDckIsZUFBUyxZQUFZLENBQUMsS0FBSyxLQUFLO0FBQzVCLGFBQUssZ0JBQWdCO0FBQ2pCLDJCQUFpQjtBQUNqQixtQkFBUyxLQUFLLEdBQUc7QUFBQSxRQUNyQjtBQUFBO0FBRUosWUFBTSxNQUFNLEtBQUssV0FBVyxRQUFRLEtBQUssU0FBUyxDQUFDLFFBQVE7QUFDdkQsY0FBTSxNQUFNLElBQUksbUJBQW1CLEdBQUc7QUFDdEMscUJBQWEsV0FBVyxHQUFHO0FBQUEsT0FDOUI7QUFDRCxVQUFJO0FBQ0osVUFBSSxHQUFHLFVBQVUsVUFBUTtBQUNyQixpQkFBUztBQUFBLE9BQ1o7QUFFRCxVQUFJLFdBQVcsS0FBSyxrQkFBa0IsSUFBSSxPQUFPLE1BQU07QUFDbkQsWUFBSSxRQUFRO0FBQ1IsaUJBQU8sSUFBSTtBQUFBLFFBQ2Y7QUFDQSxxQkFBYSxJQUFJLE1BQU0sb0JBQW9CLEtBQUssUUFBUSxNQUFNLENBQUM7QUFBQSxPQUNsRTtBQUNELFVBQUksR0FBRyxpQkFBa0IsQ0FBQyxLQUFLO0FBRzNCLHFCQUFhLEdBQUc7QUFBQSxPQUNuQjtBQUNELFVBQUksZUFBZSxTQUFTLFVBQVU7QUFDbEMsWUFBSSxNQUFNLE1BQU0sTUFBTTtBQUFBLE1BQzFCO0FBQ0EsVUFBSSxlQUFlLFNBQVMsVUFBVTtBQUNsQyxhQUFLLEdBQUcsaUJBQWtCLEdBQUc7QUFDekIsY0FBSSxJQUFJO0FBQUEsU0FDWDtBQUNELGFBQUssS0FBSyxHQUFHO0FBQUEsTUFDakIsT0FDSztBQUNELFlBQUksSUFBSTtBQUFBO0FBQUE7QUFBQSxJQVFoQixRQUFRLENBQUMsV0FBVztBQUNoQixZQUFNLFlBQVksSUFBSSxJQUFJLFNBQVM7QUFDbkMsYUFBTyxLQUFLLFVBQVUsU0FBUztBQUFBO0FBQUEsSUFFbkMsa0JBQWtCLENBQUMsV0FBVztBQUMxQixZQUFNLFlBQVksSUFBSSxJQUFJLFNBQVM7QUFDbkMsWUFBTSxXQUFXLEdBQUcsWUFBWSxTQUFTO0FBQ3pDLFlBQU0sV0FBVyxZQUFZLFNBQVM7QUFDdEMsV0FBSyxVQUFVO0FBQ1g7QUFBQSxNQUNKO0FBQ0EsYUFBTyxLQUFLLHlCQUF5QixXQUFXLFFBQVE7QUFBQTtBQUFBLElBRTVELGVBQWUsQ0FBQyxRQUFRLFlBQVksU0FBUztBQUN6QyxZQUFNLE9BQU8sQ0FBQztBQUNkLFdBQUssWUFBWTtBQUNqQixZQUFNLFdBQVcsS0FBSyxVQUFVLGFBQWE7QUFDN0MsV0FBSyxhQUFhLFdBQVcsUUFBUTtBQUNyQyxZQUFNLGNBQWMsV0FBVyxNQUFNO0FBQ3JDLFdBQUssVUFBVSxDQUFDO0FBQ2hCLFdBQUssUUFBUSxPQUFPLEtBQUssVUFBVTtBQUNuQyxXQUFLLFFBQVEsT0FBTyxLQUFLLFVBQVUsT0FDN0IsU0FBUyxLQUFLLFVBQVUsSUFBSSxJQUM1QjtBQUNOLFdBQUssUUFBUSxRQUNSLEtBQUssVUFBVSxZQUFZLE9BQU8sS0FBSyxVQUFVLFVBQVU7QUFDaEUsV0FBSyxRQUFRLFNBQVM7QUFDdEIsV0FBSyxRQUFRLFVBQVUsS0FBSyxjQUFjLE9BQU87QUFDakQsVUFBSSxLQUFLLGFBQWEsTUFBTTtBQUN4QixhQUFLLFFBQVEsUUFBUSxnQkFBZ0IsS0FBSztBQUFBLE1BQzlDO0FBQ0EsV0FBSyxRQUFRLFFBQVEsS0FBSyxVQUFVLEtBQUssU0FBUztBQUVsRCxVQUFJLEtBQUssVUFBVTtBQUNmLG1CQUFXLFdBQVcsS0FBSyxVQUFVO0FBQ2pDLGtCQUFRLGVBQWUsS0FBSyxPQUFPO0FBQUEsUUFDdkM7QUFBQSxNQUNKO0FBQ0EsYUFBTztBQUFBO0FBQUEsSUFFWCxhQUFhLENBQUMsU0FBUztBQUNuQixVQUFJLEtBQUssa0JBQWtCLEtBQUssZUFBZSxTQUFTO0FBQ3BELGVBQU8sT0FBTyxPQUFPLENBQUMsR0FBRyxjQUFjLEtBQUssZUFBZSxPQUFPLEdBQUcsY0FBYyxXQUFXLENBQUMsQ0FBQyxDQUFDO0FBQUEsTUFDckc7QUFDQSxhQUFPLGNBQWMsV0FBVyxDQUFDLENBQUM7QUFBQTtBQUFBLElBRXRDLDJCQUEyQixDQUFDLG1CQUFtQixRQUFRLFVBQVU7QUFDN0QsVUFBSTtBQUNKLFVBQUksS0FBSyxrQkFBa0IsS0FBSyxlQUFlLFNBQVM7QUFDcEQsdUJBQWUsY0FBYyxLQUFLLGVBQWUsT0FBTyxFQUFFO0FBQUEsTUFDOUQ7QUFDQSxhQUFPLGtCQUFrQixXQUFXLGdCQUFnQjtBQUFBO0FBQUEsSUFFeEQsU0FBUyxDQUFDLFdBQVc7QUFDakIsVUFBSTtBQUNKLFlBQU0sV0FBVyxHQUFHLFlBQVksU0FBUztBQUN6QyxZQUFNLFdBQVcsWUFBWSxTQUFTO0FBQ3RDLFVBQUksS0FBSyxjQUFjLFVBQVU7QUFDN0IsZ0JBQVEsS0FBSztBQUFBLE1BQ2pCO0FBQ0EsV0FBSyxVQUFVO0FBQ1gsZ0JBQVEsS0FBSztBQUFBLE1BQ2pCO0FBRUEsVUFBSSxPQUFPO0FBQ1AsZUFBTztBQUFBLE1BQ1g7QUFDQSxZQUFNLFdBQVcsVUFBVSxhQUFhO0FBQ3hDLFVBQUksYUFBYTtBQUNqQixVQUFJLEtBQUssZ0JBQWdCO0FBQ3JCLHFCQUFhLEtBQUssZUFBZSxjQUFjLEtBQUssWUFBWTtBQUFBLE1BQ3BFO0FBRUEsVUFBSSxZQUFZLFNBQVMsVUFBVTtBQUMvQixjQUFNLGVBQWU7QUFBQSxVQUNqQjtBQUFBLFVBQ0EsV0FBVyxLQUFLO0FBQUEsVUFDaEIsT0FBTyxPQUFPLE9BQU8sT0FBTyxPQUFPLENBQUMsSUFBSyxTQUFTLFlBQVksU0FBUyxhQUFhO0FBQUEsWUFDaEYsV0FBVyxHQUFHLFNBQVMsWUFBWSxTQUFTO0FBQUEsVUFDaEQsQ0FBRSxHQUFHLEVBQUUsTUFBTSxTQUFTLFVBQVUsTUFBTSxTQUFTLEtBQUssQ0FBQztBQUFBLFFBQ3pEO0FBQ0EsWUFBSTtBQUNKLGNBQU0sWUFBWSxTQUFTLGFBQWE7QUFDeEMsWUFBSSxVQUFVO0FBQ1Ysd0JBQWMsWUFBWSxPQUFPLGlCQUFpQixPQUFPO0FBQUEsUUFDN0QsT0FDSztBQUNELHdCQUFjLFlBQVksT0FBTyxnQkFBZ0IsT0FBTztBQUFBO0FBRTVELGdCQUFRLFlBQVksWUFBWTtBQUNoQyxhQUFLLGNBQWM7QUFBQSxNQUN2QjtBQUVBLFdBQUssT0FBTztBQUNSLGNBQU0sVUFBVSxFQUFFLFdBQVcsS0FBSyxZQUFZLFdBQVc7QUFDekQsZ0JBQVEsV0FBVyxJQUFJLE1BQU0sTUFBTSxPQUFPLElBQUksSUFBSSxLQUFLLE1BQU0sT0FBTztBQUNwRSxhQUFLLFNBQVM7QUFBQSxNQUNsQjtBQUNBLFVBQUksWUFBWSxLQUFLLGlCQUFpQjtBQUlsQyxjQUFNLFVBQVUsT0FBTyxPQUFPLE1BQU0sV0FBVyxDQUFDLEdBQUc7QUFBQSxVQUMvQyxvQkFBb0I7QUFBQSxRQUN4QixDQUFDO0FBQUEsTUFDTDtBQUNBLGFBQU87QUFBQTtBQUFBLElBRVgsd0JBQXdCLENBQUMsV0FBVyxVQUFVO0FBQzFDLFVBQUk7QUFDSixVQUFJLEtBQUssWUFBWTtBQUNqQixxQkFBYSxLQUFLO0FBQUEsTUFDdEI7QUFFQSxVQUFJLFlBQVk7QUFDWixlQUFPO0FBQUEsTUFDWDtBQUNBLFlBQU0sV0FBVyxVQUFVLGFBQWE7QUFDeEMsbUJBQWEsSUFBSSxTQUFTLFdBQVcsT0FBTyxPQUFPLEVBQUUsS0FBSyxTQUFTLE1BQU0sYUFBYSxLQUFLLGFBQWEsSUFBSSxFQUFFLElBQUssU0FBUyxZQUFZLFNBQVMsYUFBYTtBQUFBLFFBQzFKLE9BQU8sU0FBUyxPQUFPLEtBQUssR0FBRyxTQUFTLFlBQVksU0FBUyxVQUFVLEVBQUUsU0FBUyxRQUFRO0FBQUEsTUFDOUYsQ0FBRSxDQUFDO0FBQ0gsV0FBSyx3QkFBd0I7QUFDN0IsVUFBSSxZQUFZLEtBQUssaUJBQWlCO0FBSWxDLG1CQUFXLFVBQVUsT0FBTyxPQUFPLFdBQVcsUUFBUSxjQUFjLENBQUMsR0FBRztBQUFBLFVBQ3BFLG9CQUFvQjtBQUFBLFFBQ3hCLENBQUM7QUFBQSxNQUNMO0FBQ0EsYUFBTztBQUFBO0FBQUEsSUFFWCwwQkFBMEIsQ0FBQyxhQUFhO0FBQ3BDLGFBQU8sVUFBVSxNQUFXLFdBQVEscUJBQWEsR0FBRztBQUNoRCxzQkFBYyxLQUFLLElBQUksMkJBQTJCLFdBQVc7QUFDN0QsY0FBTSxLQUFLLDhCQUE4QixLQUFLLElBQUksR0FBRyxXQUFXO0FBQ2hFLGVBQU8sSUFBSSxRQUFRLGFBQVcsV0FBVyxNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUM7QUFBQSxPQUNoRTtBQUFBO0FBQUEsSUFFTCxnQkFBZ0IsQ0FBQyxLQUFLLFNBQVM7QUFDM0IsYUFBTyxVQUFVLE1BQVcsV0FBUSxxQkFBYSxHQUFHO0FBQ2hELGVBQU8sSUFBSSxRQUFRLENBQUMsU0FBUyxXQUFXLFVBQVUsTUFBVyxXQUFRLHFCQUFhLEdBQUc7QUFDakYsZ0JBQU0sYUFBYSxJQUFJLFFBQVEsY0FBYztBQUM3QyxnQkFBTSxXQUFXO0FBQUEsWUFDYjtBQUFBLFlBQ0EsUUFBUTtBQUFBLFlBQ1IsU0FBUyxDQUFDO0FBQUEsVUFDZDtBQUVBLGNBQUksZUFBZSxVQUFVLFVBQVU7QUFDbkMsb0JBQVEsUUFBUTtBQUFBLFVBQ3BCO0FBRUEsbUJBQVMsb0JBQW9CLENBQUMsS0FBSyxPQUFPO0FBQ3RDLHVCQUFXLFVBQVUsVUFBVTtBQUMzQixvQkFBTSxJQUFJLElBQUksS0FBSyxLQUFLO0FBQ3hCLG1CQUFLLE1BQU0sRUFBRSxRQUFRLENBQUMsR0FBRztBQUNyQix1QkFBTztBQUFBLGNBQ1g7QUFBQSxZQUNKO0FBQ0EsbUJBQU87QUFBQTtBQUVYLGNBQUk7QUFDSixjQUFJO0FBQ0osY0FBSTtBQUNBLHVCQUFXLE1BQU0sSUFBSSxTQUFTO0FBQzlCLGdCQUFJLFlBQVksU0FBUyxTQUFTLEdBQUc7QUFDakMsa0JBQUksV0FBVyxRQUFRLGtCQUFrQjtBQUNyQyxzQkFBTSxLQUFLLE1BQU0sVUFBVSxvQkFBb0I7QUFBQSxjQUNuRCxPQUNLO0FBQ0Qsc0JBQU0sS0FBSyxNQUFNLFFBQVE7QUFBQTtBQUU3Qix1QkFBUyxTQUFTO0FBQUEsWUFDdEI7QUFDQSxxQkFBUyxVQUFVLElBQUksUUFBUTtBQUFBLG1CQUU1QixLQUFQO0FBQUE7QUFJQSxjQUFJLGFBQWEsS0FBSztBQUNsQixnQkFBSTtBQUVKLGdCQUFJLE9BQU8sSUFBSSxTQUFTO0FBQ3BCLG9CQUFNLElBQUk7QUFBQSxZQUNkLFdBQ1MsWUFBWSxTQUFTLFNBQVMsR0FBRztBQUV0QyxvQkFBTTtBQUFBLFlBQ1YsT0FDSztBQUNELG9CQUFNLG9CQUFvQjtBQUFBO0FBRTlCLGtCQUFNLE1BQU0sSUFBSSxnQkFBZ0IsS0FBSyxVQUFVO0FBQy9DLGdCQUFJLFNBQVMsU0FBUztBQUN0QixtQkFBTyxHQUFHO0FBQUEsVUFDZCxPQUNLO0FBQ0Qsb0JBQVEsUUFBUTtBQUFBO0FBQUEsU0FFdkIsQ0FBQztBQUFBLE9BQ0w7QUFBQTtBQUFBLEVBRVQ7QUFDQSxVQUFRLGFBQWE7QUFDckIsTUFBTSxnQkFBZ0IsQ0FBQyxRQUFRLE9BQU8sS0FBSyxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsT0FBUSxFQUFFLEVBQUUsWUFBWSxLQUFLLElBQUksSUFBSyxJQUFJLENBQUMsQ0FBQztBQUFBOzs7O0FDem9CdkcsTUFBSSxZQUFhLFdBQVEsUUFBSyxxQkFBdUIsQ0FBQyxTQUFTLFlBQVksR0FBRyxXQUFXO0FBQ3JGLGFBQVMsS0FBSyxDQUFDLE9BQU87QUFBRSxhQUFPLGlCQUFpQixJQUFJLFFBQVEsSUFBSSxVQUFXLENBQUMsU0FBUztBQUFFLGdCQUFRLEtBQUs7QUFBQSxPQUFJO0FBQUE7QUFDeEcsV0FBTyxLQUFLLE1BQU0sSUFBSSxrQkFBbUIsQ0FBQyxTQUFTLFFBQVE7QUFDdkQsZUFBUyxTQUFTLENBQUMsT0FBTztBQUFFLFlBQUk7QUFBRSxlQUFLLFVBQVUsS0FBSyxLQUFLLENBQUM7QUFBQSxpQkFBWSxHQUFQO0FBQVksaUJBQU8sQ0FBQztBQUFBO0FBQUE7QUFDckYsZUFBUyxRQUFRLENBQUMsT0FBTztBQUFFLFlBQUk7QUFBRSxlQUFLLFVBQVUsU0FBUyxLQUFLLENBQUM7QUFBQSxpQkFBWSxHQUFQO0FBQVksaUJBQU8sQ0FBQztBQUFBO0FBQUE7QUFDeEYsZUFBUyxJQUFJLENBQUMsUUFBUTtBQUFFLGVBQU8sT0FBTyxRQUFRLE9BQU8sS0FBSyxJQUFJLE1BQU0sT0FBTyxLQUFLLEVBQUUsS0FBSyxXQUFXLFFBQVE7QUFBQTtBQUMxRyxZQUFNLFlBQVksVUFBVSxNQUFNLFNBQVMsY0FBYyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7QUFBQSxLQUN2RTtBQUFBO0FBRUwsU0FBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQzVELFVBQVEsdUNBQXVDLFFBQVEsMEJBQTBCLFFBQVEseUJBQThCO0FBQ3ZIO0FBQUEsUUFBTSx1QkFBdUI7QUFBQSxJQUN6QixXQUFXLENBQUMsVUFBVSxVQUFVO0FBQzVCLFdBQUssV0FBVztBQUNoQixXQUFLLFdBQVc7QUFBQTtBQUFBLElBRXBCLGNBQWMsQ0FBQyxTQUFTO0FBQ3BCLFdBQUssUUFBUSxTQUFTO0FBQ2xCLGNBQU0sTUFBTSw0QkFBNEI7QUFBQSxNQUM1QztBQUNBLGNBQVEsUUFBUSxtQkFBbUIsU0FBUyxPQUFPLEtBQUssR0FBRyxLQUFLLFlBQVksS0FBSyxVQUFVLEVBQUUsU0FBUyxRQUFRO0FBQUE7QUFBQSxJQUdsSCx1QkFBdUIsR0FBRztBQUN0QixhQUFPO0FBQUE7QUFBQSxJQUVYLG9CQUFvQixHQUFHO0FBQ25CLGFBQU8sVUFBVSxNQUFXLFdBQVEscUJBQWEsR0FBRztBQUNoRCxjQUFNLElBQUksTUFBTSxpQkFBaUI7QUFBQSxPQUNwQztBQUFBO0FBQUEsRUFFVDtBQUNBLFVBQVEseUJBQXlCO0FBQ2pDO0FBQUEsUUFBTSx3QkFBd0I7QUFBQSxJQUMxQixXQUFXLENBQUMsT0FBTztBQUNmLFdBQUssUUFBUTtBQUFBO0FBQUEsSUFJakIsY0FBYyxDQUFDLFNBQVM7QUFDcEIsV0FBSyxRQUFRLFNBQVM7QUFDbEIsY0FBTSxNQUFNLDRCQUE0QjtBQUFBLE1BQzVDO0FBQ0EsY0FBUSxRQUFRLG1CQUFtQixVQUFVLEtBQUs7QUFBQTtBQUFBLElBR3RELHVCQUF1QixHQUFHO0FBQ3RCLGFBQU87QUFBQTtBQUFBLElBRVgsb0JBQW9CLEdBQUc7QUFDbkIsYUFBTyxVQUFVLE1BQVcsV0FBUSxxQkFBYSxHQUFHO0FBQ2hELGNBQU0sSUFBSSxNQUFNLGlCQUFpQjtBQUFBLE9BQ3BDO0FBQUE7QUFBQSxFQUVUO0FBQ0EsVUFBUSwwQkFBMEI7QUFDbEM7QUFBQSxRQUFNLHFDQUFxQztBQUFBLElBQ3ZDLFdBQVcsQ0FBQyxPQUFPO0FBQ2YsV0FBSyxRQUFRO0FBQUE7QUFBQSxJQUlqQixjQUFjLENBQUMsU0FBUztBQUNwQixXQUFLLFFBQVEsU0FBUztBQUNsQixjQUFNLE1BQU0sNEJBQTRCO0FBQUEsTUFDNUM7QUFDQSxjQUFRLFFBQVEsbUJBQW1CLFNBQVMsT0FBTyxLQUFLLE9BQU8sS0FBSyxPQUFPLEVBQUUsU0FBUyxRQUFRO0FBQUE7QUFBQSxJQUdsRyx1QkFBdUIsR0FBRztBQUN0QixhQUFPO0FBQUE7QUFBQSxJQUVYLG9CQUFvQixHQUFHO0FBQ25CLGFBQU8sVUFBVSxNQUFXLFdBQVEscUJBQWEsR0FBRztBQUNoRCxjQUFNLElBQUksTUFBTSxpQkFBaUI7QUFBQSxPQUNwQztBQUFBO0FBQUEsRUFFVDtBQUNBLFVBQVEsdUNBQXVDO0FBQUE7Ozs7QUM5RS9DLE1BQUksWUFBYSxXQUFRLFFBQUsscUJBQXVCLENBQUMsU0FBUyxZQUFZLEdBQUcsV0FBVztBQUNyRixhQUFTLEtBQUssQ0FBQyxPQUFPO0FBQUUsYUFBTyxpQkFBaUIsSUFBSSxRQUFRLElBQUksVUFBVyxDQUFDLFNBQVM7QUFBRSxnQkFBUSxLQUFLO0FBQUEsT0FBSTtBQUFBO0FBQ3hHLFdBQU8sS0FBSyxNQUFNLElBQUksa0JBQW1CLENBQUMsU0FBUyxRQUFRO0FBQ3ZELGVBQVMsU0FBUyxDQUFDLE9BQU87QUFBRSxZQUFJO0FBQUUsZUFBSyxVQUFVLEtBQUssS0FBSyxDQUFDO0FBQUEsaUJBQVksR0FBUDtBQUFZLGlCQUFPLENBQUM7QUFBQTtBQUFBO0FBQ3JGLGVBQVMsUUFBUSxDQUFDLE9BQU87QUFBRSxZQUFJO0FBQUUsZUFBSyxVQUFVLFNBQVMsS0FBSyxDQUFDO0FBQUEsaUJBQVksR0FBUDtBQUFZLGlCQUFPLENBQUM7QUFBQTtBQUFBO0FBQ3hGLGVBQVMsSUFBSSxDQUFDLFFBQVE7QUFBRSxlQUFPLE9BQU8sUUFBUSxPQUFPLEtBQUssSUFBSSxNQUFNLE9BQU8sS0FBSyxFQUFFLEtBQUssV0FBVyxRQUFRO0FBQUE7QUFDMUcsWUFBTSxZQUFZLFVBQVUsTUFBTSxTQUFTLGNBQWMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQUEsS0FDdkU7QUFBQTtBQUVMLFNBQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUM1RCxVQUFRLGFBQWtCO0FBQzFCLE1BQU07QUFDTixNQUFNO0FBQ04sTUFBTTtBQUNOO0FBQUEsUUFBTSxXQUFXO0FBQUEsV0FDTixnQkFBZ0IsQ0FBQyxhQUFhLE1BQU0sV0FBVyxJQUFJO0FBQ3RELFlBQU0saUJBQWlCO0FBQUEsUUFDbkIsY0FBYztBQUFBLFFBQ2QsWUFBWTtBQUFBLE1BQ2hCO0FBQ0EsYUFBTyxJQUFJLGNBQWMsV0FBVyx1QkFBdUIsQ0FBQyxJQUFJLE9BQU8sd0JBQXdCLFdBQVcsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHLGNBQWM7QUFBQTtBQUFBLFdBRTFJLGVBQWUsR0FBRztBQUNyQixZQUFNLFFBQVEsUUFBUSxJQUFJO0FBQzFCLFdBQUssT0FBTztBQUNSLGNBQU0sSUFBSSxNQUFNLDJEQUEyRDtBQUFBLE1BQy9FO0FBQ0EsYUFBTztBQUFBO0FBQUEsV0FFSixhQUFhLEdBQUc7QUFDbkIsWUFBTSxhQUFhLFFBQVEsSUFBSTtBQUMvQixXQUFLLFlBQVk7QUFDYixjQUFNLElBQUksTUFBTSx5REFBeUQ7QUFBQSxNQUM3RTtBQUNBLGFBQU87QUFBQTtBQUFBLFdBRUosT0FBTyxDQUFDLGNBQWM7QUFDekIsVUFBSTtBQUNKLGFBQU8sVUFBVSxNQUFXLFdBQVEscUJBQWEsR0FBRztBQUNoRCxjQUFNLGFBQWEsV0FBVyxpQkFBaUI7QUFDL0MsY0FBTSxNQUFNLE1BQU0sV0FDYixRQUFRLFlBQVksRUFDcEIsTUFBTSxXQUFTO0FBQ2hCLGdCQUFNLElBQUksTUFBTTtBQUFBLHVCQUNULE1BQU07QUFBQSx5QkFDSixNQUFNLFNBQVM7QUFBQSxTQUMzQjtBQUNELGNBQU0sWUFBWSxLQUFLLElBQUksWUFBWSxRQUFRLE9BQVksWUFBUyxZQUFJLEdBQUc7QUFDM0UsYUFBSyxVQUFVO0FBQ1gsZ0JBQU0sSUFBSSxNQUFNLCtDQUErQztBQUFBLFFBQ25FO0FBQ0EsZUFBTztBQUFBLE9BQ1Y7QUFBQTtBQUFBLFdBRUUsVUFBVSxDQUFDLFVBQVU7QUFDeEIsYUFBTyxVQUFVLE1BQVcsV0FBUSxxQkFBYSxHQUFHO0FBQ2hELFlBQUk7QUFFQSxjQUFJLGVBQWUsV0FBVyxjQUFjO0FBQzVDLGNBQUksVUFBVTtBQUNWLGtCQUFNLGtCQUFrQixtQkFBbUIsUUFBUTtBQUNuRCwyQkFBZSxHQUFHLHlCQUF5QjtBQUFBLFVBQy9DO0FBQ0EsV0FBQyxHQUFHLE9BQU8sT0FBTyxtQkFBbUIsY0FBYztBQUNuRCxnQkFBTSxXQUFXLE1BQU0sV0FBVyxRQUFRLFlBQVk7QUFDdEQsV0FBQyxHQUFHLE9BQU8sV0FBVyxRQUFRO0FBQzlCLGlCQUFPO0FBQUEsaUJBRUosT0FBUDtBQUNJLGdCQUFNLElBQUksTUFBTSxrQkFBa0IsTUFBTSxTQUFTO0FBQUE7QUFBQSxPQUV4RDtBQUFBO0FBQUEsRUFFVDtBQUNBLFVBQVEsYUFBYTtBQUFBOzs7O0FDMUVyQixNQUFJLFlBQWEsV0FBUSxRQUFLLHFCQUF1QixDQUFDLFNBQVMsWUFBWSxHQUFHLFdBQVc7QUFDckYsYUFBUyxLQUFLLENBQUMsT0FBTztBQUFFLGFBQU8saUJBQWlCLElBQUksUUFBUSxJQUFJLFVBQVcsQ0FBQyxTQUFTO0FBQUUsZ0JBQVEsS0FBSztBQUFBLE9BQUk7QUFBQTtBQUN4RyxXQUFPLEtBQUssTUFBTSxJQUFJLGtCQUFtQixDQUFDLFNBQVMsUUFBUTtBQUN2RCxlQUFTLFNBQVMsQ0FBQyxPQUFPO0FBQUUsWUFBSTtBQUFFLGVBQUssVUFBVSxLQUFLLEtBQUssQ0FBQztBQUFBLGlCQUFZLEdBQVA7QUFBWSxpQkFBTyxDQUFDO0FBQUE7QUFBQTtBQUNyRixlQUFTLFFBQVEsQ0FBQyxPQUFPO0FBQUUsWUFBSTtBQUFFLGVBQUssVUFBVSxTQUFTLEtBQUssQ0FBQztBQUFBLGlCQUFZLEdBQVA7QUFBWSxpQkFBTyxDQUFDO0FBQUE7QUFBQTtBQUN4RixlQUFTLElBQUksQ0FBQyxRQUFRO0FBQUUsZUFBTyxPQUFPLFFBQVEsT0FBTyxLQUFLLElBQUksTUFBTSxPQUFPLEtBQUssRUFBRSxLQUFLLFdBQVcsUUFBUTtBQUFBO0FBQzFHLFlBQU0sWUFBWSxVQUFVLE1BQU0sU0FBUyxjQUFjLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUFBLEtBQ3ZFO0FBQUE7QUFFTCxTQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDNUQsVUFBUSxVQUFVLFFBQVEsa0JBQWtCLFFBQVEsbUJBQW1CLFFBQVEsa0JBQXVCO0FBQ3RHLE1BQU07QUFDTixNQUFNO0FBQ04sUUFBUSxRQUFRLFlBQVksY0FBYyxLQUFLO0FBQy9DLFVBQVEsa0JBQWtCO0FBQzFCLFVBQVEsbUJBQW1CO0FBQzNCO0FBQUEsUUFBTSxRQUFRO0FBQUEsSUFDVixXQUFXLEdBQUc7QUFDVixXQUFLLFVBQVU7QUFBQTtBQUFBLElBUW5CLFFBQVEsR0FBRztBQUNQLGFBQU8sVUFBVSxNQUFXLFdBQVEscUJBQWEsR0FBRztBQUNoRCxZQUFJLEtBQUssV0FBVztBQUNoQixpQkFBTyxLQUFLO0FBQUEsUUFDaEI7QUFDQSxjQUFNLGNBQWMsUUFBUSxJQUFJLFFBQVE7QUFDeEMsYUFBSyxhQUFhO0FBQ2QsZ0JBQU0sSUFBSSxNQUFNLDZDQUE0QyxRQUFRLDRFQUE0RTtBQUFBLFFBQ3BKO0FBQ0EsWUFBSTtBQUNBLGdCQUFNLE9BQU8sYUFBYSxLQUFLLFVBQVUsT0FBTyxLQUFLLFVBQVUsSUFBSTtBQUFBLGlCQUVoRSxJQUFQO0FBQ0ksZ0JBQU0sSUFBSSxNQUFNLG1DQUFtQyxxRUFBcUU7QUFBQTtBQUU1SCxhQUFLLFlBQVk7QUFDakIsZUFBTyxLQUFLO0FBQUEsT0FDZjtBQUFBO0FBQUEsSUFXTCxJQUFJLENBQUMsS0FBSyxTQUFTLFFBQVEsQ0FBQyxHQUFHO0FBQzNCLFlBQU0sWUFBWSxPQUFPLFFBQVEsS0FBSyxFQUNqQyxJQUFJLEVBQUUsS0FBSyxXQUFXLElBQUksUUFBUSxRQUFRLEVBQzFDLEtBQUssRUFBRTtBQUNaLFdBQUssU0FBUztBQUNWLGVBQU8sSUFBSSxNQUFNO0FBQUEsTUFDckI7QUFDQSxhQUFPLElBQUksTUFBTSxhQUFhLFlBQVk7QUFBQTtBQUFBLElBUzlDLEtBQUssQ0FBQyxTQUFTO0FBQ1gsYUFBTyxVQUFVLE1BQVcsV0FBUSxxQkFBYSxHQUFHO0FBQ2hELGNBQU0sZUFBZSxZQUFZLFFBQVEsWUFBaUIsWUFBUyxZQUFJLFFBQVE7QUFDL0UsY0FBTSxXQUFXLE1BQU0sS0FBSyxTQUFTO0FBQ3JDLGNBQU0sWUFBWSxZQUFZLFlBQVk7QUFDMUMsY0FBTSxVQUFVLFVBQVUsS0FBSyxTQUFTLEVBQUUsVUFBVSxPQUFPLENBQUM7QUFDNUQsZUFBTyxLQUFLLFlBQVk7QUFBQSxPQUMzQjtBQUFBO0FBQUEsSUFPTCxLQUFLLEdBQUc7QUFDSixhQUFPLFVBQVUsTUFBVyxXQUFRLHFCQUFhLEdBQUc7QUFDaEQsZUFBTyxLQUFLLFlBQVksRUFBRSxNQUFNLEVBQUUsV0FBVyxLQUFLLENBQUM7QUFBQSxPQUN0RDtBQUFBO0FBQUEsSUFPTCxTQUFTLEdBQUc7QUFDUixhQUFPLEtBQUs7QUFBQTtBQUFBLElBT2hCLGFBQWEsR0FBRztBQUNaLGFBQU8sS0FBSyxRQUFRLFdBQVc7QUFBQTtBQUFBLElBT25DLFdBQVcsR0FBRztBQUNWLFdBQUssVUFBVTtBQUNmLGFBQU87QUFBQTtBQUFBLElBVVgsTUFBTSxDQUFDLE1BQU0sU0FBUyxPQUFPO0FBQ3pCLFdBQUssV0FBVztBQUNoQixhQUFPLFNBQVMsS0FBSyxPQUFPLElBQUk7QUFBQTtBQUFBLElBT3BDLE1BQU0sR0FBRztBQUNMLGFBQU8sS0FBSyxPQUFPLEtBQUssR0FBRztBQUFBO0FBQUEsSUFVL0IsWUFBWSxDQUFDLE1BQU0sTUFBTTtBQUNyQixZQUFNLFFBQVEsT0FBTyxPQUFPLENBQUMsR0FBSSxRQUFRLEVBQUUsS0FBSyxDQUFFO0FBQ2xELFlBQU0sVUFBVSxLQUFLLEtBQUssT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEdBQUcsS0FBSztBQUMvRCxhQUFPLEtBQUssT0FBTyxPQUFPLEVBQUUsT0FBTztBQUFBO0FBQUEsSUFVdkMsT0FBTyxDQUFDLE9BQU8sVUFBVSxPQUFPO0FBQzVCLFlBQU0sTUFBTSxVQUFVLE9BQU87QUFDN0IsWUFBTSxZQUFZLE1BQU0sSUFBSSxVQUFRLEtBQUssS0FBSyxNQUFNLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRTtBQUNsRSxZQUFNLFVBQVUsS0FBSyxLQUFLLEtBQUssU0FBUztBQUN4QyxhQUFPLEtBQUssT0FBTyxPQUFPLEVBQUUsT0FBTztBQUFBO0FBQUEsSUFTdkMsUUFBUSxDQUFDLE1BQU07QUFDWCxZQUFNLFlBQVksS0FDYixJQUFJLFNBQU87QUFDWixjQUFNLFFBQVEsSUFDVCxJQUFJLFVBQVE7QUFDYixxQkFBVyxTQUFTLFVBQVU7QUFDMUIsbUJBQU8sS0FBSyxLQUFLLE1BQU0sSUFBSTtBQUFBLFVBQy9CO0FBQ0Esa0JBQVEsUUFBUSxNQUFNLFNBQVMsWUFBWTtBQUMzQyxnQkFBTSxNQUFNLFNBQVMsT0FBTztBQUM1QixnQkFBTSxRQUFRLE9BQU8sT0FBTyxPQUFPLE9BQU8sQ0FBQyxHQUFJLFdBQVcsRUFBRSxRQUFRLENBQUUsR0FBSSxXQUFXLEVBQUUsUUFBUSxDQUFFO0FBQ2pHLGlCQUFPLEtBQUssS0FBSyxLQUFLLE1BQU0sS0FBSztBQUFBLFNBQ3BDLEVBQ0ksS0FBSyxFQUFFO0FBQ1osZUFBTyxLQUFLLEtBQUssTUFBTSxLQUFLO0FBQUEsT0FDL0IsRUFDSSxLQUFLLEVBQUU7QUFDWixZQUFNLFVBQVUsS0FBSyxLQUFLLFNBQVMsU0FBUztBQUM1QyxhQUFPLEtBQUssT0FBTyxPQUFPLEVBQUUsT0FBTztBQUFBO0FBQUEsSUFVdkMsVUFBVSxDQUFDLE9BQU8sU0FBUztBQUN2QixZQUFNLFVBQVUsS0FBSyxLQUFLLFdBQVcsS0FBSyxLQUFLLFdBQVcsS0FBSyxJQUFJLE9BQU87QUFDMUUsYUFBTyxLQUFLLE9BQU8sT0FBTyxFQUFFLE9BQU87QUFBQTtBQUFBLElBV3ZDLFFBQVEsQ0FBQyxLQUFLLEtBQUssU0FBUztBQUN4QixjQUFRLE9BQU8sV0FBVyxXQUFXLENBQUM7QUFDdEMsWUFBTSxRQUFRLE9BQU8sT0FBTyxPQUFPLE9BQU8sQ0FBQyxHQUFJLFNBQVMsRUFBRSxNQUFNLENBQUUsR0FBSSxVQUFVLEVBQUUsT0FBTyxDQUFFO0FBQzNGLFlBQU0sVUFBVSxLQUFLLEtBQUssT0FBTyxNQUFNLE9BQU8sT0FBTyxFQUFFLEtBQUssSUFBSSxHQUFHLEtBQUssQ0FBQztBQUN6RSxhQUFPLEtBQUssT0FBTyxPQUFPLEVBQUUsT0FBTztBQUFBO0FBQUEsSUFVdkMsVUFBVSxDQUFDLE1BQU0sT0FBTztBQUNwQixZQUFNLE1BQU0sSUFBSTtBQUNoQixZQUFNLGFBQWEsQ0FBQyxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sSUFBSSxFQUFFLFNBQVMsR0FBRyxJQUM5RCxNQUNBO0FBQ04sWUFBTSxVQUFVLEtBQUssS0FBSyxZQUFZLElBQUk7QUFDMUMsYUFBTyxLQUFLLE9BQU8sT0FBTyxFQUFFLE9BQU87QUFBQTtBQUFBLElBT3ZDLFlBQVksR0FBRztBQUNYLFlBQU0sVUFBVSxLQUFLLEtBQUssTUFBTSxJQUFJO0FBQ3BDLGFBQU8sS0FBSyxPQUFPLE9BQU8sRUFBRSxPQUFPO0FBQUE7QUFBQSxJQU92QyxRQUFRLEdBQUc7QUFDUCxZQUFNLFVBQVUsS0FBSyxLQUFLLE1BQU0sSUFBSTtBQUNwQyxhQUFPLEtBQUssT0FBTyxPQUFPLEVBQUUsT0FBTztBQUFBO0FBQUEsSUFVdkMsUUFBUSxDQUFDLE1BQU0sTUFBTTtBQUNqQixZQUFNLFFBQVEsT0FBTyxPQUFPLENBQUMsR0FBSSxRQUFRLEVBQUUsS0FBSyxDQUFFO0FBQ2xELFlBQU0sVUFBVSxLQUFLLEtBQUssY0FBYyxNQUFNLEtBQUs7QUFDbkQsYUFBTyxLQUFLLE9BQU8sT0FBTyxFQUFFLE9BQU87QUFBQTtBQUFBLElBVXZDLE9BQU8sQ0FBQyxNQUFNLE1BQU07QUFDaEIsWUFBTSxVQUFVLEtBQUssS0FBSyxLQUFLLE1BQU0sRUFBRSxLQUFLLENBQUM7QUFDN0MsYUFBTyxLQUFLLE9BQU8sT0FBTyxFQUFFLE9BQU87QUFBQTtBQUFBLEVBRTNDO0FBQ0EsTUFBTSxXQUFXLElBQUk7QUFJckIsVUFBUSxrQkFBa0I7QUFDMUIsVUFBUSxVQUFVO0FBQUE7Ozs7QUN4UmxCLE1BQUksa0JBQW1CLFdBQVEsUUFBSyxvQkFBcUIsT0FBTyxpQkFBa0IsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJO0FBQzVGLFFBQUksT0FBTztBQUFXLFdBQUs7QUFDM0IsUUFBSSxPQUFPLE9BQU8seUJBQXlCLEdBQUcsQ0FBQztBQUMvQyxTQUFLLFNBQVMsU0FBUyxRQUFRLEVBQUUsYUFBYSxLQUFLLFlBQVksS0FBSyxlQUFlO0FBQ2pGLGFBQU8sRUFBRSxZQUFZLE1BQU0sYUFBYSxHQUFHO0FBQUUsZUFBTyxFQUFFO0FBQUEsUUFBTTtBQUFBLElBQzlEO0FBQ0EsV0FBTyxlQUFlLEdBQUcsSUFBSSxJQUFJO0FBQUEsY0FDdkIsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJO0FBQ3hCLFFBQUksT0FBTztBQUFXLFdBQUs7QUFDM0IsTUFBRSxNQUFNLEVBQUU7QUFBQTtBQUVkLE1BQUkscUJBQXNCLFdBQVEsUUFBSyx1QkFBd0IsT0FBTyxpQkFBa0IsQ0FBQyxHQUFHLEdBQUc7QUFDM0YsV0FBTyxlQUFlLEdBQUcsV0FBVyxFQUFFLFlBQVksTUFBTSxPQUFPLEVBQUUsQ0FBQztBQUFBLGNBQ3pELENBQUMsR0FBRyxHQUFHO0FBQ2hCLE1BQUUsYUFBYTtBQUFBO0FBRW5CLE1BQUksZUFBZ0IsV0FBUSxRQUFLLHdCQUEwQixDQUFDLEtBQUs7QUFDN0QsUUFBSSxPQUFPLElBQUk7QUFBWSxhQUFPO0FBQ2xDLFFBQUksU0FBUyxDQUFDO0FBQ2QsUUFBSSxPQUFPO0FBQU0sZUFBUyxLQUFLO0FBQUssWUFBSSxNQUFNLGFBQWEsT0FBTyxVQUFVLGVBQWUsS0FBSyxLQUFLLENBQUM7QUFBRywwQkFBZ0IsUUFBUSxLQUFLLENBQUM7QUFBQTtBQUN2SSx1QkFBbUIsUUFBUSxHQUFHO0FBQzlCLFdBQU87QUFBQTtBQUVYLFNBQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUM1RCxVQUFRLGlCQUFpQixRQUFRLGNBQWMsUUFBUSxjQUFtQjtBQUMxRSxNQUFNLE9BQU8sOEJBQTRCO0FBUXpDLFdBQVMsV0FBVyxDQUFDLEtBQUs7QUFDdEIsV0FBTyxJQUFJLFFBQVEsU0FBUyxHQUFHO0FBQUE7QUFFbkMsVUFBUSxjQUFjO0FBUXRCLFdBQVMsV0FBVyxDQUFDLEtBQUs7QUFDdEIsV0FBTyxJQUFJLFFBQVEsUUFBUSxJQUFJO0FBQUE7QUFFbkMsVUFBUSxjQUFjO0FBU3RCLFdBQVMsY0FBYyxDQUFDLEtBQUs7QUFDekIsV0FBTyxJQUFJLFFBQVEsVUFBVSxLQUFLLEdBQUc7QUFBQTtBQUV6QyxVQUFRLGlCQUFpQjtBQUFBOzs7O0FDM0R6QixNQUFJLGtCQUFtQixXQUFRLFFBQUssb0JBQXFCLE9BQU8saUJBQWtCLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSTtBQUM1RixRQUFJLE9BQU87QUFBVyxXQUFLO0FBQzNCLFdBQU8sZUFBZSxHQUFHLElBQUksRUFBRSxZQUFZLE1BQU0sYUFBYSxHQUFHO0FBQUUsYUFBTyxFQUFFO0FBQUEsTUFBTSxDQUFDO0FBQUEsY0FDekUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJO0FBQ3hCLFFBQUksT0FBTztBQUFXLFdBQUs7QUFDM0IsTUFBRSxNQUFNLEVBQUU7QUFBQTtBQUVkLE1BQUkscUJBQXNCLFdBQVEsUUFBSyx1QkFBd0IsT0FBTyxpQkFBa0IsQ0FBQyxHQUFHLEdBQUc7QUFDM0YsV0FBTyxlQUFlLEdBQUcsV0FBVyxFQUFFLFlBQVksTUFBTSxPQUFPLEVBQUUsQ0FBQztBQUFBLGNBQ3pELENBQUMsR0FBRyxHQUFHO0FBQ2hCLE1BQUUsYUFBYTtBQUFBO0FBRW5CLE1BQUksZUFBZ0IsV0FBUSxRQUFLLHdCQUEwQixDQUFDLEtBQUs7QUFDN0QsUUFBSSxPQUFPLElBQUk7QUFBWSxhQUFPO0FBQ2xDLFFBQUksU0FBUyxDQUFDO0FBQ2QsUUFBSSxPQUFPO0FBQU0sZUFBUyxLQUFLO0FBQUssWUFBSSxNQUFNLGFBQWEsT0FBTyxlQUFlLEtBQUssS0FBSyxDQUFDO0FBQUcsMEJBQWdCLFFBQVEsS0FBSyxDQUFDO0FBQUE7QUFDN0gsdUJBQW1CLFFBQVEsR0FBRztBQUM5QixXQUFPO0FBQUE7QUFFWCxNQUFJLFlBQWEsV0FBUSxRQUFLLHFCQUF1QixDQUFDLFNBQVMsWUFBWSxHQUFHLFdBQVc7QUFDckYsYUFBUyxLQUFLLENBQUMsT0FBTztBQUFFLGFBQU8saUJBQWlCLElBQUksUUFBUSxJQUFJLFVBQVcsQ0FBQyxTQUFTO0FBQUUsZ0JBQVEsS0FBSztBQUFBLE9BQUk7QUFBQTtBQUN4RyxXQUFPLEtBQUssTUFBTSxJQUFJLGtCQUFtQixDQUFDLFNBQVMsUUFBUTtBQUN2RCxlQUFTLFNBQVMsQ0FBQyxPQUFPO0FBQUUsWUFBSTtBQUFFLGVBQUssVUFBVSxLQUFLLEtBQUssQ0FBQztBQUFBLGlCQUFZLEdBQVA7QUFBWSxpQkFBTyxDQUFDO0FBQUE7QUFBQTtBQUNyRixlQUFTLFFBQVEsQ0FBQyxPQUFPO0FBQUUsWUFBSTtBQUFFLGVBQUssVUFBVSxTQUFTLEtBQUssQ0FBQztBQUFBLGlCQUFZLEdBQVA7QUFBWSxpQkFBTyxDQUFDO0FBQUE7QUFBQTtBQUN4RixlQUFTLElBQUksQ0FBQyxRQUFRO0FBQUUsZUFBTyxPQUFPLFFBQVEsT0FBTyxLQUFLLElBQUksTUFBTSxPQUFPLEtBQUssRUFBRSxLQUFLLFdBQVcsUUFBUTtBQUFBO0FBQzFHLFlBQU0sWUFBWSxVQUFVLE1BQU0sU0FBUyxjQUFjLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUFBLEtBQ3ZFO0FBQUE7QUFFTCxNQUFJO0FBQ0osU0FBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQzVELFVBQVEsYUFBYSxRQUFRLHVCQUF1QixRQUFRLFdBQVcsUUFBUSxjQUFjLFFBQVEsU0FBUyxRQUFRLFdBQVcsUUFBUSxpQkFBaUIsUUFBUSxhQUFhLFFBQVEsU0FBUyxRQUFRLFVBQVUsUUFBUSxPQUFPLFFBQVEsUUFBUSxRQUFRLEtBQUssUUFBUSxTQUFTLFFBQVEsV0FBVyxRQUFRLFVBQVUsUUFBUSxPQUFPLFFBQVEsUUFBUSxRQUFRLFFBQVEsUUFBUSxXQUFXLFFBQVEsUUFBYTtBQUMzWSxNQUFNLEtBQUssNEJBQTBCO0FBQ3JDLE1BQU0sT0FBTyw4QkFBNEI7QUFDekMsT0FBSyxHQUFHLFVBRU4sUUFBUSxRQUFRLEdBQUcsT0FBTyxRQUFRLFdBQVcsR0FBRyxVQUFVLFFBQVEsUUFBUSxHQUFHLE9BQU8sUUFBUSxRQUFRLEdBQUcsT0FBTyxRQUFRLE9BQU8sR0FBRyxNQUFNLFFBQVEsVUFBVSxHQUFHLFNBQVMsUUFBUSxXQUFXLEdBQUcsVUFBVSxRQUFRLFNBQVMsR0FBRyxRQUFRLFFBQVEsS0FBSyxHQUFHLElBQUksUUFBUSxRQUFRLEdBQUcsT0FBTyxRQUFRLE9BQU8sR0FBRyxNQUFNLFFBQVEsVUFBVSxHQUFHLFNBQVMsUUFBUSxTQUFTLEdBQUc7QUFFMVYsVUFBUSxhQUFhLFFBQVEsYUFBYTtBQUUxQyxVQUFRLGlCQUFpQjtBQUN6QixVQUFRLFdBQVcsR0FBRyxVQUFVO0FBQ2hDLFdBQVMsTUFBTSxDQUFDLFFBQVE7QUFDcEIsV0FBTyxVQUFVLE1BQVcsV0FBUSxxQkFBYSxHQUFHO0FBQ2hELFVBQUk7QUFDQSxjQUFNLFFBQVEsS0FBSyxNQUFNO0FBQUEsZUFFdEIsS0FBUDtBQUNJLFlBQUksSUFBSSxTQUFTLFVBQVU7QUFDdkIsaUJBQU87QUFBQSxRQUNYO0FBQ0EsY0FBTTtBQUFBO0FBRVYsYUFBTztBQUFBLEtBQ1Y7QUFBQTtBQUVMLFVBQVEsU0FBUztBQUNqQixXQUFTLFdBQVcsQ0FBQyxRQUFRLFVBQVUsT0FBTztBQUMxQyxXQUFPLFVBQVUsTUFBVyxXQUFRLHFCQUFhLEdBQUc7QUFDaEQsWUFBTSxRQUFRLFVBQVUsTUFBTSxRQUFRLEtBQUssTUFBTSxJQUFJLE1BQU0sUUFBUSxNQUFNLE1BQU07QUFDL0UsYUFBTyxNQUFNLFlBQVk7QUFBQSxLQUM1QjtBQUFBO0FBRUwsVUFBUSxjQUFjO0FBS3RCLFdBQVMsUUFBUSxDQUFDLEdBQUc7QUFDakIsUUFBSSxvQkFBb0IsQ0FBQztBQUN6QixTQUFLLEdBQUc7QUFDSixZQUFNLElBQUksTUFBTSwwQ0FBMEM7QUFBQSxJQUM5RDtBQUNBLFFBQUksUUFBUSxZQUFZO0FBQ3BCLGFBQVEsRUFBRSxXQUFXLElBQUksS0FBSyxXQUFXLEtBQUssQ0FBQztBQUFBLElBRW5EO0FBQ0EsV0FBTyxFQUFFLFdBQVcsR0FBRztBQUFBO0FBRTNCLFVBQVEsV0FBVztBQU9uQixXQUFTLG9CQUFvQixDQUFDLFVBQVUsWUFBWTtBQUNoRCxXQUFPLFVBQVUsTUFBVyxXQUFRLHFCQUFhLEdBQUc7QUFDaEQsVUFBSSxRQUFRO0FBQ1osVUFBSTtBQUVBLGdCQUFRLE1BQU0sUUFBUSxLQUFLLFFBQVE7QUFBQSxlQUVoQyxLQUFQO0FBQ0ksWUFBSSxJQUFJLFNBQVMsVUFBVTtBQUV2QixrQkFBUSxJQUFJLHVFQUF1RSxjQUFjLEtBQUs7QUFBQSxRQUMxRztBQUFBO0FBRUosVUFBSSxTQUFTLE1BQU0sT0FBTyxHQUFHO0FBQ3pCLFlBQUksUUFBUSxZQUFZO0FBRXBCLGdCQUFNLFdBQVcsS0FBSyxRQUFRLFFBQVEsRUFBRSxZQUFZO0FBQ3BELGNBQUksV0FBVyxLQUFLLGNBQVksU0FBUyxZQUFZLE1BQU0sUUFBUSxHQUFHO0FBQ2xFLG1CQUFPO0FBQUEsVUFDWDtBQUFBLFFBQ0osT0FDSztBQUNELGNBQUksaUJBQWlCLEtBQUssR0FBRztBQUN6QixtQkFBTztBQUFBLFVBQ1g7QUFBQTtBQUFBLE1BRVI7QUFFQSxZQUFNLG1CQUFtQjtBQUN6QixpQkFBVyxhQUFhLFlBQVk7QUFDaEMsbUJBQVcsbUJBQW1CO0FBQzlCLGdCQUFRO0FBQ1IsWUFBSTtBQUNBLGtCQUFRLE1BQU0sUUFBUSxLQUFLLFFBQVE7QUFBQSxpQkFFaEMsS0FBUDtBQUNJLGNBQUksSUFBSSxTQUFTLFVBQVU7QUFFdkIsb0JBQVEsSUFBSSx1RUFBdUUsY0FBYyxLQUFLO0FBQUEsVUFDMUc7QUFBQTtBQUVKLFlBQUksU0FBUyxNQUFNLE9BQU8sR0FBRztBQUN6QixjQUFJLFFBQVEsWUFBWTtBQUVwQixnQkFBSTtBQUNBLG9CQUFNLFlBQVksS0FBSyxRQUFRLFFBQVE7QUFDdkMsb0JBQU0sWUFBWSxLQUFLLFNBQVMsUUFBUSxFQUFFLFlBQVk7QUFDdEQseUJBQVcsY0FBYyxNQUFNLFFBQVEsUUFBUSxTQUFTLEdBQUc7QUFDdkQsb0JBQUksY0FBYyxXQUFXLFlBQVksR0FBRztBQUN4Qyw2QkFBVyxLQUFLLEtBQUssV0FBVyxVQUFVO0FBQzFDO0FBQUEsZ0JBQ0o7QUFBQSxjQUNKO0FBQUEscUJBRUcsS0FBUDtBQUVJLHNCQUFRLElBQUkseUVBQXlFLGNBQWMsS0FBSztBQUFBO0FBRTVHLG1CQUFPO0FBQUEsVUFDWCxPQUNLO0FBQ0QsZ0JBQUksaUJBQWlCLEtBQUssR0FBRztBQUN6QixxQkFBTztBQUFBLFlBQ1g7QUFBQTtBQUFBLFFBRVI7QUFBQSxNQUNKO0FBQ0EsYUFBTztBQUFBLEtBQ1Y7QUFBQTtBQUVMLFVBQVEsdUJBQXVCO0FBQy9CLFdBQVMsbUJBQW1CLENBQUMsR0FBRztBQUM1QixRQUFJLEtBQUs7QUFDVCxRQUFJLFFBQVEsWUFBWTtBQUVwQixVQUFJLEVBQUUsUUFBUSxPQUFPLElBQUk7QUFFekIsYUFBTyxFQUFFLFFBQVEsVUFBVSxJQUFJO0FBQUEsSUFDbkM7QUFFQSxXQUFPLEVBQUUsUUFBUSxVQUFVLEdBQUc7QUFBQTtBQUtsQyxXQUFTLGdCQUFnQixDQUFDLE9BQU87QUFDN0IsWUFBUyxNQUFNLE9BQU8sS0FBSyxNQUNyQixNQUFNLE9BQU8sS0FBSyxLQUFLLE1BQU0sUUFBUSxRQUFRLE9BQU8sTUFDcEQsTUFBTSxPQUFPLE1BQU0sS0FBSyxNQUFNLFFBQVEsUUFBUSxPQUFPO0FBQUE7QUFHL0QsV0FBUyxVQUFVLEdBQUc7QUFDbEIsUUFBSTtBQUNKLFlBQVEsTUFBSyxRQUFRLElBQUksZ0JBQWdCLFFBQVEsUUFBWSxZQUFJLE1BQUs7QUFBQTtBQUUxRSxVQUFRLGFBQWE7QUFBQTs7OztBQ3BMckIsTUFBSSxrQkFBbUIsV0FBUSxRQUFLLG9CQUFxQixPQUFPLGlCQUFrQixDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUk7QUFDNUYsUUFBSSxPQUFPO0FBQVcsV0FBSztBQUMzQixXQUFPLGVBQWUsR0FBRyxJQUFJLEVBQUUsWUFBWSxNQUFNLGFBQWEsR0FBRztBQUFFLGFBQU8sRUFBRTtBQUFBLE1BQU0sQ0FBQztBQUFBLGNBQ3pFLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSTtBQUN4QixRQUFJLE9BQU87QUFBVyxXQUFLO0FBQzNCLE1BQUUsTUFBTSxFQUFFO0FBQUE7QUFFZCxNQUFJLHFCQUFzQixXQUFRLFFBQUssdUJBQXdCLE9BQU8saUJBQWtCLENBQUMsR0FBRyxHQUFHO0FBQzNGLFdBQU8sZUFBZSxHQUFHLFdBQVcsRUFBRSxZQUFZLE1BQU0sT0FBTyxFQUFFLENBQUM7QUFBQSxjQUN6RCxDQUFDLEdBQUcsR0FBRztBQUNoQixNQUFFLGFBQWE7QUFBQTtBQUVuQixNQUFJLGVBQWdCLFdBQVEsUUFBSyx3QkFBMEIsQ0FBQyxLQUFLO0FBQzdELFFBQUksT0FBTyxJQUFJO0FBQVksYUFBTztBQUNsQyxRQUFJLFNBQVMsQ0FBQztBQUNkLFFBQUksT0FBTztBQUFNLGVBQVMsS0FBSztBQUFLLFlBQUksTUFBTSxhQUFhLE9BQU8sZUFBZSxLQUFLLEtBQUssQ0FBQztBQUFHLDBCQUFnQixRQUFRLEtBQUssQ0FBQztBQUFBO0FBQzdILHVCQUFtQixRQUFRLEdBQUc7QUFDOUIsV0FBTztBQUFBO0FBRVgsTUFBSSxZQUFhLFdBQVEsUUFBSyxxQkFBdUIsQ0FBQyxTQUFTLFlBQVksR0FBRyxXQUFXO0FBQ3JGLGFBQVMsS0FBSyxDQUFDLE9BQU87QUFBRSxhQUFPLGlCQUFpQixJQUFJLFFBQVEsSUFBSSxVQUFXLENBQUMsU0FBUztBQUFFLGdCQUFRLEtBQUs7QUFBQSxPQUFJO0FBQUE7QUFDeEcsV0FBTyxLQUFLLE1BQU0sSUFBSSxrQkFBbUIsQ0FBQyxTQUFTLFFBQVE7QUFDdkQsZUFBUyxTQUFTLENBQUMsT0FBTztBQUFFLFlBQUk7QUFBRSxlQUFLLFVBQVUsS0FBSyxLQUFLLENBQUM7QUFBQSxpQkFBWSxHQUFQO0FBQVksaUJBQU8sQ0FBQztBQUFBO0FBQUE7QUFDckYsZUFBUyxRQUFRLENBQUMsT0FBTztBQUFFLFlBQUk7QUFBRSxlQUFLLFVBQVUsU0FBUyxLQUFLLENBQUM7QUFBQSxpQkFBWSxHQUFQO0FBQVksaUJBQU8sQ0FBQztBQUFBO0FBQUE7QUFDeEYsZUFBUyxJQUFJLENBQUMsUUFBUTtBQUFFLGVBQU8sT0FBTyxRQUFRLE9BQU8sS0FBSyxJQUFJLE1BQU0sT0FBTyxLQUFLLEVBQUUsS0FBSyxXQUFXLFFBQVE7QUFBQTtBQUMxRyxZQUFNLFlBQVksVUFBVSxNQUFNLFNBQVMsY0FBYyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7QUFBQSxLQUN2RTtBQUFBO0FBRUwsU0FBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQzVELFVBQVEsYUFBYSxRQUFRLFFBQVEsUUFBUSxTQUFTLFFBQVEsT0FBTyxRQUFRLEtBQUssUUFBUSxLQUFVO0FBQ3BHLE1BQU07QUFDTixNQUFNLE9BQU8sOEJBQTRCO0FBQ3pDLE1BQU0sU0FBUyw4QkFBaUM7QUFTaEQsV0FBUyxFQUFFLENBQUMsUUFBUSxNQUFNLFVBQVUsQ0FBQyxHQUFHO0FBQ3BDLFdBQU8sVUFBVSxNQUFXLFdBQVEscUJBQWEsR0FBRztBQUNoRCxjQUFRLE9BQU8sV0FBVyx3QkFBd0IsZ0JBQWdCLE9BQU87QUFDekUsWUFBTSxZQUFZLE1BQU0sT0FBTyxPQUFPLElBQUksS0FBSyxNQUFNLE9BQU8sS0FBSyxJQUFJLElBQUk7QUFFekUsVUFBSSxZQUFZLFNBQVMsT0FBTyxNQUFNLE9BQU87QUFDekM7QUFBQSxNQUNKO0FBRUEsWUFBTSxVQUFVLFlBQVksU0FBUyxZQUFZLEtBQUssc0JBQ2hELEtBQUssS0FBSyxNQUFNLEtBQUssU0FBUyxNQUFNLENBQUMsSUFDckM7QUFDTixZQUFNLE1BQU0sT0FBTyxPQUFPLE1BQU0sSUFBSTtBQUNoQyxjQUFNLElBQUksTUFBTSw4QkFBOEIsUUFBUTtBQUFBLE1BQzFEO0FBQ0EsWUFBTSxhQUFhLE1BQU0sT0FBTyxLQUFLLE1BQU07QUFDM0MsVUFBSSxXQUFXLFlBQVksR0FBRztBQUMxQixhQUFLLFdBQVc7QUFDWixnQkFBTSxJQUFJLE1BQU0sbUJBQW1CLGtFQUFrRTtBQUFBLFFBQ3pHLE9BQ0s7QUFDRCxnQkFBTSxlQUFlLFFBQVEsU0FBUyxHQUFHLEtBQUs7QUFBQTtBQUFBLE1BRXRELE9BQ0s7QUFDRCxZQUFJLEtBQUssU0FBUyxRQUFRLE9BQU8sTUFBTSxJQUFJO0FBRXZDLGdCQUFNLElBQUksTUFBTSxJQUFJLGlCQUFpQiwyQkFBMkI7QUFBQSxRQUNwRTtBQUNBLGNBQU0sU0FBUyxRQUFRLFNBQVMsS0FBSztBQUFBO0FBQUEsS0FFNUM7QUFBQTtBQUVMLFVBQVEsS0FBSztBQVFiLFdBQVMsRUFBRSxDQUFDLFFBQVEsTUFBTSxVQUFVLENBQUMsR0FBRztBQUNwQyxXQUFPLFVBQVUsTUFBVyxXQUFRLHFCQUFhLEdBQUc7QUFDaEQsVUFBSSxNQUFNLE9BQU8sT0FBTyxJQUFJLEdBQUc7QUFDM0IsWUFBSSxhQUFhO0FBQ2pCLFlBQUksTUFBTSxPQUFPLFlBQVksSUFBSSxHQUFHO0FBRWhDLGlCQUFPLEtBQUssS0FBSyxNQUFNLEtBQUssU0FBUyxNQUFNLENBQUM7QUFDNUMsdUJBQWEsTUFBTSxPQUFPLE9BQU8sSUFBSTtBQUFBLFFBQ3pDO0FBQ0EsWUFBSSxZQUFZO0FBQ1osY0FBSSxRQUFRLFNBQVMsUUFBUSxRQUFRLE9BQU87QUFDeEMsa0JBQU0sS0FBSyxJQUFJO0FBQUEsVUFDbkIsT0FDSztBQUNELGtCQUFNLElBQUksTUFBTSw0QkFBNEI7QUFBQTtBQUFBLFFBRXBEO0FBQUEsTUFDSjtBQUNBLFlBQU0sT0FBTyxLQUFLLFFBQVEsSUFBSSxDQUFDO0FBQy9CLFlBQU0sT0FBTyxPQUFPLFFBQVEsSUFBSTtBQUFBLEtBQ25DO0FBQUE7QUFFTCxVQUFRLEtBQUs7QUFNYixXQUFTLElBQUksQ0FBQyxXQUFXO0FBQ3JCLFdBQU8sVUFBVSxNQUFXLFdBQVEscUJBQWEsR0FBRztBQUNoRCxVQUFJLE9BQU8sWUFBWTtBQUduQixZQUFJLFVBQVUsS0FBSyxTQUFTLEdBQUc7QUFDM0IsZ0JBQU0sSUFBSSxNQUFNLGlFQUFpRTtBQUFBLFFBQ3JGO0FBQUEsTUFDSjtBQUNBLFVBQUk7QUFFQSxjQUFNLE9BQU8sR0FBRyxXQUFXO0FBQUEsVUFDdkIsT0FBTztBQUFBLFVBQ1AsWUFBWTtBQUFBLFVBQ1osV0FBVztBQUFBLFVBQ1gsWUFBWTtBQUFBLFFBQ2hCLENBQUM7QUFBQSxlQUVFLEtBQVA7QUFDSSxjQUFNLElBQUksTUFBTSxpQ0FBaUMsS0FBSztBQUFBO0FBQUEsS0FFN0Q7QUFBQTtBQUVMLFVBQVEsT0FBTztBQVFmLFdBQVMsTUFBTSxDQUFDLFFBQVE7QUFDcEIsV0FBTyxVQUFVLE1BQVcsV0FBUSxxQkFBYSxHQUFHO0FBQ2hELGVBQVMsR0FBRyxRQUFRLGtDQUFrQztBQUN0RCxZQUFNLE9BQU8sTUFBTSxRQUFRLEVBQUUsV0FBVyxLQUFLLENBQUM7QUFBQSxLQUNqRDtBQUFBO0FBRUwsVUFBUSxTQUFTO0FBU2pCLFdBQVMsS0FBSyxDQUFDLE1BQU0sT0FBTztBQUN4QixXQUFPLFVBQVUsTUFBVyxXQUFRLHFCQUFhLEdBQUc7QUFDaEQsV0FBSyxNQUFNO0FBQ1AsY0FBTSxJQUFJLE1BQU0sOEJBQThCO0FBQUEsTUFDbEQ7QUFFQSxVQUFJLE9BQU87QUFDUCxjQUFNLFNBQVMsTUFBTSxNQUFNLE1BQU0sS0FBSztBQUN0QyxhQUFLLFFBQVE7QUFDVCxjQUFJLE9BQU8sWUFBWTtBQUNuQixrQkFBTSxJQUFJLE1BQU0scUNBQXFDLDRNQUE0TTtBQUFBLFVBQ3JRLE9BQ0s7QUFDRCxrQkFBTSxJQUFJLE1BQU0scUNBQXFDLG9NQUFvTTtBQUFBO0FBQUEsUUFFalE7QUFDQSxlQUFPO0FBQUEsTUFDWDtBQUNBLFlBQU0sVUFBVSxNQUFNLFdBQVcsSUFBSTtBQUNyQyxVQUFJLFdBQVcsUUFBUSxTQUFTLEdBQUc7QUFDL0IsZUFBTyxRQUFRO0FBQUEsTUFDbkI7QUFDQSxhQUFPO0FBQUEsS0FDVjtBQUFBO0FBRUwsVUFBUSxRQUFRO0FBTWhCLFdBQVMsVUFBVSxDQUFDLE1BQU07QUFDdEIsV0FBTyxVQUFVLE1BQVcsV0FBUSxxQkFBYSxHQUFHO0FBQ2hELFdBQUssTUFBTTtBQUNQLGNBQU0sSUFBSSxNQUFNLDhCQUE4QjtBQUFBLE1BQ2xEO0FBRUEsWUFBTSxhQUFhLENBQUM7QUFDcEIsVUFBSSxPQUFPLGNBQWMsUUFBUSxJQUFJLFlBQVk7QUFDN0MsbUJBQVcsYUFBYSxRQUFRLElBQUksV0FBVyxNQUFNLEtBQUssU0FBUyxHQUFHO0FBQ2xFLGNBQUksV0FBVztBQUNYLHVCQUFXLEtBQUssU0FBUztBQUFBLFVBQzdCO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFFQSxVQUFJLE9BQU8sU0FBUyxJQUFJLEdBQUc7QUFDdkIsY0FBTSxXQUFXLE1BQU0sT0FBTyxxQkFBcUIsTUFBTSxVQUFVO0FBQ25FLFlBQUksVUFBVTtBQUNWLGlCQUFPLENBQUMsUUFBUTtBQUFBLFFBQ3BCO0FBQ0EsZUFBTyxDQUFDO0FBQUEsTUFDWjtBQUVBLFVBQUksS0FBSyxTQUFTLEtBQUssR0FBRyxHQUFHO0FBQ3pCLGVBQU8sQ0FBQztBQUFBLE1BQ1o7QUFPQSxZQUFNLGNBQWMsQ0FBQztBQUNyQixVQUFJLFFBQVEsSUFBSSxNQUFNO0FBQ2xCLG1CQUFXLEtBQUssUUFBUSxJQUFJLEtBQUssTUFBTSxLQUFLLFNBQVMsR0FBRztBQUNwRCxjQUFJLEdBQUc7QUFDSCx3QkFBWSxLQUFLLENBQUM7QUFBQSxVQUN0QjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBRUEsWUFBTSxVQUFVLENBQUM7QUFDakIsaUJBQVcsYUFBYSxhQUFhO0FBQ2pDLGNBQU0sV0FBVyxNQUFNLE9BQU8scUJBQXFCLEtBQUssS0FBSyxXQUFXLElBQUksR0FBRyxVQUFVO0FBQ3pGLFlBQUksVUFBVTtBQUNWLGtCQUFRLEtBQUssUUFBUTtBQUFBLFFBQ3pCO0FBQUEsTUFDSjtBQUNBLGFBQU87QUFBQSxLQUNWO0FBQUE7QUFFTCxVQUFRLGFBQWE7QUFDckIsV0FBUyxlQUFlLENBQUMsU0FBUztBQUM5QixVQUFNLFFBQVEsUUFBUSxTQUFTLE9BQU8sT0FBTyxRQUFRO0FBQ3JELFVBQU0sWUFBWSxRQUFRLFFBQVEsU0FBUztBQUMzQyxVQUFNLHNCQUFzQixRQUFRLHVCQUF1QixPQUNyRCxPQUNBLFFBQVEsUUFBUSxtQkFBbUI7QUFDekMsV0FBTyxFQUFFLE9BQU8sV0FBVyxvQkFBb0I7QUFBQTtBQUVuRCxXQUFTLGNBQWMsQ0FBQyxXQUFXLFNBQVMsY0FBYyxPQUFPO0FBQzdELFdBQU8sVUFBVSxNQUFXLFdBQVEscUJBQWEsR0FBRztBQUVoRCxVQUFJLGdCQUFnQjtBQUNoQjtBQUNKO0FBQ0EsWUFBTSxPQUFPLE9BQU87QUFDcEIsWUFBTSxRQUFRLE1BQU0sT0FBTyxRQUFRLFNBQVM7QUFDNUMsaUJBQVcsWUFBWSxPQUFPO0FBQzFCLGNBQU0sVUFBVSxHQUFHLGFBQWE7QUFDaEMsY0FBTSxXQUFXLEdBQUcsV0FBVztBQUMvQixjQUFNLGNBQWMsTUFBTSxPQUFPLE1BQU0sT0FBTztBQUM5QyxZQUFJLFlBQVksWUFBWSxHQUFHO0FBRTNCLGdCQUFNLGVBQWUsU0FBUyxVQUFVLGNBQWMsS0FBSztBQUFBLFFBQy9ELE9BQ0s7QUFDRCxnQkFBTSxTQUFTLFNBQVMsVUFBVSxLQUFLO0FBQUE7QUFBQSxNQUUvQztBQUVBLFlBQU0sT0FBTyxNQUFNLFVBQVUsTUFBTSxPQUFPLEtBQUssU0FBUyxHQUFHLElBQUk7QUFBQSxLQUNsRTtBQUFBO0FBR0wsV0FBUyxRQUFRLENBQUMsU0FBUyxVQUFVLE9BQU87QUFDeEMsV0FBTyxVQUFVLE1BQVcsV0FBUSxxQkFBYSxHQUFHO0FBQ2hELFdBQUssTUFBTSxPQUFPLE1BQU0sT0FBTyxHQUFHLGVBQWUsR0FBRztBQUVoRCxZQUFJO0FBQ0EsZ0JBQU0sT0FBTyxNQUFNLFFBQVE7QUFDM0IsZ0JBQU0sT0FBTyxPQUFPLFFBQVE7QUFBQSxpQkFFekIsR0FBUDtBQUVJLGNBQUksRUFBRSxTQUFTLFNBQVM7QUFDcEIsa0JBQU0sT0FBTyxNQUFNLFVBQVUsTUFBTTtBQUNuQyxrQkFBTSxPQUFPLE9BQU8sUUFBUTtBQUFBLFVBQ2hDO0FBQUE7QUFJSixjQUFNLGNBQWMsTUFBTSxPQUFPLFNBQVMsT0FBTztBQUNqRCxjQUFNLE9BQU8sUUFBUSxhQUFhLFVBQVUsT0FBTyxhQUFhLGFBQWEsSUFBSTtBQUFBLE1BQ3JGLGFBQ1csTUFBTSxPQUFPLE9BQU8sUUFBUSxNQUFNLE9BQU87QUFDaEQsY0FBTSxPQUFPLFNBQVMsU0FBUyxRQUFRO0FBQUEsTUFDM0M7QUFBQSxLQUNIO0FBQUE7QUFBQTs7OztBQ3ZTTCxNQUFJLGtCQUFtQixXQUFRLFFBQUssb0JBQXFCLE9BQU8saUJBQWtCLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSTtBQUM1RixRQUFJLE9BQU87QUFBVyxXQUFLO0FBQzNCLFdBQU8sZUFBZSxHQUFHLElBQUksRUFBRSxZQUFZLE1BQU0sYUFBYSxHQUFHO0FBQUUsYUFBTyxFQUFFO0FBQUEsTUFBTSxDQUFDO0FBQUEsY0FDekUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJO0FBQ3hCLFFBQUksT0FBTztBQUFXLFdBQUs7QUFDM0IsTUFBRSxNQUFNLEVBQUU7QUFBQTtBQUVkLE1BQUkscUJBQXNCLFdBQVEsUUFBSyx1QkFBd0IsT0FBTyxpQkFBa0IsQ0FBQyxHQUFHLEdBQUc7QUFDM0YsV0FBTyxlQUFlLEdBQUcsV0FBVyxFQUFFLFlBQVksTUFBTSxPQUFPLEVBQUUsQ0FBQztBQUFBLGNBQ3pELENBQUMsR0FBRyxHQUFHO0FBQ2hCLE1BQUUsYUFBYTtBQUFBO0FBRW5CLE1BQUksZUFBZ0IsV0FBUSxRQUFLLHdCQUEwQixDQUFDLEtBQUs7QUFDN0QsUUFBSSxPQUFPLElBQUk7QUFBWSxhQUFPO0FBQ2xDLFFBQUksU0FBUyxDQUFDO0FBQ2QsUUFBSSxPQUFPO0FBQU0sZUFBUyxLQUFLO0FBQUssWUFBSSxNQUFNLGFBQWEsT0FBTyxlQUFlLEtBQUssS0FBSyxDQUFDO0FBQUcsMEJBQWdCLFFBQVEsS0FBSyxDQUFDO0FBQUE7QUFDN0gsdUJBQW1CLFFBQVEsR0FBRztBQUM5QixXQUFPO0FBQUE7QUFFWCxNQUFJLFlBQWEsV0FBUSxRQUFLLHFCQUF1QixDQUFDLFNBQVMsWUFBWSxHQUFHLFdBQVc7QUFDckYsYUFBUyxLQUFLLENBQUMsT0FBTztBQUFFLGFBQU8saUJBQWlCLElBQUksUUFBUSxJQUFJLFVBQVcsQ0FBQyxTQUFTO0FBQUUsZ0JBQVEsS0FBSztBQUFBLE9BQUk7QUFBQTtBQUN4RyxXQUFPLEtBQUssTUFBTSxJQUFJLGtCQUFtQixDQUFDLFNBQVMsUUFBUTtBQUN2RCxlQUFTLFNBQVMsQ0FBQyxPQUFPO0FBQUUsWUFBSTtBQUFFLGVBQUssVUFBVSxLQUFLLEtBQUssQ0FBQztBQUFBLGlCQUFZLEdBQVA7QUFBWSxpQkFBTyxDQUFDO0FBQUE7QUFBQTtBQUNyRixlQUFTLFFBQVEsQ0FBQyxPQUFPO0FBQUUsWUFBSTtBQUFFLGVBQUssVUFBVSxTQUFTLEtBQUssQ0FBQztBQUFBLGlCQUFZLEdBQVA7QUFBWSxpQkFBTyxDQUFDO0FBQUE7QUFBQTtBQUN4RixlQUFTLElBQUksQ0FBQyxRQUFRO0FBQUUsZUFBTyxPQUFPLFFBQVEsT0FBTyxLQUFLLElBQUksTUFBTSxPQUFPLEtBQUssRUFBRSxLQUFLLFdBQVcsUUFBUTtBQUFBO0FBQzFHLFlBQU0sWUFBWSxVQUFVLE1BQU0sU0FBUyxjQUFjLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUFBLEtBQ3ZFO0FBQUE7QUFFTCxTQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDNUQsVUFBUSxtQkFBbUIsUUFBUSxhQUFrQjtBQUNyRCxNQUFNLEtBQUssNEJBQTBCO0FBQ3JDLE1BQU0sU0FBUyxnQ0FBOEI7QUFDN0MsTUFBTSxRQUFRLHVDQUFxQztBQUNuRCxNQUFNLE9BQU8sOEJBQTRCO0FBQ3pDLE1BQU0sS0FBSyx5QkFBbUM7QUFDOUMsTUFBTSxTQUFTLDhCQUErQztBQUM5RCxNQUFNO0FBRU4sTUFBTSxhQUFhLFFBQVEsYUFBYTtBQUl4QztBQUFBLFFBQU0sbUJBQW1CLE9BQU8sYUFBYTtBQUFBLElBQ3pDLFdBQVcsQ0FBQyxVQUFVLE1BQU0sU0FBUztBQUNqQyxZQUFNO0FBQ04sV0FBSyxVQUFVO0FBQ1gsY0FBTSxJQUFJLE1BQU0sK0NBQStDO0FBQUEsTUFDbkU7QUFDQSxXQUFLLFdBQVc7QUFDaEIsV0FBSyxPQUFPLFFBQVEsQ0FBQztBQUNyQixXQUFLLFVBQVUsV0FBVyxDQUFDO0FBQUE7QUFBQSxJQUUvQixNQUFNLENBQUMsU0FBUztBQUNaLFVBQUksS0FBSyxRQUFRLGFBQWEsS0FBSyxRQUFRLFVBQVUsT0FBTztBQUN4RCxhQUFLLFFBQVEsVUFBVSxNQUFNLE9BQU87QUFBQSxNQUN4QztBQUFBO0FBQUEsSUFFSixpQkFBaUIsQ0FBQyxTQUFTLFVBQVU7QUFDakMsWUFBTSxXQUFXLEtBQUssa0JBQWtCO0FBQ3hDLFlBQU0sT0FBTyxLQUFLLGNBQWMsT0FBTztBQUN2QyxVQUFJLE1BQU0sV0FBVyxLQUFLO0FBQzFCLFVBQUksWUFBWTtBQUVaLFlBQUksS0FBSyxXQUFXLEdBQUc7QUFDbkIsaUJBQU87QUFDUCxxQkFBVyxLQUFLLE1BQU07QUFDbEIsbUJBQU8sSUFBSTtBQUFBLFVBQ2Y7QUFBQSxRQUNKLFdBRVMsUUFBUSwwQkFBMEI7QUFDdkMsaUJBQU8sSUFBSTtBQUNYLHFCQUFXLEtBQUssTUFBTTtBQUNsQixtQkFBTyxJQUFJO0FBQUEsVUFDZjtBQUFBLFFBQ0osT0FFSztBQUNELGlCQUFPLEtBQUssb0JBQW9CLFFBQVE7QUFDeEMscUJBQVcsS0FBSyxNQUFNO0FBQ2xCLG1CQUFPLElBQUksS0FBSyxvQkFBb0IsQ0FBQztBQUFBLFVBQ3pDO0FBQUE7QUFBQSxNQUVSLE9BQ0s7QUFJRCxlQUFPO0FBQ1AsbUJBQVcsS0FBSyxNQUFNO0FBQ2xCLGlCQUFPLElBQUk7QUFBQSxRQUNmO0FBQUE7QUFFSixhQUFPO0FBQUE7QUFBQSxJQUVYLGtCQUFrQixDQUFDLE1BQU0sV0FBVyxRQUFRO0FBQ3hDLFVBQUk7QUFDQSxZQUFJLElBQUksWUFBWSxLQUFLLFNBQVM7QUFDbEMsWUFBSSxJQUFJLEVBQUUsUUFBUSxHQUFHLEdBQUc7QUFDeEIsZUFBTyxJQUFJLElBQUk7QUFDWCxnQkFBTSxPQUFPLEVBQUUsVUFBVSxHQUFHLENBQUM7QUFDN0IsaUJBQU8sSUFBSTtBQUVYLGNBQUksRUFBRSxVQUFVLElBQUksR0FBRyxJQUFJLE1BQU07QUFDakMsY0FBSSxFQUFFLFFBQVEsR0FBRyxHQUFHO0FBQUEsUUFDeEI7QUFDQSxlQUFPO0FBQUEsZUFFSixLQUFQO0FBRUksYUFBSyxPQUFPLDRDQUE0QyxLQUFLO0FBQzdELGVBQU87QUFBQTtBQUFBO0FBQUEsSUFHZixpQkFBaUIsR0FBRztBQUNoQixVQUFJLFlBQVk7QUFDWixZQUFJLEtBQUssV0FBVyxHQUFHO0FBQ25CLGlCQUFPLFFBQVEsSUFBSSxjQUFjO0FBQUEsUUFDckM7QUFBQSxNQUNKO0FBQ0EsYUFBTyxLQUFLO0FBQUE7QUFBQSxJQUVoQixhQUFhLENBQUMsU0FBUztBQUNuQixVQUFJLFlBQVk7QUFDWixZQUFJLEtBQUssV0FBVyxHQUFHO0FBQ25CLGNBQUksVUFBVSxhQUFhLEtBQUssb0JBQW9CLEtBQUssUUFBUTtBQUNqRSxxQkFBVyxLQUFLLEtBQUssTUFBTTtBQUN2Qix1QkFBVztBQUNYLHVCQUFXLFFBQVEsMkJBQ2IsSUFDQSxLQUFLLG9CQUFvQixDQUFDO0FBQUEsVUFDcEM7QUFDQSxxQkFBVztBQUNYLGlCQUFPLENBQUMsT0FBTztBQUFBLFFBQ25CO0FBQUEsTUFDSjtBQUNBLGFBQU8sS0FBSztBQUFBO0FBQUEsSUFFaEIsU0FBUyxDQUFDLEtBQUssS0FBSztBQUNoQixhQUFPLElBQUksU0FBUyxHQUFHO0FBQUE7QUFBQSxJQUUzQixVQUFVLEdBQUc7QUFDVCxZQUFNLGdCQUFnQixLQUFLLFNBQVMsWUFBWTtBQUNoRCxhQUFRLEtBQUssVUFBVSxlQUFlLE1BQU0sS0FDeEMsS0FBSyxVQUFVLGVBQWUsTUFBTTtBQUFBO0FBQUEsSUFFNUMsbUJBQW1CLENBQUMsS0FBSztBQUVyQixXQUFLLEtBQUssV0FBVyxHQUFHO0FBQ3BCLGVBQU8sS0FBSyxlQUFlLEdBQUc7QUFBQSxNQUNsQztBQVFBLFdBQUssS0FBSztBQUNOLGVBQU87QUFBQSxNQUNYO0FBRUEsWUFBTSxrQkFBa0I7QUFBQSxRQUNwQjtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0o7QUFDQSxVQUFJLGNBQWM7QUFDbEIsaUJBQVcsUUFBUSxLQUFLO0FBQ3BCLFlBQUksZ0JBQWdCLEtBQUssT0FBSyxNQUFNLElBQUksR0FBRztBQUN2Qyx3QkFBYztBQUNkO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFFQSxXQUFLLGFBQWE7QUFDZCxlQUFPO0FBQUEsTUFDWDtBQWdEQSxVQUFJLFVBQVU7QUFDZCxVQUFJLFdBQVc7QUFDZixlQUFTLElBQUksSUFBSSxPQUFRLElBQUksR0FBRyxLQUFLO0FBRWpDLG1CQUFXLElBQUksSUFBSTtBQUNuQixZQUFJLFlBQVksSUFBSSxJQUFJLE9BQU8sTUFBTTtBQUNqQyxxQkFBVztBQUFBLFFBQ2YsV0FDUyxJQUFJLElBQUksT0FBTyxLQUFLO0FBQ3pCLHFCQUFXO0FBQ1gscUJBQVc7QUFBQSxRQUNmLE9BQ0s7QUFDRCxxQkFBVztBQUFBO0FBQUEsTUFFbkI7QUFDQSxpQkFBVztBQUNYLGFBQU8sUUFDRixNQUFNLEVBQUUsRUFDUixRQUFRLEVBQ1IsS0FBSyxFQUFFO0FBQUE7QUFBQSxJQUVoQixjQUFjLENBQUMsS0FBSztBQTRCaEIsV0FBSyxLQUFLO0FBRU4sZUFBTztBQUFBLE1BQ1g7QUFDQSxXQUFLLElBQUksU0FBUyxHQUFHLE1BQU0sSUFBSSxTQUFTLElBQUksTUFBTSxJQUFJLFNBQVMsR0FBRyxHQUFHO0FBRWpFLGVBQU87QUFBQSxNQUNYO0FBQ0EsV0FBSyxJQUFJLFNBQVMsR0FBRyxNQUFNLElBQUksU0FBUyxJQUFJLEdBQUc7QUFHM0MsZUFBTyxJQUFJO0FBQUEsTUFDZjtBQWlCQSxVQUFJLFVBQVU7QUFDZCxVQUFJLFdBQVc7QUFDZixlQUFTLElBQUksSUFBSSxPQUFRLElBQUksR0FBRyxLQUFLO0FBRWpDLG1CQUFXLElBQUksSUFBSTtBQUNuQixZQUFJLFlBQVksSUFBSSxJQUFJLE9BQU8sTUFBTTtBQUNqQyxxQkFBVztBQUFBLFFBQ2YsV0FDUyxJQUFJLElBQUksT0FBTyxLQUFLO0FBQ3pCLHFCQUFXO0FBQ1gscUJBQVc7QUFBQSxRQUNmLE9BQ0s7QUFDRCxxQkFBVztBQUFBO0FBQUEsTUFFbkI7QUFDQSxpQkFBVztBQUNYLGFBQU8sUUFDRixNQUFNLEVBQUUsRUFDUixRQUFRLEVBQ1IsS0FBSyxFQUFFO0FBQUE7QUFBQSxJQUVoQixpQkFBaUIsQ0FBQyxTQUFTO0FBQ3ZCLGdCQUFVLFdBQVcsQ0FBQztBQUN0QixZQUFNLFNBQVM7QUFBQSxRQUNYLEtBQUssUUFBUSxPQUFPLFFBQVEsSUFBSTtBQUFBLFFBQ2hDLEtBQUssUUFBUSxPQUFPLFFBQVE7QUFBQSxRQUM1QixRQUFRLFFBQVEsVUFBVTtBQUFBLFFBQzFCLDBCQUEwQixRQUFRLDRCQUE0QjtBQUFBLFFBQzlELGNBQWMsUUFBUSxnQkFBZ0I7QUFBQSxRQUN0QyxrQkFBa0IsUUFBUSxvQkFBb0I7QUFBQSxRQUM5QyxPQUFPLFFBQVEsU0FBUztBQUFBLE1BQzVCO0FBQ0EsYUFBTyxZQUFZLFFBQVEsYUFBYSxRQUFRO0FBQ2hELGFBQU8sWUFBWSxRQUFRLGFBQWEsUUFBUTtBQUNoRCxhQUFPO0FBQUE7QUFBQSxJQUVYLGdCQUFnQixDQUFDLFNBQVMsVUFBVTtBQUNoQyxnQkFBVSxXQUFXLENBQUM7QUFDdEIsWUFBTSxTQUFTLENBQUM7QUFDaEIsYUFBTyxNQUFNLFFBQVE7QUFDckIsYUFBTyxNQUFNLFFBQVE7QUFDckIsYUFBTyw4QkFDSCxRQUFRLDRCQUE0QixLQUFLLFdBQVc7QUFDeEQsVUFBSSxRQUFRLDBCQUEwQjtBQUNsQyxlQUFPLFFBQVEsSUFBSTtBQUFBLE1BQ3ZCO0FBQ0EsYUFBTztBQUFBO0FBQUEsSUFXWCxJQUFJLEdBQUc7QUFDSCxhQUFPLFVBQVUsTUFBVyxXQUFRLHFCQUFhLEdBQUc7QUFFaEQsYUFBSyxPQUFPLFNBQVMsS0FBSyxRQUFRLE1BQzdCLEtBQUssU0FBUyxTQUFTLEdBQUcsS0FDdEIsY0FBYyxLQUFLLFNBQVMsU0FBUyxJQUFJLElBQUs7QUFFbkQsZUFBSyxXQUFXLEtBQUssUUFBUSxRQUFRLElBQUksR0FBRyxLQUFLLFFBQVEsT0FBTyxRQUFRLElBQUksR0FBRyxLQUFLLFFBQVE7QUFBQSxRQUNoRztBQUdBLGFBQUssV0FBVyxNQUFNLEdBQUcsTUFBTSxLQUFLLFVBQVUsSUFBSTtBQUNsRCxlQUFPLElBQUksUUFBUSxDQUFDLFNBQVMsV0FBVyxVQUFVLE1BQVcsV0FBUSxxQkFBYSxHQUFHO0FBQ2pGLGVBQUssT0FBTyxjQUFjLEtBQUssVUFBVTtBQUN6QyxlQUFLLE9BQU8sWUFBWTtBQUN4QixxQkFBVyxPQUFPLEtBQUssTUFBTTtBQUN6QixpQkFBSyxPQUFPLE1BQU0sS0FBSztBQUFBLFVBQzNCO0FBQ0EsZ0JBQU0saUJBQWlCLEtBQUssa0JBQWtCLEtBQUssT0FBTztBQUMxRCxlQUFLLGVBQWUsVUFBVSxlQUFlLFdBQVc7QUFDcEQsMkJBQWUsVUFBVSxNQUFNLEtBQUssa0JBQWtCLGNBQWMsSUFBSSxHQUFHLEdBQUc7QUFBQSxVQUNsRjtBQUNBLGdCQUFNLFFBQVEsSUFBSSxVQUFVLGdCQUFnQixLQUFLLFFBQVE7QUFDekQsZ0JBQU0sR0FBRyxTQUFTLENBQUMsWUFBWTtBQUMzQixpQkFBSyxPQUFPLE9BQU87QUFBQSxXQUN0QjtBQUNELGNBQUksS0FBSyxRQUFRLFNBQVMsTUFBTSxPQUFPLE9BQU8sS0FBSyxRQUFRLEdBQUcsSUFBSTtBQUM5RCxtQkFBTyxPQUFPLElBQUksTUFBTSxZQUFZLEtBQUssUUFBUSxxQkFBcUIsQ0FBQztBQUFBLFVBQzNFO0FBQ0EsZ0JBQU0sV0FBVyxLQUFLLGtCQUFrQjtBQUN4QyxnQkFBTSxLQUFLLE1BQU0sTUFBTSxVQUFVLEtBQUssY0FBYyxjQUFjLEdBQUcsS0FBSyxpQkFBaUIsS0FBSyxTQUFTLFFBQVEsQ0FBQztBQUNsSCxjQUFJLFlBQVk7QUFDaEIsY0FBSSxHQUFHLFFBQVE7QUFDWCxlQUFHLE9BQU8sR0FBRyxRQUFRLENBQUMsU0FBUztBQUMzQixrQkFBSSxLQUFLLFFBQVEsYUFBYSxLQUFLLFFBQVEsVUFBVSxRQUFRO0FBQ3pELHFCQUFLLFFBQVEsVUFBVSxPQUFPLElBQUk7QUFBQSxjQUN0QztBQUNBLG1CQUFLLGVBQWUsVUFBVSxlQUFlLFdBQVc7QUFDcEQsK0JBQWUsVUFBVSxNQUFNLElBQUk7QUFBQSxjQUN2QztBQUNBLDBCQUFZLEtBQUssbUJBQW1CLE1BQU0sV0FBVyxDQUFDLFNBQVM7QUFDM0Qsb0JBQUksS0FBSyxRQUFRLGFBQWEsS0FBSyxRQUFRLFVBQVUsU0FBUztBQUMxRCx1QkFBSyxRQUFRLFVBQVUsUUFBUSxJQUFJO0FBQUEsZ0JBQ3ZDO0FBQUEsZUFDSDtBQUFBLGFBQ0o7QUFBQSxVQUNMO0FBQ0EsY0FBSSxZQUFZO0FBQ2hCLGNBQUksR0FBRyxRQUFRO0FBQ1gsZUFBRyxPQUFPLEdBQUcsUUFBUSxDQUFDLFNBQVM7QUFDM0Isb0JBQU0sZ0JBQWdCO0FBQ3RCLGtCQUFJLEtBQUssUUFBUSxhQUFhLEtBQUssUUFBUSxVQUFVLFFBQVE7QUFDekQscUJBQUssUUFBUSxVQUFVLE9BQU8sSUFBSTtBQUFBLGNBQ3RDO0FBQ0EsbUJBQUssZUFBZSxVQUNoQixlQUFlLGFBQ2YsZUFBZSxXQUFXO0FBQzFCLHNCQUFNLElBQUksZUFBZSxlQUNuQixlQUFlLFlBQ2YsZUFBZTtBQUNyQixrQkFBRSxNQUFNLElBQUk7QUFBQSxjQUNoQjtBQUNBLDBCQUFZLEtBQUssbUJBQW1CLE1BQU0sV0FBVyxDQUFDLFNBQVM7QUFDM0Qsb0JBQUksS0FBSyxRQUFRLGFBQWEsS0FBSyxRQUFRLFVBQVUsU0FBUztBQUMxRCx1QkFBSyxRQUFRLFVBQVUsUUFBUSxJQUFJO0FBQUEsZ0JBQ3ZDO0FBQUEsZUFDSDtBQUFBLGFBQ0o7QUFBQSxVQUNMO0FBQ0EsYUFBRyxHQUFHLFNBQVMsQ0FBQyxRQUFRO0FBQ3BCLGtCQUFNLGVBQWUsSUFBSTtBQUN6QixrQkFBTSxnQkFBZ0I7QUFDdEIsa0JBQU0sZ0JBQWdCO0FBQ3RCLGtCQUFNLGNBQWM7QUFBQSxXQUN2QjtBQUNELGFBQUcsR0FBRyxRQUFRLENBQUMsU0FBUztBQUNwQixrQkFBTSxrQkFBa0I7QUFDeEIsa0JBQU0sZ0JBQWdCO0FBQ3RCLGlCQUFLLE9BQU8sYUFBYSw0QkFBNEIsS0FBSyxXQUFXO0FBQ3JFLGtCQUFNLGNBQWM7QUFBQSxXQUN2QjtBQUNELGFBQUcsR0FBRyxTQUFTLENBQUMsU0FBUztBQUNyQixrQkFBTSxrQkFBa0I7QUFDeEIsa0JBQU0sZ0JBQWdCO0FBQ3RCLGtCQUFNLGdCQUFnQjtBQUN0QixpQkFBSyxPQUFPLHVDQUF1QyxLQUFLLFdBQVc7QUFDbkUsa0JBQU0sY0FBYztBQUFBLFdBQ3ZCO0FBQ0QsZ0JBQU0sR0FBRyxRQUFRLENBQUMsT0FBTyxhQUFhO0FBQ2xDLGdCQUFJLFVBQVUsU0FBUyxHQUFHO0FBQ3RCLG1CQUFLLEtBQUssV0FBVyxTQUFTO0FBQUEsWUFDbEM7QUFDQSxnQkFBSSxVQUFVLFNBQVMsR0FBRztBQUN0QixtQkFBSyxLQUFLLFdBQVcsU0FBUztBQUFBLFlBQ2xDO0FBQ0EsZUFBRyxtQkFBbUI7QUFDdEIsZ0JBQUksT0FBTztBQUNQLHFCQUFPLEtBQUs7QUFBQSxZQUNoQixPQUNLO0FBQ0Qsc0JBQVEsUUFBUTtBQUFBO0FBQUEsV0FFdkI7QUFDRCxjQUFJLEtBQUssUUFBUSxPQUFPO0FBQ3BCLGlCQUFLLEdBQUcsT0FBTztBQUNYLG9CQUFNLElBQUksTUFBTSw2QkFBNkI7QUFBQSxZQUNqRDtBQUNBLGVBQUcsTUFBTSxJQUFJLEtBQUssUUFBUSxLQUFLO0FBQUEsVUFDbkM7QUFBQSxTQUNILENBQUM7QUFBQSxPQUNMO0FBQUE7QUFBQSxFQUVUO0FBQ0EsVUFBUSxhQUFhO0FBT3JCLFdBQVMsZ0JBQWdCLENBQUMsV0FBVztBQUNqQyxVQUFNLE9BQU8sQ0FBQztBQUNkLFFBQUksV0FBVztBQUNmLFFBQUksVUFBVTtBQUNkLFFBQUksTUFBTTtBQUNWLGFBQVMsTUFBTSxDQUFDLEdBQUc7QUFFZixVQUFJLFdBQVcsTUFBTSxLQUFLO0FBQ3RCLGVBQU87QUFBQSxNQUNYO0FBQ0EsYUFBTztBQUNQLGdCQUFVO0FBQUE7QUFFZCxhQUFTLElBQUksRUFBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQ3ZDLFlBQU0sSUFBSSxVQUFVLE9BQU8sQ0FBQztBQUM1QixVQUFJLE1BQU0sS0FBSztBQUNYLGFBQUssU0FBUztBQUNWLHNCQUFZO0FBQUEsUUFDaEIsT0FDSztBQUNELGlCQUFPLENBQUM7QUFBQTtBQUVaO0FBQUEsTUFDSjtBQUNBLFVBQUksTUFBTSxRQUFRLFNBQVM7QUFDdkIsZUFBTyxDQUFDO0FBQ1I7QUFBQSxNQUNKO0FBQ0EsVUFBSSxNQUFNLFFBQVEsVUFBVTtBQUN4QixrQkFBVTtBQUNWO0FBQUEsTUFDSjtBQUNBLFVBQUksTUFBTSxRQUFRLFVBQVU7QUFDeEIsWUFBSSxJQUFJLFNBQVMsR0FBRztBQUNoQixlQUFLLEtBQUssR0FBRztBQUNiLGdCQUFNO0FBQUEsUUFDVjtBQUNBO0FBQUEsTUFDSjtBQUNBLGFBQU8sQ0FBQztBQUFBLElBQ1o7QUFDQSxRQUFJLElBQUksU0FBUyxHQUFHO0FBQ2hCLFdBQUssS0FBSyxJQUFJLEtBQUssQ0FBQztBQUFBLElBQ3hCO0FBQ0EsV0FBTztBQUFBO0FBRVgsVUFBUSxtQkFBbUI7QUFDM0I7QUFBQSxRQUFNLGtCQUFrQixPQUFPLGFBQWE7QUFBQSxJQUN4QyxXQUFXLENBQUMsU0FBUyxVQUFVO0FBQzNCLFlBQU07QUFDTixXQUFLLGdCQUFnQjtBQUNyQixXQUFLLGVBQWU7QUFDcEIsV0FBSyxrQkFBa0I7QUFDdkIsV0FBSyxnQkFBZ0I7QUFDckIsV0FBSyxnQkFBZ0I7QUFDckIsV0FBSyxRQUFRO0FBQ2IsV0FBSyxPQUFPO0FBQ1osV0FBSyxVQUFVO0FBQ2YsV0FBSyxVQUFVO0FBQ1gsY0FBTSxJQUFJLE1BQU0sNEJBQTRCO0FBQUEsTUFDaEQ7QUFDQSxXQUFLLFVBQVU7QUFDZixXQUFLLFdBQVc7QUFDaEIsVUFBSSxRQUFRLE9BQU87QUFDZixhQUFLLFFBQVEsUUFBUTtBQUFBLE1BQ3pCO0FBQUE7QUFBQSxJQUVKLGFBQWEsR0FBRztBQUNaLFVBQUksS0FBSyxNQUFNO0FBQ1g7QUFBQSxNQUNKO0FBQ0EsVUFBSSxLQUFLLGVBQWU7QUFDcEIsYUFBSyxXQUFXO0FBQUEsTUFDcEIsV0FDUyxLQUFLLGVBQWU7QUFDekIsYUFBSyxVQUFVLFNBQVMsV0FBVyxVQUFVLGVBQWUsS0FBSyxPQUFPLElBQUk7QUFBQSxNQUNoRjtBQUFBO0FBQUEsSUFFSixNQUFNLENBQUMsU0FBUztBQUNaLFdBQUssS0FBSyxTQUFTLE9BQU87QUFBQTtBQUFBLElBRTlCLFVBQVUsR0FBRztBQUVULFVBQUk7QUFDSixVQUFJLEtBQUssZUFBZTtBQUNwQixZQUFJLEtBQUssY0FBYztBQUNuQixrQkFBUSxJQUFJLE1BQU0sOERBQThELEtBQUssb0VBQW9FLEtBQUssY0FBYztBQUFBLFFBQ2hMLFdBQ1MsS0FBSyxvQkFBb0IsTUFBTSxLQUFLLFFBQVEsa0JBQWtCO0FBQ25FLGtCQUFRLElBQUksTUFBTSxnQkFBZ0IsS0FBSyxtQ0FBbUMsS0FBSyxpQkFBaUI7QUFBQSxRQUNwRyxXQUNTLEtBQUssaUJBQWlCLEtBQUssUUFBUSxjQUFjO0FBQ3RELGtCQUFRLElBQUksTUFBTSxnQkFBZ0IsS0FBSyw4RUFBOEU7QUFBQSxRQUN6SDtBQUFBLE1BQ0o7QUFFQSxVQUFJLEtBQUssU0FBUztBQUNkLHFCQUFhLEtBQUssT0FBTztBQUN6QixhQUFLLFVBQVU7QUFBQSxNQUNuQjtBQUNBLFdBQUssT0FBTztBQUNaLFdBQUssS0FBSyxRQUFRLE9BQU8sS0FBSyxlQUFlO0FBQUE7QUFBQSxXQUUxQyxhQUFhLENBQUMsT0FBTztBQUN4QixVQUFJLE1BQU0sTUFBTTtBQUNaO0FBQUEsTUFDSjtBQUNBLFdBQUssTUFBTSxpQkFBaUIsTUFBTSxlQUFlO0FBQzdDLGNBQU0sVUFBVSwwQ0FBMEMsTUFBTSxRQUM1RCxnREFBZ0QsTUFBTTtBQUMxRCxjQUFNLE9BQU8sT0FBTztBQUFBLE1BQ3hCO0FBQ0EsWUFBTSxXQUFXO0FBQUE7QUFBQSxFQUV6QjtBQUFBOzs7O0FDdm1CQSxNQUFJLGtCQUFtQixXQUFRLFFBQUssb0JBQXFCLE9BQU8saUJBQWtCLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSTtBQUM1RixRQUFJLE9BQU87QUFBVyxXQUFLO0FBQzNCLFdBQU8sZUFBZSxHQUFHLElBQUksRUFBRSxZQUFZLE1BQU0sYUFBYSxHQUFHO0FBQUUsYUFBTyxFQUFFO0FBQUEsTUFBTSxDQUFDO0FBQUEsY0FDekUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJO0FBQ3hCLFFBQUksT0FBTztBQUFXLFdBQUs7QUFDM0IsTUFBRSxNQUFNLEVBQUU7QUFBQTtBQUVkLE1BQUkscUJBQXNCLFdBQVEsUUFBSyx1QkFBd0IsT0FBTyxpQkFBa0IsQ0FBQyxHQUFHLEdBQUc7QUFDM0YsV0FBTyxlQUFlLEdBQUcsV0FBVyxFQUFFLFlBQVksTUFBTSxPQUFPLEVBQUUsQ0FBQztBQUFBLGNBQ3pELENBQUMsR0FBRyxHQUFHO0FBQ2hCLE1BQUUsYUFBYTtBQUFBO0FBRW5CLE1BQUksZUFBZ0IsV0FBUSxRQUFLLHdCQUEwQixDQUFDLEtBQUs7QUFDN0QsUUFBSSxPQUFPLElBQUk7QUFBWSxhQUFPO0FBQ2xDLFFBQUksU0FBUyxDQUFDO0FBQ2QsUUFBSSxPQUFPO0FBQU0sZUFBUyxLQUFLO0FBQUssWUFBSSxNQUFNLGFBQWEsT0FBTyxlQUFlLEtBQUssS0FBSyxDQUFDO0FBQUcsMEJBQWdCLFFBQVEsS0FBSyxDQUFDO0FBQUE7QUFDN0gsdUJBQW1CLFFBQVEsR0FBRztBQUM5QixXQUFPO0FBQUE7QUFFWCxNQUFJLFlBQWEsV0FBUSxRQUFLLHFCQUF1QixDQUFDLFNBQVMsWUFBWSxHQUFHLFdBQVc7QUFDckYsYUFBUyxLQUFLLENBQUMsT0FBTztBQUFFLGFBQU8saUJBQWlCLElBQUksUUFBUSxJQUFJLFVBQVcsQ0FBQyxTQUFTO0FBQUUsZ0JBQVEsS0FBSztBQUFBLE9BQUk7QUFBQTtBQUN4RyxXQUFPLEtBQUssTUFBTSxJQUFJLGtCQUFtQixDQUFDLFNBQVMsUUFBUTtBQUN2RCxlQUFTLFNBQVMsQ0FBQyxPQUFPO0FBQUUsWUFBSTtBQUFFLGVBQUssVUFBVSxLQUFLLEtBQUssQ0FBQztBQUFBLGlCQUFZLEdBQVA7QUFBWSxpQkFBTyxDQUFDO0FBQUE7QUFBQTtBQUNyRixlQUFTLFFBQVEsQ0FBQyxPQUFPO0FBQUUsWUFBSTtBQUFFLGVBQUssVUFBVSxTQUFTLEtBQUssQ0FBQztBQUFBLGlCQUFZLEdBQVA7QUFBWSxpQkFBTyxDQUFDO0FBQUE7QUFBQTtBQUN4RixlQUFTLElBQUksQ0FBQyxRQUFRO0FBQUUsZUFBTyxPQUFPLFFBQVEsT0FBTyxLQUFLLElBQUksTUFBTSxPQUFPLEtBQUssRUFBRSxLQUFLLFdBQVcsUUFBUTtBQUFBO0FBQzFHLFlBQU0sWUFBWSxVQUFVLE1BQU0sU0FBUyxjQUFjLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUFBLEtBQ3ZFO0FBQUE7QUFFTCxTQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDNUQsVUFBUSxnQkFBZ0IsUUFBUSxPQUFZO0FBQzVDLE1BQU07QUFDTixNQUFNLEtBQUssaUNBQW9DO0FBVy9DLFdBQVMsSUFBSSxDQUFDLGFBQWEsTUFBTSxTQUFTO0FBQ3RDLFdBQU8sVUFBVSxNQUFXLFdBQVEscUJBQWEsR0FBRztBQUNoRCxZQUFNLGNBQWMsR0FBRyxpQkFBaUIsV0FBVztBQUNuRCxVQUFJLFlBQVksV0FBVyxHQUFHO0FBQzFCLGNBQU0sSUFBSSxNQUFNLGtEQUFrRDtBQUFBLE1BQ3RFO0FBRUEsWUFBTSxXQUFXLFlBQVk7QUFDN0IsYUFBTyxZQUFZLE1BQU0sQ0FBQyxFQUFFLE9BQU8sUUFBUSxDQUFDLENBQUM7QUFDN0MsWUFBTSxTQUFTLElBQUksR0FBRyxXQUFXLFVBQVUsTUFBTSxPQUFPO0FBQ3hELGFBQU8sT0FBTyxLQUFLO0FBQUEsS0FDdEI7QUFBQTtBQUVMLFVBQVEsT0FBTztBQVdmLFdBQVMsYUFBYSxDQUFDLGFBQWEsTUFBTSxTQUFTO0FBQy9DLFFBQUksSUFBSTtBQUNSLFdBQU8sVUFBVSxNQUFXLFdBQVEscUJBQWEsR0FBRztBQUNoRCxVQUFJLFNBQVM7QUFDYixVQUFJLFNBQVM7QUFFYixZQUFNLGdCQUFnQixJQUFJLGlCQUFpQixjQUFjLE1BQU07QUFDL0QsWUFBTSxnQkFBZ0IsSUFBSSxpQkFBaUIsY0FBYyxNQUFNO0FBQy9ELFlBQU0sMEJBQTBCLEtBQUssWUFBWSxRQUFRLFlBQWlCLFlBQVMsWUFBSSxRQUFRLGVBQWUsUUFBUSxPQUFZLFlBQVMsWUFBSSxHQUFHO0FBQ2xKLFlBQU0sMEJBQTBCLEtBQUssWUFBWSxRQUFRLFlBQWlCLFlBQVMsWUFBSSxRQUFRLGVBQWUsUUFBUSxPQUFZLFlBQVMsWUFBSSxHQUFHO0FBQ2xKLFlBQU0saUJBQWlCLENBQUMsU0FBUztBQUM3QixrQkFBVSxjQUFjLE1BQU0sSUFBSTtBQUNsQyxZQUFJLHdCQUF3QjtBQUN4QixpQ0FBdUIsSUFBSTtBQUFBLFFBQy9CO0FBQUE7QUFFSixZQUFNLGlCQUFpQixDQUFDLFNBQVM7QUFDN0Isa0JBQVUsY0FBYyxNQUFNLElBQUk7QUFDbEMsWUFBSSx3QkFBd0I7QUFDeEIsaUNBQXVCLElBQUk7QUFBQSxRQUMvQjtBQUFBO0FBRUosWUFBTSxZQUFZLE9BQU8sT0FBTyxPQUFPLE9BQU8sQ0FBQyxHQUFHLFlBQVksUUFBUSxZQUFpQixZQUFTLFlBQUksUUFBUSxTQUFTLEdBQUcsRUFBRSxRQUFRLGdCQUFnQixRQUFRLGVBQWUsQ0FBQztBQUMxSyxZQUFNLFdBQVcsTUFBTSxLQUFLLGFBQWEsTUFBTSxPQUFPLE9BQU8sT0FBTyxPQUFPLENBQUMsR0FBRyxPQUFPLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUV2RyxnQkFBVSxjQUFjLElBQUk7QUFDNUIsZ0JBQVUsY0FBYyxJQUFJO0FBQzVCLGFBQU87QUFBQSxRQUNIO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNKO0FBQUEsS0FDSDtBQUFBO0FBRUwsVUFBUSxnQkFBZ0I7QUFBQTs7OztBQ3BHeEIsTUFBSSxrQkFBbUIsV0FBUSxRQUFLLG9CQUFxQixPQUFPLGlCQUFrQixDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUk7QUFDNUYsUUFBSSxPQUFPO0FBQVcsV0FBSztBQUMzQixRQUFJLE9BQU8sT0FBTyx5QkFBeUIsR0FBRyxDQUFDO0FBQy9DLFNBQUssU0FBUyxTQUFTLFFBQVEsRUFBRSxhQUFhLEtBQUssWUFBWSxLQUFLLGVBQWU7QUFDakYsYUFBTyxFQUFFLFlBQVksTUFBTSxhQUFhLEdBQUc7QUFBRSxlQUFPLEVBQUU7QUFBQSxRQUFNO0FBQUEsSUFDOUQ7QUFDQSxXQUFPLGVBQWUsR0FBRyxJQUFJLElBQUk7QUFBQSxjQUN2QixDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUk7QUFDeEIsUUFBSSxPQUFPO0FBQVcsV0FBSztBQUMzQixNQUFFLE1BQU0sRUFBRTtBQUFBO0FBRWQsTUFBSSxxQkFBc0IsV0FBUSxRQUFLLHVCQUF3QixPQUFPLGlCQUFrQixDQUFDLEdBQUcsR0FBRztBQUMzRixXQUFPLGVBQWUsR0FBRyxXQUFXLEVBQUUsWUFBWSxNQUFNLE9BQU8sRUFBRSxDQUFDO0FBQUEsY0FDekQsQ0FBQyxHQUFHLEdBQUc7QUFDaEIsTUFBRSxhQUFhO0FBQUE7QUFFbkIsTUFBSSxlQUFnQixXQUFRLFFBQUssd0JBQTBCLENBQUMsS0FBSztBQUM3RCxRQUFJLE9BQU8sSUFBSTtBQUFZLGFBQU87QUFDbEMsUUFBSSxTQUFTLENBQUM7QUFDZCxRQUFJLE9BQU87QUFBTSxlQUFTLEtBQUs7QUFBSyxZQUFJLE1BQU0sYUFBYSxPQUFPLFVBQVUsZUFBZSxLQUFLLEtBQUssQ0FBQztBQUFHLDBCQUFnQixRQUFRLEtBQUssQ0FBQztBQUFBO0FBQ3ZJLHVCQUFtQixRQUFRLEdBQUc7QUFDOUIsV0FBTztBQUFBO0FBRVgsTUFBSSxZQUFhLFdBQVEsUUFBSyxxQkFBdUIsQ0FBQyxTQUFTLFlBQVksR0FBRyxXQUFXO0FBQ3JGLGFBQVMsS0FBSyxDQUFDLE9BQU87QUFBRSxhQUFPLGlCQUFpQixJQUFJLFFBQVEsSUFBSSxVQUFXLENBQUMsU0FBUztBQUFFLGdCQUFRLEtBQUs7QUFBQSxPQUFJO0FBQUE7QUFDeEcsV0FBTyxLQUFLLE1BQU0sSUFBSSxrQkFBbUIsQ0FBQyxTQUFTLFFBQVE7QUFDdkQsZUFBUyxTQUFTLENBQUMsT0FBTztBQUFFLFlBQUk7QUFBRSxlQUFLLFVBQVUsS0FBSyxLQUFLLENBQUM7QUFBQSxpQkFBWSxHQUFQO0FBQVksaUJBQU8sQ0FBQztBQUFBO0FBQUE7QUFDckYsZUFBUyxRQUFRLENBQUMsT0FBTztBQUFFLFlBQUk7QUFBRSxlQUFLLFVBQVUsU0FBUyxLQUFLLENBQUM7QUFBQSxpQkFBWSxHQUFQO0FBQVksaUJBQU8sQ0FBQztBQUFBO0FBQUE7QUFDeEYsZUFBUyxJQUFJLENBQUMsUUFBUTtBQUFFLGVBQU8sT0FBTyxRQUFRLE9BQU8sS0FBSyxJQUFJLE1BQU0sT0FBTyxLQUFLLEVBQUUsS0FBSyxXQUFXLFFBQVE7QUFBQTtBQUMxRyxZQUFNLFlBQVksVUFBVSxNQUFNLFNBQVMsY0FBYyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7QUFBQSxLQUN2RTtBQUFBO0FBRUwsTUFBSSxrQkFBbUIsV0FBUSxRQUFLLDJCQUE2QixDQUFDLEtBQUs7QUFDbkUsV0FBUSxPQUFPLElBQUksYUFBYyxNQUFNLEVBQUUsU0FBVyxJQUFJO0FBQUE7QUFFNUQsU0FBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQzVELFVBQVEsYUFBYSxRQUFRLFVBQVUsUUFBUSxVQUFVLFFBQVEsWUFBWSxRQUFRLE9BQU8sUUFBUSxXQUFnQjtBQUNwSCxNQUFNLE9BQU8sK0JBQTZCO0FBQzFDLE1BQU0sT0FBTywyQkFBcUM7QUFDbEQsTUFBTSxpQkFBaUIsTUFBTSxVQUFlLFdBQVEsV0FBUSxxQkFBYSxHQUFHO0FBQ3hFLFlBQVEsUUFBUSxZQUFZLE1BQU0sS0FBSyxjQUFjLG9GQUFvRixXQUFXO0FBQUEsTUFDaEosUUFBUTtBQUFBLElBQ1osQ0FBQztBQUNELFlBQVEsUUFBUSxTQUFTLE1BQU0sS0FBSyxjQUFjLG9GQUFvRixXQUFXO0FBQUEsTUFDN0ksUUFBUTtBQUFBLElBQ1osQ0FBQztBQUNELFdBQU87QUFBQSxNQUNILE1BQU0sS0FBSyxLQUFLO0FBQUEsTUFDaEIsU0FBUyxRQUFRLEtBQUs7QUFBQSxJQUMxQjtBQUFBLEdBQ0g7QUFDRCxNQUFNLGVBQWUsTUFBTSxVQUFlLFdBQVEsV0FBUSxxQkFBYSxHQUFHO0FBQ3RFLFFBQUksSUFBSSxJQUFJLElBQUk7QUFDaEIsWUFBUSxXQUFXLE1BQU0sS0FBSyxjQUFjLFdBQVcsV0FBVztBQUFBLE1BQzlELFFBQVE7QUFBQSxJQUNaLENBQUM7QUFDRCxVQUFNLFdBQVcsTUFBTSxLQUFLLE9BQU8sTUFBTSx3QkFBd0IsT0FBTyxRQUFRLE9BQVksWUFBUyxZQUFJLEdBQUcsUUFBUSxRQUFRLE9BQVksWUFBSSxLQUFLO0FBQ2pKLFVBQU0sUUFBUSxNQUFNLEtBQUssT0FBTyxNQUFNLHFCQUFxQixPQUFPLFFBQVEsT0FBWSxZQUFTLFlBQUksR0FBRyxRQUFRLFFBQVEsT0FBWSxZQUFJLEtBQUs7QUFDM0ksV0FBTztBQUFBLE1BQ0g7QUFBQSxNQUNBO0FBQUEsSUFDSjtBQUFBLEdBQ0g7QUFDRCxNQUFNLGVBQWUsTUFBTSxVQUFlLFdBQVEsV0FBUSxxQkFBYSxHQUFHO0FBQ3RFLFlBQVEsV0FBVyxNQUFNLEtBQUssY0FBYyxlQUFlLENBQUMsTUFBTSxNQUFNLElBQUksR0FBRztBQUFBLE1BQzNFLFFBQVE7QUFBQSxJQUNaLENBQUM7QUFDRCxXQUFPLE1BQU0sV0FBVyxPQUFPLEtBQUssRUFBRSxNQUFNLElBQUk7QUFDaEQsV0FBTztBQUFBLE1BQ0g7QUFBQSxNQUNBO0FBQUEsSUFDSjtBQUFBLEdBQ0g7QUFDRCxVQUFRLFdBQVcsS0FBSyxRQUFRLFNBQVM7QUFDekMsVUFBUSxPQUFPLEtBQUssUUFBUSxLQUFLO0FBQ2pDLFVBQVEsWUFBWSxRQUFRLGFBQWE7QUFDekMsVUFBUSxVQUFVLFFBQVEsYUFBYTtBQUN2QyxVQUFRLFVBQVUsUUFBUSxhQUFhO0FBQ3ZDLFdBQVMsVUFBVSxHQUFHO0FBQ2xCLFdBQU8sVUFBVSxNQUFXLFdBQVEscUJBQWEsR0FBRztBQUNoRCxhQUFPLE9BQU8sT0FBTyxPQUFPLE9BQU8sQ0FBQyxHQUFJLE1BQU8sUUFBUSxZQUNqRCxlQUFlLElBQ2YsUUFBUSxVQUNKLGFBQWEsSUFDYixhQUFhLENBQUcsR0FBRztBQUFBLFFBQUUsVUFBVSxRQUFRO0FBQUEsUUFDN0MsTUFBTSxRQUFRO0FBQUEsUUFDZCxXQUFXLFFBQVE7QUFBQSxRQUNuQixTQUFTLFFBQVE7QUFBQSxRQUNqQixTQUFTLFFBQVE7QUFBQSxNQUFRLENBQUM7QUFBQSxLQUNqQztBQUFBO0FBRUwsVUFBUSxhQUFhO0FBQUE7Ozs7QUMzRnJCLE1BQUksa0JBQW1CLFdBQVEsUUFBSyxvQkFBcUIsT0FBTyxpQkFBa0IsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJO0FBQzVGLFFBQUksT0FBTztBQUFXLFdBQUs7QUFDM0IsUUFBSSxPQUFPLE9BQU8seUJBQXlCLEdBQUcsQ0FBQztBQUMvQyxTQUFLLFNBQVMsU0FBUyxRQUFRLEVBQUUsYUFBYSxLQUFLLFlBQVksS0FBSyxlQUFlO0FBQ2pGLGFBQU8sRUFBRSxZQUFZLE1BQU0sYUFBYSxHQUFHO0FBQUUsZUFBTyxFQUFFO0FBQUEsUUFBTTtBQUFBLElBQzlEO0FBQ0EsV0FBTyxlQUFlLEdBQUcsSUFBSSxJQUFJO0FBQUEsY0FDdkIsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJO0FBQ3hCLFFBQUksT0FBTztBQUFXLFdBQUs7QUFDM0IsTUFBRSxNQUFNLEVBQUU7QUFBQTtBQUVkLE1BQUkscUJBQXNCLFdBQVEsUUFBSyx1QkFBd0IsT0FBTyxpQkFBa0IsQ0FBQyxHQUFHLEdBQUc7QUFDM0YsV0FBTyxlQUFlLEdBQUcsV0FBVyxFQUFFLFlBQVksTUFBTSxPQUFPLEVBQUUsQ0FBQztBQUFBLGNBQ3pELENBQUMsR0FBRyxHQUFHO0FBQ2hCLE1BQUUsYUFBYTtBQUFBO0FBRW5CLE1BQUksZUFBZ0IsV0FBUSxRQUFLLHdCQUEwQixDQUFDLEtBQUs7QUFDN0QsUUFBSSxPQUFPLElBQUk7QUFBWSxhQUFPO0FBQ2xDLFFBQUksU0FBUyxDQUFDO0FBQ2QsUUFBSSxPQUFPO0FBQU0sZUFBUyxLQUFLO0FBQUssWUFBSSxNQUFNLGFBQWEsT0FBTyxVQUFVLGVBQWUsS0FBSyxLQUFLLENBQUM7QUFBRywwQkFBZ0IsUUFBUSxLQUFLLENBQUM7QUFBQTtBQUN2SSx1QkFBbUIsUUFBUSxHQUFHO0FBQzlCLFdBQU87QUFBQTtBQUVYLE1BQUksWUFBYSxXQUFRLFFBQUsscUJBQXVCLENBQUMsU0FBUyxZQUFZLEdBQUcsV0FBVztBQUNyRixhQUFTLEtBQUssQ0FBQyxPQUFPO0FBQUUsYUFBTyxpQkFBaUIsSUFBSSxRQUFRLElBQUksVUFBVyxDQUFDLFNBQVM7QUFBRSxnQkFBUSxLQUFLO0FBQUEsT0FBSTtBQUFBO0FBQ3hHLFdBQU8sS0FBSyxNQUFNLElBQUksa0JBQW1CLENBQUMsU0FBUyxRQUFRO0FBQ3ZELGVBQVMsU0FBUyxDQUFDLE9BQU87QUFBRSxZQUFJO0FBQUUsZUFBSyxVQUFVLEtBQUssS0FBSyxDQUFDO0FBQUEsaUJBQVksR0FBUDtBQUFZLGlCQUFPLENBQUM7QUFBQTtBQUFBO0FBQ3JGLGVBQVMsUUFBUSxDQUFDLE9BQU87QUFBRSxZQUFJO0FBQUUsZUFBSyxVQUFVLFNBQVMsS0FBSyxDQUFDO0FBQUEsaUJBQVksR0FBUDtBQUFZLGlCQUFPLENBQUM7QUFBQTtBQUFBO0FBQ3hGLGVBQVMsSUFBSSxDQUFDLFFBQVE7QUFBRSxlQUFPLE9BQU8sUUFBUSxPQUFPLEtBQUssSUFBSSxNQUFNLE9BQU8sS0FBSyxFQUFFLEtBQUssV0FBVyxRQUFRO0FBQUE7QUFDMUcsWUFBTSxZQUFZLFVBQVUsTUFBTSxTQUFTLGNBQWMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQUEsS0FDdkU7QUFBQTtBQUVMLFNBQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUM1RCxVQUFRLFdBQVcsUUFBUSxpQkFBaUIsUUFBUSxjQUFjLFFBQVEsY0FBYyxRQUFRLGtCQUFrQixRQUFRLFVBQVUsUUFBUSxhQUFhLFFBQVEsV0FBVyxRQUFRLFlBQVksUUFBUSxRQUFRLFFBQVEsV0FBVyxRQUFRLGFBQWEsUUFBUSxPQUFPLFFBQVEsU0FBUyxRQUFRLFVBQVUsUUFBUSxRQUFRLFFBQVEsUUFBUSxRQUFRLFVBQVUsUUFBUSxZQUFZLFFBQVEsaUJBQWlCLFFBQVEsWUFBWSxRQUFRLGtCQUFrQixRQUFRLG9CQUFvQixRQUFRLFdBQVcsUUFBUSxVQUFVLFFBQVEsWUFBWSxRQUFRLGlCQUFpQixRQUFRLFdBQWdCO0FBQzdqQixNQUFNO0FBQ04sTUFBTTtBQUNOLE1BQU07QUFDTixNQUFNLEtBQUssNEJBQTBCO0FBQ3JDLE1BQU0sT0FBTyw4QkFBNEI7QUFDekMsTUFBTTtBQUlOLE1BQUk7QUFDSixXQUFVLENBQUMsV0FBVTtBQUlqQixjQUFTLFVBQVMsYUFBYSxLQUFLO0FBSXBDLGNBQVMsVUFBUyxhQUFhLEtBQUs7QUFBQSxLQUNyQyxhQUFhLFFBQVEsV0FBVyxXQUFXLENBQUMsRUFBRTtBQVVqRCxXQUFTLGNBQWMsQ0FBQyxNQUFNLEtBQUs7QUFDL0IsVUFBTSxnQkFBZ0IsR0FBRyxRQUFRLGdCQUFnQixHQUFHO0FBQ3BELFlBQVEsSUFBSSxRQUFRO0FBQ3BCLFVBQU0sV0FBVyxRQUFRLElBQUksaUJBQWlCO0FBQzlDLFFBQUksVUFBVTtBQUNWLGNBQVEsR0FBRyxlQUFlLGtCQUFrQixRQUFRLEdBQUcsZUFBZSx3QkFBd0IsTUFBTSxHQUFHLENBQUM7QUFBQSxJQUM1RztBQUNBLEtBQUMsR0FBRyxVQUFVLGNBQWMsV0FBVyxFQUFFLEtBQUssR0FBRyxZQUFZO0FBQUE7QUFFakUsVUFBUSxpQkFBaUI7QUFLekIsV0FBUyxTQUFTLENBQUMsUUFBUTtBQUN2QixLQUFDLEdBQUcsVUFBVSxjQUFjLFlBQVksQ0FBQyxHQUFHLE1BQU07QUFBQTtBQUV0RCxVQUFRLFlBQVk7QUFLcEIsV0FBUyxPQUFPLENBQUMsV0FBVztBQUN4QixVQUFNLFdBQVcsUUFBUSxJQUFJLGtCQUFrQjtBQUMvQyxRQUFJLFVBQVU7QUFDVixPQUFDLEdBQUcsZUFBZSxrQkFBa0IsUUFBUSxTQUFTO0FBQUEsSUFDMUQsT0FDSztBQUNELE9BQUMsR0FBRyxVQUFVLGNBQWMsWUFBWSxDQUFDLEdBQUcsU0FBUztBQUFBO0FBRXpELFlBQVEsSUFBSSxVQUFVLEdBQUcsWUFBWSxLQUFLLFlBQVksUUFBUSxJQUFJO0FBQUE7QUFFdEUsVUFBUSxVQUFVO0FBVWxCLFdBQVMsUUFBUSxDQUFDLE1BQU0sU0FBUztBQUM3QixVQUFNLE1BQU0sUUFBUSxJQUFJLFNBQVMsS0FBSyxRQUFRLE1BQU0sR0FBRyxFQUFFLFlBQVksUUFBUTtBQUM3RSxRQUFJLFdBQVcsUUFBUSxhQUFhLEtBQUs7QUFDckMsWUFBTSxJQUFJLE1BQU0sb0NBQW9DLE1BQU07QUFBQSxJQUM5RDtBQUNBLFFBQUksV0FBVyxRQUFRLG1CQUFtQixPQUFPO0FBQzdDLGFBQU87QUFBQSxJQUNYO0FBQ0EsV0FBTyxJQUFJLEtBQUs7QUFBQTtBQUVwQixVQUFRLFdBQVc7QUFTbkIsV0FBUyxpQkFBaUIsQ0FBQyxNQUFNLFNBQVM7QUFDdEMsVUFBTSxTQUFTLFNBQVMsTUFBTSxPQUFPLEVBQ2hDLE1BQU0sSUFBSSxFQUNWLE9BQU8sT0FBSyxNQUFNLEVBQUU7QUFDekIsUUFBSSxXQUFXLFFBQVEsbUJBQW1CLE9BQU87QUFDN0MsYUFBTztBQUFBLElBQ1g7QUFDQSxXQUFPLE9BQU8sSUFBSSxXQUFTLE1BQU0sS0FBSyxDQUFDO0FBQUE7QUFFM0MsVUFBUSxvQkFBb0I7QUFXNUIsV0FBUyxlQUFlLENBQUMsTUFBTSxTQUFTO0FBQ3BDLFVBQU0sWUFBWSxDQUFDLFFBQVEsUUFBUSxNQUFNO0FBQ3pDLFVBQU0sYUFBYSxDQUFDLFNBQVMsU0FBUyxPQUFPO0FBQzdDLFVBQU0sTUFBTSxTQUFTLE1BQU0sT0FBTztBQUNsQyxRQUFJLFVBQVUsU0FBUyxHQUFHO0FBQ3RCLGFBQU87QUFDWCxRQUFJLFdBQVcsU0FBUyxHQUFHO0FBQ3ZCLGFBQU87QUFDWCxVQUFNLElBQUksVUFBVSw2REFBNkQsV0FDN0UsNEVBQTRFO0FBQUE7QUFFcEYsVUFBUSxrQkFBa0I7QUFRMUIsV0FBUyxTQUFTLENBQUMsTUFBTSxPQUFPO0FBQzVCLFVBQU0sV0FBVyxRQUFRLElBQUksb0JBQW9CO0FBQ2pELFFBQUksVUFBVTtBQUNWLGNBQVEsR0FBRyxlQUFlLGtCQUFrQixXQUFXLEdBQUcsZUFBZSx3QkFBd0IsTUFBTSxLQUFLLENBQUM7QUFBQSxJQUNqSDtBQUNBLFlBQVEsT0FBTyxNQUFNLEdBQUcsR0FBRztBQUMzQixLQUFDLEdBQUcsVUFBVSxjQUFjLGNBQWMsRUFBRSxLQUFLLElBQUksR0FBRyxRQUFRLGdCQUFnQixLQUFLLENBQUM7QUFBQTtBQUUxRixVQUFRLFlBQVk7QUFNcEIsV0FBUyxjQUFjLENBQUMsU0FBUztBQUM3QixLQUFDLEdBQUcsVUFBVSxPQUFPLFFBQVEsVUFBVSxPQUFPLEtBQUs7QUFBQTtBQUV2RCxVQUFRLGlCQUFpQjtBQVN6QixXQUFTLFNBQVMsQ0FBQyxTQUFTO0FBQ3hCLFlBQVEsV0FBVyxTQUFTO0FBQzVCLFVBQU0sT0FBTztBQUFBO0FBRWpCLFVBQVEsWUFBWTtBQU9wQixXQUFTLE9BQU8sR0FBRztBQUNmLFdBQU8sUUFBUSxJQUFJLG9CQUFvQjtBQUFBO0FBRTNDLFVBQVEsVUFBVTtBQUtsQixXQUFTLEtBQUssQ0FBQyxTQUFTO0FBQ3BCLEtBQUMsR0FBRyxVQUFVLGNBQWMsU0FBUyxDQUFDLEdBQUcsT0FBTztBQUFBO0FBRXBELFVBQVEsUUFBUTtBQU1oQixXQUFTLEtBQUssQ0FBQyxTQUFTLGFBQWEsQ0FBQyxHQUFHO0FBQ3JDLEtBQUMsR0FBRyxVQUFVLGNBQWMsVUFBVSxHQUFHLFFBQVEscUJBQXFCLFVBQVUsR0FBRyxtQkFBbUIsUUFBUSxRQUFRLFNBQVMsSUFBSSxPQUFPO0FBQUE7QUFFOUksVUFBUSxRQUFRO0FBTWhCLFdBQVMsT0FBTyxDQUFDLFNBQVMsYUFBYSxDQUFDLEdBQUc7QUFDdkMsS0FBQyxHQUFHLFVBQVUsY0FBYyxZQUFZLEdBQUcsUUFBUSxxQkFBcUIsVUFBVSxHQUFHLG1CQUFtQixRQUFRLFFBQVEsU0FBUyxJQUFJLE9BQU87QUFBQTtBQUVoSixVQUFRLFVBQVU7QUFNbEIsV0FBUyxNQUFNLENBQUMsU0FBUyxhQUFhLENBQUMsR0FBRztBQUN0QyxLQUFDLEdBQUcsVUFBVSxjQUFjLFdBQVcsR0FBRyxRQUFRLHFCQUFxQixVQUFVLEdBQUcsbUJBQW1CLFFBQVEsUUFBUSxTQUFTLElBQUksT0FBTztBQUFBO0FBRS9JLFVBQVEsU0FBUztBQUtqQixXQUFTLElBQUksQ0FBQyxTQUFTO0FBQ25CLFlBQVEsT0FBTyxNQUFNLFVBQVUsR0FBRyxHQUFHO0FBQUE7QUFFekMsVUFBUSxPQUFPO0FBUWYsV0FBUyxVQUFVLENBQUMsTUFBTTtBQUN0QixLQUFDLEdBQUcsVUFBVSxPQUFPLFNBQVMsSUFBSTtBQUFBO0FBRXRDLFVBQVEsYUFBYTtBQUlyQixXQUFTLFFBQVEsR0FBRztBQUNoQixLQUFDLEdBQUcsVUFBVSxPQUFPLFVBQVU7QUFBQTtBQUVuQyxVQUFRLFdBQVc7QUFTbkIsV0FBUyxLQUFLLENBQUMsTUFBTSxJQUFJO0FBQ3JCLFdBQU8sVUFBVSxNQUFXLFdBQVEscUJBQWEsR0FBRztBQUNoRCxpQkFBVyxJQUFJO0FBQ2YsVUFBSTtBQUNKLFVBQUk7QUFDQSxpQkFBUyxNQUFNLEdBQUc7QUFBQSxnQkFFdEI7QUFDSSxpQkFBUztBQUFBO0FBRWIsYUFBTztBQUFBLEtBQ1Y7QUFBQTtBQUVMLFVBQVEsUUFBUTtBQVdoQixXQUFTLFNBQVMsQ0FBQyxNQUFNLE9BQU87QUFDNUIsVUFBTSxXQUFXLFFBQVEsSUFBSSxtQkFBbUI7QUFDaEQsUUFBSSxVQUFVO0FBQ1YsY0FBUSxHQUFHLGVBQWUsa0JBQWtCLFVBQVUsR0FBRyxlQUFlLHdCQUF3QixNQUFNLEtBQUssQ0FBQztBQUFBLElBQ2hIO0FBQ0EsS0FBQyxHQUFHLFVBQVUsY0FBYyxjQUFjLEVBQUUsS0FBSyxJQUFJLEdBQUcsUUFBUSxnQkFBZ0IsS0FBSyxDQUFDO0FBQUE7QUFFMUYsVUFBUSxZQUFZO0FBT3BCLFdBQVMsUUFBUSxDQUFDLE1BQU07QUFDcEIsV0FBTyxRQUFRLElBQUksU0FBUyxXQUFXO0FBQUE7QUFFM0MsVUFBUSxXQUFXO0FBQ25CLFdBQVMsVUFBVSxDQUFDLEtBQUs7QUFDckIsV0FBTyxVQUFVLE1BQVcsV0FBUSxxQkFBYSxHQUFHO0FBQ2hELGFBQU8sTUFBTSxhQUFhLFdBQVcsV0FBVyxHQUFHO0FBQUEsS0FDdEQ7QUFBQTtBQUVMLFVBQVEsYUFBYTtBQUlyQixNQUFJO0FBQ0osU0FBTyxlQUFlLFNBQVMsV0FBVyxFQUFFLFlBQVksTUFBTSxhQUFjLEdBQUc7QUFBRSxXQUFPLFVBQVU7QUFBQSxJQUFXLENBQUM7QUFJOUcsTUFBSTtBQUNKLFNBQU8sZUFBZSxTQUFTLG1CQUFtQixFQUFFLFlBQVksTUFBTSxhQUFjLEdBQUc7QUFBRSxXQUFPLFVBQVU7QUFBQSxJQUFtQixDQUFDO0FBSTlILE1BQUk7QUFDSixTQUFPLGVBQWUsU0FBUyxlQUFlLEVBQUUsWUFBWSxNQUFNLGFBQWMsR0FBRztBQUFFLFdBQU8sYUFBYTtBQUFBLElBQWUsQ0FBQztBQUN6SCxTQUFPLGVBQWUsU0FBUyxlQUFlLEVBQUUsWUFBWSxNQUFNLGFBQWMsR0FBRztBQUFFLFdBQU8sYUFBYTtBQUFBLElBQWUsQ0FBQztBQUN6SCxTQUFPLGVBQWUsU0FBUyxrQkFBa0IsRUFBRSxZQUFZLE1BQU0sYUFBYyxHQUFHO0FBQUUsV0FBTyxhQUFhO0FBQUEsSUFBa0IsQ0FBQztBQUkvSCxVQUFRLFdBQVcsK0JBQWtDO0FBQUE7Ozs7QUNyVnJELFNBQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUM1RCxFQUFRLGtCQUFlO0FBQ3ZCLE1BQU07QUFDTixNQUFNO0FBQ047QUFBQSxRQUFNLFFBQVE7QUFBQSxJQUlWLFdBQVcsR0FBRztBQUNWLFVBQUksSUFBSSxJQUFJO0FBQ1osV0FBSyxVQUFVLENBQUM7QUFDaEIsVUFBSSxRQUFRLElBQUksbUJBQW1CO0FBQy9CLGFBQUssR0FBRyxLQUFLLFlBQVksUUFBUSxJQUFJLGlCQUFpQixHQUFHO0FBQ3JELGVBQUssVUFBVSxLQUFLLE9BQU8sR0FBRyxLQUFLLGNBQWMsUUFBUSxJQUFJLG1CQUFtQixFQUFFLFVBQVUsT0FBTyxDQUFDLENBQUM7QUFBQSxRQUN6RyxPQUNLO0FBQ0QsZ0JBQU0sT0FBTyxRQUFRLElBQUk7QUFDekIsa0JBQVEsT0FBTyxNQUFNLHFCQUFxQixzQkFBc0IsS0FBSyxLQUFLO0FBQUE7QUFBQSxNQUVsRjtBQUNBLFdBQUssWUFBWSxRQUFRLElBQUk7QUFDN0IsV0FBSyxNQUFNLFFBQVEsSUFBSTtBQUN2QixXQUFLLE1BQU0sUUFBUSxJQUFJO0FBQ3ZCLFdBQUssV0FBVyxRQUFRLElBQUk7QUFDNUIsV0FBSyxTQUFTLFFBQVEsSUFBSTtBQUMxQixXQUFLLFFBQVEsUUFBUSxJQUFJO0FBQ3pCLFdBQUssTUFBTSxRQUFRLElBQUk7QUFDdkIsV0FBSyxZQUFZLFNBQVMsUUFBUSxJQUFJLG1CQUFtQixFQUFFO0FBQzNELFdBQUssUUFBUSxTQUFTLFFBQVEsSUFBSSxlQUFlLEVBQUU7QUFDbkQsV0FBSyxVQUFVLEtBQUssUUFBUSxJQUFJLG9CQUFvQixRQUFRLE9BQVksWUFBSSxLQUFLO0FBQ2pGLFdBQUssYUFBYSxLQUFLLFFBQVEsSUFBSSx1QkFBdUIsUUFBUSxPQUFZLFlBQUksS0FBSztBQUN2RixXQUFLLGNBQ0EsS0FBSyxRQUFRLElBQUksd0JBQXdCLFFBQVEsT0FBWSxZQUFJLEtBQUs7QUFBQTtBQUFBLFFBRTNFLEtBQUssR0FBRztBQUNSLFlBQU0sVUFBVSxLQUFLO0FBQ3JCLGFBQU8sT0FBTyxPQUFPLE9BQU8sT0FBTyxDQUFDLEdBQUcsS0FBSyxJQUFJLEdBQUcsRUFBRSxTQUFTLFFBQVEsU0FBUyxRQUFRLGdCQUFnQixTQUFTLE9BQU8sQ0FBQztBQUFBO0FBQUEsUUFFeEgsSUFBSSxHQUFHO0FBQ1AsVUFBSSxRQUFRLElBQUksbUJBQW1CO0FBQy9CLGVBQU8sT0FBTyxRQUFRLFFBQVEsSUFBSSxrQkFBa0IsTUFBTSxHQUFHO0FBQzdELGVBQU8sRUFBRSxPQUFPLEtBQUs7QUFBQSxNQUN6QjtBQUNBLFVBQUksS0FBSyxRQUFRLFlBQVk7QUFDekIsZUFBTztBQUFBLFVBQ0gsT0FBTyxLQUFLLFFBQVEsV0FBVyxNQUFNO0FBQUEsVUFDckMsTUFBTSxLQUFLLFFBQVEsV0FBVztBQUFBLFFBQ2xDO0FBQUEsTUFDSjtBQUNBLFlBQU0sSUFBSSxNQUFNLGtGQUFrRjtBQUFBO0FBQUEsRUFFMUc7QUFDQSxFQUFRLGtCQUFVO0FBQUE7Ozs7QUNwRGxCLE1BQUksa0JBQW1CLFdBQVEsUUFBSyxvQkFBcUIsT0FBTyxpQkFBa0IsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJO0FBQzVGLFFBQUksT0FBTztBQUFXLFdBQUs7QUFDM0IsUUFBSSxPQUFPLE9BQU8seUJBQXlCLEdBQUcsQ0FBQztBQUMvQyxTQUFLLFNBQVMsU0FBUyxRQUFRLEVBQUUsYUFBYSxLQUFLLFlBQVksS0FBSyxlQUFlO0FBQ2pGLGFBQU8sRUFBRSxZQUFZLE1BQU0sYUFBYSxHQUFHO0FBQUUsZUFBTyxFQUFFO0FBQUEsUUFBTTtBQUFBLElBQzlEO0FBQ0EsV0FBTyxlQUFlLEdBQUcsSUFBSSxJQUFJO0FBQUEsY0FDdkIsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJO0FBQ3hCLFFBQUksT0FBTztBQUFXLFdBQUs7QUFDM0IsTUFBRSxNQUFNLEVBQUU7QUFBQTtBQUVkLE1BQUkscUJBQXNCLFdBQVEsUUFBSyx1QkFBd0IsT0FBTyxpQkFBa0IsQ0FBQyxHQUFHLEdBQUc7QUFDM0YsV0FBTyxlQUFlLEdBQUcsV0FBVyxFQUFFLFlBQVksTUFBTSxPQUFPLEVBQUUsQ0FBQztBQUFBLGNBQ3pELENBQUMsR0FBRyxHQUFHO0FBQ2hCLE1BQUUsYUFBYTtBQUFBO0FBRW5CLE1BQUksZUFBZ0IsV0FBUSxRQUFLLHdCQUEwQixDQUFDLEtBQUs7QUFDN0QsUUFBSSxPQUFPLElBQUk7QUFBWSxhQUFPO0FBQ2xDLFFBQUksU0FBUyxDQUFDO0FBQ2QsUUFBSSxPQUFPO0FBQU0sZUFBUyxLQUFLO0FBQUssWUFBSSxNQUFNLGFBQWEsT0FBTyxVQUFVLGVBQWUsS0FBSyxLQUFLLENBQUM7QUFBRywwQkFBZ0IsUUFBUSxLQUFLLENBQUM7QUFBQTtBQUN2SSx1QkFBbUIsUUFBUSxHQUFHO0FBQzlCLFdBQU87QUFBQTtBQUVYLE1BQUksWUFBYSxXQUFRLFFBQUsscUJBQXVCLENBQUMsU0FBUyxZQUFZLEdBQUcsV0FBVztBQUNyRixhQUFTLEtBQUssQ0FBQyxPQUFPO0FBQUUsYUFBTyxpQkFBaUIsSUFBSSxRQUFRLElBQUksVUFBVyxDQUFDLFNBQVM7QUFBRSxnQkFBUSxLQUFLO0FBQUEsT0FBSTtBQUFBO0FBQ3hHLFdBQU8sS0FBSyxNQUFNLElBQUksa0JBQW1CLENBQUMsU0FBUyxRQUFRO0FBQ3ZELGVBQVMsU0FBUyxDQUFDLE9BQU87QUFBRSxZQUFJO0FBQUUsZUFBSyxVQUFVLEtBQUssS0FBSyxDQUFDO0FBQUEsaUJBQVksR0FBUDtBQUFZLGlCQUFPLENBQUM7QUFBQTtBQUFBO0FBQ3JGLGVBQVMsUUFBUSxDQUFDLE9BQU87QUFBRSxZQUFJO0FBQUUsZUFBSyxVQUFVLFNBQVMsS0FBSyxDQUFDO0FBQUEsaUJBQVksR0FBUDtBQUFZLGlCQUFPLENBQUM7QUFBQTtBQUFBO0FBQ3hGLGVBQVMsSUFBSSxDQUFDLFFBQVE7QUFBRSxlQUFPLE9BQU8sUUFBUSxPQUFPLEtBQUssSUFBSSxNQUFNLE9BQU8sS0FBSyxFQUFFLEtBQUssV0FBVyxRQUFRO0FBQUE7QUFDMUcsWUFBTSxZQUFZLFVBQVUsTUFBTSxTQUFTLGNBQWMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQUEsS0FDdkU7QUFBQTtBQUVMLFNBQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUM1RCxVQUFRLGdCQUFnQixRQUFRLGdCQUFnQixRQUFRLDBCQUEwQixRQUFRLGdCQUFnQixRQUFRLGdCQUFxQjtBQUN2SSxNQUFNLGFBQWEsMEJBQTRDO0FBQy9ELE1BQU07QUFDTixXQUFTLGFBQWEsQ0FBQyxPQUFPLFNBQVM7QUFDbkMsU0FBSyxVQUFVLFFBQVEsTUFBTTtBQUN6QixZQUFNLElBQUksTUFBTSwwQ0FBMEM7QUFBQSxJQUM5RCxXQUNTLFNBQVMsUUFBUSxNQUFNO0FBQzVCLFlBQU0sSUFBSSxNQUFNLDBEQUEwRDtBQUFBLElBQzlFO0FBQ0Esa0JBQWMsUUFBUSxTQUFTLFdBQVcsUUFBUSxPQUFPLFNBQVM7QUFBQTtBQUV0RSxVQUFRLGdCQUFnQjtBQUN4QixXQUFTLGFBQWEsQ0FBQyxnQkFBZ0I7QUFDbkMsVUFBTSxLQUFLLElBQUksV0FBVztBQUMxQixXQUFPLEdBQUcsU0FBUyxjQUFjO0FBQUE7QUFFckMsVUFBUSxnQkFBZ0I7QUFDeEIsV0FBUyx1QkFBdUIsQ0FBQyxnQkFBZ0I7QUFDN0MsVUFBTSxLQUFLLElBQUksV0FBVztBQUMxQixXQUFPLEdBQUcsbUJBQW1CLGNBQWM7QUFBQTtBQUUvQyxVQUFRLDBCQUEwQjtBQUNsQyxXQUFTLGFBQWEsQ0FBQyxnQkFBZ0I7QUFDbkMsVUFBTSxpQkFBaUIsd0JBQXdCLGNBQWM7QUFDN0QsVUFBTSxhQUFhLENBQUMsS0FBSyxTQUFTLFVBQVUsTUFBVyxXQUFRLHFCQUFhLEdBQUc7QUFDM0UsY0FBUSxHQUFHLFNBQVMsT0FBTyxLQUFLLE9BQU8sT0FBTyxPQUFPLE9BQU8sQ0FBQyxHQUFHLElBQUksR0FBRyxFQUFFLFlBQVksZUFBZSxDQUFDLENBQUM7QUFBQSxLQUN6RztBQUNELFdBQU87QUFBQTtBQUVYLFVBQVEsZ0JBQWdCO0FBQ3hCLFdBQVMsYUFBYSxHQUFHO0FBQ3JCLFdBQU8sUUFBUSxJQUFJLHFCQUFxQjtBQUFBO0FBRTVDLFVBQVEsZ0JBQWdCO0FBQUE7Ozs7QUNsRXhCLFNBQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUU1RCxXQUFTLFlBQVksR0FBRztBQUN0QixlQUFXLGNBQWMsWUFBWSxlQUFlLFdBQVc7QUFDN0QsYUFBTyxVQUFVO0FBQUEsSUFDbkI7QUFFQSxlQUFXLFlBQVksWUFBWSxRQUFRLFlBQVksV0FBVztBQUNoRSxhQUFPLFdBQVcsUUFBUSxRQUFRLE9BQU8sQ0FBQyxNQUFNLFFBQVEsYUFBYSxRQUFRO0FBQUEsSUFDL0U7QUFFQSxXQUFPO0FBQUE7QUFHVCxFQUFRLHVCQUFlO0FBQUE7Ozs7QUNoQnZCLFNBQU8sVUFBVTtBQUVqQixXQUFTLFFBQVEsQ0FBQyxPQUFPLE1BQU0sUUFBUSxTQUFTO0FBQzlDLGVBQVcsV0FBVyxZQUFZO0FBQ2hDLFlBQU0sSUFBSSxNQUFNLDJDQUEyQztBQUFBLElBQzdEO0FBRUEsU0FBSyxTQUFTO0FBQ1osZ0JBQVUsQ0FBQztBQUFBLElBQ2I7QUFFQSxRQUFJLE1BQU0sUUFBUSxJQUFJLEdBQUc7QUFDdkIsYUFBTyxLQUFLLFFBQVEsRUFBRSxlQUFnQixDQUFDLFVBQVUsT0FBTTtBQUNyRCxlQUFPLFNBQVMsS0FBSyxNQUFNLE9BQU8sT0FBTSxVQUFVLE9BQU87QUFBQSxTQUN4RCxNQUFNLEVBQUU7QUFBQSxJQUNiO0FBRUEsV0FBTyxRQUFRLFFBQVEsRUFBRSxhQUFjLEdBQUc7QUFDeEMsV0FBSyxNQUFNLFNBQVMsT0FBTztBQUN6QixlQUFPLE9BQU8sT0FBTztBQUFBLE1BQ3ZCO0FBRUEsYUFBTyxNQUFNLFNBQVMsTUFBTSxlQUFnQixDQUFDLFNBQVEsWUFBWTtBQUMvRCxlQUFPLFdBQVcsS0FBSyxLQUFLLE1BQU0sU0FBUSxPQUFPO0FBQUEsU0FDaEQsTUFBTSxFQUFFO0FBQUEsS0FDWjtBQUFBO0FBQUE7Ozs7QUN6QkgsU0FBTyxVQUFVO0FBRWpCLFdBQVMsT0FBTyxDQUFDLE9BQU8sTUFBTSxNQUFNLE1BQU07QUFDeEMsUUFBSSxPQUFPO0FBQ1gsU0FBSyxNQUFNLFNBQVMsT0FBTztBQUN6QixZQUFNLFNBQVMsUUFBUSxDQUFDO0FBQUEsSUFDMUI7QUFFQSxRQUFJLFNBQVMsVUFBVTtBQUNyQixxQkFBZ0IsQ0FBQyxRQUFRLFNBQVM7QUFDaEMsZUFBTyxRQUFRLFFBQVEsRUFDcEIsS0FBSyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUMsRUFDN0IsS0FBSyxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFBQTtBQUFBLElBRXRDO0FBRUEsUUFBSSxTQUFTLFNBQVM7QUFDcEIscUJBQWdCLENBQUMsUUFBUSxTQUFTO0FBQ2hDLFlBQUk7QUFDSixlQUFPLFFBQVEsUUFBUSxFQUNwQixLQUFLLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQyxFQUMvQixhQUFjLENBQUMsU0FBUztBQUN2QixtQkFBUztBQUNULGlCQUFPLEtBQUssUUFBUSxPQUFPO0FBQUEsU0FDNUIsRUFDQSxhQUFjLEdBQUc7QUFDaEIsaUJBQU87QUFBQSxTQUNSO0FBQUE7QUFBQSxJQUVQO0FBRUEsUUFBSSxTQUFTLFNBQVM7QUFDcEIscUJBQWdCLENBQUMsUUFBUSxTQUFTO0FBQ2hDLGVBQU8sUUFBUSxRQUFRLEVBQ3BCLEtBQUssT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDLEVBQy9CLGNBQWUsQ0FBQyxPQUFPO0FBQ3RCLGlCQUFPLEtBQUssT0FBTyxPQUFPO0FBQUEsU0FDM0I7QUFBQTtBQUFBLElBRVA7QUFFQSxVQUFNLFNBQVMsTUFBTSxLQUFLO0FBQUEsTUFDeEI7QUFBQSxNQUNBO0FBQUEsSUFDRixDQUFDO0FBQUE7QUFBQTs7OztBQzVDSCxTQUFPLFVBQVU7QUFFakIsV0FBUyxVQUFVLENBQUMsT0FBTyxNQUFNLFFBQVE7QUFDdkMsU0FBSyxNQUFNLFNBQVMsT0FBTztBQUN6QjtBQUFBLElBQ0Y7QUFFQSxRQUFJLFFBQVEsTUFBTSxTQUFTLE1BQ3hCLFlBQWEsQ0FBQyxZQUFZO0FBQ3pCLGFBQU8sV0FBVztBQUFBLEtBQ25CLEVBQ0EsUUFBUSxNQUFNO0FBRWpCLFFBQUksVUFBVSxJQUFJO0FBQ2hCO0FBQUEsSUFDRjtBQUVBLFVBQU0sU0FBUyxNQUFNLE9BQU8sT0FBTyxDQUFDO0FBQUE7QUFBQTs7OztBQ2pCdEMsTUFBSTtBQUNKLE1BQUk7QUFDSixNQUFJO0FBR0osTUFBSSxPQUFPLFNBQVM7QUFDcEIsTUFBSSxXQUFXLEtBQUssS0FBSyxJQUFJO0FBRTdCLFdBQVMsT0FBTyxDQUFDLE1BQU0sT0FBTyxNQUFNO0FBQ2xDLFFBQUksZ0JBQWdCLFNBQVMsWUFBWSxJQUFJLEVBQUUsTUFDN0MsTUFDQSxPQUFPLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQy9CO0FBQ0EsU0FBSyxNQUFNLEVBQUUsUUFBUSxjQUFjO0FBQ25DLFNBQUssU0FBUztBQUNkLEtBQUMsVUFBVSxTQUFTLFNBQVMsTUFBTSxFQUFFLGdCQUFpQixDQUFDLE1BQU07QUFDM0QsVUFBSSxPQUFPLE9BQU8sQ0FBQyxPQUFPLE1BQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJO0FBQ3BELFdBQUssUUFBUSxLQUFLLElBQUksUUFBUSxTQUFTLFNBQVMsSUFBSSxFQUFFLE1BQU0sTUFBTSxJQUFJO0FBQUEsS0FDdkU7QUFBQTtBQUdILFdBQVMsWUFBWSxHQUFHO0FBQ3RCLFFBQUksbUJBQW1CO0FBQ3ZCLFFBQUksb0JBQW9CO0FBQUEsTUFDdEIsVUFBVSxDQUFDO0FBQUEsSUFDYjtBQUNBLFFBQUksZUFBZSxTQUFTLEtBQUssTUFBTSxtQkFBbUIsZ0JBQWdCO0FBQzFFLFlBQVEsY0FBYyxtQkFBbUIsZ0JBQWdCO0FBQ3pELFdBQU87QUFBQTtBQUdULFdBQVMsY0FBYyxHQUFHO0FBQ3hCLFFBQUksUUFBUTtBQUFBLE1BQ1YsVUFBVSxDQUFDO0FBQUEsSUFDYjtBQUVBLFFBQUksT0FBTyxTQUFTLEtBQUssTUFBTSxLQUFLO0FBQ3BDLFlBQVEsTUFBTSxLQUFLO0FBRW5CLFdBQU87QUFBQTtBQUdULE1BQUksNENBQTRDO0FBQ2hELFdBQVMsSUFBSSxHQUFHO0FBQ2QsU0FBSywyQ0FBMkM7QUFDOUMsY0FBUSxLQUNOLHdJQUNGO0FBQ0Esa0RBQTRDO0FBQUEsSUFDOUM7QUFDQSxXQUFPLGVBQWU7QUFBQTtBQUd4QixPQUFLLFdBQVcsYUFBYSxLQUFLO0FBQ2xDLE9BQUssYUFBYSxlQUFlLEtBQUs7QUFFdEMsU0FBTyxVQUFVO0FBRWpCLFNBQU8sUUFBUSxPQUFPO0FBQ3RCLFNBQU8sUUFBUSxXQUFXLEtBQUs7QUFDL0IsU0FBTyxRQUFRLGFBQWEsS0FBSztBQUFBOzs7O0FDM0RqQyxNQUFJLGFBQVksT0FBTztBQUN2QixNQUFJLG1CQUFtQixPQUFPO0FBQzlCLE1BQUkscUJBQW9CLE9BQU87QUFDL0IsTUFBSSxnQkFBZSxPQUFPLFVBQVU7QUFDcEMsTUFBSSxXQUFXLENBQUMsUUFBUSxRQUFRO0FBQzlCLGFBQVMsUUFBUTtBQUNmLGlCQUFVLFFBQVEsTUFBTSxFQUFFLEtBQUssSUFBSSxPQUFPLFlBQVksS0FBSyxDQUFDO0FBQUE7QUFFaEUsTUFBSSxjQUFjLENBQUMsSUFBSSxNQUFNLFFBQVEsU0FBUztBQUM1QyxRQUFJLGVBQWUsU0FBUyxtQkFBbUIsU0FBUyxZQUFZO0FBQ2xFLGVBQVMsT0FBTyxtQkFBa0IsSUFBSTtBQUNwQyxhQUFLLGNBQWEsS0FBSyxJQUFJLEdBQUcsS0FBSyxRQUFRO0FBQ3pDLHFCQUFVLElBQUksS0FBSyxFQUFFLEtBQUssTUFBTSxLQUFLLE1BQU0sY0FBYyxPQUFPLGlCQUFpQixNQUFNLEdBQUcsTUFBTSxLQUFLLFdBQVcsQ0FBQztBQUFBLElBQ3ZIO0FBQ0EsV0FBTztBQUFBO0FBRVQsTUFBSSxlQUFlLENBQUMsUUFBUSxZQUFZLFdBQVUsQ0FBQyxHQUFHLGNBQWMsRUFBRSxPQUFPLEtBQUssQ0FBQyxHQUFHLEdBQUc7QUFHekYsTUFBSSxtQkFBbUIsQ0FBQztBQUN4QixXQUFTLGtCQUFrQjtBQUFBLElBQ3pCLFVBQVUsTUFBTTtBQUFBLEVBQ2xCLENBQUM7QUFDRCxTQUFPLFVBQVUsYUFBYSxnQkFBZ0I7QUFHOUMsTUFBSTtBQUdKLE1BQUksVUFBVTtBQUdkLE1BQUksWUFBWSx1QkFBdUIsWUFBWSxHQUFHLDRCQUE0QixjQUFjO0FBQ2hHLE1BQUksV0FBVztBQUFBLElBQ2IsUUFBUTtBQUFBLElBQ1IsU0FBUztBQUFBLElBQ1QsU0FBUztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsY0FBYztBQUFBLElBQ2hCO0FBQUEsSUFDQSxXQUFXO0FBQUEsTUFDVCxRQUFRO0FBQUEsSUFDVjtBQUFBLEVBQ0Y7QUFHQSxXQUFTLGFBQWEsQ0FBQyxRQUFRO0FBQzdCLFNBQUssUUFBUTtBQUNYLGFBQU8sQ0FBQztBQUFBLElBQ1Y7QUFDQSxXQUFPLE9BQU8sS0FBSyxNQUFNLEVBQUUsT0FBTyxDQUFDLFFBQVEsUUFBUTtBQUNqRCxhQUFPLElBQUksWUFBWSxLQUFLLE9BQU87QUFDbkMsYUFBTztBQUFBLE9BQ04sQ0FBQyxDQUFDO0FBQUE7QUFJUCxXQUFTLGFBQWEsQ0FBQyxPQUFPO0FBQzVCLGVBQVcsVUFBVSxZQUFZLFVBQVU7QUFDekMsYUFBTztBQUNULFFBQUksT0FBTyxVQUFVLFNBQVMsS0FBSyxLQUFLLE1BQU07QUFDNUMsYUFBTztBQUNULFVBQU0sUUFBUSxPQUFPLGVBQWUsS0FBSztBQUN6QyxRQUFJLFVBQVU7QUFDWixhQUFPO0FBQ1QsVUFBTSxPQUFPLE9BQU8sVUFBVSxlQUFlLEtBQUssT0FBTyxhQUFhLEtBQUssTUFBTTtBQUNqRixrQkFBYyxTQUFTLGNBQWMsZ0JBQWdCLFFBQVEsU0FBUyxVQUFVLEtBQUssSUFBSSxNQUFNLFNBQVMsVUFBVSxLQUFLLEtBQUs7QUFBQTtBQUk5SCxXQUFTLFNBQVMsQ0FBQyxVQUFVLFNBQVM7QUFDcEMsVUFBTSxTQUFTLE9BQU8sT0FBTyxDQUFDLEdBQUcsUUFBUTtBQUN6QyxXQUFPLEtBQUssT0FBTyxFQUFFLFFBQVEsQ0FBQyxRQUFRO0FBQ3BDLFVBQUksY0FBYyxRQUFRLElBQUksR0FBRztBQUMvQixjQUFNLE9BQU87QUFDWCxpQkFBTyxPQUFPLFFBQVEsR0FBRyxNQUFNLFFBQVEsS0FBSyxDQUFDO0FBQUE7QUFFN0MsaUJBQU8sT0FBTyxVQUFVLFNBQVMsTUFBTSxRQUFRLElBQUk7QUFBQSxNQUN2RCxPQUFPO0FBQ0wsZUFBTyxPQUFPLFFBQVEsR0FBRyxNQUFNLFFBQVEsS0FBSyxDQUFDO0FBQUE7QUFBQSxLQUVoRDtBQUNELFdBQU87QUFBQTtBQUlULFdBQVMseUJBQXlCLENBQUMsS0FBSztBQUN0QyxlQUFXLE9BQU8sS0FBSztBQUNyQixVQUFJLElBQUksU0FBYyxXQUFHO0FBQ3ZCLGVBQU8sSUFBSTtBQUFBLE1BQ2I7QUFBQSxJQUNGO0FBQ0EsV0FBTztBQUFBO0FBSVQsV0FBUyxLQUFLLENBQUMsVUFBVSxPQUFPLFNBQVM7QUFDdkMsZUFBVyxVQUFVLFVBQVU7QUFDN0IsV0FBSyxRQUFRLE9BQU8sTUFBTSxNQUFNLEdBQUc7QUFDbkMsZ0JBQVUsT0FBTyxPQUFPLE1BQU0sRUFBRSxRQUFRLElBQUksSUFBSSxFQUFFLEtBQUssT0FBTyxHQUFHLE9BQU87QUFBQSxJQUMxRSxPQUFPO0FBQ0wsZ0JBQVUsT0FBTyxPQUFPLENBQUMsR0FBRyxLQUFLO0FBQUE7QUFFbkMsWUFBUSxVQUFVLGNBQWMsUUFBUSxPQUFPO0FBQy9DLDhCQUEwQixPQUFPO0FBQ2pDLDhCQUEwQixRQUFRLE9BQU87QUFDekMsVUFBTSxnQkFBZ0IsVUFBVSxZQUFZLENBQUMsR0FBRyxPQUFPO0FBQ3ZELFFBQUksUUFBUSxRQUFRLFlBQVk7QUFDOUIsVUFBSSxZQUFZLFNBQVMsVUFBVSxVQUFVLFFBQVE7QUFDbkQsc0JBQWMsVUFBVSxXQUFXLFNBQVMsVUFBVSxTQUFTLE9BQzdELENBQUMsYUFBYSxjQUFjLFVBQVUsU0FBUyxTQUFTLE9BQU8sQ0FDakUsRUFBRSxPQUFPLGNBQWMsVUFBVSxRQUFRO0FBQUEsTUFDM0M7QUFDQSxvQkFBYyxVQUFVLFlBQVksY0FBYyxVQUFVLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLFFBQVEsUUFBUSxZQUFZLEVBQUUsQ0FBQztBQUFBLElBQzlIO0FBQ0EsV0FBTztBQUFBO0FBSVQsV0FBUyxrQkFBa0IsQ0FBQyxLQUFLLFlBQVk7QUFDM0MsVUFBTSxZQUFZLEtBQUssS0FBSyxHQUFHLElBQUksTUFBTTtBQUN6QyxVQUFNLFFBQVEsT0FBTyxLQUFLLFVBQVU7QUFDcEMsUUFBSSxNQUFNLFdBQVcsR0FBRztBQUN0QixhQUFPO0FBQUEsSUFDVDtBQUNBLFdBQU8sTUFBTSxZQUFZLE1BQU0sSUFBSSxDQUFDLFNBQVM7QUFDM0MsVUFBSSxTQUFTLEtBQUs7QUFDaEIsZUFBTyxPQUFPLFdBQVcsRUFBRSxNQUFNLEdBQUcsRUFBRSxJQUFJLGtCQUFrQixFQUFFLEtBQUssR0FBRztBQUFBLE1BQ3hFO0FBQ0EsYUFBTyxHQUFHLFFBQVEsbUJBQW1CLFdBQVcsS0FBSztBQUFBLEtBQ3RELEVBQUUsS0FBSyxHQUFHO0FBQUE7QUFJYixNQUFJLG1CQUFtQjtBQUN2QixXQUFTLGNBQWMsQ0FBQyxjQUFjO0FBQ3BDLFdBQU8sYUFBYSxRQUFRLGNBQWMsRUFBRSxFQUFFLE1BQU0sR0FBRztBQUFBO0FBRXpELFdBQVMsdUJBQXVCLENBQUMsS0FBSztBQUNwQyxVQUFNLFVBQVUsSUFBSSxNQUFNLGdCQUFnQjtBQUMxQyxTQUFLLFNBQVM7QUFDWixhQUFPLENBQUM7QUFBQSxJQUNWO0FBQ0EsV0FBTyxRQUFRLElBQUksY0FBYyxFQUFFLE9BQU8sQ0FBQyxHQUFHLE1BQU0sRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7QUFBQTtBQUlyRSxXQUFTLElBQUksQ0FBQyxRQUFRLFlBQVk7QUFDaEMsVUFBTSxTQUFTLEVBQUUsV0FBVyxLQUFLO0FBQ2pDLGVBQVcsT0FBTyxPQUFPLEtBQUssTUFBTSxHQUFHO0FBQ3JDLFVBQUksV0FBVyxRQUFRLEdBQUcsTUFBTSxJQUFJO0FBQ2xDLGVBQU8sT0FBTyxPQUFPO0FBQUEsTUFDdkI7QUFBQSxJQUNGO0FBQ0EsV0FBTztBQUFBO0FBSVQsV0FBUyxjQUFjLENBQUMsS0FBSztBQUMzQixXQUFPLElBQUksTUFBTSxvQkFBb0IsRUFBRSxZQUFZLENBQUMsTUFBTTtBQUN4RCxXQUFLLGVBQWUsS0FBSyxJQUFJLEdBQUc7QUFDOUIsZUFBTyxVQUFVLElBQUksRUFBRSxRQUFRLFFBQVEsR0FBRyxFQUFFLFFBQVEsUUFBUSxHQUFHO0FBQUEsTUFDakU7QUFDQSxhQUFPO0FBQUEsS0FDUixFQUFFLEtBQUssRUFBRTtBQUFBO0FBRVosV0FBUyxnQkFBZ0IsQ0FBQyxLQUFLO0FBQzdCLFdBQU8sbUJBQW1CLEdBQUcsRUFBRSxRQUFRLG9CQUFvQixDQUFDLEdBQUc7QUFDN0QsYUFBTyxNQUFNLEVBQUUsV0FBVyxDQUFDLEVBQUUsU0FBUyxFQUFFLEVBQUUsWUFBWTtBQUFBLEtBQ3ZEO0FBQUE7QUFFSCxXQUFTLFdBQVcsQ0FBQyxVQUFVLE9BQU8sS0FBSztBQUN6QyxZQUFRLGFBQWEsT0FBTyxhQUFhLE1BQU0sZUFBZSxLQUFLLElBQUksaUJBQWlCLEtBQUs7QUFDN0YsUUFBSSxLQUFLO0FBQ1AsYUFBTyxpQkFBaUIsR0FBRyxJQUFJLE1BQU07QUFBQSxJQUN2QyxPQUFPO0FBQ0wsYUFBTztBQUFBO0FBQUE7QUFHWCxXQUFTLFNBQVMsQ0FBQyxPQUFPO0FBQ3hCLFdBQU8sVUFBZSxhQUFLLFVBQVU7QUFBQTtBQUV2QyxXQUFTLGFBQWEsQ0FBQyxVQUFVO0FBQy9CLFdBQU8sYUFBYSxPQUFPLGFBQWEsT0FBTyxhQUFhO0FBQUE7QUFFOUQsV0FBUyxTQUFTLENBQUMsU0FBUyxVQUFVLEtBQUssVUFBVTtBQUNuRCxRQUFJLFFBQVEsUUFBUSxNQUFNLFNBQVMsQ0FBQztBQUNwQyxRQUFJLFVBQVUsS0FBSyxLQUFLLFVBQVUsSUFBSTtBQUNwQyxpQkFBVyxVQUFVLG1CQUFtQixVQUFVLG1CQUFtQixVQUFVLFdBQVc7QUFDeEYsZ0JBQVEsTUFBTSxTQUFTO0FBQ3ZCLFlBQUksWUFBWSxhQUFhLEtBQUs7QUFDaEMsa0JBQVEsTUFBTSxVQUFVLEdBQUcsU0FBUyxVQUFVLEVBQUUsQ0FBQztBQUFBLFFBQ25EO0FBQ0EsZUFBTyxLQUNMLFlBQVksVUFBVSxPQUFPLGNBQWMsUUFBUSxJQUFJLE1BQU0sRUFBRSxDQUNqRTtBQUFBLE1BQ0YsT0FBTztBQUNMLFlBQUksYUFBYSxLQUFLO0FBQ3BCLGNBQUksTUFBTSxRQUFRLEtBQUssR0FBRztBQUN4QixrQkFBTSxPQUFPLFNBQVMsRUFBRSxnQkFBZ0IsQ0FBQyxRQUFRO0FBQy9DLHFCQUFPLEtBQ0wsWUFBWSxVQUFVLFFBQVEsY0FBYyxRQUFRLElBQUksTUFBTSxFQUFFLENBQ2xFO0FBQUEsYUFDRDtBQUFBLFVBQ0gsT0FBTztBQUNMLG1CQUFPLEtBQUssS0FBSyxFQUFFLGdCQUFnQixDQUFDLEdBQUc7QUFDckMsa0JBQUksVUFBVSxNQUFNLEVBQUUsR0FBRztBQUN2Qix1QkFBTyxLQUFLLFlBQVksVUFBVSxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQUEsY0FDaEQ7QUFBQSxhQUNEO0FBQUE7QUFBQSxRQUVMLE9BQU87QUFDTCxnQkFBTSxNQUFNLENBQUM7QUFDYixjQUFJLE1BQU0sUUFBUSxLQUFLLEdBQUc7QUFDeEIsa0JBQU0sT0FBTyxTQUFTLEVBQUUsZ0JBQWdCLENBQUMsUUFBUTtBQUMvQyxrQkFBSSxLQUFLLFlBQVksVUFBVSxNQUFNLENBQUM7QUFBQSxhQUN2QztBQUFBLFVBQ0gsT0FBTztBQUNMLG1CQUFPLEtBQUssS0FBSyxFQUFFLGdCQUFnQixDQUFDLEdBQUc7QUFDckMsa0JBQUksVUFBVSxNQUFNLEVBQUUsR0FBRztBQUN2QixvQkFBSSxLQUFLLGlCQUFpQixDQUFDLENBQUM7QUFDNUIsb0JBQUksS0FBSyxZQUFZLFVBQVUsTUFBTSxHQUFHLFNBQVMsQ0FBQyxDQUFDO0FBQUEsY0FDckQ7QUFBQSxhQUNEO0FBQUE7QUFFSCxjQUFJLGNBQWMsUUFBUSxHQUFHO0FBQzNCLG1CQUFPLEtBQUssaUJBQWlCLEdBQUcsSUFBSSxNQUFNLElBQUksS0FBSyxHQUFHLENBQUM7QUFBQSxVQUN6RCxXQUFXLElBQUksV0FBVyxHQUFHO0FBQzNCLG1CQUFPLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQztBQUFBLFVBQzNCO0FBQUE7QUFBQTtBQUFBLElBR04sT0FBTztBQUNMLFVBQUksYUFBYSxLQUFLO0FBQ3BCLFlBQUksVUFBVSxLQUFLLEdBQUc7QUFDcEIsaUJBQU8sS0FBSyxpQkFBaUIsR0FBRyxDQUFDO0FBQUEsUUFDbkM7QUFBQSxNQUNGLFdBQVcsVUFBVSxPQUFPLGFBQWEsT0FBTyxhQUFhLE1BQU07QUFDakUsZUFBTyxLQUFLLGlCQUFpQixHQUFHLElBQUksR0FBRztBQUFBLE1BQ3pDLFdBQVcsVUFBVSxJQUFJO0FBQ3ZCLGVBQU8sS0FBSyxFQUFFO0FBQUEsTUFDaEI7QUFBQTtBQUVGLFdBQU87QUFBQTtBQUVULFdBQVMsUUFBUSxDQUFDLFVBQVU7QUFDMUIsV0FBTztBQUFBLE1BQ0wsUUFBUSxPQUFPLEtBQUssTUFBTSxRQUFRO0FBQUEsSUFDcEM7QUFBQTtBQUVGLFdBQVMsTUFBTSxDQUFDLFVBQVUsU0FBUztBQUNqQyxRQUFJLFlBQVksQ0FBQyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxHQUFHO0FBQ2xELGVBQVcsU0FBUyxRQUNsQixzQ0FDUSxDQUFDLEdBQUcsWUFBWSxTQUFTO0FBQy9CLFVBQUksWUFBWTtBQUNkLFlBQUksV0FBVztBQUNmLGNBQU0sU0FBUyxDQUFDO0FBQ2hCLFlBQUksVUFBVSxRQUFRLFdBQVcsT0FBTyxDQUFDLENBQUMsTUFBTSxJQUFJO0FBQ2xELHFCQUFXLFdBQVcsT0FBTyxDQUFDO0FBQzlCLHVCQUFhLFdBQVcsT0FBTyxDQUFDO0FBQUEsUUFDbEM7QUFDQSxtQkFBVyxNQUFNLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxVQUFVO0FBQ2hELGNBQUksTUFBTSw0QkFBNEIsS0FBSyxRQUFRO0FBQ25ELGlCQUFPLEtBQUssVUFBVSxTQUFTLFVBQVUsSUFBSSxJQUFJLElBQUksTUFBTSxJQUFJLEVBQUUsQ0FBQztBQUFBLFNBQ25FO0FBQ0QsWUFBSSxZQUFZLGFBQWEsS0FBSztBQUNoQyxjQUFJLFlBQVk7QUFDaEIsY0FBSSxhQUFhLEtBQUs7QUFDcEIsd0JBQVk7QUFBQSxVQUNkLFdBQVcsYUFBYSxLQUFLO0FBQzNCLHdCQUFZO0FBQUEsVUFDZDtBQUNBLGtCQUFRLE9BQU8sV0FBVyxJQUFJLFdBQVcsTUFBTSxPQUFPLEtBQUssU0FBUztBQUFBLFFBQ3RFLE9BQU87QUFDTCxpQkFBTyxPQUFPLEtBQUssR0FBRztBQUFBO0FBQUEsTUFFMUIsT0FBTztBQUNMLGVBQU8sZUFBZSxPQUFPO0FBQUE7QUFBQSxLQUduQztBQUNBLFFBQUksYUFBYSxLQUFLO0FBQ3BCLGFBQU87QUFBQSxJQUNULE9BQU87QUFDTCxhQUFPLFNBQVMsUUFBUSxPQUFPLEVBQUU7QUFBQTtBQUFBO0FBS3JDLFdBQVMsS0FBSyxDQUFDLFNBQVM7QUFDdEIsUUFBSSxTQUFTLFFBQVEsT0FBTyxZQUFZO0FBQ3hDLFFBQUksT0FBTyxRQUFRLE9BQU8sS0FBSyxRQUFRLGdCQUFnQixNQUFNO0FBQzdELFFBQUksVUFBVSxPQUFPLE9BQU8sQ0FBQyxHQUFHLFFBQVEsT0FBTztBQUMvQyxRQUFJO0FBQ0osUUFBSSxhQUFhLEtBQUssU0FBUztBQUFBLE1BQzdCO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGLENBQUM7QUFDRCxVQUFNLG1CQUFtQix3QkFBd0IsR0FBRztBQUNwRCxVQUFNLFNBQVMsR0FBRyxFQUFFLE9BQU8sVUFBVTtBQUNyQyxTQUFLLFFBQVEsS0FBSyxHQUFHLEdBQUc7QUFDdEIsWUFBTSxRQUFRLFVBQVU7QUFBQSxJQUMxQjtBQUNBLFVBQU0sb0JBQW9CLE9BQU8sS0FBSyxPQUFPLEVBQUUsT0FBTyxDQUFDLFdBQVcsaUJBQWlCLFNBQVMsTUFBTSxDQUFDLEVBQUUsT0FBTyxTQUFTO0FBQ3JILFVBQU0sc0JBQXNCLEtBQUssWUFBWSxpQkFBaUI7QUFDOUQsVUFBTSxrQkFBa0IsNkJBQTZCLEtBQUssUUFBUSxNQUFNO0FBQ3hFLFNBQUssaUJBQWlCO0FBQ3BCLFVBQUksUUFBUSxVQUFVLFFBQVE7QUFDNUIsZ0JBQVEsU0FBUyxRQUFRLE9BQU8sTUFBTSxHQUFHLEVBQUUsSUFDekMsQ0FBQyxXQUFXLE9BQU8sUUFDakIsb0RBQ0EseUJBQXVCLFFBQVEsVUFBVSxRQUMzQyxDQUNGLEVBQUUsS0FBSyxHQUFHO0FBQUEsTUFDWjtBQUNBLFVBQUksSUFBSSxTQUFTLFVBQVUsR0FBRztBQUM1QixZQUFJLFFBQVEsVUFBVSxVQUFVLFFBQVE7QUFDdEMsZ0JBQU0sMkJBQTJCLFFBQVEsT0FBTyxNQUFNLHFCQUFxQixLQUFLLENBQUM7QUFDakYsa0JBQVEsU0FBUyx5QkFBeUIsT0FBTyxRQUFRLFVBQVUsUUFBUSxFQUFFLElBQUksQ0FBQyxZQUFZO0FBQzVGLGtCQUFNLFNBQVMsUUFBUSxVQUFVLFNBQVMsSUFBSSxRQUFRLFVBQVUsV0FBVztBQUMzRSxtQkFBTywwQkFBMEIsa0JBQWtCO0FBQUEsV0FDcEQsRUFBRSxLQUFLLEdBQUc7QUFBQSxRQUNiO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFDQSxRQUFJLENBQUMsT0FBTyxNQUFNLEVBQUUsU0FBUyxNQUFNLEdBQUc7QUFDcEMsWUFBTSxtQkFBbUIsS0FBSyxtQkFBbUI7QUFBQSxJQUNuRCxPQUFPO0FBQ0wsVUFBSSxVQUFVLHFCQUFxQjtBQUNqQyxlQUFPLG9CQUFvQjtBQUFBLE1BQzdCLE9BQU87QUFDTCxZQUFJLE9BQU8sS0FBSyxtQkFBbUIsRUFBRSxRQUFRO0FBQzNDLGlCQUFPO0FBQUEsUUFDVDtBQUFBO0FBQUE7QUFHSixTQUFLLFFBQVEsMEJBQTBCLFNBQVMsYUFBYTtBQUMzRCxjQUFRLGtCQUFrQjtBQUFBLElBQzVCO0FBQ0EsUUFBSSxDQUFDLFNBQVMsS0FBSyxFQUFFLFNBQVMsTUFBTSxZQUFZLFNBQVMsYUFBYTtBQUNwRSxhQUFPO0FBQUEsSUFDVDtBQUNBLFdBQU8sT0FBTyxPQUNaLEVBQUUsUUFBUSxLQUFLLFFBQVEsVUFDaEIsU0FBUyxjQUFjLEVBQUUsS0FBSyxJQUFJLE1BQ3pDLFFBQVEsVUFBVSxFQUFFLFNBQVMsUUFBUSxRQUFRLElBQUksSUFDbkQ7QUFBQTtBQUlGLFdBQVMsb0JBQW9CLENBQUMsVUFBVSxPQUFPLFNBQVM7QUFDdEQsV0FBTyxNQUFNLE1BQU0sVUFBVSxPQUFPLE9BQU8sQ0FBQztBQUFBO0FBSTlDLFdBQVMsWUFBWSxDQUFDLGFBQWEsYUFBYTtBQUM5QyxVQUFNLFlBQVksTUFBTSxhQUFhLFdBQVc7QUFDaEQsVUFBTSxZQUFZLHFCQUFxQixLQUFLLE1BQU0sU0FBUztBQUMzRCxXQUFPLE9BQU8sT0FBTyxXQUFXO0FBQUEsTUFDOUIsVUFBVTtBQUFBLE1BQ1YsVUFBVSxhQUFhLEtBQUssTUFBTSxTQUFTO0FBQUEsTUFDM0MsT0FBTyxNQUFNLEtBQUssTUFBTSxTQUFTO0FBQUEsTUFDakM7QUFBQSxJQUNGLENBQUM7QUFBQTtBQUlILE1BQUksV0FBVyxhQUFhLE1BQU0sUUFBUTtBQUFBOzs7O0FDblgxQyxTQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFFNUQ7QUFBQSxRQUFNLG9CQUFvQixNQUFNO0FBQUEsSUFDOUIsV0FBVyxDQUFDLFNBQVM7QUFDbkIsWUFBTSxPQUFPO0FBSWIsVUFBSSxNQUFNLG1CQUFtQjtBQUMzQixjQUFNLGtCQUFrQixNQUFNLEtBQUssV0FBVztBQUFBLE1BQ2hEO0FBRUEsV0FBSyxPQUFPO0FBQUE7QUFBQSxFQUdoQjtBQUVBLEVBQVEsc0JBQWM7QUFBQTs7OztBQ2R0QixTQUFPLFVBQVU7QUFDakIsV0FBUyxNQUFPLENBQUMsSUFBSSxJQUFJO0FBQ3ZCLFFBQUksTUFBTTtBQUFJLGFBQU8sT0FBTyxFQUFFLEVBQUUsRUFBRTtBQUVsQyxlQUFXLE9BQU87QUFDaEIsWUFBTSxJQUFJLFVBQVUsdUJBQXVCO0FBRTdDLFdBQU8sS0FBSyxFQUFFLEVBQUUsZ0JBQWlCLENBQUMsR0FBRztBQUNuQyxjQUFRLEtBQUssR0FBRztBQUFBLEtBQ2pCO0FBRUQsV0FBTztBQUVQLGFBQVMsT0FBTyxHQUFHO0FBQ2pCLFVBQUksT0FBTyxJQUFJLE1BQU0sVUFBVSxNQUFNO0FBQ3JDLGVBQVMsSUFBSSxFQUFHLElBQUksS0FBSyxRQUFRLEtBQUs7QUFDcEMsYUFBSyxLQUFLLFVBQVU7QUFBQSxNQUN0QjtBQUNBLFVBQUksTUFBTSxHQUFHLE1BQU0sTUFBTSxJQUFJO0FBQzdCLFVBQUksTUFBSyxLQUFLLEtBQUssU0FBTztBQUMxQixpQkFBVyxRQUFRLGNBQWMsUUFBUSxLQUFJO0FBQzNDLGVBQU8sS0FBSyxHQUFFLEVBQUUsZ0JBQWlCLENBQUMsR0FBRztBQUNuQyxjQUFJLEtBQUssSUFBRztBQUFBLFNBQ2I7QUFBQSxNQUNIO0FBQ0EsYUFBTztBQUFBO0FBQUE7QUFBQTs7OztBQzlCWCxNQUFJO0FBQ0osU0FBTyxVQUFVLE9BQU8sSUFBSTtBQUM1QixTQUFPLFFBQVEsU0FBUyxPQUFPLFVBQVU7QUFFekMsT0FBSyxRQUFRLGFBQWMsR0FBRztBQUM1QixXQUFPLGVBQWUsU0FBUyxXQUFXLFFBQVE7QUFBQSxNQUNoRCxlQUFnQixHQUFHO0FBQ2pCLGVBQU8sS0FBSyxJQUFJO0FBQUE7QUFBQSxNQUVsQixjQUFjO0FBQUEsSUFDaEIsQ0FBQztBQUVELFdBQU8sZUFBZSxTQUFTLFdBQVcsY0FBYztBQUFBLE1BQ3RELGVBQWdCLEdBQUc7QUFDakIsZUFBTyxXQUFXLElBQUk7QUFBQTtBQUFBLE1BRXhCLGNBQWM7QUFBQSxJQUNoQixDQUFDO0FBQUEsR0FDRjtBQUVELFdBQVMsSUFBSyxDQUFDLElBQUk7QUFDakIsUUFBSSxZQUFhLEdBQUc7QUFDbEIsVUFBSSxFQUFFO0FBQVEsZUFBTyxFQUFFO0FBQ3ZCLFFBQUUsU0FBUztBQUNYLGFBQU8sRUFBRSxRQUFRLEdBQUcsTUFBTSxNQUFNLFNBQVM7QUFBQTtBQUUzQyxNQUFFLFNBQVM7QUFDWCxXQUFPO0FBQUE7QUFHVCxXQUFTLFVBQVcsQ0FBQyxJQUFJO0FBQ3ZCLFFBQUksWUFBYSxHQUFHO0FBQ2xCLFVBQUksRUFBRTtBQUNKLGNBQU0sSUFBSSxNQUFNLEVBQUUsU0FBUztBQUM3QixRQUFFLFNBQVM7QUFDWCxhQUFPLEVBQUUsUUFBUSxHQUFHLE1BQU0sTUFBTSxTQUFTO0FBQUE7QUFFM0MsUUFBSSxPQUFPLEdBQUcsUUFBUTtBQUN0QixNQUFFLFlBQVksT0FBTztBQUNyQixNQUFFLFNBQVM7QUFDWCxXQUFPO0FBQUE7QUFBQTs7OztBQ3ZDVCxNQUFJLFlBQVcsT0FBTztBQUN0QixNQUFJLGFBQVksT0FBTztBQUN2QixNQUFJLG1CQUFtQixPQUFPO0FBQzlCLE1BQUkscUJBQW9CLE9BQU87QUFDL0IsTUFBSSxnQkFBZSxPQUFPO0FBQzFCLE1BQUksZ0JBQWUsT0FBTyxVQUFVO0FBQ3BDLE1BQUksV0FBVyxDQUFDLFFBQVEsUUFBUTtBQUM5QixhQUFTLFFBQVE7QUFDZixpQkFBVSxRQUFRLE1BQU0sRUFBRSxLQUFLLElBQUksT0FBTyxZQUFZLEtBQUssQ0FBQztBQUFBO0FBRWhFLE1BQUksY0FBYyxDQUFDLElBQUksTUFBTSxRQUFRLFNBQVM7QUFDNUMsUUFBSSxlQUFlLFNBQVMsbUJBQW1CLFNBQVMsWUFBWTtBQUNsRSxlQUFTLE9BQU8sbUJBQWtCLElBQUk7QUFDcEMsYUFBSyxjQUFhLEtBQUssSUFBSSxHQUFHLEtBQUssUUFBUTtBQUN6QyxxQkFBVSxJQUFJLEtBQUssRUFBRSxLQUFLLE1BQU0sS0FBSyxNQUFNLGNBQWMsT0FBTyxpQkFBaUIsTUFBTSxHQUFHLE1BQU0sS0FBSyxXQUFXLENBQUM7QUFBQSxJQUN2SDtBQUNBLFdBQU87QUFBQTtBQUVULE1BQUksV0FBVSxDQUFDLEtBQUssWUFBWSxZQUFZLFNBQVMsT0FBTyxPQUFPLFVBQVMsY0FBYSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsWUFLbkcsZUFBZSxRQUFRLElBQUksYUFBYSxXQUFVLFFBQVEsV0FBVyxFQUFFLE9BQU8sS0FBSyxZQUFZLEtBQUssQ0FBQyxJQUFJLFFBQ3pHLEdBQ0Y7QUFDQSxNQUFJLGVBQWUsQ0FBQyxRQUFRLFlBQVksV0FBVSxDQUFDLEdBQUcsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDLEdBQUcsR0FBRztBQUd6RixNQUFJLG1CQUFtQixDQUFDO0FBQ3hCLFdBQVMsa0JBQWtCO0FBQUEsSUFDekIsY0FBYyxNQUFNO0FBQUEsRUFDdEIsQ0FBQztBQUNELFNBQU8sVUFBVSxhQUFhLGdCQUFnQjtBQUM5QyxNQUFJO0FBQ0osTUFBSSxjQUFjLHVCQUF1QjtBQUN6QyxNQUFJLGVBQWUsR0FBRyxZQUFZLFNBQVMsQ0FBQyxnQkFBZ0IsUUFBUSxLQUFLLFdBQVcsQ0FBQztBQUNyRixNQUFJLGtCQUFrQixHQUFHLFlBQVksU0FBUyxDQUFDLGdCQUFnQixRQUFRLEtBQUssV0FBVyxDQUFDO0FBQ3hGLE1BQUksZUFBZSxjQUFjLE1BQU07QUFBQSxJQUNyQyxXQUFXLENBQUMsU0FBUyxZQUFZLFNBQVM7QUFDeEMsWUFBTSxPQUFPO0FBQ2IsVUFBSSxNQUFNLG1CQUFtQjtBQUMzQixjQUFNLGtCQUFrQixNQUFNLEtBQUssV0FBVztBQUFBLE1BQ2hEO0FBQ0EsV0FBSyxPQUFPO0FBQ1osV0FBSyxTQUFTO0FBQ2QsVUFBSTtBQUNKLFVBQUksYUFBYSxrQkFBa0IsUUFBUSxZQUFZLGFBQWE7QUFDbEUsa0JBQVUsUUFBUTtBQUFBLE1BQ3BCO0FBQ0EsVUFBSSxjQUFjLFNBQVM7QUFDekIsYUFBSyxXQUFXLFFBQVE7QUFDeEIsa0JBQVUsUUFBUSxTQUFTO0FBQUEsTUFDN0I7QUFDQSxZQUFNLGNBQWMsT0FBTyxPQUFPLENBQUMsR0FBRyxRQUFRLE9BQU87QUFDckQsVUFBSSxRQUFRLFFBQVEsUUFBUSxlQUFlO0FBQ3pDLG9CQUFZLFVBQVUsT0FBTyxPQUFPLENBQUMsR0FBRyxRQUFRLFFBQVEsU0FBUztBQUFBLFVBQy9ELGVBQWUsUUFBUSxRQUFRLFFBQVEsY0FBYyxRQUNuRCxRQUNBLGFBQ0Y7QUFBQSxRQUNGLENBQUM7QUFBQSxNQUNIO0FBQ0Esa0JBQVksTUFBTSxZQUFZLElBQUksUUFBUSx3QkFBd0IsMEJBQTBCLEVBQUUsUUFBUSx1QkFBdUIseUJBQXlCO0FBQ3RKLFdBQUssVUFBVTtBQUNmLGFBQU8sZUFBZSxNQUFNLFFBQVE7QUFBQSxRQUNsQyxHQUFHLEdBQUc7QUFDSixzQkFDRSxJQUFJLG1CQUFtQixZQUNyQiwwRUFDRixDQUNGO0FBQ0EsaUJBQU87QUFBQTtBQUFBLE1BRVgsQ0FBQztBQUNELGFBQU8sZUFBZSxNQUFNLFdBQVc7QUFBQSxRQUNyQyxHQUFHLEdBQUc7QUFDSix5QkFDRSxJQUFJLG1CQUFtQixZQUNyQix1RkFDRixDQUNGO0FBQ0EsaUJBQU8sV0FBVyxDQUFDO0FBQUE7QUFBQSxNQUV2QixDQUFDO0FBQUE7QUFBQSxFQUVMO0FBQUE7Ozs7QUN0RkEsTUFBSSxhQUFZLE9BQU87QUFDdkIsTUFBSSxtQkFBbUIsT0FBTztBQUM5QixNQUFJLHFCQUFvQixPQUFPO0FBQy9CLE1BQUksZ0JBQWUsT0FBTyxVQUFVO0FBQ3BDLE1BQUksV0FBVyxDQUFDLFFBQVEsUUFBUTtBQUM5QixhQUFTLFFBQVE7QUFDZixpQkFBVSxRQUFRLE1BQU0sRUFBRSxLQUFLLElBQUksT0FBTyxZQUFZLEtBQUssQ0FBQztBQUFBO0FBRWhFLE1BQUksY0FBYyxDQUFDLElBQUksTUFBTSxRQUFRLFNBQVM7QUFDNUMsUUFBSSxlQUFlLFNBQVMsbUJBQW1CLFNBQVMsWUFBWTtBQUNsRSxlQUFTLE9BQU8sbUJBQWtCLElBQUk7QUFDcEMsYUFBSyxjQUFhLEtBQUssSUFBSSxHQUFHLEtBQUssUUFBUTtBQUN6QyxxQkFBVSxJQUFJLEtBQUssRUFBRSxLQUFLLE1BQU0sS0FBSyxNQUFNLGNBQWMsT0FBTyxpQkFBaUIsTUFBTSxHQUFHLE1BQU0sS0FBSyxXQUFXLENBQUM7QUFBQSxJQUN2SDtBQUNBLFdBQU87QUFBQTtBQUVULE1BQUksZUFBZSxDQUFDLFFBQVEsWUFBWSxXQUFVLENBQUMsR0FBRyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUMsR0FBRyxHQUFHO0FBR3pGLE1BQUksbUJBQW1CLENBQUM7QUFDeEIsV0FBUyxrQkFBa0I7QUFBQSxJQUN6QixTQUFTLE1BQU07QUFBQSxFQUNqQixDQUFDO0FBQ0QsU0FBTyxVQUFVLGFBQWEsZ0JBQWdCO0FBQzlDLE1BQUk7QUFDSixNQUFJO0FBR0osTUFBSSxVQUFVO0FBR2QsV0FBUyxhQUFhLENBQUMsT0FBTztBQUM1QixlQUFXLFVBQVUsWUFBWSxVQUFVO0FBQ3pDLGFBQU87QUFDVCxRQUFJLE9BQU8sVUFBVSxTQUFTLEtBQUssS0FBSyxNQUFNO0FBQzVDLGFBQU87QUFDVCxVQUFNLFFBQVEsT0FBTyxlQUFlLEtBQUs7QUFDekMsUUFBSSxVQUFVO0FBQ1osYUFBTztBQUNULFVBQU0sT0FBTyxPQUFPLFVBQVUsZUFBZSxLQUFLLE9BQU8sYUFBYSxLQUFLLE1BQU07QUFDakYsa0JBQWMsU0FBUyxjQUFjLGdCQUFnQixRQUFRLFNBQVMsVUFBVSxLQUFLLElBQUksTUFBTSxTQUFTLFVBQVUsS0FBSyxLQUFLO0FBQUE7QUFJOUgsTUFBSTtBQUdKLFdBQVMsaUJBQWlCLENBQUMsVUFBVTtBQUNuQyxXQUFPLFNBQVMsWUFBWTtBQUFBO0FBSTlCLFdBQVMsWUFBWSxDQUFDLGdCQUFnQjtBQUNwQyxRQUFJLElBQUksSUFBSSxJQUFJO0FBQ2hCLFVBQU0sTUFBTSxlQUFlLFdBQVcsZUFBZSxRQUFRLE1BQU0sZUFBZSxRQUFRLE1BQU07QUFDaEcsVUFBTSw2QkFBNkIsS0FBSyxlQUFlLFlBQVksT0FBWSxZQUFJLEdBQUcsOEJBQThCO0FBQ3BILFFBQUksY0FBYyxlQUFlLElBQUksS0FBSyxNQUFNLFFBQVEsZUFBZSxJQUFJLEdBQUc7QUFDNUUscUJBQWUsT0FBTyxLQUFLLFVBQVUsZUFBZSxJQUFJO0FBQUEsSUFDMUQ7QUFDQSxRQUFJLFVBQVUsQ0FBQztBQUNmLFFBQUk7QUFDSixRQUFJO0FBQ0osVUFBTSxVQUFVO0FBQ2hCLFNBQUssS0FBSyxlQUFlLFlBQVksT0FBWSxZQUFJLEdBQUcsT0FBTztBQUM3RCxjQUFRLGVBQWUsUUFBUTtBQUFBLElBQ2pDO0FBQ0EsU0FBSyxPQUFPO0FBQ1YsWUFBTSxJQUFJLE1BQ1IsZ0tBQ0Y7QUFBQSxJQUNGO0FBQ0EsV0FBTyxNQUFNLGVBQWUsS0FBSztBQUFBLE1BQy9CLFFBQVEsZUFBZTtBQUFBLE1BQ3ZCLE1BQU0sZUFBZTtBQUFBLE1BQ3JCLFdBQVcsS0FBSyxlQUFlLFlBQVksT0FBWSxZQUFJLEdBQUc7QUFBQSxNQUM5RCxTQUFTLGVBQWU7QUFBQSxNQUN4QixTQUFTLEtBQUssZUFBZSxZQUFZLE9BQVksWUFBSSxHQUFHO0FBQUEsU0FHekQsZUFBZSxRQUFRLEVBQUUsUUFBUSxPQUFPO0FBQUEsSUFDN0MsQ0FBQyxFQUFFLEtBQUssT0FBTyxhQUFhO0FBQzFCLFlBQU0sU0FBUztBQUNmLGVBQVMsU0FBUztBQUNsQixpQkFBVyxlQUFlLFNBQVMsU0FBUztBQUMxQyxnQkFBUSxZQUFZLE1BQU0sWUFBWTtBQUFBLE1BQ3hDO0FBQ0EsVUFBSSxpQkFBaUIsU0FBUztBQUM1QixjQUFNLFVBQVUsUUFBUSxRQUFRLFFBQVEsS0FBSyxNQUFNLDhCQUE4QjtBQUNqRixjQUFNLGtCQUFrQixXQUFXLFFBQVEsSUFBSTtBQUMvQyxZQUFJLEtBQ0YsdUJBQXVCLGVBQWUsVUFBVSxlQUFlLHdEQUF3RCxRQUFRLFNBQVMsa0JBQWtCLFNBQVMsb0JBQW9CLElBQ3pMO0FBQUEsTUFDRjtBQUNBLFVBQUksV0FBVyxPQUFPLFdBQVcsS0FBSztBQUNwQztBQUFBLE1BQ0Y7QUFDQSxVQUFJLGVBQWUsV0FBVyxRQUFRO0FBQ3BDLFlBQUksU0FBUyxLQUFLO0FBQ2hCO0FBQUEsUUFDRjtBQUNBLGNBQU0sSUFBSSxxQkFBcUIsYUFBYSxTQUFTLFlBQVksUUFBUTtBQUFBLFVBQ3ZFLFVBQVU7QUFBQSxZQUNSO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxZQUNBLE1BQVc7QUFBQSxVQUNiO0FBQUEsVUFDQSxTQUFTO0FBQUEsUUFDWCxDQUFDO0FBQUEsTUFDSDtBQUNBLFVBQUksV0FBVyxLQUFLO0FBQ2xCLGNBQU0sSUFBSSxxQkFBcUIsYUFBYSxnQkFBZ0IsUUFBUTtBQUFBLFVBQ2xFLFVBQVU7QUFBQSxZQUNSO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxZQUNBLE1BQU0sTUFBTSxnQkFBZ0IsUUFBUTtBQUFBLFVBQ3RDO0FBQUEsVUFDQSxTQUFTO0FBQUEsUUFDWCxDQUFDO0FBQUEsTUFDSDtBQUNBLFVBQUksVUFBVSxLQUFLO0FBQ2pCLGNBQU0sT0FBTyxNQUFNLGdCQUFnQixRQUFRO0FBQzNDLGNBQU0sUUFBUSxJQUFJLHFCQUFxQixhQUFhLGVBQWUsSUFBSSxHQUFHLFFBQVE7QUFBQSxVQUNoRixVQUFVO0FBQUEsWUFDUjtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFVBQ0Y7QUFBQSxVQUNBLFNBQVM7QUFBQSxRQUNYLENBQUM7QUFDRCxjQUFNO0FBQUEsTUFDUjtBQUNBLGFBQU8sMkJBQTJCLE1BQU0sZ0JBQWdCLFFBQVEsSUFBSSxTQUFTO0FBQUEsS0FDOUUsRUFBRSxLQUFLLENBQUMsU0FBUztBQUNoQixhQUFPO0FBQUEsUUFDTDtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0Y7QUFBQSxLQUNELEVBQUUsTUFBTSxDQUFDLFVBQVU7QUFDbEIsVUFBSSxpQkFBaUIscUJBQXFCO0FBQ3hDLGNBQU07QUFBQSxlQUNDLE1BQU0sU0FBUztBQUN0QixjQUFNO0FBQ1IsVUFBSSxVQUFVLE1BQU07QUFDcEIsVUFBSSxNQUFNLFNBQVMsZUFBZSxXQUFXLE9BQU87QUFDbEQsWUFBSSxNQUFNLGlCQUFpQixPQUFPO0FBQ2hDLG9CQUFVLE1BQU0sTUFBTTtBQUFBLFFBQ3hCLGtCQUFrQixNQUFNLFVBQVUsVUFBVTtBQUMxQyxvQkFBVSxNQUFNO0FBQUEsUUFDbEI7QUFBQSxNQUNGO0FBQ0EsWUFBTSxJQUFJLHFCQUFxQixhQUFhLFNBQVMsS0FBSztBQUFBLFFBQ3hELFNBQVM7QUFBQSxNQUNYLENBQUM7QUFBQSxLQUNGO0FBQUE7QUFFSCxpQkFBZSxlQUFlLENBQUMsVUFBVTtBQUN2QyxVQUFNLGNBQWMsU0FBUyxRQUFRLElBQUksY0FBYztBQUN2RCxRQUFJLG9CQUFvQixLQUFLLFdBQVcsR0FBRztBQUN6QyxhQUFPLFNBQVMsS0FBSyxFQUFFLE1BQU0sTUFBTSxTQUFTLEtBQUssQ0FBQyxFQUFFLE1BQU0sTUFBTSxFQUFFO0FBQUEsSUFDcEU7QUFDQSxTQUFLLGVBQWUseUJBQXlCLEtBQUssV0FBVyxHQUFHO0FBQzlELGFBQU8sU0FBUyxLQUFLO0FBQUEsSUFDdkI7QUFDQSxXQUFPLGtCQUFrQixRQUFRO0FBQUE7QUFFbkMsV0FBUyxjQUFjLENBQUMsTUFBTTtBQUM1QixlQUFXLFNBQVM7QUFDbEIsYUFBTztBQUNULFFBQUk7QUFDSixRQUFJLHVCQUF1QixNQUFNO0FBQy9CLGVBQVMsTUFBTSxLQUFLO0FBQUEsSUFDdEIsT0FBTztBQUNMLGVBQVM7QUFBQTtBQUVYLFFBQUksYUFBYSxNQUFNO0FBQ3JCLFVBQUksTUFBTSxRQUFRLEtBQUssTUFBTSxHQUFHO0FBQzlCLGVBQU8sR0FBRyxLQUFLLFlBQVksS0FBSyxPQUFPLElBQUksS0FBSyxTQUFTLEVBQUUsS0FBSyxJQUFJLElBQUk7QUFBQSxNQUMxRTtBQUNBLGFBQU8sR0FBRyxLQUFLLFVBQVU7QUFBQSxJQUMzQjtBQUNBLFdBQU8sa0JBQWtCLEtBQUssVUFBVSxJQUFJO0FBQUE7QUFJOUMsV0FBUyxZQUFZLENBQUMsYUFBYSxhQUFhO0FBQzlDLFVBQU0sWUFBWSxZQUFZLFNBQVMsV0FBVztBQUNsRCxVQUFNLGlCQUFpQixDQUFDLE9BQU8sWUFBWTtBQUN6QyxZQUFNLGtCQUFrQixVQUFVLE1BQU0sT0FBTyxVQUFVO0FBQ3pELFdBQUssZ0JBQWdCLFlBQVksZ0JBQWdCLFFBQVEsTUFBTTtBQUM3RCxlQUFPLGFBQWEsVUFBVSxNQUFNLGVBQWUsQ0FBQztBQUFBLE1BQ3REO0FBQ0EsWUFBTSxXQUFXLENBQUMsUUFBUSxnQkFBZ0I7QUFDeEMsZUFBTyxhQUNMLFVBQVUsTUFBTSxVQUFVLE1BQU0sUUFBUSxXQUFXLENBQUMsQ0FDdEQ7QUFBQTtBQUVGLGFBQU8sT0FBTyxVQUFVO0FBQUEsUUFDdEIsVUFBVTtBQUFBLFFBQ1YsVUFBVSxhQUFhLEtBQUssTUFBTSxTQUFTO0FBQUEsTUFDN0MsQ0FBQztBQUNELGFBQU8sZ0JBQWdCLFFBQVEsS0FBSyxVQUFVLGVBQWU7QUFBQTtBQUUvRCxXQUFPLE9BQU8sT0FBTyxRQUFRO0FBQUEsTUFDM0IsVUFBVTtBQUFBLE1BQ1YsVUFBVSxhQUFhLEtBQUssTUFBTSxTQUFTO0FBQUEsSUFDN0MsQ0FBQztBQUFBO0FBSUgsTUFBSSxVQUFVLGFBQWEsZ0JBQWdCLFVBQVU7QUFBQSxJQUNuRCxTQUFTO0FBQUEsTUFDUCxjQUFjLHNCQUFzQixZQUFZLEdBQUcsNEJBQTRCLGNBQWM7QUFBQSxJQUMvRjtBQUFBLEVBQ0YsQ0FBQztBQUFBOzs7O0FDMU5ELE1BQUksYUFBWSxPQUFPO0FBQ3ZCLE1BQUksbUJBQW1CLE9BQU87QUFDOUIsTUFBSSxxQkFBb0IsT0FBTztBQUMvQixNQUFJLGdCQUFlLE9BQU8sVUFBVTtBQUNwQyxNQUFJLFdBQVcsQ0FBQyxRQUFRLFFBQVE7QUFDOUIsYUFBUyxRQUFRO0FBQ2YsaUJBQVUsUUFBUSxNQUFNLEVBQUUsS0FBSyxJQUFJLE9BQU8sWUFBWSxLQUFLLENBQUM7QUFBQTtBQUVoRSxNQUFJLGNBQWMsQ0FBQyxJQUFJLE1BQU0sUUFBUSxTQUFTO0FBQzVDLFFBQUksZUFBZSxTQUFTLG1CQUFtQixTQUFTLFlBQVk7QUFDbEUsZUFBUyxPQUFPLG1CQUFrQixJQUFJO0FBQ3BDLGFBQUssY0FBYSxLQUFLLElBQUksR0FBRyxLQUFLLFFBQVE7QUFDekMscUJBQVUsSUFBSSxLQUFLLEVBQUUsS0FBSyxNQUFNLEtBQUssTUFBTSxjQUFjLE9BQU8saUJBQWlCLE1BQU0sR0FBRyxNQUFNLEtBQUssV0FBVyxDQUFDO0FBQUEsSUFDdkg7QUFDQSxXQUFPO0FBQUE7QUFFVCxNQUFJLGVBQWUsQ0FBQyxRQUFRLFlBQVksV0FBVSxDQUFDLEdBQUcsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDLEdBQUcsR0FBRztBQUd6RixNQUFJLG1CQUFtQixDQUFDO0FBQ3hCLFdBQVMsa0JBQWtCO0FBQUEsSUFDekIsc0JBQXNCLE1BQU07QUFBQSxJQUM1QixTQUFTLE1BQU07QUFBQSxJQUNmLG1CQUFtQixNQUFNO0FBQUEsRUFDM0IsQ0FBQztBQUNELFNBQU8sVUFBVSxhQUFhLGdCQUFnQjtBQUM5QyxNQUFJO0FBQ0osTUFBSTtBQUdKLE1BQUksVUFBVTtBQUdkLE1BQUk7QUFHSixNQUFJO0FBR0osV0FBUyw4QkFBOEIsQ0FBQyxNQUFNO0FBQzVDLFdBQU87QUFBQSxJQUNMLEtBQUssT0FBTyxJQUFJLENBQUMsTUFBTSxNQUFNLEVBQUUsU0FBUyxFQUFFLEtBQUssSUFBSTtBQUFBO0FBRXZELE1BQUksdUJBQXVCLGNBQWMsTUFBTTtBQUFBLElBQzdDLFdBQVcsQ0FBQyxVQUFVLFNBQVMsVUFBVTtBQUN2QyxZQUFNLCtCQUErQixRQUFRLENBQUM7QUFDOUMsV0FBSyxVQUFVO0FBQ2YsV0FBSyxVQUFVO0FBQ2YsV0FBSyxXQUFXO0FBQ2hCLFdBQUssT0FBTztBQUNaLFdBQUssU0FBUyxTQUFTO0FBQ3ZCLFdBQUssT0FBTyxTQUFTO0FBQ3JCLFVBQUksTUFBTSxtQkFBbUI7QUFDM0IsY0FBTSxrQkFBa0IsTUFBTSxLQUFLLFdBQVc7QUFBQSxNQUNoRDtBQUFBO0FBQUEsRUFFSjtBQUdBLE1BQUksdUJBQXVCO0FBQUEsSUFDekI7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNGO0FBQ0EsTUFBSSw2QkFBNkIsQ0FBQyxTQUFTLFVBQVUsS0FBSztBQUMxRCxNQUFJLHVCQUF1QjtBQUMzQixXQUFTLE9BQU8sQ0FBQyxVQUFVLE9BQU8sU0FBUztBQUN6QyxRQUFJLFNBQVM7QUFDWCxpQkFBVyxVQUFVLFlBQVksV0FBVyxTQUFTO0FBQ25ELGVBQU8sUUFBUSxPQUNiLElBQUksTUFBTSw0REFBNEQsQ0FDeEU7QUFBQSxNQUNGO0FBQ0EsaUJBQVcsT0FBTyxTQUFTO0FBQ3pCLGFBQUssMkJBQTJCLFNBQVMsR0FBRztBQUMxQztBQUNGLGVBQU8sUUFBUSxPQUNiLElBQUksTUFDRix1QkFBdUIsc0NBQ3pCLENBQ0Y7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUNBLFVBQU0sdUJBQXVCLFVBQVUsV0FBVyxPQUFPLE9BQU8sRUFBRSxNQUFNLEdBQUcsT0FBTyxJQUFJO0FBQ3RGLFVBQU0saUJBQWlCLE9BQU8sS0FDNUIsYUFDRixFQUFFLE9BQU8sQ0FBQyxRQUFRLFFBQVE7QUFDeEIsVUFBSSxxQkFBcUIsU0FBUyxHQUFHLEdBQUc7QUFDdEMsZUFBTyxPQUFPLGNBQWM7QUFDNUIsZUFBTztBQUFBLE1BQ1Q7QUFDQSxXQUFLLE9BQU8sV0FBVztBQUNyQixlQUFPLFlBQVksQ0FBQztBQUFBLE1BQ3RCO0FBQ0EsYUFBTyxVQUFVLE9BQU8sY0FBYztBQUN0QyxhQUFPO0FBQUEsT0FDTixDQUFDLENBQUM7QUFDTCxVQUFNLFVBQVUsY0FBYyxXQUFXLFNBQVMsU0FBUyxTQUFTO0FBQ3BFLFFBQUkscUJBQXFCLEtBQUssT0FBTyxHQUFHO0FBQ3RDLHFCQUFlLE1BQU0sUUFBUSxRQUFRLHNCQUFzQixjQUFjO0FBQUEsSUFDM0U7QUFDQSxXQUFPLFNBQVMsY0FBYyxFQUFFLEtBQUssQ0FBQyxhQUFhO0FBQ2pELFVBQUksU0FBUyxLQUFLLFFBQVE7QUFDeEIsY0FBTSxVQUFVLENBQUM7QUFDakIsbUJBQVcsT0FBTyxPQUFPLEtBQUssU0FBUyxPQUFPLEdBQUc7QUFDL0Msa0JBQVEsT0FBTyxTQUFTLFFBQVE7QUFBQSxRQUNsQztBQUNBLGNBQU0sSUFBSSxxQkFDUixnQkFDQSxTQUNBLFNBQVMsSUFDWDtBQUFBLE1BQ0Y7QUFDQSxhQUFPLFNBQVMsS0FBSztBQUFBLEtBQ3RCO0FBQUE7QUFJSCxXQUFTLFlBQVksQ0FBQyxVQUFVLGFBQWE7QUFDM0MsVUFBTSxhQUFhLFNBQVMsU0FBUyxXQUFXO0FBQ2hELFVBQU0sU0FBUyxDQUFDLE9BQU8sWUFBWTtBQUNqQyxhQUFPLFFBQVEsWUFBWSxPQUFPLE9BQU87QUFBQTtBQUUzQyxXQUFPLE9BQU8sT0FBTyxRQUFRO0FBQUEsTUFDM0IsVUFBVSxhQUFhLEtBQUssTUFBTSxVQUFVO0FBQUEsTUFDNUMsVUFBVSxXQUFXO0FBQUEsSUFDdkIsQ0FBQztBQUFBO0FBSUgsTUFBSSxXQUFXLGFBQWEsZ0JBQWdCLFNBQVM7QUFBQSxJQUNuRCxTQUFTO0FBQUEsTUFDUCxjQUFjLHNCQUFzQixZQUFZLEdBQUcsNEJBQTRCLGNBQWM7QUFBQSxJQUMvRjtBQUFBLElBQ0EsUUFBUTtBQUFBLElBQ1IsS0FBSztBQUFBLEVBQ1AsQ0FBQztBQUNELFdBQVMsaUJBQWlCLENBQUMsZUFBZTtBQUN4QyxXQUFPLGFBQWEsZUFBZTtBQUFBLE1BQ2pDLFFBQVE7QUFBQSxNQUNSLEtBQUs7QUFBQSxJQUNQLENBQUM7QUFBQTtBQUFBOzs7O0FDakpILE1BQUksYUFBWSxPQUFPO0FBQ3ZCLE1BQUksbUJBQW1CLE9BQU87QUFDOUIsTUFBSSxxQkFBb0IsT0FBTztBQUMvQixNQUFJLGdCQUFlLE9BQU8sVUFBVTtBQUNwQyxNQUFJLFdBQVcsQ0FBQyxRQUFRLFFBQVE7QUFDOUIsYUFBUyxRQUFRO0FBQ2YsaUJBQVUsUUFBUSxNQUFNLEVBQUUsS0FBSyxJQUFJLE9BQU8sWUFBWSxLQUFLLENBQUM7QUFBQTtBQUVoRSxNQUFJLGNBQWMsQ0FBQyxJQUFJLE1BQU0sUUFBUSxTQUFTO0FBQzVDLFFBQUksZUFBZSxTQUFTLG1CQUFtQixTQUFTLFlBQVk7QUFDbEUsZUFBUyxPQUFPLG1CQUFrQixJQUFJO0FBQ3BDLGFBQUssY0FBYSxLQUFLLElBQUksR0FBRyxLQUFLLFFBQVE7QUFDekMscUJBQVUsSUFBSSxLQUFLLEVBQUUsS0FBSyxNQUFNLEtBQUssTUFBTSxjQUFjLE9BQU8saUJBQWlCLE1BQU0sR0FBRyxNQUFNLEtBQUssV0FBVyxDQUFDO0FBQUEsSUFDdkg7QUFDQSxXQUFPO0FBQUE7QUFFVCxNQUFJLGVBQWUsQ0FBQyxRQUFRLFlBQVksV0FBVSxDQUFDLEdBQUcsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDLEdBQUcsR0FBRztBQUd6RixNQUFJLG1CQUFtQixDQUFDO0FBQ3hCLFdBQVMsa0JBQWtCO0FBQUEsSUFDekIsaUJBQWlCLE1BQU07QUFBQSxFQUN6QixDQUFDO0FBQ0QsU0FBTyxVQUFVLGFBQWEsZ0JBQWdCO0FBRzlDLE1BQUksK0JBQStCO0FBQ25DLE1BQUksd0JBQXdCO0FBQzVCLE1BQUksMEJBQTBCO0FBQzlCLGlCQUFlLElBQUksQ0FBQyxPQUFPO0FBQ3pCLFVBQU0sUUFBUSxNQUFNLE1BQU0sSUFBSSxFQUFFLFdBQVc7QUFDM0MsVUFBTSxpQkFBaUIsNkJBQTZCLEtBQUssS0FBSyxLQUFLLHNCQUFzQixLQUFLLEtBQUs7QUFDbkcsVUFBTSxpQkFBaUIsd0JBQXdCLEtBQUssS0FBSztBQUN6RCxVQUFNLFlBQVksUUFBUSxRQUFRLGlCQUFpQixpQkFBaUIsaUJBQWlCLG1CQUFtQjtBQUN4RyxXQUFPO0FBQUEsTUFDTCxNQUFNO0FBQUEsTUFDTjtBQUFBLE1BQ0E7QUFBQSxJQUNGO0FBQUE7QUFJRixXQUFTLHVCQUF1QixDQUFDLE9BQU87QUFDdEMsUUFBSSxNQUFNLE1BQU0sSUFBSSxFQUFFLFdBQVcsR0FBRztBQUNsQyxhQUFPLFVBQVU7QUFBQSxJQUNuQjtBQUNBLFdBQU8sU0FBUztBQUFBO0FBSWxCLGlCQUFlLElBQUksQ0FBQyxPQUFPLFNBQVMsT0FBTyxZQUFZO0FBQ3JELFVBQU0sV0FBVyxRQUFRLFNBQVMsTUFDaEMsT0FDQSxVQUNGO0FBQ0EsYUFBUyxRQUFRLGdCQUFnQix3QkFBd0IsS0FBSztBQUM5RCxXQUFPLFFBQVEsUUFBUTtBQUFBO0FBSXpCLE1BQUksMkJBQTJCLGdCQUFnQixDQUFDLE9BQU87QUFDckQsU0FBSyxPQUFPO0FBQ1YsWUFBTSxJQUFJLE1BQU0sMERBQTBEO0FBQUEsSUFDNUU7QUFDQSxlQUFXLFVBQVUsVUFBVTtBQUM3QixZQUFNLElBQUksTUFDUix1RUFDRjtBQUFBLElBQ0Y7QUFDQSxZQUFRLE1BQU0sUUFBUSxzQkFBc0IsRUFBRTtBQUM5QyxXQUFPLE9BQU8sT0FBTyxLQUFLLEtBQUssTUFBTSxLQUFLLEdBQUc7QUFBQSxNQUMzQyxNQUFNLEtBQUssS0FBSyxNQUFNLEtBQUs7QUFBQSxJQUM3QixDQUFDO0FBQUE7QUFBQTs7OztBQ3hFSCxNQUFJLGFBQVksT0FBTztBQUN2QixNQUFJLG1CQUFtQixPQUFPO0FBQzlCLE1BQUkscUJBQW9CLE9BQU87QUFDL0IsTUFBSSxnQkFBZSxPQUFPLFVBQVU7QUFDcEMsTUFBSSxXQUFXLENBQUMsUUFBUSxRQUFRO0FBQzlCLGFBQVMsUUFBUTtBQUNmLGlCQUFVLFFBQVEsTUFBTSxFQUFFLEtBQUssSUFBSSxPQUFPLFlBQVksS0FBSyxDQUFDO0FBQUE7QUFFaEUsTUFBSSxjQUFjLENBQUMsSUFBSSxNQUFNLFFBQVEsU0FBUztBQUM1QyxRQUFJLGVBQWUsU0FBUyxtQkFBbUIsU0FBUyxZQUFZO0FBQ2xFLGVBQVMsT0FBTyxtQkFBa0IsSUFBSTtBQUNwQyxhQUFLLGNBQWEsS0FBSyxJQUFJLEdBQUcsS0FBSyxRQUFRO0FBQ3pDLHFCQUFVLElBQUksS0FBSyxFQUFFLEtBQUssTUFBTSxLQUFLLE1BQU0sY0FBYyxPQUFPLGlCQUFpQixNQUFNLEdBQUcsTUFBTSxLQUFLLFdBQVcsQ0FBQztBQUFBLElBQ3ZIO0FBQ0EsV0FBTztBQUFBO0FBRVQsTUFBSSxlQUFlLENBQUMsUUFBUSxZQUFZLFdBQVUsQ0FBQyxHQUFHLGNBQWMsRUFBRSxPQUFPLEtBQUssQ0FBQyxHQUFHLEdBQUc7QUFHekYsTUFBSSxtQkFBbUIsQ0FBQztBQUN4QixXQUFTLGtCQUFrQjtBQUFBLElBQ3pCLFNBQVMsTUFBTTtBQUFBLEVBQ2pCLENBQUM7QUFDRCxTQUFPLFVBQVUsYUFBYSxnQkFBZ0I7QUFDOUMsTUFBSTtBQUNKLE1BQUk7QUFDSixNQUFJO0FBQ0osTUFBSTtBQUNKLE1BQUk7QUFHSixNQUFJLFVBQVU7QUFHZCxNQUFJLE9BQU8sTUFBTTtBQUFBO0FBRWpCLE1BQUksY0FBYyxRQUFRLEtBQUssS0FBSyxPQUFPO0FBQzNDLE1BQUksZUFBZSxRQUFRLE1BQU0sS0FBSyxPQUFPO0FBQzdDLE1BQUksaUJBQWlCLG1CQUFtQixZQUFZLEdBQUcsNEJBQTRCLGNBQWM7QUFDakcsTUFBSSxVQUFVLE1BQU07QUFBQSxXQUNYO0FBQ0wsV0FBSyxVQUFVO0FBQUE7QUFBQSxXQUVWLFFBQVEsQ0FBQyxVQUFVO0FBQ3hCLFlBQU0sc0JBQXNCLGNBQWMsS0FBSztBQUFBLFFBQzdDLFdBQVcsSUFBSSxNQUFNO0FBQ25CLGdCQUFNLFVBQVUsS0FBSyxNQUFNLENBQUM7QUFDNUIscUJBQVcsYUFBYSxZQUFZO0FBQ2xDLGtCQUFNLFNBQVMsT0FBTyxDQUFDO0FBQ3ZCO0FBQUEsVUFDRjtBQUNBLGdCQUNFLE9BQU8sT0FDTCxDQUFDLEdBQ0QsVUFDQSxTQUNBLFFBQVEsYUFBYSxTQUFTLFlBQVk7QUFBQSxZQUN4QyxXQUFXLEdBQUcsUUFBUSxhQUFhLFNBQVM7QUFBQSxVQUM5QyxJQUFJLElBQ04sQ0FDRjtBQUFBO0FBQUEsTUFFSjtBQUNBLGFBQU87QUFBQTtBQUFBLFdBRUY7QUFDTCxXQUFLLFVBQVUsQ0FBQztBQUFBO0FBQUEsV0FRWCxNQUFNLElBQUksWUFBWTtBQUMzQixZQUFNLGlCQUFpQixLQUFLO0FBQzVCLFlBQU0sYUFBYSxjQUFjLEtBQUs7QUFBQSxlQUM3QjtBQUNMLGVBQUssVUFBVSxlQUFlLE9BQzVCLFdBQVcsT0FBTyxDQUFDLFlBQVksZUFBZSxTQUFTLE1BQU0sQ0FBQyxDQUNoRTtBQUFBO0FBQUEsTUFFSjtBQUNBLGFBQU87QUFBQTtBQUFBLElBRVQsV0FBVyxDQUFDLFVBQVUsQ0FBQyxHQUFHO0FBQ3hCLFlBQU0sT0FBTyxJQUFJLHlCQUF5QjtBQUMxQyxZQUFNLGtCQUFrQjtBQUFBLFFBQ3RCLFNBQVMsZUFBZSxRQUFRLFNBQVMsU0FBUztBQUFBLFFBQ2xELFNBQVMsQ0FBQztBQUFBLFFBQ1YsU0FBUyxPQUFPLE9BQU8sQ0FBQyxHQUFHLFFBQVEsU0FBUztBQUFBLFVBRTFDLE1BQU0sS0FBSyxLQUFLLE1BQU0sU0FBUztBQUFBLFFBQ2pDLENBQUM7QUFBQSxRQUNELFdBQVc7QUFBQSxVQUNULFVBQVUsQ0FBQztBQUFBLFVBQ1gsUUFBUTtBQUFBLFFBQ1Y7QUFBQSxNQUNGO0FBQ0Esc0JBQWdCLFFBQVEsZ0JBQWdCLFFBQVEsWUFBWSxHQUFHLFFBQVEsYUFBYSxtQkFBbUI7QUFDdkcsVUFBSSxRQUFRLFNBQVM7QUFDbkIsd0JBQWdCLFVBQVUsUUFBUTtBQUFBLE1BQ3BDO0FBQ0EsVUFBSSxRQUFRLFVBQVU7QUFDcEIsd0JBQWdCLFVBQVUsV0FBVyxRQUFRO0FBQUEsTUFDL0M7QUFDQSxVQUFJLFFBQVEsVUFBVTtBQUNwQix3QkFBZ0IsUUFBUSxlQUFlLFFBQVE7QUFBQSxNQUNqRDtBQUNBLFdBQUssVUFBVSxlQUFlLFFBQVEsU0FBUyxlQUFlO0FBQzlELFdBQUssV0FBVyxHQUFHLGVBQWUsbUJBQW1CLEtBQUssT0FBTyxFQUFFLFNBQVMsZUFBZTtBQUMzRixXQUFLLE1BQU0sT0FBTyxPQUNoQjtBQUFBLFFBQ0UsT0FBTztBQUFBLFFBQ1AsTUFBTTtBQUFBLFFBQ04sTUFBTTtBQUFBLFFBQ04sT0FBTztBQUFBLE1BQ1QsR0FDQSxRQUFRLEdBQ1Y7QUFDQSxXQUFLLE9BQU87QUFDWixXQUFLLFFBQVEsY0FBYztBQUN6QixhQUFLLFFBQVEsTUFBTTtBQUNqQixlQUFLLE9BQU8sYUFBYTtBQUFBLFlBQ3ZCLE1BQU07QUFBQSxVQUNSO0FBQUEsUUFDRixPQUFPO0FBQ0wsZ0JBQU0sUUFBUSxHQUFHLGtCQUFrQixpQkFBaUIsUUFBUSxJQUFJO0FBQ2hFLGVBQUssS0FBSyxXQUFXLEtBQUssSUFBSTtBQUM5QixlQUFLLE9BQU87QUFBQTtBQUFBLE1BRWhCLE9BQU87QUFDTCxnQkFBUSxpQkFBaUIsaUJBQWlCO0FBQzFDLGNBQU0sT0FBTyxhQUNYLE9BQU8sT0FDTDtBQUFBLFVBQ0UsU0FBUyxLQUFLO0FBQUEsVUFDZCxLQUFLLEtBQUs7QUFBQSxVQU1WLFNBQVM7QUFBQSxVQUNULGdCQUFnQjtBQUFBLFFBQ2xCLEdBQ0EsUUFBUSxJQUNWLENBQ0Y7QUFDQSxhQUFLLEtBQUssV0FBVyxLQUFLLElBQUk7QUFDOUIsYUFBSyxPQUFPO0FBQUE7QUFFZCxZQUFNLG1CQUFtQixLQUFLO0FBQzlCLGVBQVMsSUFBSSxFQUFHLElBQUksaUJBQWlCLFFBQVEsVUFBVSxHQUFHO0FBQ3hELGVBQU8sT0FBTyxNQUFNLGlCQUFpQixRQUFRLEdBQUcsTUFBTSxPQUFPLENBQUM7QUFBQSxNQUNoRTtBQUFBO0FBQUEsRUFFSjtBQUFBOzs7O0FDN0pBLE1BQUksYUFBWSxPQUFPO0FBQ3ZCLE1BQUksbUJBQW1CLE9BQU87QUFDOUIsTUFBSSxxQkFBb0IsT0FBTztBQUMvQixNQUFJLGdCQUFlLE9BQU8sVUFBVTtBQUNwQyxNQUFJLFdBQVcsQ0FBQyxRQUFRLFFBQVE7QUFDOUIsYUFBUyxRQUFRO0FBQ2YsaUJBQVUsUUFBUSxNQUFNLEVBQUUsS0FBSyxJQUFJLE9BQU8sWUFBWSxLQUFLLENBQUM7QUFBQTtBQUVoRSxNQUFJLGNBQWMsQ0FBQyxJQUFJLE1BQU0sUUFBUSxTQUFTO0FBQzVDLFFBQUksZUFBZSxTQUFTLG1CQUFtQixTQUFTLFlBQVk7QUFDbEUsZUFBUyxPQUFPLG1CQUFrQixJQUFJO0FBQ3BDLGFBQUssY0FBYSxLQUFLLElBQUksR0FBRyxLQUFLLFFBQVE7QUFDekMscUJBQVUsSUFBSSxLQUFLLEVBQUUsS0FBSyxNQUFNLEtBQUssTUFBTSxjQUFjLE9BQU8saUJBQWlCLE1BQU0sR0FBRyxNQUFNLEtBQUssV0FBVyxDQUFDO0FBQUEsSUFDdkg7QUFDQSxXQUFPO0FBQUE7QUFFVCxNQUFJLGVBQWUsQ0FBQyxRQUFRLFlBQVksV0FBVSxDQUFDLEdBQUcsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDLEdBQUcsR0FBRztBQUd6RixNQUFJLG1CQUFtQixDQUFDO0FBQ3hCLFdBQVMsa0JBQWtCO0FBQUEsSUFDekIsMkJBQTJCLE1BQU07QUFBQSxJQUNqQyxxQkFBcUIsTUFBTTtBQUFBLEVBQzdCLENBQUM7QUFDRCxTQUFPLFVBQVUsYUFBYSxnQkFBZ0I7QUFHOUMsTUFBSSxVQUFVO0FBR2QsTUFBSSxZQUFZO0FBQUEsSUFDZCxTQUFTO0FBQUEsTUFDUCx5Q0FBeUM7QUFBQSxRQUN2QztBQUFBLE1BQ0Y7QUFBQSxNQUNBLDBDQUEwQztBQUFBLFFBQ3hDO0FBQUEsTUFDRjtBQUFBLE1BQ0EsNEJBQTRCO0FBQUEsUUFDMUI7QUFBQSxNQUNGO0FBQUEsTUFDQSw4QkFBOEI7QUFBQSxRQUM1QjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLG9CQUFvQjtBQUFBLFFBQ2xCO0FBQUEsTUFDRjtBQUFBLE1BQ0EsbUJBQW1CO0FBQUEsUUFDakI7QUFBQSxNQUNGO0FBQUEsTUFDQSwyQkFBMkI7QUFBQSxRQUN6QjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLGlDQUFpQztBQUFBLFFBQy9CO0FBQUEsTUFDRjtBQUFBLE1BQ0EseUJBQXlCLENBQUMsK0NBQStDO0FBQUEsTUFDekUsMEJBQTBCO0FBQUEsUUFDeEI7QUFBQSxNQUNGO0FBQUEsTUFDQSxtQkFBbUIsQ0FBQyxvQ0FBb0M7QUFBQSxNQUN4RCwrQkFBK0I7QUFBQSxRQUM3QjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLGdDQUFnQztBQUFBLFFBQzlCO0FBQUEsTUFDRjtBQUFBLE1BQ0EseUJBQXlCLENBQUMsK0NBQStDO0FBQUEsTUFDekUsMEJBQTBCO0FBQUEsUUFDeEI7QUFBQSxNQUNGO0FBQUEsTUFDQSxvQkFBb0IsQ0FBQyw4Q0FBOEM7QUFBQSxNQUNuRSx3QkFBd0I7QUFBQSxRQUN0QjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLHdCQUF3QjtBQUFBLFFBQ3RCO0FBQUEsTUFDRjtBQUFBLE1BQ0EseUJBQXlCO0FBQUEsUUFDdkI7QUFBQSxNQUNGO0FBQUEsTUFDQSxnQkFBZ0I7QUFBQSxRQUNkO0FBQUEsTUFDRjtBQUFBLE1BQ0EseUJBQXlCO0FBQUEsUUFDdkI7QUFBQSxNQUNGO0FBQUEsTUFDQSwyQkFBMkI7QUFBQSxRQUN6QjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLGlCQUFpQixDQUFDLGtEQUFrRDtBQUFBLE1BQ3BFLG1CQUFtQixDQUFDLDZDQUE2QztBQUFBLE1BQ2pFLGtCQUFrQjtBQUFBLFFBQ2hCO0FBQUEsTUFDRjtBQUFBLE1BQ0Esb0JBQW9CO0FBQUEsUUFDbEI7QUFBQSxNQUNGO0FBQUEsTUFDQSwrQkFBK0I7QUFBQSxRQUM3QjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLGdDQUFnQztBQUFBLFFBQzlCO0FBQUEsTUFDRjtBQUFBLE1BQ0EsbUJBQW1CLENBQUMsb0RBQW9EO0FBQUEsTUFDeEUsdUJBQXVCO0FBQUEsUUFDckI7QUFBQSxNQUNGO0FBQUEsTUFDQSxvREFBb0Q7QUFBQSxRQUNsRDtBQUFBLE1BQ0Y7QUFBQSxNQUNBLGlCQUFpQjtBQUFBLFFBQ2Y7QUFBQSxNQUNGO0FBQUEsTUFDQSxrQkFBa0I7QUFBQSxRQUNoQjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLCtCQUErQjtBQUFBLFFBQzdCO0FBQUEsTUFDRjtBQUFBLE1BQ0EsZ0NBQWdDO0FBQUEsUUFDOUI7QUFBQSxNQUNGO0FBQUEsTUFDQSx5QkFBeUI7QUFBQSxRQUN2QjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLG1EQUFtRDtBQUFBLFFBQ2pEO0FBQUEsTUFDRjtBQUFBLE1BQ0EsZ0JBQWdCO0FBQUEsUUFDZDtBQUFBLE1BQ0Y7QUFBQSxNQUNBLHdCQUF3QjtBQUFBLFFBQ3RCO0FBQUEsTUFDRjtBQUFBLE1BQ0EsK0JBQStCO0FBQUEsUUFDN0I7QUFBQSxNQUNGO0FBQUEsTUFDQSxnQ0FBZ0M7QUFBQSxRQUM5QjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLHFCQUFxQixDQUFDLDBDQUEwQztBQUFBLE1BQ2hFLHNCQUFzQixDQUFDLCtDQUErQztBQUFBLE1BQ3RFLGtDQUFrQztBQUFBLFFBQ2hDO0FBQUEsTUFDRjtBQUFBLE1BQ0EsNEJBQTRCLENBQUMscUNBQXFDO0FBQUEsTUFDbEUsK0JBQStCO0FBQUEsUUFDN0I7QUFBQSxNQUNGO0FBQUEsTUFDQSw2QkFBNkI7QUFBQSxRQUMzQjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLGFBQWEsQ0FBQywyREFBMkQ7QUFBQSxNQUN6RSw4QkFBOEI7QUFBQSxRQUM1QjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLHlCQUF5QjtBQUFBLFFBQ3ZCO0FBQUEsTUFDRjtBQUFBLE1BQ0Esc0JBQXNCO0FBQUEsUUFDcEI7QUFBQSxNQUNGO0FBQUEsTUFDQSx3QkFBd0I7QUFBQSxRQUN0QjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLHdEQUF3RDtBQUFBLFFBQ3REO0FBQUEsTUFDRjtBQUFBLE1BQ0Esc0RBQXNEO0FBQUEsUUFDcEQ7QUFBQSxNQUNGO0FBQUEsTUFDQSx5Q0FBeUM7QUFBQSxRQUN2QztBQUFBLE1BQ0Y7QUFBQSxNQUNBLHVDQUF1QztBQUFBLFFBQ3JDO0FBQUEsTUFDRjtBQUFBLE1BQ0Esc0JBQXNCLENBQUMsaURBQWlEO0FBQUEsTUFDeEUsaUJBQWlCLENBQUMsNENBQTRDO0FBQUEsTUFDOUQsY0FBYyxDQUFDLCtDQUErQztBQUFBLE1BQzlELGdCQUFnQixDQUFDLDBDQUEwQztBQUFBLE1BQzNELDZCQUE2QjtBQUFBLFFBQzNCO0FBQUEsTUFDRjtBQUFBLE1BQ0Esb0JBQW9CO0FBQUEsUUFDbEI7QUFBQSxRQUNBLENBQUM7QUFBQSxRQUNELEVBQUUsU0FBUyxDQUFDLFdBQVcsdUNBQXVDLEVBQUU7QUFBQSxNQUNsRTtBQUFBLE1BQ0Esa0JBQWtCLENBQUMsc0RBQXNEO0FBQUEsTUFDekUsZUFBZSxDQUFDLHlEQUF5RDtBQUFBLE1BQ3pFLGlCQUFpQixDQUFDLG9EQUFvRDtBQUFBLE1BQ3RFLGtCQUFrQjtBQUFBLFFBQ2hCO0FBQUEsTUFDRjtBQUFBLE1BQ0EsMkJBQTJCLENBQUMsNkNBQTZDO0FBQUEsTUFDekUsNEJBQTRCO0FBQUEsUUFDMUI7QUFBQSxNQUNGO0FBQUEsTUFDQSxhQUFhLENBQUMsMkRBQTJEO0FBQUEsTUFDekUsK0JBQStCO0FBQUEsUUFDN0I7QUFBQSxNQUNGO0FBQUEsTUFDQSxnQkFBZ0IsQ0FBQyxpREFBaUQ7QUFBQSxNQUNsRSx1QkFBdUI7QUFBQSxRQUNyQjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLHFCQUFxQjtBQUFBLFFBQ25CO0FBQUEsTUFDRjtBQUFBLE1BQ0Esa0JBQWtCO0FBQUEsUUFDaEI7QUFBQSxNQUNGO0FBQUEsTUFDQSxzQkFBc0IsQ0FBQyw2Q0FBNkM7QUFBQSxNQUNwRSx3QkFBd0I7QUFBQSxRQUN0QjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLDBCQUEwQjtBQUFBLFFBQ3hCO0FBQUEsTUFDRjtBQUFBLE1BQ0Esd0JBQXdCO0FBQUEsUUFDdEI7QUFBQSxNQUNGO0FBQUEsTUFDQSwrQkFBK0I7QUFBQSxRQUM3QjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLHFDQUFxQztBQUFBLFFBQ25DO0FBQUEsTUFDRjtBQUFBLE1BQ0Esc0NBQXNDO0FBQUEsUUFDcEM7QUFBQSxNQUNGO0FBQUEsTUFDQSxnQkFBZ0IsQ0FBQyxpQ0FBaUM7QUFBQSxNQUNsRCxrQkFBa0IsQ0FBQyxtQ0FBbUM7QUFBQSxNQUN0RCw2QkFBNkI7QUFBQSxRQUMzQjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLCtCQUErQjtBQUFBLFFBQzdCO0FBQUEsTUFDRjtBQUFBLE1BQ0EsaUJBQWlCLENBQUMsMkNBQTJDO0FBQUEsTUFDN0QsbUJBQW1CLENBQUMsNkNBQTZDO0FBQUEsTUFDakUsbUJBQW1CLENBQUMsNkNBQTZDO0FBQUEsTUFDakUsOEJBQThCLENBQUMsMkNBQTJDO0FBQUEsTUFDMUUsK0JBQStCO0FBQUEsUUFDN0I7QUFBQSxNQUNGO0FBQUEsTUFDQSwrQkFBK0I7QUFBQSxRQUM3QjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLGlDQUFpQztBQUFBLFFBQy9CO0FBQUEsTUFDRjtBQUFBLE1BQ0EsMERBQTBEO0FBQUEsUUFDeEQ7QUFBQSxNQUNGO0FBQUEsTUFDQSw2QkFBNkIsQ0FBQyxpQ0FBaUM7QUFBQSxNQUMvRCw4QkFBOEIsQ0FBQywyQ0FBMkM7QUFBQSxNQUMxRSwwQkFBMEI7QUFBQSxRQUN4QjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLGtCQUFrQjtBQUFBLFFBQ2hCO0FBQUEsTUFDRjtBQUFBLE1BQ0EseUJBQXlCLENBQUMsd0NBQXdDO0FBQUEsTUFDbEUsd0JBQXdCO0FBQUEsUUFDdEI7QUFBQSxNQUNGO0FBQUEsTUFDQSxlQUFlLENBQUMsd0RBQXdEO0FBQUEsTUFDeEUseUJBQXlCO0FBQUEsUUFDdkI7QUFBQSxNQUNGO0FBQUEsTUFDQSxpREFBaUQ7QUFBQSxRQUMvQztBQUFBLE1BQ0Y7QUFBQSxNQUNBLGtEQUFrRDtBQUFBLFFBQ2hEO0FBQUEsTUFDRjtBQUFBLE1BQ0EsNkNBQTZDO0FBQUEsUUFDM0M7QUFBQSxNQUNGO0FBQUEsTUFDQSw4Q0FBOEM7QUFBQSxRQUM1QztBQUFBLE1BQ0Y7QUFBQSxNQUNBLGlDQUFpQztBQUFBLFFBQy9CO0FBQUEsTUFDRjtBQUFBLE1BQ0EsbUNBQW1DO0FBQUEsUUFDakM7QUFBQSxNQUNGO0FBQUEsTUFDQSx5QkFBeUI7QUFBQSxRQUN2QjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLGdDQUFnQztBQUFBLFFBQzlCO0FBQUEsTUFDRjtBQUFBLE1BQ0EsK0JBQStCO0FBQUEsUUFDN0I7QUFBQSxNQUNGO0FBQUEsTUFDQSw2QkFBNkI7QUFBQSxRQUMzQjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLDBDQUEwQztBQUFBLFFBQ3hDO0FBQUEsTUFDRjtBQUFBLE1BQ0EsMkNBQTJDO0FBQUEsUUFDekM7QUFBQSxNQUNGO0FBQUEsTUFDQSw4QkFBOEI7QUFBQSxRQUM1QjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLHdEQUF3RDtBQUFBLFFBQ3REO0FBQUEsTUFDRjtBQUFBLE1BQ0Esc0RBQXNEO0FBQUEsUUFDcEQ7QUFBQSxNQUNGO0FBQUEsTUFDQSx5Q0FBeUM7QUFBQSxRQUN2QztBQUFBLE1BQ0Y7QUFBQSxNQUNBLHVDQUF1QztBQUFBLFFBQ3JDO0FBQUEsTUFDRjtBQUFBLE1BQ0EsOEJBQThCO0FBQUEsUUFDNUI7QUFBQSxNQUNGO0FBQUEsTUFDQSxnQ0FBZ0M7QUFBQSxRQUM5QjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLHlEQUF5RDtBQUFBLFFBQ3ZEO0FBQUEsTUFDRjtBQUFBLE1BQ0EsK0JBQStCO0FBQUEsUUFDN0I7QUFBQSxNQUNGO0FBQUEsTUFDQSwyQkFBMkI7QUFBQSxRQUN6QjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLG1CQUFtQixDQUFDLDRDQUE0QztBQUFBLE1BQ2hFLG9CQUFvQjtBQUFBLFFBQ2xCO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxJQUNBLFVBQVU7QUFBQSxNQUNSLHVDQUF1QyxDQUFDLGtDQUFrQztBQUFBLE1BQzFFLHdCQUF3QixDQUFDLDJDQUEyQztBQUFBLE1BQ3BFLDBCQUEwQjtBQUFBLFFBQ3hCO0FBQUEsTUFDRjtBQUFBLE1BQ0EsVUFBVSxDQUFDLFlBQVk7QUFBQSxNQUN2QixxQkFBcUIsQ0FBQyx3Q0FBd0M7QUFBQSxNQUM5RCxXQUFXLENBQUMsd0NBQXdDO0FBQUEsTUFDcEQsMkNBQTJDO0FBQUEsUUFDekM7QUFBQSxNQUNGO0FBQUEsTUFDQSxnQ0FBZ0MsQ0FBQyw4QkFBOEI7QUFBQSxNQUMvRCx1Q0FBdUMsQ0FBQyxvQkFBb0I7QUFBQSxNQUM1RCxtQ0FBbUM7QUFBQSxRQUNqQztBQUFBLE1BQ0Y7QUFBQSxNQUNBLGtCQUFrQixDQUFDLGFBQWE7QUFBQSxNQUNoQyxnQ0FBZ0MsQ0FBQyxxQ0FBcUM7QUFBQSxNQUN0RSx5QkFBeUIsQ0FBQyxxQ0FBcUM7QUFBQSxNQUMvRCxxQkFBcUIsQ0FBQyx3QkFBd0I7QUFBQSxNQUM5QywyQkFBMkIsQ0FBQyx1Q0FBdUM7QUFBQSxNQUNuRSxpQ0FBaUM7QUFBQSxRQUMvQjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLGdCQUFnQixDQUFDLGtDQUFrQztBQUFBLE1BQ25ELDJDQUEyQztBQUFBLFFBQ3pDO0FBQUEsTUFDRjtBQUFBLE1BQ0EscUNBQXFDLENBQUMsbUJBQW1CO0FBQUEsTUFDekQsd0JBQXdCLENBQUMsK0JBQStCO0FBQUEsTUFDeEQsd0JBQXdCLENBQUMscUNBQXFDO0FBQUEsTUFDOUQsdUJBQXVCLENBQUMsc0NBQXNDO0FBQUEsTUFDOUQsc0NBQXNDLENBQUMseUJBQXlCO0FBQUEsTUFDaEUscUJBQXFCLENBQUMsdUNBQXVDO0FBQUEsTUFDN0QseUJBQXlCLENBQUMsb0JBQW9CO0FBQUEsTUFDOUMsNkJBQTZCLENBQUMseUNBQXlDO0FBQUEsTUFDdkUsa0JBQWtCLENBQUMsMkNBQTJDO0FBQUEsTUFDOUQsa0JBQWtCLENBQUMsMENBQTBDO0FBQUEsTUFDN0QscUJBQXFCLENBQUMsd0NBQXdDO0FBQUEsTUFDOUQsdUJBQXVCO0FBQUEsUUFDckI7QUFBQSxNQUNGO0FBQUEsTUFDQSw4QkFBOEIsQ0FBQyxrQ0FBa0M7QUFBQSxNQUNqRSxnQ0FBZ0MsQ0FBQyxxQ0FBcUM7QUFBQSxJQUN4RTtBQUFBLElBQ0EsTUFBTTtBQUFBLE1BQ0osdUJBQXVCO0FBQUEsUUFDckI7QUFBQSxRQUNBLENBQUM7QUFBQSxRQUNELEVBQUUsU0FBUyxDQUFDLFFBQVEsMkNBQTJDLEVBQUU7QUFBQSxNQUNuRTtBQUFBLE1BQ0EsMkNBQTJDO0FBQUEsUUFDekM7QUFBQSxNQUNGO0FBQUEsTUFDQSxZQUFZLENBQUMsc0NBQXNDO0FBQUEsTUFDbkQsb0JBQW9CLENBQUMsd0NBQXdDO0FBQUEsTUFDN0QsK0JBQStCO0FBQUEsUUFDN0I7QUFBQSxNQUNGO0FBQUEsTUFDQSxxQkFBcUIsQ0FBQyx3Q0FBd0M7QUFBQSxNQUM5RCxvQkFBb0IsQ0FBQyw2Q0FBNkM7QUFBQSxNQUNsRSxhQUFhLENBQUMsd0NBQXdDO0FBQUEsTUFDdEQsa0JBQWtCLENBQUMsVUFBVTtBQUFBLE1BQzdCLFdBQVcsQ0FBQyxzQkFBc0I7QUFBQSxNQUNsQyxpQkFBaUIsQ0FBQywwQ0FBMEM7QUFBQSxNQUM1RCxvQkFBb0IsQ0FBQyw4QkFBOEI7QUFBQSxNQUNuRCxxQkFBcUIsQ0FBQyx3Q0FBd0M7QUFBQSxNQUM5RCwrQkFBK0I7QUFBQSxRQUM3QjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLHNDQUFzQztBQUFBLFFBQ3BDO0FBQUEsTUFDRjtBQUFBLE1BQ0EscUJBQXFCLENBQUMsb0NBQW9DO0FBQUEsTUFDMUQsd0JBQXdCLENBQUMsc0JBQXNCO0FBQUEsTUFDL0Msb0JBQW9CLENBQUMsd0NBQXdDO0FBQUEsTUFDN0QscUJBQXFCLENBQUMsbURBQW1EO0FBQUEsTUFDekUsNEJBQTRCO0FBQUEsUUFDMUI7QUFBQSxNQUNGO0FBQUEsTUFDQSwyQ0FBMkM7QUFBQSxRQUN6QztBQUFBLE1BQ0Y7QUFBQSxNQUNBLDZDQUE2QztBQUFBLFFBQzNDO0FBQUEsTUFDRjtBQUFBLE1BQ0EsbUJBQW1CLENBQUMsd0JBQXdCO0FBQUEsTUFDNUMsdUNBQXVDLENBQUMseUJBQXlCO0FBQUEsTUFDakUsV0FBVyxDQUFDLGdDQUFnQztBQUFBLE1BQzVDLGtCQUFrQixDQUFDLHdDQUF3QztBQUFBLE1BQzNELG1DQUFtQyxDQUFDLGdDQUFnQztBQUFBLE1BQ3BFLHVDQUF1QyxDQUFDLGlDQUFpQztBQUFBLE1BQ3pFLDhDQUE4QztBQUFBLFFBQzVDO0FBQUEsTUFDRjtBQUFBLE1BQ0EsdUJBQXVCLENBQUMsMEJBQTBCO0FBQUEsTUFDbEQsMEJBQTBCO0FBQUEsUUFDeEI7QUFBQSxNQUNGO0FBQUEsTUFDQSw0QkFBNEI7QUFBQSxRQUMxQjtBQUFBLFFBQ0EsQ0FBQztBQUFBLFFBQ0QsRUFBRSxTQUFTLENBQUMsUUFBUSxnREFBZ0QsRUFBRTtBQUFBLE1BQ3hFO0FBQUEsTUFDQSxnREFBZ0Q7QUFBQSxRQUM5QztBQUFBLE1BQ0Y7QUFBQSxNQUNBLFlBQVksQ0FBQyx1Q0FBdUM7QUFBQSxNQUNwRCwrQkFBK0IsQ0FBQyw0QkFBNEI7QUFBQSxNQUM1RCxZQUFZLENBQUMsNkNBQTZDO0FBQUEsTUFDMUQscUJBQXFCLENBQUMsb0RBQW9EO0FBQUEsTUFDMUUsdUJBQXVCO0FBQUEsUUFDckI7QUFBQSxNQUNGO0FBQUEsTUFDQSwyQkFBMkIsQ0FBQyx3QkFBd0I7QUFBQSxJQUN0RDtBQUFBLElBQ0EsU0FBUztBQUFBLE1BQ1AsNEJBQTRCLENBQUMsMENBQTBDO0FBQUEsTUFDdkUsNkJBQTZCO0FBQUEsUUFDM0I7QUFBQSxNQUNGO0FBQUEsTUFDQSw2QkFBNkIsQ0FBQywyQ0FBMkM7QUFBQSxNQUN6RSw4QkFBOEI7QUFBQSxRQUM1QjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLDRCQUE0QjtBQUFBLFFBQzFCO0FBQUEsTUFDRjtBQUFBLE1BQ0EsNkJBQTZCO0FBQUEsUUFDM0I7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLElBQ0EsUUFBUTtBQUFBLE1BQ04sUUFBUSxDQUFDLHVDQUF1QztBQUFBLE1BQ2hELGFBQWEsQ0FBQyx5Q0FBeUM7QUFBQSxNQUN2RCxLQUFLLENBQUMscURBQXFEO0FBQUEsTUFDM0QsVUFBVSxDQUFDLHlEQUF5RDtBQUFBLE1BQ3BFLGlCQUFpQjtBQUFBLFFBQ2Y7QUFBQSxNQUNGO0FBQUEsTUFDQSxZQUFZLENBQUMsb0RBQW9EO0FBQUEsTUFDakUsY0FBYztBQUFBLFFBQ1o7QUFBQSxNQUNGO0FBQUEsTUFDQSxrQkFBa0IsQ0FBQyxzREFBc0Q7QUFBQSxNQUN6RSxjQUFjO0FBQUEsUUFDWjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLGdCQUFnQjtBQUFBLFFBQ2Q7QUFBQSxNQUNGO0FBQUEsTUFDQSxzQkFBc0I7QUFBQSxRQUNwQjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLFFBQVEsQ0FBQyx1REFBdUQ7QUFBQSxJQUNsRTtBQUFBLElBQ0EsY0FBYztBQUFBLE1BQ1osZ0JBQWdCO0FBQUEsUUFDZDtBQUFBLE1BQ0Y7QUFBQSxNQUNBLFVBQVU7QUFBQSxRQUNSO0FBQUEsUUFDQSxDQUFDO0FBQUEsUUFDRCxFQUFFLG1CQUFtQixFQUFFLFVBQVUsZUFBZSxFQUFFO0FBQUEsTUFDcEQ7QUFBQSxNQUNBLGFBQWE7QUFBQSxRQUNYO0FBQUEsTUFDRjtBQUFBLE1BQ0EsbUJBQW1CO0FBQUEsUUFDakI7QUFBQSxNQUNGO0FBQUEsTUFDQSxpQkFBaUIsQ0FBQyx1REFBdUQ7QUFBQSxNQUN6RSxVQUFVLENBQUMsMkRBQTJEO0FBQUEsTUFDdEUsb0JBQW9CO0FBQUEsUUFDbEI7QUFBQSxNQUNGO0FBQUEsTUFDQSxrQkFBa0IsQ0FBQyxzQ0FBc0M7QUFBQSxNQUN6RCxtQkFBbUIsQ0FBQyxnREFBZ0Q7QUFBQSxNQUNwRSxxQkFBcUI7QUFBQSxRQUNuQjtBQUFBLFFBQ0EsQ0FBQztBQUFBLFFBQ0QsRUFBRSxTQUFTLENBQUMsZ0JBQWdCLG9CQUFvQixFQUFFO0FBQUEsTUFDcEQ7QUFBQSxNQUNBLHFCQUFxQjtBQUFBLFFBQ25CO0FBQUEsTUFDRjtBQUFBLE1BQ0Esb0JBQW9CLENBQUMsa0RBQWtEO0FBQUEsTUFDdkUsYUFBYTtBQUFBLFFBQ1g7QUFBQSxNQUNGO0FBQUEsTUFDQSxvQkFBb0I7QUFBQSxRQUNsQjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLGFBQWEsQ0FBQyxpREFBaUQ7QUFBQSxJQUNqRTtBQUFBLElBQ0EsZ0JBQWdCO0FBQUEsTUFDZCxzQkFBc0IsQ0FBQyx1QkFBdUI7QUFBQSxNQUM5QyxnQkFBZ0IsQ0FBQyw2QkFBNkI7QUFBQSxJQUNoRDtBQUFBLElBQ0EsWUFBWTtBQUFBLE1BQ1YsNENBQTRDO0FBQUEsUUFDMUM7QUFBQSxNQUNGO0FBQUEsTUFDQSw0QkFBNEI7QUFBQSxRQUMxQjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLGlDQUFpQztBQUFBLFFBQy9CO0FBQUEsTUFDRjtBQUFBLE1BQ0EsdUNBQXVDO0FBQUEsUUFDckM7QUFBQSxNQUNGO0FBQUEsTUFDQSw0QkFBNEIsQ0FBQyx1QkFBdUI7QUFBQSxNQUNwRCx5QkFBeUI7QUFBQSxRQUN2QjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLDBCQUEwQjtBQUFBLFFBQ3hCO0FBQUEsTUFDRjtBQUFBLE1BQ0EsMENBQTBDO0FBQUEsUUFDeEM7QUFBQSxNQUNGO0FBQUEsTUFDQSxrQ0FBa0M7QUFBQSxRQUNoQztBQUFBLE1BQ0Y7QUFBQSxNQUNBLG9DQUFvQztBQUFBLFFBQ2xDO0FBQUEsTUFDRjtBQUFBLE1BQ0EsNEJBQTRCLENBQUMsMENBQTBDO0FBQUEsTUFDdkUsd0JBQXdCO0FBQUEsUUFDdEI7QUFBQSxNQUNGO0FBQUEsTUFDQSxpQkFBaUIsQ0FBQyxxREFBcUQ7QUFBQSxNQUN2RSxrQkFBa0I7QUFBQSxRQUNoQjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLGtDQUFrQztBQUFBLFFBQ2hDO0FBQUEsTUFDRjtBQUFBLE1BQ0EsNEJBQTRCO0FBQUEsUUFDMUI7QUFBQSxNQUNGO0FBQUEsTUFDQSwyQkFBMkI7QUFBQSxRQUN6QjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLHNDQUFzQztBQUFBLFFBQ3BDO0FBQUEsTUFDRjtBQUFBLE1BQ0EseUJBQXlCLENBQUMsdUNBQXVDO0FBQUEsTUFDakUsaUJBQWlCLENBQUMsK0NBQStDO0FBQUEsTUFDakUsY0FBYyxDQUFDLGtEQUFrRDtBQUFBLE1BQ2pFLGtDQUFrQztBQUFBLFFBQ2hDO0FBQUEsTUFDRjtBQUFBLE1BQ0Esa0JBQWtCO0FBQUEsUUFDaEI7QUFBQSxNQUNGO0FBQUEsTUFDQSxlQUFlO0FBQUEsUUFDYjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLCtCQUErQjtBQUFBLFFBQzdCO0FBQUEsTUFDRjtBQUFBLE1BQ0EsbURBQW1EO0FBQUEsUUFDakQ7QUFBQSxNQUNGO0FBQUEsTUFDQSwwQkFBMEIsQ0FBQyxzQkFBc0I7QUFBQSxNQUNqRCxvQkFBb0I7QUFBQSxRQUNsQjtBQUFBLFFBQ0EsQ0FBQztBQUFBLFFBQ0QsRUFBRSxtQkFBbUIsRUFBRSxRQUFRLE1BQU0sRUFBRTtBQUFBLE1BQ3pDO0FBQUEsTUFDQSxzQ0FBc0M7QUFBQSxRQUNwQztBQUFBLE1BQ0Y7QUFBQSxNQUNBLGdCQUFnQixDQUFDLG9DQUFvQztBQUFBLE1BQ3JELGlCQUFpQixDQUFDLDhDQUE4QztBQUFBLE1BQ2hFLCtDQUErQztBQUFBLFFBQzdDO0FBQUEsTUFDRjtBQUFBLE1BQ0EsaUNBQWlDLENBQUMsOEJBQThCO0FBQUEsTUFDaEUsK0JBQStCO0FBQUEsUUFDN0I7QUFBQSxNQUNGO0FBQUEsTUFDQSx1Q0FBdUM7QUFBQSxRQUNyQztBQUFBLE1BQ0Y7QUFBQSxNQUNBLDZCQUE2QjtBQUFBLFFBQzNCO0FBQUEsTUFDRjtBQUFBLE1BQ0EsK0NBQStDO0FBQUEsUUFDN0M7QUFBQSxNQUNGO0FBQUEsTUFDQSxpQ0FBaUM7QUFBQSxRQUMvQjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLGtDQUFrQztBQUFBLFFBQ2hDO0FBQUEsTUFDRjtBQUFBLE1BQ0EsOENBQThDO0FBQUEsUUFDNUM7QUFBQSxNQUNGO0FBQUEsTUFDQSw4QkFBOEI7QUFBQSxRQUM1QjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLDJCQUEyQixDQUFDLDhDQUE4QztBQUFBLE1BQzFFLDBCQUEwQixDQUFDLDZDQUE2QztBQUFBLE1BQ3hFLG9CQUFvQjtBQUFBLFFBQ2xCO0FBQUEsTUFDRjtBQUFBLE1BQ0EsNEJBQTRCLENBQUMseUNBQXlDO0FBQUEsSUFDeEU7QUFBQSxJQUNBLFNBQVM7QUFBQSxNQUNQLHlCQUF5QjtBQUFBLFFBQ3ZCO0FBQUEsTUFDRjtBQUFBLE1BQ0EseUJBQXlCO0FBQUEsUUFDdkI7QUFBQSxNQUNGO0FBQUEsTUFDQSxxQ0FBcUM7QUFBQSxRQUNuQztBQUFBLE1BQ0Y7QUFBQSxNQUNBLHFDQUFxQztBQUFBLFFBQ25DO0FBQUEsTUFDRjtBQUFBLE1BQ0EsK0JBQStCLENBQUMsaUNBQWlDO0FBQUEsTUFDakUsOEJBQThCO0FBQUEsUUFDNUI7QUFBQSxNQUNGO0FBQUEsTUFDQSxrQkFBa0IsQ0FBQyx1Q0FBdUM7QUFBQSxJQUM1RDtBQUFBLElBQ0EsWUFBWTtBQUFBLE1BQ1YsNEJBQTRCO0FBQUEsUUFDMUI7QUFBQSxNQUNGO0FBQUEsTUFDQSx5QkFBeUI7QUFBQSxRQUN2QjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLDBCQUEwQjtBQUFBLFFBQ3hCO0FBQUEsTUFDRjtBQUFBLE1BQ0EsaUJBQWlCLENBQUMscURBQXFEO0FBQUEsTUFDdkUsa0JBQWtCO0FBQUEsUUFDaEI7QUFBQSxNQUNGO0FBQUEsTUFDQSxVQUFVLENBQUMsNERBQTREO0FBQUEsTUFDdkUsaUJBQWlCLENBQUMsK0NBQStDO0FBQUEsTUFDakUsY0FBYyxDQUFDLGtEQUFrRDtBQUFBLE1BQ2pFLGtCQUFrQjtBQUFBLFFBQ2hCO0FBQUEsTUFDRjtBQUFBLE1BQ0EsZUFBZTtBQUFBLFFBQ2I7QUFBQSxNQUNGO0FBQUEsTUFDQSx5QkFBeUI7QUFBQSxRQUN2QjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLGtCQUFrQixDQUFDLG1DQUFtQztBQUFBLE1BQ3RELG1CQUFtQixDQUFDLDZDQUE2QztBQUFBLE1BQ2pFLGdCQUFnQixDQUFDLG9DQUFvQztBQUFBLE1BQ3JELGlCQUFpQixDQUFDLDhDQUE4QztBQUFBLE1BQ2hFLCtCQUErQjtBQUFBLFFBQzdCO0FBQUEsTUFDRjtBQUFBLE1BQ0EsaUNBQWlDO0FBQUEsUUFDL0I7QUFBQSxNQUNGO0FBQUEsTUFDQSw4QkFBOEI7QUFBQSxRQUM1QjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLGFBQWE7QUFBQSxRQUNYO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxJQUNBLGlCQUFpQjtBQUFBLE1BQ2YsMEJBQTBCO0FBQUEsUUFDeEI7QUFBQSxNQUNGO0FBQUEsTUFDQSxXQUFXO0FBQUEsUUFDVDtBQUFBLE1BQ0Y7QUFBQSxNQUNBLFlBQVksQ0FBQyxpREFBaUQ7QUFBQSxJQUNoRTtBQUFBLElBQ0EsUUFBUSxFQUFFLEtBQUssQ0FBQyxhQUFhLEVBQUU7QUFBQSxJQUMvQixPQUFPO0FBQUEsTUFDTCxnQkFBZ0IsQ0FBQywyQkFBMkI7QUFBQSxNQUM1QyxRQUFRLENBQUMsYUFBYTtBQUFBLE1BQ3RCLGVBQWUsQ0FBQyxnQ0FBZ0M7QUFBQSxNQUNoRCxRQUFRLENBQUMseUJBQXlCO0FBQUEsTUFDbEMsZUFBZSxDQUFDLCtDQUErQztBQUFBLE1BQy9ELE1BQU0sQ0FBQyw2QkFBNkI7QUFBQSxNQUNwQyxLQUFLLENBQUMsc0JBQXNCO0FBQUEsTUFDNUIsWUFBWSxDQUFDLDRDQUE0QztBQUFBLE1BQ3pELGFBQWEsQ0FBQyw0QkFBNEI7QUFBQSxNQUMxQyxNQUFNLENBQUMsWUFBWTtBQUFBLE1BQ25CLGNBQWMsQ0FBQywrQkFBK0I7QUFBQSxNQUM5QyxhQUFhLENBQUMsOEJBQThCO0FBQUEsTUFDNUMsYUFBYSxDQUFDLDZCQUE2QjtBQUFBLE1BQzNDLFdBQVcsQ0FBQyw0QkFBNEI7QUFBQSxNQUN4QyxZQUFZLENBQUMsbUJBQW1CO0FBQUEsTUFDaEMsYUFBYSxDQUFDLG9CQUFvQjtBQUFBLE1BQ2xDLE1BQU0sQ0FBQywyQkFBMkI7QUFBQSxNQUNsQyxRQUFRLENBQUMsOEJBQThCO0FBQUEsTUFDdkMsUUFBUSxDQUFDLHdCQUF3QjtBQUFBLE1BQ2pDLGVBQWUsQ0FBQyw4Q0FBOEM7QUFBQSxJQUNoRTtBQUFBLElBQ0EsS0FBSztBQUFBLE1BQ0gsWUFBWSxDQUFDLHNDQUFzQztBQUFBLE1BQ25ELGNBQWMsQ0FBQyx3Q0FBd0M7QUFBQSxNQUN2RCxXQUFXLENBQUMscUNBQXFDO0FBQUEsTUFDakQsV0FBVyxDQUFDLHFDQUFxQztBQUFBLE1BQ2pELFlBQVksQ0FBQyxzQ0FBc0M7QUFBQSxNQUNuRCxXQUFXLENBQUMsNkNBQTZDO0FBQUEsTUFDekQsU0FBUyxDQUFDLGdEQUFnRDtBQUFBLE1BQzFELFdBQVcsQ0FBQyxvREFBb0Q7QUFBQSxNQUNoRSxRQUFRLENBQUMseUNBQXlDO0FBQUEsTUFDbEQsUUFBUSxDQUFDLDhDQUE4QztBQUFBLE1BQ3ZELFNBQVMsQ0FBQyxnREFBZ0Q7QUFBQSxNQUMxRCxrQkFBa0IsQ0FBQyxtREFBbUQ7QUFBQSxNQUN0RSxXQUFXLENBQUMsNENBQTRDO0FBQUEsSUFDMUQ7QUFBQSxJQUNBLFdBQVc7QUFBQSxNQUNULGlCQUFpQixDQUFDLDBCQUEwQjtBQUFBLE1BQzVDLGFBQWEsQ0FBQyxpQ0FBaUM7QUFBQSxJQUNqRDtBQUFBLElBQ0EsY0FBYztBQUFBLE1BQ1oscUNBQXFDLENBQUMsOEJBQThCO0FBQUEsTUFDcEUsdUJBQXVCLENBQUMsb0NBQW9DO0FBQUEsTUFDNUQsd0JBQXdCLENBQUMsOENBQThDO0FBQUEsTUFDdkUsbUNBQW1DO0FBQUEsUUFDakM7QUFBQSxRQUNBLENBQUM7QUFBQSxRQUNELEVBQUUsU0FBUyxDQUFDLGdCQUFnQixxQ0FBcUMsRUFBRTtBQUFBLE1BQ3JFO0FBQUEsTUFDQSx3Q0FBd0MsQ0FBQyxpQ0FBaUM7QUFBQSxNQUMxRSwwQkFBMEIsQ0FBQyx1Q0FBdUM7QUFBQSxNQUNsRSwyQkFBMkI7QUFBQSxRQUN6QjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLHNDQUFzQztBQUFBLFFBQ3BDO0FBQUEsUUFDQSxDQUFDO0FBQUEsUUFDRCxFQUFFLFNBQVMsQ0FBQyxnQkFBZ0Isd0NBQXdDLEVBQUU7QUFBQSxNQUN4RTtBQUFBLE1BQ0EscUNBQXFDLENBQUMsOEJBQThCO0FBQUEsTUFDcEUsdUJBQXVCLENBQUMsb0NBQW9DO0FBQUEsTUFDNUQsd0JBQXdCLENBQUMsOENBQThDO0FBQUEsTUFDdkUsbUNBQW1DO0FBQUEsUUFDakM7QUFBQSxRQUNBLENBQUM7QUFBQSxRQUNELEVBQUUsU0FBUyxDQUFDLGdCQUFnQixxQ0FBcUMsRUFBRTtBQUFBLE1BQ3JFO0FBQUEsSUFDRjtBQUFBLElBQ0EsUUFBUTtBQUFBLE1BQ04sY0FBYztBQUFBLFFBQ1o7QUFBQSxNQUNGO0FBQUEsTUFDQSxXQUFXLENBQUMseURBQXlEO0FBQUEsTUFDckUsd0JBQXdCLENBQUMsZ0RBQWdEO0FBQUEsTUFDekUsK0JBQStCO0FBQUEsUUFDN0I7QUFBQSxNQUNGO0FBQUEsTUFDQSxRQUFRLENBQUMsbUNBQW1DO0FBQUEsTUFDNUMsZUFBZTtBQUFBLFFBQ2I7QUFBQSxNQUNGO0FBQUEsTUFDQSxhQUFhLENBQUMsbUNBQW1DO0FBQUEsTUFDakQsaUJBQWlCLENBQUMsdUNBQXVDO0FBQUEsTUFDekQsZUFBZTtBQUFBLFFBQ2I7QUFBQSxNQUNGO0FBQUEsTUFDQSxhQUFhLENBQUMsNENBQTRDO0FBQUEsTUFDMUQsaUJBQWlCO0FBQUEsUUFDZjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLEtBQUssQ0FBQyxpREFBaUQ7QUFBQSxNQUN2RCxZQUFZLENBQUMsd0RBQXdEO0FBQUEsTUFDckUsVUFBVSxDQUFDLG9EQUFvRDtBQUFBLE1BQy9ELFVBQVUsQ0FBQyx5Q0FBeUM7QUFBQSxNQUNwRCxjQUFjLENBQUMseURBQXlEO0FBQUEsTUFDeEUsTUFBTSxDQUFDLGFBQWE7QUFBQSxNQUNwQixlQUFlLENBQUMscUNBQXFDO0FBQUEsTUFDckQsY0FBYyxDQUFDLDBEQUEwRDtBQUFBLE1BQ3pFLHFCQUFxQixDQUFDLDJDQUEyQztBQUFBLE1BQ2pFLFlBQVksQ0FBQyx3REFBd0Q7QUFBQSxNQUNyRSxtQkFBbUIsQ0FBQyx5Q0FBeUM7QUFBQSxNQUM3RCx1QkFBdUI7QUFBQSxRQUNyQjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLDBCQUEwQixDQUFDLGtCQUFrQjtBQUFBLE1BQzdDLFlBQVksQ0FBQyx3QkFBd0I7QUFBQSxNQUNyQyxhQUFhLENBQUMsa0NBQWtDO0FBQUEsTUFDaEQsd0JBQXdCO0FBQUEsUUFDdEI7QUFBQSxNQUNGO0FBQUEsTUFDQSxtQkFBbUIsQ0FBQyxrQ0FBa0M7QUFBQSxNQUN0RCxtQkFBbUI7QUFBQSxRQUNqQjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLGdCQUFnQixDQUFDLHNDQUFzQztBQUFBLE1BQ3ZELE1BQU0sQ0FBQyxzREFBc0Q7QUFBQSxNQUM3RCxpQkFBaUI7QUFBQSxRQUNmO0FBQUEsTUFDRjtBQUFBLE1BQ0EsaUJBQWlCO0FBQUEsUUFDZjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLGFBQWE7QUFBQSxRQUNYO0FBQUEsTUFDRjtBQUFBLE1BQ0EsV0FBVyxDQUFDLHdEQUF3RDtBQUFBLE1BQ3BFLFFBQVEsQ0FBQyx5REFBeUQ7QUFBQSxNQUNsRSxRQUFRLENBQUMsbURBQW1EO0FBQUEsTUFDNUQsZUFBZSxDQUFDLDBEQUEwRDtBQUFBLE1BQzFFLGFBQWEsQ0FBQywyQ0FBMkM7QUFBQSxNQUN6RCxpQkFBaUI7QUFBQSxRQUNmO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxJQUNBLFVBQVU7QUFBQSxNQUNSLEtBQUssQ0FBQyx5QkFBeUI7QUFBQSxNQUMvQixvQkFBb0IsQ0FBQyxlQUFlO0FBQUEsTUFDcEMsWUFBWSxDQUFDLG1DQUFtQztBQUFBLElBQ2xEO0FBQUEsSUFDQSxVQUFVO0FBQUEsTUFDUixRQUFRLENBQUMsZ0JBQWdCO0FBQUEsTUFDekIsV0FBVztBQUFBLFFBQ1Q7QUFBQSxRQUNBLEVBQUUsU0FBUyxFQUFFLGdCQUFnQiw0QkFBNEIsRUFBRTtBQUFBLE1BQzdEO0FBQUEsSUFDRjtBQUFBLElBQ0EsTUFBTTtBQUFBLE1BQ0osS0FBSyxDQUFDLFdBQVc7QUFBQSxNQUNqQixnQkFBZ0IsQ0FBQyxlQUFlO0FBQUEsTUFDaEMsWUFBWSxDQUFDLGNBQWM7QUFBQSxNQUMzQixRQUFRLENBQUMsVUFBVTtBQUFBLE1BQ25CLE1BQU0sQ0FBQyxPQUFPO0FBQUEsSUFDaEI7QUFBQSxJQUNBLFlBQVk7QUFBQSxNQUNWLGNBQWM7QUFBQSxRQUNaO0FBQUEsUUFDQSxDQUFDO0FBQUEsUUFDRDtBQUFBLFVBQ0UsWUFBWTtBQUFBLFFBQ2Q7QUFBQSxNQUNGO0FBQUEsTUFDQSxtQ0FBbUM7QUFBQSxRQUNqQztBQUFBLE1BQ0Y7QUFBQSxNQUNBLHFCQUFxQjtBQUFBLFFBQ25CO0FBQUEsTUFDRjtBQUFBLE1BQ0EsdUJBQXVCO0FBQUEsUUFDckI7QUFBQSxNQUNGO0FBQUEsTUFDQSxnQ0FBZ0M7QUFBQSxRQUM5QjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLGtCQUFrQjtBQUFBLFFBQ2hCO0FBQUEsUUFDQSxDQUFDO0FBQUEsUUFDRDtBQUFBLFVBQ0UsWUFBWTtBQUFBLFFBQ2Q7QUFBQSxNQUNGO0FBQUEsTUFDQSxpQkFBaUI7QUFBQSxRQUNmO0FBQUEsUUFDQSxDQUFDO0FBQUEsUUFDRDtBQUFBLFVBQ0UsWUFBWTtBQUFBLFFBQ2Q7QUFBQSxNQUNGO0FBQUEsTUFDQSxlQUFlO0FBQUEsUUFDYjtBQUFBLFFBQ0EsQ0FBQztBQUFBLFFBQ0Q7QUFBQSxVQUNFLFlBQVk7QUFBQSxRQUNkO0FBQUEsTUFDRjtBQUFBLE1BQ0EsK0JBQStCLENBQUMscUNBQXFDO0FBQUEsTUFDckUsaUJBQWlCLENBQUMsMkNBQTJDO0FBQUEsTUFDN0QsMEJBQTBCLENBQUMsc0JBQXNCO0FBQUEsTUFDakQsWUFBWSxDQUFDLDRCQUE0QjtBQUFBLE1BQ3pDLCtCQUErQjtBQUFBLFFBQzdCO0FBQUEsTUFDRjtBQUFBLE1BQ0EsaUJBQWlCLENBQUMsd0RBQXdEO0FBQUEsTUFDMUUsa0JBQWtCO0FBQUEsUUFDaEI7QUFBQSxRQUNBLENBQUM7QUFBQSxRQUNELEVBQUUsU0FBUyxDQUFDLGNBQWMsK0JBQStCLEVBQUU7QUFBQSxNQUM3RDtBQUFBLE1BQ0EsaUJBQWlCO0FBQUEsUUFDZjtBQUFBLFFBQ0EsQ0FBQztBQUFBLFFBQ0Q7QUFBQSxVQUNFLFlBQVk7QUFBQSxRQUNkO0FBQUEsTUFDRjtBQUFBLE1BQ0Esa0JBQWtCO0FBQUEsUUFDaEI7QUFBQSxRQUNBLENBQUM7QUFBQSxRQUNEO0FBQUEsVUFDRSxZQUFZO0FBQUEsUUFDZDtBQUFBLE1BQ0Y7QUFBQSxNQUNBLDJCQUEyQixDQUFDLHVCQUF1QjtBQUFBLE1BQ25ELGFBQWEsQ0FBQyw2QkFBNkI7QUFBQSxNQUMzQyxhQUFhO0FBQUEsUUFDWDtBQUFBLFFBQ0EsQ0FBQztBQUFBLFFBQ0Q7QUFBQSxVQUNFLFlBQVk7QUFBQSxRQUNkO0FBQUEsTUFDRjtBQUFBLE1BQ0EsZ0NBQWdDO0FBQUEsUUFDOUI7QUFBQSxNQUNGO0FBQUEsTUFDQSxrQkFBa0I7QUFBQSxRQUNoQjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLGNBQWM7QUFBQSxRQUNaO0FBQUEsUUFDQSxDQUFDO0FBQUEsUUFDRDtBQUFBLFVBQ0UsWUFBWTtBQUFBLFFBQ2Q7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLElBQ0EsTUFBTTtBQUFBLE1BQ0osZ0NBQWdDO0FBQUEsUUFDOUI7QUFBQSxNQUNGO0FBQUEsTUFDQSxtQ0FBbUM7QUFBQSxRQUNqQztBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsSUFDQSxNQUFNO0FBQUEsTUFDSix3QkFBd0I7QUFBQSxRQUN0QjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLHFCQUFxQjtBQUFBLFFBQ25CO0FBQUEsTUFDRjtBQUFBLE1BQ0EscUJBQXFCO0FBQUEsUUFDbkI7QUFBQSxNQUNGO0FBQUEsTUFDQSxXQUFXLENBQUMsbUNBQW1DO0FBQUEsTUFDL0Msa0JBQWtCLENBQUMsZ0RBQWdEO0FBQUEsTUFDbkUsa0JBQWtCLENBQUMsbUNBQW1DO0FBQUEsTUFDdEQsd0JBQXdCLENBQUMsb0NBQW9DO0FBQUEsTUFDN0QsOEJBQThCLENBQUMsMkNBQTJDO0FBQUEsTUFDMUUsb0NBQW9DO0FBQUEsUUFDbEM7QUFBQSxNQUNGO0FBQUEsTUFDQSw4QkFBOEIsQ0FBQyxxQ0FBcUM7QUFBQSxNQUNwRSxrQkFBa0IsQ0FBQyw4QkFBOEI7QUFBQSxNQUNqRCxnQ0FBZ0MsQ0FBQyxxQ0FBcUM7QUFBQSxNQUN0RSw4Q0FBOEM7QUFBQSxRQUM1QztBQUFBLE1BQ0Y7QUFBQSxNQUNBLDhCQUE4QjtBQUFBLFFBQzVCO0FBQUEsTUFDRjtBQUFBLE1BQ0EsZUFBZSxDQUFDLHdCQUF3QjtBQUFBLE1BQ3hDLFFBQVEsQ0FBQyxvQkFBb0I7QUFBQSxNQUM3Qiw4QkFBOEI7QUFBQSxRQUM1QjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLGVBQWUsQ0FBQyxvQ0FBb0M7QUFBQSxNQUNwRCw2Q0FBNkM7QUFBQSxRQUMzQztBQUFBLE1BQ0Y7QUFBQSxNQUNBLEtBQUssQ0FBQyxpQkFBaUI7QUFBQSxNQUN2Qix3QkFBd0IsQ0FBQyxtQ0FBbUM7QUFBQSxNQUM1RCxtQkFBbUI7QUFBQSxRQUNqQjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLG1DQUFtQyxDQUFDLGtDQUFrQztBQUFBLE1BQ3RFLHNCQUFzQixDQUFDLHdDQUF3QztBQUFBLE1BQy9ELFlBQVksQ0FBQyw4Q0FBOEM7QUFBQSxNQUMzRCxZQUFZLENBQUMsaUNBQWlDO0FBQUEsTUFDOUMsd0JBQXdCLENBQUMsd0NBQXdDO0FBQUEsTUFDakUsb0JBQW9CO0FBQUEsUUFDbEI7QUFBQSxNQUNGO0FBQUEsTUFDQSxNQUFNLENBQUMsb0JBQW9CO0FBQUEsTUFDM0Isc0JBQXNCLENBQUMsK0JBQStCO0FBQUEsTUFDdEQsa0JBQWtCLENBQUMsd0JBQXdCO0FBQUEsTUFDM0Msb0NBQW9DLENBQUMsbUNBQW1DO0FBQUEsTUFDeEUsdUJBQXVCLENBQUMsb0NBQW9DO0FBQUEsTUFDNUQsMEJBQTBCLENBQUMsZ0JBQWdCO0FBQUEsTUFDM0MsYUFBYSxDQUFDLDRCQUE0QjtBQUFBLE1BQzFDLHFCQUFxQixDQUFDLG1EQUFtRDtBQUFBLE1BQ3pFLGFBQWEsQ0FBQyx5QkFBeUI7QUFBQSxNQUN2QyxxQ0FBcUMsQ0FBQyw0QkFBNEI7QUFBQSxNQUNsRSxrQkFBa0IsQ0FBQyxvREFBb0Q7QUFBQSxNQUN2RSxrQkFBa0IsQ0FBQyxvREFBb0Q7QUFBQSxNQUN2RSxjQUFjLENBQUMsb0NBQW9DO0FBQUEsTUFDbkQsd0NBQXdDO0FBQUEsUUFDdEM7QUFBQSxNQUNGO0FBQUEsTUFDQSwwQkFBMEIsQ0FBQyx1Q0FBdUM7QUFBQSxNQUNsRSwwQkFBMEI7QUFBQSxRQUN4QjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLGlDQUFpQztBQUFBLFFBQy9CO0FBQUEsTUFDRjtBQUFBLE1BQ0Esc0JBQXNCLENBQUMsZ0RBQWdEO0FBQUEsTUFDdkUsZUFBZSxDQUFDLHdDQUF3QztBQUFBLE1BQ3hELHdCQUF3QixDQUFDLDZCQUE2QjtBQUFBLE1BQ3RELG1CQUFtQixDQUFDLGdDQUFnQztBQUFBLE1BQ3BELDBCQUEwQixDQUFDLG1DQUFtQztBQUFBLE1BQzlELHVCQUF1QixDQUFDLDRDQUE0QztBQUFBLE1BQ3BFLGNBQWMsQ0FBQyx1QkFBdUI7QUFBQSxNQUN0Qyw2QkFBNkI7QUFBQSxRQUMzQjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLGFBQWEsQ0FBQyx3Q0FBd0M7QUFBQSxNQUN0RCwwQkFBMEI7QUFBQSxRQUN4QjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLHNCQUFzQjtBQUFBLFFBQ3BCO0FBQUEsTUFDRjtBQUFBLE1BQ0EsY0FBYyxDQUFDLHVDQUF1QztBQUFBLE1BQ3RELHlCQUF5QixDQUFDLDJDQUEyQztBQUFBLE1BQ3JFLDJCQUEyQjtBQUFBLFFBQ3pCO0FBQUEsTUFDRjtBQUFBLE1BQ0EsNENBQTRDO0FBQUEsUUFDMUM7QUFBQSxNQUNGO0FBQUEsTUFDQSwyQkFBMkI7QUFBQSxRQUN6QjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLHVCQUF1QjtBQUFBLFFBQ3JCO0FBQUEsTUFDRjtBQUFBLE1BQ0EsOEJBQThCO0FBQUEsUUFDNUI7QUFBQSxNQUNGO0FBQUEsTUFDQSx1QkFBdUI7QUFBQSxRQUNyQjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLHVCQUF1QjtBQUFBLFFBQ3JCO0FBQUEsTUFDRjtBQUFBLE1BQ0EsbUJBQW1CO0FBQUEsUUFDakI7QUFBQSxNQUNGO0FBQUEsTUFDQSxtQkFBbUI7QUFBQSxRQUNqQjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLHNCQUFzQixDQUFDLHdDQUF3QztBQUFBLE1BQy9ELHlDQUF5QztBQUFBLFFBQ3ZDO0FBQUEsTUFDRjtBQUFBLE1BQ0EsYUFBYSxDQUFDLHNDQUFzQztBQUFBLE1BQ3BELFFBQVEsQ0FBQyxtQkFBbUI7QUFBQSxNQUM1QixzQ0FBc0M7QUFBQSxRQUNwQztBQUFBLE1BQ0Y7QUFBQSxNQUNBLGlCQUFpQixDQUFDLGtEQUFrRDtBQUFBLE1BQ3BFLG1CQUFtQixDQUFDLHlDQUF5QztBQUFBLE1BQzdELGVBQWUsQ0FBQyxtQ0FBbUM7QUFBQSxNQUNuRCwyQkFBMkIsQ0FBQywwQ0FBMEM7QUFBQSxJQUN4RTtBQUFBLElBQ0EsVUFBVTtBQUFBLE1BQ1IsbUNBQW1DO0FBQUEsUUFDakM7QUFBQSxNQUNGO0FBQUEsTUFDQSxxQkFBcUI7QUFBQSxRQUNuQjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLHNCQUFzQjtBQUFBLFFBQ3BCO0FBQUEsTUFDRjtBQUFBLE1BQ0EsMENBQTBDO0FBQUEsUUFDeEM7QUFBQSxNQUNGO0FBQUEsTUFDQSw0QkFBNEI7QUFBQSxRQUMxQjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLDZCQUE2QjtBQUFBLFFBQzNCO0FBQUEsTUFDRjtBQUFBLE1BQ0EsOENBQThDO0FBQUEsUUFDNUM7QUFBQSxRQUNBLENBQUM7QUFBQSxRQUNELEVBQUUsU0FBUyxDQUFDLFlBQVksMkNBQTJDLEVBQUU7QUFBQSxNQUN2RTtBQUFBLE1BQ0EsNkRBQTZEO0FBQUEsUUFDM0Q7QUFBQSxRQUNBLENBQUM7QUFBQSxRQUNEO0FBQUEsVUFDRSxTQUFTO0FBQUEsWUFDUDtBQUFBLFlBQ0E7QUFBQSxVQUNGO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLHlEQUF5RDtBQUFBLFFBQ3ZEO0FBQUEsTUFDRjtBQUFBLE1BQ0EsMkNBQTJDO0FBQUEsUUFDekM7QUFBQSxNQUNGO0FBQUEsTUFDQSw0Q0FBNEM7QUFBQSxRQUMxQztBQUFBLE1BQ0Y7QUFBQSxNQUNBLGdDQUFnQztBQUFBLFFBQzlCO0FBQUEsTUFDRjtBQUFBLE1BQ0EsMkJBQTJCO0FBQUEsUUFDekI7QUFBQSxNQUNGO0FBQUEsTUFDQSxtQkFBbUI7QUFBQSxRQUNqQjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLHVDQUF1QztBQUFBLFFBQ3JDO0FBQUEsTUFDRjtBQUFBLE1BQ0Esa0NBQWtDO0FBQUEsUUFDaEM7QUFBQSxNQUNGO0FBQUEsTUFDQSwwQkFBMEI7QUFBQSxRQUN4QjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLDREQUE0RDtBQUFBLFFBQzFEO0FBQUEsTUFDRjtBQUFBLE1BQ0EsdURBQXVEO0FBQUEsUUFDckQ7QUFBQSxNQUNGO0FBQUEsTUFDQSwrQ0FBK0M7QUFBQSxRQUM3QztBQUFBLE1BQ0Y7QUFBQSxNQUNBLGtDQUFrQyxDQUFDLG9CQUFvQjtBQUFBLE1BQ3ZELDZCQUE2QixDQUFDLDBCQUEwQjtBQUFBLE1BQ3hELHFCQUFxQixDQUFDLGdDQUFnQztBQUFBLE1BQ3RELG9DQUFvQztBQUFBLFFBQ2xDO0FBQUEsTUFDRjtBQUFBLE1BQ0Esc0JBQXNCO0FBQUEsUUFDcEI7QUFBQSxNQUNGO0FBQUEsTUFDQSx1QkFBdUI7QUFBQSxRQUNyQjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLDJDQUEyQztBQUFBLFFBQ3pDO0FBQUEsTUFDRjtBQUFBLE1BQ0EsNkJBQTZCO0FBQUEsUUFDM0I7QUFBQSxNQUNGO0FBQUEsTUFDQSw4QkFBOEI7QUFBQSxRQUM1QjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsSUFDQSxVQUFVO0FBQUEsTUFDUixpQkFBaUIsQ0FBQyxxREFBcUQ7QUFBQSxNQUN2RSxZQUFZLENBQUMsMENBQTBDO0FBQUEsTUFDdkQsY0FBYyxDQUFDLHFDQUFxQztBQUFBLE1BQ3BELDRCQUE0QixDQUFDLHFCQUFxQjtBQUFBLE1BQ2xELGNBQWMsQ0FBQywyQkFBMkI7QUFBQSxNQUMxQyxlQUFlLENBQUMscUNBQXFDO0FBQUEsTUFDckQsUUFBUSxDQUFDLCtCQUErQjtBQUFBLE1BQ3hDLFlBQVksQ0FBQywwQ0FBMEM7QUFBQSxNQUN2RCxjQUFjLENBQUMsc0NBQXNDO0FBQUEsTUFDckQsS0FBSyxDQUFDLDRCQUE0QjtBQUFBLE1BQ2xDLFNBQVMsQ0FBQyx1Q0FBdUM7QUFBQSxNQUNqRCxXQUFXLENBQUMsbUNBQW1DO0FBQUEsTUFDL0Msc0JBQXNCO0FBQUEsUUFDcEI7QUFBQSxNQUNGO0FBQUEsTUFDQSxXQUFXLENBQUMseUNBQXlDO0FBQUEsTUFDckQsbUJBQW1CLENBQUMsMENBQTBDO0FBQUEsTUFDOUQsYUFBYSxDQUFDLG9DQUFvQztBQUFBLE1BQ2xELFlBQVksQ0FBQywwQkFBMEI7QUFBQSxNQUN2QyxhQUFhLENBQUMsb0NBQW9DO0FBQUEsTUFDbEQsYUFBYSxDQUFDLGdDQUFnQztBQUFBLE1BQzlDLFVBQVUsQ0FBQyw4Q0FBOEM7QUFBQSxNQUN6RCxZQUFZLENBQUMsMENBQTBDO0FBQUEsTUFDdkQsb0JBQW9CO0FBQUEsUUFDbEI7QUFBQSxNQUNGO0FBQUEsTUFDQSxRQUFRLENBQUMsOEJBQThCO0FBQUEsTUFDdkMsWUFBWSxDQUFDLHlDQUF5QztBQUFBLE1BQ3RELGNBQWMsQ0FBQyxxQ0FBcUM7QUFBQSxJQUN0RDtBQUFBLElBQ0EsT0FBTztBQUFBLE1BQ0wsZUFBZSxDQUFDLHFEQUFxRDtBQUFBLE1BQ3JFLFFBQVEsQ0FBQyxrQ0FBa0M7QUFBQSxNQUMzQyw2QkFBNkI7QUFBQSxRQUMzQjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLGNBQWMsQ0FBQyx3REFBd0Q7QUFBQSxNQUN2RSxxQkFBcUI7QUFBQSxRQUNuQjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLHFCQUFxQjtBQUFBLFFBQ25CO0FBQUEsTUFDRjtBQUFBLE1BQ0EscUJBQXFCO0FBQUEsUUFDbkI7QUFBQSxNQUNGO0FBQUEsTUFDQSxlQUFlO0FBQUEsUUFDYjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLEtBQUssQ0FBQywrQ0FBK0M7QUFBQSxNQUNyRCxXQUFXO0FBQUEsUUFDVDtBQUFBLE1BQ0Y7QUFBQSxNQUNBLGtCQUFrQixDQUFDLHVEQUF1RDtBQUFBLE1BQzFFLE1BQU0sQ0FBQyxpQ0FBaUM7QUFBQSxNQUN4Qyx1QkFBdUI7QUFBQSxRQUNyQjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLGFBQWEsQ0FBQyx1REFBdUQ7QUFBQSxNQUNyRSxXQUFXLENBQUMscURBQXFEO0FBQUEsTUFDakUsd0JBQXdCO0FBQUEsUUFDdEI7QUFBQSxNQUNGO0FBQUEsTUFDQSxvQkFBb0I7QUFBQSxRQUNsQjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLDJCQUEyQixDQUFDLDBDQUEwQztBQUFBLE1BQ3RFLGFBQWEsQ0FBQyx1REFBdUQ7QUFBQSxNQUNyRSxPQUFPLENBQUMscURBQXFEO0FBQUEsTUFDN0QsMEJBQTBCO0FBQUEsUUFDeEI7QUFBQSxNQUNGO0FBQUEsTUFDQSxrQkFBa0I7QUFBQSxRQUNoQjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLGNBQWM7QUFBQSxRQUNaO0FBQUEsTUFDRjtBQUFBLE1BQ0EsUUFBUSxDQUFDLGlEQUFpRDtBQUFBLE1BQzFELGNBQWM7QUFBQSxRQUNaO0FBQUEsTUFDRjtBQUFBLE1BQ0EsY0FBYztBQUFBLFFBQ1o7QUFBQSxNQUNGO0FBQUEsTUFDQSxxQkFBcUI7QUFBQSxRQUNuQjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsSUFDQSxXQUFXLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixFQUFFO0FBQUEsSUFDdEMsV0FBVztBQUFBLE1BQ1Qsd0JBQXdCO0FBQUEsUUFDdEI7QUFBQSxNQUNGO0FBQUEsTUFDQSxnQkFBZ0I7QUFBQSxRQUNkO0FBQUEsTUFDRjtBQUFBLE1BQ0EsdUJBQXVCO0FBQUEsUUFDckI7QUFBQSxNQUNGO0FBQUEsTUFDQSxtQ0FBbUM7QUFBQSxRQUNqQztBQUFBLE1BQ0Y7QUFBQSxNQUNBLGtCQUFrQjtBQUFBLFFBQ2hCO0FBQUEsTUFDRjtBQUFBLE1BQ0EscUNBQXFDO0FBQUEsUUFDbkM7QUFBQSxNQUNGO0FBQUEsTUFDQSw4QkFBOEI7QUFBQSxRQUM1QjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLHdCQUF3QjtBQUFBLFFBQ3RCO0FBQUEsTUFDRjtBQUFBLE1BQ0EsZ0JBQWdCO0FBQUEsUUFDZDtBQUFBLE1BQ0Y7QUFBQSxNQUNBLHVCQUF1QjtBQUFBLFFBQ3JCO0FBQUEsTUFDRjtBQUFBLE1BQ0EsNkJBQTZCO0FBQUEsUUFDM0I7QUFBQSxNQUNGO0FBQUEsTUFDQSxrQkFBa0I7QUFBQSxRQUNoQjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLHlCQUF5QjtBQUFBLFFBQ3ZCO0FBQUEsTUFDRjtBQUFBLE1BQ0EsZ0NBQWdDO0FBQUEsUUFDOUI7QUFBQSxNQUNGO0FBQUEsTUFDQSxzQkFBc0I7QUFBQSxRQUNwQjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLGNBQWMsQ0FBQywyREFBMkQ7QUFBQSxNQUMxRSxxQkFBcUI7QUFBQSxRQUNuQjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLGlDQUFpQztBQUFBLFFBQy9CO0FBQUEsTUFDRjtBQUFBLE1BQ0EsZ0JBQWdCO0FBQUEsUUFDZDtBQUFBLE1BQ0Y7QUFBQSxNQUNBLG1DQUFtQztBQUFBLFFBQ2pDO0FBQUEsTUFDRjtBQUFBLE1BQ0EsNEJBQTRCO0FBQUEsUUFDMUI7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLElBQ0EsT0FBTztBQUFBLE1BQ0wsa0JBQWtCO0FBQUEsUUFDaEI7QUFBQSxRQUNBLENBQUM7QUFBQSxRQUNELEVBQUUsU0FBUyxDQUFDLFNBQVMsc0NBQXNDLEVBQUU7QUFBQSxNQUMvRDtBQUFBLE1BQ0Esc0NBQXNDO0FBQUEsUUFDcEM7QUFBQSxNQUNGO0FBQUEsTUFDQSwwQkFBMEI7QUFBQSxRQUN4QjtBQUFBLFFBQ0EsQ0FBQztBQUFBLFFBQ0QsRUFBRSxXQUFXLE9BQU87QUFBQSxNQUN0QjtBQUFBLE1BQ0EsaUJBQWlCLENBQUMsb0RBQW9EO0FBQUEsTUFDdEUsd0JBQXdCO0FBQUEsUUFDdEI7QUFBQSxRQUNBLENBQUM7QUFBQSxRQUNELEVBQUUsV0FBVyxXQUFXO0FBQUEsTUFDMUI7QUFBQSxNQUNBLDJCQUEyQjtBQUFBLFFBQ3pCO0FBQUEsUUFDQSxDQUFDO0FBQUEsUUFDRCxFQUFFLFdBQVcsUUFBUTtBQUFBLE1BQ3ZCO0FBQUEsTUFDQSwyQkFBMkI7QUFBQSxRQUN6QjtBQUFBLFFBQ0EsQ0FBQztBQUFBLFFBQ0QsRUFBRSxXQUFXLFFBQVE7QUFBQSxNQUN2QjtBQUFBLE1BQ0EsdUJBQXVCO0FBQUEsUUFDckI7QUFBQSxNQUNGO0FBQUEsTUFDQSw2QkFBNkI7QUFBQSxRQUMzQjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLG1CQUFtQixDQUFDLG9EQUFvRDtBQUFBLE1BQ3hFLDBCQUEwQjtBQUFBLFFBQ3hCO0FBQUEsTUFDRjtBQUFBLE1BQ0Esa0JBQWtCLENBQUMsNkNBQTZDO0FBQUEsTUFDaEUsZ0JBQWdCLENBQUMsbURBQW1EO0FBQUEsTUFDcEUsNEJBQTRCO0FBQUEsUUFDMUI7QUFBQSxNQUNGO0FBQUEsTUFDQSxnQkFBZ0IsQ0FBQyxzQ0FBc0M7QUFBQSxNQUN2RCxxQkFBcUI7QUFBQSxRQUNuQjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLGlDQUFpQztBQUFBLFFBQy9CO0FBQUEsTUFDRjtBQUFBLE1BQ0Esb0JBQW9CLENBQUMsMkNBQTJDO0FBQUEsTUFDaEUsaUJBQWlCLENBQUMsaUNBQWlDO0FBQUEsTUFDbkQsa0JBQWtCLENBQUMsd0NBQXdDO0FBQUEsTUFDM0QsOEJBQThCO0FBQUEsUUFDNUI7QUFBQSxNQUNGO0FBQUEsTUFDQSxnQ0FBZ0M7QUFBQSxRQUM5QjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLHdCQUF3QjtBQUFBLFFBQ3RCO0FBQUEsTUFDRjtBQUFBLE1BQ0EscUJBQXFCLENBQUMsdUNBQXVDO0FBQUEsTUFDN0QsNEJBQTRCLENBQUMsa0JBQWtCO0FBQUEsTUFDL0MsWUFBWSxDQUFDLGtDQUFrQztBQUFBLE1BQy9DLGFBQWEsQ0FBQyx3QkFBd0I7QUFBQSxNQUN0QyxzQ0FBc0M7QUFBQSxRQUNwQztBQUFBLE1BQ0Y7QUFBQSxNQUNBLDJCQUEyQjtBQUFBLFFBQ3pCO0FBQUEsTUFDRjtBQUFBLE1BQ0EsNEJBQTRCLENBQUMsMkNBQTJDO0FBQUEsTUFDeEUsa0JBQWtCLENBQUMsMkJBQTJCO0FBQUEsTUFDOUMsdUJBQXVCLENBQUMsOENBQThDO0FBQUEsTUFDdEUsaUJBQWlCLENBQUMsa0NBQWtDO0FBQUEsTUFDcEQsZUFBZSxDQUFDLHFDQUFxQztBQUFBLE1BQ3JELG1CQUFtQixDQUFDLHFDQUFxQztBQUFBLE1BQ3pELHFCQUFxQixDQUFDLDRDQUE0QztBQUFBLE1BQ2xFLHFCQUFxQjtBQUFBLFFBQ25CO0FBQUEsTUFDRjtBQUFBLE1BQ0EsZUFBZSxDQUFDLGtDQUFrQztBQUFBLE1BQ2xELG1CQUFtQjtBQUFBLFFBQ2pCO0FBQUEsUUFDQSxDQUFDO0FBQUEsUUFDRCxFQUFFLFNBQVMsQ0FBQyxTQUFTLHVDQUF1QyxFQUFFO0FBQUEsTUFDaEU7QUFBQSxNQUNBLHVDQUF1QztBQUFBLFFBQ3JDO0FBQUEsTUFDRjtBQUFBLE1BQ0EsUUFBUSxDQUFDLDhCQUE4QjtBQUFBLE1BQ3ZDLDBCQUEwQjtBQUFBLFFBQ3hCO0FBQUEsTUFDRjtBQUFBLE1BQ0EsNkJBQTZCO0FBQUEsUUFDM0I7QUFBQSxNQUNGO0FBQUEsTUFDQSxxQkFBcUI7QUFBQSxRQUNuQjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLGdCQUFnQixDQUFDLHNEQUFzRDtBQUFBLE1BQ3ZFLHdCQUF3QjtBQUFBLFFBQ3RCO0FBQUEsTUFDRjtBQUFBLE1BQ0EscUJBQXFCLENBQUMsb0RBQW9EO0FBQUEsTUFDMUUsaUNBQWlDO0FBQUEsUUFDL0I7QUFBQSxNQUNGO0FBQUEsTUFDQSxpQkFBaUIsQ0FBQyw0Q0FBNEM7QUFBQSxNQUM5RCxrQkFBa0I7QUFBQSxRQUNoQjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLDhCQUE4QjtBQUFBLFFBQzVCO0FBQUEsTUFDRjtBQUFBLE1BQ0EsWUFBWSxDQUFDLDhDQUE4QztBQUFBLE1BQzNELGtCQUFrQjtBQUFBLFFBQ2hCO0FBQUEsTUFDRjtBQUFBLE1BQ0Esa0JBQWtCLENBQUMsMENBQTBDO0FBQUEsTUFDN0QsaUJBQWlCLENBQUMsb0NBQW9DO0FBQUEsTUFDdEQsbUNBQW1DO0FBQUEsUUFDakM7QUFBQSxNQUNGO0FBQUEsTUFDQSxlQUFlLENBQUMsb0RBQW9EO0FBQUEsTUFDcEUsb0JBQW9CO0FBQUEsUUFDbEI7QUFBQSxNQUNGO0FBQUEsTUFDQSxtQkFBbUIsQ0FBQyxvREFBb0Q7QUFBQSxNQUN4RSxxQkFBcUI7QUFBQSxRQUNuQjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLGVBQWUsQ0FBQyw4Q0FBOEM7QUFBQSxNQUM5RCwrQkFBK0I7QUFBQSxRQUM3QjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLGlDQUFpQztBQUFBLFFBQy9CO0FBQUEsTUFDRjtBQUFBLE1BQ0Esc0NBQXNDO0FBQUEsUUFDcEM7QUFBQSxNQUNGO0FBQUEsTUFDQSw0QkFBNEI7QUFBQSxRQUMxQjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLGlCQUFpQjtBQUFBLFFBQ2Y7QUFBQSxRQUNBLENBQUM7QUFBQSxRQUNELEVBQUUsU0FBUyxDQUFDLFNBQVMsd0JBQXdCLEVBQUU7QUFBQSxNQUNqRDtBQUFBLE1BQ0Esd0JBQXdCLENBQUMseUNBQXlDO0FBQUEsTUFDbEUsd0JBQXdCLENBQUMseUNBQXlDO0FBQUEsTUFDbEUsOEJBQThCO0FBQUEsUUFDNUI7QUFBQSxNQUNGO0FBQUEsTUFDQSxxQ0FBcUM7QUFBQSxRQUNuQztBQUFBLE1BQ0Y7QUFBQSxNQUNBLDJCQUEyQjtBQUFBLFFBQ3pCO0FBQUEsTUFDRjtBQUFBLE1BQ0Esc0JBQXNCO0FBQUEsUUFDcEI7QUFBQSxNQUNGO0FBQUEsTUFDQSxLQUFLLENBQUMsMkJBQTJCO0FBQUEsTUFDakMsdUJBQXVCO0FBQUEsUUFDckI7QUFBQSxNQUNGO0FBQUEsTUFDQSwwQkFBMEI7QUFBQSxRQUN4QjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLGlDQUFpQztBQUFBLFFBQy9CO0FBQUEsTUFDRjtBQUFBLE1BQ0Esb0JBQW9CLENBQUMsd0NBQXdDO0FBQUEsTUFDN0QsMkJBQTJCO0FBQUEsUUFDekI7QUFBQSxNQUNGO0FBQUEsTUFDQSxjQUFjLENBQUMsa0NBQWtDO0FBQUEsTUFDakQsb0NBQW9DO0FBQUEsUUFDbEM7QUFBQSxNQUNGO0FBQUEsTUFDQSxhQUFhLENBQUMsbURBQW1EO0FBQUEsTUFDakUsV0FBVyxDQUFDLDZDQUE2QztBQUFBLE1BQ3pELHFCQUFxQjtBQUFBLFFBQ25CO0FBQUEsTUFDRjtBQUFBLE1BQ0EsZ0JBQWdCLENBQUMsbURBQW1EO0FBQUEsTUFDcEUsV0FBVyxDQUFDLDBDQUEwQztBQUFBLE1BQ3RELHVCQUF1QixDQUFDLGdEQUFnRDtBQUFBLE1BQ3hFLGdDQUFnQztBQUFBLFFBQzlCO0FBQUEsTUFDRjtBQUFBLE1BQ0EseUJBQXlCLENBQUMsZ0RBQWdEO0FBQUEsTUFDMUUsV0FBVyxDQUFDLHlDQUF5QztBQUFBLE1BQ3JELHdCQUF3QixDQUFDLGlEQUFpRDtBQUFBLE1BQzFFLGtCQUFrQixDQUFDLGlEQUFpRDtBQUFBLE1BQ3BFLDhCQUE4QjtBQUFBLFFBQzVCO0FBQUEsTUFDRjtBQUFBLE1BQ0EsNEJBQTRCLENBQUMsNkNBQTZDO0FBQUEsTUFDMUUsWUFBWSxDQUFDLDJDQUEyQztBQUFBLE1BQ3hELHNCQUFzQixDQUFDLDhDQUE4QztBQUFBLE1BQ3JFLG1DQUFtQztBQUFBLFFBQ2pDO0FBQUEsTUFDRjtBQUFBLE1BQ0EsMkJBQTJCLENBQUMsNkNBQTZDO0FBQUEsTUFDekUsY0FBYyxDQUFDLHlDQUF5QztBQUFBLE1BQ3hELGVBQWUsQ0FBQyx1REFBdUQ7QUFBQSxNQUN2RSwyQkFBMkI7QUFBQSxRQUN6QjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLHFCQUFxQjtBQUFBLFFBQ25CO0FBQUEsTUFDRjtBQUFBLE1BQ0EsZ0JBQWdCO0FBQUEsUUFDZDtBQUFBLE1BQ0Y7QUFBQSxNQUNBLHFCQUFxQixDQUFDLCtDQUErQztBQUFBLE1BQ3JFLGtCQUFrQixDQUFDLDJDQUEyQztBQUFBLE1BQzlELGlCQUFpQixDQUFDLHNEQUFzRDtBQUFBLE1BQ3hFLGtCQUFrQixDQUFDLHNDQUFzQztBQUFBLE1BQ3pELGVBQWUsQ0FBQyx1Q0FBdUM7QUFBQSxNQUN2RCxnQkFBZ0IsQ0FBQywwQkFBMEI7QUFBQSxNQUMzQyxVQUFVLENBQUMsaUNBQWlDO0FBQUEsTUFDNUMsZUFBZSxDQUFDLG1EQUFtRDtBQUFBLE1BQ25FLG9CQUFvQjtBQUFBLFFBQ2xCO0FBQUEsTUFDRjtBQUFBLE1BQ0EscUJBQXFCLENBQUMsd0NBQXdDO0FBQUEsTUFDOUQsdUJBQXVCLENBQUMsK0NBQStDO0FBQUEsTUFDdkUsZ0NBQWdDO0FBQUEsUUFDOUI7QUFBQSxNQUNGO0FBQUEsTUFDQSxtQkFBbUIsQ0FBQyw0Q0FBNEM7QUFBQSxNQUNoRSxXQUFXLENBQUMsa0NBQWtDO0FBQUEsTUFDOUMsc0JBQXNCLENBQUMsd0NBQXdDO0FBQUEsTUFDL0QsWUFBWSxDQUFDLGlEQUFpRDtBQUFBLE1BQzlELGlCQUFpQixDQUFDLHNEQUFzRDtBQUFBLE1BQ3hFLGlCQUFpQixDQUFDLCtDQUErQztBQUFBLE1BQ2pFLGtCQUFrQjtBQUFBLFFBQ2hCO0FBQUEsTUFDRjtBQUFBLE1BQ0EsbUJBQW1CLENBQUMsZ0RBQWdEO0FBQUEsTUFDcEUsZ0JBQWdCLENBQUMsaURBQWlEO0FBQUEsTUFDbEUsaUJBQWlCLENBQUMsb0NBQW9DO0FBQUEsTUFDdEQsMkJBQTJCO0FBQUEsUUFDekI7QUFBQSxNQUNGO0FBQUEsTUFDQSxxQ0FBcUM7QUFBQSxRQUNuQztBQUFBLE1BQ0Y7QUFBQSxNQUNBLGFBQWEsQ0FBQyxpREFBaUQ7QUFBQSxNQUMvRCxpQkFBaUIsQ0FBQyxxREFBcUQ7QUFBQSxNQUN2RSxxQ0FBcUM7QUFBQSxRQUNuQztBQUFBLE1BQ0Y7QUFBQSxNQUNBLFVBQVUsQ0FBQyx5Q0FBeUM7QUFBQSxNQUNwRCxZQUFZLENBQUMsMkNBQTJDO0FBQUEsTUFDeEQseUJBQXlCO0FBQUEsUUFDdkI7QUFBQSxNQUNGO0FBQUEsTUFDQSxvQkFBb0I7QUFBQSxRQUNsQjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLGdCQUFnQixDQUFDLG9DQUFvQztBQUFBLE1BQ3JELGVBQWUsQ0FBQyxxQ0FBcUM7QUFBQSxNQUNyRCxjQUFjLENBQUMsb0NBQW9DO0FBQUEsTUFDbkQsMkJBQTJCO0FBQUEsUUFDekI7QUFBQSxNQUNGO0FBQUEsTUFDQSxtQkFBbUIsQ0FBQyx5Q0FBeUM7QUFBQSxNQUM3RCx1QkFBdUI7QUFBQSxRQUNyQjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLDJCQUEyQixDQUFDLG9DQUFvQztBQUFBLE1BQ2hFLDBCQUEwQjtBQUFBLFFBQ3hCO0FBQUEsTUFDRjtBQUFBLE1BQ0EsYUFBYSxDQUFDLG1DQUFtQztBQUFBLE1BQ2pELGtCQUFrQixDQUFDLHdDQUF3QztBQUFBLE1BQzNELHNDQUFzQztBQUFBLFFBQ3BDO0FBQUEsTUFDRjtBQUFBLE1BQ0EsZ0JBQWdCLENBQUMsZ0NBQWdDO0FBQUEsTUFDakQsOEJBQThCO0FBQUEsUUFDNUI7QUFBQSxNQUNGO0FBQUEsTUFDQSx3QkFBd0I7QUFBQSxRQUN0QjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLGlCQUFpQixDQUFDLHVDQUF1QztBQUFBLE1BQ3pELDBCQUEwQixDQUFDLGlCQUFpQjtBQUFBLE1BQzVDLFlBQVksQ0FBQyx1QkFBdUI7QUFBQSxNQUNwQyxhQUFhLENBQUMsNkJBQTZCO0FBQUEsTUFDM0MsV0FBVyxDQUFDLGlDQUFpQztBQUFBLE1BQzdDLGlCQUFpQixDQUFDLHVDQUF1QztBQUFBLE1BQ3pELHFDQUFxQyxDQUFDLGtDQUFrQztBQUFBLE1BQ3hFLGVBQWUsQ0FBQyxxQ0FBcUM7QUFBQSxNQUNyRCxpQkFBaUIsQ0FBQyx3Q0FBd0M7QUFBQSxNQUMxRCxZQUFZLENBQUMsbUJBQW1CO0FBQUEsTUFDaEMsc0NBQXNDO0FBQUEsUUFDcEM7QUFBQSxNQUNGO0FBQUEsTUFDQSxtQkFBbUI7QUFBQSxRQUNqQjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLGNBQWMsQ0FBQyxvQ0FBb0M7QUFBQSxNQUNuRCxtQkFBbUIsQ0FBQywyQ0FBMkM7QUFBQSxNQUMvRCxVQUFVLENBQUMsZ0NBQWdDO0FBQUEsTUFDM0MsV0FBVyxDQUFDLGlDQUFpQztBQUFBLE1BQzdDLHVCQUF1QjtBQUFBLFFBQ3JCO0FBQUEsTUFDRjtBQUFBLE1BQ0EsY0FBYyxDQUFDLGlDQUFpQztBQUFBLE1BQ2hELE9BQU8sQ0FBQyxtQ0FBbUM7QUFBQSxNQUMzQyxlQUFlLENBQUMsMkNBQTJDO0FBQUEsTUFDM0QsYUFBYSxDQUFDLGtEQUFrRDtBQUFBLE1BQ2hFLDBCQUEwQjtBQUFBLFFBQ3hCO0FBQUEsTUFDRjtBQUFBLE1BQ0EsNkJBQTZCO0FBQUEsUUFDM0I7QUFBQSxRQUNBLENBQUM7QUFBQSxRQUNELEVBQUUsV0FBVyxPQUFPO0FBQUEsTUFDdEI7QUFBQSxNQUNBLG9CQUFvQjtBQUFBLFFBQ2xCO0FBQUEsTUFDRjtBQUFBLE1BQ0EsMkJBQTJCO0FBQUEsUUFDekI7QUFBQSxRQUNBLENBQUM7QUFBQSxRQUNELEVBQUUsV0FBVyxXQUFXO0FBQUEsTUFDMUI7QUFBQSxNQUNBLDZCQUE2QjtBQUFBLFFBQzNCO0FBQUEsTUFDRjtBQUFBLE1BQ0EsOEJBQThCO0FBQUEsUUFDNUI7QUFBQSxRQUNBLENBQUM7QUFBQSxRQUNELEVBQUUsV0FBVyxRQUFRO0FBQUEsTUFDdkI7QUFBQSxNQUNBLDhCQUE4QjtBQUFBLFFBQzVCO0FBQUEsUUFDQSxDQUFDO0FBQUEsUUFDRCxFQUFFLFdBQVcsUUFBUTtBQUFBLE1BQ3ZCO0FBQUEsTUFDQSxjQUFjLENBQUMscURBQXFEO0FBQUEsTUFDcEUsa0JBQWtCLENBQUMsa0NBQWtDO0FBQUEsTUFDckQsbUJBQW1CLENBQUMseUNBQXlDO0FBQUEsTUFDN0QsMEJBQTBCO0FBQUEsUUFDeEI7QUFBQSxNQUNGO0FBQUEsTUFDQSwwQkFBMEI7QUFBQSxRQUN4QjtBQUFBLFFBQ0EsQ0FBQztBQUFBLFFBQ0QsRUFBRSxXQUFXLE9BQU87QUFBQSxNQUN0QjtBQUFBLE1BQ0Esd0JBQXdCO0FBQUEsUUFDdEI7QUFBQSxRQUNBLENBQUM7QUFBQSxRQUNELEVBQUUsV0FBVyxXQUFXO0FBQUEsTUFDMUI7QUFBQSxNQUNBLDJCQUEyQjtBQUFBLFFBQ3pCO0FBQUEsUUFDQSxDQUFDO0FBQUEsUUFDRCxFQUFFLFdBQVcsUUFBUTtBQUFBLE1BQ3ZCO0FBQUEsTUFDQSwyQkFBMkI7QUFBQSxRQUN6QjtBQUFBLFFBQ0EsQ0FBQztBQUFBLFFBQ0QsRUFBRSxXQUFXLFFBQVE7QUFBQSxNQUN2QjtBQUFBLE1BQ0EsaUJBQWlCLENBQUMsa0RBQWtEO0FBQUEsTUFDcEUsVUFBVSxDQUFDLHFDQUFxQztBQUFBLE1BQ2hELFFBQVEsQ0FBQyw2QkFBNkI7QUFBQSxNQUN0Qyx3QkFBd0I7QUFBQSxRQUN0QjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLHFCQUFxQixDQUFDLG1EQUFtRDtBQUFBLE1BQ3pFLDhCQUE4QjtBQUFBLFFBQzVCO0FBQUEsTUFDRjtBQUFBLE1BQ0EsaUNBQWlDLENBQUMsaUNBQWlDO0FBQUEsTUFDbkUsa0JBQWtCO0FBQUEsUUFDaEI7QUFBQSxNQUNGO0FBQUEsTUFDQSxrQkFBa0IsQ0FBQyx1Q0FBdUM7QUFBQSxNQUMxRCxtQ0FBbUM7QUFBQSxRQUNqQztBQUFBLE1BQ0Y7QUFBQSxNQUNBLGVBQWUsQ0FBQyxtREFBbUQ7QUFBQSxNQUNuRSxvQkFBb0I7QUFBQSxRQUNsQjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLG1CQUFtQixDQUFDLGlEQUFpRDtBQUFBLE1BQ3JFLDRCQUE0QjtBQUFBLFFBQzFCO0FBQUEsUUFDQSxDQUFDO0FBQUEsUUFDRCxFQUFFLFNBQVMsQ0FBQyxTQUFTLDZCQUE2QixFQUFFO0FBQUEsTUFDdEQ7QUFBQSxNQUNBLDZCQUE2QjtBQUFBLFFBQzNCO0FBQUEsTUFDRjtBQUFBLE1BQ0EsZUFBZSxDQUFDLDZDQUE2QztBQUFBLE1BQzdELDRCQUE0QjtBQUFBLFFBQzFCO0FBQUEsTUFDRjtBQUFBLE1BQ0Esb0JBQW9CO0FBQUEsUUFDbEI7QUFBQSxRQUNBLEVBQUUsU0FBUyw2QkFBNkI7QUFBQSxNQUMxQztBQUFBLElBQ0Y7QUFBQSxJQUNBLFFBQVE7QUFBQSxNQUNOLE1BQU0sQ0FBQyxrQkFBa0I7QUFBQSxNQUN6QixTQUFTLENBQUMscUJBQXFCO0FBQUEsTUFDL0IsdUJBQXVCLENBQUMsb0JBQW9CO0FBQUEsTUFDNUMsUUFBUSxDQUFDLG9CQUFvQjtBQUFBLE1BQzdCLE9BQU8sQ0FBQywwQkFBMEI7QUFBQSxNQUNsQyxRQUFRLENBQUMsb0JBQW9CO0FBQUEsTUFDN0IsT0FBTyxDQUFDLG1CQUFtQjtBQUFBLElBQzdCO0FBQUEsSUFDQSxnQkFBZ0I7QUFBQSxNQUNkLFVBQVU7QUFBQSxRQUNSO0FBQUEsTUFDRjtBQUFBLE1BQ0EseUJBQXlCO0FBQUEsUUFDdkI7QUFBQSxNQUNGO0FBQUEsTUFDQSxrQkFBa0IsQ0FBQyx3Q0FBd0M7QUFBQSxNQUMzRCxtQkFBbUIsQ0FBQyxrREFBa0Q7QUFBQSxNQUN0RSx1QkFBdUI7QUFBQSxRQUNyQjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLGFBQWE7QUFBQSxRQUNYO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxJQUNBLG9CQUFvQjtBQUFBLE1BQ2xCLFlBQVk7QUFBQSxRQUNWO0FBQUEsTUFDRjtBQUFBLE1BQ0Esa0NBQWtDO0FBQUEsUUFDaEM7QUFBQSxNQUNGO0FBQUEsTUFDQSwwQkFBMEI7QUFBQSxRQUN4QjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLG9DQUFvQztBQUFBLFFBQ2xDO0FBQUEsTUFDRjtBQUFBLE1BQ0EsbUJBQW1CLENBQUMsMkJBQTJCO0FBQUEsTUFDL0MsdUJBQXVCO0FBQUEsUUFDckI7QUFBQSxNQUNGO0FBQUEsTUFDQSxzQkFBc0IsQ0FBQyxpQkFBaUI7QUFBQSxNQUN4Qyw2QkFBNkIsQ0FBQyxxQ0FBcUM7QUFBQSxNQUNuRSwwQkFBMEIsQ0FBQywrQ0FBK0M7QUFBQSxNQUMxRSwwQkFBMEI7QUFBQSxRQUN4QjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsSUFDQSxPQUFPO0FBQUEsTUFDTCxtQ0FBbUM7QUFBQSxRQUNqQztBQUFBLE1BQ0Y7QUFBQSxNQUNBLG9DQUFvQztBQUFBLFFBQ2xDO0FBQUEsTUFDRjtBQUFBLE1BQ0EsaUNBQWlDO0FBQUEsUUFDL0I7QUFBQSxNQUNGO0FBQUEsTUFDQSxpQ0FBaUM7QUFBQSxRQUMvQjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLDhCQUE4QjtBQUFBLFFBQzVCO0FBQUEsTUFDRjtBQUFBLE1BQ0EsUUFBUSxDQUFDLHdCQUF3QjtBQUFBLE1BQ2pDLDhCQUE4QjtBQUFBLFFBQzVCO0FBQUEsTUFDRjtBQUFBLE1BQ0EsdUJBQXVCLENBQUMsZ0RBQWdEO0FBQUEsTUFDeEUsOEJBQThCO0FBQUEsUUFDNUI7QUFBQSxNQUNGO0FBQUEsTUFDQSx1QkFBdUI7QUFBQSxRQUNyQjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLGFBQWEsQ0FBQyxzQ0FBc0M7QUFBQSxNQUNwRCxXQUFXLENBQUMsbUNBQW1DO0FBQUEsTUFDL0MsMkJBQTJCO0FBQUEsUUFDekI7QUFBQSxNQUNGO0FBQUEsTUFDQSxvQkFBb0I7QUFBQSxRQUNsQjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLDJCQUEyQjtBQUFBLFFBQ3pCO0FBQUEsTUFDRjtBQUFBLE1BQ0EsTUFBTSxDQUFDLHVCQUF1QjtBQUFBLE1BQzlCLGdCQUFnQixDQUFDLHlDQUF5QztBQUFBLE1BQzFELDZCQUE2QjtBQUFBLFFBQzNCO0FBQUEsTUFDRjtBQUFBLE1BQ0Esc0JBQXNCLENBQUMsK0NBQStDO0FBQUEsTUFDdEUsMEJBQTBCLENBQUMsaUJBQWlCO0FBQUEsTUFDNUMsa0JBQWtCLENBQUMsMkNBQTJDO0FBQUEsTUFDOUQsNkJBQTZCO0FBQUEsUUFDM0I7QUFBQSxNQUNGO0FBQUEsTUFDQSxtQkFBbUIsQ0FBQyw0Q0FBNEM7QUFBQSxNQUNoRSxnQkFBZ0IsQ0FBQyx5Q0FBeUM7QUFBQSxNQUMxRCw4QkFBOEI7QUFBQSxRQUM1QjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLG9CQUFvQjtBQUFBLFFBQ2xCO0FBQUEsTUFDRjtBQUFBLE1BQ0EsaUJBQWlCO0FBQUEsUUFDZjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLDhCQUE4QjtBQUFBLFFBQzVCO0FBQUEsTUFDRjtBQUFBLE1BQ0EsdUJBQXVCO0FBQUEsUUFDckI7QUFBQSxNQUNGO0FBQUEsTUFDQSxhQUFhLENBQUMscUNBQXFDO0FBQUEsSUFDckQ7QUFBQSxJQUNBLE9BQU87QUFBQSxNQUNMLDBCQUEwQjtBQUFBLFFBQ3hCO0FBQUEsUUFDQSxDQUFDO0FBQUEsUUFDRCxFQUFFLFNBQVMsQ0FBQyxTQUFTLDhCQUE4QixFQUFFO0FBQUEsTUFDdkQ7QUFBQSxNQUNBLDhCQUE4QixDQUFDLG1CQUFtQjtBQUFBLE1BQ2xELHNDQUFzQyxDQUFDLDRCQUE0QjtBQUFBLE1BQ25FLE9BQU8sQ0FBQyw2QkFBNkI7QUFBQSxNQUNyQyxjQUFjLENBQUMsNkJBQTZCO0FBQUEsTUFDNUMsdUJBQXVCLENBQUMsK0NBQStDO0FBQUEsTUFDdkUsc0NBQXNDLENBQUMsZ0NBQWdDO0FBQUEsTUFDdkUsOEJBQThCO0FBQUEsUUFDNUI7QUFBQSxRQUNBLENBQUM7QUFBQSxRQUNELEVBQUUsU0FBUyxDQUFDLFNBQVMsa0NBQWtDLEVBQUU7QUFBQSxNQUMzRDtBQUFBLE1BQ0Esa0NBQWtDLENBQUMscUJBQXFCO0FBQUEsTUFDeEQsb0NBQW9DO0FBQUEsUUFDbEM7QUFBQSxRQUNBLENBQUM7QUFBQSxRQUNELEVBQUUsU0FBUyxDQUFDLFNBQVMsd0NBQXdDLEVBQUU7QUFBQSxNQUNqRTtBQUFBLE1BQ0Esd0NBQXdDLENBQUMsaUJBQWlCO0FBQUEsTUFDMUQseUNBQXlDLENBQUMsNkJBQTZCO0FBQUEsTUFDdkUsNkJBQTZCO0FBQUEsUUFDM0I7QUFBQSxRQUNBLENBQUM7QUFBQSxRQUNELEVBQUUsU0FBUyxDQUFDLFNBQVMsaUNBQWlDLEVBQUU7QUFBQSxNQUMxRDtBQUFBLE1BQ0EsaUNBQWlDLENBQUMscUJBQXFCO0FBQUEsTUFDdkQsOEJBQThCO0FBQUEsUUFDNUI7QUFBQSxRQUNBLENBQUM7QUFBQSxRQUNELEVBQUUsU0FBUyxDQUFDLFNBQVMsa0NBQWtDLEVBQUU7QUFBQSxNQUMzRDtBQUFBLE1BQ0Esa0NBQWtDLENBQUMsb0NBQW9DO0FBQUEsTUFDdkUsb0NBQW9DO0FBQUEsUUFDbEM7QUFBQSxRQUNBLENBQUM7QUFBQSxRQUNELEVBQUUsU0FBUyxDQUFDLFNBQVMsd0NBQXdDLEVBQUU7QUFBQSxNQUNqRTtBQUFBLE1BQ0Esd0NBQXdDLENBQUMsNEJBQTRCO0FBQUEsTUFDckUseUNBQXlDLENBQUMsOEJBQThCO0FBQUEsTUFDeEUseUNBQXlDO0FBQUEsUUFDdkM7QUFBQSxNQUNGO0FBQUEsTUFDQSxRQUFRLENBQUMsZ0NBQWdDO0FBQUEsTUFDekMsa0JBQWtCLENBQUMsV0FBVztBQUFBLE1BQzlCLGVBQWUsQ0FBQyx1QkFBdUI7QUFBQSxNQUN2QyxtQkFBbUIsQ0FBQyxpQ0FBaUM7QUFBQSxNQUNyRCwyQkFBMkI7QUFBQSxRQUN6QjtBQUFBLFFBQ0EsQ0FBQztBQUFBLFFBQ0QsRUFBRSxTQUFTLENBQUMsU0FBUywrQkFBK0IsRUFBRTtBQUFBLE1BQ3hEO0FBQUEsTUFDQSwrQkFBK0IsQ0FBQyxpQ0FBaUM7QUFBQSxNQUNqRSxpQ0FBaUM7QUFBQSxRQUMvQjtBQUFBLFFBQ0EsQ0FBQztBQUFBLFFBQ0QsRUFBRSxTQUFTLENBQUMsU0FBUyxxQ0FBcUMsRUFBRTtBQUFBLE1BQzlEO0FBQUEsTUFDQSxxQ0FBcUMsQ0FBQyx5QkFBeUI7QUFBQSxNQUMvRCxzQ0FBc0M7QUFBQSxRQUNwQztBQUFBLE1BQ0Y7QUFBQSxNQUNBLE1BQU0sQ0FBQyxZQUFZO0FBQUEsTUFDbkIsNEJBQTRCO0FBQUEsUUFDMUI7QUFBQSxRQUNBLENBQUM7QUFBQSxRQUNELEVBQUUsU0FBUyxDQUFDLFNBQVMsZ0NBQWdDLEVBQUU7QUFBQSxNQUN6RDtBQUFBLE1BQ0EsZ0NBQWdDLENBQUMsa0JBQWtCO0FBQUEsTUFDbkQsNEJBQTRCO0FBQUEsUUFDMUI7QUFBQSxRQUNBLENBQUM7QUFBQSxRQUNELEVBQUUsU0FBUyxDQUFDLFNBQVMsZ0NBQWdDLEVBQUU7QUFBQSxNQUN6RDtBQUFBLE1BQ0EsZ0NBQWdDLENBQUMsa0JBQWtCO0FBQUEsTUFDbkQsNkJBQTZCO0FBQUEsUUFDM0I7QUFBQSxRQUNBLENBQUM7QUFBQSxRQUNELEVBQUUsU0FBUyxDQUFDLFNBQVMsaUNBQWlDLEVBQUU7QUFBQSxNQUMxRDtBQUFBLE1BQ0EsaUNBQWlDLENBQUMscUJBQXFCO0FBQUEsTUFDdkQsbUNBQW1DLENBQUMscUJBQXFCO0FBQUEsTUFDekQsc0JBQXNCLENBQUMsaUNBQWlDO0FBQUEsTUFDeEQsc0JBQXNCLENBQUMsaUNBQWlDO0FBQUEsTUFDeEQsNkJBQTZCO0FBQUEsUUFDM0I7QUFBQSxRQUNBLENBQUM7QUFBQSxRQUNELEVBQUUsU0FBUyxDQUFDLFNBQVMsaUNBQWlDLEVBQUU7QUFBQSxNQUMxRDtBQUFBLE1BQ0EsaUNBQWlDLENBQUMsb0JBQW9CO0FBQUEsTUFDdEQsb0JBQW9CLENBQUMsZ0NBQWdDO0FBQUEsTUFDckQsa0NBQWtDO0FBQUEsUUFDaEM7QUFBQSxRQUNBLENBQUM7QUFBQSxRQUNELEVBQUUsU0FBUyxDQUFDLFNBQVMsc0NBQXNDLEVBQUU7QUFBQSxNQUMvRDtBQUFBLE1BQ0Esc0NBQXNDLENBQUMseUJBQXlCO0FBQUEsTUFDaEUsdUJBQXVCLENBQUMsNEJBQTRCO0FBQUEsTUFDcEQsbUNBQW1DO0FBQUEsUUFDakM7QUFBQSxRQUNBLENBQUM7QUFBQSxRQUNELEVBQUUsU0FBUyxDQUFDLFNBQVMsdUNBQXVDLEVBQUU7QUFBQSxNQUNoRTtBQUFBLE1BQ0EsdUNBQXVDLENBQUMsZ0JBQWdCO0FBQUEsTUFDeEQsd0NBQXdDLENBQUMsMkJBQTJCO0FBQUEsTUFDcEUsMkJBQTJCLENBQUMsdUNBQXVDO0FBQUEsTUFDbkUsd0NBQXdDLENBQUMsNEJBQTRCO0FBQUEsTUFDckUsMkJBQTJCLENBQUMsd0NBQXdDO0FBQUEsTUFDcEUsMkNBQTJDO0FBQUEsUUFDekM7QUFBQSxRQUNBLENBQUM7QUFBQSxRQUNELEVBQUUsU0FBUyxDQUFDLFNBQVMsK0NBQStDLEVBQUU7QUFBQSxNQUN4RTtBQUFBLE1BQ0EsK0NBQStDO0FBQUEsUUFDN0M7QUFBQSxNQUNGO0FBQUEsTUFDQSxTQUFTLENBQUMsZ0NBQWdDO0FBQUEsTUFDMUMsVUFBVSxDQUFDLG1DQUFtQztBQUFBLE1BQzlDLHFCQUFxQixDQUFDLGFBQWE7QUFBQSxJQUNyQztBQUFBLEVBQ0Y7QUFDQSxNQUFJLG9CQUFvQjtBQUd4QixNQUFJLHFDQUFxQyxJQUFJO0FBQzdDLGNBQVksT0FBTyxjQUFjLE9BQU8sUUFBUSxpQkFBaUIsR0FBRztBQUNsRSxnQkFBWSxZQUFZLGFBQWEsT0FBTyxRQUFRLFNBQVMsR0FBRztBQUM5RCxhQUFPLE9BQU8sVUFBVSxlQUFlO0FBQ3ZDLGFBQU8sUUFBUSxPQUFPLE1BQU0sTUFBTSxHQUFHO0FBQ3JDLFlBQU0sbUJBQW1CLE9BQU8sT0FDOUI7QUFBQSxRQUNFO0FBQUEsUUFDQTtBQUFBLE1BQ0YsR0FDQSxRQUNGO0FBQ0EsV0FBSyxtQkFBbUIsSUFBSSxLQUFLLEdBQUc7QUFDbEMsMkJBQW1CLElBQUksdUJBQXVCLElBQUksR0FBSztBQUFBLE1BQ3pEO0FBQ0EseUJBQW1CLElBQUksS0FBSyxFQUFFLElBQUksWUFBWTtBQUFBLFFBQzVDO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsTUFDRixDQUFDO0FBQUEsSUFDSDtBQUFBLEVBQ0Y7QUFDQSxNQUFJLFVBQVU7QUFBQSxJQUNaLEdBQUcsR0FBRyxTQUFTLFlBQVk7QUFDekIsYUFBTyxtQkFBbUIsSUFBSSxLQUFLLEVBQUUsSUFBSSxVQUFVO0FBQUE7QUFBQSxJQUVyRCx3QkFBd0IsQ0FBQyxRQUFRLFlBQVk7QUFDM0MsYUFBTztBQUFBLFFBQ0wsT0FBTyxLQUFLLElBQUksUUFBUSxVQUFVO0FBQUEsUUFFbEMsY0FBYztBQUFBLFFBQ2QsVUFBVTtBQUFBLFFBQ1YsWUFBWTtBQUFBLE1BQ2Q7QUFBQTtBQUFBLElBRUYsY0FBYyxDQUFDLFFBQVEsWUFBWSxZQUFZO0FBQzdDLGFBQU8sZUFBZSxPQUFPLE9BQU8sWUFBWSxVQUFVO0FBQzFELGFBQU87QUFBQTtBQUFBLElBRVQsY0FBYyxDQUFDLFFBQVEsWUFBWTtBQUNqQyxhQUFPLE9BQU8sTUFBTTtBQUNwQixhQUFPO0FBQUE7QUFBQSxJQUVULE9BQU8sR0FBRyxTQUFTO0FBQ2pCLGFBQU8sQ0FBQyxHQUFHLG1CQUFtQixJQUFJLEtBQUssRUFBRSxLQUFLLENBQUM7QUFBQTtBQUFBLElBRWpELEdBQUcsQ0FBQyxRQUFRLFlBQVksT0FBTztBQUM3QixhQUFPLE9BQU8sTUFBTSxjQUFjO0FBQUE7QUFBQSxJQUVwQyxHQUFHLEdBQUcsU0FBUyxPQUFPLFNBQVMsWUFBWTtBQUN6QyxVQUFJLE1BQU0sYUFBYTtBQUNyQixlQUFPLE1BQU07QUFBQSxNQUNmO0FBQ0EsWUFBTSxTQUFTLG1CQUFtQixJQUFJLEtBQUssRUFBRSxJQUFJLFVBQVU7QUFDM0QsV0FBSyxRQUFRO0FBQ1g7QUFBQSxNQUNGO0FBQ0EsY0FBUSxrQkFBa0IsZ0JBQWdCO0FBQzFDLFVBQUksYUFBYTtBQUNmLGNBQU0sY0FBYyxTQUNsQixTQUNBLE9BQ0EsWUFDQSxrQkFDQSxXQUNGO0FBQUEsTUFDRixPQUFPO0FBQ0wsY0FBTSxjQUFjLFFBQVEsUUFBUSxTQUFTLGdCQUFnQjtBQUFBO0FBRS9ELGFBQU8sTUFBTTtBQUFBO0FBQUEsRUFFakI7QUFDQSxXQUFTLGtCQUFrQixDQUFDLFNBQVM7QUFDbkMsVUFBTSxhQUFhLENBQUM7QUFDcEIsZUFBVyxTQUFTLG1CQUFtQixLQUFLLEdBQUc7QUFDN0MsaUJBQVcsU0FBUyxJQUFJLE1BQU0sRUFBRSxTQUFTLE9BQU8sT0FBTyxDQUFDLEVBQUUsR0FBRyxPQUFPO0FBQUEsSUFDdEU7QUFDQSxXQUFPO0FBQUE7QUFFVCxXQUFTLFFBQVEsQ0FBQyxTQUFTLE9BQU8sWUFBWSxVQUFVLGFBQWE7QUFDbkUsVUFBTSxzQkFBc0IsUUFBUSxRQUFRLFNBQVMsUUFBUTtBQUM3RCxhQUFTLGVBQWUsSUFBSSxNQUFNO0FBQ2hDLFVBQUksVUFBVSxvQkFBb0IsU0FBUyxNQUFNLEdBQUcsSUFBSTtBQUN4RCxVQUFJLFlBQVksV0FBVztBQUN6QixrQkFBVSxPQUFPLE9BQU8sQ0FBQyxHQUFHLFNBQVM7QUFBQSxVQUNuQyxNQUFNLFFBQVEsWUFBWTtBQUFBLFdBQ3pCLFlBQVksWUFBaUI7QUFBQSxRQUNoQyxDQUFDO0FBQ0QsZUFBTyxvQkFBb0IsT0FBTztBQUFBLE1BQ3BDO0FBQ0EsVUFBSSxZQUFZLFNBQVM7QUFDdkIsZUFBTyxVQUFVLGlCQUFpQixZQUFZO0FBQzlDLGdCQUFRLElBQUksS0FDVixXQUFXLFNBQVMsNENBQTRDLFlBQVksaUJBQzlFO0FBQUEsTUFDRjtBQUNBLFVBQUksWUFBWSxZQUFZO0FBQzFCLGdCQUFRLElBQUksS0FBSyxZQUFZLFVBQVU7QUFBQSxNQUN6QztBQUNBLFVBQUksWUFBWSxtQkFBbUI7QUFDakMsY0FBTSxXQUFXLG9CQUFvQixTQUFTLE1BQU0sR0FBRyxJQUFJO0FBQzNELG9CQUFZLE1BQU0sVUFBVSxPQUFPLFFBQ2pDLFlBQVksaUJBQ2QsR0FBRztBQUNELGNBQUksUUFBUSxVQUFVO0FBQ3BCLG9CQUFRLElBQUksS0FDVixJQUFJLDhDQUE4QyxTQUFTLHVCQUF1QixnQkFDcEY7QUFDQSxrQkFBTSxTQUFTLFdBQVc7QUFDeEIsdUJBQVMsU0FBUyxTQUFTO0FBQUEsWUFDN0I7QUFDQSxtQkFBTyxTQUFTO0FBQUEsVUFDbEI7QUFBQSxRQUNGO0FBQ0EsZUFBTyxvQkFBb0IsUUFBUTtBQUFBLE1BQ3JDO0FBQ0EsYUFBTyxvQkFBb0IsR0FBRyxJQUFJO0FBQUE7QUFFcEMsV0FBTyxPQUFPLE9BQU8saUJBQWlCLG1CQUFtQjtBQUFBO0FBSTNELFdBQVMsbUJBQW1CLENBQUMsU0FBUztBQUNwQyxVQUFNLE1BQU0sbUJBQW1CLE9BQU87QUFDdEMsV0FBTztBQUFBLE1BQ0wsTUFBTTtBQUFBLElBQ1I7QUFBQTtBQUVGLHNCQUFvQixVQUFVO0FBQzlCLFdBQVMseUJBQXlCLENBQUMsU0FBUztBQUMxQyxVQUFNLE1BQU0sbUJBQW1CLE9BQU87QUFDdEMsV0FBTztBQUFBLFNBQ0Y7QUFBQSxNQUNILE1BQU07QUFBQSxJQUNSO0FBQUE7QUFFRiw0QkFBMEIsVUFBVTtBQUFBOzs7O0FDOW1FcEMsTUFBSSxhQUFZLE9BQU87QUFDdkIsTUFBSSxtQkFBbUIsT0FBTztBQUM5QixNQUFJLHFCQUFvQixPQUFPO0FBQy9CLE1BQUksZ0JBQWUsT0FBTyxVQUFVO0FBQ3BDLE1BQUksV0FBVyxDQUFDLFFBQVEsUUFBUTtBQUM5QixhQUFTLFFBQVE7QUFDZixpQkFBVSxRQUFRLE1BQU0sRUFBRSxLQUFLLElBQUksT0FBTyxZQUFZLEtBQUssQ0FBQztBQUFBO0FBRWhFLE1BQUksY0FBYyxDQUFDLElBQUksTUFBTSxRQUFRLFNBQVM7QUFDNUMsUUFBSSxlQUFlLFNBQVMsbUJBQW1CLFNBQVMsWUFBWTtBQUNsRSxlQUFTLE9BQU8sbUJBQWtCLElBQUk7QUFDcEMsYUFBSyxjQUFhLEtBQUssSUFBSSxHQUFHLEtBQUssUUFBUTtBQUN6QyxxQkFBVSxJQUFJLEtBQUssRUFBRSxLQUFLLE1BQU0sS0FBSyxNQUFNLGNBQWMsT0FBTyxpQkFBaUIsTUFBTSxHQUFHLE1BQU0sS0FBSyxXQUFXLENBQUM7QUFBQSxJQUN2SDtBQUNBLFdBQU87QUFBQTtBQUVULE1BQUksZUFBZSxDQUFDLFFBQVEsWUFBWSxXQUFVLENBQUMsR0FBRyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUMsR0FBRyxHQUFHO0FBR3pGLE1BQUksbUJBQW1CLENBQUM7QUFDeEIsV0FBUyxrQkFBa0I7QUFBQSxJQUN6QixxQkFBcUIsTUFBTTtBQUFBLElBQzNCLHNCQUFzQixNQUFNO0FBQUEsSUFDNUIsY0FBYyxNQUFNO0FBQUEsSUFDcEIscUJBQXFCLE1BQU07QUFBQSxFQUM3QixDQUFDO0FBQ0QsU0FBTyxVQUFVLGFBQWEsZ0JBQWdCO0FBRzlDLE1BQUksVUFBVTtBQUdkLFdBQVMsOEJBQThCLENBQUMsVUFBVTtBQUNoRCxTQUFLLFNBQVMsTUFBTTtBQUNsQixhQUFPO0FBQUEsV0FDRjtBQUFBLFFBQ0gsTUFBTSxDQUFDO0FBQUEsTUFDVDtBQUFBLElBQ0Y7QUFDQSxVQUFNLDZCQUE2QixpQkFBaUIsU0FBUyxVQUFVLFNBQVMsU0FBUztBQUN6RixTQUFLO0FBQ0gsYUFBTztBQUNULFVBQU0sb0JBQW9CLFNBQVMsS0FBSztBQUN4QyxVQUFNLHNCQUFzQixTQUFTLEtBQUs7QUFDMUMsVUFBTSxhQUFhLFNBQVMsS0FBSztBQUNqQyxXQUFPLFNBQVMsS0FBSztBQUNyQixXQUFPLFNBQVMsS0FBSztBQUNyQixXQUFPLFNBQVMsS0FBSztBQUNyQixVQUFNLGVBQWUsT0FBTyxLQUFLLFNBQVMsSUFBSSxFQUFFO0FBQ2hELFVBQU0sT0FBTyxTQUFTLEtBQUs7QUFDM0IsYUFBUyxPQUFPO0FBQ2hCLGVBQVcsc0JBQXNCLGFBQWE7QUFDNUMsZUFBUyxLQUFLLHFCQUFxQjtBQUFBLElBQ3JDO0FBQ0EsZUFBVyx3QkFBd0IsYUFBYTtBQUM5QyxlQUFTLEtBQUssdUJBQXVCO0FBQUEsSUFDdkM7QUFDQSxhQUFTLEtBQUssY0FBYztBQUM1QixXQUFPO0FBQUE7QUFJVCxXQUFTLFFBQVEsQ0FBQyxTQUFTLE9BQU8sWUFBWTtBQUM1QyxVQUFNLGlCQUFpQixVQUFVLGFBQWEsTUFBTSxTQUFTLFVBQVUsSUFBSSxRQUFRLFFBQVEsU0FBUyxPQUFPLFVBQVU7QUFDckgsVUFBTSx1QkFBdUIsVUFBVSxhQUFhLFFBQVEsUUFBUTtBQUNwRSxVQUFNLFNBQVMsUUFBUTtBQUN2QixVQUFNLFVBQVUsUUFBUTtBQUN4QixRQUFJLE1BQU0sUUFBUTtBQUNsQixXQUFPO0FBQUEsT0FDSixPQUFPLGdCQUFnQixPQUFPO0FBQUEsYUFDdkIsS0FBSSxHQUFHO0FBQ1gsZUFBSztBQUNILG1CQUFPLEVBQUUsTUFBTSxLQUFLO0FBQ3RCLGNBQUk7QUFDRixrQkFBTSxXQUFXLE1BQU0sY0FBYyxFQUFFLFFBQVEsS0FBSyxRQUFRLENBQUM7QUFDN0Qsa0JBQU0scUJBQXFCLCtCQUErQixRQUFRO0FBQ2xFLG9CQUFRLG1CQUFtQixRQUFRLFFBQVEsSUFBSSxNQUM3Qyx5QkFDRixLQUFLLENBQUMsR0FBRztBQUNULG1CQUFPLEVBQUUsT0FBTyxtQkFBbUI7QUFBQSxtQkFDNUIsT0FBUDtBQUNBLGdCQUFJLE1BQU0sV0FBVztBQUNuQixvQkFBTTtBQUNSLGtCQUFNO0FBQ04sbUJBQU87QUFBQSxjQUNMLE9BQU87QUFBQSxnQkFDTCxRQUFRO0FBQUEsZ0JBQ1IsU0FBUyxDQUFDO0FBQUEsZ0JBQ1YsTUFBTSxDQUFDO0FBQUEsY0FDVDtBQUFBLFlBQ0Y7QUFBQTtBQUFBO0FBQUEsTUFHTjtBQUFBLElBQ0Y7QUFBQTtBQUlGLFdBQVMsUUFBUSxDQUFDLFNBQVMsT0FBTyxZQUFZLE9BQU87QUFDbkQsZUFBVyxlQUFlLFlBQVk7QUFDcEMsY0FBUTtBQUNSLG1CQUFrQjtBQUFBLElBQ3BCO0FBQ0EsV0FBTyxPQUNMLFNBQ0EsQ0FBQyxHQUNELFNBQVMsU0FBUyxPQUFPLFVBQVUsRUFBRSxPQUFPLGVBQWUsR0FDM0QsS0FDRjtBQUFBO0FBRUYsV0FBUyxNQUFNLENBQUMsU0FBUyxTQUFTLFdBQVcsT0FBTztBQUNsRCxXQUFPLFVBQVUsS0FBSyxFQUFFLEtBQUssQ0FBQyxXQUFXO0FBQ3ZDLFVBQUksT0FBTyxNQUFNO0FBQ2YsZUFBTztBQUFBLE1BQ1Q7QUFDQSxVQUFJLFlBQVk7QUFDaEIsZUFBUyxJQUFJLEdBQUc7QUFDZCxvQkFBWTtBQUFBO0FBRWQsZ0JBQVUsUUFBUSxPQUNoQixRQUFRLE1BQU0sT0FBTyxPQUFPLElBQUksSUFBSSxPQUFPLE1BQU0sSUFDbkQ7QUFDQSxVQUFJLFdBQVc7QUFDYixlQUFPO0FBQUEsTUFDVDtBQUNBLGFBQU8sT0FBTyxTQUFTLFNBQVMsV0FBVyxLQUFLO0FBQUEsS0FDakQ7QUFBQTtBQUlILE1BQUksc0JBQXNCLE9BQU8sT0FBTyxVQUFVO0FBQUEsSUFDaEQ7QUFBQSxFQUNGLENBQUM7QUFHRCxNQUFJLHNCQUFzQjtBQUFBLElBQ3hCO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtB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TztBQUFBOzs7QUh2QlIsQ0FBQyxlQUFlLElBQUksR0FBRztBQUN0QixxQkFBTSxLQUFLLFVBQVUsd0JBQVMsTUFBTSxDQUFDLENBQUM7QUFFdEMsTUFBSSxNQUFXLFVBQUssUUFBUSxJQUFJLEdBQUcsTUFBTTtBQUN6Qyx5QkFBVSxPQUFPLEdBQUc7QUFFcEIscUJBQU0sK0JBQStCO0FBQ3JDLEVBQUcsYUFBVSxLQUFLLEVBQUUsV0FBVyxLQUFLLENBQUM7QUFFckM7QUFDQyx1QkFBTSwrQkFBK0I7QUFDckMsUUFBSSxXQUFXLE1BQU0scUJBQXFCO0FBQzFDLDJCQUFVLE9BQU8sUUFBUTtBQUN6QixTQUFLLFVBQVU7QUFDZCw2QkFBVSw4Q0FBOEM7QUFDeEQ7QUFBQSxJQUNEO0FBQ0EsdUJBQU0sd0JBQXdCLFVBQVU7QUFBQSxFQUN6QztBQUVBO0FBQ0MsdUJBQU0sd0JBQXdCO0FBQzlCLFFBQUksYUFBa0IsVUFBSyxLQUFLLFVBQVU7QUFDMUMsUUFBSSxnQkFBZ0I7QUFDcEIsSUFBRyxpQkFBYyxZQUFZLGVBQWUsRUFBRSxVQUFVLFFBQVEsQ0FBQztBQUNqRSx1QkFBTSwyQkFBMkIsWUFBWTtBQUFBLEVBQzlDO0FBRUE7QUFDQyx1QkFBTSwrQkFBK0I7QUFDckMsUUFBSSxhQUFrQixVQUFLLEtBQUssZ0JBQWdCO0FBQ2hELFFBQUksZ0JBQWdCO0FBQ3BCLElBQUcsaUJBQWMsWUFBWSxlQUFlLEVBQUUsVUFBVSxRQUFRLENBQUM7QUFDakUsdUJBQU0sa0NBQWtDLFlBQVk7QUFBQSxFQUNyRDtBQUVBO0FBQ0MsdUJBQU0sNEJBQTRCO0FBQ2xDLFFBQUksY0FBbUIsVUFBSyxLQUFLLGNBQWM7QUFDL0MsUUFBSSxpQkFBaUIsb0JBQW9CLFNBQVMsc0JBQVMsMkJBQTJCLEVBQUUsVUFBVSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQzFHLElBQUcsaUJBQWMsYUFBYSxnQkFBZ0IsRUFBRSxVQUFVLFFBQVEsQ0FBQztBQUNuRSx1QkFBTSx5QkFBeUIsYUFBYTtBQUFBLEVBQzdDO0FBRUEscUJBQU0saUJBQWlCO0FBQ3ZCLFFBQU0saUJBQUssVUFBVSxDQUFDLFdBQVcsTUFBTSxnQkFBZ0IsTUFBTSxnQkFBZ0IsSUFBSSxHQUFHLEVBQUUsSUFBSSxDQUFDO0FBRTNGLE1BQUksUUFBUSxJQUFJO0FBQ2hCLHFCQUFNLGtCQUFrQixPQUFPO0FBQy9CLHlCQUFVLGtCQUFrQixNQUFNLFlBQVksQ0FBQztBQUFBLEdBQzdDOyIsCiAgImRlYnVnSWQiOiAiODBFMUZCQ0M5MUQ5MjY0MTY0NzU2RTIxNjQ3NTZFMjEiLAogICJuYW1lcyI6IFtdCn0= diff --git a/init/post.js b/init/post.js index 7b5b25d..5dc7d65 100644 --- a/init/post.js +++ b/init/post.js @@ -89266,3712 +89266,13 @@ var require_artifact2 = __commonJS((exports) => { exports.default = client; }); -// ../node_modules/@actions/github/lib/context.js -var require_context3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.Context = undefined; - var fs_1 = __require("fs"); - var os_1 = __require("os"); - - class Context { - constructor() { - var _a, _b, _c; - this.payload = {}; - if (process.env.GITHUB_EVENT_PATH) { - if ((0, fs_1.existsSync)(process.env.GITHUB_EVENT_PATH)) { - this.payload = JSON.parse((0, fs_1.readFileSync)(process.env.GITHUB_EVENT_PATH, { encoding: "utf8" })); - } else { - const path = process.env.GITHUB_EVENT_PATH; - process.stdout.write(`GITHUB_EVENT_PATH ${path} does not exist${os_1.EOL}`); - } - } - this.eventName = process.env.GITHUB_EVENT_NAME; - this.sha = process.env.GITHUB_SHA; - this.ref = process.env.GITHUB_REF; - this.workflow = process.env.GITHUB_WORKFLOW; - this.action = process.env.GITHUB_ACTION; - this.actor = process.env.GITHUB_ACTOR; - this.job = process.env.GITHUB_JOB; - this.runNumber = parseInt(process.env.GITHUB_RUN_NUMBER, 10); - this.runId = parseInt(process.env.GITHUB_RUN_ID, 10); - this.apiUrl = (_a = process.env.GITHUB_API_URL) !== null && _a !== undefined ? _a : `https://api.github.com`; - this.serverUrl = (_b = process.env.GITHUB_SERVER_URL) !== null && _b !== undefined ? _b : `https://github.com`; - this.graphqlUrl = (_c = process.env.GITHUB_GRAPHQL_URL) !== null && _c !== undefined ? _c : `https://api.github.com/graphql`; - } - get issue() { - const payload = this.payload; - return Object.assign(Object.assign({}, this.repo), { number: (payload.issue || payload.pull_request || payload).number }); - } - get repo() { - if (process.env.GITHUB_REPOSITORY) { - const [owner, repo] = process.env.GITHUB_REPOSITORY.split("/"); - return { owner, repo }; - } - if (this.payload.repository) { - return { - owner: this.payload.repository.owner.login, - repo: this.payload.repository.name - }; - } - throw new Error("context.repo requires a GITHUB_REPOSITORY environment variable like 'owner/repo'"); - } - } - exports.Context = Context; -}); - -// ../node_modules/@actions/github/lib/internal/utils.js -var require_utils8 = __commonJS((exports) => { - var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) { - if (k2 === undefined) - k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { - return m[k]; - } }; - } - Object.defineProperty(o, k2, desc); - } : function(o, m, k, k2) { - if (k2 === undefined) - k2 = k; - o[k2] = m[k]; - }); - var __setModuleDefault = exports && exports.__setModuleDefault || (Object.create ? function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); - } : function(o, v) { - o["default"] = v; - }); - var __importStar = exports && exports.__importStar || function(mod) { - if (mod && mod.__esModule) - return mod; - var result = {}; - if (mod != null) { - for (var k in mod) - if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) - __createBinding(result, mod, k); - } - __setModuleDefault(result, mod); - return result; - }; - var __awaiter = exports && exports.__awaiter || function(thisArg, _arguments, P, generator) { - function adopt(value) { - return value instanceof P ? value : new P(function(resolve) { - resolve(value); - }); - } - return new (P || (P = Promise))(function(resolve, reject) { - function fulfilled(value) { - try { - step(generator.next(value)); - } catch (e) { - reject(e); - } - } - function rejected(value) { - try { - step(generator["throw"](value)); - } catch (e) { - reject(e); - } - } - function step(result) { - result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); - } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); - }; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getApiBaseUrl = exports.getProxyFetch = exports.getProxyAgentDispatcher = exports.getProxyAgent = exports.getAuthString = undefined; - var httpClient = __importStar(require_lib()); - var undici_1 = require_undici(); - function getAuthString(token, options) { - if (!token && !options.auth) { - throw new Error("Parameter token or opts.auth is required"); - } else if (token && options.auth) { - throw new Error("Parameters token and opts.auth may not both be specified"); - } - return typeof options.auth === "string" ? options.auth : `token ${token}`; - } - exports.getAuthString = getAuthString; - function getProxyAgent(destinationUrl) { - const hc = new httpClient.HttpClient; - return hc.getAgent(destinationUrl); - } - exports.getProxyAgent = getProxyAgent; - function getProxyAgentDispatcher(destinationUrl) { - const hc = new httpClient.HttpClient; - return hc.getAgentDispatcher(destinationUrl); - } - exports.getProxyAgentDispatcher = getProxyAgentDispatcher; - function getProxyFetch(destinationUrl) { - const httpDispatcher = getProxyAgentDispatcher(destinationUrl); - const proxyFetch = (url, opts) => __awaiter(this, undefined, undefined, function* () { - return (0, undici_1.fetch)(url, Object.assign(Object.assign({}, opts), { dispatcher: httpDispatcher })); - }); - return proxyFetch; - } - exports.getProxyFetch = getProxyFetch; - function getApiBaseUrl() { - return process.env["GITHUB_API_URL"] || "https://api.github.com"; - } - exports.getApiBaseUrl = getApiBaseUrl; -}); - -// ../node_modules/@actions/github/node_modules/@octokit/core/node_modules/@octokit/request/node_modules/@octokit/endpoint/dist-node/index.js -var require_dist_node13 = __commonJS((exports, module) => { - var __defProp2 = Object.defineProperty; - var __getOwnPropDesc = Object.getOwnPropertyDescriptor; - var __getOwnPropNames2 = Object.getOwnPropertyNames; - var __hasOwnProp2 = Object.prototype.hasOwnProperty; - var __export = (target, all) => { - for (var name in all) - __defProp2(target, name, { get: all[name], enumerable: true }); - }; - var __copyProps = (to, from, except, desc) => { - if (from && typeof from === "object" || typeof from === "function") { - for (let key of __getOwnPropNames2(from)) - if (!__hasOwnProp2.call(to, key) && key !== except) - __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); - } - return to; - }; - var __toCommonJS = (mod) => __copyProps(__defProp2({}, "__esModule", { value: true }), mod); - var dist_src_exports = {}; - __export(dist_src_exports, { - endpoint: () => endpoint - }); - module.exports = __toCommonJS(dist_src_exports); - var import_universal_user_agent = require_dist_node(); - var VERSION = "9.0.5"; - var userAgent = `octokit-endpoint.js/${VERSION} ${(0, import_universal_user_agent.getUserAgent)()}`; - var DEFAULTS = { - method: "GET", - baseUrl: "https://api.github.com", - headers: { - accept: "application/vnd.github.v3+json", - "user-agent": userAgent - }, - mediaType: { - format: "" - } - }; - function lowercaseKeys(object) { - if (!object) { - return {}; - } - return Object.keys(object).reduce((newObj, key) => { - newObj[key.toLowerCase()] = object[key]; - return newObj; - }, {}); - } - function isPlainObject(value) { - if (typeof value !== "object" || value === null) - return false; - if (Object.prototype.toString.call(value) !== "[object Object]") - return false; - const proto = Object.getPrototypeOf(value); - if (proto === null) - return true; - const Ctor = Object.prototype.hasOwnProperty.call(proto, "constructor") && proto.constructor; - return typeof Ctor === "function" && Ctor instanceof Ctor && Function.prototype.call(Ctor) === Function.prototype.call(value); - } - function mergeDeep(defaults, options) { - const result = Object.assign({}, defaults); - Object.keys(options).forEach((key) => { - if (isPlainObject(options[key])) { - if (!(key in defaults)) - Object.assign(result, { [key]: options[key] }); - else - result[key] = mergeDeep(defaults[key], options[key]); - } else { - Object.assign(result, { [key]: options[key] }); - } - }); - return result; - } - function removeUndefinedProperties(obj) { - for (const key in obj) { - if (obj[key] === undefined) { - delete obj[key]; - } - } - return obj; - } - function merge(defaults, route, options) { - if (typeof route === "string") { - let [method, url] = route.split(" "); - options = Object.assign(url ? { method, url } : { url: method }, options); - } else { - options = Object.assign({}, route); - } - options.headers = lowercaseKeys(options.headers); - removeUndefinedProperties(options); - removeUndefinedProperties(options.headers); - const mergedOptions = mergeDeep(defaults || {}, options); - if (options.url === "/graphql") { - if (defaults && defaults.mediaType.previews?.length) { - mergedOptions.mediaType.previews = defaults.mediaType.previews.filter((preview) => !mergedOptions.mediaType.previews.includes(preview)).concat(mergedOptions.mediaType.previews); - } - mergedOptions.mediaType.previews = (mergedOptions.mediaType.previews || []).map((preview) => preview.replace(/-preview/, "")); - } - return mergedOptions; - } - function addQueryParameters(url, parameters) { - const separator = /\?/.test(url) ? "&" : "?"; - const names = Object.keys(parameters); - if (names.length === 0) { - return url; - } - return url + separator + names.map((name) => { - if (name === "q") { - return "q=" + parameters.q.split("+").map(encodeURIComponent).join("+"); - } - return `${name}=${encodeURIComponent(parameters[name])}`; - }).join("&"); - } - var urlVariableRegex = /\{[^}]+\}/g; - function removeNonChars(variableName) { - return variableName.replace(/^\W+|\W+$/g, "").split(/,/); - } - function extractUrlVariableNames(url) { - const matches = url.match(urlVariableRegex); - if (!matches) { - return []; - } - return matches.map(removeNonChars).reduce((a, b) => a.concat(b), []); - } - function omit(object, keysToOmit) { - const result = { __proto__: null }; - for (const key of Object.keys(object)) { - if (keysToOmit.indexOf(key) === -1) { - result[key] = object[key]; - } - } - return result; - } - function encodeReserved(str) { - return str.split(/(%[0-9A-Fa-f]{2})/g).map(function(part) { - if (!/%[0-9A-Fa-f]/.test(part)) { - part = encodeURI(part).replace(/%5B/g, "[").replace(/%5D/g, "]"); - } - return part; - }).join(""); - } - function encodeUnreserved(str) { - return encodeURIComponent(str).replace(/[!'()*]/g, function(c) { - return "%" + c.charCodeAt(0).toString(16).toUpperCase(); - }); - } - function encodeValue(operator, value, key) { - value = operator === "+" || operator === "#" ? encodeReserved(value) : encodeUnreserved(value); - if (key) { - return encodeUnreserved(key) + "=" + value; - } else { - return value; - } - } - function isDefined(value) { - return value !== undefined && value !== null; - } - function isKeyOperator(operator) { - return operator === ";" || operator === "&" || operator === "?"; - } - function getValues(context, operator, key, modifier) { - var value = context[key], result = []; - if (isDefined(value) && value !== "") { - if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") { - value = value.toString(); - if (modifier && modifier !== "*") { - value = value.substring(0, parseInt(modifier, 10)); - } - result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : "")); - } else { - if (modifier === "*") { - if (Array.isArray(value)) { - value.filter(isDefined).forEach(function(value2) { - result.push(encodeValue(operator, value2, isKeyOperator(operator) ? key : "")); - }); - } else { - Object.keys(value).forEach(function(k) { - if (isDefined(value[k])) { - result.push(encodeValue(operator, value[k], k)); - } - }); - } - } else { - const tmp = []; - if (Array.isArray(value)) { - value.filter(isDefined).forEach(function(value2) { - tmp.push(encodeValue(operator, value2)); - }); - } else { - Object.keys(value).forEach(function(k) { - if (isDefined(value[k])) { - tmp.push(encodeUnreserved(k)); - tmp.push(encodeValue(operator, value[k].toString())); - } - }); - } - if (isKeyOperator(operator)) { - result.push(encodeUnreserved(key) + "=" + tmp.join(",")); - } else if (tmp.length !== 0) { - result.push(tmp.join(",")); - } - } - } - } else { - if (operator === ";") { - if (isDefined(value)) { - result.push(encodeUnreserved(key)); - } - } else if (value === "" && (operator === "&" || operator === "?")) { - result.push(encodeUnreserved(key) + "="); - } else if (value === "") { - result.push(""); - } - } - return result; - } - function parseUrl(template) { - return { - expand: expand.bind(null, template) - }; - } - function expand(template, context) { - var operators = ["+", "#", ".", "/", ";", "?", "&"]; - template = template.replace(/\{([^\{\}]+)\}|([^\{\}]+)/g, function(_2, expression, literal) { - if (expression) { - let operator = ""; - const values = []; - if (operators.indexOf(expression.charAt(0)) !== -1) { - operator = expression.charAt(0); - expression = expression.substr(1); - } - expression.split(/,/g).forEach(function(variable) { - var tmp = /([^:\*]*)(?::(\d+)|(\*))?/.exec(variable); - values.push(getValues(context, operator, tmp[1], tmp[2] || tmp[3])); - }); - if (operator && operator !== "+") { - var separator = ","; - if (operator === "?") { - separator = "&"; - } else if (operator !== "#") { - separator = operator; - } - return (values.length !== 0 ? operator : "") + values.join(separator); - } else { - return values.join(","); - } - } else { - return encodeReserved(literal); - } - }); - if (template === "/") { - return template; - } else { - return template.replace(/\/$/, ""); - } - } - function parse(options) { - let method = options.method.toUpperCase(); - let url = (options.url || "/").replace(/:([a-z]\w+)/g, "{$1}"); - let headers = Object.assign({}, options.headers); - let body; - let parameters = omit(options, [ - "method", - "baseUrl", - "url", - "headers", - "request", - "mediaType" - ]); - const urlVariableNames = extractUrlVariableNames(url); - url = parseUrl(url).expand(parameters); - if (!/^http/.test(url)) { - url = options.baseUrl + url; - } - const omittedParameters = Object.keys(options).filter((option) => urlVariableNames.includes(option)).concat("baseUrl"); - const remainingParameters = omit(parameters, omittedParameters); - const isBinaryRequest = /application\/octet-stream/i.test(headers.accept); - if (!isBinaryRequest) { - if (options.mediaType.format) { - headers.accept = headers.accept.split(/,/).map((format) => format.replace(/application\/vnd(\.\w+)(\.v3)?(\.\w+)?(\+json)?$/, `application/vnd\$1\$2.${options.mediaType.format}`)).join(","); - } - if (url.endsWith("/graphql")) { - if (options.mediaType.previews?.length) { - const previewsFromAcceptHeader = headers.accept.match(/[\w-]+(?=-preview)/g) || []; - headers.accept = previewsFromAcceptHeader.concat(options.mediaType.previews).map((preview) => { - const format = options.mediaType.format ? `.${options.mediaType.format}` : "+json"; - return `application/vnd.github.${preview}-preview${format}`; - }).join(","); - } - } - } - if (["GET", "HEAD"].includes(method)) { - url = addQueryParameters(url, remainingParameters); - } else { - if ("data" in remainingParameters) { - body = remainingParameters.data; - } else { - if (Object.keys(remainingParameters).length) { - body = remainingParameters; - } - } - } - if (!headers["content-type"] && typeof body !== "undefined") { - headers["content-type"] = "application/json; charset=utf-8"; - } - if (["PATCH", "PUT"].includes(method) && typeof body === "undefined") { - body = ""; - } - return Object.assign({ method, url, headers }, typeof body !== "undefined" ? { body } : null, options.request ? { request: options.request } : null); - } - function endpointWithDefaults(defaults, route, options) { - return parse(merge(defaults, route, options)); - } - function withDefaults(oldDefaults, newDefaults) { - const DEFAULTS2 = merge(oldDefaults, newDefaults); - const endpoint2 = endpointWithDefaults.bind(null, DEFAULTS2); - return Object.assign(endpoint2, { - DEFAULTS: DEFAULTS2, - defaults: withDefaults.bind(null, DEFAULTS2), - merge: merge.bind(null, DEFAULTS2), - parse - }); - } - var endpoint = withDefaults(null, DEFAULTS); -}); - -// ../node_modules/@octokit/request-error/dist-node/index.js -var require_dist_node14 = __commonJS((exports, module) => { - var __create2 = Object.create; - var __defProp2 = Object.defineProperty; - var __getOwnPropDesc = Object.getOwnPropertyDescriptor; - var __getOwnPropNames2 = Object.getOwnPropertyNames; - var __getProtoOf2 = Object.getPrototypeOf; - var __hasOwnProp2 = Object.prototype.hasOwnProperty; - var __export = (target, all) => { - for (var name in all) - __defProp2(target, name, { get: all[name], enumerable: true }); - }; - var __copyProps = (to, from, except, desc) => { - if (from && typeof from === "object" || typeof from === "function") { - for (let key of __getOwnPropNames2(from)) - if (!__hasOwnProp2.call(to, key) && key !== except) - __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); - } - return to; - }; - var __toESM2 = (mod, isNodeMode, target) => (target = mod != null ? __create2(__getProtoOf2(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp2(target, "default", { value: mod, enumerable: true }) : target, mod)); - var __toCommonJS = (mod) => __copyProps(__defProp2({}, "__esModule", { value: true }), mod); - var dist_src_exports = {}; - __export(dist_src_exports, { - RequestError: () => RequestError - }); - module.exports = __toCommonJS(dist_src_exports); - var import_deprecation = require_dist_node3(); - var import_once = __toESM2(require_once()); - var logOnceCode = (0, import_once.default)((deprecation) => console.warn(deprecation)); - var logOnceHeaders = (0, import_once.default)((deprecation) => console.warn(deprecation)); - var RequestError = class extends Error { - constructor(message, statusCode, options) { - super(message); - if (Error.captureStackTrace) { - Error.captureStackTrace(this, this.constructor); - } - this.name = "HttpError"; - this.status = statusCode; - let headers; - if ("headers" in options && typeof options.headers !== "undefined") { - headers = options.headers; - } - if ("response" in options) { - this.response = options.response; - headers = options.response.headers; - } - const requestCopy = Object.assign({}, options.request); - if (options.request.headers.authorization) { - requestCopy.headers = Object.assign({}, options.request.headers, { - authorization: options.request.headers.authorization.replace(/ .*$/, " [REDACTED]") - }); - } - requestCopy.url = requestCopy.url.replace(/\bclient_secret=\w+/g, "client_secret=[REDACTED]").replace(/\baccess_token=\w+/g, "access_token=[REDACTED]"); - this.request = requestCopy; - Object.defineProperty(this, "code", { - get() { - logOnceCode(new import_deprecation.Deprecation("[@octokit/request-error] `error.code` is deprecated, use `error.status`.")); - return statusCode; - } - }); - Object.defineProperty(this, "headers", { - get() { - logOnceHeaders(new import_deprecation.Deprecation("[@octokit/request-error] `error.headers` is deprecated, use `error.response.headers`.")); - return headers || {}; - } - }); - } - }; -}); - -// ../node_modules/@actions/github/node_modules/@octokit/core/node_modules/@octokit/request/dist-node/index.js -var require_dist_node15 = __commonJS((exports, module) => { - var __defProp2 = Object.defineProperty; - var __getOwnPropDesc = Object.getOwnPropertyDescriptor; - var __getOwnPropNames2 = Object.getOwnPropertyNames; - var __hasOwnProp2 = Object.prototype.hasOwnProperty; - var __export = (target, all) => { - for (var name in all) - __defProp2(target, name, { get: all[name], enumerable: true }); - }; - var __copyProps = (to, from, except, desc) => { - if (from && typeof from === "object" || typeof from === "function") { - for (let key of __getOwnPropNames2(from)) - if (!__hasOwnProp2.call(to, key) && key !== except) - __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); - } - return to; - }; - var __toCommonJS = (mod) => __copyProps(__defProp2({}, "__esModule", { value: true }), mod); - var dist_src_exports = {}; - __export(dist_src_exports, { - request: () => request - }); - module.exports = __toCommonJS(dist_src_exports); - var import_endpoint = require_dist_node13(); - var import_universal_user_agent = require_dist_node(); - var VERSION = "8.4.0"; - function isPlainObject(value) { - if (typeof value !== "object" || value === null) - return false; - if (Object.prototype.toString.call(value) !== "[object Object]") - return false; - const proto = Object.getPrototypeOf(value); - if (proto === null) - return true; - const Ctor = Object.prototype.hasOwnProperty.call(proto, "constructor") && proto.constructor; - return typeof Ctor === "function" && Ctor instanceof Ctor && Function.prototype.call(Ctor) === Function.prototype.call(value); - } - var import_request_error = require_dist_node14(); - function getBufferResponse(response) { - return response.arrayBuffer(); - } - function fetchWrapper(requestOptions) { - var _a, _b, _c, _d; - const log = requestOptions.request && requestOptions.request.log ? requestOptions.request.log : console; - const parseSuccessResponseBody = ((_a = requestOptions.request) == null ? undefined : _a.parseSuccessResponseBody) !== false; - if (isPlainObject(requestOptions.body) || Array.isArray(requestOptions.body)) { - requestOptions.body = JSON.stringify(requestOptions.body); - } - let headers = {}; - let status; - let url; - let { fetch: fetch2 } = globalThis; - if ((_b = requestOptions.request) == null ? undefined : _b.fetch) { - fetch2 = requestOptions.request.fetch; - } - if (!fetch2) { - throw new Error("fetch is not set. Please pass a fetch implementation as new Octokit({ request: { fetch }}). Learn more at https://github.com/octokit/octokit.js/#fetch-missing"); - } - return fetch2(requestOptions.url, { - method: requestOptions.method, - body: requestOptions.body, - redirect: (_c = requestOptions.request) == null ? undefined : _c.redirect, - headers: requestOptions.headers, - signal: (_d = requestOptions.request) == null ? undefined : _d.signal, - ...requestOptions.body && { duplex: "half" } - }).then(async (response) => { - url = response.url; - status = response.status; - for (const keyAndValue of response.headers) { - headers[keyAndValue[0]] = keyAndValue[1]; - } - if ("deprecation" in headers) { - const matches = headers.link && headers.link.match(/<([^>]+)>; rel="deprecation"/); - const deprecationLink = matches && matches.pop(); - log.warn(`[@octokit/request] "${requestOptions.method} ${requestOptions.url}" is deprecated. It is scheduled to be removed on ${headers.sunset}${deprecationLink ? `. See ${deprecationLink}` : ""}`); - } - if (status === 204 || status === 205) { - return; - } - if (requestOptions.method === "HEAD") { - if (status < 400) { - return; - } - throw new import_request_error.RequestError(response.statusText, status, { - response: { - url, - status, - headers, - data: undefined - }, - request: requestOptions - }); - } - if (status === 304) { - throw new import_request_error.RequestError("Not modified", status, { - response: { - url, - status, - headers, - data: await getResponseData(response) - }, - request: requestOptions - }); - } - if (status >= 400) { - const data = await getResponseData(response); - const error = new import_request_error.RequestError(toErrorMessage(data), status, { - response: { - url, - status, - headers, - data - }, - request: requestOptions - }); - throw error; - } - return parseSuccessResponseBody ? await getResponseData(response) : response.body; - }).then((data) => { - return { - status, - url, - headers, - data - }; - }).catch((error) => { - if (error instanceof import_request_error.RequestError) - throw error; - else if (error.name === "AbortError") - throw error; - let message = error.message; - if (error.name === "TypeError" && "cause" in error) { - if (error.cause instanceof Error) { - message = error.cause.message; - } else if (typeof error.cause === "string") { - message = error.cause; - } - } - throw new import_request_error.RequestError(message, 500, { - request: requestOptions - }); - }); - } - async function getResponseData(response) { - const contentType = response.headers.get("content-type"); - if (/application\/json/.test(contentType)) { - return response.json().catch(() => response.text()).catch(() => ""); - } - if (!contentType || /^text\/|charset=utf-8$/.test(contentType)) { - return response.text(); - } - return getBufferResponse(response); - } - function toErrorMessage(data) { - if (typeof data === "string") - return data; - let suffix; - if ("documentation_url" in data) { - suffix = ` - ${data.documentation_url}`; - } else { - suffix = ""; - } - if ("message" in data) { - if (Array.isArray(data.errors)) { - return `${data.message}: ${data.errors.map(JSON.stringify).join(", ")}${suffix}`; - } - return `${data.message}${suffix}`; - } - return `Unknown error: ${JSON.stringify(data)}`; - } - function withDefaults(oldEndpoint, newDefaults) { - const endpoint2 = oldEndpoint.defaults(newDefaults); - const newApi = function(route, parameters) { - const endpointOptions = endpoint2.merge(route, parameters); - if (!endpointOptions.request || !endpointOptions.request.hook) { - return fetchWrapper(endpoint2.parse(endpointOptions)); - } - const request2 = (route2, parameters2) => { - return fetchWrapper(endpoint2.parse(endpoint2.merge(route2, parameters2))); - }; - Object.assign(request2, { - endpoint: endpoint2, - defaults: withDefaults.bind(null, endpoint2) - }); - return endpointOptions.request.hook(request2, endpointOptions); - }; - return Object.assign(newApi, { - endpoint: endpoint2, - defaults: withDefaults.bind(null, endpoint2) - }); - } - var request = withDefaults(import_endpoint.endpoint, { - headers: { - "user-agent": `octokit-request.js/${VERSION} ${(0, import_universal_user_agent.getUserAgent)()}` - } - }); -}); - -// ../node_modules/@actions/github/node_modules/@octokit/core/node_modules/@octokit/graphql/dist-node/index.js -var require_dist_node16 = __commonJS((exports, module) => { - var __defProp2 = Object.defineProperty; - var __getOwnPropDesc = Object.getOwnPropertyDescriptor; - var __getOwnPropNames2 = Object.getOwnPropertyNames; - var __hasOwnProp2 = Object.prototype.hasOwnProperty; - var __export = (target, all) => { - for (var name in all) - __defProp2(target, name, { get: all[name], enumerable: true }); - }; - var __copyProps = (to, from, except, desc) => { - if (from && typeof from === "object" || typeof from === "function") { - for (let key of __getOwnPropNames2(from)) - if (!__hasOwnProp2.call(to, key) && key !== except) - __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); - } - return to; - }; - var __toCommonJS = (mod) => __copyProps(__defProp2({}, "__esModule", { value: true }), mod); - var dist_src_exports = {}; - __export(dist_src_exports, { - GraphqlResponseError: () => GraphqlResponseError, - graphql: () => graphql2, - withCustomRequest: () => withCustomRequest - }); - module.exports = __toCommonJS(dist_src_exports); - var import_request3 = require_dist_node15(); - var import_universal_user_agent = require_dist_node(); - var VERSION = "7.1.0"; - var import_request2 = require_dist_node15(); - var import_request = require_dist_node15(); - function _buildMessageForResponseErrors(data) { - return `Request failed due to following response errors: -` + data.errors.map((e) => ` - ${e.message}`).join("\n"); - } - var GraphqlResponseError = class extends Error { - constructor(request2, headers, response) { - super(_buildMessageForResponseErrors(response)); - this.request = request2; - this.headers = headers; - this.response = response; - this.name = "GraphqlResponseError"; - this.errors = response.errors; - this.data = response.data; - if (Error.captureStackTrace) { - Error.captureStackTrace(this, this.constructor); - } - } - }; - var NON_VARIABLE_OPTIONS = [ - "method", - "baseUrl", - "url", - "headers", - "request", - "query", - "mediaType" - ]; - var FORBIDDEN_VARIABLE_OPTIONS = ["query", "method", "url"]; - var GHES_V3_SUFFIX_REGEX = /\/api\/v3\/?$/; - function graphql(request2, query, options) { - if (options) { - if (typeof query === "string" && "query" in options) { - return Promise.reject(new Error(`[@octokit/graphql] "query" cannot be used as variable name`)); - } - for (const key in options) { - if (!FORBIDDEN_VARIABLE_OPTIONS.includes(key)) - continue; - return Promise.reject(new Error(`[@octokit/graphql] "${key}" cannot be used as variable name`)); - } - } - const parsedOptions = typeof query === "string" ? Object.assign({ query }, options) : query; - const requestOptions = Object.keys(parsedOptions).reduce((result, key) => { - if (NON_VARIABLE_OPTIONS.includes(key)) { - result[key] = parsedOptions[key]; - return result; - } - if (!result.variables) { - result.variables = {}; - } - result.variables[key] = parsedOptions[key]; - return result; - }, {}); - const baseUrl = parsedOptions.baseUrl || request2.endpoint.DEFAULTS.baseUrl; - if (GHES_V3_SUFFIX_REGEX.test(baseUrl)) { - requestOptions.url = baseUrl.replace(GHES_V3_SUFFIX_REGEX, "/api/graphql"); - } - return request2(requestOptions).then((response) => { - if (response.data.errors) { - const headers = {}; - for (const key of Object.keys(response.headers)) { - headers[key] = response.headers[key]; - } - throw new GraphqlResponseError(requestOptions, headers, response.data); - } - return response.data.data; - }); - } - function withDefaults(request2, newDefaults) { - const newRequest = request2.defaults(newDefaults); - const newApi = (query, options) => { - return graphql(newRequest, query, options); - }; - return Object.assign(newApi, { - defaults: withDefaults.bind(null, newRequest), - endpoint: newRequest.endpoint - }); - } - var graphql2 = withDefaults(import_request3.request, { - headers: { - "user-agent": `octokit-graphql.js/${VERSION} ${(0, import_universal_user_agent.getUserAgent)()}` - }, - method: "POST", - url: "/graphql" - }); - function withCustomRequest(customRequest) { - return withDefaults(customRequest, { - method: "POST", - url: "/graphql" - }); - } -}); - -// ../node_modules/@actions/github/node_modules/@octokit/core/node_modules/@octokit/auth-token/dist-node/index.js -var require_dist_node17 = __commonJS((exports, module) => { - var __defProp2 = Object.defineProperty; - var __getOwnPropDesc = Object.getOwnPropertyDescriptor; - var __getOwnPropNames2 = Object.getOwnPropertyNames; - var __hasOwnProp2 = Object.prototype.hasOwnProperty; - var __export = (target, all) => { - for (var name in all) - __defProp2(target, name, { get: all[name], enumerable: true }); - }; - var __copyProps = (to, from, except, desc) => { - if (from && typeof from === "object" || typeof from === "function") { - for (let key of __getOwnPropNames2(from)) - if (!__hasOwnProp2.call(to, key) && key !== except) - __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); - } - return to; - }; - var __toCommonJS = (mod) => __copyProps(__defProp2({}, "__esModule", { value: true }), mod); - var dist_src_exports = {}; - __export(dist_src_exports, { - createTokenAuth: () => createTokenAuth - }); - module.exports = __toCommonJS(dist_src_exports); - var REGEX_IS_INSTALLATION_LEGACY = /^v1\./; - var REGEX_IS_INSTALLATION = /^ghs_/; - var REGEX_IS_USER_TO_SERVER = /^ghu_/; - async function auth(token) { - const isApp = token.split(/\./).length === 3; - const isInstallation = REGEX_IS_INSTALLATION_LEGACY.test(token) || REGEX_IS_INSTALLATION.test(token); - const isUserToServer = REGEX_IS_USER_TO_SERVER.test(token); - const tokenType = isApp ? "app" : isInstallation ? "installation" : isUserToServer ? "user-to-server" : "oauth"; - return { - type: "token", - token, - tokenType - }; - } - function withAuthorizationPrefix(token) { - if (token.split(/\./).length === 3) { - return `bearer ${token}`; - } - return `token ${token}`; - } - async function hook(token, request, route, parameters) { - const endpoint = request.endpoint.merge(route, parameters); - endpoint.headers.authorization = withAuthorizationPrefix(token); - return request(endpoint); - } - var createTokenAuth = function createTokenAuth2(token) { - if (!token) { - throw new Error("[@octokit/auth-token] No token passed to createTokenAuth"); - } - if (typeof token !== "string") { - throw new Error("[@octokit/auth-token] Token passed to createTokenAuth is not a string"); - } - token = token.replace(/^(token|bearer) +/i, ""); - return Object.assign(auth.bind(null, token), { - hook: hook.bind(null, token) - }); - }; -}); - -// ../node_modules/@actions/github/node_modules/@octokit/core/dist-node/index.js -var require_dist_node18 = __commonJS((exports, module) => { - var __defProp2 = Object.defineProperty; - var __getOwnPropDesc = Object.getOwnPropertyDescriptor; - var __getOwnPropNames2 = Object.getOwnPropertyNames; - var __hasOwnProp2 = Object.prototype.hasOwnProperty; - var __export = (target, all) => { - for (var name in all) - __defProp2(target, name, { get: all[name], enumerable: true }); - }; - var __copyProps = (to, from, except, desc) => { - if (from && typeof from === "object" || typeof from === "function") { - for (let key of __getOwnPropNames2(from)) - if (!__hasOwnProp2.call(to, key) && key !== except) - __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); - } - return to; - }; - var __toCommonJS = (mod) => __copyProps(__defProp2({}, "__esModule", { value: true }), mod); - var dist_src_exports = {}; - __export(dist_src_exports, { - Octokit: () => Octokit - }); - module.exports = __toCommonJS(dist_src_exports); - var import_universal_user_agent = require_dist_node(); - var import_before_after_hook = require_before_after_hook(); - var import_request = require_dist_node15(); - var import_graphql = require_dist_node16(); - var import_auth_token = require_dist_node17(); - var VERSION = "5.2.0"; - var noop = () => { - }; - var consoleWarn = console.warn.bind(console); - var consoleError = console.error.bind(console); - var userAgentTrail = `octokit-core.js/${VERSION} ${(0, import_universal_user_agent.getUserAgent)()}`; - var Octokit = class { - static { - this.VERSION = VERSION; - } - static defaults(defaults) { - const OctokitWithDefaults = class extends this { - constructor(...args) { - const options = args[0] || {}; - if (typeof defaults === "function") { - super(defaults(options)); - return; - } - super(Object.assign({}, defaults, options, options.userAgent && defaults.userAgent ? { - userAgent: `${options.userAgent} ${defaults.userAgent}` - } : null)); - } - }; - return OctokitWithDefaults; - } - static { - this.plugins = []; - } - static plugin(...newPlugins) { - const currentPlugins = this.plugins; - const NewOctokit = class extends this { - static { - this.plugins = currentPlugins.concat(newPlugins.filter((plugin) => !currentPlugins.includes(plugin))); - } - }; - return NewOctokit; - } - constructor(options = {}) { - const hook = new import_before_after_hook.Collection; - const requestDefaults = { - baseUrl: import_request.request.endpoint.DEFAULTS.baseUrl, - headers: {}, - request: Object.assign({}, options.request, { - hook: hook.bind(null, "request") - }), - mediaType: { - previews: [], - format: "" - } - }; - requestDefaults.headers["user-agent"] = options.userAgent ? `${options.userAgent} ${userAgentTrail}` : userAgentTrail; - if (options.baseUrl) { - requestDefaults.baseUrl = options.baseUrl; - } - if (options.previews) { - requestDefaults.mediaType.previews = options.previews; - } - if (options.timeZone) { - requestDefaults.headers["time-zone"] = options.timeZone; - } - this.request = import_request.request.defaults(requestDefaults); - this.graphql = (0, import_graphql.withCustomRequest)(this.request).defaults(requestDefaults); - this.log = Object.assign({ - debug: noop, - info: noop, - warn: consoleWarn, - error: consoleError - }, options.log); - this.hook = hook; - if (!options.authStrategy) { - if (!options.auth) { - this.auth = async () => ({ - type: "unauthenticated" - }); - } else { - const auth = (0, import_auth_token.createTokenAuth)(options.auth); - hook.wrap("request", auth.hook); - this.auth = auth; - } - } else { - const { authStrategy, ...otherOptions } = options; - const auth = authStrategy(Object.assign({ - request: this.request, - log: this.log, - octokit: this, - octokitOptions: otherOptions - }, options.auth)); - hook.wrap("request", auth.hook); - this.auth = auth; - } - const classConstructor = this.constructor; - for (let i = 0;i < classConstructor.plugins.length; ++i) { - Object.assign(this, classConstructor.plugins[i](this, options)); - } - } - }; -}); - -// ../node_modules/@octokit/plugin-rest-endpoint-methods/dist-node/index.js -var require_dist_node19 = __commonJS((exports, module) => { - var __defProp2 = Object.defineProperty; - var __getOwnPropDesc = Object.getOwnPropertyDescriptor; - var __getOwnPropNames2 = Object.getOwnPropertyNames; - var __hasOwnProp2 = Object.prototype.hasOwnProperty; - var __export = (target, all) => { - for (var name in all) - __defProp2(target, name, { get: all[name], enumerable: true }); - }; - var __copyProps = (to, from, except, desc) => { - if (from && typeof from === "object" || typeof from === "function") { - for (let key of __getOwnPropNames2(from)) - if (!__hasOwnProp2.call(to, key) && key !== except) - __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); - } - return to; - }; - var __toCommonJS = (mod) => __copyProps(__defProp2({}, "__esModule", { value: true }), mod); - var dist_src_exports = {}; - __export(dist_src_exports, { - legacyRestEndpointMethods: () => legacyRestEndpointMethods, - restEndpointMethods: () => restEndpointMethods - }); - module.exports = __toCommonJS(dist_src_exports); - var VERSION = "10.4.1"; - var Endpoints = { - actions: { - addCustomLabelsToSelfHostedRunnerForOrg: [ - "POST /orgs/{org}/actions/runners/{runner_id}/labels" - ], - addCustomLabelsToSelfHostedRunnerForRepo: [ - "POST /repos/{owner}/{repo}/actions/runners/{runner_id}/labels" - ], - addSelectedRepoToOrgSecret: [ - "PUT /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}" - ], - addSelectedRepoToOrgVariable: [ - "PUT /orgs/{org}/actions/variables/{name}/repositories/{repository_id}" - ], - approveWorkflowRun: [ - "POST /repos/{owner}/{repo}/actions/runs/{run_id}/approve" - ], - cancelWorkflowRun: [ - "POST /repos/{owner}/{repo}/actions/runs/{run_id}/cancel" - ], - createEnvironmentVariable: [ - "POST /repositories/{repository_id}/environments/{environment_name}/variables" - ], - createOrUpdateEnvironmentSecret: [ - "PUT /repositories/{repository_id}/environments/{environment_name}/secrets/{secret_name}" - ], - createOrUpdateOrgSecret: ["PUT /orgs/{org}/actions/secrets/{secret_name}"], - createOrUpdateRepoSecret: [ - "PUT /repos/{owner}/{repo}/actions/secrets/{secret_name}" - ], - createOrgVariable: ["POST /orgs/{org}/actions/variables"], - createRegistrationTokenForOrg: [ - "POST /orgs/{org}/actions/runners/registration-token" - ], - createRegistrationTokenForRepo: [ - "POST /repos/{owner}/{repo}/actions/runners/registration-token" - ], - createRemoveTokenForOrg: ["POST /orgs/{org}/actions/runners/remove-token"], - createRemoveTokenForRepo: [ - "POST /repos/{owner}/{repo}/actions/runners/remove-token" - ], - createRepoVariable: ["POST /repos/{owner}/{repo}/actions/variables"], - createWorkflowDispatch: [ - "POST /repos/{owner}/{repo}/actions/workflows/{workflow_id}/dispatches" - ], - deleteActionsCacheById: [ - "DELETE /repos/{owner}/{repo}/actions/caches/{cache_id}" - ], - deleteActionsCacheByKey: [ - "DELETE /repos/{owner}/{repo}/actions/caches{?key,ref}" - ], - deleteArtifact: [ - "DELETE /repos/{owner}/{repo}/actions/artifacts/{artifact_id}" - ], - deleteEnvironmentSecret: [ - "DELETE /repositories/{repository_id}/environments/{environment_name}/secrets/{secret_name}" - ], - deleteEnvironmentVariable: [ - "DELETE /repositories/{repository_id}/environments/{environment_name}/variables/{name}" - ], - deleteOrgSecret: ["DELETE /orgs/{org}/actions/secrets/{secret_name}"], - deleteOrgVariable: ["DELETE /orgs/{org}/actions/variables/{name}"], - deleteRepoSecret: [ - "DELETE /repos/{owner}/{repo}/actions/secrets/{secret_name}" - ], - deleteRepoVariable: [ - "DELETE /repos/{owner}/{repo}/actions/variables/{name}" - ], - deleteSelfHostedRunnerFromOrg: [ - "DELETE /orgs/{org}/actions/runners/{runner_id}" - ], - deleteSelfHostedRunnerFromRepo: [ - "DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}" - ], - deleteWorkflowRun: ["DELETE /repos/{owner}/{repo}/actions/runs/{run_id}"], - deleteWorkflowRunLogs: [ - "DELETE /repos/{owner}/{repo}/actions/runs/{run_id}/logs" - ], - disableSelectedRepositoryGithubActionsOrganization: [ - "DELETE /orgs/{org}/actions/permissions/repositories/{repository_id}" - ], - disableWorkflow: [ - "PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/disable" - ], - downloadArtifact: [ - "GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}/{archive_format}" - ], - downloadJobLogsForWorkflowRun: [ - "GET /repos/{owner}/{repo}/actions/jobs/{job_id}/logs" - ], - downloadWorkflowRunAttemptLogs: [ - "GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/logs" - ], - downloadWorkflowRunLogs: [ - "GET /repos/{owner}/{repo}/actions/runs/{run_id}/logs" - ], - enableSelectedRepositoryGithubActionsOrganization: [ - "PUT /orgs/{org}/actions/permissions/repositories/{repository_id}" - ], - enableWorkflow: [ - "PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/enable" - ], - forceCancelWorkflowRun: [ - "POST /repos/{owner}/{repo}/actions/runs/{run_id}/force-cancel" - ], - generateRunnerJitconfigForOrg: [ - "POST /orgs/{org}/actions/runners/generate-jitconfig" - ], - generateRunnerJitconfigForRepo: [ - "POST /repos/{owner}/{repo}/actions/runners/generate-jitconfig" - ], - getActionsCacheList: ["GET /repos/{owner}/{repo}/actions/caches"], - getActionsCacheUsage: ["GET /repos/{owner}/{repo}/actions/cache/usage"], - getActionsCacheUsageByRepoForOrg: [ - "GET /orgs/{org}/actions/cache/usage-by-repository" - ], - getActionsCacheUsageForOrg: ["GET /orgs/{org}/actions/cache/usage"], - getAllowedActionsOrganization: [ - "GET /orgs/{org}/actions/permissions/selected-actions" - ], - getAllowedActionsRepository: [ - "GET /repos/{owner}/{repo}/actions/permissions/selected-actions" - ], - getArtifact: ["GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}"], - getCustomOidcSubClaimForRepo: [ - "GET /repos/{owner}/{repo}/actions/oidc/customization/sub" - ], - getEnvironmentPublicKey: [ - "GET /repositories/{repository_id}/environments/{environment_name}/secrets/public-key" - ], - getEnvironmentSecret: [ - "GET /repositories/{repository_id}/environments/{environment_name}/secrets/{secret_name}" - ], - getEnvironmentVariable: [ - "GET /repositories/{repository_id}/environments/{environment_name}/variables/{name}" - ], - getGithubActionsDefaultWorkflowPermissionsOrganization: [ - "GET /orgs/{org}/actions/permissions/workflow" - ], - getGithubActionsDefaultWorkflowPermissionsRepository: [ - "GET /repos/{owner}/{repo}/actions/permissions/workflow" - ], - getGithubActionsPermissionsOrganization: [ - "GET /orgs/{org}/actions/permissions" - ], - getGithubActionsPermissionsRepository: [ - "GET /repos/{owner}/{repo}/actions/permissions" - ], - getJobForWorkflowRun: ["GET /repos/{owner}/{repo}/actions/jobs/{job_id}"], - getOrgPublicKey: ["GET /orgs/{org}/actions/secrets/public-key"], - getOrgSecret: ["GET /orgs/{org}/actions/secrets/{secret_name}"], - getOrgVariable: ["GET /orgs/{org}/actions/variables/{name}"], - getPendingDeploymentsForRun: [ - "GET /repos/{owner}/{repo}/actions/runs/{run_id}/pending_deployments" - ], - getRepoPermissions: [ - "GET /repos/{owner}/{repo}/actions/permissions", - {}, - { renamed: ["actions", "getGithubActionsPermissionsRepository"] } - ], - getRepoPublicKey: ["GET /repos/{owner}/{repo}/actions/secrets/public-key"], - getRepoSecret: ["GET /repos/{owner}/{repo}/actions/secrets/{secret_name}"], - getRepoVariable: ["GET /repos/{owner}/{repo}/actions/variables/{name}"], - getReviewsForRun: [ - "GET /repos/{owner}/{repo}/actions/runs/{run_id}/approvals" - ], - getSelfHostedRunnerForOrg: ["GET /orgs/{org}/actions/runners/{runner_id}"], - getSelfHostedRunnerForRepo: [ - "GET /repos/{owner}/{repo}/actions/runners/{runner_id}" - ], - getWorkflow: ["GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}"], - getWorkflowAccessToRepository: [ - "GET /repos/{owner}/{repo}/actions/permissions/access" - ], - getWorkflowRun: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}"], - getWorkflowRunAttempt: [ - "GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}" - ], - getWorkflowRunUsage: [ - "GET /repos/{owner}/{repo}/actions/runs/{run_id}/timing" - ], - getWorkflowUsage: [ - "GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/timing" - ], - listArtifactsForRepo: ["GET /repos/{owner}/{repo}/actions/artifacts"], - listEnvironmentSecrets: [ - "GET /repositories/{repository_id}/environments/{environment_name}/secrets" - ], - listEnvironmentVariables: [ - "GET /repositories/{repository_id}/environments/{environment_name}/variables" - ], - listJobsForWorkflowRun: [ - "GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs" - ], - listJobsForWorkflowRunAttempt: [ - "GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/jobs" - ], - listLabelsForSelfHostedRunnerForOrg: [ - "GET /orgs/{org}/actions/runners/{runner_id}/labels" - ], - listLabelsForSelfHostedRunnerForRepo: [ - "GET /repos/{owner}/{repo}/actions/runners/{runner_id}/labels" - ], - listOrgSecrets: ["GET /orgs/{org}/actions/secrets"], - listOrgVariables: ["GET /orgs/{org}/actions/variables"], - listRepoOrganizationSecrets: [ - "GET /repos/{owner}/{repo}/actions/organization-secrets" - ], - listRepoOrganizationVariables: [ - "GET /repos/{owner}/{repo}/actions/organization-variables" - ], - listRepoSecrets: ["GET /repos/{owner}/{repo}/actions/secrets"], - listRepoVariables: ["GET /repos/{owner}/{repo}/actions/variables"], - listRepoWorkflows: ["GET /repos/{owner}/{repo}/actions/workflows"], - listRunnerApplicationsForOrg: ["GET /orgs/{org}/actions/runners/downloads"], - listRunnerApplicationsForRepo: [ - "GET /repos/{owner}/{repo}/actions/runners/downloads" - ], - listSelectedReposForOrgSecret: [ - "GET /orgs/{org}/actions/secrets/{secret_name}/repositories" - ], - listSelectedReposForOrgVariable: [ - "GET /orgs/{org}/actions/variables/{name}/repositories" - ], - listSelectedRepositoriesEnabledGithubActionsOrganization: [ - "GET /orgs/{org}/actions/permissions/repositories" - ], - listSelfHostedRunnersForOrg: ["GET /orgs/{org}/actions/runners"], - listSelfHostedRunnersForRepo: ["GET /repos/{owner}/{repo}/actions/runners"], - listWorkflowRunArtifacts: [ - "GET /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts" - ], - listWorkflowRuns: [ - "GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs" - ], - listWorkflowRunsForRepo: ["GET /repos/{owner}/{repo}/actions/runs"], - reRunJobForWorkflowRun: [ - "POST /repos/{owner}/{repo}/actions/jobs/{job_id}/rerun" - ], - reRunWorkflow: ["POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun"], - reRunWorkflowFailedJobs: [ - "POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun-failed-jobs" - ], - removeAllCustomLabelsFromSelfHostedRunnerForOrg: [ - "DELETE /orgs/{org}/actions/runners/{runner_id}/labels" - ], - removeAllCustomLabelsFromSelfHostedRunnerForRepo: [ - "DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}/labels" - ], - removeCustomLabelFromSelfHostedRunnerForOrg: [ - "DELETE /orgs/{org}/actions/runners/{runner_id}/labels/{name}" - ], - removeCustomLabelFromSelfHostedRunnerForRepo: [ - "DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}/labels/{name}" - ], - removeSelectedRepoFromOrgSecret: [ - "DELETE /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}" - ], - removeSelectedRepoFromOrgVariable: [ - "DELETE /orgs/{org}/actions/variables/{name}/repositories/{repository_id}" - ], - reviewCustomGatesForRun: [ - "POST /repos/{owner}/{repo}/actions/runs/{run_id}/deployment_protection_rule" - ], - reviewPendingDeploymentsForRun: [ - "POST /repos/{owner}/{repo}/actions/runs/{run_id}/pending_deployments" - ], - setAllowedActionsOrganization: [ - "PUT /orgs/{org}/actions/permissions/selected-actions" - ], - setAllowedActionsRepository: [ - "PUT /repos/{owner}/{repo}/actions/permissions/selected-actions" - ], - setCustomLabelsForSelfHostedRunnerForOrg: [ - "PUT /orgs/{org}/actions/runners/{runner_id}/labels" - ], - setCustomLabelsForSelfHostedRunnerForRepo: [ - "PUT /repos/{owner}/{repo}/actions/runners/{runner_id}/labels" - ], - setCustomOidcSubClaimForRepo: [ - "PUT /repos/{owner}/{repo}/actions/oidc/customization/sub" - ], - setGithubActionsDefaultWorkflowPermissionsOrganization: [ - "PUT /orgs/{org}/actions/permissions/workflow" - ], - setGithubActionsDefaultWorkflowPermissionsRepository: [ - "PUT /repos/{owner}/{repo}/actions/permissions/workflow" - ], - setGithubActionsPermissionsOrganization: [ - "PUT /orgs/{org}/actions/permissions" - ], - setGithubActionsPermissionsRepository: [ - "PUT /repos/{owner}/{repo}/actions/permissions" - ], - setSelectedReposForOrgSecret: [ - "PUT /orgs/{org}/actions/secrets/{secret_name}/repositories" - ], - setSelectedReposForOrgVariable: [ - "PUT /orgs/{org}/actions/variables/{name}/repositories" - ], - setSelectedRepositoriesEnabledGithubActionsOrganization: [ - "PUT /orgs/{org}/actions/permissions/repositories" - ], - setWorkflowAccessToRepository: [ - "PUT /repos/{owner}/{repo}/actions/permissions/access" - ], - updateEnvironmentVariable: [ - "PATCH /repositories/{repository_id}/environments/{environment_name}/variables/{name}" - ], - updateOrgVariable: ["PATCH /orgs/{org}/actions/variables/{name}"], - updateRepoVariable: [ - "PATCH /repos/{owner}/{repo}/actions/variables/{name}" - ] - }, - activity: { - checkRepoIsStarredByAuthenticatedUser: ["GET /user/starred/{owner}/{repo}"], - deleteRepoSubscription: ["DELETE /repos/{owner}/{repo}/subscription"], - deleteThreadSubscription: [ - "DELETE /notifications/threads/{thread_id}/subscription" - ], - getFeeds: ["GET /feeds"], - getRepoSubscription: ["GET /repos/{owner}/{repo}/subscription"], - getThread: ["GET /notifications/threads/{thread_id}"], - getThreadSubscriptionForAuthenticatedUser: [ - "GET /notifications/threads/{thread_id}/subscription" - ], - listEventsForAuthenticatedUser: ["GET /users/{username}/events"], - listNotificationsForAuthenticatedUser: ["GET /notifications"], - listOrgEventsForAuthenticatedUser: [ - "GET /users/{username}/events/orgs/{org}" - ], - listPublicEvents: ["GET /events"], - listPublicEventsForRepoNetwork: ["GET /networks/{owner}/{repo}/events"], - listPublicEventsForUser: ["GET /users/{username}/events/public"], - listPublicOrgEvents: ["GET /orgs/{org}/events"], - listReceivedEventsForUser: ["GET /users/{username}/received_events"], - listReceivedPublicEventsForUser: [ - "GET /users/{username}/received_events/public" - ], - listRepoEvents: ["GET /repos/{owner}/{repo}/events"], - listRepoNotificationsForAuthenticatedUser: [ - "GET /repos/{owner}/{repo}/notifications" - ], - listReposStarredByAuthenticatedUser: ["GET /user/starred"], - listReposStarredByUser: ["GET /users/{username}/starred"], - listReposWatchedByUser: ["GET /users/{username}/subscriptions"], - listStargazersForRepo: ["GET /repos/{owner}/{repo}/stargazers"], - listWatchedReposForAuthenticatedUser: ["GET /user/subscriptions"], - listWatchersForRepo: ["GET /repos/{owner}/{repo}/subscribers"], - markNotificationsAsRead: ["PUT /notifications"], - markRepoNotificationsAsRead: ["PUT /repos/{owner}/{repo}/notifications"], - markThreadAsDone: ["DELETE /notifications/threads/{thread_id}"], - markThreadAsRead: ["PATCH /notifications/threads/{thread_id}"], - setRepoSubscription: ["PUT /repos/{owner}/{repo}/subscription"], - setThreadSubscription: [ - "PUT /notifications/threads/{thread_id}/subscription" - ], - starRepoForAuthenticatedUser: ["PUT /user/starred/{owner}/{repo}"], - unstarRepoForAuthenticatedUser: ["DELETE /user/starred/{owner}/{repo}"] - }, - apps: { - addRepoToInstallation: [ - "PUT /user/installations/{installation_id}/repositories/{repository_id}", - {}, - { renamed: ["apps", "addRepoToInstallationForAuthenticatedUser"] } - ], - addRepoToInstallationForAuthenticatedUser: [ - "PUT /user/installations/{installation_id}/repositories/{repository_id}" - ], - checkToken: ["POST /applications/{client_id}/token"], - createFromManifest: ["POST /app-manifests/{code}/conversions"], - createInstallationAccessToken: [ - "POST /app/installations/{installation_id}/access_tokens" - ], - deleteAuthorization: ["DELETE /applications/{client_id}/grant"], - deleteInstallation: ["DELETE /app/installations/{installation_id}"], - deleteToken: ["DELETE /applications/{client_id}/token"], - getAuthenticated: ["GET /app"], - getBySlug: ["GET /apps/{app_slug}"], - getInstallation: ["GET /app/installations/{installation_id}"], - getOrgInstallation: ["GET /orgs/{org}/installation"], - getRepoInstallation: ["GET /repos/{owner}/{repo}/installation"], - getSubscriptionPlanForAccount: [ - "GET /marketplace_listing/accounts/{account_id}" - ], - getSubscriptionPlanForAccountStubbed: [ - "GET /marketplace_listing/stubbed/accounts/{account_id}" - ], - getUserInstallation: ["GET /users/{username}/installation"], - getWebhookConfigForApp: ["GET /app/hook/config"], - getWebhookDelivery: ["GET /app/hook/deliveries/{delivery_id}"], - listAccountsForPlan: ["GET /marketplace_listing/plans/{plan_id}/accounts"], - listAccountsForPlanStubbed: [ - "GET /marketplace_listing/stubbed/plans/{plan_id}/accounts" - ], - listInstallationReposForAuthenticatedUser: [ - "GET /user/installations/{installation_id}/repositories" - ], - listInstallationRequestsForAuthenticatedApp: [ - "GET /app/installation-requests" - ], - listInstallations: ["GET /app/installations"], - listInstallationsForAuthenticatedUser: ["GET /user/installations"], - listPlans: ["GET /marketplace_listing/plans"], - listPlansStubbed: ["GET /marketplace_listing/stubbed/plans"], - listReposAccessibleToInstallation: ["GET /installation/repositories"], - listSubscriptionsForAuthenticatedUser: ["GET /user/marketplace_purchases"], - listSubscriptionsForAuthenticatedUserStubbed: [ - "GET /user/marketplace_purchases/stubbed" - ], - listWebhookDeliveries: ["GET /app/hook/deliveries"], - redeliverWebhookDelivery: [ - "POST /app/hook/deliveries/{delivery_id}/attempts" - ], - removeRepoFromInstallation: [ - "DELETE /user/installations/{installation_id}/repositories/{repository_id}", - {}, - { renamed: ["apps", "removeRepoFromInstallationForAuthenticatedUser"] } - ], - removeRepoFromInstallationForAuthenticatedUser: [ - "DELETE /user/installations/{installation_id}/repositories/{repository_id}" - ], - resetToken: ["PATCH /applications/{client_id}/token"], - revokeInstallationAccessToken: ["DELETE /installation/token"], - scopeToken: ["POST /applications/{client_id}/token/scoped"], - suspendInstallation: ["PUT /app/installations/{installation_id}/suspended"], - unsuspendInstallation: [ - "DELETE /app/installations/{installation_id}/suspended" - ], - updateWebhookConfigForApp: ["PATCH /app/hook/config"] - }, - billing: { - getGithubActionsBillingOrg: ["GET /orgs/{org}/settings/billing/actions"], - getGithubActionsBillingUser: [ - "GET /users/{username}/settings/billing/actions" - ], - getGithubPackagesBillingOrg: ["GET /orgs/{org}/settings/billing/packages"], - getGithubPackagesBillingUser: [ - "GET /users/{username}/settings/billing/packages" - ], - getSharedStorageBillingOrg: [ - "GET /orgs/{org}/settings/billing/shared-storage" - ], - getSharedStorageBillingUser: [ - "GET /users/{username}/settings/billing/shared-storage" - ] - }, - checks: { - create: ["POST /repos/{owner}/{repo}/check-runs"], - createSuite: ["POST /repos/{owner}/{repo}/check-suites"], - get: ["GET /repos/{owner}/{repo}/check-runs/{check_run_id}"], - getSuite: ["GET /repos/{owner}/{repo}/check-suites/{check_suite_id}"], - listAnnotations: [ - "GET /repos/{owner}/{repo}/check-runs/{check_run_id}/annotations" - ], - listForRef: ["GET /repos/{owner}/{repo}/commits/{ref}/check-runs"], - listForSuite: [ - "GET /repos/{owner}/{repo}/check-suites/{check_suite_id}/check-runs" - ], - listSuitesForRef: ["GET /repos/{owner}/{repo}/commits/{ref}/check-suites"], - rerequestRun: [ - "POST /repos/{owner}/{repo}/check-runs/{check_run_id}/rerequest" - ], - rerequestSuite: [ - "POST /repos/{owner}/{repo}/check-suites/{check_suite_id}/rerequest" - ], - setSuitesPreferences: [ - "PATCH /repos/{owner}/{repo}/check-suites/preferences" - ], - update: ["PATCH /repos/{owner}/{repo}/check-runs/{check_run_id}"] - }, - codeScanning: { - deleteAnalysis: [ - "DELETE /repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}{?confirm_delete}" - ], - getAlert: [ - "GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}", - {}, - { renamedParameters: { alert_id: "alert_number" } } - ], - getAnalysis: [ - "GET /repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}" - ], - getCodeqlDatabase: [ - "GET /repos/{owner}/{repo}/code-scanning/codeql/databases/{language}" - ], - getDefaultSetup: ["GET /repos/{owner}/{repo}/code-scanning/default-setup"], - getSarif: ["GET /repos/{owner}/{repo}/code-scanning/sarifs/{sarif_id}"], - listAlertInstances: [ - "GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances" - ], - listAlertsForOrg: ["GET /orgs/{org}/code-scanning/alerts"], - listAlertsForRepo: ["GET /repos/{owner}/{repo}/code-scanning/alerts"], - listAlertsInstances: [ - "GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances", - {}, - { renamed: ["codeScanning", "listAlertInstances"] } - ], - listCodeqlDatabases: [ - "GET /repos/{owner}/{repo}/code-scanning/codeql/databases" - ], - listRecentAnalyses: ["GET /repos/{owner}/{repo}/code-scanning/analyses"], - updateAlert: [ - "PATCH /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}" - ], - updateDefaultSetup: [ - "PATCH /repos/{owner}/{repo}/code-scanning/default-setup" - ], - uploadSarif: ["POST /repos/{owner}/{repo}/code-scanning/sarifs"] - }, - codesOfConduct: { - getAllCodesOfConduct: ["GET /codes_of_conduct"], - getConductCode: ["GET /codes_of_conduct/{key}"] - }, - codespaces: { - addRepositoryForSecretForAuthenticatedUser: [ - "PUT /user/codespaces/secrets/{secret_name}/repositories/{repository_id}" - ], - addSelectedRepoToOrgSecret: [ - "PUT /orgs/{org}/codespaces/secrets/{secret_name}/repositories/{repository_id}" - ], - checkPermissionsForDevcontainer: [ - "GET /repos/{owner}/{repo}/codespaces/permissions_check" - ], - codespaceMachinesForAuthenticatedUser: [ - "GET /user/codespaces/{codespace_name}/machines" - ], - createForAuthenticatedUser: ["POST /user/codespaces"], - createOrUpdateOrgSecret: [ - "PUT /orgs/{org}/codespaces/secrets/{secret_name}" - ], - createOrUpdateRepoSecret: [ - "PUT /repos/{owner}/{repo}/codespaces/secrets/{secret_name}" - ], - createOrUpdateSecretForAuthenticatedUser: [ - "PUT /user/codespaces/secrets/{secret_name}" - ], - createWithPrForAuthenticatedUser: [ - "POST /repos/{owner}/{repo}/pulls/{pull_number}/codespaces" - ], - createWithRepoForAuthenticatedUser: [ - "POST /repos/{owner}/{repo}/codespaces" - ], - deleteForAuthenticatedUser: ["DELETE /user/codespaces/{codespace_name}"], - deleteFromOrganization: [ - "DELETE /orgs/{org}/members/{username}/codespaces/{codespace_name}" - ], - deleteOrgSecret: ["DELETE /orgs/{org}/codespaces/secrets/{secret_name}"], - deleteRepoSecret: [ - "DELETE /repos/{owner}/{repo}/codespaces/secrets/{secret_name}" - ], - deleteSecretForAuthenticatedUser: [ - "DELETE /user/codespaces/secrets/{secret_name}" - ], - exportForAuthenticatedUser: [ - "POST /user/codespaces/{codespace_name}/exports" - ], - getCodespacesForUserInOrg: [ - "GET /orgs/{org}/members/{username}/codespaces" - ], - getExportDetailsForAuthenticatedUser: [ - "GET /user/codespaces/{codespace_name}/exports/{export_id}" - ], - getForAuthenticatedUser: ["GET /user/codespaces/{codespace_name}"], - getOrgPublicKey: ["GET /orgs/{org}/codespaces/secrets/public-key"], - getOrgSecret: ["GET /orgs/{org}/codespaces/secrets/{secret_name}"], - getPublicKeyForAuthenticatedUser: [ - "GET /user/codespaces/secrets/public-key" - ], - getRepoPublicKey: [ - "GET /repos/{owner}/{repo}/codespaces/secrets/public-key" - ], - getRepoSecret: [ - "GET /repos/{owner}/{repo}/codespaces/secrets/{secret_name}" - ], - getSecretForAuthenticatedUser: [ - "GET /user/codespaces/secrets/{secret_name}" - ], - listDevcontainersInRepositoryForAuthenticatedUser: [ - "GET /repos/{owner}/{repo}/codespaces/devcontainers" - ], - listForAuthenticatedUser: ["GET /user/codespaces"], - listInOrganization: [ - "GET /orgs/{org}/codespaces", - {}, - { renamedParameters: { org_id: "org" } } - ], - listInRepositoryForAuthenticatedUser: [ - "GET /repos/{owner}/{repo}/codespaces" - ], - listOrgSecrets: ["GET /orgs/{org}/codespaces/secrets"], - listRepoSecrets: ["GET /repos/{owner}/{repo}/codespaces/secrets"], - listRepositoriesForSecretForAuthenticatedUser: [ - "GET /user/codespaces/secrets/{secret_name}/repositories" - ], - listSecretsForAuthenticatedUser: ["GET /user/codespaces/secrets"], - listSelectedReposForOrgSecret: [ - "GET /orgs/{org}/codespaces/secrets/{secret_name}/repositories" - ], - preFlightWithRepoForAuthenticatedUser: [ - "GET /repos/{owner}/{repo}/codespaces/new" - ], - publishForAuthenticatedUser: [ - "POST /user/codespaces/{codespace_name}/publish" - ], - removeRepositoryForSecretForAuthenticatedUser: [ - "DELETE /user/codespaces/secrets/{secret_name}/repositories/{repository_id}" - ], - removeSelectedRepoFromOrgSecret: [ - "DELETE /orgs/{org}/codespaces/secrets/{secret_name}/repositories/{repository_id}" - ], - repoMachinesForAuthenticatedUser: [ - "GET /repos/{owner}/{repo}/codespaces/machines" - ], - setRepositoriesForSecretForAuthenticatedUser: [ - "PUT /user/codespaces/secrets/{secret_name}/repositories" - ], - setSelectedReposForOrgSecret: [ - "PUT /orgs/{org}/codespaces/secrets/{secret_name}/repositories" - ], - startForAuthenticatedUser: ["POST /user/codespaces/{codespace_name}/start"], - stopForAuthenticatedUser: ["POST /user/codespaces/{codespace_name}/stop"], - stopInOrganization: [ - "POST /orgs/{org}/members/{username}/codespaces/{codespace_name}/stop" - ], - updateForAuthenticatedUser: ["PATCH /user/codespaces/{codespace_name}"] - }, - copilot: { - addCopilotSeatsForTeams: [ - "POST /orgs/{org}/copilot/billing/selected_teams" - ], - addCopilotSeatsForUsers: [ - "POST /orgs/{org}/copilot/billing/selected_users" - ], - cancelCopilotSeatAssignmentForTeams: [ - "DELETE /orgs/{org}/copilot/billing/selected_teams" - ], - cancelCopilotSeatAssignmentForUsers: [ - "DELETE /orgs/{org}/copilot/billing/selected_users" - ], - getCopilotOrganizationDetails: ["GET /orgs/{org}/copilot/billing"], - getCopilotSeatDetailsForUser: [ - "GET /orgs/{org}/members/{username}/copilot" - ], - listCopilotSeats: ["GET /orgs/{org}/copilot/billing/seats"] - }, - dependabot: { - addSelectedRepoToOrgSecret: [ - "PUT /orgs/{org}/dependabot/secrets/{secret_name}/repositories/{repository_id}" - ], - createOrUpdateOrgSecret: [ - "PUT /orgs/{org}/dependabot/secrets/{secret_name}" - ], - createOrUpdateRepoSecret: [ - "PUT /repos/{owner}/{repo}/dependabot/secrets/{secret_name}" - ], - deleteOrgSecret: ["DELETE /orgs/{org}/dependabot/secrets/{secret_name}"], - deleteRepoSecret: [ - "DELETE /repos/{owner}/{repo}/dependabot/secrets/{secret_name}" - ], - getAlert: ["GET /repos/{owner}/{repo}/dependabot/alerts/{alert_number}"], - getOrgPublicKey: ["GET /orgs/{org}/dependabot/secrets/public-key"], - getOrgSecret: ["GET /orgs/{org}/dependabot/secrets/{secret_name}"], - getRepoPublicKey: [ - "GET /repos/{owner}/{repo}/dependabot/secrets/public-key" - ], - getRepoSecret: [ - "GET /repos/{owner}/{repo}/dependabot/secrets/{secret_name}" - ], - listAlertsForEnterprise: [ - "GET /enterprises/{enterprise}/dependabot/alerts" - ], - listAlertsForOrg: ["GET /orgs/{org}/dependabot/alerts"], - listAlertsForRepo: ["GET /repos/{owner}/{repo}/dependabot/alerts"], - listOrgSecrets: ["GET /orgs/{org}/dependabot/secrets"], - listRepoSecrets: ["GET /repos/{owner}/{repo}/dependabot/secrets"], - listSelectedReposForOrgSecret: [ - "GET /orgs/{org}/dependabot/secrets/{secret_name}/repositories" - ], - removeSelectedRepoFromOrgSecret: [ - "DELETE /orgs/{org}/dependabot/secrets/{secret_name}/repositories/{repository_id}" - ], - setSelectedReposForOrgSecret: [ - "PUT /orgs/{org}/dependabot/secrets/{secret_name}/repositories" - ], - updateAlert: [ - "PATCH /repos/{owner}/{repo}/dependabot/alerts/{alert_number}" - ] - }, - dependencyGraph: { - createRepositorySnapshot: [ - "POST /repos/{owner}/{repo}/dependency-graph/snapshots" - ], - diffRange: [ - "GET /repos/{owner}/{repo}/dependency-graph/compare/{basehead}" - ], - exportSbom: ["GET /repos/{owner}/{repo}/dependency-graph/sbom"] - }, - emojis: { get: ["GET /emojis"] }, - gists: { - checkIsStarred: ["GET /gists/{gist_id}/star"], - create: ["POST /gists"], - createComment: ["POST /gists/{gist_id}/comments"], - delete: ["DELETE /gists/{gist_id}"], - deleteComment: ["DELETE /gists/{gist_id}/comments/{comment_id}"], - fork: ["POST /gists/{gist_id}/forks"], - get: ["GET /gists/{gist_id}"], - getComment: ["GET /gists/{gist_id}/comments/{comment_id}"], - getRevision: ["GET /gists/{gist_id}/{sha}"], - list: ["GET /gists"], - listComments: ["GET /gists/{gist_id}/comments"], - listCommits: ["GET /gists/{gist_id}/commits"], - listForUser: ["GET /users/{username}/gists"], - listForks: ["GET /gists/{gist_id}/forks"], - listPublic: ["GET /gists/public"], - listStarred: ["GET /gists/starred"], - star: ["PUT /gists/{gist_id}/star"], - unstar: ["DELETE /gists/{gist_id}/star"], - update: ["PATCH /gists/{gist_id}"], - updateComment: ["PATCH /gists/{gist_id}/comments/{comment_id}"] - }, - git: { - createBlob: ["POST /repos/{owner}/{repo}/git/blobs"], - createCommit: ["POST /repos/{owner}/{repo}/git/commits"], - createRef: ["POST /repos/{owner}/{repo}/git/refs"], - createTag: ["POST /repos/{owner}/{repo}/git/tags"], - createTree: ["POST /repos/{owner}/{repo}/git/trees"], - deleteRef: ["DELETE /repos/{owner}/{repo}/git/refs/{ref}"], - getBlob: ["GET /repos/{owner}/{repo}/git/blobs/{file_sha}"], - getCommit: ["GET /repos/{owner}/{repo}/git/commits/{commit_sha}"], - getRef: ["GET /repos/{owner}/{repo}/git/ref/{ref}"], - getTag: ["GET /repos/{owner}/{repo}/git/tags/{tag_sha}"], - getTree: ["GET /repos/{owner}/{repo}/git/trees/{tree_sha}"], - listMatchingRefs: ["GET /repos/{owner}/{repo}/git/matching-refs/{ref}"], - updateRef: ["PATCH /repos/{owner}/{repo}/git/refs/{ref}"] - }, - gitignore: { - getAllTemplates: ["GET /gitignore/templates"], - getTemplate: ["GET /gitignore/templates/{name}"] - }, - interactions: { - getRestrictionsForAuthenticatedUser: ["GET /user/interaction-limits"], - getRestrictionsForOrg: ["GET /orgs/{org}/interaction-limits"], - getRestrictionsForRepo: ["GET /repos/{owner}/{repo}/interaction-limits"], - getRestrictionsForYourPublicRepos: [ - "GET /user/interaction-limits", - {}, - { renamed: ["interactions", "getRestrictionsForAuthenticatedUser"] } - ], - removeRestrictionsForAuthenticatedUser: ["DELETE /user/interaction-limits"], - removeRestrictionsForOrg: ["DELETE /orgs/{org}/interaction-limits"], - removeRestrictionsForRepo: [ - "DELETE /repos/{owner}/{repo}/interaction-limits" - ], - removeRestrictionsForYourPublicRepos: [ - "DELETE /user/interaction-limits", - {}, - { renamed: ["interactions", "removeRestrictionsForAuthenticatedUser"] } - ], - setRestrictionsForAuthenticatedUser: ["PUT /user/interaction-limits"], - setRestrictionsForOrg: ["PUT /orgs/{org}/interaction-limits"], - setRestrictionsForRepo: ["PUT /repos/{owner}/{repo}/interaction-limits"], - setRestrictionsForYourPublicRepos: [ - "PUT /user/interaction-limits", - {}, - { renamed: ["interactions", "setRestrictionsForAuthenticatedUser"] } - ] - }, - issues: { - addAssignees: [ - "POST /repos/{owner}/{repo}/issues/{issue_number}/assignees" - ], - addLabels: ["POST /repos/{owner}/{repo}/issues/{issue_number}/labels"], - checkUserCanBeAssigned: ["GET /repos/{owner}/{repo}/assignees/{assignee}"], - checkUserCanBeAssignedToIssue: [ - "GET /repos/{owner}/{repo}/issues/{issue_number}/assignees/{assignee}" - ], - create: ["POST /repos/{owner}/{repo}/issues"], - createComment: [ - "POST /repos/{owner}/{repo}/issues/{issue_number}/comments" - ], - createLabel: ["POST /repos/{owner}/{repo}/labels"], - createMilestone: ["POST /repos/{owner}/{repo}/milestones"], - deleteComment: [ - "DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}" - ], - deleteLabel: ["DELETE /repos/{owner}/{repo}/labels/{name}"], - deleteMilestone: [ - "DELETE /repos/{owner}/{repo}/milestones/{milestone_number}" - ], - get: ["GET /repos/{owner}/{repo}/issues/{issue_number}"], - getComment: ["GET /repos/{owner}/{repo}/issues/comments/{comment_id}"], - getEvent: ["GET /repos/{owner}/{repo}/issues/events/{event_id}"], - getLabel: ["GET /repos/{owner}/{repo}/labels/{name}"], - getMilestone: ["GET /repos/{owner}/{repo}/milestones/{milestone_number}"], - list: ["GET /issues"], - listAssignees: ["GET /repos/{owner}/{repo}/assignees"], - listComments: ["GET /repos/{owner}/{repo}/issues/{issue_number}/comments"], - listCommentsForRepo: ["GET /repos/{owner}/{repo}/issues/comments"], - listEvents: ["GET /repos/{owner}/{repo}/issues/{issue_number}/events"], - listEventsForRepo: ["GET /repos/{owner}/{repo}/issues/events"], - listEventsForTimeline: [ - "GET /repos/{owner}/{repo}/issues/{issue_number}/timeline" - ], - listForAuthenticatedUser: ["GET /user/issues"], - listForOrg: ["GET /orgs/{org}/issues"], - listForRepo: ["GET /repos/{owner}/{repo}/issues"], - listLabelsForMilestone: [ - "GET /repos/{owner}/{repo}/milestones/{milestone_number}/labels" - ], - listLabelsForRepo: ["GET /repos/{owner}/{repo}/labels"], - listLabelsOnIssue: [ - "GET /repos/{owner}/{repo}/issues/{issue_number}/labels" - ], - listMilestones: ["GET /repos/{owner}/{repo}/milestones"], - lock: ["PUT /repos/{owner}/{repo}/issues/{issue_number}/lock"], - removeAllLabels: [ - "DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels" - ], - removeAssignees: [ - "DELETE /repos/{owner}/{repo}/issues/{issue_number}/assignees" - ], - removeLabel: [ - "DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels/{name}" - ], - setLabels: ["PUT /repos/{owner}/{repo}/issues/{issue_number}/labels"], - unlock: ["DELETE /repos/{owner}/{repo}/issues/{issue_number}/lock"], - update: ["PATCH /repos/{owner}/{repo}/issues/{issue_number}"], - updateComment: ["PATCH /repos/{owner}/{repo}/issues/comments/{comment_id}"], - updateLabel: ["PATCH /repos/{owner}/{repo}/labels/{name}"], - updateMilestone: [ - "PATCH /repos/{owner}/{repo}/milestones/{milestone_number}" - ] - }, - licenses: { - get: ["GET /licenses/{license}"], - getAllCommonlyUsed: ["GET /licenses"], - getForRepo: ["GET /repos/{owner}/{repo}/license"] - }, - markdown: { - render: ["POST /markdown"], - renderRaw: [ - "POST /markdown/raw", - { headers: { "content-type": "text/plain; charset=utf-8" } } - ] - }, - meta: { - get: ["GET /meta"], - getAllVersions: ["GET /versions"], - getOctocat: ["GET /octocat"], - getZen: ["GET /zen"], - root: ["GET /"] - }, - migrations: { - cancelImport: [ - "DELETE /repos/{owner}/{repo}/import", - {}, - { - deprecated: "octokit.rest.migrations.cancelImport() is deprecated, see https://docs.github.com/rest/migrations/source-imports#cancel-an-import" - } - ], - deleteArchiveForAuthenticatedUser: [ - "DELETE /user/migrations/{migration_id}/archive" - ], - deleteArchiveForOrg: [ - "DELETE /orgs/{org}/migrations/{migration_id}/archive" - ], - downloadArchiveForOrg: [ - "GET /orgs/{org}/migrations/{migration_id}/archive" - ], - getArchiveForAuthenticatedUser: [ - "GET /user/migrations/{migration_id}/archive" - ], - getCommitAuthors: [ - "GET /repos/{owner}/{repo}/import/authors", - {}, - { - deprecated: "octokit.rest.migrations.getCommitAuthors() is deprecated, see https://docs.github.com/rest/migrations/source-imports#get-commit-authors" - } - ], - getImportStatus: [ - "GET /repos/{owner}/{repo}/import", - {}, - { - deprecated: "octokit.rest.migrations.getImportStatus() is deprecated, see https://docs.github.com/rest/migrations/source-imports#get-an-import-status" - } - ], - getLargeFiles: [ - "GET /repos/{owner}/{repo}/import/large_files", - {}, - { - deprecated: "octokit.rest.migrations.getLargeFiles() is deprecated, see https://docs.github.com/rest/migrations/source-imports#get-large-files" - } - ], - getStatusForAuthenticatedUser: ["GET /user/migrations/{migration_id}"], - getStatusForOrg: ["GET /orgs/{org}/migrations/{migration_id}"], - listForAuthenticatedUser: ["GET /user/migrations"], - listForOrg: ["GET /orgs/{org}/migrations"], - listReposForAuthenticatedUser: [ - "GET /user/migrations/{migration_id}/repositories" - ], - listReposForOrg: ["GET /orgs/{org}/migrations/{migration_id}/repositories"], - listReposForUser: [ - "GET /user/migrations/{migration_id}/repositories", - {}, - { renamed: ["migrations", "listReposForAuthenticatedUser"] } - ], - mapCommitAuthor: [ - "PATCH /repos/{owner}/{repo}/import/authors/{author_id}", - {}, - { - deprecated: "octokit.rest.migrations.mapCommitAuthor() is deprecated, see https://docs.github.com/rest/migrations/source-imports#map-a-commit-author" - } - ], - setLfsPreference: [ - "PATCH /repos/{owner}/{repo}/import/lfs", - {}, - { - deprecated: "octokit.rest.migrations.setLfsPreference() is deprecated, see https://docs.github.com/rest/migrations/source-imports#update-git-lfs-preference" - } - ], - startForAuthenticatedUser: ["POST /user/migrations"], - startForOrg: ["POST /orgs/{org}/migrations"], - startImport: [ - "PUT /repos/{owner}/{repo}/import", - {}, - { - deprecated: "octokit.rest.migrations.startImport() is deprecated, see https://docs.github.com/rest/migrations/source-imports#start-an-import" - } - ], - unlockRepoForAuthenticatedUser: [ - "DELETE /user/migrations/{migration_id}/repos/{repo_name}/lock" - ], - unlockRepoForOrg: [ - "DELETE /orgs/{org}/migrations/{migration_id}/repos/{repo_name}/lock" - ], - updateImport: [ - "PATCH /repos/{owner}/{repo}/import", - {}, - { - deprecated: "octokit.rest.migrations.updateImport() is deprecated, see https://docs.github.com/rest/migrations/source-imports#update-an-import" - } - ] - }, - oidc: { - getOidcCustomSubTemplateForOrg: [ - "GET /orgs/{org}/actions/oidc/customization/sub" - ], - updateOidcCustomSubTemplateForOrg: [ - "PUT /orgs/{org}/actions/oidc/customization/sub" - ] - }, - orgs: { - addSecurityManagerTeam: [ - "PUT /orgs/{org}/security-managers/teams/{team_slug}" - ], - assignTeamToOrgRole: [ - "PUT /orgs/{org}/organization-roles/teams/{team_slug}/{role_id}" - ], - assignUserToOrgRole: [ - "PUT /orgs/{org}/organization-roles/users/{username}/{role_id}" - ], - blockUser: ["PUT /orgs/{org}/blocks/{username}"], - cancelInvitation: ["DELETE /orgs/{org}/invitations/{invitation_id}"], - checkBlockedUser: ["GET /orgs/{org}/blocks/{username}"], - checkMembershipForUser: ["GET /orgs/{org}/members/{username}"], - checkPublicMembershipForUser: ["GET /orgs/{org}/public_members/{username}"], - convertMemberToOutsideCollaborator: [ - "PUT /orgs/{org}/outside_collaborators/{username}" - ], - createCustomOrganizationRole: ["POST /orgs/{org}/organization-roles"], - createInvitation: ["POST /orgs/{org}/invitations"], - createOrUpdateCustomProperties: ["PATCH /orgs/{org}/properties/schema"], - createOrUpdateCustomPropertiesValuesForRepos: [ - "PATCH /orgs/{org}/properties/values" - ], - createOrUpdateCustomProperty: [ - "PUT /orgs/{org}/properties/schema/{custom_property_name}" - ], - createWebhook: ["POST /orgs/{org}/hooks"], - delete: ["DELETE /orgs/{org}"], - deleteCustomOrganizationRole: [ - "DELETE /orgs/{org}/organization-roles/{role_id}" - ], - deleteWebhook: ["DELETE /orgs/{org}/hooks/{hook_id}"], - enableOrDisableSecurityProductOnAllOrgRepos: [ - "POST /orgs/{org}/{security_product}/{enablement}" - ], - get: ["GET /orgs/{org}"], - getAllCustomProperties: ["GET /orgs/{org}/properties/schema"], - getCustomProperty: [ - "GET /orgs/{org}/properties/schema/{custom_property_name}" - ], - getMembershipForAuthenticatedUser: ["GET /user/memberships/orgs/{org}"], - getMembershipForUser: ["GET /orgs/{org}/memberships/{username}"], - getOrgRole: ["GET /orgs/{org}/organization-roles/{role_id}"], - getWebhook: ["GET /orgs/{org}/hooks/{hook_id}"], - getWebhookConfigForOrg: ["GET /orgs/{org}/hooks/{hook_id}/config"], - getWebhookDelivery: [ - "GET /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}" - ], - list: ["GET /organizations"], - listAppInstallations: ["GET /orgs/{org}/installations"], - listBlockedUsers: ["GET /orgs/{org}/blocks"], - listCustomPropertiesValuesForRepos: ["GET /orgs/{org}/properties/values"], - listFailedInvitations: ["GET /orgs/{org}/failed_invitations"], - listForAuthenticatedUser: ["GET /user/orgs"], - listForUser: ["GET /users/{username}/orgs"], - listInvitationTeams: ["GET /orgs/{org}/invitations/{invitation_id}/teams"], - listMembers: ["GET /orgs/{org}/members"], - listMembershipsForAuthenticatedUser: ["GET /user/memberships/orgs"], - listOrgRoleTeams: ["GET /orgs/{org}/organization-roles/{role_id}/teams"], - listOrgRoleUsers: ["GET /orgs/{org}/organization-roles/{role_id}/users"], - listOrgRoles: ["GET /orgs/{org}/organization-roles"], - listOrganizationFineGrainedPermissions: [ - "GET /orgs/{org}/organization-fine-grained-permissions" - ], - listOutsideCollaborators: ["GET /orgs/{org}/outside_collaborators"], - listPatGrantRepositories: [ - "GET /orgs/{org}/personal-access-tokens/{pat_id}/repositories" - ], - listPatGrantRequestRepositories: [ - "GET /orgs/{org}/personal-access-token-requests/{pat_request_id}/repositories" - ], - listPatGrantRequests: ["GET /orgs/{org}/personal-access-token-requests"], - listPatGrants: ["GET /orgs/{org}/personal-access-tokens"], - listPendingInvitations: ["GET /orgs/{org}/invitations"], - listPublicMembers: ["GET /orgs/{org}/public_members"], - listSecurityManagerTeams: ["GET /orgs/{org}/security-managers"], - listWebhookDeliveries: ["GET /orgs/{org}/hooks/{hook_id}/deliveries"], - listWebhooks: ["GET /orgs/{org}/hooks"], - patchCustomOrganizationRole: [ - "PATCH /orgs/{org}/organization-roles/{role_id}" - ], - pingWebhook: ["POST /orgs/{org}/hooks/{hook_id}/pings"], - redeliverWebhookDelivery: [ - "POST /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}/attempts" - ], - removeCustomProperty: [ - "DELETE /orgs/{org}/properties/schema/{custom_property_name}" - ], - removeMember: ["DELETE /orgs/{org}/members/{username}"], - removeMembershipForUser: ["DELETE /orgs/{org}/memberships/{username}"], - removeOutsideCollaborator: [ - "DELETE /orgs/{org}/outside_collaborators/{username}" - ], - removePublicMembershipForAuthenticatedUser: [ - "DELETE /orgs/{org}/public_members/{username}" - ], - removeSecurityManagerTeam: [ - "DELETE /orgs/{org}/security-managers/teams/{team_slug}" - ], - reviewPatGrantRequest: [ - "POST /orgs/{org}/personal-access-token-requests/{pat_request_id}" - ], - reviewPatGrantRequestsInBulk: [ - "POST /orgs/{org}/personal-access-token-requests" - ], - revokeAllOrgRolesTeam: [ - "DELETE /orgs/{org}/organization-roles/teams/{team_slug}" - ], - revokeAllOrgRolesUser: [ - "DELETE /orgs/{org}/organization-roles/users/{username}" - ], - revokeOrgRoleTeam: [ - "DELETE /orgs/{org}/organization-roles/teams/{team_slug}/{role_id}" - ], - revokeOrgRoleUser: [ - "DELETE /orgs/{org}/organization-roles/users/{username}/{role_id}" - ], - setMembershipForUser: ["PUT /orgs/{org}/memberships/{username}"], - setPublicMembershipForAuthenticatedUser: [ - "PUT /orgs/{org}/public_members/{username}" - ], - unblockUser: ["DELETE /orgs/{org}/blocks/{username}"], - update: ["PATCH /orgs/{org}"], - updateMembershipForAuthenticatedUser: [ - "PATCH /user/memberships/orgs/{org}" - ], - updatePatAccess: ["POST /orgs/{org}/personal-access-tokens/{pat_id}"], - updatePatAccesses: ["POST /orgs/{org}/personal-access-tokens"], - updateWebhook: ["PATCH /orgs/{org}/hooks/{hook_id}"], - updateWebhookConfigForOrg: ["PATCH /orgs/{org}/hooks/{hook_id}/config"] - }, - packages: { - deletePackageForAuthenticatedUser: [ - "DELETE /user/packages/{package_type}/{package_name}" - ], - deletePackageForOrg: [ - "DELETE /orgs/{org}/packages/{package_type}/{package_name}" - ], - deletePackageForUser: [ - "DELETE /users/{username}/packages/{package_type}/{package_name}" - ], - deletePackageVersionForAuthenticatedUser: [ - "DELETE /user/packages/{package_type}/{package_name}/versions/{package_version_id}" - ], - deletePackageVersionForOrg: [ - "DELETE /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}" - ], - deletePackageVersionForUser: [ - "DELETE /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}" - ], - getAllPackageVersionsForAPackageOwnedByAnOrg: [ - "GET /orgs/{org}/packages/{package_type}/{package_name}/versions", - {}, - { renamed: ["packages", "getAllPackageVersionsForPackageOwnedByOrg"] } - ], - getAllPackageVersionsForAPackageOwnedByTheAuthenticatedUser: [ - "GET /user/packages/{package_type}/{package_name}/versions", - {}, - { - renamed: [ - "packages", - "getAllPackageVersionsForPackageOwnedByAuthenticatedUser" - ] - } - ], - getAllPackageVersionsForPackageOwnedByAuthenticatedUser: [ - "GET /user/packages/{package_type}/{package_name}/versions" - ], - getAllPackageVersionsForPackageOwnedByOrg: [ - "GET /orgs/{org}/packages/{package_type}/{package_name}/versions" - ], - getAllPackageVersionsForPackageOwnedByUser: [ - "GET /users/{username}/packages/{package_type}/{package_name}/versions" - ], - getPackageForAuthenticatedUser: [ - "GET /user/packages/{package_type}/{package_name}" - ], - getPackageForOrganization: [ - "GET /orgs/{org}/packages/{package_type}/{package_name}" - ], - getPackageForUser: [ - "GET /users/{username}/packages/{package_type}/{package_name}" - ], - getPackageVersionForAuthenticatedUser: [ - "GET /user/packages/{package_type}/{package_name}/versions/{package_version_id}" - ], - getPackageVersionForOrganization: [ - "GET /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}" - ], - getPackageVersionForUser: [ - "GET /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}" - ], - listDockerMigrationConflictingPackagesForAuthenticatedUser: [ - "GET /user/docker/conflicts" - ], - listDockerMigrationConflictingPackagesForOrganization: [ - "GET /orgs/{org}/docker/conflicts" - ], - listDockerMigrationConflictingPackagesForUser: [ - "GET /users/{username}/docker/conflicts" - ], - listPackagesForAuthenticatedUser: ["GET /user/packages"], - listPackagesForOrganization: ["GET /orgs/{org}/packages"], - listPackagesForUser: ["GET /users/{username}/packages"], - restorePackageForAuthenticatedUser: [ - "POST /user/packages/{package_type}/{package_name}/restore{?token}" - ], - restorePackageForOrg: [ - "POST /orgs/{org}/packages/{package_type}/{package_name}/restore{?token}" - ], - restorePackageForUser: [ - "POST /users/{username}/packages/{package_type}/{package_name}/restore{?token}" - ], - restorePackageVersionForAuthenticatedUser: [ - "POST /user/packages/{package_type}/{package_name}/versions/{package_version_id}/restore" - ], - restorePackageVersionForOrg: [ - "POST /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}/restore" - ], - restorePackageVersionForUser: [ - "POST /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}/restore" - ] - }, - projects: { - addCollaborator: ["PUT /projects/{project_id}/collaborators/{username}"], - createCard: ["POST /projects/columns/{column_id}/cards"], - createColumn: ["POST /projects/{project_id}/columns"], - createForAuthenticatedUser: ["POST /user/projects"], - createForOrg: ["POST /orgs/{org}/projects"], - createForRepo: ["POST /repos/{owner}/{repo}/projects"], - delete: ["DELETE /projects/{project_id}"], - deleteCard: ["DELETE /projects/columns/cards/{card_id}"], - deleteColumn: ["DELETE /projects/columns/{column_id}"], - get: ["GET /projects/{project_id}"], - getCard: ["GET /projects/columns/cards/{card_id}"], - getColumn: ["GET /projects/columns/{column_id}"], - getPermissionForUser: [ - "GET /projects/{project_id}/collaborators/{username}/permission" - ], - listCards: ["GET /projects/columns/{column_id}/cards"], - listCollaborators: ["GET /projects/{project_id}/collaborators"], - listColumns: ["GET /projects/{project_id}/columns"], - listForOrg: ["GET /orgs/{org}/projects"], - listForRepo: ["GET /repos/{owner}/{repo}/projects"], - listForUser: ["GET /users/{username}/projects"], - moveCard: ["POST /projects/columns/cards/{card_id}/moves"], - moveColumn: ["POST /projects/columns/{column_id}/moves"], - removeCollaborator: [ - "DELETE /projects/{project_id}/collaborators/{username}" - ], - update: ["PATCH /projects/{project_id}"], - updateCard: ["PATCH /projects/columns/cards/{card_id}"], - updateColumn: ["PATCH /projects/columns/{column_id}"] - }, - pulls: { - checkIfMerged: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/merge"], - create: ["POST /repos/{owner}/{repo}/pulls"], - createReplyForReviewComment: [ - "POST /repos/{owner}/{repo}/pulls/{pull_number}/comments/{comment_id}/replies" - ], - createReview: ["POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews"], - createReviewComment: [ - "POST /repos/{owner}/{repo}/pulls/{pull_number}/comments" - ], - deletePendingReview: [ - "DELETE /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}" - ], - deleteReviewComment: [ - "DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}" - ], - dismissReview: [ - "PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/dismissals" - ], - get: ["GET /repos/{owner}/{repo}/pulls/{pull_number}"], - getReview: [ - "GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}" - ], - getReviewComment: ["GET /repos/{owner}/{repo}/pulls/comments/{comment_id}"], - list: ["GET /repos/{owner}/{repo}/pulls"], - listCommentsForReview: [ - "GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments" - ], - listCommits: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/commits"], - listFiles: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/files"], - listRequestedReviewers: [ - "GET /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers" - ], - listReviewComments: [ - "GET /repos/{owner}/{repo}/pulls/{pull_number}/comments" - ], - listReviewCommentsForRepo: ["GET /repos/{owner}/{repo}/pulls/comments"], - listReviews: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews"], - merge: ["PUT /repos/{owner}/{repo}/pulls/{pull_number}/merge"], - removeRequestedReviewers: [ - "DELETE /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers" - ], - requestReviewers: [ - "POST /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers" - ], - submitReview: [ - "POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/events" - ], - update: ["PATCH /repos/{owner}/{repo}/pulls/{pull_number}"], - updateBranch: [ - "PUT /repos/{owner}/{repo}/pulls/{pull_number}/update-branch" - ], - updateReview: [ - "PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}" - ], - updateReviewComment: [ - "PATCH /repos/{owner}/{repo}/pulls/comments/{comment_id}" - ] - }, - rateLimit: { get: ["GET /rate_limit"] }, - reactions: { - createForCommitComment: [ - "POST /repos/{owner}/{repo}/comments/{comment_id}/reactions" - ], - createForIssue: [ - "POST /repos/{owner}/{repo}/issues/{issue_number}/reactions" - ], - createForIssueComment: [ - "POST /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions" - ], - createForPullRequestReviewComment: [ - "POST /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions" - ], - createForRelease: [ - "POST /repos/{owner}/{repo}/releases/{release_id}/reactions" - ], - createForTeamDiscussionCommentInOrg: [ - "POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions" - ], - createForTeamDiscussionInOrg: [ - "POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions" - ], - deleteForCommitComment: [ - "DELETE /repos/{owner}/{repo}/comments/{comment_id}/reactions/{reaction_id}" - ], - deleteForIssue: [ - "DELETE /repos/{owner}/{repo}/issues/{issue_number}/reactions/{reaction_id}" - ], - deleteForIssueComment: [ - "DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions/{reaction_id}" - ], - deleteForPullRequestComment: [ - "DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions/{reaction_id}" - ], - deleteForRelease: [ - "DELETE /repos/{owner}/{repo}/releases/{release_id}/reactions/{reaction_id}" - ], - deleteForTeamDiscussion: [ - "DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions/{reaction_id}" - ], - deleteForTeamDiscussionComment: [ - "DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions/{reaction_id}" - ], - listForCommitComment: [ - "GET /repos/{owner}/{repo}/comments/{comment_id}/reactions" - ], - listForIssue: ["GET /repos/{owner}/{repo}/issues/{issue_number}/reactions"], - listForIssueComment: [ - "GET /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions" - ], - listForPullRequestReviewComment: [ - "GET /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions" - ], - listForRelease: [ - "GET /repos/{owner}/{repo}/releases/{release_id}/reactions" - ], - listForTeamDiscussionCommentInOrg: [ - "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions" - ], - listForTeamDiscussionInOrg: [ - "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions" - ] - }, - repos: { - acceptInvitation: [ - "PATCH /user/repository_invitations/{invitation_id}", - {}, - { renamed: ["repos", "acceptInvitationForAuthenticatedUser"] } - ], - acceptInvitationForAuthenticatedUser: [ - "PATCH /user/repository_invitations/{invitation_id}" - ], - addAppAccessRestrictions: [ - "POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps", - {}, - { mapToData: "apps" } - ], - addCollaborator: ["PUT /repos/{owner}/{repo}/collaborators/{username}"], - addStatusCheckContexts: [ - "POST /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts", - {}, - { mapToData: "contexts" } - ], - addTeamAccessRestrictions: [ - "POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams", - {}, - { mapToData: "teams" } - ], - addUserAccessRestrictions: [ - "POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users", - {}, - { mapToData: "users" } - ], - cancelPagesDeployment: [ - "POST /repos/{owner}/{repo}/pages/deployments/{pages_deployment_id}/cancel" - ], - checkAutomatedSecurityFixes: [ - "GET /repos/{owner}/{repo}/automated-security-fixes" - ], - checkCollaborator: ["GET /repos/{owner}/{repo}/collaborators/{username}"], - checkVulnerabilityAlerts: [ - "GET /repos/{owner}/{repo}/vulnerability-alerts" - ], - codeownersErrors: ["GET /repos/{owner}/{repo}/codeowners/errors"], - compareCommits: ["GET /repos/{owner}/{repo}/compare/{base}...{head}"], - compareCommitsWithBasehead: [ - "GET /repos/{owner}/{repo}/compare/{basehead}" - ], - createAutolink: ["POST /repos/{owner}/{repo}/autolinks"], - createCommitComment: [ - "POST /repos/{owner}/{repo}/commits/{commit_sha}/comments" - ], - createCommitSignatureProtection: [ - "POST /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures" - ], - createCommitStatus: ["POST /repos/{owner}/{repo}/statuses/{sha}"], - createDeployKey: ["POST /repos/{owner}/{repo}/keys"], - createDeployment: ["POST /repos/{owner}/{repo}/deployments"], - createDeploymentBranchPolicy: [ - "POST /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies" - ], - createDeploymentProtectionRule: [ - "POST /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules" - ], - createDeploymentStatus: [ - "POST /repos/{owner}/{repo}/deployments/{deployment_id}/statuses" - ], - createDispatchEvent: ["POST /repos/{owner}/{repo}/dispatches"], - createForAuthenticatedUser: ["POST /user/repos"], - createFork: ["POST /repos/{owner}/{repo}/forks"], - createInOrg: ["POST /orgs/{org}/repos"], - createOrUpdateCustomPropertiesValues: [ - "PATCH /repos/{owner}/{repo}/properties/values" - ], - createOrUpdateEnvironment: [ - "PUT /repos/{owner}/{repo}/environments/{environment_name}" - ], - createOrUpdateFileContents: ["PUT /repos/{owner}/{repo}/contents/{path}"], - createOrgRuleset: ["POST /orgs/{org}/rulesets"], - createPagesDeployment: ["POST /repos/{owner}/{repo}/pages/deployments"], - createPagesSite: ["POST /repos/{owner}/{repo}/pages"], - createRelease: ["POST /repos/{owner}/{repo}/releases"], - createRepoRuleset: ["POST /repos/{owner}/{repo}/rulesets"], - createTagProtection: ["POST /repos/{owner}/{repo}/tags/protection"], - createUsingTemplate: [ - "POST /repos/{template_owner}/{template_repo}/generate" - ], - createWebhook: ["POST /repos/{owner}/{repo}/hooks"], - declineInvitation: [ - "DELETE /user/repository_invitations/{invitation_id}", - {}, - { renamed: ["repos", "declineInvitationForAuthenticatedUser"] } - ], - declineInvitationForAuthenticatedUser: [ - "DELETE /user/repository_invitations/{invitation_id}" - ], - delete: ["DELETE /repos/{owner}/{repo}"], - deleteAccessRestrictions: [ - "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions" - ], - deleteAdminBranchProtection: [ - "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins" - ], - deleteAnEnvironment: [ - "DELETE /repos/{owner}/{repo}/environments/{environment_name}" - ], - deleteAutolink: ["DELETE /repos/{owner}/{repo}/autolinks/{autolink_id}"], - deleteBranchProtection: [ - "DELETE /repos/{owner}/{repo}/branches/{branch}/protection" - ], - deleteCommitComment: ["DELETE /repos/{owner}/{repo}/comments/{comment_id}"], - deleteCommitSignatureProtection: [ - "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures" - ], - deleteDeployKey: ["DELETE /repos/{owner}/{repo}/keys/{key_id}"], - deleteDeployment: [ - "DELETE /repos/{owner}/{repo}/deployments/{deployment_id}" - ], - deleteDeploymentBranchPolicy: [ - "DELETE /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}" - ], - deleteFile: ["DELETE /repos/{owner}/{repo}/contents/{path}"], - deleteInvitation: [ - "DELETE /repos/{owner}/{repo}/invitations/{invitation_id}" - ], - deleteOrgRuleset: ["DELETE /orgs/{org}/rulesets/{ruleset_id}"], - deletePagesSite: ["DELETE /repos/{owner}/{repo}/pages"], - deletePullRequestReviewProtection: [ - "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews" - ], - deleteRelease: ["DELETE /repos/{owner}/{repo}/releases/{release_id}"], - deleteReleaseAsset: [ - "DELETE /repos/{owner}/{repo}/releases/assets/{asset_id}" - ], - deleteRepoRuleset: ["DELETE /repos/{owner}/{repo}/rulesets/{ruleset_id}"], - deleteTagProtection: [ - "DELETE /repos/{owner}/{repo}/tags/protection/{tag_protection_id}" - ], - deleteWebhook: ["DELETE /repos/{owner}/{repo}/hooks/{hook_id}"], - disableAutomatedSecurityFixes: [ - "DELETE /repos/{owner}/{repo}/automated-security-fixes" - ], - disableDeploymentProtectionRule: [ - "DELETE /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/{protection_rule_id}" - ], - disablePrivateVulnerabilityReporting: [ - "DELETE /repos/{owner}/{repo}/private-vulnerability-reporting" - ], - disableVulnerabilityAlerts: [ - "DELETE /repos/{owner}/{repo}/vulnerability-alerts" - ], - downloadArchive: [ - "GET /repos/{owner}/{repo}/zipball/{ref}", - {}, - { renamed: ["repos", "downloadZipballArchive"] } - ], - downloadTarballArchive: ["GET /repos/{owner}/{repo}/tarball/{ref}"], - downloadZipballArchive: ["GET /repos/{owner}/{repo}/zipball/{ref}"], - enableAutomatedSecurityFixes: [ - "PUT /repos/{owner}/{repo}/automated-security-fixes" - ], - enablePrivateVulnerabilityReporting: [ - "PUT /repos/{owner}/{repo}/private-vulnerability-reporting" - ], - enableVulnerabilityAlerts: [ - "PUT /repos/{owner}/{repo}/vulnerability-alerts" - ], - generateReleaseNotes: [ - "POST /repos/{owner}/{repo}/releases/generate-notes" - ], - get: ["GET /repos/{owner}/{repo}"], - getAccessRestrictions: [ - "GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions" - ], - getAdminBranchProtection: [ - "GET /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins" - ], - getAllDeploymentProtectionRules: [ - "GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules" - ], - getAllEnvironments: ["GET /repos/{owner}/{repo}/environments"], - getAllStatusCheckContexts: [ - "GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts" - ], - getAllTopics: ["GET /repos/{owner}/{repo}/topics"], - getAppsWithAccessToProtectedBranch: [ - "GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps" - ], - getAutolink: ["GET /repos/{owner}/{repo}/autolinks/{autolink_id}"], - getBranch: ["GET /repos/{owner}/{repo}/branches/{branch}"], - getBranchProtection: [ - "GET /repos/{owner}/{repo}/branches/{branch}/protection" - ], - getBranchRules: ["GET /repos/{owner}/{repo}/rules/branches/{branch}"], - getClones: ["GET /repos/{owner}/{repo}/traffic/clones"], - getCodeFrequencyStats: ["GET /repos/{owner}/{repo}/stats/code_frequency"], - getCollaboratorPermissionLevel: [ - "GET /repos/{owner}/{repo}/collaborators/{username}/permission" - ], - getCombinedStatusForRef: ["GET /repos/{owner}/{repo}/commits/{ref}/status"], - getCommit: ["GET /repos/{owner}/{repo}/commits/{ref}"], - getCommitActivityStats: ["GET /repos/{owner}/{repo}/stats/commit_activity"], - getCommitComment: ["GET /repos/{owner}/{repo}/comments/{comment_id}"], - getCommitSignatureProtection: [ - "GET /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures" - ], - getCommunityProfileMetrics: ["GET /repos/{owner}/{repo}/community/profile"], - getContent: ["GET /repos/{owner}/{repo}/contents/{path}"], - getContributorsStats: ["GET /repos/{owner}/{repo}/stats/contributors"], - getCustomDeploymentProtectionRule: [ - "GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/{protection_rule_id}" - ], - getCustomPropertiesValues: ["GET /repos/{owner}/{repo}/properties/values"], - getDeployKey: ["GET /repos/{owner}/{repo}/keys/{key_id}"], - getDeployment: ["GET /repos/{owner}/{repo}/deployments/{deployment_id}"], - getDeploymentBranchPolicy: [ - "GET /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}" - ], - getDeploymentStatus: [ - "GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses/{status_id}" - ], - getEnvironment: [ - "GET /repos/{owner}/{repo}/environments/{environment_name}" - ], - getLatestPagesBuild: ["GET /repos/{owner}/{repo}/pages/builds/latest"], - getLatestRelease: ["GET /repos/{owner}/{repo}/releases/latest"], - getOrgRuleSuite: ["GET /orgs/{org}/rulesets/rule-suites/{rule_suite_id}"], - getOrgRuleSuites: ["GET /orgs/{org}/rulesets/rule-suites"], - getOrgRuleset: ["GET /orgs/{org}/rulesets/{ruleset_id}"], - getOrgRulesets: ["GET /orgs/{org}/rulesets"], - getPages: ["GET /repos/{owner}/{repo}/pages"], - getPagesBuild: ["GET /repos/{owner}/{repo}/pages/builds/{build_id}"], - getPagesDeployment: [ - "GET /repos/{owner}/{repo}/pages/deployments/{pages_deployment_id}" - ], - getPagesHealthCheck: ["GET /repos/{owner}/{repo}/pages/health"], - getParticipationStats: ["GET /repos/{owner}/{repo}/stats/participation"], - getPullRequestReviewProtection: [ - "GET /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews" - ], - getPunchCardStats: ["GET /repos/{owner}/{repo}/stats/punch_card"], - getReadme: ["GET /repos/{owner}/{repo}/readme"], - getReadmeInDirectory: ["GET /repos/{owner}/{repo}/readme/{dir}"], - getRelease: ["GET /repos/{owner}/{repo}/releases/{release_id}"], - getReleaseAsset: ["GET /repos/{owner}/{repo}/releases/assets/{asset_id}"], - getReleaseByTag: ["GET /repos/{owner}/{repo}/releases/tags/{tag}"], - getRepoRuleSuite: [ - "GET /repos/{owner}/{repo}/rulesets/rule-suites/{rule_suite_id}" - ], - getRepoRuleSuites: ["GET /repos/{owner}/{repo}/rulesets/rule-suites"], - getRepoRuleset: ["GET /repos/{owner}/{repo}/rulesets/{ruleset_id}"], - getRepoRulesets: ["GET /repos/{owner}/{repo}/rulesets"], - getStatusChecksProtection: [ - "GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks" - ], - getTeamsWithAccessToProtectedBranch: [ - "GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams" - ], - getTopPaths: ["GET /repos/{owner}/{repo}/traffic/popular/paths"], - getTopReferrers: ["GET /repos/{owner}/{repo}/traffic/popular/referrers"], - getUsersWithAccessToProtectedBranch: [ - "GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users" - ], - getViews: ["GET /repos/{owner}/{repo}/traffic/views"], - getWebhook: ["GET /repos/{owner}/{repo}/hooks/{hook_id}"], - getWebhookConfigForRepo: [ - "GET /repos/{owner}/{repo}/hooks/{hook_id}/config" - ], - getWebhookDelivery: [ - "GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries/{delivery_id}" - ], - listActivities: ["GET /repos/{owner}/{repo}/activity"], - listAutolinks: ["GET /repos/{owner}/{repo}/autolinks"], - listBranches: ["GET /repos/{owner}/{repo}/branches"], - listBranchesForHeadCommit: [ - "GET /repos/{owner}/{repo}/commits/{commit_sha}/branches-where-head" - ], - listCollaborators: ["GET /repos/{owner}/{repo}/collaborators"], - listCommentsForCommit: [ - "GET /repos/{owner}/{repo}/commits/{commit_sha}/comments" - ], - listCommitCommentsForRepo: ["GET /repos/{owner}/{repo}/comments"], - listCommitStatusesForRef: [ - "GET /repos/{owner}/{repo}/commits/{ref}/statuses" - ], - listCommits: ["GET /repos/{owner}/{repo}/commits"], - listContributors: ["GET /repos/{owner}/{repo}/contributors"], - listCustomDeploymentRuleIntegrations: [ - "GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/apps" - ], - listDeployKeys: ["GET /repos/{owner}/{repo}/keys"], - listDeploymentBranchPolicies: [ - "GET /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies" - ], - listDeploymentStatuses: [ - "GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses" - ], - listDeployments: ["GET /repos/{owner}/{repo}/deployments"], - listForAuthenticatedUser: ["GET /user/repos"], - listForOrg: ["GET /orgs/{org}/repos"], - listForUser: ["GET /users/{username}/repos"], - listForks: ["GET /repos/{owner}/{repo}/forks"], - listInvitations: ["GET /repos/{owner}/{repo}/invitations"], - listInvitationsForAuthenticatedUser: ["GET /user/repository_invitations"], - listLanguages: ["GET /repos/{owner}/{repo}/languages"], - listPagesBuilds: ["GET /repos/{owner}/{repo}/pages/builds"], - listPublic: ["GET /repositories"], - listPullRequestsAssociatedWithCommit: [ - "GET /repos/{owner}/{repo}/commits/{commit_sha}/pulls" - ], - listReleaseAssets: [ - "GET /repos/{owner}/{repo}/releases/{release_id}/assets" - ], - listReleases: ["GET /repos/{owner}/{repo}/releases"], - listTagProtection: ["GET /repos/{owner}/{repo}/tags/protection"], - listTags: ["GET /repos/{owner}/{repo}/tags"], - listTeams: ["GET /repos/{owner}/{repo}/teams"], - listWebhookDeliveries: [ - "GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries" - ], - listWebhooks: ["GET /repos/{owner}/{repo}/hooks"], - merge: ["POST /repos/{owner}/{repo}/merges"], - mergeUpstream: ["POST /repos/{owner}/{repo}/merge-upstream"], - pingWebhook: ["POST /repos/{owner}/{repo}/hooks/{hook_id}/pings"], - redeliverWebhookDelivery: [ - "POST /repos/{owner}/{repo}/hooks/{hook_id}/deliveries/{delivery_id}/attempts" - ], - removeAppAccessRestrictions: [ - "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps", - {}, - { mapToData: "apps" } - ], - removeCollaborator: [ - "DELETE /repos/{owner}/{repo}/collaborators/{username}" - ], - removeStatusCheckContexts: [ - "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts", - {}, - { mapToData: "contexts" } - ], - removeStatusCheckProtection: [ - "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks" - ], - removeTeamAccessRestrictions: [ - "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams", - {}, - { mapToData: "teams" } - ], - removeUserAccessRestrictions: [ - "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users", - {}, - { mapToData: "users" } - ], - renameBranch: ["POST /repos/{owner}/{repo}/branches/{branch}/rename"], - replaceAllTopics: ["PUT /repos/{owner}/{repo}/topics"], - requestPagesBuild: ["POST /repos/{owner}/{repo}/pages/builds"], - setAdminBranchProtection: [ - "POST /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins" - ], - setAppAccessRestrictions: [ - "PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps", - {}, - { mapToData: "apps" } - ], - setStatusCheckContexts: [ - "PUT /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts", - {}, - { mapToData: "contexts" } - ], - setTeamAccessRestrictions: [ - "PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams", - {}, - { mapToData: "teams" } - ], - setUserAccessRestrictions: [ - "PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users", - {}, - { mapToData: "users" } - ], - testPushWebhook: ["POST /repos/{owner}/{repo}/hooks/{hook_id}/tests"], - transfer: ["POST /repos/{owner}/{repo}/transfer"], - update: ["PATCH /repos/{owner}/{repo}"], - updateBranchProtection: [ - "PUT /repos/{owner}/{repo}/branches/{branch}/protection" - ], - updateCommitComment: ["PATCH /repos/{owner}/{repo}/comments/{comment_id}"], - updateDeploymentBranchPolicy: [ - "PUT /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}" - ], - updateInformationAboutPagesSite: ["PUT /repos/{owner}/{repo}/pages"], - updateInvitation: [ - "PATCH /repos/{owner}/{repo}/invitations/{invitation_id}" - ], - updateOrgRuleset: ["PUT /orgs/{org}/rulesets/{ruleset_id}"], - updatePullRequestReviewProtection: [ - "PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews" - ], - updateRelease: ["PATCH /repos/{owner}/{repo}/releases/{release_id}"], - updateReleaseAsset: [ - "PATCH /repos/{owner}/{repo}/releases/assets/{asset_id}" - ], - updateRepoRuleset: ["PUT /repos/{owner}/{repo}/rulesets/{ruleset_id}"], - updateStatusCheckPotection: [ - "PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks", - {}, - { renamed: ["repos", "updateStatusCheckProtection"] } - ], - updateStatusCheckProtection: [ - "PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks" - ], - updateWebhook: ["PATCH /repos/{owner}/{repo}/hooks/{hook_id}"], - updateWebhookConfigForRepo: [ - "PATCH /repos/{owner}/{repo}/hooks/{hook_id}/config" - ], - uploadReleaseAsset: [ - "POST /repos/{owner}/{repo}/releases/{release_id}/assets{?name,label}", - { baseUrl: "https://uploads.github.com" } - ] - }, - search: { - code: ["GET /search/code"], - commits: ["GET /search/commits"], - issuesAndPullRequests: ["GET /search/issues"], - labels: ["GET /search/labels"], - repos: ["GET /search/repositories"], - topics: ["GET /search/topics"], - users: ["GET /search/users"] - }, - secretScanning: { - getAlert: [ - "GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}" - ], - listAlertsForEnterprise: [ - "GET /enterprises/{enterprise}/secret-scanning/alerts" - ], - listAlertsForOrg: ["GET /orgs/{org}/secret-scanning/alerts"], - listAlertsForRepo: ["GET /repos/{owner}/{repo}/secret-scanning/alerts"], - listLocationsForAlert: [ - "GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}/locations" - ], - updateAlert: [ - "PATCH /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}" - ] - }, - securityAdvisories: { - createFork: [ - "POST /repos/{owner}/{repo}/security-advisories/{ghsa_id}/forks" - ], - createPrivateVulnerabilityReport: [ - "POST /repos/{owner}/{repo}/security-advisories/reports" - ], - createRepositoryAdvisory: [ - "POST /repos/{owner}/{repo}/security-advisories" - ], - createRepositoryAdvisoryCveRequest: [ - "POST /repos/{owner}/{repo}/security-advisories/{ghsa_id}/cve" - ], - getGlobalAdvisory: ["GET /advisories/{ghsa_id}"], - getRepositoryAdvisory: [ - "GET /repos/{owner}/{repo}/security-advisories/{ghsa_id}" - ], - listGlobalAdvisories: ["GET /advisories"], - listOrgRepositoryAdvisories: ["GET /orgs/{org}/security-advisories"], - listRepositoryAdvisories: ["GET /repos/{owner}/{repo}/security-advisories"], - updateRepositoryAdvisory: [ - "PATCH /repos/{owner}/{repo}/security-advisories/{ghsa_id}" - ] - }, - teams: { - addOrUpdateMembershipForUserInOrg: [ - "PUT /orgs/{org}/teams/{team_slug}/memberships/{username}" - ], - addOrUpdateProjectPermissionsInOrg: [ - "PUT /orgs/{org}/teams/{team_slug}/projects/{project_id}" - ], - addOrUpdateRepoPermissionsInOrg: [ - "PUT /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}" - ], - checkPermissionsForProjectInOrg: [ - "GET /orgs/{org}/teams/{team_slug}/projects/{project_id}" - ], - checkPermissionsForRepoInOrg: [ - "GET /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}" - ], - create: ["POST /orgs/{org}/teams"], - createDiscussionCommentInOrg: [ - "POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments" - ], - createDiscussionInOrg: ["POST /orgs/{org}/teams/{team_slug}/discussions"], - deleteDiscussionCommentInOrg: [ - "DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}" - ], - deleteDiscussionInOrg: [ - "DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}" - ], - deleteInOrg: ["DELETE /orgs/{org}/teams/{team_slug}"], - getByName: ["GET /orgs/{org}/teams/{team_slug}"], - getDiscussionCommentInOrg: [ - "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}" - ], - getDiscussionInOrg: [ - "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}" - ], - getMembershipForUserInOrg: [ - "GET /orgs/{org}/teams/{team_slug}/memberships/{username}" - ], - list: ["GET /orgs/{org}/teams"], - listChildInOrg: ["GET /orgs/{org}/teams/{team_slug}/teams"], - listDiscussionCommentsInOrg: [ - "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments" - ], - listDiscussionsInOrg: ["GET /orgs/{org}/teams/{team_slug}/discussions"], - listForAuthenticatedUser: ["GET /user/teams"], - listMembersInOrg: ["GET /orgs/{org}/teams/{team_slug}/members"], - listPendingInvitationsInOrg: [ - "GET /orgs/{org}/teams/{team_slug}/invitations" - ], - listProjectsInOrg: ["GET /orgs/{org}/teams/{team_slug}/projects"], - listReposInOrg: ["GET /orgs/{org}/teams/{team_slug}/repos"], - removeMembershipForUserInOrg: [ - "DELETE /orgs/{org}/teams/{team_slug}/memberships/{username}" - ], - removeProjectInOrg: [ - "DELETE /orgs/{org}/teams/{team_slug}/projects/{project_id}" - ], - removeRepoInOrg: [ - "DELETE /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}" - ], - updateDiscussionCommentInOrg: [ - "PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}" - ], - updateDiscussionInOrg: [ - "PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}" - ], - updateInOrg: ["PATCH /orgs/{org}/teams/{team_slug}"] - }, - users: { - addEmailForAuthenticated: [ - "POST /user/emails", - {}, - { renamed: ["users", "addEmailForAuthenticatedUser"] } - ], - addEmailForAuthenticatedUser: ["POST /user/emails"], - addSocialAccountForAuthenticatedUser: ["POST /user/social_accounts"], - block: ["PUT /user/blocks/{username}"], - checkBlocked: ["GET /user/blocks/{username}"], - checkFollowingForUser: ["GET /users/{username}/following/{target_user}"], - checkPersonIsFollowedByAuthenticated: ["GET /user/following/{username}"], - createGpgKeyForAuthenticated: [ - "POST /user/gpg_keys", - {}, - { renamed: ["users", "createGpgKeyForAuthenticatedUser"] } - ], - createGpgKeyForAuthenticatedUser: ["POST /user/gpg_keys"], - createPublicSshKeyForAuthenticated: [ - "POST /user/keys", - {}, - { renamed: ["users", "createPublicSshKeyForAuthenticatedUser"] } - ], - createPublicSshKeyForAuthenticatedUser: ["POST /user/keys"], - createSshSigningKeyForAuthenticatedUser: ["POST /user/ssh_signing_keys"], - deleteEmailForAuthenticated: [ - "DELETE /user/emails", - {}, - { renamed: ["users", "deleteEmailForAuthenticatedUser"] } - ], - deleteEmailForAuthenticatedUser: ["DELETE /user/emails"], - deleteGpgKeyForAuthenticated: [ - "DELETE /user/gpg_keys/{gpg_key_id}", - {}, - { renamed: ["users", "deleteGpgKeyForAuthenticatedUser"] } - ], - deleteGpgKeyForAuthenticatedUser: ["DELETE /user/gpg_keys/{gpg_key_id}"], - deletePublicSshKeyForAuthenticated: [ - "DELETE /user/keys/{key_id}", - {}, - { renamed: ["users", "deletePublicSshKeyForAuthenticatedUser"] } - ], - deletePublicSshKeyForAuthenticatedUser: ["DELETE /user/keys/{key_id}"], - deleteSocialAccountForAuthenticatedUser: ["DELETE /user/social_accounts"], - deleteSshSigningKeyForAuthenticatedUser: [ - "DELETE /user/ssh_signing_keys/{ssh_signing_key_id}" - ], - follow: ["PUT /user/following/{username}"], - getAuthenticated: ["GET /user"], - getByUsername: ["GET /users/{username}"], - getContextForUser: ["GET /users/{username}/hovercard"], - getGpgKeyForAuthenticated: [ - "GET /user/gpg_keys/{gpg_key_id}", - {}, - { renamed: ["users", "getGpgKeyForAuthenticatedUser"] } - ], - getGpgKeyForAuthenticatedUser: ["GET /user/gpg_keys/{gpg_key_id}"], - getPublicSshKeyForAuthenticated: [ - "GET /user/keys/{key_id}", - {}, - { renamed: ["users", "getPublicSshKeyForAuthenticatedUser"] } - ], - getPublicSshKeyForAuthenticatedUser: ["GET /user/keys/{key_id}"], - getSshSigningKeyForAuthenticatedUser: [ - "GET /user/ssh_signing_keys/{ssh_signing_key_id}" - ], - list: ["GET /users"], - listBlockedByAuthenticated: [ - "GET /user/blocks", - {}, - { renamed: ["users", "listBlockedByAuthenticatedUser"] } - ], - listBlockedByAuthenticatedUser: ["GET /user/blocks"], - listEmailsForAuthenticated: [ - "GET /user/emails", - {}, - { renamed: ["users", "listEmailsForAuthenticatedUser"] } - ], - listEmailsForAuthenticatedUser: ["GET /user/emails"], - listFollowedByAuthenticated: [ - "GET /user/following", - {}, - { renamed: ["users", "listFollowedByAuthenticatedUser"] } - ], - listFollowedByAuthenticatedUser: ["GET /user/following"], - listFollowersForAuthenticatedUser: ["GET /user/followers"], - listFollowersForUser: ["GET /users/{username}/followers"], - listFollowingForUser: ["GET /users/{username}/following"], - listGpgKeysForAuthenticated: [ - "GET /user/gpg_keys", - {}, - { renamed: ["users", "listGpgKeysForAuthenticatedUser"] } - ], - listGpgKeysForAuthenticatedUser: ["GET /user/gpg_keys"], - listGpgKeysForUser: ["GET /users/{username}/gpg_keys"], - listPublicEmailsForAuthenticated: [ - "GET /user/public_emails", - {}, - { renamed: ["users", "listPublicEmailsForAuthenticatedUser"] } - ], - listPublicEmailsForAuthenticatedUser: ["GET /user/public_emails"], - listPublicKeysForUser: ["GET /users/{username}/keys"], - listPublicSshKeysForAuthenticated: [ - "GET /user/keys", - {}, - { renamed: ["users", "listPublicSshKeysForAuthenticatedUser"] } - ], - listPublicSshKeysForAuthenticatedUser: ["GET /user/keys"], - listSocialAccountsForAuthenticatedUser: ["GET /user/social_accounts"], - listSocialAccountsForUser: ["GET /users/{username}/social_accounts"], - listSshSigningKeysForAuthenticatedUser: ["GET /user/ssh_signing_keys"], - listSshSigningKeysForUser: ["GET /users/{username}/ssh_signing_keys"], - setPrimaryEmailVisibilityForAuthenticated: [ - "PATCH /user/email/visibility", - {}, - { renamed: ["users", "setPrimaryEmailVisibilityForAuthenticatedUser"] } - ], - setPrimaryEmailVisibilityForAuthenticatedUser: [ - "PATCH /user/email/visibility" - ], - unblock: ["DELETE /user/blocks/{username}"], - unfollow: ["DELETE /user/following/{username}"], - updateAuthenticated: ["PATCH /user"] - } - }; - var endpoints_default = Endpoints; - var endpointMethodsMap = /* @__PURE__ */ new Map; - for (const [scope, endpoints] of Object.entries(endpoints_default)) { - for (const [methodName, endpoint] of Object.entries(endpoints)) { - const [route, defaults, decorations] = endpoint; - const [method, url] = route.split(/ /); - const endpointDefaults = Object.assign({ - method, - url - }, defaults); - if (!endpointMethodsMap.has(scope)) { - endpointMethodsMap.set(scope, /* @__PURE__ */ new Map); - } - endpointMethodsMap.get(scope).set(methodName, { - scope, - methodName, - endpointDefaults, - decorations - }); - } - } - var handler = { - has({ scope }, methodName) { - return endpointMethodsMap.get(scope).has(methodName); - }, - getOwnPropertyDescriptor(target, methodName) { - return { - value: this.get(target, methodName), - configurable: true, - writable: true, - enumerable: true - }; - }, - defineProperty(target, methodName, descriptor) { - Object.defineProperty(target.cache, methodName, descriptor); - return true; - }, - deleteProperty(target, methodName) { - delete target.cache[methodName]; - return true; - }, - ownKeys({ scope }) { - return [...endpointMethodsMap.get(scope).keys()]; - }, - set(target, methodName, value) { - return target.cache[methodName] = value; - }, - get({ octokit, scope, cache }, methodName) { - if (cache[methodName]) { - return cache[methodName]; - } - const method = endpointMethodsMap.get(scope).get(methodName); - if (!method) { - return; - } - const { endpointDefaults, decorations } = method; - if (decorations) { - cache[methodName] = decorate(octokit, scope, methodName, endpointDefaults, decorations); - } else { - cache[methodName] = octokit.request.defaults(endpointDefaults); - } - return cache[methodName]; - } - }; - function endpointsToMethods(octokit) { - const newMethods = {}; - for (const scope of endpointMethodsMap.keys()) { - newMethods[scope] = new Proxy({ octokit, scope, cache: {} }, handler); - } - return newMethods; - } - function decorate(octokit, scope, methodName, defaults, decorations) { - const requestWithDefaults = octokit.request.defaults(defaults); - function withDecorations(...args) { - let options = requestWithDefaults.endpoint.merge(...args); - if (decorations.mapToData) { - options = Object.assign({}, options, { - data: options[decorations.mapToData], - [decorations.mapToData]: undefined - }); - return requestWithDefaults(options); - } - if (decorations.renamed) { - const [newScope, newMethodName] = decorations.renamed; - octokit.log.warn(`octokit.${scope}.${methodName}() has been renamed to octokit.${newScope}.${newMethodName}()`); - } - if (decorations.deprecated) { - octokit.log.warn(decorations.deprecated); - } - if (decorations.renamedParameters) { - const options2 = requestWithDefaults.endpoint.merge(...args); - for (const [name, alias] of Object.entries(decorations.renamedParameters)) { - if (name in options2) { - octokit.log.warn(`"${name}" parameter is deprecated for "octokit.${scope}.${methodName}()". Use "${alias}" instead`); - if (!(alias in options2)) { - options2[alias] = options2[name]; - } - delete options2[name]; - } - } - return requestWithDefaults(options2); - } - return requestWithDefaults(...args); - } - return Object.assign(withDecorations, requestWithDefaults); - } - function restEndpointMethods(octokit) { - const api = endpointsToMethods(octokit); - return { - rest: api - }; - } - restEndpointMethods.VERSION = VERSION; - function legacyRestEndpointMethods(octokit) { - const api = endpointsToMethods(octokit); - return { - ...api, - rest: api - }; - } - legacyRestEndpointMethods.VERSION = VERSION; -}); - -// ../node_modules/@octokit/plugin-paginate-rest/dist-node/index.js -var require_dist_node20 = __commonJS((exports, module) => { - var __defProp2 = Object.defineProperty; - var __getOwnPropDesc = Object.getOwnPropertyDescriptor; - var __getOwnPropNames2 = Object.getOwnPropertyNames; - var __hasOwnProp2 = Object.prototype.hasOwnProperty; - var __export = (target, all) => { - for (var name in all) - __defProp2(target, name, { get: all[name], enumerable: true }); - }; - var __copyProps = (to, from, except, desc) => { - if (from && typeof from === "object" || typeof from === "function") { - for (let key of __getOwnPropNames2(from)) - if (!__hasOwnProp2.call(to, key) && key !== except) - __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); - } - return to; - }; - var __toCommonJS = (mod) => __copyProps(__defProp2({}, "__esModule", { value: true }), mod); - var dist_src_exports = {}; - __export(dist_src_exports, { - composePaginateRest: () => composePaginateRest, - isPaginatingEndpoint: () => isPaginatingEndpoint, - paginateRest: () => paginateRest, - paginatingEndpoints: () => paginatingEndpoints - }); - module.exports = __toCommonJS(dist_src_exports); - var VERSION = "9.2.1"; - function normalizePaginatedListResponse(response) { - if (!response.data) { - return { - ...response, - data: [] - }; - } - const responseNeedsNormalization = "total_count" in response.data && !("url" in response.data); - if (!responseNeedsNormalization) - return response; - const incompleteResults = response.data.incomplete_results; - const repositorySelection = response.data.repository_selection; - const totalCount = response.data.total_count; - delete response.data.incomplete_results; - delete response.data.repository_selection; - delete response.data.total_count; - const namespaceKey = Object.keys(response.data)[0]; - const data = response.data[namespaceKey]; - response.data = data; - if (typeof incompleteResults !== "undefined") { - response.data.incomplete_results = incompleteResults; - } - if (typeof repositorySelection !== "undefined") { - response.data.repository_selection = repositorySelection; - } - response.data.total_count = totalCount; - return response; - } - function iterator(octokit, route, parameters) { - const options = typeof route === "function" ? route.endpoint(parameters) : octokit.request.endpoint(route, parameters); - const requestMethod = typeof route === "function" ? route : octokit.request; - const method = options.method; - const headers = options.headers; - let url = options.url; - return { - [Symbol.asyncIterator]: () => ({ - async next() { - if (!url) - return { done: true }; - try { - const response = await requestMethod({ method, url, headers }); - const normalizedResponse = normalizePaginatedListResponse(response); - url = ((normalizedResponse.headers.link || "").match(/<([^>]+)>;\s*rel="next"/) || [])[1]; - return { value: normalizedResponse }; - } catch (error) { - if (error.status !== 409) - throw error; - url = ""; - return { - value: { - status: 200, - headers: {}, - data: [] - } - }; - } - } - }) - }; - } - function paginate(octokit, route, parameters, mapFn) { - if (typeof parameters === "function") { - mapFn = parameters; - parameters = undefined; - } - return gather(octokit, [], iterator(octokit, route, parameters)[Symbol.asyncIterator](), mapFn); - } - function gather(octokit, results, iterator2, mapFn) { - return iterator2.next().then((result) => { - if (result.done) { - return results; - } - let earlyExit = false; - function done() { - earlyExit = true; - } - results = results.concat(mapFn ? mapFn(result.value, done) : result.value.data); - if (earlyExit) { - return results; - } - return gather(octokit, results, iterator2, mapFn); - }); - } - var composePaginateRest = Object.assign(paginate, { - iterator - }); - var paginatingEndpoints = [ - "GET /advisories", - "GET /app/hook/deliveries", - "GET /app/installation-requests", - "GET /app/installations", - "GET /assignments/{assignment_id}/accepted_assignments", - "GET /classrooms", - "GET /classrooms/{classroom_id}/assignments", - "GET /enterprises/{enterprise}/dependabot/alerts", - "GET /enterprises/{enterprise}/secret-scanning/alerts", - "GET /events", - "GET /gists", - "GET /gists/public", - "GET /gists/starred", - "GET /gists/{gist_id}/comments", - "GET /gists/{gist_id}/commits", - "GET /gists/{gist_id}/forks", - "GET /installation/repositories", - "GET /issues", - "GET /licenses", - "GET /marketplace_listing/plans", - "GET /marketplace_listing/plans/{plan_id}/accounts", - "GET /marketplace_listing/stubbed/plans", - "GET /marketplace_listing/stubbed/plans/{plan_id}/accounts", - "GET /networks/{owner}/{repo}/events", - "GET /notifications", - "GET /organizations", - "GET /orgs/{org}/actions/cache/usage-by-repository", - "GET /orgs/{org}/actions/permissions/repositories", - "GET /orgs/{org}/actions/runners", - "GET /orgs/{org}/actions/secrets", - "GET /orgs/{org}/actions/secrets/{secret_name}/repositories", - "GET /orgs/{org}/actions/variables", - "GET /orgs/{org}/actions/variables/{name}/repositories", - "GET /orgs/{org}/blocks", - "GET /orgs/{org}/code-scanning/alerts", - "GET /orgs/{org}/codespaces", - "GET /orgs/{org}/codespaces/secrets", - "GET /orgs/{org}/codespaces/secrets/{secret_name}/repositories", - "GET /orgs/{org}/copilot/billing/seats", - "GET /orgs/{org}/dependabot/alerts", - "GET /orgs/{org}/dependabot/secrets", - "GET /orgs/{org}/dependabot/secrets/{secret_name}/repositories", - "GET /orgs/{org}/events", - "GET /orgs/{org}/failed_invitations", - "GET /orgs/{org}/hooks", - "GET /orgs/{org}/hooks/{hook_id}/deliveries", - "GET /orgs/{org}/installations", - "GET /orgs/{org}/invitations", - "GET /orgs/{org}/invitations/{invitation_id}/teams", - "GET /orgs/{org}/issues", - "GET /orgs/{org}/members", - "GET /orgs/{org}/members/{username}/codespaces", - "GET /orgs/{org}/migrations", - "GET /orgs/{org}/migrations/{migration_id}/repositories", - "GET /orgs/{org}/organization-roles/{role_id}/teams", - "GET /orgs/{org}/organization-roles/{role_id}/users", - "GET /orgs/{org}/outside_collaborators", - "GET /orgs/{org}/packages", - "GET /orgs/{org}/packages/{package_type}/{package_name}/versions", - "GET /orgs/{org}/personal-access-token-requests", - "GET /orgs/{org}/personal-access-token-requests/{pat_request_id}/repositories", - "GET /orgs/{org}/personal-access-tokens", - "GET /orgs/{org}/personal-access-tokens/{pat_id}/repositories", - "GET /orgs/{org}/projects", - "GET /orgs/{org}/properties/values", - "GET /orgs/{org}/public_members", - "GET /orgs/{org}/repos", - "GET /orgs/{org}/rulesets", - "GET /orgs/{org}/rulesets/rule-suites", - "GET /orgs/{org}/secret-scanning/alerts", - "GET /orgs/{org}/security-advisories", - "GET /orgs/{org}/teams", - "GET /orgs/{org}/teams/{team_slug}/discussions", - "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments", - "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions", - "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions", - "GET /orgs/{org}/teams/{team_slug}/invitations", - "GET /orgs/{org}/teams/{team_slug}/members", - "GET /orgs/{org}/teams/{team_slug}/projects", - "GET /orgs/{org}/teams/{team_slug}/repos", - "GET /orgs/{org}/teams/{team_slug}/teams", - "GET /projects/columns/{column_id}/cards", - "GET /projects/{project_id}/collaborators", - "GET /projects/{project_id}/columns", - "GET /repos/{owner}/{repo}/actions/artifacts", - "GET /repos/{owner}/{repo}/actions/caches", - "GET /repos/{owner}/{repo}/actions/organization-secrets", - "GET /repos/{owner}/{repo}/actions/organization-variables", - "GET /repos/{owner}/{repo}/actions/runners", - "GET /repos/{owner}/{repo}/actions/runs", - "GET /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts", - "GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/jobs", - "GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs", - "GET /repos/{owner}/{repo}/actions/secrets", - "GET /repos/{owner}/{repo}/actions/variables", - "GET /repos/{owner}/{repo}/actions/workflows", - "GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs", - "GET /repos/{owner}/{repo}/activity", - "GET /repos/{owner}/{repo}/assignees", - "GET /repos/{owner}/{repo}/branches", - "GET /repos/{owner}/{repo}/check-runs/{check_run_id}/annotations", - "GET /repos/{owner}/{repo}/check-suites/{check_suite_id}/check-runs", - "GET /repos/{owner}/{repo}/code-scanning/alerts", - "GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances", - "GET /repos/{owner}/{repo}/code-scanning/analyses", - "GET /repos/{owner}/{repo}/codespaces", - "GET /repos/{owner}/{repo}/codespaces/devcontainers", - "GET /repos/{owner}/{repo}/codespaces/secrets", - "GET /repos/{owner}/{repo}/collaborators", - "GET /repos/{owner}/{repo}/comments", - "GET /repos/{owner}/{repo}/comments/{comment_id}/reactions", - "GET /repos/{owner}/{repo}/commits", - "GET /repos/{owner}/{repo}/commits/{commit_sha}/comments", - "GET /repos/{owner}/{repo}/commits/{commit_sha}/pulls", - "GET /repos/{owner}/{repo}/commits/{ref}/check-runs", - "GET /repos/{owner}/{repo}/commits/{ref}/check-suites", - "GET /repos/{owner}/{repo}/commits/{ref}/status", - "GET /repos/{owner}/{repo}/commits/{ref}/statuses", - "GET /repos/{owner}/{repo}/contributors", - "GET /repos/{owner}/{repo}/dependabot/alerts", - "GET /repos/{owner}/{repo}/dependabot/secrets", - "GET /repos/{owner}/{repo}/deployments", - "GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses", - "GET /repos/{owner}/{repo}/environments", - "GET /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies", - "GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/apps", - "GET /repos/{owner}/{repo}/events", - "GET /repos/{owner}/{repo}/forks", - "GET /repos/{owner}/{repo}/hooks", - "GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries", - "GET /repos/{owner}/{repo}/invitations", - "GET /repos/{owner}/{repo}/issues", - "GET /repos/{owner}/{repo}/issues/comments", - "GET /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions", - "GET /repos/{owner}/{repo}/issues/events", - "GET /repos/{owner}/{repo}/issues/{issue_number}/comments", - "GET /repos/{owner}/{repo}/issues/{issue_number}/events", - "GET /repos/{owner}/{repo}/issues/{issue_number}/labels", - "GET /repos/{owner}/{repo}/issues/{issue_number}/reactions", - "GET /repos/{owner}/{repo}/issues/{issue_number}/timeline", - "GET /repos/{owner}/{repo}/keys", - "GET /repos/{owner}/{repo}/labels", - "GET /repos/{owner}/{repo}/milestones", - "GET /repos/{owner}/{repo}/milestones/{milestone_number}/labels", - "GET /repos/{owner}/{repo}/notifications", - "GET /repos/{owner}/{repo}/pages/builds", - "GET /repos/{owner}/{repo}/projects", - "GET /repos/{owner}/{repo}/pulls", - "GET /repos/{owner}/{repo}/pulls/comments", - "GET /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions", - "GET /repos/{owner}/{repo}/pulls/{pull_number}/comments", - "GET /repos/{owner}/{repo}/pulls/{pull_number}/commits", - "GET /repos/{owner}/{repo}/pulls/{pull_number}/files", - "GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews", - "GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments", - "GET /repos/{owner}/{repo}/releases", - "GET /repos/{owner}/{repo}/releases/{release_id}/assets", - "GET /repos/{owner}/{repo}/releases/{release_id}/reactions", - "GET /repos/{owner}/{repo}/rules/branches/{branch}", - "GET /repos/{owner}/{repo}/rulesets", - "GET /repos/{owner}/{repo}/rulesets/rule-suites", - "GET /repos/{owner}/{repo}/secret-scanning/alerts", - "GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}/locations", - "GET /repos/{owner}/{repo}/security-advisories", - "GET /repos/{owner}/{repo}/stargazers", - "GET /repos/{owner}/{repo}/subscribers", - "GET /repos/{owner}/{repo}/tags", - "GET /repos/{owner}/{repo}/teams", - "GET /repos/{owner}/{repo}/topics", - "GET /repositories", - "GET /repositories/{repository_id}/environments/{environment_name}/secrets", - "GET /repositories/{repository_id}/environments/{environment_name}/variables", - "GET /search/code", - "GET /search/commits", - "GET /search/issues", - "GET /search/labels", - "GET /search/repositories", - "GET /search/topics", - "GET /search/users", - "GET /teams/{team_id}/discussions", - "GET /teams/{team_id}/discussions/{discussion_number}/comments", - "GET /teams/{team_id}/discussions/{discussion_number}/comments/{comment_number}/reactions", - "GET /teams/{team_id}/discussions/{discussion_number}/reactions", - "GET /teams/{team_id}/invitations", - "GET /teams/{team_id}/members", - "GET /teams/{team_id}/projects", - "GET /teams/{team_id}/repos", - "GET /teams/{team_id}/teams", - "GET /user/blocks", - "GET /user/codespaces", - "GET /user/codespaces/secrets", - "GET /user/emails", - "GET /user/followers", - "GET /user/following", - "GET /user/gpg_keys", - "GET /user/installations", - "GET /user/installations/{installation_id}/repositories", - "GET /user/issues", - "GET /user/keys", - "GET /user/marketplace_purchases", - "GET /user/marketplace_purchases/stubbed", - "GET /user/memberships/orgs", - "GET /user/migrations", - "GET /user/migrations/{migration_id}/repositories", - "GET /user/orgs", - "GET /user/packages", - "GET /user/packages/{package_type}/{package_name}/versions", - "GET /user/public_emails", - "GET /user/repos", - "GET /user/repository_invitations", - "GET /user/social_accounts", - "GET /user/ssh_signing_keys", - "GET /user/starred", - "GET /user/subscriptions", - "GET /user/teams", - "GET /users", - "GET /users/{username}/events", - "GET /users/{username}/events/orgs/{org}", - "GET /users/{username}/events/public", - "GET /users/{username}/followers", - "GET /users/{username}/following", - "GET /users/{username}/gists", - "GET /users/{username}/gpg_keys", - "GET /users/{username}/keys", - "GET /users/{username}/orgs", - "GET /users/{username}/packages", - "GET /users/{username}/projects", - "GET /users/{username}/received_events", - "GET /users/{username}/received_events/public", - "GET /users/{username}/repos", - "GET /users/{username}/social_accounts", - "GET /users/{username}/ssh_signing_keys", - "GET /users/{username}/starred", - "GET /users/{username}/subscriptions" - ]; - function isPaginatingEndpoint(arg) { - if (typeof arg === "string") { - return paginatingEndpoints.includes(arg); - } else { - return false; - } - } - function paginateRest(octokit) { - return { - paginate: Object.assign(paginate.bind(null, octokit), { - iterator: iterator.bind(null, octokit) - }) - }; - } - paginateRest.VERSION = VERSION; -}); - -// ../node_modules/@actions/github/lib/utils.js -var require_utils9 = __commonJS((exports) => { - var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) { - if (k2 === undefined) - k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { - return m[k]; - } }; - } - Object.defineProperty(o, k2, desc); - } : function(o, m, k, k2) { - if (k2 === undefined) - k2 = k; - o[k2] = m[k]; - }); - var __setModuleDefault = exports && exports.__setModuleDefault || (Object.create ? function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); - } : function(o, v) { - o["default"] = v; - }); - var __importStar = exports && exports.__importStar || function(mod) { - if (mod && mod.__esModule) - return mod; - var result = {}; - if (mod != null) { - for (var k in mod) - if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) - __createBinding(result, mod, k); - } - __setModuleDefault(result, mod); - return result; - }; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getOctokitOptions = exports.GitHub = exports.defaults = exports.context = undefined; - var Context = __importStar(require_context3()); - var Utils = __importStar(require_utils8()); - var core_1 = require_dist_node18(); - var plugin_rest_endpoint_methods_1 = require_dist_node19(); - var plugin_paginate_rest_1 = require_dist_node20(); - exports.context = new Context.Context; - var baseUrl = Utils.getApiBaseUrl(); - exports.defaults = { - baseUrl, - request: { - agent: Utils.getProxyAgent(baseUrl), - fetch: Utils.getProxyFetch(baseUrl) - } - }; - exports.GitHub = core_1.Octokit.plugin(plugin_rest_endpoint_methods_1.restEndpointMethods, plugin_paginate_rest_1.paginateRest).defaults(exports.defaults); - function getOctokitOptions(token, options) { - const opts = Object.assign({}, options || {}); - const auth = Utils.getAuthString(token, opts); - if (auth) { - opts.auth = auth; - } - return opts; - } - exports.getOctokitOptions = getOctokitOptions; -}); - -// ../node_modules/@actions/github/lib/github.js -var require_github2 = __commonJS((exports) => { - var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) { - if (k2 === undefined) - k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { - return m[k]; - } }; - } - Object.defineProperty(o, k2, desc); - } : function(o, m, k, k2) { - if (k2 === undefined) - k2 = k; - o[k2] = m[k]; - }); - var __setModuleDefault = exports && exports.__setModuleDefault || (Object.create ? function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); - } : function(o, v) { - o["default"] = v; - }); - var __importStar = exports && exports.__importStar || function(mod) { - if (mod && mod.__esModule) - return mod; - var result = {}; - if (mod != null) { - for (var k in mod) - if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) - __createBinding(result, mod, k); - } - __setModuleDefault(result, mod); - return result; - }; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getOctokit = exports.context = undefined; - var Context = __importStar(require_context3()); - var utils_1 = require_utils9(); - exports.context = new Context.Context; - function getOctokit(token, options, ...additionalPlugins) { - const GitHubWithPlugins = utils_1.GitHub.plugin(...additionalPlugins); - return new GitHubWithPlugins((0, utils_1.getOctokitOptions)(token, options)); - } - exports.getOctokit = getOctokit; -}); - // src/jobs/post.ts var import_exec = __toESM(require_exec(), 1); -var import_core2 = __toESM(require_core(), 1); +var import_core = __toESM(require_core(), 1); var import_artifact = __toESM(require_artifact2(), 1); import * as fs from "node:fs"; import * as path from "node:path"; -// src/help/pulls.ts -var import_core = __toESM(require_core(), 1); -var import_github = __toESM(require_github2(), 1); -async function getPullRequestNumber() { - let token = import_core.getInput("github_token") || process.env.GITHUB_TOKEN; - let prNumber = import_core.getInput("github_pull_request_number"); - if (prNumber.length > 0) { - return parseInt(prNumber); - } - if (import_github.context.eventName === "pull_request") { - return import_github.context.payload.pull_request.number; - } - if (token) { - let octokit = import_github.getOctokit(token); - let branch = import_github.context.ref.replace("refs/heads/", ""); - const { data: pulls } = await octokit.rest.pulls.list({ - state: "open", - owner: import_github.context.repo.owner, - repo: import_github.context.repo.repo, - head: `${import_github.context.actor}:${branch}` - }); - if (pulls.length > 0) { - return pulls[0].number; - } - } - return null; -} - // src/constants.ts var HOST = "localhost"; var YDB_GRPC_PORT = 2135; @@ -93125,50 +89426,45 @@ ${renderChart("operation_type=write", metrics["write_latency_ms"])} // src/jobs/post.ts (async function post() { - let cwd = import_core2.getState("CWD"); - let sdk = import_core2.getInput("sdk_name", { required: true }); + let cwd = import_core.getState("CWD"); + let sdk = import_core.getInput("sdk_name", { required: true }); + let prn = import_core.getState("PRN"); let end = new Date; - let start = new Date(import_core2.getState("YDB_START_TIME")); + let start = new Date(import_core.getState("YDB_START_TIME")); let artifactClient = new import_artifact.DefaultArtifactClient; - import_core2.saveState("YDB_END_TIME", end.toISOString()); - import_core2.debug("Collecting metrics..."); + import_core.saveState("YDB_END_TIME", end.toISOString()); + import_core.debug("Collecting metrics..."); let metrics = await collectPrometheus(start, end, defaultMetrics.metrics); - import_core2.debug(`Metrics: ${Object.keys(metrics)}`); - import_core2.debug("Rendering report..."); + import_core.debug(`Metrics: ${Object.keys(metrics)}`); + import_core.debug("Rendering report..."); let report = renderReport(sdk, metrics); - import_core2.debug(`Report: ${report}`); - import_core2.debug("Writing report..."); - let reportPath = path.join(cwd, `report.md`); - fs.writeFileSync(reportPath, report, { encoding: "utf-8" }); - import_core2.debug(`Report written to ${reportPath}`); + import_core.debug(`Report: ${report}`); { - import_core2.debug("Upload report as an artifact..."); + import_core.debug("Writing report..."); + let reportPath = path.join(cwd, `${sdk}-report.md`); + fs.writeFileSync(reportPath, report, { encoding: "utf-8" }); + import_core.debug(`Report written to ${reportPath}`); + import_core.debug("Upload report as an artifact..."); let { id } = await artifactClient.uploadArtifact(`${sdk}-report.md`, [reportPath], cwd, { retentionDays: 1 }); - import_core2.debug(`Report uploaded as an artifact ${id}`); - } - import_core2.debug("Aquire pull request number..."); - let prNumber = await getPullRequestNumber(); - import_core2.debug(`Pull request number: ${prNumber}`); - if (prNumber) { - import_core2.debug("Writing pull number..."); - let pullPath = path.join(cwd, "pull.txt"); - fs.writeFileSync(pullPath, prNumber.toFixed(0), { encoding: "utf-8" }); - import_core2.debug(`Pull number written to ${pullPath}`); - import_core2.debug("Upload pull number as an artifact..."); + import_core.debug(`Report uploaded as an artifact ${id}`); + } + { + import_core.debug("Writing pull number..."); + let pullPath = path.join(cwd, `${sdk}-pull.txt`); + fs.writeFileSync(pullPath, prn, { encoding: "utf-8" }); + import_core.debug(`Pull number written to ${pullPath}`); + import_core.debug("Upload pull number as an artifact..."); let { id } = await artifactClient.uploadArtifact(`${sdk}-pull.txt`, [pullPath], cwd, { retentionDays: 1 }); - import_core2.debug(`Pull number uploaded as an artifact ${id}`); + import_core.debug(`Pull number uploaded as an artifact ${id}`); } - import_core2.debug("Stopping YDB..."); + import_core.debug("Stopping YDB..."); await import_exec.exec(`docker`, [`compose`, `-f`, `compose.yaml`, `down`], { cwd }); - import_core2.debug(`YDB stopped at ${end}`); + import_core.debug(`YDB stopped at ${end}`); let duration = end.getTime() - start.getTime(); - import_core2.debug(`YDB SLO Test duration: ${duration}ms.`); - import_core2.debug("Cleaning up temp directory..."); + import_core.debug(`YDB SLO Test duration: ${duration}ms.`); + import_core.debug("Cleaning up temp directory..."); fs.rmSync(cwd, { recursive: true }); - if (!prNumber) { - import_core2.setFailed("Pull Request number could not be determined."); - } })(); -//# debugId=9CF0280D5DE8654164756E2164756E21 -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2lvL2xpYi9pby11dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9pby9saWIvaW8uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2V4ZWMvbGliL3Rvb2xydW5uZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2V4ZWMvbGliL2V4ZWMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2NvcmUvbGliL3V0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9jb3JlL2xpYi9jb21tYW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9jb3JlL2xpYi9maWxlLWNvbW1hbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2h0dHAtY2xpZW50L2xpYi9wcm94eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdHVubmVsL2xpYi90dW5uZWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29yZS9zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvZXJyb3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvY29uc3RhbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi90aW1lcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9kZXBzL3N0cmVhbXNlYXJjaC9zYm1oLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZmFzdGlmeS9idXNib3kvZGVwcy9kaWNlci9saWIvUGFydFN0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGZhc3RpZnkvYnVzYm95L2xpYi91dGlscy9nZXRMaW1pdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGZhc3RpZnkvYnVzYm95L2RlcHMvZGljZXIvbGliL0hlYWRlclBhcnNlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGZhc3RpZnkvYnVzYm95L2RlcHMvZGljZXIvbGliL0RpY2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZmFzdGlmeS9idXNib3kvbGliL3V0aWxzL2RlY29kZVRleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9saWIvdXRpbHMvcGFyc2VQYXJhbXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9saWIvdXRpbHMvYmFzZW5hbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9saWIvdHlwZXMvbXVsdGlwYXJ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZmFzdGlmeS9idXNib3kvbGliL3V0aWxzL0RlY29kZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9saWIvdHlwZXMvdXJsZW5jb2RlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGZhc3RpZnkvYnVzYm95L2xpYi9tYWluLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL2NvbnN0YW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9mZXRjaC9nbG9iYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9mZXRjaC9zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL3dlYmlkbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9mZXRjaC9kYXRhVVJMLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL2ZpbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvZm9ybWRhdGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvYm9keS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb3JlL3JlcXVlc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9kaXNwYXRjaGVyLWJhc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29yZS9jb25uZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2xsaHR0cC91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9sbGh0dHAvY29uc3RhbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2hhbmRsZXIvUmVkaXJlY3RIYW5kbGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ludGVyY2VwdG9yL3JlZGlyZWN0SW50ZXJjZXB0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbGxodHRwL2xsaHR0cC13YXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2xsaHR0cC9sbGh0dHBfc2ltZC13YXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NsaWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9ub2RlL2ZpeGVkLXF1ZXVlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3Bvb2wtc3RhdHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvcG9vbC1iYXNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3Bvb2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYmFsYW5jZWQtcG9vbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb21wYXQvZGlzcGF0Y2hlci13ZWFrcmVmLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FnZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9yZWFkYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvYWJvcnQtc2lnbmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hcGktcmVxdWVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvYXBpLXN0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvYXBpLXBpcGVsaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hcGktdXBncmFkZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvYXBpLWNvbm5lY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYXBpL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1lcnJvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbW9jay9tb2NrLXN5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbW9jay9tb2NrLXV0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1pbnRlcmNlcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL21vY2stY2xpZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1wb29sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svcGx1cmFsaXplci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL3BlbmRpbmctaW50ZXJjZXB0b3JzLWZvcm1hdHRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL21vY2stYWdlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvcHJveHktYWdlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaGFuZGxlci9SZXRyeUhhbmRsZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZ2xvYmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2hhbmRsZXIvRGVjb3JhdG9ySGFuZGxlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9mZXRjaC9oZWFkZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL3Jlc3BvbnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL3JlcXVlc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmlsZWFwaS9zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZpbGVhcGkvcHJvZ3Jlc3NldmVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9maWxlYXBpL2VuY29kaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZpbGVhcGkvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9maWxlYXBpL2ZpbGVyZWFkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY2FjaGUvc3ltYm9scy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jYWNoZS91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NhY2hlL2NhY2hlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NhY2hlL2NhY2hlc3RvcmFnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb29raWVzL2NvbnN0YW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb29raWVzL3V0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29va2llcy9wYXJzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb29raWVzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYnNvY2tldC9jb25zdGFudHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2Vic29ja2V0L3N5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2Vic29ja2V0L2V2ZW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWJzb2NrZXQvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWJzb2NrZXQvY29ubmVjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWJzb2NrZXQvZnJhbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2Vic29ja2V0L3JlY2VpdmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYnNvY2tldC93ZWJzb2NrZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvaHR0cC1jbGllbnQvbGliL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9odHRwLWNsaWVudC9saWIvYXV0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9saWIvb2lkYy11dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9saWIvc3VtbWFyeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9saWIvcGF0aC11dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9saWIvcGxhdGZvcm0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2NvcmUvbGliL2NvcmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2FydGlmYWN0L2xpYi9pbnRlcm5hbC9zaGFyZWQvY29uZmlnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9qc29uLXR5cGluZ3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lL2J1aWxkL2NvbW1vbmpzL2Jhc2U2NC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUvYnVpbGQvY29tbW9uanMvcHJvdG9idWZqcy11dGY4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9iaW5hcnktZm9ybWF0LWNvbnRyYWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9nb29nLXZhcmludC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUvYnVpbGQvY29tbW9uanMvcGItbG9uZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUvYnVpbGQvY29tbW9uanMvYmluYXJ5LXJlYWRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUvYnVpbGQvY29tbW9uanMvYXNzZXJ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9iaW5hcnktd3JpdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9qc29uLWZvcm1hdC1jb250cmFjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUvYnVpbGQvY29tbW9uanMvbWVzc2FnZS10eXBlLWNvbnRyYWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9sb3dlci1jYW1lbC1jYXNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9yZWZsZWN0aW9uLWluZm8uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lL2J1aWxkL2NvbW1vbmpzL29uZW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9yZWZsZWN0aW9uLXR5cGUtY2hlY2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lL2J1aWxkL2NvbW1vbmpzL3JlZmxlY3Rpb24tbG9uZy1jb252ZXJ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9yZWZsZWN0aW9uLWpzb24tcmVhZGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9yZWZsZWN0aW9uLWpzb24td3JpdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9yZWZsZWN0aW9uLXNjYWxhci1kZWZhdWx0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9yZWZsZWN0aW9uLWJpbmFyeS1yZWFkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lL2J1aWxkL2NvbW1vbmpzL3JlZmxlY3Rpb24tYmluYXJ5LXdyaXRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUvYnVpbGQvY29tbW9uanMvcmVmbGVjdGlvbi1jcmVhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lL2J1aWxkL2NvbW1vbmpzL3JlZmxlY3Rpb24tbWVyZ2UtcGFydGlhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUvYnVpbGQvY29tbW9uanMvcmVmbGVjdGlvbi1lcXVhbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lL2J1aWxkL2NvbW1vbmpzL21lc3NhZ2UtdHlwZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUvYnVpbGQvY29tbW9uanMvcmVmbGVjdGlvbi1jb250YWlucy1tZXNzYWdlLXR5cGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lL2J1aWxkL2NvbW1vbmpzL2VudW0tb2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvYXJ0aWZhY3QvbGliL2dlbmVyYXRlZC9nb29nbGUvcHJvdG9idWYvdGltZXN0YW1wLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9hcnRpZmFjdC9saWIvZ2VuZXJhdGVkL2dvb2dsZS9wcm90b2J1Zi93cmFwcGVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUtcnBjL2J1aWxkL2NvbW1vbmpzL3JlZmxlY3Rpb24taW5mby5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUtcnBjL2J1aWxkL2NvbW1vbmpzL3NlcnZpY2UtdHlwZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUtcnBjL2J1aWxkL2NvbW1vbmpzL3JwYy1lcnJvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUtcnBjL2J1aWxkL2NvbW1vbmpzL3JwYy1vcHRpb25zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS1ycGMvYnVpbGQvY29tbW9uanMvZGVmZXJyZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lLXJwYy9idWlsZC9jb21tb25qcy9ycGMtb3V0cHV0LXN0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUtcnBjL2J1aWxkL2NvbW1vbmpzL3VuYXJ5LWNhbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lLXJwYy9idWlsZC9jb21tb25qcy9zZXJ2ZXItc3RyZWFtaW5nLWNhbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lLXJwYy9idWlsZC9jb21tb25qcy9jbGllbnQtc3RyZWFtaW5nLWNhbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lLXJwYy9idWlsZC9jb21tb25qcy9kdXBsZXgtc3RyZWFtaW5nLWNhbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lLXJwYy9idWlsZC9jb21tb25qcy90ZXN0LXRyYW5zcG9ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUtcnBjL2J1aWxkL2NvbW1vbmpzL3JwYy1pbnRlcmNlcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUtcnBjL2J1aWxkL2NvbW1vbmpzL3NlcnZlci1jYWxsLWNvbnRleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lLXJwYy9idWlsZC9jb21tb25qcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvYXJ0aWZhY3QvbGliL2dlbmVyYXRlZC9yZXN1bHRzL2FwaS92MS9hcnRpZmFjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdHdpcnAtdHMvYnVpbGQvdHdpcnAvY29udGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdHdpcnAtdHMvYnVpbGQvdHdpcnAvaG9va3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3R3aXJwLXRzL2J1aWxkL3R3aXJwL2Vycm9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdHdpcnAtdHMvYnVpbGQvdHdpcnAvcmVxdWVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdHdpcnAtdHMvYnVpbGQvdHdpcnAvc2VydmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy90d2lycC10cy9idWlsZC90d2lycC9pbnRlcmNlcHRvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2RvdC1vYmplY3QvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3R3aXJwLXRzL2J1aWxkL3R3aXJwL2h0dHAuY2xpZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy90d2lycC10cy9idWlsZC90d2lycC9nYXRld2F5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy90d2lycC10cy9idWlsZC90d2lycC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvYXJ0aWZhY3QvbGliL2dlbmVyYXRlZC9yZXN1bHRzL2FwaS92MS9hcnRpZmFjdC50d2lycC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvYXJ0aWZhY3QvbGliL2dlbmVyYXRlZC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvYXJ0aWZhY3QvbGliL2ludGVybmFsL3VwbG9hZC9yZXRlbnRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2FydGlmYWN0L2xpYi9pbnRlcm5hbC91cGxvYWQvcGF0aC1hbmQtYXJ0aWZhY3QtbmFtZS12YWxpZGF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9hcnRpZmFjdC9saWIvaW50ZXJuYWwvc2hhcmVkL3VzZXItYWdlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2FydGlmYWN0L2xpYi9pbnRlcm5hbC9zaGFyZWQvZXJyb3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9hcnRpZmFjdC9saWIvaW50ZXJuYWwvc2hhcmVkL2FydGlmYWN0LXR3aXJwLWNsaWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvYXJ0aWZhY3QvbGliL2ludGVybmFsL3VwbG9hZC91cGxvYWQtemlwLXNwZWNpZmljYXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2p3dC1kZWNvZGUvYnVpbGQvand0LWRlY29kZS5janMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2FydGlmYWN0L2xpYi9pbnRlcm5hbC9zaGFyZWQvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3BpcGVsaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2xvZ2dlci9kaXN0L2NvbW1vbmpzL2xvZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2xvZ2dlci9kaXN0L2NvbW1vbmpzL2RlYnVnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvbG9nZ2VyL2Rpc3QvY29tbW9uanMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9sb2cuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9hYm9ydC1jb250cm9sbGVyL2Rpc3QvY29tbW9uanMvQWJvcnRFcnJvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2Fib3J0LWNvbnRyb2xsZXIvZGlzdC9jb21tb25qcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtdXRpbC9kaXN0L2NvbW1vbmpzL2NyZWF0ZUFib3J0YWJsZVByb21pc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXV0aWwvZGlzdC9jb21tb25qcy9yYW5kb20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXV0aWwvZGlzdC9jb21tb25qcy9kZWxheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtdXRpbC9kaXN0L2NvbW1vbmpzL2Fib3J0ZXJVdGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtdXRpbC9kaXN0L2NvbW1vbmpzL29iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtdXRpbC9kaXN0L2NvbW1vbmpzL2Vycm9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS11dGlsL2Rpc3QvY29tbW9uanMvc2hhMjU2LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS11dGlsL2Rpc3QvY29tbW9uanMvdHlwZUd1YXJkcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtdXRpbC9kaXN0L2NvbW1vbmpzL3V1aWRVdGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtdXRpbC9kaXN0L2NvbW1vbmpzL2NoZWNrRW52aXJvbm1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXV0aWwvZGlzdC9jb21tb25qcy9ieXRlc0VuY29kaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS11dGlsL2Rpc3QvY29tbW9uanMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy91dGlsL3Nhbml0aXplci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3BvbGljaWVzL2xvZ1BvbGljeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3BvbGljaWVzL3JlZGlyZWN0UG9saWN5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvdXRpbC91c2VyQWdlbnRQbGF0Zm9ybS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL2NvbnN0YW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3V0aWwvdXNlckFnZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvcG9saWNpZXMvdXNlckFnZW50UG9saWN5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvdXRpbC90eXBlR3VhcmRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvdXRpbC9maWxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvdXRpbC9jb25jYXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9wb2xpY2llcy9tdWx0aXBhcnRQb2xpY3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9wb2xpY2llcy9kZWNvbXByZXNzUmVzcG9uc2VQb2xpY3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy91dGlsL2hlbHBlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9yZXRyeVN0cmF0ZWdpZXMvdGhyb3R0bGluZ1JldHJ5U3RyYXRlZ3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9yZXRyeVN0cmF0ZWdpZXMvZXhwb25lbnRpYWxSZXRyeVN0cmF0ZWd5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvcG9saWNpZXMvcmV0cnlQb2xpY3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9wb2xpY2llcy9kZWZhdWx0UmV0cnlQb2xpY3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9odHRwSGVhZGVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3BvbGljaWVzL2Zvcm1EYXRhUG9saWN5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9tcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvZGVidWcvc3JjL2NvbW1vbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvZGVidWcvc3JjL2Jyb3dzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2RlYnVnL3NyYy9ub2RlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2FnZW50LWJhc2UvZGlzdC9oZWxwZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9hZ2VudC1iYXNlL2Rpc3QvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2h0dHBzLXByb3h5LWFnZW50L2Rpc3QvcGFyc2UtcHJveHktcmVzcG9uc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2h0dHBzLXByb3h5LWFnZW50L2Rpc3QvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2h0dHAtcHJveHktYWdlbnQvZGlzdC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3BvbGljaWVzL3Byb3h5UG9saWN5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvcG9saWNpZXMvc2V0Q2xpZW50UmVxdWVzdElkUG9saWN5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvcG9saWNpZXMvdGxzUG9saWN5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS10cmFjaW5nL2Rpc3QvY29tbW9uanMvdHJhY2luZ0NvbnRleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXRyYWNpbmcvZGlzdC9jb21tb25qcy9zdGF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtdHJhY2luZy9kaXN0L2NvbW1vbmpzL2luc3RydW1lbnRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtdHJhY2luZy9kaXN0L2NvbW1vbmpzL3RyYWNpbmdDbGllbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXRyYWNpbmcvZGlzdC9jb21tb25qcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3V0aWwvaW5zcGVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3Jlc3RFcnJvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3BvbGljaWVzL3RyYWNpbmdQb2xpY3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9jcmVhdGVQaXBlbGluZUZyb21PcHRpb25zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvbm9kZUh0dHBDbGllbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9kZWZhdWx0SHR0cENsaWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3BpcGVsaW5lUmVxdWVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3BvbGljaWVzL2V4cG9uZW50aWFsUmV0cnlQb2xpY3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9wb2xpY2llcy9zeXN0ZW1FcnJvclJldHJ5UG9saWN5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvcG9saWNpZXMvdGhyb3R0bGluZ1JldHJ5UG9saWN5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvdXRpbC90b2tlbkN5Y2xlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3BvbGljaWVzL2JlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9wb2xpY2llcy9uZEpzb25Qb2xpY3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9wb2xpY2llcy9hdXhpbGlhcnlBdXRoZW50aWNhdGlvbkhlYWRlclBvbGljeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1hdXRoL2Rpc3QvY29tbW9uanMvYXp1cmVLZXlDcmVkZW50aWFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1hdXRoL2Rpc3QvY29tbW9uanMva2V5Q3JlZGVudGlhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtYXV0aC9kaXN0L2NvbW1vbmpzL2F6dXJlTmFtZWRLZXlDcmVkZW50aWFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1hdXRoL2Rpc3QvY29tbW9uanMvYXp1cmVTQVNDcmVkZW50aWFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1hdXRoL2Rpc3QvY29tbW9uanMvdG9rZW5DcmVkZW50aWFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1hdXRoL2Rpc3QvY29tbW9uanMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLWh0dHAtY29tcGF0L2Rpc3QvY29tbW9uanMvcG9saWNpZXMvZGlzYWJsZUtlZXBBbGl2ZVBvbGljeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtY2xpZW50L2Rpc3QvY29tbW9uanMvYmFzZTY0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1jbGllbnQvZGlzdC9jb21tb25qcy9pbnRlcmZhY2VzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1jbGllbnQvZGlzdC9jb21tb25qcy91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtY2xpZW50L2Rpc3QvY29tbW9uanMvc2VyaWFsaXplci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtY2xpZW50L2Rpc3QvY29tbW9uanMvc3RhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLWNsaWVudC9kaXN0L2NvbW1vbmpzL29wZXJhdGlvbkhlbHBlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLWNsaWVudC9kaXN0L2NvbW1vbmpzL2Rlc2VyaWFsaXphdGlvblBvbGljeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtY2xpZW50L2Rpc3QvY29tbW9uanMvaW50ZXJmYWNlSGVscGVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtY2xpZW50L2Rpc3QvY29tbW9uanMvc2VyaWFsaXphdGlvblBvbGljeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtY2xpZW50L2Rpc3QvY29tbW9uanMvcGlwZWxpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLWNsaWVudC9kaXN0L2NvbW1vbmpzL2h0dHBDbGllbnRDYWNoZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtY2xpZW50L2Rpc3QvY29tbW9uanMvdXJsSGVscGVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtY2xpZW50L2Rpc3QvY29tbW9uanMvbG9nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1jbGllbnQvZGlzdC9jb21tb25qcy9zZXJ2aWNlQ2xpZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1jbGllbnQvZGlzdC9jb21tb25qcy9hdXRob3JpemVSZXF1ZXN0T25DbGFpbUNoYWxsZW5nZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtY2xpZW50L2Rpc3QvY29tbW9uanMvYXV0aG9yaXplUmVxdWVzdE9uVGVuYW50Q2hhbGxlbmdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1jbGllbnQvZGlzdC9jb21tb25qcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtaHR0cC1jb21wYXQvZGlzdC9jb21tb25qcy91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1odHRwLWNvbXBhdC9kaXN0L2NvbW1vbmpzL3Jlc3BvbnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1odHRwLWNvbXBhdC9kaXN0L2NvbW1vbmpzL2V4dGVuZGVkQ2xpZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1odHRwLWNvbXBhdC9kaXN0L2NvbW1vbmpzL3BvbGljaWVzL3JlcXVlc3RQb2xpY3lGYWN0b3J5UG9saWN5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1odHRwLWNvbXBhdC9kaXN0L2NvbW1vbmpzL2h0dHBDbGllbnRBZGFwdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1odHRwLWNvbXBhdC9kaXN0L2NvbW1vbmpzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mYXN0LXhtbC1wYXJzZXIvc3JjL3V0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Zhc3QteG1sLXBhcnNlci9zcmMvdmFsaWRhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mYXN0LXhtbC1wYXJzZXIvc3JjL3htbHBhcnNlci9PcHRpb25zQnVpbGRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvZmFzdC14bWwtcGFyc2VyL3NyYy94bWxwYXJzZXIveG1sTm9kZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvZmFzdC14bWwtcGFyc2VyL3NyYy94bWxwYXJzZXIvRG9jVHlwZVJlYWRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvc3RybnVtL3N0cm51bS5qcyIsICIuLi9ub2RlX21vZHVsZXMvZmFzdC14bWwtcGFyc2VyL3NyYy9pZ25vcmVBdHRyaWJ1dGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mYXN0LXhtbC1wYXJzZXIvc3JjL3htbHBhcnNlci9PcmRlcmVkT2JqUGFyc2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mYXN0LXhtbC1wYXJzZXIvc3JjL3htbHBhcnNlci9ub2RlMmpzb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Zhc3QteG1sLXBhcnNlci9zcmMveG1scGFyc2VyL1hNTFBhcnNlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvZmFzdC14bWwtcGFyc2VyL3NyYy94bWxidWlsZGVyL29yZGVyZWRKczJYbWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Zhc3QteG1sLXBhcnNlci9zcmMveG1sYnVpbGRlci9qc29uMnhtbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvZmFzdC14bWwtcGFyc2VyL3NyYy9meHAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXhtbC9kaXN0L2NvbW1vbmpzL3htbC5jb21tb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXhtbC9kaXN0L2NvbW1vbmpzL3htbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUteG1sL2Rpc3QvY29tbW9uanMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLWxyby9kaXN0L2NvbW1vbmpzL2xvZ2dlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtbHJvL2Rpc3QvY29tbW9uanMvcG9sbGVyL2NvbnN0YW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtbHJvL2Rpc3QvY29tbW9uanMvcG9sbGVyL29wZXJhdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtbHJvL2Rpc3QvY29tbW9uanMvaHR0cC9vcGVyYXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLWxyby9kaXN0L2NvbW1vbmpzL3BvbGxlci9wb2xsZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLWxyby9kaXN0L2NvbW1vbmpzL2h0dHAvcG9sbGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1scm8vZGlzdC9jb21tb25qcy9sZWdhY3kvbHJvRW5naW5lL29wZXJhdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtbHJvL2Rpc3QvY29tbW9uanMvbGVnYWN5L3BvbGxlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtbHJvL2Rpc3QvY29tbW9uanMvbGVnYWN5L2xyb0VuZ2luZS9scm9FbmdpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLWxyby9kaXN0L2NvbW1vbmpzL2xlZ2FjeS9scm9FbmdpbmUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLWxyby9kaXN0L2NvbW1vbmpzL2xlZ2FjeS9wb2xsT3BlcmF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1scm8vZGlzdC9jb21tb25qcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL3N0b3JhZ2UtYmxvYi9kaXN0L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9hcnRpZmFjdC9saWIvaW50ZXJuYWwvdXBsb2FkL2Jsb2ItdXBsb2FkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9taW5pbWF0Y2gvbGliL3BhdGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2JhbGFuY2VkLW1hdGNoL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9icmFjZS1leHBhbnNpb24vaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL21pbmltYXRjaC9taW5pbWF0Y2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWRkaXItZ2xvYi9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXN5bmMvZGlzdC9hc3luYy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZ3JhY2VmdWwtZnMvcG9seWZpbGxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9ncmFjZWZ1bC1mcy9sZWdhY3ktc3RyZWFtcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZ3JhY2VmdWwtZnMvY2xvbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2dyYWNlZnVsLWZzL2dyYWNlZnVsLWZzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9pcy1zdHJlYW0vaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Byb2Nlc3MtbmV4dGljay1hcmdzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9pc2FycmF5L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sYXp5c3RyZWFtL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbm9kZV9tb2R1bGVzL3NhZmUtYnVmZmVyL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jb3JlLXV0aWwtaXMvbGliL3V0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2luaGVyaXRzL2luaGVyaXRzX2Jyb3dzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2luaGVyaXRzL2luaGVyaXRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sYXp5c3RyZWFtL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvQnVmZmVyTGlzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbGF6eXN0cmVhbS9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL2Rlc3Ryb3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3V0aWwtZGVwcmVjYXRlL25vZGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xhenlzdHJlYW0vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV93cml0YWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbGF6eXN0cmVhbS9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX2R1cGxleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbGF6eXN0cmVhbS9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL25vZGVfbW9kdWxlcy9zdHJpbmdfZGVjb2Rlci9saWIvc3RyaW5nX2RlY29kZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xhenlzdHJlYW0vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV9yZWFkYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbGF6eXN0cmVhbS9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3RyYW5zZm9ybS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbGF6eXN0cmVhbS9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3Bhc3N0aHJvdWdoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sYXp5c3RyZWFtL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vcmVhZGFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xhenlzdHJlYW0vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9wYXNzdGhyb3VnaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbGF6eXN0cmVhbS9saWIvbGF6eXN0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbm9ybWFsaXplLXBhdGgvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pZGVudGl0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcHBseS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19vdmVyUmVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2NvbnN0YW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2ZyZWVHbG9iYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fcm9vdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19TeW1ib2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0UmF3VGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX29iamVjdFRvU3RyaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VHZXRUYWcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc09iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzRnVuY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29yZUpzRGF0YS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc01hc2tlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL190b1NvdXJjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNOYXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0VmFsdWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TmF0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2RlZmluZVByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VTZXRUb1N0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zaG9ydE91dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRUb1N0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlUmVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2VxLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNMZW5ndGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5TGlrZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzSXRlcmF0ZWVDYWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VUaW1lcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzT2JqZWN0TGlrZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNBcmd1bWVudHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FyZ3VtZW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9zdHViRmFsc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0J1ZmZlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNUeXBlZEFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VVbmFyeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19ub2RlVXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzVHlwZWRBcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUxpa2VLZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzUHJvdG90eXBlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25hdGl2ZUtleXNJbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlS2V5c0luLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gva2V5c0luLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZGVmYXVsdHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvb3Vycy9wcmltb3JkaWFscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZXZlbnQtdGFyZ2V0LXNoaW0vZGlzdC9ldmVudC10YXJnZXQtc2hpbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvYWJvcnQtY29udHJvbGxlci9kaXN0L2Fib3J0LWNvbnRyb2xsZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvb3Vycy91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL291cnMvZXJyb3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3ZhbGlkYXRvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Byb2Nlc3MvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL2VuZC1vZi1zdHJlYW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9kZXN0cm95LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvbGVnYWN5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvYWRkLWFib3J0LXNpZ25hbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL2J1ZmZlcl9saXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvc3RhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9mcm9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvcmVhZGFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy93cml0YWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL2R1cGxleGlmeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL2R1cGxleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL3RyYW5zZm9ybS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL3Bhc3N0aHJvdWdoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvcGlwZWxpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9jb21wb3NlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvb3BlcmF0b3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL3N0cmVhbS9wcm9taXNlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9zdHJlYW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvb3Vycy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheVB1c2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNGbGF0dGVuYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlRmxhdHRlbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2ZsYXR0ZW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbmF0aXZlQ3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hDbGVhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoRGVsZXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hHZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaEhhcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoU2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0hhc2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlQ2xlYXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzb2NJbmRleE9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZURlbGV0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19saXN0Q2FjaGVHZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlSGFzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZVNldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19MaXN0Q2FjaGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlQ2xlYXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNLZXlhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldE1hcERhdGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVEZWxldGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVHZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVIYXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVTZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTWFwQ2FjaGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0Q2FjaGVBZGQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0Q2FjaGVIYXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU2V0Q2FjaGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUZpbmRJbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNOYU4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RyaWN0SW5kZXhPZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSW5kZXhPZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUluY2x1ZGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5SW5jbHVkZXNXaXRoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5TWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NhY2hlSGFzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VEaWZmZXJlbmNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheUxpa2VPYmplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9kaWZmZXJlbmNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1NldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL25vb3AuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0VG9BcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVTZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVVuaXEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC91bmlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19vdmVyQXJnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFByb3RvdHlwZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzUGxhaW5PYmplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2dsb2Ivbm9kZV9tb2R1bGVzL21pbmltYXRjaC9kaXN0L2NvbW1vbmpzL2Fzc2VydC12YWxpZC1wYXR0ZXJuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9nbG9iL25vZGVfbW9kdWxlcy9taW5pbWF0Y2gvZGlzdC9jb21tb25qcy9icmFjZS1leHByZXNzaW9ucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZ2xvYi9ub2RlX21vZHVsZXMvbWluaW1hdGNoL2Rpc3QvY29tbW9uanMvdW5lc2NhcGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2dsb2Ivbm9kZV9tb2R1bGVzL21pbmltYXRjaC9kaXN0L2NvbW1vbmpzL2FzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvZ2xvYi9ub2RlX21vZHVsZXMvbWluaW1hdGNoL2Rpc3QvY29tbW9uanMvZXNjYXBlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9nbG9iL25vZGVfbW9kdWxlcy9taW5pbWF0Y2gvZGlzdC9jb21tb25qcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbHJ1LWNhY2hlL2Rpc3QvY29tbW9uanMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL21pbmlwYXNzL2Rpc3QvY29tbW9uanMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3BhdGgtc2N1cnJ5L2Rpc3QvY29tbW9uanMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2dsb2IvZGlzdC9jb21tb25qcy9wYXR0ZXJuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9nbG9iL2Rpc3QvY29tbW9uanMvaWdub3JlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9nbG9iL2Rpc3QvY29tbW9uanMvcHJvY2Vzc29yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9nbG9iL2Rpc3QvY29tbW9uanMvd2Fsa2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9nbG9iL2Rpc3QvY29tbW9uanMvZ2xvYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvZ2xvYi9kaXN0L2NvbW1vbmpzL2hhcy1tYWdpYy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZ2xvYi9kaXN0L2NvbW1vbmpzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9hcmNoaXZlci11dGlscy9maWxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9hcmNoaXZlci11dGlscy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXJjaGl2ZXIvbGliL2Vycm9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9hcmNoaXZlci9saWIvY29yZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvY29tcHJlc3MtY29tbW9ucy9saWIvYXJjaGl2ZXJzL2FyY2hpdmUtZW50cnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NvbXByZXNzLWNvbW1vbnMvbGliL2FyY2hpdmVycy96aXAvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY29tcHJlc3MtY29tbW9ucy9saWIvYXJjaGl2ZXJzL3ppcC9nZW5lcmFsLXB1cnBvc2UtYml0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jb21wcmVzcy1jb21tb25zL2xpYi9hcmNoaXZlcnMvemlwL3VuaXgtc3RhdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY29tcHJlc3MtY29tbW9ucy9saWIvYXJjaGl2ZXJzL3ppcC9jb25zdGFudHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NvbXByZXNzLWNvbW1vbnMvbGliL2FyY2hpdmVycy96aXAvemlwLWFyY2hpdmUtZW50cnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NvbXByZXNzLWNvbW1vbnMvbGliL3V0aWwvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NvbXByZXNzLWNvbW1vbnMvbGliL2FyY2hpdmVycy9hcmNoaXZlLW91dHB1dC1zdHJlYW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NyYy0zMi9jcmMzMi5qcyIsICIuLi9ub2RlX21vZHVsZXMvY3JjMzItc3RyZWFtL2xpYi9jcmMzMi1zdHJlYW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NyYzMyLXN0cmVhbS9saWIvZGVmbGF0ZS1jcmMzMi1zdHJlYW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NyYzMyLXN0cmVhbS9saWIvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NvbXByZXNzLWNvbW1vbnMvbGliL2FyY2hpdmVycy96aXAvemlwLWFyY2hpdmUtb3V0cHV0LXN0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvY29tcHJlc3MtY29tbW9ucy9saWIvY29tcHJlc3MtY29tbW9ucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvemlwLXN0cmVhbS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXJjaGl2ZXIvbGliL3BsdWdpbnMvemlwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9xdWV1ZS10aWNrL3F1ZXVlLW1pY3JvdGFzay5qcyIsICIuLi9ub2RlX21vZHVsZXMvcXVldWUtdGljay9wcm9jZXNzLW5leHQtdGljay5qcyIsICIuLi9ub2RlX21vZHVsZXMvZmFzdC1maWZvL2ZpeGVkLXNpemUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Zhc3QtZmlmby9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdGV4dC1kZWNvZGVyL2xpYi9wYXNzLXRocm91Z2gtZGVjb2Rlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdGV4dC1kZWNvZGVyL2xpYi91dGY4LWRlY29kZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3RleHQtZGVjb2Rlci9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvc3RyZWFteC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYjRhL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy90YXItc3RyZWFtL2hlYWRlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Rhci1zdHJlYW0vZXh0cmFjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdGFyLXN0cmVhbS9jb25zdGFudHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Rhci1zdHJlYW0vcGFjay5qcyIsICIuLi9ub2RlX21vZHVsZXMvdGFyLXN0cmVhbS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXJjaGl2ZXIvbGliL3BsdWdpbnMvdGFyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9idWZmZXItY3JjMzIvZGlzdC9pbmRleC5janMiLCAiLi4vbm9kZV9tb2R1bGVzL2FyY2hpdmVyL2xpYi9wbHVnaW5zL2pzb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2FyY2hpdmVyL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9hcnRpZmFjdC9saWIvaW50ZXJuYWwvdXBsb2FkL3ppcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvYXJ0aWZhY3QvbGliL2ludGVybmFsL3VwbG9hZC91cGxvYWQtYXJ0aWZhY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2FydGlmYWN0L25vZGVfbW9kdWxlcy9AYWN0aW9ucy9naXRodWIvbGliL2NvbnRleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2FydGlmYWN0L25vZGVfbW9kdWxlcy9AYWN0aW9ucy9naXRodWIvbGliL2ludGVybmFsL3V0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bml2ZXJzYWwtdXNlci1hZ2VudC9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2JlZm9yZS1hZnRlci1ob29rL2xpYi9yZWdpc3Rlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvYmVmb3JlLWFmdGVyLWhvb2svbGliL2FkZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYmVmb3JlLWFmdGVyLWhvb2svbGliL3JlbW92ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvYmVmb3JlLWFmdGVyLWhvb2svaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2lzLXBsYWluLW9iamVjdC9kaXN0L2lzLXBsYWluLW9iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQG9jdG9raXQvZW5kcG9pbnQvZGlzdC1ub2RlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy93ZWJpZGwtY29udmVyc2lvbnMvbGliL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy93aGF0d2ctdXJsL2xpYi91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdHI0Ni9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvd2hhdHdnLXVybC9saWIvdXJsLXN0YXRlLW1hY2hpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3doYXR3Zy11cmwvbGliL1VSTC1pbXBsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy93aGF0d2ctdXJsL2xpYi9VUkwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3doYXR3Zy11cmwvbGliL3B1YmxpYy1hcGkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL25vZGUtZmV0Y2gvbGliL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9kZXByZWNhdGlvbi9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3dyYXBweS93cmFwcHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL29uY2Uvb25jZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQG9jdG9raXQvcmVxdWVzdC9ub2RlX21vZHVsZXMvQG9jdG9raXQvcmVxdWVzdC1lcnJvci9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3JlcXVlc3QvZGlzdC1ub2RlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9ncmFwaHFsL2Rpc3Qtbm9kZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQG9jdG9raXQvYXV0aC10b2tlbi9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2NvcmUvZGlzdC1ub2RlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9hcnRpZmFjdC9ub2RlX21vZHVsZXMvQGFjdGlvbnMvZ2l0aHViL25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9wbHVnaW4tcmVzdC1lbmRwb2ludC1tZXRob2RzL2Rpc3Qtbm9kZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvYXJ0aWZhY3Qvbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2dpdGh1Yi9ub2RlX21vZHVsZXMvQG9jdG9raXQvcGx1Z2luLXBhZ2luYXRlLXJlc3QvZGlzdC1ub2RlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9hcnRpZmFjdC9ub2RlX21vZHVsZXMvQGFjdGlvbnMvZ2l0aHViL2xpYi91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvYXJ0aWZhY3Qvbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2dpdGh1Yi9saWIvZ2l0aHViLmpzIiwgIi4uL25vZGVfbW9kdWxlcy90cmF2ZXJzZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hhaW5zYXcvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2J1ZmZlcnMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2JpbmFyeS9saWIvdmFycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvYmluYXJ5L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bnppcC1zdHJlYW0vbGliL21hdGNoZXItc3RyZWFtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bnppcC1zdHJlYW0vbGliL2VudHJ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bnppcC1zdHJlYW0vbGliL3VuemlwLXN0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW56aXAtc3RyZWFtL2xpYi9wYXJzZXItc3RyZWFtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9ta2RpcnAvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuemlwLXN0cmVhbS9saWIvZXh0cmFjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW56aXAtc3RyZWFtL3VuemlwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9hcnRpZmFjdC9saWIvaW50ZXJuYWwvZG93bmxvYWQvZG93bmxvYWQtYXJ0aWZhY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2FydGlmYWN0L2xpYi9pbnRlcm5hbC9maW5kL3JldHJ5LW9wdGlvbnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3BsdWdpbi1yZXF1ZXN0LWxvZy9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2JvdHRsZW5lY2svbGlnaHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3BsdWdpbi1yZXRyeS9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2FydGlmYWN0L2xpYi9pbnRlcm5hbC9maW5kL2dldC1hcnRpZmFjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvYXJ0aWZhY3QvbGliL2ludGVybmFsL2RlbGV0ZS9kZWxldGUtYXJ0aWZhY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2FydGlmYWN0L2xpYi9pbnRlcm5hbC9maW5kL2xpc3QtYXJ0aWZhY3RzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9hcnRpZmFjdC9saWIvaW50ZXJuYWwvY2xpZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9hcnRpZmFjdC9saWIvaW50ZXJuYWwvc2hhcmVkL2ludGVyZmFjZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2FydGlmYWN0L2xpYi9hcnRpZmFjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvZ2l0aHViL2xpYi9jb250ZXh0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9naXRodWIvbGliL2ludGVybmFsL3V0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9naXRodWIvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2NvcmUvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3JlcXVlc3Qvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2VuZHBvaW50L2Rpc3Qtbm9kZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQG9jdG9raXQvcmVxdWVzdC1lcnJvci9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2dpdGh1Yi9ub2RlX21vZHVsZXMvQG9jdG9raXQvY29yZS9ub2RlX21vZHVsZXMvQG9jdG9raXQvcmVxdWVzdC9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2dpdGh1Yi9ub2RlX21vZHVsZXMvQG9jdG9raXQvY29yZS9ub2RlX21vZHVsZXMvQG9jdG9raXQvZ3JhcGhxbC9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2dpdGh1Yi9ub2RlX21vZHVsZXMvQG9jdG9raXQvY29yZS9ub2RlX21vZHVsZXMvQG9jdG9raXQvYXV0aC10b2tlbi9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2dpdGh1Yi9ub2RlX21vZHVsZXMvQG9jdG9raXQvY29yZS9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3BsdWdpbi1yZXN0LWVuZHBvaW50LW1ldGhvZHMvZGlzdC1ub2RlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9wbHVnaW4tcGFnaW5hdGUtcmVzdC9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2dpdGh1Yi9saWIvdXRpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2dpdGh1Yi9saWIvZ2l0aHViLmpzIiwgInNyYy9qb2JzL3Bvc3QudHMiLCAic3JjL2hlbHAvcHVsbHMudHMiLCAic3JjL2NvbnN0YW50cy50cyIsICJzcmMvbWV0cmljcy9wcm9tZXRoZXVzLnRzIiwgInNyYy9tZXRyaWNzL2RlZmF1bHQudHMiLCAic3JjL3JlcG9ydC9jb2xvcnMudHMiLCAic3JjL3JlcG9ydC9jaGFydC50cyIsICJzcmMvcmVwb3J0L2RlZmF1bHQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfSk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG52YXIgX2E7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldENtZFBhdGggPSBleHBvcnRzLnRyeUdldEV4ZWN1dGFibGVQYXRoID0gZXhwb3J0cy5pc1Jvb3RlZCA9IGV4cG9ydHMuaXNEaXJlY3RvcnkgPSBleHBvcnRzLmV4aXN0cyA9IGV4cG9ydHMuUkVBRE9OTFkgPSBleHBvcnRzLlVWX0ZTX09fRVhMT0NLID0gZXhwb3J0cy5JU19XSU5ET1dTID0gZXhwb3J0cy51bmxpbmsgPSBleHBvcnRzLnN5bWxpbmsgPSBleHBvcnRzLnN0YXQgPSBleHBvcnRzLnJtZGlyID0gZXhwb3J0cy5ybSA9IGV4cG9ydHMucmVuYW1lID0gZXhwb3J0cy5yZWFkbGluayA9IGV4cG9ydHMucmVhZGRpciA9IGV4cG9ydHMub3BlbiA9IGV4cG9ydHMubWtkaXIgPSBleHBvcnRzLmxzdGF0ID0gZXhwb3J0cy5jb3B5RmlsZSA9IGV4cG9ydHMuY2htb2QgPSB2b2lkIDA7XG5jb25zdCBmcyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiZnNcIikpO1xuY29uc3QgcGF0aCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwicGF0aFwiKSk7XG5fYSA9IGZzLnByb21pc2VzXG4vLyBleHBvcnQgY29uc3Qge29wZW59ID0gJ2ZzJ1xuLCBleHBvcnRzLmNobW9kID0gX2EuY2htb2QsIGV4cG9ydHMuY29weUZpbGUgPSBfYS5jb3B5RmlsZSwgZXhwb3J0cy5sc3RhdCA9IF9hLmxzdGF0LCBleHBvcnRzLm1rZGlyID0gX2EubWtkaXIsIGV4cG9ydHMub3BlbiA9IF9hLm9wZW4sIGV4cG9ydHMucmVhZGRpciA9IF9hLnJlYWRkaXIsIGV4cG9ydHMucmVhZGxpbmsgPSBfYS5yZWFkbGluaywgZXhwb3J0cy5yZW5hbWUgPSBfYS5yZW5hbWUsIGV4cG9ydHMucm0gPSBfYS5ybSwgZXhwb3J0cy5ybWRpciA9IF9hLnJtZGlyLCBleHBvcnRzLnN0YXQgPSBfYS5zdGF0LCBleHBvcnRzLnN5bWxpbmsgPSBfYS5zeW1saW5rLCBleHBvcnRzLnVubGluayA9IF9hLnVubGluaztcbi8vIGV4cG9ydCBjb25zdCB7b3Blbn0gPSAnZnMnXG5leHBvcnRzLklTX1dJTkRPV1MgPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInO1xuLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL2QwMTUzYWVlMzY3NDIyZDA4NTgxMDVhYmVjMTg2ZGE0ZGZmMGEwYzUvZGVwcy91di9pbmNsdWRlL3V2L3dpbi5oI0w2OTFcbmV4cG9ydHMuVVZfRlNfT19FWExPQ0sgPSAweDEwMDAwMDAwO1xuZXhwb3J0cy5SRUFET05MWSA9IGZzLmNvbnN0YW50cy5PX1JET05MWTtcbmZ1bmN0aW9uIGV4aXN0cyhmc1BhdGgpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgeWllbGQgZXhwb3J0cy5zdGF0KGZzUGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZXhpc3RzID0gZXhpc3RzO1xuZnVuY3Rpb24gaXNEaXJlY3RvcnkoZnNQYXRoLCB1c2VTdGF0ID0gZmFsc2UpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBzdGF0cyA9IHVzZVN0YXQgPyB5aWVsZCBleHBvcnRzLnN0YXQoZnNQYXRoKSA6IHlpZWxkIGV4cG9ydHMubHN0YXQoZnNQYXRoKTtcbiAgICAgICAgcmV0dXJuIHN0YXRzLmlzRGlyZWN0b3J5KCk7XG4gICAgfSk7XG59XG5leHBvcnRzLmlzRGlyZWN0b3J5ID0gaXNEaXJlY3Rvcnk7XG4vKipcbiAqIE9uIE9TWC9MaW51eCwgdHJ1ZSBpZiBwYXRoIHN0YXJ0cyB3aXRoICcvJy4gT24gV2luZG93cywgdHJ1ZSBmb3IgcGF0aHMgbGlrZTpcbiAqIFxcLCBcXGhlbGxvLCBcXFxcaGVsbG9cXHNoYXJlLCBDOiwgYW5kIEM6XFxoZWxsbyAoYW5kIGNvcnJlc3BvbmRpbmcgYWx0ZXJuYXRlIHNlcGFyYXRvciBjYXNlcykuXG4gKi9cbmZ1bmN0aW9uIGlzUm9vdGVkKHApIHtcbiAgICBwID0gbm9ybWFsaXplU2VwYXJhdG9ycyhwKTtcbiAgICBpZiAoIXApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpc1Jvb3RlZCgpIHBhcmFtZXRlciBcInBcIiBjYW5ub3QgYmUgZW1wdHknKTtcbiAgICB9XG4gICAgaWYgKGV4cG9ydHMuSVNfV0lORE9XUykge1xuICAgICAgICByZXR1cm4gKHAuc3RhcnRzV2l0aCgnXFxcXCcpIHx8IC9eW0EtWl06L2kudGVzdChwKSAvLyBlLmcuIFxcIG9yIFxcaGVsbG8gb3IgXFxcXGhlbGxvXG4gICAgICAgICk7IC8vIGUuZy4gQzogb3IgQzpcXGhlbGxvXG4gICAgfVxuICAgIHJldHVybiBwLnN0YXJ0c1dpdGgoJy8nKTtcbn1cbmV4cG9ydHMuaXNSb290ZWQgPSBpc1Jvb3RlZDtcbi8qKlxuICogQmVzdCBlZmZvcnQgYXR0ZW1wdCB0byBkZXRlcm1pbmUgd2hldGhlciBhIGZpbGUgZXhpc3RzIGFuZCBpcyBleGVjdXRhYmxlLlxuICogQHBhcmFtIGZpbGVQYXRoICAgIGZpbGUgcGF0aCB0byBjaGVja1xuICogQHBhcmFtIGV4dGVuc2lvbnMgIGFkZGl0aW9uYWwgZmlsZSBleHRlbnNpb25zIHRvIHRyeVxuICogQHJldHVybiBpZiBmaWxlIGV4aXN0cyBhbmQgaXMgZXhlY3V0YWJsZSwgcmV0dXJucyB0aGUgZmlsZSBwYXRoLiBvdGhlcndpc2UgZW1wdHkgc3RyaW5nLlxuICovXG5mdW5jdGlvbiB0cnlHZXRFeGVjdXRhYmxlUGF0aChmaWxlUGF0aCwgZXh0ZW5zaW9ucykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGxldCBzdGF0cyA9IHVuZGVmaW5lZDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIHRlc3QgZmlsZSBleGlzdHNcbiAgICAgICAgICAgIHN0YXRzID0geWllbGQgZXhwb3J0cy5zdGF0KGZpbGVQYXRoKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyLmNvZGUgIT09ICdFTk9FTlQnKSB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgVW5leHBlY3RlZCBlcnJvciBhdHRlbXB0aW5nIHRvIGRldGVybWluZSBpZiBleGVjdXRhYmxlIGZpbGUgZXhpc3RzICcke2ZpbGVQYXRofSc6ICR7ZXJyfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0cyAmJiBzdGF0cy5pc0ZpbGUoKSkge1xuICAgICAgICAgICAgaWYgKGV4cG9ydHMuSVNfV0lORE9XUykge1xuICAgICAgICAgICAgICAgIC8vIG9uIFdpbmRvd3MsIHRlc3QgZm9yIHZhbGlkIGV4dGVuc2lvblxuICAgICAgICAgICAgICAgIGNvbnN0IHVwcGVyRXh0ID0gcGF0aC5leHRuYW1lKGZpbGVQYXRoKS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIGlmIChleHRlbnNpb25zLnNvbWUodmFsaWRFeHQgPT4gdmFsaWRFeHQudG9VcHBlckNhc2UoKSA9PT0gdXBwZXJFeHQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmaWxlUGF0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNVbml4RXhlY3V0YWJsZShzdGF0cykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpbGVQYXRoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyB0cnkgZWFjaCBleHRlbnNpb25cbiAgICAgICAgY29uc3Qgb3JpZ2luYWxGaWxlUGF0aCA9IGZpbGVQYXRoO1xuICAgICAgICBmb3IgKGNvbnN0IGV4dGVuc2lvbiBvZiBleHRlbnNpb25zKSB7XG4gICAgICAgICAgICBmaWxlUGF0aCA9IG9yaWdpbmFsRmlsZVBhdGggKyBleHRlbnNpb247XG4gICAgICAgICAgICBzdGF0cyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgc3RhdHMgPSB5aWVsZCBleHBvcnRzLnN0YXQoZmlsZVBhdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIuY29kZSAhPT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFVuZXhwZWN0ZWQgZXJyb3IgYXR0ZW1wdGluZyB0byBkZXRlcm1pbmUgaWYgZXhlY3V0YWJsZSBmaWxlIGV4aXN0cyAnJHtmaWxlUGF0aH0nOiAke2Vycn1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3RhdHMgJiYgc3RhdHMuaXNGaWxlKCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXhwb3J0cy5JU19XSU5ET1dTKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHByZXNlcnZlIHRoZSBjYXNlIG9mIHRoZSBhY3R1YWwgZmlsZSAoc2luY2UgYW4gZXh0ZW5zaW9uIHdhcyBhcHBlbmRlZClcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpcmVjdG9yeSA9IHBhdGguZGlybmFtZShmaWxlUGF0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cHBlck5hbWUgPSBwYXRoLmJhc2VuYW1lKGZpbGVQYXRoKS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBhY3R1YWxOYW1lIG9mIHlpZWxkIGV4cG9ydHMucmVhZGRpcihkaXJlY3RvcnkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVwcGVyTmFtZSA9PT0gYWN0dWFsTmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVQYXRoID0gcGF0aC5qb2luKGRpcmVjdG9yeSwgYWN0dWFsTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFVuZXhwZWN0ZWQgZXJyb3IgYXR0ZW1wdGluZyB0byBkZXRlcm1pbmUgdGhlIGFjdHVhbCBjYXNlIG9mIHRoZSBmaWxlICcke2ZpbGVQYXRofSc6ICR7ZXJyfWApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmaWxlUGF0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1VuaXhFeGVjdXRhYmxlKHN0YXRzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpbGVQYXRoO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9KTtcbn1cbmV4cG9ydHMudHJ5R2V0RXhlY3V0YWJsZVBhdGggPSB0cnlHZXRFeGVjdXRhYmxlUGF0aDtcbmZ1bmN0aW9uIG5vcm1hbGl6ZVNlcGFyYXRvcnMocCkge1xuICAgIHAgPSBwIHx8ICcnO1xuICAgIGlmIChleHBvcnRzLklTX1dJTkRPV1MpIHtcbiAgICAgICAgLy8gY29udmVydCBzbGFzaGVzIG9uIFdpbmRvd3NcbiAgICAgICAgcCA9IHAucmVwbGFjZSgvXFwvL2csICdcXFxcJyk7XG4gICAgICAgIC8vIHJlbW92ZSByZWR1bmRhbnQgc2xhc2hlc1xuICAgICAgICByZXR1cm4gcC5yZXBsYWNlKC9cXFxcXFxcXCsvZywgJ1xcXFwnKTtcbiAgICB9XG4gICAgLy8gcmVtb3ZlIHJlZHVuZGFudCBzbGFzaGVzXG4gICAgcmV0dXJuIHAucmVwbGFjZSgvXFwvXFwvKy9nLCAnLycpO1xufVxuLy8gb24gTWFjL0xpbnV4LCB0ZXN0IHRoZSBleGVjdXRlIGJpdFxuLy8gICAgIFIgICBXICBYICBSICBXIFggUiBXIFhcbi8vICAgMjU2IDEyOCA2NCAzMiAxNiA4IDQgMiAxXG5mdW5jdGlvbiBpc1VuaXhFeGVjdXRhYmxlKHN0YXRzKSB7XG4gICAgcmV0dXJuICgoc3RhdHMubW9kZSAmIDEpID4gMCB8fFxuICAgICAgICAoKHN0YXRzLm1vZGUgJiA4KSA+IDAgJiYgc3RhdHMuZ2lkID09PSBwcm9jZXNzLmdldGdpZCgpKSB8fFxuICAgICAgICAoKHN0YXRzLm1vZGUgJiA2NCkgPiAwICYmIHN0YXRzLnVpZCA9PT0gcHJvY2Vzcy5nZXR1aWQoKSkpO1xufVxuLy8gR2V0IHRoZSBwYXRoIG9mIGNtZC5leGUgaW4gd2luZG93c1xuZnVuY3Rpb24gZ2V0Q21kUGF0aCgpIHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuIChfYSA9IHByb2Nlc3MuZW52WydDT01TUEVDJ10pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGBjbWQuZXhlYDtcbn1cbmV4cG9ydHMuZ2V0Q21kUGF0aCA9IGdldENtZFBhdGg7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pby11dGlsLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfSk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmZpbmRJblBhdGggPSBleHBvcnRzLndoaWNoID0gZXhwb3J0cy5ta2RpclAgPSBleHBvcnRzLnJtUkYgPSBleHBvcnRzLm12ID0gZXhwb3J0cy5jcCA9IHZvaWQgMDtcbmNvbnN0IGFzc2VydF8xID0gcmVxdWlyZShcImFzc2VydFwiKTtcbmNvbnN0IHBhdGggPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcInBhdGhcIikpO1xuY29uc3QgaW9VdGlsID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL2lvLXV0aWxcIikpO1xuLyoqXG4gKiBDb3BpZXMgYSBmaWxlIG9yIGZvbGRlci5cbiAqIEJhc2VkIG9mZiBvZiBzaGVsbGpzIC0gaHR0cHM6Ly9naXRodWIuY29tL3NoZWxsanMvc2hlbGxqcy9ibG9iLzkyMzdmNjZjNTJlNWRhYTQwNDU4Zjk0Zjk1NjVlMThlODEzMmY1YTYvc3JjL2NwLmpzXG4gKlxuICogQHBhcmFtICAgICBzb3VyY2UgICAgc291cmNlIHBhdGhcbiAqIEBwYXJhbSAgICAgZGVzdCAgICAgIGRlc3RpbmF0aW9uIHBhdGhcbiAqIEBwYXJhbSAgICAgb3B0aW9ucyAgIG9wdGlvbmFsLiBTZWUgQ29weU9wdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIGNwKHNvdXJjZSwgZGVzdCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgeyBmb3JjZSwgcmVjdXJzaXZlLCBjb3B5U291cmNlRGlyZWN0b3J5IH0gPSByZWFkQ29weU9wdGlvbnMob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGRlc3RTdGF0ID0gKHlpZWxkIGlvVXRpbC5leGlzdHMoZGVzdCkpID8geWllbGQgaW9VdGlsLnN0YXQoZGVzdCkgOiBudWxsO1xuICAgICAgICAvLyBEZXN0IGlzIGFuIGV4aXN0aW5nIGZpbGUsIGJ1dCBub3QgZm9yY2luZ1xuICAgICAgICBpZiAoZGVzdFN0YXQgJiYgZGVzdFN0YXQuaXNGaWxlKCkgJiYgIWZvcmNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgZGVzdCBpcyBhbiBleGlzdGluZyBkaXJlY3RvcnksIHNob3VsZCBjb3B5IGluc2lkZS5cbiAgICAgICAgY29uc3QgbmV3RGVzdCA9IGRlc3RTdGF0ICYmIGRlc3RTdGF0LmlzRGlyZWN0b3J5KCkgJiYgY29weVNvdXJjZURpcmVjdG9yeVxuICAgICAgICAgICAgPyBwYXRoLmpvaW4oZGVzdCwgcGF0aC5iYXNlbmFtZShzb3VyY2UpKVxuICAgICAgICAgICAgOiBkZXN0O1xuICAgICAgICBpZiAoISh5aWVsZCBpb1V0aWwuZXhpc3RzKHNvdXJjZSkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYG5vIHN1Y2ggZmlsZSBvciBkaXJlY3Rvcnk6ICR7c291cmNlfWApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNvdXJjZVN0YXQgPSB5aWVsZCBpb1V0aWwuc3RhdChzb3VyY2UpO1xuICAgICAgICBpZiAoc291cmNlU3RhdC5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgICAgICBpZiAoIXJlY3Vyc2l2ZSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGNvcHkuICR7c291cmNlfSBpcyBhIGRpcmVjdG9yeSwgYnV0IHRyaWVkIHRvIGNvcHkgd2l0aG91dCByZWN1cnNpdmUgZmxhZy5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHlpZWxkIGNwRGlyUmVjdXJzaXZlKHNvdXJjZSwgbmV3RGVzdCwgMCwgZm9yY2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHBhdGgucmVsYXRpdmUoc291cmNlLCBuZXdEZXN0KSA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICAvLyBhIGZpbGUgY2Fubm90IGJlIGNvcGllZCB0byBpdHNlbGZcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCcke25ld0Rlc3R9JyBhbmQgJyR7c291cmNlfScgYXJlIHRoZSBzYW1lIGZpbGVgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHlpZWxkIGNvcHlGaWxlKHNvdXJjZSwgbmV3RGVzdCwgZm9yY2UpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5leHBvcnRzLmNwID0gY3A7XG4vKipcbiAqIE1vdmVzIGEgcGF0aC5cbiAqXG4gKiBAcGFyYW0gICAgIHNvdXJjZSAgICBzb3VyY2UgcGF0aFxuICogQHBhcmFtICAgICBkZXN0ICAgICAgZGVzdGluYXRpb24gcGF0aFxuICogQHBhcmFtICAgICBvcHRpb25zICAgb3B0aW9uYWwuIFNlZSBNb3ZlT3B0aW9ucy5cbiAqL1xuZnVuY3Rpb24gbXYoc291cmNlLCBkZXN0LCBvcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBpZiAoeWllbGQgaW9VdGlsLmV4aXN0cyhkZXN0KSkge1xuICAgICAgICAgICAgbGV0IGRlc3RFeGlzdHMgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKHlpZWxkIGlvVXRpbC5pc0RpcmVjdG9yeShkZXN0KSkge1xuICAgICAgICAgICAgICAgIC8vIElmIGRlc3QgaXMgZGlyZWN0b3J5IGNvcHkgc3JjIGludG8gZGVzdFxuICAgICAgICAgICAgICAgIGRlc3QgPSBwYXRoLmpvaW4oZGVzdCwgcGF0aC5iYXNlbmFtZShzb3VyY2UpKTtcbiAgICAgICAgICAgICAgICBkZXN0RXhpc3RzID0geWllbGQgaW9VdGlsLmV4aXN0cyhkZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkZXN0RXhpc3RzKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZm9yY2UgPT0gbnVsbCB8fCBvcHRpb25zLmZvcmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIHJtUkYoZGVzdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rlc3RpbmF0aW9uIGFscmVhZHkgZXhpc3RzJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHlpZWxkIG1rZGlyUChwYXRoLmRpcm5hbWUoZGVzdCkpO1xuICAgICAgICB5aWVsZCBpb1V0aWwucmVuYW1lKHNvdXJjZSwgZGVzdCk7XG4gICAgfSk7XG59XG5leHBvcnRzLm12ID0gbXY7XG4vKipcbiAqIFJlbW92ZSBhIHBhdGggcmVjdXJzaXZlbHkgd2l0aCBmb3JjZVxuICpcbiAqIEBwYXJhbSBpbnB1dFBhdGggcGF0aCB0byByZW1vdmVcbiAqL1xuZnVuY3Rpb24gcm1SRihpbnB1dFBhdGgpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBpZiAoaW9VdGlsLklTX1dJTkRPV1MpIHtcbiAgICAgICAgICAgIC8vIENoZWNrIGZvciBpbnZhbGlkIGNoYXJhY3RlcnNcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3dpbmRvd3Mvd2luMzIvZmlsZWlvL25hbWluZy1hLWZpbGVcbiAgICAgICAgICAgIGlmICgvWypcIjw+fF0vLnRlc3QoaW5wdXRQYXRoKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRmlsZSBwYXRoIG11c3Qgbm90IGNvbnRhaW4gYCpgLCBgXCJgLCBgPGAsIGA+YCBvciBgfGAgb24gV2luZG93cycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBub3RlIGlmIHBhdGggZG9lcyBub3QgZXhpc3QsIGVycm9yIGlzIHNpbGVudFxuICAgICAgICAgICAgeWllbGQgaW9VdGlsLnJtKGlucHV0UGF0aCwge1xuICAgICAgICAgICAgICAgIGZvcmNlOiB0cnVlLFxuICAgICAgICAgICAgICAgIG1heFJldHJpZXM6IDMsXG4gICAgICAgICAgICAgICAgcmVjdXJzaXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHJldHJ5RGVsYXk6IDMwMFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGaWxlIHdhcyB1bmFibGUgdG8gYmUgcmVtb3ZlZCAke2Vycn1gKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuZXhwb3J0cy5ybVJGID0gcm1SRjtcbi8qKlxuICogTWFrZSBhIGRpcmVjdG9yeS4gIENyZWF0ZXMgdGhlIGZ1bGwgcGF0aCB3aXRoIGZvbGRlcnMgaW4gYmV0d2VlblxuICogV2lsbCB0aHJvdyBpZiBpdCBmYWlsc1xuICpcbiAqIEBwYXJhbSAgIGZzUGF0aCAgICAgICAgcGF0aCB0byBjcmVhdGVcbiAqIEByZXR1cm5zIFByb21pc2U8dm9pZD5cbiAqL1xuZnVuY3Rpb24gbWtkaXJQKGZzUGF0aCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGFzc2VydF8xLm9rKGZzUGF0aCwgJ2EgcGF0aCBhcmd1bWVudCBtdXN0IGJlIHByb3ZpZGVkJyk7XG4gICAgICAgIHlpZWxkIGlvVXRpbC5ta2Rpcihmc1BhdGgsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIH0pO1xufVxuZXhwb3J0cy5ta2RpclAgPSBta2RpclA7XG4vKipcbiAqIFJldHVybnMgcGF0aCBvZiBhIHRvb2wgaGFkIHRoZSB0b29sIGFjdHVhbGx5IGJlZW4gaW52b2tlZC4gIFJlc29sdmVzIHZpYSBwYXRocy5cbiAqIElmIHlvdSBjaGVjayBhbmQgdGhlIHRvb2wgZG9lcyBub3QgZXhpc3QsIGl0IHdpbGwgdGhyb3cuXG4gKlxuICogQHBhcmFtICAgICB0b29sICAgICAgICAgICAgICBuYW1lIG9mIHRoZSB0b29sXG4gKiBAcGFyYW0gICAgIGNoZWNrICAgICAgICAgICAgIHdoZXRoZXIgdG8gY2hlY2sgaWYgdG9vbCBleGlzdHNcbiAqIEByZXR1cm5zICAgUHJvbWlzZTxzdHJpbmc+ICAgcGF0aCB0byB0b29sXG4gKi9cbmZ1bmN0aW9uIHdoaWNoKHRvb2wsIGNoZWNrKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgaWYgKCF0b29sKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJwYXJhbWV0ZXIgJ3Rvb2wnIGlzIHJlcXVpcmVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHJlY3Vyc2l2ZSB3aGVuIGNoZWNrPXRydWVcbiAgICAgICAgaWYgKGNoZWNrKSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB5aWVsZCB3aGljaCh0b29sLCBmYWxzZSk7XG4gICAgICAgICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICAgICAgICAgIGlmIChpb1V0aWwuSVNfV0lORE9XUykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBsb2NhdGUgZXhlY3V0YWJsZSBmaWxlOiAke3Rvb2x9LiBQbGVhc2UgdmVyaWZ5IGVpdGhlciB0aGUgZmlsZSBwYXRoIGV4aXN0cyBvciB0aGUgZmlsZSBjYW4gYmUgZm91bmQgd2l0aGluIGEgZGlyZWN0b3J5IHNwZWNpZmllZCBieSB0aGUgUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZS4gQWxzbyB2ZXJpZnkgdGhlIGZpbGUgaGFzIGEgdmFsaWQgZXh0ZW5zaW9uIGZvciBhbiBleGVjdXRhYmxlIGZpbGUuYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBsb2NhdGUgZXhlY3V0YWJsZSBmaWxlOiAke3Rvb2x9LiBQbGVhc2UgdmVyaWZ5IGVpdGhlciB0aGUgZmlsZSBwYXRoIGV4aXN0cyBvciB0aGUgZmlsZSBjYW4gYmUgZm91bmQgd2l0aGluIGEgZGlyZWN0b3J5IHNwZWNpZmllZCBieSB0aGUgUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZS4gQWxzbyBjaGVjayB0aGUgZmlsZSBtb2RlIHRvIHZlcmlmeSB0aGUgZmlsZSBpcyBleGVjdXRhYmxlLmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWF0Y2hlcyA9IHlpZWxkIGZpbmRJblBhdGgodG9vbCk7XG4gICAgICAgIGlmIChtYXRjaGVzICYmIG1hdGNoZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXNbMF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH0pO1xufVxuZXhwb3J0cy53aGljaCA9IHdoaWNoO1xuLyoqXG4gKiBSZXR1cm5zIGEgbGlzdCBvZiBhbGwgb2NjdXJyZW5jZXMgb2YgdGhlIGdpdmVuIHRvb2wgb24gdGhlIHN5c3RlbSBwYXRoLlxuICpcbiAqIEByZXR1cm5zICAgUHJvbWlzZTxzdHJpbmdbXT4gIHRoZSBwYXRocyBvZiB0aGUgdG9vbFxuICovXG5mdW5jdGlvbiBmaW5kSW5QYXRoKHRvb2wpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBpZiAoIXRvb2wpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInBhcmFtZXRlciAndG9vbCcgaXMgcmVxdWlyZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gYnVpbGQgdGhlIGxpc3Qgb2YgZXh0ZW5zaW9ucyB0byB0cnlcbiAgICAgICAgY29uc3QgZXh0ZW5zaW9ucyA9IFtdO1xuICAgICAgICBpZiAoaW9VdGlsLklTX1dJTkRPV1MgJiYgcHJvY2Vzcy5lbnZbJ1BBVEhFWFQnXSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBleHRlbnNpb24gb2YgcHJvY2Vzcy5lbnZbJ1BBVEhFWFQnXS5zcGxpdChwYXRoLmRlbGltaXRlcikpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXh0ZW5zaW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbnMucHVzaChleHRlbnNpb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBpZiBpdCdzIHJvb3RlZCwgcmV0dXJuIGl0IGlmIGV4aXN0cy4gb3RoZXJ3aXNlIHJldHVybiBlbXB0eS5cbiAgICAgICAgaWYgKGlvVXRpbC5pc1Jvb3RlZCh0b29sKSkge1xuICAgICAgICAgICAgY29uc3QgZmlsZVBhdGggPSB5aWVsZCBpb1V0aWwudHJ5R2V0RXhlY3V0YWJsZVBhdGgodG9vbCwgZXh0ZW5zaW9ucyk7XG4gICAgICAgICAgICBpZiAoZmlsZVBhdGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW2ZpbGVQYXRoXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiBhbnkgcGF0aCBzZXBhcmF0b3JzLCByZXR1cm4gZW1wdHlcbiAgICAgICAgaWYgKHRvb2wuaW5jbHVkZXMocGF0aC5zZXApKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgLy8gYnVpbGQgdGhlIGxpc3Qgb2YgZGlyZWN0b3JpZXNcbiAgICAgICAgLy9cbiAgICAgICAgLy8gTm90ZSwgdGVjaG5pY2FsbHkgXCJ3aGVyZVwiIGNoZWNrcyB0aGUgY3VycmVudCBkaXJlY3Rvcnkgb24gV2luZG93cy4gRnJvbSBhIHRvb2xraXQgcGVyc3BlY3RpdmUsXG4gICAgICAgIC8vIGl0IGZlZWxzIGxpa2Ugd2Ugc2hvdWxkIG5vdCBkbyB0aGlzLiBDaGVja2luZyB0aGUgY3VycmVudCBkaXJlY3Rvcnkgc2VlbXMgbGlrZSBtb3JlIG9mIGEgdXNlXG4gICAgICAgIC8vIGNhc2Ugb2YgYSBzaGVsbCwgYW5kIHRoZSB3aGljaCgpIGZ1bmN0aW9uIGV4cG9zZWQgYnkgdGhlIHRvb2xraXQgc2hvdWxkIHN0cml2ZSBmb3IgY29uc2lzdGVuY3lcbiAgICAgICAgLy8gYWNyb3NzIHBsYXRmb3Jtcy5cbiAgICAgICAgY29uc3QgZGlyZWN0b3JpZXMgPSBbXTtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52LlBBVEgpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcCBvZiBwcm9jZXNzLmVudi5QQVRILnNwbGl0KHBhdGguZGVsaW1pdGVyKSkge1xuICAgICAgICAgICAgICAgIGlmIChwKSB7XG4gICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yaWVzLnB1c2gocCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGZpbmQgYWxsIG1hdGNoZXNcbiAgICAgICAgY29uc3QgbWF0Y2hlcyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGRpcmVjdG9yeSBvZiBkaXJlY3Rvcmllcykge1xuICAgICAgICAgICAgY29uc3QgZmlsZVBhdGggPSB5aWVsZCBpb1V0aWwudHJ5R2V0RXhlY3V0YWJsZVBhdGgocGF0aC5qb2luKGRpcmVjdG9yeSwgdG9vbCksIGV4dGVuc2lvbnMpO1xuICAgICAgICAgICAgaWYgKGZpbGVQYXRoKSB7XG4gICAgICAgICAgICAgICAgbWF0Y2hlcy5wdXNoKGZpbGVQYXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWF0Y2hlcztcbiAgICB9KTtcbn1cbmV4cG9ydHMuZmluZEluUGF0aCA9IGZpbmRJblBhdGg7XG5mdW5jdGlvbiByZWFkQ29weU9wdGlvbnMob3B0aW9ucykge1xuICAgIGNvbnN0IGZvcmNlID0gb3B0aW9ucy5mb3JjZSA9PSBudWxsID8gdHJ1ZSA6IG9wdGlvbnMuZm9yY2U7XG4gICAgY29uc3QgcmVjdXJzaXZlID0gQm9vbGVhbihvcHRpb25zLnJlY3Vyc2l2ZSk7XG4gICAgY29uc3QgY29weVNvdXJjZURpcmVjdG9yeSA9IG9wdGlvbnMuY29weVNvdXJjZURpcmVjdG9yeSA9PSBudWxsXG4gICAgICAgID8gdHJ1ZVxuICAgICAgICA6IEJvb2xlYW4ob3B0aW9ucy5jb3B5U291cmNlRGlyZWN0b3J5KTtcbiAgICByZXR1cm4geyBmb3JjZSwgcmVjdXJzaXZlLCBjb3B5U291cmNlRGlyZWN0b3J5IH07XG59XG5mdW5jdGlvbiBjcERpclJlY3Vyc2l2ZShzb3VyY2VEaXIsIGRlc3REaXIsIGN1cnJlbnREZXB0aCwgZm9yY2UpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAvLyBFbnN1cmUgdGhlcmUgaXMgbm90IGEgcnVuIGF3YXkgcmVjdXJzaXZlIGNvcHlcbiAgICAgICAgaWYgKGN1cnJlbnREZXB0aCA+PSAyNTUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGN1cnJlbnREZXB0aCsrO1xuICAgICAgICB5aWVsZCBta2RpclAoZGVzdERpcik7XG4gICAgICAgIGNvbnN0IGZpbGVzID0geWllbGQgaW9VdGlsLnJlYWRkaXIoc291cmNlRGlyKTtcbiAgICAgICAgZm9yIChjb25zdCBmaWxlTmFtZSBvZiBmaWxlcykge1xuICAgICAgICAgICAgY29uc3Qgc3JjRmlsZSA9IGAke3NvdXJjZURpcn0vJHtmaWxlTmFtZX1gO1xuICAgICAgICAgICAgY29uc3QgZGVzdEZpbGUgPSBgJHtkZXN0RGlyfS8ke2ZpbGVOYW1lfWA7XG4gICAgICAgICAgICBjb25zdCBzcmNGaWxlU3RhdCA9IHlpZWxkIGlvVXRpbC5sc3RhdChzcmNGaWxlKTtcbiAgICAgICAgICAgIGlmIChzcmNGaWxlU3RhdC5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgICAgICAgICAgLy8gUmVjdXJzZVxuICAgICAgICAgICAgICAgIHlpZWxkIGNwRGlyUmVjdXJzaXZlKHNyY0ZpbGUsIGRlc3RGaWxlLCBjdXJyZW50RGVwdGgsIGZvcmNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHlpZWxkIGNvcHlGaWxlKHNyY0ZpbGUsIGRlc3RGaWxlLCBmb3JjZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2hhbmdlIHRoZSBtb2RlIGZvciB0aGUgbmV3bHkgY3JlYXRlZCBkaXJlY3RvcnlcbiAgICAgICAgeWllbGQgaW9VdGlsLmNobW9kKGRlc3REaXIsICh5aWVsZCBpb1V0aWwuc3RhdChzb3VyY2VEaXIpKS5tb2RlKTtcbiAgICB9KTtcbn1cbi8vIEJ1ZmZlcmVkIGZpbGUgY29weVxuZnVuY3Rpb24gY29weUZpbGUoc3JjRmlsZSwgZGVzdEZpbGUsIGZvcmNlKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgaWYgKCh5aWVsZCBpb1V0aWwubHN0YXQoc3JjRmlsZSkpLmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICAgICAgICAgIC8vIHVubGluay9yZS1saW5rIGl0XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHlpZWxkIGlvVXRpbC5sc3RhdChkZXN0RmlsZSk7XG4gICAgICAgICAgICAgICAgeWllbGQgaW9VdGlsLnVubGluayhkZXN0RmlsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIC8vIFRyeSB0byBvdmVycmlkZSBmaWxlIHBlcm1pc3Npb25cbiAgICAgICAgICAgICAgICBpZiAoZS5jb2RlID09PSAnRVBFUk0nKSB7XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIGlvVXRpbC5jaG1vZChkZXN0RmlsZSwgJzA2NjYnKTtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgaW9VdGlsLnVubGluayhkZXN0RmlsZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIG90aGVyIGVycm9ycyA9IGl0IGRvZXNuJ3QgZXhpc3QsIG5vIHdvcmsgdG8gZG9cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIENvcHkgb3ZlciBzeW1saW5rXG4gICAgICAgICAgICBjb25zdCBzeW1saW5rRnVsbCA9IHlpZWxkIGlvVXRpbC5yZWFkbGluayhzcmNGaWxlKTtcbiAgICAgICAgICAgIHlpZWxkIGlvVXRpbC5zeW1saW5rKHN5bWxpbmtGdWxsLCBkZXN0RmlsZSwgaW9VdGlsLklTX1dJTkRPV1MgPyAnanVuY3Rpb24nIDogbnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoISh5aWVsZCBpb1V0aWwuZXhpc3RzKGRlc3RGaWxlKSkgfHwgZm9yY2UpIHtcbiAgICAgICAgICAgIHlpZWxkIGlvVXRpbC5jb3B5RmlsZShzcmNGaWxlLCBkZXN0RmlsZSk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlvLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfSk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmFyZ1N0cmluZ1RvQXJyYXkgPSBleHBvcnRzLlRvb2xSdW5uZXIgPSB2b2lkIDA7XG5jb25zdCBvcyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwib3NcIikpO1xuY29uc3QgZXZlbnRzID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJldmVudHNcIikpO1xuY29uc3QgY2hpbGQgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcImNoaWxkX3Byb2Nlc3NcIikpO1xuY29uc3QgcGF0aCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwicGF0aFwiKSk7XG5jb25zdCBpbyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiQGFjdGlvbnMvaW9cIikpO1xuY29uc3QgaW9VdGlsID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJAYWN0aW9ucy9pby9saWIvaW8tdXRpbFwiKSk7XG5jb25zdCB0aW1lcnNfMSA9IHJlcXVpcmUoXCJ0aW1lcnNcIik7XG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvdW5ib3VuZC1tZXRob2QgKi9cbmNvbnN0IElTX1dJTkRPV1MgPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInO1xuLypcbiAqIENsYXNzIGZvciBydW5uaW5nIGNvbW1hbmQgbGluZSB0b29scy4gSGFuZGxlcyBxdW90aW5nIGFuZCBhcmcgcGFyc2luZyBpbiBhIHBsYXRmb3JtIGFnbm9zdGljIHdheS5cbiAqL1xuY2xhc3MgVG9vbFJ1bm5lciBleHRlbmRzIGV2ZW50cy5FdmVudEVtaXR0ZXIge1xuICAgIGNvbnN0cnVjdG9yKHRvb2xQYXRoLCBhcmdzLCBvcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIGlmICghdG9vbFBhdGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhcmFtZXRlciAndG9vbFBhdGgnIGNhbm5vdCBiZSBudWxsIG9yIGVtcHR5LlwiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRvb2xQYXRoID0gdG9vbFBhdGg7XG4gICAgICAgIHRoaXMuYXJncyA9IGFyZ3MgfHwgW107XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgfVxuICAgIF9kZWJ1ZyhtZXNzYWdlKSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMubGlzdGVuZXJzICYmIHRoaXMub3B0aW9ucy5saXN0ZW5lcnMuZGVidWcpIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5saXN0ZW5lcnMuZGVidWcobWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX2dldENvbW1hbmRTdHJpbmcob3B0aW9ucywgbm9QcmVmaXgpIHtcbiAgICAgICAgY29uc3QgdG9vbFBhdGggPSB0aGlzLl9nZXRTcGF3bkZpbGVOYW1lKCk7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSB0aGlzLl9nZXRTcGF3bkFyZ3Mob3B0aW9ucyk7XG4gICAgICAgIGxldCBjbWQgPSBub1ByZWZpeCA/ICcnIDogJ1tjb21tYW5kXSc7IC8vIG9taXQgcHJlZml4IHdoZW4gcGlwZWQgdG8gYSBzZWNvbmQgdG9vbFxuICAgICAgICBpZiAoSVNfV0lORE9XUykge1xuICAgICAgICAgICAgLy8gV2luZG93cyArIGNtZCBmaWxlXG4gICAgICAgICAgICBpZiAodGhpcy5faXNDbWRGaWxlKCkpIHtcbiAgICAgICAgICAgICAgICBjbWQgKz0gdG9vbFBhdGg7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBhIG9mIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgY21kICs9IGAgJHthfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gV2luZG93cyArIHZlcmJhdGltXG4gICAgICAgICAgICBlbHNlIGlmIChvcHRpb25zLndpbmRvd3NWZXJiYXRpbUFyZ3VtZW50cykge1xuICAgICAgICAgICAgICAgIGNtZCArPSBgXCIke3Rvb2xQYXRofVwiYDtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGEgb2YgYXJncykge1xuICAgICAgICAgICAgICAgICAgICBjbWQgKz0gYCAke2F9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBXaW5kb3dzIChyZWd1bGFyKVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY21kICs9IHRoaXMuX3dpbmRvd3NRdW90ZUNtZEFyZyh0b29sUGF0aCk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBhIG9mIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgY21kICs9IGAgJHt0aGlzLl93aW5kb3dzUXVvdGVDbWRBcmcoYSl9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBPU1gvTGludXggLSB0aGlzIGNhbiBsaWtlbHkgYmUgaW1wcm92ZWQgd2l0aCBzb21lIGZvcm0gb2YgcXVvdGluZy5cbiAgICAgICAgICAgIC8vIGNyZWF0aW5nIHByb2Nlc3NlcyBvbiBVbml4IGlzIGZ1bmRhbWVudGFsbHkgZGlmZmVyZW50IHRoYW4gV2luZG93cy5cbiAgICAgICAgICAgIC8vIG9uIFVuaXgsIGV4ZWN2cCgpIHRha2VzIGFuIGFyZyBhcnJheS5cbiAgICAgICAgICAgIGNtZCArPSB0b29sUGF0aDtcbiAgICAgICAgICAgIGZvciAoY29uc3QgYSBvZiBhcmdzKSB7XG4gICAgICAgICAgICAgICAgY21kICs9IGAgJHthfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNtZDtcbiAgICB9XG4gICAgX3Byb2Nlc3NMaW5lQnVmZmVyKGRhdGEsIHN0ckJ1ZmZlciwgb25MaW5lKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsZXQgcyA9IHN0ckJ1ZmZlciArIGRhdGEudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIGxldCBuID0gcy5pbmRleE9mKG9zLkVPTCk7XG4gICAgICAgICAgICB3aGlsZSAobiA+IC0xKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGluZSA9IHMuc3Vic3RyaW5nKDAsIG4pO1xuICAgICAgICAgICAgICAgIG9uTGluZShsaW5lKTtcbiAgICAgICAgICAgICAgICAvLyB0aGUgcmVzdCBvZiB0aGUgc3RyaW5nIC4uLlxuICAgICAgICAgICAgICAgIHMgPSBzLnN1YnN0cmluZyhuICsgb3MuRU9MLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgbiA9IHMuaW5kZXhPZihvcy5FT0wpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHM7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgLy8gc3RyZWFtaW5nIGxpbmVzIHRvIGNvbnNvbGUgaXMgYmVzdCBlZmZvcnQuICBEb24ndCBmYWlsIGEgYnVpbGQuXG4gICAgICAgICAgICB0aGlzLl9kZWJ1ZyhgZXJyb3IgcHJvY2Vzc2luZyBsaW5lLiBGYWlsZWQgd2l0aCBlcnJvciAke2Vycn1gKTtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgICBfZ2V0U3Bhd25GaWxlTmFtZSgpIHtcbiAgICAgICAgaWYgKElTX1dJTkRPV1MpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9pc0NtZEZpbGUoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcm9jZXNzLmVudlsnQ09NU1BFQyddIHx8ICdjbWQuZXhlJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy50b29sUGF0aDtcbiAgICB9XG4gICAgX2dldFNwYXduQXJncyhvcHRpb25zKSB7XG4gICAgICAgIGlmIChJU19XSU5ET1dTKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5faXNDbWRGaWxlKCkpIHtcbiAgICAgICAgICAgICAgICBsZXQgYXJnbGluZSA9IGAvRCAvUyAvQyBcIiR7dGhpcy5fd2luZG93c1F1b3RlQ21kQXJnKHRoaXMudG9vbFBhdGgpfWA7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBhIG9mIHRoaXMuYXJncykge1xuICAgICAgICAgICAgICAgICAgICBhcmdsaW5lICs9ICcgJztcbiAgICAgICAgICAgICAgICAgICAgYXJnbGluZSArPSBvcHRpb25zLndpbmRvd3NWZXJiYXRpbUFyZ3VtZW50c1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBhXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuX3dpbmRvd3NRdW90ZUNtZEFyZyhhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXJnbGluZSArPSAnXCInO1xuICAgICAgICAgICAgICAgIHJldHVybiBbYXJnbGluZV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuYXJncztcbiAgICB9XG4gICAgX2VuZHNXaXRoKHN0ciwgZW5kKSB7XG4gICAgICAgIHJldHVybiBzdHIuZW5kc1dpdGgoZW5kKTtcbiAgICB9XG4gICAgX2lzQ21kRmlsZSgpIHtcbiAgICAgICAgY29uc3QgdXBwZXJUb29sUGF0aCA9IHRoaXMudG9vbFBhdGgudG9VcHBlckNhc2UoKTtcbiAgICAgICAgcmV0dXJuICh0aGlzLl9lbmRzV2l0aCh1cHBlclRvb2xQYXRoLCAnLkNNRCcpIHx8XG4gICAgICAgICAgICB0aGlzLl9lbmRzV2l0aCh1cHBlclRvb2xQYXRoLCAnLkJBVCcpKTtcbiAgICB9XG4gICAgX3dpbmRvd3NRdW90ZUNtZEFyZyhhcmcpIHtcbiAgICAgICAgLy8gZm9yIC5leGUsIGFwcGx5IHRoZSBub3JtYWwgcXVvdGluZyBydWxlcyB0aGF0IGxpYnV2IGFwcGxpZXNcbiAgICAgICAgaWYgKCF0aGlzLl9pc0NtZEZpbGUoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3V2UXVvdGVDbWRBcmcoYXJnKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBvdGhlcndpc2UgYXBwbHkgcXVvdGluZyBydWxlcyBzcGVjaWZpYyB0byB0aGUgY21kLmV4ZSBjb21tYW5kIGxpbmUgcGFyc2VyLlxuICAgICAgICAvLyB0aGUgbGlidXYgcnVsZXMgYXJlIGdlbmVyaWMgYW5kIGFyZSBub3QgZGVzaWduZWQgc3BlY2lmaWNhbGx5IGZvciBjbWQuZXhlXG4gICAgICAgIC8vIGNvbW1hbmQgbGluZSBwYXJzZXIuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIGZvciBhIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHRoZSBjbWQuZXhlIGNvbW1hbmQgbGluZSBwYXJzZXIsIHJlZmVyIHRvXG4gICAgICAgIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNDA5NDY5OS9ob3ctZG9lcy10aGUtd2luZG93cy1jb21tYW5kLWludGVycHJldGVyLWNtZC1leGUtcGFyc2Utc2NyaXB0cy83OTcwOTEyIzc5NzA5MTJcbiAgICAgICAgLy8gbmVlZCBxdW90ZXMgZm9yIGVtcHR5IGFyZ1xuICAgICAgICBpZiAoIWFyZykge1xuICAgICAgICAgICAgcmV0dXJuICdcIlwiJztcbiAgICAgICAgfVxuICAgICAgICAvLyBkZXRlcm1pbmUgd2hldGhlciB0aGUgYXJnIG5lZWRzIHRvIGJlIHF1b3RlZFxuICAgICAgICBjb25zdCBjbWRTcGVjaWFsQ2hhcnMgPSBbXG4gICAgICAgICAgICAnICcsXG4gICAgICAgICAgICAnXFx0JyxcbiAgICAgICAgICAgICcmJyxcbiAgICAgICAgICAgICcoJyxcbiAgICAgICAgICAgICcpJyxcbiAgICAgICAgICAgICdbJyxcbiAgICAgICAgICAgICddJyxcbiAgICAgICAgICAgICd7JyxcbiAgICAgICAgICAgICd9JyxcbiAgICAgICAgICAgICdeJyxcbiAgICAgICAgICAgICc9JyxcbiAgICAgICAgICAgICc7JyxcbiAgICAgICAgICAgICchJyxcbiAgICAgICAgICAgIFwiJ1wiLFxuICAgICAgICAgICAgJysnLFxuICAgICAgICAgICAgJywnLFxuICAgICAgICAgICAgJ2AnLFxuICAgICAgICAgICAgJ34nLFxuICAgICAgICAgICAgJ3wnLFxuICAgICAgICAgICAgJzwnLFxuICAgICAgICAgICAgJz4nLFxuICAgICAgICAgICAgJ1wiJ1xuICAgICAgICBdO1xuICAgICAgICBsZXQgbmVlZHNRdW90ZXMgPSBmYWxzZTtcbiAgICAgICAgZm9yIChjb25zdCBjaGFyIG9mIGFyZykge1xuICAgICAgICAgICAgaWYgKGNtZFNwZWNpYWxDaGFycy5zb21lKHggPT4geCA9PT0gY2hhcikpIHtcbiAgICAgICAgICAgICAgICBuZWVkc1F1b3RlcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gc2hvcnQtY2lyY3VpdCBpZiBxdW90ZXMgbm90IG5lZWRlZFxuICAgICAgICBpZiAoIW5lZWRzUXVvdGVzKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJnO1xuICAgICAgICB9XG4gICAgICAgIC8vIHRoZSBmb2xsb3dpbmcgcXVvdGluZyBydWxlcyBhcmUgdmVyeSBzaW1pbGFyIHRvIHRoZSBydWxlcyB0aGF0IGJ5IGxpYnV2IGFwcGxpZXMuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIDEpIHdyYXAgdGhlIHN0cmluZyBpbiBxdW90ZXNcbiAgICAgICAgLy9cbiAgICAgICAgLy8gMikgZG91YmxlLXVwIHF1b3RlcyAtIGkuZS4gXCIgPT4gXCJcIlxuICAgICAgICAvL1xuICAgICAgICAvLyAgICB0aGlzIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBsaWJ1diBxdW90aW5nIHJ1bGVzLiBsaWJ1diByZXBsYWNlcyBcIiB3aXRoIFxcXCIsIHdoaWNoIHVuZm9ydHVuYXRlbHlcbiAgICAgICAgLy8gICAgZG9lc24ndCB3b3JrIHdlbGwgd2l0aCBhIGNtZC5leGUgY29tbWFuZCBsaW5lLlxuICAgICAgICAvL1xuICAgICAgICAvLyAgICBub3RlLCByZXBsYWNpbmcgXCIgd2l0aCBcIlwiIGFsc28gd29ya3Mgd2VsbCBpZiB0aGUgYXJnIGlzIHBhc3NlZCB0byBhIGRvd25zdHJlYW0gLk5FVCBjb25zb2xlIGFwcC5cbiAgICAgICAgLy8gICAgZm9yIGV4YW1wbGUsIHRoZSBjb21tYW5kIGxpbmU6XG4gICAgICAgIC8vICAgICAgICAgIGZvby5leGUgXCJteWFyZzpcIlwibXkgdmFsXCJcIlwiXG4gICAgICAgIC8vICAgIGlzIHBhcnNlZCBieSBhIC5ORVQgY29uc29sZSBhcHAgaW50byBhbiBhcmcgYXJyYXk6XG4gICAgICAgIC8vICAgICAgICAgIFsgXCJteWFyZzpcXFwibXkgdmFsXFxcIlwiIF1cbiAgICAgICAgLy8gICAgd2hpY2ggaXMgdGhlIHNhbWUgZW5kIHJlc3VsdCB3aGVuIGFwcGx5aW5nIGxpYnV2IHF1b3RpbmcgcnVsZXMuIGFsdGhvdWdoIHRoZSBhY3R1YWxcbiAgICAgICAgLy8gICAgY29tbWFuZCBsaW5lIGZyb20gbGlidXYgcXVvdGluZyBydWxlcyB3b3VsZCBsb29rIGxpa2U6XG4gICAgICAgIC8vICAgICAgICAgIGZvby5leGUgXCJteWFyZzpcXFwibXkgdmFsXFxcIlwiXG4gICAgICAgIC8vXG4gICAgICAgIC8vIDMpIGRvdWJsZS11cCBzbGFzaGVzIHRoYXQgcHJlY2VkZSBhIHF1b3RlLFxuICAgICAgICAvLyAgICBlLmcuICBoZWxsbyBcXHdvcmxkICAgID0+IFwiaGVsbG8gXFx3b3JsZFwiXG4gICAgICAgIC8vICAgICAgICAgIGhlbGxvXFxcIndvcmxkICAgID0+IFwiaGVsbG9cXFxcXCJcIndvcmxkXCJcbiAgICAgICAgLy8gICAgICAgICAgaGVsbG9cXFxcXCJ3b3JsZCAgID0+IFwiaGVsbG9cXFxcXFxcXFwiXCJ3b3JsZFwiXG4gICAgICAgIC8vICAgICAgICAgIGhlbGxvIHdvcmxkXFwgICAgPT4gXCJoZWxsbyB3b3JsZFxcXFxcIlxuICAgICAgICAvL1xuICAgICAgICAvLyAgICB0ZWNobmljYWxseSB0aGlzIGlzIG5vdCByZXF1aXJlZCBmb3IgYSBjbWQuZXhlIGNvbW1hbmQgbGluZSwgb3IgdGhlIGJhdGNoIGFyZ3VtZW50IHBhcnNlci5cbiAgICAgICAgLy8gICAgdGhlIHJlYXNvbnMgZm9yIGluY2x1ZGluZyB0aGlzIGFzIGEgLmNtZCBxdW90aW5nIHJ1bGUgYXJlOlxuICAgICAgICAvL1xuICAgICAgICAvLyAgICBhKSB0aGlzIGlzIG9wdGltaXplZCBmb3IgdGhlIHNjZW5hcmlvIHdoZXJlIHRoZSBhcmd1bWVudCBpcyBwYXNzZWQgZnJvbSB0aGUgLmNtZCBmaWxlIHRvIGFuXG4gICAgICAgIC8vICAgICAgIGV4dGVybmFsIHByb2dyYW0uIG1hbnkgcHJvZ3JhbXMgKGUuZy4gLk5FVCBjb25zb2xlIGFwcHMpIHJlbHkgb24gdGhlIHNsYXNoLWRvdWJsaW5nIHJ1bGUuXG4gICAgICAgIC8vXG4gICAgICAgIC8vICAgIGIpIGl0J3Mgd2hhdCB3ZSd2ZSBiZWVuIGRvaW5nIHByZXZpb3VzbHkgKGJ5IGRlZmVycmluZyB0byBub2RlIGRlZmF1bHQgYmVoYXZpb3IpIGFuZCB3ZVxuICAgICAgICAvLyAgICAgICBoYXZlbid0IGhlYXJkIGFueSBjb21wbGFpbnRzIGFib3V0IHRoYXQgYXNwZWN0LlxuICAgICAgICAvL1xuICAgICAgICAvLyBub3RlLCBhIHdlYWtuZXNzIG9mIHRoZSBxdW90aW5nIHJ1bGVzIGNob3NlbiBoZXJlLCBpcyB0aGF0ICUgaXMgbm90IGVzY2FwZWQuIGluIGZhY3QsICUgY2Fubm90IGJlXG4gICAgICAgIC8vIGVzY2FwZWQgd2hlbiB1c2VkIG9uIHRoZSBjb21tYW5kIGxpbmUgZGlyZWN0bHkgLSBldmVuIHRob3VnaCB3aXRoaW4gYSAuY21kIGZpbGUgJSBjYW4gYmUgZXNjYXBlZFxuICAgICAgICAvLyBieSB1c2luZyAlJS5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gdGhlIHNhdmluZyBncmFjZSBpcywgb24gdGhlIGNvbW1hbmQgbGluZSwgJXZhciUgaXMgbGVmdCBhcy1pcyBpZiB2YXIgaXMgbm90IGRlZmluZWQuIHRoaXMgY29udHJhc3RzXG4gICAgICAgIC8vIHRoZSBsaW5lIHBhcnNpbmcgcnVsZXMgd2l0aGluIGEgLmNtZCBmaWxlLCB3aGVyZSBpZiB2YXIgaXMgbm90IGRlZmluZWQgaXQgaXMgcmVwbGFjZWQgd2l0aCBub3RoaW5nLlxuICAgICAgICAvL1xuICAgICAgICAvLyBvbmUgb3B0aW9uIHRoYXQgd2FzIGV4cGxvcmVkIHdhcyByZXBsYWNpbmcgJSB3aXRoIF4lIC0gaS5lLiAldmFyJSA9PiBeJXZhcl4lLiB0aGlzIGhhY2sgd291bGRcbiAgICAgICAgLy8gb2Z0ZW4gd29yaywgc2luY2UgaXQgaXMgdW5saWtlbHkgdGhhdCB2YXJeIHdvdWxkIGV4aXN0LCBhbmQgdGhlIF4gY2hhcmFjdGVyIGlzIHJlbW92ZWQgd2hlbiB0aGVcbiAgICAgICAgLy8gdmFyaWFibGUgaXMgdXNlZC4gdGhlIHByb2JsZW0sIGhvd2V2ZXIsIGlzIHRoYXQgXiBpcyBub3QgcmVtb3ZlZCB3aGVuICUqIGlzIHVzZWQgdG8gcGFzcyB0aGUgYXJnc1xuICAgICAgICAvLyB0byBhbiBleHRlcm5hbCBwcm9ncmFtLlxuICAgICAgICAvL1xuICAgICAgICAvLyBhbiB1bmV4cGxvcmVkIHBvdGVudGlhbCBzb2x1dGlvbiBmb3IgdGhlICUgZXNjYXBpbmcgcHJvYmxlbSwgaXMgdG8gY3JlYXRlIGEgd3JhcHBlciAuY21kIGZpbGUuXG4gICAgICAgIC8vICUgY2FuIGJlIGVzY2FwZWQgd2l0aGluIGEgLmNtZCBmaWxlLlxuICAgICAgICBsZXQgcmV2ZXJzZSA9ICdcIic7XG4gICAgICAgIGxldCBxdW90ZUhpdCA9IHRydWU7XG4gICAgICAgIGZvciAobGV0IGkgPSBhcmcubGVuZ3RoOyBpID4gMDsgaS0tKSB7XG4gICAgICAgICAgICAvLyB3YWxrIHRoZSBzdHJpbmcgaW4gcmV2ZXJzZVxuICAgICAgICAgICAgcmV2ZXJzZSArPSBhcmdbaSAtIDFdO1xuICAgICAgICAgICAgaWYgKHF1b3RlSGl0ICYmIGFyZ1tpIC0gMV0gPT09ICdcXFxcJykge1xuICAgICAgICAgICAgICAgIHJldmVyc2UgKz0gJ1xcXFwnOyAvLyBkb3VibGUgdGhlIHNsYXNoXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChhcmdbaSAtIDFdID09PSAnXCInKSB7XG4gICAgICAgICAgICAgICAgcXVvdGVIaXQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldmVyc2UgKz0gJ1wiJzsgLy8gZG91YmxlIHRoZSBxdW90ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcXVvdGVIaXQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXZlcnNlICs9ICdcIic7XG4gICAgICAgIHJldHVybiByZXZlcnNlXG4gICAgICAgICAgICAuc3BsaXQoJycpXG4gICAgICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgICAgICAuam9pbignJyk7XG4gICAgfVxuICAgIF91dlF1b3RlQ21kQXJnKGFyZykge1xuICAgICAgICAvLyBUb29sIHJ1bm5lciB3cmFwcyBjaGlsZF9wcm9jZXNzLnNwYXduKCkgYW5kIG5lZWRzIHRvIGFwcGx5IHRoZSBzYW1lIHF1b3RpbmcgYXNcbiAgICAgICAgLy8gTm9kZSBpbiBjZXJ0YWluIGNhc2VzIHdoZXJlIHRoZSB1bmRvY3VtZW50ZWQgc3Bhd24gb3B0aW9uIHdpbmRvd3NWZXJiYXRpbUFyZ3VtZW50c1xuICAgICAgICAvLyBpcyB1c2VkLlxuICAgICAgICAvL1xuICAgICAgICAvLyBTaW5jZSB0aGlzIGZ1bmN0aW9uIGlzIGEgcG9ydCBvZiBxdW90ZV9jbWRfYXJnIGZyb20gTm9kZSA0LnggKHRlY2huaWNhbGx5LCBsaWIgVVYsXG4gICAgICAgIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvYmxvYi92NC54L2RlcHMvdXYvc3JjL3dpbi9wcm9jZXNzLmMgZm9yIGRldGFpbHMpLFxuICAgICAgICAvLyBwYXN0aW5nIGNvcHlyaWdodCBub3RpY2UgZnJvbSBOb2RlIHdpdGhpbiB0aGlzIGZ1bmN0aW9uOlxuICAgICAgICAvL1xuICAgICAgICAvLyAgICAgIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICAgICAgICAvL1xuICAgICAgICAvLyAgICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiAgICAgICAgLy8gICAgICBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0b1xuICAgICAgICAvLyAgICAgIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlXG4gICAgICAgIC8vICAgICAgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yXG4gICAgICAgIC8vICAgICAgc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiAgICAgICAgLy8gICAgICBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICAgICAgICAvL1xuICAgICAgICAvLyAgICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4gICAgICAgIC8vICAgICAgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gICAgICAgIC8vXG4gICAgICAgIC8vICAgICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICAgICAgICAvLyAgICAgIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICAgICAgICAvLyAgICAgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICAgICAgICAvLyAgICAgIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAgICAgICAgLy8gICAgICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lOR1xuICAgICAgICAvLyAgICAgIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1NcbiAgICAgICAgLy8gICAgICBJTiBUSEUgU09GVFdBUkUuXG4gICAgICAgIGlmICghYXJnKSB7XG4gICAgICAgICAgICAvLyBOZWVkIGRvdWJsZSBxdW90YXRpb24gZm9yIGVtcHR5IGFyZ3VtZW50XG4gICAgICAgICAgICByZXR1cm4gJ1wiXCInO1xuICAgICAgICB9XG4gICAgICAgIGlmICghYXJnLmluY2x1ZGVzKCcgJykgJiYgIWFyZy5pbmNsdWRlcygnXFx0JykgJiYgIWFyZy5pbmNsdWRlcygnXCInKSkge1xuICAgICAgICAgICAgLy8gTm8gcXVvdGF0aW9uIG5lZWRlZFxuICAgICAgICAgICAgcmV0dXJuIGFyZztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWFyZy5pbmNsdWRlcygnXCInKSAmJiAhYXJnLmluY2x1ZGVzKCdcXFxcJykpIHtcbiAgICAgICAgICAgIC8vIE5vIGVtYmVkZGVkIGRvdWJsZSBxdW90ZXMgb3IgYmFja3NsYXNoZXMsIHNvIEkgY2FuIGp1c3Qgd3JhcFxuICAgICAgICAgICAgLy8gcXVvdGUgbWFya3MgYXJvdW5kIHRoZSB3aG9sZSB0aGluZy5cbiAgICAgICAgICAgIHJldHVybiBgXCIke2FyZ31cImA7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRXhwZWN0ZWQgaW5wdXQvb3V0cHV0OlxuICAgICAgICAvLyAgIGlucHV0IDogaGVsbG9cIndvcmxkXG4gICAgICAgIC8vICAgb3V0cHV0OiBcImhlbGxvXFxcIndvcmxkXCJcbiAgICAgICAgLy8gICBpbnB1dCA6IGhlbGxvXCJcIndvcmxkXG4gICAgICAgIC8vICAgb3V0cHV0OiBcImhlbGxvXFxcIlxcXCJ3b3JsZFwiXG4gICAgICAgIC8vICAgaW5wdXQgOiBoZWxsb1xcd29ybGRcbiAgICAgICAgLy8gICBvdXRwdXQ6IGhlbGxvXFx3b3JsZFxuICAgICAgICAvLyAgIGlucHV0IDogaGVsbG9cXFxcd29ybGRcbiAgICAgICAgLy8gICBvdXRwdXQ6IGhlbGxvXFxcXHdvcmxkXG4gICAgICAgIC8vICAgaW5wdXQgOiBoZWxsb1xcXCJ3b3JsZFxuICAgICAgICAvLyAgIG91dHB1dDogXCJoZWxsb1xcXFxcXFwid29ybGRcIlxuICAgICAgICAvLyAgIGlucHV0IDogaGVsbG9cXFxcXCJ3b3JsZFxuICAgICAgICAvLyAgIG91dHB1dDogXCJoZWxsb1xcXFxcXFxcXFxcIndvcmxkXCJcbiAgICAgICAgLy8gICBpbnB1dCA6IGhlbGxvIHdvcmxkXFxcbiAgICAgICAgLy8gICBvdXRwdXQ6IFwiaGVsbG8gd29ybGRcXFxcXCIgLSBub3RlIHRoZSBjb21tZW50IGluIGxpYnV2IGFjdHVhbGx5IHJlYWRzIFwiaGVsbG8gd29ybGRcXFwiXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXQgaXQgYXBwZWFycyB0aGUgY29tbWVudCBpcyB3cm9uZywgaXQgc2hvdWxkIGJlIFwiaGVsbG8gd29ybGRcXFxcXCJcbiAgICAgICAgbGV0IHJldmVyc2UgPSAnXCInO1xuICAgICAgICBsZXQgcXVvdGVIaXQgPSB0cnVlO1xuICAgICAgICBmb3IgKGxldCBpID0gYXJnLmxlbmd0aDsgaSA+IDA7IGktLSkge1xuICAgICAgICAgICAgLy8gd2FsayB0aGUgc3RyaW5nIGluIHJldmVyc2VcbiAgICAgICAgICAgIHJldmVyc2UgKz0gYXJnW2kgLSAxXTtcbiAgICAgICAgICAgIGlmIChxdW90ZUhpdCAmJiBhcmdbaSAtIDFdID09PSAnXFxcXCcpIHtcbiAgICAgICAgICAgICAgICByZXZlcnNlICs9ICdcXFxcJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGFyZ1tpIC0gMV0gPT09ICdcIicpIHtcbiAgICAgICAgICAgICAgICBxdW90ZUhpdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV2ZXJzZSArPSAnXFxcXCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBxdW90ZUhpdCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldmVyc2UgKz0gJ1wiJztcbiAgICAgICAgcmV0dXJuIHJldmVyc2VcbiAgICAgICAgICAgIC5zcGxpdCgnJylcbiAgICAgICAgICAgIC5yZXZlcnNlKClcbiAgICAgICAgICAgIC5qb2luKCcnKTtcbiAgICB9XG4gICAgX2Nsb25lRXhlY09wdGlvbnMob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgICAgICAgY3dkOiBvcHRpb25zLmN3ZCB8fCBwcm9jZXNzLmN3ZCgpLFxuICAgICAgICAgICAgZW52OiBvcHRpb25zLmVudiB8fCBwcm9jZXNzLmVudixcbiAgICAgICAgICAgIHNpbGVudDogb3B0aW9ucy5zaWxlbnQgfHwgZmFsc2UsXG4gICAgICAgICAgICB3aW5kb3dzVmVyYmF0aW1Bcmd1bWVudHM6IG9wdGlvbnMud2luZG93c1ZlcmJhdGltQXJndW1lbnRzIHx8IGZhbHNlLFxuICAgICAgICAgICAgZmFpbE9uU3RkRXJyOiBvcHRpb25zLmZhaWxPblN0ZEVyciB8fCBmYWxzZSxcbiAgICAgICAgICAgIGlnbm9yZVJldHVybkNvZGU6IG9wdGlvbnMuaWdub3JlUmV0dXJuQ29kZSB8fCBmYWxzZSxcbiAgICAgICAgICAgIGRlbGF5OiBvcHRpb25zLmRlbGF5IHx8IDEwMDAwXG4gICAgICAgIH07XG4gICAgICAgIHJlc3VsdC5vdXRTdHJlYW0gPSBvcHRpb25zLm91dFN0cmVhbSB8fCBwcm9jZXNzLnN0ZG91dDtcbiAgICAgICAgcmVzdWx0LmVyclN0cmVhbSA9IG9wdGlvbnMuZXJyU3RyZWFtIHx8IHByb2Nlc3Muc3RkZXJyO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBfZ2V0U3Bhd25PcHRpb25zKG9wdGlvbnMsIHRvb2xQYXRoKSB7XG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgICAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICAgICAgcmVzdWx0LmN3ZCA9IG9wdGlvbnMuY3dkO1xuICAgICAgICByZXN1bHQuZW52ID0gb3B0aW9ucy5lbnY7XG4gICAgICAgIHJlc3VsdFsnd2luZG93c1ZlcmJhdGltQXJndW1lbnRzJ10gPVxuICAgICAgICAgICAgb3B0aW9ucy53aW5kb3dzVmVyYmF0aW1Bcmd1bWVudHMgfHwgdGhpcy5faXNDbWRGaWxlKCk7XG4gICAgICAgIGlmIChvcHRpb25zLndpbmRvd3NWZXJiYXRpbUFyZ3VtZW50cykge1xuICAgICAgICAgICAgcmVzdWx0LmFyZ3YwID0gYFwiJHt0b29sUGF0aH1cImA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRXhlYyBhIHRvb2wuXG4gICAgICogT3V0cHV0IHdpbGwgYmUgc3RyZWFtZWQgdG8gdGhlIGxpdmUgY29uc29sZS5cbiAgICAgKiBSZXR1cm5zIHByb21pc2Ugd2l0aCByZXR1cm4gY29kZVxuICAgICAqXG4gICAgICogQHBhcmFtICAgICB0b29sICAgICBwYXRoIHRvIHRvb2wgdG8gZXhlY1xuICAgICAqIEBwYXJhbSAgICAgb3B0aW9ucyAgb3B0aW9uYWwgZXhlYyBvcHRpb25zLiAgU2VlIEV4ZWNPcHRpb25zXG4gICAgICogQHJldHVybnMgICBudW1iZXJcbiAgICAgKi9cbiAgICBleGVjKCkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgLy8gcm9vdCB0aGUgdG9vbCBwYXRoIGlmIGl0IGlzIHVucm9vdGVkIGFuZCBjb250YWlucyByZWxhdGl2ZSBwYXRoaW5nXG4gICAgICAgICAgICBpZiAoIWlvVXRpbC5pc1Jvb3RlZCh0aGlzLnRvb2xQYXRoKSAmJlxuICAgICAgICAgICAgICAgICh0aGlzLnRvb2xQYXRoLmluY2x1ZGVzKCcvJykgfHxcbiAgICAgICAgICAgICAgICAgICAgKElTX1dJTkRPV1MgJiYgdGhpcy50b29sUGF0aC5pbmNsdWRlcygnXFxcXCcpKSkpIHtcbiAgICAgICAgICAgICAgICAvLyBwcmVmZXIgb3B0aW9ucy5jd2QgaWYgaXQgaXMgc3BlY2lmaWVkLCBob3dldmVyIG9wdGlvbnMuY3dkIG1heSBhbHNvIG5lZWQgdG8gYmUgcm9vdGVkXG4gICAgICAgICAgICAgICAgdGhpcy50b29sUGF0aCA9IHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCB0aGlzLm9wdGlvbnMuY3dkIHx8IHByb2Nlc3MuY3dkKCksIHRoaXMudG9vbFBhdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgdGhlIHRvb2wgaXMgb25seSBhIGZpbGUgbmFtZSwgdGhlbiByZXNvbHZlIGl0IGZyb20gdGhlIFBBVEhcbiAgICAgICAgICAgIC8vIG90aGVyd2lzZSB2ZXJpZnkgaXQgZXhpc3RzIChhZGQgZXh0ZW5zaW9uIG9uIFdpbmRvd3MgaWYgbmVjZXNzYXJ5KVxuICAgICAgICAgICAgdGhpcy50b29sUGF0aCA9IHlpZWxkIGlvLndoaWNoKHRoaXMudG9vbFBhdGgsIHRydWUpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kZWJ1ZyhgZXhlYyB0b29sOiAke3RoaXMudG9vbFBhdGh9YCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGVidWcoJ2FyZ3VtZW50czonKTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGFyZyBvZiB0aGlzLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVidWcoYCAgICR7YXJnfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25zTm9uTnVsbCA9IHRoaXMuX2Nsb25lRXhlY09wdGlvbnModGhpcy5vcHRpb25zKTtcbiAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnNOb25OdWxsLnNpbGVudCAmJiBvcHRpb25zTm9uTnVsbC5vdXRTdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uc05vbk51bGwub3V0U3RyZWFtLndyaXRlKHRoaXMuX2dldENvbW1hbmRTdHJpbmcob3B0aW9uc05vbk51bGwpICsgb3MuRU9MKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhdGUgPSBuZXcgRXhlY1N0YXRlKG9wdGlvbnNOb25OdWxsLCB0aGlzLnRvb2xQYXRoKTtcbiAgICAgICAgICAgICAgICBzdGF0ZS5vbignZGVidWcnLCAobWVzc2FnZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWJ1ZyhtZXNzYWdlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmN3ZCAmJiAhKHlpZWxkIGlvVXRpbC5leGlzdHModGhpcy5vcHRpb25zLmN3ZCkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yKGBUaGUgY3dkOiAke3RoaXMub3B0aW9ucy5jd2R9IGRvZXMgbm90IGV4aXN0IWApKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZU5hbWUgPSB0aGlzLl9nZXRTcGF3bkZpbGVOYW1lKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgY3AgPSBjaGlsZC5zcGF3bihmaWxlTmFtZSwgdGhpcy5fZ2V0U3Bhd25BcmdzKG9wdGlvbnNOb25OdWxsKSwgdGhpcy5fZ2V0U3Bhd25PcHRpb25zKHRoaXMub3B0aW9ucywgZmlsZU5hbWUpKTtcbiAgICAgICAgICAgICAgICBsZXQgc3RkYnVmZmVyID0gJyc7XG4gICAgICAgICAgICAgICAgaWYgKGNwLnN0ZG91dCkge1xuICAgICAgICAgICAgICAgICAgICBjcC5zdGRvdXQub24oJ2RhdGEnLCAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5saXN0ZW5lcnMgJiYgdGhpcy5vcHRpb25zLmxpc3RlbmVycy5zdGRvdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMubGlzdGVuZXJzLnN0ZG91dChkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9uc05vbk51bGwuc2lsZW50ICYmIG9wdGlvbnNOb25OdWxsLm91dFN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNOb25OdWxsLm91dFN0cmVhbS53cml0ZShkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGJ1ZmZlciA9IHRoaXMuX3Byb2Nlc3NMaW5lQnVmZmVyKGRhdGEsIHN0ZGJ1ZmZlciwgKGxpbmUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxpc3RlbmVycyAmJiB0aGlzLm9wdGlvbnMubGlzdGVuZXJzLnN0ZGxpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmxpc3RlbmVycy5zdGRsaW5lKGxpbmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IGVycmJ1ZmZlciA9ICcnO1xuICAgICAgICAgICAgICAgIGlmIChjcC5zdGRlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY3Auc3RkZXJyLm9uKCdkYXRhJywgKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnByb2Nlc3NTdGRlcnIgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5saXN0ZW5lcnMgJiYgdGhpcy5vcHRpb25zLmxpc3RlbmVycy5zdGRlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMubGlzdGVuZXJzLnN0ZGVycihkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9uc05vbk51bGwuc2lsZW50ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uc05vbk51bGwuZXJyU3RyZWFtICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uc05vbk51bGwub3V0U3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcyA9IG9wdGlvbnNOb25OdWxsLmZhaWxPblN0ZEVyclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG9wdGlvbnNOb25OdWxsLmVyclN0cmVhbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG9wdGlvbnNOb25OdWxsLm91dFN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLndyaXRlKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyYnVmZmVyID0gdGhpcy5fcHJvY2Vzc0xpbmVCdWZmZXIoZGF0YSwgZXJyYnVmZmVyLCAobGluZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMubGlzdGVuZXJzICYmIHRoaXMub3B0aW9ucy5saXN0ZW5lcnMuZXJybGluZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMubGlzdGVuZXJzLmVycmxpbmUobGluZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjcC5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLnByb2Nlc3NFcnJvciA9IGVyci5tZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5wcm9jZXNzRXhpdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUucHJvY2Vzc0Nsb3NlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLkNoZWNrQ29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjcC5vbignZXhpdCcsIChjb2RlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLnByb2Nlc3NFeGl0Q29kZSA9IGNvZGU7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLnByb2Nlc3NFeGl0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWJ1ZyhgRXhpdCBjb2RlICR7Y29kZX0gcmVjZWl2ZWQgZnJvbSB0b29sICcke3RoaXMudG9vbFBhdGh9J2ApO1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5DaGVja0NvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY3Aub24oJ2Nsb3NlJywgKGNvZGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUucHJvY2Vzc0V4aXRDb2RlID0gY29kZTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUucHJvY2Vzc0V4aXRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLnByb2Nlc3NDbG9zZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWJ1ZyhgU1RESU8gc3RyZWFtcyBoYXZlIGNsb3NlZCBmb3IgdG9vbCAnJHt0aGlzLnRvb2xQYXRofSdgKTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuQ2hlY2tDb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHN0YXRlLm9uKCdkb25lJywgKGVycm9yLCBleGl0Q29kZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3RkYnVmZmVyLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnc3RkbGluZScsIHN0ZGJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycmJ1ZmZlci5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2VycmxpbmUnLCBlcnJidWZmZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNwLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGV4aXRDb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjcC5zdGRpbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjaGlsZCBwcm9jZXNzIG1pc3Npbmcgc3RkaW4nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjcC5zdGRpbi5lbmQodGhpcy5vcHRpb25zLmlucHV0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuVG9vbFJ1bm5lciA9IFRvb2xSdW5uZXI7XG4vKipcbiAqIENvbnZlcnQgYW4gYXJnIHN0cmluZyB0byBhbiBhcnJheSBvZiBhcmdzLiBIYW5kbGVzIGVzY2FwaW5nXG4gKlxuICogQHBhcmFtICAgIGFyZ1N0cmluZyAgIHN0cmluZyBvZiBhcmd1bWVudHNcbiAqIEByZXR1cm5zICBzdHJpbmdbXSAgICBhcnJheSBvZiBhcmd1bWVudHNcbiAqL1xuZnVuY3Rpb24gYXJnU3RyaW5nVG9BcnJheShhcmdTdHJpbmcpIHtcbiAgICBjb25zdCBhcmdzID0gW107XG4gICAgbGV0IGluUXVvdGVzID0gZmFsc2U7XG4gICAgbGV0IGVzY2FwZWQgPSBmYWxzZTtcbiAgICBsZXQgYXJnID0gJyc7XG4gICAgZnVuY3Rpb24gYXBwZW5kKGMpIHtcbiAgICAgICAgLy8gd2Ugb25seSBlc2NhcGUgZG91YmxlIHF1b3Rlcy5cbiAgICAgICAgaWYgKGVzY2FwZWQgJiYgYyAhPT0gJ1wiJykge1xuICAgICAgICAgICAgYXJnICs9ICdcXFxcJztcbiAgICAgICAgfVxuICAgICAgICBhcmcgKz0gYztcbiAgICAgICAgZXNjYXBlZCA9IGZhbHNlO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ1N0cmluZy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBjID0gYXJnU3RyaW5nLmNoYXJBdChpKTtcbiAgICAgICAgaWYgKGMgPT09ICdcIicpIHtcbiAgICAgICAgICAgIGlmICghZXNjYXBlZCkge1xuICAgICAgICAgICAgICAgIGluUXVvdGVzID0gIWluUXVvdGVzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYXBwZW5kKGMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGMgPT09ICdcXFxcJyAmJiBlc2NhcGVkKSB7XG4gICAgICAgICAgICBhcHBlbmQoYyk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYyA9PT0gJ1xcXFwnICYmIGluUXVvdGVzKSB7XG4gICAgICAgICAgICBlc2NhcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjID09PSAnICcgJiYgIWluUXVvdGVzKSB7XG4gICAgICAgICAgICBpZiAoYXJnLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBhcmdzLnB1c2goYXJnKTtcbiAgICAgICAgICAgICAgICBhcmcgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGFwcGVuZChjKTtcbiAgICB9XG4gICAgaWYgKGFyZy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGFyZ3MucHVzaChhcmcudHJpbSgpKTtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5leHBvcnRzLmFyZ1N0cmluZ1RvQXJyYXkgPSBhcmdTdHJpbmdUb0FycmF5O1xuY2xhc3MgRXhlY1N0YXRlIGV4dGVuZHMgZXZlbnRzLkV2ZW50RW1pdHRlciB7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucywgdG9vbFBhdGgpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5wcm9jZXNzQ2xvc2VkID0gZmFsc2U7IC8vIHRyYWNrcyB3aGV0aGVyIHRoZSBwcm9jZXNzIGhhcyBleGl0ZWQgYW5kIHN0ZGlvIGlzIGNsb3NlZFxuICAgICAgICB0aGlzLnByb2Nlc3NFcnJvciA9ICcnO1xuICAgICAgICB0aGlzLnByb2Nlc3NFeGl0Q29kZSA9IDA7XG4gICAgICAgIHRoaXMucHJvY2Vzc0V4aXRlZCA9IGZhbHNlOyAvLyB0cmFja3Mgd2hldGhlciB0aGUgcHJvY2VzcyBoYXMgZXhpdGVkXG4gICAgICAgIHRoaXMucHJvY2Vzc1N0ZGVyciA9IGZhbHNlOyAvLyB0cmFja3Mgd2hldGhlciBzdGRlcnIgd2FzIHdyaXR0ZW4gdG9cbiAgICAgICAgdGhpcy5kZWxheSA9IDEwMDAwOyAvLyAxMCBzZWNvbmRzXG4gICAgICAgIHRoaXMuZG9uZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnRpbWVvdXQgPSBudWxsO1xuICAgICAgICBpZiAoIXRvb2xQYXRoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Rvb2xQYXRoIG11c3Qgbm90IGJlIGVtcHR5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgdGhpcy50b29sUGF0aCA9IHRvb2xQYXRoO1xuICAgICAgICBpZiAob3B0aW9ucy5kZWxheSkge1xuICAgICAgICAgICAgdGhpcy5kZWxheSA9IG9wdGlvbnMuZGVsYXk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgQ2hlY2tDb21wbGV0ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnByb2Nlc3NDbG9zZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldFJlc3VsdCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMucHJvY2Vzc0V4aXRlZCkge1xuICAgICAgICAgICAgdGhpcy50aW1lb3V0ID0gdGltZXJzXzEuc2V0VGltZW91dChFeGVjU3RhdGUuSGFuZGxlVGltZW91dCwgdGhpcy5kZWxheSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX2RlYnVnKG1lc3NhZ2UpIHtcbiAgICAgICAgdGhpcy5lbWl0KCdkZWJ1ZycsIG1lc3NhZ2UpO1xuICAgIH1cbiAgICBfc2V0UmVzdWx0KCkge1xuICAgICAgICAvLyBkZXRlcm1pbmUgd2hldGhlciB0aGVyZSBpcyBhbiBlcnJvclxuICAgICAgICBsZXQgZXJyb3I7XG4gICAgICAgIGlmICh0aGlzLnByb2Nlc3NFeGl0ZWQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByb2Nlc3NFcnJvcikge1xuICAgICAgICAgICAgICAgIGVycm9yID0gbmV3IEVycm9yKGBUaGVyZSB3YXMgYW4gZXJyb3Igd2hlbiBhdHRlbXB0aW5nIHRvIGV4ZWN1dGUgdGhlIHByb2Nlc3MgJyR7dGhpcy50b29sUGF0aH0nLiBUaGlzIG1heSBpbmRpY2F0ZSB0aGUgcHJvY2VzcyBmYWlsZWQgdG8gc3RhcnQuIEVycm9yOiAke3RoaXMucHJvY2Vzc0Vycm9yfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5wcm9jZXNzRXhpdENvZGUgIT09IDAgJiYgIXRoaXMub3B0aW9ucy5pZ25vcmVSZXR1cm5Db2RlKSB7XG4gICAgICAgICAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoYFRoZSBwcm9jZXNzICcke3RoaXMudG9vbFBhdGh9JyBmYWlsZWQgd2l0aCBleGl0IGNvZGUgJHt0aGlzLnByb2Nlc3NFeGl0Q29kZX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMucHJvY2Vzc1N0ZGVyciAmJiB0aGlzLm9wdGlvbnMuZmFpbE9uU3RkRXJyKSB7XG4gICAgICAgICAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoYFRoZSBwcm9jZXNzICcke3RoaXMudG9vbFBhdGh9JyBmYWlsZWQgYmVjYXVzZSBvbmUgb3IgbW9yZSBsaW5lcyB3ZXJlIHdyaXR0ZW4gdG8gdGhlIFNUREVSUiBzdHJlYW1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBjbGVhciB0aGUgdGltZW91dFxuICAgICAgICBpZiAodGhpcy50aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTtcbiAgICAgICAgICAgIHRoaXMudGltZW91dCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kb25lID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5lbWl0KCdkb25lJywgZXJyb3IsIHRoaXMucHJvY2Vzc0V4aXRDb2RlKTtcbiAgICB9XG4gICAgc3RhdGljIEhhbmRsZVRpbWVvdXQoc3RhdGUpIHtcbiAgICAgICAgaWYgKHN0YXRlLmRvbmUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXN0YXRlLnByb2Nlc3NDbG9zZWQgJiYgc3RhdGUucHJvY2Vzc0V4aXRlZCkge1xuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGBUaGUgU1RESU8gc3RyZWFtcyBkaWQgbm90IGNsb3NlIHdpdGhpbiAke3N0YXRlLmRlbGF5IC9cbiAgICAgICAgICAgICAgICAxMDAwfSBzZWNvbmRzIG9mIHRoZSBleGl0IGV2ZW50IGZyb20gcHJvY2VzcyAnJHtzdGF0ZS50b29sUGF0aH0nLiBUaGlzIG1heSBpbmRpY2F0ZSBhIGNoaWxkIHByb2Nlc3MgaW5oZXJpdGVkIHRoZSBTVERJTyBzdHJlYW1zIGFuZCBoYXMgbm90IHlldCBleGl0ZWQuYDtcbiAgICAgICAgICAgIHN0YXRlLl9kZWJ1ZyhtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZS5fc2V0UmVzdWx0KCk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dG9vbHJ1bm5lci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH0pO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRFeGVjT3V0cHV0ID0gZXhwb3J0cy5leGVjID0gdm9pZCAwO1xuY29uc3Qgc3RyaW5nX2RlY29kZXJfMSA9IHJlcXVpcmUoXCJzdHJpbmdfZGVjb2RlclwiKTtcbmNvbnN0IHRyID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL3Rvb2xydW5uZXJcIikpO1xuLyoqXG4gKiBFeGVjIGEgY29tbWFuZC5cbiAqIE91dHB1dCB3aWxsIGJlIHN0cmVhbWVkIHRvIHRoZSBsaXZlIGNvbnNvbGUuXG4gKiBSZXR1cm5zIHByb21pc2Ugd2l0aCByZXR1cm4gY29kZVxuICpcbiAqIEBwYXJhbSAgICAgY29tbWFuZExpbmUgICAgICAgIGNvbW1hbmQgdG8gZXhlY3V0ZSAoY2FuIGluY2x1ZGUgYWRkaXRpb25hbCBhcmdzKS4gTXVzdCBiZSBjb3JyZWN0bHkgZXNjYXBlZC5cbiAqIEBwYXJhbSAgICAgYXJncyAgICAgICAgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50cyBmb3IgdG9vbC4gRXNjYXBpbmcgaXMgaGFuZGxlZCBieSB0aGUgbGliLlxuICogQHBhcmFtICAgICBvcHRpb25zICAgICAgICAgICAgb3B0aW9uYWwgZXhlYyBvcHRpb25zLiAgU2VlIEV4ZWNPcHRpb25zXG4gKiBAcmV0dXJucyAgIFByb21pc2U8bnVtYmVyPiAgICBleGl0IGNvZGVcbiAqL1xuZnVuY3Rpb24gZXhlYyhjb21tYW5kTGluZSwgYXJncywgb3B0aW9ucykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IGNvbW1hbmRBcmdzID0gdHIuYXJnU3RyaW5nVG9BcnJheShjb21tYW5kTGluZSk7XG4gICAgICAgIGlmIChjb21tYW5kQXJncy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUGFyYW1ldGVyICdjb21tYW5kTGluZScgY2Fubm90IGJlIG51bGwgb3IgZW1wdHkuYCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUGF0aCB0byB0b29sIHRvIGV4ZWN1dGUgc2hvdWxkIGJlIGZpcnN0IGFyZ1xuICAgICAgICBjb25zdCB0b29sUGF0aCA9IGNvbW1hbmRBcmdzWzBdO1xuICAgICAgICBhcmdzID0gY29tbWFuZEFyZ3Muc2xpY2UoMSkuY29uY2F0KGFyZ3MgfHwgW10pO1xuICAgICAgICBjb25zdCBydW5uZXIgPSBuZXcgdHIuVG9vbFJ1bm5lcih0b29sUGF0aCwgYXJncywgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBydW5uZXIuZXhlYygpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5leGVjID0gZXhlYztcbi8qKlxuICogRXhlYyBhIGNvbW1hbmQgYW5kIGdldCB0aGUgb3V0cHV0LlxuICogT3V0cHV0IHdpbGwgYmUgc3RyZWFtZWQgdG8gdGhlIGxpdmUgY29uc29sZS5cbiAqIFJldHVybnMgcHJvbWlzZSB3aXRoIHRoZSBleGl0IGNvZGUgYW5kIGNvbGxlY3RlZCBzdGRvdXQgYW5kIHN0ZGVyclxuICpcbiAqIEBwYXJhbSAgICAgY29tbWFuZExpbmUgICAgICAgICAgIGNvbW1hbmQgdG8gZXhlY3V0ZSAoY2FuIGluY2x1ZGUgYWRkaXRpb25hbCBhcmdzKS4gTXVzdCBiZSBjb3JyZWN0bHkgZXNjYXBlZC5cbiAqIEBwYXJhbSAgICAgYXJncyAgICAgICAgICAgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50cyBmb3IgdG9vbC4gRXNjYXBpbmcgaXMgaGFuZGxlZCBieSB0aGUgbGliLlxuICogQHBhcmFtICAgICBvcHRpb25zICAgICAgICAgICAgICAgb3B0aW9uYWwgZXhlYyBvcHRpb25zLiAgU2VlIEV4ZWNPcHRpb25zXG4gKiBAcmV0dXJucyAgIFByb21pc2U8RXhlY091dHB1dD4gICBleGl0IGNvZGUsIHN0ZG91dCwgYW5kIHN0ZGVyclxuICovXG5mdW5jdGlvbiBnZXRFeGVjT3V0cHV0KGNvbW1hbmRMaW5lLCBhcmdzLCBvcHRpb25zKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBsZXQgc3Rkb3V0ID0gJyc7XG4gICAgICAgIGxldCBzdGRlcnIgPSAnJztcbiAgICAgICAgLy9Vc2luZyBzdHJpbmcgZGVjb2RlciBjb3ZlcnMgdGhlIGNhc2Ugd2hlcmUgYSBtdWx0LWJ5dGUgY2hhcmFjdGVyIGlzIHNwbGl0XG4gICAgICAgIGNvbnN0IHN0ZG91dERlY29kZXIgPSBuZXcgc3RyaW5nX2RlY29kZXJfMS5TdHJpbmdEZWNvZGVyKCd1dGY4Jyk7XG4gICAgICAgIGNvbnN0IHN0ZGVyckRlY29kZXIgPSBuZXcgc3RyaW5nX2RlY29kZXJfMS5TdHJpbmdEZWNvZGVyKCd1dGY4Jyk7XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsU3Rkb3V0TGlzdGVuZXIgPSAoX2EgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMubGlzdGVuZXJzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc3Rkb3V0O1xuICAgICAgICBjb25zdCBvcmlnaW5hbFN0ZEVyckxpc3RlbmVyID0gKF9iID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmxpc3RlbmVycykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnN0ZGVycjtcbiAgICAgICAgY29uc3Qgc3RkRXJyTGlzdGVuZXIgPSAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgc3RkZXJyICs9IHN0ZGVyckRlY29kZXIud3JpdGUoZGF0YSk7XG4gICAgICAgICAgICBpZiAob3JpZ2luYWxTdGRFcnJMaXN0ZW5lcikge1xuICAgICAgICAgICAgICAgIG9yaWdpbmFsU3RkRXJyTGlzdGVuZXIoZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHN0ZE91dExpc3RlbmVyID0gKGRhdGEpID0+IHtcbiAgICAgICAgICAgIHN0ZG91dCArPSBzdGRvdXREZWNvZGVyLndyaXRlKGRhdGEpO1xuICAgICAgICAgICAgaWYgKG9yaWdpbmFsU3Rkb3V0TGlzdGVuZXIpIHtcbiAgICAgICAgICAgICAgICBvcmlnaW5hbFN0ZG91dExpc3RlbmVyKGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5saXN0ZW5lcnMpLCB7IHN0ZG91dDogc3RkT3V0TGlzdGVuZXIsIHN0ZGVycjogc3RkRXJyTGlzdGVuZXIgfSk7XG4gICAgICAgIGNvbnN0IGV4aXRDb2RlID0geWllbGQgZXhlYyhjb21tYW5kTGluZSwgYXJncywgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKSwgeyBsaXN0ZW5lcnMgfSkpO1xuICAgICAgICAvL2ZsdXNoIGFueSByZW1haW5pbmcgY2hhcmFjdGVyc1xuICAgICAgICBzdGRvdXQgKz0gc3Rkb3V0RGVjb2Rlci5lbmQoKTtcbiAgICAgICAgc3RkZXJyICs9IHN0ZGVyckRlY29kZXIuZW5kKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBleGl0Q29kZSxcbiAgICAgICAgICAgIHN0ZG91dCxcbiAgICAgICAgICAgIHN0ZGVyclxuICAgICAgICB9O1xuICAgIH0pO1xufVxuZXhwb3J0cy5nZXRFeGVjT3V0cHV0ID0gZ2V0RXhlY091dHB1dDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWV4ZWMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIFdlIHVzZSBhbnkgYXMgYSB2YWxpZCBpbnB1dCB0eXBlXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRvQ29tbWFuZFByb3BlcnRpZXMgPSBleHBvcnRzLnRvQ29tbWFuZFZhbHVlID0gdm9pZCAwO1xuLyoqXG4gKiBTYW5pdGl6ZXMgYW4gaW5wdXQgaW50byBhIHN0cmluZyBzbyBpdCBjYW4gYmUgcGFzc2VkIGludG8gaXNzdWVDb21tYW5kIHNhZmVseVxuICogQHBhcmFtIGlucHV0IGlucHV0IHRvIHNhbml0aXplIGludG8gYSBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gdG9Db21tYW5kVmFsdWUoaW5wdXQpIHtcbiAgICBpZiAoaW5wdXQgPT09IG51bGwgfHwgaW5wdXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycgfHwgaW5wdXQgaW5zdGFuY2VvZiBTdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH1cbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoaW5wdXQpO1xufVxuZXhwb3J0cy50b0NvbW1hbmRWYWx1ZSA9IHRvQ29tbWFuZFZhbHVlO1xuLyoqXG4gKlxuICogQHBhcmFtIGFubm90YXRpb25Qcm9wZXJ0aWVzXG4gKiBAcmV0dXJucyBUaGUgY29tbWFuZCBwcm9wZXJ0aWVzIHRvIHNlbmQgd2l0aCB0aGUgYWN0dWFsIGFubm90YXRpb24gY29tbWFuZFxuICogU2VlIElzc3VlQ29tbWFuZFByb3BlcnRpZXM6IGh0dHBzOi8vZ2l0aHViLmNvbS9hY3Rpb25zL3J1bm5lci9ibG9iL21haW4vc3JjL1J1bm5lci5Xb3JrZXIvQWN0aW9uQ29tbWFuZE1hbmFnZXIuY3MjTDY0NlxuICovXG5mdW5jdGlvbiB0b0NvbW1hbmRQcm9wZXJ0aWVzKGFubm90YXRpb25Qcm9wZXJ0aWVzKSB7XG4gICAgaWYgKCFPYmplY3Qua2V5cyhhbm5vdGF0aW9uUHJvcGVydGllcykubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdGl0bGU6IGFubm90YXRpb25Qcm9wZXJ0aWVzLnRpdGxlLFxuICAgICAgICBmaWxlOiBhbm5vdGF0aW9uUHJvcGVydGllcy5maWxlLFxuICAgICAgICBsaW5lOiBhbm5vdGF0aW9uUHJvcGVydGllcy5zdGFydExpbmUsXG4gICAgICAgIGVuZExpbmU6IGFubm90YXRpb25Qcm9wZXJ0aWVzLmVuZExpbmUsXG4gICAgICAgIGNvbDogYW5ub3RhdGlvblByb3BlcnRpZXMuc3RhcnRDb2x1bW4sXG4gICAgICAgIGVuZENvbHVtbjogYW5ub3RhdGlvblByb3BlcnRpZXMuZW5kQ29sdW1uXG4gICAgfTtcbn1cbmV4cG9ydHMudG9Db21tYW5kUHJvcGVydGllcyA9IHRvQ29tbWFuZFByb3BlcnRpZXM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11dGlscy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlzc3VlID0gZXhwb3J0cy5pc3N1ZUNvbW1hbmQgPSB2b2lkIDA7XG5jb25zdCBvcyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwib3NcIikpO1xuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoXCIuL3V0aWxzXCIpO1xuLyoqXG4gKiBDb21tYW5kc1xuICpcbiAqIENvbW1hbmQgRm9ybWF0OlxuICogICA6Om5hbWUga2V5PXZhbHVlLGtleT12YWx1ZTo6bWVzc2FnZVxuICpcbiAqIEV4YW1wbGVzOlxuICogICA6Ondhcm5pbmc6OlRoaXMgaXMgdGhlIG1lc3NhZ2VcbiAqICAgOjpzZXQtZW52IG5hbWU9TVlfVkFSOjpzb21lIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIGlzc3VlQ29tbWFuZChjb21tYW5kLCBwcm9wZXJ0aWVzLCBtZXNzYWdlKSB7XG4gICAgY29uc3QgY21kID0gbmV3IENvbW1hbmQoY29tbWFuZCwgcHJvcGVydGllcywgbWVzc2FnZSk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoY21kLnRvU3RyaW5nKCkgKyBvcy5FT0wpO1xufVxuZXhwb3J0cy5pc3N1ZUNvbW1hbmQgPSBpc3N1ZUNvbW1hbmQ7XG5mdW5jdGlvbiBpc3N1ZShuYW1lLCBtZXNzYWdlID0gJycpIHtcbiAgICBpc3N1ZUNvbW1hbmQobmFtZSwge30sIG1lc3NhZ2UpO1xufVxuZXhwb3J0cy5pc3N1ZSA9IGlzc3VlO1xuY29uc3QgQ01EX1NUUklORyA9ICc6Oic7XG5jbGFzcyBDb21tYW5kIHtcbiAgICBjb25zdHJ1Y3Rvcihjb21tYW5kLCBwcm9wZXJ0aWVzLCBtZXNzYWdlKSB7XG4gICAgICAgIGlmICghY29tbWFuZCkge1xuICAgICAgICAgICAgY29tbWFuZCA9ICdtaXNzaW5nLmNvbW1hbmQnO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29tbWFuZCA9IGNvbW1hbmQ7XG4gICAgICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgfVxuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICBsZXQgY21kU3RyID0gQ01EX1NUUklORyArIHRoaXMuY29tbWFuZDtcbiAgICAgICAgaWYgKHRoaXMucHJvcGVydGllcyAmJiBPYmplY3Qua2V5cyh0aGlzLnByb3BlcnRpZXMpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNtZFN0ciArPSAnICc7XG4gICAgICAgICAgICBsZXQgZmlyc3QgPSB0cnVlO1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5wcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbCA9IHRoaXMucHJvcGVydGllc1trZXldO1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kU3RyICs9ICcsJztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNtZFN0ciArPSBgJHtrZXl9PSR7ZXNjYXBlUHJvcGVydHkodmFsKX1gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNtZFN0ciArPSBgJHtDTURfU1RSSU5HfSR7ZXNjYXBlRGF0YSh0aGlzLm1lc3NhZ2UpfWA7XG4gICAgICAgIHJldHVybiBjbWRTdHI7XG4gICAgfVxufVxuZnVuY3Rpb24gZXNjYXBlRGF0YShzKSB7XG4gICAgcmV0dXJuICgwLCB1dGlsc18xLnRvQ29tbWFuZFZhbHVlKShzKVxuICAgICAgICAucmVwbGFjZSgvJS9nLCAnJTI1JylcbiAgICAgICAgLnJlcGxhY2UoL1xcci9nLCAnJTBEJylcbiAgICAgICAgLnJlcGxhY2UoL1xcbi9nLCAnJTBBJyk7XG59XG5mdW5jdGlvbiBlc2NhcGVQcm9wZXJ0eShzKSB7XG4gICAgcmV0dXJuICgwLCB1dGlsc18xLnRvQ29tbWFuZFZhbHVlKShzKVxuICAgICAgICAucmVwbGFjZSgvJS9nLCAnJTI1JylcbiAgICAgICAgLnJlcGxhY2UoL1xcci9nLCAnJTBEJylcbiAgICAgICAgLnJlcGxhY2UoL1xcbi9nLCAnJTBBJylcbiAgICAgICAgLnJlcGxhY2UoLzovZywgJyUzQScpXG4gICAgICAgIC5yZXBsYWNlKC8sL2csICclMkMnKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbW1hbmQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIEZvciBpbnRlcm5hbCB1c2UsIHN1YmplY3QgdG8gY2hhbmdlLlxudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnByZXBhcmVLZXlWYWx1ZU1lc3NhZ2UgPSBleHBvcnRzLmlzc3VlRmlsZUNvbW1hbmQgPSB2b2lkIDA7XG4vLyBXZSB1c2UgYW55IGFzIGEgdmFsaWQgaW5wdXQgdHlwZVxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuY29uc3QgY3J5cHRvID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJjcnlwdG9cIikpO1xuY29uc3QgZnMgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcImZzXCIpKTtcbmNvbnN0IG9zID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJvc1wiKSk7XG5jb25zdCB1dGlsc18xID0gcmVxdWlyZShcIi4vdXRpbHNcIik7XG5mdW5jdGlvbiBpc3N1ZUZpbGVDb21tYW5kKGNvbW1hbmQsIG1lc3NhZ2UpIHtcbiAgICBjb25zdCBmaWxlUGF0aCA9IHByb2Nlc3MuZW52W2BHSVRIVUJfJHtjb21tYW5kfWBdO1xuICAgIGlmICghZmlsZVBhdGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gZmluZCBlbnZpcm9ubWVudCB2YXJpYWJsZSBmb3IgZmlsZSBjb21tYW5kICR7Y29tbWFuZH1gKTtcbiAgICB9XG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKGZpbGVQYXRoKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgZmlsZSBhdCBwYXRoOiAke2ZpbGVQYXRofWApO1xuICAgIH1cbiAgICBmcy5hcHBlbmRGaWxlU3luYyhmaWxlUGF0aCwgYCR7KDAsIHV0aWxzXzEudG9Db21tYW5kVmFsdWUpKG1lc3NhZ2UpfSR7b3MuRU9MfWAsIHtcbiAgICAgICAgZW5jb2Rpbmc6ICd1dGY4J1xuICAgIH0pO1xufVxuZXhwb3J0cy5pc3N1ZUZpbGVDb21tYW5kID0gaXNzdWVGaWxlQ29tbWFuZDtcbmZ1bmN0aW9uIHByZXBhcmVLZXlWYWx1ZU1lc3NhZ2Uoa2V5LCB2YWx1ZSkge1xuICAgIGNvbnN0IGRlbGltaXRlciA9IGBnaGFkZWxpbWl0ZXJfJHtjcnlwdG8ucmFuZG9tVVVJRCgpfWA7XG4gICAgY29uc3QgY29udmVydGVkVmFsdWUgPSAoMCwgdXRpbHNfMS50b0NvbW1hbmRWYWx1ZSkodmFsdWUpO1xuICAgIC8vIFRoZXNlIHNob3VsZCByZWFsaXN0aWNhbGx5IG5ldmVyIGhhcHBlbiwgYnV0IGp1c3QgaW4gY2FzZSBzb21lb25lIGZpbmRzIGFcbiAgICAvLyB3YXkgdG8gZXhwbG9pdCB1dWlkIGdlbmVyYXRpb24gbGV0J3Mgbm90IGFsbG93IGtleXMgb3IgdmFsdWVzIHRoYXQgY29udGFpblxuICAgIC8vIHRoZSBkZWxpbWl0ZXIuXG4gICAgaWYgKGtleS5pbmNsdWRlcyhkZWxpbWl0ZXIpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCBpbnB1dDogbmFtZSBzaG91bGQgbm90IGNvbnRhaW4gdGhlIGRlbGltaXRlciBcIiR7ZGVsaW1pdGVyfVwiYCk7XG4gICAgfVxuICAgIGlmIChjb252ZXJ0ZWRWYWx1ZS5pbmNsdWRlcyhkZWxpbWl0ZXIpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCBpbnB1dDogdmFsdWUgc2hvdWxkIG5vdCBjb250YWluIHRoZSBkZWxpbWl0ZXIgXCIke2RlbGltaXRlcn1cImApO1xuICAgIH1cbiAgICByZXR1cm4gYCR7a2V5fTw8JHtkZWxpbWl0ZXJ9JHtvcy5FT0x9JHtjb252ZXJ0ZWRWYWx1ZX0ke29zLkVPTH0ke2RlbGltaXRlcn1gO1xufVxuZXhwb3J0cy5wcmVwYXJlS2V5VmFsdWVNZXNzYWdlID0gcHJlcGFyZUtleVZhbHVlTWVzc2FnZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZpbGUtY29tbWFuZC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jaGVja0J5cGFzcyA9IGV4cG9ydHMuZ2V0UHJveHlVcmwgPSB2b2lkIDA7XG5mdW5jdGlvbiBnZXRQcm94eVVybChyZXFVcmwpIHtcbiAgICBjb25zdCB1c2luZ1NzbCA9IHJlcVVybC5wcm90b2NvbCA9PT0gJ2h0dHBzOic7XG4gICAgaWYgKGNoZWNrQnlwYXNzKHJlcVVybCkpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgcHJveHlWYXIgPSAoKCkgPT4ge1xuICAgICAgICBpZiAodXNpbmdTc2wpIHtcbiAgICAgICAgICAgIHJldHVybiBwcm9jZXNzLmVudlsnaHR0cHNfcHJveHknXSB8fCBwcm9jZXNzLmVudlsnSFRUUFNfUFJPWFknXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBwcm9jZXNzLmVudlsnaHR0cF9wcm94eSddIHx8IHByb2Nlc3MuZW52WydIVFRQX1BST1hZJ107XG4gICAgICAgIH1cbiAgICB9KSgpO1xuICAgIGlmIChwcm94eVZhcikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBEZWNvZGVkVVJMKHByb3h5VmFyKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoX2EpIHtcbiAgICAgICAgICAgIGlmICghcHJveHlWYXIuc3RhcnRzV2l0aCgnaHR0cDovLycpICYmICFwcm94eVZhci5zdGFydHNXaXRoKCdodHRwczovLycpKVxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRGVjb2RlZFVSTChgaHR0cDovLyR7cHJveHlWYXJ9YCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufVxuZXhwb3J0cy5nZXRQcm94eVVybCA9IGdldFByb3h5VXJsO1xuZnVuY3Rpb24gY2hlY2tCeXBhc3MocmVxVXJsKSB7XG4gICAgaWYgKCFyZXFVcmwuaG9zdG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCByZXFIb3N0ID0gcmVxVXJsLmhvc3RuYW1lO1xuICAgIGlmIChpc0xvb3BiYWNrQWRkcmVzcyhyZXFIb3N0KSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3Qgbm9Qcm94eSA9IHByb2Nlc3MuZW52Wydub19wcm94eSddIHx8IHByb2Nlc3MuZW52WydOT19QUk9YWSddIHx8ICcnO1xuICAgIGlmICghbm9Qcm94eSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8vIERldGVybWluZSB0aGUgcmVxdWVzdCBwb3J0XG4gICAgbGV0IHJlcVBvcnQ7XG4gICAgaWYgKHJlcVVybC5wb3J0KSB7XG4gICAgICAgIHJlcVBvcnQgPSBOdW1iZXIocmVxVXJsLnBvcnQpO1xuICAgIH1cbiAgICBlbHNlIGlmIChyZXFVcmwucHJvdG9jb2wgPT09ICdodHRwOicpIHtcbiAgICAgICAgcmVxUG9ydCA9IDgwO1xuICAgIH1cbiAgICBlbHNlIGlmIChyZXFVcmwucHJvdG9jb2wgPT09ICdodHRwczonKSB7XG4gICAgICAgIHJlcVBvcnQgPSA0NDM7XG4gICAgfVxuICAgIC8vIEZvcm1hdCB0aGUgcmVxdWVzdCBob3N0bmFtZSBhbmQgaG9zdG5hbWUgd2l0aCBwb3J0XG4gICAgY29uc3QgdXBwZXJSZXFIb3N0cyA9IFtyZXFVcmwuaG9zdG5hbWUudG9VcHBlckNhc2UoKV07XG4gICAgaWYgKHR5cGVvZiByZXFQb3J0ID09PSAnbnVtYmVyJykge1xuICAgICAgICB1cHBlclJlcUhvc3RzLnB1c2goYCR7dXBwZXJSZXFIb3N0c1swXX06JHtyZXFQb3J0fWApO1xuICAgIH1cbiAgICAvLyBDb21wYXJlIHJlcXVlc3QgaG9zdCBhZ2FpbnN0IG5vcHJveHlcbiAgICBmb3IgKGNvbnN0IHVwcGVyTm9Qcm94eUl0ZW0gb2Ygbm9Qcm94eVxuICAgICAgICAuc3BsaXQoJywnKVxuICAgICAgICAubWFwKHggPT4geC50cmltKCkudG9VcHBlckNhc2UoKSlcbiAgICAgICAgLmZpbHRlcih4ID0+IHgpKSB7XG4gICAgICAgIGlmICh1cHBlck5vUHJveHlJdGVtID09PSAnKicgfHxcbiAgICAgICAgICAgIHVwcGVyUmVxSG9zdHMuc29tZSh4ID0+IHggPT09IHVwcGVyTm9Qcm94eUl0ZW0gfHxcbiAgICAgICAgICAgICAgICB4LmVuZHNXaXRoKGAuJHt1cHBlck5vUHJveHlJdGVtfWApIHx8XG4gICAgICAgICAgICAgICAgKHVwcGVyTm9Qcm94eUl0ZW0uc3RhcnRzV2l0aCgnLicpICYmXG4gICAgICAgICAgICAgICAgICAgIHguZW5kc1dpdGgoYCR7dXBwZXJOb1Byb3h5SXRlbX1gKSkpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5leHBvcnRzLmNoZWNrQnlwYXNzID0gY2hlY2tCeXBhc3M7XG5mdW5jdGlvbiBpc0xvb3BiYWNrQWRkcmVzcyhob3N0KSB7XG4gICAgY29uc3QgaG9zdExvd2VyID0gaG9zdC50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiAoaG9zdExvd2VyID09PSAnbG9jYWxob3N0JyB8fFxuICAgICAgICBob3N0TG93ZXIuc3RhcnRzV2l0aCgnMTI3LicpIHx8XG4gICAgICAgIGhvc3RMb3dlci5zdGFydHNXaXRoKCdbOjoxXScpIHx8XG4gICAgICAgIGhvc3RMb3dlci5zdGFydHNXaXRoKCdbMDowOjA6MDowOjA6MDoxXScpKTtcbn1cbmNsYXNzIERlY29kZWRVUkwgZXh0ZW5kcyBVUkwge1xuICAgIGNvbnN0cnVjdG9yKHVybCwgYmFzZSkge1xuICAgICAgICBzdXBlcih1cmwsIGJhc2UpO1xuICAgICAgICB0aGlzLl9kZWNvZGVkVXNlcm5hbWUgPSBkZWNvZGVVUklDb21wb25lbnQoc3VwZXIudXNlcm5hbWUpO1xuICAgICAgICB0aGlzLl9kZWNvZGVkUGFzc3dvcmQgPSBkZWNvZGVVUklDb21wb25lbnQoc3VwZXIucGFzc3dvcmQpO1xuICAgIH1cbiAgICBnZXQgdXNlcm5hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWNvZGVkVXNlcm5hbWU7XG4gICAgfVxuICAgIGdldCBwYXNzd29yZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlY29kZWRQYXNzd29yZDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wcm94eS5qcy5tYXAiLAogICAgIid1c2Ugc3RyaWN0JztcblxudmFyIG5ldCA9IHJlcXVpcmUoJ25ldCcpO1xudmFyIHRscyA9IHJlcXVpcmUoJ3RscycpO1xudmFyIGh0dHAgPSByZXF1aXJlKCdodHRwJyk7XG52YXIgaHR0cHMgPSByZXF1aXJlKCdodHRwcycpO1xudmFyIGV2ZW50cyA9IHJlcXVpcmUoJ2V2ZW50cycpO1xudmFyIGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpO1xudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG5cblxuZXhwb3J0cy5odHRwT3Zlckh0dHAgPSBodHRwT3Zlckh0dHA7XG5leHBvcnRzLmh0dHBzT3Zlckh0dHAgPSBodHRwc092ZXJIdHRwO1xuZXhwb3J0cy5odHRwT3Zlckh0dHBzID0gaHR0cE92ZXJIdHRwcztcbmV4cG9ydHMuaHR0cHNPdmVySHR0cHMgPSBodHRwc092ZXJIdHRwcztcblxuXG5mdW5jdGlvbiBodHRwT3Zlckh0dHAob3B0aW9ucykge1xuICB2YXIgYWdlbnQgPSBuZXcgVHVubmVsaW5nQWdlbnQob3B0aW9ucyk7XG4gIGFnZW50LnJlcXVlc3QgPSBodHRwLnJlcXVlc3Q7XG4gIHJldHVybiBhZ2VudDtcbn1cblxuZnVuY3Rpb24gaHR0cHNPdmVySHR0cChvcHRpb25zKSB7XG4gIHZhciBhZ2VudCA9IG5ldyBUdW5uZWxpbmdBZ2VudChvcHRpb25zKTtcbiAgYWdlbnQucmVxdWVzdCA9IGh0dHAucmVxdWVzdDtcbiAgYWdlbnQuY3JlYXRlU29ja2V0ID0gY3JlYXRlU2VjdXJlU29ja2V0O1xuICBhZ2VudC5kZWZhdWx0UG9ydCA9IDQ0MztcbiAgcmV0dXJuIGFnZW50O1xufVxuXG5mdW5jdGlvbiBodHRwT3Zlckh0dHBzKG9wdGlvbnMpIHtcbiAgdmFyIGFnZW50ID0gbmV3IFR1bm5lbGluZ0FnZW50KG9wdGlvbnMpO1xuICBhZ2VudC5yZXF1ZXN0ID0gaHR0cHMucmVxdWVzdDtcbiAgcmV0dXJuIGFnZW50O1xufVxuXG5mdW5jdGlvbiBodHRwc092ZXJIdHRwcyhvcHRpb25zKSB7XG4gIHZhciBhZ2VudCA9IG5ldyBUdW5uZWxpbmdBZ2VudChvcHRpb25zKTtcbiAgYWdlbnQucmVxdWVzdCA9IGh0dHBzLnJlcXVlc3Q7XG4gIGFnZW50LmNyZWF0ZVNvY2tldCA9IGNyZWF0ZVNlY3VyZVNvY2tldDtcbiAgYWdlbnQuZGVmYXVsdFBvcnQgPSA0NDM7XG4gIHJldHVybiBhZ2VudDtcbn1cblxuXG5mdW5jdGlvbiBUdW5uZWxpbmdBZ2VudChvcHRpb25zKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgc2VsZi5vcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgc2VsZi5wcm94eU9wdGlvbnMgPSBzZWxmLm9wdGlvbnMucHJveHkgfHwge307XG4gIHNlbGYubWF4U29ja2V0cyA9IHNlbGYub3B0aW9ucy5tYXhTb2NrZXRzIHx8IGh0dHAuQWdlbnQuZGVmYXVsdE1heFNvY2tldHM7XG4gIHNlbGYucmVxdWVzdHMgPSBbXTtcbiAgc2VsZi5zb2NrZXRzID0gW107XG5cbiAgc2VsZi5vbignZnJlZScsIGZ1bmN0aW9uIG9uRnJlZShzb2NrZXQsIGhvc3QsIHBvcnQsIGxvY2FsQWRkcmVzcykge1xuICAgIHZhciBvcHRpb25zID0gdG9PcHRpb25zKGhvc3QsIHBvcnQsIGxvY2FsQWRkcmVzcyk7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHNlbGYucmVxdWVzdHMubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgIHZhciBwZW5kaW5nID0gc2VsZi5yZXF1ZXN0c1tpXTtcbiAgICAgIGlmIChwZW5kaW5nLmhvc3QgPT09IG9wdGlvbnMuaG9zdCAmJiBwZW5kaW5nLnBvcnQgPT09IG9wdGlvbnMucG9ydCkge1xuICAgICAgICAvLyBEZXRlY3QgdGhlIHJlcXVlc3QgdG8gY29ubmVjdCBzYW1lIG9yaWdpbiBzZXJ2ZXIsXG4gICAgICAgIC8vIHJldXNlIHRoZSBjb25uZWN0aW9uLlxuICAgICAgICBzZWxmLnJlcXVlc3RzLnNwbGljZShpLCAxKTtcbiAgICAgICAgcGVuZGluZy5yZXF1ZXN0Lm9uU29ja2V0KHNvY2tldCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgc29ja2V0LmRlc3Ryb3koKTtcbiAgICBzZWxmLnJlbW92ZVNvY2tldChzb2NrZXQpO1xuICB9KTtcbn1cbnV0aWwuaW5oZXJpdHMoVHVubmVsaW5nQWdlbnQsIGV2ZW50cy5FdmVudEVtaXR0ZXIpO1xuXG5UdW5uZWxpbmdBZ2VudC5wcm90b3R5cGUuYWRkUmVxdWVzdCA9IGZ1bmN0aW9uIGFkZFJlcXVlc3QocmVxLCBob3N0LCBwb3J0LCBsb2NhbEFkZHJlc3MpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgb3B0aW9ucyA9IG1lcmdlT3B0aW9ucyh7cmVxdWVzdDogcmVxfSwgc2VsZi5vcHRpb25zLCB0b09wdGlvbnMoaG9zdCwgcG9ydCwgbG9jYWxBZGRyZXNzKSk7XG5cbiAgaWYgKHNlbGYuc29ja2V0cy5sZW5ndGggPj0gdGhpcy5tYXhTb2NrZXRzKSB7XG4gICAgLy8gV2UgYXJlIG92ZXIgbGltaXQgc28gd2UnbGwgYWRkIGl0IHRvIHRoZSBxdWV1ZS5cbiAgICBzZWxmLnJlcXVlc3RzLnB1c2gob3B0aW9ucyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gSWYgd2UgYXJlIHVuZGVyIG1heFNvY2tldHMgY3JlYXRlIGEgbmV3IG9uZS5cbiAgc2VsZi5jcmVhdGVTb2NrZXQob3B0aW9ucywgZnVuY3Rpb24oc29ja2V0KSB7XG4gICAgc29ja2V0Lm9uKCdmcmVlJywgb25GcmVlKTtcbiAgICBzb2NrZXQub24oJ2Nsb3NlJywgb25DbG9zZU9yUmVtb3ZlKTtcbiAgICBzb2NrZXQub24oJ2FnZW50UmVtb3ZlJywgb25DbG9zZU9yUmVtb3ZlKTtcbiAgICByZXEub25Tb2NrZXQoc29ja2V0KTtcblxuICAgIGZ1bmN0aW9uIG9uRnJlZSgpIHtcbiAgICAgIHNlbGYuZW1pdCgnZnJlZScsIHNvY2tldCwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25DbG9zZU9yUmVtb3ZlKGVycikge1xuICAgICAgc2VsZi5yZW1vdmVTb2NrZXQoc29ja2V0KTtcbiAgICAgIHNvY2tldC5yZW1vdmVMaXN0ZW5lcignZnJlZScsIG9uRnJlZSk7XG4gICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgb25DbG9zZU9yUmVtb3ZlKTtcbiAgICAgIHNvY2tldC5yZW1vdmVMaXN0ZW5lcignYWdlbnRSZW1vdmUnLCBvbkNsb3NlT3JSZW1vdmUpO1xuICAgIH1cbiAgfSk7XG59O1xuXG5UdW5uZWxpbmdBZ2VudC5wcm90b3R5cGUuY3JlYXRlU29ja2V0ID0gZnVuY3Rpb24gY3JlYXRlU29ja2V0KG9wdGlvbnMsIGNiKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIHBsYWNlaG9sZGVyID0ge307XG4gIHNlbGYuc29ja2V0cy5wdXNoKHBsYWNlaG9sZGVyKTtcblxuICB2YXIgY29ubmVjdE9wdGlvbnMgPSBtZXJnZU9wdGlvbnMoe30sIHNlbGYucHJveHlPcHRpb25zLCB7XG4gICAgbWV0aG9kOiAnQ09OTkVDVCcsXG4gICAgcGF0aDogb3B0aW9ucy5ob3N0ICsgJzonICsgb3B0aW9ucy5wb3J0LFxuICAgIGFnZW50OiBmYWxzZSxcbiAgICBoZWFkZXJzOiB7XG4gICAgICBob3N0OiBvcHRpb25zLmhvc3QgKyAnOicgKyBvcHRpb25zLnBvcnRcbiAgICB9XG4gIH0pO1xuICBpZiAob3B0aW9ucy5sb2NhbEFkZHJlc3MpIHtcbiAgICBjb25uZWN0T3B0aW9ucy5sb2NhbEFkZHJlc3MgPSBvcHRpb25zLmxvY2FsQWRkcmVzcztcbiAgfVxuICBpZiAoY29ubmVjdE9wdGlvbnMucHJveHlBdXRoKSB7XG4gICAgY29ubmVjdE9wdGlvbnMuaGVhZGVycyA9IGNvbm5lY3RPcHRpb25zLmhlYWRlcnMgfHwge307XG4gICAgY29ubmVjdE9wdGlvbnMuaGVhZGVyc1snUHJveHktQXV0aG9yaXphdGlvbiddID0gJ0Jhc2ljICcgK1xuICAgICAgICBuZXcgQnVmZmVyKGNvbm5lY3RPcHRpb25zLnByb3h5QXV0aCkudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICB9XG5cbiAgZGVidWcoJ21ha2luZyBDT05ORUNUIHJlcXVlc3QnKTtcbiAgdmFyIGNvbm5lY3RSZXEgPSBzZWxmLnJlcXVlc3QoY29ubmVjdE9wdGlvbnMpO1xuICBjb25uZWN0UmVxLnVzZUNodW5rZWRFbmNvZGluZ0J5RGVmYXVsdCA9IGZhbHNlOyAvLyBmb3IgdjAuNlxuICBjb25uZWN0UmVxLm9uY2UoJ3Jlc3BvbnNlJywgb25SZXNwb25zZSk7IC8vIGZvciB2MC42XG4gIGNvbm5lY3RSZXEub25jZSgndXBncmFkZScsIG9uVXBncmFkZSk7ICAgLy8gZm9yIHYwLjZcbiAgY29ubmVjdFJlcS5vbmNlKCdjb25uZWN0Jywgb25Db25uZWN0KTsgICAvLyBmb3IgdjAuNyBvciBsYXRlclxuICBjb25uZWN0UmVxLm9uY2UoJ2Vycm9yJywgb25FcnJvcik7XG4gIGNvbm5lY3RSZXEuZW5kKCk7XG5cbiAgZnVuY3Rpb24gb25SZXNwb25zZShyZXMpIHtcbiAgICAvLyBWZXJ5IGhhY2t5LiBUaGlzIGlzIG5lY2Vzc2FyeSB0byBhdm9pZCBodHRwLXBhcnNlciBsZWFrcy5cbiAgICByZXMudXBncmFkZSA9IHRydWU7XG4gIH1cblxuICBmdW5jdGlvbiBvblVwZ3JhZGUocmVzLCBzb2NrZXQsIGhlYWQpIHtcbiAgICAvLyBIYWNreS5cbiAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uKCkge1xuICAgICAgb25Db25uZWN0KHJlcywgc29ja2V0LCBoZWFkKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uQ29ubmVjdChyZXMsIHNvY2tldCwgaGVhZCkge1xuICAgIGNvbm5lY3RSZXEucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgc29ja2V0LnJlbW92ZUFsbExpc3RlbmVycygpO1xuXG4gICAgaWYgKHJlcy5zdGF0dXNDb2RlICE9PSAyMDApIHtcbiAgICAgIGRlYnVnKCd0dW5uZWxpbmcgc29ja2V0IGNvdWxkIG5vdCBiZSBlc3RhYmxpc2hlZCwgc3RhdHVzQ29kZT0lZCcsXG4gICAgICAgIHJlcy5zdGF0dXNDb2RlKTtcbiAgICAgIHNvY2tldC5kZXN0cm95KCk7XG4gICAgICB2YXIgZXJyb3IgPSBuZXcgRXJyb3IoJ3R1bm5lbGluZyBzb2NrZXQgY291bGQgbm90IGJlIGVzdGFibGlzaGVkLCAnICtcbiAgICAgICAgJ3N0YXR1c0NvZGU9JyArIHJlcy5zdGF0dXNDb2RlKTtcbiAgICAgIGVycm9yLmNvZGUgPSAnRUNPTk5SRVNFVCc7XG4gICAgICBvcHRpb25zLnJlcXVlc3QuZW1pdCgnZXJyb3InLCBlcnJvcik7XG4gICAgICBzZWxmLnJlbW92ZVNvY2tldChwbGFjZWhvbGRlcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChoZWFkLmxlbmd0aCA+IDApIHtcbiAgICAgIGRlYnVnKCdnb3QgaWxsZWdhbCByZXNwb25zZSBib2R5IGZyb20gcHJveHknKTtcbiAgICAgIHNvY2tldC5kZXN0cm95KCk7XG4gICAgICB2YXIgZXJyb3IgPSBuZXcgRXJyb3IoJ2dvdCBpbGxlZ2FsIHJlc3BvbnNlIGJvZHkgZnJvbSBwcm94eScpO1xuICAgICAgZXJyb3IuY29kZSA9ICdFQ09OTlJFU0VUJztcbiAgICAgIG9wdGlvbnMucmVxdWVzdC5lbWl0KCdlcnJvcicsIGVycm9yKTtcbiAgICAgIHNlbGYucmVtb3ZlU29ja2V0KHBsYWNlaG9sZGVyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZGVidWcoJ3R1bm5lbGluZyBjb25uZWN0aW9uIGhhcyBlc3RhYmxpc2hlZCcpO1xuICAgIHNlbGYuc29ja2V0c1tzZWxmLnNvY2tldHMuaW5kZXhPZihwbGFjZWhvbGRlcildID0gc29ja2V0O1xuICAgIHJldHVybiBjYihzb2NrZXQpO1xuICB9XG5cbiAgZnVuY3Rpb24gb25FcnJvcihjYXVzZSkge1xuICAgIGNvbm5lY3RSZXEucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG5cbiAgICBkZWJ1ZygndHVubmVsaW5nIHNvY2tldCBjb3VsZCBub3QgYmUgZXN0YWJsaXNoZWQsIGNhdXNlPSVzXFxuJyxcbiAgICAgICAgICBjYXVzZS5tZXNzYWdlLCBjYXVzZS5zdGFjayk7XG4gICAgdmFyIGVycm9yID0gbmV3IEVycm9yKCd0dW5uZWxpbmcgc29ja2V0IGNvdWxkIG5vdCBiZSBlc3RhYmxpc2hlZCwgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdjYXVzZT0nICsgY2F1c2UubWVzc2FnZSk7XG4gICAgZXJyb3IuY29kZSA9ICdFQ09OTlJFU0VUJztcbiAgICBvcHRpb25zLnJlcXVlc3QuZW1pdCgnZXJyb3InLCBlcnJvcik7XG4gICAgc2VsZi5yZW1vdmVTb2NrZXQocGxhY2Vob2xkZXIpO1xuICB9XG59O1xuXG5UdW5uZWxpbmdBZ2VudC5wcm90b3R5cGUucmVtb3ZlU29ja2V0ID0gZnVuY3Rpb24gcmVtb3ZlU29ja2V0KHNvY2tldCkge1xuICB2YXIgcG9zID0gdGhpcy5zb2NrZXRzLmluZGV4T2Yoc29ja2V0KVxuICBpZiAocG9zID09PSAtMSkge1xuICAgIHJldHVybjtcbiAgfVxuICB0aGlzLnNvY2tldHMuc3BsaWNlKHBvcywgMSk7XG5cbiAgdmFyIHBlbmRpbmcgPSB0aGlzLnJlcXVlc3RzLnNoaWZ0KCk7XG4gIGlmIChwZW5kaW5nKSB7XG4gICAgLy8gSWYgd2UgaGF2ZSBwZW5kaW5nIHJlcXVlc3RzIGFuZCBhIHNvY2tldCBnZXRzIGNsb3NlZCBhIG5ldyBvbmVcbiAgICAvLyBuZWVkcyB0byBiZSBjcmVhdGVkIHRvIHRha2Ugb3ZlciBpbiB0aGUgcG9vbCBmb3IgdGhlIG9uZSB0aGF0IGNsb3NlZC5cbiAgICB0aGlzLmNyZWF0ZVNvY2tldChwZW5kaW5nLCBmdW5jdGlvbihzb2NrZXQpIHtcbiAgICAgIHBlbmRpbmcucmVxdWVzdC5vblNvY2tldChzb2NrZXQpO1xuICAgIH0pO1xuICB9XG59O1xuXG5mdW5jdGlvbiBjcmVhdGVTZWN1cmVTb2NrZXQob3B0aW9ucywgY2IpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICBUdW5uZWxpbmdBZ2VudC5wcm90b3R5cGUuY3JlYXRlU29ja2V0LmNhbGwoc2VsZiwgb3B0aW9ucywgZnVuY3Rpb24oc29ja2V0KSB7XG4gICAgdmFyIGhvc3RIZWFkZXIgPSBvcHRpb25zLnJlcXVlc3QuZ2V0SGVhZGVyKCdob3N0Jyk7XG4gICAgdmFyIHRsc09wdGlvbnMgPSBtZXJnZU9wdGlvbnMoe30sIHNlbGYub3B0aW9ucywge1xuICAgICAgc29ja2V0OiBzb2NrZXQsXG4gICAgICBzZXJ2ZXJuYW1lOiBob3N0SGVhZGVyID8gaG9zdEhlYWRlci5yZXBsYWNlKC86LiokLywgJycpIDogb3B0aW9ucy5ob3N0XG4gICAgfSk7XG5cbiAgICAvLyAwIGlzIGR1bW15IHBvcnQgZm9yIHYwLjZcbiAgICB2YXIgc2VjdXJlU29ja2V0ID0gdGxzLmNvbm5lY3QoMCwgdGxzT3B0aW9ucyk7XG4gICAgc2VsZi5zb2NrZXRzW3NlbGYuc29ja2V0cy5pbmRleE9mKHNvY2tldCldID0gc2VjdXJlU29ja2V0O1xuICAgIGNiKHNlY3VyZVNvY2tldCk7XG4gIH0pO1xufVxuXG5cbmZ1bmN0aW9uIHRvT3B0aW9ucyhob3N0LCBwb3J0LCBsb2NhbEFkZHJlc3MpIHtcbiAgaWYgKHR5cGVvZiBob3N0ID09PSAnc3RyaW5nJykgeyAvLyBzaW5jZSB2MC4xMFxuICAgIHJldHVybiB7XG4gICAgICBob3N0OiBob3N0LFxuICAgICAgcG9ydDogcG9ydCxcbiAgICAgIGxvY2FsQWRkcmVzczogbG9jYWxBZGRyZXNzXG4gICAgfTtcbiAgfVxuICByZXR1cm4gaG9zdDsgLy8gZm9yIHYwLjExIG9yIGxhdGVyXG59XG5cbmZ1bmN0aW9uIG1lcmdlT3B0aW9ucyh0YXJnZXQpIHtcbiAgZm9yICh2YXIgaSA9IDEsIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgIHZhciBvdmVycmlkZXMgPSBhcmd1bWVudHNbaV07XG4gICAgaWYgKHR5cGVvZiBvdmVycmlkZXMgPT09ICdvYmplY3QnKSB7XG4gICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG92ZXJyaWRlcyk7XG4gICAgICBmb3IgKHZhciBqID0gMCwga2V5TGVuID0ga2V5cy5sZW5ndGg7IGogPCBrZXlMZW47ICsraikge1xuICAgICAgICB2YXIgayA9IGtleXNbal07XG4gICAgICAgIGlmIChvdmVycmlkZXNba10gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRhcmdldFtrXSA9IG92ZXJyaWRlc1trXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5cbnZhciBkZWJ1ZztcbmlmIChwcm9jZXNzLmVudi5OT0RFX0RFQlVHICYmIC9cXGJ0dW5uZWxcXGIvLnRlc3QocHJvY2Vzcy5lbnYuTk9ERV9ERUJVRykpIHtcbiAgZGVidWcgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgaWYgKHR5cGVvZiBhcmdzWzBdID09PSAnc3RyaW5nJykge1xuICAgICAgYXJnc1swXSA9ICdUVU5ORUw6ICcgKyBhcmdzWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcmdzLnVuc2hpZnQoJ1RVTk5FTDonKTtcbiAgICB9XG4gICAgY29uc29sZS5lcnJvci5hcHBseShjb25zb2xlLCBhcmdzKTtcbiAgfVxufSBlbHNlIHtcbiAgZGVidWcgPSBmdW5jdGlvbigpIHt9O1xufVxuZXhwb3J0cy5kZWJ1ZyA9IGRlYnVnOyAvLyBmb3IgdGVzdFxuIiwKICAgICJtb2R1bGUuZXhwb3J0cyA9IHtcbiAga0Nsb3NlOiBTeW1ib2woJ2Nsb3NlJyksXG4gIGtEZXN0cm95OiBTeW1ib2woJ2Rlc3Ryb3knKSxcbiAga0Rpc3BhdGNoOiBTeW1ib2woJ2Rpc3BhdGNoJyksXG4gIGtVcmw6IFN5bWJvbCgndXJsJyksXG4gIGtXcml0aW5nOiBTeW1ib2woJ3dyaXRpbmcnKSxcbiAga1Jlc3VtaW5nOiBTeW1ib2woJ3Jlc3VtaW5nJyksXG4gIGtRdWV1ZTogU3ltYm9sKCdxdWV1ZScpLFxuICBrQ29ubmVjdDogU3ltYm9sKCdjb25uZWN0JyksXG4gIGtDb25uZWN0aW5nOiBTeW1ib2woJ2Nvbm5lY3RpbmcnKSxcbiAga0hlYWRlcnNMaXN0OiBTeW1ib2woJ2hlYWRlcnMgbGlzdCcpLFxuICBrS2VlcEFsaXZlRGVmYXVsdFRpbWVvdXQ6IFN5bWJvbCgnZGVmYXVsdCBrZWVwIGFsaXZlIHRpbWVvdXQnKSxcbiAga0tlZXBBbGl2ZU1heFRpbWVvdXQ6IFN5bWJvbCgnbWF4IGtlZXAgYWxpdmUgdGltZW91dCcpLFxuICBrS2VlcEFsaXZlVGltZW91dFRocmVzaG9sZDogU3ltYm9sKCdrZWVwIGFsaXZlIHRpbWVvdXQgdGhyZXNob2xkJyksXG4gIGtLZWVwQWxpdmVUaW1lb3V0VmFsdWU6IFN5bWJvbCgna2VlcCBhbGl2ZSB0aW1lb3V0JyksXG4gIGtLZWVwQWxpdmU6IFN5bWJvbCgna2VlcCBhbGl2ZScpLFxuICBrSGVhZGVyc1RpbWVvdXQ6IFN5bWJvbCgnaGVhZGVycyB0aW1lb3V0JyksXG4gIGtCb2R5VGltZW91dDogU3ltYm9sKCdib2R5IHRpbWVvdXQnKSxcbiAga1NlcnZlck5hbWU6IFN5bWJvbCgnc2VydmVyIG5hbWUnKSxcbiAga0xvY2FsQWRkcmVzczogU3ltYm9sKCdsb2NhbCBhZGRyZXNzJyksXG4gIGtIb3N0OiBTeW1ib2woJ2hvc3QnKSxcbiAga05vUmVmOiBTeW1ib2woJ25vIHJlZicpLFxuICBrQm9keVVzZWQ6IFN5bWJvbCgndXNlZCcpLFxuICBrUnVubmluZzogU3ltYm9sKCdydW5uaW5nJyksXG4gIGtCbG9ja2luZzogU3ltYm9sKCdibG9ja2luZycpLFxuICBrUGVuZGluZzogU3ltYm9sKCdwZW5kaW5nJyksXG4gIGtTaXplOiBTeW1ib2woJ3NpemUnKSxcbiAga0J1c3k6IFN5bWJvbCgnYnVzeScpLFxuICBrUXVldWVkOiBTeW1ib2woJ3F1ZXVlZCcpLFxuICBrRnJlZTogU3ltYm9sKCdmcmVlJyksXG4gIGtDb25uZWN0ZWQ6IFN5bWJvbCgnY29ubmVjdGVkJyksXG4gIGtDbG9zZWQ6IFN5bWJvbCgnY2xvc2VkJyksXG4gIGtOZWVkRHJhaW46IFN5bWJvbCgnbmVlZCBkcmFpbicpLFxuICBrUmVzZXQ6IFN5bWJvbCgncmVzZXQnKSxcbiAga0Rlc3Ryb3llZDogU3ltYm9sLmZvcignbm9kZWpzLnN0cmVhbS5kZXN0cm95ZWQnKSxcbiAga01heEhlYWRlcnNTaXplOiBTeW1ib2woJ21heCBoZWFkZXJzIHNpemUnKSxcbiAga1J1bm5pbmdJZHg6IFN5bWJvbCgncnVubmluZyBpbmRleCcpLFxuICBrUGVuZGluZ0lkeDogU3ltYm9sKCdwZW5kaW5nIGluZGV4JyksXG4gIGtFcnJvcjogU3ltYm9sKCdlcnJvcicpLFxuICBrQ2xpZW50czogU3ltYm9sKCdjbGllbnRzJyksXG4gIGtDbGllbnQ6IFN5bWJvbCgnY2xpZW50JyksXG4gIGtQYXJzZXI6IFN5bWJvbCgncGFyc2VyJyksXG4gIGtPbkRlc3Ryb3llZDogU3ltYm9sKCdkZXN0cm95IGNhbGxiYWNrcycpLFxuICBrUGlwZWxpbmluZzogU3ltYm9sKCdwaXBlbGluaW5nJyksXG4gIGtTb2NrZXQ6IFN5bWJvbCgnc29ja2V0JyksXG4gIGtIb3N0SGVhZGVyOiBTeW1ib2woJ2hvc3QgaGVhZGVyJyksXG4gIGtDb25uZWN0b3I6IFN5bWJvbCgnY29ubmVjdG9yJyksXG4gIGtTdHJpY3RDb250ZW50TGVuZ3RoOiBTeW1ib2woJ3N0cmljdCBjb250ZW50IGxlbmd0aCcpLFxuICBrTWF4UmVkaXJlY3Rpb25zOiBTeW1ib2woJ21heFJlZGlyZWN0aW9ucycpLFxuICBrTWF4UmVxdWVzdHM6IFN5bWJvbCgnbWF4UmVxdWVzdHNQZXJDbGllbnQnKSxcbiAga1Byb3h5OiBTeW1ib2woJ3Byb3h5IGFnZW50IG9wdGlvbnMnKSxcbiAga0NvdW50ZXI6IFN5bWJvbCgnc29ja2V0IHJlcXVlc3QgY291bnRlcicpLFxuICBrSW50ZXJjZXB0b3JzOiBTeW1ib2woJ2Rpc3BhdGNoIGludGVyY2VwdG9ycycpLFxuICBrTWF4UmVzcG9uc2VTaXplOiBTeW1ib2woJ21heCByZXNwb25zZSBzaXplJyksXG4gIGtIVFRQMlNlc3Npb246IFN5bWJvbCgnaHR0cDJTZXNzaW9uJyksXG4gIGtIVFRQMlNlc3Npb25TdGF0ZTogU3ltYm9sKCdodHRwMlNlc3Npb24gc3RhdGUnKSxcbiAga0hUVFAyQnVpbGRSZXF1ZXN0OiBTeW1ib2woJ2h0dHAyIGJ1aWxkIHJlcXVlc3QnKSxcbiAga0hUVFAxQnVpbGRSZXF1ZXN0OiBTeW1ib2woJ2h0dHAxIGJ1aWxkIHJlcXVlc3QnKSxcbiAga0hUVFAyQ29weUhlYWRlcnM6IFN5bWJvbCgnaHR0cDIgY29weSBoZWFkZXJzJyksXG4gIGtIVFRQQ29ublZlcnNpb246IFN5bWJvbCgnaHR0cCBjb25uZWN0aW9uIHZlcnNpb24nKSxcbiAga1JldHJ5SGFuZGxlckRlZmF1bHRSZXRyeTogU3ltYm9sKCdyZXRyeSBhZ2VudCBkZWZhdWx0IHJldHJ5JyksXG4gIGtDb25zdHJ1Y3Q6IFN5bWJvbCgnY29uc3RydWN0YWJsZScpXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jbGFzcyBVbmRpY2lFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIHRoaXMubmFtZSA9ICdVbmRpY2lFcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUidcbiAgfVxufVxuXG5jbGFzcyBDb25uZWN0VGltZW91dEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgQ29ubmVjdFRpbWVvdXRFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnQ29ubmVjdFRpbWVvdXRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdDb25uZWN0IFRpbWVvdXQgRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfQ09OTkVDVF9USU1FT1VUJ1xuICB9XG59XG5cbmNsYXNzIEhlYWRlcnNUaW1lb3V0RXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBIZWFkZXJzVGltZW91dEVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdIZWFkZXJzVGltZW91dEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ0hlYWRlcnMgVGltZW91dCBFcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9IRUFERVJTX1RJTUVPVVQnXG4gIH1cbn1cblxuY2xhc3MgSGVhZGVyc092ZXJmbG93RXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBIZWFkZXJzT3ZlcmZsb3dFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnSGVhZGVyc092ZXJmbG93RXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnSGVhZGVycyBPdmVyZmxvdyBFcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9IRUFERVJTX09WRVJGTE9XJ1xuICB9XG59XG5cbmNsYXNzIEJvZHlUaW1lb3V0RXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBCb2R5VGltZW91dEVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdCb2R5VGltZW91dEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ0JvZHkgVGltZW91dCBFcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9CT0RZX1RJTUVPVVQnXG4gIH1cbn1cblxuY2xhc3MgUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlLCBzdGF0dXNDb2RlLCBoZWFkZXJzLCBib2R5KSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBSZXNwb25zZVN0YXR1c0NvZGVFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnUmVzcG9uc2UgU3RhdHVzIENvZGUgRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfUkVTUE9OU0VfU1RBVFVTX0NPREUnXG4gICAgdGhpcy5ib2R5ID0gYm9keVxuICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzQ29kZVxuICAgIHRoaXMuc3RhdHVzQ29kZSA9IHN0YXR1c0NvZGVcbiAgICB0aGlzLmhlYWRlcnMgPSBoZWFkZXJzXG4gIH1cbn1cblxuY2xhc3MgSW52YWxpZEFyZ3VtZW50RXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBJbnZhbGlkQXJndW1lbnRFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnSW52YWxpZEFyZ3VtZW50RXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnSW52YWxpZCBBcmd1bWVudCBFcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9JTlZBTElEX0FSRydcbiAgfVxufVxuXG5jbGFzcyBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIEludmFsaWRSZXR1cm5WYWx1ZUVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdJbnZhbGlkIFJldHVybiBWYWx1ZSBFcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9JTlZBTElEX1JFVFVSTl9WQUxVRSdcbiAgfVxufVxuXG5jbGFzcyBSZXF1ZXN0QWJvcnRlZEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgUmVxdWVzdEFib3J0ZWRFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnQWJvcnRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdSZXF1ZXN0IGFib3J0ZWQnXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfQUJPUlRFRCdcbiAgfVxufVxuXG5jbGFzcyBJbmZvcm1hdGlvbmFsRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBJbmZvcm1hdGlvbmFsRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0luZm9ybWF0aW9uYWxFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdSZXF1ZXN0IGluZm9ybWF0aW9uJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0lORk8nXG4gIH1cbn1cblxuY2xhc3MgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnUmVxdWVzdCBib2R5IGxlbmd0aCBkb2VzIG5vdCBtYXRjaCBjb250ZW50LWxlbmd0aCBoZWFkZXInXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfUkVRX0NPTlRFTlRfTEVOR1RIX01JU01BVENIJ1xuICB9XG59XG5cbmNsYXNzIFJlc3BvbnNlQ29udGVudExlbmd0aE1pc21hdGNoRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBSZXNwb25zZUNvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdSZXNwb25zZUNvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1Jlc3BvbnNlIGJvZHkgbGVuZ3RoIGRvZXMgbm90IG1hdGNoIGNvbnRlbnQtbGVuZ3RoIGhlYWRlcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9SRVNfQ09OVEVOVF9MRU5HVEhfTUlTTUFUQ0gnXG4gIH1cbn1cblxuY2xhc3MgQ2xpZW50RGVzdHJveWVkRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBDbGllbnREZXN0cm95ZWRFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnQ2xpZW50RGVzdHJveWVkRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnVGhlIGNsaWVudCBpcyBkZXN0cm95ZWQnXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfREVTVFJPWUVEJ1xuICB9XG59XG5cbmNsYXNzIENsaWVudENsb3NlZEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgQ2xpZW50Q2xvc2VkRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0NsaWVudENsb3NlZEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1RoZSBjbGllbnQgaXMgY2xvc2VkJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0NMT1NFRCdcbiAgfVxufVxuXG5jbGFzcyBTb2NrZXRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UsIHNvY2tldCkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgU29ja2V0RXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ1NvY2tldEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1NvY2tldCBlcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9TT0NLRVQnXG4gICAgdGhpcy5zb2NrZXQgPSBzb2NrZXRcbiAgfVxufVxuXG5jbGFzcyBOb3RTdXBwb3J0ZWRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIE5vdFN1cHBvcnRlZEVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdOb3RTdXBwb3J0ZWRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdOb3Qgc3VwcG9ydGVkIGVycm9yJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX05PVF9TVVBQT1JURUQnXG4gIH1cbn1cblxuY2xhc3MgQmFsYW5jZWRQb29sTWlzc2luZ1Vwc3RyZWFtRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBOb3RTdXBwb3J0ZWRFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnTWlzc2luZ1Vwc3RyZWFtRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnTm8gdXBzdHJlYW0gaGFzIGJlZW4gYWRkZWQgdG8gdGhlIEJhbGFuY2VkUG9vbCdcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9CUExfTUlTU0lOR19VUFNUUkVBTSdcbiAgfVxufVxuXG5jbGFzcyBIVFRQUGFyc2VyRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlLCBjb2RlLCBkYXRhKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBIVFRQUGFyc2VyRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0hUVFBQYXJzZXJFcnJvcidcbiAgICB0aGlzLmNvZGUgPSBjb2RlID8gYEhQRV8ke2NvZGV9YCA6IHVuZGVmaW5lZFxuICAgIHRoaXMuZGF0YSA9IGRhdGEgPyBkYXRhLnRvU3RyaW5nKCkgOiB1bmRlZmluZWRcbiAgfVxufVxuXG5jbGFzcyBSZXNwb25zZUV4Y2VlZGVkTWF4U2l6ZUVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgUmVzcG9uc2VFeGNlZWRlZE1heFNpemVFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnUmVzcG9uc2VFeGNlZWRlZE1heFNpemVFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdSZXNwb25zZSBjb250ZW50IGV4Y2VlZGVkIG1heCBzaXplJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX1JFU19FWENFRURFRF9NQVhfU0laRSdcbiAgfVxufVxuXG5jbGFzcyBSZXF1ZXN0UmV0cnlFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UsIGNvZGUsIHsgaGVhZGVycywgZGF0YSB9KSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBSZXF1ZXN0UmV0cnlFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnUmVxdWVzdFJldHJ5RXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnUmVxdWVzdCByZXRyeSBlcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9SRVFfUkVUUlknXG4gICAgdGhpcy5zdGF0dXNDb2RlID0gY29kZVxuICAgIHRoaXMuZGF0YSA9IGRhdGFcbiAgICB0aGlzLmhlYWRlcnMgPSBoZWFkZXJzXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEhUVFBQYXJzZXJFcnJvcixcbiAgVW5kaWNpRXJyb3IsXG4gIEhlYWRlcnNUaW1lb3V0RXJyb3IsXG4gIEhlYWRlcnNPdmVyZmxvd0Vycm9yLFxuICBCb2R5VGltZW91dEVycm9yLFxuICBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IsXG4gIENvbm5lY3RUaW1lb3V0RXJyb3IsXG4gIFJlc3BvbnNlU3RhdHVzQ29kZUVycm9yLFxuICBJbnZhbGlkQXJndW1lbnRFcnJvcixcbiAgSW52YWxpZFJldHVyblZhbHVlRXJyb3IsXG4gIFJlcXVlc3RBYm9ydGVkRXJyb3IsXG4gIENsaWVudERlc3Ryb3llZEVycm9yLFxuICBDbGllbnRDbG9zZWRFcnJvcixcbiAgSW5mb3JtYXRpb25hbEVycm9yLFxuICBTb2NrZXRFcnJvcixcbiAgTm90U3VwcG9ydGVkRXJyb3IsXG4gIFJlc3BvbnNlQ29udGVudExlbmd0aE1pc21hdGNoRXJyb3IsXG4gIEJhbGFuY2VkUG9vbE1pc3NpbmdVcHN0cmVhbUVycm9yLFxuICBSZXNwb25zZUV4Y2VlZGVkTWF4U2l6ZUVycm9yLFxuICBSZXF1ZXN0UmV0cnlFcnJvclxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+fSAqL1xuY29uc3QgaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmQgPSB7fVxuXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVFRQL0hlYWRlcnNcbmNvbnN0IHdlbGxrbm93bkhlYWRlck5hbWVzID0gW1xuICAnQWNjZXB0JyxcbiAgJ0FjY2VwdC1FbmNvZGluZycsXG4gICdBY2NlcHQtTGFuZ3VhZ2UnLFxuICAnQWNjZXB0LVJhbmdlcycsXG4gICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1DcmVkZW50aWFscycsXG4gICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1IZWFkZXJzJyxcbiAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LU1ldGhvZHMnLFxuICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luJyxcbiAgJ0FjY2Vzcy1Db250cm9sLUV4cG9zZS1IZWFkZXJzJyxcbiAgJ0FjY2Vzcy1Db250cm9sLU1heC1BZ2UnLFxuICAnQWNjZXNzLUNvbnRyb2wtUmVxdWVzdC1IZWFkZXJzJyxcbiAgJ0FjY2Vzcy1Db250cm9sLVJlcXVlc3QtTWV0aG9kJyxcbiAgJ0FnZScsXG4gICdBbGxvdycsXG4gICdBbHQtU3ZjJyxcbiAgJ0FsdC1Vc2VkJyxcbiAgJ0F1dGhvcml6YXRpb24nLFxuICAnQ2FjaGUtQ29udHJvbCcsXG4gICdDbGVhci1TaXRlLURhdGEnLFxuICAnQ29ubmVjdGlvbicsXG4gICdDb250ZW50LURpc3Bvc2l0aW9uJyxcbiAgJ0NvbnRlbnQtRW5jb2RpbmcnLFxuICAnQ29udGVudC1MYW5ndWFnZScsXG4gICdDb250ZW50LUxlbmd0aCcsXG4gICdDb250ZW50LUxvY2F0aW9uJyxcbiAgJ0NvbnRlbnQtUmFuZ2UnLFxuICAnQ29udGVudC1TZWN1cml0eS1Qb2xpY3knLFxuICAnQ29udGVudC1TZWN1cml0eS1Qb2xpY3ktUmVwb3J0LU9ubHknLFxuICAnQ29udGVudC1UeXBlJyxcbiAgJ0Nvb2tpZScsXG4gICdDcm9zcy1PcmlnaW4tRW1iZWRkZXItUG9saWN5JyxcbiAgJ0Nyb3NzLU9yaWdpbi1PcGVuZXItUG9saWN5JyxcbiAgJ0Nyb3NzLU9yaWdpbi1SZXNvdXJjZS1Qb2xpY3knLFxuICAnRGF0ZScsXG4gICdEZXZpY2UtTWVtb3J5JyxcbiAgJ0Rvd25saW5rJyxcbiAgJ0VDVCcsXG4gICdFVGFnJyxcbiAgJ0V4cGVjdCcsXG4gICdFeHBlY3QtQ1QnLFxuICAnRXhwaXJlcycsXG4gICdGb3J3YXJkZWQnLFxuICAnRnJvbScsXG4gICdIb3N0JyxcbiAgJ0lmLU1hdGNoJyxcbiAgJ0lmLU1vZGlmaWVkLVNpbmNlJyxcbiAgJ0lmLU5vbmUtTWF0Y2gnLFxuICAnSWYtUmFuZ2UnLFxuICAnSWYtVW5tb2RpZmllZC1TaW5jZScsXG4gICdLZWVwLUFsaXZlJyxcbiAgJ0xhc3QtTW9kaWZpZWQnLFxuICAnTGluaycsXG4gICdMb2NhdGlvbicsXG4gICdNYXgtRm9yd2FyZHMnLFxuICAnT3JpZ2luJyxcbiAgJ1Blcm1pc3Npb25zLVBvbGljeScsXG4gICdQcmFnbWEnLFxuICAnUHJveHktQXV0aGVudGljYXRlJyxcbiAgJ1Byb3h5LUF1dGhvcml6YXRpb24nLFxuICAnUlRUJyxcbiAgJ1JhbmdlJyxcbiAgJ1JlZmVyZXInLFxuICAnUmVmZXJyZXItUG9saWN5JyxcbiAgJ1JlZnJlc2gnLFxuICAnUmV0cnktQWZ0ZXInLFxuICAnU2VjLVdlYlNvY2tldC1BY2NlcHQnLFxuICAnU2VjLVdlYlNvY2tldC1FeHRlbnNpb25zJyxcbiAgJ1NlYy1XZWJTb2NrZXQtS2V5JyxcbiAgJ1NlYy1XZWJTb2NrZXQtUHJvdG9jb2wnLFxuICAnU2VjLVdlYlNvY2tldC1WZXJzaW9uJyxcbiAgJ1NlcnZlcicsXG4gICdTZXJ2ZXItVGltaW5nJyxcbiAgJ1NlcnZpY2UtV29ya2VyLUFsbG93ZWQnLFxuICAnU2VydmljZS1Xb3JrZXItTmF2aWdhdGlvbi1QcmVsb2FkJyxcbiAgJ1NldC1Db29raWUnLFxuICAnU291cmNlTWFwJyxcbiAgJ1N0cmljdC1UcmFuc3BvcnQtU2VjdXJpdHknLFxuICAnU3VwcG9ydHMtTG9hZGluZy1Nb2RlJyxcbiAgJ1RFJyxcbiAgJ1RpbWluZy1BbGxvdy1PcmlnaW4nLFxuICAnVHJhaWxlcicsXG4gICdUcmFuc2Zlci1FbmNvZGluZycsXG4gICdVcGdyYWRlJyxcbiAgJ1VwZ3JhZGUtSW5zZWN1cmUtUmVxdWVzdHMnLFxuICAnVXNlci1BZ2VudCcsXG4gICdWYXJ5JyxcbiAgJ1ZpYScsXG4gICdXV1ctQXV0aGVudGljYXRlJyxcbiAgJ1gtQ29udGVudC1UeXBlLU9wdGlvbnMnLFxuICAnWC1ETlMtUHJlZmV0Y2gtQ29udHJvbCcsXG4gICdYLUZyYW1lLU9wdGlvbnMnLFxuICAnWC1QZXJtaXR0ZWQtQ3Jvc3MtRG9tYWluLVBvbGljaWVzJyxcbiAgJ1gtUG93ZXJlZC1CeScsXG4gICdYLVJlcXVlc3RlZC1XaXRoJyxcbiAgJ1gtWFNTLVByb3RlY3Rpb24nXG5dXG5cbmZvciAobGV0IGkgPSAwOyBpIDwgd2VsbGtub3duSGVhZGVyTmFtZXMubGVuZ3RoOyArK2kpIHtcbiAgY29uc3Qga2V5ID0gd2VsbGtub3duSGVhZGVyTmFtZXNbaV1cbiAgY29uc3QgbG93ZXJDYXNlZEtleSA9IGtleS50b0xvd2VyQ2FzZSgpXG4gIGhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkW2tleV0gPSBoZWFkZXJOYW1lTG93ZXJDYXNlZFJlY29yZFtsb3dlckNhc2VkS2V5XSA9XG4gICAgbG93ZXJDYXNlZEtleVxufVxuXG4vLyBOb3RlOiBvYmplY3QgcHJvdG90eXBlcyBzaG91bGQgbm90IGJlIGFibGUgdG8gYmUgcmVmZXJlbmNlZC4gZS5nLiBgT2JqZWN0I2hhc093blByb3BlcnR5YC5cbk9iamVjdC5zZXRQcm90b3R5cGVPZihoZWFkZXJOYW1lTG93ZXJDYXNlZFJlY29yZCwgbnVsbClcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHdlbGxrbm93bkhlYWRlck5hbWVzLFxuICBoZWFkZXJOYW1lTG93ZXJDYXNlZFJlY29yZFxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbmNvbnN0IHsga0Rlc3Ryb3llZCwga0JvZHlVc2VkIH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBJbmNvbWluZ01lc3NhZ2UgfSA9IHJlcXVpcmUoJ2h0dHAnKVxuY29uc3Qgc3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJylcbmNvbnN0IG5ldCA9IHJlcXVpcmUoJ25ldCcpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gPSByZXF1aXJlKCcuL2Vycm9ycycpXG5jb25zdCB7IEJsb2IgfSA9IHJlcXVpcmUoJ2J1ZmZlcicpXG5jb25zdCBub2RlVXRpbCA9IHJlcXVpcmUoJ3V0aWwnKVxuY29uc3QgeyBzdHJpbmdpZnkgfSA9IHJlcXVpcmUoJ3F1ZXJ5c3RyaW5nJylcbmNvbnN0IHsgaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmQgfSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcblxuY29uc3QgW25vZGVNYWpvciwgbm9kZU1pbm9yXSA9IHByb2Nlc3MudmVyc2lvbnMubm9kZS5zcGxpdCgnLicpLm1hcCh2ID0+IE51bWJlcih2KSlcblxuZnVuY3Rpb24gbm9wICgpIHt9XG5cbmZ1bmN0aW9uIGlzU3RyZWFtIChvYmopIHtcbiAgcmV0dXJuIG9iaiAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0eXBlb2Ygb2JqLnBpcGUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIG9iai5vbiA9PT0gJ2Z1bmN0aW9uJ1xufVxuXG4vLyBiYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vbm9kZS1mZXRjaC9mZXRjaC1ibG9iL2Jsb2IvOGFiNTg3ZDM0MDgwZGU5NDE0MGI1NGYwNzE2ODQ1MWU3ZDBiNjU1ZS9pbmRleC5qcyNMMjI5LUwyNDEgKE1JVCBMaWNlbnNlKVxuZnVuY3Rpb24gaXNCbG9iTGlrZSAob2JqZWN0KSB7XG4gIHJldHVybiAoQmxvYiAmJiBvYmplY3QgaW5zdGFuY2VvZiBCbG9iKSB8fCAoXG4gICAgb2JqZWN0ICYmXG4gICAgdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiZcbiAgICAodHlwZW9mIG9iamVjdC5zdHJlYW0gPT09ICdmdW5jdGlvbicgfHxcbiAgICAgIHR5cGVvZiBvYmplY3QuYXJyYXlCdWZmZXIgPT09ICdmdW5jdGlvbicpICYmXG4gICAgL14oQmxvYnxGaWxlKSQvLnRlc3Qob2JqZWN0W1N5bWJvbC50b1N0cmluZ1RhZ10pXG4gIClcbn1cblxuZnVuY3Rpb24gYnVpbGRVUkwgKHVybCwgcXVlcnlQYXJhbXMpIHtcbiAgaWYgKHVybC5pbmNsdWRlcygnPycpIHx8IHVybC5pbmNsdWRlcygnIycpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdRdWVyeSBwYXJhbXMgY2Fubm90IGJlIHBhc3NlZCB3aGVuIHVybCBhbHJlYWR5IGNvbnRhaW5zIFwiP1wiIG9yIFwiI1wiLicpXG4gIH1cblxuICBjb25zdCBzdHJpbmdpZmllZCA9IHN0cmluZ2lmeShxdWVyeVBhcmFtcylcblxuICBpZiAoc3RyaW5naWZpZWQpIHtcbiAgICB1cmwgKz0gJz8nICsgc3RyaW5naWZpZWRcbiAgfVxuXG4gIHJldHVybiB1cmxcbn1cblxuZnVuY3Rpb24gcGFyc2VVUkwgKHVybCkge1xuICBpZiAodHlwZW9mIHVybCA9PT0gJ3N0cmluZycpIHtcbiAgICB1cmwgPSBuZXcgVVJMKHVybClcblxuICAgIGlmICghL15odHRwcz86Ly50ZXN0KHVybC5vcmlnaW4gfHwgdXJsLnByb3RvY29sKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIFVSTCBwcm90b2NvbDogdGhlIFVSTCBtdXN0IHN0YXJ0IHdpdGggYGh0dHA6YCBvciBgaHR0cHM6YC4nKVxuICAgIH1cblxuICAgIHJldHVybiB1cmxcbiAgfVxuXG4gIGlmICghdXJsIHx8IHR5cGVvZiB1cmwgIT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIFVSTDogVGhlIFVSTCBhcmd1bWVudCBtdXN0IGJlIGEgbm9uLW51bGwgb2JqZWN0LicpXG4gIH1cblxuICBpZiAoIS9eaHR0cHM/Oi8udGVzdCh1cmwub3JpZ2luIHx8IHVybC5wcm90b2NvbCkpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0ludmFsaWQgVVJMIHByb3RvY29sOiB0aGUgVVJMIG11c3Qgc3RhcnQgd2l0aCBgaHR0cDpgIG9yIGBodHRwczpgLicpXG4gIH1cblxuICBpZiAoISh1cmwgaW5zdGFuY2VvZiBVUkwpKSB7XG4gICAgaWYgKHVybC5wb3J0ICE9IG51bGwgJiYgdXJsLnBvcnQgIT09ICcnICYmICFOdW1iZXIuaXNGaW5pdGUocGFyc2VJbnQodXJsLnBvcnQpKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIFVSTDogcG9ydCBtdXN0IGJlIGEgdmFsaWQgaW50ZWdlciBvciBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBpbnRlZ2VyLicpXG4gICAgfVxuXG4gICAgaWYgKHVybC5wYXRoICE9IG51bGwgJiYgdHlwZW9mIHVybC5wYXRoICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIFVSTCBwYXRoOiB0aGUgcGF0aCBtdXN0IGJlIGEgc3RyaW5nIG9yIG51bGwvdW5kZWZpbmVkLicpXG4gICAgfVxuXG4gICAgaWYgKHVybC5wYXRobmFtZSAhPSBudWxsICYmIHR5cGVvZiB1cmwucGF0aG5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0ludmFsaWQgVVJMIHBhdGhuYW1lOiB0aGUgcGF0aG5hbWUgbXVzdCBiZSBhIHN0cmluZyBvciBudWxsL3VuZGVmaW5lZC4nKVxuICAgIH1cblxuICAgIGlmICh1cmwuaG9zdG5hbWUgIT0gbnVsbCAmJiB0eXBlb2YgdXJsLmhvc3RuYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIFVSTCBob3N0bmFtZTogdGhlIGhvc3RuYW1lIG11c3QgYmUgYSBzdHJpbmcgb3IgbnVsbC91bmRlZmluZWQuJylcbiAgICB9XG5cbiAgICBpZiAodXJsLm9yaWdpbiAhPSBudWxsICYmIHR5cGVvZiB1cmwub3JpZ2luICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIFVSTCBvcmlnaW46IHRoZSBvcmlnaW4gbXVzdCBiZSBhIHN0cmluZyBvciBudWxsL3VuZGVmaW5lZC4nKVxuICAgIH1cblxuICAgIGNvbnN0IHBvcnQgPSB1cmwucG9ydCAhPSBudWxsXG4gICAgICA/IHVybC5wb3J0XG4gICAgICA6ICh1cmwucHJvdG9jb2wgPT09ICdodHRwczonID8gNDQzIDogODApXG4gICAgbGV0IG9yaWdpbiA9IHVybC5vcmlnaW4gIT0gbnVsbFxuICAgICAgPyB1cmwub3JpZ2luXG4gICAgICA6IGAke3VybC5wcm90b2NvbH0vLyR7dXJsLmhvc3RuYW1lfToke3BvcnR9YFxuICAgIGxldCBwYXRoID0gdXJsLnBhdGggIT0gbnVsbFxuICAgICAgPyB1cmwucGF0aFxuICAgICAgOiBgJHt1cmwucGF0aG5hbWUgfHwgJyd9JHt1cmwuc2VhcmNoIHx8ICcnfWBcblxuICAgIGlmIChvcmlnaW4uZW5kc1dpdGgoJy8nKSkge1xuICAgICAgb3JpZ2luID0gb3JpZ2luLnN1YnN0cmluZygwLCBvcmlnaW4ubGVuZ3RoIC0gMSlcbiAgICB9XG5cbiAgICBpZiAocGF0aCAmJiAhcGF0aC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgIHBhdGggPSBgLyR7cGF0aH1gXG4gICAgfVxuICAgIC8vIG5ldyBVUkwocGF0aCwgb3JpZ2luKSBpcyB1bnNhZmUgd2hlbiBgcGF0aGAgY29udGFpbnMgYW4gYWJzb2x1dGUgVVJMXG4gICAgLy8gRnJvbSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvVVJML1VSTDpcbiAgICAvLyBJZiBmaXJzdCBwYXJhbWV0ZXIgaXMgYSByZWxhdGl2ZSBVUkwsIHNlY29uZCBwYXJhbSBpcyByZXF1aXJlZCwgYW5kIHdpbGwgYmUgdXNlZCBhcyB0aGUgYmFzZSBVUkwuXG4gICAgLy8gSWYgZmlyc3QgcGFyYW1ldGVyIGlzIGFuIGFic29sdXRlIFVSTCwgYSBnaXZlbiBzZWNvbmQgcGFyYW0gd2lsbCBiZSBpZ25vcmVkLlxuICAgIHVybCA9IG5ldyBVUkwob3JpZ2luICsgcGF0aClcbiAgfVxuXG4gIHJldHVybiB1cmxcbn1cblxuZnVuY3Rpb24gcGFyc2VPcmlnaW4gKHVybCkge1xuICB1cmwgPSBwYXJzZVVSTCh1cmwpXG5cbiAgaWYgKHVybC5wYXRobmFtZSAhPT0gJy8nIHx8IHVybC5zZWFyY2ggfHwgdXJsLmhhc2gpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgdXJsJylcbiAgfVxuXG4gIHJldHVybiB1cmxcbn1cblxuZnVuY3Rpb24gZ2V0SG9zdG5hbWUgKGhvc3QpIHtcbiAgaWYgKGhvc3RbMF0gPT09ICdbJykge1xuICAgIGNvbnN0IGlkeCA9IGhvc3QuaW5kZXhPZignXScpXG5cbiAgICBhc3NlcnQoaWR4ICE9PSAtMSlcbiAgICByZXR1cm4gaG9zdC5zdWJzdHJpbmcoMSwgaWR4KVxuICB9XG5cbiAgY29uc3QgaWR4ID0gaG9zdC5pbmRleE9mKCc6JylcbiAgaWYgKGlkeCA9PT0gLTEpIHJldHVybiBob3N0XG5cbiAgcmV0dXJuIGhvc3Quc3Vic3RyaW5nKDAsIGlkeClcbn1cblxuLy8gSVAgYWRkcmVzc2VzIGFyZSBub3QgdmFsaWQgc2VydmVyIG5hbWVzIHBlciBSRkM2MDY2XG4vLyA+IEN1cnJlbnRseSwgdGhlIG9ubHkgc2VydmVyIG5hbWVzIHN1cHBvcnRlZCBhcmUgRE5TIGhvc3RuYW1lc1xuZnVuY3Rpb24gZ2V0U2VydmVyTmFtZSAoaG9zdCkge1xuICBpZiAoIWhvc3QpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBob3N0LCAnc3RyaW5nJylcblxuICBjb25zdCBzZXJ2ZXJuYW1lID0gZ2V0SG9zdG5hbWUoaG9zdClcbiAgaWYgKG5ldC5pc0lQKHNlcnZlcm5hbWUpKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICByZXR1cm4gc2VydmVybmFtZVxufVxuXG5mdW5jdGlvbiBkZWVwQ2xvbmUgKG9iaikge1xuICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvYmopKVxufVxuXG5mdW5jdGlvbiBpc0FzeW5jSXRlcmFibGUgKG9iaikge1xuICByZXR1cm4gISEob2JqICE9IG51bGwgJiYgdHlwZW9mIG9ialtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPT09ICdmdW5jdGlvbicpXG59XG5cbmZ1bmN0aW9uIGlzSXRlcmFibGUgKG9iaikge1xuICByZXR1cm4gISEob2JqICE9IG51bGwgJiYgKHR5cGVvZiBvYmpbU3ltYm9sLml0ZXJhdG9yXSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2Ygb2JqW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9PT0gJ2Z1bmN0aW9uJykpXG59XG5cbmZ1bmN0aW9uIGJvZHlMZW5ndGggKGJvZHkpIHtcbiAgaWYgKGJvZHkgPT0gbnVsbCkge1xuICAgIHJldHVybiAwXG4gIH0gZWxzZSBpZiAoaXNTdHJlYW0oYm9keSkpIHtcbiAgICBjb25zdCBzdGF0ZSA9IGJvZHkuX3JlYWRhYmxlU3RhdGVcbiAgICByZXR1cm4gc3RhdGUgJiYgc3RhdGUub2JqZWN0TW9kZSA9PT0gZmFsc2UgJiYgc3RhdGUuZW5kZWQgPT09IHRydWUgJiYgTnVtYmVyLmlzRmluaXRlKHN0YXRlLmxlbmd0aClcbiAgICAgID8gc3RhdGUubGVuZ3RoXG4gICAgICA6IG51bGxcbiAgfSBlbHNlIGlmIChpc0Jsb2JMaWtlKGJvZHkpKSB7XG4gICAgcmV0dXJuIGJvZHkuc2l6ZSAhPSBudWxsID8gYm9keS5zaXplIDogbnVsbFxuICB9IGVsc2UgaWYgKGlzQnVmZmVyKGJvZHkpKSB7XG4gICAgcmV0dXJuIGJvZHkuYnl0ZUxlbmd0aFxuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuZnVuY3Rpb24gaXNEZXN0cm95ZWQgKHN0cmVhbSkge1xuICByZXR1cm4gIXN0cmVhbSB8fCAhIShzdHJlYW0uZGVzdHJveWVkIHx8IHN0cmVhbVtrRGVzdHJveWVkXSlcbn1cblxuZnVuY3Rpb24gaXNSZWFkYWJsZUFib3J0ZWQgKHN0cmVhbSkge1xuICBjb25zdCBzdGF0ZSA9IHN0cmVhbSAmJiBzdHJlYW0uX3JlYWRhYmxlU3RhdGVcbiAgcmV0dXJuIGlzRGVzdHJveWVkKHN0cmVhbSkgJiYgc3RhdGUgJiYgIXN0YXRlLmVuZEVtaXR0ZWRcbn1cblxuZnVuY3Rpb24gZGVzdHJveSAoc3RyZWFtLCBlcnIpIHtcbiAgaWYgKHN0cmVhbSA9PSBudWxsIHx8ICFpc1N0cmVhbShzdHJlYW0pIHx8IGlzRGVzdHJveWVkKHN0cmVhbSkpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmICh0eXBlb2Ygc3RyZWFtLmRlc3Ryb3kgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAoT2JqZWN0LmdldFByb3RvdHlwZU9mKHN0cmVhbSkuY29uc3RydWN0b3IgPT09IEluY29taW5nTWVzc2FnZSkge1xuICAgICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvcHVsbC8zODUwNS9maWxlc1xuICAgICAgc3RyZWFtLnNvY2tldCA9IG51bGxcbiAgICB9XG5cbiAgICBzdHJlYW0uZGVzdHJveShlcnIpXG4gIH0gZWxzZSBpZiAoZXJyKSB7XG4gICAgcHJvY2Vzcy5uZXh0VGljaygoc3RyZWFtLCBlcnIpID0+IHtcbiAgICAgIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVycilcbiAgICB9LCBzdHJlYW0sIGVycilcbiAgfVxuXG4gIGlmIChzdHJlYW0uZGVzdHJveWVkICE9PSB0cnVlKSB7XG4gICAgc3RyZWFtW2tEZXN0cm95ZWRdID0gdHJ1ZVxuICB9XG59XG5cbmNvbnN0IEtFRVBBTElWRV9USU1FT1VUX0VYUFIgPSAvdGltZW91dD0oXFxkKykvXG5mdW5jdGlvbiBwYXJzZUtlZXBBbGl2ZVRpbWVvdXQgKHZhbCkge1xuICBjb25zdCBtID0gdmFsLnRvU3RyaW5nKCkubWF0Y2goS0VFUEFMSVZFX1RJTUVPVVRfRVhQUilcbiAgcmV0dXJuIG0gPyBwYXJzZUludChtWzFdLCAxMCkgKiAxMDAwIDogbnVsbFxufVxuXG4vKipcbiAqIFJldHJpZXZlcyBhIGhlYWRlciBuYW1lIGFuZCByZXR1cm5zIGl0cyBsb3dlcmNhc2UgdmFsdWUuXG4gKiBAcGFyYW0ge3N0cmluZyB8IEJ1ZmZlcn0gdmFsdWUgSGVhZGVyIG5hbWVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGhlYWRlck5hbWVUb1N0cmluZyAodmFsdWUpIHtcbiAgcmV0dXJuIGhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkW3ZhbHVlXSB8fCB2YWx1ZS50b0xvd2VyQ2FzZSgpXG59XG5cbmZ1bmN0aW9uIHBhcnNlSGVhZGVycyAoaGVhZGVycywgb2JqID0ge30pIHtcbiAgLy8gRm9yIEgyIHN1cHBvcnRcbiAgaWYgKCFBcnJheS5pc0FycmF5KGhlYWRlcnMpKSByZXR1cm4gaGVhZGVyc1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaGVhZGVycy5sZW5ndGg7IGkgKz0gMikge1xuICAgIGNvbnN0IGtleSA9IGhlYWRlcnNbaV0udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpXG4gICAgbGV0IHZhbCA9IG9ialtrZXldXG5cbiAgICBpZiAoIXZhbCkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVyc1tpICsgMV0pKSB7XG4gICAgICAgIG9ialtrZXldID0gaGVhZGVyc1tpICsgMV0ubWFwKHggPT4geC50b1N0cmluZygndXRmOCcpKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2JqW2tleV0gPSBoZWFkZXJzW2kgKyAxXS50b1N0cmluZygndXRmOCcpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICAgIHZhbCA9IFt2YWxdXG4gICAgICAgIG9ialtrZXldID0gdmFsXG4gICAgICB9XG4gICAgICB2YWwucHVzaChoZWFkZXJzW2kgKyAxXS50b1N0cmluZygndXRmOCcpKVxuICAgIH1cbiAgfVxuXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvcHVsbC80NjUyOFxuICBpZiAoJ2NvbnRlbnQtbGVuZ3RoJyBpbiBvYmogJiYgJ2NvbnRlbnQtZGlzcG9zaXRpb24nIGluIG9iaikge1xuICAgIG9ialsnY29udGVudC1kaXNwb3NpdGlvbiddID0gQnVmZmVyLmZyb20ob2JqWydjb250ZW50LWRpc3Bvc2l0aW9uJ10pLnRvU3RyaW5nKCdsYXRpbjEnKVxuICB9XG5cbiAgcmV0dXJuIG9ialxufVxuXG5mdW5jdGlvbiBwYXJzZVJhd0hlYWRlcnMgKGhlYWRlcnMpIHtcbiAgY29uc3QgcmV0ID0gW11cbiAgbGV0IGhhc0NvbnRlbnRMZW5ndGggPSBmYWxzZVxuICBsZXQgY29udGVudERpc3Bvc2l0aW9uSWR4ID0gLTFcblxuICBmb3IgKGxldCBuID0gMDsgbiA8IGhlYWRlcnMubGVuZ3RoOyBuICs9IDIpIHtcbiAgICBjb25zdCBrZXkgPSBoZWFkZXJzW24gKyAwXS50b1N0cmluZygpXG4gICAgY29uc3QgdmFsID0gaGVhZGVyc1tuICsgMV0udG9TdHJpbmcoJ3V0ZjgnKVxuXG4gICAgaWYgKGtleS5sZW5ndGggPT09IDE0ICYmIChrZXkgPT09ICdjb250ZW50LWxlbmd0aCcgfHwga2V5LnRvTG93ZXJDYXNlKCkgPT09ICdjb250ZW50LWxlbmd0aCcpKSB7XG4gICAgICByZXQucHVzaChrZXksIHZhbClcbiAgICAgIGhhc0NvbnRlbnRMZW5ndGggPSB0cnVlXG4gICAgfSBlbHNlIGlmIChrZXkubGVuZ3RoID09PSAxOSAmJiAoa2V5ID09PSAnY29udGVudC1kaXNwb3NpdGlvbicgfHwga2V5LnRvTG93ZXJDYXNlKCkgPT09ICdjb250ZW50LWRpc3Bvc2l0aW9uJykpIHtcbiAgICAgIGNvbnRlbnREaXNwb3NpdGlvbklkeCA9IHJldC5wdXNoKGtleSwgdmFsKSAtIDFcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0LnB1c2goa2V5LCB2YWwpXG4gICAgfVxuICB9XG5cbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9wdWxsLzQ2NTI4XG4gIGlmIChoYXNDb250ZW50TGVuZ3RoICYmIGNvbnRlbnREaXNwb3NpdGlvbklkeCAhPT0gLTEpIHtcbiAgICByZXRbY29udGVudERpc3Bvc2l0aW9uSWR4XSA9IEJ1ZmZlci5mcm9tKHJldFtjb250ZW50RGlzcG9zaXRpb25JZHhdKS50b1N0cmluZygnbGF0aW4xJylcbiAgfVxuXG4gIHJldHVybiByZXRcbn1cblxuZnVuY3Rpb24gaXNCdWZmZXIgKGJ1ZmZlcikge1xuICAvLyBTZWUsIGh0dHBzOi8vZ2l0aHViLmNvbS9tY29sbGluYS91bmRpY2kvcHVsbC8zMTlcbiAgcmV0dXJuIGJ1ZmZlciBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkgfHwgQnVmZmVyLmlzQnVmZmVyKGJ1ZmZlcilcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVIYW5kbGVyIChoYW5kbGVyLCBtZXRob2QsIHVwZ3JhZGUpIHtcbiAgaWYgKCFoYW5kbGVyIHx8IHR5cGVvZiBoYW5kbGVyICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaGFuZGxlciBtdXN0IGJlIGFuIG9iamVjdCcpXG4gIH1cblxuICBpZiAodHlwZW9mIGhhbmRsZXIub25Db25uZWN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uQ29ubmVjdCBtZXRob2QnKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBoYW5kbGVyLm9uRXJyb3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25FcnJvciBtZXRob2QnKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBoYW5kbGVyLm9uQm9keVNlbnQgIT09ICdmdW5jdGlvbicgJiYgaGFuZGxlci5vbkJvZHlTZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25Cb2R5U2VudCBtZXRob2QnKVxuICB9XG5cbiAgaWYgKHVwZ3JhZGUgfHwgbWV0aG9kID09PSAnQ09OTkVDVCcpIHtcbiAgICBpZiAodHlwZW9mIGhhbmRsZXIub25VcGdyYWRlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25VcGdyYWRlIG1ldGhvZCcpXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmICh0eXBlb2YgaGFuZGxlci5vbkhlYWRlcnMgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkhlYWRlcnMgbWV0aG9kJylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGhhbmRsZXIub25EYXRhICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25EYXRhIG1ldGhvZCcpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBoYW5kbGVyLm9uQ29tcGxldGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkNvbXBsZXRlIG1ldGhvZCcpXG4gICAgfVxuICB9XG59XG5cbi8vIEEgYm9keSBpcyBkaXN0dXJiZWQgaWYgaXQgaGFzIGJlZW4gcmVhZCBmcm9tIGFuZCBpdCBjYW5ub3Rcbi8vIGJlIHJlLXVzZWQgd2l0aG91dCBsb3Npbmcgc3RhdGUgb3IgZGF0YS5cbmZ1bmN0aW9uIGlzRGlzdHVyYmVkIChib2R5KSB7XG4gIHJldHVybiAhIShib2R5ICYmIChcbiAgICBzdHJlYW0uaXNEaXN0dXJiZWRcbiAgICAgID8gc3RyZWFtLmlzRGlzdHVyYmVkKGJvZHkpIHx8IGJvZHlba0JvZHlVc2VkXSAvLyBUT0RPIChmaXgpOiBXaHkgaXMgYm9keVtrQm9keVVzZWRdIG5lZWRlZD9cbiAgICAgIDogYm9keVtrQm9keVVzZWRdIHx8XG4gICAgICAgIGJvZHkucmVhZGFibGVEaWRSZWFkIHx8XG4gICAgICAgIChib2R5Ll9yZWFkYWJsZVN0YXRlICYmIGJvZHkuX3JlYWRhYmxlU3RhdGUuZGF0YUVtaXR0ZWQpIHx8XG4gICAgICAgIGlzUmVhZGFibGVBYm9ydGVkKGJvZHkpXG4gICkpXG59XG5cbmZ1bmN0aW9uIGlzRXJyb3JlZCAoYm9keSkge1xuICByZXR1cm4gISEoYm9keSAmJiAoXG4gICAgc3RyZWFtLmlzRXJyb3JlZFxuICAgICAgPyBzdHJlYW0uaXNFcnJvcmVkKGJvZHkpXG4gICAgICA6IC9zdGF0ZTogJ2Vycm9yZWQnLy50ZXN0KG5vZGVVdGlsLmluc3BlY3QoYm9keSlcbiAgICAgICkpKVxufVxuXG5mdW5jdGlvbiBpc1JlYWRhYmxlIChib2R5KSB7XG4gIHJldHVybiAhIShib2R5ICYmIChcbiAgICBzdHJlYW0uaXNSZWFkYWJsZVxuICAgICAgPyBzdHJlYW0uaXNSZWFkYWJsZShib2R5KVxuICAgICAgOiAvc3RhdGU6ICdyZWFkYWJsZScvLnRlc3Qobm9kZVV0aWwuaW5zcGVjdChib2R5KVxuICAgICAgKSkpXG59XG5cbmZ1bmN0aW9uIGdldFNvY2tldEluZm8gKHNvY2tldCkge1xuICByZXR1cm4ge1xuICAgIGxvY2FsQWRkcmVzczogc29ja2V0LmxvY2FsQWRkcmVzcyxcbiAgICBsb2NhbFBvcnQ6IHNvY2tldC5sb2NhbFBvcnQsXG4gICAgcmVtb3RlQWRkcmVzczogc29ja2V0LnJlbW90ZUFkZHJlc3MsXG4gICAgcmVtb3RlUG9ydDogc29ja2V0LnJlbW90ZVBvcnQsXG4gICAgcmVtb3RlRmFtaWx5OiBzb2NrZXQucmVtb3RlRmFtaWx5LFxuICAgIHRpbWVvdXQ6IHNvY2tldC50aW1lb3V0LFxuICAgIGJ5dGVzV3JpdHRlbjogc29ja2V0LmJ5dGVzV3JpdHRlbixcbiAgICBieXRlc1JlYWQ6IHNvY2tldC5ieXRlc1JlYWRcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiAqIGNvbnZlcnRJdGVyYWJsZVRvQnVmZmVyIChpdGVyYWJsZSkge1xuICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIGl0ZXJhYmxlKSB7XG4gICAgeWllbGQgQnVmZmVyLmlzQnVmZmVyKGNodW5rKSA/IGNodW5rIDogQnVmZmVyLmZyb20oY2h1bmspXG4gIH1cbn1cblxubGV0IFJlYWRhYmxlU3RyZWFtXG5mdW5jdGlvbiBSZWFkYWJsZVN0cmVhbUZyb20gKGl0ZXJhYmxlKSB7XG4gIGlmICghUmVhZGFibGVTdHJlYW0pIHtcbiAgICBSZWFkYWJsZVN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbS93ZWInKS5SZWFkYWJsZVN0cmVhbVxuICB9XG5cbiAgaWYgKFJlYWRhYmxlU3RyZWFtLmZyb20pIHtcbiAgICByZXR1cm4gUmVhZGFibGVTdHJlYW0uZnJvbShjb252ZXJ0SXRlcmFibGVUb0J1ZmZlcihpdGVyYWJsZSkpXG4gIH1cblxuICBsZXQgaXRlcmF0b3JcbiAgcmV0dXJuIG5ldyBSZWFkYWJsZVN0cmVhbShcbiAgICB7XG4gICAgICBhc3luYyBzdGFydCAoKSB7XG4gICAgICAgIGl0ZXJhdG9yID0gaXRlcmFibGVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKClcbiAgICAgIH0sXG4gICAgICBhc3luYyBwdWxsIChjb250cm9sbGVyKSB7XG4gICAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IGl0ZXJhdG9yLm5leHQoKVxuICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnRyb2xsZXIuY2xvc2UoKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgYnVmID0gQnVmZmVyLmlzQnVmZmVyKHZhbHVlKSA/IHZhbHVlIDogQnVmZmVyLmZyb20odmFsdWUpXG4gICAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KGJ1ZikpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXIuZGVzaXJlZFNpemUgPiAwXG4gICAgICB9LFxuICAgICAgYXN5bmMgY2FuY2VsIChyZWFzb24pIHtcbiAgICAgICAgYXdhaXQgaXRlcmF0b3IucmV0dXJuKClcbiAgICAgIH1cbiAgICB9LFxuICAgIDBcbiAgKVxufVxuXG4vLyBUaGUgY2h1bmsgc2hvdWxkIGJlIGEgRm9ybURhdGEgaW5zdGFuY2UgYW5kIGNvbnRhaW5zXG4vLyBhbGwgdGhlIHJlcXVpcmVkIG1ldGhvZHMuXG5mdW5jdGlvbiBpc0Zvcm1EYXRhTGlrZSAob2JqZWN0KSB7XG4gIHJldHVybiAoXG4gICAgb2JqZWN0ICYmXG4gICAgdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiZcbiAgICB0eXBlb2Ygb2JqZWN0LmFwcGVuZCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBvYmplY3QuZGVsZXRlID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIG9iamVjdC5nZXQgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2Ygb2JqZWN0LmdldEFsbCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBvYmplY3QuaGFzID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIG9iamVjdC5zZXQgPT09ICdmdW5jdGlvbicgJiZcbiAgICBvYmplY3RbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ0Zvcm1EYXRhJ1xuICApXG59XG5cbmZ1bmN0aW9uIHRocm93SWZBYm9ydGVkIChzaWduYWwpIHtcbiAgaWYgKCFzaWduYWwpIHsgcmV0dXJuIH1cbiAgaWYgKHR5cGVvZiBzaWduYWwudGhyb3dJZkFib3J0ZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICBzaWduYWwudGhyb3dJZkFib3J0ZWQoKVxuICB9IGVsc2Uge1xuICAgIGlmIChzaWduYWwuYWJvcnRlZCkge1xuICAgICAgLy8gRE9NRXhjZXB0aW9uIG5vdCBhdmFpbGFibGUgPCB2MTcuMC4wXG4gICAgICBjb25zdCBlcnIgPSBuZXcgRXJyb3IoJ1RoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQnKVxuICAgICAgZXJyLm5hbWUgPSAnQWJvcnRFcnJvcidcbiAgICAgIHRocm93IGVyclxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhZGRBYm9ydExpc3RlbmVyIChzaWduYWwsIGxpc3RlbmVyKSB7XG4gIGlmICgnYWRkRXZlbnRMaXN0ZW5lcicgaW4gc2lnbmFsKSB7XG4gICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgbGlzdGVuZXIsIHsgb25jZTogdHJ1ZSB9KVxuICAgIHJldHVybiAoKSA9PiBzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBsaXN0ZW5lcilcbiAgfVxuICBzaWduYWwuYWRkTGlzdGVuZXIoJ2Fib3J0JywgbGlzdGVuZXIpXG4gIHJldHVybiAoKSA9PiBzaWduYWwucmVtb3ZlTGlzdGVuZXIoJ2Fib3J0JywgbGlzdGVuZXIpXG59XG5cbmNvbnN0IGhhc1RvV2VsbEZvcm1lZCA9ICEhU3RyaW5nLnByb3RvdHlwZS50b1dlbGxGb3JtZWRcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsXG4gKi9cbmZ1bmN0aW9uIHRvVVNWU3RyaW5nICh2YWwpIHtcbiAgaWYgKGhhc1RvV2VsbEZvcm1lZCkge1xuICAgIHJldHVybiBgJHt2YWx9YC50b1dlbGxGb3JtZWQoKVxuICB9IGVsc2UgaWYgKG5vZGVVdGlsLnRvVVNWU3RyaW5nKSB7XG4gICAgcmV0dXJuIG5vZGVVdGlsLnRvVVNWU3RyaW5nKHZhbClcbiAgfVxuXG4gIHJldHVybiBgJHt2YWx9YFxufVxuXG4vLyBQYXJzZWQgYWNjb3JkaW5nbHkgdG8gUkZDIDkxMTBcbi8vIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM5MTEwI2ZpZWxkLmNvbnRlbnQtcmFuZ2VcbmZ1bmN0aW9uIHBhcnNlUmFuZ2VIZWFkZXIgKHJhbmdlKSB7XG4gIGlmIChyYW5nZSA9PSBudWxsIHx8IHJhbmdlID09PSAnJykgcmV0dXJuIHsgc3RhcnQ6IDAsIGVuZDogbnVsbCwgc2l6ZTogbnVsbCB9XG5cbiAgY29uc3QgbSA9IHJhbmdlID8gcmFuZ2UubWF0Y2goL15ieXRlcyAoXFxkKyktKFxcZCspXFwvKFxcZCspPyQvKSA6IG51bGxcbiAgcmV0dXJuIG1cbiAgICA/IHtcbiAgICAgICAgc3RhcnQ6IHBhcnNlSW50KG1bMV0pLFxuICAgICAgICBlbmQ6IG1bMl0gPyBwYXJzZUludChtWzJdKSA6IG51bGwsXG4gICAgICAgIHNpemU6IG1bM10gPyBwYXJzZUludChtWzNdKSA6IG51bGxcbiAgICAgIH1cbiAgICA6IG51bGxcbn1cblxuY29uc3Qga0VudW1lcmFibGVQcm9wZXJ0eSA9IE9iamVjdC5jcmVhdGUobnVsbClcbmtFbnVtZXJhYmxlUHJvcGVydHkuZW51bWVyYWJsZSA9IHRydWVcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG5vcCxcbiAgaXNEaXN0dXJiZWQsXG4gIGlzRXJyb3JlZCxcbiAgaXNSZWFkYWJsZSxcbiAgdG9VU1ZTdHJpbmcsXG4gIGlzUmVhZGFibGVBYm9ydGVkLFxuICBpc0Jsb2JMaWtlLFxuICBwYXJzZU9yaWdpbixcbiAgcGFyc2VVUkwsXG4gIGdldFNlcnZlck5hbWUsXG4gIGlzU3RyZWFtLFxuICBpc0l0ZXJhYmxlLFxuICBpc0FzeW5jSXRlcmFibGUsXG4gIGlzRGVzdHJveWVkLFxuICBoZWFkZXJOYW1lVG9TdHJpbmcsXG4gIHBhcnNlUmF3SGVhZGVycyxcbiAgcGFyc2VIZWFkZXJzLFxuICBwYXJzZUtlZXBBbGl2ZVRpbWVvdXQsXG4gIGRlc3Ryb3ksXG4gIGJvZHlMZW5ndGgsXG4gIGRlZXBDbG9uZSxcbiAgUmVhZGFibGVTdHJlYW1Gcm9tLFxuICBpc0J1ZmZlcixcbiAgdmFsaWRhdGVIYW5kbGVyLFxuICBnZXRTb2NrZXRJbmZvLFxuICBpc0Zvcm1EYXRhTGlrZSxcbiAgYnVpbGRVUkwsXG4gIHRocm93SWZBYm9ydGVkLFxuICBhZGRBYm9ydExpc3RlbmVyLFxuICBwYXJzZVJhbmdlSGVhZGVyLFxuICBub2RlTWFqb3IsXG4gIG5vZGVNaW5vcixcbiAgbm9kZUhhc0F1dG9TZWxlY3RGYW1pbHk6IG5vZGVNYWpvciA+IDE4IHx8IChub2RlTWFqb3IgPT09IDE4ICYmIG5vZGVNaW5vciA+PSAxMyksXG4gIHNhZmVIVFRQTWV0aG9kczogWydHRVQnLCAnSEVBRCcsICdPUFRJT05TJywgJ1RSQUNFJ11cbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmxldCBmYXN0Tm93ID0gRGF0ZS5ub3coKVxubGV0IGZhc3ROb3dUaW1lb3V0XG5cbmNvbnN0IGZhc3RUaW1lcnMgPSBbXVxuXG5mdW5jdGlvbiBvblRpbWVvdXQgKCkge1xuICBmYXN0Tm93ID0gRGF0ZS5ub3coKVxuXG4gIGxldCBsZW4gPSBmYXN0VGltZXJzLmxlbmd0aFxuICBsZXQgaWR4ID0gMFxuICB3aGlsZSAoaWR4IDwgbGVuKSB7XG4gICAgY29uc3QgdGltZXIgPSBmYXN0VGltZXJzW2lkeF1cblxuICAgIGlmICh0aW1lci5zdGF0ZSA9PT0gMCkge1xuICAgICAgdGltZXIuc3RhdGUgPSBmYXN0Tm93ICsgdGltZXIuZGVsYXlcbiAgICB9IGVsc2UgaWYgKHRpbWVyLnN0YXRlID4gMCAmJiBmYXN0Tm93ID49IHRpbWVyLnN0YXRlKSB7XG4gICAgICB0aW1lci5zdGF0ZSA9IC0xXG4gICAgICB0aW1lci5jYWxsYmFjayh0aW1lci5vcGFxdWUpXG4gICAgfVxuXG4gICAgaWYgKHRpbWVyLnN0YXRlID09PSAtMSkge1xuICAgICAgdGltZXIuc3RhdGUgPSAtMlxuICAgICAgaWYgKGlkeCAhPT0gbGVuIC0gMSkge1xuICAgICAgICBmYXN0VGltZXJzW2lkeF0gPSBmYXN0VGltZXJzLnBvcCgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmYXN0VGltZXJzLnBvcCgpXG4gICAgICB9XG4gICAgICBsZW4gLT0gMVxuICAgIH0gZWxzZSB7XG4gICAgICBpZHggKz0gMVxuICAgIH1cbiAgfVxuXG4gIGlmIChmYXN0VGltZXJzLmxlbmd0aCA+IDApIHtcbiAgICByZWZyZXNoVGltZW91dCgpXG4gIH1cbn1cblxuZnVuY3Rpb24gcmVmcmVzaFRpbWVvdXQgKCkge1xuICBpZiAoZmFzdE5vd1RpbWVvdXQgJiYgZmFzdE5vd1RpbWVvdXQucmVmcmVzaCkge1xuICAgIGZhc3ROb3dUaW1lb3V0LnJlZnJlc2goKVxuICB9IGVsc2Uge1xuICAgIGNsZWFyVGltZW91dChmYXN0Tm93VGltZW91dClcbiAgICBmYXN0Tm93VGltZW91dCA9IHNldFRpbWVvdXQob25UaW1lb3V0LCAxZTMpXG4gICAgaWYgKGZhc3ROb3dUaW1lb3V0LnVucmVmKSB7XG4gICAgICBmYXN0Tm93VGltZW91dC51bnJlZigpXG4gICAgfVxuICB9XG59XG5cbmNsYXNzIFRpbWVvdXQge1xuICBjb25zdHJ1Y3RvciAoY2FsbGJhY2ssIGRlbGF5LCBvcGFxdWUpIHtcbiAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2tcbiAgICB0aGlzLmRlbGF5ID0gZGVsYXlcbiAgICB0aGlzLm9wYXF1ZSA9IG9wYXF1ZVxuXG4gICAgLy8gIC0yIG5vdCBpbiB0aW1lciBsaXN0XG4gICAgLy8gIC0xIGluIHRpbWVyIGxpc3QgYnV0IGluYWN0aXZlXG4gICAgLy8gICAwIGluIHRpbWVyIGxpc3Qgd2FpdGluZyBmb3IgdGltZVxuICAgIC8vID4gMCBpbiB0aW1lciBsaXN0IHdhaXRpbmcgZm9yIHRpbWUgdG8gZXhwaXJlXG4gICAgdGhpcy5zdGF0ZSA9IC0yXG5cbiAgICB0aGlzLnJlZnJlc2goKVxuICB9XG5cbiAgcmVmcmVzaCAoKSB7XG4gICAgaWYgKHRoaXMuc3RhdGUgPT09IC0yKSB7XG4gICAgICBmYXN0VGltZXJzLnB1c2godGhpcylcbiAgICAgIGlmICghZmFzdE5vd1RpbWVvdXQgfHwgZmFzdFRpbWVycy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmVmcmVzaFRpbWVvdXQoKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuc3RhdGUgPSAwXG4gIH1cblxuICBjbGVhciAoKSB7XG4gICAgdGhpcy5zdGF0ZSA9IC0xXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldFRpbWVvdXQgKGNhbGxiYWNrLCBkZWxheSwgb3BhcXVlKSB7XG4gICAgcmV0dXJuIGRlbGF5IDwgMWUzXG4gICAgICA/IHNldFRpbWVvdXQoY2FsbGJhY2ssIGRlbGF5LCBvcGFxdWUpXG4gICAgICA6IG5ldyBUaW1lb3V0KGNhbGxiYWNrLCBkZWxheSwgb3BhcXVlKVxuICB9LFxuICBjbGVhclRpbWVvdXQgKHRpbWVvdXQpIHtcbiAgICBpZiAodGltZW91dCBpbnN0YW5jZW9mIFRpbWVvdXQpIHtcbiAgICAgIHRpbWVvdXQuY2xlYXIoKVxuICAgIH0gZWxzZSB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dClcbiAgICB9XG4gIH1cbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbi8qKlxuICogQ29weXJpZ2h0IEJyaWFuIFdoaXRlLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21zY2RleC9zdHJlYW1zZWFyY2hcbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0b1xuICogZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGVcbiAqIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vclxuICogc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbiAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lOR1xuICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HU1xuICogSU4gVEhFIFNPRlRXQVJFLlxuICpcbiAqIEJhc2VkIGhlYXZpbHkgb24gdGhlIFN0cmVhbWluZyBCb3llci1Nb29yZS1Ib3JzcG9vbCBDKysgaW1wbGVtZW50YXRpb25cbiAqIGJ5IEhvbmdsaSBMYWkgYXQ6IGh0dHBzOi8vZ2l0aHViLmNvbS9Gb29CYXJXaWRnZXQvYm95ZXItbW9vcmUtaG9yc3Bvb2xcbiAqL1xuY29uc3QgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnbm9kZTpldmVudHMnKS5FdmVudEVtaXR0ZXJcbmNvbnN0IGluaGVyaXRzID0gcmVxdWlyZSgnbm9kZTp1dGlsJykuaW5oZXJpdHNcblxuZnVuY3Rpb24gU0JNSCAobmVlZGxlKSB7XG4gIGlmICh0eXBlb2YgbmVlZGxlID09PSAnc3RyaW5nJykge1xuICAgIG5lZWRsZSA9IEJ1ZmZlci5mcm9tKG5lZWRsZSlcbiAgfVxuXG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKG5lZWRsZSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgbmVlZGxlIGhhcyB0byBiZSBhIFN0cmluZyBvciBhIEJ1ZmZlci4nKVxuICB9XG5cbiAgY29uc3QgbmVlZGxlTGVuZ3RoID0gbmVlZGxlLmxlbmd0aFxuXG4gIGlmIChuZWVkbGVMZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBuZWVkbGUgY2Fubm90IGJlIGFuIGVtcHR5IFN0cmluZy9CdWZmZXIuJylcbiAgfVxuXG4gIGlmIChuZWVkbGVMZW5ndGggPiAyNTYpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBuZWVkbGUgY2Fubm90IGhhdmUgYSBsZW5ndGggYmlnZ2VyIHRoYW4gMjU2LicpXG4gIH1cblxuICB0aGlzLm1heE1hdGNoZXMgPSBJbmZpbml0eVxuICB0aGlzLm1hdGNoZXMgPSAwXG5cbiAgdGhpcy5fb2NjID0gbmV3IEFycmF5KDI1NilcbiAgICAuZmlsbChuZWVkbGVMZW5ndGgpIC8vIEluaXRpYWxpemUgb2NjdXJyZW5jZSB0YWJsZS5cbiAgdGhpcy5fbG9va2JlaGluZF9zaXplID0gMFxuICB0aGlzLl9uZWVkbGUgPSBuZWVkbGVcbiAgdGhpcy5fYnVmcG9zID0gMFxuXG4gIHRoaXMuX2xvb2tiZWhpbmQgPSBCdWZmZXIuYWxsb2MobmVlZGxlTGVuZ3RoKVxuXG4gIC8vIFBvcHVsYXRlIG9jY3VycmVuY2UgdGFibGUgd2l0aCBhbmFseXNpcyBvZiB0aGUgbmVlZGxlLFxuICAvLyBpZ25vcmluZyBsYXN0IGxldHRlci5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZWVkbGVMZW5ndGggLSAxOyArK2kpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby12YXJcbiAgICB0aGlzLl9vY2NbbmVlZGxlW2ldXSA9IG5lZWRsZUxlbmd0aCAtIDEgLSBpXG4gIH1cbn1cbmluaGVyaXRzKFNCTUgsIEV2ZW50RW1pdHRlcilcblxuU0JNSC5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuX2xvb2tiZWhpbmRfc2l6ZSA9IDBcbiAgdGhpcy5tYXRjaGVzID0gMFxuICB0aGlzLl9idWZwb3MgPSAwXG59XG5cblNCTUgucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoY2h1bmssIHBvcykge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihjaHVuaykpIHtcbiAgICBjaHVuayA9IEJ1ZmZlci5mcm9tKGNodW5rLCAnYmluYXJ5JylcbiAgfVxuICBjb25zdCBjaGxlbiA9IGNodW5rLmxlbmd0aFxuICB0aGlzLl9idWZwb3MgPSBwb3MgfHwgMFxuICBsZXQgclxuICB3aGlsZSAociAhPT0gY2hsZW4gJiYgdGhpcy5tYXRjaGVzIDwgdGhpcy5tYXhNYXRjaGVzKSB7IHIgPSB0aGlzLl9zYm1oX2ZlZWQoY2h1bmspIH1cbiAgcmV0dXJuIHJcbn1cblxuU0JNSC5wcm90b3R5cGUuX3NibWhfZmVlZCA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gIGNvbnN0IGxlbiA9IGRhdGEubGVuZ3RoXG4gIGNvbnN0IG5lZWRsZSA9IHRoaXMuX25lZWRsZVxuICBjb25zdCBuZWVkbGVMZW5ndGggPSBuZWVkbGUubGVuZ3RoXG4gIGNvbnN0IGxhc3ROZWVkbGVDaGFyID0gbmVlZGxlW25lZWRsZUxlbmd0aCAtIDFdXG5cbiAgLy8gUG9zaXRpdmU6IHBvaW50cyB0byBhIHBvc2l0aW9uIGluIGBkYXRhYFxuICAvLyAgICAgICAgICAgcG9zID09IDMgcG9pbnRzIHRvIGRhdGFbM11cbiAgLy8gTmVnYXRpdmU6IHBvaW50cyB0byBhIHBvc2l0aW9uIGluIHRoZSBsb29rYmVoaW5kIGJ1ZmZlclxuICAvLyAgICAgICAgICAgcG9zID09IC0yIHBvaW50cyB0byBsb29rYmVoaW5kW2xvb2tiZWhpbmRfc2l6ZSAtIDJdXG4gIGxldCBwb3MgPSAtdGhpcy5fbG9va2JlaGluZF9zaXplXG4gIGxldCBjaFxuXG4gIGlmIChwb3MgPCAwKSB7XG4gICAgLy8gTG9va2JlaGluZCBidWZmZXIgaXMgbm90IGVtcHR5LiBQZXJmb3JtIEJveWVyLU1vb3JlLUhvcnNwb29sXG4gICAgLy8gc2VhcmNoIHdpdGggY2hhcmFjdGVyIGxvb2t1cCBjb2RlIHRoYXQgY29uc2lkZXJzIGJvdGggdGhlXG4gICAgLy8gbG9va2JlaGluZCBidWZmZXIgYW5kIHRoZSBjdXJyZW50IHJvdW5kJ3MgaGF5c3RhY2sgZGF0YS5cbiAgICAvL1xuICAgIC8vIExvb3AgdW50aWxcbiAgICAvLyAgIHRoZXJlIGlzIGEgbWF0Y2guXG4gICAgLy8gb3IgdW50aWxcbiAgICAvLyAgIHdlJ3ZlIG1vdmVkIHBhc3QgdGhlIHBvc2l0aW9uIHRoYXQgcmVxdWlyZXMgdGhlXG4gICAgLy8gICBsb29rYmVoaW5kIGJ1ZmZlci4gSW4gdGhpcyBjYXNlIHdlIHN3aXRjaCB0byB0aGVcbiAgICAvLyAgIG9wdGltaXplZCBsb29wLlxuICAgIC8vIG9yIHVudGlsXG4gICAgLy8gICB0aGUgY2hhcmFjdGVyIHRvIGxvb2sgYXQgbGllcyBvdXRzaWRlIHRoZSBoYXlzdGFjay5cbiAgICB3aGlsZSAocG9zIDwgMCAmJiBwb3MgPD0gbGVuIC0gbmVlZGxlTGVuZ3RoKSB7XG4gICAgICBjaCA9IHRoaXMuX3NibWhfbG9va3VwX2NoYXIoZGF0YSwgcG9zICsgbmVlZGxlTGVuZ3RoIC0gMSlcblxuICAgICAgaWYgKFxuICAgICAgICBjaCA9PT0gbGFzdE5lZWRsZUNoYXIgJiZcbiAgICAgICAgdGhpcy5fc2JtaF9tZW1jbXAoZGF0YSwgcG9zLCBuZWVkbGVMZW5ndGggLSAxKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuX2xvb2tiZWhpbmRfc2l6ZSA9IDBcbiAgICAgICAgKyt0aGlzLm1hdGNoZXNcbiAgICAgICAgdGhpcy5lbWl0KCdpbmZvJywgdHJ1ZSlcblxuICAgICAgICByZXR1cm4gKHRoaXMuX2J1ZnBvcyA9IHBvcyArIG5lZWRsZUxlbmd0aClcbiAgICAgIH1cbiAgICAgIHBvcyArPSB0aGlzLl9vY2NbY2hdXG4gICAgfVxuXG4gICAgLy8gTm8gbWF0Y2guXG5cbiAgICBpZiAocG9zIDwgMCkge1xuICAgICAgLy8gVGhlcmUncyB0b28gZmV3IGRhdGEgZm9yIEJveWVyLU1vb3JlLUhvcnNwb29sIHRvIHJ1bixcbiAgICAgIC8vIHNvIGxldCdzIHVzZSBhIGRpZmZlcmVudCBhbGdvcml0aG0gdG8gc2tpcCBhcyBtdWNoIGFzXG4gICAgICAvLyB3ZSBjYW4uXG4gICAgICAvLyBGb3J3YXJkIHBvcyB1bnRpbFxuICAgICAgLy8gICB0aGUgdHJhaWxpbmcgcGFydCBvZiBsb29rYmVoaW5kICsgZGF0YVxuICAgICAgLy8gICBsb29rcyBsaWtlIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5lZWRsZVxuICAgICAgLy8gb3IgdW50aWxcbiAgICAgIC8vICAgcG9zID09IDBcbiAgICAgIHdoaWxlIChwb3MgPCAwICYmICF0aGlzLl9zYm1oX21lbWNtcChkYXRhLCBwb3MsIGxlbiAtIHBvcykpIHsgKytwb3MgfVxuICAgIH1cblxuICAgIGlmIChwb3MgPj0gMCkge1xuICAgICAgLy8gRGlzY2FyZCBsb29rYmVoaW5kIGJ1ZmZlci5cbiAgICAgIHRoaXMuZW1pdCgnaW5mbycsIGZhbHNlLCB0aGlzLl9sb29rYmVoaW5kLCAwLCB0aGlzLl9sb29rYmVoaW5kX3NpemUpXG4gICAgICB0aGlzLl9sb29rYmVoaW5kX3NpemUgPSAwXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEN1dCBvZmYgcGFydCBvZiB0aGUgbG9va2JlaGluZCBidWZmZXIgdGhhdCBoYXNcbiAgICAgIC8vIGJlZW4gcHJvY2Vzc2VkIGFuZCBhcHBlbmQgdGhlIGVudGlyZSBoYXlzdGFja1xuICAgICAgLy8gaW50byBpdC5cbiAgICAgIGNvbnN0IGJ5dGVzVG9DdXRPZmYgPSB0aGlzLl9sb29rYmVoaW5kX3NpemUgKyBwb3NcbiAgICAgIGlmIChieXRlc1RvQ3V0T2ZmID4gMCkge1xuICAgICAgICAvLyBUaGUgY3V0IG9mZiBkYXRhIGlzIGd1YXJhbnRlZWQgbm90IHRvIGNvbnRhaW4gdGhlIG5lZWRsZS5cbiAgICAgICAgdGhpcy5lbWl0KCdpbmZvJywgZmFsc2UsIHRoaXMuX2xvb2tiZWhpbmQsIDAsIGJ5dGVzVG9DdXRPZmYpXG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2xvb2tiZWhpbmQuY29weSh0aGlzLl9sb29rYmVoaW5kLCAwLCBieXRlc1RvQ3V0T2ZmLFxuICAgICAgICB0aGlzLl9sb29rYmVoaW5kX3NpemUgLSBieXRlc1RvQ3V0T2ZmKVxuICAgICAgdGhpcy5fbG9va2JlaGluZF9zaXplIC09IGJ5dGVzVG9DdXRPZmZcblxuICAgICAgZGF0YS5jb3B5KHRoaXMuX2xvb2tiZWhpbmQsIHRoaXMuX2xvb2tiZWhpbmRfc2l6ZSlcbiAgICAgIHRoaXMuX2xvb2tiZWhpbmRfc2l6ZSArPSBsZW5cblxuICAgICAgdGhpcy5fYnVmcG9zID0gbGVuXG4gICAgICByZXR1cm4gbGVuXG4gICAgfVxuICB9XG5cbiAgcG9zICs9IChwb3MgPj0gMCkgKiB0aGlzLl9idWZwb3NcblxuICAvLyBMb29rYmVoaW5kIGJ1ZmZlciBpcyBub3cgZW1wdHkuIFdlIG9ubHkgbmVlZCB0byBjaGVjayBpZiB0aGVcbiAgLy8gbmVlZGxlIGlzIGluIHRoZSBoYXlzdGFjay5cbiAgaWYgKGRhdGEuaW5kZXhPZihuZWVkbGUsIHBvcykgIT09IC0xKSB7XG4gICAgcG9zID0gZGF0YS5pbmRleE9mKG5lZWRsZSwgcG9zKVxuICAgICsrdGhpcy5tYXRjaGVzXG4gICAgaWYgKHBvcyA+IDApIHsgdGhpcy5lbWl0KCdpbmZvJywgdHJ1ZSwgZGF0YSwgdGhpcy5fYnVmcG9zLCBwb3MpIH0gZWxzZSB7IHRoaXMuZW1pdCgnaW5mbycsIHRydWUpIH1cblxuICAgIHJldHVybiAodGhpcy5fYnVmcG9zID0gcG9zICsgbmVlZGxlTGVuZ3RoKVxuICB9IGVsc2Uge1xuICAgIHBvcyA9IGxlbiAtIG5lZWRsZUxlbmd0aFxuICB9XG5cbiAgLy8gVGhlcmUgd2FzIG5vIG1hdGNoLiBJZiB0aGVyZSdzIHRyYWlsaW5nIGhheXN0YWNrIGRhdGEgdGhhdCB3ZSBjYW5ub3RcbiAgLy8gbWF0Y2ggeWV0IHVzaW5nIHRoZSBCb3llci1Nb29yZS1Ib3JzcG9vbCBhbGdvcml0aG0gKGJlY2F1c2UgdGhlIHRyYWlsaW5nXG4gIC8vIGRhdGEgaXMgbGVzcyB0aGFuIHRoZSBuZWVkbGUgc2l6ZSkgdGhlbiBtYXRjaCB1c2luZyBhIG1vZGlmaWVkXG4gIC8vIGFsZ29yaXRobSB0aGF0IHN0YXJ0cyBtYXRjaGluZyBmcm9tIHRoZSBiZWdpbm5pbmcgaW5zdGVhZCBvZiB0aGUgZW5kLlxuICAvLyBXaGF0ZXZlciB0cmFpbGluZyBkYXRhIGlzIGxlZnQgYWZ0ZXIgcnVubmluZyB0aGlzIGFsZ29yaXRobSBpcyBhZGRlZCB0b1xuICAvLyB0aGUgbG9va2JlaGluZCBidWZmZXIuXG4gIHdoaWxlIChcbiAgICBwb3MgPCBsZW4gJiZcbiAgICAoXG4gICAgICBkYXRhW3Bvc10gIT09IG5lZWRsZVswXSB8fFxuICAgICAgKFxuICAgICAgICAoQnVmZmVyLmNvbXBhcmUoXG4gICAgICAgICAgZGF0YS5zdWJhcnJheShwb3MsIHBvcyArIGxlbiAtIHBvcyksXG4gICAgICAgICAgbmVlZGxlLnN1YmFycmF5KDAsIGxlbiAtIHBvcylcbiAgICAgICAgKSAhPT0gMClcbiAgICAgIClcbiAgICApXG4gICkge1xuICAgICsrcG9zXG4gIH1cbiAgaWYgKHBvcyA8IGxlbikge1xuICAgIGRhdGEuY29weSh0aGlzLl9sb29rYmVoaW5kLCAwLCBwb3MsIHBvcyArIChsZW4gLSBwb3MpKVxuICAgIHRoaXMuX2xvb2tiZWhpbmRfc2l6ZSA9IGxlbiAtIHBvc1xuICB9XG5cbiAgLy8gRXZlcnl0aGluZyB1bnRpbCBwb3MgaXMgZ3VhcmFudGVlZCBub3QgdG8gY29udGFpbiBuZWVkbGUgZGF0YS5cbiAgaWYgKHBvcyA+IDApIHsgdGhpcy5lbWl0KCdpbmZvJywgZmFsc2UsIGRhdGEsIHRoaXMuX2J1ZnBvcywgcG9zIDwgbGVuID8gcG9zIDogbGVuKSB9XG5cbiAgdGhpcy5fYnVmcG9zID0gbGVuXG4gIHJldHVybiBsZW5cbn1cblxuU0JNSC5wcm90b3R5cGUuX3NibWhfbG9va3VwX2NoYXIgPSBmdW5jdGlvbiAoZGF0YSwgcG9zKSB7XG4gIHJldHVybiAocG9zIDwgMClcbiAgICA/IHRoaXMuX2xvb2tiZWhpbmRbdGhpcy5fbG9va2JlaGluZF9zaXplICsgcG9zXVxuICAgIDogZGF0YVtwb3NdXG59XG5cblNCTUgucHJvdG90eXBlLl9zYm1oX21lbWNtcCA9IGZ1bmN0aW9uIChkYXRhLCBwb3MsIGxlbikge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdmFyXG4gICAgaWYgKHRoaXMuX3NibWhfbG9va3VwX2NoYXIoZGF0YSwgcG9zICsgaSkgIT09IHRoaXMuX25lZWRsZVtpXSkgeyByZXR1cm4gZmFsc2UgfVxuICB9XG4gIHJldHVybiB0cnVlXG59XG5cbm1vZHVsZS5leHBvcnRzID0gU0JNSFxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgaW5oZXJpdHMgPSByZXF1aXJlKCdub2RlOnV0aWwnKS5pbmhlcml0c1xuY29uc3QgUmVhZGFibGVTdHJlYW0gPSByZXF1aXJlKCdub2RlOnN0cmVhbScpLlJlYWRhYmxlXG5cbmZ1bmN0aW9uIFBhcnRTdHJlYW0gKG9wdHMpIHtcbiAgUmVhZGFibGVTdHJlYW0uY2FsbCh0aGlzLCBvcHRzKVxufVxuaW5oZXJpdHMoUGFydFN0cmVhbSwgUmVhZGFibGVTdHJlYW0pXG5cblBhcnRTdHJlYW0ucHJvdG90eXBlLl9yZWFkID0gZnVuY3Rpb24gKG4pIHt9XG5cbm1vZHVsZS5leHBvcnRzID0gUGFydFN0cmVhbVxuIiwKICAgICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRMaW1pdCAobGltaXRzLCBuYW1lLCBkZWZhdWx0TGltaXQpIHtcbiAgaWYgKFxuICAgICFsaW1pdHMgfHxcbiAgICBsaW1pdHNbbmFtZV0gPT09IHVuZGVmaW5lZCB8fFxuICAgIGxpbWl0c1tuYW1lXSA9PT0gbnVsbFxuICApIHsgcmV0dXJuIGRlZmF1bHRMaW1pdCB9XG5cbiAgaWYgKFxuICAgIHR5cGVvZiBsaW1pdHNbbmFtZV0gIT09ICdudW1iZXInIHx8XG4gICAgaXNOYU4obGltaXRzW25hbWVdKVxuICApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignTGltaXQgJyArIG5hbWUgKyAnIGlzIG5vdCBhIHZhbGlkIG51bWJlcicpIH1cblxuICByZXR1cm4gbGltaXRzW25hbWVdXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdub2RlOmV2ZW50cycpLkV2ZW50RW1pdHRlclxuY29uc3QgaW5oZXJpdHMgPSByZXF1aXJlKCdub2RlOnV0aWwnKS5pbmhlcml0c1xuY29uc3QgZ2V0TGltaXQgPSByZXF1aXJlKCcuLi8uLi8uLi9saWIvdXRpbHMvZ2V0TGltaXQnKVxuXG5jb25zdCBTdHJlYW1TZWFyY2ggPSByZXF1aXJlKCcuLi8uLi9zdHJlYW1zZWFyY2gvc2JtaCcpXG5cbmNvbnN0IEJfRENSTEYgPSBCdWZmZXIuZnJvbSgnXFxyXFxuXFxyXFxuJylcbmNvbnN0IFJFX0NSTEYgPSAvXFxyXFxuL2dcbmNvbnN0IFJFX0hEUiA9IC9eKFteOl0rKTpbIFxcdF0/KFtcXHgwMC1cXHhGRl0rKT8kLyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnRyb2wtcmVnZXhcblxuZnVuY3Rpb24gSGVhZGVyUGFyc2VyIChjZmcpIHtcbiAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcylcblxuICBjZmcgPSBjZmcgfHwge31cbiAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgdGhpcy5ucmVhZCA9IDBcbiAgdGhpcy5tYXhlZCA9IGZhbHNlXG4gIHRoaXMubnBhaXJzID0gMFxuICB0aGlzLm1heEhlYWRlclBhaXJzID0gZ2V0TGltaXQoY2ZnLCAnbWF4SGVhZGVyUGFpcnMnLCAyMDAwKVxuICB0aGlzLm1heEhlYWRlclNpemUgPSBnZXRMaW1pdChjZmcsICdtYXhIZWFkZXJTaXplJywgODAgKiAxMDI0KVxuICB0aGlzLmJ1ZmZlciA9ICcnXG4gIHRoaXMuaGVhZGVyID0ge31cbiAgdGhpcy5maW5pc2hlZCA9IGZhbHNlXG4gIHRoaXMuc3MgPSBuZXcgU3RyZWFtU2VhcmNoKEJfRENSTEYpXG4gIHRoaXMuc3Mub24oJ2luZm8nLCBmdW5jdGlvbiAoaXNNYXRjaCwgZGF0YSwgc3RhcnQsIGVuZCkge1xuICAgIGlmIChkYXRhICYmICFzZWxmLm1heGVkKSB7XG4gICAgICBpZiAoc2VsZi5ucmVhZCArIGVuZCAtIHN0YXJ0ID49IHNlbGYubWF4SGVhZGVyU2l6ZSkge1xuICAgICAgICBlbmQgPSBzZWxmLm1heEhlYWRlclNpemUgLSBzZWxmLm5yZWFkICsgc3RhcnRcbiAgICAgICAgc2VsZi5ucmVhZCA9IHNlbGYubWF4SGVhZGVyU2l6ZVxuICAgICAgICBzZWxmLm1heGVkID0gdHJ1ZVxuICAgICAgfSBlbHNlIHsgc2VsZi5ucmVhZCArPSAoZW5kIC0gc3RhcnQpIH1cblxuICAgICAgc2VsZi5idWZmZXIgKz0gZGF0YS50b1N0cmluZygnYmluYXJ5Jywgc3RhcnQsIGVuZClcbiAgICB9XG4gICAgaWYgKGlzTWF0Y2gpIHsgc2VsZi5fZmluaXNoKCkgfVxuICB9KVxufVxuaW5oZXJpdHMoSGVhZGVyUGFyc2VyLCBFdmVudEVtaXR0ZXIpXG5cbkhlYWRlclBhcnNlci5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gIGNvbnN0IHIgPSB0aGlzLnNzLnB1c2goZGF0YSlcbiAgaWYgKHRoaXMuZmluaXNoZWQpIHsgcmV0dXJuIHIgfVxufVxuXG5IZWFkZXJQYXJzZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmZpbmlzaGVkID0gZmFsc2VcbiAgdGhpcy5idWZmZXIgPSAnJ1xuICB0aGlzLmhlYWRlciA9IHt9XG4gIHRoaXMuc3MucmVzZXQoKVxufVxuXG5IZWFkZXJQYXJzZXIucHJvdG90eXBlLl9maW5pc2ggPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLmJ1ZmZlcikgeyB0aGlzLl9wYXJzZUhlYWRlcigpIH1cbiAgdGhpcy5zcy5tYXRjaGVzID0gdGhpcy5zcy5tYXhNYXRjaGVzXG4gIGNvbnN0IGhlYWRlciA9IHRoaXMuaGVhZGVyXG4gIHRoaXMuaGVhZGVyID0ge31cbiAgdGhpcy5idWZmZXIgPSAnJ1xuICB0aGlzLmZpbmlzaGVkID0gdHJ1ZVxuICB0aGlzLm5yZWFkID0gdGhpcy5ucGFpcnMgPSAwXG4gIHRoaXMubWF4ZWQgPSBmYWxzZVxuICB0aGlzLmVtaXQoJ2hlYWRlcicsIGhlYWRlcilcbn1cblxuSGVhZGVyUGFyc2VyLnByb3RvdHlwZS5fcGFyc2VIZWFkZXIgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLm5wYWlycyA9PT0gdGhpcy5tYXhIZWFkZXJQYWlycykgeyByZXR1cm4gfVxuXG4gIGNvbnN0IGxpbmVzID0gdGhpcy5idWZmZXIuc3BsaXQoUkVfQ1JMRilcbiAgY29uc3QgbGVuID0gbGluZXMubGVuZ3RoXG4gIGxldCBtLCBoXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXZhclxuICAgIGlmIChsaW5lc1tpXS5sZW5ndGggPT09IDApIHsgY29udGludWUgfVxuICAgIGlmIChsaW5lc1tpXVswXSA9PT0gJ1xcdCcgfHwgbGluZXNbaV1bMF0gPT09ICcgJykge1xuICAgICAgLy8gZm9sZGVkIGhlYWRlciBjb250ZW50XG4gICAgICAvLyBSRkMyODIyIHNheXMgdG8ganVzdCByZW1vdmUgdGhlIENSTEYgYW5kIG5vdCB0aGUgd2hpdGVzcGFjZSBmb2xsb3dpbmdcbiAgICAgIC8vIGl0LCBzbyB3ZSBmb2xsb3cgdGhlIFJGQyBhbmQgaW5jbHVkZSB0aGUgbGVhZGluZyB3aGl0ZXNwYWNlIC4uLlxuICAgICAgaWYgKGgpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJbaF1bdGhpcy5oZWFkZXJbaF0ubGVuZ3RoIC0gMV0gKz0gbGluZXNbaV1cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBwb3NDb2xvbiA9IGxpbmVzW2ldLmluZGV4T2YoJzonKVxuICAgIGlmIChcbiAgICAgIHBvc0NvbG9uID09PSAtMSB8fFxuICAgICAgcG9zQ29sb24gPT09IDBcbiAgICApIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBtID0gUkVfSERSLmV4ZWMobGluZXNbaV0pXG4gICAgaCA9IG1bMV0udG9Mb3dlckNhc2UoKVxuICAgIHRoaXMuaGVhZGVyW2hdID0gdGhpcy5oZWFkZXJbaF0gfHwgW11cbiAgICB0aGlzLmhlYWRlcltoXS5wdXNoKChtWzJdIHx8ICcnKSlcbiAgICBpZiAoKyt0aGlzLm5wYWlycyA9PT0gdGhpcy5tYXhIZWFkZXJQYWlycykgeyBicmVhayB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBIZWFkZXJQYXJzZXJcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFdyaXRhYmxlU3RyZWFtID0gcmVxdWlyZSgnbm9kZTpzdHJlYW0nKS5Xcml0YWJsZVxuY29uc3QgaW5oZXJpdHMgPSByZXF1aXJlKCdub2RlOnV0aWwnKS5pbmhlcml0c1xuXG5jb25zdCBTdHJlYW1TZWFyY2ggPSByZXF1aXJlKCcuLi8uLi9zdHJlYW1zZWFyY2gvc2JtaCcpXG5cbmNvbnN0IFBhcnRTdHJlYW0gPSByZXF1aXJlKCcuL1BhcnRTdHJlYW0nKVxuY29uc3QgSGVhZGVyUGFyc2VyID0gcmVxdWlyZSgnLi9IZWFkZXJQYXJzZXInKVxuXG5jb25zdCBEQVNIID0gNDVcbmNvbnN0IEJfT05FREFTSCA9IEJ1ZmZlci5mcm9tKCctJylcbmNvbnN0IEJfQ1JMRiA9IEJ1ZmZlci5mcm9tKCdcXHJcXG4nKVxuY29uc3QgRU1QVFlfRk4gPSBmdW5jdGlvbiAoKSB7fVxuXG5mdW5jdGlvbiBEaWNlciAoY2ZnKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBEaWNlcikpIHsgcmV0dXJuIG5ldyBEaWNlcihjZmcpIH1cbiAgV3JpdGFibGVTdHJlYW0uY2FsbCh0aGlzLCBjZmcpXG5cbiAgaWYgKCFjZmcgfHwgKCFjZmcuaGVhZGVyRmlyc3QgJiYgdHlwZW9mIGNmZy5ib3VuZGFyeSAhPT0gJ3N0cmluZycpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoJ0JvdW5kYXJ5IHJlcXVpcmVkJykgfVxuXG4gIGlmICh0eXBlb2YgY2ZnLmJvdW5kYXJ5ID09PSAnc3RyaW5nJykgeyB0aGlzLnNldEJvdW5kYXJ5KGNmZy5ib3VuZGFyeSkgfSBlbHNlIHsgdGhpcy5fYnBhcnNlciA9IHVuZGVmaW5lZCB9XG5cbiAgdGhpcy5faGVhZGVyRmlyc3QgPSBjZmcuaGVhZGVyRmlyc3RcblxuICB0aGlzLl9kYXNoZXMgPSAwXG4gIHRoaXMuX3BhcnRzID0gMFxuICB0aGlzLl9maW5pc2hlZCA9IGZhbHNlXG4gIHRoaXMuX3JlYWxGaW5pc2ggPSBmYWxzZVxuICB0aGlzLl9pc1ByZWFtYmxlID0gdHJ1ZVxuICB0aGlzLl9qdXN0TWF0Y2hlZCA9IGZhbHNlXG4gIHRoaXMuX2ZpcnN0V3JpdGUgPSB0cnVlXG4gIHRoaXMuX2luSGVhZGVyID0gdHJ1ZVxuICB0aGlzLl9wYXJ0ID0gdW5kZWZpbmVkXG4gIHRoaXMuX2NiID0gdW5kZWZpbmVkXG4gIHRoaXMuX2lnbm9yZURhdGEgPSBmYWxzZVxuICB0aGlzLl9wYXJ0T3B0cyA9IHsgaGlnaFdhdGVyTWFyazogY2ZnLnBhcnRId20gfVxuICB0aGlzLl9wYXVzZSA9IGZhbHNlXG5cbiAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgdGhpcy5faHBhcnNlciA9IG5ldyBIZWFkZXJQYXJzZXIoY2ZnKVxuICB0aGlzLl9ocGFyc2VyLm9uKCdoZWFkZXInLCBmdW5jdGlvbiAoaGVhZGVyKSB7XG4gICAgc2VsZi5faW5IZWFkZXIgPSBmYWxzZVxuICAgIHNlbGYuX3BhcnQuZW1pdCgnaGVhZGVyJywgaGVhZGVyKVxuICB9KVxufVxuaW5oZXJpdHMoRGljZXIsIFdyaXRhYmxlU3RyZWFtKVxuXG5EaWNlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uIChldikge1xuICBpZiAoZXYgPT09ICdmaW5pc2gnICYmICF0aGlzLl9yZWFsRmluaXNoKSB7XG4gICAgaWYgKCF0aGlzLl9maW5pc2hlZCkge1xuICAgICAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICBzZWxmLmVtaXQoJ2Vycm9yJywgbmV3IEVycm9yKCdVbmV4cGVjdGVkIGVuZCBvZiBtdWx0aXBhcnQgZGF0YScpKVxuICAgICAgICBpZiAoc2VsZi5fcGFydCAmJiAhc2VsZi5faWdub3JlRGF0YSkge1xuICAgICAgICAgIGNvbnN0IHR5cGUgPSAoc2VsZi5faXNQcmVhbWJsZSA/ICdQcmVhbWJsZScgOiAnUGFydCcpXG4gICAgICAgICAgc2VsZi5fcGFydC5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcih0eXBlICsgJyB0ZXJtaW5hdGVkIGVhcmx5IGR1ZSB0byB1bmV4cGVjdGVkIGVuZCBvZiBtdWx0aXBhcnQgZGF0YScpKVxuICAgICAgICAgIHNlbGYuX3BhcnQucHVzaChudWxsKVxuICAgICAgICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2VsZi5fcmVhbEZpbmlzaCA9IHRydWVcbiAgICAgICAgICAgIHNlbGYuZW1pdCgnZmluaXNoJylcbiAgICAgICAgICAgIHNlbGYuX3JlYWxGaW5pc2ggPSBmYWxzZVxuICAgICAgICAgIH0pXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgc2VsZi5fcmVhbEZpbmlzaCA9IHRydWVcbiAgICAgICAgc2VsZi5lbWl0KCdmaW5pc2gnKVxuICAgICAgICBzZWxmLl9yZWFsRmluaXNoID0gZmFsc2VcbiAgICAgIH0pXG4gICAgfVxuICB9IGVsc2UgeyBXcml0YWJsZVN0cmVhbS5wcm90b3R5cGUuZW1pdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIH1cbn1cblxuRGljZXIucHJvdG90eXBlLl93cml0ZSA9IGZ1bmN0aW9uIChkYXRhLCBlbmNvZGluZywgY2IpIHtcbiAgLy8gaWdub3JlIHVuZXhwZWN0ZWQgZGF0YSAoZS5nLiBleHRyYSB0cmFpbGVyIGRhdGEgYWZ0ZXIgZmluaXNoZWQpXG4gIGlmICghdGhpcy5faHBhcnNlciAmJiAhdGhpcy5fYnBhcnNlcikgeyByZXR1cm4gY2IoKSB9XG5cbiAgaWYgKHRoaXMuX2hlYWRlckZpcnN0ICYmIHRoaXMuX2lzUHJlYW1ibGUpIHtcbiAgICBpZiAoIXRoaXMuX3BhcnQpIHtcbiAgICAgIHRoaXMuX3BhcnQgPSBuZXcgUGFydFN0cmVhbSh0aGlzLl9wYXJ0T3B0cylcbiAgICAgIGlmICh0aGlzLmxpc3RlbmVyQ291bnQoJ3ByZWFtYmxlJykgIT09IDApIHsgdGhpcy5lbWl0KCdwcmVhbWJsZScsIHRoaXMuX3BhcnQpIH0gZWxzZSB7IHRoaXMuX2lnbm9yZSgpIH1cbiAgICB9XG4gICAgY29uc3QgciA9IHRoaXMuX2hwYXJzZXIucHVzaChkYXRhKVxuICAgIGlmICghdGhpcy5faW5IZWFkZXIgJiYgciAhPT0gdW5kZWZpbmVkICYmIHIgPCBkYXRhLmxlbmd0aCkgeyBkYXRhID0gZGF0YS5zbGljZShyKSB9IGVsc2UgeyByZXR1cm4gY2IoKSB9XG4gIH1cblxuICAvLyBhbGxvd3MgZm9yIFwiZWFzaWVyXCIgdGVzdGluZ1xuICBpZiAodGhpcy5fZmlyc3RXcml0ZSkge1xuICAgIHRoaXMuX2JwYXJzZXIucHVzaChCX0NSTEYpXG4gICAgdGhpcy5fZmlyc3RXcml0ZSA9IGZhbHNlXG4gIH1cblxuICB0aGlzLl9icGFyc2VyLnB1c2goZGF0YSlcblxuICBpZiAodGhpcy5fcGF1c2UpIHsgdGhpcy5fY2IgPSBjYiB9IGVsc2UgeyBjYigpIH1cbn1cblxuRGljZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLl9wYXJ0ID0gdW5kZWZpbmVkXG4gIHRoaXMuX2JwYXJzZXIgPSB1bmRlZmluZWRcbiAgdGhpcy5faHBhcnNlciA9IHVuZGVmaW5lZFxufVxuXG5EaWNlci5wcm90b3R5cGUuc2V0Qm91bmRhcnkgPSBmdW5jdGlvbiAoYm91bmRhcnkpIHtcbiAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgdGhpcy5fYnBhcnNlciA9IG5ldyBTdHJlYW1TZWFyY2goJ1xcclxcbi0tJyArIGJvdW5kYXJ5KVxuICB0aGlzLl9icGFyc2VyLm9uKCdpbmZvJywgZnVuY3Rpb24gKGlzTWF0Y2gsIGRhdGEsIHN0YXJ0LCBlbmQpIHtcbiAgICBzZWxmLl9vbmluZm8oaXNNYXRjaCwgZGF0YSwgc3RhcnQsIGVuZClcbiAgfSlcbn1cblxuRGljZXIucHJvdG90eXBlLl9pZ25vcmUgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLl9wYXJ0ICYmICF0aGlzLl9pZ25vcmVEYXRhKSB7XG4gICAgdGhpcy5faWdub3JlRGF0YSA9IHRydWVcbiAgICB0aGlzLl9wYXJ0Lm9uKCdlcnJvcicsIEVNUFRZX0ZOKVxuICAgIC8vIHdlIG11c3QgcGVyZm9ybSBzb21lIGtpbmQgb2YgcmVhZCBvbiB0aGUgc3RyZWFtIGV2ZW4gdGhvdWdoIHdlIGFyZVxuICAgIC8vIGlnbm9yaW5nIHRoZSBkYXRhLCBvdGhlcndpc2Ugbm9kZSdzIFJlYWRhYmxlIHN0cmVhbSB3aWxsIG5vdCBlbWl0ICdlbmQnXG4gICAgLy8gYWZ0ZXIgcHVzaGluZyBudWxsIHRvIHRoZSBzdHJlYW1cbiAgICB0aGlzLl9wYXJ0LnJlc3VtZSgpXG4gIH1cbn1cblxuRGljZXIucHJvdG90eXBlLl9vbmluZm8gPSBmdW5jdGlvbiAoaXNNYXRjaCwgZGF0YSwgc3RhcnQsIGVuZCkge1xuICBsZXQgYnVmOyBjb25zdCBzZWxmID0gdGhpczsgbGV0IGkgPSAwOyBsZXQgcjsgbGV0IHNob3VsZFdyaXRlTW9yZSA9IHRydWVcblxuICBpZiAoIXRoaXMuX3BhcnQgJiYgdGhpcy5fanVzdE1hdGNoZWQgJiYgZGF0YSkge1xuICAgIHdoaWxlICh0aGlzLl9kYXNoZXMgPCAyICYmIChzdGFydCArIGkpIDwgZW5kKSB7XG4gICAgICBpZiAoZGF0YVtzdGFydCArIGldID09PSBEQVNIKSB7XG4gICAgICAgICsraVxuICAgICAgICArK3RoaXMuX2Rhc2hlc1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuX2Rhc2hlcykgeyBidWYgPSBCX09ORURBU0ggfVxuICAgICAgICB0aGlzLl9kYXNoZXMgPSAwXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLl9kYXNoZXMgPT09IDIpIHtcbiAgICAgIGlmICgoc3RhcnQgKyBpKSA8IGVuZCAmJiB0aGlzLmxpc3RlbmVyQ291bnQoJ3RyYWlsZXInKSAhPT0gMCkgeyB0aGlzLmVtaXQoJ3RyYWlsZXInLCBkYXRhLnNsaWNlKHN0YXJ0ICsgaSwgZW5kKSkgfVxuICAgICAgdGhpcy5yZXNldCgpXG4gICAgICB0aGlzLl9maW5pc2hlZCA9IHRydWVcbiAgICAgIC8vIG5vIG1vcmUgcGFydHMgd2lsbCBiZSBhZGRlZFxuICAgICAgaWYgKHNlbGYuX3BhcnRzID09PSAwKSB7XG4gICAgICAgIHNlbGYuX3JlYWxGaW5pc2ggPSB0cnVlXG4gICAgICAgIHNlbGYuZW1pdCgnZmluaXNoJylcbiAgICAgICAgc2VsZi5fcmVhbEZpbmlzaCA9IGZhbHNlXG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLl9kYXNoZXMpIHsgcmV0dXJuIH1cbiAgfVxuICBpZiAodGhpcy5fanVzdE1hdGNoZWQpIHsgdGhpcy5fanVzdE1hdGNoZWQgPSBmYWxzZSB9XG4gIGlmICghdGhpcy5fcGFydCkge1xuICAgIHRoaXMuX3BhcnQgPSBuZXcgUGFydFN0cmVhbSh0aGlzLl9wYXJ0T3B0cylcbiAgICB0aGlzLl9wYXJ0Ll9yZWFkID0gZnVuY3Rpb24gKG4pIHtcbiAgICAgIHNlbGYuX3VucGF1c2UoKVxuICAgIH1cbiAgICBpZiAodGhpcy5faXNQcmVhbWJsZSAmJiB0aGlzLmxpc3RlbmVyQ291bnQoJ3ByZWFtYmxlJykgIT09IDApIHtcbiAgICAgIHRoaXMuZW1pdCgncHJlYW1ibGUnLCB0aGlzLl9wYXJ0KVxuICAgIH0gZWxzZSBpZiAodGhpcy5faXNQcmVhbWJsZSAhPT0gdHJ1ZSAmJiB0aGlzLmxpc3RlbmVyQ291bnQoJ3BhcnQnKSAhPT0gMCkge1xuICAgICAgdGhpcy5lbWl0KCdwYXJ0JywgdGhpcy5fcGFydClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5faWdub3JlKClcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9pc1ByZWFtYmxlKSB7IHRoaXMuX2luSGVhZGVyID0gdHJ1ZSB9XG4gIH1cbiAgaWYgKGRhdGEgJiYgc3RhcnQgPCBlbmQgJiYgIXRoaXMuX2lnbm9yZURhdGEpIHtcbiAgICBpZiAodGhpcy5faXNQcmVhbWJsZSB8fCAhdGhpcy5faW5IZWFkZXIpIHtcbiAgICAgIGlmIChidWYpIHsgc2hvdWxkV3JpdGVNb3JlID0gdGhpcy5fcGFydC5wdXNoKGJ1ZikgfVxuICAgICAgc2hvdWxkV3JpdGVNb3JlID0gdGhpcy5fcGFydC5wdXNoKGRhdGEuc2xpY2Uoc3RhcnQsIGVuZCkpXG4gICAgICBpZiAoIXNob3VsZFdyaXRlTW9yZSkgeyB0aGlzLl9wYXVzZSA9IHRydWUgfVxuICAgIH0gZWxzZSBpZiAoIXRoaXMuX2lzUHJlYW1ibGUgJiYgdGhpcy5faW5IZWFkZXIpIHtcbiAgICAgIGlmIChidWYpIHsgdGhpcy5faHBhcnNlci5wdXNoKGJ1ZikgfVxuICAgICAgciA9IHRoaXMuX2hwYXJzZXIucHVzaChkYXRhLnNsaWNlKHN0YXJ0LCBlbmQpKVxuICAgICAgaWYgKCF0aGlzLl9pbkhlYWRlciAmJiByICE9PSB1bmRlZmluZWQgJiYgciA8IGVuZCkgeyB0aGlzLl9vbmluZm8oZmFsc2UsIGRhdGEsIHN0YXJ0ICsgciwgZW5kKSB9XG4gICAgfVxuICB9XG4gIGlmIChpc01hdGNoKSB7XG4gICAgdGhpcy5faHBhcnNlci5yZXNldCgpXG4gICAgaWYgKHRoaXMuX2lzUHJlYW1ibGUpIHsgdGhpcy5faXNQcmVhbWJsZSA9IGZhbHNlIH0gZWxzZSB7XG4gICAgICBpZiAoc3RhcnQgIT09IGVuZCkge1xuICAgICAgICArK3RoaXMuX3BhcnRzXG4gICAgICAgIHRoaXMuX3BhcnQub24oJ2VuZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoLS1zZWxmLl9wYXJ0cyA9PT0gMCkge1xuICAgICAgICAgICAgaWYgKHNlbGYuX2ZpbmlzaGVkKSB7XG4gICAgICAgICAgICAgIHNlbGYuX3JlYWxGaW5pc2ggPSB0cnVlXG4gICAgICAgICAgICAgIHNlbGYuZW1pdCgnZmluaXNoJylcbiAgICAgICAgICAgICAgc2VsZi5fcmVhbEZpbmlzaCA9IGZhbHNlXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzZWxmLl91bnBhdXNlKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX3BhcnQucHVzaChudWxsKVxuICAgIHRoaXMuX3BhcnQgPSB1bmRlZmluZWRcbiAgICB0aGlzLl9pZ25vcmVEYXRhID0gZmFsc2VcbiAgICB0aGlzLl9qdXN0TWF0Y2hlZCA9IHRydWVcbiAgICB0aGlzLl9kYXNoZXMgPSAwXG4gIH1cbn1cblxuRGljZXIucHJvdG90eXBlLl91bnBhdXNlID0gZnVuY3Rpb24gKCkge1xuICBpZiAoIXRoaXMuX3BhdXNlKSB7IHJldHVybiB9XG5cbiAgdGhpcy5fcGF1c2UgPSBmYWxzZVxuICBpZiAodGhpcy5fY2IpIHtcbiAgICBjb25zdCBjYiA9IHRoaXMuX2NiXG4gICAgdGhpcy5fY2IgPSB1bmRlZmluZWRcbiAgICBjYigpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBEaWNlclxuIiwKICAgICIndXNlIHN0cmljdCdcblxuLy8gTm9kZSBoYXMgYWx3YXlzIHV0Zi04XG5jb25zdCB1dGY4RGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigndXRmLTgnKVxuY29uc3QgdGV4dERlY29kZXJzID0gbmV3IE1hcChbXG4gIFsndXRmLTgnLCB1dGY4RGVjb2Rlcl0sXG4gIFsndXRmOCcsIHV0ZjhEZWNvZGVyXVxuXSlcblxuZnVuY3Rpb24gZ2V0RGVjb2RlciAoY2hhcnNldCkge1xuICBsZXQgbGNcbiAgd2hpbGUgKHRydWUpIHtcbiAgICBzd2l0Y2ggKGNoYXJzZXQpIHtcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgICByZXR1cm4gZGVjb2RlcnMudXRmOFxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2FzY2lpJzogLy8gVE9ETzogTWFrZSB0aGVzZSBhIHNlcGFyYXRlLCBzdHJpY3QgZGVjb2Rlcj9cbiAgICAgIGNhc2UgJ3VzLWFzY2lpJzpcbiAgICAgIGNhc2UgJ2lzby04ODU5LTEnOlxuICAgICAgY2FzZSAnaXNvODg1OS0xJzpcbiAgICAgIGNhc2UgJ2lzbzg4NTkxJzpcbiAgICAgIGNhc2UgJ2lzb184ODU5LTEnOlxuICAgICAgY2FzZSAnd2luZG93cy0xMjUyJzpcbiAgICAgIGNhc2UgJ2lzb184ODU5LTE6MTk4Nyc6XG4gICAgICBjYXNlICdjcDEyNTInOlxuICAgICAgY2FzZSAneC1jcDEyNTInOlxuICAgICAgICByZXR1cm4gZGVjb2RlcnMubGF0aW4xXG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgICByZXR1cm4gZGVjb2RlcnMudXRmMTZsZVxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgcmV0dXJuIGRlY29kZXJzLmJhc2U2NFxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxjID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBsYyA9IHRydWVcbiAgICAgICAgICBjaGFyc2V0ID0gY2hhcnNldC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVjb2RlcnMub3RoZXIuYmluZChjaGFyc2V0KVxuICAgIH1cbiAgfVxufVxuXG5jb25zdCBkZWNvZGVycyA9IHtcbiAgdXRmODogKGRhdGEsIHNvdXJjZUVuY29kaW5nKSA9PiB7XG4gICAgaWYgKGRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgZGF0YSA9IEJ1ZmZlci5mcm9tKGRhdGEsIHNvdXJjZUVuY29kaW5nKVxuICAgIH1cbiAgICByZXR1cm4gZGF0YS51dGY4U2xpY2UoMCwgZGF0YS5sZW5ndGgpXG4gIH0sXG5cbiAgbGF0aW4xOiAoZGF0YSwgc291cmNlRW5jb2RpbmcpID0+IHtcbiAgICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gZGF0YVxuICAgIH1cbiAgICByZXR1cm4gZGF0YS5sYXRpbjFTbGljZSgwLCBkYXRhLmxlbmd0aClcbiAgfSxcblxuICB1dGYxNmxlOiAoZGF0YSwgc291cmNlRW5jb2RpbmcpID0+IHtcbiAgICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICBkYXRhID0gQnVmZmVyLmZyb20oZGF0YSwgc291cmNlRW5jb2RpbmcpXG4gICAgfVxuICAgIHJldHVybiBkYXRhLnVjczJTbGljZSgwLCBkYXRhLmxlbmd0aClcbiAgfSxcblxuICBiYXNlNjQ6IChkYXRhLCBzb3VyY2VFbmNvZGluZykgPT4ge1xuICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGRhdGEgPSBCdWZmZXIuZnJvbShkYXRhLCBzb3VyY2VFbmNvZGluZylcbiAgICB9XG4gICAgcmV0dXJuIGRhdGEuYmFzZTY0U2xpY2UoMCwgZGF0YS5sZW5ndGgpXG4gIH0sXG5cbiAgb3RoZXI6IChkYXRhLCBzb3VyY2VFbmNvZGluZykgPT4ge1xuICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGRhdGEgPSBCdWZmZXIuZnJvbShkYXRhLCBzb3VyY2VFbmNvZGluZylcbiAgICB9XG5cbiAgICBpZiAodGV4dERlY29kZXJzLmhhcyh0aGlzLnRvU3RyaW5nKCkpKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdGV4dERlY29kZXJzLmdldCh0aGlzKS5kZWNvZGUoZGF0YSlcbiAgICAgIH0gY2F0Y2gge31cbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJ1xuICAgICAgPyBkYXRhXG4gICAgICA6IGRhdGEudG9TdHJpbmcoKVxuICB9XG59XG5cbmZ1bmN0aW9uIGRlY29kZVRleHQgKHRleHQsIHNvdXJjZUVuY29kaW5nLCBkZXN0RW5jb2RpbmcpIHtcbiAgaWYgKHRleHQpIHtcbiAgICByZXR1cm4gZ2V0RGVjb2RlcihkZXN0RW5jb2RpbmcpKHRleHQsIHNvdXJjZUVuY29kaW5nKVxuICB9XG4gIHJldHVybiB0ZXh0XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZGVjb2RlVGV4dFxuIiwKICAgICIvKiBlc2xpbnQtZGlzYWJsZSBvYmplY3QtcHJvcGVydHktbmV3bGluZSAqL1xuJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGRlY29kZVRleHQgPSByZXF1aXJlKCcuL2RlY29kZVRleHQnKVxuXG5jb25zdCBSRV9FTkNPREVEID0gLyVbYS1mQS1GMC05XVthLWZBLUYwLTldL2dcblxuY29uc3QgRW5jb2RlZExvb2t1cCA9IHtcbiAgJyUwMCc6ICdcXHgwMCcsICclMDEnOiAnXFx4MDEnLCAnJTAyJzogJ1xceDAyJywgJyUwMyc6ICdcXHgwMycsICclMDQnOiAnXFx4MDQnLFxuICAnJTA1JzogJ1xceDA1JywgJyUwNic6ICdcXHgwNicsICclMDcnOiAnXFx4MDcnLCAnJTA4JzogJ1xceDA4JywgJyUwOSc6ICdcXHgwOScsXG4gICclMGEnOiAnXFx4MGEnLCAnJTBBJzogJ1xceDBhJywgJyUwYic6ICdcXHgwYicsICclMEInOiAnXFx4MGInLCAnJTBjJzogJ1xceDBjJyxcbiAgJyUwQyc6ICdcXHgwYycsICclMGQnOiAnXFx4MGQnLCAnJTBEJzogJ1xceDBkJywgJyUwZSc6ICdcXHgwZScsICclMEUnOiAnXFx4MGUnLFxuICAnJTBmJzogJ1xceDBmJywgJyUwRic6ICdcXHgwZicsICclMTAnOiAnXFx4MTAnLCAnJTExJzogJ1xceDExJywgJyUxMic6ICdcXHgxMicsXG4gICclMTMnOiAnXFx4MTMnLCAnJTE0JzogJ1xceDE0JywgJyUxNSc6ICdcXHgxNScsICclMTYnOiAnXFx4MTYnLCAnJTE3JzogJ1xceDE3JyxcbiAgJyUxOCc6ICdcXHgxOCcsICclMTknOiAnXFx4MTknLCAnJTFhJzogJ1xceDFhJywgJyUxQSc6ICdcXHgxYScsICclMWInOiAnXFx4MWInLFxuICAnJTFCJzogJ1xceDFiJywgJyUxYyc6ICdcXHgxYycsICclMUMnOiAnXFx4MWMnLCAnJTFkJzogJ1xceDFkJywgJyUxRCc6ICdcXHgxZCcsXG4gICclMWUnOiAnXFx4MWUnLCAnJTFFJzogJ1xceDFlJywgJyUxZic6ICdcXHgxZicsICclMUYnOiAnXFx4MWYnLCAnJTIwJzogJ1xceDIwJyxcbiAgJyUyMSc6ICdcXHgyMScsICclMjInOiAnXFx4MjInLCAnJTIzJzogJ1xceDIzJywgJyUyNCc6ICdcXHgyNCcsICclMjUnOiAnXFx4MjUnLFxuICAnJTI2JzogJ1xceDI2JywgJyUyNyc6ICdcXHgyNycsICclMjgnOiAnXFx4MjgnLCAnJTI5JzogJ1xceDI5JywgJyUyYSc6ICdcXHgyYScsXG4gICclMkEnOiAnXFx4MmEnLCAnJTJiJzogJ1xceDJiJywgJyUyQic6ICdcXHgyYicsICclMmMnOiAnXFx4MmMnLCAnJTJDJzogJ1xceDJjJyxcbiAgJyUyZCc6ICdcXHgyZCcsICclMkQnOiAnXFx4MmQnLCAnJTJlJzogJ1xceDJlJywgJyUyRSc6ICdcXHgyZScsICclMmYnOiAnXFx4MmYnLFxuICAnJTJGJzogJ1xceDJmJywgJyUzMCc6ICdcXHgzMCcsICclMzEnOiAnXFx4MzEnLCAnJTMyJzogJ1xceDMyJywgJyUzMyc6ICdcXHgzMycsXG4gICclMzQnOiAnXFx4MzQnLCAnJTM1JzogJ1xceDM1JywgJyUzNic6ICdcXHgzNicsICclMzcnOiAnXFx4MzcnLCAnJTM4JzogJ1xceDM4JyxcbiAgJyUzOSc6ICdcXHgzOScsICclM2EnOiAnXFx4M2EnLCAnJTNBJzogJ1xceDNhJywgJyUzYic6ICdcXHgzYicsICclM0InOiAnXFx4M2InLFxuICAnJTNjJzogJ1xceDNjJywgJyUzQyc6ICdcXHgzYycsICclM2QnOiAnXFx4M2QnLCAnJTNEJzogJ1xceDNkJywgJyUzZSc6ICdcXHgzZScsXG4gICclM0UnOiAnXFx4M2UnLCAnJTNmJzogJ1xceDNmJywgJyUzRic6ICdcXHgzZicsICclNDAnOiAnXFx4NDAnLCAnJTQxJzogJ1xceDQxJyxcbiAgJyU0Mic6ICdcXHg0MicsICclNDMnOiAnXFx4NDMnLCAnJTQ0JzogJ1xceDQ0JywgJyU0NSc6ICdcXHg0NScsICclNDYnOiAnXFx4NDYnLFxuICAnJTQ3JzogJ1xceDQ3JywgJyU0OCc6ICdcXHg0OCcsICclNDknOiAnXFx4NDknLCAnJTRhJzogJ1xceDRhJywgJyU0QSc6ICdcXHg0YScsXG4gICclNGInOiAnXFx4NGInLCAnJTRCJzogJ1xceDRiJywgJyU0Yyc6ICdcXHg0YycsICclNEMnOiAnXFx4NGMnLCAnJTRkJzogJ1xceDRkJyxcbiAgJyU0RCc6ICdcXHg0ZCcsICclNGUnOiAnXFx4NGUnLCAnJTRFJzogJ1xceDRlJywgJyU0Zic6ICdcXHg0ZicsICclNEYnOiAnXFx4NGYnLFxuICAnJTUwJzogJ1xceDUwJywgJyU1MSc6ICdcXHg1MScsICclNTInOiAnXFx4NTInLCAnJTUzJzogJ1xceDUzJywgJyU1NCc6ICdcXHg1NCcsXG4gICclNTUnOiAnXFx4NTUnLCAnJTU2JzogJ1xceDU2JywgJyU1Nyc6ICdcXHg1NycsICclNTgnOiAnXFx4NTgnLCAnJTU5JzogJ1xceDU5JyxcbiAgJyU1YSc6ICdcXHg1YScsICclNUEnOiAnXFx4NWEnLCAnJTViJzogJ1xceDViJywgJyU1Qic6ICdcXHg1YicsICclNWMnOiAnXFx4NWMnLFxuICAnJTVDJzogJ1xceDVjJywgJyU1ZCc6ICdcXHg1ZCcsICclNUQnOiAnXFx4NWQnLCAnJTVlJzogJ1xceDVlJywgJyU1RSc6ICdcXHg1ZScsXG4gICclNWYnOiAnXFx4NWYnLCAnJTVGJzogJ1xceDVmJywgJyU2MCc6ICdcXHg2MCcsICclNjEnOiAnXFx4NjEnLCAnJTYyJzogJ1xceDYyJyxcbiAgJyU2Myc6ICdcXHg2MycsICclNjQnOiAnXFx4NjQnLCAnJTY1JzogJ1xceDY1JywgJyU2Nic6ICdcXHg2NicsICclNjcnOiAnXFx4NjcnLFxuICAnJTY4JzogJ1xceDY4JywgJyU2OSc6ICdcXHg2OScsICclNmEnOiAnXFx4NmEnLCAnJTZBJzogJ1xceDZhJywgJyU2Yic6ICdcXHg2YicsXG4gICclNkInOiAnXFx4NmInLCAnJTZjJzogJ1xceDZjJywgJyU2Qyc6ICdcXHg2YycsICclNmQnOiAnXFx4NmQnLCAnJTZEJzogJ1xceDZkJyxcbiAgJyU2ZSc6ICdcXHg2ZScsICclNkUnOiAnXFx4NmUnLCAnJTZmJzogJ1xceDZmJywgJyU2Ric6ICdcXHg2ZicsICclNzAnOiAnXFx4NzAnLFxuICAnJTcxJzogJ1xceDcxJywgJyU3Mic6ICdcXHg3MicsICclNzMnOiAnXFx4NzMnLCAnJTc0JzogJ1xceDc0JywgJyU3NSc6ICdcXHg3NScsXG4gICclNzYnOiAnXFx4NzYnLCAnJTc3JzogJ1xceDc3JywgJyU3OCc6ICdcXHg3OCcsICclNzknOiAnXFx4NzknLCAnJTdhJzogJ1xceDdhJyxcbiAgJyU3QSc6ICdcXHg3YScsICclN2InOiAnXFx4N2InLCAnJTdCJzogJ1xceDdiJywgJyU3Yyc6ICdcXHg3YycsICclN0MnOiAnXFx4N2MnLFxuICAnJTdkJzogJ1xceDdkJywgJyU3RCc6ICdcXHg3ZCcsICclN2UnOiAnXFx4N2UnLCAnJTdFJzogJ1xceDdlJywgJyU3Zic6ICdcXHg3ZicsXG4gICclN0YnOiAnXFx4N2YnLCAnJTgwJzogJ1xceDgwJywgJyU4MSc6ICdcXHg4MScsICclODInOiAnXFx4ODInLCAnJTgzJzogJ1xceDgzJyxcbiAgJyU4NCc6ICdcXHg4NCcsICclODUnOiAnXFx4ODUnLCAnJTg2JzogJ1xceDg2JywgJyU4Nyc6ICdcXHg4NycsICclODgnOiAnXFx4ODgnLFxuICAnJTg5JzogJ1xceDg5JywgJyU4YSc6ICdcXHg4YScsICclOEEnOiAnXFx4OGEnLCAnJThiJzogJ1xceDhiJywgJyU4Qic6ICdcXHg4YicsXG4gICclOGMnOiAnXFx4OGMnLCAnJThDJzogJ1xceDhjJywgJyU4ZCc6ICdcXHg4ZCcsICclOEQnOiAnXFx4OGQnLCAnJThlJzogJ1xceDhlJyxcbiAgJyU4RSc6ICdcXHg4ZScsICclOGYnOiAnXFx4OGYnLCAnJThGJzogJ1xceDhmJywgJyU5MCc6ICdcXHg5MCcsICclOTEnOiAnXFx4OTEnLFxuICAnJTkyJzogJ1xceDkyJywgJyU5Myc6ICdcXHg5MycsICclOTQnOiAnXFx4OTQnLCAnJTk1JzogJ1xceDk1JywgJyU5Nic6ICdcXHg5NicsXG4gICclOTcnOiAnXFx4OTcnLCAnJTk4JzogJ1xceDk4JywgJyU5OSc6ICdcXHg5OScsICclOWEnOiAnXFx4OWEnLCAnJTlBJzogJ1xceDlhJyxcbiAgJyU5Yic6ICdcXHg5YicsICclOUInOiAnXFx4OWInLCAnJTljJzogJ1xceDljJywgJyU5Qyc6ICdcXHg5YycsICclOWQnOiAnXFx4OWQnLFxuICAnJTlEJzogJ1xceDlkJywgJyU5ZSc6ICdcXHg5ZScsICclOUUnOiAnXFx4OWUnLCAnJTlmJzogJ1xceDlmJywgJyU5Ric6ICdcXHg5ZicsXG4gICclYTAnOiAnXFx4YTAnLCAnJUEwJzogJ1xceGEwJywgJyVhMSc6ICdcXHhhMScsICclQTEnOiAnXFx4YTEnLCAnJWEyJzogJ1xceGEyJyxcbiAgJyVBMic6ICdcXHhhMicsICclYTMnOiAnXFx4YTMnLCAnJUEzJzogJ1xceGEzJywgJyVhNCc6ICdcXHhhNCcsICclQTQnOiAnXFx4YTQnLFxuICAnJWE1JzogJ1xceGE1JywgJyVBNSc6ICdcXHhhNScsICclYTYnOiAnXFx4YTYnLCAnJUE2JzogJ1xceGE2JywgJyVhNyc6ICdcXHhhNycsXG4gICclQTcnOiAnXFx4YTcnLCAnJWE4JzogJ1xceGE4JywgJyVBOCc6ICdcXHhhOCcsICclYTknOiAnXFx4YTknLCAnJUE5JzogJ1xceGE5JyxcbiAgJyVhYSc6ICdcXHhhYScsICclQWEnOiAnXFx4YWEnLCAnJWFBJzogJ1xceGFhJywgJyVBQSc6ICdcXHhhYScsICclYWInOiAnXFx4YWInLFxuICAnJUFiJzogJ1xceGFiJywgJyVhQic6ICdcXHhhYicsICclQUInOiAnXFx4YWInLCAnJWFjJzogJ1xceGFjJywgJyVBYyc6ICdcXHhhYycsXG4gICclYUMnOiAnXFx4YWMnLCAnJUFDJzogJ1xceGFjJywgJyVhZCc6ICdcXHhhZCcsICclQWQnOiAnXFx4YWQnLCAnJWFEJzogJ1xceGFkJyxcbiAgJyVBRCc6ICdcXHhhZCcsICclYWUnOiAnXFx4YWUnLCAnJUFlJzogJ1xceGFlJywgJyVhRSc6ICdcXHhhZScsICclQUUnOiAnXFx4YWUnLFxuICAnJWFmJzogJ1xceGFmJywgJyVBZic6ICdcXHhhZicsICclYUYnOiAnXFx4YWYnLCAnJUFGJzogJ1xceGFmJywgJyViMCc6ICdcXHhiMCcsXG4gICclQjAnOiAnXFx4YjAnLCAnJWIxJzogJ1xceGIxJywgJyVCMSc6ICdcXHhiMScsICclYjInOiAnXFx4YjInLCAnJUIyJzogJ1xceGIyJyxcbiAgJyViMyc6ICdcXHhiMycsICclQjMnOiAnXFx4YjMnLCAnJWI0JzogJ1xceGI0JywgJyVCNCc6ICdcXHhiNCcsICclYjUnOiAnXFx4YjUnLFxuICAnJUI1JzogJ1xceGI1JywgJyViNic6ICdcXHhiNicsICclQjYnOiAnXFx4YjYnLCAnJWI3JzogJ1xceGI3JywgJyVCNyc6ICdcXHhiNycsXG4gICclYjgnOiAnXFx4YjgnLCAnJUI4JzogJ1xceGI4JywgJyViOSc6ICdcXHhiOScsICclQjknOiAnXFx4YjknLCAnJWJhJzogJ1xceGJhJyxcbiAgJyVCYSc6ICdcXHhiYScsICclYkEnOiAnXFx4YmEnLCAnJUJBJzogJ1xceGJhJywgJyViYic6ICdcXHhiYicsICclQmInOiAnXFx4YmInLFxuICAnJWJCJzogJ1xceGJiJywgJyVCQic6ICdcXHhiYicsICclYmMnOiAnXFx4YmMnLCAnJUJjJzogJ1xceGJjJywgJyViQyc6ICdcXHhiYycsXG4gICclQkMnOiAnXFx4YmMnLCAnJWJkJzogJ1xceGJkJywgJyVCZCc6ICdcXHhiZCcsICclYkQnOiAnXFx4YmQnLCAnJUJEJzogJ1xceGJkJyxcbiAgJyViZSc6ICdcXHhiZScsICclQmUnOiAnXFx4YmUnLCAnJWJFJzogJ1xceGJlJywgJyVCRSc6ICdcXHhiZScsICclYmYnOiAnXFx4YmYnLFxuICAnJUJmJzogJ1xceGJmJywgJyViRic6ICdcXHhiZicsICclQkYnOiAnXFx4YmYnLCAnJWMwJzogJ1xceGMwJywgJyVDMCc6ICdcXHhjMCcsXG4gICclYzEnOiAnXFx4YzEnLCAnJUMxJzogJ1xceGMxJywgJyVjMic6ICdcXHhjMicsICclQzInOiAnXFx4YzInLCAnJWMzJzogJ1xceGMzJyxcbiAgJyVDMyc6ICdcXHhjMycsICclYzQnOiAnXFx4YzQnLCAnJUM0JzogJ1xceGM0JywgJyVjNSc6ICdcXHhjNScsICclQzUnOiAnXFx4YzUnLFxuICAnJWM2JzogJ1xceGM2JywgJyVDNic6ICdcXHhjNicsICclYzcnOiAnXFx4YzcnLCAnJUM3JzogJ1xceGM3JywgJyVjOCc6ICdcXHhjOCcsXG4gICclQzgnOiAnXFx4YzgnLCAnJWM5JzogJ1xceGM5JywgJyVDOSc6ICdcXHhjOScsICclY2EnOiAnXFx4Y2EnLCAnJUNhJzogJ1xceGNhJyxcbiAgJyVjQSc6ICdcXHhjYScsICclQ0EnOiAnXFx4Y2EnLCAnJWNiJzogJ1xceGNiJywgJyVDYic6ICdcXHhjYicsICclY0InOiAnXFx4Y2InLFxuICAnJUNCJzogJ1xceGNiJywgJyVjYyc6ICdcXHhjYycsICclQ2MnOiAnXFx4Y2MnLCAnJWNDJzogJ1xceGNjJywgJyVDQyc6ICdcXHhjYycsXG4gICclY2QnOiAnXFx4Y2QnLCAnJUNkJzogJ1xceGNkJywgJyVjRCc6ICdcXHhjZCcsICclQ0QnOiAnXFx4Y2QnLCAnJWNlJzogJ1xceGNlJyxcbiAgJyVDZSc6ICdcXHhjZScsICclY0UnOiAnXFx4Y2UnLCAnJUNFJzogJ1xceGNlJywgJyVjZic6ICdcXHhjZicsICclQ2YnOiAnXFx4Y2YnLFxuICAnJWNGJzogJ1xceGNmJywgJyVDRic6ICdcXHhjZicsICclZDAnOiAnXFx4ZDAnLCAnJUQwJzogJ1xceGQwJywgJyVkMSc6ICdcXHhkMScsXG4gICclRDEnOiAnXFx4ZDEnLCAnJWQyJzogJ1xceGQyJywgJyVEMic6ICdcXHhkMicsICclZDMnOiAnXFx4ZDMnLCAnJUQzJzogJ1xceGQzJyxcbiAgJyVkNCc6ICdcXHhkNCcsICclRDQnOiAnXFx4ZDQnLCAnJWQ1JzogJ1xceGQ1JywgJyVENSc6ICdcXHhkNScsICclZDYnOiAnXFx4ZDYnLFxuICAnJUQ2JzogJ1xceGQ2JywgJyVkNyc6ICdcXHhkNycsICclRDcnOiAnXFx4ZDcnLCAnJWQ4JzogJ1xceGQ4JywgJyVEOCc6ICdcXHhkOCcsXG4gICclZDknOiAnXFx4ZDknLCAnJUQ5JzogJ1xceGQ5JywgJyVkYSc6ICdcXHhkYScsICclRGEnOiAnXFx4ZGEnLCAnJWRBJzogJ1xceGRhJyxcbiAgJyVEQSc6ICdcXHhkYScsICclZGInOiAnXFx4ZGInLCAnJURiJzogJ1xceGRiJywgJyVkQic6ICdcXHhkYicsICclREInOiAnXFx4ZGInLFxuICAnJWRjJzogJ1xceGRjJywgJyVEYyc6ICdcXHhkYycsICclZEMnOiAnXFx4ZGMnLCAnJURDJzogJ1xceGRjJywgJyVkZCc6ICdcXHhkZCcsXG4gICclRGQnOiAnXFx4ZGQnLCAnJWREJzogJ1xceGRkJywgJyVERCc6ICdcXHhkZCcsICclZGUnOiAnXFx4ZGUnLCAnJURlJzogJ1xceGRlJyxcbiAgJyVkRSc6ICdcXHhkZScsICclREUnOiAnXFx4ZGUnLCAnJWRmJzogJ1xceGRmJywgJyVEZic6ICdcXHhkZicsICclZEYnOiAnXFx4ZGYnLFxuICAnJURGJzogJ1xceGRmJywgJyVlMCc6ICdcXHhlMCcsICclRTAnOiAnXFx4ZTAnLCAnJWUxJzogJ1xceGUxJywgJyVFMSc6ICdcXHhlMScsXG4gICclZTInOiAnXFx4ZTInLCAnJUUyJzogJ1xceGUyJywgJyVlMyc6ICdcXHhlMycsICclRTMnOiAnXFx4ZTMnLCAnJWU0JzogJ1xceGU0JyxcbiAgJyVFNCc6ICdcXHhlNCcsICclZTUnOiAnXFx4ZTUnLCAnJUU1JzogJ1xceGU1JywgJyVlNic6ICdcXHhlNicsICclRTYnOiAnXFx4ZTYnLFxuICAnJWU3JzogJ1xceGU3JywgJyVFNyc6ICdcXHhlNycsICclZTgnOiAnXFx4ZTgnLCAnJUU4JzogJ1xceGU4JywgJyVlOSc6ICdcXHhlOScsXG4gICclRTknOiAnXFx4ZTknLCAnJWVhJzogJ1xceGVhJywgJyVFYSc6ICdcXHhlYScsICclZUEnOiAnXFx4ZWEnLCAnJUVBJzogJ1xceGVhJyxcbiAgJyVlYic6ICdcXHhlYicsICclRWInOiAnXFx4ZWInLCAnJWVCJzogJ1xceGViJywgJyVFQic6ICdcXHhlYicsICclZWMnOiAnXFx4ZWMnLFxuICAnJUVjJzogJ1xceGVjJywgJyVlQyc6ICdcXHhlYycsICclRUMnOiAnXFx4ZWMnLCAnJWVkJzogJ1xceGVkJywgJyVFZCc6ICdcXHhlZCcsXG4gICclZUQnOiAnXFx4ZWQnLCAnJUVEJzogJ1xceGVkJywgJyVlZSc6ICdcXHhlZScsICclRWUnOiAnXFx4ZWUnLCAnJWVFJzogJ1xceGVlJyxcbiAgJyVFRSc6ICdcXHhlZScsICclZWYnOiAnXFx4ZWYnLCAnJUVmJzogJ1xceGVmJywgJyVlRic6ICdcXHhlZicsICclRUYnOiAnXFx4ZWYnLFxuICAnJWYwJzogJ1xceGYwJywgJyVGMCc6ICdcXHhmMCcsICclZjEnOiAnXFx4ZjEnLCAnJUYxJzogJ1xceGYxJywgJyVmMic6ICdcXHhmMicsXG4gICclRjInOiAnXFx4ZjInLCAnJWYzJzogJ1xceGYzJywgJyVGMyc6ICdcXHhmMycsICclZjQnOiAnXFx4ZjQnLCAnJUY0JzogJ1xceGY0JyxcbiAgJyVmNSc6ICdcXHhmNScsICclRjUnOiAnXFx4ZjUnLCAnJWY2JzogJ1xceGY2JywgJyVGNic6ICdcXHhmNicsICclZjcnOiAnXFx4ZjcnLFxuICAnJUY3JzogJ1xceGY3JywgJyVmOCc6ICdcXHhmOCcsICclRjgnOiAnXFx4ZjgnLCAnJWY5JzogJ1xceGY5JywgJyVGOSc6ICdcXHhmOScsXG4gICclZmEnOiAnXFx4ZmEnLCAnJUZhJzogJ1xceGZhJywgJyVmQSc6ICdcXHhmYScsICclRkEnOiAnXFx4ZmEnLCAnJWZiJzogJ1xceGZiJyxcbiAgJyVGYic6ICdcXHhmYicsICclZkInOiAnXFx4ZmInLCAnJUZCJzogJ1xceGZiJywgJyVmYyc6ICdcXHhmYycsICclRmMnOiAnXFx4ZmMnLFxuICAnJWZDJzogJ1xceGZjJywgJyVGQyc6ICdcXHhmYycsICclZmQnOiAnXFx4ZmQnLCAnJUZkJzogJ1xceGZkJywgJyVmRCc6ICdcXHhmZCcsXG4gICclRkQnOiAnXFx4ZmQnLCAnJWZlJzogJ1xceGZlJywgJyVGZSc6ICdcXHhmZScsICclZkUnOiAnXFx4ZmUnLCAnJUZFJzogJ1xceGZlJyxcbiAgJyVmZic6ICdcXHhmZicsICclRmYnOiAnXFx4ZmYnLCAnJWZGJzogJ1xceGZmJywgJyVGRic6ICdcXHhmZidcbn1cblxuZnVuY3Rpb24gZW5jb2RlZFJlcGxhY2VyIChtYXRjaCkge1xuICByZXR1cm4gRW5jb2RlZExvb2t1cFttYXRjaF1cbn1cblxuY29uc3QgU1RBVEVfS0VZID0gMFxuY29uc3QgU1RBVEVfVkFMVUUgPSAxXG5jb25zdCBTVEFURV9DSEFSU0VUID0gMlxuY29uc3QgU1RBVEVfTEFORyA9IDNcblxuZnVuY3Rpb24gcGFyc2VQYXJhbXMgKHN0cikge1xuICBjb25zdCByZXMgPSBbXVxuICBsZXQgc3RhdGUgPSBTVEFURV9LRVlcbiAgbGV0IGNoYXJzZXQgPSAnJ1xuICBsZXQgaW5xdW90ZSA9IGZhbHNlXG4gIGxldCBlc2NhcGluZyA9IGZhbHNlXG4gIGxldCBwID0gMFxuICBsZXQgdG1wID0gJydcbiAgY29uc3QgbGVuID0gc3RyLmxlbmd0aFxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby12YXJcbiAgICBjb25zdCBjaGFyID0gc3RyW2ldXG4gICAgaWYgKGNoYXIgPT09ICdcXFxcJyAmJiBpbnF1b3RlKSB7XG4gICAgICBpZiAoZXNjYXBpbmcpIHsgZXNjYXBpbmcgPSBmYWxzZSB9IGVsc2Uge1xuICAgICAgICBlc2NhcGluZyA9IHRydWVcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNoYXIgPT09ICdcIicpIHtcbiAgICAgIGlmICghZXNjYXBpbmcpIHtcbiAgICAgICAgaWYgKGlucXVvdGUpIHtcbiAgICAgICAgICBpbnF1b3RlID0gZmFsc2VcbiAgICAgICAgICBzdGF0ZSA9IFNUQVRFX0tFWVxuICAgICAgICB9IGVsc2UgeyBpbnF1b3RlID0gdHJ1ZSB9XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9IGVsc2UgeyBlc2NhcGluZyA9IGZhbHNlIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGVzY2FwaW5nICYmIGlucXVvdGUpIHsgdG1wICs9ICdcXFxcJyB9XG4gICAgICBlc2NhcGluZyA9IGZhbHNlXG4gICAgICBpZiAoKHN0YXRlID09PSBTVEFURV9DSEFSU0VUIHx8IHN0YXRlID09PSBTVEFURV9MQU5HKSAmJiBjaGFyID09PSBcIidcIikge1xuICAgICAgICBpZiAoc3RhdGUgPT09IFNUQVRFX0NIQVJTRVQpIHtcbiAgICAgICAgICBzdGF0ZSA9IFNUQVRFX0xBTkdcbiAgICAgICAgICBjaGFyc2V0ID0gdG1wLnN1YnN0cmluZygxKVxuICAgICAgICB9IGVsc2UgeyBzdGF0ZSA9IFNUQVRFX1ZBTFVFIH1cbiAgICAgICAgdG1wID0gJydcbiAgICAgICAgY29udGludWVcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT09IFNUQVRFX0tFWSAmJlxuICAgICAgICAoY2hhciA9PT0gJyonIHx8IGNoYXIgPT09ICc9JykgJiZcbiAgICAgICAgcmVzLmxlbmd0aCkge1xuICAgICAgICBzdGF0ZSA9IGNoYXIgPT09ICcqJ1xuICAgICAgICAgID8gU1RBVEVfQ0hBUlNFVFxuICAgICAgICAgIDogU1RBVEVfVkFMVUVcbiAgICAgICAgcmVzW3BdID0gW3RtcCwgdW5kZWZpbmVkXVxuICAgICAgICB0bXAgPSAnJ1xuICAgICAgICBjb250aW51ZVxuICAgICAgfSBlbHNlIGlmICghaW5xdW90ZSAmJiBjaGFyID09PSAnOycpIHtcbiAgICAgICAgc3RhdGUgPSBTVEFURV9LRVlcbiAgICAgICAgaWYgKGNoYXJzZXQpIHtcbiAgICAgICAgICBpZiAodG1wLmxlbmd0aCkge1xuICAgICAgICAgICAgdG1wID0gZGVjb2RlVGV4dCh0bXAucmVwbGFjZShSRV9FTkNPREVELCBlbmNvZGVkUmVwbGFjZXIpLFxuICAgICAgICAgICAgICAnYmluYXJ5JyxcbiAgICAgICAgICAgICAgY2hhcnNldClcbiAgICAgICAgICB9XG4gICAgICAgICAgY2hhcnNldCA9ICcnXG4gICAgICAgIH0gZWxzZSBpZiAodG1wLmxlbmd0aCkge1xuICAgICAgICAgIHRtcCA9IGRlY29kZVRleHQodG1wLCAnYmluYXJ5JywgJ3V0ZjgnKVxuICAgICAgICB9XG4gICAgICAgIGlmIChyZXNbcF0gPT09IHVuZGVmaW5lZCkgeyByZXNbcF0gPSB0bXAgfSBlbHNlIHsgcmVzW3BdWzFdID0gdG1wIH1cbiAgICAgICAgdG1wID0gJydcbiAgICAgICAgKytwXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9IGVsc2UgaWYgKCFpbnF1b3RlICYmIChjaGFyID09PSAnICcgfHwgY2hhciA9PT0gJ1xcdCcpKSB7IGNvbnRpbnVlIH1cbiAgICB9XG4gICAgdG1wICs9IGNoYXJcbiAgfVxuICBpZiAoY2hhcnNldCAmJiB0bXAubGVuZ3RoKSB7XG4gICAgdG1wID0gZGVjb2RlVGV4dCh0bXAucmVwbGFjZShSRV9FTkNPREVELCBlbmNvZGVkUmVwbGFjZXIpLFxuICAgICAgJ2JpbmFyeScsXG4gICAgICBjaGFyc2V0KVxuICB9IGVsc2UgaWYgKHRtcCkge1xuICAgIHRtcCA9IGRlY29kZVRleHQodG1wLCAnYmluYXJ5JywgJ3V0ZjgnKVxuICB9XG5cbiAgaWYgKHJlc1twXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHRtcCkgeyByZXNbcF0gPSB0bXAgfVxuICB9IGVsc2UgeyByZXNbcF1bMV0gPSB0bXAgfVxuXG4gIHJldHVybiByZXNcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwYXJzZVBhcmFtc1xuIiwKICAgICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBiYXNlbmFtZSAocGF0aCkge1xuICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7IHJldHVybiAnJyB9XG4gIGZvciAodmFyIGkgPSBwYXRoLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdmFyXG4gICAgc3dpdGNoIChwYXRoLmNoYXJDb2RlQXQoaSkpIHtcbiAgICAgIGNhc2UgMHgyRjogLy8gJy8nXG4gICAgICBjYXNlIDB4NUM6IC8vICdcXCdcbiAgICAgICAgcGF0aCA9IHBhdGguc2xpY2UoaSArIDEpXG4gICAgICAgIHJldHVybiAocGF0aCA9PT0gJy4uJyB8fCBwYXRoID09PSAnLicgPyAnJyA6IHBhdGgpXG4gICAgfVxuICB9XG4gIHJldHVybiAocGF0aCA9PT0gJy4uJyB8fCBwYXRoID09PSAnLicgPyAnJyA6IHBhdGgpXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG4vLyBUT0RPOlxuLy8gICogc3VwcG9ydCAxIG5lc3RlZCBtdWx0aXBhcnQgbGV2ZWxcbi8vICAgIChzZWUgc2Vjb25kIG11bHRpcGFydCBleGFtcGxlIGhlcmU6XG4vLyAgICAgaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQwMS9pbnRlcmFjdC9mb3Jtcy5odG1sI2RpZHgtbXVsdGlwYXJ0Zm9ybS1kYXRhKVxuLy8gICogc3VwcG9ydCBsaW1pdHMuZmllbGROYW1lU2l6ZVxuLy8gICAgIC0tIHRoaXMgd2lsbCByZXF1aXJlIG1vZGlmaWNhdGlvbnMgdG8gdXRpbHMucGFyc2VQYXJhbXNcblxuY29uc3QgeyBSZWFkYWJsZSB9ID0gcmVxdWlyZSgnbm9kZTpzdHJlYW0nKVxuY29uc3QgeyBpbmhlcml0cyB9ID0gcmVxdWlyZSgnbm9kZTp1dGlsJylcblxuY29uc3QgRGljZXIgPSByZXF1aXJlKCcuLi8uLi9kZXBzL2RpY2VyL2xpYi9EaWNlcicpXG5cbmNvbnN0IHBhcnNlUGFyYW1zID0gcmVxdWlyZSgnLi4vdXRpbHMvcGFyc2VQYXJhbXMnKVxuY29uc3QgZGVjb2RlVGV4dCA9IHJlcXVpcmUoJy4uL3V0aWxzL2RlY29kZVRleHQnKVxuY29uc3QgYmFzZW5hbWUgPSByZXF1aXJlKCcuLi91dGlscy9iYXNlbmFtZScpXG5jb25zdCBnZXRMaW1pdCA9IHJlcXVpcmUoJy4uL3V0aWxzL2dldExpbWl0JylcblxuY29uc3QgUkVfQk9VTkRBUlkgPSAvXmJvdW5kYXJ5JC9pXG5jb25zdCBSRV9GSUVMRCA9IC9eZm9ybS1kYXRhJC9pXG5jb25zdCBSRV9DSEFSU0VUID0gL15jaGFyc2V0JC9pXG5jb25zdCBSRV9GSUxFTkFNRSA9IC9eZmlsZW5hbWUkL2lcbmNvbnN0IFJFX05BTUUgPSAvXm5hbWUkL2lcblxuTXVsdGlwYXJ0LmRldGVjdCA9IC9ebXVsdGlwYXJ0XFwvZm9ybS1kYXRhL2lcbmZ1bmN0aW9uIE11bHRpcGFydCAoYm95LCBjZmcpIHtcbiAgbGV0IGlcbiAgbGV0IGxlblxuICBjb25zdCBzZWxmID0gdGhpc1xuICBsZXQgYm91bmRhcnlcbiAgY29uc3QgbGltaXRzID0gY2ZnLmxpbWl0c1xuICBjb25zdCBpc1BhcnRBRmlsZSA9IGNmZy5pc1BhcnRBRmlsZSB8fCAoKGZpZWxkTmFtZSwgY29udGVudFR5cGUsIGZpbGVOYW1lKSA9PiAoY29udGVudFR5cGUgPT09ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nIHx8IGZpbGVOYW1lICE9PSB1bmRlZmluZWQpKVxuICBjb25zdCBwYXJzZWRDb25UeXBlID0gY2ZnLnBhcnNlZENvblR5cGUgfHwgW11cbiAgY29uc3QgZGVmQ2hhcnNldCA9IGNmZy5kZWZDaGFyc2V0IHx8ICd1dGY4J1xuICBjb25zdCBwcmVzZXJ2ZVBhdGggPSBjZmcucHJlc2VydmVQYXRoXG4gIGNvbnN0IGZpbGVPcHRzID0geyBoaWdoV2F0ZXJNYXJrOiBjZmcuZmlsZUh3bSB9XG5cbiAgZm9yIChpID0gMCwgbGVuID0gcGFyc2VkQ29uVHlwZS5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHBhcnNlZENvblR5cGVbaV0pICYmXG4gICAgICBSRV9CT1VOREFSWS50ZXN0KHBhcnNlZENvblR5cGVbaV1bMF0pKSB7XG4gICAgICBib3VuZGFyeSA9IHBhcnNlZENvblR5cGVbaV1bMV1cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2hlY2tGaW5pc2hlZCAoKSB7XG4gICAgaWYgKG5lbmRzID09PSAwICYmIGZpbmlzaGVkICYmICFib3kuX2RvbmUpIHtcbiAgICAgIGZpbmlzaGVkID0gZmFsc2VcbiAgICAgIHNlbGYuZW5kKClcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIGJvdW5kYXJ5ICE9PSAnc3RyaW5nJykgeyB0aHJvdyBuZXcgRXJyb3IoJ011bHRpcGFydDogQm91bmRhcnkgbm90IGZvdW5kJykgfVxuXG4gIGNvbnN0IGZpZWxkU2l6ZUxpbWl0ID0gZ2V0TGltaXQobGltaXRzLCAnZmllbGRTaXplJywgMSAqIDEwMjQgKiAxMDI0KVxuICBjb25zdCBmaWxlU2l6ZUxpbWl0ID0gZ2V0TGltaXQobGltaXRzLCAnZmlsZVNpemUnLCBJbmZpbml0eSlcbiAgY29uc3QgZmlsZXNMaW1pdCA9IGdldExpbWl0KGxpbWl0cywgJ2ZpbGVzJywgSW5maW5pdHkpXG4gIGNvbnN0IGZpZWxkc0xpbWl0ID0gZ2V0TGltaXQobGltaXRzLCAnZmllbGRzJywgSW5maW5pdHkpXG4gIGNvbnN0IHBhcnRzTGltaXQgPSBnZXRMaW1pdChsaW1pdHMsICdwYXJ0cycsIEluZmluaXR5KVxuICBjb25zdCBoZWFkZXJQYWlyc0xpbWl0ID0gZ2V0TGltaXQobGltaXRzLCAnaGVhZGVyUGFpcnMnLCAyMDAwKVxuICBjb25zdCBoZWFkZXJTaXplTGltaXQgPSBnZXRMaW1pdChsaW1pdHMsICdoZWFkZXJTaXplJywgODAgKiAxMDI0KVxuXG4gIGxldCBuZmlsZXMgPSAwXG4gIGxldCBuZmllbGRzID0gMFxuICBsZXQgbmVuZHMgPSAwXG4gIGxldCBjdXJGaWxlXG4gIGxldCBjdXJGaWVsZFxuICBsZXQgZmluaXNoZWQgPSBmYWxzZVxuXG4gIHRoaXMuX25lZWREcmFpbiA9IGZhbHNlXG4gIHRoaXMuX3BhdXNlID0gZmFsc2VcbiAgdGhpcy5fY2IgPSB1bmRlZmluZWRcbiAgdGhpcy5fbnBhcnRzID0gMFxuICB0aGlzLl9ib3kgPSBib3lcblxuICBjb25zdCBwYXJzZXJDZmcgPSB7XG4gICAgYm91bmRhcnksXG4gICAgbWF4SGVhZGVyUGFpcnM6IGhlYWRlclBhaXJzTGltaXQsXG4gICAgbWF4SGVhZGVyU2l6ZTogaGVhZGVyU2l6ZUxpbWl0LFxuICAgIHBhcnRId206IGZpbGVPcHRzLmhpZ2hXYXRlck1hcmssXG4gICAgaGlnaFdhdGVyTWFyazogY2ZnLmhpZ2hXYXRlck1hcmtcbiAgfVxuXG4gIHRoaXMucGFyc2VyID0gbmV3IERpY2VyKHBhcnNlckNmZylcbiAgdGhpcy5wYXJzZXIub24oJ2RyYWluJywgZnVuY3Rpb24gKCkge1xuICAgIHNlbGYuX25lZWREcmFpbiA9IGZhbHNlXG4gICAgaWYgKHNlbGYuX2NiICYmICFzZWxmLl9wYXVzZSkge1xuICAgICAgY29uc3QgY2IgPSBzZWxmLl9jYlxuICAgICAgc2VsZi5fY2IgPSB1bmRlZmluZWRcbiAgICAgIGNiKClcbiAgICB9XG4gIH0pLm9uKCdwYXJ0JywgZnVuY3Rpb24gb25QYXJ0IChwYXJ0KSB7XG4gICAgaWYgKCsrc2VsZi5fbnBhcnRzID4gcGFydHNMaW1pdCkge1xuICAgICAgc2VsZi5wYXJzZXIucmVtb3ZlTGlzdGVuZXIoJ3BhcnQnLCBvblBhcnQpXG4gICAgICBzZWxmLnBhcnNlci5vbigncGFydCcsIHNraXBQYXJ0KVxuICAgICAgYm95LmhpdFBhcnRzTGltaXQgPSB0cnVlXG4gICAgICBib3kuZW1pdCgncGFydHNMaW1pdCcpXG4gICAgICByZXR1cm4gc2tpcFBhcnQocGFydClcbiAgICB9XG5cbiAgICAvLyBoYWNrIGJlY2F1c2Ugc3RyZWFtczIgX2Fsd2F5c18gZG9lc24ndCBlbWl0ICdlbmQnIHVudGlsIG5leHRUaWNrLCBzbyBsZXRcbiAgICAvLyB1cyBlbWl0ICdlbmQnIGVhcmx5IHNpbmNlIHdlIGtub3cgdGhlIHBhcnQgaGFzIGVuZGVkIGlmIHdlIGFyZSBhbHJlYWR5XG4gICAgLy8gc2VlaW5nIHRoZSBuZXh0IHBhcnRcbiAgICBpZiAoY3VyRmllbGQpIHtcbiAgICAgIGNvbnN0IGZpZWxkID0gY3VyRmllbGRcbiAgICAgIGZpZWxkLmVtaXQoJ2VuZCcpXG4gICAgICBmaWVsZC5yZW1vdmVBbGxMaXN0ZW5lcnMoJ2VuZCcpXG4gICAgfVxuXG4gICAgcGFydC5vbignaGVhZGVyJywgZnVuY3Rpb24gKGhlYWRlcikge1xuICAgICAgbGV0IGNvbnR5cGVcbiAgICAgIGxldCBmaWVsZG5hbWVcbiAgICAgIGxldCBwYXJzZWRcbiAgICAgIGxldCBjaGFyc2V0XG4gICAgICBsZXQgZW5jb2RpbmdcbiAgICAgIGxldCBmaWxlbmFtZVxuICAgICAgbGV0IG5zaXplID0gMFxuXG4gICAgICBpZiAoaGVhZGVyWydjb250ZW50LXR5cGUnXSkge1xuICAgICAgICBwYXJzZWQgPSBwYXJzZVBhcmFtcyhoZWFkZXJbJ2NvbnRlbnQtdHlwZSddWzBdKVxuICAgICAgICBpZiAocGFyc2VkWzBdKSB7XG4gICAgICAgICAgY29udHlwZSA9IHBhcnNlZFswXS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgZm9yIChpID0gMCwgbGVuID0gcGFyc2VkLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICAgICAgICBpZiAoUkVfQ0hBUlNFVC50ZXN0KHBhcnNlZFtpXVswXSkpIHtcbiAgICAgICAgICAgICAgY2hhcnNldCA9IHBhcnNlZFtpXVsxXS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChjb250eXBlID09PSB1bmRlZmluZWQpIHsgY29udHlwZSA9ICd0ZXh0L3BsYWluJyB9XG4gICAgICBpZiAoY2hhcnNldCA9PT0gdW5kZWZpbmVkKSB7IGNoYXJzZXQgPSBkZWZDaGFyc2V0IH1cblxuICAgICAgaWYgKGhlYWRlclsnY29udGVudC1kaXNwb3NpdGlvbiddKSB7XG4gICAgICAgIHBhcnNlZCA9IHBhcnNlUGFyYW1zKGhlYWRlclsnY29udGVudC1kaXNwb3NpdGlvbiddWzBdKVxuICAgICAgICBpZiAoIVJFX0ZJRUxELnRlc3QocGFyc2VkWzBdKSkgeyByZXR1cm4gc2tpcFBhcnQocGFydCkgfVxuICAgICAgICBmb3IgKGkgPSAwLCBsZW4gPSBwYXJzZWQubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgICAgICBpZiAoUkVfTkFNRS50ZXN0KHBhcnNlZFtpXVswXSkpIHtcbiAgICAgICAgICAgIGZpZWxkbmFtZSA9IHBhcnNlZFtpXVsxXVxuICAgICAgICAgIH0gZWxzZSBpZiAoUkVfRklMRU5BTUUudGVzdChwYXJzZWRbaV1bMF0pKSB7XG4gICAgICAgICAgICBmaWxlbmFtZSA9IHBhcnNlZFtpXVsxXVxuICAgICAgICAgICAgaWYgKCFwcmVzZXJ2ZVBhdGgpIHsgZmlsZW5hbWUgPSBiYXNlbmFtZShmaWxlbmFtZSkgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHsgcmV0dXJuIHNraXBQYXJ0KHBhcnQpIH1cblxuICAgICAgaWYgKGhlYWRlclsnY29udGVudC10cmFuc2Zlci1lbmNvZGluZyddKSB7IGVuY29kaW5nID0gaGVhZGVyWydjb250ZW50LXRyYW5zZmVyLWVuY29kaW5nJ11bMF0udG9Mb3dlckNhc2UoKSB9IGVsc2UgeyBlbmNvZGluZyA9ICc3Yml0JyB9XG5cbiAgICAgIGxldCBvbkRhdGEsXG4gICAgICAgIG9uRW5kXG5cbiAgICAgIGlmIChpc1BhcnRBRmlsZShmaWVsZG5hbWUsIGNvbnR5cGUsIGZpbGVuYW1lKSkge1xuICAgICAgICAvLyBmaWxlL2JpbmFyeSBmaWVsZFxuICAgICAgICBpZiAobmZpbGVzID09PSBmaWxlc0xpbWl0KSB7XG4gICAgICAgICAgaWYgKCFib3kuaGl0RmlsZXNMaW1pdCkge1xuICAgICAgICAgICAgYm95LmhpdEZpbGVzTGltaXQgPSB0cnVlXG4gICAgICAgICAgICBib3kuZW1pdCgnZmlsZXNMaW1pdCcpXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBza2lwUGFydChwYXJ0KVxuICAgICAgICB9XG5cbiAgICAgICAgKytuZmlsZXNcblxuICAgICAgICBpZiAoYm95Lmxpc3RlbmVyQ291bnQoJ2ZpbGUnKSA9PT0gMCkge1xuICAgICAgICAgIHNlbGYucGFyc2VyLl9pZ25vcmUoKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgKytuZW5kc1xuICAgICAgICBjb25zdCBmaWxlID0gbmV3IEZpbGVTdHJlYW0oZmlsZU9wdHMpXG4gICAgICAgIGN1ckZpbGUgPSBmaWxlXG4gICAgICAgIGZpbGUub24oJ2VuZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAtLW5lbmRzXG4gICAgICAgICAgc2VsZi5fcGF1c2UgPSBmYWxzZVxuICAgICAgICAgIGNoZWNrRmluaXNoZWQoKVxuICAgICAgICAgIGlmIChzZWxmLl9jYiAmJiAhc2VsZi5fbmVlZERyYWluKSB7XG4gICAgICAgICAgICBjb25zdCBjYiA9IHNlbGYuX2NiXG4gICAgICAgICAgICBzZWxmLl9jYiA9IHVuZGVmaW5lZFxuICAgICAgICAgICAgY2IoKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgZmlsZS5fcmVhZCA9IGZ1bmN0aW9uIChuKSB7XG4gICAgICAgICAgaWYgKCFzZWxmLl9wYXVzZSkgeyByZXR1cm4gfVxuICAgICAgICAgIHNlbGYuX3BhdXNlID0gZmFsc2VcbiAgICAgICAgICBpZiAoc2VsZi5fY2IgJiYgIXNlbGYuX25lZWREcmFpbikge1xuICAgICAgICAgICAgY29uc3QgY2IgPSBzZWxmLl9jYlxuICAgICAgICAgICAgc2VsZi5fY2IgPSB1bmRlZmluZWRcbiAgICAgICAgICAgIGNiKClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYm95LmVtaXQoJ2ZpbGUnLCBmaWVsZG5hbWUsIGZpbGUsIGZpbGVuYW1lLCBlbmNvZGluZywgY29udHlwZSlcblxuICAgICAgICBvbkRhdGEgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgIGlmICgobnNpemUgKz0gZGF0YS5sZW5ndGgpID4gZmlsZVNpemVMaW1pdCkge1xuICAgICAgICAgICAgY29uc3QgZXh0cmFsZW4gPSBmaWxlU2l6ZUxpbWl0IC0gbnNpemUgKyBkYXRhLmxlbmd0aFxuICAgICAgICAgICAgaWYgKGV4dHJhbGVuID4gMCkgeyBmaWxlLnB1c2goZGF0YS5zbGljZSgwLCBleHRyYWxlbikpIH1cbiAgICAgICAgICAgIGZpbGUudHJ1bmNhdGVkID0gdHJ1ZVxuICAgICAgICAgICAgZmlsZS5ieXRlc1JlYWQgPSBmaWxlU2l6ZUxpbWl0XG4gICAgICAgICAgICBwYXJ0LnJlbW92ZUFsbExpc3RlbmVycygnZGF0YScpXG4gICAgICAgICAgICBmaWxlLmVtaXQoJ2xpbWl0JylcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH0gZWxzZSBpZiAoIWZpbGUucHVzaChkYXRhKSkgeyBzZWxmLl9wYXVzZSA9IHRydWUgfVxuXG4gICAgICAgICAgZmlsZS5ieXRlc1JlYWQgPSBuc2l6ZVxuICAgICAgICB9XG5cbiAgICAgICAgb25FbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY3VyRmlsZSA9IHVuZGVmaW5lZFxuICAgICAgICAgIGZpbGUucHVzaChudWxsKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBub24tZmlsZSBmaWVsZFxuICAgICAgICBpZiAobmZpZWxkcyA9PT0gZmllbGRzTGltaXQpIHtcbiAgICAgICAgICBpZiAoIWJveS5oaXRGaWVsZHNMaW1pdCkge1xuICAgICAgICAgICAgYm95LmhpdEZpZWxkc0xpbWl0ID0gdHJ1ZVxuICAgICAgICAgICAgYm95LmVtaXQoJ2ZpZWxkc0xpbWl0JylcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHNraXBQYXJ0KHBhcnQpXG4gICAgICAgIH1cblxuICAgICAgICArK25maWVsZHNcbiAgICAgICAgKytuZW5kc1xuICAgICAgICBsZXQgYnVmZmVyID0gJydcbiAgICAgICAgbGV0IHRydW5jYXRlZCA9IGZhbHNlXG4gICAgICAgIGN1ckZpZWxkID0gcGFydFxuXG4gICAgICAgIG9uRGF0YSA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgaWYgKChuc2l6ZSArPSBkYXRhLmxlbmd0aCkgPiBmaWVsZFNpemVMaW1pdCkge1xuICAgICAgICAgICAgY29uc3QgZXh0cmFsZW4gPSAoZmllbGRTaXplTGltaXQgLSAobnNpemUgLSBkYXRhLmxlbmd0aCkpXG4gICAgICAgICAgICBidWZmZXIgKz0gZGF0YS50b1N0cmluZygnYmluYXJ5JywgMCwgZXh0cmFsZW4pXG4gICAgICAgICAgICB0cnVuY2F0ZWQgPSB0cnVlXG4gICAgICAgICAgICBwYXJ0LnJlbW92ZUFsbExpc3RlbmVycygnZGF0YScpXG4gICAgICAgICAgfSBlbHNlIHsgYnVmZmVyICs9IGRhdGEudG9TdHJpbmcoJ2JpbmFyeScpIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG9uRW5kID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGN1ckZpZWxkID0gdW5kZWZpbmVkXG4gICAgICAgICAgaWYgKGJ1ZmZlci5sZW5ndGgpIHsgYnVmZmVyID0gZGVjb2RlVGV4dChidWZmZXIsICdiaW5hcnknLCBjaGFyc2V0KSB9XG4gICAgICAgICAgYm95LmVtaXQoJ2ZpZWxkJywgZmllbGRuYW1lLCBidWZmZXIsIGZhbHNlLCB0cnVuY2F0ZWQsIGVuY29kaW5nLCBjb250eXBlKVxuICAgICAgICAgIC0tbmVuZHNcbiAgICAgICAgICBjaGVja0ZpbmlzaGVkKClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvKiBBcyBvZiBub2RlQDJlZmU0YWI3NjE2NjYgKHYwLjEwLjI5Ky92MC4xMS4xNCspLCBidXNib3kgaGFkIGJlY29tZVxuICAgICAgICAgYnJva2VuLiBTdHJlYW1zMi9zdHJlYW1zMyBpcyBhIGh1Z2UgYmxhY2sgYm94IG9mIGNvbmZ1c2lvbiwgYnV0XG4gICAgICAgICBzb21laG93IG92ZXJyaWRpbmcgdGhlIHN5bmMgc3RhdGUgc2VlbXMgdG8gZml4IHRoaW5ncyBhZ2FpbiAoYW5kIHN0aWxsXG4gICAgICAgICBzZWVtcyB0byB3b3JrIGZvciBwcmV2aW91cyBub2RlIHZlcnNpb25zKS5cbiAgICAgICovXG4gICAgICBwYXJ0Ll9yZWFkYWJsZVN0YXRlLnN5bmMgPSBmYWxzZVxuXG4gICAgICBwYXJ0Lm9uKCdkYXRhJywgb25EYXRhKVxuICAgICAgcGFydC5vbignZW5kJywgb25FbmQpXG4gICAgfSkub24oJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xuICAgICAgaWYgKGN1ckZpbGUpIHsgY3VyRmlsZS5lbWl0KCdlcnJvcicsIGVycikgfVxuICAgIH0pXG4gIH0pLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICBib3kuZW1pdCgnZXJyb3InLCBlcnIpXG4gIH0pLm9uKCdmaW5pc2gnLCBmdW5jdGlvbiAoKSB7XG4gICAgZmluaXNoZWQgPSB0cnVlXG4gICAgY2hlY2tGaW5pc2hlZCgpXG4gIH0pXG59XG5cbk11bHRpcGFydC5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiAoY2h1bmssIGNiKSB7XG4gIGNvbnN0IHIgPSB0aGlzLnBhcnNlci53cml0ZShjaHVuaylcbiAgaWYgKHIgJiYgIXRoaXMuX3BhdXNlKSB7XG4gICAgY2IoKVxuICB9IGVsc2Uge1xuICAgIHRoaXMuX25lZWREcmFpbiA9ICFyXG4gICAgdGhpcy5fY2IgPSBjYlxuICB9XG59XG5cbk11bHRpcGFydC5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24gKCkge1xuICBjb25zdCBzZWxmID0gdGhpc1xuXG4gIGlmIChzZWxmLnBhcnNlci53cml0YWJsZSkge1xuICAgIHNlbGYucGFyc2VyLmVuZCgpXG4gIH0gZWxzZSBpZiAoIXNlbGYuX2JveS5fZG9uZSkge1xuICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgc2VsZi5fYm95Ll9kb25lID0gdHJ1ZVxuICAgICAgc2VsZi5fYm95LmVtaXQoJ2ZpbmlzaCcpXG4gICAgfSlcbiAgfVxufVxuXG5mdW5jdGlvbiBza2lwUGFydCAocGFydCkge1xuICBwYXJ0LnJlc3VtZSgpXG59XG5cbmZ1bmN0aW9uIEZpbGVTdHJlYW0gKG9wdHMpIHtcbiAgUmVhZGFibGUuY2FsbCh0aGlzLCBvcHRzKVxuXG4gIHRoaXMuYnl0ZXNSZWFkID0gMFxuXG4gIHRoaXMudHJ1bmNhdGVkID0gZmFsc2Vcbn1cblxuaW5oZXJpdHMoRmlsZVN0cmVhbSwgUmVhZGFibGUpXG5cbkZpbGVTdHJlYW0ucHJvdG90eXBlLl9yZWFkID0gZnVuY3Rpb24gKG4pIHt9XG5cbm1vZHVsZS5leHBvcnRzID0gTXVsdGlwYXJ0XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBSRV9QTFVTID0gL1xcKy9nXG5cbmNvbnN0IEhFWCA9IFtcbiAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCxcbiAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCxcbiAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCxcbiAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCxcbiAgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCxcbiAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCxcbiAgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCxcbiAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMFxuXVxuXG5mdW5jdGlvbiBEZWNvZGVyICgpIHtcbiAgdGhpcy5idWZmZXIgPSB1bmRlZmluZWRcbn1cbkRlY29kZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKHN0cikge1xuICAvLyBSZXBsYWNlICcrJyB3aXRoICcgJyBiZWZvcmUgZGVjb2RpbmdcbiAgc3RyID0gc3RyLnJlcGxhY2UoUkVfUExVUywgJyAnKVxuICBsZXQgcmVzID0gJydcbiAgbGV0IGkgPSAwOyBsZXQgcCA9IDA7IGNvbnN0IGxlbiA9IHN0ci5sZW5ndGhcbiAgZm9yICg7IGkgPCBsZW47ICsraSkge1xuICAgIGlmICh0aGlzLmJ1ZmZlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoIUhFWFtzdHIuY2hhckNvZGVBdChpKV0pIHtcbiAgICAgICAgcmVzICs9ICclJyArIHRoaXMuYnVmZmVyXG4gICAgICAgIHRoaXMuYnVmZmVyID0gdW5kZWZpbmVkXG4gICAgICAgIC0taSAvLyByZXRyeSBjaGFyYWN0ZXJcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYnVmZmVyICs9IHN0cltpXVxuICAgICAgICArK3BcbiAgICAgICAgaWYgKHRoaXMuYnVmZmVyLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KHRoaXMuYnVmZmVyLCAxNikpXG4gICAgICAgICAgdGhpcy5idWZmZXIgPSB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc3RyW2ldID09PSAnJScpIHtcbiAgICAgIGlmIChpID4gcCkge1xuICAgICAgICByZXMgKz0gc3RyLnN1YnN0cmluZyhwLCBpKVxuICAgICAgICBwID0gaVxuICAgICAgfVxuICAgICAgdGhpcy5idWZmZXIgPSAnJ1xuICAgICAgKytwXG4gICAgfVxuICB9XG4gIGlmIChwIDwgbGVuICYmIHRoaXMuYnVmZmVyID09PSB1bmRlZmluZWQpIHsgcmVzICs9IHN0ci5zdWJzdHJpbmcocCkgfVxuICByZXR1cm4gcmVzXG59XG5EZWNvZGVyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5idWZmZXIgPSB1bmRlZmluZWRcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBEZWNvZGVyXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBEZWNvZGVyID0gcmVxdWlyZSgnLi4vdXRpbHMvRGVjb2RlcicpXG5jb25zdCBkZWNvZGVUZXh0ID0gcmVxdWlyZSgnLi4vdXRpbHMvZGVjb2RlVGV4dCcpXG5jb25zdCBnZXRMaW1pdCA9IHJlcXVpcmUoJy4uL3V0aWxzL2dldExpbWl0JylcblxuY29uc3QgUkVfQ0hBUlNFVCA9IC9eY2hhcnNldCQvaVxuXG5VcmxFbmNvZGVkLmRldGVjdCA9IC9eYXBwbGljYXRpb25cXC94LXd3dy1mb3JtLXVybGVuY29kZWQvaVxuZnVuY3Rpb24gVXJsRW5jb2RlZCAoYm95LCBjZmcpIHtcbiAgY29uc3QgbGltaXRzID0gY2ZnLmxpbWl0c1xuICBjb25zdCBwYXJzZWRDb25UeXBlID0gY2ZnLnBhcnNlZENvblR5cGVcbiAgdGhpcy5ib3kgPSBib3lcblxuICB0aGlzLmZpZWxkU2l6ZUxpbWl0ID0gZ2V0TGltaXQobGltaXRzLCAnZmllbGRTaXplJywgMSAqIDEwMjQgKiAxMDI0KVxuICB0aGlzLmZpZWxkTmFtZVNpemVMaW1pdCA9IGdldExpbWl0KGxpbWl0cywgJ2ZpZWxkTmFtZVNpemUnLCAxMDApXG4gIHRoaXMuZmllbGRzTGltaXQgPSBnZXRMaW1pdChsaW1pdHMsICdmaWVsZHMnLCBJbmZpbml0eSlcblxuICBsZXQgY2hhcnNldFxuICBmb3IgKHZhciBpID0gMCwgbGVuID0gcGFyc2VkQ29uVHlwZS5sZW5ndGg7IGkgPCBsZW47ICsraSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXZhclxuICAgIGlmIChBcnJheS5pc0FycmF5KHBhcnNlZENvblR5cGVbaV0pICYmXG4gICAgICAgIFJFX0NIQVJTRVQudGVzdChwYXJzZWRDb25UeXBlW2ldWzBdKSkge1xuICAgICAgY2hhcnNldCA9IHBhcnNlZENvblR5cGVbaV1bMV0udG9Mb3dlckNhc2UoKVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoY2hhcnNldCA9PT0gdW5kZWZpbmVkKSB7IGNoYXJzZXQgPSBjZmcuZGVmQ2hhcnNldCB8fCAndXRmOCcgfVxuXG4gIHRoaXMuZGVjb2RlciA9IG5ldyBEZWNvZGVyKClcbiAgdGhpcy5jaGFyc2V0ID0gY2hhcnNldFxuICB0aGlzLl9maWVsZHMgPSAwXG4gIHRoaXMuX3N0YXRlID0gJ2tleSdcbiAgdGhpcy5fY2hlY2tpbmdCeXRlcyA9IHRydWVcbiAgdGhpcy5fYnl0ZXNLZXkgPSAwXG4gIHRoaXMuX2J5dGVzVmFsID0gMFxuICB0aGlzLl9rZXkgPSAnJ1xuICB0aGlzLl92YWwgPSAnJ1xuICB0aGlzLl9rZXlUcnVuYyA9IGZhbHNlXG4gIHRoaXMuX3ZhbFRydW5jID0gZmFsc2VcbiAgdGhpcy5faGl0TGltaXQgPSBmYWxzZVxufVxuXG5VcmxFbmNvZGVkLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChkYXRhLCBjYikge1xuICBpZiAodGhpcy5fZmllbGRzID09PSB0aGlzLmZpZWxkc0xpbWl0KSB7XG4gICAgaWYgKCF0aGlzLmJveS5oaXRGaWVsZHNMaW1pdCkge1xuICAgICAgdGhpcy5ib3kuaGl0RmllbGRzTGltaXQgPSB0cnVlXG4gICAgICB0aGlzLmJveS5lbWl0KCdmaWVsZHNMaW1pdCcpXG4gICAgfVxuICAgIHJldHVybiBjYigpXG4gIH1cblxuICBsZXQgaWR4ZXE7IGxldCBpZHhhbXA7IGxldCBpOyBsZXQgcCA9IDA7IGNvbnN0IGxlbiA9IGRhdGEubGVuZ3RoXG5cbiAgd2hpbGUgKHAgPCBsZW4pIHtcbiAgICBpZiAodGhpcy5fc3RhdGUgPT09ICdrZXknKSB7XG4gICAgICBpZHhlcSA9IGlkeGFtcCA9IHVuZGVmaW5lZFxuICAgICAgZm9yIChpID0gcDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICAgIGlmICghdGhpcy5fY2hlY2tpbmdCeXRlcykgeyArK3AgfVxuICAgICAgICBpZiAoZGF0YVtpXSA9PT0gMHgzRC8qID0gKi8pIHtcbiAgICAgICAgICBpZHhlcSA9IGlcbiAgICAgICAgICBicmVha1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGFbaV0gPT09IDB4MjYvKiAmICovKSB7XG4gICAgICAgICAgaWR4YW1wID0gaVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2NoZWNraW5nQnl0ZXMgJiYgdGhpcy5fYnl0ZXNLZXkgPT09IHRoaXMuZmllbGROYW1lU2l6ZUxpbWl0KSB7XG4gICAgICAgICAgdGhpcy5faGl0TGltaXQgPSB0cnVlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9jaGVja2luZ0J5dGVzKSB7ICsrdGhpcy5fYnl0ZXNLZXkgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaWR4ZXEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBrZXkgd2l0aCBhc3NpZ25tZW50XG4gICAgICAgIGlmIChpZHhlcSA+IHApIHsgdGhpcy5fa2V5ICs9IHRoaXMuZGVjb2Rlci53cml0ZShkYXRhLnRvU3RyaW5nKCdiaW5hcnknLCBwLCBpZHhlcSkpIH1cbiAgICAgICAgdGhpcy5fc3RhdGUgPSAndmFsJ1xuXG4gICAgICAgIHRoaXMuX2hpdExpbWl0ID0gZmFsc2VcbiAgICAgICAgdGhpcy5fY2hlY2tpbmdCeXRlcyA9IHRydWVcbiAgICAgICAgdGhpcy5fdmFsID0gJydcbiAgICAgICAgdGhpcy5fYnl0ZXNWYWwgPSAwXG4gICAgICAgIHRoaXMuX3ZhbFRydW5jID0gZmFsc2VcbiAgICAgICAgdGhpcy5kZWNvZGVyLnJlc2V0KClcblxuICAgICAgICBwID0gaWR4ZXEgKyAxXG4gICAgICB9IGVsc2UgaWYgKGlkeGFtcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIGtleSB3aXRoIG5vIGFzc2lnbm1lbnRcbiAgICAgICAgKyt0aGlzLl9maWVsZHNcbiAgICAgICAgbGV0IGtleTsgY29uc3Qga2V5VHJ1bmMgPSB0aGlzLl9rZXlUcnVuY1xuICAgICAgICBpZiAoaWR4YW1wID4gcCkgeyBrZXkgPSAodGhpcy5fa2V5ICs9IHRoaXMuZGVjb2Rlci53cml0ZShkYXRhLnRvU3RyaW5nKCdiaW5hcnknLCBwLCBpZHhhbXApKSkgfSBlbHNlIHsga2V5ID0gdGhpcy5fa2V5IH1cblxuICAgICAgICB0aGlzLl9oaXRMaW1pdCA9IGZhbHNlXG4gICAgICAgIHRoaXMuX2NoZWNraW5nQnl0ZXMgPSB0cnVlXG4gICAgICAgIHRoaXMuX2tleSA9ICcnXG4gICAgICAgIHRoaXMuX2J5dGVzS2V5ID0gMFxuICAgICAgICB0aGlzLl9rZXlUcnVuYyA9IGZhbHNlXG4gICAgICAgIHRoaXMuZGVjb2Rlci5yZXNldCgpXG5cbiAgICAgICAgaWYgKGtleS5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLmJveS5lbWl0KCdmaWVsZCcsIGRlY29kZVRleHQoa2V5LCAnYmluYXJ5JywgdGhpcy5jaGFyc2V0KSxcbiAgICAgICAgICAgICcnLFxuICAgICAgICAgICAga2V5VHJ1bmMsXG4gICAgICAgICAgICBmYWxzZSlcbiAgICAgICAgfVxuXG4gICAgICAgIHAgPSBpZHhhbXAgKyAxXG4gICAgICAgIGlmICh0aGlzLl9maWVsZHMgPT09IHRoaXMuZmllbGRzTGltaXQpIHsgcmV0dXJuIGNiKCkgfVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9oaXRMaW1pdCkge1xuICAgICAgICAvLyB3ZSBtYXkgbm90IGhhdmUgaGl0IHRoZSBhY3R1YWwgbGltaXQgaWYgdGhlcmUgYXJlIGVuY29kZWQgYnl0ZXMuLi5cbiAgICAgICAgaWYgKGkgPiBwKSB7IHRoaXMuX2tleSArPSB0aGlzLmRlY29kZXIud3JpdGUoZGF0YS50b1N0cmluZygnYmluYXJ5JywgcCwgaSkpIH1cbiAgICAgICAgcCA9IGlcbiAgICAgICAgaWYgKCh0aGlzLl9ieXRlc0tleSA9IHRoaXMuX2tleS5sZW5ndGgpID09PSB0aGlzLmZpZWxkTmFtZVNpemVMaW1pdCkge1xuICAgICAgICAgIC8vIHllcCwgd2UgYWN0dWFsbHkgZGlkIGhpdCB0aGUgbGltaXRcbiAgICAgICAgICB0aGlzLl9jaGVja2luZ0J5dGVzID0gZmFsc2VcbiAgICAgICAgICB0aGlzLl9rZXlUcnVuYyA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHAgPCBsZW4pIHsgdGhpcy5fa2V5ICs9IHRoaXMuZGVjb2Rlci53cml0ZShkYXRhLnRvU3RyaW5nKCdiaW5hcnknLCBwKSkgfVxuICAgICAgICBwID0gbGVuXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlkeGFtcCA9IHVuZGVmaW5lZFxuICAgICAgZm9yIChpID0gcDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICAgIGlmICghdGhpcy5fY2hlY2tpbmdCeXRlcykgeyArK3AgfVxuICAgICAgICBpZiAoZGF0YVtpXSA9PT0gMHgyNi8qICYgKi8pIHtcbiAgICAgICAgICBpZHhhbXAgPSBpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fY2hlY2tpbmdCeXRlcyAmJiB0aGlzLl9ieXRlc1ZhbCA9PT0gdGhpcy5maWVsZFNpemVMaW1pdCkge1xuICAgICAgICAgIHRoaXMuX2hpdExpbWl0ID0gdHJ1ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fY2hlY2tpbmdCeXRlcykgeyArK3RoaXMuX2J5dGVzVmFsIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGlkeGFtcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICsrdGhpcy5fZmllbGRzXG4gICAgICAgIGlmIChpZHhhbXAgPiBwKSB7IHRoaXMuX3ZhbCArPSB0aGlzLmRlY29kZXIud3JpdGUoZGF0YS50b1N0cmluZygnYmluYXJ5JywgcCwgaWR4YW1wKSkgfVxuICAgICAgICB0aGlzLmJveS5lbWl0KCdmaWVsZCcsIGRlY29kZVRleHQodGhpcy5fa2V5LCAnYmluYXJ5JywgdGhpcy5jaGFyc2V0KSxcbiAgICAgICAgICBkZWNvZGVUZXh0KHRoaXMuX3ZhbCwgJ2JpbmFyeScsIHRoaXMuY2hhcnNldCksXG4gICAgICAgICAgdGhpcy5fa2V5VHJ1bmMsXG4gICAgICAgICAgdGhpcy5fdmFsVHJ1bmMpXG4gICAgICAgIHRoaXMuX3N0YXRlID0gJ2tleSdcblxuICAgICAgICB0aGlzLl9oaXRMaW1pdCA9IGZhbHNlXG4gICAgICAgIHRoaXMuX2NoZWNraW5nQnl0ZXMgPSB0cnVlXG4gICAgICAgIHRoaXMuX2tleSA9ICcnXG4gICAgICAgIHRoaXMuX2J5dGVzS2V5ID0gMFxuICAgICAgICB0aGlzLl9rZXlUcnVuYyA9IGZhbHNlXG4gICAgICAgIHRoaXMuZGVjb2Rlci5yZXNldCgpXG5cbiAgICAgICAgcCA9IGlkeGFtcCArIDFcbiAgICAgICAgaWYgKHRoaXMuX2ZpZWxkcyA9PT0gdGhpcy5maWVsZHNMaW1pdCkgeyByZXR1cm4gY2IoKSB9XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2hpdExpbWl0KSB7XG4gICAgICAgIC8vIHdlIG1heSBub3QgaGF2ZSBoaXQgdGhlIGFjdHVhbCBsaW1pdCBpZiB0aGVyZSBhcmUgZW5jb2RlZCBieXRlcy4uLlxuICAgICAgICBpZiAoaSA+IHApIHsgdGhpcy5fdmFsICs9IHRoaXMuZGVjb2Rlci53cml0ZShkYXRhLnRvU3RyaW5nKCdiaW5hcnknLCBwLCBpKSkgfVxuICAgICAgICBwID0gaVxuICAgICAgICBpZiAoKHRoaXMuX3ZhbCA9PT0gJycgJiYgdGhpcy5maWVsZFNpemVMaW1pdCA9PT0gMCkgfHxcbiAgICAgICAgICAgICh0aGlzLl9ieXRlc1ZhbCA9IHRoaXMuX3ZhbC5sZW5ndGgpID09PSB0aGlzLmZpZWxkU2l6ZUxpbWl0KSB7XG4gICAgICAgICAgLy8geWVwLCB3ZSBhY3R1YWxseSBkaWQgaGl0IHRoZSBsaW1pdFxuICAgICAgICAgIHRoaXMuX2NoZWNraW5nQnl0ZXMgPSBmYWxzZVxuICAgICAgICAgIHRoaXMuX3ZhbFRydW5jID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocCA8IGxlbikgeyB0aGlzLl92YWwgKz0gdGhpcy5kZWNvZGVyLndyaXRlKGRhdGEudG9TdHJpbmcoJ2JpbmFyeScsIHApKSB9XG4gICAgICAgIHAgPSBsZW5cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY2IoKVxufVxuXG5VcmxFbmNvZGVkLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLmJveS5fZG9uZSkgeyByZXR1cm4gfVxuXG4gIGlmICh0aGlzLl9zdGF0ZSA9PT0gJ2tleScgJiYgdGhpcy5fa2V5Lmxlbmd0aCA+IDApIHtcbiAgICB0aGlzLmJveS5lbWl0KCdmaWVsZCcsIGRlY29kZVRleHQodGhpcy5fa2V5LCAnYmluYXJ5JywgdGhpcy5jaGFyc2V0KSxcbiAgICAgICcnLFxuICAgICAgdGhpcy5fa2V5VHJ1bmMsXG4gICAgICBmYWxzZSlcbiAgfSBlbHNlIGlmICh0aGlzLl9zdGF0ZSA9PT0gJ3ZhbCcpIHtcbiAgICB0aGlzLmJveS5lbWl0KCdmaWVsZCcsIGRlY29kZVRleHQodGhpcy5fa2V5LCAnYmluYXJ5JywgdGhpcy5jaGFyc2V0KSxcbiAgICAgIGRlY29kZVRleHQodGhpcy5fdmFsLCAnYmluYXJ5JywgdGhpcy5jaGFyc2V0KSxcbiAgICAgIHRoaXMuX2tleVRydW5jLFxuICAgICAgdGhpcy5fdmFsVHJ1bmMpXG4gIH1cbiAgdGhpcy5ib3kuX2RvbmUgPSB0cnVlXG4gIHRoaXMuYm95LmVtaXQoJ2ZpbmlzaCcpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gVXJsRW5jb2RlZFxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgV3JpdGFibGVTdHJlYW0gPSByZXF1aXJlKCdub2RlOnN0cmVhbScpLldyaXRhYmxlXG5jb25zdCB7IGluaGVyaXRzIH0gPSByZXF1aXJlKCdub2RlOnV0aWwnKVxuY29uc3QgRGljZXIgPSByZXF1aXJlKCcuLi9kZXBzL2RpY2VyL2xpYi9EaWNlcicpXG5cbmNvbnN0IE11bHRpcGFydFBhcnNlciA9IHJlcXVpcmUoJy4vdHlwZXMvbXVsdGlwYXJ0JylcbmNvbnN0IFVybGVuY29kZWRQYXJzZXIgPSByZXF1aXJlKCcuL3R5cGVzL3VybGVuY29kZWQnKVxuY29uc3QgcGFyc2VQYXJhbXMgPSByZXF1aXJlKCcuL3V0aWxzL3BhcnNlUGFyYW1zJylcblxuZnVuY3Rpb24gQnVzYm95IChvcHRzKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBCdXNib3kpKSB7IHJldHVybiBuZXcgQnVzYm95KG9wdHMpIH1cblxuICBpZiAodHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQnVzYm95IGV4cGVjdGVkIGFuIG9wdGlvbnMtT2JqZWN0LicpXG4gIH1cbiAgaWYgKHR5cGVvZiBvcHRzLmhlYWRlcnMgIT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQnVzYm95IGV4cGVjdGVkIGFuIG9wdGlvbnMtT2JqZWN0IHdpdGggaGVhZGVycy1hdHRyaWJ1dGUuJylcbiAgfVxuICBpZiAodHlwZW9mIG9wdHMuaGVhZGVyc1snY29udGVudC10eXBlJ10gIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTWlzc2luZyBDb250ZW50LVR5cGUtaGVhZGVyLicpXG4gIH1cblxuICBjb25zdCB7XG4gICAgaGVhZGVycyxcbiAgICAuLi5zdHJlYW1PcHRpb25zXG4gIH0gPSBvcHRzXG5cbiAgdGhpcy5vcHRzID0ge1xuICAgIGF1dG9EZXN0cm95OiBmYWxzZSxcbiAgICAuLi5zdHJlYW1PcHRpb25zXG4gIH1cbiAgV3JpdGFibGVTdHJlYW0uY2FsbCh0aGlzLCB0aGlzLm9wdHMpXG5cbiAgdGhpcy5fZG9uZSA9IGZhbHNlXG4gIHRoaXMuX3BhcnNlciA9IHRoaXMuZ2V0UGFyc2VyQnlIZWFkZXJzKGhlYWRlcnMpXG4gIHRoaXMuX2ZpbmlzaGVkID0gZmFsc2Vcbn1cbmluaGVyaXRzKEJ1c2JveSwgV3JpdGFibGVTdHJlYW0pXG5cbkJ1c2JveS5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uIChldikge1xuICBpZiAoZXYgPT09ICdmaW5pc2gnKSB7XG4gICAgaWYgKCF0aGlzLl9kb25lKSB7XG4gICAgICB0aGlzLl9wYXJzZXI/LmVuZCgpXG4gICAgICByZXR1cm5cbiAgICB9IGVsc2UgaWYgKHRoaXMuX2ZpbmlzaGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdGhpcy5fZmluaXNoZWQgPSB0cnVlXG4gIH1cbiAgV3JpdGFibGVTdHJlYW0ucHJvdG90eXBlLmVtaXQuYXBwbHkodGhpcywgYXJndW1lbnRzKVxufVxuXG5CdXNib3kucHJvdG90eXBlLmdldFBhcnNlckJ5SGVhZGVycyA9IGZ1bmN0aW9uIChoZWFkZXJzKSB7XG4gIGNvbnN0IHBhcnNlZCA9IHBhcnNlUGFyYW1zKGhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddKVxuXG4gIGNvbnN0IGNmZyA9IHtcbiAgICBkZWZDaGFyc2V0OiB0aGlzLm9wdHMuZGVmQ2hhcnNldCxcbiAgICBmaWxlSHdtOiB0aGlzLm9wdHMuZmlsZUh3bSxcbiAgICBoZWFkZXJzLFxuICAgIGhpZ2hXYXRlck1hcms6IHRoaXMub3B0cy5oaWdoV2F0ZXJNYXJrLFxuICAgIGlzUGFydEFGaWxlOiB0aGlzLm9wdHMuaXNQYXJ0QUZpbGUsXG4gICAgbGltaXRzOiB0aGlzLm9wdHMubGltaXRzLFxuICAgIHBhcnNlZENvblR5cGU6IHBhcnNlZCxcbiAgICBwcmVzZXJ2ZVBhdGg6IHRoaXMub3B0cy5wcmVzZXJ2ZVBhdGhcbiAgfVxuXG4gIGlmIChNdWx0aXBhcnRQYXJzZXIuZGV0ZWN0LnRlc3QocGFyc2VkWzBdKSkge1xuICAgIHJldHVybiBuZXcgTXVsdGlwYXJ0UGFyc2VyKHRoaXMsIGNmZylcbiAgfVxuICBpZiAoVXJsZW5jb2RlZFBhcnNlci5kZXRlY3QudGVzdChwYXJzZWRbMF0pKSB7XG4gICAgcmV0dXJuIG5ldyBVcmxlbmNvZGVkUGFyc2VyKHRoaXMsIGNmZylcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIENvbnRlbnQtVHlwZS4nKVxufVxuXG5CdXNib3kucHJvdG90eXBlLl93cml0ZSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIHRoaXMuX3BhcnNlci53cml0ZShjaHVuaywgY2IpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gQnVzYm95XG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gQnVzYm95XG5tb2R1bGUuZXhwb3J0cy5CdXNib3kgPSBCdXNib3lcblxubW9kdWxlLmV4cG9ydHMuRGljZXIgPSBEaWNlclxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBNZXNzYWdlQ2hhbm5lbCwgcmVjZWl2ZU1lc3NhZ2VPblBvcnQgfSA9IHJlcXVpcmUoJ3dvcmtlcl90aHJlYWRzJylcblxuY29uc3QgY29yc1NhZmVMaXN0ZWRNZXRob2RzID0gWydHRVQnLCAnSEVBRCcsICdQT1NUJ11cbmNvbnN0IGNvcnNTYWZlTGlzdGVkTWV0aG9kc1NldCA9IG5ldyBTZXQoY29yc1NhZmVMaXN0ZWRNZXRob2RzKVxuXG5jb25zdCBudWxsQm9keVN0YXR1cyA9IFsxMDEsIDIwNCwgMjA1LCAzMDRdXG5cbmNvbnN0IHJlZGlyZWN0U3RhdHVzID0gWzMwMSwgMzAyLCAzMDMsIDMwNywgMzA4XVxuY29uc3QgcmVkaXJlY3RTdGF0dXNTZXQgPSBuZXcgU2V0KHJlZGlyZWN0U3RhdHVzKVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYmxvY2stYmFkLXBvcnRcbmNvbnN0IGJhZFBvcnRzID0gW1xuICAnMScsICc3JywgJzknLCAnMTEnLCAnMTMnLCAnMTUnLCAnMTcnLCAnMTknLCAnMjAnLCAnMjEnLCAnMjInLCAnMjMnLCAnMjUnLCAnMzcnLCAnNDInLCAnNDMnLCAnNTMnLCAnNjknLCAnNzcnLCAnNzknLFxuICAnODcnLCAnOTUnLCAnMTAxJywgJzEwMicsICcxMDMnLCAnMTA0JywgJzEwOScsICcxMTAnLCAnMTExJywgJzExMycsICcxMTUnLCAnMTE3JywgJzExOScsICcxMjMnLCAnMTM1JywgJzEzNycsXG4gICcxMzknLCAnMTQzJywgJzE2MScsICcxNzknLCAnMzg5JywgJzQyNycsICc0NjUnLCAnNTEyJywgJzUxMycsICc1MTQnLCAnNTE1JywgJzUyNicsICc1MzAnLCAnNTMxJywgJzUzMicsXG4gICc1NDAnLCAnNTQ4JywgJzU1NCcsICc1NTYnLCAnNTYzJywgJzU4NycsICc2MDEnLCAnNjM2JywgJzk4OScsICc5OTAnLCAnOTkzJywgJzk5NScsICcxNzE5JywgJzE3MjAnLCAnMTcyMycsXG4gICcyMDQ5JywgJzM2NTknLCAnNDA0NScsICc1MDYwJywgJzUwNjEnLCAnNjAwMCcsICc2NTY2JywgJzY2NjUnLCAnNjY2NicsICc2NjY3JywgJzY2NjgnLCAnNjY2OScsICc2Njk3JyxcbiAgJzEwMDgwJ1xuXVxuXG5jb25zdCBiYWRQb3J0c1NldCA9IG5ldyBTZXQoYmFkUG9ydHMpXG5cbi8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtcmVmZXJyZXItcG9saWN5LyNyZWZlcnJlci1wb2xpY2llc1xuY29uc3QgcmVmZXJyZXJQb2xpY3kgPSBbXG4gICcnLFxuICAnbm8tcmVmZXJyZXInLFxuICAnbm8tcmVmZXJyZXItd2hlbi1kb3duZ3JhZGUnLFxuICAnc2FtZS1vcmlnaW4nLFxuICAnb3JpZ2luJyxcbiAgJ3N0cmljdC1vcmlnaW4nLFxuICAnb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luJyxcbiAgJ3N0cmljdC1vcmlnaW4td2hlbi1jcm9zcy1vcmlnaW4nLFxuICAndW5zYWZlLXVybCdcbl1cbmNvbnN0IHJlZmVycmVyUG9saWN5U2V0ID0gbmV3IFNldChyZWZlcnJlclBvbGljeSlcblxuY29uc3QgcmVxdWVzdFJlZGlyZWN0ID0gWydmb2xsb3cnLCAnbWFudWFsJywgJ2Vycm9yJ11cblxuY29uc3Qgc2FmZU1ldGhvZHMgPSBbJ0dFVCcsICdIRUFEJywgJ09QVElPTlMnLCAnVFJBQ0UnXVxuY29uc3Qgc2FmZU1ldGhvZHNTZXQgPSBuZXcgU2V0KHNhZmVNZXRob2RzKVxuXG5jb25zdCByZXF1ZXN0TW9kZSA9IFsnbmF2aWdhdGUnLCAnc2FtZS1vcmlnaW4nLCAnbm8tY29ycycsICdjb3JzJ11cblxuY29uc3QgcmVxdWVzdENyZWRlbnRpYWxzID0gWydvbWl0JywgJ3NhbWUtb3JpZ2luJywgJ2luY2x1ZGUnXVxuXG5jb25zdCByZXF1ZXN0Q2FjaGUgPSBbXG4gICdkZWZhdWx0JyxcbiAgJ25vLXN0b3JlJyxcbiAgJ3JlbG9hZCcsXG4gICduby1jYWNoZScsXG4gICdmb3JjZS1jYWNoZScsXG4gICdvbmx5LWlmLWNhY2hlZCdcbl1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3QtYm9keS1oZWFkZXItbmFtZVxuY29uc3QgcmVxdWVzdEJvZHlIZWFkZXIgPSBbXG4gICdjb250ZW50LWVuY29kaW5nJyxcbiAgJ2NvbnRlbnQtbGFuZ3VhZ2UnLFxuICAnY29udGVudC1sb2NhdGlvbicsXG4gICdjb250ZW50LXR5cGUnLFxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzIwMjFcbiAgLy8gJ0NvbnRlbnQtTGVuZ3RoJyBpcyBhIGZvcmJpZGRlbiBoZWFkZXIgbmFtZSwgd2hpY2ggaXMgdHlwaWNhbGx5XG4gIC8vIHJlbW92ZWQgaW4gdGhlIEhlYWRlcnMgaW1wbGVtZW50YXRpb24uIEhvd2V2ZXIsIHVuZGljaSBkb2Vzbid0XG4gIC8vIGZpbHRlciBvdXQgaGVhZGVycywgc28gd2UgYWRkIGl0IGhlcmUuXG4gICdjb250ZW50LWxlbmd0aCdcbl1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2VudW1kZWYtcmVxdWVzdGR1cGxleFxuY29uc3QgcmVxdWVzdER1cGxleCA9IFtcbiAgJ2hhbGYnXG5dXG5cbi8vIGh0dHA6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2ZvcmJpZGRlbi1tZXRob2RcbmNvbnN0IGZvcmJpZGRlbk1ldGhvZHMgPSBbJ0NPTk5FQ1QnLCAnVFJBQ0UnLCAnVFJBQ0snXVxuY29uc3QgZm9yYmlkZGVuTWV0aG9kc1NldCA9IG5ldyBTZXQoZm9yYmlkZGVuTWV0aG9kcylcblxuY29uc3Qgc3VicmVzb3VyY2UgPSBbXG4gICdhdWRpbycsXG4gICdhdWRpb3dvcmtsZXQnLFxuICAnZm9udCcsXG4gICdpbWFnZScsXG4gICdtYW5pZmVzdCcsXG4gICdwYWludHdvcmtsZXQnLFxuICAnc2NyaXB0JyxcbiAgJ3N0eWxlJyxcbiAgJ3RyYWNrJyxcbiAgJ3ZpZGVvJyxcbiAgJ3hzbHQnLFxuICAnJ1xuXVxuY29uc3Qgc3VicmVzb3VyY2VTZXQgPSBuZXcgU2V0KHN1YnJlc291cmNlKVxuXG4vKiogQHR5cGUge2dsb2JhbFRoaXNbJ0RPTUV4Y2VwdGlvbiddfSAqL1xuY29uc3QgRE9NRXhjZXB0aW9uID0gZ2xvYmFsVGhpcy5ET01FeGNlcHRpb24gPz8gKCgpID0+IHtcbiAgLy8gRE9NRXhjZXB0aW9uIHdhcyBvbmx5IG1hZGUgYSBnbG9iYWwgaW4gTm9kZSB2MTcuMC4wLFxuICAvLyBidXQgZmV0Y2ggc3VwcG9ydHMgPj0gdjE2LjguXG4gIHRyeSB7XG4gICAgYXRvYignficpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoZXJyKS5jb25zdHJ1Y3RvclxuICB9XG59KSgpXG5cbmxldCBjaGFubmVsXG5cbi8qKiBAdHlwZSB7Z2xvYmFsVGhpc1snc3RydWN0dXJlZENsb25lJ119ICovXG5jb25zdCBzdHJ1Y3R1cmVkQ2xvbmUgPVxuICBnbG9iYWxUaGlzLnN0cnVjdHVyZWRDbG9uZSA/P1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvYmxvYi9iMjdhZTI0ZGNjNDI1MWJhZDcyNmQ5ZDg0YmFmNjc4ZDFmNzA3ZmVkL2xpYi9pbnRlcm5hbC9zdHJ1Y3R1cmVkX2Nsb25lLmpzXG4gIC8vIHN0cnVjdHVyZWRDbG9uZSB3YXMgYWRkZWQgaW4gdjE3LjAuMCwgYnV0IGZldGNoIHN1cHBvcnRzIHYxNi44XG4gIGZ1bmN0aW9uIHN0cnVjdHVyZWRDbG9uZSAodmFsdWUsIG9wdGlvbnMgPSB1bmRlZmluZWQpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbWlzc2luZyBhcmd1bWVudCcpXG4gICAgfVxuXG4gICAgaWYgKCFjaGFubmVsKSB7XG4gICAgICBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKClcbiAgICB9XG4gICAgY2hhbm5lbC5wb3J0MS51bnJlZigpXG4gICAgY2hhbm5lbC5wb3J0Mi51bnJlZigpXG4gICAgY2hhbm5lbC5wb3J0MS5wb3N0TWVzc2FnZSh2YWx1ZSwgb3B0aW9ucz8udHJhbnNmZXIpXG4gICAgcmV0dXJuIHJlY2VpdmVNZXNzYWdlT25Qb3J0KGNoYW5uZWwucG9ydDIpLm1lc3NhZ2VcbiAgfVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgRE9NRXhjZXB0aW9uLFxuICBzdHJ1Y3R1cmVkQ2xvbmUsXG4gIHN1YnJlc291cmNlLFxuICBmb3JiaWRkZW5NZXRob2RzLFxuICByZXF1ZXN0Qm9keUhlYWRlcixcbiAgcmVmZXJyZXJQb2xpY3ksXG4gIHJlcXVlc3RSZWRpcmVjdCxcbiAgcmVxdWVzdE1vZGUsXG4gIHJlcXVlc3RDcmVkZW50aWFscyxcbiAgcmVxdWVzdENhY2hlLFxuICByZWRpcmVjdFN0YXR1cyxcbiAgY29yc1NhZmVMaXN0ZWRNZXRob2RzLFxuICBudWxsQm9keVN0YXR1cyxcbiAgc2FmZU1ldGhvZHMsXG4gIGJhZFBvcnRzLFxuICByZXF1ZXN0RHVwbGV4LFxuICBzdWJyZXNvdXJjZVNldCxcbiAgYmFkUG9ydHNTZXQsXG4gIHJlZGlyZWN0U3RhdHVzU2V0LFxuICBjb3JzU2FmZUxpc3RlZE1ldGhvZHNTZXQsXG4gIHNhZmVNZXRob2RzU2V0LFxuICBmb3JiaWRkZW5NZXRob2RzU2V0LFxuICByZWZlcnJlclBvbGljeVNldFxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuLy8gSW4gY2FzZSBvZiBicmVha2luZyBjaGFuZ2VzLCBpbmNyZWFzZSB0aGUgdmVyc2lvblxuLy8gbnVtYmVyIHRvIGF2b2lkIGNvbmZsaWN0cy5cbmNvbnN0IGdsb2JhbE9yaWdpbiA9IFN5bWJvbC5mb3IoJ3VuZGljaS5nbG9iYWxPcmlnaW4uMScpXG5cbmZ1bmN0aW9uIGdldEdsb2JhbE9yaWdpbiAoKSB7XG4gIHJldHVybiBnbG9iYWxUaGlzW2dsb2JhbE9yaWdpbl1cbn1cblxuZnVuY3Rpb24gc2V0R2xvYmFsT3JpZ2luIChuZXdPcmlnaW4pIHtcbiAgaWYgKG5ld09yaWdpbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGdsb2JhbFRoaXMsIGdsb2JhbE9yaWdpbiwge1xuICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlXG4gICAgfSlcblxuICAgIHJldHVyblxuICB9XG5cbiAgY29uc3QgcGFyc2VkVVJMID0gbmV3IFVSTChuZXdPcmlnaW4pXG5cbiAgaWYgKHBhcnNlZFVSTC5wcm90b2NvbCAhPT0gJ2h0dHA6JyAmJiBwYXJzZWRVUkwucHJvdG9jb2wgIT09ICdodHRwczonKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgT25seSBodHRwICYgaHR0cHMgdXJscyBhcmUgYWxsb3dlZCwgcmVjZWl2ZWQgJHtwYXJzZWRVUkwucHJvdG9jb2x9YClcbiAgfVxuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnbG9iYWxUaGlzLCBnbG9iYWxPcmlnaW4sIHtcbiAgICB2YWx1ZTogcGFyc2VkVVJMLFxuICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGNvbmZpZ3VyYWJsZTogZmFsc2VcbiAgfSlcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldEdsb2JhbE9yaWdpbixcbiAgc2V0R2xvYmFsT3JpZ2luXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHJlZGlyZWN0U3RhdHVzU2V0LCByZWZlcnJlclBvbGljeVNldDogcmVmZXJyZXJQb2xpY3lUb2tlbnMsIGJhZFBvcnRzU2V0IH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7IGdldEdsb2JhbE9yaWdpbiB9ID0gcmVxdWlyZSgnLi9nbG9iYWwnKVxuY29uc3QgeyBwZXJmb3JtYW5jZSB9ID0gcmVxdWlyZSgncGVyZl9ob29rcycpXG5jb25zdCB7IGlzQmxvYkxpa2UsIHRvVVNWU3RyaW5nLCBSZWFkYWJsZVN0cmVhbUZyb20gfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBpc1VpbnQ4QXJyYXkgfSA9IHJlcXVpcmUoJ3V0aWwvdHlwZXMnKVxuXG5sZXQgc3VwcG9ydGVkSGFzaGVzID0gW11cblxuLy8gaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9jcnlwdG8uaHRtbCNkZXRlcm1pbmluZy1pZi1jcnlwdG8tc3VwcG9ydC1pcy11bmF2YWlsYWJsZVxuLyoqIEB0eXBlIHtpbXBvcnQoJ2NyeXB0bycpfHVuZGVmaW5lZH0gKi9cbmxldCBjcnlwdG9cblxudHJ5IHtcbiAgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJylcbiAgY29uc3QgcG9zc2libGVSZWxldmFudEhhc2hlcyA9IFsnc2hhMjU2JywgJ3NoYTM4NCcsICdzaGE1MTInXVxuICBzdXBwb3J0ZWRIYXNoZXMgPSBjcnlwdG8uZ2V0SGFzaGVzKCkuZmlsdGVyKChoYXNoKSA9PiBwb3NzaWJsZVJlbGV2YW50SGFzaGVzLmluY2x1ZGVzKGhhc2gpKVxuLyogYzggaWdub3JlIG5leHQgMyAqL1xufSBjYXRjaCB7XG59XG5cbmZ1bmN0aW9uIHJlc3BvbnNlVVJMIChyZXNwb25zZSkge1xuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVzcG9uc2VzXG4gIC8vIEEgcmVzcG9uc2UgaGFzIGFuIGFzc29jaWF0ZWQgVVJMLiBJdCBpcyBhIHBvaW50ZXIgdG8gdGhlIGxhc3QgVVJMXG4gIC8vIGluIHJlc3BvbnNl4oCZcyBVUkwgbGlzdCBhbmQgbnVsbCBpZiByZXNwb25zZeKAmXMgVVJMIGxpc3QgaXMgZW1wdHkuXG4gIGNvbnN0IHVybExpc3QgPSByZXNwb25zZS51cmxMaXN0XG4gIGNvbnN0IGxlbmd0aCA9IHVybExpc3QubGVuZ3RoXG4gIHJldHVybiBsZW5ndGggPT09IDAgPyBudWxsIDogdXJsTGlzdFtsZW5ndGggLSAxXS50b1N0cmluZygpXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LXJlc3BvbnNlLWxvY2F0aW9uLXVybFxuZnVuY3Rpb24gcmVzcG9uc2VMb2NhdGlvblVSTCAocmVzcG9uc2UsIHJlcXVlc3RGcmFnbWVudCkge1xuICAvLyAxLiBJZiByZXNwb25zZeKAmXMgc3RhdHVzIGlzIG5vdCBhIHJlZGlyZWN0IHN0YXR1cywgdGhlbiByZXR1cm4gbnVsbC5cbiAgaWYgKCFyZWRpcmVjdFN0YXR1c1NldC5oYXMocmVzcG9uc2Uuc3RhdHVzKSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvLyAyLiBMZXQgbG9jYXRpb24gYmUgdGhlIHJlc3VsdCBvZiBleHRyYWN0aW5nIGhlYWRlciBsaXN0IHZhbHVlcyBnaXZlblxuICAvLyBgTG9jYXRpb25gIGFuZCByZXNwb25zZeKAmXMgaGVhZGVyIGxpc3QuXG4gIGxldCBsb2NhdGlvbiA9IHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnbG9jYXRpb24nKVxuXG4gIC8vIDMuIElmIGxvY2F0aW9uIGlzIGEgaGVhZGVyIHZhbHVlLCB0aGVuIHNldCBsb2NhdGlvbiB0byB0aGUgcmVzdWx0IG9mXG4gIC8vICAgIHBhcnNpbmcgbG9jYXRpb24gd2l0aCByZXNwb25zZeKAmXMgVVJMLlxuICBpZiAobG9jYXRpb24gIT09IG51bGwgJiYgaXNWYWxpZEhlYWRlclZhbHVlKGxvY2F0aW9uKSkge1xuICAgIGxvY2F0aW9uID0gbmV3IFVSTChsb2NhdGlvbiwgcmVzcG9uc2VVUkwocmVzcG9uc2UpKVxuICB9XG5cbiAgLy8gNC4gSWYgbG9jYXRpb24gaXMgYSBVUkwgd2hvc2UgZnJhZ21lbnQgaXMgbnVsbCwgdGhlbiBzZXQgbG9jYXRpb27igJlzXG4gIC8vIGZyYWdtZW50IHRvIHJlcXVlc3RGcmFnbWVudC5cbiAgaWYgKGxvY2F0aW9uICYmICFsb2NhdGlvbi5oYXNoKSB7XG4gICAgbG9jYXRpb24uaGFzaCA9IHJlcXVlc3RGcmFnbWVudFxuICB9XG5cbiAgLy8gNS4gUmV0dXJuIGxvY2F0aW9uLlxuICByZXR1cm4gbG9jYXRpb25cbn1cblxuLyoqIEByZXR1cm5zIHtVUkx9ICovXG5mdW5jdGlvbiByZXF1ZXN0Q3VycmVudFVSTCAocmVxdWVzdCkge1xuICByZXR1cm4gcmVxdWVzdC51cmxMaXN0W3JlcXVlc3QudXJsTGlzdC5sZW5ndGggLSAxXVxufVxuXG5mdW5jdGlvbiByZXF1ZXN0QmFkUG9ydCAocmVxdWVzdCkge1xuICAvLyAxLiBMZXQgdXJsIGJlIHJlcXVlc3TigJlzIGN1cnJlbnQgVVJMLlxuICBjb25zdCB1cmwgPSByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KVxuXG4gIC8vIDIuIElmIHVybOKAmXMgc2NoZW1lIGlzIGFuIEhUVFAoUykgc2NoZW1lIGFuZCB1cmzigJlzIHBvcnQgaXMgYSBiYWQgcG9ydCxcbiAgLy8gdGhlbiByZXR1cm4gYmxvY2tlZC5cbiAgaWYgKHVybElzSHR0cEh0dHBzU2NoZW1lKHVybCkgJiYgYmFkUG9ydHNTZXQuaGFzKHVybC5wb3J0KSkge1xuICAgIHJldHVybiAnYmxvY2tlZCdcbiAgfVxuXG4gIC8vIDMuIFJldHVybiBhbGxvd2VkLlxuICByZXR1cm4gJ2FsbG93ZWQnXG59XG5cbmZ1bmN0aW9uIGlzRXJyb3JMaWtlIChvYmplY3QpIHtcbiAgcmV0dXJuIG9iamVjdCBpbnN0YW5jZW9mIEVycm9yIHx8IChcbiAgICBvYmplY3Q/LmNvbnN0cnVjdG9yPy5uYW1lID09PSAnRXJyb3InIHx8XG4gICAgb2JqZWN0Py5jb25zdHJ1Y3Rvcj8ubmFtZSA9PT0gJ0RPTUV4Y2VwdGlvbidcbiAgKVxufVxuXG4vLyBDaGVjayB3aGV0aGVyIHxzdGF0dXNUZXh0fCBpcyBhIEJ5dGVTdHJpbmcgYW5kXG4vLyBtYXRjaGVzIHRoZSBSZWFzb24tUGhyYXNlIHRva2VuIHByb2R1Y3Rpb24uXG4vLyBSRkMgMjYxNjogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzI2MTZcbi8vIFJGQyA3MjMwOiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMFxuLy8gXCJyZWFzb24tcGhyYXNlID0gKiggSFRBQiAvIFNQIC8gVkNIQVIgLyBvYnMtdGV4dCApXCJcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9jaHJvbWl1bS9jaHJvbWl1bS9ibG9iLzk0LjAuNDYwNC4xL3RoaXJkX3BhcnR5L2JsaW5rL3JlbmRlcmVyL2NvcmUvZmV0Y2gvcmVzcG9uc2UuY2MjTDExNlxuZnVuY3Rpb24gaXNWYWxpZFJlYXNvblBocmFzZSAoc3RhdHVzVGV4dCkge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHN0YXR1c1RleHQubGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCBjID0gc3RhdHVzVGV4dC5jaGFyQ29kZUF0KGkpXG4gICAgaWYgKFxuICAgICAgIShcbiAgICAgICAgKFxuICAgICAgICAgIGMgPT09IDB4MDkgfHwgLy8gSFRBQlxuICAgICAgICAgIChjID49IDB4MjAgJiYgYyA8PSAweDdlKSB8fCAvLyBTUCAvIFZDSEFSXG4gICAgICAgICAgKGMgPj0gMHg4MCAmJiBjIDw9IDB4ZmYpXG4gICAgICAgICkgLy8gb2JzLXRleHRcbiAgICAgIClcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjIuNlxuICogQHBhcmFtIHtudW1iZXJ9IGNcbiAqL1xuZnVuY3Rpb24gaXNUb2tlbkNoYXJDb2RlIChjKSB7XG4gIHN3aXRjaCAoYykge1xuICAgIGNhc2UgMHgyMjpcbiAgICBjYXNlIDB4Mjg6XG4gICAgY2FzZSAweDI5OlxuICAgIGNhc2UgMHgyYzpcbiAgICBjYXNlIDB4MmY6XG4gICAgY2FzZSAweDNhOlxuICAgIGNhc2UgMHgzYjpcbiAgICBjYXNlIDB4M2M6XG4gICAgY2FzZSAweDNkOlxuICAgIGNhc2UgMHgzZTpcbiAgICBjYXNlIDB4M2Y6XG4gICAgY2FzZSAweDQwOlxuICAgIGNhc2UgMHg1YjpcbiAgICBjYXNlIDB4NWM6XG4gICAgY2FzZSAweDVkOlxuICAgIGNhc2UgMHg3YjpcbiAgICBjYXNlIDB4N2Q6XG4gICAgICAvLyBEUVVPVEUgYW5kIFwiKCksLzo7PD0+P0BbXFxde31cIlxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIFZDSEFSICV4MjEtN0VcbiAgICAgIHJldHVybiBjID49IDB4MjEgJiYgYyA8PSAweDdlXG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gY2hhcmFjdGVyc1xuICovXG5mdW5jdGlvbiBpc1ZhbGlkSFRUUFRva2VuIChjaGFyYWN0ZXJzKSB7XG4gIGlmIChjaGFyYWN0ZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY2hhcmFjdGVycy5sZW5ndGg7ICsraSkge1xuICAgIGlmICghaXNUb2tlbkNoYXJDb2RlKGNoYXJhY3RlcnMuY2hhckNvZGVBdChpKSkpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2hlYWRlci1uYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gcG90ZW50aWFsVmFsdWVcbiAqL1xuZnVuY3Rpb24gaXNWYWxpZEhlYWRlck5hbWUgKHBvdGVudGlhbFZhbHVlKSB7XG4gIHJldHVybiBpc1ZhbGlkSFRUUFRva2VuKHBvdGVudGlhbFZhbHVlKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2hlYWRlci12YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IHBvdGVudGlhbFZhbHVlXG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRIZWFkZXJWYWx1ZSAocG90ZW50aWFsVmFsdWUpIHtcbiAgLy8gLSBIYXMgbm8gbGVhZGluZyBvciB0cmFpbGluZyBIVFRQIHRhYiBvciBzcGFjZSBieXRlcy5cbiAgLy8gLSBDb250YWlucyBubyAweDAwIChOVUwpIG9yIEhUVFAgbmV3bGluZSBieXRlcy5cbiAgaWYgKFxuICAgIHBvdGVudGlhbFZhbHVlLnN0YXJ0c1dpdGgoJ1xcdCcpIHx8XG4gICAgcG90ZW50aWFsVmFsdWUuc3RhcnRzV2l0aCgnICcpIHx8XG4gICAgcG90ZW50aWFsVmFsdWUuZW5kc1dpdGgoJ1xcdCcpIHx8XG4gICAgcG90ZW50aWFsVmFsdWUuZW5kc1dpdGgoJyAnKVxuICApIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlmIChcbiAgICBwb3RlbnRpYWxWYWx1ZS5pbmNsdWRlcygnXFwwJykgfHxcbiAgICBwb3RlbnRpYWxWYWx1ZS5pbmNsdWRlcygnXFxyJykgfHxcbiAgICBwb3RlbnRpYWxWYWx1ZS5pbmNsdWRlcygnXFxuJylcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLXJlZmVycmVyLXBvbGljeS8jc2V0LXJlcXVlc3RzLXJlZmVycmVyLXBvbGljeS1vbi1yZWRpcmVjdFxuZnVuY3Rpb24gc2V0UmVxdWVzdFJlZmVycmVyUG9saWN5T25SZWRpcmVjdCAocmVxdWVzdCwgYWN0dWFsUmVzcG9uc2UpIHtcbiAgLy8gIEdpdmVuIGEgcmVxdWVzdCByZXF1ZXN0IGFuZCBhIHJlc3BvbnNlIGFjdHVhbFJlc3BvbnNlLCB0aGlzIGFsZ29yaXRobVxuICAvLyAgdXBkYXRlcyByZXF1ZXN04oCZcyByZWZlcnJlciBwb2xpY3kgYWNjb3JkaW5nIHRvIHRoZSBSZWZlcnJlci1Qb2xpY3lcbiAgLy8gIGhlYWRlciAoaWYgYW55KSBpbiBhY3R1YWxSZXNwb25zZS5cblxuICAvLyAxLiBMZXQgcG9saWN5IGJlIHRoZSByZXN1bHQgb2YgZXhlY3V0aW5nIMKnIDguMSBQYXJzZSBhIHJlZmVycmVyIHBvbGljeVxuICAvLyBmcm9tIGEgUmVmZXJyZXItUG9saWN5IGhlYWRlciBvbiBhY3R1YWxSZXNwb25zZS5cblxuICAvLyA4LjEgUGFyc2UgYSByZWZlcnJlciBwb2xpY3kgZnJvbSBhIFJlZmVycmVyLVBvbGljeSBoZWFkZXJcbiAgLy8gMS4gTGV0IHBvbGljeS10b2tlbnMgYmUgdGhlIHJlc3VsdCBvZiBleHRyYWN0aW5nIGhlYWRlciBsaXN0IHZhbHVlcyBnaXZlbiBgUmVmZXJyZXItUG9saWN5YCBhbmQgcmVzcG9uc2XigJlzIGhlYWRlciBsaXN0LlxuICBjb25zdCB7IGhlYWRlcnNMaXN0IH0gPSBhY3R1YWxSZXNwb25zZVxuICAvLyAyLiBMZXQgcG9saWN5IGJlIHRoZSBlbXB0eSBzdHJpbmcuXG4gIC8vIDMuIEZvciBlYWNoIHRva2VuIGluIHBvbGljeS10b2tlbnMsIGlmIHRva2VuIGlzIGEgcmVmZXJyZXIgcG9saWN5IGFuZCB0b2tlbiBpcyBub3QgdGhlIGVtcHR5IHN0cmluZywgdGhlbiBzZXQgcG9saWN5IHRvIHRva2VuLlxuICAvLyA0LiBSZXR1cm4gcG9saWN5LlxuICBjb25zdCBwb2xpY3lIZWFkZXIgPSAoaGVhZGVyc0xpc3QuZ2V0KCdyZWZlcnJlci1wb2xpY3knKSA/PyAnJykuc3BsaXQoJywnKVxuXG4gIC8vIE5vdGU6IEFzIHRoZSByZWZlcnJlci1wb2xpY3kgY2FuIGNvbnRhaW4gbXVsdGlwbGUgcG9saWNpZXNcbiAgLy8gc2VwYXJhdGVkIGJ5IGNvbW1hLCB3ZSBuZWVkIHRvIGxvb3AgdGhyb3VnaCBhbGwgb2YgdGhlbVxuICAvLyBhbmQgcGljayB0aGUgZmlyc3QgdmFsaWQgb25lLlxuICAvLyBSZWY6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvSGVhZGVycy9SZWZlcnJlci1Qb2xpY3kjc3BlY2lmeV9hX2ZhbGxiYWNrX3BvbGljeVxuICBsZXQgcG9saWN5ID0gJydcbiAgaWYgKHBvbGljeUhlYWRlci5sZW5ndGggPiAwKSB7XG4gICAgLy8gVGhlIHJpZ2h0LW1vc3QgcG9saWN5IHRha2VzIHByZWNlZGVuY2UuXG4gICAgLy8gVGhlIGxlZnQtbW9zdCBwb2xpY3kgaXMgdGhlIGZhbGxiYWNrLlxuICAgIGZvciAobGV0IGkgPSBwb2xpY3lIZWFkZXIubGVuZ3RoOyBpICE9PSAwOyBpLS0pIHtcbiAgICAgIGNvbnN0IHRva2VuID0gcG9saWN5SGVhZGVyW2kgLSAxXS50cmltKClcbiAgICAgIGlmIChyZWZlcnJlclBvbGljeVRva2Vucy5oYXModG9rZW4pKSB7XG4gICAgICAgIHBvbGljeSA9IHRva2VuXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gMi4gSWYgcG9saWN5IGlzIG5vdCB0aGUgZW1wdHkgc3RyaW5nLCB0aGVuIHNldCByZXF1ZXN04oCZcyByZWZlcnJlciBwb2xpY3kgdG8gcG9saWN5LlxuICBpZiAocG9saWN5ICE9PSAnJykge1xuICAgIHJlcXVlc3QucmVmZXJyZXJQb2xpY3kgPSBwb2xpY3lcbiAgfVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY3Jvc3Mtb3JpZ2luLXJlc291cmNlLXBvbGljeS1jaGVja1xuZnVuY3Rpb24gY3Jvc3NPcmlnaW5SZXNvdXJjZVBvbGljeUNoZWNrICgpIHtcbiAgLy8gVE9ET1xuICByZXR1cm4gJ2FsbG93ZWQnXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWNvcnMtY2hlY2tcbmZ1bmN0aW9uIGNvcnNDaGVjayAoKSB7XG4gIC8vIFRPRE9cbiAgcmV0dXJuICdzdWNjZXNzJ1xufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC10YW8tY2hlY2tcbmZ1bmN0aW9uIFRBT0NoZWNrICgpIHtcbiAgLy8gVE9ET1xuICByZXR1cm4gJ3N1Y2Nlc3MnXG59XG5cbmZ1bmN0aW9uIGFwcGVuZEZldGNoTWV0YWRhdGEgKGh0dHBSZXF1ZXN0KSB7XG4gIC8vICBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLWZldGNoLW1ldGFkYXRhLyNzZWMtZmV0Y2gtZGVzdC1oZWFkZXJcbiAgLy8gIFRPRE9cblxuICAvLyAgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1mZXRjaC1tZXRhZGF0YS8jc2VjLWZldGNoLW1vZGUtaGVhZGVyXG5cbiAgLy8gIDEuIEFzc2VydDogcuKAmXMgdXJsIGlzIGEgcG90ZW50aWFsbHkgdHJ1c3R3b3J0aHkgVVJMLlxuICAvLyAgVE9ET1xuXG4gIC8vICAyLiBMZXQgaGVhZGVyIGJlIGEgU3RydWN0dXJlZCBIZWFkZXIgd2hvc2UgdmFsdWUgaXMgYSB0b2tlbi5cbiAgbGV0IGhlYWRlciA9IG51bGxcblxuICAvLyAgMy4gU2V0IGhlYWRlcuKAmXMgdmFsdWUgdG8gcuKAmXMgbW9kZS5cbiAgaGVhZGVyID0gaHR0cFJlcXVlc3QubW9kZVxuXG4gIC8vICA0LiBTZXQgYSBzdHJ1Y3R1cmVkIGZpZWxkIHZhbHVlIGBTZWMtRmV0Y2gtTW9kZWAvaGVhZGVyIGluIHLigJlzIGhlYWRlciBsaXN0LlxuICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5zZXQoJ3NlYy1mZXRjaC1tb2RlJywgaGVhZGVyKVxuXG4gIC8vICBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLWZldGNoLW1ldGFkYXRhLyNzZWMtZmV0Y2gtc2l0ZS1oZWFkZXJcbiAgLy8gIFRPRE9cblxuICAvLyAgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1mZXRjaC1tZXRhZGF0YS8jc2VjLWZldGNoLXVzZXItaGVhZGVyXG4gIC8vICBUT0RPXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNhcHBlbmQtYS1yZXF1ZXN0LW9yaWdpbi1oZWFkZXJcbmZ1bmN0aW9uIGFwcGVuZFJlcXVlc3RPcmlnaW5IZWFkZXIgKHJlcXVlc3QpIHtcbiAgLy8gMS4gTGV0IHNlcmlhbGl6ZWRPcmlnaW4gYmUgdGhlIHJlc3VsdCBvZiBieXRlLXNlcmlhbGl6aW5nIGEgcmVxdWVzdCBvcmlnaW4gd2l0aCByZXF1ZXN0LlxuICBsZXQgc2VyaWFsaXplZE9yaWdpbiA9IHJlcXVlc3Qub3JpZ2luXG5cbiAgLy8gMi4gSWYgcmVxdWVzdOKAmXMgcmVzcG9uc2UgdGFpbnRpbmcgaXMgXCJjb3JzXCIgb3IgcmVxdWVzdOKAmXMgbW9kZSBpcyBcIndlYnNvY2tldFwiLCB0aGVuIGFwcGVuZCAoYE9yaWdpbmAsIHNlcmlhbGl6ZWRPcmlnaW4pIHRvIHJlcXVlc3TigJlzIGhlYWRlciBsaXN0LlxuICBpZiAocmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnY29ycycgfHwgcmVxdWVzdC5tb2RlID09PSAnd2Vic29ja2V0Jykge1xuICAgIGlmIChzZXJpYWxpemVkT3JpZ2luKSB7XG4gICAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnb3JpZ2luJywgc2VyaWFsaXplZE9yaWdpbilcbiAgICB9XG5cbiAgLy8gMy4gT3RoZXJ3aXNlLCBpZiByZXF1ZXN04oCZcyBtZXRob2QgaXMgbmVpdGhlciBgR0VUYCBub3IgYEhFQURgLCB0aGVuOlxuICB9IGVsc2UgaWYgKHJlcXVlc3QubWV0aG9kICE9PSAnR0VUJyAmJiByZXF1ZXN0Lm1ldGhvZCAhPT0gJ0hFQUQnKSB7XG4gICAgLy8gMS4gU3dpdGNoIG9uIHJlcXVlc3TigJlzIHJlZmVycmVyIHBvbGljeTpcbiAgICBzd2l0Y2ggKHJlcXVlc3QucmVmZXJyZXJQb2xpY3kpIHtcbiAgICAgIGNhc2UgJ25vLXJlZmVycmVyJzpcbiAgICAgICAgLy8gU2V0IHNlcmlhbGl6ZWRPcmlnaW4gdG8gYG51bGxgLlxuICAgICAgICBzZXJpYWxpemVkT3JpZ2luID0gbnVsbFxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnbm8tcmVmZXJyZXItd2hlbi1kb3duZ3JhZGUnOlxuICAgICAgY2FzZSAnc3RyaWN0LW9yaWdpbic6XG4gICAgICBjYXNlICdzdHJpY3Qtb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luJzpcbiAgICAgICAgLy8gSWYgcmVxdWVzdOKAmXMgb3JpZ2luIGlzIGEgdHVwbGUgb3JpZ2luLCBpdHMgc2NoZW1lIGlzIFwiaHR0cHNcIiwgYW5kIHJlcXVlc3TigJlzIGN1cnJlbnQgVVJM4oCZcyBzY2hlbWUgaXMgbm90IFwiaHR0cHNcIiwgdGhlbiBzZXQgc2VyaWFsaXplZE9yaWdpbiB0byBgbnVsbGAuXG4gICAgICAgIGlmIChyZXF1ZXN0Lm9yaWdpbiAmJiB1cmxIYXNIdHRwc1NjaGVtZShyZXF1ZXN0Lm9yaWdpbikgJiYgIXVybEhhc0h0dHBzU2NoZW1lKHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpKSkge1xuICAgICAgICAgIHNlcmlhbGl6ZWRPcmlnaW4gPSBudWxsXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ3NhbWUtb3JpZ2luJzpcbiAgICAgICAgLy8gSWYgcmVxdWVzdOKAmXMgb3JpZ2luIGlzIG5vdCBzYW1lIG9yaWdpbiB3aXRoIHJlcXVlc3TigJlzIGN1cnJlbnQgVVJM4oCZcyBvcmlnaW4sIHRoZW4gc2V0IHNlcmlhbGl6ZWRPcmlnaW4gdG8gYG51bGxgLlxuICAgICAgICBpZiAoIXNhbWVPcmlnaW4ocmVxdWVzdCwgcmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdCkpKSB7XG4gICAgICAgICAgc2VyaWFsaXplZE9yaWdpbiA9IG51bGxcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgLy8gRG8gbm90aGluZy5cbiAgICB9XG5cbiAgICBpZiAoc2VyaWFsaXplZE9yaWdpbikge1xuICAgICAgLy8gMi4gQXBwZW5kIChgT3JpZ2luYCwgc2VyaWFsaXplZE9yaWdpbikgdG8gcmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QuXG4gICAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnb3JpZ2luJywgc2VyaWFsaXplZE9yaWdpbilcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29hcnNlbmVkU2hhcmVkQ3VycmVudFRpbWUgKGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5KSB7XG4gIC8vIFRPRE9cbiAgcmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjcmVhdGUtYW4tb3BhcXVlLXRpbWluZy1pbmZvXG5mdW5jdGlvbiBjcmVhdGVPcGFxdWVUaW1pbmdJbmZvICh0aW1pbmdJbmZvKSB7XG4gIHJldHVybiB7XG4gICAgc3RhcnRUaW1lOiB0aW1pbmdJbmZvLnN0YXJ0VGltZSA/PyAwLFxuICAgIHJlZGlyZWN0U3RhcnRUaW1lOiAwLFxuICAgIHJlZGlyZWN0RW5kVGltZTogMCxcbiAgICBwb3N0UmVkaXJlY3RTdGFydFRpbWU6IHRpbWluZ0luZm8uc3RhcnRUaW1lID8/IDAsXG4gICAgZmluYWxTZXJ2aWNlV29ya2VyU3RhcnRUaW1lOiAwLFxuICAgIGZpbmFsTmV0d29ya1Jlc3BvbnNlU3RhcnRUaW1lOiAwLFxuICAgIGZpbmFsTmV0d29ya1JlcXVlc3RTdGFydFRpbWU6IDAsXG4gICAgZW5kVGltZTogMCxcbiAgICBlbmNvZGVkQm9keVNpemU6IDAsXG4gICAgZGVjb2RlZEJvZHlTaXplOiAwLFxuICAgIGZpbmFsQ29ubmVjdGlvblRpbWluZ0luZm86IG51bGxcbiAgfVxufVxuXG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9vcmlnaW4uaHRtbCNwb2xpY3ktY29udGFpbmVyXG5mdW5jdGlvbiBtYWtlUG9saWN5Q29udGFpbmVyICgpIHtcbiAgLy8gTm90ZTogdGhlIGZldGNoIHNwZWMgZG9lc24ndCBtYWtlIHVzZSBvZiBlbWJlZGRlciBwb2xpY3kgb3IgQ1NQIGxpc3RcbiAgcmV0dXJuIHtcbiAgICByZWZlcnJlclBvbGljeTogJ3N0cmljdC1vcmlnaW4td2hlbi1jcm9zcy1vcmlnaW4nXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvb3JpZ2luLmh0bWwjY2xvbmUtYS1wb2xpY3ktY29udGFpbmVyXG5mdW5jdGlvbiBjbG9uZVBvbGljeUNvbnRhaW5lciAocG9saWN5Q29udGFpbmVyKSB7XG4gIHJldHVybiB7XG4gICAgcmVmZXJyZXJQb2xpY3k6IHBvbGljeUNvbnRhaW5lci5yZWZlcnJlclBvbGljeVxuICB9XG59XG5cbi8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtcmVmZXJyZXItcG9saWN5LyNkZXRlcm1pbmUtcmVxdWVzdHMtcmVmZXJyZXJcbmZ1bmN0aW9uIGRldGVybWluZVJlcXVlc3RzUmVmZXJyZXIgKHJlcXVlc3QpIHtcbiAgLy8gMS4gTGV0IHBvbGljeSBiZSByZXF1ZXN0J3MgcmVmZXJyZXIgcG9saWN5LlxuICBjb25zdCBwb2xpY3kgPSByZXF1ZXN0LnJlZmVycmVyUG9saWN5XG5cbiAgLy8gTm90ZTogcG9saWN5IGNhbm5vdCAoc2hvdWxkbid0KSBiZSBudWxsIG9yIGFuIGVtcHR5IHN0cmluZy5cbiAgYXNzZXJ0KHBvbGljeSlcblxuICAvLyAyLiBMZXQgZW52aXJvbm1lbnQgYmUgcmVxdWVzdOKAmXMgY2xpZW50LlxuXG4gIGxldCByZWZlcnJlclNvdXJjZSA9IG51bGxcblxuICAvLyAzLiBTd2l0Y2ggb24gcmVxdWVzdOKAmXMgcmVmZXJyZXI6XG4gIGlmIChyZXF1ZXN0LnJlZmVycmVyID09PSAnY2xpZW50Jykge1xuICAgIC8vIE5vdGU6IG5vZGUgaXNuJ3QgYSBicm93c2VyIGFuZCBkb2Vzbid0IGltcGxlbWVudCBkb2N1bWVudC9pZnJhbWVzLFxuICAgIC8vIHNvIHdlIGJ5cGFzcyB0aGlzIHN0ZXAgYW5kIHJlcGxhY2UgaXQgd2l0aCBvdXIgb3duLlxuXG4gICAgY29uc3QgZ2xvYmFsT3JpZ2luID0gZ2V0R2xvYmFsT3JpZ2luKClcblxuICAgIGlmICghZ2xvYmFsT3JpZ2luIHx8IGdsb2JhbE9yaWdpbi5vcmlnaW4gPT09ICdudWxsJykge1xuICAgICAgcmV0dXJuICduby1yZWZlcnJlcidcbiAgICB9XG5cbiAgICAvLyBub3RlOiB3ZSBuZWVkIHRvIGNsb25lIGl0IGFzIGl0J3MgbXV0YXRlZFxuICAgIHJlZmVycmVyU291cmNlID0gbmV3IFVSTChnbG9iYWxPcmlnaW4pXG4gIH0gZWxzZSBpZiAocmVxdWVzdC5yZWZlcnJlciBpbnN0YW5jZW9mIFVSTCkge1xuICAgIC8vIExldCByZWZlcnJlclNvdXJjZSBiZSByZXF1ZXN04oCZcyByZWZlcnJlci5cbiAgICByZWZlcnJlclNvdXJjZSA9IHJlcXVlc3QucmVmZXJyZXJcbiAgfVxuXG4gIC8vIDQuIExldCByZXF1ZXN04oCZcyByZWZlcnJlclVSTCBiZSB0aGUgcmVzdWx0IG9mIHN0cmlwcGluZyByZWZlcnJlclNvdXJjZSBmb3JcbiAgLy8gICAgdXNlIGFzIGEgcmVmZXJyZXIuXG4gIGxldCByZWZlcnJlclVSTCA9IHN0cmlwVVJMRm9yUmVmZXJyZXIocmVmZXJyZXJTb3VyY2UpXG5cbiAgLy8gNS4gTGV0IHJlZmVycmVyT3JpZ2luIGJlIHRoZSByZXN1bHQgb2Ygc3RyaXBwaW5nIHJlZmVycmVyU291cmNlIGZvciB1c2UgYXNcbiAgLy8gICAgYSByZWZlcnJlciwgd2l0aCB0aGUgb3JpZ2luLW9ubHkgZmxhZyBzZXQgdG8gdHJ1ZS5cbiAgY29uc3QgcmVmZXJyZXJPcmlnaW4gPSBzdHJpcFVSTEZvclJlZmVycmVyKHJlZmVycmVyU291cmNlLCB0cnVlKVxuXG4gIC8vIDYuIElmIHRoZSByZXN1bHQgb2Ygc2VyaWFsaXppbmcgcmVmZXJyZXJVUkwgaXMgYSBzdHJpbmcgd2hvc2UgbGVuZ3RoIGlzXG4gIC8vICAgIGdyZWF0ZXIgdGhhbiA0MDk2LCBzZXQgcmVmZXJyZXJVUkwgdG8gcmVmZXJyZXJPcmlnaW4uXG4gIGlmIChyZWZlcnJlclVSTC50b1N0cmluZygpLmxlbmd0aCA+IDQwOTYpIHtcbiAgICByZWZlcnJlclVSTCA9IHJlZmVycmVyT3JpZ2luXG4gIH1cblxuICBjb25zdCBhcmVTYW1lT3JpZ2luID0gc2FtZU9yaWdpbihyZXF1ZXN0LCByZWZlcnJlclVSTClcbiAgY29uc3QgaXNOb25Qb3RlbnRpYWxseVRydXN0V29ydGh5ID0gaXNVUkxQb3RlbnRpYWxseVRydXN0d29ydGh5KHJlZmVycmVyVVJMKSAmJlxuICAgICFpc1VSTFBvdGVudGlhbGx5VHJ1c3R3b3J0aHkocmVxdWVzdC51cmwpXG5cbiAgLy8gOC4gRXhlY3V0ZSB0aGUgc3dpdGNoIHN0YXRlbWVudHMgY29ycmVzcG9uZGluZyB0byB0aGUgdmFsdWUgb2YgcG9saWN5OlxuICBzd2l0Y2ggKHBvbGljeSkge1xuICAgIGNhc2UgJ29yaWdpbic6IHJldHVybiByZWZlcnJlck9yaWdpbiAhPSBudWxsID8gcmVmZXJyZXJPcmlnaW4gOiBzdHJpcFVSTEZvclJlZmVycmVyKHJlZmVycmVyU291cmNlLCB0cnVlKVxuICAgIGNhc2UgJ3Vuc2FmZS11cmwnOiByZXR1cm4gcmVmZXJyZXJVUkxcbiAgICBjYXNlICdzYW1lLW9yaWdpbic6XG4gICAgICByZXR1cm4gYXJlU2FtZU9yaWdpbiA/IHJlZmVycmVyT3JpZ2luIDogJ25vLXJlZmVycmVyJ1xuICAgIGNhc2UgJ29yaWdpbi13aGVuLWNyb3NzLW9yaWdpbic6XG4gICAgICByZXR1cm4gYXJlU2FtZU9yaWdpbiA/IHJlZmVycmVyVVJMIDogcmVmZXJyZXJPcmlnaW5cbiAgICBjYXNlICdzdHJpY3Qtb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luJzoge1xuICAgICAgY29uc3QgY3VycmVudFVSTCA9IHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpXG5cbiAgICAgIC8vIDEuIElmIHRoZSBvcmlnaW4gb2YgcmVmZXJyZXJVUkwgYW5kIHRoZSBvcmlnaW4gb2YgcmVxdWVzdOKAmXMgY3VycmVudFxuICAgICAgLy8gICAgVVJMIGFyZSB0aGUgc2FtZSwgdGhlbiByZXR1cm4gcmVmZXJyZXJVUkwuXG4gICAgICBpZiAoc2FtZU9yaWdpbihyZWZlcnJlclVSTCwgY3VycmVudFVSTCkpIHtcbiAgICAgICAgcmV0dXJuIHJlZmVycmVyVVJMXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIElmIHJlZmVycmVyVVJMIGlzIGEgcG90ZW50aWFsbHkgdHJ1c3R3b3J0aHkgVVJMIGFuZCByZXF1ZXN04oCZc1xuICAgICAgLy8gICAgY3VycmVudCBVUkwgaXMgbm90IGEgcG90ZW50aWFsbHkgdHJ1c3R3b3J0aHkgVVJMLCB0aGVuIHJldHVybiBub1xuICAgICAgLy8gICAgcmVmZXJyZXIuXG4gICAgICBpZiAoaXNVUkxQb3RlbnRpYWxseVRydXN0d29ydGh5KHJlZmVycmVyVVJMKSAmJiAhaXNVUkxQb3RlbnRpYWxseVRydXN0d29ydGh5KGN1cnJlbnRVUkwpKSB7XG4gICAgICAgIHJldHVybiAnbm8tcmVmZXJyZXInXG4gICAgICB9XG5cbiAgICAgIC8vIDMuIFJldHVybiByZWZlcnJlck9yaWdpbi5cbiAgICAgIHJldHVybiByZWZlcnJlck9yaWdpblxuICAgIH1cbiAgICBjYXNlICdzdHJpY3Qtb3JpZ2luJzogLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgICAgLyoqXG4gICAgICAgICAqIDEuIElmIHJlZmVycmVyVVJMIGlzIGEgcG90ZW50aWFsbHkgdHJ1c3R3b3J0aHkgVVJMIGFuZFxuICAgICAgICAgKiByZXF1ZXN04oCZcyBjdXJyZW50IFVSTCBpcyBub3QgYSBwb3RlbnRpYWxseSB0cnVzdHdvcnRoeSBVUkwsXG4gICAgICAgICAqIHRoZW4gcmV0dXJuIG5vIHJlZmVycmVyLlxuICAgICAgICAgKiAyLiBSZXR1cm4gcmVmZXJyZXJPcmlnaW5cbiAgICAgICAgKi9cbiAgICBjYXNlICduby1yZWZlcnJlci13aGVuLWRvd25ncmFkZSc6IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICAgIC8qKlxuICAgICAgICogMS4gSWYgcmVmZXJyZXJVUkwgaXMgYSBwb3RlbnRpYWxseSB0cnVzdHdvcnRoeSBVUkwgYW5kXG4gICAgICAgKiByZXF1ZXN04oCZcyBjdXJyZW50IFVSTCBpcyBub3QgYSBwb3RlbnRpYWxseSB0cnVzdHdvcnRoeSBVUkwsXG4gICAgICAgKiB0aGVuIHJldHVybiBubyByZWZlcnJlci5cbiAgICAgICAqIDIuIFJldHVybiByZWZlcnJlck9yaWdpblxuICAgICAgKi9cblxuICAgIGRlZmF1bHQ6IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICAgIHJldHVybiBpc05vblBvdGVudGlhbGx5VHJ1c3RXb3J0aHkgPyAnbm8tcmVmZXJyZXInIDogcmVmZXJyZXJPcmlnaW5cbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1yZWZlcnJlci1wb2xpY3kvI3N0cmlwLXVybFxuICogQHBhcmFtIHtVUkx9IHVybFxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gb3JpZ2luT25seVxuICovXG5mdW5jdGlvbiBzdHJpcFVSTEZvclJlZmVycmVyICh1cmwsIG9yaWdpbk9ubHkpIHtcbiAgLy8gMS4gQXNzZXJ0OiB1cmwgaXMgYSBVUkwuXG4gIGFzc2VydCh1cmwgaW5zdGFuY2VvZiBVUkwpXG5cbiAgLy8gMi4gSWYgdXJs4oCZcyBzY2hlbWUgaXMgYSBsb2NhbCBzY2hlbWUsIHRoZW4gcmV0dXJuIG5vIHJlZmVycmVyLlxuICBpZiAodXJsLnByb3RvY29sID09PSAnZmlsZTonIHx8IHVybC5wcm90b2NvbCA9PT0gJ2Fib3V0OicgfHwgdXJsLnByb3RvY29sID09PSAnYmxhbms6Jykge1xuICAgIHJldHVybiAnbm8tcmVmZXJyZXInXG4gIH1cblxuICAvLyAzLiBTZXQgdXJs4oCZcyB1c2VybmFtZSB0byB0aGUgZW1wdHkgc3RyaW5nLlxuICB1cmwudXNlcm5hbWUgPSAnJ1xuXG4gIC8vIDQuIFNldCB1cmzigJlzIHBhc3N3b3JkIHRvIHRoZSBlbXB0eSBzdHJpbmcuXG4gIHVybC5wYXNzd29yZCA9ICcnXG5cbiAgLy8gNS4gU2V0IHVybOKAmXMgZnJhZ21lbnQgdG8gbnVsbC5cbiAgdXJsLmhhc2ggPSAnJ1xuXG4gIC8vIDYuIElmIHRoZSBvcmlnaW4tb25seSBmbGFnIGlzIHRydWUsIHRoZW46XG4gIGlmIChvcmlnaW5Pbmx5KSB7XG4gICAgLy8gMS4gU2V0IHVybOKAmXMgcGF0aCB0byDCqyB0aGUgZW1wdHkgc3RyaW5nIMK7LlxuICAgIHVybC5wYXRobmFtZSA9ICcnXG5cbiAgICAvLyAyLiBTZXQgdXJs4oCZcyBxdWVyeSB0byBudWxsLlxuICAgIHVybC5zZWFyY2ggPSAnJ1xuICB9XG5cbiAgLy8gNy4gUmV0dXJuIHVybC5cbiAgcmV0dXJuIHVybFxufVxuXG5mdW5jdGlvbiBpc1VSTFBvdGVudGlhbGx5VHJ1c3R3b3J0aHkgKHVybCkge1xuICBpZiAoISh1cmwgaW5zdGFuY2VvZiBVUkwpKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvLyBJZiBjaGlsZCBvZiBhYm91dCwgcmV0dXJuIHRydWVcbiAgaWYgKHVybC5ocmVmID09PSAnYWJvdXQ6YmxhbmsnIHx8IHVybC5ocmVmID09PSAnYWJvdXQ6c3JjZG9jJykge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyBJZiBzY2hlbWUgaXMgZGF0YSwgcmV0dXJuIHRydWVcbiAgaWYgKHVybC5wcm90b2NvbCA9PT0gJ2RhdGE6JykgcmV0dXJuIHRydWVcblxuICAvLyBJZiBmaWxlLCByZXR1cm4gdHJ1ZVxuICBpZiAodXJsLnByb3RvY29sID09PSAnZmlsZTonKSByZXR1cm4gdHJ1ZVxuXG4gIHJldHVybiBpc09yaWdpblBvdGVudGlhbGx5VHJ1c3R3b3J0aHkodXJsLm9yaWdpbilcblxuICBmdW5jdGlvbiBpc09yaWdpblBvdGVudGlhbGx5VHJ1c3R3b3J0aHkgKG9yaWdpbikge1xuICAgIC8vIElmIG9yaWdpbiBpcyBleHBsaWNpdGx5IG51bGwsIHJldHVybiBmYWxzZVxuICAgIGlmIChvcmlnaW4gPT0gbnVsbCB8fCBvcmlnaW4gPT09ICdudWxsJykgcmV0dXJuIGZhbHNlXG5cbiAgICBjb25zdCBvcmlnaW5Bc1VSTCA9IG5ldyBVUkwob3JpZ2luKVxuXG4gICAgLy8gSWYgc2VjdXJlLCByZXR1cm4gdHJ1ZVxuICAgIGlmIChvcmlnaW5Bc1VSTC5wcm90b2NvbCA9PT0gJ2h0dHBzOicgfHwgb3JpZ2luQXNVUkwucHJvdG9jb2wgPT09ICd3c3M6Jykge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICAvLyBJZiBsb2NhbGhvc3Qgb3IgdmFyaWFudHMsIHJldHVybiB0cnVlXG4gICAgaWYgKC9eMTI3KD86XFwuWzAtOV0rKXswLDJ9XFwuWzAtOV0rJHxeXFxbKD86MCo6KSo/Oj8wKjFcXF0kLy50ZXN0KG9yaWdpbkFzVVJMLmhvc3RuYW1lKSB8fFxuICAgICAob3JpZ2luQXNVUkwuaG9zdG5hbWUgPT09ICdsb2NhbGhvc3QnIHx8IG9yaWdpbkFzVVJMLmhvc3RuYW1lLmluY2x1ZGVzKCdsb2NhbGhvc3QuJykpIHx8XG4gICAgIChvcmlnaW5Bc1VSTC5ob3N0bmFtZS5lbmRzV2l0aCgnLmxvY2FsaG9zdCcpKSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICAvLyBJZiBhbnkgb3RoZXIsIHJldHVybiBmYWxzZVxuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLXN1YnJlc291cmNlLWludGVncml0eS8jZG9lcy1yZXNwb25zZS1tYXRjaC1tZXRhZGF0YWxpc3RcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gYnl0ZXNcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXRhZGF0YUxpc3RcbiAqL1xuZnVuY3Rpb24gYnl0ZXNNYXRjaCAoYnl0ZXMsIG1ldGFkYXRhTGlzdCkge1xuICAvLyBJZiBub2RlIGlzIG5vdCBidWlsdCB3aXRoIE9wZW5TU0wgc3VwcG9ydCwgd2UgY2Fubm90IGNoZWNrXG4gIC8vIGEgcmVxdWVzdCdzIGludGVncml0eSwgc28gYWxsb3cgaXQgYnkgZGVmYXVsdCAodGhlIHNwZWMgd2lsbFxuICAvLyBhbGxvdyByZXF1ZXN0cyBpZiBhbiBpbnZhbGlkIGhhc2ggaXMgZ2l2ZW4sIGFzIHByZWNlZGVuY2UpLlxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWY6IG9ubHkgaWYgbm9kZSBpcyBidWlsdCB3aXRoIC0td2l0aG91dC1zc2wgKi9cbiAgaWYgKGNyeXB0byA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8vIDEuIExldCBwYXJzZWRNZXRhZGF0YSBiZSB0aGUgcmVzdWx0IG9mIHBhcnNpbmcgbWV0YWRhdGFMaXN0LlxuICBjb25zdCBwYXJzZWRNZXRhZGF0YSA9IHBhcnNlTWV0YWRhdGEobWV0YWRhdGFMaXN0KVxuXG4gIC8vIDIuIElmIHBhcnNlZE1ldGFkYXRhIGlzIG5vIG1ldGFkYXRhLCByZXR1cm4gdHJ1ZS5cbiAgaWYgKHBhcnNlZE1ldGFkYXRhID09PSAnbm8gbWV0YWRhdGEnKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8vIDMuIElmIHJlc3BvbnNlIGlzIG5vdCBlbGlnaWJsZSBmb3IgaW50ZWdyaXR5IHZhbGlkYXRpb24sIHJldHVybiBmYWxzZS5cbiAgLy8gVE9ET1xuXG4gIC8vIDQuIElmIHBhcnNlZE1ldGFkYXRhIGlzIHRoZSBlbXB0eSBzZXQsIHJldHVybiB0cnVlLlxuICBpZiAocGFyc2VkTWV0YWRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8vIDUuIExldCBtZXRhZGF0YSBiZSB0aGUgcmVzdWx0IG9mIGdldHRpbmcgdGhlIHN0cm9uZ2VzdFxuICAvLyAgICBtZXRhZGF0YSBmcm9tIHBhcnNlZE1ldGFkYXRhLlxuICBjb25zdCBzdHJvbmdlc3QgPSBnZXRTdHJvbmdlc3RNZXRhZGF0YShwYXJzZWRNZXRhZGF0YSlcbiAgY29uc3QgbWV0YWRhdGEgPSBmaWx0ZXJNZXRhZGF0YUxpc3RCeUFsZ29yaXRobShwYXJzZWRNZXRhZGF0YSwgc3Ryb25nZXN0KVxuXG4gIC8vIDYuIEZvciBlYWNoIGl0ZW0gaW4gbWV0YWRhdGE6XG4gIGZvciAoY29uc3QgaXRlbSBvZiBtZXRhZGF0YSkge1xuICAgIC8vIDEuIExldCBhbGdvcml0aG0gYmUgdGhlIGFsZyBjb21wb25lbnQgb2YgaXRlbS5cbiAgICBjb25zdCBhbGdvcml0aG0gPSBpdGVtLmFsZ29cblxuICAgIC8vIDIuIExldCBleHBlY3RlZFZhbHVlIGJlIHRoZSB2YWwgY29tcG9uZW50IG9mIGl0ZW0uXG4gICAgY29uc3QgZXhwZWN0ZWRWYWx1ZSA9IGl0ZW0uaGFzaFxuXG4gICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS93ZWItcGxhdGZvcm0tdGVzdHMvd3B0L2NvbW1pdC9lNGM1Y2M3YTVlNDgwOTMyMjA1MjhkZmRkMWM0MDEyZGMzODM3YTBlXG4gICAgLy8gXCJiZSBsaWJlcmFsIHdpdGggcGFkZGluZ1wiLiBUaGlzIGlzIGFubm95aW5nLCBhbmQgaXQncyBub3QgZXZlbiBpbiB0aGUgc3BlYy5cblxuICAgIC8vIDMuIExldCBhY3R1YWxWYWx1ZSBiZSB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIGFsZ29yaXRobSB0byBieXRlcy5cbiAgICBsZXQgYWN0dWFsVmFsdWUgPSBjcnlwdG8uY3JlYXRlSGFzaChhbGdvcml0aG0pLnVwZGF0ZShieXRlcykuZGlnZXN0KCdiYXNlNjQnKVxuXG4gICAgaWYgKGFjdHVhbFZhbHVlW2FjdHVhbFZhbHVlLmxlbmd0aCAtIDFdID09PSAnPScpIHtcbiAgICAgIGlmIChhY3R1YWxWYWx1ZVthY3R1YWxWYWx1ZS5sZW5ndGggLSAyXSA9PT0gJz0nKSB7XG4gICAgICAgIGFjdHVhbFZhbHVlID0gYWN0dWFsVmFsdWUuc2xpY2UoMCwgLTIpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhY3R1YWxWYWx1ZSA9IGFjdHVhbFZhbHVlLnNsaWNlKDAsIC0xKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDQuIElmIGFjdHVhbFZhbHVlIGlzIGEgY2FzZS1zZW5zaXRpdmUgbWF0Y2ggZm9yIGV4cGVjdGVkVmFsdWUsXG4gICAgLy8gICAgcmV0dXJuIHRydWUuXG4gICAgaWYgKGNvbXBhcmVCYXNlNjRNaXhlZChhY3R1YWxWYWx1ZSwgZXhwZWN0ZWRWYWx1ZSkpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICB9XG5cbiAgLy8gNy4gUmV0dXJuIGZhbHNlLlxuICByZXR1cm4gZmFsc2Vcbn1cblxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1zdWJyZXNvdXJjZS1pbnRlZ3JpdHkvI2dyYW1tYXJkZWYtaGFzaC13aXRoLW9wdGlvbnNcbi8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9DU1AyLyNzb3VyY2UtbGlzdC1zeW50YXhcbi8vIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM1MjM0I2FwcGVuZGl4LUIuMVxuY29uc3QgcGFyc2VIYXNoV2l0aE9wdGlvbnMgPSAvKD88YWxnbz5zaGEyNTZ8c2hhMzg0fHNoYTUxMiktKCg/PGhhc2g+W0EtWmEtejAtOSsvXSt8W0EtWmEtejAtOV8tXSspPXswLDJ9KD86XFxzfCQpKCArWyEtfl0qKT8pPy9pXG5cbi8qKlxuICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLXN1YnJlc291cmNlLWludGVncml0eS8jcGFyc2UtbWV0YWRhdGFcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXRhZGF0YVxuICovXG5mdW5jdGlvbiBwYXJzZU1ldGFkYXRhIChtZXRhZGF0YSkge1xuICAvLyAxLiBMZXQgcmVzdWx0IGJlIHRoZSBlbXB0eSBzZXQuXG4gIC8qKiBAdHlwZSB7eyBhbGdvOiBzdHJpbmcsIGhhc2g6IHN0cmluZyB9W119ICovXG4gIGNvbnN0IHJlc3VsdCA9IFtdXG5cbiAgLy8gMi4gTGV0IGVtcHR5IGJlIGVxdWFsIHRvIHRydWUuXG4gIGxldCBlbXB0eSA9IHRydWVcblxuICAvLyAzLiBGb3IgZWFjaCB0b2tlbiByZXR1cm5lZCBieSBzcGxpdHRpbmcgbWV0YWRhdGEgb24gc3BhY2VzOlxuICBmb3IgKGNvbnN0IHRva2VuIG9mIG1ldGFkYXRhLnNwbGl0KCcgJykpIHtcbiAgICAvLyAxLiBTZXQgZW1wdHkgdG8gZmFsc2UuXG4gICAgZW1wdHkgPSBmYWxzZVxuXG4gICAgLy8gMi4gUGFyc2UgdG9rZW4gYXMgYSBoYXNoLXdpdGgtb3B0aW9ucy5cbiAgICBjb25zdCBwYXJzZWRUb2tlbiA9IHBhcnNlSGFzaFdpdGhPcHRpb25zLmV4ZWModG9rZW4pXG5cbiAgICAvLyAzLiBJZiB0b2tlbiBkb2VzIG5vdCBwYXJzZSwgY29udGludWUgdG8gdGhlIG5leHQgdG9rZW4uXG4gICAgaWYgKFxuICAgICAgcGFyc2VkVG9rZW4gPT09IG51bGwgfHxcbiAgICAgIHBhcnNlZFRva2VuLmdyb3VwcyA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICBwYXJzZWRUb2tlbi5ncm91cHMuYWxnbyA9PT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICAvLyBOb3RlOiBDaHJvbWl1bSBibG9ja3MgdGhlIHJlcXVlc3QgYXQgdGhpcyBwb2ludCwgYnV0IEZpcmVmb3hcbiAgICAgIC8vIGdpdmVzIGEgd2FybmluZyB0aGF0IGFuIGludmFsaWQgaW50ZWdyaXR5IHdhcyBnaXZlbi4gVGhlXG4gICAgICAvLyBjb3JyZWN0IGJlaGF2aW9yIGlzIHRvIGlnbm9yZSB0aGVzZSwgYW5kIHN1YnNlcXVlbnRseSBub3RcbiAgICAgIC8vIGNoZWNrIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIHJlc291cmNlLlxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICAvLyA0LiBMZXQgYWxnb3JpdGhtIGJlIHRoZSBoYXNoLWFsZ28gY29tcG9uZW50IG9mIHRva2VuLlxuICAgIGNvbnN0IGFsZ29yaXRobSA9IHBhcnNlZFRva2VuLmdyb3Vwcy5hbGdvLnRvTG93ZXJDYXNlKClcblxuICAgIC8vIDUuIElmIGFsZ29yaXRobSBpcyBhIGhhc2ggZnVuY3Rpb24gcmVjb2duaXplZCBieSB0aGUgdXNlclxuICAgIC8vICAgIGFnZW50LCBhZGQgdGhlIHBhcnNlZCB0b2tlbiB0byByZXN1bHQuXG4gICAgaWYgKHN1cHBvcnRlZEhhc2hlcy5pbmNsdWRlcyhhbGdvcml0aG0pKSB7XG4gICAgICByZXN1bHQucHVzaChwYXJzZWRUb2tlbi5ncm91cHMpXG4gICAgfVxuICB9XG5cbiAgLy8gNC4gUmV0dXJuIG5vIG1ldGFkYXRhIGlmIGVtcHR5IGlzIHRydWUsIG90aGVyd2lzZSByZXR1cm4gcmVzdWx0LlxuICBpZiAoZW1wdHkgPT09IHRydWUpIHtcbiAgICByZXR1cm4gJ25vIG1ldGFkYXRhJ1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG4vKipcbiAqIEBwYXJhbSB7eyBhbGdvOiAnc2hhMjU2JyB8ICdzaGEzODQnIHwgJ3NoYTUxMicgfVtdfSBtZXRhZGF0YUxpc3RcbiAqL1xuZnVuY3Rpb24gZ2V0U3Ryb25nZXN0TWV0YWRhdGEgKG1ldGFkYXRhTGlzdCkge1xuICAvLyBMZXQgYWxnb3JpdGhtIGJlIHRoZSBhbGdvIGNvbXBvbmVudCBvZiB0aGUgZmlyc3QgaXRlbSBpbiBtZXRhZGF0YUxpc3QuXG4gIC8vIENhbiBiZSBzaGEyNTZcbiAgbGV0IGFsZ29yaXRobSA9IG1ldGFkYXRhTGlzdFswXS5hbGdvXG4gIC8vIElmIHRoZSBhbGdvcml0aG0gaXMgc2hhNTEyLCB0aGVuIGl0IGlzIHRoZSBzdHJvbmdlc3RcbiAgLy8gYW5kIHdlIGNhbiByZXR1cm4gaW1tZWRpYXRlbHlcbiAgaWYgKGFsZ29yaXRobVszXSA9PT0gJzUnKSB7XG4gICAgcmV0dXJuIGFsZ29yaXRobVxuICB9XG5cbiAgZm9yIChsZXQgaSA9IDE7IGkgPCBtZXRhZGF0YUxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCBtZXRhZGF0YSA9IG1ldGFkYXRhTGlzdFtpXVxuICAgIC8vIElmIHRoZSBhbGdvcml0aG0gaXMgc2hhNTEyLCB0aGVuIGl0IGlzIHRoZSBzdHJvbmdlc3RcbiAgICAvLyBhbmQgd2UgY2FuIGJyZWFrIHRoZSBsb29wIGltbWVkaWF0ZWx5XG4gICAgaWYgKG1ldGFkYXRhLmFsZ29bM10gPT09ICc1Jykge1xuICAgICAgYWxnb3JpdGhtID0gJ3NoYTUxMidcbiAgICAgIGJyZWFrXG4gICAgLy8gSWYgdGhlIGFsZ29yaXRobSBpcyBzaGEzODQsIHRoZW4gYSBwb3RlbnRpYWwgc2hhMjU2IG9yIHNoYTM4NCBpcyBpZ25vcmVkXG4gICAgfSBlbHNlIGlmIChhbGdvcml0aG1bM10gPT09ICczJykge1xuICAgICAgY29udGludWVcbiAgICAvLyBhbGdvcml0aG0gaXMgc2hhMjU2LCBjaGVjayBpZiBhbGdvcml0aG0gaXMgc2hhMzg0IGFuZCBpZiBzbywgc2V0IGl0IGFzXG4gICAgLy8gdGhlIHN0cm9uZ2VzdFxuICAgIH0gZWxzZSBpZiAobWV0YWRhdGEuYWxnb1szXSA9PT0gJzMnKSB7XG4gICAgICBhbGdvcml0aG0gPSAnc2hhMzg0J1xuICAgIH1cbiAgfVxuICByZXR1cm4gYWxnb3JpdGhtXG59XG5cbmZ1bmN0aW9uIGZpbHRlck1ldGFkYXRhTGlzdEJ5QWxnb3JpdGhtIChtZXRhZGF0YUxpc3QsIGFsZ29yaXRobSkge1xuICBpZiAobWV0YWRhdGFMaXN0Lmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBtZXRhZGF0YUxpc3RcbiAgfVxuXG4gIGxldCBwb3MgPSAwXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWV0YWRhdGFMaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgaWYgKG1ldGFkYXRhTGlzdFtpXS5hbGdvID09PSBhbGdvcml0aG0pIHtcbiAgICAgIG1ldGFkYXRhTGlzdFtwb3MrK10gPSBtZXRhZGF0YUxpc3RbaV1cbiAgICB9XG4gIH1cblxuICBtZXRhZGF0YUxpc3QubGVuZ3RoID0gcG9zXG5cbiAgcmV0dXJuIG1ldGFkYXRhTGlzdFxufVxuXG4vKipcbiAqIENvbXBhcmVzIHR3byBiYXNlNjQgc3RyaW5ncywgYWxsb3dpbmcgZm9yIGJhc2U2NHVybFxuICogaW4gdGhlIHNlY29uZCBzdHJpbmcuXG4gKlxuKiBAcGFyYW0ge3N0cmluZ30gYWN0dWFsVmFsdWUgYWx3YXlzIGJhc2U2NFxuICogQHBhcmFtIHtzdHJpbmd9IGV4cGVjdGVkVmFsdWUgYmFzZTY0IG9yIGJhc2U2NHVybFxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmVCYXNlNjRNaXhlZCAoYWN0dWFsVmFsdWUsIGV4cGVjdGVkVmFsdWUpIHtcbiAgaWYgKGFjdHVhbFZhbHVlLmxlbmd0aCAhPT0gZXhwZWN0ZWRWYWx1ZS5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGFjdHVhbFZhbHVlLmxlbmd0aDsgKytpKSB7XG4gICAgaWYgKGFjdHVhbFZhbHVlW2ldICE9PSBleHBlY3RlZFZhbHVlW2ldKSB7XG4gICAgICBpZiAoXG4gICAgICAgIChhY3R1YWxWYWx1ZVtpXSA9PT0gJysnICYmIGV4cGVjdGVkVmFsdWVbaV0gPT09ICctJykgfHxcbiAgICAgICAgKGFjdHVhbFZhbHVlW2ldID09PSAnLycgJiYgZXhwZWN0ZWRWYWx1ZVtpXSA9PT0gJ18nKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLXVwZ3JhZGUtaW5zZWN1cmUtcmVxdWVzdHMvI3VwZ3JhZGUtcmVxdWVzdFxuZnVuY3Rpb24gdHJ5VXBncmFkZVJlcXVlc3RUb0FQb3RlbnRpYWxseVRydXN0d29ydGh5VVJMIChyZXF1ZXN0KSB7XG4gIC8vIFRPRE9cbn1cblxuLyoqXG4gKiBAbGluayB7aHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvb3JpZ2luLmh0bWwjc2FtZS1vcmlnaW59XG4gKiBAcGFyYW0ge1VSTH0gQVxuICogQHBhcmFtIHtVUkx9IEJcbiAqL1xuZnVuY3Rpb24gc2FtZU9yaWdpbiAoQSwgQikge1xuICAvLyAxLiBJZiBBIGFuZCBCIGFyZSB0aGUgc2FtZSBvcGFxdWUgb3JpZ2luLCB0aGVuIHJldHVybiB0cnVlLlxuICBpZiAoQS5vcmlnaW4gPT09IEIub3JpZ2luICYmIEEub3JpZ2luID09PSAnbnVsbCcpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gMi4gSWYgQSBhbmQgQiBhcmUgYm90aCB0dXBsZSBvcmlnaW5zIGFuZCB0aGVpciBzY2hlbWVzLFxuICAvLyAgICBob3N0cywgYW5kIHBvcnQgYXJlIGlkZW50aWNhbCwgdGhlbiByZXR1cm4gdHJ1ZS5cbiAgaWYgKEEucHJvdG9jb2wgPT09IEIucHJvdG9jb2wgJiYgQS5ob3N0bmFtZSA9PT0gQi5ob3N0bmFtZSAmJiBBLnBvcnQgPT09IEIucG9ydCkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyAzLiBSZXR1cm4gZmFsc2UuXG4gIHJldHVybiBmYWxzZVxufVxuXG5mdW5jdGlvbiBjcmVhdGVEZWZlcnJlZFByb21pc2UgKCkge1xuICBsZXQgcmVzXG4gIGxldCByZWpcbiAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICByZXMgPSByZXNvbHZlXG4gICAgcmVqID0gcmVqZWN0XG4gIH0pXG5cbiAgcmV0dXJuIHsgcHJvbWlzZSwgcmVzb2x2ZTogcmVzLCByZWplY3Q6IHJlaiB9XG59XG5cbmZ1bmN0aW9uIGlzQWJvcnRlZCAoZmV0Y2hQYXJhbXMpIHtcbiAgcmV0dXJuIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuc3RhdGUgPT09ICdhYm9ydGVkJ1xufVxuXG5mdW5jdGlvbiBpc0NhbmNlbGxlZCAoZmV0Y2hQYXJhbXMpIHtcbiAgcmV0dXJuIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuc3RhdGUgPT09ICdhYm9ydGVkJyB8fFxuICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuc3RhdGUgPT09ICd0ZXJtaW5hdGVkJ1xufVxuXG5jb25zdCBub3JtYWxpemVNZXRob2RSZWNvcmQgPSB7XG4gIGRlbGV0ZTogJ0RFTEVURScsXG4gIERFTEVURTogJ0RFTEVURScsXG4gIGdldDogJ0dFVCcsXG4gIEdFVDogJ0dFVCcsXG4gIGhlYWQ6ICdIRUFEJyxcbiAgSEVBRDogJ0hFQUQnLFxuICBvcHRpb25zOiAnT1BUSU9OUycsXG4gIE9QVElPTlM6ICdPUFRJT05TJyxcbiAgcG9zdDogJ1BPU1QnLFxuICBQT1NUOiAnUE9TVCcsXG4gIHB1dDogJ1BVVCcsXG4gIFBVVDogJ1BVVCdcbn1cblxuLy8gTm90ZTogb2JqZWN0IHByb3RvdHlwZXMgc2hvdWxkIG5vdCBiZSBhYmxlIHRvIGJlIHJlZmVyZW5jZWQuIGUuZy4gYE9iamVjdCNoYXNPd25Qcm9wZXJ0eWAuXG5PYmplY3Quc2V0UHJvdG90eXBlT2Yobm9ybWFsaXplTWV0aG9kUmVjb3JkLCBudWxsKVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtbWV0aG9kLW5vcm1hbGl6ZVxuICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZFxuICovXG5mdW5jdGlvbiBub3JtYWxpemVNZXRob2QgKG1ldGhvZCkge1xuICByZXR1cm4gbm9ybWFsaXplTWV0aG9kUmVjb3JkW21ldGhvZC50b0xvd2VyQ2FzZSgpXSA/PyBtZXRob2Rcbn1cblxuLy8gaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI3NlcmlhbGl6ZS1hLWphdmFzY3JpcHQtdmFsdWUtdG8tYS1qc29uLXN0cmluZ1xuZnVuY3Rpb24gc2VyaWFsaXplSmF2YXNjcmlwdFZhbHVlVG9KU09OU3RyaW5nICh2YWx1ZSkge1xuICAvLyAxLiBMZXQgcmVzdWx0IGJlID8gQ2FsbCglSlNPTi5zdHJpbmdpZnklLCB1bmRlZmluZWQsIMKrIHZhbHVlIMK7KS5cbiAgY29uc3QgcmVzdWx0ID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpXG5cbiAgLy8gMi4gSWYgcmVzdWx0IGlzIHVuZGVmaW5lZCwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVmFsdWUgaXMgbm90IEpTT04gc2VyaWFsaXphYmxlJylcbiAgfVxuXG4gIC8vIDMuIEFzc2VydDogcmVzdWx0IGlzIGEgc3RyaW5nLlxuICBhc3NlcnQodHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZycpXG5cbiAgLy8gNC4gUmV0dXJuIHJlc3VsdC5cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSUyNWl0ZXJhdG9ycHJvdG90eXBlJTI1LW9iamVjdFxuY29uc3QgZXNJdGVyYXRvclByb3RvdHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihPYmplY3QuZ2V0UHJvdG90eXBlT2YoW11bU3ltYm9sLml0ZXJhdG9yXSgpKSlcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZGZuLWl0ZXJhdG9yLXByb3RvdHlwZS1vYmplY3RcbiAqIEBwYXJhbSB7KCkgPT4gdW5rbm93bltdfSBpdGVyYXRvclxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgbmFtZSBvZiB0aGUgaW5zdGFuY2VcbiAqIEBwYXJhbSB7J2tleSd8J3ZhbHVlJ3wna2V5K3ZhbHVlJ30ga2luZFxuICovXG5mdW5jdGlvbiBtYWtlSXRlcmF0b3IgKGl0ZXJhdG9yLCBuYW1lLCBraW5kKSB7XG4gIGNvbnN0IG9iamVjdCA9IHtcbiAgICBpbmRleDogMCxcbiAgICBraW5kLFxuICAgIHRhcmdldDogaXRlcmF0b3JcbiAgfVxuXG4gIGNvbnN0IGkgPSB7XG4gICAgbmV4dCAoKSB7XG4gICAgICAvLyAxLiBMZXQgaW50ZXJmYWNlIGJlIHRoZSBpbnRlcmZhY2UgZm9yIHdoaWNoIHRoZSBpdGVyYXRvciBwcm90b3R5cGUgb2JqZWN0IGV4aXN0cy5cblxuICAgICAgLy8gMi4gTGV0IHRoaXNWYWx1ZSBiZSB0aGUgdGhpcyB2YWx1ZS5cblxuICAgICAgLy8gMy4gTGV0IG9iamVjdCBiZSA/IFRvT2JqZWN0KHRoaXNWYWx1ZSkuXG5cbiAgICAgIC8vIDQuIElmIG9iamVjdCBpcyBhIHBsYXRmb3JtIG9iamVjdCwgdGhlbiBwZXJmb3JtIGEgc2VjdXJpdHlcbiAgICAgIC8vICAgIGNoZWNrLCBwYXNzaW5nOlxuXG4gICAgICAvLyA1LiBJZiBvYmplY3QgaXMgbm90IGEgZGVmYXVsdCBpdGVyYXRvciBvYmplY3QgZm9yIGludGVyZmFjZSxcbiAgICAgIC8vICAgIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICBpZiAoT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpICE9PSBpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgYCduZXh0JyBjYWxsZWQgb24gYW4gb2JqZWN0IHRoYXQgZG9lcyBub3QgaW1wbGVtZW50IGludGVyZmFjZSAke25hbWV9IEl0ZXJhdG9yLmBcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICAvLyA2LiBMZXQgaW5kZXggYmUgb2JqZWN04oCZcyBpbmRleC5cbiAgICAgIC8vIDcuIExldCBraW5kIGJlIG9iamVjdOKAmXMga2luZC5cbiAgICAgIC8vIDguIExldCB2YWx1ZXMgYmUgb2JqZWN04oCZcyB0YXJnZXQncyB2YWx1ZSBwYWlycyB0byBpdGVyYXRlIG92ZXIuXG4gICAgICBjb25zdCB7IGluZGV4LCBraW5kLCB0YXJnZXQgfSA9IG9iamVjdFxuICAgICAgY29uc3QgdmFsdWVzID0gdGFyZ2V0KClcblxuICAgICAgLy8gOS4gTGV0IGxlbiBiZSB0aGUgbGVuZ3RoIG9mIHZhbHVlcy5cbiAgICAgIGNvbnN0IGxlbiA9IHZhbHVlcy5sZW5ndGhcblxuICAgICAgLy8gMTAuIElmIGluZGV4IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBsZW4sIHRoZW4gcmV0dXJuXG4gICAgICAvLyAgICAgQ3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpLlxuICAgICAgaWYgKGluZGV4ID49IGxlbikge1xuICAgICAgICByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH1cbiAgICAgIH1cblxuICAgICAgLy8gMTEuIExldCBwYWlyIGJlIHRoZSBlbnRyeSBpbiB2YWx1ZXMgYXQgaW5kZXggaW5kZXguXG4gICAgICBjb25zdCBwYWlyID0gdmFsdWVzW2luZGV4XVxuXG4gICAgICAvLyAxMi4gU2V0IG9iamVjdOKAmXMgaW5kZXggdG8gaW5kZXggKyAxLlxuICAgICAgb2JqZWN0LmluZGV4ID0gaW5kZXggKyAxXG5cbiAgICAgIC8vIDEzLiBSZXR1cm4gdGhlIGl0ZXJhdG9yIHJlc3VsdCBmb3IgcGFpciBhbmQga2luZC5cbiAgICAgIHJldHVybiBpdGVyYXRvclJlc3VsdChwYWlyLCBraW5kKVxuICAgIH0sXG4gICAgLy8gVGhlIGNsYXNzIHN0cmluZyBvZiBhbiBpdGVyYXRvciBwcm90b3R5cGUgb2JqZWN0IGZvciBhIGdpdmVuIGludGVyZmFjZSBpcyB0aGVcbiAgICAvLyByZXN1bHQgb2YgY29uY2F0ZW5hdGluZyB0aGUgaWRlbnRpZmllciBvZiB0aGUgaW50ZXJmYWNlIGFuZCB0aGUgc3RyaW5nIFwiIEl0ZXJhdG9yXCIuXG4gICAgW1N5bWJvbC50b1N0cmluZ1RhZ106IGAke25hbWV9IEl0ZXJhdG9yYFxuICB9XG5cbiAgLy8gVGhlIFtbUHJvdG90eXBlXV0gaW50ZXJuYWwgc2xvdCBvZiBhbiBpdGVyYXRvciBwcm90b3R5cGUgb2JqZWN0IG11c3QgYmUgJUl0ZXJhdG9yUHJvdG90eXBlJS5cbiAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGksIGVzSXRlcmF0b3JQcm90b3R5cGUpXG4gIC8vIGVzSXRlcmF0b3JQcm90b3R5cGUgbmVlZHMgdG8gYmUgdGhlIHByb3RvdHlwZSBvZiBpXG4gIC8vIHdoaWNoIGlzIHRoZSBwcm90b3R5cGUgb2YgYW4gZW1wdHkgb2JqZWN0LiBZZXMsIGl0J3MgY29uZnVzaW5nLlxuICByZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKHt9LCBpKVxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2l0ZXJhdG9yLXJlc3VsdFxuZnVuY3Rpb24gaXRlcmF0b3JSZXN1bHQgKHBhaXIsIGtpbmQpIHtcbiAgbGV0IHJlc3VsdFxuXG4gIC8vIDEuIExldCByZXN1bHQgYmUgYSB2YWx1ZSBkZXRlcm1pbmVkIGJ5IHRoZSB2YWx1ZSBvZiBraW5kOlxuICBzd2l0Y2ggKGtpbmQpIHtcbiAgICBjYXNlICdrZXknOiB7XG4gICAgICAvLyAxLiBMZXQgaWRsS2V5IGJlIHBhaXLigJlzIGtleS5cbiAgICAgIC8vIDIuIExldCBrZXkgYmUgdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIGlkbEtleSB0byBhblxuICAgICAgLy8gICAgRUNNQVNjcmlwdCB2YWx1ZS5cbiAgICAgIC8vIDMuIHJlc3VsdCBpcyBrZXkuXG4gICAgICByZXN1bHQgPSBwYWlyWzBdXG4gICAgICBicmVha1xuICAgIH1cbiAgICBjYXNlICd2YWx1ZSc6IHtcbiAgICAgIC8vIDEuIExldCBpZGxWYWx1ZSBiZSBwYWly4oCZcyB2YWx1ZS5cbiAgICAgIC8vIDIuIExldCB2YWx1ZSBiZSB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgaWRsVmFsdWUgdG9cbiAgICAgIC8vICAgIGFuIEVDTUFTY3JpcHQgdmFsdWUuXG4gICAgICAvLyAzLiByZXN1bHQgaXMgdmFsdWUuXG4gICAgICByZXN1bHQgPSBwYWlyWzFdXG4gICAgICBicmVha1xuICAgIH1cbiAgICBjYXNlICdrZXkrdmFsdWUnOiB7XG4gICAgICAvLyAxLiBMZXQgaWRsS2V5IGJlIHBhaXLigJlzIGtleS5cbiAgICAgIC8vIDIuIExldCBpZGxWYWx1ZSBiZSBwYWly4oCZcyB2YWx1ZS5cbiAgICAgIC8vIDMuIExldCBrZXkgYmUgdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIGlkbEtleSB0byBhblxuICAgICAgLy8gICAgRUNNQVNjcmlwdCB2YWx1ZS5cbiAgICAgIC8vIDQuIExldCB2YWx1ZSBiZSB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgaWRsVmFsdWUgdG9cbiAgICAgIC8vICAgIGFuIEVDTUFTY3JpcHQgdmFsdWUuXG4gICAgICAvLyA1LiBMZXQgYXJyYXkgYmUgISBBcnJheUNyZWF0ZSgyKS5cbiAgICAgIC8vIDYuIENhbGwgISBDcmVhdGVEYXRhUHJvcGVydHkoYXJyYXksIFwiMFwiLCBrZXkpLlxuICAgICAgLy8gNy4gQ2FsbCAhIENyZWF0ZURhdGFQcm9wZXJ0eShhcnJheSwgXCIxXCIsIHZhbHVlKS5cbiAgICAgIC8vIDguIHJlc3VsdCBpcyBhcnJheS5cbiAgICAgIHJlc3VsdCA9IHBhaXJcbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgLy8gMi4gUmV0dXJuIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QocmVzdWx0LCBmYWxzZSkuXG4gIHJldHVybiB7IHZhbHVlOiByZXN1bHQsIGRvbmU6IGZhbHNlIH1cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNib2R5LWZ1bGx5LXJlYWRcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZnVsbHlSZWFkQm9keSAoYm9keSwgcHJvY2Vzc0JvZHksIHByb2Nlc3NCb2R5RXJyb3IpIHtcbiAgLy8gMS4gSWYgdGFza0Rlc3RpbmF0aW9uIGlzIG51bGwsIHRoZW4gc2V0IHRhc2tEZXN0aW5hdGlvbiB0b1xuICAvLyAgICB0aGUgcmVzdWx0IG9mIHN0YXJ0aW5nIGEgbmV3IHBhcmFsbGVsIHF1ZXVlLlxuXG4gIC8vIDIuIExldCBzdWNjZXNzU3RlcHMgZ2l2ZW4gYSBieXRlIHNlcXVlbmNlIGJ5dGVzIGJlIHRvIHF1ZXVlIGFcbiAgLy8gICAgZmV0Y2ggdGFzayB0byBydW4gcHJvY2Vzc0JvZHkgZ2l2ZW4gYnl0ZXMsIHdpdGggdGFza0Rlc3RpbmF0aW9uLlxuICBjb25zdCBzdWNjZXNzU3RlcHMgPSBwcm9jZXNzQm9keVxuXG4gIC8vIDMuIExldCBlcnJvclN0ZXBzIGJlIHRvIHF1ZXVlIGEgZmV0Y2ggdGFzayB0byBydW4gcHJvY2Vzc0JvZHlFcnJvcixcbiAgLy8gICAgd2l0aCB0YXNrRGVzdGluYXRpb24uXG4gIGNvbnN0IGVycm9yU3RlcHMgPSBwcm9jZXNzQm9keUVycm9yXG5cbiAgLy8gNC4gTGV0IHJlYWRlciBiZSB0aGUgcmVzdWx0IG9mIGdldHRpbmcgYSByZWFkZXIgZm9yIGJvZHnigJlzIHN0cmVhbS5cbiAgLy8gICAgSWYgdGhhdCB0aHJldyBhbiBleGNlcHRpb24sIHRoZW4gcnVuIGVycm9yU3RlcHMgd2l0aCB0aGF0XG4gIC8vICAgIGV4Y2VwdGlvbiBhbmQgcmV0dXJuLlxuICBsZXQgcmVhZGVyXG5cbiAgdHJ5IHtcbiAgICByZWFkZXIgPSBib2R5LnN0cmVhbS5nZXRSZWFkZXIoKVxuICB9IGNhdGNoIChlKSB7XG4gICAgZXJyb3JTdGVwcyhlKVxuICAgIHJldHVyblxuICB9XG5cbiAgLy8gNS4gUmVhZCBhbGwgYnl0ZXMgZnJvbSByZWFkZXIsIGdpdmVuIHN1Y2Nlc3NTdGVwcyBhbmQgZXJyb3JTdGVwcy5cbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZWFkQWxsQnl0ZXMocmVhZGVyKVxuICAgIHN1Y2Nlc3NTdGVwcyhyZXN1bHQpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBlcnJvclN0ZXBzKGUpXG4gIH1cbn1cblxuLyoqIEB0eXBlIHtSZWFkYWJsZVN0cmVhbX0gKi9cbmxldCBSZWFkYWJsZVN0cmVhbSA9IGdsb2JhbFRoaXMuUmVhZGFibGVTdHJlYW1cblxuZnVuY3Rpb24gaXNSZWFkYWJsZVN0cmVhbUxpa2UgKHN0cmVhbSkge1xuICBpZiAoIVJlYWRhYmxlU3RyZWFtKSB7XG4gICAgUmVhZGFibGVTdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0vd2ViJykuUmVhZGFibGVTdHJlYW1cbiAgfVxuXG4gIHJldHVybiBzdHJlYW0gaW5zdGFuY2VvZiBSZWFkYWJsZVN0cmVhbSB8fCAoXG4gICAgc3RyZWFtW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdSZWFkYWJsZVN0cmVhbScgJiZcbiAgICB0eXBlb2Ygc3RyZWFtLnRlZSA9PT0gJ2Z1bmN0aW9uJ1xuICApXG59XG5cbmNvbnN0IE1BWElNVU1fQVJHVU1FTlRfTEVOR1RIID0gNjU1MzVcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNpc29tb3JwaGljLWRlY29kZVxuICogQHBhcmFtIHtudW1iZXJbXXxVaW50OEFycmF5fSBpbnB1dFxuICovXG5mdW5jdGlvbiBpc29tb3JwaGljRGVjb2RlIChpbnB1dCkge1xuICAvLyAxLiBUbyBpc29tb3JwaGljIGRlY29kZSBhIGJ5dGUgc2VxdWVuY2UgaW5wdXQsIHJldHVybiBhIHN0cmluZyB3aG9zZSBjb2RlIHBvaW50XG4gIC8vICAgIGxlbmd0aCBpcyBlcXVhbCB0byBpbnB1dOKAmXMgbGVuZ3RoIGFuZCB3aG9zZSBjb2RlIHBvaW50cyBoYXZlIHRoZSBzYW1lIHZhbHVlc1xuICAvLyAgICBhcyB0aGUgdmFsdWVzIG9mIGlucHV04oCZcyBieXRlcywgaW4gdGhlIHNhbWUgb3JkZXIuXG5cbiAgaWYgKGlucHV0Lmxlbmd0aCA8IE1BWElNVU1fQVJHVU1FTlRfTEVOR1RIKSB7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoLi4uaW5wdXQpXG4gIH1cblxuICByZXR1cm4gaW5wdXQucmVkdWNlKChwcmV2aW91cywgY3VycmVudCkgPT4gcHJldmlvdXMgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGN1cnJlbnQpLCAnJylcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1JlYWRhYmxlU3RyZWFtQ29udHJvbGxlcjxVaW50OEFycmF5Pn0gY29udHJvbGxlclxuICovXG5mdW5jdGlvbiByZWFkYWJsZVN0cmVhbUNsb3NlIChjb250cm9sbGVyKSB7XG4gIHRyeSB7XG4gICAgY29udHJvbGxlci5jbG9zZSgpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIFRPRE86IGFkZCBjb21tZW50IGV4cGxhaW5pbmcgd2h5IHRoaXMgZXJyb3Igb2NjdXJzLlxuICAgIGlmICghZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ0NvbnRyb2xsZXIgaXMgYWxyZWFkeSBjbG9zZWQnKSkge1xuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jaXNvbW9ycGhpYy1lbmNvZGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dFxuICovXG5mdW5jdGlvbiBpc29tb3JwaGljRW5jb2RlIChpbnB1dCkge1xuICAvLyAxLiBBc3NlcnQ6IGlucHV0IGNvbnRhaW5zIG5vIGNvZGUgcG9pbnRzIGdyZWF0ZXIgdGhhbiBVKzAwRkYuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXQubGVuZ3RoOyBpKyspIHtcbiAgICBhc3NlcnQoaW5wdXQuY2hhckNvZGVBdChpKSA8PSAweEZGKVxuICB9XG5cbiAgLy8gMi4gUmV0dXJuIGEgYnl0ZSBzZXF1ZW5jZSB3aG9zZSBsZW5ndGggaXMgZXF1YWwgdG8gaW5wdXTigJlzIGNvZGVcbiAgLy8gICAgcG9pbnQgbGVuZ3RoIGFuZCB3aG9zZSBieXRlcyBoYXZlIHRoZSBzYW1lIHZhbHVlcyBhcyB0aGVcbiAgLy8gICAgdmFsdWVzIG9mIGlucHV04oCZcyBjb2RlIHBvaW50cywgaW4gdGhlIHNhbWUgb3JkZXJcbiAgcmV0dXJuIGlucHV0XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3N0cmVhbXMuc3BlYy53aGF0d2cub3JnLyNyZWFkYWJsZXN0cmVhbWRlZmF1bHRyZWFkZXItcmVhZC1hbGwtYnl0ZXNcbiAqIEBzZWUgaHR0cHM6Ly9zdHJlYW1zLnNwZWMud2hhdHdnLm9yZy8jcmVhZC1sb29wXG4gKiBAcGFyYW0ge1JlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlcn0gcmVhZGVyXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlYWRBbGxCeXRlcyAocmVhZGVyKSB7XG4gIGNvbnN0IGJ5dGVzID0gW11cbiAgbGV0IGJ5dGVMZW5ndGggPSAwXG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBjb25zdCB7IGRvbmUsIHZhbHVlOiBjaHVuayB9ID0gYXdhaXQgcmVhZGVyLnJlYWQoKVxuXG4gICAgaWYgKGRvbmUpIHtcbiAgICAgIC8vIDEuIENhbGwgc3VjY2Vzc1N0ZXBzIHdpdGggYnl0ZXMuXG4gICAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChieXRlcywgYnl0ZUxlbmd0aClcbiAgICB9XG5cbiAgICAvLyAxLiBJZiBjaHVuayBpcyBub3QgYSBVaW50OEFycmF5IG9iamVjdCwgY2FsbCBmYWlsdXJlU3RlcHNcbiAgICAvLyAgICB3aXRoIGEgVHlwZUVycm9yIGFuZCBhYm9ydCB0aGVzZSBzdGVwcy5cbiAgICBpZiAoIWlzVWludDhBcnJheShjaHVuaykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlY2VpdmVkIG5vbi1VaW50OEFycmF5IGNodW5rJylcbiAgICB9XG5cbiAgICAvLyAyLiBBcHBlbmQgdGhlIGJ5dGVzIHJlcHJlc2VudGVkIGJ5IGNodW5rIHRvIGJ5dGVzLlxuICAgIGJ5dGVzLnB1c2goY2h1bmspXG4gICAgYnl0ZUxlbmd0aCArPSBjaHVuay5sZW5ndGhcblxuICAgIC8vIDMuIFJlYWQtbG9vcCBnaXZlbiByZWFkZXIsIGJ5dGVzLCBzdWNjZXNzU3RlcHMsIGFuZCBmYWlsdXJlU3RlcHMuXG4gIH1cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNpcy1sb2NhbFxuICogQHBhcmFtIHtVUkx9IHVybFxuICovXG5mdW5jdGlvbiB1cmxJc0xvY2FsICh1cmwpIHtcbiAgYXNzZXJ0KCdwcm90b2NvbCcgaW4gdXJsKSAvLyBlbnN1cmUgaXQncyBhIHVybCBvYmplY3RcblxuICBjb25zdCBwcm90b2NvbCA9IHVybC5wcm90b2NvbFxuXG4gIHJldHVybiBwcm90b2NvbCA9PT0gJ2Fib3V0OicgfHwgcHJvdG9jb2wgPT09ICdibG9iOicgfHwgcHJvdG9jb2wgPT09ICdkYXRhOidcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ3xVUkx9IHVybFxuICovXG5mdW5jdGlvbiB1cmxIYXNIdHRwc1NjaGVtZSAodXJsKSB7XG4gIGlmICh0eXBlb2YgdXJsID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB1cmwuc3RhcnRzV2l0aCgnaHR0cHM6JylcbiAgfVxuXG4gIHJldHVybiB1cmwucHJvdG9jb2wgPT09ICdodHRwczonXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC1zY2hlbWVcbiAqIEBwYXJhbSB7VVJMfSB1cmxcbiAqL1xuZnVuY3Rpb24gdXJsSXNIdHRwSHR0cHNTY2hlbWUgKHVybCkge1xuICBhc3NlcnQoJ3Byb3RvY29sJyBpbiB1cmwpIC8vIGVuc3VyZSBpdCdzIGEgdXJsIG9iamVjdFxuXG4gIGNvbnN0IHByb3RvY29sID0gdXJsLnByb3RvY29sXG5cbiAgcmV0dXJuIHByb3RvY29sID09PSAnaHR0cDonIHx8IHByb3RvY29sID09PSAnaHR0cHM6J1xufVxuXG4vKipcbiAqIEZldGNoIHN1cHBvcnRzIG5vZGUgPj0gMTYuOC4wLCBidXQgT2JqZWN0Lmhhc093biB3YXMgYWRkZWQgaW4gdjE2LjkuMC5cbiAqL1xuY29uc3QgaGFzT3duID0gT2JqZWN0Lmhhc093biB8fCAoKGRpY3QsIGtleSkgPT4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGRpY3QsIGtleSkpXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc0Fib3J0ZWQsXG4gIGlzQ2FuY2VsbGVkLFxuICBjcmVhdGVEZWZlcnJlZFByb21pc2UsXG4gIFJlYWRhYmxlU3RyZWFtRnJvbSxcbiAgdG9VU1ZTdHJpbmcsXG4gIHRyeVVwZ3JhZGVSZXF1ZXN0VG9BUG90ZW50aWFsbHlUcnVzdHdvcnRoeVVSTCxcbiAgY29hcnNlbmVkU2hhcmVkQ3VycmVudFRpbWUsXG4gIGRldGVybWluZVJlcXVlc3RzUmVmZXJyZXIsXG4gIG1ha2VQb2xpY3lDb250YWluZXIsXG4gIGNsb25lUG9saWN5Q29udGFpbmVyLFxuICBhcHBlbmRGZXRjaE1ldGFkYXRhLFxuICBhcHBlbmRSZXF1ZXN0T3JpZ2luSGVhZGVyLFxuICBUQU9DaGVjayxcbiAgY29yc0NoZWNrLFxuICBjcm9zc09yaWdpblJlc291cmNlUG9saWN5Q2hlY2ssXG4gIGNyZWF0ZU9wYXF1ZVRpbWluZ0luZm8sXG4gIHNldFJlcXVlc3RSZWZlcnJlclBvbGljeU9uUmVkaXJlY3QsXG4gIGlzVmFsaWRIVFRQVG9rZW4sXG4gIHJlcXVlc3RCYWRQb3J0LFxuICByZXF1ZXN0Q3VycmVudFVSTCxcbiAgcmVzcG9uc2VVUkwsXG4gIHJlc3BvbnNlTG9jYXRpb25VUkwsXG4gIGlzQmxvYkxpa2UsXG4gIGlzVVJMUG90ZW50aWFsbHlUcnVzdHdvcnRoeSxcbiAgaXNWYWxpZFJlYXNvblBocmFzZSxcbiAgc2FtZU9yaWdpbixcbiAgbm9ybWFsaXplTWV0aG9kLFxuICBzZXJpYWxpemVKYXZhc2NyaXB0VmFsdWVUb0pTT05TdHJpbmcsXG4gIG1ha2VJdGVyYXRvcixcbiAgaXNWYWxpZEhlYWRlck5hbWUsXG4gIGlzVmFsaWRIZWFkZXJWYWx1ZSxcbiAgaGFzT3duLFxuICBpc0Vycm9yTGlrZSxcbiAgZnVsbHlSZWFkQm9keSxcbiAgYnl0ZXNNYXRjaCxcbiAgaXNSZWFkYWJsZVN0cmVhbUxpa2UsXG4gIHJlYWRhYmxlU3RyZWFtQ2xvc2UsXG4gIGlzb21vcnBoaWNFbmNvZGUsXG4gIGlzb21vcnBoaWNEZWNvZGUsXG4gIHVybElzTG9jYWwsXG4gIHVybEhhc0h0dHBzU2NoZW1lLFxuICB1cmxJc0h0dHBIdHRwc1NjaGVtZSxcbiAgcmVhZEFsbEJ5dGVzLFxuICBub3JtYWxpemVNZXRob2RSZWNvcmQsXG4gIHBhcnNlTWV0YWRhdGFcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBrVXJsOiBTeW1ib2woJ3VybCcpLFxuICBrSGVhZGVyczogU3ltYm9sKCdoZWFkZXJzJyksXG4gIGtTaWduYWw6IFN5bWJvbCgnc2lnbmFsJyksXG4gIGtTdGF0ZTogU3ltYm9sKCdzdGF0ZScpLFxuICBrR3VhcmQ6IFN5bWJvbCgnZ3VhcmQnKSxcbiAga1JlYWxtOiBTeW1ib2woJ3JlYWxtJylcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgdHlwZXMgfSA9IHJlcXVpcmUoJ3V0aWwnKVxuY29uc3QgeyBoYXNPd24sIHRvVVNWU3RyaW5nIH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuXG4vKiogQHR5cGUge2ltcG9ydCgnLi4vLi4vdHlwZXMvd2ViaWRsJykuV2ViaWRsfSAqL1xuY29uc3Qgd2ViaWRsID0ge31cbndlYmlkbC5jb252ZXJ0ZXJzID0ge31cbndlYmlkbC51dGlsID0ge31cbndlYmlkbC5lcnJvcnMgPSB7fVxuXG53ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbiA9IGZ1bmN0aW9uIChtZXNzYWdlKSB7XG4gIHJldHVybiBuZXcgVHlwZUVycm9yKGAke21lc3NhZ2UuaGVhZGVyfTogJHttZXNzYWdlLm1lc3NhZ2V9YClcbn1cblxud2ViaWRsLmVycm9ycy5jb252ZXJzaW9uRmFpbGVkID0gZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgY29uc3QgcGx1cmFsID0gY29udGV4dC50eXBlcy5sZW5ndGggPT09IDEgPyAnJyA6ICcgb25lIG9mJ1xuICBjb25zdCBtZXNzYWdlID1cbiAgICBgJHtjb250ZXh0LmFyZ3VtZW50fSBjb3VsZCBub3QgYmUgY29udmVydGVkIHRvYCArXG4gICAgYCR7cGx1cmFsfTogJHtjb250ZXh0LnR5cGVzLmpvaW4oJywgJyl9LmBcblxuICByZXR1cm4gd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgIGhlYWRlcjogY29udGV4dC5wcmVmaXgsXG4gICAgbWVzc2FnZVxuICB9KVxufVxuXG53ZWJpZGwuZXJyb3JzLmludmFsaWRBcmd1bWVudCA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gIHJldHVybiB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgaGVhZGVyOiBjb250ZXh0LnByZWZpeCxcbiAgICBtZXNzYWdlOiBgXCIke2NvbnRleHQudmFsdWV9XCIgaXMgYW4gaW52YWxpZCAke2NvbnRleHQudHlwZX0uYFxuICB9KVxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2ltcGxlbWVudHNcbndlYmlkbC5icmFuZENoZWNrID0gZnVuY3Rpb24gKFYsIEksIG9wdHMgPSB1bmRlZmluZWQpIHtcbiAgaWYgKG9wdHM/LnN0cmljdCAhPT0gZmFsc2UgJiYgIShWIGluc3RhbmNlb2YgSSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbGxlZ2FsIGludm9jYXRpb24nKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBWPy5bU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gSS5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXVxuICB9XG59XG5cbndlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrID0gZnVuY3Rpb24gKHsgbGVuZ3RoIH0sIG1pbiwgY3R4KSB7XG4gIGlmIChsZW5ndGggPCBtaW4pIHtcbiAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICBtZXNzYWdlOiBgJHttaW59IGFyZ3VtZW50JHttaW4gIT09IDEgPyAncycgOiAnJ30gcmVxdWlyZWQsIGAgK1xuICAgICAgICAgICAgICAgYGJ1dCR7bGVuZ3RoID8gJyBvbmx5JyA6ICcnfSAke2xlbmd0aH0gZm91bmQuYCxcbiAgICAgIC4uLmN0eFxuICAgIH0pXG4gIH1cbn1cblxud2ViaWRsLmlsbGVnYWxDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uICgpIHtcbiAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgIGhlYWRlcjogJ1R5cGVFcnJvcicsXG4gICAgbWVzc2FnZTogJ0lsbGVnYWwgY29uc3RydWN0b3InXG4gIH0pXG59XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZWNtYXNjcmlwdC1kYXRhLXR5cGVzLWFuZC12YWx1ZXNcbndlYmlkbC51dGlsLlR5cGUgPSBmdW5jdGlvbiAoVikge1xuICBzd2l0Y2ggKHR5cGVvZiBWKSB7XG4gICAgY2FzZSAndW5kZWZpbmVkJzogcmV0dXJuICdVbmRlZmluZWQnXG4gICAgY2FzZSAnYm9vbGVhbic6IHJldHVybiAnQm9vbGVhbidcbiAgICBjYXNlICdzdHJpbmcnOiByZXR1cm4gJ1N0cmluZydcbiAgICBjYXNlICdzeW1ib2wnOiByZXR1cm4gJ1N5bWJvbCdcbiAgICBjYXNlICdudW1iZXInOiByZXR1cm4gJ051bWJlcidcbiAgICBjYXNlICdiaWdpbnQnOiByZXR1cm4gJ0JpZ0ludCdcbiAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgY2FzZSAnb2JqZWN0Jzoge1xuICAgICAgaWYgKFYgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuICdOdWxsJ1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gJ09iamVjdCdcbiAgICB9XG4gIH1cbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNhYnN0cmFjdC1vcGRlZi1jb252ZXJ0dG9pbnRcbndlYmlkbC51dGlsLkNvbnZlcnRUb0ludCA9IGZ1bmN0aW9uIChWLCBiaXRMZW5ndGgsIHNpZ25lZG5lc3MsIG9wdHMgPSB7fSkge1xuICBsZXQgdXBwZXJCb3VuZFxuICBsZXQgbG93ZXJCb3VuZFxuXG4gIC8vIDEuIElmIGJpdExlbmd0aCBpcyA2NCwgdGhlbjpcbiAgaWYgKGJpdExlbmd0aCA9PT0gNjQpIHtcbiAgICAvLyAxLiBMZXQgdXBwZXJCb3VuZCBiZSAyXjUzIOKIkiAxLlxuICAgIHVwcGVyQm91bmQgPSBNYXRoLnBvdygyLCA1MykgLSAxXG5cbiAgICAvLyAyLiBJZiBzaWduZWRuZXNzIGlzIFwidW5zaWduZWRcIiwgdGhlbiBsZXQgbG93ZXJCb3VuZCBiZSAwLlxuICAgIGlmIChzaWduZWRuZXNzID09PSAndW5zaWduZWQnKSB7XG4gICAgICBsb3dlckJvdW5kID0gMFxuICAgIH0gZWxzZSB7XG4gICAgICAvLyAzLiBPdGhlcndpc2UgbGV0IGxvd2VyQm91bmQgYmUg4oiSMl41MyArIDEuXG4gICAgICBsb3dlckJvdW5kID0gTWF0aC5wb3coLTIsIDUzKSArIDFcbiAgICB9XG4gIH0gZWxzZSBpZiAoc2lnbmVkbmVzcyA9PT0gJ3Vuc2lnbmVkJykge1xuICAgIC8vIDIuIE90aGVyd2lzZSwgaWYgc2lnbmVkbmVzcyBpcyBcInVuc2lnbmVkXCIsIHRoZW46XG5cbiAgICAvLyAxLiBMZXQgbG93ZXJCb3VuZCBiZSAwLlxuICAgIGxvd2VyQm91bmQgPSAwXG5cbiAgICAvLyAyLiBMZXQgdXBwZXJCb3VuZCBiZSAyXmJpdExlbmd0aCDiiJIgMS5cbiAgICB1cHBlckJvdW5kID0gTWF0aC5wb3coMiwgYml0TGVuZ3RoKSAtIDFcbiAgfSBlbHNlIHtcbiAgICAvLyAzLiBPdGhlcndpc2U6XG5cbiAgICAvLyAxLiBMZXQgbG93ZXJCb3VuZCBiZSAtMl5iaXRMZW5ndGgg4oiSIDEuXG4gICAgbG93ZXJCb3VuZCA9IE1hdGgucG93KC0yLCBiaXRMZW5ndGgpIC0gMVxuXG4gICAgLy8gMi4gTGV0IHVwcGVyQm91bmQgYmUgMl5iaXRMZW5ndGgg4oiSIDEg4oiSIDEuXG4gICAgdXBwZXJCb3VuZCA9IE1hdGgucG93KDIsIGJpdExlbmd0aCAtIDEpIC0gMVxuICB9XG5cbiAgLy8gNC4gTGV0IHggYmUgPyBUb051bWJlcihWKS5cbiAgbGV0IHggPSBOdW1iZXIoVilcblxuICAvLyA1LiBJZiB4IGlzIOKIkjAsIHRoZW4gc2V0IHggdG8gKzAuXG4gIGlmICh4ID09PSAwKSB7XG4gICAgeCA9IDBcbiAgfVxuXG4gIC8vIDYuIElmIHRoZSBjb252ZXJzaW9uIGlzIHRvIGFuIElETCB0eXBlIGFzc29jaWF0ZWRcbiAgLy8gICAgd2l0aCB0aGUgW0VuZm9yY2VSYW5nZV0gZXh0ZW5kZWQgYXR0cmlidXRlLCB0aGVuOlxuICBpZiAob3B0cy5lbmZvcmNlUmFuZ2UgPT09IHRydWUpIHtcbiAgICAvLyAxLiBJZiB4IGlzIE5hTiwgK+KIniwgb3Ig4oiS4oieLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmIChcbiAgICAgIE51bWJlci5pc05hTih4KSB8fFxuICAgICAgeCA9PT0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZIHx8XG4gICAgICB4ID09PSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFlcbiAgICApIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnSW50ZWdlciBjb252ZXJzaW9uJyxcbiAgICAgICAgbWVzc2FnZTogYENvdWxkIG5vdCBjb252ZXJ0ICR7Vn0gdG8gYW4gaW50ZWdlci5gXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDIuIFNldCB4IHRvIEludGVnZXJQYXJ0KHgpLlxuICAgIHggPSB3ZWJpZGwudXRpbC5JbnRlZ2VyUGFydCh4KVxuXG4gICAgLy8gMy4gSWYgeCA8IGxvd2VyQm91bmQgb3IgeCA+IHVwcGVyQm91bmQsIHRoZW5cbiAgICAvLyAgICB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoeCA8IGxvd2VyQm91bmQgfHwgeCA+IHVwcGVyQm91bmQpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnSW50ZWdlciBjb252ZXJzaW9uJyxcbiAgICAgICAgbWVzc2FnZTogYFZhbHVlIG11c3QgYmUgYmV0d2VlbiAke2xvd2VyQm91bmR9LSR7dXBwZXJCb3VuZH0sIGdvdCAke3h9LmBcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gNC4gUmV0dXJuIHguXG4gICAgcmV0dXJuIHhcbiAgfVxuXG4gIC8vIDcuIElmIHggaXMgbm90IE5hTiBhbmQgdGhlIGNvbnZlcnNpb24gaXMgdG8gYW4gSURMXG4gIC8vICAgIHR5cGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBbQ2xhbXBdIGV4dGVuZGVkXG4gIC8vICAgIGF0dHJpYnV0ZSwgdGhlbjpcbiAgaWYgKCFOdW1iZXIuaXNOYU4oeCkgJiYgb3B0cy5jbGFtcCA9PT0gdHJ1ZSkge1xuICAgIC8vIDEuIFNldCB4IHRvIG1pbihtYXgoeCwgbG93ZXJCb3VuZCksIHVwcGVyQm91bmQpLlxuICAgIHggPSBNYXRoLm1pbihNYXRoLm1heCh4LCBsb3dlckJvdW5kKSwgdXBwZXJCb3VuZClcblxuICAgIC8vIDIuIFJvdW5kIHggdG8gdGhlIG5lYXJlc3QgaW50ZWdlciwgY2hvb3NpbmcgdGhlXG4gICAgLy8gICAgZXZlbiBpbnRlZ2VyIGlmIGl0IGxpZXMgaGFsZndheSBiZXR3ZWVuIHR3byxcbiAgICAvLyAgICBhbmQgY2hvb3NpbmcgKzAgcmF0aGVyIHRoYW4g4oiSMC5cbiAgICBpZiAoTWF0aC5mbG9vcih4KSAlIDIgPT09IDApIHtcbiAgICAgIHggPSBNYXRoLmZsb29yKHgpXG4gICAgfSBlbHNlIHtcbiAgICAgIHggPSBNYXRoLmNlaWwoeClcbiAgICB9XG5cbiAgICAvLyAzLiBSZXR1cm4geC5cbiAgICByZXR1cm4geFxuICB9XG5cbiAgLy8gOC4gSWYgeCBpcyBOYU4sICswLCAr4oieLCBvciDiiJLiiJ4sIHRoZW4gcmV0dXJuICswLlxuICBpZiAoXG4gICAgTnVtYmVyLmlzTmFOKHgpIHx8XG4gICAgKHggPT09IDAgJiYgT2JqZWN0LmlzKDAsIHgpKSB8fFxuICAgIHggPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSB8fFxuICAgIHggPT09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWVxuICApIHtcbiAgICByZXR1cm4gMFxuICB9XG5cbiAgLy8gOS4gU2V0IHggdG8gSW50ZWdlclBhcnQoeCkuXG4gIHggPSB3ZWJpZGwudXRpbC5JbnRlZ2VyUGFydCh4KVxuXG4gIC8vIDEwLiBTZXQgeCB0byB4IG1vZHVsbyAyXmJpdExlbmd0aC5cbiAgeCA9IHggJSBNYXRoLnBvdygyLCBiaXRMZW5ndGgpXG5cbiAgLy8gMTEuIElmIHNpZ25lZG5lc3MgaXMgXCJzaWduZWRcIiBhbmQgeCDiiaUgMl5iaXRMZW5ndGgg4oiSIDEsXG4gIC8vICAgIHRoZW4gcmV0dXJuIHgg4oiSIDJeYml0TGVuZ3RoLlxuICBpZiAoc2lnbmVkbmVzcyA9PT0gJ3NpZ25lZCcgJiYgeCA+PSBNYXRoLnBvdygyLCBiaXRMZW5ndGgpIC0gMSkge1xuICAgIHJldHVybiB4IC0gTWF0aC5wb3coMiwgYml0TGVuZ3RoKVxuICB9XG5cbiAgLy8gMTIuIE90aGVyd2lzZSwgcmV0dXJuIHguXG4gIHJldHVybiB4XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jYWJzdHJhY3Qtb3BkZWYtaW50ZWdlcnBhcnRcbndlYmlkbC51dGlsLkludGVnZXJQYXJ0ID0gZnVuY3Rpb24gKG4pIHtcbiAgLy8gMS4gTGV0IHIgYmUgZmxvb3IoYWJzKG4pKS5cbiAgY29uc3QgciA9IE1hdGguZmxvb3IoTWF0aC5hYnMobikpXG5cbiAgLy8gMi4gSWYgbiA8IDAsIHRoZW4gcmV0dXJuIC0xIMOXIHIuXG4gIGlmIChuIDwgMCkge1xuICAgIHJldHVybiAtMSAqIHJcbiAgfVxuXG4gIC8vIDMuIE90aGVyd2lzZSwgcmV0dXJuIHIuXG4gIHJldHVybiByXG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtc2VxdWVuY2VcbndlYmlkbC5zZXF1ZW5jZUNvbnZlcnRlciA9IGZ1bmN0aW9uIChjb252ZXJ0ZXIpIHtcbiAgcmV0dXJuIChWKSA9PiB7XG4gICAgLy8gMS4gSWYgVHlwZShWKSBpcyBub3QgT2JqZWN0LCB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAod2ViaWRsLnV0aWwuVHlwZShWKSAhPT0gJ09iamVjdCcpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnU2VxdWVuY2UnLFxuICAgICAgICBtZXNzYWdlOiBgVmFsdWUgb2YgdHlwZSAke3dlYmlkbC51dGlsLlR5cGUoVil9IGlzIG5vdCBhbiBPYmplY3QuYFxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAyLiBMZXQgbWV0aG9kIGJlID8gR2V0TWV0aG9kKFYsIEBAaXRlcmF0b3IpLlxuICAgIC8qKiBAdHlwZSB7R2VuZXJhdG9yfSAqL1xuICAgIGNvbnN0IG1ldGhvZCA9IFY/LltTeW1ib2wuaXRlcmF0b3JdPy4oKVxuICAgIGNvbnN0IHNlcSA9IFtdXG5cbiAgICAvLyAzLiBJZiBtZXRob2QgaXMgdW5kZWZpbmVkLCB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoXG4gICAgICBtZXRob2QgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgdHlwZW9mIG1ldGhvZC5uZXh0ICE9PSAnZnVuY3Rpb24nXG4gICAgKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ1NlcXVlbmNlJyxcbiAgICAgICAgbWVzc2FnZTogJ09iamVjdCBpcyBub3QgYW4gaXRlcmF0b3IuJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2NyZWF0ZS1zZXF1ZW5jZS1mcm9tLWl0ZXJhYmxlXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IG1ldGhvZC5uZXh0KClcblxuICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgc2VxLnB1c2goY29udmVydGVyKHZhbHVlKSlcbiAgICB9XG5cbiAgICByZXR1cm4gc2VxXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy10by1yZWNvcmRcbndlYmlkbC5yZWNvcmRDb252ZXJ0ZXIgPSBmdW5jdGlvbiAoa2V5Q29udmVydGVyLCB2YWx1ZUNvbnZlcnRlcikge1xuICByZXR1cm4gKE8pID0+IHtcbiAgICAvLyAxLiBJZiBUeXBlKE8pIGlzIG5vdCBPYmplY3QsIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICh3ZWJpZGwudXRpbC5UeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6ICdSZWNvcmQnLFxuICAgICAgICBtZXNzYWdlOiBgVmFsdWUgb2YgdHlwZSAke3dlYmlkbC51dGlsLlR5cGUoTyl9IGlzIG5vdCBhbiBPYmplY3QuYFxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAyLiBMZXQgcmVzdWx0IGJlIGEgbmV3IGVtcHR5IGluc3RhbmNlIG9mIHJlY29yZDxLLCBWPi5cbiAgICBjb25zdCByZXN1bHQgPSB7fVxuXG4gICAgaWYgKCF0eXBlcy5pc1Byb3h5KE8pKSB7XG4gICAgICAvLyBPYmplY3Qua2V5cyBvbmx5IHJldHVybnMgZW51bWVyYWJsZSBwcm9wZXJ0aWVzXG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoTylcblxuICAgICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgICAvLyAxLiBMZXQgdHlwZWRLZXkgYmUga2V5IGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBLLlxuICAgICAgICBjb25zdCB0eXBlZEtleSA9IGtleUNvbnZlcnRlcihrZXkpXG5cbiAgICAgICAgLy8gMi4gTGV0IHZhbHVlIGJlID8gR2V0KE8sIGtleSkuXG4gICAgICAgIC8vIDMuIExldCB0eXBlZFZhbHVlIGJlIHZhbHVlIGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBWLlxuICAgICAgICBjb25zdCB0eXBlZFZhbHVlID0gdmFsdWVDb252ZXJ0ZXIoT1trZXldKVxuXG4gICAgICAgIC8vIDQuIFNldCByZXN1bHRbdHlwZWRLZXldIHRvIHR5cGVkVmFsdWUuXG4gICAgICAgIHJlc3VsdFt0eXBlZEtleV0gPSB0eXBlZFZhbHVlXG4gICAgICB9XG5cbiAgICAgIC8vIDUuIFJldHVybiByZXN1bHQuXG4gICAgICByZXR1cm4gcmVzdWx0XG4gICAgfVxuXG4gICAgLy8gMy4gTGV0IGtleXMgYmUgPyBPLltbT3duUHJvcGVydHlLZXlzXV0oKS5cbiAgICBjb25zdCBrZXlzID0gUmVmbGVjdC5vd25LZXlzKE8pXG5cbiAgICAvLyA0LiBGb3IgZWFjaCBrZXkgb2Yga2V5cy5cbiAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICAvLyAxLiBMZXQgZGVzYyBiZSA/IE8uW1tHZXRPd25Qcm9wZXJ0eV1dKGtleSkuXG4gICAgICBjb25zdCBkZXNjID0gUmVmbGVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywga2V5KVxuXG4gICAgICAvLyAyLiBJZiBkZXNjIGlzIG5vdCB1bmRlZmluZWQgYW5kIGRlc2MuW1tFbnVtZXJhYmxlXV0gaXMgdHJ1ZTpcbiAgICAgIGlmIChkZXNjPy5lbnVtZXJhYmxlKSB7XG4gICAgICAgIC8vIDEuIExldCB0eXBlZEtleSBiZSBrZXkgY29udmVydGVkIHRvIGFuIElETCB2YWx1ZSBvZiB0eXBlIEsuXG4gICAgICAgIGNvbnN0IHR5cGVkS2V5ID0ga2V5Q29udmVydGVyKGtleSlcblxuICAgICAgICAvLyAyLiBMZXQgdmFsdWUgYmUgPyBHZXQoTywga2V5KS5cbiAgICAgICAgLy8gMy4gTGV0IHR5cGVkVmFsdWUgYmUgdmFsdWUgY29udmVydGVkIHRvIGFuIElETCB2YWx1ZSBvZiB0eXBlIFYuXG4gICAgICAgIGNvbnN0IHR5cGVkVmFsdWUgPSB2YWx1ZUNvbnZlcnRlcihPW2tleV0pXG5cbiAgICAgICAgLy8gNC4gU2V0IHJlc3VsdFt0eXBlZEtleV0gdG8gdHlwZWRWYWx1ZS5cbiAgICAgICAgcmVzdWx0W3R5cGVkS2V5XSA9IHR5cGVkVmFsdWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA1LiBSZXR1cm4gcmVzdWx0LlxuICAgIHJldHVybiByZXN1bHRcbiAgfVxufVxuXG53ZWJpZGwuaW50ZXJmYWNlQ29udmVydGVyID0gZnVuY3Rpb24gKGkpIHtcbiAgcmV0dXJuIChWLCBvcHRzID0ge30pID0+IHtcbiAgICBpZiAob3B0cy5zdHJpY3QgIT09IGZhbHNlICYmICEoViBpbnN0YW5jZW9mIGkpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogaS5uYW1lLFxuICAgICAgICBtZXNzYWdlOiBgRXhwZWN0ZWQgJHtWfSB0byBiZSBhbiBpbnN0YW5jZSBvZiAke2kubmFtZX0uYFxuICAgICAgfSlcbiAgICB9XG5cbiAgICByZXR1cm4gVlxuICB9XG59XG5cbndlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyID0gZnVuY3Rpb24gKGNvbnZlcnRlcnMpIHtcbiAgcmV0dXJuIChkaWN0aW9uYXJ5KSA9PiB7XG4gICAgY29uc3QgdHlwZSA9IHdlYmlkbC51dGlsLlR5cGUoZGljdGlvbmFyeSlcbiAgICBjb25zdCBkaWN0ID0ge31cblxuICAgIGlmICh0eXBlID09PSAnTnVsbCcgfHwgdHlwZSA9PT0gJ1VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBkaWN0XG4gICAgfSBlbHNlIGlmICh0eXBlICE9PSAnT2JqZWN0Jykge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6ICdEaWN0aW9uYXJ5JyxcbiAgICAgICAgbWVzc2FnZTogYEV4cGVjdGVkICR7ZGljdGlvbmFyeX0gdG8gYmUgb25lIG9mOiBOdWxsLCBVbmRlZmluZWQsIE9iamVjdC5gXG4gICAgICB9KVxuICAgIH1cblxuICAgIGZvciAoY29uc3Qgb3B0aW9ucyBvZiBjb252ZXJ0ZXJzKSB7XG4gICAgICBjb25zdCB7IGtleSwgZGVmYXVsdFZhbHVlLCByZXF1aXJlZCwgY29udmVydGVyIH0gPSBvcHRpb25zXG5cbiAgICAgIGlmIChyZXF1aXJlZCA9PT0gdHJ1ZSkge1xuICAgICAgICBpZiAoIWhhc093bihkaWN0aW9uYXJ5LCBrZXkpKSB7XG4gICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgaGVhZGVyOiAnRGljdGlvbmFyeScsXG4gICAgICAgICAgICBtZXNzYWdlOiBgTWlzc2luZyByZXF1aXJlZCBrZXkgXCIke2tleX1cIi5gXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsZXQgdmFsdWUgPSBkaWN0aW9uYXJ5W2tleV1cbiAgICAgIGNvbnN0IGhhc0RlZmF1bHQgPSBoYXNPd24ob3B0aW9ucywgJ2RlZmF1bHRWYWx1ZScpXG5cbiAgICAgIC8vIE9ubHkgdXNlIGRlZmF1bHRWYWx1ZSBpZiB2YWx1ZSBpcyB1bmRlZmluZWQgYW5kXG4gICAgICAvLyBhIGRlZmF1bHRWYWx1ZSBvcHRpb25zIHdhcyBwcm92aWRlZC5cbiAgICAgIGlmIChoYXNEZWZhdWx0ICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUgPz8gZGVmYXVsdFZhbHVlXG4gICAgICB9XG5cbiAgICAgIC8vIEEga2V5IGNhbiBiZSBvcHRpb25hbCBhbmQgaGF2ZSBubyBkZWZhdWx0IHZhbHVlLlxuICAgICAgLy8gV2hlbiB0aGlzIGhhcHBlbnMsIGRvIG5vdCBwZXJmb3JtIGEgY29udmVyc2lvbixcbiAgICAgIC8vIGFuZCBkbyBub3QgYXNzaWduIHRoZSBrZXkgYSB2YWx1ZS5cbiAgICAgIGlmIChyZXF1aXJlZCB8fCBoYXNEZWZhdWx0IHx8IHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdmFsdWUgPSBjb252ZXJ0ZXIodmFsdWUpXG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIG9wdGlvbnMuYWxsb3dlZFZhbHVlcyAmJlxuICAgICAgICAgICFvcHRpb25zLmFsbG93ZWRWYWx1ZXMuaW5jbHVkZXModmFsdWUpXG4gICAgICAgICkge1xuICAgICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICAgIGhlYWRlcjogJ0RpY3Rpb25hcnknLFxuICAgICAgICAgICAgbWVzc2FnZTogYCR7dmFsdWV9IGlzIG5vdCBhbiBhY2NlcHRlZCB0eXBlLiBFeHBlY3RlZCBvbmUgb2YgJHtvcHRpb25zLmFsbG93ZWRWYWx1ZXMuam9pbignLCAnKX0uYFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgICAgICBkaWN0W2tleV0gPSB2YWx1ZVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkaWN0XG4gIH1cbn1cblxud2ViaWRsLm51bGxhYmxlQ29udmVydGVyID0gZnVuY3Rpb24gKGNvbnZlcnRlcikge1xuICByZXR1cm4gKFYpID0+IHtcbiAgICBpZiAoViA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIFZcbiAgICB9XG5cbiAgICByZXR1cm4gY29udmVydGVyKFYpXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy1ET01TdHJpbmdcbndlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyA9IGZ1bmN0aW9uIChWLCBvcHRzID0ge30pIHtcbiAgLy8gMS4gSWYgViBpcyBudWxsIGFuZCB0aGUgY29udmVyc2lvbiBpcyB0byBhbiBJREwgdHlwZVxuICAvLyAgICBhc3NvY2lhdGVkIHdpdGggdGhlIFtMZWdhY3lOdWxsVG9FbXB0eVN0cmluZ11cbiAgLy8gICAgZXh0ZW5kZWQgYXR0cmlidXRlLCB0aGVuIHJldHVybiB0aGUgRE9NU3RyaW5nIHZhbHVlXG4gIC8vICAgIHRoYXQgcmVwcmVzZW50cyB0aGUgZW1wdHkgc3RyaW5nLlxuICBpZiAoViA9PT0gbnVsbCAmJiBvcHRzLmxlZ2FjeU51bGxUb0VtcHR5U3RyaW5nKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICAvLyAyLiBMZXQgeCBiZSA/IFRvU3RyaW5nKFYpLlxuICBpZiAodHlwZW9mIFYgPT09ICdzeW1ib2wnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ291bGQgbm90IGNvbnZlcnQgYXJndW1lbnQgb2YgdHlwZSBzeW1ib2wgdG8gc3RyaW5nLicpXG4gIH1cblxuICAvLyAzLiBSZXR1cm4gdGhlIElETCBET01TdHJpbmcgdmFsdWUgdGhhdCByZXByZXNlbnRzIHRoZVxuICAvLyAgICBzYW1lIHNlcXVlbmNlIG9mIGNvZGUgdW5pdHMgYXMgdGhlIG9uZSB0aGVcbiAgLy8gICAgRUNNQVNjcmlwdCBTdHJpbmcgdmFsdWUgeCByZXByZXNlbnRzLlxuICByZXR1cm4gU3RyaW5nKFYpXG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtQnl0ZVN0cmluZ1xud2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyA9IGZ1bmN0aW9uIChWKSB7XG4gIC8vIDEuIExldCB4IGJlID8gVG9TdHJpbmcoVikuXG4gIC8vIE5vdGU6IERPTVN0cmluZyBjb252ZXJ0ZXIgcGVyZm9ybSA/IFRvU3RyaW5nKFYpXG4gIGNvbnN0IHggPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcoVilcblxuICAvLyAyLiBJZiB0aGUgdmFsdWUgb2YgYW55IGVsZW1lbnQgb2YgeCBpcyBncmVhdGVyIHRoYW5cbiAgLy8gICAgMjU1LCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgeC5sZW5ndGg7IGluZGV4KyspIHtcbiAgICBpZiAoeC5jaGFyQ29kZUF0KGluZGV4KSA+IDI1NSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgJ0Nhbm5vdCBjb252ZXJ0IGFyZ3VtZW50IHRvIGEgQnl0ZVN0cmluZyBiZWNhdXNlIHRoZSBjaGFyYWN0ZXIgYXQgJyArXG4gICAgICAgIGBpbmRleCAke2luZGV4fSBoYXMgYSB2YWx1ZSBvZiAke3guY2hhckNvZGVBdChpbmRleCl9IHdoaWNoIGlzIGdyZWF0ZXIgdGhhbiAyNTUuYFxuICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIC8vIDMuIFJldHVybiBhbiBJREwgQnl0ZVN0cmluZyB2YWx1ZSB3aG9zZSBsZW5ndGggaXMgdGhlXG4gIC8vICAgIGxlbmd0aCBvZiB4LCBhbmQgd2hlcmUgdGhlIHZhbHVlIG9mIGVhY2ggZWxlbWVudCBpc1xuICAvLyAgICB0aGUgdmFsdWUgb2YgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudCBvZiB4LlxuICByZXR1cm4geFxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLVVTVlN0cmluZ1xud2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nID0gdG9VU1ZTdHJpbmdcblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy1ib29sZWFuXG53ZWJpZGwuY29udmVydGVycy5ib29sZWFuID0gZnVuY3Rpb24gKFYpIHtcbiAgLy8gMS4gTGV0IHggYmUgdGhlIHJlc3VsdCBvZiBjb21wdXRpbmcgVG9Cb29sZWFuKFYpLlxuICBjb25zdCB4ID0gQm9vbGVhbihWKVxuXG4gIC8vIDIuIFJldHVybiB0aGUgSURMIGJvb2xlYW4gdmFsdWUgdGhhdCBpcyB0aGUgb25lIHRoYXQgcmVwcmVzZW50c1xuICAvLyAgICB0aGUgc2FtZSB0cnV0aCB2YWx1ZSBhcyB0aGUgRUNNQVNjcmlwdCBCb29sZWFuIHZhbHVlIHguXG4gIHJldHVybiB4XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtYW55XG53ZWJpZGwuY29udmVydGVycy5hbnkgPSBmdW5jdGlvbiAoVikge1xuICByZXR1cm4gVlxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLWxvbmctbG9uZ1xud2ViaWRsLmNvbnZlcnRlcnNbJ2xvbmcgbG9uZyddID0gZnVuY3Rpb24gKFYpIHtcbiAgLy8gMS4gTGV0IHggYmUgPyBDb252ZXJ0VG9JbnQoViwgNjQsIFwic2lnbmVkXCIpLlxuICBjb25zdCB4ID0gd2ViaWRsLnV0aWwuQ29udmVydFRvSW50KFYsIDY0LCAnc2lnbmVkJylcblxuICAvLyAyLiBSZXR1cm4gdGhlIElETCBsb25nIGxvbmcgdmFsdWUgdGhhdCByZXByZXNlbnRzXG4gIC8vICAgIHRoZSBzYW1lIG51bWVyaWMgdmFsdWUgYXMgeC5cbiAgcmV0dXJuIHhcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy11bnNpZ25lZC1sb25nLWxvbmdcbndlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBsb25nIGxvbmcnXSA9IGZ1bmN0aW9uIChWKSB7XG4gIC8vIDEuIExldCB4IGJlID8gQ29udmVydFRvSW50KFYsIDY0LCBcInVuc2lnbmVkXCIpLlxuICBjb25zdCB4ID0gd2ViaWRsLnV0aWwuQ29udmVydFRvSW50KFYsIDY0LCAndW5zaWduZWQnKVxuXG4gIC8vIDIuIFJldHVybiB0aGUgSURMIHVuc2lnbmVkIGxvbmcgbG9uZyB2YWx1ZSB0aGF0XG4gIC8vICAgIHJlcHJlc2VudHMgdGhlIHNhbWUgbnVtZXJpYyB2YWx1ZSBhcyB4LlxuICByZXR1cm4geFxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLXVuc2lnbmVkLWxvbmdcbndlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBsb25nJ10gPSBmdW5jdGlvbiAoVikge1xuICAvLyAxLiBMZXQgeCBiZSA/IENvbnZlcnRUb0ludChWLCAzMiwgXCJ1bnNpZ25lZFwiKS5cbiAgY29uc3QgeCA9IHdlYmlkbC51dGlsLkNvbnZlcnRUb0ludChWLCAzMiwgJ3Vuc2lnbmVkJylcblxuICAvLyAyLiBSZXR1cm4gdGhlIElETCB1bnNpZ25lZCBsb25nIHZhbHVlIHRoYXRcbiAgLy8gICAgcmVwcmVzZW50cyB0aGUgc2FtZSBudW1lcmljIHZhbHVlIGFzIHguXG4gIHJldHVybiB4XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtdW5zaWduZWQtc2hvcnRcbndlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBzaG9ydCddID0gZnVuY3Rpb24gKFYsIG9wdHMpIHtcbiAgLy8gMS4gTGV0IHggYmUgPyBDb252ZXJ0VG9JbnQoViwgMTYsIFwidW5zaWduZWRcIikuXG4gIGNvbnN0IHggPSB3ZWJpZGwudXRpbC5Db252ZXJ0VG9JbnQoViwgMTYsICd1bnNpZ25lZCcsIG9wdHMpXG5cbiAgLy8gMi4gUmV0dXJuIHRoZSBJREwgdW5zaWduZWQgc2hvcnQgdmFsdWUgdGhhdCByZXByZXNlbnRzXG4gIC8vICAgIHRoZSBzYW1lIG51bWVyaWMgdmFsdWUgYXMgeC5cbiAgcmV0dXJuIHhcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNpZGwtQXJyYXlCdWZmZXJcbndlYmlkbC5jb252ZXJ0ZXJzLkFycmF5QnVmZmVyID0gZnVuY3Rpb24gKFYsIG9wdHMgPSB7fSkge1xuICAvLyAxLiBJZiBUeXBlKFYpIGlzIG5vdCBPYmplY3QsIG9yIFYgZG9lcyBub3QgaGF2ZSBhblxuICAvLyAgICBbW0FycmF5QnVmZmVyRGF0YV1dIGludGVybmFsIHNsb3QsIHRoZW4gdGhyb3cgYVxuICAvLyAgICBUeXBlRXJyb3IuXG4gIC8vIHNlZTogaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9wZXJ0aWVzLW9mLXRoZS1hcnJheWJ1ZmZlci1pbnN0YW5jZXNcbiAgLy8gc2VlOiBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb3BlcnRpZXMtb2YtdGhlLXNoYXJlZGFycmF5YnVmZmVyLWluc3RhbmNlc1xuICBpZiAoXG4gICAgd2ViaWRsLnV0aWwuVHlwZShWKSAhPT0gJ09iamVjdCcgfHxcbiAgICAhdHlwZXMuaXNBbnlBcnJheUJ1ZmZlcihWKVxuICApIHtcbiAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmNvbnZlcnNpb25GYWlsZWQoe1xuICAgICAgcHJlZml4OiBgJHtWfWAsXG4gICAgICBhcmd1bWVudDogYCR7Vn1gLFxuICAgICAgdHlwZXM6IFsnQXJyYXlCdWZmZXInXVxuICAgIH0pXG4gIH1cblxuICAvLyAyLiBJZiB0aGUgY29udmVyc2lvbiBpcyBub3QgdG8gYW4gSURMIHR5cGUgYXNzb2NpYXRlZFxuICAvLyAgICB3aXRoIHRoZSBbQWxsb3dTaGFyZWRdIGV4dGVuZGVkIGF0dHJpYnV0ZSwgYW5kXG4gIC8vICAgIElzU2hhcmVkQXJyYXlCdWZmZXIoVikgaXMgdHJ1ZSwgdGhlbiB0aHJvdyBhXG4gIC8vICAgIFR5cGVFcnJvci5cbiAgaWYgKG9wdHMuYWxsb3dTaGFyZWQgPT09IGZhbHNlICYmIHR5cGVzLmlzU2hhcmVkQXJyYXlCdWZmZXIoVikpIHtcbiAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICBoZWFkZXI6ICdBcnJheUJ1ZmZlcicsXG4gICAgICBtZXNzYWdlOiAnU2hhcmVkQXJyYXlCdWZmZXIgaXMgbm90IGFsbG93ZWQuJ1xuICAgIH0pXG4gIH1cblxuICAvLyAzLiBJZiB0aGUgY29udmVyc2lvbiBpcyBub3QgdG8gYW4gSURMIHR5cGUgYXNzb2NpYXRlZFxuICAvLyAgICB3aXRoIHRoZSBbQWxsb3dSZXNpemFibGVdIGV4dGVuZGVkIGF0dHJpYnV0ZSwgYW5kXG4gIC8vICAgIElzUmVzaXphYmxlQXJyYXlCdWZmZXIoVikgaXMgdHJ1ZSwgdGhlbiB0aHJvdyBhXG4gIC8vICAgIFR5cGVFcnJvci5cbiAgLy8gTm90ZTogcmVzaXphYmxlIEFycmF5QnVmZmVycyBhcmUgY3VycmVudGx5IGEgcHJvcG9zYWwuXG5cbiAgLy8gNC4gUmV0dXJuIHRoZSBJREwgQXJyYXlCdWZmZXIgdmFsdWUgdGhhdCBpcyBhXG4gIC8vICAgIHJlZmVyZW5jZSB0byB0aGUgc2FtZSBvYmplY3QgYXMgVi5cbiAgcmV0dXJuIFZcbn1cblxud2ViaWRsLmNvbnZlcnRlcnMuVHlwZWRBcnJheSA9IGZ1bmN0aW9uIChWLCBULCBvcHRzID0ge30pIHtcbiAgLy8gMS4gTGV0IFQgYmUgdGhlIElETCB0eXBlIFYgaXMgYmVpbmcgY29udmVydGVkIHRvLlxuXG4gIC8vIDIuIElmIFR5cGUoVikgaXMgbm90IE9iamVjdCwgb3IgViBkb2VzIG5vdCBoYXZlIGFcbiAgLy8gICAgW1tUeXBlZEFycmF5TmFtZV1dIGludGVybmFsIHNsb3Qgd2l0aCBhIHZhbHVlXG4gIC8vICAgIGVxdWFsIHRvIFTigJlzIG5hbWUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIGlmIChcbiAgICB3ZWJpZGwudXRpbC5UeXBlKFYpICE9PSAnT2JqZWN0JyB8fFxuICAgICF0eXBlcy5pc1R5cGVkQXJyYXkoVikgfHxcbiAgICBWLmNvbnN0cnVjdG9yLm5hbWUgIT09IFQubmFtZVxuICApIHtcbiAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmNvbnZlcnNpb25GYWlsZWQoe1xuICAgICAgcHJlZml4OiBgJHtULm5hbWV9YCxcbiAgICAgIGFyZ3VtZW50OiBgJHtWfWAsXG4gICAgICB0eXBlczogW1QubmFtZV1cbiAgICB9KVxuICB9XG5cbiAgLy8gMy4gSWYgdGhlIGNvbnZlcnNpb24gaXMgbm90IHRvIGFuIElETCB0eXBlIGFzc29jaWF0ZWRcbiAgLy8gICAgd2l0aCB0aGUgW0FsbG93U2hhcmVkXSBleHRlbmRlZCBhdHRyaWJ1dGUsIGFuZFxuICAvLyAgICBJc1NoYXJlZEFycmF5QnVmZmVyKFYuW1tWaWV3ZWRBcnJheUJ1ZmZlcl1dKSBpc1xuICAvLyAgICB0cnVlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICBpZiAob3B0cy5hbGxvd1NoYXJlZCA9PT0gZmFsc2UgJiYgdHlwZXMuaXNTaGFyZWRBcnJheUJ1ZmZlcihWLmJ1ZmZlcikpIHtcbiAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICBoZWFkZXI6ICdBcnJheUJ1ZmZlcicsXG4gICAgICBtZXNzYWdlOiAnU2hhcmVkQXJyYXlCdWZmZXIgaXMgbm90IGFsbG93ZWQuJ1xuICAgIH0pXG4gIH1cblxuICAvLyA0LiBJZiB0aGUgY29udmVyc2lvbiBpcyBub3QgdG8gYW4gSURMIHR5cGUgYXNzb2NpYXRlZFxuICAvLyAgICB3aXRoIHRoZSBbQWxsb3dSZXNpemFibGVdIGV4dGVuZGVkIGF0dHJpYnV0ZSwgYW5kXG4gIC8vICAgIElzUmVzaXphYmxlQXJyYXlCdWZmZXIoVi5bW1ZpZXdlZEFycmF5QnVmZmVyXV0pIGlzXG4gIC8vICAgIHRydWUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIC8vIE5vdGU6IHJlc2l6YWJsZSBhcnJheSBidWZmZXJzIGFyZSBjdXJyZW50bHkgYSBwcm9wb3NhbFxuXG4gIC8vIDUuIFJldHVybiB0aGUgSURMIHZhbHVlIG9mIHR5cGUgVCB0aGF0IGlzIGEgcmVmZXJlbmNlXG4gIC8vICAgIHRvIHRoZSBzYW1lIG9iamVjdCBhcyBWLlxuICByZXR1cm4gVlxufVxuXG53ZWJpZGwuY29udmVydGVycy5EYXRhVmlldyA9IGZ1bmN0aW9uIChWLCBvcHRzID0ge30pIHtcbiAgLy8gMS4gSWYgVHlwZShWKSBpcyBub3QgT2JqZWN0LCBvciBWIGRvZXMgbm90IGhhdmUgYVxuICAvLyAgICBbW0RhdGFWaWV3XV0gaW50ZXJuYWwgc2xvdCwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKHdlYmlkbC51dGlsLlR5cGUoVikgIT09ICdPYmplY3QnIHx8ICF0eXBlcy5pc0RhdGFWaWV3KFYpKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgaGVhZGVyOiAnRGF0YVZpZXcnLFxuICAgICAgbWVzc2FnZTogJ09iamVjdCBpcyBub3QgYSBEYXRhVmlldy4nXG4gICAgfSlcbiAgfVxuXG4gIC8vIDIuIElmIHRoZSBjb252ZXJzaW9uIGlzIG5vdCB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtBbGxvd1NoYXJlZF0gZXh0ZW5kZWQgYXR0cmlidXRlLCBhbmRcbiAgLy8gICAgSXNTaGFyZWRBcnJheUJ1ZmZlcihWLltbVmlld2VkQXJyYXlCdWZmZXJdXSkgaXMgdHJ1ZSxcbiAgLy8gICAgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKG9wdHMuYWxsb3dTaGFyZWQgPT09IGZhbHNlICYmIHR5cGVzLmlzU2hhcmVkQXJyYXlCdWZmZXIoVi5idWZmZXIpKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgaGVhZGVyOiAnQXJyYXlCdWZmZXInLFxuICAgICAgbWVzc2FnZTogJ1NoYXJlZEFycmF5QnVmZmVyIGlzIG5vdCBhbGxvd2VkLidcbiAgICB9KVxuICB9XG5cbiAgLy8gMy4gSWYgdGhlIGNvbnZlcnNpb24gaXMgbm90IHRvIGFuIElETCB0eXBlIGFzc29jaWF0ZWRcbiAgLy8gICAgd2l0aCB0aGUgW0FsbG93UmVzaXphYmxlXSBleHRlbmRlZCBhdHRyaWJ1dGUsIGFuZFxuICAvLyAgICBJc1Jlc2l6YWJsZUFycmF5QnVmZmVyKFYuW1tWaWV3ZWRBcnJheUJ1ZmZlcl1dKSBpc1xuICAvLyAgICB0cnVlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAvLyBOb3RlOiByZXNpemFibGUgQXJyYXlCdWZmZXJzIGFyZSBjdXJyZW50bHkgYSBwcm9wb3NhbFxuXG4gIC8vIDQuIFJldHVybiB0aGUgSURMIERhdGFWaWV3IHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2VcbiAgLy8gICAgdG8gdGhlIHNhbWUgb2JqZWN0IGFzIFYuXG4gIHJldHVybiBWXG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jQnVmZmVyU291cmNlXG53ZWJpZGwuY29udmVydGVycy5CdWZmZXJTb3VyY2UgPSBmdW5jdGlvbiAoViwgb3B0cyA9IHt9KSB7XG4gIGlmICh0eXBlcy5pc0FueUFycmF5QnVmZmVyKFYpKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkFycmF5QnVmZmVyKFYsIG9wdHMpXG4gIH1cblxuICBpZiAodHlwZXMuaXNUeXBlZEFycmF5KFYpKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLlR5cGVkQXJyYXkoViwgVi5jb25zdHJ1Y3RvcilcbiAgfVxuXG4gIGlmICh0eXBlcy5pc0RhdGFWaWV3KFYpKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkRhdGFWaWV3KFYsIG9wdHMpXG4gIH1cblxuICB0aHJvdyBuZXcgVHlwZUVycm9yKGBDb3VsZCBub3QgY29udmVydCAke1Z9IHRvIGEgQnVmZmVyU291cmNlLmApXG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxCeXRlU3RyaW5nPiddID0gd2ViaWRsLnNlcXVlbmNlQ29udmVydGVyKFxuICB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nXG4pXG5cbndlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxzZXF1ZW5jZTxCeXRlU3RyaW5nPj4nXSA9IHdlYmlkbC5zZXF1ZW5jZUNvbnZlcnRlcihcbiAgd2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPEJ5dGVTdHJpbmc+J11cbilcblxud2ViaWRsLmNvbnZlcnRlcnNbJ3JlY29yZDxCeXRlU3RyaW5nLCBCeXRlU3RyaW5nPiddID0gd2ViaWRsLnJlY29yZENvbnZlcnRlcihcbiAgd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyxcbiAgd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZ1xuKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgd2ViaWRsXG59XG4iLAogICAgImNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7IGF0b2IgfSA9IHJlcXVpcmUoJ2J1ZmZlcicpXG5jb25zdCB7IGlzb21vcnBoaWNEZWNvZGUgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5cbmNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9taW1lc25pZmYuc3BlYy53aGF0d2cub3JnLyNodHRwLXRva2VuLWNvZGUtcG9pbnRcbiAqL1xuY29uc3QgSFRUUF9UT0tFTl9DT0RFUE9JTlRTID0gL15bISMkJSYnKistLl5ffH5BLVphLXowLTldKyQvXG5jb25zdCBIVFRQX1dISVRFU1BBQ0VfUkVHRVggPSAvKFxcdTAwMEF8XFx1MDAwRHxcXHUwMDA5fFxcdTAwMjApLyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9taW1lc25pZmYuc3BlYy53aGF0d2cub3JnLyNodHRwLXF1b3RlZC1zdHJpbmctdG9rZW4tY29kZS1wb2ludFxuICovXG5jb25zdCBIVFRQX1FVT1RFRF9TVFJJTkdfVE9LRU5TID0gL1tcXHUwMDA5fFxcdTAwMjAtXFx1MDA3RXxcXHUwMDgwLVxcdTAwRkZdLyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkYXRhLXVybC1wcm9jZXNzb3Jcbi8qKiBAcGFyYW0ge1VSTH0gZGF0YVVSTCAqL1xuZnVuY3Rpb24gZGF0YVVSTFByb2Nlc3NvciAoZGF0YVVSTCkge1xuICAvLyAxLiBBc3NlcnQ6IGRhdGFVUkzigJlzIHNjaGVtZSBpcyBcImRhdGFcIi5cbiAgYXNzZXJ0KGRhdGFVUkwucHJvdG9jb2wgPT09ICdkYXRhOicpXG5cbiAgLy8gMi4gTGV0IGlucHV0IGJlIHRoZSByZXN1bHQgb2YgcnVubmluZyB0aGUgVVJMXG4gIC8vIHNlcmlhbGl6ZXIgb24gZGF0YVVSTCB3aXRoIGV4Y2x1ZGUgZnJhZ21lbnRcbiAgLy8gc2V0IHRvIHRydWUuXG4gIGxldCBpbnB1dCA9IFVSTFNlcmlhbGl6ZXIoZGF0YVVSTCwgdHJ1ZSlcblxuICAvLyAzLiBSZW1vdmUgdGhlIGxlYWRpbmcgXCJkYXRhOlwiIHN0cmluZyBmcm9tIGlucHV0LlxuICBpbnB1dCA9IGlucHV0LnNsaWNlKDUpXG5cbiAgLy8gNC4gTGV0IHBvc2l0aW9uIHBvaW50IGF0IHRoZSBzdGFydCBvZiBpbnB1dC5cbiAgY29uc3QgcG9zaXRpb24gPSB7IHBvc2l0aW9uOiAwIH1cblxuICAvLyA1LiBMZXQgbWltZVR5cGUgYmUgdGhlIHJlc3VsdCBvZiBjb2xsZWN0aW5nIGFcbiAgLy8gc2VxdWVuY2Ugb2YgY29kZSBwb2ludHMgdGhhdCBhcmUgbm90IGVxdWFsXG4gIC8vIHRvIFUrMDAyQyAoLCksIGdpdmVuIHBvc2l0aW9uLlxuICBsZXQgbWltZVR5cGUgPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdChcbiAgICAnLCcsXG4gICAgaW5wdXQsXG4gICAgcG9zaXRpb25cbiAgKVxuXG4gIC8vIDYuIFN0cmlwIGxlYWRpbmcgYW5kIHRyYWlsaW5nIEFTQ0lJIHdoaXRlc3BhY2VcbiAgLy8gZnJvbSBtaW1lVHlwZS5cbiAgLy8gVW5kaWNpIGltcGxlbWVudGF0aW9uIG5vdGU6IHdlIG5lZWQgdG8gc3RvcmUgdGhlXG4gIC8vIGxlbmd0aCBiZWNhdXNlIGlmIHRoZSBtaW1ldHlwZSBoYXMgc3BhY2VzIHJlbW92ZWQsXG4gIC8vIHRoZSB3cm9uZyBhbW91bnQgd2lsbCBiZSBzbGljZWQgZnJvbSB0aGUgaW5wdXQgaW5cbiAgLy8gc3RlcCAjOVxuICBjb25zdCBtaW1lVHlwZUxlbmd0aCA9IG1pbWVUeXBlLmxlbmd0aFxuICBtaW1lVHlwZSA9IHJlbW92ZUFTQ0lJV2hpdGVzcGFjZShtaW1lVHlwZSwgdHJ1ZSwgdHJ1ZSlcblxuICAvLyA3LiBJZiBwb3NpdGlvbiBpcyBwYXN0IHRoZSBlbmQgb2YgaW5wdXQsIHRoZW5cbiAgLy8gcmV0dXJuIGZhaWx1cmVcbiAgaWYgKHBvc2l0aW9uLnBvc2l0aW9uID49IGlucHV0Lmxlbmd0aCkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIC8vIDguIEFkdmFuY2UgcG9zaXRpb24gYnkgMS5cbiAgcG9zaXRpb24ucG9zaXRpb24rK1xuXG4gIC8vIDkuIExldCBlbmNvZGVkQm9keSBiZSB0aGUgcmVtYWluZGVyIG9mIGlucHV0LlxuICBjb25zdCBlbmNvZGVkQm9keSA9IGlucHV0LnNsaWNlKG1pbWVUeXBlTGVuZ3RoICsgMSlcblxuICAvLyAxMC4gTGV0IGJvZHkgYmUgdGhlIHBlcmNlbnQtZGVjb2Rpbmcgb2YgZW5jb2RlZEJvZHkuXG4gIGxldCBib2R5ID0gc3RyaW5nUGVyY2VudERlY29kZShlbmNvZGVkQm9keSlcblxuICAvLyAxMS4gSWYgbWltZVR5cGUgZW5kcyB3aXRoIFUrMDAzQiAoOyksIGZvbGxvd2VkIGJ5XG4gIC8vIHplcm8gb3IgbW9yZSBVKzAwMjAgU1BBQ0UsIGZvbGxvd2VkIGJ5IGFuIEFTQ0lJXG4gIC8vIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yIFwiYmFzZTY0XCIsIHRoZW46XG4gIGlmICgvOyhcXHUwMDIwKXswLH1iYXNlNjQkL2kudGVzdChtaW1lVHlwZSkpIHtcbiAgICAvLyAxLiBMZXQgc3RyaW5nQm9keSBiZSB0aGUgaXNvbW9ycGhpYyBkZWNvZGUgb2YgYm9keS5cbiAgICBjb25zdCBzdHJpbmdCb2R5ID0gaXNvbW9ycGhpY0RlY29kZShib2R5KVxuXG4gICAgLy8gMi4gU2V0IGJvZHkgdG8gdGhlIGZvcmdpdmluZy1iYXNlNjQgZGVjb2RlIG9mXG4gICAgLy8gc3RyaW5nQm9keS5cbiAgICBib2R5ID0gZm9yZ2l2aW5nQmFzZTY0KHN0cmluZ0JvZHkpXG5cbiAgICAvLyAzLiBJZiBib2R5IGlzIGZhaWx1cmUsIHRoZW4gcmV0dXJuIGZhaWx1cmUuXG4gICAgaWYgKGJvZHkgPT09ICdmYWlsdXJlJykge1xuICAgICAgcmV0dXJuICdmYWlsdXJlJ1xuICAgIH1cblxuICAgIC8vIDQuIFJlbW92ZSB0aGUgbGFzdCA2IGNvZGUgcG9pbnRzIGZyb20gbWltZVR5cGUuXG4gICAgbWltZVR5cGUgPSBtaW1lVHlwZS5zbGljZSgwLCAtNilcblxuICAgIC8vIDUuIFJlbW92ZSB0cmFpbGluZyBVKzAwMjAgU1BBQ0UgY29kZSBwb2ludHMgZnJvbSBtaW1lVHlwZSxcbiAgICAvLyBpZiBhbnkuXG4gICAgbWltZVR5cGUgPSBtaW1lVHlwZS5yZXBsYWNlKC8oXFx1MDAyMCkrJC8sICcnKVxuXG4gICAgLy8gNi4gUmVtb3ZlIHRoZSBsYXN0IFUrMDAzQiAoOykgY29kZSBwb2ludCBmcm9tIG1pbWVUeXBlLlxuICAgIG1pbWVUeXBlID0gbWltZVR5cGUuc2xpY2UoMCwgLTEpXG4gIH1cblxuICAvLyAxMi4gSWYgbWltZVR5cGUgc3RhcnRzIHdpdGggVSswMDNCICg7KSwgdGhlbiBwcmVwZW5kXG4gIC8vIFwidGV4dC9wbGFpblwiIHRvIG1pbWVUeXBlLlxuICBpZiAobWltZVR5cGUuc3RhcnRzV2l0aCgnOycpKSB7XG4gICAgbWltZVR5cGUgPSAndGV4dC9wbGFpbicgKyBtaW1lVHlwZVxuICB9XG5cbiAgLy8gMTMuIExldCBtaW1lVHlwZVJlY29yZCBiZSB0aGUgcmVzdWx0IG9mIHBhcnNpbmdcbiAgLy8gbWltZVR5cGUuXG4gIGxldCBtaW1lVHlwZVJlY29yZCA9IHBhcnNlTUlNRVR5cGUobWltZVR5cGUpXG5cbiAgLy8gMTQuIElmIG1pbWVUeXBlUmVjb3JkIGlzIGZhaWx1cmUsIHRoZW4gc2V0XG4gIC8vIG1pbWVUeXBlUmVjb3JkIHRvIHRleHQvcGxhaW47Y2hhcnNldD1VUy1BU0NJSS5cbiAgaWYgKG1pbWVUeXBlUmVjb3JkID09PSAnZmFpbHVyZScpIHtcbiAgICBtaW1lVHlwZVJlY29yZCA9IHBhcnNlTUlNRVR5cGUoJ3RleHQvcGxhaW47Y2hhcnNldD1VUy1BU0NJSScpXG4gIH1cblxuICAvLyAxNS4gUmV0dXJuIGEgbmV3IGRhdGE6IFVSTCBzdHJ1Y3Qgd2hvc2UgTUlNRVxuICAvLyB0eXBlIGlzIG1pbWVUeXBlUmVjb3JkIGFuZCBib2R5IGlzIGJvZHkuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkYXRhLXVybC1zdHJ1Y3RcbiAgcmV0dXJuIHsgbWltZVR5cGU6IG1pbWVUeXBlUmVjb3JkLCBib2R5IH1cbn1cblxuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LXVybC1zZXJpYWxpemVyXG4vKipcbiAqIEBwYXJhbSB7VVJMfSB1cmxcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gZXhjbHVkZUZyYWdtZW50XG4gKi9cbmZ1bmN0aW9uIFVSTFNlcmlhbGl6ZXIgKHVybCwgZXhjbHVkZUZyYWdtZW50ID0gZmFsc2UpIHtcbiAgaWYgKCFleGNsdWRlRnJhZ21lbnQpIHtcbiAgICByZXR1cm4gdXJsLmhyZWZcbiAgfVxuXG4gIGNvbnN0IGhyZWYgPSB1cmwuaHJlZlxuICBjb25zdCBoYXNoTGVuZ3RoID0gdXJsLmhhc2gubGVuZ3RoXG5cbiAgcmV0dXJuIGhhc2hMZW5ndGggPT09IDAgPyBocmVmIDogaHJlZi5zdWJzdHJpbmcoMCwgaHJlZi5sZW5ndGggLSBoYXNoTGVuZ3RoKVxufVxuXG4vLyBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jY29sbGVjdC1hLXNlcXVlbmNlLW9mLWNvZGUtcG9pbnRzXG4vKipcbiAqIEBwYXJhbSB7KGNoYXI6IHN0cmluZykgPT4gYm9vbGVhbn0gY29uZGl0aW9uXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRcbiAqIEBwYXJhbSB7eyBwb3NpdGlvbjogbnVtYmVyIH19IHBvc2l0aW9uXG4gKi9cbmZ1bmN0aW9uIGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMgKGNvbmRpdGlvbiwgaW5wdXQsIHBvc2l0aW9uKSB7XG4gIC8vIDEuIExldCByZXN1bHQgYmUgdGhlIGVtcHR5IHN0cmluZy5cbiAgbGV0IHJlc3VsdCA9ICcnXG5cbiAgLy8gMi4gV2hpbGUgcG9zaXRpb24gZG9lc27igJl0IHBvaW50IHBhc3QgdGhlIGVuZCBvZiBpbnB1dCBhbmQgdGhlXG4gIC8vIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluIGlucHV0IG1lZXRzIHRoZSBjb25kaXRpb24gY29uZGl0aW9uOlxuICB3aGlsZSAocG9zaXRpb24ucG9zaXRpb24gPCBpbnB1dC5sZW5ndGggJiYgY29uZGl0aW9uKGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXSkpIHtcbiAgICAvLyAxLiBBcHBlbmQgdGhhdCBjb2RlIHBvaW50IHRvIHRoZSBlbmQgb2YgcmVzdWx0LlxuICAgIHJlc3VsdCArPSBpbnB1dFtwb3NpdGlvbi5wb3NpdGlvbl1cblxuICAgIC8vIDIuIEFkdmFuY2UgcG9zaXRpb24gYnkgMS5cbiAgICBwb3NpdGlvbi5wb3NpdGlvbisrXG4gIH1cblxuICAvLyAzLiBSZXR1cm4gcmVzdWx0LlxuICByZXR1cm4gcmVzdWx0XG59XG5cbi8qKlxuICogQSBmYXN0ZXIgY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50cyB0aGF0IG9ubHkgd29ya3Mgd2hlbiBjb21wYXJpbmcgYSBzaW5nbGUgY2hhcmFjdGVyLlxuICogQHBhcmFtIHtzdHJpbmd9IGNoYXJcbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dFxuICogQHBhcmFtIHt7IHBvc2l0aW9uOiBudW1iZXIgfX0gcG9zaXRpb25cbiAqL1xuZnVuY3Rpb24gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QgKGNoYXIsIGlucHV0LCBwb3NpdGlvbikge1xuICBjb25zdCBpZHggPSBpbnB1dC5pbmRleE9mKGNoYXIsIHBvc2l0aW9uLnBvc2l0aW9uKVxuICBjb25zdCBzdGFydCA9IHBvc2l0aW9uLnBvc2l0aW9uXG5cbiAgaWYgKGlkeCA9PT0gLTEpIHtcbiAgICBwb3NpdGlvbi5wb3NpdGlvbiA9IGlucHV0Lmxlbmd0aFxuICAgIHJldHVybiBpbnB1dC5zbGljZShzdGFydClcbiAgfVxuXG4gIHBvc2l0aW9uLnBvc2l0aW9uID0gaWR4XG4gIHJldHVybiBpbnB1dC5zbGljZShzdGFydCwgcG9zaXRpb24ucG9zaXRpb24pXG59XG5cbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jc3RyaW5nLXBlcmNlbnQtZGVjb2RlXG4vKiogQHBhcmFtIHtzdHJpbmd9IGlucHV0ICovXG5mdW5jdGlvbiBzdHJpbmdQZXJjZW50RGVjb2RlIChpbnB1dCkge1xuICAvLyAxLiBMZXQgYnl0ZXMgYmUgdGhlIFVURi04IGVuY29kaW5nIG9mIGlucHV0LlxuICBjb25zdCBieXRlcyA9IGVuY29kZXIuZW5jb2RlKGlucHV0KVxuXG4gIC8vIDIuIFJldHVybiB0aGUgcGVyY2VudC1kZWNvZGluZyBvZiBieXRlcy5cbiAgcmV0dXJuIHBlcmNlbnREZWNvZGUoYnl0ZXMpXG59XG5cbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jcGVyY2VudC1kZWNvZGVcbi8qKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGlucHV0ICovXG5mdW5jdGlvbiBwZXJjZW50RGVjb2RlIChpbnB1dCkge1xuICAvLyAxLiBMZXQgb3V0cHV0IGJlIGFuIGVtcHR5IGJ5dGUgc2VxdWVuY2UuXG4gIC8qKiBAdHlwZSB7bnVtYmVyW119ICovXG4gIGNvbnN0IG91dHB1dCA9IFtdXG5cbiAgLy8gMi4gRm9yIGVhY2ggYnl0ZSBieXRlIGluIGlucHV0OlxuICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgYnl0ZSA9IGlucHV0W2ldXG5cbiAgICAvLyAxLiBJZiBieXRlIGlzIG5vdCAweDI1ICglKSwgdGhlbiBhcHBlbmQgYnl0ZSB0byBvdXRwdXQuXG4gICAgaWYgKGJ5dGUgIT09IDB4MjUpIHtcbiAgICAgIG91dHB1dC5wdXNoKGJ5dGUpXG5cbiAgICAvLyAyLiBPdGhlcndpc2UsIGlmIGJ5dGUgaXMgMHgyNSAoJSkgYW5kIHRoZSBuZXh0IHR3byBieXRlc1xuICAgIC8vIGFmdGVyIGJ5dGUgaW4gaW5wdXQgYXJlIG5vdCBpbiB0aGUgcmFuZ2VzXG4gICAgLy8gMHgzMCAoMCkgdG8gMHgzOSAoOSksIDB4NDEgKEEpIHRvIDB4NDYgKEYpLFxuICAgIC8vIGFuZCAweDYxIChhKSB0byAweDY2IChmKSwgYWxsIGluY2x1c2l2ZSwgYXBwZW5kIGJ5dGVcbiAgICAvLyB0byBvdXRwdXQuXG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGJ5dGUgPT09IDB4MjUgJiZcbiAgICAgICEvXlswLTlBLUZhLWZdezJ9JC9pLnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShpbnB1dFtpICsgMV0sIGlucHV0W2kgKyAyXSkpXG4gICAgKSB7XG4gICAgICBvdXRwdXQucHVzaCgweDI1KVxuXG4gICAgLy8gMy4gT3RoZXJ3aXNlOlxuICAgIH0gZWxzZSB7XG4gICAgICAvLyAxLiBMZXQgYnl0ZVBvaW50IGJlIHRoZSB0d28gYnl0ZXMgYWZ0ZXIgYnl0ZSBpbiBpbnB1dCxcbiAgICAgIC8vIGRlY29kZWQsIGFuZCB0aGVuIGludGVycHJldGVkIGFzIGhleGFkZWNpbWFsIG51bWJlci5cbiAgICAgIGNvbnN0IG5leHRUd29CeXRlcyA9IFN0cmluZy5mcm9tQ2hhckNvZGUoaW5wdXRbaSArIDFdLCBpbnB1dFtpICsgMl0pXG4gICAgICBjb25zdCBieXRlUG9pbnQgPSBOdW1iZXIucGFyc2VJbnQobmV4dFR3b0J5dGVzLCAxNilcblxuICAgICAgLy8gMi4gQXBwZW5kIGEgYnl0ZSB3aG9zZSB2YWx1ZSBpcyBieXRlUG9pbnQgdG8gb3V0cHV0LlxuICAgICAgb3V0cHV0LnB1c2goYnl0ZVBvaW50KVxuXG4gICAgICAvLyAzLiBTa2lwIHRoZSBuZXh0IHR3byBieXRlcyBpbiBpbnB1dC5cbiAgICAgIGkgKz0gMlxuICAgIH1cbiAgfVxuXG4gIC8vIDMuIFJldHVybiBvdXRwdXQuXG4gIHJldHVybiBVaW50OEFycmF5LmZyb20ob3V0cHV0KVxufVxuXG4vLyBodHRwczovL21pbWVzbmlmZi5zcGVjLndoYXR3Zy5vcmcvI3BhcnNlLWEtbWltZS10eXBlXG4vKiogQHBhcmFtIHtzdHJpbmd9IGlucHV0ICovXG5mdW5jdGlvbiBwYXJzZU1JTUVUeXBlIChpbnB1dCkge1xuICAvLyAxLiBSZW1vdmUgYW55IGxlYWRpbmcgYW5kIHRyYWlsaW5nIEhUVFAgd2hpdGVzcGFjZVxuICAvLyBmcm9tIGlucHV0LlxuICBpbnB1dCA9IHJlbW92ZUhUVFBXaGl0ZXNwYWNlKGlucHV0LCB0cnVlLCB0cnVlKVxuXG4gIC8vIDIuIExldCBwb3NpdGlvbiBiZSBhIHBvc2l0aW9uIHZhcmlhYmxlIGZvciBpbnB1dCxcbiAgLy8gaW5pdGlhbGx5IHBvaW50aW5nIGF0IHRoZSBzdGFydCBvZiBpbnB1dC5cbiAgY29uc3QgcG9zaXRpb24gPSB7IHBvc2l0aW9uOiAwIH1cblxuICAvLyAzLiBMZXQgdHlwZSBiZSB0aGUgcmVzdWx0IG9mIGNvbGxlY3RpbmcgYSBzZXF1ZW5jZVxuICAvLyBvZiBjb2RlIHBvaW50cyB0aGF0IGFyZSBub3QgVSswMDJGICgvKSBmcm9tXG4gIC8vIGlucHV0LCBnaXZlbiBwb3NpdGlvbi5cbiAgY29uc3QgdHlwZSA9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0KFxuICAgICcvJyxcbiAgICBpbnB1dCxcbiAgICBwb3NpdGlvblxuICApXG5cbiAgLy8gNC4gSWYgdHlwZSBpcyB0aGUgZW1wdHkgc3RyaW5nIG9yIGRvZXMgbm90IHNvbGVseVxuICAvLyBjb250YWluIEhUVFAgdG9rZW4gY29kZSBwb2ludHMsIHRoZW4gcmV0dXJuIGZhaWx1cmUuXG4gIC8vIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jaHR0cC10b2tlbi1jb2RlLXBvaW50XG4gIGlmICh0eXBlLmxlbmd0aCA9PT0gMCB8fCAhSFRUUF9UT0tFTl9DT0RFUE9JTlRTLnRlc3QodHlwZSkpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICAvLyA1LiBJZiBwb3NpdGlvbiBpcyBwYXN0IHRoZSBlbmQgb2YgaW5wdXQsIHRoZW4gcmV0dXJuXG4gIC8vIGZhaWx1cmVcbiAgaWYgKHBvc2l0aW9uLnBvc2l0aW9uID4gaW5wdXQubGVuZ3RoKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgLy8gNi4gQWR2YW5jZSBwb3NpdGlvbiBieSAxLiAoVGhpcyBza2lwcyBwYXN0IFUrMDAyRiAoLykuKVxuICBwb3NpdGlvbi5wb3NpdGlvbisrXG5cbiAgLy8gNy4gTGV0IHN1YnR5cGUgYmUgdGhlIHJlc3VsdCBvZiBjb2xsZWN0aW5nIGEgc2VxdWVuY2Ugb2ZcbiAgLy8gY29kZSBwb2ludHMgdGhhdCBhcmUgbm90IFUrMDAzQiAoOykgZnJvbSBpbnB1dCwgZ2l2ZW5cbiAgLy8gcG9zaXRpb24uXG4gIGxldCBzdWJ0eXBlID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoXG4gICAgJzsnLFxuICAgIGlucHV0LFxuICAgIHBvc2l0aW9uXG4gIClcblxuICAvLyA4LiBSZW1vdmUgYW55IHRyYWlsaW5nIEhUVFAgd2hpdGVzcGFjZSBmcm9tIHN1YnR5cGUuXG4gIHN1YnR5cGUgPSByZW1vdmVIVFRQV2hpdGVzcGFjZShzdWJ0eXBlLCBmYWxzZSwgdHJ1ZSlcblxuICAvLyA5LiBJZiBzdWJ0eXBlIGlzIHRoZSBlbXB0eSBzdHJpbmcgb3IgZG9lcyBub3Qgc29sZWx5XG4gIC8vIGNvbnRhaW4gSFRUUCB0b2tlbiBjb2RlIHBvaW50cywgdGhlbiByZXR1cm4gZmFpbHVyZS5cbiAgaWYgKHN1YnR5cGUubGVuZ3RoID09PSAwIHx8ICFIVFRQX1RPS0VOX0NPREVQT0lOVFMudGVzdChzdWJ0eXBlKSkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIGNvbnN0IHR5cGVMb3dlcmNhc2UgPSB0eXBlLnRvTG93ZXJDYXNlKClcbiAgY29uc3Qgc3VidHlwZUxvd2VyY2FzZSA9IHN1YnR5cGUudG9Mb3dlckNhc2UoKVxuXG4gIC8vIDEwLiBMZXQgbWltZVR5cGUgYmUgYSBuZXcgTUlNRSB0eXBlIHJlY29yZCB3aG9zZSB0eXBlXG4gIC8vIGlzIHR5cGUsIGluIEFTQ0lJIGxvd2VyY2FzZSwgYW5kIHN1YnR5cGUgaXMgc3VidHlwZSxcbiAgLy8gaW4gQVNDSUkgbG93ZXJjYXNlLlxuICAvLyBodHRwczovL21pbWVzbmlmZi5zcGVjLndoYXR3Zy5vcmcvI21pbWUtdHlwZVxuICBjb25zdCBtaW1lVHlwZSA9IHtcbiAgICB0eXBlOiB0eXBlTG93ZXJjYXNlLFxuICAgIHN1YnR5cGU6IHN1YnR5cGVMb3dlcmNhc2UsXG4gICAgLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCBzdHJpbmc+fSAqL1xuICAgIHBhcmFtZXRlcnM6IG5ldyBNYXAoKSxcbiAgICAvLyBodHRwczovL21pbWVzbmlmZi5zcGVjLndoYXR3Zy5vcmcvI21pbWUtdHlwZS1lc3NlbmNlXG4gICAgZXNzZW5jZTogYCR7dHlwZUxvd2VyY2FzZX0vJHtzdWJ0eXBlTG93ZXJjYXNlfWBcbiAgfVxuXG4gIC8vIDExLiBXaGlsZSBwb3NpdGlvbiBpcyBub3QgcGFzdCB0aGUgZW5kIG9mIGlucHV0OlxuICB3aGlsZSAocG9zaXRpb24ucG9zaXRpb24gPCBpbnB1dC5sZW5ndGgpIHtcbiAgICAvLyAxLiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuIChUaGlzIHNraXBzIHBhc3QgVSswMDNCICg7KS4pXG4gICAgcG9zaXRpb24ucG9zaXRpb24rK1xuXG4gICAgLy8gMi4gQ29sbGVjdCBhIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzIHRoYXQgYXJlIEhUVFBcbiAgICAvLyB3aGl0ZXNwYWNlIGZyb20gaW5wdXQgZ2l2ZW4gcG9zaXRpb24uXG4gICAgY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50cyhcbiAgICAgIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNodHRwLXdoaXRlc3BhY2VcbiAgICAgIGNoYXIgPT4gSFRUUF9XSElURVNQQUNFX1JFR0VYLnRlc3QoY2hhciksXG4gICAgICBpbnB1dCxcbiAgICAgIHBvc2l0aW9uXG4gICAgKVxuXG4gICAgLy8gMy4gTGV0IHBhcmFtZXRlck5hbWUgYmUgdGhlIHJlc3VsdCBvZiBjb2xsZWN0aW5nIGFcbiAgICAvLyBzZXF1ZW5jZSBvZiBjb2RlIHBvaW50cyB0aGF0IGFyZSBub3QgVSswMDNCICg7KVxuICAgIC8vIG9yIFUrMDAzRCAoPSkgZnJvbSBpbnB1dCwgZ2l2ZW4gcG9zaXRpb24uXG4gICAgbGV0IHBhcmFtZXRlck5hbWUgPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzKFxuICAgICAgKGNoYXIpID0+IGNoYXIgIT09ICc7JyAmJiBjaGFyICE9PSAnPScsXG4gICAgICBpbnB1dCxcbiAgICAgIHBvc2l0aW9uXG4gICAgKVxuXG4gICAgLy8gNC4gU2V0IHBhcmFtZXRlck5hbWUgdG8gcGFyYW1ldGVyTmFtZSwgaW4gQVNDSUlcbiAgICAvLyBsb3dlcmNhc2UuXG4gICAgcGFyYW1ldGVyTmFtZSA9IHBhcmFtZXRlck5hbWUudG9Mb3dlckNhc2UoKVxuXG4gICAgLy8gNS4gSWYgcG9zaXRpb24gaXMgbm90IHBhc3QgdGhlIGVuZCBvZiBpbnB1dCwgdGhlbjpcbiAgICBpZiAocG9zaXRpb24ucG9zaXRpb24gPCBpbnB1dC5sZW5ndGgpIHtcbiAgICAgIC8vIDEuIElmIHRoZSBjb2RlIHBvaW50IGF0IHBvc2l0aW9uIHdpdGhpbiBpbnB1dCBpc1xuICAgICAgLy8gVSswMDNCICg7KSwgdGhlbiBjb250aW51ZS5cbiAgICAgIGlmIChpbnB1dFtwb3NpdGlvbi5wb3NpdGlvbl0gPT09ICc7Jykge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyAyLiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuIChUaGlzIHNraXBzIHBhc3QgVSswMDNEICg9KS4pXG4gICAgICBwb3NpdGlvbi5wb3NpdGlvbisrXG4gICAgfVxuXG4gICAgLy8gNi4gSWYgcG9zaXRpb24gaXMgcGFzdCB0aGUgZW5kIG9mIGlucHV0LCB0aGVuIGJyZWFrLlxuICAgIGlmIChwb3NpdGlvbi5wb3NpdGlvbiA+IGlucHV0Lmxlbmd0aCkge1xuICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICAvLyA3LiBMZXQgcGFyYW1ldGVyVmFsdWUgYmUgbnVsbC5cbiAgICBsZXQgcGFyYW1ldGVyVmFsdWUgPSBudWxsXG5cbiAgICAvLyA4LiBJZiB0aGUgY29kZSBwb2ludCBhdCBwb3NpdGlvbiB3aXRoaW4gaW5wdXQgaXNcbiAgICAvLyBVKzAwMjIgKFwiKSwgdGhlbjpcbiAgICBpZiAoaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dID09PSAnXCInKSB7XG4gICAgICAvLyAxLiBTZXQgcGFyYW1ldGVyVmFsdWUgdG8gdGhlIHJlc3VsdCBvZiBjb2xsZWN0aW5nXG4gICAgICAvLyBhbiBIVFRQIHF1b3RlZCBzdHJpbmcgZnJvbSBpbnB1dCwgZ2l2ZW4gcG9zaXRpb25cbiAgICAgIC8vIGFuZCB0aGUgZXh0cmFjdC12YWx1ZSBmbGFnLlxuICAgICAgcGFyYW1ldGVyVmFsdWUgPSBjb2xsZWN0QW5IVFRQUXVvdGVkU3RyaW5nKGlucHV0LCBwb3NpdGlvbiwgdHJ1ZSlcblxuICAgICAgLy8gMi4gQ29sbGVjdCBhIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzIHRoYXQgYXJlIG5vdFxuICAgICAgLy8gVSswMDNCICg7KSBmcm9tIGlucHV0LCBnaXZlbiBwb3NpdGlvbi5cbiAgICAgIGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0KFxuICAgICAgICAnOycsXG4gICAgICAgIGlucHV0LFxuICAgICAgICBwb3NpdGlvblxuICAgICAgKVxuXG4gICAgLy8gOS4gT3RoZXJ3aXNlOlxuICAgIH0gZWxzZSB7XG4gICAgICAvLyAxLiBTZXQgcGFyYW1ldGVyVmFsdWUgdG8gdGhlIHJlc3VsdCBvZiBjb2xsZWN0aW5nXG4gICAgICAvLyBhIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzIHRoYXQgYXJlIG5vdCBVKzAwM0IgKDspXG4gICAgICAvLyBmcm9tIGlucHV0LCBnaXZlbiBwb3NpdGlvbi5cbiAgICAgIHBhcmFtZXRlclZhbHVlID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoXG4gICAgICAgICc7JyxcbiAgICAgICAgaW5wdXQsXG4gICAgICAgIHBvc2l0aW9uXG4gICAgICApXG5cbiAgICAgIC8vIDIuIFJlbW92ZSBhbnkgdHJhaWxpbmcgSFRUUCB3aGl0ZXNwYWNlIGZyb20gcGFyYW1ldGVyVmFsdWUuXG4gICAgICBwYXJhbWV0ZXJWYWx1ZSA9IHJlbW92ZUhUVFBXaGl0ZXNwYWNlKHBhcmFtZXRlclZhbHVlLCBmYWxzZSwgdHJ1ZSlcblxuICAgICAgLy8gMy4gSWYgcGFyYW1ldGVyVmFsdWUgaXMgdGhlIGVtcHR5IHN0cmluZywgdGhlbiBjb250aW51ZS5cbiAgICAgIGlmIChwYXJhbWV0ZXJWYWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAxMC4gSWYgYWxsIG9mIHRoZSBmb2xsb3dpbmcgYXJlIHRydWVcbiAgICAvLyAtIHBhcmFtZXRlck5hbWUgaXMgbm90IHRoZSBlbXB0eSBzdHJpbmdcbiAgICAvLyAtIHBhcmFtZXRlck5hbWUgc29sZWx5IGNvbnRhaW5zIEhUVFAgdG9rZW4gY29kZSBwb2ludHNcbiAgICAvLyAtIHBhcmFtZXRlclZhbHVlIHNvbGVseSBjb250YWlucyBIVFRQIHF1b3RlZC1zdHJpbmcgdG9rZW4gY29kZSBwb2ludHNcbiAgICAvLyAtIG1pbWVUeXBl4oCZcyBwYXJhbWV0ZXJzW3BhcmFtZXRlck5hbWVdIGRvZXMgbm90IGV4aXN0XG4gICAgLy8gdGhlbiBzZXQgbWltZVR5cGXigJlzIHBhcmFtZXRlcnNbcGFyYW1ldGVyTmFtZV0gdG8gcGFyYW1ldGVyVmFsdWUuXG4gICAgaWYgKFxuICAgICAgcGFyYW1ldGVyTmFtZS5sZW5ndGggIT09IDAgJiZcbiAgICAgIEhUVFBfVE9LRU5fQ09ERVBPSU5UUy50ZXN0KHBhcmFtZXRlck5hbWUpICYmXG4gICAgICAocGFyYW1ldGVyVmFsdWUubGVuZ3RoID09PSAwIHx8IEhUVFBfUVVPVEVEX1NUUklOR19UT0tFTlMudGVzdChwYXJhbWV0ZXJWYWx1ZSkpICYmXG4gICAgICAhbWltZVR5cGUucGFyYW1ldGVycy5oYXMocGFyYW1ldGVyTmFtZSlcbiAgICApIHtcbiAgICAgIG1pbWVUeXBlLnBhcmFtZXRlcnMuc2V0KHBhcmFtZXRlck5hbWUsIHBhcmFtZXRlclZhbHVlKVxuICAgIH1cbiAgfVxuXG4gIC8vIDEyLiBSZXR1cm4gbWltZVR5cGUuXG4gIHJldHVybiBtaW1lVHlwZVxufVxuXG4vLyBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jZm9yZ2l2aW5nLWJhc2U2NC1kZWNvZGVcbi8qKiBAcGFyYW0ge3N0cmluZ30gZGF0YSAqL1xuZnVuY3Rpb24gZm9yZ2l2aW5nQmFzZTY0IChkYXRhKSB7XG4gIC8vIDEuIFJlbW92ZSBhbGwgQVNDSUkgd2hpdGVzcGFjZSBmcm9tIGRhdGEuXG4gIGRhdGEgPSBkYXRhLnJlcGxhY2UoL1tcXHUwMDA5XFx1MDAwQVxcdTAwMENcXHUwMDBEXFx1MDAyMF0vZywgJycpICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgLy8gMi4gSWYgZGF0YeKAmXMgY29kZSBwb2ludCBsZW5ndGggZGl2aWRlcyBieSA0IGxlYXZpbmdcbiAgLy8gbm8gcmVtYWluZGVyLCB0aGVuOlxuICBpZiAoZGF0YS5sZW5ndGggJSA0ID09PSAwKSB7XG4gICAgLy8gMS4gSWYgZGF0YSBlbmRzIHdpdGggb25lIG9yIHR3byBVKzAwM0QgKD0pIGNvZGUgcG9pbnRzLFxuICAgIC8vIHRoZW4gcmVtb3ZlIHRoZW0gZnJvbSBkYXRhLlxuICAgIGRhdGEgPSBkYXRhLnJlcGxhY2UoLz0/PSQvLCAnJylcbiAgfVxuXG4gIC8vIDMuIElmIGRhdGHigJlzIGNvZGUgcG9pbnQgbGVuZ3RoIGRpdmlkZXMgYnkgNCBsZWF2aW5nXG4gIC8vIGEgcmVtYWluZGVyIG9mIDEsIHRoZW4gcmV0dXJuIGZhaWx1cmUuXG4gIGlmIChkYXRhLmxlbmd0aCAlIDQgPT09IDEpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICAvLyA0LiBJZiBkYXRhIGNvbnRhaW5zIGEgY29kZSBwb2ludCB0aGF0IGlzIG5vdCBvbmUgb2ZcbiAgLy8gIFUrMDAyQiAoKylcbiAgLy8gIFUrMDAyRiAoLylcbiAgLy8gIEFTQ0lJIGFscGhhbnVtZXJpY1xuICAvLyB0aGVuIHJldHVybiBmYWlsdXJlLlxuICBpZiAoL1teKy8wLTlBLVphLXpdLy50ZXN0KGRhdGEpKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgY29uc3QgYmluYXJ5ID0gYXRvYihkYXRhKVxuICBjb25zdCBieXRlcyA9IG5ldyBVaW50OEFycmF5KGJpbmFyeS5sZW5ndGgpXG5cbiAgZm9yIChsZXQgYnl0ZSA9IDA7IGJ5dGUgPCBiaW5hcnkubGVuZ3RoOyBieXRlKyspIHtcbiAgICBieXRlc1tieXRlXSA9IGJpbmFyeS5jaGFyQ29kZUF0KGJ5dGUpXG4gIH1cblxuICByZXR1cm4gYnl0ZXNcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbGxlY3QtYW4taHR0cC1xdW90ZWQtc3RyaW5nXG4vLyB0ZXN0czogaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2V4YW1wbGUtaHR0cC1xdW90ZWQtc3RyaW5nXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dFxuICogQHBhcmFtIHt7IHBvc2l0aW9uOiBudW1iZXIgfX0gcG9zaXRpb25cbiAqIEBwYXJhbSB7Ym9vbGVhbj99IGV4dHJhY3RWYWx1ZVxuICovXG5mdW5jdGlvbiBjb2xsZWN0QW5IVFRQUXVvdGVkU3RyaW5nIChpbnB1dCwgcG9zaXRpb24sIGV4dHJhY3RWYWx1ZSkge1xuICAvLyAxLiBMZXQgcG9zaXRpb25TdGFydCBiZSBwb3NpdGlvbi5cbiAgY29uc3QgcG9zaXRpb25TdGFydCA9IHBvc2l0aW9uLnBvc2l0aW9uXG5cbiAgLy8gMi4gTGV0IHZhbHVlIGJlIHRoZSBlbXB0eSBzdHJpbmcuXG4gIGxldCB2YWx1ZSA9ICcnXG5cbiAgLy8gMy4gQXNzZXJ0OiB0aGUgY29kZSBwb2ludCBhdCBwb3NpdGlvbiB3aXRoaW4gaW5wdXRcbiAgLy8gaXMgVSswMDIyIChcIikuXG4gIGFzc2VydChpbnB1dFtwb3NpdGlvbi5wb3NpdGlvbl0gPT09ICdcIicpXG5cbiAgLy8gNC4gQWR2YW5jZSBwb3NpdGlvbiBieSAxLlxuICBwb3NpdGlvbi5wb3NpdGlvbisrXG5cbiAgLy8gNS4gV2hpbGUgdHJ1ZTpcbiAgd2hpbGUgKHRydWUpIHtcbiAgICAvLyAxLiBBcHBlbmQgdGhlIHJlc3VsdCBvZiBjb2xsZWN0aW5nIGEgc2VxdWVuY2Ugb2YgY29kZSBwb2ludHNcbiAgICAvLyB0aGF0IGFyZSBub3QgVSswMDIyIChcIikgb3IgVSswMDVDIChcXCkgZnJvbSBpbnB1dCwgZ2l2ZW5cbiAgICAvLyBwb3NpdGlvbiwgdG8gdmFsdWUuXG4gICAgdmFsdWUgKz0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50cyhcbiAgICAgIChjaGFyKSA9PiBjaGFyICE9PSAnXCInICYmIGNoYXIgIT09ICdcXFxcJyxcbiAgICAgIGlucHV0LFxuICAgICAgcG9zaXRpb25cbiAgICApXG5cbiAgICAvLyAyLiBJZiBwb3NpdGlvbiBpcyBwYXN0IHRoZSBlbmQgb2YgaW5wdXQsIHRoZW4gYnJlYWsuXG4gICAgaWYgKHBvc2l0aW9uLnBvc2l0aW9uID49IGlucHV0Lmxlbmd0aCkge1xuICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICAvLyAzLiBMZXQgcXVvdGVPckJhY2tzbGFzaCBiZSB0aGUgY29kZSBwb2ludCBhdCBwb3NpdGlvbiB3aXRoaW5cbiAgICAvLyBpbnB1dC5cbiAgICBjb25zdCBxdW90ZU9yQmFja3NsYXNoID0gaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dXG5cbiAgICAvLyA0LiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuXG4gICAgcG9zaXRpb24ucG9zaXRpb24rK1xuXG4gICAgLy8gNS4gSWYgcXVvdGVPckJhY2tzbGFzaCBpcyBVKzAwNUMgKFxcKSwgdGhlbjpcbiAgICBpZiAocXVvdGVPckJhY2tzbGFzaCA9PT0gJ1xcXFwnKSB7XG4gICAgICAvLyAxLiBJZiBwb3NpdGlvbiBpcyBwYXN0IHRoZSBlbmQgb2YgaW5wdXQsIHRoZW4gYXBwZW5kXG4gICAgICAvLyBVKzAwNUMgKFxcKSB0byB2YWx1ZSBhbmQgYnJlYWsuXG4gICAgICBpZiAocG9zaXRpb24ucG9zaXRpb24gPj0gaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgIHZhbHVlICs9ICdcXFxcJ1xuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICAvLyAyLiBBcHBlbmQgdGhlIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluIGlucHV0IHRvIHZhbHVlLlxuICAgICAgdmFsdWUgKz0gaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dXG5cbiAgICAgIC8vIDMuIEFkdmFuY2UgcG9zaXRpb24gYnkgMS5cbiAgICAgIHBvc2l0aW9uLnBvc2l0aW9uKytcblxuICAgIC8vIDYuIE90aGVyd2lzZTpcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gMS4gQXNzZXJ0OiBxdW90ZU9yQmFja3NsYXNoIGlzIFUrMDAyMiAoXCIpLlxuICAgICAgYXNzZXJ0KHF1b3RlT3JCYWNrc2xhc2ggPT09ICdcIicpXG5cbiAgICAgIC8vIDIuIEJyZWFrLlxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICAvLyA2LiBJZiB0aGUgZXh0cmFjdC12YWx1ZSBmbGFnIGlzIHNldCwgdGhlbiByZXR1cm4gdmFsdWUuXG4gIGlmIChleHRyYWN0VmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuXG4gIC8vIDcuIFJldHVybiB0aGUgY29kZSBwb2ludHMgZnJvbSBwb3NpdGlvblN0YXJ0IHRvIHBvc2l0aW9uLFxuICAvLyBpbmNsdXNpdmUsIHdpdGhpbiBpbnB1dC5cbiAgcmV0dXJuIGlucHV0LnNsaWNlKHBvc2l0aW9uU3RhcnQsIHBvc2l0aW9uLnBvc2l0aW9uKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9taW1lc25pZmYuc3BlYy53aGF0d2cub3JnLyNzZXJpYWxpemUtYS1taW1lLXR5cGVcbiAqL1xuZnVuY3Rpb24gc2VyaWFsaXplQU1pbWVUeXBlIChtaW1lVHlwZSkge1xuICBhc3NlcnQobWltZVR5cGUgIT09ICdmYWlsdXJlJylcbiAgY29uc3QgeyBwYXJhbWV0ZXJzLCBlc3NlbmNlIH0gPSBtaW1lVHlwZVxuXG4gIC8vIDEuIExldCBzZXJpYWxpemF0aW9uIGJlIHRoZSBjb25jYXRlbmF0aW9uIG9mIG1pbWVUeXBl4oCZc1xuICAvLyAgICB0eXBlLCBVKzAwMkYgKC8pLCBhbmQgbWltZVR5cGXigJlzIHN1YnR5cGUuXG4gIGxldCBzZXJpYWxpemF0aW9uID0gZXNzZW5jZVxuXG4gIC8vIDIuIEZvciBlYWNoIG5hbWUg4oaSIHZhbHVlIG9mIG1pbWVUeXBl4oCZcyBwYXJhbWV0ZXJzOlxuICBmb3IgKGxldCBbbmFtZSwgdmFsdWVdIG9mIHBhcmFtZXRlcnMuZW50cmllcygpKSB7XG4gICAgLy8gMS4gQXBwZW5kIFUrMDAzQiAoOykgdG8gc2VyaWFsaXphdGlvbi5cbiAgICBzZXJpYWxpemF0aW9uICs9ICc7J1xuXG4gICAgLy8gMi4gQXBwZW5kIG5hbWUgdG8gc2VyaWFsaXphdGlvbi5cbiAgICBzZXJpYWxpemF0aW9uICs9IG5hbWVcblxuICAgIC8vIDMuIEFwcGVuZCBVKzAwM0QgKD0pIHRvIHNlcmlhbGl6YXRpb24uXG4gICAgc2VyaWFsaXphdGlvbiArPSAnPSdcblxuICAgIC8vIDQuIElmIHZhbHVlIGRvZXMgbm90IHNvbGVseSBjb250YWluIEhUVFAgdG9rZW4gY29kZVxuICAgIC8vICAgIHBvaW50cyBvciB2YWx1ZSBpcyB0aGUgZW1wdHkgc3RyaW5nLCB0aGVuOlxuICAgIGlmICghSFRUUF9UT0tFTl9DT0RFUE9JTlRTLnRlc3QodmFsdWUpKSB7XG4gICAgICAvLyAxLiBQcmVjZWRlIGVhY2ggb2NjdXJlbmNlIG9mIFUrMDAyMiAoXCIpIG9yXG4gICAgICAvLyAgICBVKzAwNUMgKFxcKSBpbiB2YWx1ZSB3aXRoIFUrMDA1QyAoXFwpLlxuICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC8oXFxcXHxcIikvZywgJ1xcXFwkMScpXG5cbiAgICAgIC8vIDIuIFByZXBlbmQgVSswMDIyIChcIikgdG8gdmFsdWUuXG4gICAgICB2YWx1ZSA9ICdcIicgKyB2YWx1ZVxuXG4gICAgICAvLyAzLiBBcHBlbmQgVSswMDIyIChcIikgdG8gdmFsdWUuXG4gICAgICB2YWx1ZSArPSAnXCInXG4gICAgfVxuXG4gICAgLy8gNS4gQXBwZW5kIHZhbHVlIHRvIHNlcmlhbGl6YXRpb24uXG4gICAgc2VyaWFsaXphdGlvbiArPSB2YWx1ZVxuICB9XG5cbiAgLy8gMy4gUmV0dXJuIHNlcmlhbGl6YXRpb24uXG4gIHJldHVybiBzZXJpYWxpemF0aW9uXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC13aGl0ZXNwYWNlXG4gKiBAcGFyYW0ge3N0cmluZ30gY2hhclxuICovXG5mdW5jdGlvbiBpc0hUVFBXaGl0ZVNwYWNlIChjaGFyKSB7XG4gIHJldHVybiBjaGFyID09PSAnXFxyJyB8fCBjaGFyID09PSAnXFxuJyB8fCBjaGFyID09PSAnXFx0JyB8fCBjaGFyID09PSAnICdcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNodHRwLXdoaXRlc3BhY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlSFRUUFdoaXRlc3BhY2UgKHN0ciwgbGVhZGluZyA9IHRydWUsIHRyYWlsaW5nID0gdHJ1ZSkge1xuICBsZXQgbGVhZCA9IDBcbiAgbGV0IHRyYWlsID0gc3RyLmxlbmd0aCAtIDFcblxuICBpZiAobGVhZGluZykge1xuICAgIGZvciAoOyBsZWFkIDwgc3RyLmxlbmd0aCAmJiBpc0hUVFBXaGl0ZVNwYWNlKHN0cltsZWFkXSk7IGxlYWQrKyk7XG4gIH1cblxuICBpZiAodHJhaWxpbmcpIHtcbiAgICBmb3IgKDsgdHJhaWwgPiAwICYmIGlzSFRUUFdoaXRlU3BhY2Uoc3RyW3RyYWlsXSk7IHRyYWlsLS0pO1xuICB9XG5cbiAgcmV0dXJuIHN0ci5zbGljZShsZWFkLCB0cmFpbCArIDEpXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jYXNjaWktd2hpdGVzcGFjZVxuICogQHBhcmFtIHtzdHJpbmd9IGNoYXJcbiAqL1xuZnVuY3Rpb24gaXNBU0NJSVdoaXRlc3BhY2UgKGNoYXIpIHtcbiAgcmV0dXJuIGNoYXIgPT09ICdcXHInIHx8IGNoYXIgPT09ICdcXG4nIHx8IGNoYXIgPT09ICdcXHQnIHx8IGNoYXIgPT09ICdcXGYnIHx8IGNoYXIgPT09ICcgJ1xufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI3N0cmlwLWxlYWRpbmctYW5kLXRyYWlsaW5nLWFzY2lpLXdoaXRlc3BhY2VcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlQVNDSUlXaGl0ZXNwYWNlIChzdHIsIGxlYWRpbmcgPSB0cnVlLCB0cmFpbGluZyA9IHRydWUpIHtcbiAgbGV0IGxlYWQgPSAwXG4gIGxldCB0cmFpbCA9IHN0ci5sZW5ndGggLSAxXG5cbiAgaWYgKGxlYWRpbmcpIHtcbiAgICBmb3IgKDsgbGVhZCA8IHN0ci5sZW5ndGggJiYgaXNBU0NJSVdoaXRlc3BhY2Uoc3RyW2xlYWRdKTsgbGVhZCsrKTtcbiAgfVxuXG4gIGlmICh0cmFpbGluZykge1xuICAgIGZvciAoOyB0cmFpbCA+IDAgJiYgaXNBU0NJSVdoaXRlc3BhY2Uoc3RyW3RyYWlsXSk7IHRyYWlsLS0pO1xuICB9XG5cbiAgcmV0dXJuIHN0ci5zbGljZShsZWFkLCB0cmFpbCArIDEpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBkYXRhVVJMUHJvY2Vzc29yLFxuICBVUkxTZXJpYWxpemVyLFxuICBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzLFxuICBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdCxcbiAgc3RyaW5nUGVyY2VudERlY29kZSxcbiAgcGFyc2VNSU1FVHlwZSxcbiAgY29sbGVjdEFuSFRUUFF1b3RlZFN0cmluZyxcbiAgc2VyaWFsaXplQU1pbWVUeXBlXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IEJsb2IsIEZpbGU6IE5hdGl2ZUZpbGUgfSA9IHJlcXVpcmUoJ2J1ZmZlcicpXG5jb25zdCB7IHR5cGVzIH0gPSByZXF1aXJlKCd1dGlsJylcbmNvbnN0IHsga1N0YXRlIH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBpc0Jsb2JMaWtlIH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4vd2ViaWRsJylcbmNvbnN0IHsgcGFyc2VNSU1FVHlwZSwgc2VyaWFsaXplQU1pbWVUeXBlIH0gPSByZXF1aXJlKCcuL2RhdGFVUkwnKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5IH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgZW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigpXG5cbmNsYXNzIEZpbGUgZXh0ZW5kcyBCbG9iIHtcbiAgY29uc3RydWN0b3IgKGZpbGVCaXRzLCBmaWxlTmFtZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgLy8gVGhlIEZpbGUgY29uc3RydWN0b3IgaXMgaW52b2tlZCB3aXRoIHR3byBvciB0aHJlZSBwYXJhbWV0ZXJzLCBkZXBlbmRpbmdcbiAgICAvLyBvbiB3aGV0aGVyIHRoZSBvcHRpb25hbCBkaWN0aW9uYXJ5IHBhcmFtZXRlciBpcyB1c2VkLiBXaGVuIHRoZSBGaWxlKClcbiAgICAvLyBjb25zdHJ1Y3RvciBpcyBpbnZva2VkLCB1c2VyIGFnZW50cyBtdXN0IHJ1biB0aGUgZm9sbG93aW5nIHN0ZXBzOlxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMiwgeyBoZWFkZXI6ICdGaWxlIGNvbnN0cnVjdG9yJyB9KVxuXG4gICAgZmlsZUJpdHMgPSB3ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8QmxvYlBhcnQ+J10oZmlsZUJpdHMpXG4gICAgZmlsZU5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcoZmlsZU5hbWUpXG4gICAgb3B0aW9ucyA9IHdlYmlkbC5jb252ZXJ0ZXJzLkZpbGVQcm9wZXJ0eUJhZyhvcHRpb25zKVxuXG4gICAgLy8gMS4gTGV0IGJ5dGVzIGJlIHRoZSByZXN1bHQgb2YgcHJvY2Vzc2luZyBibG9iIHBhcnRzIGdpdmVuIGZpbGVCaXRzIGFuZFxuICAgIC8vIG9wdGlvbnMuXG4gICAgLy8gTm90ZTogQmxvYiBoYW5kbGVzIHRoaXMgZm9yIHVzXG5cbiAgICAvLyAyLiBMZXQgbiBiZSB0aGUgZmlsZU5hbWUgYXJndW1lbnQgdG8gdGhlIGNvbnN0cnVjdG9yLlxuICAgIGNvbnN0IG4gPSBmaWxlTmFtZVxuXG4gICAgLy8gMy4gUHJvY2VzcyBGaWxlUHJvcGVydHlCYWcgZGljdGlvbmFyeSBhcmd1bWVudCBieSBydW5uaW5nIHRoZSBmb2xsb3dpbmdcbiAgICAvLyBzdWJzdGVwczpcblxuICAgIC8vICAgIDEuIElmIHRoZSB0eXBlIG1lbWJlciBpcyBwcm92aWRlZCBhbmQgaXMgbm90IHRoZSBlbXB0eSBzdHJpbmcsIGxldCB0XG4gICAgLy8gICAgYmUgc2V0IHRvIHRoZSB0eXBlIGRpY3Rpb25hcnkgbWVtYmVyLiBJZiB0IGNvbnRhaW5zIGFueSBjaGFyYWN0ZXJzXG4gICAgLy8gICAgb3V0c2lkZSB0aGUgcmFuZ2UgVSswMDIwIHRvIFUrMDA3RSwgdGhlbiBzZXQgdCB0byB0aGUgZW1wdHkgc3RyaW5nXG4gICAgLy8gICAgYW5kIHJldHVybiBmcm9tIHRoZXNlIHN1YnN0ZXBzLlxuICAgIC8vICAgIDIuIENvbnZlcnQgZXZlcnkgY2hhcmFjdGVyIGluIHQgdG8gQVNDSUkgbG93ZXJjYXNlLlxuICAgIGxldCB0ID0gb3B0aW9ucy50eXBlXG4gICAgbGV0IGRcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sYWJlbHNcbiAgICBzdWJzdGVwOiB7XG4gICAgICBpZiAodCkge1xuICAgICAgICB0ID0gcGFyc2VNSU1FVHlwZSh0KVxuXG4gICAgICAgIGlmICh0ID09PSAnZmFpbHVyZScpIHtcbiAgICAgICAgICB0ID0gJydcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbGFiZWxzXG4gICAgICAgICAgYnJlYWsgc3Vic3RlcFxuICAgICAgICB9XG5cbiAgICAgICAgdCA9IHNlcmlhbGl6ZUFNaW1lVHlwZSh0KS50b0xvd2VyQ2FzZSgpXG4gICAgICB9XG5cbiAgICAgIC8vICAgIDMuIElmIHRoZSBsYXN0TW9kaWZpZWQgbWVtYmVyIGlzIHByb3ZpZGVkLCBsZXQgZCBiZSBzZXQgdG8gdGhlXG4gICAgICAvLyAgICBsYXN0TW9kaWZpZWQgZGljdGlvbmFyeSBtZW1iZXIuIElmIGl0IGlzIG5vdCBwcm92aWRlZCwgc2V0IGQgdG8gdGhlXG4gICAgICAvLyAgICBjdXJyZW50IGRhdGUgYW5kIHRpbWUgcmVwcmVzZW50ZWQgYXMgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgc2luY2VcbiAgICAgIC8vICAgIHRoZSBVbml4IEVwb2NoICh3aGljaCBpcyB0aGUgZXF1aXZhbGVudCBvZiBEYXRlLm5vdygpIFtFQ01BLTI2Ml0pLlxuICAgICAgZCA9IG9wdGlvbnMubGFzdE1vZGlmaWVkXG4gICAgfVxuXG4gICAgLy8gNC4gUmV0dXJuIGEgbmV3IEZpbGUgb2JqZWN0IEYgc3VjaCB0aGF0OlxuICAgIC8vIEYgcmVmZXJzIHRvIHRoZSBieXRlcyBieXRlIHNlcXVlbmNlLlxuICAgIC8vIEYuc2l6ZSBpcyBzZXQgdG8gdGhlIG51bWJlciBvZiB0b3RhbCBieXRlcyBpbiBieXRlcy5cbiAgICAvLyBGLm5hbWUgaXMgc2V0IHRvIG4uXG4gICAgLy8gRi50eXBlIGlzIHNldCB0byB0LlxuICAgIC8vIEYubGFzdE1vZGlmaWVkIGlzIHNldCB0byBkLlxuXG4gICAgc3VwZXIocHJvY2Vzc0Jsb2JQYXJ0cyhmaWxlQml0cywgb3B0aW9ucyksIHsgdHlwZTogdCB9KVxuICAgIHRoaXNba1N0YXRlXSA9IHtcbiAgICAgIG5hbWU6IG4sXG4gICAgICBsYXN0TW9kaWZpZWQ6IGQsXG4gICAgICB0eXBlOiB0XG4gICAgfVxuICB9XG5cbiAgZ2V0IG5hbWUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGUpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLm5hbWVcbiAgfVxuXG4gIGdldCBsYXN0TW9kaWZpZWQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGUpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmxhc3RNb2RpZmllZFxuICB9XG5cbiAgZ2V0IHR5cGUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGUpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnR5cGVcbiAgfVxufVxuXG5jbGFzcyBGaWxlTGlrZSB7XG4gIGNvbnN0cnVjdG9yIChibG9iTGlrZSwgZmlsZU5hbWUsIG9wdGlvbnMgPSB7fSkge1xuICAgIC8vIFRPRE86IGFyZ3VtZW50IGlkbCB0eXBlIGNoZWNrXG5cbiAgICAvLyBUaGUgRmlsZSBjb25zdHJ1Y3RvciBpcyBpbnZva2VkIHdpdGggdHdvIG9yIHRocmVlIHBhcmFtZXRlcnMsIGRlcGVuZGluZ1xuICAgIC8vIG9uIHdoZXRoZXIgdGhlIG9wdGlvbmFsIGRpY3Rpb25hcnkgcGFyYW1ldGVyIGlzIHVzZWQuIFdoZW4gdGhlIEZpbGUoKVxuICAgIC8vIGNvbnN0cnVjdG9yIGlzIGludm9rZWQsIHVzZXIgYWdlbnRzIG11c3QgcnVuIHRoZSBmb2xsb3dpbmcgc3RlcHM6XG5cbiAgICAvLyAxLiBMZXQgYnl0ZXMgYmUgdGhlIHJlc3VsdCBvZiBwcm9jZXNzaW5nIGJsb2IgcGFydHMgZ2l2ZW4gZmlsZUJpdHMgYW5kXG4gICAgLy8gb3B0aW9ucy5cblxuICAgIC8vIDIuIExldCBuIGJlIHRoZSBmaWxlTmFtZSBhcmd1bWVudCB0byB0aGUgY29uc3RydWN0b3IuXG4gICAgY29uc3QgbiA9IGZpbGVOYW1lXG5cbiAgICAvLyAzLiBQcm9jZXNzIEZpbGVQcm9wZXJ0eUJhZyBkaWN0aW9uYXJ5IGFyZ3VtZW50IGJ5IHJ1bm5pbmcgdGhlIGZvbGxvd2luZ1xuICAgIC8vIHN1YnN0ZXBzOlxuXG4gICAgLy8gICAgMS4gSWYgdGhlIHR5cGUgbWVtYmVyIGlzIHByb3ZpZGVkIGFuZCBpcyBub3QgdGhlIGVtcHR5IHN0cmluZywgbGV0IHRcbiAgICAvLyAgICBiZSBzZXQgdG8gdGhlIHR5cGUgZGljdGlvbmFyeSBtZW1iZXIuIElmIHQgY29udGFpbnMgYW55IGNoYXJhY3RlcnNcbiAgICAvLyAgICBvdXRzaWRlIHRoZSByYW5nZSBVKzAwMjAgdG8gVSswMDdFLCB0aGVuIHNldCB0IHRvIHRoZSBlbXB0eSBzdHJpbmdcbiAgICAvLyAgICBhbmQgcmV0dXJuIGZyb20gdGhlc2Ugc3Vic3RlcHMuXG4gICAgLy8gICAgVE9ET1xuICAgIGNvbnN0IHQgPSBvcHRpb25zLnR5cGVcblxuICAgIC8vICAgIDIuIENvbnZlcnQgZXZlcnkgY2hhcmFjdGVyIGluIHQgdG8gQVNDSUkgbG93ZXJjYXNlLlxuICAgIC8vICAgIFRPRE9cblxuICAgIC8vICAgIDMuIElmIHRoZSBsYXN0TW9kaWZpZWQgbWVtYmVyIGlzIHByb3ZpZGVkLCBsZXQgZCBiZSBzZXQgdG8gdGhlXG4gICAgLy8gICAgbGFzdE1vZGlmaWVkIGRpY3Rpb25hcnkgbWVtYmVyLiBJZiBpdCBpcyBub3QgcHJvdmlkZWQsIHNldCBkIHRvIHRoZVxuICAgIC8vICAgIGN1cnJlbnQgZGF0ZSBhbmQgdGltZSByZXByZXNlbnRlZCBhcyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBzaW5jZVxuICAgIC8vICAgIHRoZSBVbml4IEVwb2NoICh3aGljaCBpcyB0aGUgZXF1aXZhbGVudCBvZiBEYXRlLm5vdygpIFtFQ01BLTI2Ml0pLlxuICAgIGNvbnN0IGQgPSBvcHRpb25zLmxhc3RNb2RpZmllZCA/PyBEYXRlLm5vdygpXG5cbiAgICAvLyA0LiBSZXR1cm4gYSBuZXcgRmlsZSBvYmplY3QgRiBzdWNoIHRoYXQ6XG4gICAgLy8gRiByZWZlcnMgdG8gdGhlIGJ5dGVzIGJ5dGUgc2VxdWVuY2UuXG4gICAgLy8gRi5zaXplIGlzIHNldCB0byB0aGUgbnVtYmVyIG9mIHRvdGFsIGJ5dGVzIGluIGJ5dGVzLlxuICAgIC8vIEYubmFtZSBpcyBzZXQgdG8gbi5cbiAgICAvLyBGLnR5cGUgaXMgc2V0IHRvIHQuXG4gICAgLy8gRi5sYXN0TW9kaWZpZWQgaXMgc2V0IHRvIGQuXG5cbiAgICB0aGlzW2tTdGF0ZV0gPSB7XG4gICAgICBibG9iTGlrZSxcbiAgICAgIG5hbWU6IG4sXG4gICAgICB0eXBlOiB0LFxuICAgICAgbGFzdE1vZGlmaWVkOiBkXG4gICAgfVxuICB9XG5cbiAgc3RyZWFtICguLi5hcmdzKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZUxpa2UpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmJsb2JMaWtlLnN0cmVhbSguLi5hcmdzKVxuICB9XG5cbiAgYXJyYXlCdWZmZXIgKC4uLmFyZ3MpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlTGlrZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uYmxvYkxpa2UuYXJyYXlCdWZmZXIoLi4uYXJncylcbiAgfVxuXG4gIHNsaWNlICguLi5hcmdzKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZUxpa2UpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmJsb2JMaWtlLnNsaWNlKC4uLmFyZ3MpXG4gIH1cblxuICB0ZXh0ICguLi5hcmdzKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZUxpa2UpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmJsb2JMaWtlLnRleHQoLi4uYXJncylcbiAgfVxuXG4gIGdldCBzaXplICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlTGlrZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uYmxvYkxpa2Uuc2l6ZVxuICB9XG5cbiAgZ2V0IHR5cGUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVMaWtlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5ibG9iTGlrZS50eXBlXG4gIH1cblxuICBnZXQgbmFtZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZUxpa2UpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLm5hbWVcbiAgfVxuXG4gIGdldCBsYXN0TW9kaWZpZWQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVMaWtlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5sYXN0TW9kaWZpZWRcbiAgfVxuXG4gIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSAoKSB7XG4gICAgcmV0dXJuICdGaWxlJ1xuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEZpbGUucHJvdG90eXBlLCB7XG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdGaWxlJyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSxcbiAgbmFtZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgbGFzdE1vZGlmaWVkOiBrRW51bWVyYWJsZVByb3BlcnR5XG59KVxuXG53ZWJpZGwuY29udmVydGVycy5CbG9iID0gd2ViaWRsLmludGVyZmFjZUNvbnZlcnRlcihCbG9iKVxuXG53ZWJpZGwuY29udmVydGVycy5CbG9iUGFydCA9IGZ1bmN0aW9uIChWLCBvcHRzKSB7XG4gIGlmICh3ZWJpZGwudXRpbC5UeXBlKFYpID09PSAnT2JqZWN0Jykge1xuICAgIGlmIChpc0Jsb2JMaWtlKFYpKSB7XG4gICAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuQmxvYihWLCB7IHN0cmljdDogZmFsc2UgfSlcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBBcnJheUJ1ZmZlci5pc1ZpZXcoVikgfHxcbiAgICAgIHR5cGVzLmlzQW55QXJyYXlCdWZmZXIoVilcbiAgICApIHtcbiAgICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5CdWZmZXJTb3VyY2UoViwgb3B0cylcbiAgICB9XG4gIH1cblxuICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKFYsIG9wdHMpXG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxCbG9iUGFydD4nXSA9IHdlYmlkbC5zZXF1ZW5jZUNvbnZlcnRlcihcbiAgd2ViaWRsLmNvbnZlcnRlcnMuQmxvYlBhcnRcbilcblxuLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL0ZpbGVBUEkvI2Rmbi1GaWxlUHJvcGVydHlCYWdcbndlYmlkbC5jb252ZXJ0ZXJzLkZpbGVQcm9wZXJ0eUJhZyA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGtleTogJ2xhc3RNb2RpZmllZCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVyc1snbG9uZyBsb25nJ10sXG4gICAgZ2V0IGRlZmF1bHRWYWx1ZSAoKSB7XG4gICAgICByZXR1cm4gRGF0ZS5ub3coKVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGtleTogJ3R5cGUnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZTogJydcbiAgfSxcbiAge1xuICAgIGtleTogJ2VuZGluZ3MnLFxuICAgIGNvbnZlcnRlcjogKHZhbHVlKSA9PiB7XG4gICAgICB2YWx1ZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyh2YWx1ZSlcbiAgICAgIHZhbHVlID0gdmFsdWUudG9Mb3dlckNhc2UoKVxuXG4gICAgICBpZiAodmFsdWUgIT09ICduYXRpdmUnKSB7XG4gICAgICAgIHZhbHVlID0gJ3RyYW5zcGFyZW50J1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmFsdWVcbiAgICB9LFxuICAgIGRlZmF1bHRWYWx1ZTogJ3RyYW5zcGFyZW50J1xuICB9XG5dKVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93d3cudzMub3JnL1RSL0ZpbGVBUEkvI3Byb2Nlc3MtYmxvYi1wYXJ0c1xuICogQHBhcmFtIHsoTm9kZUpTLlR5cGVkQXJyYXl8QmxvYnxzdHJpbmcpW119IHBhcnRzXG4gKiBAcGFyYW0ge3sgdHlwZTogc3RyaW5nLCBlbmRpbmdzOiBzdHJpbmcgfX0gb3B0aW9uc1xuICovXG5mdW5jdGlvbiBwcm9jZXNzQmxvYlBhcnRzIChwYXJ0cywgb3B0aW9ucykge1xuICAvLyAxLiBMZXQgYnl0ZXMgYmUgYW4gZW1wdHkgc2VxdWVuY2Ugb2YgYnl0ZXMuXG4gIC8qKiBAdHlwZSB7Tm9kZUpTLlR5cGVkQXJyYXlbXX0gKi9cbiAgY29uc3QgYnl0ZXMgPSBbXVxuXG4gIC8vIDIuIEZvciBlYWNoIGVsZW1lbnQgaW4gcGFydHM6XG4gIGZvciAoY29uc3QgZWxlbWVudCBvZiBwYXJ0cykge1xuICAgIC8vIDEuIElmIGVsZW1lbnQgaXMgYSBVU1ZTdHJpbmcsIHJ1biB0aGUgZm9sbG93aW5nIHN1YnN0ZXBzOlxuICAgIGlmICh0eXBlb2YgZWxlbWVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIDEuIExldCBzIGJlIGVsZW1lbnQuXG4gICAgICBsZXQgcyA9IGVsZW1lbnRcblxuICAgICAgLy8gMi4gSWYgdGhlIGVuZGluZ3MgbWVtYmVyIG9mIG9wdGlvbnMgaXMgXCJuYXRpdmVcIiwgc2V0IHNcbiAgICAgIC8vICAgIHRvIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBsaW5lIGVuZGluZ3MgdG8gbmF0aXZlXG4gICAgICAvLyAgICBvZiBlbGVtZW50LlxuICAgICAgaWYgKG9wdGlvbnMuZW5kaW5ncyA9PT0gJ25hdGl2ZScpIHtcbiAgICAgICAgcyA9IGNvbnZlcnRMaW5lRW5kaW5nc05hdGl2ZShzKVxuICAgICAgfVxuXG4gICAgICAvLyAzLiBBcHBlbmQgdGhlIHJlc3VsdCBvZiBVVEYtOCBlbmNvZGluZyBzIHRvIGJ5dGVzLlxuICAgICAgYnl0ZXMucHVzaChlbmNvZGVyLmVuY29kZShzKSlcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdHlwZXMuaXNBbnlBcnJheUJ1ZmZlcihlbGVtZW50KSB8fFxuICAgICAgdHlwZXMuaXNUeXBlZEFycmF5KGVsZW1lbnQpXG4gICAgKSB7XG4gICAgICAvLyAyLiBJZiBlbGVtZW50IGlzIGEgQnVmZmVyU291cmNlLCBnZXQgYSBjb3B5IG9mIHRoZVxuICAgICAgLy8gICAgYnl0ZXMgaGVsZCBieSB0aGUgYnVmZmVyIHNvdXJjZSwgYW5kIGFwcGVuZCB0aG9zZVxuICAgICAgLy8gICAgYnl0ZXMgdG8gYnl0ZXMuXG4gICAgICBpZiAoIWVsZW1lbnQuYnVmZmVyKSB7IC8vIEFycmF5QnVmZmVyXG4gICAgICAgIGJ5dGVzLnB1c2gobmV3IFVpbnQ4QXJyYXkoZWxlbWVudCkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBieXRlcy5wdXNoKFxuICAgICAgICAgIG5ldyBVaW50OEFycmF5KGVsZW1lbnQuYnVmZmVyLCBlbGVtZW50LmJ5dGVPZmZzZXQsIGVsZW1lbnQuYnl0ZUxlbmd0aClcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNCbG9iTGlrZShlbGVtZW50KSkge1xuICAgICAgLy8gMy4gSWYgZWxlbWVudCBpcyBhIEJsb2IsIGFwcGVuZCB0aGUgYnl0ZXMgaXQgcmVwcmVzZW50c1xuICAgICAgLy8gICAgdG8gYnl0ZXMuXG4gICAgICBieXRlcy5wdXNoKGVsZW1lbnQpXG4gICAgfVxuICB9XG5cbiAgLy8gMy4gUmV0dXJuIGJ5dGVzLlxuICByZXR1cm4gYnl0ZXNcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9GaWxlQVBJLyNjb252ZXJ0LWxpbmUtZW5kaW5ncy10by1uYXRpdmVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRMaW5lRW5kaW5nc05hdGl2ZSAocykge1xuICAvLyAxLiBMZXQgbmF0aXZlIGxpbmUgZW5kaW5nIGJlIGJlIHRoZSBjb2RlIHBvaW50IFUrMDAwQSBMRi5cbiAgbGV0IG5hdGl2ZUxpbmVFbmRpbmcgPSAnXFxuJ1xuXG4gIC8vIDIuIElmIHRoZSB1bmRlcmx5aW5nIHBsYXRmb3Jt4oCZcyBjb252ZW50aW9ucyBhcmUgdG9cbiAgLy8gICAgcmVwcmVzZW50IG5ld2xpbmVzIGFzIGEgY2FycmlhZ2UgcmV0dXJuIGFuZCBsaW5lIGZlZWRcbiAgLy8gICAgc2VxdWVuY2UsIHNldCBuYXRpdmUgbGluZSBlbmRpbmcgdG8gdGhlIGNvZGUgcG9pbnRcbiAgLy8gICAgVSswMDBEIENSIGZvbGxvd2VkIGJ5IHRoZSBjb2RlIHBvaW50IFUrMDAwQSBMRi5cbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcbiAgICBuYXRpdmVMaW5lRW5kaW5nID0gJ1xcclxcbidcbiAgfVxuXG4gIHJldHVybiBzLnJlcGxhY2UoL1xccj9cXG4vZywgbmF0aXZlTGluZUVuZGluZylcbn1cblxuLy8gSWYgdGhpcyBmdW5jdGlvbiBpcyBtb3ZlZCB0byAuL3V0aWwuanMsIHNvbWUgdG9vbHMgKHN1Y2ggYXNcbi8vIHJvbGx1cCkgd2lsbCB3YXJuIGFib3V0IGNpcmN1bGFyIGRlcGVuZGVuY2llcy4gU2VlOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzE2MjlcbmZ1bmN0aW9uIGlzRmlsZUxpa2UgKG9iamVjdCkge1xuICByZXR1cm4gKFxuICAgIChOYXRpdmVGaWxlICYmIG9iamVjdCBpbnN0YW5jZW9mIE5hdGl2ZUZpbGUpIHx8XG4gICAgb2JqZWN0IGluc3RhbmNlb2YgRmlsZSB8fCAoXG4gICAgICBvYmplY3QgJiZcbiAgICAgICh0eXBlb2Ygb2JqZWN0LnN0cmVhbSA9PT0gJ2Z1bmN0aW9uJyB8fFxuICAgICAgdHlwZW9mIG9iamVjdC5hcnJheUJ1ZmZlciA9PT0gJ2Z1bmN0aW9uJykgJiZcbiAgICAgIG9iamVjdFtTeW1ib2wudG9TdHJpbmdUYWddID09PSAnRmlsZSdcbiAgICApXG4gIClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7IEZpbGUsIEZpbGVMaWtlLCBpc0ZpbGVMaWtlIH1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgaXNCbG9iTGlrZSwgdG9VU1ZTdHJpbmcsIG1ha2VJdGVyYXRvciB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsga1N0YXRlIH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBGaWxlOiBVbmRpY2lGaWxlLCBGaWxlTGlrZSwgaXNGaWxlTGlrZSB9ID0gcmVxdWlyZSgnLi9maWxlJylcbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuL3dlYmlkbCcpXG5jb25zdCB7IEJsb2IsIEZpbGU6IE5hdGl2ZUZpbGUgfSA9IHJlcXVpcmUoJ2J1ZmZlcicpXG5cbi8qKiBAdHlwZSB7Z2xvYmFsVGhpc1snRmlsZSddfSAqL1xuY29uc3QgRmlsZSA9IE5hdGl2ZUZpbGUgPz8gVW5kaWNpRmlsZVxuXG4vLyBodHRwczovL3hoci5zcGVjLndoYXR3Zy5vcmcvI2Zvcm1kYXRhXG5jbGFzcyBGb3JtRGF0YSB7XG4gIGNvbnN0cnVjdG9yIChmb3JtKSB7XG4gICAgaWYgKGZvcm0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5jb252ZXJzaW9uRmFpbGVkKHtcbiAgICAgICAgcHJlZml4OiAnRm9ybURhdGEgY29uc3RydWN0b3InLFxuICAgICAgICBhcmd1bWVudDogJ0FyZ3VtZW50IDEnLFxuICAgICAgICB0eXBlczogWyd1bmRlZmluZWQnXVxuICAgICAgfSlcbiAgICB9XG5cbiAgICB0aGlzW2tTdGF0ZV0gPSBbXVxuICB9XG5cbiAgYXBwZW5kIChuYW1lLCB2YWx1ZSwgZmlsZW5hbWUgPSB1bmRlZmluZWQpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMiwgeyBoZWFkZXI6ICdGb3JtRGF0YS5hcHBlbmQnIH0pXG5cbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMyAmJiAhaXNCbG9iTGlrZSh2YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ2FwcGVuZCcgb24gJ0Zvcm1EYXRhJzogcGFyYW1ldGVyIDIgaXMgbm90IG9mIHR5cGUgJ0Jsb2InXCJcbiAgICAgIClcbiAgICB9XG5cbiAgICAvLyAxLiBMZXQgdmFsdWUgYmUgdmFsdWUgaWYgZ2l2ZW47IG90aGVyd2lzZSBibG9iVmFsdWUuXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKG5hbWUpXG4gICAgdmFsdWUgPSBpc0Jsb2JMaWtlKHZhbHVlKVxuICAgICAgPyB3ZWJpZGwuY29udmVydGVycy5CbG9iKHZhbHVlLCB7IHN0cmljdDogZmFsc2UgfSlcbiAgICAgIDogd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKHZhbHVlKVxuICAgIGZpbGVuYW1lID0gYXJndW1lbnRzLmxlbmd0aCA9PT0gM1xuICAgICAgPyB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcoZmlsZW5hbWUpXG4gICAgICA6IHVuZGVmaW5lZFxuXG4gICAgLy8gMi4gTGV0IGVudHJ5IGJlIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYW4gZW50cnkgd2l0aFxuICAgIC8vIG5hbWUsIHZhbHVlLCBhbmQgZmlsZW5hbWUgaWYgZ2l2ZW4uXG4gICAgY29uc3QgZW50cnkgPSBtYWtlRW50cnkobmFtZSwgdmFsdWUsIGZpbGVuYW1lKVxuXG4gICAgLy8gMy4gQXBwZW5kIGVudHJ5IHRvIHRoaXPigJlzIGVudHJ5IGxpc3QuXG4gICAgdGhpc1trU3RhdGVdLnB1c2goZW50cnkpXG4gIH1cblxuICBkZWxldGUgKG5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdGb3JtRGF0YS5kZWxldGUnIH0pXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKG5hbWUpXG5cbiAgICAvLyBUaGUgZGVsZXRlKG5hbWUpIG1ldGhvZCBzdGVwcyBhcmUgdG8gcmVtb3ZlIGFsbCBlbnRyaWVzIHdob3NlIG5hbWVcbiAgICAvLyBpcyBuYW1lIGZyb20gdGhpc+KAmXMgZW50cnkgbGlzdC5cbiAgICB0aGlzW2tTdGF0ZV0gPSB0aGlzW2tTdGF0ZV0uZmlsdGVyKGVudHJ5ID0+IGVudHJ5Lm5hbWUgIT09IG5hbWUpXG4gIH1cblxuICBnZXQgKG5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdGb3JtRGF0YS5nZXQnIH0pXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKG5hbWUpXG5cbiAgICAvLyAxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSB3aG9zZSBuYW1lIGlzIG5hbWUgaW4gdGhpc+KAmXMgZW50cnkgbGlzdCxcbiAgICAvLyB0aGVuIHJldHVybiBudWxsLlxuICAgIGNvbnN0IGlkeCA9IHRoaXNba1N0YXRlXS5maW5kSW5kZXgoKGVudHJ5KSA9PiBlbnRyeS5uYW1lID09PSBuYW1lKVxuICAgIGlmIChpZHggPT09IC0xKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIC8vIDIuIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IGVudHJ5IHdob3NlIG5hbWUgaXMgbmFtZSBmcm9tXG4gICAgLy8gdGhpc+KAmXMgZW50cnkgbGlzdC5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdW2lkeF0udmFsdWVcbiAgfVxuXG4gIGdldEFsbCAobmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZvcm1EYXRhKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0Zvcm1EYXRhLmdldEFsbCcgfSlcblxuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcobmFtZSlcblxuICAgIC8vIDEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IHdob3NlIG5hbWUgaXMgbmFtZSBpbiB0aGlz4oCZcyBlbnRyeSBsaXN0LFxuICAgIC8vIHRoZW4gcmV0dXJuIHRoZSBlbXB0eSBsaXN0LlxuICAgIC8vIDIuIFJldHVybiB0aGUgdmFsdWVzIG9mIGFsbCBlbnRyaWVzIHdob3NlIG5hbWUgaXMgbmFtZSwgaW4gb3JkZXIsXG4gICAgLy8gZnJvbSB0aGlz4oCZcyBlbnRyeSBsaXN0LlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV1cbiAgICAgIC5maWx0ZXIoKGVudHJ5KSA9PiBlbnRyeS5uYW1lID09PSBuYW1lKVxuICAgICAgLm1hcCgoZW50cnkpID0+IGVudHJ5LnZhbHVlKVxuICB9XG5cbiAgaGFzIChuYW1lKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRm9ybURhdGEpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRm9ybURhdGEuaGFzJyB9KVxuXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhuYW1lKVxuXG4gICAgLy8gVGhlIGhhcyhuYW1lKSBtZXRob2Qgc3RlcHMgYXJlIHRvIHJldHVybiB0cnVlIGlmIHRoZXJlIGlzIGFuIGVudHJ5XG4gICAgLy8gd2hvc2UgbmFtZSBpcyBuYW1lIGluIHRoaXPigJlzIGVudHJ5IGxpc3Q7IG90aGVyd2lzZSBmYWxzZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmZpbmRJbmRleCgoZW50cnkpID0+IGVudHJ5Lm5hbWUgPT09IG5hbWUpICE9PSAtMVxuICB9XG5cbiAgc2V0IChuYW1lLCB2YWx1ZSwgZmlsZW5hbWUgPSB1bmRlZmluZWQpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMiwgeyBoZWFkZXI6ICdGb3JtRGF0YS5zZXQnIH0pXG5cbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMyAmJiAhaXNCbG9iTGlrZSh2YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ3NldCcgb24gJ0Zvcm1EYXRhJzogcGFyYW1ldGVyIDIgaXMgbm90IG9mIHR5cGUgJ0Jsb2InXCJcbiAgICAgIClcbiAgICB9XG5cbiAgICAvLyBUaGUgc2V0KG5hbWUsIHZhbHVlKSBhbmQgc2V0KG5hbWUsIGJsb2JWYWx1ZSwgZmlsZW5hbWUpIG1ldGhvZCBzdGVwc1xuICAgIC8vIGFyZTpcblxuICAgIC8vIDEuIExldCB2YWx1ZSBiZSB2YWx1ZSBpZiBnaXZlbjsgb3RoZXJ3aXNlIGJsb2JWYWx1ZS5cblxuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcobmFtZSlcbiAgICB2YWx1ZSA9IGlzQmxvYkxpa2UodmFsdWUpXG4gICAgICA/IHdlYmlkbC5jb252ZXJ0ZXJzLkJsb2IodmFsdWUsIHsgc3RyaWN0OiBmYWxzZSB9KVxuICAgICAgOiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcodmFsdWUpXG4gICAgZmlsZW5hbWUgPSBhcmd1bWVudHMubGVuZ3RoID09PSAzXG4gICAgICA/IHRvVVNWU3RyaW5nKGZpbGVuYW1lKVxuICAgICAgOiB1bmRlZmluZWRcblxuICAgIC8vIDIuIExldCBlbnRyeSBiZSB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGFuIGVudHJ5IHdpdGggbmFtZSwgdmFsdWUsIGFuZFxuICAgIC8vIGZpbGVuYW1lIGlmIGdpdmVuLlxuICAgIGNvbnN0IGVudHJ5ID0gbWFrZUVudHJ5KG5hbWUsIHZhbHVlLCBmaWxlbmFtZSlcblxuICAgIC8vIDMuIElmIHRoZXJlIGFyZSBlbnRyaWVzIGluIHRoaXPigJlzIGVudHJ5IGxpc3Qgd2hvc2UgbmFtZSBpcyBuYW1lLCB0aGVuXG4gICAgLy8gcmVwbGFjZSB0aGUgZmlyc3Qgc3VjaCBlbnRyeSB3aXRoIGVudHJ5IGFuZCByZW1vdmUgdGhlIG90aGVycy5cbiAgICBjb25zdCBpZHggPSB0aGlzW2tTdGF0ZV0uZmluZEluZGV4KChlbnRyeSkgPT4gZW50cnkubmFtZSA9PT0gbmFtZSlcbiAgICBpZiAoaWR4ICE9PSAtMSkge1xuICAgICAgdGhpc1trU3RhdGVdID0gW1xuICAgICAgICAuLi50aGlzW2tTdGF0ZV0uc2xpY2UoMCwgaWR4KSxcbiAgICAgICAgZW50cnksXG4gICAgICAgIC4uLnRoaXNba1N0YXRlXS5zbGljZShpZHggKyAxKS5maWx0ZXIoKGVudHJ5KSA9PiBlbnRyeS5uYW1lICE9PSBuYW1lKVxuICAgICAgXVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyA0LiBPdGhlcndpc2UsIGFwcGVuZCBlbnRyeSB0byB0aGlz4oCZcyBlbnRyeSBsaXN0LlxuICAgICAgdGhpc1trU3RhdGVdLnB1c2goZW50cnkpXG4gICAgfVxuICB9XG5cbiAgZW50cmllcyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRm9ybURhdGEpXG5cbiAgICByZXR1cm4gbWFrZUl0ZXJhdG9yKFxuICAgICAgKCkgPT4gdGhpc1trU3RhdGVdLm1hcChwYWlyID0+IFtwYWlyLm5hbWUsIHBhaXIudmFsdWVdKSxcbiAgICAgICdGb3JtRGF0YScsXG4gICAgICAna2V5K3ZhbHVlJ1xuICAgIClcbiAgfVxuXG4gIGtleXMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZvcm1EYXRhKVxuXG4gICAgcmV0dXJuIG1ha2VJdGVyYXRvcihcbiAgICAgICgpID0+IHRoaXNba1N0YXRlXS5tYXAocGFpciA9PiBbcGFpci5uYW1lLCBwYWlyLnZhbHVlXSksXG4gICAgICAnRm9ybURhdGEnLFxuICAgICAgJ2tleSdcbiAgICApXG4gIH1cblxuICB2YWx1ZXMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZvcm1EYXRhKVxuXG4gICAgcmV0dXJuIG1ha2VJdGVyYXRvcihcbiAgICAgICgpID0+IHRoaXNba1N0YXRlXS5tYXAocGFpciA9PiBbcGFpci5uYW1lLCBwYWlyLnZhbHVlXSksXG4gICAgICAnRm9ybURhdGEnLFxuICAgICAgJ3ZhbHVlJ1xuICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0geyh2YWx1ZTogc3RyaW5nLCBrZXk6IHN0cmluZywgc2VsZjogRm9ybURhdGEpID0+IHZvaWR9IGNhbGxiYWNrRm5cbiAgICogQHBhcmFtIHt1bmtub3dufSB0aGlzQXJnXG4gICAqL1xuICBmb3JFYWNoIChjYWxsYmFja0ZuLCB0aGlzQXJnID0gZ2xvYmFsVGhpcykge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZvcm1EYXRhKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0Zvcm1EYXRhLmZvckVhY2gnIH0pXG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrRm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ2ZvckVhY2gnIG9uICdGb3JtRGF0YSc6IHBhcmFtZXRlciAxIGlzIG5vdCBvZiB0eXBlICdGdW5jdGlvbicuXCJcbiAgICAgIClcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiB0aGlzKSB7XG4gICAgICBjYWxsYmFja0ZuLmFwcGx5KHRoaXNBcmcsIFt2YWx1ZSwga2V5LCB0aGlzXSlcbiAgICB9XG4gIH1cbn1cblxuRm9ybURhdGEucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl0gPSBGb3JtRGF0YS5wcm90b3R5cGUuZW50cmllc1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhGb3JtRGF0YS5wcm90b3R5cGUsIHtcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0Zvcm1EYXRhJyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfVxufSlcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm0tY29udHJvbC1pbmZyYXN0cnVjdHVyZS5odG1sI2NyZWF0ZS1hbi1lbnRyeVxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfEJsb2J9IHZhbHVlXG4gKiBAcGFyYW0gez9zdHJpbmd9IGZpbGVuYW1lXG4gKiBAcmV0dXJuc1xuICovXG5mdW5jdGlvbiBtYWtlRW50cnkgKG5hbWUsIHZhbHVlLCBmaWxlbmFtZSkge1xuICAvLyAxLiBTZXQgbmFtZSB0byB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgbmFtZSBpbnRvIGEgc2NhbGFyIHZhbHVlIHN0cmluZy5cbiAgLy8gXCJUbyBjb252ZXJ0IGEgc3RyaW5nIGludG8gYSBzY2FsYXIgdmFsdWUgc3RyaW5nLCByZXBsYWNlIGFueSBzdXJyb2dhdGVzXG4gIC8vICB3aXRoIFUrRkZGRC5cIlxuICAvLyBzZWU6IGh0dHBzOi8vbm9kZWpzLm9yZy9kaXN0L2xhdGVzdC12MTgueC9kb2NzL2FwaS9idWZmZXIuaHRtbCNidWZ0b3N0cmluZ2VuY29kaW5nLXN0YXJ0LWVuZFxuICBuYW1lID0gQnVmZmVyLmZyb20obmFtZSkudG9TdHJpbmcoJ3V0ZjgnKVxuXG4gIC8vIDIuIElmIHZhbHVlIGlzIGEgc3RyaW5nLCB0aGVuIHNldCB2YWx1ZSB0byB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmdcbiAgLy8gICAgdmFsdWUgaW50byBhIHNjYWxhciB2YWx1ZSBzdHJpbmcuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFsdWUgPSBCdWZmZXIuZnJvbSh2YWx1ZSkudG9TdHJpbmcoJ3V0ZjgnKVxuICB9IGVsc2Uge1xuICAgIC8vIDMuIE90aGVyd2lzZTpcblxuICAgIC8vIDEuIElmIHZhbHVlIGlzIG5vdCBhIEZpbGUgb2JqZWN0LCB0aGVuIHNldCB2YWx1ZSB0byBhIG5ldyBGaWxlIG9iamVjdCxcbiAgICAvLyAgICByZXByZXNlbnRpbmcgdGhlIHNhbWUgYnl0ZXMsIHdob3NlIG5hbWUgYXR0cmlidXRlIHZhbHVlIGlzIFwiYmxvYlwiXG4gICAgaWYgKCFpc0ZpbGVMaWtlKHZhbHVlKSkge1xuICAgICAgdmFsdWUgPSB2YWx1ZSBpbnN0YW5jZW9mIEJsb2JcbiAgICAgICAgPyBuZXcgRmlsZShbdmFsdWVdLCAnYmxvYicsIHsgdHlwZTogdmFsdWUudHlwZSB9KVxuICAgICAgICA6IG5ldyBGaWxlTGlrZSh2YWx1ZSwgJ2Jsb2InLCB7IHR5cGU6IHZhbHVlLnR5cGUgfSlcbiAgICB9XG5cbiAgICAvLyAyLiBJZiBmaWxlbmFtZSBpcyBnaXZlbiwgdGhlbiBzZXQgdmFsdWUgdG8gYSBuZXcgRmlsZSBvYmplY3QsXG4gICAgLy8gICAgcmVwcmVzZW50aW5nIHRoZSBzYW1lIGJ5dGVzLCB3aG9zZSBuYW1lIGF0dHJpYnV0ZSBpcyBmaWxlbmFtZS5cbiAgICBpZiAoZmlsZW5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLyoqIEB0eXBlIHtGaWxlUHJvcGVydHlCYWd9ICovXG4gICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICB0eXBlOiB2YWx1ZS50eXBlLFxuICAgICAgICBsYXN0TW9kaWZpZWQ6IHZhbHVlLmxhc3RNb2RpZmllZFxuICAgICAgfVxuXG4gICAgICB2YWx1ZSA9IChOYXRpdmVGaWxlICYmIHZhbHVlIGluc3RhbmNlb2YgTmF0aXZlRmlsZSkgfHwgdmFsdWUgaW5zdGFuY2VvZiBVbmRpY2lGaWxlXG4gICAgICAgID8gbmV3IEZpbGUoW3ZhbHVlXSwgZmlsZW5hbWUsIG9wdGlvbnMpXG4gICAgICAgIDogbmV3IEZpbGVMaWtlKHZhbHVlLCBmaWxlbmFtZSwgb3B0aW9ucylcbiAgICB9XG4gIH1cblxuICAvLyA0LiBSZXR1cm4gYW4gZW50cnkgd2hvc2UgbmFtZSBpcyBuYW1lIGFuZCB3aG9zZSB2YWx1ZSBpcyB2YWx1ZS5cbiAgcmV0dXJuIHsgbmFtZSwgdmFsdWUgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHsgRm9ybURhdGEgfVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgQnVzYm95ID0gcmVxdWlyZSgnQGZhc3RpZnkvYnVzYm95JylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3Qge1xuICBSZWFkYWJsZVN0cmVhbUZyb20sXG4gIGlzQmxvYkxpa2UsXG4gIGlzUmVhZGFibGVTdHJlYW1MaWtlLFxuICByZWFkYWJsZVN0cmVhbUNsb3NlLFxuICBjcmVhdGVEZWZlcnJlZFByb21pc2UsXG4gIGZ1bGx5UmVhZEJvZHlcbn0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBGb3JtRGF0YSB9ID0gcmVxdWlyZSgnLi9mb3JtZGF0YScpXG5jb25zdCB7IGtTdGF0ZSB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuL3dlYmlkbCcpXG5jb25zdCB7IERPTUV4Y2VwdGlvbiwgc3RydWN0dXJlZENsb25lIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7IEJsb2IsIEZpbGU6IE5hdGl2ZUZpbGUgfSA9IHJlcXVpcmUoJ2J1ZmZlcicpXG5jb25zdCB7IGtCb2R5VXNlZCB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7IGlzRXJyb3JlZCB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgaXNVaW50OEFycmF5LCBpc0FycmF5QnVmZmVyIH0gPSByZXF1aXJlKCd1dGlsL3R5cGVzJylcbmNvbnN0IHsgRmlsZTogVW5kaWNpRmlsZSB9ID0gcmVxdWlyZSgnLi9maWxlJylcbmNvbnN0IHsgcGFyc2VNSU1FVHlwZSwgc2VyaWFsaXplQU1pbWVUeXBlIH0gPSByZXF1aXJlKCcuL2RhdGFVUkwnKVxuXG5sZXQgUmVhZGFibGVTdHJlYW0gPSBnbG9iYWxUaGlzLlJlYWRhYmxlU3RyZWFtXG5cbi8qKiBAdHlwZSB7Z2xvYmFsVGhpc1snRmlsZSddfSAqL1xuY29uc3QgRmlsZSA9IE5hdGl2ZUZpbGUgPz8gVW5kaWNpRmlsZVxuY29uc3QgdGV4dEVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKVxuY29uc3QgdGV4dERlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1ib2R5aW5pdC1leHRyYWN0XG5mdW5jdGlvbiBleHRyYWN0Qm9keSAob2JqZWN0LCBrZWVwYWxpdmUgPSBmYWxzZSkge1xuICBpZiAoIVJlYWRhYmxlU3RyZWFtKSB7XG4gICAgUmVhZGFibGVTdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0vd2ViJykuUmVhZGFibGVTdHJlYW1cbiAgfVxuXG4gIC8vIDEuIExldCBzdHJlYW0gYmUgbnVsbC5cbiAgbGV0IHN0cmVhbSA9IG51bGxcblxuICAvLyAyLiBJZiBvYmplY3QgaXMgYSBSZWFkYWJsZVN0cmVhbSBvYmplY3QsIHRoZW4gc2V0IHN0cmVhbSB0byBvYmplY3QuXG4gIGlmIChvYmplY3QgaW5zdGFuY2VvZiBSZWFkYWJsZVN0cmVhbSkge1xuICAgIHN0cmVhbSA9IG9iamVjdFxuICB9IGVsc2UgaWYgKGlzQmxvYkxpa2Uob2JqZWN0KSkge1xuICAgIC8vIDMuIE90aGVyd2lzZSwgaWYgb2JqZWN0IGlzIGEgQmxvYiBvYmplY3QsIHNldCBzdHJlYW0gdG8gdGhlXG4gICAgLy8gICAgcmVzdWx0IG9mIHJ1bm5pbmcgb2JqZWN04oCZcyBnZXQgc3RyZWFtLlxuICAgIHN0cmVhbSA9IG9iamVjdC5zdHJlYW0oKVxuICB9IGVsc2Uge1xuICAgIC8vIDQuIE90aGVyd2lzZSwgc2V0IHN0cmVhbSB0byBhIG5ldyBSZWFkYWJsZVN0cmVhbSBvYmplY3QsIGFuZCBzZXRcbiAgICAvLyAgICB1cCBzdHJlYW0uXG4gICAgc3RyZWFtID0gbmV3IFJlYWRhYmxlU3RyZWFtKHtcbiAgICAgIGFzeW5jIHB1bGwgKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKFxuICAgICAgICAgIHR5cGVvZiBzb3VyY2UgPT09ICdzdHJpbmcnID8gdGV4dEVuY29kZXIuZW5jb2RlKHNvdXJjZSkgOiBzb3VyY2VcbiAgICAgICAgKVxuICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiByZWFkYWJsZVN0cmVhbUNsb3NlKGNvbnRyb2xsZXIpKVxuICAgICAgfSxcbiAgICAgIHN0YXJ0ICgpIHt9LFxuICAgICAgdHlwZTogdW5kZWZpbmVkXG4gICAgfSlcbiAgfVxuXG4gIC8vIDUuIEFzc2VydDogc3RyZWFtIGlzIGEgUmVhZGFibGVTdHJlYW0gb2JqZWN0LlxuICBhc3NlcnQoaXNSZWFkYWJsZVN0cmVhbUxpa2Uoc3RyZWFtKSlcblxuICAvLyA2LiBMZXQgYWN0aW9uIGJlIG51bGwuXG4gIGxldCBhY3Rpb24gPSBudWxsXG5cbiAgLy8gNy4gTGV0IHNvdXJjZSBiZSBudWxsLlxuICBsZXQgc291cmNlID0gbnVsbFxuXG4gIC8vIDguIExldCBsZW5ndGggYmUgbnVsbC5cbiAgbGV0IGxlbmd0aCA9IG51bGxcblxuICAvLyA5LiBMZXQgdHlwZSBiZSBudWxsLlxuICBsZXQgdHlwZSA9IG51bGxcblxuICAvLyAxMC4gU3dpdGNoIG9uIG9iamVjdDpcbiAgaWYgKHR5cGVvZiBvYmplY3QgPT09ICdzdHJpbmcnKSB7XG4gICAgLy8gU2V0IHNvdXJjZSB0byB0aGUgVVRGLTggZW5jb2Rpbmcgb2Ygb2JqZWN0LlxuICAgIC8vIE5vdGU6IHNldHRpbmcgc291cmNlIHRvIGEgVWludDhBcnJheSBoZXJlIGJyZWFrcyBzb21lIG1vY2tpbmcgYXNzdW1wdGlvbnMuXG4gICAgc291cmNlID0gb2JqZWN0XG5cbiAgICAvLyBTZXQgdHlwZSB0byBgdGV4dC9wbGFpbjtjaGFyc2V0PVVURi04YC5cbiAgICB0eXBlID0gJ3RleHQvcGxhaW47Y2hhcnNldD1VVEYtOCdcbiAgfSBlbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBVUkxTZWFyY2hQYXJhbXMpIHtcbiAgICAvLyBVUkxTZWFyY2hQYXJhbXNcblxuICAgIC8vIHNwZWMgc2F5cyB0byBydW4gYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIG9uIGJvZHkubGlzdFxuICAgIC8vIHRoaXMgaXMgaW1wbGVtZW50ZWQgaW4gTm9kZS5qcyBhcyBhcGFydCBvZiBhbiBVUkxTZWFyY2hQYXJhbXMgaW5zdGFuY2UgdG9TdHJpbmcgbWV0aG9kXG4gICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvYmxvYi9lNDZjNjgwYmYyYjIxMWJiZDUyY2Y5NTljYTE3ZWU5OGM3ZjY1N2Y1L2xpYi9pbnRlcm5hbC91cmwuanMjTDQ5MFxuICAgIC8vIGFuZCBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvYmxvYi9lNDZjNjgwYmYyYjIxMWJiZDUyY2Y5NTljYTE3ZWU5OGM3ZjY1N2Y1L2xpYi9pbnRlcm5hbC91cmwuanMjTDExMDBcblxuICAgIC8vIFNldCBzb3VyY2UgdG8gdGhlIHJlc3VsdCBvZiBydW5uaW5nIHRoZSBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQgc2VyaWFsaXplciB3aXRoIG9iamVjdOKAmXMgbGlzdC5cbiAgICBzb3VyY2UgPSBvYmplY3QudG9TdHJpbmcoKVxuXG4gICAgLy8gU2V0IHR5cGUgdG8gYGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04YC5cbiAgICB0eXBlID0gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04J1xuICB9IGVsc2UgaWYgKGlzQXJyYXlCdWZmZXIob2JqZWN0KSkge1xuICAgIC8vIEJ1ZmZlclNvdXJjZS9BcnJheUJ1ZmZlclxuXG4gICAgLy8gU2V0IHNvdXJjZSB0byBhIGNvcHkgb2YgdGhlIGJ5dGVzIGhlbGQgYnkgb2JqZWN0LlxuICAgIHNvdXJjZSA9IG5ldyBVaW50OEFycmF5KG9iamVjdC5zbGljZSgpKVxuICB9IGVsc2UgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhvYmplY3QpKSB7XG4gICAgLy8gQnVmZmVyU291cmNlL0FycmF5QnVmZmVyVmlld1xuXG4gICAgLy8gU2V0IHNvdXJjZSB0byBhIGNvcHkgb2YgdGhlIGJ5dGVzIGhlbGQgYnkgb2JqZWN0LlxuICAgIHNvdXJjZSA9IG5ldyBVaW50OEFycmF5KG9iamVjdC5idWZmZXIuc2xpY2Uob2JqZWN0LmJ5dGVPZmZzZXQsIG9iamVjdC5ieXRlT2Zmc2V0ICsgb2JqZWN0LmJ5dGVMZW5ndGgpKVxuICB9IGVsc2UgaWYgKHV0aWwuaXNGb3JtRGF0YUxpa2Uob2JqZWN0KSkge1xuICAgIGNvbnN0IGJvdW5kYXJ5ID0gYC0tLS1mb3JtZGF0YS11bmRpY2ktMCR7YCR7TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMWUxMSl9YC5wYWRTdGFydCgxMSwgJzAnKX1gXG4gICAgY29uc3QgcHJlZml4ID0gYC0tJHtib3VuZGFyeX1cXHJcXG5Db250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGFgXG5cbiAgICAvKiEgZm9ybWRhdGEtcG9seWZpbGwuIE1JVCBMaWNlbnNlLiBKaW1teSBXw6RydGluZyA8aHR0cHM6Ly9qaW1teS53YXJ0aW5nLnNlL29wZW5zb3VyY2U+ICovXG4gICAgY29uc3QgZXNjYXBlID0gKHN0cikgPT5cbiAgICAgIHN0ci5yZXBsYWNlKC9cXG4vZywgJyUwQScpLnJlcGxhY2UoL1xcci9nLCAnJTBEJykucmVwbGFjZSgvXCIvZywgJyUyMicpXG4gICAgY29uc3Qgbm9ybWFsaXplTGluZWZlZWRzID0gKHZhbHVlKSA9PiB2YWx1ZS5yZXBsYWNlKC9cXHI/XFxufFxcci9nLCAnXFxyXFxuJylcblxuICAgIC8vIFNldCBhY3Rpb24gdG8gdGhpcyBzdGVwOiBydW4gdGhlIG11bHRpcGFydC9mb3JtLWRhdGFcbiAgICAvLyBlbmNvZGluZyBhbGdvcml0aG0sIHdpdGggb2JqZWN04oCZcyBlbnRyeSBsaXN0IGFuZCBVVEYtOC5cbiAgICAvLyAtIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBib2R5IGlzIGltbXV0YWJsZSBhbmQgY2FuJ3QgYmUgY2hhbmdlZCBhZnRlcndvcmRzXG4gICAgLy8gLSBUaGF0IHRoZSBjb250ZW50LWxlbmd0aCBpcyBjYWxjdWxhdGVkIGluIGFkdmFuY2UuXG4gICAgLy8gLSBBbmQgdGhhdCBhbGwgcGFydHMgYXJlIHByZS1lbmNvZGVkIGFuZCByZWFkeSB0byBiZSBzZW50LlxuXG4gICAgY29uc3QgYmxvYlBhcnRzID0gW11cbiAgICBjb25zdCBybiA9IG5ldyBVaW50OEFycmF5KFsxMywgMTBdKSAvLyAnXFxyXFxuJ1xuICAgIGxlbmd0aCA9IDBcbiAgICBsZXQgaGFzVW5rbm93blNpemVWYWx1ZSA9IGZhbHNlXG5cbiAgICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2Ygb2JqZWN0KSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb25zdCBjaHVuayA9IHRleHRFbmNvZGVyLmVuY29kZShwcmVmaXggK1xuICAgICAgICAgIGA7IG5hbWU9XCIke2VzY2FwZShub3JtYWxpemVMaW5lZmVlZHMobmFtZSkpfVwiYCArXG4gICAgICAgICAgYFxcclxcblxcclxcbiR7bm9ybWFsaXplTGluZWZlZWRzKHZhbHVlKX1cXHJcXG5gKVxuICAgICAgICBibG9iUGFydHMucHVzaChjaHVuaylcbiAgICAgICAgbGVuZ3RoICs9IGNodW5rLmJ5dGVMZW5ndGhcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNodW5rID0gdGV4dEVuY29kZXIuZW5jb2RlKGAke3ByZWZpeH07IG5hbWU9XCIke2VzY2FwZShub3JtYWxpemVMaW5lZmVlZHMobmFtZSkpfVwiYCArXG4gICAgICAgICAgKHZhbHVlLm5hbWUgPyBgOyBmaWxlbmFtZT1cIiR7ZXNjYXBlKHZhbHVlLm5hbWUpfVwiYCA6ICcnKSArICdcXHJcXG4nICtcbiAgICAgICAgICBgQ29udGVudC1UeXBlOiAke1xuICAgICAgICAgICAgdmFsdWUudHlwZSB8fCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJ1xuICAgICAgICAgIH1cXHJcXG5cXHJcXG5gKVxuICAgICAgICBibG9iUGFydHMucHVzaChjaHVuaywgdmFsdWUsIHJuKVxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlLnNpemUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgbGVuZ3RoICs9IGNodW5rLmJ5dGVMZW5ndGggKyB2YWx1ZS5zaXplICsgcm4uYnl0ZUxlbmd0aFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGhhc1Vua25vd25TaXplVmFsdWUgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjaHVuayA9IHRleHRFbmNvZGVyLmVuY29kZShgLS0ke2JvdW5kYXJ5fS0tYClcbiAgICBibG9iUGFydHMucHVzaChjaHVuaylcbiAgICBsZW5ndGggKz0gY2h1bmsuYnl0ZUxlbmd0aFxuICAgIGlmIChoYXNVbmtub3duU2l6ZVZhbHVlKSB7XG4gICAgICBsZW5ndGggPSBudWxsXG4gICAgfVxuXG4gICAgLy8gU2V0IHNvdXJjZSB0byBvYmplY3QuXG4gICAgc291cmNlID0gb2JqZWN0XG5cbiAgICBhY3Rpb24gPSBhc3luYyBmdW5jdGlvbiAqICgpIHtcbiAgICAgIGZvciAoY29uc3QgcGFydCBvZiBibG9iUGFydHMpIHtcbiAgICAgICAgaWYgKHBhcnQuc3RyZWFtKSB7XG4gICAgICAgICAgeWllbGQgKiBwYXJ0LnN0cmVhbSgpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgeWllbGQgcGFydFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2V0IHR5cGUgdG8gYG11bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PWAsXG4gICAgLy8gZm9sbG93ZWQgYnkgdGhlIG11bHRpcGFydC9mb3JtLWRhdGEgYm91bmRhcnkgc3RyaW5nIGdlbmVyYXRlZFxuICAgIC8vIGJ5IHRoZSBtdWx0aXBhcnQvZm9ybS1kYXRhIGVuY29kaW5nIGFsZ29yaXRobS5cbiAgICB0eXBlID0gJ211bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PScgKyBib3VuZGFyeVxuICB9IGVsc2UgaWYgKGlzQmxvYkxpa2Uob2JqZWN0KSkge1xuICAgIC8vIEJsb2JcblxuICAgIC8vIFNldCBzb3VyY2UgdG8gb2JqZWN0LlxuICAgIHNvdXJjZSA9IG9iamVjdFxuXG4gICAgLy8gU2V0IGxlbmd0aCB0byBvYmplY3TigJlzIHNpemUuXG4gICAgbGVuZ3RoID0gb2JqZWN0LnNpemVcblxuICAgIC8vIElmIG9iamVjdOKAmXMgdHlwZSBhdHRyaWJ1dGUgaXMgbm90IHRoZSBlbXB0eSBieXRlIHNlcXVlbmNlLCBzZXRcbiAgICAvLyB0eXBlIHRvIGl0cyB2YWx1ZS5cbiAgICBpZiAob2JqZWN0LnR5cGUpIHtcbiAgICAgIHR5cGUgPSBvYmplY3QudHlwZVxuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0W1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIElmIGtlZXBhbGl2ZSBpcyB0cnVlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmIChrZWVwYWxpdmUpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2tlZXBhbGl2ZScpXG4gICAgfVxuXG4gICAgLy8gSWYgb2JqZWN0IGlzIGRpc3R1cmJlZCBvciBsb2NrZWQsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKHV0aWwuaXNEaXN0dXJiZWQob2JqZWN0KSB8fCBvYmplY3QubG9ja2VkKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAnUmVzcG9uc2UgYm9keSBvYmplY3Qgc2hvdWxkIG5vdCBiZSBkaXN0dXJiZWQgb3IgbG9ja2VkJ1xuICAgICAgKVxuICAgIH1cblxuICAgIHN0cmVhbSA9XG4gICAgICBvYmplY3QgaW5zdGFuY2VvZiBSZWFkYWJsZVN0cmVhbSA/IG9iamVjdCA6IFJlYWRhYmxlU3RyZWFtRnJvbShvYmplY3QpXG4gIH1cblxuICAvLyAxMS4gSWYgc291cmNlIGlzIGEgYnl0ZSBzZXF1ZW5jZSwgdGhlbiBzZXQgYWN0aW9uIHRvIGFcbiAgLy8gc3RlcCB0aGF0IHJldHVybnMgc291cmNlIGFuZCBsZW5ndGggdG8gc291cmNl4oCZcyBsZW5ndGguXG4gIGlmICh0eXBlb2Ygc291cmNlID09PSAnc3RyaW5nJyB8fCB1dGlsLmlzQnVmZmVyKHNvdXJjZSkpIHtcbiAgICBsZW5ndGggPSBCdWZmZXIuYnl0ZUxlbmd0aChzb3VyY2UpXG4gIH1cblxuICAvLyAxMi4gSWYgYWN0aW9uIGlzIG5vbi1udWxsLCB0aGVuIHJ1biB0aGVzZSBzdGVwcyBpbiBpbiBwYXJhbGxlbDpcbiAgaWYgKGFjdGlvbiAhPSBudWxsKSB7XG4gICAgLy8gUnVuIGFjdGlvbi5cbiAgICBsZXQgaXRlcmF0b3JcbiAgICBzdHJlYW0gPSBuZXcgUmVhZGFibGVTdHJlYW0oe1xuICAgICAgYXN5bmMgc3RhcnQgKCkge1xuICAgICAgICBpdGVyYXRvciA9IGFjdGlvbihvYmplY3QpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpXG4gICAgICB9LFxuICAgICAgYXN5bmMgcHVsbCAoY29udHJvbGxlcikge1xuICAgICAgICBjb25zdCB7IHZhbHVlLCBkb25lIH0gPSBhd2FpdCBpdGVyYXRvci5uZXh0KClcbiAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAvLyBXaGVuIHJ1bm5pbmcgYWN0aW9uIGlzIGRvbmUsIGNsb3NlIHN0cmVhbS5cbiAgICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgICAgICBjb250cm9sbGVyLmNsb3NlKClcbiAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFdoZW5ldmVyIG9uZSBvciBtb3JlIGJ5dGVzIGFyZSBhdmFpbGFibGUgYW5kIHN0cmVhbSBpcyBub3QgZXJyb3JlZCxcbiAgICAgICAgICAvLyBlbnF1ZXVlIGEgVWludDhBcnJheSB3cmFwcGluZyBhbiBBcnJheUJ1ZmZlciBjb250YWluaW5nIHRoZSBhdmFpbGFibGVcbiAgICAgICAgICAvLyBieXRlcyBpbnRvIHN0cmVhbS5cbiAgICAgICAgICBpZiAoIWlzRXJyb3JlZChzdHJlYW0pKSB7XG4gICAgICAgICAgICBjb250cm9sbGVyLmVucXVldWUobmV3IFVpbnQ4QXJyYXkodmFsdWUpKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29udHJvbGxlci5kZXNpcmVkU2l6ZSA+IDBcbiAgICAgIH0sXG4gICAgICBhc3luYyBjYW5jZWwgKHJlYXNvbikge1xuICAgICAgICBhd2FpdCBpdGVyYXRvci5yZXR1cm4oKVxuICAgICAgfSxcbiAgICAgIHR5cGU6IHVuZGVmaW5lZFxuICAgIH0pXG4gIH1cblxuICAvLyAxMy4gTGV0IGJvZHkgYmUgYSBib2R5IHdob3NlIHN0cmVhbSBpcyBzdHJlYW0sIHNvdXJjZSBpcyBzb3VyY2UsXG4gIC8vIGFuZCBsZW5ndGggaXMgbGVuZ3RoLlxuICBjb25zdCBib2R5ID0geyBzdHJlYW0sIHNvdXJjZSwgbGVuZ3RoIH1cblxuICAvLyAxNC4gUmV0dXJuIChib2R5LCB0eXBlKS5cbiAgcmV0dXJuIFtib2R5LCB0eXBlXVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYm9keWluaXQtc2FmZWx5LWV4dHJhY3RcbmZ1bmN0aW9uIHNhZmVseUV4dHJhY3RCb2R5IChvYmplY3QsIGtlZXBhbGl2ZSA9IGZhbHNlKSB7XG4gIGlmICghUmVhZGFibGVTdHJlYW0pIHtcbiAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgIFJlYWRhYmxlU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtL3dlYicpLlJlYWRhYmxlU3RyZWFtXG4gIH1cblxuICAvLyBUbyBzYWZlbHkgZXh0cmFjdCBhIGJvZHkgYW5kIGEgYENvbnRlbnQtVHlwZWAgdmFsdWUgZnJvbVxuICAvLyBhIGJ5dGUgc2VxdWVuY2Ugb3IgQm9keUluaXQgb2JqZWN0IG9iamVjdCwgcnVuIHRoZXNlIHN0ZXBzOlxuXG4gIC8vIDEuIElmIG9iamVjdCBpcyBhIFJlYWRhYmxlU3RyZWFtIG9iamVjdCwgdGhlbjpcbiAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFJlYWRhYmxlU3RyZWFtKSB7XG4gICAgLy8gQXNzZXJ0OiBvYmplY3QgaXMgbmVpdGhlciBkaXN0dXJiZWQgbm9yIGxvY2tlZC5cbiAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgIGFzc2VydCghdXRpbC5pc0Rpc3R1cmJlZChvYmplY3QpLCAnVGhlIGJvZHkgaGFzIGFscmVhZHkgYmVlbiBjb25zdW1lZC4nKVxuICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgYXNzZXJ0KCFvYmplY3QubG9ja2VkLCAnVGhlIHN0cmVhbSBpcyBsb2NrZWQuJylcbiAgfVxuXG4gIC8vIDIuIFJldHVybiB0aGUgcmVzdWx0cyBvZiBleHRyYWN0aW5nIG9iamVjdC5cbiAgcmV0dXJuIGV4dHJhY3RCb2R5KG9iamVjdCwga2VlcGFsaXZlKVxufVxuXG5mdW5jdGlvbiBjbG9uZUJvZHkgKGJvZHkpIHtcbiAgLy8gVG8gY2xvbmUgYSBib2R5IGJvZHksIHJ1biB0aGVzZSBzdGVwczpcblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1ib2R5LWNsb25lXG5cbiAgLy8gMS4gTGV0IMKrIG91dDEsIG91dDIgwrsgYmUgdGhlIHJlc3VsdCBvZiB0ZWVpbmcgYm9keeKAmXMgc3RyZWFtLlxuICBjb25zdCBbb3V0MSwgb3V0Ml0gPSBib2R5LnN0cmVhbS50ZWUoKVxuICBjb25zdCBvdXQyQ2xvbmUgPSBzdHJ1Y3R1cmVkQ2xvbmUob3V0MiwgeyB0cmFuc2ZlcjogW291dDJdIH0pXG4gIC8vIFRoaXMsIGZvciB3aGF0ZXZlciByZWFzb25zLCB1bnJlZnMgb3V0MkNsb25lIHdoaWNoIGFsbG93c1xuICAvLyB0aGUgcHJvY2VzcyB0byBleGl0IGJ5IGl0c2VsZi5cbiAgY29uc3QgWywgZmluYWxDbG9uZV0gPSBvdXQyQ2xvbmUudGVlKClcblxuICAvLyAyLiBTZXQgYm9keeKAmXMgc3RyZWFtIHRvIG91dDEuXG4gIGJvZHkuc3RyZWFtID0gb3V0MVxuXG4gIC8vIDMuIFJldHVybiBhIGJvZHkgd2hvc2Ugc3RyZWFtIGlzIG91dDIgYW5kIG90aGVyIG1lbWJlcnMgYXJlIGNvcGllZCBmcm9tIGJvZHkuXG4gIHJldHVybiB7XG4gICAgc3RyZWFtOiBmaW5hbENsb25lLFxuICAgIGxlbmd0aDogYm9keS5sZW5ndGgsXG4gICAgc291cmNlOiBib2R5LnNvdXJjZVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uICogY29uc3VtZUJvZHkgKGJvZHkpIHtcbiAgaWYgKGJvZHkpIHtcbiAgICBpZiAoaXNVaW50OEFycmF5KGJvZHkpKSB7XG4gICAgICB5aWVsZCBib2R5XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHN0cmVhbSA9IGJvZHkuc3RyZWFtXG5cbiAgICAgIGlmICh1dGlsLmlzRGlzdHVyYmVkKHN0cmVhbSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIGJvZHkgaGFzIGFscmVhZHkgYmVlbiBjb25zdW1lZC4nKVxuICAgICAgfVxuXG4gICAgICBpZiAoc3RyZWFtLmxvY2tlZCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgc3RyZWFtIGlzIGxvY2tlZC4nKVxuICAgICAgfVxuXG4gICAgICAvLyBDb21wYXQuXG4gICAgICBzdHJlYW1ba0JvZHlVc2VkXSA9IHRydWVcblxuICAgICAgeWllbGQgKiBzdHJlYW1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdGhyb3dJZkFib3J0ZWQgKHN0YXRlKSB7XG4gIGlmIChzdGF0ZS5hYm9ydGVkKSB7XG4gICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC4nLCAnQWJvcnRFcnJvcicpXG4gIH1cbn1cblxuZnVuY3Rpb24gYm9keU1peGluTWV0aG9kcyAoaW5zdGFuY2UpIHtcbiAgY29uc3QgbWV0aG9kcyA9IHtcbiAgICBibG9iICgpIHtcbiAgICAgIC8vIFRoZSBibG9iKCkgbWV0aG9kIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhlIHJlc3VsdCBvZlxuICAgICAgLy8gcnVubmluZyBjb25zdW1lIGJvZHkgd2l0aCB0aGlzIGFuZCB0aGUgZm9sbG93aW5nIHN0ZXBcbiAgICAgIC8vIGdpdmVuIGEgYnl0ZSBzZXF1ZW5jZSBieXRlczogcmV0dXJuIGEgQmxvYiB3aG9zZVxuICAgICAgLy8gY29udGVudHMgYXJlIGJ5dGVzIGFuZCB3aG9zZSB0eXBlIGF0dHJpYnV0ZSBpcyB0aGlz4oCZc1xuICAgICAgLy8gTUlNRSB0eXBlLlxuICAgICAgcmV0dXJuIHNwZWNDb25zdW1lQm9keSh0aGlzLCAoYnl0ZXMpID0+IHtcbiAgICAgICAgbGV0IG1pbWVUeXBlID0gYm9keU1pbWVUeXBlKHRoaXMpXG5cbiAgICAgICAgaWYgKG1pbWVUeXBlID09PSAnZmFpbHVyZScpIHtcbiAgICAgICAgICBtaW1lVHlwZSA9ICcnXG4gICAgICAgIH0gZWxzZSBpZiAobWltZVR5cGUpIHtcbiAgICAgICAgICBtaW1lVHlwZSA9IHNlcmlhbGl6ZUFNaW1lVHlwZShtaW1lVHlwZSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJldHVybiBhIEJsb2Igd2hvc2UgY29udGVudHMgYXJlIGJ5dGVzIGFuZCB0eXBlIGF0dHJpYnV0ZVxuICAgICAgICAvLyBpcyBtaW1lVHlwZS5cbiAgICAgICAgcmV0dXJuIG5ldyBCbG9iKFtieXRlc10sIHsgdHlwZTogbWltZVR5cGUgfSlcbiAgICAgIH0sIGluc3RhbmNlKVxuICAgIH0sXG5cbiAgICBhcnJheUJ1ZmZlciAoKSB7XG4gICAgICAvLyBUaGUgYXJyYXlCdWZmZXIoKSBtZXRob2Qgc3RlcHMgYXJlIHRvIHJldHVybiB0aGUgcmVzdWx0XG4gICAgICAvLyBvZiBydW5uaW5nIGNvbnN1bWUgYm9keSB3aXRoIHRoaXMgYW5kIHRoZSBmb2xsb3dpbmcgc3RlcFxuICAgICAgLy8gZ2l2ZW4gYSBieXRlIHNlcXVlbmNlIGJ5dGVzOiByZXR1cm4gYSBuZXcgQXJyYXlCdWZmZXJcbiAgICAgIC8vIHdob3NlIGNvbnRlbnRzIGFyZSBieXRlcy5cbiAgICAgIHJldHVybiBzcGVjQ29uc3VtZUJvZHkodGhpcywgKGJ5dGVzKSA9PiB7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShieXRlcykuYnVmZmVyXG4gICAgICB9LCBpbnN0YW5jZSlcbiAgICB9LFxuXG4gICAgdGV4dCAoKSB7XG4gICAgICAvLyBUaGUgdGV4dCgpIG1ldGhvZCBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZ1xuICAgICAgLy8gY29uc3VtZSBib2R5IHdpdGggdGhpcyBhbmQgVVRGLTggZGVjb2RlLlxuICAgICAgcmV0dXJuIHNwZWNDb25zdW1lQm9keSh0aGlzLCB1dGY4RGVjb2RlQnl0ZXMsIGluc3RhbmNlKVxuICAgIH0sXG5cbiAgICBqc29uICgpIHtcbiAgICAgIC8vIFRoZSBqc29uKCkgbWV0aG9kIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhlIHJlc3VsdCBvZiBydW5uaW5nXG4gICAgICAvLyBjb25zdW1lIGJvZHkgd2l0aCB0aGlzIGFuZCBwYXJzZSBKU09OIGZyb20gYnl0ZXMuXG4gICAgICByZXR1cm4gc3BlY0NvbnN1bWVCb2R5KHRoaXMsIHBhcnNlSlNPTkZyb21CeXRlcywgaW5zdGFuY2UpXG4gICAgfSxcblxuICAgIGFzeW5jIGZvcm1EYXRhICgpIHtcbiAgICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIGluc3RhbmNlKVxuXG4gICAgICB0aHJvd0lmQWJvcnRlZCh0aGlzW2tTdGF0ZV0pXG5cbiAgICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gdGhpcy5oZWFkZXJzLmdldCgnQ29udGVudC1UeXBlJylcblxuICAgICAgLy8gSWYgbWltZVR5cGXigJlzIGVzc2VuY2UgaXMgXCJtdWx0aXBhcnQvZm9ybS1kYXRhXCIsIHRoZW46XG4gICAgICBpZiAoL211bHRpcGFydFxcL2Zvcm0tZGF0YS8udGVzdChjb250ZW50VHlwZSkpIHtcbiAgICAgICAgY29uc3QgaGVhZGVycyA9IHt9XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHRoaXMuaGVhZGVycykgaGVhZGVyc1trZXkudG9Mb3dlckNhc2UoKV0gPSB2YWx1ZVxuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKVxuXG4gICAgICAgIGxldCBidXNib3lcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGJ1c2JveSA9IG5ldyBCdXNib3koe1xuICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICAgIHByZXNlcnZlUGF0aDogdHJ1ZVxuICAgICAgICAgIH0pXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oYCR7ZXJyfWAsICdBYm9ydEVycm9yJylcbiAgICAgICAgfVxuXG4gICAgICAgIGJ1c2JveS5vbignZmllbGQnLCAobmFtZSwgdmFsdWUpID0+IHtcbiAgICAgICAgICByZXNwb25zZUZvcm1EYXRhLmFwcGVuZChuYW1lLCB2YWx1ZSlcbiAgICAgICAgfSlcbiAgICAgICAgYnVzYm95Lm9uKCdmaWxlJywgKG5hbWUsIHZhbHVlLCBmaWxlbmFtZSwgZW5jb2RpbmcsIG1pbWVUeXBlKSA9PiB7XG4gICAgICAgICAgY29uc3QgY2h1bmtzID0gW11cblxuICAgICAgICAgIGlmIChlbmNvZGluZyA9PT0gJ2Jhc2U2NCcgfHwgZW5jb2RpbmcudG9Mb3dlckNhc2UoKSA9PT0gJ2Jhc2U2NCcpIHtcbiAgICAgICAgICAgIGxldCBiYXNlNjRjaHVuayA9ICcnXG5cbiAgICAgICAgICAgIHZhbHVlLm9uKCdkYXRhJywgKGNodW5rKSA9PiB7XG4gICAgICAgICAgICAgIGJhc2U2NGNodW5rICs9IGNodW5rLnRvU3RyaW5nKCkucmVwbGFjZSgvW1xcclxcbl0vZ20sICcnKVxuXG4gICAgICAgICAgICAgIGNvbnN0IGVuZCA9IGJhc2U2NGNodW5rLmxlbmd0aCAtIGJhc2U2NGNodW5rLmxlbmd0aCAlIDRcbiAgICAgICAgICAgICAgY2h1bmtzLnB1c2goQnVmZmVyLmZyb20oYmFzZTY0Y2h1bmsuc2xpY2UoMCwgZW5kKSwgJ2Jhc2U2NCcpKVxuXG4gICAgICAgICAgICAgIGJhc2U2NGNodW5rID0gYmFzZTY0Y2h1bmsuc2xpY2UoZW5kKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHZhbHVlLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICAgICAgICAgIGNodW5rcy5wdXNoKEJ1ZmZlci5mcm9tKGJhc2U2NGNodW5rLCAnYmFzZTY0JykpXG4gICAgICAgICAgICAgIHJlc3BvbnNlRm9ybURhdGEuYXBwZW5kKG5hbWUsIG5ldyBGaWxlKGNodW5rcywgZmlsZW5hbWUsIHsgdHlwZTogbWltZVR5cGUgfSkpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWx1ZS5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgICAgICAgICAgICBjaHVua3MucHVzaChjaHVuaylcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB2YWx1ZS5vbignZW5kJywgKCkgPT4ge1xuICAgICAgICAgICAgICByZXNwb25zZUZvcm1EYXRhLmFwcGVuZChuYW1lLCBuZXcgRmlsZShjaHVua3MsIGZpbGVuYW1lLCB7IHR5cGU6IG1pbWVUeXBlIH0pKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG5cbiAgICAgICAgY29uc3QgYnVzYm95UmVzb2x2ZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICBidXNib3kub24oJ2ZpbmlzaCcsIHJlc29sdmUpXG4gICAgICAgICAgYnVzYm95Lm9uKCdlcnJvcicsIChlcnIpID0+IHJlamVjdChuZXcgVHlwZUVycm9yKGVycikpKVxuICAgICAgICB9KVxuXG4gICAgICAgIGlmICh0aGlzLmJvZHkgIT09IG51bGwpIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgY29uc3VtZUJvZHkodGhpc1trU3RhdGVdLmJvZHkpKSBidXNib3kud3JpdGUoY2h1bmspXG4gICAgICAgIGJ1c2JveS5lbmQoKVxuICAgICAgICBhd2FpdCBidXNib3lSZXNvbHZlXG5cbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlRm9ybURhdGFcbiAgICAgIH0gZWxzZSBpZiAoL2FwcGxpY2F0aW9uXFwveC13d3ctZm9ybS11cmxlbmNvZGVkLy50ZXN0KGNvbnRlbnRUeXBlKSkge1xuICAgICAgICAvLyBPdGhlcndpc2UsIGlmIG1pbWVUeXBl4oCZcyBlc3NlbmNlIGlzIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIsIHRoZW46XG5cbiAgICAgICAgLy8gMS4gTGV0IGVudHJpZXMgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIGJ5dGVzLlxuICAgICAgICBsZXQgZW50cmllc1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGxldCB0ZXh0ID0gJydcbiAgICAgICAgICAvLyBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQgcGFyc2VyIHdpbGwga2VlcCB0aGUgQk9NLlxuICAgICAgICAgIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC11cmxlbmNvZGVkLXBhcnNlclxuICAgICAgICAgIC8vIE5vdGUgdGhhdCBzdHJlYW1pbmcgZGVjb2RlciBpcyBzdGF0ZWZ1bCBhbmQgY2Fubm90IGJlIHJldXNlZFxuICAgICAgICAgIGNvbnN0IHN0cmVhbWluZ0RlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoJ3V0Zi04JywgeyBpZ25vcmVCT006IHRydWUgfSlcblxuICAgICAgICAgIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgY29uc3VtZUJvZHkodGhpc1trU3RhdGVdLmJvZHkpKSB7XG4gICAgICAgICAgICBpZiAoIWlzVWludDhBcnJheShjaHVuaykpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgVWludDhBcnJheSBjaHVuaycpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0ZXh0ICs9IHN0cmVhbWluZ0RlY29kZXIuZGVjb2RlKGNodW5rLCB7IHN0cmVhbTogdHJ1ZSB9KVxuICAgICAgICAgIH1cbiAgICAgICAgICB0ZXh0ICs9IHN0cmVhbWluZ0RlY29kZXIuZGVjb2RlKClcbiAgICAgICAgICBlbnRyaWVzID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh0ZXh0KVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogVW5jbGVhciB3aGVuIG5ldyBVUkxTZWFyY2hQYXJhbXMgY2FuIGZhaWwgb24gYSBzdHJpbmcuXG4gICAgICAgICAgLy8gMi4gSWYgZW50cmllcyBpcyBmYWlsdXJlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgICAgIHRocm93IE9iamVjdC5hc3NpZ24obmV3IFR5cGVFcnJvcigpLCB7IGNhdXNlOiBlcnIgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDMuIFJldHVybiBhIG5ldyBGb3JtRGF0YSBvYmplY3Qgd2hvc2UgZW50cmllcyBhcmUgZW50cmllcy5cbiAgICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKVxuICAgICAgICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2YgZW50cmllcykge1xuICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChuYW1lLCB2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm9ybURhdGFcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFdhaXQgYSB0aWNrIGJlZm9yZSBjaGVja2luZyBpZiB0aGUgcmVxdWVzdCBoYXMgYmVlbiBhYm9ydGVkLlxuICAgICAgICAvLyBPdGhlcndpc2UsIGEgVHlwZUVycm9yIGNhbiBiZSB0aHJvd24gd2hlbiBhbiBBYm9ydEVycm9yIHNob3VsZC5cbiAgICAgICAgYXdhaXQgUHJvbWlzZS5yZXNvbHZlKClcblxuICAgICAgICB0aHJvd0lmQWJvcnRlZCh0aGlzW2tTdGF0ZV0pXG5cbiAgICAgICAgLy8gT3RoZXJ3aXNlLCB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgIGhlYWRlcjogYCR7aW5zdGFuY2UubmFtZX0uZm9ybURhdGFgLFxuICAgICAgICAgIG1lc3NhZ2U6ICdDb3VsZCBub3QgcGFyc2UgY29udGVudCBhcyBGb3JtRGF0YS4nXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1ldGhvZHNcbn1cblxuZnVuY3Rpb24gbWl4aW5Cb2R5IChwcm90b3R5cGUpIHtcbiAgT2JqZWN0LmFzc2lnbihwcm90b3R5cGUucHJvdG90eXBlLCBib2R5TWl4aW5NZXRob2RzKHByb3RvdHlwZSkpXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1ib2R5LWNvbnN1bWUtYm9keVxuICogQHBhcmFtIHtSZXNwb25zZXxSZXF1ZXN0fSBvYmplY3RcbiAqIEBwYXJhbSB7KHZhbHVlOiB1bmtub3duKSA9PiB1bmtub3dufSBjb252ZXJ0Qnl0ZXNUb0pTVmFsdWVcbiAqIEBwYXJhbSB7UmVzcG9uc2V8UmVxdWVzdH0gaW5zdGFuY2VcbiAqL1xuYXN5bmMgZnVuY3Rpb24gc3BlY0NvbnN1bWVCb2R5IChvYmplY3QsIGNvbnZlcnRCeXRlc1RvSlNWYWx1ZSwgaW5zdGFuY2UpIHtcbiAgd2ViaWRsLmJyYW5kQ2hlY2sob2JqZWN0LCBpbnN0YW5jZSlcblxuICB0aHJvd0lmQWJvcnRlZChvYmplY3Rba1N0YXRlXSlcblxuICAvLyAxLiBJZiBvYmplY3QgaXMgdW51c2FibGUsIHRoZW4gcmV0dXJuIGEgcHJvbWlzZSByZWplY3RlZFxuICAvLyAgICB3aXRoIGEgVHlwZUVycm9yLlxuICBpZiAoYm9keVVudXNhYmxlKG9iamVjdFtrU3RhdGVdLmJvZHkpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQm9keSBpcyB1bnVzYWJsZScpXG4gIH1cblxuICAvLyAyLiBMZXQgcHJvbWlzZSBiZSBhIG5ldyBwcm9taXNlLlxuICBjb25zdCBwcm9taXNlID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKClcblxuICAvLyAzLiBMZXQgZXJyb3JTdGVwcyBnaXZlbiBlcnJvciBiZSB0byByZWplY3QgcHJvbWlzZSB3aXRoIGVycm9yLlxuICBjb25zdCBlcnJvclN0ZXBzID0gKGVycm9yKSA9PiBwcm9taXNlLnJlamVjdChlcnJvcilcblxuICAvLyA0LiBMZXQgc3VjY2Vzc1N0ZXBzIGdpdmVuIGEgYnl0ZSBzZXF1ZW5jZSBkYXRhIGJlIHRvIHJlc29sdmVcbiAgLy8gICAgcHJvbWlzZSB3aXRoIHRoZSByZXN1bHQgb2YgcnVubmluZyBjb252ZXJ0Qnl0ZXNUb0pTVmFsdWVcbiAgLy8gICAgd2l0aCBkYXRhLiBJZiB0aGF0IHRocmV3IGFuIGV4Y2VwdGlvbiwgdGhlbiBydW4gZXJyb3JTdGVwc1xuICAvLyAgICB3aXRoIHRoYXQgZXhjZXB0aW9uLlxuICBjb25zdCBzdWNjZXNzU3RlcHMgPSAoZGF0YSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBwcm9taXNlLnJlc29sdmUoY29udmVydEJ5dGVzVG9KU1ZhbHVlKGRhdGEpKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGVycm9yU3RlcHMoZSlcbiAgICB9XG4gIH1cblxuICAvLyA1LiBJZiBvYmplY3TigJlzIGJvZHkgaXMgbnVsbCwgdGhlbiBydW4gc3VjY2Vzc1N0ZXBzIHdpdGggYW5cbiAgLy8gICAgZW1wdHkgYnl0ZSBzZXF1ZW5jZS5cbiAgaWYgKG9iamVjdFtrU3RhdGVdLmJvZHkgPT0gbnVsbCkge1xuICAgIHN1Y2Nlc3NTdGVwcyhuZXcgVWludDhBcnJheSgpKVxuICAgIHJldHVybiBwcm9taXNlLnByb21pc2VcbiAgfVxuXG4gIC8vIDYuIE90aGVyd2lzZSwgZnVsbHkgcmVhZCBvYmplY3TigJlzIGJvZHkgZ2l2ZW4gc3VjY2Vzc1N0ZXBzLFxuICAvLyAgICBlcnJvclN0ZXBzLCBhbmQgb2JqZWN04oCZcyByZWxldmFudCBnbG9iYWwgb2JqZWN0LlxuICBhd2FpdCBmdWxseVJlYWRCb2R5KG9iamVjdFtrU3RhdGVdLmJvZHksIHN1Y2Nlc3NTdGVwcywgZXJyb3JTdGVwcylcblxuICAvLyA3LiBSZXR1cm4gcHJvbWlzZS5cbiAgcmV0dXJuIHByb21pc2UucHJvbWlzZVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYm9keS11bnVzYWJsZVxuZnVuY3Rpb24gYm9keVVudXNhYmxlIChib2R5KSB7XG4gIC8vIEFuIG9iamVjdCBpbmNsdWRpbmcgdGhlIEJvZHkgaW50ZXJmYWNlIG1peGluIGlzXG4gIC8vIHNhaWQgdG8gYmUgdW51c2FibGUgaWYgaXRzIGJvZHkgaXMgbm9uLW51bGwgYW5kXG4gIC8vIGl0cyBib2R54oCZcyBzdHJlYW0gaXMgZGlzdHVyYmVkIG9yIGxvY2tlZC5cbiAgcmV0dXJuIGJvZHkgIT0gbnVsbCAmJiAoYm9keS5zdHJlYW0ubG9ja2VkIHx8IHV0aWwuaXNEaXN0dXJiZWQoYm9keS5zdHJlYW0pKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9lbmNvZGluZy5zcGVjLndoYXR3Zy5vcmcvI3V0Zi04LWRlY29kZVxuICogQHBhcmFtIHtCdWZmZXJ9IGJ1ZmZlclxuICovXG5mdW5jdGlvbiB1dGY4RGVjb2RlQnl0ZXMgKGJ1ZmZlcikge1xuICBpZiAoYnVmZmVyLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgLy8gMS4gTGV0IGJ1ZmZlciBiZSB0aGUgcmVzdWx0IG9mIHBlZWtpbmcgdGhyZWUgYnl0ZXMgZnJvbVxuICAvLyAgICBpb1F1ZXVlLCBjb252ZXJ0ZWQgdG8gYSBieXRlIHNlcXVlbmNlLlxuXG4gIC8vIDIuIElmIGJ1ZmZlciBpcyAweEVGIDB4QkIgMHhCRiwgdGhlbiByZWFkIHRocmVlXG4gIC8vICAgIGJ5dGVzIGZyb20gaW9RdWV1ZS4gKERvIG5vdGhpbmcgd2l0aCB0aG9zZSBieXRlcy4pXG4gIGlmIChidWZmZXJbMF0gPT09IDB4RUYgJiYgYnVmZmVyWzFdID09PSAweEJCICYmIGJ1ZmZlclsyXSA9PT0gMHhCRikge1xuICAgIGJ1ZmZlciA9IGJ1ZmZlci5zdWJhcnJheSgzKVxuICB9XG5cbiAgLy8gMy4gUHJvY2VzcyBhIHF1ZXVlIHdpdGggYW4gaW5zdGFuY2Ugb2YgVVRGLTjigJlzXG4gIC8vICAgIGRlY29kZXIsIGlvUXVldWUsIG91dHB1dCwgYW5kIFwicmVwbGFjZW1lbnRcIi5cbiAgY29uc3Qgb3V0cHV0ID0gdGV4dERlY29kZXIuZGVjb2RlKGJ1ZmZlcilcblxuICAvLyA0LiBSZXR1cm4gb3V0cHV0LlxuICByZXR1cm4gb3V0cHV0XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jcGFyc2UtanNvbi1ieXRlcy10by1hLWphdmFzY3JpcHQtdmFsdWVcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gYnl0ZXNcbiAqL1xuZnVuY3Rpb24gcGFyc2VKU09ORnJvbUJ5dGVzIChieXRlcykge1xuICByZXR1cm4gSlNPTi5wYXJzZSh1dGY4RGVjb2RlQnl0ZXMoYnl0ZXMpKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtYm9keS1taW1lLXR5cGVcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL3Jlc3BvbnNlJykuUmVzcG9uc2V8aW1wb3J0KCcuL3JlcXVlc3QnKS5SZXF1ZXN0fSBvYmplY3RcbiAqL1xuZnVuY3Rpb24gYm9keU1pbWVUeXBlIChvYmplY3QpIHtcbiAgY29uc3QgeyBoZWFkZXJzTGlzdCB9ID0gb2JqZWN0W2tTdGF0ZV1cbiAgY29uc3QgY29udGVudFR5cGUgPSBoZWFkZXJzTGlzdC5nZXQoJ2NvbnRlbnQtdHlwZScpXG5cbiAgaWYgKGNvbnRlbnRUeXBlID09PSBudWxsKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgcmV0dXJuIHBhcnNlTUlNRVR5cGUoY29udGVudFR5cGUpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBleHRyYWN0Qm9keSxcbiAgc2FmZWx5RXh0cmFjdEJvZHksXG4gIGNsb25lQm9keSxcbiAgbWl4aW5Cb2R5XG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIEludmFsaWRBcmd1bWVudEVycm9yLFxuICBOb3RTdXBwb3J0ZWRFcnJvclxufSA9IHJlcXVpcmUoJy4vZXJyb3JzJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7IGtIVFRQMkJ1aWxkUmVxdWVzdCwga0hUVFAyQ29weUhlYWRlcnMsIGtIVFRQMUJ1aWxkUmVxdWVzdCB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKVxuXG4vLyB0b2tlblJlZ0V4cCBhbmQgaGVhZGVyQ2hhclJlZ2V4IGhhdmUgYmVlbiBsaWZ0ZWQgZnJvbVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvbWFpbi9saWIvX2h0dHBfY29tbW9uLmpzXG5cbi8qKlxuICogVmVyaWZpZXMgdGhhdCB0aGUgZ2l2ZW4gdmFsIGlzIGEgdmFsaWQgSFRUUCB0b2tlblxuICogcGVyIHRoZSBydWxlcyBkZWZpbmVkIGluIFJGQyA3MjMwXG4gKiBTZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjIuNlxuICovXG5jb25zdCB0b2tlblJlZ0V4cCA9IC9eW1xcXl9gYS16QS1aXFwtMC05ISMkJSYnKisufH5dKyQvXG5cbi8qKlxuICogTWF0Y2hlcyBpZiB2YWwgY29udGFpbnMgYW4gaW52YWxpZCBmaWVsZC12Y2hhclxuICogIGZpZWxkLXZhbHVlICAgID0gKiggZmllbGQtY29udGVudCAvIG9icy1mb2xkIClcbiAqICBmaWVsZC1jb250ZW50ICA9IGZpZWxkLXZjaGFyIFsgMSooIFNQIC8gSFRBQiApIGZpZWxkLXZjaGFyIF1cbiAqICBmaWVsZC12Y2hhciAgICA9IFZDSEFSIC8gb2JzLXRleHRcbiAqL1xuY29uc3QgaGVhZGVyQ2hhclJlZ2V4ID0gL1teXFx0XFx4MjAtXFx4N2VcXHg4MC1cXHhmZl0vXG5cbi8vIFZlcmlmaWVzIHRoYXQgYSBnaXZlbiBwYXRoIGlzIHZhbGlkIGRvZXMgbm90IGNvbnRhaW4gY29udHJvbCBjaGFycyBcXHgwMCB0byBcXHgyMFxuY29uc3QgaW52YWxpZFBhdGhSZWdleCA9IC9bXlxcdTAwMjEtXFx1MDBmZl0vXG5cbmNvbnN0IGtIYW5kbGVyID0gU3ltYm9sKCdoYW5kbGVyJylcblxuY29uc3QgY2hhbm5lbHMgPSB7fVxuXG5sZXQgZXh0cmFjdEJvZHlcblxudHJ5IHtcbiAgY29uc3QgZGlhZ25vc3RpY3NDaGFubmVsID0gcmVxdWlyZSgnZGlhZ25vc3RpY3NfY2hhbm5lbCcpXG4gIGNoYW5uZWxzLmNyZWF0ZSA9IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6cmVxdWVzdDpjcmVhdGUnKVxuICBjaGFubmVscy5ib2R5U2VudCA9IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6cmVxdWVzdDpib2R5U2VudCcpXG4gIGNoYW5uZWxzLmhlYWRlcnMgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOnJlcXVlc3Q6aGVhZGVycycpXG4gIGNoYW5uZWxzLnRyYWlsZXJzID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpyZXF1ZXN0OnRyYWlsZXJzJylcbiAgY2hhbm5lbHMuZXJyb3IgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOnJlcXVlc3Q6ZXJyb3InKVxufSBjYXRjaCB7XG4gIGNoYW5uZWxzLmNyZWF0ZSA9IHsgaGFzU3Vic2NyaWJlcnM6IGZhbHNlIH1cbiAgY2hhbm5lbHMuYm9keVNlbnQgPSB7IGhhc1N1YnNjcmliZXJzOiBmYWxzZSB9XG4gIGNoYW5uZWxzLmhlYWRlcnMgPSB7IGhhc1N1YnNjcmliZXJzOiBmYWxzZSB9XG4gIGNoYW5uZWxzLnRyYWlsZXJzID0geyBoYXNTdWJzY3JpYmVyczogZmFsc2UgfVxuICBjaGFubmVscy5lcnJvciA9IHsgaGFzU3Vic2NyaWJlcnM6IGZhbHNlIH1cbn1cblxuY2xhc3MgUmVxdWVzdCB7XG4gIGNvbnN0cnVjdG9yIChvcmlnaW4sIHtcbiAgICBwYXRoLFxuICAgIG1ldGhvZCxcbiAgICBib2R5LFxuICAgIGhlYWRlcnMsXG4gICAgcXVlcnksXG4gICAgaWRlbXBvdGVudCxcbiAgICBibG9ja2luZyxcbiAgICB1cGdyYWRlLFxuICAgIGhlYWRlcnNUaW1lb3V0LFxuICAgIGJvZHlUaW1lb3V0LFxuICAgIHJlc2V0LFxuICAgIHRocm93T25FcnJvcixcbiAgICBleHBlY3RDb250aW51ZVxuICB9LCBoYW5kbGVyKSB7XG4gICAgaWYgKHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdwYXRoIG11c3QgYmUgYSBzdHJpbmcnKVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICBwYXRoWzBdICE9PSAnLycgJiZcbiAgICAgICEocGF0aC5zdGFydHNXaXRoKCdodHRwOi8vJykgfHwgcGF0aC5zdGFydHNXaXRoKCdodHRwczovLycpKSAmJlxuICAgICAgbWV0aG9kICE9PSAnQ09OTkVDVCdcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigncGF0aCBtdXN0IGJlIGFuIGFic29sdXRlIFVSTCBvciBzdGFydCB3aXRoIGEgc2xhc2gnKVxuICAgIH0gZWxzZSBpZiAoaW52YWxpZFBhdGhSZWdleC5leGVjKHBhdGgpICE9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgcmVxdWVzdCBwYXRoJylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG1ldGhvZCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignbWV0aG9kIG11c3QgYmUgYSBzdHJpbmcnKVxuICAgIH0gZWxzZSBpZiAodG9rZW5SZWdFeHAuZXhlYyhtZXRob2QpID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgcmVxdWVzdCBtZXRob2QnKVxuICAgIH1cblxuICAgIGlmICh1cGdyYWRlICYmIHR5cGVvZiB1cGdyYWRlICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCd1cGdyYWRlIG11c3QgYmUgYSBzdHJpbmcnKVxuICAgIH1cblxuICAgIGlmIChoZWFkZXJzVGltZW91dCAhPSBudWxsICYmICghTnVtYmVyLmlzRmluaXRlKGhlYWRlcnNUaW1lb3V0KSB8fCBoZWFkZXJzVGltZW91dCA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgaGVhZGVyc1RpbWVvdXQnKVxuICAgIH1cblxuICAgIGlmIChib2R5VGltZW91dCAhPSBudWxsICYmICghTnVtYmVyLmlzRmluaXRlKGJvZHlUaW1lb3V0KSB8fCBib2R5VGltZW91dCA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgYm9keVRpbWVvdXQnKVxuICAgIH1cblxuICAgIGlmIChyZXNldCAhPSBudWxsICYmIHR5cGVvZiByZXNldCAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgcmVzZXQnKVxuICAgIH1cblxuICAgIGlmIChleHBlY3RDb250aW51ZSAhPSBudWxsICYmIHR5cGVvZiBleHBlY3RDb250aW51ZSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgZXhwZWN0Q29udGludWUnKVxuICAgIH1cblxuICAgIHRoaXMuaGVhZGVyc1RpbWVvdXQgPSBoZWFkZXJzVGltZW91dFxuXG4gICAgdGhpcy5ib2R5VGltZW91dCA9IGJvZHlUaW1lb3V0XG5cbiAgICB0aGlzLnRocm93T25FcnJvciA9IHRocm93T25FcnJvciA9PT0gdHJ1ZVxuXG4gICAgdGhpcy5tZXRob2QgPSBtZXRob2RcblxuICAgIHRoaXMuYWJvcnQgPSBudWxsXG5cbiAgICBpZiAoYm9keSA9PSBudWxsKSB7XG4gICAgICB0aGlzLmJvZHkgPSBudWxsXG4gICAgfSBlbHNlIGlmICh1dGlsLmlzU3RyZWFtKGJvZHkpKSB7XG4gICAgICB0aGlzLmJvZHkgPSBib2R5XG5cbiAgICAgIGNvbnN0IHJTdGF0ZSA9IHRoaXMuYm9keS5fcmVhZGFibGVTdGF0ZVxuICAgICAgaWYgKCFyU3RhdGUgfHwgIXJTdGF0ZS5hdXRvRGVzdHJveSkge1xuICAgICAgICB0aGlzLmVuZEhhbmRsZXIgPSBmdW5jdGlvbiBhdXRvRGVzdHJveSAoKSB7XG4gICAgICAgICAgdXRpbC5kZXN0cm95KHRoaXMpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ib2R5Lm9uKCdlbmQnLCB0aGlzLmVuZEhhbmRsZXIpXG4gICAgICB9XG5cbiAgICAgIHRoaXMuZXJyb3JIYW5kbGVyID0gZXJyID0+IHtcbiAgICAgICAgaWYgKHRoaXMuYWJvcnQpIHtcbiAgICAgICAgICB0aGlzLmFib3J0KGVycilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmVycm9yID0gZXJyXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuYm9keS5vbignZXJyb3InLCB0aGlzLmVycm9ySGFuZGxlcilcbiAgICB9IGVsc2UgaWYgKHV0aWwuaXNCdWZmZXIoYm9keSkpIHtcbiAgICAgIHRoaXMuYm9keSA9IGJvZHkuYnl0ZUxlbmd0aCA/IGJvZHkgOiBudWxsXG4gICAgfSBlbHNlIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcoYm9keSkpIHtcbiAgICAgIHRoaXMuYm9keSA9IGJvZHkuYnVmZmVyLmJ5dGVMZW5ndGggPyBCdWZmZXIuZnJvbShib2R5LmJ1ZmZlciwgYm9keS5ieXRlT2Zmc2V0LCBib2R5LmJ5dGVMZW5ndGgpIDogbnVsbFxuICAgIH0gZWxzZSBpZiAoYm9keSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgICB0aGlzLmJvZHkgPSBib2R5LmJ5dGVMZW5ndGggPyBCdWZmZXIuZnJvbShib2R5KSA6IG51bGxcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5ib2R5ID0gYm9keS5sZW5ndGggPyBCdWZmZXIuZnJvbShib2R5KSA6IG51bGxcbiAgICB9IGVsc2UgaWYgKHV0aWwuaXNGb3JtRGF0YUxpa2UoYm9keSkgfHwgdXRpbC5pc0l0ZXJhYmxlKGJvZHkpIHx8IHV0aWwuaXNCbG9iTGlrZShib2R5KSkge1xuICAgICAgdGhpcy5ib2R5ID0gYm9keVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2JvZHkgbXVzdCBiZSBhIHN0cmluZywgYSBCdWZmZXIsIGEgUmVhZGFibGUgc3RyZWFtLCBhbiBpdGVyYWJsZSwgb3IgYW4gYXN5bmMgaXRlcmFibGUnKVxuICAgIH1cblxuICAgIHRoaXMuY29tcGxldGVkID0gZmFsc2VcblxuICAgIHRoaXMuYWJvcnRlZCA9IGZhbHNlXG5cbiAgICB0aGlzLnVwZ3JhZGUgPSB1cGdyYWRlIHx8IG51bGxcblxuICAgIHRoaXMucGF0aCA9IHF1ZXJ5ID8gdXRpbC5idWlsZFVSTChwYXRoLCBxdWVyeSkgOiBwYXRoXG5cbiAgICB0aGlzLm9yaWdpbiA9IG9yaWdpblxuXG4gICAgdGhpcy5pZGVtcG90ZW50ID0gaWRlbXBvdGVudCA9PSBudWxsXG4gICAgICA/IG1ldGhvZCA9PT0gJ0hFQUQnIHx8IG1ldGhvZCA9PT0gJ0dFVCdcbiAgICAgIDogaWRlbXBvdGVudFxuXG4gICAgdGhpcy5ibG9ja2luZyA9IGJsb2NraW5nID09IG51bGwgPyBmYWxzZSA6IGJsb2NraW5nXG5cbiAgICB0aGlzLnJlc2V0ID0gcmVzZXQgPT0gbnVsbCA/IG51bGwgOiByZXNldFxuXG4gICAgdGhpcy5ob3N0ID0gbnVsbFxuXG4gICAgdGhpcy5jb250ZW50TGVuZ3RoID0gbnVsbFxuXG4gICAgdGhpcy5jb250ZW50VHlwZSA9IG51bGxcblxuICAgIHRoaXMuaGVhZGVycyA9ICcnXG5cbiAgICAvLyBPbmx5IGZvciBIMlxuICAgIHRoaXMuZXhwZWN0Q29udGludWUgPSBleHBlY3RDb250aW51ZSAhPSBudWxsID8gZXhwZWN0Q29udGludWUgOiBmYWxzZVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICAgIGlmIChoZWFkZXJzLmxlbmd0aCAlIDIgIT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdoZWFkZXJzIGFycmF5IG11c3QgYmUgZXZlbicpXG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgcHJvY2Vzc0hlYWRlcih0aGlzLCBoZWFkZXJzW2ldLCBoZWFkZXJzW2kgKyAxXSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGhlYWRlcnMgJiYgdHlwZW9mIGhlYWRlcnMgPT09ICdvYmplY3QnKSB7XG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoaGVhZGVycylcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBrZXkgPSBrZXlzW2ldXG4gICAgICAgIHByb2Nlc3NIZWFkZXIodGhpcywga2V5LCBoZWFkZXJzW2tleV0pXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChoZWFkZXJzICE9IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaGVhZGVycyBtdXN0IGJlIGFuIG9iamVjdCBvciBhbiBhcnJheScpXG4gICAgfVxuXG4gICAgaWYgKHV0aWwuaXNGb3JtRGF0YUxpa2UodGhpcy5ib2R5KSkge1xuICAgICAgaWYgKHV0aWwubm9kZU1ham9yIDwgMTYgfHwgKHV0aWwubm9kZU1ham9yID09PSAxNiAmJiB1dGlsLm5vZGVNaW5vciA8IDgpKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignRm9ybS1EYXRhIGJvZGllcyBhcmUgb25seSBzdXBwb3J0ZWQgaW4gbm9kZSB2MTYuOCBhbmQgbmV3ZXIuJylcbiAgICAgIH1cblxuICAgICAgaWYgKCFleHRyYWN0Qm9keSkge1xuICAgICAgICBleHRyYWN0Qm9keSA9IHJlcXVpcmUoJy4uL2ZldGNoL2JvZHkuanMnKS5leHRyYWN0Qm9keVxuICAgICAgfVxuXG4gICAgICBjb25zdCBbYm9keVN0cmVhbSwgY29udGVudFR5cGVdID0gZXh0cmFjdEJvZHkoYm9keSlcbiAgICAgIGlmICh0aGlzLmNvbnRlbnRUeXBlID09IG51bGwpIHtcbiAgICAgICAgdGhpcy5jb250ZW50VHlwZSA9IGNvbnRlbnRUeXBlXG4gICAgICAgIHRoaXMuaGVhZGVycyArPSBgY29udGVudC10eXBlOiAke2NvbnRlbnRUeXBlfVxcclxcbmBcbiAgICAgIH1cbiAgICAgIHRoaXMuYm9keSA9IGJvZHlTdHJlYW0uc3RyZWFtXG4gICAgICB0aGlzLmNvbnRlbnRMZW5ndGggPSBib2R5U3RyZWFtLmxlbmd0aFxuICAgIH0gZWxzZSBpZiAodXRpbC5pc0Jsb2JMaWtlKGJvZHkpICYmIHRoaXMuY29udGVudFR5cGUgPT0gbnVsbCAmJiBib2R5LnR5cGUpIHtcbiAgICAgIHRoaXMuY29udGVudFR5cGUgPSBib2R5LnR5cGVcbiAgICAgIHRoaXMuaGVhZGVycyArPSBgY29udGVudC10eXBlOiAke2JvZHkudHlwZX1cXHJcXG5gXG4gICAgfVxuXG4gICAgdXRpbC52YWxpZGF0ZUhhbmRsZXIoaGFuZGxlciwgbWV0aG9kLCB1cGdyYWRlKVxuXG4gICAgdGhpcy5zZXJ2ZXJuYW1lID0gdXRpbC5nZXRTZXJ2ZXJOYW1lKHRoaXMuaG9zdClcblxuICAgIHRoaXNba0hhbmRsZXJdID0gaGFuZGxlclxuXG4gICAgaWYgKGNoYW5uZWxzLmNyZWF0ZS5oYXNTdWJzY3JpYmVycykge1xuICAgICAgY2hhbm5lbHMuY3JlYXRlLnB1Ymxpc2goeyByZXF1ZXN0OiB0aGlzIH0pXG4gICAgfVxuICB9XG5cbiAgb25Cb2R5U2VudCAoY2h1bmspIHtcbiAgICBpZiAodGhpc1trSGFuZGxlcl0ub25Cb2R5U2VudCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uQm9keVNlbnQoY2h1bmspXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5hYm9ydChlcnIpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25SZXF1ZXN0U2VudCAoKSB7XG4gICAgaWYgKGNoYW5uZWxzLmJvZHlTZW50Lmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICBjaGFubmVscy5ib2R5U2VudC5wdWJsaXNoKHsgcmVxdWVzdDogdGhpcyB9KVxuICAgIH1cblxuICAgIGlmICh0aGlzW2tIYW5kbGVyXS5vblJlcXVlc3RTZW50KSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdGhpc1trSGFuZGxlcl0ub25SZXF1ZXN0U2VudCgpXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5hYm9ydChlcnIpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25Db25uZWN0IChhYm9ydCkge1xuICAgIGFzc2VydCghdGhpcy5hYm9ydGVkKVxuICAgIGFzc2VydCghdGhpcy5jb21wbGV0ZWQpXG5cbiAgICBpZiAodGhpcy5lcnJvcikge1xuICAgICAgYWJvcnQodGhpcy5lcnJvcilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hYm9ydCA9IGFib3J0XG4gICAgICByZXR1cm4gdGhpc1trSGFuZGxlcl0ub25Db25uZWN0KGFib3J0KVxuICAgIH1cbiAgfVxuXG4gIG9uSGVhZGVycyAoc3RhdHVzQ29kZSwgaGVhZGVycywgcmVzdW1lLCBzdGF0dXNUZXh0KSB7XG4gICAgYXNzZXJ0KCF0aGlzLmFib3J0ZWQpXG4gICAgYXNzZXJ0KCF0aGlzLmNvbXBsZXRlZClcblxuICAgIGlmIChjaGFubmVscy5oZWFkZXJzLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICBjaGFubmVscy5oZWFkZXJzLnB1Ymxpc2goeyByZXF1ZXN0OiB0aGlzLCByZXNwb25zZTogeyBzdGF0dXNDb2RlLCBoZWFkZXJzLCBzdGF0dXNUZXh0IH0gfSlcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uSGVhZGVycyhzdGF0dXNDb2RlLCBoZWFkZXJzLCByZXN1bWUsIHN0YXR1c1RleHQpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmFib3J0KGVycilcbiAgICB9XG4gIH1cblxuICBvbkRhdGEgKGNodW5rKSB7XG4gICAgYXNzZXJ0KCF0aGlzLmFib3J0ZWQpXG4gICAgYXNzZXJ0KCF0aGlzLmNvbXBsZXRlZClcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpc1trSGFuZGxlcl0ub25EYXRhKGNodW5rKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5hYm9ydChlcnIpXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cblxuICBvblVwZ3JhZGUgKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHNvY2tldCkge1xuICAgIGFzc2VydCghdGhpcy5hYm9ydGVkKVxuICAgIGFzc2VydCghdGhpcy5jb21wbGV0ZWQpXG5cbiAgICByZXR1cm4gdGhpc1trSGFuZGxlcl0ub25VcGdyYWRlKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHNvY2tldClcbiAgfVxuXG4gIG9uQ29tcGxldGUgKHRyYWlsZXJzKSB7XG4gICAgdGhpcy5vbkZpbmFsbHkoKVxuXG4gICAgYXNzZXJ0KCF0aGlzLmFib3J0ZWQpXG5cbiAgICB0aGlzLmNvbXBsZXRlZCA9IHRydWVcbiAgICBpZiAoY2hhbm5lbHMudHJhaWxlcnMuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICAgIGNoYW5uZWxzLnRyYWlsZXJzLnB1Ymxpc2goeyByZXF1ZXN0OiB0aGlzLCB0cmFpbGVycyB9KVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpc1trSGFuZGxlcl0ub25Db21wbGV0ZSh0cmFpbGVycylcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIFRPRE8gKGZpeCk6IFRoaXMgbWlnaHQgYmUgYSBiYWQgaWRlYT9cbiAgICAgIHRoaXMub25FcnJvcihlcnIpXG4gICAgfVxuICB9XG5cbiAgb25FcnJvciAoZXJyb3IpIHtcbiAgICB0aGlzLm9uRmluYWxseSgpXG5cbiAgICBpZiAoY2hhbm5lbHMuZXJyb3IuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICAgIGNoYW5uZWxzLmVycm9yLnB1Ymxpc2goeyByZXF1ZXN0OiB0aGlzLCBlcnJvciB9KVxuICAgIH1cblxuICAgIGlmICh0aGlzLmFib3J0ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB0aGlzLmFib3J0ZWQgPSB0cnVlXG5cbiAgICByZXR1cm4gdGhpc1trSGFuZGxlcl0ub25FcnJvcihlcnJvcilcbiAgfVxuXG4gIG9uRmluYWxseSAoKSB7XG4gICAgaWYgKHRoaXMuZXJyb3JIYW5kbGVyKSB7XG4gICAgICB0aGlzLmJvZHkub2ZmKCdlcnJvcicsIHRoaXMuZXJyb3JIYW5kbGVyKVxuICAgICAgdGhpcy5lcnJvckhhbmRsZXIgPSBudWxsXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZW5kSGFuZGxlcikge1xuICAgICAgdGhpcy5ib2R5Lm9mZignZW5kJywgdGhpcy5lbmRIYW5kbGVyKVxuICAgICAgdGhpcy5lbmRIYW5kbGVyID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIC8vIFRPRE86IGFkanVzdCB0byBzdXBwb3J0IEgyXG4gIGFkZEhlYWRlciAoa2V5LCB2YWx1ZSkge1xuICAgIHByb2Nlc3NIZWFkZXIodGhpcywga2V5LCB2YWx1ZSlcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgc3RhdGljIFtrSFRUUDFCdWlsZFJlcXVlc3RdIChvcmlnaW4sIG9wdHMsIGhhbmRsZXIpIHtcbiAgICAvLyBUT0RPOiBNaWdyYXRlIGhlYWRlciBwYXJzaW5nIGhlcmUsIHRvIG1ha2UgUmVxdWVzdHNcbiAgICAvLyBIVFRQIGFnbm9zdGljXG4gICAgcmV0dXJuIG5ldyBSZXF1ZXN0KG9yaWdpbiwgb3B0cywgaGFuZGxlcilcbiAgfVxuXG4gIHN0YXRpYyBba0hUVFAyQnVpbGRSZXF1ZXN0XSAob3JpZ2luLCBvcHRzLCBoYW5kbGVyKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IG9wdHMuaGVhZGVyc1xuICAgIG9wdHMgPSB7IC4uLm9wdHMsIGhlYWRlcnM6IG51bGwgfVxuXG4gICAgY29uc3QgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KG9yaWdpbiwgb3B0cywgaGFuZGxlcilcblxuICAgIHJlcXVlc3QuaGVhZGVycyA9IHt9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzKSkge1xuICAgICAgaWYgKGhlYWRlcnMubGVuZ3RoICUgMiAhPT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2hlYWRlcnMgYXJyYXkgbXVzdCBiZSBldmVuJylcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGVhZGVycy5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgICBwcm9jZXNzSGVhZGVyKHJlcXVlc3QsIGhlYWRlcnNbaV0sIGhlYWRlcnNbaSArIDFdLCB0cnVlKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaGVhZGVycyAmJiB0eXBlb2YgaGVhZGVycyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhoZWFkZXJzKVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGtleXNbaV1cbiAgICAgICAgcHJvY2Vzc0hlYWRlcihyZXF1ZXN0LCBrZXksIGhlYWRlcnNba2V5XSwgdHJ1ZSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGhlYWRlcnMgIT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdoZWFkZXJzIG11c3QgYmUgYW4gb2JqZWN0IG9yIGFuIGFycmF5JylcbiAgICB9XG5cbiAgICByZXR1cm4gcmVxdWVzdFxuICB9XG5cbiAgc3RhdGljIFtrSFRUUDJDb3B5SGVhZGVyc10gKHJhdykge1xuICAgIGNvbnN0IHJhd0hlYWRlcnMgPSByYXcuc3BsaXQoJ1xcclxcbicpXG4gICAgY29uc3QgaGVhZGVycyA9IHt9XG5cbiAgICBmb3IgKGNvbnN0IGhlYWRlciBvZiByYXdIZWFkZXJzKSB7XG4gICAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBoZWFkZXIuc3BsaXQoJzogJylcblxuICAgICAgaWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUubGVuZ3RoID09PSAwKSBjb250aW51ZVxuXG4gICAgICBpZiAoaGVhZGVyc1trZXldKSBoZWFkZXJzW2tleV0gKz0gYCwke3ZhbHVlfWBcbiAgICAgIGVsc2UgaGVhZGVyc1trZXldID0gdmFsdWVcbiAgICB9XG5cbiAgICByZXR1cm4gaGVhZGVyc1xuICB9XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NIZWFkZXJWYWx1ZSAoa2V5LCB2YWwsIHNraXBBcHBlbmQpIHtcbiAgaWYgKHZhbCAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihgaW52YWxpZCAke2tleX0gaGVhZGVyYClcbiAgfVxuXG4gIHZhbCA9IHZhbCAhPSBudWxsID8gYCR7dmFsfWAgOiAnJ1xuXG4gIGlmIChoZWFkZXJDaGFyUmVnZXguZXhlYyh2YWwpICE9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKGBpbnZhbGlkICR7a2V5fSBoZWFkZXJgKVxuICB9XG5cbiAgcmV0dXJuIHNraXBBcHBlbmQgPyB2YWwgOiBgJHtrZXl9OiAke3ZhbH1cXHJcXG5gXG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NIZWFkZXIgKHJlcXVlc3QsIGtleSwgdmFsLCBza2lwQXBwZW5kID0gZmFsc2UpIHtcbiAgaWYgKHZhbCAmJiAodHlwZW9mIHZhbCA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkodmFsKSkpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoYGludmFsaWQgJHtrZXl9IGhlYWRlcmApXG4gIH0gZWxzZSBpZiAodmFsID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmIChcbiAgICByZXF1ZXN0Lmhvc3QgPT09IG51bGwgJiZcbiAgICBrZXkubGVuZ3RoID09PSA0ICYmXG4gICAga2V5LnRvTG93ZXJDYXNlKCkgPT09ICdob3N0J1xuICApIHtcbiAgICBpZiAoaGVhZGVyQ2hhclJlZ2V4LmV4ZWModmFsKSAhPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKGBpbnZhbGlkICR7a2V5fSBoZWFkZXJgKVxuICAgIH1cbiAgICAvLyBDb25zdW1lZCBieSBDbGllbnRcbiAgICByZXF1ZXN0Lmhvc3QgPSB2YWxcbiAgfSBlbHNlIGlmIChcbiAgICByZXF1ZXN0LmNvbnRlbnRMZW5ndGggPT09IG51bGwgJiZcbiAgICBrZXkubGVuZ3RoID09PSAxNCAmJlxuICAgIGtleS50b0xvd2VyQ2FzZSgpID09PSAnY29udGVudC1sZW5ndGgnXG4gICkge1xuICAgIHJlcXVlc3QuY29udGVudExlbmd0aCA9IHBhcnNlSW50KHZhbCwgMTApXG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUocmVxdWVzdC5jb250ZW50TGVuZ3RoKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGNvbnRlbnQtbGVuZ3RoIGhlYWRlcicpXG4gICAgfVxuICB9IGVsc2UgaWYgKFxuICAgIHJlcXVlc3QuY29udGVudFR5cGUgPT09IG51bGwgJiZcbiAgICBrZXkubGVuZ3RoID09PSAxMiAmJlxuICAgIGtleS50b0xvd2VyQ2FzZSgpID09PSAnY29udGVudC10eXBlJ1xuICApIHtcbiAgICByZXF1ZXN0LmNvbnRlbnRUeXBlID0gdmFsXG4gICAgaWYgKHNraXBBcHBlbmQpIHJlcXVlc3QuaGVhZGVyc1trZXldID0gcHJvY2Vzc0hlYWRlclZhbHVlKGtleSwgdmFsLCBza2lwQXBwZW5kKVxuICAgIGVsc2UgcmVxdWVzdC5oZWFkZXJzICs9IHByb2Nlc3NIZWFkZXJWYWx1ZShrZXksIHZhbClcbiAgfSBlbHNlIGlmIChcbiAgICBrZXkubGVuZ3RoID09PSAxNyAmJlxuICAgIGtleS50b0xvd2VyQ2FzZSgpID09PSAndHJhbnNmZXItZW5jb2RpbmcnXG4gICkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCB0cmFuc2Zlci1lbmNvZGluZyBoZWFkZXInKVxuICB9IGVsc2UgaWYgKFxuICAgIGtleS5sZW5ndGggPT09IDEwICYmXG4gICAga2V5LnRvTG93ZXJDYXNlKCkgPT09ICdjb25uZWN0aW9uJ1xuICApIHtcbiAgICBjb25zdCB2YWx1ZSA9IHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnID8gdmFsLnRvTG93ZXJDYXNlKCkgOiBudWxsXG4gICAgaWYgKHZhbHVlICE9PSAnY2xvc2UnICYmIHZhbHVlICE9PSAna2VlcC1hbGl2ZScpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjb25uZWN0aW9uIGhlYWRlcicpXG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gJ2Nsb3NlJykge1xuICAgICAgcmVxdWVzdC5yZXNldCA9IHRydWVcbiAgICB9XG4gIH0gZWxzZSBpZiAoXG4gICAga2V5Lmxlbmd0aCA9PT0gMTAgJiZcbiAgICBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2tlZXAtYWxpdmUnXG4gICkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBrZWVwLWFsaXZlIGhlYWRlcicpXG4gIH0gZWxzZSBpZiAoXG4gICAga2V5Lmxlbmd0aCA9PT0gNyAmJlxuICAgIGtleS50b0xvd2VyQ2FzZSgpID09PSAndXBncmFkZSdcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIHVwZ3JhZGUgaGVhZGVyJylcbiAgfSBlbHNlIGlmIChcbiAgICBrZXkubGVuZ3RoID09PSA2ICYmXG4gICAga2V5LnRvTG93ZXJDYXNlKCkgPT09ICdleHBlY3QnXG4gICkge1xuICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWRFcnJvcignZXhwZWN0IGhlYWRlciBub3Qgc3VwcG9ydGVkJylcbiAgfSBlbHNlIGlmICh0b2tlblJlZ0V4cC5leGVjKGtleSkgPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgaGVhZGVyIGtleScpXG4gIH0gZWxzZSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWwubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHNraXBBcHBlbmQpIHtcbiAgICAgICAgICBpZiAocmVxdWVzdC5oZWFkZXJzW2tleV0pIHJlcXVlc3QuaGVhZGVyc1trZXldICs9IGAsJHtwcm9jZXNzSGVhZGVyVmFsdWUoa2V5LCB2YWxbaV0sIHNraXBBcHBlbmQpfWBcbiAgICAgICAgICBlbHNlIHJlcXVlc3QuaGVhZGVyc1trZXldID0gcHJvY2Vzc0hlYWRlclZhbHVlKGtleSwgdmFsW2ldLCBza2lwQXBwZW5kKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlcXVlc3QuaGVhZGVycyArPSBwcm9jZXNzSGVhZGVyVmFsdWUoa2V5LCB2YWxbaV0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHNraXBBcHBlbmQpIHJlcXVlc3QuaGVhZGVyc1trZXldID0gcHJvY2Vzc0hlYWRlclZhbHVlKGtleSwgdmFsLCBza2lwQXBwZW5kKVxuICAgICAgZWxzZSByZXF1ZXN0LmhlYWRlcnMgKz0gcHJvY2Vzc0hlYWRlclZhbHVlKGtleSwgdmFsKVxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFJlcXVlc3RcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50cycpXG5cbmNsYXNzIERpc3BhdGNoZXIgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICBkaXNwYXRjaCAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdub3QgaW1wbGVtZW50ZWQnKVxuICB9XG5cbiAgY2xvc2UgKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignbm90IGltcGxlbWVudGVkJylcbiAgfVxuXG4gIGRlc3Ryb3kgKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignbm90IGltcGxlbWVudGVkJylcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IERpc3BhdGNoZXJcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IERpc3BhdGNoZXIgPSByZXF1aXJlKCcuL2Rpc3BhdGNoZXInKVxuY29uc3Qge1xuICBDbGllbnREZXN0cm95ZWRFcnJvcixcbiAgQ2xpZW50Q2xvc2VkRXJyb3IsXG4gIEludmFsaWRBcmd1bWVudEVycm9yXG59ID0gcmVxdWlyZSgnLi9jb3JlL2Vycm9ycycpXG5jb25zdCB7IGtEZXN0cm95LCBrQ2xvc2UsIGtEaXNwYXRjaCwga0ludGVyY2VwdG9ycyB9ID0gcmVxdWlyZSgnLi9jb3JlL3N5bWJvbHMnKVxuXG5jb25zdCBrRGVzdHJveWVkID0gU3ltYm9sKCdkZXN0cm95ZWQnKVxuY29uc3Qga0Nsb3NlZCA9IFN5bWJvbCgnY2xvc2VkJylcbmNvbnN0IGtPbkRlc3Ryb3llZCA9IFN5bWJvbCgnb25EZXN0cm95ZWQnKVxuY29uc3Qga09uQ2xvc2VkID0gU3ltYm9sKCdvbkNsb3NlZCcpXG5jb25zdCBrSW50ZXJjZXB0ZWREaXNwYXRjaCA9IFN5bWJvbCgnSW50ZXJjZXB0ZWQgRGlzcGF0Y2gnKVxuXG5jbGFzcyBEaXNwYXRjaGVyQmFzZSBleHRlbmRzIERpc3BhdGNoZXIge1xuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgc3VwZXIoKVxuXG4gICAgdGhpc1trRGVzdHJveWVkXSA9IGZhbHNlXG4gICAgdGhpc1trT25EZXN0cm95ZWRdID0gbnVsbFxuICAgIHRoaXNba0Nsb3NlZF0gPSBmYWxzZVxuICAgIHRoaXNba09uQ2xvc2VkXSA9IFtdXG4gIH1cblxuICBnZXQgZGVzdHJveWVkICgpIHtcbiAgICByZXR1cm4gdGhpc1trRGVzdHJveWVkXVxuICB9XG5cbiAgZ2V0IGNsb3NlZCAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0Nsb3NlZF1cbiAgfVxuXG4gIGdldCBpbnRlcmNlcHRvcnMgKCkge1xuICAgIHJldHVybiB0aGlzW2tJbnRlcmNlcHRvcnNdXG4gIH1cblxuICBzZXQgaW50ZXJjZXB0b3JzIChuZXdJbnRlcmNlcHRvcnMpIHtcbiAgICBpZiAobmV3SW50ZXJjZXB0b3JzKSB7XG4gICAgICBmb3IgKGxldCBpID0gbmV3SW50ZXJjZXB0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIGNvbnN0IGludGVyY2VwdG9yID0gdGhpc1trSW50ZXJjZXB0b3JzXVtpXVxuICAgICAgICBpZiAodHlwZW9mIGludGVyY2VwdG9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnRlcmNlcHRvciBtdXN0IGJlIGFuIGZ1bmN0aW9uJylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXNba0ludGVyY2VwdG9yc10gPSBuZXdJbnRlcmNlcHRvcnNcbiAgfVxuXG4gIGNsb3NlIChjYWxsYmFjaykge1xuICAgIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICB0aGlzLmNsb3NlKChlcnIsIGRhdGEpID0+IHtcbiAgICAgICAgICByZXR1cm4gZXJyID8gcmVqZWN0KGVycikgOiByZXNvbHZlKGRhdGEpXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjYWxsYmFjaycpXG4gICAgfVxuXG4gICAgaWYgKHRoaXNba0Rlc3Ryb3llZF0pIHtcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGNhbGxiYWNrKG5ldyBDbGllbnREZXN0cm95ZWRFcnJvcigpLCBudWxsKSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICh0aGlzW2tDbG9zZWRdKSB7XG4gICAgICBpZiAodGhpc1trT25DbG9zZWRdKSB7XG4gICAgICAgIHRoaXNba09uQ2xvc2VkXS5wdXNoKGNhbGxiYWNrKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gY2FsbGJhY2sobnVsbCwgbnVsbCkpXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzW2tDbG9zZWRdID0gdHJ1ZVxuICAgIHRoaXNba09uQ2xvc2VkXS5wdXNoKGNhbGxiYWNrKVxuXG4gICAgY29uc3Qgb25DbG9zZWQgPSAoKSA9PiB7XG4gICAgICBjb25zdCBjYWxsYmFja3MgPSB0aGlzW2tPbkNsb3NlZF1cbiAgICAgIHRoaXNba09uQ2xvc2VkXSA9IG51bGxcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2FsbGJhY2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNhbGxiYWNrc1tpXShudWxsLCBudWxsKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNob3VsZCBub3QgZXJyb3IuXG4gICAgdGhpc1trQ2xvc2VdKClcbiAgICAgIC50aGVuKCgpID0+IHRoaXMuZGVzdHJveSgpKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICBxdWV1ZU1pY3JvdGFzayhvbkNsb3NlZClcbiAgICAgIH0pXG4gIH1cblxuICBkZXN0cm95IChlcnIsIGNhbGxiYWNrKSB7XG4gICAgaWYgKHR5cGVvZiBlcnIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNhbGxiYWNrID0gZXJyXG4gICAgICBlcnIgPSBudWxsXG4gICAgfVxuXG4gICAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHRoaXMuZGVzdHJveShlcnIsIChlcnIsIGRhdGEpID0+IHtcbiAgICAgICAgICByZXR1cm4gZXJyID8gLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IHNob3VsZCBuZXZlciBlcnJvciAqLyByZWplY3QoZXJyKSA6IHJlc29sdmUoZGF0YSlcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGNhbGxiYWNrJylcbiAgICB9XG5cbiAgICBpZiAodGhpc1trRGVzdHJveWVkXSkge1xuICAgICAgaWYgKHRoaXNba09uRGVzdHJveWVkXSkge1xuICAgICAgICB0aGlzW2tPbkRlc3Ryb3llZF0ucHVzaChjYWxsYmFjaylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGNhbGxiYWNrKG51bGwsIG51bGwpKVxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKCFlcnIpIHtcbiAgICAgIGVyciA9IG5ldyBDbGllbnREZXN0cm95ZWRFcnJvcigpXG4gICAgfVxuXG4gICAgdGhpc1trRGVzdHJveWVkXSA9IHRydWVcbiAgICB0aGlzW2tPbkRlc3Ryb3llZF0gPSB0aGlzW2tPbkRlc3Ryb3llZF0gfHwgW11cbiAgICB0aGlzW2tPbkRlc3Ryb3llZF0ucHVzaChjYWxsYmFjaylcblxuICAgIGNvbnN0IG9uRGVzdHJveWVkID0gKCkgPT4ge1xuICAgICAgY29uc3QgY2FsbGJhY2tzID0gdGhpc1trT25EZXN0cm95ZWRdXG4gICAgICB0aGlzW2tPbkRlc3Ryb3llZF0gPSBudWxsXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNhbGxiYWNrcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjYWxsYmFja3NbaV0obnVsbCwgbnVsbClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTaG91bGQgbm90IGVycm9yLlxuICAgIHRoaXNba0Rlc3Ryb3ldKGVycikudGhlbigoKSA9PiB7XG4gICAgICBxdWV1ZU1pY3JvdGFzayhvbkRlc3Ryb3llZClcbiAgICB9KVxuICB9XG5cbiAgW2tJbnRlcmNlcHRlZERpc3BhdGNoXSAob3B0cywgaGFuZGxlcikge1xuICAgIGlmICghdGhpc1trSW50ZXJjZXB0b3JzXSB8fCB0aGlzW2tJbnRlcmNlcHRvcnNdLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpc1trSW50ZXJjZXB0ZWREaXNwYXRjaF0gPSB0aGlzW2tEaXNwYXRjaF1cbiAgICAgIHJldHVybiB0aGlzW2tEaXNwYXRjaF0ob3B0cywgaGFuZGxlcilcbiAgICB9XG5cbiAgICBsZXQgZGlzcGF0Y2ggPSB0aGlzW2tEaXNwYXRjaF0uYmluZCh0aGlzKVxuICAgIGZvciAobGV0IGkgPSB0aGlzW2tJbnRlcmNlcHRvcnNdLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBkaXNwYXRjaCA9IHRoaXNba0ludGVyY2VwdG9yc11baV0oZGlzcGF0Y2gpXG4gICAgfVxuICAgIHRoaXNba0ludGVyY2VwdGVkRGlzcGF0Y2hdID0gZGlzcGF0Y2hcbiAgICByZXR1cm4gZGlzcGF0Y2gob3B0cywgaGFuZGxlcilcbiAgfVxuXG4gIGRpc3BhdGNoIChvcHRzLCBoYW5kbGVyKSB7XG4gICAgaWYgKCFoYW5kbGVyIHx8IHR5cGVvZiBoYW5kbGVyICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdoYW5kbGVyIG11c3QgYmUgYW4gb2JqZWN0JylcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgaWYgKCFvcHRzIHx8IHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ29wdHMgbXVzdCBiZSBhbiBvYmplY3QuJylcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXNba0Rlc3Ryb3llZF0gfHwgdGhpc1trT25EZXN0cm95ZWRdKSB7XG4gICAgICAgIHRocm93IG5ldyBDbGllbnREZXN0cm95ZWRFcnJvcigpXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzW2tDbG9zZWRdKSB7XG4gICAgICAgIHRocm93IG5ldyBDbGllbnRDbG9zZWRFcnJvcigpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzW2tJbnRlcmNlcHRlZERpc3BhdGNoXShvcHRzLCBoYW5kbGVyKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKHR5cGVvZiBoYW5kbGVyLm9uRXJyb3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uRXJyb3IgbWV0aG9kJylcbiAgICAgIH1cblxuICAgICAgaGFuZGxlci5vbkVycm9yKGVycilcblxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRGlzcGF0Y2hlckJhc2VcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IG5ldCA9IHJlcXVpcmUoJ25ldCcpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yLCBDb25uZWN0VGltZW91dEVycm9yIH0gPSByZXF1aXJlKCcuL2Vycm9ycycpXG5cbmxldCB0bHMgLy8gaW5jbHVkZSB0bHMgY29uZGl0aW9uYWxseSBzaW5jZSBpdCBpcyBub3QgYWx3YXlzIGF2YWlsYWJsZVxuXG4vLyBUT0RPOiBzZXNzaW9uIHJlLXVzZSBkb2VzIG5vdCB3YWl0IGZvciB0aGUgZmlyc3Rcbi8vIGNvbm5lY3Rpb24gdG8gcmVzb2x2ZSB0aGUgc2Vzc2lvbiBhbmQgbWlnaHQgdGhlcmVmb3JlXG4vLyByZXNvbHZlIHRoZSBzYW1lIHNlcnZlcm5hbWUgbXVsdGlwbGUgdGltZXMgZXZlbiB3aGVuXG4vLyByZS11c2UgaXMgZW5hYmxlZC5cblxubGV0IFNlc3Npb25DYWNoZVxuLy8gRklYTUU6IHJlbW92ZSB3b3JrYXJvdW5kIHdoZW4gdGhlIE5vZGUgYnVnIGlzIGZpeGVkXG4vLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvaXNzdWVzLzQ5MzQ0I2lzc3VlY29tbWVudC0xNzQxNzc2MzA4XG5pZiAoZ2xvYmFsLkZpbmFsaXphdGlvblJlZ2lzdHJ5ICYmICFwcm9jZXNzLmVudi5OT0RFX1Y4X0NPVkVSQUdFKSB7XG4gIFNlc3Npb25DYWNoZSA9IGNsYXNzIFdlYWtTZXNzaW9uQ2FjaGUge1xuICAgIGNvbnN0cnVjdG9yIChtYXhDYWNoZWRTZXNzaW9ucykge1xuICAgICAgdGhpcy5fbWF4Q2FjaGVkU2Vzc2lvbnMgPSBtYXhDYWNoZWRTZXNzaW9uc1xuICAgICAgdGhpcy5fc2Vzc2lvbkNhY2hlID0gbmV3IE1hcCgpXG4gICAgICB0aGlzLl9zZXNzaW9uUmVnaXN0cnkgPSBuZXcgZ2xvYmFsLkZpbmFsaXphdGlvblJlZ2lzdHJ5KChrZXkpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX3Nlc3Npb25DYWNoZS5zaXplIDwgdGhpcy5fbWF4Q2FjaGVkU2Vzc2lvbnMpIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlZiA9IHRoaXMuX3Nlc3Npb25DYWNoZS5nZXQoa2V5KVxuICAgICAgICBpZiAocmVmICE9PSB1bmRlZmluZWQgJiYgcmVmLmRlcmVmKCkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuX3Nlc3Npb25DYWNoZS5kZWxldGUoa2V5KVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cblxuICAgIGdldCAoc2Vzc2lvbktleSkge1xuICAgICAgY29uc3QgcmVmID0gdGhpcy5fc2Vzc2lvbkNhY2hlLmdldChzZXNzaW9uS2V5KVxuICAgICAgcmV0dXJuIHJlZiA/IHJlZi5kZXJlZigpIDogbnVsbFxuICAgIH1cblxuICAgIHNldCAoc2Vzc2lvbktleSwgc2Vzc2lvbikge1xuICAgICAgaWYgKHRoaXMuX21heENhY2hlZFNlc3Npb25zID09PSAwKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICB0aGlzLl9zZXNzaW9uQ2FjaGUuc2V0KHNlc3Npb25LZXksIG5ldyBXZWFrUmVmKHNlc3Npb24pKVxuICAgICAgdGhpcy5fc2Vzc2lvblJlZ2lzdHJ5LnJlZ2lzdGVyKHNlc3Npb24sIHNlc3Npb25LZXkpXG4gICAgfVxuICB9XG59IGVsc2Uge1xuICBTZXNzaW9uQ2FjaGUgPSBjbGFzcyBTaW1wbGVTZXNzaW9uQ2FjaGUge1xuICAgIGNvbnN0cnVjdG9yIChtYXhDYWNoZWRTZXNzaW9ucykge1xuICAgICAgdGhpcy5fbWF4Q2FjaGVkU2Vzc2lvbnMgPSBtYXhDYWNoZWRTZXNzaW9uc1xuICAgICAgdGhpcy5fc2Vzc2lvbkNhY2hlID0gbmV3IE1hcCgpXG4gICAgfVxuXG4gICAgZ2V0IChzZXNzaW9uS2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2Vzc2lvbkNhY2hlLmdldChzZXNzaW9uS2V5KVxuICAgIH1cblxuICAgIHNldCAoc2Vzc2lvbktleSwgc2Vzc2lvbikge1xuICAgICAgaWYgKHRoaXMuX21heENhY2hlZFNlc3Npb25zID09PSAwKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fc2Vzc2lvbkNhY2hlLnNpemUgPj0gdGhpcy5fbWF4Q2FjaGVkU2Vzc2lvbnMpIHtcbiAgICAgICAgLy8gcmVtb3ZlIHRoZSBvbGRlc3Qgc2Vzc2lvblxuICAgICAgICBjb25zdCB7IHZhbHVlOiBvbGRlc3RLZXkgfSA9IHRoaXMuX3Nlc3Npb25DYWNoZS5rZXlzKCkubmV4dCgpXG4gICAgICAgIHRoaXMuX3Nlc3Npb25DYWNoZS5kZWxldGUob2xkZXN0S2V5KVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9zZXNzaW9uQ2FjaGUuc2V0KHNlc3Npb25LZXksIHNlc3Npb24pXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQ29ubmVjdG9yICh7IGFsbG93SDIsIG1heENhY2hlZFNlc3Npb25zLCBzb2NrZXRQYXRoLCB0aW1lb3V0LCAuLi5vcHRzIH0pIHtcbiAgaWYgKG1heENhY2hlZFNlc3Npb25zICE9IG51bGwgJiYgKCFOdW1iZXIuaXNJbnRlZ2VyKG1heENhY2hlZFNlc3Npb25zKSB8fCBtYXhDYWNoZWRTZXNzaW9ucyA8IDApKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdtYXhDYWNoZWRTZXNzaW9ucyBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciBvciB6ZXJvJylcbiAgfVxuXG4gIGNvbnN0IG9wdGlvbnMgPSB7IHBhdGg6IHNvY2tldFBhdGgsIC4uLm9wdHMgfVxuICBjb25zdCBzZXNzaW9uQ2FjaGUgPSBuZXcgU2Vzc2lvbkNhY2hlKG1heENhY2hlZFNlc3Npb25zID09IG51bGwgPyAxMDAgOiBtYXhDYWNoZWRTZXNzaW9ucylcbiAgdGltZW91dCA9IHRpbWVvdXQgPT0gbnVsbCA/IDEwZTMgOiB0aW1lb3V0XG4gIGFsbG93SDIgPSBhbGxvd0gyICE9IG51bGwgPyBhbGxvd0gyIDogZmFsc2VcbiAgcmV0dXJuIGZ1bmN0aW9uIGNvbm5lY3QgKHsgaG9zdG5hbWUsIGhvc3QsIHByb3RvY29sLCBwb3J0LCBzZXJ2ZXJuYW1lLCBsb2NhbEFkZHJlc3MsIGh0dHBTb2NrZXQgfSwgY2FsbGJhY2spIHtcbiAgICBsZXQgc29ja2V0XG4gICAgaWYgKHByb3RvY29sID09PSAnaHR0cHM6Jykge1xuICAgICAgaWYgKCF0bHMpIHtcbiAgICAgICAgdGxzID0gcmVxdWlyZSgndGxzJylcbiAgICAgIH1cbiAgICAgIHNlcnZlcm5hbWUgPSBzZXJ2ZXJuYW1lIHx8IG9wdGlvbnMuc2VydmVybmFtZSB8fCB1dGlsLmdldFNlcnZlck5hbWUoaG9zdCkgfHwgbnVsbFxuXG4gICAgICBjb25zdCBzZXNzaW9uS2V5ID0gc2VydmVybmFtZSB8fCBob3N0bmFtZVxuICAgICAgY29uc3Qgc2Vzc2lvbiA9IHNlc3Npb25DYWNoZS5nZXQoc2Vzc2lvbktleSkgfHwgbnVsbFxuXG4gICAgICBhc3NlcnQoc2Vzc2lvbktleSlcblxuICAgICAgc29ja2V0ID0gdGxzLmNvbm5lY3Qoe1xuICAgICAgICBoaWdoV2F0ZXJNYXJrOiAxNjM4NCwgLy8gVExTIGluIG5vZGUgY2FuJ3QgaGF2ZSBiaWdnZXIgSFdNIGFueXdheS4uLlxuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICBzZXJ2ZXJuYW1lLFxuICAgICAgICBzZXNzaW9uLFxuICAgICAgICBsb2NhbEFkZHJlc3MsXG4gICAgICAgIC8vIFRPRE8oSFRUUC8yKTogQWRkIHN1cHBvcnQgZm9yIGgyY1xuICAgICAgICBBTFBOUHJvdG9jb2xzOiBhbGxvd0gyID8gWydodHRwLzEuMScsICdoMiddIDogWydodHRwLzEuMSddLFxuICAgICAgICBzb2NrZXQ6IGh0dHBTb2NrZXQsIC8vIHVwZ3JhZGUgc29ja2V0IGNvbm5lY3Rpb25cbiAgICAgICAgcG9ydDogcG9ydCB8fCA0NDMsXG4gICAgICAgIGhvc3Q6IGhvc3RuYW1lXG4gICAgICB9KVxuXG4gICAgICBzb2NrZXRcbiAgICAgICAgLm9uKCdzZXNzaW9uJywgZnVuY3Rpb24gKHNlc3Npb24pIHtcbiAgICAgICAgICAvLyBUT0RPIChmaXgpOiBDYW4gYSBzZXNzaW9uIGJlY29tZSBpbnZhbGlkIG9uY2UgZXN0YWJsaXNoZWQ/IERvbid0IHRoaW5rIHNvP1xuICAgICAgICAgIHNlc3Npb25DYWNoZS5zZXQoc2Vzc2lvbktleSwgc2Vzc2lvbilcbiAgICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgYXNzZXJ0KCFodHRwU29ja2V0LCAnaHR0cFNvY2tldCBjYW4gb25seSBiZSBzZW50IG9uIFRMUyB1cGRhdGUnKVxuICAgICAgc29ja2V0ID0gbmV0LmNvbm5lY3Qoe1xuICAgICAgICBoaWdoV2F0ZXJNYXJrOiA2NCAqIDEwMjQsIC8vIFNhbWUgYXMgbm9kZWpzIGZzIHN0cmVhbXMuXG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIGxvY2FsQWRkcmVzcyxcbiAgICAgICAgcG9ydDogcG9ydCB8fCA4MCxcbiAgICAgICAgaG9zdDogaG9zdG5hbWVcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gU2V0IFRDUCBrZWVwIGFsaXZlIG9wdGlvbnMgb24gdGhlIHNvY2tldCBoZXJlIGluc3RlYWQgb2YgaW4gY29ubmVjdCgpIGZvciB0aGUgY2FzZSBvZiBhc3NpZ25pbmcgdGhlIHNvY2tldFxuICAgIGlmIChvcHRpb25zLmtlZXBBbGl2ZSA9PSBudWxsIHx8IG9wdGlvbnMua2VlcEFsaXZlKSB7XG4gICAgICBjb25zdCBrZWVwQWxpdmVJbml0aWFsRGVsYXkgPSBvcHRpb25zLmtlZXBBbGl2ZUluaXRpYWxEZWxheSA9PT0gdW5kZWZpbmVkID8gNjBlMyA6IG9wdGlvbnMua2VlcEFsaXZlSW5pdGlhbERlbGF5XG4gICAgICBzb2NrZXQuc2V0S2VlcEFsaXZlKHRydWUsIGtlZXBBbGl2ZUluaXRpYWxEZWxheSlcbiAgICB9XG5cbiAgICBjb25zdCBjYW5jZWxUaW1lb3V0ID0gc2V0dXBUaW1lb3V0KCgpID0+IG9uQ29ubmVjdFRpbWVvdXQoc29ja2V0KSwgdGltZW91dClcblxuICAgIHNvY2tldFxuICAgICAgLnNldE5vRGVsYXkodHJ1ZSlcbiAgICAgIC5vbmNlKHByb3RvY29sID09PSAnaHR0cHM6JyA/ICdzZWN1cmVDb25uZWN0JyA6ICdjb25uZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjYW5jZWxUaW1lb3V0KClcblxuICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICBjb25zdCBjYiA9IGNhbGxiYWNrXG4gICAgICAgICAgY2FsbGJhY2sgPSBudWxsXG4gICAgICAgICAgY2IobnVsbCwgdGhpcylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5vbignZXJyb3InLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGNhbmNlbFRpbWVvdXQoKVxuXG4gICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgIGNvbnN0IGNiID0gY2FsbGJhY2tcbiAgICAgICAgICBjYWxsYmFjayA9IG51bGxcbiAgICAgICAgICBjYihlcnIpXG4gICAgICAgIH1cbiAgICAgIH0pXG5cbiAgICByZXR1cm4gc29ja2V0XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0dXBUaW1lb3V0IChvbkNvbm5lY3RUaW1lb3V0LCB0aW1lb3V0KSB7XG4gIGlmICghdGltZW91dCkge1xuICAgIHJldHVybiAoKSA9PiB7fVxuICB9XG5cbiAgbGV0IHMxID0gbnVsbFxuICBsZXQgczIgPSBudWxsXG4gIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIC8vIHNldEltbWVkaWF0ZSBpcyBhZGRlZCB0byBtYWtlIHN1cmUgdGhhdCB3ZSBwcmlvdG9yaXNlIHNvY2tldCBlcnJvciBldmVudHMgb3ZlciB0aW1lb3V0c1xuICAgIHMxID0gc2V0SW1tZWRpYXRlKCgpID0+IHtcbiAgICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG4gICAgICAgIC8vIFdpbmRvd3MgbmVlZHMgYW4gZXh0cmEgc2V0SW1tZWRpYXRlIHByb2JhYmx5IGR1ZSB0byBpbXBsZW1lbnRhdGlvbiBkaWZmZXJlbmNlcyBpbiB0aGUgc29ja2V0IGxvZ2ljXG4gICAgICAgIHMyID0gc2V0SW1tZWRpYXRlKCgpID0+IG9uQ29ubmVjdFRpbWVvdXQoKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9uQ29ubmVjdFRpbWVvdXQoKVxuICAgICAgfVxuICAgIH0pXG4gIH0sIHRpbWVvdXQpXG4gIHJldHVybiAoKSA9PiB7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZClcbiAgICBjbGVhckltbWVkaWF0ZShzMSlcbiAgICBjbGVhckltbWVkaWF0ZShzMilcbiAgfVxufVxuXG5mdW5jdGlvbiBvbkNvbm5lY3RUaW1lb3V0IChzb2NrZXQpIHtcbiAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IENvbm5lY3RUaW1lb3V0RXJyb3IoKSlcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZENvbm5lY3RvclxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZW51bVRvTWFwID0gdm9pZCAwO1xuZnVuY3Rpb24gZW51bVRvTWFwKG9iaikge1xuICAgIGNvbnN0IHJlcyA9IHt9O1xuICAgIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gb2JqW2tleV07XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICByZXNba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMuZW51bVRvTWFwID0gZW51bVRvTWFwO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbHMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU1BFQ0lBTF9IRUFERVJTID0gZXhwb3J0cy5IRUFERVJfU1RBVEUgPSBleHBvcnRzLk1JTk9SID0gZXhwb3J0cy5NQUpPUiA9IGV4cG9ydHMuQ09OTkVDVElPTl9UT0tFTl9DSEFSUyA9IGV4cG9ydHMuSEVBREVSX0NIQVJTID0gZXhwb3J0cy5UT0tFTiA9IGV4cG9ydHMuU1RSSUNUX1RPS0VOID0gZXhwb3J0cy5IRVggPSBleHBvcnRzLlVSTF9DSEFSID0gZXhwb3J0cy5TVFJJQ1RfVVJMX0NIQVIgPSBleHBvcnRzLlVTRVJJTkZPX0NIQVJTID0gZXhwb3J0cy5NQVJLID0gZXhwb3J0cy5BTFBIQU5VTSA9IGV4cG9ydHMuTlVNID0gZXhwb3J0cy5IRVhfTUFQID0gZXhwb3J0cy5OVU1fTUFQID0gZXhwb3J0cy5BTFBIQSA9IGV4cG9ydHMuRklOSVNIID0gZXhwb3J0cy5IX01FVEhPRF9NQVAgPSBleHBvcnRzLk1FVEhPRF9NQVAgPSBleHBvcnRzLk1FVEhPRFNfUlRTUCA9IGV4cG9ydHMuTUVUSE9EU19JQ0UgPSBleHBvcnRzLk1FVEhPRFNfSFRUUCA9IGV4cG9ydHMuTUVUSE9EUyA9IGV4cG9ydHMuTEVOSUVOVF9GTEFHUyA9IGV4cG9ydHMuRkxBR1MgPSBleHBvcnRzLlRZUEUgPSBleHBvcnRzLkVSUk9SID0gdm9pZCAwO1xuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoXCIuL3V0aWxzXCIpO1xuLy8gQyBoZWFkZXJzXG52YXIgRVJST1I7XG4oZnVuY3Rpb24gKEVSUk9SKSB7XG4gICAgRVJST1JbRVJST1JbXCJPS1wiXSA9IDBdID0gXCJPS1wiO1xuICAgIEVSUk9SW0VSUk9SW1wiSU5URVJOQUxcIl0gPSAxXSA9IFwiSU5URVJOQUxcIjtcbiAgICBFUlJPUltFUlJPUltcIlNUUklDVFwiXSA9IDJdID0gXCJTVFJJQ1RcIjtcbiAgICBFUlJPUltFUlJPUltcIkxGX0VYUEVDVEVEXCJdID0gM10gPSBcIkxGX0VYUEVDVEVEXCI7XG4gICAgRVJST1JbRVJST1JbXCJVTkVYUEVDVEVEX0NPTlRFTlRfTEVOR1RIXCJdID0gNF0gPSBcIlVORVhQRUNURURfQ09OVEVOVF9MRU5HVEhcIjtcbiAgICBFUlJPUltFUlJPUltcIkNMT1NFRF9DT05ORUNUSU9OXCJdID0gNV0gPSBcIkNMT1NFRF9DT05ORUNUSU9OXCI7XG4gICAgRVJST1JbRVJST1JbXCJJTlZBTElEX01FVEhPRFwiXSA9IDZdID0gXCJJTlZBTElEX01FVEhPRFwiO1xuICAgIEVSUk9SW0VSUk9SW1wiSU5WQUxJRF9VUkxcIl0gPSA3XSA9IFwiSU5WQUxJRF9VUkxcIjtcbiAgICBFUlJPUltFUlJPUltcIklOVkFMSURfQ09OU1RBTlRcIl0gPSA4XSA9IFwiSU5WQUxJRF9DT05TVEFOVFwiO1xuICAgIEVSUk9SW0VSUk9SW1wiSU5WQUxJRF9WRVJTSU9OXCJdID0gOV0gPSBcIklOVkFMSURfVkVSU0lPTlwiO1xuICAgIEVSUk9SW0VSUk9SW1wiSU5WQUxJRF9IRUFERVJfVE9LRU5cIl0gPSAxMF0gPSBcIklOVkFMSURfSEVBREVSX1RPS0VOXCI7XG4gICAgRVJST1JbRVJST1JbXCJJTlZBTElEX0NPTlRFTlRfTEVOR1RIXCJdID0gMTFdID0gXCJJTlZBTElEX0NPTlRFTlRfTEVOR1RIXCI7XG4gICAgRVJST1JbRVJST1JbXCJJTlZBTElEX0NIVU5LX1NJWkVcIl0gPSAxMl0gPSBcIklOVkFMSURfQ0hVTktfU0laRVwiO1xuICAgIEVSUk9SW0VSUk9SW1wiSU5WQUxJRF9TVEFUVVNcIl0gPSAxM10gPSBcIklOVkFMSURfU1RBVFVTXCI7XG4gICAgRVJST1JbRVJST1JbXCJJTlZBTElEX0VPRl9TVEFURVwiXSA9IDE0XSA9IFwiSU5WQUxJRF9FT0ZfU1RBVEVcIjtcbiAgICBFUlJPUltFUlJPUltcIklOVkFMSURfVFJBTlNGRVJfRU5DT0RJTkdcIl0gPSAxNV0gPSBcIklOVkFMSURfVFJBTlNGRVJfRU5DT0RJTkdcIjtcbiAgICBFUlJPUltFUlJPUltcIkNCX01FU1NBR0VfQkVHSU5cIl0gPSAxNl0gPSBcIkNCX01FU1NBR0VfQkVHSU5cIjtcbiAgICBFUlJPUltFUlJPUltcIkNCX0hFQURFUlNfQ09NUExFVEVcIl0gPSAxN10gPSBcIkNCX0hFQURFUlNfQ09NUExFVEVcIjtcbiAgICBFUlJPUltFUlJPUltcIkNCX01FU1NBR0VfQ09NUExFVEVcIl0gPSAxOF0gPSBcIkNCX01FU1NBR0VfQ09NUExFVEVcIjtcbiAgICBFUlJPUltFUlJPUltcIkNCX0NIVU5LX0hFQURFUlwiXSA9IDE5XSA9IFwiQ0JfQ0hVTktfSEVBREVSXCI7XG4gICAgRVJST1JbRVJST1JbXCJDQl9DSFVOS19DT01QTEVURVwiXSA9IDIwXSA9IFwiQ0JfQ0hVTktfQ09NUExFVEVcIjtcbiAgICBFUlJPUltFUlJPUltcIlBBVVNFRFwiXSA9IDIxXSA9IFwiUEFVU0VEXCI7XG4gICAgRVJST1JbRVJST1JbXCJQQVVTRURfVVBHUkFERVwiXSA9IDIyXSA9IFwiUEFVU0VEX1VQR1JBREVcIjtcbiAgICBFUlJPUltFUlJPUltcIlBBVVNFRF9IMl9VUEdSQURFXCJdID0gMjNdID0gXCJQQVVTRURfSDJfVVBHUkFERVwiO1xuICAgIEVSUk9SW0VSUk9SW1wiVVNFUlwiXSA9IDI0XSA9IFwiVVNFUlwiO1xufSkoRVJST1IgPSBleHBvcnRzLkVSUk9SIHx8IChleHBvcnRzLkVSUk9SID0ge30pKTtcbnZhciBUWVBFO1xuKGZ1bmN0aW9uIChUWVBFKSB7XG4gICAgVFlQRVtUWVBFW1wiQk9USFwiXSA9IDBdID0gXCJCT1RIXCI7XG4gICAgVFlQRVtUWVBFW1wiUkVRVUVTVFwiXSA9IDFdID0gXCJSRVFVRVNUXCI7XG4gICAgVFlQRVtUWVBFW1wiUkVTUE9OU0VcIl0gPSAyXSA9IFwiUkVTUE9OU0VcIjtcbn0pKFRZUEUgPSBleHBvcnRzLlRZUEUgfHwgKGV4cG9ydHMuVFlQRSA9IHt9KSk7XG52YXIgRkxBR1M7XG4oZnVuY3Rpb24gKEZMQUdTKSB7XG4gICAgRkxBR1NbRkxBR1NbXCJDT05ORUNUSU9OX0tFRVBfQUxJVkVcIl0gPSAxXSA9IFwiQ09OTkVDVElPTl9LRUVQX0FMSVZFXCI7XG4gICAgRkxBR1NbRkxBR1NbXCJDT05ORUNUSU9OX0NMT1NFXCJdID0gMl0gPSBcIkNPTk5FQ1RJT05fQ0xPU0VcIjtcbiAgICBGTEFHU1tGTEFHU1tcIkNPTk5FQ1RJT05fVVBHUkFERVwiXSA9IDRdID0gXCJDT05ORUNUSU9OX1VQR1JBREVcIjtcbiAgICBGTEFHU1tGTEFHU1tcIkNIVU5LRURcIl0gPSA4XSA9IFwiQ0hVTktFRFwiO1xuICAgIEZMQUdTW0ZMQUdTW1wiVVBHUkFERVwiXSA9IDE2XSA9IFwiVVBHUkFERVwiO1xuICAgIEZMQUdTW0ZMQUdTW1wiQ09OVEVOVF9MRU5HVEhcIl0gPSAzMl0gPSBcIkNPTlRFTlRfTEVOR1RIXCI7XG4gICAgRkxBR1NbRkxBR1NbXCJTS0lQQk9EWVwiXSA9IDY0XSA9IFwiU0tJUEJPRFlcIjtcbiAgICBGTEFHU1tGTEFHU1tcIlRSQUlMSU5HXCJdID0gMTI4XSA9IFwiVFJBSUxJTkdcIjtcbiAgICAvLyAxIDw8IDggaXMgdW51c2VkXG4gICAgRkxBR1NbRkxBR1NbXCJUUkFOU0ZFUl9FTkNPRElOR1wiXSA9IDUxMl0gPSBcIlRSQU5TRkVSX0VOQ09ESU5HXCI7XG59KShGTEFHUyA9IGV4cG9ydHMuRkxBR1MgfHwgKGV4cG9ydHMuRkxBR1MgPSB7fSkpO1xudmFyIExFTklFTlRfRkxBR1M7XG4oZnVuY3Rpb24gKExFTklFTlRfRkxBR1MpIHtcbiAgICBMRU5JRU5UX0ZMQUdTW0xFTklFTlRfRkxBR1NbXCJIRUFERVJTXCJdID0gMV0gPSBcIkhFQURFUlNcIjtcbiAgICBMRU5JRU5UX0ZMQUdTW0xFTklFTlRfRkxBR1NbXCJDSFVOS0VEX0xFTkdUSFwiXSA9IDJdID0gXCJDSFVOS0VEX0xFTkdUSFwiO1xuICAgIExFTklFTlRfRkxBR1NbTEVOSUVOVF9GTEFHU1tcIktFRVBfQUxJVkVcIl0gPSA0XSA9IFwiS0VFUF9BTElWRVwiO1xufSkoTEVOSUVOVF9GTEFHUyA9IGV4cG9ydHMuTEVOSUVOVF9GTEFHUyB8fCAoZXhwb3J0cy5MRU5JRU5UX0ZMQUdTID0ge30pKTtcbnZhciBNRVRIT0RTO1xuKGZ1bmN0aW9uIChNRVRIT0RTKSB7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiREVMRVRFXCJdID0gMF0gPSBcIkRFTEVURVwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIkdFVFwiXSA9IDFdID0gXCJHRVRcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJIRUFEXCJdID0gMl0gPSBcIkhFQURcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJQT1NUXCJdID0gM10gPSBcIlBPU1RcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJQVVRcIl0gPSA0XSA9IFwiUFVUXCI7XG4gICAgLyogcGF0aG9sb2dpY2FsICovXG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiQ09OTkVDVFwiXSA9IDVdID0gXCJDT05ORUNUXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiT1BUSU9OU1wiXSA9IDZdID0gXCJPUFRJT05TXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiVFJBQ0VcIl0gPSA3XSA9IFwiVFJBQ0VcIjtcbiAgICAvKiBXZWJEQVYgKi9cbiAgICBNRVRIT0RTW01FVEhPRFNbXCJDT1BZXCJdID0gOF0gPSBcIkNPUFlcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJMT0NLXCJdID0gOV0gPSBcIkxPQ0tcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJNS0NPTFwiXSA9IDEwXSA9IFwiTUtDT0xcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJNT1ZFXCJdID0gMTFdID0gXCJNT1ZFXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiUFJPUEZJTkRcIl0gPSAxMl0gPSBcIlBST1BGSU5EXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiUFJPUFBBVENIXCJdID0gMTNdID0gXCJQUk9QUEFUQ0hcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJTRUFSQ0hcIl0gPSAxNF0gPSBcIlNFQVJDSFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlVOTE9DS1wiXSA9IDE1XSA9IFwiVU5MT0NLXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiQklORFwiXSA9IDE2XSA9IFwiQklORFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlJFQklORFwiXSA9IDE3XSA9IFwiUkVCSU5EXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiVU5CSU5EXCJdID0gMThdID0gXCJVTkJJTkRcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJBQ0xcIl0gPSAxOV0gPSBcIkFDTFwiO1xuICAgIC8qIHN1YnZlcnNpb24gKi9cbiAgICBNRVRIT0RTW01FVEhPRFNbXCJSRVBPUlRcIl0gPSAyMF0gPSBcIlJFUE9SVFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIk1LQUNUSVZJVFlcIl0gPSAyMV0gPSBcIk1LQUNUSVZJVFlcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJDSEVDS09VVFwiXSA9IDIyXSA9IFwiQ0hFQ0tPVVRcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJNRVJHRVwiXSA9IDIzXSA9IFwiTUVSR0VcIjtcbiAgICAvKiB1cG5wICovXG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiTS1TRUFSQ0hcIl0gPSAyNF0gPSBcIk0tU0VBUkNIXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiTk9USUZZXCJdID0gMjVdID0gXCJOT1RJRllcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJTVUJTQ1JJQkVcIl0gPSAyNl0gPSBcIlNVQlNDUklCRVwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlVOU1VCU0NSSUJFXCJdID0gMjddID0gXCJVTlNVQlNDUklCRVwiO1xuICAgIC8qIFJGQy01Nzg5ICovXG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiUEFUQ0hcIl0gPSAyOF0gPSBcIlBBVENIXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiUFVSR0VcIl0gPSAyOV0gPSBcIlBVUkdFXCI7XG4gICAgLyogQ2FsREFWICovXG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiTUtDQUxFTkRBUlwiXSA9IDMwXSA9IFwiTUtDQUxFTkRBUlwiO1xuICAgIC8qIFJGQy0yMDY4LCBzZWN0aW9uIDE5LjYuMS4yICovXG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiTElOS1wiXSA9IDMxXSA9IFwiTElOS1wiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlVOTElOS1wiXSA9IDMyXSA9IFwiVU5MSU5LXCI7XG4gICAgLyogaWNlY2FzdCAqL1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlNPVVJDRVwiXSA9IDMzXSA9IFwiU09VUkNFXCI7XG4gICAgLyogUkZDLTc1NDAsIHNlY3Rpb24gMTEuNiAqL1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlBSSVwiXSA9IDM0XSA9IFwiUFJJXCI7XG4gICAgLyogUkZDLTIzMjYgUlRTUCAqL1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIkRFU0NSSUJFXCJdID0gMzVdID0gXCJERVNDUklCRVwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIkFOTk9VTkNFXCJdID0gMzZdID0gXCJBTk5PVU5DRVwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlNFVFVQXCJdID0gMzddID0gXCJTRVRVUFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlBMQVlcIl0gPSAzOF0gPSBcIlBMQVlcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJQQVVTRVwiXSA9IDM5XSA9IFwiUEFVU0VcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJURUFSRE9XTlwiXSA9IDQwXSA9IFwiVEVBUkRPV05cIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJHRVRfUEFSQU1FVEVSXCJdID0gNDFdID0gXCJHRVRfUEFSQU1FVEVSXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiU0VUX1BBUkFNRVRFUlwiXSA9IDQyXSA9IFwiU0VUX1BBUkFNRVRFUlwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlJFRElSRUNUXCJdID0gNDNdID0gXCJSRURJUkVDVFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlJFQ09SRFwiXSA9IDQ0XSA9IFwiUkVDT1JEXCI7XG4gICAgLyogUkFPUCAqL1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIkZMVVNIXCJdID0gNDVdID0gXCJGTFVTSFwiO1xufSkoTUVUSE9EUyA9IGV4cG9ydHMuTUVUSE9EUyB8fCAoZXhwb3J0cy5NRVRIT0RTID0ge30pKTtcbmV4cG9ydHMuTUVUSE9EU19IVFRQID0gW1xuICAgIE1FVEhPRFMuREVMRVRFLFxuICAgIE1FVEhPRFMuR0VULFxuICAgIE1FVEhPRFMuSEVBRCxcbiAgICBNRVRIT0RTLlBPU1QsXG4gICAgTUVUSE9EUy5QVVQsXG4gICAgTUVUSE9EUy5DT05ORUNULFxuICAgIE1FVEhPRFMuT1BUSU9OUyxcbiAgICBNRVRIT0RTLlRSQUNFLFxuICAgIE1FVEhPRFMuQ09QWSxcbiAgICBNRVRIT0RTLkxPQ0ssXG4gICAgTUVUSE9EUy5NS0NPTCxcbiAgICBNRVRIT0RTLk1PVkUsXG4gICAgTUVUSE9EUy5QUk9QRklORCxcbiAgICBNRVRIT0RTLlBST1BQQVRDSCxcbiAgICBNRVRIT0RTLlNFQVJDSCxcbiAgICBNRVRIT0RTLlVOTE9DSyxcbiAgICBNRVRIT0RTLkJJTkQsXG4gICAgTUVUSE9EUy5SRUJJTkQsXG4gICAgTUVUSE9EUy5VTkJJTkQsXG4gICAgTUVUSE9EUy5BQ0wsXG4gICAgTUVUSE9EUy5SRVBPUlQsXG4gICAgTUVUSE9EUy5NS0FDVElWSVRZLFxuICAgIE1FVEhPRFMuQ0hFQ0tPVVQsXG4gICAgTUVUSE9EUy5NRVJHRSxcbiAgICBNRVRIT0RTWydNLVNFQVJDSCddLFxuICAgIE1FVEhPRFMuTk9USUZZLFxuICAgIE1FVEhPRFMuU1VCU0NSSUJFLFxuICAgIE1FVEhPRFMuVU5TVUJTQ1JJQkUsXG4gICAgTUVUSE9EUy5QQVRDSCxcbiAgICBNRVRIT0RTLlBVUkdFLFxuICAgIE1FVEhPRFMuTUtDQUxFTkRBUixcbiAgICBNRVRIT0RTLkxJTkssXG4gICAgTUVUSE9EUy5VTkxJTkssXG4gICAgTUVUSE9EUy5QUkksXG4gICAgLy8gVE9ETyhpbmR1dG55KTogc2hvdWxkIHdlIGFsbG93IGl0IHdpdGggSFRUUD9cbiAgICBNRVRIT0RTLlNPVVJDRSxcbl07XG5leHBvcnRzLk1FVEhPRFNfSUNFID0gW1xuICAgIE1FVEhPRFMuU09VUkNFLFxuXTtcbmV4cG9ydHMuTUVUSE9EU19SVFNQID0gW1xuICAgIE1FVEhPRFMuT1BUSU9OUyxcbiAgICBNRVRIT0RTLkRFU0NSSUJFLFxuICAgIE1FVEhPRFMuQU5OT1VOQ0UsXG4gICAgTUVUSE9EUy5TRVRVUCxcbiAgICBNRVRIT0RTLlBMQVksXG4gICAgTUVUSE9EUy5QQVVTRSxcbiAgICBNRVRIT0RTLlRFQVJET1dOLFxuICAgIE1FVEhPRFMuR0VUX1BBUkFNRVRFUixcbiAgICBNRVRIT0RTLlNFVF9QQVJBTUVURVIsXG4gICAgTUVUSE9EUy5SRURJUkVDVCxcbiAgICBNRVRIT0RTLlJFQ09SRCxcbiAgICBNRVRIT0RTLkZMVVNILFxuICAgIC8vIEZvciBBaXJQbGF5XG4gICAgTUVUSE9EUy5HRVQsXG4gICAgTUVUSE9EUy5QT1NULFxuXTtcbmV4cG9ydHMuTUVUSE9EX01BUCA9IHV0aWxzXzEuZW51bVRvTWFwKE1FVEhPRFMpO1xuZXhwb3J0cy5IX01FVEhPRF9NQVAgPSB7fTtcbk9iamVjdC5rZXlzKGV4cG9ydHMuTUVUSE9EX01BUCkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgaWYgKC9eSC8udGVzdChrZXkpKSB7XG4gICAgICAgIGV4cG9ydHMuSF9NRVRIT0RfTUFQW2tleV0gPSBleHBvcnRzLk1FVEhPRF9NQVBba2V5XTtcbiAgICB9XG59KTtcbnZhciBGSU5JU0g7XG4oZnVuY3Rpb24gKEZJTklTSCkge1xuICAgIEZJTklTSFtGSU5JU0hbXCJTQUZFXCJdID0gMF0gPSBcIlNBRkVcIjtcbiAgICBGSU5JU0hbRklOSVNIW1wiU0FGRV9XSVRIX0NCXCJdID0gMV0gPSBcIlNBRkVfV0lUSF9DQlwiO1xuICAgIEZJTklTSFtGSU5JU0hbXCJVTlNBRkVcIl0gPSAyXSA9IFwiVU5TQUZFXCI7XG59KShGSU5JU0ggPSBleHBvcnRzLkZJTklTSCB8fCAoZXhwb3J0cy5GSU5JU0ggPSB7fSkpO1xuZXhwb3J0cy5BTFBIQSA9IFtdO1xuZm9yIChsZXQgaSA9ICdBJy5jaGFyQ29kZUF0KDApOyBpIDw9ICdaJy5jaGFyQ29kZUF0KDApOyBpKyspIHtcbiAgICAvLyBVcHBlciBjYXNlXG4gICAgZXhwb3J0cy5BTFBIQS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoaSkpO1xuICAgIC8vIExvd2VyIGNhc2VcbiAgICBleHBvcnRzLkFMUEhBLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShpICsgMHgyMCkpO1xufVxuZXhwb3J0cy5OVU1fTUFQID0ge1xuICAgIDA6IDAsIDE6IDEsIDI6IDIsIDM6IDMsIDQ6IDQsXG4gICAgNTogNSwgNjogNiwgNzogNywgODogOCwgOTogOSxcbn07XG5leHBvcnRzLkhFWF9NQVAgPSB7XG4gICAgMDogMCwgMTogMSwgMjogMiwgMzogMywgNDogNCxcbiAgICA1OiA1LCA2OiA2LCA3OiA3LCA4OiA4LCA5OiA5LFxuICAgIEE6IDBYQSwgQjogMFhCLCBDOiAwWEMsIEQ6IDBYRCwgRTogMFhFLCBGOiAwWEYsXG4gICAgYTogMHhhLCBiOiAweGIsIGM6IDB4YywgZDogMHhkLCBlOiAweGUsIGY6IDB4Zixcbn07XG5leHBvcnRzLk5VTSA9IFtcbiAgICAnMCcsICcxJywgJzInLCAnMycsICc0JywgJzUnLCAnNicsICc3JywgJzgnLCAnOScsXG5dO1xuZXhwb3J0cy5BTFBIQU5VTSA9IGV4cG9ydHMuQUxQSEEuY29uY2F0KGV4cG9ydHMuTlVNKTtcbmV4cG9ydHMuTUFSSyA9IFsnLScsICdfJywgJy4nLCAnIScsICd+JywgJyonLCAnXFwnJywgJygnLCAnKSddO1xuZXhwb3J0cy5VU0VSSU5GT19DSEFSUyA9IGV4cG9ydHMuQUxQSEFOVU1cbiAgICAuY29uY2F0KGV4cG9ydHMuTUFSSylcbiAgICAuY29uY2F0KFsnJScsICc7JywgJzonLCAnJicsICc9JywgJysnLCAnJCcsICcsJ10pO1xuLy8gVE9ETyhpbmR1dG55KTogdXNlIFJGQ1xuZXhwb3J0cy5TVFJJQ1RfVVJMX0NIQVIgPSBbXG4gICAgJyEnLCAnXCInLCAnJCcsICclJywgJyYnLCAnXFwnJyxcbiAgICAnKCcsICcpJywgJyonLCAnKycsICcsJywgJy0nLCAnLicsICcvJyxcbiAgICAnOicsICc7JywgJzwnLCAnPScsICc+JyxcbiAgICAnQCcsICdbJywgJ1xcXFwnLCAnXScsICdeJywgJ18nLFxuICAgICdgJyxcbiAgICAneycsICd8JywgJ30nLCAnficsXG5dLmNvbmNhdChleHBvcnRzLkFMUEhBTlVNKTtcbmV4cG9ydHMuVVJMX0NIQVIgPSBleHBvcnRzLlNUUklDVF9VUkxfQ0hBUlxuICAgIC5jb25jYXQoWydcXHQnLCAnXFxmJ10pO1xuLy8gQWxsIGNoYXJhY3RlcnMgd2l0aCAweDgwIGJpdCBzZXQgdG8gMVxuZm9yIChsZXQgaSA9IDB4ODA7IGkgPD0gMHhmZjsgaSsrKSB7XG4gICAgZXhwb3J0cy5VUkxfQ0hBUi5wdXNoKGkpO1xufVxuZXhwb3J0cy5IRVggPSBleHBvcnRzLk5VTS5jb25jYXQoWydhJywgJ2InLCAnYycsICdkJywgJ2UnLCAnZicsICdBJywgJ0InLCAnQycsICdEJywgJ0UnLCAnRiddKTtcbi8qIFRva2VucyBhcyBkZWZpbmVkIGJ5IHJmYyAyNjE2LiBBbHNvIGxvd2VyY2FzZXMgdGhlbS5cbiAqICAgICAgICB0b2tlbiAgICAgICA9IDEqPGFueSBDSEFSIGV4Y2VwdCBDVExzIG9yIHNlcGFyYXRvcnM+XG4gKiAgICAgc2VwYXJhdG9ycyAgICAgPSBcIihcIiB8IFwiKVwiIHwgXCI8XCIgfCBcIj5cIiB8IFwiQFwiXG4gKiAgICAgICAgICAgICAgICAgICAgfCBcIixcIiB8IFwiO1wiIHwgXCI6XCIgfCBcIlxcXCIgfCA8XCI+XG4gKiAgICAgICAgICAgICAgICAgICAgfCBcIi9cIiB8IFwiW1wiIHwgXCJdXCIgfCBcIj9cIiB8IFwiPVwiXG4gKiAgICAgICAgICAgICAgICAgICAgfCBcIntcIiB8IFwifVwiIHwgU1AgfCBIVFxuICovXG5leHBvcnRzLlNUUklDVF9UT0tFTiA9IFtcbiAgICAnIScsICcjJywgJyQnLCAnJScsICcmJywgJ1xcJycsXG4gICAgJyonLCAnKycsICctJywgJy4nLFxuICAgICdeJywgJ18nLCAnYCcsXG4gICAgJ3wnLCAnficsXG5dLmNvbmNhdChleHBvcnRzLkFMUEhBTlVNKTtcbmV4cG9ydHMuVE9LRU4gPSBleHBvcnRzLlNUUklDVF9UT0tFTi5jb25jYXQoWycgJ10pO1xuLypcbiAqIFZlcmlmeSB0aGF0IGEgY2hhciBpcyBhIHZhbGlkIHZpc2libGUgKHByaW50YWJsZSkgVVMtQVNDSUlcbiAqIGNoYXJhY3RlciBvciAleDgwLUZGXG4gKi9cbmV4cG9ydHMuSEVBREVSX0NIQVJTID0gWydcXHQnXTtcbmZvciAobGV0IGkgPSAzMjsgaSA8PSAyNTU7IGkrKykge1xuICAgIGlmIChpICE9PSAxMjcpIHtcbiAgICAgICAgZXhwb3J0cy5IRUFERVJfQ0hBUlMucHVzaChpKTtcbiAgICB9XG59XG4vLyAnLCcgPSBcXHg0NFxuZXhwb3J0cy5DT05ORUNUSU9OX1RPS0VOX0NIQVJTID0gZXhwb3J0cy5IRUFERVJfQ0hBUlMuZmlsdGVyKChjKSA9PiBjICE9PSA0NCk7XG5leHBvcnRzLk1BSk9SID0gZXhwb3J0cy5OVU1fTUFQO1xuZXhwb3J0cy5NSU5PUiA9IGV4cG9ydHMuTUFKT1I7XG52YXIgSEVBREVSX1NUQVRFO1xuKGZ1bmN0aW9uIChIRUFERVJfU1RBVEUpIHtcbiAgICBIRUFERVJfU1RBVEVbSEVBREVSX1NUQVRFW1wiR0VORVJBTFwiXSA9IDBdID0gXCJHRU5FUkFMXCI7XG4gICAgSEVBREVSX1NUQVRFW0hFQURFUl9TVEFURVtcIkNPTk5FQ1RJT05cIl0gPSAxXSA9IFwiQ09OTkVDVElPTlwiO1xuICAgIEhFQURFUl9TVEFURVtIRUFERVJfU1RBVEVbXCJDT05URU5UX0xFTkdUSFwiXSA9IDJdID0gXCJDT05URU5UX0xFTkdUSFwiO1xuICAgIEhFQURFUl9TVEFURVtIRUFERVJfU1RBVEVbXCJUUkFOU0ZFUl9FTkNPRElOR1wiXSA9IDNdID0gXCJUUkFOU0ZFUl9FTkNPRElOR1wiO1xuICAgIEhFQURFUl9TVEFURVtIRUFERVJfU1RBVEVbXCJVUEdSQURFXCJdID0gNF0gPSBcIlVQR1JBREVcIjtcbiAgICBIRUFERVJfU1RBVEVbSEVBREVSX1NUQVRFW1wiQ09OTkVDVElPTl9LRUVQX0FMSVZFXCJdID0gNV0gPSBcIkNPTk5FQ1RJT05fS0VFUF9BTElWRVwiO1xuICAgIEhFQURFUl9TVEFURVtIRUFERVJfU1RBVEVbXCJDT05ORUNUSU9OX0NMT1NFXCJdID0gNl0gPSBcIkNPTk5FQ1RJT05fQ0xPU0VcIjtcbiAgICBIRUFERVJfU1RBVEVbSEVBREVSX1NUQVRFW1wiQ09OTkVDVElPTl9VUEdSQURFXCJdID0gN10gPSBcIkNPTk5FQ1RJT05fVVBHUkFERVwiO1xuICAgIEhFQURFUl9TVEFURVtIRUFERVJfU1RBVEVbXCJUUkFOU0ZFUl9FTkNPRElOR19DSFVOS0VEXCJdID0gOF0gPSBcIlRSQU5TRkVSX0VOQ09ESU5HX0NIVU5LRURcIjtcbn0pKEhFQURFUl9TVEFURSA9IGV4cG9ydHMuSEVBREVSX1NUQVRFIHx8IChleHBvcnRzLkhFQURFUl9TVEFURSA9IHt9KSk7XG5leHBvcnRzLlNQRUNJQUxfSEVBREVSUyA9IHtcbiAgICAnY29ubmVjdGlvbic6IEhFQURFUl9TVEFURS5DT05ORUNUSU9OLFxuICAgICdjb250ZW50LWxlbmd0aCc6IEhFQURFUl9TVEFURS5DT05URU5UX0xFTkdUSCxcbiAgICAncHJveHktY29ubmVjdGlvbic6IEhFQURFUl9TVEFURS5DT05ORUNUSU9OLFxuICAgICd0cmFuc2Zlci1lbmNvZGluZyc6IEhFQURFUl9TVEFURS5UUkFOU0ZFUl9FTkNPRElORyxcbiAgICAndXBncmFkZSc6IEhFQURFUl9TVEFURS5VUEdSQURFLFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0YW50cy5qcy5tYXAiLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsga0JvZHlVc2VkIH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IEVFID0gcmVxdWlyZSgnZXZlbnRzJylcblxuY29uc3QgcmVkaXJlY3RhYmxlU3RhdHVzQ29kZXMgPSBbMzAwLCAzMDEsIDMwMiwgMzAzLCAzMDcsIDMwOF1cblxuY29uc3Qga0JvZHkgPSBTeW1ib2woJ2JvZHknKVxuXG5jbGFzcyBCb2R5QXN5bmNJdGVyYWJsZSB7XG4gIGNvbnN0cnVjdG9yIChib2R5KSB7XG4gICAgdGhpc1trQm9keV0gPSBib2R5XG4gICAgdGhpc1trQm9keVVzZWRdID0gZmFsc2VcbiAgfVxuXG4gIGFzeW5jICogW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSAoKSB7XG4gICAgYXNzZXJ0KCF0aGlzW2tCb2R5VXNlZF0sICdkaXN0dXJiZWQnKVxuICAgIHRoaXNba0JvZHlVc2VkXSA9IHRydWVcbiAgICB5aWVsZCAqIHRoaXNba0JvZHldXG4gIH1cbn1cblxuY2xhc3MgUmVkaXJlY3RIYW5kbGVyIHtcbiAgY29uc3RydWN0b3IgKGRpc3BhdGNoLCBtYXhSZWRpcmVjdGlvbnMsIG9wdHMsIGhhbmRsZXIpIHtcbiAgICBpZiAobWF4UmVkaXJlY3Rpb25zICE9IG51bGwgJiYgKCFOdW1iZXIuaXNJbnRlZ2VyKG1heFJlZGlyZWN0aW9ucykgfHwgbWF4UmVkaXJlY3Rpb25zIDwgMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignbWF4UmVkaXJlY3Rpb25zIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKVxuICAgIH1cblxuICAgIHV0aWwudmFsaWRhdGVIYW5kbGVyKGhhbmRsZXIsIG9wdHMubWV0aG9kLCBvcHRzLnVwZ3JhZGUpXG5cbiAgICB0aGlzLmRpc3BhdGNoID0gZGlzcGF0Y2hcbiAgICB0aGlzLmxvY2F0aW9uID0gbnVsbFxuICAgIHRoaXMuYWJvcnQgPSBudWxsXG4gICAgdGhpcy5vcHRzID0geyAuLi5vcHRzLCBtYXhSZWRpcmVjdGlvbnM6IDAgfSAvLyBvcHRzIG11c3QgYmUgYSBjb3B5XG4gICAgdGhpcy5tYXhSZWRpcmVjdGlvbnMgPSBtYXhSZWRpcmVjdGlvbnNcbiAgICB0aGlzLmhhbmRsZXIgPSBoYW5kbGVyXG4gICAgdGhpcy5oaXN0b3J5ID0gW11cblxuICAgIGlmICh1dGlsLmlzU3RyZWFtKHRoaXMub3B0cy5ib2R5KSkge1xuICAgICAgLy8gVE9ETyAoZml4KTogUHJvdmlkZSBzb21lIHdheSBmb3IgdGhlIHVzZXIgdG8gY2FjaGUgdGhlIGZpbGUgdG8gZS5nLiAvdG1wXG4gICAgICAvLyBzbyB0aGF0IGl0IGNhbiBiZSBkaXNwYXRjaGVkIGFnYWluP1xuICAgICAgLy8gVE9ETyAoZml4KTogRG8gd2UgbmVlZCAxMDAtZXhwZWN0IHN1cHBvcnQgdG8gcHJvdmlkZSBhIHdheSB0byBkbyB0aGlzIHByb3Blcmx5P1xuICAgICAgaWYgKHV0aWwuYm9keUxlbmd0aCh0aGlzLm9wdHMuYm9keSkgPT09IDApIHtcbiAgICAgICAgdGhpcy5vcHRzLmJvZHlcbiAgICAgICAgICAub24oJ2RhdGEnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBhc3NlcnQoZmFsc2UpXG4gICAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB0aGlzLm9wdHMuYm9keS5yZWFkYWJsZURpZFJlYWQgIT09ICdib29sZWFuJykge1xuICAgICAgICB0aGlzLm9wdHMuYm9keVtrQm9keVVzZWRdID0gZmFsc2VcbiAgICAgICAgRUUucHJvdG90eXBlLm9uLmNhbGwodGhpcy5vcHRzLmJvZHksICdkYXRhJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHRoaXNba0JvZHlVc2VkXSA9IHRydWVcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMub3B0cy5ib2R5ICYmIHR5cGVvZiB0aGlzLm9wdHMuYm9keS5waXBlVG8gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIFRPRE8gKGZpeCk6IFdlIGNhbid0IGFjY2VzcyBSZWFkYWJsZVN0cmVhbSBpbnRlcm5hbCBzdGF0ZVxuICAgICAgLy8gdG8gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IGl0IGhhcyBiZWVuIGRpc3R1cmJlZC4gVGhpcyBpcyBqdXN0XG4gICAgICAvLyBhIHdvcmthcm91bmQuXG4gICAgICB0aGlzLm9wdHMuYm9keSA9IG5ldyBCb2R5QXN5bmNJdGVyYWJsZSh0aGlzLm9wdHMuYm9keSlcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdGhpcy5vcHRzLmJvZHkgJiZcbiAgICAgIHR5cGVvZiB0aGlzLm9wdHMuYm9keSAhPT0gJ3N0cmluZycgJiZcbiAgICAgICFBcnJheUJ1ZmZlci5pc1ZpZXcodGhpcy5vcHRzLmJvZHkpICYmXG4gICAgICB1dGlsLmlzSXRlcmFibGUodGhpcy5vcHRzLmJvZHkpXG4gICAgKSB7XG4gICAgICAvLyBUT0RPOiBTaG91bGQgd2UgYWxsb3cgcmUtdXNpbmcgaXRlcmFibGUgaWYgIXRoaXMub3B0cy5pZGVtcG90ZW50XG4gICAgICAvLyBvciB0aHJvdWdoIHNvbWUgb3RoZXIgZmxhZz9cbiAgICAgIHRoaXMub3B0cy5ib2R5ID0gbmV3IEJvZHlBc3luY0l0ZXJhYmxlKHRoaXMub3B0cy5ib2R5KVxuICAgIH1cbiAgfVxuXG4gIG9uQ29ubmVjdCAoYWJvcnQpIHtcbiAgICB0aGlzLmFib3J0ID0gYWJvcnRcbiAgICB0aGlzLmhhbmRsZXIub25Db25uZWN0KGFib3J0LCB7IGhpc3Rvcnk6IHRoaXMuaGlzdG9yeSB9KVxuICB9XG5cbiAgb25VcGdyYWRlIChzdGF0dXNDb2RlLCBoZWFkZXJzLCBzb2NrZXQpIHtcbiAgICB0aGlzLmhhbmRsZXIub25VcGdyYWRlKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHNvY2tldClcbiAgfVxuXG4gIG9uRXJyb3IgKGVycm9yKSB7XG4gICAgdGhpcy5oYW5kbGVyLm9uRXJyb3IoZXJyb3IpXG4gIH1cblxuICBvbkhlYWRlcnMgKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHJlc3VtZSwgc3RhdHVzVGV4dCkge1xuICAgIHRoaXMubG9jYXRpb24gPSB0aGlzLmhpc3RvcnkubGVuZ3RoID49IHRoaXMubWF4UmVkaXJlY3Rpb25zIHx8IHV0aWwuaXNEaXN0dXJiZWQodGhpcy5vcHRzLmJvZHkpXG4gICAgICA/IG51bGxcbiAgICAgIDogcGFyc2VMb2NhdGlvbihzdGF0dXNDb2RlLCBoZWFkZXJzKVxuXG4gICAgaWYgKHRoaXMub3B0cy5vcmlnaW4pIHtcbiAgICAgIHRoaXMuaGlzdG9yeS5wdXNoKG5ldyBVUkwodGhpcy5vcHRzLnBhdGgsIHRoaXMub3B0cy5vcmlnaW4pKVxuICAgIH1cblxuICAgIGlmICghdGhpcy5sb2NhdGlvbikge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkhlYWRlcnMoc3RhdHVzQ29kZSwgaGVhZGVycywgcmVzdW1lLCBzdGF0dXNUZXh0KVxuICAgIH1cblxuICAgIGNvbnN0IHsgb3JpZ2luLCBwYXRobmFtZSwgc2VhcmNoIH0gPSB1dGlsLnBhcnNlVVJMKG5ldyBVUkwodGhpcy5sb2NhdGlvbiwgdGhpcy5vcHRzLm9yaWdpbiAmJiBuZXcgVVJMKHRoaXMub3B0cy5wYXRoLCB0aGlzLm9wdHMub3JpZ2luKSkpXG4gICAgY29uc3QgcGF0aCA9IHNlYXJjaCA/IGAke3BhdGhuYW1lfSR7c2VhcmNofWAgOiBwYXRobmFtZVxuXG4gICAgLy8gUmVtb3ZlIGhlYWRlcnMgcmVmZXJyaW5nIHRvIHRoZSBvcmlnaW5hbCBVUkwuXG4gICAgLy8gQnkgZGVmYXVsdCBpdCBpcyBIb3N0IG9ubHksIHVubGVzcyBpdCdzIGEgMzAzIChzZWUgYmVsb3cpLCB3aGljaCByZW1vdmVzIGFsc28gYWxsIENvbnRlbnQtKiBoZWFkZXJzLlxuICAgIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNi40XG4gICAgdGhpcy5vcHRzLmhlYWRlcnMgPSBjbGVhblJlcXVlc3RIZWFkZXJzKHRoaXMub3B0cy5oZWFkZXJzLCBzdGF0dXNDb2RlID09PSAzMDMsIHRoaXMub3B0cy5vcmlnaW4gIT09IG9yaWdpbilcbiAgICB0aGlzLm9wdHMucGF0aCA9IHBhdGhcbiAgICB0aGlzLm9wdHMub3JpZ2luID0gb3JpZ2luXG4gICAgdGhpcy5vcHRzLm1heFJlZGlyZWN0aW9ucyA9IDBcbiAgICB0aGlzLm9wdHMucXVlcnkgPSBudWxsXG5cbiAgICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTYuNC40XG4gICAgLy8gSW4gY2FzZSBvZiBIVFRQIDMwMywgYWx3YXlzIHJlcGxhY2UgbWV0aG9kIHRvIGJlIGVpdGhlciBIRUFEIG9yIEdFVFxuICAgIGlmIChzdGF0dXNDb2RlID09PSAzMDMgJiYgdGhpcy5vcHRzLm1ldGhvZCAhPT0gJ0hFQUQnKSB7XG4gICAgICB0aGlzLm9wdHMubWV0aG9kID0gJ0dFVCdcbiAgICAgIHRoaXMub3B0cy5ib2R5ID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIG9uRGF0YSAoY2h1bmspIHtcbiAgICBpZiAodGhpcy5sb2NhdGlvbikge1xuICAgICAgLypcbiAgICAgICAgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi02LjRcblxuICAgICAgICBUTERSOiB1bmRpY2kgYWx3YXlzIGlnbm9yZXMgM3h4IHJlc3BvbnNlIGJvZGllcy5cblxuICAgICAgICBSZWRpcmVjdGlvbiBpcyB1c2VkIHRvIHNlcnZlIHRoZSByZXF1ZXN0ZWQgcmVzb3VyY2UgZnJvbSBhbm90aGVyIFVSTCwgc28gaXQgaXMgYXNzdW1lcyB0aGF0XG4gICAgICAgIG5vIGJvZHkgaXMgZ2VuZXJhdGVkIChhbmQgdGh1cyBjYW4gYmUgaWdub3JlZCkuIEV2ZW4gdGhvdWdoIGdlbmVyYXRpbmcgYSBib2R5IGlzIG5vdCBwcm9oaWJpdGVkLlxuXG4gICAgICAgIEZvciBzdGF0dXMgMzAxLCAzMDIsIDMwMywgMzA3IGFuZCAzMDggKHRoZSBsYXR0ZXIgZnJvbSBSRkMgNzIzOCksIHRoZSBzcGVjcyBtZW50aW9uIHRoYXQgdGhlIGJvZHkgdXN1YWxseVxuICAgICAgICAod2hpY2ggbWVhbnMgaXQncyBvcHRpb25hbCBhbmQgbm90IG1hbmRhdGVkKSBjb250YWluIGp1c3QgYW4gaHlwZXJsaW5rIHRvIHRoZSB2YWx1ZSBvZlxuICAgICAgICB0aGUgTG9jYXRpb24gcmVzcG9uc2UgaGVhZGVyLCBzbyB0aGUgYm9keSBjYW4gYmUgaWdub3JlZCBzYWZlbHkuXG5cbiAgICAgICAgRm9yIHN0YXR1cyAzMDAsIHdoaWNoIGlzIFwiTXVsdGlwbGUgQ2hvaWNlc1wiLCB0aGUgc3BlYyBtZW50aW9ucyBib3RoIGdlbmVyYXRpbmcgYSBMb2NhdGlvblxuICAgICAgICByZXNwb25zZSBoZWFkZXIgQU5EIGEgcmVzcG9uc2UgYm9keSB3aXRoIHRoZSBvdGhlciBwb3NzaWJsZSBsb2NhdGlvbiB0byBmb2xsb3cuXG4gICAgICAgIFNpbmNlIHRoZSBzcGVjIGV4cGxpY2l0aWx5IGNob29zZXMgbm90IHRvIHNwZWNpZnkgYSBmb3JtYXQgZm9yIHN1Y2ggYm9keSBhbmQgbGVhdmUgaXQgdG9cbiAgICAgICAgc2VydmVycyBhbmQgYnJvd3NlcnMgaW1wbGVtZW50b3JzLCB3ZSBpZ25vcmUgdGhlIGJvZHkgYXMgdGhlcmUgaXMgbm8gc3BlY2lmaWVkIHdheSB0byBldmVudHVhbGx5IHBhcnNlIGl0LlxuICAgICAgKi9cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkRhdGEoY2h1bmspXG4gICAgfVxuICB9XG5cbiAgb25Db21wbGV0ZSAodHJhaWxlcnMpIHtcbiAgICBpZiAodGhpcy5sb2NhdGlvbikge1xuICAgICAgLypcbiAgICAgICAgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi02LjRcblxuICAgICAgICBUTERSOiB1bmRpY2kgYWx3YXlzIGlnbm9yZXMgM3h4IHJlc3BvbnNlIHRyYWlsZXJzIGFzIHRoZXkgYXJlIG5vdCBleHBlY3RlZCBpbiBjYXNlIG9mIHJlZGlyZWN0aW9uc1xuICAgICAgICBhbmQgbmVpdGhlciBhcmUgdXNlZnVsIGlmIHByZXNlbnQuXG5cbiAgICAgICAgU2VlIGNvbW1lbnQgb24gb25EYXRhIG1ldGhvZCBhYm92ZSBmb3IgbW9yZSBkZXRhaWxlZCBpbmZvcm1hdGlvbnMuXG4gICAgICAqL1xuXG4gICAgICB0aGlzLmxvY2F0aW9uID0gbnVsbFxuICAgICAgdGhpcy5hYm9ydCA9IG51bGxcblxuICAgICAgdGhpcy5kaXNwYXRjaCh0aGlzLm9wdHMsIHRoaXMpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGFuZGxlci5vbkNvbXBsZXRlKHRyYWlsZXJzKVxuICAgIH1cbiAgfVxuXG4gIG9uQm9keVNlbnQgKGNodW5rKSB7XG4gICAgaWYgKHRoaXMuaGFuZGxlci5vbkJvZHlTZW50KSB7XG4gICAgICB0aGlzLmhhbmRsZXIub25Cb2R5U2VudChjaHVuaylcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VMb2NhdGlvbiAoc3RhdHVzQ29kZSwgaGVhZGVycykge1xuICBpZiAocmVkaXJlY3RhYmxlU3RhdHVzQ29kZXMuaW5kZXhPZihzdGF0dXNDb2RlKSA9PT0gLTEpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgaWYgKGhlYWRlcnNbaV0udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09PSAnbG9jYXRpb24nKSB7XG4gICAgICByZXR1cm4gaGVhZGVyc1tpICsgMV1cbiAgICB9XG4gIH1cbn1cblxuLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi02LjQuNFxuZnVuY3Rpb24gc2hvdWxkUmVtb3ZlSGVhZGVyIChoZWFkZXIsIHJlbW92ZUNvbnRlbnQsIHVua25vd25PcmlnaW4pIHtcbiAgaWYgKGhlYWRlci5sZW5ndGggPT09IDQpIHtcbiAgICByZXR1cm4gdXRpbC5oZWFkZXJOYW1lVG9TdHJpbmcoaGVhZGVyKSA9PT0gJ2hvc3QnXG4gIH1cbiAgaWYgKHJlbW92ZUNvbnRlbnQgJiYgdXRpbC5oZWFkZXJOYW1lVG9TdHJpbmcoaGVhZGVyKS5zdGFydHNXaXRoKCdjb250ZW50LScpKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICBpZiAodW5rbm93bk9yaWdpbiAmJiAoaGVhZGVyLmxlbmd0aCA9PT0gMTMgfHwgaGVhZGVyLmxlbmd0aCA9PT0gNiB8fCBoZWFkZXIubGVuZ3RoID09PSAxOSkpIHtcbiAgICBjb25zdCBuYW1lID0gdXRpbC5oZWFkZXJOYW1lVG9TdHJpbmcoaGVhZGVyKVxuICAgIHJldHVybiBuYW1lID09PSAnYXV0aG9yaXphdGlvbicgfHwgbmFtZSA9PT0gJ2Nvb2tpZScgfHwgbmFtZSA9PT0gJ3Byb3h5LWF1dGhvcml6YXRpb24nXG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNi40XG5mdW5jdGlvbiBjbGVhblJlcXVlc3RIZWFkZXJzIChoZWFkZXJzLCByZW1vdmVDb250ZW50LCB1bmtub3duT3JpZ2luKSB7XG4gIGNvbnN0IHJldCA9IFtdXG4gIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICBpZiAoIXNob3VsZFJlbW92ZUhlYWRlcihoZWFkZXJzW2ldLCByZW1vdmVDb250ZW50LCB1bmtub3duT3JpZ2luKSkge1xuICAgICAgICByZXQucHVzaChoZWFkZXJzW2ldLCBoZWFkZXJzW2kgKyAxXSlcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAoaGVhZGVycyAmJiB0eXBlb2YgaGVhZGVycyA9PT0gJ29iamVjdCcpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhoZWFkZXJzKSkge1xuICAgICAgaWYgKCFzaG91bGRSZW1vdmVIZWFkZXIoa2V5LCByZW1vdmVDb250ZW50LCB1bmtub3duT3JpZ2luKSkge1xuICAgICAgICByZXQucHVzaChrZXksIGhlYWRlcnNba2V5XSlcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgYXNzZXJ0KGhlYWRlcnMgPT0gbnVsbCwgJ2hlYWRlcnMgbXVzdCBiZSBhbiBvYmplY3Qgb3IgYW4gYXJyYXknKVxuICB9XG4gIHJldHVybiByZXRcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBSZWRpcmVjdEhhbmRsZXJcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFJlZGlyZWN0SGFuZGxlciA9IHJlcXVpcmUoJy4uL2hhbmRsZXIvUmVkaXJlY3RIYW5kbGVyJylcblxuZnVuY3Rpb24gY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvciAoeyBtYXhSZWRpcmVjdGlvbnM6IGRlZmF1bHRNYXhSZWRpcmVjdGlvbnMgfSkge1xuICByZXR1cm4gKGRpc3BhdGNoKSA9PiB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIEludGVyY2VwdCAob3B0cywgaGFuZGxlcikge1xuICAgICAgY29uc3QgeyBtYXhSZWRpcmVjdGlvbnMgPSBkZWZhdWx0TWF4UmVkaXJlY3Rpb25zIH0gPSBvcHRzXG5cbiAgICAgIGlmICghbWF4UmVkaXJlY3Rpb25zKSB7XG4gICAgICAgIHJldHVybiBkaXNwYXRjaChvcHRzLCBoYW5kbGVyKVxuICAgICAgfVxuXG4gICAgICBjb25zdCByZWRpcmVjdEhhbmRsZXIgPSBuZXcgUmVkaXJlY3RIYW5kbGVyKGRpc3BhdGNoLCBtYXhSZWRpcmVjdGlvbnMsIG9wdHMsIGhhbmRsZXIpXG4gICAgICBvcHRzID0geyAuLi5vcHRzLCBtYXhSZWRpcmVjdGlvbnM6IDAgfSAvLyBTdG9wIHN1YiBkaXNwYXRjaGVyIGZyb20gYWxzbyByZWRpcmVjdGluZy5cbiAgICAgIHJldHVybiBkaXNwYXRjaChvcHRzLCByZWRpcmVjdEhhbmRsZXIpXG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvclxuIiwKICAgICJtb2R1bGUuZXhwb3J0cyA9ICdBR0Z6YlFFQUFBQUJNQWhnQVg4QmYyQURmMzkvQVg5Z0JIOS9mMzhCZjJBQUFHQURmMzkvQUdBQmZ3QmdBbjkvQUdBR2YzOS9mMzkvQUFMTEFRZ0RaVzUyR0hkaGMyMWZiMjVmYUdWaFpHVnljMTlqYjIxd2JHVjBaUUFDQTJWdWRoVjNZWE50WDI5dVgyMWxjM05oWjJWZlltVm5hVzRBQUFObGJuWUxkMkZ6YlY5dmJsOTFjbXdBQVFObGJuWU9kMkZ6YlY5dmJsOXpkR0YwZFhNQUFRTmxibllVZDJGemJWOXZibDlvWldGa1pYSmZabWxsYkdRQUFRTmxibllVZDJGemJWOXZibDlvWldGa1pYSmZkbUZzZFdVQUFRTmxibllNZDJGemJWOXZibDlpYjJSNUFBRURaVzUyR0hkaGMyMWZiMjVmYldWemMyRm5aVjlqYjIxd2JHVjBaUUFBQTBaRkF3TUVBQUFGQUFBQUFBQUFCUUVGQUFVRkJRQUFCZ0FBQUFBR0JnWUdBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBQUFCQVFjQUFBVUZBd0FCQkFVQmNBRVNFZ1VEQVFBQ0JnZ0Jmd0ZCZ05RRUN3ZlJCU0lHYldWdGIzSjVBZ0FMWDJsdWFYUnBZV3hwZW1VQUNSbGZYMmx1WkdseVpXTjBYMloxYm1OMGFXOXVYM1JoWW14bEFRQUxiR3hvZEhSd1gybHVhWFFBQ2hoc2JHaDBkSEJmYzJodmRXeGtYMnRsWlhCZllXeHBkbVVBUVF4c2JHaDBkSEJmWVd4c2IyTUFEQVp0WVd4c2IyTUFSZ3RzYkdoMGRIQmZabkpsWlFBTkJHWnlaV1VBU0E5c2JHaDBkSEJmWjJWMFgzUjVjR1VBRGhWc2JHaDBkSEJmWjJWMFgyaDBkSEJmYldGcWIzSUFEeFZzYkdoMGRIQmZaMlYwWDJoMGRIQmZiV2x1YjNJQUVCRnNiR2gwZEhCZloyVjBYMjFsZEdodlpBQVJGbXhzYUhSMGNGOW5aWFJmYzNSaGRIVnpYMk52WkdVQUVoSnNiR2gwZEhCZloyVjBYM1Z3WjNKaFpHVUFFd3hzYkdoMGRIQmZjbVZ6WlhRQUZBNXNiR2gwZEhCZlpYaGxZM1YwWlFBVkZHeHNhSFIwY0Y5elpYUjBhVzVuYzE5cGJtbDBBQllOYkd4b2RIUndYMlpwYm1semFBQVhER3hzYUhSMGNGOXdZWFZ6WlFBWURXeHNhSFIwY0Y5eVpYTjFiV1VBR1J0c2JHaDBkSEJmY21WemRXMWxYMkZtZEdWeVgzVndaM0poWkdVQUdoQnNiR2gwZEhCZloyVjBYMlZ5Y201dkFCc1hiR3hvZEhSd1gyZGxkRjlsY25KdmNsOXlaV0Z6YjI0QUhCZHNiR2gwZEhCZmMyVjBYMlZ5Y205eVgzSmxZWE52YmdBZEZHeHNhSFIwY0Y5blpYUmZaWEp5YjNKZmNHOXpBQjRSYkd4b2RIUndYMlZ5Y201dlgyNWhiV1VBSHhKc2JHaDBkSEJmYldWMGFHOWtYMjVoYldVQUlCSnNiR2gwZEhCZmMzUmhkSFZ6WDI1aGJXVUFJUnBzYkdoMGRIQmZjMlYwWDJ4bGJtbGxiblJmYUdWaFpHVnljd0FpSVd4c2FIUjBjRjl6WlhSZmJHVnVhV1Z1ZEY5amFIVnVhMlZrWDJ4bGJtZDBhQUFqSFd4c2FIUjBjRjl6WlhSZmJHVnVhV1Z1ZEY5clpXVndYMkZzYVhabEFDUWtiR3hvZEhSd1gzTmxkRjlzWlc1cFpXNTBYM1J5WVc1elptVnlYMlZ1WTI5a2FXNW5BQ1VZYkd4b2RIUndYMjFsYzNOaFoyVmZibVZsWkhOZlpXOW1BRDhKRndFQVFRRUxFUUVDQXdRRkN3WUhOVGszTVM4dEp5c3BDc0xnQWtVQ0FBc0lBQkNJZ0lDQUFBc1pBQ0FBRU1LQWdJQUFHaUFBSUFJMkFqZ2dBQ0FCT2dBb0N4d0FJQUFnQUM4Qk1pQUFMUUF1SUFBUXdZQ0FnQUFRZ0lDQWdBQUxLZ0VCZjBIQUFCREdnSUNBQUNJQkVNS0FnSUFBR2lBQlFZQ0lnSUFBTmdJNElBRWdBRG9BS0NBQkN3b0FJQUFReUlDQWdBQUxCd0FnQUMwQUtBc0hBQ0FBTFFBcUN3Y0FJQUF0QUNzTEJ3QWdBQzBBS1FzSEFDQUFMd0V5Q3djQUlBQXRBQzRMUlFFRWZ5QUFLQUlZSVFFZ0FDMEFMU0VDSUFBdEFDZ2hBeUFBS0FJNElRUWdBQkRDZ0lDQUFCb2dBQ0FFTmdJNElBQWdBem9BS0NBQUlBSTZBQzBnQUNBQk5nSVlDeEVBSUFBZ0FTQUJJQUpxRU1PQWdJQUFDeEFBSUFCQkFFSGNBQkRNZ0lDQUFCb0xad0VCZjBFQUlRRUNRQ0FBS0FJTURRQUNRQUpBQWtBQ1FDQUFMUUF2RGdNQkFBTUNDeUFBS0FJNElnRkZEUUFnQVNnQ0xDSUJSUTBBSUFBZ0FSR0FnSUNBQUFBaUFRMERDMEVBRHdzUXlvQ0FnQUFBQ3lBQVFjT1dnSUFBTmdJUVFRNGhBUXNnQVFzZUFBSkFJQUFvQWd3TkFDQUFRZEdiZ0lBQU5nSVFJQUJCRlRZQ0RBc0xGZ0FDUUNBQUtBSU1RUlZIRFFBZ0FFRUFOZ0lNQ3dzV0FBSkFJQUFvQWd4QkZrY05BQ0FBUVFBMkFnd0xDd2NBSUFBb0Fnd0xCd0FnQUNnQ0VBc0pBQ0FBSUFFMkFoQUxCd0FnQUNnQ0ZBc2lBQUpBSUFCQkpFa05BQkRLZ0lDQUFBQUxJQUJCQW5SQm9MT0FnQUJxS0FJQUN5SUFBa0FnQUVFdVNRMEFFTXFBZ0lBQUFBc2dBRUVDZEVHd3RJQ0FBR29vQWdBTDdnc0JBWDlCNjZpQWdBQWhBUUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBSUFCQm5IOXFEdlFEWTJJQUFXRmhZV0ZoWVFJREJBVmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoQmdjSUNRb0xEQTBPRDJGaFlXRmhFR0ZoWVdGaFlXRmhZV0ZoRVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVJJVEZCVVdGeGdaR2h0aFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaEhCMGVIeUFoSWlNa0pTWW5LQ2txS3l3dExpOHdNVEl6TkRVMllUYzRPVHBoWVdGaFlXRmhZVHRoWVdFOFlXRmhZVDArUDJGaFlXRmhZV0ZoUUdGaFFXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZVUpEUkVWR1IwaEpTa3RNVFU1UFVGRlNVMkZoWVdGaFlXRmhWRlZXVjFoWldsdGhYRjFoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGZVlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFgyQmhDMEhocDRDQUFBOExRYVNoZ0lBQUR3dEJ5NnlBZ0FBUEMwSCtzWUNBQUE4TFFjQ2tnSUFBRHd0QnE2U0FnQUFQQzBHTnFJQ0FBQThMUWVLbWdJQUFEd3RCZ0xDQWdBQVBDMEc1cjRDQUFBOExRZGVrZ0lBQUR3dEI3NStBZ0FBUEMwSGhuNENBQUE4TFFmcWZnSUFBRHd0QjhxQ0FnQUFQQzBHb3I0Q0FBQThMUWE2eWdJQUFEd3RCaUxDQWdBQVBDMEhzcDRDQUFBOExRWUtpZ0lBQUR3dEJqcDJBZ0FBUEMwSFFyb0NBQUE4TFFjcWpnSUFBRHd0QnhiS0FnQUFQQzBIZm5JQ0FBQThMUWRLY2dJQUFEd3RCeEtDQWdBQVBDMEhYb0lDQUFBOExRYUtmZ0lBQUR3dEI3YTZBZ0FBUEMwR3JzSUNBQUE4TFFkU2xnSUFBRHd0QnpLNkFnQUFQQzBINnJvQ0FBQThMUWZ5cmdJQUFEd3RCMHJDQWdBQVBDMEh4bllDQUFBOExRYnVnZ0lBQUR3dEI5NnVBZ0FBUEMwR1FzWUNBQUE4TFFkZXhnSUFBRHd0Qm9xMkFnQUFQQzBIVXA0Q0FBQThMUWVDcmdJQUFEd3RCbjZ5QWdBQVBDMEhyc1lDQUFBOExRZFdmZ0lBQUR3dEJ5ckdBZ0FBUEMwSGVwWUNBQUE4TFFkU2VnSUFBRHd0QjlKeUFnQUFQQzBHbnNvQ0FBQThMUWJHZGdJQUFEd3RCb0oyQWdBQVBDMEc1c1lDQUFBOExRYnl3Z0lBQUR3dEJrcUdBZ0FBUEMwR3pwb0NBQUE4TFFlbXNnSUFBRHd0QnJKNkFnQUFQQzBIVXE0Q0FBQThMUWZlbWdJQUFEd3RCZ0thQWdBQVBDMEd3b1lDQUFBOExRZjZlZ0lBQUR3dEJqYU9BZ0FBUEMwR0pyWUNBQUE4TFFmZWlnSUFBRHd0Qm9MR0FnQUFQQzBHdW40Q0FBQThMUWNhbGdJQUFEd3RCNko2QWdBQVBDMEdUb29DQUFBOExRY0t2Z0lBQUR3dEJ3NTJBZ0FBUEMwR0xySUNBQUE4TFFlR2RnSUFBRHd0QmphK0FnQUFQQzBIcW9ZQ0FBQThMUWJTdGdJQUFEd3RCMHErQWdBQVBDMEhmc29DQUFBOExRZEt5Z0lBQUR3dEI4TENBZ0FBUEMwR3Bvb0NBQUE4TFFmbWpnSUFBRHd0Qm1aNkFnQUFQQzBHMXJJQ0FBQThMUVp1d2dJQUFEd3RCa3JLQWdBQVBDMEcycTRDQUFBOExRY0tpZ0lBQUR3dEIrTEtBZ0FBUEMwR2VwWUNBQUE4TFFkQ2lnSUFBRHd0QnVwNkFnQUFQQzBHQm5vQ0FBQThMRU1xQWdJQUFBQXRCMXFHQWdBQWhBUXNnQVFzV0FDQUFJQUF0QUMxQi9nRnhJQUZCQUVkeU9nQXRDeGtBSUFBZ0FDMEFMVUg5QVhFZ0FVRUFSMEVCZEhJNkFDMExHUUFnQUNBQUxRQXRRZnNCY1NBQlFRQkhRUUowY2pvQUxRc1pBQ0FBSUFBdEFDMUI5d0Z4SUFGQkFFZEJBM1J5T2dBdEN5NEJBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWdBaUJFVU5BQ0FBSUFRUmdJQ0FnQUFBSVFNTElBTUxTUUVDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ0JDSUVSUTBBSUFBZ0FTQUNJQUZySUFRUmdZQ0FnQUFBSWdOQmYwY05BQ0FBUWNhUmdJQUFOZ0lRUVJnaEF3c2dBd3N1QVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSXdJZ1JGRFFBZ0FDQUVFWUNBZ0lBQUFDRURDeUFEQzBrQkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9BZ2dpQkVVTkFDQUFJQUVnQWlBQmF5QUVFWUdBZ0lBQUFDSURRWDlIRFFBZ0FFSDJpb0NBQURZQ0VFRVlJUU1MSUFNTExnRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDTkNJRVJRMEFJQUFnQkJHQWdJQ0FBQUFoQXdzZ0F3dEpBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FJTUlnUkZEUUFnQUNBQklBSWdBV3NnQkJHQmdJQ0FBQUFpQTBGL1J3MEFJQUJCN1pxQWdBQTJBaEJCR0NFREN5QURDeTRCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FqZ2lCRVVOQUNBQUlBUVJnSUNBZ0FBQUlRTUxJQU1MU1FFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NFQ0lFUlEwQUlBQWdBU0FDSUFGcklBUVJnWUNBZ0FBQUlnTkJmMGNOQUNBQVFaV1FnSUFBTmdJUVFSZ2hBd3NnQXdzdUFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUk4SWdSRkRRQWdBQ0FFRVlDQWdJQUFBQ0VEQ3lBREMwa0JBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWhRaUJFVU5BQ0FBSUFFZ0FpQUJheUFFRVlHQWdJQUFBQ0lEUVg5SERRQWdBRUdxbTRDQUFEWUNFRUVZSVFNTElBTUxMZ0VDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ1FDSUVSUTBBSUFBZ0JCR0FnSUNBQUFBaEF3c2dBd3RKQVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSVlJZ1JGRFFBZ0FDQUJJQUlnQVdzZ0JCR0JnSUNBQUFBaUEwRi9SdzBBSUFCQjdaT0FnQUEyQWhCQkdDRURDeUFEQ3k0QkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9Ba1FpQkVVTkFDQUFJQVFSZ0lDQWdBQUFJUU1MSUFNTExnRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDSkNJRVJRMEFJQUFnQkJHQWdJQ0FBQUFoQXdzZ0F3c3VBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FJc0lnUkZEUUFnQUNBRUVZQ0FnSUFBQUNFREN5QURDMGtCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FpZ2lCRVVOQUNBQUlBRWdBaUFCYXlBRUVZR0FnSUFBQUNJRFFYOUhEUUFnQUVIMmlJQ0FBRFlDRUVFWUlRTUxJQU1MTGdFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NVQ0lFUlEwQUlBQWdCQkdBZ0lDQUFBQWhBd3NnQXd0SkFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUljSWdSRkRRQWdBQ0FCSUFJZ0FXc2dCQkdCZ0lDQUFBQWlBMEYvUncwQUlBQkJ3cG1BZ0FBMkFoQkJHQ0VEQ3lBREN5NEJBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWtnaUJFVU5BQ0FBSUFRUmdJQ0FnQUFBSVFNTElBTUxTUUVDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ0lDSUVSUTBBSUFBZ0FTQUNJQUZySUFRUmdZQ0FnQUFBSWdOQmYwY05BQ0FBUVpTVWdJQUFOZ0lRUVJnaEF3c2dBd3N1QVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSk1JZ1JGRFFBZ0FDQUVFWUNBZ0lBQUFDRURDeUFEQ3k0QkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9BbFFpQkVVTkFDQUFJQVFSZ0lDQWdBQUFJUU1MSUFNTExnRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDV0NJRVJRMEFJQUFnQkJHQWdJQ0FBQUFoQXdzZ0F3dEZBUUYvQWtBQ1FDQUFMd0V3UVJSeFFSUkhEUUJCQVNFRElBQXRBQ2hCQVVZTkFTQUFMd0V5UWVVQVJpRUREQUVMSUFBdEFDbEJCVVloQXdzZ0FDQURPZ0F1UVFBTC9nRUJBMzlCQVNFREFrQWdBQzhCTUNJRVFRaHhEUUFnQUNrRElFSUFVaUVEQ3dKQUFrQWdBQzBBTGtVTkFFRUJJUVVnQUMwQUtVRUZSZzBCUVFFaEJTQUVRY0FBY1VVZ0EzRkJBVWNOQVF0QkFDRUZJQVJCd0FCeERRQkJBaUVGSUFSQi8vOERjU0lEUVFoeERRQUNRQ0FEUVlBRWNVVU5BQUpBSUFBdEFDaEJBVWNOQUNBQUxRQXRRUXB4RFFCQkJROExRUVFQQ3dKQUlBTkJJSEVOQUFKQUlBQXRBQ2hCQVVZTkFDQUFMd0V5UWYvL0EzRWlBRUdjZjJwQjVBQkpEUUFnQUVITUFVWU5BQ0FBUWJBQ1JnMEFRUVFoQlNBRVFTaHhSUTBDSUFOQmlBUnhRWUFFUmcwQ0MwRUFEd3RCQUVFRElBQXBBeUJRR3lFRkN5QUZDMklCQW45QkFDRUJBa0FnQUMwQUtFRUJSZzBBSUFBdkFUSkIvLzhEY1NJQ1FaeC9ha0hrQUVrTkFDQUNRY3dCUmcwQUlBSkJzQUpHRFFBZ0FDOEJNQ0lBUWNBQWNRMEFRUUVoQVNBQVFZZ0VjVUdBQkVZTkFDQUFRU2h4UlNFQkN5QUJDNmNCQVFOL0FrQUNRQUpBSUFBdEFDcEZEUUFnQUMwQUswVU5BRUVBSVFNZ0FDOEJNQ0lFUVFKeFJRMEJEQUlMUVFBaEF5QUFMd0V3SWdSQkFYRkZEUUVMUVFFaEF5QUFMUUFvUVFGR0RRQWdBQzhCTWtILy93TnhJZ1ZCbkg5cVFlUUFTUTBBSUFWQnpBRkdEUUFnQlVHd0FrWU5BQ0FFUWNBQWNRMEFRUUFoQXlBRVFZZ0VjVUdBQkVZTkFDQUVRU2h4UVFCSElRTUxJQUJCQURzQk1DQUFRUUE2QUM4Z0F3dVpBUUVDZndKQUFrQUNRQ0FBTFFBcVJRMEFJQUF0QUN0RkRRQkJBQ0VCSUFBdkFUQWlBa0VDY1VVTkFRd0NDMEVBSVFFZ0FDOEJNQ0lDUVFGeFJRMEJDMEVCSVFFZ0FDMEFLRUVCUmcwQUlBQXZBVEpCLy84RGNTSUFRWngvYWtIa0FFa05BQ0FBUWN3QlJnMEFJQUJCc0FKR0RRQWdBa0hBQUhFTkFFRUFJUUVnQWtHSUJIRkJnQVJHRFFBZ0FrRW9jVUVBUnlFQkN5QUJDMWtBSUFCQkdHcENBRGNEQUNBQVFnQTNBd0FnQUVFNGFrSUFOd01BSUFCQk1HcENBRGNEQUNBQVFTaHFRZ0EzQXdBZ0FFRWdha0lBTndNQUlBQkJFR3BDQURjREFDQUFRUWhxUWdBM0F3QWdBRUhkQVRZQ0hFRUFDM3NCQVg4Q1FDQUFLQUlNSWdNTkFBSkFJQUFvQWdSRkRRQWdBQ0FCTmdJRUN3SkFJQUFnQVNBQ0VNU0FnSUFBSWdNTkFDQUFLQUlNRHdzZ0FDQUROZ0ljUVFBaEF5QUFLQUlFSWdGRkRRQWdBQ0FCSUFJZ0FDZ0NDQkdCZ0lDQUFBQWlBVVVOQUNBQUlBSTJBaFFnQUNBQk5nSU1JQUVoQXdzZ0F3dms4d0VERG44RGZnUi9JNENBZ0lBQVFSQnJJZ01rZ0lDQWdBQWdBU0VFSUFFaEJTQUJJUVlnQVNFSElBRWhDQ0FCSVFrZ0FTRUtJQUVoQ3lBQklRd2dBU0VOSUFFaERpQUJJUThDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FnQUNnQ0hDSVFRWDlxRHQwQjJnRUIyUUVDQXdRRkJnY0lDUW9MREEwTzJBRVBFTmNCRVJMV0FSTVVGUllYR0JrYUcrQUIzd0VjSFI3VkFSOGdJU0lqSkNYVUFTWW5LQ2txS3l6VEFkSUJMUzdSQWRBQkx6QXhNak0wTlRZM09EazZPenc5UGo5QVFVSkRSRVZHMndGSFNFbEt6d0hPQVV2TkFVek1BVTFPVDFCUlVsTlVWVlpYV0ZsYVcxeGRYbDlnWVdKalpHVm1aMmhwYW10c2JXNXZjSEZ5YzNSMWRuZDRlWHA3ZkgxK2Y0QUJnUUdDQVlNQmhBR0ZBWVlCaHdHSUFZa0JpZ0dMQVl3QmpRR09BWThCa0FHUkFaSUJrd0dVQVpVQmxnR1hBWmdCbVFHYUFac0JuQUdkQVo0Qm53R2dBYUVCb2dHakFhUUJwUUdtQWFjQnFBR3BBYW9CcXdHc0FhMEJyZ0d2QWJBQnNRR3lBYk1CdEFHMUFiWUJ0d0hMQWNvQnVBSEpBYmtCeUFHNkFic0J2QUc5QWI0QnZ3SEFBY0VCd2dIREFjUUJ4UUhHQVFEY0FRdEJBQ0VRRE1ZQkMwRU9JUkFNeFFFTFFRMGhFQXpFQVF0QkR5RVFETU1CQzBFUUlSQU13Z0VMUVJNaEVBekJBUXRCRkNFUURNQUJDMEVWSVJBTXZ3RUxRUlloRUF5K0FRdEJGeUVRREwwQkMwRVlJUkFNdkFFTFFSa2hFQXk3QVF0QkdpRVFETG9CQzBFYklSQU11UUVMUVJ3aEVBeTRBUXRCQ0NFUURMY0JDMEVkSVJBTXRnRUxRU0FoRUF5MUFRdEJIeUVRRExRQkMwRUhJUkFNc3dFTFFTRWhFQXl5QVF0QklpRVFETEVCQzBFZUlSQU1zQUVMUVNNaEVBeXZBUXRCRWlFUURLNEJDMEVSSVJBTXJRRUxRU1FoRUF5c0FRdEJKU0VRREtzQkMwRW1JUkFNcWdFTFFTY2hFQXlwQVF0Qnd3RWhFQXlvQVF0QktTRVFES2NCQzBFcklSQU1wZ0VMUVN3aEVBeWxBUXRCTFNFUURLUUJDMEV1SVJBTW93RUxRUzhoRUF5aUFRdEJ4QUVoRUF5aEFRdEJNQ0VRREtBQkMwRTBJUkFNbndFTFFRd2hFQXllQVF0Qk1TRVFESjBCQzBFeUlSQU1uQUVMUVRNaEVBeWJBUXRCT1NFUURKb0JDMEUxSVJBTW1RRUxRY1VCSVJBTW1BRUxRUXNoRUF5WEFRdEJPaUVRREpZQkMwRTJJUkFNbFFFTFFRb2hFQXlVQVF0Qk55RVFESk1CQzBFNElSQU1rZ0VMUVR3aEVBeVJBUXRCT3lFUURKQUJDMEU5SVJBTWp3RUxRUWtoRUF5T0FRdEJLQ0VRREkwQkMwRStJUkFNakFFTFFUOGhFQXlMQVF0QndBQWhFQXlLQVF0QndRQWhFQXlKQVF0QndnQWhFQXlJQVF0Qnd3QWhFQXlIQVF0QnhBQWhFQXlHQVF0QnhRQWhFQXlGQVF0QnhnQWhFQXlFQVF0QktpRVFESU1CQzBISEFDRVFESUlCQzBISUFDRVFESUVCQzBISkFDRVFESUFCQzBIS0FDRVFESDhMUWNzQUlSQU1mZ3RCelFBaEVBeDlDMEhNQUNFUURId0xRYzRBSVJBTWV3dEJ6d0FoRUF4NkMwSFFBQ0VRREhrTFFkRUFJUkFNZUF0QjBnQWhFQXgzQzBIVEFDRVFESFlMUWRRQUlSQU1kUXRCMWdBaEVBeDBDMEhWQUNFUURITUxRUVloRUF4eUMwSFhBQ0VRREhFTFFRVWhFQXh3QzBIWUFDRVFERzhMUVFRaEVBeHVDMEhaQUNFUURHMExRZG9BSVJBTWJBdEIyd0FoRUF4ckMwSGNBQ0VRREdvTFFRTWhFQXhwQzBIZEFDRVFER2dMUWQ0QUlSQU1ad3RCM3dBaEVBeG1DMEhoQUNFUURHVUxRZUFBSVJBTVpBdEI0Z0FoRUF4akMwSGpBQ0VRREdJTFFRSWhFQXhoQzBIa0FDRVFER0FMUWVVQUlSQU1Yd3RCNWdBaEVBeGVDMEhuQUNFUURGMExRZWdBSVJBTVhBdEI2UUFoRUF4YkMwSHFBQ0VRREZvTFFlc0FJUkFNV1F0QjdBQWhFQXhZQzBIdEFDRVFERmNMUWU0QUlSQU1WZ3RCN3dBaEVBeFZDMEh3QUNFUURGUUxRZkVBSVJBTVV3dEI4Z0FoRUF4U0MwSHpBQ0VRREZFTFFmUUFJUkFNVUF0QjlRQWhFQXhQQzBIMkFDRVFERTRMUWZjQUlSQU1UUXRCK0FBaEVBeE1DMEg1QUNFUURFc0xRZm9BSVJBTVNndEIrd0FoRUF4SkMwSDhBQ0VRREVnTFFmMEFJUkFNUnd0Qi9nQWhFQXhHQzBIL0FDRVFERVVMUVlBQklSQU1SQXRCZ1FFaEVBeERDMEdDQVNFUURFSUxRWU1CSVJBTVFRdEJoQUVoRUF4QUMwR0ZBU0VRREQ4TFFZWUJJUkFNUGd0Qmh3RWhFQXc5QzBHSUFTRVFERHdMUVlrQklSQU1Pd3RCaWdFaEVBdzZDMEdMQVNFUUREa0xRWXdCSVJBTU9BdEJqUUVoRUF3M0MwR09BU0VRRERZTFFZOEJJUkFNTlF0QmtBRWhFQXcwQzBHUkFTRVFERE1MUVpJQklSQU1NZ3RCa3dFaEVBd3hDMEdVQVNFUUREQUxRWlVCSVJBTUx3dEJsZ0VoRUF3dUMwR1hBU0VRREMwTFFaZ0JJUkFNTEF0Qm1RRWhFQXdyQzBHYUFTRVFEQ29MUVpzQklSQU1LUXRCbkFFaEVBd29DMEdkQVNFUURDY0xRWjRCSVJBTUpndEJud0VoRUF3bEMwR2dBU0VRRENRTFFhRUJJUkFNSXd0Qm9nRWhFQXdpQzBHakFTRVFEQ0VMUWFRQklSQU1JQXRCcFFFaEVBd2ZDMEdtQVNFUURCNExRYWNCSVJBTUhRdEJxQUVoRUF3Y0MwR3BBU0VRREJzTFFhb0JJUkFNR2d0QnF3RWhFQXdaQzBHc0FTRVFEQmdMUWEwQklSQU1Gd3RCcmdFaEVBd1dDMEVCSVJBTUZRdEJyd0VoRUF3VUMwR3dBU0VRREJNTFFiRUJJUkFNRWd0QnN3RWhFQXdSQzBHeUFTRVFEQkFMUWJRQklSQU1Ed3RCdFFFaEVBd09DMEcyQVNFUURBMExRYmNCSVJBTURBdEJ1QUVoRUF3TEMwRzVBU0VRREFvTFFib0JJUkFNQ1F0QnV3RWhFQXdJQzBIR0FTRVFEQWNMUWJ3QklSQU1CZ3RCdlFFaEVBd0ZDMEcrQVNFUURBUUxRYjhCSVJBTUF3dEJ3QUVoRUF3Q0MwSENBU0VRREFFTFFjRUJJUkFMQTBBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FDQVFEc2NCQUFFQ0F3UUZCZ2NJQ1FvTERBME9EeEFSRWhNVUZSWVhHQmthR3h3ZUh5QWhJeVVvUDBCQlJFVkdSMGhKU2t0TVRVOVFVVkpUM2dOWFdWdGNYV0JpWldabmFHbHFhMnh0YjNCeGNuTjBkWFozZUhsNmUzeDlmb0FCZ2dHRkFZWUJod0dKQVlzQmpBR05BWTRCandHUUFaRUJsQUdWQVpZQmx3R1lBWmtCbWdHYkFad0JuUUdlQVo4Qm9BR2hBYUlCb3dHa0FhVUJwZ0duQWFnQnFRR3FBYXNCckFHdEFhNEJyd0d3QWJFQnNnR3pBYlFCdFFHMkFiY0J1QUc1QWJvQnV3RzhBYjBCdmdHL0FjQUJ3UUhDQWNNQnhBSEZBY1lCeHdISUFja0J5Z0hMQWN3QnpRSE9BYzhCMEFIUkFkSUIwd0hVQWRVQjFnSFhBZGdCMlFIYUFkc0IzQUhkQWQ0QjRBSGhBZUlCNHdIa0FlVUI1Z0huQWVnQjZRSHFBZXNCN0FIdEFlNEI3d0h3QWZFQjhnSHpBWmtDcEFLd0F2NEMvZ0lMSUFFaUJDQUNSdzN6QVVIZEFTRVFEUDhEQ3lBQkloQWdBa2NOM1FGQnd3RWhFQXorQXdzZ0FTSUJJQUpIRFpBQlFmY0FJUkFNL1FNTElBRWlBU0FDUncyR0FVSHZBQ0VRRFB3REN5QUJJZ0VnQWtjTmYwSHFBQ0VRRFBzREN5QUJJZ0VnQWtjTmUwSG9BQ0VRRFBvREN5QUJJZ0VnQWtjTmVFSG1BQ0VRRFBrREN5QUJJZ0VnQWtjTkdrRVlJUkFNK0FNTElBRWlBU0FDUncwVVFSSWhFQXozQXdzZ0FTSUJJQUpIRFZsQnhRQWhFQXoyQXdzZ0FTSUJJQUpIRFVwQlB5RVFEUFVEQ3lBQklnRWdBa2NOU0VFOElSQU05QU1MSUFFaUFTQUNSdzFCUVRFaEVBenpBd3NnQUMwQUxrRUJSZzNyQXd5SEFnc2dBQ0FCSWdFZ0FoREFnSUNBQUVFQlJ3M21BU0FBUWdBM0F5QU01d0VMSUFBZ0FTSUJJQUlRdElDQWdBQWlFQTNuQVNBQklRRU05UUlMQWtBZ0FTSUJJQUpIRFFCQkJpRVFEUEFEQ3lBQUlBRkJBV29pQVNBQ0VMdUFnSUFBSWhBTjZBRWdBU0VCRERFTElBQkNBRGNESUVFU0lSQU0xUU1MSUFFaUVDQUNSdzByUVIwaEVBenRBd3NDUUNBQklnRWdBa1lOQUNBQlFRRnFJUUZCRUNFUUROUURDMEVISVJBTTdBTUxJQUJDQUNBQUtRTWdJaEVnQWlBQkloQnJyU0lTZlNJVElCTWdFVlliTndNZ0lCRWdFbFlpRkVVTjVRRkJDQ0VRRE9zREN3SkFJQUVpQVNBQ1JnMEFJQUJCaVlDQWdBQTJBZ2dnQUNBQk5nSUVJQUVoQVVFVUlSQU0wZ01MUVFraEVBenFBd3NnQVNFQklBQXBBeUJRRGVRQklBRWhBUXp5QWdzQ1FDQUJJZ0VnQWtjTkFFRUxJUkFNNlFNTElBQWdBVUVCYWlJQklBSVF0b0NBZ0FBaUVBM2xBU0FCSVFFTThnSUxJQUFnQVNJQklBSVF1SUNBZ0FBaUVBM2xBU0FCSVFFTThnSUxJQUFnQVNJQklBSVF1SUNBZ0FBaUVBM21BU0FCSVFFTURRc2dBQ0FCSWdFZ0FoQzZnSUNBQUNJUURlY0JJQUVoQVF6d0Fnc0NRQ0FCSWdFZ0FrY05BRUVQSVJBTTVRTUxJQUV0QUFBaUVFRTdSZzBJSUJCQkRVY042QUVnQVVFQmFpRUJETzhDQ3lBQUlBRWlBU0FDRUxxQWdJQUFJaEFONkFFZ0FTRUJEUElDQ3dOQUFrQWdBUzBBQUVId3RZQ0FBR290QUFBaUVFRUJSZzBBSUJCQkFrY042d0VnQUNnQ0JDRVFJQUJCQURZQ0JDQUFJQkFnQVVFQmFpSUJFTG1BZ0lBQUloQU42Z0VnQVNFQkRQUUNDeUFCUVFGcUlnRWdBa2NOQUF0QkVpRVFET0lEQ3lBQUlBRWlBU0FDRUxxQWdJQUFJaEFONlFFZ0FTRUJEQW9MSUFFaUFTQUNSdzBHUVJzaEVBemdBd3NDUUNBQklnRWdBa2NOQUVFV0lSQU00QU1MSUFCQmlvQ0FnQUEyQWdnZ0FDQUJOZ0lFSUFBZ0FTQUNFTGlBZ0lBQUloQU42Z0VnQVNFQlFTQWhFQXpHQXdzQ1FDQUJJZ0VnQWtZTkFBTkFBa0FnQVMwQUFFSHd0NENBQUdvdEFBQWlFRUVDUmcwQUFrQWdFRUYvYWc0RTVRSHNBUURyQWV3QkN5QUJRUUZxSVFGQkNDRVFETWdEQ3lBQlFRRnFJZ0VnQWtjTkFBdEJGU0VRRE44REMwRVZJUkFNM2dNTEEwQUNRQ0FCTFFBQVFmQzVnSUFBYWkwQUFDSVFRUUpHRFFBZ0VFRi9hZzRFM2dIc0FlQUI2d0hzQVFzZ0FVRUJhaUlCSUFKSERRQUxRUmdoRUF6ZEF3c0NRQ0FCSWdFZ0FrWU5BQ0FBUVl1QWdJQUFOZ0lJSUFBZ0FUWUNCQ0FCSVFGQkJ5RVFETVFEQzBFWklSQU0zQU1MSUFGQkFXb2hBUXdDQ3dKQUlBRWlGQ0FDUncwQVFSb2hFQXpiQXdzZ0ZDRUJBa0FnRkMwQUFFRnphZzRVM1FMdUF1NEM3Z0x1QXU0QzdnTHVBdTRDN2dMdUF1NEM3Z0x1QXU0QzdnTHVBdTRDN2dJQTdnSUxRUUFoRUNBQVFRQTJBaHdnQUVHdmk0Q0FBRFlDRUNBQVFRSTJBZ3dnQUNBVVFRRnFOZ0lVRE5vREN3SkFJQUV0QUFBaUVFRTdSZzBBSUJCQkRVY042QUVnQVVFQmFpRUJET1VDQ3lBQlFRRnFJUUVMUVNJaEVBeS9Bd3NDUUNBQkloQWdBa2NOQUVFY0lSQU0yQU1MUWdBaEVTQVFJUUVnRUMwQUFFRlFhZzQzNXdIbUFRRUNBd1FGQmdjSUFBQUFBQUFBQUFrS0N3d05EZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFEeEFSRWhNVUFBdEJIaUVRREwwREMwSUNJUkVNNVFFTFFnTWhFUXprQVF0Q0JDRVJET01CQzBJRklSRU00Z0VMUWdZaEVRemhBUXRDQnlFUkRPQUJDMElJSVJFTTN3RUxRZ2toRVF6ZUFRdENDaUVSRE4wQkMwSUxJUkVNM0FFTFFnd2hFUXpiQVF0Q0RTRVJETm9CQzBJT0lSRU0yUUVMUWc4aEVRellBUXRDQ2lFUkROY0JDMElMSVJFTTFnRUxRZ3doRVF6VkFRdENEU0VSRE5RQkMwSU9JUkVNMHdFTFFnOGhFUXpTQVF0Q0FDRVJBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUNBUUxRQUFRVkJxRGpmbEFlUUJBQUVDQXdRRkJnZm1BZVlCNWdIbUFlWUI1Z0htQVFnSkNnc01EZVlCNWdIbUFlWUI1Z0htQWVZQjVnSG1BZVlCNWdIbUFlWUI1Z0htQWVZQjVnSG1BZVlCNWdIbUFlWUI1Z0htQWVZQjVnRU9EeEFSRWhQbUFRdENBaUVSRE9RQkMwSURJUkVNNHdFTFFnUWhFUXppQVF0Q0JTRVJET0VCQzBJR0lSRU00QUVMUWdjaEVRemZBUXRDQ0NFUkRONEJDMElKSVJFTTNRRUxRZ29oRVF6Y0FRdENDeUVSRE5zQkMwSU1JUkVNMmdFTFFnMGhFUXpaQVF0Q0RpRVJETmdCQzBJUElSRU0xd0VMUWdvaEVReldBUXRDQ3lFUkROVUJDMElNSVJFTTFBRUxRZzBoRVF6VEFRdENEaUVSRE5JQkMwSVBJUkVNMFFFTElBQkNBQ0FBS1FNZ0loRWdBaUFCSWhCcnJTSVNmU0lUSUJNZ0VWWWJOd01nSUJFZ0VsWWlGRVVOMGdGQkh5RVFETUFEQ3dKQUlBRWlBU0FDUmcwQUlBQkJpWUNBZ0FBMkFnZ2dBQ0FCTmdJRUlBRWhBVUVrSVJBTXB3TUxRU0FoRUF5L0F3c2dBQ0FCSWhBZ0FoQytnSUNBQUVGL2FnNEZ0Z0VBeFFJQjBRSFNBUXRCRVNFUURLUURDeUFBUVFFNkFDOGdFQ0VCRExzREN5QUJJZ0VnQWtjTjBnRkJKQ0VRRExzREN5QUJJZzBnQWtjTkhrSEdBQ0VRRExvREN5QUFJQUVpQVNBQ0VMS0FnSUFBSWhBTjFBRWdBU0VCRExVQkN5QUJJaEFnQWtjTkprSFFBQ0VRRExnREN3SkFJQUVpQVNBQ1J3MEFRU2doRUF5NEF3c2dBRUVBTmdJRUlBQkJqSUNBZ0FBMkFnZ2dBQ0FCSUFFUXNZQ0FnQUFpRUEzVEFTQUJJUUVNMkFFTEFrQWdBU0lRSUFKSERRQkJLU0VRRExjREN5QVFMUUFBSWdGQklFWU5GQ0FCUVFsSERkTUJJQkJCQVdvaEFRd1ZDd0pBSUFFaUFTQUNSZzBBSUFGQkFXb2hBUXdYQzBFcUlSQU10UU1MQWtBZ0FTSVFJQUpIRFFCQkt5RVFETFVEQ3dKQUlCQXRBQUFpQVVFSlJnMEFJQUZCSUVjTjFRRUxJQUF0QUN4QkNFWU4wd0VnRUNFQkRKRURDd0pBSUFFaUFTQUNSdzBBUVN3aEVBeTBBd3NnQVMwQUFFRUtSdzNWQVNBQlFRRnFJUUVNeVFJTElBRWlEaUFDUnczVkFVRXZJUkFNc2dNTEEwQUNRQ0FCTFFBQUloQkJJRVlOQUFKQUlCQkJkbW9PQkFEY0Fkd0JBTm9CQ3lBQklRRU00QUVMSUFGQkFXb2lBU0FDUncwQUMwRXhJUkFNc1FNTFFUSWhFQ0FCSWhRZ0FrWU5zQU1nQWlBVWF5QUFLQUlBSWdGcUlSVWdGQ0FCYTBFRGFpRVdBa0FEUUNBVUxRQUFJaGRCSUhJZ0Z5QVhRYjkvYWtIL0FYRkJHa2tiUWY4QmNTQUJRZkM3Z0lBQWFpMEFBRWNOQVFKQUlBRkJBMGNOQUVFR0lRRU1sZ01MSUFGQkFXb2hBU0FVUVFGcUloUWdBa2NOQUFzZ0FDQVZOZ0lBRExFREN5QUFRUUEyQWdBZ0ZDRUJETmtCQzBFeklSQWdBU0lVSUFKR0RhOERJQUlnRkdzZ0FDZ0NBQ0lCYWlFVklCUWdBV3RCQ0dvaEZnSkFBMEFnRkMwQUFDSVhRU0J5SUJjZ0YwRy9mMnBCL3dGeFFScEpHMEgvQVhFZ0FVSDB1NENBQUdvdEFBQkhEUUVDUUNBQlFRaEhEUUJCQlNFQkRKVURDeUFCUVFGcUlRRWdGRUVCYWlJVUlBSkhEUUFMSUFBZ0ZUWUNBQXl3QXdzZ0FFRUFOZ0lBSUJRaEFRellBUXRCTkNFUUlBRWlGQ0FDUmcydUF5QUNJQlJySUFBb0FnQWlBV29oRlNBVUlBRnJRUVZxSVJZQ1FBTkFJQlF0QUFBaUYwRWdjaUFYSUJkQnYzOXFRZjhCY1VFYVNSdEIvd0Z4SUFGQjBNS0FnQUJxTFFBQVJ3MEJBa0FnQVVFRlJ3MEFRUWNoQVF5VUF3c2dBVUVCYWlFQklCUkJBV29pRkNBQ1J3MEFDeUFBSUJVMkFnQU1yd01MSUFCQkFEWUNBQ0FVSVFFTTF3RUxBa0FnQVNJQklBSkdEUUFEUUFKQUlBRXRBQUJCZ0w2QWdBQnFMUUFBSWhCQkFVWU5BQ0FRUVFKR0RRb2dBU0VCRE4wQkN5QUJRUUZxSWdFZ0FrY05BQXRCTUNFUURLNERDMEV3SVJBTXJRTUxBa0FnQVNJQklBSkdEUUFEUUFKQUlBRXRBQUFpRUVFZ1JnMEFJQkJCZG1vT0JOa0IyZ0hhQWRrQjJnRUxJQUZCQVdvaUFTQUNSdzBBQzBFNElSQU1yUU1MUVRnaEVBeXNBd3NEUUFKQUlBRXRBQUFpRUVFZ1JnMEFJQkJCQ1VjTkF3c2dBVUVCYWlJQklBSkhEUUFMUVR3aEVBeXJBd3NEUUFKQUlBRXRBQUFpRUVFZ1JnMEFBa0FDUUNBUVFYWnFEZ1RhQVFFQjJnRUFDeUFRUVN4R0Rkc0JDeUFCSVFFTUJBc2dBVUVCYWlJQklBSkhEUUFMUVQ4aEVBeXFBd3NnQVNFQkROc0JDMEhBQUNFUUlBRWlGQ0FDUmcyb0F5QUNJQlJySUFBb0FnQWlBV29oRmlBVUlBRnJRUVpxSVJjQ1FBTkFJQlF0QUFCQklISWdBVUdBd0lDQUFHb3RBQUJIRFFFZ0FVRUdSZzJPQXlBQlFRRnFJUUVnRkVFQmFpSVVJQUpIRFFBTElBQWdGallDQUF5cEF3c2dBRUVBTmdJQUlCUWhBUXRCTmlFUURJNERDd0pBSUFFaUR5QUNSdzBBUWNFQUlSQU1wd01MSUFCQmpJQ0FnQUEyQWdnZ0FDQVBOZ0lFSUE4aEFTQUFMUUFzUVg5cURnVE5BZFVCMXdIWkFZY0RDeUFCUVFGcUlRRU16QUVMQWtBZ0FTSUJJQUpHRFFBRFFBSkFJQUV0QUFBaUVFRWdjaUFRSUJCQnYzOXFRZjhCY1VFYVNSdEIvd0Z4SWhCQkNVWU5BQ0FRUVNCR0RRQUNRQUpBQWtBQ1FDQVFRWjEvYWc0VEFBTURBd01EQXdNQkF3TURBd01EQXdNREFnTUxJQUZCQVdvaEFVRXhJUkFNa1FNTElBRkJBV29oQVVFeUlSQU1rQU1MSUFGQkFXb2hBVUV6SVJBTWp3TUxJQUVoQVF6UUFRc2dBVUVCYWlJQklBSkhEUUFMUVRVaEVBeWxBd3RCTlNFUURLUURDd0pBSUFFaUFTQUNSZzBBQTBBQ1FDQUJMUUFBUVlDOGdJQUFhaTBBQUVFQlJnMEFJQUVoQVF6VEFRc2dBVUVCYWlJQklBSkhEUUFMUVQwaEVBeWtBd3RCUFNFUURLTURDeUFBSUFFaUFTQUNFTENBZ0lBQUloQU4xZ0VnQVNFQkRBRUxJQkJCQVdvaEFRdEJQQ0VRREljREN3SkFJQUVpQVNBQ1J3MEFRY0lBSVJBTW9BTUxBa0FEUUFKQUlBRXRBQUJCZDJvT0dBQUMvZ0wrQW9RRC9nTCtBdjRDL2dMK0F2NEMvZ0wrQXY0Qy9nTCtBdjRDL2dMK0F2NEMvZ0wrQXY0Q0FQNENDeUFCUVFGcUlnRWdBa2NOQUF0QndnQWhFQXlnQXdzZ0FVRUJhaUVCSUFBdEFDMUJBWEZGRGIwQklBRWhBUXRCTENFUURJVURDeUFCSWdFZ0FrY04wd0ZCeEFBaEVBeWRBd3NEUUFKQUlBRXRBQUJCa01DQWdBQnFMUUFBUVFGR0RRQWdBU0VCRExjQ0N5QUJRUUZxSWdFZ0FrY05BQXRCeFFBaEVBeWNBd3NnRFMwQUFDSVFRU0JHRGJNQklCQkJPa2NOZ1FNZ0FDZ0NCQ0VCSUFCQkFEWUNCQ0FBSUFFZ0RSQ3ZnSUNBQUNJQkRkQUJJQTFCQVdvaEFReXpBZ3RCeHdBaEVDQUJJZzBnQWtZTm1nTWdBaUFOYXlBQUtBSUFJZ0ZxSVJZZ0RTQUJhMEVGYWlFWEEwQWdEUzBBQUNJVVFTQnlJQlFnRkVHL2YycEIvd0Z4UVJwSkcwSC9BWEVnQVVHUXdvQ0FBR290QUFCSERZQURJQUZCQlVZTjlBSWdBVUVCYWlFQklBMUJBV29pRFNBQ1J3MEFDeUFBSUJZMkFnQU1tZ01MUWNnQUlSQWdBU0lOSUFKR0Raa0RJQUlnRFdzZ0FDZ0NBQ0lCYWlFV0lBMGdBV3RCQ1dvaEZ3TkFJQTB0QUFBaUZFRWdjaUFVSUJSQnYzOXFRZjhCY1VFYVNSdEIvd0Z4SUFGQmxzS0FnQUJxTFFBQVJ3My9BZ0pBSUFGQkNVY05BRUVDSVFFTTlRSUxJQUZCQVdvaEFTQU5RUUZxSWcwZ0FrY05BQXNnQUNBV05nSUFESmtEQ3dKQUlBRWlEU0FDUncwQVFja0FJUkFNbVFNTEFrQUNRQ0FOTFFBQUlnRkJJSElnQVNBQlFiOS9ha0gvQVhGQkdra2JRZjhCY1VHU2Yyb09Cd0NBQTRBRGdBT0FBNEFEQVlBREN5QU5RUUZxSVFGQlBpRVFESUFEQ3lBTlFRRnFJUUZCUHlFUURQOENDMEhLQUNFUUlBRWlEU0FDUmcyWEF5QUNJQTFySUFBb0FnQWlBV29oRmlBTklBRnJRUUZxSVJjRFFDQU5MUUFBSWhSQklISWdGQ0FVUWI5L2FrSC9BWEZCR2trYlFmOEJjU0FCUWFEQ2dJQUFhaTBBQUVjTi9RSWdBVUVCUmczd0FpQUJRUUZxSVFFZ0RVRUJhaUlOSUFKSERRQUxJQUFnRmpZQ0FBeVhBd3RCeXdBaEVDQUJJZzBnQWtZTmxnTWdBaUFOYXlBQUtBSUFJZ0ZxSVJZZ0RTQUJhMEVPYWlFWEEwQWdEUzBBQUNJVVFTQnlJQlFnRkVHL2YycEIvd0Z4UVJwSkcwSC9BWEVnQVVHaXdvQ0FBR290QUFCSERmd0NJQUZCRGtZTjhBSWdBVUVCYWlFQklBMUJBV29pRFNBQ1J3MEFDeUFBSUJZMkFnQU1sZ01MUWN3QUlSQWdBU0lOSUFKR0RaVURJQUlnRFdzZ0FDZ0NBQ0lCYWlFV0lBMGdBV3RCRDJvaEZ3TkFJQTB0QUFBaUZFRWdjaUFVSUJSQnYzOXFRZjhCY1VFYVNSdEIvd0Z4SUFGQndNS0FnQUJxTFFBQVJ3MzdBZ0pBSUFGQkQwY05BRUVESVFFTThRSUxJQUZCQVdvaEFTQU5RUUZxSWcwZ0FrY05BQXNnQUNBV05nSUFESlVEQzBITkFDRVFJQUVpRFNBQ1JnMlVBeUFDSUExcklBQW9BZ0FpQVdvaEZpQU5JQUZyUVFWcUlSY0RRQ0FOTFFBQUloUkJJSElnRkNBVVFiOS9ha0gvQVhGQkdra2JRZjhCY1NBQlFkRENnSUFBYWkwQUFFY04rZ0lDUUNBQlFRVkhEUUJCQkNFQkRQQUNDeUFCUVFGcUlRRWdEVUVCYWlJTklBSkhEUUFMSUFBZ0ZqWUNBQXlVQXdzQ1FDQUJJZzBnQWtjTkFFSE9BQ0VRREpRREN3SkFBa0FDUUFKQUlBMHRBQUFpQVVFZ2NpQUJJQUZCdjM5cVFmOEJjVUVhU1J0Qi93RnhRWjEvYWc0VEFQMEMvUUw5QXYwQy9RTDlBdjBDL1FMOUF2MEMvUUw5QWdIOUF2MEMvUUlDQS8wQ0N5QU5RUUZxSVFGQndRQWhFQXo5QWdzZ0RVRUJhaUVCUWNJQUlSQU0vQUlMSUExQkFXb2hBVUhEQUNFUURQc0NDeUFOUVFGcUlRRkJ4QUFoRUF6NkFnc0NRQ0FCSWdFZ0FrWU5BQ0FBUVkyQWdJQUFOZ0lJSUFBZ0FUWUNCQ0FCSVFGQnhRQWhFQXo2QWd0Qnp3QWhFQXlTQXdzZ0VDRUJBa0FDUUNBUUxRQUFRWFpxRGdRQnFBS29BZ0NvQWdzZ0VFRUJhaUVCQzBFbklSQU0rQUlMQWtBZ0FTSUJJQUpIRFFCQjBRQWhFQXlSQXdzQ1FDQUJMUUFBUVNCR0RRQWdBU0VCREkwQkN5QUJRUUZxSVFFZ0FDMEFMVUVCY1VVTnh3RWdBU0VCREl3QkN5QUJJaGNnQWtjTnlBRkIwZ0FoRUF5UEF3dEIwd0FoRUNBQkloUWdBa1lOamdNZ0FpQVVheUFBS0FJQUlnRnFJUllnRkNBQmEwRUJhaUVYQTBBZ0ZDMEFBQ0FCUWRiQ2dJQUFhaTBBQUVjTnpBRWdBVUVCUmczSEFTQUJRUUZxSVFFZ0ZFRUJhaUlVSUFKSERRQUxJQUFnRmpZQ0FBeU9Bd3NDUUNBQklnRWdBa2NOQUVIVkFDRVFESTREQ3lBQkxRQUFRUXBIRGN3QklBRkJBV29oQVF6SEFRc0NRQ0FCSWdFZ0FrY05BRUhXQUNFUURJMERDd0pBQWtBZ0FTMEFBRUYyYWc0RUFNMEJ6UUVCelFFTElBRkJBV29oQVF6SEFRc2dBVUVCYWlFQlFjb0FJUkFNOHdJTElBQWdBU0lCSUFJUXJvQ0FnQUFpRUEzTEFTQUJJUUZCelFBaEVBenlBZ3NnQUMwQUtVRWlSZzJGQXd5bUFnc0NRQ0FCSWdFZ0FrY05BRUhiQUNFUURJb0RDMEVBSVJSQkFTRVhRUUVoRmtFQUlSQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQWdBUzBBQUVGUWFnNEsxQUhUQVFBQkFnTUVCUVlJMVFFTFFRSWhFQXdHQzBFRElSQU1CUXRCQkNFUURBUUxRUVVoRUF3REMwRUdJUkFNQWd0QkJ5RVFEQUVMUVFnaEVBdEJBQ0VYUVFBaEZrRUFJUlFNekFFTFFRa2hFRUVCSVJSQkFDRVhRUUFoRmd6TEFRc0NRQ0FCSWdFZ0FrY05BRUhkQUNFUURJa0RDeUFCTFFBQVFTNUhEY3dCSUFGQkFXb2hBUXltQWdzZ0FTSUJJQUpIRGN3QlFkOEFJUkFNaHdNTEFrQWdBU0lCSUFKR0RRQWdBRUdPZ0lDQUFEWUNDQ0FBSUFFMkFnUWdBU0VCUWRBQUlSQU03Z0lMUWVBQUlSQU1oZ01MUWVFQUlSQWdBU0lCSUFKR0RZVURJQUlnQVdzZ0FDZ0NBQ0lVYWlFV0lBRWdGR3RCQTJvaEZ3TkFJQUV0QUFBZ0ZFSGl3b0NBQUdvdEFBQkhEYzBCSUJSQkEwWU56QUVnRkVFQmFpRVVJQUZCQVdvaUFTQUNSdzBBQ3lBQUlCWTJBZ0FNaFFNTFFlSUFJUkFnQVNJQklBSkdEWVFESUFJZ0FXc2dBQ2dDQUNJVWFpRVdJQUVnRkd0QkFtb2hGd05BSUFFdEFBQWdGRUhtd29DQUFHb3RBQUJIRGN3QklCUkJBa1lOemdFZ0ZFRUJhaUVVSUFGQkFXb2lBU0FDUncwQUN5QUFJQlkyQWdBTWhBTUxRZU1BSVJBZ0FTSUJJQUpHRFlNRElBSWdBV3NnQUNnQ0FDSVVhaUVXSUFFZ0ZHdEJBMm9oRndOQUlBRXRBQUFnRkVIcHdvQ0FBR290QUFCSERjc0JJQlJCQTBZTnpnRWdGRUVCYWlFVUlBRkJBV29pQVNBQ1J3MEFDeUFBSUJZMkFnQU1nd01MQWtBZ0FTSUJJQUpIRFFCQjVRQWhFQXlEQXdzZ0FDQUJRUUZxSWdFZ0FoQ29nSUNBQUNJUURjMEJJQUVoQVVIV0FDRVFET2tDQ3dKQUlBRWlBU0FDUmcwQUEwQUNRQ0FCTFFBQUloQkJJRVlOQUFKQUFrQUNRQ0FRUWJoL2FnNExBQUhQQWM4Qnp3SFBBYzhCendIUEFjOEJBczhCQ3lBQlFRRnFJUUZCMGdBaEVBenRBZ3NnQVVFQmFpRUJRZE1BSVJBTTdBSUxJQUZCQVdvaEFVSFVBQ0VRRE9zQ0N5QUJRUUZxSWdFZ0FrY05BQXRCNUFBaEVBeUNBd3RCNUFBaEVBeUJBd3NEUUFKQUlBRXRBQUJCOE1LQWdBQnFMUUFBSWhCQkFVWU5BQ0FRUVg1cURnUFBBZEFCMFFIU0FRc2dBVUVCYWlJQklBSkhEUUFMUWVZQUlSQU1nQU1MQWtBZ0FTSUJJQUpHRFFBZ0FVRUJhaUVCREFNTFFlY0FJUkFNL3dJTEEwQUNRQ0FCTFFBQVFmREVnSUFBYWkwQUFDSVFRUUZHRFFBQ1FDQVFRWDVxRGdUU0FkTUIxQUVBMVFFTElBRWhBVUhYQUNFUURPY0NDeUFCUVFGcUlnRWdBa2NOQUF0QjZBQWhFQXorQWdzQ1FDQUJJZ0VnQWtjTkFFSHBBQ0VRRFA0Q0N3SkFJQUV0QUFBaUVFRjJhZzRhdWdIVkFkVUJ2QUhWQWRVQjFRSFZBZFVCMVFIVkFkVUIxUUhWQWRVQjFRSFZBZFVCMVFIVkFkVUIxUUhLQWRVQjFRRUEwd0VMSUFGQkFXb2hBUXRCQmlFUURPTUNDd05BQWtBZ0FTMEFBRUh3eG9DQUFHb3RBQUJCQVVZTkFDQUJJUUVNbmdJTElBRkJBV29pQVNBQ1J3MEFDMEhxQUNFUURQc0NDd0pBSUFFaUFTQUNSZzBBSUFGQkFXb2hBUXdEQzBIckFDRVFEUG9DQ3dKQUlBRWlBU0FDUncwQVFld0FJUkFNK2dJTElBRkJBV29oQVF3QkN3SkFJQUVpQVNBQ1J3MEFRZTBBSVJBTStRSUxJQUZCQVdvaEFRdEJCQ0VRRE40Q0N3SkFJQUVpRkNBQ1J3MEFRZTRBSVJBTTl3SUxJQlFoQVFKQUFrQUNRQ0FVTFFBQVFmRElnSUFBYWkwQUFFRi9hZzRIMUFIVkFkWUJBSndDQVFMWEFRc2dGRUVCYWlFQkRBb0xJQlJCQVdvaEFRek5BUXRCQUNFUUlBQkJBRFlDSENBQVFadVNnSUFBTmdJUUlBQkJCellDRENBQUlCUkJBV28yQWhRTTlnSUxBa0FEUUFKQUlBRXRBQUJCOE1pQWdBQnFMUUFBSWhCQkJFWU5BQUpBQWtBZ0VFRi9hZzRIMGdIVEFkUUIyUUVBQkFIWkFRc2dBU0VCUWRvQUlSQU00QUlMSUFGQkFXb2hBVUhjQUNFUUROOENDeUFCUVFGcUlnRWdBa2NOQUF0Qjd3QWhFQXoyQWdzZ0FVRUJhaUVCRE1zQkN3SkFJQUVpRkNBQ1J3MEFRZkFBSVJBTTlRSUxJQlF0QUFCQkwwY04xQUVnRkVFQmFpRUJEQVlMQWtBZ0FTSVVJQUpIRFFCQjhRQWhFQXowQWdzQ1FDQVVMUUFBSWdGQkwwY05BQ0FVUVFGcUlRRkIzUUFoRUF6YkFnc2dBVUYyYWlJRVFSWkxEZE1CUVFFZ0JIUkJpWUNBQW5GRkRkTUJETW9DQ3dKQUlBRWlBU0FDUmcwQUlBRkJBV29oQVVIZUFDRVFETm9DQzBIeUFDRVFEUElDQ3dKQUlBRWlGQ0FDUncwQVFmUUFJUkFNOGdJTElCUWhBUUpBSUJRdEFBQkI4TXlBZ0FCcUxRQUFRWDlxRGdQSkFwUUNBTlFCQzBIaEFDRVFETmdDQ3dKQUlBRWlGQ0FDUmcwQUEwQUNRQ0FVTFFBQVFmREtnSUFBYWkwQUFDSUJRUU5HRFFBQ1FDQUJRWDlxRGdMTEFnRFZBUXNnRkNFQlFkOEFJUkFNMmdJTElCUkJBV29pRkNBQ1J3MEFDMEh6QUNFUURQRUNDMEh6QUNFUURQQUNDd0pBSUFFaUFTQUNSZzBBSUFCQmo0Q0FnQUEyQWdnZ0FDQUJOZ0lFSUFFaEFVSGdBQ0VRRE5jQ0MwSDFBQ0VRRE84Q0N3SkFJQUVpQVNBQ1J3MEFRZllBSVJBTTd3SUxJQUJCajRDQWdBQTJBZ2dnQUNBQk5nSUVJQUVoQVF0QkF5RVFETlFDQ3dOQUlBRXRBQUJCSUVjTnd3SWdBVUVCYWlJQklBSkhEUUFMUWZjQUlSQU03QUlMQWtBZ0FTSUJJQUpIRFFCQitBQWhFQXpzQWdzZ0FTMEFBRUVnUnczT0FTQUJRUUZxSVFFTTd3RUxJQUFnQVNJQklBSVFySUNBZ0FBaUVBM09BU0FCSVFFTWpnSUxBa0FnQVNJRUlBSkhEUUJCK2dBaEVBenFBZ3NnQkMwQUFFSE1BRWNOMFFFZ0JFRUJhaUVCUVJNaEVBelBBUXNDUUNBQklnUWdBa2NOQUVIN0FDRVFET2tDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRVnFJUkFEUUNBRUxRQUFJQUZCOE02QWdBQnFMUUFBUnczUUFTQUJRUVZHRGM0QklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFmc0FJUkFNNkFJTEFrQWdBU0lFSUFKSERRQkIvQUFoRUF6b0Fnc0NRQUpBSUFRdEFBQkJ2WDlxRGd3QTBRSFJBZEVCMFFIUkFkRUIwUUhSQWRFQjBRRUIwUUVMSUFSQkFXb2hBVUhtQUNFUURNOENDeUFFUVFGcUlRRkI1d0FoRUF6T0Fnc0NRQ0FCSWdRZ0FrY05BRUg5QUNFUURPY0NDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFKcUlSQUNRQU5BSUFRdEFBQWdBVUh0ejRDQUFHb3RBQUJIRGM4QklBRkJBa1lOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVIOUFDRVFET2NDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUkFoRUF6TUFRc0NRQ0FCSWdRZ0FrY05BRUgrQUNFUURPWUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFWcUlSQUNRQU5BSUFRdEFBQWdBVUgyem9DQUFHb3RBQUJIRGM0QklBRkJCVVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVIK0FDRVFET1lDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUlloRUF6TEFRc0NRQ0FCSWdRZ0FrY05BRUgvQUNFUURPVUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFOcUlSQUNRQU5BSUFRdEFBQWdBVUg4em9DQUFHb3RBQUJIRGMwQklBRkJBMFlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVIL0FDRVFET1VDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUVVoRUF6S0FRc0NRQ0FCSWdRZ0FrY05BRUdBQVNFUURPUUNDeUFFTFFBQVFka0FSdzNMQVNBRVFRRnFJUUZCQ0NFUURNa0JDd0pBSUFFaUJDQUNSdzBBUVlFQklSQU00d0lMQWtBQ1FDQUVMUUFBUWJKL2FnNERBTXdCQWN3QkN5QUVRUUZxSVFGQjZ3QWhFQXpLQWdzZ0JFRUJhaUVCUWV3QUlSQU15UUlMQWtBZ0FTSUVJQUpIRFFCQmdnRWhFQXppQWdzQ1FBSkFJQVF0QUFCQnVIOXFEZ2dBeXdITEFjc0J5d0hMQWNzQkFjc0JDeUFFUVFGcUlRRkI2Z0FoRUF6SkFnc2dCRUVCYWlFQlFlMEFJUkFNeUFJTEFrQWdBU0lFSUFKSERRQkJnd0VoRUF6aEFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJBZ0JDQUJhMEVDYWlFVUFrQURRQ0FFTFFBQUlBRkJnTStBZ0FCcUxRQUFSdzNKQVNBQlFRSkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCQTJBZ0JCZ3dFaEVBemhBZ3RCQUNFUUlBQkJBRFlDQUNBVVFRRnFJUUVNeGdFTEFrQWdBU0lFSUFKSERRQkJoQUVoRUF6Z0Fnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVFYWlFUUFrQURRQ0FFTFFBQUlBRkJnOCtBZ0FCcUxRQUFSdzNJQVNBQlFRUkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCaEFFaEVBemdBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRWpJUkFNeFFFTEFrQWdBU0lFSUFKSERRQkJoUUVoRUF6ZkFnc0NRQUpBSUFRdEFBQkJ0SDlxRGdnQXlBSElBY2dCeUFISUFjZ0JBY2dCQ3lBRVFRRnFJUUZCN3dBaEVBekdBZ3NnQkVFQmFpRUJRZkFBSVJBTXhRSUxBa0FnQVNJRUlBSkhEUUJCaGdFaEVBemVBZ3NnQkMwQUFFSEZBRWNOeFFFZ0JFRUJhaUVCRElNQ0N3SkFJQUVpQkNBQ1J3MEFRWWNCSVJBTTNRSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQTJvaEVBSkFBMEFnQkMwQUFDQUJRWWpQZ0lBQWFpMEFBRWNOeFFFZ0FVRURSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVljQklSQU0zUUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJMU0VRRE1JQkN3SkFJQUVpQkNBQ1J3MEFRWWdCSVJBTTNBSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQ0dvaEVBSkFBMEFnQkMwQUFDQUJRZERQZ0lBQWFpMEFBRWNOeEFFZ0FVRUlSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVlnQklSQU0zQUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJLU0VRRE1FQkN3SkFJQUVpQVNBQ1J3MEFRWWtCSVJBTTJ3SUxRUUVoRUNBQkxRQUFRZDhBUnczQUFTQUJRUUZxSVFFTWdRSUxBa0FnQVNJRUlBSkhEUUJCaWdFaEVBemFBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFQmFpRVFBMEFnQkMwQUFDQUJRWXpQZ0lBQWFpMEFBRWNOd1FFZ0FVRUJSZzJ2QWlBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHS0FTRVFETmtDQ3dKQUlBRWlCQ0FDUncwQVFZc0JJUkFNMlFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBbW9oRUFKQUEwQWdCQzBBQUNBQlFZN1BnSUFBYWkwQUFFY053UUVnQVVFQ1JnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWXNCSVJBTTJRSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkFpRVFETDRCQ3dKQUlBRWlCQ0FDUncwQVFZd0JJUkFNMkFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBV29oRUFKQUEwQWdCQzBBQUNBQlFmRFBnSUFBYWkwQUFFY053QUVnQVVFQlJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWXdCSVJBTTJBSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkh5RVFETDBCQ3dKQUlBRWlCQ0FDUncwQVFZMEJJUkFNMXdJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBV29oRUFKQUEwQWdCQzBBQUNBQlFmTFBnSUFBYWkwQUFFY052d0VnQVVFQlJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWTBCSVJBTTF3SUxJQUJCQURZQ0FDQVFRUUZxSVFGQkNTRVFETHdCQ3dKQUlBRWlCQ0FDUncwQVFZNEJJUkFNMWdJTEFrQUNRQ0FFTFFBQVFiZC9hZzRIQUw4QnZ3Ry9BYjhCdndFQnZ3RUxJQVJCQVdvaEFVSDRBQ0VRREwwQ0N5QUVRUUZxSVFGQitRQWhFQXk4QWdzQ1FDQUJJZ1FnQWtjTkFFR1BBU0VRRE5VQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUVZxSVJBQ1FBTkFJQVF0QUFBZ0FVR1J6NENBQUdvdEFBQkhEYjBCSUFGQkJVWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdQQVNFUUROVUNDeUFBUVFBMkFnQWdFRUVCYWlFQlFSZ2hFQXk2QVFzQ1FDQUJJZ1FnQWtjTkFFR1FBU0VRRE5RQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUpxSVJBQ1FBTkFJQVF0QUFBZ0FVR1h6NENBQUdvdEFBQkhEYndCSUFGQkFrWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdRQVNFUUROUUNDeUFBUVFBMkFnQWdFRUVCYWlFQlFSY2hFQXk1QVFzQ1FDQUJJZ1FnQWtjTkFFR1JBU0VRRE5NQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUVpxSVJBQ1FBTkFJQVF0QUFBZ0FVR2F6NENBQUdvdEFBQkhEYnNCSUFGQkJrWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdSQVNFUUROTUNDeUFBUVFBMkFnQWdFRUVCYWlFQlFSVWhFQXk0QVFzQ1FDQUJJZ1FnQWtjTkFFR1NBU0VRRE5JQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUVZxSVJBQ1FBTkFJQVF0QUFBZ0FVR2h6NENBQUdvdEFBQkhEYm9CSUFGQkJVWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdTQVNFUUROSUNDeUFBUVFBMkFnQWdFRUVCYWlFQlFSNGhFQXkzQVFzQ1FDQUJJZ1FnQWtjTkFFR1RBU0VRRE5FQ0N5QUVMUUFBUWN3QVJ3MjRBU0FFUVFGcUlRRkJDaUVRRExZQkN3SkFJQVFnQWtjTkFFR1VBU0VRRE5BQ0N3SkFBa0FnQkMwQUFFRy9mMm9PRHdDNUFia0J1UUc1QWJrQnVRRzVBYmtCdVFHNUFia0J1UUc1QVFHNUFRc2dCRUVCYWlFQlFmNEFJUkFNdHdJTElBUkJBV29oQVVIL0FDRVFETFlDQ3dKQUlBUWdBa2NOQUVHVkFTRVFETThDQ3dKQUFrQWdCQzBBQUVHL2Yyb09Bd0M0QVFHNEFRc2dCRUVCYWlFQlFmMEFJUkFNdGdJTElBUkJBV29oQkVHQUFTRVFETFVDQ3dKQUlBUWdBa2NOQUVHV0FTRVFETTRDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRRnFJUkFDUUFOQUlBUXRBQUFnQVVHbno0Q0FBR290QUFCSERiWUJJQUZCQVVZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR1dBU0VRRE00Q0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVFzaEVBeXpBUXNDUUNBRUlBSkhEUUJCbHdFaEVBek5BZ3NDUUFKQUFrQUNRQ0FFTFFBQVFWTnFEaU1BdUFHNEFiZ0J1QUc0QWJnQnVBRzRBYmdCdUFHNEFiZ0J1QUc0QWJnQnVBRzRBYmdCdUFHNEFiZ0J1QUc0QVFHNEFiZ0J1QUc0QWJnQkFyZ0J1QUc0QVFPNEFRc2dCRUVCYWlFQlFmc0FJUkFNdGdJTElBUkJBV29oQVVIOEFDRVFETFVDQ3lBRVFRRnFJUVJCZ1FFaEVBeTBBZ3NnQkVFQmFpRUVRWUlCSVJBTXN3SUxBa0FnQkNBQ1J3MEFRWmdCSVJBTXpBSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQkdvaEVBSkFBMEFnQkMwQUFDQUJRYW5QZ0lBQWFpMEFBRWNOdEFFZ0FVRUVSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVpnQklSQU16QUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJHU0VRRExFQkN3SkFJQVFnQWtjTkFFR1pBU0VRRE1zQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUVZxSVJBQ1FBTkFJQVF0QUFBZ0FVR3V6NENBQUdvdEFBQkhEYk1CSUFGQkJVWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdaQVNFUURNc0NDeUFBUVFBMkFnQWdFRUVCYWlFQlFRWWhFQXl3QVFzQ1FDQUVJQUpIRFFCQm1nRWhFQXpLQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUJhaUVRQWtBRFFDQUVMUUFBSUFGQnRNK0FnQUJxTFFBQVJ3MnlBU0FCUVFGR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJtZ0VoRUF6S0Fnc2dBRUVBTmdJQUlCQkJBV29oQVVFY0lSQU1yd0VMQWtBZ0JDQUNSdzBBUVpzQklSQU15UUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFXb2hFQUpBQTBBZ0JDMEFBQ0FCUWJiUGdJQUFhaTBBQUVjTnNRRWdBVUVCUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFac0JJUkFNeVFJTElBQkJBRFlDQUNBUVFRRnFJUUZCSnlFUURLNEJDd0pBSUFRZ0FrY05BRUdjQVNFUURNZ0NDd0pBQWtBZ0JDMEFBRUdzZjJvT0FnQUJzUUVMSUFSQkFXb2hCRUdHQVNFUURLOENDeUFFUVFGcUlRUkJod0VoRUF5dUFnc0NRQ0FFSUFKSERRQkJuUUVoRUF6SEFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVCYWlFUUFrQURRQ0FFTFFBQUlBRkJ1TStBZ0FCcUxRQUFSdzJ2QVNBQlFRRkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCblFFaEVBekhBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRW1JUkFNckFFTEFrQWdCQ0FDUncwQVFaNEJJUkFNeGdJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBV29oRUFKQUEwQWdCQzBBQUNBQlFiclBnSUFBYWkwQUFFY05yZ0VnQVVFQlJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWjRCSVJBTXhnSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkF5RVFES3NCQ3dKQUlBUWdBa2NOQUVHZkFTRVFETVVDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRSnFJUkFDUUFOQUlBUXRBQUFnQVVIdHo0Q0FBR290QUFCSERhMEJJQUZCQWtZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR2ZBU0VRRE1VQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVF3aEVBeXFBUXNDUUNBRUlBSkhEUUJCb0FFaEVBekVBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFRGFpRVFBa0FEUUNBRUxRQUFJQUZCdk0rQWdBQnFMUUFBUncyc0FTQUJRUU5HRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQm9BRWhFQXpFQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVOSVJBTXFRRUxBa0FnQkNBQ1J3MEFRYUVCSVJBTXd3SUxBa0FDUUNBRUxRQUFRYnAvYWc0TEFLd0JyQUdzQWF3QnJBR3NBYXdCckFHc0FRR3NBUXNnQkVFQmFpRUVRWXNCSVJBTXFnSUxJQVJCQVdvaEJFR01BU0VRREtrQ0N3SkFJQVFnQWtjTkFFR2lBU0VRRE1JQ0N5QUVMUUFBUWRBQVJ3MnBBU0FFUVFGcUlRUU02UUVMQWtBZ0JDQUNSdzBBUWFNQklSQU13UUlMQWtBQ1FDQUVMUUFBUWJkL2FnNEhBYW9CcWdHcUFhb0JxZ0VBcWdFTElBUkJBV29oQkVHT0FTRVFES2dDQ3lBRVFRRnFJUUZCSWlFUURLWUJDd0pBSUFRZ0FrY05BRUdrQVNFUURNQUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFGcUlSQUNRQU5BSUFRdEFBQWdBVUhBejRDQUFHb3RBQUJIRGFnQklBRkJBVVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHa0FTRVFETUFDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUjBoRUF5bEFRc0NRQ0FFSUFKSERRQkJwUUVoRUF5L0Fnc0NRQUpBSUFRdEFBQkJybjlxRGdNQXFBRUJxQUVMSUFSQkFXb2hCRUdRQVNFUURLWUNDeUFFUVFGcUlRRkJCQ0VRREtRQkN3SkFJQVFnQWtjTkFFR21BU0VRREw0Q0N3SkFBa0FDUUFKQUFrQWdCQzBBQUVHL2Yyb09GUUNxQWFvQnFnR3FBYW9CcWdHcUFhb0JxZ0dxQVFHcUFhb0JBcW9CcWdFRHFnR3FBUVNxQVFzZ0JFRUJhaUVFUVlnQklSQU1xQUlMSUFSQkFXb2hCRUdKQVNFUURLY0NDeUFFUVFGcUlRUkJpZ0VoRUF5bUFnc2dCRUVCYWlFRVFZOEJJUkFNcFFJTElBUkJBV29oQkVHUkFTRVFES1FDQ3dKQUlBUWdBa2NOQUVHbkFTRVFETDBDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRSnFJUkFDUUFOQUlBUXRBQUFnQVVIdHo0Q0FBR290QUFCSERhVUJJQUZCQWtZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR25BU0VRREwwQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVJFaEVBeWlBUXNDUUNBRUlBSkhEUUJCcUFFaEVBeThBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFQ2FpRVFBa0FEUUNBRUxRQUFJQUZCd3MrQWdBQnFMUUFBUncya0FTQUJRUUpHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQnFBRWhFQXk4QWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVzSVJBTW9RRUxBa0FnQkNBQ1J3MEFRYWtCSVJBTXV3SUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQkdvaEVBSkFBMEFnQkMwQUFDQUJRY1hQZ0lBQWFpMEFBRWNOb3dFZ0FVRUVSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWFrQklSQU11d0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJLeUVRREtBQkN3SkFJQVFnQWtjTkFFR3FBU0VRRExvQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUpxSVJBQ1FBTkFJQVF0QUFBZ0FVSEt6NENBQUdvdEFBQkhEYUlCSUFGQkFrWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdxQVNFUURMb0NDeUFBUVFBMkFnQWdFRUVCYWlFQlFSUWhFQXlmQVFzQ1FDQUVJQUpIRFFCQnF3RWhFQXk1QWdzQ1FBSkFBa0FDUUNBRUxRQUFRYjUvYWc0UEFBRUNwQUdrQWFRQnBBR2tBYVFCcEFHa0FhUUJwQUdrQVFPa0FRc2dCRUVCYWlFRVFaTUJJUkFNb2dJTElBUkJBV29oQkVHVUFTRVFES0VDQ3lBRVFRRnFJUVJCbFFFaEVBeWdBZ3NnQkVFQmFpRUVRWllCSVJBTW53SUxBa0FnQkNBQ1J3MEFRYXdCSVJBTXVBSUxJQVF0QUFCQnhRQkhEWjhCSUFSQkFXb2hCQXpnQVFzQ1FDQUVJQUpIRFFCQnJRRWhFQXkzQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUNhaUVRQWtBRFFDQUVMUUFBSUFGQnpjK0FnQUJxTFFBQVJ3MmZBU0FCUVFKR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJyUUVoRUF5M0Fnc2dBRUVBTmdJQUlCQkJBV29oQVVFT0lSQU1uQUVMQWtBZ0JDQUNSdzBBUWE0QklSQU10Z0lMSUFRdEFBQkIwQUJIRFowQklBUkJBV29oQVVFbElSQU1td0VMQWtBZ0JDQUNSdzBBUWE4QklSQU10UUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkNHb2hFQUpBQTBBZ0JDMEFBQ0FCUWREUGdJQUFhaTBBQUVjTm5RRWdBVUVJUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFhOEJJUkFNdFFJTElBQkJBRFlDQUNBUVFRRnFJUUZCS2lFUURKb0JDd0pBSUFRZ0FrY05BRUd3QVNFUURMUUNDd0pBQWtBZ0JDMEFBRUdyZjJvT0N3Q2RBWjBCblFHZEFaMEJuUUdkQVowQm5RRUJuUUVMSUFSQkFXb2hCRUdhQVNFUURKc0NDeUFFUVFGcUlRUkJtd0VoRUF5YUFnc0NRQ0FFSUFKSERRQkJzUUVoRUF5ekFnc0NRQUpBSUFRdEFBQkJ2MzlxRGhRQW5BR2NBWndCbkFHY0Fad0JuQUdjQVp3Qm5BR2NBWndCbkFHY0Fad0JuQUdjQVp3QkFad0JDeUFFUVFGcUlRUkJtUUVoRUF5YUFnc2dCRUVCYWlFRVFad0JJUkFNbVFJTEFrQWdCQ0FDUncwQVFiSUJJUkFNc2dJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBMm9oRUFKQUEwQWdCQzBBQUNBQlFkblBnSUFBYWkwQUFFY05tZ0VnQVVFRFJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRYklCSVJBTXNnSUxJQUJCQURZQ0FDQVFRUUZxSVFGQklTRVFESmNCQ3dKQUlBUWdBa2NOQUVHekFTRVFETEVDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRWnFJUkFDUUFOQUlBUXRBQUFnQVVIZHo0Q0FBR290QUFCSERaa0JJQUZCQmtZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR3pBU0VRRExFQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVJvaEVBeVdBUXNDUUNBRUlBSkhEUUJCdEFFaEVBeXdBZ3NDUUFKQUFrQWdCQzBBQUVHN2Yyb09FUUNhQVpvQm1nR2FBWm9CbWdHYUFab0JtZ0VCbWdHYUFab0JtZ0dhQVFLYUFRc2dCRUVCYWlFRVFaMEJJUkFNbUFJTElBUkJBV29oQkVHZUFTRVFESmNDQ3lBRVFRRnFJUVJCbndFaEVBeVdBZ3NDUUNBRUlBSkhEUUJCdFFFaEVBeXZBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFRmFpRVFBa0FEUUNBRUxRQUFJQUZCNU0rQWdBQnFMUUFBUncyWEFTQUJRUVZHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQnRRRWhFQXl2QWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVvSVJBTWxBRUxBa0FnQkNBQ1J3MEFRYllCSVJBTXJnSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQW1vaEVBSkFBMEFnQkMwQUFDQUJRZXJQZ0lBQWFpMEFBRWNObGdFZ0FVRUNSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWJZQklSQU1yZ0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJCeUVRREpNQkN3SkFJQVFnQWtjTkFFRzNBU0VRREswQ0N3SkFBa0FnQkMwQUFFRzdmMm9PRGdDV0FaWUJsZ0dXQVpZQmxnR1dBWllCbGdHV0FaWUJsZ0VCbGdFTElBUkJBV29oQkVHaEFTRVFESlFDQ3lBRVFRRnFJUVJCb2dFaEVBeVRBZ3NDUUNBRUlBSkhEUUJCdUFFaEVBeXNBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFQ2FpRVFBa0FEUUNBRUxRQUFJQUZCN2MrQWdBQnFMUUFBUncyVUFTQUJRUUpHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQnVBRWhFQXlzQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVTSVJBTWtRRUxBa0FnQkNBQ1J3MEFRYmtCSVJBTXF3SUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQVdvaEVBSkFBMEFnQkMwQUFDQUJRZkRQZ0lBQWFpMEFBRWNOa3dFZ0FVRUJSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWJrQklSQU1xd0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJJQ0VRREpBQkN3SkFJQVFnQWtjTkFFRzZBU0VRREtvQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUZxSVJBQ1FBTkFJQVF0QUFBZ0FVSHl6NENBQUdvdEFBQkhEWklCSUFGQkFVWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUc2QVNFUURLb0NDeUFBUVFBMkFnQWdFRUVCYWlFQlFROGhFQXlQQVFzQ1FDQUVJQUpIRFFCQnV3RWhFQXlwQWdzQ1FBSkFJQVF0QUFCQnQzOXFEZ2NBa2dHU0FaSUJrZ0dTQVFHU0FRc2dCRUVCYWlFRVFhVUJJUkFNa0FJTElBUkJBV29oQkVHbUFTRVFESThDQ3dKQUlBUWdBa2NOQUVHOEFTRVFES2dDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRZHFJUkFDUUFOQUlBUXRBQUFnQVVIMHo0Q0FBR290QUFCSERaQUJJQUZCQjBZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFRzhBU0VRREtnQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVJzaEVBeU5BUXNDUUNBRUlBSkhEUUJCdlFFaEVBeW5BZ3NDUUFKQUFrQWdCQzBBQUVHK2Yyb09FZ0NSQVpFQmtRR1JBWkVCa1FHUkFaRUJrUUVCa1FHUkFaRUJrUUdSQVpFQkFwRUJDeUFFUVFGcUlRUkJwQUVoRUF5UEFnc2dCRUVCYWlFRVFhY0JJUkFNamdJTElBUkJBV29oQkVHb0FTRVFESTBDQ3dKQUlBUWdBa2NOQUVHK0FTRVFES1lDQ3lBRUxRQUFRYzRBUncyTkFTQUVRUUZxSVFRTXp3RUxBa0FnQkNBQ1J3MEFRYjhCSVJBTXBRSUxBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBZ0JDMEFBRUcvZjJvT0ZRQUJBZ09jQVFRRkJwd0JuQUdjQVFjSUNRb0xuQUVNRFE0UG5BRUxJQVJCQVdvaEFVSG9BQ0VRREpvQ0N5QUVRUUZxSVFGQjZRQWhFQXlaQWdzZ0JFRUJhaUVCUWU0QUlSQU1tQUlMSUFSQkFXb2hBVUh5QUNFUURKY0NDeUFFUVFGcUlRRkI4d0FoRUF5V0Fnc2dCRUVCYWlFQlFmWUFJUkFNbFFJTElBUkJBV29oQVVIM0FDRVFESlFDQ3lBRVFRRnFJUUZCK2dBaEVBeVRBZ3NnQkVFQmFpRUVRWU1CSVJBTWtnSUxJQVJCQVdvaEJFR0VBU0VRREpFQ0N5QUVRUUZxSVFSQmhRRWhFQXlRQWdzZ0JFRUJhaUVFUVpJQklSQU1qd0lMSUFSQkFXb2hCRUdZQVNFUURJNENDeUFFUVFGcUlRUkJvQUVoRUF5TkFnc2dCRUVCYWlFRVFhTUJJUkFNakFJTElBUkJBV29oQkVHcUFTRVFESXNDQ3dKQUlBUWdBa1lOQUNBQVFaQ0FnSUFBTmdJSUlBQWdCRFlDQkVHckFTRVFESXNDQzBIQUFTRVFES01DQ3lBQUlBVWdBaENxZ0lDQUFDSUJEWXNCSUFVaEFReGNDd0pBSUFZZ0FrWU5BQ0FHUVFGcUlRVU1qUUVMUWNJQklSQU1vUUlMQTBBQ1FDQVFMUUFBUVhacURnU01BUUFBandFQUN5QVFRUUZxSWhBZ0FrY05BQXRCd3dFaEVBeWdBZ3NDUUNBSElBSkdEUUFnQUVHUmdJQ0FBRFlDQ0NBQUlBYzJBZ1FnQnlFQlFRRWhFQXlIQWd0QnhBRWhFQXlmQWdzQ1FDQUhJQUpIRFFCQnhRRWhFQXlmQWdzQ1FBSkFJQWN0QUFCQmRtb09CQUhPQWM0QkFNNEJDeUFIUVFGcUlRWU1qUUVMSUFkQkFXb2hCUXlKQVFzQ1FDQUhJQUpIRFFCQnhnRWhFQXllQWdzQ1FBSkFJQWN0QUFCQmRtb09Gd0dQQVk4QkFZOEJqd0dQQVk4Qmp3R1BBWThCandHUEFZOEJqd0dQQVk4Qmp3R1BBWThCandHUEFRQ1BBUXNnQjBFQmFpRUhDMEd3QVNFUURJUUNDd0pBSUFnZ0FrY05BRUhJQVNFUURKMENDeUFJTFFBQVFTQkhEWTBCSUFCQkFEc0JNaUFJUVFGcUlRRkJzd0VoRUF5REFnc2dBU0VYQWtBRFFDQVhJZ2NnQWtZTkFTQUhMUUFBUVZCcVFmOEJjU0lRUVFwUERjd0JBa0FnQUM4Qk1pSVVRWmt6U3cwQUlBQWdGRUVLYkNJVU93RXlJQkJCLy84RGN5QVVRZjcvQTNGSkRRQWdCMEVCYWlFWElBQWdGQ0FRYWlJUU93RXlJQkJCLy84RGNVSG9CMGtOQVFzTFFRQWhFQ0FBUVFBMkFod2dBRUhCaVlDQUFEWUNFQ0FBUVEwMkFnd2dBQ0FIUVFGcU5nSVVESndDQzBISEFTRVFESnNDQ3lBQUlBZ2dBaEN1Z0lDQUFDSVFSUTNLQVNBUVFSVkhEWXdCSUFCQnlBRTJBaHdnQUNBSU5nSVVJQUJCeVplQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF5YUFnc0NRQ0FKSUFKSERRQkJ6QUVoRUF5YUFndEJBQ0VVUVFFaEYwRUJJUlpCQUNFUUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUlBa3RBQUJCVUdvT0NwWUJsUUVBQVFJREJBVUdDSmNCQzBFQ0lSQU1CZ3RCQXlFUURBVUxRUVFoRUF3RUMwRUZJUkFNQXd0QkJpRVFEQUlMUVFjaEVBd0JDMEVJSVJBTFFRQWhGMEVBSVJaQkFDRVVESTRCQzBFSklSQkJBU0VVUVFBaEYwRUFJUllNalFFTEFrQWdDaUFDUncwQVFjNEJJUkFNbVFJTElBb3RBQUJCTGtjTmpnRWdDa0VCYWlFSkRNb0JDeUFMSUFKSERZNEJRZEFCSVJBTWx3SUxBa0FnQ3lBQ1JnMEFJQUJCam9DQWdBQTJBZ2dnQUNBTE5nSUVRYmNCSVJBTS9nRUxRZEVCSVJBTWxnSUxBa0FnQkNBQ1J3MEFRZElCSVJBTWxnSUxJQUlnQkdzZ0FDZ0NBQ0lRYWlFVUlBUWdFR3RCQkdvaEN3TkFJQVF0QUFBZ0VFSDh6NENBQUdvdEFBQkhEWTRCSUJCQkJFWU42UUVnRUVFQmFpRVFJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCMGdFaEVBeVZBZ3NnQUNBTUlBSVFySUNBZ0FBaUFRMk5BU0FNSVFFTXVBRUxBa0FnQkNBQ1J3MEFRZFFCSVJBTWxBSUxJQUlnQkdzZ0FDZ0NBQ0lRYWlFVUlBUWdFR3RCQVdvaERBTkFJQVF0QUFBZ0VFR0IwSUNBQUdvdEFBQkhEWThCSUJCQkFVWU5qZ0VnRUVFQmFpRVFJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCMUFFaEVBeVRBZ3NDUUNBRUlBSkhEUUJCMWdFaEVBeVRBZ3NnQWlBRWF5QUFLQUlBSWhCcUlSUWdCQ0FRYTBFQ2FpRUxBMEFnQkMwQUFDQVFRWVBRZ0lBQWFpMEFBRWNOamdFZ0VFRUNSZzJRQVNBUVFRRnFJUkFnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVIV0FTRVFESklDQ3dKQUlBUWdBa2NOQUVIWEFTRVFESklDQ3dKQUFrQWdCQzBBQUVHN2Yyb09FQUNQQVk4Qmp3R1BBWThCandHUEFZOEJqd0dQQVk4Qmp3R1BBWThCQVk4QkN5QUVRUUZxSVFSQnV3RWhFQXo1QVFzZ0JFRUJhaUVFUWJ3QklSQU0rQUVMQWtBZ0JDQUNSdzBBUWRnQklSQU1rUUlMSUFRdEFBQkJ5QUJIRFl3QklBUkJBV29oQkF6RUFRc0NRQ0FFSUFKR0RRQWdBRUdRZ0lDQUFEWUNDQ0FBSUFRMkFnUkJ2Z0VoRUF6M0FRdEIyUUVoRUF5UEFnc0NRQ0FFSUFKSERRQkIyZ0VoRUF5UEFnc2dCQzBBQUVISUFFWU53d0VnQUVFQk9nQW9ETGtCQ3lBQVFRSTZBQzhnQUNBRUlBSVFwb0NBZ0FBaUVBMk5BVUhDQVNFUURQUUJDeUFBTFFBb1FYOXFEZ0szQWJrQnVBRUxBMEFDUUNBRUxRQUFRWFpxRGdRQWpnR09BUUNPQVFzZ0JFRUJhaUlFSUFKSERRQUxRZDBCSVJBTWl3SUxJQUJCQURvQUx5QUFMUUF0UVFSeFJRMkVBZ3NnQUVFQU9nQXZJQUJCQVRvQU5DQUJJUUVNakFFTElCQkJGVVlOMmdFZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWFlT2dJQUFOZ0lRSUFCQkVqWUNERUVBSVJBTWlBSUxBa0FnQUNBUUlBSVF0SUNBZ0FBaUJBMEFJQkFoQVF5QkFnc0NRQ0FFUVJWSERRQWdBRUVETmdJY0lBQWdFRFlDRkNBQVFiQ1lnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1pQUlMSUFCQkFEWUNIQ0FBSUJBMkFoUWdBRUduam9DQUFEWUNFQ0FBUVJJMkFneEJBQ0VRREljQ0N5QVFRUlZHRGRZQklBQkJBRFlDSENBQUlBRTJBaFFnQUVIYWpZQ0FBRFlDRUNBQVFSUTJBZ3hCQUNFUURJWUNDeUFBS0FJRUlSY2dBRUVBTmdJRUlCQWdFYWRxSWhZaEFTQUFJQmNnRUNBV0lCUWJJaEFRdFlDQWdBQWlGRVVOalFFZ0FFRUhOZ0ljSUFBZ0VEWUNGQ0FBSUJRMkFneEJBQ0VRRElVQ0N5QUFJQUF2QVRCQmdBRnlPd0V3SUFFaEFRdEJLaUVRRE9vQkN5QVFRUlZHRGRFQklBQkJBRFlDSENBQUlBRTJBaFFnQUVHRGpJQ0FBRFlDRUNBQVFSTTJBZ3hCQUNFUURJSUNDeUFRUVJWR0RjOEJJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFR2FqNENBQURZQ0VDQUFRU0kyQWd4QkFDRVFESUVDQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVF0NENBZ0FBaUVBMEFJQUZCQVdvaEFReU5BUXNnQUVFTU5nSWNJQUFnRURZQ0RDQUFJQUZCQVdvMkFoUkJBQ0VRRElBQ0N5QVFRUlZHRGN3QklBQkJBRFlDSENBQUlBRTJBaFFnQUVHYWo0Q0FBRFlDRUNBQVFTSTJBZ3hCQUNFUURQOEJDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXQ0Q0FnQUFpRUEwQUlBRkJBV29oQVF5TUFRc2dBRUVOTmdJY0lBQWdFRFlDRENBQUlBRkJBV28yQWhSQkFDRVFEUDRCQ3lBUVFSVkdEY2tCSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUhHaklDQUFEWUNFQ0FBUVNNMkFneEJBQ0VRRFAwQkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRdVlDQWdBQWlFQTBBSUFGQkFXb2hBUXlMQVFzZ0FFRU9OZ0ljSUFBZ0VEWUNEQ0FBSUFGQkFXbzJBaFJCQUNFUURQd0JDeUFBUVFBMkFod2dBQ0FCTmdJVUlBQkJ3SldBZ0FBMkFoQWdBRUVDTmdJTVFRQWhFQXo3QVFzZ0VFRVZSZzNGQVNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCeG95QWdBQTJBaEFnQUVFak5nSU1RUUFoRUF6NkFRc2dBRUVRTmdJY0lBQWdBVFlDRkNBQUlCQTJBZ3hCQUNFUURQa0JDeUFBS0FJRUlRUWdBRUVBTmdJRUFrQWdBQ0FFSUFFUXVZQ0FnQUFpQkEwQUlBRkJBV29oQVF6eEFRc2dBRUVSTmdJY0lBQWdCRFlDRENBQUlBRkJBV28yQWhSQkFDRVFEUGdCQ3lBUVFSVkdEY0VCSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUhHaklDQUFEWUNFQ0FBUVNNMkFneEJBQ0VRRFBjQkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRdVlDQWdBQWlFQTBBSUFGQkFXb2hBUXlJQVFzZ0FFRVROZ0ljSUFBZ0VEWUNEQ0FBSUFGQkFXbzJBaFJCQUNFUURQWUJDeUFBS0FJRUlRUWdBRUVBTmdJRUFrQWdBQ0FFSUFFUXVZQ0FnQUFpQkEwQUlBRkJBV29oQVF6dEFRc2dBRUVVTmdJY0lBQWdCRFlDRENBQUlBRkJBV28yQWhSQkFDRVFEUFVCQ3lBUVFSVkdEYjBCSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUdhajRDQUFEWUNFQ0FBUVNJMkFneEJBQ0VRRFBRQkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRdDRDQWdBQWlFQTBBSUFGQkFXb2hBUXlHQVFzZ0FFRVdOZ0ljSUFBZ0VEWUNEQ0FBSUFGQkFXbzJBaFJCQUNFUURQTUJDeUFBS0FJRUlRUWdBRUVBTmdJRUFrQWdBQ0FFSUFFUXQ0Q0FnQUFpQkEwQUlBRkJBV29oQVF6cEFRc2dBRUVYTmdJY0lBQWdCRFlDRENBQUlBRkJBV28yQWhSQkFDRVFEUElCQ3lBQVFRQTJBaHdnQUNBQk5nSVVJQUJCelpPQWdBQTJBaEFnQUVFTU5nSU1RUUFoRUF6eEFRdENBU0VSQ3lBUVFRRnFJUUVDUUNBQUtRTWdJaEpDLy8vLy8vLy8vLzhQVmcwQUlBQWdFa0lFaGlBUmhEY0RJQ0FCSVFFTWhBRUxJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFR3RpWUNBQURZQ0VDQUFRUXcyQWd4QkFDRVFETzhCQ3lBQVFRQTJBaHdnQUNBUU5nSVVJQUJCelpPQWdBQTJBaEFnQUVFTU5nSU1RUUFoRUF6dUFRc2dBQ2dDQkNFWElBQkJBRFlDQkNBUUlCR25haUlXSVFFZ0FDQVhJQkFnRmlBVUd5SVFFTFdBZ0lBQUloUkZEWE1nQUVFRk5nSWNJQUFnRURZQ0ZDQUFJQlEyQWd4QkFDRVFETzBCQ3lBQVFRQTJBaHdnQUNBUU5nSVVJQUJCcXB5QWdBQTJBaEFnQUVFUE5nSU1RUUFoRUF6c0FRc2dBQ0FRSUFJUXRJQ0FnQUFpQVEwQklCQWhBUXRCRGlFUURORUJDd0pBSUFGQkZVY05BQ0FBUVFJMkFod2dBQ0FRTmdJVUlBQkJzSmlBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXpxQVFzZ0FFRUFOZ0ljSUFBZ0VEWUNGQ0FBUWFlT2dJQUFOZ0lRSUFCQkVqWUNERUVBSVJBTTZRRUxJQUZCQVdvaEVBSkFJQUF2QVRBaUFVR0FBWEZGRFFBQ1FDQUFJQkFnQWhDN2dJQ0FBQ0lCRFFBZ0VDRUJESEFMSUFGQkZVY051Z0VnQUVFRk5nSWNJQUFnRURZQ0ZDQUFRZm1YZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNNlFFTEFrQWdBVUdnQkhGQm9BUkhEUUFnQUMwQUxVRUNjUTBBSUFCQkFEWUNIQ0FBSUJBMkFoUWdBRUdXazRDQUFEWUNFQ0FBUVFRMkFneEJBQ0VRRE9rQkN5QUFJQkFnQWhDOWdJQ0FBQm9nRUNFQkFrQUNRQUpBQWtBQ1FDQUFJQkFnQWhDemdJQ0FBQTRXQWdFQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUF3UUxJQUJCQVRvQUxnc2dBQ0FBTHdFd1FjQUFjanNCTUNBUUlRRUxRU1loRUF6UkFRc2dBRUVqTmdJY0lBQWdFRFlDRkNBQVFhV1dnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU02UUVMSUFCQkFEWUNIQ0FBSUJBMkFoUWdBRUhWaTRDQUFEWUNFQ0FBUVJFMkFneEJBQ0VRRE9nQkN5QUFMUUF0UVFGeFJRMEJRY01CSVJBTXpnRUxBa0FnRFNBQ1JnMEFBMEFDUUNBTkxRQUFRU0JHRFFBZ0RTRUJETVFCQ3lBTlFRRnFJZzBnQWtjTkFBdEJKU0VRRE9jQkMwRWxJUkFNNWdFTElBQW9BZ1FoQkNBQVFRQTJBZ1FnQUNBRUlBMFFyNENBZ0FBaUJFVU5yUUVnQUVFbU5nSWNJQUFnQkRZQ0RDQUFJQTFCQVdvMkFoUkJBQ0VRRE9VQkN5QVFRUlZHRGFzQklBQkJBRFlDSENBQUlBRTJBaFFnQUVIOWpZQ0FBRFlDRUNBQVFSMDJBZ3hCQUNFUURPUUJDeUFBUVNjMkFod2dBQ0FCTmdJVUlBQWdFRFlDREVFQUlSQU00d0VMSUJBaEFVRUJJUlFDUUFKQUFrQUNRQUpBQWtBQ1FDQUFMUUFzUVg1cURnY0dCUVVEQVFJQUJRc2dBQ0FBTHdFd1FRaHlPd0V3REFNTFFRSWhGQXdCQzBFRUlSUUxJQUJCQVRvQUxDQUFJQUF2QVRBZ0ZISTdBVEFMSUJBaEFRdEJLeUVRRE1vQkN5QUFRUUEyQWh3Z0FDQVFOZ0lVSUFCQnE1S0FnQUEyQWhBZ0FFRUxOZ0lNUVFBaEVBemlBUXNnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZUdQZ0lBQU5nSVFJQUJCQ2pZQ0RFRUFJUkFNNFFFTElBQkJBRG9BTENBUUlRRU12UUVMSUJBaEFVRUJJUlFDUUFKQUFrQUNRQUpBSUFBdEFDeEJlMm9PQkFNQkFnQUZDeUFBSUFBdkFUQkJDSEk3QVRBTUF3dEJBaUVVREFFTFFRUWhGQXNnQUVFQk9nQXNJQUFnQUM4Qk1DQVVjanNCTUFzZ0VDRUJDMEVwSVJBTXhRRUxJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFSHdsSUNBQURZQ0VDQUFRUU0yQWd4QkFDRVFETjBCQ3dKQUlBNHRBQUJCRFVjTkFDQUFLQUlFSVFFZ0FFRUFOZ0lFQWtBZ0FDQUJJQTRRc1lDQWdBQWlBUTBBSUE1QkFXb2hBUXgxQ3lBQVFTdzJBaHdnQUNBQk5nSU1JQUFnRGtFQmFqWUNGRUVBSVJBTTNRRUxJQUF0QUMxQkFYRkZEUUZCeEFFaEVBekRBUXNDUUNBT0lBSkhEUUJCTFNFUUROd0JDd0pBQWtBRFFBSkFJQTR0QUFCQmRtb09CQUlBQUFNQUN5QU9RUUZxSWc0Z0FrY05BQXRCTFNFUUROMEJDeUFBS0FJRUlRRWdBRUVBTmdJRUFrQWdBQ0FCSUE0UXNZQ0FnQUFpQVEwQUlBNGhBUXgwQ3lBQVFTdzJBaHdnQUNBT05nSVVJQUFnQVRZQ0RFRUFJUkFNM0FFTElBQW9BZ1FoQVNBQVFRQTJBZ1FDUUNBQUlBRWdEaEN4Z0lDQUFDSUJEUUFnRGtFQmFpRUJESE1MSUFCQkxEWUNIQ0FBSUFFMkFnd2dBQ0FPUVFGcU5nSVVRUUFoRUF6YkFRc2dBQ2dDQkNFRUlBQkJBRFlDQkNBQUlBUWdEaEN4Z0lDQUFDSUVEYUFCSUE0aEFRek9BUXNnRUVFc1J3MEJJQUZCQVdvaEVFRUJJUUVDUUFKQUFrQUNRQUpBSUFBdEFDeEJlMm9PQkFNQkFnUUFDeUFRSVFFTUJBdEJBaUVCREFFTFFRUWhBUXNnQUVFQk9nQXNJQUFnQUM4Qk1DQUJjanNCTUNBUUlRRU1BUXNnQUNBQUx3RXdRUWh5T3dFd0lCQWhBUXRCT1NFUURMOEJDeUFBUVFBNkFDd2dBU0VCQzBFMElSQU12UUVMSUFBZ0FDOEJNRUVnY2pzQk1DQUJJUUVNQWdzZ0FDZ0NCQ0VFSUFCQkFEWUNCQUpBSUFBZ0JDQUJFTEdBZ0lBQUlnUU5BQ0FCSVFFTXh3RUxJQUJCTnpZQ0hDQUFJQUUyQWhRZ0FDQUVOZ0lNUVFBaEVBelVBUXNnQUVFSU9nQXNJQUVoQVF0Qk1DRVFETGtCQ3dKQUlBQXRBQ2hCQVVZTkFDQUJJUUVNQkFzZ0FDMEFMVUVJY1VVTmt3RWdBU0VCREFNTElBQXRBREJCSUhFTmxBRkJ4UUVoRUF5M0FRc0NRQ0FQSUFKR0RRQUNRQU5BQWtBZ0R5MEFBRUZRYWlJQlFmOEJjVUVLU1EwQUlBOGhBVUUxSVJBTXVnRUxJQUFwQXlBaUVVS1pzK2JNbWJQbXpCbFdEUUVnQUNBUlFncCtJaEUzQXlBZ0VTQUJyVUwvQVlNaUVrSi9oVllOQVNBQUlCRWdFbnczQXlBZ0QwRUJhaUlQSUFKSERRQUxRVGtoRUF6UkFRc2dBQ2dDQkNFQ0lBQkJBRFlDQkNBQUlBSWdEMEVCYWlJRUVMR0FnSUFBSWdJTmxRRWdCQ0VCRE1NQkMwRTVJUkFNendFTEFrQWdBQzhCTUNJQlFRaHhSUTBBSUFBdEFDaEJBVWNOQUNBQUxRQXRRUWh4UlEyUUFRc2dBQ0FCUWZmN0EzRkJnQVJ5T3dFd0lBOGhBUXRCTnlFUURMUUJDeUFBSUFBdkFUQkJFSEk3QVRBTXF3RUxJQkJCRlVZTml3RWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFmQ09nSUFBTmdJUUlBQkJIRFlDREVFQUlSQU15d0VMSUFCQnd3QTJBaHdnQUNBQk5nSU1JQUFnRFVFQmFqWUNGRUVBSVJBTXlnRUxBa0FnQVMwQUFFRTZSdzBBSUFBb0FnUWhFQ0FBUVFBMkFnUUNRQ0FBSUJBZ0FSQ3ZnSUNBQUNJUURRQWdBVUVCYWlFQkRHTUxJQUJCd3dBMkFod2dBQ0FRTmdJTUlBQWdBVUVCYWpZQ0ZFRUFJUkFNeWdFTElBQkJBRFlDSENBQUlBRTJBaFFnQUVHeGtZQ0FBRFlDRUNBQVFRbzJBZ3hCQUNFUURNa0JDeUFBUVFBMkFod2dBQ0FCTmdJVUlBQkJvSm1BZ0FBMkFoQWdBRUVlTmdJTVFRQWhFQXpJQVFzZ0FFRUFOZ0lBQ3lBQVFZQVNPd0VxSUFBZ0YwRUJhaUlCSUFJUXFJQ0FnQUFpRUEwQklBRWhBUXRCeHdBaEVBeXNBUXNnRUVFVlJ3MkRBU0FBUWRFQU5nSWNJQUFnQVRZQ0ZDQUFRZU9YZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNeEFFTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkNuZ0lDQUFDSVFEUUFnQVNFQkRGNExJQUJCMGdBMkFod2dBQ0FCTmdJVUlBQWdFRFlDREVFQUlSQU13d0VMSUFCQkFEWUNIQ0FBSUJRMkFoUWdBRUhCcUlDQUFEWUNFQ0FBUVFjMkFnd2dBRUVBTmdJQVFRQWhFQXpDQVFzZ0FDZ0NCQ0VRSUFCQkFEWUNCQUpBSUFBZ0VDQUJFS2VBZ0lBQUloQU5BQ0FCSVFFTVhRc2dBRUhUQURZQ0hDQUFJQUUyQWhRZ0FDQVFOZ0lNUVFBaEVBekJBUXRCQUNFUUlBQkJBRFlDSENBQUlBRTJBaFFnQUVHQWtZQ0FBRFlDRUNBQVFRazJBZ3dNd0FFTElCQkJGVVlOZlNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCbEkyQWdBQTJBaEFnQUVFaE5nSU1RUUFoRUF5L0FRdEJBU0VXUVFBaEYwRUFJUlJCQVNFUUN5QUFJQkE2QUNzZ0FVRUJhaUVCQWtBQ1FDQUFMUUF0UVJCeERRQUNRQUpBQWtBZ0FDMEFLZzREQVFBQ0JBc2dGa1VOQXd3Q0N5QVVEUUVNQWdzZ0YwVU5BUXNnQUNnQ0JDRVFJQUJCQURZQ0JBSkFJQUFnRUNBQkVLMkFnSUFBSWhBTkFDQUJJUUVNWEFzZ0FFSFlBRFlDSENBQUlBRTJBaFFnQUNBUU5nSU1RUUFoRUF5K0FRc2dBQ2dDQkNFRUlBQkJBRFlDQkFKQUlBQWdCQ0FCRUsyQWdJQUFJZ1FOQUNBQklRRU1yUUVMSUFCQjJRQTJBaHdnQUNBQk5nSVVJQUFnQkRZQ0RFRUFJUkFNdlFFTElBQW9BZ1FoQkNBQVFRQTJBZ1FDUUNBQUlBUWdBUkN0Z0lDQUFDSUVEUUFnQVNFQkRLc0JDeUFBUWRvQU5nSWNJQUFnQVRZQ0ZDQUFJQVEyQWd4QkFDRVFETHdCQ3lBQUtBSUVJUVFnQUVFQU5nSUVBa0FnQUNBRUlBRVFyWUNBZ0FBaUJBMEFJQUVoQVF5cEFRc2dBRUhjQURZQ0hDQUFJQUUyQWhRZ0FDQUVOZ0lNUVFBaEVBeTdBUXNDUUNBQkxRQUFRVkJxSWhCQi93RnhRUXBQRFFBZ0FDQVFPZ0FxSUFGQkFXb2hBVUhQQUNFUURLSUJDeUFBS0FJRUlRUWdBRUVBTmdJRUFrQWdBQ0FFSUFFUXJZQ0FnQUFpQkEwQUlBRWhBUXluQVFzZ0FFSGVBRFlDSENBQUlBRTJBaFFnQUNBRU5nSU1RUUFoRUF5NkFRc2dBRUVBTmdJQUlCZEJBV29oQVFKQUlBQXRBQ2xCSTA4TkFDQUJJUUVNV1FzZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWRPSmdJQUFOZ0lRSUFCQkNEWUNERUVBSVJBTXVRRUxJQUJCQURZQ0FBdEJBQ0VRSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUdRczRDQUFEWUNFQ0FBUVFnMkFnd010d0VMSUFCQkFEWUNBQ0FYUVFGcUlRRUNRQ0FBTFFBcFFTRkhEUUFnQVNFQkRGWUxJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFR2Jpb0NBQURZQ0VDQUFRUWcyQWd4QkFDRVFETFlCQ3lBQVFRQTJBZ0FnRjBFQmFpRUJBa0FnQUMwQUtTSVFRVjFxUVF0UERRQWdBU0VCREZVTEFrQWdFRUVHU3cwQVFRRWdFSFJCeWdCeFJRMEFJQUVoQVF4VkMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZmVKZ0lBQU5nSVFJQUJCQ0RZQ0RBeTFBUXNnRUVFVlJnMXhJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFRzVqWUNBQURZQ0VDQUFRUm8yQWd4QkFDRVFETFFCQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVFwNENBZ0FBaUVBMEFJQUVoQVF4VUN5QUFRZVVBTmdJY0lBQWdBVFlDRkNBQUlCQTJBZ3hCQUNFUURMTUJDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXA0Q0FnQUFpRUEwQUlBRWhBUXhOQ3lBQVFkSUFOZ0ljSUFBZ0FUWUNGQ0FBSUJBMkFneEJBQ0VRRExJQkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRcDRDQWdBQWlFQTBBSUFFaEFReE5DeUFBUWRNQU5nSWNJQUFnQVRZQ0ZDQUFJQkEyQWd4QkFDRVFETEVCQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVFwNENBZ0FBaUVBMEFJQUVoQVF4UkN5QUFRZVVBTmdJY0lBQWdBVFlDRkNBQUlCQTJBZ3hCQUNFUURMQUJDeUFBUVFBMkFod2dBQ0FCTmdJVUlBQkJ4b3FBZ0FBMkFoQWdBRUVITmdJTVFRQWhFQXl2QVFzZ0FDZ0NCQ0VRSUFCQkFEWUNCQUpBSUFBZ0VDQUJFS2VBZ0lBQUloQU5BQ0FCSVFFTVNRc2dBRUhTQURZQ0hDQUFJQUUyQWhRZ0FDQVFOZ0lNUVFBaEVBeXVBUXNnQUNnQ0JDRVFJQUJCQURZQ0JBSkFJQUFnRUNBQkVLZUFnSUFBSWhBTkFDQUJJUUVNU1FzZ0FFSFRBRFlDSENBQUlBRTJBaFFnQUNBUU5nSU1RUUFoRUF5dEFRc2dBQ2dDQkNFUUlBQkJBRFlDQkFKQUlBQWdFQ0FCRUtlQWdJQUFJaEFOQUNBQklRRU1UUXNnQUVIbEFEWUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXlzQVFzZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWR5SWdJQUFOZ0lRSUFCQkJ6WUNERUVBSVJBTXF3RUxJQkJCUDBjTkFTQUJRUUZxSVFFTFFRVWhFQXlRQVF0QkFDRVFJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFSDlrb0NBQURZQ0VDQUFRUWMyQWd3TXFBRUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDbmdJQ0FBQ0lRRFFBZ0FTRUJERUlMSUFCQjBnQTJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNcHdFTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkNuZ0lDQUFDSVFEUUFnQVNFQkRFSUxJQUJCMHdBMkFod2dBQ0FCTmdJVUlBQWdFRFlDREVFQUlSQU1wZ0VMSUFBb0FnUWhFQ0FBUVFBMkFnUUNRQ0FBSUJBZ0FSQ25nSUNBQUNJUURRQWdBU0VCREVZTElBQkI1UUEyQWh3Z0FDQUJOZ0lVSUFBZ0VEWUNERUVBSVJBTXBRRUxJQUFvQWdRaEFTQUFRUUEyQWdRQ1FDQUFJQUVnRkJDbmdJQ0FBQ0lCRFFBZ0ZDRUJERDhMSUFCQjBnQTJBaHdnQUNBVU5nSVVJQUFnQVRZQ0RFRUFJUkFNcEFFTElBQW9BZ1FoQVNBQVFRQTJBZ1FDUUNBQUlBRWdGQkNuZ0lDQUFDSUJEUUFnRkNFQkREOExJQUJCMHdBMkFod2dBQ0FVTmdJVUlBQWdBVFlDREVFQUlSQU1vd0VMSUFBb0FnUWhBU0FBUVFBMkFnUUNRQ0FBSUFFZ0ZCQ25nSUNBQUNJQkRRQWdGQ0VCREVNTElBQkI1UUEyQWh3Z0FDQVVOZ0lVSUFBZ0FUWUNERUVBSVJBTW9nRUxJQUJCQURZQ0hDQUFJQlEyQWhRZ0FFSERqNENBQURZQ0VDQUFRUWMyQWd4QkFDRVFES0VCQ3lBQVFRQTJBaHdnQUNBQk5nSVVJQUJCdzQrQWdBQTJBaEFnQUVFSE5nSU1RUUFoRUF5Z0FRdEJBQ0VRSUFCQkFEWUNIQ0FBSUJRMkFoUWdBRUdNbklDQUFEWUNFQ0FBUVFjMkFnd01ud0VMSUFCQkFEWUNIQ0FBSUJRMkFoUWdBRUdNbklDQUFEWUNFQ0FBUVFjMkFneEJBQ0VRREo0QkN5QUFRUUEyQWh3Z0FDQVVOZ0lVSUFCQi9wR0FnQUEyQWhBZ0FFRUhOZ0lNUVFBaEVBeWRBUXNnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRWTZiZ0lBQU5nSVFJQUJCQmpZQ0RFRUFJUkFNbkFFTElCQkJGVVlOVnlBQVFRQTJBaHdnQUNBQk5nSVVJQUJCekk2QWdBQTJBaEFnQUVFZ05nSU1RUUFoRUF5YkFRc2dBRUVBTmdJQUlCQkJBV29oQVVFa0lSQUxJQUFnRURvQUtTQUFLQUlFSVJBZ0FFRUFOZ0lFSUFBZ0VDQUJFS3VBZ0lBQUloQU5WQ0FCSVFFTVBnc2dBRUVBTmdJQUMwRUFJUkFnQUVFQU5nSWNJQUFnQkRZQ0ZDQUFRZkdiZ0lBQU5nSVFJQUJCQmpZQ0RBeVhBUXNnQVVFVlJnMVFJQUJCQURZQ0hDQUFJQVUyQWhRZ0FFSHdqSUNBQURZQ0VDQUFRUnMyQWd4QkFDRVFESllCQ3lBQUtBSUVJUVVnQUVFQU5nSUVJQUFnQlNBUUVLbUFnSUFBSWdVTkFTQVFRUUZxSVFVTFFhMEJJUkFNZXdzZ0FFSEJBVFlDSENBQUlBVTJBZ3dnQUNBUVFRRnFOZ0lVUVFBaEVBeVRBUXNnQUNnQ0JDRUdJQUJCQURZQ0JDQUFJQVlnRUJDcGdJQ0FBQ0lHRFFFZ0VFRUJhaUVHQzBHdUFTRVFESGdMSUFCQndnRTJBaHdnQUNBR05nSU1JQUFnRUVFQmFqWUNGRUVBSVJBTWtBRUxJQUJCQURZQ0hDQUFJQWMyQWhRZ0FFR1hpNENBQURZQ0VDQUFRUTAyQWd4QkFDRVFESThCQ3lBQVFRQTJBaHdnQUNBSU5nSVVJQUJCNDVDQWdBQTJBaEFnQUVFSk5nSU1RUUFoRUF5T0FRc2dBRUVBTmdJY0lBQWdDRFlDRkNBQVFaU05nSUFBTmdJUUlBQkJJVFlDREVFQUlSQU1qUUVMUVFFaEZrRUFJUmRCQUNFVVFRRWhFQXNnQUNBUU9nQXJJQWxCQVdvaENBSkFBa0FnQUMwQUxVRVFjUTBBQWtBQ1FBSkFJQUF0QUNvT0F3RUFBZ1FMSUJaRkRRTU1BZ3NnRkEwQkRBSUxJQmRGRFFFTElBQW9BZ1FoRUNBQVFRQTJBZ1FnQUNBUUlBZ1FyWUNBZ0FBaUVFVU5QU0FBUWNrQk5nSWNJQUFnQ0RZQ0ZDQUFJQkEyQWd4QkFDRVFESXdCQ3lBQUtBSUVJUVFnQUVFQU5nSUVJQUFnQkNBSUVLMkFnSUFBSWdSRkRYWWdBRUhLQVRZQ0hDQUFJQWcyQWhRZ0FDQUVOZ0lNUVFBaEVBeUxBUXNnQUNnQ0JDRUVJQUJCQURZQ0JDQUFJQVFnQ1JDdGdJQ0FBQ0lFUlExMElBQkJ5d0UyQWh3Z0FDQUpOZ0lVSUFBZ0JEWUNERUVBSVJBTWlnRUxJQUFvQWdRaEJDQUFRUUEyQWdRZ0FDQUVJQW9RcllDQWdBQWlCRVVOY2lBQVFjMEJOZ0ljSUFBZ0NqWUNGQ0FBSUFRMkFneEJBQ0VRRElrQkN3SkFJQXN0QUFCQlVHb2lFRUgvQVhGQkNrOE5BQ0FBSUJBNkFDb2dDMEVCYWlFS1FiWUJJUkFNY0FzZ0FDZ0NCQ0VFSUFCQkFEWUNCQ0FBSUFRZ0N4Q3RnSUNBQUNJRVJRMXdJQUJCendFMkFod2dBQ0FMTmdJVUlBQWdCRFlDREVFQUlSQU1pQUVMSUFCQkFEWUNIQ0FBSUFRMkFoUWdBRUdRczRDQUFEWUNFQ0FBUVFnMkFnd2dBRUVBTmdJQVFRQWhFQXlIQVFzZ0FVRVZSZzAvSUFCQkFEWUNIQ0FBSUF3MkFoUWdBRUhNam9DQUFEWUNFQ0FBUVNBMkFneEJBQ0VRRElZQkN5QUFRWUVFT3dFb0lBQW9BZ1FoRUNBQVFnQTNBd0FnQUNBUUlBeEJBV29pREJDcmdJQ0FBQ0lRUlEwNElBQkIwd0UyQWh3Z0FDQU1OZ0lVSUFBZ0VEWUNERUVBSVJBTWhRRUxJQUJCQURZQ0FBdEJBQ0VRSUFCQkFEWUNIQ0FBSUFRMkFoUWdBRUhZbTRDQUFEWUNFQ0FBUVFnMkFnd01nd0VMSUFBb0FnUWhFQ0FBUWdBM0F3QWdBQ0FRSUF0QkFXb2lDeENyZ0lDQUFDSVFEUUZCeGdFaEVBeHBDeUFBUVFJNkFDZ01WUXNnQUVIVkFUWUNIQ0FBSUFzMkFoUWdBQ0FRTmdJTVFRQWhFQXlBQVFzZ0VFRVZSZzAzSUFCQkFEWUNIQ0FBSUFRMkFoUWdBRUdraklDQUFEWUNFQ0FBUVJBMkFneEJBQ0VRREg4TElBQXRBRFJCQVVjTk5DQUFJQVFnQWhDOGdJQ0FBQ0lRUlEwMElCQkJGVWNOTlNBQVFkd0JOZ0ljSUFBZ0JEWUNGQ0FBUWRXV2dJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTWZndEJBQ0VRSUFCQkFEWUNIQ0FBUWErTGdJQUFOZ0lRSUFCQkFqWUNEQ0FBSUJSQkFXbzJBaFFNZlF0QkFDRVFER01MUVFJaEVBeGlDMEVOSVJBTVlRdEJEeUVRREdBTFFTVWhFQXhmQzBFVElSQU1YZ3RCRlNFUURGMExRUlloRUF4Y0MwRVhJUkFNV3d0QkdDRVFERm9MUVJraEVBeFpDMEVhSVJBTVdBdEJHeUVRREZjTFFSd2hFQXhXQzBFZElSQU1WUXRCSHlFUURGUUxRU0VoRUF4VEMwRWpJUkFNVWd0QnhnQWhFQXhSQzBFdUlSQU1VQXRCTHlFUURFOExRVHNoRUF4T0MwRTlJUkFNVFF0QnlBQWhFQXhNQzBISkFDRVFERXNMUWNzQUlSQU1TZ3RCekFBaEVBeEpDMEhPQUNFUURFZ0xRZEVBSVJBTVJ3dEIxUUFoRUF4R0MwSFlBQ0VRREVVTFFka0FJUkFNUkF0QjJ3QWhFQXhEQzBIa0FDRVFERUlMUWVVQUlSQU1RUXRCOFFBaEVBeEFDMEgwQUNFUUREOExRWTBCSVJBTVBndEJsd0VoRUF3OUMwR3BBU0VRRER3TFFhd0JJUkFNT3d0QndBRWhFQXc2QzBHNUFTRVFERGtMUWE4QklSQU1PQXRCc1FFaEVBdzNDMEd5QVNFUUREWUxRYlFCSVJBTU5RdEJ0UUVoRUF3MEMwRzZBU0VRRERNTFFiMEJJUkFNTWd0QnZ3RWhFQXd4QzBIQkFTRVFEREFMSUFCQkFEWUNIQ0FBSUFRMkFoUWdBRUhwaTRDQUFEWUNFQ0FBUVI4MkFneEJBQ0VRREVnTElBQkIyd0UyQWh3Z0FDQUVOZ0lVSUFCQitwYUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBeEhDeUFBUWZnQU5nSWNJQUFnRERZQ0ZDQUFRY3FZZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNUmdzZ0FFSFJBRFlDSENBQUlBVTJBaFFnQUVHd2w0Q0FBRFlDRUNBQVFSVTJBZ3hCQUNFUURFVUxJQUJCK1FBMkFod2dBQ0FCTmdJVUlBQWdFRFlDREVFQUlSQU1SQXNnQUVINEFEWUNIQ0FBSUFFMkFoUWdBRUhLbUlDQUFEWUNFQ0FBUVJVMkFneEJBQ0VRREVNTElBQkI1QUEyQWh3Z0FDQUJOZ0lVSUFCQjQ1ZUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBeENDeUFBUWRjQU5nSWNJQUFnQVRZQ0ZDQUFRY21YZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNUVFzZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWJtTmdJQUFOZ0lRSUFCQkdqWUNERUVBSVJBTVFBc2dBRUhDQURZQ0hDQUFJQUUyQWhRZ0FFSGptSUNBQURZQ0VDQUFRUlUyQWd4QkFDRVFERDhMSUFCQkFEWUNCQ0FBSUE4Z0R4Q3hnSUNBQUNJRVJRMEJJQUJCT2pZQ0hDQUFJQVEyQWd3Z0FDQVBRUUZxTmdJVVFRQWhFQXcrQ3lBQUtBSUVJUVFnQUVFQU5nSUVBa0FnQUNBRUlBRVFzWUNBZ0FBaUJFVU5BQ0FBUVRzMkFod2dBQ0FFTmdJTUlBQWdBVUVCYWpZQ0ZFRUFJUkFNUGdzZ0FVRUJhaUVCREMwTElBOUJBV29oQVF3dEN5QUFRUUEyQWh3Z0FDQVBOZ0lVSUFCQjVKS0FnQUEyQWhBZ0FFRUVOZ0lNUVFBaEVBdzdDeUFBUVRZMkFod2dBQ0FFTmdJVUlBQWdBallDREVFQUlSQU1PZ3NnQUVFdU5nSWNJQUFnRGpZQ0ZDQUFJQVEyQWd4QkFDRVFERGtMSUFCQjBBQTJBaHdnQUNBQk5nSVVJQUJCa1ppQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF3NEN5QU5RUUZxSVFFTUxBc2dBRUVWTmdJY0lBQWdBVFlDRkNBQVFZS1pnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1OZ3NnQUVFYk5nSWNJQUFnQVRZQ0ZDQUFRWkdYZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNTlFzZ0FFRVBOZ0ljSUFBZ0FUWUNGQ0FBUVpHWGdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTU5Bc2dBRUVMTmdJY0lBQWdBVFlDRkNBQVFaR1hnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1Nd3NnQUVFYU5nSWNJQUFnQVRZQ0ZDQUFRWUtaZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNTWdzZ0FFRUxOZ0ljSUFBZ0FUWUNGQ0FBUVlLWmdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTU1Rc2dBRUVLTmdJY0lBQWdBVFlDRkNBQVFlU1dnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1NQXNnQUVFZU5nSWNJQUFnQVRZQ0ZDQUFRZm1YZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNTHdzZ0FFRUFOZ0ljSUFBZ0VEWUNGQ0FBUWRxTmdJQUFOZ0lRSUFCQkZEWUNERUVBSVJBTUxnc2dBRUVFTmdJY0lBQWdBVFlDRkNBQVFiQ1lnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1MUXNnQUVFQU5nSUFJQXRCQVdvaEN3dEJ1QUVoRUF3U0N5QUFRUUEyQWdBZ0VFRUJhaUVCUWZVQUlSQU1FUXNnQVNFQkFrQWdBQzBBS1VFRlJ3MEFRZU1BSVJBTUVRdEI0Z0FoRUF3UUMwRUFJUkFnQUVFQU5nSWNJQUJCNUpHQWdBQTJBaEFnQUVFSE5nSU1JQUFnRkVFQmFqWUNGQXdvQ3lBQVFRQTJBZ0FnRjBFQmFpRUJRY0FBSVJBTURndEJBU0VCQ3lBQUlBRTZBQ3dnQUVFQU5nSUFJQmRCQVdvaEFRdEJLQ0VRREFzTElBRWhBUXRCT0NFUURBa0xBa0FnQVNJUElBSkdEUUFEUUFKQUlBOHRBQUJCZ0w2QWdBQnFMUUFBSWdGQkFVWU5BQ0FCUVFKSERRTWdEMEVCYWlFQkRBUUxJQTlCQVdvaUR5QUNSdzBBQzBFK0lSQU1JZ3RCUGlFUURDRUxJQUJCQURvQUxDQVBJUUVNQVF0QkN5RVFEQVlMUVRvaEVBd0ZDeUFCUVFGcUlRRkJMU0VRREFRTElBQWdBVG9BTENBQVFRQTJBZ0FnRmtFQmFpRUJRUXdoRUF3REN5QUFRUUEyQWdBZ0YwRUJhaUVCUVFvaEVBd0NDeUFBUVFBMkFnQUxJQUJCQURvQUxDQU5JUUZCQ1NFUURBQUxDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0N6WUNGQ0FBUWMyUWdJQUFOZ0lRSUFCQkNUWUNEQXdYQzBFQUlSQWdBRUVBTmdJY0lBQWdDallDRkNBQVFlbUtnSUFBTmdJUUlBQkJDVFlDREF3V0MwRUFJUkFnQUVFQU5nSWNJQUFnQ1RZQ0ZDQUFRYmVRZ0lBQU5nSVFJQUJCQ1RZQ0RBd1ZDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0NEWUNGQ0FBUVp5UmdJQUFOZ0lRSUFCQkNUWUNEQXdVQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFjMlFnSUFBTmdJUUlBQkJDVFlDREF3VEMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZW1LZ0lBQU5nSVFJQUJCQ1RZQ0RBd1NDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWJlUWdJQUFOZ0lRSUFCQkNUWUNEQXdSQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFaeVJnSUFBTmdJUUlBQkJDVFlDREF3UUMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRWmVWZ0lBQU5nSVFJQUJCRHpZQ0RBd1BDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVplVmdJQUFOZ0lRSUFCQkR6WUNEQXdPQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFjQ1NnSUFBTmdJUUlBQkJDellDREF3TkMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRWldKZ0lBQU5nSVFJQUJCQ3pZQ0RBd01DMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWVHUGdJQUFOZ0lRSUFCQkNqWUNEQXdMQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFmdVBnSUFBTmdJUUlBQkJDallDREF3S0MwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZkdaZ0lBQU5nSVFJQUJCQWpZQ0RBd0pDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWNTVWdJQUFOZ0lRSUFCQkFqWUNEQXdJQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFmS1ZnSUFBTmdJUUlBQkJBallDREF3SEN5QUFRUUkyQWh3Z0FDQUJOZ0lVSUFCQm5KcUFnQUEyQWhBZ0FFRVdOZ0lNUVFBaEVBd0dDMEVCSVJBTUJRdEIxQUFoRUNBQklnUWdBa1lOQkNBRFFRaHFJQUFnQkNBQ1FkakNnSUFBUVFvUXhZQ0FnQUFnQXlnQ0RDRUVJQU1vQWdnT0F3RUVBZ0FMRU1xQWdJQUFBQXNnQUVFQU5nSWNJQUJCdFpxQWdBQTJBaEFnQUVFWE5nSU1JQUFnQkVFQmFqWUNGRUVBSVJBTUFnc2dBRUVBTmdJY0lBQWdCRFlDRkNBQVFjcWFnSUFBTmdJUUlBQkJDVFlDREVFQUlSQU1BUXNDUUNBQklnUWdBa2NOQUVFaUlSQU1BUXNnQUVHSmdJQ0FBRFlDQ0NBQUlBUTJBZ1JCSVNFUUN5QURRUkJxSklDQWdJQUFJQkFMcndFQkFuOGdBU2dDQUNFR0FrQUNRQ0FDSUFOR0RRQWdCQ0FHYWlFRUlBWWdBMm9nQW1zaEJ5QUNJQVpCZjNNZ0JXb2lCbW9oQlFOQUFrQWdBaTBBQUNBRUxRQUFSZzBBUVFJaEJBd0RDd0pBSUFZTkFFRUFJUVFnQlNFQ0RBTUxJQVpCZjJvaEJpQUVRUUZxSVFRZ0FrRUJhaUlDSUFOSERRQUxJQWNoQmlBRElRSUxJQUJCQVRZQ0FDQUJJQVkyQWdBZ0FDQUNOZ0lFRHdzZ0FVRUFOZ0lBSUFBZ0JEWUNBQ0FBSUFJMkFnUUxDZ0FnQUJESGdJQ0FBQXZ5TmdFTGZ5T0FnSUNBQUVFUWF5SUJKSUNBZ0lBQUFrQkJBQ2dDb05DQWdBQU5BRUVBRU11QWdJQUFRWURVaElBQWF5SUNRZGtBU1EwQVFRQWhBd0pBUVFBb0F1RFRnSUFBSWdRTkFFRUFRbjgzQXV6VGdJQUFRUUJDZ0lDRWdJQ0F3QUEzQXVUVGdJQUFRUUFnQVVFSWFrRndjVUhZcXRXcUJYTWlCRFlDNE5PQWdBQkJBRUVBTmdMMDA0Q0FBRUVBUVFBMkFzVFRnSUFBQzBFQUlBSTJBc3pUZ0lBQVFRQkJnTlNFZ0FBMkFzalRnSUFBUVFCQmdOU0VnQUEyQXBqUWdJQUFRUUFnQkRZQ3JOQ0FnQUJCQUVGL05nS28wSUNBQUFOQUlBTkJ4TkNBZ0FCcUlBTkJ1TkNBZ0FCcUlnUTJBZ0FnQkNBRFFiRFFnSUFBYWlJRk5nSUFJQU5Cdk5DQWdBQnFJQVUyQWdBZ0EwSE0wSUNBQUdvZ0EwSEEwSUNBQUdvaUJUWUNBQ0FGSUFRMkFnQWdBMEhVMElDQUFHb2dBMEhJMElDQUFHb2lCRFlDQUNBRUlBVTJBZ0FnQTBIUTBJQ0FBR29nQkRZQ0FDQURRU0JxSWdOQmdBSkhEUUFMUVlEVWhJQUFRWGhCZ05TRWdBQnJRUTl4UVFCQmdOU0VnQUJCQ0dwQkQzRWJJZ05xSWdSQkJHb2dBa0ZJYWlJRklBTnJJZ05CQVhJMkFnQkJBRUVBS0FMdzA0Q0FBRFlDcE5DQWdBQkJBQ0FETmdLVTBJQ0FBRUVBSUFRMkFxRFFnSUFBUVlEVWhJQUFJQVZxUVRnMkFnUUxBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUlBQkI3QUZMRFFBQ1FFRUFLQUtJMElDQUFDSUdRUkFnQUVFVGFrRndjU0FBUVF0Skd5SUNRUU4ySWdSMklnTkJBM0ZGRFFBQ1FBSkFJQU5CQVhFZ0JISkJBWE1pQlVFRGRDSUVRYkRRZ0lBQWFpSURJQVJCdU5DQWdBQnFLQUlBSWdRb0FnZ2lBa2NOQUVFQUlBWkJmaUFGZDNFMkFvalFnSUFBREFFTElBTWdBallDQ0NBQ0lBTTJBZ3dMSUFSQkNHb2hBeUFFSUFWQkEzUWlCVUVEY2pZQ0JDQUVJQVZxSWdRZ0JDZ0NCRUVCY2pZQ0JBd01DeUFDUVFBb0FwRFFnSUFBSWdkTkRRRUNRQ0FEUlEwQUFrQUNRQ0FESUFSMFFRSWdCSFFpQTBFQUlBTnJjbkVpQTBFQUlBTnJjVUYvYWlJRElBTkJESFpCRUhFaUEzWWlCRUVGZGtFSWNTSUZJQU55SUFRZ0JYWWlBMEVDZGtFRWNTSUVjaUFESUFSMklnTkJBWFpCQW5FaUJISWdBeUFFZGlJRFFRRjJRUUZ4SWdSeUlBTWdCSFpxSWdSQkEzUWlBMEd3MElDQUFHb2lCU0FEUWJqUWdJQUFhaWdDQUNJREtBSUlJZ0JIRFFCQkFDQUdRWDRnQkhkeElnWTJBb2pRZ0lBQURBRUxJQVVnQURZQ0NDQUFJQVUyQWd3TElBTWdBa0VEY2pZQ0JDQURJQVJCQTNRaUJHb2dCQ0FDYXlJRk5nSUFJQU1nQW1vaUFDQUZRUUZ5TmdJRUFrQWdCMFVOQUNBSFFYaHhRYkRRZ0lBQWFpRUNRUUFvQXB6UWdJQUFJUVFDUUFKQUlBWkJBU0FIUVFOMmRDSUljUTBBUVFBZ0JpQUljallDaU5DQWdBQWdBaUVJREFFTElBSW9BZ2doQ0FzZ0NDQUVOZ0lNSUFJZ0JEWUNDQ0FFSUFJMkFnd2dCQ0FJTmdJSUN5QURRUWhxSVFOQkFDQUFOZ0tjMElDQUFFRUFJQVUyQXBEUWdJQUFEQXdMUVFBb0FvelFnSUFBSWdsRkRRRWdDVUVBSUFscmNVRi9haUlESUFOQkRIWkJFSEVpQTNZaUJFRUZka0VJY1NJRklBTnlJQVFnQlhZaUEwRUNka0VFY1NJRWNpQURJQVIySWdOQkFYWkJBbkVpQkhJZ0F5QUVkaUlEUVFGMlFRRnhJZ1J5SUFNZ0JIWnFRUUowUWJqU2dJQUFhaWdDQUNJQUtBSUVRWGh4SUFKcklRUWdBQ0VGQWtBRFFBSkFJQVVvQWhBaUF3MEFJQVZCRkdvb0FnQWlBMFVOQWdzZ0F5Z0NCRUY0Y1NBQ2F5SUZJQVFnQlNBRVNTSUZHeUVFSUFNZ0FDQUZHeUVBSUFNaEJRd0FDd3NnQUNnQ0dDRUtBa0FnQUNnQ0RDSUlJQUJHRFFBZ0FDZ0NDQ0lEUVFBb0FwalFnSUFBU1JvZ0NDQUROZ0lJSUFNZ0NEWUNEQXdMQ3dKQUlBQkJGR29pQlNnQ0FDSUREUUFnQUNnQ0VDSURSUTBESUFCQkVHb2hCUXNEUUNBRklRc2dBeUlJUVJScUlnVW9BZ0FpQXcwQUlBaEJFR29oQlNBSUtBSVFJZ01OQUFzZ0MwRUFOZ0lBREFvTFFYOGhBaUFBUWI5L1N3MEFJQUJCRTJvaUEwRndjU0VDUVFBb0FvelFnSUFBSWdkRkRRQkJBQ0VMQWtBZ0FrR0FBa2tOQUVFZklRc2dBa0gvLy84SFN3MEFJQU5CQ0hZaUF5QURRWUQrUDJwQkVIWkJDSEVpQTNRaUJDQUVRWURnSDJwQkVIWkJCSEVpQkhRaUJTQUZRWUNBRDJwQkVIWkJBbkVpQlhSQkQzWWdBeUFFY2lBRmNtc2lBMEVCZENBQ0lBTkJGV3AyUVFGeGNrRWNhaUVMQzBFQUlBSnJJUVFDUUFKQUFrQUNRQ0FMUVFKMFFialNnSUFBYWlnQ0FDSUZEUUJCQUNFRFFRQWhDQXdCQzBFQUlRTWdBa0VBUVJrZ0MwRUJkbXNnQzBFZlJodDBJUUJCQUNFSUEwQUNRQ0FGS0FJRVFYaHhJQUpySWdZZ0JFOE5BQ0FHSVFRZ0JTRUlJQVlOQUVFQUlRUWdCU0VJSUFVaEF3d0RDeUFESUFWQkZHb29BZ0FpQmlBR0lBVWdBRUVkZGtFRWNXcEJFR29vQWdBaUJVWWJJQU1nQmhzaEF5QUFRUUYwSVFBZ0JRMEFDd3NDUUNBRElBaHlEUUJCQUNFSVFRSWdDM1FpQTBFQUlBTnJjaUFIY1NJRFJRMERJQU5CQUNBRGEzRkJmMm9pQXlBRFFReDJRUkJ4SWdOMklnVkJCWFpCQ0hFaUFDQURjaUFGSUFCMklnTkJBblpCQkhFaUJYSWdBeUFGZGlJRFFRRjJRUUp4SWdWeUlBTWdCWFlpQTBFQmRrRUJjU0lGY2lBRElBVjJha0VDZEVHNDBvQ0FBR29vQWdBaEF3c2dBMFVOQVFzRFFDQURLQUlFUVhoeElBSnJJZ1lnQkVraEFBSkFJQU1vQWhBaUJRMEFJQU5CRkdvb0FnQWhCUXNnQmlBRUlBQWJJUVFnQXlBSUlBQWJJUWdnQlNFRElBVU5BQXNMSUFoRkRRQWdCRUVBS0FLUTBJQ0FBQ0FDYTA4TkFDQUlLQUlZSVFzQ1FDQUlLQUlNSWdBZ0NFWU5BQ0FJS0FJSUlnTkJBQ2dDbU5DQWdBQkpHaUFBSUFNMkFnZ2dBeUFBTmdJTURBa0xBa0FnQ0VFVWFpSUZLQUlBSWdNTkFDQUlLQUlRSWdORkRRTWdDRUVRYWlFRkN3TkFJQVVoQmlBRElnQkJGR29pQlNnQ0FDSUREUUFnQUVFUWFpRUZJQUFvQWhBaUF3MEFDeUFHUVFBMkFnQU1DQXNDUUVFQUtBS1EwSUNBQUNJRElBSkpEUUJCQUNnQ25OQ0FnQUFoQkFKQUFrQWdBeUFDYXlJRlFSQkpEUUFnQkNBQ2FpSUFJQVZCQVhJMkFnUkJBQ0FGTmdLUTBJQ0FBRUVBSUFBMkFwelFnSUFBSUFRZ0Eyb2dCVFlDQUNBRUlBSkJBM0kyQWdRTUFRc2dCQ0FEUVFOeU5nSUVJQVFnQTJvaUF5QURLQUlFUVFGeU5nSUVRUUJCQURZQ25OQ0FnQUJCQUVFQU5nS1EwSUNBQUFzZ0JFRUlhaUVEREFvTEFrQkJBQ2dDbE5DQWdBQWlBQ0FDVFEwQVFRQW9BcURRZ0lBQUlnTWdBbW9pQkNBQUlBSnJJZ1ZCQVhJMkFnUkJBQ0FGTmdLVTBJQ0FBRUVBSUFRMkFxRFFnSUFBSUFNZ0FrRURjallDQkNBRFFRaHFJUU1NQ2dzQ1FBSkFRUUFvQXVEVGdJQUFSUTBBUVFBb0F1alRnSUFBSVFRTUFRdEJBRUovTndMczA0Q0FBRUVBUW9DQWhJQ0FnTUFBTndMazA0Q0FBRUVBSUFGQkRHcEJjSEZCMktyVnFnVnpOZ0xnMDRDQUFFRUFRUUEyQXZUVGdJQUFRUUJCQURZQ3hOT0FnQUJCZ0lBRUlRUUxRUUFoQXdKQUlBUWdBa0hIQUdvaUIyb2lCa0VBSUFScklndHhJZ2dnQWtzTkFFRUFRVEEyQXZqVGdJQUFEQW9MQWtCQkFDZ0N3Tk9BZ0FBaUEwVU5BQUpBUVFBb0FyalRnSUFBSWdRZ0NHb2lCU0FFVFEwQUlBVWdBMDBOQVF0QkFDRURRUUJCTURZQytOT0FnQUFNQ2d0QkFDMEF4Tk9BZ0FCQkJIRU5CQUpBQWtBQ1FFRUFLQUtnMElDQUFDSUVSUTBBUWNqVGdJQUFJUU1EUUFKQUlBTW9BZ0FpQlNBRVN3MEFJQVVnQXlnQ0JHb2dCRXNOQXdzZ0F5Z0NDQ0lERFFBTEMwRUFFTXVBZ0lBQUlnQkJmMFlOQlNBSUlRWUNRRUVBS0FMazA0Q0FBQ0lEUVg5cUlnUWdBSEZGRFFBZ0NDQUFheUFFSUFCcVFRQWdBMnR4YWlFR0N5QUdJQUpORFFVZ0JrSCsvLy8vQjBzTkJRSkFRUUFvQXNEVGdJQUFJZ05GRFFCQkFDZ0N1Tk9BZ0FBaUJDQUdhaUlGSUFSTkRRWWdCU0FEU3cwR0N5QUdFTXVBZ0lBQUlnTWdBRWNOQVF3SEN5QUdJQUJySUF0eElnWkIvdi8vL3dkTERRUWdCaERMZ0lDQUFDSUFJQU1vQWdBZ0F5Z0NCR3BHRFFNZ0FDRURDd0pBSUFOQmYwWU5BQ0FDUWNnQWFpQUdUUTBBQWtBZ0J5QUdhMEVBS0FMbzA0Q0FBQ0lFYWtFQUlBUnJjU0lFUWY3Ly8vOEhUUTBBSUFNaEFBd0hDd0pBSUFRUXk0Q0FnQUJCZjBZTkFDQUVJQVpxSVFZZ0F5RUFEQWNMUVFBZ0Jtc1F5NENBZ0FBYURBUUxJQU1oQUNBRFFYOUhEUVVNQXd0QkFDRUlEQWNMUVFBaEFBd0ZDeUFBUVg5SERRSUxRUUJCQUNnQ3hOT0FnQUJCQkhJMkFzVFRnSUFBQ3lBSVFmNy8vLzhIU3cwQklBZ1F5NENBZ0FBaEFFRUFFTXVBZ0lBQUlRTWdBRUYvUmcwQklBTkJmMFlOQVNBQUlBTlBEUUVnQXlBQWF5SUdJQUpCT0dwTkRRRUxRUUJCQUNnQ3VOT0FnQUFnQm1vaUF6WUN1Tk9BZ0FBQ1FDQURRUUFvQXJ6VGdJQUFUUTBBUVFBZ0F6WUN2Tk9BZ0FBTEFrQUNRQUpBQWtCQkFDZ0NvTkNBZ0FBaUJFVU5BRUhJMDRDQUFDRURBMEFnQUNBREtBSUFJZ1VnQXlnQ0JDSUlha1lOQWlBREtBSUlJZ01OQUF3REN3c0NRQUpBUVFBb0FwalFnSUFBSWdORkRRQWdBQ0FEVHcwQkMwRUFJQUEyQXBqUWdJQUFDMEVBSVFOQkFDQUdOZ0xNMDRDQUFFRUFJQUEyQXNqVGdJQUFRUUJCZnpZQ3FOQ0FnQUJCQUVFQUtBTGcwNENBQURZQ3JOQ0FnQUJCQUVFQU5nTFUwNENBQUFOQUlBTkJ4TkNBZ0FCcUlBTkJ1TkNBZ0FCcUlnUTJBZ0FnQkNBRFFiRFFnSUFBYWlJRk5nSUFJQU5Cdk5DQWdBQnFJQVUyQWdBZ0EwSE0wSUNBQUdvZ0EwSEEwSUNBQUdvaUJUWUNBQ0FGSUFRMkFnQWdBMEhVMElDQUFHb2dBMEhJMElDQUFHb2lCRFlDQUNBRUlBVTJBZ0FnQTBIUTBJQ0FBR29nQkRZQ0FDQURRU0JxSWdOQmdBSkhEUUFMSUFCQmVDQUFhMEVQY1VFQUlBQkJDR3BCRDNFYklnTnFJZ1FnQmtGSWFpSUZJQU5ySWdOQkFYSTJBZ1JCQUVFQUtBTHcwNENBQURZQ3BOQ0FnQUJCQUNBRE5nS1UwSUNBQUVFQUlBUTJBcURRZ0lBQUlBQWdCV3BCT0RZQ0JBd0NDeUFETFFBTVFRaHhEUUFnQkNBRlNRMEFJQVFnQUU4TkFDQUVRWGdnQkd0QkQzRkJBQ0FFUVFocVFROXhHeUlGYWlJQVFRQW9BcFRRZ0lBQUlBWnFJZ3NnQldzaUJVRUJjallDQkNBRElBZ2dCbW8yQWdSQkFFRUFLQUx3MDRDQUFEWUNwTkNBZ0FCQkFDQUZOZ0tVMElDQUFFRUFJQUEyQXFEUWdJQUFJQVFnQzJwQk9EWUNCQXdCQ3dKQUlBQkJBQ2dDbU5DQWdBQWlDRThOQUVFQUlBQTJBcGpRZ0lBQUlBQWhDQXNnQUNBR2FpRUZRY2pUZ0lBQUlRTUNRQUpBQWtBQ1FBSkFBa0FDUUFOQUlBTW9BZ0FnQlVZTkFTQURLQUlJSWdNTkFBd0NDd3NnQXkwQURFRUljVVVOQVF0QnlOT0FnQUFoQXdOQUFrQWdBeWdDQUNJRklBUkxEUUFnQlNBREtBSUVhaUlGSUFSTERRTUxJQU1vQWdnaEF3d0FDd3NnQXlBQU5nSUFJQU1nQXlnQ0JDQUdhallDQkNBQVFYZ2dBR3RCRDNGQkFDQUFRUWhxUVE5eEcyb2lDeUFDUVFOeU5nSUVJQVZCZUNBRmEwRVBjVUVBSUFWQkNHcEJEM0ViYWlJR0lBc2dBbW9pQW1zaEF3SkFJQVlnQkVjTkFFRUFJQUkyQXFEUWdJQUFRUUJCQUNnQ2xOQ0FnQUFnQTJvaUF6WUNsTkNBZ0FBZ0FpQURRUUZ5TmdJRURBTUxBa0FnQmtFQUtBS2MwSUNBQUVjTkFFRUFJQUkyQXB6UWdJQUFRUUJCQUNnQ2tOQ0FnQUFnQTJvaUF6WUNrTkNBZ0FBZ0FpQURRUUZ5TmdJRUlBSWdBMm9nQXpZQ0FBd0RDd0pBSUFZb0FnUWlCRUVEY1VFQlJ3MEFJQVJCZUhFaEJ3SkFBa0FnQkVIL0FVc05BQ0FHS0FJSUlnVWdCRUVEZGlJSVFRTjBRYkRRZ0lBQWFpSUFSaG9DUUNBR0tBSU1JZ1FnQlVjTkFFRUFRUUFvQW9qUWdJQUFRWDRnQ0hkeE5nS0kwSUNBQUF3Q0N5QUVJQUJHR2lBRUlBVTJBZ2dnQlNBRU5nSU1EQUVMSUFZb0FoZ2hDUUpBQWtBZ0JpZ0NEQ0lBSUFaR0RRQWdCaWdDQ0NJRUlBaEpHaUFBSUFRMkFnZ2dCQ0FBTmdJTURBRUxBa0FnQmtFVWFpSUVLQUlBSWdVTkFDQUdRUkJxSWdRb0FnQWlCUTBBUVFBaEFBd0JDd05BSUFRaENDQUZJZ0JCRkdvaUJDZ0NBQ0lGRFFBZ0FFRVFhaUVFSUFBb0FoQWlCUTBBQ3lBSVFRQTJBZ0FMSUFsRkRRQUNRQUpBSUFZZ0JpZ0NIQ0lGUVFKMFFialNnSUFBYWlJRUtBSUFSdzBBSUFRZ0FEWUNBQ0FBRFFGQkFFRUFLQUtNMElDQUFFRitJQVYzY1RZQ2pOQ0FnQUFNQWdzZ0NVRVFRUlFnQ1NnQ0VDQUdSaHRxSUFBMkFnQWdBRVVOQVFzZ0FDQUpOZ0lZQWtBZ0JpZ0NFQ0lFUlEwQUlBQWdCRFlDRUNBRUlBQTJBaGdMSUFZb0FoUWlCRVVOQUNBQVFSUnFJQVEyQWdBZ0JDQUFOZ0lZQ3lBSElBTnFJUU1nQmlBSGFpSUdLQUlFSVFRTElBWWdCRUYrY1RZQ0JDQUNJQU5xSUFNMkFnQWdBaUFEUVFGeU5nSUVBa0FnQTBIL0FVc05BQ0FEUVhoeFFiRFFnSUFBYWlFRUFrQUNRRUVBS0FLSTBJQ0FBQ0lGUVFFZ0EwRURkblFpQTNFTkFFRUFJQVVnQTNJMkFvalFnSUFBSUFRaEF3d0JDeUFFS0FJSUlRTUxJQU1nQWpZQ0RDQUVJQUkyQWdnZ0FpQUVOZ0lNSUFJZ0F6WUNDQXdEQzBFZklRUUNRQ0FEUWYvLy93ZExEUUFnQTBFSWRpSUVJQVJCZ1A0L2FrRVFka0VJY1NJRWRDSUZJQVZCZ09BZmFrRVFka0VFY1NJRmRDSUFJQUJCZ0lBUGFrRVFka0VDY1NJQWRFRVBkaUFFSUFWeUlBQnlheUlFUVFGMElBTWdCRUVWYW5aQkFYRnlRUnhxSVFRTElBSWdCRFlDSENBQ1FnQTNBaEFnQkVFQ2RFRzQwb0NBQUdvaEJRSkFRUUFvQW96UWdJQUFJZ0JCQVNBRWRDSUljUTBBSUFVZ0FqWUNBRUVBSUFBZ0NISTJBb3pRZ0lBQUlBSWdCVFlDR0NBQ0lBSTJBZ2dnQWlBQ05nSU1EQU1MSUFOQkFFRVpJQVJCQVhacklBUkJIMFliZENFRUlBVW9BZ0FoQUFOQUlBQWlCU2dDQkVGNGNTQURSZzBDSUFSQkhYWWhBQ0FFUVFGMElRUWdCU0FBUVFSeGFrRVFhaUlJS0FJQUlnQU5BQXNnQ0NBQ05nSUFJQUlnQlRZQ0dDQUNJQUkyQWd3Z0FpQUNOZ0lJREFJTElBQkJlQ0FBYTBFUGNVRUFJQUJCQ0dwQkQzRWJJZ05xSWdzZ0JrRklhaUlJSUFOcklnTkJBWEkyQWdRZ0FDQUlha0U0TmdJRUlBUWdCVUUzSUFWclFROXhRUUFnQlVGSmFrRVBjUnRxUVVGcUlnZ2dDQ0FFUVJCcVNSc2lDRUVqTmdJRVFRQkJBQ2dDOE5PQWdBQTJBcVRRZ0lBQVFRQWdBellDbE5DQWdBQkJBQ0FMTmdLZzBJQ0FBQ0FJUVJCcVFRQXBBdERUZ0lBQU53SUFJQWhCQUNrQ3lOT0FnQUEzQWdoQkFDQUlRUWhxTmdMUTA0Q0FBRUVBSUFZMkFzelRnSUFBUVFBZ0FEWUN5Tk9BZ0FCQkFFRUFOZ0xVMDRDQUFDQUlRU1JxSVFNRFFDQURRUWMyQWdBZ0EwRUVhaUlESUFWSkRRQUxJQWdnQkVZTkF5QUlJQWdvQWdSQmZuRTJBZ1FnQ0NBSUlBUnJJZ0EyQWdBZ0JDQUFRUUZ5TmdJRUFrQWdBRUgvQVVzTkFDQUFRWGh4UWJEUWdJQUFhaUVEQWtBQ1FFRUFLQUtJMElDQUFDSUZRUUVnQUVFRGRuUWlBSEVOQUVFQUlBVWdBSEkyQW9qUWdJQUFJQU1oQlF3QkN5QURLQUlJSVFVTElBVWdCRFlDRENBRElBUTJBZ2dnQkNBRE5nSU1JQVFnQlRZQ0NBd0VDMEVmSVFNQ1FDQUFRZi8vL3dkTERRQWdBRUVJZGlJRElBTkJnUDQvYWtFUWRrRUljU0lEZENJRklBVkJnT0FmYWtFUWRrRUVjU0lGZENJSUlBaEJnSUFQYWtFUWRrRUNjU0lJZEVFUGRpQURJQVZ5SUFoeWF5SURRUUYwSUFBZ0EwRVZhblpCQVhGeVFSeHFJUU1MSUFRZ0F6WUNIQ0FFUWdBM0FoQWdBMEVDZEVHNDBvQ0FBR29oQlFKQVFRQW9Bb3pRZ0lBQUlnaEJBU0FEZENJR2NRMEFJQVVnQkRZQ0FFRUFJQWdnQm5JMkFvelFnSUFBSUFRZ0JUWUNHQ0FFSUFRMkFnZ2dCQ0FFTmdJTURBUUxJQUJCQUVFWklBTkJBWFpySUFOQkgwWWJkQ0VESUFVb0FnQWhDQU5BSUFnaUJTZ0NCRUY0Y1NBQVJnMERJQU5CSFhZaENDQURRUUYwSVFNZ0JTQUlRUVJ4YWtFUWFpSUdLQUlBSWdnTkFBc2dCaUFFTmdJQUlBUWdCVFlDR0NBRUlBUTJBZ3dnQkNBRU5nSUlEQU1MSUFVb0FnZ2lBeUFDTmdJTUlBVWdBallDQ0NBQ1FRQTJBaGdnQWlBRk5nSU1JQUlnQXpZQ0NBc2dDMEVJYWlFRERBVUxJQVVvQWdnaUF5QUVOZ0lNSUFVZ0JEWUNDQ0FFUVFBMkFoZ2dCQ0FGTmdJTUlBUWdBellDQ0F0QkFDZ0NsTkNBZ0FBaUF5QUNUUTBBUVFBb0FxRFFnSUFBSWdRZ0Ftb2lCU0FESUFKcklnTkJBWEkyQWdSQkFDQUROZ0tVMElDQUFFRUFJQVUyQXFEUWdJQUFJQVFnQWtFRGNqWUNCQ0FFUVFocUlRTU1Bd3RCQUNFRFFRQkJNRFlDK05PQWdBQU1BZ3NDUUNBTFJRMEFBa0FDUUNBSUlBZ29BaHdpQlVFQ2RFRzQwb0NBQUdvaUF5Z0NBRWNOQUNBRElBQTJBZ0FnQUEwQlFRQWdCMEYrSUFWM2NTSUhOZ0tNMElDQUFBd0NDeUFMUVJCQkZDQUxLQUlRSUFoR0cyb2dBRFlDQUNBQVJRMEJDeUFBSUFzMkFoZ0NRQ0FJS0FJUUlnTkZEUUFnQUNBRE5nSVFJQU1nQURZQ0dBc2dDRUVVYWlnQ0FDSURSUTBBSUFCQkZHb2dBellDQUNBRElBQTJBaGdMQWtBQ1FDQUVRUTlMRFFBZ0NDQUVJQUpxSWdOQkEzSTJBZ1FnQ0NBRGFpSURJQU1vQWdSQkFYSTJBZ1FNQVFzZ0NDQUNhaUlBSUFSQkFYSTJBZ1FnQ0NBQ1FRTnlOZ0lFSUFBZ0JHb2dCRFlDQUFKQUlBUkIvd0ZMRFFBZ0JFRjRjVUd3MElDQUFHb2hBd0pBQWtCQkFDZ0NpTkNBZ0FBaUJVRUJJQVJCQTNaMElnUnhEUUJCQUNBRklBUnlOZ0tJMElDQUFDQURJUVFNQVFzZ0F5Z0NDQ0VFQ3lBRUlBQTJBZ3dnQXlBQU5nSUlJQUFnQXpZQ0RDQUFJQVEyQWdnTUFRdEJIeUVEQWtBZ0JFSC8vLzhIU3cwQUlBUkJDSFlpQXlBRFFZRCtQMnBCRUhaQkNIRWlBM1FpQlNBRlFZRGdIMnBCRUhaQkJIRWlCWFFpQWlBQ1FZQ0FEMnBCRUhaQkFuRWlBblJCRDNZZ0F5QUZjaUFDY21zaUEwRUJkQ0FFSUFOQkZXcDJRUUZ4Y2tFY2FpRURDeUFBSUFNMkFod2dBRUlBTndJUUlBTkJBblJCdU5LQWdBQnFJUVVDUUNBSFFRRWdBM1FpQW5FTkFDQUZJQUEyQWdCQkFDQUhJQUp5TmdLTTBJQ0FBQ0FBSUFVMkFoZ2dBQ0FBTmdJSUlBQWdBRFlDREF3QkN5QUVRUUJCR1NBRFFRRjJheUFEUVI5R0czUWhBeUFGS0FJQUlRSUNRQU5BSUFJaUJTZ0NCRUY0Y1NBRVJnMEJJQU5CSFhZaEFpQURRUUYwSVFNZ0JTQUNRUVJ4YWtFUWFpSUdLQUlBSWdJTkFBc2dCaUFBTmdJQUlBQWdCVFlDR0NBQUlBQTJBZ3dnQUNBQU5nSUlEQUVMSUFVb0FnZ2lBeUFBTmdJTUlBVWdBRFlDQ0NBQVFRQTJBaGdnQUNBRk5nSU1JQUFnQXpZQ0NBc2dDRUVJYWlFRERBRUxBa0FnQ2tVTkFBSkFBa0FnQUNBQUtBSWNJZ1ZCQW5SQnVOS0FnQUJxSWdNb0FnQkhEUUFnQXlBSU5nSUFJQWdOQVVFQUlBbEJmaUFGZDNFMkFvelFnSUFBREFJTElBcEJFRUVVSUFvb0FoQWdBRVliYWlBSU5nSUFJQWhGRFFFTElBZ2dDallDR0FKQUlBQW9BaEFpQTBVTkFDQUlJQU0yQWhBZ0F5QUlOZ0lZQ3lBQVFSUnFLQUlBSWdORkRRQWdDRUVVYWlBRE5nSUFJQU1nQ0RZQ0dBc0NRQUpBSUFSQkQwc05BQ0FBSUFRZ0Ftb2lBMEVEY2pZQ0JDQUFJQU5xSWdNZ0F5Z0NCRUVCY2pZQ0JBd0JDeUFBSUFKcUlnVWdCRUVCY2pZQ0JDQUFJQUpCQTNJMkFnUWdCU0FFYWlBRU5nSUFBa0FnQjBVTkFDQUhRWGh4UWJEUWdJQUFhaUVDUVFBb0FwelFnSUFBSVFNQ1FBSkFRUUVnQjBFRGRuUWlDQ0FHY1EwQVFRQWdDQ0FHY2pZQ2lOQ0FnQUFnQWlFSURBRUxJQUlvQWdnaENBc2dDQ0FETmdJTUlBSWdBellDQ0NBRElBSTJBZ3dnQXlBSU5nSUlDMEVBSUFVMkFwelFnSUFBUVFBZ0JEWUNrTkNBZ0FBTElBQkJDR29oQXdzZ0FVRVFhaVNBZ0lDQUFDQURDd29BSUFBUXlZQ0FnQUFMNGcwQkIzOENRQ0FBUlEwQUlBQkJlR29pQVNBQVFYeHFLQUlBSWdKQmVIRWlBR29oQXdKQUlBSkJBWEVOQUNBQ1FRTnhSUTBCSUFFZ0FTZ0NBQ0lDYXlJQlFRQW9BcGpRZ0lBQUlnUkpEUUVnQWlBQWFpRUFBa0FnQVVFQUtBS2MwSUNBQUVZTkFBSkFJQUpCL3dGTERRQWdBU2dDQ0NJRUlBSkJBM1lpQlVFRGRFR3cwSUNBQUdvaUJrWWFBa0FnQVNnQ0RDSUNJQVJIRFFCQkFFRUFLQUtJMElDQUFFRitJQVYzY1RZQ2lOQ0FnQUFNQXdzZ0FpQUdSaG9nQWlBRU5nSUlJQVFnQWpZQ0RBd0NDeUFCS0FJWUlRY0NRQUpBSUFFb0Fnd2lCaUFCUmcwQUlBRW9BZ2dpQWlBRVNSb2dCaUFDTmdJSUlBSWdCallDREF3QkN3SkFJQUZCRkdvaUFpZ0NBQ0lFRFFBZ0FVRVFhaUlDS0FJQUlnUU5BRUVBSVFZTUFRc0RRQ0FDSVFVZ0JDSUdRUlJxSWdJb0FnQWlCQTBBSUFaQkVHb2hBaUFHS0FJUUlnUU5BQXNnQlVFQU5nSUFDeUFIUlEwQkFrQUNRQ0FCSUFFb0Fod2lCRUVDZEVHNDBvQ0FBR29pQWlnQ0FFY05BQ0FDSUFZMkFnQWdCZzBCUVFCQkFDZ0NqTkNBZ0FCQmZpQUVkM0UyQW96UWdJQUFEQU1MSUFkQkVFRVVJQWNvQWhBZ0FVWWJhaUFHTmdJQUlBWkZEUUlMSUFZZ0J6WUNHQUpBSUFFb0FoQWlBa1VOQUNBR0lBSTJBaEFnQWlBR05nSVlDeUFCS0FJVUlnSkZEUUVnQmtFVWFpQUNOZ0lBSUFJZ0JqWUNHQXdCQ3lBREtBSUVJZ0pCQTNGQkEwY05BQ0FESUFKQmZuRTJBZ1JCQUNBQU5nS1EwSUNBQUNBQklBQnFJQUEyQWdBZ0FTQUFRUUZ5TmdJRUR3c2dBU0FEVHcwQUlBTW9BZ1FpQWtFQmNVVU5BQUpBQWtBZ0FrRUNjUTBBQWtBZ0EwRUFLQUtnMElDQUFFY05BRUVBSUFFMkFxRFFnSUFBUVFCQkFDZ0NsTkNBZ0FBZ0FHb2lBRFlDbE5DQWdBQWdBU0FBUVFGeU5nSUVJQUZCQUNnQ25OQ0FnQUJIRFFOQkFFRUFOZ0tRMElDQUFFRUFRUUEyQXB6UWdJQUFEd3NDUUNBRFFRQW9BcHpRZ0lBQVJ3MEFRUUFnQVRZQ25OQ0FnQUJCQUVFQUtBS1EwSUNBQUNBQWFpSUFOZ0tRMElDQUFDQUJJQUJCQVhJMkFnUWdBU0FBYWlBQU5nSUFEd3NnQWtGNGNTQUFhaUVBQWtBQ1FDQUNRZjhCU3cwQUlBTW9BZ2dpQkNBQ1FRTjJJZ1ZCQTNSQnNOQ0FnQUJxSWdaR0dnSkFJQU1vQWd3aUFpQUVSdzBBUVFCQkFDZ0NpTkNBZ0FCQmZpQUZkM0UyQW9qUWdJQUFEQUlMSUFJZ0JrWWFJQUlnQkRZQ0NDQUVJQUkyQWd3TUFRc2dBeWdDR0NFSEFrQUNRQ0FES0FJTUlnWWdBMFlOQUNBREtBSUlJZ0pCQUNnQ21OQ0FnQUJKR2lBR0lBSTJBZ2dnQWlBR05nSU1EQUVMQWtBZ0EwRVVhaUlDS0FJQUlnUU5BQ0FEUVJCcUlnSW9BZ0FpQkEwQVFRQWhCZ3dCQ3dOQUlBSWhCU0FFSWdaQkZHb2lBaWdDQUNJRURRQWdCa0VRYWlFQ0lBWW9BaEFpQkEwQUN5QUZRUUEyQWdBTElBZEZEUUFDUUFKQUlBTWdBeWdDSENJRVFRSjBRYmpTZ0lBQWFpSUNLQUlBUncwQUlBSWdCallDQUNBR0RRRkJBRUVBS0FLTTBJQ0FBRUYrSUFSM2NUWUNqTkNBZ0FBTUFnc2dCMEVRUVJRZ0J5Z0NFQ0FEUmh0cUlBWTJBZ0FnQmtVTkFRc2dCaUFITmdJWUFrQWdBeWdDRUNJQ1JRMEFJQVlnQWpZQ0VDQUNJQVkyQWhnTElBTW9BaFFpQWtVTkFDQUdRUlJxSUFJMkFnQWdBaUFHTmdJWUN5QUJJQUJxSUFBMkFnQWdBU0FBUVFGeU5nSUVJQUZCQUNnQ25OQ0FnQUJIRFFGQkFDQUFOZ0tRMElDQUFBOExJQU1nQWtGK2NUWUNCQ0FCSUFCcUlBQTJBZ0FnQVNBQVFRRnlOZ0lFQ3dKQUlBQkIvd0ZMRFFBZ0FFRjRjVUd3MElDQUFHb2hBZ0pBQWtCQkFDZ0NpTkNBZ0FBaUJFRUJJQUJCQTNaMElnQnhEUUJCQUNBRUlBQnlOZ0tJMElDQUFDQUNJUUFNQVFzZ0FpZ0NDQ0VBQ3lBQUlBRTJBZ3dnQWlBQk5nSUlJQUVnQWpZQ0RDQUJJQUEyQWdnUEMwRWZJUUlDUUNBQVFmLy8vd2RMRFFBZ0FFRUlkaUlDSUFKQmdQNC9ha0VRZGtFSWNTSUNkQ0lFSUFSQmdPQWZha0VRZGtFRWNTSUVkQ0lHSUFaQmdJQVBha0VRZGtFQ2NTSUdkRUVQZGlBQ0lBUnlJQVp5YXlJQ1FRRjBJQUFnQWtFVmFuWkJBWEZ5UVJ4cUlRSUxJQUVnQWpZQ0hDQUJRZ0EzQWhBZ0FrRUNkRUc0MG9DQUFHb2hCQUpBQWtCQkFDZ0NqTkNBZ0FBaUJrRUJJQUowSWdOeERRQWdCQ0FCTmdJQVFRQWdCaUFEY2pZQ2pOQ0FnQUFnQVNBRU5nSVlJQUVnQVRZQ0NDQUJJQUUyQWd3TUFRc2dBRUVBUVJrZ0FrRUJkbXNnQWtFZlJodDBJUUlnQkNnQ0FDRUdBa0FEUUNBR0lnUW9BZ1JCZUhFZ0FFWU5BU0FDUVIxMklRWWdBa0VCZENFQ0lBUWdCa0VFY1dwQkVHb2lBeWdDQUNJR0RRQUxJQU1nQVRZQ0FDQUJJQVEyQWhnZ0FTQUJOZ0lNSUFFZ0FUWUNDQXdCQ3lBRUtBSUlJZ0FnQVRZQ0RDQUVJQUUyQWdnZ0FVRUFOZ0lZSUFFZ0JEWUNEQ0FCSUFBMkFnZ0xRUUJCQUNnQ3FOQ0FnQUJCZjJvaUFVRi9JQUViTmdLbzBJQ0FBQXNMQkFBQUFBdE9BQUpBSUFBTkFEOEFRUkIwRHdzQ1FDQUFRZi8vQTNFTkFDQUFRWDlNRFFBQ1FDQUFRUkIyUUFBaUFFRi9SdzBBUVFCQk1EWUMrTk9BZ0FCQmZ3OExJQUJCRUhRUEN4REtnSUNBQUFBTDhnSUNBMzhCZmdKQUlBSkZEUUFnQUNBQk9nQUFJQUlnQUdvaUEwRi9haUFCT2dBQUlBSkJBMGtOQUNBQUlBRTZBQUlnQUNBQk9nQUJJQU5CZldvZ0FUb0FBQ0FEUVg1cUlBRTZBQUFnQWtFSFNRMEFJQUFnQVRvQUF5QURRWHhxSUFFNkFBQWdBa0VKU1EwQUlBQkJBQ0FBYTBFRGNTSUVhaUlESUFGQi93RnhRWUdDaEFoc0lnRTJBZ0FnQXlBQ0lBUnJRWHh4SWdScUlnSkJmR29nQVRZQ0FDQUVRUWxKRFFBZ0F5QUJOZ0lJSUFNZ0FUWUNCQ0FDUVhocUlBRTJBZ0FnQWtGMGFpQUJOZ0lBSUFSQkdVa05BQ0FESUFFMkFoZ2dBeUFCTmdJVUlBTWdBVFlDRUNBRElBRTJBZ3dnQWtGd2FpQUJOZ0lBSUFKQmJHb2dBVFlDQUNBQ1FXaHFJQUUyQWdBZ0FrRmthaUFCTmdJQUlBUWdBMEVFY1VFWWNpSUZheUlDUVNCSkRRQWdBYTFDZ1lDQWdCQitJUVlnQXlBRmFpRUJBMEFnQVNBR053TVlJQUVnQmpjREVDQUJJQVkzQXdnZ0FTQUdOd01BSUFGQklHb2hBU0FDUVdCcUlnSkJIMHNOQUFzTElBQUxDNDVJQVFCQmdBZ0xoa2dCQUFBQUFnQUFBQU1BQUFBQUFBQUFBQUFBQUFRQUFBQUZBQUFBQUFBQUFBQUFBQUFHQUFBQUJ3QUFBQWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVsdWRtRnNhV1FnWTJoaGNpQnBiaUIxY213Z2NYVmxjbmtBVTNCaGJpQmpZV3hzWW1GamF5Qmxjbkp2Y2lCcGJpQnZibDlpYjJSNUFFTnZiblJsYm5RdFRHVnVaM1JvSUc5MlpYSm1iRzkzQUVOb2RXNXJJSE5wZW1VZ2IzWmxjbVpzYjNjQVVtVnpjRzl1YzJVZ2IzWmxjbVpzYjNjQVNXNTJZV3hwWkNCdFpYUm9iMlFnWm05eUlFaFVWRkF2ZUM1NElISmxjWFZsYzNRQVNXNTJZV3hwWkNCdFpYUm9iMlFnWm05eUlGSlVVMUF2ZUM1NElISmxjWFZsYzNRQVJYaHdaV04wWldRZ1UwOVZVa05GSUcxbGRHaHZaQ0JtYjNJZ1NVTkZMM2d1ZUNCeVpYRjFaWE4wQUVsdWRtRnNhV1FnWTJoaGNpQnBiaUIxY213Z1puSmhaMjFsYm5RZ2MzUmhjblFBUlhod1pXTjBaV1FnWkc5MEFGTndZVzRnWTJGc2JHSmhZMnNnWlhKeWIzSWdhVzRnYjI1ZmMzUmhkSFZ6QUVsdWRtRnNhV1FnY21WemNHOXVjMlVnYzNSaGRIVnpBRWx1ZG1Gc2FXUWdZMmhoY21GamRHVnlJR2x1SUdOb2RXNXJJR1Y0ZEdWdWMybHZibk1BVlhObGNpQmpZV3hzWW1GamF5Qmxjbkp2Y2dCZ2IyNWZjbVZ6WlhSZ0lHTmhiR3hpWVdOcklHVnljbTl5QUdCdmJsOWphSFZ1YTE5b1pXRmtaWEpnSUdOaGJHeGlZV05ySUdWeWNtOXlBR0J2Ymw5dFpYTnpZV2RsWDJKbFoybHVZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmWTJoMWJtdGZaWGgwWlc1emFXOXVYM1poYkhWbFlDQmpZV3hzWW1GamF5Qmxjbkp2Y2dCZ2IyNWZjM1JoZEhWelgyTnZiWEJzWlhSbFlDQmpZV3hzWW1GamF5Qmxjbkp2Y2dCZ2IyNWZkbVZ5YzJsdmJsOWpiMjF3YkdWMFpXQWdZMkZzYkdKaFkyc2daWEp5YjNJQVlHOXVYM1Z5YkY5amIyMXdiR1YwWldBZ1kyRnNiR0poWTJzZ1pYSnliM0lBWUc5dVgyTm9kVzVyWDJOdmJYQnNaWFJsWUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZmFHVmhaR1Z5WDNaaGJIVmxYMk52YlhCc1pYUmxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmYldWemMyRm5aVjlqYjIxd2JHVjBaV0FnWTJGc2JHSmhZMnNnWlhKeWIzSUFZRzl1WDIxbGRHaHZaRjlqYjIxd2JHVjBaV0FnWTJGc2JHSmhZMnNnWlhKeWIzSUFZRzl1WDJobFlXUmxjbDltYVdWc1pGOWpiMjF3YkdWMFpXQWdZMkZzYkdKaFkyc2daWEp5YjNJQVlHOXVYMk5vZFc1clgyVjRkR1Z1YzJsdmJsOXVZVzFsWUNCallXeHNZbUZqYXlCbGNuSnZjZ0JWYm1WNGNHVmpkR1ZrSUdOb1lYSWdhVzRnZFhKc0lITmxjblpsY2dCSmJuWmhiR2xrSUdobFlXUmxjaUIyWVd4MVpTQmphR0Z5QUVsdWRtRnNhV1FnYUdWaFpHVnlJR1pwWld4a0lHTm9ZWElBVTNCaGJpQmpZV3hzWW1GamF5Qmxjbkp2Y2lCcGJpQnZibDkyWlhKemFXOXVBRWx1ZG1Gc2FXUWdiV2x1YjNJZ2RtVnljMmx2YmdCSmJuWmhiR2xrSUcxaGFtOXlJSFpsY25OcGIyNEFSWGh3WldOMFpXUWdjM0JoWTJVZ1lXWjBaWElnZG1WeWMybHZiZ0JGZUhCbFkzUmxaQ0JEVWt4R0lHRm1kR1Z5SUhabGNuTnBiMjRBU1c1MllXeHBaQ0JJVkZSUUlIWmxjbk5wYjI0QVNXNTJZV3hwWkNCb1pXRmtaWElnZEc5clpXNEFVM0JoYmlCallXeHNZbUZqYXlCbGNuSnZjaUJwYmlCdmJsOTFjbXdBU1c1MllXeHBaQ0JqYUdGeVlXTjBaWEp6SUdsdUlIVnliQUJWYm1WNGNHVmpkR1ZrSUhOMFlYSjBJR05vWVhJZ2FXNGdkWEpzQUVSdmRXSnNaU0JBSUdsdUlIVnliQUJGYlhCMGVTQkRiMjUwWlc1MExVeGxibWQwYUFCSmJuWmhiR2xrSUdOb1lYSmhZM1JsY2lCcGJpQkRiMjUwWlc1MExVeGxibWQwYUFCRWRYQnNhV05oZEdVZ1EyOXVkR1Z1ZEMxTVpXNW5kR2dBU1c1MllXeHBaQ0JqYUdGeUlHbHVJSFZ5YkNCd1lYUm9BRU52Ym5SbGJuUXRUR1Z1WjNSb0lHTmhiaWQwSUdKbElIQnlaWE5sYm5RZ2QybDBhQ0JVY21GdWMyWmxjaTFGYm1OdlpHbHVad0JKYm5aaGJHbGtJR05vWVhKaFkzUmxjaUJwYmlCamFIVnVheUJ6YVhwbEFGTndZVzRnWTJGc2JHSmhZMnNnWlhKeWIzSWdhVzRnYjI1ZmFHVmhaR1Z5WDNaaGJIVmxBRk53WVc0Z1kyRnNiR0poWTJzZ1pYSnliM0lnYVc0Z2IyNWZZMmgxYm10ZlpYaDBaVzV6YVc5dVgzWmhiSFZsQUVsdWRtRnNhV1FnWTJoaGNtRmpkR1Z5SUdsdUlHTm9kVzVySUdWNGRHVnVjMmx2Ym5NZ2RtRnNkV1VBVFdsemMybHVaeUJsZUhCbFkzUmxaQ0JNUmlCaFpuUmxjaUJvWldGa1pYSWdkbUZzZFdVQVNXNTJZV3hwWkNCZ1ZISmhibk5tWlhJdFJXNWpiMlJwYm1kZ0lHaGxZV1JsY2lCMllXeDFaUUJKYm5aaGJHbGtJR05vWVhKaFkzUmxjaUJwYmlCamFIVnVheUJsZUhSbGJuTnBiMjV6SUhGMWIzUmxJSFpoYkhWbEFFbHVkbUZzYVdRZ1kyaGhjbUZqZEdWeUlHbHVJR05vZFc1cklHVjRkR1Z1YzJsdmJuTWdjWFZ2ZEdWa0lIWmhiSFZsQUZCaGRYTmxaQ0JpZVNCdmJsOW9aV0ZrWlhKelgyTnZiWEJzWlhSbEFFbHVkbUZzYVdRZ1JVOUdJSE4wWVhSbEFHOXVYM0psYzJWMElIQmhkWE5sQUc5dVgyTm9kVzVyWDJobFlXUmxjaUJ3WVhWelpRQnZibDl0WlhOellXZGxYMkpsWjJsdUlIQmhkWE5sQUc5dVgyTm9kVzVyWDJWNGRHVnVjMmx2Ymw5MllXeDFaU0J3WVhWelpRQnZibDl6ZEdGMGRYTmZZMjl0Y0d4bGRHVWdjR0YxYzJVQWIyNWZkbVZ5YzJsdmJsOWpiMjF3YkdWMFpTQndZWFZ6WlFCdmJsOTFjbXhmWTI5dGNHeGxkR1VnY0dGMWMyVUFiMjVmWTJoMWJtdGZZMjl0Y0d4bGRHVWdjR0YxYzJVQWIyNWZhR1ZoWkdWeVgzWmhiSFZsWDJOdmJYQnNaWFJsSUhCaGRYTmxBRzl1WDIxbGMzTmhaMlZmWTI5dGNHeGxkR1VnY0dGMWMyVUFiMjVmYldWMGFHOWtYMk52YlhCc1pYUmxJSEJoZFhObEFHOXVYMmhsWVdSbGNsOW1hV1ZzWkY5amIyMXdiR1YwWlNCd1lYVnpaUUJ2Ymw5amFIVnVhMTlsZUhSbGJuTnBiMjVmYm1GdFpTQndZWFZ6WlFCVmJtVjRjR1ZqZEdWa0lITndZV05sSUdGbWRHVnlJSE4wWVhKMElHeHBibVVBVTNCaGJpQmpZV3hzWW1GamF5Qmxjbkp2Y2lCcGJpQnZibDlqYUhWdWExOWxlSFJsYm5OcGIyNWZibUZ0WlFCSmJuWmhiR2xrSUdOb1lYSmhZM1JsY2lCcGJpQmphSFZ1YXlCbGVIUmxibk5wYjI1eklHNWhiV1VBVUdGMWMyVWdiMjRnUTA5T1RrVkRWQzlWY0dkeVlXUmxBRkJoZFhObElHOXVJRkJTU1M5VmNHZHlZV1JsQUVWNGNHVmpkR1ZrSUVoVVZGQXZNaUJEYjI1dVpXTjBhVzl1SUZCeVpXWmhZMlVBVTNCaGJpQmpZV3hzWW1GamF5Qmxjbkp2Y2lCcGJpQnZibDl0WlhSb2IyUUFSWGh3WldOMFpXUWdjM0JoWTJVZ1lXWjBaWElnYldWMGFHOWtBRk53WVc0Z1kyRnNiR0poWTJzZ1pYSnliM0lnYVc0Z2IyNWZhR1ZoWkdWeVgyWnBaV3hrQUZCaGRYTmxaQUJKYm5aaGJHbGtJSGR2Y21RZ1pXNWpiM1Z1ZEdWeVpXUUFTVzUyWVd4cFpDQnRaWFJvYjJRZ1pXNWpiM1Z1ZEdWeVpXUUFWVzVsZUhCbFkzUmxaQ0JqYUdGeUlHbHVJSFZ5YkNCelkyaGxiV0VBVW1WeGRXVnpkQ0JvWVhNZ2FXNTJZV3hwWkNCZ1ZISmhibk5tWlhJdFJXNWpiMlJwYm1kZ0FGTlhTVlJEU0Y5UVVrOVlXUUJWVTBWZlVGSlBXRmtBVFV0QlExUkpWa2xVV1FCVlRsQlNUME5GVTFOQlFreEZYMFZPVkVsVVdRQkRUMUJaQUUxUFZrVkVYMUJGVWsxQlRrVk9WRXhaQUZSUFQxOUZRVkpNV1FCT1QxUkpSbGtBUmtGSlRFVkVYMFJGVUVWT1JFVk9RMWtBUWtGRVgwZEJWRVZYUVZrQVVFeEJXUUJRVlZRQVEwaEZRMHRQVlZRQVIwRlVSVmRCV1Y5VVNVMUZUMVZVQUZKRlVWVkZVMVJmVkVsTlJVOVZWQUJPUlZSWFQxSkxYME5QVGs1RlExUmZWRWxOUlU5VlZBQkRUMDVPUlVOVVNVOU9YMVJKVFVWUFZWUUFURTlIU1U1ZlZFbE5SVTlWVkFCT1JWUlhUMUpMWDFKRlFVUmZWRWxOUlU5VlZBQlFUMU5VQUUxSlUwUkpVa1ZEVkVWRVgxSkZVVlZGVTFRQVEweEpSVTVVWDBOTVQxTkZSRjlTUlZGVlJWTlVBRU5NU1VWT1ZGOURURTlUUlVSZlRFOUJSRjlDUVV4QlRrTkZSRjlTUlZGVlJWTlVBRUpCUkY5U1JWRlZSVk5VQUVoVVZGQmZVa1ZSVlVWVFZGOVRSVTVVWDFSUFgwaFVWRkJUWDFCUFVsUUFVa1ZRVDFKVUFFbE5YMEZmVkVWQlVFOVVBRkpGVTBWVVgwTlBUbFJGVGxRQVRrOWZRMDlPVkVWT1ZBQlFRVkpVU1VGTVgwTlBUbFJGVGxRQVNGQkZYMGxPVmtGTVNVUmZRMDlPVTFSQlRsUUFTRkJGWDBOQ1gxSkZVMFZVQUVkRlZBQklVRVZmVTFSU1NVTlVBRU5QVGtaTVNVTlVBRlJGVFZCUFVrRlNXVjlTUlVSSlVrVkRWQUJRUlZKTlFVNUZUbFJmVWtWRVNWSkZRMVFBUTA5T1RrVkRWQUJOVlV4VVNWOVRWRUZVVlZNQVNGQkZYMGxPVmtGTVNVUmZVMVJCVkZWVEFGUlBUMTlOUVU1WlgxSkZVVlZGVTFSVEFFVkJVa3haWDBoSlRsUlRBRlZPUVZaQlNVeEJRa3hGWDBaUFVsOU1SVWRCVEY5U1JVRlRUMDVUQUU5UVZFbFBUbE1BVTFkSlZFTklTVTVIWDFCU1QxUlBRMDlNVXdCV1FWSkpRVTVVWDBGTVUwOWZUa1ZIVDFSSlFWUkZVd0JOVlV4VVNWQk1SVjlEU0U5SlEwVlRBRWxPVkVWU1RrRk1YMU5GVWxaRlVsOUZVbEpQVWdCWFJVSmZVMFZTVmtWU1gxVk9TMDVQVjA1ZlJWSlNUMUlBVWtGSlRFZFZUbDlGVWxKUFVnQkpSRVZPVkVsVVdWOVFVazlXU1VSRlVsOUJWVlJJUlU1VVNVTkJWRWxQVGw5RlVsSlBVZ0JUVTB4ZlEwVlNWRWxHU1VOQlZFVmZSVkpTVDFJQVNVNVdRVXhKUkY5WVgwWlBVbGRCVWtSRlJGOUdUMUlBVTBWVVgxQkJVa0ZOUlZSRlVnQkhSVlJmVUVGU1FVMUZWRVZTQUVoUVJWOVZVMFZTQUZORlJWOVBWRWhGVWdCSVVFVmZRMEpmUTBoVlRrdGZTRVZCUkVWU0FFMUxRMEZNUlU1RVFWSUFVMFZVVlZBQVYwVkNYMU5GVWxaRlVsOUpVMTlFVDFkT0FGUkZRVkpFVDFkT0FFaFFSVjlEVEU5VFJVUmZRMDlPVGtWRFZFbFBUZ0JJUlZWU1NWTlVTVU5mUlZoUVNWSkJWRWxQVGdCRVNWTkRUMDVPUlVOVVJVUmZUMUJGVWtGVVNVOU9BRTVQVGw5QlZWUklUMUpKVkVGVVNWWkZYMGxPUms5U1RVRlVTVTlPQUVoUVJWOUpUbFpCVEVsRVgxWkZVbE5KVDA0QVNGQkZYME5DWDAxRlUxTkJSMFZmUWtWSFNVNEFVMGxVUlY5SlUxOUdVazlhUlU0QVNGQkZYMGxPVmtGTVNVUmZTRVZCUkVWU1gxUlBTMFZPQUVsT1ZrRk1TVVJmVkU5TFJVNEFSazlTUWtsRVJFVk9BRVZPU0VGT1EwVmZXVTlWVWw5RFFVeE5BRWhRUlY5SlRsWkJURWxFWDFWU1RBQkNURTlEUzBWRVgwSlpYMUJCVWtWT1ZFRk1YME5QVGxSU1Qwd0FUVXREVDB3QVFVTk1BRWhRUlY5SlRsUkZVazVCVEFCU1JWRlZSVk5VWDBoRlFVUkZVbDlHU1VWTVJGTmZWRTlQWDB4QlVrZEZYMVZPVDBaR1NVTkpRVXdBU0ZCRlgwOUxBRlZPVEVsT1N3QlZUa3hQUTBzQVVGSkpBRkpGVkZKWlgxZEpWRWdBU0ZCRlgwbE9Wa0ZNU1VSZlEwOU9WRVZPVkY5TVJVNUhWRWdBU0ZCRlgxVk9SVmhRUlVOVVJVUmZRMDlPVkVWT1ZGOU1SVTVIVkVnQVJreFZVMGdBVUZKUFVGQkJWRU5JQUUwdFUwVkJVa05JQUZWU1NWOVVUMDlmVEU5T1J3QlFVazlEUlZOVFNVNUhBRTFKVTBORlRFeEJUa1ZQVlZOZlVFVlNVMGxUVkVWT1ZGOVhRVkpPU1U1SEFFMUpVME5GVEV4QlRrVlBWVk5mVjBGU1RrbE9Sd0JJVUVWZlNVNVdRVXhKUkY5VVVrRk9VMFpGVWw5RlRrTlBSRWxPUndCRmVIQmxZM1JsWkNCRFVreEdBRWhRUlY5SlRsWkJURWxFWDBOSVZVNUxYMU5KV2tVQVRVOVdSUUJEVDA1VVNVNVZSUUJJVUVWZlEwSmZVMVJCVkZWVFgwTlBUVkJNUlZSRkFFaFFSVjlEUWw5SVJVRkVSVkpUWDBOUFRWQk1SVlJGQUVoUVJWOURRbDlXUlZKVFNVOU9YME5QVFZCTVJWUkZBRWhRUlY5RFFsOVZVa3hmUTA5TlVFeEZWRVVBU0ZCRlgwTkNYME5JVlU1TFgwTlBUVkJNUlZSRkFFaFFSVjlEUWw5SVJVRkVSVkpmVmtGTVZVVmZRMDlOVUV4RlZFVUFTRkJGWDBOQ1gwTklWVTVMWDBWWVZFVk9VMGxQVGw5V1FVeFZSVjlEVDAxUVRFVlVSUUJJVUVWZlEwSmZRMGhWVGt0ZlJWaFVSVTVUU1U5T1gwNUJUVVZmUTA5TlVFeEZWRVVBU0ZCRlgwTkNYMDFGVTFOQlIwVmZRMDlOVUV4RlZFVUFTRkJGWDBOQ1gwMUZWRWhQUkY5RFQwMVFURVZVUlFCSVVFVmZRMEpmU0VWQlJFVlNYMFpKUlV4RVgwTlBUVkJNUlZSRkFFUkZURVZVUlFCSVVFVmZTVTVXUVV4SlJGOUZUMFpmVTFSQlZFVUFTVTVXUVV4SlJGOVRVMHhmUTBWU1ZFbEdTVU5CVkVVQVVFRlZVMFVBVGs5ZlVrVlRVRTlPVTBVQVZVNVRWVkJRVDFKVVJVUmZUVVZFU1VGZlZGbFFSUUJIVDA1RkFFNVBWRjlCUTBORlVGUkJRa3hGQUZORlVsWkpRMFZmVlU1QlZrRkpURUZDVEVVQVVrRk9SMFZmVGs5VVgxTkJWRWxUUmtsQlFreEZBRTlTU1VkSlRsOUpVMTlWVGxKRlFVTklRVUpNUlFCU1JWTlFUMDVUUlY5SlUxOVRWRUZNUlFCUVZWSkhSUUJOUlZKSFJRQlNSVkZWUlZOVVgwaEZRVVJGVWw5R1NVVk1SRk5mVkU5UFgweEJVa2RGQUZKRlVWVkZVMVJmU0VWQlJFVlNYMVJQVDE5TVFWSkhSUUJRUVZsTVQwRkVYMVJQVDE5TVFWSkhSUUJKVGxOVlJrWkpRMGxGVGxSZlUxUlBVa0ZIUlFCSVVFVmZVRUZWVTBWRVgxVlFSMUpCUkVVQVNGQkZYMUJCVlZORlJGOUlNbDlWVUVkU1FVUkZBRk5QVlZKRFJRQkJUazVQVlU1RFJRQlVVa0ZEUlFCSVVFVmZWVTVGV0ZCRlExUkZSRjlUVUVGRFJRQkVSVk5EVWtsQ1JRQlZUbE5WUWxORFVrbENSUUJTUlVOUFVrUUFTRkJGWDBsT1ZrRk1TVVJmVFVWVVNFOUVBRTVQVkY5R1QxVk9SQUJRVWs5UVJrbE9SQUJWVGtKSlRrUUFVa1ZDU1U1RUFGVk9RVlZVU0U5U1NWcEZSQUJOUlZSSVQwUmZUazlVWDBGTVRFOVhSVVFBU0ZSVVVGOVdSVkpUU1U5T1gwNVBWRjlUVlZCUVQxSlVSVVFBUVV4U1JVRkVXVjlTUlZCUFVsUkZSQUJCUTBORlVGUkZSQUJPVDFSZlNVMVFURVZOUlU1VVJVUUFURTlQVUY5RVJWUkZRMVJGUkFCSVVFVmZRMUpmUlZoUVJVTlVSVVFBU0ZCRlgweEdYMFZZVUVWRFZFVkVBRU5TUlVGVVJVUUFTVTFmVlZORlJBQklVRVZmVUVGVlUwVkVBRlJKVFVWUFZWUmZUME5EVlZKRlJBQlFRVmxOUlU1VVgxSkZVVlZKVWtWRUFGQlNSVU5QVGtSSlZFbFBUbDlTUlZGVlNWSkZSQUJRVWs5WVdWOUJWVlJJUlU1VVNVTkJWRWxQVGw5U1JWRlZTVkpGUkFCT1JWUlhUMUpMWDBGVlZFaEZUbFJKUTBGVVNVOU9YMUpGVVZWSlVrVkVBRXhGVGtkVVNGOVNSVkZWU1ZKRlJBQlRVMHhmUTBWU1ZFbEdTVU5CVkVWZlVrVlJWVWxTUlVRQVZWQkhVa0ZFUlY5U1JWRlZTVkpGUkFCUVFVZEZYMFZZVUVsU1JVUUFVRkpGUTA5T1JFbFVTVTlPWDBaQlNVeEZSQUJGV0ZCRlExUkJWRWxQVGw5R1FVbE1SVVFBVWtWV1FVeEpSRUZVU1U5T1gwWkJTVXhGUkFCVFUweGZTRUZPUkZOSVFVdEZYMFpCU1V4RlJBQk1UME5MUlVRQVZGSkJUbE5HVDFKTlFWUkpUMDVmUVZCUVRFbEZSQUJPVDFSZlRVOUVTVVpKUlVRQVRrOVVYMFZZVkVWT1JFVkVBRUpCVGtSWFNVUlVTRjlNU1UxSlZGOUZXRU5GUlVSRlJBQlRTVlJGWDBsVFgwOVdSVkpNVDBGRVJVUUFTRVZCUkFCRmVIQmxZM1JsWkNCSVZGUlFMd0FBWGhNQUFDWVRBQUF3RUFBQThCY0FBSjBUQUFBVkVnQUFPUmNBQVBBU0FBQUtFQUFBZFJJQUFLMFNBQUNDRXdBQVR4UUFBSDhRQUFDZ0ZRQUFJeFFBQUlrU0FBQ0xGQUFBVFJVQUFOUVJBQURQRkFBQUVCZ0FBTWtXQUFEY0ZnQUF3UkVBQU9BWEFBQzdGQUFBZEJRQUFId1ZBQURsRkFBQUNCY0FBQjhRQUFCbEZRQUFveFFBQUNnVkFBQUNGUUFBbVJVQUFDd1FBQUNMR1FBQVR3OEFBTlFPQUFCcUVBQUF6aEFBQUFJWEFBQ0pEZ0FBYmhNQUFCd1RBQUJtRkFBQVZoY0FBTUVUQUFETkV3QUFiQk1BQUdnWEFBQm1Gd0FBWHhjQUFDSVRBQURPRHdBQWFRNEFBTmdPQUFCakZnQUF5eE1BQUtvT0FBQW9Gd0FBSmhjQUFNVVRBQUJkRmdBQTZCRUFBR2NUQUFCbEV3QUE4aFlBQUhNVEFBQWRGd0FBK1JZQUFQTVJBQURQRGdBQXpoVUFBQXdTQUFDekVRQUFwUkVBQUdFUUFBQXlGd0FBdXhNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQVFJQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFBQUFBQUFBQUFBQUFBQUFBQkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBSURBZ0lDQWdJQUFBSUNBQUlDQUFJQ0FnSUNBZ0lDQWdJQUJBQUFBQUFBQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBQUFBQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQUNBQUlBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFDQUFJQ0FnSUNBQUFDQWdBQ0FnQUNBZ0lDQWdJQ0FnSUNBQU1BQkFBQUFBSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FBQUFBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBQWdBQ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFiRzl6WldWbGNDMWhiR2wyWlFBQUFBQUFBQUFBQUFBQUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQUFBQUFBQUFBQUFCQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRUJBUUVCQVFFQkFRRUJBUUlCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQlkyaDFibXRsWkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUVBQVFFQkFRRUFBQUVCQUFFQkFBRUJBUUVCQVFFQkFRRUFBQUFBQUFBQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQUFBQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFCQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQmxZM1JwYjI1bGJuUXRiR1Z1WjNSb2IyNXliM2g1TFdOdmJtNWxZM1JwYjI0QUFBQUFBQUFBQUFBQUFBQUFBQUJ5WVc1elptVnlMV1Z1WTI5a2FXNW5jR2R5WVdSbERRb05DZzBLVTAwTkNnMEtWRlJRTDBORkwxUlRVQzhBQUFBQUFBQUFBQUFBQUFBQkFnQUJBd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBQUFBQUFBQUFBQUFBUUlBQVFNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRUFRRUZBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQUFBQUFBQUFBQUFFQUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVCQUFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBQUFBQUFBQUFBQUFBUUFBQWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFNRUFBQUVCQVFFQkFRRUJBUUVCQVVFQkFRRUJBUUVCQVFFQkFRQUJBQUdCd1FFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFFQUFRQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFQUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBSUFBQUFBQUFBREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdBQUFBQUFBQU1EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJBQUFCQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFBQUFBQUFBQUFBQUFJQUFBQUFBZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TUFBQUFBQUFBREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJPVDFWT1EwVkZRMHRQVlZST1JVTlVSVlJGUTFKSlFrVk1WVk5JUlZSRlFVUlRSVUZTUTBoU1IwVkRWRWxXU1ZSWlRFVk9SRUZTVmtWUFZFbEdXVkJVU1U5T1UwTklVMFZCV1ZOVVFWUkRTRWRGVDFKRVNWSkZRMVJQVWxSU1EwaFFRVkpCVFVWVVJWSlZVa05GUWxORFVrbENSVUZTUkU5WFRrRkRSVWxPUkU1TFEwdFZRbE5EVWtsQ1JVaFVWRkF2UVVSVVVDOD0nXG4iLAogICAgIm1vZHVsZS5leHBvcnRzID0gJ0FHRnpiUUVBQUFBQk1BaGdBWDhCZjJBRGYzOS9BWDlnQkg5L2YzOEJmMkFBQUdBRGYzOS9BR0FCZndCZ0FuOS9BR0FHZjM5L2YzOS9BQUxMQVFnRFpXNTJHSGRoYzIxZmIyNWZhR1ZoWkdWeWMxOWpiMjF3YkdWMFpRQUNBMlZ1ZGhWM1lYTnRYMjl1WDIxbGMzTmhaMlZmWW1WbmFXNEFBQU5sYm5ZTGQyRnpiVjl2Ymw5MWNtd0FBUU5sYm5ZT2QyRnpiVjl2Ymw5emRHRjBkWE1BQVFObGJuWVVkMkZ6YlY5dmJsOW9aV0ZrWlhKZlptbGxiR1FBQVFObGJuWVVkMkZ6YlY5dmJsOW9aV0ZrWlhKZmRtRnNkV1VBQVFObGJuWU1kMkZ6YlY5dmJsOWliMlI1QUFFRFpXNTJHSGRoYzIxZmIyNWZiV1Z6YzJGblpWOWpiMjF3YkdWMFpRQUFBMFpGQXdNRUFBQUZBQUFBQUFBQUJRRUZBQVVGQlFBQUJnQUFBQUFHQmdZR0FRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQkFBQUJBUWNBQUFVRkF3QUJCQVVCY0FFU0VnVURBUUFDQmdnQmZ3RkJnTlFFQ3dmUkJTSUdiV1Z0YjNKNUFnQUxYMmx1YVhScFlXeHBlbVVBQ1JsZlgybHVaR2x5WldOMFgyWjFibU4wYVc5dVgzUmhZbXhsQVFBTGJHeG9kSFJ3WDJsdWFYUUFDaGhzYkdoMGRIQmZjMmh2ZFd4a1gydGxaWEJmWVd4cGRtVUFRUXhzYkdoMGRIQmZZV3hzYjJNQURBWnRZV3hzYjJNQVJndHNiR2gwZEhCZlpuSmxaUUFOQkdaeVpXVUFTQTlzYkdoMGRIQmZaMlYwWDNSNWNHVUFEaFZzYkdoMGRIQmZaMlYwWDJoMGRIQmZiV0ZxYjNJQUR4VnNiR2gwZEhCZloyVjBYMmgwZEhCZmJXbHViM0lBRUJGc2JHaDBkSEJmWjJWMFgyMWxkR2h2WkFBUkZteHNhSFIwY0Y5blpYUmZjM1JoZEhWelgyTnZaR1VBRWhKc2JHaDBkSEJmWjJWMFgzVndaM0poWkdVQUV3eHNiR2gwZEhCZmNtVnpaWFFBRkE1c2JHaDBkSEJmWlhobFkzVjBaUUFWRkd4c2FIUjBjRjl6WlhSMGFXNW5jMTlwYm1sMEFCWU5iR3hvZEhSd1gyWnBibWx6YUFBWERHeHNhSFIwY0Y5d1lYVnpaUUFZRFd4c2FIUjBjRjl5WlhOMWJXVUFHUnRzYkdoMGRIQmZjbVZ6ZFcxbFgyRm1kR1Z5WDNWd1ozSmhaR1VBR2hCc2JHaDBkSEJmWjJWMFgyVnljbTV2QUJzWGJHeG9kSFJ3WDJkbGRGOWxjbkp2Y2w5eVpXRnpiMjRBSEJkc2JHaDBkSEJmYzJWMFgyVnljbTl5WDNKbFlYTnZiZ0FkRkd4c2FIUjBjRjluWlhSZlpYSnliM0pmY0c5ekFCNFJiR3hvZEhSd1gyVnljbTV2WDI1aGJXVUFIeEpzYkdoMGRIQmZiV1YwYUc5a1gyNWhiV1VBSUJKc2JHaDBkSEJmYzNSaGRIVnpYMjVoYldVQUlScHNiR2gwZEhCZmMyVjBYMnhsYm1sbGJuUmZhR1ZoWkdWeWN3QWlJV3hzYUhSMGNGOXpaWFJmYkdWdWFXVnVkRjlqYUhWdWEyVmtYMnhsYm1kMGFBQWpIV3hzYUhSMGNGOXpaWFJmYkdWdWFXVnVkRjlyWldWd1gyRnNhWFpsQUNRa2JHeG9kSFJ3WDNObGRGOXNaVzVwWlc1MFgzUnlZVzV6Wm1WeVgyVnVZMjlrYVc1bkFDVVliR3hvZEhSd1gyMWxjM05oWjJWZmJtVmxaSE5mWlc5bUFEOEpGd0VBUVFFTEVRRUNBd1FGQ3dZSE5UazNNUzh0SnlzcENyTGdBa1VDQUFzSUFCQ0lnSUNBQUFzWkFDQUFFTUtBZ0lBQUdpQUFJQUkyQWpnZ0FDQUJPZ0FvQ3h3QUlBQWdBQzhCTWlBQUxRQXVJQUFRd1lDQWdBQVFnSUNBZ0FBTEtnRUJmMEhBQUJER2dJQ0FBQ0lCRU1LQWdJQUFHaUFCUVlDSWdJQUFOZ0k0SUFFZ0FEb0FLQ0FCQ3dvQUlBQVF5SUNBZ0FBTEJ3QWdBQzBBS0FzSEFDQUFMUUFxQ3djQUlBQXRBQ3NMQndBZ0FDMEFLUXNIQUNBQUx3RXlDd2NBSUFBdEFDNExSUUVFZnlBQUtBSVlJUUVnQUMwQUxTRUNJQUF0QUNnaEF5QUFLQUk0SVFRZ0FCRENnSUNBQUJvZ0FDQUVOZ0k0SUFBZ0F6b0FLQ0FBSUFJNkFDMGdBQ0FCTmdJWUN4RUFJQUFnQVNBQklBSnFFTU9BZ0lBQUN4QUFJQUJCQUVIY0FCRE1nSUNBQUJvTFp3RUJmMEVBSVFFQ1FDQUFLQUlNRFFBQ1FBSkFBa0FDUUNBQUxRQXZEZ01CQUFNQ0N5QUFLQUk0SWdGRkRRQWdBU2dDTENJQlJRMEFJQUFnQVJHQWdJQ0FBQUFpQVEwREMwRUFEd3NReW9DQWdBQUFDeUFBUWNPV2dJQUFOZ0lRUVE0aEFRc2dBUXNlQUFKQUlBQW9BZ3dOQUNBQVFkR2JnSUFBTmdJUUlBQkJGVFlDREFzTEZnQUNRQ0FBS0FJTVFSVkhEUUFnQUVFQU5nSU1Dd3NXQUFKQUlBQW9BZ3hCRmtjTkFDQUFRUUEyQWd3TEN3Y0FJQUFvQWd3TEJ3QWdBQ2dDRUFzSkFDQUFJQUUyQWhBTEJ3QWdBQ2dDRkFzaUFBSkFJQUJCSkVrTkFCREtnSUNBQUFBTElBQkJBblJCb0xPQWdBQnFLQUlBQ3lJQUFrQWdBRUV1U1EwQUVNcUFnSUFBQUFzZ0FFRUNkRUd3dElDQUFHb29BZ0FMN2dzQkFYOUI2NmlBZ0FBaEFRSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQUJCbkg5cUR2UURZMklBQVdGaFlXRmhZUUlEQkFWaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhCZ2NJQ1FvTERBME9EMkZoWVdGaEVHRmhZV0ZoWVdGaFlXRmhFV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZUklURkJVV0Z4Z1pHaHRoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoSEIwZUh5QWhJaU1rSlNZbktDa3FLeXd0TGk4d01USXpORFUyWVRjNE9UcGhZV0ZoWVdGaFlUdGhZV0U4WVdGaFlUMCtQMkZoWVdGaFlXRmhRR0ZoUVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlVSkRSRVZHUjBoSlNrdE1UVTVQVUZGU1UyRmhZV0ZoWVdGaFZGVldWMWhaV2x0aFhGMWhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZlWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWDJCaEMwSGhwNENBQUE4TFFhU2hnSUFBRHd0Qnk2eUFnQUFQQzBIK3NZQ0FBQThMUWNDa2dJQUFEd3RCcTZTQWdBQVBDMEdOcUlDQUFBOExRZUttZ0lBQUR3dEJnTENBZ0FBUEMwRzVyNENBQUE4TFFkZWtnSUFBRHd0Qjc1K0FnQUFQQzBIaG40Q0FBQThMUWZxZmdJQUFEd3RCOHFDQWdBQVBDMEdvcjRDQUFBOExRYTZ5Z0lBQUR3dEJpTENBZ0FBUEMwSHNwNENBQUE4TFFZS2lnSUFBRHd0QmpwMkFnQUFQQzBIUXJvQ0FBQThMUWNxamdJQUFEd3RCeGJLQWdBQVBDMEhmbklDQUFBOExRZEtjZ0lBQUR3dEJ4S0NBZ0FBUEMwSFhvSUNBQUE4TFFhS2ZnSUFBRHd0QjdhNkFnQUFQQzBHcnNJQ0FBQThMUWRTbGdJQUFEd3RCeks2QWdBQVBDMEg2cm9DQUFBOExRZnlyZ0lBQUR3dEIwckNBZ0FBUEMwSHhuWUNBQUE4TFFidWdnSUFBRHd0Qjk2dUFnQUFQQzBHUXNZQ0FBQThMUWRleGdJQUFEd3RCb3EyQWdBQVBDMEhVcDRDQUFBOExRZUNyZ0lBQUR3dEJuNnlBZ0FBUEMwSHJzWUNBQUE4TFFkV2ZnSUFBRHd0QnlyR0FnQUFQQzBIZXBZQ0FBQThMUWRTZWdJQUFEd3RCOUp5QWdBQVBDMEduc29DQUFBOExRYkdkZ0lBQUR3dEJvSjJBZ0FBUEMwRzVzWUNBQUE4TFFieXdnSUFBRHd0QmtxR0FnQUFQQzBHenBvQ0FBQThMUWVtc2dJQUFEd3RCcko2QWdBQVBDMEhVcTRDQUFBOExRZmVtZ0lBQUR3dEJnS2FBZ0FBUEMwR3dvWUNBQUE4TFFmNmVnSUFBRHd0QmphT0FnQUFQQzBHSnJZQ0FBQThMUWZlaWdJQUFEd3RCb0xHQWdBQVBDMEd1bjRDQUFBOExRY2FsZ0lBQUR3dEI2SjZBZ0FBUEMwR1Rvb0NBQUE4TFFjS3ZnSUFBRHd0Qnc1MkFnQUFQQzBHTHJJQ0FBQThMUWVHZGdJQUFEd3RCamErQWdBQVBDMEhxb1lDQUFBOExRYlN0Z0lBQUR3dEIwcStBZ0FBUEMwSGZzb0NBQUE4TFFkS3lnSUFBRHd0QjhMQ0FnQUFQQzBHcG9vQ0FBQThMUWZtamdJQUFEd3RCbVo2QWdBQVBDMEcxcklDQUFBOExRWnV3Z0lBQUR3dEJrcktBZ0FBUEMwRzJxNENBQUE4TFFjS2lnSUFBRHd0QitMS0FnQUFQQzBHZXBZQ0FBQThMUWRDaWdJQUFEd3RCdXA2QWdBQVBDMEdCbm9DQUFBOExFTXFBZ0lBQUFBdEIxcUdBZ0FBaEFRc2dBUXNXQUNBQUlBQXRBQzFCL2dGeElBRkJBRWR5T2dBdEN4a0FJQUFnQUMwQUxVSDlBWEVnQVVFQVIwRUJkSEk2QUMwTEdRQWdBQ0FBTFFBdFFmc0JjU0FCUVFCSFFRSjBjam9BTFFzWkFDQUFJQUF0QUMxQjl3RnhJQUZCQUVkQkEzUnlPZ0F0Q3k0QkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9BZ0FpQkVVTkFDQUFJQVFSZ0lDQWdBQUFJUU1MSUFNTFNRRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDQkNJRVJRMEFJQUFnQVNBQ0lBRnJJQVFSZ1lDQWdBQUFJZ05CZjBjTkFDQUFRY2FSZ0lBQU5nSVFRUmdoQXdzZ0F3c3VBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FJd0lnUkZEUUFnQUNBRUVZQ0FnSUFBQUNFREN5QURDMGtCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FnZ2lCRVVOQUNBQUlBRWdBaUFCYXlBRUVZR0FnSUFBQUNJRFFYOUhEUUFnQUVIMmlvQ0FBRFlDRUVFWUlRTUxJQU1MTGdFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NOQ0lFUlEwQUlBQWdCQkdBZ0lDQUFBQWhBd3NnQXd0SkFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUlNSWdSRkRRQWdBQ0FCSUFJZ0FXc2dCQkdCZ0lDQUFBQWlBMEYvUncwQUlBQkI3WnFBZ0FBMkFoQkJHQ0VEQ3lBREN5NEJBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWpnaUJFVU5BQ0FBSUFRUmdJQ0FnQUFBSVFNTElBTUxTUUVDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ0VDSUVSUTBBSUFBZ0FTQUNJQUZySUFRUmdZQ0FnQUFBSWdOQmYwY05BQ0FBUVpXUWdJQUFOZ0lRUVJnaEF3c2dBd3N1QVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSThJZ1JGRFFBZ0FDQUVFWUNBZ0lBQUFDRURDeUFEQzBrQkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9BaFFpQkVVTkFDQUFJQUVnQWlBQmF5QUVFWUdBZ0lBQUFDSURRWDlIRFFBZ0FFR3FtNENBQURZQ0VFRVlJUU1MSUFNTExnRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDUUNJRVJRMEFJQUFnQkJHQWdJQ0FBQUFoQXdzZ0F3dEpBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FJWUlnUkZEUUFnQUNBQklBSWdBV3NnQkJHQmdJQ0FBQUFpQTBGL1J3MEFJQUJCN1pPQWdBQTJBaEJCR0NFREN5QURDeTRCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FrUWlCRVVOQUNBQUlBUVJnSUNBZ0FBQUlRTUxJQU1MTGdFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NKQ0lFUlEwQUlBQWdCQkdBZ0lDQUFBQWhBd3NnQXdzdUFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUlzSWdSRkRRQWdBQ0FFRVlDQWdJQUFBQ0VEQ3lBREMwa0JBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWlnaUJFVU5BQ0FBSUFFZ0FpQUJheUFFRVlHQWdJQUFBQ0lEUVg5SERRQWdBRUgyaUlDQUFEWUNFRUVZSVFNTElBTUxMZ0VDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ1VDSUVSUTBBSUFBZ0JCR0FnSUNBQUFBaEF3c2dBd3RKQVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSWNJZ1JGRFFBZ0FDQUJJQUlnQVdzZ0JCR0JnSUNBQUFBaUEwRi9SdzBBSUFCQndwbUFnQUEyQWhCQkdDRURDeUFEQ3k0QkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9Ba2dpQkVVTkFDQUFJQVFSZ0lDQWdBQUFJUU1MSUFNTFNRRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDSUNJRVJRMEFJQUFnQVNBQ0lBRnJJQVFSZ1lDQWdBQUFJZ05CZjBjTkFDQUFRWlNVZ0lBQU5nSVFRUmdoQXdzZ0F3c3VBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FKTUlnUkZEUUFnQUNBRUVZQ0FnSUFBQUNFREN5QURDeTRCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FsUWlCRVVOQUNBQUlBUVJnSUNBZ0FBQUlRTUxJQU1MTGdFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NXQ0lFUlEwQUlBQWdCQkdBZ0lDQUFBQWhBd3NnQXd0RkFRRi9Ba0FDUUNBQUx3RXdRUlJ4UVJSSERRQkJBU0VESUFBdEFDaEJBVVlOQVNBQUx3RXlRZVVBUmlFRERBRUxJQUF0QUNsQkJVWWhBd3NnQUNBRE9nQXVRUUFML2dFQkEzOUJBU0VEQWtBZ0FDOEJNQ0lFUVFoeERRQWdBQ2tESUVJQVVpRURDd0pBQWtBZ0FDMEFMa1VOQUVFQklRVWdBQzBBS1VFRlJnMEJRUUVoQlNBRVFjQUFjVVVnQTNGQkFVY05BUXRCQUNFRklBUkJ3QUJ4RFFCQkFpRUZJQVJCLy84RGNTSURRUWh4RFFBQ1FDQURRWUFFY1VVTkFBSkFJQUF0QUNoQkFVY05BQ0FBTFFBdFFRcHhEUUJCQlE4TFFRUVBDd0pBSUFOQklIRU5BQUpBSUFBdEFDaEJBVVlOQUNBQUx3RXlRZi8vQTNFaUFFR2NmMnBCNUFCSkRRQWdBRUhNQVVZTkFDQUFRYkFDUmcwQVFRUWhCU0FFUVNoeFJRMENJQU5CaUFSeFFZQUVSZzBDQzBFQUR3dEJBRUVESUFBcEF5QlFHeUVGQ3lBRkMySUJBbjlCQUNFQkFrQWdBQzBBS0VFQlJnMEFJQUF2QVRKQi8vOERjU0lDUVp4L2FrSGtBRWtOQUNBQ1Fjd0JSZzBBSUFKQnNBSkdEUUFnQUM4Qk1DSUFRY0FBY1EwQVFRRWhBU0FBUVlnRWNVR0FCRVlOQUNBQVFTaHhSU0VCQ3lBQkM2Y0JBUU4vQWtBQ1FBSkFJQUF0QUNwRkRRQWdBQzBBSzBVTkFFRUFJUU1nQUM4Qk1DSUVRUUp4UlEwQkRBSUxRUUFoQXlBQUx3RXdJZ1JCQVhGRkRRRUxRUUVoQXlBQUxRQW9RUUZHRFFBZ0FDOEJNa0gvL3dOeElnVkJuSDlxUWVRQVNRMEFJQVZCekFGR0RRQWdCVUd3QWtZTkFDQUVRY0FBY1EwQVFRQWhBeUFFUVlnRWNVR0FCRVlOQUNBRVFTaHhRUUJISVFNTElBQkJBRHNCTUNBQVFRQTZBQzhnQXd1WkFRRUNmd0pBQWtBQ1FDQUFMUUFxUlEwQUlBQXRBQ3RGRFFCQkFDRUJJQUF2QVRBaUFrRUNjVVVOQVF3Q0MwRUFJUUVnQUM4Qk1DSUNRUUZ4UlEwQkMwRUJJUUVnQUMwQUtFRUJSZzBBSUFBdkFUSkIvLzhEY1NJQVFaeC9ha0hrQUVrTkFDQUFRY3dCUmcwQUlBQkJzQUpHRFFBZ0FrSEFBSEVOQUVFQUlRRWdBa0dJQkhGQmdBUkdEUUFnQWtFb2NVRUFSeUVCQ3lBQkMwa0JBWHNnQUVFUWF2ME1BQUFBQUFBQUFBQUFBQUFBQUFBQUFDSUIvUXNEQUNBQUlBSDlDd01BSUFCQk1Hb2dBZjBMQXdBZ0FFRWdhaUFCL1FzREFDQUFRZDBCTmdJY1FRQUxld0VCZndKQUlBQW9BZ3dpQXcwQUFrQWdBQ2dDQkVVTkFDQUFJQUUyQWdRTEFrQWdBQ0FCSUFJUXhJQ0FnQUFpQXcwQUlBQW9BZ3dQQ3lBQUlBTTJBaHhCQUNFRElBQW9BZ1FpQVVVTkFDQUFJQUVnQWlBQUtBSUlFWUdBZ0lBQUFDSUJSUTBBSUFBZ0FqWUNGQ0FBSUFFMkFnd2dBU0VEQ3lBREMrVHpBUU1PZndOK0JIOGpnSUNBZ0FCQkVHc2lBeVNBZ0lDQUFDQUJJUVFnQVNFRklBRWhCaUFCSVFjZ0FTRUlJQUVoQ1NBQklRb2dBU0VMSUFFaERDQUJJUTBnQVNFT0lBRWhEd0pBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQ0FBS0FJY0loQkJmMm9PM1FIYUFRSFpBUUlEQkFVR0J3Z0pDZ3NNRFE3WUFROFExd0VSRXRZQkV4UVZGaGNZR1JvYjRBSGZBUndkSHRVQkh5QWhJaU1rSmRRQkppY29LU29yTE5NQjBnRXRMdEVCMEFFdk1ERXlNelExTmpjNE9UbzdQRDArUDBCQlFrTkVSVWJiQVVkSVNVclBBYzRCUzgwQlRNd0JUVTVQVUZGU1UxUlZWbGRZV1ZwYlhGMWVYMkJoWW1Oa1pXWm5hR2xxYTJ4dGJtOXdjWEp6ZEhWMmQzaDVlbnQ4Zlg1L2dBR0JBWUlCZ3dHRUFZVUJoZ0dIQVlnQmlRR0tBWXNCakFHTkFZNEJqd0dRQVpFQmtnR1RBWlFCbFFHV0FaY0JtQUdaQVpvQm13R2NBWjBCbmdHZkFhQUJvUUdpQWFNQnBBR2xBYVlCcHdHb0Fha0JxZ0dyQWF3QnJRR3VBYThCc0FHeEFiSUJzd0cwQWJVQnRnRzNBY3NCeWdHNEFja0J1UUhJQWJvQnV3RzhBYjBCdmdHL0FjQUJ3UUhDQWNNQnhBSEZBY1lCQU53QkMwRUFJUkFNeGdFTFFRNGhFQXpGQVF0QkRTRVFETVFCQzBFUElSQU13d0VMUVJBaEVBekNBUXRCRXlFUURNRUJDMEVVSVJBTXdBRUxRUlVoRUF5L0FRdEJGaUVRREw0QkMwRVhJUkFNdlFFTFFSZ2hFQXk4QVF0QkdTRVFETHNCQzBFYUlSQU11Z0VMUVJzaEVBeTVBUXRCSENFUURMZ0JDMEVJSVJBTXR3RUxRUjBoRUF5MkFRdEJJQ0VRRExVQkMwRWZJUkFNdEFFTFFRY2hFQXl6QVF0QklTRVFETElCQzBFaUlSQU1zUUVMUVI0aEVBeXdBUXRCSXlFUURLOEJDMEVTSVJBTXJnRUxRUkVoRUF5dEFRdEJKQ0VRREt3QkMwRWxJUkFNcXdFTFFTWWhFQXlxQVF0Qkp5RVFES2tCQzBIREFTRVFES2dCQzBFcElSQU1wd0VMUVNzaEVBeW1BUXRCTENFUURLVUJDMEV0SVJBTXBBRUxRUzRoRUF5akFRdEJMeUVRREtJQkMwSEVBU0VRREtFQkMwRXdJUkFNb0FFTFFUUWhFQXlmQVF0QkRDRVFESjRCQzBFeElSQU1uUUVMUVRJaEVBeWNBUXRCTXlFUURKc0JDMEU1SVJBTW1nRUxRVFVoRUF5WkFRdEJ4UUVoRUF5WUFRdEJDeUVRREpjQkMwRTZJUkFNbGdFTFFUWWhFQXlWQVF0QkNpRVFESlFCQzBFM0lSQU1rd0VMUVRnaEVBeVNBUXRCUENFUURKRUJDMEU3SVJBTWtBRUxRVDBoRUF5UEFRdEJDU0VRREk0QkMwRW9JUkFNalFFTFFUNGhFQXlNQVF0QlB5RVFESXNCQzBIQUFDRVFESW9CQzBIQkFDRVFESWtCQzBIQ0FDRVFESWdCQzBIREFDRVFESWNCQzBIRUFDRVFESVlCQzBIRkFDRVFESVVCQzBIR0FDRVFESVFCQzBFcUlSQU1nd0VMUWNjQUlSQU1nZ0VMUWNnQUlSQU1nUUVMUWNrQUlSQU1nQUVMUWNvQUlSQU1md3RCeXdBaEVBeCtDMEhOQUNFUURIMExRY3dBSVJBTWZBdEJ6Z0FoRUF4N0MwSFBBQ0VRREhvTFFkQUFJUkFNZVF0QjBRQWhFQXg0QzBIU0FDRVFESGNMUWRNQUlSQU1kZ3RCMUFBaEVBeDFDMEhXQUNFUURIUUxRZFVBSVJBTWN3dEJCaUVRREhJTFFkY0FJUkFNY1F0QkJTRVFESEFMUWRnQUlSQU1id3RCQkNFUURHNExRZGtBSVJBTWJRdEIyZ0FoRUF4c0MwSGJBQ0VRREdzTFFkd0FJUkFNYWd0QkF5RVFER2tMUWQwQUlSQU1hQXRCM2dBaEVBeG5DMEhmQUNFUURHWUxRZUVBSVJBTVpRdEI0QUFoRUF4a0MwSGlBQ0VRREdNTFFlTUFJUkFNWWd0QkFpRVFER0VMUWVRQUlSQU1ZQXRCNVFBaEVBeGZDMEhtQUNFUURGNExRZWNBSVJBTVhRdEI2QUFoRUF4Y0MwSHBBQ0VRREZzTFFlb0FJUkFNV2d0QjZ3QWhFQXhaQzBIc0FDRVFERmdMUWUwQUlSQU1Wd3RCN2dBaEVBeFdDMEh2QUNFUURGVUxRZkFBSVJBTVZBdEI4UUFoRUF4VEMwSHlBQ0VRREZJTFFmTUFJUkFNVVF0QjlBQWhFQXhRQzBIMUFDRVFERThMUWZZQUlSQU1UZ3RCOXdBaEVBeE5DMEg0QUNFUURFd0xRZmtBSVJBTVN3dEIrZ0FoRUF4S0MwSDdBQ0VRREVrTFFmd0FJUkFNU0F0Qi9RQWhFQXhIQzBIK0FDRVFERVlMUWY4QUlSQU1SUXRCZ0FFaEVBeEVDMEdCQVNFUURFTUxRWUlCSVJBTVFndEJnd0VoRUF4QkMwR0VBU0VRREVBTFFZVUJJUkFNUHd0QmhnRWhFQXcrQzBHSEFTRVFERDBMUVlnQklSQU1QQXRCaVFFaEVBdzdDMEdLQVNFUUREb0xRWXNCSVJBTU9RdEJqQUVoRUF3NEMwR05BU0VRRERjTFFZNEJJUkFNTmd0Qmp3RWhFQXcxQzBHUUFTRVFERFFMUVpFQklSQU1Nd3RCa2dFaEVBd3lDMEdUQVNFUURERUxRWlFCSVJBTU1BdEJsUUVoRUF3dkMwR1dBU0VRREM0TFFaY0JJUkFNTFF0Qm1BRWhFQXdzQzBHWkFTRVFEQ3NMUVpvQklSQU1LZ3RCbXdFaEVBd3BDMEdjQVNFUURDZ0xRWjBCSVJBTUp3dEJuZ0VoRUF3bUMwR2ZBU0VRRENVTFFhQUJJUkFNSkF0Qm9RRWhFQXdqQzBHaUFTRVFEQ0lMUWFNQklSQU1JUXRCcEFFaEVBd2dDMEdsQVNFUURCOExRYVlCSVJBTUhndEJwd0VoRUF3ZEMwR29BU0VRREJ3TFFha0JJUkFNR3d0QnFnRWhFQXdhQzBHckFTRVFEQmtMUWF3QklSQU1HQXRCclFFaEVBd1hDMEd1QVNFUURCWUxRUUVoRUF3VkMwR3ZBU0VRREJRTFFiQUJJUkFNRXd0QnNRRWhFQXdTQzBHekFTRVFEQkVMUWJJQklSQU1FQXRCdEFFaEVBd1BDMEcxQVNFUURBNExRYllCSVJBTURRdEJ0d0VoRUF3TUMwRzRBU0VRREFzTFFia0JJUkFNQ2d0QnVnRWhFQXdKQzBHN0FTRVFEQWdMUWNZQklSQU1Cd3RCdkFFaEVBd0dDMEc5QVNFUURBVUxRYjRCSVJBTUJBdEJ2d0VoRUF3REMwSEFBU0VRREFJTFFjSUJJUkFNQVF0QndRRWhFQXNEUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUlCQU94d0VBQVFJREJBVUdCd2dKQ2dzTURRNFBFQkVTRXhRVkZoY1lHUm9iSEI0ZklDRWpKU2cvUUVGRVJVWkhTRWxLUzB4TlQxQlJVbFBlQTFkWlcxeGRZR0psWm1kb2FXcHJiRzF2Y0hGeWMzUjFkbmQ0ZVhwN2ZIMStnQUdDQVlVQmhnR0hBWWtCaXdHTUFZMEJqZ0dQQVpBQmtRR1VBWlVCbGdHWEFaZ0JtUUdhQVpzQm5BR2RBWjRCbndHZ0FhRUJvZ0dqQWFRQnBRR21BYWNCcUFHcEFhb0Jxd0dzQWEwQnJnR3ZBYkFCc1FHeUFiTUJ0QUcxQWJZQnR3RzRBYmtCdWdHN0Fid0J2UUcrQWI4QndBSEJBY0lCd3dIRUFjVUJ4Z0hIQWNnQnlRSEtBY3NCekFITkFjNEJ6d0hRQWRFQjBnSFRBZFFCMVFIV0FkY0IyQUhaQWRvQjJ3SGNBZDBCM2dIZ0FlRUI0Z0hqQWVRQjVRSG1BZWNCNkFIcEFlb0I2d0hzQWUwQjdnSHZBZkFCOFFIeUFmTUJtUUtrQXJBQy9nTCtBZ3NnQVNJRUlBSkhEZk1CUWQwQklSQU0vd01MSUFFaUVDQUNSdzNkQVVIREFTRVFEUDREQ3lBQklnRWdBa2NOa0FGQjl3QWhFQXo5QXdzZ0FTSUJJQUpIRFlZQlFlOEFJUkFNL0FNTElBRWlBU0FDUncxL1Flb0FJUkFNK3dNTElBRWlBU0FDUncxN1FlZ0FJUkFNK2dNTElBRWlBU0FDUncxNFFlWUFJUkFNK1FNTElBRWlBU0FDUncwYVFSZ2hFQXo0QXdzZ0FTSUJJQUpIRFJSQkVpRVFEUGNEQ3lBQklnRWdBa2NOV1VIRkFDRVFEUFlEQ3lBQklnRWdBa2NOU2tFL0lSQU05UU1MSUFFaUFTQUNSdzFJUVR3aEVBejBBd3NnQVNJQklBSkhEVUZCTVNFUURQTURDeUFBTFFBdVFRRkdEZXNEREljQ0N5QUFJQUVpQVNBQ0VNQ0FnSUFBUVFGSERlWUJJQUJDQURjRElBem5BUXNnQUNBQklnRWdBaEMwZ0lDQUFDSVFEZWNCSUFFaEFRejFBZ3NDUUNBQklnRWdBa2NOQUVFR0lSQU04QU1MSUFBZ0FVRUJhaUlCSUFJUXU0Q0FnQUFpRUEzb0FTQUJJUUVNTVFzZ0FFSUFOd01nUVJJaEVBelZBd3NnQVNJUUlBSkhEU3RCSFNFUURPMERDd0pBSUFFaUFTQUNSZzBBSUFGQkFXb2hBVUVRSVJBTTFBTUxRUWNoRUF6c0F3c2dBRUlBSUFBcEF5QWlFU0FDSUFFaUVHdXRJaEo5SWhNZ0V5QVJWaHMzQXlBZ0VTQVNWaUlVUlEzbEFVRUlJUkFNNndNTEFrQWdBU0lCSUFKR0RRQWdBRUdKZ0lDQUFEWUNDQ0FBSUFFMkFnUWdBU0VCUVJRaEVBelNBd3RCQ1NFUURPb0RDeUFCSVFFZ0FDa0RJRkFONUFFZ0FTRUJEUElDQ3dKQUlBRWlBU0FDUncwQVFRc2hFQXpwQXdzZ0FDQUJRUUZxSWdFZ0FoQzJnSUNBQUNJUURlVUJJQUVoQVF6eUFnc2dBQ0FCSWdFZ0FoQzRnSUNBQUNJUURlVUJJQUVoQVF6eUFnc2dBQ0FCSWdFZ0FoQzRnSUNBQUNJUURlWUJJQUVoQVF3TkN5QUFJQUVpQVNBQ0VMcUFnSUFBSWhBTjV3RWdBU0VCRFBBQ0N3SkFJQUVpQVNBQ1J3MEFRUThoRUF6bEF3c2dBUzBBQUNJUVFUdEdEUWdnRUVFTlJ3M29BU0FCUVFGcUlRRU03d0lMSUFBZ0FTSUJJQUlRdW9DQWdBQWlFQTNvQVNBQklRRU04Z0lMQTBBQ1FDQUJMUUFBUWZDMWdJQUFhaTBBQUNJUVFRRkdEUUFnRUVFQ1J3M3JBU0FBS0FJRUlSQWdBRUVBTmdJRUlBQWdFQ0FCUVFGcUlnRVF1WUNBZ0FBaUVBM3FBU0FCSVFFTTlBSUxJQUZCQVdvaUFTQUNSdzBBQzBFU0lSQU00Z01MSUFBZ0FTSUJJQUlRdW9DQWdBQWlFQTNwQVNBQklRRU1DZ3NnQVNJQklBSkhEUVpCR3lFUURPQURDd0pBSUFFaUFTQUNSdzBBUVJZaEVBemdBd3NnQUVHS2dJQ0FBRFlDQ0NBQUlBRTJBZ1FnQUNBQklBSVF1SUNBZ0FBaUVBM3FBU0FCSVFGQklDRVFETVlEQ3dKQUlBRWlBU0FDUmcwQUEwQUNRQ0FCTFFBQVFmQzNnSUFBYWkwQUFDSVFRUUpHRFFBQ1FDQVFRWDlxRGdUbEFld0JBT3NCN0FFTElBRkJBV29oQVVFSUlSQU15QU1MSUFGQkFXb2lBU0FDUncwQUMwRVZJUkFNM3dNTFFSVWhFQXplQXdzRFFBSkFJQUV0QUFCQjhMbUFnQUJxTFFBQUloQkJBa1lOQUNBUVFYOXFEZ1RlQWV3QjRBSHJBZXdCQ3lBQlFRRnFJZ0VnQWtjTkFBdEJHQ0VRRE4wREN3SkFJQUVpQVNBQ1JnMEFJQUJCaTRDQWdBQTJBZ2dnQUNBQk5nSUVJQUVoQVVFSElSQU14QU1MUVJraEVBemNBd3NnQVVFQmFpRUJEQUlMQWtBZ0FTSVVJQUpIRFFCQkdpRVFETnNEQ3lBVUlRRUNRQ0FVTFFBQVFYTnFEaFRkQXU0QzdnTHVBdTRDN2dMdUF1NEM3Z0x1QXU0QzdnTHVBdTRDN2dMdUF1NEM3Z0x1QWdEdUFndEJBQ0VRSUFCQkFEWUNIQ0FBUWErTGdJQUFOZ0lRSUFCQkFqWUNEQ0FBSUJSQkFXbzJBaFFNMmdNTEFrQWdBUzBBQUNJUVFUdEdEUUFnRUVFTlJ3M29BU0FCUVFGcUlRRU01UUlMSUFGQkFXb2hBUXRCSWlFUURMOERDd0pBSUFFaUVDQUNSdzBBUVJ3aEVBellBd3RDQUNFUklCQWhBU0FRTFFBQVFWQnFEamZuQWVZQkFRSURCQVVHQndnQUFBQUFBQUFBQ1FvTERBME9BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVBFQkVTRXhRQUMwRWVJUkFNdlFNTFFnSWhFUXpsQVF0Q0F5RVJET1FCQzBJRUlSRU00d0VMUWdVaEVRemlBUXRDQmlFUkRPRUJDMElISVJFTTRBRUxRZ2doRVF6ZkFRdENDU0VSRE40QkMwSUtJUkVNM1FFTFFnc2hFUXpjQVF0Q0RDRVJETnNCQzBJTklSRU0yZ0VMUWc0aEVRelpBUXRDRHlFUkROZ0JDMElLSVJFTTF3RUxRZ3NoRVF6V0FRdENEQ0VSRE5VQkMwSU5JUkVNMUFFTFFnNGhFUXpUQVF0Q0R5RVJETklCQzBJQUlSRUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBSUJBdEFBQkJVR29PTitVQjVBRUFBUUlEQkFVR0IrWUI1Z0htQWVZQjVnSG1BZVlCQ0FrS0N3d041Z0htQWVZQjVnSG1BZVlCNWdIbUFlWUI1Z0htQWVZQjVnSG1BZVlCNWdIbUFlWUI1Z0htQWVZQjVnSG1BZVlCNWdIbUFRNFBFQkVTRStZQkMwSUNJUkVNNUFFTFFnTWhFUXpqQVF0Q0JDRVJET0lCQzBJRklSRU00UUVMUWdZaEVRemdBUXRDQnlFUkROOEJDMElJSVJFTTNnRUxRZ2toRVF6ZEFRdENDaUVSRE53QkMwSUxJUkVNMndFTFFnd2hFUXphQVF0Q0RTRVJETmtCQzBJT0lSRU0yQUVMUWc4aEVRelhBUXRDQ2lFUkROWUJDMElMSVJFTTFRRUxRZ3doRVF6VUFRdENEU0VSRE5NQkMwSU9JUkVNMGdFTFFnOGhFUXpSQVFzZ0FFSUFJQUFwQXlBaUVTQUNJQUVpRUd1dEloSjlJaE1nRXlBUlZoczNBeUFnRVNBU1ZpSVVSUTNTQVVFZklSQU13QU1MQWtBZ0FTSUJJQUpHRFFBZ0FFR0pnSUNBQURZQ0NDQUFJQUUyQWdRZ0FTRUJRU1FoRUF5bkF3dEJJQ0VRREw4REN5QUFJQUVpRUNBQ0VMNkFnSUFBUVg5cURnVzJBUURGQWdIUkFkSUJDMEVSSVJBTXBBTUxJQUJCQVRvQUx5QVFJUUVNdXdNTElBRWlBU0FDUnczU0FVRWtJUkFNdXdNTElBRWlEU0FDUncwZVFjWUFJUkFNdWdNTElBQWdBU0lCSUFJUXNvQ0FnQUFpRUEzVUFTQUJJUUVNdFFFTElBRWlFQ0FDUncwbVFkQUFJUkFNdUFNTEFrQWdBU0lCSUFKSERRQkJLQ0VRRExnREN5QUFRUUEyQWdRZ0FFR01nSUNBQURZQ0NDQUFJQUVnQVJDeGdJQ0FBQ0lRRGRNQklBRWhBUXpZQVFzQ1FDQUJJaEFnQWtjTkFFRXBJUkFNdHdNTElCQXRBQUFpQVVFZ1JnMFVJQUZCQ1VjTjB3RWdFRUVCYWlFQkRCVUxBa0FnQVNJQklBSkdEUUFnQVVFQmFpRUJEQmNMUVNvaEVBeTFBd3NDUUNBQkloQWdBa2NOQUVFcklSQU10UU1MQWtBZ0VDMEFBQ0lCUVFsR0RRQWdBVUVnUnczVkFRc2dBQzBBTEVFSVJnM1RBU0FRSVFFTWtRTUxBa0FnQVNJQklBSkhEUUJCTENFUURMUURDeUFCTFFBQVFRcEhEZFVCSUFGQkFXb2hBUXpKQWdzZ0FTSU9JQUpIRGRVQlFTOGhFQXl5QXdzRFFBSkFJQUV0QUFBaUVFRWdSZzBBQWtBZ0VFRjJhZzRFQU53QjNBRUEyZ0VMSUFFaEFRemdBUXNnQVVFQmFpSUJJQUpIRFFBTFFURWhFQXl4QXd0Qk1pRVFJQUVpRkNBQ1JnMndBeUFDSUJScklBQW9BZ0FpQVdvaEZTQVVJQUZyUVFOcUlSWUNRQU5BSUJRdEFBQWlGMEVnY2lBWElCZEJ2MzlxUWY4QmNVRWFTUnRCL3dGeElBRkI4THVBZ0FCcUxRQUFSdzBCQWtBZ0FVRURSdzBBUVFZaEFReVdBd3NnQVVFQmFpRUJJQlJCQVdvaUZDQUNSdzBBQ3lBQUlCVTJBZ0FNc1FNTElBQkJBRFlDQUNBVUlRRU0yUUVMUVRNaEVDQUJJaFFnQWtZTnJ3TWdBaUFVYXlBQUtBSUFJZ0ZxSVJVZ0ZDQUJhMEVJYWlFV0FrQURRQ0FVTFFBQUloZEJJSElnRnlBWFFiOS9ha0gvQVhGQkdra2JRZjhCY1NBQlFmUzdnSUFBYWkwQUFFY05BUUpBSUFGQkNFY05BRUVGSVFFTWxRTUxJQUZCQVdvaEFTQVVRUUZxSWhRZ0FrY05BQXNnQUNBVk5nSUFETEFEQ3lBQVFRQTJBZ0FnRkNFQkROZ0JDMEUwSVJBZ0FTSVVJQUpHRGE0RElBSWdGR3NnQUNnQ0FDSUJhaUVWSUJRZ0FXdEJCV29oRmdKQUEwQWdGQzBBQUNJWFFTQnlJQmNnRjBHL2YycEIvd0Z4UVJwSkcwSC9BWEVnQVVIUXdvQ0FBR290QUFCSERRRUNRQ0FCUVFWSERRQkJCeUVCREpRREN5QUJRUUZxSVFFZ0ZFRUJhaUlVSUFKSERRQUxJQUFnRlRZQ0FBeXZBd3NnQUVFQU5nSUFJQlFoQVF6WEFRc0NRQ0FCSWdFZ0FrWU5BQU5BQWtBZ0FTMEFBRUdBdm9DQUFHb3RBQUFpRUVFQlJnMEFJQkJCQWtZTkNpQUJJUUVNM1FFTElBRkJBV29pQVNBQ1J3MEFDMEV3SVJBTXJnTUxRVEFoRUF5dEF3c0NRQ0FCSWdFZ0FrWU5BQU5BQWtBZ0FTMEFBQ0lRUVNCR0RRQWdFRUYyYWc0RTJRSGFBZG9CMlFIYUFRc2dBVUVCYWlJQklBSkhEUUFMUVRnaEVBeXRBd3RCT0NFUURLd0RDd05BQWtBZ0FTMEFBQ0lRUVNCR0RRQWdFRUVKUncwREN5QUJRUUZxSWdFZ0FrY05BQXRCUENFUURLc0RDd05BQWtBZ0FTMEFBQ0lRUVNCR0RRQUNRQUpBSUJCQmRtb09CTm9CQVFIYUFRQUxJQkJCTEVZTjJ3RUxJQUVoQVF3RUN5QUJRUUZxSWdFZ0FrY05BQXRCUHlFUURLb0RDeUFCSVFFTTJ3RUxRY0FBSVJBZ0FTSVVJQUpHRGFnRElBSWdGR3NnQUNnQ0FDSUJhaUVXSUJRZ0FXdEJCbW9oRndKQUEwQWdGQzBBQUVFZ2NpQUJRWURBZ0lBQWFpMEFBRWNOQVNBQlFRWkdEWTRESUFGQkFXb2hBU0FVUVFGcUloUWdBa2NOQUFzZ0FDQVdOZ0lBREtrREN5QUFRUUEyQWdBZ0ZDRUJDMEUySVJBTWpnTUxBa0FnQVNJUElBSkhEUUJCd1FBaEVBeW5Bd3NnQUVHTWdJQ0FBRFlDQ0NBQUlBODJBZ1FnRHlFQklBQXRBQ3hCZjJvT0JNMEIxUUhYQWRrQmh3TUxJQUZCQVdvaEFRek1BUXNDUUNBQklnRWdBa1lOQUFOQUFrQWdBUzBBQUNJUVFTQnlJQkFnRUVHL2YycEIvd0Z4UVJwSkcwSC9BWEVpRUVFSlJnMEFJQkJCSUVZTkFBSkFBa0FDUUFKQUlCQkJuWDlxRGhNQUF3TURBd01EQXdFREF3TURBd01EQXdNQ0F3c2dBVUVCYWlFQlFURWhFQXlSQXdzZ0FVRUJhaUVCUVRJaEVBeVFBd3NnQVVFQmFpRUJRVE1oRUF5UEF3c2dBU0VCRE5BQkN5QUJRUUZxSWdFZ0FrY05BQXRCTlNFUURLVURDMEUxSVJBTXBBTUxBa0FnQVNJQklBSkdEUUFEUUFKQUlBRXRBQUJCZ0x5QWdBQnFMUUFBUVFGR0RRQWdBU0VCRE5NQkN5QUJRUUZxSWdFZ0FrY05BQXRCUFNFUURLUURDMEU5SVJBTW93TUxJQUFnQVNJQklBSVFzSUNBZ0FBaUVBM1dBU0FCSVFFTUFRc2dFRUVCYWlFQkMwRThJUkFNaHdNTEFrQWdBU0lCSUFKSERRQkJ3Z0FoRUF5Z0F3c0NRQU5BQWtBZ0FTMEFBRUYzYWc0WUFBTCtBdjRDaEFQK0F2NEMvZ0wrQXY0Qy9nTCtBdjRDL2dMK0F2NEMvZ0wrQXY0Qy9nTCtBdjRDL2dJQS9nSUxJQUZCQVdvaUFTQUNSdzBBQzBIQ0FDRVFES0FEQ3lBQlFRRnFJUUVnQUMwQUxVRUJjVVVOdlFFZ0FTRUJDMEVzSVJBTWhRTUxJQUVpQVNBQ1J3M1RBVUhFQUNFUURKMERDd05BQWtBZ0FTMEFBRUdRd0lDQUFHb3RBQUJCQVVZTkFDQUJJUUVNdHdJTElBRkJBV29pQVNBQ1J3MEFDMEhGQUNFUURKd0RDeUFOTFFBQUloQkJJRVlOc3dFZ0VFRTZSdzJCQXlBQUtBSUVJUUVnQUVFQU5nSUVJQUFnQVNBTkVLK0FnSUFBSWdFTjBBRWdEVUVCYWlFQkRMTUNDMEhIQUNFUUlBRWlEU0FDUmcyYUF5QUNJQTFySUFBb0FnQWlBV29oRmlBTklBRnJRUVZxSVJjRFFDQU5MUUFBSWhSQklISWdGQ0FVUWI5L2FrSC9BWEZCR2trYlFmOEJjU0FCUVpEQ2dJQUFhaTBBQUVjTmdBTWdBVUVGUmczMEFpQUJRUUZxSVFFZ0RVRUJhaUlOSUFKSERRQUxJQUFnRmpZQ0FBeWFBd3RCeUFBaEVDQUJJZzBnQWtZTm1RTWdBaUFOYXlBQUtBSUFJZ0ZxSVJZZ0RTQUJhMEVKYWlFWEEwQWdEUzBBQUNJVVFTQnlJQlFnRkVHL2YycEIvd0Z4UVJwSkcwSC9BWEVnQVVHV3dvQ0FBR290QUFCSERmOENBa0FnQVVFSlJ3MEFRUUloQVF6MUFnc2dBVUVCYWlFQklBMUJBV29pRFNBQ1J3MEFDeUFBSUJZMkFnQU1tUU1MQWtBZ0FTSU5JQUpIRFFCQnlRQWhFQXlaQXdzQ1FBSkFJQTB0QUFBaUFVRWdjaUFCSUFGQnYzOXFRZjhCY1VFYVNSdEIvd0Z4UVpKL2FnNEhBSUFEZ0FPQUE0QURnQU1CZ0FNTElBMUJBV29oQVVFK0lSQU1nQU1MSUExQkFXb2hBVUUvSVJBTS93SUxRY29BSVJBZ0FTSU5JQUpHRFpjRElBSWdEV3NnQUNnQ0FDSUJhaUVXSUEwZ0FXdEJBV29oRndOQUlBMHRBQUFpRkVFZ2NpQVVJQlJCdjM5cVFmOEJjVUVhU1J0Qi93RnhJQUZCb01LQWdBQnFMUUFBUnczOUFpQUJRUUZHRGZBQ0lBRkJBV29oQVNBTlFRRnFJZzBnQWtjTkFBc2dBQ0FXTmdJQURKY0RDMEhMQUNFUUlBRWlEU0FDUmcyV0F5QUNJQTFySUFBb0FnQWlBV29oRmlBTklBRnJRUTVxSVJjRFFDQU5MUUFBSWhSQklISWdGQ0FVUWI5L2FrSC9BWEZCR2trYlFmOEJjU0FCUWFMQ2dJQUFhaTBBQUVjTi9BSWdBVUVPUmczd0FpQUJRUUZxSVFFZ0RVRUJhaUlOSUFKSERRQUxJQUFnRmpZQ0FBeVdBd3RCekFBaEVDQUJJZzBnQWtZTmxRTWdBaUFOYXlBQUtBSUFJZ0ZxSVJZZ0RTQUJhMEVQYWlFWEEwQWdEUzBBQUNJVVFTQnlJQlFnRkVHL2YycEIvd0Z4UVJwSkcwSC9BWEVnQVVIQXdvQ0FBR290QUFCSERmc0NBa0FnQVVFUFJ3MEFRUU1oQVF6eEFnc2dBVUVCYWlFQklBMUJBV29pRFNBQ1J3MEFDeUFBSUJZMkFnQU1sUU1MUWMwQUlSQWdBU0lOSUFKR0RaUURJQUlnRFdzZ0FDZ0NBQ0lCYWlFV0lBMGdBV3RCQldvaEZ3TkFJQTB0QUFBaUZFRWdjaUFVSUJSQnYzOXFRZjhCY1VFYVNSdEIvd0Z4SUFGQjBNS0FnQUJxTFFBQVJ3MzZBZ0pBSUFGQkJVY05BRUVFSVFFTThBSUxJQUZCQVdvaEFTQU5RUUZxSWcwZ0FrY05BQXNnQUNBV05nSUFESlFEQ3dKQUlBRWlEU0FDUncwQVFjNEFJUkFNbEFNTEFrQUNRQUpBQWtBZ0RTMEFBQ0lCUVNCeUlBRWdBVUcvZjJwQi93RnhRUnBKRzBIL0FYRkJuWDlxRGhNQS9RTDlBdjBDL1FMOUF2MEMvUUw5QXYwQy9RTDlBdjBDQWYwQy9RTDlBZ0lEL1FJTElBMUJBV29oQVVIQkFDRVFEUDBDQ3lBTlFRRnFJUUZCd2dBaEVBejhBZ3NnRFVFQmFpRUJRY01BSVJBTSt3SUxJQTFCQVdvaEFVSEVBQ0VRRFBvQ0N3SkFJQUVpQVNBQ1JnMEFJQUJCallDQWdBQTJBZ2dnQUNBQk5nSUVJQUVoQVVIRkFDRVFEUG9DQzBIUEFDRVFESklEQ3lBUUlRRUNRQUpBSUJBdEFBQkJkbW9PQkFHb0FxZ0NBS2dDQ3lBUVFRRnFJUUVMUVNjaEVBejRBZ3NDUUNBQklnRWdBa2NOQUVIUkFDRVFESkVEQ3dKQUlBRXRBQUJCSUVZTkFDQUJJUUVNalFFTElBRkJBV29oQVNBQUxRQXRRUUZ4UlEzSEFTQUJJUUVNakFFTElBRWlGeUFDUnczSUFVSFNBQ0VRREk4REMwSFRBQ0VRSUFFaUZDQUNSZzJPQXlBQ0lCUnJJQUFvQWdBaUFXb2hGaUFVSUFGclFRRnFJUmNEUUNBVUxRQUFJQUZCMXNLQWdBQnFMUUFBUnczTUFTQUJRUUZHRGNjQklBRkJBV29oQVNBVVFRRnFJaFFnQWtjTkFBc2dBQ0FXTmdJQURJNERDd0pBSUFFaUFTQUNSdzBBUWRVQUlSQU1qZ01MSUFFdEFBQkJDa2NOekFFZ0FVRUJhaUVCRE1jQkN3SkFJQUVpQVNBQ1J3MEFRZFlBSVJBTWpRTUxBa0FDUUNBQkxRQUFRWFpxRGdRQXpRSE5BUUhOQVFzZ0FVRUJhaUVCRE1jQkN5QUJRUUZxSVFGQnlnQWhFQXp6QWdzZ0FDQUJJZ0VnQWhDdWdJQ0FBQ0lRRGNzQklBRWhBVUhOQUNFUURQSUNDeUFBTFFBcFFTSkdEWVVEREtZQ0N3SkFJQUVpQVNBQ1J3MEFRZHNBSVJBTWlnTUxRUUFoRkVFQklSZEJBU0VXUVFBaEVBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FDQUJMUUFBUVZCcURnclVBZE1CQUFFQ0F3UUZCZ2pWQVF0QkFpRVFEQVlMUVFNaEVBd0ZDMEVFSVJBTUJBdEJCU0VRREFNTFFRWWhFQXdDQzBFSElSQU1BUXRCQ0NFUUMwRUFJUmRCQUNFV1FRQWhGQXpNQVF0QkNTRVFRUUVoRkVFQUlSZEJBQ0VXRE1zQkN3SkFJQUVpQVNBQ1J3MEFRZDBBSVJBTWlRTUxJQUV0QUFCQkxrY056QUVnQVVFQmFpRUJES1lDQ3lBQklnRWdBa2NOekFGQjN3QWhFQXlIQXdzQ1FDQUJJZ0VnQWtZTkFDQUFRWTZBZ0lBQU5nSUlJQUFnQVRZQ0JDQUJJUUZCMEFBaEVBenVBZ3RCNEFBaEVBeUdBd3RCNFFBaEVDQUJJZ0VnQWtZTmhRTWdBaUFCYXlBQUtBSUFJaFJxSVJZZ0FTQVVhMEVEYWlFWEEwQWdBUzBBQUNBVVFlTENnSUFBYWkwQUFFY056UUVnRkVFRFJnM01BU0FVUVFGcUlSUWdBVUVCYWlJQklBSkhEUUFMSUFBZ0ZqWUNBQXlGQXd0QjRnQWhFQ0FCSWdFZ0FrWU5oQU1nQWlBQmF5QUFLQUlBSWhScUlSWWdBU0FVYTBFQ2FpRVhBMEFnQVMwQUFDQVVRZWJDZ0lBQWFpMEFBRWNOekFFZ0ZFRUNSZzNPQVNBVVFRRnFJUlFnQVVFQmFpSUJJQUpIRFFBTElBQWdGallDQUF5RUF3dEI0d0FoRUNBQklnRWdBa1lOZ3dNZ0FpQUJheUFBS0FJQUloUnFJUllnQVNBVWEwRURhaUVYQTBBZ0FTMEFBQ0FVUWVuQ2dJQUFhaTBBQUVjTnl3RWdGRUVEUmczT0FTQVVRUUZxSVJRZ0FVRUJhaUlCSUFKSERRQUxJQUFnRmpZQ0FBeURBd3NDUUNBQklnRWdBa2NOQUVIbEFDRVFESU1EQ3lBQUlBRkJBV29pQVNBQ0VLaUFnSUFBSWhBTnpRRWdBU0VCUWRZQUlSQU02UUlMQWtBZ0FTSUJJQUpHRFFBRFFBSkFJQUV0QUFBaUVFRWdSZzBBQWtBQ1FBSkFJQkJCdUg5cURnc0FBYzhCendIUEFjOEJ6d0hQQWM4Qnp3RUN6d0VMSUFGQkFXb2hBVUhTQUNFUURPMENDeUFCUVFGcUlRRkIwd0FoRUF6c0Fnc2dBVUVCYWlFQlFkUUFJUkFNNndJTElBRkJBV29pQVNBQ1J3MEFDMEhrQUNFUURJSURDMEhrQUNFUURJRURDd05BQWtBZ0FTMEFBRUh3d29DQUFHb3RBQUFpRUVFQlJnMEFJQkJCZm1vT0E4OEIwQUhSQWRJQkN5QUJRUUZxSWdFZ0FrY05BQXRCNWdBaEVBeUFBd3NDUUNBQklnRWdBa1lOQUNBQlFRRnFJUUVNQXd0QjV3QWhFQXovQWdzRFFBSkFJQUV0QUFCQjhNU0FnQUJxTFFBQUloQkJBVVlOQUFKQUlCQkJmbW9PQk5JQjB3SFVBUURWQVFzZ0FTRUJRZGNBSVJBTTV3SUxJQUZCQVdvaUFTQUNSdzBBQzBIb0FDRVFEUDRDQ3dKQUlBRWlBU0FDUncwQVFla0FJUkFNL2dJTEFrQWdBUzBBQUNJUVFYWnFEaHE2QWRVQjFRRzhBZFVCMVFIVkFkVUIxUUhWQWRVQjFRSFZBZFVCMVFIVkFkVUIxUUhWQWRVQjFRSFZBY29CMVFIVkFRRFRBUXNnQVVFQmFpRUJDMEVHSVJBTTR3SUxBMEFDUUNBQkxRQUFRZkRHZ0lBQWFpMEFBRUVCUmcwQUlBRWhBUXllQWdzZ0FVRUJhaUlCSUFKSERRQUxRZW9BSVJBTSt3SUxBa0FnQVNJQklBSkdEUUFnQVVFQmFpRUJEQU1MUWVzQUlSQU0rZ0lMQWtBZ0FTSUJJQUpIRFFCQjdBQWhFQXo2QWdzZ0FVRUJhaUVCREFFTEFrQWdBU0lCSUFKSERRQkI3UUFoRUF6NUFnc2dBVUVCYWlFQkMwRUVJUkFNM2dJTEFrQWdBU0lVSUFKSERRQkI3Z0FoRUF6M0Fnc2dGQ0VCQWtBQ1FBSkFJQlF0QUFCQjhNaUFnQUJxTFFBQVFYOXFEZ2ZVQWRVQjFnRUFuQUlCQXRjQkN5QVVRUUZxSVFFTUNnc2dGRUVCYWlFQkRNMEJDMEVBSVJBZ0FFRUFOZ0ljSUFCQm01S0FnQUEyQWhBZ0FFRUhOZ0lNSUFBZ0ZFRUJhallDRkF6MkFnc0NRQU5BQWtBZ0FTMEFBRUh3eUlDQUFHb3RBQUFpRUVFRVJnMEFBa0FDUUNBUVFYOXFEZ2ZTQWRNQjFBSFpBUUFFQWRrQkN5QUJJUUZCMmdBaEVBemdBZ3NnQVVFQmFpRUJRZHdBSVJBTTN3SUxJQUZCQVdvaUFTQUNSdzBBQzBIdkFDRVFEUFlDQ3lBQlFRRnFJUUVNeXdFTEFrQWdBU0lVSUFKSERRQkI4QUFoRUF6MUFnc2dGQzBBQUVFdlJ3M1VBU0FVUVFGcUlRRU1CZ3NDUUNBQkloUWdBa2NOQUVIeEFDRVFEUFFDQ3dKQUlCUXRBQUFpQVVFdlJ3MEFJQlJCQVdvaEFVSGRBQ0VRRE5zQ0N5QUJRWFpxSWdSQkZrc04wd0ZCQVNBRWRFR0pnSUFDY1VVTjB3RU15Z0lMQWtBZ0FTSUJJQUpHRFFBZ0FVRUJhaUVCUWQ0QUlSQU0yZ0lMUWZJQUlSQU04Z0lMQWtBZ0FTSVVJQUpIRFFCQjlBQWhFQXp5QWdzZ0ZDRUJBa0FnRkMwQUFFSHd6SUNBQUdvdEFBQkJmMm9PQThrQ2xBSUExQUVMUWVFQUlSQU0yQUlMQWtBZ0FTSVVJQUpHRFFBRFFBSkFJQlF0QUFCQjhNcUFnQUJxTFFBQUlnRkJBMFlOQUFKQUlBRkJmMm9PQXNzQ0FOVUJDeUFVSVFGQjN3QWhFQXphQWdzZ0ZFRUJhaUlVSUFKSERRQUxRZk1BSVJBTThRSUxRZk1BSVJBTThBSUxBa0FnQVNJQklBSkdEUUFnQUVHUGdJQ0FBRFlDQ0NBQUlBRTJBZ1FnQVNFQlFlQUFJUkFNMXdJTFFmVUFJUkFNN3dJTEFrQWdBU0lCSUFKSERRQkI5Z0FoRUF6dkFnc2dBRUdQZ0lDQUFEWUNDQ0FBSUFFMkFnUWdBU0VCQzBFRElSQU0xQUlMQTBBZ0FTMEFBRUVnUnczREFpQUJRUUZxSWdFZ0FrY05BQXRCOXdBaEVBenNBZ3NDUUNBQklnRWdBa2NOQUVINEFDRVFET3dDQ3lBQkxRQUFRU0JIRGM0QklBRkJBV29oQVF6dkFRc2dBQ0FCSWdFZ0FoQ3NnSUNBQUNJUURjNEJJQUVoQVF5T0Fnc0NRQ0FCSWdRZ0FrY05BRUg2QUNFUURPb0NDeUFFTFFBQVFjd0FSdzNSQVNBRVFRRnFJUUZCRXlFUURNOEJDd0pBSUFFaUJDQUNSdzBBUWZzQUlSQU02UUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkJXb2hFQU5BSUFRdEFBQWdBVUh3em9DQUFHb3RBQUJIRGRBQklBRkJCVVlOemdFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQit3QWhFQXpvQWdzQ1FDQUJJZ1FnQWtjTkFFSDhBQ0VRRE9nQ0N3SkFBa0FnQkMwQUFFRzlmMm9PREFEUkFkRUIwUUhSQWRFQjBRSFJBZEVCMFFIUkFRSFJBUXNnQkVFQmFpRUJRZVlBSVJBTXp3SUxJQVJCQVdvaEFVSG5BQ0VRRE00Q0N3SkFJQUVpQkNBQ1J3MEFRZjBBSVJBTTV3SUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQW1vaEVBSkFBMEFnQkMwQUFDQUJRZTNQZ0lBQWFpMEFBRWNOendFZ0FVRUNSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWYwQUlSQU01d0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJFQ0VRRE13QkN3SkFJQUVpQkNBQ1J3MEFRZjRBSVJBTTVnSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQldvaEVBSkFBMEFnQkMwQUFDQUJRZmJPZ0lBQWFpMEFBRWNOemdFZ0FVRUZSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWY0QUlSQU01Z0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJGaUVRRE1zQkN3SkFJQUVpQkNBQ1J3MEFRZjhBSVJBTTVRSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQTJvaEVBSkFBMEFnQkMwQUFDQUJRZnpPZ0lBQWFpMEFBRWNOelFFZ0FVRURSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWY4QUlSQU01UUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJCU0VRRE1vQkN3SkFJQUVpQkNBQ1J3MEFRWUFCSVJBTTVBSUxJQVF0QUFCQjJRQkhEY3NCSUFSQkFXb2hBVUVJSVJBTXlRRUxBa0FnQVNJRUlBSkhEUUJCZ1FFaEVBempBZ3NDUUFKQUlBUXRBQUJCc245cURnTUF6QUVCekFFTElBUkJBV29oQVVIckFDRVFETW9DQ3lBRVFRRnFJUUZCN0FBaEVBekpBZ3NDUUNBQklnUWdBa2NOQUVHQ0FTRVFET0lDQ3dKQUFrQWdCQzBBQUVHNGYyb09DQURMQWNzQnl3SExBY3NCeXdFQnl3RUxJQVJCQVdvaEFVSHFBQ0VRRE1rQ0N5QUVRUUZxSVFGQjdRQWhFQXpJQWdzQ1FDQUJJZ1FnQWtjTkFFR0RBU0VRRE9FQ0N5QUNJQVJySUFBb0FnQWlBV29oRUNBRUlBRnJRUUpxSVJRQ1FBTkFJQVF0QUFBZ0FVR0F6NENBQUdvdEFBQkhEY2tCSUFGQkFrWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0VEWUNBRUdEQVNFUURPRUNDMEVBSVJBZ0FFRUFOZ0lBSUJSQkFXb2hBUXpHQVFzQ1FDQUJJZ1FnQWtjTkFFR0VBU0VRRE9BQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUVJxSVJBQ1FBTkFJQVF0QUFBZ0FVR0R6NENBQUdvdEFBQkhEY2dCSUFGQkJFWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdFQVNFUURPQUNDeUFBUVFBMkFnQWdFRUVCYWlFQlFTTWhFQXpGQVFzQ1FDQUJJZ1FnQWtjTkFFR0ZBU0VRRE44Q0N3SkFBa0FnQkMwQUFFRzBmMm9PQ0FESUFjZ0J5QUhJQWNnQnlBRUJ5QUVMSUFSQkFXb2hBVUh2QUNFUURNWUNDeUFFUVFGcUlRRkI4QUFoRUF6RkFnc0NRQ0FCSWdRZ0FrY05BRUdHQVNFUURONENDeUFFTFFBQVFjVUFSdzNGQVNBRVFRRnFJUUVNZ3dJTEFrQWdBU0lFSUFKSERRQkJod0VoRUF6ZEFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVEYWlFUUFrQURRQ0FFTFFBQUlBRkJpTStBZ0FCcUxRQUFSdzNGQVNBQlFRTkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCaHdFaEVBemRBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRXRJUkFNd2dFTEFrQWdBU0lFSUFKSERRQkJpQUVoRUF6Y0Fnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVJYWlFUUFrQURRQ0FFTFFBQUlBRkIwTStBZ0FCcUxRQUFSdzNFQVNBQlFRaEdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCaUFFaEVBemNBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRXBJUkFNd1FFTEFrQWdBU0lCSUFKSERRQkJpUUVoRUF6YkFndEJBU0VRSUFFdEFBQkIzd0JIRGNBQklBRkJBV29oQVF5QkFnc0NRQ0FCSWdRZ0FrY05BRUdLQVNFUUROb0NDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFGcUlSQURRQ0FFTFFBQUlBRkJqTStBZ0FCcUxRQUFSdzNCQVNBQlFRRkdEYThDSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVlvQklSQU0yUUlMQWtBZ0FTSUVJQUpIRFFCQml3RWhFQXpaQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUNhaUVRQWtBRFFDQUVMUUFBSUFGQmpzK0FnQUJxTFFBQVJ3M0JBU0FCUVFKR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJpd0VoRUF6WkFnc2dBRUVBTmdJQUlCQkJBV29oQVVFQ0lSQU12Z0VMQWtBZ0FTSUVJQUpIRFFCQmpBRWhFQXpZQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUJhaUVRQWtBRFFDQUVMUUFBSUFGQjhNK0FnQUJxTFFBQVJ3M0FBU0FCUVFGR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJqQUVoRUF6WUFnc2dBRUVBTmdJQUlCQkJBV29oQVVFZklSQU12UUVMQWtBZ0FTSUVJQUpIRFFCQmpRRWhFQXpYQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUJhaUVRQWtBRFFDQUVMUUFBSUFGQjhzK0FnQUJxTFFBQVJ3Mi9BU0FCUVFGR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJqUUVoRUF6WEFnc2dBRUVBTmdJQUlCQkJBV29oQVVFSklSQU12QUVMQWtBZ0FTSUVJQUpIRFFCQmpnRWhFQXpXQWdzQ1FBSkFJQVF0QUFCQnQzOXFEZ2NBdndHL0FiOEJ2d0cvQVFHL0FRc2dCRUVCYWlFQlFmZ0FJUkFNdlFJTElBUkJBV29oQVVINUFDRVFETHdDQ3dKQUlBRWlCQ0FDUncwQVFZOEJJUkFNMVFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJCV29oRUFKQUEwQWdCQzBBQUNBQlFaSFBnSUFBYWkwQUFFY052UUVnQVVFRlJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWThCSVJBTTFRSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkdDRVFETG9CQ3dKQUlBRWlCQ0FDUncwQVFaQUJJUkFNMUFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBbW9oRUFKQUEwQWdCQzBBQUNBQlFaZlBnSUFBYWkwQUFFY052QUVnQVVFQ1JnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWkFCSVJBTTFBSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkZ5RVFETGtCQ3dKQUlBRWlCQ0FDUncwQVFaRUJJUkFNMHdJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJCbW9oRUFKQUEwQWdCQzBBQUNBQlFaclBnSUFBYWkwQUFFY051d0VnQVVFR1JnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWkVCSVJBTTB3SUxJQUJCQURZQ0FDQVFRUUZxSVFGQkZTRVFETGdCQ3dKQUlBRWlCQ0FDUncwQVFaSUJJUkFNMGdJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJCV29oRUFKQUEwQWdCQzBBQUNBQlFhSFBnSUFBYWkwQUFFY051Z0VnQVVFRlJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWklCSVJBTTBnSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkhpRVFETGNCQ3dKQUlBRWlCQ0FDUncwQVFaTUJJUkFNMFFJTElBUXRBQUJCekFCSERiZ0JJQVJCQVdvaEFVRUtJUkFNdGdFTEFrQWdCQ0FDUncwQVFaUUJJUkFNMEFJTEFrQUNRQ0FFTFFBQVFiOS9hZzRQQUxrQnVRRzVBYmtCdVFHNUFia0J1UUc1QWJrQnVRRzVBYmtCQWJrQkN5QUVRUUZxSVFGQi9nQWhFQXkzQWdzZ0JFRUJhaUVCUWY4QUlSQU10Z0lMQWtBZ0JDQUNSdzBBUVpVQklSQU16d0lMQWtBQ1FDQUVMUUFBUWI5L2FnNERBTGdCQWJnQkN5QUVRUUZxSVFGQi9RQWhFQXkyQWdzZ0JFRUJhaUVFUVlBQklSQU10UUlMQWtBZ0JDQUNSdzBBUVpZQklSQU16Z0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFXb2hFQUpBQTBBZ0JDMEFBQ0FCUWFmUGdJQUFhaTBBQUVjTnRnRWdBVUVCUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFaWUJJUkFNemdJTElBQkJBRFlDQUNBUVFRRnFJUUZCQ3lFUURMTUJDd0pBSUFRZ0FrY05BRUdYQVNFUURNMENDd0pBQWtBQ1FBSkFJQVF0QUFCQlUyb09Jd0M0QWJnQnVBRzRBYmdCdUFHNEFiZ0J1QUc0QWJnQnVBRzRBYmdCdUFHNEFiZ0J1QUc0QWJnQnVBRzRBYmdCQWJnQnVBRzRBYmdCdUFFQ3VBRzRBYmdCQTdnQkN5QUVRUUZxSVFGQit3QWhFQXkyQWdzZ0JFRUJhaUVCUWZ3QUlSQU10UUlMSUFSQkFXb2hCRUdCQVNFUURMUUNDeUFFUVFGcUlRUkJnZ0VoRUF5ekFnc0NRQ0FFSUFKSERRQkJtQUVoRUF6TUFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVFYWlFUUFrQURRQ0FFTFFBQUlBRkJxYytBZ0FCcUxRQUFSdzIwQVNBQlFRUkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCbUFFaEVBek1BZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRVpJUkFNc1FFTEFrQWdCQ0FDUncwQVFaa0JJUkFNeXdJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJCV29oRUFKQUEwQWdCQzBBQUNBQlFhN1BnSUFBYWkwQUFFY05zd0VnQVVFRlJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWmtCSVJBTXl3SUxJQUJCQURZQ0FDQVFRUUZxSVFGQkJpRVFETEFCQ3dKQUlBUWdBa2NOQUVHYUFTRVFETW9DQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRRnFJUkFDUUFOQUlBUXRBQUFnQVVHMHo0Q0FBR290QUFCSERiSUJJQUZCQVVZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR2FBU0VRRE1vQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVJ3aEVBeXZBUXNDUUNBRUlBSkhEUUJCbXdFaEVBekpBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFQmFpRVFBa0FEUUNBRUxRQUFJQUZCdHMrQWdBQnFMUUFBUncyeEFTQUJRUUZHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQm13RWhFQXpKQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVuSVJBTXJnRUxBa0FnQkNBQ1J3MEFRWndCSVJBTXlBSUxBa0FDUUNBRUxRQUFRYXgvYWc0Q0FBR3hBUXNnQkVFQmFpRUVRWVlCSVJBTXJ3SUxJQVJCQVdvaEJFR0hBU0VRREs0Q0N3SkFJQVFnQWtjTkFFR2RBU0VRRE1jQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUZxSVJBQ1FBTkFJQVF0QUFBZ0FVRzR6NENBQUdvdEFBQkhEYThCSUFGQkFVWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdkQVNFUURNY0NDeUFBUVFBMkFnQWdFRUVCYWlFQlFTWWhFQXlzQVFzQ1FDQUVJQUpIRFFCQm5nRWhFQXpHQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUJhaUVRQWtBRFFDQUVMUUFBSUFGQnVzK0FnQUJxTFFBQVJ3MnVBU0FCUVFGR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJuZ0VoRUF6R0Fnc2dBRUVBTmdJQUlCQkJBV29oQVVFRElSQU1xd0VMQWtBZ0JDQUNSdzBBUVo4QklSQU14UUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFtb2hFQUpBQTBBZ0JDMEFBQ0FCUWUzUGdJQUFhaTBBQUVjTnJRRWdBVUVDUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFaOEJJUkFNeFFJTElBQkJBRFlDQUNBUVFRRnFJUUZCRENFUURLb0JDd0pBSUFRZ0FrY05BRUdnQVNFUURNUUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFOcUlSQUNRQU5BSUFRdEFBQWdBVUc4ejRDQUFHb3RBQUJIRGF3QklBRkJBMFlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHZ0FTRVFETVFDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUTBoRUF5cEFRc0NRQ0FFSUFKSERRQkJvUUVoRUF6REFnc0NRQUpBSUFRdEFBQkJ1bjlxRGdzQXJBR3NBYXdCckFHc0Fhd0JyQUdzQWF3QkFhd0JDeUFFUVFGcUlRUkJpd0VoRUF5cUFnc2dCRUVCYWlFRVFZd0JJUkFNcVFJTEFrQWdCQ0FDUncwQVFhSUJJUkFNd2dJTElBUXRBQUJCMEFCSERha0JJQVJCQVdvaEJBenBBUXNDUUNBRUlBSkhEUUJCb3dFaEVBekJBZ3NDUUFKQUlBUXRBQUJCdDM5cURnY0JxZ0dxQWFvQnFnR3FBUUNxQVFzZ0JFRUJhaUVFUVk0QklSQU1xQUlMSUFSQkFXb2hBVUVpSVJBTXBnRUxBa0FnQkNBQ1J3MEFRYVFCSVJBTXdBSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQVdvaEVBSkFBMEFnQkMwQUFDQUJRY0RQZ0lBQWFpMEFBRWNOcUFFZ0FVRUJSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWFRQklSQU13QUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJIU0VRREtVQkN3SkFJQVFnQWtjTkFFR2xBU0VRREw4Q0N3SkFBa0FnQkMwQUFFR3VmMm9PQXdDb0FRR29BUXNnQkVFQmFpRUVRWkFCSVJBTXBnSUxJQVJCQVdvaEFVRUVJUkFNcEFFTEFrQWdCQ0FDUncwQVFhWUJJUkFNdmdJTEFrQUNRQUpBQWtBQ1FDQUVMUUFBUWI5L2FnNFZBS29CcWdHcUFhb0JxZ0dxQWFvQnFnR3FBYW9CQWFvQnFnRUNxZ0dxQVFPcUFhb0JCS29CQ3lBRVFRRnFJUVJCaUFFaEVBeW9BZ3NnQkVFQmFpRUVRWWtCSVJBTXB3SUxJQVJCQVdvaEJFR0tBU0VRREtZQ0N5QUVRUUZxSVFSQmp3RWhFQXlsQWdzZ0JFRUJhaUVFUVpFQklSQU1wQUlMQWtBZ0JDQUNSdzBBUWFjQklSQU12UUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFtb2hFQUpBQTBBZ0JDMEFBQ0FCUWUzUGdJQUFhaTBBQUVjTnBRRWdBVUVDUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFhY0JJUkFNdlFJTElBQkJBRFlDQUNBUVFRRnFJUUZCRVNFUURLSUJDd0pBSUFRZ0FrY05BRUdvQVNFUURMd0NDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFKcUlSQUNRQU5BSUFRdEFBQWdBVUhDejRDQUFHb3RBQUJIRGFRQklBRkJBa1lOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHb0FTRVFETHdDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRU3doRUF5aEFRc0NRQ0FFSUFKSERRQkJxUUVoRUF5N0Fnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVFYWlFUUFrQURRQ0FFTFFBQUlBRkJ4YytBZ0FCcUxRQUFSdzJqQVNBQlFRUkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCcVFFaEVBeTdBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRXJJUkFNb0FFTEFrQWdCQ0FDUncwQVFhb0JJUkFNdWdJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBbW9oRUFKQUEwQWdCQzBBQUNBQlFjclBnSUFBYWkwQUFFY05vZ0VnQVVFQ1JnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRYW9CSVJBTXVnSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkZDRVFESjhCQ3dKQUlBUWdBa2NOQUVHckFTRVFETGtDQ3dKQUFrQUNRQUpBSUFRdEFBQkJ2bjlxRGc4QUFRS2tBYVFCcEFHa0FhUUJwQUdrQWFRQnBBR2tBYVFCQTZRQkN5QUVRUUZxSVFSQmt3RWhFQXlpQWdzZ0JFRUJhaUVFUVpRQklSQU1vUUlMSUFSQkFXb2hCRUdWQVNFUURLQUNDeUFFUVFGcUlRUkJsZ0VoRUF5ZkFnc0NRQ0FFSUFKSERRQkJyQUVoRUF5NEFnc2dCQzBBQUVIRkFFY05ud0VnQkVFQmFpRUVET0FCQ3dKQUlBUWdBa2NOQUVHdEFTRVFETGNDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRSnFJUkFDUUFOQUlBUXRBQUFnQVVITno0Q0FBR290QUFCSERaOEJJQUZCQWtZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR3RBU0VRRExjQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVE0aEVBeWNBUXNDUUNBRUlBSkhEUUJCcmdFaEVBeTJBZ3NnQkMwQUFFSFFBRWNOblFFZ0JFRUJhaUVCUVNVaEVBeWJBUXNDUUNBRUlBSkhEUUJCcndFaEVBeTFBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFSWFpRVFBa0FEUUNBRUxRQUFJQUZCME0rQWdBQnFMUUFBUncyZEFTQUJRUWhHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQnJ3RWhFQXkxQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVxSVJBTW1nRUxBa0FnQkNBQ1J3MEFRYkFCSVJBTXRBSUxBa0FDUUNBRUxRQUFRYXQvYWc0TEFKMEJuUUdkQVowQm5RR2RBWjBCblFHZEFRR2RBUXNnQkVFQmFpRUVRWm9CSVJBTW13SUxJQVJCQVdvaEJFR2JBU0VRREpvQ0N3SkFJQVFnQWtjTkFFR3hBU0VRRExNQ0N3SkFBa0FnQkMwQUFFRy9mMm9PRkFDY0Fad0JuQUdjQVp3Qm5BR2NBWndCbkFHY0Fad0JuQUdjQVp3Qm5BR2NBWndCbkFFQm5BRUxJQVJCQVdvaEJFR1pBU0VRREpvQ0N5QUVRUUZxSVFSQm5BRWhFQXlaQWdzQ1FDQUVJQUpIRFFCQnNnRWhFQXl5QWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRURhaUVRQWtBRFFDQUVMUUFBSUFGQjJjK0FnQUJxTFFBQVJ3MmFBU0FCUVFOR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJzZ0VoRUF5eUFnc2dBRUVBTmdJQUlCQkJBV29oQVVFaElSQU1sd0VMQWtBZ0JDQUNSdzBBUWJNQklSQU1zUUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkJtb2hFQUpBQTBBZ0JDMEFBQ0FCUWQzUGdJQUFhaTBBQUVjTm1RRWdBVUVHUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFiTUJJUkFNc1FJTElBQkJBRFlDQUNBUVFRRnFJUUZCR2lFUURKWUJDd0pBSUFRZ0FrY05BRUcwQVNFUURMQUNDd0pBQWtBQ1FDQUVMUUFBUWJ0L2FnNFJBSm9CbWdHYUFab0JtZ0dhQVpvQm1nR2FBUUdhQVpvQm1nR2FBWm9CQXBvQkN5QUVRUUZxSVFSQm5RRWhFQXlZQWdzZ0JFRUJhaUVFUVo0QklSQU1sd0lMSUFSQkFXb2hCRUdmQVNFUURKWUNDd0pBSUFRZ0FrY05BRUcxQVNFUURLOENDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFWcUlSQUNRQU5BSUFRdEFBQWdBVUhrejRDQUFHb3RBQUJIRFpjQklBRkJCVVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHMUFTRVFESzhDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRU2doRUF5VUFRc0NRQ0FFSUFKSERRQkJ0Z0VoRUF5dUFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVDYWlFUUFrQURRQ0FFTFFBQUlBRkI2cytBZ0FCcUxRQUFSdzJXQVNBQlFRSkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCdGdFaEVBeXVBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRUhJUkFNa3dFTEFrQWdCQ0FDUncwQVFiY0JJUkFNclFJTEFrQUNRQ0FFTFFBQVFidC9hZzRPQUpZQmxnR1dBWllCbGdHV0FaWUJsZ0dXQVpZQmxnR1dBUUdXQVFzZ0JFRUJhaUVFUWFFQklSQU1sQUlMSUFSQkFXb2hCRUdpQVNFUURKTUNDd0pBSUFRZ0FrY05BRUc0QVNFUURLd0NDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFKcUlSQUNRQU5BSUFRdEFBQWdBVUh0ejRDQUFHb3RBQUJIRFpRQklBRkJBa1lOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHNEFTRVFES3dDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUkloRUF5UkFRc0NRQ0FFSUFKSERRQkJ1UUVoRUF5ckFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVCYWlFUUFrQURRQ0FFTFFBQUlBRkI4TStBZ0FCcUxRQUFSdzJUQVNBQlFRRkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCdVFFaEVBeXJBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRWdJUkFNa0FFTEFrQWdCQ0FDUncwQVFib0JJUkFNcWdJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBV29oRUFKQUEwQWdCQzBBQUNBQlFmTFBnSUFBYWkwQUFFY05rZ0VnQVVFQlJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRYm9CSVJBTXFnSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkR5RVFESThCQ3dKQUlBUWdBa2NOQUVHN0FTRVFES2tDQ3dKQUFrQWdCQzBBQUVHM2Yyb09Cd0NTQVpJQmtnR1NBWklCQVpJQkN5QUVRUUZxSVFSQnBRRWhFQXlRQWdzZ0JFRUJhaUVFUWFZQklSQU1qd0lMQWtBZ0JDQUNSdzBBUWJ3QklSQU1xQUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkIyb2hFQUpBQTBBZ0JDMEFBQ0FCUWZUUGdJQUFhaTBBQUVjTmtBRWdBVUVIUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFid0JJUkFNcUFJTElBQkJBRFlDQUNBUVFRRnFJUUZCR3lFUURJMEJDd0pBSUFRZ0FrY05BRUc5QVNFUURLY0NDd0pBQWtBQ1FDQUVMUUFBUWI1L2FnNFNBSkVCa1FHUkFaRUJrUUdSQVpFQmtRR1JBUUdSQVpFQmtRR1JBWkVCa1FFQ2tRRUxJQVJCQVdvaEJFR2tBU0VRREk4Q0N5QUVRUUZxSVFSQnB3RWhFQXlPQWdzZ0JFRUJhaUVFUWFnQklSQU1qUUlMQWtBZ0JDQUNSdzBBUWI0QklSQU1wZ0lMSUFRdEFBQkJ6Z0JIRFkwQklBUkJBV29oQkF6UEFRc0NRQ0FFSUFKSERRQkJ2d0VoRUF5bEFnc0NRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUNBRUxRQUFRYjkvYWc0VkFBRUNBNXdCQkFVR25BR2NBWndCQndnSkNndWNBUXdORGcrY0FRc2dCRUVCYWlFQlFlZ0FJUkFNbWdJTElBUkJBV29oQVVIcEFDRVFESmtDQ3lBRVFRRnFJUUZCN2dBaEVBeVlBZ3NnQkVFQmFpRUJRZklBSVJBTWx3SUxJQVJCQVdvaEFVSHpBQ0VRREpZQ0N5QUVRUUZxSVFGQjlnQWhFQXlWQWdzZ0JFRUJhaUVCUWZjQUlSQU1sQUlMSUFSQkFXb2hBVUg2QUNFUURKTUNDeUFFUVFGcUlRUkJnd0VoRUF5U0Fnc2dCRUVCYWlFRVFZUUJJUkFNa1FJTElBUkJBV29oQkVHRkFTRVFESkFDQ3lBRVFRRnFJUVJCa2dFaEVBeVBBZ3NnQkVFQmFpRUVRWmdCSVJBTWpnSUxJQVJCQVdvaEJFR2dBU0VRREkwQ0N5QUVRUUZxSVFSQm93RWhFQXlNQWdzZ0JFRUJhaUVFUWFvQklSQU1pd0lMQWtBZ0JDQUNSZzBBSUFCQmtJQ0FnQUEyQWdnZ0FDQUVOZ0lFUWFzQklSQU1pd0lMUWNBQklSQU1vd0lMSUFBZ0JTQUNFS3FBZ0lBQUlnRU5pd0VnQlNFQkRGd0xBa0FnQmlBQ1JnMEFJQVpCQVdvaEJReU5BUXRCd2dFaEVBeWhBZ3NEUUFKQUlCQXRBQUJCZG1vT0JJd0JBQUNQQVFBTElCQkJBV29pRUNBQ1J3MEFDMEhEQVNFUURLQUNDd0pBSUFjZ0FrWU5BQ0FBUVpHQWdJQUFOZ0lJSUFBZ0J6WUNCQ0FISVFGQkFTRVFESWNDQzBIRUFTRVFESjhDQ3dKQUlBY2dBa2NOQUVIRkFTRVFESjhDQ3dKQUFrQWdCeTBBQUVGMmFnNEVBYzRCemdFQXpnRUxJQWRCQVdvaEJneU5BUXNnQjBFQmFpRUZESWtCQ3dKQUlBY2dBa2NOQUVIR0FTRVFESjRDQ3dKQUFrQWdCeTBBQUVGMmFnNFhBWThCandFQmp3R1BBWThCandHUEFZOEJqd0dQQVk4Qmp3R1BBWThCandHUEFZOEJqd0dQQVk4QkFJOEJDeUFIUVFGcUlRY0xRYkFCSVJBTWhBSUxBa0FnQ0NBQ1J3MEFRY2dCSVJBTW5RSUxJQWd0QUFCQklFY05qUUVnQUVFQU93RXlJQWhCQVdvaEFVR3pBU0VRRElNQ0N5QUJJUmNDUUFOQUlCY2lCeUFDUmcwQklBY3RBQUJCVUdwQi93RnhJaEJCQ2s4TnpBRUNRQ0FBTHdFeUloUkJtVE5MRFFBZ0FDQVVRUXBzSWhRN0FUSWdFRUgvL3dOeklCUkIvdjhEY1VrTkFDQUhRUUZxSVJjZ0FDQVVJQkJxSWhBN0FUSWdFRUgvL3dOeFFlZ0hTUTBCQ3d0QkFDRVFJQUJCQURZQ0hDQUFRY0dKZ0lBQU5nSVFJQUJCRFRZQ0RDQUFJQWRCQVdvMkFoUU1uQUlMUWNjQklSQU1td0lMSUFBZ0NDQUNFSzZBZ0lBQUloQkZEY29CSUJCQkZVY05qQUVnQUVISUFUWUNIQ0FBSUFnMkFoUWdBRUhKbDRDQUFEWUNFQ0FBUVJVMkFneEJBQ0VRREpvQ0N3SkFJQWtnQWtjTkFFSE1BU0VRREpvQ0MwRUFJUlJCQVNFWFFRRWhGa0VBSVJBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBZ0NTMEFBRUZRYWc0S2xnR1ZBUUFCQWdNRUJRWUlsd0VMUVFJaEVBd0dDMEVESVJBTUJRdEJCQ0VRREFRTFFRVWhFQXdEQzBFR0lSQU1BZ3RCQnlFUURBRUxRUWdoRUF0QkFDRVhRUUFoRmtFQUlSUU1qZ0VMUVFraEVFRUJJUlJCQUNFWFFRQWhGZ3lOQVFzQ1FDQUtJQUpIRFFCQnpnRWhFQXlaQWdzZ0NpMEFBRUV1UncyT0FTQUtRUUZxSVFrTXlnRUxJQXNnQWtjTmpnRkIwQUVoRUF5WEFnc0NRQ0FMSUFKR0RRQWdBRUdPZ0lDQUFEWUNDQ0FBSUFzMkFnUkJ0d0VoRUF6K0FRdEIwUUVoRUF5V0Fnc0NRQ0FFSUFKSERRQkIwZ0VoRUF5V0Fnc2dBaUFFYXlBQUtBSUFJaEJxSVJRZ0JDQVFhMEVFYWlFTEEwQWdCQzBBQUNBUVFmelBnSUFBYWkwQUFFY05qZ0VnRUVFRVJnM3BBU0FRUVFGcUlSQWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUhTQVNFUURKVUNDeUFBSUF3Z0FoQ3NnSUNBQUNJQkRZMEJJQXdoQVF5NEFRc0NRQ0FFSUFKSERRQkIxQUVoRUF5VUFnc2dBaUFFYXlBQUtBSUFJaEJxSVJRZ0JDQVFhMEVCYWlFTUEwQWdCQzBBQUNBUVFZSFFnSUFBYWkwQUFFY05qd0VnRUVFQlJnMk9BU0FRUVFGcUlSQWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUhVQVNFUURKTUNDd0pBSUFRZ0FrY05BRUhXQVNFUURKTUNDeUFDSUFScklBQW9BZ0FpRUdvaEZDQUVJQkJyUVFKcUlRc0RRQ0FFTFFBQUlCQkJnOUNBZ0FCcUxRQUFSdzJPQVNBUVFRSkdEWkFCSUJCQkFXb2hFQ0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWRZQklSQU1rZ0lMQWtBZ0JDQUNSdzBBUWRjQklSQU1rZ0lMQWtBQ1FDQUVMUUFBUWJ0L2FnNFFBSThCandHUEFZOEJqd0dQQVk4Qmp3R1BBWThCandHUEFZOEJqd0VCandFTElBUkJBV29oQkVHN0FTRVFEUGtCQ3lBRVFRRnFJUVJCdkFFaEVBejRBUXNDUUNBRUlBSkhEUUJCMkFFaEVBeVJBZ3NnQkMwQUFFSElBRWNOakFFZ0JFRUJhaUVFRE1RQkN3SkFJQVFnQWtZTkFDQUFRWkNBZ0lBQU5nSUlJQUFnQkRZQ0JFRytBU0VRRFBjQkMwSFpBU0VRREk4Q0N3SkFJQVFnQWtjTkFFSGFBU0VRREk4Q0N5QUVMUUFBUWNnQVJnM0RBU0FBUVFFNkFDZ011UUVMSUFCQkFqb0FMeUFBSUFRZ0FoQ21nSUNBQUNJUURZMEJRY0lCSVJBTTlBRUxJQUF0QUNoQmYyb09BcmNCdVFHNEFRc0RRQUpBSUFRdEFBQkJkbW9PQkFDT0FZNEJBSTRCQ3lBRVFRRnFJZ1FnQWtjTkFBdEIzUUVoRUF5TEFnc2dBRUVBT2dBdklBQXRBQzFCQkhGRkRZUUNDeUFBUVFBNkFDOGdBRUVCT2dBMElBRWhBUXlNQVFzZ0VFRVZSZzNhQVNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCcDQ2QWdBQTJBaEFnQUVFU05nSU1RUUFoRUF5SUFnc0NRQ0FBSUJBZ0FoQzBnSUNBQUNJRURRQWdFQ0VCRElFQ0N3SkFJQVJCRlVjTkFDQUFRUU0yQWh3Z0FDQVFOZ0lVSUFCQnNKaUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBeUlBZ3NnQUVFQU5nSWNJQUFnRURZQ0ZDQUFRYWVPZ0lBQU5nSVFJQUJCRWpZQ0RFRUFJUkFNaHdJTElCQkJGVVlOMWdFZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWRxTmdJQUFOZ0lRSUFCQkZEWUNERUVBSVJBTWhnSUxJQUFvQWdRaEZ5QUFRUUEyQWdRZ0VDQVJwMm9pRmlFQklBQWdGeUFRSUJZZ0ZCc2lFQkMxZ0lDQUFDSVVSUTJOQVNBQVFRYzJBaHdnQUNBUU5nSVVJQUFnRkRZQ0RFRUFJUkFNaFFJTElBQWdBQzhCTUVHQUFYSTdBVEFnQVNFQkMwRXFJUkFNNmdFTElCQkJGVVlOMFFFZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVlPTWdJQUFOZ0lRSUFCQkV6WUNERUVBSVJBTWdnSUxJQkJCRlVZTnp3RWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFacVBnSUFBTmdJUUlBQkJJallDREVFQUlSQU1nUUlMSUFBb0FnUWhFQ0FBUVFBMkFnUUNRQ0FBSUJBZ0FSQzNnSUNBQUNJUURRQWdBVUVCYWlFQkRJMEJDeUFBUVF3MkFod2dBQ0FRTmdJTUlBQWdBVUVCYWpZQ0ZFRUFJUkFNZ0FJTElCQkJGVVlOekFFZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVpxUGdJQUFOZ0lRSUFCQklqWUNERUVBSVJBTS93RUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDM2dJQ0FBQ0lRRFFBZ0FVRUJhaUVCREl3QkN5QUFRUTAyQWh3Z0FDQVFOZ0lNSUFBZ0FVRUJhallDRkVFQUlSQU0vZ0VMSUJCQkZVWU55UUVnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRY2FNZ0lBQU5nSVFJQUJCSXpZQ0RFRUFJUkFNL1FFTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkM1Z0lDQUFDSVFEUUFnQVVFQmFpRUJESXNCQ3lBQVFRNDJBaHdnQUNBUU5nSU1JQUFnQVVFQmFqWUNGRUVBSVJBTS9BRUxJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFSEFsWUNBQURZQ0VDQUFRUUkyQWd4QkFDRVFEUHNCQ3lBUVFSVkdEY1VCSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUhHaklDQUFEWUNFQ0FBUVNNMkFneEJBQ0VRRFBvQkN5QUFRUkEyQWh3Z0FDQUJOZ0lVSUFBZ0VEWUNERUVBSVJBTStRRUxJQUFvQWdRaEJDQUFRUUEyQWdRQ1FDQUFJQVFnQVJDNWdJQ0FBQ0lFRFFBZ0FVRUJhaUVCRFBFQkN5QUFRUkUyQWh3Z0FDQUVOZ0lNSUFBZ0FVRUJhallDRkVFQUlSQU0rQUVMSUJCQkZVWU53UUVnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRY2FNZ0lBQU5nSVFJQUJCSXpZQ0RFRUFJUkFNOXdFTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkM1Z0lDQUFDSVFEUUFnQVVFQmFpRUJESWdCQ3lBQVFSTTJBaHdnQUNBUU5nSU1JQUFnQVVFQmFqWUNGRUVBSVJBTTlnRUxJQUFvQWdRaEJDQUFRUUEyQWdRQ1FDQUFJQVFnQVJDNWdJQ0FBQ0lFRFFBZ0FVRUJhaUVCRE8wQkN5QUFRUlEyQWh3Z0FDQUVOZ0lNSUFBZ0FVRUJhallDRkVFQUlSQU05UUVMSUJCQkZVWU52UUVnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRWnFQZ0lBQU5nSVFJQUJCSWpZQ0RFRUFJUkFNOUFFTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkMzZ0lDQUFDSVFEUUFnQVVFQmFpRUJESVlCQ3lBQVFSWTJBaHdnQUNBUU5nSU1JQUFnQVVFQmFqWUNGRUVBSVJBTTh3RUxJQUFvQWdRaEJDQUFRUUEyQWdRQ1FDQUFJQVFnQVJDM2dJQ0FBQ0lFRFFBZ0FVRUJhaUVCRE9rQkN5QUFRUmMyQWh3Z0FDQUVOZ0lNSUFBZ0FVRUJhallDRkVFQUlSQU04Z0VMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUhOazRDQUFEWUNFQ0FBUVF3MkFneEJBQ0VRRFBFQkMwSUJJUkVMSUJCQkFXb2hBUUpBSUFBcEF5QWlFa0wvLy8vLy8vLy8vdzlXRFFBZ0FDQVNRZ1NHSUJHRU53TWdJQUVoQVF5RUFRc2dBRUVBTmdJY0lBQWdBVFlDRkNBQVFhMkpnSUFBTmdJUUlBQkJERFlDREVFQUlSQU03d0VMSUFCQkFEWUNIQ0FBSUJBMkFoUWdBRUhOazRDQUFEWUNFQ0FBUVF3MkFneEJBQ0VRRE80QkN5QUFLQUlFSVJjZ0FFRUFOZ0lFSUJBZ0VhZHFJaFloQVNBQUlCY2dFQ0FXSUJRYkloQVF0WUNBZ0FBaUZFVU5jeUFBUVFVMkFod2dBQ0FRTmdJVUlBQWdGRFlDREVFQUlSQU03UUVMSUFCQkFEWUNIQ0FBSUJBMkFoUWdBRUdxbklDQUFEWUNFQ0FBUVE4MkFneEJBQ0VRRE93QkN5QUFJQkFnQWhDMGdJQ0FBQ0lCRFFFZ0VDRUJDMEVPSVJBTTBRRUxBa0FnQVVFVlJ3MEFJQUJCQWpZQ0hDQUFJQkEyQWhRZ0FFR3dtSUNBQURZQ0VDQUFRUlUyQWd4QkFDRVFET29CQ3lBQVFRQTJBaHdnQUNBUU5nSVVJQUJCcDQ2QWdBQTJBaEFnQUVFU05nSU1RUUFoRUF6cEFRc2dBVUVCYWlFUUFrQWdBQzhCTUNJQlFZQUJjVVVOQUFKQUlBQWdFQ0FDRUx1QWdJQUFJZ0VOQUNBUUlRRU1jQXNnQVVFVlJ3MjZBU0FBUVFVMkFod2dBQ0FRTmdJVUlBQkIrWmVBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXpwQVFzQ1FDQUJRYUFFY1VHZ0JFY05BQ0FBTFFBdFFRSnhEUUFnQUVFQU5nSWNJQUFnRURZQ0ZDQUFRWmFUZ0lBQU5nSVFJQUJCQkRZQ0RFRUFJUkFNNlFFTElBQWdFQ0FDRUwyQWdJQUFHaUFRSVFFQ1FBSkFBa0FDUUFKQUlBQWdFQ0FDRUxPQWdJQUFEaFlDQVFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRREJBc2dBRUVCT2dBdUN5QUFJQUF2QVRCQndBQnlPd0V3SUJBaEFRdEJKaUVRRE5FQkN5QUFRU00yQWh3Z0FDQVFOZ0lVSUFCQnBaYUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBenBBUXNnQUVFQU5nSWNJQUFnRURZQ0ZDQUFRZFdMZ0lBQU5nSVFJQUJCRVRZQ0RFRUFJUkFNNkFFTElBQXRBQzFCQVhGRkRRRkJ3d0VoRUF6T0FRc0NRQ0FOSUFKR0RRQURRQUpBSUEwdEFBQkJJRVlOQUNBTklRRU14QUVMSUExQkFXb2lEU0FDUncwQUMwRWxJUkFNNXdFTFFTVWhFQXptQVFzZ0FDZ0NCQ0VFSUFCQkFEWUNCQ0FBSUFRZ0RSQ3ZnSUNBQUNJRVJRMnRBU0FBUVNZMkFod2dBQ0FFTmdJTUlBQWdEVUVCYWpZQ0ZFRUFJUkFNNVFFTElCQkJGVVlOcXdFZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWYyTmdJQUFOZ0lRSUFCQkhUWUNERUVBSVJBTTVBRUxJQUJCSnpZQ0hDQUFJQUUyQWhRZ0FDQVFOZ0lNUVFBaEVBempBUXNnRUNFQlFRRWhGQUpBQWtBQ1FBSkFBa0FDUUFKQUlBQXRBQ3hCZm1vT0J3WUZCUU1CQWdBRkN5QUFJQUF2QVRCQkNISTdBVEFNQXd0QkFpRVVEQUVMUVFRaEZBc2dBRUVCT2dBc0lBQWdBQzhCTUNBVWNqc0JNQXNnRUNFQkMwRXJJUkFNeWdFTElBQkJBRFlDSENBQUlCQTJBaFFnQUVHcmtvQ0FBRFlDRUNBQVFRczJBZ3hCQUNFUURPSUJDeUFBUVFBMkFod2dBQ0FCTmdJVUlBQkI0WStBZ0FBMkFoQWdBRUVLTmdJTVFRQWhFQXpoQVFzZ0FFRUFPZ0FzSUJBaEFReTlBUXNnRUNFQlFRRWhGQUpBQWtBQ1FBSkFBa0FnQUMwQUxFRjdhZzRFQXdFQ0FBVUxJQUFnQUM4Qk1FRUljanNCTUF3REMwRUNJUlFNQVF0QkJDRVVDeUFBUVFFNkFDd2dBQ0FBTHdFd0lCUnlPd0V3Q3lBUUlRRUxRU2toRUF6RkFRc2dBRUVBTmdJY0lBQWdBVFlDRkNBQVFmQ1VnSUFBTmdJUUlBQkJBellDREVFQUlSQU0zUUVMQWtBZ0RpMEFBRUVOUncwQUlBQW9BZ1FoQVNBQVFRQTJBZ1FDUUNBQUlBRWdEaEN4Z0lDQUFDSUJEUUFnRGtFQmFpRUJESFVMSUFCQkxEWUNIQ0FBSUFFMkFnd2dBQ0FPUVFGcU5nSVVRUUFoRUF6ZEFRc2dBQzBBTFVFQmNVVU5BVUhFQVNFUURNTUJDd0pBSUE0Z0FrY05BRUV0SVJBTTNBRUxBa0FDUUFOQUFrQWdEaTBBQUVGMmFnNEVBZ0FBQXdBTElBNUJBV29pRGlBQ1J3MEFDMEV0SVJBTTNRRUxJQUFvQWdRaEFTQUFRUUEyQWdRQ1FDQUFJQUVnRGhDeGdJQ0FBQ0lCRFFBZ0RpRUJESFFMSUFCQkxEWUNIQ0FBSUE0MkFoUWdBQ0FCTmdJTVFRQWhFQXpjQVFzZ0FDZ0NCQ0VCSUFCQkFEWUNCQUpBSUFBZ0FTQU9FTEdBZ0lBQUlnRU5BQ0FPUVFGcUlRRU1jd3NnQUVFc05nSWNJQUFnQVRZQ0RDQUFJQTVCQVdvMkFoUkJBQ0VRRE5zQkN5QUFLQUlFSVFRZ0FFRUFOZ0lFSUFBZ0JDQU9FTEdBZ0lBQUlnUU5vQUVnRGlFQkRNNEJDeUFRUVN4SERRRWdBVUVCYWlFUVFRRWhBUUpBQWtBQ1FBSkFBa0FnQUMwQUxFRjdhZzRFQXdFQ0JBQUxJQkFoQVF3RUMwRUNJUUVNQVF0QkJDRUJDeUFBUVFFNkFDd2dBQ0FBTHdFd0lBRnlPd0V3SUJBaEFRd0JDeUFBSUFBdkFUQkJDSEk3QVRBZ0VDRUJDMEU1SVJBTXZ3RUxJQUJCQURvQUxDQUJJUUVMUVRRaEVBeTlBUXNnQUNBQUx3RXdRU0J5T3dFd0lBRWhBUXdDQ3lBQUtBSUVJUVFnQUVFQU5nSUVBa0FnQUNBRUlBRVFzWUNBZ0FBaUJBMEFJQUVoQVF6SEFRc2dBRUUzTmdJY0lBQWdBVFlDRkNBQUlBUTJBZ3hCQUNFUUROUUJDeUFBUVFnNkFDd2dBU0VCQzBFd0lSQU11UUVMQWtBZ0FDMEFLRUVCUmcwQUlBRWhBUXdFQ3lBQUxRQXRRUWh4UlEyVEFTQUJJUUVNQXdzZ0FDMEFNRUVnY1EyVUFVSEZBU0VRRExjQkN3SkFJQThnQWtZTkFBSkFBMEFDUUNBUExRQUFRVkJxSWdGQi93RnhRUXBKRFFBZ0R5RUJRVFVoRUF5NkFRc2dBQ2tESUNJUlFwbXo1c3lacytiTUdWWU5BU0FBSUJGQ0NuNGlFVGNESUNBUklBR3RRdjhCZ3lJU1FuK0ZWZzBCSUFBZ0VTQVNmRGNESUNBUFFRRnFJZzhnQWtjTkFBdEJPU0VRRE5FQkN5QUFLQUlFSVFJZ0FFRUFOZ0lFSUFBZ0FpQVBRUUZxSWdRUXNZQ0FnQUFpQWcyVkFTQUVJUUVNd3dFTFFUa2hFQXpQQVFzQ1FDQUFMd0V3SWdGQkNIRkZEUUFnQUMwQUtFRUJSdzBBSUFBdEFDMUJDSEZGRFpBQkN5QUFJQUZCOS9zRGNVR0FCSEk3QVRBZ0R5RUJDMEUzSVJBTXRBRUxJQUFnQUM4Qk1FRVFjanNCTUF5ckFRc2dFRUVWUmcyTEFTQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQjhJNkFnQUEyQWhBZ0FFRWNOZ0lNUVFBaEVBekxBUXNnQUVIREFEWUNIQ0FBSUFFMkFnd2dBQ0FOUVFGcU5nSVVRUUFoRUF6S0FRc0NRQ0FCTFFBQVFUcEhEUUFnQUNnQ0JDRVFJQUJCQURZQ0JBSkFJQUFnRUNBQkVLK0FnSUFBSWhBTkFDQUJRUUZxSVFFTVl3c2dBRUhEQURZQ0hDQUFJQkEyQWd3Z0FDQUJRUUZxTmdJVVFRQWhFQXpLQVFzZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWJHUmdJQUFOZ0lRSUFCQkNqWUNERUVBSVJBTXlRRUxJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFR2dtWUNBQURZQ0VDQUFRUjQyQWd4QkFDRVFETWdCQ3lBQVFRQTJBZ0FMSUFCQmdCSTdBU29nQUNBWFFRRnFJZ0VnQWhDb2dJQ0FBQ0lRRFFFZ0FTRUJDMEhIQUNFUURLd0JDeUFRUVJWSERZTUJJQUJCMFFBMkFod2dBQ0FCTmdJVUlBQkI0NWVBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXpFQVFzZ0FDZ0NCQ0VRSUFCQkFEWUNCQUpBSUFBZ0VDQUJFS2VBZ0lBQUloQU5BQ0FCSVFFTVhnc2dBRUhTQURZQ0hDQUFJQUUyQWhRZ0FDQVFOZ0lNUVFBaEVBekRBUXNnQUVFQU5nSWNJQUFnRkRZQ0ZDQUFRY0dvZ0lBQU5nSVFJQUJCQnpZQ0RDQUFRUUEyQWdCQkFDRVFETUlCQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVFwNENBZ0FBaUVBMEFJQUVoQVF4ZEN5QUFRZE1BTmdJY0lBQWdBVFlDRkNBQUlCQTJBZ3hCQUNFUURNRUJDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVlDUmdJQUFOZ0lRSUFCQkNUWUNEQXpBQVFzZ0VFRVZSZzE5SUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUdVallDQUFEWUNFQ0FBUVNFMkFneEJBQ0VRREw4QkMwRUJJUlpCQUNFWFFRQWhGRUVCSVJBTElBQWdFRG9BS3lBQlFRRnFJUUVDUUFKQUlBQXRBQzFCRUhFTkFBSkFBa0FDUUNBQUxRQXFEZ01CQUFJRUN5QVdSUTBEREFJTElCUU5BUXdDQ3lBWFJRMEJDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXJZQ0FnQUFpRUEwQUlBRWhBUXhjQ3lBQVFkZ0FOZ0ljSUFBZ0FUWUNGQ0FBSUJBMkFneEJBQ0VRREw0QkN5QUFLQUlFSVFRZ0FFRUFOZ0lFQWtBZ0FDQUVJQUVRcllDQWdBQWlCQTBBSUFFaEFReXRBUXNnQUVIWkFEWUNIQ0FBSUFFMkFoUWdBQ0FFTmdJTVFRQWhFQXk5QVFzZ0FDZ0NCQ0VFSUFCQkFEWUNCQUpBSUFBZ0JDQUJFSzJBZ0lBQUlnUU5BQ0FCSVFFTXF3RUxJQUJCMmdBMkFod2dBQ0FCTmdJVUlBQWdCRFlDREVFQUlSQU12QUVMSUFBb0FnUWhCQ0FBUVFBMkFnUUNRQ0FBSUFRZ0FSQ3RnSUNBQUNJRURRQWdBU0VCREtrQkN5QUFRZHdBTmdJY0lBQWdBVFlDRkNBQUlBUTJBZ3hCQUNFUURMc0JDd0pBSUFFdEFBQkJVR29pRUVIL0FYRkJDazhOQUNBQUlCQTZBQ29nQVVFQmFpRUJRYzhBSVJBTW9nRUxJQUFvQWdRaEJDQUFRUUEyQWdRQ1FDQUFJQVFnQVJDdGdJQ0FBQ0lFRFFBZ0FTRUJES2NCQ3lBQVFkNEFOZ0ljSUFBZ0FUWUNGQ0FBSUFRMkFneEJBQ0VRRExvQkN5QUFRUUEyQWdBZ0YwRUJhaUVCQWtBZ0FDMEFLVUVqVHcwQUlBRWhBUXhaQ3lBQVFRQTJBaHdnQUNBQk5nSVVJQUJCMDRtQWdBQTJBaEFnQUVFSU5nSU1RUUFoRUF5NUFRc2dBRUVBTmdJQUMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRWkN6Z0lBQU5nSVFJQUJCQ0RZQ0RBeTNBUXNnQUVFQU5nSUFJQmRCQVdvaEFRSkFJQUF0QUNsQklVY05BQ0FCSVFFTVZnc2dBRUVBTmdJY0lBQWdBVFlDRkNBQVFadUtnSUFBTmdJUUlBQkJDRFlDREVFQUlSQU10Z0VMSUFCQkFEWUNBQ0FYUVFGcUlRRUNRQ0FBTFFBcEloQkJYV3BCQzA4TkFDQUJJUUVNVlFzQ1FDQVFRUVpMRFFCQkFTQVFkRUhLQUhGRkRRQWdBU0VCREZVTFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkI5NG1BZ0FBMkFoQWdBRUVJTmdJTURMVUJDeUFRUVJWR0RYRWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFibU5nSUFBTmdJUUlBQkJHallDREVFQUlSQU10QUVMSUFBb0FnUWhFQ0FBUVFBMkFnUUNRQ0FBSUJBZ0FSQ25nSUNBQUNJUURRQWdBU0VCREZRTElBQkI1UUEyQWh3Z0FDQUJOZ0lVSUFBZ0VEWUNERUVBSVJBTXN3RUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDbmdJQ0FBQ0lRRFFBZ0FTRUJERTBMSUFCQjBnQTJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNc2dFTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkNuZ0lDQUFDSVFEUUFnQVNFQkRFMExJQUJCMHdBMkFod2dBQ0FCTmdJVUlBQWdFRFlDREVFQUlSQU1zUUVMSUFBb0FnUWhFQ0FBUVFBMkFnUUNRQ0FBSUJBZ0FSQ25nSUNBQUNJUURRQWdBU0VCREZFTElBQkI1UUEyQWh3Z0FDQUJOZ0lVSUFBZ0VEWUNERUVBSVJBTXNBRUxJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFSEdpb0NBQURZQ0VDQUFRUWMyQWd4QkFDRVFESzhCQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVFwNENBZ0FBaUVBMEFJQUVoQVF4SkN5QUFRZElBTmdJY0lBQWdBVFlDRkNBQUlCQTJBZ3hCQUNFUURLNEJDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXA0Q0FnQUFpRUEwQUlBRWhBUXhKQ3lBQVFkTUFOZ0ljSUFBZ0FUWUNGQ0FBSUJBMkFneEJBQ0VRREswQkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRcDRDQWdBQWlFQTBBSUFFaEFReE5DeUFBUWVVQU5nSWNJQUFnQVRZQ0ZDQUFJQkEyQWd4QkFDRVFES3dCQ3lBQVFRQTJBaHdnQUNBQk5nSVVJQUJCM0lpQWdBQTJBaEFnQUVFSE5nSU1RUUFoRUF5ckFRc2dFRUUvUncwQklBRkJBV29oQVF0QkJTRVFESkFCQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFmMlNnSUFBTmdJUUlBQkJCellDREF5b0FRc2dBQ2dDQkNFUUlBQkJBRFlDQkFKQUlBQWdFQ0FCRUtlQWdJQUFJaEFOQUNBQklRRU1RZ3NnQUVIU0FEWUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXluQVFzZ0FDZ0NCQ0VRSUFCQkFEWUNCQUpBSUFBZ0VDQUJFS2VBZ0lBQUloQU5BQ0FCSVFFTVFnc2dBRUhUQURZQ0hDQUFJQUUyQWhRZ0FDQVFOZ0lNUVFBaEVBeW1BUXNnQUNnQ0JDRVFJQUJCQURZQ0JBSkFJQUFnRUNBQkVLZUFnSUFBSWhBTkFDQUJJUUVNUmdzZ0FFSGxBRFlDSENBQUlBRTJBaFFnQUNBUU5nSU1RUUFoRUF5bEFRc2dBQ2dDQkNFQklBQkJBRFlDQkFKQUlBQWdBU0FVRUtlQWdJQUFJZ0VOQUNBVUlRRU1Qd3NnQUVIU0FEWUNIQ0FBSUJRMkFoUWdBQ0FCTmdJTVFRQWhFQXlrQVFzZ0FDZ0NCQ0VCSUFCQkFEWUNCQUpBSUFBZ0FTQVVFS2VBZ0lBQUlnRU5BQ0FVSVFFTVB3c2dBRUhUQURZQ0hDQUFJQlEyQWhRZ0FDQUJOZ0lNUVFBaEVBeWpBUXNnQUNnQ0JDRUJJQUJCQURZQ0JBSkFJQUFnQVNBVUVLZUFnSUFBSWdFTkFDQVVJUUVNUXdzZ0FFSGxBRFlDSENBQUlCUTJBaFFnQUNBQk5nSU1RUUFoRUF5aUFRc2dBRUVBTmdJY0lBQWdGRFlDRkNBQVFjT1BnSUFBTmdJUUlBQkJCellDREVFQUlSQU1vUUVMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUhEajRDQUFEWUNFQ0FBUVFjMkFneEJBQ0VRREtBQkMwRUFJUkFnQUVFQU5nSWNJQUFnRkRZQ0ZDQUFRWXljZ0lBQU5nSVFJQUJCQnpZQ0RBeWZBUXNnQUVFQU5nSWNJQUFnRkRZQ0ZDQUFRWXljZ0lBQU5nSVFJQUJCQnpZQ0RFRUFJUkFNbmdFTElBQkJBRFlDSENBQUlCUTJBaFFnQUVIK2tZQ0FBRFlDRUNBQVFRYzJBZ3hCQUNFUURKMEJDeUFBUVFBMkFod2dBQ0FCTmdJVUlBQkJqcHVBZ0FBMkFoQWdBRUVHTmdJTVFRQWhFQXljQVFzZ0VFRVZSZzFYSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUhNam9DQUFEWUNFQ0FBUVNBMkFneEJBQ0VRREpzQkN5QUFRUUEyQWdBZ0VFRUJhaUVCUVNRaEVBc2dBQ0FRT2dBcElBQW9BZ1FoRUNBQVFRQTJBZ1FnQUNBUUlBRVFxNENBZ0FBaUVBMVVJQUVoQVF3K0N5QUFRUUEyQWdBTFFRQWhFQ0FBUVFBMkFod2dBQ0FFTmdJVUlBQkI4WnVBZ0FBMkFoQWdBRUVHTmdJTURKY0JDeUFCUVJWR0RWQWdBRUVBTmdJY0lBQWdCVFlDRkNBQVFmQ01nSUFBTmdJUUlBQkJHellDREVFQUlSQU1sZ0VMSUFBb0FnUWhCU0FBUVFBMkFnUWdBQ0FGSUJBUXFZQ0FnQUFpQlEwQklCQkJBV29oQlF0QnJRRWhFQXg3Q3lBQVFjRUJOZ0ljSUFBZ0JUWUNEQ0FBSUJCQkFXbzJBaFJCQUNFUURKTUJDeUFBS0FJRUlRWWdBRUVBTmdJRUlBQWdCaUFRRUttQWdJQUFJZ1lOQVNBUVFRRnFJUVlMUWE0QklSQU1lQXNnQUVIQ0FUWUNIQ0FBSUFZMkFnd2dBQ0FRUVFGcU5nSVVRUUFoRUF5UUFRc2dBRUVBTmdJY0lBQWdCellDRkNBQVFaZUxnSUFBTmdJUUlBQkJEVFlDREVFQUlSQU1qd0VMSUFCQkFEWUNIQ0FBSUFnMkFoUWdBRUhqa0lDQUFEWUNFQ0FBUVFrMkFneEJBQ0VRREk0QkN5QUFRUUEyQWh3Z0FDQUlOZ0lVSUFCQmxJMkFnQUEyQWhBZ0FFRWhOZ0lNUVFBaEVBeU5BUXRCQVNFV1FRQWhGMEVBSVJSQkFTRVFDeUFBSUJBNkFDc2dDVUVCYWlFSUFrQUNRQ0FBTFFBdFFSQnhEUUFDUUFKQUFrQWdBQzBBS2c0REFRQUNCQXNnRmtVTkF3d0NDeUFVRFFFTUFnc2dGMFVOQVFzZ0FDZ0NCQ0VRSUFCQkFEWUNCQ0FBSUJBZ0NCQ3RnSUNBQUNJUVJRMDlJQUJCeVFFMkFod2dBQ0FJTmdJVUlBQWdFRFlDREVFQUlSQU1qQUVMSUFBb0FnUWhCQ0FBUVFBMkFnUWdBQ0FFSUFnUXJZQ0FnQUFpQkVVTmRpQUFRY29CTmdJY0lBQWdDRFlDRkNBQUlBUTJBZ3hCQUNFUURJc0JDeUFBS0FJRUlRUWdBRUVBTmdJRUlBQWdCQ0FKRUsyQWdJQUFJZ1JGRFhRZ0FFSExBVFlDSENBQUlBazJBaFFnQUNBRU5nSU1RUUFoRUF5S0FRc2dBQ2dDQkNFRUlBQkJBRFlDQkNBQUlBUWdDaEN0Z0lDQUFDSUVSUTF5SUFCQnpRRTJBaHdnQUNBS05nSVVJQUFnQkRZQ0RFRUFJUkFNaVFFTEFrQWdDeTBBQUVGUWFpSVFRZjhCY1VFS1R3MEFJQUFnRURvQUtpQUxRUUZxSVFwQnRnRWhFQXh3Q3lBQUtBSUVJUVFnQUVFQU5nSUVJQUFnQkNBTEVLMkFnSUFBSWdSRkRYQWdBRUhQQVRZQ0hDQUFJQXMyQWhRZ0FDQUVOZ0lNUVFBaEVBeUlBUXNnQUVFQU5nSWNJQUFnQkRZQ0ZDQUFRWkN6Z0lBQU5nSVFJQUJCQ0RZQ0RDQUFRUUEyQWdCQkFDRVFESWNCQ3lBQlFSVkdEVDhnQUVFQU5nSWNJQUFnRERZQ0ZDQUFRY3lPZ0lBQU5nSVFJQUJCSURZQ0RFRUFJUkFNaGdFTElBQkJnUVE3QVNnZ0FDZ0NCQ0VRSUFCQ0FEY0RBQ0FBSUJBZ0RFRUJhaUlNRUt1QWdJQUFJaEJGRFRnZ0FFSFRBVFlDSENBQUlBdzJBaFFnQUNBUU5nSU1RUUFoRUF5RkFRc2dBRUVBTmdJQUMwRUFJUkFnQUVFQU5nSWNJQUFnQkRZQ0ZDQUFRZGliZ0lBQU5nSVFJQUJCQ0RZQ0RBeURBUXNnQUNnQ0JDRVFJQUJDQURjREFDQUFJQkFnQzBFQmFpSUxFS3VBZ0lBQUloQU5BVUhHQVNFUURHa0xJQUJCQWpvQUtBeFZDeUFBUWRVQk5nSWNJQUFnQ3pZQ0ZDQUFJQkEyQWd4QkFDRVFESUFCQ3lBUVFSVkdEVGNnQUVFQU5nSWNJQUFnQkRZQ0ZDQUFRYVNNZ0lBQU5nSVFJQUJCRURZQ0RFRUFJUkFNZndzZ0FDMEFORUVCUncwMElBQWdCQ0FDRUx5QWdJQUFJaEJGRFRRZ0VFRVZSdzAxSUFCQjNBRTJBaHdnQUNBRU5nSVVJQUJCMVphQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF4K0MwRUFJUkFnQUVFQU5nSWNJQUJCcjR1QWdBQTJBaEFnQUVFQ05nSU1JQUFnRkVFQmFqWUNGQXg5QzBFQUlSQU1Zd3RCQWlFUURHSUxRUTBoRUF4aEMwRVBJUkFNWUF0QkpTRVFERjhMUVJNaEVBeGVDMEVWSVJBTVhRdEJGaUVRREZ3TFFSY2hFQXhiQzBFWUlSQU1XZ3RCR1NFUURGa0xRUm9oRUF4WUMwRWJJUkFNVnd0QkhDRVFERllMUVIwaEVBeFZDMEVmSVJBTVZBdEJJU0VRREZNTFFTTWhFQXhTQzBIR0FDRVFERkVMUVM0aEVBeFFDMEV2SVJBTVR3dEJPeUVRREU0TFFUMGhFQXhOQzBISUFDRVFERXdMUWNrQUlSQU1Td3RCeXdBaEVBeEtDMEhNQUNFUURFa0xRYzRBSVJBTVNBdEIwUUFoRUF4SEMwSFZBQ0VRREVZTFFkZ0FJUkFNUlF0QjJRQWhFQXhFQzBIYkFDRVFERU1MUWVRQUlSQU1RZ3RCNVFBaEVBeEJDMEh4QUNFUURFQUxRZlFBSVJBTVB3dEJqUUVoRUF3K0MwR1hBU0VRREQwTFFha0JJUkFNUEF0QnJBRWhFQXc3QzBIQUFTRVFERG9MUWJrQklSQU1PUXRCcndFaEVBdzRDMEd4QVNFUUREY0xRYklCSVJBTU5ndEJ0QUVoRUF3MUMwRzFBU0VRRERRTFFib0JJUkFNTXd0QnZRRWhFQXd5QzBHL0FTRVFEREVMUWNFQklSQU1NQXNnQUVFQU5nSWNJQUFnQkRZQ0ZDQUFRZW1MZ0lBQU5nSVFJQUJCSHpZQ0RFRUFJUkFNU0FzZ0FFSGJBVFlDSENBQUlBUTJBaFFnQUVINmxvQ0FBRFlDRUNBQVFSVTJBZ3hCQUNFUURFY0xJQUJCK0FBMkFod2dBQ0FNTmdJVUlBQkJ5cGlBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXhHQ3lBQVFkRUFOZ0ljSUFBZ0JUWUNGQ0FBUWJDWGdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTVJRc2dBRUg1QURZQ0hDQUFJQUUyQWhRZ0FDQVFOZ0lNUVFBaEVBeEVDeUFBUWZnQU5nSWNJQUFnQVRZQ0ZDQUFRY3FZZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNUXdzZ0FFSGtBRFlDSENBQUlBRTJBaFFnQUVIamw0Q0FBRFlDRUNBQVFSVTJBZ3hCQUNFUURFSUxJQUJCMXdBMkFod2dBQ0FCTmdJVUlBQkJ5WmVBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXhCQ3lBQVFRQTJBaHdnQUNBQk5nSVVJQUJCdVkyQWdBQTJBaEFnQUVFYU5nSU1RUUFoRUF4QUN5QUFRY0lBTmdJY0lBQWdBVFlDRkNBQVFlT1lnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1Qd3NnQUVFQU5nSUVJQUFnRHlBUEVMR0FnSUFBSWdSRkRRRWdBRUU2TmdJY0lBQWdCRFlDRENBQUlBOUJBV28yQWhSQkFDRVFERDRMSUFBb0FnUWhCQ0FBUVFBMkFnUUNRQ0FBSUFRZ0FSQ3hnSUNBQUNJRVJRMEFJQUJCT3pZQ0hDQUFJQVEyQWd3Z0FDQUJRUUZxTmdJVVFRQWhFQXcrQ3lBQlFRRnFJUUVNTFFzZ0QwRUJhaUVCREMwTElBQkJBRFlDSENBQUlBODJBaFFnQUVIa2tvQ0FBRFlDRUNBQVFRUTJBZ3hCQUNFUUREc0xJQUJCTmpZQ0hDQUFJQVEyQWhRZ0FDQUNOZ0lNUVFBaEVBdzZDeUFBUVM0MkFod2dBQ0FPTmdJVUlBQWdCRFlDREVFQUlSQU1PUXNnQUVIUUFEWUNIQ0FBSUFFMkFoUWdBRUdSbUlDQUFEWUNFQ0FBUVJVMkFneEJBQ0VRRERnTElBMUJBV29oQVF3c0N5QUFRUlUyQWh3Z0FDQUJOZ0lVSUFCQmdwbUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBdzJDeUFBUVJzMkFod2dBQ0FCTmdJVUlBQkJrWmVBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXcxQ3lBQVFRODJBaHdnQUNBQk5nSVVJQUJCa1plQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF3MEN5QUFRUXMyQWh3Z0FDQUJOZ0lVSUFCQmtaZUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBd3pDeUFBUVJvMkFod2dBQ0FCTmdJVUlBQkJncG1BZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXd5Q3lBQVFRczJBaHdnQUNBQk5nSVVJQUJCZ3BtQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF3eEN5QUFRUW8yQWh3Z0FDQUJOZ0lVSUFCQjVKYUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBd3dDeUFBUVI0MkFod2dBQ0FCTmdJVUlBQkIrWmVBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXd2Q3lBQVFRQTJBaHdnQUNBUU5nSVVJQUJCMm8yQWdBQTJBaEFnQUVFVU5nSU1RUUFoRUF3dUN5QUFRUVEyQWh3Z0FDQUJOZ0lVSUFCQnNKaUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBd3RDeUFBUVFBMkFnQWdDMEVCYWlFTEMwRzRBU0VRREJJTElBQkJBRFlDQUNBUVFRRnFJUUZCOVFBaEVBd1JDeUFCSVFFQ1FDQUFMUUFwUVFWSERRQkI0d0FoRUF3UkMwSGlBQ0VRREJBTFFRQWhFQ0FBUVFBMkFod2dBRUhra1lDQUFEWUNFQ0FBUVFjMkFnd2dBQ0FVUVFGcU5nSVVEQ2dMSUFCQkFEWUNBQ0FYUVFGcUlRRkJ3QUFoRUF3T0MwRUJJUUVMSUFBZ0FUb0FMQ0FBUVFBMkFnQWdGMEVCYWlFQkMwRW9JUkFNQ3dzZ0FTRUJDMEU0SVJBTUNRc0NRQ0FCSWc4Z0FrWU5BQU5BQWtBZ0R5MEFBRUdBdm9DQUFHb3RBQUFpQVVFQlJnMEFJQUZCQWtjTkF5QVBRUUZxSVFFTUJBc2dEMEVCYWlJUElBSkhEUUFMUVQ0aEVBd2lDMEUrSVJBTUlRc2dBRUVBT2dBc0lBOGhBUXdCQzBFTElSQU1CZ3RCT2lFUURBVUxJQUZCQVdvaEFVRXRJUkFNQkFzZ0FDQUJPZ0FzSUFCQkFEWUNBQ0FXUVFGcUlRRkJEQ0VRREFNTElBQkJBRFlDQUNBWFFRRnFJUUZCQ2lFUURBSUxJQUJCQURZQ0FBc2dBRUVBT2dBc0lBMGhBVUVKSVJBTUFBc0xRUUFoRUNBQVFRQTJBaHdnQUNBTE5nSVVJQUJCelpDQWdBQTJBaEFnQUVFSk5nSU1EQmNMUVFBaEVDQUFRUUEyQWh3Z0FDQUtOZ0lVSUFCQjZZcUFnQUEyQWhBZ0FFRUpOZ0lNREJZTFFRQWhFQ0FBUVFBMkFod2dBQ0FKTmdJVUlBQkJ0NUNBZ0FBMkFoQWdBRUVKTmdJTURCVUxRUUFoRUNBQVFRQTJBaHdnQUNBSU5nSVVJQUJCbkpHQWdBQTJBaEFnQUVFSk5nSU1EQlFMUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnpaQ0FnQUEyQWhBZ0FFRUpOZ0lNREJNTFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkI2WXFBZ0FBMkFoQWdBRUVKTmdJTURCSUxRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCdDVDQWdBQTJBaEFnQUVFSk5nSU1EQkVMUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQm5KR0FnQUEyQWhBZ0FFRUpOZ0lNREJBTFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkJsNVdBZ0FBMkFoQWdBRUVQTmdJTURBOExRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCbDVXQWdBQTJBaEFnQUVFUE5nSU1EQTRMUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQndKS0FnQUEyQWhBZ0FFRUxOZ0lNREEwTFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkJsWW1BZ0FBMkFoQWdBRUVMTmdJTURBd0xRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCNFkrQWdBQTJBaEFnQUVFS05nSU1EQXNMUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQis0K0FnQUEyQWhBZ0FFRUtOZ0lNREFvTFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkI4Wm1BZ0FBMkFoQWdBRUVDTmdJTURBa0xRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCeEpTQWdBQTJBaEFnQUVFQ05nSU1EQWdMUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQjhwV0FnQUEyQWhBZ0FFRUNOZ0lNREFjTElBQkJBallDSENBQUlBRTJBaFFnQUVHY21vQ0FBRFlDRUNBQVFSWTJBZ3hCQUNFUURBWUxRUUVoRUF3RkMwSFVBQ0VRSUFFaUJDQUNSZzBFSUFOQkNHb2dBQ0FFSUFKQjJNS0FnQUJCQ2hERmdJQ0FBQ0FES0FJTUlRUWdBeWdDQ0E0REFRUUNBQXNReW9DQWdBQUFDeUFBUVFBMkFod2dBRUcxbW9DQUFEWUNFQ0FBUVJjMkFnd2dBQ0FFUVFGcU5nSVVRUUFoRUF3Q0N5QUFRUUEyQWh3Z0FDQUVOZ0lVSUFCQnlwcUFnQUEyQWhBZ0FFRUpOZ0lNUVFBaEVBd0JDd0pBSUFFaUJDQUNSdzBBUVNJaEVBd0JDeUFBUVltQWdJQUFOZ0lJSUFBZ0JEWUNCRUVoSVJBTElBTkJFR29rZ0lDQWdBQWdFQXV2QVFFQ2Z5QUJLQUlBSVFZQ1FBSkFJQUlnQTBZTkFDQUVJQVpxSVFRZ0JpQURhaUFDYXlFSElBSWdCa0YvY3lBRmFpSUdhaUVGQTBBQ1FDQUNMUUFBSUFRdEFBQkdEUUJCQWlFRURBTUxBa0FnQmcwQVFRQWhCQ0FGSVFJTUF3c2dCa0YvYWlFR0lBUkJBV29oQkNBQ1FRRnFJZ0lnQTBjTkFBc2dCeUVHSUFNaEFnc2dBRUVCTmdJQUlBRWdCallDQUNBQUlBSTJBZ1FQQ3lBQlFRQTJBZ0FnQUNBRU5nSUFJQUFnQWpZQ0JBc0tBQ0FBRU1lQWdJQUFDL0kyQVF0L0k0Q0FnSUFBUVJCcklnRWtnSUNBZ0FBQ1FFRUFLQUtnMElDQUFBMEFRUUFReTRDQWdBQkJnTlNFZ0FCcklnSkIyUUJKRFFCQkFDRURBa0JCQUNnQzROT0FnQUFpQkEwQVFRQkNmemNDN05PQWdBQkJBRUtBZ0lTQWdJREFBRGNDNU5PQWdBQkJBQ0FCUVFocVFYQnhRZGlxMWFvRmN5SUVOZ0xnMDRDQUFFRUFRUUEyQXZUVGdJQUFRUUJCQURZQ3hOT0FnQUFMUVFBZ0FqWUN6Tk9BZ0FCQkFFR0ExSVNBQURZQ3lOT0FnQUJCQUVHQTFJU0FBRFlDbU5DQWdBQkJBQ0FFTmdLczBJQ0FBRUVBUVg4MkFxalFnSUFBQTBBZ0EwSEUwSUNBQUdvZ0EwRzQwSUNBQUdvaUJEWUNBQ0FFSUFOQnNOQ0FnQUJxSWdVMkFnQWdBMEc4MElDQUFHb2dCVFlDQUNBRFFjelFnSUFBYWlBRFFjRFFnSUFBYWlJRk5nSUFJQVVnQkRZQ0FDQURRZFRRZ0lBQWFpQURRY2pRZ0lBQWFpSUVOZ0lBSUFRZ0JUWUNBQ0FEUWREUWdJQUFhaUFFTmdJQUlBTkJJR29pQTBHQUFrY05BQXRCZ05TRWdBQkJlRUdBMUlTQUFHdEJEM0ZCQUVHQTFJU0FBRUVJYWtFUGNSc2lBMm9pQkVFRWFpQUNRVWhxSWdVZ0Eyc2lBMEVCY2pZQ0FFRUFRUUFvQXZEVGdJQUFOZ0trMElDQUFFRUFJQU0yQXBUUWdJQUFRUUFnQkRZQ29OQ0FnQUJCZ05TRWdBQWdCV3BCT0RZQ0JBc0NRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBZ0FFSHNBVXNOQUFKQVFRQW9Bb2pRZ0lBQUlnWkJFQ0FBUVJOcVFYQnhJQUJCQzBrYklnSkJBM1lpQkhZaUEwRURjVVVOQUFKQUFrQWdBMEVCY1NBRWNrRUJjeUlGUVFOMElnUkJzTkNBZ0FCcUlnTWdCRUc0MElDQUFHb29BZ0FpQkNnQ0NDSUNSdzBBUVFBZ0JrRitJQVYzY1RZQ2lOQ0FnQUFNQVFzZ0F5QUNOZ0lJSUFJZ0F6WUNEQXNnQkVFSWFpRURJQVFnQlVFRGRDSUZRUU55TmdJRUlBUWdCV29pQkNBRUtBSUVRUUZ5TmdJRURBd0xJQUpCQUNnQ2tOQ0FnQUFpQjAwTkFRSkFJQU5GRFFBQ1FBSkFJQU1nQkhSQkFpQUVkQ0lEUVFBZ0EydHljU0lEUVFBZ0EydHhRWDlxSWdNZ0EwRU1ka0VRY1NJRGRpSUVRUVYyUVFoeElnVWdBM0lnQkNBRmRpSURRUUoyUVFSeElnUnlJQU1nQkhZaUEwRUJka0VDY1NJRWNpQURJQVIySWdOQkFYWkJBWEVpQkhJZ0F5QUVkbW9pQkVFRGRDSURRYkRRZ0lBQWFpSUZJQU5CdU5DQWdBQnFLQUlBSWdNb0FnZ2lBRWNOQUVFQUlBWkJmaUFFZDNFaUJqWUNpTkNBZ0FBTUFRc2dCU0FBTmdJSUlBQWdCVFlDREFzZ0F5QUNRUU55TmdJRUlBTWdCRUVEZENJRWFpQUVJQUpySWdVMkFnQWdBeUFDYWlJQUlBVkJBWEkyQWdRQ1FDQUhSUTBBSUFkQmVIRkJzTkNBZ0FCcUlRSkJBQ2dDbk5DQWdBQWhCQUpBQWtBZ0JrRUJJQWRCQTNaMElnaHhEUUJCQUNBR0lBaHlOZ0tJMElDQUFDQUNJUWdNQVFzZ0FpZ0NDQ0VJQ3lBSUlBUTJBZ3dnQWlBRU5nSUlJQVFnQWpZQ0RDQUVJQWcyQWdnTElBTkJDR29oQTBFQUlBQTJBcHpRZ0lBQVFRQWdCVFlDa05DQWdBQU1EQXRCQUNnQ2pOQ0FnQUFpQ1VVTkFTQUpRUUFnQ1d0eFFYOXFJZ01nQTBFTWRrRVFjU0lEZGlJRVFRVjJRUWh4SWdVZ0EzSWdCQ0FGZGlJRFFRSjJRUVJ4SWdSeUlBTWdCSFlpQTBFQmRrRUNjU0lFY2lBRElBUjJJZ05CQVhaQkFYRWlCSElnQXlBRWRtcEJBblJCdU5LQWdBQnFLQUlBSWdBb0FnUkJlSEVnQW1zaEJDQUFJUVVDUUFOQUFrQWdCU2dDRUNJRERRQWdCVUVVYWlnQ0FDSURSUTBDQ3lBREtBSUVRWGh4SUFKcklnVWdCQ0FGSUFSSklnVWJJUVFnQXlBQUlBVWJJUUFnQXlFRkRBQUxDeUFBS0FJWUlRb0NRQ0FBS0FJTUlnZ2dBRVlOQUNBQUtBSUlJZ05CQUNnQ21OQ0FnQUJKR2lBSUlBTTJBZ2dnQXlBSU5nSU1EQXNMQWtBZ0FFRVVhaUlGS0FJQUlnTU5BQ0FBS0FJUUlnTkZEUU1nQUVFUWFpRUZDd05BSUFVaEN5QURJZ2hCRkdvaUJTZ0NBQ0lERFFBZ0NFRVFhaUVGSUFnb0FoQWlBdzBBQ3lBTFFRQTJBZ0FNQ2d0QmZ5RUNJQUJCdjM5TERRQWdBRUVUYWlJRFFYQnhJUUpCQUNnQ2pOQ0FnQUFpQjBVTkFFRUFJUXNDUUNBQ1FZQUNTUTBBUVI4aEN5QUNRZi8vL3dkTERRQWdBMEVJZGlJRElBTkJnUDQvYWtFUWRrRUljU0lEZENJRUlBUkJnT0FmYWtFUWRrRUVjU0lFZENJRklBVkJnSUFQYWtFUWRrRUNjU0lGZEVFUGRpQURJQVJ5SUFWeWF5SURRUUYwSUFJZ0EwRVZhblpCQVhGeVFSeHFJUXNMUVFBZ0Ftc2hCQUpBQWtBQ1FBSkFJQXRCQW5SQnVOS0FnQUJxS0FJQUlnVU5BRUVBSVFOQkFDRUlEQUVMUVFBaEF5QUNRUUJCR1NBTFFRRjJheUFMUVI5R0czUWhBRUVBSVFnRFFBSkFJQVVvQWdSQmVIRWdBbXNpQmlBRVR3MEFJQVloQkNBRklRZ2dCZzBBUVFBaEJDQUZJUWdnQlNFRERBTUxJQU1nQlVFVWFpZ0NBQ0lHSUFZZ0JTQUFRUjEyUVFSeGFrRVFhaWdDQUNJRlJoc2dBeUFHR3lFRElBQkJBWFFoQUNBRkRRQUxDd0pBSUFNZ0NISU5BRUVBSVFoQkFpQUxkQ0lEUVFBZ0EydHlJQWR4SWdORkRRTWdBMEVBSUFOcmNVRi9haUlESUFOQkRIWkJFSEVpQTNZaUJVRUZka0VJY1NJQUlBTnlJQVVnQUhZaUEwRUNka0VFY1NJRmNpQURJQVYySWdOQkFYWkJBbkVpQlhJZ0F5QUZkaUlEUVFGMlFRRnhJZ1Z5SUFNZ0JYWnFRUUowUWJqU2dJQUFhaWdDQUNFREN5QURSUTBCQ3dOQUlBTW9BZ1JCZUhFZ0Ftc2lCaUFFU1NFQUFrQWdBeWdDRUNJRkRRQWdBMEVVYWlnQ0FDRUZDeUFHSUFRZ0FCc2hCQ0FESUFnZ0FCc2hDQ0FGSVFNZ0JRMEFDd3NnQ0VVTkFDQUVRUUFvQXBEUWdJQUFJQUpyVHcwQUlBZ29BaGdoQ3dKQUlBZ29BZ3dpQUNBSVJnMEFJQWdvQWdnaUEwRUFLQUtZMElDQUFFa2FJQUFnQXpZQ0NDQURJQUEyQWd3TUNRc0NRQ0FJUVJScUlnVW9BZ0FpQXcwQUlBZ29BaEFpQTBVTkF5QUlRUkJxSVFVTEEwQWdCU0VHSUFNaUFFRVVhaUlGS0FJQUlnTU5BQ0FBUVJCcUlRVWdBQ2dDRUNJRERRQUxJQVpCQURZQ0FBd0lDd0pBUVFBb0FwRFFnSUFBSWdNZ0Fra05BRUVBS0FLYzBJQ0FBQ0VFQWtBQ1FDQURJQUpySWdWQkVFa05BQ0FFSUFKcUlnQWdCVUVCY2pZQ0JFRUFJQVUyQXBEUWdJQUFRUUFnQURZQ25OQ0FnQUFnQkNBRGFpQUZOZ0lBSUFRZ0FrRURjallDQkF3QkN5QUVJQU5CQTNJMkFnUWdCQ0FEYWlJRElBTW9BZ1JCQVhJMkFnUkJBRUVBTmdLYzBJQ0FBRUVBUVFBMkFwRFFnSUFBQ3lBRVFRaHFJUU1NQ2dzQ1FFRUFLQUtVMElDQUFDSUFJQUpORFFCQkFDZ0NvTkNBZ0FBaUF5QUNhaUlFSUFBZ0Ftc2lCVUVCY2pZQ0JFRUFJQVUyQXBUUWdJQUFRUUFnQkRZQ29OQ0FnQUFnQXlBQ1FRTnlOZ0lFSUFOQkNHb2hBd3dLQ3dKQUFrQkJBQ2dDNE5PQWdBQkZEUUJCQUNnQzZOT0FnQUFoQkF3QkMwRUFRbjgzQXV6VGdJQUFRUUJDZ0lDRWdJQ0F3QUEzQXVUVGdJQUFRUUFnQVVFTWFrRndjVUhZcXRXcUJYTTJBdURUZ0lBQVFRQkJBRFlDOU5PQWdBQkJBRUVBTmdMRTA0Q0FBRUdBZ0FRaEJBdEJBQ0VEQWtBZ0JDQUNRY2NBYWlJSGFpSUdRUUFnQkdzaUMzRWlDQ0FDU3cwQVFRQkJNRFlDK05PQWdBQU1DZ3NDUUVFQUtBTEEwNENBQUNJRFJRMEFBa0JCQUNnQ3VOT0FnQUFpQkNBSWFpSUZJQVJORFFBZ0JTQURUUTBCQzBFQUlRTkJBRUV3TmdMNDA0Q0FBQXdLQzBFQUxRREUwNENBQUVFRWNRMEVBa0FDUUFKQVFRQW9BcURRZ0lBQUlnUkZEUUJCeU5PQWdBQWhBd05BQWtBZ0F5Z0NBQ0lGSUFSTERRQWdCU0FES0FJRWFpQUVTdzBEQ3lBREtBSUlJZ01OQUFzTFFRQVF5NENBZ0FBaUFFRi9SZzBGSUFnaEJnSkFRUUFvQXVUVGdJQUFJZ05CZjJvaUJDQUFjVVVOQUNBSUlBQnJJQVFnQUdwQkFDQURhM0ZxSVFZTElBWWdBazBOQlNBR1FmNy8vLzhIU3cwRkFrQkJBQ2dDd05PQWdBQWlBMFVOQUVFQUtBSzQwNENBQUNJRUlBWnFJZ1VnQkUwTkJpQUZJQU5MRFFZTElBWVF5NENBZ0FBaUF5QUFSdzBCREFjTElBWWdBR3NnQzNFaUJrSCsvLy8vQjBzTkJDQUdFTXVBZ0lBQUlnQWdBeWdDQUNBREtBSUVha1lOQXlBQUlRTUxBa0FnQTBGL1JnMEFJQUpCeUFCcUlBWk5EUUFDUUNBSElBWnJRUUFvQXVqVGdJQUFJZ1JxUVFBZ0JHdHhJZ1JCL3YvLy93ZE5EUUFnQXlFQURBY0xBa0FnQkJETGdJQ0FBRUYvUmcwQUlBUWdCbW9oQmlBRElRQU1Cd3RCQUNBR2F4RExnSUNBQUJvTUJBc2dBeUVBSUFOQmYwY05CUXdEQzBFQUlRZ01Cd3RCQUNFQURBVUxJQUJCZjBjTkFndEJBRUVBS0FMRTA0Q0FBRUVFY2pZQ3hOT0FnQUFMSUFoQi92Ly8vd2RMRFFFZ0NCRExnSUNBQUNFQVFRQVF5NENBZ0FBaEF5QUFRWDlHRFFFZ0EwRi9SZzBCSUFBZ0EwOE5BU0FESUFCcklnWWdBa0U0YWswTkFRdEJBRUVBS0FLNDA0Q0FBQ0FHYWlJRE5nSzQwNENBQUFKQUlBTkJBQ2dDdk5PQWdBQk5EUUJCQUNBRE5nSzgwNENBQUFzQ1FBSkFBa0FDUUVFQUtBS2cwSUNBQUNJRVJRMEFRY2pUZ0lBQUlRTURRQ0FBSUFNb0FnQWlCU0FES0FJRUlnaHFSZzBDSUFNb0FnZ2lBdzBBREFNTEN3SkFBa0JCQUNnQ21OQ0FnQUFpQTBVTkFDQUFJQU5QRFFFTFFRQWdBRFlDbU5DQWdBQUxRUUFoQTBFQUlBWTJBc3pUZ0lBQVFRQWdBRFlDeU5PQWdBQkJBRUYvTmdLbzBJQ0FBRUVBUVFBb0F1RFRnSUFBTmdLczBJQ0FBRUVBUVFBMkF0VFRnSUFBQTBBZ0EwSEUwSUNBQUdvZ0EwRzQwSUNBQUdvaUJEWUNBQ0FFSUFOQnNOQ0FnQUJxSWdVMkFnQWdBMEc4MElDQUFHb2dCVFlDQUNBRFFjelFnSUFBYWlBRFFjRFFnSUFBYWlJRk5nSUFJQVVnQkRZQ0FDQURRZFRRZ0lBQWFpQURRY2pRZ0lBQWFpSUVOZ0lBSUFRZ0JUWUNBQ0FEUWREUWdJQUFhaUFFTmdJQUlBTkJJR29pQTBHQUFrY05BQXNnQUVGNElBQnJRUTl4UVFBZ0FFRUlha0VQY1JzaUEyb2lCQ0FHUVVocUlnVWdBMnNpQTBFQmNqWUNCRUVBUVFBb0F2RFRnSUFBTmdLazBJQ0FBRUVBSUFNMkFwVFFnSUFBUVFBZ0JEWUNvTkNBZ0FBZ0FDQUZha0U0TmdJRURBSUxJQU10QUF4QkNIRU5BQ0FFSUFWSkRRQWdCQ0FBVHcwQUlBUkJlQ0FFYTBFUGNVRUFJQVJCQ0dwQkQzRWJJZ1ZxSWdCQkFDZ0NsTkNBZ0FBZ0Jtb2lDeUFGYXlJRlFRRnlOZ0lFSUFNZ0NDQUdhallDQkVFQVFRQW9BdkRUZ0lBQU5nS2swSUNBQUVFQUlBVTJBcFRRZ0lBQVFRQWdBRFlDb05DQWdBQWdCQ0FMYWtFNE5nSUVEQUVMQWtBZ0FFRUFLQUtZMElDQUFDSUlUdzBBUVFBZ0FEWUNtTkNBZ0FBZ0FDRUlDeUFBSUFacUlRVkJ5Tk9BZ0FBaEF3SkFBa0FDUUFKQUFrQUNRQUpBQTBBZ0F5Z0NBQ0FGUmcwQklBTW9BZ2dpQXcwQURBSUxDeUFETFFBTVFRaHhSUTBCQzBISTA0Q0FBQ0VEQTBBQ1FDQURLQUlBSWdVZ0JFc05BQ0FGSUFNb0FnUnFJZ1VnQkVzTkF3c2dBeWdDQ0NFRERBQUxDeUFESUFBMkFnQWdBeUFES0FJRUlBWnFOZ0lFSUFCQmVDQUFhMEVQY1VFQUlBQkJDR3BCRDNFYmFpSUxJQUpCQTNJMkFnUWdCVUY0SUFWclFROXhRUUFnQlVFSWFrRVBjUnRxSWdZZ0N5QUNhaUlDYXlFREFrQWdCaUFFUncwQVFRQWdBallDb05DQWdBQkJBRUVBS0FLVTBJQ0FBQ0FEYWlJRE5nS1UwSUNBQUNBQ0lBTkJBWEkyQWdRTUF3c0NRQ0FHUVFBb0FwelFnSUFBUncwQVFRQWdBallDbk5DQWdBQkJBRUVBS0FLUTBJQ0FBQ0FEYWlJRE5nS1EwSUNBQUNBQ0lBTkJBWEkyQWdRZ0FpQURhaUFETmdJQURBTUxBa0FnQmlnQ0JDSUVRUU54UVFGSERRQWdCRUY0Y1NFSEFrQUNRQ0FFUWY4QlN3MEFJQVlvQWdnaUJTQUVRUU4ySWdoQkEzUkJzTkNBZ0FCcUlnQkdHZ0pBSUFZb0Fnd2lCQ0FGUncwQVFRQkJBQ2dDaU5DQWdBQkJmaUFJZDNFMkFvalFnSUFBREFJTElBUWdBRVlhSUFRZ0JUWUNDQ0FGSUFRMkFnd01BUXNnQmlnQ0dDRUpBa0FDUUNBR0tBSU1JZ0FnQmtZTkFDQUdLQUlJSWdRZ0NFa2FJQUFnQkRZQ0NDQUVJQUEyQWd3TUFRc0NRQ0FHUVJScUlnUW9BZ0FpQlEwQUlBWkJFR29pQkNnQ0FDSUZEUUJCQUNFQURBRUxBMEFnQkNFSUlBVWlBRUVVYWlJRUtBSUFJZ1VOQUNBQVFSQnFJUVFnQUNnQ0VDSUZEUUFMSUFoQkFEWUNBQXNnQ1VVTkFBSkFBa0FnQmlBR0tBSWNJZ1ZCQW5SQnVOS0FnQUJxSWdRb0FnQkhEUUFnQkNBQU5nSUFJQUFOQVVFQVFRQW9Bb3pRZ0lBQVFYNGdCWGR4TmdLTTBJQ0FBQXdDQ3lBSlFSQkJGQ0FKS0FJUUlBWkdHMm9nQURZQ0FDQUFSUTBCQ3lBQUlBazJBaGdDUUNBR0tBSVFJZ1JGRFFBZ0FDQUVOZ0lRSUFRZ0FEWUNHQXNnQmlnQ0ZDSUVSUTBBSUFCQkZHb2dCRFlDQUNBRUlBQTJBaGdMSUFjZ0Eyb2hBeUFHSUFkcUlnWW9BZ1FoQkFzZ0JpQUVRWDV4TmdJRUlBSWdBMm9nQXpZQ0FDQUNJQU5CQVhJMkFnUUNRQ0FEUWY4QlN3MEFJQU5CZUhGQnNOQ0FnQUJxSVFRQ1FBSkFRUUFvQW9qUWdJQUFJZ1ZCQVNBRFFRTjJkQ0lEY1EwQVFRQWdCU0FEY2pZQ2lOQ0FnQUFnQkNFRERBRUxJQVFvQWdnaEF3c2dBeUFDTmdJTUlBUWdBallDQ0NBQ0lBUTJBZ3dnQWlBRE5nSUlEQU1MUVI4aEJBSkFJQU5CLy8vL0Iwc05BQ0FEUVFoMklnUWdCRUdBL2o5cVFSQjJRUWh4SWdSMElnVWdCVUdBNEI5cVFSQjJRUVJ4SWdWMElnQWdBRUdBZ0E5cVFSQjJRUUp4SWdCMFFROTJJQVFnQlhJZ0FISnJJZ1JCQVhRZ0F5QUVRUlZxZGtFQmNYSkJIR29oQkFzZ0FpQUVOZ0ljSUFKQ0FEY0NFQ0FFUVFKMFFialNnSUFBYWlFRkFrQkJBQ2dDak5DQWdBQWlBRUVCSUFSMElnaHhEUUFnQlNBQ05nSUFRUUFnQUNBSWNqWUNqTkNBZ0FBZ0FpQUZOZ0lZSUFJZ0FqWUNDQ0FDSUFJMkFnd01Bd3NnQTBFQVFSa2dCRUVCZG1zZ0JFRWZSaHQwSVFRZ0JTZ0NBQ0VBQTBBZ0FDSUZLQUlFUVhoeElBTkdEUUlnQkVFZGRpRUFJQVJCQVhRaEJDQUZJQUJCQkhGcVFSQnFJZ2dvQWdBaUFBMEFDeUFJSUFJMkFnQWdBaUFGTmdJWUlBSWdBallDRENBQ0lBSTJBZ2dNQWdzZ0FFRjRJQUJyUVE5eFFRQWdBRUVJYWtFUGNSc2lBMm9pQ3lBR1FVaHFJZ2dnQTJzaUEwRUJjallDQkNBQUlBaHFRVGcyQWdRZ0JDQUZRVGNnQld0QkQzRkJBQ0FGUVVscVFROXhHMnBCUVdvaUNDQUlJQVJCRUdwSkd5SUlRU00yQWdSQkFFRUFLQUx3MDRDQUFEWUNwTkNBZ0FCQkFDQUROZ0tVMElDQUFFRUFJQXMyQXFEUWdJQUFJQWhCRUdwQkFDa0MwTk9BZ0FBM0FnQWdDRUVBS1FMSTA0Q0FBRGNDQ0VFQUlBaEJDR28yQXREVGdJQUFRUUFnQmpZQ3pOT0FnQUJCQUNBQU5nTEkwNENBQUVFQVFRQTJBdFRUZ0lBQUlBaEJKR29oQXdOQUlBTkJCellDQUNBRFFRUnFJZ01nQlVrTkFBc2dDQ0FFUmcwRElBZ2dDQ2dDQkVGK2NUWUNCQ0FJSUFnZ0JHc2lBRFlDQUNBRUlBQkJBWEkyQWdRQ1FDQUFRZjhCU3cwQUlBQkJlSEZCc05DQWdBQnFJUU1DUUFKQVFRQW9Bb2pRZ0lBQUlnVkJBU0FBUVFOMmRDSUFjUTBBUVFBZ0JTQUFjallDaU5DQWdBQWdBeUVGREFFTElBTW9BZ2doQlFzZ0JTQUVOZ0lNSUFNZ0JEWUNDQ0FFSUFNMkFnd2dCQ0FGTmdJSURBUUxRUjhoQXdKQUlBQkIvLy8vQjBzTkFDQUFRUWgySWdNZ0EwR0EvajlxUVJCMlFRaHhJZ04wSWdVZ0JVR0E0QjlxUVJCMlFRUnhJZ1YwSWdnZ0NFR0FnQTlxUVJCMlFRSnhJZ2gwUVE5MklBTWdCWElnQ0hKcklnTkJBWFFnQUNBRFFSVnFka0VCY1hKQkhHb2hBd3NnQkNBRE5nSWNJQVJDQURjQ0VDQURRUUowUWJqU2dJQUFhaUVGQWtCQkFDZ0NqTkNBZ0FBaUNFRUJJQU4wSWdaeERRQWdCU0FFTmdJQVFRQWdDQ0FHY2pZQ2pOQ0FnQUFnQkNBRk5nSVlJQVFnQkRZQ0NDQUVJQVEyQWd3TUJBc2dBRUVBUVJrZ0EwRUJkbXNnQTBFZlJodDBJUU1nQlNnQ0FDRUlBMEFnQ0NJRktBSUVRWGh4SUFCR0RRTWdBMEVkZGlFSUlBTkJBWFFoQXlBRklBaEJCSEZxUVJCcUlnWW9BZ0FpQ0EwQUN5QUdJQVEyQWdBZ0JDQUZOZ0lZSUFRZ0JEWUNEQ0FFSUFRMkFnZ01Bd3NnQlNnQ0NDSURJQUkyQWd3Z0JTQUNOZ0lJSUFKQkFEWUNHQ0FDSUFVMkFnd2dBaUFETmdJSUN5QUxRUWhxSVFNTUJRc2dCU2dDQ0NJRElBUTJBZ3dnQlNBRU5nSUlJQVJCQURZQ0dDQUVJQVUyQWd3Z0JDQUROZ0lJQzBFQUtBS1UwSUNBQUNJRElBSk5EUUJCQUNnQ29OQ0FnQUFpQkNBQ2FpSUZJQU1nQW1zaUEwRUJjallDQkVFQUlBTTJBcFRRZ0lBQVFRQWdCVFlDb05DQWdBQWdCQ0FDUVFOeU5nSUVJQVJCQ0dvaEF3d0RDMEVBSVFOQkFFRXdOZ0w0MDRDQUFBd0NDd0pBSUF0RkRRQUNRQUpBSUFnZ0NDZ0NIQ0lGUVFKMFFialNnSUFBYWlJREtBSUFSdzBBSUFNZ0FEWUNBQ0FBRFFGQkFDQUhRWDRnQlhkeElnYzJBb3pRZ0lBQURBSUxJQXRCRUVFVUlBc29BaEFnQ0VZYmFpQUFOZ0lBSUFCRkRRRUxJQUFnQ3pZQ0dBSkFJQWdvQWhBaUEwVU5BQ0FBSUFNMkFoQWdBeUFBTmdJWUN5QUlRUlJxS0FJQUlnTkZEUUFnQUVFVWFpQUROZ0lBSUFNZ0FEWUNHQXNDUUFKQUlBUkJEMHNOQUNBSUlBUWdBbW9pQTBFRGNqWUNCQ0FJSUFOcUlnTWdBeWdDQkVFQmNqWUNCQXdCQ3lBSUlBSnFJZ0FnQkVFQmNqWUNCQ0FJSUFKQkEzSTJBZ1FnQUNBRWFpQUVOZ0lBQWtBZ0JFSC9BVXNOQUNBRVFYaHhRYkRRZ0lBQWFpRURBa0FDUUVFQUtBS0kwSUNBQUNJRlFRRWdCRUVEZG5RaUJIRU5BRUVBSUFVZ0JISTJBb2pRZ0lBQUlBTWhCQXdCQ3lBREtBSUlJUVFMSUFRZ0FEWUNEQ0FESUFBMkFnZ2dBQ0FETmdJTUlBQWdCRFlDQ0F3QkMwRWZJUU1DUUNBRVFmLy8vd2RMRFFBZ0JFRUlkaUlESUFOQmdQNC9ha0VRZGtFSWNTSURkQ0lGSUFWQmdPQWZha0VRZGtFRWNTSUZkQ0lDSUFKQmdJQVBha0VRZGtFQ2NTSUNkRUVQZGlBRElBVnlJQUp5YXlJRFFRRjBJQVFnQTBFVmFuWkJBWEZ5UVJ4cUlRTUxJQUFnQXpZQ0hDQUFRZ0EzQWhBZ0EwRUNkRUc0MG9DQUFHb2hCUUpBSUFkQkFTQURkQ0lDY1EwQUlBVWdBRFlDQUVFQUlBY2dBbkkyQW96UWdJQUFJQUFnQlRZQ0dDQUFJQUEyQWdnZ0FDQUFOZ0lNREFFTElBUkJBRUVaSUFOQkFYWnJJQU5CSDBZYmRDRURJQVVvQWdBaEFnSkFBMEFnQWlJRktBSUVRWGh4SUFSR0RRRWdBMEVkZGlFQ0lBTkJBWFFoQXlBRklBSkJCSEZxUVJCcUlnWW9BZ0FpQWcwQUN5QUdJQUEyQWdBZ0FDQUZOZ0lZSUFBZ0FEWUNEQ0FBSUFBMkFnZ01BUXNnQlNnQ0NDSURJQUEyQWd3Z0JTQUFOZ0lJSUFCQkFEWUNHQ0FBSUFVMkFnd2dBQ0FETmdJSUN5QUlRUWhxSVFNTUFRc0NRQ0FLUlEwQUFrQUNRQ0FBSUFBb0Fod2lCVUVDZEVHNDBvQ0FBR29pQXlnQ0FFY05BQ0FESUFnMkFnQWdDQTBCUVFBZ0NVRitJQVYzY1RZQ2pOQ0FnQUFNQWdzZ0NrRVFRUlFnQ2lnQ0VDQUFSaHRxSUFnMkFnQWdDRVVOQVFzZ0NDQUtOZ0lZQWtBZ0FDZ0NFQ0lEUlEwQUlBZ2dBellDRUNBRElBZzJBaGdMSUFCQkZHb29BZ0FpQTBVTkFDQUlRUlJxSUFNMkFnQWdBeUFJTmdJWUN3SkFBa0FnQkVFUFN3MEFJQUFnQkNBQ2FpSURRUU55TmdJRUlBQWdBMm9pQXlBREtBSUVRUUZ5TmdJRURBRUxJQUFnQW1vaUJTQUVRUUZ5TmdJRUlBQWdBa0VEY2pZQ0JDQUZJQVJxSUFRMkFnQUNRQ0FIUlEwQUlBZEJlSEZCc05DQWdBQnFJUUpCQUNnQ25OQ0FnQUFoQXdKQUFrQkJBU0FIUVFOMmRDSUlJQVp4RFFCQkFDQUlJQVp5TmdLSTBJQ0FBQ0FDSVFnTUFRc2dBaWdDQ0NFSUN5QUlJQU0yQWd3Z0FpQUROZ0lJSUFNZ0FqWUNEQ0FESUFnMkFnZ0xRUUFnQlRZQ25OQ0FnQUJCQUNBRU5nS1EwSUNBQUFzZ0FFRUlhaUVEQ3lBQlFSQnFKSUNBZ0lBQUlBTUxDZ0FnQUJESmdJQ0FBQXZpRFFFSGZ3SkFJQUJGRFFBZ0FFRjRhaUlCSUFCQmZHb29BZ0FpQWtGNGNTSUFhaUVEQWtBZ0FrRUJjUTBBSUFKQkEzRkZEUUVnQVNBQktBSUFJZ0pySWdGQkFDZ0NtTkNBZ0FBaUJFa05BU0FDSUFCcUlRQUNRQ0FCUVFBb0FwelFnSUFBUmcwQUFrQWdBa0gvQVVzTkFDQUJLQUlJSWdRZ0FrRURkaUlGUVFOMFFiRFFnSUFBYWlJR1Job0NRQ0FCS0FJTUlnSWdCRWNOQUVFQVFRQW9Bb2pRZ0lBQVFYNGdCWGR4TmdLSTBJQ0FBQXdEQ3lBQ0lBWkdHaUFDSUFRMkFnZ2dCQ0FDTmdJTURBSUxJQUVvQWhnaEJ3SkFBa0FnQVNnQ0RDSUdJQUZHRFFBZ0FTZ0NDQ0lDSUFSSkdpQUdJQUkyQWdnZ0FpQUdOZ0lNREFFTEFrQWdBVUVVYWlJQ0tBSUFJZ1FOQUNBQlFSQnFJZ0lvQWdBaUJBMEFRUUFoQmd3QkN3TkFJQUloQlNBRUlnWkJGR29pQWlnQ0FDSUVEUUFnQmtFUWFpRUNJQVlvQWhBaUJBMEFDeUFGUVFBMkFnQUxJQWRGRFFFQ1FBSkFJQUVnQVNnQ0hDSUVRUUowUWJqU2dJQUFhaUlDS0FJQVJ3MEFJQUlnQmpZQ0FDQUdEUUZCQUVFQUtBS00wSUNBQUVGK0lBUjNjVFlDak5DQWdBQU1Bd3NnQjBFUVFSUWdCeWdDRUNBQlJodHFJQVkyQWdBZ0JrVU5BZ3NnQmlBSE5nSVlBa0FnQVNnQ0VDSUNSUTBBSUFZZ0FqWUNFQ0FDSUFZMkFoZ0xJQUVvQWhRaUFrVU5BU0FHUVJScUlBSTJBZ0FnQWlBR05nSVlEQUVMSUFNb0FnUWlBa0VEY1VFRFJ3MEFJQU1nQWtGK2NUWUNCRUVBSUFBMkFwRFFnSUFBSUFFZ0FHb2dBRFlDQUNBQklBQkJBWEkyQWdRUEN5QUJJQU5QRFFBZ0F5Z0NCQ0lDUVFGeFJRMEFBa0FDUUNBQ1FRSnhEUUFDUUNBRFFRQW9BcURRZ0lBQVJ3MEFRUUFnQVRZQ29OQ0FnQUJCQUVFQUtBS1UwSUNBQUNBQWFpSUFOZ0tVMElDQUFDQUJJQUJCQVhJMkFnUWdBVUVBS0FLYzBJQ0FBRWNOQTBFQVFRQTJBcERRZ0lBQVFRQkJBRFlDbk5DQWdBQVBDd0pBSUFOQkFDZ0NuTkNBZ0FCSERRQkJBQ0FCTmdLYzBJQ0FBRUVBUVFBb0FwRFFnSUFBSUFCcUlnQTJBcERRZ0lBQUlBRWdBRUVCY2pZQ0JDQUJJQUJxSUFBMkFnQVBDeUFDUVhoeElBQnFJUUFDUUFKQUlBSkIvd0ZMRFFBZ0F5Z0NDQ0lFSUFKQkEzWWlCVUVEZEVHdzBJQ0FBR29pQmtZYUFrQWdBeWdDRENJQ0lBUkhEUUJCQUVFQUtBS0kwSUNBQUVGK0lBVjNjVFlDaU5DQWdBQU1BZ3NnQWlBR1Job2dBaUFFTmdJSUlBUWdBallDREF3QkN5QURLQUlZSVFjQ1FBSkFJQU1vQWd3aUJpQURSZzBBSUFNb0FnZ2lBa0VBS0FLWTBJQ0FBRWthSUFZZ0FqWUNDQ0FDSUFZMkFnd01BUXNDUUNBRFFSUnFJZ0lvQWdBaUJBMEFJQU5CRUdvaUFpZ0NBQ0lFRFFCQkFDRUdEQUVMQTBBZ0FpRUZJQVFpQmtFVWFpSUNLQUlBSWdRTkFDQUdRUkJxSVFJZ0JpZ0NFQ0lFRFFBTElBVkJBRFlDQUFzZ0IwVU5BQUpBQWtBZ0F5QURLQUljSWdSQkFuUkJ1TktBZ0FCcUlnSW9BZ0JIRFFBZ0FpQUdOZ0lBSUFZTkFVRUFRUUFvQW96UWdJQUFRWDRnQkhkeE5nS00wSUNBQUF3Q0N5QUhRUkJCRkNBSEtBSVFJQU5HRzJvZ0JqWUNBQ0FHUlEwQkN5QUdJQWMyQWhnQ1FDQURLQUlRSWdKRkRRQWdCaUFDTmdJUUlBSWdCallDR0FzZ0F5Z0NGQ0lDUlEwQUlBWkJGR29nQWpZQ0FDQUNJQVkyQWhnTElBRWdBR29nQURZQ0FDQUJJQUJCQVhJMkFnUWdBVUVBS0FLYzBJQ0FBRWNOQVVFQUlBQTJBcERRZ0lBQUR3c2dBeUFDUVg1eE5nSUVJQUVnQUdvZ0FEWUNBQ0FCSUFCQkFYSTJBZ1FMQWtBZ0FFSC9BVXNOQUNBQVFYaHhRYkRRZ0lBQWFpRUNBa0FDUUVFQUtBS0kwSUNBQUNJRVFRRWdBRUVEZG5RaUFIRU5BRUVBSUFRZ0FISTJBb2pRZ0lBQUlBSWhBQXdCQ3lBQ0tBSUlJUUFMSUFBZ0FUWUNEQ0FDSUFFMkFnZ2dBU0FDTmdJTUlBRWdBRFlDQ0E4TFFSOGhBZ0pBSUFCQi8vLy9CMHNOQUNBQVFRaDJJZ0lnQWtHQS9qOXFRUkIyUVFoeElnSjBJZ1FnQkVHQTRCOXFRUkIyUVFSeElnUjBJZ1lnQmtHQWdBOXFRUkIyUVFKeElnWjBRUTkySUFJZ0JISWdCbkpySWdKQkFYUWdBQ0FDUVJWcWRrRUJjWEpCSEdvaEFnc2dBU0FDTmdJY0lBRkNBRGNDRUNBQ1FRSjBRYmpTZ0lBQWFpRUVBa0FDUUVFQUtBS00wSUNBQUNJR1FRRWdBblFpQTNFTkFDQUVJQUUyQWdCQkFDQUdJQU55TmdLTTBJQ0FBQ0FCSUFRMkFoZ2dBU0FCTmdJSUlBRWdBVFlDREF3QkN5QUFRUUJCR1NBQ1FRRjJheUFDUVI5R0czUWhBaUFFS0FJQUlRWUNRQU5BSUFZaUJDZ0NCRUY0Y1NBQVJnMEJJQUpCSFhZaEJpQUNRUUYwSVFJZ0JDQUdRUVJ4YWtFUWFpSURLQUlBSWdZTkFBc2dBeUFCTmdJQUlBRWdCRFlDR0NBQklBRTJBZ3dnQVNBQk5nSUlEQUVMSUFRb0FnZ2lBQ0FCTmdJTUlBUWdBVFlDQ0NBQlFRQTJBaGdnQVNBRU5nSU1JQUVnQURZQ0NBdEJBRUVBS0FLbzBJQ0FBRUYvYWlJQlFYOGdBUnMyQXFqUWdJQUFDd3NFQUFBQUMwNEFBa0FnQUEwQVB3QkJFSFFQQ3dKQUlBQkIvLzhEY1EwQUlBQkJmMHdOQUFKQUlBQkJFSFpBQUNJQVFYOUhEUUJCQUVFd05nTDQwNENBQUVGL0R3c2dBRUVRZEE4TEVNcUFnSUFBQUF2eUFnSURmd0YrQWtBZ0FrVU5BQ0FBSUFFNkFBQWdBaUFBYWlJRFFYOXFJQUU2QUFBZ0FrRURTUTBBSUFBZ0FUb0FBaUFBSUFFNkFBRWdBMEY5YWlBQk9nQUFJQU5CZm1vZ0FUb0FBQ0FDUVFkSkRRQWdBQ0FCT2dBRElBTkJmR29nQVRvQUFDQUNRUWxKRFFBZ0FFRUFJQUJyUVFOeElnUnFJZ01nQVVIL0FYRkJnWUtFQ0d3aUFUWUNBQ0FESUFJZ0JHdEJmSEVpQkdvaUFrRjhhaUFCTmdJQUlBUkJDVWtOQUNBRElBRTJBZ2dnQXlBQk5nSUVJQUpCZUdvZ0FUWUNBQ0FDUVhScUlBRTJBZ0FnQkVFWlNRMEFJQU1nQVRZQ0dDQURJQUUyQWhRZ0F5QUJOZ0lRSUFNZ0FUWUNEQ0FDUVhCcUlBRTJBZ0FnQWtGc2FpQUJOZ0lBSUFKQmFHb2dBVFlDQUNBQ1FXUnFJQUUyQWdBZ0JDQURRUVJ4UVJoeUlnVnJJZ0pCSUVrTkFDQUJyVUtCZ0lDQUVINGhCaUFESUFWcUlRRURRQ0FCSUFZM0F4Z2dBU0FHTndNUUlBRWdCamNEQ0NBQklBWTNBd0FnQVVFZ2FpRUJJQUpCWUdvaUFrRWZTdzBBQ3dzZ0FBc0xqa2dCQUVHQUNBdUdTQUVBQUFBQ0FBQUFBd0FBQUFBQUFBQUFBQUFBQkFBQUFBVUFBQUFBQUFBQUFBQUFBQVlBQUFBSEFBQUFDQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBU1c1MllXeHBaQ0JqYUdGeUlHbHVJSFZ5YkNCeGRXVnllUUJUY0dGdUlHTmhiR3hpWVdOcklHVnljbTl5SUdsdUlHOXVYMkp2WkhrQVEyOXVkR1Z1ZEMxTVpXNW5kR2dnYjNabGNtWnNiM2NBUTJoMWJtc2djMmw2WlNCdmRtVnlabXh2ZHdCU1pYTndiMjV6WlNCdmRtVnlabXh2ZHdCSmJuWmhiR2xrSUcxbGRHaHZaQ0JtYjNJZ1NGUlVVQzk0TG5nZ2NtVnhkV1Z6ZEFCSmJuWmhiR2xrSUcxbGRHaHZaQ0JtYjNJZ1VsUlRVQzk0TG5nZ2NtVnhkV1Z6ZEFCRmVIQmxZM1JsWkNCVFQxVlNRMFVnYldWMGFHOWtJR1p2Y2lCSlEwVXZlQzU0SUhKbGNYVmxjM1FBU1c1MllXeHBaQ0JqYUdGeUlHbHVJSFZ5YkNCbWNtRm5iV1Z1ZENCemRHRnlkQUJGZUhCbFkzUmxaQ0JrYjNRQVUzQmhiaUJqWVd4c1ltRmpheUJsY25KdmNpQnBiaUJ2Ymw5emRHRjBkWE1BU1c1MllXeHBaQ0J5WlhOd2IyNXpaU0J6ZEdGMGRYTUFTVzUyWVd4cFpDQmphR0Z5WVdOMFpYSWdhVzRnWTJoMWJtc2daWGgwWlc1emFXOXVjd0JWYzJWeUlHTmhiR3hpWVdOcklHVnljbTl5QUdCdmJsOXlaWE5sZEdBZ1kyRnNiR0poWTJzZ1pYSnliM0lBWUc5dVgyTm9kVzVyWDJobFlXUmxjbUFnWTJGc2JHSmhZMnNnWlhKeWIzSUFZRzl1WDIxbGMzTmhaMlZmWW1WbmFXNWdJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDlqYUhWdWExOWxlSFJsYm5OcGIyNWZkbUZzZFdWZ0lHTmhiR3hpWVdOcklHVnljbTl5QUdCdmJsOXpkR0YwZFhOZlkyOXRjR3hsZEdWZ0lHTmhiR3hpWVdOcklHVnljbTl5QUdCdmJsOTJaWEp6YVc5dVgyTnZiWEJzWlhSbFlDQmpZV3hzWW1GamF5Qmxjbkp2Y2dCZ2IyNWZkWEpzWDJOdmJYQnNaWFJsWUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZlkyaDFibXRmWTI5dGNHeGxkR1ZnSUdOaGJHeGlZV05ySUdWeWNtOXlBR0J2Ymw5b1pXRmtaWEpmZG1Gc2RXVmZZMjl0Y0d4bGRHVmdJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDl0WlhOellXZGxYMk52YlhCc1pYUmxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmYldWMGFHOWtYMk52YlhCc1pYUmxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmYUdWaFpHVnlYMlpwWld4a1gyTnZiWEJzWlhSbFlDQmpZV3hzWW1GamF5Qmxjbkp2Y2dCZ2IyNWZZMmgxYm10ZlpYaDBaVzV6YVc5dVgyNWhiV1ZnSUdOaGJHeGlZV05ySUdWeWNtOXlBRlZ1Wlhod1pXTjBaV1FnWTJoaGNpQnBiaUIxY213Z2MyVnlkbVZ5QUVsdWRtRnNhV1FnYUdWaFpHVnlJSFpoYkhWbElHTm9ZWElBU1c1MllXeHBaQ0JvWldGa1pYSWdabWxsYkdRZ1kyaGhjZ0JUY0dGdUlHTmhiR3hpWVdOcklHVnljbTl5SUdsdUlHOXVYM1psY25OcGIyNEFTVzUyWVd4cFpDQnRhVzV2Y2lCMlpYSnphVzl1QUVsdWRtRnNhV1FnYldGcWIzSWdkbVZ5YzJsdmJnQkZlSEJsWTNSbFpDQnpjR0ZqWlNCaFpuUmxjaUIyWlhKemFXOXVBRVY0Y0dWamRHVmtJRU5TVEVZZ1lXWjBaWElnZG1WeWMybHZiZ0JKYm5aaGJHbGtJRWhVVkZBZ2RtVnljMmx2YmdCSmJuWmhiR2xrSUdobFlXUmxjaUIwYjJ0bGJnQlRjR0Z1SUdOaGJHeGlZV05ySUdWeWNtOXlJR2x1SUc5dVgzVnliQUJKYm5aaGJHbGtJR05vWVhKaFkzUmxjbk1nYVc0Z2RYSnNBRlZ1Wlhod1pXTjBaV1FnYzNSaGNuUWdZMmhoY2lCcGJpQjFjbXdBUkc5MVlteGxJRUFnYVc0Z2RYSnNBRVZ0Y0hSNUlFTnZiblJsYm5RdFRHVnVaM1JvQUVsdWRtRnNhV1FnWTJoaGNtRmpkR1Z5SUdsdUlFTnZiblJsYm5RdFRHVnVaM1JvQUVSMWNHeHBZMkYwWlNCRGIyNTBaVzUwTFV4bGJtZDBhQUJKYm5aaGJHbGtJR05vWVhJZ2FXNGdkWEpzSUhCaGRHZ0FRMjl1ZEdWdWRDMU1aVzVuZEdnZ1kyRnVKM1FnWW1VZ2NISmxjMlZ1ZENCM2FYUm9JRlJ5WVc1elptVnlMVVZ1WTI5a2FXNW5BRWx1ZG1Gc2FXUWdZMmhoY21GamRHVnlJR2x1SUdOb2RXNXJJSE5wZW1VQVUzQmhiaUJqWVd4c1ltRmpheUJsY25KdmNpQnBiaUJ2Ymw5b1pXRmtaWEpmZG1Gc2RXVUFVM0JoYmlCallXeHNZbUZqYXlCbGNuSnZjaUJwYmlCdmJsOWphSFZ1YTE5bGVIUmxibk5wYjI1ZmRtRnNkV1VBU1c1MllXeHBaQ0JqYUdGeVlXTjBaWElnYVc0Z1kyaDFibXNnWlhoMFpXNXphVzl1Y3lCMllXeDFaUUJOYVhOemFXNW5JR1Y0Y0dWamRHVmtJRXhHSUdGbWRHVnlJR2hsWVdSbGNpQjJZV3gxWlFCSmJuWmhiR2xrSUdCVWNtRnVjMlpsY2kxRmJtTnZaR2x1WjJBZ2FHVmhaR1Z5SUhaaGJIVmxBRWx1ZG1Gc2FXUWdZMmhoY21GamRHVnlJR2x1SUdOb2RXNXJJR1Y0ZEdWdWMybHZibk1nY1hWdmRHVWdkbUZzZFdVQVNXNTJZV3hwWkNCamFHRnlZV04wWlhJZ2FXNGdZMmgxYm1zZ1pYaDBaVzV6YVc5dWN5QnhkVzkwWldRZ2RtRnNkV1VBVUdGMWMyVmtJR0o1SUc5dVgyaGxZV1JsY25OZlkyOXRjR3hsZEdVQVNXNTJZV3hwWkNCRlQwWWdjM1JoZEdVQWIyNWZjbVZ6WlhRZ2NHRjFjMlVBYjI1ZlkyaDFibXRmYUdWaFpHVnlJSEJoZFhObEFHOXVYMjFsYzNOaFoyVmZZbVZuYVc0Z2NHRjFjMlVBYjI1ZlkyaDFibXRmWlhoMFpXNXphVzl1WDNaaGJIVmxJSEJoZFhObEFHOXVYM04wWVhSMWMxOWpiMjF3YkdWMFpTQndZWFZ6WlFCdmJsOTJaWEp6YVc5dVgyTnZiWEJzWlhSbElIQmhkWE5sQUc5dVgzVnliRjlqYjIxd2JHVjBaU0J3WVhWelpRQnZibDlqYUhWdWExOWpiMjF3YkdWMFpTQndZWFZ6WlFCdmJsOW9aV0ZrWlhKZmRtRnNkV1ZmWTI5dGNHeGxkR1VnY0dGMWMyVUFiMjVmYldWemMyRm5aVjlqYjIxd2JHVjBaU0J3WVhWelpRQnZibDl0WlhSb2IyUmZZMjl0Y0d4bGRHVWdjR0YxYzJVQWIyNWZhR1ZoWkdWeVgyWnBaV3hrWDJOdmJYQnNaWFJsSUhCaGRYTmxBRzl1WDJOb2RXNXJYMlY0ZEdWdWMybHZibDl1WVcxbElIQmhkWE5sQUZWdVpYaHdaV04wWldRZ2MzQmhZMlVnWVdaMFpYSWdjM1JoY25RZ2JHbHVaUUJUY0dGdUlHTmhiR3hpWVdOcklHVnljbTl5SUdsdUlHOXVYMk5vZFc1clgyVjRkR1Z1YzJsdmJsOXVZVzFsQUVsdWRtRnNhV1FnWTJoaGNtRmpkR1Z5SUdsdUlHTm9kVzVySUdWNGRHVnVjMmx2Ym5NZ2JtRnRaUUJRWVhWelpTQnZiaUJEVDA1T1JVTlVMMVZ3WjNKaFpHVUFVR0YxYzJVZ2IyNGdVRkpKTDFWd1ozSmhaR1VBUlhod1pXTjBaV1FnU0ZSVVVDOHlJRU52Ym01bFkzUnBiMjRnVUhKbFptRmpaUUJUY0dGdUlHTmhiR3hpWVdOcklHVnljbTl5SUdsdUlHOXVYMjFsZEdodlpBQkZlSEJsWTNSbFpDQnpjR0ZqWlNCaFpuUmxjaUJ0WlhSb2IyUUFVM0JoYmlCallXeHNZbUZqYXlCbGNuSnZjaUJwYmlCdmJsOW9aV0ZrWlhKZlptbGxiR1FBVUdGMWMyVmtBRWx1ZG1Gc2FXUWdkMjl5WkNCbGJtTnZkVzUwWlhKbFpBQkpiblpoYkdsa0lHMWxkR2h2WkNCbGJtTnZkVzUwWlhKbFpBQlZibVY0Y0dWamRHVmtJR05vWVhJZ2FXNGdkWEpzSUhOamFHVnRZUUJTWlhGMVpYTjBJR2hoY3lCcGJuWmhiR2xrSUdCVWNtRnVjMlpsY2kxRmJtTnZaR2x1WjJBQVUxZEpWRU5JWDFCU1QxaFpBRlZUUlY5UVVrOVlXUUJOUzBGRFZFbFdTVlJaQUZWT1VGSlBRMFZUVTBGQ1RFVmZSVTVVU1ZSWkFFTlBVRmtBVFU5V1JVUmZVRVZTVFVGT1JVNVVURmtBVkU5UFgwVkJVa3haQUU1UFZFbEdXUUJHUVVsTVJVUmZSRVZRUlU1RVJVNURXUUJDUVVSZlIwRlVSVmRCV1FCUVRFRlpBRkJWVkFCRFNFVkRTMDlWVkFCSFFWUkZWMEZaWDFSSlRVVlBWVlFBVWtWUlZVVlRWRjlVU1UxRlQxVlVBRTVGVkZkUFVrdGZRMDlPVGtWRFZGOVVTVTFGVDFWVUFFTlBUazVGUTFSSlQwNWZWRWxOUlU5VlZBQk1UMGRKVGw5VVNVMUZUMVZVQUU1RlZGZFBVa3RmVWtWQlJGOVVTVTFGVDFWVUFGQlBVMVFBVFVsVFJFbFNSVU5VUlVSZlVrVlJWVVZUVkFCRFRFbEZUbFJmUTB4UFUwVkVYMUpGVVZWRlUxUUFRMHhKUlU1VVgwTk1UMU5GUkY5TVQwRkVYMEpCVEVGT1EwVkVYMUpGVVZWRlUxUUFRa0ZFWDFKRlVWVkZVMVFBU0ZSVVVGOVNSVkZWUlZOVVgxTkZUbFJmVkU5ZlNGUlVVRk5mVUU5U1ZBQlNSVkJQVWxRQVNVMWZRVjlVUlVGUVQxUUFVa1ZUUlZSZlEwOU9WRVZPVkFCT1QxOURUMDVVUlU1VUFGQkJVbFJKUVV4ZlEwOU9WRVZPVkFCSVVFVmZTVTVXUVV4SlJGOURUMDVUVkVGT1ZBQklVRVZmUTBKZlVrVlRSVlFBUjBWVUFFaFFSVjlUVkZKSlExUUFRMDlPUmt4SlExUUFWRVZOVUU5U1FWSlpYMUpGUkVsU1JVTlVBRkJGVWsxQlRrVk9WRjlTUlVSSlVrVkRWQUJEVDA1T1JVTlVBRTFWVEZSSlgxTlVRVlJWVXdCSVVFVmZTVTVXUVV4SlJGOVRWRUZVVlZNQVZFOVBYMDFCVGxsZlVrVlJWVVZUVkZNQVJVRlNURmxmU0VsT1ZGTUFWVTVCVmtGSlRFRkNURVZmUms5U1gweEZSMEZNWDFKRlFWTlBUbE1BVDFCVVNVOU9Vd0JUVjBsVVEwaEpUa2RmVUZKUFZFOURUMHhUQUZaQlVrbEJUbFJmUVV4VFQxOU9SVWRQVkVsQlZFVlRBRTFWVEZSSlVFeEZYME5JVDBsRFJWTUFTVTVVUlZKT1FVeGZVMFZTVmtWU1gwVlNVazlTQUZkRlFsOVRSVkpXUlZKZlZVNUxUazlYVGw5RlVsSlBVZ0JTUVVsTVIxVk9YMFZTVWs5U0FFbEVSVTVVU1ZSWlgxQlNUMVpKUkVWU1gwRlZWRWhGVGxSSlEwRlVTVTlPWDBWU1VrOVNBRk5UVEY5RFJWSlVTVVpKUTBGVVJWOUZVbEpQVWdCSlRsWkJURWxFWDFoZlJrOVNWMEZTUkVWRVgwWlBVZ0JUUlZSZlVFRlNRVTFGVkVWU0FFZEZWRjlRUVZKQlRVVlVSVklBU0ZCRlgxVlRSVklBVTBWRlgwOVVTRVZTQUVoUVJWOURRbDlEU0ZWT1MxOUlSVUZFUlZJQVRVdERRVXhGVGtSQlVnQlRSVlJWVUFCWFJVSmZVMFZTVmtWU1gwbFRYMFJQVjA0QVZFVkJVa1JQVjA0QVNGQkZYME5NVDFORlJGOURUMDVPUlVOVVNVOU9BRWhGVlZKSlUxUkpRMTlGV0ZCSlVrRlVTVTlPQUVSSlUwTlBUazVGUTFSRlJGOVBVRVZTUVZSSlQwNEFUazlPWDBGVlZFaFBVa2xVUVZSSlZrVmZTVTVHVDFKTlFWUkpUMDRBU0ZCRlgwbE9Wa0ZNU1VSZlZrVlNVMGxQVGdCSVVFVmZRMEpmVFVWVFUwRkhSVjlDUlVkSlRnQlRTVlJGWDBsVFgwWlNUMXBGVGdCSVVFVmZTVTVXUVV4SlJGOUlSVUZFUlZKZlZFOUxSVTRBU1U1V1FVeEpSRjlVVDB0RlRnQkdUMUpDU1VSRVJVNEFSVTVJUVU1RFJWOVpUMVZTWDBOQlRFMEFTRkJGWDBsT1ZrRk1TVVJmVlZKTUFFSk1UME5MUlVSZlFsbGZVRUZTUlU1VVFVeGZRMDlPVkZKUFRBQk5TME5QVEFCQlEwd0FTRkJGWDBsT1ZFVlNUa0ZNQUZKRlVWVkZVMVJmU0VWQlJFVlNYMFpKUlV4RVUxOVVUMDlmVEVGU1IwVmZWVTVQUmtaSlEwbEJUQUJJVUVWZlQwc0FWVTVNU1U1TEFGVk9URTlEU3dCUVVra0FVa1ZVVWxsZlYwbFVTQUJJVUVWZlNVNVdRVXhKUkY5RFQwNVVSVTVVWDB4RlRrZFVTQUJJVUVWZlZVNUZXRkJGUTFSRlJGOURUMDVVUlU1VVgweEZUa2RVU0FCR1RGVlRTQUJRVWs5UVVFRlVRMGdBVFMxVFJVRlNRMGdBVlZKSlgxUlBUMTlNVDA1SEFGQlNUME5GVTFOSlRrY0FUVWxUUTBWTVRFRk9SVTlWVTE5UVJWSlRTVk5VUlU1VVgxZEJVazVKVGtjQVRVbFRRMFZNVEVGT1JVOVZVMTlYUVZKT1NVNUhBRWhRUlY5SlRsWkJURWxFWDFSU1FVNVRSa1ZTWDBWT1EwOUVTVTVIQUVWNGNHVmpkR1ZrSUVOU1RFWUFTRkJGWDBsT1ZrRk1TVVJmUTBoVlRrdGZVMGxhUlFCTlQxWkZBRU5QVGxSSlRsVkZBRWhRUlY5RFFsOVRWRUZVVlZOZlEwOU5VRXhGVkVVQVNGQkZYME5DWDBoRlFVUkZVbE5mUTA5TlVFeEZWRVVBU0ZCRlgwTkNYMVpGVWxOSlQwNWZRMDlOVUV4RlZFVUFTRkJGWDBOQ1gxVlNURjlEVDAxUVRFVlVSUUJJVUVWZlEwSmZRMGhWVGt0ZlEwOU5VRXhGVkVVQVNGQkZYME5DWDBoRlFVUkZVbDlXUVV4VlJWOURUMDFRVEVWVVJRQklVRVZmUTBKZlEwaFZUa3RmUlZoVVJVNVRTVTlPWDFaQlRGVkZYME5QVFZCTVJWUkZBRWhRUlY5RFFsOURTRlZPUzE5RldGUkZUbE5KVDA1ZlRrRk5SVjlEVDAxUVRFVlVSUUJJVUVWZlEwSmZUVVZUVTBGSFJWOURUMDFRVEVWVVJRQklVRVZmUTBKZlRVVlVTRTlFWDBOUFRWQk1SVlJGQUVoUVJWOURRbDlJUlVGRVJWSmZSa2xGVEVSZlEwOU5VRXhGVkVVQVJFVk1SVlJGQUVoUVJWOUpUbFpCVEVsRVgwVlBSbDlUVkVGVVJRQkpUbFpCVEVsRVgxTlRURjlEUlZKVVNVWkpRMEZVUlFCUVFWVlRSUUJPVDE5U1JWTlFUMDVUUlFCVlRsTlZVRkJQVWxSRlJGOU5SVVJKUVY5VVdWQkZBRWRQVGtVQVRrOVVYMEZEUTBWUVZFRkNURVVBVTBWU1ZrbERSVjlWVGtGV1FVbE1RVUpNUlFCU1FVNUhSVjlPVDFSZlUwRlVTVk5HU1VGQ1RFVUFUMUpKUjBsT1gwbFRYMVZPVWtWQlEwaEJRa3hGQUZKRlUxQlBUbE5GWDBsVFgxTlVRVXhGQUZCVlVrZEZBRTFGVWtkRkFGSkZVVlZGVTFSZlNFVkJSRVZTWDBaSlJVeEVVMTlVVDA5ZlRFRlNSMFVBVWtWUlZVVlRWRjlJUlVGRVJWSmZWRTlQWDB4QlVrZEZBRkJCV1V4UFFVUmZWRTlQWDB4QlVrZEZBRWxPVTFWR1JrbERTVVZPVkY5VFZFOVNRVWRGQUVoUVJWOVFRVlZUUlVSZlZWQkhVa0ZFUlFCSVVFVmZVRUZWVTBWRVgwZ3lYMVZRUjFKQlJFVUFVMDlWVWtORkFFRk9UazlWVGtORkFGUlNRVU5GQUVoUVJWOVZUa1ZZVUVWRFZFVkVYMU5RUVVORkFFUkZVME5TU1VKRkFGVk9VMVZDVTBOU1NVSkZBRkpGUTA5U1JBQklVRVZmU1U1V1FVeEpSRjlOUlZSSVQwUUFUazlVWDBaUFZVNUVBRkJTVDFCR1NVNUVBRlZPUWtsT1JBQlNSVUpKVGtRQVZVNUJWVlJJVDFKSldrVkVBRTFGVkVoUFJGOU9UMVJmUVV4TVQxZEZSQUJJVkZSUVgxWkZVbE5KVDA1ZlRrOVVYMU5WVUZCUFVsUkZSQUJCVEZKRlFVUlpYMUpGVUU5U1ZFVkVBRUZEUTBWUVZFVkVBRTVQVkY5SlRWQk1SVTFGVGxSRlJBQk1UMDlRWDBSRlZFVkRWRVZFQUVoUVJWOURVbDlGV0ZCRlExUkZSQUJJVUVWZlRFWmZSVmhRUlVOVVJVUUFRMUpGUVZSRlJBQkpUVjlWVTBWRUFFaFFSVjlRUVZWVFJVUUFWRWxOUlU5VlZGOVBRME5WVWtWRUFGQkJXVTFGVGxSZlVrVlJWVWxTUlVRQVVGSkZRMDlPUkVsVVNVOU9YMUpGVVZWSlVrVkVBRkJTVDFoWlgwRlZWRWhGVGxSSlEwRlVTVTlPWDFKRlVWVkpVa1ZFQUU1RlZGZFBVa3RmUVZWVVNFVk9WRWxEUVZSSlQwNWZVa1ZSVlVsU1JVUUFURVZPUjFSSVgxSkZVVlZKVWtWRUFGTlRURjlEUlZKVVNVWkpRMEZVUlY5U1JWRlZTVkpGUkFCVlVFZFNRVVJGWDFKRlVWVkpVa1ZFQUZCQlIwVmZSVmhRU1ZKRlJBQlFVa1ZEVDA1RVNWUkpUMDVmUmtGSlRFVkVBRVZZVUVWRFZFRlVTVTlPWDBaQlNVeEZSQUJTUlZaQlRFbEVRVlJKVDA1ZlJrRkpURVZFQUZOVFRGOUlRVTVFVTBoQlMwVmZSa0ZKVEVWRUFFeFBRMHRGUkFCVVVrRk9VMFpQVWsxQlZFbFBUbDlCVUZCTVNVVkVBRTVQVkY5TlQwUkpSa2xGUkFCT1QxUmZSVmhVUlU1RVJVUUFRa0ZPUkZkSlJGUklYMHhKVFVsVVgwVllRMFZGUkVWRUFGTkpWRVZmU1ZOZlQxWkZVa3hQUVVSRlJBQklSVUZFQUVWNGNHVmpkR1ZrSUVoVVZGQXZBQUJlRXdBQUpoTUFBREFRQUFEd0Z3QUFuUk1BQUJVU0FBQTVGd0FBOEJJQUFBb1FBQUIxRWdBQXJSSUFBSUlUQUFCUEZBQUFmeEFBQUtBVkFBQWpGQUFBaVJJQUFJc1VBQUJORlFBQTFCRUFBTThVQUFBUUdBQUF5UllBQU53V0FBREJFUUFBNEJjQUFMc1VBQUIwRkFBQWZCVUFBT1VVQUFBSUZ3QUFIeEFBQUdVVkFBQ2pGQUFBS0JVQUFBSVZBQUNaRlFBQUxCQUFBSXNaQUFCUER3QUExQTRBQUdvUUFBRE9FQUFBQWhjQUFJa09BQUJ1RXdBQUhCTUFBR1lVQUFCV0Z3QUF3Uk1BQU0wVEFBQnNFd0FBYUJjQUFHWVhBQUJmRndBQUloTUFBTTRQQUFCcERnQUEyQTRBQUdNV0FBRExFd0FBcWc0QUFDZ1hBQUFtRndBQXhSTUFBRjBXQUFEb0VRQUFaeE1BQUdVVEFBRHlGZ0FBY3hNQUFCMFhBQUQ1RmdBQTh4RUFBTThPQUFET0ZRQUFEQklBQUxNUkFBQ2xFUUFBWVJBQUFESVhBQUM3RXdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVCQWdFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBQUFBQUFBQUFBQUFBQUFBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFnTUNBZ0lDQWdBQUFnSUFBZ0lBQWdJQ0FnSUNBZ0lDQWdBRUFBQUFBQUFDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0FBQUFJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FBSUFBZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUlBQWdJQ0FnSUFBQUlDQUFJQ0FBSUNBZ0lDQWdJQ0FnSUFBd0FFQUFBQUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQUFBQUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0FDQUFJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQnNiM05sWldWd0xXRnNhWFpsQUFBQUFBQUFBQUFBQUFBQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFBQUFBQUFBQUFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRRUJBUUVCQVFFQkFRRUJBZ0VCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFGamFIVnVhMlZrQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJBUUFCQVFFQkFRQUFBUUVBQVFFQUFRRUJBUUVCQVFFQkFRQUFBQUFBQUFBQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQUFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBQUVBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFHVmpkR2x2Ym1WdWRDMXNaVzVuZEdodmJuSnZlSGt0WTI5dWJtVmpkR2x2YmdBQUFBQUFBQUFBQUFBQUFBQUFBSEpoYm5ObVpYSXRaVzVqYjJScGJtZHdaM0poWkdVTkNnMEtEUXBUVFEwS0RRcFVWRkF2UTBVdlZGTlFMd0FBQUFBQUFBQUFBQUFBQUFFQ0FBRURBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBQUFBQUFBQUFBQUJBZ0FCQXdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQkFRVUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFBQUFBQUFBQUFBQVFBQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUVBQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUFBQUFBQUFBQUFBQUJBQUFDQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQXdRQUFBUUVCQVFFQkFRRUJBUUVCUVFFQkFRRUJBUUVCQVFFQkFBRUFBWUhCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQVFBQkFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFBQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFnQUFBQUFBQUFNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQUFBQUFBQUFBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRUFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQUFBQUFBQUFBQUFBQWdBQUFBQUNBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3QUFBQUFBQUFNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRTVQVlU1RFJVVkRTMDlWVkU1RlExUkZWRVZEVWtsQ1JVeFZVMGhGVkVWQlJGTkZRVkpEU0ZKSFJVTlVTVlpKVkZsTVJVNUVRVkpXUlU5VVNVWlpVRlJKVDA1VFEwaFRSVUZaVTFSQlZFTklSMFZQVWtSSlVrVkRWRTlTVkZKRFNGQkJVa0ZOUlZSRlVsVlNRMFZDVTBOU1NVSkZRVkpFVDFkT1FVTkZTVTVFVGt0RFMxVkNVME5TU1VKRlNGUlVVQzlCUkZSUUx3PT0nXG4iLAogICAgIi8vIEB0cy1jaGVja1xuXG4ndXNlIHN0cmljdCdcblxuLyogZ2xvYmFsIFdlYkFzc2VtYmx5ICovXG5cbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCBuZXQgPSByZXF1aXJlKCduZXQnKVxuY29uc3QgaHR0cCA9IHJlcXVpcmUoJ2h0dHAnKVxuY29uc3QgeyBwaXBlbGluZSB9ID0gcmVxdWlyZSgnc3RyZWFtJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuL2NvcmUvdXRpbCcpXG5jb25zdCB0aW1lcnMgPSByZXF1aXJlKCcuL3RpbWVycycpXG5jb25zdCBSZXF1ZXN0ID0gcmVxdWlyZSgnLi9jb3JlL3JlcXVlc3QnKVxuY29uc3QgRGlzcGF0Y2hlckJhc2UgPSByZXF1aXJlKCcuL2Rpc3BhdGNoZXItYmFzZScpXG5jb25zdCB7XG4gIFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcixcbiAgUmVzcG9uc2VDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcixcbiAgSW52YWxpZEFyZ3VtZW50RXJyb3IsXG4gIFJlcXVlc3RBYm9ydGVkRXJyb3IsXG4gIEhlYWRlcnNUaW1lb3V0RXJyb3IsXG4gIEhlYWRlcnNPdmVyZmxvd0Vycm9yLFxuICBTb2NrZXRFcnJvcixcbiAgSW5mb3JtYXRpb25hbEVycm9yLFxuICBCb2R5VGltZW91dEVycm9yLFxuICBIVFRQUGFyc2VyRXJyb3IsXG4gIFJlc3BvbnNlRXhjZWVkZWRNYXhTaXplRXJyb3IsXG4gIENsaWVudERlc3Ryb3llZEVycm9yXG59ID0gcmVxdWlyZSgnLi9jb3JlL2Vycm9ycycpXG5jb25zdCBidWlsZENvbm5lY3RvciA9IHJlcXVpcmUoJy4vY29yZS9jb25uZWN0JylcbmNvbnN0IHtcbiAga1VybCxcbiAga1Jlc2V0LFxuICBrU2VydmVyTmFtZSxcbiAga0NsaWVudCxcbiAga0J1c3ksXG4gIGtQYXJzZXIsXG4gIGtDb25uZWN0LFxuICBrQmxvY2tpbmcsXG4gIGtSZXN1bWluZyxcbiAga1J1bm5pbmcsXG4gIGtQZW5kaW5nLFxuICBrU2l6ZSxcbiAga1dyaXRpbmcsXG4gIGtRdWV1ZSxcbiAga0Nvbm5lY3RlZCxcbiAga0Nvbm5lY3RpbmcsXG4gIGtOZWVkRHJhaW4sXG4gIGtOb1JlZixcbiAga0tlZXBBbGl2ZURlZmF1bHRUaW1lb3V0LFxuICBrSG9zdEhlYWRlcixcbiAga1BlbmRpbmdJZHgsXG4gIGtSdW5uaW5nSWR4LFxuICBrRXJyb3IsXG4gIGtQaXBlbGluaW5nLFxuICBrU29ja2V0LFxuICBrS2VlcEFsaXZlVGltZW91dFZhbHVlLFxuICBrTWF4SGVhZGVyc1NpemUsXG4gIGtLZWVwQWxpdmVNYXhUaW1lb3V0LFxuICBrS2VlcEFsaXZlVGltZW91dFRocmVzaG9sZCxcbiAga0hlYWRlcnNUaW1lb3V0LFxuICBrQm9keVRpbWVvdXQsXG4gIGtTdHJpY3RDb250ZW50TGVuZ3RoLFxuICBrQ29ubmVjdG9yLFxuICBrTWF4UmVkaXJlY3Rpb25zLFxuICBrTWF4UmVxdWVzdHMsXG4gIGtDb3VudGVyLFxuICBrQ2xvc2UsXG4gIGtEZXN0cm95LFxuICBrRGlzcGF0Y2gsXG4gIGtJbnRlcmNlcHRvcnMsXG4gIGtMb2NhbEFkZHJlc3MsXG4gIGtNYXhSZXNwb25zZVNpemUsXG4gIGtIVFRQQ29ublZlcnNpb24sXG4gIC8vIEhUVFAyXG4gIGtIb3N0LFxuICBrSFRUUDJTZXNzaW9uLFxuICBrSFRUUDJTZXNzaW9uU3RhdGUsXG4gIGtIVFRQMkJ1aWxkUmVxdWVzdCxcbiAga0hUVFAyQ29weUhlYWRlcnMsXG4gIGtIVFRQMUJ1aWxkUmVxdWVzdFxufSA9IHJlcXVpcmUoJy4vY29yZS9zeW1ib2xzJylcblxuLyoqIEB0eXBlIHtpbXBvcnQoJ2h0dHAyJyl9ICovXG5sZXQgaHR0cDJcbnRyeSB7XG4gIGh0dHAyID0gcmVxdWlyZSgnaHR0cDInKVxufSBjYXRjaCB7XG4gIC8vIEB0cy1pZ25vcmVcbiAgaHR0cDIgPSB7IGNvbnN0YW50czoge30gfVxufVxuXG5jb25zdCB7XG4gIGNvbnN0YW50czoge1xuICAgIEhUVFAyX0hFQURFUl9BVVRIT1JJVFksXG4gICAgSFRUUDJfSEVBREVSX01FVEhPRCxcbiAgICBIVFRQMl9IRUFERVJfUEFUSCxcbiAgICBIVFRQMl9IRUFERVJfU0NIRU1FLFxuICAgIEhUVFAyX0hFQURFUl9DT05URU5UX0xFTkdUSCxcbiAgICBIVFRQMl9IRUFERVJfRVhQRUNULFxuICAgIEhUVFAyX0hFQURFUl9TVEFUVVNcbiAgfVxufSA9IGh0dHAyXG5cbi8vIEV4cGVyaW1lbnRhbFxubGV0IGgyRXhwZXJpbWVudGFsV2FybmVkID0gZmFsc2VcblxuY29uc3QgRmFzdEJ1ZmZlciA9IEJ1ZmZlcltTeW1ib2wuc3BlY2llc11cblxuY29uc3Qga0Nsb3NlZFJlc29sdmUgPSBTeW1ib2woJ2tDbG9zZWRSZXNvbHZlJylcblxuY29uc3QgY2hhbm5lbHMgPSB7fVxuXG50cnkge1xuICBjb25zdCBkaWFnbm9zdGljc0NoYW5uZWwgPSByZXF1aXJlKCdkaWFnbm9zdGljc19jaGFubmVsJylcbiAgY2hhbm5lbHMuc2VuZEhlYWRlcnMgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOmNsaWVudDpzZW5kSGVhZGVycycpXG4gIGNoYW5uZWxzLmJlZm9yZUNvbm5lY3QgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOmNsaWVudDpiZWZvcmVDb25uZWN0JylcbiAgY2hhbm5lbHMuY29ubmVjdEVycm9yID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpjbGllbnQ6Y29ubmVjdEVycm9yJylcbiAgY2hhbm5lbHMuY29ubmVjdGVkID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpjbGllbnQ6Y29ubmVjdGVkJylcbn0gY2F0Y2gge1xuICBjaGFubmVscy5zZW5kSGVhZGVycyA9IHsgaGFzU3Vic2NyaWJlcnM6IGZhbHNlIH1cbiAgY2hhbm5lbHMuYmVmb3JlQ29ubmVjdCA9IHsgaGFzU3Vic2NyaWJlcnM6IGZhbHNlIH1cbiAgY2hhbm5lbHMuY29ubmVjdEVycm9yID0geyBoYXNTdWJzY3JpYmVyczogZmFsc2UgfVxuICBjaGFubmVscy5jb25uZWN0ZWQgPSB7IGhhc1N1YnNjcmliZXJzOiBmYWxzZSB9XG59XG5cbi8qKlxuICogQHR5cGUge2ltcG9ydCgnLi4vdHlwZXMvY2xpZW50JykuZGVmYXVsdH1cbiAqL1xuY2xhc3MgQ2xpZW50IGV4dGVuZHMgRGlzcGF0Y2hlckJhc2Uge1xuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd8VVJMfSB1cmxcbiAgICogQHBhcmFtIHtpbXBvcnQoJy4uL3R5cGVzL2NsaWVudCcpLkNsaWVudC5PcHRpb25zfSBvcHRpb25zXG4gICAqL1xuICBjb25zdHJ1Y3RvciAodXJsLCB7XG4gICAgaW50ZXJjZXB0b3JzLFxuICAgIG1heEhlYWRlclNpemUsXG4gICAgaGVhZGVyc1RpbWVvdXQsXG4gICAgc29ja2V0VGltZW91dCxcbiAgICByZXF1ZXN0VGltZW91dCxcbiAgICBjb25uZWN0VGltZW91dCxcbiAgICBib2R5VGltZW91dCxcbiAgICBpZGxlVGltZW91dCxcbiAgICBrZWVwQWxpdmUsXG4gICAga2VlcEFsaXZlVGltZW91dCxcbiAgICBtYXhLZWVwQWxpdmVUaW1lb3V0LFxuICAgIGtlZXBBbGl2ZU1heFRpbWVvdXQsXG4gICAga2VlcEFsaXZlVGltZW91dFRocmVzaG9sZCxcbiAgICBzb2NrZXRQYXRoLFxuICAgIHBpcGVsaW5pbmcsXG4gICAgdGxzLFxuICAgIHN0cmljdENvbnRlbnRMZW5ndGgsXG4gICAgbWF4Q2FjaGVkU2Vzc2lvbnMsXG4gICAgbWF4UmVkaXJlY3Rpb25zLFxuICAgIGNvbm5lY3QsXG4gICAgbWF4UmVxdWVzdHNQZXJDbGllbnQsXG4gICAgbG9jYWxBZGRyZXNzLFxuICAgIG1heFJlc3BvbnNlU2l6ZSxcbiAgICBhdXRvU2VsZWN0RmFtaWx5LFxuICAgIGF1dG9TZWxlY3RGYW1pbHlBdHRlbXB0VGltZW91dCxcbiAgICAvLyBoMlxuICAgIGFsbG93SDIsXG4gICAgbWF4Q29uY3VycmVudFN0cmVhbXNcbiAgfSA9IHt9KSB7XG4gICAgc3VwZXIoKVxuXG4gICAgaWYgKGtlZXBBbGl2ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3Vuc3VwcG9ydGVkIGtlZXBBbGl2ZSwgdXNlIHBpcGVsaW5pbmc9MCBpbnN0ZWFkJylcbiAgICB9XG5cbiAgICBpZiAoc29ja2V0VGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3Vuc3VwcG9ydGVkIHNvY2tldFRpbWVvdXQsIHVzZSBoZWFkZXJzVGltZW91dCAmIGJvZHlUaW1lb3V0IGluc3RlYWQnKVxuICAgIH1cblxuICAgIGlmIChyZXF1ZXN0VGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3Vuc3VwcG9ydGVkIHJlcXVlc3RUaW1lb3V0LCB1c2UgaGVhZGVyc1RpbWVvdXQgJiBib2R5VGltZW91dCBpbnN0ZWFkJylcbiAgICB9XG5cbiAgICBpZiAoaWRsZVRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCd1bnN1cHBvcnRlZCBpZGxlVGltZW91dCwgdXNlIGtlZXBBbGl2ZVRpbWVvdXQgaW5zdGVhZCcpXG4gICAgfVxuXG4gICAgaWYgKG1heEtlZXBBbGl2ZVRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCd1bnN1cHBvcnRlZCBtYXhLZWVwQWxpdmVUaW1lb3V0LCB1c2Uga2VlcEFsaXZlTWF4VGltZW91dCBpbnN0ZWFkJylcbiAgICB9XG5cbiAgICBpZiAobWF4SGVhZGVyU2l6ZSAhPSBudWxsICYmICFOdW1iZXIuaXNGaW5pdGUobWF4SGVhZGVyU2l6ZSkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBtYXhIZWFkZXJTaXplJylcbiAgICB9XG5cbiAgICBpZiAoc29ja2V0UGF0aCAhPSBudWxsICYmIHR5cGVvZiBzb2NrZXRQYXRoICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIHNvY2tldFBhdGgnKVxuICAgIH1cblxuICAgIGlmIChjb25uZWN0VGltZW91dCAhPSBudWxsICYmICghTnVtYmVyLmlzRmluaXRlKGNvbm5lY3RUaW1lb3V0KSB8fCBjb25uZWN0VGltZW91dCA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY29ubmVjdFRpbWVvdXQnKVxuICAgIH1cblxuICAgIGlmIChrZWVwQWxpdmVUaW1lb3V0ICE9IG51bGwgJiYgKCFOdW1iZXIuaXNGaW5pdGUoa2VlcEFsaXZlVGltZW91dCkgfHwga2VlcEFsaXZlVGltZW91dCA8PSAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGtlZXBBbGl2ZVRpbWVvdXQnKVxuICAgIH1cblxuICAgIGlmIChrZWVwQWxpdmVNYXhUaW1lb3V0ICE9IG51bGwgJiYgKCFOdW1iZXIuaXNGaW5pdGUoa2VlcEFsaXZlTWF4VGltZW91dCkgfHwga2VlcEFsaXZlTWF4VGltZW91dCA8PSAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGtlZXBBbGl2ZU1heFRpbWVvdXQnKVxuICAgIH1cblxuICAgIGlmIChrZWVwQWxpdmVUaW1lb3V0VGhyZXNob2xkICE9IG51bGwgJiYgIU51bWJlci5pc0Zpbml0ZShrZWVwQWxpdmVUaW1lb3V0VGhyZXNob2xkKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGtlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGQnKVxuICAgIH1cblxuICAgIGlmIChoZWFkZXJzVGltZW91dCAhPSBudWxsICYmICghTnVtYmVyLmlzSW50ZWdlcihoZWFkZXJzVGltZW91dCkgfHwgaGVhZGVyc1RpbWVvdXQgPCAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdoZWFkZXJzVGltZW91dCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciBvciB6ZXJvJylcbiAgICB9XG5cbiAgICBpZiAoYm9keVRpbWVvdXQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0ludGVnZXIoYm9keVRpbWVvdXQpIHx8IGJvZHlUaW1lb3V0IDwgMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignYm9keVRpbWVvdXQgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgb3IgemVybycpXG4gICAgfVxuXG4gICAgaWYgKGNvbm5lY3QgIT0gbnVsbCAmJiB0eXBlb2YgY29ubmVjdCAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgY29ubmVjdCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignY29ubmVjdCBtdXN0IGJlIGEgZnVuY3Rpb24gb3IgYW4gb2JqZWN0JylcbiAgICB9XG5cbiAgICBpZiAobWF4UmVkaXJlY3Rpb25zICE9IG51bGwgJiYgKCFOdW1iZXIuaXNJbnRlZ2VyKG1heFJlZGlyZWN0aW9ucykgfHwgbWF4UmVkaXJlY3Rpb25zIDwgMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignbWF4UmVkaXJlY3Rpb25zIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKVxuICAgIH1cblxuICAgIGlmIChtYXhSZXF1ZXN0c1BlckNsaWVudCAhPSBudWxsICYmICghTnVtYmVyLmlzSW50ZWdlcihtYXhSZXF1ZXN0c1BlckNsaWVudCkgfHwgbWF4UmVxdWVzdHNQZXJDbGllbnQgPCAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdtYXhSZXF1ZXN0c1BlckNsaWVudCBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJylcbiAgICB9XG5cbiAgICBpZiAobG9jYWxBZGRyZXNzICE9IG51bGwgJiYgKHR5cGVvZiBsb2NhbEFkZHJlc3MgIT09ICdzdHJpbmcnIHx8IG5ldC5pc0lQKGxvY2FsQWRkcmVzcykgPT09IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2xvY2FsQWRkcmVzcyBtdXN0IGJlIHZhbGlkIHN0cmluZyBJUCBhZGRyZXNzJylcbiAgICB9XG5cbiAgICBpZiAobWF4UmVzcG9uc2VTaXplICE9IG51bGwgJiYgKCFOdW1iZXIuaXNJbnRlZ2VyKG1heFJlc3BvbnNlU2l6ZSkgfHwgbWF4UmVzcG9uc2VTaXplIDwgLTEpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ21heFJlc3BvbnNlU2l6ZSBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJylcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQgIT0gbnVsbCAmJlxuICAgICAgKCFOdW1iZXIuaXNJbnRlZ2VyKGF1dG9TZWxlY3RGYW1pbHlBdHRlbXB0VGltZW91dCkgfHwgYXV0b1NlbGVjdEZhbWlseUF0dGVtcHRUaW1lb3V0IDwgLTEpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2F1dG9TZWxlY3RGYW1pbHlBdHRlbXB0VGltZW91dCBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJylcbiAgICB9XG5cbiAgICAvLyBoMlxuICAgIGlmIChhbGxvd0gyICE9IG51bGwgJiYgdHlwZW9mIGFsbG93SDIgIT09ICdib29sZWFuJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdhbGxvd0gyIG11c3QgYmUgYSB2YWxpZCBib29sZWFuIHZhbHVlJylcbiAgICB9XG5cbiAgICBpZiAobWF4Q29uY3VycmVudFN0cmVhbXMgIT0gbnVsbCAmJiAodHlwZW9mIG1heENvbmN1cnJlbnRTdHJlYW1zICE9PSAnbnVtYmVyJyB8fCBtYXhDb25jdXJyZW50U3RyZWFtcyA8IDEpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ21heENvbmN1cnJlbnRTdHJlYW1zIG11c3QgYmUgYSBwb3NzaXRpdmUgaW50ZWdlciwgZ3JlYXRlciB0aGFuIDAnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY29ubmVjdCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29ubmVjdCA9IGJ1aWxkQ29ubmVjdG9yKHtcbiAgICAgICAgLi4udGxzLFxuICAgICAgICBtYXhDYWNoZWRTZXNzaW9ucyxcbiAgICAgICAgYWxsb3dIMixcbiAgICAgICAgc29ja2V0UGF0aCxcbiAgICAgICAgdGltZW91dDogY29ubmVjdFRpbWVvdXQsXG4gICAgICAgIC4uLih1dGlsLm5vZGVIYXNBdXRvU2VsZWN0RmFtaWx5ICYmIGF1dG9TZWxlY3RGYW1pbHkgPyB7IGF1dG9TZWxlY3RGYW1pbHksIGF1dG9TZWxlY3RGYW1pbHlBdHRlbXB0VGltZW91dCB9IDogdW5kZWZpbmVkKSxcbiAgICAgICAgLi4uY29ubmVjdFxuICAgICAgfSlcbiAgICB9XG5cbiAgICB0aGlzW2tJbnRlcmNlcHRvcnNdID0gaW50ZXJjZXB0b3JzICYmIGludGVyY2VwdG9ycy5DbGllbnQgJiYgQXJyYXkuaXNBcnJheShpbnRlcmNlcHRvcnMuQ2xpZW50KVxuICAgICAgPyBpbnRlcmNlcHRvcnMuQ2xpZW50XG4gICAgICA6IFtjcmVhdGVSZWRpcmVjdEludGVyY2VwdG9yKHsgbWF4UmVkaXJlY3Rpb25zIH0pXVxuICAgIHRoaXNba1VybF0gPSB1dGlsLnBhcnNlT3JpZ2luKHVybClcbiAgICB0aGlzW2tDb25uZWN0b3JdID0gY29ubmVjdFxuICAgIHRoaXNba1NvY2tldF0gPSBudWxsXG4gICAgdGhpc1trUGlwZWxpbmluZ10gPSBwaXBlbGluaW5nICE9IG51bGwgPyBwaXBlbGluaW5nIDogMVxuICAgIHRoaXNba01heEhlYWRlcnNTaXplXSA9IG1heEhlYWRlclNpemUgfHwgaHR0cC5tYXhIZWFkZXJTaXplXG4gICAgdGhpc1trS2VlcEFsaXZlRGVmYXVsdFRpbWVvdXRdID0ga2VlcEFsaXZlVGltZW91dCA9PSBudWxsID8gNGUzIDoga2VlcEFsaXZlVGltZW91dFxuICAgIHRoaXNba0tlZXBBbGl2ZU1heFRpbWVvdXRdID0ga2VlcEFsaXZlTWF4VGltZW91dCA9PSBudWxsID8gNjAwZTMgOiBrZWVwQWxpdmVNYXhUaW1lb3V0XG4gICAgdGhpc1trS2VlcEFsaXZlVGltZW91dFRocmVzaG9sZF0gPSBrZWVwQWxpdmVUaW1lb3V0VGhyZXNob2xkID09IG51bGwgPyAxZTMgOiBrZWVwQWxpdmVUaW1lb3V0VGhyZXNob2xkXG4gICAgdGhpc1trS2VlcEFsaXZlVGltZW91dFZhbHVlXSA9IHRoaXNba0tlZXBBbGl2ZURlZmF1bHRUaW1lb3V0XVxuICAgIHRoaXNba1NlcnZlck5hbWVdID0gbnVsbFxuICAgIHRoaXNba0xvY2FsQWRkcmVzc10gPSBsb2NhbEFkZHJlc3MgIT0gbnVsbCA/IGxvY2FsQWRkcmVzcyA6IG51bGxcbiAgICB0aGlzW2tSZXN1bWluZ10gPSAwIC8vIDAsIGlkbGUsIDEsIHNjaGVkdWxlZCwgMiByZXN1bWluZ1xuICAgIHRoaXNba05lZWREcmFpbl0gPSAwIC8vIDAsIGlkbGUsIDEsIHNjaGVkdWxlZCwgMiByZXN1bWluZ1xuICAgIHRoaXNba0hvc3RIZWFkZXJdID0gYGhvc3Q6ICR7dGhpc1trVXJsXS5ob3N0bmFtZX0ke3RoaXNba1VybF0ucG9ydCA/IGA6JHt0aGlzW2tVcmxdLnBvcnR9YCA6ICcnfVxcclxcbmBcbiAgICB0aGlzW2tCb2R5VGltZW91dF0gPSBib2R5VGltZW91dCAhPSBudWxsID8gYm9keVRpbWVvdXQgOiAzMDBlM1xuICAgIHRoaXNba0hlYWRlcnNUaW1lb3V0XSA9IGhlYWRlcnNUaW1lb3V0ICE9IG51bGwgPyBoZWFkZXJzVGltZW91dCA6IDMwMGUzXG4gICAgdGhpc1trU3RyaWN0Q29udGVudExlbmd0aF0gPSBzdHJpY3RDb250ZW50TGVuZ3RoID09IG51bGwgPyB0cnVlIDogc3RyaWN0Q29udGVudExlbmd0aFxuICAgIHRoaXNba01heFJlZGlyZWN0aW9uc10gPSBtYXhSZWRpcmVjdGlvbnNcbiAgICB0aGlzW2tNYXhSZXF1ZXN0c10gPSBtYXhSZXF1ZXN0c1BlckNsaWVudFxuICAgIHRoaXNba0Nsb3NlZFJlc29sdmVdID0gbnVsbFxuICAgIHRoaXNba01heFJlc3BvbnNlU2l6ZV0gPSBtYXhSZXNwb25zZVNpemUgPiAtMSA/IG1heFJlc3BvbnNlU2l6ZSA6IC0xXG4gICAgdGhpc1trSFRUUENvbm5WZXJzaW9uXSA9ICdoMSdcblxuICAgIC8vIEhUVFAvMlxuICAgIHRoaXNba0hUVFAyU2Vzc2lvbl0gPSBudWxsXG4gICAgdGhpc1trSFRUUDJTZXNzaW9uU3RhdGVdID0gIWFsbG93SDJcbiAgICAgID8gbnVsbFxuICAgICAgOiB7XG4gICAgICAgIC8vIHN0cmVhbXM6IG51bGwsIC8vIEZpeGVkIHF1ZXVlIG9mIHN0cmVhbXMgLSBGb3IgZnV0dXJlIHN1cHBvcnQgb2YgYHB1c2hgXG4gICAgICAgICAgb3BlblN0cmVhbXM6IDAsIC8vIEtlZXAgdHJhY2sgb2YgdGhlbSB0byBkZWNpZGUgd2V0aGVyIG9yIG5vdCB1bnJlZiB0aGUgc2Vzc2lvblxuICAgICAgICAgIG1heENvbmN1cnJlbnRTdHJlYW1zOiBtYXhDb25jdXJyZW50U3RyZWFtcyAhPSBudWxsID8gbWF4Q29uY3VycmVudFN0cmVhbXMgOiAxMDAgLy8gTWF4IHBlZXJDb25jdXJyZW50U3RyZWFtcyBmb3IgYSBOb2RlIGgyIHNlcnZlclxuICAgICAgICB9XG4gICAgdGhpc1trSG9zdF0gPSBgJHt0aGlzW2tVcmxdLmhvc3RuYW1lfSR7dGhpc1trVXJsXS5wb3J0ID8gYDoke3RoaXNba1VybF0ucG9ydH1gIDogJyd9YFxuXG4gICAgLy8ga1F1ZXVlIGlzIGJ1aWx0IHVwIG9mIDMgc2VjdGlvbnMgc2VwYXJhdGVkIGJ5XG4gICAgLy8gdGhlIGtSdW5uaW5nSWR4IGFuZCBrUGVuZGluZ0lkeCBpbmRpY2VzLlxuICAgIC8vIHwgICBjb21wbGV0ZSAgIHwgICBydW5uaW5nICAgfCAgIHBlbmRpbmcgICB8XG4gICAgLy8gICAgICAgICAgICAgICAgXiBrUnVubmluZ0lkeCBeIGtQZW5kaW5nSWR4IF4ga1F1ZXVlLmxlbmd0aFxuICAgIC8vIGtSdW5uaW5nSWR4IHBvaW50cyB0byB0aGUgZmlyc3QgcnVubmluZyBlbGVtZW50LlxuICAgIC8vIGtQZW5kaW5nSWR4IHBvaW50cyB0byB0aGUgZmlyc3QgcGVuZGluZyBlbGVtZW50LlxuICAgIC8vIFRoaXMgaW1wbGVtZW50cyBhIGZhc3QgcXVldWUgd2l0aCBhbiBhbW9ydGl6ZWRcbiAgICAvLyB0aW1lIG9mIE8oMSkuXG5cbiAgICB0aGlzW2tRdWV1ZV0gPSBbXVxuICAgIHRoaXNba1J1bm5pbmdJZHhdID0gMFxuICAgIHRoaXNba1BlbmRpbmdJZHhdID0gMFxuICB9XG5cbiAgZ2V0IHBpcGVsaW5pbmcgKCkge1xuICAgIHJldHVybiB0aGlzW2tQaXBlbGluaW5nXVxuICB9XG5cbiAgc2V0IHBpcGVsaW5pbmcgKHZhbHVlKSB7XG4gICAgdGhpc1trUGlwZWxpbmluZ10gPSB2YWx1ZVxuICAgIHJlc3VtZSh0aGlzLCB0cnVlKVxuICB9XG5cbiAgZ2V0IFtrUGVuZGluZ10gKCkge1xuICAgIHJldHVybiB0aGlzW2tRdWV1ZV0ubGVuZ3RoIC0gdGhpc1trUGVuZGluZ0lkeF1cbiAgfVxuXG4gIGdldCBba1J1bm5pbmddICgpIHtcbiAgICByZXR1cm4gdGhpc1trUGVuZGluZ0lkeF0gLSB0aGlzW2tSdW5uaW5nSWR4XVxuICB9XG5cbiAgZ2V0IFtrU2l6ZV0gKCkge1xuICAgIHJldHVybiB0aGlzW2tRdWV1ZV0ubGVuZ3RoIC0gdGhpc1trUnVubmluZ0lkeF1cbiAgfVxuXG4gIGdldCBba0Nvbm5lY3RlZF0gKCkge1xuICAgIHJldHVybiAhIXRoaXNba1NvY2tldF0gJiYgIXRoaXNba0Nvbm5lY3RpbmddICYmICF0aGlzW2tTb2NrZXRdLmRlc3Ryb3llZFxuICB9XG5cbiAgZ2V0IFtrQnVzeV0gKCkge1xuICAgIGNvbnN0IHNvY2tldCA9IHRoaXNba1NvY2tldF1cbiAgICByZXR1cm4gKFxuICAgICAgKHNvY2tldCAmJiAoc29ja2V0W2tSZXNldF0gfHwgc29ja2V0W2tXcml0aW5nXSB8fCBzb2NrZXRba0Jsb2NraW5nXSkpIHx8XG4gICAgICAodGhpc1trU2l6ZV0gPj0gKHRoaXNba1BpcGVsaW5pbmddIHx8IDEpKSB8fFxuICAgICAgdGhpc1trUGVuZGluZ10gPiAwXG4gICAgKVxuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlOiBvbmx5IHVzZWQgZm9yIHRlc3QgKi9cbiAgW2tDb25uZWN0XSAoY2IpIHtcbiAgICBjb25uZWN0KHRoaXMpXG4gICAgdGhpcy5vbmNlKCdjb25uZWN0JywgY2IpXG4gIH1cblxuICBba0Rpc3BhdGNoXSAob3B0cywgaGFuZGxlcikge1xuICAgIGNvbnN0IG9yaWdpbiA9IG9wdHMub3JpZ2luIHx8IHRoaXNba1VybF0ub3JpZ2luXG5cbiAgICBjb25zdCByZXF1ZXN0ID0gdGhpc1trSFRUUENvbm5WZXJzaW9uXSA9PT0gJ2gyJ1xuICAgICAgPyBSZXF1ZXN0W2tIVFRQMkJ1aWxkUmVxdWVzdF0ob3JpZ2luLCBvcHRzLCBoYW5kbGVyKVxuICAgICAgOiBSZXF1ZXN0W2tIVFRQMUJ1aWxkUmVxdWVzdF0ob3JpZ2luLCBvcHRzLCBoYW5kbGVyKVxuXG4gICAgdGhpc1trUXVldWVdLnB1c2gocmVxdWVzdClcbiAgICBpZiAodGhpc1trUmVzdW1pbmddKSB7XG4gICAgICAvLyBEbyBub3RoaW5nLlxuICAgIH0gZWxzZSBpZiAodXRpbC5ib2R5TGVuZ3RoKHJlcXVlc3QuYm9keSkgPT0gbnVsbCAmJiB1dGlsLmlzSXRlcmFibGUocmVxdWVzdC5ib2R5KSkge1xuICAgICAgLy8gV2FpdCBhIHRpY2sgaW4gY2FzZSBzdHJlYW0vaXRlcmF0b3IgaXMgZW5kZWQgaW4gdGhlIHNhbWUgdGljay5cbiAgICAgIHRoaXNba1Jlc3VtaW5nXSA9IDFcbiAgICAgIHByb2Nlc3MubmV4dFRpY2socmVzdW1lLCB0aGlzKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bWUodGhpcywgdHJ1ZSlcbiAgICB9XG5cbiAgICBpZiAodGhpc1trUmVzdW1pbmddICYmIHRoaXNba05lZWREcmFpbl0gIT09IDIgJiYgdGhpc1trQnVzeV0pIHtcbiAgICAgIHRoaXNba05lZWREcmFpbl0gPSAyXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXNba05lZWREcmFpbl0gPCAyXG4gIH1cblxuICBhc3luYyBba0Nsb3NlXSAoKSB7XG4gICAgLy8gVE9ETzogZm9yIEgyIHdlIG5lZWQgdG8gZ3JhY2VmdWxseSBmbHVzaCB0aGUgcmVtYWluaW5nIGVucXVldWVkXG4gICAgLy8gcmVxdWVzdCBhbmQgY2xvc2UgZWFjaCBzdHJlYW0uXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBpZiAoIXRoaXNba1NpemVdKSB7XG4gICAgICAgIHJlc29sdmUobnVsbClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXNba0Nsb3NlZFJlc29sdmVdID0gcmVzb2x2ZVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBhc3luYyBba0Rlc3Ryb3ldIChlcnIpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGNvbnN0IHJlcXVlc3RzID0gdGhpc1trUXVldWVdLnNwbGljZSh0aGlzW2tQZW5kaW5nSWR4XSlcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVxdWVzdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IHJlcXVlc3RzW2ldXG4gICAgICAgIGVycm9yUmVxdWVzdCh0aGlzLCByZXF1ZXN0LCBlcnIpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgICBpZiAodGhpc1trQ2xvc2VkUmVzb2x2ZV0pIHtcbiAgICAgICAgICAvLyBUT0RPIChmaXgpOiBTaG91bGQgd2UgZXJyb3IgaGVyZSB3aXRoIENsaWVudERlc3Ryb3llZEVycm9yP1xuICAgICAgICAgIHRoaXNba0Nsb3NlZFJlc29sdmVdKClcbiAgICAgICAgICB0aGlzW2tDbG9zZWRSZXNvbHZlXSA9IG51bGxcbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlKClcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXNba0hUVFAyU2Vzc2lvbl0gIT0gbnVsbCkge1xuICAgICAgICB1dGlsLmRlc3Ryb3kodGhpc1trSFRUUDJTZXNzaW9uXSwgZXJyKVxuICAgICAgICB0aGlzW2tIVFRQMlNlc3Npb25dID0gbnVsbFxuICAgICAgICB0aGlzW2tIVFRQMlNlc3Npb25TdGF0ZV0gPSBudWxsXG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpc1trU29ja2V0XSkge1xuICAgICAgICBxdWV1ZU1pY3JvdGFzayhjYWxsYmFjaylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHV0aWwuZGVzdHJveSh0aGlzW2tTb2NrZXRdLm9uKCdjbG9zZScsIGNhbGxiYWNrKSwgZXJyKVxuICAgICAgfVxuXG4gICAgICByZXN1bWUodGhpcylcbiAgICB9KVxuICB9XG59XG5cbmZ1bmN0aW9uIG9uSHR0cDJTZXNzaW9uRXJyb3IgKGVycikge1xuICBhc3NlcnQoZXJyLmNvZGUgIT09ICdFUlJfVExTX0NFUlRfQUxUTkFNRV9JTlZBTElEJylcblxuICB0aGlzW2tTb2NrZXRdW2tFcnJvcl0gPSBlcnJcblxuICBvbkVycm9yKHRoaXNba0NsaWVudF0sIGVycilcbn1cblxuZnVuY3Rpb24gb25IdHRwMkZyYW1lRXJyb3IgKHR5cGUsIGNvZGUsIGlkKSB7XG4gIGNvbnN0IGVyciA9IG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoYEhUVFAvMjogXCJmcmFtZUVycm9yXCIgcmVjZWl2ZWQgLSB0eXBlICR7dHlwZX0sIGNvZGUgJHtjb2RlfWApXG5cbiAgaWYgKGlkID09PSAwKSB7XG4gICAgdGhpc1trU29ja2V0XVtrRXJyb3JdID0gZXJyXG4gICAgb25FcnJvcih0aGlzW2tDbGllbnRdLCBlcnIpXG4gIH1cbn1cblxuZnVuY3Rpb24gb25IdHRwMlNlc3Npb25FbmQgKCkge1xuICB1dGlsLmRlc3Ryb3kodGhpcywgbmV3IFNvY2tldEVycm9yKCdvdGhlciBzaWRlIGNsb3NlZCcpKVxuICB1dGlsLmRlc3Ryb3kodGhpc1trU29ja2V0XSwgbmV3IFNvY2tldEVycm9yKCdvdGhlciBzaWRlIGNsb3NlZCcpKVxufVxuXG5mdW5jdGlvbiBvbkhUVFAyR29Bd2F5IChjb2RlKSB7XG4gIGNvbnN0IGNsaWVudCA9IHRoaXNba0NsaWVudF1cbiAgY29uc3QgZXJyID0gbmV3IEluZm9ybWF0aW9uYWxFcnJvcihgSFRUUC8yOiBcIkdPQVdBWVwiIGZyYW1lIHJlY2VpdmVkIHdpdGggY29kZSAke2NvZGV9YClcbiAgY2xpZW50W2tTb2NrZXRdID0gbnVsbFxuICBjbGllbnRba0hUVFAyU2Vzc2lvbl0gPSBudWxsXG5cbiAgaWYgKGNsaWVudC5kZXN0cm95ZWQpIHtcbiAgICBhc3NlcnQodGhpc1trUGVuZGluZ10gPT09IDApXG5cbiAgICAvLyBGYWlsIGVudGlyZSBxdWV1ZS5cbiAgICBjb25zdCByZXF1ZXN0cyA9IGNsaWVudFtrUXVldWVdLnNwbGljZShjbGllbnRba1J1bm5pbmdJZHhdKVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVxdWVzdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSByZXF1ZXN0c1tpXVxuICAgICAgZXJyb3JSZXF1ZXN0KHRoaXMsIHJlcXVlc3QsIGVycilcbiAgICB9XG4gIH0gZWxzZSBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDApIHtcbiAgICAvLyBGYWlsIGhlYWQgb2YgcGlwZWxpbmUuXG4gICAgY29uc3QgcmVxdWVzdCA9IGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF1dXG4gICAgY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XSsrXSA9IG51bGxcblxuICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIGVycilcbiAgfVxuXG4gIGNsaWVudFtrUGVuZGluZ0lkeF0gPSBjbGllbnRba1J1bm5pbmdJZHhdXG5cbiAgYXNzZXJ0KGNsaWVudFtrUnVubmluZ10gPT09IDApXG5cbiAgY2xpZW50LmVtaXQoJ2Rpc2Nvbm5lY3QnLFxuICAgIGNsaWVudFtrVXJsXSxcbiAgICBbY2xpZW50XSxcbiAgICBlcnJcbiAgKVxuXG4gIHJlc3VtZShjbGllbnQpXG59XG5cbmNvbnN0IGNvbnN0YW50cyA9IHJlcXVpcmUoJy4vbGxodHRwL2NvbnN0YW50cycpXG5jb25zdCBjcmVhdGVSZWRpcmVjdEludGVyY2VwdG9yID0gcmVxdWlyZSgnLi9pbnRlcmNlcHRvci9yZWRpcmVjdEludGVyY2VwdG9yJylcbmNvbnN0IEVNUFRZX0JVRiA9IEJ1ZmZlci5hbGxvYygwKVxuXG5hc3luYyBmdW5jdGlvbiBsYXp5bGxodHRwICgpIHtcbiAgY29uc3QgbGxodHRwV2FzbURhdGEgPSBwcm9jZXNzLmVudi5KRVNUX1dPUktFUl9JRCA/IHJlcXVpcmUoJy4vbGxodHRwL2xsaHR0cC13YXNtLmpzJykgOiB1bmRlZmluZWRcblxuICBsZXQgbW9kXG4gIHRyeSB7XG4gICAgbW9kID0gYXdhaXQgV2ViQXNzZW1ibHkuY29tcGlsZShCdWZmZXIuZnJvbShyZXF1aXJlKCcuL2xsaHR0cC9sbGh0dHBfc2ltZC13YXNtLmpzJyksICdiYXNlNjQnKSlcbiAgfSBjYXRjaCAoZSkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cbiAgICAvLyBXZSBjb3VsZCBjaGVjayBpZiB0aGUgZXJyb3Igd2FzIGNhdXNlZCBieSB0aGUgc2ltZCBvcHRpb24gbm90XG4gICAgLy8gYmVpbmcgZW5hYmxlZCwgYnV0IHRoZSBvY2N1cnJpbmcgb2YgdGhpcyBvdGhlciBlcnJvclxuICAgIC8vICogaHR0cHM6Ly9naXRodWIuY29tL2Vtc2NyaXB0ZW4tY29yZS9lbXNjcmlwdGVuL2lzc3Vlcy8xMTQ5NVxuICAgIC8vIGdvdCBtZSB0byByZW1vdmUgdGhhdCBjaGVjayB0byBhdm9pZCBicmVha2luZyBOb2RlIDEyLlxuICAgIG1vZCA9IGF3YWl0IFdlYkFzc2VtYmx5LmNvbXBpbGUoQnVmZmVyLmZyb20obGxodHRwV2FzbURhdGEgfHwgcmVxdWlyZSgnLi9sbGh0dHAvbGxodHRwLXdhc20uanMnKSwgJ2Jhc2U2NCcpKVxuICB9XG5cbiAgcmV0dXJuIGF3YWl0IFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKG1vZCwge1xuICAgIGVudjoge1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgY2FtZWxjYXNlICovXG5cbiAgICAgIHdhc21fb25fdXJsOiAocCwgYXQsIGxlbikgPT4ge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICByZXR1cm4gMFxuICAgICAgfSxcbiAgICAgIHdhc21fb25fc3RhdHVzOiAocCwgYXQsIGxlbikgPT4ge1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY3VycmVudFBhcnNlci5wdHIsIHApXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gYXQgLSBjdXJyZW50QnVmZmVyUHRyICsgY3VycmVudEJ1ZmZlclJlZi5ieXRlT2Zmc2V0XG4gICAgICAgIHJldHVybiBjdXJyZW50UGFyc2VyLm9uU3RhdHVzKG5ldyBGYXN0QnVmZmVyKGN1cnJlbnRCdWZmZXJSZWYuYnVmZmVyLCBzdGFydCwgbGVuKSkgfHwgMFxuICAgICAgfSxcbiAgICAgIHdhc21fb25fbWVzc2FnZV9iZWdpbjogKHApID0+IHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGN1cnJlbnRQYXJzZXIucHRyLCBwKVxuICAgICAgICByZXR1cm4gY3VycmVudFBhcnNlci5vbk1lc3NhZ2VCZWdpbigpIHx8IDBcbiAgICAgIH0sXG4gICAgICB3YXNtX29uX2hlYWRlcl9maWVsZDogKHAsIGF0LCBsZW4pID0+IHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGN1cnJlbnRQYXJzZXIucHRyLCBwKVxuICAgICAgICBjb25zdCBzdGFydCA9IGF0IC0gY3VycmVudEJ1ZmZlclB0ciArIGN1cnJlbnRCdWZmZXJSZWYuYnl0ZU9mZnNldFxuICAgICAgICByZXR1cm4gY3VycmVudFBhcnNlci5vbkhlYWRlckZpZWxkKG5ldyBGYXN0QnVmZmVyKGN1cnJlbnRCdWZmZXJSZWYuYnVmZmVyLCBzdGFydCwgbGVuKSkgfHwgMFxuICAgICAgfSxcbiAgICAgIHdhc21fb25faGVhZGVyX3ZhbHVlOiAocCwgYXQsIGxlbikgPT4ge1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY3VycmVudFBhcnNlci5wdHIsIHApXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gYXQgLSBjdXJyZW50QnVmZmVyUHRyICsgY3VycmVudEJ1ZmZlclJlZi5ieXRlT2Zmc2V0XG4gICAgICAgIHJldHVybiBjdXJyZW50UGFyc2VyLm9uSGVhZGVyVmFsdWUobmV3IEZhc3RCdWZmZXIoY3VycmVudEJ1ZmZlclJlZi5idWZmZXIsIHN0YXJ0LCBsZW4pKSB8fCAwXG4gICAgICB9LFxuICAgICAgd2FzbV9vbl9oZWFkZXJzX2NvbXBsZXRlOiAocCwgc3RhdHVzQ29kZSwgdXBncmFkZSwgc2hvdWxkS2VlcEFsaXZlKSA9PiB7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjdXJyZW50UGFyc2VyLnB0ciwgcClcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRQYXJzZXIub25IZWFkZXJzQ29tcGxldGUoc3RhdHVzQ29kZSwgQm9vbGVhbih1cGdyYWRlKSwgQm9vbGVhbihzaG91bGRLZWVwQWxpdmUpKSB8fCAwXG4gICAgICB9LFxuICAgICAgd2FzbV9vbl9ib2R5OiAocCwgYXQsIGxlbikgPT4ge1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY3VycmVudFBhcnNlci5wdHIsIHApXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gYXQgLSBjdXJyZW50QnVmZmVyUHRyICsgY3VycmVudEJ1ZmZlclJlZi5ieXRlT2Zmc2V0XG4gICAgICAgIHJldHVybiBjdXJyZW50UGFyc2VyLm9uQm9keShuZXcgRmFzdEJ1ZmZlcihjdXJyZW50QnVmZmVyUmVmLmJ1ZmZlciwgc3RhcnQsIGxlbikpIHx8IDBcbiAgICAgIH0sXG4gICAgICB3YXNtX29uX21lc3NhZ2VfY29tcGxldGU6IChwKSA9PiB7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjdXJyZW50UGFyc2VyLnB0ciwgcClcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRQYXJzZXIub25NZXNzYWdlQ29tcGxldGUoKSB8fCAwXG4gICAgICB9XG5cbiAgICAgIC8qIGVzbGludC1lbmFibGUgY2FtZWxjYXNlICovXG4gICAgfVxuICB9KVxufVxuXG5sZXQgbGxodHRwSW5zdGFuY2UgPSBudWxsXG5sZXQgbGxodHRwUHJvbWlzZSA9IGxhenlsbGh0dHAoKVxubGxodHRwUHJvbWlzZS5jYXRjaCgpXG5cbmxldCBjdXJyZW50UGFyc2VyID0gbnVsbFxubGV0IGN1cnJlbnRCdWZmZXJSZWYgPSBudWxsXG5sZXQgY3VycmVudEJ1ZmZlclNpemUgPSAwXG5sZXQgY3VycmVudEJ1ZmZlclB0ciA9IG51bGxcblxuY29uc3QgVElNRU9VVF9IRUFERVJTID0gMVxuY29uc3QgVElNRU9VVF9CT0RZID0gMlxuY29uc3QgVElNRU9VVF9JRExFID0gM1xuXG5jbGFzcyBQYXJzZXIge1xuICBjb25zdHJ1Y3RvciAoY2xpZW50LCBzb2NrZXQsIHsgZXhwb3J0cyB9KSB7XG4gICAgYXNzZXJ0KE51bWJlci5pc0Zpbml0ZShjbGllbnRba01heEhlYWRlcnNTaXplXSkgJiYgY2xpZW50W2tNYXhIZWFkZXJzU2l6ZV0gPiAwKVxuXG4gICAgdGhpcy5sbGh0dHAgPSBleHBvcnRzXG4gICAgdGhpcy5wdHIgPSB0aGlzLmxsaHR0cC5sbGh0dHBfYWxsb2MoY29uc3RhbnRzLlRZUEUuUkVTUE9OU0UpXG4gICAgdGhpcy5jbGllbnQgPSBjbGllbnRcbiAgICB0aGlzLnNvY2tldCA9IHNvY2tldFxuICAgIHRoaXMudGltZW91dCA9IG51bGxcbiAgICB0aGlzLnRpbWVvdXRWYWx1ZSA9IG51bGxcbiAgICB0aGlzLnRpbWVvdXRUeXBlID0gbnVsbFxuICAgIHRoaXMuc3RhdHVzQ29kZSA9IG51bGxcbiAgICB0aGlzLnN0YXR1c1RleHQgPSAnJ1xuICAgIHRoaXMudXBncmFkZSA9IGZhbHNlXG4gICAgdGhpcy5oZWFkZXJzID0gW11cbiAgICB0aGlzLmhlYWRlcnNTaXplID0gMFxuICAgIHRoaXMuaGVhZGVyc01heFNpemUgPSBjbGllbnRba01heEhlYWRlcnNTaXplXVxuICAgIHRoaXMuc2hvdWxkS2VlcEFsaXZlID0gZmFsc2VcbiAgICB0aGlzLnBhdXNlZCA9IGZhbHNlXG4gICAgdGhpcy5yZXN1bWUgPSB0aGlzLnJlc3VtZS5iaW5kKHRoaXMpXG5cbiAgICB0aGlzLmJ5dGVzUmVhZCA9IDBcblxuICAgIHRoaXMua2VlcEFsaXZlID0gJydcbiAgICB0aGlzLmNvbnRlbnRMZW5ndGggPSAnJ1xuICAgIHRoaXMuY29ubmVjdGlvbiA9ICcnXG4gICAgdGhpcy5tYXhSZXNwb25zZVNpemUgPSBjbGllbnRba01heFJlc3BvbnNlU2l6ZV1cbiAgfVxuXG4gIHNldFRpbWVvdXQgKHZhbHVlLCB0eXBlKSB7XG4gICAgdGhpcy50aW1lb3V0VHlwZSA9IHR5cGVcbiAgICBpZiAodmFsdWUgIT09IHRoaXMudGltZW91dFZhbHVlKSB7XG4gICAgICB0aW1lcnMuY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dClcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICB0aGlzLnRpbWVvdXQgPSB0aW1lcnMuc2V0VGltZW91dChvblBhcnNlclRpbWVvdXQsIHZhbHVlLCB0aGlzKVxuICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogb25seSBmb3IgamVzdFxuICAgICAgICBpZiAodGhpcy50aW1lb3V0LnVucmVmKSB7XG4gICAgICAgICAgdGhpcy50aW1lb3V0LnVucmVmKClcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy50aW1lb3V0ID0gbnVsbFxuICAgICAgfVxuICAgICAgdGhpcy50aW1lb3V0VmFsdWUgPSB2YWx1ZVxuICAgIH0gZWxzZSBpZiAodGhpcy50aW1lb3V0KSB7XG4gICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogb25seSBmb3IgamVzdFxuICAgICAgaWYgKHRoaXMudGltZW91dC5yZWZyZXNoKSB7XG4gICAgICAgIHRoaXMudGltZW91dC5yZWZyZXNoKClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXN1bWUgKCkge1xuICAgIGlmICh0aGlzLnNvY2tldC5kZXN0cm95ZWQgfHwgIXRoaXMucGF1c2VkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBhc3NlcnQodGhpcy5wdHIgIT0gbnVsbClcbiAgICBhc3NlcnQoY3VycmVudFBhcnNlciA9PSBudWxsKVxuXG4gICAgdGhpcy5sbGh0dHAubGxodHRwX3Jlc3VtZSh0aGlzLnB0cilcblxuICAgIGFzc2VydCh0aGlzLnRpbWVvdXRUeXBlID09PSBUSU1FT1VUX0JPRFkpXG4gICAgaWYgKHRoaXMudGltZW91dCkge1xuICAgICAgLy8gaXN0YW5idWwgaWdub3JlIGVsc2U6IG9ubHkgZm9yIGplc3RcbiAgICAgIGlmICh0aGlzLnRpbWVvdXQucmVmcmVzaCkge1xuICAgICAgICB0aGlzLnRpbWVvdXQucmVmcmVzaCgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5wYXVzZWQgPSBmYWxzZVxuICAgIHRoaXMuZXhlY3V0ZSh0aGlzLnNvY2tldC5yZWFkKCkgfHwgRU1QVFlfQlVGKSAvLyBGbHVzaCBwYXJzZXIuXG4gICAgdGhpcy5yZWFkTW9yZSgpXG4gIH1cblxuICByZWFkTW9yZSAoKSB7XG4gICAgd2hpbGUgKCF0aGlzLnBhdXNlZCAmJiB0aGlzLnB0cikge1xuICAgICAgY29uc3QgY2h1bmsgPSB0aGlzLnNvY2tldC5yZWFkKClcbiAgICAgIGlmIChjaHVuayA9PT0gbnVsbCkge1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgdGhpcy5leGVjdXRlKGNodW5rKVxuICAgIH1cbiAgfVxuXG4gIGV4ZWN1dGUgKGRhdGEpIHtcbiAgICBhc3NlcnQodGhpcy5wdHIgIT0gbnVsbClcbiAgICBhc3NlcnQoY3VycmVudFBhcnNlciA9PSBudWxsKVxuICAgIGFzc2VydCghdGhpcy5wYXVzZWQpXG5cbiAgICBjb25zdCB7IHNvY2tldCwgbGxodHRwIH0gPSB0aGlzXG5cbiAgICBpZiAoZGF0YS5sZW5ndGggPiBjdXJyZW50QnVmZmVyU2l6ZSkge1xuICAgICAgaWYgKGN1cnJlbnRCdWZmZXJQdHIpIHtcbiAgICAgICAgbGxodHRwLmZyZWUoY3VycmVudEJ1ZmZlclB0cilcbiAgICAgIH1cbiAgICAgIGN1cnJlbnRCdWZmZXJTaXplID0gTWF0aC5jZWlsKGRhdGEubGVuZ3RoIC8gNDA5NikgKiA0MDk2XG4gICAgICBjdXJyZW50QnVmZmVyUHRyID0gbGxodHRwLm1hbGxvYyhjdXJyZW50QnVmZmVyU2l6ZSlcbiAgICB9XG5cbiAgICBuZXcgVWludDhBcnJheShsbGh0dHAubWVtb3J5LmJ1ZmZlciwgY3VycmVudEJ1ZmZlclB0ciwgY3VycmVudEJ1ZmZlclNpemUpLnNldChkYXRhKVxuXG4gICAgLy8gQ2FsbCBgZXhlY3V0ZWAgb24gdGhlIHdhc20gcGFyc2VyLlxuICAgIC8vIFdlIHBhc3MgdGhlIGBsbGh0dHBfcGFyc2VyYCBwb2ludGVyIGFkZHJlc3MsIHRoZSBwb2ludGVyIGFkZHJlc3Mgb2YgYnVmZmVyIHZpZXcgZGF0YSxcbiAgICAvLyBhbmQgZmluYWxseSB0aGUgbGVuZ3RoIG9mIGJ5dGVzIHRvIHBhcnNlLlxuICAgIC8vIFRoZSByZXR1cm4gdmFsdWUgaXMgYW4gZXJyb3IgY29kZSBvciBgY29uc3RhbnRzLkVSUk9SLk9LYC5cbiAgICB0cnkge1xuICAgICAgbGV0IHJldFxuXG4gICAgICB0cnkge1xuICAgICAgICBjdXJyZW50QnVmZmVyUmVmID0gZGF0YVxuICAgICAgICBjdXJyZW50UGFyc2VyID0gdGhpc1xuICAgICAgICByZXQgPSBsbGh0dHAubGxodHRwX2V4ZWN1dGUodGhpcy5wdHIsIGN1cnJlbnRCdWZmZXJQdHIsIGRhdGEubGVuZ3RoKVxuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jYXRjaCAqL1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBkaWZmaWN1bHQgdG8gbWFrZSBhIHRlc3QgY2FzZSBmb3IgKi9cbiAgICAgICAgdGhyb3cgZXJyXG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBjdXJyZW50UGFyc2VyID0gbnVsbFxuICAgICAgICBjdXJyZW50QnVmZmVyUmVmID0gbnVsbFxuICAgICAgfVxuXG4gICAgICBjb25zdCBvZmZzZXQgPSBsbGh0dHAubGxodHRwX2dldF9lcnJvcl9wb3ModGhpcy5wdHIpIC0gY3VycmVudEJ1ZmZlclB0clxuXG4gICAgICBpZiAocmV0ID09PSBjb25zdGFudHMuRVJST1IuUEFVU0VEX1VQR1JBREUpIHtcbiAgICAgICAgdGhpcy5vblVwZ3JhZGUoZGF0YS5zbGljZShvZmZzZXQpKVxuICAgICAgfSBlbHNlIGlmIChyZXQgPT09IGNvbnN0YW50cy5FUlJPUi5QQVVTRUQpIHtcbiAgICAgICAgdGhpcy5wYXVzZWQgPSB0cnVlXG4gICAgICAgIHNvY2tldC51bnNoaWZ0KGRhdGEuc2xpY2Uob2Zmc2V0KSlcbiAgICAgIH0gZWxzZSBpZiAocmV0ICE9PSBjb25zdGFudHMuRVJST1IuT0spIHtcbiAgICAgICAgY29uc3QgcHRyID0gbGxodHRwLmxsaHR0cF9nZXRfZXJyb3JfcmVhc29uKHRoaXMucHRyKVxuICAgICAgICBsZXQgbWVzc2FnZSA9ICcnXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBkaWZmaWN1bHQgdG8gbWFrZSBhIHRlc3QgY2FzZSBmb3IgKi9cbiAgICAgICAgaWYgKHB0cikge1xuICAgICAgICAgIGNvbnN0IGxlbiA9IG5ldyBVaW50OEFycmF5KGxsaHR0cC5tZW1vcnkuYnVmZmVyLCBwdHIpLmluZGV4T2YoMClcbiAgICAgICAgICBtZXNzYWdlID1cbiAgICAgICAgICAgICdSZXNwb25zZSBkb2VzIG5vdCBtYXRjaCB0aGUgSFRUUC8xLjEgcHJvdG9jb2wgKCcgK1xuICAgICAgICAgICAgQnVmZmVyLmZyb20obGxodHRwLm1lbW9yeS5idWZmZXIsIHB0ciwgbGVuKS50b1N0cmluZygpICtcbiAgICAgICAgICAgICcpJ1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBIVFRQUGFyc2VyRXJyb3IobWVzc2FnZSwgY29uc3RhbnRzLkVSUk9SW3JldF0sIGRhdGEuc2xpY2Uob2Zmc2V0KSlcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIGVycilcbiAgICB9XG4gIH1cblxuICBkZXN0cm95ICgpIHtcbiAgICBhc3NlcnQodGhpcy5wdHIgIT0gbnVsbClcbiAgICBhc3NlcnQoY3VycmVudFBhcnNlciA9PSBudWxsKVxuXG4gICAgdGhpcy5sbGh0dHAubGxodHRwX2ZyZWUodGhpcy5wdHIpXG4gICAgdGhpcy5wdHIgPSBudWxsXG5cbiAgICB0aW1lcnMuY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dClcbiAgICB0aGlzLnRpbWVvdXQgPSBudWxsXG4gICAgdGhpcy50aW1lb3V0VmFsdWUgPSBudWxsXG4gICAgdGhpcy50aW1lb3V0VHlwZSA9IG51bGxcblxuICAgIHRoaXMucGF1c2VkID0gZmFsc2VcbiAgfVxuXG4gIG9uU3RhdHVzIChidWYpIHtcbiAgICB0aGlzLnN0YXR1c1RleHQgPSBidWYudG9TdHJpbmcoKVxuICB9XG5cbiAgb25NZXNzYWdlQmVnaW4gKCkge1xuICAgIGNvbnN0IHsgc29ja2V0LCBjbGllbnQgfSA9IHRoaXNcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBkaWZmaWN1bHQgdG8gbWFrZSBhIHRlc3QgY2FzZSBmb3IgKi9cbiAgICBpZiAoc29ja2V0LmRlc3Ryb3llZCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdCA9IGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF1dXG4gICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG4gIH1cblxuICBvbkhlYWRlckZpZWxkIChidWYpIHtcbiAgICBjb25zdCBsZW4gPSB0aGlzLmhlYWRlcnMubGVuZ3RoXG5cbiAgICBpZiAoKGxlbiAmIDEpID09PSAwKSB7XG4gICAgICB0aGlzLmhlYWRlcnMucHVzaChidWYpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGVhZGVyc1tsZW4gLSAxXSA9IEJ1ZmZlci5jb25jYXQoW3RoaXMuaGVhZGVyc1tsZW4gLSAxXSwgYnVmXSlcbiAgICB9XG5cbiAgICB0aGlzLnRyYWNrSGVhZGVyKGJ1Zi5sZW5ndGgpXG4gIH1cblxuICBvbkhlYWRlclZhbHVlIChidWYpIHtcbiAgICBsZXQgbGVuID0gdGhpcy5oZWFkZXJzLmxlbmd0aFxuXG4gICAgaWYgKChsZW4gJiAxKSA9PT0gMSkge1xuICAgICAgdGhpcy5oZWFkZXJzLnB1c2goYnVmKVxuICAgICAgbGVuICs9IDFcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oZWFkZXJzW2xlbiAtIDFdID0gQnVmZmVyLmNvbmNhdChbdGhpcy5oZWFkZXJzW2xlbiAtIDFdLCBidWZdKVxuICAgIH1cblxuICAgIGNvbnN0IGtleSA9IHRoaXMuaGVhZGVyc1tsZW4gLSAyXVxuICAgIGlmIChrZXkubGVuZ3RoID09PSAxMCAmJiBrZXkudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09PSAna2VlcC1hbGl2ZScpIHtcbiAgICAgIHRoaXMua2VlcEFsaXZlICs9IGJ1Zi50b1N0cmluZygpXG4gICAgfSBlbHNlIGlmIChrZXkubGVuZ3RoID09PSAxMCAmJiBrZXkudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09PSAnY29ubmVjdGlvbicpIHtcbiAgICAgIHRoaXMuY29ubmVjdGlvbiArPSBidWYudG9TdHJpbmcoKVxuICAgIH0gZWxzZSBpZiAoa2V5Lmxlbmd0aCA9PT0gMTQgJiYga2V5LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtbGVuZ3RoJykge1xuICAgICAgdGhpcy5jb250ZW50TGVuZ3RoICs9IGJ1Zi50b1N0cmluZygpXG4gICAgfVxuXG4gICAgdGhpcy50cmFja0hlYWRlcihidWYubGVuZ3RoKVxuICB9XG5cbiAgdHJhY2tIZWFkZXIgKGxlbikge1xuICAgIHRoaXMuaGVhZGVyc1NpemUgKz0gbGVuXG4gICAgaWYgKHRoaXMuaGVhZGVyc1NpemUgPj0gdGhpcy5oZWFkZXJzTWF4U2l6ZSkge1xuICAgICAgdXRpbC5kZXN0cm95KHRoaXMuc29ja2V0LCBuZXcgSGVhZGVyc092ZXJmbG93RXJyb3IoKSlcbiAgICB9XG4gIH1cblxuICBvblVwZ3JhZGUgKGhlYWQpIHtcbiAgICBjb25zdCB7IHVwZ3JhZGUsIGNsaWVudCwgc29ja2V0LCBoZWFkZXJzLCBzdGF0dXNDb2RlIH0gPSB0aGlzXG5cbiAgICBhc3NlcnQodXBncmFkZSlcblxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdXVxuICAgIGFzc2VydChyZXF1ZXN0KVxuXG4gICAgYXNzZXJ0KCFzb2NrZXQuZGVzdHJveWVkKVxuICAgIGFzc2VydChzb2NrZXQgPT09IGNsaWVudFtrU29ja2V0XSlcbiAgICBhc3NlcnQoIXRoaXMucGF1c2VkKVxuICAgIGFzc2VydChyZXF1ZXN0LnVwZ3JhZGUgfHwgcmVxdWVzdC5tZXRob2QgPT09ICdDT05ORUNUJylcblxuICAgIHRoaXMuc3RhdHVzQ29kZSA9IG51bGxcbiAgICB0aGlzLnN0YXR1c1RleHQgPSAnJ1xuICAgIHRoaXMuc2hvdWxkS2VlcEFsaXZlID0gbnVsbFxuXG4gICAgYXNzZXJ0KHRoaXMuaGVhZGVycy5sZW5ndGggJSAyID09PSAwKVxuICAgIHRoaXMuaGVhZGVycyA9IFtdXG4gICAgdGhpcy5oZWFkZXJzU2l6ZSA9IDBcblxuICAgIHNvY2tldC51bnNoaWZ0KGhlYWQpXG5cbiAgICBzb2NrZXRba1BhcnNlcl0uZGVzdHJveSgpXG4gICAgc29ja2V0W2tQYXJzZXJdID0gbnVsbFxuXG4gICAgc29ja2V0W2tDbGllbnRdID0gbnVsbFxuICAgIHNvY2tldFtrRXJyb3JdID0gbnVsbFxuICAgIHNvY2tldFxuICAgICAgLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uU29ja2V0RXJyb3IpXG4gICAgICAucmVtb3ZlTGlzdGVuZXIoJ3JlYWRhYmxlJywgb25Tb2NrZXRSZWFkYWJsZSlcbiAgICAgIC5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25Tb2NrZXRFbmQpXG4gICAgICAucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgb25Tb2NrZXRDbG9zZSlcblxuICAgIGNsaWVudFtrU29ja2V0XSA9IG51bGxcbiAgICBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdKytdID0gbnVsbFxuICAgIGNsaWVudC5lbWl0KCdkaXNjb25uZWN0JywgY2xpZW50W2tVcmxdLCBbY2xpZW50XSwgbmV3IEluZm9ybWF0aW9uYWxFcnJvcigndXBncmFkZScpKVxuXG4gICAgdHJ5IHtcbiAgICAgIHJlcXVlc3Qub25VcGdyYWRlKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHNvY2tldClcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIGVycilcbiAgICB9XG5cbiAgICByZXN1bWUoY2xpZW50KVxuICB9XG5cbiAgb25IZWFkZXJzQ29tcGxldGUgKHN0YXR1c0NvZGUsIHVwZ3JhZGUsIHNob3VsZEtlZXBBbGl2ZSkge1xuICAgIGNvbnN0IHsgY2xpZW50LCBzb2NrZXQsIGhlYWRlcnMsIHN0YXR1c1RleHQgfSA9IHRoaXNcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBkaWZmaWN1bHQgdG8gbWFrZSBhIHRlc3QgY2FzZSBmb3IgKi9cbiAgICBpZiAoc29ja2V0LmRlc3Ryb3llZCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdCA9IGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF1dXG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogZGlmZmljdWx0IHRvIG1ha2UgYSB0ZXN0IGNhc2UgZm9yICovXG4gICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICBhc3NlcnQoIXRoaXMudXBncmFkZSlcbiAgICBhc3NlcnQodGhpcy5zdGF0dXNDb2RlIDwgMjAwKVxuXG4gICAgaWYgKHN0YXR1c0NvZGUgPT09IDEwMCkge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IFNvY2tldEVycm9yKCdiYWQgcmVzcG9uc2UnLCB1dGlsLmdldFNvY2tldEluZm8oc29ja2V0KSkpXG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICAvKiB0aGlzIGNhbiBvbmx5IGhhcHBlbiBpZiBzZXJ2ZXIgaXMgbWlzYmVoYXZpbmcgKi9cbiAgICBpZiAodXBncmFkZSAmJiAhcmVxdWVzdC51cGdyYWRlKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgU29ja2V0RXJyb3IoJ2JhZCB1cGdyYWRlJywgdXRpbC5nZXRTb2NrZXRJbmZvKHNvY2tldCkpKVxuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRoaXMudGltZW91dFR5cGUsIFRJTUVPVVRfSEVBREVSUylcblxuICAgIHRoaXMuc3RhdHVzQ29kZSA9IHN0YXR1c0NvZGVcbiAgICB0aGlzLnNob3VsZEtlZXBBbGl2ZSA9IChcbiAgICAgIHNob3VsZEtlZXBBbGl2ZSB8fFxuICAgICAgLy8gT3ZlcnJpZGUgbGxodHRwIHZhbHVlIHdoaWNoIGRvZXMgbm90IGFsbG93IGtlZXBBbGl2ZSBmb3IgSEVBRC5cbiAgICAgIChyZXF1ZXN0Lm1ldGhvZCA9PT0gJ0hFQUQnICYmICFzb2NrZXRba1Jlc2V0XSAmJiB0aGlzLmNvbm5lY3Rpb24udG9Mb3dlckNhc2UoKSA9PT0gJ2tlZXAtYWxpdmUnKVxuICAgIClcblxuICAgIGlmICh0aGlzLnN0YXR1c0NvZGUgPj0gMjAwKSB7XG4gICAgICBjb25zdCBib2R5VGltZW91dCA9IHJlcXVlc3QuYm9keVRpbWVvdXQgIT0gbnVsbFxuICAgICAgICA/IHJlcXVlc3QuYm9keVRpbWVvdXRcbiAgICAgICAgOiBjbGllbnRba0JvZHlUaW1lb3V0XVxuICAgICAgdGhpcy5zZXRUaW1lb3V0KGJvZHlUaW1lb3V0LCBUSU1FT1VUX0JPRFkpXG4gICAgfSBlbHNlIGlmICh0aGlzLnRpbWVvdXQpIHtcbiAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBvbmx5IGZvciBqZXN0XG4gICAgICBpZiAodGhpcy50aW1lb3V0LnJlZnJlc2gpIHtcbiAgICAgICAgdGhpcy50aW1lb3V0LnJlZnJlc2goKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChyZXF1ZXN0Lm1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSB7XG4gICAgICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA9PT0gMSlcbiAgICAgIHRoaXMudXBncmFkZSA9IHRydWVcbiAgICAgIHJldHVybiAyXG4gICAgfVxuXG4gICAgaWYgKHVwZ3JhZGUpIHtcbiAgICAgIGFzc2VydChjbGllbnRba1J1bm5pbmddID09PSAxKVxuICAgICAgdGhpcy51cGdyYWRlID0gdHJ1ZVxuICAgICAgcmV0dXJuIDJcbiAgICB9XG5cbiAgICBhc3NlcnQodGhpcy5oZWFkZXJzLmxlbmd0aCAlIDIgPT09IDApXG4gICAgdGhpcy5oZWFkZXJzID0gW11cbiAgICB0aGlzLmhlYWRlcnNTaXplID0gMFxuXG4gICAgaWYgKHRoaXMuc2hvdWxkS2VlcEFsaXZlICYmIGNsaWVudFtrUGlwZWxpbmluZ10pIHtcbiAgICAgIGNvbnN0IGtlZXBBbGl2ZVRpbWVvdXQgPSB0aGlzLmtlZXBBbGl2ZSA/IHV0aWwucGFyc2VLZWVwQWxpdmVUaW1lb3V0KHRoaXMua2VlcEFsaXZlKSA6IG51bGxcblxuICAgICAgaWYgKGtlZXBBbGl2ZVRpbWVvdXQgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCB0aW1lb3V0ID0gTWF0aC5taW4oXG4gICAgICAgICAga2VlcEFsaXZlVGltZW91dCAtIGNsaWVudFtrS2VlcEFsaXZlVGltZW91dFRocmVzaG9sZF0sXG4gICAgICAgICAgY2xpZW50W2tLZWVwQWxpdmVNYXhUaW1lb3V0XVxuICAgICAgICApXG4gICAgICAgIGlmICh0aW1lb3V0IDw9IDApIHtcbiAgICAgICAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjbGllbnRba0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZV0gPSB0aW1lb3V0XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNsaWVudFtrS2VlcEFsaXZlVGltZW91dFZhbHVlXSA9IGNsaWVudFtrS2VlcEFsaXZlRGVmYXVsdFRpbWVvdXRdXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFN0b3AgbW9yZSByZXF1ZXN0cyBmcm9tIGJlaW5nIGRpc3BhdGNoZWQuXG4gICAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgICB9XG5cbiAgICBjb25zdCBwYXVzZSA9IHJlcXVlc3Qub25IZWFkZXJzKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHRoaXMucmVzdW1lLCBzdGF0dXNUZXh0KSA9PT0gZmFsc2VcblxuICAgIGlmIChyZXF1ZXN0LmFib3J0ZWQpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIGlmIChyZXF1ZXN0Lm1ldGhvZCA9PT0gJ0hFQUQnKSB7XG4gICAgICByZXR1cm4gMVxuICAgIH1cblxuICAgIGlmIChzdGF0dXNDb2RlIDwgMjAwKSB7XG4gICAgICByZXR1cm4gMVxuICAgIH1cblxuICAgIGlmIChzb2NrZXRba0Jsb2NraW5nXSkge1xuICAgICAgc29ja2V0W2tCbG9ja2luZ10gPSBmYWxzZVxuICAgICAgcmVzdW1lKGNsaWVudClcbiAgICB9XG5cbiAgICByZXR1cm4gcGF1c2UgPyBjb25zdGFudHMuRVJST1IuUEFVU0VEIDogMFxuICB9XG5cbiAgb25Cb2R5IChidWYpIHtcbiAgICBjb25zdCB7IGNsaWVudCwgc29ja2V0LCBzdGF0dXNDb2RlLCBtYXhSZXNwb25zZVNpemUgfSA9IHRoaXNcblxuICAgIGlmIChzb2NrZXQuZGVzdHJveWVkKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XV1cbiAgICBhc3NlcnQocmVxdWVzdClcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0aGlzLnRpbWVvdXRUeXBlLCBUSU1FT1VUX0JPRFkpXG4gICAgaWYgKHRoaXMudGltZW91dCkge1xuICAgICAgLy8gaXN0YW5idWwgaWdub3JlIGVsc2U6IG9ubHkgZm9yIGplc3RcbiAgICAgIGlmICh0aGlzLnRpbWVvdXQucmVmcmVzaCkge1xuICAgICAgICB0aGlzLnRpbWVvdXQucmVmcmVzaCgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgYXNzZXJ0KHN0YXR1c0NvZGUgPj0gMjAwKVxuXG4gICAgaWYgKG1heFJlc3BvbnNlU2l6ZSA+IC0xICYmIHRoaXMuYnl0ZXNSZWFkICsgYnVmLmxlbmd0aCA+IG1heFJlc3BvbnNlU2l6ZSkge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IFJlc3BvbnNlRXhjZWVkZWRNYXhTaXplRXJyb3IoKSlcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIHRoaXMuYnl0ZXNSZWFkICs9IGJ1Zi5sZW5ndGhcblxuICAgIGlmIChyZXF1ZXN0Lm9uRGF0YShidWYpID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIGNvbnN0YW50cy5FUlJPUi5QQVVTRURcbiAgICB9XG4gIH1cblxuICBvbk1lc3NhZ2VDb21wbGV0ZSAoKSB7XG4gICAgY29uc3QgeyBjbGllbnQsIHNvY2tldCwgc3RhdHVzQ29kZSwgdXBncmFkZSwgaGVhZGVycywgY29udGVudExlbmd0aCwgYnl0ZXNSZWFkLCBzaG91bGRLZWVwQWxpdmUgfSA9IHRoaXNcblxuICAgIGlmIChzb2NrZXQuZGVzdHJveWVkICYmICghc3RhdHVzQ29kZSB8fCBzaG91bGRLZWVwQWxpdmUpKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICBpZiAodXBncmFkZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdCA9IGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF1dXG4gICAgYXNzZXJ0KHJlcXVlc3QpXG5cbiAgICBhc3NlcnQoc3RhdHVzQ29kZSA+PSAxMDApXG5cbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBudWxsXG4gICAgdGhpcy5zdGF0dXNUZXh0ID0gJydcbiAgICB0aGlzLmJ5dGVzUmVhZCA9IDBcbiAgICB0aGlzLmNvbnRlbnRMZW5ndGggPSAnJ1xuICAgIHRoaXMua2VlcEFsaXZlID0gJydcbiAgICB0aGlzLmNvbm5lY3Rpb24gPSAnJ1xuXG4gICAgYXNzZXJ0KHRoaXMuaGVhZGVycy5sZW5ndGggJSAyID09PSAwKVxuICAgIHRoaXMuaGVhZGVycyA9IFtdXG4gICAgdGhpcy5oZWFkZXJzU2l6ZSA9IDBcblxuICAgIGlmIChzdGF0dXNDb2RlIDwgMjAwKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogc2hvdWxkIGJlIGhhbmRsZWQgYnkgbGxodHRwPyAqL1xuICAgIGlmIChyZXF1ZXN0Lm1ldGhvZCAhPT0gJ0hFQUQnICYmIGNvbnRlbnRMZW5ndGggJiYgYnl0ZXNSZWFkICE9PSBwYXJzZUludChjb250ZW50TGVuZ3RoLCAxMCkpIHtcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBSZXNwb25zZUNvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKCkpXG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICByZXF1ZXN0Lm9uQ29tcGxldGUoaGVhZGVycylcblxuICAgIGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF0rK10gPSBudWxsXG5cbiAgICBpZiAoc29ja2V0W2tXcml0aW5nXSkge1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGNsaWVudFtrUnVubmluZ10sIDApXG4gICAgICAvLyBSZXNwb25zZSBjb21wbGV0ZWQgYmVmb3JlIHJlcXVlc3QuXG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgSW5mb3JtYXRpb25hbEVycm9yKCdyZXNldCcpKVxuICAgICAgcmV0dXJuIGNvbnN0YW50cy5FUlJPUi5QQVVTRURcbiAgICB9IGVsc2UgaWYgKCFzaG91bGRLZWVwQWxpdmUpIHtcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoJ3Jlc2V0JykpXG4gICAgICByZXR1cm4gY29uc3RhbnRzLkVSUk9SLlBBVVNFRFxuICAgIH0gZWxzZSBpZiAoc29ja2V0W2tSZXNldF0gJiYgY2xpZW50W2tSdW5uaW5nXSA9PT0gMCkge1xuICAgICAgLy8gRGVzdHJveSBzb2NrZXQgb25jZSBhbGwgcmVxdWVzdHMgaGF2ZSBjb21wbGV0ZWQuXG4gICAgICAvLyBUaGUgcmVxdWVzdCBhdCB0aGUgdGFpbCBvZiB0aGUgcGlwZWxpbmUgaXMgdGhlIG9uZVxuICAgICAgLy8gdGhhdCByZXF1ZXN0ZWQgcmVzZXQgYW5kIG5vIGZ1cnRoZXIgcmVxdWVzdHMgc2hvdWxkXG4gICAgICAvLyBoYXZlIGJlZW4gcXVldWVkIHNpbmNlIHRoZW4uXG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgSW5mb3JtYXRpb25hbEVycm9yKCdyZXNldCcpKVxuICAgICAgcmV0dXJuIGNvbnN0YW50cy5FUlJPUi5QQVVTRURcbiAgICB9IGVsc2UgaWYgKGNsaWVudFtrUGlwZWxpbmluZ10gPT09IDEpIHtcbiAgICAgIC8vIFdlIG11c3Qgd2FpdCBhIGZ1bGwgZXZlbnQgbG9vcCBjeWNsZSB0byByZXVzZSB0aGlzIHNvY2tldCB0byBtYWtlIHN1cmVcbiAgICAgIC8vIHRoYXQgbm9uLXNwZWMgY29tcGxpYW50IHNlcnZlcnMgYXJlIG5vdCBjbG9zaW5nIHRoZSBjb25uZWN0aW9uIGV2ZW4gaWYgdGhleVxuICAgICAgLy8gc2FpZCB0aGV5IHdvbid0LlxuICAgICAgc2V0SW1tZWRpYXRlKHJlc3VtZSwgY2xpZW50KVxuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bWUoY2xpZW50KVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBvblBhcnNlclRpbWVvdXQgKHBhcnNlcikge1xuICBjb25zdCB7IHNvY2tldCwgdGltZW91dFR5cGUsIGNsaWVudCB9ID0gcGFyc2VyXG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKHRpbWVvdXRUeXBlID09PSBUSU1FT1VUX0hFQURFUlMpIHtcbiAgICBpZiAoIXNvY2tldFtrV3JpdGluZ10gfHwgc29ja2V0LndyaXRhYmxlTmVlZERyYWluIHx8IGNsaWVudFtrUnVubmluZ10gPiAxKSB7XG4gICAgICBhc3NlcnQoIXBhcnNlci5wYXVzZWQsICdjYW5ub3QgYmUgcGF1c2VkIHdoaWxlIHdhaXRpbmcgZm9yIGhlYWRlcnMnKVxuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEhlYWRlcnNUaW1lb3V0RXJyb3IoKSlcbiAgICB9XG4gIH0gZWxzZSBpZiAodGltZW91dFR5cGUgPT09IFRJTUVPVVRfQk9EWSkge1xuICAgIGlmICghcGFyc2VyLnBhdXNlZCkge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEJvZHlUaW1lb3V0RXJyb3IoKSlcbiAgICB9XG4gIH0gZWxzZSBpZiAodGltZW91dFR5cGUgPT09IFRJTUVPVVRfSURMRSkge1xuICAgIGFzc2VydChjbGllbnRba1J1bm5pbmddID09PSAwICYmIGNsaWVudFtrS2VlcEFsaXZlVGltZW91dFZhbHVlXSlcbiAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgSW5mb3JtYXRpb25hbEVycm9yKCdzb2NrZXQgaWRsZSB0aW1lb3V0JykpXG4gIH1cbn1cblxuZnVuY3Rpb24gb25Tb2NrZXRSZWFkYWJsZSAoKSB7XG4gIGNvbnN0IHsgW2tQYXJzZXJdOiBwYXJzZXIgfSA9IHRoaXNcbiAgaWYgKHBhcnNlcikge1xuICAgIHBhcnNlci5yZWFkTW9yZSgpXG4gIH1cbn1cblxuZnVuY3Rpb24gb25Tb2NrZXRFcnJvciAoZXJyKSB7XG4gIGNvbnN0IHsgW2tDbGllbnRdOiBjbGllbnQsIFtrUGFyc2VyXTogcGFyc2VyIH0gPSB0aGlzXG5cbiAgYXNzZXJ0KGVyci5jb2RlICE9PSAnRVJSX1RMU19DRVJUX0FMVE5BTUVfSU5WQUxJRCcpXG5cbiAgaWYgKGNsaWVudFtrSFRUUENvbm5WZXJzaW9uXSAhPT0gJ2gyJykge1xuICAgIC8vIE9uIE1hYyBPUywgd2UgZ2V0IGFuIEVDT05OUkVTRVQgZXZlbiBpZiB0aGVyZSBpcyBhIGZ1bGwgYm9keSB0byBiZSBmb3J3YXJkZWRcbiAgICAvLyB0byB0aGUgdXNlci5cbiAgICBpZiAoZXJyLmNvZGUgPT09ICdFQ09OTlJFU0VUJyAmJiBwYXJzZXIuc3RhdHVzQ29kZSAmJiAhcGFyc2VyLnNob3VsZEtlZXBBbGl2ZSkge1xuICAgICAgLy8gV2UgdHJlYXQgYWxsIGluY29taW5nIGRhdGEgc28gZm9yIGFzIGEgdmFsaWQgcmVzcG9uc2UuXG4gICAgICBwYXJzZXIub25NZXNzYWdlQ29tcGxldGUoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICB9XG5cbiAgdGhpc1trRXJyb3JdID0gZXJyXG5cbiAgb25FcnJvcih0aGlzW2tDbGllbnRdLCBlcnIpXG59XG5cbmZ1bmN0aW9uIG9uRXJyb3IgKGNsaWVudCwgZXJyKSB7XG4gIGlmIChcbiAgICBjbGllbnRba1J1bm5pbmddID09PSAwICYmXG4gICAgZXJyLmNvZGUgIT09ICdVTkRfRVJSX0lORk8nICYmXG4gICAgZXJyLmNvZGUgIT09ICdVTkRfRVJSX1NPQ0tFVCdcbiAgKSB7XG4gICAgLy8gRXJyb3IgaXMgbm90IGNhdXNlZCBieSBydW5uaW5nIHJlcXVlc3QgYW5kIG5vdCBhIHJlY292ZXJhYmxlXG4gICAgLy8gc29ja2V0IGVycm9yLlxuXG4gICAgYXNzZXJ0KGNsaWVudFtrUGVuZGluZ0lkeF0gPT09IGNsaWVudFtrUnVubmluZ0lkeF0pXG5cbiAgICBjb25zdCByZXF1ZXN0cyA9IGNsaWVudFtrUXVldWVdLnNwbGljZShjbGllbnRba1J1bm5pbmdJZHhdKVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVxdWVzdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSByZXF1ZXN0c1tpXVxuICAgICAgZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyKVxuICAgIH1cbiAgICBhc3NlcnQoY2xpZW50W2tTaXplXSA9PT0gMClcbiAgfVxufVxuXG5mdW5jdGlvbiBvblNvY2tldEVuZCAoKSB7XG4gIGNvbnN0IHsgW2tQYXJzZXJdOiBwYXJzZXIsIFtrQ2xpZW50XTogY2xpZW50IH0gPSB0aGlzXG5cbiAgaWYgKGNsaWVudFtrSFRUUENvbm5WZXJzaW9uXSAhPT0gJ2gyJykge1xuICAgIGlmIChwYXJzZXIuc3RhdHVzQ29kZSAmJiAhcGFyc2VyLnNob3VsZEtlZXBBbGl2ZSkge1xuICAgICAgLy8gV2UgdHJlYXQgYWxsIGluY29taW5nIGRhdGEgc28gZmFyIGFzIGEgdmFsaWQgcmVzcG9uc2UuXG4gICAgICBwYXJzZXIub25NZXNzYWdlQ29tcGxldGUoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICB9XG5cbiAgdXRpbC5kZXN0cm95KHRoaXMsIG5ldyBTb2NrZXRFcnJvcignb3RoZXIgc2lkZSBjbG9zZWQnLCB1dGlsLmdldFNvY2tldEluZm8odGhpcykpKVxufVxuXG5mdW5jdGlvbiBvblNvY2tldENsb3NlICgpIHtcbiAgY29uc3QgeyBba0NsaWVudF06IGNsaWVudCwgW2tQYXJzZXJdOiBwYXJzZXIgfSA9IHRoaXNcblxuICBpZiAoY2xpZW50W2tIVFRQQ29ublZlcnNpb25dID09PSAnaDEnICYmIHBhcnNlcikge1xuICAgIGlmICghdGhpc1trRXJyb3JdICYmIHBhcnNlci5zdGF0dXNDb2RlICYmICFwYXJzZXIuc2hvdWxkS2VlcEFsaXZlKSB7XG4gICAgICAvLyBXZSB0cmVhdCBhbGwgaW5jb21pbmcgZGF0YSBzbyBmYXIgYXMgYSB2YWxpZCByZXNwb25zZS5cbiAgICAgIHBhcnNlci5vbk1lc3NhZ2VDb21wbGV0ZSgpXG4gICAgfVxuXG4gICAgdGhpc1trUGFyc2VyXS5kZXN0cm95KClcbiAgICB0aGlzW2tQYXJzZXJdID0gbnVsbFxuICB9XG5cbiAgY29uc3QgZXJyID0gdGhpc1trRXJyb3JdIHx8IG5ldyBTb2NrZXRFcnJvcignY2xvc2VkJywgdXRpbC5nZXRTb2NrZXRJbmZvKHRoaXMpKVxuXG4gIGNsaWVudFtrU29ja2V0XSA9IG51bGxcblxuICBpZiAoY2xpZW50LmRlc3Ryb3llZCkge1xuICAgIGFzc2VydChjbGllbnRba1BlbmRpbmddID09PSAwKVxuXG4gICAgLy8gRmFpbCBlbnRpcmUgcXVldWUuXG4gICAgY29uc3QgcmVxdWVzdHMgPSBjbGllbnRba1F1ZXVlXS5zcGxpY2UoY2xpZW50W2tSdW5uaW5nSWR4XSlcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcXVlc3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCByZXF1ZXN0ID0gcmVxdWVzdHNbaV1cbiAgICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIGVycilcbiAgICB9XG4gIH0gZWxzZSBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDAgJiYgZXJyLmNvZGUgIT09ICdVTkRfRVJSX0lORk8nKSB7XG4gICAgLy8gRmFpbCBoZWFkIG9mIHBpcGVsaW5lLlxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdXVxuICAgIGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF0rK10gPSBudWxsXG5cbiAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIpXG4gIH1cblxuICBjbGllbnRba1BlbmRpbmdJZHhdID0gY2xpZW50W2tSdW5uaW5nSWR4XVxuXG4gIGFzc2VydChjbGllbnRba1J1bm5pbmddID09PSAwKVxuXG4gIGNsaWVudC5lbWl0KCdkaXNjb25uZWN0JywgY2xpZW50W2tVcmxdLCBbY2xpZW50XSwgZXJyKVxuXG4gIHJlc3VtZShjbGllbnQpXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNvbm5lY3QgKGNsaWVudCkge1xuICBhc3NlcnQoIWNsaWVudFtrQ29ubmVjdGluZ10pXG4gIGFzc2VydCghY2xpZW50W2tTb2NrZXRdKVxuXG4gIGxldCB7IGhvc3QsIGhvc3RuYW1lLCBwcm90b2NvbCwgcG9ydCB9ID0gY2xpZW50W2tVcmxdXG5cbiAgLy8gUmVzb2x2ZSBpcHY2XG4gIGlmIChob3N0bmFtZVswXSA9PT0gJ1snKSB7XG4gICAgY29uc3QgaWR4ID0gaG9zdG5hbWUuaW5kZXhPZignXScpXG5cbiAgICBhc3NlcnQoaWR4ICE9PSAtMSlcbiAgICBjb25zdCBpcCA9IGhvc3RuYW1lLnN1YnN0cmluZygxLCBpZHgpXG5cbiAgICBhc3NlcnQobmV0LmlzSVAoaXApKVxuICAgIGhvc3RuYW1lID0gaXBcbiAgfVxuXG4gIGNsaWVudFtrQ29ubmVjdGluZ10gPSB0cnVlXG5cbiAgaWYgKGNoYW5uZWxzLmJlZm9yZUNvbm5lY3QuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICBjaGFubmVscy5iZWZvcmVDb25uZWN0LnB1Ymxpc2goe1xuICAgICAgY29ubmVjdFBhcmFtczoge1xuICAgICAgICBob3N0LFxuICAgICAgICBob3N0bmFtZSxcbiAgICAgICAgcHJvdG9jb2wsXG4gICAgICAgIHBvcnQsXG4gICAgICAgIHNlcnZlcm5hbWU6IGNsaWVudFtrU2VydmVyTmFtZV0sXG4gICAgICAgIGxvY2FsQWRkcmVzczogY2xpZW50W2tMb2NhbEFkZHJlc3NdXG4gICAgICB9LFxuICAgICAgY29ubmVjdG9yOiBjbGllbnRba0Nvbm5lY3Rvcl1cbiAgICB9KVxuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBzb2NrZXQgPSBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjbGllbnRba0Nvbm5lY3Rvcl0oe1xuICAgICAgICBob3N0LFxuICAgICAgICBob3N0bmFtZSxcbiAgICAgICAgcHJvdG9jb2wsXG4gICAgICAgIHBvcnQsXG4gICAgICAgIHNlcnZlcm5hbWU6IGNsaWVudFtrU2VydmVyTmFtZV0sXG4gICAgICAgIGxvY2FsQWRkcmVzczogY2xpZW50W2tMb2NhbEFkZHJlc3NdXG4gICAgICB9LCAoZXJyLCBzb2NrZXQpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJlamVjdChlcnIpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzb2x2ZShzb2NrZXQpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSlcblxuICAgIGlmIChjbGllbnQuZGVzdHJveWVkKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0Lm9uKCdlcnJvcicsICgpID0+IHt9KSwgbmV3IENsaWVudERlc3Ryb3llZEVycm9yKCkpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjbGllbnRba0Nvbm5lY3RpbmddID0gZmFsc2VcblxuICAgIGFzc2VydChzb2NrZXQpXG5cbiAgICBjb25zdCBpc0gyID0gc29ja2V0LmFscG5Qcm90b2NvbCA9PT0gJ2gyJ1xuICAgIGlmIChpc0gyKSB7XG4gICAgICBpZiAoIWgyRXhwZXJpbWVudGFsV2FybmVkKSB7XG4gICAgICAgIGgyRXhwZXJpbWVudGFsV2FybmVkID0gdHJ1ZVxuICAgICAgICBwcm9jZXNzLmVtaXRXYXJuaW5nKCdIMiBzdXBwb3J0IGlzIGV4cGVyaW1lbnRhbCwgZXhwZWN0IHRoZW0gdG8gY2hhbmdlIGF0IGFueSB0aW1lLicsIHtcbiAgICAgICAgICBjb2RlOiAnVU5ESUNJLUgyJ1xuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBzZXNzaW9uID0gaHR0cDIuY29ubmVjdChjbGllbnRba1VybF0sIHtcbiAgICAgICAgY3JlYXRlQ29ubmVjdGlvbjogKCkgPT4gc29ja2V0LFxuICAgICAgICBwZWVyTWF4Q29uY3VycmVudFN0cmVhbXM6IGNsaWVudFtrSFRUUDJTZXNzaW9uU3RhdGVdLm1heENvbmN1cnJlbnRTdHJlYW1zXG4gICAgICB9KVxuXG4gICAgICBjbGllbnRba0hUVFBDb25uVmVyc2lvbl0gPSAnaDInXG4gICAgICBzZXNzaW9uW2tDbGllbnRdID0gY2xpZW50XG4gICAgICBzZXNzaW9uW2tTb2NrZXRdID0gc29ja2V0XG4gICAgICBzZXNzaW9uLm9uKCdlcnJvcicsIG9uSHR0cDJTZXNzaW9uRXJyb3IpXG4gICAgICBzZXNzaW9uLm9uKCdmcmFtZUVycm9yJywgb25IdHRwMkZyYW1lRXJyb3IpXG4gICAgICBzZXNzaW9uLm9uKCdlbmQnLCBvbkh0dHAyU2Vzc2lvbkVuZClcbiAgICAgIHNlc3Npb24ub24oJ2dvYXdheScsIG9uSFRUUDJHb0F3YXkpXG4gICAgICBzZXNzaW9uLm9uKCdjbG9zZScsIG9uU29ja2V0Q2xvc2UpXG4gICAgICBzZXNzaW9uLnVucmVmKClcblxuICAgICAgY2xpZW50W2tIVFRQMlNlc3Npb25dID0gc2Vzc2lvblxuICAgICAgc29ja2V0W2tIVFRQMlNlc3Npb25dID0gc2Vzc2lvblxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWxsaHR0cEluc3RhbmNlKSB7XG4gICAgICAgIGxsaHR0cEluc3RhbmNlID0gYXdhaXQgbGxodHRwUHJvbWlzZVxuICAgICAgICBsbGh0dHBQcm9taXNlID0gbnVsbFxuICAgICAgfVxuXG4gICAgICBzb2NrZXRba05vUmVmXSA9IGZhbHNlXG4gICAgICBzb2NrZXRba1dyaXRpbmddID0gZmFsc2VcbiAgICAgIHNvY2tldFtrUmVzZXRdID0gZmFsc2VcbiAgICAgIHNvY2tldFtrQmxvY2tpbmddID0gZmFsc2VcbiAgICAgIHNvY2tldFtrUGFyc2VyXSA9IG5ldyBQYXJzZXIoY2xpZW50LCBzb2NrZXQsIGxsaHR0cEluc3RhbmNlKVxuICAgIH1cblxuICAgIHNvY2tldFtrQ291bnRlcl0gPSAwXG4gICAgc29ja2V0W2tNYXhSZXF1ZXN0c10gPSBjbGllbnRba01heFJlcXVlc3RzXVxuICAgIHNvY2tldFtrQ2xpZW50XSA9IGNsaWVudFxuICAgIHNvY2tldFtrRXJyb3JdID0gbnVsbFxuXG4gICAgc29ja2V0XG4gICAgICAub24oJ2Vycm9yJywgb25Tb2NrZXRFcnJvcilcbiAgICAgIC5vbigncmVhZGFibGUnLCBvblNvY2tldFJlYWRhYmxlKVxuICAgICAgLm9uKCdlbmQnLCBvblNvY2tldEVuZClcbiAgICAgIC5vbignY2xvc2UnLCBvblNvY2tldENsb3NlKVxuXG4gICAgY2xpZW50W2tTb2NrZXRdID0gc29ja2V0XG5cbiAgICBpZiAoY2hhbm5lbHMuY29ubmVjdGVkLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICBjaGFubmVscy5jb25uZWN0ZWQucHVibGlzaCh7XG4gICAgICAgIGNvbm5lY3RQYXJhbXM6IHtcbiAgICAgICAgICBob3N0LFxuICAgICAgICAgIGhvc3RuYW1lLFxuICAgICAgICAgIHByb3RvY29sLFxuICAgICAgICAgIHBvcnQsXG4gICAgICAgICAgc2VydmVybmFtZTogY2xpZW50W2tTZXJ2ZXJOYW1lXSxcbiAgICAgICAgICBsb2NhbEFkZHJlc3M6IGNsaWVudFtrTG9jYWxBZGRyZXNzXVxuICAgICAgICB9LFxuICAgICAgICBjb25uZWN0b3I6IGNsaWVudFtrQ29ubmVjdG9yXSxcbiAgICAgICAgc29ja2V0XG4gICAgICB9KVxuICAgIH1cbiAgICBjbGllbnQuZW1pdCgnY29ubmVjdCcsIGNsaWVudFtrVXJsXSwgW2NsaWVudF0pXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChjbGllbnQuZGVzdHJveWVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjbGllbnRba0Nvbm5lY3RpbmddID0gZmFsc2VcblxuICAgIGlmIChjaGFubmVscy5jb25uZWN0RXJyb3IuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICAgIGNoYW5uZWxzLmNvbm5lY3RFcnJvci5wdWJsaXNoKHtcbiAgICAgICAgY29ubmVjdFBhcmFtczoge1xuICAgICAgICAgIGhvc3QsXG4gICAgICAgICAgaG9zdG5hbWUsXG4gICAgICAgICAgcHJvdG9jb2wsXG4gICAgICAgICAgcG9ydCxcbiAgICAgICAgICBzZXJ2ZXJuYW1lOiBjbGllbnRba1NlcnZlck5hbWVdLFxuICAgICAgICAgIGxvY2FsQWRkcmVzczogY2xpZW50W2tMb2NhbEFkZHJlc3NdXG4gICAgICAgIH0sXG4gICAgICAgIGNvbm5lY3RvcjogY2xpZW50W2tDb25uZWN0b3JdLFxuICAgICAgICBlcnJvcjogZXJyXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChlcnIuY29kZSA9PT0gJ0VSUl9UTFNfQ0VSVF9BTFROQU1FX0lOVkFMSUQnKSB7XG4gICAgICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA9PT0gMClcbiAgICAgIHdoaWxlIChjbGllbnRba1BlbmRpbmddID4gMCAmJiBjbGllbnRba1F1ZXVlXVtjbGllbnRba1BlbmRpbmdJZHhdXS5zZXJ2ZXJuYW1lID09PSBjbGllbnRba1NlcnZlck5hbWVdKSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1BlbmRpbmdJZHhdKytdXG4gICAgICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIGVycilcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgb25FcnJvcihjbGllbnQsIGVycilcbiAgICB9XG5cbiAgICBjbGllbnQuZW1pdCgnY29ubmVjdGlvbkVycm9yJywgY2xpZW50W2tVcmxdLCBbY2xpZW50XSwgZXJyKVxuICB9XG5cbiAgcmVzdW1lKGNsaWVudClcbn1cblxuZnVuY3Rpb24gZW1pdERyYWluIChjbGllbnQpIHtcbiAgY2xpZW50W2tOZWVkRHJhaW5dID0gMFxuICBjbGllbnQuZW1pdCgnZHJhaW4nLCBjbGllbnRba1VybF0sIFtjbGllbnRdKVxufVxuXG5mdW5jdGlvbiByZXN1bWUgKGNsaWVudCwgc3luYykge1xuICBpZiAoY2xpZW50W2tSZXN1bWluZ10gPT09IDIpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGNsaWVudFtrUmVzdW1pbmddID0gMlxuXG4gIF9yZXN1bWUoY2xpZW50LCBzeW5jKVxuICBjbGllbnRba1Jlc3VtaW5nXSA9IDBcblxuICBpZiAoY2xpZW50W2tSdW5uaW5nSWR4XSA+IDI1Nikge1xuICAgIGNsaWVudFtrUXVldWVdLnNwbGljZSgwLCBjbGllbnRba1J1bm5pbmdJZHhdKVxuICAgIGNsaWVudFtrUGVuZGluZ0lkeF0gLT0gY2xpZW50W2tSdW5uaW5nSWR4XVxuICAgIGNsaWVudFtrUnVubmluZ0lkeF0gPSAwXG4gIH1cbn1cblxuZnVuY3Rpb24gX3Jlc3VtZSAoY2xpZW50LCBzeW5jKSB7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgaWYgKGNsaWVudC5kZXN0cm95ZWQpIHtcbiAgICAgIGFzc2VydChjbGllbnRba1BlbmRpbmddID09PSAwKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGNsaWVudFtrQ2xvc2VkUmVzb2x2ZV0gJiYgIWNsaWVudFtrU2l6ZV0pIHtcbiAgICAgIGNsaWVudFtrQ2xvc2VkUmVzb2x2ZV0oKVxuICAgICAgY2xpZW50W2tDbG9zZWRSZXNvbHZlXSA9IG51bGxcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHNvY2tldCA9IGNsaWVudFtrU29ja2V0XVxuXG4gICAgaWYgKHNvY2tldCAmJiAhc29ja2V0LmRlc3Ryb3llZCAmJiBzb2NrZXQuYWxwblByb3RvY29sICE9PSAnaDInKSB7XG4gICAgICBpZiAoY2xpZW50W2tTaXplXSA9PT0gMCkge1xuICAgICAgICBpZiAoIXNvY2tldFtrTm9SZWZdICYmIHNvY2tldC51bnJlZikge1xuICAgICAgICAgIHNvY2tldC51bnJlZigpXG4gICAgICAgICAgc29ja2V0W2tOb1JlZl0gPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoc29ja2V0W2tOb1JlZl0gJiYgc29ja2V0LnJlZikge1xuICAgICAgICBzb2NrZXQucmVmKClcbiAgICAgICAgc29ja2V0W2tOb1JlZl0gPSBmYWxzZVxuICAgICAgfVxuXG4gICAgICBpZiAoY2xpZW50W2tTaXplXSA9PT0gMCkge1xuICAgICAgICBpZiAoc29ja2V0W2tQYXJzZXJdLnRpbWVvdXRUeXBlICE9PSBUSU1FT1VUX0lETEUpIHtcbiAgICAgICAgICBzb2NrZXRba1BhcnNlcl0uc2V0VGltZW91dChjbGllbnRba0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZV0sIFRJTUVPVVRfSURMRSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjbGllbnRba1J1bm5pbmddID4gMCAmJiBzb2NrZXRba1BhcnNlcl0uc3RhdHVzQ29kZSA8IDIwMCkge1xuICAgICAgICBpZiAoc29ja2V0W2tQYXJzZXJdLnRpbWVvdXRUeXBlICE9PSBUSU1FT1VUX0hFQURFUlMpIHtcbiAgICAgICAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XV1cbiAgICAgICAgICBjb25zdCBoZWFkZXJzVGltZW91dCA9IHJlcXVlc3QuaGVhZGVyc1RpbWVvdXQgIT0gbnVsbFxuICAgICAgICAgICAgPyByZXF1ZXN0LmhlYWRlcnNUaW1lb3V0XG4gICAgICAgICAgICA6IGNsaWVudFtrSGVhZGVyc1RpbWVvdXRdXG4gICAgICAgICAgc29ja2V0W2tQYXJzZXJdLnNldFRpbWVvdXQoaGVhZGVyc1RpbWVvdXQsIFRJTUVPVVRfSEVBREVSUylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjbGllbnRba0J1c3ldKSB7XG4gICAgICBjbGllbnRba05lZWREcmFpbl0gPSAyXG4gICAgfSBlbHNlIGlmIChjbGllbnRba05lZWREcmFpbl0gPT09IDIpIHtcbiAgICAgIGlmIChzeW5jKSB7XG4gICAgICAgIGNsaWVudFtrTmVlZERyYWluXSA9IDFcbiAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhlbWl0RHJhaW4sIGNsaWVudClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVtaXREcmFpbihjbGllbnQpXG4gICAgICB9XG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGlmIChjbGllbnRba1BlbmRpbmddID09PSAwKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tSdW5uaW5nXSA+PSAoY2xpZW50W2tQaXBlbGluaW5nXSB8fCAxKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdCA9IGNsaWVudFtrUXVldWVdW2NsaWVudFtrUGVuZGluZ0lkeF1dXG5cbiAgICBpZiAoY2xpZW50W2tVcmxdLnByb3RvY29sID09PSAnaHR0cHM6JyAmJiBjbGllbnRba1NlcnZlck5hbWVdICE9PSByZXF1ZXN0LnNlcnZlcm5hbWUpIHtcbiAgICAgIGlmIChjbGllbnRba1J1bm5pbmddID4gMCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY2xpZW50W2tTZXJ2ZXJOYW1lXSA9IHJlcXVlc3Quc2VydmVybmFtZVxuXG4gICAgICBpZiAoc29ja2V0ICYmIHNvY2tldC5zZXJ2ZXJuYW1lICE9PSByZXF1ZXN0LnNlcnZlcm5hbWUpIHtcbiAgICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEluZm9ybWF0aW9uYWxFcnJvcignc2VydmVybmFtZSBjaGFuZ2VkJykpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjbGllbnRba0Nvbm5lY3RpbmddKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIXNvY2tldCAmJiAhY2xpZW50W2tIVFRQMlNlc3Npb25dKSB7XG4gICAgICBjb25uZWN0KGNsaWVudClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChzb2NrZXQuZGVzdHJveWVkIHx8IHNvY2tldFtrV3JpdGluZ10gfHwgc29ja2V0W2tSZXNldF0gfHwgc29ja2V0W2tCbG9ja2luZ10pIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChjbGllbnRba1J1bm5pbmddID4gMCAmJiAhcmVxdWVzdC5pZGVtcG90ZW50KSB7XG4gICAgICAvLyBOb24taWRlbXBvdGVudCByZXF1ZXN0IGNhbm5vdCBiZSByZXRyaWVkLlxuICAgICAgLy8gRW5zdXJlIHRoYXQgbm8gb3RoZXIgcmVxdWVzdHMgYXJlIGluZmxpZ2h0IGFuZFxuICAgICAgLy8gY291bGQgY2F1c2UgZmFpbHVyZS5cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChjbGllbnRba1J1bm5pbmddID4gMCAmJiAocmVxdWVzdC51cGdyYWRlIHx8IHJlcXVlc3QubWV0aG9kID09PSAnQ09OTkVDVCcpKSB7XG4gICAgICAvLyBEb24ndCBkaXNwYXRjaCBhbiB1cGdyYWRlIHVudGlsIGFsbCBwcmVjZWRpbmcgcmVxdWVzdHMgaGF2ZSBjb21wbGV0ZWQuXG4gICAgICAvLyBBIG1pc2JlaGF2aW5nIHNlcnZlciBtaWdodCB1cGdyYWRlIHRoZSBjb25uZWN0aW9uIGJlZm9yZSBhbGwgcGlwZWxpbmVkXG4gICAgICAvLyByZXF1ZXN0IGhhcyBjb21wbGV0ZWQuXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDAgJiYgdXRpbC5ib2R5TGVuZ3RoKHJlcXVlc3QuYm9keSkgIT09IDAgJiZcbiAgICAgICh1dGlsLmlzU3RyZWFtKHJlcXVlc3QuYm9keSkgfHwgdXRpbC5pc0FzeW5jSXRlcmFibGUocmVxdWVzdC5ib2R5KSkpIHtcbiAgICAgIC8vIFJlcXVlc3Qgd2l0aCBzdHJlYW0gb3IgaXRlcmF0b3IgYm9keSBjYW4gZXJyb3Igd2hpbGUgb3RoZXIgcmVxdWVzdHNcbiAgICAgIC8vIGFyZSBpbmZsaWdodCBhbmQgaW5kaXJlY3RseSBlcnJvciB0aG9zZSBhcyB3ZWxsLlxuICAgICAgLy8gRW5zdXJlIHRoaXMgZG9lc24ndCBoYXBwZW4gYnkgd2FpdGluZyBmb3IgaW5mbGlnaHRcbiAgICAgIC8vIHRvIGNvbXBsZXRlIGJlZm9yZSBkaXNwYXRjaGluZy5cblxuICAgICAgLy8gUmVxdWVzdCB3aXRoIHN0cmVhbSBvciBpdGVyYXRvciBib2R5IGNhbm5vdCBiZSByZXRyaWVkLlxuICAgICAgLy8gRW5zdXJlIHRoYXQgbm8gb3RoZXIgcmVxdWVzdHMgYXJlIGluZmxpZ2h0IGFuZFxuICAgICAgLy8gY291bGQgY2F1c2UgZmFpbHVyZS5cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghcmVxdWVzdC5hYm9ydGVkICYmIHdyaXRlKGNsaWVudCwgcmVxdWVzdCkpIHtcbiAgICAgIGNsaWVudFtrUGVuZGluZ0lkeF0rK1xuICAgIH0gZWxzZSB7XG4gICAgICBjbGllbnRba1F1ZXVlXS5zcGxpY2UoY2xpZW50W2tQZW5kaW5nSWR4XSwgMSlcbiAgICB9XG4gIH1cbn1cblxuLy8gaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzcyMzAjc2VjdGlvbi0zLjMuMlxuZnVuY3Rpb24gc2hvdWxkU2VuZENvbnRlbnRMZW5ndGggKG1ldGhvZCkge1xuICByZXR1cm4gbWV0aG9kICE9PSAnR0VUJyAmJiBtZXRob2QgIT09ICdIRUFEJyAmJiBtZXRob2QgIT09ICdPUFRJT05TJyAmJiBtZXRob2QgIT09ICdUUkFDRScgJiYgbWV0aG9kICE9PSAnQ09OTkVDVCdcbn1cblxuZnVuY3Rpb24gd3JpdGUgKGNsaWVudCwgcmVxdWVzdCkge1xuICBpZiAoY2xpZW50W2tIVFRQQ29ublZlcnNpb25dID09PSAnaDInKSB7XG4gICAgd3JpdGVIMihjbGllbnQsIGNsaWVudFtrSFRUUDJTZXNzaW9uXSwgcmVxdWVzdClcbiAgICByZXR1cm5cbiAgfVxuXG4gIGNvbnN0IHsgYm9keSwgbWV0aG9kLCBwYXRoLCBob3N0LCB1cGdyYWRlLCBoZWFkZXJzLCBibG9ja2luZywgcmVzZXQgfSA9IHJlcXVlc3RcblxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTQuMy4xXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNC4zLjJcbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi00LjMuNVxuXG4gIC8vIFNlbmRpbmcgYSBwYXlsb2FkIGJvZHkgb24gYSByZXF1ZXN0IHRoYXQgZG9lcyBub3RcbiAgLy8gZXhwZWN0IGl0IGNhbiBjYXVzZSB1bmRlZmluZWQgYmVoYXZpb3Igb24gc29tZVxuICAvLyBzZXJ2ZXJzIGFuZCBjb3JydXB0IGNvbm5lY3Rpb24gc3RhdGUuIERvIG5vdFxuICAvLyByZS11c2UgdGhlIGNvbm5lY3Rpb24gZm9yIGZ1cnRoZXIgcmVxdWVzdHMuXG5cbiAgY29uc3QgZXhwZWN0c1BheWxvYWQgPSAoXG4gICAgbWV0aG9kID09PSAnUFVUJyB8fFxuICAgIG1ldGhvZCA9PT0gJ1BPU1QnIHx8XG4gICAgbWV0aG9kID09PSAnUEFUQ0gnXG4gIClcblxuICBpZiAoYm9keSAmJiB0eXBlb2YgYm9keS5yZWFkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gVHJ5IHRvIHJlYWQgRU9GIGluIG9yZGVyIHRvIGdldCBsZW5ndGguXG4gICAgYm9keS5yZWFkKDApXG4gIH1cblxuICBjb25zdCBib2R5TGVuZ3RoID0gdXRpbC5ib2R5TGVuZ3RoKGJvZHkpXG5cbiAgbGV0IGNvbnRlbnRMZW5ndGggPSBib2R5TGVuZ3RoXG5cbiAgaWYgKGNvbnRlbnRMZW5ndGggPT09IG51bGwpIHtcbiAgICBjb250ZW50TGVuZ3RoID0gcmVxdWVzdC5jb250ZW50TGVuZ3RoXG4gIH1cblxuICBpZiAoY29udGVudExlbmd0aCA9PT0gMCAmJiAhZXhwZWN0c1BheWxvYWQpIHtcbiAgICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMCNzZWN0aW9uLTMuMy4yXG4gICAgLy8gQSB1c2VyIGFnZW50IFNIT1VMRCBOT1Qgc2VuZCBhIENvbnRlbnQtTGVuZ3RoIGhlYWRlciBmaWVsZCB3aGVuXG4gICAgLy8gdGhlIHJlcXVlc3QgbWVzc2FnZSBkb2VzIG5vdCBjb250YWluIGEgcGF5bG9hZCBib2R5IGFuZCB0aGUgbWV0aG9kXG4gICAgLy8gc2VtYW50aWNzIGRvIG5vdCBhbnRpY2lwYXRlIHN1Y2ggYSBib2R5LlxuXG4gICAgY29udGVudExlbmd0aCA9IG51bGxcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8yMDQ2XG4gIC8vIEEgdXNlciBhZ2VudCBtYXkgc2VuZCBhIENvbnRlbnQtTGVuZ3RoIGhlYWRlciB3aXRoIDAgdmFsdWUsIHRoaXMgc2hvdWxkIGJlIGFsbG93ZWQuXG4gIGlmIChzaG91bGRTZW5kQ29udGVudExlbmd0aChtZXRob2QpICYmIGNvbnRlbnRMZW5ndGggPiAwICYmIHJlcXVlc3QuY29udGVudExlbmd0aCAhPT0gbnVsbCAmJiByZXF1ZXN0LmNvbnRlbnRMZW5ndGggIT09IGNvbnRlbnRMZW5ndGgpIHtcbiAgICBpZiAoY2xpZW50W2tTdHJpY3RDb250ZW50TGVuZ3RoXSkge1xuICAgICAgZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgbmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpKVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgcHJvY2Vzcy5lbWl0V2FybmluZyhuZXcgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKCkpXG4gIH1cblxuICBjb25zdCBzb2NrZXQgPSBjbGllbnRba1NvY2tldF1cblxuICB0cnkge1xuICAgIHJlcXVlc3Qub25Db25uZWN0KChlcnIpID0+IHtcbiAgICAgIGlmIChyZXF1ZXN0LmFib3J0ZWQgfHwgcmVxdWVzdC5jb21wbGV0ZWQpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIGVyciB8fCBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpKVxuXG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgSW5mb3JtYXRpb25hbEVycm9yKCdhYm9ydGVkJykpXG4gICAgfSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyKVxuICB9XG5cbiAgaWYgKHJlcXVlc3QuYWJvcnRlZCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgaWYgKG1ldGhvZCA9PT0gJ0hFQUQnKSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21jb2xsaW5hL3VuZGljaS9pc3N1ZXMvMjU4XG4gICAgLy8gQ2xvc2UgYWZ0ZXIgYSBIRUFEIHJlcXVlc3QgdG8gaW50ZXJvcCB3aXRoIG1pc2JlaGF2aW5nIHNlcnZlcnNcbiAgICAvLyB0aGF0IG1heSBzZW5kIGEgYm9keSBpbiB0aGUgcmVzcG9uc2UuXG5cbiAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgfVxuXG4gIGlmICh1cGdyYWRlIHx8IG1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSB7XG4gICAgLy8gT24gQ09OTkVDVCBvciB1cGdyYWRlLCBibG9jayBwaXBlbGluZSBmcm9tIGRpc3BhdGNoaW5nIGZ1cnRoZXJcbiAgICAvLyByZXF1ZXN0cyBvbiB0aGlzIGNvbm5lY3Rpb24uXG5cbiAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgfVxuXG4gIGlmIChyZXNldCAhPSBudWxsKSB7XG4gICAgc29ja2V0W2tSZXNldF0gPSByZXNldFxuICB9XG5cbiAgaWYgKGNsaWVudFtrTWF4UmVxdWVzdHNdICYmIHNvY2tldFtrQ291bnRlcl0rKyA+PSBjbGllbnRba01heFJlcXVlc3RzXSkge1xuICAgIHNvY2tldFtrUmVzZXRdID0gdHJ1ZVxuICB9XG5cbiAgaWYgKGJsb2NraW5nKSB7XG4gICAgc29ja2V0W2tCbG9ja2luZ10gPSB0cnVlXG4gIH1cblxuICBsZXQgaGVhZGVyID0gYCR7bWV0aG9kfSAke3BhdGh9IEhUVFAvMS4xXFxyXFxuYFxuXG4gIGlmICh0eXBlb2YgaG9zdCA9PT0gJ3N0cmluZycpIHtcbiAgICBoZWFkZXIgKz0gYGhvc3Q6ICR7aG9zdH1cXHJcXG5gXG4gIH0gZWxzZSB7XG4gICAgaGVhZGVyICs9IGNsaWVudFtrSG9zdEhlYWRlcl1cbiAgfVxuXG4gIGlmICh1cGdyYWRlKSB7XG4gICAgaGVhZGVyICs9IGBjb25uZWN0aW9uOiB1cGdyYWRlXFxyXFxudXBncmFkZTogJHt1cGdyYWRlfVxcclxcbmBcbiAgfSBlbHNlIGlmIChjbGllbnRba1BpcGVsaW5pbmddICYmICFzb2NrZXRba1Jlc2V0XSkge1xuICAgIGhlYWRlciArPSAnY29ubmVjdGlvbjoga2VlcC1hbGl2ZVxcclxcbidcbiAgfSBlbHNlIHtcbiAgICBoZWFkZXIgKz0gJ2Nvbm5lY3Rpb246IGNsb3NlXFxyXFxuJ1xuICB9XG5cbiAgaWYgKGhlYWRlcnMpIHtcbiAgICBoZWFkZXIgKz0gaGVhZGVyc1xuICB9XG5cbiAgaWYgKGNoYW5uZWxzLnNlbmRIZWFkZXJzLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgY2hhbm5lbHMuc2VuZEhlYWRlcnMucHVibGlzaCh7IHJlcXVlc3QsIGhlYWRlcnM6IGhlYWRlciwgc29ja2V0IH0pXG4gIH1cblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogYXNzZXJ0aW9uICovXG4gIGlmICghYm9keSB8fCBib2R5TGVuZ3RoID09PSAwKSB7XG4gICAgaWYgKGNvbnRlbnRMZW5ndGggPT09IDApIHtcbiAgICAgIHNvY2tldC53cml0ZShgJHtoZWFkZXJ9Y29udGVudC1sZW5ndGg6IDBcXHJcXG5cXHJcXG5gLCAnbGF0aW4xJylcbiAgICB9IGVsc2Uge1xuICAgICAgYXNzZXJ0KGNvbnRlbnRMZW5ndGggPT09IG51bGwsICdubyBib2R5IG11c3Qgbm90IGhhdmUgY29udGVudCBsZW5ndGgnKVxuICAgICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn1cXHJcXG5gLCAnbGF0aW4xJylcbiAgICB9XG4gICAgcmVxdWVzdC5vblJlcXVlc3RTZW50KClcbiAgfSBlbHNlIGlmICh1dGlsLmlzQnVmZmVyKGJvZHkpKSB7XG4gICAgYXNzZXJ0KGNvbnRlbnRMZW5ndGggPT09IGJvZHkuYnl0ZUxlbmd0aCwgJ2J1ZmZlciBib2R5IG11c3QgaGF2ZSBjb250ZW50IGxlbmd0aCcpXG5cbiAgICBzb2NrZXQuY29yaygpXG4gICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn1jb250ZW50LWxlbmd0aDogJHtjb250ZW50TGVuZ3RofVxcclxcblxcclxcbmAsICdsYXRpbjEnKVxuICAgIHNvY2tldC53cml0ZShib2R5KVxuICAgIHNvY2tldC51bmNvcmsoKVxuICAgIHJlcXVlc3Qub25Cb2R5U2VudChib2R5KVxuICAgIHJlcXVlc3Qub25SZXF1ZXN0U2VudCgpXG4gICAgaWYgKCFleHBlY3RzUGF5bG9hZCkge1xuICAgICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gICAgfVxuICB9IGVsc2UgaWYgKHV0aWwuaXNCbG9iTGlrZShib2R5KSkge1xuICAgIGlmICh0eXBlb2YgYm9keS5zdHJlYW0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHdyaXRlSXRlcmFibGUoeyBib2R5OiBib2R5LnN0cmVhbSgpLCBjbGllbnQsIHJlcXVlc3QsIHNvY2tldCwgY29udGVudExlbmd0aCwgaGVhZGVyLCBleHBlY3RzUGF5bG9hZCB9KVxuICAgIH0gZWxzZSB7XG4gICAgICB3cml0ZUJsb2IoeyBib2R5LCBjbGllbnQsIHJlcXVlc3QsIHNvY2tldCwgY29udGVudExlbmd0aCwgaGVhZGVyLCBleHBlY3RzUGF5bG9hZCB9KVxuICAgIH1cbiAgfSBlbHNlIGlmICh1dGlsLmlzU3RyZWFtKGJvZHkpKSB7XG4gICAgd3JpdGVTdHJlYW0oeyBib2R5LCBjbGllbnQsIHJlcXVlc3QsIHNvY2tldCwgY29udGVudExlbmd0aCwgaGVhZGVyLCBleHBlY3RzUGF5bG9hZCB9KVxuICB9IGVsc2UgaWYgKHV0aWwuaXNJdGVyYWJsZShib2R5KSkge1xuICAgIHdyaXRlSXRlcmFibGUoeyBib2R5LCBjbGllbnQsIHJlcXVlc3QsIHNvY2tldCwgY29udGVudExlbmd0aCwgaGVhZGVyLCBleHBlY3RzUGF5bG9hZCB9KVxuICB9IGVsc2Uge1xuICAgIGFzc2VydChmYWxzZSlcbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG5cbmZ1bmN0aW9uIHdyaXRlSDIgKGNsaWVudCwgc2Vzc2lvbiwgcmVxdWVzdCkge1xuICBjb25zdCB7IGJvZHksIG1ldGhvZCwgcGF0aCwgaG9zdCwgdXBncmFkZSwgZXhwZWN0Q29udGludWUsIHNpZ25hbCwgaGVhZGVyczogcmVxSGVhZGVycyB9ID0gcmVxdWVzdFxuXG4gIGxldCBoZWFkZXJzXG4gIGlmICh0eXBlb2YgcmVxSGVhZGVycyA9PT0gJ3N0cmluZycpIGhlYWRlcnMgPSBSZXF1ZXN0W2tIVFRQMkNvcHlIZWFkZXJzXShyZXFIZWFkZXJzLnRyaW0oKSlcbiAgZWxzZSBoZWFkZXJzID0gcmVxSGVhZGVyc1xuXG4gIGlmICh1cGdyYWRlKSB7XG4gICAgZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgbmV3IEVycm9yKCdVcGdyYWRlIG5vdCBzdXBwb3J0ZWQgZm9yIEgyJykpXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICB0cnkge1xuICAgIC8vIFRPRE8oSFRUUC8yKTogU2hvdWxkIHdlIGNhbGwgb25Db25uZWN0IGltbWVkaWF0ZWx5IG9yIG9uIHN0cmVhbSByZWFkeSBldmVudD9cbiAgICByZXF1ZXN0Lm9uQ29ubmVjdCgoZXJyKSA9PiB7XG4gICAgICBpZiAocmVxdWVzdC5hYm9ydGVkIHx8IHJlcXVlc3QuY29tcGxldGVkKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIgfHwgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKSlcbiAgICB9KVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIpXG4gIH1cblxuICBpZiAocmVxdWVzdC5hYm9ydGVkKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvKiogQHR5cGUge2ltcG9ydCgnbm9kZTpodHRwMicpLkNsaWVudEh0dHAyU3RyZWFtfSAqL1xuICBsZXQgc3RyZWFtXG4gIGNvbnN0IGgyU3RhdGUgPSBjbGllbnRba0hUVFAyU2Vzc2lvblN0YXRlXVxuXG4gIGhlYWRlcnNbSFRUUDJfSEVBREVSX0FVVEhPUklUWV0gPSBob3N0IHx8IGNsaWVudFtrSG9zdF1cbiAgaGVhZGVyc1tIVFRQMl9IRUFERVJfTUVUSE9EXSA9IG1ldGhvZFxuXG4gIGlmIChtZXRob2QgPT09ICdDT05ORUNUJykge1xuICAgIHNlc3Npb24ucmVmKClcbiAgICAvLyB3ZSBhcmUgYWxyZWFkeSBjb25uZWN0ZWQsIHN0cmVhbXMgYXJlIHBlbmRpbmcsIGZpcnN0IHJlcXVlc3RcbiAgICAvLyB3aWxsIGNyZWF0ZSBhIG5ldyBzdHJlYW0uIFdlIHRyaWdnZXIgYSByZXF1ZXN0IHRvIGNyZWF0ZSB0aGUgc3RyZWFtIGFuZCB3YWl0IHVudGlsXG4gICAgLy8gYHJlYWR5YCBldmVudCBpcyB0cmlnZ2VyZWRcbiAgICAvLyBXZSBkaXNhYmxlZCBlbmRTdHJlYW0gdG8gYWxsb3cgdGhlIHVzZXIgdG8gd3JpdGUgdG8gdGhlIHN0cmVhbVxuICAgIHN0cmVhbSA9IHNlc3Npb24ucmVxdWVzdChoZWFkZXJzLCB7IGVuZFN0cmVhbTogZmFsc2UsIHNpZ25hbCB9KVxuXG4gICAgaWYgKHN0cmVhbS5pZCAmJiAhc3RyZWFtLnBlbmRpbmcpIHtcbiAgICAgIHJlcXVlc3Qub25VcGdyYWRlKG51bGwsIG51bGwsIHN0cmVhbSlcbiAgICAgICsraDJTdGF0ZS5vcGVuU3RyZWFtc1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHJlYW0ub25jZSgncmVhZHknLCAoKSA9PiB7XG4gICAgICAgIHJlcXVlc3Qub25VcGdyYWRlKG51bGwsIG51bGwsIHN0cmVhbSlcbiAgICAgICAgKytoMlN0YXRlLm9wZW5TdHJlYW1zXG4gICAgICB9KVxuICAgIH1cblxuICAgIHN0cmVhbS5vbmNlKCdjbG9zZScsICgpID0+IHtcbiAgICAgIGgyU3RhdGUub3BlblN0cmVhbXMgLT0gMVxuICAgICAgLy8gVE9ETyhIVFRQLzIpOiB1bnJlZiBvbmx5IGlmIGN1cnJlbnQgc3RyZWFtcyBjb3VudCBpcyAwXG4gICAgICBpZiAoaDJTdGF0ZS5vcGVuU3RyZWFtcyA9PT0gMCkgc2Vzc2lvbi51bnJlZigpXG4gICAgfSlcblxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzU0MCNzZWN0aW9uLTguM1xuICAvLyA6cGF0aCBhbmQgOnNjaGVtZSBoZWFkZXJzIG11c3QgYmUgb21pdGVkIHdoZW4gc2VuZGluZyBDT05ORUNUXG5cbiAgaGVhZGVyc1tIVFRQMl9IRUFERVJfUEFUSF0gPSBwYXRoXG4gIGhlYWRlcnNbSFRUUDJfSEVBREVSX1NDSEVNRV0gPSAnaHR0cHMnXG5cbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi00LjMuMVxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTQuMy4yXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNC4zLjVcblxuICAvLyBTZW5kaW5nIGEgcGF5bG9hZCBib2R5IG9uIGEgcmVxdWVzdCB0aGF0IGRvZXMgbm90XG4gIC8vIGV4cGVjdCBpdCBjYW4gY2F1c2UgdW5kZWZpbmVkIGJlaGF2aW9yIG9uIHNvbWVcbiAgLy8gc2VydmVycyBhbmQgY29ycnVwdCBjb25uZWN0aW9uIHN0YXRlLiBEbyBub3RcbiAgLy8gcmUtdXNlIHRoZSBjb25uZWN0aW9uIGZvciBmdXJ0aGVyIHJlcXVlc3RzLlxuXG4gIGNvbnN0IGV4cGVjdHNQYXlsb2FkID0gKFxuICAgIG1ldGhvZCA9PT0gJ1BVVCcgfHxcbiAgICBtZXRob2QgPT09ICdQT1NUJyB8fFxuICAgIG1ldGhvZCA9PT0gJ1BBVENIJ1xuICApXG5cbiAgaWYgKGJvZHkgJiYgdHlwZW9mIGJvZHkucmVhZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIFRyeSB0byByZWFkIEVPRiBpbiBvcmRlciB0byBnZXQgbGVuZ3RoLlxuICAgIGJvZHkucmVhZCgwKVxuICB9XG5cbiAgbGV0IGNvbnRlbnRMZW5ndGggPSB1dGlsLmJvZHlMZW5ndGgoYm9keSlcblxuICBpZiAoY29udGVudExlbmd0aCA9PSBudWxsKSB7XG4gICAgY29udGVudExlbmd0aCA9IHJlcXVlc3QuY29udGVudExlbmd0aFxuICB9XG5cbiAgaWYgKGNvbnRlbnRMZW5ndGggPT09IDAgfHwgIWV4cGVjdHNQYXlsb2FkKSB7XG4gICAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjMuMlxuICAgIC8vIEEgdXNlciBhZ2VudCBTSE9VTEQgTk9UIHNlbmQgYSBDb250ZW50LUxlbmd0aCBoZWFkZXIgZmllbGQgd2hlblxuICAgIC8vIHRoZSByZXF1ZXN0IG1lc3NhZ2UgZG9lcyBub3QgY29udGFpbiBhIHBheWxvYWQgYm9keSBhbmQgdGhlIG1ldGhvZFxuICAgIC8vIHNlbWFudGljcyBkbyBub3QgYW50aWNpcGF0ZSBzdWNoIGEgYm9keS5cblxuICAgIGNvbnRlbnRMZW5ndGggPSBudWxsXG4gIH1cblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMjA0NlxuICAvLyBBIHVzZXIgYWdlbnQgbWF5IHNlbmQgYSBDb250ZW50LUxlbmd0aCBoZWFkZXIgd2l0aCAwIHZhbHVlLCB0aGlzIHNob3VsZCBiZSBhbGxvd2VkLlxuICBpZiAoc2hvdWxkU2VuZENvbnRlbnRMZW5ndGgobWV0aG9kKSAmJiBjb250ZW50TGVuZ3RoID4gMCAmJiByZXF1ZXN0LmNvbnRlbnRMZW5ndGggIT0gbnVsbCAmJiByZXF1ZXN0LmNvbnRlbnRMZW5ndGggIT09IGNvbnRlbnRMZW5ndGgpIHtcbiAgICBpZiAoY2xpZW50W2tTdHJpY3RDb250ZW50TGVuZ3RoXSkge1xuICAgICAgZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgbmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpKVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgcHJvY2Vzcy5lbWl0V2FybmluZyhuZXcgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKCkpXG4gIH1cblxuICBpZiAoY29udGVudExlbmd0aCAhPSBudWxsKSB7XG4gICAgYXNzZXJ0KGJvZHksICdubyBib2R5IG11c3Qgbm90IGhhdmUgY29udGVudCBsZW5ndGgnKVxuICAgIGhlYWRlcnNbSFRUUDJfSEVBREVSX0NPTlRFTlRfTEVOR1RIXSA9IGAke2NvbnRlbnRMZW5ndGh9YFxuICB9XG5cbiAgc2Vzc2lvbi5yZWYoKVxuXG4gIGNvbnN0IHNob3VsZEVuZFN0cmVhbSA9IG1ldGhvZCA9PT0gJ0dFVCcgfHwgbWV0aG9kID09PSAnSEVBRCdcbiAgaWYgKGV4cGVjdENvbnRpbnVlKSB7XG4gICAgaGVhZGVyc1tIVFRQMl9IRUFERVJfRVhQRUNUXSA9ICcxMDAtY29udGludWUnXG4gICAgc3RyZWFtID0gc2Vzc2lvbi5yZXF1ZXN0KGhlYWRlcnMsIHsgZW5kU3RyZWFtOiBzaG91bGRFbmRTdHJlYW0sIHNpZ25hbCB9KVxuXG4gICAgc3RyZWFtLm9uY2UoJ2NvbnRpbnVlJywgd3JpdGVCb2R5SDIpXG4gIH0gZWxzZSB7XG4gICAgc3RyZWFtID0gc2Vzc2lvbi5yZXF1ZXN0KGhlYWRlcnMsIHtcbiAgICAgIGVuZFN0cmVhbTogc2hvdWxkRW5kU3RyZWFtLFxuICAgICAgc2lnbmFsXG4gICAgfSlcbiAgICB3cml0ZUJvZHlIMigpXG4gIH1cblxuICAvLyBJbmNyZW1lbnQgY291bnRlciBhcyB3ZSBoYXZlIG5ldyBzZXZlcmFsIHN0cmVhbXMgb3BlblxuICArK2gyU3RhdGUub3BlblN0cmVhbXNcblxuICBzdHJlYW0ub25jZSgncmVzcG9uc2UnLCBoZWFkZXJzID0+IHtcbiAgICBjb25zdCB7IFtIVFRQMl9IRUFERVJfU1RBVFVTXTogc3RhdHVzQ29kZSwgLi4ucmVhbEhlYWRlcnMgfSA9IGhlYWRlcnNcblxuICAgIGlmIChyZXF1ZXN0Lm9uSGVhZGVycyhOdW1iZXIoc3RhdHVzQ29kZSksIHJlYWxIZWFkZXJzLCBzdHJlYW0ucmVzdW1lLmJpbmQoc3RyZWFtKSwgJycpID09PSBmYWxzZSkge1xuICAgICAgc3RyZWFtLnBhdXNlKClcbiAgICB9XG4gIH0pXG5cbiAgc3RyZWFtLm9uY2UoJ2VuZCcsICgpID0+IHtcbiAgICByZXF1ZXN0Lm9uQ29tcGxldGUoW10pXG4gIH0pXG5cbiAgc3RyZWFtLm9uKCdkYXRhJywgKGNodW5rKSA9PiB7XG4gICAgaWYgKHJlcXVlc3Qub25EYXRhKGNodW5rKSA9PT0gZmFsc2UpIHtcbiAgICAgIHN0cmVhbS5wYXVzZSgpXG4gICAgfVxuICB9KVxuXG4gIHN0cmVhbS5vbmNlKCdjbG9zZScsICgpID0+IHtcbiAgICBoMlN0YXRlLm9wZW5TdHJlYW1zIC09IDFcbiAgICAvLyBUT0RPKEhUVFAvMik6IHVucmVmIG9ubHkgaWYgY3VycmVudCBzdHJlYW1zIGNvdW50IGlzIDBcbiAgICBpZiAoaDJTdGF0ZS5vcGVuU3RyZWFtcyA9PT0gMCkge1xuICAgICAgc2Vzc2lvbi51bnJlZigpXG4gICAgfVxuICB9KVxuXG4gIHN0cmVhbS5vbmNlKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICBpZiAoY2xpZW50W2tIVFRQMlNlc3Npb25dICYmICFjbGllbnRba0hUVFAyU2Vzc2lvbl0uZGVzdHJveWVkICYmICF0aGlzLmNsb3NlZCAmJiAhdGhpcy5kZXN0cm95ZWQpIHtcbiAgICAgIGgyU3RhdGUuc3RyZWFtcyAtPSAxXG4gICAgICB1dGlsLmRlc3Ryb3koc3RyZWFtLCBlcnIpXG4gICAgfVxuICB9KVxuXG4gIHN0cmVhbS5vbmNlKCdmcmFtZUVycm9yJywgKHR5cGUsIGNvZGUpID0+IHtcbiAgICBjb25zdCBlcnIgPSBuZXcgSW5mb3JtYXRpb25hbEVycm9yKGBIVFRQLzI6IFwiZnJhbWVFcnJvclwiIHJlY2VpdmVkIC0gdHlwZSAke3R5cGV9LCBjb2RlICR7Y29kZX1gKVxuICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIGVycilcblxuICAgIGlmIChjbGllbnRba0hUVFAyU2Vzc2lvbl0gJiYgIWNsaWVudFtrSFRUUDJTZXNzaW9uXS5kZXN0cm95ZWQgJiYgIXRoaXMuY2xvc2VkICYmICF0aGlzLmRlc3Ryb3llZCkge1xuICAgICAgaDJTdGF0ZS5zdHJlYW1zIC09IDFcbiAgICAgIHV0aWwuZGVzdHJveShzdHJlYW0sIGVycilcbiAgICB9XG4gIH0pXG5cbiAgLy8gc3RyZWFtLm9uKCdhYm9ydGVkJywgKCkgPT4ge1xuICAvLyAgIC8vIFRPRE8oSFRUUC8yKTogU3VwcG9ydCBhYm9ydGVkXG4gIC8vIH0pXG5cbiAgLy8gc3RyZWFtLm9uKCd0aW1lb3V0JywgKCkgPT4ge1xuICAvLyAgIC8vIFRPRE8oSFRUUC8yKTogU3VwcG9ydCB0aW1lb3V0XG4gIC8vIH0pXG5cbiAgLy8gc3RyZWFtLm9uKCdwdXNoJywgaGVhZGVycyA9PiB7XG4gIC8vICAgLy8gVE9ETyhIVFRQLzIpOiBTdXBwb3IgcHVzaFxuICAvLyB9KVxuXG4gIC8vIHN0cmVhbS5vbigndHJhaWxlcnMnLCBoZWFkZXJzID0+IHtcbiAgLy8gICAvLyBUT0RPKEhUVFAvMik6IFN1cHBvcnQgdHJhaWxlcnNcbiAgLy8gfSlcblxuICByZXR1cm4gdHJ1ZVxuXG4gIGZ1bmN0aW9uIHdyaXRlQm9keUgyICgpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogYXNzZXJ0aW9uICovXG4gICAgaWYgKCFib2R5KSB7XG4gICAgICByZXF1ZXN0Lm9uUmVxdWVzdFNlbnQoKVxuICAgIH0gZWxzZSBpZiAodXRpbC5pc0J1ZmZlcihib2R5KSkge1xuICAgICAgYXNzZXJ0KGNvbnRlbnRMZW5ndGggPT09IGJvZHkuYnl0ZUxlbmd0aCwgJ2J1ZmZlciBib2R5IG11c3QgaGF2ZSBjb250ZW50IGxlbmd0aCcpXG4gICAgICBzdHJlYW0uY29yaygpXG4gICAgICBzdHJlYW0ud3JpdGUoYm9keSlcbiAgICAgIHN0cmVhbS51bmNvcmsoKVxuICAgICAgc3RyZWFtLmVuZCgpXG4gICAgICByZXF1ZXN0Lm9uQm9keVNlbnQoYm9keSlcbiAgICAgIHJlcXVlc3Qub25SZXF1ZXN0U2VudCgpXG4gICAgfSBlbHNlIGlmICh1dGlsLmlzQmxvYkxpa2UoYm9keSkpIHtcbiAgICAgIGlmICh0eXBlb2YgYm9keS5zdHJlYW0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgd3JpdGVJdGVyYWJsZSh7XG4gICAgICAgICAgY2xpZW50LFxuICAgICAgICAgIHJlcXVlc3QsXG4gICAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgICBoMnN0cmVhbTogc3RyZWFtLFxuICAgICAgICAgIGV4cGVjdHNQYXlsb2FkLFxuICAgICAgICAgIGJvZHk6IGJvZHkuc3RyZWFtKCksXG4gICAgICAgICAgc29ja2V0OiBjbGllbnRba1NvY2tldF0sXG4gICAgICAgICAgaGVhZGVyOiAnJ1xuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd3JpdGVCbG9iKHtcbiAgICAgICAgICBib2R5LFxuICAgICAgICAgIGNsaWVudCxcbiAgICAgICAgICByZXF1ZXN0LFxuICAgICAgICAgIGNvbnRlbnRMZW5ndGgsXG4gICAgICAgICAgZXhwZWN0c1BheWxvYWQsXG4gICAgICAgICAgaDJzdHJlYW06IHN0cmVhbSxcbiAgICAgICAgICBoZWFkZXI6ICcnLFxuICAgICAgICAgIHNvY2tldDogY2xpZW50W2tTb2NrZXRdXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh1dGlsLmlzU3RyZWFtKGJvZHkpKSB7XG4gICAgICB3cml0ZVN0cmVhbSh7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGNsaWVudCxcbiAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgZXhwZWN0c1BheWxvYWQsXG4gICAgICAgIHNvY2tldDogY2xpZW50W2tTb2NrZXRdLFxuICAgICAgICBoMnN0cmVhbTogc3RyZWFtLFxuICAgICAgICBoZWFkZXI6ICcnXG4gICAgICB9KVxuICAgIH0gZWxzZSBpZiAodXRpbC5pc0l0ZXJhYmxlKGJvZHkpKSB7XG4gICAgICB3cml0ZUl0ZXJhYmxlKHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgY2xpZW50LFxuICAgICAgICByZXF1ZXN0LFxuICAgICAgICBjb250ZW50TGVuZ3RoLFxuICAgICAgICBleHBlY3RzUGF5bG9hZCxcbiAgICAgICAgaGVhZGVyOiAnJyxcbiAgICAgICAgaDJzdHJlYW06IHN0cmVhbSxcbiAgICAgICAgc29ja2V0OiBjbGllbnRba1NvY2tldF1cbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydChmYWxzZSlcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gd3JpdGVTdHJlYW0gKHsgaDJzdHJlYW0sIGJvZHksIGNsaWVudCwgcmVxdWVzdCwgc29ja2V0LCBjb250ZW50TGVuZ3RoLCBoZWFkZXIsIGV4cGVjdHNQYXlsb2FkIH0pIHtcbiAgYXNzZXJ0KGNvbnRlbnRMZW5ndGggIT09IDAgfHwgY2xpZW50W2tSdW5uaW5nXSA9PT0gMCwgJ3N0cmVhbSBib2R5IGNhbm5vdCBiZSBwaXBlbGluZWQnKVxuXG4gIGlmIChjbGllbnRba0hUVFBDb25uVmVyc2lvbl0gPT09ICdoMicpIHtcbiAgICAvLyBGb3IgSFRUUC8yLCBpcyBlbm91Z2ggdG8gcGlwZSB0aGUgc3RyZWFtXG4gICAgY29uc3QgcGlwZSA9IHBpcGVsaW5lKFxuICAgICAgYm9keSxcbiAgICAgIGgyc3RyZWFtLFxuICAgICAgKGVycikgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgdXRpbC5kZXN0cm95KGJvZHksIGVycilcbiAgICAgICAgICB1dGlsLmRlc3Ryb3koaDJzdHJlYW0sIGVycilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXF1ZXN0Lm9uUmVxdWVzdFNlbnQoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgKVxuXG4gICAgcGlwZS5vbignZGF0YScsIG9uUGlwZURhdGEpXG4gICAgcGlwZS5vbmNlKCdlbmQnLCAoKSA9PiB7XG4gICAgICBwaXBlLnJlbW92ZUxpc3RlbmVyKCdkYXRhJywgb25QaXBlRGF0YSlcbiAgICAgIHV0aWwuZGVzdHJveShwaXBlKVxuICAgIH0pXG5cbiAgICBmdW5jdGlvbiBvblBpcGVEYXRhIChjaHVuaykge1xuICAgICAgcmVxdWVzdC5vbkJvZHlTZW50KGNodW5rKVxuICAgIH1cblxuICAgIHJldHVyblxuICB9XG5cbiAgbGV0IGZpbmlzaGVkID0gZmFsc2VcblxuICBjb25zdCB3cml0ZXIgPSBuZXcgQXN5bmNXcml0ZXIoeyBzb2NrZXQsIHJlcXVlc3QsIGNvbnRlbnRMZW5ndGgsIGNsaWVudCwgZXhwZWN0c1BheWxvYWQsIGhlYWRlciB9KVxuXG4gIGNvbnN0IG9uRGF0YSA9IGZ1bmN0aW9uIChjaHVuaykge1xuICAgIGlmIChmaW5pc2hlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGlmICghd3JpdGVyLndyaXRlKGNodW5rKSAmJiB0aGlzLnBhdXNlKSB7XG4gICAgICAgIHRoaXMucGF1c2UoKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdXRpbC5kZXN0cm95KHRoaXMsIGVycilcbiAgICB9XG4gIH1cbiAgY29uc3Qgb25EcmFpbiA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoZmluaXNoZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChib2R5LnJlc3VtZSkge1xuICAgICAgYm9keS5yZXN1bWUoKVxuICAgIH1cbiAgfVxuICBjb25zdCBvbkFib3J0ID0gZnVuY3Rpb24gKCkge1xuICAgIGlmIChmaW5pc2hlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNvbnN0IGVyciA9IG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKClcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBvbkZpbmlzaGVkKGVycikpXG4gIH1cbiAgY29uc3Qgb25GaW5pc2hlZCA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICBpZiAoZmluaXNoZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGZpbmlzaGVkID0gdHJ1ZVxuXG4gICAgYXNzZXJ0KHNvY2tldC5kZXN0cm95ZWQgfHwgKHNvY2tldFtrV3JpdGluZ10gJiYgY2xpZW50W2tSdW5uaW5nXSA8PSAxKSlcblxuICAgIHNvY2tldFxuICAgICAgLm9mZignZHJhaW4nLCBvbkRyYWluKVxuICAgICAgLm9mZignZXJyb3InLCBvbkZpbmlzaGVkKVxuXG4gICAgYm9keVxuICAgICAgLnJlbW92ZUxpc3RlbmVyKCdkYXRhJywgb25EYXRhKVxuICAgICAgLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBvbkZpbmlzaGVkKVxuICAgICAgLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uRmluaXNoZWQpXG4gICAgICAucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgb25BYm9ydClcblxuICAgIGlmICghZXJyKSB7XG4gICAgICB0cnkge1xuICAgICAgICB3cml0ZXIuZW5kKClcbiAgICAgIH0gY2F0Y2ggKGVyKSB7XG4gICAgICAgIGVyciA9IGVyXG4gICAgICB9XG4gICAgfVxuXG4gICAgd3JpdGVyLmRlc3Ryb3koZXJyKVxuXG4gICAgaWYgKGVyciAmJiAoZXJyLmNvZGUgIT09ICdVTkRfRVJSX0lORk8nIHx8IGVyci5tZXNzYWdlICE9PSAncmVzZXQnKSkge1xuICAgICAgdXRpbC5kZXN0cm95KGJvZHksIGVycilcbiAgICB9IGVsc2Uge1xuICAgICAgdXRpbC5kZXN0cm95KGJvZHkpXG4gICAgfVxuICB9XG5cbiAgYm9keVxuICAgIC5vbignZGF0YScsIG9uRGF0YSlcbiAgICAub24oJ2VuZCcsIG9uRmluaXNoZWQpXG4gICAgLm9uKCdlcnJvcicsIG9uRmluaXNoZWQpXG4gICAgLm9uKCdjbG9zZScsIG9uQWJvcnQpXG5cbiAgaWYgKGJvZHkucmVzdW1lKSB7XG4gICAgYm9keS5yZXN1bWUoKVxuICB9XG5cbiAgc29ja2V0XG4gICAgLm9uKCdkcmFpbicsIG9uRHJhaW4pXG4gICAgLm9uKCdlcnJvcicsIG9uRmluaXNoZWQpXG59XG5cbmFzeW5jIGZ1bmN0aW9uIHdyaXRlQmxvYiAoeyBoMnN0cmVhbSwgYm9keSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQgfSkge1xuICBhc3NlcnQoY29udGVudExlbmd0aCA9PT0gYm9keS5zaXplLCAnYmxvYiBib2R5IG11c3QgaGF2ZSBjb250ZW50IGxlbmd0aCcpXG5cbiAgY29uc3QgaXNIMiA9IGNsaWVudFtrSFRUUENvbm5WZXJzaW9uXSA9PT0gJ2gyJ1xuICB0cnkge1xuICAgIGlmIChjb250ZW50TGVuZ3RoICE9IG51bGwgJiYgY29udGVudExlbmd0aCAhPT0gYm9keS5zaXplKSB7XG4gICAgICB0aHJvdyBuZXcgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKClcbiAgICB9XG5cbiAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbShhd2FpdCBib2R5LmFycmF5QnVmZmVyKCkpXG5cbiAgICBpZiAoaXNIMikge1xuICAgICAgaDJzdHJlYW0uY29yaygpXG4gICAgICBoMnN0cmVhbS53cml0ZShidWZmZXIpXG4gICAgICBoMnN0cmVhbS51bmNvcmsoKVxuICAgIH0gZWxzZSB7XG4gICAgICBzb2NrZXQuY29yaygpXG4gICAgICBzb2NrZXQud3JpdGUoYCR7aGVhZGVyfWNvbnRlbnQtbGVuZ3RoOiAke2NvbnRlbnRMZW5ndGh9XFxyXFxuXFxyXFxuYCwgJ2xhdGluMScpXG4gICAgICBzb2NrZXQud3JpdGUoYnVmZmVyKVxuICAgICAgc29ja2V0LnVuY29yaygpXG4gICAgfVxuXG4gICAgcmVxdWVzdC5vbkJvZHlTZW50KGJ1ZmZlcilcbiAgICByZXF1ZXN0Lm9uUmVxdWVzdFNlbnQoKVxuXG4gICAgaWYgKCFleHBlY3RzUGF5bG9hZCkge1xuICAgICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gICAgfVxuXG4gICAgcmVzdW1lKGNsaWVudClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdXRpbC5kZXN0cm95KGlzSDIgPyBoMnN0cmVhbSA6IHNvY2tldCwgZXJyKVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHdyaXRlSXRlcmFibGUgKHsgaDJzdHJlYW0sIGJvZHksIGNsaWVudCwgcmVxdWVzdCwgc29ja2V0LCBjb250ZW50TGVuZ3RoLCBoZWFkZXIsIGV4cGVjdHNQYXlsb2FkIH0pIHtcbiAgYXNzZXJ0KGNvbnRlbnRMZW5ndGggIT09IDAgfHwgY2xpZW50W2tSdW5uaW5nXSA9PT0gMCwgJ2l0ZXJhdG9yIGJvZHkgY2Fubm90IGJlIHBpcGVsaW5lZCcpXG5cbiAgbGV0IGNhbGxiYWNrID0gbnVsbFxuICBmdW5jdGlvbiBvbkRyYWluICgpIHtcbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIGNvbnN0IGNiID0gY2FsbGJhY2tcbiAgICAgIGNhbGxiYWNrID0gbnVsbFxuICAgICAgY2IoKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHdhaXRGb3JEcmFpbiA9ICgpID0+IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBhc3NlcnQoY2FsbGJhY2sgPT09IG51bGwpXG5cbiAgICBpZiAoc29ja2V0W2tFcnJvcl0pIHtcbiAgICAgIHJlamVjdChzb2NrZXRba0Vycm9yXSlcbiAgICB9IGVsc2Uge1xuICAgICAgY2FsbGJhY2sgPSByZXNvbHZlXG4gICAgfVxuICB9KVxuXG4gIGlmIChjbGllbnRba0hUVFBDb25uVmVyc2lvbl0gPT09ICdoMicpIHtcbiAgICBoMnN0cmVhbVxuICAgICAgLm9uKCdjbG9zZScsIG9uRHJhaW4pXG4gICAgICAub24oJ2RyYWluJywgb25EcmFpbilcblxuICAgIHRyeSB7XG4gICAgICAvLyBJdCdzIHVwIHRvIHRoZSB1c2VyIHRvIHNvbWVob3cgYWJvcnQgdGhlIGFzeW5jIGl0ZXJhYmxlLlxuICAgICAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBib2R5KSB7XG4gICAgICAgIGlmIChzb2NrZXRba0Vycm9yXSkge1xuICAgICAgICAgIHRocm93IHNvY2tldFtrRXJyb3JdXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXMgPSBoMnN0cmVhbS53cml0ZShjaHVuaylcbiAgICAgICAgcmVxdWVzdC5vbkJvZHlTZW50KGNodW5rKVxuICAgICAgICBpZiAoIXJlcykge1xuICAgICAgICAgIGF3YWl0IHdhaXRGb3JEcmFpbigpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGgyc3RyZWFtLmRlc3Ryb3koZXJyKVxuICAgIH0gZmluYWxseSB7XG4gICAgICByZXF1ZXN0Lm9uUmVxdWVzdFNlbnQoKVxuICAgICAgaDJzdHJlYW0uZW5kKClcbiAgICAgIGgyc3RyZWFtXG4gICAgICAgIC5vZmYoJ2Nsb3NlJywgb25EcmFpbilcbiAgICAgICAgLm9mZignZHJhaW4nLCBvbkRyYWluKVxuICAgIH1cblxuICAgIHJldHVyblxuICB9XG5cbiAgc29ja2V0XG4gICAgLm9uKCdjbG9zZScsIG9uRHJhaW4pXG4gICAgLm9uKCdkcmFpbicsIG9uRHJhaW4pXG5cbiAgY29uc3Qgd3JpdGVyID0gbmV3IEFzeW5jV3JpdGVyKHsgc29ja2V0LCByZXF1ZXN0LCBjb250ZW50TGVuZ3RoLCBjbGllbnQsIGV4cGVjdHNQYXlsb2FkLCBoZWFkZXIgfSlcbiAgdHJ5IHtcbiAgICAvLyBJdCdzIHVwIHRvIHRoZSB1c2VyIHRvIHNvbWVob3cgYWJvcnQgdGhlIGFzeW5jIGl0ZXJhYmxlLlxuICAgIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgYm9keSkge1xuICAgICAgaWYgKHNvY2tldFtrRXJyb3JdKSB7XG4gICAgICAgIHRocm93IHNvY2tldFtrRXJyb3JdXG4gICAgICB9XG5cbiAgICAgIGlmICghd3JpdGVyLndyaXRlKGNodW5rKSkge1xuICAgICAgICBhd2FpdCB3YWl0Rm9yRHJhaW4oKVxuICAgICAgfVxuICAgIH1cblxuICAgIHdyaXRlci5lbmQoKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICB3cml0ZXIuZGVzdHJveShlcnIpXG4gIH0gZmluYWxseSB7XG4gICAgc29ja2V0XG4gICAgICAub2ZmKCdjbG9zZScsIG9uRHJhaW4pXG4gICAgICAub2ZmKCdkcmFpbicsIG9uRHJhaW4pXG4gIH1cbn1cblxuY2xhc3MgQXN5bmNXcml0ZXIge1xuICBjb25zdHJ1Y3RvciAoeyBzb2NrZXQsIHJlcXVlc3QsIGNvbnRlbnRMZW5ndGgsIGNsaWVudCwgZXhwZWN0c1BheWxvYWQsIGhlYWRlciB9KSB7XG4gICAgdGhpcy5zb2NrZXQgPSBzb2NrZXRcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0XG4gICAgdGhpcy5jb250ZW50TGVuZ3RoID0gY29udGVudExlbmd0aFxuICAgIHRoaXMuY2xpZW50ID0gY2xpZW50XG4gICAgdGhpcy5ieXRlc1dyaXR0ZW4gPSAwXG4gICAgdGhpcy5leHBlY3RzUGF5bG9hZCA9IGV4cGVjdHNQYXlsb2FkXG4gICAgdGhpcy5oZWFkZXIgPSBoZWFkZXJcblxuICAgIHNvY2tldFtrV3JpdGluZ10gPSB0cnVlXG4gIH1cblxuICB3cml0ZSAoY2h1bmspIHtcbiAgICBjb25zdCB7IHNvY2tldCwgcmVxdWVzdCwgY29udGVudExlbmd0aCwgY2xpZW50LCBieXRlc1dyaXR0ZW4sIGV4cGVjdHNQYXlsb2FkLCBoZWFkZXIgfSA9IHRoaXNcblxuICAgIGlmIChzb2NrZXRba0Vycm9yXSkge1xuICAgICAgdGhyb3cgc29ja2V0W2tFcnJvcl1cbiAgICB9XG5cbiAgICBpZiAoc29ja2V0LmRlc3Ryb3llZCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgY29uc3QgbGVuID0gQnVmZmVyLmJ5dGVMZW5ndGgoY2h1bmspXG4gICAgaWYgKCFsZW4pIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgLy8gV2Ugc2hvdWxkIGRlZmVyIHdyaXRpbmcgY2h1bmtzLlxuICAgIGlmIChjb250ZW50TGVuZ3RoICE9PSBudWxsICYmIGJ5dGVzV3JpdHRlbiArIGxlbiA+IGNvbnRlbnRMZW5ndGgpIHtcbiAgICAgIGlmIChjbGllbnRba1N0cmljdENvbnRlbnRMZW5ndGhdKSB7XG4gICAgICAgIHRocm93IG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKVxuICAgICAgfVxuXG4gICAgICBwcm9jZXNzLmVtaXRXYXJuaW5nKG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKSlcbiAgICB9XG5cbiAgICBzb2NrZXQuY29yaygpXG5cbiAgICBpZiAoYnl0ZXNXcml0dGVuID09PSAwKSB7XG4gICAgICBpZiAoIWV4cGVjdHNQYXlsb2FkKSB7XG4gICAgICAgIHNvY2tldFtrUmVzZXRdID0gdHJ1ZVxuICAgICAgfVxuXG4gICAgICBpZiAoY29udGVudExlbmd0aCA9PT0gbnVsbCkge1xuICAgICAgICBzb2NrZXQud3JpdGUoYCR7aGVhZGVyfXRyYW5zZmVyLWVuY29kaW5nOiBjaHVua2VkXFxyXFxuYCwgJ2xhdGluMScpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzb2NrZXQud3JpdGUoYCR7aGVhZGVyfWNvbnRlbnQtbGVuZ3RoOiAke2NvbnRlbnRMZW5ndGh9XFxyXFxuXFxyXFxuYCwgJ2xhdGluMScpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNvbnRlbnRMZW5ndGggPT09IG51bGwpIHtcbiAgICAgIHNvY2tldC53cml0ZShgXFxyXFxuJHtsZW4udG9TdHJpbmcoMTYpfVxcclxcbmAsICdsYXRpbjEnKVxuICAgIH1cblxuICAgIHRoaXMuYnl0ZXNXcml0dGVuICs9IGxlblxuXG4gICAgY29uc3QgcmV0ID0gc29ja2V0LndyaXRlKGNodW5rKVxuXG4gICAgc29ja2V0LnVuY29yaygpXG5cbiAgICByZXF1ZXN0Lm9uQm9keVNlbnQoY2h1bmspXG5cbiAgICBpZiAoIXJldCkge1xuICAgICAgaWYgKHNvY2tldFtrUGFyc2VyXS50aW1lb3V0ICYmIHNvY2tldFtrUGFyc2VyXS50aW1lb3V0VHlwZSA9PT0gVElNRU9VVF9IRUFERVJTKSB7XG4gICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBvbmx5IGZvciBqZXN0XG4gICAgICAgIGlmIChzb2NrZXRba1BhcnNlcl0udGltZW91dC5yZWZyZXNoKSB7XG4gICAgICAgICAgc29ja2V0W2tQYXJzZXJdLnRpbWVvdXQucmVmcmVzaCgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmV0XG4gIH1cblxuICBlbmQgKCkge1xuICAgIGNvbnN0IHsgc29ja2V0LCBjb250ZW50TGVuZ3RoLCBjbGllbnQsIGJ5dGVzV3JpdHRlbiwgZXhwZWN0c1BheWxvYWQsIGhlYWRlciwgcmVxdWVzdCB9ID0gdGhpc1xuICAgIHJlcXVlc3Qub25SZXF1ZXN0U2VudCgpXG5cbiAgICBzb2NrZXRba1dyaXRpbmddID0gZmFsc2VcblxuICAgIGlmIChzb2NrZXRba0Vycm9yXSkge1xuICAgICAgdGhyb3cgc29ja2V0W2tFcnJvcl1cbiAgICB9XG5cbiAgICBpZiAoc29ja2V0LmRlc3Ryb3llZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGJ5dGVzV3JpdHRlbiA9PT0gMCkge1xuICAgICAgaWYgKGV4cGVjdHNQYXlsb2FkKSB7XG4gICAgICAgIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4zLjJcbiAgICAgICAgLy8gQSB1c2VyIGFnZW50IFNIT1VMRCBzZW5kIGEgQ29udGVudC1MZW5ndGggaW4gYSByZXF1ZXN0IG1lc3NhZ2Ugd2hlblxuICAgICAgICAvLyBubyBUcmFuc2Zlci1FbmNvZGluZyBpcyBzZW50IGFuZCB0aGUgcmVxdWVzdCBtZXRob2QgZGVmaW5lcyBhIG1lYW5pbmdcbiAgICAgICAgLy8gZm9yIGFuIGVuY2xvc2VkIHBheWxvYWQgYm9keS5cblxuICAgICAgICBzb2NrZXQud3JpdGUoYCR7aGVhZGVyfWNvbnRlbnQtbGVuZ3RoOiAwXFxyXFxuXFxyXFxuYCwgJ2xhdGluMScpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzb2NrZXQud3JpdGUoYCR7aGVhZGVyfVxcclxcbmAsICdsYXRpbjEnKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY29udGVudExlbmd0aCA9PT0gbnVsbCkge1xuICAgICAgc29ja2V0LndyaXRlKCdcXHJcXG4wXFxyXFxuXFxyXFxuJywgJ2xhdGluMScpXG4gICAgfVxuXG4gICAgaWYgKGNvbnRlbnRMZW5ndGggIT09IG51bGwgJiYgYnl0ZXNXcml0dGVuICE9PSBjb250ZW50TGVuZ3RoKSB7XG4gICAgICBpZiAoY2xpZW50W2tTdHJpY3RDb250ZW50TGVuZ3RoXSkge1xuICAgICAgICB0aHJvdyBuZXcgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByb2Nlc3MuZW1pdFdhcm5pbmcobmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzb2NrZXRba1BhcnNlcl0udGltZW91dCAmJiBzb2NrZXRba1BhcnNlcl0udGltZW91dFR5cGUgPT09IFRJTUVPVVRfSEVBREVSUykge1xuICAgICAgLy8gaXN0YW5idWwgaWdub3JlIGVsc2U6IG9ubHkgZm9yIGplc3RcbiAgICAgIGlmIChzb2NrZXRba1BhcnNlcl0udGltZW91dC5yZWZyZXNoKSB7XG4gICAgICAgIHNvY2tldFtrUGFyc2VyXS50aW1lb3V0LnJlZnJlc2goKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJlc3VtZShjbGllbnQpXG4gIH1cblxuICBkZXN0cm95IChlcnIpIHtcbiAgICBjb25zdCB7IHNvY2tldCwgY2xpZW50IH0gPSB0aGlzXG5cbiAgICBzb2NrZXRba1dyaXRpbmddID0gZmFsc2VcblxuICAgIGlmIChlcnIpIHtcbiAgICAgIGFzc2VydChjbGllbnRba1J1bm5pbmddIDw9IDEsICdwaXBlbGluZSBzaG91bGQgb25seSBjb250YWluIHRoaXMgcmVxdWVzdCcpXG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBlcnIpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGVycm9yUmVxdWVzdCAoY2xpZW50LCByZXF1ZXN0LCBlcnIpIHtcbiAgdHJ5IHtcbiAgICByZXF1ZXN0Lm9uRXJyb3IoZXJyKVxuICAgIGFzc2VydChyZXF1ZXN0LmFib3J0ZWQpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNsaWVudC5lbWl0KCdlcnJvcicsIGVycilcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IENsaWVudFxuIiwKICAgICIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuXG4ndXNlIHN0cmljdCdcblxuLy8gRXh0cmFjdGVkIGZyb20gbm9kZS9saWIvaW50ZXJuYWwvZml4ZWRfcXVldWUuanNcblxuLy8gQ3VycmVudGx5IG9wdGltYWwgcXVldWUgc2l6ZSwgdGVzdGVkIG9uIFY4IDYuMCAtIDYuNi4gTXVzdCBiZSBwb3dlciBvZiB0d28uXG5jb25zdCBrU2l6ZSA9IDIwNDg7XG5jb25zdCBrTWFzayA9IGtTaXplIC0gMTtcblxuLy8gVGhlIEZpeGVkUXVldWUgaXMgaW1wbGVtZW50ZWQgYXMgYSBzaW5nbHktbGlua2VkIGxpc3Qgb2YgZml4ZWQtc2l6ZVxuLy8gY2lyY3VsYXIgYnVmZmVycy4gSXQgbG9va3Mgc29tZXRoaW5nIGxpa2UgdGhpczpcbi8vXG4vLyAgaGVhZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWlsXG4vLyAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbi8vICAgIHYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdlxuLy8gKy0tLS0tLS0tLS0tKyA8LS0tLS1cXCAgICAgICArLS0tLS0tLS0tLS0rIDwtLS0tLS1cXCAgICAgICAgICstLS0tLS0tLS0tLStcbi8vIHwgIFtudWxsXSAgIHwgICAgICAgIFxcLS0tLS0gfCAgIG5leHQgICAgfCAgICAgICAgIFxcLS0tLS0tLSB8ICAgbmV4dCAgICB8XG4vLyArLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLStcbi8vIHwgICBpdGVtICAgIHwgPC0tIGJvdHRvbSAgICB8ICAgaXRlbSAgICB8IDwtLSBib3R0b20gICAgICAgfCAgW2VtcHR5XSAgfFxuLy8gfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICB8ICBbZW1wdHldICB8XG4vLyB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgIHwgIFtlbXB0eV0gIHxcbi8vIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgfCAgW2VtcHR5XSAgfFxuLy8gfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHwgICAgICAgYm90dG9tIC0tPiB8ICAgaXRlbSAgICB8XG4vLyB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHxcbi8vIHwgICAgLi4uICAgIHwgICAgICAgICAgICAgICB8ICAgIC4uLiAgICB8ICAgICAgICAgICAgICAgICAgfCAgICAuLi4gICAgfFxuLy8gfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8XG4vLyB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHxcbi8vIHwgIFtlbXB0eV0gIHwgPC0tIHRvcCAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfFxuLy8gfCAgW2VtcHR5XSAgfCAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8XG4vLyB8ICBbZW1wdHldICB8ICAgICAgICAgICAgICAgfCAgW2VtcHR5XSAgfCA8LS0gdG9wICB0b3AgLS0+IHwgIFtlbXB0eV0gIHxcbi8vICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tK1xuLy9cbi8vIE9yLCBpZiB0aGVyZSBpcyBvbmx5IG9uZSBjaXJjdWxhciBidWZmZXIsIGl0IGxvb2tzIHNvbWV0aGluZ1xuLy8gbGlrZSBlaXRoZXIgb2YgdGhlc2U6XG4vL1xuLy8gIGhlYWQgICB0YWlsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZCAgIHRhaWxcbi8vICAgIHwgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfFxuLy8gICAgdiAgICAgdiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ICAgICB2XG4vLyArLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLStcbi8vIHwgIFtudWxsXSAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgW251bGxdICAgfFxuLy8gKy0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rXG4vLyB8ICBbZW1wdHldICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHxcbi8vIHwgIFtlbXB0eV0gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfFxuLy8gfCAgIGl0ZW0gICAgfCA8LS0gYm90dG9tICAgICAgICAgICAgdG9wIC0tPiB8ICBbZW1wdHldICB8XG4vLyB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFtlbXB0eV0gIHxcbi8vIHwgIFtlbXB0eV0gIHwgPC0tIHRvcCAgICAgICAgICAgIGJvdHRvbSAtLT4gfCAgIGl0ZW0gICAgfFxuLy8gfCAgW2VtcHR5XSAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8XG4vLyArLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLStcbi8vXG4vLyBBZGRpbmcgYSB2YWx1ZSBtZWFucyBtb3ZpbmcgYHRvcGAgZm9yd2FyZCBieSBvbmUsIHJlbW92aW5nIG1lYW5zXG4vLyBtb3ZpbmcgYGJvdHRvbWAgZm9yd2FyZCBieSBvbmUuIEFmdGVyIHJlYWNoaW5nIHRoZSBlbmQsIHRoZSBxdWV1ZVxuLy8gd3JhcHMgYXJvdW5kLlxuLy9cbi8vIFdoZW4gYHRvcCA9PT0gYm90dG9tYCB0aGUgY3VycmVudCBxdWV1ZSBpcyBlbXB0eSBhbmQgd2hlblxuLy8gYHRvcCArIDEgPT09IGJvdHRvbWAgaXQncyBmdWxsLiBUaGlzIHdhc3RlcyBhIHNpbmdsZSBzcGFjZSBvZiBzdG9yYWdlXG4vLyBidXQgYWxsb3dzIG11Y2ggcXVpY2tlciBjaGVja3MuXG5cbmNsYXNzIEZpeGVkQ2lyY3VsYXJCdWZmZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmJvdHRvbSA9IDA7XG4gICAgdGhpcy50b3AgPSAwO1xuICAgIHRoaXMubGlzdCA9IG5ldyBBcnJheShrU2l6ZSk7XG4gICAgdGhpcy5uZXh0ID0gbnVsbDtcbiAgfVxuXG4gIGlzRW1wdHkoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9wID09PSB0aGlzLmJvdHRvbTtcbiAgfVxuXG4gIGlzRnVsbCgpIHtcbiAgICByZXR1cm4gKCh0aGlzLnRvcCArIDEpICYga01hc2spID09PSB0aGlzLmJvdHRvbTtcbiAgfVxuXG4gIHB1c2goZGF0YSkge1xuICAgIHRoaXMubGlzdFt0aGlzLnRvcF0gPSBkYXRhO1xuICAgIHRoaXMudG9wID0gKHRoaXMudG9wICsgMSkgJiBrTWFzaztcbiAgfVxuXG4gIHNoaWZ0KCkge1xuICAgIGNvbnN0IG5leHRJdGVtID0gdGhpcy5saXN0W3RoaXMuYm90dG9tXTtcbiAgICBpZiAobmV4dEl0ZW0gPT09IHVuZGVmaW5lZClcbiAgICAgIHJldHVybiBudWxsO1xuICAgIHRoaXMubGlzdFt0aGlzLmJvdHRvbV0gPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5ib3R0b20gPSAodGhpcy5ib3R0b20gKyAxKSAmIGtNYXNrO1xuICAgIHJldHVybiBuZXh0SXRlbTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIEZpeGVkUXVldWUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBuZXcgRml4ZWRDaXJjdWxhckJ1ZmZlcigpO1xuICB9XG5cbiAgaXNFbXB0eSgpIHtcbiAgICByZXR1cm4gdGhpcy5oZWFkLmlzRW1wdHkoKTtcbiAgfVxuXG4gIHB1c2goZGF0YSkge1xuICAgIGlmICh0aGlzLmhlYWQuaXNGdWxsKCkpIHtcbiAgICAgIC8vIEhlYWQgaXMgZnVsbDogQ3JlYXRlcyBhIG5ldyBxdWV1ZSwgc2V0cyB0aGUgb2xkIHF1ZXVlJ3MgYC5uZXh0YCB0byBpdCxcbiAgICAgIC8vIGFuZCBzZXRzIGl0IGFzIHRoZSBuZXcgbWFpbiBxdWV1ZS5cbiAgICAgIHRoaXMuaGVhZCA9IHRoaXMuaGVhZC5uZXh0ID0gbmV3IEZpeGVkQ2lyY3VsYXJCdWZmZXIoKTtcbiAgICB9XG4gICAgdGhpcy5oZWFkLnB1c2goZGF0YSk7XG4gIH1cblxuICBzaGlmdCgpIHtcbiAgICBjb25zdCB0YWlsID0gdGhpcy50YWlsO1xuICAgIGNvbnN0IG5leHQgPSB0YWlsLnNoaWZ0KCk7XG4gICAgaWYgKHRhaWwuaXNFbXB0eSgpICYmIHRhaWwubmV4dCAhPT0gbnVsbCkge1xuICAgICAgLy8gSWYgdGhlcmUgaXMgYW5vdGhlciBxdWV1ZSwgaXQgZm9ybXMgdGhlIG5ldyB0YWlsLlxuICAgICAgdGhpcy50YWlsID0gdGFpbC5uZXh0O1xuICAgIH1cbiAgICByZXR1cm4gbmV4dDtcbiAgfVxufTtcbiIsCiAgICAiY29uc3QgeyBrRnJlZSwga0Nvbm5lY3RlZCwga1BlbmRpbmcsIGtRdWV1ZWQsIGtSdW5uaW5nLCBrU2l6ZSB9ID0gcmVxdWlyZSgnLi9jb3JlL3N5bWJvbHMnKVxuY29uc3Qga1Bvb2wgPSBTeW1ib2woJ3Bvb2wnKVxuXG5jbGFzcyBQb29sU3RhdHMge1xuICBjb25zdHJ1Y3RvciAocG9vbCkge1xuICAgIHRoaXNba1Bvb2xdID0gcG9vbFxuICB9XG5cbiAgZ2V0IGNvbm5lY3RlZCAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1Bvb2xdW2tDb25uZWN0ZWRdXG4gIH1cblxuICBnZXQgZnJlZSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1Bvb2xdW2tGcmVlXVxuICB9XG5cbiAgZ2V0IHBlbmRpbmcgKCkge1xuICAgIHJldHVybiB0aGlzW2tQb29sXVtrUGVuZGluZ11cbiAgfVxuXG4gIGdldCBxdWV1ZWQgKCkge1xuICAgIHJldHVybiB0aGlzW2tQb29sXVtrUXVldWVkXVxuICB9XG5cbiAgZ2V0IHJ1bm5pbmcgKCkge1xuICAgIHJldHVybiB0aGlzW2tQb29sXVtrUnVubmluZ11cbiAgfVxuXG4gIGdldCBzaXplICgpIHtcbiAgICByZXR1cm4gdGhpc1trUG9vbF1ba1NpemVdXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBQb29sU3RhdHNcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IERpc3BhdGNoZXJCYXNlID0gcmVxdWlyZSgnLi9kaXNwYXRjaGVyLWJhc2UnKVxuY29uc3QgRml4ZWRRdWV1ZSA9IHJlcXVpcmUoJy4vbm9kZS9maXhlZC1xdWV1ZScpXG5jb25zdCB7IGtDb25uZWN0ZWQsIGtTaXplLCBrUnVubmluZywga1BlbmRpbmcsIGtRdWV1ZWQsIGtCdXN5LCBrRnJlZSwga1VybCwga0Nsb3NlLCBrRGVzdHJveSwga0Rpc3BhdGNoIH0gPSByZXF1aXJlKCcuL2NvcmUvc3ltYm9scycpXG5jb25zdCBQb29sU3RhdHMgPSByZXF1aXJlKCcuL3Bvb2wtc3RhdHMnKVxuXG5jb25zdCBrQ2xpZW50cyA9IFN5bWJvbCgnY2xpZW50cycpXG5jb25zdCBrTmVlZERyYWluID0gU3ltYm9sKCduZWVkRHJhaW4nKVxuY29uc3Qga1F1ZXVlID0gU3ltYm9sKCdxdWV1ZScpXG5jb25zdCBrQ2xvc2VkUmVzb2x2ZSA9IFN5bWJvbCgnY2xvc2VkIHJlc29sdmUnKVxuY29uc3Qga09uRHJhaW4gPSBTeW1ib2woJ29uRHJhaW4nKVxuY29uc3Qga09uQ29ubmVjdCA9IFN5bWJvbCgnb25Db25uZWN0JylcbmNvbnN0IGtPbkRpc2Nvbm5lY3QgPSBTeW1ib2woJ29uRGlzY29ubmVjdCcpXG5jb25zdCBrT25Db25uZWN0aW9uRXJyb3IgPSBTeW1ib2woJ29uQ29ubmVjdGlvbkVycm9yJylcbmNvbnN0IGtHZXREaXNwYXRjaGVyID0gU3ltYm9sKCdnZXQgZGlzcGF0Y2hlcicpXG5jb25zdCBrQWRkQ2xpZW50ID0gU3ltYm9sKCdhZGQgY2xpZW50JylcbmNvbnN0IGtSZW1vdmVDbGllbnQgPSBTeW1ib2woJ3JlbW92ZSBjbGllbnQnKVxuY29uc3Qga1N0YXRzID0gU3ltYm9sKCdzdGF0cycpXG5cbmNsYXNzIFBvb2xCYXNlIGV4dGVuZHMgRGlzcGF0Y2hlckJhc2Uge1xuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgc3VwZXIoKVxuXG4gICAgdGhpc1trUXVldWVdID0gbmV3IEZpeGVkUXVldWUoKVxuICAgIHRoaXNba0NsaWVudHNdID0gW11cbiAgICB0aGlzW2tRdWV1ZWRdID0gMFxuXG4gICAgY29uc3QgcG9vbCA9IHRoaXNcblxuICAgIHRoaXNba09uRHJhaW5dID0gZnVuY3Rpb24gb25EcmFpbiAob3JpZ2luLCB0YXJnZXRzKSB7XG4gICAgICBjb25zdCBxdWV1ZSA9IHBvb2xba1F1ZXVlXVxuXG4gICAgICBsZXQgbmVlZERyYWluID0gZmFsc2VcblxuICAgICAgd2hpbGUgKCFuZWVkRHJhaW4pIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IHF1ZXVlLnNoaWZ0KClcbiAgICAgICAgaWYgKCFpdGVtKSB7XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBwb29sW2tRdWV1ZWRdLS1cbiAgICAgICAgbmVlZERyYWluID0gIXRoaXMuZGlzcGF0Y2goaXRlbS5vcHRzLCBpdGVtLmhhbmRsZXIpXG4gICAgICB9XG5cbiAgICAgIHRoaXNba05lZWREcmFpbl0gPSBuZWVkRHJhaW5cblxuICAgICAgaWYgKCF0aGlzW2tOZWVkRHJhaW5dICYmIHBvb2xba05lZWREcmFpbl0pIHtcbiAgICAgICAgcG9vbFtrTmVlZERyYWluXSA9IGZhbHNlXG4gICAgICAgIHBvb2wuZW1pdCgnZHJhaW4nLCBvcmlnaW4sIFtwb29sLCAuLi50YXJnZXRzXSlcbiAgICAgIH1cblxuICAgICAgaWYgKHBvb2xba0Nsb3NlZFJlc29sdmVdICYmIHF1ZXVlLmlzRW1wdHkoKSkge1xuICAgICAgICBQcm9taXNlXG4gICAgICAgICAgLmFsbChwb29sW2tDbGllbnRzXS5tYXAoYyA9PiBjLmNsb3NlKCkpKVxuICAgICAgICAgIC50aGVuKHBvb2xba0Nsb3NlZFJlc29sdmVdKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXNba09uQ29ubmVjdF0gPSAob3JpZ2luLCB0YXJnZXRzKSA9PiB7XG4gICAgICBwb29sLmVtaXQoJ2Nvbm5lY3QnLCBvcmlnaW4sIFtwb29sLCAuLi50YXJnZXRzXSlcbiAgICB9XG5cbiAgICB0aGlzW2tPbkRpc2Nvbm5lY3RdID0gKG9yaWdpbiwgdGFyZ2V0cywgZXJyKSA9PiB7XG4gICAgICBwb29sLmVtaXQoJ2Rpc2Nvbm5lY3QnLCBvcmlnaW4sIFtwb29sLCAuLi50YXJnZXRzXSwgZXJyKVxuICAgIH1cblxuICAgIHRoaXNba09uQ29ubmVjdGlvbkVycm9yXSA9IChvcmlnaW4sIHRhcmdldHMsIGVycikgPT4ge1xuICAgICAgcG9vbC5lbWl0KCdjb25uZWN0aW9uRXJyb3InLCBvcmlnaW4sIFtwb29sLCAuLi50YXJnZXRzXSwgZXJyKVxuICAgIH1cblxuICAgIHRoaXNba1N0YXRzXSA9IG5ldyBQb29sU3RhdHModGhpcylcbiAgfVxuXG4gIGdldCBba0J1c3ldICgpIHtcbiAgICByZXR1cm4gdGhpc1trTmVlZERyYWluXVxuICB9XG5cbiAgZ2V0IFtrQ29ubmVjdGVkXSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0NsaWVudHNdLmZpbHRlcihjbGllbnQgPT4gY2xpZW50W2tDb25uZWN0ZWRdKS5sZW5ndGhcbiAgfVxuXG4gIGdldCBba0ZyZWVdICgpIHtcbiAgICByZXR1cm4gdGhpc1trQ2xpZW50c10uZmlsdGVyKGNsaWVudCA9PiBjbGllbnRba0Nvbm5lY3RlZF0gJiYgIWNsaWVudFtrTmVlZERyYWluXSkubGVuZ3RoXG4gIH1cblxuICBnZXQgW2tQZW5kaW5nXSAoKSB7XG4gICAgbGV0IHJldCA9IHRoaXNba1F1ZXVlZF1cbiAgICBmb3IgKGNvbnN0IHsgW2tQZW5kaW5nXTogcGVuZGluZyB9IG9mIHRoaXNba0NsaWVudHNdKSB7XG4gICAgICByZXQgKz0gcGVuZGluZ1xuICAgIH1cbiAgICByZXR1cm4gcmV0XG4gIH1cblxuICBnZXQgW2tSdW5uaW5nXSAoKSB7XG4gICAgbGV0IHJldCA9IDBcbiAgICBmb3IgKGNvbnN0IHsgW2tSdW5uaW5nXTogcnVubmluZyB9IG9mIHRoaXNba0NsaWVudHNdKSB7XG4gICAgICByZXQgKz0gcnVubmluZ1xuICAgIH1cbiAgICByZXR1cm4gcmV0XG4gIH1cblxuICBnZXQgW2tTaXplXSAoKSB7XG4gICAgbGV0IHJldCA9IHRoaXNba1F1ZXVlZF1cbiAgICBmb3IgKGNvbnN0IHsgW2tTaXplXTogc2l6ZSB9IG9mIHRoaXNba0NsaWVudHNdKSB7XG4gICAgICByZXQgKz0gc2l6ZVxuICAgIH1cbiAgICByZXR1cm4gcmV0XG4gIH1cblxuICBnZXQgc3RhdHMgKCkge1xuICAgIHJldHVybiB0aGlzW2tTdGF0c11cbiAgfVxuXG4gIGFzeW5jIFtrQ2xvc2VdICgpIHtcbiAgICBpZiAodGhpc1trUXVldWVdLmlzRW1wdHkoKSkge1xuICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHRoaXNba0NsaWVudHNdLm1hcChjID0+IGMuY2xvc2UoKSkpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICB0aGlzW2tDbG9zZWRSZXNvbHZlXSA9IHJlc29sdmVcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgW2tEZXN0cm95XSAoZXJyKSB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzW2tRdWV1ZV0uc2hpZnQoKVxuICAgICAgaWYgKCFpdGVtKSB7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBpdGVtLmhhbmRsZXIub25FcnJvcihlcnIpXG4gICAgfVxuXG4gICAgcmV0dXJuIFByb21pc2UuYWxsKHRoaXNba0NsaWVudHNdLm1hcChjID0+IGMuZGVzdHJveShlcnIpKSlcbiAgfVxuXG4gIFtrRGlzcGF0Y2hdIChvcHRzLCBoYW5kbGVyKSB7XG4gICAgY29uc3QgZGlzcGF0Y2hlciA9IHRoaXNba0dldERpc3BhdGNoZXJdKClcblxuICAgIGlmICghZGlzcGF0Y2hlcikge1xuICAgICAgdGhpc1trTmVlZERyYWluXSA9IHRydWVcbiAgICAgIHRoaXNba1F1ZXVlXS5wdXNoKHsgb3B0cywgaGFuZGxlciB9KVxuICAgICAgdGhpc1trUXVldWVkXSsrXG4gICAgfSBlbHNlIGlmICghZGlzcGF0Y2hlci5kaXNwYXRjaChvcHRzLCBoYW5kbGVyKSkge1xuICAgICAgZGlzcGF0Y2hlcltrTmVlZERyYWluXSA9IHRydWVcbiAgICAgIHRoaXNba05lZWREcmFpbl0gPSAhdGhpc1trR2V0RGlzcGF0Y2hlcl0oKVxuICAgIH1cblxuICAgIHJldHVybiAhdGhpc1trTmVlZERyYWluXVxuICB9XG5cbiAgW2tBZGRDbGllbnRdIChjbGllbnQpIHtcbiAgICBjbGllbnRcbiAgICAgIC5vbignZHJhaW4nLCB0aGlzW2tPbkRyYWluXSlcbiAgICAgIC5vbignY29ubmVjdCcsIHRoaXNba09uQ29ubmVjdF0pXG4gICAgICAub24oJ2Rpc2Nvbm5lY3QnLCB0aGlzW2tPbkRpc2Nvbm5lY3RdKVxuICAgICAgLm9uKCdjb25uZWN0aW9uRXJyb3InLCB0aGlzW2tPbkNvbm5lY3Rpb25FcnJvcl0pXG5cbiAgICB0aGlzW2tDbGllbnRzXS5wdXNoKGNsaWVudClcblxuICAgIGlmICh0aGlzW2tOZWVkRHJhaW5dKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXNba05lZWREcmFpbl0pIHtcbiAgICAgICAgICB0aGlzW2tPbkRyYWluXShjbGllbnRba1VybF0sIFt0aGlzLCBjbGllbnRdKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBba1JlbW92ZUNsaWVudF0gKGNsaWVudCkge1xuICAgIGNsaWVudC5jbG9zZSgoKSA9PiB7XG4gICAgICBjb25zdCBpZHggPSB0aGlzW2tDbGllbnRzXS5pbmRleE9mKGNsaWVudClcbiAgICAgIGlmIChpZHggIT09IC0xKSB7XG4gICAgICAgIHRoaXNba0NsaWVudHNdLnNwbGljZShpZHgsIDEpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXNba05lZWREcmFpbl0gPSB0aGlzW2tDbGllbnRzXS5zb21lKGRpc3BhdGNoZXIgPT4gKFxuICAgICAgIWRpc3BhdGNoZXJba05lZWREcmFpbl0gJiZcbiAgICAgIGRpc3BhdGNoZXIuY2xvc2VkICE9PSB0cnVlICYmXG4gICAgICBkaXNwYXRjaGVyLmRlc3Ryb3llZCAhPT0gdHJ1ZVxuICAgICkpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFBvb2xCYXNlLFxuICBrQ2xpZW50cyxcbiAga05lZWREcmFpbixcbiAga0FkZENsaWVudCxcbiAga1JlbW92ZUNsaWVudCxcbiAga0dldERpc3BhdGNoZXJcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHtcbiAgUG9vbEJhc2UsXG4gIGtDbGllbnRzLFxuICBrTmVlZERyYWluLFxuICBrQWRkQ2xpZW50LFxuICBrR2V0RGlzcGF0Y2hlclxufSA9IHJlcXVpcmUoJy4vcG9vbC1iYXNlJylcbmNvbnN0IENsaWVudCA9IHJlcXVpcmUoJy4vY2xpZW50JylcbmNvbnN0IHtcbiAgSW52YWxpZEFyZ3VtZW50RXJyb3Jcbn0gPSByZXF1aXJlKCcuL2NvcmUvZXJyb3JzJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuL2NvcmUvdXRpbCcpXG5jb25zdCB7IGtVcmwsIGtJbnRlcmNlcHRvcnMgfSA9IHJlcXVpcmUoJy4vY29yZS9zeW1ib2xzJylcbmNvbnN0IGJ1aWxkQ29ubmVjdG9yID0gcmVxdWlyZSgnLi9jb3JlL2Nvbm5lY3QnKVxuXG5jb25zdCBrT3B0aW9ucyA9IFN5bWJvbCgnb3B0aW9ucycpXG5jb25zdCBrQ29ubmVjdGlvbnMgPSBTeW1ib2woJ2Nvbm5lY3Rpb25zJylcbmNvbnN0IGtGYWN0b3J5ID0gU3ltYm9sKCdmYWN0b3J5JylcblxuZnVuY3Rpb24gZGVmYXVsdEZhY3RvcnkgKG9yaWdpbiwgb3B0cykge1xuICByZXR1cm4gbmV3IENsaWVudChvcmlnaW4sIG9wdHMpXG59XG5cbmNsYXNzIFBvb2wgZXh0ZW5kcyBQb29sQmFzZSB7XG4gIGNvbnN0cnVjdG9yIChvcmlnaW4sIHtcbiAgICBjb25uZWN0aW9ucyxcbiAgICBmYWN0b3J5ID0gZGVmYXVsdEZhY3RvcnksXG4gICAgY29ubmVjdCxcbiAgICBjb25uZWN0VGltZW91dCxcbiAgICB0bHMsXG4gICAgbWF4Q2FjaGVkU2Vzc2lvbnMsXG4gICAgc29ja2V0UGF0aCxcbiAgICBhdXRvU2VsZWN0RmFtaWx5LFxuICAgIGF1dG9TZWxlY3RGYW1pbHlBdHRlbXB0VGltZW91dCxcbiAgICBhbGxvd0gyLFxuICAgIC4uLm9wdGlvbnNcbiAgfSA9IHt9KSB7XG4gICAgc3VwZXIoKVxuXG4gICAgaWYgKGNvbm5lY3Rpb25zICE9IG51bGwgJiYgKCFOdW1iZXIuaXNGaW5pdGUoY29ubmVjdGlvbnMpIHx8IGNvbm5lY3Rpb25zIDwgMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjb25uZWN0aW9ucycpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmYWN0b3J5ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ZhY3RvcnkgbXVzdCBiZSBhIGZ1bmN0aW9uLicpXG4gICAgfVxuXG4gICAgaWYgKGNvbm5lY3QgIT0gbnVsbCAmJiB0eXBlb2YgY29ubmVjdCAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgY29ubmVjdCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignY29ubmVjdCBtdXN0IGJlIGEgZnVuY3Rpb24gb3IgYW4gb2JqZWN0JylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNvbm5lY3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbm5lY3QgPSBidWlsZENvbm5lY3Rvcih7XG4gICAgICAgIC4uLnRscyxcbiAgICAgICAgbWF4Q2FjaGVkU2Vzc2lvbnMsXG4gICAgICAgIGFsbG93SDIsXG4gICAgICAgIHNvY2tldFBhdGgsXG4gICAgICAgIHRpbWVvdXQ6IGNvbm5lY3RUaW1lb3V0LFxuICAgICAgICAuLi4odXRpbC5ub2RlSGFzQXV0b1NlbGVjdEZhbWlseSAmJiBhdXRvU2VsZWN0RmFtaWx5ID8geyBhdXRvU2VsZWN0RmFtaWx5LCBhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQgfSA6IHVuZGVmaW5lZCksXG4gICAgICAgIC4uLmNvbm5lY3RcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgdGhpc1trSW50ZXJjZXB0b3JzXSA9IG9wdGlvbnMuaW50ZXJjZXB0b3JzICYmIG9wdGlvbnMuaW50ZXJjZXB0b3JzLlBvb2wgJiYgQXJyYXkuaXNBcnJheShvcHRpb25zLmludGVyY2VwdG9ycy5Qb29sKVxuICAgICAgPyBvcHRpb25zLmludGVyY2VwdG9ycy5Qb29sXG4gICAgICA6IFtdXG4gICAgdGhpc1trQ29ubmVjdGlvbnNdID0gY29ubmVjdGlvbnMgfHwgbnVsbFxuICAgIHRoaXNba1VybF0gPSB1dGlsLnBhcnNlT3JpZ2luKG9yaWdpbilcbiAgICB0aGlzW2tPcHRpb25zXSA9IHsgLi4udXRpbC5kZWVwQ2xvbmUob3B0aW9ucyksIGNvbm5lY3QsIGFsbG93SDIgfVxuICAgIHRoaXNba09wdGlvbnNdLmludGVyY2VwdG9ycyA9IG9wdGlvbnMuaW50ZXJjZXB0b3JzXG4gICAgICA/IHsgLi4ub3B0aW9ucy5pbnRlcmNlcHRvcnMgfVxuICAgICAgOiB1bmRlZmluZWRcbiAgICB0aGlzW2tGYWN0b3J5XSA9IGZhY3RvcnlcbiAgfVxuXG4gIFtrR2V0RGlzcGF0Y2hlcl0gKCkge1xuICAgIGxldCBkaXNwYXRjaGVyID0gdGhpc1trQ2xpZW50c10uZmluZChkaXNwYXRjaGVyID0+ICFkaXNwYXRjaGVyW2tOZWVkRHJhaW5dKVxuXG4gICAgaWYgKGRpc3BhdGNoZXIpIHtcbiAgICAgIHJldHVybiBkaXNwYXRjaGVyXG4gICAgfVxuXG4gICAgaWYgKCF0aGlzW2tDb25uZWN0aW9uc10gfHwgdGhpc1trQ2xpZW50c10ubGVuZ3RoIDwgdGhpc1trQ29ubmVjdGlvbnNdKSB7XG4gICAgICBkaXNwYXRjaGVyID0gdGhpc1trRmFjdG9yeV0odGhpc1trVXJsXSwgdGhpc1trT3B0aW9uc10pXG4gICAgICB0aGlzW2tBZGRDbGllbnRdKGRpc3BhdGNoZXIpXG4gICAgfVxuXG4gICAgcmV0dXJuIGRpc3BhdGNoZXJcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFBvb2xcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHtcbiAgQmFsYW5jZWRQb29sTWlzc2luZ1Vwc3RyZWFtRXJyb3IsXG4gIEludmFsaWRBcmd1bWVudEVycm9yXG59ID0gcmVxdWlyZSgnLi9jb3JlL2Vycm9ycycpXG5jb25zdCB7XG4gIFBvb2xCYXNlLFxuICBrQ2xpZW50cyxcbiAga05lZWREcmFpbixcbiAga0FkZENsaWVudCxcbiAga1JlbW92ZUNsaWVudCxcbiAga0dldERpc3BhdGNoZXJcbn0gPSByZXF1aXJlKCcuL3Bvb2wtYmFzZScpXG5jb25zdCBQb29sID0gcmVxdWlyZSgnLi9wb29sJylcbmNvbnN0IHsga1VybCwga0ludGVyY2VwdG9ycyB9ID0gcmVxdWlyZSgnLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgeyBwYXJzZU9yaWdpbiB9ID0gcmVxdWlyZSgnLi9jb3JlL3V0aWwnKVxuY29uc3Qga0ZhY3RvcnkgPSBTeW1ib2woJ2ZhY3RvcnknKVxuXG5jb25zdCBrT3B0aW9ucyA9IFN5bWJvbCgnb3B0aW9ucycpXG5jb25zdCBrR3JlYXRlc3RDb21tb25EaXZpc29yID0gU3ltYm9sKCdrR3JlYXRlc3RDb21tb25EaXZpc29yJylcbmNvbnN0IGtDdXJyZW50V2VpZ2h0ID0gU3ltYm9sKCdrQ3VycmVudFdlaWdodCcpXG5jb25zdCBrSW5kZXggPSBTeW1ib2woJ2tJbmRleCcpXG5jb25zdCBrV2VpZ2h0ID0gU3ltYm9sKCdrV2VpZ2h0JylcbmNvbnN0IGtNYXhXZWlnaHRQZXJTZXJ2ZXIgPSBTeW1ib2woJ2tNYXhXZWlnaHRQZXJTZXJ2ZXInKVxuY29uc3Qga0Vycm9yUGVuYWx0eSA9IFN5bWJvbCgna0Vycm9yUGVuYWx0eScpXG5cbmZ1bmN0aW9uIGdldEdyZWF0ZXN0Q29tbW9uRGl2aXNvciAoYSwgYikge1xuICBpZiAoYiA9PT0gMCkgcmV0dXJuIGFcbiAgcmV0dXJuIGdldEdyZWF0ZXN0Q29tbW9uRGl2aXNvcihiLCBhICUgYilcbn1cblxuZnVuY3Rpb24gZGVmYXVsdEZhY3RvcnkgKG9yaWdpbiwgb3B0cykge1xuICByZXR1cm4gbmV3IFBvb2wob3JpZ2luLCBvcHRzKVxufVxuXG5jbGFzcyBCYWxhbmNlZFBvb2wgZXh0ZW5kcyBQb29sQmFzZSB7XG4gIGNvbnN0cnVjdG9yICh1cHN0cmVhbXMgPSBbXSwgeyBmYWN0b3J5ID0gZGVmYXVsdEZhY3RvcnksIC4uLm9wdHMgfSA9IHt9KSB7XG4gICAgc3VwZXIoKVxuXG4gICAgdGhpc1trT3B0aW9uc10gPSBvcHRzXG4gICAgdGhpc1trSW5kZXhdID0gLTFcbiAgICB0aGlzW2tDdXJyZW50V2VpZ2h0XSA9IDBcblxuICAgIHRoaXNba01heFdlaWdodFBlclNlcnZlcl0gPSB0aGlzW2tPcHRpb25zXS5tYXhXZWlnaHRQZXJTZXJ2ZXIgfHwgMTAwXG4gICAgdGhpc1trRXJyb3JQZW5hbHR5XSA9IHRoaXNba09wdGlvbnNdLmVycm9yUGVuYWx0eSB8fCAxNVxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHVwc3RyZWFtcykpIHtcbiAgICAgIHVwc3RyZWFtcyA9IFt1cHN0cmVhbXNdXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmYWN0b3J5ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ZhY3RvcnkgbXVzdCBiZSBhIGZ1bmN0aW9uLicpXG4gICAgfVxuXG4gICAgdGhpc1trSW50ZXJjZXB0b3JzXSA9IG9wdHMuaW50ZXJjZXB0b3JzICYmIG9wdHMuaW50ZXJjZXB0b3JzLkJhbGFuY2VkUG9vbCAmJiBBcnJheS5pc0FycmF5KG9wdHMuaW50ZXJjZXB0b3JzLkJhbGFuY2VkUG9vbClcbiAgICAgID8gb3B0cy5pbnRlcmNlcHRvcnMuQmFsYW5jZWRQb29sXG4gICAgICA6IFtdXG4gICAgdGhpc1trRmFjdG9yeV0gPSBmYWN0b3J5XG5cbiAgICBmb3IgKGNvbnN0IHVwc3RyZWFtIG9mIHVwc3RyZWFtcykge1xuICAgICAgdGhpcy5hZGRVcHN0cmVhbSh1cHN0cmVhbSlcbiAgICB9XG4gICAgdGhpcy5fdXBkYXRlQmFsYW5jZWRQb29sU3RhdHMoKVxuICB9XG5cbiAgYWRkVXBzdHJlYW0gKHVwc3RyZWFtKSB7XG4gICAgY29uc3QgdXBzdHJlYW1PcmlnaW4gPSBwYXJzZU9yaWdpbih1cHN0cmVhbSkub3JpZ2luXG5cbiAgICBpZiAodGhpc1trQ2xpZW50c10uZmluZCgocG9vbCkgPT4gKFxuICAgICAgcG9vbFtrVXJsXS5vcmlnaW4gPT09IHVwc3RyZWFtT3JpZ2luICYmXG4gICAgICBwb29sLmNsb3NlZCAhPT0gdHJ1ZSAmJlxuICAgICAgcG9vbC5kZXN0cm95ZWQgIT09IHRydWVcbiAgICApKSkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG4gICAgY29uc3QgcG9vbCA9IHRoaXNba0ZhY3RvcnldKHVwc3RyZWFtT3JpZ2luLCBPYmplY3QuYXNzaWduKHt9LCB0aGlzW2tPcHRpb25zXSkpXG5cbiAgICB0aGlzW2tBZGRDbGllbnRdKHBvb2wpXG4gICAgcG9vbC5vbignY29ubmVjdCcsICgpID0+IHtcbiAgICAgIHBvb2xba1dlaWdodF0gPSBNYXRoLm1pbih0aGlzW2tNYXhXZWlnaHRQZXJTZXJ2ZXJdLCBwb29sW2tXZWlnaHRdICsgdGhpc1trRXJyb3JQZW5hbHR5XSlcbiAgICB9KVxuXG4gICAgcG9vbC5vbignY29ubmVjdGlvbkVycm9yJywgKCkgPT4ge1xuICAgICAgcG9vbFtrV2VpZ2h0XSA9IE1hdGgubWF4KDEsIHBvb2xba1dlaWdodF0gLSB0aGlzW2tFcnJvclBlbmFsdHldKVxuICAgICAgdGhpcy5fdXBkYXRlQmFsYW5jZWRQb29sU3RhdHMoKVxuICAgIH0pXG5cbiAgICBwb29sLm9uKCdkaXNjb25uZWN0JywgKC4uLmFyZ3MpID0+IHtcbiAgICAgIGNvbnN0IGVyciA9IGFyZ3NbMl1cbiAgICAgIGlmIChlcnIgJiYgZXJyLmNvZGUgPT09ICdVTkRfRVJSX1NPQ0tFVCcpIHtcbiAgICAgICAgLy8gZGVjcmVhc2UgdGhlIHdlaWdodCBvZiB0aGUgcG9vbC5cbiAgICAgICAgcG9vbFtrV2VpZ2h0XSA9IE1hdGgubWF4KDEsIHBvb2xba1dlaWdodF0gLSB0aGlzW2tFcnJvclBlbmFsdHldKVxuICAgICAgICB0aGlzLl91cGRhdGVCYWxhbmNlZFBvb2xTdGF0cygpXG4gICAgICB9XG4gICAgfSlcblxuICAgIGZvciAoY29uc3QgY2xpZW50IG9mIHRoaXNba0NsaWVudHNdKSB7XG4gICAgICBjbGllbnRba1dlaWdodF0gPSB0aGlzW2tNYXhXZWlnaHRQZXJTZXJ2ZXJdXG4gICAgfVxuXG4gICAgdGhpcy5fdXBkYXRlQmFsYW5jZWRQb29sU3RhdHMoKVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIF91cGRhdGVCYWxhbmNlZFBvb2xTdGF0cyAoKSB7XG4gICAgdGhpc1trR3JlYXRlc3RDb21tb25EaXZpc29yXSA9IHRoaXNba0NsaWVudHNdLm1hcChwID0+IHBba1dlaWdodF0pLnJlZHVjZShnZXRHcmVhdGVzdENvbW1vbkRpdmlzb3IsIDApXG4gIH1cblxuICByZW1vdmVVcHN0cmVhbSAodXBzdHJlYW0pIHtcbiAgICBjb25zdCB1cHN0cmVhbU9yaWdpbiA9IHBhcnNlT3JpZ2luKHVwc3RyZWFtKS5vcmlnaW5cblxuICAgIGNvbnN0IHBvb2wgPSB0aGlzW2tDbGllbnRzXS5maW5kKChwb29sKSA9PiAoXG4gICAgICBwb29sW2tVcmxdLm9yaWdpbiA9PT0gdXBzdHJlYW1PcmlnaW4gJiZcbiAgICAgIHBvb2wuY2xvc2VkICE9PSB0cnVlICYmXG4gICAgICBwb29sLmRlc3Ryb3llZCAhPT0gdHJ1ZVxuICAgICkpXG5cbiAgICBpZiAocG9vbCkge1xuICAgICAgdGhpc1trUmVtb3ZlQ2xpZW50XShwb29sKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBnZXQgdXBzdHJlYW1zICgpIHtcbiAgICByZXR1cm4gdGhpc1trQ2xpZW50c11cbiAgICAgIC5maWx0ZXIoZGlzcGF0Y2hlciA9PiBkaXNwYXRjaGVyLmNsb3NlZCAhPT0gdHJ1ZSAmJiBkaXNwYXRjaGVyLmRlc3Ryb3llZCAhPT0gdHJ1ZSlcbiAgICAgIC5tYXAoKHApID0+IHBba1VybF0ub3JpZ2luKVxuICB9XG5cbiAgW2tHZXREaXNwYXRjaGVyXSAoKSB7XG4gICAgLy8gV2UgdmFsaWRhdGUgdGhhdCBwb29scyBpcyBncmVhdGVyIHRoYW4gMCxcbiAgICAvLyBvdGhlcndpc2Ugd2Ugd291bGQgaGF2ZSB0byB3YWl0IHVudGlsIGFuIHVwc3RyZWFtXG4gICAgLy8gaXMgYWRkZWQsIHdoaWNoIG1pZ2h0IG5ldmVyIGhhcHBlbi5cbiAgICBpZiAodGhpc1trQ2xpZW50c10ubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgQmFsYW5jZWRQb29sTWlzc2luZ1Vwc3RyZWFtRXJyb3IoKVxuICAgIH1cblxuICAgIGNvbnN0IGRpc3BhdGNoZXIgPSB0aGlzW2tDbGllbnRzXS5maW5kKGRpc3BhdGNoZXIgPT4gKFxuICAgICAgIWRpc3BhdGNoZXJba05lZWREcmFpbl0gJiZcbiAgICAgIGRpc3BhdGNoZXIuY2xvc2VkICE9PSB0cnVlICYmXG4gICAgICBkaXNwYXRjaGVyLmRlc3Ryb3llZCAhPT0gdHJ1ZVxuICAgICkpXG5cbiAgICBpZiAoIWRpc3BhdGNoZXIpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGFsbENsaWVudHNCdXN5ID0gdGhpc1trQ2xpZW50c10ubWFwKHBvb2wgPT4gcG9vbFtrTmVlZERyYWluXSkucmVkdWNlKChhLCBiKSA9PiBhICYmIGIsIHRydWUpXG5cbiAgICBpZiAoYWxsQ2xpZW50c0J1c3kpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGxldCBjb3VudGVyID0gMFxuXG4gICAgbGV0IG1heFdlaWdodEluZGV4ID0gdGhpc1trQ2xpZW50c10uZmluZEluZGV4KHBvb2wgPT4gIXBvb2xba05lZWREcmFpbl0pXG5cbiAgICB3aGlsZSAoY291bnRlcisrIDwgdGhpc1trQ2xpZW50c10ubGVuZ3RoKSB7XG4gICAgICB0aGlzW2tJbmRleF0gPSAodGhpc1trSW5kZXhdICsgMSkgJSB0aGlzW2tDbGllbnRzXS5sZW5ndGhcbiAgICAgIGNvbnN0IHBvb2wgPSB0aGlzW2tDbGllbnRzXVt0aGlzW2tJbmRleF1dXG5cbiAgICAgIC8vIGZpbmQgcG9vbCBpbmRleCB3aXRoIHRoZSBsYXJnZXN0IHdlaWdodFxuICAgICAgaWYgKHBvb2xba1dlaWdodF0gPiB0aGlzW2tDbGllbnRzXVttYXhXZWlnaHRJbmRleF1ba1dlaWdodF0gJiYgIXBvb2xba05lZWREcmFpbl0pIHtcbiAgICAgICAgbWF4V2VpZ2h0SW5kZXggPSB0aGlzW2tJbmRleF1cbiAgICAgIH1cblxuICAgICAgLy8gZGVjcmVhc2UgdGhlIGN1cnJlbnQgd2VpZ2h0IGV2ZXJ5IGB0aGlzW2tDbGllbnRzXS5sZW5ndGhgLlxuICAgICAgaWYgKHRoaXNba0luZGV4XSA9PT0gMCkge1xuICAgICAgICAvLyBTZXQgdGhlIGN1cnJlbnQgd2VpZ2h0IHRvIHRoZSBuZXh0IGxvd2VyIHdlaWdodC5cbiAgICAgICAgdGhpc1trQ3VycmVudFdlaWdodF0gPSB0aGlzW2tDdXJyZW50V2VpZ2h0XSAtIHRoaXNba0dyZWF0ZXN0Q29tbW9uRGl2aXNvcl1cblxuICAgICAgICBpZiAodGhpc1trQ3VycmVudFdlaWdodF0gPD0gMCkge1xuICAgICAgICAgIHRoaXNba0N1cnJlbnRXZWlnaHRdID0gdGhpc1trTWF4V2VpZ2h0UGVyU2VydmVyXVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocG9vbFtrV2VpZ2h0XSA+PSB0aGlzW2tDdXJyZW50V2VpZ2h0XSAmJiAoIXBvb2xba05lZWREcmFpbl0pKSB7XG4gICAgICAgIHJldHVybiBwb29sXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpc1trQ3VycmVudFdlaWdodF0gPSB0aGlzW2tDbGllbnRzXVttYXhXZWlnaHRJbmRleF1ba1dlaWdodF1cbiAgICB0aGlzW2tJbmRleF0gPSBtYXhXZWlnaHRJbmRleFxuICAgIHJldHVybiB0aGlzW2tDbGllbnRzXVttYXhXZWlnaHRJbmRleF1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEJhbGFuY2VkUG9vbFxuIiwKICAgICIndXNlIHN0cmljdCdcblxuLyogaXN0YW5idWwgaWdub3JlIGZpbGU6IG9ubHkgZm9yIE5vZGUgMTIgKi9cblxuY29uc3QgeyBrQ29ubmVjdGVkLCBrU2l6ZSB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcblxuY2xhc3MgQ29tcGF0V2Vha1JlZiB7XG4gIGNvbnN0cnVjdG9yICh2YWx1ZSkge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZVxuICB9XG5cbiAgZGVyZWYgKCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlW2tDb25uZWN0ZWRdID09PSAwICYmIHRoaXMudmFsdWVba1NpemVdID09PSAwXG4gICAgICA/IHVuZGVmaW5lZFxuICAgICAgOiB0aGlzLnZhbHVlXG4gIH1cbn1cblxuY2xhc3MgQ29tcGF0RmluYWxpemVyIHtcbiAgY29uc3RydWN0b3IgKGZpbmFsaXplcikge1xuICAgIHRoaXMuZmluYWxpemVyID0gZmluYWxpemVyXG4gIH1cblxuICByZWdpc3RlciAoZGlzcGF0Y2hlciwga2V5KSB7XG4gICAgaWYgKGRpc3BhdGNoZXIub24pIHtcbiAgICAgIGRpc3BhdGNoZXIub24oJ2Rpc2Nvbm5lY3QnLCAoKSA9PiB7XG4gICAgICAgIGlmIChkaXNwYXRjaGVyW2tDb25uZWN0ZWRdID09PSAwICYmIGRpc3BhdGNoZXJba1NpemVdID09PSAwKSB7XG4gICAgICAgICAgdGhpcy5maW5hbGl6ZXIoa2V5KVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gRklYTUU6IHJlbW92ZSB3b3JrYXJvdW5kIHdoZW4gdGhlIE5vZGUgYnVnIGlzIGZpeGVkXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9pc3N1ZXMvNDkzNDQjaXNzdWVjb21tZW50LTE3NDE3NzYzMDhcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfVjhfQ09WRVJBR0UpIHtcbiAgICByZXR1cm4ge1xuICAgICAgV2Vha1JlZjogQ29tcGF0V2Vha1JlZixcbiAgICAgIEZpbmFsaXphdGlvblJlZ2lzdHJ5OiBDb21wYXRGaW5hbGl6ZXJcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBXZWFrUmVmOiBnbG9iYWwuV2Vha1JlZiB8fCBDb21wYXRXZWFrUmVmLFxuICAgIEZpbmFsaXphdGlvblJlZ2lzdHJ5OiBnbG9iYWwuRmluYWxpemF0aW9uUmVnaXN0cnkgfHwgQ29tcGF0RmluYWxpemVyXG4gIH1cbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IHJlcXVpcmUoJy4vY29yZS9lcnJvcnMnKVxuY29uc3QgeyBrQ2xpZW50cywga1J1bm5pbmcsIGtDbG9zZSwga0Rlc3Ryb3ksIGtEaXNwYXRjaCwga0ludGVyY2VwdG9ycyB9ID0gcmVxdWlyZSgnLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgRGlzcGF0Y2hlckJhc2UgPSByZXF1aXJlKCcuL2Rpc3BhdGNoZXItYmFzZScpXG5jb25zdCBQb29sID0gcmVxdWlyZSgnLi9wb29sJylcbmNvbnN0IENsaWVudCA9IHJlcXVpcmUoJy4vY2xpZW50JylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuL2NvcmUvdXRpbCcpXG5jb25zdCBjcmVhdGVSZWRpcmVjdEludGVyY2VwdG9yID0gcmVxdWlyZSgnLi9pbnRlcmNlcHRvci9yZWRpcmVjdEludGVyY2VwdG9yJylcbmNvbnN0IHsgV2Vha1JlZiwgRmluYWxpemF0aW9uUmVnaXN0cnkgfSA9IHJlcXVpcmUoJy4vY29tcGF0L2Rpc3BhdGNoZXItd2Vha3JlZicpKClcblxuY29uc3Qga09uQ29ubmVjdCA9IFN5bWJvbCgnb25Db25uZWN0JylcbmNvbnN0IGtPbkRpc2Nvbm5lY3QgPSBTeW1ib2woJ29uRGlzY29ubmVjdCcpXG5jb25zdCBrT25Db25uZWN0aW9uRXJyb3IgPSBTeW1ib2woJ29uQ29ubmVjdGlvbkVycm9yJylcbmNvbnN0IGtNYXhSZWRpcmVjdGlvbnMgPSBTeW1ib2woJ21heFJlZGlyZWN0aW9ucycpXG5jb25zdCBrT25EcmFpbiA9IFN5bWJvbCgnb25EcmFpbicpXG5jb25zdCBrRmFjdG9yeSA9IFN5bWJvbCgnZmFjdG9yeScpXG5jb25zdCBrRmluYWxpemVyID0gU3ltYm9sKCdmaW5hbGl6ZXInKVxuY29uc3Qga09wdGlvbnMgPSBTeW1ib2woJ29wdGlvbnMnKVxuXG5mdW5jdGlvbiBkZWZhdWx0RmFjdG9yeSAob3JpZ2luLCBvcHRzKSB7XG4gIHJldHVybiBvcHRzICYmIG9wdHMuY29ubmVjdGlvbnMgPT09IDFcbiAgICA/IG5ldyBDbGllbnQob3JpZ2luLCBvcHRzKVxuICAgIDogbmV3IFBvb2wob3JpZ2luLCBvcHRzKVxufVxuXG5jbGFzcyBBZ2VudCBleHRlbmRzIERpc3BhdGNoZXJCYXNlIHtcbiAgY29uc3RydWN0b3IgKHsgZmFjdG9yeSA9IGRlZmF1bHRGYWN0b3J5LCBtYXhSZWRpcmVjdGlvbnMgPSAwLCBjb25uZWN0LCAuLi5vcHRpb25zIH0gPSB7fSkge1xuICAgIHN1cGVyKClcblxuICAgIGlmICh0eXBlb2YgZmFjdG9yeSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdmYWN0b3J5IG11c3QgYmUgYSBmdW5jdGlvbi4nKVxuICAgIH1cblxuICAgIGlmIChjb25uZWN0ICE9IG51bGwgJiYgdHlwZW9mIGNvbm5lY3QgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGNvbm5lY3QgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2Nvbm5lY3QgbXVzdCBiZSBhIGZ1bmN0aW9uIG9yIGFuIG9iamVjdCcpXG4gICAgfVxuXG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKG1heFJlZGlyZWN0aW9ucykgfHwgbWF4UmVkaXJlY3Rpb25zIDwgMCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdtYXhSZWRpcmVjdGlvbnMgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpXG4gICAgfVxuXG4gICAgaWYgKGNvbm5lY3QgJiYgdHlwZW9mIGNvbm5lY3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbm5lY3QgPSB7IC4uLmNvbm5lY3QgfVxuICAgIH1cblxuICAgIHRoaXNba0ludGVyY2VwdG9yc10gPSBvcHRpb25zLmludGVyY2VwdG9ycyAmJiBvcHRpb25zLmludGVyY2VwdG9ycy5BZ2VudCAmJiBBcnJheS5pc0FycmF5KG9wdGlvbnMuaW50ZXJjZXB0b3JzLkFnZW50KVxuICAgICAgPyBvcHRpb25zLmludGVyY2VwdG9ycy5BZ2VudFxuICAgICAgOiBbY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvcih7IG1heFJlZGlyZWN0aW9ucyB9KV1cblxuICAgIHRoaXNba09wdGlvbnNdID0geyAuLi51dGlsLmRlZXBDbG9uZShvcHRpb25zKSwgY29ubmVjdCB9XG4gICAgdGhpc1trT3B0aW9uc10uaW50ZXJjZXB0b3JzID0gb3B0aW9ucy5pbnRlcmNlcHRvcnNcbiAgICAgID8geyAuLi5vcHRpb25zLmludGVyY2VwdG9ycyB9XG4gICAgICA6IHVuZGVmaW5lZFxuICAgIHRoaXNba01heFJlZGlyZWN0aW9uc10gPSBtYXhSZWRpcmVjdGlvbnNcbiAgICB0aGlzW2tGYWN0b3J5XSA9IGZhY3RvcnlcbiAgICB0aGlzW2tDbGllbnRzXSA9IG5ldyBNYXAoKVxuICAgIHRoaXNba0ZpbmFsaXplcl0gPSBuZXcgRmluYWxpemF0aW9uUmVnaXN0cnkoLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IGdjIGlzIHVuZGV0ZXJtaW5pc3RpYyAqLyBrZXkgPT4ge1xuICAgICAgY29uc3QgcmVmID0gdGhpc1trQ2xpZW50c10uZ2V0KGtleSlcbiAgICAgIGlmIChyZWYgIT09IHVuZGVmaW5lZCAmJiByZWYuZGVyZWYoKSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXNba0NsaWVudHNdLmRlbGV0ZShrZXkpXG4gICAgICB9XG4gICAgfSlcblxuICAgIGNvbnN0IGFnZW50ID0gdGhpc1xuXG4gICAgdGhpc1trT25EcmFpbl0gPSAob3JpZ2luLCB0YXJnZXRzKSA9PiB7XG4gICAgICBhZ2VudC5lbWl0KCdkcmFpbicsIG9yaWdpbiwgW2FnZW50LCAuLi50YXJnZXRzXSlcbiAgICB9XG5cbiAgICB0aGlzW2tPbkNvbm5lY3RdID0gKG9yaWdpbiwgdGFyZ2V0cykgPT4ge1xuICAgICAgYWdlbnQuZW1pdCgnY29ubmVjdCcsIG9yaWdpbiwgW2FnZW50LCAuLi50YXJnZXRzXSlcbiAgICB9XG5cbiAgICB0aGlzW2tPbkRpc2Nvbm5lY3RdID0gKG9yaWdpbiwgdGFyZ2V0cywgZXJyKSA9PiB7XG4gICAgICBhZ2VudC5lbWl0KCdkaXNjb25uZWN0Jywgb3JpZ2luLCBbYWdlbnQsIC4uLnRhcmdldHNdLCBlcnIpXG4gICAgfVxuXG4gICAgdGhpc1trT25Db25uZWN0aW9uRXJyb3JdID0gKG9yaWdpbiwgdGFyZ2V0cywgZXJyKSA9PiB7XG4gICAgICBhZ2VudC5lbWl0KCdjb25uZWN0aW9uRXJyb3InLCBvcmlnaW4sIFthZ2VudCwgLi4udGFyZ2V0c10sIGVycilcbiAgICB9XG4gIH1cblxuICBnZXQgW2tSdW5uaW5nXSAoKSB7XG4gICAgbGV0IHJldCA9IDBcbiAgICBmb3IgKGNvbnN0IHJlZiBvZiB0aGlzW2tDbGllbnRzXS52YWx1ZXMoKSkge1xuICAgICAgY29uc3QgY2xpZW50ID0gcmVmLmRlcmVmKClcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBnYyBpcyB1bmRldGVybWluaXN0aWMgKi9cbiAgICAgIGlmIChjbGllbnQpIHtcbiAgICAgICAgcmV0ICs9IGNsaWVudFtrUnVubmluZ11cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgW2tEaXNwYXRjaF0gKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBsZXQga2V5XG4gICAgaWYgKG9wdHMub3JpZ2luICYmICh0eXBlb2Ygb3B0cy5vcmlnaW4gPT09ICdzdHJpbmcnIHx8IG9wdHMub3JpZ2luIGluc3RhbmNlb2YgVVJMKSkge1xuICAgICAga2V5ID0gU3RyaW5nKG9wdHMub3JpZ2luKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ29wdHMub3JpZ2luIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIG9yIFVSTC4nKVxuICAgIH1cblxuICAgIGNvbnN0IHJlZiA9IHRoaXNba0NsaWVudHNdLmdldChrZXkpXG5cbiAgICBsZXQgZGlzcGF0Y2hlciA9IHJlZiA/IHJlZi5kZXJlZigpIDogbnVsbFxuICAgIGlmICghZGlzcGF0Y2hlcikge1xuICAgICAgZGlzcGF0Y2hlciA9IHRoaXNba0ZhY3RvcnldKG9wdHMub3JpZ2luLCB0aGlzW2tPcHRpb25zXSlcbiAgICAgICAgLm9uKCdkcmFpbicsIHRoaXNba09uRHJhaW5dKVxuICAgICAgICAub24oJ2Nvbm5lY3QnLCB0aGlzW2tPbkNvbm5lY3RdKVxuICAgICAgICAub24oJ2Rpc2Nvbm5lY3QnLCB0aGlzW2tPbkRpc2Nvbm5lY3RdKVxuICAgICAgICAub24oJ2Nvbm5lY3Rpb25FcnJvcicsIHRoaXNba09uQ29ubmVjdGlvbkVycm9yXSlcblxuICAgICAgdGhpc1trQ2xpZW50c10uc2V0KGtleSwgbmV3IFdlYWtSZWYoZGlzcGF0Y2hlcikpXG4gICAgICB0aGlzW2tGaW5hbGl6ZXJdLnJlZ2lzdGVyKGRpc3BhdGNoZXIsIGtleSlcbiAgICB9XG5cbiAgICByZXR1cm4gZGlzcGF0Y2hlci5kaXNwYXRjaChvcHRzLCBoYW5kbGVyKVxuICB9XG5cbiAgYXN5bmMgW2tDbG9zZV0gKCkge1xuICAgIGNvbnN0IGNsb3NlUHJvbWlzZXMgPSBbXVxuICAgIGZvciAoY29uc3QgcmVmIG9mIHRoaXNba0NsaWVudHNdLnZhbHVlcygpKSB7XG4gICAgICBjb25zdCBjbGllbnQgPSByZWYuZGVyZWYoKVxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2U6IGdjIGlzIHVuZGV0ZXJtaW5pc3RpYyAqL1xuICAgICAgaWYgKGNsaWVudCkge1xuICAgICAgICBjbG9zZVByb21pc2VzLnB1c2goY2xpZW50LmNsb3NlKCkpXG4gICAgICB9XG4gICAgfVxuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoY2xvc2VQcm9taXNlcylcbiAgfVxuXG4gIGFzeW5jIFtrRGVzdHJveV0gKGVycikge1xuICAgIGNvbnN0IGRlc3Ryb3lQcm9taXNlcyA9IFtdXG4gICAgZm9yIChjb25zdCByZWYgb2YgdGhpc1trQ2xpZW50c10udmFsdWVzKCkpIHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IHJlZi5kZXJlZigpXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogZ2MgaXMgdW5kZXRlcm1pbmlzdGljICovXG4gICAgICBpZiAoY2xpZW50KSB7XG4gICAgICAgIGRlc3Ryb3lQcm9taXNlcy5wdXNoKGNsaWVudC5kZXN0cm95KGVycikpXG4gICAgICB9XG4gICAgfVxuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoZGVzdHJveVByb21pc2VzKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQWdlbnRcbiIsCiAgICAiLy8gUG9ydGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvcHVsbC85MDdcblxuJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7IFJlYWRhYmxlIH0gPSByZXF1aXJlKCdzdHJlYW0nKVxuY29uc3QgeyBSZXF1ZXN0QWJvcnRlZEVycm9yLCBOb3RTdXBwb3J0ZWRFcnJvciwgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBSZWFkYWJsZVN0cmVhbUZyb20sIHRvVVNWU3RyaW5nIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuXG5sZXQgQmxvYlxuXG5jb25zdCBrQ29uc3VtZSA9IFN5bWJvbCgna0NvbnN1bWUnKVxuY29uc3Qga1JlYWRpbmcgPSBTeW1ib2woJ2tSZWFkaW5nJylcbmNvbnN0IGtCb2R5ID0gU3ltYm9sKCdrQm9keScpXG5jb25zdCBrQWJvcnQgPSBTeW1ib2woJ2Fib3J0JylcbmNvbnN0IGtDb250ZW50VHlwZSA9IFN5bWJvbCgna0NvbnRlbnRUeXBlJylcblxuY29uc3Qgbm9vcCA9ICgpID0+IHt9XG5cbm1vZHVsZS5leHBvcnRzID0gY2xhc3MgQm9keVJlYWRhYmxlIGV4dGVuZHMgUmVhZGFibGUge1xuICBjb25zdHJ1Y3RvciAoe1xuICAgIHJlc3VtZSxcbiAgICBhYm9ydCxcbiAgICBjb250ZW50VHlwZSA9ICcnLFxuICAgIGhpZ2hXYXRlck1hcmsgPSA2NCAqIDEwMjQgLy8gU2FtZSBhcyBub2RlanMgZnMgc3RyZWFtcy5cbiAgfSkge1xuICAgIHN1cGVyKHtcbiAgICAgIGF1dG9EZXN0cm95OiB0cnVlLFxuICAgICAgcmVhZDogcmVzdW1lLFxuICAgICAgaGlnaFdhdGVyTWFya1xuICAgIH0pXG5cbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmRhdGFFbWl0dGVkID0gZmFsc2VcblxuICAgIHRoaXNba0Fib3J0XSA9IGFib3J0XG4gICAgdGhpc1trQ29uc3VtZV0gPSBudWxsXG4gICAgdGhpc1trQm9keV0gPSBudWxsXG4gICAgdGhpc1trQ29udGVudFR5cGVdID0gY29udGVudFR5cGVcblxuICAgIC8vIElzIHN0cmVhbSBiZWluZyBjb25zdW1lZCB0aHJvdWdoIFJlYWRhYmxlIEFQST9cbiAgICAvLyBUaGlzIGlzIGFuIG9wdGltaXphdGlvbiBzbyB0aGF0IHdlIGF2b2lkIGNoZWNraW5nXG4gICAgLy8gZm9yICdkYXRhJyBhbmQgJ3JlYWRhYmxlJyBsaXN0ZW5lcnMgaW4gdGhlIGhvdCBwYXRoXG4gICAgLy8gaW5zaWRlIHB1c2goKS5cbiAgICB0aGlzW2tSZWFkaW5nXSA9IGZhbHNlXG4gIH1cblxuICBkZXN0cm95IChlcnIpIHtcbiAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHtcbiAgICAgIC8vIE5vZGUgPCAxNlxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG5cbiAgICBpZiAoIWVyciAmJiAhdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkKSB7XG4gICAgICBlcnIgPSBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gICAgfVxuXG4gICAgaWYgKGVycikge1xuICAgICAgdGhpc1trQWJvcnRdKClcbiAgICB9XG5cbiAgICByZXR1cm4gc3VwZXIuZGVzdHJveShlcnIpXG4gIH1cblxuICBlbWl0IChldiwgLi4uYXJncykge1xuICAgIGlmIChldiA9PT0gJ2RhdGEnKSB7XG4gICAgICAvLyBOb2RlIDwgMTYuN1xuICAgICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5kYXRhRW1pdHRlZCA9IHRydWVcbiAgICB9IGVsc2UgaWYgKGV2ID09PSAnZXJyb3InKSB7XG4gICAgICAvLyBOb2RlIDwgMTZcbiAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkID0gdHJ1ZVxuICAgIH1cbiAgICByZXR1cm4gc3VwZXIuZW1pdChldiwgLi4uYXJncylcbiAgfVxuXG4gIG9uIChldiwgLi4uYXJncykge1xuICAgIGlmIChldiA9PT0gJ2RhdGEnIHx8IGV2ID09PSAncmVhZGFibGUnKSB7XG4gICAgICB0aGlzW2tSZWFkaW5nXSA9IHRydWVcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLm9uKGV2LCAuLi5hcmdzKVxuICB9XG5cbiAgYWRkTGlzdGVuZXIgKGV2LCAuLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMub24oZXYsIC4uLmFyZ3MpXG4gIH1cblxuICBvZmYgKGV2LCAuLi5hcmdzKSB7XG4gICAgY29uc3QgcmV0ID0gc3VwZXIub2ZmKGV2LCAuLi5hcmdzKVxuICAgIGlmIChldiA9PT0gJ2RhdGEnIHx8IGV2ID09PSAncmVhZGFibGUnKSB7XG4gICAgICB0aGlzW2tSZWFkaW5nXSA9IChcbiAgICAgICAgdGhpcy5saXN0ZW5lckNvdW50KCdkYXRhJykgPiAwIHx8XG4gICAgICAgIHRoaXMubGlzdGVuZXJDb3VudCgncmVhZGFibGUnKSA+IDBcbiAgICAgIClcbiAgICB9XG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgcmVtb3ZlTGlzdGVuZXIgKGV2LCAuLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMub2ZmKGV2LCAuLi5hcmdzKVxuICB9XG5cbiAgcHVzaCAoY2h1bmspIHtcbiAgICBpZiAodGhpc1trQ29uc3VtZV0gJiYgY2h1bmsgIT09IG51bGwgJiYgdGhpcy5yZWFkYWJsZUxlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc3VtZVB1c2godGhpc1trQ29uc3VtZV0sIGNodW5rKVxuICAgICAgcmV0dXJuIHRoaXNba1JlYWRpbmddID8gc3VwZXIucHVzaChjaHVuaykgOiB0cnVlXG4gICAgfVxuICAgIHJldHVybiBzdXBlci5wdXNoKGNodW5rKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1ib2R5LXRleHRcbiAgYXN5bmMgdGV4dCAoKSB7XG4gICAgcmV0dXJuIGNvbnN1bWUodGhpcywgJ3RleHQnKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1ib2R5LWpzb25cbiAgYXN5bmMganNvbiAoKSB7XG4gICAgcmV0dXJuIGNvbnN1bWUodGhpcywgJ2pzb24nKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1ib2R5LWJsb2JcbiAgYXN5bmMgYmxvYiAoKSB7XG4gICAgcmV0dXJuIGNvbnN1bWUodGhpcywgJ2Jsb2InKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1ib2R5LWFycmF5YnVmZmVyXG4gIGFzeW5jIGFycmF5QnVmZmVyICgpIHtcbiAgICByZXR1cm4gY29uc3VtZSh0aGlzLCAnYXJyYXlCdWZmZXInKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1ib2R5LWZvcm1kYXRhXG4gIGFzeW5jIGZvcm1EYXRhICgpIHtcbiAgICAvLyBUT0RPOiBJbXBsZW1lbnQuXG4gICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZEVycm9yKClcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS1ib2R5dXNlZFxuICBnZXQgYm9keVVzZWQgKCkge1xuICAgIHJldHVybiB1dGlsLmlzRGlzdHVyYmVkKHRoaXMpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWJvZHktYm9keVxuICBnZXQgYm9keSAoKSB7XG4gICAgaWYgKCF0aGlzW2tCb2R5XSkge1xuICAgICAgdGhpc1trQm9keV0gPSBSZWFkYWJsZVN0cmVhbUZyb20odGhpcylcbiAgICAgIGlmICh0aGlzW2tDb25zdW1lXSkge1xuICAgICAgICAvLyBUT0RPOiBJcyB0aGlzIHRoZSBiZXN0IHdheSB0byBmb3JjZSBhIGxvY2s/XG4gICAgICAgIHRoaXNba0JvZHldLmdldFJlYWRlcigpIC8vIEVuc3VyZSBzdHJlYW0gaXMgbG9ja2VkLlxuICAgICAgICBhc3NlcnQodGhpc1trQm9keV0ubG9ja2VkKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpc1trQm9keV1cbiAgfVxuXG4gIGR1bXAgKG9wdHMpIHtcbiAgICBsZXQgbGltaXQgPSBvcHRzICYmIE51bWJlci5pc0Zpbml0ZShvcHRzLmxpbWl0KSA/IG9wdHMubGltaXQgOiAyNjIxNDRcbiAgICBjb25zdCBzaWduYWwgPSBvcHRzICYmIG9wdHMuc2lnbmFsXG5cbiAgICBpZiAoc2lnbmFsKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIHNpZ25hbCAhPT0gJ29iamVjdCcgfHwgISgnYWJvcnRlZCcgaW4gc2lnbmFsKSkge1xuICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignc2lnbmFsIG11c3QgYmUgYW4gQWJvcnRTaWduYWwnKVxuICAgICAgICB9XG4gICAgICAgIHV0aWwudGhyb3dJZkFib3J0ZWQoc2lnbmFsKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnIpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpXG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHNpZ25hbExpc3RlbmVyQ2xlYW51cCA9IHNpZ25hbFxuICAgICAgICA/IHV0aWwuYWRkQWJvcnRMaXN0ZW5lcihzaWduYWwsICgpID0+IHtcbiAgICAgICAgICB0aGlzLmRlc3Ryb3koKVxuICAgICAgICB9KVxuICAgICAgICA6IG5vb3BcblxuICAgICAgdGhpc1xuICAgICAgICAub24oJ2Nsb3NlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHNpZ25hbExpc3RlbmVyQ2xlYW51cCgpXG4gICAgICAgICAgaWYgKHNpZ25hbCAmJiBzaWduYWwuYWJvcnRlZCkge1xuICAgICAgICAgICAgcmVqZWN0KHNpZ25hbC5yZWFzb24gfHwgT2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoJ1RoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQnKSwgeyBuYW1lOiAnQWJvcnRFcnJvcicgfSkpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc29sdmUobnVsbClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5vbignZXJyb3InLCBub29wKVxuICAgICAgICAub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHtcbiAgICAgICAgICBsaW1pdCAtPSBjaHVuay5sZW5ndGhcbiAgICAgICAgICBpZiAobGltaXQgPD0gMCkge1xuICAgICAgICAgICAgdGhpcy5kZXN0cm95KClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5yZXN1bWUoKVxuICAgIH0pXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9zdHJlYW1zLnNwZWMud2hhdHdnLm9yZy8jcmVhZGFibGVzdHJlYW0tbG9ja2VkXG5mdW5jdGlvbiBpc0xvY2tlZCAoc2VsZikge1xuICAvLyBDb25zdW1lIGlzIGFuIGltcGxpY2l0IGxvY2suXG4gIHJldHVybiAoc2VsZltrQm9keV0gJiYgc2VsZltrQm9keV0ubG9ja2VkID09PSB0cnVlKSB8fCBzZWxmW2tDb25zdW1lXVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYm9keS11bnVzYWJsZVxuZnVuY3Rpb24gaXNVbnVzYWJsZSAoc2VsZikge1xuICByZXR1cm4gdXRpbC5pc0Rpc3R1cmJlZChzZWxmKSB8fCBpc0xvY2tlZChzZWxmKVxufVxuXG5hc3luYyBmdW5jdGlvbiBjb25zdW1lIChzdHJlYW0sIHR5cGUpIHtcbiAgaWYgKGlzVW51c2FibGUoc3RyZWFtKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3VudXNhYmxlJylcbiAgfVxuXG4gIGFzc2VydCghc3RyZWFtW2tDb25zdW1lXSlcblxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHN0cmVhbVtrQ29uc3VtZV0gPSB7XG4gICAgICB0eXBlLFxuICAgICAgc3RyZWFtLFxuICAgICAgcmVzb2x2ZSxcbiAgICAgIHJlamVjdCxcbiAgICAgIGxlbmd0aDogMCxcbiAgICAgIGJvZHk6IFtdXG4gICAgfVxuXG4gICAgc3RyZWFtXG4gICAgICAub24oJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBjb25zdW1lRmluaXNoKHRoaXNba0NvbnN1bWVdLCBlcnIpXG4gICAgICB9KVxuICAgICAgLm9uKCdjbG9zZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXNba0NvbnN1bWVdLmJvZHkgIT09IG51bGwpIHtcbiAgICAgICAgICBjb25zdW1lRmluaXNoKHRoaXNba0NvbnN1bWVdLCBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpKVxuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgcHJvY2Vzcy5uZXh0VGljayhjb25zdW1lU3RhcnQsIHN0cmVhbVtrQ29uc3VtZV0pXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGNvbnN1bWVTdGFydCAoY29uc3VtZSkge1xuICBpZiAoY29uc3VtZS5ib2R5ID09PSBudWxsKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCB7IF9yZWFkYWJsZVN0YXRlOiBzdGF0ZSB9ID0gY29uc3VtZS5zdHJlYW1cblxuICBmb3IgKGNvbnN0IGNodW5rIG9mIHN0YXRlLmJ1ZmZlcikge1xuICAgIGNvbnN1bWVQdXNoKGNvbnN1bWUsIGNodW5rKVxuICB9XG5cbiAgaWYgKHN0YXRlLmVuZEVtaXR0ZWQpIHtcbiAgICBjb25zdW1lRW5kKHRoaXNba0NvbnN1bWVdKVxuICB9IGVsc2Uge1xuICAgIGNvbnN1bWUuc3RyZWFtLm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdW1lRW5kKHRoaXNba0NvbnN1bWVdKVxuICAgIH0pXG4gIH1cblxuICBjb25zdW1lLnN0cmVhbS5yZXN1bWUoKVxuXG4gIHdoaWxlIChjb25zdW1lLnN0cmVhbS5yZWFkKCkgIT0gbnVsbCkge1xuICAgIC8vIExvb3BcbiAgfVxufVxuXG5mdW5jdGlvbiBjb25zdW1lRW5kIChjb25zdW1lKSB7XG4gIGNvbnN0IHsgdHlwZSwgYm9keSwgcmVzb2x2ZSwgc3RyZWFtLCBsZW5ndGggfSA9IGNvbnN1bWVcblxuICB0cnkge1xuICAgIGlmICh0eXBlID09PSAndGV4dCcpIHtcbiAgICAgIHJlc29sdmUodG9VU1ZTdHJpbmcoQnVmZmVyLmNvbmNhdChib2R5KSkpXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnanNvbicpIHtcbiAgICAgIHJlc29sdmUoSlNPTi5wYXJzZShCdWZmZXIuY29uY2F0KGJvZHkpKSlcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdhcnJheUJ1ZmZlcicpIHtcbiAgICAgIGNvbnN0IGRzdCA9IG5ldyBVaW50OEFycmF5KGxlbmd0aClcblxuICAgICAgbGV0IHBvcyA9IDBcbiAgICAgIGZvciAoY29uc3QgYnVmIG9mIGJvZHkpIHtcbiAgICAgICAgZHN0LnNldChidWYsIHBvcylcbiAgICAgICAgcG9zICs9IGJ1Zi5ieXRlTGVuZ3RoXG4gICAgICB9XG5cbiAgICAgIHJlc29sdmUoZHN0LmJ1ZmZlcilcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdibG9iJykge1xuICAgICAgaWYgKCFCbG9iKSB7XG4gICAgICAgIEJsb2IgPSByZXF1aXJlKCdidWZmZXInKS5CbG9iXG4gICAgICB9XG4gICAgICByZXNvbHZlKG5ldyBCbG9iKGJvZHksIHsgdHlwZTogc3RyZWFtW2tDb250ZW50VHlwZV0gfSkpXG4gICAgfVxuXG4gICAgY29uc3VtZUZpbmlzaChjb25zdW1lKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBzdHJlYW0uZGVzdHJveShlcnIpXG4gIH1cbn1cblxuZnVuY3Rpb24gY29uc3VtZVB1c2ggKGNvbnN1bWUsIGNodW5rKSB7XG4gIGNvbnN1bWUubGVuZ3RoICs9IGNodW5rLmxlbmd0aFxuICBjb25zdW1lLmJvZHkucHVzaChjaHVuaylcbn1cblxuZnVuY3Rpb24gY29uc3VtZUZpbmlzaCAoY29uc3VtZSwgZXJyKSB7XG4gIGlmIChjb25zdW1lLmJvZHkgPT09IG51bGwpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmIChlcnIpIHtcbiAgICBjb25zdW1lLnJlamVjdChlcnIpXG4gIH0gZWxzZSB7XG4gICAgY29uc3VtZS5yZXNvbHZlKClcbiAgfVxuXG4gIGNvbnN1bWUudHlwZSA9IG51bGxcbiAgY29uc3VtZS5zdHJlYW0gPSBudWxsXG4gIGNvbnN1bWUucmVzb2x2ZSA9IG51bGxcbiAgY29uc3VtZS5yZWplY3QgPSBudWxsXG4gIGNvbnN1bWUubGVuZ3RoID0gMFxuICBjb25zdW1lLmJvZHkgPSBudWxsXG59XG4iLAogICAgImNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7XG4gIFJlc3BvbnNlU3RhdHVzQ29kZUVycm9yXG59ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgeyB0b1VTVlN0cmluZyB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcblxuYXN5bmMgZnVuY3Rpb24gZ2V0UmVzb2x2ZUVycm9yQm9keUNhbGxiYWNrICh7IGNhbGxiYWNrLCBib2R5LCBjb250ZW50VHlwZSwgc3RhdHVzQ29kZSwgc3RhdHVzTWVzc2FnZSwgaGVhZGVycyB9KSB7XG4gIGFzc2VydChib2R5KVxuXG4gIGxldCBjaHVua3MgPSBbXVxuICBsZXQgbGltaXQgPSAwXG5cbiAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBib2R5KSB7XG4gICAgY2h1bmtzLnB1c2goY2h1bmspXG4gICAgbGltaXQgKz0gY2h1bmsubGVuZ3RoXG4gICAgaWYgKGxpbWl0ID4gMTI4ICogMTAyNCkge1xuICAgICAgY2h1bmtzID0gbnVsbFxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoc3RhdHVzQ29kZSA9PT0gMjA0IHx8ICFjb250ZW50VHlwZSB8fCAhY2h1bmtzKSB7XG4gICAgcHJvY2Vzcy5uZXh0VGljayhjYWxsYmFjaywgbmV3IFJlc3BvbnNlU3RhdHVzQ29kZUVycm9yKGBSZXNwb25zZSBzdGF0dXMgY29kZSAke3N0YXR1c0NvZGV9JHtzdGF0dXNNZXNzYWdlID8gYDogJHtzdGF0dXNNZXNzYWdlfWAgOiAnJ31gLCBzdGF0dXNDb2RlLCBoZWFkZXJzKSlcbiAgICByZXR1cm5cbiAgfVxuXG4gIHRyeSB7XG4gICAgaWYgKGNvbnRlbnRUeXBlLnN0YXJ0c1dpdGgoJ2FwcGxpY2F0aW9uL2pzb24nKSkge1xuICAgICAgY29uc3QgcGF5bG9hZCA9IEpTT04ucGFyc2UodG9VU1ZTdHJpbmcoQnVmZmVyLmNvbmNhdChjaHVua3MpKSlcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soY2FsbGJhY2ssIG5ldyBSZXNwb25zZVN0YXR1c0NvZGVFcnJvcihgUmVzcG9uc2Ugc3RhdHVzIGNvZGUgJHtzdGF0dXNDb2RlfSR7c3RhdHVzTWVzc2FnZSA/IGA6ICR7c3RhdHVzTWVzc2FnZX1gIDogJyd9YCwgc3RhdHVzQ29kZSwgaGVhZGVycywgcGF5bG9hZCkpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoY29udGVudFR5cGUuc3RhcnRzV2l0aCgndGV4dC8nKSkge1xuICAgICAgY29uc3QgcGF5bG9hZCA9IHRvVVNWU3RyaW5nKEJ1ZmZlci5jb25jYXQoY2h1bmtzKSlcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soY2FsbGJhY2ssIG5ldyBSZXNwb25zZVN0YXR1c0NvZGVFcnJvcihgUmVzcG9uc2Ugc3RhdHVzIGNvZGUgJHtzdGF0dXNDb2RlfSR7c3RhdHVzTWVzc2FnZSA/IGA6ICR7c3RhdHVzTWVzc2FnZX1gIDogJyd9YCwgc3RhdHVzQ29kZSwgaGVhZGVycywgcGF5bG9hZCkpXG4gICAgICByZXR1cm5cbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIFByb2Nlc3MgaW4gYSBmYWxsYmFjayBpZiBlcnJvclxuICB9XG5cbiAgcHJvY2Vzcy5uZXh0VGljayhjYWxsYmFjaywgbmV3IFJlc3BvbnNlU3RhdHVzQ29kZUVycm9yKGBSZXNwb25zZSBzdGF0dXMgY29kZSAke3N0YXR1c0NvZGV9JHtzdGF0dXNNZXNzYWdlID8gYDogJHtzdGF0dXNNZXNzYWdlfWAgOiAnJ31gLCBzdGF0dXNDb2RlLCBoZWFkZXJzKSlcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7IGdldFJlc29sdmVFcnJvckJvZHlDYWxsYmFjayB9XG4iLAogICAgImNvbnN0IHsgYWRkQWJvcnRMaXN0ZW5lciB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgUmVxdWVzdEFib3J0ZWRFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuXG5jb25zdCBrTGlzdGVuZXIgPSBTeW1ib2woJ2tMaXN0ZW5lcicpXG5jb25zdCBrU2lnbmFsID0gU3ltYm9sKCdrU2lnbmFsJylcblxuZnVuY3Rpb24gYWJvcnQgKHNlbGYpIHtcbiAgaWYgKHNlbGYuYWJvcnQpIHtcbiAgICBzZWxmLmFib3J0KClcbiAgfSBlbHNlIHtcbiAgICBzZWxmLm9uRXJyb3IobmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKSlcbiAgfVxufVxuXG5mdW5jdGlvbiBhZGRTaWduYWwgKHNlbGYsIHNpZ25hbCkge1xuICBzZWxmW2tTaWduYWxdID0gbnVsbFxuICBzZWxmW2tMaXN0ZW5lcl0gPSBudWxsXG5cbiAgaWYgKCFzaWduYWwpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmIChzaWduYWwuYWJvcnRlZCkge1xuICAgIGFib3J0KHNlbGYpXG4gICAgcmV0dXJuXG4gIH1cblxuICBzZWxmW2tTaWduYWxdID0gc2lnbmFsXG4gIHNlbGZba0xpc3RlbmVyXSA9ICgpID0+IHtcbiAgICBhYm9ydChzZWxmKVxuICB9XG5cbiAgYWRkQWJvcnRMaXN0ZW5lcihzZWxmW2tTaWduYWxdLCBzZWxmW2tMaXN0ZW5lcl0pXG59XG5cbmZ1bmN0aW9uIHJlbW92ZVNpZ25hbCAoc2VsZikge1xuICBpZiAoIXNlbGZba1NpZ25hbF0pIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmICgncmVtb3ZlRXZlbnRMaXN0ZW5lcicgaW4gc2VsZltrU2lnbmFsXSkge1xuICAgIHNlbGZba1NpZ25hbF0ucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBzZWxmW2tMaXN0ZW5lcl0pXG4gIH0gZWxzZSB7XG4gICAgc2VsZltrU2lnbmFsXS5yZW1vdmVMaXN0ZW5lcignYWJvcnQnLCBzZWxmW2tMaXN0ZW5lcl0pXG4gIH1cblxuICBzZWxmW2tTaWduYWxdID0gbnVsbFxuICBzZWxmW2tMaXN0ZW5lcl0gPSBudWxsXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBhZGRTaWduYWwsXG4gIHJlbW92ZVNpZ25hbFxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgUmVhZGFibGUgPSByZXF1aXJlKCcuL3JlYWRhYmxlJylcbmNvbnN0IHtcbiAgSW52YWxpZEFyZ3VtZW50RXJyb3IsXG4gIFJlcXVlc3RBYm9ydGVkRXJyb3Jcbn0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgZ2V0UmVzb2x2ZUVycm9yQm9keUNhbGxiYWNrIH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBBc3luY1Jlc291cmNlIH0gPSByZXF1aXJlKCdhc3luY19ob29rcycpXG5jb25zdCB7IGFkZFNpZ25hbCwgcmVtb3ZlU2lnbmFsIH0gPSByZXF1aXJlKCcuL2Fib3J0LXNpZ25hbCcpXG5cbmNsYXNzIFJlcXVlc3RIYW5kbGVyIGV4dGVuZHMgQXN5bmNSZXNvdXJjZSB7XG4gIGNvbnN0cnVjdG9yIChvcHRzLCBjYWxsYmFjaykge1xuICAgIGlmICghb3B0cyB8fCB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvcHRzJylcbiAgICB9XG5cbiAgICBjb25zdCB7IHNpZ25hbCwgbWV0aG9kLCBvcGFxdWUsIGJvZHksIG9uSW5mbywgcmVzcG9uc2VIZWFkZXJzLCB0aHJvd09uRXJyb3IsIGhpZ2hXYXRlck1hcmsgfSA9IG9wdHNcblxuICAgIHRyeSB7XG4gICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjYWxsYmFjaycpXG4gICAgICB9XG5cbiAgICAgIGlmIChoaWdoV2F0ZXJNYXJrICYmICh0eXBlb2YgaGlnaFdhdGVyTWFyayAhPT0gJ251bWJlcicgfHwgaGlnaFdhdGVyTWFyayA8IDApKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBoaWdoV2F0ZXJNYXJrJylcbiAgICAgIH1cblxuICAgICAgaWYgKHNpZ25hbCAmJiB0eXBlb2Ygc2lnbmFsLm9uICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3NpZ25hbCBtdXN0IGJlIGFuIEV2ZW50RW1pdHRlciBvciBFdmVudFRhcmdldCcpXG4gICAgICB9XG5cbiAgICAgIGlmIChtZXRob2QgPT09ICdDT05ORUNUJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgbWV0aG9kJylcbiAgICAgIH1cblxuICAgICAgaWYgKG9uSW5mbyAmJiB0eXBlb2Ygb25JbmZvICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkluZm8gY2FsbGJhY2snKVxuICAgICAgfVxuXG4gICAgICBzdXBlcignVU5ESUNJX1JFUVVFU1QnKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKHV0aWwuaXNTdHJlYW0oYm9keSkpIHtcbiAgICAgICAgdXRpbC5kZXN0cm95KGJvZHkub24oJ2Vycm9yJywgdXRpbC5ub3ApLCBlcnIpXG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG5cbiAgICB0aGlzLnJlc3BvbnNlSGVhZGVycyA9IHJlc3BvbnNlSGVhZGVycyB8fCBudWxsXG4gICAgdGhpcy5vcGFxdWUgPSBvcGFxdWUgfHwgbnVsbFxuICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFja1xuICAgIHRoaXMucmVzID0gbnVsbFxuICAgIHRoaXMuYWJvcnQgPSBudWxsXG4gICAgdGhpcy5ib2R5ID0gYm9keVxuICAgIHRoaXMudHJhaWxlcnMgPSB7fVxuICAgIHRoaXMuY29udGV4dCA9IG51bGxcbiAgICB0aGlzLm9uSW5mbyA9IG9uSW5mbyB8fCBudWxsXG4gICAgdGhpcy50aHJvd09uRXJyb3IgPSB0aHJvd09uRXJyb3JcbiAgICB0aGlzLmhpZ2hXYXRlck1hcmsgPSBoaWdoV2F0ZXJNYXJrXG5cbiAgICBpZiAodXRpbC5pc1N0cmVhbShib2R5KSkge1xuICAgICAgYm9keS5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMub25FcnJvcihlcnIpXG4gICAgICB9KVxuICAgIH1cblxuICAgIGFkZFNpZ25hbCh0aGlzLCBzaWduYWwpXG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0LCBjb250ZXh0KSB7XG4gICAgaWYgKCF0aGlzLmNhbGxiYWNrKSB7XG4gICAgICB0aHJvdyBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gICAgfVxuXG4gICAgdGhpcy5hYm9ydCA9IGFib3J0XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dFxuICB9XG5cbiAgb25IZWFkZXJzIChzdGF0dXNDb2RlLCByYXdIZWFkZXJzLCByZXN1bWUsIHN0YXR1c01lc3NhZ2UpIHtcbiAgICBjb25zdCB7IGNhbGxiYWNrLCBvcGFxdWUsIGFib3J0LCBjb250ZXh0LCByZXNwb25zZUhlYWRlcnMsIGhpZ2hXYXRlck1hcmsgfSA9IHRoaXNcblxuICAgIGNvbnN0IGhlYWRlcnMgPSByZXNwb25zZUhlYWRlcnMgPT09ICdyYXcnID8gdXRpbC5wYXJzZVJhd0hlYWRlcnMocmF3SGVhZGVycykgOiB1dGlsLnBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKVxuXG4gICAgaWYgKHN0YXR1c0NvZGUgPCAyMDApIHtcbiAgICAgIGlmICh0aGlzLm9uSW5mbykge1xuICAgICAgICB0aGlzLm9uSW5mbyh7IHN0YXR1c0NvZGUsIGhlYWRlcnMgfSlcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHBhcnNlZEhlYWRlcnMgPSByZXNwb25zZUhlYWRlcnMgPT09ICdyYXcnID8gdXRpbC5wYXJzZUhlYWRlcnMocmF3SGVhZGVycykgOiBoZWFkZXJzXG4gICAgY29uc3QgY29udGVudFR5cGUgPSBwYXJzZWRIZWFkZXJzWydjb250ZW50LXR5cGUnXVxuICAgIGNvbnN0IGJvZHkgPSBuZXcgUmVhZGFibGUoeyByZXN1bWUsIGFib3J0LCBjb250ZW50VHlwZSwgaGlnaFdhdGVyTWFyayB9KVxuXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGxcbiAgICB0aGlzLnJlcyA9IGJvZHlcbiAgICBpZiAoY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgIGlmICh0aGlzLnRocm93T25FcnJvciAmJiBzdGF0dXNDb2RlID49IDQwMCkge1xuICAgICAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShnZXRSZXNvbHZlRXJyb3JCb2R5Q2FsbGJhY2ssIG51bGwsXG4gICAgICAgICAgeyBjYWxsYmFjaywgYm9keSwgY29udGVudFR5cGUsIHN0YXR1c0NvZGUsIHN0YXR1c01lc3NhZ2UsIGhlYWRlcnMgfVxuICAgICAgICApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgbnVsbCwge1xuICAgICAgICAgIHN0YXR1c0NvZGUsXG4gICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICB0cmFpbGVyczogdGhpcy50cmFpbGVycyxcbiAgICAgICAgICBvcGFxdWUsXG4gICAgICAgICAgYm9keSxcbiAgICAgICAgICBjb250ZXh0XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25EYXRhIChjaHVuaykge1xuICAgIGNvbnN0IHsgcmVzIH0gPSB0aGlzXG4gICAgcmV0dXJuIHJlcy5wdXNoKGNodW5rKVxuICB9XG5cbiAgb25Db21wbGV0ZSAodHJhaWxlcnMpIHtcbiAgICBjb25zdCB7IHJlcyB9ID0gdGhpc1xuXG4gICAgcmVtb3ZlU2lnbmFsKHRoaXMpXG5cbiAgICB1dGlsLnBhcnNlSGVhZGVycyh0cmFpbGVycywgdGhpcy50cmFpbGVycylcblxuICAgIHJlcy5wdXNoKG51bGwpXG4gIH1cblxuICBvbkVycm9yIChlcnIpIHtcbiAgICBjb25zdCB7IHJlcywgY2FsbGJhY2ssIGJvZHksIG9wYXF1ZSB9ID0gdGhpc1xuXG4gICAgcmVtb3ZlU2lnbmFsKHRoaXMpXG5cbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIC8vIFRPRE86IERvZXMgdGhpcyBuZWVkIHF1ZXVlTWljcm90YXNrP1xuICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGxcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgdGhpcy5ydW5JbkFzeW5jU2NvcGUoY2FsbGJhY2ssIG51bGwsIGVyciwgeyBvcGFxdWUgfSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHJlcykge1xuICAgICAgdGhpcy5yZXMgPSBudWxsXG4gICAgICAvLyBFbnN1cmUgYWxsIHF1ZXVlZCBoYW5kbGVycyBhcmUgaW52b2tlZCBiZWZvcmUgZGVzdHJveWluZyByZXMuXG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgIHV0aWwuZGVzdHJveShyZXMsIGVycilcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKGJvZHkpIHtcbiAgICAgIHRoaXMuYm9keSA9IG51bGxcbiAgICAgIHV0aWwuZGVzdHJveShib2R5LCBlcnIpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlcXVlc3QgKG9wdHMsIGNhbGxiYWNrKSB7XG4gIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHJlcXVlc3QuY2FsbCh0aGlzLCBvcHRzLCAoZXJyLCBkYXRhKSA9PiB7XG4gICAgICAgIHJldHVybiBlcnIgPyByZWplY3QoZXJyKSA6IHJlc29sdmUoZGF0YSlcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIHRyeSB7XG4gICAgdGhpcy5kaXNwYXRjaChvcHRzLCBuZXcgUmVxdWVzdEhhbmRsZXIob3B0cywgY2FsbGJhY2spKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gICAgY29uc3Qgb3BhcXVlID0gb3B0cyAmJiBvcHRzLm9wYXF1ZVxuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGNhbGxiYWNrKGVyciwgeyBvcGFxdWUgfSkpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZXF1ZXN0XG5tb2R1bGUuZXhwb3J0cy5SZXF1ZXN0SGFuZGxlciA9IFJlcXVlc3RIYW5kbGVyXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGZpbmlzaGVkLCBQYXNzVGhyb3VnaCB9ID0gcmVxdWlyZSgnc3RyZWFtJylcbmNvbnN0IHtcbiAgSW52YWxpZEFyZ3VtZW50RXJyb3IsXG4gIEludmFsaWRSZXR1cm5WYWx1ZUVycm9yLFxuICBSZXF1ZXN0QWJvcnRlZEVycm9yXG59ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGdldFJlc29sdmVFcnJvckJvZHlDYWxsYmFjayB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgQXN5bmNSZXNvdXJjZSB9ID0gcmVxdWlyZSgnYXN5bmNfaG9va3MnKVxuY29uc3QgeyBhZGRTaWduYWwsIHJlbW92ZVNpZ25hbCB9ID0gcmVxdWlyZSgnLi9hYm9ydC1zaWduYWwnKVxuXG5jbGFzcyBTdHJlYW1IYW5kbGVyIGV4dGVuZHMgQXN5bmNSZXNvdXJjZSB7XG4gIGNvbnN0cnVjdG9yIChvcHRzLCBmYWN0b3J5LCBjYWxsYmFjaykge1xuICAgIGlmICghb3B0cyB8fCB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvcHRzJylcbiAgICB9XG5cbiAgICBjb25zdCB7IHNpZ25hbCwgbWV0aG9kLCBvcGFxdWUsIGJvZHksIG9uSW5mbywgcmVzcG9uc2VIZWFkZXJzLCB0aHJvd09uRXJyb3IgfSA9IG9wdHNcblxuICAgIHRyeSB7XG4gICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjYWxsYmFjaycpXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgZmFjdG9yeSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgZmFjdG9yeScpXG4gICAgICB9XG5cbiAgICAgIGlmIChzaWduYWwgJiYgdHlwZW9mIHNpZ25hbC5vbiAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2Ygc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdzaWduYWwgbXVzdCBiZSBhbiBFdmVudEVtaXR0ZXIgb3IgRXZlbnRUYXJnZXQnKVxuICAgICAgfVxuXG4gICAgICBpZiAobWV0aG9kID09PSAnQ09OTkVDVCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG1ldGhvZCcpXG4gICAgICB9XG5cbiAgICAgIGlmIChvbkluZm8gJiYgdHlwZW9mIG9uSW5mbyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25JbmZvIGNhbGxiYWNrJylcbiAgICAgIH1cblxuICAgICAgc3VwZXIoJ1VORElDSV9TVFJFQU0nKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKHV0aWwuaXNTdHJlYW0oYm9keSkpIHtcbiAgICAgICAgdXRpbC5kZXN0cm95KGJvZHkub24oJ2Vycm9yJywgdXRpbC5ub3ApLCBlcnIpXG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG5cbiAgICB0aGlzLnJlc3BvbnNlSGVhZGVycyA9IHJlc3BvbnNlSGVhZGVycyB8fCBudWxsXG4gICAgdGhpcy5vcGFxdWUgPSBvcGFxdWUgfHwgbnVsbFxuICAgIHRoaXMuZmFjdG9yeSA9IGZhY3RvcnlcbiAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2tcbiAgICB0aGlzLnJlcyA9IG51bGxcbiAgICB0aGlzLmFib3J0ID0gbnVsbFxuICAgIHRoaXMuY29udGV4dCA9IG51bGxcbiAgICB0aGlzLnRyYWlsZXJzID0gbnVsbFxuICAgIHRoaXMuYm9keSA9IGJvZHlcbiAgICB0aGlzLm9uSW5mbyA9IG9uSW5mbyB8fCBudWxsXG4gICAgdGhpcy50aHJvd09uRXJyb3IgPSB0aHJvd09uRXJyb3IgfHwgZmFsc2VcblxuICAgIGlmICh1dGlsLmlzU3RyZWFtKGJvZHkpKSB7XG4gICAgICBib2R5Lm9uKCdlcnJvcicsIChlcnIpID0+IHtcbiAgICAgICAgdGhpcy5vbkVycm9yKGVycilcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgYWRkU2lnbmFsKHRoaXMsIHNpZ25hbClcbiAgfVxuXG4gIG9uQ29ubmVjdCAoYWJvcnQsIGNvbnRleHQpIHtcbiAgICBpZiAoIXRoaXMuY2FsbGJhY2spIHtcbiAgICAgIHRocm93IG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKClcbiAgICB9XG5cbiAgICB0aGlzLmFib3J0ID0gYWJvcnRcbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0XG4gIH1cblxuICBvbkhlYWRlcnMgKHN0YXR1c0NvZGUsIHJhd0hlYWRlcnMsIHJlc3VtZSwgc3RhdHVzTWVzc2FnZSkge1xuICAgIGNvbnN0IHsgZmFjdG9yeSwgb3BhcXVlLCBjb250ZXh0LCBjYWxsYmFjaywgcmVzcG9uc2VIZWFkZXJzIH0gPSB0aGlzXG5cbiAgICBjb25zdCBoZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VSYXdIZWFkZXJzKHJhd0hlYWRlcnMpIDogdXRpbC5wYXJzZUhlYWRlcnMocmF3SGVhZGVycylcblxuICAgIGlmIChzdGF0dXNDb2RlIDwgMjAwKSB7XG4gICAgICBpZiAodGhpcy5vbkluZm8pIHtcbiAgICAgICAgdGhpcy5vbkluZm8oeyBzdGF0dXNDb2RlLCBoZWFkZXJzIH0pXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLmZhY3RvcnkgPSBudWxsXG5cbiAgICBsZXQgcmVzXG5cbiAgICBpZiAodGhpcy50aHJvd09uRXJyb3IgJiYgc3RhdHVzQ29kZSA+PSA0MDApIHtcbiAgICAgIGNvbnN0IHBhcnNlZEhlYWRlcnMgPSByZXNwb25zZUhlYWRlcnMgPT09ICdyYXcnID8gdXRpbC5wYXJzZUhlYWRlcnMocmF3SGVhZGVycykgOiBoZWFkZXJzXG4gICAgICBjb25zdCBjb250ZW50VHlwZSA9IHBhcnNlZEhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddXG4gICAgICByZXMgPSBuZXcgUGFzc1Rocm91Z2goKVxuXG4gICAgICB0aGlzLmNhbGxiYWNrID0gbnVsbFxuICAgICAgdGhpcy5ydW5JbkFzeW5jU2NvcGUoZ2V0UmVzb2x2ZUVycm9yQm9keUNhbGxiYWNrLCBudWxsLFxuICAgICAgICB7IGNhbGxiYWNrLCBib2R5OiByZXMsIGNvbnRlbnRUeXBlLCBzdGF0dXNDb2RlLCBzdGF0dXNNZXNzYWdlLCBoZWFkZXJzIH1cbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGZhY3RvcnkgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHJlcyA9IHRoaXMucnVuSW5Bc3luY1Njb3BlKGZhY3RvcnksIG51bGwsIHtcbiAgICAgICAgc3RhdHVzQ29kZSxcbiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgb3BhcXVlLFxuICAgICAgICBjb250ZXh0XG4gICAgICB9KVxuXG4gICAgICBpZiAoXG4gICAgICAgICFyZXMgfHxcbiAgICAgICAgdHlwZW9mIHJlcy53cml0ZSAhPT0gJ2Z1bmN0aW9uJyB8fFxuICAgICAgICB0eXBlb2YgcmVzLmVuZCAhPT0gJ2Z1bmN0aW9uJyB8fFxuICAgICAgICB0eXBlb2YgcmVzLm9uICE9PSAnZnVuY3Rpb24nXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRSZXR1cm5WYWx1ZUVycm9yKCdleHBlY3RlZCBXcml0YWJsZScpXG4gICAgICB9XG5cbiAgICAgIC8vIFRPRE86IEF2b2lkIGZpbmlzaGVkLiBJdCByZWdpc3RlcnMgYW4gdW5uZWNlc3NhcnkgYW1vdW50IG9mIGxpc3RlbmVycy5cbiAgICAgIGZpbmlzaGVkKHJlcywgeyByZWFkYWJsZTogZmFsc2UgfSwgKGVycikgPT4ge1xuICAgICAgICBjb25zdCB7IGNhbGxiYWNrLCByZXMsIG9wYXF1ZSwgdHJhaWxlcnMsIGFib3J0IH0gPSB0aGlzXG5cbiAgICAgICAgdGhpcy5yZXMgPSBudWxsXG4gICAgICAgIGlmIChlcnIgfHwgIXJlcy5yZWFkYWJsZSkge1xuICAgICAgICAgIHV0aWwuZGVzdHJveShyZXMsIGVycilcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG4gICAgICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGNhbGxiYWNrLCBudWxsLCBlcnIgfHwgbnVsbCwgeyBvcGFxdWUsIHRyYWlsZXJzIH0pXG5cbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIGFib3J0KClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG5cbiAgICByZXMub24oJ2RyYWluJywgcmVzdW1lKVxuXG4gICAgdGhpcy5yZXMgPSByZXNcblxuICAgIGNvbnN0IG5lZWREcmFpbiA9IHJlcy53cml0YWJsZU5lZWREcmFpbiAhPT0gdW5kZWZpbmVkXG4gICAgICA/IHJlcy53cml0YWJsZU5lZWREcmFpblxuICAgICAgOiByZXMuX3dyaXRhYmxlU3RhdGUgJiYgcmVzLl93cml0YWJsZVN0YXRlLm5lZWREcmFpblxuXG4gICAgcmV0dXJuIG5lZWREcmFpbiAhPT0gdHJ1ZVxuICB9XG5cbiAgb25EYXRhIChjaHVuaykge1xuICAgIGNvbnN0IHsgcmVzIH0gPSB0aGlzXG5cbiAgICByZXR1cm4gcmVzID8gcmVzLndyaXRlKGNodW5rKSA6IHRydWVcbiAgfVxuXG4gIG9uQ29tcGxldGUgKHRyYWlsZXJzKSB7XG4gICAgY29uc3QgeyByZXMgfSA9IHRoaXNcblxuICAgIHJlbW92ZVNpZ25hbCh0aGlzKVxuXG4gICAgaWYgKCFyZXMpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMudHJhaWxlcnMgPSB1dGlsLnBhcnNlSGVhZGVycyh0cmFpbGVycylcblxuICAgIHJlcy5lbmQoKVxuICB9XG5cbiAgb25FcnJvciAoZXJyKSB7XG4gICAgY29uc3QgeyByZXMsIGNhbGxiYWNrLCBvcGFxdWUsIGJvZHkgfSA9IHRoaXNcblxuICAgIHJlbW92ZVNpZ25hbCh0aGlzKVxuXG4gICAgdGhpcy5mYWN0b3J5ID0gbnVsbFxuXG4gICAgaWYgKHJlcykge1xuICAgICAgdGhpcy5yZXMgPSBudWxsXG4gICAgICB1dGlsLmRlc3Ryb3kocmVzLCBlcnIpXG4gICAgfSBlbHNlIGlmIChjYWxsYmFjaykge1xuICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGxcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgdGhpcy5ydW5JbkFzeW5jU2NvcGUoY2FsbGJhY2ssIG51bGwsIGVyciwgeyBvcGFxdWUgfSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKGJvZHkpIHtcbiAgICAgIHRoaXMuYm9keSA9IG51bGxcbiAgICAgIHV0aWwuZGVzdHJveShib2R5LCBlcnIpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHN0cmVhbSAob3B0cywgZmFjdG9yeSwgY2FsbGJhY2spIHtcbiAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgc3RyZWFtLmNhbGwodGhpcywgb3B0cywgZmFjdG9yeSwgKGVyciwgZGF0YSkgPT4ge1xuICAgICAgICByZXR1cm4gZXJyID8gcmVqZWN0KGVycikgOiByZXNvbHZlKGRhdGEpXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICB0cnkge1xuICAgIHRoaXMuZGlzcGF0Y2gob3B0cywgbmV3IFN0cmVhbUhhbmRsZXIob3B0cywgZmFjdG9yeSwgY2FsbGJhY2spKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gICAgY29uc3Qgb3BhcXVlID0gb3B0cyAmJiBvcHRzLm9wYXF1ZVxuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGNhbGxiYWNrKGVyciwgeyBvcGFxdWUgfSkpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHJlYW1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHtcbiAgUmVhZGFibGUsXG4gIER1cGxleCxcbiAgUGFzc1Rocm91Z2hcbn0gPSByZXF1aXJlKCdzdHJlYW0nKVxuY29uc3Qge1xuICBJbnZhbGlkQXJndW1lbnRFcnJvcixcbiAgSW52YWxpZFJldHVyblZhbHVlRXJyb3IsXG4gIFJlcXVlc3RBYm9ydGVkRXJyb3Jcbn0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgQXN5bmNSZXNvdXJjZSB9ID0gcmVxdWlyZSgnYXN5bmNfaG9va3MnKVxuY29uc3QgeyBhZGRTaWduYWwsIHJlbW92ZVNpZ25hbCB9ID0gcmVxdWlyZSgnLi9hYm9ydC1zaWduYWwnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcblxuY29uc3Qga1Jlc3VtZSA9IFN5bWJvbCgncmVzdW1lJylcblxuY2xhc3MgUGlwZWxpbmVSZXF1ZXN0IGV4dGVuZHMgUmVhZGFibGUge1xuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgc3VwZXIoeyBhdXRvRGVzdHJveTogdHJ1ZSB9KVxuXG4gICAgdGhpc1trUmVzdW1lXSA9IG51bGxcbiAgfVxuXG4gIF9yZWFkICgpIHtcbiAgICBjb25zdCB7IFtrUmVzdW1lXTogcmVzdW1lIH0gPSB0aGlzXG5cbiAgICBpZiAocmVzdW1lKSB7XG4gICAgICB0aGlzW2tSZXN1bWVdID0gbnVsbFxuICAgICAgcmVzdW1lKClcbiAgICB9XG4gIH1cblxuICBfZGVzdHJveSAoZXJyLCBjYWxsYmFjaykge1xuICAgIHRoaXMuX3JlYWQoKVxuXG4gICAgY2FsbGJhY2soZXJyKVxuICB9XG59XG5cbmNsYXNzIFBpcGVsaW5lUmVzcG9uc2UgZXh0ZW5kcyBSZWFkYWJsZSB7XG4gIGNvbnN0cnVjdG9yIChyZXN1bWUpIHtcbiAgICBzdXBlcih7IGF1dG9EZXN0cm95OiB0cnVlIH0pXG4gICAgdGhpc1trUmVzdW1lXSA9IHJlc3VtZVxuICB9XG5cbiAgX3JlYWQgKCkge1xuICAgIHRoaXNba1Jlc3VtZV0oKVxuICB9XG5cbiAgX2Rlc3Ryb3kgKGVyciwgY2FsbGJhY2spIHtcbiAgICBpZiAoIWVyciAmJiAhdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkKSB7XG4gICAgICBlcnIgPSBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gICAgfVxuXG4gICAgY2FsbGJhY2soZXJyKVxuICB9XG59XG5cbmNsYXNzIFBpcGVsaW5lSGFuZGxlciBleHRlbmRzIEFzeW5jUmVzb3VyY2Uge1xuICBjb25zdHJ1Y3RvciAob3B0cywgaGFuZGxlcikge1xuICAgIGlmICghb3B0cyB8fCB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvcHRzJylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGhhbmRsZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBoYW5kbGVyJylcbiAgICB9XG5cbiAgICBjb25zdCB7IHNpZ25hbCwgbWV0aG9kLCBvcGFxdWUsIG9uSW5mbywgcmVzcG9uc2VIZWFkZXJzIH0gPSBvcHRzXG5cbiAgICBpZiAoc2lnbmFsICYmIHR5cGVvZiBzaWduYWwub24gIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3NpZ25hbCBtdXN0IGJlIGFuIEV2ZW50RW1pdHRlciBvciBFdmVudFRhcmdldCcpXG4gICAgfVxuXG4gICAgaWYgKG1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgbWV0aG9kJylcbiAgICB9XG5cbiAgICBpZiAob25JbmZvICYmIHR5cGVvZiBvbkluZm8gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkluZm8gY2FsbGJhY2snKVxuICAgIH1cblxuICAgIHN1cGVyKCdVTkRJQ0lfUElQRUxJTkUnKVxuXG4gICAgdGhpcy5vcGFxdWUgPSBvcGFxdWUgfHwgbnVsbFxuICAgIHRoaXMucmVzcG9uc2VIZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzIHx8IG51bGxcbiAgICB0aGlzLmhhbmRsZXIgPSBoYW5kbGVyXG4gICAgdGhpcy5hYm9ydCA9IG51bGxcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsXG4gICAgdGhpcy5vbkluZm8gPSBvbkluZm8gfHwgbnVsbFxuXG4gICAgdGhpcy5yZXEgPSBuZXcgUGlwZWxpbmVSZXF1ZXN0KCkub24oJ2Vycm9yJywgdXRpbC5ub3ApXG5cbiAgICB0aGlzLnJldCA9IG5ldyBEdXBsZXgoe1xuICAgICAgcmVhZGFibGVPYmplY3RNb2RlOiBvcHRzLm9iamVjdE1vZGUsXG4gICAgICBhdXRvRGVzdHJveTogdHJ1ZSxcbiAgICAgIHJlYWQ6ICgpID0+IHtcbiAgICAgICAgY29uc3QgeyBib2R5IH0gPSB0aGlzXG5cbiAgICAgICAgaWYgKGJvZHkgJiYgYm9keS5yZXN1bWUpIHtcbiAgICAgICAgICBib2R5LnJlc3VtZSgpXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB3cml0ZTogKGNodW5rLCBlbmNvZGluZywgY2FsbGJhY2spID0+IHtcbiAgICAgICAgY29uc3QgeyByZXEgfSA9IHRoaXNcblxuICAgICAgICBpZiAocmVxLnB1c2goY2h1bmssIGVuY29kaW5nKSB8fCByZXEuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkKSB7XG4gICAgICAgICAgY2FsbGJhY2soKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlcVtrUmVzdW1lXSA9IGNhbGxiYWNrXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBkZXN0cm95OiAoZXJyLCBjYWxsYmFjaykgPT4ge1xuICAgICAgICBjb25zdCB7IGJvZHksIHJlcSwgcmVzLCByZXQsIGFib3J0IH0gPSB0aGlzXG5cbiAgICAgICAgaWYgKCFlcnIgJiYgIXJldC5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkKSB7XG4gICAgICAgICAgZXJyID0gbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFib3J0ICYmIGVycikge1xuICAgICAgICAgIGFib3J0KClcbiAgICAgICAgfVxuXG4gICAgICAgIHV0aWwuZGVzdHJveShib2R5LCBlcnIpXG4gICAgICAgIHV0aWwuZGVzdHJveShyZXEsIGVycilcbiAgICAgICAgdXRpbC5kZXN0cm95KHJlcywgZXJyKVxuXG4gICAgICAgIHJlbW92ZVNpZ25hbCh0aGlzKVxuXG4gICAgICAgIGNhbGxiYWNrKGVycilcbiAgICAgIH1cbiAgICB9KS5vbigncHJlZmluaXNoJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyByZXEgfSA9IHRoaXNcblxuICAgICAgLy8gTm9kZSA8IDE1IGRvZXMgbm90IGNhbGwgX2ZpbmFsIGluIHNhbWUgdGljay5cbiAgICAgIHJlcS5wdXNoKG51bGwpXG4gICAgfSlcblxuICAgIHRoaXMucmVzID0gbnVsbFxuXG4gICAgYWRkU2lnbmFsKHRoaXMsIHNpZ25hbClcbiAgfVxuXG4gIG9uQ29ubmVjdCAoYWJvcnQsIGNvbnRleHQpIHtcbiAgICBjb25zdCB7IHJldCwgcmVzIH0gPSB0aGlzXG5cbiAgICBhc3NlcnQoIXJlcywgJ3BpcGVsaW5lIGNhbm5vdCBiZSByZXRyaWVkJylcblxuICAgIGlmIChyZXQuZGVzdHJveWVkKSB7XG4gICAgICB0aHJvdyBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gICAgfVxuXG4gICAgdGhpcy5hYm9ydCA9IGFib3J0XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dFxuICB9XG5cbiAgb25IZWFkZXJzIChzdGF0dXNDb2RlLCByYXdIZWFkZXJzLCByZXN1bWUpIHtcbiAgICBjb25zdCB7IG9wYXF1ZSwgaGFuZGxlciwgY29udGV4dCB9ID0gdGhpc1xuXG4gICAgaWYgKHN0YXR1c0NvZGUgPCAyMDApIHtcbiAgICAgIGlmICh0aGlzLm9uSW5mbykge1xuICAgICAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5yZXNwb25zZUhlYWRlcnMgPT09ICdyYXcnID8gdXRpbC5wYXJzZVJhd0hlYWRlcnMocmF3SGVhZGVycykgOiB1dGlsLnBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKVxuICAgICAgICB0aGlzLm9uSW5mbyh7IHN0YXR1c0NvZGUsIGhlYWRlcnMgfSlcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMucmVzID0gbmV3IFBpcGVsaW5lUmVzcG9uc2UocmVzdW1lKVxuXG4gICAgbGV0IGJvZHlcbiAgICB0cnkge1xuICAgICAgdGhpcy5oYW5kbGVyID0gbnVsbFxuICAgICAgY29uc3QgaGVhZGVycyA9IHRoaXMucmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VSYXdIZWFkZXJzKHJhd0hlYWRlcnMpIDogdXRpbC5wYXJzZUhlYWRlcnMocmF3SGVhZGVycylcbiAgICAgIGJvZHkgPSB0aGlzLnJ1bkluQXN5bmNTY29wZShoYW5kbGVyLCBudWxsLCB7XG4gICAgICAgIHN0YXR1c0NvZGUsXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIG9wYXF1ZSxcbiAgICAgICAgYm9keTogdGhpcy5yZXMsXG4gICAgICAgIGNvbnRleHRcbiAgICAgIH0pXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLnJlcy5vbignZXJyb3InLCB1dGlsLm5vcClcbiAgICAgIHRocm93IGVyclxuICAgIH1cblxuICAgIGlmICghYm9keSB8fCB0eXBlb2YgYm9keS5vbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRSZXR1cm5WYWx1ZUVycm9yKCdleHBlY3RlZCBSZWFkYWJsZScpXG4gICAgfVxuXG4gICAgYm9keVxuICAgICAgLm9uKCdkYXRhJywgKGNodW5rKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcmV0LCBib2R5IH0gPSB0aGlzXG5cbiAgICAgICAgaWYgKCFyZXQucHVzaChjaHVuaykgJiYgYm9keS5wYXVzZSkge1xuICAgICAgICAgIGJvZHkucGF1c2UoKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLm9uKCdlcnJvcicsIChlcnIpID0+IHtcbiAgICAgICAgY29uc3QgeyByZXQgfSA9IHRoaXNcblxuICAgICAgICB1dGlsLmRlc3Ryb3kocmV0LCBlcnIpXG4gICAgICB9KVxuICAgICAgLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcmV0IH0gPSB0aGlzXG5cbiAgICAgICAgcmV0LnB1c2gobnVsbClcbiAgICAgIH0pXG4gICAgICAub24oJ2Nsb3NlJywgKCkgPT4ge1xuICAgICAgICBjb25zdCB7IHJldCB9ID0gdGhpc1xuXG4gICAgICAgIGlmICghcmV0Ll9yZWFkYWJsZVN0YXRlLmVuZGVkKSB7XG4gICAgICAgICAgdXRpbC5kZXN0cm95KHJldCwgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKSlcbiAgICAgICAgfVxuICAgICAgfSlcblxuICAgIHRoaXMuYm9keSA9IGJvZHlcbiAgfVxuXG4gIG9uRGF0YSAoY2h1bmspIHtcbiAgICBjb25zdCB7IHJlcyB9ID0gdGhpc1xuICAgIHJldHVybiByZXMucHVzaChjaHVuaylcbiAgfVxuXG4gIG9uQ29tcGxldGUgKHRyYWlsZXJzKSB7XG4gICAgY29uc3QgeyByZXMgfSA9IHRoaXNcbiAgICByZXMucHVzaChudWxsKVxuICB9XG5cbiAgb25FcnJvciAoZXJyKSB7XG4gICAgY29uc3QgeyByZXQgfSA9IHRoaXNcbiAgICB0aGlzLmhhbmRsZXIgPSBudWxsXG4gICAgdXRpbC5kZXN0cm95KHJldCwgZXJyKVxuICB9XG59XG5cbmZ1bmN0aW9uIHBpcGVsaW5lIChvcHRzLCBoYW5kbGVyKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGlwZWxpbmVIYW5kbGVyID0gbmV3IFBpcGVsaW5lSGFuZGxlcihvcHRzLCBoYW5kbGVyKVxuICAgIHRoaXMuZGlzcGF0Y2goeyAuLi5vcHRzLCBib2R5OiBwaXBlbGluZUhhbmRsZXIucmVxIH0sIHBpcGVsaW5lSGFuZGxlcilcbiAgICByZXR1cm4gcGlwZWxpbmVIYW5kbGVyLnJldFxuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gbmV3IFBhc3NUaHJvdWdoKCkuZGVzdHJveShlcnIpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwaXBlbGluZVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciwgUmVxdWVzdEFib3J0ZWRFcnJvciwgU29ja2V0RXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHsgQXN5bmNSZXNvdXJjZSB9ID0gcmVxdWlyZSgnYXN5bmNfaG9va3MnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGFkZFNpZ25hbCwgcmVtb3ZlU2lnbmFsIH0gPSByZXF1aXJlKCcuL2Fib3J0LXNpZ25hbCcpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuXG5jbGFzcyBVcGdyYWRlSGFuZGxlciBleHRlbmRzIEFzeW5jUmVzb3VyY2Uge1xuICBjb25zdHJ1Y3RvciAob3B0cywgY2FsbGJhY2spIHtcbiAgICBpZiAoIW9wdHMgfHwgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb3B0cycpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGNhbGxiYWNrJylcbiAgICB9XG5cbiAgICBjb25zdCB7IHNpZ25hbCwgb3BhcXVlLCByZXNwb25zZUhlYWRlcnMgfSA9IG9wdHNcblxuICAgIGlmIChzaWduYWwgJiYgdHlwZW9mIHNpZ25hbC5vbiAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2Ygc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignc2lnbmFsIG11c3QgYmUgYW4gRXZlbnRFbWl0dGVyIG9yIEV2ZW50VGFyZ2V0JylcbiAgICB9XG5cbiAgICBzdXBlcignVU5ESUNJX1VQR1JBREUnKVxuXG4gICAgdGhpcy5yZXNwb25zZUhlYWRlcnMgPSByZXNwb25zZUhlYWRlcnMgfHwgbnVsbFxuICAgIHRoaXMub3BhcXVlID0gb3BhcXVlIHx8IG51bGxcbiAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2tcbiAgICB0aGlzLmFib3J0ID0gbnVsbFxuICAgIHRoaXMuY29udGV4dCA9IG51bGxcblxuICAgIGFkZFNpZ25hbCh0aGlzLCBzaWduYWwpXG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0LCBjb250ZXh0KSB7XG4gICAgaWYgKCF0aGlzLmNhbGxiYWNrKSB7XG4gICAgICB0aHJvdyBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gICAgfVxuXG4gICAgdGhpcy5hYm9ydCA9IGFib3J0XG4gICAgdGhpcy5jb250ZXh0ID0gbnVsbFxuICB9XG5cbiAgb25IZWFkZXJzICgpIHtcbiAgICB0aHJvdyBuZXcgU29ja2V0RXJyb3IoJ2JhZCB1cGdyYWRlJywgbnVsbClcbiAgfVxuXG4gIG9uVXBncmFkZSAoc3RhdHVzQ29kZSwgcmF3SGVhZGVycywgc29ja2V0KSB7XG4gICAgY29uc3QgeyBjYWxsYmFjaywgb3BhcXVlLCBjb250ZXh0IH0gPSB0aGlzXG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc3RhdHVzQ29kZSwgMTAxKVxuXG4gICAgcmVtb3ZlU2lnbmFsKHRoaXMpXG5cbiAgICB0aGlzLmNhbGxiYWNrID0gbnVsbFxuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLnJlc3BvbnNlSGVhZGVycyA9PT0gJ3JhdycgPyB1dGlsLnBhcnNlUmF3SGVhZGVycyhyYXdIZWFkZXJzKSA6IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpXG4gICAgdGhpcy5ydW5JbkFzeW5jU2NvcGUoY2FsbGJhY2ssIG51bGwsIG51bGwsIHtcbiAgICAgIGhlYWRlcnMsXG4gICAgICBzb2NrZXQsXG4gICAgICBvcGFxdWUsXG4gICAgICBjb250ZXh0XG4gICAgfSlcbiAgfVxuXG4gIG9uRXJyb3IgKGVycikge1xuICAgIGNvbnN0IHsgY2FsbGJhY2ssIG9wYXF1ZSB9ID0gdGhpc1xuXG4gICAgcmVtb3ZlU2lnbmFsKHRoaXMpXG5cbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGNhbGxiYWNrLCBudWxsLCBlcnIsIHsgb3BhcXVlIH0pXG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB1cGdyYWRlIChvcHRzLCBjYWxsYmFjaykge1xuICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB1cGdyYWRlLmNhbGwodGhpcywgb3B0cywgKGVyciwgZGF0YSkgPT4ge1xuICAgICAgICByZXR1cm4gZXJyID8gcmVqZWN0KGVycikgOiByZXNvbHZlKGRhdGEpXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHVwZ3JhZGVIYW5kbGVyID0gbmV3IFVwZ3JhZGVIYW5kbGVyKG9wdHMsIGNhbGxiYWNrKVxuICAgIHRoaXMuZGlzcGF0Y2goe1xuICAgICAgLi4ub3B0cyxcbiAgICAgIG1ldGhvZDogb3B0cy5tZXRob2QgfHwgJ0dFVCcsXG4gICAgICB1cGdyYWRlOiBvcHRzLnByb3RvY29sIHx8ICdXZWJzb2NrZXQnXG4gICAgfSwgdXBncmFkZUhhbmRsZXIpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IGVyclxuICAgIH1cbiAgICBjb25zdCBvcGFxdWUgPSBvcHRzICYmIG9wdHMub3BhcXVlXG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gY2FsbGJhY2soZXJyLCB7IG9wYXF1ZSB9KSlcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHVwZ3JhZGVcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgQXN5bmNSZXNvdXJjZSB9ID0gcmVxdWlyZSgnYXN5bmNfaG9va3MnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciwgUmVxdWVzdEFib3J0ZWRFcnJvciwgU29ja2V0RXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBhZGRTaWduYWwsIHJlbW92ZVNpZ25hbCB9ID0gcmVxdWlyZSgnLi9hYm9ydC1zaWduYWwnKVxuXG5jbGFzcyBDb25uZWN0SGFuZGxlciBleHRlbmRzIEFzeW5jUmVzb3VyY2Uge1xuICBjb25zdHJ1Y3RvciAob3B0cywgY2FsbGJhY2spIHtcbiAgICBpZiAoIW9wdHMgfHwgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb3B0cycpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGNhbGxiYWNrJylcbiAgICB9XG5cbiAgICBjb25zdCB7IHNpZ25hbCwgb3BhcXVlLCByZXNwb25zZUhlYWRlcnMgfSA9IG9wdHNcblxuICAgIGlmIChzaWduYWwgJiYgdHlwZW9mIHNpZ25hbC5vbiAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2Ygc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignc2lnbmFsIG11c3QgYmUgYW4gRXZlbnRFbWl0dGVyIG9yIEV2ZW50VGFyZ2V0JylcbiAgICB9XG5cbiAgICBzdXBlcignVU5ESUNJX0NPTk5FQ1QnKVxuXG4gICAgdGhpcy5vcGFxdWUgPSBvcGFxdWUgfHwgbnVsbFxuICAgIHRoaXMucmVzcG9uc2VIZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzIHx8IG51bGxcbiAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2tcbiAgICB0aGlzLmFib3J0ID0gbnVsbFxuXG4gICAgYWRkU2lnbmFsKHRoaXMsIHNpZ25hbClcbiAgfVxuXG4gIG9uQ29ubmVjdCAoYWJvcnQsIGNvbnRleHQpIHtcbiAgICBpZiAoIXRoaXMuY2FsbGJhY2spIHtcbiAgICAgIHRocm93IG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKClcbiAgICB9XG5cbiAgICB0aGlzLmFib3J0ID0gYWJvcnRcbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0XG4gIH1cblxuICBvbkhlYWRlcnMgKCkge1xuICAgIHRocm93IG5ldyBTb2NrZXRFcnJvcignYmFkIGNvbm5lY3QnLCBudWxsKVxuICB9XG5cbiAgb25VcGdyYWRlIChzdGF0dXNDb2RlLCByYXdIZWFkZXJzLCBzb2NrZXQpIHtcbiAgICBjb25zdCB7IGNhbGxiYWNrLCBvcGFxdWUsIGNvbnRleHQgfSA9IHRoaXNcblxuICAgIHJlbW92ZVNpZ25hbCh0aGlzKVxuXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGxcblxuICAgIGxldCBoZWFkZXJzID0gcmF3SGVhZGVyc1xuICAgIC8vIEluZGljYXRlcyBpcyBhbiBIVFRQMlNlc3Npb25cbiAgICBpZiAoaGVhZGVycyAhPSBudWxsKSB7XG4gICAgICBoZWFkZXJzID0gdGhpcy5yZXNwb25zZUhlYWRlcnMgPT09ICdyYXcnID8gdXRpbC5wYXJzZVJhd0hlYWRlcnMocmF3SGVhZGVycykgOiB1dGlsLnBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKVxuICAgIH1cblxuICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGNhbGxiYWNrLCBudWxsLCBudWxsLCB7XG4gICAgICBzdGF0dXNDb2RlLFxuICAgICAgaGVhZGVycyxcbiAgICAgIHNvY2tldCxcbiAgICAgIG9wYXF1ZSxcbiAgICAgIGNvbnRleHRcbiAgICB9KVxuICB9XG5cbiAgb25FcnJvciAoZXJyKSB7XG4gICAgY29uc3QgeyBjYWxsYmFjaywgb3BhcXVlIH0gPSB0aGlzXG5cbiAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGxcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgdGhpcy5ydW5JbkFzeW5jU2NvcGUoY2FsbGJhY2ssIG51bGwsIGVyciwgeyBvcGFxdWUgfSlcbiAgICAgIH0pXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbm5lY3QgKG9wdHMsIGNhbGxiYWNrKSB7XG4gIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbm5lY3QuY2FsbCh0aGlzLCBvcHRzLCAoZXJyLCBkYXRhKSA9PiB7XG4gICAgICAgIHJldHVybiBlcnIgPyByZWplY3QoZXJyKSA6IHJlc29sdmUoZGF0YSlcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgY29ubmVjdEhhbmRsZXIgPSBuZXcgQ29ubmVjdEhhbmRsZXIob3B0cywgY2FsbGJhY2spXG4gICAgdGhpcy5kaXNwYXRjaCh7IC4uLm9wdHMsIG1ldGhvZDogJ0NPTk5FQ1QnIH0sIGNvbm5lY3RIYW5kbGVyKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gICAgY29uc3Qgb3BhcXVlID0gb3B0cyAmJiBvcHRzLm9wYXF1ZVxuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGNhbGxiYWNrKGVyciwgeyBvcGFxdWUgfSkpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb25uZWN0XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cy5yZXF1ZXN0ID0gcmVxdWlyZSgnLi9hcGktcmVxdWVzdCcpXG5tb2R1bGUuZXhwb3J0cy5zdHJlYW0gPSByZXF1aXJlKCcuL2FwaS1zdHJlYW0nKVxubW9kdWxlLmV4cG9ydHMucGlwZWxpbmUgPSByZXF1aXJlKCcuL2FwaS1waXBlbGluZScpXG5tb2R1bGUuZXhwb3J0cy51cGdyYWRlID0gcmVxdWlyZSgnLi9hcGktdXBncmFkZScpXG5tb2R1bGUuZXhwb3J0cy5jb25uZWN0ID0gcmVxdWlyZSgnLi9hcGktY29ubmVjdCcpXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IFVuZGljaUVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5cbmNsYXNzIE1vY2tOb3RNYXRjaGVkRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBNb2NrTm90TWF0Y2hlZEVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdNb2NrTm90TWF0Y2hlZEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1RoZSByZXF1ZXN0IGRvZXMgbm90IG1hdGNoIGFueSByZWdpc3RlcmVkIG1vY2sgZGlzcGF0Y2hlcydcbiAgICB0aGlzLmNvZGUgPSAnVU5EX01PQ0tfRVJSX01PQ0tfTk9UX01BVENIRUQnXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIE1vY2tOb3RNYXRjaGVkRXJyb3Jcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBrQWdlbnQ6IFN5bWJvbCgnYWdlbnQnKSxcbiAga09wdGlvbnM6IFN5bWJvbCgnb3B0aW9ucycpLFxuICBrRmFjdG9yeTogU3ltYm9sKCdmYWN0b3J5JyksXG4gIGtEaXNwYXRjaGVzOiBTeW1ib2woJ2Rpc3BhdGNoZXMnKSxcbiAga0Rpc3BhdGNoS2V5OiBTeW1ib2woJ2Rpc3BhdGNoIGtleScpLFxuICBrRGVmYXVsdEhlYWRlcnM6IFN5bWJvbCgnZGVmYXVsdCBoZWFkZXJzJyksXG4gIGtEZWZhdWx0VHJhaWxlcnM6IFN5bWJvbCgnZGVmYXVsdCB0cmFpbGVycycpLFxuICBrQ29udGVudExlbmd0aDogU3ltYm9sKCdjb250ZW50IGxlbmd0aCcpLFxuICBrTW9ja0FnZW50OiBTeW1ib2woJ21vY2sgYWdlbnQnKSxcbiAga01vY2tBZ2VudFNldDogU3ltYm9sKCdtb2NrIGFnZW50IHNldCcpLFxuICBrTW9ja0FnZW50R2V0OiBTeW1ib2woJ21vY2sgYWdlbnQgZ2V0JyksXG4gIGtNb2NrRGlzcGF0Y2g6IFN5bWJvbCgnbW9jayBkaXNwYXRjaCcpLFxuICBrQ2xvc2U6IFN5bWJvbCgnY2xvc2UnKSxcbiAga09yaWdpbmFsQ2xvc2U6IFN5bWJvbCgnb3JpZ2luYWwgYWdlbnQgY2xvc2UnKSxcbiAga09yaWdpbjogU3ltYm9sKCdvcmlnaW4nKSxcbiAga0lzTW9ja0FjdGl2ZTogU3ltYm9sKCdpcyBtb2NrIGFjdGl2ZScpLFxuICBrTmV0Q29ubmVjdDogU3ltYm9sKCduZXQgY29ubmVjdCcpLFxuICBrR2V0TmV0Q29ubmVjdDogU3ltYm9sKCdnZXQgbmV0IGNvbm5lY3QnKSxcbiAga0Nvbm5lY3RlZDogU3ltYm9sKCdjb25uZWN0ZWQnKVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBNb2NrTm90TWF0Y2hlZEVycm9yIH0gPSByZXF1aXJlKCcuL21vY2stZXJyb3JzJylcbmNvbnN0IHtcbiAga0Rpc3BhdGNoZXMsXG4gIGtNb2NrQWdlbnQsXG4gIGtPcmlnaW5hbERpc3BhdGNoLFxuICBrT3JpZ2luLFxuICBrR2V0TmV0Q29ubmVjdFxufSA9IHJlcXVpcmUoJy4vbW9jay1zeW1ib2xzJylcbmNvbnN0IHsgYnVpbGRVUkwsIG5vcCB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgU1RBVFVTX0NPREVTIH0gPSByZXF1aXJlKCdodHRwJylcbmNvbnN0IHtcbiAgdHlwZXM6IHtcbiAgICBpc1Byb21pc2VcbiAgfVxufSA9IHJlcXVpcmUoJ3V0aWwnKVxuXG5mdW5jdGlvbiBtYXRjaFZhbHVlIChtYXRjaCwgdmFsdWUpIHtcbiAgaWYgKHR5cGVvZiBtYXRjaCA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gbWF0Y2ggPT09IHZhbHVlXG4gIH1cbiAgaWYgKG1hdGNoIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgcmV0dXJuIG1hdGNoLnRlc3QodmFsdWUpXG4gIH1cbiAgaWYgKHR5cGVvZiBtYXRjaCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBtYXRjaCh2YWx1ZSkgPT09IHRydWVcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gbG93ZXJDYXNlRW50cmllcyAoaGVhZGVycykge1xuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIE9iamVjdC5lbnRyaWVzKGhlYWRlcnMpLm1hcCgoW2hlYWRlck5hbWUsIGhlYWRlclZhbHVlXSkgPT4ge1xuICAgICAgcmV0dXJuIFtoZWFkZXJOYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCksIGhlYWRlclZhbHVlXVxuICAgIH0pXG4gIClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi4vLi4vaW5kZXgnKS5IZWFkZXJzfHN0cmluZ1tdfFJlY29yZDxzdHJpbmcsIHN0cmluZz59IGhlYWRlcnNcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAqL1xuZnVuY3Rpb24gZ2V0SGVhZGVyQnlOYW1lIChoZWFkZXJzLCBrZXkpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgIGlmIChoZWFkZXJzW2ldLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09IGtleS50b0xvY2FsZUxvd2VyQ2FzZSgpKSB7XG4gICAgICAgIHJldHVybiBoZWFkZXJzW2kgKyAxXVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWRcbiAgfSBlbHNlIGlmICh0eXBlb2YgaGVhZGVycy5nZXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gaGVhZGVycy5nZXQoa2V5KVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBsb3dlckNhc2VFbnRyaWVzKGhlYWRlcnMpW2tleS50b0xvY2FsZUxvd2VyQ2FzZSgpXVxuICB9XG59XG5cbi8qKiBAcGFyYW0ge3N0cmluZ1tdfSBoZWFkZXJzICovXG5mdW5jdGlvbiBidWlsZEhlYWRlcnNGcm9tQXJyYXkgKGhlYWRlcnMpIHsgLy8gZmV0Y2ggSGVhZGVyc0xpc3RcbiAgY29uc3QgY2xvbmUgPSBoZWFkZXJzLnNsaWNlKClcbiAgY29uc3QgZW50cmllcyA9IFtdXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBjbG9uZS5sZW5ndGg7IGluZGV4ICs9IDIpIHtcbiAgICBlbnRyaWVzLnB1c2goW2Nsb25lW2luZGV4XSwgY2xvbmVbaW5kZXggKyAxXV0pXG4gIH1cbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhlbnRyaWVzKVxufVxuXG5mdW5jdGlvbiBtYXRjaEhlYWRlcnMgKG1vY2tEaXNwYXRjaCwgaGVhZGVycykge1xuICBpZiAodHlwZW9mIG1vY2tEaXNwYXRjaC5oZWFkZXJzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHsgLy8gZmV0Y2ggSGVhZGVyc0xpc3RcbiAgICAgIGhlYWRlcnMgPSBidWlsZEhlYWRlcnNGcm9tQXJyYXkoaGVhZGVycylcbiAgICB9XG4gICAgcmV0dXJuIG1vY2tEaXNwYXRjaC5oZWFkZXJzKGhlYWRlcnMgPyBsb3dlckNhc2VFbnRyaWVzKGhlYWRlcnMpIDoge30pXG4gIH1cbiAgaWYgKHR5cGVvZiBtb2NrRGlzcGF0Y2guaGVhZGVycyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIGlmICh0eXBlb2YgaGVhZGVycyAhPT0gJ29iamVjdCcgfHwgdHlwZW9mIG1vY2tEaXNwYXRjaC5oZWFkZXJzICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgZm9yIChjb25zdCBbbWF0Y2hIZWFkZXJOYW1lLCBtYXRjaEhlYWRlclZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhtb2NrRGlzcGF0Y2guaGVhZGVycykpIHtcbiAgICBjb25zdCBoZWFkZXJWYWx1ZSA9IGdldEhlYWRlckJ5TmFtZShoZWFkZXJzLCBtYXRjaEhlYWRlck5hbWUpXG5cbiAgICBpZiAoIW1hdGNoVmFsdWUobWF0Y2hIZWFkZXJWYWx1ZSwgaGVhZGVyVmFsdWUpKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuZnVuY3Rpb24gc2FmZVVybCAocGF0aCkge1xuICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHBhdGhcbiAgfVxuXG4gIGNvbnN0IHBhdGhTZWdtZW50cyA9IHBhdGguc3BsaXQoJz8nKVxuXG4gIGlmIChwYXRoU2VnbWVudHMubGVuZ3RoICE9PSAyKSB7XG4gICAgcmV0dXJuIHBhdGhcbiAgfVxuXG4gIGNvbnN0IHFwID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhwYXRoU2VnbWVudHMucG9wKCkpXG4gIHFwLnNvcnQoKVxuICByZXR1cm4gWy4uLnBhdGhTZWdtZW50cywgcXAudG9TdHJpbmcoKV0uam9pbignPycpXG59XG5cbmZ1bmN0aW9uIG1hdGNoS2V5IChtb2NrRGlzcGF0Y2gsIHsgcGF0aCwgbWV0aG9kLCBib2R5LCBoZWFkZXJzIH0pIHtcbiAgY29uc3QgcGF0aE1hdGNoID0gbWF0Y2hWYWx1ZShtb2NrRGlzcGF0Y2gucGF0aCwgcGF0aClcbiAgY29uc3QgbWV0aG9kTWF0Y2ggPSBtYXRjaFZhbHVlKG1vY2tEaXNwYXRjaC5tZXRob2QsIG1ldGhvZClcbiAgY29uc3QgYm9keU1hdGNoID0gdHlwZW9mIG1vY2tEaXNwYXRjaC5ib2R5ICE9PSAndW5kZWZpbmVkJyA/IG1hdGNoVmFsdWUobW9ja0Rpc3BhdGNoLmJvZHksIGJvZHkpIDogdHJ1ZVxuICBjb25zdCBoZWFkZXJzTWF0Y2ggPSBtYXRjaEhlYWRlcnMobW9ja0Rpc3BhdGNoLCBoZWFkZXJzKVxuICByZXR1cm4gcGF0aE1hdGNoICYmIG1ldGhvZE1hdGNoICYmIGJvZHlNYXRjaCAmJiBoZWFkZXJzTWF0Y2hcbn1cblxuZnVuY3Rpb24gZ2V0UmVzcG9uc2VEYXRhIChkYXRhKSB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoZGF0YSkpIHtcbiAgICByZXR1cm4gZGF0YVxuICB9IGVsc2UgaWYgKHR5cGVvZiBkYXRhID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShkYXRhKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBkYXRhLnRvU3RyaW5nKClcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRNb2NrRGlzcGF0Y2ggKG1vY2tEaXNwYXRjaGVzLCBrZXkpIHtcbiAgY29uc3QgYmFzZVBhdGggPSBrZXkucXVlcnkgPyBidWlsZFVSTChrZXkucGF0aCwga2V5LnF1ZXJ5KSA6IGtleS5wYXRoXG4gIGNvbnN0IHJlc29sdmVkUGF0aCA9IHR5cGVvZiBiYXNlUGF0aCA9PT0gJ3N0cmluZycgPyBzYWZlVXJsKGJhc2VQYXRoKSA6IGJhc2VQYXRoXG5cbiAgLy8gTWF0Y2ggcGF0aFxuICBsZXQgbWF0Y2hlZE1vY2tEaXNwYXRjaGVzID0gbW9ja0Rpc3BhdGNoZXMuZmlsdGVyKCh7IGNvbnN1bWVkIH0pID0+ICFjb25zdW1lZCkuZmlsdGVyKCh7IHBhdGggfSkgPT4gbWF0Y2hWYWx1ZShzYWZlVXJsKHBhdGgpLCByZXNvbHZlZFBhdGgpKVxuICBpZiAobWF0Y2hlZE1vY2tEaXNwYXRjaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBNb2NrTm90TWF0Y2hlZEVycm9yKGBNb2NrIGRpc3BhdGNoIG5vdCBtYXRjaGVkIGZvciBwYXRoICcke3Jlc29sdmVkUGF0aH0nYClcbiAgfVxuXG4gIC8vIE1hdGNoIG1ldGhvZFxuICBtYXRjaGVkTW9ja0Rpc3BhdGNoZXMgPSBtYXRjaGVkTW9ja0Rpc3BhdGNoZXMuZmlsdGVyKCh7IG1ldGhvZCB9KSA9PiBtYXRjaFZhbHVlKG1ldGhvZCwga2V5Lm1ldGhvZCkpXG4gIGlmIChtYXRjaGVkTW9ja0Rpc3BhdGNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IE1vY2tOb3RNYXRjaGVkRXJyb3IoYE1vY2sgZGlzcGF0Y2ggbm90IG1hdGNoZWQgZm9yIG1ldGhvZCAnJHtrZXkubWV0aG9kfSdgKVxuICB9XG5cbiAgLy8gTWF0Y2ggYm9keVxuICBtYXRjaGVkTW9ja0Rpc3BhdGNoZXMgPSBtYXRjaGVkTW9ja0Rpc3BhdGNoZXMuZmlsdGVyKCh7IGJvZHkgfSkgPT4gdHlwZW9mIGJvZHkgIT09ICd1bmRlZmluZWQnID8gbWF0Y2hWYWx1ZShib2R5LCBrZXkuYm9keSkgOiB0cnVlKVxuICBpZiAobWF0Y2hlZE1vY2tEaXNwYXRjaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBNb2NrTm90TWF0Y2hlZEVycm9yKGBNb2NrIGRpc3BhdGNoIG5vdCBtYXRjaGVkIGZvciBib2R5ICcke2tleS5ib2R5fSdgKVxuICB9XG5cbiAgLy8gTWF0Y2ggaGVhZGVyc1xuICBtYXRjaGVkTW9ja0Rpc3BhdGNoZXMgPSBtYXRjaGVkTW9ja0Rpc3BhdGNoZXMuZmlsdGVyKChtb2NrRGlzcGF0Y2gpID0+IG1hdGNoSGVhZGVycyhtb2NrRGlzcGF0Y2gsIGtleS5oZWFkZXJzKSlcbiAgaWYgKG1hdGNoZWRNb2NrRGlzcGF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgTW9ja05vdE1hdGNoZWRFcnJvcihgTW9jayBkaXNwYXRjaCBub3QgbWF0Y2hlZCBmb3IgaGVhZGVycyAnJHt0eXBlb2Yga2V5LmhlYWRlcnMgPT09ICdvYmplY3QnID8gSlNPTi5zdHJpbmdpZnkoa2V5LmhlYWRlcnMpIDoga2V5LmhlYWRlcnN9J2ApXG4gIH1cblxuICByZXR1cm4gbWF0Y2hlZE1vY2tEaXNwYXRjaGVzWzBdXG59XG5cbmZ1bmN0aW9uIGFkZE1vY2tEaXNwYXRjaCAobW9ja0Rpc3BhdGNoZXMsIGtleSwgZGF0YSkge1xuICBjb25zdCBiYXNlRGF0YSA9IHsgdGltZXNJbnZva2VkOiAwLCB0aW1lczogMSwgcGVyc2lzdDogZmFsc2UsIGNvbnN1bWVkOiBmYWxzZSB9XG4gIGNvbnN0IHJlcGx5RGF0YSA9IHR5cGVvZiBkYXRhID09PSAnZnVuY3Rpb24nID8geyBjYWxsYmFjazogZGF0YSB9IDogeyAuLi5kYXRhIH1cbiAgY29uc3QgbmV3TW9ja0Rpc3BhdGNoID0geyAuLi5iYXNlRGF0YSwgLi4ua2V5LCBwZW5kaW5nOiB0cnVlLCBkYXRhOiB7IGVycm9yOiBudWxsLCAuLi5yZXBseURhdGEgfSB9XG4gIG1vY2tEaXNwYXRjaGVzLnB1c2gobmV3TW9ja0Rpc3BhdGNoKVxuICByZXR1cm4gbmV3TW9ja0Rpc3BhdGNoXG59XG5cbmZ1bmN0aW9uIGRlbGV0ZU1vY2tEaXNwYXRjaCAobW9ja0Rpc3BhdGNoZXMsIGtleSkge1xuICBjb25zdCBpbmRleCA9IG1vY2tEaXNwYXRjaGVzLmZpbmRJbmRleChkaXNwYXRjaCA9PiB7XG4gICAgaWYgKCFkaXNwYXRjaC5jb25zdW1lZCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIHJldHVybiBtYXRjaEtleShkaXNwYXRjaCwga2V5KVxuICB9KVxuICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgbW9ja0Rpc3BhdGNoZXMuc3BsaWNlKGluZGV4LCAxKVxuICB9XG59XG5cbmZ1bmN0aW9uIGJ1aWxkS2V5IChvcHRzKSB7XG4gIGNvbnN0IHsgcGF0aCwgbWV0aG9kLCBib2R5LCBoZWFkZXJzLCBxdWVyeSB9ID0gb3B0c1xuICByZXR1cm4ge1xuICAgIHBhdGgsXG4gICAgbWV0aG9kLFxuICAgIGJvZHksXG4gICAgaGVhZGVycyxcbiAgICBxdWVyeVxuICB9XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlS2V5VmFsdWVzIChkYXRhKSB7XG4gIHJldHVybiBPYmplY3QuZW50cmllcyhkYXRhKS5yZWR1Y2UoKGtleVZhbHVlUGFpcnMsIFtrZXksIHZhbHVlXSkgPT4gW1xuICAgIC4uLmtleVZhbHVlUGFpcnMsXG4gICAgQnVmZmVyLmZyb20oYCR7a2V5fWApLFxuICAgIEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUubWFwKHggPT4gQnVmZmVyLmZyb20oYCR7eH1gKSkgOiBCdWZmZXIuZnJvbShgJHt2YWx1ZX1gKVxuICBdLCBbXSlcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvU3RhdHVzXG4gKiBAcGFyYW0ge251bWJlcn0gc3RhdHVzQ29kZVxuICovXG5mdW5jdGlvbiBnZXRTdGF0dXNUZXh0IChzdGF0dXNDb2RlKSB7XG4gIHJldHVybiBTVEFUVVNfQ09ERVNbc3RhdHVzQ29kZV0gfHwgJ3Vua25vd24nXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFJlc3BvbnNlIChib2R5KSB7XG4gIGNvbnN0IGJ1ZmZlcnMgPSBbXVxuICBmb3IgYXdhaXQgKGNvbnN0IGRhdGEgb2YgYm9keSkge1xuICAgIGJ1ZmZlcnMucHVzaChkYXRhKVxuICB9XG4gIHJldHVybiBCdWZmZXIuY29uY2F0KGJ1ZmZlcnMpLnRvU3RyaW5nKCd1dGY4Jylcbn1cblxuLyoqXG4gKiBNb2NrIGRpc3BhdGNoIGZ1bmN0aW9uIHVzZWQgdG8gc2ltdWxhdGUgdW5kaWNpIGRpc3BhdGNoZXNcbiAqL1xuZnVuY3Rpb24gbW9ja0Rpc3BhdGNoIChvcHRzLCBoYW5kbGVyKSB7XG4gIC8vIEdldCBtb2NrIGRpc3BhdGNoIGZyb20gYnVpbHQga2V5XG4gIGNvbnN0IGtleSA9IGJ1aWxkS2V5KG9wdHMpXG4gIGNvbnN0IG1vY2tEaXNwYXRjaCA9IGdldE1vY2tEaXNwYXRjaCh0aGlzW2tEaXNwYXRjaGVzXSwga2V5KVxuXG4gIG1vY2tEaXNwYXRjaC50aW1lc0ludm9rZWQrK1xuXG4gIC8vIEhlcmUncyB3aGVyZSB3ZSByZXNvbHZlIGEgY2FsbGJhY2sgaWYgYSBjYWxsYmFjayBpcyBwcmVzZW50IGZvciB0aGUgZGlzcGF0Y2ggZGF0YS5cbiAgaWYgKG1vY2tEaXNwYXRjaC5kYXRhLmNhbGxiYWNrKSB7XG4gICAgbW9ja0Rpc3BhdGNoLmRhdGEgPSB7IC4uLm1vY2tEaXNwYXRjaC5kYXRhLCAuLi5tb2NrRGlzcGF0Y2guZGF0YS5jYWxsYmFjayhvcHRzKSB9XG4gIH1cblxuICAvLyBQYXJzZSBtb2NrRGlzcGF0Y2ggZGF0YVxuICBjb25zdCB7IGRhdGE6IHsgc3RhdHVzQ29kZSwgZGF0YSwgaGVhZGVycywgdHJhaWxlcnMsIGVycm9yIH0sIGRlbGF5LCBwZXJzaXN0IH0gPSBtb2NrRGlzcGF0Y2hcbiAgY29uc3QgeyB0aW1lc0ludm9rZWQsIHRpbWVzIH0gPSBtb2NrRGlzcGF0Y2hcblxuICAvLyBJZiBpdCdzIHVzZWQgdXAgYW5kIG5vdCBwZXJzaXN0ZW50LCBtYXJrIGFzIGNvbnN1bWVkXG4gIG1vY2tEaXNwYXRjaC5jb25zdW1lZCA9ICFwZXJzaXN0ICYmIHRpbWVzSW52b2tlZCA+PSB0aW1lc1xuICBtb2NrRGlzcGF0Y2gucGVuZGluZyA9IHRpbWVzSW52b2tlZCA8IHRpbWVzXG5cbiAgLy8gSWYgc3BlY2lmaWVkLCB0cmlnZ2VyIGRpc3BhdGNoIGVycm9yXG4gIGlmIChlcnJvciAhPT0gbnVsbCkge1xuICAgIGRlbGV0ZU1vY2tEaXNwYXRjaCh0aGlzW2tEaXNwYXRjaGVzXSwga2V5KVxuICAgIGhhbmRsZXIub25FcnJvcihlcnJvcilcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gSGFuZGxlIHRoZSByZXF1ZXN0IHdpdGggYSBkZWxheSBpZiBuZWNlc3NhcnlcbiAgaWYgKHR5cGVvZiBkZWxheSA9PT0gJ251bWJlcicgJiYgZGVsYXkgPiAwKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBoYW5kbGVSZXBseSh0aGlzW2tEaXNwYXRjaGVzXSlcbiAgICB9LCBkZWxheSlcbiAgfSBlbHNlIHtcbiAgICBoYW5kbGVSZXBseSh0aGlzW2tEaXNwYXRjaGVzXSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZVJlcGx5IChtb2NrRGlzcGF0Y2hlcywgX2RhdGEgPSBkYXRhKSB7XG4gICAgLy8gZmV0Y2gncyBIZWFkZXJzTGlzdCBpcyBhIDFEIHN0cmluZyBhcnJheVxuICAgIGNvbnN0IG9wdHNIZWFkZXJzID0gQXJyYXkuaXNBcnJheShvcHRzLmhlYWRlcnMpXG4gICAgICA/IGJ1aWxkSGVhZGVyc0Zyb21BcnJheShvcHRzLmhlYWRlcnMpXG4gICAgICA6IG9wdHMuaGVhZGVyc1xuICAgIGNvbnN0IGJvZHkgPSB0eXBlb2YgX2RhdGEgPT09ICdmdW5jdGlvbidcbiAgICAgID8gX2RhdGEoeyAuLi5vcHRzLCBoZWFkZXJzOiBvcHRzSGVhZGVycyB9KVxuICAgICAgOiBfZGF0YVxuXG4gICAgLy8gdXRpbC50eXBlcy5pc1Byb21pc2UgaXMgbGlrZWx5IG5lZWRlZCBmb3IgamVzdC5cbiAgICBpZiAoaXNQcm9taXNlKGJvZHkpKSB7XG4gICAgICAvLyBJZiBoYW5kbGVSZXBseSBpcyBhc3luY2hyb25vdXMsIHRocm93aW5nIGFuIGVycm9yXG4gICAgICAvLyBpbiB0aGUgY2FsbGJhY2sgd2lsbCByZWplY3QgdGhlIHByb21pc2UsIHJhdGhlciB0aGFuXG4gICAgICAvLyBzeW5jaHJvbm91c2x5IHRocm93IHRoZSBlcnJvciwgd2hpY2ggYnJlYWtzIHNvbWUgdGVzdHMuXG4gICAgICAvLyBSYXRoZXIsIHdlIHdhaXQgZm9yIHRoZSBjYWxsYmFjayB0byByZXNvbHZlIGlmIGl0IGlzIGFcbiAgICAgIC8vIHByb21pc2UsIGFuZCB0aGVuIHJlLXJ1biBoYW5kbGVSZXBseSB3aXRoIHRoZSBuZXcgYm9keS5cbiAgICAgIGJvZHkudGhlbigobmV3RGF0YSkgPT4gaGFuZGxlUmVwbHkobW9ja0Rpc3BhdGNoZXMsIG5ld0RhdGEpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgcmVzcG9uc2VEYXRhID0gZ2V0UmVzcG9uc2VEYXRhKGJvZHkpXG4gICAgY29uc3QgcmVzcG9uc2VIZWFkZXJzID0gZ2VuZXJhdGVLZXlWYWx1ZXMoaGVhZGVycylcbiAgICBjb25zdCByZXNwb25zZVRyYWlsZXJzID0gZ2VuZXJhdGVLZXlWYWx1ZXModHJhaWxlcnMpXG5cbiAgICBoYW5kbGVyLmFib3J0ID0gbm9wXG4gICAgaGFuZGxlci5vbkhlYWRlcnMoc3RhdHVzQ29kZSwgcmVzcG9uc2VIZWFkZXJzLCByZXN1bWUsIGdldFN0YXR1c1RleHQoc3RhdHVzQ29kZSkpXG4gICAgaGFuZGxlci5vbkRhdGEoQnVmZmVyLmZyb20ocmVzcG9uc2VEYXRhKSlcbiAgICBoYW5kbGVyLm9uQ29tcGxldGUocmVzcG9uc2VUcmFpbGVycylcbiAgICBkZWxldGVNb2NrRGlzcGF0Y2gobW9ja0Rpc3BhdGNoZXMsIGtleSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc3VtZSAoKSB7fVxuXG4gIHJldHVybiB0cnVlXG59XG5cbmZ1bmN0aW9uIGJ1aWxkTW9ja0Rpc3BhdGNoICgpIHtcbiAgY29uc3QgYWdlbnQgPSB0aGlzW2tNb2NrQWdlbnRdXG4gIGNvbnN0IG9yaWdpbiA9IHRoaXNba09yaWdpbl1cbiAgY29uc3Qgb3JpZ2luYWxEaXNwYXRjaCA9IHRoaXNba09yaWdpbmFsRGlzcGF0Y2hdXG5cbiAgcmV0dXJuIGZ1bmN0aW9uIGRpc3BhdGNoIChvcHRzLCBoYW5kbGVyKSB7XG4gICAgaWYgKGFnZW50LmlzTW9ja0FjdGl2ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbW9ja0Rpc3BhdGNoLmNhbGwodGhpcywgb3B0cywgaGFuZGxlcilcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIE1vY2tOb3RNYXRjaGVkRXJyb3IpIHtcbiAgICAgICAgICBjb25zdCBuZXRDb25uZWN0ID0gYWdlbnRba0dldE5ldENvbm5lY3RdKClcbiAgICAgICAgICBpZiAobmV0Q29ubmVjdCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBNb2NrTm90TWF0Y2hlZEVycm9yKGAke2Vycm9yLm1lc3NhZ2V9OiBzdWJzZXF1ZW50IHJlcXVlc3QgdG8gb3JpZ2luICR7b3JpZ2lufSB3YXMgbm90IGFsbG93ZWQgKG5ldC5jb25uZWN0IGRpc2FibGVkKWApXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjaGVja05ldENvbm5lY3QobmV0Q29ubmVjdCwgb3JpZ2luKSkge1xuICAgICAgICAgICAgb3JpZ2luYWxEaXNwYXRjaC5jYWxsKHRoaXMsIG9wdHMsIGhhbmRsZXIpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBNb2NrTm90TWF0Y2hlZEVycm9yKGAke2Vycm9yLm1lc3NhZ2V9OiBzdWJzZXF1ZW50IHJlcXVlc3QgdG8gb3JpZ2luICR7b3JpZ2lufSB3YXMgbm90IGFsbG93ZWQgKG5ldC5jb25uZWN0IGlzIG5vdCBlbmFibGVkIGZvciB0aGlzIG9yaWdpbilgKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG9yaWdpbmFsRGlzcGF0Y2guY2FsbCh0aGlzLCBvcHRzLCBoYW5kbGVyKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja05ldENvbm5lY3QgKG5ldENvbm5lY3QsIG9yaWdpbikge1xuICBjb25zdCB1cmwgPSBuZXcgVVJMKG9yaWdpbilcbiAgaWYgKG5ldENvbm5lY3QgPT09IHRydWUpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkobmV0Q29ubmVjdCkgJiYgbmV0Q29ubmVjdC5zb21lKChtYXRjaGVyKSA9PiBtYXRjaFZhbHVlKG1hdGNoZXIsIHVybC5ob3N0KSkpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG5mdW5jdGlvbiBidWlsZE1vY2tPcHRpb25zIChvcHRzKSB7XG4gIGlmIChvcHRzKSB7XG4gICAgY29uc3QgeyBhZ2VudCwgLi4ubW9ja09wdGlvbnMgfSA9IG9wdHNcbiAgICByZXR1cm4gbW9ja09wdGlvbnNcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0UmVzcG9uc2VEYXRhLFxuICBnZXRNb2NrRGlzcGF0Y2gsXG4gIGFkZE1vY2tEaXNwYXRjaCxcbiAgZGVsZXRlTW9ja0Rpc3BhdGNoLFxuICBidWlsZEtleSxcbiAgZ2VuZXJhdGVLZXlWYWx1ZXMsXG4gIG1hdGNoVmFsdWUsXG4gIGdldFJlc3BvbnNlLFxuICBnZXRTdGF0dXNUZXh0LFxuICBtb2NrRGlzcGF0Y2gsXG4gIGJ1aWxkTW9ja0Rpc3BhdGNoLFxuICBjaGVja05ldENvbm5lY3QsXG4gIGJ1aWxkTW9ja09wdGlvbnMsXG4gIGdldEhlYWRlckJ5TmFtZVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBnZXRSZXNwb25zZURhdGEsIGJ1aWxkS2V5LCBhZGRNb2NrRGlzcGF0Y2ggfSA9IHJlcXVpcmUoJy4vbW9jay11dGlscycpXG5jb25zdCB7XG4gIGtEaXNwYXRjaGVzLFxuICBrRGlzcGF0Y2hLZXksXG4gIGtEZWZhdWx0SGVhZGVycyxcbiAga0RlZmF1bHRUcmFpbGVycyxcbiAga0NvbnRlbnRMZW5ndGgsXG4gIGtNb2NrRGlzcGF0Y2hcbn0gPSByZXF1aXJlKCcuL21vY2stc3ltYm9scycpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB7IGJ1aWxkVVJMIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuXG4vKipcbiAqIERlZmluZXMgdGhlIHNjb3BlIEFQSSBmb3IgYW4gaW50ZXJjZXB0b3IgcmVwbHlcbiAqL1xuY2xhc3MgTW9ja1Njb3BlIHtcbiAgY29uc3RydWN0b3IgKG1vY2tEaXNwYXRjaCkge1xuICAgIHRoaXNba01vY2tEaXNwYXRjaF0gPSBtb2NrRGlzcGF0Y2hcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxheSBhIHJlcGx5IGJ5IGEgc2V0IGFtb3VudCBpbiBtcy5cbiAgICovXG4gIGRlbGF5ICh3YWl0SW5Ncykge1xuICAgIGlmICh0eXBlb2Ygd2FpdEluTXMgIT09ICdudW1iZXInIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKHdhaXRJbk1zKSB8fCB3YWl0SW5NcyA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3dhaXRJbk1zIG11c3QgYmUgYSB2YWxpZCBpbnRlZ2VyID4gMCcpXG4gICAgfVxuXG4gICAgdGhpc1trTW9ja0Rpc3BhdGNoXS5kZWxheSA9IHdhaXRJbk1zXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3IgYSBkZWZpbmVkIHJlcGx5LCBuZXZlciBtYXJrIGFzIGNvbnN1bWVkLlxuICAgKi9cbiAgcGVyc2lzdCAoKSB7XG4gICAgdGhpc1trTW9ja0Rpc3BhdGNoXS5wZXJzaXN0ID0gdHJ1ZVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogQWxsb3cgb25lIHRvIGRlZmluZSBhIHJlcGx5IGZvciBhIHNldCBhbW91bnQgb2YgbWF0Y2hpbmcgcmVxdWVzdHMuXG4gICAqL1xuICB0aW1lcyAocmVwZWF0VGltZXMpIHtcbiAgICBpZiAodHlwZW9mIHJlcGVhdFRpbWVzICE9PSAnbnVtYmVyJyB8fCAhTnVtYmVyLmlzSW50ZWdlcihyZXBlYXRUaW1lcykgfHwgcmVwZWF0VGltZXMgPD0gMCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdyZXBlYXRUaW1lcyBtdXN0IGJlIGEgdmFsaWQgaW50ZWdlciA+IDAnKVxuICAgIH1cblxuICAgIHRoaXNba01vY2tEaXNwYXRjaF0udGltZXMgPSByZXBlYXRUaW1lc1xuICAgIHJldHVybiB0aGlzXG4gIH1cbn1cblxuLyoqXG4gKiBEZWZpbmVzIGFuIGludGVyY2VwdG9yIGZvciBhIE1vY2tcbiAqL1xuY2xhc3MgTW9ja0ludGVyY2VwdG9yIHtcbiAgY29uc3RydWN0b3IgKG9wdHMsIG1vY2tEaXNwYXRjaGVzKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdvcHRzIG11c3QgYmUgYW4gb2JqZWN0JylcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvcHRzLnBhdGggPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ29wdHMucGF0aCBtdXN0IGJlIGRlZmluZWQnKVxuICAgIH1cbiAgICBpZiAodHlwZW9mIG9wdHMubWV0aG9kID09PSAndW5kZWZpbmVkJykge1xuICAgICAgb3B0cy5tZXRob2QgPSAnR0VUJ1xuICAgIH1cbiAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzEyNDVcbiAgICAvLyBBcyBwZXIgUkZDIDM5ODYsIGNsaWVudHMgYXJlIG5vdCBzdXBwb3NlZCB0byBzZW5kIFVSSVxuICAgIC8vIGZyYWdtZW50cyB0byBzZXJ2ZXJzIHdoZW4gdGhleSByZXRyaWV2ZSBhIGRvY3VtZW50LFxuICAgIGlmICh0eXBlb2Ygb3B0cy5wYXRoID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKG9wdHMucXVlcnkpIHtcbiAgICAgICAgb3B0cy5wYXRoID0gYnVpbGRVUkwob3B0cy5wYXRoLCBvcHRzLnF1ZXJ5KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gTWF0Y2hlcyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9ibG9iL21haW4vbGliL2ZldGNoL2luZGV4LmpzI0wxODExXG4gICAgICAgIGNvbnN0IHBhcnNlZFVSTCA9IG5ldyBVUkwob3B0cy5wYXRoLCAnZGF0YTovLycpXG4gICAgICAgIG9wdHMucGF0aCA9IHBhcnNlZFVSTC5wYXRobmFtZSArIHBhcnNlZFVSTC5zZWFyY2hcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvcHRzLm1ldGhvZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG9wdHMubWV0aG9kID0gb3B0cy5tZXRob2QudG9VcHBlckNhc2UoKVxuICAgIH1cblxuICAgIHRoaXNba0Rpc3BhdGNoS2V5XSA9IGJ1aWxkS2V5KG9wdHMpXG4gICAgdGhpc1trRGlzcGF0Y2hlc10gPSBtb2NrRGlzcGF0Y2hlc1xuICAgIHRoaXNba0RlZmF1bHRIZWFkZXJzXSA9IHt9XG4gICAgdGhpc1trRGVmYXVsdFRyYWlsZXJzXSA9IHt9XG4gICAgdGhpc1trQ29udGVudExlbmd0aF0gPSBmYWxzZVxuICB9XG5cbiAgY3JlYXRlTW9ja1Njb3BlRGlzcGF0Y2hEYXRhIChzdGF0dXNDb2RlLCBkYXRhLCByZXNwb25zZU9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9IGdldFJlc3BvbnNlRGF0YShkYXRhKVxuICAgIGNvbnN0IGNvbnRlbnRMZW5ndGggPSB0aGlzW2tDb250ZW50TGVuZ3RoXSA/IHsgJ2NvbnRlbnQtbGVuZ3RoJzogcmVzcG9uc2VEYXRhLmxlbmd0aCB9IDoge31cbiAgICBjb25zdCBoZWFkZXJzID0geyAuLi50aGlzW2tEZWZhdWx0SGVhZGVyc10sIC4uLmNvbnRlbnRMZW5ndGgsIC4uLnJlc3BvbnNlT3B0aW9ucy5oZWFkZXJzIH1cbiAgICBjb25zdCB0cmFpbGVycyA9IHsgLi4udGhpc1trRGVmYXVsdFRyYWlsZXJzXSwgLi4ucmVzcG9uc2VPcHRpb25zLnRyYWlsZXJzIH1cblxuICAgIHJldHVybiB7IHN0YXR1c0NvZGUsIGRhdGEsIGhlYWRlcnMsIHRyYWlsZXJzIH1cbiAgfVxuXG4gIHZhbGlkYXRlUmVwbHlQYXJhbWV0ZXJzIChzdGF0dXNDb2RlLCBkYXRhLCByZXNwb25zZU9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIHN0YXR1c0NvZGUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3N0YXR1c0NvZGUgbXVzdCBiZSBkZWZpbmVkJylcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdkYXRhIG11c3QgYmUgZGVmaW5lZCcpXG4gICAgfVxuICAgIGlmICh0eXBlb2YgcmVzcG9uc2VPcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdyZXNwb25zZU9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QnKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNb2NrIGFuIHVuZGljaSByZXF1ZXN0IHdpdGggYSBkZWZpbmVkIHJlcGx5LlxuICAgKi9cbiAgcmVwbHkgKHJlcGx5RGF0YSkge1xuICAgIC8vIFZhbHVlcyBvZiByZXBseSBhcmVuJ3QgYXZhaWxhYmxlIHJpZ2h0IG5vdyBhcyB0aGV5XG4gICAgLy8gY2FuIG9ubHkgYmUgYXZhaWxhYmxlIHdoZW4gdGhlIHJlcGx5IGNhbGxiYWNrIGlzIGludm9rZWQuXG4gICAgaWYgKHR5cGVvZiByZXBseURhdGEgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIFdlJ2xsIGZpcnN0IHdyYXAgdGhlIHByb3ZpZGVkIGNhbGxiYWNrIGluIGFub3RoZXIgZnVuY3Rpb24sXG4gICAgICAvLyB0aGlzIGZ1bmN0aW9uIHdpbGwgcHJvcGVybHkgcmVzb2x2ZSB0aGUgZGF0YSBmcm9tIHRoZSBjYWxsYmFja1xuICAgICAgLy8gd2hlbiBpbnZva2VkLlxuICAgICAgY29uc3Qgd3JhcHBlZERlZmF1bHRzQ2FsbGJhY2sgPSAob3B0cykgPT4ge1xuICAgICAgICAvLyBPdXIgcmVwbHkgb3B0aW9ucyBjYWxsYmFjayBjb250YWlucyB0aGUgcGFyYW1ldGVyIGZvciBzdGF0dXNDb2RlLCBkYXRhIGFuZCBvcHRpb25zLlxuICAgICAgICBjb25zdCByZXNvbHZlZERhdGEgPSByZXBseURhdGEob3B0cylcblxuICAgICAgICAvLyBDaGVjayBpZiBpdCBpcyBpbiB0aGUgcmlnaHQgZm9ybWF0XG4gICAgICAgIGlmICh0eXBlb2YgcmVzb2x2ZWREYXRhICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigncmVwbHkgb3B0aW9ucyBjYWxsYmFjayBtdXN0IHJldHVybiBhbiBvYmplY3QnKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyBzdGF0dXNDb2RlLCBkYXRhID0gJycsIHJlc3BvbnNlT3B0aW9ucyA9IHt9IH0gPSByZXNvbHZlZERhdGFcbiAgICAgICAgdGhpcy52YWxpZGF0ZVJlcGx5UGFyYW1ldGVycyhzdGF0dXNDb2RlLCBkYXRhLCByZXNwb25zZU9wdGlvbnMpXG4gICAgICAgIC8vIFNpbmNlIHRoZSB2YWx1ZXMgY2FuIGJlIG9idGFpbmVkIGltbWVkaWF0ZWx5IHdlIHJldHVybiB0aGVtXG4gICAgICAgIC8vIGZyb20gdGhpcyBoaWdoZXIgb3JkZXIgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIHJlc29sdmVkIGxhdGVyLlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnRoaXMuY3JlYXRlTW9ja1Njb3BlRGlzcGF0Y2hEYXRhKHN0YXR1c0NvZGUsIGRhdGEsIHJlc3BvbnNlT3B0aW9ucylcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBBZGQgdXN1YWwgZGlzcGF0Y2ggZGF0YSwgYnV0IHRoaXMgdGltZSBzZXQgdGhlIGRhdGEgcGFyYW1ldGVyIHRvIGZ1bmN0aW9uIHRoYXQgd2lsbCBldmVudHVhbGx5IHByb3ZpZGUgZGF0YS5cbiAgICAgIGNvbnN0IG5ld01vY2tEaXNwYXRjaCA9IGFkZE1vY2tEaXNwYXRjaCh0aGlzW2tEaXNwYXRjaGVzXSwgdGhpc1trRGlzcGF0Y2hLZXldLCB3cmFwcGVkRGVmYXVsdHNDYWxsYmFjaylcbiAgICAgIHJldHVybiBuZXcgTW9ja1Njb3BlKG5ld01vY2tEaXNwYXRjaClcbiAgICB9XG5cbiAgICAvLyBXZSBjYW4gaGF2ZSBlaXRoZXIgb25lIG9yIHRocmVlIHBhcmFtZXRlcnMsIGlmIHdlIGdldCBoZXJlLFxuICAgIC8vIHdlIHNob3VsZCBoYXZlIDEtMyBwYXJhbWV0ZXJzLiBTbyB3ZSBzcHJlYWQgdGhlIGFyZ3VtZW50cyBvZlxuICAgIC8vIHRoaXMgZnVuY3Rpb24gdG8gb2J0YWluIHRoZSBwYXJhbWV0ZXJzLCBzaW5jZSByZXBseURhdGEgd2lsbCBhbHdheXNcbiAgICAvLyBqdXN0IGJlIHRoZSBzdGF0dXNDb2RlLlxuICAgIGNvbnN0IFtzdGF0dXNDb2RlLCBkYXRhID0gJycsIHJlc3BvbnNlT3B0aW9ucyA9IHt9XSA9IFsuLi5hcmd1bWVudHNdXG4gICAgdGhpcy52YWxpZGF0ZVJlcGx5UGFyYW1ldGVycyhzdGF0dXNDb2RlLCBkYXRhLCByZXNwb25zZU9wdGlvbnMpXG5cbiAgICAvLyBTZW5kIGluLWFscmVhZHkgcHJvdmlkZWQgZGF0YSBsaWtlIHVzdWFsXG4gICAgY29uc3QgZGlzcGF0Y2hEYXRhID0gdGhpcy5jcmVhdGVNb2NrU2NvcGVEaXNwYXRjaERhdGEoc3RhdHVzQ29kZSwgZGF0YSwgcmVzcG9uc2VPcHRpb25zKVxuICAgIGNvbnN0IG5ld01vY2tEaXNwYXRjaCA9IGFkZE1vY2tEaXNwYXRjaCh0aGlzW2tEaXNwYXRjaGVzXSwgdGhpc1trRGlzcGF0Y2hLZXldLCBkaXNwYXRjaERhdGEpXG4gICAgcmV0dXJuIG5ldyBNb2NrU2NvcGUobmV3TW9ja0Rpc3BhdGNoKVxuICB9XG5cbiAgLyoqXG4gICAqIE1vY2sgYW4gdW5kaWNpIHJlcXVlc3Qgd2l0aCBhIGRlZmluZWQgZXJyb3IuXG4gICAqL1xuICByZXBseVdpdGhFcnJvciAoZXJyb3IpIHtcbiAgICBpZiAodHlwZW9mIGVycm9yID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdlcnJvciBtdXN0IGJlIGRlZmluZWQnKVxuICAgIH1cblxuICAgIGNvbnN0IG5ld01vY2tEaXNwYXRjaCA9IGFkZE1vY2tEaXNwYXRjaCh0aGlzW2tEaXNwYXRjaGVzXSwgdGhpc1trRGlzcGF0Y2hLZXldLCB7IGVycm9yIH0pXG4gICAgcmV0dXJuIG5ldyBNb2NrU2NvcGUobmV3TW9ja0Rpc3BhdGNoKVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCBkZWZhdWx0IHJlcGx5IGhlYWRlcnMgb24gdGhlIGludGVyY2VwdG9yIGZvciBzdWJzZXF1ZW50IHJlcGxpZXNcbiAgICovXG4gIGRlZmF1bHRSZXBseUhlYWRlcnMgKGhlYWRlcnMpIHtcbiAgICBpZiAodHlwZW9mIGhlYWRlcnMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2hlYWRlcnMgbXVzdCBiZSBkZWZpbmVkJylcbiAgICB9XG5cbiAgICB0aGlzW2tEZWZhdWx0SGVhZGVyc10gPSBoZWFkZXJzXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgZGVmYXVsdCByZXBseSB0cmFpbGVycyBvbiB0aGUgaW50ZXJjZXB0b3IgZm9yIHN1YnNlcXVlbnQgcmVwbGllc1xuICAgKi9cbiAgZGVmYXVsdFJlcGx5VHJhaWxlcnMgKHRyYWlsZXJzKSB7XG4gICAgaWYgKHR5cGVvZiB0cmFpbGVycyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndHJhaWxlcnMgbXVzdCBiZSBkZWZpbmVkJylcbiAgICB9XG5cbiAgICB0aGlzW2tEZWZhdWx0VHJhaWxlcnNdID0gdHJhaWxlcnNcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCByZXBseSBjb250ZW50IGxlbmd0aCBoZWFkZXIgZm9yIHJlcGxpZXMgb24gdGhlIGludGVyY2VwdG9yXG4gICAqL1xuICByZXBseUNvbnRlbnRMZW5ndGggKCkge1xuICAgIHRoaXNba0NvbnRlbnRMZW5ndGhdID0gdHJ1ZVxuICAgIHJldHVybiB0aGlzXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMuTW9ja0ludGVyY2VwdG9yID0gTW9ja0ludGVyY2VwdG9yXG5tb2R1bGUuZXhwb3J0cy5Nb2NrU2NvcGUgPSBNb2NrU2NvcGVcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgcHJvbWlzaWZ5IH0gPSByZXF1aXJlKCd1dGlsJylcbmNvbnN0IENsaWVudCA9IHJlcXVpcmUoJy4uL2NsaWVudCcpXG5jb25zdCB7IGJ1aWxkTW9ja0Rpc3BhdGNoIH0gPSByZXF1aXJlKCcuL21vY2stdXRpbHMnKVxuY29uc3Qge1xuICBrRGlzcGF0Y2hlcyxcbiAga01vY2tBZ2VudCxcbiAga0Nsb3NlLFxuICBrT3JpZ2luYWxDbG9zZSxcbiAga09yaWdpbixcbiAga09yaWdpbmFsRGlzcGF0Y2gsXG4gIGtDb25uZWN0ZWRcbn0gPSByZXF1aXJlKCcuL21vY2stc3ltYm9scycpXG5jb25zdCB7IE1vY2tJbnRlcmNlcHRvciB9ID0gcmVxdWlyZSgnLi9tb2NrLWludGVyY2VwdG9yJylcbmNvbnN0IFN5bWJvbHMgPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuXG4vKipcbiAqIE1vY2tDbGllbnQgcHJvdmlkZXMgYW4gQVBJIHRoYXQgZXh0ZW5kcyB0aGUgQ2xpZW50IHRvIGluZmx1ZW5jZSB0aGUgbW9ja0Rpc3BhdGNoZXMuXG4gKi9cbmNsYXNzIE1vY2tDbGllbnQgZXh0ZW5kcyBDbGllbnQge1xuICBjb25zdHJ1Y3RvciAob3JpZ2luLCBvcHRzKSB7XG4gICAgc3VwZXIob3JpZ2luLCBvcHRzKVxuXG4gICAgaWYgKCFvcHRzIHx8ICFvcHRzLmFnZW50IHx8IHR5cGVvZiBvcHRzLmFnZW50LmRpc3BhdGNoICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0FyZ3VtZW50IG9wdHMuYWdlbnQgbXVzdCBpbXBsZW1lbnQgQWdlbnQnKVxuICAgIH1cblxuICAgIHRoaXNba01vY2tBZ2VudF0gPSBvcHRzLmFnZW50XG4gICAgdGhpc1trT3JpZ2luXSA9IG9yaWdpblxuICAgIHRoaXNba0Rpc3BhdGNoZXNdID0gW11cbiAgICB0aGlzW2tDb25uZWN0ZWRdID0gMVxuICAgIHRoaXNba09yaWdpbmFsRGlzcGF0Y2hdID0gdGhpcy5kaXNwYXRjaFxuICAgIHRoaXNba09yaWdpbmFsQ2xvc2VdID0gdGhpcy5jbG9zZS5iaW5kKHRoaXMpXG5cbiAgICB0aGlzLmRpc3BhdGNoID0gYnVpbGRNb2NrRGlzcGF0Y2guY2FsbCh0aGlzKVxuICAgIHRoaXMuY2xvc2UgPSB0aGlzW2tDbG9zZV1cbiAgfVxuXG4gIGdldCBbU3ltYm9scy5rQ29ubmVjdGVkXSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0Nvbm5lY3RlZF1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHVwIHRoZSBiYXNlIGludGVyY2VwdG9yIGZvciBtb2NraW5nIHJlcGxpZXMgZnJvbSB1bmRpY2kuXG4gICAqL1xuICBpbnRlcmNlcHQgKG9wdHMpIHtcbiAgICByZXR1cm4gbmV3IE1vY2tJbnRlcmNlcHRvcihvcHRzLCB0aGlzW2tEaXNwYXRjaGVzXSlcbiAgfVxuXG4gIGFzeW5jIFtrQ2xvc2VdICgpIHtcbiAgICBhd2FpdCBwcm9taXNpZnkodGhpc1trT3JpZ2luYWxDbG9zZV0pKClcbiAgICB0aGlzW2tDb25uZWN0ZWRdID0gMFxuICAgIHRoaXNba01vY2tBZ2VudF1bU3ltYm9scy5rQ2xpZW50c10uZGVsZXRlKHRoaXNba09yaWdpbl0pXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBNb2NrQ2xpZW50XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHByb21pc2lmeSB9ID0gcmVxdWlyZSgndXRpbCcpXG5jb25zdCBQb29sID0gcmVxdWlyZSgnLi4vcG9vbCcpXG5jb25zdCB7IGJ1aWxkTW9ja0Rpc3BhdGNoIH0gPSByZXF1aXJlKCcuL21vY2stdXRpbHMnKVxuY29uc3Qge1xuICBrRGlzcGF0Y2hlcyxcbiAga01vY2tBZ2VudCxcbiAga0Nsb3NlLFxuICBrT3JpZ2luYWxDbG9zZSxcbiAga09yaWdpbixcbiAga09yaWdpbmFsRGlzcGF0Y2gsXG4gIGtDb25uZWN0ZWRcbn0gPSByZXF1aXJlKCcuL21vY2stc3ltYm9scycpXG5jb25zdCB7IE1vY2tJbnRlcmNlcHRvciB9ID0gcmVxdWlyZSgnLi9tb2NrLWludGVyY2VwdG9yJylcbmNvbnN0IFN5bWJvbHMgPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuXG4vKipcbiAqIE1vY2tQb29sIHByb3ZpZGVzIGFuIEFQSSB0aGF0IGV4dGVuZHMgdGhlIFBvb2wgdG8gaW5mbHVlbmNlIHRoZSBtb2NrRGlzcGF0Y2hlcy5cbiAqL1xuY2xhc3MgTW9ja1Bvb2wgZXh0ZW5kcyBQb29sIHtcbiAgY29uc3RydWN0b3IgKG9yaWdpbiwgb3B0cykge1xuICAgIHN1cGVyKG9yaWdpbiwgb3B0cylcblxuICAgIGlmICghb3B0cyB8fCAhb3B0cy5hZ2VudCB8fCB0eXBlb2Ygb3B0cy5hZ2VudC5kaXNwYXRjaCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdBcmd1bWVudCBvcHRzLmFnZW50IG11c3QgaW1wbGVtZW50IEFnZW50JylcbiAgICB9XG5cbiAgICB0aGlzW2tNb2NrQWdlbnRdID0gb3B0cy5hZ2VudFxuICAgIHRoaXNba09yaWdpbl0gPSBvcmlnaW5cbiAgICB0aGlzW2tEaXNwYXRjaGVzXSA9IFtdXG4gICAgdGhpc1trQ29ubmVjdGVkXSA9IDFcbiAgICB0aGlzW2tPcmlnaW5hbERpc3BhdGNoXSA9IHRoaXMuZGlzcGF0Y2hcbiAgICB0aGlzW2tPcmlnaW5hbENsb3NlXSA9IHRoaXMuY2xvc2UuYmluZCh0aGlzKVxuXG4gICAgdGhpcy5kaXNwYXRjaCA9IGJ1aWxkTW9ja0Rpc3BhdGNoLmNhbGwodGhpcylcbiAgICB0aGlzLmNsb3NlID0gdGhpc1trQ2xvc2VdXG4gIH1cblxuICBnZXQgW1N5bWJvbHMua0Nvbm5lY3RlZF0gKCkge1xuICAgIHJldHVybiB0aGlzW2tDb25uZWN0ZWRdXG4gIH1cblxuICAvKipcbiAgICogU2V0cyB1cCB0aGUgYmFzZSBpbnRlcmNlcHRvciBmb3IgbW9ja2luZyByZXBsaWVzIGZyb20gdW5kaWNpLlxuICAgKi9cbiAgaW50ZXJjZXB0IChvcHRzKSB7XG4gICAgcmV0dXJuIG5ldyBNb2NrSW50ZXJjZXB0b3Iob3B0cywgdGhpc1trRGlzcGF0Y2hlc10pXG4gIH1cblxuICBhc3luYyBba0Nsb3NlXSAoKSB7XG4gICAgYXdhaXQgcHJvbWlzaWZ5KHRoaXNba09yaWdpbmFsQ2xvc2VdKSgpXG4gICAgdGhpc1trQ29ubmVjdGVkXSA9IDBcbiAgICB0aGlzW2tNb2NrQWdlbnRdW1N5bWJvbHMua0NsaWVudHNdLmRlbGV0ZSh0aGlzW2tPcmlnaW5dKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gTW9ja1Bvb2xcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHNpbmd1bGFycyA9IHtcbiAgcHJvbm91bjogJ2l0JyxcbiAgaXM6ICdpcycsXG4gIHdhczogJ3dhcycsXG4gIHRoaXM6ICd0aGlzJ1xufVxuXG5jb25zdCBwbHVyYWxzID0ge1xuICBwcm9ub3VuOiAndGhleScsXG4gIGlzOiAnYXJlJyxcbiAgd2FzOiAnd2VyZScsXG4gIHRoaXM6ICd0aGVzZSdcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBQbHVyYWxpemVyIHtcbiAgY29uc3RydWN0b3IgKHNpbmd1bGFyLCBwbHVyYWwpIHtcbiAgICB0aGlzLnNpbmd1bGFyID0gc2luZ3VsYXJcbiAgICB0aGlzLnBsdXJhbCA9IHBsdXJhbFxuICB9XG5cbiAgcGx1cmFsaXplIChjb3VudCkge1xuICAgIGNvbnN0IG9uZSA9IGNvdW50ID09PSAxXG4gICAgY29uc3Qga2V5cyA9IG9uZSA/IHNpbmd1bGFycyA6IHBsdXJhbHNcbiAgICBjb25zdCBub3VuID0gb25lID8gdGhpcy5zaW5ndWxhciA6IHRoaXMucGx1cmFsXG4gICAgcmV0dXJuIHsgLi4ua2V5cywgY291bnQsIG5vdW4gfVxuICB9XG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IFRyYW5zZm9ybSB9ID0gcmVxdWlyZSgnc3RyZWFtJylcbmNvbnN0IHsgQ29uc29sZSB9ID0gcmVxdWlyZSgnY29uc29sZScpXG5cbi8qKlxuICogR2V0cyB0aGUgb3V0cHV0IG9mIGBjb25zb2xlLnRhYmxlKOKApilgIGFzIGEgc3RyaW5nLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIFBlbmRpbmdJbnRlcmNlcHRvcnNGb3JtYXR0ZXIge1xuICBjb25zdHJ1Y3RvciAoeyBkaXNhYmxlQ29sb3JzIH0gPSB7fSkge1xuICAgIHRoaXMudHJhbnNmb3JtID0gbmV3IFRyYW5zZm9ybSh7XG4gICAgICB0cmFuc2Zvcm0gKGNodW5rLCBfZW5jLCBjYikge1xuICAgICAgICBjYihudWxsLCBjaHVuaylcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdGhpcy5sb2dnZXIgPSBuZXcgQ29uc29sZSh7XG4gICAgICBzdGRvdXQ6IHRoaXMudHJhbnNmb3JtLFxuICAgICAgaW5zcGVjdE9wdGlvbnM6IHtcbiAgICAgICAgY29sb3JzOiAhZGlzYWJsZUNvbG9ycyAmJiAhcHJvY2Vzcy5lbnYuQ0lcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZm9ybWF0IChwZW5kaW5nSW50ZXJjZXB0b3JzKSB7XG4gICAgY29uc3Qgd2l0aFByZXR0eUhlYWRlcnMgPSBwZW5kaW5nSW50ZXJjZXB0b3JzLm1hcChcbiAgICAgICh7IG1ldGhvZCwgcGF0aCwgZGF0YTogeyBzdGF0dXNDb2RlIH0sIHBlcnNpc3QsIHRpbWVzLCB0aW1lc0ludm9rZWQsIG9yaWdpbiB9KSA9PiAoe1xuICAgICAgICBNZXRob2Q6IG1ldGhvZCxcbiAgICAgICAgT3JpZ2luOiBvcmlnaW4sXG4gICAgICAgIFBhdGg6IHBhdGgsXG4gICAgICAgICdTdGF0dXMgY29kZSc6IHN0YXR1c0NvZGUsXG4gICAgICAgIFBlcnNpc3RlbnQ6IHBlcnNpc3QgPyAn4pyFJyA6ICfinYwnLFxuICAgICAgICBJbnZvY2F0aW9uczogdGltZXNJbnZva2VkLFxuICAgICAgICBSZW1haW5pbmc6IHBlcnNpc3QgPyBJbmZpbml0eSA6IHRpbWVzIC0gdGltZXNJbnZva2VkXG4gICAgICB9KSlcblxuICAgIHRoaXMubG9nZ2VyLnRhYmxlKHdpdGhQcmV0dHlIZWFkZXJzKVxuICAgIHJldHVybiB0aGlzLnRyYW5zZm9ybS5yZWFkKCkudG9TdHJpbmcoKVxuICB9XG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGtDbGllbnRzIH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgQWdlbnQgPSByZXF1aXJlKCcuLi9hZ2VudCcpXG5jb25zdCB7XG4gIGtBZ2VudCxcbiAga01vY2tBZ2VudFNldCxcbiAga01vY2tBZ2VudEdldCxcbiAga0Rpc3BhdGNoZXMsXG4gIGtJc01vY2tBY3RpdmUsXG4gIGtOZXRDb25uZWN0LFxuICBrR2V0TmV0Q29ubmVjdCxcbiAga09wdGlvbnMsXG4gIGtGYWN0b3J5XG59ID0gcmVxdWlyZSgnLi9tb2NrLXN5bWJvbHMnKVxuY29uc3QgTW9ja0NsaWVudCA9IHJlcXVpcmUoJy4vbW9jay1jbGllbnQnKVxuY29uc3QgTW9ja1Bvb2wgPSByZXF1aXJlKCcuL21vY2stcG9vbCcpXG5jb25zdCB7IG1hdGNoVmFsdWUsIGJ1aWxkTW9ja09wdGlvbnMgfSA9IHJlcXVpcmUoJy4vbW9jay11dGlscycpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yLCBVbmRpY2lFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgRGlzcGF0Y2hlciA9IHJlcXVpcmUoJy4uL2Rpc3BhdGNoZXInKVxuY29uc3QgUGx1cmFsaXplciA9IHJlcXVpcmUoJy4vcGx1cmFsaXplcicpXG5jb25zdCBQZW5kaW5nSW50ZXJjZXB0b3JzRm9ybWF0dGVyID0gcmVxdWlyZSgnLi9wZW5kaW5nLWludGVyY2VwdG9ycy1mb3JtYXR0ZXInKVxuXG5jbGFzcyBGYWtlV2Vha1JlZiB7XG4gIGNvbnN0cnVjdG9yICh2YWx1ZSkge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZVxuICB9XG5cbiAgZGVyZWYgKCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlXG4gIH1cbn1cblxuY2xhc3MgTW9ja0FnZW50IGV4dGVuZHMgRGlzcGF0Y2hlciB7XG4gIGNvbnN0cnVjdG9yIChvcHRzKSB7XG4gICAgc3VwZXIob3B0cylcblxuICAgIHRoaXNba05ldENvbm5lY3RdID0gdHJ1ZVxuICAgIHRoaXNba0lzTW9ja0FjdGl2ZV0gPSB0cnVlXG5cbiAgICAvLyBJbnN0YW50aWF0ZSBBZ2VudCBhbmQgZW5jYXBzdWxhdGVcbiAgICBpZiAoKG9wdHMgJiYgb3B0cy5hZ2VudCAmJiB0eXBlb2Ygb3B0cy5hZ2VudC5kaXNwYXRjaCAhPT0gJ2Z1bmN0aW9uJykpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignQXJndW1lbnQgb3B0cy5hZ2VudCBtdXN0IGltcGxlbWVudCBBZ2VudCcpXG4gICAgfVxuICAgIGNvbnN0IGFnZW50ID0gb3B0cyAmJiBvcHRzLmFnZW50ID8gb3B0cy5hZ2VudCA6IG5ldyBBZ2VudChvcHRzKVxuICAgIHRoaXNba0FnZW50XSA9IGFnZW50XG5cbiAgICB0aGlzW2tDbGllbnRzXSA9IGFnZW50W2tDbGllbnRzXVxuICAgIHRoaXNba09wdGlvbnNdID0gYnVpbGRNb2NrT3B0aW9ucyhvcHRzKVxuICB9XG5cbiAgZ2V0IChvcmlnaW4pIHtcbiAgICBsZXQgZGlzcGF0Y2hlciA9IHRoaXNba01vY2tBZ2VudEdldF0ob3JpZ2luKVxuXG4gICAgaWYgKCFkaXNwYXRjaGVyKSB7XG4gICAgICBkaXNwYXRjaGVyID0gdGhpc1trRmFjdG9yeV0ob3JpZ2luKVxuICAgICAgdGhpc1trTW9ja0FnZW50U2V0XShvcmlnaW4sIGRpc3BhdGNoZXIpXG4gICAgfVxuICAgIHJldHVybiBkaXNwYXRjaGVyXG4gIH1cblxuICBkaXNwYXRjaCAob3B0cywgaGFuZGxlcikge1xuICAgIC8vIENhbGwgTW9ja0FnZW50LmdldCB0byBwZXJmb3JtIGFkZGl0aW9uYWwgc2V0dXAgYmVmb3JlIGRpc3BhdGNoaW5nIGFzIG5vcm1hbFxuICAgIHRoaXMuZ2V0KG9wdHMub3JpZ2luKVxuICAgIHJldHVybiB0aGlzW2tBZ2VudF0uZGlzcGF0Y2gob3B0cywgaGFuZGxlcilcbiAgfVxuXG4gIGFzeW5jIGNsb3NlICgpIHtcbiAgICBhd2FpdCB0aGlzW2tBZ2VudF0uY2xvc2UoKVxuICAgIHRoaXNba0NsaWVudHNdLmNsZWFyKClcbiAgfVxuXG4gIGRlYWN0aXZhdGUgKCkge1xuICAgIHRoaXNba0lzTW9ja0FjdGl2ZV0gPSBmYWxzZVxuICB9XG5cbiAgYWN0aXZhdGUgKCkge1xuICAgIHRoaXNba0lzTW9ja0FjdGl2ZV0gPSB0cnVlXG4gIH1cblxuICBlbmFibGVOZXRDb25uZWN0IChtYXRjaGVyKSB7XG4gICAgaWYgKHR5cGVvZiBtYXRjaGVyID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgbWF0Y2hlciA9PT0gJ2Z1bmN0aW9uJyB8fCBtYXRjaGVyIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzW2tOZXRDb25uZWN0XSkpIHtcbiAgICAgICAgdGhpc1trTmV0Q29ubmVjdF0ucHVzaChtYXRjaGVyKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpc1trTmV0Q29ubmVjdF0gPSBbbWF0Y2hlcl1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBtYXRjaGVyID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhpc1trTmV0Q29ubmVjdF0gPSB0cnVlXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignVW5zdXBwb3J0ZWQgbWF0Y2hlci4gTXVzdCBiZSBvbmUgb2YgU3RyaW5nfEZ1bmN0aW9ufFJlZ0V4cC4nKVxuICAgIH1cbiAgfVxuXG4gIGRpc2FibGVOZXRDb25uZWN0ICgpIHtcbiAgICB0aGlzW2tOZXRDb25uZWN0XSA9IGZhbHNlXG4gIH1cblxuICAvLyBUaGlzIGlzIHJlcXVpcmVkIHRvIGJ5cGFzcyBpc3N1ZXMgY2F1c2VkIGJ5IHVzaW5nIGdsb2JhbCBzeW1ib2xzIC0gc2VlOlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMTQ0N1xuICBnZXQgaXNNb2NrQWN0aXZlICgpIHtcbiAgICByZXR1cm4gdGhpc1trSXNNb2NrQWN0aXZlXVxuICB9XG5cbiAgW2tNb2NrQWdlbnRTZXRdIChvcmlnaW4sIGRpc3BhdGNoZXIpIHtcbiAgICB0aGlzW2tDbGllbnRzXS5zZXQob3JpZ2luLCBuZXcgRmFrZVdlYWtSZWYoZGlzcGF0Y2hlcikpXG4gIH1cblxuICBba0ZhY3RvcnldIChvcmlnaW4pIHtcbiAgICBjb25zdCBtb2NrT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oeyBhZ2VudDogdGhpcyB9LCB0aGlzW2tPcHRpb25zXSlcbiAgICByZXR1cm4gdGhpc1trT3B0aW9uc10gJiYgdGhpc1trT3B0aW9uc10uY29ubmVjdGlvbnMgPT09IDFcbiAgICAgID8gbmV3IE1vY2tDbGllbnQob3JpZ2luLCBtb2NrT3B0aW9ucylcbiAgICAgIDogbmV3IE1vY2tQb29sKG9yaWdpbiwgbW9ja09wdGlvbnMpXG4gIH1cblxuICBba01vY2tBZ2VudEdldF0gKG9yaWdpbikge1xuICAgIC8vIEZpcnN0IGNoZWNrIGlmIHdlIGNhbiBpbW1lZGlhdGVseSBmaW5kIGl0XG4gICAgY29uc3QgcmVmID0gdGhpc1trQ2xpZW50c10uZ2V0KG9yaWdpbilcbiAgICBpZiAocmVmKSB7XG4gICAgICByZXR1cm4gcmVmLmRlcmVmKClcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgb3JpZ2luIGlzIG5vdCBhIHN0cmluZyBjcmVhdGUgYSBkdW1teSBwYXJlbnQgcG9vbCBhbmQgcmV0dXJuIHRvIHVzZXJcbiAgICBpZiAodHlwZW9mIG9yaWdpbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IGRpc3BhdGNoZXIgPSB0aGlzW2tGYWN0b3J5XSgnaHR0cDovL2xvY2FsaG9zdDo5OTk5JylcbiAgICAgIHRoaXNba01vY2tBZ2VudFNldF0ob3JpZ2luLCBkaXNwYXRjaGVyKVxuICAgICAgcmV0dXJuIGRpc3BhdGNoZXJcbiAgICB9XG5cbiAgICAvLyBJZiB3ZSBtYXRjaCwgY3JlYXRlIGEgcG9vbCBhbmQgYXNzaWduIHRoZSBzYW1lIGRpc3BhdGNoZXNcbiAgICBmb3IgKGNvbnN0IFtrZXlNYXRjaGVyLCBub25FeHBsaWNpdFJlZl0gb2YgQXJyYXkuZnJvbSh0aGlzW2tDbGllbnRzXSkpIHtcbiAgICAgIGNvbnN0IG5vbkV4cGxpY2l0RGlzcGF0Y2hlciA9IG5vbkV4cGxpY2l0UmVmLmRlcmVmKClcbiAgICAgIGlmIChub25FeHBsaWNpdERpc3BhdGNoZXIgJiYgdHlwZW9mIGtleU1hdGNoZXIgIT09ICdzdHJpbmcnICYmIG1hdGNoVmFsdWUoa2V5TWF0Y2hlciwgb3JpZ2luKSkge1xuICAgICAgICBjb25zdCBkaXNwYXRjaGVyID0gdGhpc1trRmFjdG9yeV0ob3JpZ2luKVxuICAgICAgICB0aGlzW2tNb2NrQWdlbnRTZXRdKG9yaWdpbiwgZGlzcGF0Y2hlcilcbiAgICAgICAgZGlzcGF0Y2hlcltrRGlzcGF0Y2hlc10gPSBub25FeHBsaWNpdERpc3BhdGNoZXJba0Rpc3BhdGNoZXNdXG4gICAgICAgIHJldHVybiBkaXNwYXRjaGVyXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgW2tHZXROZXRDb25uZWN0XSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba05ldENvbm5lY3RdXG4gIH1cblxuICBwZW5kaW5nSW50ZXJjZXB0b3JzICgpIHtcbiAgICBjb25zdCBtb2NrQWdlbnRDbGllbnRzID0gdGhpc1trQ2xpZW50c11cblxuICAgIHJldHVybiBBcnJheS5mcm9tKG1vY2tBZ2VudENsaWVudHMuZW50cmllcygpKVxuICAgICAgLmZsYXRNYXAoKFtvcmlnaW4sIHNjb3BlXSkgPT4gc2NvcGUuZGVyZWYoKVtrRGlzcGF0Y2hlc10ubWFwKGRpc3BhdGNoID0+ICh7IC4uLmRpc3BhdGNoLCBvcmlnaW4gfSkpKVxuICAgICAgLmZpbHRlcigoeyBwZW5kaW5nIH0pID0+IHBlbmRpbmcpXG4gIH1cblxuICBhc3NlcnROb1BlbmRpbmdJbnRlcmNlcHRvcnMgKHsgcGVuZGluZ0ludGVyY2VwdG9yc0Zvcm1hdHRlciA9IG5ldyBQZW5kaW5nSW50ZXJjZXB0b3JzRm9ybWF0dGVyKCkgfSA9IHt9KSB7XG4gICAgY29uc3QgcGVuZGluZyA9IHRoaXMucGVuZGluZ0ludGVyY2VwdG9ycygpXG5cbiAgICBpZiAocGVuZGluZy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHBsdXJhbGl6ZXIgPSBuZXcgUGx1cmFsaXplcignaW50ZXJjZXB0b3InLCAnaW50ZXJjZXB0b3JzJykucGx1cmFsaXplKHBlbmRpbmcubGVuZ3RoKVxuXG4gICAgdGhyb3cgbmV3IFVuZGljaUVycm9yKGBcbiR7cGx1cmFsaXplci5jb3VudH0gJHtwbHVyYWxpemVyLm5vdW59ICR7cGx1cmFsaXplci5pc30gcGVuZGluZzpcblxuJHtwZW5kaW5nSW50ZXJjZXB0b3JzRm9ybWF0dGVyLmZvcm1hdChwZW5kaW5nKX1cbmAudHJpbSgpKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gTW9ja0FnZW50XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGtQcm94eSwga0Nsb3NlLCBrRGVzdHJveSwga0ludGVyY2VwdG9ycyB9ID0gcmVxdWlyZSgnLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgeyBVUkwgfSA9IHJlcXVpcmUoJ3VybCcpXG5jb25zdCBBZ2VudCA9IHJlcXVpcmUoJy4vYWdlbnQnKVxuY29uc3QgUG9vbCA9IHJlcXVpcmUoJy4vcG9vbCcpXG5jb25zdCBEaXNwYXRjaGVyQmFzZSA9IHJlcXVpcmUoJy4vZGlzcGF0Y2hlci1iYXNlJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IsIFJlcXVlc3RBYm9ydGVkRXJyb3IgfSA9IHJlcXVpcmUoJy4vY29yZS9lcnJvcnMnKVxuY29uc3QgYnVpbGRDb25uZWN0b3IgPSByZXF1aXJlKCcuL2NvcmUvY29ubmVjdCcpXG5cbmNvbnN0IGtBZ2VudCA9IFN5bWJvbCgncHJveHkgYWdlbnQnKVxuY29uc3Qga0NsaWVudCA9IFN5bWJvbCgncHJveHkgY2xpZW50JylcbmNvbnN0IGtQcm94eUhlYWRlcnMgPSBTeW1ib2woJ3Byb3h5IGhlYWRlcnMnKVxuY29uc3Qga1JlcXVlc3RUbHMgPSBTeW1ib2woJ3JlcXVlc3QgdGxzIHNldHRpbmdzJylcbmNvbnN0IGtQcm94eVRscyA9IFN5bWJvbCgncHJveHkgdGxzIHNldHRpbmdzJylcbmNvbnN0IGtDb25uZWN0RW5kcG9pbnQgPSBTeW1ib2woJ2Nvbm5lY3QgZW5kcG9pbnQgZnVuY3Rpb24nKVxuXG5mdW5jdGlvbiBkZWZhdWx0UHJvdG9jb2xQb3J0IChwcm90b2NvbCkge1xuICByZXR1cm4gcHJvdG9jb2wgPT09ICdodHRwczonID8gNDQzIDogODBcbn1cblxuZnVuY3Rpb24gYnVpbGRQcm94eU9wdGlvbnMgKG9wdHMpIHtcbiAgaWYgKHR5cGVvZiBvcHRzID09PSAnc3RyaW5nJykge1xuICAgIG9wdHMgPSB7IHVyaTogb3B0cyB9XG4gIH1cblxuICBpZiAoIW9wdHMgfHwgIW9wdHMudXJpKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdQcm94eSBvcHRzLnVyaSBpcyBtYW5kYXRvcnknKVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB1cmk6IG9wdHMudXJpLFxuICAgIHByb3RvY29sOiBvcHRzLnByb3RvY29sIHx8ICdodHRwcydcbiAgfVxufVxuXG5mdW5jdGlvbiBkZWZhdWx0RmFjdG9yeSAob3JpZ2luLCBvcHRzKSB7XG4gIHJldHVybiBuZXcgUG9vbChvcmlnaW4sIG9wdHMpXG59XG5cbmNsYXNzIFByb3h5QWdlbnQgZXh0ZW5kcyBEaXNwYXRjaGVyQmFzZSB7XG4gIGNvbnN0cnVjdG9yIChvcHRzKSB7XG4gICAgc3VwZXIob3B0cylcbiAgICB0aGlzW2tQcm94eV0gPSBidWlsZFByb3h5T3B0aW9ucyhvcHRzKVxuICAgIHRoaXNba0FnZW50XSA9IG5ldyBBZ2VudChvcHRzKVxuICAgIHRoaXNba0ludGVyY2VwdG9yc10gPSBvcHRzLmludGVyY2VwdG9ycyAmJiBvcHRzLmludGVyY2VwdG9ycy5Qcm94eUFnZW50ICYmIEFycmF5LmlzQXJyYXkob3B0cy5pbnRlcmNlcHRvcnMuUHJveHlBZ2VudClcbiAgICAgID8gb3B0cy5pbnRlcmNlcHRvcnMuUHJveHlBZ2VudFxuICAgICAgOiBbXVxuXG4gICAgaWYgKHR5cGVvZiBvcHRzID09PSAnc3RyaW5nJykge1xuICAgICAgb3B0cyA9IHsgdXJpOiBvcHRzIH1cbiAgICB9XG5cbiAgICBpZiAoIW9wdHMgfHwgIW9wdHMudXJpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ1Byb3h5IG9wdHMudXJpIGlzIG1hbmRhdG9yeScpXG4gICAgfVxuXG4gICAgY29uc3QgeyBjbGllbnRGYWN0b3J5ID0gZGVmYXVsdEZhY3RvcnkgfSA9IG9wdHNcblxuICAgIGlmICh0eXBlb2YgY2xpZW50RmFjdG9yeSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdQcm94eSBvcHRzLmNsaWVudEZhY3RvcnkgbXVzdCBiZSBhIGZ1bmN0aW9uLicpXG4gICAgfVxuXG4gICAgdGhpc1trUmVxdWVzdFRsc10gPSBvcHRzLnJlcXVlc3RUbHNcbiAgICB0aGlzW2tQcm94eVRsc10gPSBvcHRzLnByb3h5VGxzXG4gICAgdGhpc1trUHJveHlIZWFkZXJzXSA9IG9wdHMuaGVhZGVycyB8fCB7fVxuXG4gICAgY29uc3QgcmVzb2x2ZWRVcmwgPSBuZXcgVVJMKG9wdHMudXJpKVxuICAgIGNvbnN0IHsgb3JpZ2luLCBwb3J0LCBob3N0LCB1c2VybmFtZSwgcGFzc3dvcmQgfSA9IHJlc29sdmVkVXJsXG5cbiAgICBpZiAob3B0cy5hdXRoICYmIG9wdHMudG9rZW4pIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignb3B0cy5hdXRoIGNhbm5vdCBiZSB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggb3B0cy50b2tlbicpXG4gICAgfSBlbHNlIGlmIChvcHRzLmF1dGgpIHtcbiAgICAgIC8qIEBkZXByZWNhdGVkIGluIGZhdm91ciBvZiBvcHRzLnRva2VuICovXG4gICAgICB0aGlzW2tQcm94eUhlYWRlcnNdWydwcm94eS1hdXRob3JpemF0aW9uJ10gPSBgQmFzaWMgJHtvcHRzLmF1dGh9YFxuICAgIH0gZWxzZSBpZiAob3B0cy50b2tlbikge1xuICAgICAgdGhpc1trUHJveHlIZWFkZXJzXVsncHJveHktYXV0aG9yaXphdGlvbiddID0gb3B0cy50b2tlblxuICAgIH0gZWxzZSBpZiAodXNlcm5hbWUgJiYgcGFzc3dvcmQpIHtcbiAgICAgIHRoaXNba1Byb3h5SGVhZGVyc11bJ3Byb3h5LWF1dGhvcml6YXRpb24nXSA9IGBCYXNpYyAke0J1ZmZlci5mcm9tKGAke2RlY29kZVVSSUNvbXBvbmVudCh1c2VybmFtZSl9OiR7ZGVjb2RlVVJJQ29tcG9uZW50KHBhc3N3b3JkKX1gKS50b1N0cmluZygnYmFzZTY0Jyl9YFxuICAgIH1cblxuICAgIGNvbnN0IGNvbm5lY3QgPSBidWlsZENvbm5lY3Rvcih7IC4uLm9wdHMucHJveHlUbHMgfSlcbiAgICB0aGlzW2tDb25uZWN0RW5kcG9pbnRdID0gYnVpbGRDb25uZWN0b3IoeyAuLi5vcHRzLnJlcXVlc3RUbHMgfSlcbiAgICB0aGlzW2tDbGllbnRdID0gY2xpZW50RmFjdG9yeShyZXNvbHZlZFVybCwgeyBjb25uZWN0IH0pXG4gICAgdGhpc1trQWdlbnRdID0gbmV3IEFnZW50KHtcbiAgICAgIC4uLm9wdHMsXG4gICAgICBjb25uZWN0OiBhc3luYyAob3B0cywgY2FsbGJhY2spID0+IHtcbiAgICAgICAgbGV0IHJlcXVlc3RlZEhvc3QgPSBvcHRzLmhvc3RcbiAgICAgICAgaWYgKCFvcHRzLnBvcnQpIHtcbiAgICAgICAgICByZXF1ZXN0ZWRIb3N0ICs9IGA6JHtkZWZhdWx0UHJvdG9jb2xQb3J0KG9wdHMucHJvdG9jb2wpfWBcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHsgc29ja2V0LCBzdGF0dXNDb2RlIH0gPSBhd2FpdCB0aGlzW2tDbGllbnRdLmNvbm5lY3Qoe1xuICAgICAgICAgICAgb3JpZ2luLFxuICAgICAgICAgICAgcG9ydCxcbiAgICAgICAgICAgIHBhdGg6IHJlcXVlc3RlZEhvc3QsXG4gICAgICAgICAgICBzaWduYWw6IG9wdHMuc2lnbmFsLFxuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAuLi50aGlzW2tQcm94eUhlYWRlcnNdLFxuICAgICAgICAgICAgICBob3N0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgICBpZiAoc3RhdHVzQ29kZSAhPT0gMjAwKSB7XG4gICAgICAgICAgICBzb2NrZXQub24oJ2Vycm9yJywgKCkgPT4ge30pLmRlc3Ryb3koKVxuICAgICAgICAgICAgY2FsbGJhY2sobmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoYFByb3h5IHJlc3BvbnNlICgke3N0YXR1c0NvZGV9KSAhPT0gMjAwIHdoZW4gSFRUUCBUdW5uZWxpbmdgKSlcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG9wdHMucHJvdG9jb2wgIT09ICdodHRwczonKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhudWxsLCBzb2NrZXQpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgICAgbGV0IHNlcnZlcm5hbWVcbiAgICAgICAgICBpZiAodGhpc1trUmVxdWVzdFRsc10pIHtcbiAgICAgICAgICAgIHNlcnZlcm5hbWUgPSB0aGlzW2tSZXF1ZXN0VGxzXS5zZXJ2ZXJuYW1lXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNlcnZlcm5hbWUgPSBvcHRzLnNlcnZlcm5hbWVcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpc1trQ29ubmVjdEVuZHBvaW50XSh7IC4uLm9wdHMsIHNlcnZlcm5hbWUsIGh0dHBTb2NrZXQ6IHNvY2tldCB9LCBjYWxsYmFjaylcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY2FsbGJhY2soZXJyKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGRpc3BhdGNoIChvcHRzLCBoYW5kbGVyKSB7XG4gICAgY29uc3QgeyBob3N0IH0gPSBuZXcgVVJMKG9wdHMub3JpZ2luKVxuICAgIGNvbnN0IGhlYWRlcnMgPSBidWlsZEhlYWRlcnMob3B0cy5oZWFkZXJzKVxuICAgIHRocm93SWZQcm94eUF1dGhJc1NlbnQoaGVhZGVycylcbiAgICByZXR1cm4gdGhpc1trQWdlbnRdLmRpc3BhdGNoKFxuICAgICAge1xuICAgICAgICAuLi5vcHRzLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgLi4uaGVhZGVycyxcbiAgICAgICAgICBob3N0XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBoYW5kbGVyXG4gICAgKVxuICB9XG5cbiAgYXN5bmMgW2tDbG9zZV0gKCkge1xuICAgIGF3YWl0IHRoaXNba0FnZW50XS5jbG9zZSgpXG4gICAgYXdhaXQgdGhpc1trQ2xpZW50XS5jbG9zZSgpXG4gIH1cblxuICBhc3luYyBba0Rlc3Ryb3ldICgpIHtcbiAgICBhd2FpdCB0aGlzW2tBZ2VudF0uZGVzdHJveSgpXG4gICAgYXdhaXQgdGhpc1trQ2xpZW50XS5kZXN0cm95KClcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nW10gfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSBoZWFkZXJzXG4gKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn1cbiAqL1xuZnVuY3Rpb24gYnVpbGRIZWFkZXJzIChoZWFkZXJzKSB7XG4gIC8vIFdoZW4gdXNpbmcgdW5kaWNpLmZldGNoLCB0aGUgaGVhZGVycyBsaXN0IGlzIHN0b3JlZFxuICAvLyBhcyBhbiBhcnJheS5cbiAgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHN0cmluZz59ICovXG4gICAgY29uc3QgaGVhZGVyc1BhaXIgPSB7fVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICBoZWFkZXJzUGFpcltoZWFkZXJzW2ldXSA9IGhlYWRlcnNbaSArIDFdXG4gICAgfVxuXG4gICAgcmV0dXJuIGhlYWRlcnNQYWlyXG4gIH1cblxuICByZXR1cm4gaGVhZGVyc1xufVxuXG4vKipcbiAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn0gaGVhZGVyc1xuICpcbiAqIFByZXZpb3VzIHZlcnNpb25zIG9mIFByb3h5QWdlbnQgc3VnZ2VzdHMgdGhlIFByb3h5LUF1dGhvcml6YXRpb24gaW4gcmVxdWVzdCBoZWFkZXJzXG4gKiBOZXZlcnRoZWxlc3MsIGl0IHdhcyBjaGFuZ2VkIGFuZCB0byBhdm9pZCBhIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkgYnkgZW5kIHVzZXJzXG4gKiB0aGlzIGNoZWNrIHdhcyBjcmVhdGVkLlxuICogSXQgc2hvdWxkIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbiBmb3IgcGVyZm9ybWFuY2UgcmVhc29uc1xuICovXG5mdW5jdGlvbiB0aHJvd0lmUHJveHlBdXRoSXNTZW50IChoZWFkZXJzKSB7XG4gIGNvbnN0IGV4aXN0UHJveHlBdXRoID0gaGVhZGVycyAmJiBPYmplY3Qua2V5cyhoZWFkZXJzKVxuICAgIC5maW5kKChrZXkpID0+IGtleS50b0xvd2VyQ2FzZSgpID09PSAncHJveHktYXV0aG9yaXphdGlvbicpXG4gIGlmIChleGlzdFByb3h5QXV0aCkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignUHJveHktQXV0aG9yaXphdGlvbiBzaG91bGQgYmUgc2VudCBpbiBQcm94eUFnZW50IGNvbnN0cnVjdG9yJylcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFByb3h5QWdlbnRcbiIsCiAgICAiY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcblxuY29uc3QgeyBrUmV0cnlIYW5kbGVyRGVmYXVsdFJldHJ5IH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgeyBSZXF1ZXN0UmV0cnlFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgeyBpc0Rpc3R1cmJlZCwgcGFyc2VIZWFkZXJzLCBwYXJzZVJhbmdlSGVhZGVyIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuXG5mdW5jdGlvbiBjYWxjdWxhdGVSZXRyeUFmdGVySGVhZGVyIChyZXRyeUFmdGVyKSB7XG4gIGNvbnN0IGN1cnJlbnQgPSBEYXRlLm5vdygpXG4gIGNvbnN0IGRpZmYgPSBuZXcgRGF0ZShyZXRyeUFmdGVyKS5nZXRUaW1lKCkgLSBjdXJyZW50XG5cbiAgcmV0dXJuIGRpZmZcbn1cblxuY2xhc3MgUmV0cnlIYW5kbGVyIHtcbiAgY29uc3RydWN0b3IgKG9wdHMsIGhhbmRsZXJzKSB7XG4gICAgY29uc3QgeyByZXRyeU9wdGlvbnMsIC4uLmRpc3BhdGNoT3B0cyB9ID0gb3B0c1xuICAgIGNvbnN0IHtcbiAgICAgIC8vIFJldHJ5IHNjb3BlZFxuICAgICAgcmV0cnk6IHJldHJ5Rm4sXG4gICAgICBtYXhSZXRyaWVzLFxuICAgICAgbWF4VGltZW91dCxcbiAgICAgIG1pblRpbWVvdXQsXG4gICAgICB0aW1lb3V0RmFjdG9yLFxuICAgICAgLy8gUmVzcG9uc2Ugc2NvcGVkXG4gICAgICBtZXRob2RzLFxuICAgICAgZXJyb3JDb2RlcyxcbiAgICAgIHJldHJ5QWZ0ZXIsXG4gICAgICBzdGF0dXNDb2Rlc1xuICAgIH0gPSByZXRyeU9wdGlvbnMgPz8ge31cblxuICAgIHRoaXMuZGlzcGF0Y2ggPSBoYW5kbGVycy5kaXNwYXRjaFxuICAgIHRoaXMuaGFuZGxlciA9IGhhbmRsZXJzLmhhbmRsZXJcbiAgICB0aGlzLm9wdHMgPSBkaXNwYXRjaE9wdHNcbiAgICB0aGlzLmFib3J0ID0gbnVsbFxuICAgIHRoaXMuYWJvcnRlZCA9IGZhbHNlXG4gICAgdGhpcy5yZXRyeU9wdHMgPSB7XG4gICAgICByZXRyeTogcmV0cnlGbiA/PyBSZXRyeUhhbmRsZXJba1JldHJ5SGFuZGxlckRlZmF1bHRSZXRyeV0sXG4gICAgICByZXRyeUFmdGVyOiByZXRyeUFmdGVyID8/IHRydWUsXG4gICAgICBtYXhUaW1lb3V0OiBtYXhUaW1lb3V0ID8/IDMwICogMTAwMCwgLy8gMzBzLFxuICAgICAgdGltZW91dDogbWluVGltZW91dCA/PyA1MDAsIC8vIC41c1xuICAgICAgdGltZW91dEZhY3RvcjogdGltZW91dEZhY3RvciA/PyAyLFxuICAgICAgbWF4UmV0cmllczogbWF4UmV0cmllcyA/PyA1LFxuICAgICAgLy8gV2hhdCBlcnJvcnMgd2Ugc2hvdWxkIHJldHJ5XG4gICAgICBtZXRob2RzOiBtZXRob2RzID8/IFsnR0VUJywgJ0hFQUQnLCAnT1BUSU9OUycsICdQVVQnLCAnREVMRVRFJywgJ1RSQUNFJ10sXG4gICAgICAvLyBJbmRpY2F0ZXMgd2hpY2ggZXJyb3JzIHRvIHJldHJ5XG4gICAgICBzdGF0dXNDb2Rlczogc3RhdHVzQ29kZXMgPz8gWzUwMCwgNTAyLCA1MDMsIDUwNCwgNDI5XSxcbiAgICAgIC8vIExpc3Qgb2YgZXJyb3JzIHRvIHJldHJ5XG4gICAgICBlcnJvckNvZGVzOiBlcnJvckNvZGVzID8/IFtcbiAgICAgICAgJ0VDT05OUkVTRVQnLFxuICAgICAgICAnRUNPTk5SRUZVU0VEJyxcbiAgICAgICAgJ0VOT1RGT1VORCcsXG4gICAgICAgICdFTkVURE9XTicsXG4gICAgICAgICdFTkVUVU5SRUFDSCcsXG4gICAgICAgICdFSE9TVERPV04nLFxuICAgICAgICAnRUhPU1RVTlJFQUNIJyxcbiAgICAgICAgJ0VQSVBFJ1xuICAgICAgXVxuICAgIH1cblxuICAgIHRoaXMucmV0cnlDb3VudCA9IDBcbiAgICB0aGlzLnN0YXJ0ID0gMFxuICAgIHRoaXMuZW5kID0gbnVsbFxuICAgIHRoaXMuZXRhZyA9IG51bGxcbiAgICB0aGlzLnJlc3VtZSA9IG51bGxcblxuICAgIC8vIEhhbmRsZSBwb3NzaWJsZSBvbkNvbm5lY3QgZHVwbGljYXRpb25cbiAgICB0aGlzLmhhbmRsZXIub25Db25uZWN0KHJlYXNvbiA9PiB7XG4gICAgICB0aGlzLmFib3J0ZWQgPSB0cnVlXG4gICAgICBpZiAodGhpcy5hYm9ydCkge1xuICAgICAgICB0aGlzLmFib3J0KHJlYXNvbilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVhc29uID0gcmVhc29uXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIG9uUmVxdWVzdFNlbnQgKCkge1xuICAgIGlmICh0aGlzLmhhbmRsZXIub25SZXF1ZXN0U2VudCkge1xuICAgICAgdGhpcy5oYW5kbGVyLm9uUmVxdWVzdFNlbnQoKVxuICAgIH1cbiAgfVxuXG4gIG9uVXBncmFkZSAoc3RhdHVzQ29kZSwgaGVhZGVycywgc29ja2V0KSB7XG4gICAgaWYgKHRoaXMuaGFuZGxlci5vblVwZ3JhZGUpIHtcbiAgICAgIHRoaXMuaGFuZGxlci5vblVwZ3JhZGUoc3RhdHVzQ29kZSwgaGVhZGVycywgc29ja2V0KVxuICAgIH1cbiAgfVxuXG4gIG9uQ29ubmVjdCAoYWJvcnQpIHtcbiAgICBpZiAodGhpcy5hYm9ydGVkKSB7XG4gICAgICBhYm9ydCh0aGlzLnJlYXNvbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hYm9ydCA9IGFib3J0XG4gICAgfVxuICB9XG5cbiAgb25Cb2R5U2VudCAoY2h1bmspIHtcbiAgICBpZiAodGhpcy5oYW5kbGVyLm9uQm9keVNlbnQpIHJldHVybiB0aGlzLmhhbmRsZXIub25Cb2R5U2VudChjaHVuaylcbiAgfVxuXG4gIHN0YXRpYyBba1JldHJ5SGFuZGxlckRlZmF1bHRSZXRyeV0gKGVyciwgeyBzdGF0ZSwgb3B0cyB9LCBjYikge1xuICAgIGNvbnN0IHsgc3RhdHVzQ29kZSwgY29kZSwgaGVhZGVycyB9ID0gZXJyXG4gICAgY29uc3QgeyBtZXRob2QsIHJldHJ5T3B0aW9ucyB9ID0gb3B0c1xuICAgIGNvbnN0IHtcbiAgICAgIG1heFJldHJpZXMsXG4gICAgICB0aW1lb3V0LFxuICAgICAgbWF4VGltZW91dCxcbiAgICAgIHRpbWVvdXRGYWN0b3IsXG4gICAgICBzdGF0dXNDb2RlcyxcbiAgICAgIGVycm9yQ29kZXMsXG4gICAgICBtZXRob2RzXG4gICAgfSA9IHJldHJ5T3B0aW9uc1xuICAgIGxldCB7IGNvdW50ZXIsIGN1cnJlbnRUaW1lb3V0IH0gPSBzdGF0ZVxuXG4gICAgY3VycmVudFRpbWVvdXQgPVxuICAgICAgY3VycmVudFRpbWVvdXQgIT0gbnVsbCAmJiBjdXJyZW50VGltZW91dCA+IDAgPyBjdXJyZW50VGltZW91dCA6IHRpbWVvdXRcblxuICAgIC8vIEFueSBjb2RlIHRoYXQgaXMgbm90IGEgVW5kaWNpJ3Mgb3JpZ2luYXRlZCBhbmQgYWxsb3dlZCB0byByZXRyeVxuICAgIGlmIChcbiAgICAgIGNvZGUgJiZcbiAgICAgIGNvZGUgIT09ICdVTkRfRVJSX1JFUV9SRVRSWScgJiZcbiAgICAgIGNvZGUgIT09ICdVTkRfRVJSX1NPQ0tFVCcgJiZcbiAgICAgICFlcnJvckNvZGVzLmluY2x1ZGVzKGNvZGUpXG4gICAgKSB7XG4gICAgICBjYihlcnIpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBJZiBhIHNldCBvZiBtZXRob2QgYXJlIHByb3ZpZGVkIGFuZCB0aGUgY3VycmVudCBtZXRob2QgaXMgbm90IGluIHRoZSBsaXN0XG4gICAgaWYgKEFycmF5LmlzQXJyYXkobWV0aG9kcykgJiYgIW1ldGhvZHMuaW5jbHVkZXMobWV0aG9kKSkge1xuICAgICAgY2IoZXJyKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gSWYgYSBzZXQgb2Ygc3RhdHVzIGNvZGUgYXJlIHByb3ZpZGVkIGFuZCB0aGUgY3VycmVudCBzdGF0dXMgY29kZSBpcyBub3QgaW4gdGhlIGxpc3RcbiAgICBpZiAoXG4gICAgICBzdGF0dXNDb2RlICE9IG51bGwgJiZcbiAgICAgIEFycmF5LmlzQXJyYXkoc3RhdHVzQ29kZXMpICYmXG4gICAgICAhc3RhdHVzQ29kZXMuaW5jbHVkZXMoc3RhdHVzQ29kZSlcbiAgICApIHtcbiAgICAgIGNiKGVycilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIElmIHdlIHJlYWNoZWQgdGhlIG1heCBudW1iZXIgb2YgcmV0cmllc1xuICAgIGlmIChjb3VudGVyID4gbWF4UmV0cmllcykge1xuICAgICAgY2IoZXJyKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgbGV0IHJldHJ5QWZ0ZXJIZWFkZXIgPSBoZWFkZXJzICE9IG51bGwgJiYgaGVhZGVyc1sncmV0cnktYWZ0ZXInXVxuICAgIGlmIChyZXRyeUFmdGVySGVhZGVyKSB7XG4gICAgICByZXRyeUFmdGVySGVhZGVyID0gTnVtYmVyKHJldHJ5QWZ0ZXJIZWFkZXIpXG4gICAgICByZXRyeUFmdGVySGVhZGVyID0gaXNOYU4ocmV0cnlBZnRlckhlYWRlcilcbiAgICAgICAgPyBjYWxjdWxhdGVSZXRyeUFmdGVySGVhZGVyKHJldHJ5QWZ0ZXJIZWFkZXIpXG4gICAgICAgIDogcmV0cnlBZnRlckhlYWRlciAqIDFlMyAvLyBSZXRyeS1BZnRlciBpcyBpbiBzZWNvbmRzXG4gICAgfVxuXG4gICAgY29uc3QgcmV0cnlUaW1lb3V0ID1cbiAgICAgIHJldHJ5QWZ0ZXJIZWFkZXIgPiAwXG4gICAgICAgID8gTWF0aC5taW4ocmV0cnlBZnRlckhlYWRlciwgbWF4VGltZW91dClcbiAgICAgICAgOiBNYXRoLm1pbihjdXJyZW50VGltZW91dCAqIHRpbWVvdXRGYWN0b3IgKiogY291bnRlciwgbWF4VGltZW91dClcblxuICAgIHN0YXRlLmN1cnJlbnRUaW1lb3V0ID0gcmV0cnlUaW1lb3V0XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IGNiKG51bGwpLCByZXRyeVRpbWVvdXQpXG4gIH1cblxuICBvbkhlYWRlcnMgKHN0YXR1c0NvZGUsIHJhd0hlYWRlcnMsIHJlc3VtZSwgc3RhdHVzTWVzc2FnZSkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBwYXJzZUhlYWRlcnMocmF3SGVhZGVycylcblxuICAgIHRoaXMucmV0cnlDb3VudCArPSAxXG5cbiAgICBpZiAoc3RhdHVzQ29kZSA+PSAzMDApIHtcbiAgICAgIHRoaXMuYWJvcnQoXG4gICAgICAgIG5ldyBSZXF1ZXN0UmV0cnlFcnJvcignUmVxdWVzdCBmYWlsZWQnLCBzdGF0dXNDb2RlLCB7XG4gICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICBjb3VudDogdGhpcy5yZXRyeUNvdW50XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICAvLyBDaGVja3BvaW50IGZvciByZXN1bWUgZnJvbSB3aGVyZSB3ZSBsZWZ0IGl0XG4gICAgaWYgKHRoaXMucmVzdW1lICE9IG51bGwpIHtcbiAgICAgIHRoaXMucmVzdW1lID0gbnVsbFxuXG4gICAgICBpZiAoc3RhdHVzQ29kZSAhPT0gMjA2KSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbnRlbnRSYW5nZSA9IHBhcnNlUmFuZ2VIZWFkZXIoaGVhZGVyc1snY29udGVudC1yYW5nZSddKVxuICAgICAgLy8gSWYgbm8gY29udGVudCByYW5nZVxuICAgICAgaWYgKCFjb250ZW50UmFuZ2UpIHtcbiAgICAgICAgdGhpcy5hYm9ydChcbiAgICAgICAgICBuZXcgUmVxdWVzdFJldHJ5RXJyb3IoJ0NvbnRlbnQtUmFuZ2UgbWlzbWF0Y2gnLCBzdGF0dXNDb2RlLCB7XG4gICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgICAgY291bnQ6IHRoaXMucmV0cnlDb3VudFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG5cbiAgICAgIC8vIExldCdzIHN0YXJ0IHdpdGggYSB3ZWFrIGV0YWcgY2hlY2tcbiAgICAgIGlmICh0aGlzLmV0YWcgIT0gbnVsbCAmJiB0aGlzLmV0YWcgIT09IGhlYWRlcnMuZXRhZykge1xuICAgICAgICB0aGlzLmFib3J0KFxuICAgICAgICAgIG5ldyBSZXF1ZXN0UmV0cnlFcnJvcignRVRhZyBtaXNtYXRjaCcsIHN0YXR1c0NvZGUsIHtcbiAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICBjb3VudDogdGhpcy5yZXRyeUNvdW50XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBzdGFydCwgc2l6ZSwgZW5kID0gc2l6ZSB9ID0gY29udGVudFJhbmdlXG5cbiAgICAgIGFzc2VydCh0aGlzLnN0YXJ0ID09PSBzdGFydCwgJ2NvbnRlbnQtcmFuZ2UgbWlzbWF0Y2gnKVxuICAgICAgYXNzZXJ0KHRoaXMuZW5kID09IG51bGwgfHwgdGhpcy5lbmQgPT09IGVuZCwgJ2NvbnRlbnQtcmFuZ2UgbWlzbWF0Y2gnKVxuXG4gICAgICB0aGlzLnJlc3VtZSA9IHJlc3VtZVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICBpZiAodGhpcy5lbmQgPT0gbnVsbCkge1xuICAgICAgaWYgKHN0YXR1c0NvZGUgPT09IDIwNikge1xuICAgICAgICAvLyBGaXJzdCB0aW1lIHdlIHJlY2VpdmUgMjA2XG4gICAgICAgIGNvbnN0IHJhbmdlID0gcGFyc2VSYW5nZUhlYWRlcihoZWFkZXJzWydjb250ZW50LXJhbmdlJ10pXG5cbiAgICAgICAgaWYgKHJhbmdlID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uSGVhZGVycyhcbiAgICAgICAgICAgIHN0YXR1c0NvZGUsXG4gICAgICAgICAgICByYXdIZWFkZXJzLFxuICAgICAgICAgICAgcmVzdW1lLFxuICAgICAgICAgICAgc3RhdHVzTWVzc2FnZVxuICAgICAgICAgIClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgc3RhcnQsIHNpemUsIGVuZCA9IHNpemUgfSA9IHJhbmdlXG5cbiAgICAgICAgYXNzZXJ0KFxuICAgICAgICAgIHN0YXJ0ICE9IG51bGwgJiYgTnVtYmVyLmlzRmluaXRlKHN0YXJ0KSAmJiB0aGlzLnN0YXJ0ICE9PSBzdGFydCxcbiAgICAgICAgICAnY29udGVudC1yYW5nZSBtaXNtYXRjaCdcbiAgICAgICAgKVxuICAgICAgICBhc3NlcnQoTnVtYmVyLmlzRmluaXRlKHN0YXJ0KSlcbiAgICAgICAgYXNzZXJ0KFxuICAgICAgICAgIGVuZCAhPSBudWxsICYmIE51bWJlci5pc0Zpbml0ZShlbmQpICYmIHRoaXMuZW5kICE9PSBlbmQsXG4gICAgICAgICAgJ2ludmFsaWQgY29udGVudC1sZW5ndGgnXG4gICAgICAgIClcblxuICAgICAgICB0aGlzLnN0YXJ0ID0gc3RhcnRcbiAgICAgICAgdGhpcy5lbmQgPSBlbmRcbiAgICAgIH1cblxuICAgICAgLy8gV2UgbWFrZSBvdXIgYmVzdCB0byBjaGVja3BvaW50IHRoZSBib2R5IGZvciBmdXJ0aGVyIHJhbmdlIGhlYWRlcnNcbiAgICAgIGlmICh0aGlzLmVuZCA9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnRMZW5ndGggPSBoZWFkZXJzWydjb250ZW50LWxlbmd0aCddXG4gICAgICAgIHRoaXMuZW5kID0gY29udGVudExlbmd0aCAhPSBudWxsID8gTnVtYmVyKGNvbnRlbnRMZW5ndGgpIDogbnVsbFxuICAgICAgfVxuXG4gICAgICBhc3NlcnQoTnVtYmVyLmlzRmluaXRlKHRoaXMuc3RhcnQpKVxuICAgICAgYXNzZXJ0KFxuICAgICAgICB0aGlzLmVuZCA9PSBudWxsIHx8IE51bWJlci5pc0Zpbml0ZSh0aGlzLmVuZCksXG4gICAgICAgICdpbnZhbGlkIGNvbnRlbnQtbGVuZ3RoJ1xuICAgICAgKVxuXG4gICAgICB0aGlzLnJlc3VtZSA9IHJlc3VtZVxuICAgICAgdGhpcy5ldGFnID0gaGVhZGVycy5ldGFnICE9IG51bGwgPyBoZWFkZXJzLmV0YWcgOiBudWxsXG5cbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25IZWFkZXJzKFxuICAgICAgICBzdGF0dXNDb2RlLFxuICAgICAgICByYXdIZWFkZXJzLFxuICAgICAgICByZXN1bWUsXG4gICAgICAgIHN0YXR1c01lc3NhZ2VcbiAgICAgIClcbiAgICB9XG5cbiAgICBjb25zdCBlcnIgPSBuZXcgUmVxdWVzdFJldHJ5RXJyb3IoJ1JlcXVlc3QgZmFpbGVkJywgc3RhdHVzQ29kZSwge1xuICAgICAgaGVhZGVycyxcbiAgICAgIGNvdW50OiB0aGlzLnJldHJ5Q291bnRcbiAgICB9KVxuXG4gICAgdGhpcy5hYm9ydChlcnIpXG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIG9uRGF0YSAoY2h1bmspIHtcbiAgICB0aGlzLnN0YXJ0ICs9IGNodW5rLmxlbmd0aFxuXG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkRhdGEoY2h1bmspXG4gIH1cblxuICBvbkNvbXBsZXRlIChyYXdUcmFpbGVycykge1xuICAgIHRoaXMucmV0cnlDb3VudCA9IDBcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uQ29tcGxldGUocmF3VHJhaWxlcnMpXG4gIH1cblxuICBvbkVycm9yIChlcnIpIHtcbiAgICBpZiAodGhpcy5hYm9ydGVkIHx8IGlzRGlzdHVyYmVkKHRoaXMub3B0cy5ib2R5KSkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkVycm9yKGVycilcbiAgICB9XG5cbiAgICB0aGlzLnJldHJ5T3B0cy5yZXRyeShcbiAgICAgIGVycixcbiAgICAgIHtcbiAgICAgICAgc3RhdGU6IHsgY291bnRlcjogdGhpcy5yZXRyeUNvdW50KyssIGN1cnJlbnRUaW1lb3V0OiB0aGlzLnJldHJ5QWZ0ZXIgfSxcbiAgICAgICAgb3B0czogeyByZXRyeU9wdGlvbnM6IHRoaXMucmV0cnlPcHRzLCAuLi50aGlzLm9wdHMgfVxuICAgICAgfSxcbiAgICAgIG9uUmV0cnkuYmluZCh0aGlzKVxuICAgIClcblxuICAgIGZ1bmN0aW9uIG9uUmV0cnkgKGVycikge1xuICAgICAgaWYgKGVyciAhPSBudWxsIHx8IHRoaXMuYWJvcnRlZCB8fCBpc0Rpc3R1cmJlZCh0aGlzLm9wdHMuYm9keSkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkVycm9yKGVycilcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuc3RhcnQgIT09IDApIHtcbiAgICAgICAgdGhpcy5vcHRzID0ge1xuICAgICAgICAgIC4uLnRoaXMub3B0cyxcbiAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAuLi50aGlzLm9wdHMuaGVhZGVycyxcbiAgICAgICAgICAgIHJhbmdlOiBgYnl0ZXM9JHt0aGlzLnN0YXJ0fS0ke3RoaXMuZW5kID8/ICcnfWBcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaCh0aGlzLm9wdHMsIHRoaXMpXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVyLm9uRXJyb3IoZXJyKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFJldHJ5SGFuZGxlclxuIiwKICAgICIndXNlIHN0cmljdCdcblxuLy8gV2UgaW5jbHVkZSBhIHZlcnNpb24gbnVtYmVyIGZvciB0aGUgRGlzcGF0Y2hlciBBUEkuIEluIGNhc2Ugb2YgYnJlYWtpbmcgY2hhbmdlcyxcbi8vIHRoaXMgdmVyc2lvbiBudW1iZXIgbXVzdCBiZSBpbmNyZWFzZWQgdG8gYXZvaWQgY29uZmxpY3RzLlxuY29uc3QgZ2xvYmFsRGlzcGF0Y2hlciA9IFN5bWJvbC5mb3IoJ3VuZGljaS5nbG9iYWxEaXNwYXRjaGVyLjEnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi9jb3JlL2Vycm9ycycpXG5jb25zdCBBZ2VudCA9IHJlcXVpcmUoJy4vYWdlbnQnKVxuXG5pZiAoZ2V0R2xvYmFsRGlzcGF0Y2hlcigpID09PSB1bmRlZmluZWQpIHtcbiAgc2V0R2xvYmFsRGlzcGF0Y2hlcihuZXcgQWdlbnQoKSlcbn1cblxuZnVuY3Rpb24gc2V0R2xvYmFsRGlzcGF0Y2hlciAoYWdlbnQpIHtcbiAgaWYgKCFhZ2VudCB8fCB0eXBlb2YgYWdlbnQuZGlzcGF0Y2ggIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0FyZ3VtZW50IGFnZW50IG11c3QgaW1wbGVtZW50IEFnZW50JylcbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZ2xvYmFsVGhpcywgZ2xvYmFsRGlzcGF0Y2hlciwge1xuICAgIHZhbHVlOiBhZ2VudCxcbiAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IGZhbHNlXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGdldEdsb2JhbERpc3BhdGNoZXIgKCkge1xuICByZXR1cm4gZ2xvYmFsVGhpc1tnbG9iYWxEaXNwYXRjaGVyXVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0R2xvYmFsRGlzcGF0Y2hlcixcbiAgZ2V0R2xvYmFsRGlzcGF0Y2hlclxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBEZWNvcmF0b3JIYW5kbGVyIHtcbiAgY29uc3RydWN0b3IgKGhhbmRsZXIpIHtcbiAgICB0aGlzLmhhbmRsZXIgPSBoYW5kbGVyXG4gIH1cblxuICBvbkNvbm5lY3QgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uQ29ubmVjdCguLi5hcmdzKVxuICB9XG5cbiAgb25FcnJvciAoLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25FcnJvciguLi5hcmdzKVxuICB9XG5cbiAgb25VcGdyYWRlICguLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vblVwZ3JhZGUoLi4uYXJncylcbiAgfVxuXG4gIG9uSGVhZGVycyAoLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25IZWFkZXJzKC4uLmFyZ3MpXG4gIH1cblxuICBvbkRhdGEgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uRGF0YSguLi5hcmdzKVxuICB9XG5cbiAgb25Db21wbGV0ZSAoLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25Db21wbGV0ZSguLi5hcmdzKVxuICB9XG5cbiAgb25Cb2R5U2VudCAoLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25Cb2R5U2VudCguLi5hcmdzKVxuICB9XG59XG4iLAogICAgIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9FdGhhbi1BcnJvd29vZC91bmRpY2ktZmV0Y2hcblxuJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsga0hlYWRlcnNMaXN0LCBrQ29uc3RydWN0IH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgeyBrR3VhcmQgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IGtFbnVtZXJhYmxlUHJvcGVydHkgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7XG4gIG1ha2VJdGVyYXRvcixcbiAgaXNWYWxpZEhlYWRlck5hbWUsXG4gIGlzVmFsaWRIZWFkZXJWYWx1ZVxufSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi93ZWJpZGwnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcblxuY29uc3Qga0hlYWRlcnNNYXAgPSBTeW1ib2woJ2hlYWRlcnMgbWFwJylcbmNvbnN0IGtIZWFkZXJzU29ydGVkTWFwID0gU3ltYm9sKCdoZWFkZXJzIG1hcCBzb3J0ZWQnKVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlXG4gKi9cbmZ1bmN0aW9uIGlzSFRUUFdoaXRlU3BhY2VDaGFyQ29kZSAoY29kZSkge1xuICByZXR1cm4gY29kZSA9PT0gMHgwMGEgfHwgY29kZSA9PT0gMHgwMGQgfHwgY29kZSA9PT0gMHgwMDkgfHwgY29kZSA9PT0gMHgwMjBcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWhlYWRlci12YWx1ZS1ub3JtYWxpemVcbiAqIEBwYXJhbSB7c3RyaW5nfSBwb3RlbnRpYWxWYWx1ZVxuICovXG5mdW5jdGlvbiBoZWFkZXJWYWx1ZU5vcm1hbGl6ZSAocG90ZW50aWFsVmFsdWUpIHtcbiAgLy8gIFRvIG5vcm1hbGl6ZSBhIGJ5dGUgc2VxdWVuY2UgcG90ZW50aWFsVmFsdWUsIHJlbW92ZVxuICAvLyAgYW55IGxlYWRpbmcgYW5kIHRyYWlsaW5nIEhUVFAgd2hpdGVzcGFjZSBieXRlcyBmcm9tXG4gIC8vICBwb3RlbnRpYWxWYWx1ZS5cbiAgbGV0IGkgPSAwOyBsZXQgaiA9IHBvdGVudGlhbFZhbHVlLmxlbmd0aFxuXG4gIHdoaWxlIChqID4gaSAmJiBpc0hUVFBXaGl0ZVNwYWNlQ2hhckNvZGUocG90ZW50aWFsVmFsdWUuY2hhckNvZGVBdChqIC0gMSkpKSAtLWpcbiAgd2hpbGUgKGogPiBpICYmIGlzSFRUUFdoaXRlU3BhY2VDaGFyQ29kZShwb3RlbnRpYWxWYWx1ZS5jaGFyQ29kZUF0KGkpKSkgKytpXG5cbiAgcmV0dXJuIGkgPT09IDAgJiYgaiA9PT0gcG90ZW50aWFsVmFsdWUubGVuZ3RoID8gcG90ZW50aWFsVmFsdWUgOiBwb3RlbnRpYWxWYWx1ZS5zdWJzdHJpbmcoaSwgailcbn1cblxuZnVuY3Rpb24gZmlsbCAoaGVhZGVycywgb2JqZWN0KSB7XG4gIC8vIFRvIGZpbGwgYSBIZWFkZXJzIG9iamVjdCBoZWFkZXJzIHdpdGggYSBnaXZlbiBvYmplY3Qgb2JqZWN0LCBydW4gdGhlc2Ugc3RlcHM6XG5cbiAgLy8gMS4gSWYgb2JqZWN0IGlzIGEgc2VxdWVuY2UsIHRoZW4gZm9yIGVhY2ggaGVhZGVyIGluIG9iamVjdDpcbiAgLy8gTm90ZTogd2ViaWRsIGNvbnZlcnNpb24gdG8gYXJyYXkgaGFzIGFscmVhZHkgYmVlbiBkb25lLlxuICBpZiAoQXJyYXkuaXNBcnJheShvYmplY3QpKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvYmplY3QubGVuZ3RoOyArK2kpIHtcbiAgICAgIGNvbnN0IGhlYWRlciA9IG9iamVjdFtpXVxuICAgICAgLy8gMS4gSWYgaGVhZGVyIGRvZXMgbm90IGNvbnRhaW4gZXhhY3RseSB0d28gaXRlbXMsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICBpZiAoaGVhZGVyLmxlbmd0aCAhPT0gMikge1xuICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgaGVhZGVyOiAnSGVhZGVycyBjb25zdHJ1Y3RvcicsXG4gICAgICAgICAgbWVzc2FnZTogYGV4cGVjdGVkIG5hbWUvdmFsdWUgcGFpciB0byBiZSBsZW5ndGggMiwgZm91bmQgJHtoZWFkZXIubGVuZ3RofS5gXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIEFwcGVuZCAoaGVhZGVy4oCZcyBmaXJzdCBpdGVtLCBoZWFkZXLigJlzIHNlY29uZCBpdGVtKSB0byBoZWFkZXJzLlxuICAgICAgYXBwZW5kSGVhZGVyKGhlYWRlcnMsIGhlYWRlclswXSwgaGVhZGVyWzFdKVxuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwpIHtcbiAgICAvLyBOb3RlOiBudWxsIHNob3VsZCB0aHJvd1xuXG4gICAgLy8gMi4gT3RoZXJ3aXNlLCBvYmplY3QgaXMgYSByZWNvcmQsIHRoZW4gZm9yIGVhY2gga2V5IOKGkiB2YWx1ZSBpbiBvYmplY3QsXG4gICAgLy8gICAgYXBwZW5kIChrZXksIHZhbHVlKSB0byBoZWFkZXJzXG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdClcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgIGFwcGVuZEhlYWRlcihoZWFkZXJzLCBrZXlzW2ldLCBvYmplY3Rba2V5c1tpXV0pXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuY29udmVyc2lvbkZhaWxlZCh7XG4gICAgICBwcmVmaXg6ICdIZWFkZXJzIGNvbnN0cnVjdG9yJyxcbiAgICAgIGFyZ3VtZW50OiAnQXJndW1lbnQgMScsXG4gICAgICB0eXBlczogWydzZXF1ZW5jZTxzZXF1ZW5jZTxCeXRlU3RyaW5nPj4nLCAncmVjb3JkPEJ5dGVTdHJpbmcsIEJ5dGVTdHJpbmc+J11cbiAgICB9KVxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXJzLWFwcGVuZFxuICovXG5mdW5jdGlvbiBhcHBlbmRIZWFkZXIgKGhlYWRlcnMsIG5hbWUsIHZhbHVlKSB7XG4gIC8vIDEuIE5vcm1hbGl6ZSB2YWx1ZS5cbiAgdmFsdWUgPSBoZWFkZXJWYWx1ZU5vcm1hbGl6ZSh2YWx1ZSlcblxuICAvLyAyLiBJZiBuYW1lIGlzIG5vdCBhIGhlYWRlciBuYW1lIG9yIHZhbHVlIGlzIG5vdCBhXG4gIC8vICAgIGhlYWRlciB2YWx1ZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKCFpc1ZhbGlkSGVhZGVyTmFtZShuYW1lKSkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuaW52YWxpZEFyZ3VtZW50KHtcbiAgICAgIHByZWZpeDogJ0hlYWRlcnMuYXBwZW5kJyxcbiAgICAgIHZhbHVlOiBuYW1lLFxuICAgICAgdHlwZTogJ2hlYWRlciBuYW1lJ1xuICAgIH0pXG4gIH0gZWxzZSBpZiAoIWlzVmFsaWRIZWFkZXJWYWx1ZSh2YWx1ZSkpIHtcbiAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmludmFsaWRBcmd1bWVudCh7XG4gICAgICBwcmVmaXg6ICdIZWFkZXJzLmFwcGVuZCcsXG4gICAgICB2YWx1ZSxcbiAgICAgIHR5cGU6ICdoZWFkZXIgdmFsdWUnXG4gICAgfSlcbiAgfVxuXG4gIC8vIDMuIElmIGhlYWRlcnPigJlzIGd1YXJkIGlzIFwiaW1tdXRhYmxlXCIsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIC8vIDQuIE90aGVyd2lzZSwgaWYgaGVhZGVyc+KAmXMgZ3VhcmQgaXMgXCJyZXF1ZXN0XCIgYW5kIG5hbWUgaXMgYVxuICAvLyAgICBmb3JiaWRkZW4gaGVhZGVyIG5hbWUsIHJldHVybi5cbiAgLy8gTm90ZTogdW5kaWNpIGRvZXMgbm90IGltcGxlbWVudCBmb3JiaWRkZW4gaGVhZGVyIG5hbWVzXG4gIGlmIChoZWFkZXJzW2tHdWFyZF0gPT09ICdpbW11dGFibGUnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW1tdXRhYmxlJylcbiAgfSBlbHNlIGlmIChoZWFkZXJzW2tHdWFyZF0gPT09ICdyZXF1ZXN0LW5vLWNvcnMnKSB7XG4gICAgLy8gNS4gT3RoZXJ3aXNlLCBpZiBoZWFkZXJz4oCZcyBndWFyZCBpcyBcInJlcXVlc3Qtbm8tY29yc1wiOlxuICAgIC8vIFRPRE9cbiAgfVxuXG4gIC8vIDYuIE90aGVyd2lzZSwgaWYgaGVhZGVyc+KAmXMgZ3VhcmQgaXMgXCJyZXNwb25zZVwiIGFuZCBuYW1lIGlzIGFcbiAgLy8gICAgZm9yYmlkZGVuIHJlc3BvbnNlLWhlYWRlciBuYW1lLCByZXR1cm4uXG5cbiAgLy8gNy4gQXBwZW5kIChuYW1lLCB2YWx1ZSkgdG8gaGVhZGVyc+KAmXMgaGVhZGVyIGxpc3QuXG4gIHJldHVybiBoZWFkZXJzW2tIZWFkZXJzTGlzdF0uYXBwZW5kKG5hbWUsIHZhbHVlKVxuXG4gIC8vIDguIElmIGhlYWRlcnPigJlzIGd1YXJkIGlzIFwicmVxdWVzdC1uby1jb3JzXCIsIHRoZW4gcmVtb3ZlXG4gIC8vICAgIHByaXZpbGVnZWQgbm8tQ09SUyByZXF1ZXN0IGhlYWRlcnMgZnJvbSBoZWFkZXJzXG59XG5cbmNsYXNzIEhlYWRlcnNMaXN0IHtcbiAgLyoqIEB0eXBlIHtbc3RyaW5nLCBzdHJpbmddW118bnVsbH0gKi9cbiAgY29va2llcyA9IG51bGxcblxuICBjb25zdHJ1Y3RvciAoaW5pdCkge1xuICAgIGlmIChpbml0IGluc3RhbmNlb2YgSGVhZGVyc0xpc3QpIHtcbiAgICAgIHRoaXNba0hlYWRlcnNNYXBdID0gbmV3IE1hcChpbml0W2tIZWFkZXJzTWFwXSlcbiAgICAgIHRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdID0gaW5pdFtrSGVhZGVyc1NvcnRlZE1hcF1cbiAgICAgIHRoaXMuY29va2llcyA9IGluaXQuY29va2llcyA9PT0gbnVsbCA/IG51bGwgOiBbLi4uaW5pdC5jb29raWVzXVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tIZWFkZXJzTWFwXSA9IG5ldyBNYXAoaW5pdClcbiAgICAgIHRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNoZWFkZXItbGlzdC1jb250YWluc1xuICBjb250YWlucyAobmFtZSkge1xuICAgIC8vIEEgaGVhZGVyIGxpc3QgbGlzdCBjb250YWlucyBhIGhlYWRlciBuYW1lIG5hbWUgaWYgbGlzdFxuICAgIC8vIGNvbnRhaW5zIGEgaGVhZGVyIHdob3NlIG5hbWUgaXMgYSBieXRlLWNhc2UtaW5zZW5zaXRpdmVcbiAgICAvLyBtYXRjaCBmb3IgbmFtZS5cbiAgICBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpXG5cbiAgICByZXR1cm4gdGhpc1trSGVhZGVyc01hcF0uaGFzKG5hbWUpXG4gIH1cblxuICBjbGVhciAoKSB7XG4gICAgdGhpc1trSGVhZGVyc01hcF0uY2xlYXIoKVxuICAgIHRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdID0gbnVsbFxuICAgIHRoaXMuY29va2llcyA9IG51bGxcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWhlYWRlci1saXN0LWFwcGVuZFxuICBhcHBlbmQgKG5hbWUsIHZhbHVlKSB7XG4gICAgdGhpc1trSGVhZGVyc1NvcnRlZE1hcF0gPSBudWxsXG5cbiAgICAvLyAxLiBJZiBsaXN0IGNvbnRhaW5zIG5hbWUsIHRoZW4gc2V0IG5hbWUgdG8gdGhlIGZpcnN0IHN1Y2hcbiAgICAvLyAgICBoZWFkZXLigJlzIG5hbWUuXG4gICAgY29uc3QgbG93ZXJjYXNlTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKVxuICAgIGNvbnN0IGV4aXN0cyA9IHRoaXNba0hlYWRlcnNNYXBdLmdldChsb3dlcmNhc2VOYW1lKVxuXG4gICAgLy8gMi4gQXBwZW5kIChuYW1lLCB2YWx1ZSkgdG8gbGlzdC5cbiAgICBpZiAoZXhpc3RzKSB7XG4gICAgICBjb25zdCBkZWxpbWl0ZXIgPSBsb3dlcmNhc2VOYW1lID09PSAnY29va2llJyA/ICc7ICcgOiAnLCAnXG4gICAgICB0aGlzW2tIZWFkZXJzTWFwXS5zZXQobG93ZXJjYXNlTmFtZSwge1xuICAgICAgICBuYW1lOiBleGlzdHMubmFtZSxcbiAgICAgICAgdmFsdWU6IGAke2V4aXN0cy52YWx1ZX0ke2RlbGltaXRlcn0ke3ZhbHVlfWBcbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNba0hlYWRlcnNNYXBdLnNldChsb3dlcmNhc2VOYW1lLCB7IG5hbWUsIHZhbHVlIH0pXG4gICAgfVxuXG4gICAgaWYgKGxvd2VyY2FzZU5hbWUgPT09ICdzZXQtY29va2llJykge1xuICAgICAgdGhpcy5jb29raWVzID8/PSBbXVxuICAgICAgdGhpcy5jb29raWVzLnB1c2godmFsdWUpXG4gICAgfVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtaGVhZGVyLWxpc3Qtc2V0XG4gIHNldCAobmFtZSwgdmFsdWUpIHtcbiAgICB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXSA9IG51bGxcbiAgICBjb25zdCBsb3dlcmNhc2VOYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpXG5cbiAgICBpZiAobG93ZXJjYXNlTmFtZSA9PT0gJ3NldC1jb29raWUnKSB7XG4gICAgICB0aGlzLmNvb2tpZXMgPSBbdmFsdWVdXG4gICAgfVxuXG4gICAgLy8gMS4gSWYgbGlzdCBjb250YWlucyBuYW1lLCB0aGVuIHNldCB0aGUgdmFsdWUgb2ZcbiAgICAvLyAgICB0aGUgZmlyc3Qgc3VjaCBoZWFkZXIgdG8gdmFsdWUgYW5kIHJlbW92ZSB0aGVcbiAgICAvLyAgICBvdGhlcnMuXG4gICAgLy8gMi4gT3RoZXJ3aXNlLCBhcHBlbmQgaGVhZGVyIChuYW1lLCB2YWx1ZSkgdG8gbGlzdC5cbiAgICB0aGlzW2tIZWFkZXJzTWFwXS5zZXQobG93ZXJjYXNlTmFtZSwgeyBuYW1lLCB2YWx1ZSB9KVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtaGVhZGVyLWxpc3QtZGVsZXRlXG4gIGRlbGV0ZSAobmFtZSkge1xuICAgIHRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdID0gbnVsbFxuXG4gICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKVxuXG4gICAgaWYgKG5hbWUgPT09ICdzZXQtY29va2llJykge1xuICAgICAgdGhpcy5jb29raWVzID0gbnVsbFxuICAgIH1cblxuICAgIHRoaXNba0hlYWRlcnNNYXBdLmRlbGV0ZShuYW1lKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtaGVhZGVyLWxpc3QtZ2V0XG4gIGdldCAobmFtZSkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpc1trSGVhZGVyc01hcF0uZ2V0KG5hbWUudG9Mb3dlckNhc2UoKSlcblxuICAgIC8vIDEuIElmIGxpc3QgZG9lcyBub3QgY29udGFpbiBuYW1lLCB0aGVuIHJldHVybiBudWxsLlxuICAgIC8vIDIuIFJldHVybiB0aGUgdmFsdWVzIG9mIGFsbCBoZWFkZXJzIGluIGxpc3Qgd2hvc2UgbmFtZVxuICAgIC8vICAgIGlzIGEgYnl0ZS1jYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvciBuYW1lLFxuICAgIC8vICAgIHNlcGFyYXRlZCBmcm9tIGVhY2ggb3RoZXIgYnkgMHgyQyAweDIwLCBpbiBvcmRlci5cbiAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/IG51bGwgOiB2YWx1ZS52YWx1ZVxuICB9XG5cbiAgKiBbU3ltYm9sLml0ZXJhdG9yXSAoKSB7XG4gICAgLy8gdXNlIHRoZSBsb3dlcmNhc2VkIG5hbWVcbiAgICBmb3IgKGNvbnN0IFtuYW1lLCB7IHZhbHVlIH1dIG9mIHRoaXNba0hlYWRlcnNNYXBdKSB7XG4gICAgICB5aWVsZCBbbmFtZSwgdmFsdWVdXG4gICAgfVxuICB9XG5cbiAgZ2V0IGVudHJpZXMgKCkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB7fVxuXG4gICAgaWYgKHRoaXNba0hlYWRlcnNNYXBdLnNpemUpIHtcbiAgICAgIGZvciAoY29uc3QgeyBuYW1lLCB2YWx1ZSB9IG9mIHRoaXNba0hlYWRlcnNNYXBdLnZhbHVlcygpKSB7XG4gICAgICAgIGhlYWRlcnNbbmFtZV0gPSB2YWx1ZVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBoZWFkZXJzXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2hlYWRlcnMtY2xhc3NcbmNsYXNzIEhlYWRlcnMge1xuICBjb25zdHJ1Y3RvciAoaW5pdCA9IHVuZGVmaW5lZCkge1xuICAgIGlmIChpbml0ID09PSBrQ29uc3RydWN0KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdGhpc1trSGVhZGVyc0xpc3RdID0gbmV3IEhlYWRlcnNMaXN0KClcblxuICAgIC8vIFRoZSBuZXcgSGVhZGVycyhpbml0KSBjb25zdHJ1Y3RvciBzdGVwcyBhcmU6XG5cbiAgICAvLyAxLiBTZXQgdGhpc+KAmXMgZ3VhcmQgdG8gXCJub25lXCIuXG4gICAgdGhpc1trR3VhcmRdID0gJ25vbmUnXG5cbiAgICAvLyAyLiBJZiBpbml0IGlzIGdpdmVuLCB0aGVuIGZpbGwgdGhpcyB3aXRoIGluaXQuXG4gICAgaWYgKGluaXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaW5pdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLkhlYWRlcnNJbml0KGluaXQpXG4gICAgICBmaWxsKHRoaXMsIGluaXQpXG4gICAgfVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1oZWFkZXJzLWFwcGVuZFxuICBhcHBlbmQgKG5hbWUsIHZhbHVlKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMiwgeyBoZWFkZXI6ICdIZWFkZXJzLmFwcGVuZCcgfSlcblxuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nKG5hbWUpXG4gICAgdmFsdWUgPSB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nKHZhbHVlKVxuXG4gICAgcmV0dXJuIGFwcGVuZEhlYWRlcih0aGlzLCBuYW1lLCB2YWx1ZSlcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20taGVhZGVycy1kZWxldGVcbiAgZGVsZXRlIChuYW1lKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdIZWFkZXJzLmRlbGV0ZScgfSlcblxuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nKG5hbWUpXG5cbiAgICAvLyAxLiBJZiBuYW1lIGlzIG5vdCBhIGhlYWRlciBuYW1lLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICghaXNWYWxpZEhlYWRlck5hbWUobmFtZSkpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuaW52YWxpZEFyZ3VtZW50KHtcbiAgICAgICAgcHJlZml4OiAnSGVhZGVycy5kZWxldGUnLFxuICAgICAgICB2YWx1ZTogbmFtZSxcbiAgICAgICAgdHlwZTogJ2hlYWRlciBuYW1lJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAyLiBJZiB0aGlz4oCZcyBndWFyZCBpcyBcImltbXV0YWJsZVwiLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIC8vIDMuIE90aGVyd2lzZSwgaWYgdGhpc+KAmXMgZ3VhcmQgaXMgXCJyZXF1ZXN0XCIgYW5kIG5hbWUgaXMgYVxuICAgIC8vICAgIGZvcmJpZGRlbiBoZWFkZXIgbmFtZSwgcmV0dXJuLlxuICAgIC8vIDQuIE90aGVyd2lzZSwgaWYgdGhpc+KAmXMgZ3VhcmQgaXMgXCJyZXF1ZXN0LW5vLWNvcnNcIiwgbmFtZVxuICAgIC8vICAgIGlzIG5vdCBhIG5vLUNPUlMtc2FmZWxpc3RlZCByZXF1ZXN0LWhlYWRlciBuYW1lLCBhbmRcbiAgICAvLyAgICBuYW1lIGlzIG5vdCBhIHByaXZpbGVnZWQgbm8tQ09SUyByZXF1ZXN0LWhlYWRlciBuYW1lLFxuICAgIC8vICAgIHJldHVybi5cbiAgICAvLyA1LiBPdGhlcndpc2UsIGlmIHRoaXPigJlzIGd1YXJkIGlzIFwicmVzcG9uc2VcIiBhbmQgbmFtZSBpc1xuICAgIC8vICAgIGEgZm9yYmlkZGVuIHJlc3BvbnNlLWhlYWRlciBuYW1lLCByZXR1cm4uXG4gICAgLy8gTm90ZTogdW5kaWNpIGRvZXMgbm90IGltcGxlbWVudCBmb3JiaWRkZW4gaGVhZGVyIG5hbWVzXG4gICAgaWYgKHRoaXNba0d1YXJkXSA9PT0gJ2ltbXV0YWJsZScpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ltbXV0YWJsZScpXG4gICAgfSBlbHNlIGlmICh0aGlzW2tHdWFyZF0gPT09ICdyZXF1ZXN0LW5vLWNvcnMnKSB7XG4gICAgICAvLyBUT0RPXG4gICAgfVxuXG4gICAgLy8gNi4gSWYgdGhpc+KAmXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBuYW1lLCB0aGVuXG4gICAgLy8gICAgcmV0dXJuLlxuICAgIGlmICghdGhpc1trSGVhZGVyc0xpc3RdLmNvbnRhaW5zKG5hbWUpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyA3LiBEZWxldGUgbmFtZSBmcm9tIHRoaXPigJlzIGhlYWRlciBsaXN0LlxuICAgIC8vIDguIElmIHRoaXPigJlzIGd1YXJkIGlzIFwicmVxdWVzdC1uby1jb3JzXCIsIHRoZW4gcmVtb3ZlXG4gICAgLy8gICAgcHJpdmlsZWdlZCBuby1DT1JTIHJlcXVlc3QgaGVhZGVycyBmcm9tIHRoaXMuXG4gICAgdGhpc1trSGVhZGVyc0xpc3RdLmRlbGV0ZShuYW1lKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1oZWFkZXJzLWdldFxuICBnZXQgKG5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBIZWFkZXJzKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0hlYWRlcnMuZ2V0JyB9KVxuXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcobmFtZSlcblxuICAgIC8vIDEuIElmIG5hbWUgaXMgbm90IGEgaGVhZGVyIG5hbWUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKCFpc1ZhbGlkSGVhZGVyTmFtZShuYW1lKSkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5pbnZhbGlkQXJndW1lbnQoe1xuICAgICAgICBwcmVmaXg6ICdIZWFkZXJzLmdldCcsXG4gICAgICAgIHZhbHVlOiBuYW1lLFxuICAgICAgICB0eXBlOiAnaGVhZGVyIG5hbWUnXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDIuIFJldHVybiB0aGUgcmVzdWx0IG9mIGdldHRpbmcgbmFtZSBmcm9tIHRoaXPigJlzIGhlYWRlclxuICAgIC8vICAgIGxpc3QuXG4gICAgcmV0dXJuIHRoaXNba0hlYWRlcnNMaXN0XS5nZXQobmFtZSlcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20taGVhZGVycy1oYXNcbiAgaGFzIChuYW1lKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdIZWFkZXJzLmhhcycgfSlcblxuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nKG5hbWUpXG5cbiAgICAvLyAxLiBJZiBuYW1lIGlzIG5vdCBhIGhlYWRlciBuYW1lLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICghaXNWYWxpZEhlYWRlck5hbWUobmFtZSkpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuaW52YWxpZEFyZ3VtZW50KHtcbiAgICAgICAgcHJlZml4OiAnSGVhZGVycy5oYXMnLFxuICAgICAgICB2YWx1ZTogbmFtZSxcbiAgICAgICAgdHlwZTogJ2hlYWRlciBuYW1lJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAyLiBSZXR1cm4gdHJ1ZSBpZiB0aGlz4oCZcyBoZWFkZXIgbGlzdCBjb250YWlucyBuYW1lO1xuICAgIC8vICAgIG90aGVyd2lzZSBmYWxzZS5cbiAgICByZXR1cm4gdGhpc1trSGVhZGVyc0xpc3RdLmNvbnRhaW5zKG5hbWUpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWhlYWRlcnMtc2V0XG4gIHNldCAobmFtZSwgdmFsdWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBIZWFkZXJzKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAyLCB7IGhlYWRlcjogJ0hlYWRlcnMuc2V0JyB9KVxuXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcobmFtZSlcbiAgICB2YWx1ZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcodmFsdWUpXG5cbiAgICAvLyAxLiBOb3JtYWxpemUgdmFsdWUuXG4gICAgdmFsdWUgPSBoZWFkZXJWYWx1ZU5vcm1hbGl6ZSh2YWx1ZSlcblxuICAgIC8vIDIuIElmIG5hbWUgaXMgbm90IGEgaGVhZGVyIG5hbWUgb3IgdmFsdWUgaXMgbm90IGFcbiAgICAvLyAgICBoZWFkZXIgdmFsdWUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKCFpc1ZhbGlkSGVhZGVyTmFtZShuYW1lKSkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5pbnZhbGlkQXJndW1lbnQoe1xuICAgICAgICBwcmVmaXg6ICdIZWFkZXJzLnNldCcsXG4gICAgICAgIHZhbHVlOiBuYW1lLFxuICAgICAgICB0eXBlOiAnaGVhZGVyIG5hbWUnXG4gICAgICB9KVxuICAgIH0gZWxzZSBpZiAoIWlzVmFsaWRIZWFkZXJWYWx1ZSh2YWx1ZSkpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuaW52YWxpZEFyZ3VtZW50KHtcbiAgICAgICAgcHJlZml4OiAnSGVhZGVycy5zZXQnLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgdHlwZTogJ2hlYWRlciB2YWx1ZSdcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMy4gSWYgdGhpc+KAmXMgZ3VhcmQgaXMgXCJpbW11dGFibGVcIiwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAvLyA0LiBPdGhlcndpc2UsIGlmIHRoaXPigJlzIGd1YXJkIGlzIFwicmVxdWVzdFwiIGFuZCBuYW1lIGlzIGFcbiAgICAvLyAgICBmb3JiaWRkZW4gaGVhZGVyIG5hbWUsIHJldHVybi5cbiAgICAvLyA1LiBPdGhlcndpc2UsIGlmIHRoaXPigJlzIGd1YXJkIGlzIFwicmVxdWVzdC1uby1jb3JzXCIgYW5kXG4gICAgLy8gICAgbmFtZS92YWx1ZSBpcyBub3QgYSBuby1DT1JTLXNhZmVsaXN0ZWQgcmVxdWVzdC1oZWFkZXIsXG4gICAgLy8gICAgcmV0dXJuLlxuICAgIC8vIDYuIE90aGVyd2lzZSwgaWYgdGhpc+KAmXMgZ3VhcmQgaXMgXCJyZXNwb25zZVwiIGFuZCBuYW1lIGlzIGFcbiAgICAvLyAgICBmb3JiaWRkZW4gcmVzcG9uc2UtaGVhZGVyIG5hbWUsIHJldHVybi5cbiAgICAvLyBOb3RlOiB1bmRpY2kgZG9lcyBub3QgaW1wbGVtZW50IGZvcmJpZGRlbiBoZWFkZXIgbmFtZXNcbiAgICBpZiAodGhpc1trR3VhcmRdID09PSAnaW1tdXRhYmxlJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW1tdXRhYmxlJylcbiAgICB9IGVsc2UgaWYgKHRoaXNba0d1YXJkXSA9PT0gJ3JlcXVlc3Qtbm8tY29ycycpIHtcbiAgICAgIC8vIFRPRE9cbiAgICB9XG5cbiAgICAvLyA3LiBTZXQgKG5hbWUsIHZhbHVlKSBpbiB0aGlz4oCZcyBoZWFkZXIgbGlzdC5cbiAgICAvLyA4LiBJZiB0aGlz4oCZcyBndWFyZCBpcyBcInJlcXVlc3Qtbm8tY29yc1wiLCB0aGVuIHJlbW92ZVxuICAgIC8vICAgIHByaXZpbGVnZWQgbm8tQ09SUyByZXF1ZXN0IGhlYWRlcnMgZnJvbSB0aGlzXG4gICAgdGhpc1trSGVhZGVyc0xpc3RdLnNldChuYW1lLCB2YWx1ZSlcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20taGVhZGVycy1nZXRzZXRjb29raWVcbiAgZ2V0U2V0Q29va2llICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBIZWFkZXJzKVxuXG4gICAgLy8gMS4gSWYgdGhpc+KAmXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgU2V0LUNvb2tpZWAsIHRoZW4gcmV0dXJuIMKrIMK7LlxuICAgIC8vIDIuIFJldHVybiB0aGUgdmFsdWVzIG9mIGFsbCBoZWFkZXJzIGluIHRoaXPigJlzIGhlYWRlciBsaXN0IHdob3NlIG5hbWUgaXNcbiAgICAvLyAgICBhIGJ5dGUtY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBmb3IgYFNldC1Db29raWVgLCBpbiBvcmRlci5cblxuICAgIGNvbnN0IGxpc3QgPSB0aGlzW2tIZWFkZXJzTGlzdF0uY29va2llc1xuXG4gICAgaWYgKGxpc3QpIHtcbiAgICAgIHJldHVybiBbLi4ubGlzdF1cbiAgICB9XG5cbiAgICByZXR1cm4gW11cbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWhlYWRlci1saXN0LXNvcnQtYW5kLWNvbWJpbmVcbiAgZ2V0IFtrSGVhZGVyc1NvcnRlZE1hcF0gKCkge1xuICAgIGlmICh0aGlzW2tIZWFkZXJzTGlzdF1ba0hlYWRlcnNTb3J0ZWRNYXBdKSB7XG4gICAgICByZXR1cm4gdGhpc1trSGVhZGVyc0xpc3RdW2tIZWFkZXJzU29ydGVkTWFwXVxuICAgIH1cblxuICAgIC8vIDEuIExldCBoZWFkZXJzIGJlIGFuIGVtcHR5IGxpc3Qgb2YgaGVhZGVycyB3aXRoIHRoZSBrZXkgYmVpbmcgdGhlIG5hbWVcbiAgICAvLyAgICBhbmQgdmFsdWUgdGhlIHZhbHVlLlxuICAgIGNvbnN0IGhlYWRlcnMgPSBbXVxuXG4gICAgLy8gMi4gTGV0IG5hbWVzIGJlIHRoZSByZXN1bHQgb2YgY29udmVydCBoZWFkZXIgbmFtZXMgdG8gYSBzb3J0ZWQtbG93ZXJjYXNlXG4gICAgLy8gICAgc2V0IHdpdGggYWxsIHRoZSBuYW1lcyBvZiB0aGUgaGVhZGVycyBpbiBsaXN0LlxuICAgIGNvbnN0IG5hbWVzID0gWy4uLnRoaXNba0hlYWRlcnNMaXN0XV0uc29ydCgoYSwgYikgPT4gYVswXSA8IGJbMF0gPyAtMSA6IDEpXG4gICAgY29uc3QgY29va2llcyA9IHRoaXNba0hlYWRlcnNMaXN0XS5jb29raWVzXG5cbiAgICAvLyAzLiBGb3IgZWFjaCBuYW1lIG9mIG5hbWVzOlxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgIGNvbnN0IFtuYW1lLCB2YWx1ZV0gPSBuYW1lc1tpXVxuICAgICAgLy8gMS4gSWYgbmFtZSBpcyBgc2V0LWNvb2tpZWAsIHRoZW46XG4gICAgICBpZiAobmFtZSA9PT0gJ3NldC1jb29raWUnKSB7XG4gICAgICAgIC8vIDEuIExldCB2YWx1ZXMgYmUgYSBsaXN0IG9mIGFsbCB2YWx1ZXMgb2YgaGVhZGVycyBpbiBsaXN0IHdob3NlIG5hbWVcbiAgICAgICAgLy8gICAgaXMgYSBieXRlLWNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yIG5hbWUsIGluIG9yZGVyLlxuXG4gICAgICAgIC8vIDIuIEZvciBlYWNoIHZhbHVlIG9mIHZhbHVlczpcbiAgICAgICAgLy8gMS4gQXBwZW5kIChuYW1lLCB2YWx1ZSkgdG8gaGVhZGVycy5cbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb29raWVzLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgaGVhZGVycy5wdXNoKFtuYW1lLCBjb29raWVzW2pdXSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gMi4gT3RoZXJ3aXNlOlxuXG4gICAgICAgIC8vIDEuIExldCB2YWx1ZSBiZSB0aGUgcmVzdWx0IG9mIGdldHRpbmcgbmFtZSBmcm9tIGxpc3QuXG5cbiAgICAgICAgLy8gMi4gQXNzZXJ0OiB2YWx1ZSBpcyBub24tbnVsbC5cbiAgICAgICAgYXNzZXJ0KHZhbHVlICE9PSBudWxsKVxuXG4gICAgICAgIC8vIDMuIEFwcGVuZCAobmFtZSwgdmFsdWUpIHRvIGhlYWRlcnMuXG4gICAgICAgIGhlYWRlcnMucHVzaChbbmFtZSwgdmFsdWVdKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXNba0hlYWRlcnNMaXN0XVtrSGVhZGVyc1NvcnRlZE1hcF0gPSBoZWFkZXJzXG5cbiAgICAvLyA0LiBSZXR1cm4gaGVhZGVycy5cbiAgICByZXR1cm4gaGVhZGVyc1xuICB9XG5cbiAga2V5cyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIGlmICh0aGlzW2tHdWFyZF0gPT09ICdpbW11dGFibGUnKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdXG4gICAgICByZXR1cm4gbWFrZUl0ZXJhdG9yKCgpID0+IHZhbHVlLCAnSGVhZGVycycsXG4gICAgICAgICdrZXknKVxuICAgIH1cblxuICAgIHJldHVybiBtYWtlSXRlcmF0b3IoXG4gICAgICAoKSA9PiBbLi4udGhpc1trSGVhZGVyc1NvcnRlZE1hcF0udmFsdWVzKCldLFxuICAgICAgJ0hlYWRlcnMnLFxuICAgICAgJ2tleSdcbiAgICApXG4gIH1cblxuICB2YWx1ZXMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICBpZiAodGhpc1trR3VhcmRdID09PSAnaW1tdXRhYmxlJykge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXVxuICAgICAgcmV0dXJuIG1ha2VJdGVyYXRvcigoKSA9PiB2YWx1ZSwgJ0hlYWRlcnMnLFxuICAgICAgICAndmFsdWUnKVxuICAgIH1cblxuICAgIHJldHVybiBtYWtlSXRlcmF0b3IoXG4gICAgICAoKSA9PiBbLi4udGhpc1trSGVhZGVyc1NvcnRlZE1hcF0udmFsdWVzKCldLFxuICAgICAgJ0hlYWRlcnMnLFxuICAgICAgJ3ZhbHVlJ1xuICAgIClcbiAgfVxuXG4gIGVudHJpZXMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICBpZiAodGhpc1trR3VhcmRdID09PSAnaW1tdXRhYmxlJykge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXVxuICAgICAgcmV0dXJuIG1ha2VJdGVyYXRvcigoKSA9PiB2YWx1ZSwgJ0hlYWRlcnMnLFxuICAgICAgICAna2V5K3ZhbHVlJylcbiAgICB9XG5cbiAgICByZXR1cm4gbWFrZUl0ZXJhdG9yKFxuICAgICAgKCkgPT4gWy4uLnRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdLnZhbHVlcygpXSxcbiAgICAgICdIZWFkZXJzJyxcbiAgICAgICdrZXkrdmFsdWUnXG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7KHZhbHVlOiBzdHJpbmcsIGtleTogc3RyaW5nLCBzZWxmOiBIZWFkZXJzKSA9PiB2b2lkfSBjYWxsYmFja0ZuXG4gICAqIEBwYXJhbSB7dW5rbm93bn0gdGhpc0FyZ1xuICAgKi9cbiAgZm9yRWFjaCAoY2FsbGJhY2tGbiwgdGhpc0FyZyA9IGdsb2JhbFRoaXMpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBIZWFkZXJzKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0hlYWRlcnMuZm9yRWFjaCcgfSlcblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2tGbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgXCJGYWlsZWQgdG8gZXhlY3V0ZSAnZm9yRWFjaCcgb24gJ0hlYWRlcnMnOiBwYXJhbWV0ZXIgMSBpcyBub3Qgb2YgdHlwZSAnRnVuY3Rpb24nLlwiXG4gICAgICApXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgdGhpcykge1xuICAgICAgY2FsbGJhY2tGbi5hcHBseSh0aGlzQXJnLCBbdmFsdWUsIGtleSwgdGhpc10pXG4gICAgfVxuICB9XG5cbiAgW1N5bWJvbC5mb3IoJ25vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tJyldICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBIZWFkZXJzKVxuXG4gICAgcmV0dXJuIHRoaXNba0hlYWRlcnNMaXN0XVxuICB9XG59XG5cbkhlYWRlcnMucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl0gPSBIZWFkZXJzLnByb3RvdHlwZS5lbnRyaWVzXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEhlYWRlcnMucHJvdG90eXBlLCB7XG4gIGFwcGVuZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZGVsZXRlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBnZXQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGhhczoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgc2V0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBnZXRTZXRDb29raWU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGtleXM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHZhbHVlczoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZW50cmllczoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZm9yRWFjaDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgW1N5bWJvbC5pdGVyYXRvcl06IHsgZW51bWVyYWJsZTogZmFsc2UgfSxcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0hlYWRlcnMnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9XG59KVxuXG53ZWJpZGwuY29udmVydGVycy5IZWFkZXJzSW5pdCA9IGZ1bmN0aW9uIChWKSB7XG4gIGlmICh3ZWJpZGwudXRpbC5UeXBlKFYpID09PSAnT2JqZWN0Jykge1xuICAgIGlmIChWW1N5bWJvbC5pdGVyYXRvcl0pIHtcbiAgICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8c2VxdWVuY2U8Qnl0ZVN0cmluZz4+J10oVilcbiAgICB9XG5cbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnNbJ3JlY29yZDxCeXRlU3RyaW5nLCBCeXRlU3RyaW5nPiddKFYpXG4gIH1cblxuICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmNvbnZlcnNpb25GYWlsZWQoe1xuICAgIHByZWZpeDogJ0hlYWRlcnMgY29uc3RydWN0b3InLFxuICAgIGFyZ3VtZW50OiAnQXJndW1lbnQgMScsXG4gICAgdHlwZXM6IFsnc2VxdWVuY2U8c2VxdWVuY2U8Qnl0ZVN0cmluZz4+JywgJ3JlY29yZDxCeXRlU3RyaW5nLCBCeXRlU3RyaW5nPiddXG4gIH0pXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBmaWxsLFxuICBIZWFkZXJzLFxuICBIZWFkZXJzTGlzdFxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBIZWFkZXJzLCBIZWFkZXJzTGlzdCwgZmlsbCB9ID0gcmVxdWlyZSgnLi9oZWFkZXJzJylcbmNvbnN0IHsgZXh0cmFjdEJvZHksIGNsb25lQm9keSwgbWl4aW5Cb2R5IH0gPSByZXF1aXJlKCcuL2JvZHknKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGtFbnVtZXJhYmxlUHJvcGVydHkgfSA9IHV0aWxcbmNvbnN0IHtcbiAgaXNWYWxpZFJlYXNvblBocmFzZSxcbiAgaXNDYW5jZWxsZWQsXG4gIGlzQWJvcnRlZCxcbiAgaXNCbG9iTGlrZSxcbiAgc2VyaWFsaXplSmF2YXNjcmlwdFZhbHVlVG9KU09OU3RyaW5nLFxuICBpc0Vycm9yTGlrZSxcbiAgaXNvbW9ycGhpY0VuY29kZVxufSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7XG4gIHJlZGlyZWN0U3RhdHVzU2V0LFxuICBudWxsQm9keVN0YXR1cyxcbiAgRE9NRXhjZXB0aW9uXG59ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3QgeyBrU3RhdGUsIGtIZWFkZXJzLCBrR3VhcmQsIGtSZWFsbSB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuL3dlYmlkbCcpXG5jb25zdCB7IEZvcm1EYXRhIH0gPSByZXF1aXJlKCcuL2Zvcm1kYXRhJylcbmNvbnN0IHsgZ2V0R2xvYmFsT3JpZ2luIH0gPSByZXF1aXJlKCcuL2dsb2JhbCcpXG5jb25zdCB7IFVSTFNlcmlhbGl6ZXIgfSA9IHJlcXVpcmUoJy4vZGF0YVVSTCcpXG5jb25zdCB7IGtIZWFkZXJzTGlzdCwga0NvbnN0cnVjdCB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7IHR5cGVzIH0gPSByZXF1aXJlKCd1dGlsJylcblxuY29uc3QgUmVhZGFibGVTdHJlYW0gPSBnbG9iYWxUaGlzLlJlYWRhYmxlU3RyZWFtIHx8IHJlcXVpcmUoJ3N0cmVhbS93ZWInKS5SZWFkYWJsZVN0cmVhbVxuY29uc3QgdGV4dEVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoJ3V0Zi04JylcblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3Jlc3BvbnNlLWNsYXNzXG5jbGFzcyBSZXNwb25zZSB7XG4gIC8vIENyZWF0ZXMgbmV0d29yayBlcnJvciBSZXNwb25zZS5cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICAvLyBUT0RPXG4gICAgY29uc3QgcmVsZXZhbnRSZWFsbSA9IHsgc2V0dGluZ3NPYmplY3Q6IHt9IH1cblxuICAgIC8vIFRoZSBzdGF0aWMgZXJyb3IoKSBtZXRob2Qgc3RlcHMgYXJlIHRvIHJldHVybiB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGFcbiAgICAvLyBSZXNwb25zZSBvYmplY3QsIGdpdmVuIGEgbmV3IG5ldHdvcmsgZXJyb3IsIFwiaW1tdXRhYmxlXCIsIGFuZCB0aGlz4oCZc1xuICAgIC8vIHJlbGV2YW50IFJlYWxtLlxuICAgIGNvbnN0IHJlc3BvbnNlT2JqZWN0ID0gbmV3IFJlc3BvbnNlKClcbiAgICByZXNwb25zZU9iamVjdFtrU3RhdGVdID0gbWFrZU5ldHdvcmtFcnJvcigpXG4gICAgcmVzcG9uc2VPYmplY3Rba1JlYWxtXSA9IHJlbGV2YW50UmVhbG1cbiAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba0hlYWRlcnNMaXN0XSA9IHJlc3BvbnNlT2JqZWN0W2tTdGF0ZV0uaGVhZGVyc0xpc3RcbiAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba0d1YXJkXSA9ICdpbW11dGFibGUnXG4gICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tSZWFsbV0gPSByZWxldmFudFJlYWxtXG4gICAgcmV0dXJuIHJlc3BvbnNlT2JqZWN0XG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLXJlc3BvbnNlLWpzb25cbiAgc3RhdGljIGpzb24gKGRhdGEsIGluaXQgPSB7fSkge1xuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdSZXNwb25zZS5qc29uJyB9KVxuXG4gICAgaWYgKGluaXQgIT09IG51bGwpIHtcbiAgICAgIGluaXQgPSB3ZWJpZGwuY29udmVydGVycy5SZXNwb25zZUluaXQoaW5pdClcbiAgICB9XG5cbiAgICAvLyAxLiBMZXQgYnl0ZXMgdGhlIHJlc3VsdCBvZiBydW5uaW5nIHNlcmlhbGl6ZSBhIEphdmFTY3JpcHQgdmFsdWUgdG8gSlNPTiBieXRlcyBvbiBkYXRhLlxuICAgIGNvbnN0IGJ5dGVzID0gdGV4dEVuY29kZXIuZW5jb2RlKFxuICAgICAgc2VyaWFsaXplSmF2YXNjcmlwdFZhbHVlVG9KU09OU3RyaW5nKGRhdGEpXG4gICAgKVxuXG4gICAgLy8gMi4gTGV0IGJvZHkgYmUgdGhlIHJlc3VsdCBvZiBleHRyYWN0aW5nIGJ5dGVzLlxuICAgIGNvbnN0IGJvZHkgPSBleHRyYWN0Qm9keShieXRlcylcblxuICAgIC8vIDMuIExldCByZXNwb25zZU9iamVjdCBiZSB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEgUmVzcG9uc2Ugb2JqZWN0LCBnaXZlbiBhIG5ldyByZXNwb25zZSxcbiAgICAvLyAgICBcInJlc3BvbnNlXCIsIGFuZCB0aGlz4oCZcyByZWxldmFudCBSZWFsbS5cbiAgICBjb25zdCByZWxldmFudFJlYWxtID0geyBzZXR0aW5nc09iamVjdDoge30gfVxuICAgIGNvbnN0IHJlc3BvbnNlT2JqZWN0ID0gbmV3IFJlc3BvbnNlKClcbiAgICByZXNwb25zZU9iamVjdFtrUmVhbG1dID0gcmVsZXZhbnRSZWFsbVxuICAgIHJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrR3VhcmRdID0gJ3Jlc3BvbnNlJ1xuICAgIHJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrUmVhbG1dID0gcmVsZXZhbnRSZWFsbVxuXG4gICAgLy8gNC4gUGVyZm9ybSBpbml0aWFsaXplIGEgcmVzcG9uc2UgZ2l2ZW4gcmVzcG9uc2VPYmplY3QsIGluaXQsIGFuZCAoYm9keSwgXCJhcHBsaWNhdGlvbi9qc29uXCIpLlxuICAgIGluaXRpYWxpemVSZXNwb25zZShyZXNwb25zZU9iamVjdCwgaW5pdCwgeyBib2R5OiBib2R5WzBdLCB0eXBlOiAnYXBwbGljYXRpb24vanNvbicgfSlcblxuICAgIC8vIDUuIFJldHVybiByZXNwb25zZU9iamVjdC5cbiAgICByZXR1cm4gcmVzcG9uc2VPYmplY3RcbiAgfVxuXG4gIC8vIENyZWF0ZXMgYSByZWRpcmVjdCBSZXNwb25zZSB0aGF0IHJlZGlyZWN0cyB0byB1cmwgd2l0aCBzdGF0dXMgc3RhdHVzLlxuICBzdGF0aWMgcmVkaXJlY3QgKHVybCwgc3RhdHVzID0gMzAyKSB7XG4gICAgY29uc3QgcmVsZXZhbnRSZWFsbSA9IHsgc2V0dGluZ3NPYmplY3Q6IHt9IH1cblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdSZXNwb25zZS5yZWRpcmVjdCcgfSlcblxuICAgIHVybCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyh1cmwpXG4gICAgc3RhdHVzID0gd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIHNob3J0J10oc3RhdHVzKVxuXG4gICAgLy8gMS4gTGV0IHBhcnNlZFVSTCBiZSB0aGUgcmVzdWx0IG9mIHBhcnNpbmcgdXJsIHdpdGggY3VycmVudCBzZXR0aW5nc1xuICAgIC8vIG9iamVjdOKAmXMgQVBJIGJhc2UgVVJMLlxuICAgIC8vIDIuIElmIHBhcnNlZFVSTCBpcyBmYWlsdXJlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIC8vIFRPRE86IGJhc2UtVVJMP1xuICAgIGxldCBwYXJzZWRVUkxcbiAgICB0cnkge1xuICAgICAgcGFyc2VkVVJMID0gbmV3IFVSTCh1cmwsIGdldEdsb2JhbE9yaWdpbigpKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhyb3cgT2JqZWN0LmFzc2lnbihuZXcgVHlwZUVycm9yKCdGYWlsZWQgdG8gcGFyc2UgVVJMIGZyb20gJyArIHVybCksIHtcbiAgICAgICAgY2F1c2U6IGVyclxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAzLiBJZiBzdGF0dXMgaXMgbm90IGEgcmVkaXJlY3Qgc3RhdHVzLCB0aGVuIHRocm93IGEgUmFuZ2VFcnJvci5cbiAgICBpZiAoIXJlZGlyZWN0U3RhdHVzU2V0LmhhcyhzdGF0dXMpKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCBzdGF0dXMgY29kZSAnICsgc3RhdHVzKVxuICAgIH1cblxuICAgIC8vIDQuIExldCByZXNwb25zZU9iamVjdCBiZSB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEgUmVzcG9uc2Ugb2JqZWN0LFxuICAgIC8vIGdpdmVuIGEgbmV3IHJlc3BvbnNlLCBcImltbXV0YWJsZVwiLCBhbmQgdGhpc+KAmXMgcmVsZXZhbnQgUmVhbG0uXG4gICAgY29uc3QgcmVzcG9uc2VPYmplY3QgPSBuZXcgUmVzcG9uc2UoKVxuICAgIHJlc3BvbnNlT2JqZWN0W2tSZWFsbV0gPSByZWxldmFudFJlYWxtXG4gICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tHdWFyZF0gPSAnaW1tdXRhYmxlJ1xuICAgIHJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrUmVhbG1dID0gcmVsZXZhbnRSZWFsbVxuXG4gICAgLy8gNS4gU2V0IHJlc3BvbnNlT2JqZWN04oCZcyByZXNwb25zZeKAmXMgc3RhdHVzIHRvIHN0YXR1cy5cbiAgICByZXNwb25zZU9iamVjdFtrU3RhdGVdLnN0YXR1cyA9IHN0YXR1c1xuXG4gICAgLy8gNi4gTGV0IHZhbHVlIGJlIHBhcnNlZFVSTCwgc2VyaWFsaXplZCBhbmQgaXNvbW9ycGhpYyBlbmNvZGVkLlxuICAgIGNvbnN0IHZhbHVlID0gaXNvbW9ycGhpY0VuY29kZShVUkxTZXJpYWxpemVyKHBhcnNlZFVSTCkpXG5cbiAgICAvLyA3LiBBcHBlbmQgYExvY2F0aW9uYC92YWx1ZSB0byByZXNwb25zZU9iamVjdOKAmXMgcmVzcG9uc2XigJlzIGhlYWRlciBsaXN0LlxuICAgIHJlc3BvbnNlT2JqZWN0W2tTdGF0ZV0uaGVhZGVyc0xpc3QuYXBwZW5kKCdsb2NhdGlvbicsIHZhbHVlKVxuXG4gICAgLy8gOC4gUmV0dXJuIHJlc3BvbnNlT2JqZWN0LlxuICAgIHJldHVybiByZXNwb25zZU9iamVjdFxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1yZXNwb25zZVxuICBjb25zdHJ1Y3RvciAoYm9keSA9IG51bGwsIGluaXQgPSB7fSkge1xuICAgIGlmIChib2R5ICE9PSBudWxsKSB7XG4gICAgICBib2R5ID0gd2ViaWRsLmNvbnZlcnRlcnMuQm9keUluaXQoYm9keSlcbiAgICB9XG5cbiAgICBpbml0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVzcG9uc2VJbml0KGluaXQpXG5cbiAgICAvLyBUT0RPXG4gICAgdGhpc1trUmVhbG1dID0geyBzZXR0aW5nc09iamVjdDoge30gfVxuXG4gICAgLy8gMS4gU2V0IHRoaXPigJlzIHJlc3BvbnNlIHRvIGEgbmV3IHJlc3BvbnNlLlxuICAgIHRoaXNba1N0YXRlXSA9IG1ha2VSZXNwb25zZSh7fSlcblxuICAgIC8vIDIuIFNldCB0aGlz4oCZcyBoZWFkZXJzIHRvIGEgbmV3IEhlYWRlcnMgb2JqZWN0IHdpdGggdGhpc+KAmXMgcmVsZXZhbnRcbiAgICAvLyBSZWFsbSwgd2hvc2UgaGVhZGVyIGxpc3QgaXMgdGhpc+KAmXMgcmVzcG9uc2XigJlzIGhlYWRlciBsaXN0IGFuZCBndWFyZFxuICAgIC8vIGlzIFwicmVzcG9uc2VcIi5cbiAgICB0aGlzW2tIZWFkZXJzXSA9IG5ldyBIZWFkZXJzKGtDb25zdHJ1Y3QpXG4gICAgdGhpc1trSGVhZGVyc11ba0d1YXJkXSA9ICdyZXNwb25zZSdcbiAgICB0aGlzW2tIZWFkZXJzXVtrSGVhZGVyc0xpc3RdID0gdGhpc1trU3RhdGVdLmhlYWRlcnNMaXN0XG4gICAgdGhpc1trSGVhZGVyc11ba1JlYWxtXSA9IHRoaXNba1JlYWxtXVxuXG4gICAgLy8gMy4gTGV0IGJvZHlXaXRoVHlwZSBiZSBudWxsLlxuICAgIGxldCBib2R5V2l0aFR5cGUgPSBudWxsXG5cbiAgICAvLyA0LiBJZiBib2R5IGlzIG5vbi1udWxsLCB0aGVuIHNldCBib2R5V2l0aFR5cGUgdG8gdGhlIHJlc3VsdCBvZiBleHRyYWN0aW5nIGJvZHkuXG4gICAgaWYgKGJvZHkgIT0gbnVsbCkge1xuICAgICAgY29uc3QgW2V4dHJhY3RlZEJvZHksIHR5cGVdID0gZXh0cmFjdEJvZHkoYm9keSlcbiAgICAgIGJvZHlXaXRoVHlwZSA9IHsgYm9keTogZXh0cmFjdGVkQm9keSwgdHlwZSB9XG4gICAgfVxuXG4gICAgLy8gNS4gUGVyZm9ybSBpbml0aWFsaXplIGEgcmVzcG9uc2UgZ2l2ZW4gdGhpcywgaW5pdCwgYW5kIGJvZHlXaXRoVHlwZS5cbiAgICBpbml0aWFsaXplUmVzcG9uc2UodGhpcywgaW5pdCwgYm9keVdpdGhUeXBlKVxuICB9XG5cbiAgLy8gUmV0dXJucyByZXNwb25zZeKAmXMgdHlwZSwgZS5nLiwgXCJjb3JzXCIuXG4gIGdldCB0eXBlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXNwb25zZSlcblxuICAgIC8vIFRoZSB0eXBlIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXPigJlzIHJlc3BvbnNl4oCZcyB0eXBlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0udHlwZVxuICB9XG5cbiAgLy8gUmV0dXJucyByZXNwb25zZeKAmXMgVVJMLCBpZiBpdCBoYXMgb25lOyBvdGhlcndpc2UgdGhlIGVtcHR5IHN0cmluZy5cbiAgZ2V0IHVybCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICBjb25zdCB1cmxMaXN0ID0gdGhpc1trU3RhdGVdLnVybExpc3RcblxuICAgIC8vIFRoZSB1cmwgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhlIGVtcHR5IHN0cmluZyBpZiB0aGlz4oCZc1xuICAgIC8vIHJlc3BvbnNl4oCZcyBVUkwgaXMgbnVsbDsgb3RoZXJ3aXNlIHRoaXPigJlzIHJlc3BvbnNl4oCZcyBVUkwsXG4gICAgLy8gc2VyaWFsaXplZCB3aXRoIGV4Y2x1ZGUgZnJhZ21lbnQgc2V0IHRvIHRydWUuXG4gICAgY29uc3QgdXJsID0gdXJsTGlzdFt1cmxMaXN0Lmxlbmd0aCAtIDFdID8/IG51bGxcblxuICAgIGlmICh1cmwgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cblxuICAgIHJldHVybiBVUkxTZXJpYWxpemVyKHVybCwgdHJ1ZSlcbiAgfVxuXG4gIC8vIFJldHVybnMgd2hldGhlciByZXNwb25zZSB3YXMgb2J0YWluZWQgdGhyb3VnaCBhIHJlZGlyZWN0LlxuICBnZXQgcmVkaXJlY3RlZCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICAvLyBUaGUgcmVkaXJlY3RlZCBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0cnVlIGlmIHRoaXPigJlzIHJlc3BvbnNl4oCZcyBVUkxcbiAgICAvLyBsaXN0IGhhcyBtb3JlIHRoYW4gb25lIGl0ZW07IG90aGVyd2lzZSBmYWxzZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnVybExpc3QubGVuZ3RoID4gMVxuICB9XG5cbiAgLy8gUmV0dXJucyByZXNwb25zZeKAmXMgc3RhdHVzLlxuICBnZXQgc3RhdHVzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXNwb25zZSlcblxuICAgIC8vIFRoZSBzdGF0dXMgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc+KAmXMgcmVzcG9uc2XigJlzIHN0YXR1cy5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnN0YXR1c1xuICB9XG5cbiAgLy8gUmV0dXJucyB3aGV0aGVyIHJlc3BvbnNl4oCZcyBzdGF0dXMgaXMgYW4gb2sgc3RhdHVzLlxuICBnZXQgb2sgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgLy8gVGhlIG9rIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRydWUgaWYgdGhpc+KAmXMgcmVzcG9uc2XigJlzIHN0YXR1cyBpcyBhblxuICAgIC8vIG9rIHN0YXR1czsgb3RoZXJ3aXNlIGZhbHNlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uc3RhdHVzID49IDIwMCAmJiB0aGlzW2tTdGF0ZV0uc3RhdHVzIDw9IDI5OVxuICB9XG5cbiAgLy8gUmV0dXJucyByZXNwb25zZeKAmXMgc3RhdHVzIG1lc3NhZ2UuXG4gIGdldCBzdGF0dXNUZXh0ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXNwb25zZSlcblxuICAgIC8vIFRoZSBzdGF0dXNUZXh0IGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXPigJlzIHJlc3BvbnNl4oCZcyBzdGF0dXNcbiAgICAvLyBtZXNzYWdlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uc3RhdHVzVGV4dFxuICB9XG5cbiAgLy8gUmV0dXJucyByZXNwb25zZeKAmXMgaGVhZGVycyBhcyBIZWFkZXJzLlxuICBnZXQgaGVhZGVycyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICAvLyBUaGUgaGVhZGVycyBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlz4oCZcyBoZWFkZXJzLlxuICAgIHJldHVybiB0aGlzW2tIZWFkZXJzXVxuICB9XG5cbiAgZ2V0IGJvZHkgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5ib2R5ID8gdGhpc1trU3RhdGVdLmJvZHkuc3RyZWFtIDogbnVsbFxuICB9XG5cbiAgZ2V0IGJvZHlVc2VkICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXNwb25zZSlcblxuICAgIHJldHVybiAhIXRoaXNba1N0YXRlXS5ib2R5ICYmIHV0aWwuaXNEaXN0dXJiZWQodGhpc1trU3RhdGVdLmJvZHkuc3RyZWFtKVxuICB9XG5cbiAgLy8gUmV0dXJucyBhIGNsb25lIG9mIHJlc3BvbnNlLlxuICBjbG9uZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICAvLyAxLiBJZiB0aGlzIGlzIHVudXNhYmxlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICh0aGlzLmJvZHlVc2VkIHx8ICh0aGlzLmJvZHkgJiYgdGhpcy5ib2R5LmxvY2tlZCkpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnUmVzcG9uc2UuY2xvbmUnLFxuICAgICAgICBtZXNzYWdlOiAnQm9keSBoYXMgYWxyZWFkeSBiZWVuIGNvbnN1bWVkLidcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gTGV0IGNsb25lZFJlc3BvbnNlIGJlIHRoZSByZXN1bHQgb2YgY2xvbmluZyB0aGlz4oCZcyByZXNwb25zZS5cbiAgICBjb25zdCBjbG9uZWRSZXNwb25zZSA9IGNsb25lUmVzcG9uc2UodGhpc1trU3RhdGVdKVxuXG4gICAgLy8gMy4gUmV0dXJuIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYSBSZXNwb25zZSBvYmplY3QsIGdpdmVuXG4gICAgLy8gY2xvbmVkUmVzcG9uc2UsIHRoaXPigJlzIGhlYWRlcnPigJlzIGd1YXJkLCBhbmQgdGhpc+KAmXMgcmVsZXZhbnQgUmVhbG0uXG4gICAgY29uc3QgY2xvbmVkUmVzcG9uc2VPYmplY3QgPSBuZXcgUmVzcG9uc2UoKVxuICAgIGNsb25lZFJlc3BvbnNlT2JqZWN0W2tTdGF0ZV0gPSBjbG9uZWRSZXNwb25zZVxuICAgIGNsb25lZFJlc3BvbnNlT2JqZWN0W2tSZWFsbV0gPSB0aGlzW2tSZWFsbV1cbiAgICBjbG9uZWRSZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba0hlYWRlcnNMaXN0XSA9IGNsb25lZFJlc3BvbnNlLmhlYWRlcnNMaXN0XG4gICAgY2xvbmVkUmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tHdWFyZF0gPSB0aGlzW2tIZWFkZXJzXVtrR3VhcmRdXG4gICAgY2xvbmVkUmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tSZWFsbV0gPSB0aGlzW2tIZWFkZXJzXVtrUmVhbG1dXG5cbiAgICByZXR1cm4gY2xvbmVkUmVzcG9uc2VPYmplY3RcbiAgfVxufVxuXG5taXhpbkJvZHkoUmVzcG9uc2UpXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFJlc3BvbnNlLnByb3RvdHlwZSwge1xuICB0eXBlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICB1cmw6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHN0YXR1czoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb2s6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlZGlyZWN0ZWQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHN0YXR1c1RleHQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGhlYWRlcnM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNsb25lOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBib2R5OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBib2R5VXNlZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ1Jlc3BvbnNlJyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfVxufSlcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUmVzcG9uc2UsIHtcbiAganNvbjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcmVkaXJlY3Q6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGVycm9yOiBrRW51bWVyYWJsZVByb3BlcnR5XG59KVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1yZXNwb25zZS1jbG9uZVxuZnVuY3Rpb24gY2xvbmVSZXNwb25zZSAocmVzcG9uc2UpIHtcbiAgLy8gVG8gY2xvbmUgYSByZXNwb25zZSByZXNwb25zZSwgcnVuIHRoZXNlIHN0ZXBzOlxuXG4gIC8vIDEuIElmIHJlc3BvbnNlIGlzIGEgZmlsdGVyZWQgcmVzcG9uc2UsIHRoZW4gcmV0dXJuIGEgbmV3IGlkZW50aWNhbFxuICAvLyBmaWx0ZXJlZCByZXNwb25zZSB3aG9zZSBpbnRlcm5hbCByZXNwb25zZSBpcyBhIGNsb25lIG9mIHJlc3BvbnNl4oCZc1xuICAvLyBpbnRlcm5hbCByZXNwb25zZS5cbiAgaWYgKHJlc3BvbnNlLmludGVybmFsUmVzcG9uc2UpIHtcbiAgICByZXR1cm4gZmlsdGVyUmVzcG9uc2UoXG4gICAgICBjbG9uZVJlc3BvbnNlKHJlc3BvbnNlLmludGVybmFsUmVzcG9uc2UpLFxuICAgICAgcmVzcG9uc2UudHlwZVxuICAgIClcbiAgfVxuXG4gIC8vIDIuIExldCBuZXdSZXNwb25zZSBiZSBhIGNvcHkgb2YgcmVzcG9uc2UsIGV4Y2VwdCBmb3IgaXRzIGJvZHkuXG4gIGNvbnN0IG5ld1Jlc3BvbnNlID0gbWFrZVJlc3BvbnNlKHsgLi4ucmVzcG9uc2UsIGJvZHk6IG51bGwgfSlcblxuICAvLyAzLiBJZiByZXNwb25zZeKAmXMgYm9keSBpcyBub24tbnVsbCwgdGhlbiBzZXQgbmV3UmVzcG9uc2XigJlzIGJvZHkgdG8gdGhlXG4gIC8vIHJlc3VsdCBvZiBjbG9uaW5nIHJlc3BvbnNl4oCZcyBib2R5LlxuICBpZiAocmVzcG9uc2UuYm9keSAhPSBudWxsKSB7XG4gICAgbmV3UmVzcG9uc2UuYm9keSA9IGNsb25lQm9keShyZXNwb25zZS5ib2R5KVxuICB9XG5cbiAgLy8gNC4gUmV0dXJuIG5ld1Jlc3BvbnNlLlxuICByZXR1cm4gbmV3UmVzcG9uc2Vcbn1cblxuZnVuY3Rpb24gbWFrZVJlc3BvbnNlIChpbml0KSB7XG4gIHJldHVybiB7XG4gICAgYWJvcnRlZDogZmFsc2UsXG4gICAgcmFuZ2VSZXF1ZXN0ZWQ6IGZhbHNlLFxuICAgIHRpbWluZ0FsbG93UGFzc2VkOiBmYWxzZSxcbiAgICByZXF1ZXN0SW5jbHVkZXNDcmVkZW50aWFsczogZmFsc2UsXG4gICAgdHlwZTogJ2RlZmF1bHQnLFxuICAgIHN0YXR1czogMjAwLFxuICAgIHRpbWluZ0luZm86IG51bGwsXG4gICAgY2FjaGVTdGF0ZTogJycsXG4gICAgc3RhdHVzVGV4dDogJycsXG4gICAgLi4uaW5pdCxcbiAgICBoZWFkZXJzTGlzdDogaW5pdC5oZWFkZXJzTGlzdFxuICAgICAgPyBuZXcgSGVhZGVyc0xpc3QoaW5pdC5oZWFkZXJzTGlzdClcbiAgICAgIDogbmV3IEhlYWRlcnNMaXN0KCksXG4gICAgdXJsTGlzdDogaW5pdC51cmxMaXN0ID8gWy4uLmluaXQudXJsTGlzdF0gOiBbXVxuICB9XG59XG5cbmZ1bmN0aW9uIG1ha2VOZXR3b3JrRXJyb3IgKHJlYXNvbikge1xuICBjb25zdCBpc0Vycm9yID0gaXNFcnJvckxpa2UocmVhc29uKVxuICByZXR1cm4gbWFrZVJlc3BvbnNlKHtcbiAgICB0eXBlOiAnZXJyb3InLFxuICAgIHN0YXR1czogMCxcbiAgICBlcnJvcjogaXNFcnJvclxuICAgICAgPyByZWFzb25cbiAgICAgIDogbmV3IEVycm9yKHJlYXNvbiA/IFN0cmluZyhyZWFzb24pIDogcmVhc29uKSxcbiAgICBhYm9ydGVkOiByZWFzb24gJiYgcmVhc29uLm5hbWUgPT09ICdBYm9ydEVycm9yJ1xuICB9KVxufVxuXG5mdW5jdGlvbiBtYWtlRmlsdGVyZWRSZXNwb25zZSAocmVzcG9uc2UsIHN0YXRlKSB7XG4gIHN0YXRlID0ge1xuICAgIGludGVybmFsUmVzcG9uc2U6IHJlc3BvbnNlLFxuICAgIC4uLnN0YXRlXG4gIH1cblxuICByZXR1cm4gbmV3IFByb3h5KHJlc3BvbnNlLCB7XG4gICAgZ2V0ICh0YXJnZXQsIHApIHtcbiAgICAgIHJldHVybiBwIGluIHN0YXRlID8gc3RhdGVbcF0gOiB0YXJnZXRbcF1cbiAgICB9LFxuICAgIHNldCAodGFyZ2V0LCBwLCB2YWx1ZSkge1xuICAgICAgYXNzZXJ0KCEocCBpbiBzdGF0ZSkpXG4gICAgICB0YXJnZXRbcF0gPSB2YWx1ZVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gIH0pXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWZpbHRlcmVkLXJlc3BvbnNlXG5mdW5jdGlvbiBmaWx0ZXJSZXNwb25zZSAocmVzcG9uc2UsIHR5cGUpIHtcbiAgLy8gU2V0IHJlc3BvbnNlIHRvIHRoZSBmb2xsb3dpbmcgZmlsdGVyZWQgcmVzcG9uc2Ugd2l0aCByZXNwb25zZSBhcyBpdHNcbiAgLy8gaW50ZXJuYWwgcmVzcG9uc2UsIGRlcGVuZGluZyBvbiByZXF1ZXN04oCZcyByZXNwb25zZSB0YWludGluZzpcbiAgaWYgKHR5cGUgPT09ICdiYXNpYycpIHtcbiAgICAvLyBBIGJhc2ljIGZpbHRlcmVkIHJlc3BvbnNlIGlzIGEgZmlsdGVyZWQgcmVzcG9uc2Ugd2hvc2UgdHlwZSBpcyBcImJhc2ljXCJcbiAgICAvLyBhbmQgaGVhZGVyIGxpc3QgZXhjbHVkZXMgYW55IGhlYWRlcnMgaW4gaW50ZXJuYWwgcmVzcG9uc2XigJlzIGhlYWRlciBsaXN0XG4gICAgLy8gd2hvc2UgbmFtZSBpcyBhIGZvcmJpZGRlbiByZXNwb25zZS1oZWFkZXIgbmFtZS5cblxuICAgIC8vIE5vdGU6IHVuZGljaSBkb2VzIG5vdCBpbXBsZW1lbnQgZm9yYmlkZGVuIHJlc3BvbnNlLWhlYWRlciBuYW1lc1xuICAgIHJldHVybiBtYWtlRmlsdGVyZWRSZXNwb25zZShyZXNwb25zZSwge1xuICAgICAgdHlwZTogJ2Jhc2ljJyxcbiAgICAgIGhlYWRlcnNMaXN0OiByZXNwb25zZS5oZWFkZXJzTGlzdFxuICAgIH0pXG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2NvcnMnKSB7XG4gICAgLy8gQSBDT1JTIGZpbHRlcmVkIHJlc3BvbnNlIGlzIGEgZmlsdGVyZWQgcmVzcG9uc2Ugd2hvc2UgdHlwZSBpcyBcImNvcnNcIlxuICAgIC8vIGFuZCBoZWFkZXIgbGlzdCBleGNsdWRlcyBhbnkgaGVhZGVycyBpbiBpbnRlcm5hbCByZXNwb25zZeKAmXMgaGVhZGVyXG4gICAgLy8gbGlzdCB3aG9zZSBuYW1lIGlzIG5vdCBhIENPUlMtc2FmZWxpc3RlZCByZXNwb25zZS1oZWFkZXIgbmFtZSwgZ2l2ZW5cbiAgICAvLyBpbnRlcm5hbCByZXNwb25zZeKAmXMgQ09SUy1leHBvc2VkIGhlYWRlci1uYW1lIGxpc3QuXG5cbiAgICAvLyBOb3RlOiB1bmRpY2kgZG9lcyBub3QgaW1wbGVtZW50IENPUlMtc2FmZWxpc3RlZCByZXNwb25zZS1oZWFkZXIgbmFtZXNcbiAgICByZXR1cm4gbWFrZUZpbHRlcmVkUmVzcG9uc2UocmVzcG9uc2UsIHtcbiAgICAgIHR5cGU6ICdjb3JzJyxcbiAgICAgIGhlYWRlcnNMaXN0OiByZXNwb25zZS5oZWFkZXJzTGlzdFxuICAgIH0pXG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ29wYXF1ZScpIHtcbiAgICAvLyBBbiBvcGFxdWUgZmlsdGVyZWQgcmVzcG9uc2UgaXMgYSBmaWx0ZXJlZCByZXNwb25zZSB3aG9zZSB0eXBlIGlzXG4gICAgLy8gXCJvcGFxdWVcIiwgVVJMIGxpc3QgaXMgdGhlIGVtcHR5IGxpc3QsIHN0YXR1cyBpcyAwLCBzdGF0dXMgbWVzc2FnZVxuICAgIC8vIGlzIHRoZSBlbXB0eSBieXRlIHNlcXVlbmNlLCBoZWFkZXIgbGlzdCBpcyBlbXB0eSwgYW5kIGJvZHkgaXMgbnVsbC5cblxuICAgIHJldHVybiBtYWtlRmlsdGVyZWRSZXNwb25zZShyZXNwb25zZSwge1xuICAgICAgdHlwZTogJ29wYXF1ZScsXG4gICAgICB1cmxMaXN0OiBPYmplY3QuZnJlZXplKFtdKSxcbiAgICAgIHN0YXR1czogMCxcbiAgICAgIHN0YXR1c1RleHQ6ICcnLFxuICAgICAgYm9keTogbnVsbFxuICAgIH0pXG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ29wYXF1ZXJlZGlyZWN0Jykge1xuICAgIC8vIEFuIG9wYXF1ZS1yZWRpcmVjdCBmaWx0ZXJlZCByZXNwb25zZSBpcyBhIGZpbHRlcmVkIHJlc3BvbnNlIHdob3NlIHR5cGVcbiAgICAvLyBpcyBcIm9wYXF1ZXJlZGlyZWN0XCIsIHN0YXR1cyBpcyAwLCBzdGF0dXMgbWVzc2FnZSBpcyB0aGUgZW1wdHkgYnl0ZVxuICAgIC8vIHNlcXVlbmNlLCBoZWFkZXIgbGlzdCBpcyBlbXB0eSwgYW5kIGJvZHkgaXMgbnVsbC5cblxuICAgIHJldHVybiBtYWtlRmlsdGVyZWRSZXNwb25zZShyZXNwb25zZSwge1xuICAgICAgdHlwZTogJ29wYXF1ZXJlZGlyZWN0JyxcbiAgICAgIHN0YXR1czogMCxcbiAgICAgIHN0YXR1c1RleHQ6ICcnLFxuICAgICAgaGVhZGVyc0xpc3Q6IFtdLFxuICAgICAgYm9keTogbnVsbFxuICAgIH0pXG4gIH0gZWxzZSB7XG4gICAgYXNzZXJ0KGZhbHNlKVxuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNhcHByb3ByaWF0ZS1uZXR3b3JrLWVycm9yXG5mdW5jdGlvbiBtYWtlQXBwcm9wcmlhdGVOZXR3b3JrRXJyb3IgKGZldGNoUGFyYW1zLCBlcnIgPSBudWxsKSB7XG4gIC8vIDEuIEFzc2VydDogZmV0Y2hQYXJhbXMgaXMgY2FuY2VsZWQuXG4gIGFzc2VydChpc0NhbmNlbGxlZChmZXRjaFBhcmFtcykpXG5cbiAgLy8gMi4gUmV0dXJuIGFuIGFib3J0ZWQgbmV0d29yayBlcnJvciBpZiBmZXRjaFBhcmFtcyBpcyBhYm9ydGVkO1xuICAvLyBvdGhlcndpc2UgcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgcmV0dXJuIGlzQWJvcnRlZChmZXRjaFBhcmFtcylcbiAgICA/IG1ha2VOZXR3b3JrRXJyb3IoT2JqZWN0LmFzc2lnbihuZXcgRE9NRXhjZXB0aW9uKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLicsICdBYm9ydEVycm9yJyksIHsgY2F1c2U6IGVyciB9KSlcbiAgICA6IG1ha2VOZXR3b3JrRXJyb3IoT2JqZWN0LmFzc2lnbihuZXcgRE9NRXhjZXB0aW9uKCdSZXF1ZXN0IHdhcyBjYW5jZWxsZWQuJyksIHsgY2F1c2U6IGVyciB9KSlcbn1cblxuLy8gaHR0cHM6Ly93aGF0cHIub3JnL2ZldGNoLzEzOTIuaHRtbCNpbml0aWFsaXplLWEtcmVzcG9uc2VcbmZ1bmN0aW9uIGluaXRpYWxpemVSZXNwb25zZSAocmVzcG9uc2UsIGluaXQsIGJvZHkpIHtcbiAgLy8gMS4gSWYgaW5pdFtcInN0YXR1c1wiXSBpcyBub3QgaW4gdGhlIHJhbmdlIDIwMCB0byA1OTksIGluY2x1c2l2ZSwgdGhlblxuICAvLyAgICB0aHJvdyBhIFJhbmdlRXJyb3IuXG4gIGlmIChpbml0LnN0YXR1cyAhPT0gbnVsbCAmJiAoaW5pdC5zdGF0dXMgPCAyMDAgfHwgaW5pdC5zdGF0dXMgPiA1OTkpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2luaXRbXCJzdGF0dXNcIl0gbXVzdCBiZSBpbiB0aGUgcmFuZ2Ugb2YgMjAwIHRvIDU5OSwgaW5jbHVzaXZlLicpXG4gIH1cblxuICAvLyAyLiBJZiBpbml0W1wic3RhdHVzVGV4dFwiXSBkb2VzIG5vdCBtYXRjaCB0aGUgcmVhc29uLXBocmFzZSB0b2tlbiBwcm9kdWN0aW9uLFxuICAvLyAgICB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICBpZiAoJ3N0YXR1c1RleHQnIGluIGluaXQgJiYgaW5pdC5zdGF0dXNUZXh0ICE9IG51bGwpIHtcbiAgICAvLyBTZWUsIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNzIzMCNzZWN0aW9uLTMuMS4yOlxuICAgIC8vICAgcmVhc29uLXBocmFzZSAgPSAqKCBIVEFCIC8gU1AgLyBWQ0hBUiAvIG9icy10ZXh0IClcbiAgICBpZiAoIWlzVmFsaWRSZWFzb25QaHJhc2UoU3RyaW5nKGluaXQuc3RhdHVzVGV4dCkpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIHN0YXR1c1RleHQnKVxuICAgIH1cbiAgfVxuXG4gIC8vIDMuIFNldCByZXNwb25zZeKAmXMgcmVzcG9uc2XigJlzIHN0YXR1cyB0byBpbml0W1wic3RhdHVzXCJdLlxuICBpZiAoJ3N0YXR1cycgaW4gaW5pdCAmJiBpbml0LnN0YXR1cyAhPSBudWxsKSB7XG4gICAgcmVzcG9uc2Vba1N0YXRlXS5zdGF0dXMgPSBpbml0LnN0YXR1c1xuICB9XG5cbiAgLy8gNC4gU2V0IHJlc3BvbnNl4oCZcyByZXNwb25zZeKAmXMgc3RhdHVzIG1lc3NhZ2UgdG8gaW5pdFtcInN0YXR1c1RleHRcIl0uXG4gIGlmICgnc3RhdHVzVGV4dCcgaW4gaW5pdCAmJiBpbml0LnN0YXR1c1RleHQgIT0gbnVsbCkge1xuICAgIHJlc3BvbnNlW2tTdGF0ZV0uc3RhdHVzVGV4dCA9IGluaXQuc3RhdHVzVGV4dFxuICB9XG5cbiAgLy8gNS4gSWYgaW5pdFtcImhlYWRlcnNcIl0gZXhpc3RzLCB0aGVuIGZpbGwgcmVzcG9uc2XigJlzIGhlYWRlcnMgd2l0aCBpbml0W1wiaGVhZGVyc1wiXS5cbiAgaWYgKCdoZWFkZXJzJyBpbiBpbml0ICYmIGluaXQuaGVhZGVycyAhPSBudWxsKSB7XG4gICAgZmlsbChyZXNwb25zZVtrSGVhZGVyc10sIGluaXQuaGVhZGVycylcbiAgfVxuXG4gIC8vIDYuIElmIGJvZHkgd2FzIGdpdmVuLCB0aGVuOlxuICBpZiAoYm9keSkge1xuICAgIC8vIDEuIElmIHJlc3BvbnNlJ3Mgc3RhdHVzIGlzIGEgbnVsbCBib2R5IHN0YXR1cywgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAobnVsbEJvZHlTdGF0dXMuaW5jbHVkZXMocmVzcG9uc2Uuc3RhdHVzKSkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6ICdSZXNwb25zZSBjb25zdHJ1Y3RvcicsXG4gICAgICAgIG1lc3NhZ2U6ICdJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cyBjb2RlICcgKyByZXNwb25zZS5zdGF0dXNcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gU2V0IHJlc3BvbnNlJ3MgYm9keSB0byBib2R5J3MgYm9keS5cbiAgICByZXNwb25zZVtrU3RhdGVdLmJvZHkgPSBib2R5LmJvZHlcblxuICAgIC8vIDMuIElmIGJvZHkncyB0eXBlIGlzIG5vbi1udWxsIGFuZCByZXNwb25zZSdzIGhlYWRlciBsaXN0IGRvZXMgbm90IGNvbnRhaW5cbiAgICAvLyAgICBgQ29udGVudC1UeXBlYCwgdGhlbiBhcHBlbmQgKGBDb250ZW50LVR5cGVgLCBib2R5J3MgdHlwZSkgdG8gcmVzcG9uc2UncyBoZWFkZXIgbGlzdC5cbiAgICBpZiAoYm9keS50eXBlICE9IG51bGwgJiYgIXJlc3BvbnNlW2tTdGF0ZV0uaGVhZGVyc0xpc3QuY29udGFpbnMoJ0NvbnRlbnQtVHlwZScpKSB7XG4gICAgICByZXNwb25zZVtrU3RhdGVdLmhlYWRlcnNMaXN0LmFwcGVuZCgnY29udGVudC10eXBlJywgYm9keS50eXBlKVxuICAgIH1cbiAgfVxufVxuXG53ZWJpZGwuY29udmVydGVycy5SZWFkYWJsZVN0cmVhbSA9IHdlYmlkbC5pbnRlcmZhY2VDb252ZXJ0ZXIoXG4gIFJlYWRhYmxlU3RyZWFtXG4pXG5cbndlYmlkbC5jb252ZXJ0ZXJzLkZvcm1EYXRhID0gd2ViaWRsLmludGVyZmFjZUNvbnZlcnRlcihcbiAgRm9ybURhdGFcbilcblxud2ViaWRsLmNvbnZlcnRlcnMuVVJMU2VhcmNoUGFyYW1zID0gd2ViaWRsLmludGVyZmFjZUNvbnZlcnRlcihcbiAgVVJMU2VhcmNoUGFyYW1zXG4pXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyN0eXBlZGVmZGVmLXhtbGh0dHByZXF1ZXN0Ym9keWluaXRcbndlYmlkbC5jb252ZXJ0ZXJzLlhNTEh0dHBSZXF1ZXN0Qm9keUluaXQgPSBmdW5jdGlvbiAoVikge1xuICBpZiAodHlwZW9mIFYgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhWKVxuICB9XG5cbiAgaWYgKGlzQmxvYkxpa2UoVikpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuQmxvYihWLCB7IHN0cmljdDogZmFsc2UgfSlcbiAgfVxuXG4gIGlmICh0eXBlcy5pc0FycmF5QnVmZmVyKFYpIHx8IHR5cGVzLmlzVHlwZWRBcnJheShWKSB8fCB0eXBlcy5pc0RhdGFWaWV3KFYpKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkJ1ZmZlclNvdXJjZShWKVxuICB9XG5cbiAgaWYgKHV0aWwuaXNGb3JtRGF0YUxpa2UoVikpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuRm9ybURhdGEoViwgeyBzdHJpY3Q6IGZhbHNlIH0pXG4gIH1cblxuICBpZiAoViBpbnN0YW5jZW9mIFVSTFNlYXJjaFBhcmFtcykge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5VUkxTZWFyY2hQYXJhbXMoVilcbiAgfVxuXG4gIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcoVilcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2JvZHlpbml0XG53ZWJpZGwuY29udmVydGVycy5Cb2R5SW5pdCA9IGZ1bmN0aW9uIChWKSB7XG4gIGlmIChWIGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW0pIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuUmVhZGFibGVTdHJlYW0oVilcbiAgfVxuXG4gIC8vIE5vdGU6IHRoZSBzcGVjIGRvZXNuJ3QgaW5jbHVkZSBhc3luYyBpdGVyYWJsZXMsXG4gIC8vIHRoaXMgaXMgYW4gdW5kaWNpIGV4dGVuc2lvbi5cbiAgaWYgKFY/LltTeW1ib2wuYXN5bmNJdGVyYXRvcl0pIHtcbiAgICByZXR1cm4gVlxuICB9XG5cbiAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLlhNTEh0dHBSZXF1ZXN0Qm9keUluaXQoVilcbn1cblxud2ViaWRsLmNvbnZlcnRlcnMuUmVzcG9uc2VJbml0ID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICB7XG4gICAga2V5OiAnc3RhdHVzJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBzaG9ydCddLFxuICAgIGRlZmF1bHRWYWx1ZTogMjAwXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdzdGF0dXNUZXh0JyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcsXG4gICAgZGVmYXVsdFZhbHVlOiAnJ1xuICB9LFxuICB7XG4gICAga2V5OiAnaGVhZGVycycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5IZWFkZXJzSW5pdFxuICB9XG5dKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWFrZU5ldHdvcmtFcnJvcixcbiAgbWFrZVJlc3BvbnNlLFxuICBtYWtlQXBwcm9wcmlhdGVOZXR3b3JrRXJyb3IsXG4gIGZpbHRlclJlc3BvbnNlLFxuICBSZXNwb25zZSxcbiAgY2xvbmVSZXNwb25zZVxufVxuIiwKICAgICIvKiBnbG9iYWxzIEFib3J0Q29udHJvbGxlciAqL1xuXG4ndXNlIHN0cmljdCdcblxuY29uc3QgeyBleHRyYWN0Qm9keSwgbWl4aW5Cb2R5LCBjbG9uZUJvZHkgfSA9IHJlcXVpcmUoJy4vYm9keScpXG5jb25zdCB7IEhlYWRlcnMsIGZpbGw6IGZpbGxIZWFkZXJzLCBIZWFkZXJzTGlzdCB9ID0gcmVxdWlyZSgnLi9oZWFkZXJzJylcbmNvbnN0IHsgRmluYWxpemF0aW9uUmVnaXN0cnkgfSA9IHJlcXVpcmUoJy4uL2NvbXBhdC9kaXNwYXRjaGVyLXdlYWtyZWYnKSgpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHtcbiAgaXNWYWxpZEhUVFBUb2tlbixcbiAgc2FtZU9yaWdpbixcbiAgbm9ybWFsaXplTWV0aG9kLFxuICBtYWtlUG9saWN5Q29udGFpbmVyLFxuICBub3JtYWxpemVNZXRob2RSZWNvcmRcbn0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3Qge1xuICBmb3JiaWRkZW5NZXRob2RzU2V0LFxuICBjb3JzU2FmZUxpc3RlZE1ldGhvZHNTZXQsXG4gIHJlZmVycmVyUG9saWN5LFxuICByZXF1ZXN0UmVkaXJlY3QsXG4gIHJlcXVlc3RNb2RlLFxuICByZXF1ZXN0Q3JlZGVudGlhbHMsXG4gIHJlcXVlc3RDYWNoZSxcbiAgcmVxdWVzdER1cGxleFxufSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSB9ID0gdXRpbFxuY29uc3QgeyBrSGVhZGVycywga1NpZ25hbCwga1N0YXRlLCBrR3VhcmQsIGtSZWFsbSB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuL3dlYmlkbCcpXG5jb25zdCB7IGdldEdsb2JhbE9yaWdpbiB9ID0gcmVxdWlyZSgnLi9nbG9iYWwnKVxuY29uc3QgeyBVUkxTZXJpYWxpemVyIH0gPSByZXF1aXJlKCcuL2RhdGFVUkwnKVxuY29uc3QgeyBrSGVhZGVyc0xpc3QsIGtDb25zdHJ1Y3QgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBnZXRNYXhMaXN0ZW5lcnMsIHNldE1heExpc3RlbmVycywgZ2V0RXZlbnRMaXN0ZW5lcnMsIGRlZmF1bHRNYXhMaXN0ZW5lcnMgfSA9IHJlcXVpcmUoJ2V2ZW50cycpXG5cbmxldCBUcmFuc2Zvcm1TdHJlYW0gPSBnbG9iYWxUaGlzLlRyYW5zZm9ybVN0cmVhbVxuXG5jb25zdCBrQWJvcnRDb250cm9sbGVyID0gU3ltYm9sKCdhYm9ydENvbnRyb2xsZXInKVxuXG5jb25zdCByZXF1ZXN0RmluYWxpemVyID0gbmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KCh7IHNpZ25hbCwgYWJvcnQgfSkgPT4ge1xuICBzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydClcbn0pXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXF1ZXN0LWNsYXNzXG5jbGFzcyBSZXF1ZXN0IHtcbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1yZXF1ZXN0XG4gIGNvbnN0cnVjdG9yIChpbnB1dCwgaW5pdCA9IHt9KSB7XG4gICAgaWYgKGlucHV0ID09PSBrQ29uc3RydWN0KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnUmVxdWVzdCBjb25zdHJ1Y3RvcicgfSlcblxuICAgIGlucHV0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluZm8oaW5wdXQpXG4gICAgaW5pdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbml0KGluaXQpXG5cbiAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS93ZWJhcHBhcGlzLmh0bWwjZW52aXJvbm1lbnQtc2V0dGluZ3Mtb2JqZWN0XG4gICAgdGhpc1trUmVhbG1dID0ge1xuICAgICAgc2V0dGluZ3NPYmplY3Q6IHtcbiAgICAgICAgYmFzZVVybDogZ2V0R2xvYmFsT3JpZ2luKCksXG4gICAgICAgIGdldCBvcmlnaW4gKCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmJhc2VVcmw/Lm9yaWdpblxuICAgICAgICB9LFxuICAgICAgICBwb2xpY3lDb250YWluZXI6IG1ha2VQb2xpY3lDb250YWluZXIoKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDEuIExldCByZXF1ZXN0IGJlIG51bGwuXG4gICAgbGV0IHJlcXVlc3QgPSBudWxsXG5cbiAgICAvLyAyLiBMZXQgZmFsbGJhY2tNb2RlIGJlIG51bGwuXG4gICAgbGV0IGZhbGxiYWNrTW9kZSA9IG51bGxcblxuICAgIC8vIDMuIExldCBiYXNlVVJMIGJlIHRoaXPigJlzIHJlbGV2YW50IHNldHRpbmdzIG9iamVjdOKAmXMgQVBJIGJhc2UgVVJMLlxuICAgIGNvbnN0IGJhc2VVcmwgPSB0aGlzW2tSZWFsbV0uc2V0dGluZ3NPYmplY3QuYmFzZVVybFxuXG4gICAgLy8gNC4gTGV0IHNpZ25hbCBiZSBudWxsLlxuICAgIGxldCBzaWduYWwgPSBudWxsXG5cbiAgICAvLyA1LiBJZiBpbnB1dCBpcyBhIHN0cmluZywgdGhlbjpcbiAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gMS4gTGV0IHBhcnNlZFVSTCBiZSB0aGUgcmVzdWx0IG9mIHBhcnNpbmcgaW5wdXQgd2l0aCBiYXNlVVJMLlxuICAgICAgLy8gMi4gSWYgcGFyc2VkVVJMIGlzIGZhaWx1cmUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICBsZXQgcGFyc2VkVVJMXG4gICAgICB0cnkge1xuICAgICAgICBwYXJzZWRVUkwgPSBuZXcgVVJMKGlucHV0LCBiYXNlVXJsKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ZhaWxlZCB0byBwYXJzZSBVUkwgZnJvbSAnICsgaW5wdXQsIHsgY2F1c2U6IGVyciB9KVxuICAgICAgfVxuXG4gICAgICAvLyAzLiBJZiBwYXJzZWRVUkwgaW5jbHVkZXMgY3JlZGVudGlhbHMsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICBpZiAocGFyc2VkVVJMLnVzZXJuYW1lIHx8IHBhcnNlZFVSTC5wYXNzd29yZCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICdSZXF1ZXN0IGNhbm5vdCBiZSBjb25zdHJ1Y3RlZCBmcm9tIGEgVVJMIHRoYXQgaW5jbHVkZXMgY3JlZGVudGlhbHM6ICcgK1xuICAgICAgICAgICAgaW5wdXRcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICAvLyA0LiBTZXQgcmVxdWVzdCB0byBhIG5ldyByZXF1ZXN0IHdob3NlIFVSTCBpcyBwYXJzZWRVUkwuXG4gICAgICByZXF1ZXN0ID0gbWFrZVJlcXVlc3QoeyB1cmxMaXN0OiBbcGFyc2VkVVJMXSB9KVxuXG4gICAgICAvLyA1LiBTZXQgZmFsbGJhY2tNb2RlIHRvIFwiY29yc1wiLlxuICAgICAgZmFsbGJhY2tNb2RlID0gJ2NvcnMnXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIDYuIE90aGVyd2lzZTpcblxuICAgICAgLy8gNy4gQXNzZXJ0OiBpbnB1dCBpcyBhIFJlcXVlc3Qgb2JqZWN0LlxuICAgICAgYXNzZXJ0KGlucHV0IGluc3RhbmNlb2YgUmVxdWVzdClcblxuICAgICAgLy8gOC4gU2V0IHJlcXVlc3QgdG8gaW5wdXTigJlzIHJlcXVlc3QuXG4gICAgICByZXF1ZXN0ID0gaW5wdXRba1N0YXRlXVxuXG4gICAgICAvLyA5LiBTZXQgc2lnbmFsIHRvIGlucHV04oCZcyBzaWduYWwuXG4gICAgICBzaWduYWwgPSBpbnB1dFtrU2lnbmFsXVxuICAgIH1cblxuICAgIC8vIDcuIExldCBvcmlnaW4gYmUgdGhpc+KAmXMgcmVsZXZhbnQgc2V0dGluZ3Mgb2JqZWN04oCZcyBvcmlnaW4uXG4gICAgY29uc3Qgb3JpZ2luID0gdGhpc1trUmVhbG1dLnNldHRpbmdzT2JqZWN0Lm9yaWdpblxuXG4gICAgLy8gOC4gTGV0IHdpbmRvdyBiZSBcImNsaWVudFwiLlxuICAgIGxldCB3aW5kb3cgPSAnY2xpZW50J1xuXG4gICAgLy8gOS4gSWYgcmVxdWVzdOKAmXMgd2luZG93IGlzIGFuIGVudmlyb25tZW50IHNldHRpbmdzIG9iamVjdCBhbmQgaXRzIG9yaWdpblxuICAgIC8vIGlzIHNhbWUgb3JpZ2luIHdpdGggb3JpZ2luLCB0aGVuIHNldCB3aW5kb3cgdG8gcmVxdWVzdOKAmXMgd2luZG93LlxuICAgIGlmIChcbiAgICAgIHJlcXVlc3Qud2luZG93Py5jb25zdHJ1Y3Rvcj8ubmFtZSA9PT0gJ0Vudmlyb25tZW50U2V0dGluZ3NPYmplY3QnICYmXG4gICAgICBzYW1lT3JpZ2luKHJlcXVlc3Qud2luZG93LCBvcmlnaW4pXG4gICAgKSB7XG4gICAgICB3aW5kb3cgPSByZXF1ZXN0LndpbmRvd1xuICAgIH1cblxuICAgIC8vIDEwLiBJZiBpbml0W1wid2luZG93XCJdIGV4aXN0cyBhbmQgaXMgbm9uLW51bGwsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKGluaXQud2luZG93ICE9IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCd3aW5kb3cnIG9wdGlvbiAnJHt3aW5kb3d9JyBtdXN0IGJlIG51bGxgKVxuICAgIH1cblxuICAgIC8vIDExLiBJZiBpbml0W1wid2luZG93XCJdIGV4aXN0cywgdGhlbiBzZXQgd2luZG93IHRvIFwibm8td2luZG93XCIuXG4gICAgaWYgKCd3aW5kb3cnIGluIGluaXQpIHtcbiAgICAgIHdpbmRvdyA9ICduby13aW5kb3cnXG4gICAgfVxuXG4gICAgLy8gMTIuIFNldCByZXF1ZXN0IHRvIGEgbmV3IHJlcXVlc3Qgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gICAgcmVxdWVzdCA9IG1ha2VSZXF1ZXN0KHtcbiAgICAgIC8vIFVSTCByZXF1ZXN04oCZcyBVUkwuXG4gICAgICAvLyB1bmRpY2kgaW1wbGVtZW50YXRpb24gbm90ZTogdGhpcyBpcyBzZXQgYXMgdGhlIGZpcnN0IGl0ZW0gaW4gcmVxdWVzdCdzIHVybExpc3QgaW4gbWFrZVJlcXVlc3RcbiAgICAgIC8vIG1ldGhvZCByZXF1ZXN04oCZcyBtZXRob2QuXG4gICAgICBtZXRob2Q6IHJlcXVlc3QubWV0aG9kLFxuICAgICAgLy8gaGVhZGVyIGxpc3QgQSBjb3B5IG9mIHJlcXVlc3TigJlzIGhlYWRlciBsaXN0LlxuICAgICAgLy8gdW5kaWNpIGltcGxlbWVudGF0aW9uIG5vdGU6IGhlYWRlcnNMaXN0IGlzIGNsb25lZCBpbiBtYWtlUmVxdWVzdFxuICAgICAgaGVhZGVyc0xpc3Q6IHJlcXVlc3QuaGVhZGVyc0xpc3QsXG4gICAgICAvLyB1bnNhZmUtcmVxdWVzdCBmbGFnIFNldC5cbiAgICAgIHVuc2FmZVJlcXVlc3Q6IHJlcXVlc3QudW5zYWZlUmVxdWVzdCxcbiAgICAgIC8vIGNsaWVudCBUaGlz4oCZcyByZWxldmFudCBzZXR0aW5ncyBvYmplY3QuXG4gICAgICBjbGllbnQ6IHRoaXNba1JlYWxtXS5zZXR0aW5nc09iamVjdCxcbiAgICAgIC8vIHdpbmRvdyB3aW5kb3cuXG4gICAgICB3aW5kb3csXG4gICAgICAvLyBwcmlvcml0eSByZXF1ZXN04oCZcyBwcmlvcml0eS5cbiAgICAgIHByaW9yaXR5OiByZXF1ZXN0LnByaW9yaXR5LFxuICAgICAgLy8gb3JpZ2luIHJlcXVlc3TigJlzIG9yaWdpbi4gVGhlIHByb3BhZ2F0aW9uIG9mIHRoZSBvcmlnaW4gaXMgb25seSBzaWduaWZpY2FudCBmb3IgbmF2aWdhdGlvbiByZXF1ZXN0c1xuICAgICAgLy8gYmVpbmcgaGFuZGxlZCBieSBhIHNlcnZpY2Ugd29ya2VyLiBJbiB0aGlzIHNjZW5hcmlvIGEgcmVxdWVzdCBjYW4gaGF2ZSBhbiBvcmlnaW4gdGhhdCBpcyBkaWZmZXJlbnRcbiAgICAgIC8vIGZyb20gdGhlIGN1cnJlbnQgY2xpZW50LlxuICAgICAgb3JpZ2luOiByZXF1ZXN0Lm9yaWdpbixcbiAgICAgIC8vIHJlZmVycmVyIHJlcXVlc3TigJlzIHJlZmVycmVyLlxuICAgICAgcmVmZXJyZXI6IHJlcXVlc3QucmVmZXJyZXIsXG4gICAgICAvLyByZWZlcnJlciBwb2xpY3kgcmVxdWVzdOKAmXMgcmVmZXJyZXIgcG9saWN5LlxuICAgICAgcmVmZXJyZXJQb2xpY3k6IHJlcXVlc3QucmVmZXJyZXJQb2xpY3ksXG4gICAgICAvLyBtb2RlIHJlcXVlc3TigJlzIG1vZGUuXG4gICAgICBtb2RlOiByZXF1ZXN0Lm1vZGUsXG4gICAgICAvLyBjcmVkZW50aWFscyBtb2RlIHJlcXVlc3TigJlzIGNyZWRlbnRpYWxzIG1vZGUuXG4gICAgICBjcmVkZW50aWFsczogcmVxdWVzdC5jcmVkZW50aWFscyxcbiAgICAgIC8vIGNhY2hlIG1vZGUgcmVxdWVzdOKAmXMgY2FjaGUgbW9kZS5cbiAgICAgIGNhY2hlOiByZXF1ZXN0LmNhY2hlLFxuICAgICAgLy8gcmVkaXJlY3QgbW9kZSByZXF1ZXN04oCZcyByZWRpcmVjdCBtb2RlLlxuICAgICAgcmVkaXJlY3Q6IHJlcXVlc3QucmVkaXJlY3QsXG4gICAgICAvLyBpbnRlZ3JpdHkgbWV0YWRhdGEgcmVxdWVzdOKAmXMgaW50ZWdyaXR5IG1ldGFkYXRhLlxuICAgICAgaW50ZWdyaXR5OiByZXF1ZXN0LmludGVncml0eSxcbiAgICAgIC8vIGtlZXBhbGl2ZSByZXF1ZXN04oCZcyBrZWVwYWxpdmUuXG4gICAgICBrZWVwYWxpdmU6IHJlcXVlc3Qua2VlcGFsaXZlLFxuICAgICAgLy8gcmVsb2FkLW5hdmlnYXRpb24gZmxhZyByZXF1ZXN04oCZcyByZWxvYWQtbmF2aWdhdGlvbiBmbGFnLlxuICAgICAgcmVsb2FkTmF2aWdhdGlvbjogcmVxdWVzdC5yZWxvYWROYXZpZ2F0aW9uLFxuICAgICAgLy8gaGlzdG9yeS1uYXZpZ2F0aW9uIGZsYWcgcmVxdWVzdOKAmXMgaGlzdG9yeS1uYXZpZ2F0aW9uIGZsYWcuXG4gICAgICBoaXN0b3J5TmF2aWdhdGlvbjogcmVxdWVzdC5oaXN0b3J5TmF2aWdhdGlvbixcbiAgICAgIC8vIFVSTCBsaXN0IEEgY2xvbmUgb2YgcmVxdWVzdOKAmXMgVVJMIGxpc3QuXG4gICAgICB1cmxMaXN0OiBbLi4ucmVxdWVzdC51cmxMaXN0XVxuICAgIH0pXG5cbiAgICBjb25zdCBpbml0SGFzS2V5ID0gT2JqZWN0LmtleXMoaW5pdCkubGVuZ3RoICE9PSAwXG5cbiAgICAvLyAxMy4gSWYgaW5pdCBpcyBub3QgZW1wdHksIHRoZW46XG4gICAgaWYgKGluaXRIYXNLZXkpIHtcbiAgICAgIC8vIDEuIElmIHJlcXVlc3TigJlzIG1vZGUgaXMgXCJuYXZpZ2F0ZVwiLCB0aGVuIHNldCBpdCB0byBcInNhbWUtb3JpZ2luXCIuXG4gICAgICBpZiAocmVxdWVzdC5tb2RlID09PSAnbmF2aWdhdGUnKSB7XG4gICAgICAgIHJlcXVlc3QubW9kZSA9ICdzYW1lLW9yaWdpbidcbiAgICAgIH1cblxuICAgICAgLy8gMi4gVW5zZXQgcmVxdWVzdOKAmXMgcmVsb2FkLW5hdmlnYXRpb24gZmxhZy5cbiAgICAgIHJlcXVlc3QucmVsb2FkTmF2aWdhdGlvbiA9IGZhbHNlXG5cbiAgICAgIC8vIDMuIFVuc2V0IHJlcXVlc3TigJlzIGhpc3RvcnktbmF2aWdhdGlvbiBmbGFnLlxuICAgICAgcmVxdWVzdC5oaXN0b3J5TmF2aWdhdGlvbiA9IGZhbHNlXG5cbiAgICAgIC8vIDQuIFNldCByZXF1ZXN04oCZcyBvcmlnaW4gdG8gXCJjbGllbnRcIi5cbiAgICAgIHJlcXVlc3Qub3JpZ2luID0gJ2NsaWVudCdcblxuICAgICAgLy8gNS4gU2V0IHJlcXVlc3TigJlzIHJlZmVycmVyIHRvIFwiY2xpZW50XCJcbiAgICAgIHJlcXVlc3QucmVmZXJyZXIgPSAnY2xpZW50J1xuXG4gICAgICAvLyA2LiBTZXQgcmVxdWVzdOKAmXMgcmVmZXJyZXIgcG9saWN5IHRvIHRoZSBlbXB0eSBzdHJpbmcuXG4gICAgICByZXF1ZXN0LnJlZmVycmVyUG9saWN5ID0gJydcblxuICAgICAgLy8gNy4gU2V0IHJlcXVlc3TigJlzIFVSTCB0byByZXF1ZXN04oCZcyBjdXJyZW50IFVSTC5cbiAgICAgIHJlcXVlc3QudXJsID0gcmVxdWVzdC51cmxMaXN0W3JlcXVlc3QudXJsTGlzdC5sZW5ndGggLSAxXVxuXG4gICAgICAvLyA4LiBTZXQgcmVxdWVzdOKAmXMgVVJMIGxpc3QgdG8gwqsgcmVxdWVzdOKAmXMgVVJMIMK7LlxuICAgICAgcmVxdWVzdC51cmxMaXN0ID0gW3JlcXVlc3QudXJsXVxuICAgIH1cblxuICAgIC8vIDE0LiBJZiBpbml0W1wicmVmZXJyZXJcIl0gZXhpc3RzLCB0aGVuOlxuICAgIGlmIChpbml0LnJlZmVycmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIDEuIExldCByZWZlcnJlciBiZSBpbml0W1wicmVmZXJyZXJcIl0uXG4gICAgICBjb25zdCByZWZlcnJlciA9IGluaXQucmVmZXJyZXJcblxuICAgICAgLy8gMi4gSWYgcmVmZXJyZXIgaXMgdGhlIGVtcHR5IHN0cmluZywgdGhlbiBzZXQgcmVxdWVzdOKAmXMgcmVmZXJyZXIgdG8gXCJuby1yZWZlcnJlclwiLlxuICAgICAgaWYgKHJlZmVycmVyID09PSAnJykge1xuICAgICAgICByZXF1ZXN0LnJlZmVycmVyID0gJ25vLXJlZmVycmVyJ1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gMS4gTGV0IHBhcnNlZFJlZmVycmVyIGJlIHRoZSByZXN1bHQgb2YgcGFyc2luZyByZWZlcnJlciB3aXRoXG4gICAgICAgIC8vIGJhc2VVUkwuXG4gICAgICAgIC8vIDIuIElmIHBhcnNlZFJlZmVycmVyIGlzIGZhaWx1cmUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICAgIGxldCBwYXJzZWRSZWZlcnJlclxuICAgICAgICB0cnkge1xuICAgICAgICAgIHBhcnNlZFJlZmVycmVyID0gbmV3IFVSTChyZWZlcnJlciwgYmFzZVVybClcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgUmVmZXJyZXIgXCIke3JlZmVycmVyfVwiIGlzIG5vdCBhIHZhbGlkIFVSTC5gLCB7IGNhdXNlOiBlcnIgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDMuIElmIG9uZSBvZiB0aGUgZm9sbG93aW5nIGlzIHRydWVcbiAgICAgICAgLy8gLSBwYXJzZWRSZWZlcnJlcuKAmXMgc2NoZW1lIGlzIFwiYWJvdXRcIiBhbmQgcGF0aCBpcyB0aGUgc3RyaW5nIFwiY2xpZW50XCJcbiAgICAgICAgLy8gLSBwYXJzZWRSZWZlcnJlcuKAmXMgb3JpZ2luIGlzIG5vdCBzYW1lIG9yaWdpbiB3aXRoIG9yaWdpblxuICAgICAgICAvLyB0aGVuIHNldCByZXF1ZXN04oCZcyByZWZlcnJlciB0byBcImNsaWVudFwiLlxuICAgICAgICBpZiAoXG4gICAgICAgICAgKHBhcnNlZFJlZmVycmVyLnByb3RvY29sID09PSAnYWJvdXQ6JyAmJiBwYXJzZWRSZWZlcnJlci5ob3N0bmFtZSA9PT0gJ2NsaWVudCcpIHx8XG4gICAgICAgICAgKG9yaWdpbiAmJiAhc2FtZU9yaWdpbihwYXJzZWRSZWZlcnJlciwgdGhpc1trUmVhbG1dLnNldHRpbmdzT2JqZWN0LmJhc2VVcmwpKVxuICAgICAgICApIHtcbiAgICAgICAgICByZXF1ZXN0LnJlZmVycmVyID0gJ2NsaWVudCdcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyA0LiBPdGhlcndpc2UsIHNldCByZXF1ZXN04oCZcyByZWZlcnJlciB0byBwYXJzZWRSZWZlcnJlci5cbiAgICAgICAgICByZXF1ZXN0LnJlZmVycmVyID0gcGFyc2VkUmVmZXJyZXJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDE1LiBJZiBpbml0W1wicmVmZXJyZXJQb2xpY3lcIl0gZXhpc3RzLCB0aGVuIHNldCByZXF1ZXN04oCZcyByZWZlcnJlciBwb2xpY3lcbiAgICAvLyB0byBpdC5cbiAgICBpZiAoaW5pdC5yZWZlcnJlclBvbGljeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXF1ZXN0LnJlZmVycmVyUG9saWN5ID0gaW5pdC5yZWZlcnJlclBvbGljeVxuICAgIH1cblxuICAgIC8vIDE2LiBMZXQgbW9kZSBiZSBpbml0W1wibW9kZVwiXSBpZiBpdCBleGlzdHMsIGFuZCBmYWxsYmFja01vZGUgb3RoZXJ3aXNlLlxuICAgIGxldCBtb2RlXG4gICAgaWYgKGluaXQubW9kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBtb2RlID0gaW5pdC5tb2RlXG4gICAgfSBlbHNlIHtcbiAgICAgIG1vZGUgPSBmYWxsYmFja01vZGVcbiAgICB9XG5cbiAgICAvLyAxNy4gSWYgbW9kZSBpcyBcIm5hdmlnYXRlXCIsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKG1vZGUgPT09ICduYXZpZ2F0ZScpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnUmVxdWVzdCBjb25zdHJ1Y3RvcicsXG4gICAgICAgIG1lc3NhZ2U6ICdpbnZhbGlkIHJlcXVlc3QgbW9kZSBuYXZpZ2F0ZS4nXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDE4LiBJZiBtb2RlIGlzIG5vbi1udWxsLCBzZXQgcmVxdWVzdOKAmXMgbW9kZSB0byBtb2RlLlxuICAgIGlmIChtb2RlICE9IG51bGwpIHtcbiAgICAgIHJlcXVlc3QubW9kZSA9IG1vZGVcbiAgICB9XG5cbiAgICAvLyAxOS4gSWYgaW5pdFtcImNyZWRlbnRpYWxzXCJdIGV4aXN0cywgdGhlbiBzZXQgcmVxdWVzdOKAmXMgY3JlZGVudGlhbHMgbW9kZVxuICAgIC8vIHRvIGl0LlxuICAgIGlmIChpbml0LmNyZWRlbnRpYWxzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlcXVlc3QuY3JlZGVudGlhbHMgPSBpbml0LmNyZWRlbnRpYWxzXG4gICAgfVxuXG4gICAgLy8gMTguIElmIGluaXRbXCJjYWNoZVwiXSBleGlzdHMsIHRoZW4gc2V0IHJlcXVlc3TigJlzIGNhY2hlIG1vZGUgdG8gaXQuXG4gICAgaWYgKGluaXQuY2FjaGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVxdWVzdC5jYWNoZSA9IGluaXQuY2FjaGVcbiAgICB9XG5cbiAgICAvLyAyMS4gSWYgcmVxdWVzdOKAmXMgY2FjaGUgbW9kZSBpcyBcIm9ubHktaWYtY2FjaGVkXCIgYW5kIHJlcXVlc3TigJlzIG1vZGUgaXNcbiAgICAvLyBub3QgXCJzYW1lLW9yaWdpblwiLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmIChyZXF1ZXN0LmNhY2hlID09PSAnb25seS1pZi1jYWNoZWQnICYmIHJlcXVlc3QubW9kZSAhPT0gJ3NhbWUtb3JpZ2luJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgXCInb25seS1pZi1jYWNoZWQnIGNhbiBiZSBzZXQgb25seSB3aXRoICdzYW1lLW9yaWdpbicgbW9kZVwiXG4gICAgICApXG4gICAgfVxuXG4gICAgLy8gMjIuIElmIGluaXRbXCJyZWRpcmVjdFwiXSBleGlzdHMsIHRoZW4gc2V0IHJlcXVlc3TigJlzIHJlZGlyZWN0IG1vZGUgdG8gaXQuXG4gICAgaWYgKGluaXQucmVkaXJlY3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVxdWVzdC5yZWRpcmVjdCA9IGluaXQucmVkaXJlY3RcbiAgICB9XG5cbiAgICAvLyAyMy4gSWYgaW5pdFtcImludGVncml0eVwiXSBleGlzdHMsIHRoZW4gc2V0IHJlcXVlc3TigJlzIGludGVncml0eSBtZXRhZGF0YSB0byBpdC5cbiAgICBpZiAoaW5pdC5pbnRlZ3JpdHkgIT0gbnVsbCkge1xuICAgICAgcmVxdWVzdC5pbnRlZ3JpdHkgPSBTdHJpbmcoaW5pdC5pbnRlZ3JpdHkpXG4gICAgfVxuXG4gICAgLy8gMjQuIElmIGluaXRbXCJrZWVwYWxpdmVcIl0gZXhpc3RzLCB0aGVuIHNldCByZXF1ZXN04oCZcyBrZWVwYWxpdmUgdG8gaXQuXG4gICAgaWYgKGluaXQua2VlcGFsaXZlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlcXVlc3Qua2VlcGFsaXZlID0gQm9vbGVhbihpbml0LmtlZXBhbGl2ZSlcbiAgICB9XG5cbiAgICAvLyAyNS4gSWYgaW5pdFtcIm1ldGhvZFwiXSBleGlzdHMsIHRoZW46XG4gICAgaWYgKGluaXQubWV0aG9kICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIDEuIExldCBtZXRob2QgYmUgaW5pdFtcIm1ldGhvZFwiXS5cbiAgICAgIGxldCBtZXRob2QgPSBpbml0Lm1ldGhvZFxuXG4gICAgICAvLyAyLiBJZiBtZXRob2QgaXMgbm90IGEgbWV0aG9kIG9yIG1ldGhvZCBpcyBhIGZvcmJpZGRlbiBtZXRob2QsIHRoZW5cbiAgICAgIC8vIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgaWYgKCFpc1ZhbGlkSFRUUFRva2VuKG1ldGhvZCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJyR7bWV0aG9kfScgaXMgbm90IGEgdmFsaWQgSFRUUCBtZXRob2QuYClcbiAgICAgIH1cblxuICAgICAgaWYgKGZvcmJpZGRlbk1ldGhvZHNTZXQuaGFzKG1ldGhvZC50b1VwcGVyQ2FzZSgpKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAnJHttZXRob2R9JyBIVFRQIG1ldGhvZCBpcyB1bnN1cHBvcnRlZC5gKVxuICAgICAgfVxuXG4gICAgICAvLyAzLiBOb3JtYWxpemUgbWV0aG9kLlxuICAgICAgbWV0aG9kID0gbm9ybWFsaXplTWV0aG9kUmVjb3JkW21ldGhvZF0gPz8gbm9ybWFsaXplTWV0aG9kKG1ldGhvZClcblxuICAgICAgLy8gNC4gU2V0IHJlcXVlc3TigJlzIG1ldGhvZCB0byBtZXRob2QuXG4gICAgICByZXF1ZXN0Lm1ldGhvZCA9IG1ldGhvZFxuICAgIH1cblxuICAgIC8vIDI2LiBJZiBpbml0W1wic2lnbmFsXCJdIGV4aXN0cywgdGhlbiBzZXQgc2lnbmFsIHRvIGl0LlxuICAgIGlmIChpbml0LnNpZ25hbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBzaWduYWwgPSBpbml0LnNpZ25hbFxuICAgIH1cblxuICAgIC8vIDI3LiBTZXQgdGhpc+KAmXMgcmVxdWVzdCB0byByZXF1ZXN0LlxuICAgIHRoaXNba1N0YXRlXSA9IHJlcXVlc3RcblxuICAgIC8vIDI4LiBTZXQgdGhpc+KAmXMgc2lnbmFsIHRvIGEgbmV3IEFib3J0U2lnbmFsIG9iamVjdCB3aXRoIHRoaXPigJlzIHJlbGV2YW50XG4gICAgLy8gUmVhbG0uXG4gICAgLy8gVE9ETzogY291bGQgdGhpcyBiZSBzaW1wbGlmaWVkIHdpdGggQWJvcnRTaWduYWwuYW55XG4gICAgLy8gKGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jZG9tLWFib3J0c2lnbmFsLWFueSlcbiAgICBjb25zdCBhYyA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuICAgIHRoaXNba1NpZ25hbF0gPSBhYy5zaWduYWxcbiAgICB0aGlzW2tTaWduYWxdW2tSZWFsbV0gPSB0aGlzW2tSZWFsbV1cblxuICAgIC8vIDI5LiBJZiBzaWduYWwgaXMgbm90IG51bGwsIHRoZW4gbWFrZSB0aGlz4oCZcyBzaWduYWwgZm9sbG93IHNpZ25hbC5cbiAgICBpZiAoc2lnbmFsICE9IG51bGwpIHtcbiAgICAgIGlmIChcbiAgICAgICAgIXNpZ25hbCB8fFxuICAgICAgICB0eXBlb2Ygc2lnbmFsLmFib3J0ZWQgIT09ICdib29sZWFuJyB8fFxuICAgICAgICB0eXBlb2Ygc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIgIT09ICdmdW5jdGlvbidcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgIFwiRmFpbGVkIHRvIGNvbnN0cnVjdCAnUmVxdWVzdCc6IG1lbWJlciBzaWduYWwgaXMgbm90IG9mIHR5cGUgQWJvcnRTaWduYWwuXCJcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgYWMuYWJvcnQoc2lnbmFsLnJlYXNvbilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEtlZXAgYSBzdHJvbmcgcmVmIHRvIGFjIHdoaWxlIHJlcXVlc3Qgb2JqZWN0XG4gICAgICAgIC8vIGlzIGFsaXZlLiBUaGlzIGlzIG5lZWRlZCB0byBwcmV2ZW50IEFib3J0Q29udHJvbGxlclxuICAgICAgICAvLyBmcm9tIGJlaW5nIHByZW1hdHVyZWx5IGdhcmJhZ2UgY29sbGVjdGVkLlxuICAgICAgICAvLyBTZWUsIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8xOTI2LlxuICAgICAgICB0aGlzW2tBYm9ydENvbnRyb2xsZXJdID0gYWNcblxuICAgICAgICBjb25zdCBhY1JlZiA9IG5ldyBXZWFrUmVmKGFjKVxuICAgICAgICBjb25zdCBhYm9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zdCBhYyA9IGFjUmVmLmRlcmVmKClcbiAgICAgICAgICBpZiAoYWMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYWMuYWJvcnQodGhpcy5yZWFzb24pXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhpcmQtcGFydHkgQWJvcnRDb250cm9sbGVycyBtYXkgbm90IHdvcmsgd2l0aCB0aGVzZS5cbiAgICAgICAgLy8gU2VlLCBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9wdWxsLzE5MTAjaXNzdWVjb21tZW50LTE0NjQ0OTU2MTkuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gSWYgdGhlIG1heCBhbW91bnQgb2YgbGlzdGVuZXJzIGlzIGVxdWFsIHRvIHRoZSBkZWZhdWx0LCBpbmNyZWFzZSBpdFxuICAgICAgICAgIC8vIFRoaXMgaXMgb25seSBhdmFpbGFibGUgaW4gbm9kZSA+PSB2MTkuOS4wXG4gICAgICAgICAgaWYgKHR5cGVvZiBnZXRNYXhMaXN0ZW5lcnMgPT09ICdmdW5jdGlvbicgJiYgZ2V0TWF4TGlzdGVuZXJzKHNpZ25hbCkgPT09IGRlZmF1bHRNYXhMaXN0ZW5lcnMpIHtcbiAgICAgICAgICAgIHNldE1heExpc3RlbmVycygxMDAsIHNpZ25hbClcbiAgICAgICAgICB9IGVsc2UgaWYgKGdldEV2ZW50TGlzdGVuZXJzKHNpZ25hbCwgJ2Fib3J0JykubGVuZ3RoID49IGRlZmF1bHRNYXhMaXN0ZW5lcnMpIHtcbiAgICAgICAgICAgIHNldE1heExpc3RlbmVycygxMDAsIHNpZ25hbClcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2gge31cblxuICAgICAgICB1dGlsLmFkZEFib3J0TGlzdGVuZXIoc2lnbmFsLCBhYm9ydClcbiAgICAgICAgcmVxdWVzdEZpbmFsaXplci5yZWdpc3RlcihhYywgeyBzaWduYWwsIGFib3J0IH0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gMzAuIFNldCB0aGlz4oCZcyBoZWFkZXJzIHRvIGEgbmV3IEhlYWRlcnMgb2JqZWN0IHdpdGggdGhpc+KAmXMgcmVsZXZhbnRcbiAgICAvLyBSZWFsbSwgd2hvc2UgaGVhZGVyIGxpc3QgaXMgcmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QgYW5kIGd1YXJkIGlzXG4gICAgLy8gXCJyZXF1ZXN0XCIuXG4gICAgdGhpc1trSGVhZGVyc10gPSBuZXcgSGVhZGVycyhrQ29uc3RydWN0KVxuICAgIHRoaXNba0hlYWRlcnNdW2tIZWFkZXJzTGlzdF0gPSByZXF1ZXN0LmhlYWRlcnNMaXN0XG4gICAgdGhpc1trSGVhZGVyc11ba0d1YXJkXSA9ICdyZXF1ZXN0J1xuICAgIHRoaXNba0hlYWRlcnNdW2tSZWFsbV0gPSB0aGlzW2tSZWFsbV1cblxuICAgIC8vIDMxLiBJZiB0aGlz4oCZcyByZXF1ZXN04oCZcyBtb2RlIGlzIFwibm8tY29yc1wiLCB0aGVuOlxuICAgIGlmIChtb2RlID09PSAnbm8tY29ycycpIHtcbiAgICAgIC8vIDEuIElmIHRoaXPigJlzIHJlcXVlc3TigJlzIG1ldGhvZCBpcyBub3QgYSBDT1JTLXNhZmVsaXN0ZWQgbWV0aG9kLFxuICAgICAgLy8gdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGlmICghY29yc1NhZmVMaXN0ZWRNZXRob2RzU2V0LmhhcyhyZXF1ZXN0Lm1ldGhvZCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICBgJyR7cmVxdWVzdC5tZXRob2R9IGlzIHVuc3VwcG9ydGVkIGluIG5vLWNvcnMgbW9kZS5gXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgLy8gMi4gU2V0IHRoaXPigJlzIGhlYWRlcnPigJlzIGd1YXJkIHRvIFwicmVxdWVzdC1uby1jb3JzXCIuXG4gICAgICB0aGlzW2tIZWFkZXJzXVtrR3VhcmRdID0gJ3JlcXVlc3Qtbm8tY29ycydcbiAgICB9XG5cbiAgICAvLyAzMi4gSWYgaW5pdCBpcyBub3QgZW1wdHksIHRoZW46XG4gICAgaWYgKGluaXRIYXNLZXkpIHtcbiAgICAgIC8qKiBAdHlwZSB7SGVhZGVyc0xpc3R9ICovXG4gICAgICBjb25zdCBoZWFkZXJzTGlzdCA9IHRoaXNba0hlYWRlcnNdW2tIZWFkZXJzTGlzdF1cbiAgICAgIC8vIDEuIExldCBoZWFkZXJzIGJlIGEgY29weSBvZiB0aGlz4oCZcyBoZWFkZXJzIGFuZCBpdHMgYXNzb2NpYXRlZCBoZWFkZXJcbiAgICAgIC8vIGxpc3QuXG4gICAgICAvLyAyLiBJZiBpbml0W1wiaGVhZGVyc1wiXSBleGlzdHMsIHRoZW4gc2V0IGhlYWRlcnMgdG8gaW5pdFtcImhlYWRlcnNcIl0uXG4gICAgICBjb25zdCBoZWFkZXJzID0gaW5pdC5oZWFkZXJzICE9PSB1bmRlZmluZWQgPyBpbml0LmhlYWRlcnMgOiBuZXcgSGVhZGVyc0xpc3QoaGVhZGVyc0xpc3QpXG5cbiAgICAgIC8vIDMuIEVtcHR5IHRoaXPigJlzIGhlYWRlcnPigJlzIGhlYWRlciBsaXN0LlxuICAgICAgaGVhZGVyc0xpc3QuY2xlYXIoKVxuXG4gICAgICAvLyA0LiBJZiBoZWFkZXJzIGlzIGEgSGVhZGVycyBvYmplY3QsIHRoZW4gZm9yIGVhY2ggaGVhZGVyIGluIGl0cyBoZWFkZXJcbiAgICAgIC8vIGxpc3QsIGFwcGVuZCBoZWFkZXLigJlzIG5hbWUvaGVhZGVy4oCZcyB2YWx1ZSB0byB0aGlz4oCZcyBoZWFkZXJzLlxuICAgICAgaWYgKGhlYWRlcnMgaW5zdGFuY2VvZiBIZWFkZXJzTGlzdCkge1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgaGVhZGVycykge1xuICAgICAgICAgIGhlYWRlcnNMaXN0LmFwcGVuZChrZXksIHZhbClcbiAgICAgICAgfVxuICAgICAgICAvLyBOb3RlOiBDb3B5IHRoZSBgc2V0LWNvb2tpZWAgbWV0YS1kYXRhLlxuICAgICAgICBoZWFkZXJzTGlzdC5jb29raWVzID0gaGVhZGVycy5jb29raWVzXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyA1LiBPdGhlcndpc2UsIGZpbGwgdGhpc+KAmXMgaGVhZGVycyB3aXRoIGhlYWRlcnMuXG4gICAgICAgIGZpbGxIZWFkZXJzKHRoaXNba0hlYWRlcnNdLCBoZWFkZXJzKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDMzLiBMZXQgaW5wdXRCb2R5IGJlIGlucHV04oCZcyByZXF1ZXN04oCZcyBib2R5IGlmIGlucHV0IGlzIGEgUmVxdWVzdFxuICAgIC8vIG9iamVjdDsgb3RoZXJ3aXNlIG51bGwuXG4gICAgY29uc3QgaW5wdXRCb2R5ID0gaW5wdXQgaW5zdGFuY2VvZiBSZXF1ZXN0ID8gaW5wdXRba1N0YXRlXS5ib2R5IDogbnVsbFxuXG4gICAgLy8gMzQuIElmIGVpdGhlciBpbml0W1wiYm9keVwiXSBleGlzdHMgYW5kIGlzIG5vbi1udWxsIG9yIGlucHV0Qm9keSBpc1xuICAgIC8vIG5vbi1udWxsLCBhbmQgcmVxdWVzdOKAmXMgbWV0aG9kIGlzIGBHRVRgIG9yIGBIRUFEYCwgdGhlbiB0aHJvdyBhXG4gICAgLy8gVHlwZUVycm9yLlxuICAgIGlmIChcbiAgICAgIChpbml0LmJvZHkgIT0gbnVsbCB8fCBpbnB1dEJvZHkgIT0gbnVsbCkgJiZcbiAgICAgIChyZXF1ZXN0Lm1ldGhvZCA9PT0gJ0dFVCcgfHwgcmVxdWVzdC5tZXRob2QgPT09ICdIRUFEJylcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlcXVlc3Qgd2l0aCBHRVQvSEVBRCBtZXRob2QgY2Fubm90IGhhdmUgYm9keS4nKVxuICAgIH1cblxuICAgIC8vIDM1LiBMZXQgaW5pdEJvZHkgYmUgbnVsbC5cbiAgICBsZXQgaW5pdEJvZHkgPSBudWxsXG5cbiAgICAvLyAzNi4gSWYgaW5pdFtcImJvZHlcIl0gZXhpc3RzIGFuZCBpcyBub24tbnVsbCwgdGhlbjpcbiAgICBpZiAoaW5pdC5ib2R5ICE9IG51bGwpIHtcbiAgICAgIC8vIDEuIExldCBDb250ZW50LVR5cGUgYmUgbnVsbC5cbiAgICAgIC8vIDIuIFNldCBpbml0Qm9keSBhbmQgQ29udGVudC1UeXBlIHRvIHRoZSByZXN1bHQgb2YgZXh0cmFjdGluZ1xuICAgICAgLy8gaW5pdFtcImJvZHlcIl0sIHdpdGgga2VlcGFsaXZlIHNldCB0byByZXF1ZXN04oCZcyBrZWVwYWxpdmUuXG4gICAgICBjb25zdCBbZXh0cmFjdGVkQm9keSwgY29udGVudFR5cGVdID0gZXh0cmFjdEJvZHkoXG4gICAgICAgIGluaXQuYm9keSxcbiAgICAgICAgcmVxdWVzdC5rZWVwYWxpdmVcbiAgICAgIClcbiAgICAgIGluaXRCb2R5ID0gZXh0cmFjdGVkQm9keVxuXG4gICAgICAvLyAzLCBJZiBDb250ZW50LVR5cGUgaXMgbm9uLW51bGwgYW5kIHRoaXPigJlzIGhlYWRlcnPigJlzIGhlYWRlciBsaXN0IGRvZXNcbiAgICAgIC8vIG5vdCBjb250YWluIGBDb250ZW50LVR5cGVgLCB0aGVuIGFwcGVuZCBgQ29udGVudC1UeXBlYC9Db250ZW50LVR5cGUgdG9cbiAgICAgIC8vIHRoaXPigJlzIGhlYWRlcnMuXG4gICAgICBpZiAoY29udGVudFR5cGUgJiYgIXRoaXNba0hlYWRlcnNdW2tIZWFkZXJzTGlzdF0uY29udGFpbnMoJ2NvbnRlbnQtdHlwZScpKSB7XG4gICAgICAgIHRoaXNba0hlYWRlcnNdLmFwcGVuZCgnY29udGVudC10eXBlJywgY29udGVudFR5cGUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gMzcuIExldCBpbnB1dE9ySW5pdEJvZHkgYmUgaW5pdEJvZHkgaWYgaXQgaXMgbm9uLW51bGw7IG90aGVyd2lzZVxuICAgIC8vIGlucHV0Qm9keS5cbiAgICBjb25zdCBpbnB1dE9ySW5pdEJvZHkgPSBpbml0Qm9keSA/PyBpbnB1dEJvZHlcblxuICAgIC8vIDM4LiBJZiBpbnB1dE9ySW5pdEJvZHkgaXMgbm9uLW51bGwgYW5kIGlucHV0T3JJbml0Qm9keeKAmXMgc291cmNlIGlzXG4gICAgLy8gbnVsbCwgdGhlbjpcbiAgICBpZiAoaW5wdXRPckluaXRCb2R5ICE9IG51bGwgJiYgaW5wdXRPckluaXRCb2R5LnNvdXJjZSA9PSBudWxsKSB7XG4gICAgICAvLyAxLiBJZiBpbml0Qm9keSBpcyBub24tbnVsbCBhbmQgaW5pdFtcImR1cGxleFwiXSBkb2VzIG5vdCBleGlzdCxcbiAgICAgIC8vICAgIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICBpZiAoaW5pdEJvZHkgIT0gbnVsbCAmJiBpbml0LmR1cGxleCA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlcXVlc3RJbml0OiBkdXBsZXggb3B0aW9uIGlzIHJlcXVpcmVkIHdoZW4gc2VuZGluZyBhIGJvZHkuJylcbiAgICAgIH1cblxuICAgICAgLy8gMi4gSWYgdGhpc+KAmXMgcmVxdWVzdOKAmXMgbW9kZSBpcyBuZWl0aGVyIFwic2FtZS1vcmlnaW5cIiBub3IgXCJjb3JzXCIsXG4gICAgICAvLyB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgaWYgKHJlcXVlc3QubW9kZSAhPT0gJ3NhbWUtb3JpZ2luJyAmJiByZXF1ZXN0Lm1vZGUgIT09ICdjb3JzJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICdJZiByZXF1ZXN0IGlzIG1hZGUgZnJvbSBSZWFkYWJsZVN0cmVhbSwgbW9kZSBzaG91bGQgYmUgXCJzYW1lLW9yaWdpblwiIG9yIFwiY29yc1wiJ1xuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIC8vIDMuIFNldCB0aGlz4oCZcyByZXF1ZXN04oCZcyB1c2UtQ09SUy1wcmVmbGlnaHQgZmxhZy5cbiAgICAgIHJlcXVlc3QudXNlQ09SU1ByZWZsaWdodEZsYWcgPSB0cnVlXG4gICAgfVxuXG4gICAgLy8gMzkuIExldCBmaW5hbEJvZHkgYmUgaW5wdXRPckluaXRCb2R5LlxuICAgIGxldCBmaW5hbEJvZHkgPSBpbnB1dE9ySW5pdEJvZHlcblxuICAgIC8vIDQwLiBJZiBpbml0Qm9keSBpcyBudWxsIGFuZCBpbnB1dEJvZHkgaXMgbm9uLW51bGwsIHRoZW46XG4gICAgaWYgKGluaXRCb2R5ID09IG51bGwgJiYgaW5wdXRCb2R5ICE9IG51bGwpIHtcbiAgICAgIC8vIDEuIElmIGlucHV0IGlzIHVudXNhYmxlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgaWYgKHV0aWwuaXNEaXN0dXJiZWQoaW5wdXRCb2R5LnN0cmVhbSkgfHwgaW5wdXRCb2R5LnN0cmVhbS5sb2NrZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAnQ2Fubm90IGNvbnN0cnVjdCBhIFJlcXVlc3Qgd2l0aCBhIFJlcXVlc3Qgb2JqZWN0IHRoYXQgaGFzIGFscmVhZHkgYmVlbiB1c2VkLidcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICAvLyAyLiBTZXQgZmluYWxCb2R5IHRvIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYSBwcm94eSBmb3IgaW5wdXRCb2R5LlxuICAgICAgaWYgKCFUcmFuc2Zvcm1TdHJlYW0pIHtcbiAgICAgICAgVHJhbnNmb3JtU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtL3dlYicpLlRyYW5zZm9ybVN0cmVhbVxuICAgICAgfVxuXG4gICAgICAvLyBodHRwczovL3N0cmVhbXMuc3BlYy53aGF0d2cub3JnLyNyZWFkYWJsZXN0cmVhbS1jcmVhdGUtYS1wcm94eVxuICAgICAgY29uc3QgaWRlbnRpdHlUcmFuc2Zvcm0gPSBuZXcgVHJhbnNmb3JtU3RyZWFtKClcbiAgICAgIGlucHV0Qm9keS5zdHJlYW0ucGlwZVRocm91Z2goaWRlbnRpdHlUcmFuc2Zvcm0pXG4gICAgICBmaW5hbEJvZHkgPSB7XG4gICAgICAgIHNvdXJjZTogaW5wdXRCb2R5LnNvdXJjZSxcbiAgICAgICAgbGVuZ3RoOiBpbnB1dEJvZHkubGVuZ3RoLFxuICAgICAgICBzdHJlYW06IGlkZW50aXR5VHJhbnNmb3JtLnJlYWRhYmxlXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNDEuIFNldCB0aGlz4oCZcyByZXF1ZXN04oCZcyBib2R5IHRvIGZpbmFsQm9keS5cbiAgICB0aGlzW2tTdGF0ZV0uYm9keSA9IGZpbmFsQm9keVxuICB9XG5cbiAgLy8gUmV0dXJucyByZXF1ZXN04oCZcyBIVFRQIG1ldGhvZCwgd2hpY2ggaXMgXCJHRVRcIiBieSBkZWZhdWx0LlxuICBnZXQgbWV0aG9kICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIG1ldGhvZCBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlz4oCZcyByZXF1ZXN04oCZcyBtZXRob2QuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5tZXRob2RcbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIFVSTCBvZiByZXF1ZXN0IGFzIGEgc3RyaW5nLlxuICBnZXQgdXJsICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIHVybCBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlz4oCZcyByZXF1ZXN04oCZcyBVUkwsIHNlcmlhbGl6ZWQuXG4gICAgcmV0dXJuIFVSTFNlcmlhbGl6ZXIodGhpc1trU3RhdGVdLnVybClcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBIZWFkZXJzIG9iamVjdCBjb25zaXN0aW5nIG9mIHRoZSBoZWFkZXJzIGFzc29jaWF0ZWQgd2l0aCByZXF1ZXN0LlxuICAvLyBOb3RlIHRoYXQgaGVhZGVycyBhZGRlZCBpbiB0aGUgbmV0d29yayBsYXllciBieSB0aGUgdXNlciBhZ2VudCB3aWxsIG5vdFxuICAvLyBiZSBhY2NvdW50ZWQgZm9yIGluIHRoaXMgb2JqZWN0LCBlLmcuLCB0aGUgXCJIb3N0XCIgaGVhZGVyLlxuICBnZXQgaGVhZGVycyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBoZWFkZXJzIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXPigJlzIGhlYWRlcnMuXG4gICAgcmV0dXJuIHRoaXNba0hlYWRlcnNdXG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSBraW5kIG9mIHJlc291cmNlIHJlcXVlc3RlZCBieSByZXF1ZXN0LCBlLmcuLCBcImRvY3VtZW50XCJcbiAgLy8gb3IgXCJzY3JpcHRcIi5cbiAgZ2V0IGRlc3RpbmF0aW9uICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIGRlc3RpbmF0aW9uIGdldHRlciBhcmUgdG8gcmV0dXJuIHRoaXPigJlzIHJlcXVlc3TigJlzIGRlc3RpbmF0aW9uLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uZGVzdGluYXRpb25cbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIHJlZmVycmVyIG9mIHJlcXVlc3QuIEl0cyB2YWx1ZSBjYW4gYmUgYSBzYW1lLW9yaWdpbiBVUkwgaWZcbiAgLy8gZXhwbGljaXRseSBzZXQgaW4gaW5pdCwgdGhlIGVtcHR5IHN0cmluZyB0byBpbmRpY2F0ZSBubyByZWZlcnJlciwgYW5kXG4gIC8vIFwiYWJvdXQ6Y2xpZW50XCIgd2hlbiBkZWZhdWx0aW5nIHRvIHRoZSBnbG9iYWzigJlzIGRlZmF1bHQuIFRoaXMgaXMgdXNlZFxuICAvLyBkdXJpbmcgZmV0Y2hpbmcgdG8gZGV0ZXJtaW5lIHRoZSB2YWx1ZSBvZiB0aGUgYFJlZmVyZXJgIGhlYWRlciBvZiB0aGVcbiAgLy8gcmVxdWVzdCBiZWluZyBtYWRlLlxuICBnZXQgcmVmZXJyZXIgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyAxLiBJZiB0aGlz4oCZcyByZXF1ZXN04oCZcyByZWZlcnJlciBpcyBcIm5vLXJlZmVycmVyXCIsIHRoZW4gcmV0dXJuIHRoZVxuICAgIC8vIGVtcHR5IHN0cmluZy5cbiAgICBpZiAodGhpc1trU3RhdGVdLnJlZmVycmVyID09PSAnbm8tcmVmZXJyZXInKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG5cbiAgICAvLyAyLiBJZiB0aGlz4oCZcyByZXF1ZXN04oCZcyByZWZlcnJlciBpcyBcImNsaWVudFwiLCB0aGVuIHJldHVyblxuICAgIC8vIFwiYWJvdXQ6Y2xpZW50XCIuXG4gICAgaWYgKHRoaXNba1N0YXRlXS5yZWZlcnJlciA9PT0gJ2NsaWVudCcpIHtcbiAgICAgIHJldHVybiAnYWJvdXQ6Y2xpZW50J1xuICAgIH1cblxuICAgIC8vIFJldHVybiB0aGlz4oCZcyByZXF1ZXN04oCZcyByZWZlcnJlciwgc2VyaWFsaXplZC5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnJlZmVycmVyLnRvU3RyaW5nKClcbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIHJlZmVycmVyIHBvbGljeSBhc3NvY2lhdGVkIHdpdGggcmVxdWVzdC5cbiAgLy8gVGhpcyBpcyB1c2VkIGR1cmluZyBmZXRjaGluZyB0byBjb21wdXRlIHRoZSB2YWx1ZSBvZiB0aGUgcmVxdWVzdOKAmXNcbiAgLy8gcmVmZXJyZXIuXG4gIGdldCByZWZlcnJlclBvbGljeSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSByZWZlcnJlclBvbGljeSBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlz4oCZcyByZXF1ZXN04oCZcyByZWZlcnJlciBwb2xpY3kuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5yZWZlcnJlclBvbGljeVxuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgbW9kZSBhc3NvY2lhdGVkIHdpdGggcmVxdWVzdCwgd2hpY2ggaXMgYSBzdHJpbmcgaW5kaWNhdGluZ1xuICAvLyB3aGV0aGVyIHRoZSByZXF1ZXN0IHdpbGwgdXNlIENPUlMsIG9yIHdpbGwgYmUgcmVzdHJpY3RlZCB0byBzYW1lLW9yaWdpblxuICAvLyBVUkxzLlxuICBnZXQgbW9kZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBtb2RlIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXPigJlzIHJlcXVlc3TigJlzIG1vZGUuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5tb2RlXG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSBjcmVkZW50aWFscyBtb2RlIGFzc29jaWF0ZWQgd2l0aCByZXF1ZXN0LFxuICAvLyB3aGljaCBpcyBhIHN0cmluZyBpbmRpY2F0aW5nIHdoZXRoZXIgY3JlZGVudGlhbHMgd2lsbCBiZSBzZW50IHdpdGggdGhlXG4gIC8vIHJlcXVlc3QgYWx3YXlzLCBuZXZlciwgb3Igb25seSB3aGVuIHNlbnQgdG8gYSBzYW1lLW9yaWdpbiBVUkwuXG4gIGdldCBjcmVkZW50aWFscyAoKSB7XG4gICAgLy8gVGhlIGNyZWRlbnRpYWxzIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXPigJlzIHJlcXVlc3TigJlzIGNyZWRlbnRpYWxzIG1vZGUuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5jcmVkZW50aWFsc1xuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgY2FjaGUgbW9kZSBhc3NvY2lhdGVkIHdpdGggcmVxdWVzdCxcbiAgLy8gd2hpY2ggaXMgYSBzdHJpbmcgaW5kaWNhdGluZyBob3cgdGhlIHJlcXVlc3Qgd2lsbFxuICAvLyBpbnRlcmFjdCB3aXRoIHRoZSBicm93c2Vy4oCZcyBjYWNoZSB3aGVuIGZldGNoaW5nLlxuICBnZXQgY2FjaGUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgY2FjaGUgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc+KAmXMgcmVxdWVzdOKAmXMgY2FjaGUgbW9kZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmNhY2hlXG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSByZWRpcmVjdCBtb2RlIGFzc29jaWF0ZWQgd2l0aCByZXF1ZXN0LFxuICAvLyB3aGljaCBpcyBhIHN0cmluZyBpbmRpY2F0aW5nIGhvdyByZWRpcmVjdHMgZm9yIHRoZVxuICAvLyByZXF1ZXN0IHdpbGwgYmUgaGFuZGxlZCBkdXJpbmcgZmV0Y2hpbmcuIEEgcmVxdWVzdFxuICAvLyB3aWxsIGZvbGxvdyByZWRpcmVjdHMgYnkgZGVmYXVsdC5cbiAgZ2V0IHJlZGlyZWN0ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIHJlZGlyZWN0IGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXPigJlzIHJlcXVlc3TigJlzIHJlZGlyZWN0IG1vZGUuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5yZWRpcmVjdFxuICB9XG5cbiAgLy8gUmV0dXJucyByZXF1ZXN04oCZcyBzdWJyZXNvdXJjZSBpbnRlZ3JpdHkgbWV0YWRhdGEsIHdoaWNoIGlzIGFcbiAgLy8gY3J5cHRvZ3JhcGhpYyBoYXNoIG9mIHRoZSByZXNvdXJjZSBiZWluZyBmZXRjaGVkLiBJdHMgdmFsdWVcbiAgLy8gY29uc2lzdHMgb2YgbXVsdGlwbGUgaGFzaGVzIHNlcGFyYXRlZCBieSB3aGl0ZXNwYWNlLiBbU1JJXVxuICBnZXQgaW50ZWdyaXR5ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIGludGVncml0eSBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlz4oCZcyByZXF1ZXN04oCZcyBpbnRlZ3JpdHlcbiAgICAvLyBtZXRhZGF0YS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmludGVncml0eVxuICB9XG5cbiAgLy8gUmV0dXJucyBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCByZXF1ZXN0IGNhbiBvdXRsaXZlIHRoZVxuICAvLyBnbG9iYWwgaW4gd2hpY2ggaXQgd2FzIGNyZWF0ZWQuXG4gIGdldCBrZWVwYWxpdmUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUga2VlcGFsaXZlIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXPigJlzIHJlcXVlc3TigJlzIGtlZXBhbGl2ZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmtlZXBhbGl2ZVxuICB9XG5cbiAgLy8gUmV0dXJucyBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCByZXF1ZXN0IGlzIGZvciBhIHJlbG9hZFxuICAvLyBuYXZpZ2F0aW9uLlxuICBnZXQgaXNSZWxvYWROYXZpZ2F0aW9uICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIGlzUmVsb2FkTmF2aWdhdGlvbiBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0cnVlIGlmIHRoaXPigJlzXG4gICAgLy8gcmVxdWVzdOKAmXMgcmVsb2FkLW5hdmlnYXRpb24gZmxhZyBpcyBzZXQ7IG90aGVyd2lzZSBmYWxzZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnJlbG9hZE5hdmlnYXRpb25cbiAgfVxuXG4gIC8vIFJldHVybnMgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgcmVxdWVzdCBpcyBmb3IgYSBoaXN0b3J5XG4gIC8vIG5hdmlnYXRpb24gKGEuay5hLiBiYWNrLWZvd2FyZCBuYXZpZ2F0aW9uKS5cbiAgZ2V0IGlzSGlzdG9yeU5hdmlnYXRpb24gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgaXNIaXN0b3J5TmF2aWdhdGlvbiBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0cnVlIGlmIHRoaXPigJlzIHJlcXVlc3TigJlzXG4gICAgLy8gaGlzdG9yeS1uYXZpZ2F0aW9uIGZsYWcgaXMgc2V0OyBvdGhlcndpc2UgZmFsc2UuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5oaXN0b3J5TmF2aWdhdGlvblxuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgc2lnbmFsIGFzc29jaWF0ZWQgd2l0aCByZXF1ZXN0LCB3aGljaCBpcyBhbiBBYm9ydFNpZ25hbFxuICAvLyBvYmplY3QgaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCByZXF1ZXN0IGhhcyBiZWVuIGFib3J0ZWQsIGFuZCBpdHNcbiAgLy8gYWJvcnQgZXZlbnQgaGFuZGxlci5cbiAgZ2V0IHNpZ25hbCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBzaWduYWwgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc+KAmXMgc2lnbmFsLlxuICAgIHJldHVybiB0aGlzW2tTaWduYWxdXG4gIH1cblxuICBnZXQgYm9keSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uYm9keSA/IHRoaXNba1N0YXRlXS5ib2R5LnN0cmVhbSA6IG51bGxcbiAgfVxuXG4gIGdldCBib2R5VXNlZCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIHJldHVybiAhIXRoaXNba1N0YXRlXS5ib2R5ICYmIHV0aWwuaXNEaXN0dXJiZWQodGhpc1trU3RhdGVdLmJvZHkuc3RyZWFtKVxuICB9XG5cbiAgZ2V0IGR1cGxleCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIHJldHVybiAnaGFsZidcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBjbG9uZSBvZiByZXF1ZXN0LlxuICBjbG9uZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIDEuIElmIHRoaXMgaXMgdW51c2FibGUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKHRoaXMuYm9keVVzZWQgfHwgdGhpcy5ib2R5Py5sb2NrZWQpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3VudXNhYmxlJylcbiAgICB9XG5cbiAgICAvLyAyLiBMZXQgY2xvbmVkUmVxdWVzdCBiZSB0aGUgcmVzdWx0IG9mIGNsb25pbmcgdGhpc+KAmXMgcmVxdWVzdC5cbiAgICBjb25zdCBjbG9uZWRSZXF1ZXN0ID0gY2xvbmVSZXF1ZXN0KHRoaXNba1N0YXRlXSlcblxuICAgIC8vIDMuIExldCBjbG9uZWRSZXF1ZXN0T2JqZWN0IGJlIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYSBSZXF1ZXN0IG9iamVjdCxcbiAgICAvLyBnaXZlbiBjbG9uZWRSZXF1ZXN0LCB0aGlz4oCZcyBoZWFkZXJz4oCZcyBndWFyZCwgYW5kIHRoaXPigJlzIHJlbGV2YW50IFJlYWxtLlxuICAgIGNvbnN0IGNsb25lZFJlcXVlc3RPYmplY3QgPSBuZXcgUmVxdWVzdChrQ29uc3RydWN0KVxuICAgIGNsb25lZFJlcXVlc3RPYmplY3Rba1N0YXRlXSA9IGNsb25lZFJlcXVlc3RcbiAgICBjbG9uZWRSZXF1ZXN0T2JqZWN0W2tSZWFsbV0gPSB0aGlzW2tSZWFsbV1cbiAgICBjbG9uZWRSZXF1ZXN0T2JqZWN0W2tIZWFkZXJzXSA9IG5ldyBIZWFkZXJzKGtDb25zdHJ1Y3QpXG4gICAgY2xvbmVkUmVxdWVzdE9iamVjdFtrSGVhZGVyc11ba0hlYWRlcnNMaXN0XSA9IGNsb25lZFJlcXVlc3QuaGVhZGVyc0xpc3RcbiAgICBjbG9uZWRSZXF1ZXN0T2JqZWN0W2tIZWFkZXJzXVtrR3VhcmRdID0gdGhpc1trSGVhZGVyc11ba0d1YXJkXVxuICAgIGNsb25lZFJlcXVlc3RPYmplY3Rba0hlYWRlcnNdW2tSZWFsbV0gPSB0aGlzW2tIZWFkZXJzXVtrUmVhbG1dXG5cbiAgICAvLyA0LiBNYWtlIGNsb25lZFJlcXVlc3RPYmplY3TigJlzIHNpZ25hbCBmb2xsb3cgdGhpc+KAmXMgc2lnbmFsLlxuICAgIGNvbnN0IGFjID0gbmV3IEFib3J0Q29udHJvbGxlcigpXG4gICAgaWYgKHRoaXMuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgIGFjLmFib3J0KHRoaXMuc2lnbmFsLnJlYXNvbilcbiAgICB9IGVsc2Uge1xuICAgICAgdXRpbC5hZGRBYm9ydExpc3RlbmVyKFxuICAgICAgICB0aGlzLnNpZ25hbCxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIGFjLmFib3J0KHRoaXMuc2lnbmFsLnJlYXNvbilcbiAgICAgICAgfVxuICAgICAgKVxuICAgIH1cbiAgICBjbG9uZWRSZXF1ZXN0T2JqZWN0W2tTaWduYWxdID0gYWMuc2lnbmFsXG5cbiAgICAvLyA0LiBSZXR1cm4gY2xvbmVkUmVxdWVzdE9iamVjdC5cbiAgICByZXR1cm4gY2xvbmVkUmVxdWVzdE9iamVjdFxuICB9XG59XG5cbm1peGluQm9keShSZXF1ZXN0KVxuXG5mdW5jdGlvbiBtYWtlUmVxdWVzdCAoaW5pdCkge1xuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdHNcbiAgY29uc3QgcmVxdWVzdCA9IHtcbiAgICBtZXRob2Q6ICdHRVQnLFxuICAgIGxvY2FsVVJMc09ubHk6IGZhbHNlLFxuICAgIHVuc2FmZVJlcXVlc3Q6IGZhbHNlLFxuICAgIGJvZHk6IG51bGwsXG4gICAgY2xpZW50OiBudWxsLFxuICAgIHJlc2VydmVkQ2xpZW50OiBudWxsLFxuICAgIHJlcGxhY2VzQ2xpZW50SWQ6ICcnLFxuICAgIHdpbmRvdzogJ2NsaWVudCcsXG4gICAga2VlcGFsaXZlOiBmYWxzZSxcbiAgICBzZXJ2aWNlV29ya2VyczogJ2FsbCcsXG4gICAgaW5pdGlhdG9yOiAnJyxcbiAgICBkZXN0aW5hdGlvbjogJycsXG4gICAgcHJpb3JpdHk6IG51bGwsXG4gICAgb3JpZ2luOiAnY2xpZW50JyxcbiAgICBwb2xpY3lDb250YWluZXI6ICdjbGllbnQnLFxuICAgIHJlZmVycmVyOiAnY2xpZW50JyxcbiAgICByZWZlcnJlclBvbGljeTogJycsXG4gICAgbW9kZTogJ25vLWNvcnMnLFxuICAgIHVzZUNPUlNQcmVmbGlnaHRGbGFnOiBmYWxzZSxcbiAgICBjcmVkZW50aWFsczogJ3NhbWUtb3JpZ2luJyxcbiAgICB1c2VDcmVkZW50aWFsczogZmFsc2UsXG4gICAgY2FjaGU6ICdkZWZhdWx0JyxcbiAgICByZWRpcmVjdDogJ2ZvbGxvdycsXG4gICAgaW50ZWdyaXR5OiAnJyxcbiAgICBjcnlwdG9HcmFwaGljc05vbmNlTWV0YWRhdGE6ICcnLFxuICAgIHBhcnNlck1ldGFkYXRhOiAnJyxcbiAgICByZWxvYWROYXZpZ2F0aW9uOiBmYWxzZSxcbiAgICBoaXN0b3J5TmF2aWdhdGlvbjogZmFsc2UsXG4gICAgdXNlckFjdGl2YXRpb246IGZhbHNlLFxuICAgIHRhaW50ZWRPcmlnaW46IGZhbHNlLFxuICAgIHJlZGlyZWN0Q291bnQ6IDAsXG4gICAgcmVzcG9uc2VUYWludGluZzogJ2Jhc2ljJyxcbiAgICBwcmV2ZW50Tm9DYWNoZUNhY2hlQ29udHJvbEhlYWRlck1vZGlmaWNhdGlvbjogZmFsc2UsXG4gICAgZG9uZTogZmFsc2UsXG4gICAgdGltaW5nQWxsb3dGYWlsZWQ6IGZhbHNlLFxuICAgIC4uLmluaXQsXG4gICAgaGVhZGVyc0xpc3Q6IGluaXQuaGVhZGVyc0xpc3RcbiAgICAgID8gbmV3IEhlYWRlcnNMaXN0KGluaXQuaGVhZGVyc0xpc3QpXG4gICAgICA6IG5ldyBIZWFkZXJzTGlzdCgpXG4gIH1cbiAgcmVxdWVzdC51cmwgPSByZXF1ZXN0LnVybExpc3RbMF1cbiAgcmV0dXJuIHJlcXVlc3Rcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtcmVxdWVzdC1jbG9uZVxuZnVuY3Rpb24gY2xvbmVSZXF1ZXN0IChyZXF1ZXN0KSB7XG4gIC8vIFRvIGNsb25lIGEgcmVxdWVzdCByZXF1ZXN0LCBydW4gdGhlc2Ugc3RlcHM6XG5cbiAgLy8gMS4gTGV0IG5ld1JlcXVlc3QgYmUgYSBjb3B5IG9mIHJlcXVlc3QsIGV4Y2VwdCBmb3IgaXRzIGJvZHkuXG4gIGNvbnN0IG5ld1JlcXVlc3QgPSBtYWtlUmVxdWVzdCh7IC4uLnJlcXVlc3QsIGJvZHk6IG51bGwgfSlcblxuICAvLyAyLiBJZiByZXF1ZXN04oCZcyBib2R5IGlzIG5vbi1udWxsLCBzZXQgbmV3UmVxdWVzdOKAmXMgYm9keSB0byB0aGVcbiAgLy8gcmVzdWx0IG9mIGNsb25pbmcgcmVxdWVzdOKAmXMgYm9keS5cbiAgaWYgKHJlcXVlc3QuYm9keSAhPSBudWxsKSB7XG4gICAgbmV3UmVxdWVzdC5ib2R5ID0gY2xvbmVCb2R5KHJlcXVlc3QuYm9keSlcbiAgfVxuXG4gIC8vIDMuIFJldHVybiBuZXdSZXF1ZXN0LlxuICByZXR1cm4gbmV3UmVxdWVzdFxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhSZXF1ZXN0LnByb3RvdHlwZSwge1xuICBtZXRob2Q6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHVybDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgaGVhZGVyczoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcmVkaXJlY3Q6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNsb25lOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBzaWduYWw6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGR1cGxleDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZGVzdGluYXRpb246IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGJvZHk6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGJvZHlVc2VkOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBpc0hpc3RvcnlOYXZpZ2F0aW9uOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBpc1JlbG9hZE5hdmlnYXRpb246IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGtlZXBhbGl2ZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgaW50ZWdyaXR5OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBjYWNoZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgY3JlZGVudGlhbHM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGF0dHJpYnV0ZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcmVmZXJyZXJQb2xpY3k6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlZmVycmVyOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBtb2RlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnUmVxdWVzdCcsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH1cbn0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3QgPSB3ZWJpZGwuaW50ZXJmYWNlQ29udmVydGVyKFxuICBSZXF1ZXN0XG4pXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXF1ZXN0aW5mb1xud2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluZm8gPSBmdW5jdGlvbiAoVikge1xuICBpZiAodHlwZW9mIFYgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhWKVxuICB9XG5cbiAgaWYgKFYgaW5zdGFuY2VvZiBSZXF1ZXN0KSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3QoVilcbiAgfVxuXG4gIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcoVilcbn1cblxud2ViaWRsLmNvbnZlcnRlcnMuQWJvcnRTaWduYWwgPSB3ZWJpZGwuaW50ZXJmYWNlQ29udmVydGVyKFxuICBBYm9ydFNpZ25hbFxuKVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdGluaXRcbndlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbml0ID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICB7XG4gICAga2V5OiAnbWV0aG9kJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmdcbiAgfSxcbiAge1xuICAgIGtleTogJ2hlYWRlcnMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuSGVhZGVyc0luaXRcbiAgfSxcbiAge1xuICAgIGtleTogJ2JvZHknLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKFxuICAgICAgd2ViaWRsLmNvbnZlcnRlcnMuQm9keUluaXRcbiAgICApXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdyZWZlcnJlcicsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmdcbiAgfSxcbiAge1xuICAgIGtleTogJ3JlZmVycmVyUG9saWN5JyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICAvLyBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLXJlZmVycmVyLXBvbGljeS8jcmVmZXJyZXItcG9saWN5XG4gICAgYWxsb3dlZFZhbHVlczogcmVmZXJyZXJQb2xpY3lcbiAgfSxcbiAge1xuICAgIGtleTogJ21vZGUnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LXJlcXVlc3QtbW9kZVxuICAgIGFsbG93ZWRWYWx1ZXM6IHJlcXVlc3RNb2RlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjcmVkZW50aWFscycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3RjcmVkZW50aWFsc1xuICAgIGFsbG93ZWRWYWx1ZXM6IHJlcXVlc3RDcmVkZW50aWFsc1xuICB9LFxuICB7XG4gICAga2V5OiAnY2FjaGUnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXF1ZXN0Y2FjaGVcbiAgICBhbGxvd2VkVmFsdWVzOiByZXF1ZXN0Q2FjaGVcbiAgfSxcbiAge1xuICAgIGtleTogJ3JlZGlyZWN0JyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdHJlZGlyZWN0XG4gICAgYWxsb3dlZFZhbHVlczogcmVxdWVzdFJlZGlyZWN0XG4gIH0sXG4gIHtcbiAgICBrZXk6ICdpbnRlZ3JpdHknLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdrZWVwYWxpdmUnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhblxuICB9LFxuICB7XG4gICAga2V5OiAnc2lnbmFsJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcihcbiAgICAgIChzaWduYWwpID0+IHdlYmlkbC5jb252ZXJ0ZXJzLkFib3J0U2lnbmFsKFxuICAgICAgICBzaWduYWwsXG4gICAgICAgIHsgc3RyaWN0OiBmYWxzZSB9XG4gICAgICApXG4gICAgKVxuICB9LFxuICB7XG4gICAga2V5OiAnd2luZG93JyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmFueVxuICB9LFxuICB7XG4gICAga2V5OiAnZHVwbGV4JyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICBhbGxvd2VkVmFsdWVzOiByZXF1ZXN0RHVwbGV4XG4gIH1cbl0pXG5cbm1vZHVsZS5leHBvcnRzID0geyBSZXF1ZXN0LCBtYWtlUmVxdWVzdCB9XG4iLAogICAgIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9FdGhhbi1BcnJvd29vZC91bmRpY2ktZmV0Y2hcblxuJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHtcbiAgUmVzcG9uc2UsXG4gIG1ha2VOZXR3b3JrRXJyb3IsXG4gIG1ha2VBcHByb3ByaWF0ZU5ldHdvcmtFcnJvcixcbiAgZmlsdGVyUmVzcG9uc2UsXG4gIG1ha2VSZXNwb25zZVxufSA9IHJlcXVpcmUoJy4vcmVzcG9uc2UnKVxuY29uc3QgeyBIZWFkZXJzIH0gPSByZXF1aXJlKCcuL2hlYWRlcnMnKVxuY29uc3QgeyBSZXF1ZXN0LCBtYWtlUmVxdWVzdCB9ID0gcmVxdWlyZSgnLi9yZXF1ZXN0JylcbmNvbnN0IHpsaWIgPSByZXF1aXJlKCd6bGliJylcbmNvbnN0IHtcbiAgYnl0ZXNNYXRjaCxcbiAgbWFrZVBvbGljeUNvbnRhaW5lcixcbiAgY2xvbmVQb2xpY3lDb250YWluZXIsXG4gIHJlcXVlc3RCYWRQb3J0LFxuICBUQU9DaGVjayxcbiAgYXBwZW5kUmVxdWVzdE9yaWdpbkhlYWRlcixcbiAgcmVzcG9uc2VMb2NhdGlvblVSTCxcbiAgcmVxdWVzdEN1cnJlbnRVUkwsXG4gIHNldFJlcXVlc3RSZWZlcnJlclBvbGljeU9uUmVkaXJlY3QsXG4gIHRyeVVwZ3JhZGVSZXF1ZXN0VG9BUG90ZW50aWFsbHlUcnVzdHdvcnRoeVVSTCxcbiAgY3JlYXRlT3BhcXVlVGltaW5nSW5mbyxcbiAgYXBwZW5kRmV0Y2hNZXRhZGF0YSxcbiAgY29yc0NoZWNrLFxuICBjcm9zc09yaWdpblJlc291cmNlUG9saWN5Q2hlY2ssXG4gIGRldGVybWluZVJlcXVlc3RzUmVmZXJyZXIsXG4gIGNvYXJzZW5lZFNoYXJlZEN1cnJlbnRUaW1lLFxuICBjcmVhdGVEZWZlcnJlZFByb21pc2UsXG4gIGlzQmxvYkxpa2UsXG4gIHNhbWVPcmlnaW4sXG4gIGlzQ2FuY2VsbGVkLFxuICBpc0Fib3J0ZWQsXG4gIGlzRXJyb3JMaWtlLFxuICBmdWxseVJlYWRCb2R5LFxuICByZWFkYWJsZVN0cmVhbUNsb3NlLFxuICBpc29tb3JwaGljRW5jb2RlLFxuICB1cmxJc0xvY2FsLFxuICB1cmxJc0h0dHBIdHRwc1NjaGVtZSxcbiAgdXJsSGFzSHR0cHNTY2hlbWVcbn0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBrU3RhdGUsIGtIZWFkZXJzLCBrR3VhcmQsIGtSZWFsbSB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7IHNhZmVseUV4dHJhY3RCb2R5IH0gPSByZXF1aXJlKCcuL2JvZHknKVxuY29uc3Qge1xuICByZWRpcmVjdFN0YXR1c1NldCxcbiAgbnVsbEJvZHlTdGF0dXMsXG4gIHNhZmVNZXRob2RzU2V0LFxuICByZXF1ZXN0Qm9keUhlYWRlcixcbiAgc3VicmVzb3VyY2VTZXQsXG4gIERPTUV4Y2VwdGlvblxufSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IHsga0hlYWRlcnNMaXN0IH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgRUUgPSByZXF1aXJlKCdldmVudHMnKVxuY29uc3QgeyBSZWFkYWJsZSwgcGlwZWxpbmUgfSA9IHJlcXVpcmUoJ3N0cmVhbScpXG5jb25zdCB7IGFkZEFib3J0TGlzdGVuZXIsIGlzRXJyb3JlZCwgaXNSZWFkYWJsZSwgbm9kZU1ham9yLCBub2RlTWlub3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGRhdGFVUkxQcm9jZXNzb3IsIHNlcmlhbGl6ZUFNaW1lVHlwZSB9ID0gcmVxdWlyZSgnLi9kYXRhVVJMJylcbmNvbnN0IHsgVHJhbnNmb3JtU3RyZWFtIH0gPSByZXF1aXJlKCdzdHJlYW0vd2ViJylcbmNvbnN0IHsgZ2V0R2xvYmFsRGlzcGF0Y2hlciB9ID0gcmVxdWlyZSgnLi4vZ2xvYmFsJylcbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuL3dlYmlkbCcpXG5jb25zdCB7IFNUQVRVU19DT0RFUyB9ID0gcmVxdWlyZSgnaHR0cCcpXG5jb25zdCBHRVRfT1JfSEVBRCA9IFsnR0VUJywgJ0hFQUQnXVxuXG4vKiogQHR5cGUge2ltcG9ydCgnYnVmZmVyJykucmVzb2x2ZU9iamVjdFVSTH0gKi9cbmxldCByZXNvbHZlT2JqZWN0VVJMXG5sZXQgUmVhZGFibGVTdHJlYW0gPSBnbG9iYWxUaGlzLlJlYWRhYmxlU3RyZWFtXG5cbmNsYXNzIEZldGNoIGV4dGVuZHMgRUUge1xuICBjb25zdHJ1Y3RvciAoZGlzcGF0Y2hlcikge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXMuZGlzcGF0Y2hlciA9IGRpc3BhdGNoZXJcbiAgICB0aGlzLmNvbm5lY3Rpb24gPSBudWxsXG4gICAgdGhpcy5kdW1wID0gZmFsc2VcbiAgICB0aGlzLnN0YXRlID0gJ29uZ29pbmcnXG4gICAgLy8gMiB0ZXJtaW5hdGVkIGxpc3RlbmVycyBnZXQgYWRkZWQgcGVyIHJlcXVlc3QsXG4gICAgLy8gYnV0IG9ubHkgMSBnZXRzIHJlbW92ZWQuIElmIHRoZXJlIGFyZSAyMCByZWRpcmVjdHMsXG4gICAgLy8gMjEgbGlzdGVuZXJzIHdpbGwgYmUgYWRkZWQuXG4gICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8xNzExXG4gICAgLy8gVE9ETyAoZml4KTogRmluZCBhbmQgZml4IHJvb3QgY2F1c2UgZm9yIGxlYWtlZCBsaXN0ZW5lci5cbiAgICB0aGlzLnNldE1heExpc3RlbmVycygyMSlcbiAgfVxuXG4gIHRlcm1pbmF0ZSAocmVhc29uKSB7XG4gICAgaWYgKHRoaXMuc3RhdGUgIT09ICdvbmdvaW5nJykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5zdGF0ZSA9ICd0ZXJtaW5hdGVkJ1xuICAgIHRoaXMuY29ubmVjdGlvbj8uZGVzdHJveShyZWFzb24pXG4gICAgdGhpcy5lbWl0KCd0ZXJtaW5hdGVkJywgcmVhc29uKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2ZldGNoLWNvbnRyb2xsZXItYWJvcnRcbiAgYWJvcnQgKGVycm9yKSB7XG4gICAgaWYgKHRoaXMuc3RhdGUgIT09ICdvbmdvaW5nJykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gMS4gU2V0IGNvbnRyb2xsZXLigJlzIHN0YXRlIHRvIFwiYWJvcnRlZFwiLlxuICAgIHRoaXMuc3RhdGUgPSAnYWJvcnRlZCdcblxuICAgIC8vIDIuIExldCBmYWxsYmFja0Vycm9yIGJlIGFuIFwiQWJvcnRFcnJvclwiIERPTUV4Y2VwdGlvbi5cbiAgICAvLyAzLiBTZXQgZXJyb3IgdG8gZmFsbGJhY2tFcnJvciBpZiBpdCBpcyBub3QgZ2l2ZW4uXG4gICAgaWYgKCFlcnJvcikge1xuICAgICAgZXJyb3IgPSBuZXcgRE9NRXhjZXB0aW9uKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLicsICdBYm9ydEVycm9yJylcbiAgICB9XG5cbiAgICAvLyA0LiBMZXQgc2VyaWFsaXplZEVycm9yIGJlIFN0cnVjdHVyZWRTZXJpYWxpemUoZXJyb3IpLlxuICAgIC8vICAgIElmIHRoYXQgdGhyZXcgYW4gZXhjZXB0aW9uLCBjYXRjaCBpdCwgYW5kIGxldFxuICAgIC8vICAgIHNlcmlhbGl6ZWRFcnJvciBiZSBTdHJ1Y3R1cmVkU2VyaWFsaXplKGZhbGxiYWNrRXJyb3IpLlxuXG4gICAgLy8gNS4gU2V0IGNvbnRyb2xsZXLigJlzIHNlcmlhbGl6ZWQgYWJvcnQgcmVhc29uIHRvIHNlcmlhbGl6ZWRFcnJvci5cbiAgICB0aGlzLnNlcmlhbGl6ZWRBYm9ydFJlYXNvbiA9IGVycm9yXG5cbiAgICB0aGlzLmNvbm5lY3Rpb24/LmRlc3Ryb3koZXJyb3IpXG4gICAgdGhpcy5lbWl0KCd0ZXJtaW5hdGVkJywgZXJyb3IpXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2ZldGNoLW1ldGhvZFxuZnVuY3Rpb24gZmV0Y2ggKGlucHV0LCBpbml0ID0ge30pIHtcbiAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ2dsb2JhbFRoaXMuZmV0Y2gnIH0pXG5cbiAgLy8gMS4gTGV0IHAgYmUgYSBuZXcgcHJvbWlzZS5cbiAgY29uc3QgcCA9IGNyZWF0ZURlZmVycmVkUHJvbWlzZSgpXG5cbiAgLy8gMi4gTGV0IHJlcXVlc3RPYmplY3QgYmUgdGhlIHJlc3VsdCBvZiBpbnZva2luZyB0aGUgaW5pdGlhbCB2YWx1ZSBvZlxuICAvLyBSZXF1ZXN0IGFzIGNvbnN0cnVjdG9yIHdpdGggaW5wdXQgYW5kIGluaXQgYXMgYXJndW1lbnRzLiBJZiB0aGlzIHRocm93c1xuICAvLyBhbiBleGNlcHRpb24sIHJlamVjdCBwIHdpdGggaXQgYW5kIHJldHVybiBwLlxuICBsZXQgcmVxdWVzdE9iamVjdFxuXG4gIHRyeSB7XG4gICAgcmVxdWVzdE9iamVjdCA9IG5ldyBSZXF1ZXN0KGlucHV0LCBpbml0KVxuICB9IGNhdGNoIChlKSB7XG4gICAgcC5yZWplY3QoZSlcbiAgICByZXR1cm4gcC5wcm9taXNlXG4gIH1cblxuICAvLyAzLiBMZXQgcmVxdWVzdCBiZSByZXF1ZXN0T2JqZWN04oCZcyByZXF1ZXN0LlxuICBjb25zdCByZXF1ZXN0ID0gcmVxdWVzdE9iamVjdFtrU3RhdGVdXG5cbiAgLy8gNC4gSWYgcmVxdWVzdE9iamVjdOKAmXMgc2lnbmFs4oCZcyBhYm9ydGVkIGZsYWcgaXMgc2V0LCB0aGVuOlxuICBpZiAocmVxdWVzdE9iamVjdC5zaWduYWwuYWJvcnRlZCkge1xuICAgIC8vIDEuIEFib3J0IHRoZSBmZXRjaCgpIGNhbGwgd2l0aCBwLCByZXF1ZXN0LCBudWxsLCBhbmRcbiAgICAvLyAgICByZXF1ZXN0T2JqZWN04oCZcyBzaWduYWzigJlzIGFib3J0IHJlYXNvbi5cbiAgICBhYm9ydEZldGNoKHAsIHJlcXVlc3QsIG51bGwsIHJlcXVlc3RPYmplY3Quc2lnbmFsLnJlYXNvbilcblxuICAgIC8vIDIuIFJldHVybiBwLlxuICAgIHJldHVybiBwLnByb21pc2VcbiAgfVxuXG4gIC8vIDUuIExldCBnbG9iYWxPYmplY3QgYmUgcmVxdWVzdOKAmXMgY2xpZW504oCZcyBnbG9iYWwgb2JqZWN0LlxuICBjb25zdCBnbG9iYWxPYmplY3QgPSByZXF1ZXN0LmNsaWVudC5nbG9iYWxPYmplY3RcblxuICAvLyA2LiBJZiBnbG9iYWxPYmplY3QgaXMgYSBTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUgb2JqZWN0LCB0aGVuIHNldFxuICAvLyByZXF1ZXN04oCZcyBzZXJ2aWNlLXdvcmtlcnMgbW9kZSB0byBcIm5vbmVcIi5cbiAgaWYgKGdsb2JhbE9iamVjdD8uY29uc3RydWN0b3I/Lm5hbWUgPT09ICdTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUnKSB7XG4gICAgcmVxdWVzdC5zZXJ2aWNlV29ya2VycyA9ICdub25lJ1xuICB9XG5cbiAgLy8gNy4gTGV0IHJlc3BvbnNlT2JqZWN0IGJlIG51bGwuXG4gIGxldCByZXNwb25zZU9iamVjdCA9IG51bGxcblxuICAvLyA4LiBMZXQgcmVsZXZhbnRSZWFsbSBiZSB0aGlz4oCZcyByZWxldmFudCBSZWFsbS5cbiAgY29uc3QgcmVsZXZhbnRSZWFsbSA9IG51bGxcblxuICAvLyA5LiBMZXQgbG9jYWxseUFib3J0ZWQgYmUgZmFsc2UuXG4gIGxldCBsb2NhbGx5QWJvcnRlZCA9IGZhbHNlXG5cbiAgLy8gMTAuIExldCBjb250cm9sbGVyIGJlIG51bGwuXG4gIGxldCBjb250cm9sbGVyID0gbnVsbFxuXG4gIC8vIDExLiBBZGQgdGhlIGZvbGxvd2luZyBhYm9ydCBzdGVwcyB0byByZXF1ZXN0T2JqZWN04oCZcyBzaWduYWw6XG4gIGFkZEFib3J0TGlzdGVuZXIoXG4gICAgcmVxdWVzdE9iamVjdC5zaWduYWwsXG4gICAgKCkgPT4ge1xuICAgICAgLy8gMS4gU2V0IGxvY2FsbHlBYm9ydGVkIHRvIHRydWUuXG4gICAgICBsb2NhbGx5QWJvcnRlZCA9IHRydWVcblxuICAgICAgLy8gMi4gQXNzZXJ0OiBjb250cm9sbGVyIGlzIG5vbi1udWxsLlxuICAgICAgYXNzZXJ0KGNvbnRyb2xsZXIgIT0gbnVsbClcblxuICAgICAgLy8gMy4gQWJvcnQgY29udHJvbGxlciB3aXRoIHJlcXVlc3RPYmplY3TigJlzIHNpZ25hbOKAmXMgYWJvcnQgcmVhc29uLlxuICAgICAgY29udHJvbGxlci5hYm9ydChyZXF1ZXN0T2JqZWN0LnNpZ25hbC5yZWFzb24pXG5cbiAgICAgIC8vIDQuIEFib3J0IHRoZSBmZXRjaCgpIGNhbGwgd2l0aCBwLCByZXF1ZXN0LCByZXNwb25zZU9iamVjdCxcbiAgICAgIC8vICAgIGFuZCByZXF1ZXN0T2JqZWN04oCZcyBzaWduYWzigJlzIGFib3J0IHJlYXNvbi5cbiAgICAgIGFib3J0RmV0Y2gocCwgcmVxdWVzdCwgcmVzcG9uc2VPYmplY3QsIHJlcXVlc3RPYmplY3Quc2lnbmFsLnJlYXNvbilcbiAgICB9XG4gIClcblxuICAvLyAxMi4gTGV0IGhhbmRsZUZldGNoRG9uZSBnaXZlbiByZXNwb25zZSByZXNwb25zZSBiZSB0byBmaW5hbGl6ZSBhbmRcbiAgLy8gcmVwb3J0IHRpbWluZyB3aXRoIHJlc3BvbnNlLCBnbG9iYWxPYmplY3QsIGFuZCBcImZldGNoXCIuXG4gIGNvbnN0IGhhbmRsZUZldGNoRG9uZSA9IChyZXNwb25zZSkgPT5cbiAgICBmaW5hbGl6ZUFuZFJlcG9ydFRpbWluZyhyZXNwb25zZSwgJ2ZldGNoJylcblxuICAvLyAxMy4gU2V0IGNvbnRyb2xsZXIgdG8gdGhlIHJlc3VsdCBvZiBjYWxsaW5nIGZldGNoIGdpdmVuIHJlcXVlc3QsXG4gIC8vIHdpdGggcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5IHNldCB0byBoYW5kbGVGZXRjaERvbmUsIGFuZCBwcm9jZXNzUmVzcG9uc2VcbiAgLy8gZ2l2ZW4gcmVzcG9uc2UgYmVpbmcgdGhlc2Ugc3Vic3RlcHM6XG5cbiAgY29uc3QgcHJvY2Vzc1Jlc3BvbnNlID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgLy8gMS4gSWYgbG9jYWxseUFib3J0ZWQgaXMgdHJ1ZSwgdGVybWluYXRlIHRoZXNlIHN1YnN0ZXBzLlxuICAgIGlmIChsb2NhbGx5QWJvcnRlZCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgfVxuXG4gICAgLy8gMi4gSWYgcmVzcG9uc2XigJlzIGFib3J0ZWQgZmxhZyBpcyBzZXQsIHRoZW46XG4gICAgaWYgKHJlc3BvbnNlLmFib3J0ZWQpIHtcbiAgICAgIC8vIDEuIExldCBkZXNlcmlhbGl6ZWRFcnJvciBiZSB0aGUgcmVzdWx0IG9mIGRlc2VyaWFsaXplIGEgc2VyaWFsaXplZFxuICAgICAgLy8gICAgYWJvcnQgcmVhc29uIGdpdmVuIGNvbnRyb2xsZXLigJlzIHNlcmlhbGl6ZWQgYWJvcnQgcmVhc29uIGFuZFxuICAgICAgLy8gICAgcmVsZXZhbnRSZWFsbS5cblxuICAgICAgLy8gMi4gQWJvcnQgdGhlIGZldGNoKCkgY2FsbCB3aXRoIHAsIHJlcXVlc3QsIHJlc3BvbnNlT2JqZWN0LCBhbmRcbiAgICAgIC8vICAgIGRlc2VyaWFsaXplZEVycm9yLlxuXG4gICAgICBhYm9ydEZldGNoKHAsIHJlcXVlc3QsIHJlc3BvbnNlT2JqZWN0LCBjb250cm9sbGVyLnNlcmlhbGl6ZWRBYm9ydFJlYXNvbilcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgIH1cblxuICAgIC8vIDMuIElmIHJlc3BvbnNlIGlzIGEgbmV0d29yayBlcnJvciwgdGhlbiByZWplY3QgcCB3aXRoIGEgVHlwZUVycm9yXG4gICAgLy8gYW5kIHRlcm1pbmF0ZSB0aGVzZSBzdWJzdGVwcy5cbiAgICBpZiAocmVzcG9uc2UudHlwZSA9PT0gJ2Vycm9yJykge1xuICAgICAgcC5yZWplY3QoXG4gICAgICAgIE9iamVjdC5hc3NpZ24obmV3IFR5cGVFcnJvcignZmV0Y2ggZmFpbGVkJyksIHsgY2F1c2U6IHJlc3BvbnNlLmVycm9yIH0pXG4gICAgICApXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICB9XG5cbiAgICAvLyA0LiBTZXQgcmVzcG9uc2VPYmplY3QgdG8gdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhIFJlc3BvbnNlIG9iamVjdCxcbiAgICAvLyBnaXZlbiByZXNwb25zZSwgXCJpbW11dGFibGVcIiwgYW5kIHJlbGV2YW50UmVhbG0uXG4gICAgcmVzcG9uc2VPYmplY3QgPSBuZXcgUmVzcG9uc2UoKVxuICAgIHJlc3BvbnNlT2JqZWN0W2tTdGF0ZV0gPSByZXNwb25zZVxuICAgIHJlc3BvbnNlT2JqZWN0W2tSZWFsbV0gPSByZWxldmFudFJlYWxtXG4gICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tIZWFkZXJzTGlzdF0gPSByZXNwb25zZS5oZWFkZXJzTGlzdFxuICAgIHJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrR3VhcmRdID0gJ2ltbXV0YWJsZSdcbiAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba1JlYWxtXSA9IHJlbGV2YW50UmVhbG1cblxuICAgIC8vIDUuIFJlc29sdmUgcCB3aXRoIHJlc3BvbnNlT2JqZWN0LlxuICAgIHAucmVzb2x2ZShyZXNwb25zZU9iamVjdClcbiAgfVxuXG4gIGNvbnRyb2xsZXIgPSBmZXRjaGluZyh7XG4gICAgcmVxdWVzdCxcbiAgICBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHk6IGhhbmRsZUZldGNoRG9uZSxcbiAgICBwcm9jZXNzUmVzcG9uc2UsXG4gICAgZGlzcGF0Y2hlcjogaW5pdC5kaXNwYXRjaGVyID8/IGdldEdsb2JhbERpc3BhdGNoZXIoKSAvLyB1bmRpY2lcbiAgfSlcblxuICAvLyAxNC4gUmV0dXJuIHAuXG4gIHJldHVybiBwLnByb21pc2Vcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2ZpbmFsaXplLWFuZC1yZXBvcnQtdGltaW5nXG5mdW5jdGlvbiBmaW5hbGl6ZUFuZFJlcG9ydFRpbWluZyAocmVzcG9uc2UsIGluaXRpYXRvclR5cGUgPSAnb3RoZXInKSB7XG4gIC8vIDEuIElmIHJlc3BvbnNlIGlzIGFuIGFib3J0ZWQgbmV0d29yayBlcnJvciwgdGhlbiByZXR1cm4uXG4gIGlmIChyZXNwb25zZS50eXBlID09PSAnZXJyb3InICYmIHJlc3BvbnNlLmFib3J0ZWQpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIDIuIElmIHJlc3BvbnNl4oCZcyBVUkwgbGlzdCBpcyBudWxsIG9yIGVtcHR5LCB0aGVuIHJldHVybi5cbiAgaWYgKCFyZXNwb25zZS51cmxMaXN0Py5sZW5ndGgpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIDMuIExldCBvcmlnaW5hbFVSTCBiZSByZXNwb25zZeKAmXMgVVJMIGxpc3RbMF0uXG4gIGNvbnN0IG9yaWdpbmFsVVJMID0gcmVzcG9uc2UudXJsTGlzdFswXVxuXG4gIC8vIDQuIExldCB0aW1pbmdJbmZvIGJlIHJlc3BvbnNl4oCZcyB0aW1pbmcgaW5mby5cbiAgbGV0IHRpbWluZ0luZm8gPSByZXNwb25zZS50aW1pbmdJbmZvXG5cbiAgLy8gNS4gTGV0IGNhY2hlU3RhdGUgYmUgcmVzcG9uc2XigJlzIGNhY2hlIHN0YXRlLlxuICBsZXQgY2FjaGVTdGF0ZSA9IHJlc3BvbnNlLmNhY2hlU3RhdGVcblxuICAvLyA2LiBJZiBvcmlnaW5hbFVSTOKAmXMgc2NoZW1lIGlzIG5vdCBhbiBIVFRQKFMpIHNjaGVtZSwgdGhlbiByZXR1cm4uXG4gIGlmICghdXJsSXNIdHRwSHR0cHNTY2hlbWUob3JpZ2luYWxVUkwpKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyA3LiBJZiB0aW1pbmdJbmZvIGlzIG51bGwsIHRoZW4gcmV0dXJuLlxuICBpZiAodGltaW5nSW5mbyA9PT0gbnVsbCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgLy8gOC4gSWYgcmVzcG9uc2XigJlzIHRpbWluZyBhbGxvdyBwYXNzZWQgZmxhZyBpcyBub3Qgc2V0LCB0aGVuOlxuICBpZiAoIXJlc3BvbnNlLnRpbWluZ0FsbG93UGFzc2VkKSB7XG4gICAgLy8gIDEuIFNldCB0aW1pbmdJbmZvIHRvIGEgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhbiBvcGFxdWUgdGltaW5nIGluZm8gZm9yIHRpbWluZ0luZm8uXG4gICAgdGltaW5nSW5mbyA9IGNyZWF0ZU9wYXF1ZVRpbWluZ0luZm8oe1xuICAgICAgc3RhcnRUaW1lOiB0aW1pbmdJbmZvLnN0YXJ0VGltZVxuICAgIH0pXG5cbiAgICAvLyAgMi4gU2V0IGNhY2hlU3RhdGUgdG8gdGhlIGVtcHR5IHN0cmluZy5cbiAgICBjYWNoZVN0YXRlID0gJydcbiAgfVxuXG4gIC8vIDkuIFNldCB0aW1pbmdJbmZv4oCZcyBlbmQgdGltZSB0byB0aGUgY29hcnNlbmVkIHNoYXJlZCBjdXJyZW50IHRpbWVcbiAgLy8gZ2l2ZW4gZ2xvYmFs4oCZcyByZWxldmFudCBzZXR0aW5ncyBvYmplY3TigJlzIGNyb3NzLW9yaWdpbiBpc29sYXRlZFxuICAvLyBjYXBhYmlsaXR5LlxuICAvLyBUT0RPOiBnaXZlbiBnbG9iYWzigJlzIHJlbGV2YW50IHNldHRpbmdzIG9iamVjdOKAmXMgY3Jvc3Mtb3JpZ2luIGlzb2xhdGVkXG4gIC8vIGNhcGFiaWxpdHk/XG4gIHRpbWluZ0luZm8uZW5kVGltZSA9IGNvYXJzZW5lZFNoYXJlZEN1cnJlbnRUaW1lKClcblxuICAvLyAxMC4gU2V0IHJlc3BvbnNl4oCZcyB0aW1pbmcgaW5mbyB0byB0aW1pbmdJbmZvLlxuICByZXNwb25zZS50aW1pbmdJbmZvID0gdGltaW5nSW5mb1xuXG4gIC8vIDExLiBNYXJrIHJlc291cmNlIHRpbWluZyBmb3IgdGltaW5nSW5mbywgb3JpZ2luYWxVUkwsIGluaXRpYXRvclR5cGUsXG4gIC8vIGdsb2JhbCwgYW5kIGNhY2hlU3RhdGUuXG4gIG1hcmtSZXNvdXJjZVRpbWluZyhcbiAgICB0aW1pbmdJbmZvLFxuICAgIG9yaWdpbmFsVVJMLFxuICAgIGluaXRpYXRvclR5cGUsXG4gICAgZ2xvYmFsVGhpcyxcbiAgICBjYWNoZVN0YXRlXG4gIClcbn1cblxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3Jlc291cmNlLXRpbWluZy8jZGZuLW1hcmstcmVzb3VyY2UtdGltaW5nXG5mdW5jdGlvbiBtYXJrUmVzb3VyY2VUaW1pbmcgKHRpbWluZ0luZm8sIG9yaWdpbmFsVVJMLCBpbml0aWF0b3JUeXBlLCBnbG9iYWxUaGlzLCBjYWNoZVN0YXRlKSB7XG4gIGlmIChub2RlTWFqb3IgPiAxOCB8fCAobm9kZU1ham9yID09PSAxOCAmJiBub2RlTWlub3IgPj0gMikpIHtcbiAgICBwZXJmb3JtYW5jZS5tYXJrUmVzb3VyY2VUaW1pbmcodGltaW5nSW5mbywgb3JpZ2luYWxVUkwuaHJlZiwgaW5pdGlhdG9yVHlwZSwgZ2xvYmFsVGhpcywgY2FjaGVTdGF0ZSlcbiAgfVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYWJvcnQtZmV0Y2hcbmZ1bmN0aW9uIGFib3J0RmV0Y2ggKHAsIHJlcXVlc3QsIHJlc3BvbnNlT2JqZWN0LCBlcnJvcikge1xuICAvLyBOb3RlOiBBYm9ydFNpZ25hbC5yZWFzb24gd2FzIGFkZGVkIGluIG5vZGUgdjE3LjIuMFxuICAvLyB3aGljaCB3b3VsZCBnaXZlIHVzIGFuIHVuZGVmaW5lZCBlcnJvciB0byByZWplY3Qgd2l0aC5cbiAgLy8gUmVtb3ZlIHRoaXMgb25jZSBub2RlIHYxNiBpcyBubyBsb25nZXIgc3VwcG9ydGVkLlxuICBpZiAoIWVycm9yKSB7XG4gICAgZXJyb3IgPSBuZXcgRE9NRXhjZXB0aW9uKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLicsICdBYm9ydEVycm9yJylcbiAgfVxuXG4gIC8vIDEuIFJlamVjdCBwcm9taXNlIHdpdGggZXJyb3IuXG4gIHAucmVqZWN0KGVycm9yKVxuXG4gIC8vIDIuIElmIHJlcXVlc3TigJlzIGJvZHkgaXMgbm90IG51bGwgYW5kIGlzIHJlYWRhYmxlLCB0aGVuIGNhbmNlbCByZXF1ZXN04oCZc1xuICAvLyBib2R5IHdpdGggZXJyb3IuXG4gIGlmIChyZXF1ZXN0LmJvZHkgIT0gbnVsbCAmJiBpc1JlYWRhYmxlKHJlcXVlc3QuYm9keT8uc3RyZWFtKSkge1xuICAgIHJlcXVlc3QuYm9keS5zdHJlYW0uY2FuY2VsKGVycm9yKS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICBpZiAoZXJyLmNvZGUgPT09ICdFUlJfSU5WQUxJRF9TVEFURScpIHtcbiAgICAgICAgLy8gTm9kZSBidWc/XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgdGhyb3cgZXJyXG4gICAgfSlcbiAgfVxuXG4gIC8vIDMuIElmIHJlc3BvbnNlT2JqZWN0IGlzIG51bGwsIHRoZW4gcmV0dXJuLlxuICBpZiAocmVzcG9uc2VPYmplY3QgPT0gbnVsbCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgLy8gNC4gTGV0IHJlc3BvbnNlIGJlIHJlc3BvbnNlT2JqZWN04oCZcyByZXNwb25zZS5cbiAgY29uc3QgcmVzcG9uc2UgPSByZXNwb25zZU9iamVjdFtrU3RhdGVdXG5cbiAgLy8gNS4gSWYgcmVzcG9uc2XigJlzIGJvZHkgaXMgbm90IG51bGwgYW5kIGlzIHJlYWRhYmxlLCB0aGVuIGVycm9yIHJlc3BvbnNl4oCZc1xuICAvLyBib2R5IHdpdGggZXJyb3IuXG4gIGlmIChyZXNwb25zZS5ib2R5ICE9IG51bGwgJiYgaXNSZWFkYWJsZShyZXNwb25zZS5ib2R5Py5zdHJlYW0pKSB7XG4gICAgcmVzcG9uc2UuYm9keS5zdHJlYW0uY2FuY2VsKGVycm9yKS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICBpZiAoZXJyLmNvZGUgPT09ICdFUlJfSU5WQUxJRF9TVEFURScpIHtcbiAgICAgICAgLy8gTm9kZSBidWc/XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgdGhyb3cgZXJyXG4gICAgfSlcbiAgfVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZmV0Y2hpbmdcbmZ1bmN0aW9uIGZldGNoaW5nICh7XG4gIHJlcXVlc3QsXG4gIHByb2Nlc3NSZXF1ZXN0Qm9keUNodW5rTGVuZ3RoLFxuICBwcm9jZXNzUmVxdWVzdEVuZE9mQm9keSxcbiAgcHJvY2Vzc1Jlc3BvbnNlLFxuICBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHksXG4gIHByb2Nlc3NSZXNwb25zZUNvbnN1bWVCb2R5LFxuICB1c2VQYXJhbGxlbFF1ZXVlID0gZmFsc2UsXG4gIGRpc3BhdGNoZXIgLy8gdW5kaWNpXG59KSB7XG4gIC8vIDEuIExldCB0YXNrRGVzdGluYXRpb24gYmUgbnVsbC5cbiAgbGV0IHRhc2tEZXN0aW5hdGlvbiA9IG51bGxcblxuICAvLyAyLiBMZXQgY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkgYmUgZmFsc2UuXG4gIGxldCBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSA9IGZhbHNlXG5cbiAgLy8gMy4gSWYgcmVxdWVzdOKAmXMgY2xpZW50IGlzIG5vbi1udWxsLCB0aGVuOlxuICBpZiAocmVxdWVzdC5jbGllbnQgIT0gbnVsbCkge1xuICAgIC8vIDEuIFNldCB0YXNrRGVzdGluYXRpb24gdG8gcmVxdWVzdOKAmXMgY2xpZW504oCZcyBnbG9iYWwgb2JqZWN0LlxuICAgIHRhc2tEZXN0aW5hdGlvbiA9IHJlcXVlc3QuY2xpZW50Lmdsb2JhbE9iamVjdFxuXG4gICAgLy8gMi4gU2V0IGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5IHRvIHJlcXVlc3TigJlzIGNsaWVudOKAmXMgY3Jvc3Mtb3JpZ2luXG4gICAgLy8gaXNvbGF0ZWQgY2FwYWJpbGl0eS5cbiAgICBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSA9XG4gICAgICByZXF1ZXN0LmNsaWVudC5jcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eVxuICB9XG5cbiAgLy8gNC4gSWYgdXNlUGFyYWxsZWxRdWV1ZSBpcyB0cnVlLCB0aGVuIHNldCB0YXNrRGVzdGluYXRpb24gdG8gdGhlIHJlc3VsdCBvZlxuICAvLyBzdGFydGluZyBhIG5ldyBwYXJhbGxlbCBxdWV1ZS5cbiAgLy8gVE9ET1xuXG4gIC8vIDUuIExldCB0aW1pbmdJbmZvIGJlIGEgbmV3IGZldGNoIHRpbWluZyBpbmZvIHdob3NlIHN0YXJ0IHRpbWUgYW5kXG4gIC8vIHBvc3QtcmVkaXJlY3Qgc3RhcnQgdGltZSBhcmUgdGhlIGNvYXJzZW5lZCBzaGFyZWQgY3VycmVudCB0aW1lIGdpdmVuXG4gIC8vIGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5LlxuICBjb25zdCBjdXJyZW5UaW1lID0gY29hcnNlbmVkU2hhcmVkQ3VycmVudFRpbWUoY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkpXG4gIGNvbnN0IHRpbWluZ0luZm8gPSBjcmVhdGVPcGFxdWVUaW1pbmdJbmZvKHtcbiAgICBzdGFydFRpbWU6IGN1cnJlblRpbWVcbiAgfSlcblxuICAvLyA2LiBMZXQgZmV0Y2hQYXJhbXMgYmUgYSBuZXcgZmV0Y2ggcGFyYW1zIHdob3NlXG4gIC8vIHJlcXVlc3QgaXMgcmVxdWVzdCxcbiAgLy8gdGltaW5nIGluZm8gaXMgdGltaW5nSW5mbyxcbiAgLy8gcHJvY2VzcyByZXF1ZXN0IGJvZHkgY2h1bmsgbGVuZ3RoIGlzIHByb2Nlc3NSZXF1ZXN0Qm9keUNodW5rTGVuZ3RoLFxuICAvLyBwcm9jZXNzIHJlcXVlc3QgZW5kLW9mLWJvZHkgaXMgcHJvY2Vzc1JlcXVlc3RFbmRPZkJvZHksXG4gIC8vIHByb2Nlc3MgcmVzcG9uc2UgaXMgcHJvY2Vzc1Jlc3BvbnNlLFxuICAvLyBwcm9jZXNzIHJlc3BvbnNlIGNvbnN1bWUgYm9keSBpcyBwcm9jZXNzUmVzcG9uc2VDb25zdW1lQm9keSxcbiAgLy8gcHJvY2VzcyByZXNwb25zZSBlbmQtb2YtYm9keSBpcyBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHksXG4gIC8vIHRhc2sgZGVzdGluYXRpb24gaXMgdGFza0Rlc3RpbmF0aW9uLFxuICAvLyBhbmQgY3Jvc3Mtb3JpZ2luIGlzb2xhdGVkIGNhcGFiaWxpdHkgaXMgY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkuXG4gIGNvbnN0IGZldGNoUGFyYW1zID0ge1xuICAgIGNvbnRyb2xsZXI6IG5ldyBGZXRjaChkaXNwYXRjaGVyKSxcbiAgICByZXF1ZXN0LFxuICAgIHRpbWluZ0luZm8sXG4gICAgcHJvY2Vzc1JlcXVlc3RCb2R5Q2h1bmtMZW5ndGgsXG4gICAgcHJvY2Vzc1JlcXVlc3RFbmRPZkJvZHksXG4gICAgcHJvY2Vzc1Jlc3BvbnNlLFxuICAgIHByb2Nlc3NSZXNwb25zZUNvbnN1bWVCb2R5LFxuICAgIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSxcbiAgICB0YXNrRGVzdGluYXRpb24sXG4gICAgY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHlcbiAgfVxuXG4gIC8vIDcuIElmIHJlcXVlc3TigJlzIGJvZHkgaXMgYSBieXRlIHNlcXVlbmNlLCB0aGVuIHNldCByZXF1ZXN04oCZcyBib2R5IHRvXG4gIC8vICAgIHJlcXVlc3TigJlzIGJvZHkgYXMgYSBib2R5LlxuICAvLyBOT1RFOiBTaW5jZSBmZXRjaGluZyBpcyBvbmx5IGNhbGxlZCBmcm9tIGZldGNoLCBib2R5IHNob3VsZCBhbHJlYWR5IGJlXG4gIC8vIGV4dHJhY3RlZC5cbiAgYXNzZXJ0KCFyZXF1ZXN0LmJvZHkgfHwgcmVxdWVzdC5ib2R5LnN0cmVhbSlcblxuICAvLyA4LiBJZiByZXF1ZXN04oCZcyB3aW5kb3cgaXMgXCJjbGllbnRcIiwgdGhlbiBzZXQgcmVxdWVzdOKAmXMgd2luZG93IHRvIHJlcXVlc3TigJlzXG4gIC8vIGNsaWVudCwgaWYgcmVxdWVzdOKAmXMgY2xpZW504oCZcyBnbG9iYWwgb2JqZWN0IGlzIGEgV2luZG93IG9iamVjdDsgb3RoZXJ3aXNlXG4gIC8vIFwibm8td2luZG93XCIuXG4gIGlmIChyZXF1ZXN0LndpbmRvdyA9PT0gJ2NsaWVudCcpIHtcbiAgICAvLyBUT0RPOiBXaGF0IGlmIHJlcXVlc3QuY2xpZW50IGlzIG51bGw/XG4gICAgcmVxdWVzdC53aW5kb3cgPVxuICAgICAgcmVxdWVzdC5jbGllbnQ/Lmdsb2JhbE9iamVjdD8uY29uc3RydWN0b3I/Lm5hbWUgPT09ICdXaW5kb3cnXG4gICAgICAgID8gcmVxdWVzdC5jbGllbnRcbiAgICAgICAgOiAnbm8td2luZG93J1xuICB9XG5cbiAgLy8gOS4gSWYgcmVxdWVzdOKAmXMgb3JpZ2luIGlzIFwiY2xpZW50XCIsIHRoZW4gc2V0IHJlcXVlc3TigJlzIG9yaWdpbiB0byByZXF1ZXN04oCZc1xuICAvLyBjbGllbnTigJlzIG9yaWdpbi5cbiAgaWYgKHJlcXVlc3Qub3JpZ2luID09PSAnY2xpZW50Jykge1xuICAgIC8vIFRPRE86IFdoYXQgaWYgcmVxdWVzdC5jbGllbnQgaXMgbnVsbD9cbiAgICByZXF1ZXN0Lm9yaWdpbiA9IHJlcXVlc3QuY2xpZW50Py5vcmlnaW5cbiAgfVxuXG4gIC8vIDEwLiBJZiBhbGwgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSB0cnVlOlxuICAvLyBUT0RPXG5cbiAgLy8gMTEuIElmIHJlcXVlc3TigJlzIHBvbGljeSBjb250YWluZXIgaXMgXCJjbGllbnRcIiwgdGhlbjpcbiAgaWYgKHJlcXVlc3QucG9saWN5Q29udGFpbmVyID09PSAnY2xpZW50Jykge1xuICAgIC8vIDEuIElmIHJlcXVlc3TigJlzIGNsaWVudCBpcyBub24tbnVsbCwgdGhlbiBzZXQgcmVxdWVzdOKAmXMgcG9saWN5XG4gICAgLy8gY29udGFpbmVyIHRvIGEgY2xvbmUgb2YgcmVxdWVzdOKAmXMgY2xpZW504oCZcyBwb2xpY3kgY29udGFpbmVyLiBbSFRNTF1cbiAgICBpZiAocmVxdWVzdC5jbGllbnQgIT0gbnVsbCkge1xuICAgICAgcmVxdWVzdC5wb2xpY3lDb250YWluZXIgPSBjbG9uZVBvbGljeUNvbnRhaW5lcihcbiAgICAgICAgcmVxdWVzdC5jbGllbnQucG9saWN5Q29udGFpbmVyXG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIDIuIE90aGVyd2lzZSwgc2V0IHJlcXVlc3TigJlzIHBvbGljeSBjb250YWluZXIgdG8gYSBuZXcgcG9saWN5XG4gICAgICAvLyBjb250YWluZXIuXG4gICAgICByZXF1ZXN0LnBvbGljeUNvbnRhaW5lciA9IG1ha2VQb2xpY3lDb250YWluZXIoKVxuICAgIH1cbiAgfVxuXG4gIC8vIDEyLiBJZiByZXF1ZXN04oCZcyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluIGBBY2NlcHRgLCB0aGVuOlxuICBpZiAoIXJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2FjY2VwdCcpKSB7XG4gICAgLy8gMS4gTGV0IHZhbHVlIGJlIGAqLypgLlxuICAgIGNvbnN0IHZhbHVlID0gJyovKidcblxuICAgIC8vIDIuIEEgdXNlciBhZ2VudCBzaG91bGQgc2V0IHZhbHVlIHRvIHRoZSBmaXJzdCBtYXRjaGluZyBzdGF0ZW1lbnQsIGlmXG4gICAgLy8gYW55LCBzd2l0Y2hpbmcgb24gcmVxdWVzdOKAmXMgZGVzdGluYXRpb246XG4gICAgLy8gXCJkb2N1bWVudFwiXG4gICAgLy8gXCJmcmFtZVwiXG4gICAgLy8gXCJpZnJhbWVcIlxuICAgIC8vIGB0ZXh0L2h0bWwsYXBwbGljYXRpb24veGh0bWwreG1sLGFwcGxpY2F0aW9uL3htbDtxPTAuOSwqLyo7cT0wLjhgXG4gICAgLy8gXCJpbWFnZVwiXG4gICAgLy8gYGltYWdlL3BuZyxpbWFnZS9zdmcreG1sLGltYWdlLyo7cT0wLjgsKi8qO3E9MC41YFxuICAgIC8vIFwic3R5bGVcIlxuICAgIC8vIGB0ZXh0L2NzcywqLyo7cT0wLjFgXG4gICAgLy8gVE9ET1xuXG4gICAgLy8gMy4gQXBwZW5kIGBBY2NlcHRgL3ZhbHVlIHRvIHJlcXVlc3TigJlzIGhlYWRlciBsaXN0LlxuICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdhY2NlcHQnLCB2YWx1ZSlcbiAgfVxuXG4gIC8vIDEzLiBJZiByZXF1ZXN04oCZcyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluIGBBY2NlcHQtTGFuZ3VhZ2VgLCB0aGVuXG4gIC8vIHVzZXIgYWdlbnRzIHNob3VsZCBhcHBlbmQgYEFjY2VwdC1MYW5ndWFnZWAvYW4gYXBwcm9wcmlhdGUgdmFsdWUgdG9cbiAgLy8gcmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QuXG4gIGlmICghcmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygnYWNjZXB0LWxhbmd1YWdlJykpIHtcbiAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnYWNjZXB0LWxhbmd1YWdlJywgJyonKVxuICB9XG5cbiAgLy8gMTQuIElmIHJlcXVlc3TigJlzIHByaW9yaXR5IGlzIG51bGwsIHRoZW4gdXNlIHJlcXVlc3TigJlzIGluaXRpYXRvciBhbmRcbiAgLy8gZGVzdGluYXRpb24gYXBwcm9wcmlhdGVseSBpbiBzZXR0aW5nIHJlcXVlc3TigJlzIHByaW9yaXR5IHRvIGFcbiAgLy8gdXNlci1hZ2VudC1kZWZpbmVkIG9iamVjdC5cbiAgaWYgKHJlcXVlc3QucHJpb3JpdHkgPT09IG51bGwpIHtcbiAgICAvLyBUT0RPXG4gIH1cblxuICAvLyAxNS4gSWYgcmVxdWVzdCBpcyBhIHN1YnJlc291cmNlIHJlcXVlc3QsIHRoZW46XG4gIGlmIChzdWJyZXNvdXJjZVNldC5oYXMocmVxdWVzdC5kZXN0aW5hdGlvbikpIHtcbiAgICAvLyBUT0RPXG4gIH1cblxuICAvLyAxNi4gUnVuIG1haW4gZmV0Y2ggZ2l2ZW4gZmV0Y2hQYXJhbXMuXG4gIG1haW5GZXRjaChmZXRjaFBhcmFtcylcbiAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIudGVybWluYXRlKGVycilcbiAgICB9KVxuXG4gIC8vIDE3LiBSZXR1cm4gZmV0Y2hQYXJhbSdzIGNvbnRyb2xsZXJcbiAgcmV0dXJuIGZldGNoUGFyYW1zLmNvbnRyb2xsZXJcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtbWFpbi1mZXRjaFxuYXN5bmMgZnVuY3Rpb24gbWFpbkZldGNoIChmZXRjaFBhcmFtcywgcmVjdXJzaXZlID0gZmFsc2UpIHtcbiAgLy8gMS4gTGV0IHJlcXVlc3QgYmUgZmV0Y2hQYXJhbXPigJlzIHJlcXVlc3QuXG4gIGNvbnN0IHJlcXVlc3QgPSBmZXRjaFBhcmFtcy5yZXF1ZXN0XG5cbiAgLy8gMi4gTGV0IHJlc3BvbnNlIGJlIG51bGwuXG4gIGxldCByZXNwb25zZSA9IG51bGxcblxuICAvLyAzLiBJZiByZXF1ZXN04oCZcyBsb2NhbC1VUkxzLW9ubHkgZmxhZyBpcyBzZXQgYW5kIHJlcXVlc3TigJlzIGN1cnJlbnQgVVJMIGlzXG4gIC8vIG5vdCBsb2NhbCwgdGhlbiBzZXQgcmVzcG9uc2UgdG8gYSBuZXR3b3JrIGVycm9yLlxuICBpZiAocmVxdWVzdC5sb2NhbFVSTHNPbmx5ICYmICF1cmxJc0xvY2FsKHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpKSkge1xuICAgIHJlc3BvbnNlID0gbWFrZU5ldHdvcmtFcnJvcignbG9jYWwgVVJMcyBvbmx5JylcbiAgfVxuXG4gIC8vIDQuIFJ1biByZXBvcnQgQ29udGVudCBTZWN1cml0eSBQb2xpY3kgdmlvbGF0aW9ucyBmb3IgcmVxdWVzdC5cbiAgLy8gVE9ET1xuXG4gIC8vIDUuIFVwZ3JhZGUgcmVxdWVzdCB0byBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTCwgaWYgYXBwcm9wcmlhdGUuXG4gIHRyeVVwZ3JhZGVSZXF1ZXN0VG9BUG90ZW50aWFsbHlUcnVzdHdvcnRoeVVSTChyZXF1ZXN0KVxuXG4gIC8vIDYuIElmIHNob3VsZCByZXF1ZXN0IGJlIGJsb2NrZWQgZHVlIHRvIGEgYmFkIHBvcnQsIHNob3VsZCBmZXRjaGluZyByZXF1ZXN0XG4gIC8vIGJlIGJsb2NrZWQgYXMgbWl4ZWQgY29udGVudCwgb3Igc2hvdWxkIHJlcXVlc3QgYmUgYmxvY2tlZCBieSBDb250ZW50XG4gIC8vIFNlY3VyaXR5IFBvbGljeSByZXR1cm5zIGJsb2NrZWQsIHRoZW4gc2V0IHJlc3BvbnNlIHRvIGEgbmV0d29yayBlcnJvci5cbiAgaWYgKHJlcXVlc3RCYWRQb3J0KHJlcXVlc3QpID09PSAnYmxvY2tlZCcpIHtcbiAgICByZXNwb25zZSA9IG1ha2VOZXR3b3JrRXJyb3IoJ2JhZCBwb3J0JylcbiAgfVxuICAvLyBUT0RPOiBzaG91bGQgZmV0Y2hpbmcgcmVxdWVzdCBiZSBibG9ja2VkIGFzIG1peGVkIGNvbnRlbnQ/XG4gIC8vIFRPRE86IHNob3VsZCByZXF1ZXN0IGJlIGJsb2NrZWQgYnkgQ29udGVudCBTZWN1cml0eSBQb2xpY3k/XG5cbiAgLy8gNy4gSWYgcmVxdWVzdOKAmXMgcmVmZXJyZXIgcG9saWN5IGlzIHRoZSBlbXB0eSBzdHJpbmcsIHRoZW4gc2V0IHJlcXVlc3TigJlzXG4gIC8vIHJlZmVycmVyIHBvbGljeSB0byByZXF1ZXN04oCZcyBwb2xpY3kgY29udGFpbmVy4oCZcyByZWZlcnJlciBwb2xpY3kuXG4gIGlmIChyZXF1ZXN0LnJlZmVycmVyUG9saWN5ID09PSAnJykge1xuICAgIHJlcXVlc3QucmVmZXJyZXJQb2xpY3kgPSByZXF1ZXN0LnBvbGljeUNvbnRhaW5lci5yZWZlcnJlclBvbGljeVxuICB9XG5cbiAgLy8gOC4gSWYgcmVxdWVzdOKAmXMgcmVmZXJyZXIgaXMgbm90IFwibm8tcmVmZXJyZXJcIiwgdGhlbiBzZXQgcmVxdWVzdOKAmXNcbiAgLy8gcmVmZXJyZXIgdG8gdGhlIHJlc3VsdCBvZiBpbnZva2luZyBkZXRlcm1pbmUgcmVxdWVzdOKAmXMgcmVmZXJyZXIuXG4gIGlmIChyZXF1ZXN0LnJlZmVycmVyICE9PSAnbm8tcmVmZXJyZXInKSB7XG4gICAgcmVxdWVzdC5yZWZlcnJlciA9IGRldGVybWluZVJlcXVlc3RzUmVmZXJyZXIocmVxdWVzdClcbiAgfVxuXG4gIC8vIDkuIFNldCByZXF1ZXN04oCZcyBjdXJyZW50IFVSTOKAmXMgc2NoZW1lIHRvIFwiaHR0cHNcIiBpZiBhbGwgb2YgdGhlIGZvbGxvd2luZ1xuICAvLyBjb25kaXRpb25zIGFyZSB0cnVlOlxuICAvLyAtIHJlcXVlc3TigJlzIGN1cnJlbnQgVVJM4oCZcyBzY2hlbWUgaXMgXCJodHRwXCJcbiAgLy8gLSByZXF1ZXN04oCZcyBjdXJyZW50IFVSTOKAmXMgaG9zdCBpcyBhIGRvbWFpblxuICAvLyAtIE1hdGNoaW5nIHJlcXVlc3TigJlzIGN1cnJlbnQgVVJM4oCZcyBob3N0IHBlciBLbm93biBIU1RTIEhvc3QgRG9tYWluIE5hbWVcbiAgLy8gICBNYXRjaGluZyByZXN1bHRzIGluIGVpdGhlciBhIHN1cGVyZG9tYWluIG1hdGNoIHdpdGggYW4gYXNzZXJ0ZWRcbiAgLy8gICBpbmNsdWRlU3ViRG9tYWlucyBkaXJlY3RpdmUgb3IgYSBjb25ncnVlbnQgbWF0Y2ggKHdpdGggb3Igd2l0aG91dCBhblxuICAvLyAgIGFzc2VydGVkIGluY2x1ZGVTdWJEb21haW5zIGRpcmVjdGl2ZSkuIFtIU1RTXVxuICAvLyBUT0RPXG5cbiAgLy8gMTAuIElmIHJlY3Vyc2l2ZSBpcyBmYWxzZSwgdGhlbiBydW4gdGhlIHJlbWFpbmluZyBzdGVwcyBpbiBwYXJhbGxlbC5cbiAgLy8gVE9ET1xuXG4gIC8vIDExLiBJZiByZXNwb25zZSBpcyBudWxsLCB0aGVuIHNldCByZXNwb25zZSB0byB0aGUgcmVzdWx0IG9mIHJ1bm5pbmdcbiAgLy8gdGhlIHN0ZXBzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGZpcnN0IG1hdGNoaW5nIHN0YXRlbWVudDpcbiAgaWYgKHJlc3BvbnNlID09PSBudWxsKSB7XG4gICAgcmVzcG9uc2UgPSBhd2FpdCAoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgY3VycmVudFVSTCA9IHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpXG5cbiAgICAgIGlmIChcbiAgICAgICAgLy8gLSByZXF1ZXN04oCZcyBjdXJyZW50IFVSTOKAmXMgb3JpZ2luIGlzIHNhbWUgb3JpZ2luIHdpdGggcmVxdWVzdOKAmXMgb3JpZ2luLFxuICAgICAgICAvLyAgIGFuZCByZXF1ZXN04oCZcyByZXNwb25zZSB0YWludGluZyBpcyBcImJhc2ljXCJcbiAgICAgICAgKHNhbWVPcmlnaW4oY3VycmVudFVSTCwgcmVxdWVzdC51cmwpICYmIHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ2Jhc2ljJykgfHxcbiAgICAgICAgLy8gcmVxdWVzdOKAmXMgY3VycmVudCBVUkzigJlzIHNjaGVtZSBpcyBcImRhdGFcIlxuICAgICAgICAoY3VycmVudFVSTC5wcm90b2NvbCA9PT0gJ2RhdGE6JykgfHxcbiAgICAgICAgLy8gLSByZXF1ZXN04oCZcyBtb2RlIGlzIFwibmF2aWdhdGVcIiBvciBcIndlYnNvY2tldFwiXG4gICAgICAgIChyZXF1ZXN0Lm1vZGUgPT09ICduYXZpZ2F0ZScgfHwgcmVxdWVzdC5tb2RlID09PSAnd2Vic29ja2V0JylcbiAgICAgICkge1xuICAgICAgICAvLyAxLiBTZXQgcmVxdWVzdOKAmXMgcmVzcG9uc2UgdGFpbnRpbmcgdG8gXCJiYXNpY1wiLlxuICAgICAgICByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPSAnYmFzaWMnXG5cbiAgICAgICAgLy8gMi4gUmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZyBzY2hlbWUgZmV0Y2ggZ2l2ZW4gZmV0Y2hQYXJhbXMuXG4gICAgICAgIHJldHVybiBhd2FpdCBzY2hlbWVGZXRjaChmZXRjaFBhcmFtcylcbiAgICAgIH1cblxuICAgICAgLy8gcmVxdWVzdOKAmXMgbW9kZSBpcyBcInNhbWUtb3JpZ2luXCJcbiAgICAgIGlmIChyZXF1ZXN0Lm1vZGUgPT09ICdzYW1lLW9yaWdpbicpIHtcbiAgICAgICAgLy8gMS4gUmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgICAgICAgcmV0dXJuIG1ha2VOZXR3b3JrRXJyb3IoJ3JlcXVlc3QgbW9kZSBjYW5ub3QgYmUgXCJzYW1lLW9yaWdpblwiJylcbiAgICAgIH1cblxuICAgICAgLy8gcmVxdWVzdOKAmXMgbW9kZSBpcyBcIm5vLWNvcnNcIlxuICAgICAgaWYgKHJlcXVlc3QubW9kZSA9PT0gJ25vLWNvcnMnKSB7XG4gICAgICAgIC8vIDEuIElmIHJlcXVlc3TigJlzIHJlZGlyZWN0IG1vZGUgaXMgbm90IFwiZm9sbG93XCIsIHRoZW4gcmV0dXJuIGEgbmV0d29ya1xuICAgICAgICAvLyBlcnJvci5cbiAgICAgICAgaWYgKHJlcXVlc3QucmVkaXJlY3QgIT09ICdmb2xsb3cnKSB7XG4gICAgICAgICAgcmV0dXJuIG1ha2VOZXR3b3JrRXJyb3IoXG4gICAgICAgICAgICAncmVkaXJlY3QgbW9kZSBjYW5ub3QgYmUgXCJmb2xsb3dcIiBmb3IgXCJuby1jb3JzXCIgcmVxdWVzdCdcbiAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgICAgICAvLyAyLiBTZXQgcmVxdWVzdOKAmXMgcmVzcG9uc2UgdGFpbnRpbmcgdG8gXCJvcGFxdWVcIi5cbiAgICAgICAgcmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID0gJ29wYXF1ZSdcblxuICAgICAgICAvLyAzLiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBydW5uaW5nIHNjaGVtZSBmZXRjaCBnaXZlbiBmZXRjaFBhcmFtcy5cbiAgICAgICAgcmV0dXJuIGF3YWl0IHNjaGVtZUZldGNoKGZldGNoUGFyYW1zKVxuICAgICAgfVxuXG4gICAgICAvLyByZXF1ZXN04oCZcyBjdXJyZW50IFVSTOKAmXMgc2NoZW1lIGlzIG5vdCBhbiBIVFRQKFMpIHNjaGVtZVxuICAgICAgaWYgKCF1cmxJc0h0dHBIdHRwc1NjaGVtZShyZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KSkpIHtcbiAgICAgICAgLy8gUmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgICAgICAgcmV0dXJuIG1ha2VOZXR3b3JrRXJyb3IoJ1VSTCBzY2hlbWUgbXVzdCBiZSBhIEhUVFAoUykgc2NoZW1lJylcbiAgICAgIH1cblxuICAgICAgLy8gLSByZXF1ZXN04oCZcyB1c2UtQ09SUy1wcmVmbGlnaHQgZmxhZyBpcyBzZXRcbiAgICAgIC8vIC0gcmVxdWVzdOKAmXMgdW5zYWZlLXJlcXVlc3QgZmxhZyBpcyBzZXQgYW5kIGVpdGhlciByZXF1ZXN04oCZcyBtZXRob2QgaXNcbiAgICAgIC8vICAgbm90IGEgQ09SUy1zYWZlbGlzdGVkIG1ldGhvZCBvciBDT1JTLXVuc2FmZSByZXF1ZXN0LWhlYWRlciBuYW1lcyB3aXRoXG4gICAgICAvLyAgIHJlcXVlc3TigJlzIGhlYWRlciBsaXN0IGlzIG5vdCBlbXB0eVxuICAgICAgLy8gICAgMS4gU2V0IHJlcXVlc3TigJlzIHJlc3BvbnNlIHRhaW50aW5nIHRvIFwiY29yc1wiLlxuICAgICAgLy8gICAgMi4gTGV0IGNvcnNXaXRoUHJlZmxpZ2h0UmVzcG9uc2UgYmUgdGhlIHJlc3VsdCBvZiBydW5uaW5nIEhUVFAgZmV0Y2hcbiAgICAgIC8vICAgIGdpdmVuIGZldGNoUGFyYW1zIGFuZCB0cnVlLlxuICAgICAgLy8gICAgMy4gSWYgY29yc1dpdGhQcmVmbGlnaHRSZXNwb25zZSBpcyBhIG5ldHdvcmsgZXJyb3IsIHRoZW4gY2xlYXIgY2FjaGVcbiAgICAgIC8vICAgIGVudHJpZXMgdXNpbmcgcmVxdWVzdC5cbiAgICAgIC8vICAgIDQuIFJldHVybiBjb3JzV2l0aFByZWZsaWdodFJlc3BvbnNlLlxuICAgICAgLy8gVE9ET1xuXG4gICAgICAvLyBPdGhlcndpc2VcbiAgICAgIC8vICAgIDEuIFNldCByZXF1ZXN04oCZcyByZXNwb25zZSB0YWludGluZyB0byBcImNvcnNcIi5cbiAgICAgIHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9ICdjb3JzJ1xuXG4gICAgICAvLyAgICAyLiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBydW5uaW5nIEhUVFAgZmV0Y2ggZ2l2ZW4gZmV0Y2hQYXJhbXMuXG4gICAgICByZXR1cm4gYXdhaXQgaHR0cEZldGNoKGZldGNoUGFyYW1zKVxuICAgIH0pKClcbiAgfVxuXG4gIC8vIDEyLiBJZiByZWN1cnNpdmUgaXMgdHJ1ZSwgdGhlbiByZXR1cm4gcmVzcG9uc2UuXG4gIGlmIChyZWN1cnNpdmUpIHtcbiAgICByZXR1cm4gcmVzcG9uc2VcbiAgfVxuXG4gIC8vIDEzLiBJZiByZXNwb25zZSBpcyBub3QgYSBuZXR3b3JrIGVycm9yIGFuZCByZXNwb25zZSBpcyBub3QgYSBmaWx0ZXJlZFxuICAvLyByZXNwb25zZSwgdGhlbjpcbiAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gMCAmJiAhcmVzcG9uc2UuaW50ZXJuYWxSZXNwb25zZSkge1xuICAgIC8vIElmIHJlcXVlc3TigJlzIHJlc3BvbnNlIHRhaW50aW5nIGlzIFwiY29yc1wiLCB0aGVuOlxuICAgIGlmIChyZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdjb3JzJykge1xuICAgICAgLy8gMS4gTGV0IGhlYWRlck5hbWVzIGJlIHRoZSByZXN1bHQgb2YgZXh0cmFjdGluZyBoZWFkZXIgbGlzdCB2YWx1ZXNcbiAgICAgIC8vIGdpdmVuIGBBY2Nlc3MtQ29udHJvbC1FeHBvc2UtSGVhZGVyc2AgYW5kIHJlc3BvbnNl4oCZcyBoZWFkZXIgbGlzdC5cbiAgICAgIC8vIFRPRE9cbiAgICAgIC8vIDIuIElmIHJlcXVlc3TigJlzIGNyZWRlbnRpYWxzIG1vZGUgaXMgbm90IFwiaW5jbHVkZVwiIGFuZCBoZWFkZXJOYW1lc1xuICAgICAgLy8gY29udGFpbnMgYCpgLCB0aGVuIHNldCByZXNwb25zZeKAmXMgQ09SUy1leHBvc2VkIGhlYWRlci1uYW1lIGxpc3QgdG9cbiAgICAgIC8vIGFsbCB1bmlxdWUgaGVhZGVyIG5hbWVzIGluIHJlc3BvbnNl4oCZcyBoZWFkZXIgbGlzdC5cbiAgICAgIC8vIFRPRE9cbiAgICAgIC8vIDMuIE90aGVyd2lzZSwgaWYgaGVhZGVyTmFtZXMgaXMgbm90IG51bGwgb3IgZmFpbHVyZSwgdGhlbiBzZXRcbiAgICAgIC8vIHJlc3BvbnNl4oCZcyBDT1JTLWV4cG9zZWQgaGVhZGVyLW5hbWUgbGlzdCB0byBoZWFkZXJOYW1lcy5cbiAgICAgIC8vIFRPRE9cbiAgICB9XG5cbiAgICAvLyBTZXQgcmVzcG9uc2UgdG8gdGhlIGZvbGxvd2luZyBmaWx0ZXJlZCByZXNwb25zZSB3aXRoIHJlc3BvbnNlIGFzIGl0c1xuICAgIC8vIGludGVybmFsIHJlc3BvbnNlLCBkZXBlbmRpbmcgb24gcmVxdWVzdOKAmXMgcmVzcG9uc2UgdGFpbnRpbmc6XG4gICAgaWYgKHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ2Jhc2ljJykge1xuICAgICAgcmVzcG9uc2UgPSBmaWx0ZXJSZXNwb25zZShyZXNwb25zZSwgJ2Jhc2ljJylcbiAgICB9IGVsc2UgaWYgKHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ2NvcnMnKSB7XG4gICAgICByZXNwb25zZSA9IGZpbHRlclJlc3BvbnNlKHJlc3BvbnNlLCAnY29ycycpXG4gICAgfSBlbHNlIGlmIChyZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdvcGFxdWUnKSB7XG4gICAgICByZXNwb25zZSA9IGZpbHRlclJlc3BvbnNlKHJlc3BvbnNlLCAnb3BhcXVlJylcbiAgICB9IGVsc2Uge1xuICAgICAgYXNzZXJ0KGZhbHNlKVxuICAgIH1cbiAgfVxuXG4gIC8vIDE0LiBMZXQgaW50ZXJuYWxSZXNwb25zZSBiZSByZXNwb25zZSwgaWYgcmVzcG9uc2UgaXMgYSBuZXR3b3JrIGVycm9yLFxuICAvLyBhbmQgcmVzcG9uc2XigJlzIGludGVybmFsIHJlc3BvbnNlIG90aGVyd2lzZS5cbiAgbGV0IGludGVybmFsUmVzcG9uc2UgPVxuICAgIHJlc3BvbnNlLnN0YXR1cyA9PT0gMCA/IHJlc3BvbnNlIDogcmVzcG9uc2UuaW50ZXJuYWxSZXNwb25zZVxuXG4gIC8vIDE1LiBJZiBpbnRlcm5hbFJlc3BvbnNl4oCZcyBVUkwgbGlzdCBpcyBlbXB0eSwgdGhlbiBzZXQgaXQgdG8gYSBjbG9uZSBvZlxuICAvLyByZXF1ZXN04oCZcyBVUkwgbGlzdC5cbiAgaWYgKGludGVybmFsUmVzcG9uc2UudXJsTGlzdC5sZW5ndGggPT09IDApIHtcbiAgICBpbnRlcm5hbFJlc3BvbnNlLnVybExpc3QucHVzaCguLi5yZXF1ZXN0LnVybExpc3QpXG4gIH1cblxuICAvLyAxNi4gSWYgcmVxdWVzdOKAmXMgdGltaW5nIGFsbG93IGZhaWxlZCBmbGFnIGlzIHVuc2V0LCB0aGVuIHNldFxuICAvLyBpbnRlcm5hbFJlc3BvbnNl4oCZcyB0aW1pbmcgYWxsb3cgcGFzc2VkIGZsYWcuXG4gIGlmICghcmVxdWVzdC50aW1pbmdBbGxvd0ZhaWxlZCkge1xuICAgIHJlc3BvbnNlLnRpbWluZ0FsbG93UGFzc2VkID0gdHJ1ZVxuICB9XG5cbiAgLy8gMTcuIElmIHJlc3BvbnNlIGlzIG5vdCBhIG5ldHdvcmsgZXJyb3IgYW5kIGFueSBvZiB0aGUgZm9sbG93aW5nIHJldHVybnNcbiAgLy8gYmxvY2tlZFxuICAvLyAtIHNob3VsZCBpbnRlcm5hbFJlc3BvbnNlIHRvIHJlcXVlc3QgYmUgYmxvY2tlZCBhcyBtaXhlZCBjb250ZW50XG4gIC8vIC0gc2hvdWxkIGludGVybmFsUmVzcG9uc2UgdG8gcmVxdWVzdCBiZSBibG9ja2VkIGJ5IENvbnRlbnQgU2VjdXJpdHkgUG9saWN5XG4gIC8vIC0gc2hvdWxkIGludGVybmFsUmVzcG9uc2UgdG8gcmVxdWVzdCBiZSBibG9ja2VkIGR1ZSB0byBpdHMgTUlNRSB0eXBlXG4gIC8vIC0gc2hvdWxkIGludGVybmFsUmVzcG9uc2UgdG8gcmVxdWVzdCBiZSBibG9ja2VkIGR1ZSB0byBub3NuaWZmXG4gIC8vIFRPRE9cblxuICAvLyAxOC4gSWYgcmVzcG9uc2XigJlzIHR5cGUgaXMgXCJvcGFxdWVcIiwgaW50ZXJuYWxSZXNwb25zZeKAmXMgc3RhdHVzIGlzIDIwNixcbiAgLy8gaW50ZXJuYWxSZXNwb25zZeKAmXMgcmFuZ2UtcmVxdWVzdGVkIGZsYWcgaXMgc2V0LCBhbmQgcmVxdWVzdOKAmXMgaGVhZGVyXG4gIC8vIGxpc3QgZG9lcyBub3QgY29udGFpbiBgUmFuZ2VgLCB0aGVuIHNldCByZXNwb25zZSBhbmQgaW50ZXJuYWxSZXNwb25zZVxuICAvLyB0byBhIG5ldHdvcmsgZXJyb3IuXG4gIGlmIChcbiAgICByZXNwb25zZS50eXBlID09PSAnb3BhcXVlJyAmJlxuICAgIGludGVybmFsUmVzcG9uc2Uuc3RhdHVzID09PSAyMDYgJiZcbiAgICBpbnRlcm5hbFJlc3BvbnNlLnJhbmdlUmVxdWVzdGVkICYmXG4gICAgIXJlcXVlc3QuaGVhZGVycy5jb250YWlucygncmFuZ2UnKVxuICApIHtcbiAgICByZXNwb25zZSA9IGludGVybmFsUmVzcG9uc2UgPSBtYWtlTmV0d29ya0Vycm9yKClcbiAgfVxuXG4gIC8vIDE5LiBJZiByZXNwb25zZSBpcyBub3QgYSBuZXR3b3JrIGVycm9yIGFuZCBlaXRoZXIgcmVxdWVzdOKAmXMgbWV0aG9kIGlzXG4gIC8vIGBIRUFEYCBvciBgQ09OTkVDVGAsIG9yIGludGVybmFsUmVzcG9uc2XigJlzIHN0YXR1cyBpcyBhIG51bGwgYm9keSBzdGF0dXMsXG4gIC8vIHNldCBpbnRlcm5hbFJlc3BvbnNl4oCZcyBib2R5IHRvIG51bGwgYW5kIGRpc3JlZ2FyZCBhbnkgZW5xdWV1aW5nIHRvd2FyZFxuICAvLyBpdCAoaWYgYW55KS5cbiAgaWYgKFxuICAgIHJlc3BvbnNlLnN0YXR1cyAhPT0gMCAmJlxuICAgIChyZXF1ZXN0Lm1ldGhvZCA9PT0gJ0hFQUQnIHx8XG4gICAgICByZXF1ZXN0Lm1ldGhvZCA9PT0gJ0NPTk5FQ1QnIHx8XG4gICAgICBudWxsQm9keVN0YXR1cy5pbmNsdWRlcyhpbnRlcm5hbFJlc3BvbnNlLnN0YXR1cykpXG4gICkge1xuICAgIGludGVybmFsUmVzcG9uc2UuYm9keSA9IG51bGxcbiAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmR1bXAgPSB0cnVlXG4gIH1cblxuICAvLyAyMC4gSWYgcmVxdWVzdOKAmXMgaW50ZWdyaXR5IG1ldGFkYXRhIGlzIG5vdCB0aGUgZW1wdHkgc3RyaW5nLCB0aGVuOlxuICBpZiAocmVxdWVzdC5pbnRlZ3JpdHkpIHtcbiAgICAvLyAxLiBMZXQgcHJvY2Vzc0JvZHlFcnJvciBiZSB0aGlzIHN0ZXA6IHJ1biBmZXRjaCBmaW5hbGUgZ2l2ZW4gZmV0Y2hQYXJhbXNcbiAgICAvLyBhbmQgYSBuZXR3b3JrIGVycm9yLlxuICAgIGNvbnN0IHByb2Nlc3NCb2R5RXJyb3IgPSAocmVhc29uKSA9PlxuICAgICAgZmV0Y2hGaW5hbGUoZmV0Y2hQYXJhbXMsIG1ha2VOZXR3b3JrRXJyb3IocmVhc29uKSlcblxuICAgIC8vIDIuIElmIHJlcXVlc3TigJlzIHJlc3BvbnNlIHRhaW50aW5nIGlzIFwib3BhcXVlXCIsIG9yIHJlc3BvbnNl4oCZcyBib2R5IGlzIG51bGwsXG4gICAgLy8gdGhlbiBydW4gcHJvY2Vzc0JvZHlFcnJvciBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMuXG4gICAgaWYgKHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ29wYXF1ZScgfHwgcmVzcG9uc2UuYm9keSA9PSBudWxsKSB7XG4gICAgICBwcm9jZXNzQm9keUVycm9yKHJlc3BvbnNlLmVycm9yKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gMy4gTGV0IHByb2Nlc3NCb2R5IGdpdmVuIGJ5dGVzIGJlIHRoZXNlIHN0ZXBzOlxuICAgIGNvbnN0IHByb2Nlc3NCb2R5ID0gKGJ5dGVzKSA9PiB7XG4gICAgICAvLyAxLiBJZiBieXRlcyBkbyBub3QgbWF0Y2ggcmVxdWVzdOKAmXMgaW50ZWdyaXR5IG1ldGFkYXRhLFxuICAgICAgLy8gdGhlbiBydW4gcHJvY2Vzc0JvZHlFcnJvciBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMuIFtTUkldXG4gICAgICBpZiAoIWJ5dGVzTWF0Y2goYnl0ZXMsIHJlcXVlc3QuaW50ZWdyaXR5KSkge1xuICAgICAgICBwcm9jZXNzQm9keUVycm9yKCdpbnRlZ3JpdHkgbWlzbWF0Y2gnKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gMi4gU2V0IHJlc3BvbnNl4oCZcyBib2R5IHRvIGJ5dGVzIGFzIGEgYm9keS5cbiAgICAgIHJlc3BvbnNlLmJvZHkgPSBzYWZlbHlFeHRyYWN0Qm9keShieXRlcylbMF1cblxuICAgICAgLy8gMy4gUnVuIGZldGNoIGZpbmFsZSBnaXZlbiBmZXRjaFBhcmFtcyBhbmQgcmVzcG9uc2UuXG4gICAgICBmZXRjaEZpbmFsZShmZXRjaFBhcmFtcywgcmVzcG9uc2UpXG4gICAgfVxuXG4gICAgLy8gNC4gRnVsbHkgcmVhZCByZXNwb25zZeKAmXMgYm9keSBnaXZlbiBwcm9jZXNzQm9keSBhbmQgcHJvY2Vzc0JvZHlFcnJvci5cbiAgICBhd2FpdCBmdWxseVJlYWRCb2R5KHJlc3BvbnNlLmJvZHksIHByb2Nlc3NCb2R5LCBwcm9jZXNzQm9keUVycm9yKVxuICB9IGVsc2Uge1xuICAgIC8vIDIxLiBPdGhlcndpc2UsIHJ1biBmZXRjaCBmaW5hbGUgZ2l2ZW4gZmV0Y2hQYXJhbXMgYW5kIHJlc3BvbnNlLlxuICAgIGZldGNoRmluYWxlKGZldGNoUGFyYW1zLCByZXNwb25zZSlcbiAgfVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1zY2hlbWUtZmV0Y2hcbi8vIGdpdmVuIGEgZmV0Y2ggcGFyYW1zIGZldGNoUGFyYW1zXG5mdW5jdGlvbiBzY2hlbWVGZXRjaCAoZmV0Y2hQYXJhbXMpIHtcbiAgLy8gTm90ZTogc2luY2UgdGhlIGNvbm5lY3Rpb24gaXMgZGVzdHJveWVkIG9uIHJlZGlyZWN0LCB3aGljaCBzZXRzIGZldGNoUGFyYW1zIHRvIGFcbiAgLy8gY2FuY2VsbGVkIHN0YXRlLCB3ZSBkbyBub3Qgd2FudCB0aGlzIGNvbmRpdGlvbiB0byB0cmlnZ2VyICp1bmxlc3MqIHRoZXJlIGhhdmUgYmVlblxuICAvLyBubyByZWRpcmVjdHMuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMTc3NlxuICAvLyAxLiBJZiBmZXRjaFBhcmFtcyBpcyBjYW5jZWxlZCwgdGhlbiByZXR1cm4gdGhlIGFwcHJvcHJpYXRlIG5ldHdvcmsgZXJyb3IgZm9yIGZldGNoUGFyYW1zLlxuICBpZiAoaXNDYW5jZWxsZWQoZmV0Y2hQYXJhbXMpICYmIGZldGNoUGFyYW1zLnJlcXVlc3QucmVkaXJlY3RDb3VudCA9PT0gMCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZUFwcHJvcHJpYXRlTmV0d29ya0Vycm9yKGZldGNoUGFyYW1zKSlcbiAgfVxuXG4gIC8vIDIuIExldCByZXF1ZXN0IGJlIGZldGNoUGFyYW1z4oCZcyByZXF1ZXN0LlxuICBjb25zdCB7IHJlcXVlc3QgfSA9IGZldGNoUGFyYW1zXG5cbiAgY29uc3QgeyBwcm90b2NvbDogc2NoZW1lIH0gPSByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KVxuXG4gIC8vIDMuIFN3aXRjaCBvbiByZXF1ZXN04oCZcyBjdXJyZW50IFVSTOKAmXMgc2NoZW1lIGFuZCBydW4gdGhlIGFzc29jaWF0ZWQgc3RlcHM6XG4gIHN3aXRjaCAoc2NoZW1lKSB7XG4gICAgY2FzZSAnYWJvdXQ6Jzoge1xuICAgICAgLy8gSWYgcmVxdWVzdOKAmXMgY3VycmVudCBVUkzigJlzIHBhdGggaXMgdGhlIHN0cmluZyBcImJsYW5rXCIsIHRoZW4gcmV0dXJuIGEgbmV3IHJlc3BvbnNlXG4gICAgICAvLyB3aG9zZSBzdGF0dXMgbWVzc2FnZSBpcyBgT0tgLCBoZWFkZXIgbGlzdCBpcyDCqyAoYENvbnRlbnQtVHlwZWAsIGB0ZXh0L2h0bWw7Y2hhcnNldD11dGYtOGApIMK7LFxuICAgICAgLy8gYW5kIGJvZHkgaXMgdGhlIGVtcHR5IGJ5dGUgc2VxdWVuY2UgYXMgYSBib2R5LlxuXG4gICAgICAvLyBPdGhlcndpc2UsIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoJ2Fib3V0IHNjaGVtZSBpcyBub3Qgc3VwcG9ydGVkJykpXG4gICAgfVxuICAgIGNhc2UgJ2Jsb2I6Jzoge1xuICAgICAgaWYgKCFyZXNvbHZlT2JqZWN0VVJMKSB7XG4gICAgICAgIHJlc29sdmVPYmplY3RVUkwgPSByZXF1aXJlKCdidWZmZXInKS5yZXNvbHZlT2JqZWN0VVJMXG4gICAgICB9XG5cbiAgICAgIC8vIDEuIExldCBibG9iVVJMRW50cnkgYmUgcmVxdWVzdOKAmXMgY3VycmVudCBVUkzigJlzIGJsb2IgVVJMIGVudHJ5LlxuICAgICAgY29uc3QgYmxvYlVSTEVudHJ5ID0gcmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdClcblxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3dlYi1wbGF0Zm9ybS10ZXN0cy93cHQvYmxvYi83YjBlYmFjY2M2MmI1NjZhMTk2NTM5NmU1YmU3YmIyYmMwNmY4NDFmL0ZpbGVBUEkvdXJsL3Jlc291cmNlcy9mZXRjaC10ZXN0cy5qcyNMNTItTDU2XG4gICAgICAvLyBCdWZmZXIucmVzb2x2ZU9iamVjdFVSTCBkb2VzIG5vdCBpZ25vcmUgVVJMIHF1ZXJpZXMuXG4gICAgICBpZiAoYmxvYlVSTEVudHJ5LnNlYXJjaC5sZW5ndGggIT09IDApIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKCdOZXR3b3JrRXJyb3Igd2hlbiBhdHRlbXB0aW5nIHRvIGZldGNoIHJlc291cmNlLicpKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBibG9iVVJMRW50cnlPYmplY3QgPSByZXNvbHZlT2JqZWN0VVJMKGJsb2JVUkxFbnRyeS50b1N0cmluZygpKVxuXG4gICAgICAvLyAyLiBJZiByZXF1ZXN04oCZcyBtZXRob2QgaXMgbm90IGBHRVRgLCBibG9iVVJMRW50cnkgaXMgbnVsbCwgb3IgYmxvYlVSTEVudHJ54oCZc1xuICAgICAgLy8gICAgb2JqZWN0IGlzIG5vdCBhIEJsb2Igb2JqZWN0LCB0aGVuIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgICBpZiAocmVxdWVzdC5tZXRob2QgIT09ICdHRVQnIHx8ICFpc0Jsb2JMaWtlKGJsb2JVUkxFbnRyeU9iamVjdCkpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKCdpbnZhbGlkIG1ldGhvZCcpKVxuICAgICAgfVxuXG4gICAgICAvLyAzLiBMZXQgYm9keVdpdGhUeXBlIGJlIHRoZSByZXN1bHQgb2Ygc2FmZWx5IGV4dHJhY3RpbmcgYmxvYlVSTEVudHJ54oCZcyBvYmplY3QuXG4gICAgICBjb25zdCBib2R5V2l0aFR5cGUgPSBzYWZlbHlFeHRyYWN0Qm9keShibG9iVVJMRW50cnlPYmplY3QpXG5cbiAgICAgIC8vIDQuIExldCBib2R5IGJlIGJvZHlXaXRoVHlwZeKAmXMgYm9keS5cbiAgICAgIGNvbnN0IGJvZHkgPSBib2R5V2l0aFR5cGVbMF1cblxuICAgICAgLy8gNS4gTGV0IGxlbmd0aCBiZSBib2R54oCZcyBsZW5ndGgsIHNlcmlhbGl6ZWQgYW5kIGlzb21vcnBoaWMgZW5jb2RlZC5cbiAgICAgIGNvbnN0IGxlbmd0aCA9IGlzb21vcnBoaWNFbmNvZGUoYCR7Ym9keS5sZW5ndGh9YClcblxuICAgICAgLy8gNi4gTGV0IHR5cGUgYmUgYm9keVdpdGhUeXBl4oCZcyB0eXBlIGlmIGl0IGlzIG5vbi1udWxsOyBvdGhlcndpc2UgdGhlIGVtcHR5IGJ5dGUgc2VxdWVuY2UuXG4gICAgICBjb25zdCB0eXBlID0gYm9keVdpdGhUeXBlWzFdID8/ICcnXG5cbiAgICAgIC8vIDcuIFJldHVybiBhIG5ldyByZXNwb25zZSB3aG9zZSBzdGF0dXMgbWVzc2FnZSBpcyBgT0tgLCBoZWFkZXIgbGlzdCBpc1xuICAgICAgLy8gICAgwqsgKGBDb250ZW50LUxlbmd0aGAsIGxlbmd0aCksIChgQ29udGVudC1UeXBlYCwgdHlwZSkgwrssIGFuZCBib2R5IGlzIGJvZHkuXG4gICAgICBjb25zdCByZXNwb25zZSA9IG1ha2VSZXNwb25zZSh7XG4gICAgICAgIHN0YXR1c1RleHQ6ICdPSycsXG4gICAgICAgIGhlYWRlcnNMaXN0OiBbXG4gICAgICAgICAgWydjb250ZW50LWxlbmd0aCcsIHsgbmFtZTogJ0NvbnRlbnQtTGVuZ3RoJywgdmFsdWU6IGxlbmd0aCB9XSxcbiAgICAgICAgICBbJ2NvbnRlbnQtdHlwZScsIHsgbmFtZTogJ0NvbnRlbnQtVHlwZScsIHZhbHVlOiB0eXBlIH1dXG4gICAgICAgIF1cbiAgICAgIH0pXG5cbiAgICAgIHJlc3BvbnNlLmJvZHkgPSBib2R5XG5cbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzcG9uc2UpXG4gICAgfVxuICAgIGNhc2UgJ2RhdGE6Jzoge1xuICAgICAgLy8gMS4gTGV0IGRhdGFVUkxTdHJ1Y3QgYmUgdGhlIHJlc3VsdCBvZiBydW5uaW5nIHRoZVxuICAgICAgLy8gICAgZGF0YTogVVJMIHByb2Nlc3NvciBvbiByZXF1ZXN04oCZcyBjdXJyZW50IFVSTC5cbiAgICAgIGNvbnN0IGN1cnJlbnRVUkwgPSByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KVxuICAgICAgY29uc3QgZGF0YVVSTFN0cnVjdCA9IGRhdGFVUkxQcm9jZXNzb3IoY3VycmVudFVSTClcblxuICAgICAgLy8gMi4gSWYgZGF0YVVSTFN0cnVjdCBpcyBmYWlsdXJlLCB0aGVuIHJldHVybiBhXG4gICAgICAvLyAgICBuZXR3b3JrIGVycm9yLlxuICAgICAgaWYgKGRhdGFVUkxTdHJ1Y3QgPT09ICdmYWlsdXJlJykge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoJ2ZhaWxlZCB0byBmZXRjaCB0aGUgZGF0YSBVUkwnKSlcbiAgICAgIH1cblxuICAgICAgLy8gMy4gTGV0IG1pbWVUeXBlIGJlIGRhdGFVUkxTdHJ1Y3TigJlzIE1JTUUgdHlwZSwgc2VyaWFsaXplZC5cbiAgICAgIGNvbnN0IG1pbWVUeXBlID0gc2VyaWFsaXplQU1pbWVUeXBlKGRhdGFVUkxTdHJ1Y3QubWltZVR5cGUpXG5cbiAgICAgIC8vIDQuIFJldHVybiBhIHJlc3BvbnNlIHdob3NlIHN0YXR1cyBtZXNzYWdlIGlzIGBPS2AsXG4gICAgICAvLyAgICBoZWFkZXIgbGlzdCBpcyDCqyAoYENvbnRlbnQtVHlwZWAsIG1pbWVUeXBlKSDCuyxcbiAgICAgIC8vICAgIGFuZCBib2R5IGlzIGRhdGFVUkxTdHJ1Y3TigJlzIGJvZHkgYXMgYSBib2R5LlxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlUmVzcG9uc2Uoe1xuICAgICAgICBzdGF0dXNUZXh0OiAnT0snLFxuICAgICAgICBoZWFkZXJzTGlzdDogW1xuICAgICAgICAgIFsnY29udGVudC10eXBlJywgeyBuYW1lOiAnQ29udGVudC1UeXBlJywgdmFsdWU6IG1pbWVUeXBlIH1dXG4gICAgICAgIF0sXG4gICAgICAgIGJvZHk6IHNhZmVseUV4dHJhY3RCb2R5KGRhdGFVUkxTdHJ1Y3QuYm9keSlbMF1cbiAgICAgIH0pKVxuICAgIH1cbiAgICBjYXNlICdmaWxlOic6IHtcbiAgICAgIC8vIEZvciBub3csIHVuZm9ydHVuYXRlIGFzIGl0IGlzLCBmaWxlIFVSTHMgYXJlIGxlZnQgYXMgYW4gZXhlcmNpc2UgZm9yIHRoZSByZWFkZXIuXG4gICAgICAvLyBXaGVuIGluIGRvdWJ0LCByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKCdub3QgaW1wbGVtZW50ZWQuLi4geWV0Li4uJykpXG4gICAgfVxuICAgIGNhc2UgJ2h0dHA6JzpcbiAgICBjYXNlICdodHRwczonOiB7XG4gICAgICAvLyBSZXR1cm4gdGhlIHJlc3VsdCBvZiBydW5uaW5nIEhUVFAgZmV0Y2ggZ2l2ZW4gZmV0Y2hQYXJhbXMuXG5cbiAgICAgIHJldHVybiBodHRwRmV0Y2goZmV0Y2hQYXJhbXMpXG4gICAgICAgIC5jYXRjaCgoZXJyKSA9PiBtYWtlTmV0d29ya0Vycm9yKGVycikpXG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcigndW5rbm93biBzY2hlbWUnKSlcbiAgICB9XG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2ZpbmFsaXplLXJlc3BvbnNlXG5mdW5jdGlvbiBmaW5hbGl6ZVJlc3BvbnNlIChmZXRjaFBhcmFtcywgcmVzcG9uc2UpIHtcbiAgLy8gMS4gU2V0IGZldGNoUGFyYW1z4oCZcyByZXF1ZXN04oCZcyBkb25lIGZsYWcuXG4gIGZldGNoUGFyYW1zLnJlcXVlc3QuZG9uZSA9IHRydWVcblxuICAvLyAyLCBJZiBmZXRjaFBhcmFtc+KAmXMgcHJvY2VzcyByZXNwb25zZSBkb25lIGlzIG5vdCBudWxsLCB0aGVuIHF1ZXVlIGEgZmV0Y2hcbiAgLy8gdGFzayB0byBydW4gZmV0Y2hQYXJhbXPigJlzIHByb2Nlc3MgcmVzcG9uc2UgZG9uZSBnaXZlbiByZXNwb25zZSwgd2l0aFxuICAvLyBmZXRjaFBhcmFtc+KAmXMgdGFzayBkZXN0aW5hdGlvbi5cbiAgaWYgKGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZURvbmUgIT0gbnVsbCkge1xuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZURvbmUocmVzcG9uc2UpKVxuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmZXRjaC1maW5hbGVcbmZ1bmN0aW9uIGZldGNoRmluYWxlIChmZXRjaFBhcmFtcywgcmVzcG9uc2UpIHtcbiAgLy8gMS4gSWYgcmVzcG9uc2UgaXMgYSBuZXR3b3JrIGVycm9yLCB0aGVuOlxuICBpZiAocmVzcG9uc2UudHlwZSA9PT0gJ2Vycm9yJykge1xuICAgIC8vIDEuIFNldCByZXNwb25zZeKAmXMgVVJMIGxpc3QgdG8gwqsgZmV0Y2hQYXJhbXPigJlzIHJlcXVlc3TigJlzIFVSTCBsaXN0WzBdIMK7LlxuICAgIHJlc3BvbnNlLnVybExpc3QgPSBbZmV0Y2hQYXJhbXMucmVxdWVzdC51cmxMaXN0WzBdXVxuXG4gICAgLy8gMi4gU2V0IHJlc3BvbnNl4oCZcyB0aW1pbmcgaW5mbyB0byB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGFuIG9wYXF1ZSB0aW1pbmdcbiAgICAvLyBpbmZvIGZvciBmZXRjaFBhcmFtc+KAmXMgdGltaW5nIGluZm8uXG4gICAgcmVzcG9uc2UudGltaW5nSW5mbyA9IGNyZWF0ZU9wYXF1ZVRpbWluZ0luZm8oe1xuICAgICAgc3RhcnRUaW1lOiBmZXRjaFBhcmFtcy50aW1pbmdJbmZvLnN0YXJ0VGltZVxuICAgIH0pXG4gIH1cblxuICAvLyAyLiBMZXQgcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5IGJlIHRoZSBmb2xsb3dpbmcgc3RlcHM6XG4gIGNvbnN0IHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSA9ICgpID0+IHtcbiAgICAvLyAxLiBTZXQgZmV0Y2hQYXJhbXPigJlzIHJlcXVlc3TigJlzIGRvbmUgZmxhZy5cbiAgICBmZXRjaFBhcmFtcy5yZXF1ZXN0LmRvbmUgPSB0cnVlXG5cbiAgICAvLyBJZiBmZXRjaFBhcmFtc+KAmXMgcHJvY2VzcyByZXNwb25zZSBlbmQtb2YtYm9keSBpcyBub3QgbnVsbCxcbiAgICAvLyB0aGVuIHF1ZXVlIGEgZmV0Y2ggdGFzayB0byBydW4gZmV0Y2hQYXJhbXPigJlzIHByb2Nlc3MgcmVzcG9uc2VcbiAgICAvLyBlbmQtb2YtYm9keSBnaXZlbiByZXNwb25zZSB3aXRoIGZldGNoUGFyYW1z4oCZcyB0YXNrIGRlc3RpbmF0aW9uLlxuICAgIGlmIChmZXRjaFBhcmFtcy5wcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHkgIT0gbnVsbCkge1xuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gZmV0Y2hQYXJhbXMucHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5KHJlc3BvbnNlKSlcbiAgICB9XG4gIH1cblxuICAvLyAzLiBJZiBmZXRjaFBhcmFtc+KAmXMgcHJvY2VzcyByZXNwb25zZSBpcyBub24tbnVsbCwgdGhlbiBxdWV1ZSBhIGZldGNoIHRhc2tcbiAgLy8gdG8gcnVuIGZldGNoUGFyYW1z4oCZcyBwcm9jZXNzIHJlc3BvbnNlIGdpdmVuIHJlc3BvbnNlLCB3aXRoIGZldGNoUGFyYW1z4oCZc1xuICAvLyB0YXNrIGRlc3RpbmF0aW9uLlxuICBpZiAoZmV0Y2hQYXJhbXMucHJvY2Vzc1Jlc3BvbnNlICE9IG51bGwpIHtcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBmZXRjaFBhcmFtcy5wcm9jZXNzUmVzcG9uc2UocmVzcG9uc2UpKVxuICB9XG5cbiAgLy8gNC4gSWYgcmVzcG9uc2XigJlzIGJvZHkgaXMgbnVsbCwgdGhlbiBydW4gcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5LlxuICBpZiAocmVzcG9uc2UuYm9keSA9PSBudWxsKSB7XG4gICAgcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5KClcbiAgfSBlbHNlIHtcbiAgLy8gNS4gT3RoZXJ3aXNlOlxuXG4gICAgLy8gMS4gTGV0IHRyYW5zZm9ybVN0cmVhbSBiZSBhIG5ldyBhIFRyYW5zZm9ybVN0cmVhbS5cblxuICAgIC8vIDIuIExldCBpZGVudGl0eVRyYW5zZm9ybUFsZ29yaXRobSBiZSBhbiBhbGdvcml0aG0gd2hpY2gsIGdpdmVuIGNodW5rLFxuICAgIC8vIGVucXVldWVzIGNodW5rIGluIHRyYW5zZm9ybVN0cmVhbS5cbiAgICBjb25zdCBpZGVudGl0eVRyYW5zZm9ybUFsZ29yaXRobSA9IChjaHVuaywgY29udHJvbGxlcikgPT4ge1xuICAgICAgY29udHJvbGxlci5lbnF1ZXVlKGNodW5rKVxuICAgIH1cblxuICAgIC8vIDMuIFNldCB1cCB0cmFuc2Zvcm1TdHJlYW0gd2l0aCB0cmFuc2Zvcm1BbGdvcml0aG0gc2V0IHRvIGlkZW50aXR5VHJhbnNmb3JtQWxnb3JpdGhtXG4gICAgLy8gYW5kIGZsdXNoQWxnb3JpdGhtIHNldCB0byBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHkuXG4gICAgY29uc3QgdHJhbnNmb3JtU3RyZWFtID0gbmV3IFRyYW5zZm9ybVN0cmVhbSh7XG4gICAgICBzdGFydCAoKSB7fSxcbiAgICAgIHRyYW5zZm9ybTogaWRlbnRpdHlUcmFuc2Zvcm1BbGdvcml0aG0sXG4gICAgICBmbHVzaDogcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5XG4gICAgfSwge1xuICAgICAgc2l6ZSAoKSB7XG4gICAgICAgIHJldHVybiAxXG4gICAgICB9XG4gICAgfSwge1xuICAgICAgc2l6ZSAoKSB7XG4gICAgICAgIHJldHVybiAxXG4gICAgICB9XG4gICAgfSlcblxuICAgIC8vIDQuIFNldCByZXNwb25zZeKAmXMgYm9keSB0byB0aGUgcmVzdWx0IG9mIHBpcGluZyByZXNwb25zZeKAmXMgYm9keSB0aHJvdWdoIHRyYW5zZm9ybVN0cmVhbS5cbiAgICByZXNwb25zZS5ib2R5ID0geyBzdHJlYW06IHJlc3BvbnNlLmJvZHkuc3RyZWFtLnBpcGVUaHJvdWdoKHRyYW5zZm9ybVN0cmVhbSkgfVxuICB9XG5cbiAgLy8gNi4gSWYgZmV0Y2hQYXJhbXPigJlzIHByb2Nlc3MgcmVzcG9uc2UgY29uc3VtZSBib2R5IGlzIG5vbi1udWxsLCB0aGVuOlxuICBpZiAoZmV0Y2hQYXJhbXMucHJvY2Vzc1Jlc3BvbnNlQ29uc3VtZUJvZHkgIT0gbnVsbCkge1xuICAgIC8vIDEuIExldCBwcm9jZXNzQm9keSBnaXZlbiBudWxsT3JCeXRlcyBiZSB0aGlzIHN0ZXA6IHJ1biBmZXRjaFBhcmFtc+KAmXNcbiAgICAvLyBwcm9jZXNzIHJlc3BvbnNlIGNvbnN1bWUgYm9keSBnaXZlbiByZXNwb25zZSBhbmQgbnVsbE9yQnl0ZXMuXG4gICAgY29uc3QgcHJvY2Vzc0JvZHkgPSAobnVsbE9yQnl0ZXMpID0+IGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZUNvbnN1bWVCb2R5KHJlc3BvbnNlLCBudWxsT3JCeXRlcylcblxuICAgIC8vIDIuIExldCBwcm9jZXNzQm9keUVycm9yIGJlIHRoaXMgc3RlcDogcnVuIGZldGNoUGFyYW1z4oCZcyBwcm9jZXNzXG4gICAgLy8gcmVzcG9uc2UgY29uc3VtZSBib2R5IGdpdmVuIHJlc3BvbnNlIGFuZCBmYWlsdXJlLlxuICAgIGNvbnN0IHByb2Nlc3NCb2R5RXJyb3IgPSAoZmFpbHVyZSkgPT4gZmV0Y2hQYXJhbXMucHJvY2Vzc1Jlc3BvbnNlQ29uc3VtZUJvZHkocmVzcG9uc2UsIGZhaWx1cmUpXG5cbiAgICAvLyAzLiBJZiByZXNwb25zZeKAmXMgYm9keSBpcyBudWxsLCB0aGVuIHF1ZXVlIGEgZmV0Y2ggdGFzayB0byBydW4gcHJvY2Vzc0JvZHlcbiAgICAvLyBnaXZlbiBudWxsLCB3aXRoIGZldGNoUGFyYW1z4oCZcyB0YXNrIGRlc3RpbmF0aW9uLlxuICAgIGlmIChyZXNwb25zZS5ib2R5ID09IG51bGwpIHtcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHByb2Nlc3NCb2R5KG51bGwpKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyA0LiBPdGhlcndpc2UsIGZ1bGx5IHJlYWQgcmVzcG9uc2XigJlzIGJvZHkgZ2l2ZW4gcHJvY2Vzc0JvZHksIHByb2Nlc3NCb2R5RXJyb3IsXG4gICAgICAvLyBhbmQgZmV0Y2hQYXJhbXPigJlzIHRhc2sgZGVzdGluYXRpb24uXG4gICAgICByZXR1cm4gZnVsbHlSZWFkQm9keShyZXNwb25zZS5ib2R5LCBwcm9jZXNzQm9keSwgcHJvY2Vzc0JvZHlFcnJvcilcbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtZmV0Y2hcbmFzeW5jIGZ1bmN0aW9uIGh0dHBGZXRjaCAoZmV0Y2hQYXJhbXMpIHtcbiAgLy8gMS4gTGV0IHJlcXVlc3QgYmUgZmV0Y2hQYXJhbXPigJlzIHJlcXVlc3QuXG4gIGNvbnN0IHJlcXVlc3QgPSBmZXRjaFBhcmFtcy5yZXF1ZXN0XG5cbiAgLy8gMi4gTGV0IHJlc3BvbnNlIGJlIG51bGwuXG4gIGxldCByZXNwb25zZSA9IG51bGxcblxuICAvLyAzLiBMZXQgYWN0dWFsUmVzcG9uc2UgYmUgbnVsbC5cbiAgbGV0IGFjdHVhbFJlc3BvbnNlID0gbnVsbFxuXG4gIC8vIDQuIExldCB0aW1pbmdJbmZvIGJlIGZldGNoUGFyYW1z4oCZcyB0aW1pbmcgaW5mby5cbiAgY29uc3QgdGltaW5nSW5mbyA9IGZldGNoUGFyYW1zLnRpbWluZ0luZm9cblxuICAvLyA1LiBJZiByZXF1ZXN04oCZcyBzZXJ2aWNlLXdvcmtlcnMgbW9kZSBpcyBcImFsbFwiLCB0aGVuOlxuICBpZiAocmVxdWVzdC5zZXJ2aWNlV29ya2VycyA9PT0gJ2FsbCcpIHtcbiAgICAvLyBUT0RPXG4gIH1cblxuICAvLyA2LiBJZiByZXNwb25zZSBpcyBudWxsLCB0aGVuOlxuICBpZiAocmVzcG9uc2UgPT09IG51bGwpIHtcbiAgICAvLyAxLiBJZiBtYWtlQ09SU1ByZWZsaWdodCBpcyB0cnVlIGFuZCBvbmUgb2YgdGhlc2UgY29uZGl0aW9ucyBpcyB0cnVlOlxuICAgIC8vIFRPRE9cblxuICAgIC8vIDIuIElmIHJlcXVlc3TigJlzIHJlZGlyZWN0IG1vZGUgaXMgXCJmb2xsb3dcIiwgdGhlbiBzZXQgcmVxdWVzdOKAmXNcbiAgICAvLyBzZXJ2aWNlLXdvcmtlcnMgbW9kZSB0byBcIm5vbmVcIi5cbiAgICBpZiAocmVxdWVzdC5yZWRpcmVjdCA9PT0gJ2ZvbGxvdycpIHtcbiAgICAgIHJlcXVlc3Quc2VydmljZVdvcmtlcnMgPSAnbm9uZSdcbiAgICB9XG5cbiAgICAvLyAzLiBTZXQgcmVzcG9uc2UgYW5kIGFjdHVhbFJlc3BvbnNlIHRvIHRoZSByZXN1bHQgb2YgcnVubmluZ1xuICAgIC8vIEhUVFAtbmV0d29yay1vci1jYWNoZSBmZXRjaCBnaXZlbiBmZXRjaFBhcmFtcy5cbiAgICBhY3R1YWxSZXNwb25zZSA9IHJlc3BvbnNlID0gYXdhaXQgaHR0cE5ldHdvcmtPckNhY2hlRmV0Y2goZmV0Y2hQYXJhbXMpXG5cbiAgICAvLyA0LiBJZiByZXF1ZXN04oCZcyByZXNwb25zZSB0YWludGluZyBpcyBcImNvcnNcIiBhbmQgYSBDT1JTIGNoZWNrXG4gICAgLy8gZm9yIHJlcXVlc3QgYW5kIHJlc3BvbnNlIHJldHVybnMgZmFpbHVyZSwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICAgIGlmIChcbiAgICAgIHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ2NvcnMnICYmXG4gICAgICBjb3JzQ2hlY2socmVxdWVzdCwgcmVzcG9uc2UpID09PSAnZmFpbHVyZSdcbiAgICApIHtcbiAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdjb3JzIGZhaWx1cmUnKVxuICAgIH1cblxuICAgIC8vIDUuIElmIHRoZSBUQU8gY2hlY2sgZm9yIHJlcXVlc3QgYW5kIHJlc3BvbnNlIHJldHVybnMgZmFpbHVyZSwgdGhlbiBzZXRcbiAgICAvLyByZXF1ZXN04oCZcyB0aW1pbmcgYWxsb3cgZmFpbGVkIGZsYWcuXG4gICAgaWYgKFRBT0NoZWNrKHJlcXVlc3QsIHJlc3BvbnNlKSA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgICByZXF1ZXN0LnRpbWluZ0FsbG93RmFpbGVkID0gdHJ1ZVxuICAgIH1cbiAgfVxuXG4gIC8vIDcuIElmIGVpdGhlciByZXF1ZXN04oCZcyByZXNwb25zZSB0YWludGluZyBvciByZXNwb25zZeKAmXMgdHlwZVxuICAvLyBpcyBcIm9wYXF1ZVwiLCBhbmQgdGhlIGNyb3NzLW9yaWdpbiByZXNvdXJjZSBwb2xpY3kgY2hlY2sgd2l0aFxuICAvLyByZXF1ZXN04oCZcyBvcmlnaW4sIHJlcXVlc3TigJlzIGNsaWVudCwgcmVxdWVzdOKAmXMgZGVzdGluYXRpb24sXG4gIC8vIGFuZCBhY3R1YWxSZXNwb25zZSByZXR1cm5zIGJsb2NrZWQsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgaWYgKFxuICAgIChyZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdvcGFxdWUnIHx8IHJlc3BvbnNlLnR5cGUgPT09ICdvcGFxdWUnKSAmJlxuICAgIGNyb3NzT3JpZ2luUmVzb3VyY2VQb2xpY3lDaGVjayhcbiAgICAgIHJlcXVlc3Qub3JpZ2luLFxuICAgICAgcmVxdWVzdC5jbGllbnQsXG4gICAgICByZXF1ZXN0LmRlc3RpbmF0aW9uLFxuICAgICAgYWN0dWFsUmVzcG9uc2VcbiAgICApID09PSAnYmxvY2tlZCdcbiAgKSB7XG4gICAgcmV0dXJuIG1ha2VOZXR3b3JrRXJyb3IoJ2Jsb2NrZWQnKVxuICB9XG5cbiAgLy8gOC4gSWYgYWN0dWFsUmVzcG9uc2XigJlzIHN0YXR1cyBpcyBhIHJlZGlyZWN0IHN0YXR1cywgdGhlbjpcbiAgaWYgKHJlZGlyZWN0U3RhdHVzU2V0LmhhcyhhY3R1YWxSZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgLy8gMS4gSWYgYWN0dWFsUmVzcG9uc2XigJlzIHN0YXR1cyBpcyBub3QgMzAzLCByZXF1ZXN04oCZcyBib2R5IGlzIG5vdCBudWxsLFxuICAgIC8vIGFuZCB0aGUgY29ubmVjdGlvbiB1c2VzIEhUVFAvMiwgdGhlbiB1c2VyIGFnZW50cyBtYXksIGFuZCBhcmUgZXZlblxuICAgIC8vIGVuY291cmFnZWQgdG8sIHRyYW5zbWl0IGFuIFJTVF9TVFJFQU0gZnJhbWUuXG4gICAgLy8gU2VlLCBodHRwczovL2dpdGh1Yi5jb20vd2hhdHdnL2ZldGNoL2lzc3Vlcy8xMjg4XG4gICAgaWYgKHJlcXVlc3QucmVkaXJlY3QgIT09ICdtYW51YWwnKSB7XG4gICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbm5lY3Rpb24uZGVzdHJveSgpXG4gICAgfVxuXG4gICAgLy8gMi4gU3dpdGNoIG9uIHJlcXVlc3TigJlzIHJlZGlyZWN0IG1vZGU6XG4gICAgaWYgKHJlcXVlc3QucmVkaXJlY3QgPT09ICdlcnJvcicpIHtcbiAgICAgIC8vIFNldCByZXNwb25zZSB0byBhIG5ldHdvcmsgZXJyb3IuXG4gICAgICByZXNwb25zZSA9IG1ha2VOZXR3b3JrRXJyb3IoJ3VuZXhwZWN0ZWQgcmVkaXJlY3QnKVxuICAgIH0gZWxzZSBpZiAocmVxdWVzdC5yZWRpcmVjdCA9PT0gJ21hbnVhbCcpIHtcbiAgICAgIC8vIFNldCByZXNwb25zZSB0byBhbiBvcGFxdWUtcmVkaXJlY3QgZmlsdGVyZWQgcmVzcG9uc2Ugd2hvc2UgaW50ZXJuYWxcbiAgICAgIC8vIHJlc3BvbnNlIGlzIGFjdHVhbFJlc3BvbnNlLlxuICAgICAgLy8gTk9URShzcGVjKTogT24gdGhlIHdlYiB0aGlzIHdvdWxkIHJldHVybiBhbiBgb3BhcXVlcmVkaXJlY3RgIHJlc3BvbnNlLFxuICAgICAgLy8gYnV0IHRoYXQgZG9lc24ndCBtYWtlIHNlbnNlIHNlcnZlciBzaWRlLlxuICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8xMTkzLlxuICAgICAgcmVzcG9uc2UgPSBhY3R1YWxSZXNwb25zZVxuICAgIH0gZWxzZSBpZiAocmVxdWVzdC5yZWRpcmVjdCA9PT0gJ2ZvbGxvdycpIHtcbiAgICAgIC8vIFNldCByZXNwb25zZSB0byB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgSFRUUC1yZWRpcmVjdCBmZXRjaCBnaXZlblxuICAgICAgLy8gZmV0Y2hQYXJhbXMgYW5kIHJlc3BvbnNlLlxuICAgICAgcmVzcG9uc2UgPSBhd2FpdCBodHRwUmVkaXJlY3RGZXRjaChmZXRjaFBhcmFtcywgcmVzcG9uc2UpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydChmYWxzZSlcbiAgICB9XG4gIH1cblxuICAvLyA5LiBTZXQgcmVzcG9uc2XigJlzIHRpbWluZyBpbmZvIHRvIHRpbWluZ0luZm8uXG4gIHJlc3BvbnNlLnRpbWluZ0luZm8gPSB0aW1pbmdJbmZvXG5cbiAgLy8gMTAuIFJldHVybiByZXNwb25zZS5cbiAgcmV0dXJuIHJlc3BvbnNlXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNodHRwLXJlZGlyZWN0LWZldGNoXG5mdW5jdGlvbiBodHRwUmVkaXJlY3RGZXRjaCAoZmV0Y2hQYXJhbXMsIHJlc3BvbnNlKSB7XG4gIC8vIDEuIExldCByZXF1ZXN0IGJlIGZldGNoUGFyYW1z4oCZcyByZXF1ZXN0LlxuICBjb25zdCByZXF1ZXN0ID0gZmV0Y2hQYXJhbXMucmVxdWVzdFxuXG4gIC8vIDIuIExldCBhY3R1YWxSZXNwb25zZSBiZSByZXNwb25zZSwgaWYgcmVzcG9uc2UgaXMgbm90IGEgZmlsdGVyZWQgcmVzcG9uc2UsXG4gIC8vIGFuZCByZXNwb25zZeKAmXMgaW50ZXJuYWwgcmVzcG9uc2Ugb3RoZXJ3aXNlLlxuICBjb25zdCBhY3R1YWxSZXNwb25zZSA9IHJlc3BvbnNlLmludGVybmFsUmVzcG9uc2VcbiAgICA/IHJlc3BvbnNlLmludGVybmFsUmVzcG9uc2VcbiAgICA6IHJlc3BvbnNlXG5cbiAgLy8gMy4gTGV0IGxvY2F0aW9uVVJMIGJlIGFjdHVhbFJlc3BvbnNl4oCZcyBsb2NhdGlvbiBVUkwgZ2l2ZW4gcmVxdWVzdOKAmXMgY3VycmVudFxuICAvLyBVUkzigJlzIGZyYWdtZW50LlxuICBsZXQgbG9jYXRpb25VUkxcblxuICB0cnkge1xuICAgIGxvY2F0aW9uVVJMID0gcmVzcG9uc2VMb2NhdGlvblVSTChcbiAgICAgIGFjdHVhbFJlc3BvbnNlLFxuICAgICAgcmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdCkuaGFzaFxuICAgIClcblxuICAgIC8vIDQuIElmIGxvY2F0aW9uVVJMIGlzIG51bGwsIHRoZW4gcmV0dXJuIHJlc3BvbnNlLlxuICAgIGlmIChsb2NhdGlvblVSTCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIDUuIElmIGxvY2F0aW9uVVJMIGlzIGZhaWx1cmUsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoZXJyKSlcbiAgfVxuXG4gIC8vIDYuIElmIGxvY2F0aW9uVVJM4oCZcyBzY2hlbWUgaXMgbm90IGFuIEhUVFAoUykgc2NoZW1lLCB0aGVuIHJldHVybiBhIG5ldHdvcmtcbiAgLy8gZXJyb3IuXG4gIGlmICghdXJsSXNIdHRwSHR0cHNTY2hlbWUobG9jYXRpb25VUkwpKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKCdVUkwgc2NoZW1lIG11c3QgYmUgYSBIVFRQKFMpIHNjaGVtZScpKVxuICB9XG5cbiAgLy8gNy4gSWYgcmVxdWVzdOKAmXMgcmVkaXJlY3QgY291bnQgaXMgMjAsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgaWYgKHJlcXVlc3QucmVkaXJlY3RDb3VudCA9PT0gMjApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoJ3JlZGlyZWN0IGNvdW50IGV4Y2VlZGVkJykpXG4gIH1cblxuICAvLyA4LiBJbmNyZWFzZSByZXF1ZXN04oCZcyByZWRpcmVjdCBjb3VudCBieSAxLlxuICByZXF1ZXN0LnJlZGlyZWN0Q291bnQgKz0gMVxuXG4gIC8vIDkuIElmIHJlcXVlc3TigJlzIG1vZGUgaXMgXCJjb3JzXCIsIGxvY2F0aW9uVVJMIGluY2x1ZGVzIGNyZWRlbnRpYWxzLCBhbmRcbiAgLy8gcmVxdWVzdOKAmXMgb3JpZ2luIGlzIG5vdCBzYW1lIG9yaWdpbiB3aXRoIGxvY2F0aW9uVVJM4oCZcyBvcmlnaW4sIHRoZW4gcmV0dXJuXG4gIC8vICBhIG5ldHdvcmsgZXJyb3IuXG4gIGlmIChcbiAgICByZXF1ZXN0Lm1vZGUgPT09ICdjb3JzJyAmJlxuICAgIChsb2NhdGlvblVSTC51c2VybmFtZSB8fCBsb2NhdGlvblVSTC5wYXNzd29yZCkgJiZcbiAgICAhc2FtZU9yaWdpbihyZXF1ZXN0LCBsb2NhdGlvblVSTClcbiAgKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKCdjcm9zcyBvcmlnaW4gbm90IGFsbG93ZWQgZm9yIHJlcXVlc3QgbW9kZSBcImNvcnNcIicpKVxuICB9XG5cbiAgLy8gMTAuIElmIHJlcXVlc3TigJlzIHJlc3BvbnNlIHRhaW50aW5nIGlzIFwiY29yc1wiIGFuZCBsb2NhdGlvblVSTCBpbmNsdWRlc1xuICAvLyBjcmVkZW50aWFscywgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICBpZiAoXG4gICAgcmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnY29ycycgJiZcbiAgICAobG9jYXRpb25VUkwudXNlcm5hbWUgfHwgbG9jYXRpb25VUkwucGFzc3dvcmQpXG4gICkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcihcbiAgICAgICdVUkwgY2Fubm90IGNvbnRhaW4gY3JlZGVudGlhbHMgZm9yIHJlcXVlc3QgbW9kZSBcImNvcnNcIidcbiAgICApKVxuICB9XG5cbiAgLy8gMTEuIElmIGFjdHVhbFJlc3BvbnNl4oCZcyBzdGF0dXMgaXMgbm90IDMwMywgcmVxdWVzdOKAmXMgYm9keSBpcyBub24tbnVsbCxcbiAgLy8gYW5kIHJlcXVlc3TigJlzIGJvZHnigJlzIHNvdXJjZSBpcyBudWxsLCB0aGVuIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gIGlmIChcbiAgICBhY3R1YWxSZXNwb25zZS5zdGF0dXMgIT09IDMwMyAmJlxuICAgIHJlcXVlc3QuYm9keSAhPSBudWxsICYmXG4gICAgcmVxdWVzdC5ib2R5LnNvdXJjZSA9PSBudWxsXG4gICkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcigpKVxuICB9XG5cbiAgLy8gMTIuIElmIG9uZSBvZiB0aGUgZm9sbG93aW5nIGlzIHRydWVcbiAgLy8gLSBhY3R1YWxSZXNwb25zZeKAmXMgc3RhdHVzIGlzIDMwMSBvciAzMDIgYW5kIHJlcXVlc3TigJlzIG1ldGhvZCBpcyBgUE9TVGBcbiAgLy8gLSBhY3R1YWxSZXNwb25zZeKAmXMgc3RhdHVzIGlzIDMwMyBhbmQgcmVxdWVzdOKAmXMgbWV0aG9kIGlzIG5vdCBgR0VUYCBvciBgSEVBRGBcbiAgaWYgKFxuICAgIChbMzAxLCAzMDJdLmluY2x1ZGVzKGFjdHVhbFJlc3BvbnNlLnN0YXR1cykgJiYgcmVxdWVzdC5tZXRob2QgPT09ICdQT1NUJykgfHxcbiAgICAoYWN0dWFsUmVzcG9uc2Uuc3RhdHVzID09PSAzMDMgJiZcbiAgICAgICFHRVRfT1JfSEVBRC5pbmNsdWRlcyhyZXF1ZXN0Lm1ldGhvZCkpXG4gICkge1xuICAgIC8vIHRoZW46XG4gICAgLy8gMS4gU2V0IHJlcXVlc3TigJlzIG1ldGhvZCB0byBgR0VUYCBhbmQgcmVxdWVzdOKAmXMgYm9keSB0byBudWxsLlxuICAgIHJlcXVlc3QubWV0aG9kID0gJ0dFVCdcbiAgICByZXF1ZXN0LmJvZHkgPSBudWxsXG5cbiAgICAvLyAyLiBGb3IgZWFjaCBoZWFkZXJOYW1lIG9mIHJlcXVlc3QtYm9keS1oZWFkZXIgbmFtZSwgZGVsZXRlIGhlYWRlck5hbWUgZnJvbVxuICAgIC8vIHJlcXVlc3TigJlzIGhlYWRlciBsaXN0LlxuICAgIGZvciAoY29uc3QgaGVhZGVyTmFtZSBvZiByZXF1ZXN0Qm9keUhlYWRlcikge1xuICAgICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5kZWxldGUoaGVhZGVyTmFtZSlcbiAgICB9XG4gIH1cblxuICAvLyAxMy4gSWYgcmVxdWVzdOKAmXMgY3VycmVudCBVUkzigJlzIG9yaWdpbiBpcyBub3Qgc2FtZSBvcmlnaW4gd2l0aCBsb2NhdGlvblVSTOKAmXNcbiAgLy8gICAgIG9yaWdpbiwgdGhlbiBmb3IgZWFjaCBoZWFkZXJOYW1lIG9mIENPUlMgbm9uLXdpbGRjYXJkIHJlcXVlc3QtaGVhZGVyIG5hbWUsXG4gIC8vICAgICBkZWxldGUgaGVhZGVyTmFtZSBmcm9tIHJlcXVlc3TigJlzIGhlYWRlciBsaXN0LlxuICBpZiAoIXNhbWVPcmlnaW4ocmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdCksIGxvY2F0aW9uVVJMKSkge1xuICAgIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb3JzLW5vbi13aWxkY2FyZC1yZXF1ZXN0LWhlYWRlci1uYW1lXG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5kZWxldGUoJ2F1dGhvcml6YXRpb24nKVxuXG4gICAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2F1dGhlbnRpY2F0aW9uLWVudHJpZXNcbiAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmRlbGV0ZSgncHJveHktYXV0aG9yaXphdGlvbicsIHRydWUpXG5cbiAgICAvLyBcIkNvb2tpZVwiIGFuZCBcIkhvc3RcIiBhcmUgZm9yYmlkZGVuIHJlcXVlc3QtaGVhZGVycywgd2hpY2ggdW5kaWNpIGRvZXNuJ3QgaW1wbGVtZW50LlxuICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QuZGVsZXRlKCdjb29raWUnKVxuICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QuZGVsZXRlKCdob3N0JylcbiAgfVxuXG4gIC8vIDE0LiBJZiByZXF1ZXN04oCZcyBib2R5IGlzIG5vbi1udWxsLCB0aGVuIHNldCByZXF1ZXN04oCZcyBib2R5IHRvIHRoZSBmaXJzdCByZXR1cm5cbiAgLy8gdmFsdWUgb2Ygc2FmZWx5IGV4dHJhY3RpbmcgcmVxdWVzdOKAmXMgYm9keeKAmXMgc291cmNlLlxuICBpZiAocmVxdWVzdC5ib2R5ICE9IG51bGwpIHtcbiAgICBhc3NlcnQocmVxdWVzdC5ib2R5LnNvdXJjZSAhPSBudWxsKVxuICAgIHJlcXVlc3QuYm9keSA9IHNhZmVseUV4dHJhY3RCb2R5KHJlcXVlc3QuYm9keS5zb3VyY2UpWzBdXG4gIH1cblxuICAvLyAxNS4gTGV0IHRpbWluZ0luZm8gYmUgZmV0Y2hQYXJhbXPigJlzIHRpbWluZyBpbmZvLlxuICBjb25zdCB0aW1pbmdJbmZvID0gZmV0Y2hQYXJhbXMudGltaW5nSW5mb1xuXG4gIC8vIDE2LiBTZXQgdGltaW5nSW5mb+KAmXMgcmVkaXJlY3QgZW5kIHRpbWUgYW5kIHBvc3QtcmVkaXJlY3Qgc3RhcnQgdGltZSB0byB0aGVcbiAgLy8gY29hcnNlbmVkIHNoYXJlZCBjdXJyZW50IHRpbWUgZ2l2ZW4gZmV0Y2hQYXJhbXPigJlzIGNyb3NzLW9yaWdpbiBpc29sYXRlZFxuICAvLyBjYXBhYmlsaXR5LlxuICB0aW1pbmdJbmZvLnJlZGlyZWN0RW5kVGltZSA9IHRpbWluZ0luZm8ucG9zdFJlZGlyZWN0U3RhcnRUaW1lID1cbiAgICBjb2Fyc2VuZWRTaGFyZWRDdXJyZW50VGltZShmZXRjaFBhcmFtcy5jcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSlcblxuICAvLyAxNy4gSWYgdGltaW5nSW5mb+KAmXMgcmVkaXJlY3Qgc3RhcnQgdGltZSBpcyAwLCB0aGVuIHNldCB0aW1pbmdJbmZv4oCZc1xuICAvLyAgcmVkaXJlY3Qgc3RhcnQgdGltZSB0byB0aW1pbmdJbmZv4oCZcyBzdGFydCB0aW1lLlxuICBpZiAodGltaW5nSW5mby5yZWRpcmVjdFN0YXJ0VGltZSA9PT0gMCkge1xuICAgIHRpbWluZ0luZm8ucmVkaXJlY3RTdGFydFRpbWUgPSB0aW1pbmdJbmZvLnN0YXJ0VGltZVxuICB9XG5cbiAgLy8gMTguIEFwcGVuZCBsb2NhdGlvblVSTCB0byByZXF1ZXN04oCZcyBVUkwgbGlzdC5cbiAgcmVxdWVzdC51cmxMaXN0LnB1c2gobG9jYXRpb25VUkwpXG5cbiAgLy8gMTkuIEludm9rZSBzZXQgcmVxdWVzdOKAmXMgcmVmZXJyZXIgcG9saWN5IG9uIHJlZGlyZWN0IG9uIHJlcXVlc3QgYW5kXG4gIC8vIGFjdHVhbFJlc3BvbnNlLlxuICBzZXRSZXF1ZXN0UmVmZXJyZXJQb2xpY3lPblJlZGlyZWN0KHJlcXVlc3QsIGFjdHVhbFJlc3BvbnNlKVxuXG4gIC8vIDIwLiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBydW5uaW5nIG1haW4gZmV0Y2ggZ2l2ZW4gZmV0Y2hQYXJhbXMgYW5kIHRydWUuXG4gIHJldHVybiBtYWluRmV0Y2goZmV0Y2hQYXJhbXMsIHRydWUpXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNodHRwLW5ldHdvcmstb3ItY2FjaGUtZmV0Y2hcbmFzeW5jIGZ1bmN0aW9uIGh0dHBOZXR3b3JrT3JDYWNoZUZldGNoIChcbiAgZmV0Y2hQYXJhbXMsXG4gIGlzQXV0aGVudGljYXRpb25GZXRjaCA9IGZhbHNlLFxuICBpc05ld0Nvbm5lY3Rpb25GZXRjaCA9IGZhbHNlXG4pIHtcbiAgLy8gMS4gTGV0IHJlcXVlc3QgYmUgZmV0Y2hQYXJhbXPigJlzIHJlcXVlc3QuXG4gIGNvbnN0IHJlcXVlc3QgPSBmZXRjaFBhcmFtcy5yZXF1ZXN0XG5cbiAgLy8gMi4gTGV0IGh0dHBGZXRjaFBhcmFtcyBiZSBudWxsLlxuICBsZXQgaHR0cEZldGNoUGFyYW1zID0gbnVsbFxuXG4gIC8vIDMuIExldCBodHRwUmVxdWVzdCBiZSBudWxsLlxuICBsZXQgaHR0cFJlcXVlc3QgPSBudWxsXG5cbiAgLy8gNC4gTGV0IHJlc3BvbnNlIGJlIG51bGwuXG4gIGxldCByZXNwb25zZSA9IG51bGxcblxuICAvLyA1LiBMZXQgc3RvcmVkUmVzcG9uc2UgYmUgbnVsbC5cbiAgLy8gVE9ETzogY2FjaGVcblxuICAvLyA2LiBMZXQgaHR0cENhY2hlIGJlIG51bGwuXG4gIGNvbnN0IGh0dHBDYWNoZSA9IG51bGxcblxuICAvLyA3LiBMZXQgdGhlIHJldmFsaWRhdGluZ0ZsYWcgYmUgdW5zZXQuXG4gIGNvbnN0IHJldmFsaWRhdGluZ0ZsYWcgPSBmYWxzZVxuXG4gIC8vIDguIFJ1biB0aGVzZSBzdGVwcywgYnV0IGFib3J0IHdoZW4gdGhlIG9uZ29pbmcgZmV0Y2ggaXMgdGVybWluYXRlZDpcblxuICAvLyAgICAxLiBJZiByZXF1ZXN04oCZcyB3aW5kb3cgaXMgXCJuby13aW5kb3dcIiBhbmQgcmVxdWVzdOKAmXMgcmVkaXJlY3QgbW9kZSBpc1xuICAvLyAgICBcImVycm9yXCIsIHRoZW4gc2V0IGh0dHBGZXRjaFBhcmFtcyB0byBmZXRjaFBhcmFtcyBhbmQgaHR0cFJlcXVlc3QgdG9cbiAgLy8gICAgcmVxdWVzdC5cbiAgaWYgKHJlcXVlc3Qud2luZG93ID09PSAnbm8td2luZG93JyAmJiByZXF1ZXN0LnJlZGlyZWN0ID09PSAnZXJyb3InKSB7XG4gICAgaHR0cEZldGNoUGFyYW1zID0gZmV0Y2hQYXJhbXNcbiAgICBodHRwUmVxdWVzdCA9IHJlcXVlc3RcbiAgfSBlbHNlIHtcbiAgICAvLyBPdGhlcndpc2U6XG5cbiAgICAvLyAxLiBTZXQgaHR0cFJlcXVlc3QgdG8gYSBjbG9uZSBvZiByZXF1ZXN0LlxuICAgIGh0dHBSZXF1ZXN0ID0gbWFrZVJlcXVlc3QocmVxdWVzdClcblxuICAgIC8vIDIuIFNldCBodHRwRmV0Y2hQYXJhbXMgdG8gYSBjb3B5IG9mIGZldGNoUGFyYW1zLlxuICAgIGh0dHBGZXRjaFBhcmFtcyA9IHsgLi4uZmV0Y2hQYXJhbXMgfVxuXG4gICAgLy8gMy4gU2V0IGh0dHBGZXRjaFBhcmFtc+KAmXMgcmVxdWVzdCB0byBodHRwUmVxdWVzdC5cbiAgICBodHRwRmV0Y2hQYXJhbXMucmVxdWVzdCA9IGh0dHBSZXF1ZXN0XG4gIH1cblxuICAvLyAgICAzLiBMZXQgaW5jbHVkZUNyZWRlbnRpYWxzIGJlIHRydWUgaWYgb25lIG9mXG4gIGNvbnN0IGluY2x1ZGVDcmVkZW50aWFscyA9XG4gICAgcmVxdWVzdC5jcmVkZW50aWFscyA9PT0gJ2luY2x1ZGUnIHx8XG4gICAgKHJlcXVlc3QuY3JlZGVudGlhbHMgPT09ICdzYW1lLW9yaWdpbicgJiZcbiAgICAgIHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ2Jhc2ljJylcblxuICAvLyAgICA0LiBMZXQgY29udGVudExlbmd0aCBiZSBodHRwUmVxdWVzdOKAmXMgYm9keeKAmXMgbGVuZ3RoLCBpZiBodHRwUmVxdWVzdOKAmXNcbiAgLy8gICAgYm9keSBpcyBub24tbnVsbDsgb3RoZXJ3aXNlIG51bGwuXG4gIGNvbnN0IGNvbnRlbnRMZW5ndGggPSBodHRwUmVxdWVzdC5ib2R5ID8gaHR0cFJlcXVlc3QuYm9keS5sZW5ndGggOiBudWxsXG5cbiAgLy8gICAgNS4gTGV0IGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSBiZSBudWxsLlxuICBsZXQgY29udGVudExlbmd0aEhlYWRlclZhbHVlID0gbnVsbFxuXG4gIC8vICAgIDYuIElmIGh0dHBSZXF1ZXN04oCZcyBib2R5IGlzIG51bGwgYW5kIGh0dHBSZXF1ZXN04oCZcyBtZXRob2QgaXMgYFBPU1RgIG9yXG4gIC8vICAgIGBQVVRgLCB0aGVuIHNldCBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgdG8gYDBgLlxuICBpZiAoXG4gICAgaHR0cFJlcXVlc3QuYm9keSA9PSBudWxsICYmXG4gICAgWydQT1NUJywgJ1BVVCddLmluY2x1ZGVzKGh0dHBSZXF1ZXN0Lm1ldGhvZClcbiAgKSB7XG4gICAgY29udGVudExlbmd0aEhlYWRlclZhbHVlID0gJzAnXG4gIH1cblxuICAvLyAgICA3LiBJZiBjb250ZW50TGVuZ3RoIGlzIG5vbi1udWxsLCB0aGVuIHNldCBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgdG9cbiAgLy8gICAgY29udGVudExlbmd0aCwgc2VyaWFsaXplZCBhbmQgaXNvbW9ycGhpYyBlbmNvZGVkLlxuICBpZiAoY29udGVudExlbmd0aCAhPSBudWxsKSB7XG4gICAgY29udGVudExlbmd0aEhlYWRlclZhbHVlID0gaXNvbW9ycGhpY0VuY29kZShgJHtjb250ZW50TGVuZ3RofWApXG4gIH1cblxuICAvLyAgICA4LiBJZiBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgaXMgbm9uLW51bGwsIHRoZW4gYXBwZW5kXG4gIC8vICAgIGBDb250ZW50LUxlbmd0aGAvY29udGVudExlbmd0aEhlYWRlclZhbHVlIHRvIGh0dHBSZXF1ZXN04oCZcyBoZWFkZXJcbiAgLy8gICAgbGlzdC5cbiAgaWYgKGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSAhPSBudWxsKSB7XG4gICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdjb250ZW50LWxlbmd0aCcsIGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSlcbiAgfVxuXG4gIC8vICAgIDkuIElmIGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSBpcyBub24tbnVsbCwgdGhlbiBhcHBlbmQgKGBDb250ZW50LUxlbmd0aGAsXG4gIC8vICAgIGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSkgdG8gaHR0cFJlcXVlc3TigJlzIGhlYWRlciBsaXN0LlxuXG4gIC8vICAgIDEwLiBJZiBjb250ZW50TGVuZ3RoIGlzIG5vbi1udWxsIGFuZCBodHRwUmVxdWVzdOKAmXMga2VlcGFsaXZlIGlzIHRydWUsXG4gIC8vICAgIHRoZW46XG4gIGlmIChjb250ZW50TGVuZ3RoICE9IG51bGwgJiYgaHR0cFJlcXVlc3Qua2VlcGFsaXZlKSB7XG4gICAgLy8gTk9URToga2VlcGFsaXZlIGlzIGEgbm9vcCBvdXRzaWRlIG9mIGJyb3dzZXIgY29udGV4dC5cbiAgfVxuXG4gIC8vICAgIDExLiBJZiBodHRwUmVxdWVzdOKAmXMgcmVmZXJyZXIgaXMgYSBVUkwsIHRoZW4gYXBwZW5kXG4gIC8vICAgIGBSZWZlcmVyYC9odHRwUmVxdWVzdOKAmXMgcmVmZXJyZXIsIHNlcmlhbGl6ZWQgYW5kIGlzb21vcnBoaWMgZW5jb2RlZCxcbiAgLy8gICAgIHRvIGh0dHBSZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cbiAgaWYgKGh0dHBSZXF1ZXN0LnJlZmVycmVyIGluc3RhbmNlb2YgVVJMKSB7XG4gICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdyZWZlcmVyJywgaXNvbW9ycGhpY0VuY29kZShodHRwUmVxdWVzdC5yZWZlcnJlci5ocmVmKSlcbiAgfVxuXG4gIC8vICAgIDEyLiBBcHBlbmQgYSByZXF1ZXN0IGBPcmlnaW5gIGhlYWRlciBmb3IgaHR0cFJlcXVlc3QuXG4gIGFwcGVuZFJlcXVlc3RPcmlnaW5IZWFkZXIoaHR0cFJlcXVlc3QpXG5cbiAgLy8gICAgMTMuIEFwcGVuZCB0aGUgRmV0Y2ggbWV0YWRhdGEgaGVhZGVycyBmb3IgaHR0cFJlcXVlc3QuIFtGRVRDSC1NRVRBREFUQV1cbiAgYXBwZW5kRmV0Y2hNZXRhZGF0YShodHRwUmVxdWVzdClcblxuICAvLyAgICAxNC4gSWYgaHR0cFJlcXVlc3TigJlzIGhlYWRlciBsaXN0IGRvZXMgbm90IGNvbnRhaW4gYFVzZXItQWdlbnRgLCB0aGVuXG4gIC8vICAgIHVzZXIgYWdlbnRzIHNob3VsZCBhcHBlbmQgYFVzZXItQWdlbnRgL2RlZmF1bHQgYFVzZXItQWdlbnRgIHZhbHVlIHRvXG4gIC8vICAgIGh0dHBSZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cbiAgaWYgKCFodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygndXNlci1hZ2VudCcpKSB7XG4gICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCd1c2VyLWFnZW50JywgdHlwZW9mIGVzYnVpbGREZXRlY3Rpb24gPT09ICd1bmRlZmluZWQnID8gJ3VuZGljaScgOiAnbm9kZScpXG4gIH1cblxuICAvLyAgICAxNS4gSWYgaHR0cFJlcXVlc3TigJlzIGNhY2hlIG1vZGUgaXMgXCJkZWZhdWx0XCIgYW5kIGh0dHBSZXF1ZXN04oCZcyBoZWFkZXJcbiAgLy8gICAgbGlzdCBjb250YWlucyBgSWYtTW9kaWZpZWQtU2luY2VgLCBgSWYtTm9uZS1NYXRjaGAsXG4gIC8vICAgIGBJZi1Vbm1vZGlmaWVkLVNpbmNlYCwgYElmLU1hdGNoYCwgb3IgYElmLVJhbmdlYCwgdGhlbiBzZXRcbiAgLy8gICAgaHR0cFJlcXVlc3TigJlzIGNhY2hlIG1vZGUgdG8gXCJuby1zdG9yZVwiLlxuICBpZiAoXG4gICAgaHR0cFJlcXVlc3QuY2FjaGUgPT09ICdkZWZhdWx0JyAmJlxuICAgIChodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygnaWYtbW9kaWZpZWQtc2luY2UnKSB8fFxuICAgICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2lmLW5vbmUtbWF0Y2gnKSB8fFxuICAgICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2lmLXVubW9kaWZpZWQtc2luY2UnKSB8fFxuICAgICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2lmLW1hdGNoJykgfHxcbiAgICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdpZi1yYW5nZScpKVxuICApIHtcbiAgICBodHRwUmVxdWVzdC5jYWNoZSA9ICduby1zdG9yZSdcbiAgfVxuXG4gIC8vICAgIDE2LiBJZiBodHRwUmVxdWVzdOKAmXMgY2FjaGUgbW9kZSBpcyBcIm5vLWNhY2hlXCIsIGh0dHBSZXF1ZXN04oCZcyBwcmV2ZW50XG4gIC8vICAgIG5vLWNhY2hlIGNhY2hlLWNvbnRyb2wgaGVhZGVyIG1vZGlmaWNhdGlvbiBmbGFnIGlzIHVuc2V0LCBhbmRcbiAgLy8gICAgaHR0cFJlcXVlc3TigJlzIGhlYWRlciBsaXN0IGRvZXMgbm90IGNvbnRhaW4gYENhY2hlLUNvbnRyb2xgLCB0aGVuIGFwcGVuZFxuICAvLyAgICBgQ2FjaGUtQ29udHJvbGAvYG1heC1hZ2U9MGAgdG8gaHR0cFJlcXVlc3TigJlzIGhlYWRlciBsaXN0LlxuICBpZiAoXG4gICAgaHR0cFJlcXVlc3QuY2FjaGUgPT09ICduby1jYWNoZScgJiZcbiAgICAhaHR0cFJlcXVlc3QucHJldmVudE5vQ2FjaGVDYWNoZUNvbnRyb2xIZWFkZXJNb2RpZmljYXRpb24gJiZcbiAgICAhaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2NhY2hlLWNvbnRyb2wnKVxuICApIHtcbiAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ2NhY2hlLWNvbnRyb2wnLCAnbWF4LWFnZT0wJylcbiAgfVxuXG4gIC8vICAgIDE3LiBJZiBodHRwUmVxdWVzdOKAmXMgY2FjaGUgbW9kZSBpcyBcIm5vLXN0b3JlXCIgb3IgXCJyZWxvYWRcIiwgdGhlbjpcbiAgaWYgKGh0dHBSZXF1ZXN0LmNhY2hlID09PSAnbm8tc3RvcmUnIHx8IGh0dHBSZXF1ZXN0LmNhY2hlID09PSAncmVsb2FkJykge1xuICAgIC8vIDEuIElmIGh0dHBSZXF1ZXN04oCZcyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluIGBQcmFnbWFgLCB0aGVuIGFwcGVuZFxuICAgIC8vIGBQcmFnbWFgL2Buby1jYWNoZWAgdG8gaHR0cFJlcXVlc3TigJlzIGhlYWRlciBsaXN0LlxuICAgIGlmICghaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ3ByYWdtYScpKSB7XG4gICAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ3ByYWdtYScsICduby1jYWNoZScpXG4gICAgfVxuXG4gICAgLy8gMi4gSWYgaHR0cFJlcXVlc3TigJlzIGhlYWRlciBsaXN0IGRvZXMgbm90IGNvbnRhaW4gYENhY2hlLUNvbnRyb2xgLFxuICAgIC8vIHRoZW4gYXBwZW5kIGBDYWNoZS1Db250cm9sYC9gbm8tY2FjaGVgIHRvIGh0dHBSZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cbiAgICBpZiAoIWh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdjYWNoZS1jb250cm9sJykpIHtcbiAgICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnY2FjaGUtY29udHJvbCcsICduby1jYWNoZScpXG4gICAgfVxuICB9XG5cbiAgLy8gICAgMTguIElmIGh0dHBSZXF1ZXN04oCZcyBoZWFkZXIgbGlzdCBjb250YWlucyBgUmFuZ2VgLCB0aGVuIGFwcGVuZFxuICAvLyAgICBgQWNjZXB0LUVuY29kaW5nYC9gaWRlbnRpdHlgIHRvIGh0dHBSZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cbiAgaWYgKGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdyYW5nZScpKSB7XG4gICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdhY2NlcHQtZW5jb2RpbmcnLCAnaWRlbnRpdHknKVxuICB9XG5cbiAgLy8gICAgMTkuIE1vZGlmeSBodHRwUmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QgcGVyIEhUVFAuIERvIG5vdCBhcHBlbmQgYSBnaXZlblxuICAvLyAgICBoZWFkZXIgaWYgaHR0cFJlcXVlc3TigJlzIGhlYWRlciBsaXN0IGNvbnRhaW5zIHRoYXQgaGVhZGVy4oCZcyBuYW1lLlxuICAvLyAgICBUT0RPOiBodHRwczovL2dpdGh1Yi5jb20vd2hhdHdnL2ZldGNoL2lzc3Vlcy8xMjg1I2lzc3VlY29tbWVudC04OTY1NjAxMjlcbiAgaWYgKCFodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygnYWNjZXB0LWVuY29kaW5nJykpIHtcbiAgICBpZiAodXJsSGFzSHR0cHNTY2hlbWUocmVxdWVzdEN1cnJlbnRVUkwoaHR0cFJlcXVlc3QpKSkge1xuICAgICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdhY2NlcHQtZW5jb2RpbmcnLCAnYnIsIGd6aXAsIGRlZmxhdGUnKVxuICAgIH0gZWxzZSB7XG4gICAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ2FjY2VwdC1lbmNvZGluZycsICdnemlwLCBkZWZsYXRlJylcbiAgICB9XG4gIH1cblxuICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5kZWxldGUoJ2hvc3QnKVxuXG4gIC8vICAgIDIwLiBJZiBpbmNsdWRlQ3JlZGVudGlhbHMgaXMgdHJ1ZSwgdGhlbjpcbiAgaWYgKGluY2x1ZGVDcmVkZW50aWFscykge1xuICAgIC8vIDEuIElmIHRoZSB1c2VyIGFnZW50IGlzIG5vdCBjb25maWd1cmVkIHRvIGJsb2NrIGNvb2tpZXMgZm9yIGh0dHBSZXF1ZXN0XG4gICAgLy8gKHNlZSBzZWN0aW9uIDcgb2YgW0NPT0tJRVNdKSwgdGhlbjpcbiAgICAvLyBUT0RPOiBjcmVkZW50aWFsc1xuICAgIC8vIDIuIElmIGh0dHBSZXF1ZXN04oCZcyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluIGBBdXRob3JpemF0aW9uYCwgdGhlbjpcbiAgICAvLyBUT0RPOiBjcmVkZW50aWFsc1xuICB9XG5cbiAgLy8gICAgMjEuIElmIHRoZXJl4oCZcyBhIHByb3h5LWF1dGhlbnRpY2F0aW9uIGVudHJ5LCB1c2UgaXQgYXMgYXBwcm9wcmlhdGUuXG4gIC8vICAgIFRPRE86IHByb3h5LWF1dGhlbnRpY2F0aW9uXG5cbiAgLy8gICAgMjIuIFNldCBodHRwQ2FjaGUgdG8gdGhlIHJlc3VsdCBvZiBkZXRlcm1pbmluZyB0aGUgSFRUUCBjYWNoZVxuICAvLyAgICBwYXJ0aXRpb24sIGdpdmVuIGh0dHBSZXF1ZXN0LlxuICAvLyAgICBUT0RPOiBjYWNoZVxuXG4gIC8vICAgIDIzLiBJZiBodHRwQ2FjaGUgaXMgbnVsbCwgdGhlbiBzZXQgaHR0cFJlcXVlc3TigJlzIGNhY2hlIG1vZGUgdG9cbiAgLy8gICAgXCJuby1zdG9yZVwiLlxuICBpZiAoaHR0cENhY2hlID09IG51bGwpIHtcbiAgICBodHRwUmVxdWVzdC5jYWNoZSA9ICduby1zdG9yZSdcbiAgfVxuXG4gIC8vICAgIDI0LiBJZiBodHRwUmVxdWVzdOKAmXMgY2FjaGUgbW9kZSBpcyBuZWl0aGVyIFwibm8tc3RvcmVcIiBub3IgXCJyZWxvYWRcIixcbiAgLy8gICAgdGhlbjpcbiAgaWYgKGh0dHBSZXF1ZXN0Lm1vZGUgIT09ICduby1zdG9yZScgJiYgaHR0cFJlcXVlc3QubW9kZSAhPT0gJ3JlbG9hZCcpIHtcbiAgICAvLyBUT0RPOiBjYWNoZVxuICB9XG5cbiAgLy8gOS4gSWYgYWJvcnRlZCwgdGhlbiByZXR1cm4gdGhlIGFwcHJvcHJpYXRlIG5ldHdvcmsgZXJyb3IgZm9yIGZldGNoUGFyYW1zLlxuICAvLyBUT0RPXG5cbiAgLy8gMTAuIElmIHJlc3BvbnNlIGlzIG51bGwsIHRoZW46XG4gIGlmIChyZXNwb25zZSA9PSBudWxsKSB7XG4gICAgLy8gMS4gSWYgaHR0cFJlcXVlc3TigJlzIGNhY2hlIG1vZGUgaXMgXCJvbmx5LWlmLWNhY2hlZFwiLCB0aGVuIHJldHVybiBhXG4gICAgLy8gbmV0d29yayBlcnJvci5cbiAgICBpZiAoaHR0cFJlcXVlc3QubW9kZSA9PT0gJ29ubHktaWYtY2FjaGVkJykge1xuICAgICAgcmV0dXJuIG1ha2VOZXR3b3JrRXJyb3IoJ29ubHkgaWYgY2FjaGVkJylcbiAgICB9XG5cbiAgICAvLyAyLiBMZXQgZm9yd2FyZFJlc3BvbnNlIGJlIHRoZSByZXN1bHQgb2YgcnVubmluZyBIVFRQLW5ldHdvcmsgZmV0Y2hcbiAgICAvLyBnaXZlbiBodHRwRmV0Y2hQYXJhbXMsIGluY2x1ZGVDcmVkZW50aWFscywgYW5kIGlzTmV3Q29ubmVjdGlvbkZldGNoLlxuICAgIGNvbnN0IGZvcndhcmRSZXNwb25zZSA9IGF3YWl0IGh0dHBOZXR3b3JrRmV0Y2goXG4gICAgICBodHRwRmV0Y2hQYXJhbXMsXG4gICAgICBpbmNsdWRlQ3JlZGVudGlhbHMsXG4gICAgICBpc05ld0Nvbm5lY3Rpb25GZXRjaFxuICAgIClcblxuICAgIC8vIDMuIElmIGh0dHBSZXF1ZXN04oCZcyBtZXRob2QgaXMgdW5zYWZlIGFuZCBmb3J3YXJkUmVzcG9uc2XigJlzIHN0YXR1cyBpc1xuICAgIC8vIGluIHRoZSByYW5nZSAyMDAgdG8gMzk5LCBpbmNsdXNpdmUsIGludmFsaWRhdGUgYXBwcm9wcmlhdGUgc3RvcmVkXG4gICAgLy8gcmVzcG9uc2VzIGluIGh0dHBDYWNoZSwgYXMgcGVyIHRoZSBcIkludmFsaWRhdGlvblwiIGNoYXB0ZXIgb2YgSFRUUFxuICAgIC8vIENhY2hpbmcsIGFuZCBzZXQgc3RvcmVkUmVzcG9uc2UgdG8gbnVsbC4gW0hUVFAtQ0FDSElOR11cbiAgICBpZiAoXG4gICAgICAhc2FmZU1ldGhvZHNTZXQuaGFzKGh0dHBSZXF1ZXN0Lm1ldGhvZCkgJiZcbiAgICAgIGZvcndhcmRSZXNwb25zZS5zdGF0dXMgPj0gMjAwICYmXG4gICAgICBmb3J3YXJkUmVzcG9uc2Uuc3RhdHVzIDw9IDM5OVxuICAgICkge1xuICAgICAgLy8gVE9ETzogY2FjaGVcbiAgICB9XG5cbiAgICAvLyA0LiBJZiB0aGUgcmV2YWxpZGF0aW5nRmxhZyBpcyBzZXQgYW5kIGZvcndhcmRSZXNwb25zZeKAmXMgc3RhdHVzIGlzIDMwNCxcbiAgICAvLyB0aGVuOlxuICAgIGlmIChyZXZhbGlkYXRpbmdGbGFnICYmIGZvcndhcmRSZXNwb25zZS5zdGF0dXMgPT09IDMwNCkge1xuICAgICAgLy8gVE9ETzogY2FjaGVcbiAgICB9XG5cbiAgICAvLyA1LiBJZiByZXNwb25zZSBpcyBudWxsLCB0aGVuOlxuICAgIGlmIChyZXNwb25zZSA9PSBudWxsKSB7XG4gICAgICAvLyAxLiBTZXQgcmVzcG9uc2UgdG8gZm9yd2FyZFJlc3BvbnNlLlxuICAgICAgcmVzcG9uc2UgPSBmb3J3YXJkUmVzcG9uc2VcblxuICAgICAgLy8gMi4gU3RvcmUgaHR0cFJlcXVlc3QgYW5kIGZvcndhcmRSZXNwb25zZSBpbiBodHRwQ2FjaGUsIGFzIHBlciB0aGVcbiAgICAgIC8vIFwiU3RvcmluZyBSZXNwb25zZXMgaW4gQ2FjaGVzXCIgY2hhcHRlciBvZiBIVFRQIENhY2hpbmcuIFtIVFRQLUNBQ0hJTkddXG4gICAgICAvLyBUT0RPOiBjYWNoZVxuICAgIH1cbiAgfVxuXG4gIC8vIDExLiBTZXQgcmVzcG9uc2XigJlzIFVSTCBsaXN0IHRvIGEgY2xvbmUgb2YgaHR0cFJlcXVlc3TigJlzIFVSTCBsaXN0LlxuICByZXNwb25zZS51cmxMaXN0ID0gWy4uLmh0dHBSZXF1ZXN0LnVybExpc3RdXG5cbiAgLy8gMTIuIElmIGh0dHBSZXF1ZXN04oCZcyBoZWFkZXIgbGlzdCBjb250YWlucyBgUmFuZ2VgLCB0aGVuIHNldCByZXNwb25zZeKAmXNcbiAgLy8gcmFuZ2UtcmVxdWVzdGVkIGZsYWcuXG4gIGlmIChodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygncmFuZ2UnKSkge1xuICAgIHJlc3BvbnNlLnJhbmdlUmVxdWVzdGVkID0gdHJ1ZVxuICB9XG5cbiAgLy8gMTMuIFNldCByZXNwb25zZeKAmXMgcmVxdWVzdC1pbmNsdWRlcy1jcmVkZW50aWFscyB0byBpbmNsdWRlQ3JlZGVudGlhbHMuXG4gIHJlc3BvbnNlLnJlcXVlc3RJbmNsdWRlc0NyZWRlbnRpYWxzID0gaW5jbHVkZUNyZWRlbnRpYWxzXG5cbiAgLy8gMTQuIElmIHJlc3BvbnNl4oCZcyBzdGF0dXMgaXMgNDAxLCBodHRwUmVxdWVzdOKAmXMgcmVzcG9uc2UgdGFpbnRpbmcgaXMgbm90XG4gIC8vIFwiY29yc1wiLCBpbmNsdWRlQ3JlZGVudGlhbHMgaXMgdHJ1ZSwgYW5kIHJlcXVlc3TigJlzIHdpbmRvdyBpcyBhbiBlbnZpcm9ubWVudFxuICAvLyBzZXR0aW5ncyBvYmplY3QsIHRoZW46XG4gIC8vIFRPRE9cblxuICAvLyAxNS4gSWYgcmVzcG9uc2XigJlzIHN0YXR1cyBpcyA0MDcsIHRoZW46XG4gIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQwNykge1xuICAgIC8vIDEuIElmIHJlcXVlc3TigJlzIHdpbmRvdyBpcyBcIm5vLXdpbmRvd1wiLCB0aGVuIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgaWYgKHJlcXVlc3Qud2luZG93ID09PSAnbm8td2luZG93Jykge1xuICAgICAgcmV0dXJuIG1ha2VOZXR3b3JrRXJyb3IoKVxuICAgIH1cblxuICAgIC8vIDIuID8/P1xuXG4gICAgLy8gMy4gSWYgZmV0Y2hQYXJhbXMgaXMgY2FuY2VsZWQsIHRoZW4gcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSBuZXR3b3JrIGVycm9yIGZvciBmZXRjaFBhcmFtcy5cbiAgICBpZiAoaXNDYW5jZWxsZWQoZmV0Y2hQYXJhbXMpKSB7XG4gICAgICByZXR1cm4gbWFrZUFwcHJvcHJpYXRlTmV0d29ya0Vycm9yKGZldGNoUGFyYW1zKVxuICAgIH1cblxuICAgIC8vIDQuIFByb21wdCB0aGUgZW5kIHVzZXIgYXMgYXBwcm9wcmlhdGUgaW4gcmVxdWVzdOKAmXMgd2luZG93IGFuZCBzdG9yZVxuICAgIC8vIHRoZSByZXN1bHQgYXMgYSBwcm94eS1hdXRoZW50aWNhdGlvbiBlbnRyeS4gW0hUVFAtQVVUSF1cbiAgICAvLyBUT0RPOiBJbnZva2Ugc29tZSBraW5kIG9mIGNhbGxiYWNrP1xuXG4gICAgLy8gNS4gU2V0IHJlc3BvbnNlIHRvIHRoZSByZXN1bHQgb2YgcnVubmluZyBIVFRQLW5ldHdvcmstb3ItY2FjaGUgZmV0Y2ggZ2l2ZW5cbiAgICAvLyBmZXRjaFBhcmFtcy5cbiAgICAvLyBUT0RPXG4gICAgcmV0dXJuIG1ha2VOZXR3b3JrRXJyb3IoJ3Byb3h5IGF1dGhlbnRpY2F0aW9uIHJlcXVpcmVkJylcbiAgfVxuXG4gIC8vIDE2LiBJZiBhbGwgb2YgdGhlIGZvbGxvd2luZyBhcmUgdHJ1ZVxuICBpZiAoXG4gICAgLy8gcmVzcG9uc2XigJlzIHN0YXR1cyBpcyA0MjFcbiAgICByZXNwb25zZS5zdGF0dXMgPT09IDQyMSAmJlxuICAgIC8vIGlzTmV3Q29ubmVjdGlvbkZldGNoIGlzIGZhbHNlXG4gICAgIWlzTmV3Q29ubmVjdGlvbkZldGNoICYmXG4gICAgLy8gcmVxdWVzdOKAmXMgYm9keSBpcyBudWxsLCBvciByZXF1ZXN04oCZcyBib2R5IGlzIG5vbi1udWxsIGFuZCByZXF1ZXN04oCZcyBib2R54oCZcyBzb3VyY2UgaXMgbm9uLW51bGxcbiAgICAocmVxdWVzdC5ib2R5ID09IG51bGwgfHwgcmVxdWVzdC5ib2R5LnNvdXJjZSAhPSBudWxsKVxuICApIHtcbiAgICAvLyB0aGVuOlxuXG4gICAgLy8gMS4gSWYgZmV0Y2hQYXJhbXMgaXMgY2FuY2VsZWQsIHRoZW4gcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSBuZXR3b3JrIGVycm9yIGZvciBmZXRjaFBhcmFtcy5cbiAgICBpZiAoaXNDYW5jZWxsZWQoZmV0Y2hQYXJhbXMpKSB7XG4gICAgICByZXR1cm4gbWFrZUFwcHJvcHJpYXRlTmV0d29ya0Vycm9yKGZldGNoUGFyYW1zKVxuICAgIH1cblxuICAgIC8vIDIuIFNldCByZXNwb25zZSB0byB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgSFRUUC1uZXR3b3JrLW9yLWNhY2hlXG4gICAgLy8gZmV0Y2ggZ2l2ZW4gZmV0Y2hQYXJhbXMsIGlzQXV0aGVudGljYXRpb25GZXRjaCwgYW5kIHRydWUuXG5cbiAgICAvLyBUT0RPIChzcGVjKTogVGhlIHNwZWMgZG9lc24ndCBzcGVjaWZ5IHRoaXMgYnV0IHdlIG5lZWQgdG8gY2FuY2VsXG4gICAgLy8gdGhlIGFjdGl2ZSByZXNwb25zZSBiZWZvcmUgd2UgY2FuIHN0YXJ0IGEgbmV3IG9uZS5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vd2hhdHdnL2ZldGNoL2lzc3Vlcy8xMjkzXG4gICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb25uZWN0aW9uLmRlc3Ryb3koKVxuXG4gICAgcmVzcG9uc2UgPSBhd2FpdCBodHRwTmV0d29ya09yQ2FjaGVGZXRjaChcbiAgICAgIGZldGNoUGFyYW1zLFxuICAgICAgaXNBdXRoZW50aWNhdGlvbkZldGNoLFxuICAgICAgdHJ1ZVxuICAgIClcbiAgfVxuXG4gIC8vIDE3LiBJZiBpc0F1dGhlbnRpY2F0aW9uRmV0Y2ggaXMgdHJ1ZSwgdGhlbiBjcmVhdGUgYW4gYXV0aGVudGljYXRpb24gZW50cnlcbiAgaWYgKGlzQXV0aGVudGljYXRpb25GZXRjaCkge1xuICAgIC8vIFRPRE9cbiAgfVxuXG4gIC8vIDE4LiBSZXR1cm4gcmVzcG9uc2UuXG4gIHJldHVybiByZXNwb25zZVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC1uZXR3b3JrLWZldGNoXG5hc3luYyBmdW5jdGlvbiBodHRwTmV0d29ya0ZldGNoIChcbiAgZmV0Y2hQYXJhbXMsXG4gIGluY2x1ZGVDcmVkZW50aWFscyA9IGZhbHNlLFxuICBmb3JjZU5ld0Nvbm5lY3Rpb24gPSBmYWxzZVxuKSB7XG4gIGFzc2VydCghZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb25uZWN0aW9uIHx8IGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29ubmVjdGlvbi5kZXN0cm95ZWQpXG5cbiAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb25uZWN0aW9uID0ge1xuICAgIGFib3J0OiBudWxsLFxuICAgIGRlc3Ryb3llZDogZmFsc2UsXG4gICAgZGVzdHJveSAoZXJyKSB7XG4gICAgICBpZiAoIXRoaXMuZGVzdHJveWVkKSB7XG4gICAgICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZVxuICAgICAgICB0aGlzLmFib3J0Py4oZXJyID8/IG5ldyBET01FeGNlcHRpb24oJ1RoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQuJywgJ0Fib3J0RXJyb3InKSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyAxLiBMZXQgcmVxdWVzdCBiZSBmZXRjaFBhcmFtc+KAmXMgcmVxdWVzdC5cbiAgY29uc3QgcmVxdWVzdCA9IGZldGNoUGFyYW1zLnJlcXVlc3RcblxuICAvLyAyLiBMZXQgcmVzcG9uc2UgYmUgbnVsbC5cbiAgbGV0IHJlc3BvbnNlID0gbnVsbFxuXG4gIC8vIDMuIExldCB0aW1pbmdJbmZvIGJlIGZldGNoUGFyYW1z4oCZcyB0aW1pbmcgaW5mby5cbiAgY29uc3QgdGltaW5nSW5mbyA9IGZldGNoUGFyYW1zLnRpbWluZ0luZm9cblxuICAvLyA0LiBMZXQgaHR0cENhY2hlIGJlIHRoZSByZXN1bHQgb2YgZGV0ZXJtaW5pbmcgdGhlIEhUVFAgY2FjaGUgcGFydGl0aW9uLFxuICAvLyBnaXZlbiByZXF1ZXN0LlxuICAvLyBUT0RPOiBjYWNoZVxuICBjb25zdCBodHRwQ2FjaGUgPSBudWxsXG5cbiAgLy8gNS4gSWYgaHR0cENhY2hlIGlzIG51bGwsIHRoZW4gc2V0IHJlcXVlc3TigJlzIGNhY2hlIG1vZGUgdG8gXCJuby1zdG9yZVwiLlxuICBpZiAoaHR0cENhY2hlID09IG51bGwpIHtcbiAgICByZXF1ZXN0LmNhY2hlID0gJ25vLXN0b3JlJ1xuICB9XG5cbiAgLy8gNi4gTGV0IG5ldHdvcmtQYXJ0aXRpb25LZXkgYmUgdGhlIHJlc3VsdCBvZiBkZXRlcm1pbmluZyB0aGUgbmV0d29ya1xuICAvLyBwYXJ0aXRpb24ga2V5IGdpdmVuIHJlcXVlc3QuXG4gIC8vIFRPRE9cblxuICAvLyA3LiBMZXQgbmV3Q29ubmVjdGlvbiBiZSBcInllc1wiIGlmIGZvcmNlTmV3Q29ubmVjdGlvbiBpcyB0cnVlOyBvdGhlcndpc2VcbiAgLy8gXCJub1wiLlxuICBjb25zdCBuZXdDb25uZWN0aW9uID0gZm9yY2VOZXdDb25uZWN0aW9uID8gJ3llcycgOiAnbm8nIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcblxuICAvLyA4LiBTd2l0Y2ggb24gcmVxdWVzdOKAmXMgbW9kZTpcbiAgaWYgKHJlcXVlc3QubW9kZSA9PT0gJ3dlYnNvY2tldCcpIHtcbiAgICAvLyBMZXQgY29ubmVjdGlvbiBiZSB0aGUgcmVzdWx0IG9mIG9idGFpbmluZyBhIFdlYlNvY2tldCBjb25uZWN0aW9uLFxuICAgIC8vIGdpdmVuIHJlcXVlc3TigJlzIGN1cnJlbnQgVVJMLlxuICAgIC8vIFRPRE9cbiAgfSBlbHNlIHtcbiAgICAvLyBMZXQgY29ubmVjdGlvbiBiZSB0aGUgcmVzdWx0IG9mIG9idGFpbmluZyBhIGNvbm5lY3Rpb24sIGdpdmVuXG4gICAgLy8gbmV0d29ya1BhcnRpdGlvbktleSwgcmVxdWVzdOKAmXMgY3VycmVudCBVUkzigJlzIG9yaWdpbixcbiAgICAvLyBpbmNsdWRlQ3JlZGVudGlhbHMsIGFuZCBmb3JjZU5ld0Nvbm5lY3Rpb24uXG4gICAgLy8gVE9ET1xuICB9XG5cbiAgLy8gOS4gUnVuIHRoZXNlIHN0ZXBzLCBidXQgYWJvcnQgd2hlbiB0aGUgb25nb2luZyBmZXRjaCBpcyB0ZXJtaW5hdGVkOlxuXG4gIC8vICAgIDEuIElmIGNvbm5lY3Rpb24gaXMgZmFpbHVyZSwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuXG4gIC8vICAgIDIuIFNldCB0aW1pbmdJbmZv4oCZcyBmaW5hbCBjb25uZWN0aW9uIHRpbWluZyBpbmZvIHRvIHRoZSByZXN1bHQgb2ZcbiAgLy8gICAgY2FsbGluZyBjbGFtcCBhbmQgY29hcnNlbiBjb25uZWN0aW9uIHRpbWluZyBpbmZvIHdpdGggY29ubmVjdGlvbuKAmXNcbiAgLy8gICAgdGltaW5nIGluZm8sIHRpbWluZ0luZm/igJlzIHBvc3QtcmVkaXJlY3Qgc3RhcnQgdGltZSwgYW5kIGZldGNoUGFyYW1z4oCZc1xuICAvLyAgICBjcm9zcy1vcmlnaW4gaXNvbGF0ZWQgY2FwYWJpbGl0eS5cblxuICAvLyAgICAzLiBJZiBjb25uZWN0aW9uIGlzIG5vdCBhbiBIVFRQLzIgY29ubmVjdGlvbiwgcmVxdWVzdOKAmXMgYm9keSBpcyBub24tbnVsbCxcbiAgLy8gICAgYW5kIHJlcXVlc3TigJlzIGJvZHnigJlzIHNvdXJjZSBpcyBudWxsLCB0aGVuIGFwcGVuZCAoYFRyYW5zZmVyLUVuY29kaW5nYCxcbiAgLy8gICAgYGNodW5rZWRgKSB0byByZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cblxuICAvLyAgICA0LiBTZXQgdGltaW5nSW5mb+KAmXMgZmluYWwgbmV0d29yay1yZXF1ZXN0IHN0YXJ0IHRpbWUgdG8gdGhlIGNvYXJzZW5lZFxuICAvLyAgICBzaGFyZWQgY3VycmVudCB0aW1lIGdpdmVuIGZldGNoUGFyYW1z4oCZcyBjcm9zcy1vcmlnaW4gaXNvbGF0ZWRcbiAgLy8gICAgY2FwYWJpbGl0eS5cblxuICAvLyAgICA1LiBTZXQgcmVzcG9uc2UgdG8gdGhlIHJlc3VsdCBvZiBtYWtpbmcgYW4gSFRUUCByZXF1ZXN0IG92ZXIgY29ubmVjdGlvblxuICAvLyAgICB1c2luZyByZXF1ZXN0IHdpdGggdGhlIGZvbGxvd2luZyBjYXZlYXRzOlxuXG4gIC8vICAgICAgICAtIEZvbGxvdyB0aGUgcmVsZXZhbnQgcmVxdWlyZW1lbnRzIGZyb20gSFRUUC4gW0hUVFBdIFtIVFRQLVNFTUFOVElDU11cbiAgLy8gICAgICAgIFtIVFRQLUNPTkRdIFtIVFRQLUNBQ0hJTkddIFtIVFRQLUFVVEhdXG5cbiAgLy8gICAgICAgIC0gSWYgcmVxdWVzdOKAmXMgYm9keSBpcyBub24tbnVsbCwgYW5kIHJlcXVlc3TigJlzIGJvZHnigJlzIHNvdXJjZSBpcyBudWxsLFxuICAvLyAgICAgICAgdGhlbiB0aGUgdXNlciBhZ2VudCBtYXkgaGF2ZSBhIGJ1ZmZlciBvZiB1cCB0byA2NCBraWJpYnl0ZXMgYW5kIHN0b3JlXG4gIC8vICAgICAgICBhIHBhcnQgb2YgcmVxdWVzdOKAmXMgYm9keSBpbiB0aGF0IGJ1ZmZlci4gSWYgdGhlIHVzZXIgYWdlbnQgcmVhZHMgZnJvbVxuICAvLyAgICAgICAgcmVxdWVzdOKAmXMgYm9keSBiZXlvbmQgdGhhdCBidWZmZXLigJlzIHNpemUgYW5kIHRoZSB1c2VyIGFnZW50IG5lZWRzIHRvXG4gIC8vICAgICAgICByZXNlbmQgcmVxdWVzdCwgdGhlbiBpbnN0ZWFkIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG5cbiAgLy8gICAgICAgIC0gU2V0IHRpbWluZ0luZm/igJlzIGZpbmFsIG5ldHdvcmstcmVzcG9uc2Ugc3RhcnQgdGltZSB0byB0aGUgY29hcnNlbmVkXG4gIC8vICAgICAgICBzaGFyZWQgY3VycmVudCB0aW1lIGdpdmVuIGZldGNoUGFyYW1z4oCZcyBjcm9zcy1vcmlnaW4gaXNvbGF0ZWQgY2FwYWJpbGl0eSxcbiAgLy8gICAgICAgIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSB1c2VyIGFnZW504oCZcyBIVFRQIHBhcnNlciByZWNlaXZlcyB0aGUgZmlyc3QgYnl0ZVxuICAvLyAgICAgICAgb2YgdGhlIHJlc3BvbnNlIChlLmcuLCBmcmFtZSBoZWFkZXIgYnl0ZXMgZm9yIEhUVFAvMiBvciByZXNwb25zZSBzdGF0dXNcbiAgLy8gICAgICAgIGxpbmUgZm9yIEhUVFAvMS54KS5cblxuICAvLyAgICAgICAgLSBXYWl0IHVudGlsIGFsbCB0aGUgaGVhZGVycyBhcmUgdHJhbnNtaXR0ZWQuXG5cbiAgLy8gICAgICAgIC0gQW55IHJlc3BvbnNlcyB3aG9zZSBzdGF0dXMgaXMgaW4gdGhlIHJhbmdlIDEwMCB0byAxOTksIGluY2x1c2l2ZSxcbiAgLy8gICAgICAgIGFuZCBpcyBub3QgMTAxLCBhcmUgdG8gYmUgaWdub3JlZCwgZXhjZXB0IGZvciB0aGUgcHVycG9zZXMgb2Ygc2V0dGluZ1xuICAvLyAgICAgICAgdGltaW5nSW5mb+KAmXMgZmluYWwgbmV0d29yay1yZXNwb25zZSBzdGFydCB0aW1lIGFib3ZlLlxuXG4gIC8vICAgIC0gSWYgcmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QgY29udGFpbnMgYFRyYW5zZmVyLUVuY29kaW5nYC9gY2h1bmtlZGAgYW5kXG4gIC8vICAgIHJlc3BvbnNlIGlzIHRyYW5zZmVycmVkIHZpYSBIVFRQLzEuMCBvciBvbGRlciwgdGhlbiByZXR1cm4gYSBuZXR3b3JrXG4gIC8vICAgIGVycm9yLlxuXG4gIC8vICAgIC0gSWYgdGhlIEhUVFAgcmVxdWVzdCByZXN1bHRzIGluIGEgVExTIGNsaWVudCBjZXJ0aWZpY2F0ZSBkaWFsb2csIHRoZW46XG5cbiAgLy8gICAgICAgIDEuIElmIHJlcXVlc3TigJlzIHdpbmRvdyBpcyBhbiBlbnZpcm9ubWVudCBzZXR0aW5ncyBvYmplY3QsIG1ha2UgdGhlXG4gIC8vICAgICAgICBkaWFsb2cgYXZhaWxhYmxlIGluIHJlcXVlc3TigJlzIHdpbmRvdy5cblxuICAvLyAgICAgICAgMi4gT3RoZXJ3aXNlLCByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuXG4gIC8vIFRvIHRyYW5zbWl0IHJlcXVlc3TigJlzIGJvZHkgYm9keSwgcnVuIHRoZXNlIHN0ZXBzOlxuICBsZXQgcmVxdWVzdEJvZHkgPSBudWxsXG4gIC8vIDEuIElmIGJvZHkgaXMgbnVsbCBhbmQgZmV0Y2hQYXJhbXPigJlzIHByb2Nlc3MgcmVxdWVzdCBlbmQtb2YtYm9keSBpc1xuICAvLyBub24tbnVsbCwgdGhlbiBxdWV1ZSBhIGZldGNoIHRhc2sgZ2l2ZW4gZmV0Y2hQYXJhbXPigJlzIHByb2Nlc3MgcmVxdWVzdFxuICAvLyBlbmQtb2YtYm9keSBhbmQgZmV0Y2hQYXJhbXPigJlzIHRhc2sgZGVzdGluYXRpb24uXG4gIGlmIChyZXF1ZXN0LmJvZHkgPT0gbnVsbCAmJiBmZXRjaFBhcmFtcy5wcm9jZXNzUmVxdWVzdEVuZE9mQm9keSkge1xuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGZldGNoUGFyYW1zLnByb2Nlc3NSZXF1ZXN0RW5kT2ZCb2R5KCkpXG4gIH0gZWxzZSBpZiAocmVxdWVzdC5ib2R5ICE9IG51bGwpIHtcbiAgICAvLyAyLiBPdGhlcndpc2UsIGlmIGJvZHkgaXMgbm9uLW51bGw6XG5cbiAgICAvLyAgICAxLiBMZXQgcHJvY2Vzc0JvZHlDaHVuayBnaXZlbiBieXRlcyBiZSB0aGVzZSBzdGVwczpcbiAgICBjb25zdCBwcm9jZXNzQm9keUNodW5rID0gYXN5bmMgZnVuY3Rpb24gKiAoYnl0ZXMpIHtcbiAgICAgIC8vIDEuIElmIHRoZSBvbmdvaW5nIGZldGNoIGlzIHRlcm1pbmF0ZWQsIHRoZW4gYWJvcnQgdGhlc2Ugc3RlcHMuXG4gICAgICBpZiAoaXNDYW5jZWxsZWQoZmV0Y2hQYXJhbXMpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyAyLiBSdW4gdGhpcyBzdGVwIGluIHBhcmFsbGVsOiB0cmFuc21pdCBieXRlcy5cbiAgICAgIHlpZWxkIGJ5dGVzXG5cbiAgICAgIC8vIDMuIElmIGZldGNoUGFyYW1z4oCZcyBwcm9jZXNzIHJlcXVlc3QgYm9keSBpcyBub24tbnVsbCwgdGhlbiBydW5cbiAgICAgIC8vIGZldGNoUGFyYW1z4oCZcyBwcm9jZXNzIHJlcXVlc3QgYm9keSBnaXZlbiBieXRlc+KAmXMgbGVuZ3RoLlxuICAgICAgZmV0Y2hQYXJhbXMucHJvY2Vzc1JlcXVlc3RCb2R5Q2h1bmtMZW5ndGg/LihieXRlcy5ieXRlTGVuZ3RoKVxuICAgIH1cblxuICAgIC8vIDIuIExldCBwcm9jZXNzRW5kT2ZCb2R5IGJlIHRoZXNlIHN0ZXBzOlxuICAgIGNvbnN0IHByb2Nlc3NFbmRPZkJvZHkgPSAoKSA9PiB7XG4gICAgICAvLyAxLiBJZiBmZXRjaFBhcmFtcyBpcyBjYW5jZWxlZCwgdGhlbiBhYm9ydCB0aGVzZSBzdGVwcy5cbiAgICAgIGlmIChpc0NhbmNlbGxlZChmZXRjaFBhcmFtcykpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIElmIGZldGNoUGFyYW1z4oCZcyBwcm9jZXNzIHJlcXVlc3QgZW5kLW9mLWJvZHkgaXMgbm9uLW51bGwsXG4gICAgICAvLyB0aGVuIHJ1biBmZXRjaFBhcmFtc+KAmXMgcHJvY2VzcyByZXF1ZXN0IGVuZC1vZi1ib2R5LlxuICAgICAgaWYgKGZldGNoUGFyYW1zLnByb2Nlc3NSZXF1ZXN0RW5kT2ZCb2R5KSB7XG4gICAgICAgIGZldGNoUGFyYW1zLnByb2Nlc3NSZXF1ZXN0RW5kT2ZCb2R5KClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAzLiBMZXQgcHJvY2Vzc0JvZHlFcnJvciBnaXZlbiBlIGJlIHRoZXNlIHN0ZXBzOlxuICAgIGNvbnN0IHByb2Nlc3NCb2R5RXJyb3IgPSAoZSkgPT4ge1xuICAgICAgLy8gMS4gSWYgZmV0Y2hQYXJhbXMgaXMgY2FuY2VsZWQsIHRoZW4gYWJvcnQgdGhlc2Ugc3RlcHMuXG4gICAgICBpZiAoaXNDYW5jZWxsZWQoZmV0Y2hQYXJhbXMpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyAyLiBJZiBlIGlzIGFuIFwiQWJvcnRFcnJvclwiIERPTUV4Y2VwdGlvbiwgdGhlbiBhYm9ydCBmZXRjaFBhcmFtc+KAmXMgY29udHJvbGxlci5cbiAgICAgIGlmIChlLm5hbWUgPT09ICdBYm9ydEVycm9yJykge1xuICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmFib3J0KClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIudGVybWluYXRlKGUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNC4gSW5jcmVtZW50YWxseSByZWFkIHJlcXVlc3TigJlzIGJvZHkgZ2l2ZW4gcHJvY2Vzc0JvZHlDaHVuaywgcHJvY2Vzc0VuZE9mQm9keSxcbiAgICAvLyBwcm9jZXNzQm9keUVycm9yLCBhbmQgZmV0Y2hQYXJhbXPigJlzIHRhc2sgZGVzdGluYXRpb24uXG4gICAgcmVxdWVzdEJvZHkgPSAoYXN5bmMgZnVuY3Rpb24gKiAoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IGJ5dGVzIG9mIHJlcXVlc3QuYm9keS5zdHJlYW0pIHtcbiAgICAgICAgICB5aWVsZCAqIHByb2Nlc3NCb2R5Q2h1bmsoYnl0ZXMpXG4gICAgICAgIH1cbiAgICAgICAgcHJvY2Vzc0VuZE9mQm9keSgpXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgcHJvY2Vzc0JvZHlFcnJvcihlcnIpXG4gICAgICB9XG4gICAgfSkoKVxuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBzb2NrZXQgaXMgb25seSBwcm92aWRlZCBmb3Igd2Vic29ja2V0c1xuICAgIGNvbnN0IHsgYm9keSwgc3RhdHVzLCBzdGF0dXNUZXh0LCBoZWFkZXJzTGlzdCwgc29ja2V0IH0gPSBhd2FpdCBkaXNwYXRjaCh7IGJvZHk6IHJlcXVlc3RCb2R5IH0pXG5cbiAgICBpZiAoc29ja2V0KSB7XG4gICAgICByZXNwb25zZSA9IG1ha2VSZXNwb25zZSh7IHN0YXR1cywgc3RhdHVzVGV4dCwgaGVhZGVyc0xpc3QsIHNvY2tldCB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBpdGVyYXRvciA9IGJvZHlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKClcbiAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIubmV4dCA9ICgpID0+IGl0ZXJhdG9yLm5leHQoKVxuXG4gICAgICByZXNwb25zZSA9IG1ha2VSZXNwb25zZSh7IHN0YXR1cywgc3RhdHVzVGV4dCwgaGVhZGVyc0xpc3QgfSlcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIDEwLiBJZiBhYm9ydGVkLCB0aGVuOlxuICAgIGlmIChlcnIubmFtZSA9PT0gJ0Fib3J0RXJyb3InKSB7XG4gICAgICAvLyAxLiBJZiBjb25uZWN0aW9uIHVzZXMgSFRUUC8yLCB0aGVuIHRyYW5zbWl0IGFuIFJTVF9TVFJFQU0gZnJhbWUuXG4gICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbm5lY3Rpb24uZGVzdHJveSgpXG5cbiAgICAgIC8vIDIuIFJldHVybiB0aGUgYXBwcm9wcmlhdGUgbmV0d29yayBlcnJvciBmb3IgZmV0Y2hQYXJhbXMuXG4gICAgICByZXR1cm4gbWFrZUFwcHJvcHJpYXRlTmV0d29ya0Vycm9yKGZldGNoUGFyYW1zLCBlcnIpXG4gICAgfVxuXG4gICAgcmV0dXJuIG1ha2VOZXR3b3JrRXJyb3IoZXJyKVxuICB9XG5cbiAgLy8gMTEuIExldCBwdWxsQWxnb3JpdGhtIGJlIGFuIGFjdGlvbiB0aGF0IHJlc3VtZXMgdGhlIG9uZ29pbmcgZmV0Y2hcbiAgLy8gaWYgaXQgaXMgc3VzcGVuZGVkLlxuICBjb25zdCBwdWxsQWxnb3JpdGhtID0gKCkgPT4ge1xuICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIucmVzdW1lKClcbiAgfVxuXG4gIC8vIDEyLiBMZXQgY2FuY2VsQWxnb3JpdGhtIGJlIGFuIGFsZ29yaXRobSB0aGF0IGFib3J0cyBmZXRjaFBhcmFtc+KAmXNcbiAgLy8gY29udHJvbGxlciB3aXRoIHJlYXNvbiwgZ2l2ZW4gcmVhc29uLlxuICBjb25zdCBjYW5jZWxBbGdvcml0aG0gPSAocmVhc29uKSA9PiB7XG4gICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5hYm9ydChyZWFzb24pXG4gIH1cblxuICAvLyAxMy4gTGV0IGhpZ2hXYXRlck1hcmsgYmUgYSBub24tbmVnYXRpdmUsIG5vbi1OYU4gbnVtYmVyLCBjaG9zZW4gYnlcbiAgLy8gdGhlIHVzZXIgYWdlbnQuXG4gIC8vIFRPRE9cblxuICAvLyAxNC4gTGV0IHNpemVBbGdvcml0aG0gYmUgYW4gYWxnb3JpdGhtIHRoYXQgYWNjZXB0cyBhIGNodW5rIG9iamVjdFxuICAvLyBhbmQgcmV0dXJucyBhIG5vbi1uZWdhdGl2ZSwgbm9uLU5hTiwgbm9uLWluZmluaXRlIG51bWJlciwgY2hvc2VuIGJ5IHRoZSB1c2VyIGFnZW50LlxuICAvLyBUT0RPXG5cbiAgLy8gMTUuIExldCBzdHJlYW0gYmUgYSBuZXcgUmVhZGFibGVTdHJlYW0uXG4gIC8vIDE2LiBTZXQgdXAgc3RyZWFtIHdpdGggcHVsbEFsZ29yaXRobSBzZXQgdG8gcHVsbEFsZ29yaXRobSxcbiAgLy8gY2FuY2VsQWxnb3JpdGhtIHNldCB0byBjYW5jZWxBbGdvcml0aG0sIGhpZ2hXYXRlck1hcmsgc2V0IHRvXG4gIC8vIGhpZ2hXYXRlck1hcmssIGFuZCBzaXplQWxnb3JpdGhtIHNldCB0byBzaXplQWxnb3JpdGhtLlxuICBpZiAoIVJlYWRhYmxlU3RyZWFtKSB7XG4gICAgUmVhZGFibGVTdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0vd2ViJykuUmVhZGFibGVTdHJlYW1cbiAgfVxuXG4gIGNvbnN0IHN0cmVhbSA9IG5ldyBSZWFkYWJsZVN0cmVhbShcbiAgICB7XG4gICAgICBhc3luYyBzdGFydCAoY29udHJvbGxlcikge1xuICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbnRyb2xsZXIgPSBjb250cm9sbGVyXG4gICAgICB9LFxuICAgICAgYXN5bmMgcHVsbCAoY29udHJvbGxlcikge1xuICAgICAgICBhd2FpdCBwdWxsQWxnb3JpdGhtKGNvbnRyb2xsZXIpXG4gICAgICB9LFxuICAgICAgYXN5bmMgY2FuY2VsIChyZWFzb24pIHtcbiAgICAgICAgYXdhaXQgY2FuY2VsQWxnb3JpdGhtKHJlYXNvbilcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGhpZ2hXYXRlck1hcms6IDAsXG4gICAgICBzaXplICgpIHtcbiAgICAgICAgcmV0dXJuIDFcbiAgICAgIH1cbiAgICB9XG4gIClcblxuICAvLyAxNy4gUnVuIHRoZXNlIHN0ZXBzLCBidXQgYWJvcnQgd2hlbiB0aGUgb25nb2luZyBmZXRjaCBpcyB0ZXJtaW5hdGVkOlxuXG4gIC8vICAgIDEuIFNldCByZXNwb25zZeKAmXMgYm9keSB0byBhIG5ldyBib2R5IHdob3NlIHN0cmVhbSBpcyBzdHJlYW0uXG4gIHJlc3BvbnNlLmJvZHkgPSB7IHN0cmVhbSB9XG5cbiAgLy8gICAgMi4gSWYgcmVzcG9uc2UgaXMgbm90IGEgbmV0d29yayBlcnJvciBhbmQgcmVxdWVzdOKAmXMgY2FjaGUgbW9kZSBpc1xuICAvLyAgICBub3QgXCJuby1zdG9yZVwiLCB0aGVuIHVwZGF0ZSByZXNwb25zZSBpbiBodHRwQ2FjaGUgZm9yIHJlcXVlc3QuXG4gIC8vICAgIFRPRE9cblxuICAvLyAgICAzLiBJZiBpbmNsdWRlQ3JlZGVudGlhbHMgaXMgdHJ1ZSBhbmQgdGhlIHVzZXIgYWdlbnQgaXMgbm90IGNvbmZpZ3VyZWRcbiAgLy8gICAgdG8gYmxvY2sgY29va2llcyBmb3IgcmVxdWVzdCAoc2VlIHNlY3Rpb24gNyBvZiBbQ09PS0lFU10pLCB0aGVuIHJ1biB0aGVcbiAgLy8gICAgXCJzZXQtY29va2llLXN0cmluZ1wiIHBhcnNpbmcgYWxnb3JpdGhtIChzZWUgc2VjdGlvbiA1LjIgb2YgW0NPT0tJRVNdKSBvblxuICAvLyAgICB0aGUgdmFsdWUgb2YgZWFjaCBoZWFkZXIgd2hvc2UgbmFtZSBpcyBhIGJ5dGUtY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBmb3JcbiAgLy8gICAgYFNldC1Db29raWVgIGluIHJlc3BvbnNl4oCZcyBoZWFkZXIgbGlzdCwgaWYgYW55LCBhbmQgcmVxdWVzdOKAmXMgY3VycmVudCBVUkwuXG4gIC8vICAgIFRPRE9cblxuICAvLyAxOC4gSWYgYWJvcnRlZCwgdGhlbjpcbiAgLy8gVE9ET1xuXG4gIC8vIDE5LiBSdW4gdGhlc2Ugc3RlcHMgaW4gcGFyYWxsZWw6XG5cbiAgLy8gICAgMS4gUnVuIHRoZXNlIHN0ZXBzLCBidXQgYWJvcnQgd2hlbiBmZXRjaFBhcmFtcyBpcyBjYW5jZWxlZDpcbiAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5vbigndGVybWluYXRlZCcsIG9uQWJvcnRlZClcbiAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5yZXN1bWUgPSBhc3luYyAoKSA9PiB7XG4gICAgLy8gMS4gV2hpbGUgdHJ1ZVxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAvLyAxLTMuIFNlZSBvbkRhdGEuLi5cblxuICAgICAgLy8gNC4gU2V0IGJ5dGVzIHRvIHRoZSByZXN1bHQgb2YgaGFuZGxpbmcgY29udGVudCBjb2RpbmdzIGdpdmVuXG4gICAgICAvLyBjb2RpbmdzIGFuZCBieXRlcy5cbiAgICAgIGxldCBieXRlc1xuICAgICAgbGV0IGlzRmFpbHVyZVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgeyBkb25lLCB2YWx1ZSB9ID0gYXdhaXQgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5uZXh0KClcblxuICAgICAgICBpZiAoaXNBYm9ydGVkKGZldGNoUGFyYW1zKSkge1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cblxuICAgICAgICBieXRlcyA9IGRvbmUgPyB1bmRlZmluZWQgOiB2YWx1ZVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChmZXRjaFBhcmFtcy5jb250cm9sbGVyLmVuZGVkICYmICF0aW1pbmdJbmZvLmVuY29kZWRCb2R5U2l6ZSkge1xuICAgICAgICAgIC8vIHpsaWIgZG9lc24ndCBsaWtlIGVtcHR5IHN0cmVhbXMuXG4gICAgICAgICAgYnl0ZXMgPSB1bmRlZmluZWRcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBieXRlcyA9IGVyclxuXG4gICAgICAgICAgLy8gZXJyIG1heSBiZSBwcm9wYWdhdGVkIGZyb20gdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHJlYWRhYmxlc3RyZWFtLmNhbmNlbCxcbiAgICAgICAgICAvLyB3aGljaCBtaWdodCBub3QgYmUgYW4gZXJyb3IuIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8yMDA5XG4gICAgICAgICAgaXNGYWlsdXJlID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChieXRlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIDIuIE90aGVyd2lzZSwgaWYgdGhlIGJ5dGVzIHRyYW5zbWlzc2lvbiBmb3IgcmVzcG9uc2XigJlzIG1lc3NhZ2VcbiAgICAgICAgLy8gYm9keSBpcyBkb25lIG5vcm1hbGx5IGFuZCBzdHJlYW0gaXMgcmVhZGFibGUsIHRoZW4gY2xvc2VcbiAgICAgICAgLy8gc3RyZWFtLCBmaW5hbGl6ZSByZXNwb25zZSBmb3IgZmV0Y2hQYXJhbXMgYW5kIHJlc3BvbnNlLCBhbmRcbiAgICAgICAgLy8gYWJvcnQgdGhlc2UgaW4tcGFyYWxsZWwgc3RlcHMuXG4gICAgICAgIHJlYWRhYmxlU3RyZWFtQ2xvc2UoZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb250cm9sbGVyKVxuXG4gICAgICAgIGZpbmFsaXplUmVzcG9uc2UoZmV0Y2hQYXJhbXMsIHJlc3BvbnNlKVxuXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyA1LiBJbmNyZWFzZSB0aW1pbmdJbmZv4oCZcyBkZWNvZGVkIGJvZHkgc2l6ZSBieSBieXRlc+KAmXMgbGVuZ3RoLlxuICAgICAgdGltaW5nSW5mby5kZWNvZGVkQm9keVNpemUgKz0gYnl0ZXM/LmJ5dGVMZW5ndGggPz8gMFxuXG4gICAgICAvLyA2LiBJZiBieXRlcyBpcyBmYWlsdXJlLCB0aGVuIHRlcm1pbmF0ZSBmZXRjaFBhcmFtc+KAmXMgY29udHJvbGxlci5cbiAgICAgIGlmIChpc0ZhaWx1cmUpIHtcbiAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci50ZXJtaW5hdGUoYnl0ZXMpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyA3LiBFbnF1ZXVlIGEgVWludDhBcnJheSB3cmFwcGluZyBhbiBBcnJheUJ1ZmZlciBjb250YWluaW5nIGJ5dGVzXG4gICAgICAvLyBpbnRvIHN0cmVhbS5cbiAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29udHJvbGxlci5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KGJ5dGVzKSlcblxuICAgICAgLy8gOC4gSWYgc3RyZWFtIGlzIGVycm9yZWQsIHRoZW4gdGVybWluYXRlIHRoZSBvbmdvaW5nIGZldGNoLlxuICAgICAgaWYgKGlzRXJyb3JlZChzdHJlYW0pKSB7XG4gICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIudGVybWluYXRlKClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDkuIElmIHN0cmVhbSBkb2VzbuKAmXQgbmVlZCBtb3JlIGRhdGEgYXNrIHRoZSB1c2VyIGFnZW50IHRvIHN1c3BlbmRcbiAgICAgIC8vIHRoZSBvbmdvaW5nIGZldGNoLlxuICAgICAgaWYgKCFmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbnRyb2xsZXIuZGVzaXJlZFNpemUpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gICAgMi4gSWYgYWJvcnRlZCwgdGhlbjpcbiAgZnVuY3Rpb24gb25BYm9ydGVkIChyZWFzb24pIHtcbiAgICAvLyAyLiBJZiBmZXRjaFBhcmFtcyBpcyBhYm9ydGVkLCB0aGVuOlxuICAgIGlmIChpc0Fib3J0ZWQoZmV0Y2hQYXJhbXMpKSB7XG4gICAgICAvLyAxLiBTZXQgcmVzcG9uc2XigJlzIGFib3J0ZWQgZmxhZy5cbiAgICAgIHJlc3BvbnNlLmFib3J0ZWQgPSB0cnVlXG5cbiAgICAgIC8vIDIuIElmIHN0cmVhbSBpcyByZWFkYWJsZSwgdGhlbiBlcnJvciBzdHJlYW0gd2l0aCB0aGUgcmVzdWx0IG9mXG4gICAgICAvLyAgICBkZXNlcmlhbGl6ZSBhIHNlcmlhbGl6ZWQgYWJvcnQgcmVhc29uIGdpdmVuIGZldGNoUGFyYW1z4oCZc1xuICAgICAgLy8gICAgY29udHJvbGxlcuKAmXMgc2VyaWFsaXplZCBhYm9ydCByZWFzb24gYW5kIGFuXG4gICAgICAvLyAgICBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIHJlYWxtLlxuICAgICAgaWYgKGlzUmVhZGFibGUoc3RyZWFtKSkge1xuICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbnRyb2xsZXIuZXJyb3IoXG4gICAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5zZXJpYWxpemVkQWJvcnRSZWFzb25cbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyAzLiBPdGhlcndpc2UsIGlmIHN0cmVhbSBpcyByZWFkYWJsZSwgZXJyb3Igc3RyZWFtIHdpdGggYSBUeXBlRXJyb3IuXG4gICAgICBpZiAoaXNSZWFkYWJsZShzdHJlYW0pKSB7XG4gICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29udHJvbGxlci5lcnJvcihuZXcgVHlwZUVycm9yKCd0ZXJtaW5hdGVkJywge1xuICAgICAgICAgIGNhdXNlOiBpc0Vycm9yTGlrZShyZWFzb24pID8gcmVhc29uIDogdW5kZWZpbmVkXG4gICAgICAgIH0pKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDQuIElmIGNvbm5lY3Rpb24gdXNlcyBIVFRQLzIsIHRoZW4gdHJhbnNtaXQgYW4gUlNUX1NUUkVBTSBmcmFtZS5cbiAgICAvLyA1LiBPdGhlcndpc2UsIHRoZSB1c2VyIGFnZW50IHNob3VsZCBjbG9zZSBjb25uZWN0aW9uIHVubGVzcyBpdCB3b3VsZCBiZSBiYWQgZm9yIHBlcmZvcm1hbmNlIHRvIGRvIHNvLlxuICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29ubmVjdGlvbi5kZXN0cm95KClcbiAgfVxuXG4gIC8vIDIwLiBSZXR1cm4gcmVzcG9uc2UuXG4gIHJldHVybiByZXNwb25zZVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGRpc3BhdGNoICh7IGJvZHkgfSkge1xuICAgIGNvbnN0IHVybCA9IHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpXG4gICAgLyoqIEB0eXBlIHtpbXBvcnQoJy4uLy4uJykuQWdlbnR9ICovXG4gICAgY29uc3QgYWdlbnQgPSBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmRpc3BhdGNoZXJcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiBhZ2VudC5kaXNwYXRjaChcbiAgICAgIHtcbiAgICAgICAgcGF0aDogdXJsLnBhdGhuYW1lICsgdXJsLnNlYXJjaCxcbiAgICAgICAgb3JpZ2luOiB1cmwub3JpZ2luLFxuICAgICAgICBtZXRob2Q6IHJlcXVlc3QubWV0aG9kLFxuICAgICAgICBib2R5OiBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmRpc3BhdGNoZXIuaXNNb2NrQWN0aXZlID8gcmVxdWVzdC5ib2R5ICYmIChyZXF1ZXN0LmJvZHkuc291cmNlIHx8IHJlcXVlc3QuYm9keS5zdHJlYW0pIDogYm9keSxcbiAgICAgICAgaGVhZGVyczogcmVxdWVzdC5oZWFkZXJzTGlzdC5lbnRyaWVzLFxuICAgICAgICBtYXhSZWRpcmVjdGlvbnM6IDAsXG4gICAgICAgIHVwZ3JhZGU6IHJlcXVlc3QubW9kZSA9PT0gJ3dlYnNvY2tldCcgPyAnd2Vic29ja2V0JyA6IHVuZGVmaW5lZFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYm9keTogbnVsbCxcbiAgICAgICAgYWJvcnQ6IG51bGwsXG5cbiAgICAgICAgb25Db25uZWN0IChhYm9ydCkge1xuICAgICAgICAgIC8vIFRPRE8gKGZpeCk6IERvIHdlIG5lZWQgY29ubmVjdGlvbiBoZXJlP1xuICAgICAgICAgIGNvbnN0IHsgY29ubmVjdGlvbiB9ID0gZmV0Y2hQYXJhbXMuY29udHJvbGxlclxuXG4gICAgICAgICAgaWYgKGNvbm5lY3Rpb24uZGVzdHJveWVkKSB7XG4gICAgICAgICAgICBhYm9ydChuZXcgRE9NRXhjZXB0aW9uKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLicsICdBYm9ydEVycm9yJykpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIub24oJ3Rlcm1pbmF0ZWQnLCBhYm9ydClcbiAgICAgICAgICAgIHRoaXMuYWJvcnQgPSBjb25uZWN0aW9uLmFib3J0ID0gYWJvcnRcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgb25IZWFkZXJzIChzdGF0dXMsIGhlYWRlcnNMaXN0LCByZXN1bWUsIHN0YXR1c1RleHQpIHtcbiAgICAgICAgICBpZiAoc3RhdHVzIDwgMjAwKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsZXQgY29kaW5ncyA9IFtdXG4gICAgICAgICAgbGV0IGxvY2F0aW9uID0gJydcblxuICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSGVhZGVycygpXG5cbiAgICAgICAgICAvLyBGb3IgSDIsIHRoZSBoZWFkZXJzIGFyZSBhIHBsYWluIEpTIG9iamVjdFxuICAgICAgICAgIC8vIFdlIGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlbSBhbmQgaXRlcmF0ZSBhY2NvcmRpbmdseVxuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnNMaXN0KSkge1xuICAgICAgICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBoZWFkZXJzTGlzdC5sZW5ndGg7IG4gKz0gMikge1xuICAgICAgICAgICAgICBjb25zdCBrZXkgPSBoZWFkZXJzTGlzdFtuICsgMF0udG9TdHJpbmcoJ2xhdGluMScpXG4gICAgICAgICAgICAgIGNvbnN0IHZhbCA9IGhlYWRlcnNMaXN0W24gKyAxXS50b1N0cmluZygnbGF0aW4xJylcbiAgICAgICAgICAgICAgaWYgKGtleS50b0xvd2VyQ2FzZSgpID09PSAnY29udGVudC1lbmNvZGluZycpIHtcbiAgICAgICAgICAgICAgICAvLyBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNzIzMSNzZWN0aW9uLTMuMS4yLjFcbiAgICAgICAgICAgICAgICAvLyBcIkFsbCBjb250ZW50LWNvZGluZyB2YWx1ZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmUuLi5cIlxuICAgICAgICAgICAgICAgIGNvZGluZ3MgPSB2YWwudG9Mb3dlckNhc2UoKS5zcGxpdCgnLCcpLm1hcCgoeCkgPT4geC50cmltKCkpXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5LnRvTG93ZXJDYXNlKCkgPT09ICdsb2NhdGlvbicpIHtcbiAgICAgICAgICAgICAgICBsb2NhdGlvbiA9IHZhbFxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaGVhZGVyc1trSGVhZGVyc0xpc3RdLmFwcGVuZChrZXksIHZhbClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGhlYWRlcnNMaXN0KVxuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgICAgICAgICBjb25zdCB2YWwgPSBoZWFkZXJzTGlzdFtrZXldXG4gICAgICAgICAgICAgIGlmIChrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtZW5jb2RpbmcnKSB7XG4gICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzcyMzEjc2VjdGlvbi0zLjEuMi4xXG4gICAgICAgICAgICAgICAgLy8gXCJBbGwgY29udGVudC1jb2RpbmcgdmFsdWVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlLi4uXCJcbiAgICAgICAgICAgICAgICBjb2RpbmdzID0gdmFsLnRvTG93ZXJDYXNlKCkuc3BsaXQoJywnKS5tYXAoKHgpID0+IHgudHJpbSgpKS5yZXZlcnNlKClcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2xvY2F0aW9uJykge1xuICAgICAgICAgICAgICAgIGxvY2F0aW9uID0gdmFsXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBoZWFkZXJzW2tIZWFkZXJzTGlzdF0uYXBwZW5kKGtleSwgdmFsKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuYm9keSA9IG5ldyBSZWFkYWJsZSh7IHJlYWQ6IHJlc3VtZSB9KVxuXG4gICAgICAgICAgY29uc3QgZGVjb2RlcnMgPSBbXVxuXG4gICAgICAgICAgY29uc3Qgd2lsbEZvbGxvdyA9IHJlcXVlc3QucmVkaXJlY3QgPT09ICdmb2xsb3cnICYmXG4gICAgICAgICAgICBsb2NhdGlvbiAmJlxuICAgICAgICAgICAgcmVkaXJlY3RTdGF0dXNTZXQuaGFzKHN0YXR1cylcblxuICAgICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvSGVhZGVycy9Db250ZW50LUVuY29kaW5nXG4gICAgICAgICAgaWYgKHJlcXVlc3QubWV0aG9kICE9PSAnSEVBRCcgJiYgcmVxdWVzdC5tZXRob2QgIT09ICdDT05ORUNUJyAmJiAhbnVsbEJvZHlTdGF0dXMuaW5jbHVkZXMoc3RhdHVzKSAmJiAhd2lsbEZvbGxvdykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBjb2Rpbmcgb2YgY29kaW5ncykge1xuICAgICAgICAgICAgICAvLyBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjOTExMi5odG1sI3NlY3Rpb24tNy4yXG4gICAgICAgICAgICAgIGlmIChjb2RpbmcgPT09ICd4LWd6aXAnIHx8IGNvZGluZyA9PT0gJ2d6aXAnKSB7XG4gICAgICAgICAgICAgICAgZGVjb2RlcnMucHVzaCh6bGliLmNyZWF0ZUd1bnppcCh7XG4gICAgICAgICAgICAgICAgICAvLyBCZSBsZXNzIHN0cmljdCB3aGVuIGRlY29kaW5nIGNvbXByZXNzZWQgcmVzcG9uc2VzLCBzaW5jZSBzb21ldGltZXNcbiAgICAgICAgICAgICAgICAgIC8vIHNlcnZlcnMgc2VuZCBzbGlnaHRseSBpbnZhbGlkIHJlc3BvbnNlcyB0aGF0IGFyZSBzdGlsbCBhY2NlcHRlZFxuICAgICAgICAgICAgICAgICAgLy8gYnkgY29tbW9uIGJyb3dzZXJzLlxuICAgICAgICAgICAgICAgICAgLy8gQWx3YXlzIHVzaW5nIFpfU1lOQ19GTFVTSCBpcyB3aGF0IGNVUkwgZG9lcy5cbiAgICAgICAgICAgICAgICAgIGZsdXNoOiB6bGliLmNvbnN0YW50cy5aX1NZTkNfRkxVU0gsXG4gICAgICAgICAgICAgICAgICBmaW5pc2hGbHVzaDogemxpYi5jb25zdGFudHMuWl9TWU5DX0ZMVVNIXG4gICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29kaW5nID09PSAnZGVmbGF0ZScpIHtcbiAgICAgICAgICAgICAgICBkZWNvZGVycy5wdXNoKHpsaWIuY3JlYXRlSW5mbGF0ZSgpKVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvZGluZyA9PT0gJ2JyJykge1xuICAgICAgICAgICAgICAgIGRlY29kZXJzLnB1c2goemxpYi5jcmVhdGVCcm90bGlEZWNvbXByZXNzKCkpXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGVjb2RlcnMubGVuZ3RoID0gMFxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgIHN0YXR1cyxcbiAgICAgICAgICAgIHN0YXR1c1RleHQsXG4gICAgICAgICAgICBoZWFkZXJzTGlzdDogaGVhZGVyc1trSGVhZGVyc0xpc3RdLFxuICAgICAgICAgICAgYm9keTogZGVjb2RlcnMubGVuZ3RoXG4gICAgICAgICAgICAgID8gcGlwZWxpbmUodGhpcy5ib2R5LCAuLi5kZWNvZGVycywgKCkgPT4geyB9KVxuICAgICAgICAgICAgICA6IHRoaXMuYm9keS5vbignZXJyb3InLCAoKSA9PiB7fSlcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfSxcblxuICAgICAgICBvbkRhdGEgKGNodW5rKSB7XG4gICAgICAgICAgaWYgKGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuZHVtcCkge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gMS4gSWYgb25lIG9yIG1vcmUgYnl0ZXMgaGF2ZSBiZWVuIHRyYW5zbWl0dGVkIGZyb20gcmVzcG9uc2XigJlzXG4gICAgICAgICAgLy8gbWVzc2FnZSBib2R5LCB0aGVuOlxuXG4gICAgICAgICAgLy8gIDEuIExldCBieXRlcyBiZSB0aGUgdHJhbnNtaXR0ZWQgYnl0ZXMuXG4gICAgICAgICAgY29uc3QgYnl0ZXMgPSBjaHVua1xuXG4gICAgICAgICAgLy8gIDIuIExldCBjb2RpbmdzIGJlIHRoZSByZXN1bHQgb2YgZXh0cmFjdGluZyBoZWFkZXIgbGlzdCB2YWx1ZXNcbiAgICAgICAgICAvLyAgZ2l2ZW4gYENvbnRlbnQtRW5jb2RpbmdgIGFuZCByZXNwb25zZeKAmXMgaGVhZGVyIGxpc3QuXG4gICAgICAgICAgLy8gIFNlZSBwdWxsQWxnb3JpdGhtLlxuXG4gICAgICAgICAgLy8gIDMuIEluY3JlYXNlIHRpbWluZ0luZm/igJlzIGVuY29kZWQgYm9keSBzaXplIGJ5IGJ5dGVz4oCZcyBsZW5ndGguXG4gICAgICAgICAgdGltaW5nSW5mby5lbmNvZGVkQm9keVNpemUgKz0gYnl0ZXMuYnl0ZUxlbmd0aFxuXG4gICAgICAgICAgLy8gIDQuIFNlZSBwdWxsQWxnb3JpdGhtLi4uXG5cbiAgICAgICAgICByZXR1cm4gdGhpcy5ib2R5LnB1c2goYnl0ZXMpXG4gICAgICAgIH0sXG5cbiAgICAgICAgb25Db21wbGV0ZSAoKSB7XG4gICAgICAgICAgaWYgKHRoaXMuYWJvcnQpIHtcbiAgICAgICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIub2ZmKCd0ZXJtaW5hdGVkJywgdGhpcy5hYm9ydClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmVuZGVkID0gdHJ1ZVxuXG4gICAgICAgICAgdGhpcy5ib2R5LnB1c2gobnVsbClcbiAgICAgICAgfSxcblxuICAgICAgICBvbkVycm9yIChlcnJvcikge1xuICAgICAgICAgIGlmICh0aGlzLmFib3J0KSB7XG4gICAgICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLm9mZigndGVybWluYXRlZCcsIHRoaXMuYWJvcnQpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5ib2R5Py5kZXN0cm95KGVycm9yKVxuXG4gICAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci50ZXJtaW5hdGUoZXJyb3IpXG5cbiAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgIH0sXG5cbiAgICAgICAgb25VcGdyYWRlIChzdGF0dXMsIGhlYWRlcnNMaXN0LCBzb2NrZXQpIHtcbiAgICAgICAgICBpZiAoc3RhdHVzICE9PSAxMDEpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSGVhZGVycygpXG5cbiAgICAgICAgICBmb3IgKGxldCBuID0gMDsgbiA8IGhlYWRlcnNMaXN0Lmxlbmd0aDsgbiArPSAyKSB7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBoZWFkZXJzTGlzdFtuICsgMF0udG9TdHJpbmcoJ2xhdGluMScpXG4gICAgICAgICAgICBjb25zdCB2YWwgPSBoZWFkZXJzTGlzdFtuICsgMV0udG9TdHJpbmcoJ2xhdGluMScpXG5cbiAgICAgICAgICAgIGhlYWRlcnNba0hlYWRlcnNMaXN0XS5hcHBlbmQoa2V5LCB2YWwpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgICBzdGF0dXNUZXh0OiBTVEFUVVNfQ09ERVNbc3RhdHVzXSxcbiAgICAgICAgICAgIGhlYWRlcnNMaXN0OiBoZWFkZXJzW2tIZWFkZXJzTGlzdF0sXG4gICAgICAgICAgICBzb2NrZXRcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICkpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGZldGNoLFxuICBGZXRjaCxcbiAgZmV0Y2hpbmcsXG4gIGZpbmFsaXplQW5kUmVwb3J0VGltaW5nXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAga1N0YXRlOiBTeW1ib2woJ0ZpbGVSZWFkZXIgc3RhdGUnKSxcbiAga1Jlc3VsdDogU3ltYm9sKCdGaWxlUmVhZGVyIHJlc3VsdCcpLFxuICBrRXJyb3I6IFN5bWJvbCgnRmlsZVJlYWRlciBlcnJvcicpLFxuICBrTGFzdFByb2dyZXNzRXZlbnRGaXJlZDogU3ltYm9sKCdGaWxlUmVhZGVyIGxhc3QgcHJvZ3Jlc3MgZXZlbnQgZmlyZWQgdGltZXN0YW1wJyksXG4gIGtFdmVudHM6IFN5bWJvbCgnRmlsZVJlYWRlciBldmVudHMnKSxcbiAga0Fib3J0ZWQ6IFN5bWJvbCgnRmlsZVJlYWRlciBhYm9ydGVkJylcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuLi9mZXRjaC93ZWJpZGwnKVxuXG5jb25zdCBrU3RhdGUgPSBTeW1ib2woJ1Byb2dyZXNzRXZlbnQgc3RhdGUnKVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly94aHIuc3BlYy53aGF0d2cub3JnLyNwcm9ncmVzc2V2ZW50XG4gKi9cbmNsYXNzIFByb2dyZXNzRXZlbnQgZXh0ZW5kcyBFdmVudCB7XG4gIGNvbnN0cnVjdG9yICh0eXBlLCBldmVudEluaXREaWN0ID0ge30pIHtcbiAgICB0eXBlID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKHR5cGUpXG4gICAgZXZlbnRJbml0RGljdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlByb2dyZXNzRXZlbnRJbml0KGV2ZW50SW5pdERpY3QgPz8ge30pXG5cbiAgICBzdXBlcih0eXBlLCBldmVudEluaXREaWN0KVxuXG4gICAgdGhpc1trU3RhdGVdID0ge1xuICAgICAgbGVuZ3RoQ29tcHV0YWJsZTogZXZlbnRJbml0RGljdC5sZW5ndGhDb21wdXRhYmxlLFxuICAgICAgbG9hZGVkOiBldmVudEluaXREaWN0LmxvYWRlZCxcbiAgICAgIHRvdGFsOiBldmVudEluaXREaWN0LnRvdGFsXG4gICAgfVxuICB9XG5cbiAgZ2V0IGxlbmd0aENvbXB1dGFibGUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFByb2dyZXNzRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmxlbmd0aENvbXB1dGFibGVcbiAgfVxuXG4gIGdldCBsb2FkZWQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFByb2dyZXNzRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmxvYWRlZFxuICB9XG5cbiAgZ2V0IHRvdGFsICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBQcm9ncmVzc0V2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS50b3RhbFxuICB9XG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLlByb2dyZXNzRXZlbnRJbml0ID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICB7XG4gICAga2V5OiAnbGVuZ3RoQ29tcHV0YWJsZScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2VcbiAgfSxcbiAge1xuICAgIGtleTogJ2xvYWRlZCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgbG9uZyBsb25nJ10sXG4gICAgZGVmYXVsdFZhbHVlOiAwXG4gIH0sXG4gIHtcbiAgICBrZXk6ICd0b3RhbCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgbG9uZyBsb25nJ10sXG4gICAgZGVmYXVsdFZhbHVlOiAwXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdidWJibGVzJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4sXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZVxuICB9LFxuICB7XG4gICAga2V5OiAnY2FuY2VsYWJsZScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2VcbiAgfSxcbiAge1xuICAgIGtleTogJ2NvbXBvc2VkJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4sXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZVxuICB9XG5dKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgUHJvZ3Jlc3NFdmVudFxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZW5jb2Rpbmcuc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWVuY29kaW5nLWdldFxuICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSBsYWJlbFxuICovXG5mdW5jdGlvbiBnZXRFbmNvZGluZyAobGFiZWwpIHtcbiAgaWYgKCFsYWJlbCkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIC8vIDEuIFJlbW92ZSBhbnkgbGVhZGluZyBhbmQgdHJhaWxpbmcgQVNDSUkgd2hpdGVzcGFjZSBmcm9tIGxhYmVsLlxuICAvLyAyLiBJZiBsYWJlbCBpcyBhbiBBU0NJSSBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvciBhbnkgb2YgdGhlXG4gIC8vICAgIGxhYmVscyBsaXN0ZWQgaW4gdGhlIHRhYmxlIGJlbG93LCB0aGVuIHJldHVybiB0aGVcbiAgLy8gICAgY29ycmVzcG9uZGluZyBlbmNvZGluZzsgb3RoZXJ3aXNlIHJldHVybiBmYWlsdXJlLlxuICBzd2l0Y2ggKGxhYmVsLnRyaW0oKS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgY2FzZSAndW5pY29kZS0xLTEtdXRmLTgnOlxuICAgIGNhc2UgJ3VuaWNvZGUxMXV0ZjgnOlxuICAgIGNhc2UgJ3VuaWNvZGUyMHV0ZjgnOlxuICAgIGNhc2UgJ3V0Zi04JzpcbiAgICBjYXNlICd1dGY4JzpcbiAgICBjYXNlICd4LXVuaWNvZGUyMHV0ZjgnOlxuICAgICAgcmV0dXJuICdVVEYtOCdcbiAgICBjYXNlICc4NjYnOlxuICAgIGNhc2UgJ2NwODY2JzpcbiAgICBjYXNlICdjc2libTg2Nic6XG4gICAgY2FzZSAnaWJtODY2JzpcbiAgICAgIHJldHVybiAnSUJNODY2J1xuICAgIGNhc2UgJ2NzaXNvbGF0aW4yJzpcbiAgICBjYXNlICdpc28tODg1OS0yJzpcbiAgICBjYXNlICdpc28taXItMTAxJzpcbiAgICBjYXNlICdpc284ODU5LTInOlxuICAgIGNhc2UgJ2lzbzg4NTkyJzpcbiAgICBjYXNlICdpc29fODg1OS0yJzpcbiAgICBjYXNlICdpc29fODg1OS0yOjE5ODcnOlxuICAgIGNhc2UgJ2wyJzpcbiAgICBjYXNlICdsYXRpbjInOlxuICAgICAgcmV0dXJuICdJU08tODg1OS0yJ1xuICAgIGNhc2UgJ2NzaXNvbGF0aW4zJzpcbiAgICBjYXNlICdpc28tODg1OS0zJzpcbiAgICBjYXNlICdpc28taXItMTA5JzpcbiAgICBjYXNlICdpc284ODU5LTMnOlxuICAgIGNhc2UgJ2lzbzg4NTkzJzpcbiAgICBjYXNlICdpc29fODg1OS0zJzpcbiAgICBjYXNlICdpc29fODg1OS0zOjE5ODgnOlxuICAgIGNhc2UgJ2wzJzpcbiAgICBjYXNlICdsYXRpbjMnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS0zJ1xuICAgIGNhc2UgJ2NzaXNvbGF0aW40JzpcbiAgICBjYXNlICdpc28tODg1OS00JzpcbiAgICBjYXNlICdpc28taXItMTEwJzpcbiAgICBjYXNlICdpc284ODU5LTQnOlxuICAgIGNhc2UgJ2lzbzg4NTk0JzpcbiAgICBjYXNlICdpc29fODg1OS00JzpcbiAgICBjYXNlICdpc29fODg1OS00OjE5ODgnOlxuICAgIGNhc2UgJ2w0JzpcbiAgICBjYXNlICdsYXRpbjQnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS00J1xuICAgIGNhc2UgJ2NzaXNvbGF0aW5jeXJpbGxpYyc6XG4gICAgY2FzZSAnY3lyaWxsaWMnOlxuICAgIGNhc2UgJ2lzby04ODU5LTUnOlxuICAgIGNhc2UgJ2lzby1pci0xNDQnOlxuICAgIGNhc2UgJ2lzbzg4NTktNSc6XG4gICAgY2FzZSAnaXNvODg1OTUnOlxuICAgIGNhc2UgJ2lzb184ODU5LTUnOlxuICAgIGNhc2UgJ2lzb184ODU5LTU6MTk4OCc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTUnXG4gICAgY2FzZSAnYXJhYmljJzpcbiAgICBjYXNlICdhc21vLTcwOCc6XG4gICAgY2FzZSAnY3Npc284ODU5NmUnOlxuICAgIGNhc2UgJ2NzaXNvODg1OTZpJzpcbiAgICBjYXNlICdjc2lzb2xhdGluYXJhYmljJzpcbiAgICBjYXNlICdlY21hLTExNCc6XG4gICAgY2FzZSAnaXNvLTg4NTktNic6XG4gICAgY2FzZSAnaXNvLTg4NTktNi1lJzpcbiAgICBjYXNlICdpc28tODg1OS02LWknOlxuICAgIGNhc2UgJ2lzby1pci0xMjcnOlxuICAgIGNhc2UgJ2lzbzg4NTktNic6XG4gICAgY2FzZSAnaXNvODg1OTYnOlxuICAgIGNhc2UgJ2lzb184ODU5LTYnOlxuICAgIGNhc2UgJ2lzb184ODU5LTY6MTk4Nyc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTYnXG4gICAgY2FzZSAnY3Npc29sYXRpbmdyZWVrJzpcbiAgICBjYXNlICdlY21hLTExOCc6XG4gICAgY2FzZSAnZWxvdF85MjgnOlxuICAgIGNhc2UgJ2dyZWVrJzpcbiAgICBjYXNlICdncmVlazgnOlxuICAgIGNhc2UgJ2lzby04ODU5LTcnOlxuICAgIGNhc2UgJ2lzby1pci0xMjYnOlxuICAgIGNhc2UgJ2lzbzg4NTktNyc6XG4gICAgY2FzZSAnaXNvODg1OTcnOlxuICAgIGNhc2UgJ2lzb184ODU5LTcnOlxuICAgIGNhc2UgJ2lzb184ODU5LTc6MTk4Nyc6XG4gICAgY2FzZSAnc3VuX2V1X2dyZWVrJzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktNydcbiAgICBjYXNlICdjc2lzbzg4NTk4ZSc6XG4gICAgY2FzZSAnY3Npc29sYXRpbmhlYnJldyc6XG4gICAgY2FzZSAnaGVicmV3JzpcbiAgICBjYXNlICdpc28tODg1OS04JzpcbiAgICBjYXNlICdpc28tODg1OS04LWUnOlxuICAgIGNhc2UgJ2lzby1pci0xMzgnOlxuICAgIGNhc2UgJ2lzbzg4NTktOCc6XG4gICAgY2FzZSAnaXNvODg1OTgnOlxuICAgIGNhc2UgJ2lzb184ODU5LTgnOlxuICAgIGNhc2UgJ2lzb184ODU5LTg6MTk4OCc6XG4gICAgY2FzZSAndmlzdWFsJzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktOCdcbiAgICBjYXNlICdjc2lzbzg4NTk4aSc6XG4gICAgY2FzZSAnaXNvLTg4NTktOC1pJzpcbiAgICBjYXNlICdsb2dpY2FsJzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktOC1JJ1xuICAgIGNhc2UgJ2NzaXNvbGF0aW42JzpcbiAgICBjYXNlICdpc28tODg1OS0xMCc6XG4gICAgY2FzZSAnaXNvLWlyLTE1Nyc6XG4gICAgY2FzZSAnaXNvODg1OS0xMCc6XG4gICAgY2FzZSAnaXNvODg1OTEwJzpcbiAgICBjYXNlICdsNic6XG4gICAgY2FzZSAnbGF0aW42JzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktMTAnXG4gICAgY2FzZSAnaXNvLTg4NTktMTMnOlxuICAgIGNhc2UgJ2lzbzg4NTktMTMnOlxuICAgIGNhc2UgJ2lzbzg4NTkxMyc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTEzJ1xuICAgIGNhc2UgJ2lzby04ODU5LTE0JzpcbiAgICBjYXNlICdpc284ODU5LTE0JzpcbiAgICBjYXNlICdpc284ODU5MTQnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS0xNCdcbiAgICBjYXNlICdjc2lzb2xhdGluOSc6XG4gICAgY2FzZSAnaXNvLTg4NTktMTUnOlxuICAgIGNhc2UgJ2lzbzg4NTktMTUnOlxuICAgIGNhc2UgJ2lzbzg4NTkxNSc6XG4gICAgY2FzZSAnaXNvXzg4NTktMTUnOlxuICAgIGNhc2UgJ2w5JzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktMTUnXG4gICAgY2FzZSAnaXNvLTg4NTktMTYnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS0xNidcbiAgICBjYXNlICdjc2tvaThyJzpcbiAgICBjYXNlICdrb2knOlxuICAgIGNhc2UgJ2tvaTgnOlxuICAgIGNhc2UgJ2tvaTgtcic6XG4gICAgY2FzZSAna29pOF9yJzpcbiAgICAgIHJldHVybiAnS09JOC1SJ1xuICAgIGNhc2UgJ2tvaTgtcnUnOlxuICAgIGNhc2UgJ2tvaTgtdSc6XG4gICAgICByZXR1cm4gJ0tPSTgtVSdcbiAgICBjYXNlICdjc21hY2ludG9zaCc6XG4gICAgY2FzZSAnbWFjJzpcbiAgICBjYXNlICdtYWNpbnRvc2gnOlxuICAgIGNhc2UgJ3gtbWFjLXJvbWFuJzpcbiAgICAgIHJldHVybiAnbWFjaW50b3NoJ1xuICAgIGNhc2UgJ2lzby04ODU5LTExJzpcbiAgICBjYXNlICdpc284ODU5LTExJzpcbiAgICBjYXNlICdpc284ODU5MTEnOlxuICAgIGNhc2UgJ3Rpcy02MjAnOlxuICAgIGNhc2UgJ3dpbmRvd3MtODc0JzpcbiAgICAgIHJldHVybiAnd2luZG93cy04NzQnXG4gICAgY2FzZSAnY3AxMjUwJzpcbiAgICBjYXNlICd3aW5kb3dzLTEyNTAnOlxuICAgIGNhc2UgJ3gtY3AxMjUwJzpcbiAgICAgIHJldHVybiAnd2luZG93cy0xMjUwJ1xuICAgIGNhc2UgJ2NwMTI1MSc6XG4gICAgY2FzZSAnd2luZG93cy0xMjUxJzpcbiAgICBjYXNlICd4LWNwMTI1MSc6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtMTI1MSdcbiAgICBjYXNlICdhbnNpX3gzLjQtMTk2OCc6XG4gICAgY2FzZSAnYXNjaWknOlxuICAgIGNhc2UgJ2NwMTI1Mic6XG4gICAgY2FzZSAnY3A4MTknOlxuICAgIGNhc2UgJ2NzaXNvbGF0aW4xJzpcbiAgICBjYXNlICdpYm04MTknOlxuICAgIGNhc2UgJ2lzby04ODU5LTEnOlxuICAgIGNhc2UgJ2lzby1pci0xMDAnOlxuICAgIGNhc2UgJ2lzbzg4NTktMSc6XG4gICAgY2FzZSAnaXNvODg1OTEnOlxuICAgIGNhc2UgJ2lzb184ODU5LTEnOlxuICAgIGNhc2UgJ2lzb184ODU5LTE6MTk4Nyc6XG4gICAgY2FzZSAnbDEnOlxuICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgY2FzZSAndXMtYXNjaWknOlxuICAgIGNhc2UgJ3dpbmRvd3MtMTI1Mic6XG4gICAgY2FzZSAneC1jcDEyNTInOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTEyNTInXG4gICAgY2FzZSAnY3AxMjUzJzpcbiAgICBjYXNlICd3aW5kb3dzLTEyNTMnOlxuICAgIGNhc2UgJ3gtY3AxMjUzJzpcbiAgICAgIHJldHVybiAnd2luZG93cy0xMjUzJ1xuICAgIGNhc2UgJ2NwMTI1NCc6XG4gICAgY2FzZSAnY3Npc29sYXRpbjUnOlxuICAgIGNhc2UgJ2lzby04ODU5LTknOlxuICAgIGNhc2UgJ2lzby1pci0xNDgnOlxuICAgIGNhc2UgJ2lzbzg4NTktOSc6XG4gICAgY2FzZSAnaXNvODg1OTknOlxuICAgIGNhc2UgJ2lzb184ODU5LTknOlxuICAgIGNhc2UgJ2lzb184ODU5LTk6MTk4OSc6XG4gICAgY2FzZSAnbDUnOlxuICAgIGNhc2UgJ2xhdGluNSc6XG4gICAgY2FzZSAnd2luZG93cy0xMjU0JzpcbiAgICBjYXNlICd4LWNwMTI1NCc6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtMTI1NCdcbiAgICBjYXNlICdjcDEyNTUnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMTI1NSc6XG4gICAgY2FzZSAneC1jcDEyNTUnOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTEyNTUnXG4gICAgY2FzZSAnY3AxMjU2JzpcbiAgICBjYXNlICd3aW5kb3dzLTEyNTYnOlxuICAgIGNhc2UgJ3gtY3AxMjU2JzpcbiAgICAgIHJldHVybiAnd2luZG93cy0xMjU2J1xuICAgIGNhc2UgJ2NwMTI1Nyc6XG4gICAgY2FzZSAnd2luZG93cy0xMjU3JzpcbiAgICBjYXNlICd4LWNwMTI1Nyc6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtMTI1NydcbiAgICBjYXNlICdjcDEyNTgnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMTI1OCc6XG4gICAgY2FzZSAneC1jcDEyNTgnOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTEyNTgnXG4gICAgY2FzZSAneC1tYWMtY3lyaWxsaWMnOlxuICAgIGNhc2UgJ3gtbWFjLXVrcmFpbmlhbic6XG4gICAgICByZXR1cm4gJ3gtbWFjLWN5cmlsbGljJ1xuICAgIGNhc2UgJ2NoaW5lc2UnOlxuICAgIGNhc2UgJ2NzZ2IyMzEyJzpcbiAgICBjYXNlICdjc2lzbzU4Z2IyMzEyODAnOlxuICAgIGNhc2UgJ2diMjMxMic6XG4gICAgY2FzZSAnZ2JfMjMxMic6XG4gICAgY2FzZSAnZ2JfMjMxMi04MCc6XG4gICAgY2FzZSAnZ2JrJzpcbiAgICBjYXNlICdpc28taXItNTgnOlxuICAgIGNhc2UgJ3gtZ2JrJzpcbiAgICAgIHJldHVybiAnR0JLJ1xuICAgIGNhc2UgJ2diMTgwMzAnOlxuICAgICAgcmV0dXJuICdnYjE4MDMwJ1xuICAgIGNhc2UgJ2JpZzUnOlxuICAgIGNhc2UgJ2JpZzUtaGtzY3MnOlxuICAgIGNhc2UgJ2NuLWJpZzUnOlxuICAgIGNhc2UgJ2NzYmlnNSc6XG4gICAgY2FzZSAneC14LWJpZzUnOlxuICAgICAgcmV0dXJuICdCaWc1J1xuICAgIGNhc2UgJ2NzZXVjcGtkZm10amFwYW5lc2UnOlxuICAgIGNhc2UgJ2V1Yy1qcCc6XG4gICAgY2FzZSAneC1ldWMtanAnOlxuICAgICAgcmV0dXJuICdFVUMtSlAnXG4gICAgY2FzZSAnY3Npc28yMDIyanAnOlxuICAgIGNhc2UgJ2lzby0yMDIyLWpwJzpcbiAgICAgIHJldHVybiAnSVNPLTIwMjItSlAnXG4gICAgY2FzZSAnY3NzaGlmdGppcyc6XG4gICAgY2FzZSAnbXM5MzInOlxuICAgIGNhc2UgJ21zX2thbmppJzpcbiAgICBjYXNlICdzaGlmdC1qaXMnOlxuICAgIGNhc2UgJ3NoaWZ0X2ppcyc6XG4gICAgY2FzZSAnc2ppcyc6XG4gICAgY2FzZSAnd2luZG93cy0zMWonOlxuICAgIGNhc2UgJ3gtc2ppcyc6XG4gICAgICByZXR1cm4gJ1NoaWZ0X0pJUydcbiAgICBjYXNlICdjc2V1Y2tyJzpcbiAgICBjYXNlICdjc2tzYzU2MDExOTg3JzpcbiAgICBjYXNlICdldWMta3InOlxuICAgIGNhc2UgJ2lzby1pci0xNDknOlxuICAgIGNhc2UgJ2tvcmVhbic6XG4gICAgY2FzZSAna3NfY181NjAxLTE5ODcnOlxuICAgIGNhc2UgJ2tzX2NfNTYwMS0xOTg5JzpcbiAgICBjYXNlICdrc2M1NjAxJzpcbiAgICBjYXNlICdrc2NfNTYwMSc6XG4gICAgY2FzZSAnd2luZG93cy05NDknOlxuICAgICAgcmV0dXJuICdFVUMtS1InXG4gICAgY2FzZSAnY3Npc28yMDIya3InOlxuICAgIGNhc2UgJ2h6LWdiLTIzMTInOlxuICAgIGNhc2UgJ2lzby0yMDIyLWNuJzpcbiAgICBjYXNlICdpc28tMjAyMi1jbi1leHQnOlxuICAgIGNhc2UgJ2lzby0yMDIyLWtyJzpcbiAgICBjYXNlICdyZXBsYWNlbWVudCc6XG4gICAgICByZXR1cm4gJ3JlcGxhY2VtZW50J1xuICAgIGNhc2UgJ3VuaWNvZGVmZmZlJzpcbiAgICBjYXNlICd1dGYtMTZiZSc6XG4gICAgICByZXR1cm4gJ1VURi0xNkJFJ1xuICAgIGNhc2UgJ2NzdW5pY29kZSc6XG4gICAgY2FzZSAnaXNvLTEwNjQ2LXVjcy0yJzpcbiAgICBjYXNlICd1Y3MtMic6XG4gICAgY2FzZSAndW5pY29kZSc6XG4gICAgY2FzZSAndW5pY29kZWZlZmYnOlxuICAgIGNhc2UgJ3V0Zi0xNic6XG4gICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgcmV0dXJuICdVVEYtMTZMRSdcbiAgICBjYXNlICd4LXVzZXItZGVmaW5lZCc6XG4gICAgICByZXR1cm4gJ3gtdXNlci1kZWZpbmVkJ1xuICAgIGRlZmF1bHQ6IHJldHVybiAnZmFpbHVyZSdcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0RW5jb2Rpbmdcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHtcbiAga1N0YXRlLFxuICBrRXJyb3IsXG4gIGtSZXN1bHQsXG4gIGtBYm9ydGVkLFxuICBrTGFzdFByb2dyZXNzRXZlbnRGaXJlZFxufSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IFByb2dyZXNzRXZlbnQgfSA9IHJlcXVpcmUoJy4vcHJvZ3Jlc3NldmVudCcpXG5jb25zdCB7IGdldEVuY29kaW5nIH0gPSByZXF1aXJlKCcuL2VuY29kaW5nJylcbmNvbnN0IHsgRE9NRXhjZXB0aW9uIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9jb25zdGFudHMnKVxuY29uc3QgeyBzZXJpYWxpemVBTWltZVR5cGUsIHBhcnNlTUlNRVR5cGUgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2RhdGFVUkwnKVxuY29uc3QgeyB0eXBlcyB9ID0gcmVxdWlyZSgndXRpbCcpXG5jb25zdCB7IFN0cmluZ0RlY29kZXIgfSA9IHJlcXVpcmUoJ3N0cmluZ19kZWNvZGVyJylcbmNvbnN0IHsgYnRvYSB9ID0gcmVxdWlyZSgnYnVmZmVyJylcblxuLyoqIEB0eXBlIHtQcm9wZXJ0eURlc2NyaXB0b3J9ICovXG5jb25zdCBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzID0ge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICB3cml0YWJsZTogZmFsc2UsXG4gIGNvbmZpZ3VyYWJsZTogZmFsc2Vcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNyZWFkT3BlcmF0aW9uXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9maWxlcmVhZGVyJykuRmlsZVJlYWRlcn0gZnJcbiAqIEBwYXJhbSB7aW1wb3J0KCdidWZmZXInKS5CbG9ifSBibG9iXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtzdHJpbmc/fSBlbmNvZGluZ05hbWVcbiAqL1xuZnVuY3Rpb24gcmVhZE9wZXJhdGlvbiAoZnIsIGJsb2IsIHR5cGUsIGVuY29kaW5nTmFtZSkge1xuICAvLyAxLiBJZiBmcuKAmXMgc3RhdGUgaXMgXCJsb2FkaW5nXCIsIHRocm93IGFuIEludmFsaWRTdGF0ZUVycm9yXG4gIC8vICAgIERPTUV4Y2VwdGlvbi5cbiAgaWYgKGZyW2tTdGF0ZV0gPT09ICdsb2FkaW5nJykge1xuICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oJ0ludmFsaWQgc3RhdGUnLCAnSW52YWxpZFN0YXRlRXJyb3InKVxuICB9XG5cbiAgLy8gMi4gU2V0IGZy4oCZcyBzdGF0ZSB0byBcImxvYWRpbmdcIi5cbiAgZnJba1N0YXRlXSA9ICdsb2FkaW5nJ1xuXG4gIC8vIDMuIFNldCBmcuKAmXMgcmVzdWx0IHRvIG51bGwuXG4gIGZyW2tSZXN1bHRdID0gbnVsbFxuXG4gIC8vIDQuIFNldCBmcuKAmXMgZXJyb3IgdG8gbnVsbC5cbiAgZnJba0Vycm9yXSA9IG51bGxcblxuICAvLyA1LiBMZXQgc3RyZWFtIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyBnZXQgc3RyZWFtIG9uIGJsb2IuXG4gIC8qKiBAdHlwZSB7aW1wb3J0KCdzdHJlYW0vd2ViJykuUmVhZGFibGVTdHJlYW19ICovXG4gIGNvbnN0IHN0cmVhbSA9IGJsb2Iuc3RyZWFtKClcblxuICAvLyA2LiBMZXQgcmVhZGVyIGJlIHRoZSByZXN1bHQgb2YgZ2V0dGluZyBhIHJlYWRlciBmcm9tIHN0cmVhbS5cbiAgY29uc3QgcmVhZGVyID0gc3RyZWFtLmdldFJlYWRlcigpXG5cbiAgLy8gNy4gTGV0IGJ5dGVzIGJlIGFuIGVtcHR5IGJ5dGUgc2VxdWVuY2UuXG4gIC8qKiBAdHlwZSB7VWludDhBcnJheVtdfSAqL1xuICBjb25zdCBieXRlcyA9IFtdXG5cbiAgLy8gOC4gTGV0IGNodW5rUHJvbWlzZSBiZSB0aGUgcmVzdWx0IG9mIHJlYWRpbmcgYSBjaHVuayBmcm9tXG4gIC8vICAgIHN0cmVhbSB3aXRoIHJlYWRlci5cbiAgbGV0IGNodW5rUHJvbWlzZSA9IHJlYWRlci5yZWFkKClcblxuICAvLyA5LiBMZXQgaXNGaXJzdENodW5rIGJlIHRydWUuXG4gIGxldCBpc0ZpcnN0Q2h1bmsgPSB0cnVlXG5cbiAgLy8gMTAuIEluIHBhcmFsbGVsLCB3aGlsZSB0cnVlOlxuICAvLyBOb3RlOiBcIkluIHBhcmFsbGVsXCIganVzdCBtZWFucyBub24tYmxvY2tpbmdcbiAgLy8gTm90ZSAyOiByZWFkT3BlcmF0aW9uIGl0c2VsZiBjYW5ub3QgYmUgYXN5bmMgYXMgZG91YmxlXG4gIC8vIHJlYWRpbmcgdGhlIGJvZHkgd291bGQgdGhlbiByZWplY3QgdGhlIHByb21pc2UsIGluc3RlYWRcbiAgLy8gb2YgdGhyb3dpbmcgYW4gZXJyb3IuXG4gIDsoYXN5bmMgKCkgPT4ge1xuICAgIHdoaWxlICghZnJba0Fib3J0ZWRdKSB7XG4gICAgICAvLyAxLiBXYWl0IGZvciBjaHVua1Byb21pc2UgdG8gYmUgZnVsZmlsbGVkIG9yIHJlamVjdGVkLlxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgeyBkb25lLCB2YWx1ZSB9ID0gYXdhaXQgY2h1bmtQcm9taXNlXG5cbiAgICAgICAgLy8gMi4gSWYgY2h1bmtQcm9taXNlIGlzIGZ1bGZpbGxlZCwgYW5kIGlzRmlyc3RDaHVuayBpc1xuICAgICAgICAvLyAgICB0cnVlLCBxdWV1ZSBhIHRhc2sgdG8gZmlyZSBhIHByb2dyZXNzIGV2ZW50IGNhbGxlZFxuICAgICAgICAvLyAgICBsb2Fkc3RhcnQgYXQgZnIuXG4gICAgICAgIGlmIChpc0ZpcnN0Q2h1bmsgJiYgIWZyW2tBYm9ydGVkXSkge1xuICAgICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgnbG9hZHN0YXJ0JywgZnIpXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDMuIFNldCBpc0ZpcnN0Q2h1bmsgdG8gZmFsc2UuXG4gICAgICAgIGlzRmlyc3RDaHVuayA9IGZhbHNlXG5cbiAgICAgICAgLy8gNC4gSWYgY2h1bmtQcm9taXNlIGlzIGZ1bGZpbGxlZCB3aXRoIGFuIG9iamVjdCB3aG9zZVxuICAgICAgICAvLyAgICBkb25lIHByb3BlcnR5IGlzIGZhbHNlIGFuZCB3aG9zZSB2YWx1ZSBwcm9wZXJ0eSBpc1xuICAgICAgICAvLyAgICBhIFVpbnQ4QXJyYXkgb2JqZWN0LCBydW4gdGhlc2Ugc3RlcHM6XG4gICAgICAgIGlmICghZG9uZSAmJiB0eXBlcy5pc1VpbnQ4QXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgLy8gMS4gTGV0IGJzIGJlIHRoZSBieXRlIHNlcXVlbmNlIHJlcHJlc2VudGVkIGJ5IHRoZVxuICAgICAgICAgIC8vICAgIFVpbnQ4QXJyYXkgb2JqZWN0LlxuXG4gICAgICAgICAgLy8gMi4gQXBwZW5kIGJzIHRvIGJ5dGVzLlxuICAgICAgICAgIGJ5dGVzLnB1c2godmFsdWUpXG5cbiAgICAgICAgICAvLyAzLiBJZiByb3VnaGx5IDUwbXMgaGF2ZSBwYXNzZWQgc2luY2UgdGhlc2Ugc3RlcHNcbiAgICAgICAgICAvLyAgICB3ZXJlIGxhc3QgaW52b2tlZCwgcXVldWUgYSB0YXNrIHRvIGZpcmUgYVxuICAgICAgICAgIC8vICAgIHByb2dyZXNzIGV2ZW50IGNhbGxlZCBwcm9ncmVzcyBhdCBmci5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAoXG4gICAgICAgICAgICAgIGZyW2tMYXN0UHJvZ3Jlc3NFdmVudEZpcmVkXSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICAgIERhdGUubm93KCkgLSBmcltrTGFzdFByb2dyZXNzRXZlbnRGaXJlZF0gPj0gNTBcbiAgICAgICAgICAgICkgJiZcbiAgICAgICAgICAgICFmcltrQWJvcnRlZF1cbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGZyW2tMYXN0UHJvZ3Jlc3NFdmVudEZpcmVkXSA9IERhdGUubm93KClcbiAgICAgICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgICAgICAgZmlyZUFQcm9ncmVzc0V2ZW50KCdwcm9ncmVzcycsIGZyKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyA0LiBTZXQgY2h1bmtQcm9taXNlIHRvIHRoZSByZXN1bHQgb2YgcmVhZGluZyBhXG4gICAgICAgICAgLy8gICAgY2h1bmsgZnJvbSBzdHJlYW0gd2l0aCByZWFkZXIuXG4gICAgICAgICAgY2h1bmtQcm9taXNlID0gcmVhZGVyLnJlYWQoKVxuICAgICAgICB9IGVsc2UgaWYgKGRvbmUpIHtcbiAgICAgICAgICAvLyA1LiBPdGhlcndpc2UsIGlmIGNodW5rUHJvbWlzZSBpcyBmdWxmaWxsZWQgd2l0aCBhblxuICAgICAgICAgIC8vICAgIG9iamVjdCB3aG9zZSBkb25lIHByb3BlcnR5IGlzIHRydWUsIHF1ZXVlIGEgdGFza1xuICAgICAgICAgIC8vICAgIHRvIHJ1biB0aGUgZm9sbG93aW5nIHN0ZXBzIGFuZCBhYm9ydCB0aGlzIGFsZ29yaXRobTpcbiAgICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgICAgICAvLyAxLiBTZXQgZnLigJlzIHN0YXRlIHRvIFwiZG9uZVwiLlxuICAgICAgICAgICAgZnJba1N0YXRlXSA9ICdkb25lJ1xuXG4gICAgICAgICAgICAvLyAyLiBMZXQgcmVzdWx0IGJlIHRoZSByZXN1bHQgb2YgcGFja2FnZSBkYXRhIGdpdmVuXG4gICAgICAgICAgICAvLyAgICBieXRlcywgdHlwZSwgYmxvYuKAmXMgdHlwZSwgYW5kIGVuY29kaW5nTmFtZS5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhY2thZ2VEYXRhKGJ5dGVzLCB0eXBlLCBibG9iLnR5cGUsIGVuY29kaW5nTmFtZSlcblxuICAgICAgICAgICAgICAvLyA0LiBFbHNlOlxuXG4gICAgICAgICAgICAgIGlmIChmcltrQWJvcnRlZF0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIC8vIDEuIFNldCBmcuKAmXMgcmVzdWx0IHRvIHJlc3VsdC5cbiAgICAgICAgICAgICAgZnJba1Jlc3VsdF0gPSByZXN1bHRcblxuICAgICAgICAgICAgICAvLyAyLiBGaXJlIGEgcHJvZ3Jlc3MgZXZlbnQgY2FsbGVkIGxvYWQgYXQgdGhlIGZyLlxuICAgICAgICAgICAgICBmaXJlQVByb2dyZXNzRXZlbnQoJ2xvYWQnLCBmcilcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIC8vIDMuIElmIHBhY2thZ2UgZGF0YSB0aHJldyBhbiBleGNlcHRpb24gZXJyb3I6XG5cbiAgICAgICAgICAgICAgLy8gMS4gU2V0IGZy4oCZcyBlcnJvciB0byBlcnJvci5cbiAgICAgICAgICAgICAgZnJba0Vycm9yXSA9IGVycm9yXG5cbiAgICAgICAgICAgICAgLy8gMi4gRmlyZSBhIHByb2dyZXNzIGV2ZW50IGNhbGxlZCBlcnJvciBhdCBmci5cbiAgICAgICAgICAgICAgZmlyZUFQcm9ncmVzc0V2ZW50KCdlcnJvcicsIGZyKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyA1LiBJZiBmcuKAmXMgc3RhdGUgaXMgbm90IFwibG9hZGluZ1wiLCBmaXJlIGEgcHJvZ3Jlc3NcbiAgICAgICAgICAgIC8vICAgIGV2ZW50IGNhbGxlZCBsb2FkZW5kIGF0IHRoZSBmci5cbiAgICAgICAgICAgIGlmIChmcltrU3RhdGVdICE9PSAnbG9hZGluZycpIHtcbiAgICAgICAgICAgICAgZmlyZUFQcm9ncmVzc0V2ZW50KCdsb2FkZW5kJywgZnIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcblxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChmcltrQWJvcnRlZF0pIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDYuIE90aGVyd2lzZSwgaWYgY2h1bmtQcm9taXNlIGlzIHJlamVjdGVkIHdpdGggYW5cbiAgICAgICAgLy8gICAgZXJyb3IgZXJyb3IsIHF1ZXVlIGEgdGFzayB0byBydW4gdGhlIGZvbGxvd2luZ1xuICAgICAgICAvLyAgICBzdGVwcyBhbmQgYWJvcnQgdGhpcyBhbGdvcml0aG06XG4gICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgICAvLyAxLiBTZXQgZnLigJlzIHN0YXRlIHRvIFwiZG9uZVwiLlxuICAgICAgICAgIGZyW2tTdGF0ZV0gPSAnZG9uZSdcblxuICAgICAgICAgIC8vIDIuIFNldCBmcuKAmXMgZXJyb3IgdG8gZXJyb3IuXG4gICAgICAgICAgZnJba0Vycm9yXSA9IGVycm9yXG5cbiAgICAgICAgICAvLyAzLiBGaXJlIGEgcHJvZ3Jlc3MgZXZlbnQgY2FsbGVkIGVycm9yIGF0IGZyLlxuICAgICAgICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgnZXJyb3InLCBmcilcblxuICAgICAgICAgIC8vIDQuIElmIGZy4oCZcyBzdGF0ZSBpcyBub3QgXCJsb2FkaW5nXCIsIGZpcmUgYSBwcm9ncmVzc1xuICAgICAgICAgIC8vICAgIGV2ZW50IGNhbGxlZCBsb2FkZW5kIGF0IGZyLlxuICAgICAgICAgIGlmIChmcltrU3RhdGVdICE9PSAnbG9hZGluZycpIHtcbiAgICAgICAgICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgnbG9hZGVuZCcsIGZyKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgfSkoKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2ZpcmUtYS1wcm9ncmVzcy1ldmVudFxuICogQHNlZSBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtZXZlbnQtZmlyZVxuICogQHBhcmFtIHtzdHJpbmd9IGUgVGhlIG5hbWUgb2YgdGhlIGV2ZW50XG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9maWxlcmVhZGVyJykuRmlsZVJlYWRlcn0gcmVhZGVyXG4gKi9cbmZ1bmN0aW9uIGZpcmVBUHJvZ3Jlc3NFdmVudCAoZSwgcmVhZGVyKSB7XG4gIC8vIFRoZSBwcm9ncmVzcyBldmVudCBlIGRvZXMgbm90IGJ1YmJsZS4gZS5idWJibGVzIG11c3QgYmUgZmFsc2VcbiAgLy8gVGhlIHByb2dyZXNzIGV2ZW50IGUgaXMgTk9UIGNhbmNlbGFibGUuIGUuY2FuY2VsYWJsZSBtdXN0IGJlIGZhbHNlXG4gIGNvbnN0IGV2ZW50ID0gbmV3IFByb2dyZXNzRXZlbnQoZSwge1xuICAgIGJ1YmJsZXM6IGZhbHNlLFxuICAgIGNhbmNlbGFibGU6IGZhbHNlXG4gIH0pXG5cbiAgcmVhZGVyLmRpc3BhdGNoRXZlbnQoZXZlbnQpXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jYmxvYi1wYWNrYWdlLWRhdGFcbiAqIEBwYXJhbSB7VWludDhBcnJheVtdfSBieXRlc1xuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nP30gbWltZVR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nP30gZW5jb2RpbmdOYW1lXG4gKi9cbmZ1bmN0aW9uIHBhY2thZ2VEYXRhIChieXRlcywgdHlwZSwgbWltZVR5cGUsIGVuY29kaW5nTmFtZSkge1xuICAvLyAxLiBBIEJsb2IgaGFzIGFuIGFzc29jaWF0ZWQgcGFja2FnZSBkYXRhIGFsZ29yaXRobSwgZ2l2ZW5cbiAgLy8gICAgYnl0ZXMsIGEgdHlwZSwgYSBvcHRpb25hbCBtaW1lVHlwZSwgYW5kIGEgb3B0aW9uYWxcbiAgLy8gICAgZW5jb2RpbmdOYW1lLCB3aGljaCBzd2l0Y2hlcyBvbiB0eXBlIGFuZCBydW5zIHRoZVxuICAvLyAgICBhc3NvY2lhdGVkIHN0ZXBzOlxuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ0RhdGFVUkwnOiB7XG4gICAgICAvLyAxLiBSZXR1cm4gYnl0ZXMgYXMgYSBEYXRhVVJMIFtSRkMyMzk3XSBzdWJqZWN0IHRvXG4gICAgICAvLyAgICB0aGUgY29uc2lkZXJhdGlvbnMgYmVsb3c6XG4gICAgICAvLyAgKiBVc2UgbWltZVR5cGUgYXMgcGFydCBvZiB0aGUgRGF0YSBVUkwgaWYgaXQgaXNcbiAgICAgIC8vICAgIGF2YWlsYWJsZSBpbiBrZWVwaW5nIHdpdGggdGhlIERhdGEgVVJMXG4gICAgICAvLyAgICBzcGVjaWZpY2F0aW9uIFtSRkMyMzk3XS5cbiAgICAgIC8vICAqIElmIG1pbWVUeXBlIGlzIG5vdCBhdmFpbGFibGUgcmV0dXJuIGEgRGF0YSBVUkxcbiAgICAgIC8vICAgIHdpdGhvdXQgYSBtZWRpYS10eXBlLiBbUkZDMjM5N10uXG5cbiAgICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMjM5NyNzZWN0aW9uLTNcbiAgICAgIC8vIGRhdGF1cmwgICAgOj0gXCJkYXRhOlwiIFsgbWVkaWF0eXBlIF0gWyBcIjtiYXNlNjRcIiBdIFwiLFwiIGRhdGFcbiAgICAgIC8vIG1lZGlhdHlwZSAgOj0gWyB0eXBlIFwiL1wiIHN1YnR5cGUgXSAqKCBcIjtcIiBwYXJhbWV0ZXIgKVxuICAgICAgLy8gZGF0YSAgICAgICA6PSAqdXJsY2hhclxuICAgICAgLy8gcGFyYW1ldGVyICA6PSBhdHRyaWJ1dGUgXCI9XCIgdmFsdWVcbiAgICAgIGxldCBkYXRhVVJMID0gJ2RhdGE6J1xuXG4gICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZU1JTUVUeXBlKG1pbWVUeXBlIHx8ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nKVxuXG4gICAgICBpZiAocGFyc2VkICE9PSAnZmFpbHVyZScpIHtcbiAgICAgICAgZGF0YVVSTCArPSBzZXJpYWxpemVBTWltZVR5cGUocGFyc2VkKVxuICAgICAgfVxuXG4gICAgICBkYXRhVVJMICs9ICc7YmFzZTY0LCdcblxuICAgICAgY29uc3QgZGVjb2RlciA9IG5ldyBTdHJpbmdEZWNvZGVyKCdsYXRpbjEnKVxuXG4gICAgICBmb3IgKGNvbnN0IGNodW5rIG9mIGJ5dGVzKSB7XG4gICAgICAgIGRhdGFVUkwgKz0gYnRvYShkZWNvZGVyLndyaXRlKGNodW5rKSlcbiAgICAgIH1cblxuICAgICAgZGF0YVVSTCArPSBidG9hKGRlY29kZXIuZW5kKCkpXG5cbiAgICAgIHJldHVybiBkYXRhVVJMXG4gICAgfVxuICAgIGNhc2UgJ1RleHQnOiB7XG4gICAgICAvLyAxLiBMZXQgZW5jb2RpbmcgYmUgZmFpbHVyZVxuICAgICAgbGV0IGVuY29kaW5nID0gJ2ZhaWx1cmUnXG5cbiAgICAgIC8vIDIuIElmIHRoZSBlbmNvZGluZ05hbWUgaXMgcHJlc2VudCwgc2V0IGVuY29kaW5nIHRvIHRoZVxuICAgICAgLy8gICAgcmVzdWx0IG9mIGdldHRpbmcgYW4gZW5jb2RpbmcgZnJvbSBlbmNvZGluZ05hbWUuXG4gICAgICBpZiAoZW5jb2RpbmdOYW1lKSB7XG4gICAgICAgIGVuY29kaW5nID0gZ2V0RW5jb2RpbmcoZW5jb2RpbmdOYW1lKVxuICAgICAgfVxuXG4gICAgICAvLyAzLiBJZiBlbmNvZGluZyBpcyBmYWlsdXJlLCBhbmQgbWltZVR5cGUgaXMgcHJlc2VudDpcbiAgICAgIGlmIChlbmNvZGluZyA9PT0gJ2ZhaWx1cmUnICYmIG1pbWVUeXBlKSB7XG4gICAgICAgIC8vIDEuIExldCB0eXBlIGJlIHRoZSByZXN1bHQgb2YgcGFyc2UgYSBNSU1FIHR5cGVcbiAgICAgICAgLy8gICAgZ2l2ZW4gbWltZVR5cGUuXG4gICAgICAgIGNvbnN0IHR5cGUgPSBwYXJzZU1JTUVUeXBlKG1pbWVUeXBlKVxuXG4gICAgICAgIC8vIDIuIElmIHR5cGUgaXMgbm90IGZhaWx1cmUsIHNldCBlbmNvZGluZyB0byB0aGUgcmVzdWx0XG4gICAgICAgIC8vICAgIG9mIGdldHRpbmcgYW4gZW5jb2RpbmcgZnJvbSB0eXBl4oCZcyBwYXJhbWV0ZXJzW1wiY2hhcnNldFwiXS5cbiAgICAgICAgaWYgKHR5cGUgIT09ICdmYWlsdXJlJykge1xuICAgICAgICAgIGVuY29kaW5nID0gZ2V0RW5jb2RpbmcodHlwZS5wYXJhbWV0ZXJzLmdldCgnY2hhcnNldCcpKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIDQuIElmIGVuY29kaW5nIGlzIGZhaWx1cmUsIHRoZW4gc2V0IGVuY29kaW5nIHRvIFVURi04LlxuICAgICAgaWYgKGVuY29kaW5nID09PSAnZmFpbHVyZScpIHtcbiAgICAgICAgZW5jb2RpbmcgPSAnVVRGLTgnXG4gICAgICB9XG5cbiAgICAgIC8vIDUuIERlY29kZSBieXRlcyB1c2luZyBmYWxsYmFjayBlbmNvZGluZyBlbmNvZGluZywgYW5kXG4gICAgICAvLyAgICByZXR1cm4gdGhlIHJlc3VsdC5cbiAgICAgIHJldHVybiBkZWNvZGUoYnl0ZXMsIGVuY29kaW5nKVxuICAgIH1cbiAgICBjYXNlICdBcnJheUJ1ZmZlcic6IHtcbiAgICAgIC8vIFJldHVybiBhIG5ldyBBcnJheUJ1ZmZlciB3aG9zZSBjb250ZW50cyBhcmUgYnl0ZXMuXG4gICAgICBjb25zdCBzZXF1ZW5jZSA9IGNvbWJpbmVCeXRlU2VxdWVuY2VzKGJ5dGVzKVxuXG4gICAgICByZXR1cm4gc2VxdWVuY2UuYnVmZmVyXG4gICAgfVxuICAgIGNhc2UgJ0JpbmFyeVN0cmluZyc6IHtcbiAgICAgIC8vIFJldHVybiBieXRlcyBhcyBhIGJpbmFyeSBzdHJpbmcsIGluIHdoaWNoIGV2ZXJ5IGJ5dGVcbiAgICAgIC8vICBpcyByZXByZXNlbnRlZCBieSBhIGNvZGUgdW5pdCBvZiBlcXVhbCB2YWx1ZSBbMC4uMjU1XS5cbiAgICAgIGxldCBiaW5hcnlTdHJpbmcgPSAnJ1xuXG4gICAgICBjb25zdCBkZWNvZGVyID0gbmV3IFN0cmluZ0RlY29kZXIoJ2xhdGluMScpXG5cbiAgICAgIGZvciAoY29uc3QgY2h1bmsgb2YgYnl0ZXMpIHtcbiAgICAgICAgYmluYXJ5U3RyaW5nICs9IGRlY29kZXIud3JpdGUoY2h1bmspXG4gICAgICB9XG5cbiAgICAgIGJpbmFyeVN0cmluZyArPSBkZWNvZGVyLmVuZCgpXG5cbiAgICAgIHJldHVybiBiaW5hcnlTdHJpbmdcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZW5jb2Rpbmcuc3BlYy53aGF0d2cub3JnLyNkZWNvZGVcbiAqIEBwYXJhbSB7VWludDhBcnJheVtdfSBpb1F1ZXVlXG4gKiBAcGFyYW0ge3N0cmluZ30gZW5jb2RpbmdcbiAqL1xuZnVuY3Rpb24gZGVjb2RlIChpb1F1ZXVlLCBlbmNvZGluZykge1xuICBjb25zdCBieXRlcyA9IGNvbWJpbmVCeXRlU2VxdWVuY2VzKGlvUXVldWUpXG5cbiAgLy8gMS4gTGV0IEJPTUVuY29kaW5nIGJlIHRoZSByZXN1bHQgb2YgQk9NIHNuaWZmaW5nIGlvUXVldWUuXG4gIGNvbnN0IEJPTUVuY29kaW5nID0gQk9NU25pZmZpbmcoYnl0ZXMpXG5cbiAgbGV0IHNsaWNlID0gMFxuXG4gIC8vIDIuIElmIEJPTUVuY29kaW5nIGlzIG5vbi1udWxsOlxuICBpZiAoQk9NRW5jb2RpbmcgIT09IG51bGwpIHtcbiAgICAvLyAxLiBTZXQgZW5jb2RpbmcgdG8gQk9NRW5jb2RpbmcuXG4gICAgZW5jb2RpbmcgPSBCT01FbmNvZGluZ1xuXG4gICAgLy8gMi4gUmVhZCB0aHJlZSBieXRlcyBmcm9tIGlvUXVldWUsIGlmIEJPTUVuY29kaW5nIGlzXG4gICAgLy8gICAgVVRGLTg7IG90aGVyd2lzZSByZWFkIHR3byBieXRlcy5cbiAgICAvLyAgICAoRG8gbm90aGluZyB3aXRoIHRob3NlIGJ5dGVzLilcbiAgICBzbGljZSA9IEJPTUVuY29kaW5nID09PSAnVVRGLTgnID8gMyA6IDJcbiAgfVxuXG4gIC8vIDMuIFByb2Nlc3MgYSBxdWV1ZSB3aXRoIGFuIGluc3RhbmNlIG9mIGVuY29kaW5n4oCZc1xuICAvLyAgICBkZWNvZGVyLCBpb1F1ZXVlLCBvdXRwdXQsIGFuZCBcInJlcGxhY2VtZW50XCIuXG5cbiAgLy8gNC4gUmV0dXJuIG91dHB1dC5cblxuICBjb25zdCBzbGljZWQgPSBieXRlcy5zbGljZShzbGljZSlcbiAgcmV0dXJuIG5ldyBUZXh0RGVjb2RlcihlbmNvZGluZykuZGVjb2RlKHNsaWNlZClcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZW5jb2Rpbmcuc3BlYy53aGF0d2cub3JnLyNib20tc25pZmZcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gaW9RdWV1ZVxuICovXG5mdW5jdGlvbiBCT01TbmlmZmluZyAoaW9RdWV1ZSkge1xuICAvLyAxLiBMZXQgQk9NIGJlIHRoZSByZXN1bHQgb2YgcGVla2luZyAzIGJ5dGVzIGZyb20gaW9RdWV1ZSxcbiAgLy8gICAgY29udmVydGVkIHRvIGEgYnl0ZSBzZXF1ZW5jZS5cbiAgY29uc3QgW2EsIGIsIGNdID0gaW9RdWV1ZVxuXG4gIC8vIDIuIEZvciBlYWNoIG9mIHRoZSByb3dzIGluIHRoZSB0YWJsZSBiZWxvdywgc3RhcnRpbmcgd2l0aFxuICAvLyAgICB0aGUgZmlyc3Qgb25lIGFuZCBnb2luZyBkb3duLCBpZiBCT00gc3RhcnRzIHdpdGggdGhlXG4gIC8vICAgIGJ5dGVzIGdpdmVuIGluIHRoZSBmaXJzdCBjb2x1bW4sIHRoZW4gcmV0dXJuIHRoZVxuICAvLyAgICBlbmNvZGluZyBnaXZlbiBpbiB0aGUgY2VsbCBpbiB0aGUgc2Vjb25kIGNvbHVtbiBvZiB0aGF0XG4gIC8vICAgIHJvdy4gT3RoZXJ3aXNlLCByZXR1cm4gbnVsbC5cbiAgaWYgKGEgPT09IDB4RUYgJiYgYiA9PT0gMHhCQiAmJiBjID09PSAweEJGKSB7XG4gICAgcmV0dXJuICdVVEYtOCdcbiAgfSBlbHNlIGlmIChhID09PSAweEZFICYmIGIgPT09IDB4RkYpIHtcbiAgICByZXR1cm4gJ1VURi0xNkJFJ1xuICB9IGVsc2UgaWYgKGEgPT09IDB4RkYgJiYgYiA9PT0gMHhGRSkge1xuICAgIHJldHVybiAnVVRGLTE2TEUnXG4gIH1cblxuICByZXR1cm4gbnVsbFxufVxuXG4vKipcbiAqIEBwYXJhbSB7VWludDhBcnJheVtdfSBzZXF1ZW5jZXNcbiAqL1xuZnVuY3Rpb24gY29tYmluZUJ5dGVTZXF1ZW5jZXMgKHNlcXVlbmNlcykge1xuICBjb25zdCBzaXplID0gc2VxdWVuY2VzLnJlZHVjZSgoYSwgYikgPT4ge1xuICAgIHJldHVybiBhICsgYi5ieXRlTGVuZ3RoXG4gIH0sIDApXG5cbiAgbGV0IG9mZnNldCA9IDBcblxuICByZXR1cm4gc2VxdWVuY2VzLnJlZHVjZSgoYSwgYikgPT4ge1xuICAgIGEuc2V0KGIsIG9mZnNldClcbiAgICBvZmZzZXQgKz0gYi5ieXRlTGVuZ3RoXG4gICAgcmV0dXJuIGFcbiAgfSwgbmV3IFVpbnQ4QXJyYXkoc2l6ZSkpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICByZWFkT3BlcmF0aW9uLFxuICBmaXJlQVByb2dyZXNzRXZlbnRcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHtcbiAgc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgcmVhZE9wZXJhdGlvbixcbiAgZmlyZUFQcm9ncmVzc0V2ZW50XG59ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHtcbiAga1N0YXRlLFxuICBrRXJyb3IsXG4gIGtSZXN1bHQsXG4gIGtFdmVudHMsXG4gIGtBYm9ydGVkXG59ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuLi9mZXRjaC93ZWJpZGwnKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5IH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuXG5jbGFzcyBGaWxlUmVhZGVyIGV4dGVuZHMgRXZlbnRUYXJnZXQge1xuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgc3VwZXIoKVxuXG4gICAgdGhpc1trU3RhdGVdID0gJ2VtcHR5J1xuICAgIHRoaXNba1Jlc3VsdF0gPSBudWxsXG4gICAgdGhpc1trRXJyb3JdID0gbnVsbFxuICAgIHRoaXNba0V2ZW50c10gPSB7XG4gICAgICBsb2FkZW5kOiBudWxsLFxuICAgICAgZXJyb3I6IG51bGwsXG4gICAgICBhYm9ydDogbnVsbCxcbiAgICAgIGxvYWQ6IG51bGwsXG4gICAgICBwcm9ncmVzczogbnVsbCxcbiAgICAgIGxvYWRzdGFydDogbnVsbFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNkZm4tcmVhZEFzQXJyYXlCdWZmZXJcbiAgICogQHBhcmFtIHtpbXBvcnQoJ2J1ZmZlcicpLkJsb2J9IGJsb2JcbiAgICovXG4gIHJlYWRBc0FycmF5QnVmZmVyIChibG9iKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdGaWxlUmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyJyB9KVxuXG4gICAgYmxvYiA9IHdlYmlkbC5jb252ZXJ0ZXJzLkJsb2IoYmxvYiwgeyBzdHJpY3Q6IGZhbHNlIH0pXG5cbiAgICAvLyBUaGUgcmVhZEFzQXJyYXlCdWZmZXIoYmxvYikgbWV0aG9kLCB3aGVuIGludm9rZWQsXG4gICAgLy8gbXVzdCBpbml0aWF0ZSBhIHJlYWQgb3BlcmF0aW9uIGZvciBibG9iIHdpdGggQXJyYXlCdWZmZXIuXG4gICAgcmVhZE9wZXJhdGlvbih0aGlzLCBibG9iLCAnQXJyYXlCdWZmZXInKVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI3JlYWRBc0JpbmFyeVN0cmluZ1xuICAgKiBAcGFyYW0ge2ltcG9ydCgnYnVmZmVyJykuQmxvYn0gYmxvYlxuICAgKi9cbiAgcmVhZEFzQmluYXJ5U3RyaW5nIChibG9iKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdGaWxlUmVhZGVyLnJlYWRBc0JpbmFyeVN0cmluZycgfSlcblxuICAgIGJsb2IgPSB3ZWJpZGwuY29udmVydGVycy5CbG9iKGJsb2IsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gICAgLy8gVGhlIHJlYWRBc0JpbmFyeVN0cmluZyhibG9iKSBtZXRob2QsIHdoZW4gaW52b2tlZCxcbiAgICAvLyBtdXN0IGluaXRpYXRlIGEgcmVhZCBvcGVyYXRpb24gZm9yIGJsb2Igd2l0aCBCaW5hcnlTdHJpbmcuXG4gICAgcmVhZE9wZXJhdGlvbih0aGlzLCBibG9iLCAnQmluYXJ5U3RyaW5nJylcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNyZWFkQXNEYXRhVGV4dFxuICAgKiBAcGFyYW0ge2ltcG9ydCgnYnVmZmVyJykuQmxvYn0gYmxvYlxuICAgKiBAcGFyYW0ge3N0cmluZz99IGVuY29kaW5nXG4gICAqL1xuICByZWFkQXNUZXh0IChibG9iLCBlbmNvZGluZyA9IHVuZGVmaW5lZCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRmlsZVJlYWRlci5yZWFkQXNUZXh0JyB9KVxuXG4gICAgYmxvYiA9IHdlYmlkbC5jb252ZXJ0ZXJzLkJsb2IoYmxvYiwgeyBzdHJpY3Q6IGZhbHNlIH0pXG5cbiAgICBpZiAoZW5jb2RpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZW5jb2RpbmcgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcoZW5jb2RpbmcpXG4gICAgfVxuXG4gICAgLy8gVGhlIHJlYWRBc1RleHQoYmxvYiwgZW5jb2RpbmcpIG1ldGhvZCwgd2hlbiBpbnZva2VkLFxuICAgIC8vIG11c3QgaW5pdGlhdGUgYSByZWFkIG9wZXJhdGlvbiBmb3IgYmxvYiB3aXRoIFRleHQgYW5kIGVuY29kaW5nLlxuICAgIHJlYWRPcGVyYXRpb24odGhpcywgYmxvYiwgJ1RleHQnLCBlbmNvZGluZylcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNkZm4tcmVhZEFzRGF0YVVSTFxuICAgKiBAcGFyYW0ge2ltcG9ydCgnYnVmZmVyJykuQmxvYn0gYmxvYlxuICAgKi9cbiAgcmVhZEFzRGF0YVVSTCAoYmxvYikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRmlsZVJlYWRlci5yZWFkQXNEYXRhVVJMJyB9KVxuXG4gICAgYmxvYiA9IHdlYmlkbC5jb252ZXJ0ZXJzLkJsb2IoYmxvYiwgeyBzdHJpY3Q6IGZhbHNlIH0pXG5cbiAgICAvLyBUaGUgcmVhZEFzRGF0YVVSTChibG9iKSBtZXRob2QsIHdoZW4gaW52b2tlZCwgbXVzdFxuICAgIC8vIGluaXRpYXRlIGEgcmVhZCBvcGVyYXRpb24gZm9yIGJsb2Igd2l0aCBEYXRhVVJMLlxuICAgIHJlYWRPcGVyYXRpb24odGhpcywgYmxvYiwgJ0RhdGFVUkwnKVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2Rmbi1hYm9ydFxuICAgKi9cbiAgYWJvcnQgKCkge1xuICAgIC8vIDEuIElmIHRoaXMncyBzdGF0ZSBpcyBcImVtcHR5XCIgb3IgaWYgdGhpcydzIHN0YXRlIGlzXG4gICAgLy8gICAgXCJkb25lXCIgc2V0IHRoaXMncyByZXN1bHQgdG8gbnVsbCBhbmQgdGVybWluYXRlXG4gICAgLy8gICAgdGhpcyBhbGdvcml0aG0uXG4gICAgaWYgKHRoaXNba1N0YXRlXSA9PT0gJ2VtcHR5JyB8fCB0aGlzW2tTdGF0ZV0gPT09ICdkb25lJykge1xuICAgICAgdGhpc1trUmVzdWx0XSA9IG51bGxcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIDIuIElmIHRoaXMncyBzdGF0ZSBpcyBcImxvYWRpbmdcIiBzZXQgdGhpcydzIHN0YXRlIHRvXG4gICAgLy8gICAgXCJkb25lXCIgYW5kIHNldCB0aGlzJ3MgcmVzdWx0IHRvIG51bGwuXG4gICAgaWYgKHRoaXNba1N0YXRlXSA9PT0gJ2xvYWRpbmcnKSB7XG4gICAgICB0aGlzW2tTdGF0ZV0gPSAnZG9uZSdcbiAgICAgIHRoaXNba1Jlc3VsdF0gPSBudWxsXG4gICAgfVxuXG4gICAgLy8gMy4gSWYgdGhlcmUgYXJlIGFueSB0YXNrcyBmcm9tIHRoaXMgb24gdGhlIGZpbGUgcmVhZGluZ1xuICAgIC8vICAgIHRhc2sgc291cmNlIGluIGFuIGFmZmlsaWF0ZWQgdGFzayBxdWV1ZSwgdGhlbiByZW1vdmVcbiAgICAvLyAgICB0aG9zZSB0YXNrcyBmcm9tIHRoYXQgdGFzayBxdWV1ZS5cbiAgICB0aGlzW2tBYm9ydGVkXSA9IHRydWVcblxuICAgIC8vIDQuIFRlcm1pbmF0ZSB0aGUgYWxnb3JpdGhtIGZvciB0aGUgcmVhZCBtZXRob2QgYmVpbmcgcHJvY2Vzc2VkLlxuICAgIC8vIFRPRE9cblxuICAgIC8vIDUuIEZpcmUgYSBwcm9ncmVzcyBldmVudCBjYWxsZWQgYWJvcnQgYXQgdGhpcy5cbiAgICBmaXJlQVByb2dyZXNzRXZlbnQoJ2Fib3J0JywgdGhpcylcblxuICAgIC8vIDYuIElmIHRoaXMncyBzdGF0ZSBpcyBub3QgXCJsb2FkaW5nXCIsIGZpcmUgYSBwcm9ncmVzc1xuICAgIC8vICAgIGV2ZW50IGNhbGxlZCBsb2FkZW5kIGF0IHRoaXMuXG4gICAgaWYgKHRoaXNba1N0YXRlXSAhPT0gJ2xvYWRpbmcnKSB7XG4gICAgICBmaXJlQVByb2dyZXNzRXZlbnQoJ2xvYWRlbmQnLCB0aGlzKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNkb20tZmlsZXJlYWRlci1yZWFkeXN0YXRlXG4gICAqL1xuICBnZXQgcmVhZHlTdGF0ZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIHN3aXRjaCAodGhpc1trU3RhdGVdKSB7XG4gICAgICBjYXNlICdlbXB0eSc6IHJldHVybiB0aGlzLkVNUFRZXG4gICAgICBjYXNlICdsb2FkaW5nJzogcmV0dXJuIHRoaXMuTE9BRElOR1xuICAgICAgY2FzZSAnZG9uZSc6IHJldHVybiB0aGlzLkRPTkVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZG9tLWZpbGVyZWFkZXItcmVzdWx0XG4gICAqL1xuICBnZXQgcmVzdWx0ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgLy8gVGhlIHJlc3VsdCBhdHRyaWJ1dGXigJlzIGdldHRlciwgd2hlbiBpbnZva2VkLCBtdXN0IHJldHVyblxuICAgIC8vIHRoaXMncyByZXN1bHQuXG4gICAgcmV0dXJuIHRoaXNba1Jlc3VsdF1cbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNkb20tZmlsZXJlYWRlci1lcnJvclxuICAgKi9cbiAgZ2V0IGVycm9yICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgLy8gVGhlIGVycm9yIGF0dHJpYnV0ZeKAmXMgZ2V0dGVyLCB3aGVuIGludm9rZWQsIG11c3QgcmV0dXJuXG4gICAgLy8gdGhpcydzIGVycm9yLlxuICAgIHJldHVybiB0aGlzW2tFcnJvcl1cbiAgfVxuXG4gIGdldCBvbmxvYWRlbmQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICByZXR1cm4gdGhpc1trRXZlbnRzXS5sb2FkZW5kXG4gIH1cblxuICBzZXQgb25sb2FkZW5kIChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICBpZiAodGhpc1trRXZlbnRzXS5sb2FkZW5kKSB7XG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWRlbmQnLCB0aGlzW2tFdmVudHNdLmxvYWRlbmQpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpc1trRXZlbnRzXS5sb2FkZW5kID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVuZCcsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmxvYWRlbmQgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgZ2V0IG9uZXJyb3IgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICByZXR1cm4gdGhpc1trRXZlbnRzXS5lcnJvclxuICB9XG5cbiAgc2V0IG9uZXJyb3IgKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIGlmICh0aGlzW2tFdmVudHNdLmVycm9yKSB7XG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpc1trRXZlbnRzXS5lcnJvcilcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmVycm9yID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trRXZlbnRzXS5lcnJvciA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgb25sb2Fkc3RhcnQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICByZXR1cm4gdGhpc1trRXZlbnRzXS5sb2Fkc3RhcnRcbiAgfVxuXG4gIHNldCBvbmxvYWRzdGFydCAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgaWYgKHRoaXNba0V2ZW50c10ubG9hZHN0YXJ0KSB7XG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWRzdGFydCcsIHRoaXNba0V2ZW50c10ubG9hZHN0YXJ0KVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXNba0V2ZW50c10ubG9hZHN0YXJ0ID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignbG9hZHN0YXJ0JywgZm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNba0V2ZW50c10ubG9hZHN0YXJ0ID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBvbnByb2dyZXNzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgcmV0dXJuIHRoaXNba0V2ZW50c10ucHJvZ3Jlc3NcbiAgfVxuXG4gIHNldCBvbnByb2dyZXNzIChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICBpZiAodGhpc1trRXZlbnRzXS5wcm9ncmVzcykge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXNba0V2ZW50c10ucHJvZ3Jlc3MpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpc1trRXZlbnRzXS5wcm9ncmVzcyA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgZm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNba0V2ZW50c10ucHJvZ3Jlc3MgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgZ2V0IG9ubG9hZCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIHJldHVybiB0aGlzW2tFdmVudHNdLmxvYWRcbiAgfVxuXG4gIHNldCBvbmxvYWQgKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIGlmICh0aGlzW2tFdmVudHNdLmxvYWQpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZCcsIHRoaXNba0V2ZW50c10ubG9hZClcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmxvYWQgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgZm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNba0V2ZW50c10ubG9hZCA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgb25hYm9ydCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIHJldHVybiB0aGlzW2tFdmVudHNdLmFib3J0XG4gIH1cblxuICBzZXQgb25hYm9ydCAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgaWYgKHRoaXNba0V2ZW50c10uYWJvcnQpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCB0aGlzW2tFdmVudHNdLmFib3J0KVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXNba0V2ZW50c10uYWJvcnQgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmFib3J0ID0gbnVsbFxuICAgIH1cbiAgfVxufVxuXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZG9tLWZpbGVyZWFkZXItZW1wdHlcbkZpbGVSZWFkZXIuRU1QVFkgPSBGaWxlUmVhZGVyLnByb3RvdHlwZS5FTVBUWSA9IDBcbi8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNkb20tZmlsZXJlYWRlci1sb2FkaW5nXG5GaWxlUmVhZGVyLkxPQURJTkcgPSBGaWxlUmVhZGVyLnByb3RvdHlwZS5MT0FESU5HID0gMVxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2RvbS1maWxlcmVhZGVyLWRvbmVcbkZpbGVSZWFkZXIuRE9ORSA9IEZpbGVSZWFkZXIucHJvdG90eXBlLkRPTkUgPSAyXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEZpbGVSZWFkZXIucHJvdG90eXBlLCB7XG4gIEVNUFRZOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBMT0FESU5HOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBET05FOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICByZWFkQXNBcnJheUJ1ZmZlcjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcmVhZEFzQmluYXJ5U3RyaW5nOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWFkQXNUZXh0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWFkQXNEYXRhVVJMOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBhYm9ydDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcmVhZHlTdGF0ZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcmVzdWx0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBlcnJvcjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb25sb2Fkc3RhcnQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9ucHJvZ3Jlc3M6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9ubG9hZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb25hYm9ydDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb25lcnJvcjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb25sb2FkZW5kOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnRmlsZVJlYWRlcicsXG4gICAgd3JpdGFibGU6IGZhbHNlLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9XG59KVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhGaWxlUmVhZGVyLCB7XG4gIEVNUFRZOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBMT0FESU5HOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBET05FOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzXG59KVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgRmlsZVJlYWRlclxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGtDb25zdHJ1Y3Q6IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpLmtDb25zdHJ1Y3Rcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7IFVSTFNlcmlhbGl6ZXIgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2RhdGFVUkwnKVxuY29uc3QgeyBpc1ZhbGlkSGVhZGVyTmFtZSB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvdXRpbCcpXG5cbi8qKlxuICogQHNlZSBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtdXJsLWVxdWFsc1xuICogQHBhcmFtIHtVUkx9IEFcbiAqIEBwYXJhbSB7VVJMfSBCXG4gKiBAcGFyYW0ge2Jvb2xlYW4gfCB1bmRlZmluZWR9IGV4Y2x1ZGVGcmFnbWVudFxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIHVybEVxdWFscyAoQSwgQiwgZXhjbHVkZUZyYWdtZW50ID0gZmFsc2UpIHtcbiAgY29uc3Qgc2VyaWFsaXplZEEgPSBVUkxTZXJpYWxpemVyKEEsIGV4Y2x1ZGVGcmFnbWVudClcblxuICBjb25zdCBzZXJpYWxpemVkQiA9IFVSTFNlcmlhbGl6ZXIoQiwgZXhjbHVkZUZyYWdtZW50KVxuXG4gIHJldHVybiBzZXJpYWxpemVkQSA9PT0gc2VyaWFsaXplZEJcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9jaHJvbWl1bS9jaHJvbWl1bS9ibG9iLzY5NGQyMGQxMzRjYjU1M2Q4ZDg5ZTU1MDBiOTE0ODAxMmIxYmEyOTkvY29udGVudC9icm93c2VyL2NhY2hlX3N0b3JhZ2UvY2FjaGVfc3RvcmFnZV9jYWNoZS5jYyNMMjYwLUwyNjJcbiAqIEBwYXJhbSB7c3RyaW5nfSBoZWFkZXJcbiAqL1xuZnVuY3Rpb24gZmllbGRWYWx1ZXMgKGhlYWRlcikge1xuICBhc3NlcnQoaGVhZGVyICE9PSBudWxsKVxuXG4gIGNvbnN0IHZhbHVlcyA9IFtdXG5cbiAgZm9yIChsZXQgdmFsdWUgb2YgaGVhZGVyLnNwbGl0KCcsJykpIHtcbiAgICB2YWx1ZSA9IHZhbHVlLnRyaW0oKVxuXG4gICAgaWYgKCF2YWx1ZS5sZW5ndGgpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfSBlbHNlIGlmICghaXNWYWxpZEhlYWRlck5hbWUodmFsdWUpKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIHZhbHVlcy5wdXNoKHZhbHVlKVxuICB9XG5cbiAgcmV0dXJuIHZhbHVlc1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgdXJsRXF1YWxzLFxuICBmaWVsZFZhbHVlc1xufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBrQ29uc3RydWN0IH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyB1cmxFcXVhbHMsIGZpZWxkVmFsdWVzOiBnZXRGaWVsZFZhbHVlcyB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSwgaXNEaXN0dXJiZWQgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGtIZWFkZXJzTGlzdCB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuLi9mZXRjaC93ZWJpZGwnKVxuY29uc3QgeyBSZXNwb25zZSwgY2xvbmVSZXNwb25zZSB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvcmVzcG9uc2UnKVxuY29uc3QgeyBSZXF1ZXN0IH0gPSByZXF1aXJlKCcuLi9mZXRjaC9yZXF1ZXN0JylcbmNvbnN0IHsga1N0YXRlLCBrSGVhZGVycywga0d1YXJkLCBrUmVhbG0gfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3N5bWJvbHMnKVxuY29uc3QgeyBmZXRjaGluZyB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvaW5kZXgnKVxuY29uc3QgeyB1cmxJc0h0dHBIdHRwc1NjaGVtZSwgY3JlYXRlRGVmZXJyZWRQcm9taXNlLCByZWFkQWxsQnl0ZXMgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3V0aWwnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbmNvbnN0IHsgZ2V0R2xvYmFsRGlzcGF0Y2hlciB9ID0gcmVxdWlyZSgnLi4vZ2xvYmFsJylcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNkZm4tY2FjaGUtYmF0Y2gtb3BlcmF0aW9uXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBDYWNoZUJhdGNoT3BlcmF0aW9uXG4gKiBAcHJvcGVydHkgeydkZWxldGUnIHwgJ3B1dCd9IHR5cGVcbiAqIEBwcm9wZXJ0eSB7YW55fSByZXF1ZXN0XG4gKiBAcHJvcGVydHkge2FueX0gcmVzcG9uc2VcbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KCcuLi8uLi90eXBlcy9jYWNoZScpLkNhY2hlUXVlcnlPcHRpb25zfSBvcHRpb25zXG4gKi9cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNkZm4tcmVxdWVzdC1yZXNwb25zZS1saXN0XG4gKiBAdHlwZWRlZiB7W2FueSwgYW55XVtdfSByZXF1ZXN0UmVzcG9uc2VMaXN0XG4gKi9cblxuY2xhc3MgQ2FjaGUge1xuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jZGZuLXJlbGV2YW50LXJlcXVlc3QtcmVzcG9uc2UtbGlzdFxuICAgKiBAdHlwZSB7cmVxdWVzdFJlc3BvbnNlTGlzdH1cbiAgICovXG4gICNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3RcblxuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgaWYgKGFyZ3VtZW50c1swXSAhPT0ga0NvbnN0cnVjdCkge1xuICAgICAgd2ViaWRsLmlsbGVnYWxDb25zdHJ1Y3RvcigpXG4gICAgfVxuXG4gICAgdGhpcy4jcmVsZXZhbnRSZXF1ZXN0UmVzcG9uc2VMaXN0ID0gYXJndW1lbnRzWzFdXG4gIH1cblxuICBhc3luYyBtYXRjaCAocmVxdWVzdCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGUpXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0NhY2hlLm1hdGNoJyB9KVxuXG4gICAgcmVxdWVzdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKHJlcXVlc3QpXG4gICAgb3B0aW9ucyA9IHdlYmlkbC5jb252ZXJ0ZXJzLkNhY2hlUXVlcnlPcHRpb25zKG9wdGlvbnMpXG5cbiAgICBjb25zdCBwID0gYXdhaXQgdGhpcy5tYXRjaEFsbChyZXF1ZXN0LCBvcHRpb25zKVxuXG4gICAgaWYgKHAubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICByZXR1cm4gcFswXVxuICB9XG5cbiAgYXN5bmMgbWF0Y2hBbGwgKHJlcXVlc3QgPSB1bmRlZmluZWQsIG9wdGlvbnMgPSB7fSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlKVxuXG4gICAgaWYgKHJlcXVlc3QgIT09IHVuZGVmaW5lZCkgcmVxdWVzdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKHJlcXVlc3QpXG4gICAgb3B0aW9ucyA9IHdlYmlkbC5jb252ZXJ0ZXJzLkNhY2hlUXVlcnlPcHRpb25zKG9wdGlvbnMpXG5cbiAgICAvLyAxLlxuICAgIGxldCByID0gbnVsbFxuXG4gICAgLy8gMi5cbiAgICBpZiAocmVxdWVzdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAocmVxdWVzdCBpbnN0YW5jZW9mIFJlcXVlc3QpIHtcbiAgICAgICAgLy8gMi4xLjFcbiAgICAgICAgciA9IHJlcXVlc3Rba1N0YXRlXVxuXG4gICAgICAgIC8vIDIuMS4yXG4gICAgICAgIGlmIChyLm1ldGhvZCAhPT0gJ0dFVCcgJiYgIW9wdGlvbnMuaWdub3JlTWV0aG9kKSB7XG4gICAgICAgICAgcmV0dXJuIFtdXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHJlcXVlc3QgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIC8vIDIuMi4xXG4gICAgICAgIHIgPSBuZXcgUmVxdWVzdChyZXF1ZXN0KVtrU3RhdGVdXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNS5cbiAgICAvLyA1LjFcbiAgICBjb25zdCByZXNwb25zZXMgPSBbXVxuXG4gICAgLy8gNS4yXG4gICAgaWYgKHJlcXVlc3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gNS4yLjFcbiAgICAgIGZvciAoY29uc3QgcmVxdWVzdFJlc3BvbnNlIG9mIHRoaXMuI3JlbGV2YW50UmVxdWVzdFJlc3BvbnNlTGlzdCkge1xuICAgICAgICByZXNwb25zZXMucHVzaChyZXF1ZXN0UmVzcG9uc2VbMV0pXG4gICAgICB9XG4gICAgfSBlbHNlIHsgLy8gNS4zXG4gICAgICAvLyA1LjMuMVxuICAgICAgY29uc3QgcmVxdWVzdFJlc3BvbnNlcyA9IHRoaXMuI3F1ZXJ5Q2FjaGUociwgb3B0aW9ucylcblxuICAgICAgLy8gNS4zLjJcbiAgICAgIGZvciAoY29uc3QgcmVxdWVzdFJlc3BvbnNlIG9mIHJlcXVlc3RSZXNwb25zZXMpIHtcbiAgICAgICAgcmVzcG9uc2VzLnB1c2gocmVxdWVzdFJlc3BvbnNlWzFdKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDUuNFxuICAgIC8vIFdlIGRvbid0IGltcGxlbWVudCBDT1JzIHNvIHdlIGRvbid0IG5lZWQgdG8gbG9vcCBvdmVyIHRoZSByZXNwb25zZXMsIHlheSFcblxuICAgIC8vIDUuNS4xXG4gICAgY29uc3QgcmVzcG9uc2VMaXN0ID0gW11cblxuICAgIC8vIDUuNS4yXG4gICAgZm9yIChjb25zdCByZXNwb25zZSBvZiByZXNwb25zZXMpIHtcbiAgICAgIC8vIDUuNS4yLjFcbiAgICAgIGNvbnN0IHJlc3BvbnNlT2JqZWN0ID0gbmV3IFJlc3BvbnNlKHJlc3BvbnNlLmJvZHk/LnNvdXJjZSA/PyBudWxsKVxuICAgICAgY29uc3QgYm9keSA9IHJlc3BvbnNlT2JqZWN0W2tTdGF0ZV0uYm9keVxuICAgICAgcmVzcG9uc2VPYmplY3Rba1N0YXRlXSA9IHJlc3BvbnNlXG4gICAgICByZXNwb25zZU9iamVjdFtrU3RhdGVdLmJvZHkgPSBib2R5XG4gICAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba0hlYWRlcnNMaXN0XSA9IHJlc3BvbnNlLmhlYWRlcnNMaXN0XG4gICAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba0d1YXJkXSA9ICdpbW11dGFibGUnXG5cbiAgICAgIHJlc3BvbnNlTGlzdC5wdXNoKHJlc3BvbnNlT2JqZWN0KVxuICAgIH1cblxuICAgIC8vIDYuXG4gICAgcmV0dXJuIE9iamVjdC5mcmVlemUocmVzcG9uc2VMaXN0KVxuICB9XG5cbiAgYXN5bmMgYWRkIChyZXF1ZXN0KSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGUpXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0NhY2hlLmFkZCcgfSlcblxuICAgIHJlcXVlc3QgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mbyhyZXF1ZXN0KVxuXG4gICAgLy8gMS5cbiAgICBjb25zdCByZXF1ZXN0cyA9IFtyZXF1ZXN0XVxuXG4gICAgLy8gMi5cbiAgICBjb25zdCByZXNwb25zZUFycmF5UHJvbWlzZSA9IHRoaXMuYWRkQWxsKHJlcXVlc3RzKVxuXG4gICAgLy8gMy5cbiAgICByZXR1cm4gYXdhaXQgcmVzcG9uc2VBcnJheVByb21pc2VcbiAgfVxuXG4gIGFzeW5jIGFkZEFsbCAocmVxdWVzdHMpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZSlcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnQ2FjaGUuYWRkQWxsJyB9KVxuXG4gICAgcmVxdWVzdHMgPSB3ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8UmVxdWVzdEluZm8+J10ocmVxdWVzdHMpXG5cbiAgICAvLyAxLlxuICAgIGNvbnN0IHJlc3BvbnNlUHJvbWlzZXMgPSBbXVxuXG4gICAgLy8gMi5cbiAgICBjb25zdCByZXF1ZXN0TGlzdCA9IFtdXG5cbiAgICAvLyAzLlxuICAgIGZvciAoY29uc3QgcmVxdWVzdCBvZiByZXF1ZXN0cykge1xuICAgICAgaWYgKHR5cGVvZiByZXF1ZXN0ID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyAzLjFcbiAgICAgIGNvbnN0IHIgPSByZXF1ZXN0W2tTdGF0ZV1cblxuICAgICAgLy8gMy4yXG4gICAgICBpZiAoIXVybElzSHR0cEh0dHBzU2NoZW1lKHIudXJsKSB8fCByLm1ldGhvZCAhPT0gJ0dFVCcpIHtcbiAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLmFkZEFsbCcsXG4gICAgICAgICAgbWVzc2FnZTogJ0V4cGVjdGVkIGh0dHAvcyBzY2hlbWUgd2hlbiBtZXRob2QgaXMgbm90IEdFVC4nXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNC5cbiAgICAvKiogQHR5cGUge1JldHVyblR5cGU8dHlwZW9mIGZldGNoaW5nPltdfSAqL1xuICAgIGNvbnN0IGZldGNoQ29udHJvbGxlcnMgPSBbXVxuXG4gICAgLy8gNS5cbiAgICBmb3IgKGNvbnN0IHJlcXVlc3Qgb2YgcmVxdWVzdHMpIHtcbiAgICAgIC8vIDUuMVxuICAgICAgY29uc3QgciA9IG5ldyBSZXF1ZXN0KHJlcXVlc3QpW2tTdGF0ZV1cblxuICAgICAgLy8gNS4yXG4gICAgICBpZiAoIXVybElzSHR0cEh0dHBzU2NoZW1lKHIudXJsKSkge1xuICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgaGVhZGVyOiAnQ2FjaGUuYWRkQWxsJyxcbiAgICAgICAgICBtZXNzYWdlOiAnRXhwZWN0ZWQgaHR0cC9zIHNjaGVtZS4nXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIC8vIDUuNFxuICAgICAgci5pbml0aWF0b3IgPSAnZmV0Y2gnXG4gICAgICByLmRlc3RpbmF0aW9uID0gJ3N1YnJlc291cmNlJ1xuXG4gICAgICAvLyA1LjVcbiAgICAgIHJlcXVlc3RMaXN0LnB1c2gocilcblxuICAgICAgLy8gNS42XG4gICAgICBjb25zdCByZXNwb25zZVByb21pc2UgPSBjcmVhdGVEZWZlcnJlZFByb21pc2UoKVxuXG4gICAgICAvLyA1LjdcbiAgICAgIGZldGNoQ29udHJvbGxlcnMucHVzaChmZXRjaGluZyh7XG4gICAgICAgIHJlcXVlc3Q6IHIsXG4gICAgICAgIGRpc3BhdGNoZXI6IGdldEdsb2JhbERpc3BhdGNoZXIoKSxcbiAgICAgICAgcHJvY2Vzc1Jlc3BvbnNlIChyZXNwb25zZSkge1xuICAgICAgICAgIC8vIDEuXG4gICAgICAgICAgaWYgKHJlc3BvbnNlLnR5cGUgPT09ICdlcnJvcicgfHwgcmVzcG9uc2Uuc3RhdHVzID09PSAyMDYgfHwgcmVzcG9uc2Uuc3RhdHVzIDwgMjAwIHx8IHJlc3BvbnNlLnN0YXR1cyA+IDI5OSkge1xuICAgICAgICAgICAgcmVzcG9uc2VQcm9taXNlLnJlamVjdCh3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLmFkZEFsbCcsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdSZWNlaXZlZCBhbiBpbnZhbGlkIHN0YXR1cyBjb2RlIG9yIHRoZSByZXF1ZXN0IGZhaWxlZC4nXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlLmhlYWRlcnNMaXN0LmNvbnRhaW5zKCd2YXJ5JykpIHsgLy8gMi5cbiAgICAgICAgICAgIC8vIDIuMVxuICAgICAgICAgICAgY29uc3QgZmllbGRWYWx1ZXMgPSBnZXRGaWVsZFZhbHVlcyhyZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ3ZhcnknKSlcblxuICAgICAgICAgICAgLy8gMi4yXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkVmFsdWUgb2YgZmllbGRWYWx1ZXMpIHtcbiAgICAgICAgICAgICAgLy8gMi4yLjFcbiAgICAgICAgICAgICAgaWYgKGZpZWxkVmFsdWUgPT09ICcqJykge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlUHJvbWlzZS5yZWplY3Qod2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgICAgICAgaGVhZGVyOiAnQ2FjaGUuYWRkQWxsJyxcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdpbnZhbGlkIHZhcnkgZmllbGQgdmFsdWUnXG4gICAgICAgICAgICAgICAgfSkpXG5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbnRyb2xsZXIgb2YgZmV0Y2hDb250cm9sbGVycykge1xuICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5hYm9ydCgpXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSAocmVzcG9uc2UpIHtcbiAgICAgICAgICAvLyAxLlxuICAgICAgICAgIGlmIChyZXNwb25zZS5hYm9ydGVkKSB7XG4gICAgICAgICAgICByZXNwb25zZVByb21pc2UucmVqZWN0KG5ldyBET01FeGNlcHRpb24oJ2Fib3J0ZWQnLCAnQWJvcnRFcnJvcicpKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gMi5cbiAgICAgICAgICByZXNwb25zZVByb21pc2UucmVzb2x2ZShyZXNwb25zZSlcbiAgICAgICAgfVxuICAgICAgfSkpXG5cbiAgICAgIC8vIDUuOFxuICAgICAgcmVzcG9uc2VQcm9taXNlcy5wdXNoKHJlc3BvbnNlUHJvbWlzZS5wcm9taXNlKVxuICAgIH1cblxuICAgIC8vIDYuXG4gICAgY29uc3QgcCA9IFByb21pc2UuYWxsKHJlc3BvbnNlUHJvbWlzZXMpXG5cbiAgICAvLyA3LlxuICAgIGNvbnN0IHJlc3BvbnNlcyA9IGF3YWl0IHBcblxuICAgIC8vIDcuMVxuICAgIGNvbnN0IG9wZXJhdGlvbnMgPSBbXVxuXG4gICAgLy8gNy4yXG4gICAgbGV0IGluZGV4ID0gMFxuXG4gICAgLy8gNy4zXG4gICAgZm9yIChjb25zdCByZXNwb25zZSBvZiByZXNwb25zZXMpIHtcbiAgICAgIC8vIDcuMy4xXG4gICAgICAvKiogQHR5cGUge0NhY2hlQmF0Y2hPcGVyYXRpb259ICovXG4gICAgICBjb25zdCBvcGVyYXRpb24gPSB7XG4gICAgICAgIHR5cGU6ICdwdXQnLCAvLyA3LjMuMlxuICAgICAgICByZXF1ZXN0OiByZXF1ZXN0TGlzdFtpbmRleF0sIC8vIDcuMy4zXG4gICAgICAgIHJlc3BvbnNlIC8vIDcuMy40XG4gICAgICB9XG5cbiAgICAgIG9wZXJhdGlvbnMucHVzaChvcGVyYXRpb24pIC8vIDcuMy41XG5cbiAgICAgIGluZGV4KysgLy8gNy4zLjZcbiAgICB9XG5cbiAgICAvLyA3LjVcbiAgICBjb25zdCBjYWNoZUpvYlByb21pc2UgPSBjcmVhdGVEZWZlcnJlZFByb21pc2UoKVxuXG4gICAgLy8gNy42LjFcbiAgICBsZXQgZXJyb3JEYXRhID0gbnVsbFxuXG4gICAgLy8gNy42LjJcbiAgICB0cnkge1xuICAgICAgdGhpcy4jYmF0Y2hDYWNoZU9wZXJhdGlvbnMob3BlcmF0aW9ucylcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlcnJvckRhdGEgPSBlXG4gICAgfVxuXG4gICAgLy8gNy42LjNcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAvLyA3LjYuMy4xXG4gICAgICBpZiAoZXJyb3JEYXRhID09PSBudWxsKSB7XG4gICAgICAgIGNhY2hlSm9iUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIDcuNi4zLjJcbiAgICAgICAgY2FjaGVKb2JQcm9taXNlLnJlamVjdChlcnJvckRhdGEpXG4gICAgICB9XG4gICAgfSlcblxuICAgIC8vIDcuN1xuICAgIHJldHVybiBjYWNoZUpvYlByb21pc2UucHJvbWlzZVxuICB9XG5cbiAgYXN5bmMgcHV0IChyZXF1ZXN0LCByZXNwb25zZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlKVxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMiwgeyBoZWFkZXI6ICdDYWNoZS5wdXQnIH0pXG5cbiAgICByZXF1ZXN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluZm8ocmVxdWVzdClcbiAgICByZXNwb25zZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlc3BvbnNlKHJlc3BvbnNlKVxuXG4gICAgLy8gMS5cbiAgICBsZXQgaW5uZXJSZXF1ZXN0ID0gbnVsbFxuXG4gICAgLy8gMi5cbiAgICBpZiAocmVxdWVzdCBpbnN0YW5jZW9mIFJlcXVlc3QpIHtcbiAgICAgIGlubmVyUmVxdWVzdCA9IHJlcXVlc3Rba1N0YXRlXVxuICAgIH0gZWxzZSB7IC8vIDMuXG4gICAgICBpbm5lclJlcXVlc3QgPSBuZXcgUmVxdWVzdChyZXF1ZXN0KVtrU3RhdGVdXG4gICAgfVxuXG4gICAgLy8gNC5cbiAgICBpZiAoIXVybElzSHR0cEh0dHBzU2NoZW1lKGlubmVyUmVxdWVzdC51cmwpIHx8IGlubmVyUmVxdWVzdC5tZXRob2QgIT09ICdHRVQnKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ0NhY2hlLnB1dCcsXG4gICAgICAgIG1lc3NhZ2U6ICdFeHBlY3RlZCBhbiBodHRwL3Mgc2NoZW1lIHdoZW4gbWV0aG9kIGlzIG5vdCBHRVQnXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDUuXG4gICAgY29uc3QgaW5uZXJSZXNwb25zZSA9IHJlc3BvbnNlW2tTdGF0ZV1cblxuICAgIC8vIDYuXG4gICAgaWYgKGlubmVyUmVzcG9uc2Uuc3RhdHVzID09PSAyMDYpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnQ2FjaGUucHV0JyxcbiAgICAgICAgbWVzc2FnZTogJ0dvdCAyMDYgc3RhdHVzJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyA3LlxuICAgIGlmIChpbm5lclJlc3BvbnNlLmhlYWRlcnNMaXN0LmNvbnRhaW5zKCd2YXJ5JykpIHtcbiAgICAgIC8vIDcuMS5cbiAgICAgIGNvbnN0IGZpZWxkVmFsdWVzID0gZ2V0RmllbGRWYWx1ZXMoaW5uZXJSZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ3ZhcnknKSlcblxuICAgICAgLy8gNy4yLlxuICAgICAgZm9yIChjb25zdCBmaWVsZFZhbHVlIG9mIGZpZWxkVmFsdWVzKSB7XG4gICAgICAgIC8vIDcuMi4xXG4gICAgICAgIGlmIChmaWVsZFZhbHVlID09PSAnKicpIHtcbiAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICBoZWFkZXI6ICdDYWNoZS5wdXQnLFxuICAgICAgICAgICAgbWVzc2FnZTogJ0dvdCAqIHZhcnkgZmllbGQgdmFsdWUnXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDguXG4gICAgaWYgKGlubmVyUmVzcG9uc2UuYm9keSAmJiAoaXNEaXN0dXJiZWQoaW5uZXJSZXNwb25zZS5ib2R5LnN0cmVhbSkgfHwgaW5uZXJSZXNwb25zZS5ib2R5LnN0cmVhbS5sb2NrZWQpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ0NhY2hlLnB1dCcsXG4gICAgICAgIG1lc3NhZ2U6ICdSZXNwb25zZSBib2R5IGlzIGxvY2tlZCBvciBkaXN0dXJiZWQnXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDkuXG4gICAgY29uc3QgY2xvbmVkUmVzcG9uc2UgPSBjbG9uZVJlc3BvbnNlKGlubmVyUmVzcG9uc2UpXG5cbiAgICAvLyAxMC5cbiAgICBjb25zdCBib2R5UmVhZFByb21pc2UgPSBjcmVhdGVEZWZlcnJlZFByb21pc2UoKVxuXG4gICAgLy8gMTEuXG4gICAgaWYgKGlubmVyUmVzcG9uc2UuYm9keSAhPSBudWxsKSB7XG4gICAgICAvLyAxMS4xXG4gICAgICBjb25zdCBzdHJlYW0gPSBpbm5lclJlc3BvbnNlLmJvZHkuc3RyZWFtXG5cbiAgICAgIC8vIDExLjJcbiAgICAgIGNvbnN0IHJlYWRlciA9IHN0cmVhbS5nZXRSZWFkZXIoKVxuXG4gICAgICAvLyAxMS4zXG4gICAgICByZWFkQWxsQnl0ZXMocmVhZGVyKS50aGVuKGJvZHlSZWFkUHJvbWlzZS5yZXNvbHZlLCBib2R5UmVhZFByb21pc2UucmVqZWN0KVxuICAgIH0gZWxzZSB7XG4gICAgICBib2R5UmVhZFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpXG4gICAgfVxuXG4gICAgLy8gMTIuXG4gICAgLyoqIEB0eXBlIHtDYWNoZUJhdGNoT3BlcmF0aW9uW119ICovXG4gICAgY29uc3Qgb3BlcmF0aW9ucyA9IFtdXG5cbiAgICAvLyAxMy5cbiAgICAvKiogQHR5cGUge0NhY2hlQmF0Y2hPcGVyYXRpb259ICovXG4gICAgY29uc3Qgb3BlcmF0aW9uID0ge1xuICAgICAgdHlwZTogJ3B1dCcsIC8vIDE0LlxuICAgICAgcmVxdWVzdDogaW5uZXJSZXF1ZXN0LCAvLyAxNS5cbiAgICAgIHJlc3BvbnNlOiBjbG9uZWRSZXNwb25zZSAvLyAxNi5cbiAgICB9XG5cbiAgICAvLyAxNy5cbiAgICBvcGVyYXRpb25zLnB1c2gob3BlcmF0aW9uKVxuXG4gICAgLy8gMTkuXG4gICAgY29uc3QgYnl0ZXMgPSBhd2FpdCBib2R5UmVhZFByb21pc2UucHJvbWlzZVxuXG4gICAgaWYgKGNsb25lZFJlc3BvbnNlLmJvZHkgIT0gbnVsbCkge1xuICAgICAgY2xvbmVkUmVzcG9uc2UuYm9keS5zb3VyY2UgPSBieXRlc1xuICAgIH1cblxuICAgIC8vIDE5LjFcbiAgICBjb25zdCBjYWNoZUpvYlByb21pc2UgPSBjcmVhdGVEZWZlcnJlZFByb21pc2UoKVxuXG4gICAgLy8gMTkuMi4xXG4gICAgbGV0IGVycm9yRGF0YSA9IG51bGxcblxuICAgIC8vIDE5LjIuMlxuICAgIHRyeSB7XG4gICAgICB0aGlzLiNiYXRjaENhY2hlT3BlcmF0aW9ucyhvcGVyYXRpb25zKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGVycm9yRGF0YSA9IGVcbiAgICB9XG5cbiAgICAvLyAxOS4yLjNcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAvLyAxOS4yLjMuMVxuICAgICAgaWYgKGVycm9yRGF0YSA9PT0gbnVsbCkge1xuICAgICAgICBjYWNoZUpvYlByb21pc2UucmVzb2x2ZSgpXG4gICAgICB9IGVsc2UgeyAvLyAxOS4yLjMuMlxuICAgICAgICBjYWNoZUpvYlByb21pc2UucmVqZWN0KGVycm9yRGF0YSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIGNhY2hlSm9iUHJvbWlzZS5wcm9taXNlXG4gIH1cblxuICBhc3luYyBkZWxldGUgKHJlcXVlc3QsIG9wdGlvbnMgPSB7fSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlKVxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdDYWNoZS5kZWxldGUnIH0pXG5cbiAgICByZXF1ZXN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluZm8ocmVxdWVzdClcbiAgICBvcHRpb25zID0gd2ViaWRsLmNvbnZlcnRlcnMuQ2FjaGVRdWVyeU9wdGlvbnMob3B0aW9ucylcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtSZXF1ZXN0fVxuICAgICAqL1xuICAgIGxldCByID0gbnVsbFxuXG4gICAgaWYgKHJlcXVlc3QgaW5zdGFuY2VvZiBSZXF1ZXN0KSB7XG4gICAgICByID0gcmVxdWVzdFtrU3RhdGVdXG5cbiAgICAgIGlmIChyLm1ldGhvZCAhPT0gJ0dFVCcgJiYgIW9wdGlvbnMuaWdub3JlTWV0aG9kKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBhc3NlcnQodHlwZW9mIHJlcXVlc3QgPT09ICdzdHJpbmcnKVxuXG4gICAgICByID0gbmV3IFJlcXVlc3QocmVxdWVzdClba1N0YXRlXVxuICAgIH1cblxuICAgIC8qKiBAdHlwZSB7Q2FjaGVCYXRjaE9wZXJhdGlvbltdfSAqL1xuICAgIGNvbnN0IG9wZXJhdGlvbnMgPSBbXVxuXG4gICAgLyoqIEB0eXBlIHtDYWNoZUJhdGNoT3BlcmF0aW9ufSAqL1xuICAgIGNvbnN0IG9wZXJhdGlvbiA9IHtcbiAgICAgIHR5cGU6ICdkZWxldGUnLFxuICAgICAgcmVxdWVzdDogcixcbiAgICAgIG9wdGlvbnNcbiAgICB9XG5cbiAgICBvcGVyYXRpb25zLnB1c2gob3BlcmF0aW9uKVxuXG4gICAgY29uc3QgY2FjaGVKb2JQcm9taXNlID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKClcblxuICAgIGxldCBlcnJvckRhdGEgPSBudWxsXG4gICAgbGV0IHJlcXVlc3RSZXNwb25zZXNcblxuICAgIHRyeSB7XG4gICAgICByZXF1ZXN0UmVzcG9uc2VzID0gdGhpcy4jYmF0Y2hDYWNoZU9wZXJhdGlvbnMob3BlcmF0aW9ucylcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlcnJvckRhdGEgPSBlXG4gICAgfVxuXG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgaWYgKGVycm9yRGF0YSA9PT0gbnVsbCkge1xuICAgICAgICBjYWNoZUpvYlByb21pc2UucmVzb2x2ZSghIXJlcXVlc3RSZXNwb25zZXM/Lmxlbmd0aClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhY2hlSm9iUHJvbWlzZS5yZWplY3QoZXJyb3JEYXRhKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICByZXR1cm4gY2FjaGVKb2JQcm9taXNlLnByb21pc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNkb20tY2FjaGUta2V5c1xuICAgKiBAcGFyYW0ge2FueX0gcmVxdWVzdFxuICAgKiBAcGFyYW0ge2ltcG9ydCgnLi4vLi4vdHlwZXMvY2FjaGUnKS5DYWNoZVF1ZXJ5T3B0aW9uc30gb3B0aW9uc1xuICAgKiBAcmV0dXJucyB7cmVhZG9ubHkgUmVxdWVzdFtdfVxuICAgKi9cbiAgYXN5bmMga2V5cyAocmVxdWVzdCA9IHVuZGVmaW5lZCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGUpXG5cbiAgICBpZiAocmVxdWVzdCAhPT0gdW5kZWZpbmVkKSByZXF1ZXN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluZm8ocmVxdWVzdClcbiAgICBvcHRpb25zID0gd2ViaWRsLmNvbnZlcnRlcnMuQ2FjaGVRdWVyeU9wdGlvbnMob3B0aW9ucylcblxuICAgIC8vIDEuXG4gICAgbGV0IHIgPSBudWxsXG5cbiAgICAvLyAyLlxuICAgIGlmIChyZXF1ZXN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIDIuMVxuICAgICAgaWYgKHJlcXVlc3QgaW5zdGFuY2VvZiBSZXF1ZXN0KSB7XG4gICAgICAgIC8vIDIuMS4xXG4gICAgICAgIHIgPSByZXF1ZXN0W2tTdGF0ZV1cblxuICAgICAgICAvLyAyLjEuMlxuICAgICAgICBpZiAoci5tZXRob2QgIT09ICdHRVQnICYmICFvcHRpb25zLmlnbm9yZU1ldGhvZCkge1xuICAgICAgICAgIHJldHVybiBbXVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiByZXF1ZXN0ID09PSAnc3RyaW5nJykgeyAvLyAyLjJcbiAgICAgICAgciA9IG5ldyBSZXF1ZXN0KHJlcXVlc3QpW2tTdGF0ZV1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA0LlxuICAgIGNvbnN0IHByb21pc2UgPSBjcmVhdGVEZWZlcnJlZFByb21pc2UoKVxuXG4gICAgLy8gNS5cbiAgICAvLyA1LjFcbiAgICBjb25zdCByZXF1ZXN0cyA9IFtdXG5cbiAgICAvLyA1LjJcbiAgICBpZiAocmVxdWVzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyA1LjIuMVxuICAgICAgZm9yIChjb25zdCByZXF1ZXN0UmVzcG9uc2Ugb2YgdGhpcy4jcmVsZXZhbnRSZXF1ZXN0UmVzcG9uc2VMaXN0KSB7XG4gICAgICAgIC8vIDUuMi4xLjFcbiAgICAgICAgcmVxdWVzdHMucHVzaChyZXF1ZXN0UmVzcG9uc2VbMF0pXG4gICAgICB9XG4gICAgfSBlbHNlIHsgLy8gNS4zXG4gICAgICAvLyA1LjMuMVxuICAgICAgY29uc3QgcmVxdWVzdFJlc3BvbnNlcyA9IHRoaXMuI3F1ZXJ5Q2FjaGUociwgb3B0aW9ucylcblxuICAgICAgLy8gNS4zLjJcbiAgICAgIGZvciAoY29uc3QgcmVxdWVzdFJlc3BvbnNlIG9mIHJlcXVlc3RSZXNwb25zZXMpIHtcbiAgICAgICAgLy8gNS4zLjIuMVxuICAgICAgICByZXF1ZXN0cy5wdXNoKHJlcXVlc3RSZXNwb25zZVswXSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA1LjRcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAvLyA1LjQuMVxuICAgICAgY29uc3QgcmVxdWVzdExpc3QgPSBbXVxuXG4gICAgICAvLyA1LjQuMlxuICAgICAgZm9yIChjb25zdCByZXF1ZXN0IG9mIHJlcXVlc3RzKSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RPYmplY3QgPSBuZXcgUmVxdWVzdCgnaHR0cHM6Ly9hJylcbiAgICAgICAgcmVxdWVzdE9iamVjdFtrU3RhdGVdID0gcmVxdWVzdFxuICAgICAgICByZXF1ZXN0T2JqZWN0W2tIZWFkZXJzXVtrSGVhZGVyc0xpc3RdID0gcmVxdWVzdC5oZWFkZXJzTGlzdFxuICAgICAgICByZXF1ZXN0T2JqZWN0W2tIZWFkZXJzXVtrR3VhcmRdID0gJ2ltbXV0YWJsZSdcbiAgICAgICAgcmVxdWVzdE9iamVjdFtrUmVhbG1dID0gcmVxdWVzdC5jbGllbnRcblxuICAgICAgICAvLyA1LjQuMi4xXG4gICAgICAgIHJlcXVlc3RMaXN0LnB1c2gocmVxdWVzdE9iamVjdClcbiAgICAgIH1cblxuICAgICAgLy8gNS40LjNcbiAgICAgIHByb21pc2UucmVzb2x2ZShPYmplY3QuZnJlZXplKHJlcXVlc3RMaXN0KSlcbiAgICB9KVxuXG4gICAgcmV0dXJuIHByb21pc2UucHJvbWlzZVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2JhdGNoLWNhY2hlLW9wZXJhdGlvbnMtYWxnb3JpdGhtXG4gICAqIEBwYXJhbSB7Q2FjaGVCYXRjaE9wZXJhdGlvbltdfSBvcGVyYXRpb25zXG4gICAqIEByZXR1cm5zIHtyZXF1ZXN0UmVzcG9uc2VMaXN0fVxuICAgKi9cbiAgI2JhdGNoQ2FjaGVPcGVyYXRpb25zIChvcGVyYXRpb25zKSB7XG4gICAgLy8gMS5cbiAgICBjb25zdCBjYWNoZSA9IHRoaXMuI3JlbGV2YW50UmVxdWVzdFJlc3BvbnNlTGlzdFxuXG4gICAgLy8gMi5cbiAgICBjb25zdCBiYWNrdXBDYWNoZSA9IFsuLi5jYWNoZV1cblxuICAgIC8vIDMuXG4gICAgY29uc3QgYWRkZWRJdGVtcyA9IFtdXG5cbiAgICAvLyA0LjFcbiAgICBjb25zdCByZXN1bHRMaXN0ID0gW11cblxuICAgIHRyeSB7XG4gICAgICAvLyA0LjJcbiAgICAgIGZvciAoY29uc3Qgb3BlcmF0aW9uIG9mIG9wZXJhdGlvbnMpIHtcbiAgICAgICAgLy8gNC4yLjFcbiAgICAgICAgaWYgKG9wZXJhdGlvbi50eXBlICE9PSAnZGVsZXRlJyAmJiBvcGVyYXRpb24udHlwZSAhPT0gJ3B1dCcpIHtcbiAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICBoZWFkZXI6ICdDYWNoZS4jYmF0Y2hDYWNoZU9wZXJhdGlvbnMnLFxuICAgICAgICAgICAgbWVzc2FnZTogJ29wZXJhdGlvbiB0eXBlIGRvZXMgbm90IG1hdGNoIFwiZGVsZXRlXCIgb3IgXCJwdXRcIidcbiAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gNC4yLjJcbiAgICAgICAgaWYgKG9wZXJhdGlvbi50eXBlID09PSAnZGVsZXRlJyAmJiBvcGVyYXRpb24ucmVzcG9uc2UgIT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLiNiYXRjaENhY2hlT3BlcmF0aW9ucycsXG4gICAgICAgICAgICBtZXNzYWdlOiAnZGVsZXRlIG9wZXJhdGlvbiBzaG91bGQgbm90IGhhdmUgYW4gYXNzb2NpYXRlZCByZXNwb25zZSdcbiAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gNC4yLjNcbiAgICAgICAgaWYgKHRoaXMuI3F1ZXJ5Q2FjaGUob3BlcmF0aW9uLnJlcXVlc3QsIG9wZXJhdGlvbi5vcHRpb25zLCBhZGRlZEl0ZW1zKS5sZW5ndGgpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCc/Pz8nLCAnSW52YWxpZFN0YXRlRXJyb3InKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gNC4yLjRcbiAgICAgICAgbGV0IHJlcXVlc3RSZXNwb25zZXNcblxuICAgICAgICAvLyA0LjIuNVxuICAgICAgICBpZiAob3BlcmF0aW9uLnR5cGUgPT09ICdkZWxldGUnKSB7XG4gICAgICAgICAgLy8gNC4yLjUuMVxuICAgICAgICAgIHJlcXVlc3RSZXNwb25zZXMgPSB0aGlzLiNxdWVyeUNhY2hlKG9wZXJhdGlvbi5yZXF1ZXN0LCBvcGVyYXRpb24ub3B0aW9ucylcblxuICAgICAgICAgIC8vIFRPRE86IHRoZSBzcGVjIGlzIHdyb25nLCB0aGlzIGlzIG5lZWRlZCB0byBwYXNzIFdQVHNcbiAgICAgICAgICBpZiAocmVxdWVzdFJlc3BvbnNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBbXVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDQuMi41LjJcbiAgICAgICAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiByZXF1ZXN0UmVzcG9uc2VzKSB7XG4gICAgICAgICAgICBjb25zdCBpZHggPSBjYWNoZS5pbmRleE9mKHJlcXVlc3RSZXNwb25zZSlcbiAgICAgICAgICAgIGFzc2VydChpZHggIT09IC0xKVxuXG4gICAgICAgICAgICAvLyA0LjIuNS4yLjFcbiAgICAgICAgICAgIGNhY2hlLnNwbGljZShpZHgsIDEpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbi50eXBlID09PSAncHV0JykgeyAvLyA0LjIuNlxuICAgICAgICAgIC8vIDQuMi42LjFcbiAgICAgICAgICBpZiAob3BlcmF0aW9uLnJlc3BvbnNlID09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICAgICAgaGVhZGVyOiAnQ2FjaGUuI2JhdGNoQ2FjaGVPcGVyYXRpb25zJyxcbiAgICAgICAgICAgICAgbWVzc2FnZTogJ3B1dCBvcGVyYXRpb24gc2hvdWxkIGhhdmUgYW4gYXNzb2NpYXRlZCByZXNwb25zZSdcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gNC4yLjYuMlxuICAgICAgICAgIGNvbnN0IHIgPSBvcGVyYXRpb24ucmVxdWVzdFxuXG4gICAgICAgICAgLy8gNC4yLjYuM1xuICAgICAgICAgIGlmICghdXJsSXNIdHRwSHR0cHNTY2hlbWUoci51cmwpKSB7XG4gICAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLiNiYXRjaENhY2hlT3BlcmF0aW9ucycsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdleHBlY3RlZCBodHRwIG9yIGh0dHBzIHNjaGVtZSdcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gNC4yLjYuNFxuICAgICAgICAgIGlmIChyLm1ldGhvZCAhPT0gJ0dFVCcpIHtcbiAgICAgICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICAgICAgaGVhZGVyOiAnQ2FjaGUuI2JhdGNoQ2FjaGVPcGVyYXRpb25zJyxcbiAgICAgICAgICAgICAgbWVzc2FnZTogJ25vdCBnZXQgbWV0aG9kJ1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyA0LjIuNi41XG4gICAgICAgICAgaWYgKG9wZXJhdGlvbi5vcHRpb25zICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICAgICAgaGVhZGVyOiAnQ2FjaGUuI2JhdGNoQ2FjaGVPcGVyYXRpb25zJyxcbiAgICAgICAgICAgICAgbWVzc2FnZTogJ29wdGlvbnMgbXVzdCBub3QgYmUgZGVmaW5lZCdcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gNC4yLjYuNlxuICAgICAgICAgIHJlcXVlc3RSZXNwb25zZXMgPSB0aGlzLiNxdWVyeUNhY2hlKG9wZXJhdGlvbi5yZXF1ZXN0KVxuXG4gICAgICAgICAgLy8gNC4yLjYuN1xuICAgICAgICAgIGZvciAoY29uc3QgcmVxdWVzdFJlc3BvbnNlIG9mIHJlcXVlc3RSZXNwb25zZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGlkeCA9IGNhY2hlLmluZGV4T2YocmVxdWVzdFJlc3BvbnNlKVxuICAgICAgICAgICAgYXNzZXJ0KGlkeCAhPT0gLTEpXG5cbiAgICAgICAgICAgIC8vIDQuMi42LjcuMVxuICAgICAgICAgICAgY2FjaGUuc3BsaWNlKGlkeCwgMSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyA0LjIuNi44XG4gICAgICAgICAgY2FjaGUucHVzaChbb3BlcmF0aW9uLnJlcXVlc3QsIG9wZXJhdGlvbi5yZXNwb25zZV0pXG5cbiAgICAgICAgICAvLyA0LjIuNi4xMFxuICAgICAgICAgIGFkZGVkSXRlbXMucHVzaChbb3BlcmF0aW9uLnJlcXVlc3QsIG9wZXJhdGlvbi5yZXNwb25zZV0pXG4gICAgICAgIH1cblxuICAgICAgICAvLyA0LjIuN1xuICAgICAgICByZXN1bHRMaXN0LnB1c2goW29wZXJhdGlvbi5yZXF1ZXN0LCBvcGVyYXRpb24ucmVzcG9uc2VdKVxuICAgICAgfVxuXG4gICAgICAvLyA0LjNcbiAgICAgIHJldHVybiByZXN1bHRMaXN0XG4gICAgfSBjYXRjaCAoZSkgeyAvLyA1LlxuICAgICAgLy8gNS4xXG4gICAgICB0aGlzLiNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3QubGVuZ3RoID0gMFxuXG4gICAgICAvLyA1LjJcbiAgICAgIHRoaXMuI3JlbGV2YW50UmVxdWVzdFJlc3BvbnNlTGlzdCA9IGJhY2t1cENhY2hlXG5cbiAgICAgIC8vIDUuM1xuICAgICAgdGhyb3cgZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNxdWVyeS1jYWNoZVxuICAgKiBAcGFyYW0ge2FueX0gcmVxdWVzdFF1ZXJ5XG4gICAqIEBwYXJhbSB7aW1wb3J0KCcuLi8uLi90eXBlcy9jYWNoZScpLkNhY2hlUXVlcnlPcHRpb25zfSBvcHRpb25zXG4gICAqIEBwYXJhbSB7cmVxdWVzdFJlc3BvbnNlTGlzdH0gdGFyZ2V0U3RvcmFnZVxuICAgKiBAcmV0dXJucyB7cmVxdWVzdFJlc3BvbnNlTGlzdH1cbiAgICovXG4gICNxdWVyeUNhY2hlIChyZXF1ZXN0UXVlcnksIG9wdGlvbnMsIHRhcmdldFN0b3JhZ2UpIHtcbiAgICAvKiogQHR5cGUge3JlcXVlc3RSZXNwb25zZUxpc3R9ICovXG4gICAgY29uc3QgcmVzdWx0TGlzdCA9IFtdXG5cbiAgICBjb25zdCBzdG9yYWdlID0gdGFyZ2V0U3RvcmFnZSA/PyB0aGlzLiNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3RcblxuICAgIGZvciAoY29uc3QgcmVxdWVzdFJlc3BvbnNlIG9mIHN0b3JhZ2UpIHtcbiAgICAgIGNvbnN0IFtjYWNoZWRSZXF1ZXN0LCBjYWNoZWRSZXNwb25zZV0gPSByZXF1ZXN0UmVzcG9uc2VcbiAgICAgIGlmICh0aGlzLiNyZXF1ZXN0TWF0Y2hlc0NhY2hlZEl0ZW0ocmVxdWVzdFF1ZXJ5LCBjYWNoZWRSZXF1ZXN0LCBjYWNoZWRSZXNwb25zZSwgb3B0aW9ucykpIHtcbiAgICAgICAgcmVzdWx0TGlzdC5wdXNoKHJlcXVlc3RSZXNwb25zZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0TGlzdFxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI3JlcXVlc3QtbWF0Y2hlcy1jYWNoZWQtaXRlbS1hbGdvcml0aG1cbiAgICogQHBhcmFtIHthbnl9IHJlcXVlc3RRdWVyeVxuICAgKiBAcGFyYW0ge2FueX0gcmVxdWVzdFxuICAgKiBAcGFyYW0ge2FueSB8IG51bGx9IHJlc3BvbnNlXG4gICAqIEBwYXJhbSB7aW1wb3J0KCcuLi8uLi90eXBlcy9jYWNoZScpLkNhY2hlUXVlcnlPcHRpb25zIHwgdW5kZWZpbmVkfSBvcHRpb25zXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgI3JlcXVlc3RNYXRjaGVzQ2FjaGVkSXRlbSAocmVxdWVzdFF1ZXJ5LCByZXF1ZXN0LCByZXNwb25zZSA9IG51bGwsIG9wdGlvbnMpIHtcbiAgICAvLyBpZiAob3B0aW9ucz8uaWdub3JlTWV0aG9kID09PSBmYWxzZSAmJiByZXF1ZXN0Lm1ldGhvZCA9PT0gJ0dFVCcpIHtcbiAgICAvLyAgIHJldHVybiBmYWxzZVxuICAgIC8vIH1cblxuICAgIGNvbnN0IHF1ZXJ5VVJMID0gbmV3IFVSTChyZXF1ZXN0UXVlcnkudXJsKVxuXG4gICAgY29uc3QgY2FjaGVkVVJMID0gbmV3IFVSTChyZXF1ZXN0LnVybClcblxuICAgIGlmIChvcHRpb25zPy5pZ25vcmVTZWFyY2gpIHtcbiAgICAgIGNhY2hlZFVSTC5zZWFyY2ggPSAnJ1xuXG4gICAgICBxdWVyeVVSTC5zZWFyY2ggPSAnJ1xuICAgIH1cblxuICAgIGlmICghdXJsRXF1YWxzKHF1ZXJ5VVJMLCBjYWNoZWRVUkwsIHRydWUpKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICByZXNwb25zZSA9PSBudWxsIHx8XG4gICAgICBvcHRpb25zPy5pZ25vcmVWYXJ5IHx8XG4gICAgICAhcmVzcG9uc2UuaGVhZGVyc0xpc3QuY29udGFpbnMoJ3ZhcnknKVxuICAgICkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICBjb25zdCBmaWVsZFZhbHVlcyA9IGdldEZpZWxkVmFsdWVzKHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgndmFyeScpKVxuXG4gICAgZm9yIChjb25zdCBmaWVsZFZhbHVlIG9mIGZpZWxkVmFsdWVzKSB7XG4gICAgICBpZiAoZmllbGRWYWx1ZSA9PT0gJyonKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuXG4gICAgICBjb25zdCByZXF1ZXN0VmFsdWUgPSByZXF1ZXN0LmhlYWRlcnNMaXN0LmdldChmaWVsZFZhbHVlKVxuICAgICAgY29uc3QgcXVlcnlWYWx1ZSA9IHJlcXVlc3RRdWVyeS5oZWFkZXJzTGlzdC5nZXQoZmllbGRWYWx1ZSlcblxuICAgICAgLy8gSWYgb25lIGhhcyB0aGUgaGVhZGVyIGFuZCB0aGUgb3RoZXIgZG9lc24ndCwgb3Igb25lIGhhc1xuICAgICAgLy8gYSBkaWZmZXJlbnQgdmFsdWUgdGhhbiB0aGUgb3RoZXIsIHJldHVybiBmYWxzZVxuICAgICAgaWYgKHJlcXVlc3RWYWx1ZSAhPT0gcXVlcnlWYWx1ZSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENhY2hlLnByb3RvdHlwZSwge1xuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnQ2FjaGUnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9LFxuICBtYXRjaDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgbWF0Y2hBbGw6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGFkZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYWRkQWxsOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBwdXQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGRlbGV0ZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAga2V5czoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxuY29uc3QgY2FjaGVRdWVyeU9wdGlvbkNvbnZlcnRlcnMgPSBbXG4gIHtcbiAgICBrZXk6ICdpZ25vcmVTZWFyY2gnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdpZ25vcmVNZXRob2QnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdpZ25vcmVWYXJ5JyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4sXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZVxuICB9XG5dXG5cbndlYmlkbC5jb252ZXJ0ZXJzLkNhY2hlUXVlcnlPcHRpb25zID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoY2FjaGVRdWVyeU9wdGlvbkNvbnZlcnRlcnMpXG5cbndlYmlkbC5jb252ZXJ0ZXJzLk11bHRpQ2FjaGVRdWVyeU9wdGlvbnMgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIC4uLmNhY2hlUXVlcnlPcHRpb25Db252ZXJ0ZXJzLFxuICB7XG4gICAga2V5OiAnY2FjaGVOYW1lJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZ1xuICB9XG5dKVxuXG53ZWJpZGwuY29udmVydGVycy5SZXNwb25zZSA9IHdlYmlkbC5pbnRlcmZhY2VDb252ZXJ0ZXIoUmVzcG9uc2UpXG5cbndlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxSZXF1ZXN0SW5mbz4nXSA9IHdlYmlkbC5zZXF1ZW5jZUNvbnZlcnRlcihcbiAgd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluZm9cbilcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIENhY2hlXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGtDb25zdHJ1Y3QgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IENhY2hlIH0gPSByZXF1aXJlKCcuL2NhY2hlJylcbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuLi9mZXRjaC93ZWJpZGwnKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5IH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuXG5jbGFzcyBDYWNoZVN0b3JhZ2Uge1xuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jZGZuLXJlbGV2YW50LW5hbWUtdG8tY2FjaGUtbWFwXG4gICAqIEB0eXBlIHtNYXA8c3RyaW5nLCBpbXBvcnQoJy4vY2FjaGUnKS5yZXF1ZXN0UmVzcG9uc2VMaXN0fVxuICAgKi9cbiAgI2NhY2hlcyA9IG5ldyBNYXAoKVxuXG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICBpZiAoYXJndW1lbnRzWzBdICE9PSBrQ29uc3RydWN0KSB7XG4gICAgICB3ZWJpZGwuaWxsZWdhbENvbnN0cnVjdG9yKClcbiAgICB9XG4gIH1cblxuICBhc3luYyBtYXRjaCAocmVxdWVzdCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGVTdG9yYWdlKVxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdDYWNoZVN0b3JhZ2UubWF0Y2gnIH0pXG5cbiAgICByZXF1ZXN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluZm8ocmVxdWVzdClcbiAgICBvcHRpb25zID0gd2ViaWRsLmNvbnZlcnRlcnMuTXVsdGlDYWNoZVF1ZXJ5T3B0aW9ucyhvcHRpb25zKVxuXG4gICAgLy8gMS5cbiAgICBpZiAob3B0aW9ucy5jYWNoZU5hbWUgIT0gbnVsbCkge1xuICAgICAgLy8gMS4xLjEuMVxuICAgICAgaWYgKHRoaXMuI2NhY2hlcy5oYXMob3B0aW9ucy5jYWNoZU5hbWUpKSB7XG4gICAgICAgIC8vIDEuMS4xLjEuMVxuICAgICAgICBjb25zdCBjYWNoZUxpc3QgPSB0aGlzLiNjYWNoZXMuZ2V0KG9wdGlvbnMuY2FjaGVOYW1lKVxuICAgICAgICBjb25zdCBjYWNoZSA9IG5ldyBDYWNoZShrQ29uc3RydWN0LCBjYWNoZUxpc3QpXG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IGNhY2hlLm1hdGNoKHJlcXVlc3QsIG9wdGlvbnMpXG4gICAgICB9XG4gICAgfSBlbHNlIHsgLy8gMi5cbiAgICAgIC8vIDIuMlxuICAgICAgZm9yIChjb25zdCBjYWNoZUxpc3Qgb2YgdGhpcy4jY2FjaGVzLnZhbHVlcygpKSB7XG4gICAgICAgIGNvbnN0IGNhY2hlID0gbmV3IENhY2hlKGtDb25zdHJ1Y3QsIGNhY2hlTGlzdClcblxuICAgICAgICAvLyAyLjIuMS4yXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2FjaGUubWF0Y2gocmVxdWVzdCwgb3B0aW9ucylcblxuICAgICAgICBpZiAocmVzcG9uc2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2NhY2hlLXN0b3JhZ2UtaGFzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWVcbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59XG4gICAqL1xuICBhc3luYyBoYXMgKGNhY2hlTmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlU3RvcmFnZSlcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnQ2FjaGVTdG9yYWdlLmhhcycgfSlcblxuICAgIGNhY2hlTmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyhjYWNoZU5hbWUpXG5cbiAgICAvLyAyLjEuMVxuICAgIC8vIDIuMlxuICAgIHJldHVybiB0aGlzLiNjYWNoZXMuaGFzKGNhY2hlTmFtZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNkb20tY2FjaGVzdG9yYWdlLW9wZW5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNhY2hlTmFtZVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDYWNoZT59XG4gICAqL1xuICBhc3luYyBvcGVuIChjYWNoZU5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZVN0b3JhZ2UpXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0NhY2hlU3RvcmFnZS5vcGVuJyB9KVxuXG4gICAgY2FjaGVOYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKGNhY2hlTmFtZSlcblxuICAgIC8vIDIuMVxuICAgIGlmICh0aGlzLiNjYWNoZXMuaGFzKGNhY2hlTmFtZSkpIHtcbiAgICAgIC8vIGF3YWl0IGNhY2hlcy5vcGVuKCd2MScpICE9PSBhd2FpdCBjYWNoZXMub3BlbigndjEnKVxuXG4gICAgICAvLyAyLjEuMVxuICAgICAgY29uc3QgY2FjaGUgPSB0aGlzLiNjYWNoZXMuZ2V0KGNhY2hlTmFtZSlcblxuICAgICAgLy8gMi4xLjEuMVxuICAgICAgcmV0dXJuIG5ldyBDYWNoZShrQ29uc3RydWN0LCBjYWNoZSlcbiAgICB9XG5cbiAgICAvLyAyLjJcbiAgICBjb25zdCBjYWNoZSA9IFtdXG5cbiAgICAvLyAyLjNcbiAgICB0aGlzLiNjYWNoZXMuc2V0KGNhY2hlTmFtZSwgY2FjaGUpXG5cbiAgICAvLyAyLjRcbiAgICByZXR1cm4gbmV3IENhY2hlKGtDb25zdHJ1Y3QsIGNhY2hlKVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2NhY2hlLXN0b3JhZ2UtZGVsZXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWVcbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59XG4gICAqL1xuICBhc3luYyBkZWxldGUgKGNhY2hlTmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlU3RvcmFnZSlcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnQ2FjaGVTdG9yYWdlLmRlbGV0ZScgfSlcblxuICAgIGNhY2hlTmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyhjYWNoZU5hbWUpXG5cbiAgICByZXR1cm4gdGhpcy4jY2FjaGVzLmRlbGV0ZShjYWNoZU5hbWUpXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jY2FjaGUtc3RvcmFnZS1rZXlzXG4gICAqIEByZXR1cm5zIHtzdHJpbmdbXX1cbiAgICovXG4gIGFzeW5jIGtleXMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlU3RvcmFnZSlcblxuICAgIC8vIDIuMVxuICAgIGNvbnN0IGtleXMgPSB0aGlzLiNjYWNoZXMua2V5cygpXG5cbiAgICAvLyAyLjJcbiAgICByZXR1cm4gWy4uLmtleXNdXG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2FjaGVTdG9yYWdlLnByb3RvdHlwZSwge1xuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnQ2FjaGVTdG9yYWdlJyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSxcbiAgbWF0Y2g6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGhhczoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb3Blbjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZGVsZXRlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBrZXlzOiBrRW51bWVyYWJsZVByb3BlcnR5XG59KVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQ2FjaGVTdG9yYWdlXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG4vLyBodHRwczovL3dpY2cuZ2l0aHViLmlvL2Nvb2tpZS1zdG9yZS8jY29va2llLW1heGltdW0tYXR0cmlidXRlLXZhbHVlLXNpemVcbmNvbnN0IG1heEF0dHJpYnV0ZVZhbHVlU2l6ZSA9IDEwMjRcblxuLy8gaHR0cHM6Ly93aWNnLmdpdGh1Yi5pby9jb29raWUtc3RvcmUvI2Nvb2tpZS1tYXhpbXVtLW5hbWUtdmFsdWUtcGFpci1zaXplXG5jb25zdCBtYXhOYW1lVmFsdWVQYWlyU2l6ZSA9IDQwOTZcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1heEF0dHJpYnV0ZVZhbHVlU2l6ZSxcbiAgbWF4TmFtZVZhbHVlUGFpclNpemVcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7IGtIZWFkZXJzTGlzdCB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcblxuZnVuY3Rpb24gaXNDVExFeGNsdWRpbmdIdGFiICh2YWx1ZSkge1xuICBpZiAodmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBmb3IgKGNvbnN0IGNoYXIgb2YgdmFsdWUpIHtcbiAgICBjb25zdCBjb2RlID0gY2hhci5jaGFyQ29kZUF0KDApXG5cbiAgICBpZiAoXG4gICAgICAoY29kZSA+PSAweDAwIHx8IGNvZGUgPD0gMHgwOCkgfHxcbiAgICAgIChjb2RlID49IDB4MEEgfHwgY29kZSA8PSAweDFGKSB8fFxuICAgICAgY29kZSA9PT0gMHg3RlxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG59XG5cbi8qKlxuIENIQVIgICAgICAgICAgID0gPGFueSBVUy1BU0NJSSBjaGFyYWN0ZXIgKG9jdGV0cyAwIC0gMTI3KT5cbiB0b2tlbiAgICAgICAgICA9IDEqPGFueSBDSEFSIGV4Y2VwdCBDVExzIG9yIHNlcGFyYXRvcnM+XG4gc2VwYXJhdG9ycyAgICAgPSBcIihcIiB8IFwiKVwiIHwgXCI8XCIgfCBcIj5cIiB8IFwiQFwiXG4gICAgICAgICAgICAgICAgfCBcIixcIiB8IFwiO1wiIHwgXCI6XCIgfCBcIlxcXCIgfCA8XCI+XG4gICAgICAgICAgICAgICAgfCBcIi9cIiB8IFwiW1wiIHwgXCJdXCIgfCBcIj9cIiB8IFwiPVwiXG4gICAgICAgICAgICAgICAgfCBcIntcIiB8IFwifVwiIHwgU1AgfCBIVFxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVDb29raWVOYW1lIChuYW1lKSB7XG4gIGZvciAoY29uc3QgY2hhciBvZiBuYW1lKSB7XG4gICAgY29uc3QgY29kZSA9IGNoYXIuY2hhckNvZGVBdCgwKVxuXG4gICAgaWYgKFxuICAgICAgKGNvZGUgPD0gMHgyMCB8fCBjb2RlID4gMHg3RikgfHxcbiAgICAgIGNoYXIgPT09ICcoJyB8fFxuICAgICAgY2hhciA9PT0gJyknIHx8XG4gICAgICBjaGFyID09PSAnPicgfHxcbiAgICAgIGNoYXIgPT09ICc8JyB8fFxuICAgICAgY2hhciA9PT0gJ0AnIHx8XG4gICAgICBjaGFyID09PSAnLCcgfHxcbiAgICAgIGNoYXIgPT09ICc7JyB8fFxuICAgICAgY2hhciA9PT0gJzonIHx8XG4gICAgICBjaGFyID09PSAnXFxcXCcgfHxcbiAgICAgIGNoYXIgPT09ICdcIicgfHxcbiAgICAgIGNoYXIgPT09ICcvJyB8fFxuICAgICAgY2hhciA9PT0gJ1snIHx8XG4gICAgICBjaGFyID09PSAnXScgfHxcbiAgICAgIGNoYXIgPT09ICc/JyB8fFxuICAgICAgY2hhciA9PT0gJz0nIHx8XG4gICAgICBjaGFyID09PSAneycgfHxcbiAgICAgIGNoYXIgPT09ICd9J1xuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvb2tpZSBuYW1lJylcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gY29va2llLXZhbHVlICAgICAgPSAqY29va2llLW9jdGV0IC8gKCBEUVVPVEUgKmNvb2tpZS1vY3RldCBEUVVPVEUgKVxuIGNvb2tpZS1vY3RldCAgICAgID0gJXgyMSAvICV4MjMtMkIgLyAleDJELTNBIC8gJXgzQy01QiAvICV4NUQtN0VcbiAgICAgICAgICAgICAgICAgICAgICAgOyBVUy1BU0NJSSBjaGFyYWN0ZXJzIGV4Y2x1ZGluZyBDVExzLFxuICAgICAgICAgICAgICAgICAgICAgICA7IHdoaXRlc3BhY2UgRFFVT1RFLCBjb21tYSwgc2VtaWNvbG9uLFxuICAgICAgICAgICAgICAgICAgICAgICA7IGFuZCBiYWNrc2xhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUNvb2tpZVZhbHVlICh2YWx1ZSkge1xuICBmb3IgKGNvbnN0IGNoYXIgb2YgdmFsdWUpIHtcbiAgICBjb25zdCBjb2RlID0gY2hhci5jaGFyQ29kZUF0KDApXG5cbiAgICBpZiAoXG4gICAgICBjb2RlIDwgMHgyMSB8fCAvLyBleGNsdWRlIENUTHMgKDAtMzEpXG4gICAgICBjb2RlID09PSAweDIyIHx8XG4gICAgICBjb2RlID09PSAweDJDIHx8XG4gICAgICBjb2RlID09PSAweDNCIHx8XG4gICAgICBjb2RlID09PSAweDVDIHx8XG4gICAgICBjb2RlID4gMHg3RSAvLyBub24tYXNjaWlcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBoZWFkZXIgdmFsdWUnKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIHBhdGgtdmFsdWUgICAgICAgID0gPGFueSBDSEFSIGV4Y2VwdCBDVExzIG9yIFwiO1wiPlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVDb29raWVQYXRoIChwYXRoKSB7XG4gIGZvciAoY29uc3QgY2hhciBvZiBwYXRoKSB7XG4gICAgY29uc3QgY29kZSA9IGNoYXIuY2hhckNvZGVBdCgwKVxuXG4gICAgaWYgKGNvZGUgPCAweDIxIHx8IGNoYXIgPT09ICc7Jykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvb2tpZSBwYXRoJylcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBJIGhhdmUgbm8gaWRlYSB3aHkgdGhlc2UgdmFsdWVzIGFyZW4ndCBhbGxvd2VkIHRvIGJlIGhvbmVzdCxcbiAqIGJ1dCBEZW5vIHRlc3RzIHRoZXNlLiAtIEtoYWZyYVxuICogQHBhcmFtIHtzdHJpbmd9IGRvbWFpblxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUNvb2tpZURvbWFpbiAoZG9tYWluKSB7XG4gIGlmIChcbiAgICBkb21haW4uc3RhcnRzV2l0aCgnLScpIHx8XG4gICAgZG9tYWluLmVuZHNXaXRoKCcuJykgfHxcbiAgICBkb21haW4uZW5kc1dpdGgoJy0nKVxuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29va2llIGRvbWFpbicpXG4gIH1cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM3MjMxI3NlY3Rpb24tNy4xLjEuMVxuICogQHBhcmFtIHtudW1iZXJ8RGF0ZX0gZGF0ZVxuICBJTUYtZml4ZGF0ZSAgPSBkYXktbmFtZSBcIixcIiBTUCBkYXRlMSBTUCB0aW1lLW9mLWRheSBTUCBHTVRcbiAgOyBmaXhlZCBsZW5ndGgvem9uZS9jYXBpdGFsaXphdGlvbiBzdWJzZXQgb2YgdGhlIGZvcm1hdFxuICA7IHNlZSBTZWN0aW9uIDMuMyBvZiBbUkZDNTMyMl1cblxuICBkYXktbmFtZSAgICAgPSAleDRELjZGLjZFIDsgXCJNb25cIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDU0Ljc1LjY1IDsgXCJUdWVcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDU3LjY1LjY0IDsgXCJXZWRcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDU0LjY4Ljc1IDsgXCJUaHVcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDQ2LjcyLjY5IDsgXCJGcmlcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDUzLjYxLjc0IDsgXCJTYXRcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDUzLjc1LjZFIDsgXCJTdW5cIiwgY2FzZS1zZW5zaXRpdmVcbiAgZGF0ZTEgICAgICAgID0gZGF5IFNQIG1vbnRoIFNQIHllYXJcbiAgICAgICAgICAgICAgICAgIDsgZS5nLiwgMDIgSnVuIDE5ODJcblxuICBkYXkgICAgICAgICAgPSAyRElHSVRcbiAgbW9udGggICAgICAgID0gJXg0QS42MS42RSA7IFwiSmFuXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0Ni42NS42MiA7IFwiRmViXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0RC42MS43MiA7IFwiTWFyXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0MS43MC43MiA7IFwiQXByXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0RC42MS43OSA7IFwiTWF5XCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0QS43NS42RSA7IFwiSnVuXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0QS43NS42QyA7IFwiSnVsXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0MS43NS42NyA7IFwiQXVnXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg1My42NS43MCA7IFwiU2VwXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0Ri42My43NCA7IFwiT2N0XCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0RS42Ri43NiA7IFwiTm92XCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0NC42NS42MyA7IFwiRGVjXCIsIGNhc2Utc2Vuc2l0aXZlXG4gIHllYXIgICAgICAgICA9IDRESUdJVFxuXG4gIEdNVCAgICAgICAgICA9ICV4NDcuNEQuNTQgOyBcIkdNVFwiLCBjYXNlLXNlbnNpdGl2ZVxuXG4gIHRpbWUtb2YtZGF5ICA9IGhvdXIgXCI6XCIgbWludXRlIFwiOlwiIHNlY29uZFxuICAgICAgICAgICAgICA7IDAwOjAwOjAwIC0gMjM6NTk6NjAgKGxlYXAgc2Vjb25kKVxuXG4gIGhvdXIgICAgICAgICA9IDJESUdJVFxuICBtaW51dGUgICAgICAgPSAyRElHSVRcbiAgc2Vjb25kICAgICAgID0gMkRJR0lUXG4gKi9cbmZ1bmN0aW9uIHRvSU1GRGF0ZSAoZGF0ZSkge1xuICBpZiAodHlwZW9mIGRhdGUgPT09ICdudW1iZXInKSB7XG4gICAgZGF0ZSA9IG5ldyBEYXRlKGRhdGUpXG4gIH1cblxuICBjb25zdCBkYXlzID0gW1xuICAgICdTdW4nLCAnTW9uJywgJ1R1ZScsICdXZWQnLFxuICAgICdUaHUnLCAnRnJpJywgJ1NhdCdcbiAgXVxuXG4gIGNvbnN0IG1vbnRocyA9IFtcbiAgICAnSmFuJywgJ0ZlYicsICdNYXInLCAnQXByJywgJ01heScsICdKdW4nLFxuICAgICdKdWwnLCAnQXVnJywgJ1NlcCcsICdPY3QnLCAnTm92JywgJ0RlYydcbiAgXVxuXG4gIGNvbnN0IGRheU5hbWUgPSBkYXlzW2RhdGUuZ2V0VVRDRGF5KCldXG4gIGNvbnN0IGRheSA9IGRhdGUuZ2V0VVRDRGF0ZSgpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKVxuICBjb25zdCBtb250aCA9IG1vbnRoc1tkYXRlLmdldFVUQ01vbnRoKCldXG4gIGNvbnN0IHllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKClcbiAgY29uc3QgaG91ciA9IGRhdGUuZ2V0VVRDSG91cnMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcbiAgY29uc3QgbWludXRlID0gZGF0ZS5nZXRVVENNaW51dGVzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpXG4gIGNvbnN0IHNlY29uZCA9IGRhdGUuZ2V0VVRDU2Vjb25kcygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKVxuXG4gIHJldHVybiBgJHtkYXlOYW1lfSwgJHtkYXl9ICR7bW9udGh9ICR7eWVhcn0gJHtob3VyfToke21pbnV0ZX06JHtzZWNvbmR9IEdNVGBcbn1cblxuLyoqXG4gbWF4LWFnZS1hdiAgICAgICAgPSBcIk1heC1BZ2U9XCIgbm9uLXplcm8tZGlnaXQgKkRJR0lUXG4gICAgICAgICAgICAgICAgICAgICAgIDsgSW4gcHJhY3RpY2UsIGJvdGggZXhwaXJlcy1hdiBhbmQgbWF4LWFnZS1hdlxuICAgICAgICAgICAgICAgICAgICAgICA7IGFyZSBsaW1pdGVkIHRvIGRhdGVzIHJlcHJlc2VudGFibGUgYnkgdGhlXG4gICAgICAgICAgICAgICAgICAgICAgIDsgdXNlciBhZ2VudC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBtYXhBZ2VcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVDb29raWVNYXhBZ2UgKG1heEFnZSkge1xuICBpZiAobWF4QWdlIDwgMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb29raWUgbWF4LWFnZScpXG4gIH1cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM2MjY1I3NlY3Rpb24tNC4xLjFcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL2luZGV4JykuQ29va2llfSBjb29raWVcbiAqL1xuZnVuY3Rpb24gc3RyaW5naWZ5IChjb29raWUpIHtcbiAgaWYgKGNvb2tpZS5uYW1lLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICB2YWxpZGF0ZUNvb2tpZU5hbWUoY29va2llLm5hbWUpXG4gIHZhbGlkYXRlQ29va2llVmFsdWUoY29va2llLnZhbHVlKVxuXG4gIGNvbnN0IG91dCA9IFtgJHtjb29raWUubmFtZX09JHtjb29raWUudmFsdWV9YF1cblxuICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1jb29raWUtcHJlZml4ZXMtMDAjc2VjdGlvbi0zLjFcbiAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtY29va2llLXByZWZpeGVzLTAwI3NlY3Rpb24tMy4yXG4gIGlmIChjb29raWUubmFtZS5zdGFydHNXaXRoKCdfX1NlY3VyZS0nKSkge1xuICAgIGNvb2tpZS5zZWN1cmUgPSB0cnVlXG4gIH1cblxuICBpZiAoY29va2llLm5hbWUuc3RhcnRzV2l0aCgnX19Ib3N0LScpKSB7XG4gICAgY29va2llLnNlY3VyZSA9IHRydWVcbiAgICBjb29raWUuZG9tYWluID0gbnVsbFxuICAgIGNvb2tpZS5wYXRoID0gJy8nXG4gIH1cblxuICBpZiAoY29va2llLnNlY3VyZSkge1xuICAgIG91dC5wdXNoKCdTZWN1cmUnKVxuICB9XG5cbiAgaWYgKGNvb2tpZS5odHRwT25seSkge1xuICAgIG91dC5wdXNoKCdIdHRwT25seScpXG4gIH1cblxuICBpZiAodHlwZW9mIGNvb2tpZS5tYXhBZ2UgPT09ICdudW1iZXInKSB7XG4gICAgdmFsaWRhdGVDb29raWVNYXhBZ2UoY29va2llLm1heEFnZSlcbiAgICBvdXQucHVzaChgTWF4LUFnZT0ke2Nvb2tpZS5tYXhBZ2V9YClcbiAgfVxuXG4gIGlmIChjb29raWUuZG9tYWluKSB7XG4gICAgdmFsaWRhdGVDb29raWVEb21haW4oY29va2llLmRvbWFpbilcbiAgICBvdXQucHVzaChgRG9tYWluPSR7Y29va2llLmRvbWFpbn1gKVxuICB9XG5cbiAgaWYgKGNvb2tpZS5wYXRoKSB7XG4gICAgdmFsaWRhdGVDb29raWVQYXRoKGNvb2tpZS5wYXRoKVxuICAgIG91dC5wdXNoKGBQYXRoPSR7Y29va2llLnBhdGh9YClcbiAgfVxuXG4gIGlmIChjb29raWUuZXhwaXJlcyAmJiBjb29raWUuZXhwaXJlcy50b1N0cmluZygpICE9PSAnSW52YWxpZCBEYXRlJykge1xuICAgIG91dC5wdXNoKGBFeHBpcmVzPSR7dG9JTUZEYXRlKGNvb2tpZS5leHBpcmVzKX1gKVxuICB9XG5cbiAgaWYgKGNvb2tpZS5zYW1lU2l0ZSkge1xuICAgIG91dC5wdXNoKGBTYW1lU2l0ZT0ke2Nvb2tpZS5zYW1lU2l0ZX1gKVxuICB9XG5cbiAgZm9yIChjb25zdCBwYXJ0IG9mIGNvb2tpZS51bnBhcnNlZCkge1xuICAgIGlmICghcGFydC5pbmNsdWRlcygnPScpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdW5wYXJzZWQnKVxuICAgIH1cblxuICAgIGNvbnN0IFtrZXksIC4uLnZhbHVlXSA9IHBhcnQuc3BsaXQoJz0nKVxuXG4gICAgb3V0LnB1c2goYCR7a2V5LnRyaW0oKX09JHt2YWx1ZS5qb2luKCc9Jyl9YClcbiAgfVxuXG4gIHJldHVybiBvdXQuam9pbignOyAnKVxufVxuXG5sZXQga0hlYWRlcnNMaXN0Tm9kZVxuXG5mdW5jdGlvbiBnZXRIZWFkZXJzTGlzdCAoaGVhZGVycykge1xuICBpZiAoaGVhZGVyc1trSGVhZGVyc0xpc3RdKSB7XG4gICAgcmV0dXJuIGhlYWRlcnNba0hlYWRlcnNMaXN0XVxuICB9XG5cbiAgaWYgKCFrSGVhZGVyc0xpc3ROb2RlKSB7XG4gICAga0hlYWRlcnNMaXN0Tm9kZSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaGVhZGVycykuZmluZChcbiAgICAgIChzeW1ib2wpID0+IHN5bWJvbC5kZXNjcmlwdGlvbiA9PT0gJ2hlYWRlcnMgbGlzdCdcbiAgICApXG5cbiAgICBhc3NlcnQoa0hlYWRlcnNMaXN0Tm9kZSwgJ0hlYWRlcnMgY2Fubm90IGJlIHBhcnNlZCcpXG4gIH1cblxuICBjb25zdCBoZWFkZXJzTGlzdCA9IGhlYWRlcnNba0hlYWRlcnNMaXN0Tm9kZV1cbiAgYXNzZXJ0KGhlYWRlcnNMaXN0KVxuXG4gIHJldHVybiBoZWFkZXJzTGlzdFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXNDVExFeGNsdWRpbmdIdGFiLFxuICBzdHJpbmdpZnksXG4gIGdldEhlYWRlcnNMaXN0XG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IG1heE5hbWVWYWx1ZVBhaXJTaXplLCBtYXhBdHRyaWJ1dGVWYWx1ZVNpemUgfSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IHsgaXNDVExFeGNsdWRpbmdIdGFiIH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvZGF0YVVSTCcpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBQYXJzZXMgdGhlIGZpZWxkLXZhbHVlIGF0dHJpYnV0ZXMgb2YgYSBzZXQtY29va2llIGhlYWRlciBzdHJpbmcuXG4gKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjRcbiAqIEBwYXJhbSB7c3RyaW5nfSBoZWFkZXJcbiAqIEByZXR1cm5zIGlmIHRoZSBoZWFkZXIgaXMgaW52YWxpZCwgbnVsbCB3aWxsIGJlIHJldHVybmVkXG4gKi9cbmZ1bmN0aW9uIHBhcnNlU2V0Q29va2llIChoZWFkZXIpIHtcbiAgLy8gMS4gSWYgdGhlIHNldC1jb29raWUtc3RyaW5nIGNvbnRhaW5zIGEgJXgwMC0wOCAvICV4MEEtMUYgLyAleDdGXG4gIC8vICAgIGNoYXJhY3RlciAoQ1RMIGNoYXJhY3RlcnMgZXhjbHVkaW5nIEhUQUIpOiBBYm9ydCB0aGVzZSBzdGVwcyBhbmRcbiAgLy8gICAgaWdub3JlIHRoZSBzZXQtY29va2llLXN0cmluZyBlbnRpcmVseS5cbiAgaWYgKGlzQ1RMRXhjbHVkaW5nSHRhYihoZWFkZXIpKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGxldCBuYW1lVmFsdWVQYWlyID0gJydcbiAgbGV0IHVucGFyc2VkQXR0cmlidXRlcyA9ICcnXG4gIGxldCBuYW1lID0gJydcbiAgbGV0IHZhbHVlID0gJydcblxuICAvLyAyLiBJZiB0aGUgc2V0LWNvb2tpZS1zdHJpbmcgY29udGFpbnMgYSAleDNCIChcIjtcIikgY2hhcmFjdGVyOlxuICBpZiAoaGVhZGVyLmluY2x1ZGVzKCc7JykpIHtcbiAgICAvLyAxLiBUaGUgbmFtZS12YWx1ZS1wYWlyIHN0cmluZyBjb25zaXN0cyBvZiB0aGUgY2hhcmFjdGVycyB1cCB0byxcbiAgICAvLyAgICBidXQgbm90IGluY2x1ZGluZywgdGhlIGZpcnN0ICV4M0IgKFwiO1wiKSwgYW5kIHRoZSB1bnBhcnNlZC1cbiAgICAvLyAgICBhdHRyaWJ1dGVzIGNvbnNpc3Qgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgc2V0LWNvb2tpZS1zdHJpbmdcbiAgICAvLyAgICAoaW5jbHVkaW5nIHRoZSAleDNCIChcIjtcIikgaW4gcXVlc3Rpb24pLlxuICAgIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogMCB9XG5cbiAgICBuYW1lVmFsdWVQYWlyID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoJzsnLCBoZWFkZXIsIHBvc2l0aW9uKVxuICAgIHVucGFyc2VkQXR0cmlidXRlcyA9IGhlYWRlci5zbGljZShwb3NpdGlvbi5wb3NpdGlvbilcbiAgfSBlbHNlIHtcbiAgICAvLyBPdGhlcndpc2U6XG5cbiAgICAvLyAxLiBUaGUgbmFtZS12YWx1ZS1wYWlyIHN0cmluZyBjb25zaXN0cyBvZiBhbGwgdGhlIGNoYXJhY3RlcnNcbiAgICAvLyAgICBjb250YWluZWQgaW4gdGhlIHNldC1jb29raWUtc3RyaW5nLCBhbmQgdGhlIHVucGFyc2VkLVxuICAgIC8vICAgIGF0dHJpYnV0ZXMgaXMgdGhlIGVtcHR5IHN0cmluZy5cbiAgICBuYW1lVmFsdWVQYWlyID0gaGVhZGVyXG4gIH1cblxuICAvLyAzLiBJZiB0aGUgbmFtZS12YWx1ZS1wYWlyIHN0cmluZyBsYWNrcyBhICV4M0QgKFwiPVwiKSBjaGFyYWN0ZXIsIHRoZW5cbiAgLy8gICAgdGhlIG5hbWUgc3RyaW5nIGlzIGVtcHR5LCBhbmQgdGhlIHZhbHVlIHN0cmluZyBpcyB0aGUgdmFsdWUgb2ZcbiAgLy8gICAgbmFtZS12YWx1ZS1wYWlyLlxuICBpZiAoIW5hbWVWYWx1ZVBhaXIuaW5jbHVkZXMoJz0nKSkge1xuICAgIHZhbHVlID0gbmFtZVZhbHVlUGFpclxuICB9IGVsc2Uge1xuICAgIC8vICAgIE90aGVyd2lzZSwgdGhlIG5hbWUgc3RyaW5nIGNvbnNpc3RzIG9mIHRoZSBjaGFyYWN0ZXJzIHVwIHRvLCBidXRcbiAgICAvLyAgICBub3QgaW5jbHVkaW5nLCB0aGUgZmlyc3QgJXgzRCAoXCI9XCIpIGNoYXJhY3RlciwgYW5kIHRoZSAocG9zc2libHlcbiAgICAvLyAgICBlbXB0eSkgdmFsdWUgc3RyaW5nIGNvbnNpc3RzIG9mIHRoZSBjaGFyYWN0ZXJzIGFmdGVyIHRoZSBmaXJzdFxuICAgIC8vICAgICV4M0QgKFwiPVwiKSBjaGFyYWN0ZXIuXG4gICAgY29uc3QgcG9zaXRpb24gPSB7IHBvc2l0aW9uOiAwIH1cbiAgICBuYW1lID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoXG4gICAgICAnPScsXG4gICAgICBuYW1lVmFsdWVQYWlyLFxuICAgICAgcG9zaXRpb25cbiAgICApXG4gICAgdmFsdWUgPSBuYW1lVmFsdWVQYWlyLnNsaWNlKHBvc2l0aW9uLnBvc2l0aW9uICsgMSlcbiAgfVxuXG4gIC8vIDQuIFJlbW92ZSBhbnkgbGVhZGluZyBvciB0cmFpbGluZyBXU1AgY2hhcmFjdGVycyBmcm9tIHRoZSBuYW1lXG4gIC8vICAgIHN0cmluZyBhbmQgdGhlIHZhbHVlIHN0cmluZy5cbiAgbmFtZSA9IG5hbWUudHJpbSgpXG4gIHZhbHVlID0gdmFsdWUudHJpbSgpXG5cbiAgLy8gNS4gSWYgdGhlIHN1bSBvZiB0aGUgbGVuZ3RocyBvZiB0aGUgbmFtZSBzdHJpbmcgYW5kIHRoZSB2YWx1ZSBzdHJpbmdcbiAgLy8gICAgaXMgbW9yZSB0aGFuIDQwOTYgb2N0ZXRzLCBhYm9ydCB0aGVzZSBzdGVwcyBhbmQgaWdub3JlIHRoZSBzZXQtXG4gIC8vICAgIGNvb2tpZS1zdHJpbmcgZW50aXJlbHkuXG4gIGlmIChuYW1lLmxlbmd0aCArIHZhbHVlLmxlbmd0aCA+IG1heE5hbWVWYWx1ZVBhaXJTaXplKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8vIDYuIFRoZSBjb29raWUtbmFtZSBpcyB0aGUgbmFtZSBzdHJpbmcsIGFuZCB0aGUgY29va2llLXZhbHVlIGlzIHRoZVxuICAvLyAgICB2YWx1ZSBzdHJpbmcuXG4gIHJldHVybiB7XG4gICAgbmFtZSwgdmFsdWUsIC4uLnBhcnNlVW5wYXJzZWRBdHRyaWJ1dGVzKHVucGFyc2VkQXR0cmlidXRlcylcbiAgfVxufVxuXG4vKipcbiAqIFBhcnNlcyB0aGUgcmVtYWluaW5nIGF0dHJpYnV0ZXMgb2YgYSBzZXQtY29va2llIGhlYWRlclxuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1yZmM2MjY1YmlzI3NlY3Rpb24tNS40XG4gKiBAcGFyYW0ge3N0cmluZ30gdW5wYXJzZWRBdHRyaWJ1dGVzXG4gKiBAcGFyYW0ge1tPYmplY3QuPHN0cmluZywgdW5rbm93bj5dPXt9fSBjb29raWVBdHRyaWJ1dGVMaXN0XG4gKi9cbmZ1bmN0aW9uIHBhcnNlVW5wYXJzZWRBdHRyaWJ1dGVzICh1bnBhcnNlZEF0dHJpYnV0ZXMsIGNvb2tpZUF0dHJpYnV0ZUxpc3QgPSB7fSkge1xuICAvLyAxLiBJZiB0aGUgdW5wYXJzZWQtYXR0cmlidXRlcyBzdHJpbmcgaXMgZW1wdHksIHNraXAgdGhlIHJlc3Qgb2ZcbiAgLy8gICAgdGhlc2Ugc3RlcHMuXG4gIGlmICh1bnBhcnNlZEF0dHJpYnV0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGNvb2tpZUF0dHJpYnV0ZUxpc3RcbiAgfVxuXG4gIC8vIDIuIERpc2NhcmQgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgdW5wYXJzZWQtYXR0cmlidXRlcyAod2hpY2hcbiAgLy8gICAgd2lsbCBiZSBhICV4M0IgKFwiO1wiKSBjaGFyYWN0ZXIpLlxuICBhc3NlcnQodW5wYXJzZWRBdHRyaWJ1dGVzWzBdID09PSAnOycpXG4gIHVucGFyc2VkQXR0cmlidXRlcyA9IHVucGFyc2VkQXR0cmlidXRlcy5zbGljZSgxKVxuXG4gIGxldCBjb29raWVBdiA9ICcnXG5cbiAgLy8gMy4gSWYgdGhlIHJlbWFpbmluZyB1bnBhcnNlZC1hdHRyaWJ1dGVzIGNvbnRhaW5zIGEgJXgzQiAoXCI7XCIpXG4gIC8vICAgIGNoYXJhY3RlcjpcbiAgaWYgKHVucGFyc2VkQXR0cmlidXRlcy5pbmNsdWRlcygnOycpKSB7XG4gICAgLy8gMS4gQ29uc3VtZSB0aGUgY2hhcmFjdGVycyBvZiB0aGUgdW5wYXJzZWQtYXR0cmlidXRlcyB1cCB0bywgYnV0XG4gICAgLy8gICAgbm90IGluY2x1ZGluZywgdGhlIGZpcnN0ICV4M0IgKFwiO1wiKSBjaGFyYWN0ZXIuXG4gICAgY29va2llQXYgPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdChcbiAgICAgICc7JyxcbiAgICAgIHVucGFyc2VkQXR0cmlidXRlcyxcbiAgICAgIHsgcG9zaXRpb246IDAgfVxuICAgIClcbiAgICB1bnBhcnNlZEF0dHJpYnV0ZXMgPSB1bnBhcnNlZEF0dHJpYnV0ZXMuc2xpY2UoY29va2llQXYubGVuZ3RoKVxuICB9IGVsc2Uge1xuICAgIC8vIE90aGVyd2lzZTpcblxuICAgIC8vIDEuIENvbnN1bWUgdGhlIHJlbWFpbmRlciBvZiB0aGUgdW5wYXJzZWQtYXR0cmlidXRlcy5cbiAgICBjb29raWVBdiA9IHVucGFyc2VkQXR0cmlidXRlc1xuICAgIHVucGFyc2VkQXR0cmlidXRlcyA9ICcnXG4gIH1cblxuICAvLyBMZXQgdGhlIGNvb2tpZS1hdiBzdHJpbmcgYmUgdGhlIGNoYXJhY3RlcnMgY29uc3VtZWQgaW4gdGhpcyBzdGVwLlxuXG4gIGxldCBhdHRyaWJ1dGVOYW1lID0gJydcbiAgbGV0IGF0dHJpYnV0ZVZhbHVlID0gJydcblxuICAvLyA0LiBJZiB0aGUgY29va2llLWF2IHN0cmluZyBjb250YWlucyBhICV4M0QgKFwiPVwiKSBjaGFyYWN0ZXI6XG4gIGlmIChjb29raWVBdi5pbmNsdWRlcygnPScpKSB7XG4gICAgLy8gMS4gVGhlIChwb3NzaWJseSBlbXB0eSkgYXR0cmlidXRlLW5hbWUgc3RyaW5nIGNvbnNpc3RzIG9mIHRoZVxuICAgIC8vICAgIGNoYXJhY3RlcnMgdXAgdG8sIGJ1dCBub3QgaW5jbHVkaW5nLCB0aGUgZmlyc3QgJXgzRCAoXCI9XCIpXG4gICAgLy8gICAgY2hhcmFjdGVyLCBhbmQgdGhlIChwb3NzaWJseSBlbXB0eSkgYXR0cmlidXRlLXZhbHVlIHN0cmluZ1xuICAgIC8vICAgIGNvbnNpc3RzIG9mIHRoZSBjaGFyYWN0ZXJzIGFmdGVyIHRoZSBmaXJzdCAleDNEIChcIj1cIilcbiAgICAvLyAgICBjaGFyYWN0ZXIuXG4gICAgY29uc3QgcG9zaXRpb24gPSB7IHBvc2l0aW9uOiAwIH1cblxuICAgIGF0dHJpYnV0ZU5hbWUgPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdChcbiAgICAgICc9JyxcbiAgICAgIGNvb2tpZUF2LFxuICAgICAgcG9zaXRpb25cbiAgICApXG4gICAgYXR0cmlidXRlVmFsdWUgPSBjb29raWVBdi5zbGljZShwb3NpdGlvbi5wb3NpdGlvbiArIDEpXG4gIH0gZWxzZSB7XG4gICAgLy8gT3RoZXJ3aXNlOlxuXG4gICAgLy8gMS4gVGhlIGF0dHJpYnV0ZS1uYW1lIHN0cmluZyBjb25zaXN0cyBvZiB0aGUgZW50aXJlIGNvb2tpZS1hdlxuICAgIC8vICAgIHN0cmluZywgYW5kIHRoZSBhdHRyaWJ1dGUtdmFsdWUgc3RyaW5nIGlzIGVtcHR5LlxuICAgIGF0dHJpYnV0ZU5hbWUgPSBjb29raWVBdlxuICB9XG5cbiAgLy8gNS4gUmVtb3ZlIGFueSBsZWFkaW5nIG9yIHRyYWlsaW5nIFdTUCBjaGFyYWN0ZXJzIGZyb20gdGhlIGF0dHJpYnV0ZS1cbiAgLy8gICAgbmFtZSBzdHJpbmcgYW5kIHRoZSBhdHRyaWJ1dGUtdmFsdWUgc3RyaW5nLlxuICBhdHRyaWJ1dGVOYW1lID0gYXR0cmlidXRlTmFtZS50cmltKClcbiAgYXR0cmlidXRlVmFsdWUgPSBhdHRyaWJ1dGVWYWx1ZS50cmltKClcblxuICAvLyA2LiBJZiB0aGUgYXR0cmlidXRlLXZhbHVlIGlzIGxvbmdlciB0aGFuIDEwMjQgb2N0ZXRzLCBpZ25vcmUgdGhlXG4gIC8vICAgIGNvb2tpZS1hdiBzdHJpbmcgYW5kIHJldHVybiB0byBTdGVwIDEgb2YgdGhpcyBhbGdvcml0aG0uXG4gIGlmIChhdHRyaWJ1dGVWYWx1ZS5sZW5ndGggPiBtYXhBdHRyaWJ1dGVWYWx1ZVNpemUpIHtcbiAgICByZXR1cm4gcGFyc2VVbnBhcnNlZEF0dHJpYnV0ZXModW5wYXJzZWRBdHRyaWJ1dGVzLCBjb29raWVBdHRyaWJ1dGVMaXN0KVxuICB9XG5cbiAgLy8gNy4gUHJvY2VzcyB0aGUgYXR0cmlidXRlLW5hbWUgYW5kIGF0dHJpYnV0ZS12YWx1ZSBhY2NvcmRpbmcgdG8gdGhlXG4gIC8vICAgIHJlcXVpcmVtZW50cyBpbiB0aGUgZm9sbG93aW5nIHN1YnNlY3Rpb25zLiAgKE5vdGljZSB0aGF0XG4gIC8vICAgIGF0dHJpYnV0ZXMgd2l0aCB1bnJlY29nbml6ZWQgYXR0cmlidXRlLW5hbWVzIGFyZSBpZ25vcmVkLilcbiAgY29uc3QgYXR0cmlidXRlTmFtZUxvd2VyY2FzZSA9IGF0dHJpYnV0ZU5hbWUudG9Mb3dlckNhc2UoKVxuXG4gIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjQuMVxuICAvLyBJZiB0aGUgYXR0cmlidXRlLW5hbWUgY2FzZS1pbnNlbnNpdGl2ZWx5IG1hdGNoZXMgdGhlIHN0cmluZ1xuICAvLyBcIkV4cGlyZXNcIiwgdGhlIHVzZXIgYWdlbnQgTVVTVCBwcm9jZXNzIHRoZSBjb29raWUtYXYgYXMgZm9sbG93cy5cbiAgaWYgKGF0dHJpYnV0ZU5hbWVMb3dlcmNhc2UgPT09ICdleHBpcmVzJykge1xuICAgIC8vIDEuIExldCB0aGUgZXhwaXJ5LXRpbWUgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIHRoZSBhdHRyaWJ1dGUtdmFsdWVcbiAgICAvLyAgICBhcyBjb29raWUtZGF0ZSAoc2VlIFNlY3Rpb24gNS4xLjEpLlxuICAgIGNvbnN0IGV4cGlyeVRpbWUgPSBuZXcgRGF0ZShhdHRyaWJ1dGVWYWx1ZSlcblxuICAgIC8vIDIuIElmIHRoZSBhdHRyaWJ1dGUtdmFsdWUgZmFpbGVkIHRvIHBhcnNlIGFzIGEgY29va2llIGRhdGUsIGlnbm9yZVxuICAgIC8vICAgIHRoZSBjb29raWUtYXYuXG5cbiAgICBjb29raWVBdHRyaWJ1dGVMaXN0LmV4cGlyZXMgPSBleHBpcnlUaW1lXG4gIH0gZWxzZSBpZiAoYXR0cmlidXRlTmFtZUxvd2VyY2FzZSA9PT0gJ21heC1hZ2UnKSB7XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtcmZjNjI2NWJpcyNzZWN0aW9uLTUuNC4yXG4gICAgLy8gSWYgdGhlIGF0dHJpYnV0ZS1uYW1lIGNhc2UtaW5zZW5zaXRpdmVseSBtYXRjaGVzIHRoZSBzdHJpbmcgXCJNYXgtXG4gICAgLy8gQWdlXCIsIHRoZSB1c2VyIGFnZW50IE1VU1QgcHJvY2VzcyB0aGUgY29va2llLWF2IGFzIGZvbGxvd3MuXG5cbiAgICAvLyAxLiBJZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBhdHRyaWJ1dGUtdmFsdWUgaXMgbm90IGEgRElHSVQgb3IgYVxuICAgIC8vICAgIFwiLVwiIGNoYXJhY3RlciwgaWdub3JlIHRoZSBjb29raWUtYXYuXG4gICAgY29uc3QgY2hhckNvZGUgPSBhdHRyaWJ1dGVWYWx1ZS5jaGFyQ29kZUF0KDApXG5cbiAgICBpZiAoKGNoYXJDb2RlIDwgNDggfHwgY2hhckNvZGUgPiA1NykgJiYgYXR0cmlidXRlVmFsdWVbMF0gIT09ICctJykge1xuICAgICAgcmV0dXJuIHBhcnNlVW5wYXJzZWRBdHRyaWJ1dGVzKHVucGFyc2VkQXR0cmlidXRlcywgY29va2llQXR0cmlidXRlTGlzdClcbiAgICB9XG5cbiAgICAvLyAyLiBJZiB0aGUgcmVtYWluZGVyIG9mIGF0dHJpYnV0ZS12YWx1ZSBjb250YWlucyBhIG5vbi1ESUdJVFxuICAgIC8vICAgIGNoYXJhY3RlciwgaWdub3JlIHRoZSBjb29raWUtYXYuXG4gICAgaWYgKCEvXlxcZCskLy50ZXN0KGF0dHJpYnV0ZVZhbHVlKSkge1xuICAgICAgcmV0dXJuIHBhcnNlVW5wYXJzZWRBdHRyaWJ1dGVzKHVucGFyc2VkQXR0cmlidXRlcywgY29va2llQXR0cmlidXRlTGlzdClcbiAgICB9XG5cbiAgICAvLyAzLiBMZXQgZGVsdGEtc2Vjb25kcyBiZSB0aGUgYXR0cmlidXRlLXZhbHVlIGNvbnZlcnRlZCB0byBhbiBpbnRlZ2VyLlxuICAgIGNvbnN0IGRlbHRhU2Vjb25kcyA9IE51bWJlcihhdHRyaWJ1dGVWYWx1ZSlcblxuICAgIC8vIDQuIExldCBjb29raWUtYWdlLWxpbWl0IGJlIHRoZSBtYXhpbXVtIGFnZSBvZiB0aGUgY29va2llICh3aGljaFxuICAgIC8vICAgIFNIT1VMRCBiZSA0MDAgZGF5cyBvciBsZXNzLCBzZWUgU2VjdGlvbiA0LjEuMi4yKS5cblxuICAgIC8vIDUuIFNldCBkZWx0YS1zZWNvbmRzIHRvIHRoZSBzbWFsbGVyIG9mIGl0cyBwcmVzZW50IHZhbHVlIGFuZCBjb29raWUtXG4gICAgLy8gICAgYWdlLWxpbWl0LlxuICAgIC8vIGRlbHRhU2Vjb25kcyA9IE1hdGgubWluKGRlbHRhU2Vjb25kcyAqIDEwMDAsIG1heEV4cGlyZXNNcylcblxuICAgIC8vIDYuIElmIGRlbHRhLXNlY29uZHMgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHplcm8gKDApLCBsZXQgZXhwaXJ5LVxuICAgIC8vICAgIHRpbWUgYmUgdGhlIGVhcmxpZXN0IHJlcHJlc2VudGFibGUgZGF0ZSBhbmQgdGltZS4gIE90aGVyd2lzZSwgbGV0XG4gICAgLy8gICAgdGhlIGV4cGlyeS10aW1lIGJlIHRoZSBjdXJyZW50IGRhdGUgYW5kIHRpbWUgcGx1cyBkZWx0YS1zZWNvbmRzXG4gICAgLy8gICAgc2Vjb25kcy5cbiAgICAvLyBjb25zdCBleHBpcnlUaW1lID0gZGVsdGFTZWNvbmRzIDw9IDAgPyBEYXRlLm5vdygpIDogRGF0ZS5ub3coKSArIGRlbHRhU2Vjb25kc1xuXG4gICAgLy8gNy4gQXBwZW5kIGFuIGF0dHJpYnV0ZSB0byB0aGUgY29va2llLWF0dHJpYnV0ZS1saXN0IHdpdGggYW5cbiAgICAvLyAgICBhdHRyaWJ1dGUtbmFtZSBvZiBNYXgtQWdlIGFuZCBhbiBhdHRyaWJ1dGUtdmFsdWUgb2YgZXhwaXJ5LXRpbWUuXG4gICAgY29va2llQXR0cmlidXRlTGlzdC5tYXhBZ2UgPSBkZWx0YVNlY29uZHNcbiAgfSBlbHNlIGlmIChhdHRyaWJ1dGVOYW1lTG93ZXJjYXNlID09PSAnZG9tYWluJykge1xuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjQuM1xuICAgIC8vIElmIHRoZSBhdHRyaWJ1dGUtbmFtZSBjYXNlLWluc2Vuc2l0aXZlbHkgbWF0Y2hlcyB0aGUgc3RyaW5nIFwiRG9tYWluXCIsXG4gICAgLy8gdGhlIHVzZXIgYWdlbnQgTVVTVCBwcm9jZXNzIHRoZSBjb29raWUtYXYgYXMgZm9sbG93cy5cblxuICAgIC8vIDEuIExldCBjb29raWUtZG9tYWluIGJlIHRoZSBhdHRyaWJ1dGUtdmFsdWUuXG4gICAgbGV0IGNvb2tpZURvbWFpbiA9IGF0dHJpYnV0ZVZhbHVlXG5cbiAgICAvLyAyLiBJZiBjb29raWUtZG9tYWluIHN0YXJ0cyB3aXRoICV4MkUgKFwiLlwiKSwgbGV0IGNvb2tpZS1kb21haW4gYmVcbiAgICAvLyAgICBjb29raWUtZG9tYWluIHdpdGhvdXQgaXRzIGxlYWRpbmcgJXgyRSAoXCIuXCIpLlxuICAgIGlmIChjb29raWVEb21haW5bMF0gPT09ICcuJykge1xuICAgICAgY29va2llRG9tYWluID0gY29va2llRG9tYWluLnNsaWNlKDEpXG4gICAgfVxuXG4gICAgLy8gMy4gQ29udmVydCB0aGUgY29va2llLWRvbWFpbiB0byBsb3dlciBjYXNlLlxuICAgIGNvb2tpZURvbWFpbiA9IGNvb2tpZURvbWFpbi50b0xvd2VyQ2FzZSgpXG5cbiAgICAvLyA0LiBBcHBlbmQgYW4gYXR0cmlidXRlIHRvIHRoZSBjb29raWUtYXR0cmlidXRlLWxpc3Qgd2l0aCBhblxuICAgIC8vICAgIGF0dHJpYnV0ZS1uYW1lIG9mIERvbWFpbiBhbmQgYW4gYXR0cmlidXRlLXZhbHVlIG9mIGNvb2tpZS1kb21haW4uXG4gICAgY29va2llQXR0cmlidXRlTGlzdC5kb21haW4gPSBjb29raWVEb21haW5cbiAgfSBlbHNlIGlmIChhdHRyaWJ1dGVOYW1lTG93ZXJjYXNlID09PSAncGF0aCcpIHtcbiAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1yZmM2MjY1YmlzI3NlY3Rpb24tNS40LjRcbiAgICAvLyBJZiB0aGUgYXR0cmlidXRlLW5hbWUgY2FzZS1pbnNlbnNpdGl2ZWx5IG1hdGNoZXMgdGhlIHN0cmluZyBcIlBhdGhcIixcbiAgICAvLyB0aGUgdXNlciBhZ2VudCBNVVNUIHByb2Nlc3MgdGhlIGNvb2tpZS1hdiBhcyBmb2xsb3dzLlxuXG4gICAgLy8gMS4gSWYgdGhlIGF0dHJpYnV0ZS12YWx1ZSBpcyBlbXB0eSBvciBpZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZVxuICAgIC8vICAgIGF0dHJpYnV0ZS12YWx1ZSBpcyBub3QgJXgyRiAoXCIvXCIpOlxuICAgIGxldCBjb29raWVQYXRoID0gJydcbiAgICBpZiAoYXR0cmlidXRlVmFsdWUubGVuZ3RoID09PSAwIHx8IGF0dHJpYnV0ZVZhbHVlWzBdICE9PSAnLycpIHtcbiAgICAgIC8vIDEuIExldCBjb29raWUtcGF0aCBiZSB0aGUgZGVmYXVsdC1wYXRoLlxuICAgICAgY29va2llUGF0aCA9ICcvJ1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBPdGhlcndpc2U6XG5cbiAgICAgIC8vIDEuIExldCBjb29raWUtcGF0aCBiZSB0aGUgYXR0cmlidXRlLXZhbHVlLlxuICAgICAgY29va2llUGF0aCA9IGF0dHJpYnV0ZVZhbHVlXG4gICAgfVxuXG4gICAgLy8gMi4gQXBwZW5kIGFuIGF0dHJpYnV0ZSB0byB0aGUgY29va2llLWF0dHJpYnV0ZS1saXN0IHdpdGggYW5cbiAgICAvLyAgICBhdHRyaWJ1dGUtbmFtZSBvZiBQYXRoIGFuZCBhbiBhdHRyaWJ1dGUtdmFsdWUgb2YgY29va2llLXBhdGguXG4gICAgY29va2llQXR0cmlidXRlTGlzdC5wYXRoID0gY29va2llUGF0aFxuICB9IGVsc2UgaWYgKGF0dHJpYnV0ZU5hbWVMb3dlcmNhc2UgPT09ICdzZWN1cmUnKSB7XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtcmZjNjI2NWJpcyNzZWN0aW9uLTUuNC41XG4gICAgLy8gSWYgdGhlIGF0dHJpYnV0ZS1uYW1lIGNhc2UtaW5zZW5zaXRpdmVseSBtYXRjaGVzIHRoZSBzdHJpbmcgXCJTZWN1cmVcIixcbiAgICAvLyB0aGUgdXNlciBhZ2VudCBNVVNUIGFwcGVuZCBhbiBhdHRyaWJ1dGUgdG8gdGhlIGNvb2tpZS1hdHRyaWJ1dGUtbGlzdFxuICAgIC8vIHdpdGggYW4gYXR0cmlidXRlLW5hbWUgb2YgU2VjdXJlIGFuZCBhbiBlbXB0eSBhdHRyaWJ1dGUtdmFsdWUuXG5cbiAgICBjb29raWVBdHRyaWJ1dGVMaXN0LnNlY3VyZSA9IHRydWVcbiAgfSBlbHNlIGlmIChhdHRyaWJ1dGVOYW1lTG93ZXJjYXNlID09PSAnaHR0cG9ubHknKSB7XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtcmZjNjI2NWJpcyNzZWN0aW9uLTUuNC42XG4gICAgLy8gSWYgdGhlIGF0dHJpYnV0ZS1uYW1lIGNhc2UtaW5zZW5zaXRpdmVseSBtYXRjaGVzIHRoZSBzdHJpbmdcbiAgICAvLyBcIkh0dHBPbmx5XCIsIHRoZSB1c2VyIGFnZW50IE1VU1QgYXBwZW5kIGFuIGF0dHJpYnV0ZSB0byB0aGUgY29va2llLVxuICAgIC8vIGF0dHJpYnV0ZS1saXN0IHdpdGggYW4gYXR0cmlidXRlLW5hbWUgb2YgSHR0cE9ubHkgYW5kIGFuIGVtcHR5XG4gICAgLy8gYXR0cmlidXRlLXZhbHVlLlxuXG4gICAgY29va2llQXR0cmlidXRlTGlzdC5odHRwT25seSA9IHRydWVcbiAgfSBlbHNlIGlmIChhdHRyaWJ1dGVOYW1lTG93ZXJjYXNlID09PSAnc2FtZXNpdGUnKSB7XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtcmZjNjI2NWJpcyNzZWN0aW9uLTUuNC43XG4gICAgLy8gSWYgdGhlIGF0dHJpYnV0ZS1uYW1lIGNhc2UtaW5zZW5zaXRpdmVseSBtYXRjaGVzIHRoZSBzdHJpbmdcbiAgICAvLyBcIlNhbWVTaXRlXCIsIHRoZSB1c2VyIGFnZW50IE1VU1QgcHJvY2VzcyB0aGUgY29va2llLWF2IGFzIGZvbGxvd3M6XG5cbiAgICAvLyAxLiBMZXQgZW5mb3JjZW1lbnQgYmUgXCJEZWZhdWx0XCIuXG4gICAgbGV0IGVuZm9yY2VtZW50ID0gJ0RlZmF1bHQnXG5cbiAgICBjb25zdCBhdHRyaWJ1dGVWYWx1ZUxvd2VyY2FzZSA9IGF0dHJpYnV0ZVZhbHVlLnRvTG93ZXJDYXNlKClcbiAgICAvLyAyLiBJZiBjb29raWUtYXYncyBhdHRyaWJ1dGUtdmFsdWUgaXMgYSBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvclxuICAgIC8vICAgIFwiTm9uZVwiLCBzZXQgZW5mb3JjZW1lbnQgdG8gXCJOb25lXCIuXG4gICAgaWYgKGF0dHJpYnV0ZVZhbHVlTG93ZXJjYXNlLmluY2x1ZGVzKCdub25lJykpIHtcbiAgICAgIGVuZm9yY2VtZW50ID0gJ05vbmUnXG4gICAgfVxuXG4gICAgLy8gMy4gSWYgY29va2llLWF2J3MgYXR0cmlidXRlLXZhbHVlIGlzIGEgY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBmb3JcbiAgICAvLyAgICBcIlN0cmljdFwiLCBzZXQgZW5mb3JjZW1lbnQgdG8gXCJTdHJpY3RcIi5cbiAgICBpZiAoYXR0cmlidXRlVmFsdWVMb3dlcmNhc2UuaW5jbHVkZXMoJ3N0cmljdCcpKSB7XG4gICAgICBlbmZvcmNlbWVudCA9ICdTdHJpY3QnXG4gICAgfVxuXG4gICAgLy8gNC4gSWYgY29va2llLWF2J3MgYXR0cmlidXRlLXZhbHVlIGlzIGEgY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBmb3JcbiAgICAvLyAgICBcIkxheFwiLCBzZXQgZW5mb3JjZW1lbnQgdG8gXCJMYXhcIi5cbiAgICBpZiAoYXR0cmlidXRlVmFsdWVMb3dlcmNhc2UuaW5jbHVkZXMoJ2xheCcpKSB7XG4gICAgICBlbmZvcmNlbWVudCA9ICdMYXgnXG4gICAgfVxuXG4gICAgLy8gNS4gQXBwZW5kIGFuIGF0dHJpYnV0ZSB0byB0aGUgY29va2llLWF0dHJpYnV0ZS1saXN0IHdpdGggYW5cbiAgICAvLyAgICBhdHRyaWJ1dGUtbmFtZSBvZiBcIlNhbWVTaXRlXCIgYW5kIGFuIGF0dHJpYnV0ZS12YWx1ZSBvZlxuICAgIC8vICAgIGVuZm9yY2VtZW50LlxuICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3Quc2FtZVNpdGUgPSBlbmZvcmNlbWVudFxuICB9IGVsc2Uge1xuICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3QudW5wYXJzZWQgPz89IFtdXG5cbiAgICBjb29raWVBdHRyaWJ1dGVMaXN0LnVucGFyc2VkLnB1c2goYCR7YXR0cmlidXRlTmFtZX09JHthdHRyaWJ1dGVWYWx1ZX1gKVxuICB9XG5cbiAgLy8gOC4gUmV0dXJuIHRvIFN0ZXAgMSBvZiB0aGlzIGFsZ29yaXRobS5cbiAgcmV0dXJuIHBhcnNlVW5wYXJzZWRBdHRyaWJ1dGVzKHVucGFyc2VkQXR0cmlidXRlcywgY29va2llQXR0cmlidXRlTGlzdClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHBhcnNlU2V0Q29va2llLFxuICBwYXJzZVVucGFyc2VkQXR0cmlidXRlc1xufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBwYXJzZVNldENvb2tpZSB9ID0gcmVxdWlyZSgnLi9wYXJzZScpXG5jb25zdCB7IHN0cmluZ2lmeSwgZ2V0SGVhZGVyc0xpc3QgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvd2ViaWRsJylcbmNvbnN0IHsgSGVhZGVycyB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvaGVhZGVycycpXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gQ29va2llXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbmFtZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IHZhbHVlXG4gKiBAcHJvcGVydHkge0RhdGV8bnVtYmVyfHVuZGVmaW5lZH0gZXhwaXJlc1xuICogQHByb3BlcnR5IHtudW1iZXJ8dW5kZWZpbmVkfSBtYXhBZ2VcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfHVuZGVmaW5lZH0gZG9tYWluXG4gKiBAcHJvcGVydHkge3N0cmluZ3x1bmRlZmluZWR9IHBhdGhcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbnx1bmRlZmluZWR9IHNlY3VyZVxuICogQHByb3BlcnR5IHtib29sZWFufHVuZGVmaW5lZH0gaHR0cE9ubHlcbiAqIEBwcm9wZXJ0eSB7J1N0cmljdCd8J0xheCd8J05vbmUnfSBzYW1lU2l0ZVxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gdW5wYXJzZWRcbiAqL1xuXG4vKipcbiAqIEBwYXJhbSB7SGVhZGVyc30gaGVhZGVyc1xuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHN0cmluZz59XG4gKi9cbmZ1bmN0aW9uIGdldENvb2tpZXMgKGhlYWRlcnMpIHtcbiAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ2dldENvb2tpZXMnIH0pXG5cbiAgd2ViaWRsLmJyYW5kQ2hlY2soaGVhZGVycywgSGVhZGVycywgeyBzdHJpY3Q6IGZhbHNlIH0pXG5cbiAgY29uc3QgY29va2llID0gaGVhZGVycy5nZXQoJ2Nvb2tpZScpXG4gIGNvbnN0IG91dCA9IHt9XG5cbiAgaWYgKCFjb29raWUpIHtcbiAgICByZXR1cm4gb3V0XG4gIH1cblxuICBmb3IgKGNvbnN0IHBpZWNlIG9mIGNvb2tpZS5zcGxpdCgnOycpKSB7XG4gICAgY29uc3QgW25hbWUsIC4uLnZhbHVlXSA9IHBpZWNlLnNwbGl0KCc9JylcblxuICAgIG91dFtuYW1lLnRyaW0oKV0gPSB2YWx1ZS5qb2luKCc9JylcbiAgfVxuXG4gIHJldHVybiBvdXRcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0hlYWRlcnN9IGhlYWRlcnNcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge3sgcGF0aD86IHN0cmluZywgZG9tYWluPzogc3RyaW5nIH18dW5kZWZpbmVkfSBhdHRyaWJ1dGVzXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gZGVsZXRlQ29va2llIChoZWFkZXJzLCBuYW1lLCBhdHRyaWJ1dGVzKSB7XG4gIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMiwgeyBoZWFkZXI6ICdkZWxldGVDb29raWUnIH0pXG5cbiAgd2ViaWRsLmJyYW5kQ2hlY2soaGVhZGVycywgSGVhZGVycywgeyBzdHJpY3Q6IGZhbHNlIH0pXG5cbiAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyhuYW1lKVxuICBhdHRyaWJ1dGVzID0gd2ViaWRsLmNvbnZlcnRlcnMuRGVsZXRlQ29va2llQXR0cmlidXRlcyhhdHRyaWJ1dGVzKVxuXG4gIC8vIE1hdGNoZXMgYmVoYXZpb3Igb2ZcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2Rlbm9sYW5kL2Rlbm9fc3RkL2Jsb2IvNjM4MjdiMTYzMzBiODI0ODlhMDQ2MTQwMjdjMzNiNzkwNGUwOGJlNS9odHRwL2Nvb2tpZS50cyNMMjc4XG4gIHNldENvb2tpZShoZWFkZXJzLCB7XG4gICAgbmFtZSxcbiAgICB2YWx1ZTogJycsXG4gICAgZXhwaXJlczogbmV3IERhdGUoMCksXG4gICAgLi4uYXR0cmlidXRlc1xuICB9KVxufVxuXG4vKipcbiAqIEBwYXJhbSB7SGVhZGVyc30gaGVhZGVyc1xuICogQHJldHVybnMge0Nvb2tpZVtdfVxuICovXG5mdW5jdGlvbiBnZXRTZXRDb29raWVzIChoZWFkZXJzKSB7XG4gIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdnZXRTZXRDb29raWVzJyB9KVxuXG4gIHdlYmlkbC5icmFuZENoZWNrKGhlYWRlcnMsIEhlYWRlcnMsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gIGNvbnN0IGNvb2tpZXMgPSBnZXRIZWFkZXJzTGlzdChoZWFkZXJzKS5jb29raWVzXG5cbiAgaWYgKCFjb29raWVzKSB7XG4gICAgcmV0dXJuIFtdXG4gIH1cblxuICAvLyBJbiBvbGRlciB2ZXJzaW9ucyBvZiB1bmRpY2ksIGNvb2tpZXMgaXMgYSBsaXN0IG9mIG5hbWU6dmFsdWUuXG4gIHJldHVybiBjb29raWVzLm1hcCgocGFpcikgPT4gcGFyc2VTZXRDb29raWUoQXJyYXkuaXNBcnJheShwYWlyKSA/IHBhaXJbMV0gOiBwYWlyKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0hlYWRlcnN9IGhlYWRlcnNcbiAqIEBwYXJhbSB7Q29va2llfSBjb29raWVcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBzZXRDb29raWUgKGhlYWRlcnMsIGNvb2tpZSkge1xuICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnc2V0Q29va2llJyB9KVxuXG4gIHdlYmlkbC5icmFuZENoZWNrKGhlYWRlcnMsIEhlYWRlcnMsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gIGNvb2tpZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkNvb2tpZShjb29raWUpXG5cbiAgY29uc3Qgc3RyID0gc3RyaW5naWZ5KGNvb2tpZSlcblxuICBpZiAoc3RyKSB7XG4gICAgaGVhZGVycy5hcHBlbmQoJ1NldC1Db29raWUnLCBzdHJpbmdpZnkoY29va2llKSlcbiAgfVxufVxuXG53ZWJpZGwuY29udmVydGVycy5EZWxldGVDb29raWVBdHRyaWJ1dGVzID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKSxcbiAgICBrZXk6ICdwYXRoJyxcbiAgICBkZWZhdWx0VmFsdWU6IG51bGxcbiAgfSxcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyksXG4gICAga2V5OiAnZG9tYWluJyxcbiAgICBkZWZhdWx0VmFsdWU6IG51bGxcbiAgfVxuXSlcblxud2ViaWRsLmNvbnZlcnRlcnMuQ29va2llID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAga2V5OiAnbmFtZSdcbiAgfSxcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIGtleTogJ3ZhbHVlJ1xuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIoKHZhbHVlKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIGxvbmcgbG9uZyddKHZhbHVlKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IERhdGUodmFsdWUpXG4gICAgfSksXG4gICAga2V5OiAnZXhwaXJlcycsXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcih3ZWJpZGwuY29udmVydGVyc1snbG9uZyBsb25nJ10pLFxuICAgIGtleTogJ21heEFnZScsXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcih3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcpLFxuICAgIGtleTogJ2RvbWFpbicsXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcih3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcpLFxuICAgIGtleTogJ3BhdGgnLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbFxuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbiksXG4gICAga2V5OiAnc2VjdXJlJyxcbiAgICBkZWZhdWx0VmFsdWU6IG51bGxcbiAgfSxcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4pLFxuICAgIGtleTogJ2h0dHBPbmx5JyxcbiAgICBkZWZhdWx0VmFsdWU6IG51bGxcbiAgfSxcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nLFxuICAgIGtleTogJ3NhbWVTaXRlJyxcbiAgICBhbGxvd2VkVmFsdWVzOiBbJ1N0cmljdCcsICdMYXgnLCAnTm9uZSddXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5zZXF1ZW5jZUNvbnZlcnRlcih3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcpLFxuICAgIGtleTogJ3VucGFyc2VkJyxcbiAgICBkZWZhdWx0VmFsdWU6IFtdXG4gIH1cbl0pXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRDb29raWVzLFxuICBkZWxldGVDb29raWUsXG4gIGdldFNldENvb2tpZXMsXG4gIHNldENvb2tpZVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuLy8gVGhpcyBpcyBhIEdsb2JhbGx5IFVuaXF1ZSBJZGVudGlmaWVyIHVuaXF1ZSB1c2VkXG4vLyB0byB2YWxpZGF0ZSB0aGF0IHRoZSBlbmRwb2ludCBhY2NlcHRzIHdlYnNvY2tldFxuLy8gY29ubmVjdGlvbnMuXG4vLyBTZWUgaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzY0NTUuaHRtbCNzZWN0aW9uLTEuM1xuY29uc3QgdWlkID0gJzI1OEVBRkE1LUU5MTQtNDdEQS05NUNBLUM1QUIwREM4NUIxMSdcblxuLyoqIEB0eXBlIHtQcm9wZXJ0eURlc2NyaXB0b3J9ICovXG5jb25zdCBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzID0ge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICB3cml0YWJsZTogZmFsc2UsXG4gIGNvbmZpZ3VyYWJsZTogZmFsc2Vcbn1cblxuY29uc3Qgc3RhdGVzID0ge1xuICBDT05ORUNUSU5HOiAwLFxuICBPUEVOOiAxLFxuICBDTE9TSU5HOiAyLFxuICBDTE9TRUQ6IDNcbn1cblxuY29uc3Qgb3Bjb2RlcyA9IHtcbiAgQ09OVElOVUFUSU9OOiAweDAsXG4gIFRFWFQ6IDB4MSxcbiAgQklOQVJZOiAweDIsXG4gIENMT1NFOiAweDgsXG4gIFBJTkc6IDB4OSxcbiAgUE9ORzogMHhBXG59XG5cbmNvbnN0IG1heFVuc2lnbmVkMTZCaXQgPSAyICoqIDE2IC0gMSAvLyA2NTUzNVxuXG5jb25zdCBwYXJzZXJTdGF0ZXMgPSB7XG4gIElORk86IDAsXG4gIFBBWUxPQURMRU5HVEhfMTY6IDIsXG4gIFBBWUxPQURMRU5HVEhfNjQ6IDMsXG4gIFJFQURfREFUQTogNFxufVxuXG5jb25zdCBlbXB0eUJ1ZmZlciA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgwKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgdWlkLFxuICBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBzdGF0ZXMsXG4gIG9wY29kZXMsXG4gIG1heFVuc2lnbmVkMTZCaXQsXG4gIHBhcnNlclN0YXRlcyxcbiAgZW1wdHlCdWZmZXJcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBrV2ViU29ja2V0VVJMOiBTeW1ib2woJ3VybCcpLFxuICBrUmVhZHlTdGF0ZTogU3ltYm9sKCdyZWFkeSBzdGF0ZScpLFxuICBrQ29udHJvbGxlcjogU3ltYm9sKCdjb250cm9sbGVyJyksXG4gIGtSZXNwb25zZTogU3ltYm9sKCdyZXNwb25zZScpLFxuICBrQmluYXJ5VHlwZTogU3ltYm9sKCdiaW5hcnkgdHlwZScpLFxuICBrU2VudENsb3NlOiBTeW1ib2woJ3NlbnQgY2xvc2UnKSxcbiAga1JlY2VpdmVkQ2xvc2U6IFN5bWJvbCgncmVjZWl2ZWQgY2xvc2UnKSxcbiAga0J5dGVQYXJzZXI6IFN5bWJvbCgnYnl0ZSBwYXJzZXInKVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3dlYmlkbCcpXG5jb25zdCB7IGtFbnVtZXJhYmxlUHJvcGVydHkgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IE1lc3NhZ2VQb3J0IH0gPSByZXF1aXJlKCd3b3JrZXJfdGhyZWFkcycpXG5cbi8qKlxuICogQHNlZSBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9jb21tcy5odG1sI21lc3NhZ2VldmVudFxuICovXG5jbGFzcyBNZXNzYWdlRXZlbnQgZXh0ZW5kcyBFdmVudCB7XG4gICNldmVudEluaXRcblxuICBjb25zdHJ1Y3RvciAodHlwZSwgZXZlbnRJbml0RGljdCA9IHt9KSB7XG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ01lc3NhZ2VFdmVudCBjb25zdHJ1Y3RvcicgfSlcblxuICAgIHR5cGUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcodHlwZSlcbiAgICBldmVudEluaXREaWN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuTWVzc2FnZUV2ZW50SW5pdChldmVudEluaXREaWN0KVxuXG4gICAgc3VwZXIodHlwZSwgZXZlbnRJbml0RGljdClcblxuICAgIHRoaXMuI2V2ZW50SW5pdCA9IGV2ZW50SW5pdERpY3RcbiAgfVxuXG4gIGdldCBkYXRhICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBNZXNzYWdlRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LmRhdGFcbiAgfVxuXG4gIGdldCBvcmlnaW4gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIE1lc3NhZ2VFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQub3JpZ2luXG4gIH1cblxuICBnZXQgbGFzdEV2ZW50SWQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIE1lc3NhZ2VFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQubGFzdEV2ZW50SWRcbiAgfVxuXG4gIGdldCBzb3VyY2UgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIE1lc3NhZ2VFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQuc291cmNlXG4gIH1cblxuICBnZXQgcG9ydHMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIE1lc3NhZ2VFdmVudClcblxuICAgIGlmICghT2JqZWN0LmlzRnJvemVuKHRoaXMuI2V2ZW50SW5pdC5wb3J0cykpIHtcbiAgICAgIE9iamVjdC5mcmVlemUodGhpcy4jZXZlbnRJbml0LnBvcnRzKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQucG9ydHNcbiAgfVxuXG4gIGluaXRNZXNzYWdlRXZlbnQgKFxuICAgIHR5cGUsXG4gICAgYnViYmxlcyA9IGZhbHNlLFxuICAgIGNhbmNlbGFibGUgPSBmYWxzZSxcbiAgICBkYXRhID0gbnVsbCxcbiAgICBvcmlnaW4gPSAnJyxcbiAgICBsYXN0RXZlbnRJZCA9ICcnLFxuICAgIHNvdXJjZSA9IG51bGwsXG4gICAgcG9ydHMgPSBbXVxuICApIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBNZXNzYWdlRXZlbnQpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnTWVzc2FnZUV2ZW50LmluaXRNZXNzYWdlRXZlbnQnIH0pXG5cbiAgICByZXR1cm4gbmV3IE1lc3NhZ2VFdmVudCh0eXBlLCB7XG4gICAgICBidWJibGVzLCBjYW5jZWxhYmxlLCBkYXRhLCBvcmlnaW4sIGxhc3RFdmVudElkLCBzb3VyY2UsIHBvcnRzXG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jdGhlLWNsb3NlZXZlbnQtaW50ZXJmYWNlXG4gKi9cbmNsYXNzIENsb3NlRXZlbnQgZXh0ZW5kcyBFdmVudCB7XG4gICNldmVudEluaXRcblxuICBjb25zdHJ1Y3RvciAodHlwZSwgZXZlbnRJbml0RGljdCA9IHt9KSB7XG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0Nsb3NlRXZlbnQgY29uc3RydWN0b3InIH0pXG5cbiAgICB0eXBlID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKHR5cGUpXG4gICAgZXZlbnRJbml0RGljdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLkNsb3NlRXZlbnRJbml0KGV2ZW50SW5pdERpY3QpXG5cbiAgICBzdXBlcih0eXBlLCBldmVudEluaXREaWN0KVxuXG4gICAgdGhpcy4jZXZlbnRJbml0ID0gZXZlbnRJbml0RGljdFxuICB9XG5cbiAgZ2V0IHdhc0NsZWFuICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDbG9zZUV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC53YXNDbGVhblxuICB9XG5cbiAgZ2V0IGNvZGUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENsb3NlRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LmNvZGVcbiAgfVxuXG4gIGdldCByZWFzb24gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENsb3NlRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LnJlYXNvblxuICB9XG59XG5cbi8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3dlYmFwcGFwaXMuaHRtbCN0aGUtZXJyb3JldmVudC1pbnRlcmZhY2VcbmNsYXNzIEVycm9yRXZlbnQgZXh0ZW5kcyBFdmVudCB7XG4gICNldmVudEluaXRcblxuICBjb25zdHJ1Y3RvciAodHlwZSwgZXZlbnRJbml0RGljdCkge1xuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdFcnJvckV2ZW50IGNvbnN0cnVjdG9yJyB9KVxuXG4gICAgc3VwZXIodHlwZSwgZXZlbnRJbml0RGljdClcblxuICAgIHR5cGUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcodHlwZSlcbiAgICBldmVudEluaXREaWN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuRXJyb3JFdmVudEluaXQoZXZlbnRJbml0RGljdCA/PyB7fSlcblxuICAgIHRoaXMuI2V2ZW50SW5pdCA9IGV2ZW50SW5pdERpY3RcbiAgfVxuXG4gIGdldCBtZXNzYWdlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBFcnJvckV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5tZXNzYWdlXG4gIH1cblxuICBnZXQgZmlsZW5hbWUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEVycm9yRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LmZpbGVuYW1lXG4gIH1cblxuICBnZXQgbGluZW5vICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBFcnJvckV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5saW5lbm9cbiAgfVxuXG4gIGdldCBjb2xubyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRXJyb3JFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQuY29sbm9cbiAgfVxuXG4gIGdldCBlcnJvciAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRXJyb3JFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQuZXJyb3JcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhNZXNzYWdlRXZlbnQucHJvdG90eXBlLCB7XG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdNZXNzYWdlRXZlbnQnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9LFxuICBkYXRhOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvcmlnaW46IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGxhc3RFdmVudElkOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBzb3VyY2U6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHBvcnRzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBpbml0TWVzc2FnZUV2ZW50OiBrRW51bWVyYWJsZVByb3BlcnR5XG59KVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDbG9zZUV2ZW50LnByb3RvdHlwZSwge1xuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnQ2xvc2VFdmVudCcsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0sXG4gIHJlYXNvbjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgY29kZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgd2FzQ2xlYW46IGtFbnVtZXJhYmxlUHJvcGVydHlcbn0pXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEVycm9yRXZlbnQucHJvdG90eXBlLCB7XG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdFcnJvckV2ZW50JyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSxcbiAgbWVzc2FnZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZmlsZW5hbWU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGxpbmVubzoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgY29sbm86IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGVycm9yOiBrRW51bWVyYWJsZVByb3BlcnR5XG59KVxuXG53ZWJpZGwuY29udmVydGVycy5NZXNzYWdlUG9ydCA9IHdlYmlkbC5pbnRlcmZhY2VDb252ZXJ0ZXIoTWVzc2FnZVBvcnQpXG5cbndlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxNZXNzYWdlUG9ydD4nXSA9IHdlYmlkbC5zZXF1ZW5jZUNvbnZlcnRlcihcbiAgd2ViaWRsLmNvbnZlcnRlcnMuTWVzc2FnZVBvcnRcbilcblxuY29uc3QgZXZlbnRJbml0ID0gW1xuICB7XG4gICAga2V5OiAnYnViYmxlcycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2VcbiAgfSxcbiAge1xuICAgIGtleTogJ2NhbmNlbGFibGUnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjb21wb3NlZCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2VcbiAgfVxuXVxuXG53ZWJpZGwuY29udmVydGVycy5NZXNzYWdlRXZlbnRJbml0ID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICAuLi5ldmVudEluaXQsXG4gIHtcbiAgICBrZXk6ICdkYXRhJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmFueSxcbiAgICBkZWZhdWx0VmFsdWU6IG51bGxcbiAgfSxcbiAge1xuICAgIGtleTogJ29yaWdpbicsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcsXG4gICAgZGVmYXVsdFZhbHVlOiAnJ1xuICB9LFxuICB7XG4gICAga2V5OiAnbGFzdEV2ZW50SWQnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZTogJydcbiAgfSxcbiAge1xuICAgIGtleTogJ3NvdXJjZScsXG4gICAgLy8gTm9kZSBkb2Vzbid0IGltcGxlbWVudCBXaW5kb3dQcm94eSBvciBTZXJ2aWNlV29ya2VyLCBzbyB0aGUgb25seVxuICAgIC8vIHZhbGlkIHZhbHVlIGZvciBzb3VyY2UgaXMgYSBNZXNzYWdlUG9ydC5cbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcih3ZWJpZGwuY29udmVydGVycy5NZXNzYWdlUG9ydCksXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdwb3J0cycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8TWVzc2FnZVBvcnQ+J10sXG4gICAgZ2V0IGRlZmF1bHRWYWx1ZSAoKSB7XG4gICAgICByZXR1cm4gW11cbiAgICB9XG4gIH1cbl0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzLkNsb3NlRXZlbnRJbml0ID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICAuLi5ldmVudEluaXQsXG4gIHtcbiAgICBrZXk6ICd3YXNDbGVhbicsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2VcbiAgfSxcbiAge1xuICAgIGtleTogJ2NvZGUnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIHNob3J0J10sXG4gICAgZGVmYXVsdFZhbHVlOiAwXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdyZWFzb24nLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZTogJydcbiAgfVxuXSlcblxud2ViaWRsLmNvbnZlcnRlcnMuRXJyb3JFdmVudEluaXQgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIC4uLmV2ZW50SW5pdCxcbiAge1xuICAgIGtleTogJ21lc3NhZ2UnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZTogJydcbiAgfSxcbiAge1xuICAgIGtleTogJ2ZpbGVuYW1lJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6ICcnXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdsaW5lbm8nLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIGxvbmcnXSxcbiAgICBkZWZhdWx0VmFsdWU6IDBcbiAgfSxcbiAge1xuICAgIGtleTogJ2NvbG5vJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBsb25nJ10sXG4gICAgZGVmYXVsdFZhbHVlOiAwXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdlcnJvcicsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5hbnlcbiAgfVxuXSlcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIE1lc3NhZ2VFdmVudCxcbiAgQ2xvc2VFdmVudCxcbiAgRXJyb3JFdmVudFxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBrUmVhZHlTdGF0ZSwga0NvbnRyb2xsZXIsIGtSZXNwb25zZSwga0JpbmFyeVR5cGUsIGtXZWJTb2NrZXRVUkwgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IHN0YXRlcywgb3Bjb2RlcyB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3QgeyBNZXNzYWdlRXZlbnQsIEVycm9yRXZlbnQgfSA9IHJlcXVpcmUoJy4vZXZlbnRzJylcblxuLyogZ2xvYmFscyBCbG9iICovXG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vd2Vic29ja2V0JykuV2ViU29ja2V0fSB3c1xuICovXG5mdW5jdGlvbiBpc0VzdGFibGlzaGVkICh3cykge1xuICAvLyBJZiB0aGUgc2VydmVyJ3MgcmVzcG9uc2UgaXMgdmFsaWRhdGVkIGFzIHByb3ZpZGVkIGZvciBhYm92ZSwgaXQgaXNcbiAgLy8gc2FpZCB0aGF0IF9UaGUgV2ViU29ja2V0IENvbm5lY3Rpb24gaXMgRXN0YWJsaXNoZWRfIGFuZCB0aGF0IHRoZVxuICAvLyBXZWJTb2NrZXQgQ29ubmVjdGlvbiBpcyBpbiB0aGUgT1BFTiBzdGF0ZS5cbiAgcmV0dXJuIHdzW2tSZWFkeVN0YXRlXSA9PT0gc3RhdGVzLk9QRU5cbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi93ZWJzb2NrZXQnKS5XZWJTb2NrZXR9IHdzXG4gKi9cbmZ1bmN0aW9uIGlzQ2xvc2luZyAod3MpIHtcbiAgLy8gVXBvbiBlaXRoZXIgc2VuZGluZyBvciByZWNlaXZpbmcgYSBDbG9zZSBjb250cm9sIGZyYW1lLCBpdCBpcyBzYWlkXG4gIC8vIHRoYXQgX1RoZSBXZWJTb2NrZXQgQ2xvc2luZyBIYW5kc2hha2UgaXMgU3RhcnRlZF8gYW5kIHRoYXQgdGhlXG4gIC8vIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGluIHRoZSBDTE9TSU5HIHN0YXRlLlxuICByZXR1cm4gd3Nba1JlYWR5U3RhdGVdID09PSBzdGF0ZXMuQ0xPU0lOR1xufVxuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL3dlYnNvY2tldCcpLldlYlNvY2tldH0gd3NcbiAqL1xuZnVuY3Rpb24gaXNDbG9zZWQgKHdzKSB7XG4gIHJldHVybiB3c1trUmVhZHlTdGF0ZV0gPT09IHN0YXRlcy5DTE9TRURcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1ldmVudC1maXJlXG4gKiBAcGFyYW0ge3N0cmluZ30gZVxuICogQHBhcmFtIHtFdmVudFRhcmdldH0gdGFyZ2V0XG4gKiBAcGFyYW0ge0V2ZW50SW5pdCB8IHVuZGVmaW5lZH0gZXZlbnRJbml0RGljdFxuICovXG5mdW5jdGlvbiBmaXJlRXZlbnQgKGUsIHRhcmdldCwgZXZlbnRDb25zdHJ1Y3RvciA9IEV2ZW50LCBldmVudEluaXREaWN0KSB7XG4gIC8vIDEuIElmIGV2ZW50Q29uc3RydWN0b3IgaXMgbm90IGdpdmVuLCB0aGVuIGxldCBldmVudENvbnN0cnVjdG9yIGJlIEV2ZW50LlxuXG4gIC8vIDIuIExldCBldmVudCBiZSB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGFuIGV2ZW50IGdpdmVuIGV2ZW50Q29uc3RydWN0b3IsXG4gIC8vICAgIGluIHRoZSByZWxldmFudCByZWFsbSBvZiB0YXJnZXQuXG4gIC8vIDMuIEluaXRpYWxpemUgZXZlbnTigJlzIHR5cGUgYXR0cmlidXRlIHRvIGUuXG4gIGNvbnN0IGV2ZW50ID0gbmV3IGV2ZW50Q29uc3RydWN0b3IoZSwgZXZlbnRJbml0RGljdCkgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuZXctY2FwXG5cbiAgLy8gNC4gSW5pdGlhbGl6ZSBhbnkgb3RoZXIgSURMIGF0dHJpYnV0ZXMgb2YgZXZlbnQgYXMgZGVzY3JpYmVkIGluIHRoZVxuICAvLyAgICBpbnZvY2F0aW9uIG9mIHRoaXMgYWxnb3JpdGhtLlxuXG4gIC8vIDUuIFJldHVybiB0aGUgcmVzdWx0IG9mIGRpc3BhdGNoaW5nIGV2ZW50IGF0IHRhcmdldCwgd2l0aCBsZWdhY3kgdGFyZ2V0XG4gIC8vICAgIG92ZXJyaWRlIGZsYWcgc2V0IGlmIHNldC5cbiAgdGFyZ2V0LmRpc3BhdGNoRXZlbnQoZXZlbnQpXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNmZWVkYmFjay1mcm9tLXRoZS1wcm90b2NvbFxuICogQHBhcmFtIHtpbXBvcnQoJy4vd2Vic29ja2V0JykuV2ViU29ja2V0fSB3c1xuICogQHBhcmFtIHtudW1iZXJ9IHR5cGUgT3Bjb2RlXG4gKiBAcGFyYW0ge0J1ZmZlcn0gZGF0YSBhcHBsaWNhdGlvbiBkYXRhXG4gKi9cbmZ1bmN0aW9uIHdlYnNvY2tldE1lc3NhZ2VSZWNlaXZlZCAod3MsIHR5cGUsIGRhdGEpIHtcbiAgLy8gMS4gSWYgcmVhZHkgc3RhdGUgaXMgbm90IE9QRU4gKDEpLCB0aGVuIHJldHVybi5cbiAgaWYgKHdzW2tSZWFkeVN0YXRlXSAhPT0gc3RhdGVzLk9QRU4pIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIDIuIExldCBkYXRhRm9yRXZlbnQgYmUgZGV0ZXJtaW5lZCBieSBzd2l0Y2hpbmcgb24gdHlwZSBhbmQgYmluYXJ5IHR5cGU6XG4gIGxldCBkYXRhRm9yRXZlbnRcblxuICBpZiAodHlwZSA9PT0gb3Bjb2Rlcy5URVhUKSB7XG4gICAgLy8gLT4gdHlwZSBpbmRpY2F0ZXMgdGhhdCB0aGUgZGF0YSBpcyBUZXh0XG4gICAgLy8gICAgICBhIG5ldyBET01TdHJpbmcgY29udGFpbmluZyBkYXRhXG4gICAgdHJ5IHtcbiAgICAgIGRhdGFGb3JFdmVudCA9IG5ldyBUZXh0RGVjb2RlcigndXRmLTgnLCB7IGZhdGFsOiB0cnVlIH0pLmRlY29kZShkYXRhKVxuICAgIH0gY2F0Y2gge1xuICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24od3MsICdSZWNlaXZlZCBpbnZhbGlkIFVURi04IGluIHRleHQgZnJhbWUuJylcbiAgICAgIHJldHVyblxuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlID09PSBvcGNvZGVzLkJJTkFSWSkge1xuICAgIGlmICh3c1trQmluYXJ5VHlwZV0gPT09ICdibG9iJykge1xuICAgICAgLy8gLT4gdHlwZSBpbmRpY2F0ZXMgdGhhdCB0aGUgZGF0YSBpcyBCaW5hcnkgYW5kIGJpbmFyeSB0eXBlIGlzIFwiYmxvYlwiXG4gICAgICAvLyAgICAgIGEgbmV3IEJsb2Igb2JqZWN0LCBjcmVhdGVkIGluIHRoZSByZWxldmFudCBSZWFsbSBvZiB0aGUgV2ViU29ja2V0XG4gICAgICAvLyAgICAgIG9iamVjdCwgdGhhdCByZXByZXNlbnRzIGRhdGEgYXMgaXRzIHJhdyBkYXRhXG4gICAgICBkYXRhRm9yRXZlbnQgPSBuZXcgQmxvYihbZGF0YV0pXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIC0+IHR5cGUgaW5kaWNhdGVzIHRoYXQgdGhlIGRhdGEgaXMgQmluYXJ5IGFuZCBiaW5hcnkgdHlwZSBpcyBcImFycmF5YnVmZmVyXCJcbiAgICAgIC8vICAgICAgYSBuZXcgQXJyYXlCdWZmZXIgb2JqZWN0LCBjcmVhdGVkIGluIHRoZSByZWxldmFudCBSZWFsbSBvZiB0aGVcbiAgICAgIC8vICAgICAgV2ViU29ja2V0IG9iamVjdCwgd2hvc2UgY29udGVudHMgYXJlIGRhdGFcbiAgICAgIGRhdGFGb3JFdmVudCA9IG5ldyBVaW50OEFycmF5KGRhdGEpLmJ1ZmZlclxuICAgIH1cbiAgfVxuXG4gIC8vIDMuIEZpcmUgYW4gZXZlbnQgbmFtZWQgbWVzc2FnZSBhdCB0aGUgV2ViU29ja2V0IG9iamVjdCwgdXNpbmcgTWVzc2FnZUV2ZW50LFxuICAvLyAgICB3aXRoIHRoZSBvcmlnaW4gYXR0cmlidXRlIGluaXRpYWxpemVkIHRvIHRoZSBzZXJpYWxpemF0aW9uIG9mIHRoZSBXZWJTb2NrZXRcbiAgLy8gICAgb2JqZWN04oCZcyB1cmwncyBvcmlnaW4sIGFuZCB0aGUgZGF0YSBhdHRyaWJ1dGUgaW5pdGlhbGl6ZWQgdG8gZGF0YUZvckV2ZW50LlxuICBmaXJlRXZlbnQoJ21lc3NhZ2UnLCB3cywgTWVzc2FnZUV2ZW50LCB7XG4gICAgb3JpZ2luOiB3c1trV2ViU29ja2V0VVJMXS5vcmlnaW4sXG4gICAgZGF0YTogZGF0YUZvckV2ZW50XG4gIH0pXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzY0NTVcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmMyNjE2XG4gKiBAc2VlIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTM5ODQwN1xuICogQHBhcmFtIHtzdHJpbmd9IHByb3RvY29sXG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRTdWJwcm90b2NvbCAocHJvdG9jb2wpIHtcbiAgLy8gSWYgcHJlc2VudCwgdGhpcyB2YWx1ZSBpbmRpY2F0ZXMgb25lXG4gIC8vIG9yIG1vcmUgY29tbWEtc2VwYXJhdGVkIHN1YnByb3RvY29sIHRoZSBjbGllbnQgd2lzaGVzIHRvIHNwZWFrLFxuICAvLyBvcmRlcmVkIGJ5IHByZWZlcmVuY2UuICBUaGUgZWxlbWVudHMgdGhhdCBjb21wcmlzZSB0aGlzIHZhbHVlXG4gIC8vIE1VU1QgYmUgbm9uLWVtcHR5IHN0cmluZ3Mgd2l0aCBjaGFyYWN0ZXJzIGluIHRoZSByYW5nZSBVKzAwMjEgdG9cbiAgLy8gVSswMDdFIG5vdCBpbmNsdWRpbmcgc2VwYXJhdG9yIGNoYXJhY3RlcnMgYXMgZGVmaW5lZCBpblxuICAvLyBbUkZDMjYxNl0gYW5kIE1VU1QgYWxsIGJlIHVuaXF1ZSBzdHJpbmdzLlxuICBpZiAocHJvdG9jb2wubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBmb3IgKGNvbnN0IGNoYXIgb2YgcHJvdG9jb2wpIHtcbiAgICBjb25zdCBjb2RlID0gY2hhci5jaGFyQ29kZUF0KDApXG5cbiAgICBpZiAoXG4gICAgICBjb2RlIDwgMHgyMSB8fFxuICAgICAgY29kZSA+IDB4N0UgfHxcbiAgICAgIGNoYXIgPT09ICcoJyB8fFxuICAgICAgY2hhciA9PT0gJyknIHx8XG4gICAgICBjaGFyID09PSAnPCcgfHxcbiAgICAgIGNoYXIgPT09ICc+JyB8fFxuICAgICAgY2hhciA9PT0gJ0AnIHx8XG4gICAgICBjaGFyID09PSAnLCcgfHxcbiAgICAgIGNoYXIgPT09ICc7JyB8fFxuICAgICAgY2hhciA9PT0gJzonIHx8XG4gICAgICBjaGFyID09PSAnXFxcXCcgfHxcbiAgICAgIGNoYXIgPT09ICdcIicgfHxcbiAgICAgIGNoYXIgPT09ICcvJyB8fFxuICAgICAgY2hhciA9PT0gJ1snIHx8XG4gICAgICBjaGFyID09PSAnXScgfHxcbiAgICAgIGNoYXIgPT09ICc/JyB8fFxuICAgICAgY2hhciA9PT0gJz0nIHx8XG4gICAgICBjaGFyID09PSAneycgfHxcbiAgICAgIGNoYXIgPT09ICd9JyB8fFxuICAgICAgY29kZSA9PT0gMzIgfHwgLy8gU1BcbiAgICAgIGNvZGUgPT09IDkgLy8gSFRcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzY0NTUjc2VjdGlvbi03LTRcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlXG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRTdGF0dXNDb2RlIChjb2RlKSB7XG4gIGlmIChjb2RlID49IDEwMDAgJiYgY29kZSA8IDEwMTUpIHtcbiAgICByZXR1cm4gKFxuICAgICAgY29kZSAhPT0gMTAwNCAmJiAvLyByZXNlcnZlZFxuICAgICAgY29kZSAhPT0gMTAwNSAmJiAvLyBcIk1VU1QgTk9UIGJlIHNldCBhcyBhIHN0YXR1cyBjb2RlXCJcbiAgICAgIGNvZGUgIT09IDEwMDYgLy8gXCJNVVNUIE5PVCBiZSBzZXQgYXMgYSBzdGF0dXMgY29kZVwiXG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIGNvZGUgPj0gMzAwMCAmJiBjb2RlIDw9IDQ5OTlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi93ZWJzb2NrZXQnKS5XZWJTb2NrZXR9IHdzXG4gKiBAcGFyYW0ge3N0cmluZ3x1bmRlZmluZWR9IHJlYXNvblxuICovXG5mdW5jdGlvbiBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbiAod3MsIHJlYXNvbikge1xuICBjb25zdCB7IFtrQ29udHJvbGxlcl06IGNvbnRyb2xsZXIsIFtrUmVzcG9uc2VdOiByZXNwb25zZSB9ID0gd3NcblxuICBjb250cm9sbGVyLmFib3J0KClcblxuICBpZiAocmVzcG9uc2U/LnNvY2tldCAmJiAhcmVzcG9uc2Uuc29ja2V0LmRlc3Ryb3llZCkge1xuICAgIHJlc3BvbnNlLnNvY2tldC5kZXN0cm95KClcbiAgfVxuXG4gIGlmIChyZWFzb24pIHtcbiAgICBmaXJlRXZlbnQoJ2Vycm9yJywgd3MsIEVycm9yRXZlbnQsIHtcbiAgICAgIGVycm9yOiBuZXcgRXJyb3IocmVhc29uKVxuICAgIH0pXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGlzRXN0YWJsaXNoZWQsXG4gIGlzQ2xvc2luZyxcbiAgaXNDbG9zZWQsXG4gIGZpcmVFdmVudCxcbiAgaXNWYWxpZFN1YnByb3RvY29sLFxuICBpc1ZhbGlkU3RhdHVzQ29kZSxcbiAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24sXG4gIHdlYnNvY2tldE1lc3NhZ2VSZWNlaXZlZFxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgZGlhZ25vc3RpY3NDaGFubmVsID0gcmVxdWlyZSgnZGlhZ25vc3RpY3NfY2hhbm5lbCcpXG5jb25zdCB7IHVpZCwgc3RhdGVzIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7XG4gIGtSZWFkeVN0YXRlLFxuICBrU2VudENsb3NlLFxuICBrQnl0ZVBhcnNlcixcbiAga1JlY2VpdmVkQ2xvc2Vcbn0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBmaXJlRXZlbnQsIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uIH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBDbG9zZUV2ZW50IH0gPSByZXF1aXJlKCcuL2V2ZW50cycpXG5jb25zdCB7IG1ha2VSZXF1ZXN0IH0gPSByZXF1aXJlKCcuLi9mZXRjaC9yZXF1ZXN0JylcbmNvbnN0IHsgZmV0Y2hpbmcgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2luZGV4JylcbmNvbnN0IHsgSGVhZGVycyB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvaGVhZGVycycpXG5jb25zdCB7IGdldEdsb2JhbERpc3BhdGNoZXIgfSA9IHJlcXVpcmUoJy4uL2dsb2JhbCcpXG5jb25zdCB7IGtIZWFkZXJzTGlzdCB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcblxuY29uc3QgY2hhbm5lbHMgPSB7fVxuY2hhbm5lbHMub3BlbiA9IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6d2Vic29ja2V0Om9wZW4nKVxuY2hhbm5lbHMuY2xvc2UgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOndlYnNvY2tldDpjbG9zZScpXG5jaGFubmVscy5zb2NrZXRFcnJvciA9IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6d2Vic29ja2V0OnNvY2tldF9lcnJvcicpXG5cbi8qKiBAdHlwZSB7aW1wb3J0KCdjcnlwdG8nKX0gKi9cbmxldCBjcnlwdG9cbnRyeSB7XG4gIGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpXG59IGNhdGNoIHtcblxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC13ZWJzb2NrZXQtZXN0YWJsaXNoXG4gKiBAcGFyYW0ge1VSTH0gdXJsXG4gKiBAcGFyYW0ge3N0cmluZ3xzdHJpbmdbXX0gcHJvdG9jb2xzXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi93ZWJzb2NrZXQnKS5XZWJTb2NrZXR9IHdzXG4gKiBAcGFyYW0geyhyZXNwb25zZTogYW55KSA9PiB2b2lkfSBvbkVzdGFibGlzaFxuICogQHBhcmFtIHtQYXJ0aWFsPGltcG9ydCgnLi4vLi4vdHlwZXMvd2Vic29ja2V0JykuV2ViU29ja2V0SW5pdD59IG9wdGlvbnNcbiAqL1xuZnVuY3Rpb24gZXN0YWJsaXNoV2ViU29ja2V0Q29ubmVjdGlvbiAodXJsLCBwcm90b2NvbHMsIHdzLCBvbkVzdGFibGlzaCwgb3B0aW9ucykge1xuICAvLyAxLiBMZXQgcmVxdWVzdFVSTCBiZSBhIGNvcHkgb2YgdXJsLCB3aXRoIGl0cyBzY2hlbWUgc2V0IHRvIFwiaHR0cFwiLCBpZiB1cmzigJlzXG4gIC8vICAgIHNjaGVtZSBpcyBcIndzXCIsIGFuZCB0byBcImh0dHBzXCIgb3RoZXJ3aXNlLlxuICBjb25zdCByZXF1ZXN0VVJMID0gdXJsXG5cbiAgcmVxdWVzdFVSTC5wcm90b2NvbCA9IHVybC5wcm90b2NvbCA9PT0gJ3dzOicgPyAnaHR0cDonIDogJ2h0dHBzOidcblxuICAvLyAyLiBMZXQgcmVxdWVzdCBiZSBhIG5ldyByZXF1ZXN0LCB3aG9zZSBVUkwgaXMgcmVxdWVzdFVSTCwgY2xpZW50IGlzIGNsaWVudCxcbiAgLy8gICAgc2VydmljZS13b3JrZXJzIG1vZGUgaXMgXCJub25lXCIsIHJlZmVycmVyIGlzIFwibm8tcmVmZXJyZXJcIiwgbW9kZSBpc1xuICAvLyAgICBcIndlYnNvY2tldFwiLCBjcmVkZW50aWFscyBtb2RlIGlzIFwiaW5jbHVkZVwiLCBjYWNoZSBtb2RlIGlzIFwibm8tc3RvcmVcIiAsXG4gIC8vICAgIGFuZCByZWRpcmVjdCBtb2RlIGlzIFwiZXJyb3JcIi5cbiAgY29uc3QgcmVxdWVzdCA9IG1ha2VSZXF1ZXN0KHtcbiAgICB1cmxMaXN0OiBbcmVxdWVzdFVSTF0sXG4gICAgc2VydmljZVdvcmtlcnM6ICdub25lJyxcbiAgICByZWZlcnJlcjogJ25vLXJlZmVycmVyJyxcbiAgICBtb2RlOiAnd2Vic29ja2V0JyxcbiAgICBjcmVkZW50aWFsczogJ2luY2x1ZGUnLFxuICAgIGNhY2hlOiAnbm8tc3RvcmUnLFxuICAgIHJlZGlyZWN0OiAnZXJyb3InXG4gIH0pXG5cbiAgLy8gTm90ZTogdW5kaWNpIGV4dGVuc2lvbiwgYWxsb3cgc2V0dGluZyBjdXN0b20gaGVhZGVycy5cbiAgaWYgKG9wdGlvbnMuaGVhZGVycykge1xuICAgIGNvbnN0IGhlYWRlcnNMaXN0ID0gbmV3IEhlYWRlcnMob3B0aW9ucy5oZWFkZXJzKVtrSGVhZGVyc0xpc3RdXG5cbiAgICByZXF1ZXN0LmhlYWRlcnNMaXN0ID0gaGVhZGVyc0xpc3RcbiAgfVxuXG4gIC8vIDMuIEFwcGVuZCAoYFVwZ3JhZGVgLCBgd2Vic29ja2V0YCkgdG8gcmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QuXG4gIC8vIDQuIEFwcGVuZCAoYENvbm5lY3Rpb25gLCBgVXBncmFkZWApIHRvIHJlcXVlc3TigJlzIGhlYWRlciBsaXN0LlxuICAvLyBOb3RlOiBib3RoIG9mIHRoZXNlIGFyZSBoYW5kbGVkIGJ5IHVuZGljaSBjdXJyZW50bHkuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2Jsb2IvNjhjMjY5YzQxNDRjNDQ2ZjNmMTIyMDk1MTMzOGRhZWY0YTZiNWVjNC9saWIvY2xpZW50LmpzI0wxMzk3XG5cbiAgLy8gNS4gTGV0IGtleVZhbHVlIGJlIGEgbm9uY2UgY29uc2lzdGluZyBvZiBhIHJhbmRvbWx5IHNlbGVjdGVkXG4gIC8vICAgIDE2LWJ5dGUgdmFsdWUgdGhhdCBoYXMgYmVlbiBmb3JnaXZpbmctYmFzZTY0LWVuY29kZWQgYW5kXG4gIC8vICAgIGlzb21vcnBoaWMgZW5jb2RlZC5cbiAgY29uc3Qga2V5VmFsdWUgPSBjcnlwdG8ucmFuZG9tQnl0ZXMoMTYpLnRvU3RyaW5nKCdiYXNlNjQnKVxuXG4gIC8vIDYuIEFwcGVuZCAoYFNlYy1XZWJTb2NrZXQtS2V5YCwga2V5VmFsdWUpIHRvIHJlcXVlc3TigJlzXG4gIC8vICAgIGhlYWRlciBsaXN0LlxuICByZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnc2VjLXdlYnNvY2tldC1rZXknLCBrZXlWYWx1ZSlcblxuICAvLyA3LiBBcHBlbmQgKGBTZWMtV2ViU29ja2V0LVZlcnNpb25gLCBgMTNgKSB0byByZXF1ZXN04oCZc1xuICAvLyAgICBoZWFkZXIgbGlzdC5cbiAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ3NlYy13ZWJzb2NrZXQtdmVyc2lvbicsICcxMycpXG5cbiAgLy8gOC4gRm9yIGVhY2ggcHJvdG9jb2wgaW4gcHJvdG9jb2xzLCBjb21iaW5lXG4gIC8vICAgIChgU2VjLVdlYlNvY2tldC1Qcm90b2NvbGAsIHByb3RvY29sKSBpbiByZXF1ZXN04oCZcyBoZWFkZXJcbiAgLy8gICAgbGlzdC5cbiAgZm9yIChjb25zdCBwcm90b2NvbCBvZiBwcm90b2NvbHMpIHtcbiAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnc2VjLXdlYnNvY2tldC1wcm90b2NvbCcsIHByb3RvY29sKVxuICB9XG5cbiAgLy8gOS4gTGV0IHBlcm1lc3NhZ2VEZWZsYXRlIGJlIGEgdXNlci1hZ2VudCBkZWZpbmVkXG4gIC8vICAgIFwicGVybWVzc2FnZS1kZWZsYXRlXCIgZXh0ZW5zaW9uIGhlYWRlciB2YWx1ZS5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvZ2Vja28tZGV2L2Jsb2IvY2U3ODIzNGY1ZTY1M2E1ZDM5MTY4MTNmZjk5MGYwNTM1MTAyMjdiYy9uZXR3ZXJrL3Byb3RvY29sL3dlYnNvY2tldC9XZWJTb2NrZXRDaGFubmVsLmNwcCNMMjY3M1xuICAvLyBUT0RPOiBlbmFibGUgb25jZSBwZXJtZXNzYWdlLWRlZmxhdGUgaXMgc3VwcG9ydGVkXG4gIGNvbnN0IHBlcm1lc3NhZ2VEZWZsYXRlID0gJycgLy8gJ3Blcm1lc3NhZ2UtZGVmbGF0ZTsgMTUnXG5cbiAgLy8gMTAuIEFwcGVuZCAoYFNlYy1XZWJTb2NrZXQtRXh0ZW5zaW9uc2AsIHBlcm1lc3NhZ2VEZWZsYXRlKSB0b1xuICAvLyAgICAgcmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QuXG4gIC8vIHJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdzZWMtd2Vic29ja2V0LWV4dGVuc2lvbnMnLCBwZXJtZXNzYWdlRGVmbGF0ZSlcblxuICAvLyAxMS4gRmV0Y2ggcmVxdWVzdCB3aXRoIHVzZVBhcmFsbGVsUXVldWUgc2V0IHRvIHRydWUsIGFuZFxuICAvLyAgICAgcHJvY2Vzc1Jlc3BvbnNlIGdpdmVuIHJlc3BvbnNlIGJlaW5nIHRoZXNlIHN0ZXBzOlxuICBjb25zdCBjb250cm9sbGVyID0gZmV0Y2hpbmcoe1xuICAgIHJlcXVlc3QsXG4gICAgdXNlUGFyYWxsZWxRdWV1ZTogdHJ1ZSxcbiAgICBkaXNwYXRjaGVyOiBvcHRpb25zLmRpc3BhdGNoZXIgPz8gZ2V0R2xvYmFsRGlzcGF0Y2hlcigpLFxuICAgIHByb2Nlc3NSZXNwb25zZSAocmVzcG9uc2UpIHtcbiAgICAgIC8vIDEuIElmIHJlc3BvbnNlIGlzIGEgbmV0d29yayBlcnJvciBvciBpdHMgc3RhdHVzIGlzIG5vdCAxMDEsXG4gICAgICAvLyAgICBmYWlsIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbi5cbiAgICAgIGlmIChyZXNwb25zZS50eXBlID09PSAnZXJyb3InIHx8IHJlc3BvbnNlLnN0YXR1cyAhPT0gMTAxKSB7XG4gICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnUmVjZWl2ZWQgbmV0d29yayBlcnJvciBvciBub24tMTAxIHN0YXR1cyBjb2RlLicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyAyLiBJZiBwcm90b2NvbHMgaXMgbm90IHRoZSBlbXB0eSBsaXN0IGFuZCBleHRyYWN0aW5nIGhlYWRlclxuICAgICAgLy8gICAgbGlzdCB2YWx1ZXMgZ2l2ZW4gYFNlYy1XZWJTb2NrZXQtUHJvdG9jb2xgIGFuZCByZXNwb25zZeKAmXNcbiAgICAgIC8vICAgIGhlYWRlciBsaXN0IHJlc3VsdHMgaW4gbnVsbCwgZmFpbHVyZSwgb3IgdGhlIGVtcHR5IGJ5dGVcbiAgICAgIC8vICAgIHNlcXVlbmNlLCB0aGVuIGZhaWwgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uLlxuICAgICAgaWYgKHByb3RvY29scy5sZW5ndGggIT09IDAgJiYgIXJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnU2VjLVdlYlNvY2tldC1Qcm90b2NvbCcpKSB7XG4gICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnU2VydmVyIGRpZCBub3QgcmVzcG9uZCB3aXRoIHNlbnQgcHJvdG9jb2xzLicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyAzLiBGb2xsb3cgdGhlIHJlcXVpcmVtZW50cyBzdGF0ZWQgc3RlcCAyIHRvIHN0ZXAgNiwgaW5jbHVzaXZlLFxuICAgICAgLy8gICAgb2YgdGhlIGxhc3Qgc2V0IG9mIHN0ZXBzIGluIHNlY3Rpb24gNC4xIG9mIFRoZSBXZWJTb2NrZXRcbiAgICAgIC8vICAgIFByb3RvY29sIHRvIHZhbGlkYXRlIHJlc3BvbnNlLiBUaGlzIGVpdGhlciByZXN1bHRzIGluIGZhaWxcbiAgICAgIC8vICAgIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBvciB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gaXNcbiAgICAgIC8vICAgIGVzdGFibGlzaGVkLlxuXG4gICAgICAvLyAyLiBJZiB0aGUgcmVzcG9uc2UgbGFja3MgYW4gfFVwZ3JhZGV8IGhlYWRlciBmaWVsZCBvciB0aGUgfFVwZ3JhZGV8XG4gICAgICAvLyAgICBoZWFkZXIgZmllbGQgY29udGFpbnMgYSB2YWx1ZSB0aGF0IGlzIG5vdCBhbiBBU0NJSSBjYXNlLVxuICAgICAgLy8gICAgaW5zZW5zaXRpdmUgbWF0Y2ggZm9yIHRoZSB2YWx1ZSBcIndlYnNvY2tldFwiLCB0aGUgY2xpZW50IE1VU1RcbiAgICAgIC8vICAgIF9GYWlsIHRoZSBXZWJTb2NrZXQgQ29ubmVjdGlvbl8uXG4gICAgICBpZiAocmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdVcGdyYWRlJyk/LnRvTG93ZXJDYXNlKCkgIT09ICd3ZWJzb2NrZXQnKSB7XG4gICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnU2VydmVyIGRpZCBub3Qgc2V0IFVwZ3JhZGUgaGVhZGVyIHRvIFwid2Vic29ja2V0XCIuJylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDMuIElmIHRoZSByZXNwb25zZSBsYWNrcyBhIHxDb25uZWN0aW9ufCBoZWFkZXIgZmllbGQgb3IgdGhlXG4gICAgICAvLyAgICB8Q29ubmVjdGlvbnwgaGVhZGVyIGZpZWxkIGRvZXNuJ3QgY29udGFpbiBhIHRva2VuIHRoYXQgaXMgYW5cbiAgICAgIC8vICAgIEFTQ0lJIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yIHRoZSB2YWx1ZSBcIlVwZ3JhZGVcIiwgdGhlIGNsaWVudFxuICAgICAgLy8gICAgTVVTVCBfRmFpbCB0aGUgV2ViU29ja2V0IENvbm5lY3Rpb25fLlxuICAgICAgaWYgKHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnQ29ubmVjdGlvbicpPy50b0xvd2VyQ2FzZSgpICE9PSAndXBncmFkZScpIHtcbiAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24od3MsICdTZXJ2ZXIgZGlkIG5vdCBzZXQgQ29ubmVjdGlvbiBoZWFkZXIgdG8gXCJ1cGdyYWRlXCIuJylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDQuIElmIHRoZSByZXNwb25zZSBsYWNrcyBhIHxTZWMtV2ViU29ja2V0LUFjY2VwdHwgaGVhZGVyIGZpZWxkIG9yXG4gICAgICAvLyAgICB0aGUgfFNlYy1XZWJTb2NrZXQtQWNjZXB0fCBjb250YWlucyBhIHZhbHVlIG90aGVyIHRoYW4gdGhlXG4gICAgICAvLyAgICBiYXNlNjQtZW5jb2RlZCBTSEEtMSBvZiB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0aGUgfFNlYy1XZWJTb2NrZXQtXG4gICAgICAvLyAgICBLZXl8IChhcyBhIHN0cmluZywgbm90IGJhc2U2NC1kZWNvZGVkKSB3aXRoIHRoZSBzdHJpbmcgXCIyNThFQUZBNS1cbiAgICAgIC8vICAgIEU5MTQtNDdEQS05NUNBLUM1QUIwREM4NUIxMVwiIGJ1dCBpZ25vcmluZyBhbnkgbGVhZGluZyBhbmRcbiAgICAgIC8vICAgIHRyYWlsaW5nIHdoaXRlc3BhY2UsIHRoZSBjbGllbnQgTVVTVCBfRmFpbCB0aGUgV2ViU29ja2V0XG4gICAgICAvLyAgICBDb25uZWN0aW9uXy5cbiAgICAgIGNvbnN0IHNlY1dTQWNjZXB0ID0gcmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdTZWMtV2ViU29ja2V0LUFjY2VwdCcpXG4gICAgICBjb25zdCBkaWdlc3QgPSBjcnlwdG8uY3JlYXRlSGFzaCgnc2hhMScpLnVwZGF0ZShrZXlWYWx1ZSArIHVpZCkuZGlnZXN0KCdiYXNlNjQnKVxuICAgICAgaWYgKHNlY1dTQWNjZXB0ICE9PSBkaWdlc3QpIHtcbiAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24od3MsICdJbmNvcnJlY3QgaGFzaCByZWNlaXZlZCBpbiBTZWMtV2ViU29ja2V0LUFjY2VwdCBoZWFkZXIuJylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDUuIElmIHRoZSByZXNwb25zZSBpbmNsdWRlcyBhIHxTZWMtV2ViU29ja2V0LUV4dGVuc2lvbnN8IGhlYWRlclxuICAgICAgLy8gICAgZmllbGQgYW5kIHRoaXMgaGVhZGVyIGZpZWxkIGluZGljYXRlcyB0aGUgdXNlIG9mIGFuIGV4dGVuc2lvblxuICAgICAgLy8gICAgdGhhdCB3YXMgbm90IHByZXNlbnQgaW4gdGhlIGNsaWVudCdzIGhhbmRzaGFrZSAodGhlIHNlcnZlciBoYXNcbiAgICAgIC8vICAgIGluZGljYXRlZCBhbiBleHRlbnNpb24gbm90IHJlcXVlc3RlZCBieSB0aGUgY2xpZW50KSwgdGhlIGNsaWVudFxuICAgICAgLy8gICAgTVVTVCBfRmFpbCB0aGUgV2ViU29ja2V0IENvbm5lY3Rpb25fLiAgKFRoZSBwYXJzaW5nIG9mIHRoaXNcbiAgICAgIC8vICAgIGhlYWRlciBmaWVsZCB0byBkZXRlcm1pbmUgd2hpY2ggZXh0ZW5zaW9ucyBhcmUgcmVxdWVzdGVkIGlzXG4gICAgICAvLyAgICBkaXNjdXNzZWQgaW4gU2VjdGlvbiA5LjEuKVxuICAgICAgY29uc3Qgc2VjRXh0ZW5zaW9uID0gcmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdTZWMtV2ViU29ja2V0LUV4dGVuc2lvbnMnKVxuXG4gICAgICBpZiAoc2VjRXh0ZW5zaW9uICE9PSBudWxsICYmIHNlY0V4dGVuc2lvbiAhPT0gcGVybWVzc2FnZURlZmxhdGUpIHtcbiAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24od3MsICdSZWNlaXZlZCBkaWZmZXJlbnQgcGVybWVzc2FnZS1kZWZsYXRlIHRoYW4gdGhlIG9uZSBzZXQuJylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDYuIElmIHRoZSByZXNwb25zZSBpbmNsdWRlcyBhIHxTZWMtV2ViU29ja2V0LVByb3RvY29sfCBoZWFkZXIgZmllbGRcbiAgICAgIC8vICAgIGFuZCB0aGlzIGhlYWRlciBmaWVsZCBpbmRpY2F0ZXMgdGhlIHVzZSBvZiBhIHN1YnByb3RvY29sIHRoYXQgd2FzXG4gICAgICAvLyAgICBub3QgcHJlc2VudCBpbiB0aGUgY2xpZW50J3MgaGFuZHNoYWtlICh0aGUgc2VydmVyIGhhcyBpbmRpY2F0ZWQgYVxuICAgICAgLy8gICAgc3VicHJvdG9jb2wgbm90IHJlcXVlc3RlZCBieSB0aGUgY2xpZW50KSwgdGhlIGNsaWVudCBNVVNUIF9GYWlsXG4gICAgICAvLyAgICB0aGUgV2ViU29ja2V0IENvbm5lY3Rpb25fLlxuICAgICAgY29uc3Qgc2VjUHJvdG9jb2wgPSByZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ1NlYy1XZWJTb2NrZXQtUHJvdG9jb2wnKVxuXG4gICAgICBpZiAoc2VjUHJvdG9jb2wgIT09IG51bGwgJiYgc2VjUHJvdG9jb2wgIT09IHJlcXVlc3QuaGVhZGVyc0xpc3QuZ2V0KCdTZWMtV2ViU29ja2V0LVByb3RvY29sJykpIHtcbiAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24od3MsICdQcm90b2NvbCB3YXMgbm90IHNldCBpbiB0aGUgb3BlbmluZyBoYW5kc2hha2UuJylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHJlc3BvbnNlLnNvY2tldC5vbignZGF0YScsIG9uU29ja2V0RGF0YSlcbiAgICAgIHJlc3BvbnNlLnNvY2tldC5vbignY2xvc2UnLCBvblNvY2tldENsb3NlKVxuICAgICAgcmVzcG9uc2Uuc29ja2V0Lm9uKCdlcnJvcicsIG9uU29ja2V0RXJyb3IpXG5cbiAgICAgIGlmIChjaGFubmVscy5vcGVuLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICAgIGNoYW5uZWxzLm9wZW4ucHVibGlzaCh7XG4gICAgICAgICAgYWRkcmVzczogcmVzcG9uc2Uuc29ja2V0LmFkZHJlc3MoKSxcbiAgICAgICAgICBwcm90b2NvbDogc2VjUHJvdG9jb2wsXG4gICAgICAgICAgZXh0ZW5zaW9uczogc2VjRXh0ZW5zaW9uXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIG9uRXN0YWJsaXNoKHJlc3BvbnNlKVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gY29udHJvbGxlclxufVxuXG4vKipcbiAqIEBwYXJhbSB7QnVmZmVyfSBjaHVua1xuICovXG5mdW5jdGlvbiBvblNvY2tldERhdGEgKGNodW5rKSB7XG4gIGlmICghdGhpcy53c1trQnl0ZVBhcnNlcl0ud3JpdGUoY2h1bmspKSB7XG4gICAgdGhpcy5wYXVzZSgpXG4gIH1cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2ZlZWRiYWNrLWZyb20tdGhlLXByb3RvY29sXG4gKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NSNzZWN0aW9uLTcuMS40XG4gKi9cbmZ1bmN0aW9uIG9uU29ja2V0Q2xvc2UgKCkge1xuICBjb25zdCB7IHdzIH0gPSB0aGlzXG5cbiAgLy8gSWYgdGhlIFRDUCBjb25uZWN0aW9uIHdhcyBjbG9zZWQgYWZ0ZXIgdGhlXG4gIC8vIFdlYlNvY2tldCBjbG9zaW5nIGhhbmRzaGFrZSB3YXMgY29tcGxldGVkLCB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb25cbiAgLy8gaXMgc2FpZCB0byBoYXZlIGJlZW4gY2xvc2VkIF9jbGVhbmx5Xy5cbiAgY29uc3Qgd2FzQ2xlYW4gPSB3c1trU2VudENsb3NlXSAmJiB3c1trUmVjZWl2ZWRDbG9zZV1cblxuICBsZXQgY29kZSA9IDEwMDVcbiAgbGV0IHJlYXNvbiA9ICcnXG5cbiAgY29uc3QgcmVzdWx0ID0gd3Nba0J5dGVQYXJzZXJdLmNsb3NpbmdJbmZvXG5cbiAgaWYgKHJlc3VsdCkge1xuICAgIGNvZGUgPSByZXN1bHQuY29kZSA/PyAxMDA1XG4gICAgcmVhc29uID0gcmVzdWx0LnJlYXNvblxuICB9IGVsc2UgaWYgKCF3c1trU2VudENsb3NlXSkge1xuICAgIC8vIElmIF9UaGUgV2ViU29ja2V0XG4gICAgLy8gQ29ubmVjdGlvbiBpcyBDbG9zZWRfIGFuZCBubyBDbG9zZSBjb250cm9sIGZyYW1lIHdhcyByZWNlaXZlZCBieSB0aGVcbiAgICAvLyBlbmRwb2ludCAoc3VjaCBhcyBjb3VsZCBvY2N1ciBpZiB0aGUgdW5kZXJseWluZyB0cmFuc3BvcnQgY29ubmVjdGlvblxuICAgIC8vIGlzIGxvc3QpLCBfVGhlIFdlYlNvY2tldCBDb25uZWN0aW9uIENsb3NlIENvZGVfIGlzIGNvbnNpZGVyZWQgdG8gYmVcbiAgICAvLyAxMDA2LlxuICAgIGNvZGUgPSAxMDA2XG4gIH1cblxuICAvLyAxLiBDaGFuZ2UgdGhlIHJlYWR5IHN0YXRlIHRvIENMT1NFRCAoMykuXG4gIHdzW2tSZWFkeVN0YXRlXSA9IHN0YXRlcy5DTE9TRURcblxuICAvLyAyLiBJZiB0aGUgdXNlciBhZ2VudCB3YXMgcmVxdWlyZWQgdG8gZmFpbCB0aGUgV2ViU29ja2V0XG4gIC8vICAgIGNvbm5lY3Rpb24sIG9yIGlmIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiB3YXMgY2xvc2VkXG4gIC8vICAgIGFmdGVyIGJlaW5nIGZsYWdnZWQgYXMgZnVsbCwgZmlyZSBhbiBldmVudCBuYW1lZCBlcnJvclxuICAvLyAgICBhdCB0aGUgV2ViU29ja2V0IG9iamVjdC5cbiAgLy8gVE9ET1xuXG4gIC8vIDMuIEZpcmUgYW4gZXZlbnQgbmFtZWQgY2xvc2UgYXQgdGhlIFdlYlNvY2tldCBvYmplY3QsXG4gIC8vICAgIHVzaW5nIENsb3NlRXZlbnQsIHdpdGggdGhlIHdhc0NsZWFuIGF0dHJpYnV0ZVxuICAvLyAgICBpbml0aWFsaXplZCB0byB0cnVlIGlmIHRoZSBjb25uZWN0aW9uIGNsb3NlZCBjbGVhbmx5XG4gIC8vICAgIGFuZCBmYWxzZSBvdGhlcndpc2UsIHRoZSBjb2RlIGF0dHJpYnV0ZSBpbml0aWFsaXplZCB0b1xuICAvLyAgICB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gY2xvc2UgY29kZSwgYW5kIHRoZSByZWFzb25cbiAgLy8gICAgYXR0cmlidXRlIGluaXRpYWxpemVkIHRvIHRoZSByZXN1bHQgb2YgYXBwbHlpbmcgVVRGLThcbiAgLy8gICAgZGVjb2RlIHdpdGhvdXQgQk9NIHRvIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBjbG9zZVxuICAvLyAgICByZWFzb24uXG4gIGZpcmVFdmVudCgnY2xvc2UnLCB3cywgQ2xvc2VFdmVudCwge1xuICAgIHdhc0NsZWFuLCBjb2RlLCByZWFzb25cbiAgfSlcblxuICBpZiAoY2hhbm5lbHMuY2xvc2UuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICBjaGFubmVscy5jbG9zZS5wdWJsaXNoKHtcbiAgICAgIHdlYnNvY2tldDogd3MsXG4gICAgICBjb2RlLFxuICAgICAgcmVhc29uXG4gICAgfSlcbiAgfVxufVxuXG5mdW5jdGlvbiBvblNvY2tldEVycm9yIChlcnJvcikge1xuICBjb25zdCB7IHdzIH0gPSB0aGlzXG5cbiAgd3Nba1JlYWR5U3RhdGVdID0gc3RhdGVzLkNMT1NJTkdcblxuICBpZiAoY2hhbm5lbHMuc29ja2V0RXJyb3IuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICBjaGFubmVscy5zb2NrZXRFcnJvci5wdWJsaXNoKGVycm9yKVxuICB9XG5cbiAgdGhpcy5kZXN0cm95KClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGVzdGFibGlzaFdlYlNvY2tldENvbm5lY3Rpb25cbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgbWF4VW5zaWduZWQxNkJpdCB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuXG4vKiogQHR5cGUge2ltcG9ydCgnY3J5cHRvJyl9ICovXG5sZXQgY3J5cHRvXG50cnkge1xuICBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKVxufSBjYXRjaCB7XG5cbn1cblxuY2xhc3MgV2Vic29ja2V0RnJhbWVTZW5kIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7QnVmZmVyfHVuZGVmaW5lZH0gZGF0YVxuICAgKi9cbiAgY29uc3RydWN0b3IgKGRhdGEpIHtcbiAgICB0aGlzLmZyYW1lRGF0YSA9IGRhdGFcbiAgICB0aGlzLm1hc2tLZXkgPSBjcnlwdG8ucmFuZG9tQnl0ZXMoNClcbiAgfVxuXG4gIGNyZWF0ZUZyYW1lIChvcGNvZGUpIHtcbiAgICBjb25zdCBib2R5TGVuZ3RoID0gdGhpcy5mcmFtZURhdGE/LmJ5dGVMZW5ndGggPz8gMFxuXG4gICAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gICAgbGV0IHBheWxvYWRMZW5ndGggPSBib2R5TGVuZ3RoIC8vIDAtMTI1XG4gICAgbGV0IG9mZnNldCA9IDZcblxuICAgIGlmIChib2R5TGVuZ3RoID4gbWF4VW5zaWduZWQxNkJpdCkge1xuICAgICAgb2Zmc2V0ICs9IDggLy8gcGF5bG9hZCBsZW5ndGggaXMgbmV4dCA4IGJ5dGVzXG4gICAgICBwYXlsb2FkTGVuZ3RoID0gMTI3XG4gICAgfSBlbHNlIGlmIChib2R5TGVuZ3RoID4gMTI1KSB7XG4gICAgICBvZmZzZXQgKz0gMiAvLyBwYXlsb2FkIGxlbmd0aCBpcyBuZXh0IDIgYnl0ZXNcbiAgICAgIHBheWxvYWRMZW5ndGggPSAxMjZcbiAgICB9XG5cbiAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuYWxsb2NVbnNhZmUoYm9keUxlbmd0aCArIG9mZnNldClcblxuICAgIC8vIENsZWFyIGZpcnN0IDIgYnl0ZXMsIGV2ZXJ5dGhpbmcgZWxzZSBpcyBvdmVyd3JpdHRlblxuICAgIGJ1ZmZlclswXSA9IGJ1ZmZlclsxXSA9IDBcbiAgICBidWZmZXJbMF0gfD0gMHg4MCAvLyBGSU5cbiAgICBidWZmZXJbMF0gPSAoYnVmZmVyWzBdICYgMHhGMCkgKyBvcGNvZGUgLy8gb3Bjb2RlXG5cbiAgICAvKiEgd3MuIE1JVCBMaWNlbnNlLiBFaW5hciBPdHRvIFN0YW5ndmlrIDxlaW5hcm9zQGdtYWlsLmNvbT4gKi9cbiAgICBidWZmZXJbb2Zmc2V0IC0gNF0gPSB0aGlzLm1hc2tLZXlbMF1cbiAgICBidWZmZXJbb2Zmc2V0IC0gM10gPSB0aGlzLm1hc2tLZXlbMV1cbiAgICBidWZmZXJbb2Zmc2V0IC0gMl0gPSB0aGlzLm1hc2tLZXlbMl1cbiAgICBidWZmZXJbb2Zmc2V0IC0gMV0gPSB0aGlzLm1hc2tLZXlbM11cblxuICAgIGJ1ZmZlclsxXSA9IHBheWxvYWRMZW5ndGhcblxuICAgIGlmIChwYXlsb2FkTGVuZ3RoID09PSAxMjYpIHtcbiAgICAgIGJ1ZmZlci53cml0ZVVJbnQxNkJFKGJvZHlMZW5ndGgsIDIpXG4gICAgfSBlbHNlIGlmIChwYXlsb2FkTGVuZ3RoID09PSAxMjcpIHtcbiAgICAgIC8vIENsZWFyIGV4dGVuZGVkIHBheWxvYWQgbGVuZ3RoXG4gICAgICBidWZmZXJbMl0gPSBidWZmZXJbM10gPSAwXG4gICAgICBidWZmZXIud3JpdGVVSW50QkUoYm9keUxlbmd0aCwgNCwgNilcbiAgICB9XG5cbiAgICBidWZmZXJbMV0gfD0gMHg4MCAvLyBNQVNLXG5cbiAgICAvLyBtYXNrIGJvZHlcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJvZHlMZW5ndGg7IGkrKykge1xuICAgICAgYnVmZmVyW29mZnNldCArIGldID0gdGhpcy5mcmFtZURhdGFbaV0gXiB0aGlzLm1hc2tLZXlbaSAlIDRdXG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1ZmZlclxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBXZWJzb2NrZXRGcmFtZVNlbmRcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgV3JpdGFibGUgfSA9IHJlcXVpcmUoJ3N0cmVhbScpXG5jb25zdCBkaWFnbm9zdGljc0NoYW5uZWwgPSByZXF1aXJlKCdkaWFnbm9zdGljc19jaGFubmVsJylcbmNvbnN0IHsgcGFyc2VyU3RhdGVzLCBvcGNvZGVzLCBzdGF0ZXMsIGVtcHR5QnVmZmVyIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7IGtSZWFkeVN0YXRlLCBrU2VudENsb3NlLCBrUmVzcG9uc2UsIGtSZWNlaXZlZENsb3NlIH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBpc1ZhbGlkU3RhdHVzQ29kZSwgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24sIHdlYnNvY2tldE1lc3NhZ2VSZWNlaXZlZCB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgV2Vic29ja2V0RnJhbWVTZW5kIH0gPSByZXF1aXJlKCcuL2ZyYW1lJylcblxuLy8gVGhpcyBjb2RlIHdhcyBpbmZsdWVuY2VkIGJ5IHdzIHJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbi8vIENvcHlyaWdodCAoYykgMjAxMSBFaW5hciBPdHRvIFN0YW5ndmlrIDxlaW5hcm9zQGdtYWlsLmNvbT5cbi8vIENvcHlyaWdodCAoYykgMjAxMyBBcm5vdXQgS2F6ZW1pZXIgYW5kIGNvbnRyaWJ1dG9yc1xuLy8gQ29weXJpZ2h0IChjKSAyMDE2IEx1aWdpIFBpbmNhIGFuZCBjb250cmlidXRvcnNcblxuY29uc3QgY2hhbm5lbHMgPSB7fVxuY2hhbm5lbHMucGluZyA9IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6d2Vic29ja2V0OnBpbmcnKVxuY2hhbm5lbHMucG9uZyA9IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6d2Vic29ja2V0OnBvbmcnKVxuXG5jbGFzcyBCeXRlUGFyc2VyIGV4dGVuZHMgV3JpdGFibGUge1xuICAjYnVmZmVycyA9IFtdXG4gICNieXRlT2Zmc2V0ID0gMFxuXG4gICNzdGF0ZSA9IHBhcnNlclN0YXRlcy5JTkZPXG5cbiAgI2luZm8gPSB7fVxuICAjZnJhZ21lbnRzID0gW11cblxuICBjb25zdHJ1Y3RvciAod3MpIHtcbiAgICBzdXBlcigpXG5cbiAgICB0aGlzLndzID0gd3NcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0J1ZmZlcn0gY2h1bmtcbiAgICogQHBhcmFtIHsoKSA9PiB2b2lkfSBjYWxsYmFja1xuICAgKi9cbiAgX3dyaXRlIChjaHVuaywgXywgY2FsbGJhY2spIHtcbiAgICB0aGlzLiNidWZmZXJzLnB1c2goY2h1bmspXG4gICAgdGhpcy4jYnl0ZU9mZnNldCArPSBjaHVuay5sZW5ndGhcblxuICAgIHRoaXMucnVuKGNhbGxiYWNrKVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgd2hlbmV2ZXIgYSBuZXcgY2h1bmsgaXMgcmVjZWl2ZWQuXG4gICAqIENhbGxiYWNrIGlzIGNhbGxlZCB3aGVuZXZlciB0aGVyZSBhcmUgbm8gbW9yZSBjaHVua3MgYnVmZmVyaW5nLFxuICAgKiBvciBub3QgZW5vdWdoIGJ5dGVzIGFyZSBidWZmZXJlZCB0byBwYXJzZS5cbiAgICovXG4gIHJ1biAoY2FsbGJhY2spIHtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKHRoaXMuI3N0YXRlID09PSBwYXJzZXJTdGF0ZXMuSU5GTykge1xuICAgICAgICAvLyBJZiB0aGVyZSBhcmVuJ3QgZW5vdWdoIGJ5dGVzIHRvIHBhcnNlIHRoZSBwYXlsb2FkIGxlbmd0aCwgZXRjLlxuICAgICAgICBpZiAodGhpcy4jYnl0ZU9mZnNldCA8IDIpIHtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYnVmZmVyID0gdGhpcy5jb25zdW1lKDIpXG5cbiAgICAgICAgdGhpcy4jaW5mby5maW4gPSAoYnVmZmVyWzBdICYgMHg4MCkgIT09IDBcbiAgICAgICAgdGhpcy4jaW5mby5vcGNvZGUgPSBidWZmZXJbMF0gJiAweDBGXG5cbiAgICAgICAgLy8gSWYgd2UgcmVjZWl2ZSBhIGZyYWdtZW50ZWQgbWVzc2FnZSwgd2UgdXNlIHRoZSB0eXBlIG9mIHRoZSBmaXJzdFxuICAgICAgICAvLyBmcmFtZSB0byBwYXJzZSB0aGUgZnVsbCBtZXNzYWdlIGFzIGJpbmFyeS90ZXh0LCB3aGVuIGl0J3MgdGVybWluYXRlZFxuICAgICAgICB0aGlzLiNpbmZvLm9yaWdpbmFsT3Bjb2RlID8/PSB0aGlzLiNpbmZvLm9wY29kZVxuXG4gICAgICAgIHRoaXMuI2luZm8uZnJhZ21lbnRlZCA9ICF0aGlzLiNpbmZvLmZpbiAmJiB0aGlzLiNpbmZvLm9wY29kZSAhPT0gb3Bjb2Rlcy5DT05USU5VQVRJT05cblxuICAgICAgICBpZiAodGhpcy4jaW5mby5mcmFnbWVudGVkICYmIHRoaXMuI2luZm8ub3Bjb2RlICE9PSBvcGNvZGVzLkJJTkFSWSAmJiB0aGlzLiNpbmZvLm9wY29kZSAhPT0gb3Bjb2Rlcy5URVhUKSB7XG4gICAgICAgICAgLy8gT25seSB0ZXh0IGFuZCBiaW5hcnkgZnJhbWVzIGNhbiBiZSBmcmFnbWVudGVkXG4gICAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24odGhpcy53cywgJ0ludmFsaWQgZnJhbWUgdHlwZSB3YXMgZnJhZ21lbnRlZC4nKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGF5bG9hZExlbmd0aCA9IGJ1ZmZlclsxXSAmIDB4N0ZcblxuICAgICAgICBpZiAocGF5bG9hZExlbmd0aCA8PSAxMjUpIHtcbiAgICAgICAgICB0aGlzLiNpbmZvLnBheWxvYWRMZW5ndGggPSBwYXlsb2FkTGVuZ3RoXG4gICAgICAgICAgdGhpcy4jc3RhdGUgPSBwYXJzZXJTdGF0ZXMuUkVBRF9EQVRBXG4gICAgICAgIH0gZWxzZSBpZiAocGF5bG9hZExlbmd0aCA9PT0gMTI2KSB7XG4gICAgICAgICAgdGhpcy4jc3RhdGUgPSBwYXJzZXJTdGF0ZXMuUEFZTE9BRExFTkdUSF8xNlxuICAgICAgICB9IGVsc2UgaWYgKHBheWxvYWRMZW5ndGggPT09IDEyNykge1xuICAgICAgICAgIHRoaXMuI3N0YXRlID0gcGFyc2VyU3RhdGVzLlBBWUxPQURMRU5HVEhfNjRcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLiNpbmZvLmZyYWdtZW50ZWQgJiYgcGF5bG9hZExlbmd0aCA+IDEyNSkge1xuICAgICAgICAgIC8vIEEgZnJhZ21lbnRlZCBmcmFtZSBjYW4ndCBiZSBmcmFnbWVudGVkIGl0c2VsZlxuICAgICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHRoaXMud3MsICdGcmFnbWVudGVkIGZyYW1lIGV4Y2VlZGVkIDEyNSBieXRlcy4nKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICh0aGlzLiNpbmZvLm9wY29kZSA9PT0gb3Bjb2Rlcy5QSU5HIHx8XG4gICAgICAgICAgICB0aGlzLiNpbmZvLm9wY29kZSA9PT0gb3Bjb2Rlcy5QT05HIHx8XG4gICAgICAgICAgICB0aGlzLiNpbmZvLm9wY29kZSA9PT0gb3Bjb2Rlcy5DTE9TRSkgJiZcbiAgICAgICAgICBwYXlsb2FkTGVuZ3RoID4gMTI1XG4gICAgICAgICkge1xuICAgICAgICAgIC8vIENvbnRyb2wgZnJhbWVzIGNhbiBoYXZlIGEgcGF5bG9hZCBsZW5ndGggb2YgMTI1IGJ5dGVzIE1BWFxuICAgICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHRoaXMud3MsICdQYXlsb2FkIGxlbmd0aCBmb3IgY29udHJvbCBmcmFtZSBleGNlZWRlZCAxMjUgYnl0ZXMuJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLiNpbmZvLm9wY29kZSA9PT0gb3Bjb2Rlcy5DTE9TRSkge1xuICAgICAgICAgIGlmIChwYXlsb2FkTGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih0aGlzLndzLCAnUmVjZWl2ZWQgY2xvc2UgZnJhbWUgd2l0aCBhIDEtYnl0ZSBib2R5LicpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBib2R5ID0gdGhpcy5jb25zdW1lKHBheWxvYWRMZW5ndGgpXG5cbiAgICAgICAgICB0aGlzLiNpbmZvLmNsb3NlSW5mbyA9IHRoaXMucGFyc2VDbG9zZUJvZHkoZmFsc2UsIGJvZHkpXG5cbiAgICAgICAgICBpZiAoIXRoaXMud3Nba1NlbnRDbG9zZV0pIHtcbiAgICAgICAgICAgIC8vIElmIGFuIGVuZHBvaW50IHJlY2VpdmVzIGEgQ2xvc2UgZnJhbWUgYW5kIGRpZCBub3QgcHJldmlvdXNseSBzZW5kIGFcbiAgICAgICAgICAgIC8vIENsb3NlIGZyYW1lLCB0aGUgZW5kcG9pbnQgTVVTVCBzZW5kIGEgQ2xvc2UgZnJhbWUgaW4gcmVzcG9uc2UuICAoV2hlblxuICAgICAgICAgICAgLy8gc2VuZGluZyBhIENsb3NlIGZyYW1lIGluIHJlc3BvbnNlLCB0aGUgZW5kcG9pbnQgdHlwaWNhbGx5IGVjaG9zIHRoZVxuICAgICAgICAgICAgLy8gc3RhdHVzIGNvZGUgaXQgcmVjZWl2ZWQuKVxuICAgICAgICAgICAgY29uc3QgYm9keSA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgyKVxuICAgICAgICAgICAgYm9keS53cml0ZVVJbnQxNkJFKHRoaXMuI2luZm8uY2xvc2VJbmZvLmNvZGUsIDApXG4gICAgICAgICAgICBjb25zdCBjbG9zZUZyYW1lID0gbmV3IFdlYnNvY2tldEZyYW1lU2VuZChib2R5KVxuXG4gICAgICAgICAgICB0aGlzLndzW2tSZXNwb25zZV0uc29ja2V0LndyaXRlKFxuICAgICAgICAgICAgICBjbG9zZUZyYW1lLmNyZWF0ZUZyYW1lKG9wY29kZXMuQ0xPU0UpLFxuICAgICAgICAgICAgICAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFlcnIpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMud3Nba1NlbnRDbG9zZV0gPSB0cnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gVXBvbiBlaXRoZXIgc2VuZGluZyBvciByZWNlaXZpbmcgYSBDbG9zZSBjb250cm9sIGZyYW1lLCBpdCBpcyBzYWlkXG4gICAgICAgICAgLy8gdGhhdCBfVGhlIFdlYlNvY2tldCBDbG9zaW5nIEhhbmRzaGFrZSBpcyBTdGFydGVkXyBhbmQgdGhhdCB0aGVcbiAgICAgICAgICAvLyBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBpbiB0aGUgQ0xPU0lORyBzdGF0ZS5cbiAgICAgICAgICB0aGlzLndzW2tSZWFkeVN0YXRlXSA9IHN0YXRlcy5DTE9TSU5HXG4gICAgICAgICAgdGhpcy53c1trUmVjZWl2ZWRDbG9zZV0gPSB0cnVlXG5cbiAgICAgICAgICB0aGlzLmVuZCgpXG5cbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLiNpbmZvLm9wY29kZSA9PT0gb3Bjb2Rlcy5QSU5HKSB7XG4gICAgICAgICAgLy8gVXBvbiByZWNlaXB0IG9mIGEgUGluZyBmcmFtZSwgYW4gZW5kcG9pbnQgTVVTVCBzZW5kIGEgUG9uZyBmcmFtZSBpblxuICAgICAgICAgIC8vIHJlc3BvbnNlLCB1bmxlc3MgaXQgYWxyZWFkeSByZWNlaXZlZCBhIENsb3NlIGZyYW1lLlxuICAgICAgICAgIC8vIEEgUG9uZyBmcmFtZSBzZW50IGluIHJlc3BvbnNlIHRvIGEgUGluZyBmcmFtZSBtdXN0IGhhdmUgaWRlbnRpY2FsXG4gICAgICAgICAgLy8gXCJBcHBsaWNhdGlvbiBkYXRhXCJcblxuICAgICAgICAgIGNvbnN0IGJvZHkgPSB0aGlzLmNvbnN1bWUocGF5bG9hZExlbmd0aClcblxuICAgICAgICAgIGlmICghdGhpcy53c1trUmVjZWl2ZWRDbG9zZV0pIHtcbiAgICAgICAgICAgIGNvbnN0IGZyYW1lID0gbmV3IFdlYnNvY2tldEZyYW1lU2VuZChib2R5KVxuXG4gICAgICAgICAgICB0aGlzLndzW2tSZXNwb25zZV0uc29ja2V0LndyaXRlKGZyYW1lLmNyZWF0ZUZyYW1lKG9wY29kZXMuUE9ORykpXG5cbiAgICAgICAgICAgIGlmIChjaGFubmVscy5waW5nLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICAgICAgICAgIGNoYW5uZWxzLnBpbmcucHVibGlzaCh7XG4gICAgICAgICAgICAgICAgcGF5bG9hZDogYm9keVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuI3N0YXRlID0gcGFyc2VyU3RhdGVzLklORk9cblxuICAgICAgICAgIGlmICh0aGlzLiNieXRlT2Zmc2V0ID4gMCkge1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2soKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuI2luZm8ub3Bjb2RlID09PSBvcGNvZGVzLlBPTkcpIHtcbiAgICAgICAgICAvLyBBIFBvbmcgZnJhbWUgTUFZIGJlIHNlbnQgdW5zb2xpY2l0ZWQuICBUaGlzIHNlcnZlcyBhcyBhXG4gICAgICAgICAgLy8gdW5pZGlyZWN0aW9uYWwgaGVhcnRiZWF0LiAgQSByZXNwb25zZSB0byBhbiB1bnNvbGljaXRlZCBQb25nIGZyYW1lIGlzXG4gICAgICAgICAgLy8gbm90IGV4cGVjdGVkLlxuXG4gICAgICAgICAgY29uc3QgYm9keSA9IHRoaXMuY29uc3VtZShwYXlsb2FkTGVuZ3RoKVxuXG4gICAgICAgICAgaWYgKGNoYW5uZWxzLnBvbmcuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICAgICAgICAgIGNoYW5uZWxzLnBvbmcucHVibGlzaCh7XG4gICAgICAgICAgICAgIHBheWxvYWQ6IGJvZHlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRoaXMuI2J5dGVPZmZzZXQgPiAwKSB7XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodGhpcy4jc3RhdGUgPT09IHBhcnNlclN0YXRlcy5QQVlMT0FETEVOR1RIXzE2KSB7XG4gICAgICAgIGlmICh0aGlzLiNieXRlT2Zmc2V0IDwgMikge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBidWZmZXIgPSB0aGlzLmNvbnN1bWUoMilcblxuICAgICAgICB0aGlzLiNpbmZvLnBheWxvYWRMZW5ndGggPSBidWZmZXIucmVhZFVJbnQxNkJFKDApXG4gICAgICAgIHRoaXMuI3N0YXRlID0gcGFyc2VyU3RhdGVzLlJFQURfREFUQVxuICAgICAgfSBlbHNlIGlmICh0aGlzLiNzdGF0ZSA9PT0gcGFyc2VyU3RhdGVzLlBBWUxPQURMRU5HVEhfNjQpIHtcbiAgICAgICAgaWYgKHRoaXMuI2J5dGVPZmZzZXQgPCA4KSB7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IHRoaXMuY29uc3VtZSg4KVxuICAgICAgICBjb25zdCB1cHBlciA9IGJ1ZmZlci5yZWFkVUludDMyQkUoMClcblxuICAgICAgICAvLyAyXjMxIGlzIHRoZSBtYXhpbmltdW0gYnl0ZXMgYW4gYXJyYXlidWZmZXIgY2FuIGNvbnRhaW5cbiAgICAgICAgLy8gb24gMzItYml0IHN5c3RlbXMuIEFsdGhvdWdoLCBvbiA2NC1iaXQgc3lzdGVtcywgdGhpcyBpc1xuICAgICAgICAvLyAyXjUzLTEgYnl0ZXMuXG4gICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0Vycm9ycy9JbnZhbGlkX2FycmF5X2xlbmd0aFxuICAgICAgICAvLyBodHRwczovL3NvdXJjZS5jaHJvbWl1bS5vcmcvY2hyb21pdW0vY2hyb21pdW0vc3JjLysvbWFpbjp2OC9zcmMvY29tbW9uL2dsb2JhbHMuaDtkcmM9MTk0NjIxMmFjMDEwMDY2OGYxNGViOWUyODQzYmRkODQ2ZTUxMGExZTticHY9MTticHQ9MTtsPTEyNzVcbiAgICAgICAgLy8gaHR0cHM6Ly9zb3VyY2UuY2hyb21pdW0ub3JnL2Nocm9taXVtL2Nocm9taXVtL3NyYy8rL21haW46djgvc3JjL29iamVjdHMvanMtYXJyYXktYnVmZmVyLmg7bD0zNDtkcmM9MTk0NjIxMmFjMDEwMDY2OGYxNGViOWUyODQzYmRkODQ2ZTUxMGExZVxuICAgICAgICBpZiAodXBwZXIgPiAyICoqIDMxIC0gMSkge1xuICAgICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHRoaXMud3MsICdSZWNlaXZlZCBwYXlsb2FkIGxlbmd0aCA+IDJeMzEgYnl0ZXMuJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxvd2VyID0gYnVmZmVyLnJlYWRVSW50MzJCRSg0KVxuXG4gICAgICAgIHRoaXMuI2luZm8ucGF5bG9hZExlbmd0aCA9ICh1cHBlciA8PCA4KSArIGxvd2VyXG4gICAgICAgIHRoaXMuI3N0YXRlID0gcGFyc2VyU3RhdGVzLlJFQURfREFUQVxuICAgICAgfSBlbHNlIGlmICh0aGlzLiNzdGF0ZSA9PT0gcGFyc2VyU3RhdGVzLlJFQURfREFUQSkge1xuICAgICAgICBpZiAodGhpcy4jYnl0ZU9mZnNldCA8IHRoaXMuI2luZm8ucGF5bG9hZExlbmd0aCkge1xuICAgICAgICAgIC8vIElmIHRoZXJlIGlzIHN0aWxsIG1vcmUgZGF0YSBpbiB0aGlzIGNodW5rIHRoYXQgbmVlZHMgdG8gYmUgcmVhZFxuICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy4jYnl0ZU9mZnNldCA+PSB0aGlzLiNpbmZvLnBheWxvYWRMZW5ndGgpIHtcbiAgICAgICAgICAvLyBJZiB0aGUgc2VydmVyIHNlbnQgbXVsdGlwbGUgZnJhbWVzIGluIGEgc2luZ2xlIGNodW5rXG5cbiAgICAgICAgICBjb25zdCBib2R5ID0gdGhpcy5jb25zdW1lKHRoaXMuI2luZm8ucGF5bG9hZExlbmd0aClcblxuICAgICAgICAgIHRoaXMuI2ZyYWdtZW50cy5wdXNoKGJvZHkpXG5cbiAgICAgICAgICAvLyBJZiB0aGUgZnJhbWUgaXMgdW5mcmFnbWVudGVkLCBvciBhIGZyYWdtZW50ZWQgZnJhbWUgd2FzIHRlcm1pbmF0ZWQsXG4gICAgICAgICAgLy8gYSBtZXNzYWdlIHdhcyByZWNlaXZlZFxuICAgICAgICAgIGlmICghdGhpcy4jaW5mby5mcmFnbWVudGVkIHx8ICh0aGlzLiNpbmZvLmZpbiAmJiB0aGlzLiNpbmZvLm9wY29kZSA9PT0gb3Bjb2Rlcy5DT05USU5VQVRJT04pKSB7XG4gICAgICAgICAgICBjb25zdCBmdWxsTWVzc2FnZSA9IEJ1ZmZlci5jb25jYXQodGhpcy4jZnJhZ21lbnRzKVxuXG4gICAgICAgICAgICB3ZWJzb2NrZXRNZXNzYWdlUmVjZWl2ZWQodGhpcy53cywgdGhpcy4jaW5mby5vcmlnaW5hbE9wY29kZSwgZnVsbE1lc3NhZ2UpXG5cbiAgICAgICAgICAgIHRoaXMuI2luZm8gPSB7fVxuICAgICAgICAgICAgdGhpcy4jZnJhZ21lbnRzLmxlbmd0aCA9IDBcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLiNzdGF0ZSA9IHBhcnNlclN0YXRlcy5JTkZPXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuI2J5dGVPZmZzZXQgPiAwKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWxsYmFjaygpXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRha2UgbiBieXRlcyBmcm9tIHRoZSBidWZmZXJlZCBCdWZmZXJzXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBuXG4gICAqIEByZXR1cm5zIHtCdWZmZXJ8bnVsbH1cbiAgICovXG4gIGNvbnN1bWUgKG4pIHtcbiAgICBpZiAobiA+IHRoaXMuI2J5dGVPZmZzZXQpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfSBlbHNlIGlmIChuID09PSAwKSB7XG4gICAgICByZXR1cm4gZW1wdHlCdWZmZXJcbiAgICB9XG5cbiAgICBpZiAodGhpcy4jYnVmZmVyc1swXS5sZW5ndGggPT09IG4pIHtcbiAgICAgIHRoaXMuI2J5dGVPZmZzZXQgLT0gdGhpcy4jYnVmZmVyc1swXS5sZW5ndGhcbiAgICAgIHJldHVybiB0aGlzLiNidWZmZXJzLnNoaWZ0KClcbiAgICB9XG5cbiAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuYWxsb2NVbnNhZmUobilcbiAgICBsZXQgb2Zmc2V0ID0gMFxuXG4gICAgd2hpbGUgKG9mZnNldCAhPT0gbikge1xuICAgICAgY29uc3QgbmV4dCA9IHRoaXMuI2J1ZmZlcnNbMF1cbiAgICAgIGNvbnN0IHsgbGVuZ3RoIH0gPSBuZXh0XG5cbiAgICAgIGlmIChsZW5ndGggKyBvZmZzZXQgPT09IG4pIHtcbiAgICAgICAgYnVmZmVyLnNldCh0aGlzLiNidWZmZXJzLnNoaWZ0KCksIG9mZnNldClcbiAgICAgICAgYnJlYWtcbiAgICAgIH0gZWxzZSBpZiAobGVuZ3RoICsgb2Zmc2V0ID4gbikge1xuICAgICAgICBidWZmZXIuc2V0KG5leHQuc3ViYXJyYXkoMCwgbiAtIG9mZnNldCksIG9mZnNldClcbiAgICAgICAgdGhpcy4jYnVmZmVyc1swXSA9IG5leHQuc3ViYXJyYXkobiAtIG9mZnNldClcbiAgICAgICAgYnJlYWtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJ1ZmZlci5zZXQodGhpcy4jYnVmZmVycy5zaGlmdCgpLCBvZmZzZXQpXG4gICAgICAgIG9mZnNldCArPSBuZXh0Lmxlbmd0aFxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuI2J5dGVPZmZzZXQgLT0gblxuXG4gICAgcmV0dXJuIGJ1ZmZlclxuICB9XG5cbiAgcGFyc2VDbG9zZUJvZHkgKG9ubHlDb2RlLCBkYXRhKSB7XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tNy4xLjVcbiAgICAvKiogQHR5cGUge251bWJlcnx1bmRlZmluZWR9ICovXG4gICAgbGV0IGNvZGVcblxuICAgIGlmIChkYXRhLmxlbmd0aCA+PSAyKSB7XG4gICAgICAvLyBfVGhlIFdlYlNvY2tldCBDb25uZWN0aW9uIENsb3NlIENvZGVfIGlzXG4gICAgICAvLyBkZWZpbmVkIGFzIHRoZSBzdGF0dXMgY29kZSAoU2VjdGlvbiA3LjQpIGNvbnRhaW5lZCBpbiB0aGUgZmlyc3QgQ2xvc2VcbiAgICAgIC8vIGNvbnRyb2wgZnJhbWUgcmVjZWl2ZWQgYnkgdGhlIGFwcGxpY2F0aW9uXG4gICAgICBjb2RlID0gZGF0YS5yZWFkVUludDE2QkUoMClcbiAgICB9XG5cbiAgICBpZiAob25seUNvZGUpIHtcbiAgICAgIGlmICghaXNWYWxpZFN0YXR1c0NvZGUoY29kZSkpIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHsgY29kZSB9XG4gICAgfVxuXG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tNy4xLjZcbiAgICAvKiogQHR5cGUge0J1ZmZlcn0gKi9cbiAgICBsZXQgcmVhc29uID0gZGF0YS5zdWJhcnJheSgyKVxuXG4gICAgLy8gUmVtb3ZlIEJPTVxuICAgIGlmIChyZWFzb25bMF0gPT09IDB4RUYgJiYgcmVhc29uWzFdID09PSAweEJCICYmIHJlYXNvblsyXSA9PT0gMHhCRikge1xuICAgICAgcmVhc29uID0gcmVhc29uLnN1YmFycmF5KDMpXG4gICAgfVxuXG4gICAgaWYgKGNvZGUgIT09IHVuZGVmaW5lZCAmJiAhaXNWYWxpZFN0YXR1c0NvZGUoY29kZSkpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFRPRE86IG9wdGltaXplIHRoaXNcbiAgICAgIHJlYXNvbiA9IG5ldyBUZXh0RGVjb2RlcigndXRmLTgnLCB7IGZhdGFsOiB0cnVlIH0pLmRlY29kZShyZWFzb24pXG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIHJldHVybiB7IGNvZGUsIHJlYXNvbiB9XG4gIH1cblxuICBnZXQgY2xvc2luZ0luZm8gKCkge1xuICAgIHJldHVybiB0aGlzLiNpbmZvLmNsb3NlSW5mb1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBCeXRlUGFyc2VyXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvd2ViaWRsJylcbmNvbnN0IHsgRE9NRXhjZXB0aW9uIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9jb25zdGFudHMnKVxuY29uc3QgeyBVUkxTZXJpYWxpemVyIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9kYXRhVVJMJylcbmNvbnN0IHsgZ2V0R2xvYmFsT3JpZ2luIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9nbG9iYWwnKVxuY29uc3QgeyBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLCBzdGF0ZXMsIG9wY29kZXMsIGVtcHR5QnVmZmVyIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7XG4gIGtXZWJTb2NrZXRVUkwsXG4gIGtSZWFkeVN0YXRlLFxuICBrQ29udHJvbGxlcixcbiAga0JpbmFyeVR5cGUsXG4gIGtSZXNwb25zZSxcbiAga1NlbnRDbG9zZSxcbiAga0J5dGVQYXJzZXJcbn0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBpc0VzdGFibGlzaGVkLCBpc0Nsb3NpbmcsIGlzVmFsaWRTdWJwcm90b2NvbCwgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24sIGZpcmVFdmVudCB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgZXN0YWJsaXNoV2ViU29ja2V0Q29ubmVjdGlvbiB9ID0gcmVxdWlyZSgnLi9jb25uZWN0aW9uJylcbmNvbnN0IHsgV2Vic29ja2V0RnJhbWVTZW5kIH0gPSByZXF1aXJlKCcuL2ZyYW1lJylcbmNvbnN0IHsgQnl0ZVBhcnNlciB9ID0gcmVxdWlyZSgnLi9yZWNlaXZlcicpXG5jb25zdCB7IGtFbnVtZXJhYmxlUHJvcGVydHksIGlzQmxvYkxpa2UgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGdldEdsb2JhbERpc3BhdGNoZXIgfSA9IHJlcXVpcmUoJy4uL2dsb2JhbCcpXG5jb25zdCB7IHR5cGVzIH0gPSByZXF1aXJlKCd1dGlsJylcblxubGV0IGV4cGVyaW1lbnRhbFdhcm5lZCA9IGZhbHNlXG5cbi8vIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2ludGVyZmFjZS1kZWZpbml0aW9uXG5jbGFzcyBXZWJTb2NrZXQgZXh0ZW5kcyBFdmVudFRhcmdldCB7XG4gICNldmVudHMgPSB7XG4gICAgb3BlbjogbnVsbCxcbiAgICBlcnJvcjogbnVsbCxcbiAgICBjbG9zZTogbnVsbCxcbiAgICBtZXNzYWdlOiBudWxsXG4gIH1cblxuICAjYnVmZmVyZWRBbW91bnQgPSAwXG4gICNwcm90b2NvbCA9ICcnXG4gICNleHRlbnNpb25zID0gJydcblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybFxuICAgKiBAcGFyYW0ge3N0cmluZ3xzdHJpbmdbXX0gcHJvdG9jb2xzXG4gICAqL1xuICBjb25zdHJ1Y3RvciAodXJsLCBwcm90b2NvbHMgPSBbXSkge1xuICAgIHN1cGVyKClcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdXZWJTb2NrZXQgY29uc3RydWN0b3InIH0pXG5cbiAgICBpZiAoIWV4cGVyaW1lbnRhbFdhcm5lZCkge1xuICAgICAgZXhwZXJpbWVudGFsV2FybmVkID0gdHJ1ZVxuICAgICAgcHJvY2Vzcy5lbWl0V2FybmluZygnV2ViU29ja2V0cyBhcmUgZXhwZXJpbWVudGFsLCBleHBlY3QgdGhlbSB0byBjaGFuZ2UgYXQgYW55IHRpbWUuJywge1xuICAgICAgICBjb2RlOiAnVU5ESUNJLVdTJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICBjb25zdCBvcHRpb25zID0gd2ViaWRsLmNvbnZlcnRlcnNbJ0RPTVN0cmluZyBvciBzZXF1ZW5jZTxET01TdHJpbmc+IG9yIFdlYlNvY2tldEluaXQnXShwcm90b2NvbHMpXG5cbiAgICB1cmwgPSB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcodXJsKVxuICAgIHByb3RvY29scyA9IG9wdGlvbnMucHJvdG9jb2xzXG5cbiAgICAvLyAxLiBMZXQgYmFzZVVSTCBiZSB0aGlzJ3MgcmVsZXZhbnQgc2V0dGluZ3Mgb2JqZWN0J3MgQVBJIGJhc2UgVVJMLlxuICAgIGNvbnN0IGJhc2VVUkwgPSBnZXRHbG9iYWxPcmlnaW4oKVxuXG4gICAgLy8gMS4gTGV0IHVybFJlY29yZCBiZSB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIHRoZSBVUkwgcGFyc2VyIHRvIHVybCB3aXRoIGJhc2VVUkwuXG4gICAgbGV0IHVybFJlY29yZFxuXG4gICAgdHJ5IHtcbiAgICAgIHVybFJlY29yZCA9IG5ldyBVUkwodXJsLCBiYXNlVVJMKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIDMuIElmIHVybFJlY29yZCBpcyBmYWlsdXJlLCB0aGVuIHRocm93IGEgXCJTeW50YXhFcnJvclwiIERPTUV4Y2VwdGlvbi5cbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oZSwgJ1N5bnRheEVycm9yJylcbiAgICB9XG5cbiAgICAvLyA0LiBJZiB1cmxSZWNvcmTigJlzIHNjaGVtZSBpcyBcImh0dHBcIiwgdGhlbiBzZXQgdXJsUmVjb3Jk4oCZcyBzY2hlbWUgdG8gXCJ3c1wiLlxuICAgIGlmICh1cmxSZWNvcmQucHJvdG9jb2wgPT09ICdodHRwOicpIHtcbiAgICAgIHVybFJlY29yZC5wcm90b2NvbCA9ICd3czonXG4gICAgfSBlbHNlIGlmICh1cmxSZWNvcmQucHJvdG9jb2wgPT09ICdodHRwczonKSB7XG4gICAgICAvLyA1LiBPdGhlcndpc2UsIGlmIHVybFJlY29yZOKAmXMgc2NoZW1lIGlzIFwiaHR0cHNcIiwgc2V0IHVybFJlY29yZOKAmXMgc2NoZW1lIHRvIFwid3NzXCIuXG4gICAgICB1cmxSZWNvcmQucHJvdG9jb2wgPSAnd3NzOidcbiAgICB9XG5cbiAgICAvLyA2LiBJZiB1cmxSZWNvcmTigJlzIHNjaGVtZSBpcyBub3QgXCJ3c1wiIG9yIFwid3NzXCIsIHRoZW4gdGhyb3cgYSBcIlN5bnRheEVycm9yXCIgRE9NRXhjZXB0aW9uLlxuICAgIGlmICh1cmxSZWNvcmQucHJvdG9jb2wgIT09ICd3czonICYmIHVybFJlY29yZC5wcm90b2NvbCAhPT0gJ3dzczonKSB7XG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKFxuICAgICAgICBgRXhwZWN0ZWQgYSB3czogb3Igd3NzOiBwcm90b2NvbCwgZ290ICR7dXJsUmVjb3JkLnByb3RvY29sfWAsXG4gICAgICAgICdTeW50YXhFcnJvcidcbiAgICAgIClcbiAgICB9XG5cbiAgICAvLyA3LiBJZiB1cmxSZWNvcmTigJlzIGZyYWdtZW50IGlzIG5vbi1udWxsLCB0aGVuIHRocm93IGEgXCJTeW50YXhFcnJvclwiXG4gICAgLy8gICAgRE9NRXhjZXB0aW9uLlxuICAgIGlmICh1cmxSZWNvcmQuaGFzaCB8fCB1cmxSZWNvcmQuaHJlZi5lbmRzV2l0aCgnIycpKSB7XG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCdHb3QgZnJhZ21lbnQnLCAnU3ludGF4RXJyb3InKVxuICAgIH1cblxuICAgIC8vIDguIElmIHByb3RvY29scyBpcyBhIHN0cmluZywgc2V0IHByb3RvY29scyB0byBhIHNlcXVlbmNlIGNvbnNpc3RpbmdcbiAgICAvLyAgICBvZiBqdXN0IHRoYXQgc3RyaW5nLlxuICAgIGlmICh0eXBlb2YgcHJvdG9jb2xzID09PSAnc3RyaW5nJykge1xuICAgICAgcHJvdG9jb2xzID0gW3Byb3RvY29sc11cbiAgICB9XG5cbiAgICAvLyA5LiBJZiBhbnkgb2YgdGhlIHZhbHVlcyBpbiBwcm90b2NvbHMgb2NjdXIgbW9yZSB0aGFuIG9uY2Ugb3Igb3RoZXJ3aXNlXG4gICAgLy8gICAgZmFpbCB0byBtYXRjaCB0aGUgcmVxdWlyZW1lbnRzIGZvciBlbGVtZW50cyB0aGF0IGNvbXByaXNlIHRoZSB2YWx1ZVxuICAgIC8vICAgIG9mIGBTZWMtV2ViU29ja2V0LVByb3RvY29sYCBmaWVsZHMgYXMgZGVmaW5lZCBieSBUaGUgV2ViU29ja2V0XG4gICAgLy8gICAgcHJvdG9jb2wsIHRoZW4gdGhyb3cgYSBcIlN5bnRheEVycm9yXCIgRE9NRXhjZXB0aW9uLlxuICAgIGlmIChwcm90b2NvbHMubGVuZ3RoICE9PSBuZXcgU2V0KHByb3RvY29scy5tYXAocCA9PiBwLnRvTG93ZXJDYXNlKCkpKS5zaXplKSB7XG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCdJbnZhbGlkIFNlYy1XZWJTb2NrZXQtUHJvdG9jb2wgdmFsdWUnLCAnU3ludGF4RXJyb3InKVxuICAgIH1cblxuICAgIGlmIChwcm90b2NvbHMubGVuZ3RoID4gMCAmJiAhcHJvdG9jb2xzLmV2ZXJ5KHAgPT4gaXNWYWxpZFN1YnByb3RvY29sKHApKSkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignSW52YWxpZCBTZWMtV2ViU29ja2V0LVByb3RvY29sIHZhbHVlJywgJ1N5bnRheEVycm9yJylcbiAgICB9XG5cbiAgICAvLyAxMC4gU2V0IHRoaXMncyB1cmwgdG8gdXJsUmVjb3JkLlxuICAgIHRoaXNba1dlYlNvY2tldFVSTF0gPSBuZXcgVVJMKHVybFJlY29yZC5ocmVmKVxuXG4gICAgLy8gMTEuIExldCBjbGllbnQgYmUgdGhpcydzIHJlbGV2YW50IHNldHRpbmdzIG9iamVjdC5cblxuICAgIC8vIDEyLiBSdW4gdGhpcyBzdGVwIGluIHBhcmFsbGVsOlxuXG4gICAgLy8gICAgMS4gRXN0YWJsaXNoIGEgV2ViU29ja2V0IGNvbm5lY3Rpb24gZ2l2ZW4gdXJsUmVjb3JkLCBwcm90b2NvbHMsXG4gICAgLy8gICAgICAgYW5kIGNsaWVudC5cbiAgICB0aGlzW2tDb250cm9sbGVyXSA9IGVzdGFibGlzaFdlYlNvY2tldENvbm5lY3Rpb24oXG4gICAgICB1cmxSZWNvcmQsXG4gICAgICBwcm90b2NvbHMsXG4gICAgICB0aGlzLFxuICAgICAgKHJlc3BvbnNlKSA9PiB0aGlzLiNvbkNvbm5lY3Rpb25Fc3RhYmxpc2hlZChyZXNwb25zZSksXG4gICAgICBvcHRpb25zXG4gICAgKVxuXG4gICAgLy8gRWFjaCBXZWJTb2NrZXQgb2JqZWN0IGhhcyBhbiBhc3NvY2lhdGVkIHJlYWR5IHN0YXRlLCB3aGljaCBpcyBhXG4gICAgLy8gbnVtYmVyIHJlcHJlc2VudGluZyB0aGUgc3RhdGUgb2YgdGhlIGNvbm5lY3Rpb24uIEluaXRpYWxseSBpdCBtdXN0XG4gICAgLy8gYmUgQ09OTkVDVElORyAoMCkuXG4gICAgdGhpc1trUmVhZHlTdGF0ZV0gPSBXZWJTb2NrZXQuQ09OTkVDVElOR1xuXG4gICAgLy8gVGhlIGV4dGVuc2lvbnMgYXR0cmlidXRlIG11c3QgaW5pdGlhbGx5IHJldHVybiB0aGUgZW1wdHkgc3RyaW5nLlxuXG4gICAgLy8gVGhlIHByb3RvY29sIGF0dHJpYnV0ZSBtdXN0IGluaXRpYWxseSByZXR1cm4gdGhlIGVtcHR5IHN0cmluZy5cblxuICAgIC8vIEVhY2ggV2ViU29ja2V0IG9iamVjdCBoYXMgYW4gYXNzb2NpYXRlZCBiaW5hcnkgdHlwZSwgd2hpY2ggaXMgYVxuICAgIC8vIEJpbmFyeVR5cGUuIEluaXRpYWxseSBpdCBtdXN0IGJlIFwiYmxvYlwiLlxuICAgIHRoaXNba0JpbmFyeVR5cGVdID0gJ2Jsb2InXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNkb20td2Vic29ja2V0LWNsb3NlXG4gICAqIEBwYXJhbSB7bnVtYmVyfHVuZGVmaW5lZH0gY29kZVxuICAgKiBAcGFyYW0ge3N0cmluZ3x1bmRlZmluZWR9IHJlYXNvblxuICAgKi9cbiAgY2xvc2UgKGNvZGUgPSB1bmRlZmluZWQsIHJlYXNvbiA9IHVuZGVmaW5lZCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIGlmIChjb2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvZGUgPSB3ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgc2hvcnQnXShjb2RlLCB7IGNsYW1wOiB0cnVlIH0pXG4gICAgfVxuXG4gICAgaWYgKHJlYXNvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZWFzb24gPSB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcocmVhc29uKVxuICAgIH1cblxuICAgIC8vIDEuIElmIGNvZGUgaXMgcHJlc2VudCwgYnV0IGlzIG5laXRoZXIgYW4gaW50ZWdlciBlcXVhbCB0byAxMDAwIG5vciBhblxuICAgIC8vICAgIGludGVnZXIgaW4gdGhlIHJhbmdlIDMwMDAgdG8gNDk5OSwgaW5jbHVzaXZlLCB0aHJvdyBhblxuICAgIC8vICAgIFwiSW52YWxpZEFjY2Vzc0Vycm9yXCIgRE9NRXhjZXB0aW9uLlxuICAgIGlmIChjb2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChjb2RlICE9PSAxMDAwICYmIChjb2RlIDwgMzAwMCB8fCBjb2RlID4gNDk5OSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignaW52YWxpZCBjb2RlJywgJ0ludmFsaWRBY2Nlc3NFcnJvcicpXG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHJlYXNvbkJ5dGVMZW5ndGggPSAwXG5cbiAgICAvLyAyLiBJZiByZWFzb24gaXMgcHJlc2VudCwgdGhlbiBydW4gdGhlc2Ugc3Vic3RlcHM6XG4gICAgaWYgKHJlYXNvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyAxLiBMZXQgcmVhc29uQnl0ZXMgYmUgdGhlIHJlc3VsdCBvZiBlbmNvZGluZyByZWFzb24uXG4gICAgICAvLyAyLiBJZiByZWFzb25CeXRlcyBpcyBsb25nZXIgdGhhbiAxMjMgYnl0ZXMsIHRoZW4gdGhyb3cgYVxuICAgICAgLy8gICAgXCJTeW50YXhFcnJvclwiIERPTUV4Y2VwdGlvbi5cbiAgICAgIHJlYXNvbkJ5dGVMZW5ndGggPSBCdWZmZXIuYnl0ZUxlbmd0aChyZWFzb24pXG5cbiAgICAgIGlmIChyZWFzb25CeXRlTGVuZ3RoID4gMTIzKSB7XG4gICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oXG4gICAgICAgICAgYFJlYXNvbiBtdXN0IGJlIGxlc3MgdGhhbiAxMjMgYnl0ZXM7IHJlY2VpdmVkICR7cmVhc29uQnl0ZUxlbmd0aH1gLFxuICAgICAgICAgICdTeW50YXhFcnJvcidcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDMuIFJ1biB0aGUgZmlyc3QgbWF0Y2hpbmcgc3RlcHMgZnJvbSB0aGUgZm9sbG93aW5nIGxpc3Q6XG4gICAgaWYgKHRoaXNba1JlYWR5U3RhdGVdID09PSBXZWJTb2NrZXQuQ0xPU0lORyB8fCB0aGlzW2tSZWFkeVN0YXRlXSA9PT0gV2ViU29ja2V0LkNMT1NFRCkge1xuICAgICAgLy8gSWYgdGhpcydzIHJlYWR5IHN0YXRlIGlzIENMT1NJTkcgKDIpIG9yIENMT1NFRCAoMylcbiAgICAgIC8vIERvIG5vdGhpbmcuXG4gICAgfSBlbHNlIGlmICghaXNFc3RhYmxpc2hlZCh0aGlzKSkge1xuICAgICAgLy8gSWYgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIG5vdCB5ZXQgZXN0YWJsaXNoZWRcbiAgICAgIC8vIEZhaWwgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGFuZCBzZXQgdGhpcydzIHJlYWR5IHN0YXRlXG4gICAgICAvLyB0byBDTE9TSU5HICgyKS5cbiAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHRoaXMsICdDb25uZWN0aW9uIHdhcyBjbG9zZWQgYmVmb3JlIGl0IHdhcyBlc3RhYmxpc2hlZC4nKVxuICAgICAgdGhpc1trUmVhZHlTdGF0ZV0gPSBXZWJTb2NrZXQuQ0xPU0lOR1xuICAgIH0gZWxzZSBpZiAoIWlzQ2xvc2luZyh0aGlzKSkge1xuICAgICAgLy8gSWYgdGhlIFdlYlNvY2tldCBjbG9zaW5nIGhhbmRzaGFrZSBoYXMgbm90IHlldCBiZWVuIHN0YXJ0ZWRcbiAgICAgIC8vIFN0YXJ0IHRoZSBXZWJTb2NrZXQgY2xvc2luZyBoYW5kc2hha2UgYW5kIHNldCB0aGlzJ3MgcmVhZHlcbiAgICAgIC8vIHN0YXRlIHRvIENMT1NJTkcgKDIpLlxuICAgICAgLy8gLSBJZiBuZWl0aGVyIGNvZGUgbm9yIHJlYXNvbiBpcyBwcmVzZW50LCB0aGUgV2ViU29ja2V0IENsb3NlXG4gICAgICAvLyAgIG1lc3NhZ2UgbXVzdCBub3QgaGF2ZSBhIGJvZHkuXG4gICAgICAvLyAtIElmIGNvZGUgaXMgcHJlc2VudCwgdGhlbiB0aGUgc3RhdHVzIGNvZGUgdG8gdXNlIGluIHRoZVxuICAgICAgLy8gICBXZWJTb2NrZXQgQ2xvc2UgbWVzc2FnZSBtdXN0IGJlIHRoZSBpbnRlZ2VyIGdpdmVuIGJ5IGNvZGUuXG4gICAgICAvLyAtIElmIHJlYXNvbiBpcyBhbHNvIHByZXNlbnQsIHRoZW4gcmVhc29uQnl0ZXMgbXVzdCBiZVxuICAgICAgLy8gICBwcm92aWRlZCBpbiB0aGUgQ2xvc2UgbWVzc2FnZSBhZnRlciB0aGUgc3RhdHVzIGNvZGUuXG5cbiAgICAgIGNvbnN0IGZyYW1lID0gbmV3IFdlYnNvY2tldEZyYW1lU2VuZCgpXG5cbiAgICAgIC8vIElmIG5laXRoZXIgY29kZSBub3IgcmVhc29uIGlzIHByZXNlbnQsIHRoZSBXZWJTb2NrZXQgQ2xvc2VcbiAgICAgIC8vIG1lc3NhZ2UgbXVzdCBub3QgaGF2ZSBhIGJvZHkuXG5cbiAgICAgIC8vIElmIGNvZGUgaXMgcHJlc2VudCwgdGhlbiB0aGUgc3RhdHVzIGNvZGUgdG8gdXNlIGluIHRoZVxuICAgICAgLy8gV2ViU29ja2V0IENsb3NlIG1lc3NhZ2UgbXVzdCBiZSB0aGUgaW50ZWdlciBnaXZlbiBieSBjb2RlLlxuICAgICAgaWYgKGNvZGUgIT09IHVuZGVmaW5lZCAmJiByZWFzb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBmcmFtZS5mcmFtZURhdGEgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMilcbiAgICAgICAgZnJhbWUuZnJhbWVEYXRhLndyaXRlVUludDE2QkUoY29kZSwgMClcbiAgICAgIH0gZWxzZSBpZiAoY29kZSAhPT0gdW5kZWZpbmVkICYmIHJlYXNvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIElmIHJlYXNvbiBpcyBhbHNvIHByZXNlbnQsIHRoZW4gcmVhc29uQnl0ZXMgbXVzdCBiZVxuICAgICAgICAvLyBwcm92aWRlZCBpbiB0aGUgQ2xvc2UgbWVzc2FnZSBhZnRlciB0aGUgc3RhdHVzIGNvZGUuXG4gICAgICAgIGZyYW1lLmZyYW1lRGF0YSA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgyICsgcmVhc29uQnl0ZUxlbmd0aClcbiAgICAgICAgZnJhbWUuZnJhbWVEYXRhLndyaXRlVUludDE2QkUoY29kZSwgMClcbiAgICAgICAgLy8gdGhlIGJvZHkgTUFZIGNvbnRhaW4gVVRGLTgtZW5jb2RlZCBkYXRhIHdpdGggdmFsdWUgL3JlYXNvbi9cbiAgICAgICAgZnJhbWUuZnJhbWVEYXRhLndyaXRlKHJlYXNvbiwgMiwgJ3V0Zi04JylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZyYW1lLmZyYW1lRGF0YSA9IGVtcHR5QnVmZmVyXG4gICAgICB9XG5cbiAgICAgIC8qKiBAdHlwZSB7aW1wb3J0KCdzdHJlYW0nKS5EdXBsZXh9ICovXG4gICAgICBjb25zdCBzb2NrZXQgPSB0aGlzW2tSZXNwb25zZV0uc29ja2V0XG5cbiAgICAgIHNvY2tldC53cml0ZShmcmFtZS5jcmVhdGVGcmFtZShvcGNvZGVzLkNMT1NFKSwgKGVycikgPT4ge1xuICAgICAgICBpZiAoIWVycikge1xuICAgICAgICAgIHRoaXNba1NlbnRDbG9zZV0gPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pXG5cbiAgICAgIC8vIFVwb24gZWl0aGVyIHNlbmRpbmcgb3IgcmVjZWl2aW5nIGEgQ2xvc2UgY29udHJvbCBmcmFtZSwgaXQgaXMgc2FpZFxuICAgICAgLy8gdGhhdCBfVGhlIFdlYlNvY2tldCBDbG9zaW5nIEhhbmRzaGFrZSBpcyBTdGFydGVkXyBhbmQgdGhhdCB0aGVcbiAgICAgIC8vIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGluIHRoZSBDTE9TSU5HIHN0YXRlLlxuICAgICAgdGhpc1trUmVhZHlTdGF0ZV0gPSBzdGF0ZXMuQ0xPU0lOR1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBPdGhlcndpc2VcbiAgICAgIC8vIFNldCB0aGlzJ3MgcmVhZHkgc3RhdGUgdG8gQ0xPU0lORyAoMikuXG4gICAgICB0aGlzW2tSZWFkeVN0YXRlXSA9IFdlYlNvY2tldC5DTE9TSU5HXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZG9tLXdlYnNvY2tldC1zZW5kXG4gICAqIEBwYXJhbSB7Tm9kZUpTLlR5cGVkQXJyYXl8QXJyYXlCdWZmZXJ8QmxvYnxzdHJpbmd9IGRhdGFcbiAgICovXG4gIHNlbmQgKGRhdGEpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnV2ViU29ja2V0LnNlbmQnIH0pXG5cbiAgICBkYXRhID0gd2ViaWRsLmNvbnZlcnRlcnMuV2ViU29ja2V0U2VuZERhdGEoZGF0YSlcblxuICAgIC8vIDEuIElmIHRoaXMncyByZWFkeSBzdGF0ZSBpcyBDT05ORUNUSU5HLCB0aGVuIHRocm93IGFuXG4gICAgLy8gICAgXCJJbnZhbGlkU3RhdGVFcnJvclwiIERPTUV4Y2VwdGlvbi5cbiAgICBpZiAodGhpc1trUmVhZHlTdGF0ZV0gPT09IFdlYlNvY2tldC5DT05ORUNUSU5HKSB7XG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCdTZW50IGJlZm9yZSBjb25uZWN0ZWQuJywgJ0ludmFsaWRTdGF0ZUVycm9yJylcbiAgICB9XG5cbiAgICAvLyAyLiBSdW4gdGhlIGFwcHJvcHJpYXRlIHNldCBvZiBzdGVwcyBmcm9tIHRoZSBmb2xsb3dpbmcgbGlzdDpcbiAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzY0NTUjc2VjdGlvbi02LjFcbiAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzY0NTUjc2VjdGlvbi01LjJcblxuICAgIGlmICghaXNFc3RhYmxpc2hlZCh0aGlzKSB8fCBpc0Nsb3NpbmcodGhpcykpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8qKiBAdHlwZSB7aW1wb3J0KCdzdHJlYW0nKS5EdXBsZXh9ICovXG4gICAgY29uc3Qgc29ja2V0ID0gdGhpc1trUmVzcG9uc2VdLnNvY2tldFxuXG4gICAgLy8gSWYgZGF0YSBpcyBhIHN0cmluZ1xuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIElmIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZCBhbmQgdGhlIFdlYlNvY2tldFxuICAgICAgLy8gY2xvc2luZyBoYW5kc2hha2UgaGFzIG5vdCB5ZXQgc3RhcnRlZCwgdGhlbiB0aGUgdXNlciBhZ2VudFxuICAgICAgLy8gbXVzdCBzZW5kIGEgV2ViU29ja2V0IE1lc3NhZ2UgY29tcHJpc2VkIG9mIHRoZSBkYXRhIGFyZ3VtZW50XG4gICAgICAvLyB1c2luZyBhIHRleHQgZnJhbWUgb3Bjb2RlOyBpZiB0aGUgZGF0YSBjYW5ub3QgYmUgc2VudCwgZS5nLlxuICAgICAgLy8gYmVjYXVzZSBpdCB3b3VsZCBuZWVkIHRvIGJlIGJ1ZmZlcmVkIGJ1dCB0aGUgYnVmZmVyIGlzIGZ1bGwsXG4gICAgICAvLyB0aGUgdXNlciBhZ2VudCBtdXN0IGZsYWcgdGhlIFdlYlNvY2tldCBhcyBmdWxsIGFuZCB0aGVuIGNsb3NlXG4gICAgICAvLyB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24uIEFueSBpbnZvY2F0aW9uIG9mIHRoaXMgbWV0aG9kIHdpdGggYVxuICAgICAgLy8gc3RyaW5nIGFyZ3VtZW50IHRoYXQgZG9lcyBub3QgdGhyb3cgYW4gZXhjZXB0aW9uIG11c3QgaW5jcmVhc2VcbiAgICAgIC8vIHRoZSBidWZmZXJlZEFtb3VudCBhdHRyaWJ1dGUgYnkgdGhlIG51bWJlciBvZiBieXRlcyBuZWVkZWQgdG9cbiAgICAgIC8vIGV4cHJlc3MgdGhlIGFyZ3VtZW50IGFzIFVURi04LlxuXG4gICAgICBjb25zdCB2YWx1ZSA9IEJ1ZmZlci5mcm9tKGRhdGEpXG4gICAgICBjb25zdCBmcmFtZSA9IG5ldyBXZWJzb2NrZXRGcmFtZVNlbmQodmFsdWUpXG4gICAgICBjb25zdCBidWZmZXIgPSBmcmFtZS5jcmVhdGVGcmFtZShvcGNvZGVzLlRFWFQpXG5cbiAgICAgIHRoaXMuI2J1ZmZlcmVkQW1vdW50ICs9IHZhbHVlLmJ5dGVMZW5ndGhcbiAgICAgIHNvY2tldC53cml0ZShidWZmZXIsICgpID0+IHtcbiAgICAgICAgdGhpcy4jYnVmZmVyZWRBbW91bnQgLT0gdmFsdWUuYnl0ZUxlbmd0aFxuICAgICAgfSlcbiAgICB9IGVsc2UgaWYgKHR5cGVzLmlzQXJyYXlCdWZmZXIoZGF0YSkpIHtcbiAgICAgIC8vIElmIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZCwgYW5kIHRoZSBXZWJTb2NrZXRcbiAgICAgIC8vIGNsb3NpbmcgaGFuZHNoYWtlIGhhcyBub3QgeWV0IHN0YXJ0ZWQsIHRoZW4gdGhlIHVzZXIgYWdlbnQgbXVzdFxuICAgICAgLy8gc2VuZCBhIFdlYlNvY2tldCBNZXNzYWdlIGNvbXByaXNlZCBvZiBkYXRhIHVzaW5nIGEgYmluYXJ5IGZyYW1lXG4gICAgICAvLyBvcGNvZGU7IGlmIHRoZSBkYXRhIGNhbm5vdCBiZSBzZW50LCBlLmcuIGJlY2F1c2UgaXQgd291bGQgbmVlZFxuICAgICAgLy8gdG8gYmUgYnVmZmVyZWQgYnV0IHRoZSBidWZmZXIgaXMgZnVsbCwgdGhlIHVzZXIgYWdlbnQgbXVzdCBmbGFnXG4gICAgICAvLyB0aGUgV2ViU29ja2V0IGFzIGZ1bGwgYW5kIHRoZW4gY2xvc2UgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uLlxuICAgICAgLy8gVGhlIGRhdGEgdG8gYmUgc2VudCBpcyB0aGUgZGF0YSBzdG9yZWQgaW4gdGhlIGJ1ZmZlciBkZXNjcmliZWRcbiAgICAgIC8vIGJ5IHRoZSBBcnJheUJ1ZmZlciBvYmplY3QuIEFueSBpbnZvY2F0aW9uIG9mIHRoaXMgbWV0aG9kIHdpdGggYW5cbiAgICAgIC8vIEFycmF5QnVmZmVyIGFyZ3VtZW50IHRoYXQgZG9lcyBub3QgdGhyb3cgYW4gZXhjZXB0aW9uIG11c3RcbiAgICAgIC8vIGluY3JlYXNlIHRoZSBidWZmZXJlZEFtb3VudCBhdHRyaWJ1dGUgYnkgdGhlIGxlbmd0aCBvZiB0aGVcbiAgICAgIC8vIEFycmF5QnVmZmVyIGluIGJ5dGVzLlxuXG4gICAgICBjb25zdCB2YWx1ZSA9IEJ1ZmZlci5mcm9tKGRhdGEpXG4gICAgICBjb25zdCBmcmFtZSA9IG5ldyBXZWJzb2NrZXRGcmFtZVNlbmQodmFsdWUpXG4gICAgICBjb25zdCBidWZmZXIgPSBmcmFtZS5jcmVhdGVGcmFtZShvcGNvZGVzLkJJTkFSWSlcblxuICAgICAgdGhpcy4jYnVmZmVyZWRBbW91bnQgKz0gdmFsdWUuYnl0ZUxlbmd0aFxuICAgICAgc29ja2V0LndyaXRlKGJ1ZmZlciwgKCkgPT4ge1xuICAgICAgICB0aGlzLiNidWZmZXJlZEFtb3VudCAtPSB2YWx1ZS5ieXRlTGVuZ3RoXG4gICAgICB9KVxuICAgIH0gZWxzZSBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KGRhdGEpKSB7XG4gICAgICAvLyBJZiB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQsIGFuZCB0aGUgV2ViU29ja2V0XG4gICAgICAvLyBjbG9zaW5nIGhhbmRzaGFrZSBoYXMgbm90IHlldCBzdGFydGVkLCB0aGVuIHRoZSB1c2VyIGFnZW50IG11c3RcbiAgICAgIC8vIHNlbmQgYSBXZWJTb2NrZXQgTWVzc2FnZSBjb21wcmlzZWQgb2YgZGF0YSB1c2luZyBhIGJpbmFyeSBmcmFtZVxuICAgICAgLy8gb3Bjb2RlOyBpZiB0aGUgZGF0YSBjYW5ub3QgYmUgc2VudCwgZS5nLiBiZWNhdXNlIGl0IHdvdWxkIG5lZWQgdG9cbiAgICAgIC8vIGJlIGJ1ZmZlcmVkIGJ1dCB0aGUgYnVmZmVyIGlzIGZ1bGwsIHRoZSB1c2VyIGFnZW50IG11c3QgZmxhZyB0aGVcbiAgICAgIC8vIFdlYlNvY2tldCBhcyBmdWxsIGFuZCB0aGVuIGNsb3NlIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbi4gVGhlXG4gICAgICAvLyBkYXRhIHRvIGJlIHNlbnQgaXMgdGhlIGRhdGEgc3RvcmVkIGluIHRoZSBzZWN0aW9uIG9mIHRoZSBidWZmZXJcbiAgICAgIC8vIGRlc2NyaWJlZCBieSB0aGUgQXJyYXlCdWZmZXIgb2JqZWN0IHRoYXQgZGF0YSByZWZlcmVuY2VzLiBBbnlcbiAgICAgIC8vIGludm9jYXRpb24gb2YgdGhpcyBtZXRob2Qgd2l0aCB0aGlzIGtpbmQgb2YgYXJndW1lbnQgdGhhdCBkb2VzXG4gICAgICAvLyBub3QgdGhyb3cgYW4gZXhjZXB0aW9uIG11c3QgaW5jcmVhc2UgdGhlIGJ1ZmZlcmVkQW1vdW50IGF0dHJpYnV0ZVxuICAgICAgLy8gYnkgdGhlIGxlbmd0aCBvZiBkYXRh4oCZcyBidWZmZXIgaW4gYnl0ZXMuXG5cbiAgICAgIGNvbnN0IGFiID0gQnVmZmVyLmZyb20oZGF0YSwgZGF0YS5ieXRlT2Zmc2V0LCBkYXRhLmJ5dGVMZW5ndGgpXG5cbiAgICAgIGNvbnN0IGZyYW1lID0gbmV3IFdlYnNvY2tldEZyYW1lU2VuZChhYilcbiAgICAgIGNvbnN0IGJ1ZmZlciA9IGZyYW1lLmNyZWF0ZUZyYW1lKG9wY29kZXMuQklOQVJZKVxuXG4gICAgICB0aGlzLiNidWZmZXJlZEFtb3VudCArPSBhYi5ieXRlTGVuZ3RoXG4gICAgICBzb2NrZXQud3JpdGUoYnVmZmVyLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuI2J1ZmZlcmVkQW1vdW50IC09IGFiLmJ5dGVMZW5ndGhcbiAgICAgIH0pXG4gICAgfSBlbHNlIGlmIChpc0Jsb2JMaWtlKGRhdGEpKSB7XG4gICAgICAvLyBJZiB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQsIGFuZCB0aGUgV2ViU29ja2V0XG4gICAgICAvLyBjbG9zaW5nIGhhbmRzaGFrZSBoYXMgbm90IHlldCBzdGFydGVkLCB0aGVuIHRoZSB1c2VyIGFnZW50IG11c3RcbiAgICAgIC8vIHNlbmQgYSBXZWJTb2NrZXQgTWVzc2FnZSBjb21wcmlzZWQgb2YgZGF0YSB1c2luZyBhIGJpbmFyeSBmcmFtZVxuICAgICAgLy8gb3Bjb2RlOyBpZiB0aGUgZGF0YSBjYW5ub3QgYmUgc2VudCwgZS5nLiBiZWNhdXNlIGl0IHdvdWxkIG5lZWQgdG9cbiAgICAgIC8vIGJlIGJ1ZmZlcmVkIGJ1dCB0aGUgYnVmZmVyIGlzIGZ1bGwsIHRoZSB1c2VyIGFnZW50IG11c3QgZmxhZyB0aGVcbiAgICAgIC8vIFdlYlNvY2tldCBhcyBmdWxsIGFuZCB0aGVuIGNsb3NlIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbi4gVGhlIGRhdGFcbiAgICAgIC8vIHRvIGJlIHNlbnQgaXMgdGhlIHJhdyBkYXRhIHJlcHJlc2VudGVkIGJ5IHRoZSBCbG9iIG9iamVjdC4gQW55XG4gICAgICAvLyBpbnZvY2F0aW9uIG9mIHRoaXMgbWV0aG9kIHdpdGggYSBCbG9iIGFyZ3VtZW50IHRoYXQgZG9lcyBub3QgdGhyb3dcbiAgICAgIC8vIGFuIGV4Y2VwdGlvbiBtdXN0IGluY3JlYXNlIHRoZSBidWZmZXJlZEFtb3VudCBhdHRyaWJ1dGUgYnkgdGhlIHNpemVcbiAgICAgIC8vIG9mIHRoZSBCbG9iIG9iamVjdOKAmXMgcmF3IGRhdGEsIGluIGJ5dGVzLlxuXG4gICAgICBjb25zdCBmcmFtZSA9IG5ldyBXZWJzb2NrZXRGcmFtZVNlbmQoKVxuXG4gICAgICBkYXRhLmFycmF5QnVmZmVyKCkudGhlbigoYWIpID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBCdWZmZXIuZnJvbShhYilcbiAgICAgICAgZnJhbWUuZnJhbWVEYXRhID0gdmFsdWVcbiAgICAgICAgY29uc3QgYnVmZmVyID0gZnJhbWUuY3JlYXRlRnJhbWUob3Bjb2Rlcy5CSU5BUlkpXG5cbiAgICAgICAgdGhpcy4jYnVmZmVyZWRBbW91bnQgKz0gdmFsdWUuYnl0ZUxlbmd0aFxuICAgICAgICBzb2NrZXQud3JpdGUoYnVmZmVyLCAoKSA9PiB7XG4gICAgICAgICAgdGhpcy4jYnVmZmVyZWRBbW91bnQgLT0gdmFsdWUuYnl0ZUxlbmd0aFxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBnZXQgcmVhZHlTdGF0ZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgLy8gVGhlIHJlYWR5U3RhdGUgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpcydzIHJlYWR5IHN0YXRlLlxuICAgIHJldHVybiB0aGlzW2tSZWFkeVN0YXRlXVxuICB9XG5cbiAgZ2V0IGJ1ZmZlcmVkQW1vdW50ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICByZXR1cm4gdGhpcy4jYnVmZmVyZWRBbW91bnRcbiAgfVxuXG4gIGdldCB1cmwgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIC8vIFRoZSB1cmwgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpcydzIHVybCwgc2VyaWFsaXplZC5cbiAgICByZXR1cm4gVVJMU2VyaWFsaXplcih0aGlzW2tXZWJTb2NrZXRVUkxdKVxuICB9XG5cbiAgZ2V0IGV4dGVuc2lvbnMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIHJldHVybiB0aGlzLiNleHRlbnNpb25zXG4gIH1cblxuICBnZXQgcHJvdG9jb2wgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIHJldHVybiB0aGlzLiNwcm90b2NvbFxuICB9XG5cbiAgZ2V0IG9ub3BlbiAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50cy5vcGVuXG4gIH1cblxuICBzZXQgb25vcGVuIChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIGlmICh0aGlzLiNldmVudHMub3Blbikge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdvcGVuJywgdGhpcy4jZXZlbnRzLm9wZW4pXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy4jZXZlbnRzLm9wZW4gPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdvcGVuJywgZm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5vcGVuID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBvbmVycm9yICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRzLmVycm9yXG4gIH1cblxuICBzZXQgb25lcnJvciAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICBpZiAodGhpcy4jZXZlbnRzLmVycm9yKSB7XG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy4jZXZlbnRzLmVycm9yKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5lcnJvciA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgZm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5lcnJvciA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgb25jbG9zZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50cy5jbG9zZVxuICB9XG5cbiAgc2V0IG9uY2xvc2UgKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgaWYgKHRoaXMuI2V2ZW50cy5jbG9zZSkge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdjbG9zZScsIHRoaXMuI2V2ZW50cy5jbG9zZSlcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLiNldmVudHMuY2xvc2UgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdjbG9zZScsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNldmVudHMuY2xvc2UgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgZ2V0IG9ubWVzc2FnZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50cy5tZXNzYWdlXG4gIH1cblxuICBzZXQgb25tZXNzYWdlIChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIGlmICh0aGlzLiNldmVudHMubWVzc2FnZSkge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgdGhpcy4jZXZlbnRzLm1lc3NhZ2UpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy4jZXZlbnRzLm1lc3NhZ2UgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgZm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5tZXNzYWdlID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBiaW5hcnlUeXBlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICByZXR1cm4gdGhpc1trQmluYXJ5VHlwZV1cbiAgfVxuXG4gIHNldCBiaW5hcnlUeXBlICh0eXBlKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgaWYgKHR5cGUgIT09ICdibG9iJyAmJiB0eXBlICE9PSAnYXJyYXlidWZmZXInKSB7XG4gICAgICB0aGlzW2tCaW5hcnlUeXBlXSA9ICdibG9iJ1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tCaW5hcnlUeXBlXSA9IHR5cGVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNmZWVkYmFjay1mcm9tLXRoZS1wcm90b2NvbFxuICAgKi9cbiAgI29uQ29ubmVjdGlvbkVzdGFibGlzaGVkIChyZXNwb25zZSkge1xuICAgIC8vIHByb2Nlc3NSZXNwb25zZSBpcyBjYWxsZWQgd2hlbiB0aGUgXCJyZXNwb25zZeKAmXMgaGVhZGVyIGxpc3QgaGFzIGJlZW4gcmVjZWl2ZWQgYW5kIGluaXRpYWxpemVkLlwiXG4gICAgLy8gb25jZSB0aGlzIGhhcHBlbnMsIHRoZSBjb25uZWN0aW9uIGlzIG9wZW5cbiAgICB0aGlzW2tSZXNwb25zZV0gPSByZXNwb25zZVxuXG4gICAgY29uc3QgcGFyc2VyID0gbmV3IEJ5dGVQYXJzZXIodGhpcylcbiAgICBwYXJzZXIub24oJ2RyYWluJywgZnVuY3Rpb24gb25QYXJzZXJEcmFpbiAoKSB7XG4gICAgICB0aGlzLndzW2tSZXNwb25zZV0uc29ja2V0LnJlc3VtZSgpXG4gICAgfSlcblxuICAgIHJlc3BvbnNlLnNvY2tldC53cyA9IHRoaXNcbiAgICB0aGlzW2tCeXRlUGFyc2VyXSA9IHBhcnNlclxuXG4gICAgLy8gMS4gQ2hhbmdlIHRoZSByZWFkeSBzdGF0ZSB0byBPUEVOICgxKS5cbiAgICB0aGlzW2tSZWFkeVN0YXRlXSA9IHN0YXRlcy5PUEVOXG5cbiAgICAvLyAyLiBDaGFuZ2UgdGhlIGV4dGVuc2lvbnMgYXR0cmlidXRl4oCZcyB2YWx1ZSB0byB0aGUgZXh0ZW5zaW9ucyBpbiB1c2UsIGlmXG4gICAgLy8gICAgaXQgaXMgbm90IHRoZSBudWxsIHZhbHVlLlxuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NSNzZWN0aW9uLTkuMVxuICAgIGNvbnN0IGV4dGVuc2lvbnMgPSByZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ3NlYy13ZWJzb2NrZXQtZXh0ZW5zaW9ucycpXG5cbiAgICBpZiAoZXh0ZW5zaW9ucyAhPT0gbnVsbCkge1xuICAgICAgdGhpcy4jZXh0ZW5zaW9ucyA9IGV4dGVuc2lvbnNcbiAgICB9XG5cbiAgICAvLyAzLiBDaGFuZ2UgdGhlIHByb3RvY29sIGF0dHJpYnV0ZeKAmXMgdmFsdWUgdG8gdGhlIHN1YnByb3RvY29sIGluIHVzZSwgaWZcbiAgICAvLyAgICBpdCBpcyBub3QgdGhlIG51bGwgdmFsdWUuXG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tMS45XG4gICAgY29uc3QgcHJvdG9jb2wgPSByZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ3NlYy13ZWJzb2NrZXQtcHJvdG9jb2wnKVxuXG4gICAgaWYgKHByb3RvY29sICE9PSBudWxsKSB7XG4gICAgICB0aGlzLiNwcm90b2NvbCA9IHByb3RvY29sXG4gICAgfVxuXG4gICAgLy8gNC4gRmlyZSBhbiBldmVudCBuYW1lZCBvcGVuIGF0IHRoZSBXZWJTb2NrZXQgb2JqZWN0LlxuICAgIGZpcmVFdmVudCgnb3BlbicsIHRoaXMpXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZG9tLXdlYnNvY2tldC1jb25uZWN0aW5nXG5XZWJTb2NrZXQuQ09OTkVDVElORyA9IFdlYlNvY2tldC5wcm90b3R5cGUuQ09OTkVDVElORyA9IHN0YXRlcy5DT05ORUNUSU5HXG4vLyBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNkb20td2Vic29ja2V0LW9wZW5cbldlYlNvY2tldC5PUEVOID0gV2ViU29ja2V0LnByb3RvdHlwZS5PUEVOID0gc3RhdGVzLk9QRU5cbi8vIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2RvbS13ZWJzb2NrZXQtY2xvc2luZ1xuV2ViU29ja2V0LkNMT1NJTkcgPSBXZWJTb2NrZXQucHJvdG90eXBlLkNMT1NJTkcgPSBzdGF0ZXMuQ0xPU0lOR1xuLy8gaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZG9tLXdlYnNvY2tldC1jbG9zZWRcbldlYlNvY2tldC5DTE9TRUQgPSBXZWJTb2NrZXQucHJvdG90eXBlLkNMT1NFRCA9IHN0YXRlcy5DTE9TRURcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoV2ViU29ja2V0LnByb3RvdHlwZSwge1xuICBDT05ORUNUSU5HOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBPUEVOOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBDTE9TSU5HOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBDTE9TRUQ6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIHVybDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcmVhZHlTdGF0ZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYnVmZmVyZWRBbW91bnQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9ub3Blbjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb25lcnJvcjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb25jbG9zZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgY2xvc2U6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9ubWVzc2FnZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYmluYXJ5VHlwZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgc2VuZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZXh0ZW5zaW9uczoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcHJvdG9jb2w6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdXZWJTb2NrZXQnLFxuICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfVxufSlcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoV2ViU29ja2V0LCB7XG4gIENPTk5FQ1RJTkc6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIE9QRU46IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIENMT1NJTkc6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIENMT1NFRDogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9yc1xufSlcblxud2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPERPTVN0cmluZz4nXSA9IHdlYmlkbC5zZXF1ZW5jZUNvbnZlcnRlcihcbiAgd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nXG4pXG5cbndlYmlkbC5jb252ZXJ0ZXJzWydET01TdHJpbmcgb3Igc2VxdWVuY2U8RE9NU3RyaW5nPiddID0gZnVuY3Rpb24gKFYpIHtcbiAgaWYgKHdlYmlkbC51dGlsLlR5cGUoVikgPT09ICdPYmplY3QnICYmIFN5bWJvbC5pdGVyYXRvciBpbiBWKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxET01TdHJpbmc+J10oVilcbiAgfVxuXG4gIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcoVilcbn1cblxuLy8gVGhpcyBpbXBsZW1lbnRzIHRoZSBwcm9wc2FsIG1hZGUgaW4gaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy93ZWJzb2NrZXRzL2lzc3Vlcy80Mlxud2ViaWRsLmNvbnZlcnRlcnMuV2ViU29ja2V0SW5pdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGtleTogJ3Byb3RvY29scycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVyc1snRE9NU3RyaW5nIG9yIHNlcXVlbmNlPERPTVN0cmluZz4nXSxcbiAgICBnZXQgZGVmYXVsdFZhbHVlICgpIHtcbiAgICAgIHJldHVybiBbXVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGtleTogJ2Rpc3BhdGNoZXInLFxuICAgIGNvbnZlcnRlcjogKFYpID0+IFYsXG4gICAgZ2V0IGRlZmF1bHRWYWx1ZSAoKSB7XG4gICAgICByZXR1cm4gZ2V0R2xvYmFsRGlzcGF0Y2hlcigpXG4gICAgfVxuICB9LFxuICB7XG4gICAga2V5OiAnaGVhZGVycycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuSGVhZGVyc0luaXQpXG4gIH1cbl0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzWydET01TdHJpbmcgb3Igc2VxdWVuY2U8RE9NU3RyaW5nPiBvciBXZWJTb2NrZXRJbml0J10gPSBmdW5jdGlvbiAoVikge1xuICBpZiAod2ViaWRsLnV0aWwuVHlwZShWKSA9PT0gJ09iamVjdCcgJiYgIShTeW1ib2wuaXRlcmF0b3IgaW4gVikpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuV2ViU29ja2V0SW5pdChWKVxuICB9XG5cbiAgcmV0dXJuIHsgcHJvdG9jb2xzOiB3ZWJpZGwuY29udmVydGVyc1snRE9NU3RyaW5nIG9yIHNlcXVlbmNlPERPTVN0cmluZz4nXShWKSB9XG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLldlYlNvY2tldFNlbmREYXRhID0gZnVuY3Rpb24gKFYpIHtcbiAgaWYgKHdlYmlkbC51dGlsLlR5cGUoVikgPT09ICdPYmplY3QnKSB7XG4gICAgaWYgKGlzQmxvYkxpa2UoVikpIHtcbiAgICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5CbG9iKFYsIHsgc3RyaWN0OiBmYWxzZSB9KVxuICAgIH1cblxuICAgIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcoVikgfHwgdHlwZXMuaXNBbnlBcnJheUJ1ZmZlcihWKSkge1xuICAgICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkJ1ZmZlclNvdXJjZShWKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcoVilcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFdlYlNvY2tldFxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgQ2xpZW50ID0gcmVxdWlyZSgnLi9saWIvY2xpZW50JylcbmNvbnN0IERpc3BhdGNoZXIgPSByZXF1aXJlKCcuL2xpYi9kaXNwYXRjaGVyJylcbmNvbnN0IGVycm9ycyA9IHJlcXVpcmUoJy4vbGliL2NvcmUvZXJyb3JzJylcbmNvbnN0IFBvb2wgPSByZXF1aXJlKCcuL2xpYi9wb29sJylcbmNvbnN0IEJhbGFuY2VkUG9vbCA9IHJlcXVpcmUoJy4vbGliL2JhbGFuY2VkLXBvb2wnKVxuY29uc3QgQWdlbnQgPSByZXF1aXJlKCcuL2xpYi9hZ2VudCcpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi9saWIvY29yZS91dGlsJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IGVycm9yc1xuY29uc3QgYXBpID0gcmVxdWlyZSgnLi9saWIvYXBpJylcbmNvbnN0IGJ1aWxkQ29ubmVjdG9yID0gcmVxdWlyZSgnLi9saWIvY29yZS9jb25uZWN0JylcbmNvbnN0IE1vY2tDbGllbnQgPSByZXF1aXJlKCcuL2xpYi9tb2NrL21vY2stY2xpZW50JylcbmNvbnN0IE1vY2tBZ2VudCA9IHJlcXVpcmUoJy4vbGliL21vY2svbW9jay1hZ2VudCcpXG5jb25zdCBNb2NrUG9vbCA9IHJlcXVpcmUoJy4vbGliL21vY2svbW9jay1wb29sJylcbmNvbnN0IG1vY2tFcnJvcnMgPSByZXF1aXJlKCcuL2xpYi9tb2NrL21vY2stZXJyb3JzJylcbmNvbnN0IFByb3h5QWdlbnQgPSByZXF1aXJlKCcuL2xpYi9wcm94eS1hZ2VudCcpXG5jb25zdCBSZXRyeUhhbmRsZXIgPSByZXF1aXJlKCcuL2xpYi9oYW5kbGVyL1JldHJ5SGFuZGxlcicpXG5jb25zdCB7IGdldEdsb2JhbERpc3BhdGNoZXIsIHNldEdsb2JhbERpc3BhdGNoZXIgfSA9IHJlcXVpcmUoJy4vbGliL2dsb2JhbCcpXG5jb25zdCBEZWNvcmF0b3JIYW5kbGVyID0gcmVxdWlyZSgnLi9saWIvaGFuZGxlci9EZWNvcmF0b3JIYW5kbGVyJylcbmNvbnN0IFJlZGlyZWN0SGFuZGxlciA9IHJlcXVpcmUoJy4vbGliL2hhbmRsZXIvUmVkaXJlY3RIYW5kbGVyJylcbmNvbnN0IGNyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3IgPSByZXF1aXJlKCcuL2xpYi9pbnRlcmNlcHRvci9yZWRpcmVjdEludGVyY2VwdG9yJylcblxubGV0IGhhc0NyeXB0b1xudHJ5IHtcbiAgcmVxdWlyZSgnY3J5cHRvJylcbiAgaGFzQ3J5cHRvID0gdHJ1ZVxufSBjYXRjaCB7XG4gIGhhc0NyeXB0byA9IGZhbHNlXG59XG5cbk9iamVjdC5hc3NpZ24oRGlzcGF0Y2hlci5wcm90b3R5cGUsIGFwaSlcblxubW9kdWxlLmV4cG9ydHMuRGlzcGF0Y2hlciA9IERpc3BhdGNoZXJcbm1vZHVsZS5leHBvcnRzLkNsaWVudCA9IENsaWVudFxubW9kdWxlLmV4cG9ydHMuUG9vbCA9IFBvb2xcbm1vZHVsZS5leHBvcnRzLkJhbGFuY2VkUG9vbCA9IEJhbGFuY2VkUG9vbFxubW9kdWxlLmV4cG9ydHMuQWdlbnQgPSBBZ2VudFxubW9kdWxlLmV4cG9ydHMuUHJveHlBZ2VudCA9IFByb3h5QWdlbnRcbm1vZHVsZS5leHBvcnRzLlJldHJ5SGFuZGxlciA9IFJldHJ5SGFuZGxlclxuXG5tb2R1bGUuZXhwb3J0cy5EZWNvcmF0b3JIYW5kbGVyID0gRGVjb3JhdG9ySGFuZGxlclxubW9kdWxlLmV4cG9ydHMuUmVkaXJlY3RIYW5kbGVyID0gUmVkaXJlY3RIYW5kbGVyXG5tb2R1bGUuZXhwb3J0cy5jcmVhdGVSZWRpcmVjdEludGVyY2VwdG9yID0gY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvclxuXG5tb2R1bGUuZXhwb3J0cy5idWlsZENvbm5lY3RvciA9IGJ1aWxkQ29ubmVjdG9yXG5tb2R1bGUuZXhwb3J0cy5lcnJvcnMgPSBlcnJvcnNcblxuZnVuY3Rpb24gbWFrZURpc3BhdGNoZXIgKGZuKSB7XG4gIHJldHVybiAodXJsLCBvcHRzLCBoYW5kbGVyKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBvcHRzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBoYW5kbGVyID0gb3B0c1xuICAgICAgb3B0cyA9IG51bGxcbiAgICB9XG5cbiAgICBpZiAoIXVybCB8fCAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycgJiYgdHlwZW9mIHVybCAhPT0gJ29iamVjdCcgJiYgISh1cmwgaW5zdGFuY2VvZiBVUkwpKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIHVybCcpXG4gICAgfVxuXG4gICAgaWYgKG9wdHMgIT0gbnVsbCAmJiB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvcHRzJylcbiAgICB9XG5cbiAgICBpZiAob3B0cyAmJiBvcHRzLnBhdGggIT0gbnVsbCkge1xuICAgICAgaWYgKHR5cGVvZiBvcHRzLnBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvcHRzLnBhdGgnKVxuICAgICAgfVxuXG4gICAgICBsZXQgcGF0aCA9IG9wdHMucGF0aFxuICAgICAgaWYgKCFvcHRzLnBhdGguc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICAgIHBhdGggPSBgLyR7cGF0aH1gXG4gICAgICB9XG5cbiAgICAgIHVybCA9IG5ldyBVUkwodXRpbC5wYXJzZU9yaWdpbih1cmwpLm9yaWdpbiArIHBhdGgpXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghb3B0cykge1xuICAgICAgICBvcHRzID0gdHlwZW9mIHVybCA9PT0gJ29iamVjdCcgPyB1cmwgOiB7fVxuICAgICAgfVxuXG4gICAgICB1cmwgPSB1dGlsLnBhcnNlVVJMKHVybClcbiAgICB9XG5cbiAgICBjb25zdCB7IGFnZW50LCBkaXNwYXRjaGVyID0gZ2V0R2xvYmFsRGlzcGF0Y2hlcigpIH0gPSBvcHRzXG5cbiAgICBpZiAoYWdlbnQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndW5zdXBwb3J0ZWQgb3B0cy5hZ2VudC4gRGlkIHlvdSBtZWFuIG9wdHMuY2xpZW50PycpXG4gICAgfVxuXG4gICAgcmV0dXJuIGZuLmNhbGwoZGlzcGF0Y2hlciwge1xuICAgICAgLi4ub3B0cyxcbiAgICAgIG9yaWdpbjogdXJsLm9yaWdpbixcbiAgICAgIHBhdGg6IHVybC5zZWFyY2ggPyBgJHt1cmwucGF0aG5hbWV9JHt1cmwuc2VhcmNofWAgOiB1cmwucGF0aG5hbWUsXG4gICAgICBtZXRob2Q6IG9wdHMubWV0aG9kIHx8IChvcHRzLmJvZHkgPyAnUFVUJyA6ICdHRVQnKVxuICAgIH0sIGhhbmRsZXIpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMuc2V0R2xvYmFsRGlzcGF0Y2hlciA9IHNldEdsb2JhbERpc3BhdGNoZXJcbm1vZHVsZS5leHBvcnRzLmdldEdsb2JhbERpc3BhdGNoZXIgPSBnZXRHbG9iYWxEaXNwYXRjaGVyXG5cbmlmICh1dGlsLm5vZGVNYWpvciA+IDE2IHx8ICh1dGlsLm5vZGVNYWpvciA9PT0gMTYgJiYgdXRpbC5ub2RlTWlub3IgPj0gOCkpIHtcbiAgbGV0IGZldGNoSW1wbCA9IG51bGxcbiAgbW9kdWxlLmV4cG9ydHMuZmV0Y2ggPSBhc3luYyBmdW5jdGlvbiBmZXRjaCAocmVzb3VyY2UpIHtcbiAgICBpZiAoIWZldGNoSW1wbCkge1xuICAgICAgZmV0Y2hJbXBsID0gcmVxdWlyZSgnLi9saWIvZmV0Y2gnKS5mZXRjaFxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgZmV0Y2hJbXBsKC4uLmFyZ3VtZW50cylcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICh0eXBlb2YgZXJyID09PSAnb2JqZWN0Jykge1xuICAgICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShlcnIsIHRoaXMpXG4gICAgICB9XG5cbiAgICAgIHRocm93IGVyclxuICAgIH1cbiAgfVxuICBtb2R1bGUuZXhwb3J0cy5IZWFkZXJzID0gcmVxdWlyZSgnLi9saWIvZmV0Y2gvaGVhZGVycycpLkhlYWRlcnNcbiAgbW9kdWxlLmV4cG9ydHMuUmVzcG9uc2UgPSByZXF1aXJlKCcuL2xpYi9mZXRjaC9yZXNwb25zZScpLlJlc3BvbnNlXG4gIG1vZHVsZS5leHBvcnRzLlJlcXVlc3QgPSByZXF1aXJlKCcuL2xpYi9mZXRjaC9yZXF1ZXN0JykuUmVxdWVzdFxuICBtb2R1bGUuZXhwb3J0cy5Gb3JtRGF0YSA9IHJlcXVpcmUoJy4vbGliL2ZldGNoL2Zvcm1kYXRhJykuRm9ybURhdGFcbiAgbW9kdWxlLmV4cG9ydHMuRmlsZSA9IHJlcXVpcmUoJy4vbGliL2ZldGNoL2ZpbGUnKS5GaWxlXG4gIG1vZHVsZS5leHBvcnRzLkZpbGVSZWFkZXIgPSByZXF1aXJlKCcuL2xpYi9maWxlYXBpL2ZpbGVyZWFkZXInKS5GaWxlUmVhZGVyXG5cbiAgY29uc3QgeyBzZXRHbG9iYWxPcmlnaW4sIGdldEdsb2JhbE9yaWdpbiB9ID0gcmVxdWlyZSgnLi9saWIvZmV0Y2gvZ2xvYmFsJylcblxuICBtb2R1bGUuZXhwb3J0cy5zZXRHbG9iYWxPcmlnaW4gPSBzZXRHbG9iYWxPcmlnaW5cbiAgbW9kdWxlLmV4cG9ydHMuZ2V0R2xvYmFsT3JpZ2luID0gZ2V0R2xvYmFsT3JpZ2luXG5cbiAgY29uc3QgeyBDYWNoZVN0b3JhZ2UgfSA9IHJlcXVpcmUoJy4vbGliL2NhY2hlL2NhY2hlc3RvcmFnZScpXG4gIGNvbnN0IHsga0NvbnN0cnVjdCB9ID0gcmVxdWlyZSgnLi9saWIvY2FjaGUvc3ltYm9scycpXG5cbiAgLy8gQ2FjaGUgJiBDYWNoZVN0b3JhZ2UgYXJlIHRpZ2h0bHkgY291cGxlZCB3aXRoIGZldGNoLiBFdmVuIGlmIGl0IG1heSBydW5cbiAgLy8gaW4gYW4gb2xkZXIgdmVyc2lvbiBvZiBOb2RlLCBpdCBkb2Vzbid0IGhhdmUgYW55IHVzZSB3aXRob3V0IGZldGNoLlxuICBtb2R1bGUuZXhwb3J0cy5jYWNoZXMgPSBuZXcgQ2FjaGVTdG9yYWdlKGtDb25zdHJ1Y3QpXG59XG5cbmlmICh1dGlsLm5vZGVNYWpvciA+PSAxNikge1xuICBjb25zdCB7IGRlbGV0ZUNvb2tpZSwgZ2V0Q29va2llcywgZ2V0U2V0Q29va2llcywgc2V0Q29va2llIH0gPSByZXF1aXJlKCcuL2xpYi9jb29raWVzJylcblxuICBtb2R1bGUuZXhwb3J0cy5kZWxldGVDb29raWUgPSBkZWxldGVDb29raWVcbiAgbW9kdWxlLmV4cG9ydHMuZ2V0Q29va2llcyA9IGdldENvb2tpZXNcbiAgbW9kdWxlLmV4cG9ydHMuZ2V0U2V0Q29va2llcyA9IGdldFNldENvb2tpZXNcbiAgbW9kdWxlLmV4cG9ydHMuc2V0Q29va2llID0gc2V0Q29va2llXG5cbiAgY29uc3QgeyBwYXJzZU1JTUVUeXBlLCBzZXJpYWxpemVBTWltZVR5cGUgfSA9IHJlcXVpcmUoJy4vbGliL2ZldGNoL2RhdGFVUkwnKVxuXG4gIG1vZHVsZS5leHBvcnRzLnBhcnNlTUlNRVR5cGUgPSBwYXJzZU1JTUVUeXBlXG4gIG1vZHVsZS5leHBvcnRzLnNlcmlhbGl6ZUFNaW1lVHlwZSA9IHNlcmlhbGl6ZUFNaW1lVHlwZVxufVxuXG5pZiAodXRpbC5ub2RlTWFqb3IgPj0gMTggJiYgaGFzQ3J5cHRvKSB7XG4gIGNvbnN0IHsgV2ViU29ja2V0IH0gPSByZXF1aXJlKCcuL2xpYi93ZWJzb2NrZXQvd2Vic29ja2V0JylcblxuICBtb2R1bGUuZXhwb3J0cy5XZWJTb2NrZXQgPSBXZWJTb2NrZXRcbn1cblxubW9kdWxlLmV4cG9ydHMucmVxdWVzdCA9IG1ha2VEaXNwYXRjaGVyKGFwaS5yZXF1ZXN0KVxubW9kdWxlLmV4cG9ydHMuc3RyZWFtID0gbWFrZURpc3BhdGNoZXIoYXBpLnN0cmVhbSlcbm1vZHVsZS5leHBvcnRzLnBpcGVsaW5lID0gbWFrZURpc3BhdGNoZXIoYXBpLnBpcGVsaW5lKVxubW9kdWxlLmV4cG9ydHMuY29ubmVjdCA9IG1ha2VEaXNwYXRjaGVyKGFwaS5jb25uZWN0KVxubW9kdWxlLmV4cG9ydHMudXBncmFkZSA9IG1ha2VEaXNwYXRjaGVyKGFwaS51cGdyYWRlKVxuXG5tb2R1bGUuZXhwb3J0cy5Nb2NrQ2xpZW50ID0gTW9ja0NsaWVudFxubW9kdWxlLmV4cG9ydHMuTW9ja1Bvb2wgPSBNb2NrUG9vbFxubW9kdWxlLmV4cG9ydHMuTW9ja0FnZW50ID0gTW9ja0FnZW50XG5tb2R1bGUuZXhwb3J0cy5tb2NrRXJyb3JzID0gbW9ja0Vycm9yc1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkh0dHBDbGllbnQgPSBleHBvcnRzLmlzSHR0cHMgPSBleHBvcnRzLkh0dHBDbGllbnRSZXNwb25zZSA9IGV4cG9ydHMuSHR0cENsaWVudEVycm9yID0gZXhwb3J0cy5nZXRQcm94eVVybCA9IGV4cG9ydHMuTWVkaWFUeXBlcyA9IGV4cG9ydHMuSGVhZGVycyA9IGV4cG9ydHMuSHR0cENvZGVzID0gdm9pZCAwO1xuY29uc3QgaHR0cCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiaHR0cFwiKSk7XG5jb25zdCBodHRwcyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiaHR0cHNcIikpO1xuY29uc3QgcG0gPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIi4vcHJveHlcIikpO1xuY29uc3QgdHVubmVsID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJ0dW5uZWxcIikpO1xuY29uc3QgdW5kaWNpXzEgPSByZXF1aXJlKFwidW5kaWNpXCIpO1xudmFyIEh0dHBDb2RlcztcbihmdW5jdGlvbiAoSHR0cENvZGVzKSB7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIk9LXCJdID0gMjAwXSA9IFwiT0tcIjtcbiAgICBIdHRwQ29kZXNbSHR0cENvZGVzW1wiTXVsdGlwbGVDaG9pY2VzXCJdID0gMzAwXSA9IFwiTXVsdGlwbGVDaG9pY2VzXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIk1vdmVkUGVybWFuZW50bHlcIl0gPSAzMDFdID0gXCJNb3ZlZFBlcm1hbmVudGx5XCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIlJlc291cmNlTW92ZWRcIl0gPSAzMDJdID0gXCJSZXNvdXJjZU1vdmVkXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIlNlZU90aGVyXCJdID0gMzAzXSA9IFwiU2VlT3RoZXJcIjtcbiAgICBIdHRwQ29kZXNbSHR0cENvZGVzW1wiTm90TW9kaWZpZWRcIl0gPSAzMDRdID0gXCJOb3RNb2RpZmllZFwiO1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJVc2VQcm94eVwiXSA9IDMwNV0gPSBcIlVzZVByb3h5XCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIlN3aXRjaFByb3h5XCJdID0gMzA2XSA9IFwiU3dpdGNoUHJveHlcIjtcbiAgICBIdHRwQ29kZXNbSHR0cENvZGVzW1wiVGVtcG9yYXJ5UmVkaXJlY3RcIl0gPSAzMDddID0gXCJUZW1wb3JhcnlSZWRpcmVjdFwiO1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJQZXJtYW5lbnRSZWRpcmVjdFwiXSA9IDMwOF0gPSBcIlBlcm1hbmVudFJlZGlyZWN0XCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIkJhZFJlcXVlc3RcIl0gPSA0MDBdID0gXCJCYWRSZXF1ZXN0XCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIlVuYXV0aG9yaXplZFwiXSA9IDQwMV0gPSBcIlVuYXV0aG9yaXplZFwiO1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJQYXltZW50UmVxdWlyZWRcIl0gPSA0MDJdID0gXCJQYXltZW50UmVxdWlyZWRcIjtcbiAgICBIdHRwQ29kZXNbSHR0cENvZGVzW1wiRm9yYmlkZGVuXCJdID0gNDAzXSA9IFwiRm9yYmlkZGVuXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIk5vdEZvdW5kXCJdID0gNDA0XSA9IFwiTm90Rm91bmRcIjtcbiAgICBIdHRwQ29kZXNbSHR0cENvZGVzW1wiTWV0aG9kTm90QWxsb3dlZFwiXSA9IDQwNV0gPSBcIk1ldGhvZE5vdEFsbG93ZWRcIjtcbiAgICBIdHRwQ29kZXNbSHR0cENvZGVzW1wiTm90QWNjZXB0YWJsZVwiXSA9IDQwNl0gPSBcIk5vdEFjY2VwdGFibGVcIjtcbiAgICBIdHRwQ29kZXNbSHR0cENvZGVzW1wiUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkXCJdID0gNDA3XSA9IFwiUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIlJlcXVlc3RUaW1lb3V0XCJdID0gNDA4XSA9IFwiUmVxdWVzdFRpbWVvdXRcIjtcbiAgICBIdHRwQ29kZXNbSHR0cENvZGVzW1wiQ29uZmxpY3RcIl0gPSA0MDldID0gXCJDb25mbGljdFwiO1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJHb25lXCJdID0gNDEwXSA9IFwiR29uZVwiO1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJUb29NYW55UmVxdWVzdHNcIl0gPSA0MjldID0gXCJUb29NYW55UmVxdWVzdHNcIjtcbiAgICBIdHRwQ29kZXNbSHR0cENvZGVzW1wiSW50ZXJuYWxTZXJ2ZXJFcnJvclwiXSA9IDUwMF0gPSBcIkludGVybmFsU2VydmVyRXJyb3JcIjtcbiAgICBIdHRwQ29kZXNbSHR0cENvZGVzW1wiTm90SW1wbGVtZW50ZWRcIl0gPSA1MDFdID0gXCJOb3RJbXBsZW1lbnRlZFwiO1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJCYWRHYXRld2F5XCJdID0gNTAyXSA9IFwiQmFkR2F0ZXdheVwiO1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJTZXJ2aWNlVW5hdmFpbGFibGVcIl0gPSA1MDNdID0gXCJTZXJ2aWNlVW5hdmFpbGFibGVcIjtcbiAgICBIdHRwQ29kZXNbSHR0cENvZGVzW1wiR2F0ZXdheVRpbWVvdXRcIl0gPSA1MDRdID0gXCJHYXRld2F5VGltZW91dFwiO1xufSkoSHR0cENvZGVzIHx8IChleHBvcnRzLkh0dHBDb2RlcyA9IEh0dHBDb2RlcyA9IHt9KSk7XG52YXIgSGVhZGVycztcbihmdW5jdGlvbiAoSGVhZGVycykge1xuICAgIEhlYWRlcnNbXCJBY2NlcHRcIl0gPSBcImFjY2VwdFwiO1xuICAgIEhlYWRlcnNbXCJDb250ZW50VHlwZVwiXSA9IFwiY29udGVudC10eXBlXCI7XG59KShIZWFkZXJzIHx8IChleHBvcnRzLkhlYWRlcnMgPSBIZWFkZXJzID0ge30pKTtcbnZhciBNZWRpYVR5cGVzO1xuKGZ1bmN0aW9uIChNZWRpYVR5cGVzKSB7XG4gICAgTWVkaWFUeXBlc1tcIkFwcGxpY2F0aW9uSnNvblwiXSA9IFwiYXBwbGljYXRpb24vanNvblwiO1xufSkoTWVkaWFUeXBlcyB8fCAoZXhwb3J0cy5NZWRpYVR5cGVzID0gTWVkaWFUeXBlcyA9IHt9KSk7XG4vKipcbiAqIFJldHVybnMgdGhlIHByb3h5IFVSTCwgZGVwZW5kaW5nIHVwb24gdGhlIHN1cHBsaWVkIHVybCBhbmQgcHJveHkgZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuICogQHBhcmFtIHNlcnZlclVybCAgVGhlIHNlcnZlciBVUkwgd2hlcmUgdGhlIHJlcXVlc3Qgd2lsbCBiZSBzZW50LiBGb3IgZXhhbXBsZSwgaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbVxuICovXG5mdW5jdGlvbiBnZXRQcm94eVVybChzZXJ2ZXJVcmwpIHtcbiAgICBjb25zdCBwcm94eVVybCA9IHBtLmdldFByb3h5VXJsKG5ldyBVUkwoc2VydmVyVXJsKSk7XG4gICAgcmV0dXJuIHByb3h5VXJsID8gcHJveHlVcmwuaHJlZiA6ICcnO1xufVxuZXhwb3J0cy5nZXRQcm94eVVybCA9IGdldFByb3h5VXJsO1xuY29uc3QgSHR0cFJlZGlyZWN0Q29kZXMgPSBbXG4gICAgSHR0cENvZGVzLk1vdmVkUGVybWFuZW50bHksXG4gICAgSHR0cENvZGVzLlJlc291cmNlTW92ZWQsXG4gICAgSHR0cENvZGVzLlNlZU90aGVyLFxuICAgIEh0dHBDb2Rlcy5UZW1wb3JhcnlSZWRpcmVjdCxcbiAgICBIdHRwQ29kZXMuUGVybWFuZW50UmVkaXJlY3Rcbl07XG5jb25zdCBIdHRwUmVzcG9uc2VSZXRyeUNvZGVzID0gW1xuICAgIEh0dHBDb2Rlcy5CYWRHYXRld2F5LFxuICAgIEh0dHBDb2Rlcy5TZXJ2aWNlVW5hdmFpbGFibGUsXG4gICAgSHR0cENvZGVzLkdhdGV3YXlUaW1lb3V0XG5dO1xuY29uc3QgUmV0cnlhYmxlSHR0cFZlcmJzID0gWydPUFRJT05TJywgJ0dFVCcsICdERUxFVEUnLCAnSEVBRCddO1xuY29uc3QgRXhwb25lbnRpYWxCYWNrb2ZmQ2VpbGluZyA9IDEwO1xuY29uc3QgRXhwb25lbnRpYWxCYWNrb2ZmVGltZVNsaWNlID0gNTtcbmNsYXNzIEh0dHBDbGllbnRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlLCBzdGF0dXNDb2RlKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLm5hbWUgPSAnSHR0cENsaWVudEVycm9yJztcbiAgICAgICAgdGhpcy5zdGF0dXNDb2RlID0gc3RhdHVzQ29kZTtcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIEh0dHBDbGllbnRFcnJvci5wcm90b3R5cGUpO1xuICAgIH1cbn1cbmV4cG9ydHMuSHR0cENsaWVudEVycm9yID0gSHR0cENsaWVudEVycm9yO1xuY2xhc3MgSHR0cENsaWVudFJlc3BvbnNlIHtcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlKSB7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgfVxuICAgIHJlYWRCb2R5KCkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IG91dHB1dCA9IEJ1ZmZlci5hbGxvYygwKTtcbiAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2Uub24oJ2RhdGEnLCAoY2h1bmspID0+IHtcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gQnVmZmVyLmNvbmNhdChbb3V0cHV0LCBjaHVua10pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZS5vbignZW5kJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG91dHB1dC50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJlYWRCb2R5QnVmZmVyKCkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2h1bmtzID0gW107XG4gICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlLm9uKCdkYXRhJywgKGNodW5rKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNodW5rcy5wdXNoKGNodW5rKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2Uub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShCdWZmZXIuY29uY2F0KGNodW5rcykpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnRzLkh0dHBDbGllbnRSZXNwb25zZSA9IEh0dHBDbGllbnRSZXNwb25zZTtcbmZ1bmN0aW9uIGlzSHR0cHMocmVxdWVzdFVybCkge1xuICAgIGNvbnN0IHBhcnNlZFVybCA9IG5ldyBVUkwocmVxdWVzdFVybCk7XG4gICAgcmV0dXJuIHBhcnNlZFVybC5wcm90b2NvbCA9PT0gJ2h0dHBzOic7XG59XG5leHBvcnRzLmlzSHR0cHMgPSBpc0h0dHBzO1xuY2xhc3MgSHR0cENsaWVudCB7XG4gICAgY29uc3RydWN0b3IodXNlckFnZW50LCBoYW5kbGVycywgcmVxdWVzdE9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5faWdub3JlU3NsRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fYWxsb3dSZWRpcmVjdHMgPSB0cnVlO1xuICAgICAgICB0aGlzLl9hbGxvd1JlZGlyZWN0RG93bmdyYWRlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX21heFJlZGlyZWN0cyA9IDUwO1xuICAgICAgICB0aGlzLl9hbGxvd1JldHJpZXMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fbWF4UmV0cmllcyA9IDE7XG4gICAgICAgIHRoaXMuX2tlZXBBbGl2ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9kaXNwb3NlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnVzZXJBZ2VudCA9IHVzZXJBZ2VudDtcbiAgICAgICAgdGhpcy5oYW5kbGVycyA9IGhhbmRsZXJzIHx8IFtdO1xuICAgICAgICB0aGlzLnJlcXVlc3RPcHRpb25zID0gcmVxdWVzdE9wdGlvbnM7XG4gICAgICAgIGlmIChyZXF1ZXN0T3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKHJlcXVlc3RPcHRpb25zLmlnbm9yZVNzbEVycm9yICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9pZ25vcmVTc2xFcnJvciA9IHJlcXVlc3RPcHRpb25zLmlnbm9yZVNzbEVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fc29ja2V0VGltZW91dCA9IHJlcXVlc3RPcHRpb25zLnNvY2tldFRpbWVvdXQ7XG4gICAgICAgICAgICBpZiAocmVxdWVzdE9wdGlvbnMuYWxsb3dSZWRpcmVjdHMgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FsbG93UmVkaXJlY3RzID0gcmVxdWVzdE9wdGlvbnMuYWxsb3dSZWRpcmVjdHM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVxdWVzdE9wdGlvbnMuYWxsb3dSZWRpcmVjdERvd25ncmFkZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWxsb3dSZWRpcmVjdERvd25ncmFkZSA9IHJlcXVlc3RPcHRpb25zLmFsbG93UmVkaXJlY3REb3duZ3JhZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVxdWVzdE9wdGlvbnMubWF4UmVkaXJlY3RzICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXhSZWRpcmVjdHMgPSBNYXRoLm1heChyZXF1ZXN0T3B0aW9ucy5tYXhSZWRpcmVjdHMsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlcXVlc3RPcHRpb25zLmtlZXBBbGl2ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fa2VlcEFsaXZlID0gcmVxdWVzdE9wdGlvbnMua2VlcEFsaXZlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlcXVlc3RPcHRpb25zLmFsbG93UmV0cmllcyAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWxsb3dSZXRyaWVzID0gcmVxdWVzdE9wdGlvbnMuYWxsb3dSZXRyaWVzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlcXVlc3RPcHRpb25zLm1heFJldHJpZXMgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX21heFJldHJpZXMgPSByZXF1ZXN0T3B0aW9ucy5tYXhSZXRyaWVzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIG9wdGlvbnMocmVxdWVzdFVybCwgYWRkaXRpb25hbEhlYWRlcnMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QoJ09QVElPTlMnLCByZXF1ZXN0VXJsLCBudWxsLCBhZGRpdGlvbmFsSGVhZGVycyB8fCB7fSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBnZXQocmVxdWVzdFVybCwgYWRkaXRpb25hbEhlYWRlcnMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QoJ0dFVCcsIHJlcXVlc3RVcmwsIG51bGwsIGFkZGl0aW9uYWxIZWFkZXJzIHx8IHt9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGRlbChyZXF1ZXN0VXJsLCBhZGRpdGlvbmFsSGVhZGVycykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdCgnREVMRVRFJywgcmVxdWVzdFVybCwgbnVsbCwgYWRkaXRpb25hbEhlYWRlcnMgfHwge30pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcG9zdChyZXF1ZXN0VXJsLCBkYXRhLCBhZGRpdGlvbmFsSGVhZGVycykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdCgnUE9TVCcsIHJlcXVlc3RVcmwsIGRhdGEsIGFkZGl0aW9uYWxIZWFkZXJzIHx8IHt9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHBhdGNoKHJlcXVlc3RVcmwsIGRhdGEsIGFkZGl0aW9uYWxIZWFkZXJzKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KCdQQVRDSCcsIHJlcXVlc3RVcmwsIGRhdGEsIGFkZGl0aW9uYWxIZWFkZXJzIHx8IHt9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHB1dChyZXF1ZXN0VXJsLCBkYXRhLCBhZGRpdGlvbmFsSGVhZGVycykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdCgnUFVUJywgcmVxdWVzdFVybCwgZGF0YSwgYWRkaXRpb25hbEhlYWRlcnMgfHwge30pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgaGVhZChyZXF1ZXN0VXJsLCBhZGRpdGlvbmFsSGVhZGVycykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdCgnSEVBRCcsIHJlcXVlc3RVcmwsIG51bGwsIGFkZGl0aW9uYWxIZWFkZXJzIHx8IHt9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHNlbmRTdHJlYW0odmVyYiwgcmVxdWVzdFVybCwgc3RyZWFtLCBhZGRpdGlvbmFsSGVhZGVycykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdCh2ZXJiLCByZXF1ZXN0VXJsLCBzdHJlYW0sIGFkZGl0aW9uYWxIZWFkZXJzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldHMgYSB0eXBlZCBvYmplY3QgZnJvbSBhbiBlbmRwb2ludFxuICAgICAqIEJlIGF3YXJlIHRoYXQgbm90IGZvdW5kIHJldHVybnMgYSBudWxsLiAgT3RoZXIgZXJyb3JzICg0eHgsIDV4eCkgcmVqZWN0IHRoZSBwcm9taXNlXG4gICAgICovXG4gICAgZ2V0SnNvbihyZXF1ZXN0VXJsLCBhZGRpdGlvbmFsSGVhZGVycyA9IHt9KSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBhZGRpdGlvbmFsSGVhZGVyc1tIZWFkZXJzLkFjY2VwdF0gPSB0aGlzLl9nZXRFeGlzdGluZ09yRGVmYXVsdEhlYWRlcihhZGRpdGlvbmFsSGVhZGVycywgSGVhZGVycy5BY2NlcHQsIE1lZGlhVHlwZXMuQXBwbGljYXRpb25Kc29uKTtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IHlpZWxkIHRoaXMuZ2V0KHJlcXVlc3RVcmwsIGFkZGl0aW9uYWxIZWFkZXJzKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcm9jZXNzUmVzcG9uc2UocmVzLCB0aGlzLnJlcXVlc3RPcHRpb25zKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHBvc3RKc29uKHJlcXVlc3RVcmwsIG9iaiwgYWRkaXRpb25hbEhlYWRlcnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IEpTT04uc3RyaW5naWZ5KG9iaiwgbnVsbCwgMik7XG4gICAgICAgICAgICBhZGRpdGlvbmFsSGVhZGVyc1tIZWFkZXJzLkFjY2VwdF0gPSB0aGlzLl9nZXRFeGlzdGluZ09yRGVmYXVsdEhlYWRlcihhZGRpdGlvbmFsSGVhZGVycywgSGVhZGVycy5BY2NlcHQsIE1lZGlhVHlwZXMuQXBwbGljYXRpb25Kc29uKTtcbiAgICAgICAgICAgIGFkZGl0aW9uYWxIZWFkZXJzW0hlYWRlcnMuQ29udGVudFR5cGVdID0gdGhpcy5fZ2V0RXhpc3RpbmdPckRlZmF1bHRIZWFkZXIoYWRkaXRpb25hbEhlYWRlcnMsIEhlYWRlcnMuQ29udGVudFR5cGUsIE1lZGlhVHlwZXMuQXBwbGljYXRpb25Kc29uKTtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IHlpZWxkIHRoaXMucG9zdChyZXF1ZXN0VXJsLCBkYXRhLCBhZGRpdGlvbmFsSGVhZGVycyk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJvY2Vzc1Jlc3BvbnNlKHJlcywgdGhpcy5yZXF1ZXN0T3B0aW9ucyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwdXRKc29uKHJlcXVlc3RVcmwsIG9iaiwgYWRkaXRpb25hbEhlYWRlcnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IEpTT04uc3RyaW5naWZ5KG9iaiwgbnVsbCwgMik7XG4gICAgICAgICAgICBhZGRpdGlvbmFsSGVhZGVyc1tIZWFkZXJzLkFjY2VwdF0gPSB0aGlzLl9nZXRFeGlzdGluZ09yRGVmYXVsdEhlYWRlcihhZGRpdGlvbmFsSGVhZGVycywgSGVhZGVycy5BY2NlcHQsIE1lZGlhVHlwZXMuQXBwbGljYXRpb25Kc29uKTtcbiAgICAgICAgICAgIGFkZGl0aW9uYWxIZWFkZXJzW0hlYWRlcnMuQ29udGVudFR5cGVdID0gdGhpcy5fZ2V0RXhpc3RpbmdPckRlZmF1bHRIZWFkZXIoYWRkaXRpb25hbEhlYWRlcnMsIEhlYWRlcnMuQ29udGVudFR5cGUsIE1lZGlhVHlwZXMuQXBwbGljYXRpb25Kc29uKTtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IHlpZWxkIHRoaXMucHV0KHJlcXVlc3RVcmwsIGRhdGEsIGFkZGl0aW9uYWxIZWFkZXJzKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcm9jZXNzUmVzcG9uc2UocmVzLCB0aGlzLnJlcXVlc3RPcHRpb25zKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHBhdGNoSnNvbihyZXF1ZXN0VXJsLCBvYmosIGFkZGl0aW9uYWxIZWFkZXJzID0ge30pIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnN0cmluZ2lmeShvYmosIG51bGwsIDIpO1xuICAgICAgICAgICAgYWRkaXRpb25hbEhlYWRlcnNbSGVhZGVycy5BY2NlcHRdID0gdGhpcy5fZ2V0RXhpc3RpbmdPckRlZmF1bHRIZWFkZXIoYWRkaXRpb25hbEhlYWRlcnMsIEhlYWRlcnMuQWNjZXB0LCBNZWRpYVR5cGVzLkFwcGxpY2F0aW9uSnNvbik7XG4gICAgICAgICAgICBhZGRpdGlvbmFsSGVhZGVyc1tIZWFkZXJzLkNvbnRlbnRUeXBlXSA9IHRoaXMuX2dldEV4aXN0aW5nT3JEZWZhdWx0SGVhZGVyKGFkZGl0aW9uYWxIZWFkZXJzLCBIZWFkZXJzLkNvbnRlbnRUeXBlLCBNZWRpYVR5cGVzLkFwcGxpY2F0aW9uSnNvbik7XG4gICAgICAgICAgICBjb25zdCByZXMgPSB5aWVsZCB0aGlzLnBhdGNoKHJlcXVlc3RVcmwsIGRhdGEsIGFkZGl0aW9uYWxIZWFkZXJzKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcm9jZXNzUmVzcG9uc2UocmVzLCB0aGlzLnJlcXVlc3RPcHRpb25zKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1ha2VzIGEgcmF3IGh0dHAgcmVxdWVzdC5cbiAgICAgKiBBbGwgb3RoZXIgbWV0aG9kcyBzdWNoIGFzIGdldCwgcG9zdCwgcGF0Y2gsIGFuZCByZXF1ZXN0IHVsdGltYXRlbHkgY2FsbCB0aGlzLlxuICAgICAqIFByZWZlciBnZXQsIGRlbCwgcG9zdCBhbmQgcGF0Y2hcbiAgICAgKi9cbiAgICByZXF1ZXN0KHZlcmIsIHJlcXVlc3RVcmwsIGRhdGEsIGhlYWRlcnMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9kaXNwb3NlZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2xpZW50IGhhcyBhbHJlYWR5IGJlZW4gZGlzcG9zZWQuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRVcmwgPSBuZXcgVVJMKHJlcXVlc3RVcmwpO1xuICAgICAgICAgICAgbGV0IGluZm8gPSB0aGlzLl9wcmVwYXJlUmVxdWVzdCh2ZXJiLCBwYXJzZWRVcmwsIGhlYWRlcnMpO1xuICAgICAgICAgICAgLy8gT25seSBwZXJmb3JtIHJldHJpZXMgb24gcmVhZHMgc2luY2Ugd3JpdGVzIG1heSBub3QgYmUgaWRlbXBvdGVudC5cbiAgICAgICAgICAgIGNvbnN0IG1heFRyaWVzID0gdGhpcy5fYWxsb3dSZXRyaWVzICYmIFJldHJ5YWJsZUh0dHBWZXJicy5pbmNsdWRlcyh2ZXJiKVxuICAgICAgICAgICAgICAgID8gdGhpcy5fbWF4UmV0cmllcyArIDFcbiAgICAgICAgICAgICAgICA6IDE7XG4gICAgICAgICAgICBsZXQgbnVtVHJpZXMgPSAwO1xuICAgICAgICAgICAgbGV0IHJlc3BvbnNlO1xuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlID0geWllbGQgdGhpcy5yZXF1ZXN0UmF3KGluZm8sIGRhdGEpO1xuICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIGl0J3MgYW4gYXV0aGVudGljYXRpb24gY2hhbGxlbmdlXG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlICYmXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLm1lc3NhZ2UgJiZcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UubWVzc2FnZS5zdGF0dXNDb2RlID09PSBIdHRwQ29kZXMuVW5hdXRob3JpemVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBhdXRoZW50aWNhdGlvbkhhbmRsZXI7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaGFuZGxlciBvZiB0aGlzLmhhbmRsZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFuZGxlci5jYW5IYW5kbGVBdXRoZW50aWNhdGlvbihyZXNwb25zZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRoZW50aWNhdGlvbkhhbmRsZXIgPSBoYW5kbGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChhdXRoZW50aWNhdGlvbkhhbmRsZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhdXRoZW50aWNhdGlvbkhhbmRsZXIuaGFuZGxlQXV0aGVudGljYXRpb24odGhpcywgaW5mbywgZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHJlY2VpdmVkIGFuIHVuYXV0aG9yaXplZCByZXNwb25zZSBidXQgaGF2ZSBubyBoYW5kbGVycyB0byBoYW5kbGUgaXQuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBMZXQgdGhlIHJlc3BvbnNlIHJldHVybiB0byB0aGUgY2FsbGVyLlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCByZWRpcmVjdHNSZW1haW5pbmcgPSB0aGlzLl9tYXhSZWRpcmVjdHM7XG4gICAgICAgICAgICAgICAgd2hpbGUgKHJlc3BvbnNlLm1lc3NhZ2Uuc3RhdHVzQ29kZSAmJlxuICAgICAgICAgICAgICAgICAgICBIdHRwUmVkaXJlY3RDb2Rlcy5pbmNsdWRlcyhyZXNwb25zZS5tZXNzYWdlLnN0YXR1c0NvZGUpICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2FsbG93UmVkaXJlY3RzICYmXG4gICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0c1JlbWFpbmluZyA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVkaXJlY3RVcmwgPSByZXNwb25zZS5tZXNzYWdlLmhlYWRlcnNbJ2xvY2F0aW9uJ107XG4gICAgICAgICAgICAgICAgICAgIGlmICghcmVkaXJlY3RVcmwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZXJlJ3Mgbm8gbG9jYXRpb24gdG8gcmVkaXJlY3QgdG8sIHdlIHdvbid0XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWRSZWRpcmVjdFVybCA9IG5ldyBVUkwocmVkaXJlY3RVcmwpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VkVXJsLnByb3RvY29sID09PSAnaHR0cHM6JyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkVXJsLnByb3RvY29sICE9PSBwYXJzZWRSZWRpcmVjdFVybC5wcm90b2NvbCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIXRoaXMuX2FsbG93UmVkaXJlY3REb3duZ3JhZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVkaXJlY3QgZnJvbSBIVFRQUyB0byBIVFRQIHByb3RvY29sLiBUaGlzIGRvd25ncmFkZSBpcyBub3QgYWxsb3dlZCBmb3Igc2VjdXJpdHkgcmVhc29ucy4gSWYgeW91IHdhbnQgdG8gYWxsb3cgdGhpcyBiZWhhdmlvciwgc2V0IHRoZSBhbGxvd1JlZGlyZWN0RG93bmdyYWRlIG9wdGlvbiB0byB0cnVlLicpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gZmluaXNoIHJlYWRpbmcgdGhlIHJlc3BvbnNlIGJlZm9yZSByZWFzc2lnbmluZyByZXNwb25zZVxuICAgICAgICAgICAgICAgICAgICAvLyB3aGljaCB3aWxsIGxlYWsgdGhlIG9wZW4gc29ja2V0LlxuICAgICAgICAgICAgICAgICAgICB5aWVsZCByZXNwb25zZS5yZWFkQm9keSgpO1xuICAgICAgICAgICAgICAgICAgICAvLyBzdHJpcCBhdXRob3JpemF0aW9uIGhlYWRlciBpZiByZWRpcmVjdGVkIHRvIGEgZGlmZmVyZW50IGhvc3RuYW1lXG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZWRSZWRpcmVjdFVybC5ob3N0bmFtZSAhPT0gcGFyc2VkVXJsLmhvc3RuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGhlYWRlciBpbiBoZWFkZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGVhZGVyIG5hbWVzIGFyZSBjYXNlIGluc2Vuc2l0aXZlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhlYWRlci50b0xvd2VyQ2FzZSgpID09PSAnYXV0aG9yaXphdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGhlYWRlcnNbaGVhZGVyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gbGV0J3MgbWFrZSB0aGUgcmVxdWVzdCB3aXRoIHRoZSBuZXcgcmVkaXJlY3RVcmxcbiAgICAgICAgICAgICAgICAgICAgaW5mbyA9IHRoaXMuX3ByZXBhcmVSZXF1ZXN0KHZlcmIsIHBhcnNlZFJlZGlyZWN0VXJsLCBoZWFkZXJzKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSB5aWVsZCB0aGlzLnJlcXVlc3RSYXcoaW5mbywgZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0c1JlbWFpbmluZy0tO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXJlc3BvbnNlLm1lc3NhZ2Uuc3RhdHVzQ29kZSB8fFxuICAgICAgICAgICAgICAgICAgICAhSHR0cFJlc3BvbnNlUmV0cnlDb2Rlcy5pbmNsdWRlcyhyZXNwb25zZS5tZXNzYWdlLnN0YXR1c0NvZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIElmIG5vdCBhIHJldHJ5IGNvZGUsIHJldHVybiBpbW1lZGlhdGVseSBpbnN0ZWFkIG9mIHJldHJ5aW5nXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbnVtVHJpZXMgKz0gMTtcbiAgICAgICAgICAgICAgICBpZiAobnVtVHJpZXMgPCBtYXhUcmllcykge1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCByZXNwb25zZS5yZWFkQm9keSgpO1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCB0aGlzLl9wZXJmb3JtRXhwb25lbnRpYWxCYWNrb2ZmKG51bVRyaWVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IHdoaWxlIChudW1UcmllcyA8IG1heFRyaWVzKTtcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE5lZWRzIHRvIGJlIGNhbGxlZCBpZiBrZWVwQWxpdmUgaXMgc2V0IHRvIHRydWUgaW4gcmVxdWVzdCBvcHRpb25zLlxuICAgICAqL1xuICAgIGRpc3Bvc2UoKSB7XG4gICAgICAgIGlmICh0aGlzLl9hZ2VudCkge1xuICAgICAgICAgICAgdGhpcy5fYWdlbnQuZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2Rpc3Bvc2VkID0gdHJ1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmF3IHJlcXVlc3QuXG4gICAgICogQHBhcmFtIGluZm9cbiAgICAgKiBAcGFyYW0gZGF0YVxuICAgICAqL1xuICAgIHJlcXVlc3RSYXcoaW5mbywgZGF0YSkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBjYWxsYmFja0ZvclJlc3VsdChlcnIsIHJlcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghcmVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBgZXJyYCBpcyBub3QgcGFzc2VkLCB0aGVuIGByZXNgIG11c3QgYmUgcGFzc2VkLlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignVW5rbm93biBlcnJvcicpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnJlcXVlc3RSYXdXaXRoQ2FsbGJhY2soaW5mbywgZGF0YSwgY2FsbGJhY2tGb3JSZXN1bHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSYXcgcmVxdWVzdCB3aXRoIGNhbGxiYWNrLlxuICAgICAqIEBwYXJhbSBpbmZvXG4gICAgICogQHBhcmFtIGRhdGFcbiAgICAgKiBAcGFyYW0gb25SZXN1bHRcbiAgICAgKi9cbiAgICByZXF1ZXN0UmF3V2l0aENhbGxiYWNrKGluZm8sIGRhdGEsIG9uUmVzdWx0KSB7XG4gICAgICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmICghaW5mby5vcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgICAgICAgICAgICBpbmZvLm9wdGlvbnMuaGVhZGVycyA9IHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW5mby5vcHRpb25zLmhlYWRlcnNbJ0NvbnRlbnQtTGVuZ3RoJ10gPSBCdWZmZXIuYnl0ZUxlbmd0aChkYXRhLCAndXRmOCcpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBjYWxsYmFja0NhbGxlZCA9IGZhbHNlO1xuICAgICAgICBmdW5jdGlvbiBoYW5kbGVSZXN1bHQoZXJyLCByZXMpIHtcbiAgICAgICAgICAgIGlmICghY2FsbGJhY2tDYWxsZWQpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFja0NhbGxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgb25SZXN1bHQoZXJyLCByZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlcSA9IGluZm8uaHR0cE1vZHVsZS5yZXF1ZXN0KGluZm8ub3B0aW9ucywgKG1zZykgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzID0gbmV3IEh0dHBDbGllbnRSZXNwb25zZShtc2cpO1xuICAgICAgICAgICAgaGFuZGxlUmVzdWx0KHVuZGVmaW5lZCwgcmVzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCBzb2NrZXQ7XG4gICAgICAgIHJlcS5vbignc29ja2V0Jywgc29jayA9PiB7XG4gICAgICAgICAgICBzb2NrZXQgPSBzb2NrO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gSWYgd2UgZXZlciBnZXQgZGlzY29ubmVjdGVkLCB3ZSB3YW50IHRoZSBzb2NrZXQgdG8gdGltZW91dCBldmVudHVhbGx5XG4gICAgICAgIHJlcS5zZXRUaW1lb3V0KHRoaXMuX3NvY2tldFRpbWVvdXQgfHwgMyAqIDYwMDAwLCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoc29ja2V0KSB7XG4gICAgICAgICAgICAgICAgc29ja2V0LmVuZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaGFuZGxlUmVzdWx0KG5ldyBFcnJvcihgUmVxdWVzdCB0aW1lb3V0OiAke2luZm8ub3B0aW9ucy5wYXRofWApKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJlcS5vbignZXJyb3InLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAvLyBlcnIgaGFzIHN0YXR1c0NvZGUgcHJvcGVydHlcbiAgICAgICAgICAgIC8vIHJlcyBzaG91bGQgaGF2ZSBoZWFkZXJzXG4gICAgICAgICAgICBoYW5kbGVSZXN1bHQoZXJyKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChkYXRhICYmIHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmVxLndyaXRlKGRhdGEsICd1dGY4Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRhdGEgJiYgdHlwZW9mIGRhdGEgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBkYXRhLm9uKCdjbG9zZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXEuZW5kKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGRhdGEucGlwZShyZXEpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVxLmVuZCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldHMgYW4gaHR0cCBhZ2VudC4gVGhpcyBmdW5jdGlvbiBpcyB1c2VmdWwgd2hlbiB5b3UgbmVlZCBhbiBodHRwIGFnZW50IHRoYXQgaGFuZGxlc1xuICAgICAqIHJvdXRpbmcgdGhyb3VnaCBhIHByb3h5IHNlcnZlciAtIGRlcGVuZGluZyB1cG9uIHRoZSB1cmwgYW5kIHByb3h5IGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiAgICAgKiBAcGFyYW0gc2VydmVyVXJsICBUaGUgc2VydmVyIFVSTCB3aGVyZSB0aGUgcmVxdWVzdCB3aWxsIGJlIHNlbnQuIEZvciBleGFtcGxlLCBodHRwczovL2FwaS5naXRodWIuY29tXG4gICAgICovXG4gICAgZ2V0QWdlbnQoc2VydmVyVXJsKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFVybCA9IG5ldyBVUkwoc2VydmVyVXJsKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldEFnZW50KHBhcnNlZFVybCk7XG4gICAgfVxuICAgIGdldEFnZW50RGlzcGF0Y2hlcihzZXJ2ZXJVcmwpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkVXJsID0gbmV3IFVSTChzZXJ2ZXJVcmwpO1xuICAgICAgICBjb25zdCBwcm94eVVybCA9IHBtLmdldFByb3h5VXJsKHBhcnNlZFVybCk7XG4gICAgICAgIGNvbnN0IHVzZVByb3h5ID0gcHJveHlVcmwgJiYgcHJveHlVcmwuaG9zdG5hbWU7XG4gICAgICAgIGlmICghdXNlUHJveHkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0UHJveHlBZ2VudERpc3BhdGNoZXIocGFyc2VkVXJsLCBwcm94eVVybCk7XG4gICAgfVxuICAgIF9wcmVwYXJlUmVxdWVzdChtZXRob2QsIHJlcXVlc3RVcmwsIGhlYWRlcnMpIHtcbiAgICAgICAgY29uc3QgaW5mbyA9IHt9O1xuICAgICAgICBpbmZvLnBhcnNlZFVybCA9IHJlcXVlc3RVcmw7XG4gICAgICAgIGNvbnN0IHVzaW5nU3NsID0gaW5mby5wYXJzZWRVcmwucHJvdG9jb2wgPT09ICdodHRwczonO1xuICAgICAgICBpbmZvLmh0dHBNb2R1bGUgPSB1c2luZ1NzbCA/IGh0dHBzIDogaHR0cDtcbiAgICAgICAgY29uc3QgZGVmYXVsdFBvcnQgPSB1c2luZ1NzbCA/IDQ0MyA6IDgwO1xuICAgICAgICBpbmZvLm9wdGlvbnMgPSB7fTtcbiAgICAgICAgaW5mby5vcHRpb25zLmhvc3QgPSBpbmZvLnBhcnNlZFVybC5ob3N0bmFtZTtcbiAgICAgICAgaW5mby5vcHRpb25zLnBvcnQgPSBpbmZvLnBhcnNlZFVybC5wb3J0XG4gICAgICAgICAgICA/IHBhcnNlSW50KGluZm8ucGFyc2VkVXJsLnBvcnQpXG4gICAgICAgICAgICA6IGRlZmF1bHRQb3J0O1xuICAgICAgICBpbmZvLm9wdGlvbnMucGF0aCA9XG4gICAgICAgICAgICAoaW5mby5wYXJzZWRVcmwucGF0aG5hbWUgfHwgJycpICsgKGluZm8ucGFyc2VkVXJsLnNlYXJjaCB8fCAnJyk7XG4gICAgICAgIGluZm8ub3B0aW9ucy5tZXRob2QgPSBtZXRob2Q7XG4gICAgICAgIGluZm8ub3B0aW9ucy5oZWFkZXJzID0gdGhpcy5fbWVyZ2VIZWFkZXJzKGhlYWRlcnMpO1xuICAgICAgICBpZiAodGhpcy51c2VyQWdlbnQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaW5mby5vcHRpb25zLmhlYWRlcnNbJ3VzZXItYWdlbnQnXSA9IHRoaXMudXNlckFnZW50O1xuICAgICAgICB9XG4gICAgICAgIGluZm8ub3B0aW9ucy5hZ2VudCA9IHRoaXMuX2dldEFnZW50KGluZm8ucGFyc2VkVXJsKTtcbiAgICAgICAgLy8gZ2l2ZXMgaGFuZGxlcnMgYW4gb3Bwb3J0dW5pdHkgdG8gcGFydGljaXBhdGVcbiAgICAgICAgaWYgKHRoaXMuaGFuZGxlcnMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaGFuZGxlciBvZiB0aGlzLmhhbmRsZXJzKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlci5wcmVwYXJlUmVxdWVzdChpbmZvLm9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbmZvO1xuICAgIH1cbiAgICBfbWVyZ2VIZWFkZXJzKGhlYWRlcnMpIHtcbiAgICAgICAgaWYgKHRoaXMucmVxdWVzdE9wdGlvbnMgJiYgdGhpcy5yZXF1ZXN0T3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgbG93ZXJjYXNlS2V5cyh0aGlzLnJlcXVlc3RPcHRpb25zLmhlYWRlcnMpLCBsb3dlcmNhc2VLZXlzKGhlYWRlcnMgfHwge30pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG93ZXJjYXNlS2V5cyhoZWFkZXJzIHx8IHt9KTtcbiAgICB9XG4gICAgX2dldEV4aXN0aW5nT3JEZWZhdWx0SGVhZGVyKGFkZGl0aW9uYWxIZWFkZXJzLCBoZWFkZXIsIF9kZWZhdWx0KSB7XG4gICAgICAgIGxldCBjbGllbnRIZWFkZXI7XG4gICAgICAgIGlmICh0aGlzLnJlcXVlc3RPcHRpb25zICYmIHRoaXMucmVxdWVzdE9wdGlvbnMuaGVhZGVycykge1xuICAgICAgICAgICAgY2xpZW50SGVhZGVyID0gbG93ZXJjYXNlS2V5cyh0aGlzLnJlcXVlc3RPcHRpb25zLmhlYWRlcnMpW2hlYWRlcl07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFkZGl0aW9uYWxIZWFkZXJzW2hlYWRlcl0gfHwgY2xpZW50SGVhZGVyIHx8IF9kZWZhdWx0O1xuICAgIH1cbiAgICBfZ2V0QWdlbnQocGFyc2VkVXJsKSB7XG4gICAgICAgIGxldCBhZ2VudDtcbiAgICAgICAgY29uc3QgcHJveHlVcmwgPSBwbS5nZXRQcm94eVVybChwYXJzZWRVcmwpO1xuICAgICAgICBjb25zdCB1c2VQcm94eSA9IHByb3h5VXJsICYmIHByb3h5VXJsLmhvc3RuYW1lO1xuICAgICAgICBpZiAodGhpcy5fa2VlcEFsaXZlICYmIHVzZVByb3h5KSB7XG4gICAgICAgICAgICBhZ2VudCA9IHRoaXMuX3Byb3h5QWdlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF1c2VQcm94eSkge1xuICAgICAgICAgICAgYWdlbnQgPSB0aGlzLl9hZ2VudDtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiBhZ2VudCBpcyBhbHJlYWR5IGFzc2lnbmVkIHVzZSB0aGF0IGFnZW50LlxuICAgICAgICBpZiAoYWdlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBhZ2VudDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1c2luZ1NzbCA9IHBhcnNlZFVybC5wcm90b2NvbCA9PT0gJ2h0dHBzOic7XG4gICAgICAgIGxldCBtYXhTb2NrZXRzID0gMTAwO1xuICAgICAgICBpZiAodGhpcy5yZXF1ZXN0T3B0aW9ucykge1xuICAgICAgICAgICAgbWF4U29ja2V0cyA9IHRoaXMucmVxdWVzdE9wdGlvbnMubWF4U29ja2V0cyB8fCBodHRwLmdsb2JhbEFnZW50Lm1heFNvY2tldHM7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVGhpcyBpcyBgdXNlUHJveHlgIGFnYWluLCBidXQgd2UgbmVlZCB0byBjaGVjayBgcHJveHlVUmxgIGRpcmVjdGx5IGZvciBUeXBlU2NyaXB0cydzIGZsb3cgYW5hbHlzaXMuXG4gICAgICAgIGlmIChwcm94eVVybCAmJiBwcm94eVVybC5ob3N0bmFtZSkge1xuICAgICAgICAgICAgY29uc3QgYWdlbnRPcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIG1heFNvY2tldHMsXG4gICAgICAgICAgICAgICAga2VlcEFsaXZlOiB0aGlzLl9rZWVwQWxpdmUsXG4gICAgICAgICAgICAgICAgcHJveHk6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgKChwcm94eVVybC51c2VybmFtZSB8fCBwcm94eVVybC5wYXNzd29yZCkgJiYge1xuICAgICAgICAgICAgICAgICAgICBwcm94eUF1dGg6IGAke3Byb3h5VXJsLnVzZXJuYW1lfToke3Byb3h5VXJsLnBhc3N3b3JkfWBcbiAgICAgICAgICAgICAgICB9KSksIHsgaG9zdDogcHJveHlVcmwuaG9zdG5hbWUsIHBvcnQ6IHByb3h5VXJsLnBvcnQgfSlcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBsZXQgdHVubmVsQWdlbnQ7XG4gICAgICAgICAgICBjb25zdCBvdmVySHR0cHMgPSBwcm94eVVybC5wcm90b2NvbCA9PT0gJ2h0dHBzOic7XG4gICAgICAgICAgICBpZiAodXNpbmdTc2wpIHtcbiAgICAgICAgICAgICAgICB0dW5uZWxBZ2VudCA9IG92ZXJIdHRwcyA/IHR1bm5lbC5odHRwc092ZXJIdHRwcyA6IHR1bm5lbC5odHRwc092ZXJIdHRwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdHVubmVsQWdlbnQgPSBvdmVySHR0cHMgPyB0dW5uZWwuaHR0cE92ZXJIdHRwcyA6IHR1bm5lbC5odHRwT3Zlckh0dHA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhZ2VudCA9IHR1bm5lbEFnZW50KGFnZW50T3B0aW9ucyk7XG4gICAgICAgICAgICB0aGlzLl9wcm94eUFnZW50ID0gYWdlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgdHVubmVsaW5nIGFnZW50IGlzbid0IGFzc2lnbmVkIGNyZWF0ZSBhIG5ldyBhZ2VudFxuICAgICAgICBpZiAoIWFnZW50KSB7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0geyBrZWVwQWxpdmU6IHRoaXMuX2tlZXBBbGl2ZSwgbWF4U29ja2V0cyB9O1xuICAgICAgICAgICAgYWdlbnQgPSB1c2luZ1NzbCA/IG5ldyBodHRwcy5BZ2VudChvcHRpb25zKSA6IG5ldyBodHRwLkFnZW50KG9wdGlvbnMpO1xuICAgICAgICAgICAgdGhpcy5fYWdlbnQgPSBhZ2VudDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodXNpbmdTc2wgJiYgdGhpcy5faWdub3JlU3NsRXJyb3IpIHtcbiAgICAgICAgICAgIC8vIHdlIGRvbid0IHdhbnQgdG8gc2V0IE5PREVfVExTX1JFSkVDVF9VTkFVVEhPUklaRUQ9MCBzaW5jZSB0aGF0IHdpbGwgYWZmZWN0IHJlcXVlc3QgZm9yIGVudGlyZSBwcm9jZXNzXG4gICAgICAgICAgICAvLyBodHRwLlJlcXVlc3RPcHRpb25zIGRvZXNuJ3QgZXhwb3NlIGEgd2F5IHRvIG1vZGlmeSBSZXF1ZXN0T3B0aW9ucy5hZ2VudC5vcHRpb25zXG4gICAgICAgICAgICAvLyB3ZSBoYXZlIHRvIGNhc3QgaXQgdG8gYW55IGFuZCBjaGFuZ2UgaXQgZGlyZWN0bHlcbiAgICAgICAgICAgIGFnZW50Lm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKGFnZW50Lm9wdGlvbnMgfHwge30sIHtcbiAgICAgICAgICAgICAgICByZWplY3RVbmF1dGhvcml6ZWQ6IGZhbHNlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWdlbnQ7XG4gICAgfVxuICAgIF9nZXRQcm94eUFnZW50RGlzcGF0Y2hlcihwYXJzZWRVcmwsIHByb3h5VXJsKSB7XG4gICAgICAgIGxldCBwcm94eUFnZW50O1xuICAgICAgICBpZiAodGhpcy5fa2VlcEFsaXZlKSB7XG4gICAgICAgICAgICBwcm94eUFnZW50ID0gdGhpcy5fcHJveHlBZ2VudERpc3BhdGNoZXI7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgYWdlbnQgaXMgYWxyZWFkeSBhc3NpZ25lZCB1c2UgdGhhdCBhZ2VudC5cbiAgICAgICAgaWYgKHByb3h5QWdlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBwcm94eUFnZW50O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHVzaW5nU3NsID0gcGFyc2VkVXJsLnByb3RvY29sID09PSAnaHR0cHM6JztcbiAgICAgICAgcHJveHlBZ2VudCA9IG5ldyB1bmRpY2lfMS5Qcm94eUFnZW50KE9iamVjdC5hc3NpZ24oeyB1cmk6IHByb3h5VXJsLmhyZWYsIHBpcGVsaW5pbmc6ICF0aGlzLl9rZWVwQWxpdmUgPyAwIDogMSB9LCAoKHByb3h5VXJsLnVzZXJuYW1lIHx8IHByb3h5VXJsLnBhc3N3b3JkKSAmJiB7XG4gICAgICAgICAgICB0b2tlbjogYEJhc2ljICR7QnVmZmVyLmZyb20oYCR7cHJveHlVcmwudXNlcm5hbWV9OiR7cHJveHlVcmwucGFzc3dvcmR9YCkudG9TdHJpbmcoJ2Jhc2U2NCcpfWBcbiAgICAgICAgfSkpKTtcbiAgICAgICAgdGhpcy5fcHJveHlBZ2VudERpc3BhdGNoZXIgPSBwcm94eUFnZW50O1xuICAgICAgICBpZiAodXNpbmdTc2wgJiYgdGhpcy5faWdub3JlU3NsRXJyb3IpIHtcbiAgICAgICAgICAgIC8vIHdlIGRvbid0IHdhbnQgdG8gc2V0IE5PREVfVExTX1JFSkVDVF9VTkFVVEhPUklaRUQ9MCBzaW5jZSB0aGF0IHdpbGwgYWZmZWN0IHJlcXVlc3QgZm9yIGVudGlyZSBwcm9jZXNzXG4gICAgICAgICAgICAvLyBodHRwLlJlcXVlc3RPcHRpb25zIGRvZXNuJ3QgZXhwb3NlIGEgd2F5IHRvIG1vZGlmeSBSZXF1ZXN0T3B0aW9ucy5hZ2VudC5vcHRpb25zXG4gICAgICAgICAgICAvLyB3ZSBoYXZlIHRvIGNhc3QgaXQgdG8gYW55IGFuZCBjaGFuZ2UgaXQgZGlyZWN0bHlcbiAgICAgICAgICAgIHByb3h5QWdlbnQub3B0aW9ucyA9IE9iamVjdC5hc3NpZ24ocHJveHlBZ2VudC5vcHRpb25zLnJlcXVlc3RUbHMgfHwge30sIHtcbiAgICAgICAgICAgICAgICByZWplY3RVbmF1dGhvcml6ZWQ6IGZhbHNlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJveHlBZ2VudDtcbiAgICB9XG4gICAgX3BlcmZvcm1FeHBvbmVudGlhbEJhY2tvZmYocmV0cnlOdW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHJ5TnVtYmVyID0gTWF0aC5taW4oRXhwb25lbnRpYWxCYWNrb2ZmQ2VpbGluZywgcmV0cnlOdW1iZXIpO1xuICAgICAgICAgICAgY29uc3QgbXMgPSBFeHBvbmVudGlhbEJhY2tvZmZUaW1lU2xpY2UgKiBNYXRoLnBvdygyLCByZXRyeU51bWJlcik7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KCgpID0+IHJlc29sdmUoKSwgbXMpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIF9wcm9jZXNzUmVzcG9uc2UocmVzLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXR1c0NvZGUgPSByZXMubWVzc2FnZS5zdGF0dXNDb2RlIHx8IDA7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1c0NvZGUsXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge31cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIC8vIG5vdCBmb3VuZCBsZWFkcyB0byBudWxsIG9iaiByZXR1cm5lZFxuICAgICAgICAgICAgICAgIGlmIChzdGF0dXNDb2RlID09PSBIdHRwQ29kZXMuTm90Rm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGdldCB0aGUgcmVzdWx0IGZyb20gdGhlIGJvZHlcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBkYXRlVGltZURlc2VyaWFsaXplcihrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhID0gbmV3IERhdGUodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc05hTihhLnZhbHVlT2YoKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCBvYmo7XG4gICAgICAgICAgICAgICAgbGV0IGNvbnRlbnRzO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzID0geWllbGQgcmVzLnJlYWRCb2R5KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb250ZW50cyAmJiBjb250ZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmRlc2VyaWFsaXplRGF0ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmogPSBKU09OLnBhcnNlKGNvbnRlbnRzLCBkYXRlVGltZURlc2VyaWFsaXplcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmogPSBKU09OLnBhcnNlKGNvbnRlbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnJlc3VsdCA9IG9iajtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5oZWFkZXJzID0gcmVzLm1lc3NhZ2UuaGVhZGVycztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAvLyBJbnZhbGlkIHJlc291cmNlIChjb250ZW50cyBub3QganNvbik7ICBsZWF2aW5nIHJlc3VsdCBvYmogbnVsbFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBub3RlIHRoYXQgM3h4IHJlZGlyZWN0cyBhcmUgaGFuZGxlZCBieSB0aGUgaHR0cCBsYXllci5cbiAgICAgICAgICAgICAgICBpZiAoc3RhdHVzQ29kZSA+IDI5OSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgbXNnO1xuICAgICAgICAgICAgICAgICAgICAvLyBpZiBleGNlcHRpb24vZXJyb3IgaW4gYm9keSwgYXR0ZW1wdCB0byBnZXQgYmV0dGVyIGVycm9yXG4gICAgICAgICAgICAgICAgICAgIGlmIChvYmogJiYgb2JqLm1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9IG9iai5tZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbnRlbnRzICYmIGNvbnRlbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGl0IG1heSBiZSB0aGUgY2FzZSB0aGF0IHRoZSBleGNlcHRpb24gaXMgaW4gdGhlIGJvZHkgbWVzc2FnZSBhcyBzdHJpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9IGNvbnRlbnRzO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gYEZhaWxlZCByZXF1ZXN0OiAoJHtzdGF0dXNDb2RlfSlgO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVyciA9IG5ldyBIdHRwQ2xpZW50RXJyb3IobXNnLCBzdGF0dXNDb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgZXJyLnJlc3VsdCA9IHJlc3BvbnNlLnJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuSHR0cENsaWVudCA9IEh0dHBDbGllbnQ7XG5jb25zdCBsb3dlcmNhc2VLZXlzID0gKG9iaikgPT4gT2JqZWN0LmtleXMob2JqKS5yZWR1Y2UoKGMsIGspID0+ICgoY1trLnRvTG93ZXJDYXNlKCldID0gb2JqW2tdKSwgYyksIHt9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUGVyc29uYWxBY2Nlc3NUb2tlbkNyZWRlbnRpYWxIYW5kbGVyID0gZXhwb3J0cy5CZWFyZXJDcmVkZW50aWFsSGFuZGxlciA9IGV4cG9ydHMuQmFzaWNDcmVkZW50aWFsSGFuZGxlciA9IHZvaWQgMDtcbmNsYXNzIEJhc2ljQ3JlZGVudGlhbEhhbmRsZXIge1xuICAgIGNvbnN0cnVjdG9yKHVzZXJuYW1lLCBwYXNzd29yZCkge1xuICAgICAgICB0aGlzLnVzZXJuYW1lID0gdXNlcm5hbWU7XG4gICAgICAgIHRoaXMucGFzc3dvcmQgPSBwYXNzd29yZDtcbiAgICB9XG4gICAgcHJlcGFyZVJlcXVlc3Qob3B0aW9ucykge1xuICAgICAgICBpZiAoIW9wdGlvbnMuaGVhZGVycykge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ1RoZSByZXF1ZXN0IGhhcyBubyBoZWFkZXJzJyk7XG4gICAgICAgIH1cbiAgICAgICAgb3B0aW9ucy5oZWFkZXJzWydBdXRob3JpemF0aW9uJ10gPSBgQmFzaWMgJHtCdWZmZXIuZnJvbShgJHt0aGlzLnVzZXJuYW1lfToke3RoaXMucGFzc3dvcmR9YCkudG9TdHJpbmcoJ2Jhc2U2NCcpfWA7XG4gICAgfVxuICAgIC8vIFRoaXMgaGFuZGxlciBjYW5ub3QgaGFuZGxlIDQwMVxuICAgIGNhbkhhbmRsZUF1dGhlbnRpY2F0aW9uKCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGhhbmRsZUF1dGhlbnRpY2F0aW9uKCkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdub3QgaW1wbGVtZW50ZWQnKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0cy5CYXNpY0NyZWRlbnRpYWxIYW5kbGVyID0gQmFzaWNDcmVkZW50aWFsSGFuZGxlcjtcbmNsYXNzIEJlYXJlckNyZWRlbnRpYWxIYW5kbGVyIHtcbiAgICBjb25zdHJ1Y3Rvcih0b2tlbikge1xuICAgICAgICB0aGlzLnRva2VuID0gdG9rZW47XG4gICAgfVxuICAgIC8vIGN1cnJlbnRseSBpbXBsZW1lbnRzIHByZS1hdXRob3JpemF0aW9uXG4gICAgLy8gVE9ETzogc3VwcG9ydCBwcmVBdXRoID0gZmFsc2Ugd2hlcmUgaXQgaG9va3Mgb24gNDAxXG4gICAgcHJlcGFyZVJlcXVlc3Qob3B0aW9ucykge1xuICAgICAgICBpZiAoIW9wdGlvbnMuaGVhZGVycykge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ1RoZSByZXF1ZXN0IGhhcyBubyBoZWFkZXJzJyk7XG4gICAgICAgIH1cbiAgICAgICAgb3B0aW9ucy5oZWFkZXJzWydBdXRob3JpemF0aW9uJ10gPSBgQmVhcmVyICR7dGhpcy50b2tlbn1gO1xuICAgIH1cbiAgICAvLyBUaGlzIGhhbmRsZXIgY2Fubm90IGhhbmRsZSA0MDFcbiAgICBjYW5IYW5kbGVBdXRoZW50aWNhdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBoYW5kbGVBdXRoZW50aWNhdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbm90IGltcGxlbWVudGVkJyk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuQmVhcmVyQ3JlZGVudGlhbEhhbmRsZXIgPSBCZWFyZXJDcmVkZW50aWFsSGFuZGxlcjtcbmNsYXNzIFBlcnNvbmFsQWNjZXNzVG9rZW5DcmVkZW50aWFsSGFuZGxlciB7XG4gICAgY29uc3RydWN0b3IodG9rZW4pIHtcbiAgICAgICAgdGhpcy50b2tlbiA9IHRva2VuO1xuICAgIH1cbiAgICAvLyBjdXJyZW50bHkgaW1wbGVtZW50cyBwcmUtYXV0aG9yaXphdGlvblxuICAgIC8vIFRPRE86IHN1cHBvcnQgcHJlQXV0aCA9IGZhbHNlIHdoZXJlIGl0IGhvb2tzIG9uIDQwMVxuICAgIHByZXBhcmVSZXF1ZXN0KG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKCFvcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCdUaGUgcmVxdWVzdCBoYXMgbm8gaGVhZGVycycpO1xuICAgICAgICB9XG4gICAgICAgIG9wdGlvbnMuaGVhZGVyc1snQXV0aG9yaXphdGlvbiddID0gYEJhc2ljICR7QnVmZmVyLmZyb20oYFBBVDoke3RoaXMudG9rZW59YCkudG9TdHJpbmcoJ2Jhc2U2NCcpfWA7XG4gICAgfVxuICAgIC8vIFRoaXMgaGFuZGxlciBjYW5ub3QgaGFuZGxlIDQwMVxuICAgIGNhbkhhbmRsZUF1dGhlbnRpY2F0aW9uKCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGhhbmRsZUF1dGhlbnRpY2F0aW9uKCkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdub3QgaW1wbGVtZW50ZWQnKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0cy5QZXJzb25hbEFjY2Vzc1Rva2VuQ3JlZGVudGlhbEhhbmRsZXIgPSBQZXJzb25hbEFjY2Vzc1Rva2VuQ3JlZGVudGlhbEhhbmRsZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hdXRoLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuT2lkY0NsaWVudCA9IHZvaWQgMDtcbmNvbnN0IGh0dHBfY2xpZW50XzEgPSByZXF1aXJlKFwiQGFjdGlvbnMvaHR0cC1jbGllbnRcIik7XG5jb25zdCBhdXRoXzEgPSByZXF1aXJlKFwiQGFjdGlvbnMvaHR0cC1jbGllbnQvbGliL2F1dGhcIik7XG5jb25zdCBjb3JlXzEgPSByZXF1aXJlKFwiLi9jb3JlXCIpO1xuY2xhc3MgT2lkY0NsaWVudCB7XG4gICAgc3RhdGljIGNyZWF0ZUh0dHBDbGllbnQoYWxsb3dSZXRyeSA9IHRydWUsIG1heFJldHJ5ID0gMTApIHtcbiAgICAgICAgY29uc3QgcmVxdWVzdE9wdGlvbnMgPSB7XG4gICAgICAgICAgICBhbGxvd1JldHJpZXM6IGFsbG93UmV0cnksXG4gICAgICAgICAgICBtYXhSZXRyaWVzOiBtYXhSZXRyeVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gbmV3IGh0dHBfY2xpZW50XzEuSHR0cENsaWVudCgnYWN0aW9ucy9vaWRjLWNsaWVudCcsIFtuZXcgYXV0aF8xLkJlYXJlckNyZWRlbnRpYWxIYW5kbGVyKE9pZGNDbGllbnQuZ2V0UmVxdWVzdFRva2VuKCkpXSwgcmVxdWVzdE9wdGlvbnMpO1xuICAgIH1cbiAgICBzdGF0aWMgZ2V0UmVxdWVzdFRva2VuKCkge1xuICAgICAgICBjb25zdCB0b2tlbiA9IHByb2Nlc3MuZW52WydBQ1RJT05TX0lEX1RPS0VOX1JFUVVFU1RfVE9LRU4nXTtcbiAgICAgICAgaWYgKCF0b2tlbikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gZ2V0IEFDVElPTlNfSURfVE9LRU5fUkVRVUVTVF9UT0tFTiBlbnYgdmFyaWFibGUnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgfVxuICAgIHN0YXRpYyBnZXRJRFRva2VuVXJsKCkge1xuICAgICAgICBjb25zdCBydW50aW1lVXJsID0gcHJvY2Vzcy5lbnZbJ0FDVElPTlNfSURfVE9LRU5fUkVRVUVTVF9VUkwnXTtcbiAgICAgICAgaWYgKCFydW50aW1lVXJsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBnZXQgQUNUSU9OU19JRF9UT0tFTl9SRVFVRVNUX1VSTCBlbnYgdmFyaWFibGUnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcnVudGltZVVybDtcbiAgICB9XG4gICAgc3RhdGljIGdldENhbGwoaWRfdG9rZW5fdXJsKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGh0dHBjbGllbnQgPSBPaWRjQ2xpZW50LmNyZWF0ZUh0dHBDbGllbnQoKTtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IHlpZWxkIGh0dHBjbGllbnRcbiAgICAgICAgICAgICAgICAuZ2V0SnNvbihpZF90b2tlbl91cmwpXG4gICAgICAgICAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBnZXQgSUQgVG9rZW4uIFxcbiBcbiAgICAgICAgRXJyb3IgQ29kZSA6ICR7ZXJyb3Iuc3RhdHVzQ29kZX1cXG4gXG4gICAgICAgIEVycm9yIE1lc3NhZ2U6ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgaWRfdG9rZW4gPSAoX2EgPSByZXMucmVzdWx0KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWU7XG4gICAgICAgICAgICBpZiAoIWlkX3Rva2VuKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXNwb25zZSBqc29uIGJvZHkgZG8gbm90IGhhdmUgSUQgVG9rZW4gZmllbGQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBpZF90b2tlbjtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHN0YXRpYyBnZXRJRFRva2VuKGF1ZGllbmNlKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIC8vIE5ldyBJRCBUb2tlbiBpcyByZXF1ZXN0ZWQgZnJvbSBhY3Rpb24gc2VydmljZVxuICAgICAgICAgICAgICAgIGxldCBpZF90b2tlbl91cmwgPSBPaWRjQ2xpZW50LmdldElEVG9rZW5VcmwoKTtcbiAgICAgICAgICAgICAgICBpZiAoYXVkaWVuY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5jb2RlZEF1ZGllbmNlID0gZW5jb2RlVVJJQ29tcG9uZW50KGF1ZGllbmNlKTtcbiAgICAgICAgICAgICAgICAgICAgaWRfdG9rZW5fdXJsID0gYCR7aWRfdG9rZW5fdXJsfSZhdWRpZW5jZT0ke2VuY29kZWRBdWRpZW5jZX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAoMCwgY29yZV8xLmRlYnVnKShgSUQgdG9rZW4gdXJsIGlzICR7aWRfdG9rZW5fdXJsfWApO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlkX3Rva2VuID0geWllbGQgT2lkY0NsaWVudC5nZXRDYWxsKGlkX3Rva2VuX3VybCk7XG4gICAgICAgICAgICAgICAgKDAsIGNvcmVfMS5zZXRTZWNyZXQpKGlkX3Rva2VuKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWRfdG9rZW47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIG1lc3NhZ2U6ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0cy5PaWRjQ2xpZW50ID0gT2lkY0NsaWVudDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW9pZGMtdXRpbHMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5zdW1tYXJ5ID0gZXhwb3J0cy5tYXJrZG93blN1bW1hcnkgPSBleHBvcnRzLlNVTU1BUllfRE9DU19VUkwgPSBleHBvcnRzLlNVTU1BUllfRU5WX1ZBUiA9IHZvaWQgMDtcbmNvbnN0IG9zXzEgPSByZXF1aXJlKFwib3NcIik7XG5jb25zdCBmc18xID0gcmVxdWlyZShcImZzXCIpO1xuY29uc3QgeyBhY2Nlc3MsIGFwcGVuZEZpbGUsIHdyaXRlRmlsZSB9ID0gZnNfMS5wcm9taXNlcztcbmV4cG9ydHMuU1VNTUFSWV9FTlZfVkFSID0gJ0dJVEhVQl9TVEVQX1NVTU1BUlknO1xuZXhwb3J0cy5TVU1NQVJZX0RPQ1NfVVJMID0gJ2h0dHBzOi8vZG9jcy5naXRodWIuY29tL2FjdGlvbnMvdXNpbmctd29ya2Zsb3dzL3dvcmtmbG93LWNvbW1hbmRzLWZvci1naXRodWItYWN0aW9ucyNhZGRpbmctYS1qb2Itc3VtbWFyeSc7XG5jbGFzcyBTdW1tYXJ5IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5fYnVmZmVyID0gJyc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEZpbmRzIHRoZSBzdW1tYXJ5IGZpbGUgcGF0aCBmcm9tIHRoZSBlbnZpcm9ubWVudCwgcmVqZWN0cyBpZiBlbnYgdmFyIGlzIG5vdCBmb3VuZCBvciBmaWxlIGRvZXMgbm90IGV4aXN0XG4gICAgICogQWxzbyBjaGVja3Mgci93IHBlcm1pc3Npb25zLlxuICAgICAqXG4gICAgICogQHJldHVybnMgc3RlcCBzdW1tYXJ5IGZpbGUgcGF0aFxuICAgICAqL1xuICAgIGZpbGVQYXRoKCkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2ZpbGVQYXRoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbGVQYXRoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcGF0aEZyb21FbnYgPSBwcm9jZXNzLmVudltleHBvcnRzLlNVTU1BUllfRU5WX1ZBUl07XG4gICAgICAgICAgICBpZiAoIXBhdGhGcm9tRW52KSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gZmluZCBlbnZpcm9ubWVudCB2YXJpYWJsZSBmb3IgJCR7ZXhwb3J0cy5TVU1NQVJZX0VOVl9WQVJ9LiBDaGVjayBpZiB5b3VyIHJ1bnRpbWUgZW52aXJvbm1lbnQgc3VwcG9ydHMgam9iIHN1bW1hcmllcy5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgeWllbGQgYWNjZXNzKHBhdGhGcm9tRW52LCBmc18xLmNvbnN0YW50cy5SX09LIHwgZnNfMS5jb25zdGFudHMuV19PSyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoX2EpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBhY2Nlc3Mgc3VtbWFyeSBmaWxlOiAnJHtwYXRoRnJvbUVudn0nLiBDaGVjayBpZiB0aGUgZmlsZSBoYXMgY29ycmVjdCByZWFkL3dyaXRlIHBlcm1pc3Npb25zLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fZmlsZVBhdGggPSBwYXRoRnJvbUVudjtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9maWxlUGF0aDtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyYXBzIGNvbnRlbnQgaW4gYW4gSFRNTCB0YWcsIGFkZGluZyBhbnkgSFRNTCBhdHRyaWJ1dGVzXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGFnIEhUTUwgdGFnIHRvIHdyYXBcbiAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGx9IGNvbnRlbnQgY29udGVudCB3aXRoaW4gdGhlIHRhZ1xuICAgICAqIEBwYXJhbSB7W2F0dHJpYnV0ZTogc3RyaW5nXTogc3RyaW5nfSBhdHRycyBrZXktdmFsdWUgbGlzdCBvZiBIVE1MIGF0dHJpYnV0ZXMgdG8gYWRkXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBjb250ZW50IHdyYXBwZWQgaW4gSFRNTCBlbGVtZW50XG4gICAgICovXG4gICAgd3JhcCh0YWcsIGNvbnRlbnQsIGF0dHJzID0ge30pIHtcbiAgICAgICAgY29uc3QgaHRtbEF0dHJzID0gT2JqZWN0LmVudHJpZXMoYXR0cnMpXG4gICAgICAgICAgICAubWFwKChba2V5LCB2YWx1ZV0pID0+IGAgJHtrZXl9PVwiJHt2YWx1ZX1cImApXG4gICAgICAgICAgICAuam9pbignJyk7XG4gICAgICAgIGlmICghY29udGVudCkge1xuICAgICAgICAgICAgcmV0dXJuIGA8JHt0YWd9JHtodG1sQXR0cnN9PmA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGA8JHt0YWd9JHtodG1sQXR0cnN9PiR7Y29udGVudH08LyR7dGFnfT5gO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXcml0ZXMgdGV4dCBpbiB0aGUgYnVmZmVyIHRvIHRoZSBzdW1tYXJ5IGJ1ZmZlciBmaWxlIGFuZCBlbXB0aWVzIGJ1ZmZlci4gV2lsbCBhcHBlbmQgYnkgZGVmYXVsdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U3VtbWFyeVdyaXRlT3B0aW9uc30gW29wdGlvbnNdIChvcHRpb25hbCkgb3B0aW9ucyBmb3Igd3JpdGUgb3BlcmF0aW9uXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZTxTdW1tYXJ5Pn0gc3VtbWFyeSBpbnN0YW5jZVxuICAgICAqL1xuICAgIHdyaXRlKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGNvbnN0IG92ZXJ3cml0ZSA9ICEhKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5vdmVyd3JpdGUpO1xuICAgICAgICAgICAgY29uc3QgZmlsZVBhdGggPSB5aWVsZCB0aGlzLmZpbGVQYXRoKCk7XG4gICAgICAgICAgICBjb25zdCB3cml0ZUZ1bmMgPSBvdmVyd3JpdGUgPyB3cml0ZUZpbGUgOiBhcHBlbmRGaWxlO1xuICAgICAgICAgICAgeWllbGQgd3JpdGVGdW5jKGZpbGVQYXRoLCB0aGlzLl9idWZmZXIsIHsgZW5jb2Rpbmc6ICd1dGY4JyB9KTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVtcHR5QnVmZmVyKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDbGVhcnMgdGhlIHN1bW1hcnkgYnVmZmVyIGFuZCB3aXBlcyB0aGUgc3VtbWFyeSBmaWxlXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7U3VtbWFyeX0gc3VtbWFyeSBpbnN0YW5jZVxuICAgICAqL1xuICAgIGNsZWFyKCkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW1wdHlCdWZmZXIoKS53cml0ZSh7IG92ZXJ3cml0ZTogdHJ1ZSB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgc3VtbWFyeSBidWZmZXIgYXMgYSBzdHJpbmdcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IHN0cmluZyBvZiBzdW1tYXJ5IGJ1ZmZlclxuICAgICAqL1xuICAgIHN0cmluZ2lmeSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlcjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSWYgdGhlIHN1bW1hcnkgYnVmZmVyIGlzIGVtcHR5XG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVufSB0cnVlIGlmIHRoZSBidWZmZXIgaXMgZW1wdHlcbiAgICAgKi9cbiAgICBpc0VtcHR5QnVmZmVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYnVmZmVyLmxlbmd0aCA9PT0gMDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVzZXRzIHRoZSBzdW1tYXJ5IGJ1ZmZlciB3aXRob3V0IHdyaXRpbmcgdG8gc3VtbWFyeSBmaWxlXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7U3VtbWFyeX0gc3VtbWFyeSBpbnN0YW5jZVxuICAgICAqL1xuICAgIGVtcHR5QnVmZmVyKCkge1xuICAgICAgICB0aGlzLl9idWZmZXIgPSAnJztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgcmF3IHRleHQgdG8gdGhlIHN1bW1hcnkgYnVmZmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCBjb250ZW50IHRvIGFkZFxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FkZEVPTD1mYWxzZV0gKG9wdGlvbmFsKSBhcHBlbmQgYW4gRU9MIHRvIHRoZSByYXcgdGV4dCAoZGVmYXVsdDogZmFsc2UpXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7U3VtbWFyeX0gc3VtbWFyeSBpbnN0YW5jZVxuICAgICAqL1xuICAgIGFkZFJhdyh0ZXh0LCBhZGRFT0wgPSBmYWxzZSkge1xuICAgICAgICB0aGlzLl9idWZmZXIgKz0gdGV4dDtcbiAgICAgICAgcmV0dXJuIGFkZEVPTCA/IHRoaXMuYWRkRU9MKCkgOiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIHRoZSBvcGVyYXRpbmcgc3lzdGVtLXNwZWNpZmljIGVuZC1vZi1saW5lIG1hcmtlciB0byB0aGUgYnVmZmVyXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7U3VtbWFyeX0gc3VtbWFyeSBpbnN0YW5jZVxuICAgICAqL1xuICAgIGFkZEVPTCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkUmF3KG9zXzEuRU9MKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhbiBIVE1MIGNvZGVibG9jayB0byB0aGUgc3VtbWFyeSBidWZmZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjb2RlIGNvbnRlbnQgdG8gcmVuZGVyIHdpdGhpbiBmZW5jZWQgY29kZSBibG9ja1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBsYW5nIChvcHRpb25hbCkgbGFuZ3VhZ2UgdG8gc3ludGF4IGhpZ2hsaWdodCBjb2RlXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7U3VtbWFyeX0gc3VtbWFyeSBpbnN0YW5jZVxuICAgICAqL1xuICAgIGFkZENvZGVCbG9jayhjb2RlLCBsYW5nKSB7XG4gICAgICAgIGNvbnN0IGF0dHJzID0gT2JqZWN0LmFzc2lnbih7fSwgKGxhbmcgJiYgeyBsYW5nIH0pKTtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMud3JhcCgncHJlJywgdGhpcy53cmFwKCdjb2RlJywgY29kZSksIGF0dHJzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkUmF3KGVsZW1lbnQpLmFkZEVPTCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGFuIEhUTUwgbGlzdCB0byB0aGUgc3VtbWFyeSBidWZmZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nW119IGl0ZW1zIGxpc3Qgb2YgaXRlbXMgdG8gcmVuZGVyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3JkZXJlZD1mYWxzZV0gKG9wdGlvbmFsKSBpZiB0aGUgcmVuZGVyZWQgbGlzdCBzaG91bGQgYmUgb3JkZXJlZCBvciBub3QgKGRlZmF1bHQ6IGZhbHNlKVxuICAgICAqXG4gICAgICogQHJldHVybnMge1N1bW1hcnl9IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBhZGRMaXN0KGl0ZW1zLCBvcmRlcmVkID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3QgdGFnID0gb3JkZXJlZCA/ICdvbCcgOiAndWwnO1xuICAgICAgICBjb25zdCBsaXN0SXRlbXMgPSBpdGVtcy5tYXAoaXRlbSA9PiB0aGlzLndyYXAoJ2xpJywgaXRlbSkpLmpvaW4oJycpO1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy53cmFwKHRhZywgbGlzdEl0ZW1zKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkUmF3KGVsZW1lbnQpLmFkZEVPTCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGFuIEhUTUwgdGFibGUgdG8gdGhlIHN1bW1hcnkgYnVmZmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N1bW1hcnlUYWJsZUNlbGxbXX0gcm93cyB0YWJsZSByb3dzXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7U3VtbWFyeX0gc3VtbWFyeSBpbnN0YW5jZVxuICAgICAqL1xuICAgIGFkZFRhYmxlKHJvd3MpIHtcbiAgICAgICAgY29uc3QgdGFibGVCb2R5ID0gcm93c1xuICAgICAgICAgICAgLm1hcChyb3cgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2VsbHMgPSByb3dcbiAgICAgICAgICAgICAgICAubWFwKGNlbGwgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY2VsbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMud3JhcCgndGQnLCBjZWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgeyBoZWFkZXIsIGRhdGEsIGNvbHNwYW4sIHJvd3NwYW4gfSA9IGNlbGw7XG4gICAgICAgICAgICAgICAgY29uc3QgdGFnID0gaGVhZGVyID8gJ3RoJyA6ICd0ZCc7XG4gICAgICAgICAgICAgICAgY29uc3QgYXR0cnMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIChjb2xzcGFuICYmIHsgY29sc3BhbiB9KSksIChyb3dzcGFuICYmIHsgcm93c3BhbiB9KSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMud3JhcCh0YWcsIGRhdGEsIGF0dHJzKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmpvaW4oJycpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMud3JhcCgndHInLCBjZWxscyk7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAuam9pbignJyk7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLndyYXAoJ3RhYmxlJywgdGFibGVCb2R5KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkUmF3KGVsZW1lbnQpLmFkZEVPTCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgY29sbGFwc2FibGUgSFRNTCBkZXRhaWxzIGVsZW1lbnQgdG8gdGhlIHN1bW1hcnkgYnVmZmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbGFiZWwgdGV4dCBmb3IgdGhlIGNsb3NlZCBzdGF0ZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50IGNvbGxhcHNhYmxlIGNvbnRlbnRcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtTdW1tYXJ5fSBzdW1tYXJ5IGluc3RhbmNlXG4gICAgICovXG4gICAgYWRkRGV0YWlscyhsYWJlbCwgY29udGVudCkge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy53cmFwKCdkZXRhaWxzJywgdGhpcy53cmFwKCdzdW1tYXJ5JywgbGFiZWwpICsgY29udGVudCk7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZFJhdyhlbGVtZW50KS5hZGRFT0woKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhbiBIVE1MIGltYWdlIHRhZyB0byB0aGUgc3VtbWFyeSBidWZmZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzcmMgcGF0aCB0byB0aGUgaW1hZ2UgeW91IHRvIGVtYmVkXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGFsdCB0ZXh0IGRlc2NyaXB0aW9uIG9mIHRoZSBpbWFnZVxuICAgICAqIEBwYXJhbSB7U3VtbWFyeUltYWdlT3B0aW9uc30gb3B0aW9ucyAob3B0aW9uYWwpIGFkZGl0aW9uIGltYWdlIGF0dHJpYnV0ZXNcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtTdW1tYXJ5fSBzdW1tYXJ5IGluc3RhbmNlXG4gICAgICovXG4gICAgYWRkSW1hZ2Uoc3JjLCBhbHQsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBvcHRpb25zIHx8IHt9O1xuICAgICAgICBjb25zdCBhdHRycyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgKHdpZHRoICYmIHsgd2lkdGggfSkpLCAoaGVpZ2h0ICYmIHsgaGVpZ2h0IH0pKTtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMud3JhcCgnaW1nJywgbnVsbCwgT2JqZWN0LmFzc2lnbih7IHNyYywgYWx0IH0sIGF0dHJzKSk7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZFJhdyhlbGVtZW50KS5hZGRFT0woKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhbiBIVE1MIHNlY3Rpb24gaGVhZGluZyBlbGVtZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCBoZWFkaW5nIHRleHRcbiAgICAgKiBAcGFyYW0ge251bWJlciB8IHN0cmluZ30gW2xldmVsPTFdIChvcHRpb25hbCkgdGhlIGhlYWRpbmcgbGV2ZWwsIGRlZmF1bHQ6IDFcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtTdW1tYXJ5fSBzdW1tYXJ5IGluc3RhbmNlXG4gICAgICovXG4gICAgYWRkSGVhZGluZyh0ZXh0LCBsZXZlbCkge1xuICAgICAgICBjb25zdCB0YWcgPSBgaCR7bGV2ZWx9YDtcbiAgICAgICAgY29uc3QgYWxsb3dlZFRhZyA9IFsnaDEnLCAnaDInLCAnaDMnLCAnaDQnLCAnaDUnLCAnaDYnXS5pbmNsdWRlcyh0YWcpXG4gICAgICAgICAgICA/IHRhZ1xuICAgICAgICAgICAgOiAnaDEnO1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy53cmFwKGFsbG93ZWRUYWcsIHRleHQpO1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRSYXcoZWxlbWVudCkuYWRkRU9MKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYW4gSFRNTCB0aGVtYXRpYyBicmVhayAoPGhyPikgdG8gdGhlIHN1bW1hcnkgYnVmZmVyXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7U3VtbWFyeX0gc3VtbWFyeSBpbnN0YW5jZVxuICAgICAqL1xuICAgIGFkZFNlcGFyYXRvcigpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMud3JhcCgnaHInLCBudWxsKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkUmF3KGVsZW1lbnQpLmFkZEVPTCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGFuIEhUTUwgbGluZSBicmVhayAoPGJyPikgdG8gdGhlIHN1bW1hcnkgYnVmZmVyXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7U3VtbWFyeX0gc3VtbWFyeSBpbnN0YW5jZVxuICAgICAqL1xuICAgIGFkZEJyZWFrKCkge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy53cmFwKCdicicsIG51bGwpO1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRSYXcoZWxlbWVudCkuYWRkRU9MKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYW4gSFRNTCBibG9ja3F1b3RlIHRvIHRoZSBzdW1tYXJ5IGJ1ZmZlclxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgcXVvdGUgdGV4dFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjaXRlIChvcHRpb25hbCkgY2l0YXRpb24gdXJsXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7U3VtbWFyeX0gc3VtbWFyeSBpbnN0YW5jZVxuICAgICAqL1xuICAgIGFkZFF1b3RlKHRleHQsIGNpdGUpIHtcbiAgICAgICAgY29uc3QgYXR0cnMgPSBPYmplY3QuYXNzaWduKHt9LCAoY2l0ZSAmJiB7IGNpdGUgfSkpO1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy53cmFwKCdibG9ja3F1b3RlJywgdGV4dCwgYXR0cnMpO1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRSYXcoZWxlbWVudCkuYWRkRU9MKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYW4gSFRNTCBhbmNob3IgdGFnIHRvIHRoZSBzdW1tYXJ5IGJ1ZmZlclxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgbGluayB0ZXh0L2NvbnRlbnRcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaHJlZiBoeXBlcmxpbmtcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtTdW1tYXJ5fSBzdW1tYXJ5IGluc3RhbmNlXG4gICAgICovXG4gICAgYWRkTGluayh0ZXh0LCBocmVmKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLndyYXAoJ2EnLCB0ZXh0LCB7IGhyZWYgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZFJhdyhlbGVtZW50KS5hZGRFT0woKTtcbiAgICB9XG59XG5jb25zdCBfc3VtbWFyeSA9IG5ldyBTdW1tYXJ5KCk7XG4vKipcbiAqIEBkZXByZWNhdGVkIHVzZSBgY29yZS5zdW1tYXJ5YFxuICovXG5leHBvcnRzLm1hcmtkb3duU3VtbWFyeSA9IF9zdW1tYXJ5O1xuZXhwb3J0cy5zdW1tYXJ5ID0gX3N1bW1hcnk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zdW1tYXJ5LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudG9QbGF0Zm9ybVBhdGggPSBleHBvcnRzLnRvV2luMzJQYXRoID0gZXhwb3J0cy50b1Bvc2l4UGF0aCA9IHZvaWQgMDtcbmNvbnN0IHBhdGggPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcInBhdGhcIikpO1xuLyoqXG4gKiB0b1Bvc2l4UGF0aCBjb252ZXJ0cyB0aGUgZ2l2ZW4gcGF0aCB0byB0aGUgcG9zaXggZm9ybS4gT24gV2luZG93cywgXFxcXCB3aWxsIGJlXG4gKiByZXBsYWNlZCB3aXRoIC8uXG4gKlxuICogQHBhcmFtIHB0aC4gUGF0aCB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHN0cmluZyBQb3NpeCBwYXRoLlxuICovXG5mdW5jdGlvbiB0b1Bvc2l4UGF0aChwdGgpIHtcbiAgICByZXR1cm4gcHRoLnJlcGxhY2UoL1tcXFxcXS9nLCAnLycpO1xufVxuZXhwb3J0cy50b1Bvc2l4UGF0aCA9IHRvUG9zaXhQYXRoO1xuLyoqXG4gKiB0b1dpbjMyUGF0aCBjb252ZXJ0cyB0aGUgZ2l2ZW4gcGF0aCB0byB0aGUgd2luMzIgZm9ybS4gT24gTGludXgsIC8gd2lsbCBiZVxuICogcmVwbGFjZWQgd2l0aCBcXFxcLlxuICpcbiAqIEBwYXJhbSBwdGguIFBhdGggdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiBzdHJpbmcgV2luMzIgcGF0aC5cbiAqL1xuZnVuY3Rpb24gdG9XaW4zMlBhdGgocHRoKSB7XG4gICAgcmV0dXJuIHB0aC5yZXBsYWNlKC9bL10vZywgJ1xcXFwnKTtcbn1cbmV4cG9ydHMudG9XaW4zMlBhdGggPSB0b1dpbjMyUGF0aDtcbi8qKlxuICogdG9QbGF0Zm9ybVBhdGggY29udmVydHMgdGhlIGdpdmVuIHBhdGggdG8gYSBwbGF0Zm9ybS1zcGVjaWZpYyBwYXRoLiBJdCBkb2VzXG4gKiB0aGlzIGJ5IHJlcGxhY2luZyBpbnN0YW5jZXMgb2YgLyBhbmQgXFwgd2l0aCB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgcGF0aFxuICogc2VwYXJhdG9yLlxuICpcbiAqIEBwYXJhbSBwdGggVGhlIHBhdGggdG8gcGxhdGZvcm1pemUuXG4gKiBAcmV0dXJuIHN0cmluZyBUaGUgcGxhdGZvcm0tc3BlY2lmaWMgcGF0aC5cbiAqL1xuZnVuY3Rpb24gdG9QbGF0Zm9ybVBhdGgocHRoKSB7XG4gICAgcmV0dXJuIHB0aC5yZXBsYWNlKC9bL1xcXFxdL2csIHBhdGguc2VwKTtcbn1cbmV4cG9ydHMudG9QbGF0Zm9ybVBhdGggPSB0b1BsYXRmb3JtUGF0aDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBhdGgtdXRpbHMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldERldGFpbHMgPSBleHBvcnRzLmlzTGludXggPSBleHBvcnRzLmlzTWFjT1MgPSBleHBvcnRzLmlzV2luZG93cyA9IGV4cG9ydHMuYXJjaCA9IGV4cG9ydHMucGxhdGZvcm0gPSB2b2lkIDA7XG5jb25zdCBvc18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJvc1wiKSk7XG5jb25zdCBleGVjID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJAYWN0aW9ucy9leGVjXCIpKTtcbmNvbnN0IGdldFdpbmRvd3NJbmZvID0gKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgY29uc3QgeyBzdGRvdXQ6IHZlcnNpb24gfSA9IHlpZWxkIGV4ZWMuZ2V0RXhlY091dHB1dCgncG93ZXJzaGVsbCAtY29tbWFuZCBcIihHZXQtQ2ltSW5zdGFuY2UgLUNsYXNzTmFtZSBXaW4zMl9PcGVyYXRpbmdTeXN0ZW0pLlZlcnNpb25cIicsIHVuZGVmaW5lZCwge1xuICAgICAgICBzaWxlbnQ6IHRydWVcbiAgICB9KTtcbiAgICBjb25zdCB7IHN0ZG91dDogbmFtZSB9ID0geWllbGQgZXhlYy5nZXRFeGVjT3V0cHV0KCdwb3dlcnNoZWxsIC1jb21tYW5kIFwiKEdldC1DaW1JbnN0YW5jZSAtQ2xhc3NOYW1lIFdpbjMyX09wZXJhdGluZ1N5c3RlbSkuQ2FwdGlvblwiJywgdW5kZWZpbmVkLCB7XG4gICAgICAgIHNpbGVudDogdHJ1ZVxuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IG5hbWUudHJpbSgpLFxuICAgICAgICB2ZXJzaW9uOiB2ZXJzaW9uLnRyaW0oKVxuICAgIH07XG59KTtcbmNvbnN0IGdldE1hY09zSW5mbyA9ICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgIHZhciBfYSwgX2IsIF9jLCBfZDtcbiAgICBjb25zdCB7IHN0ZG91dCB9ID0geWllbGQgZXhlYy5nZXRFeGVjT3V0cHV0KCdzd192ZXJzJywgdW5kZWZpbmVkLCB7XG4gICAgICAgIHNpbGVudDogdHJ1ZVxuICAgIH0pO1xuICAgIGNvbnN0IHZlcnNpb24gPSAoX2IgPSAoX2EgPSBzdGRvdXQubWF0Y2goL1Byb2R1Y3RWZXJzaW9uOlxccyooLispLykpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVsxXSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XG4gICAgY29uc3QgbmFtZSA9IChfZCA9IChfYyA9IHN0ZG91dC5tYXRjaCgvUHJvZHVjdE5hbWU6XFxzKiguKykvKSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jWzFdKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiAnJztcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lLFxuICAgICAgICB2ZXJzaW9uXG4gICAgfTtcbn0pO1xuY29uc3QgZ2V0TGludXhJbmZvID0gKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgY29uc3QgeyBzdGRvdXQgfSA9IHlpZWxkIGV4ZWMuZ2V0RXhlY091dHB1dCgnbHNiX3JlbGVhc2UnLCBbJy1pJywgJy1yJywgJy1zJ10sIHtcbiAgICAgICAgc2lsZW50OiB0cnVlXG4gICAgfSk7XG4gICAgY29uc3QgW25hbWUsIHZlcnNpb25dID0gc3Rkb3V0LnRyaW0oKS5zcGxpdCgnXFxuJyk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgdmVyc2lvblxuICAgIH07XG59KTtcbmV4cG9ydHMucGxhdGZvcm0gPSBvc18xLmRlZmF1bHQucGxhdGZvcm0oKTtcbmV4cG9ydHMuYXJjaCA9IG9zXzEuZGVmYXVsdC5hcmNoKCk7XG5leHBvcnRzLmlzV2luZG93cyA9IGV4cG9ydHMucGxhdGZvcm0gPT09ICd3aW4zMic7XG5leHBvcnRzLmlzTWFjT1MgPSBleHBvcnRzLnBsYXRmb3JtID09PSAnZGFyd2luJztcbmV4cG9ydHMuaXNMaW51eCA9IGV4cG9ydHMucGxhdGZvcm0gPT09ICdsaW51eCc7XG5mdW5jdGlvbiBnZXREZXRhaWxzKCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sICh5aWVsZCAoZXhwb3J0cy5pc1dpbmRvd3NcbiAgICAgICAgICAgID8gZ2V0V2luZG93c0luZm8oKVxuICAgICAgICAgICAgOiBleHBvcnRzLmlzTWFjT1NcbiAgICAgICAgICAgICAgICA/IGdldE1hY09zSW5mbygpXG4gICAgICAgICAgICAgICAgOiBnZXRMaW51eEluZm8oKSkpKSwgeyBwbGF0Zm9ybTogZXhwb3J0cy5wbGF0Zm9ybSxcbiAgICAgICAgICAgIGFyY2g6IGV4cG9ydHMuYXJjaCxcbiAgICAgICAgICAgIGlzV2luZG93czogZXhwb3J0cy5pc1dpbmRvd3MsXG4gICAgICAgICAgICBpc01hY09TOiBleHBvcnRzLmlzTWFjT1MsXG4gICAgICAgICAgICBpc0xpbnV4OiBleHBvcnRzLmlzTGludXggfSk7XG4gICAgfSk7XG59XG5leHBvcnRzLmdldERldGFpbHMgPSBnZXREZXRhaWxzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGxhdGZvcm0uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnBsYXRmb3JtID0gZXhwb3J0cy50b1BsYXRmb3JtUGF0aCA9IGV4cG9ydHMudG9XaW4zMlBhdGggPSBleHBvcnRzLnRvUG9zaXhQYXRoID0gZXhwb3J0cy5tYXJrZG93blN1bW1hcnkgPSBleHBvcnRzLnN1bW1hcnkgPSBleHBvcnRzLmdldElEVG9rZW4gPSBleHBvcnRzLmdldFN0YXRlID0gZXhwb3J0cy5zYXZlU3RhdGUgPSBleHBvcnRzLmdyb3VwID0gZXhwb3J0cy5lbmRHcm91cCA9IGV4cG9ydHMuc3RhcnRHcm91cCA9IGV4cG9ydHMuaW5mbyA9IGV4cG9ydHMubm90aWNlID0gZXhwb3J0cy53YXJuaW5nID0gZXhwb3J0cy5lcnJvciA9IGV4cG9ydHMuZGVidWcgPSBleHBvcnRzLmlzRGVidWcgPSBleHBvcnRzLnNldEZhaWxlZCA9IGV4cG9ydHMuc2V0Q29tbWFuZEVjaG8gPSBleHBvcnRzLnNldE91dHB1dCA9IGV4cG9ydHMuZ2V0Qm9vbGVhbklucHV0ID0gZXhwb3J0cy5nZXRNdWx0aWxpbmVJbnB1dCA9IGV4cG9ydHMuZ2V0SW5wdXQgPSBleHBvcnRzLmFkZFBhdGggPSBleHBvcnRzLnNldFNlY3JldCA9IGV4cG9ydHMuZXhwb3J0VmFyaWFibGUgPSBleHBvcnRzLkV4aXRDb2RlID0gdm9pZCAwO1xuY29uc3QgY29tbWFuZF8xID0gcmVxdWlyZShcIi4vY29tbWFuZFwiKTtcbmNvbnN0IGZpbGVfY29tbWFuZF8xID0gcmVxdWlyZShcIi4vZmlsZS1jb21tYW5kXCIpO1xuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoXCIuL3V0aWxzXCIpO1xuY29uc3Qgb3MgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIm9zXCIpKTtcbmNvbnN0IHBhdGggPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcInBhdGhcIikpO1xuY29uc3Qgb2lkY191dGlsc18xID0gcmVxdWlyZShcIi4vb2lkYy11dGlsc1wiKTtcbi8qKlxuICogVGhlIGNvZGUgdG8gZXhpdCBhbiBhY3Rpb25cbiAqL1xudmFyIEV4aXRDb2RlO1xuKGZ1bmN0aW9uIChFeGl0Q29kZSkge1xuICAgIC8qKlxuICAgICAqIEEgY29kZSBpbmRpY2F0aW5nIHRoYXQgdGhlIGFjdGlvbiB3YXMgc3VjY2Vzc2Z1bFxuICAgICAqL1xuICAgIEV4aXRDb2RlW0V4aXRDb2RlW1wiU3VjY2Vzc1wiXSA9IDBdID0gXCJTdWNjZXNzXCI7XG4gICAgLyoqXG4gICAgICogQSBjb2RlIGluZGljYXRpbmcgdGhhdCB0aGUgYWN0aW9uIHdhcyBhIGZhaWx1cmVcbiAgICAgKi9cbiAgICBFeGl0Q29kZVtFeGl0Q29kZVtcIkZhaWx1cmVcIl0gPSAxXSA9IFwiRmFpbHVyZVwiO1xufSkoRXhpdENvZGUgfHwgKGV4cG9ydHMuRXhpdENvZGUgPSBFeGl0Q29kZSA9IHt9KSk7XG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBWYXJpYWJsZXNcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8qKlxuICogU2V0cyBlbnYgdmFyaWFibGUgZm9yIHRoaXMgYWN0aW9uIGFuZCBmdXR1cmUgYWN0aW9ucyBpbiB0aGUgam9iXG4gKiBAcGFyYW0gbmFtZSB0aGUgbmFtZSBvZiB0aGUgdmFyaWFibGUgdG8gc2V0XG4gKiBAcGFyYW0gdmFsIHRoZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUuIE5vbi1zdHJpbmcgdmFsdWVzIHdpbGwgYmUgY29udmVydGVkIHRvIGEgc3RyaW5nIHZpYSBKU09OLnN0cmluZ2lmeVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZnVuY3Rpb24gZXhwb3J0VmFyaWFibGUobmFtZSwgdmFsKSB7XG4gICAgY29uc3QgY29udmVydGVkVmFsID0gKDAsIHV0aWxzXzEudG9Db21tYW5kVmFsdWUpKHZhbCk7XG4gICAgcHJvY2Vzcy5lbnZbbmFtZV0gPSBjb252ZXJ0ZWRWYWw7XG4gICAgY29uc3QgZmlsZVBhdGggPSBwcm9jZXNzLmVudlsnR0lUSFVCX0VOViddIHx8ICcnO1xuICAgIGlmIChmaWxlUGF0aCkge1xuICAgICAgICByZXR1cm4gKDAsIGZpbGVfY29tbWFuZF8xLmlzc3VlRmlsZUNvbW1hbmQpKCdFTlYnLCAoMCwgZmlsZV9jb21tYW5kXzEucHJlcGFyZUtleVZhbHVlTWVzc2FnZSkobmFtZSwgdmFsKSk7XG4gICAgfVxuICAgICgwLCBjb21tYW5kXzEuaXNzdWVDb21tYW5kKSgnc2V0LWVudicsIHsgbmFtZSB9LCBjb252ZXJ0ZWRWYWwpO1xufVxuZXhwb3J0cy5leHBvcnRWYXJpYWJsZSA9IGV4cG9ydFZhcmlhYmxlO1xuLyoqXG4gKiBSZWdpc3RlcnMgYSBzZWNyZXQgd2hpY2ggd2lsbCBnZXQgbWFza2VkIGZyb20gbG9nc1xuICogQHBhcmFtIHNlY3JldCB2YWx1ZSBvZiB0aGUgc2VjcmV0XG4gKi9cbmZ1bmN0aW9uIHNldFNlY3JldChzZWNyZXQpIHtcbiAgICAoMCwgY29tbWFuZF8xLmlzc3VlQ29tbWFuZCkoJ2FkZC1tYXNrJywge30sIHNlY3JldCk7XG59XG5leHBvcnRzLnNldFNlY3JldCA9IHNldFNlY3JldDtcbi8qKlxuICogUHJlcGVuZHMgaW5wdXRQYXRoIHRvIHRoZSBQQVRIIChmb3IgdGhpcyBhY3Rpb24gYW5kIGZ1dHVyZSBhY3Rpb25zKVxuICogQHBhcmFtIGlucHV0UGF0aFxuICovXG5mdW5jdGlvbiBhZGRQYXRoKGlucHV0UGF0aCkge1xuICAgIGNvbnN0IGZpbGVQYXRoID0gcHJvY2Vzcy5lbnZbJ0dJVEhVQl9QQVRIJ10gfHwgJyc7XG4gICAgaWYgKGZpbGVQYXRoKSB7XG4gICAgICAgICgwLCBmaWxlX2NvbW1hbmRfMS5pc3N1ZUZpbGVDb21tYW5kKSgnUEFUSCcsIGlucHV0UGF0aCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICAoMCwgY29tbWFuZF8xLmlzc3VlQ29tbWFuZCkoJ2FkZC1wYXRoJywge30sIGlucHV0UGF0aCk7XG4gICAgfVxuICAgIHByb2Nlc3MuZW52WydQQVRIJ10gPSBgJHtpbnB1dFBhdGh9JHtwYXRoLmRlbGltaXRlcn0ke3Byb2Nlc3MuZW52WydQQVRIJ119YDtcbn1cbmV4cG9ydHMuYWRkUGF0aCA9IGFkZFBhdGg7XG4vKipcbiAqIEdldHMgdGhlIHZhbHVlIG9mIGFuIGlucHV0LlxuICogVW5sZXNzIHRyaW1XaGl0ZXNwYWNlIGlzIHNldCB0byBmYWxzZSBpbiBJbnB1dE9wdGlvbnMsIHRoZSB2YWx1ZSBpcyBhbHNvIHRyaW1tZWQuXG4gKiBSZXR1cm5zIGFuIGVtcHR5IHN0cmluZyBpZiB0aGUgdmFsdWUgaXMgbm90IGRlZmluZWQuXG4gKlxuICogQHBhcmFtICAgICBuYW1lICAgICBuYW1lIG9mIHRoZSBpbnB1dCB0byBnZXRcbiAqIEBwYXJhbSAgICAgb3B0aW9ucyAgb3B0aW9uYWwuIFNlZSBJbnB1dE9wdGlvbnMuXG4gKiBAcmV0dXJucyAgIHN0cmluZ1xuICovXG5mdW5jdGlvbiBnZXRJbnB1dChuYW1lLCBvcHRpb25zKSB7XG4gICAgY29uc3QgdmFsID0gcHJvY2Vzcy5lbnZbYElOUFVUXyR7bmFtZS5yZXBsYWNlKC8gL2csICdfJykudG9VcHBlckNhc2UoKX1gXSB8fCAnJztcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnJlcXVpcmVkICYmICF2YWwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnB1dCByZXF1aXJlZCBhbmQgbm90IHN1cHBsaWVkOiAke25hbWV9YCk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMudHJpbVdoaXRlc3BhY2UgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICAgIHJldHVybiB2YWwudHJpbSgpO1xufVxuZXhwb3J0cy5nZXRJbnB1dCA9IGdldElucHV0O1xuLyoqXG4gKiBHZXRzIHRoZSB2YWx1ZXMgb2YgYW4gbXVsdGlsaW5lIGlucHV0LiAgRWFjaCB2YWx1ZSBpcyBhbHNvIHRyaW1tZWQuXG4gKlxuICogQHBhcmFtICAgICBuYW1lICAgICBuYW1lIG9mIHRoZSBpbnB1dCB0byBnZXRcbiAqIEBwYXJhbSAgICAgb3B0aW9ucyAgb3B0aW9uYWwuIFNlZSBJbnB1dE9wdGlvbnMuXG4gKiBAcmV0dXJucyAgIHN0cmluZ1tdXG4gKlxuICovXG5mdW5jdGlvbiBnZXRNdWx0aWxpbmVJbnB1dChuYW1lLCBvcHRpb25zKSB7XG4gICAgY29uc3QgaW5wdXRzID0gZ2V0SW5wdXQobmFtZSwgb3B0aW9ucylcbiAgICAgICAgLnNwbGl0KCdcXG4nKVxuICAgICAgICAuZmlsdGVyKHggPT4geCAhPT0gJycpO1xuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMudHJpbVdoaXRlc3BhY2UgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBpbnB1dHM7XG4gICAgfVxuICAgIHJldHVybiBpbnB1dHMubWFwKGlucHV0ID0+IGlucHV0LnRyaW0oKSk7XG59XG5leHBvcnRzLmdldE11bHRpbGluZUlucHV0ID0gZ2V0TXVsdGlsaW5lSW5wdXQ7XG4vKipcbiAqIEdldHMgdGhlIGlucHV0IHZhbHVlIG9mIHRoZSBib29sZWFuIHR5cGUgaW4gdGhlIFlBTUwgMS4yIFwiY29yZSBzY2hlbWFcIiBzcGVjaWZpY2F0aW9uLlxuICogU3VwcG9ydCBib29sZWFuIGlucHV0IGxpc3Q6IGB0cnVlIHwgVHJ1ZSB8IFRSVUUgfCBmYWxzZSB8IEZhbHNlIHwgRkFMU0VgIC5cbiAqIFRoZSByZXR1cm4gdmFsdWUgaXMgYWxzbyBpbiBib29sZWFuIHR5cGUuXG4gKiByZWY6IGh0dHBzOi8veWFtbC5vcmcvc3BlYy8xLjIvc3BlYy5odG1sI2lkMjgwNDkyM1xuICpcbiAqIEBwYXJhbSAgICAgbmFtZSAgICAgbmFtZSBvZiB0aGUgaW5wdXQgdG8gZ2V0XG4gKiBAcGFyYW0gICAgIG9wdGlvbnMgIG9wdGlvbmFsLiBTZWUgSW5wdXRPcHRpb25zLlxuICogQHJldHVybnMgICBib29sZWFuXG4gKi9cbmZ1bmN0aW9uIGdldEJvb2xlYW5JbnB1dChuYW1lLCBvcHRpb25zKSB7XG4gICAgY29uc3QgdHJ1ZVZhbHVlID0gWyd0cnVlJywgJ1RydWUnLCAnVFJVRSddO1xuICAgIGNvbnN0IGZhbHNlVmFsdWUgPSBbJ2ZhbHNlJywgJ0ZhbHNlJywgJ0ZBTFNFJ107XG4gICAgY29uc3QgdmFsID0gZ2V0SW5wdXQobmFtZSwgb3B0aW9ucyk7XG4gICAgaWYgKHRydWVWYWx1ZS5pbmNsdWRlcyh2YWwpKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoZmFsc2VWYWx1ZS5pbmNsdWRlcyh2YWwpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgSW5wdXQgZG9lcyBub3QgbWVldCBZQU1MIDEuMiBcIkNvcmUgU2NoZW1hXCIgc3BlY2lmaWNhdGlvbjogJHtuYW1lfVxcbmAgK1xuICAgICAgICBgU3VwcG9ydCBib29sZWFuIGlucHV0IGxpc3Q6IFxcYHRydWUgfCBUcnVlIHwgVFJVRSB8IGZhbHNlIHwgRmFsc2UgfCBGQUxTRVxcYGApO1xufVxuZXhwb3J0cy5nZXRCb29sZWFuSW5wdXQgPSBnZXRCb29sZWFuSW5wdXQ7XG4vKipcbiAqIFNldHMgdGhlIHZhbHVlIG9mIGFuIG91dHB1dC5cbiAqXG4gKiBAcGFyYW0gICAgIG5hbWUgICAgIG5hbWUgb2YgdGhlIG91dHB1dCB0byBzZXRcbiAqIEBwYXJhbSAgICAgdmFsdWUgICAgdmFsdWUgdG8gc3RvcmUuIE5vbi1zdHJpbmcgdmFsdWVzIHdpbGwgYmUgY29udmVydGVkIHRvIGEgc3RyaW5nIHZpYSBKU09OLnN0cmluZ2lmeVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZnVuY3Rpb24gc2V0T3V0cHV0KG5hbWUsIHZhbHVlKSB7XG4gICAgY29uc3QgZmlsZVBhdGggPSBwcm9jZXNzLmVudlsnR0lUSFVCX09VVFBVVCddIHx8ICcnO1xuICAgIGlmIChmaWxlUGF0aCkge1xuICAgICAgICByZXR1cm4gKDAsIGZpbGVfY29tbWFuZF8xLmlzc3VlRmlsZUNvbW1hbmQpKCdPVVRQVVQnLCAoMCwgZmlsZV9jb21tYW5kXzEucHJlcGFyZUtleVZhbHVlTWVzc2FnZSkobmFtZSwgdmFsdWUpKTtcbiAgICB9XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUob3MuRU9MKTtcbiAgICAoMCwgY29tbWFuZF8xLmlzc3VlQ29tbWFuZCkoJ3NldC1vdXRwdXQnLCB7IG5hbWUgfSwgKDAsIHV0aWxzXzEudG9Db21tYW5kVmFsdWUpKHZhbHVlKSk7XG59XG5leHBvcnRzLnNldE91dHB1dCA9IHNldE91dHB1dDtcbi8qKlxuICogRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgZWNob2luZyBvZiBjb21tYW5kcyBpbnRvIHN0ZG91dCBmb3IgdGhlIHJlc3Qgb2YgdGhlIHN0ZXAuXG4gKiBFY2hvaW5nIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQgaWYgQUNUSU9OU19TVEVQX0RFQlVHIGlzIG5vdCBzZXQuXG4gKlxuICovXG5mdW5jdGlvbiBzZXRDb21tYW5kRWNobyhlbmFibGVkKSB7XG4gICAgKDAsIGNvbW1hbmRfMS5pc3N1ZSkoJ2VjaG8nLCBlbmFibGVkID8gJ29uJyA6ICdvZmYnKTtcbn1cbmV4cG9ydHMuc2V0Q29tbWFuZEVjaG8gPSBzZXRDb21tYW5kRWNobztcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJlc3VsdHNcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8qKlxuICogU2V0cyB0aGUgYWN0aW9uIHN0YXR1cyB0byBmYWlsZWQuXG4gKiBXaGVuIHRoZSBhY3Rpb24gZXhpdHMgaXQgd2lsbCBiZSB3aXRoIGFuIGV4aXQgY29kZSBvZiAxXG4gKiBAcGFyYW0gbWVzc2FnZSBhZGQgZXJyb3IgaXNzdWUgbWVzc2FnZVxuICovXG5mdW5jdGlvbiBzZXRGYWlsZWQobWVzc2FnZSkge1xuICAgIHByb2Nlc3MuZXhpdENvZGUgPSBFeGl0Q29kZS5GYWlsdXJlO1xuICAgIGVycm9yKG1lc3NhZ2UpO1xufVxuZXhwb3J0cy5zZXRGYWlsZWQgPSBzZXRGYWlsZWQ7XG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBMb2dnaW5nIENvbW1hbmRzXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vKipcbiAqIEdldHMgd2hldGhlciBBY3Rpb25zIFN0ZXAgRGVidWcgaXMgb24gb3Igbm90XG4gKi9cbmZ1bmN0aW9uIGlzRGVidWcoKSB7XG4gICAgcmV0dXJuIHByb2Nlc3MuZW52WydSVU5ORVJfREVCVUcnXSA9PT0gJzEnO1xufVxuZXhwb3J0cy5pc0RlYnVnID0gaXNEZWJ1Zztcbi8qKlxuICogV3JpdGVzIGRlYnVnIG1lc3NhZ2UgdG8gdXNlciBsb2dcbiAqIEBwYXJhbSBtZXNzYWdlIGRlYnVnIG1lc3NhZ2VcbiAqL1xuZnVuY3Rpb24gZGVidWcobWVzc2FnZSkge1xuICAgICgwLCBjb21tYW5kXzEuaXNzdWVDb21tYW5kKSgnZGVidWcnLCB7fSwgbWVzc2FnZSk7XG59XG5leHBvcnRzLmRlYnVnID0gZGVidWc7XG4vKipcbiAqIEFkZHMgYW4gZXJyb3IgaXNzdWVcbiAqIEBwYXJhbSBtZXNzYWdlIGVycm9yIGlzc3VlIG1lc3NhZ2UuIEVycm9ycyB3aWxsIGJlIGNvbnZlcnRlZCB0byBzdHJpbmcgdmlhIHRvU3RyaW5nKClcbiAqIEBwYXJhbSBwcm9wZXJ0aWVzIG9wdGlvbmFsIHByb3BlcnRpZXMgdG8gYWRkIHRvIHRoZSBhbm5vdGF0aW9uLlxuICovXG5mdW5jdGlvbiBlcnJvcihtZXNzYWdlLCBwcm9wZXJ0aWVzID0ge30pIHtcbiAgICAoMCwgY29tbWFuZF8xLmlzc3VlQ29tbWFuZCkoJ2Vycm9yJywgKDAsIHV0aWxzXzEudG9Db21tYW5kUHJvcGVydGllcykocHJvcGVydGllcyksIG1lc3NhZ2UgaW5zdGFuY2VvZiBFcnJvciA/IG1lc3NhZ2UudG9TdHJpbmcoKSA6IG1lc3NhZ2UpO1xufVxuZXhwb3J0cy5lcnJvciA9IGVycm9yO1xuLyoqXG4gKiBBZGRzIGEgd2FybmluZyBpc3N1ZVxuICogQHBhcmFtIG1lc3NhZ2Ugd2FybmluZyBpc3N1ZSBtZXNzYWdlLiBFcnJvcnMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gc3RyaW5nIHZpYSB0b1N0cmluZygpXG4gKiBAcGFyYW0gcHJvcGVydGllcyBvcHRpb25hbCBwcm9wZXJ0aWVzIHRvIGFkZCB0byB0aGUgYW5ub3RhdGlvbi5cbiAqL1xuZnVuY3Rpb24gd2FybmluZyhtZXNzYWdlLCBwcm9wZXJ0aWVzID0ge30pIHtcbiAgICAoMCwgY29tbWFuZF8xLmlzc3VlQ29tbWFuZCkoJ3dhcm5pbmcnLCAoMCwgdXRpbHNfMS50b0NvbW1hbmRQcm9wZXJ0aWVzKShwcm9wZXJ0aWVzKSwgbWVzc2FnZSBpbnN0YW5jZW9mIEVycm9yID8gbWVzc2FnZS50b1N0cmluZygpIDogbWVzc2FnZSk7XG59XG5leHBvcnRzLndhcm5pbmcgPSB3YXJuaW5nO1xuLyoqXG4gKiBBZGRzIGEgbm90aWNlIGlzc3VlXG4gKiBAcGFyYW0gbWVzc2FnZSBub3RpY2UgaXNzdWUgbWVzc2FnZS4gRXJyb3JzIHdpbGwgYmUgY29udmVydGVkIHRvIHN0cmluZyB2aWEgdG9TdHJpbmcoKVxuICogQHBhcmFtIHByb3BlcnRpZXMgb3B0aW9uYWwgcHJvcGVydGllcyB0byBhZGQgdG8gdGhlIGFubm90YXRpb24uXG4gKi9cbmZ1bmN0aW9uIG5vdGljZShtZXNzYWdlLCBwcm9wZXJ0aWVzID0ge30pIHtcbiAgICAoMCwgY29tbWFuZF8xLmlzc3VlQ29tbWFuZCkoJ25vdGljZScsICgwLCB1dGlsc18xLnRvQ29tbWFuZFByb3BlcnRpZXMpKHByb3BlcnRpZXMpLCBtZXNzYWdlIGluc3RhbmNlb2YgRXJyb3IgPyBtZXNzYWdlLnRvU3RyaW5nKCkgOiBtZXNzYWdlKTtcbn1cbmV4cG9ydHMubm90aWNlID0gbm90aWNlO1xuLyoqXG4gKiBXcml0ZXMgaW5mbyB0byBsb2cgd2l0aCBjb25zb2xlLmxvZy5cbiAqIEBwYXJhbSBtZXNzYWdlIGluZm8gbWVzc2FnZVxuICovXG5mdW5jdGlvbiBpbmZvKG1lc3NhZ2UpIHtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShtZXNzYWdlICsgb3MuRU9MKTtcbn1cbmV4cG9ydHMuaW5mbyA9IGluZm87XG4vKipcbiAqIEJlZ2luIGFuIG91dHB1dCBncm91cC5cbiAqXG4gKiBPdXRwdXQgdW50aWwgdGhlIG5leHQgYGdyb3VwRW5kYCB3aWxsIGJlIGZvbGRhYmxlIGluIHRoaXMgZ3JvdXBcbiAqXG4gKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgb3V0cHV0IGdyb3VwXG4gKi9cbmZ1bmN0aW9uIHN0YXJ0R3JvdXAobmFtZSkge1xuICAgICgwLCBjb21tYW5kXzEuaXNzdWUpKCdncm91cCcsIG5hbWUpO1xufVxuZXhwb3J0cy5zdGFydEdyb3VwID0gc3RhcnRHcm91cDtcbi8qKlxuICogRW5kIGFuIG91dHB1dCBncm91cC5cbiAqL1xuZnVuY3Rpb24gZW5kR3JvdXAoKSB7XG4gICAgKDAsIGNvbW1hbmRfMS5pc3N1ZSkoJ2VuZGdyb3VwJyk7XG59XG5leHBvcnRzLmVuZEdyb3VwID0gZW5kR3JvdXA7XG4vKipcbiAqIFdyYXAgYW4gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIGNhbGwgaW4gYSBncm91cC5cbiAqXG4gKiBSZXR1cm5zIHRoZSBzYW1lIHR5cGUgYXMgdGhlIGZ1bmN0aW9uIGl0c2VsZi5cbiAqXG4gKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgZ3JvdXBcbiAqIEBwYXJhbSBmbiBUaGUgZnVuY3Rpb24gdG8gd3JhcCBpbiB0aGUgZ3JvdXBcbiAqL1xuZnVuY3Rpb24gZ3JvdXAobmFtZSwgZm4pIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBzdGFydEdyb3VwKG5hbWUpO1xuICAgICAgICBsZXQgcmVzdWx0O1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmVzdWx0ID0geWllbGQgZm4oKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIGVuZEdyb3VwKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZ3JvdXAgPSBncm91cDtcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFdyYXBwZXIgYWN0aW9uIHN0YXRlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vKipcbiAqIFNhdmVzIHN0YXRlIGZvciBjdXJyZW50IGFjdGlvbiwgdGhlIHN0YXRlIGNhbiBvbmx5IGJlIHJldHJpZXZlZCBieSB0aGlzIGFjdGlvbidzIHBvc3Qgam9iIGV4ZWN1dGlvbi5cbiAqXG4gKiBAcGFyYW0gICAgIG5hbWUgICAgIG5hbWUgb2YgdGhlIHN0YXRlIHRvIHN0b3JlXG4gKiBAcGFyYW0gICAgIHZhbHVlICAgIHZhbHVlIHRvIHN0b3JlLiBOb24tc3RyaW5nIHZhbHVlcyB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIHN0cmluZyB2aWEgSlNPTi5zdHJpbmdpZnlcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmZ1bmN0aW9uIHNhdmVTdGF0ZShuYW1lLCB2YWx1ZSkge1xuICAgIGNvbnN0IGZpbGVQYXRoID0gcHJvY2Vzcy5lbnZbJ0dJVEhVQl9TVEFURSddIHx8ICcnO1xuICAgIGlmIChmaWxlUGF0aCkge1xuICAgICAgICByZXR1cm4gKDAsIGZpbGVfY29tbWFuZF8xLmlzc3VlRmlsZUNvbW1hbmQpKCdTVEFURScsICgwLCBmaWxlX2NvbW1hbmRfMS5wcmVwYXJlS2V5VmFsdWVNZXNzYWdlKShuYW1lLCB2YWx1ZSkpO1xuICAgIH1cbiAgICAoMCwgY29tbWFuZF8xLmlzc3VlQ29tbWFuZCkoJ3NhdmUtc3RhdGUnLCB7IG5hbWUgfSwgKDAsIHV0aWxzXzEudG9Db21tYW5kVmFsdWUpKHZhbHVlKSk7XG59XG5leHBvcnRzLnNhdmVTdGF0ZSA9IHNhdmVTdGF0ZTtcbi8qKlxuICogR2V0cyB0aGUgdmFsdWUgb2YgYW4gc3RhdGUgc2V0IGJ5IHRoaXMgYWN0aW9uJ3MgbWFpbiBleGVjdXRpb24uXG4gKlxuICogQHBhcmFtICAgICBuYW1lICAgICBuYW1lIG9mIHRoZSBzdGF0ZSB0byBnZXRcbiAqIEByZXR1cm5zICAgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGdldFN0YXRlKG5hbWUpIHtcbiAgICByZXR1cm4gcHJvY2Vzcy5lbnZbYFNUQVRFXyR7bmFtZX1gXSB8fCAnJztcbn1cbmV4cG9ydHMuZ2V0U3RhdGUgPSBnZXRTdGF0ZTtcbmZ1bmN0aW9uIGdldElEVG9rZW4oYXVkKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgcmV0dXJuIHlpZWxkIG9pZGNfdXRpbHNfMS5PaWRjQ2xpZW50LmdldElEVG9rZW4oYXVkKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZ2V0SURUb2tlbiA9IGdldElEVG9rZW47XG4vKipcbiAqIFN1bW1hcnkgZXhwb3J0c1xuICovXG52YXIgc3VtbWFyeV8xID0gcmVxdWlyZShcIi4vc3VtbWFyeVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN1bW1hcnlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN1bW1hcnlfMS5zdW1tYXJ5OyB9IH0pO1xuLyoqXG4gKiBAZGVwcmVjYXRlZCB1c2UgY29yZS5zdW1tYXJ5XG4gKi9cbnZhciBzdW1tYXJ5XzIgPSByZXF1aXJlKFwiLi9zdW1tYXJ5XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibWFya2Rvd25TdW1tYXJ5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzdW1tYXJ5XzIubWFya2Rvd25TdW1tYXJ5OyB9IH0pO1xuLyoqXG4gKiBQYXRoIGV4cG9ydHNcbiAqL1xudmFyIHBhdGhfdXRpbHNfMSA9IHJlcXVpcmUoXCIuL3BhdGgtdXRpbHNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0b1Bvc2l4UGF0aFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcGF0aF91dGlsc18xLnRvUG9zaXhQYXRoOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidG9XaW4zMlBhdGhcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBhdGhfdXRpbHNfMS50b1dpbjMyUGF0aDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRvUGxhdGZvcm1QYXRoXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwYXRoX3V0aWxzXzEudG9QbGF0Zm9ybVBhdGg7IH0gfSk7XG4vKipcbiAqIFBsYXRmb3JtIHV0aWxpdGllcyBleHBvcnRzXG4gKi9cbmV4cG9ydHMucGxhdGZvcm0gPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIi4vcGxhdGZvcm1cIikpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29yZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRVcGxvYWRDaHVua1RpbWVvdXQgPSBleHBvcnRzLmdldENvbmN1cnJlbmN5ID0gZXhwb3J0cy5nZXRHaXRIdWJXb3Jrc3BhY2VEaXIgPSBleHBvcnRzLmlzR2hlcyA9IGV4cG9ydHMuZ2V0UmVzdWx0c1NlcnZpY2VVcmwgPSBleHBvcnRzLmdldFJ1bnRpbWVUb2tlbiA9IGV4cG9ydHMuZ2V0VXBsb2FkQ2h1bmtTaXplID0gdm9pZCAwO1xuY29uc3Qgb3NfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwib3NcIikpO1xuLy8gVXNlZCBmb3IgY29udHJvbGxpbmcgdGhlIGhpZ2hXYXRlck1hcmsgdmFsdWUgb2YgdGhlIHppcCB0aGF0IGlzIGJlaW5nIHN0cmVhbWVkXG4vLyBUaGUgc2FtZSB2YWx1ZSBpcyB1c2VkIGFzIHRoZSBjaHVuayBzaXplIHRoYXQgaXMgdXNlIGR1cmluZyB1cGxvYWQgdG8gYmxvYiBzdG9yYWdlXG5mdW5jdGlvbiBnZXRVcGxvYWRDaHVua1NpemUoKSB7XG4gICAgcmV0dXJuIDggKiAxMDI0ICogMTAyNDsgLy8gOCBNQiBDaHVua3Ncbn1cbmV4cG9ydHMuZ2V0VXBsb2FkQ2h1bmtTaXplID0gZ2V0VXBsb2FkQ2h1bmtTaXplO1xuZnVuY3Rpb24gZ2V0UnVudGltZVRva2VuKCkge1xuICAgIGNvbnN0IHRva2VuID0gcHJvY2Vzcy5lbnZbJ0FDVElPTlNfUlVOVElNRV9UT0tFTiddO1xuICAgIGlmICghdG9rZW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gZ2V0IHRoZSBBQ1RJT05TX1JVTlRJTUVfVE9LRU4gZW52IHZhcmlhYmxlJyk7XG4gICAgfVxuICAgIHJldHVybiB0b2tlbjtcbn1cbmV4cG9ydHMuZ2V0UnVudGltZVRva2VuID0gZ2V0UnVudGltZVRva2VuO1xuZnVuY3Rpb24gZ2V0UmVzdWx0c1NlcnZpY2VVcmwoKSB7XG4gICAgY29uc3QgcmVzdWx0c1VybCA9IHByb2Nlc3MuZW52WydBQ1RJT05TX1JFU1VMVFNfVVJMJ107XG4gICAgaWYgKCFyZXN1bHRzVXJsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGdldCB0aGUgQUNUSU9OU19SRVNVTFRTX1VSTCBlbnYgdmFyaWFibGUnKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBVUkwocmVzdWx0c1VybCkub3JpZ2luO1xufVxuZXhwb3J0cy5nZXRSZXN1bHRzU2VydmljZVVybCA9IGdldFJlc3VsdHNTZXJ2aWNlVXJsO1xuZnVuY3Rpb24gaXNHaGVzKCkge1xuICAgIGNvbnN0IGdoVXJsID0gbmV3IFVSTChwcm9jZXNzLmVudlsnR0lUSFVCX1NFUlZFUl9VUkwnXSB8fCAnaHR0cHM6Ly9naXRodWIuY29tJyk7XG4gICAgY29uc3QgaG9zdG5hbWUgPSBnaFVybC5ob3N0bmFtZS50cmltRW5kKCkudG9VcHBlckNhc2UoKTtcbiAgICBjb25zdCBpc0dpdEh1Ykhvc3QgPSBob3N0bmFtZSA9PT0gJ0dJVEhVQi5DT00nO1xuICAgIGNvbnN0IGlzR2hlSG9zdCA9IGhvc3RuYW1lLmVuZHNXaXRoKCcuR0hFLkNPTScpO1xuICAgIGNvbnN0IGlzTG9jYWxIb3N0ID0gaG9zdG5hbWUuZW5kc1dpdGgoJy5MT0NBTEhPU1QnKTtcbiAgICByZXR1cm4gIWlzR2l0SHViSG9zdCAmJiAhaXNHaGVIb3N0ICYmICFpc0xvY2FsSG9zdDtcbn1cbmV4cG9ydHMuaXNHaGVzID0gaXNHaGVzO1xuZnVuY3Rpb24gZ2V0R2l0SHViV29ya3NwYWNlRGlyKCkge1xuICAgIGNvbnN0IGdoV29ya3NwYWNlRGlyID0gcHJvY2Vzcy5lbnZbJ0dJVEhVQl9XT1JLU1BBQ0UnXTtcbiAgICBpZiAoIWdoV29ya3NwYWNlRGlyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGdldCB0aGUgR0lUSFVCX1dPUktTUEFDRSBlbnYgdmFyaWFibGUnKTtcbiAgICB9XG4gICAgcmV0dXJuIGdoV29ya3NwYWNlRGlyO1xufVxuZXhwb3J0cy5nZXRHaXRIdWJXb3Jrc3BhY2VEaXIgPSBnZXRHaXRIdWJXb3Jrc3BhY2VEaXI7XG4vLyBNaW1pY3MgYmVoYXZpb3Igb2YgYXpjb3B5OiBodHRwczovL2xlYXJuLm1pY3Jvc29mdC5jb20vZW4tdXMvYXp1cmUvc3RvcmFnZS9jb21tb24vc3RvcmFnZS11c2UtYXpjb3B5LW9wdGltaXplXG4vLyBJZiB5b3VyIG1hY2hpbmUgaGFzIGZld2VyIHRoYW4gNSBDUFVzLCB0aGVuIHRoZSB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlIGlzIHNldCB0byAzMi5cbi8vIE90aGVyd2lzZSwgdGhlIGRlZmF1bHQgdmFsdWUgaXMgZXF1YWwgdG8gMTYgbXVsdGlwbGllZCBieSB0aGUgbnVtYmVyIG9mIENQVXMuIFRoZSBtYXhpbXVtIHZhbHVlIG9mIHRoaXMgdmFyaWFibGUgaXMgMzAwLlxuZnVuY3Rpb24gZ2V0Q29uY3VycmVuY3koKSB7XG4gICAgY29uc3QgbnVtQ1BVcyA9IG9zXzEuZGVmYXVsdC5jcHVzKCkubGVuZ3RoO1xuICAgIGlmIChudW1DUFVzIDw9IDQpIHtcbiAgICAgICAgcmV0dXJuIDMyO1xuICAgIH1cbiAgICBjb25zdCBjb25jdXJyZW5jeSA9IDE2ICogbnVtQ1BVcztcbiAgICByZXR1cm4gY29uY3VycmVuY3kgPiAzMDAgPyAzMDAgOiBjb25jdXJyZW5jeTtcbn1cbmV4cG9ydHMuZ2V0Q29uY3VycmVuY3kgPSBnZXRDb25jdXJyZW5jeTtcbmZ1bmN0aW9uIGdldFVwbG9hZENodW5rVGltZW91dCgpIHtcbiAgICByZXR1cm4gMzAwMDAwOyAvLyA1IG1pbnV0ZXNcbn1cbmV4cG9ydHMuZ2V0VXBsb2FkQ2h1bmtUaW1lb3V0ID0gZ2V0VXBsb2FkQ2h1bmtUaW1lb3V0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uZmlnLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlzSnNvbk9iamVjdCA9IGV4cG9ydHMudHlwZW9mSnNvblZhbHVlID0gdm9pZCAwO1xuLyoqXG4gKiBHZXQgdGhlIHR5cGUgb2YgYSBKU09OIHZhbHVlLlxuICogRGlzdGluZ3Vpc2hlcyBiZXR3ZWVuIGFycmF5LCBudWxsIGFuZCBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIHR5cGVvZkpzb25WYWx1ZSh2YWx1ZSkge1xuICAgIGxldCB0ID0gdHlwZW9mIHZhbHVlO1xuICAgIGlmICh0ID09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKVxuICAgICAgICAgICAgcmV0dXJuIFwiYXJyYXlcIjtcbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKVxuICAgICAgICAgICAgcmV0dXJuIFwibnVsbFwiO1xuICAgIH1cbiAgICByZXR1cm4gdDtcbn1cbmV4cG9ydHMudHlwZW9mSnNvblZhbHVlID0gdHlwZW9mSnNvblZhbHVlO1xuLyoqXG4gKiBJcyB0aGlzIGEgSlNPTiBvYmplY3QgKGluc3RlYWQgb2YgYW4gYXJyYXkgb3IgbnVsbCk/XG4gKi9cbmZ1bmN0aW9uIGlzSnNvbk9iamVjdCh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG59XG5leHBvcnRzLmlzSnNvbk9iamVjdCA9IGlzSnNvbk9iamVjdDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmJhc2U2NGVuY29kZSA9IGV4cG9ydHMuYmFzZTY0ZGVjb2RlID0gdm9pZCAwO1xuLy8gbG9va3VwIHRhYmxlIGZyb20gYmFzZTY0IGNoYXJhY3RlciB0byBieXRlXG5sZXQgZW5jVGFibGUgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLycuc3BsaXQoJycpO1xuLy8gbG9va3VwIHRhYmxlIGZyb20gYmFzZTY0IGNoYXJhY3RlciAqY29kZSogdG8gYnl0ZSBiZWNhdXNlIGxvb2t1cCBieSBudW1iZXIgaXMgZmFzdFxubGV0IGRlY1RhYmxlID0gW107XG5mb3IgKGxldCBpID0gMDsgaSA8IGVuY1RhYmxlLmxlbmd0aDsgaSsrKVxuICAgIGRlY1RhYmxlW2VuY1RhYmxlW2ldLmNoYXJDb2RlQXQoMCldID0gaTtcbi8vIHN1cHBvcnQgYmFzZTY0dXJsIHZhcmlhbnRzXG5kZWNUYWJsZVtcIi1cIi5jaGFyQ29kZUF0KDApXSA9IGVuY1RhYmxlLmluZGV4T2YoXCIrXCIpO1xuZGVjVGFibGVbXCJfXCIuY2hhckNvZGVBdCgwKV0gPSBlbmNUYWJsZS5pbmRleE9mKFwiL1wiKTtcbi8qKlxuICogRGVjb2RlcyBhIGJhc2U2NCBzdHJpbmcgdG8gYSBieXRlIGFycmF5LlxuICpcbiAqIC0gaWdub3JlcyB3aGl0ZS1zcGFjZSwgaW5jbHVkaW5nIGxpbmUgYnJlYWtzIGFuZCB0YWJzXG4gKiAtIGFsbG93cyBpbm5lciBwYWRkaW5nIChjYW4gZGVjb2RlIGNvbmNhdGVuYXRlZCBiYXNlNjQgc3RyaW5ncylcbiAqIC0gZG9lcyBub3QgcmVxdWlyZSBwYWRkaW5nXG4gKiAtIHVuZGVyc3RhbmRzIGJhc2U2NHVybCBlbmNvZGluZzpcbiAqICAgXCItXCIgaW5zdGVhZCBvZiBcIitcIixcbiAqICAgXCJfXCIgaW5zdGVhZCBvZiBcIi9cIixcbiAqICAgbm8gcGFkZGluZ1xuICovXG5mdW5jdGlvbiBiYXNlNjRkZWNvZGUoYmFzZTY0U3RyKSB7XG4gICAgLy8gZXN0aW1hdGUgYnl0ZSBzaXplLCBub3QgYWNjb3VudGluZyBmb3IgaW5uZXIgcGFkZGluZyBhbmQgd2hpdGVzcGFjZVxuICAgIGxldCBlcyA9IGJhc2U2NFN0ci5sZW5ndGggKiAzIC8gNDtcbiAgICAvLyBpZiAoZXMgJSAzICE9PSAwKVxuICAgIC8vIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBiYXNlNjQgc3RyaW5nJyk7XG4gICAgaWYgKGJhc2U2NFN0cltiYXNlNjRTdHIubGVuZ3RoIC0gMl0gPT0gJz0nKVxuICAgICAgICBlcyAtPSAyO1xuICAgIGVsc2UgaWYgKGJhc2U2NFN0cltiYXNlNjRTdHIubGVuZ3RoIC0gMV0gPT0gJz0nKVxuICAgICAgICBlcyAtPSAxO1xuICAgIGxldCBieXRlcyA9IG5ldyBVaW50OEFycmF5KGVzKSwgYnl0ZVBvcyA9IDAsIC8vIHBvc2l0aW9uIGluIGJ5dGUgYXJyYXlcbiAgICBncm91cFBvcyA9IDAsIC8vIHBvc2l0aW9uIGluIGJhc2U2NCBncm91cFxuICAgIGIsIC8vIGN1cnJlbnQgYnl0ZVxuICAgIHAgPSAwIC8vIHByZXZpb3VzIGJ5dGVcbiAgICA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiYXNlNjRTdHIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYiA9IGRlY1RhYmxlW2Jhc2U2NFN0ci5jaGFyQ29kZUF0KGkpXTtcbiAgICAgICAgaWYgKGIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gbm9pbnNwZWN0aW9uIEZhbGxUaHJvdWdoSW5Td2l0Y2hTdGF0ZW1lbnRKU1xuICAgICAgICAgICAgc3dpdGNoIChiYXNlNjRTdHJbaV0pIHtcbiAgICAgICAgICAgICAgICBjYXNlICc9JzpcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBQb3MgPSAwOyAvLyByZXNldCBzdGF0ZSB3aGVuIHBhZGRpbmcgZm91bmRcbiAgICAgICAgICAgICAgICBjYXNlICdcXG4nOlxuICAgICAgICAgICAgICAgIGNhc2UgJ1xccic6XG4gICAgICAgICAgICAgICAgY2FzZSAnXFx0JzpcbiAgICAgICAgICAgICAgICBjYXNlICcgJzpcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7IC8vIHNraXAgd2hpdGUtc3BhY2UsIGFuZCBwYWRkaW5nXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoYGludmFsaWQgYmFzZTY0IHN0cmluZy5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKGdyb3VwUG9zKSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgcCA9IGI7XG4gICAgICAgICAgICAgICAgZ3JvdXBQb3MgPSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgIGJ5dGVzW2J5dGVQb3MrK10gPSBwIDw8IDIgfCAoYiAmIDQ4KSA+PiA0O1xuICAgICAgICAgICAgICAgIHAgPSBiO1xuICAgICAgICAgICAgICAgIGdyb3VwUG9zID0gMjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICBieXRlc1tieXRlUG9zKytdID0gKHAgJiAxNSkgPDwgNCB8IChiICYgNjApID4+IDI7XG4gICAgICAgICAgICAgICAgcCA9IGI7XG4gICAgICAgICAgICAgICAgZ3JvdXBQb3MgPSAzO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgIGJ5dGVzW2J5dGVQb3MrK10gPSAocCAmIDMpIDw8IDYgfCBiO1xuICAgICAgICAgICAgICAgIGdyb3VwUG9zID0gMDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoZ3JvdXBQb3MgPT0gMSlcbiAgICAgICAgdGhyb3cgRXJyb3IoYGludmFsaWQgYmFzZTY0IHN0cmluZy5gKTtcbiAgICByZXR1cm4gYnl0ZXMuc3ViYXJyYXkoMCwgYnl0ZVBvcyk7XG59XG5leHBvcnRzLmJhc2U2NGRlY29kZSA9IGJhc2U2NGRlY29kZTtcbi8qKlxuICogRW5jb2RlcyBhIGJ5dGUgYXJyYXkgdG8gYSBiYXNlNjQgc3RyaW5nLlxuICogQWRkcyBwYWRkaW5nIGF0IHRoZSBlbmQuXG4gKiBEb2VzIG5vdCBpbnNlcnQgbmV3bGluZXMuXG4gKi9cbmZ1bmN0aW9uIGJhc2U2NGVuY29kZShieXRlcykge1xuICAgIGxldCBiYXNlNjQgPSAnJywgZ3JvdXBQb3MgPSAwLCAvLyBwb3NpdGlvbiBpbiBiYXNlNjQgZ3JvdXBcbiAgICBiLCAvLyBjdXJyZW50IGJ5dGVcbiAgICBwID0gMDsgLy8gY2Fycnkgb3ZlciBmcm9tIHByZXZpb3VzIGJ5dGVcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGIgPSBieXRlc1tpXTtcbiAgICAgICAgc3dpdGNoIChncm91cFBvcykge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgIGJhc2U2NCArPSBlbmNUYWJsZVtiID4+IDJdO1xuICAgICAgICAgICAgICAgIHAgPSAoYiAmIDMpIDw8IDQ7XG4gICAgICAgICAgICAgICAgZ3JvdXBQb3MgPSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgIGJhc2U2NCArPSBlbmNUYWJsZVtwIHwgYiA+PiA0XTtcbiAgICAgICAgICAgICAgICBwID0gKGIgJiAxNSkgPDwgMjtcbiAgICAgICAgICAgICAgICBncm91cFBvcyA9IDI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgYmFzZTY0ICs9IGVuY1RhYmxlW3AgfCBiID4+IDZdO1xuICAgICAgICAgICAgICAgIGJhc2U2NCArPSBlbmNUYWJsZVtiICYgNjNdO1xuICAgICAgICAgICAgICAgIGdyb3VwUG9zID0gMDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBwYWRkaW5nIHJlcXVpcmVkP1xuICAgIGlmIChncm91cFBvcykge1xuICAgICAgICBiYXNlNjQgKz0gZW5jVGFibGVbcF07XG4gICAgICAgIGJhc2U2NCArPSAnPSc7XG4gICAgICAgIGlmIChncm91cFBvcyA9PSAxKVxuICAgICAgICAgICAgYmFzZTY0ICs9ICc9JztcbiAgICB9XG4gICAgcmV0dXJuIGJhc2U2NDtcbn1cbmV4cG9ydHMuYmFzZTY0ZW5jb2RlID0gYmFzZTY0ZW5jb2RlO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgMjAxNiwgRGFuaWVsIFdpcnR6ICBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy9cbi8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZVxuLy8gbWV0OlxuLy9cbi8vICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbi8vICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuLy8gKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodFxuLy8gICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlXG4vLyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4vLyAqIE5laXRoZXIgdGhlIG5hbWUgb2YgaXRzIGF1dGhvciwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzXG4vLyAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZVxuLy8gICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cbi8vXG4vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTXG4vLyBcIkFTIElTXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UXG4vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Jcbi8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUXG4vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCxcbi8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Rcbi8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLFxuLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZXG4vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Vcbi8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnV0ZjhyZWFkID0gdm9pZCAwO1xuY29uc3QgZnJvbUNoYXJDb2RlcyA9IChjaHVuaykgPT4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsIGNodW5rKTtcbi8qKlxuICogQGRlcHJlY2F0ZWQgVGhpcyBmdW5jdGlvbiB3aWxsIG5vIGxvbmdlciBiZSBleHBvcnRlZCB3aXRoIHRoZSBuZXh0IG1ham9yXG4gKiByZWxlYXNlLCBzaW5jZSBwcm90b2J1Zi10cyBoYXMgc3dpdGNoIHRvIFRleHREZWNvZGVyIEFQSS4gSWYgeW91IG5lZWQgdGhpc1xuICogZnVuY3Rpb24sIHBsZWFzZSBtaWdyYXRlIHRvIEBwcm90b2J1ZmpzL3V0ZjguIEZvciBjb250ZXh0LCBzZWVcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS90aW1vc3RhbW0vcHJvdG9idWYtdHMvaXNzdWVzLzE4NFxuICpcbiAqIFJlYWRzIFVURjggYnl0ZXMgYXMgYSBzdHJpbmcuXG4gKlxuICogU2VlIFtwcm90b2J1ZmpzIC8gdXRmOF0oaHR0cHM6Ly9naXRodWIuY29tL3Byb3RvYnVmanMvcHJvdG9idWYuanMvYmxvYi85ODkzZTM1Yjg1NDYyMWNjZTY0YWY0YmY2YmUyY2ZmNGZiODkyNzk2L2xpYi91dGY4L2luZGV4LmpzI0w0MClcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTYsIERhbmllbCBXaXJ0elxuICovXG5mdW5jdGlvbiB1dGY4cmVhZChieXRlcykge1xuICAgIGlmIChieXRlcy5sZW5ndGggPCAxKVxuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICBsZXQgcG9zID0gMCwgLy8gcG9zaXRpb24gaW4gYnl0ZXNcbiAgICBwYXJ0cyA9IFtdLCBjaHVuayA9IFtdLCBpID0gMCwgLy8gY2hhciBvZmZzZXRcbiAgICB0OyAvLyB0ZW1wb3JhcnlcbiAgICBsZXQgbGVuID0gYnl0ZXMubGVuZ3RoO1xuICAgIHdoaWxlIChwb3MgPCBsZW4pIHtcbiAgICAgICAgdCA9IGJ5dGVzW3BvcysrXTtcbiAgICAgICAgaWYgKHQgPCAxMjgpXG4gICAgICAgICAgICBjaHVua1tpKytdID0gdDtcbiAgICAgICAgZWxzZSBpZiAodCA+IDE5MSAmJiB0IDwgMjI0KVxuICAgICAgICAgICAgY2h1bmtbaSsrXSA9ICh0ICYgMzEpIDw8IDYgfCBieXRlc1twb3MrK10gJiA2MztcbiAgICAgICAgZWxzZSBpZiAodCA+IDIzOSAmJiB0IDwgMzY1KSB7XG4gICAgICAgICAgICB0ID0gKCh0ICYgNykgPDwgMTggfCAoYnl0ZXNbcG9zKytdICYgNjMpIDw8IDEyIHwgKGJ5dGVzW3BvcysrXSAmIDYzKSA8PCA2IHwgYnl0ZXNbcG9zKytdICYgNjMpIC0gMHgxMDAwMDtcbiAgICAgICAgICAgIGNodW5rW2krK10gPSAweEQ4MDAgKyAodCA+PiAxMCk7XG4gICAgICAgICAgICBjaHVua1tpKytdID0gMHhEQzAwICsgKHQgJiAxMDIzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgICBjaHVua1tpKytdID0gKHQgJiAxNSkgPDwgMTIgfCAoYnl0ZXNbcG9zKytdICYgNjMpIDw8IDYgfCBieXRlc1twb3MrK10gJiA2MztcbiAgICAgICAgaWYgKGkgPiA4MTkxKSB7XG4gICAgICAgICAgICBwYXJ0cy5wdXNoKGZyb21DaGFyQ29kZXMoY2h1bmspKTtcbiAgICAgICAgICAgIGkgPSAwO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChwYXJ0cy5sZW5ndGgpIHtcbiAgICAgICAgaWYgKGkpXG4gICAgICAgICAgICBwYXJ0cy5wdXNoKGZyb21DaGFyQ29kZXMoY2h1bmsuc2xpY2UoMCwgaSkpKTtcbiAgICAgICAgcmV0dXJuIHBhcnRzLmpvaW4oXCJcIik7XG4gICAgfVxuICAgIHJldHVybiBmcm9tQ2hhckNvZGVzKGNodW5rLnNsaWNlKDAsIGkpKTtcbn1cbmV4cG9ydHMudXRmOHJlYWQgPSB1dGY4cmVhZDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLldpcmVUeXBlID0gZXhwb3J0cy5tZXJnZUJpbmFyeU9wdGlvbnMgPSBleHBvcnRzLlVua25vd25GaWVsZEhhbmRsZXIgPSB2b2lkIDA7XG4vKipcbiAqIFRoaXMgaGFuZGxlciBpbXBsZW1lbnRzIHRoZSBkZWZhdWx0IGJlaGF2aW91ciBmb3IgdW5rbm93biBmaWVsZHMuXG4gKiBXaGVuIHJlYWRpbmcgZGF0YSwgdW5rbm93biBmaWVsZHMgYXJlIHN0b3JlZCBvbiB0aGUgbWVzc2FnZSwgaW4gYVxuICogc3ltYm9sIHByb3BlcnR5LlxuICogV2hlbiB3cml0aW5nIGRhdGEsIHRoZSBzeW1ib2wgcHJvcGVydHkgaXMgcXVlcmllZCBhbmQgdW5rbm93biBmaWVsZHNcbiAqIGFyZSBzZXJpYWxpemVkIGludG8gdGhlIG91dHB1dCBhZ2Fpbi5cbiAqL1xudmFyIFVua25vd25GaWVsZEhhbmRsZXI7XG4oZnVuY3Rpb24gKFVua25vd25GaWVsZEhhbmRsZXIpIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3ltYm9sIHVzZWQgdG8gc3RvcmUgdW5rbm93biBmaWVsZHMgZm9yIGEgbWVzc2FnZS5cbiAgICAgKiBUaGUgcHJvcGVydHkgbXVzdCBjb25mb3JtIHRvIGBVbmtub3duRmllbGRDb250YWluZXJgLlxuICAgICAqL1xuICAgIFVua25vd25GaWVsZEhhbmRsZXIuc3ltYm9sID0gU3ltYm9sLmZvcihcInByb3RvYnVmLXRzL3Vua25vd25cIik7XG4gICAgLyoqXG4gICAgICogU3RvcmUgYW4gdW5rbm93biBmaWVsZCBkdXJpbmcgYmluYXJ5IHJlYWQgZGlyZWN0bHkgb24gdGhlIG1lc3NhZ2UuXG4gICAgICogVGhpcyBtZXRob2QgaXMgY29tcGF0aWJsZSB3aXRoIGBCaW5hcnlSZWFkT3B0aW9ucy5yZWFkVW5rbm93bkZpZWxkYC5cbiAgICAgKi9cbiAgICBVbmtub3duRmllbGRIYW5kbGVyLm9uUmVhZCA9ICh0eXBlTmFtZSwgbWVzc2FnZSwgZmllbGRObywgd2lyZVR5cGUsIGRhdGEpID0+IHtcbiAgICAgICAgbGV0IGNvbnRhaW5lciA9IGlzKG1lc3NhZ2UpID8gbWVzc2FnZVtVbmtub3duRmllbGRIYW5kbGVyLnN5bWJvbF0gOiBtZXNzYWdlW1Vua25vd25GaWVsZEhhbmRsZXIuc3ltYm9sXSA9IFtdO1xuICAgICAgICBjb250YWluZXIucHVzaCh7IG5vOiBmaWVsZE5vLCB3aXJlVHlwZSwgZGF0YSB9KTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFdyaXRlIHVua25vd24gZmllbGRzIHN0b3JlZCBmb3IgdGhlIG1lc3NhZ2UgdG8gdGhlIHdyaXRlci5cbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBjb21wYXRpYmxlIHdpdGggYEJpbmFyeVdyaXRlT3B0aW9ucy53cml0ZVVua25vd25GaWVsZHNgLlxuICAgICAqL1xuICAgIFVua25vd25GaWVsZEhhbmRsZXIub25Xcml0ZSA9ICh0eXBlTmFtZSwgbWVzc2FnZSwgd3JpdGVyKSA9PiB7XG4gICAgICAgIGZvciAobGV0IHsgbm8sIHdpcmVUeXBlLCBkYXRhIH0gb2YgVW5rbm93bkZpZWxkSGFuZGxlci5saXN0KG1lc3NhZ2UpKVxuICAgICAgICAgICAgd3JpdGVyLnRhZyhubywgd2lyZVR5cGUpLnJhdyhkYXRhKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIExpc3QgdW5rbm93biBmaWVsZHMgc3RvcmVkIGZvciB0aGUgbWVzc2FnZS5cbiAgICAgKiBOb3RlIHRoYXQgdGhlcmUgbWF5IGJlIG11bHRpcGxlcyBmaWVsZHMgd2l0aCB0aGUgc2FtZSBudW1iZXIuXG4gICAgICovXG4gICAgVW5rbm93bkZpZWxkSGFuZGxlci5saXN0ID0gKG1lc3NhZ2UsIGZpZWxkTm8pID0+IHtcbiAgICAgICAgaWYgKGlzKG1lc3NhZ2UpKSB7XG4gICAgICAgICAgICBsZXQgYWxsID0gbWVzc2FnZVtVbmtub3duRmllbGRIYW5kbGVyLnN5bWJvbF07XG4gICAgICAgICAgICByZXR1cm4gZmllbGRObyA/IGFsbC5maWx0ZXIodWYgPT4gdWYubm8gPT0gZmllbGRObykgOiBhbGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgbGFzdCB1bmtub3duIGZpZWxkIGJ5IGZpZWxkIG51bWJlci5cbiAgICAgKi9cbiAgICBVbmtub3duRmllbGRIYW5kbGVyLmxhc3QgPSAobWVzc2FnZSwgZmllbGRObykgPT4gVW5rbm93bkZpZWxkSGFuZGxlci5saXN0KG1lc3NhZ2UsIGZpZWxkTm8pLnNsaWNlKC0xKVswXTtcbiAgICBjb25zdCBpcyA9IChtZXNzYWdlKSA9PiBtZXNzYWdlICYmIEFycmF5LmlzQXJyYXkobWVzc2FnZVtVbmtub3duRmllbGRIYW5kbGVyLnN5bWJvbF0pO1xufSkoVW5rbm93bkZpZWxkSGFuZGxlciA9IGV4cG9ydHMuVW5rbm93bkZpZWxkSGFuZGxlciB8fCAoZXhwb3J0cy5Vbmtub3duRmllbGRIYW5kbGVyID0ge30pKTtcbi8qKlxuICogTWVyZ2VzIGJpbmFyeSB3cml0ZSBvciByZWFkIG9wdGlvbnMuIExhdGVyIHZhbHVlcyBvdmVycmlkZSBlYXJsaWVyIHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VCaW5hcnlPcHRpb25zKGEsIGIpIHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBhKSwgYik7XG59XG5leHBvcnRzLm1lcmdlQmluYXJ5T3B0aW9ucyA9IG1lcmdlQmluYXJ5T3B0aW9ucztcbi8qKlxuICogUHJvdG9idWYgYmluYXJ5IGZvcm1hdCB3aXJlIHR5cGVzLlxuICpcbiAqIEEgd2lyZSB0eXBlIHByb3ZpZGVzIGp1c3QgZW5vdWdoIGluZm9ybWF0aW9uIHRvIGZpbmQgdGhlIGxlbmd0aCBvZiB0aGVcbiAqIGZvbGxvd2luZyB2YWx1ZS5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL2VuY29kaW5nI3N0cnVjdHVyZVxuICovXG52YXIgV2lyZVR5cGU7XG4oZnVuY3Rpb24gKFdpcmVUeXBlKSB7XG4gICAgLyoqXG4gICAgICogVXNlZCBmb3IgaW50MzIsIGludDY0LCB1aW50MzIsIHVpbnQ2NCwgc2ludDMyLCBzaW50NjQsIGJvb2wsIGVudW1cbiAgICAgKi9cbiAgICBXaXJlVHlwZVtXaXJlVHlwZVtcIlZhcmludFwiXSA9IDBdID0gXCJWYXJpbnRcIjtcbiAgICAvKipcbiAgICAgKiBVc2VkIGZvciBmaXhlZDY0LCBzZml4ZWQ2NCwgZG91YmxlLlxuICAgICAqIEFsd2F5cyA4IGJ5dGVzIHdpdGggbGl0dGxlLWVuZGlhbiBieXRlIG9yZGVyLlxuICAgICAqL1xuICAgIFdpcmVUeXBlW1dpcmVUeXBlW1wiQml0NjRcIl0gPSAxXSA9IFwiQml0NjRcIjtcbiAgICAvKipcbiAgICAgKiBVc2VkIGZvciBzdHJpbmcsIGJ5dGVzLCBlbWJlZGRlZCBtZXNzYWdlcywgcGFja2VkIHJlcGVhdGVkIGZpZWxkc1xuICAgICAqXG4gICAgICogT25seSByZXBlYXRlZCBudW1lcmljIHR5cGVzICh0eXBlcyB3aGljaCB1c2UgdGhlIHZhcmludCwgMzItYml0LFxuICAgICAqIG9yIDY0LWJpdCB3aXJlIHR5cGVzKSBjYW4gYmUgcGFja2VkLiBJbiBwcm90bzMsIHN1Y2ggZmllbGRzIGFyZVxuICAgICAqIHBhY2tlZCBieSBkZWZhdWx0LlxuICAgICAqL1xuICAgIFdpcmVUeXBlW1dpcmVUeXBlW1wiTGVuZ3RoRGVsaW1pdGVkXCJdID0gMl0gPSBcIkxlbmd0aERlbGltaXRlZFwiO1xuICAgIC8qKlxuICAgICAqIFVzZWQgZm9yIGdyb3Vwc1xuICAgICAqIEBkZXByZWNhdGVkXG4gICAgICovXG4gICAgV2lyZVR5cGVbV2lyZVR5cGVbXCJTdGFydEdyb3VwXCJdID0gM10gPSBcIlN0YXJ0R3JvdXBcIjtcbiAgICAvKipcbiAgICAgKiBVc2VkIGZvciBncm91cHNcbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqL1xuICAgIFdpcmVUeXBlW1dpcmVUeXBlW1wiRW5kR3JvdXBcIl0gPSA0XSA9IFwiRW5kR3JvdXBcIjtcbiAgICAvKipcbiAgICAgKiBVc2VkIGZvciBmaXhlZDMyLCBzZml4ZWQzMiwgZmxvYXQuXG4gICAgICogQWx3YXlzIDQgYnl0ZXMgd2l0aCBsaXR0bGUtZW5kaWFuIGJ5dGUgb3JkZXIuXG4gICAgICovXG4gICAgV2lyZVR5cGVbV2lyZVR5cGVbXCJCaXQzMlwiXSA9IDVdID0gXCJCaXQzMlwiO1xufSkoV2lyZVR5cGUgPSBleHBvcnRzLldpcmVUeXBlIHx8IChleHBvcnRzLldpcmVUeXBlID0ge30pKTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vXG4vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbi8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmVcbi8vIG1ldDpcbi8vXG4vLyAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4vLyAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmVcbi8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXJcbi8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGVcbi8vIGRpc3RyaWJ1dGlvbi5cbi8vICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0c1xuLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb21cbi8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG4vL1xuLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SU1xuLy8gXCJBUyBJU1wiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVFxuLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SXG4vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVFxuLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsXG4vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UXG4vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSxcbi8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWVxuLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFXG4vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuLy9cbi8vIENvZGUgZ2VuZXJhdGVkIGJ5IHRoZSBQcm90b2NvbCBCdWZmZXIgY29tcGlsZXIgaXMgb3duZWQgYnkgdGhlIG93bmVyXG4vLyBvZiB0aGUgaW5wdXQgZmlsZSB1c2VkIHdoZW4gZ2VuZXJhdGluZyBpdC4gIFRoaXMgY29kZSBpcyBub3Rcbi8vIHN0YW5kYWxvbmUgYW5kIHJlcXVpcmVzIGEgc3VwcG9ydCBsaWJyYXJ5IHRvIGJlIGxpbmtlZCB3aXRoIGl0LiAgVGhpc1xuLy8gc3VwcG9ydCBsaWJyYXJ5IGlzIGl0c2VsZiBjb3ZlcmVkIGJ5IHRoZSBhYm92ZSBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy52YXJpbnQzMnJlYWQgPSBleHBvcnRzLnZhcmludDMyd3JpdGUgPSBleHBvcnRzLmludDY0dG9TdHJpbmcgPSBleHBvcnRzLmludDY0ZnJvbVN0cmluZyA9IGV4cG9ydHMudmFyaW50NjR3cml0ZSA9IGV4cG9ydHMudmFyaW50NjRyZWFkID0gdm9pZCAwO1xuLyoqXG4gKiBSZWFkIGEgNjQgYml0IHZhcmludCBhcyB0d28gSlMgbnVtYmVycy5cbiAqXG4gKiBSZXR1cm5zIHR1cGxlOlxuICogWzBdOiBsb3cgYml0c1xuICogWzBdOiBoaWdoIGJpdHNcbiAqXG4gKiBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3Byb3RvY29sYnVmZmVycy9wcm90b2J1Zi9ibG9iLzhhNzE5MjdkNzRhNGNlMzRlZmUyZDg3NjlmZGExOThmNTJkMjBkMTIvanMvZXhwZXJpbWVudGFsL3J1bnRpbWUva2VybmVsL2J1ZmZlcl9kZWNvZGVyLmpzI0wxNzVcbiAqL1xuZnVuY3Rpb24gdmFyaW50NjRyZWFkKCkge1xuICAgIGxldCBsb3dCaXRzID0gMDtcbiAgICBsZXQgaGlnaEJpdHMgPSAwO1xuICAgIGZvciAobGV0IHNoaWZ0ID0gMDsgc2hpZnQgPCAyODsgc2hpZnQgKz0gNykge1xuICAgICAgICBsZXQgYiA9IHRoaXMuYnVmW3RoaXMucG9zKytdO1xuICAgICAgICBsb3dCaXRzIHw9IChiICYgMHg3RikgPDwgc2hpZnQ7XG4gICAgICAgIGlmICgoYiAmIDB4ODApID09IDApIHtcbiAgICAgICAgICAgIHRoaXMuYXNzZXJ0Qm91bmRzKCk7XG4gICAgICAgICAgICByZXR1cm4gW2xvd0JpdHMsIGhpZ2hCaXRzXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBsZXQgbWlkZGxlQnl0ZSA9IHRoaXMuYnVmW3RoaXMucG9zKytdO1xuICAgIC8vIGxhc3QgZm91ciBiaXRzIG9mIHRoZSBmaXJzdCAzMiBiaXQgbnVtYmVyXG4gICAgbG93Qml0cyB8PSAobWlkZGxlQnl0ZSAmIDB4MEYpIDw8IDI4O1xuICAgIC8vIDMgdXBwZXIgYml0cyBhcmUgcGFydCBvZiB0aGUgbmV4dCAzMiBiaXQgbnVtYmVyXG4gICAgaGlnaEJpdHMgPSAobWlkZGxlQnl0ZSAmIDB4NzApID4+IDQ7XG4gICAgaWYgKChtaWRkbGVCeXRlICYgMHg4MCkgPT0gMCkge1xuICAgICAgICB0aGlzLmFzc2VydEJvdW5kcygpO1xuICAgICAgICByZXR1cm4gW2xvd0JpdHMsIGhpZ2hCaXRzXTtcbiAgICB9XG4gICAgZm9yIChsZXQgc2hpZnQgPSAzOyBzaGlmdCA8PSAzMTsgc2hpZnQgKz0gNykge1xuICAgICAgICBsZXQgYiA9IHRoaXMuYnVmW3RoaXMucG9zKytdO1xuICAgICAgICBoaWdoQml0cyB8PSAoYiAmIDB4N0YpIDw8IHNoaWZ0O1xuICAgICAgICBpZiAoKGIgJiAweDgwKSA9PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmFzc2VydEJvdW5kcygpO1xuICAgICAgICAgICAgcmV0dXJuIFtsb3dCaXRzLCBoaWdoQml0c107XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHZhcmludCcpO1xufVxuZXhwb3J0cy52YXJpbnQ2NHJlYWQgPSB2YXJpbnQ2NHJlYWQ7XG4vKipcbiAqIFdyaXRlIGEgNjQgYml0IHZhcmludCwgZ2l2ZW4gYXMgdHdvIEpTIG51bWJlcnMsIHRvIHRoZSBnaXZlbiBieXRlcyBhcnJheS5cbiAqXG4gKiBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3Byb3RvY29sYnVmZmVycy9wcm90b2J1Zi9ibG9iLzhhNzE5MjdkNzRhNGNlMzRlZmUyZDg3NjlmZGExOThmNTJkMjBkMTIvanMvZXhwZXJpbWVudGFsL3J1bnRpbWUva2VybmVsL3dyaXRlci5qcyNMMzQ0XG4gKi9cbmZ1bmN0aW9uIHZhcmludDY0d3JpdGUobG8sIGhpLCBieXRlcykge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMjg7IGkgPSBpICsgNykge1xuICAgICAgICBjb25zdCBzaGlmdCA9IGxvID4+PiBpO1xuICAgICAgICBjb25zdCBoYXNOZXh0ID0gISgoc2hpZnQgPj4+IDcpID09IDAgJiYgaGkgPT0gMCk7XG4gICAgICAgIGNvbnN0IGJ5dGUgPSAoaGFzTmV4dCA/IHNoaWZ0IHwgMHg4MCA6IHNoaWZ0KSAmIDB4RkY7XG4gICAgICAgIGJ5dGVzLnB1c2goYnl0ZSk7XG4gICAgICAgIGlmICghaGFzTmV4dCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHNwbGl0Qml0cyA9ICgobG8gPj4+IDI4KSAmIDB4MEYpIHwgKChoaSAmIDB4MDcpIDw8IDQpO1xuICAgIGNvbnN0IGhhc01vcmVCaXRzID0gISgoaGkgPj4gMykgPT0gMCk7XG4gICAgYnl0ZXMucHVzaCgoaGFzTW9yZUJpdHMgPyBzcGxpdEJpdHMgfCAweDgwIDogc3BsaXRCaXRzKSAmIDB4RkYpO1xuICAgIGlmICghaGFzTW9yZUJpdHMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMzsgaSA8IDMxOyBpID0gaSArIDcpIHtcbiAgICAgICAgY29uc3Qgc2hpZnQgPSBoaSA+Pj4gaTtcbiAgICAgICAgY29uc3QgaGFzTmV4dCA9ICEoKHNoaWZ0ID4+PiA3KSA9PSAwKTtcbiAgICAgICAgY29uc3QgYnl0ZSA9IChoYXNOZXh0ID8gc2hpZnQgfCAweDgwIDogc2hpZnQpICYgMHhGRjtcbiAgICAgICAgYnl0ZXMucHVzaChieXRlKTtcbiAgICAgICAgaWYgKCFoYXNOZXh0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG4gICAgYnl0ZXMucHVzaCgoaGkgPj4+IDMxKSAmIDB4MDEpO1xufVxuZXhwb3J0cy52YXJpbnQ2NHdyaXRlID0gdmFyaW50NjR3cml0ZTtcbi8vIGNvbnN0YW50cyBmb3IgYmluYXJ5IG1hdGhcbmNvbnN0IFRXT19QV1JfMzJfREJMID0gKDEgPDwgMTYpICogKDEgPDwgMTYpO1xuLyoqXG4gKiBQYXJzZSBkZWNpbWFsIHN0cmluZyBvZiA2NCBiaXQgaW50ZWdlciB2YWx1ZSBhcyB0d28gSlMgbnVtYmVycy5cbiAqXG4gKiBSZXR1cm5zIHR1cGxlOlxuICogWzBdOiBtaW51cyBzaWduP1xuICogWzFdOiBsb3cgYml0c1xuICogWzJdOiBoaWdoIGJpdHNcbiAqXG4gKiBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLlxuICovXG5mdW5jdGlvbiBpbnQ2NGZyb21TdHJpbmcoZGVjKSB7XG4gICAgLy8gQ2hlY2sgZm9yIG1pbnVzIHNpZ24uXG4gICAgbGV0IG1pbnVzID0gZGVjWzBdID09ICctJztcbiAgICBpZiAobWludXMpXG4gICAgICAgIGRlYyA9IGRlYy5zbGljZSgxKTtcbiAgICAvLyBXb3JrIDYgZGVjaW1hbCBkaWdpdHMgYXQgYSB0aW1lLCBhY3RpbmcgbGlrZSB3ZSdyZSBjb252ZXJ0aW5nIGJhc2UgMWU2XG4gICAgLy8gZGlnaXRzIHRvIGJpbmFyeS4gVGhpcyBpcyBzYWZlIHRvIGRvIHdpdGggZmxvYXRpbmcgcG9pbnQgbWF0aCBiZWNhdXNlXG4gICAgLy8gTnVtYmVyLmlzU2FmZUludGVnZXIoQUxMXzMyX0JJVFMgKiAxZTYpID09IHRydWUuXG4gICAgY29uc3QgYmFzZSA9IDFlNjtcbiAgICBsZXQgbG93Qml0cyA9IDA7XG4gICAgbGV0IGhpZ2hCaXRzID0gMDtcbiAgICBmdW5jdGlvbiBhZGQxZTZkaWdpdChiZWdpbiwgZW5kKSB7XG4gICAgICAgIC8vIE5vdGU6IE51bWJlcignJykgaXMgMC5cbiAgICAgICAgY29uc3QgZGlnaXQxZTYgPSBOdW1iZXIoZGVjLnNsaWNlKGJlZ2luLCBlbmQpKTtcbiAgICAgICAgaGlnaEJpdHMgKj0gYmFzZTtcbiAgICAgICAgbG93Qml0cyA9IGxvd0JpdHMgKiBiYXNlICsgZGlnaXQxZTY7XG4gICAgICAgIC8vIENhcnJ5IGJpdHMgZnJvbSBsb3dCaXRzIHRvIGhpZ2hCaXRzXG4gICAgICAgIGlmIChsb3dCaXRzID49IFRXT19QV1JfMzJfREJMKSB7XG4gICAgICAgICAgICBoaWdoQml0cyA9IGhpZ2hCaXRzICsgKChsb3dCaXRzIC8gVFdPX1BXUl8zMl9EQkwpIHwgMCk7XG4gICAgICAgICAgICBsb3dCaXRzID0gbG93Qml0cyAlIFRXT19QV1JfMzJfREJMO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFkZDFlNmRpZ2l0KC0yNCwgLTE4KTtcbiAgICBhZGQxZTZkaWdpdCgtMTgsIC0xMik7XG4gICAgYWRkMWU2ZGlnaXQoLTEyLCAtNik7XG4gICAgYWRkMWU2ZGlnaXQoLTYpO1xuICAgIHJldHVybiBbbWludXMsIGxvd0JpdHMsIGhpZ2hCaXRzXTtcbn1cbmV4cG9ydHMuaW50NjRmcm9tU3RyaW5nID0gaW50NjRmcm9tU3RyaW5nO1xuLyoqXG4gKiBGb3JtYXQgNjQgYml0IGludGVnZXIgdmFsdWUgKGFzIHR3byBKUyBudW1iZXJzKSB0byBkZWNpbWFsIHN0cmluZy5cbiAqXG4gKiBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLlxuICovXG5mdW5jdGlvbiBpbnQ2NHRvU3RyaW5nKGJpdHNMb3csIGJpdHNIaWdoKSB7XG4gICAgLy8gU2tpcCB0aGUgZXhwZW5zaXZlIGNvbnZlcnNpb24gaWYgdGhlIG51bWJlciBpcyBzbWFsbCBlbm91Z2ggdG8gdXNlIHRoZVxuICAgIC8vIGJ1aWx0LWluIGNvbnZlcnNpb25zLlxuICAgIGlmICgoYml0c0hpZ2ggPj4+IDApIDw9IDB4MUZGRkZGKSB7XG4gICAgICAgIHJldHVybiAnJyArIChUV09fUFdSXzMyX0RCTCAqIGJpdHNIaWdoICsgKGJpdHNMb3cgPj4+IDApKTtcbiAgICB9XG4gICAgLy8gV2hhdCB0aGlzIGNvZGUgaXMgZG9pbmcgaXMgZXNzZW50aWFsbHkgY29udmVydGluZyB0aGUgaW5wdXQgbnVtYmVyIGZyb21cbiAgICAvLyBiYXNlLTIgdG8gYmFzZS0xZTcsIHdoaWNoIGFsbG93cyB1cyB0byByZXByZXNlbnQgdGhlIDY0LWJpdCByYW5nZSB3aXRoXG4gICAgLy8gb25seSAzICh2ZXJ5IGxhcmdlKSBkaWdpdHMuIFRob3NlIGRpZ2l0cyBhcmUgdGhlbiB0cml2aWFsIHRvIGNvbnZlcnQgdG9cbiAgICAvLyBhIGJhc2UtMTAgc3RyaW5nLlxuICAgIC8vIFRoZSBtYWdpYyBudW1iZXJzIHVzZWQgaGVyZSBhcmUgLVxuICAgIC8vIDJeMjQgPSAxNjc3NzIxNiA9ICgxLDY3NzcyMTYpIGluIGJhc2UtMWU3LlxuICAgIC8vIDJeNDggPSAyODE0NzQ5NzY3MTA2NTYgPSAoMiw4MTQ3NDk3LDY3MTA2NTYpIGluIGJhc2UtMWU3LlxuICAgIC8vIFNwbGl0IDMyOjMyIHJlcHJlc2VudGF0aW9uIGludG8gMTY6MjQ6MjQgcmVwcmVzZW50YXRpb24gc28gb3VyXG4gICAgLy8gaW50ZXJtZWRpYXRlIGRpZ2l0cyBkb24ndCBvdmVyZmxvdy5cbiAgICBsZXQgbG93ID0gYml0c0xvdyAmIDB4RkZGRkZGO1xuICAgIGxldCBtaWQgPSAoKChiaXRzTG93ID4+PiAyNCkgfCAoYml0c0hpZ2ggPDwgOCkpID4+PiAwKSAmIDB4RkZGRkZGO1xuICAgIGxldCBoaWdoID0gKGJpdHNIaWdoID4+IDE2KSAmIDB4RkZGRjtcbiAgICAvLyBBc3NlbWJsZSBvdXIgdGhyZWUgYmFzZS0xZTcgZGlnaXRzLCBpZ25vcmluZyBjYXJyaWVzLiBUaGUgbWF4aW11bVxuICAgIC8vIHZhbHVlIGluIGEgZGlnaXQgYXQgdGhpcyBzdGVwIGlzIHJlcHJlc2VudGFibGUgYXMgYSA0OC1iaXQgaW50ZWdlciwgd2hpY2hcbiAgICAvLyBjYW4gYmUgc3RvcmVkIGluIGEgNjQtYml0IGZsb2F0aW5nIHBvaW50IG51bWJlci5cbiAgICBsZXQgZGlnaXRBID0gbG93ICsgKG1pZCAqIDY3NzcyMTYpICsgKGhpZ2ggKiA2NzEwNjU2KTtcbiAgICBsZXQgZGlnaXRCID0gbWlkICsgKGhpZ2ggKiA4MTQ3NDk3KTtcbiAgICBsZXQgZGlnaXRDID0gKGhpZ2ggKiAyKTtcbiAgICAvLyBBcHBseSBjYXJyaWVzIGZyb20gQSB0byBCIGFuZCBmcm9tIEIgdG8gQy5cbiAgICBsZXQgYmFzZSA9IDEwMDAwMDAwO1xuICAgIGlmIChkaWdpdEEgPj0gYmFzZSkge1xuICAgICAgICBkaWdpdEIgKz0gTWF0aC5mbG9vcihkaWdpdEEgLyBiYXNlKTtcbiAgICAgICAgZGlnaXRBICU9IGJhc2U7XG4gICAgfVxuICAgIGlmIChkaWdpdEIgPj0gYmFzZSkge1xuICAgICAgICBkaWdpdEMgKz0gTWF0aC5mbG9vcihkaWdpdEIgLyBiYXNlKTtcbiAgICAgICAgZGlnaXRCICU9IGJhc2U7XG4gICAgfVxuICAgIC8vIENvbnZlcnQgYmFzZS0xZTcgZGlnaXRzIHRvIGJhc2UtMTAsIHdpdGggb3B0aW9uYWwgbGVhZGluZyB6ZXJvZXMuXG4gICAgZnVuY3Rpb24gZGVjaW1hbEZyb20xZTcoZGlnaXQxZTcsIG5lZWRMZWFkaW5nWmVyb3MpIHtcbiAgICAgICAgbGV0IHBhcnRpYWwgPSBkaWdpdDFlNyA/IFN0cmluZyhkaWdpdDFlNykgOiAnJztcbiAgICAgICAgaWYgKG5lZWRMZWFkaW5nWmVyb3MpIHtcbiAgICAgICAgICAgIHJldHVybiAnMDAwMDAwMCcuc2xpY2UocGFydGlhbC5sZW5ndGgpICsgcGFydGlhbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFydGlhbDtcbiAgICB9XG4gICAgcmV0dXJuIGRlY2ltYWxGcm9tMWU3KGRpZ2l0QywgLypuZWVkTGVhZGluZ1plcm9zPSovIDApICtcbiAgICAgICAgZGVjaW1hbEZyb20xZTcoZGlnaXRCLCAvKm5lZWRMZWFkaW5nWmVyb3M9Ki8gZGlnaXRDKSArXG4gICAgICAgIC8vIElmIHRoZSBmaW5hbCAxZTcgZGlnaXQgZGlkbid0IG5lZWQgbGVhZGluZyB6ZXJvcywgd2Ugd291bGQgaGF2ZVxuICAgICAgICAvLyByZXR1cm5lZCB2aWEgdGhlIHRyaXZpYWwgY29kZSBwYXRoIGF0IHRoZSB0b3AuXG4gICAgICAgIGRlY2ltYWxGcm9tMWU3KGRpZ2l0QSwgLypuZWVkTGVhZGluZ1plcm9zPSovIDEpO1xufVxuZXhwb3J0cy5pbnQ2NHRvU3RyaW5nID0gaW50NjR0b1N0cmluZztcbi8qKlxuICogV3JpdGUgYSAzMiBiaXQgdmFyaW50LCBzaWduZWQgb3IgdW5zaWduZWQuIFNhbWUgYXMgYHZhcmludDY0d3JpdGUoMCwgdmFsdWUsIGJ5dGVzKWBcbiAqXG4gKiBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3Byb3RvY29sYnVmZmVycy9wcm90b2J1Zi9ibG9iLzFiMTg4MzNmNGYyYTJmNjgxZjRlNGEyNWNkZjNiMGE0MzExNWVjMjYvanMvYmluYXJ5L2VuY29kZXIuanMjTDE0NFxuICovXG5mdW5jdGlvbiB2YXJpbnQzMndyaXRlKHZhbHVlLCBieXRlcykge1xuICAgIGlmICh2YWx1ZSA+PSAwKSB7XG4gICAgICAgIC8vIHdyaXRlIHZhbHVlIGFzIHZhcmludCAzMlxuICAgICAgICB3aGlsZSAodmFsdWUgPiAweDdmKSB7XG4gICAgICAgICAgICBieXRlcy5wdXNoKCh2YWx1ZSAmIDB4N2YpIHwgMHg4MCk7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlID4+PiA3O1xuICAgICAgICB9XG4gICAgICAgIGJ5dGVzLnB1c2godmFsdWUpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA5OyBpKyspIHtcbiAgICAgICAgICAgIGJ5dGVzLnB1c2godmFsdWUgJiAxMjcgfCAxMjgpO1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSA+PiA3O1xuICAgICAgICB9XG4gICAgICAgIGJ5dGVzLnB1c2goMSk7XG4gICAgfVxufVxuZXhwb3J0cy52YXJpbnQzMndyaXRlID0gdmFyaW50MzJ3cml0ZTtcbi8qKlxuICogUmVhZCBhbiB1bnNpZ25lZCAzMiBiaXQgdmFyaW50LlxuICpcbiAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vcHJvdG9jb2xidWZmZXJzL3Byb3RvYnVmL2Jsb2IvOGE3MTkyN2Q3NGE0Y2UzNGVmZTJkODc2OWZkYTE5OGY1MmQyMGQxMi9qcy9leHBlcmltZW50YWwvcnVudGltZS9rZXJuZWwvYnVmZmVyX2RlY29kZXIuanMjTDIyMFxuICovXG5mdW5jdGlvbiB2YXJpbnQzMnJlYWQoKSB7XG4gICAgbGV0IGIgPSB0aGlzLmJ1Zlt0aGlzLnBvcysrXTtcbiAgICBsZXQgcmVzdWx0ID0gYiAmIDB4N0Y7XG4gICAgaWYgKChiICYgMHg4MCkgPT0gMCkge1xuICAgICAgICB0aGlzLmFzc2VydEJvdW5kcygpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBiID0gdGhpcy5idWZbdGhpcy5wb3MrK107XG4gICAgcmVzdWx0IHw9IChiICYgMHg3RikgPDwgNztcbiAgICBpZiAoKGIgJiAweDgwKSA9PSAwKSB7XG4gICAgICAgIHRoaXMuYXNzZXJ0Qm91bmRzKCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGIgPSB0aGlzLmJ1Zlt0aGlzLnBvcysrXTtcbiAgICByZXN1bHQgfD0gKGIgJiAweDdGKSA8PCAxNDtcbiAgICBpZiAoKGIgJiAweDgwKSA9PSAwKSB7XG4gICAgICAgIHRoaXMuYXNzZXJ0Qm91bmRzKCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGIgPSB0aGlzLmJ1Zlt0aGlzLnBvcysrXTtcbiAgICByZXN1bHQgfD0gKGIgJiAweDdGKSA8PCAyMTtcbiAgICBpZiAoKGIgJiAweDgwKSA9PSAwKSB7XG4gICAgICAgIHRoaXMuYXNzZXJ0Qm91bmRzKCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIC8vIEV4dHJhY3Qgb25seSBsYXN0IDQgYml0c1xuICAgIGIgPSB0aGlzLmJ1Zlt0aGlzLnBvcysrXTtcbiAgICByZXN1bHQgfD0gKGIgJiAweDBGKSA8PCAyODtcbiAgICBmb3IgKGxldCByZWFkQnl0ZXMgPSA1OyAoKGIgJiAweDgwKSAhPT0gMCkgJiYgcmVhZEJ5dGVzIDwgMTA7IHJlYWRCeXRlcysrKVxuICAgICAgICBiID0gdGhpcy5idWZbdGhpcy5wb3MrK107XG4gICAgaWYgKChiICYgMHg4MCkgIT0gMClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHZhcmludCcpO1xuICAgIHRoaXMuYXNzZXJ0Qm91bmRzKCk7XG4gICAgLy8gUmVzdWx0IGNhbiBoYXZlIDMyIGJpdHMsIGNvbnZlcnQgaXQgdG8gdW5zaWduZWRcbiAgICByZXR1cm4gcmVzdWx0ID4+PiAwO1xufVxuZXhwb3J0cy52YXJpbnQzMnJlYWQgPSB2YXJpbnQzMnJlYWQ7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5QYkxvbmcgPSBleHBvcnRzLlBiVUxvbmcgPSBleHBvcnRzLmRldGVjdEJpID0gdm9pZCAwO1xuY29uc3QgZ29vZ192YXJpbnRfMSA9IHJlcXVpcmUoXCIuL2dvb2ctdmFyaW50XCIpO1xubGV0IEJJO1xuZnVuY3Rpb24gZGV0ZWN0QmkoKSB7XG4gICAgY29uc3QgZHYgPSBuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDgpKTtcbiAgICBjb25zdCBvayA9IGdsb2JhbFRoaXMuQmlnSW50ICE9PSB1bmRlZmluZWRcbiAgICAgICAgJiYgdHlwZW9mIGR2LmdldEJpZ0ludDY0ID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgJiYgdHlwZW9mIGR2LmdldEJpZ1VpbnQ2NCA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICYmIHR5cGVvZiBkdi5zZXRCaWdJbnQ2NCA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICYmIHR5cGVvZiBkdi5zZXRCaWdVaW50NjQgPT09IFwiZnVuY3Rpb25cIjtcbiAgICBCSSA9IG9rID8ge1xuICAgICAgICBNSU46IEJpZ0ludChcIi05MjIzMzcyMDM2ODU0Nzc1ODA4XCIpLFxuICAgICAgICBNQVg6IEJpZ0ludChcIjkyMjMzNzIwMzY4NTQ3NzU4MDdcIiksXG4gICAgICAgIFVNSU46IEJpZ0ludChcIjBcIiksXG4gICAgICAgIFVNQVg6IEJpZ0ludChcIjE4NDQ2NzQ0MDczNzA5NTUxNjE1XCIpLFxuICAgICAgICBDOiBCaWdJbnQsXG4gICAgICAgIFY6IGR2LFxuICAgIH0gOiB1bmRlZmluZWQ7XG59XG5leHBvcnRzLmRldGVjdEJpID0gZGV0ZWN0Qmk7XG5kZXRlY3RCaSgpO1xuZnVuY3Rpb24gYXNzZXJ0QmkoYmkpIHtcbiAgICBpZiAoIWJpKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCaWdJbnQgdW5hdmFpbGFibGUsIHNlZSBodHRwczovL2dpdGh1Yi5jb20vdGltb3N0YW1tL3Byb3RvYnVmLXRzL2Jsb2IvdjEuMC44L01BTlVBTC5tZCNiaWdpbnQtc3VwcG9ydFwiKTtcbn1cbi8vIHVzZWQgdG8gdmFsaWRhdGUgZnJvbShzdHJpbmcpIGlucHV0ICh3aGVuIGJpZ2ludCBpcyB1bmF2YWlsYWJsZSlcbmNvbnN0IFJFX0RFQ0lNQUxfU1RSID0gL14tP1swLTldKyQvO1xuLy8gY29uc3RhbnRzIGZvciBiaW5hcnkgbWF0aFxuY29uc3QgVFdPX1BXUl8zMl9EQkwgPSAweDEwMDAwMDAwMDtcbmNvbnN0IEhBTEZfMl9QV1JfMzIgPSAweDA4MDAwMDAwMDtcbi8vIGJhc2UgY2xhc3MgZm9yIFBiTG9uZyBhbmQgUGJVTG9uZyBwcm92aWRlcyBzaGFyZWQgY29kZVxuY2xhc3MgU2hhcmVkUGJMb25nIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugd2l0aCB0aGUgZ2l2ZW4gYml0cy5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihsbywgaGkpIHtcbiAgICAgICAgdGhpcy5sbyA9IGxvIHwgMDtcbiAgICAgICAgdGhpcy5oaSA9IGhpIHwgMDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSXMgdGhpcyBpbnN0YW5jZSBlcXVhbCB0byAwP1xuICAgICAqL1xuICAgIGlzWmVybygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG8gPT0gMCAmJiB0aGlzLmhpID09IDA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgdG8gYSBuYXRpdmUgbnVtYmVyLlxuICAgICAqL1xuICAgIHRvTnVtYmVyKCkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gdGhpcy5oaSAqIFRXT19QV1JfMzJfREJMICsgKHRoaXMubG8gPj4+IDApO1xuICAgICAgICBpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKHJlc3VsdCkpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJjYW5ub3QgY29udmVydCB0byBzYWZlIG51bWJlclwiKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vKipcbiAqIDY0LWJpdCB1bnNpZ25lZCBpbnRlZ2VyIGFzIHR3byAzMi1iaXQgdmFsdWVzLlxuICogQ29udmVydHMgYmV0d2VlbiBgc3RyaW5nYCwgYG51bWJlcmAgYW5kIGBiaWdpbnRgIHJlcHJlc2VudGF0aW9ucy5cbiAqL1xuY2xhc3MgUGJVTG9uZyBleHRlbmRzIFNoYXJlZFBiTG9uZyB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGluc3RhbmNlIGZyb20gYSBgc3RyaW5nYCwgYG51bWJlcmAgb3IgYGJpZ2ludGAuXG4gICAgICovXG4gICAgc3RhdGljIGZyb20odmFsdWUpIHtcbiAgICAgICAgaWYgKEJJKVxuICAgICAgICAgICAgLy8gbm9pbnNwZWN0aW9uIEZhbGxUaHJvdWdoSW5Td2l0Y2hTdGF0ZW1lbnRKU1xuICAgICAgICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBcIjBcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLlpFUk87XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBcIlwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzdHJpbmcgaXMgbm8gaW50ZWdlcicpO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IEJJLkModmFsdWUpO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuWkVSTztcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBCSS5DKHZhbHVlKTtcbiAgICAgICAgICAgICAgICBjYXNlIFwiYmlnaW50XCI6XG4gICAgICAgICAgICAgICAgICAgIGlmICghdmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5aRVJPO1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPCBCSS5VTUlOKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzaWduZWQgdmFsdWUgZm9yIHVsb25nJyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA+IEJJLlVNQVgpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vsb25nIHRvbyBsYXJnZScpO1xuICAgICAgICAgICAgICAgICAgICBCSS5WLnNldEJpZ1VpbnQ2NCgwLCB2YWx1ZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUGJVTG9uZyhCSS5WLmdldEludDMyKDAsIHRydWUpLCBCSS5WLmdldEludDMyKDQsIHRydWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBcIjBcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLlpFUk87XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUudHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIVJFX0RFQ0lNQUxfU1RSLnRlc3QodmFsdWUpKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzdHJpbmcgaXMgbm8gaW50ZWdlcicpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgW21pbnVzLCBsbywgaGldID0gZ29vZ192YXJpbnRfMS5pbnQ2NGZyb21TdHJpbmcodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobWludXMpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NpZ25lZCB2YWx1ZSBmb3IgdWxvbmcnKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQYlVMb25nKGxvLCBoaSk7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLlpFUk87XG4gICAgICAgICAgICAgICAgICAgIGlmICghTnVtYmVyLmlzU2FmZUludGVnZXIodmFsdWUpKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdudW1iZXIgaXMgbm8gaW50ZWdlcicpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPCAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzaWduZWQgdmFsdWUgZm9yIHVsb25nJyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUGJVTG9uZyh2YWx1ZSwgdmFsdWUgLyBUV09fUFdSXzMyX0RCTCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biB2YWx1ZSAnICsgdHlwZW9mIHZhbHVlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29udmVydCB0byBkZWNpbWFsIHN0cmluZy5cbiAgICAgKi9cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIEJJID8gdGhpcy50b0JpZ0ludCgpLnRvU3RyaW5nKCkgOiBnb29nX3ZhcmludF8xLmludDY0dG9TdHJpbmcodGhpcy5sbywgdGhpcy5oaSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgdG8gbmF0aXZlIGJpZ2ludC5cbiAgICAgKi9cbiAgICB0b0JpZ0ludCgpIHtcbiAgICAgICAgYXNzZXJ0QmkoQkkpO1xuICAgICAgICBCSS5WLnNldEludDMyKDAsIHRoaXMubG8sIHRydWUpO1xuICAgICAgICBCSS5WLnNldEludDMyKDQsIHRoaXMuaGksIHRydWUpO1xuICAgICAgICByZXR1cm4gQkkuVi5nZXRCaWdVaW50NjQoMCwgdHJ1ZSk7XG4gICAgfVxufVxuZXhwb3J0cy5QYlVMb25nID0gUGJVTG9uZztcbi8qKlxuICogdWxvbmcgMCBzaW5nbGV0b24uXG4gKi9cblBiVUxvbmcuWkVSTyA9IG5ldyBQYlVMb25nKDAsIDApO1xuLyoqXG4gKiA2NC1iaXQgc2lnbmVkIGludGVnZXIgYXMgdHdvIDMyLWJpdCB2YWx1ZXMuXG4gKiBDb252ZXJ0cyBiZXR3ZWVuIGBzdHJpbmdgLCBgbnVtYmVyYCBhbmQgYGJpZ2ludGAgcmVwcmVzZW50YXRpb25zLlxuICovXG5jbGFzcyBQYkxvbmcgZXh0ZW5kcyBTaGFyZWRQYkxvbmcge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZSBpbnN0YW5jZSBmcm9tIGEgYHN0cmluZ2AsIGBudW1iZXJgIG9yIGBiaWdpbnRgLlxuICAgICAqL1xuICAgIHN0YXRpYyBmcm9tKHZhbHVlKSB7XG4gICAgICAgIGlmIChCSSlcbiAgICAgICAgICAgIC8vIG5vaW5zcGVjdGlvbiBGYWxsVGhyb3VnaEluU3dpdGNoU3RhdGVtZW50SlNcbiAgICAgICAgICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gXCIwXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5aRVJPO1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gXCJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc3RyaW5nIGlzIG5vIGludGVnZXInKTtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBCSS5DKHZhbHVlKTtcbiAgICAgICAgICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLlpFUk87XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gQkkuQyh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgY2FzZSBcImJpZ2ludFwiOlxuICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuWkVSTztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlIDwgQkkuTUlOKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzaWduZWQgbG9uZyB0b28gc21hbGwnKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID4gQkkuTUFYKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzaWduZWQgbG9uZyB0b28gbGFyZ2UnKTtcbiAgICAgICAgICAgICAgICAgICAgQkkuVi5zZXRCaWdJbnQ2NCgwLCB2YWx1ZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUGJMb25nKEJJLlYuZ2V0SW50MzIoMCwgdHJ1ZSksIEJJLlYuZ2V0SW50MzIoNCwgdHJ1ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IFwiMFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuWkVSTztcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS50cmltKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghUkVfREVDSU1BTF9TVFIudGVzdCh2YWx1ZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N0cmluZyBpcyBubyBpbnRlZ2VyJyk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBbbWludXMsIGxvLCBoaV0gPSBnb29nX3ZhcmludF8xLmludDY0ZnJvbVN0cmluZyh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtaW51cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhpID4gSEFMRl8yX1BXUl8zMiB8fCAoaGkgPT0gSEFMRl8yX1BXUl8zMiAmJiBsbyAhPSAwKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NpZ25lZCBsb25nIHRvbyBzbWFsbCcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGhpID49IEhBTEZfMl9QV1JfMzIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NpZ25lZCBsb25nIHRvbyBsYXJnZScpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgcGJsID0gbmV3IFBiTG9uZyhsbywgaGkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWludXMgPyBwYmwubmVnYXRlKCkgOiBwYmw7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLlpFUk87XG4gICAgICAgICAgICAgICAgICAgIGlmICghTnVtYmVyLmlzU2FmZUludGVnZXIodmFsdWUpKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdudW1iZXIgaXMgbm8gaW50ZWdlcicpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgPiAwXG4gICAgICAgICAgICAgICAgICAgICAgICA/IG5ldyBQYkxvbmcodmFsdWUsIHZhbHVlIC8gVFdPX1BXUl8zMl9EQkwpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG5ldyBQYkxvbmcoLXZhbHVlLCAtdmFsdWUgLyBUV09fUFdSXzMyX0RCTCkubmVnYXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biB2YWx1ZSAnICsgdHlwZW9mIHZhbHVlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRG8gd2UgaGF2ZSBhIG1pbnVzIHNpZ24/XG4gICAgICovXG4gICAgaXNOZWdhdGl2ZSgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLmhpICYgSEFMRl8yX1BXUl8zMikgIT09IDA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE5lZ2F0ZSB0d28ncyBjb21wbGVtZW50LlxuICAgICAqIEludmVydCBhbGwgdGhlIGJpdHMgYW5kIGFkZCBvbmUgdG8gdGhlIHJlc3VsdC5cbiAgICAgKi9cbiAgICBuZWdhdGUoKSB7XG4gICAgICAgIGxldCBoaSA9IH50aGlzLmhpLCBsbyA9IHRoaXMubG87XG4gICAgICAgIGlmIChsbylcbiAgICAgICAgICAgIGxvID0gfmxvICsgMTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgaGkgKz0gMTtcbiAgICAgICAgcmV0dXJuIG5ldyBQYkxvbmcobG8sIGhpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29udmVydCB0byBkZWNpbWFsIHN0cmluZy5cbiAgICAgKi9cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgaWYgKEJJKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9CaWdJbnQoKS50b1N0cmluZygpO1xuICAgICAgICBpZiAodGhpcy5pc05lZ2F0aXZlKCkpIHtcbiAgICAgICAgICAgIGxldCBuID0gdGhpcy5uZWdhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiAnLScgKyBnb29nX3ZhcmludF8xLmludDY0dG9TdHJpbmcobi5sbywgbi5oaSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdvb2dfdmFyaW50XzEuaW50NjR0b1N0cmluZyh0aGlzLmxvLCB0aGlzLmhpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29udmVydCB0byBuYXRpdmUgYmlnaW50LlxuICAgICAqL1xuICAgIHRvQmlnSW50KCkge1xuICAgICAgICBhc3NlcnRCaShCSSk7XG4gICAgICAgIEJJLlYuc2V0SW50MzIoMCwgdGhpcy5sbywgdHJ1ZSk7XG4gICAgICAgIEJJLlYuc2V0SW50MzIoNCwgdGhpcy5oaSwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiBCSS5WLmdldEJpZ0ludDY0KDAsIHRydWUpO1xuICAgIH1cbn1cbmV4cG9ydHMuUGJMb25nID0gUGJMb25nO1xuLyoqXG4gKiBsb25nIDAgc2luZ2xldG9uLlxuICovXG5QYkxvbmcuWkVSTyA9IG5ldyBQYkxvbmcoMCwgMCk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5CaW5hcnlSZWFkZXIgPSBleHBvcnRzLmJpbmFyeVJlYWRPcHRpb25zID0gdm9pZCAwO1xuY29uc3QgYmluYXJ5X2Zvcm1hdF9jb250cmFjdF8xID0gcmVxdWlyZShcIi4vYmluYXJ5LWZvcm1hdC1jb250cmFjdFwiKTtcbmNvbnN0IHBiX2xvbmdfMSA9IHJlcXVpcmUoXCIuL3BiLWxvbmdcIik7XG5jb25zdCBnb29nX3ZhcmludF8xID0gcmVxdWlyZShcIi4vZ29vZy12YXJpbnRcIik7XG5jb25zdCBkZWZhdWx0c1JlYWQgPSB7XG4gICAgcmVhZFVua25vd25GaWVsZDogdHJ1ZSxcbiAgICByZWFkZXJGYWN0b3J5OiBieXRlcyA9PiBuZXcgQmluYXJ5UmVhZGVyKGJ5dGVzKSxcbn07XG4vKipcbiAqIE1ha2Ugb3B0aW9ucyBmb3IgcmVhZGluZyBiaW5hcnkgZGF0YSBmb3JtIHBhcnRpYWwgb3B0aW9ucy5cbiAqL1xuZnVuY3Rpb24gYmluYXJ5UmVhZE9wdGlvbnMob3B0aW9ucykge1xuICAgIHJldHVybiBvcHRpb25zID8gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0c1JlYWQpLCBvcHRpb25zKSA6IGRlZmF1bHRzUmVhZDtcbn1cbmV4cG9ydHMuYmluYXJ5UmVhZE9wdGlvbnMgPSBiaW5hcnlSZWFkT3B0aW9ucztcbmNsYXNzIEJpbmFyeVJlYWRlciB7XG4gICAgY29uc3RydWN0b3IoYnVmLCB0ZXh0RGVjb2Rlcikge1xuICAgICAgICB0aGlzLnZhcmludDY0ID0gZ29vZ192YXJpbnRfMS52YXJpbnQ2NHJlYWQ7IC8vIGRpcnR5IGNhc3QgZm9yIGB0aGlzYFxuICAgICAgICAvKipcbiAgICAgICAgICogUmVhZCBhIGB1aW50MzJgIGZpZWxkLCBhbiB1bnNpZ25lZCAzMiBiaXQgdmFyaW50LlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy51aW50MzIgPSBnb29nX3ZhcmludF8xLnZhcmludDMycmVhZDsgLy8gZGlydHkgY2FzdCBmb3IgYHRoaXNgIGFuZCBhY2Nlc3MgdG8gcHJvdGVjdGVkIGBidWZgXG4gICAgICAgIHRoaXMuYnVmID0gYnVmO1xuICAgICAgICB0aGlzLmxlbiA9IGJ1Zi5sZW5ndGg7XG4gICAgICAgIHRoaXMucG9zID0gMDtcbiAgICAgICAgdGhpcy52aWV3ID0gbmV3IERhdGFWaWV3KGJ1Zi5idWZmZXIsIGJ1Zi5ieXRlT2Zmc2V0LCBidWYuYnl0ZUxlbmd0aCk7XG4gICAgICAgIHRoaXMudGV4dERlY29kZXIgPSB0ZXh0RGVjb2RlciAhPT0gbnVsbCAmJiB0ZXh0RGVjb2RlciAhPT0gdm9pZCAwID8gdGV4dERlY29kZXIgOiBuZXcgVGV4dERlY29kZXIoXCJ1dGYtOFwiLCB7XG4gICAgICAgICAgICBmYXRhbDogdHJ1ZSxcbiAgICAgICAgICAgIGlnbm9yZUJPTTogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWRzIGEgdGFnIC0gZmllbGQgbnVtYmVyIGFuZCB3aXJlIHR5cGUuXG4gICAgICovXG4gICAgdGFnKCkge1xuICAgICAgICBsZXQgdGFnID0gdGhpcy51aW50MzIoKSwgZmllbGRObyA9IHRhZyA+Pj4gMywgd2lyZVR5cGUgPSB0YWcgJiA3O1xuICAgICAgICBpZiAoZmllbGRObyA8PSAwIHx8IHdpcmVUeXBlIDwgMCB8fCB3aXJlVHlwZSA+IDUpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbGxlZ2FsIHRhZzogZmllbGQgbm8gXCIgKyBmaWVsZE5vICsgXCIgd2lyZSB0eXBlIFwiICsgd2lyZVR5cGUpO1xuICAgICAgICByZXR1cm4gW2ZpZWxkTm8sIHdpcmVUeXBlXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2tpcCBvbmUgZWxlbWVudCBvbiB0aGUgd2lyZSBhbmQgcmV0dXJuIHRoZSBza2lwcGVkIGRhdGEuXG4gICAgICogU3VwcG9ydHMgV2lyZVR5cGUuU3RhcnRHcm91cCBzaW5jZSB2Mi4wLjAtYWxwaGEuMjMuXG4gICAgICovXG4gICAgc2tpcCh3aXJlVHlwZSkge1xuICAgICAgICBsZXQgc3RhcnQgPSB0aGlzLnBvcztcbiAgICAgICAgLy8gbm9pbnNwZWN0aW9uIEZhbGxUaHJvdWdoSW5Td2l0Y2hTdGF0ZW1lbnRKU1xuICAgICAgICBzd2l0Y2ggKHdpcmVUeXBlKSB7XG4gICAgICAgICAgICBjYXNlIGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMS5XaXJlVHlwZS5WYXJpbnQ6XG4gICAgICAgICAgICAgICAgd2hpbGUgKHRoaXMuYnVmW3RoaXMucG9zKytdICYgMHg4MCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMS5XaXJlVHlwZS5CaXQ2NDpcbiAgICAgICAgICAgICAgICB0aGlzLnBvcyArPSA0O1xuICAgICAgICAgICAgY2FzZSBiaW5hcnlfZm9ybWF0X2NvbnRyYWN0XzEuV2lyZVR5cGUuQml0MzI6XG4gICAgICAgICAgICAgICAgdGhpcy5wb3MgKz0gNDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgYmluYXJ5X2Zvcm1hdF9jb250cmFjdF8xLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZDpcbiAgICAgICAgICAgICAgICBsZXQgbGVuID0gdGhpcy51aW50MzIoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBvcyArPSBsZW47XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMS5XaXJlVHlwZS5TdGFydEdyb3VwOlxuICAgICAgICAgICAgICAgIC8vIEZyb20gZGVzY3JpcHRvci5wcm90bzogR3JvdXAgdHlwZSBpcyBkZXByZWNhdGVkLCBub3Qgc3VwcG9ydGVkIGluIHByb3RvMy5cbiAgICAgICAgICAgICAgICAvLyBCdXQgd2UgbXVzdCBzdGlsbCBiZSBhYmxlIHRvIHBhcnNlIGFuZCB0cmVhdCBhcyB1bmtub3duLlxuICAgICAgICAgICAgICAgIGxldCB0O1xuICAgICAgICAgICAgICAgIHdoaWxlICgodCA9IHRoaXMudGFnKClbMV0pICE9PSBiaW5hcnlfZm9ybWF0X2NvbnRyYWN0XzEuV2lyZVR5cGUuRW5kR3JvdXApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5za2lwKHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiY2FudCBza2lwIHdpcmUgdHlwZSBcIiArIHdpcmVUeXBlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFzc2VydEJvdW5kcygpO1xuICAgICAgICByZXR1cm4gdGhpcy5idWYuc3ViYXJyYXkoc3RhcnQsIHRoaXMucG9zKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhyb3dzIGVycm9yIGlmIHBvc2l0aW9uIGluIGJ5dGUgYXJyYXkgaXMgb3V0IG9mIHJhbmdlLlxuICAgICAqL1xuICAgIGFzc2VydEJvdW5kcygpIHtcbiAgICAgICAgaWYgKHRoaXMucG9zID4gdGhpcy5sZW4pXG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcInByZW1hdHVyZSBFT0ZcIik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWQgYSBgaW50MzJgIGZpZWxkLCBhIHNpZ25lZCAzMiBiaXQgdmFyaW50LlxuICAgICAqL1xuICAgIGludDMyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy51aW50MzIoKSB8IDA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWQgYSBgc2ludDMyYCBmaWVsZCwgYSBzaWduZWQsIHppZ3phZy1lbmNvZGVkIDMyLWJpdCB2YXJpbnQuXG4gICAgICovXG4gICAgc2ludDMyKCkge1xuICAgICAgICBsZXQgenplID0gdGhpcy51aW50MzIoKTtcbiAgICAgICAgLy8gZGVjb2RlIHppZ3phZ1xuICAgICAgICByZXR1cm4gKHp6ZSA+Pj4gMSkgXiAtKHp6ZSAmIDEpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWFkIGEgYGludDY0YCBmaWVsZCwgYSBzaWduZWQgNjQtYml0IHZhcmludC5cbiAgICAgKi9cbiAgICBpbnQ2NCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBwYl9sb25nXzEuUGJMb25nKC4uLnRoaXMudmFyaW50NjQoKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWQgYSBgdWludDY0YCBmaWVsZCwgYW4gdW5zaWduZWQgNjQtYml0IHZhcmludC5cbiAgICAgKi9cbiAgICB1aW50NjQoKSB7XG4gICAgICAgIHJldHVybiBuZXcgcGJfbG9uZ18xLlBiVUxvbmcoLi4udGhpcy52YXJpbnQ2NCgpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVhZCBhIGBzaW50NjRgIGZpZWxkLCBhIHNpZ25lZCwgemlnLXphZy1lbmNvZGVkIDY0LWJpdCB2YXJpbnQuXG4gICAgICovXG4gICAgc2ludDY0KCkge1xuICAgICAgICBsZXQgW2xvLCBoaV0gPSB0aGlzLnZhcmludDY0KCk7XG4gICAgICAgIC8vIGRlY29kZSB6aWcgemFnXG4gICAgICAgIGxldCBzID0gLShsbyAmIDEpO1xuICAgICAgICBsbyA9ICgobG8gPj4+IDEgfCAoaGkgJiAxKSA8PCAzMSkgXiBzKTtcbiAgICAgICAgaGkgPSAoaGkgPj4+IDEgXiBzKTtcbiAgICAgICAgcmV0dXJuIG5ldyBwYl9sb25nXzEuUGJMb25nKGxvLCBoaSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWQgYSBgYm9vbGAgZmllbGQsIGEgdmFyaWFudC5cbiAgICAgKi9cbiAgICBib29sKCkge1xuICAgICAgICBsZXQgW2xvLCBoaV0gPSB0aGlzLnZhcmludDY0KCk7XG4gICAgICAgIHJldHVybiBsbyAhPT0gMCB8fCBoaSAhPT0gMDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVhZCBhIGBmaXhlZDMyYCBmaWVsZCwgYW4gdW5zaWduZWQsIGZpeGVkLWxlbmd0aCAzMi1iaXQgaW50ZWdlci5cbiAgICAgKi9cbiAgICBmaXhlZDMyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52aWV3LmdldFVpbnQzMigodGhpcy5wb3MgKz0gNCkgLSA0LCB0cnVlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVhZCBhIGBzZml4ZWQzMmAgZmllbGQsIGEgc2lnbmVkLCBmaXhlZC1sZW5ndGggMzItYml0IGludGVnZXIuXG4gICAgICovXG4gICAgc2ZpeGVkMzIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZXcuZ2V0SW50MzIoKHRoaXMucG9zICs9IDQpIC0gNCwgdHJ1ZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWQgYSBgZml4ZWQ2NGAgZmllbGQsIGFuIHVuc2lnbmVkLCBmaXhlZC1sZW5ndGggNjQgYml0IGludGVnZXIuXG4gICAgICovXG4gICAgZml4ZWQ2NCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBwYl9sb25nXzEuUGJVTG9uZyh0aGlzLnNmaXhlZDMyKCksIHRoaXMuc2ZpeGVkMzIoKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWQgYSBgZml4ZWQ2NGAgZmllbGQsIGEgc2lnbmVkLCBmaXhlZC1sZW5ndGggNjQtYml0IGludGVnZXIuXG4gICAgICovXG4gICAgc2ZpeGVkNjQoKSB7XG4gICAgICAgIHJldHVybiBuZXcgcGJfbG9uZ18xLlBiTG9uZyh0aGlzLnNmaXhlZDMyKCksIHRoaXMuc2ZpeGVkMzIoKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWQgYSBgZmxvYXRgIGZpZWxkLCAzMi1iaXQgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLlxuICAgICAqL1xuICAgIGZsb2F0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy52aWV3LmdldEZsb2F0MzIoKHRoaXMucG9zICs9IDQpIC0gNCwgdHJ1ZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWQgYSBgZG91YmxlYCBmaWVsZCwgYSA2NC1iaXQgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLlxuICAgICAqL1xuICAgIGRvdWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlldy5nZXRGbG9hdDY0KCh0aGlzLnBvcyArPSA4KSAtIDgsIHRydWUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWFkIGEgYGJ5dGVzYCBmaWVsZCwgbGVuZ3RoLWRlbGltaXRlZCBhcmJpdHJhcnkgZGF0YS5cbiAgICAgKi9cbiAgICBieXRlcygpIHtcbiAgICAgICAgbGV0IGxlbiA9IHRoaXMudWludDMyKCk7XG4gICAgICAgIGxldCBzdGFydCA9IHRoaXMucG9zO1xuICAgICAgICB0aGlzLnBvcyArPSBsZW47XG4gICAgICAgIHRoaXMuYXNzZXJ0Qm91bmRzKCk7XG4gICAgICAgIHJldHVybiB0aGlzLmJ1Zi5zdWJhcnJheShzdGFydCwgc3RhcnQgKyBsZW4pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWFkIGEgYHN0cmluZ2AgZmllbGQsIGxlbmd0aC1kZWxpbWl0ZWQgZGF0YSBjb252ZXJ0ZWQgdG8gVVRGLTggdGV4dC5cbiAgICAgKi9cbiAgICBzdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHREZWNvZGVyLmRlY29kZSh0aGlzLmJ5dGVzKCkpO1xuICAgIH1cbn1cbmV4cG9ydHMuQmluYXJ5UmVhZGVyID0gQmluYXJ5UmVhZGVyO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYXNzZXJ0RmxvYXQzMiA9IGV4cG9ydHMuYXNzZXJ0VUludDMyID0gZXhwb3J0cy5hc3NlcnRJbnQzMiA9IGV4cG9ydHMuYXNzZXJ0TmV2ZXIgPSBleHBvcnRzLmFzc2VydCA9IHZvaWQgMDtcbi8qKlxuICogYXNzZXJ0IHRoYXQgY29uZGl0aW9uIGlzIHRydWUgb3IgdGhyb3cgZXJyb3IgKHdpdGggbWVzc2FnZSlcbiAqL1xuZnVuY3Rpb24gYXNzZXJ0KGNvbmRpdGlvbiwgbXNnKSB7XG4gICAgaWYgKCFjb25kaXRpb24pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgfVxufVxuZXhwb3J0cy5hc3NlcnQgPSBhc3NlcnQ7XG4vKipcbiAqIGFzc2VydCB0aGF0IHZhbHVlIGNhbm5vdCBleGlzdCA9IHR5cGUgYG5ldmVyYC4gdGhyb3cgcnVudGltZSBlcnJvciBpZiBpdCBkb2VzLlxuICovXG5mdW5jdGlvbiBhc3NlcnROZXZlcih2YWx1ZSwgbXNnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKG1zZyAhPT0gbnVsbCAmJiBtc2cgIT09IHZvaWQgMCA/IG1zZyA6ICdVbmV4cGVjdGVkIG9iamVjdDogJyArIHZhbHVlKTtcbn1cbmV4cG9ydHMuYXNzZXJ0TmV2ZXIgPSBhc3NlcnROZXZlcjtcbmNvbnN0IEZMT0FUMzJfTUFYID0gMy40MDI4MjM0NjYzODUyODg2ZSszOCwgRkxPQVQzMl9NSU4gPSAtMy40MDI4MjM0NjYzODUyODg2ZSszOCwgVUlOVDMyX01BWCA9IDB4RkZGRkZGRkYsIElOVDMyX01BWCA9IDBYN0ZGRkZGRkYsIElOVDMyX01JTiA9IC0wWDgwMDAwMDAwO1xuZnVuY3Rpb24gYXNzZXJ0SW50MzIoYXJnKSB7XG4gICAgaWYgKHR5cGVvZiBhcmcgIT09IFwibnVtYmVyXCIpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBpbnQgMzI6ICcgKyB0eXBlb2YgYXJnKTtcbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoYXJnKSB8fCBhcmcgPiBJTlQzMl9NQVggfHwgYXJnIDwgSU5UMzJfTUlOKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgaW50IDMyOiAnICsgYXJnKTtcbn1cbmV4cG9ydHMuYXNzZXJ0SW50MzIgPSBhc3NlcnRJbnQzMjtcbmZ1bmN0aW9uIGFzc2VydFVJbnQzMihhcmcpIHtcbiAgICBpZiAodHlwZW9mIGFyZyAhPT0gXCJudW1iZXJcIilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHVpbnQgMzI6ICcgKyB0eXBlb2YgYXJnKTtcbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoYXJnKSB8fCBhcmcgPiBVSU5UMzJfTUFYIHx8IGFyZyA8IDApXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCB1aW50IDMyOiAnICsgYXJnKTtcbn1cbmV4cG9ydHMuYXNzZXJ0VUludDMyID0gYXNzZXJ0VUludDMyO1xuZnVuY3Rpb24gYXNzZXJ0RmxvYXQzMihhcmcpIHtcbiAgICBpZiAodHlwZW9mIGFyZyAhPT0gXCJudW1iZXJcIilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGZsb2F0IDMyOiAnICsgdHlwZW9mIGFyZyk7XG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoYXJnKSlcbiAgICAgICAgcmV0dXJuO1xuICAgIGlmIChhcmcgPiBGTE9BVDMyX01BWCB8fCBhcmcgPCBGTE9BVDMyX01JTilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGZsb2F0IDMyOiAnICsgYXJnKTtcbn1cbmV4cG9ydHMuYXNzZXJ0RmxvYXQzMiA9IGFzc2VydEZsb2F0MzI7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5CaW5hcnlXcml0ZXIgPSBleHBvcnRzLmJpbmFyeVdyaXRlT3B0aW9ucyA9IHZvaWQgMDtcbmNvbnN0IHBiX2xvbmdfMSA9IHJlcXVpcmUoXCIuL3BiLWxvbmdcIik7XG5jb25zdCBnb29nX3ZhcmludF8xID0gcmVxdWlyZShcIi4vZ29vZy12YXJpbnRcIik7XG5jb25zdCBhc3NlcnRfMSA9IHJlcXVpcmUoXCIuL2Fzc2VydFwiKTtcbmNvbnN0IGRlZmF1bHRzV3JpdGUgPSB7XG4gICAgd3JpdGVVbmtub3duRmllbGRzOiB0cnVlLFxuICAgIHdyaXRlckZhY3Rvcnk6ICgpID0+IG5ldyBCaW5hcnlXcml0ZXIoKSxcbn07XG4vKipcbiAqIE1ha2Ugb3B0aW9ucyBmb3Igd3JpdGluZyBiaW5hcnkgZGF0YSBmb3JtIHBhcnRpYWwgb3B0aW9ucy5cbiAqL1xuZnVuY3Rpb24gYmluYXJ5V3JpdGVPcHRpb25zKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gb3B0aW9ucyA/IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdHNXcml0ZSksIG9wdGlvbnMpIDogZGVmYXVsdHNXcml0ZTtcbn1cbmV4cG9ydHMuYmluYXJ5V3JpdGVPcHRpb25zID0gYmluYXJ5V3JpdGVPcHRpb25zO1xuY2xhc3MgQmluYXJ5V3JpdGVyIHtcbiAgICBjb25zdHJ1Y3Rvcih0ZXh0RW5jb2Rlcikge1xuICAgICAgICAvKipcbiAgICAgICAgICogUHJldmlvdXMgZm9yayBzdGF0ZXMuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnN0YWNrID0gW107XG4gICAgICAgIHRoaXMudGV4dEVuY29kZXIgPSB0ZXh0RW5jb2RlciAhPT0gbnVsbCAmJiB0ZXh0RW5jb2RlciAhPT0gdm9pZCAwID8gdGV4dEVuY29kZXIgOiBuZXcgVGV4dEVuY29kZXIoKTtcbiAgICAgICAgdGhpcy5jaHVua3MgPSBbXTtcbiAgICAgICAgdGhpcy5idWYgPSBbXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIGFsbCBieXRlcyB3cml0dGVuIGFuZCByZXNldCB0aGlzIHdyaXRlci5cbiAgICAgKi9cbiAgICBmaW5pc2goKSB7XG4gICAgICAgIHRoaXMuY2h1bmtzLnB1c2gobmV3IFVpbnQ4QXJyYXkodGhpcy5idWYpKTsgLy8gZmx1c2ggdGhlIGJ1ZmZlclxuICAgICAgICBsZXQgbGVuID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNodW5rcy5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIGxlbiArPSB0aGlzLmNodW5rc1tpXS5sZW5ndGg7XG4gICAgICAgIGxldCBieXRlcyA9IG5ldyBVaW50OEFycmF5KGxlbik7XG4gICAgICAgIGxldCBvZmZzZXQgPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY2h1bmtzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBieXRlcy5zZXQodGhpcy5jaHVua3NbaV0sIG9mZnNldCk7XG4gICAgICAgICAgICBvZmZzZXQgKz0gdGhpcy5jaHVua3NbaV0ubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2h1bmtzID0gW107XG4gICAgICAgIHJldHVybiBieXRlcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3RhcnQgYSBuZXcgZm9yayBmb3IgbGVuZ3RoLWRlbGltaXRlZCBkYXRhIGxpa2UgYSBtZXNzYWdlXG4gICAgICogb3IgYSBwYWNrZWQgcmVwZWF0ZWQgZmllbGQuXG4gICAgICpcbiAgICAgKiBNdXN0IGJlIGpvaW5lZCBsYXRlciB3aXRoIGBqb2luKClgLlxuICAgICAqL1xuICAgIGZvcmsoKSB7XG4gICAgICAgIHRoaXMuc3RhY2sucHVzaCh7IGNodW5rczogdGhpcy5jaHVua3MsIGJ1ZjogdGhpcy5idWYgfSk7XG4gICAgICAgIHRoaXMuY2h1bmtzID0gW107XG4gICAgICAgIHRoaXMuYnVmID0gW107XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBKb2luIHRoZSBsYXN0IGZvcmsuIFdyaXRlIGl0cyBsZW5ndGggYW5kIGJ5dGVzLCB0aGVuXG4gICAgICogcmV0dXJuIHRvIHRoZSBwcmV2aW91cyBzdGF0ZS5cbiAgICAgKi9cbiAgICBqb2luKCkge1xuICAgICAgICAvLyBnZXQgY2h1bmsgb2YgZm9ya1xuICAgICAgICBsZXQgY2h1bmsgPSB0aGlzLmZpbmlzaCgpO1xuICAgICAgICAvLyByZXN0b3JlIHByZXZpb3VzIHN0YXRlXG4gICAgICAgIGxldCBwcmV2ID0gdGhpcy5zdGFjay5wb3AoKTtcbiAgICAgICAgaWYgKCFwcmV2KVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHN0YXRlLCBmb3JrIHN0YWNrIGVtcHR5Jyk7XG4gICAgICAgIHRoaXMuY2h1bmtzID0gcHJldi5jaHVua3M7XG4gICAgICAgIHRoaXMuYnVmID0gcHJldi5idWY7XG4gICAgICAgIC8vIHdyaXRlIGxlbmd0aCBvZiBjaHVuayBhcyB2YXJpbnRcbiAgICAgICAgdGhpcy51aW50MzIoY2h1bmsuYnl0ZUxlbmd0aCk7XG4gICAgICAgIHJldHVybiB0aGlzLnJhdyhjaHVuayk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyaXRlcyBhIHRhZyAoZmllbGQgbnVtYmVyIGFuZCB3aXJlIHR5cGUpLlxuICAgICAqXG4gICAgICogRXF1aXZhbGVudCB0byBgdWludDMyKCAoZmllbGRObyA8PCAzIHwgdHlwZSkgPj4+IDAgKWAuXG4gICAgICpcbiAgICAgKiBHZW5lcmF0ZWQgY29kZSBzaG91bGQgY29tcHV0ZSB0aGUgdGFnIGFoZWFkIG9mIHRpbWUgYW5kIGNhbGwgYHVpbnQzMigpYC5cbiAgICAgKi9cbiAgICB0YWcoZmllbGRObywgdHlwZSkge1xuICAgICAgICByZXR1cm4gdGhpcy51aW50MzIoKGZpZWxkTm8gPDwgMyB8IHR5cGUpID4+PiAwKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGUgYSBjaHVuayBvZiByYXcgYnl0ZXMuXG4gICAgICovXG4gICAgcmF3KGNodW5rKSB7XG4gICAgICAgIGlmICh0aGlzLmJ1Zi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuY2h1bmtzLnB1c2gobmV3IFVpbnQ4QXJyYXkodGhpcy5idWYpKTtcbiAgICAgICAgICAgIHRoaXMuYnVmID0gW107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaHVua3MucHVzaChjaHVuayk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXcml0ZSBhIGB1aW50MzJgIHZhbHVlLCBhbiB1bnNpZ25lZCAzMiBiaXQgdmFyaW50LlxuICAgICAqL1xuICAgIHVpbnQzMih2YWx1ZSkge1xuICAgICAgICBhc3NlcnRfMS5hc3NlcnRVSW50MzIodmFsdWUpO1xuICAgICAgICAvLyB3cml0ZSB2YWx1ZSBhcyB2YXJpbnQgMzIsIGlubGluZWQgZm9yIHNwZWVkXG4gICAgICAgIHdoaWxlICh2YWx1ZSA+IDB4N2YpIHtcbiAgICAgICAgICAgIHRoaXMuYnVmLnB1c2goKHZhbHVlICYgMHg3ZikgfCAweDgwKTtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgPj4+IDc7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5idWYucHVzaCh2YWx1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXcml0ZSBhIGBpbnQzMmAgdmFsdWUsIGEgc2lnbmVkIDMyIGJpdCB2YXJpbnQuXG4gICAgICovXG4gICAgaW50MzIodmFsdWUpIHtcbiAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0SW50MzIodmFsdWUpO1xuICAgICAgICBnb29nX3ZhcmludF8xLnZhcmludDMyd3JpdGUodmFsdWUsIHRoaXMuYnVmKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyaXRlIGEgYGJvb2xgIHZhbHVlLCBhIHZhcmlhbnQuXG4gICAgICovXG4gICAgYm9vbCh2YWx1ZSkge1xuICAgICAgICB0aGlzLmJ1Zi5wdXNoKHZhbHVlID8gMSA6IDApO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGUgYSBgYnl0ZXNgIHZhbHVlLCBsZW5ndGgtZGVsaW1pdGVkIGFyYml0cmFyeSBkYXRhLlxuICAgICAqL1xuICAgIGJ5dGVzKHZhbHVlKSB7XG4gICAgICAgIHRoaXMudWludDMyKHZhbHVlLmJ5dGVMZW5ndGgpOyAvLyB3cml0ZSBsZW5ndGggb2YgY2h1bmsgYXMgdmFyaW50XG4gICAgICAgIHJldHVybiB0aGlzLnJhdyh2YWx1ZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyaXRlIGEgYHN0cmluZ2AgdmFsdWUsIGxlbmd0aC1kZWxpbWl0ZWQgZGF0YSBjb252ZXJ0ZWQgdG8gVVRGLTggdGV4dC5cbiAgICAgKi9cbiAgICBzdHJpbmcodmFsdWUpIHtcbiAgICAgICAgbGV0IGNodW5rID0gdGhpcy50ZXh0RW5jb2Rlci5lbmNvZGUodmFsdWUpO1xuICAgICAgICB0aGlzLnVpbnQzMihjaHVuay5ieXRlTGVuZ3RoKTsgLy8gd3JpdGUgbGVuZ3RoIG9mIGNodW5rIGFzIHZhcmludFxuICAgICAgICByZXR1cm4gdGhpcy5yYXcoY2h1bmspO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXcml0ZSBhIGBmbG9hdGAgdmFsdWUsIDMyLWJpdCBmbG9hdGluZyBwb2ludCBudW1iZXIuXG4gICAgICovXG4gICAgZmxvYXQodmFsdWUpIHtcbiAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0RmxvYXQzMih2YWx1ZSk7XG4gICAgICAgIGxldCBjaHVuayA9IG5ldyBVaW50OEFycmF5KDQpO1xuICAgICAgICBuZXcgRGF0YVZpZXcoY2h1bmsuYnVmZmVyKS5zZXRGbG9hdDMyKDAsIHZhbHVlLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucmF3KGNodW5rKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGUgYSBgZG91YmxlYCB2YWx1ZSwgYSA2NC1iaXQgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLlxuICAgICAqL1xuICAgIGRvdWJsZSh2YWx1ZSkge1xuICAgICAgICBsZXQgY2h1bmsgPSBuZXcgVWludDhBcnJheSg4KTtcbiAgICAgICAgbmV3IERhdGFWaWV3KGNodW5rLmJ1ZmZlcikuc2V0RmxvYXQ2NCgwLCB2YWx1ZSwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzLnJhdyhjaHVuayk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyaXRlIGEgYGZpeGVkMzJgIHZhbHVlLCBhbiB1bnNpZ25lZCwgZml4ZWQtbGVuZ3RoIDMyLWJpdCBpbnRlZ2VyLlxuICAgICAqL1xuICAgIGZpeGVkMzIodmFsdWUpIHtcbiAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0VUludDMyKHZhbHVlKTtcbiAgICAgICAgbGV0IGNodW5rID0gbmV3IFVpbnQ4QXJyYXkoNCk7XG4gICAgICAgIG5ldyBEYXRhVmlldyhjaHVuay5idWZmZXIpLnNldFVpbnQzMigwLCB2YWx1ZSwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzLnJhdyhjaHVuayk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyaXRlIGEgYHNmaXhlZDMyYCB2YWx1ZSwgYSBzaWduZWQsIGZpeGVkLWxlbmd0aCAzMi1iaXQgaW50ZWdlci5cbiAgICAgKi9cbiAgICBzZml4ZWQzMih2YWx1ZSkge1xuICAgICAgICBhc3NlcnRfMS5hc3NlcnRJbnQzMih2YWx1ZSk7XG4gICAgICAgIGxldCBjaHVuayA9IG5ldyBVaW50OEFycmF5KDQpO1xuICAgICAgICBuZXcgRGF0YVZpZXcoY2h1bmsuYnVmZmVyKS5zZXRJbnQzMigwLCB2YWx1ZSwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzLnJhdyhjaHVuayk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyaXRlIGEgYHNpbnQzMmAgdmFsdWUsIGEgc2lnbmVkLCB6aWd6YWctZW5jb2RlZCAzMi1iaXQgdmFyaW50LlxuICAgICAqL1xuICAgIHNpbnQzMih2YWx1ZSkge1xuICAgICAgICBhc3NlcnRfMS5hc3NlcnRJbnQzMih2YWx1ZSk7XG4gICAgICAgIC8vIHppZ3phZyBlbmNvZGVcbiAgICAgICAgdmFsdWUgPSAoKHZhbHVlIDw8IDEpIF4gKHZhbHVlID4+IDMxKSkgPj4+IDA7XG4gICAgICAgIGdvb2dfdmFyaW50XzEudmFyaW50MzJ3cml0ZSh2YWx1ZSwgdGhpcy5idWYpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGUgYSBgZml4ZWQ2NGAgdmFsdWUsIGEgc2lnbmVkLCBmaXhlZC1sZW5ndGggNjQtYml0IGludGVnZXIuXG4gICAgICovXG4gICAgc2ZpeGVkNjQodmFsdWUpIHtcbiAgICAgICAgbGV0IGNodW5rID0gbmV3IFVpbnQ4QXJyYXkoOCk7XG4gICAgICAgIGxldCB2aWV3ID0gbmV3IERhdGFWaWV3KGNodW5rLmJ1ZmZlcik7XG4gICAgICAgIGxldCBsb25nID0gcGJfbG9uZ18xLlBiTG9uZy5mcm9tKHZhbHVlKTtcbiAgICAgICAgdmlldy5zZXRJbnQzMigwLCBsb25nLmxvLCB0cnVlKTtcbiAgICAgICAgdmlldy5zZXRJbnQzMig0LCBsb25nLmhpLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucmF3KGNodW5rKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGUgYSBgZml4ZWQ2NGAgdmFsdWUsIGFuIHVuc2lnbmVkLCBmaXhlZC1sZW5ndGggNjQgYml0IGludGVnZXIuXG4gICAgICovXG4gICAgZml4ZWQ2NCh2YWx1ZSkge1xuICAgICAgICBsZXQgY2h1bmsgPSBuZXcgVWludDhBcnJheSg4KTtcbiAgICAgICAgbGV0IHZpZXcgPSBuZXcgRGF0YVZpZXcoY2h1bmsuYnVmZmVyKTtcbiAgICAgICAgbGV0IGxvbmcgPSBwYl9sb25nXzEuUGJVTG9uZy5mcm9tKHZhbHVlKTtcbiAgICAgICAgdmlldy5zZXRJbnQzMigwLCBsb25nLmxvLCB0cnVlKTtcbiAgICAgICAgdmlldy5zZXRJbnQzMig0LCBsb25nLmhpLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucmF3KGNodW5rKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGUgYSBgaW50NjRgIHZhbHVlLCBhIHNpZ25lZCA2NC1iaXQgdmFyaW50LlxuICAgICAqL1xuICAgIGludDY0KHZhbHVlKSB7XG4gICAgICAgIGxldCBsb25nID0gcGJfbG9uZ18xLlBiTG9uZy5mcm9tKHZhbHVlKTtcbiAgICAgICAgZ29vZ192YXJpbnRfMS52YXJpbnQ2NHdyaXRlKGxvbmcubG8sIGxvbmcuaGksIHRoaXMuYnVmKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyaXRlIGEgYHNpbnQ2NGAgdmFsdWUsIGEgc2lnbmVkLCB6aWctemFnLWVuY29kZWQgNjQtYml0IHZhcmludC5cbiAgICAgKi9cbiAgICBzaW50NjQodmFsdWUpIHtcbiAgICAgICAgbGV0IGxvbmcgPSBwYl9sb25nXzEuUGJMb25nLmZyb20odmFsdWUpLCBcbiAgICAgICAgLy8gemlnemFnIGVuY29kZVxuICAgICAgICBzaWduID0gbG9uZy5oaSA+PiAzMSwgbG8gPSAobG9uZy5sbyA8PCAxKSBeIHNpZ24sIGhpID0gKChsb25nLmhpIDw8IDEpIHwgKGxvbmcubG8gPj4+IDMxKSkgXiBzaWduO1xuICAgICAgICBnb29nX3ZhcmludF8xLnZhcmludDY0d3JpdGUobG8sIGhpLCB0aGlzLmJ1Zik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXcml0ZSBhIGB1aW50NjRgIHZhbHVlLCBhbiB1bnNpZ25lZCA2NC1iaXQgdmFyaW50LlxuICAgICAqL1xuICAgIHVpbnQ2NCh2YWx1ZSkge1xuICAgICAgICBsZXQgbG9uZyA9IHBiX2xvbmdfMS5QYlVMb25nLmZyb20odmFsdWUpO1xuICAgICAgICBnb29nX3ZhcmludF8xLnZhcmludDY0d3JpdGUobG9uZy5sbywgbG9uZy5oaSwgdGhpcy5idWYpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59XG5leHBvcnRzLkJpbmFyeVdyaXRlciA9IEJpbmFyeVdyaXRlcjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLm1lcmdlSnNvbk9wdGlvbnMgPSBleHBvcnRzLmpzb25Xcml0ZU9wdGlvbnMgPSBleHBvcnRzLmpzb25SZWFkT3B0aW9ucyA9IHZvaWQgMDtcbmNvbnN0IGRlZmF1bHRzV3JpdGUgPSB7XG4gICAgZW1pdERlZmF1bHRWYWx1ZXM6IGZhbHNlLFxuICAgIGVudW1Bc0ludGVnZXI6IGZhbHNlLFxuICAgIHVzZVByb3RvRmllbGROYW1lOiBmYWxzZSxcbiAgICBwcmV0dHlTcGFjZXM6IDAsXG59LCBkZWZhdWx0c1JlYWQgPSB7XG4gICAgaWdub3JlVW5rbm93bkZpZWxkczogZmFsc2UsXG59O1xuLyoqXG4gKiBNYWtlIG9wdGlvbnMgZm9yIHJlYWRpbmcgSlNPTiBkYXRhIGZyb20gcGFydGlhbCBvcHRpb25zLlxuICovXG5mdW5jdGlvbiBqc29uUmVhZE9wdGlvbnMob3B0aW9ucykge1xuICAgIHJldHVybiBvcHRpb25zID8gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0c1JlYWQpLCBvcHRpb25zKSA6IGRlZmF1bHRzUmVhZDtcbn1cbmV4cG9ydHMuanNvblJlYWRPcHRpb25zID0ganNvblJlYWRPcHRpb25zO1xuLyoqXG4gKiBNYWtlIG9wdGlvbnMgZm9yIHdyaXRpbmcgSlNPTiBkYXRhIGZyb20gcGFydGlhbCBvcHRpb25zLlxuICovXG5mdW5jdGlvbiBqc29uV3JpdGVPcHRpb25zKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gb3B0aW9ucyA/IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdHNXcml0ZSksIG9wdGlvbnMpIDogZGVmYXVsdHNXcml0ZTtcbn1cbmV4cG9ydHMuanNvbldyaXRlT3B0aW9ucyA9IGpzb25Xcml0ZU9wdGlvbnM7XG4vKipcbiAqIE1lcmdlcyBKU09OIHdyaXRlIG9yIHJlYWQgb3B0aW9ucy4gTGF0ZXIgdmFsdWVzIG92ZXJyaWRlIGVhcmxpZXIgdmFsdWVzLiBUeXBlIHJlZ2lzdHJpZXMgYXJlIG1lcmdlZC5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VKc29uT3B0aW9ucyhhLCBiKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICBsZXQgYyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYSksIGIpO1xuICAgIGMudHlwZVJlZ2lzdHJ5ID0gWy4uLigoX2EgPSBhID09PSBudWxsIHx8IGEgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGEudHlwZVJlZ2lzdHJ5KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBbXSksIC4uLigoX2IgPSBiID09PSBudWxsIHx8IGIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGIudHlwZVJlZ2lzdHJ5KSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBbXSldO1xuICAgIHJldHVybiBjO1xufVxuZXhwb3J0cy5tZXJnZUpzb25PcHRpb25zID0gbWVyZ2VKc29uT3B0aW9ucztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk1FU1NBR0VfVFlQRSA9IHZvaWQgMDtcbi8qKlxuICogVGhlIHN5bWJvbCB1c2VkIGFzIGEga2V5IG9uIG1lc3NhZ2Ugb2JqZWN0cyB0byBzdG9yZSB0aGUgbWVzc2FnZSB0eXBlLlxuICpcbiAqIE5vdGUgdGhhdCB0aGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBmZWF0dXJlIC0gaXQgaXMgaGVyZSB0byBzdGF5LCBidXRcbiAqIGltcGxlbWVudGF0aW9uIGRldGFpbHMgbWF5IGNoYW5nZSB3aXRob3V0IG5vdGljZS5cbiAqL1xuZXhwb3J0cy5NRVNTQUdFX1RZUEUgPSBTeW1ib2wuZm9yKFwicHJvdG9idWYtdHMvbWVzc2FnZS10eXBlXCIpO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubG93ZXJDYW1lbENhc2UgPSB2b2lkIDA7XG4vKipcbiAqIENvbnZlcnRzIHNuYWtlX2Nhc2UgdG8gbG93ZXJDYW1lbENhc2UuXG4gKlxuICogU2hvdWxkIGJlaGF2ZSBsaWtlIHByb3RvYzpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9wcm90b2NvbGJ1ZmZlcnMvcHJvdG9idWYvYmxvYi9lOGFlMTM3Yzk2NDQ0ZWEzMTM0ODVlZDExMThjNWU0M2IyMDk5Y2YxL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2hlbHBlcnMuY2MjTDExOFxuICovXG5mdW5jdGlvbiBsb3dlckNhbWVsQ2FzZShzbmFrZUNhc2UpIHtcbiAgICBsZXQgY2FwTmV4dCA9IGZhbHNlO1xuICAgIGNvbnN0IHNiID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzbmFrZUNhc2UubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGV0IG5leHQgPSBzbmFrZUNhc2UuY2hhckF0KGkpO1xuICAgICAgICBpZiAobmV4dCA9PSAnXycpIHtcbiAgICAgICAgICAgIGNhcE5leHQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKC9cXGQvLnRlc3QobmV4dCkpIHtcbiAgICAgICAgICAgIHNiLnB1c2gobmV4dCk7XG4gICAgICAgICAgICBjYXBOZXh0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjYXBOZXh0KSB7XG4gICAgICAgICAgICBzYi5wdXNoKG5leHQudG9VcHBlckNhc2UoKSk7XG4gICAgICAgICAgICBjYXBOZXh0ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaSA9PSAwKSB7XG4gICAgICAgICAgICBzYi5wdXNoKG5leHQudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzYi5wdXNoKG5leHQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzYi5qb2luKCcnKTtcbn1cbmV4cG9ydHMubG93ZXJDYW1lbENhc2UgPSBsb3dlckNhbWVsQ2FzZTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlYWRNZXNzYWdlT3B0aW9uID0gZXhwb3J0cy5yZWFkRmllbGRPcHRpb24gPSBleHBvcnRzLnJlYWRGaWVsZE9wdGlvbnMgPSBleHBvcnRzLm5vcm1hbGl6ZUZpZWxkSW5mbyA9IGV4cG9ydHMuUmVwZWF0VHlwZSA9IGV4cG9ydHMuTG9uZ1R5cGUgPSBleHBvcnRzLlNjYWxhclR5cGUgPSB2b2lkIDA7XG5jb25zdCBsb3dlcl9jYW1lbF9jYXNlXzEgPSByZXF1aXJlKFwiLi9sb3dlci1jYW1lbC1jYXNlXCIpO1xuLyoqXG4gKiBTY2FsYXIgdmFsdWUgdHlwZXMuIFRoaXMgaXMgYSBzdWJzZXQgb2YgZmllbGQgdHlwZXMgZGVjbGFyZWQgYnkgcHJvdG9idWZcbiAqIGVudW0gZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLlR5cGUgVGhlIHR5cGVzIEdST1VQIGFuZCBNRVNTQUdFXG4gKiBhcmUgb21pdHRlZCwgYnV0IHRoZSBudW1lcmljYWwgdmFsdWVzIGFyZSBpZGVudGljYWwuXG4gKi9cbnZhciBTY2FsYXJUeXBlO1xuKGZ1bmN0aW9uIChTY2FsYXJUeXBlKSB7XG4gICAgLy8gMCBpcyByZXNlcnZlZCBmb3IgZXJyb3JzLlxuICAgIC8vIE9yZGVyIGlzIHdlaXJkIGZvciBoaXN0b3JpY2FsIHJlYXNvbnMuXG4gICAgU2NhbGFyVHlwZVtTY2FsYXJUeXBlW1wiRE9VQkxFXCJdID0gMV0gPSBcIkRPVUJMRVwiO1xuICAgIFNjYWxhclR5cGVbU2NhbGFyVHlwZVtcIkZMT0FUXCJdID0gMl0gPSBcIkZMT0FUXCI7XG4gICAgLy8gTm90IFppZ1phZyBlbmNvZGVkLiAgTmVnYXRpdmUgbnVtYmVycyB0YWtlIDEwIGJ5dGVzLiAgVXNlIFRZUEVfU0lOVDY0IGlmXG4gICAgLy8gbmVnYXRpdmUgdmFsdWVzIGFyZSBsaWtlbHkuXG4gICAgU2NhbGFyVHlwZVtTY2FsYXJUeXBlW1wiSU5UNjRcIl0gPSAzXSA9IFwiSU5UNjRcIjtcbiAgICBTY2FsYXJUeXBlW1NjYWxhclR5cGVbXCJVSU5UNjRcIl0gPSA0XSA9IFwiVUlOVDY0XCI7XG4gICAgLy8gTm90IFppZ1phZyBlbmNvZGVkLiAgTmVnYXRpdmUgbnVtYmVycyB0YWtlIDEwIGJ5dGVzLiAgVXNlIFRZUEVfU0lOVDMyIGlmXG4gICAgLy8gbmVnYXRpdmUgdmFsdWVzIGFyZSBsaWtlbHkuXG4gICAgU2NhbGFyVHlwZVtTY2FsYXJUeXBlW1wiSU5UMzJcIl0gPSA1XSA9IFwiSU5UMzJcIjtcbiAgICBTY2FsYXJUeXBlW1NjYWxhclR5cGVbXCJGSVhFRDY0XCJdID0gNl0gPSBcIkZJWEVENjRcIjtcbiAgICBTY2FsYXJUeXBlW1NjYWxhclR5cGVbXCJGSVhFRDMyXCJdID0gN10gPSBcIkZJWEVEMzJcIjtcbiAgICBTY2FsYXJUeXBlW1NjYWxhclR5cGVbXCJCT09MXCJdID0gOF0gPSBcIkJPT0xcIjtcbiAgICBTY2FsYXJUeXBlW1NjYWxhclR5cGVbXCJTVFJJTkdcIl0gPSA5XSA9IFwiU1RSSU5HXCI7XG4gICAgLy8gVGFnLWRlbGltaXRlZCBhZ2dyZWdhdGUuXG4gICAgLy8gR3JvdXAgdHlwZSBpcyBkZXByZWNhdGVkIGFuZCBub3Qgc3VwcG9ydGVkIGluIHByb3RvMy4gSG93ZXZlciwgUHJvdG8zXG4gICAgLy8gaW1wbGVtZW50YXRpb25zIHNob3VsZCBzdGlsbCBiZSBhYmxlIHRvIHBhcnNlIHRoZSBncm91cCB3aXJlIGZvcm1hdCBhbmRcbiAgICAvLyB0cmVhdCBncm91cCBmaWVsZHMgYXMgdW5rbm93biBmaWVsZHMuXG4gICAgLy8gVFlQRV9HUk9VUCA9IDEwLFxuICAgIC8vIFRZUEVfTUVTU0FHRSA9IDExLCAgLy8gTGVuZ3RoLWRlbGltaXRlZCBhZ2dyZWdhdGUuXG4gICAgLy8gTmV3IGluIHZlcnNpb24gMi5cbiAgICBTY2FsYXJUeXBlW1NjYWxhclR5cGVbXCJCWVRFU1wiXSA9IDEyXSA9IFwiQllURVNcIjtcbiAgICBTY2FsYXJUeXBlW1NjYWxhclR5cGVbXCJVSU5UMzJcIl0gPSAxM10gPSBcIlVJTlQzMlwiO1xuICAgIC8vIFRZUEVfRU5VTSA9IDE0LFxuICAgIFNjYWxhclR5cGVbU2NhbGFyVHlwZVtcIlNGSVhFRDMyXCJdID0gMTVdID0gXCJTRklYRUQzMlwiO1xuICAgIFNjYWxhclR5cGVbU2NhbGFyVHlwZVtcIlNGSVhFRDY0XCJdID0gMTZdID0gXCJTRklYRUQ2NFwiO1xuICAgIFNjYWxhclR5cGVbU2NhbGFyVHlwZVtcIlNJTlQzMlwiXSA9IDE3XSA9IFwiU0lOVDMyXCI7XG4gICAgU2NhbGFyVHlwZVtTY2FsYXJUeXBlW1wiU0lOVDY0XCJdID0gMThdID0gXCJTSU5UNjRcIjtcbn0pKFNjYWxhclR5cGUgPSBleHBvcnRzLlNjYWxhclR5cGUgfHwgKGV4cG9ydHMuU2NhbGFyVHlwZSA9IHt9KSk7XG4vKipcbiAqIEphdmFTY3JpcHQgcmVwcmVzZW50YXRpb24gb2YgNjQgYml0IGludGVncmFsIHR5cGVzLiBFcXVpdmFsZW50IHRvIHRoZVxuICogZmllbGQgb3B0aW9uIFwianN0eXBlXCIuXG4gKlxuICogQnkgZGVmYXVsdCwgcHJvdG9idWYtdHMgcmVwcmVzZW50cyA2NCBiaXQgdHlwZXMgYXMgYGJpZ2ludGAuXG4gKlxuICogWW91IGNhbiBjaGFuZ2UgdGhlIGRlZmF1bHQgYmVoYXZpb3VyIGJ5IGVuYWJsaW5nIHRoZSBwbHVnaW4gcGFyYW1ldGVyXG4gKiBgbG9uZ190eXBlX3N0cmluZ2AsIHdoaWNoIHdpbGwgcmVwcmVzZW50IDY0IGJpdCB0eXBlcyBhcyBgc3RyaW5nYC5cbiAqXG4gKiBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGNoYW5nZSB0aGUgYmVoYXZpb3VyIGZvciBpbmRpdmlkdWFsIGZpZWxkc1xuICogd2l0aCB0aGUgZmllbGQgb3B0aW9uIFwianN0eXBlXCI6XG4gKlxuICogYGBgcHJvdG9idWZcbiAqIHVpbnQ2NCBteV9maWVsZCA9IDEgW2pzdHlwZSA9IEpTX1NUUklOR107XG4gKiB1aW50NjQgb3RoZXJfZmllbGQgPSAyIFtqc3R5cGUgPSBKU19OVU1CRVJdO1xuICogYGBgXG4gKi9cbnZhciBMb25nVHlwZTtcbihmdW5jdGlvbiAoTG9uZ1R5cGUpIHtcbiAgICAvKipcbiAgICAgKiBVc2UgSmF2YVNjcmlwdCBgYmlnaW50YC5cbiAgICAgKlxuICAgICAqIEZpZWxkIG9wdGlvbiBgW2pzdHlwZSA9IEpTX05PUk1BTF1gLlxuICAgICAqL1xuICAgIExvbmdUeXBlW0xvbmdUeXBlW1wiQklHSU5UXCJdID0gMF0gPSBcIkJJR0lOVFwiO1xuICAgIC8qKlxuICAgICAqIFVzZSBKYXZhU2NyaXB0IGBzdHJpbmdgLlxuICAgICAqXG4gICAgICogRmllbGQgb3B0aW9uIGBbanN0eXBlID0gSlNfU1RSSU5HXWAuXG4gICAgICovXG4gICAgTG9uZ1R5cGVbTG9uZ1R5cGVbXCJTVFJJTkdcIl0gPSAxXSA9IFwiU1RSSU5HXCI7XG4gICAgLyoqXG4gICAgICogVXNlIEphdmFTY3JpcHQgYG51bWJlcmAuXG4gICAgICpcbiAgICAgKiBMYXJnZSB2YWx1ZXMgd2lsbCBsb29zZSBwcmVjaXNpb24uXG4gICAgICpcbiAgICAgKiBGaWVsZCBvcHRpb24gYFtqc3R5cGUgPSBKU19OVU1CRVJdYC5cbiAgICAgKi9cbiAgICBMb25nVHlwZVtMb25nVHlwZVtcIk5VTUJFUlwiXSA9IDJdID0gXCJOVU1CRVJcIjtcbn0pKExvbmdUeXBlID0gZXhwb3J0cy5Mb25nVHlwZSB8fCAoZXhwb3J0cy5Mb25nVHlwZSA9IHt9KSk7XG4vKipcbiAqIFByb3RvYnVmIDIuMS4wIGludHJvZHVjZWQgcGFja2VkIHJlcGVhdGVkIGZpZWxkcy5cbiAqIFNldHRpbmcgdGhlIGZpZWxkIG9wdGlvbiBgW3BhY2tlZCA9IHRydWVdYCBlbmFibGVzIHBhY2tpbmcuXG4gKlxuICogSW4gcHJvdG8zLCBhbGwgcmVwZWF0ZWQgZmllbGRzIGFyZSBwYWNrZWQgYnkgZGVmYXVsdC5cbiAqIFNldHRpbmcgdGhlIGZpZWxkIG9wdGlvbiBgW3BhY2tlZCA9IGZhbHNlXWAgZGlzYWJsZXMgcGFja2luZy5cbiAqXG4gKiBQYWNrZWQgcmVwZWF0ZWQgZmllbGRzIGFyZSBlbmNvZGVkIHdpdGggYSBzaW5nbGUgdGFnLFxuICogdGhlbiBhIGxlbmd0aC1kZWxpbWl0ZXIsIHRoZW4gdGhlIGVsZW1lbnQgdmFsdWVzLlxuICpcbiAqIFVucGFja2VkIHJlcGVhdGVkIGZpZWxkcyBhcmUgZW5jb2RlZCB3aXRoIGEgdGFnIGFuZFxuICogdmFsdWUgZm9yIGVhY2ggZWxlbWVudC5cbiAqXG4gKiBgYnl0ZXNgIGFuZCBgc3RyaW5nYCBjYW5ub3QgYmUgcGFja2VkLlxuICovXG52YXIgUmVwZWF0VHlwZTtcbihmdW5jdGlvbiAoUmVwZWF0VHlwZSkge1xuICAgIC8qKlxuICAgICAqIFRoZSBmaWVsZCBpcyBub3QgcmVwZWF0ZWQuXG4gICAgICovXG4gICAgUmVwZWF0VHlwZVtSZXBlYXRUeXBlW1wiTk9cIl0gPSAwXSA9IFwiTk9cIjtcbiAgICAvKipcbiAgICAgKiBUaGUgZmllbGQgaXMgcmVwZWF0ZWQgYW5kIHNob3VsZCBiZSBwYWNrZWQuXG4gICAgICogSW52YWxpZCBmb3IgYGJ5dGVzYCBhbmQgYHN0cmluZ2AsIHRoZXkgY2Fubm90IGJlIHBhY2tlZC5cbiAgICAgKi9cbiAgICBSZXBlYXRUeXBlW1JlcGVhdFR5cGVbXCJQQUNLRURcIl0gPSAxXSA9IFwiUEFDS0VEXCI7XG4gICAgLyoqXG4gICAgICogVGhlIGZpZWxkIGlzIHJlcGVhdGVkIGJ1dCBzaG91bGQgbm90IGJlIHBhY2tlZC5cbiAgICAgKiBUaGUgb25seSB2YWxpZCByZXBlYXQgdHlwZSBmb3IgcmVwZWF0ZWQgYGJ5dGVzYCBhbmQgYHN0cmluZ2AuXG4gICAgICovXG4gICAgUmVwZWF0VHlwZVtSZXBlYXRUeXBlW1wiVU5QQUNLRURcIl0gPSAyXSA9IFwiVU5QQUNLRURcIjtcbn0pKFJlcGVhdFR5cGUgPSBleHBvcnRzLlJlcGVhdFR5cGUgfHwgKGV4cG9ydHMuUmVwZWF0VHlwZSA9IHt9KSk7XG4vKipcbiAqIFR1cm5zIFBhcnRpYWxGaWVsZEluZm8gaW50byBGaWVsZEluZm8uXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZUZpZWxkSW5mbyhmaWVsZCkge1xuICAgIHZhciBfYSwgX2IsIF9jLCBfZDtcbiAgICBmaWVsZC5sb2NhbE5hbWUgPSAoX2EgPSBmaWVsZC5sb2NhbE5hbWUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGxvd2VyX2NhbWVsX2Nhc2VfMS5sb3dlckNhbWVsQ2FzZShmaWVsZC5uYW1lKTtcbiAgICBmaWVsZC5qc29uTmFtZSA9IChfYiA9IGZpZWxkLmpzb25OYW1lKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBsb3dlcl9jYW1lbF9jYXNlXzEubG93ZXJDYW1lbENhc2UoZmllbGQubmFtZSk7XG4gICAgZmllbGQucmVwZWF0ID0gKF9jID0gZmllbGQucmVwZWF0KSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiBSZXBlYXRUeXBlLk5PO1xuICAgIGZpZWxkLm9wdCA9IChfZCA9IGZpZWxkLm9wdCkgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDogKGZpZWxkLnJlcGVhdCA/IGZhbHNlIDogZmllbGQub25lb2YgPyBmYWxzZSA6IGZpZWxkLmtpbmQgPT0gXCJtZXNzYWdlXCIpO1xuICAgIHJldHVybiBmaWVsZDtcbn1cbmV4cG9ydHMubm9ybWFsaXplRmllbGRJbmZvID0gbm9ybWFsaXplRmllbGRJbmZvO1xuLyoqXG4gKiBSZWFkIGN1c3RvbSBmaWVsZCBvcHRpb25zIGZyb20gYSBnZW5lcmF0ZWQgbWVzc2FnZSB0eXBlLlxuICpcbiAqIEBkZXByZWNhdGVkIHVzZSByZWFkRmllbGRPcHRpb24oKVxuICovXG5mdW5jdGlvbiByZWFkRmllbGRPcHRpb25zKG1lc3NhZ2VUeXBlLCBmaWVsZE5hbWUsIGV4dGVuc2lvbk5hbWUsIGV4dGVuc2lvblR5cGUpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3Qgb3B0aW9ucyA9IChfYSA9IG1lc3NhZ2VUeXBlLmZpZWxkcy5maW5kKChtLCBpKSA9PiBtLmxvY2FsTmFtZSA9PSBmaWVsZE5hbWUgfHwgaSA9PSBmaWVsZE5hbWUpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub3B0aW9ucztcbiAgICByZXR1cm4gb3B0aW9ucyAmJiBvcHRpb25zW2V4dGVuc2lvbk5hbWVdID8gZXh0ZW5zaW9uVHlwZS5mcm9tSnNvbihvcHRpb25zW2V4dGVuc2lvbk5hbWVdKSA6IHVuZGVmaW5lZDtcbn1cbmV4cG9ydHMucmVhZEZpZWxkT3B0aW9ucyA9IHJlYWRGaWVsZE9wdGlvbnM7XG5mdW5jdGlvbiByZWFkRmllbGRPcHRpb24obWVzc2FnZVR5cGUsIGZpZWxkTmFtZSwgZXh0ZW5zaW9uTmFtZSwgZXh0ZW5zaW9uVHlwZSkge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCBvcHRpb25zID0gKF9hID0gbWVzc2FnZVR5cGUuZmllbGRzLmZpbmQoKG0sIGkpID0+IG0ubG9jYWxOYW1lID09IGZpZWxkTmFtZSB8fCBpID09IGZpZWxkTmFtZSkpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5vcHRpb25zO1xuICAgIGlmICghb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBvcHRpb25WYWwgPSBvcHRpb25zW2V4dGVuc2lvbk5hbWVdO1xuICAgIGlmIChvcHRpb25WYWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gb3B0aW9uVmFsO1xuICAgIH1cbiAgICByZXR1cm4gZXh0ZW5zaW9uVHlwZSA/IGV4dGVuc2lvblR5cGUuZnJvbUpzb24ob3B0aW9uVmFsKSA6IG9wdGlvblZhbDtcbn1cbmV4cG9ydHMucmVhZEZpZWxkT3B0aW9uID0gcmVhZEZpZWxkT3B0aW9uO1xuZnVuY3Rpb24gcmVhZE1lc3NhZ2VPcHRpb24obWVzc2FnZVR5cGUsIGV4dGVuc2lvbk5hbWUsIGV4dGVuc2lvblR5cGUpIHtcbiAgICBjb25zdCBvcHRpb25zID0gbWVzc2FnZVR5cGUub3B0aW9ucztcbiAgICBjb25zdCBvcHRpb25WYWwgPSBvcHRpb25zW2V4dGVuc2lvbk5hbWVdO1xuICAgIGlmIChvcHRpb25WYWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gb3B0aW9uVmFsO1xuICAgIH1cbiAgICByZXR1cm4gZXh0ZW5zaW9uVHlwZSA/IGV4dGVuc2lvblR5cGUuZnJvbUpzb24ob3B0aW9uVmFsKSA6IG9wdGlvblZhbDtcbn1cbmV4cG9ydHMucmVhZE1lc3NhZ2VPcHRpb24gPSByZWFkTWVzc2FnZU9wdGlvbjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldFNlbGVjdGVkT25lb2ZWYWx1ZSA9IGV4cG9ydHMuY2xlYXJPbmVvZlZhbHVlID0gZXhwb3J0cy5zZXRVbmtub3duT25lb2ZWYWx1ZSA9IGV4cG9ydHMuc2V0T25lb2ZWYWx1ZSA9IGV4cG9ydHMuZ2V0T25lb2ZWYWx1ZSA9IGV4cG9ydHMuaXNPbmVvZkdyb3VwID0gdm9pZCAwO1xuLyoqXG4gKiBJcyB0aGUgZ2l2ZW4gdmFsdWUgYSB2YWxpZCBvbmVvZiBncm91cD9cbiAqXG4gKiBXZSByZXByZXNlbnQgcHJvdG9idWYgYG9uZW9mYCBhcyBhbGdlYnJhaWMgZGF0YSB0eXBlcyAoQURUKSBpbiBnZW5lcmF0ZWRcbiAqIGNvZGUuIEJ1dCB3aGVuIHdvcmtpbmcgd2l0aCBtZXNzYWdlcyBvZiB1bmtub3duIHR5cGUsIHRoZSBBRFQgZG9lcyBub3RcbiAqIGhlbHAgdXMuXG4gKlxuICogVGhpcyB0eXBlIGd1YXJkIGNoZWNrcyBpZiB0aGUgZ2l2ZW4gb2JqZWN0IGFkaGVyZXMgdG8gdGhlIEFEVCBydWxlcywgd2hpY2hcbiAqIGFyZSBhcyBmb2xsb3dzOlxuICpcbiAqIDEpIE11c3QgYmUgYW4gb2JqZWN0LlxuICpcbiAqIDIpIE11c3QgaGF2ZSBhIFwib25lb2ZLaW5kXCIgZGlzY3JpbWluYXRvciBwcm9wZXJ0eS5cbiAqXG4gKiAzKSBJZiBcIm9uZW9mS2luZFwiIGlzIGB1bmRlZmluZWRgLCBubyBtZW1iZXIgZmllbGQgaXMgc2VsZWN0ZWQuIFRoZSBvYmplY3RcbiAqIG11c3Qgbm90IGhhdmUgYW55IG90aGVyIHByb3BlcnRpZXMuXG4gKlxuICogNCkgSWYgXCJvbmVvZktpbmRcIiBpcyBhIGBzdHJpbmdgLCB0aGUgbWVtYmVyIGZpZWxkIHdpdGggdGhpcyBuYW1lIGlzXG4gKiBzZWxlY3RlZC5cbiAqXG4gKiA1KSBJZiBhIG1lbWJlciBmaWVsZCBpcyBzZWxlY3RlZCwgdGhlIG9iamVjdCBtdXN0IGhhdmUgYSBzZWNvbmQgcHJvcGVydHlcbiAqIHdpdGggdGhpcyBuYW1lLiBUaGUgcHJvcGVydHkgbXVzdCBub3QgYmUgYHVuZGVmaW5lZGAuXG4gKlxuICogNikgTm8gZXh0cmEgcHJvcGVydGllcyBhcmUgYWxsb3dlZC4gVGhlIG9iamVjdCBoYXMgZWl0aGVyIG9uZSBwcm9wZXJ0eVxuICogKG5vIHNlbGVjdGlvbikgb3IgdHdvIHByb3BlcnRpZXMgKHNlbGVjdGlvbikuXG4gKlxuICovXG5mdW5jdGlvbiBpc09uZW9mR3JvdXAoYW55KSB7XG4gICAgaWYgKHR5cGVvZiBhbnkgIT0gJ29iamVjdCcgfHwgYW55ID09PSBudWxsIHx8ICFhbnkuaGFzT3duUHJvcGVydHkoJ29uZW9mS2luZCcpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgc3dpdGNoICh0eXBlb2YgYW55Lm9uZW9mS2luZCkge1xuICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgICAgICBpZiAoYW55W2FueS5vbmVvZktpbmRdID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGFueSkubGVuZ3RoID09IDI7XG4gICAgICAgIGNhc2UgXCJ1bmRlZmluZWRcIjpcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhhbnkpLmxlbmd0aCA9PSAxO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbmV4cG9ydHMuaXNPbmVvZkdyb3VwID0gaXNPbmVvZkdyb3VwO1xuLyoqXG4gKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgZ2l2ZW4gZmllbGQgaW4gYSBvbmVvZiBncm91cC5cbiAqL1xuZnVuY3Rpb24gZ2V0T25lb2ZWYWx1ZShvbmVvZiwga2luZCkge1xuICAgIHJldHVybiBvbmVvZltraW5kXTtcbn1cbmV4cG9ydHMuZ2V0T25lb2ZWYWx1ZSA9IGdldE9uZW9mVmFsdWU7XG5mdW5jdGlvbiBzZXRPbmVvZlZhbHVlKG9uZW9mLCBraW5kLCB2YWx1ZSkge1xuICAgIGlmIChvbmVvZi5vbmVvZktpbmQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBkZWxldGUgb25lb2Zbb25lb2Yub25lb2ZLaW5kXTtcbiAgICB9XG4gICAgb25lb2Yub25lb2ZLaW5kID0ga2luZDtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBvbmVvZltraW5kXSA9IHZhbHVlO1xuICAgIH1cbn1cbmV4cG9ydHMuc2V0T25lb2ZWYWx1ZSA9IHNldE9uZW9mVmFsdWU7XG5mdW5jdGlvbiBzZXRVbmtub3duT25lb2ZWYWx1ZShvbmVvZiwga2luZCwgdmFsdWUpIHtcbiAgICBpZiAob25lb2Yub25lb2ZLaW5kICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZGVsZXRlIG9uZW9mW29uZW9mLm9uZW9mS2luZF07XG4gICAgfVxuICAgIG9uZW9mLm9uZW9mS2luZCA9IGtpbmQ7XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYga2luZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG9uZW9mW2tpbmRdID0gdmFsdWU7XG4gICAgfVxufVxuZXhwb3J0cy5zZXRVbmtub3duT25lb2ZWYWx1ZSA9IHNldFVua25vd25PbmVvZlZhbHVlO1xuLyoqXG4gKiBSZW1vdmVzIHRoZSBzZWxlY3RlZCBmaWVsZCBpbiBhIG9uZW9mIGdyb3VwLlxuICpcbiAqIE5vdGUgdGhhdCB0aGUgcmVjb21tZW5kZWQgd2F5IHRvIG1vZGlmeSBhIG9uZW9mIGdyb3VwIGlzIHRvIHNldFxuICogYSBuZXcgb2JqZWN0OlxuICpcbiAqIGBgYHRzXG4gKiBtZXNzYWdlLnJlc3VsdCA9IHsgb25lb2ZLaW5kOiB1bmRlZmluZWQgfTtcbiAqIGBgYFxuICovXG5mdW5jdGlvbiBjbGVhck9uZW9mVmFsdWUob25lb2YpIHtcbiAgICBpZiAob25lb2Yub25lb2ZLaW5kICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZGVsZXRlIG9uZW9mW29uZW9mLm9uZW9mS2luZF07XG4gICAgfVxuICAgIG9uZW9mLm9uZW9mS2luZCA9IHVuZGVmaW5lZDtcbn1cbmV4cG9ydHMuY2xlYXJPbmVvZlZhbHVlID0gY2xlYXJPbmVvZlZhbHVlO1xuLyoqXG4gKiBSZXR1cm5zIHRoZSBzZWxlY3RlZCB2YWx1ZSBvZiB0aGUgZ2l2ZW4gb25lb2YgZ3JvdXAuXG4gKlxuICogTm90IHRoYXQgdGhlIHJlY29tbWVuZGVkIHdheSB0byBhY2Nlc3MgYSBvbmVvZiBncm91cCBpcyB0byBjaGVja1xuICogdGhlIFwib25lb2ZLaW5kXCIgcHJvcGVydHkgYW5kIGxldCBUeXBlU2NyaXB0IG5hcnJvdyBkb3duIHRoZSB1bmlvblxuICogdHlwZSBmb3IgeW91OlxuICpcbiAqIGBgYHRzXG4gKiBpZiAobWVzc2FnZS5yZXN1bHQub25lb2ZLaW5kID09PSBcImVycm9yXCIpIHtcbiAqICAgbWVzc2FnZS5yZXN1bHQuZXJyb3I7IC8vIHN0cmluZ1xuICogfVxuICogYGBgXG4gKlxuICogSW4gdGhlIHJhcmUgY2FzZSB5b3UganVzdCBuZWVkIHRoZSB2YWx1ZSwgYW5kIGRvIG5vdCBjYXJlIGFib3V0XG4gKiB3aGljaCBwcm90b2J1ZiBmaWVsZCBpcyBzZWxlY3RlZCwgeW91IGNhbiB1c2UgdGhpcyBmdW5jdGlvblxuICogZm9yIGNvbnZlbmllbmNlLlxuICovXG5mdW5jdGlvbiBnZXRTZWxlY3RlZE9uZW9mVmFsdWUob25lb2YpIHtcbiAgICBpZiAob25lb2Yub25lb2ZLaW5kID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIG9uZW9mW29uZW9mLm9uZW9mS2luZF07XG59XG5leHBvcnRzLmdldFNlbGVjdGVkT25lb2ZWYWx1ZSA9IGdldFNlbGVjdGVkT25lb2ZWYWx1ZTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlJlZmxlY3Rpb25UeXBlQ2hlY2sgPSB2b2lkIDA7XG5jb25zdCByZWZsZWN0aW9uX2luZm9fMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24taW5mb1wiKTtcbmNvbnN0IG9uZW9mXzEgPSByZXF1aXJlKFwiLi9vbmVvZlwiKTtcbi8vIG5vaW5zcGVjdGlvbiBKU01ldGhvZENhbkJlU3RhdGljXG5jbGFzcyBSZWZsZWN0aW9uVHlwZUNoZWNrIHtcbiAgICBjb25zdHJ1Y3RvcihpbmZvKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdGhpcy5maWVsZHMgPSAoX2EgPSBpbmZvLmZpZWxkcykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogW107XG4gICAgfVxuICAgIHByZXBhcmUoKSB7XG4gICAgICAgIGlmICh0aGlzLmRhdGEpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHJlcSA9IFtdLCBrbm93biA9IFtdLCBvbmVvZnMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgZmllbGQgb2YgdGhpcy5maWVsZHMpIHtcbiAgICAgICAgICAgIGlmIChmaWVsZC5vbmVvZikge1xuICAgICAgICAgICAgICAgIGlmICghb25lb2ZzLmluY2x1ZGVzKGZpZWxkLm9uZW9mKSkge1xuICAgICAgICAgICAgICAgICAgICBvbmVvZnMucHVzaChmaWVsZC5vbmVvZik7XG4gICAgICAgICAgICAgICAgICAgIHJlcS5wdXNoKGZpZWxkLm9uZW9mKTtcbiAgICAgICAgICAgICAgICAgICAga25vd24ucHVzaChmaWVsZC5vbmVvZik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAga25vd24ucHVzaChmaWVsZC5sb2NhbE5hbWUpO1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoZmllbGQua2luZCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwic2NhbGFyXCI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJlbnVtXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZpZWxkLm9wdCB8fCBmaWVsZC5yZXBlYXQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxLnB1c2goZmllbGQubG9jYWxOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwibWVzc2FnZVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLnJlcGVhdClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXEucHVzaChmaWVsZC5sb2NhbE5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJtYXBcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcS5wdXNoKGZpZWxkLmxvY2FsTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kYXRhID0geyByZXEsIGtub3duLCBvbmVvZnM6IE9iamVjdC52YWx1ZXMob25lb2ZzKSB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJcyB0aGUgYXJndW1lbnQgYSB2YWxpZCBtZXNzYWdlIGFzIHNwZWNpZmllZCBieSB0aGVcbiAgICAgKiByZWZsZWN0aW9uIGluZm9ybWF0aW9uP1xuICAgICAqXG4gICAgICogQ2hlY2tzIGFsbCBmaWVsZCB0eXBlcyByZWN1cnNpdmVseS4gVGhlIGBkZXB0aGBcbiAgICAgKiBzcGVjaWZpZXMgaG93IGRlZXAgaW50byB0aGUgc3RydWN0dXJlIHRoZSBjaGVjayB3aWxsIGJlLlxuICAgICAqXG4gICAgICogV2l0aCBhIGRlcHRoIG9mIDAsIG9ubHkgdGhlIHByZXNlbmNlIG9mIGZpZWxkc1xuICAgICAqIGlzIGNoZWNrZWQuXG4gICAgICpcbiAgICAgKiBXaXRoIGEgZGVwdGggb2YgMSBvciBtb3JlLCB0aGUgZmllbGQgdHlwZXMgYXJlIGNoZWNrZWQuXG4gICAgICpcbiAgICAgKiBXaXRoIGEgZGVwdGggb2YgMiBvciBtb3JlLCB0aGUgbWVtYmVycyBvZiBtYXAsIHJlcGVhdGVkXG4gICAgICogYW5kIG1lc3NhZ2UgZmllbGRzIGFyZSBjaGVja2VkLlxuICAgICAqXG4gICAgICogTWVzc2FnZSBmaWVsZHMgd2lsbCBiZSBjaGVja2VkIHJlY3Vyc2l2ZWx5IHdpdGggZGVwdGggLSAxLlxuICAgICAqXG4gICAgICogVGhlIG51bWJlciBvZiBtYXAgZW50cmllcyAvIHJlcGVhdGVkIHZhbHVlcyBiZWluZyBjaGVja2VkXG4gICAgICogaXMgPCBkZXB0aC5cbiAgICAgKi9cbiAgICBpcyhtZXNzYWdlLCBkZXB0aCwgYWxsb3dFeGNlc3NQcm9wZXJ0aWVzID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKGRlcHRoIDwgMClcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAobWVzc2FnZSA9PT0gbnVsbCB8fCBtZXNzYWdlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIG1lc3NhZ2UgIT0gJ29iamVjdCcpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHRoaXMucHJlcGFyZSgpO1xuICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzKG1lc3NhZ2UpLCBkYXRhID0gdGhpcy5kYXRhO1xuICAgICAgICAvLyBpZiBhIHJlcXVpcmVkIGZpZWxkIGlzIG1pc3NpbmcgaW4gYXJnLCB0aGlzIGNhbm5vdCBiZSBhIFRcbiAgICAgICAgaWYgKGtleXMubGVuZ3RoIDwgZGF0YS5yZXEubGVuZ3RoIHx8IGRhdGEucmVxLnNvbWUobiA9PiAha2V5cy5pbmNsdWRlcyhuKSkpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmICghYWxsb3dFeGNlc3NQcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAvLyBpZiB0aGUgYXJnIGNvbnRhaW5zIGEga2V5IHdlIGRvbnQga25vdywgdGhpcyBpcyBub3QgYSBsaXRlcmFsIFRcbiAgICAgICAgICAgIGlmIChrZXlzLnNvbWUoayA9PiAhZGF0YS5rbm93bi5pbmNsdWRlcyhrKSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIFwiV2l0aCBhIGRlcHRoIG9mIDAsIG9ubHkgdGhlIHByZXNlbmNlIGFuZCBhYnNlbmNlIG9mIGZpZWxkcyBpcyBjaGVja2VkLlwiXG4gICAgICAgIC8vIFwiV2l0aCBhIGRlcHRoIG9mIDEgb3IgbW9yZSwgdGhlIGZpZWxkIHR5cGVzIGFyZSBjaGVja2VkLlwiXG4gICAgICAgIGlmIChkZXB0aCA8IDEpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNoZWNrIG9uZW9mIGdyb3VwXG4gICAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBkYXRhLm9uZW9mcykge1xuICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSBtZXNzYWdlW25hbWVdO1xuICAgICAgICAgICAgaWYgKCFvbmVvZl8xLmlzT25lb2ZHcm91cChncm91cCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgaWYgKGdyb3VwLm9uZW9mS2luZCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLmZpZWxkcy5maW5kKGYgPT4gZi5sb2NhbE5hbWUgPT09IGdyb3VwLm9uZW9mS2luZCk7XG4gICAgICAgICAgICBpZiAoIWZpZWxkKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gd2UgZm91bmQgbm8gZmllbGQsIGJ1dCBoYXZlIGEga2luZCwgc29tZXRoaW5nIGlzIHdyb25nXG4gICAgICAgICAgICBpZiAoIXRoaXMuZmllbGQoZ3JvdXBbZ3JvdXAub25lb2ZLaW5kXSwgZmllbGQsIGFsbG93RXhjZXNzUHJvcGVydGllcywgZGVwdGgpKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjaGVjayB0eXBlc1xuICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIHRoaXMuZmllbGRzKSB7XG4gICAgICAgICAgICBpZiAoZmllbGQub25lb2YgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGlmICghdGhpcy5maWVsZChtZXNzYWdlW2ZpZWxkLmxvY2FsTmFtZV0sIGZpZWxkLCBhbGxvd0V4Y2Vzc1Byb3BlcnRpZXMsIGRlcHRoKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGZpZWxkKGFyZywgZmllbGQsIGFsbG93RXhjZXNzUHJvcGVydGllcywgZGVwdGgpIHtcbiAgICAgICAgbGV0IHJlcGVhdGVkID0gZmllbGQucmVwZWF0O1xuICAgICAgICBzd2l0Y2ggKGZpZWxkLmtpbmQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJzY2FsYXJcIjpcbiAgICAgICAgICAgICAgICBpZiAoYXJnID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmaWVsZC5vcHQ7XG4gICAgICAgICAgICAgICAgaWYgKHJlcGVhdGVkKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsYXJzKGFyZywgZmllbGQuVCwgZGVwdGgsIGZpZWxkLkwpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxhcihhcmcsIGZpZWxkLlQsIGZpZWxkLkwpO1xuICAgICAgICAgICAgY2FzZSBcImVudW1cIjpcbiAgICAgICAgICAgICAgICBpZiAoYXJnID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmaWVsZC5vcHQ7XG4gICAgICAgICAgICAgICAgaWYgKHJlcGVhdGVkKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsYXJzKGFyZywgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5JTlQzMiwgZGVwdGgpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxhcihhcmcsIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuSU5UMzIpO1xuICAgICAgICAgICAgY2FzZSBcIm1lc3NhZ2VcIjpcbiAgICAgICAgICAgICAgICBpZiAoYXJnID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIGlmIChyZXBlYXRlZClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWVzc2FnZXMoYXJnLCBmaWVsZC5UKCksIGFsbG93RXhjZXNzUHJvcGVydGllcywgZGVwdGgpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2UoYXJnLCBmaWVsZC5UKCksIGFsbG93RXhjZXNzUHJvcGVydGllcywgZGVwdGgpO1xuICAgICAgICAgICAgY2FzZSBcIm1hcFwiOlxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYXJnICE9ICdvYmplY3QnIHx8IGFyZyA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmIChkZXB0aCA8IDIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5tYXBLZXlzKGFyZywgZmllbGQuSywgZGVwdGgpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChmaWVsZC5WLmtpbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcInNjYWxhclwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGFycyhPYmplY3QudmFsdWVzKGFyZyksIGZpZWxkLlYuVCwgZGVwdGgsIGZpZWxkLlYuTCk7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJlbnVtXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsYXJzKE9iamVjdC52YWx1ZXMoYXJnKSwgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5JTlQzMiwgZGVwdGgpO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwibWVzc2FnZVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWVzc2FnZXMoT2JqZWN0LnZhbHVlcyhhcmcpLCBmaWVsZC5WLlQoKSwgYWxsb3dFeGNlc3NQcm9wZXJ0aWVzLCBkZXB0aCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBtZXNzYWdlKGFyZywgdHlwZSwgYWxsb3dFeGNlc3NQcm9wZXJ0aWVzLCBkZXB0aCkge1xuICAgICAgICBpZiAoYWxsb3dFeGNlc3NQcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICByZXR1cm4gdHlwZS5pc0Fzc2lnbmFibGUoYXJnLCBkZXB0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHR5cGUuaXMoYXJnLCBkZXB0aCk7XG4gICAgfVxuICAgIG1lc3NhZ2VzKGFyZywgdHlwZSwgYWxsb3dFeGNlc3NQcm9wZXJ0aWVzLCBkZXB0aCkge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJnKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKGRlcHRoIDwgMilcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAoYWxsb3dFeGNlc3NQcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZy5sZW5ndGggJiYgaSA8IGRlcHRoOyBpKyspXG4gICAgICAgICAgICAgICAgaWYgKCF0eXBlLmlzQXNzaWduYWJsZShhcmdbaV0sIGRlcHRoIC0gMSkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJnLmxlbmd0aCAmJiBpIDwgZGVwdGg7IGkrKylcbiAgICAgICAgICAgICAgICBpZiAoIXR5cGUuaXMoYXJnW2ldLCBkZXB0aCAtIDEpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHNjYWxhcihhcmcsIHR5cGUsIGxvbmdUeXBlKSB7XG4gICAgICAgIGxldCBhcmdUeXBlID0gdHlwZW9mIGFyZztcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuVUlOVDY0OlxuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkZJWEVENjQ6XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuSU5UNjQ6XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuU0ZJWEVENjQ6XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuU0lOVDY0OlxuICAgICAgICAgICAgICAgIHN3aXRjaCAobG9uZ1R5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5Mb25nVHlwZS5CSUdJTlQ6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJnVHlwZSA9PSBcImJpZ2ludFwiO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLkxvbmdUeXBlLk5VTUJFUjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhcmdUeXBlID09IFwibnVtYmVyXCIgJiYgIWlzTmFOKGFyZyk7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJnVHlwZSA9PSBcInN0cmluZ1wiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5CT09MOlxuICAgICAgICAgICAgICAgIHJldHVybiBhcmdUeXBlID09ICdib29sZWFuJztcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TVFJJTkc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFyZ1R5cGUgPT0gJ3N0cmluZyc7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuQllURVM6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFyZyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXk7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuRE9VQkxFOlxuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkZMT0FUOlxuICAgICAgICAgICAgICAgIHJldHVybiBhcmdUeXBlID09ICdudW1iZXInICYmICFpc05hTihhcmcpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAvLyBjYXNlIFNjYWxhclR5cGUuVUlOVDMyOlxuICAgICAgICAgICAgICAgIC8vIGNhc2UgU2NhbGFyVHlwZS5GSVhFRDMyOlxuICAgICAgICAgICAgICAgIC8vIGNhc2UgU2NhbGFyVHlwZS5JTlQzMjpcbiAgICAgICAgICAgICAgICAvLyBjYXNlIFNjYWxhclR5cGUuU0lOVDMyOlxuICAgICAgICAgICAgICAgIC8vIGNhc2UgU2NhbGFyVHlwZS5TRklYRUQzMjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJnVHlwZSA9PSAnbnVtYmVyJyAmJiBOdW1iZXIuaXNJbnRlZ2VyKGFyZyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2NhbGFycyhhcmcsIHR5cGUsIGRlcHRoLCBsb25nVHlwZSkge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJnKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKGRlcHRoIDwgMilcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhcmcpKVxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmcubGVuZ3RoICYmIGkgPCBkZXB0aDsgaSsrKVxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5zY2FsYXIoYXJnW2ldLCB0eXBlLCBsb25nVHlwZSkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIG1hcEtleXMobWFwLCB0eXBlLCBkZXB0aCkge1xuICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzKG1hcCk7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLklOVDMyOlxuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkZJWEVEMzI6XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuU0ZJWEVEMzI6XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuU0lOVDMyOlxuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlVJTlQzMjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsYXJzKGtleXMuc2xpY2UoMCwgZGVwdGgpLm1hcChrID0+IHBhcnNlSW50KGspKSwgdHlwZSwgZGVwdGgpO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkJPT0w6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGFycyhrZXlzLnNsaWNlKDAsIGRlcHRoKS5tYXAoayA9PiBrID09ICd0cnVlJyA/IHRydWUgOiBrID09ICdmYWxzZScgPyBmYWxzZSA6IGspLCB0eXBlLCBkZXB0aCk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxhcnMoa2V5cywgdHlwZSwgZGVwdGgsIHJlZmxlY3Rpb25faW5mb18xLkxvbmdUeXBlLlNUUklORyk7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLlJlZmxlY3Rpb25UeXBlQ2hlY2sgPSBSZWZsZWN0aW9uVHlwZUNoZWNrO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVmbGVjdGlvbkxvbmdDb252ZXJ0ID0gdm9pZCAwO1xuY29uc3QgcmVmbGVjdGlvbl9pbmZvXzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLWluZm9cIik7XG4vKipcbiAqIFV0aWxpdHkgbWV0aG9kIHRvIGNvbnZlcnQgYSBQYkxvbmcgb3IgUGJVbG9uZyB0byBhIEphdmFTY3JpcHRcbiAqIHJlcHJlc2VudGF0aW9uIGR1cmluZyBydW50aW1lLlxuICpcbiAqIFdvcmtzIHdpdGggZ2VuZXJhdGVkIGZpZWxkIGluZm9ybWF0aW9uLCBgdW5kZWZpbmVkYCBpcyBlcXVpdmFsZW50XG4gKiB0byBgU1RSSU5HYC5cbiAqL1xuZnVuY3Rpb24gcmVmbGVjdGlvbkxvbmdDb252ZXJ0KGxvbmcsIHR5cGUpIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5Mb25nVHlwZS5CSUdJTlQ6XG4gICAgICAgICAgICByZXR1cm4gbG9uZy50b0JpZ0ludCgpO1xuICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLkxvbmdUeXBlLk5VTUJFUjpcbiAgICAgICAgICAgIHJldHVybiBsb25nLnRvTnVtYmVyKCk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAvLyBjYXNlIHVuZGVmaW5lZDpcbiAgICAgICAgICAgIC8vIGNhc2UgTG9uZ1R5cGUuU1RSSU5HOlxuICAgICAgICAgICAgcmV0dXJuIGxvbmcudG9TdHJpbmcoKTtcbiAgICB9XG59XG5leHBvcnRzLnJlZmxlY3Rpb25Mb25nQ29udmVydCA9IHJlZmxlY3Rpb25Mb25nQ29udmVydDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlJlZmxlY3Rpb25Kc29uUmVhZGVyID0gdm9pZCAwO1xuY29uc3QganNvbl90eXBpbmdzXzEgPSByZXF1aXJlKFwiLi9qc29uLXR5cGluZ3NcIik7XG5jb25zdCBiYXNlNjRfMSA9IHJlcXVpcmUoXCIuL2Jhc2U2NFwiKTtcbmNvbnN0IHJlZmxlY3Rpb25faW5mb18xID0gcmVxdWlyZShcIi4vcmVmbGVjdGlvbi1pbmZvXCIpO1xuY29uc3QgcGJfbG9uZ18xID0gcmVxdWlyZShcIi4vcGItbG9uZ1wiKTtcbmNvbnN0IGFzc2VydF8xID0gcmVxdWlyZShcIi4vYXNzZXJ0XCIpO1xuY29uc3QgcmVmbGVjdGlvbl9sb25nX2NvbnZlcnRfMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24tbG9uZy1jb252ZXJ0XCIpO1xuLyoqXG4gKiBSZWFkcyBwcm90bzMgbWVzc2FnZXMgaW4gY2Fub25pY2FsIEpTT04gZm9ybWF0IHVzaW5nIHJlZmxlY3Rpb24gaW5mb3JtYXRpb24uXG4gKlxuICogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL3Byb3RvMyNqc29uXG4gKi9cbmNsYXNzIFJlZmxlY3Rpb25Kc29uUmVhZGVyIHtcbiAgICBjb25zdHJ1Y3RvcihpbmZvKSB7XG4gICAgICAgIHRoaXMuaW5mbyA9IGluZm87XG4gICAgfVxuICAgIHByZXBhcmUoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKHRoaXMuZk1hcCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmZNYXAgPSB7fTtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkc0lucHV0ID0gKF9hID0gdGhpcy5pbmZvLmZpZWxkcykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkc0lucHV0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mTWFwW2ZpZWxkLm5hbWVdID0gZmllbGQ7XG4gICAgICAgICAgICAgICAgdGhpcy5mTWFwW2ZpZWxkLmpzb25OYW1lXSA9IGZpZWxkO1xuICAgICAgICAgICAgICAgIHRoaXMuZk1hcFtmaWVsZC5sb2NhbE5hbWVdID0gZmllbGQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gQ2Fubm90IHBhcnNlIEpTT04gPHR5cGUgb2YganNvblZhbHVlPiBmb3IgPHR5cGUgbmFtZT4jPGZpZWxkTmFtZT4uXG4gICAgYXNzZXJ0KGNvbmRpdGlvbiwgZmllbGROYW1lLCBqc29uVmFsdWUpIHtcbiAgICAgICAgaWYgKCFjb25kaXRpb24pIHtcbiAgICAgICAgICAgIGxldCB3aGF0ID0ganNvbl90eXBpbmdzXzEudHlwZW9mSnNvblZhbHVlKGpzb25WYWx1ZSk7XG4gICAgICAgICAgICBpZiAod2hhdCA9PSBcIm51bWJlclwiIHx8IHdoYXQgPT0gXCJib29sZWFuXCIpXG4gICAgICAgICAgICAgICAgd2hhdCA9IGpzb25WYWx1ZS50b1N0cmluZygpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcGFyc2UgSlNPTiAke3doYXR9IGZvciAke3RoaXMuaW5mby50eXBlTmFtZX0jJHtmaWVsZE5hbWV9YCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVhZHMgYSBtZXNzYWdlIGZyb20gY2Fub25pY2FsIEpTT04gZm9ybWF0IGludG8gdGhlIHRhcmdldCBtZXNzYWdlLlxuICAgICAqXG4gICAgICogUmVwZWF0ZWQgZmllbGRzIGFyZSBhcHBlbmRlZC4gTWFwIGVudHJpZXMgYXJlIGFkZGVkLCBvdmVyd3JpdGluZ1xuICAgICAqIGV4aXN0aW5nIGtleXMuXG4gICAgICpcbiAgICAgKiBJZiBhIG1lc3NhZ2UgZmllbGQgaXMgYWxyZWFkeSBwcmVzZW50LCBpdCB3aWxsIGJlIG1lcmdlZCB3aXRoIHRoZVxuICAgICAqIG5ldyBkYXRhLlxuICAgICAqL1xuICAgIHJlYWQoaW5wdXQsIG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5wcmVwYXJlKCk7XG4gICAgICAgIGNvbnN0IG9uZW9mc0hhbmRsZWQgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBbanNvbktleSwganNvblZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5mTWFwW2pzb25LZXldO1xuICAgICAgICAgICAgaWYgKCFmaWVsZCkge1xuICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucy5pZ25vcmVVbmtub3duRmllbGRzKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZvdW5kIHVua25vd24gZmllbGQgd2hpbGUgcmVhZGluZyAke3RoaXMuaW5mby50eXBlTmFtZX0gZnJvbSBKU09OIGZvcm1hdC4gSlNPTiBrZXk6ICR7anNvbktleX1gKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGxvY2FsTmFtZSA9IGZpZWxkLmxvY2FsTmFtZTtcbiAgICAgICAgICAgIC8vIGhhbmRsZSBvbmVvZiBBRFRcbiAgICAgICAgICAgIGxldCB0YXJnZXQ7IC8vIHRoaXMgd2lsbCBiZSB0aGUgdGFyZ2V0IGZvciB0aGUgZmllbGQgdmFsdWUsIHdoZXRoZXIgaXQgaXMgbWVtYmVyIG9mIGEgb25lb2Ygb3Igbm90XG4gICAgICAgICAgICBpZiAoZmllbGQub25lb2YpIHtcbiAgICAgICAgICAgICAgICBpZiAoanNvblZhbHVlID09PSBudWxsICYmIChmaWVsZC5raW5kICE9PSAnZW51bScgfHwgZmllbGQuVCgpWzBdICE9PSAnZ29vZ2xlLnByb3RvYnVmLk51bGxWYWx1ZScpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBzaW5jZSBqc29uIG9iamVjdHMgYXJlIHVub3JkZXJlZCBieSBzcGVjaWZpY2F0aW9uLCBpdCBpcyBub3QgcG9zc2libGUgdG8gdGFrZSB0aGUgbGFzdCBvZiBtdWx0aXBsZSBvbmVvZnNcbiAgICAgICAgICAgICAgICBpZiAob25lb2ZzSGFuZGxlZC5pbmNsdWRlcyhmaWVsZC5vbmVvZikpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTXVsdGlwbGUgbWVtYmVycyBvZiB0aGUgb25lb2YgZ3JvdXAgXCIke2ZpZWxkLm9uZW9mfVwiIG9mICR7dGhpcy5pbmZvLnR5cGVOYW1lfSBhcmUgcHJlc2VudCBpbiBKU09OLmApO1xuICAgICAgICAgICAgICAgIG9uZW9mc0hhbmRsZWQucHVzaChmaWVsZC5vbmVvZik7XG4gICAgICAgICAgICAgICAgdGFyZ2V0ID0gbWVzc2FnZVtmaWVsZC5vbmVvZl0gPSB7XG4gICAgICAgICAgICAgICAgICAgIG9uZW9mS2luZDogbG9jYWxOYW1lXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRhcmdldCA9IG1lc3NhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB3ZSBoYXZlIGhhbmRsZWQgb25lb2YgYWJvdmUuIHdlIGp1c3QgaGF2ZSByZWFkIHRoZSB2YWx1ZSBpbnRvIGB0YXJnZXRgLlxuICAgICAgICAgICAgaWYgKGZpZWxkLmtpbmQgPT0gJ21hcCcpIHtcbiAgICAgICAgICAgICAgICBpZiAoanNvblZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBjaGVjayBpbnB1dFxuICAgICAgICAgICAgICAgIHRoaXMuYXNzZXJ0KGpzb25fdHlwaW5nc18xLmlzSnNvbk9iamVjdChqc29uVmFsdWUpLCBmaWVsZC5uYW1lLCBqc29uVmFsdWUpO1xuICAgICAgICAgICAgICAgIC8vIG91ciB0YXJnZXQgdG8gcHV0IG1hcCBlbnRyaWVzIGludG9cbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZE9iaiA9IHRhcmdldFtsb2NhbE5hbWVdO1xuICAgICAgICAgICAgICAgIC8vIHJlYWQgZW50cmllc1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2pzb25PYmpLZXksIGpzb25PYmpWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoanNvblZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFzc2VydChqc29uT2JqVmFsdWUgIT09IG51bGwsIGZpZWxkLm5hbWUgKyBcIiBtYXAgdmFsdWVcIiwgbnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHJlYWQgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgbGV0IHZhbDtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChmaWVsZC5WLmtpbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJtZXNzYWdlXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gZmllbGQuVi5UKCkuaW50ZXJuYWxKc29uUmVhZChqc29uT2JqVmFsdWUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImVudW1cIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSB0aGlzLmVudW0oZmllbGQuVi5UKCksIGpzb25PYmpWYWx1ZSwgZmllbGQubmFtZSwgb3B0aW9ucy5pZ25vcmVVbmtub3duRmllbGRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwic2NhbGFyXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gdGhpcy5zY2FsYXIoanNvbk9ialZhbHVlLCBmaWVsZC5WLlQsIGZpZWxkLlYuTCwgZmllbGQubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hc3NlcnQodmFsICE9PSB1bmRlZmluZWQsIGZpZWxkLm5hbWUgKyBcIiBtYXAgdmFsdWVcIiwganNvbk9ialZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVhZCBrZXlcbiAgICAgICAgICAgICAgICAgICAgbGV0IGtleSA9IGpzb25PYmpLZXk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZC5LID09IHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuQk9PTClcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IGtleSA9PSBcInRydWVcIiA/IHRydWUgOiBrZXkgPT0gXCJmYWxzZVwiID8gZmFsc2UgOiBrZXk7XG4gICAgICAgICAgICAgICAgICAgIGtleSA9IHRoaXMuc2NhbGFyKGtleSwgZmllbGQuSywgcmVmbGVjdGlvbl9pbmZvXzEuTG9uZ1R5cGUuU1RSSU5HLCBmaWVsZC5uYW1lKS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBmaWVsZE9ialtrZXldID0gdmFsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGZpZWxkLnJlcGVhdCkge1xuICAgICAgICAgICAgICAgIGlmIChqc29uVmFsdWUgPT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIC8vIGNoZWNrIGlucHV0XG4gICAgICAgICAgICAgICAgdGhpcy5hc3NlcnQoQXJyYXkuaXNBcnJheShqc29uVmFsdWUpLCBmaWVsZC5uYW1lLCBqc29uVmFsdWUpO1xuICAgICAgICAgICAgICAgIC8vIG91ciB0YXJnZXQgdG8gcHV0IGFycmF5IGVudHJpZXMgaW50b1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkQXJyID0gdGFyZ2V0W2xvY2FsTmFtZV07XG4gICAgICAgICAgICAgICAgLy8gcmVhZCBhcnJheSBlbnRyaWVzXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBqc29uSXRlbSBvZiBqc29uVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hc3NlcnQoanNvbkl0ZW0gIT09IG51bGwsIGZpZWxkLm5hbWUsIG51bGwpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgdmFsO1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGZpZWxkLmtpbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJtZXNzYWdlXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gZmllbGQuVCgpLmludGVybmFsSnNvblJlYWQoanNvbkl0ZW0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImVudW1cIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSB0aGlzLmVudW0oZmllbGQuVCgpLCBqc29uSXRlbSwgZmllbGQubmFtZSwgb3B0aW9ucy5pZ25vcmVVbmtub3duRmllbGRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwic2NhbGFyXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gdGhpcy5zY2FsYXIoanNvbkl0ZW0sIGZpZWxkLlQsIGZpZWxkLkwsIGZpZWxkLm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXNzZXJ0KHZhbCAhPT0gdW5kZWZpbmVkLCBmaWVsZC5uYW1lLCBqc29uVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBmaWVsZEFyci5wdXNoKHZhbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChmaWVsZC5raW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJtZXNzYWdlXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoanNvblZhbHVlID09PSBudWxsICYmIGZpZWxkLlQoKS50eXBlTmFtZSAhPSAnZ29vZ2xlLnByb3RvYnVmLlZhbHVlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXNzZXJ0KGZpZWxkLm9uZW9mID09PSB1bmRlZmluZWQsIGZpZWxkLm5hbWUgKyBcIiAob25lb2YgbWVtYmVyKVwiLCBudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFtsb2NhbE5hbWVdID0gZmllbGQuVCgpLmludGVybmFsSnNvblJlYWQoanNvblZhbHVlLCBvcHRpb25zLCB0YXJnZXRbbG9jYWxOYW1lXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImVudW1cIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWwgPSB0aGlzLmVudW0oZmllbGQuVCgpLCBqc29uVmFsdWUsIGZpZWxkLm5hbWUsIG9wdGlvbnMuaWdub3JlVW5rbm93bkZpZWxkcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFtsb2NhbE5hbWVdID0gdmFsO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJzY2FsYXJcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFtsb2NhbE5hbWVdID0gdGhpcy5zY2FsYXIoanNvblZhbHVlLCBmaWVsZC5ULCBmaWVsZC5MLCBmaWVsZC5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGBmYWxzZWAgZm9yIHVucmVjb2duaXplZCBzdHJpbmcgcmVwcmVzZW50YXRpb25zLlxuICAgICAqXG4gICAgICogZ29vZ2xlLnByb3RvYnVmLk51bGxWYWx1ZSBhY2NlcHRzIG9ubHkgSlNPTiBgbnVsbGAgKG9yIHRoZSBvbGQgYFwiTlVMTF9WQUxVRVwiYCkuXG4gICAgICovXG4gICAgZW51bSh0eXBlLCBqc29uLCBmaWVsZE5hbWUsIGlnbm9yZVVua25vd25GaWVsZHMpIHtcbiAgICAgICAgaWYgKHR5cGVbMF0gPT0gJ2dvb2dsZS5wcm90b2J1Zi5OdWxsVmFsdWUnKVxuICAgICAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KGpzb24gPT09IG51bGwgfHwganNvbiA9PT0gXCJOVUxMX1ZBTFVFXCIsIGBVbmFibGUgdG8gcGFyc2UgZmllbGQgJHt0aGlzLmluZm8udHlwZU5hbWV9IyR7ZmllbGROYW1lfSwgZW51bSAke3R5cGVbMF19IG9ubHkgYWNjZXB0cyBudWxsLmApO1xuICAgICAgICBpZiAoanNvbiA9PT0gbnVsbClcbiAgICAgICAgICAgIC8vIHdlIHJlcXVpcmUgMCB0byBiZSBkZWZhdWx0IHZhbHVlIGZvciBhbGwgZW51bXNcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICBzd2l0Y2ggKHR5cGVvZiBqc29uKSB7XG4gICAgICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KE51bWJlci5pc0ludGVnZXIoanNvbiksIGBVbmFibGUgdG8gcGFyc2UgZmllbGQgJHt0aGlzLmluZm8udHlwZU5hbWV9IyR7ZmllbGROYW1lfSwgZW51bSBjYW4gb25seSBiZSBpbnRlZ3JhbCBudW1iZXIsIGdvdCAke2pzb259LmApO1xuICAgICAgICAgICAgICAgIHJldHVybiBqc29uO1xuICAgICAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgICAgICAgIGxldCBsb2NhbEVudW1OYW1lID0ganNvbjtcbiAgICAgICAgICAgICAgICBpZiAodHlwZVsyXSAmJiBqc29uLnN1YnN0cmluZygwLCB0eXBlWzJdLmxlbmd0aCkgPT09IHR5cGVbMl0pXG4gICAgICAgICAgICAgICAgICAgIC8vIGxvb2t1cCB3aXRob3V0IHRoZSBzaGFyZWQgcHJlZml4XG4gICAgICAgICAgICAgICAgICAgIGxvY2FsRW51bU5hbWUgPSBqc29uLnN1YnN0cmluZyh0eXBlWzJdLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgbGV0IGVudW1OdW1iZXIgPSB0eXBlWzFdW2xvY2FsRW51bU5hbWVdO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZW51bU51bWJlciA9PT0gJ3VuZGVmaW5lZCcgJiYgaWdub3JlVW5rbm93bkZpZWxkcykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydCh0eXBlb2YgZW51bU51bWJlciA9PSBcIm51bWJlclwiLCBgVW5hYmxlIHRvIHBhcnNlIGZpZWxkICR7dGhpcy5pbmZvLnR5cGVOYW1lfSMke2ZpZWxkTmFtZX0sIGVudW0gJHt0eXBlWzBdfSBoYXMgbm8gdmFsdWUgZm9yIFwiJHtqc29ufVwiLmApO1xuICAgICAgICAgICAgICAgIHJldHVybiBlbnVtTnVtYmVyO1xuICAgICAgICB9XG4gICAgICAgIGFzc2VydF8xLmFzc2VydChmYWxzZSwgYFVuYWJsZSB0byBwYXJzZSBmaWVsZCAke3RoaXMuaW5mby50eXBlTmFtZX0jJHtmaWVsZE5hbWV9LCBjYW5ub3QgcGFyc2UgZW51bSB2YWx1ZSBmcm9tICR7dHlwZW9mIGpzb259XCIuYCk7XG4gICAgfVxuICAgIHNjYWxhcihqc29uLCB0eXBlLCBsb25nVHlwZSwgZmllbGROYW1lKSB7XG4gICAgICAgIGxldCBlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICAgICAgLy8gZmxvYXQsIGRvdWJsZTogSlNPTiB2YWx1ZSB3aWxsIGJlIGEgbnVtYmVyIG9yIG9uZSBvZiB0aGUgc3BlY2lhbCBzdHJpbmcgdmFsdWVzIFwiTmFOXCIsIFwiSW5maW5pdHlcIiwgYW5kIFwiLUluZmluaXR5XCIuXG4gICAgICAgICAgICAgICAgLy8gRWl0aGVyIG51bWJlcnMgb3Igc3RyaW5ncyBhcmUgYWNjZXB0ZWQuIEV4cG9uZW50IG5vdGF0aW9uIGlzIGFsc28gYWNjZXB0ZWQuXG4gICAgICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkRPVUJMRTpcbiAgICAgICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuRkxPQVQ6XG4gICAgICAgICAgICAgICAgICAgIGlmIChqc29uID09PSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC4wO1xuICAgICAgICAgICAgICAgICAgICBpZiAoanNvbiA9PT0gXCJOYU5cIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOdW1iZXIuTmFOO1xuICAgICAgICAgICAgICAgICAgICBpZiAoanNvbiA9PT0gXCJJbmZpbml0eVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24gPT09IFwiLUluZmluaXR5XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO1xuICAgICAgICAgICAgICAgICAgICBpZiAoanNvbiA9PT0gXCJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZSA9IFwiZW1wdHkgc3RyaW5nXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGpzb24gPT0gXCJzdHJpbmdcIiAmJiBqc29uLnRyaW0oKS5sZW5ndGggIT09IGpzb24ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlID0gXCJleHRyYSB3aGl0ZXNwYWNlXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGpzb24gIT0gXCJzdHJpbmdcIiAmJiB0eXBlb2YganNvbiAhPSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBsZXQgZmxvYXQgPSBOdW1iZXIoanNvbik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChOdW1iZXIuaXNOYU4oZmxvYXQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlID0gXCJub3QgYSBudW1iZXJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghTnVtYmVyLmlzRmluaXRlKGZsb2F0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5maW5pdHkgYW5kIC1pbmZpbml0eSBhcmUgaGFuZGxlZCBieSBzdHJpbmcgcmVwcmVzZW50YXRpb24gYWJvdmUsIHNvIHRoaXMgaXMgYW4gZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgIGUgPSBcInRvbyBsYXJnZSBvciBzbWFsbFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5GTE9BVClcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydEZsb2F0MzIoZmxvYXQpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmxvYXQ7XG4gICAgICAgICAgICAgICAgLy8gaW50MzIsIGZpeGVkMzIsIHVpbnQzMjogSlNPTiB2YWx1ZSB3aWxsIGJlIGEgZGVjaW1hbCBudW1iZXIuIEVpdGhlciBudW1iZXJzIG9yIHN0cmluZ3MgYXJlIGFjY2VwdGVkLlxuICAgICAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5JTlQzMjpcbiAgICAgICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuRklYRUQzMjpcbiAgICAgICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuU0ZJWEVEMzI6XG4gICAgICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNJTlQzMjpcbiAgICAgICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuVUlOVDMyOlxuICAgICAgICAgICAgICAgICAgICBpZiAoanNvbiA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgICAgICAgICBsZXQgaW50MzI7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YganNvbiA9PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgaW50MzIgPSBqc29uO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChqc29uID09PSBcIlwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgZSA9IFwiZW1wdHkgc3RyaW5nXCI7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBqc29uID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqc29uLnRyaW0oKS5sZW5ndGggIT09IGpzb24ubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgPSBcImV4dHJhIHdoaXRlc3BhY2VcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMiA9IE51bWJlcihqc29uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoaW50MzIgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlVJTlQzMilcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydFVJbnQzMihpbnQzMik7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydEludDMyKGludDMyKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGludDMyO1xuICAgICAgICAgICAgICAgIC8vIGludDY0LCBmaXhlZDY0LCB1aW50NjQ6IEpTT04gdmFsdWUgd2lsbCBiZSBhIGRlY2ltYWwgc3RyaW5nLiBFaXRoZXIgbnVtYmVycyBvciBzdHJpbmdzIGFyZSBhY2NlcHRlZC5cbiAgICAgICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuSU5UNjQ6XG4gICAgICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNGSVhFRDY0OlxuICAgICAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TSU5UNjQ6XG4gICAgICAgICAgICAgICAgICAgIGlmIChqc29uID09PSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlZmxlY3Rpb25fbG9uZ19jb252ZXJ0XzEucmVmbGVjdGlvbkxvbmdDb252ZXJ0KHBiX2xvbmdfMS5QYkxvbmcuWkVSTywgbG9uZ1R5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGpzb24gIT0gXCJudW1iZXJcIiAmJiB0eXBlb2YganNvbiAhPSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWZsZWN0aW9uX2xvbmdfY29udmVydF8xLnJlZmxlY3Rpb25Mb25nQ29udmVydChwYl9sb25nXzEuUGJMb25nLmZyb20oanNvbiksIGxvbmdUeXBlKTtcbiAgICAgICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuRklYRUQ2NDpcbiAgICAgICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuVUlOVDY0OlxuICAgICAgICAgICAgICAgICAgICBpZiAoanNvbiA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWZsZWN0aW9uX2xvbmdfY29udmVydF8xLnJlZmxlY3Rpb25Mb25nQ29udmVydChwYl9sb25nXzEuUGJVTG9uZy5aRVJPLCBsb25nVHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YganNvbiAhPSBcIm51bWJlclwiICYmIHR5cGVvZiBqc29uICE9IFwic3RyaW5nXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlZmxlY3Rpb25fbG9uZ19jb252ZXJ0XzEucmVmbGVjdGlvbkxvbmdDb252ZXJ0KHBiX2xvbmdfMS5QYlVMb25nLmZyb20oanNvbiksIGxvbmdUeXBlKTtcbiAgICAgICAgICAgICAgICAvLyBib29sOlxuICAgICAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5CT09MOlxuICAgICAgICAgICAgICAgICAgICBpZiAoanNvbiA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBqc29uICE9PSBcImJvb2xlYW5cIilcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ganNvbjtcbiAgICAgICAgICAgICAgICAvLyBzdHJpbmc6XG4gICAgICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNUUklORzpcbiAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24gPT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBqc29uICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlID0gXCJleHRyYSB3aGl0ZXNwYWNlXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KGpzb24pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlID0gXCJpbnZhbGlkIFVURjhcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBqc29uO1xuICAgICAgICAgICAgICAgIC8vIGJ5dGVzOiBKU09OIHZhbHVlIHdpbGwgYmUgdGhlIGRhdGEgZW5jb2RlZCBhcyBhIHN0cmluZyB1c2luZyBzdGFuZGFyZCBiYXNlNjQgZW5jb2Rpbmcgd2l0aCBwYWRkaW5ncy5cbiAgICAgICAgICAgICAgICAvLyBFaXRoZXIgc3RhbmRhcmQgb3IgVVJMLXNhZmUgYmFzZTY0IGVuY29kaW5nIHdpdGgvd2l0aG91dCBwYWRkaW5ncyBhcmUgYWNjZXB0ZWQuXG4gICAgICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkJZVEVTOlxuICAgICAgICAgICAgICAgICAgICBpZiAoanNvbiA9PT0gbnVsbCB8fCBqc29uID09PSBcIlwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KDApO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGpzb24gIT09ICdzdHJpbmcnKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBiYXNlNjRfMS5iYXNlNjRkZWNvZGUoanNvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBlID0gZXJyb3IubWVzc2FnZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFzc2VydChmYWxzZSwgZmllbGROYW1lICsgKGUgPyBcIiAtIFwiICsgZSA6IFwiXCIpLCBqc29uKTtcbiAgICB9XG59XG5leHBvcnRzLlJlZmxlY3Rpb25Kc29uUmVhZGVyID0gUmVmbGVjdGlvbkpzb25SZWFkZXI7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5SZWZsZWN0aW9uSnNvbldyaXRlciA9IHZvaWQgMDtcbmNvbnN0IGJhc2U2NF8xID0gcmVxdWlyZShcIi4vYmFzZTY0XCIpO1xuY29uc3QgcGJfbG9uZ18xID0gcmVxdWlyZShcIi4vcGItbG9uZ1wiKTtcbmNvbnN0IHJlZmxlY3Rpb25faW5mb18xID0gcmVxdWlyZShcIi4vcmVmbGVjdGlvbi1pbmZvXCIpO1xuY29uc3QgYXNzZXJ0XzEgPSByZXF1aXJlKFwiLi9hc3NlcnRcIik7XG4vKipcbiAqIFdyaXRlcyBwcm90bzMgbWVzc2FnZXMgaW4gY2Fub25pY2FsIEpTT04gZm9ybWF0IHVzaW5nIHJlZmxlY3Rpb25cbiAqIGluZm9ybWF0aW9uLlxuICpcbiAqIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvZG9jcy9wcm90bzMjanNvblxuICovXG5jbGFzcyBSZWZsZWN0aW9uSnNvbldyaXRlciB7XG4gICAgY29uc3RydWN0b3IoaW5mbykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHRoaXMuZmllbGRzID0gKF9hID0gaW5mby5maWVsZHMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFtdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyB0aGUgbWVzc2FnZSB0byBhIEpTT04gb2JqZWN0LCBiYXNlZCBvbiB0aGUgZmllbGQgZGVzY3JpcHRvcnMuXG4gICAgICovXG4gICAgd3JpdGUobWVzc2FnZSwgb3B0aW9ucykge1xuICAgICAgICBjb25zdCBqc29uID0ge30sIHNvdXJjZSA9IG1lc3NhZ2U7XG4gICAgICAgIGZvciAoY29uc3QgZmllbGQgb2YgdGhpcy5maWVsZHMpIHtcbiAgICAgICAgICAgIC8vIGZpZWxkIGlzIG5vdCBwYXJ0IG9mIGEgb25lb2YsIHNpbXBseSB3cml0ZSBhcyBpc1xuICAgICAgICAgICAgaWYgKCFmaWVsZC5vbmVvZikge1xuICAgICAgICAgICAgICAgIGxldCBqc29uVmFsdWUgPSB0aGlzLmZpZWxkKGZpZWxkLCBzb3VyY2VbZmllbGQubG9jYWxOYW1lXSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgaWYgKGpzb25WYWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICBqc29uW29wdGlvbnMudXNlUHJvdG9GaWVsZE5hbWUgPyBmaWVsZC5uYW1lIDogZmllbGQuanNvbk5hbWVdID0ganNvblZhbHVlO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZmllbGQgaXMgcGFydCBvZiBhIG9uZW9mXG4gICAgICAgICAgICBjb25zdCBncm91cCA9IHNvdXJjZVtmaWVsZC5vbmVvZl07XG4gICAgICAgICAgICBpZiAoZ3JvdXAub25lb2ZLaW5kICE9PSBmaWVsZC5sb2NhbE5hbWUpXG4gICAgICAgICAgICAgICAgY29udGludWU7IC8vIG5vdCBzZWxlY3RlZCwgc2tpcFxuICAgICAgICAgICAgY29uc3Qgb3B0ID0gZmllbGQua2luZCA9PSAnc2NhbGFyJyB8fCBmaWVsZC5raW5kID09ICdlbnVtJ1xuICAgICAgICAgICAgICAgID8gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKSwgeyBlbWl0RGVmYXVsdFZhbHVlczogdHJ1ZSB9KSA6IG9wdGlvbnM7XG4gICAgICAgICAgICBsZXQganNvblZhbHVlID0gdGhpcy5maWVsZChmaWVsZCwgZ3JvdXBbZmllbGQubG9jYWxOYW1lXSwgb3B0KTtcbiAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydChqc29uVmFsdWUgIT09IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICBqc29uW29wdGlvbnMudXNlUHJvdG9GaWVsZE5hbWUgPyBmaWVsZC5uYW1lIDogZmllbGQuanNvbk5hbWVdID0ganNvblZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBqc29uO1xuICAgIH1cbiAgICBmaWVsZChmaWVsZCwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgICAgICAgbGV0IGpzb25WYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKGZpZWxkLmtpbmQgPT0gJ21hcCcpIHtcbiAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydCh0eXBlb2YgdmFsdWUgPT0gXCJvYmplY3RcIiAmJiB2YWx1ZSAhPT0gbnVsbCk7XG4gICAgICAgICAgICBjb25zdCBqc29uT2JqID0ge307XG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkLlYua2luZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzY2FsYXJcIjpcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBbZW50cnlLZXksIGVudHJ5VmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsID0gdGhpcy5zY2FsYXIoZmllbGQuVi5ULCBlbnRyeVZhbHVlLCBmaWVsZC5uYW1lLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnQodmFsICE9PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAganNvbk9ialtlbnRyeUtleS50b1N0cmluZygpXSA9IHZhbDsgLy8gSlNPTiBzdGFuZGFyZCBhbGxvd3Mgb25seSAoZG91YmxlIHF1b3RlZCkgc3RyaW5nIGFzIHByb3BlcnR5IGtleVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJtZXNzYWdlXCI6XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2VUeXBlID0gZmllbGQuVi5UKCk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2VudHJ5S2V5LCBlbnRyeVZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbCA9IHRoaXMubWVzc2FnZShtZXNzYWdlVHlwZSwgZW50cnlWYWx1ZSwgZmllbGQubmFtZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnQodmFsICE9PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAganNvbk9ialtlbnRyeUtleS50b1N0cmluZygpXSA9IHZhbDsgLy8gSlNPTiBzdGFuZGFyZCBhbGxvd3Mgb25seSAoZG91YmxlIHF1b3RlZCkgc3RyaW5nIGFzIHByb3BlcnR5IGtleVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJlbnVtXCI6XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVudW1JbmZvID0gZmllbGQuVi5UKCk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2VudHJ5S2V5LCBlbnRyeVZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydChlbnRyeVZhbHVlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIGVudHJ5VmFsdWUgPT0gJ251bWJlcicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsID0gdGhpcy5lbnVtKGVudW1JbmZvLCBlbnRyeVZhbHVlLCBmaWVsZC5uYW1lLCBmYWxzZSwgdHJ1ZSwgb3B0aW9ucy5lbnVtQXNJbnRlZ2VyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydCh2YWwgIT09IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBqc29uT2JqW2VudHJ5S2V5LnRvU3RyaW5nKCldID0gdmFsOyAvLyBKU09OIHN0YW5kYXJkIGFsbG93cyBvbmx5IChkb3VibGUgcXVvdGVkKSBzdHJpbmcgYXMgcHJvcGVydHkga2V5XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5lbWl0RGVmYXVsdFZhbHVlcyB8fCBPYmplY3Qua2V5cyhqc29uT2JqKS5sZW5ndGggPiAwKVxuICAgICAgICAgICAgICAgIGpzb25WYWx1ZSA9IGpzb25PYmo7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZmllbGQucmVwZWF0KSB7XG4gICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnQoQXJyYXkuaXNBcnJheSh2YWx1ZSkpO1xuICAgICAgICAgICAgY29uc3QganNvbkFyciA9IFtdO1xuICAgICAgICAgICAgc3dpdGNoIChmaWVsZC5raW5kKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNjYWxhclwiOlxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWwgPSB0aGlzLnNjYWxhcihmaWVsZC5ULCB2YWx1ZVtpXSwgZmllbGQubmFtZSwgZmllbGQub3B0LCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydCh2YWwgIT09IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBqc29uQXJyLnB1c2godmFsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiZW51bVwiOlxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbnVtSW5mbyA9IGZpZWxkLlQoKTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KHZhbHVlW2ldID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHZhbHVlW2ldID09ICdudW1iZXInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbCA9IHRoaXMuZW51bShlbnVtSW5mbywgdmFsdWVbaV0sIGZpZWxkLm5hbWUsIGZpZWxkLm9wdCwgdHJ1ZSwgb3B0aW9ucy5lbnVtQXNJbnRlZ2VyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydCh2YWwgIT09IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBqc29uQXJyLnB1c2godmFsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwibWVzc2FnZVwiOlxuICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlVHlwZSA9IGZpZWxkLlQoKTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsID0gdGhpcy5tZXNzYWdlKG1lc3NhZ2VUeXBlLCB2YWx1ZVtpXSwgZmllbGQubmFtZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnQodmFsICE9PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAganNvbkFyci5wdXNoKHZhbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBhZGQgY29udmVydGVkIGFycmF5IHRvIGpzb24gb3V0cHV0XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5lbWl0RGVmYXVsdFZhbHVlcyB8fCBqc29uQXJyLmxlbmd0aCA+IDAgfHwgb3B0aW9ucy5lbWl0RGVmYXVsdFZhbHVlcylcbiAgICAgICAgICAgICAgICBqc29uVmFsdWUgPSBqc29uQXJyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc3dpdGNoIChmaWVsZC5raW5kKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNjYWxhclwiOlxuICAgICAgICAgICAgICAgICAgICBqc29uVmFsdWUgPSB0aGlzLnNjYWxhcihmaWVsZC5ULCB2YWx1ZSwgZmllbGQubmFtZSwgZmllbGQub3B0LCBvcHRpb25zLmVtaXREZWZhdWx0VmFsdWVzKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImVudW1cIjpcbiAgICAgICAgICAgICAgICAgICAganNvblZhbHVlID0gdGhpcy5lbnVtKGZpZWxkLlQoKSwgdmFsdWUsIGZpZWxkLm5hbWUsIGZpZWxkLm9wdCwgb3B0aW9ucy5lbWl0RGVmYXVsdFZhbHVlcywgb3B0aW9ucy5lbnVtQXNJbnRlZ2VyKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm1lc3NhZ2VcIjpcbiAgICAgICAgICAgICAgICAgICAganNvblZhbHVlID0gdGhpcy5tZXNzYWdlKGZpZWxkLlQoKSwgdmFsdWUsIGZpZWxkLm5hbWUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ganNvblZhbHVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGBudWxsYCBhcyB0aGUgZGVmYXVsdCBmb3IgZ29vZ2xlLnByb3RvYnVmLk51bGxWYWx1ZS5cbiAgICAgKi9cbiAgICBlbnVtKHR5cGUsIHZhbHVlLCBmaWVsZE5hbWUsIG9wdGlvbmFsLCBlbWl0RGVmYXVsdFZhbHVlcywgZW51bUFzSW50ZWdlcikge1xuICAgICAgICBpZiAodHlwZVswXSA9PSAnZ29vZ2xlLnByb3RvYnVmLk51bGxWYWx1ZScpXG4gICAgICAgICAgICByZXR1cm4gIWVtaXREZWZhdWx0VmFsdWVzICYmICFvcHRpb25hbCA/IHVuZGVmaW5lZCA6IG51bGw7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnQob3B0aW9uYWwpO1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgPT09IDAgJiYgIWVtaXREZWZhdWx0VmFsdWVzICYmICFvcHRpb25hbClcbiAgICAgICAgICAgIC8vIHdlIHJlcXVpcmUgMCB0byBiZSBkZWZhdWx0IHZhbHVlIGZvciBhbGwgZW51bXNcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIGFzc2VydF8xLmFzc2VydCh0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicpO1xuICAgICAgICBhc3NlcnRfMS5hc3NlcnQoTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkpO1xuICAgICAgICBpZiAoZW51bUFzSW50ZWdlciB8fCAhdHlwZVsxXS5oYXNPd25Qcm9wZXJ0eSh2YWx1ZSkpXG4gICAgICAgICAgICAvLyBpZiB3ZSBkb24ndCBub3cgdGhlIGVudW0gdmFsdWUsIGp1c3QgcmV0dXJuIHRoZSBudW1iZXJcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgaWYgKHR5cGVbMl0pXG4gICAgICAgICAgICAvLyByZXN0b3JlIHRoZSBkcm9wcGVkIHByZWZpeFxuICAgICAgICAgICAgcmV0dXJuIHR5cGVbMl0gKyB0eXBlWzFdW3ZhbHVlXTtcbiAgICAgICAgcmV0dXJuIHR5cGVbMV1bdmFsdWVdO1xuICAgIH1cbiAgICBtZXNzYWdlKHR5cGUsIHZhbHVlLCBmaWVsZE5hbWUsIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5lbWl0RGVmYXVsdFZhbHVlcyA/IG51bGwgOiB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiB0eXBlLmludGVybmFsSnNvbldyaXRlKHZhbHVlLCBvcHRpb25zKTtcbiAgICB9XG4gICAgc2NhbGFyKHR5cGUsIHZhbHVlLCBmaWVsZE5hbWUsIG9wdGlvbmFsLCBlbWl0RGVmYXVsdFZhbHVlcykge1xuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KG9wdGlvbmFsKTtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZWQgPSBlbWl0RGVmYXVsdFZhbHVlcyB8fCBvcHRpb25hbDtcbiAgICAgICAgLy8gbm9pbnNwZWN0aW9uIEZhbGxUaHJvdWdoSW5Td2l0Y2hTdGF0ZW1lbnRKU1xuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgIC8vIGludDMyLCBmaXhlZDMyLCB1aW50MzI6IEpTT04gdmFsdWUgd2lsbCBiZSBhIGRlY2ltYWwgbnVtYmVyLiBFaXRoZXIgbnVtYmVycyBvciBzdHJpbmdzIGFyZSBhY2NlcHRlZC5cbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5JTlQzMjpcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TRklYRUQzMjpcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TSU5UMzI6XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSAwKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWQgPyAwIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydEludDMyKHZhbHVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuRklYRUQzMjpcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5VSU5UMzI6XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSAwKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWQgPyAwIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydFVJbnQzMih2YWx1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgLy8gZmxvYXQsIGRvdWJsZTogSlNPTiB2YWx1ZSB3aWxsIGJlIGEgbnVtYmVyIG9yIG9uZSBvZiB0aGUgc3BlY2lhbCBzdHJpbmcgdmFsdWVzIFwiTmFOXCIsIFwiSW5maW5pdHlcIiwgYW5kIFwiLUluZmluaXR5XCIuXG4gICAgICAgICAgICAvLyBFaXRoZXIgbnVtYmVycyBvciBzdHJpbmdzIGFyZSBhY2NlcHRlZC4gRXhwb25lbnQgbm90YXRpb24gaXMgYWxzbyBhY2NlcHRlZC5cbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5GTE9BVDpcbiAgICAgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnRGbG9hdDMyKHZhbHVlKTtcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5ET1VCTEU6XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSAwKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWQgPyAwIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydCh0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicpO1xuICAgICAgICAgICAgICAgIGlmIChOdW1iZXIuaXNOYU4odmFsdWUpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ05hTic7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnSW5maW5pdHknO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJy1JbmZpbml0eSc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgLy8gc3RyaW5nOlxuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNUUklORzpcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IFwiXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlZCA/ICcnIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydCh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycpO1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIC8vIGJvb2w6XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuQk9PTDpcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWQgPyBmYWxzZSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnQodHlwZW9mIHZhbHVlID09ICdib29sZWFuJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgLy8gSlNPTiB2YWx1ZSB3aWxsIGJlIGEgZGVjaW1hbCBzdHJpbmcuIEVpdGhlciBudW1iZXJzIG9yIHN0cmluZ3MgYXJlIGFjY2VwdGVkLlxuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlVJTlQ2NDpcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5GSVhFRDY0OlxuICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydCh0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgfHwgdHlwZW9mIHZhbHVlID09ICdzdHJpbmcnIHx8IHR5cGVvZiB2YWx1ZSA9PSAnYmlnaW50Jyk7XG4gICAgICAgICAgICAgICAgbGV0IHVsb25nID0gcGJfbG9uZ18xLlBiVUxvbmcuZnJvbSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHVsb25nLmlzWmVybygpICYmICFlZClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdWxvbmcudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIC8vIEpTT04gdmFsdWUgd2lsbCBiZSBhIGRlY2ltYWwgc3RyaW5nLiBFaXRoZXIgbnVtYmVycyBvciBzdHJpbmdzIGFyZSBhY2NlcHRlZC5cbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5JTlQ2NDpcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TRklYRUQ2NDpcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TSU5UNjQ6XG4gICAgICAgICAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyB8fCB0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHwgdHlwZW9mIHZhbHVlID09ICdiaWdpbnQnKTtcbiAgICAgICAgICAgICAgICBsZXQgbG9uZyA9IHBiX2xvbmdfMS5QYkxvbmcuZnJvbSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKGxvbmcuaXNaZXJvKCkgJiYgIWVkKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHJldHVybiBsb25nLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAvLyBieXRlczogSlNPTiB2YWx1ZSB3aWxsIGJlIHRoZSBkYXRhIGVuY29kZWQgYXMgYSBzdHJpbmcgdXNpbmcgc3RhbmRhcmQgYmFzZTY0IGVuY29kaW5nIHdpdGggcGFkZGluZ3MuXG4gICAgICAgICAgICAvLyBFaXRoZXIgc3RhbmRhcmQgb3IgVVJMLXNhZmUgYmFzZTY0IGVuY29kaW5nIHdpdGgvd2l0aG91dCBwYWRkaW5ncyBhcmUgYWNjZXB0ZWQuXG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuQllURVM6XG4gICAgICAgICAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KHZhbHVlIGluc3RhbmNlb2YgVWludDhBcnJheSk7XG4gICAgICAgICAgICAgICAgaWYgKCF2YWx1ZS5ieXRlTGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWQgPyBcIlwiIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHJldHVybiBiYXNlNjRfMS5iYXNlNjRlbmNvZGUodmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5SZWZsZWN0aW9uSnNvbldyaXRlciA9IFJlZmxlY3Rpb25Kc29uV3JpdGVyO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVmbGVjdGlvblNjYWxhckRlZmF1bHQgPSB2b2lkIDA7XG5jb25zdCByZWZsZWN0aW9uX2luZm9fMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24taW5mb1wiKTtcbmNvbnN0IHJlZmxlY3Rpb25fbG9uZ19jb252ZXJ0XzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLWxvbmctY29udmVydFwiKTtcbmNvbnN0IHBiX2xvbmdfMSA9IHJlcXVpcmUoXCIuL3BiLWxvbmdcIik7XG4vKipcbiAqIENyZWF0ZXMgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIGEgc2NhbGFyIHR5cGUuXG4gKi9cbmZ1bmN0aW9uIHJlZmxlY3Rpb25TY2FsYXJEZWZhdWx0KHR5cGUsIGxvbmdUeXBlID0gcmVmbGVjdGlvbl9pbmZvXzEuTG9uZ1R5cGUuU1RSSU5HKSB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5CT09MOlxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuVUlOVDY0OlxuICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuRklYRUQ2NDpcbiAgICAgICAgICAgIHJldHVybiByZWZsZWN0aW9uX2xvbmdfY29udmVydF8xLnJlZmxlY3Rpb25Mb25nQ29udmVydChwYl9sb25nXzEuUGJVTG9uZy5aRVJPLCBsb25nVHlwZSk7XG4gICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5JTlQ2NDpcbiAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNGSVhFRDY0OlxuICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuU0lOVDY0OlxuICAgICAgICAgICAgcmV0dXJuIHJlZmxlY3Rpb25fbG9uZ19jb252ZXJ0XzEucmVmbGVjdGlvbkxvbmdDb252ZXJ0KHBiX2xvbmdfMS5QYkxvbmcuWkVSTywgbG9uZ1R5cGUpO1xuICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuRE9VQkxFOlxuICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuRkxPQVQ6XG4gICAgICAgICAgICByZXR1cm4gMC4wO1xuICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuQllURVM6XG4gICAgICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7XG4gICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TVFJJTkc6XG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIC8vIGNhc2UgU2NhbGFyVHlwZS5JTlQzMjpcbiAgICAgICAgICAgIC8vIGNhc2UgU2NhbGFyVHlwZS5VSU5UMzI6XG4gICAgICAgICAgICAvLyBjYXNlIFNjYWxhclR5cGUuU0lOVDMyOlxuICAgICAgICAgICAgLy8gY2FzZSBTY2FsYXJUeXBlLkZJWEVEMzI6XG4gICAgICAgICAgICAvLyBjYXNlIFNjYWxhclR5cGUuU0ZJWEVEMzI6XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICB9XG59XG5leHBvcnRzLnJlZmxlY3Rpb25TY2FsYXJEZWZhdWx0ID0gcmVmbGVjdGlvblNjYWxhckRlZmF1bHQ7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5SZWZsZWN0aW9uQmluYXJ5UmVhZGVyID0gdm9pZCAwO1xuY29uc3QgYmluYXJ5X2Zvcm1hdF9jb250cmFjdF8xID0gcmVxdWlyZShcIi4vYmluYXJ5LWZvcm1hdC1jb250cmFjdFwiKTtcbmNvbnN0IHJlZmxlY3Rpb25faW5mb18xID0gcmVxdWlyZShcIi4vcmVmbGVjdGlvbi1pbmZvXCIpO1xuY29uc3QgcmVmbGVjdGlvbl9sb25nX2NvbnZlcnRfMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24tbG9uZy1jb252ZXJ0XCIpO1xuY29uc3QgcmVmbGVjdGlvbl9zY2FsYXJfZGVmYXVsdF8xID0gcmVxdWlyZShcIi4vcmVmbGVjdGlvbi1zY2FsYXItZGVmYXVsdFwiKTtcbi8qKlxuICogUmVhZHMgcHJvdG8zIG1lc3NhZ2VzIGluIGJpbmFyeSBmb3JtYXQgdXNpbmcgcmVmbGVjdGlvbiBpbmZvcm1hdGlvbi5cbiAqXG4gKiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzL2RvY3MvZW5jb2RpbmdcbiAqL1xuY2xhc3MgUmVmbGVjdGlvbkJpbmFyeVJlYWRlciB7XG4gICAgY29uc3RydWN0b3IoaW5mbykge1xuICAgICAgICB0aGlzLmluZm8gPSBpbmZvO1xuICAgIH1cbiAgICBwcmVwYXJlKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICghdGhpcy5maWVsZE5vVG9GaWVsZCkge1xuICAgICAgICAgICAgY29uc3QgZmllbGRzSW5wdXQgPSAoX2EgPSB0aGlzLmluZm8uZmllbGRzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBbXTtcbiAgICAgICAgICAgIHRoaXMuZmllbGROb1RvRmllbGQgPSBuZXcgTWFwKGZpZWxkc0lucHV0Lm1hcChmaWVsZCA9PiBbZmllbGQubm8sIGZpZWxkXSkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWRzIGEgbWVzc2FnZSBmcm9tIGJpbmFyeSBmb3JtYXQgaW50byB0aGUgdGFyZ2V0IG1lc3NhZ2UuXG4gICAgICpcbiAgICAgKiBSZXBlYXRlZCBmaWVsZHMgYXJlIGFwcGVuZGVkLiBNYXAgZW50cmllcyBhcmUgYWRkZWQsIG92ZXJ3cml0aW5nXG4gICAgICogZXhpc3Rpbmcga2V5cy5cbiAgICAgKlxuICAgICAqIElmIGEgbWVzc2FnZSBmaWVsZCBpcyBhbHJlYWR5IHByZXNlbnQsIGl0IHdpbGwgYmUgbWVyZ2VkIHdpdGggdGhlXG4gICAgICogbmV3IGRhdGEuXG4gICAgICovXG4gICAgcmVhZChyZWFkZXIsIG1lc3NhZ2UsIG9wdGlvbnMsIGxlbmd0aCkge1xuICAgICAgICB0aGlzLnByZXBhcmUoKTtcbiAgICAgICAgY29uc3QgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgIC8vIHJlYWQgdGhlIHRhZyBhbmQgZmluZCB0aGUgZmllbGRcbiAgICAgICAgICAgIGNvbnN0IFtmaWVsZE5vLCB3aXJlVHlwZV0gPSByZWFkZXIudGFnKCksIGZpZWxkID0gdGhpcy5maWVsZE5vVG9GaWVsZC5nZXQoZmllbGRObyk7XG4gICAgICAgICAgICBpZiAoIWZpZWxkKSB7XG4gICAgICAgICAgICAgICAgbGV0IHUgPSBvcHRpb25zLnJlYWRVbmtub3duRmllbGQ7XG4gICAgICAgICAgICAgICAgaWYgKHUgPT0gXCJ0aHJvd1wiKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZmllbGQgJHtmaWVsZE5vfSAod2lyZSB0eXBlICR7d2lyZVR5cGV9KSBmb3IgJHt0aGlzLmluZm8udHlwZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgbGV0IGQgPSByZWFkZXIuc2tpcCh3aXJlVHlwZSk7XG4gICAgICAgICAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAodSA9PT0gdHJ1ZSA/IGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMS5Vbmtub3duRmllbGRIYW5kbGVyLm9uUmVhZCA6IHUpKHRoaXMuaW5mby50eXBlTmFtZSwgbWVzc2FnZSwgZmllbGRObywgd2lyZVR5cGUsIGQpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gdGFyZ2V0IG9iamVjdCBmb3IgdGhlIGZpZWxkIHdlIGFyZSByZWFkaW5nXG4gICAgICAgICAgICBsZXQgdGFyZ2V0ID0gbWVzc2FnZSwgcmVwZWF0ZWQgPSBmaWVsZC5yZXBlYXQsIGxvY2FsTmFtZSA9IGZpZWxkLmxvY2FsTmFtZTtcbiAgICAgICAgICAgIC8vIGlmIGZpZWxkIGlzIG1lbWJlciBvZiBvbmVvZiBBRFQsIHVzZSBBRFQgYXMgdGFyZ2V0XG4gICAgICAgICAgICBpZiAoZmllbGQub25lb2YpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXQgPSB0YXJnZXRbZmllbGQub25lb2ZdO1xuICAgICAgICAgICAgICAgIC8vIGlmIG90aGVyIG9uZW9mIG1lbWJlciBzZWxlY3RlZCwgc2V0IG5ldyBBRFRcbiAgICAgICAgICAgICAgICBpZiAodGFyZ2V0Lm9uZW9mS2luZCAhPT0gbG9jYWxOYW1lKVxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPSBtZXNzYWdlW2ZpZWxkLm9uZW9mXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uZW9mS2luZDogbG9jYWxOYW1lXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB3ZSBoYXZlIGhhbmRsZWQgb25lb2YgYWJvdmUsIHdlIGp1c3QgaGF2ZSByZWFkIHRoZSB2YWx1ZSBpbnRvIGB0YXJnZXRbbG9jYWxOYW1lXWBcbiAgICAgICAgICAgIHN3aXRjaCAoZmllbGQua2luZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzY2FsYXJcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwiZW51bVwiOlxuICAgICAgICAgICAgICAgICAgICBsZXQgVCA9IGZpZWxkLmtpbmQgPT0gXCJlbnVtXCIgPyByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLklOVDMyIDogZmllbGQuVDtcbiAgICAgICAgICAgICAgICAgICAgbGV0IEwgPSBmaWVsZC5raW5kID09IFwic2NhbGFyXCIgPyBmaWVsZC5MIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVwZWF0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhcnIgPSB0YXJnZXRbbG9jYWxOYW1lXTsgLy8gc2FmZSB0byBhc3N1bWUgcHJlc2VuY2Ugb2YgYXJyYXksIG9uZW9mIGNhbm5vdCBjb250YWluIHJlcGVhdGVkIHZhbHVlc1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdpcmVUeXBlID09IGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQgJiYgVCAhPSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNUUklORyAmJiBUICE9IHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuQllURVMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZSA9IHJlYWRlci51aW50MzIoKSArIHJlYWRlci5wb3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnIucHVzaCh0aGlzLnNjYWxhcihyZWFkZXIsIFQsIEwpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnIucHVzaCh0aGlzLnNjYWxhcihyZWFkZXIsIFQsIEwpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRbbG9jYWxOYW1lXSA9IHRoaXMuc2NhbGFyKHJlYWRlciwgVCwgTCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJtZXNzYWdlXCI6XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXBlYXRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFyciA9IHRhcmdldFtsb2NhbE5hbWVdOyAvLyBzYWZlIHRvIGFzc3VtZSBwcmVzZW5jZSBvZiBhcnJheSwgb25lb2YgY2Fubm90IGNvbnRhaW4gcmVwZWF0ZWQgdmFsdWVzXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbXNnID0gZmllbGQuVCgpLmludGVybmFsQmluYXJ5UmVhZChyZWFkZXIsIHJlYWRlci51aW50MzIoKSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcnIucHVzaChtc2cpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFtsb2NhbE5hbWVdID0gZmllbGQuVCgpLmludGVybmFsQmluYXJ5UmVhZChyZWFkZXIsIHJlYWRlci51aW50MzIoKSwgb3B0aW9ucywgdGFyZ2V0W2xvY2FsTmFtZV0pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwibWFwXCI6XG4gICAgICAgICAgICAgICAgICAgIGxldCBbbWFwS2V5LCBtYXBWYWxdID0gdGhpcy5tYXBFbnRyeShmaWVsZCwgcmVhZGVyLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gc2FmZSB0byBhc3N1bWUgcHJlc2VuY2Ugb2YgbWFwIG9iamVjdCwgb25lb2YgY2Fubm90IGNvbnRhaW4gcmVwZWF0ZWQgdmFsdWVzXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldFtsb2NhbE5hbWVdW21hcEtleV0gPSBtYXBWYWw7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWQgYSBtYXAgZmllbGQsIGV4cGVjdGluZyBrZXkgZmllbGQgPSAxLCB2YWx1ZSBmaWVsZCA9IDJcbiAgICAgKi9cbiAgICBtYXBFbnRyeShmaWVsZCwgcmVhZGVyLCBvcHRpb25zKSB7XG4gICAgICAgIGxldCBsZW5ndGggPSByZWFkZXIudWludDMyKCk7XG4gICAgICAgIGxldCBlbmQgPSByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgICAgICBsZXQga2V5ID0gdW5kZWZpbmVkOyAvLyBqYXZhc2NyaXB0IG9ubHkgYWxsb3dzIG51bWJlciBvciBzdHJpbmcgZm9yIG9iamVjdCBwcm9wZXJ0aWVzXG4gICAgICAgIGxldCB2YWwgPSB1bmRlZmluZWQ7XG4gICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICBsZXQgW2ZpZWxkTm8sIHdpcmVUeXBlXSA9IHJlYWRlci50YWcoKTtcbiAgICAgICAgICAgIHN3aXRjaCAoZmllbGRObykge1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLksgPT0gcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5CT09MKVxuICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gcmVhZGVyLmJvb2woKS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBsb25nIHR5cGVzIGFyZSByZWFkIGFzIHN0cmluZywgbnVtYmVyIHR5cGVzIGFyZSBva2F5IGFzIG51bWJlclxuICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gdGhpcy5zY2FsYXIocmVhZGVyLCBmaWVsZC5LLCByZWZsZWN0aW9uX2luZm9fMS5Mb25nVHlwZS5TVFJJTkcpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZmllbGQuVi5raW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwic2NhbGFyXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gdGhpcy5zY2FsYXIocmVhZGVyLCBmaWVsZC5WLlQsIGZpZWxkLlYuTCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZW51bVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IHJlYWRlci5pbnQzMigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIm1lc3NhZ2VcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSBmaWVsZC5WLlQoKS5pbnRlcm5hbEJpbmFyeVJlYWQocmVhZGVyLCByZWFkZXIudWludDMyKCksIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBmaWVsZCAke2ZpZWxkTm99ICh3aXJlIHR5cGUgJHt3aXJlVHlwZX0pIGluIG1hcCBlbnRyeSBmb3IgJHt0aGlzLmluZm8udHlwZU5hbWV9IyR7ZmllbGQubmFtZX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxldCBrZXlSYXcgPSByZWZsZWN0aW9uX3NjYWxhcl9kZWZhdWx0XzEucmVmbGVjdGlvblNjYWxhckRlZmF1bHQoZmllbGQuSyk7XG4gICAgICAgICAgICBrZXkgPSBmaWVsZC5LID09IHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuQk9PTCA/IGtleVJhdy50b1N0cmluZygpIDoga2V5UmF3O1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWwgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHN3aXRjaCAoZmllbGQuVi5raW5kKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNjYWxhclwiOlxuICAgICAgICAgICAgICAgICAgICB2YWwgPSByZWZsZWN0aW9uX3NjYWxhcl9kZWZhdWx0XzEucmVmbGVjdGlvblNjYWxhckRlZmF1bHQoZmllbGQuVi5ULCBmaWVsZC5WLkwpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiZW51bVwiOlxuICAgICAgICAgICAgICAgICAgICB2YWwgPSAwO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwibWVzc2FnZVwiOlxuICAgICAgICAgICAgICAgICAgICB2YWwgPSBmaWVsZC5WLlQoKS5jcmVhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIHJldHVybiBba2V5LCB2YWxdO1xuICAgIH1cbiAgICBzY2FsYXIocmVhZGVyLCB0eXBlLCBsb25nVHlwZSkge1xuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5JTlQzMjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVhZGVyLmludDMyKCk7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuU1RSSU5HOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuQk9PTDpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVhZGVyLmJvb2woKTtcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5ET1VCTEU6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlYWRlci5kb3VibGUoKTtcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5GTE9BVDpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVhZGVyLmZsb2F0KCk7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuSU5UNjQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmxlY3Rpb25fbG9uZ19jb252ZXJ0XzEucmVmbGVjdGlvbkxvbmdDb252ZXJ0KHJlYWRlci5pbnQ2NCgpLCBsb25nVHlwZSk7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuVUlOVDY0OlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZsZWN0aW9uX2xvbmdfY29udmVydF8xLnJlZmxlY3Rpb25Mb25nQ29udmVydChyZWFkZXIudWludDY0KCksIGxvbmdUeXBlKTtcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5GSVhFRDY0OlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZsZWN0aW9uX2xvbmdfY29udmVydF8xLnJlZmxlY3Rpb25Mb25nQ29udmVydChyZWFkZXIuZml4ZWQ2NCgpLCBsb25nVHlwZSk7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuRklYRUQzMjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVhZGVyLmZpeGVkMzIoKTtcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5CWVRFUzpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVhZGVyLmJ5dGVzKCk7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuVUlOVDMyOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWFkZXIudWludDMyKCk7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuU0ZJWEVEMzI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlYWRlci5zZml4ZWQzMigpO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNGSVhFRDY0OlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZsZWN0aW9uX2xvbmdfY29udmVydF8xLnJlZmxlY3Rpb25Mb25nQ29udmVydChyZWFkZXIuc2ZpeGVkNjQoKSwgbG9uZ1R5cGUpO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNJTlQzMjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVhZGVyLnNpbnQzMigpO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNJTlQ2NDpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmbGVjdGlvbl9sb25nX2NvbnZlcnRfMS5yZWZsZWN0aW9uTG9uZ0NvbnZlcnQocmVhZGVyLnNpbnQ2NCgpLCBsb25nVHlwZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLlJlZmxlY3Rpb25CaW5hcnlSZWFkZXIgPSBSZWZsZWN0aW9uQmluYXJ5UmVhZGVyO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUmVmbGVjdGlvbkJpbmFyeVdyaXRlciA9IHZvaWQgMDtcbmNvbnN0IGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMSA9IHJlcXVpcmUoXCIuL2JpbmFyeS1mb3JtYXQtY29udHJhY3RcIik7XG5jb25zdCByZWZsZWN0aW9uX2luZm9fMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24taW5mb1wiKTtcbmNvbnN0IGFzc2VydF8xID0gcmVxdWlyZShcIi4vYXNzZXJ0XCIpO1xuY29uc3QgcGJfbG9uZ18xID0gcmVxdWlyZShcIi4vcGItbG9uZ1wiKTtcbi8qKlxuICogV3JpdGVzIHByb3RvMyBtZXNzYWdlcyBpbiBiaW5hcnkgZm9ybWF0IHVzaW5nIHJlZmxlY3Rpb24gaW5mb3JtYXRpb24uXG4gKlxuICogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL2VuY29kaW5nXG4gKi9cbmNsYXNzIFJlZmxlY3Rpb25CaW5hcnlXcml0ZXIge1xuICAgIGNvbnN0cnVjdG9yKGluZm8pIHtcbiAgICAgICAgdGhpcy5pbmZvID0gaW5mbztcbiAgICB9XG4gICAgcHJlcGFyZSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmZpZWxkcykge1xuICAgICAgICAgICAgY29uc3QgZmllbGRzSW5wdXQgPSB0aGlzLmluZm8uZmllbGRzID8gdGhpcy5pbmZvLmZpZWxkcy5jb25jYXQoKSA6IFtdO1xuICAgICAgICAgICAgdGhpcy5maWVsZHMgPSBmaWVsZHNJbnB1dC5zb3J0KChhLCBiKSA9PiBhLm5vIC0gYi5ubyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBmb3JtYXQuXG4gICAgICovXG4gICAgd3JpdGUobWVzc2FnZSwgd3JpdGVyLCBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMucHJlcGFyZSgpO1xuICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIHRoaXMuZmllbGRzKSB7XG4gICAgICAgICAgICBsZXQgdmFsdWUsIC8vIHRoaXMgd2lsbCBiZSBvdXIgZmllbGQgdmFsdWUsIHdoZXRoZXIgaXQgaXMgbWVtYmVyIG9mIGEgb25lb2Ygb3Igbm90XG4gICAgICAgICAgICBlbWl0RGVmYXVsdCwgLy8gd2hldGhlciB3ZSBlbWl0IHRoZSBkZWZhdWx0IHZhbHVlIChvbmx5IHRydWUgZm9yIG9uZW9mIG1lbWJlcnMpXG4gICAgICAgICAgICByZXBlYXRlZCA9IGZpZWxkLnJlcGVhdCwgbG9jYWxOYW1lID0gZmllbGQubG9jYWxOYW1lO1xuICAgICAgICAgICAgLy8gaGFuZGxlIG9uZW9mIEFEVFxuICAgICAgICAgICAgaWYgKGZpZWxkLm9uZW9mKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSBtZXNzYWdlW2ZpZWxkLm9uZW9mXTtcbiAgICAgICAgICAgICAgICBpZiAoZ3JvdXAub25lb2ZLaW5kICE9PSBsb2NhbE5hbWUpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBpZiBmaWVsZCBpcyBub3Qgc2VsZWN0ZWQsIHNraXBcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGdyb3VwW2xvY2FsTmFtZV07XG4gICAgICAgICAgICAgICAgZW1pdERlZmF1bHQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBtZXNzYWdlW2xvY2FsTmFtZV07XG4gICAgICAgICAgICAgICAgZW1pdERlZmF1bHQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHdlIGhhdmUgaGFuZGxlZCBvbmVvZiBhYm92ZS4gd2UganVzdCBoYXZlIHRvIGhvbm9yIGBlbWl0RGVmYXVsdGAuXG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkLmtpbmQpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwic2NhbGFyXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcImVudW1cIjpcbiAgICAgICAgICAgICAgICAgICAgbGV0IFQgPSBmaWVsZC5raW5kID09IFwiZW51bVwiID8gcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5JTlQzMiA6IGZpZWxkLlQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXBlYXRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KEFycmF5LmlzQXJyYXkodmFsdWUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXBlYXRlZCA9PSByZWZsZWN0aW9uX2luZm9fMS5SZXBlYXRUeXBlLlBBQ0tFRClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhY2tlZCh3cml0ZXIsIFQsIGZpZWxkLm5vLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjYWxhcih3cml0ZXIsIFQsIGZpZWxkLm5vLCBpdGVtLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KGZpZWxkLm9wdCk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2NhbGFyKHdyaXRlciwgVCwgZmllbGQubm8sIHZhbHVlLCBlbWl0RGVmYXVsdCB8fCBmaWVsZC5vcHQpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwibWVzc2FnZVwiOlxuICAgICAgICAgICAgICAgICAgICBpZiAocmVwZWF0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydChBcnJheS5pc0FycmF5KHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlKHdyaXRlciwgb3B0aW9ucywgZmllbGQuVCgpLCBmaWVsZC5ubywgaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2Uod3JpdGVyLCBvcHRpb25zLCBmaWVsZC5UKCksIGZpZWxkLm5vLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm1hcFwiOlxuICAgICAgICAgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnQodHlwZW9mIHZhbHVlID09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIE9iamVjdC5lbnRyaWVzKHZhbHVlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWFwRW50cnkod3JpdGVyLCBvcHRpb25zLCBmaWVsZCwga2V5LCB2YWwpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgdSA9IG9wdGlvbnMud3JpdGVVbmtub3duRmllbGRzO1xuICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAodSA9PT0gdHJ1ZSA/IGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMS5Vbmtub3duRmllbGRIYW5kbGVyLm9uV3JpdGUgOiB1KSh0aGlzLmluZm8udHlwZU5hbWUsIG1lc3NhZ2UsIHdyaXRlcik7XG4gICAgfVxuICAgIG1hcEVudHJ5KHdyaXRlciwgb3B0aW9ucywgZmllbGQsIGtleSwgdmFsdWUpIHtcbiAgICAgICAgd3JpdGVyLnRhZyhmaWVsZC5ubywgYmluYXJ5X2Zvcm1hdF9jb250cmFjdF8xLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCk7XG4gICAgICAgIHdyaXRlci5mb3JrKCk7XG4gICAgICAgIC8vIGphdmFzY3JpcHQgb25seSBhbGxvd3MgbnVtYmVyIG9yIHN0cmluZyBmb3Igb2JqZWN0IHByb3BlcnRpZXNcbiAgICAgICAgLy8gd2UgY29udmVydCBmcm9tIG91ciByZXByZXNlbnRhdGlvbiB0byB0aGUgcHJvdG9idWYgdHlwZVxuICAgICAgICBsZXQga2V5VmFsdWUgPSBrZXk7XG4gICAgICAgIHN3aXRjaCAoZmllbGQuSykge1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLklOVDMyOlxuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkZJWEVEMzI6XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuVUlOVDMyOlxuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNGSVhFRDMyOlxuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNJTlQzMjpcbiAgICAgICAgICAgICAgICBrZXlWYWx1ZSA9IE51bWJlci5wYXJzZUludChrZXkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkJPT0w6XG4gICAgICAgICAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KGtleSA9PSAndHJ1ZScgfHwga2V5ID09ICdmYWxzZScpO1xuICAgICAgICAgICAgICAgIGtleVZhbHVlID0ga2V5ID09ICd0cnVlJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICAvLyB3cml0ZSBrZXksIGV4cGVjdGluZyBrZXkgZmllbGQgbnVtYmVyID0gMVxuICAgICAgICB0aGlzLnNjYWxhcih3cml0ZXIsIGZpZWxkLkssIDEsIGtleVZhbHVlLCB0cnVlKTtcbiAgICAgICAgLy8gd3JpdGUgdmFsdWUsIGV4cGVjdGluZyB2YWx1ZSBmaWVsZCBudW1iZXIgPSAyXG4gICAgICAgIHN3aXRjaCAoZmllbGQuVi5raW5kKSB7XG4gICAgICAgICAgICBjYXNlICdzY2FsYXInOlxuICAgICAgICAgICAgICAgIHRoaXMuc2NhbGFyKHdyaXRlciwgZmllbGQuVi5ULCAyLCB2YWx1ZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdlbnVtJzpcbiAgICAgICAgICAgICAgICB0aGlzLnNjYWxhcih3cml0ZXIsIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuSU5UMzIsIDIsIHZhbHVlLCB0cnVlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21lc3NhZ2UnOlxuICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSh3cml0ZXIsIG9wdGlvbnMsIGZpZWxkLlYuVCgpLCAyLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgd3JpdGVyLmpvaW4oKTtcbiAgICB9XG4gICAgbWVzc2FnZSh3cml0ZXIsIG9wdGlvbnMsIGhhbmRsZXIsIGZpZWxkTm8sIHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBoYW5kbGVyLmludGVybmFsQmluYXJ5V3JpdGUodmFsdWUsIHdyaXRlci50YWcoZmllbGRObywgYmluYXJ5X2Zvcm1hdF9jb250cmFjdF8xLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCkuZm9yaygpLCBvcHRpb25zKTtcbiAgICAgICAgd3JpdGVyLmpvaW4oKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGUgYSBzaW5nbGUgc2NhbGFyIHZhbHVlLlxuICAgICAqL1xuICAgIHNjYWxhcih3cml0ZXIsIHR5cGUsIGZpZWxkTm8sIHZhbHVlLCBlbWl0RGVmYXVsdCkge1xuICAgICAgICBsZXQgW3dpcmVUeXBlLCBtZXRob2QsIGlzRGVmYXVsdF0gPSB0aGlzLnNjYWxhckluZm8odHlwZSwgdmFsdWUpO1xuICAgICAgICBpZiAoIWlzRGVmYXVsdCB8fCBlbWl0RGVmYXVsdCkge1xuICAgICAgICAgICAgd3JpdGVyLnRhZyhmaWVsZE5vLCB3aXJlVHlwZSk7XG4gICAgICAgICAgICB3cml0ZXJbbWV0aG9kXSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGUgYW4gYXJyYXkgb2Ygc2NhbGFyIHZhbHVlcyBpbiBwYWNrZWQgZm9ybWF0LlxuICAgICAqL1xuICAgIHBhY2tlZCh3cml0ZXIsIHR5cGUsIGZpZWxkTm8sIHZhbHVlKSB7XG4gICAgICAgIGlmICghdmFsdWUubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBhc3NlcnRfMS5hc3NlcnQodHlwZSAhPT0gcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5CWVRFUyAmJiB0eXBlICE9PSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNUUklORyk7XG4gICAgICAgIC8vIHdyaXRlIHRhZ1xuICAgICAgICB3cml0ZXIudGFnKGZpZWxkTm8sIGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpO1xuICAgICAgICAvLyBiZWdpbiBsZW5ndGgtZGVsaW1pdGVkXG4gICAgICAgIHdyaXRlci5mb3JrKCk7XG4gICAgICAgIC8vIHdyaXRlIHZhbHVlcyB3aXRob3V0IHRhZ3NcbiAgICAgICAgbGV0IFssIG1ldGhvZCxdID0gdGhpcy5zY2FsYXJJbmZvKHR5cGUpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgd3JpdGVyW21ldGhvZF0odmFsdWVbaV0pO1xuICAgICAgICAvLyBlbmQgbGVuZ3RoIGRlbGltaXRlZFxuICAgICAgICB3cml0ZXIuam9pbigpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgaW5mb3JtYXRpb24gZm9yIHdyaXRpbmcgYSBzY2FsYXIgdmFsdWUuXG4gICAgICpcbiAgICAgKiBSZXR1cm5zIHR1cGxlOlxuICAgICAqIFswXTogYXBwcm9wcmlhdGUgV2lyZVR5cGVcbiAgICAgKiBbMV06IG5hbWUgb2YgdGhlIGFwcHJvcHJpYXRlIG1ldGhvZCBvZiBJQmluYXJ5V3JpdGVyXG4gICAgICogWzJdOiB3aGV0aGVyIHRoZSBnaXZlbiB2YWx1ZSBpcyBhIGRlZmF1bHQgdmFsdWVcbiAgICAgKlxuICAgICAqIElmIGFyZ3VtZW50IGB2YWx1ZWAgaXMgb21pdHRlZCwgWzJdIGlzIGFsd2F5cyBmYWxzZS5cbiAgICAgKi9cbiAgICBzY2FsYXJJbmZvKHR5cGUsIHZhbHVlKSB7XG4gICAgICAgIGxldCB0ID0gYmluYXJ5X2Zvcm1hdF9jb250cmFjdF8xLldpcmVUeXBlLlZhcmludDtcbiAgICAgICAgbGV0IG07XG4gICAgICAgIGxldCBpID0gdmFsdWUgPT09IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IGQgPSB2YWx1ZSA9PT0gMDtcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuSU5UMzI6XG4gICAgICAgICAgICAgICAgbSA9IFwiaW50MzJcIjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TVFJJTkc6XG4gICAgICAgICAgICAgICAgZCA9IGkgfHwgIXZhbHVlLmxlbmd0aDtcbiAgICAgICAgICAgICAgICB0ID0gYmluYXJ5X2Zvcm1hdF9jb250cmFjdF8xLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZDtcbiAgICAgICAgICAgICAgICBtID0gXCJzdHJpbmdcIjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5CT09MOlxuICAgICAgICAgICAgICAgIGQgPSB2YWx1ZSA9PT0gZmFsc2U7XG4gICAgICAgICAgICAgICAgbSA9IFwiYm9vbFwiO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlVJTlQzMjpcbiAgICAgICAgICAgICAgICBtID0gXCJ1aW50MzJcIjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5ET1VCTEU6XG4gICAgICAgICAgICAgICAgdCA9IGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMS5XaXJlVHlwZS5CaXQ2NDtcbiAgICAgICAgICAgICAgICBtID0gXCJkb3VibGVcIjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5GTE9BVDpcbiAgICAgICAgICAgICAgICB0ID0gYmluYXJ5X2Zvcm1hdF9jb250cmFjdF8xLldpcmVUeXBlLkJpdDMyO1xuICAgICAgICAgICAgICAgIG0gPSBcImZsb2F0XCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuSU5UNjQ6XG4gICAgICAgICAgICAgICAgZCA9IGkgfHwgcGJfbG9uZ18xLlBiTG9uZy5mcm9tKHZhbHVlKS5pc1plcm8oKTtcbiAgICAgICAgICAgICAgICBtID0gXCJpbnQ2NFwiO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlVJTlQ2NDpcbiAgICAgICAgICAgICAgICBkID0gaSB8fCBwYl9sb25nXzEuUGJVTG9uZy5mcm9tKHZhbHVlKS5pc1plcm8oKTtcbiAgICAgICAgICAgICAgICBtID0gXCJ1aW50NjRcIjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5GSVhFRDY0OlxuICAgICAgICAgICAgICAgIGQgPSBpIHx8IHBiX2xvbmdfMS5QYlVMb25nLmZyb20odmFsdWUpLmlzWmVybygpO1xuICAgICAgICAgICAgICAgIHQgPSBiaW5hcnlfZm9ybWF0X2NvbnRyYWN0XzEuV2lyZVR5cGUuQml0NjQ7XG4gICAgICAgICAgICAgICAgbSA9IFwiZml4ZWQ2NFwiO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkJZVEVTOlxuICAgICAgICAgICAgICAgIGQgPSBpIHx8ICF2YWx1ZS5ieXRlTGVuZ3RoO1xuICAgICAgICAgICAgICAgIHQgPSBiaW5hcnlfZm9ybWF0X2NvbnRyYWN0XzEuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkO1xuICAgICAgICAgICAgICAgIG0gPSBcImJ5dGVzXCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuRklYRUQzMjpcbiAgICAgICAgICAgICAgICB0ID0gYmluYXJ5X2Zvcm1hdF9jb250cmFjdF8xLldpcmVUeXBlLkJpdDMyO1xuICAgICAgICAgICAgICAgIG0gPSBcImZpeGVkMzJcIjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TRklYRUQzMjpcbiAgICAgICAgICAgICAgICB0ID0gYmluYXJ5X2Zvcm1hdF9jb250cmFjdF8xLldpcmVUeXBlLkJpdDMyO1xuICAgICAgICAgICAgICAgIG0gPSBcInNmaXhlZDMyXCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuU0ZJWEVENjQ6XG4gICAgICAgICAgICAgICAgZCA9IGkgfHwgcGJfbG9uZ18xLlBiTG9uZy5mcm9tKHZhbHVlKS5pc1plcm8oKTtcbiAgICAgICAgICAgICAgICB0ID0gYmluYXJ5X2Zvcm1hdF9jb250cmFjdF8xLldpcmVUeXBlLkJpdDY0O1xuICAgICAgICAgICAgICAgIG0gPSBcInNmaXhlZDY0XCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuU0lOVDMyOlxuICAgICAgICAgICAgICAgIG0gPSBcInNpbnQzMlwiO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNJTlQ2NDpcbiAgICAgICAgICAgICAgICBkID0gaSB8fCBwYl9sb25nXzEuUGJMb25nLmZyb20odmFsdWUpLmlzWmVybygpO1xuICAgICAgICAgICAgICAgIG0gPSBcInNpbnQ2NFwiO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbdCwgbSwgaSB8fCBkXTtcbiAgICB9XG59XG5leHBvcnRzLlJlZmxlY3Rpb25CaW5hcnlXcml0ZXIgPSBSZWZsZWN0aW9uQmluYXJ5V3JpdGVyO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVmbGVjdGlvbkNyZWF0ZSA9IHZvaWQgMDtcbmNvbnN0IHJlZmxlY3Rpb25fc2NhbGFyX2RlZmF1bHRfMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24tc2NhbGFyLWRlZmF1bHRcIik7XG5jb25zdCBtZXNzYWdlX3R5cGVfY29udHJhY3RfMSA9IHJlcXVpcmUoXCIuL21lc3NhZ2UtdHlwZS1jb250cmFjdFwiKTtcbi8qKlxuICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgZ2VuZXJpYyBtZXNzYWdlLCB1c2luZyB0aGUgZmllbGRcbiAqIGluZm9ybWF0aW9uLlxuICovXG5mdW5jdGlvbiByZWZsZWN0aW9uQ3JlYXRlKHR5cGUpIHtcbiAgICAvKipcbiAgICAgKiBUaGlzIHRlcm5hcnkgY2FuIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbi5cbiAgICAgKiBUaGUgYE9iamVjdC5jcmVhdGUoKWAgY29kZSBwYXRoIHV0aWxpemVzIGEgbmV3IGBtZXNzYWdlUHJvdG90eXBlYFxuICAgICAqIHByb3BlcnR5IG9uIHRoZSBgSU1lc3NhZ2VUeXBlYCB3aGljaCBoYXMgdGhpcyBzYW1lIGBNRVNTQUdFX1RZUEVgXG4gICAgICogbm9uLWVudW1lcmFibGUgcHJvcGVydHkgb24gaXQuIERvaW5nIGl0IHRoaXMgd2F5IG1lYW5zIHRoYXQgd2Ugb25seVxuICAgICAqIHBheSB0aGUgY29zdCBvZiBgT2JqZWN0LmRlZmluZVByb3BlcnR5KClgIG9uY2UgcGVyIGBJTWVzc2FnZVR5cGVgXG4gICAgICogY2xhc3Mgb2Ygb25jZSBwZXIgXCJpbnN0YW5jZVwiLiBUaGUgZmFsc3kgY29kZSBwYXRoIGlzIG9ubHkgcHJvdmlkZWRcbiAgICAgKiBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgaW4gY2FzZXMgd2hlcmUgdGhlIHJ1bnRpbWUgbGlicmFyeSBpc1xuICAgICAqIHVwZGF0ZWQgd2l0aG91dCBhbHNvIHVwZGF0aW5nIHRoZSBnZW5lcmF0ZWQgY29kZS5cbiAgICAgKi9cbiAgICBjb25zdCBtc2cgPSB0eXBlLm1lc3NhZ2VQcm90b3R5cGVcbiAgICAgICAgPyBPYmplY3QuY3JlYXRlKHR5cGUubWVzc2FnZVByb3RvdHlwZSlcbiAgICAgICAgOiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIG1lc3NhZ2VfdHlwZV9jb250cmFjdF8xLk1FU1NBR0VfVFlQRSwgeyB2YWx1ZTogdHlwZSB9KTtcbiAgICBmb3IgKGxldCBmaWVsZCBvZiB0eXBlLmZpZWxkcykge1xuICAgICAgICBsZXQgbmFtZSA9IGZpZWxkLmxvY2FsTmFtZTtcbiAgICAgICAgaWYgKGZpZWxkLm9wdClcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBpZiAoZmllbGQub25lb2YpXG4gICAgICAgICAgICBtc2dbZmllbGQub25lb2ZdID0geyBvbmVvZktpbmQ6IHVuZGVmaW5lZCB9O1xuICAgICAgICBlbHNlIGlmIChmaWVsZC5yZXBlYXQpXG4gICAgICAgICAgICBtc2dbbmFtZV0gPSBbXTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgc3dpdGNoIChmaWVsZC5raW5kKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNjYWxhclwiOlxuICAgICAgICAgICAgICAgICAgICBtc2dbbmFtZV0gPSByZWZsZWN0aW9uX3NjYWxhcl9kZWZhdWx0XzEucmVmbGVjdGlvblNjYWxhckRlZmF1bHQoZmllbGQuVCwgZmllbGQuTCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJlbnVtXCI6XG4gICAgICAgICAgICAgICAgICAgIC8vIHdlIHJlcXVpcmUgMCB0byBiZSBkZWZhdWx0IHZhbHVlIGZvciBhbGwgZW51bXNcbiAgICAgICAgICAgICAgICAgICAgbXNnW25hbWVdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm1hcFwiOlxuICAgICAgICAgICAgICAgICAgICBtc2dbbmFtZV0gPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtc2c7XG59XG5leHBvcnRzLnJlZmxlY3Rpb25DcmVhdGUgPSByZWZsZWN0aW9uQ3JlYXRlO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVmbGVjdGlvbk1lcmdlUGFydGlhbCA9IHZvaWQgMDtcbi8qKlxuICogQ29weSBwYXJ0aWFsIGRhdGEgaW50byB0aGUgdGFyZ2V0IG1lc3NhZ2UuXG4gKlxuICogSWYgYSBzaW5ndWxhciBzY2FsYXIgb3IgZW51bSBmaWVsZCBpcyBwcmVzZW50IGluIHRoZSBzb3VyY2UsIGl0XG4gKiByZXBsYWNlcyB0aGUgZmllbGQgaW4gdGhlIHRhcmdldC5cbiAqXG4gKiBJZiBhIHNpbmd1bGFyIG1lc3NhZ2UgZmllbGQgaXMgcHJlc2VudCBpbiB0aGUgc291cmNlLCBpdCBpcyBtZXJnZWRcbiAqIHdpdGggdGhlIHRhcmdldCBmaWVsZCBieSBjYWxsaW5nIG1lcmdlUGFydGlhbCgpIG9mIHRoZSByZXNwb25zaWJsZVxuICogbWVzc2FnZSB0eXBlLlxuICpcbiAqIElmIGEgcmVwZWF0ZWQgZmllbGQgaXMgcHJlc2VudCBpbiB0aGUgc291cmNlLCBpdHMgdmFsdWVzIHJlcGxhY2VcbiAqIGFsbCB2YWx1ZXMgaW4gdGhlIHRhcmdldCBhcnJheSwgcmVtb3ZpbmcgZXh0cmFuZW91cyB2YWx1ZXMuXG4gKiBSZXBlYXRlZCBtZXNzYWdlIGZpZWxkcyBhcmUgY29waWVkLCBub3QgbWVyZ2VkLlxuICpcbiAqIElmIGEgbWFwIGZpZWxkIGlzIHByZXNlbnQgaW4gdGhlIHNvdXJjZSwgZW50cmllcyBhcmUgYWRkZWQgdG8gdGhlXG4gKiB0YXJnZXQgbWFwLCByZXBsYWNpbmcgZW50cmllcyB3aXRoIHRoZSBzYW1lIGtleS4gRW50cmllcyB0aGF0IG9ubHlcbiAqIGV4aXN0IGluIHRoZSB0YXJnZXQgcmVtYWluLiBFbnRyaWVzIHdpdGggbWVzc2FnZSB2YWx1ZXMgYXJlIGNvcGllZCxcbiAqIG5vdCBtZXJnZWQuXG4gKlxuICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gZGlmZmVycyBmcm9tIHByb3RvYnVmIG1lcmdlIHNlbWFudGljcyxcbiAqIHdoaWNoIGFwcGVuZHMgcmVwZWF0ZWQgZmllbGRzLlxuICovXG5mdW5jdGlvbiByZWZsZWN0aW9uTWVyZ2VQYXJ0aWFsKGluZm8sIHRhcmdldCwgc291cmNlKSB7XG4gICAgbGV0IGZpZWxkVmFsdWUsIC8vIHRoZSBmaWVsZCB2YWx1ZSB3ZSBhcmUgd29ya2luZyB3aXRoXG4gICAgaW5wdXQgPSBzb3VyY2UsIG91dHB1dDsgLy8gd2hlcmUgd2Ugd2FudCBvdXIgZmllbGQgdmFsdWUgdG8gZ29cbiAgICBmb3IgKGxldCBmaWVsZCBvZiBpbmZvLmZpZWxkcykge1xuICAgICAgICBsZXQgbmFtZSA9IGZpZWxkLmxvY2FsTmFtZTtcbiAgICAgICAgaWYgKGZpZWxkLm9uZW9mKSB7XG4gICAgICAgICAgICBjb25zdCBncm91cCA9IGlucHV0W2ZpZWxkLm9uZW9mXTsgLy8gdGhpcyBpcyB0aGUgb25lb2ZgcyBncm91cCBpbiB0aGUgc291cmNlXG4gICAgICAgICAgICBpZiAoKGdyb3VwID09PSBudWxsIHx8IGdyb3VwID09PSB2b2lkIDAgPyB2b2lkIDAgOiBncm91cC5vbmVvZktpbmQpID09IHVuZGVmaW5lZCkgeyAvLyB0aGUgdXNlciBpcyBmcmVlIHRvIG9taXRcbiAgICAgICAgICAgICAgICBjb250aW51ZTsgLy8gd2Ugc2tpcCB0aGlzIGZpZWxkLCBhbmQgYWxsIG90aGVyIG1lbWJlcnMgdG9vXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaWVsZFZhbHVlID0gZ3JvdXBbbmFtZV07IC8vIG91ciB2YWx1ZSBjb21lcyBmcm9tIHRoZSB0aGUgb25lb2YgZ3JvdXAgb2YgdGhlIHNvdXJjZVxuICAgICAgICAgICAgb3V0cHV0ID0gdGFyZ2V0W2ZpZWxkLm9uZW9mXTsgLy8gYW5kIG91ciBvdXRwdXQgaXMgdGhlIG9uZW9mIGdyb3VwIG9mIHRoZSB0YXJnZXRcbiAgICAgICAgICAgIG91dHB1dC5vbmVvZktpbmQgPSBncm91cC5vbmVvZktpbmQ7IC8vIGFsd2F5cyB1cGRhdGUgZGlzY3JpbWluYXRvclxuICAgICAgICAgICAgaWYgKGZpZWxkVmFsdWUgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIG91dHB1dFtuYW1lXTsgLy8gcmVtb3ZlIGFueSBleGlzdGluZyB2YWx1ZVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBza2lwIGZ1cnRoZXIgd29yayBvbiBmaWVsZFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZmllbGRWYWx1ZSA9IGlucHV0W25hbWVdOyAvLyB3ZSBhcmUgdXNpbmcgdGhlIHNvdXJjZSBkaXJlY3RseVxuICAgICAgICAgICAgb3V0cHV0ID0gdGFyZ2V0OyAvLyB3ZSB3YW50IG91ciBmaWVsZCB2YWx1ZSB0byBnbyBkaXJlY3RseSBpbnRvIHRoZSB0YXJnZXRcbiAgICAgICAgICAgIGlmIChmaWVsZFZhbHVlID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBza2lwIGZ1cnRoZXIgd29yayBvbiBmaWVsZCwgZXhpc3RpbmcgdmFsdWUgaXMgdXNlZCBhcyBpc1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChmaWVsZC5yZXBlYXQpXG4gICAgICAgICAgICBvdXRwdXRbbmFtZV0ubGVuZ3RoID0gZmllbGRWYWx1ZS5sZW5ndGg7IC8vIHJlc2l6ZSB0YXJnZXQgYXJyYXkgdG8gbWF0Y2ggc291cmNlIGFycmF5XG4gICAgICAgIC8vIG5vdyB3ZSBqdXN0IHdvcmsgd2l0aCBgZmllbGRWYWx1ZWAgYW5kIGBvdXRwdXRgIHRvIG1lcmdlIHRoZSB2YWx1ZVxuICAgICAgICBzd2l0Y2ggKGZpZWxkLmtpbmQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJzY2FsYXJcIjpcbiAgICAgICAgICAgIGNhc2UgXCJlbnVtXCI6XG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkLnJlcGVhdClcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWVsZFZhbHVlLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0W25hbWVdW2ldID0gZmllbGRWYWx1ZVtpXTsgLy8gbm90IGEgcmVmZXJlbmNlIHR5cGVcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIG91dHB1dFtuYW1lXSA9IGZpZWxkVmFsdWU7IC8vIG5vdCBhIHJlZmVyZW5jZSB0eXBlXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWVzc2FnZVwiOlxuICAgICAgICAgICAgICAgIGxldCBUID0gZmllbGQuVCgpO1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZC5yZXBlYXQpXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmllbGRWYWx1ZS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFtuYW1lXVtpXSA9IFQuY3JlYXRlKGZpZWxkVmFsdWVbaV0pO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKG91dHB1dFtuYW1lXSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICBvdXRwdXRbbmFtZV0gPSBULmNyZWF0ZShmaWVsZFZhbHVlKTsgLy8gbm90aGluZyB0byBtZXJnZSB3aXRoXG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBULm1lcmdlUGFydGlhbChvdXRwdXRbbmFtZV0sIGZpZWxkVmFsdWUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm1hcFwiOlxuICAgICAgICAgICAgICAgIC8vIE1hcCBhbmQgcmVwZWF0ZWQgZmllbGRzIGFyZSBzaW1wbHkgb3ZlcndyaXR0ZW4sIG5vdCBhcHBlbmRlZCBvciBtZXJnZWRcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGZpZWxkLlYua2luZCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwic2NhbGFyXCI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJlbnVtXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKG91dHB1dFtuYW1lXSwgZmllbGRWYWx1ZSk7IC8vIGVsZW1lbnRzIGFyZSBub3QgcmVmZXJlbmNlIHR5cGVzXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcIm1lc3NhZ2VcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBUID0gZmllbGQuVi5UKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBrIG9mIE9iamVjdC5rZXlzKGZpZWxkVmFsdWUpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFtuYW1lXVtrXSA9IFQuY3JlYXRlKGZpZWxkVmFsdWVba10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5yZWZsZWN0aW9uTWVyZ2VQYXJ0aWFsID0gcmVmbGVjdGlvbk1lcmdlUGFydGlhbDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlZmxlY3Rpb25FcXVhbHMgPSB2b2lkIDA7XG5jb25zdCByZWZsZWN0aW9uX2luZm9fMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24taW5mb1wiKTtcbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHR3byBtZXNzYWdlIG9mIHRoZSBzYW1lIHR5cGUgaGF2ZSB0aGUgc2FtZSBmaWVsZCB2YWx1ZXMuXG4gKiBDaGVja3MgZm9yIGRlZXAgZXF1YWxpdHksIHRyYXZlcnNpbmcgcmVwZWF0ZWQgZmllbGRzLCBvbmVvZiBncm91cHMsIG1hcHNcbiAqIGFuZCBtZXNzYWdlcyByZWN1cnNpdmVseS5cbiAqIFdpbGwgYWxzbyByZXR1cm4gdHJ1ZSBpZiBib3RoIG1lc3NhZ2VzIGFyZSBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gcmVmbGVjdGlvbkVxdWFscyhpbmZvLCBhLCBiKSB7XG4gICAgaWYgKGEgPT09IGIpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIGlmICghYSB8fCAhYilcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGZvciAobGV0IGZpZWxkIG9mIGluZm8uZmllbGRzKSB7XG4gICAgICAgIGxldCBsb2NhbE5hbWUgPSBmaWVsZC5sb2NhbE5hbWU7XG4gICAgICAgIGxldCB2YWxfYSA9IGZpZWxkLm9uZW9mID8gYVtmaWVsZC5vbmVvZl1bbG9jYWxOYW1lXSA6IGFbbG9jYWxOYW1lXTtcbiAgICAgICAgbGV0IHZhbF9iID0gZmllbGQub25lb2YgPyBiW2ZpZWxkLm9uZW9mXVtsb2NhbE5hbWVdIDogYltsb2NhbE5hbWVdO1xuICAgICAgICBzd2l0Y2ggKGZpZWxkLmtpbmQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJlbnVtXCI6XG4gICAgICAgICAgICBjYXNlIFwic2NhbGFyXCI6XG4gICAgICAgICAgICAgICAgbGV0IHQgPSBmaWVsZC5raW5kID09IFwiZW51bVwiID8gcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5JTlQzMiA6IGZpZWxkLlQ7XG4gICAgICAgICAgICAgICAgaWYgKCEoZmllbGQucmVwZWF0XG4gICAgICAgICAgICAgICAgICAgID8gcmVwZWF0ZWRQcmltaXRpdmVFcSh0LCB2YWxfYSwgdmFsX2IpXG4gICAgICAgICAgICAgICAgICAgIDogcHJpbWl0aXZlRXEodCwgdmFsX2EsIHZhbF9iKSkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJtYXBcIjpcbiAgICAgICAgICAgICAgICBpZiAoIShmaWVsZC5WLmtpbmQgPT0gXCJtZXNzYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgPyByZXBlYXRlZE1zZ0VxKGZpZWxkLlYuVCgpLCBvYmplY3RWYWx1ZXModmFsX2EpLCBvYmplY3RWYWx1ZXModmFsX2IpKVxuICAgICAgICAgICAgICAgICAgICA6IHJlcGVhdGVkUHJpbWl0aXZlRXEoZmllbGQuVi5raW5kID09IFwiZW51bVwiID8gcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5JTlQzMiA6IGZpZWxkLlYuVCwgb2JqZWN0VmFsdWVzKHZhbF9hKSwgb2JqZWN0VmFsdWVzKHZhbF9iKSkpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWVzc2FnZVwiOlxuICAgICAgICAgICAgICAgIGxldCBUID0gZmllbGQuVCgpO1xuICAgICAgICAgICAgICAgIGlmICghKGZpZWxkLnJlcGVhdFxuICAgICAgICAgICAgICAgICAgICA/IHJlcGVhdGVkTXNnRXEoVCwgdmFsX2EsIHZhbF9iKVxuICAgICAgICAgICAgICAgICAgICA6IFQuZXF1YWxzKHZhbF9hLCB2YWxfYikpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5leHBvcnRzLnJlZmxlY3Rpb25FcXVhbHMgPSByZWZsZWN0aW9uRXF1YWxzO1xuY29uc3Qgb2JqZWN0VmFsdWVzID0gT2JqZWN0LnZhbHVlcztcbmZ1bmN0aW9uIHByaW1pdGl2ZUVxKHR5cGUsIGEsIGIpIHtcbiAgICBpZiAoYSA9PT0gYilcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgaWYgKHR5cGUgIT09IHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuQllURVMpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBsZXQgYmEgPSBhO1xuICAgIGxldCBiYiA9IGI7XG4gICAgaWYgKGJhLmxlbmd0aCAhPT0gYmIubGVuZ3RoKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiYS5sZW5ndGg7IGkrKylcbiAgICAgICAgaWYgKGJhW2ldICE9IGJiW2ldKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gcmVwZWF0ZWRQcmltaXRpdmVFcSh0eXBlLCBhLCBiKSB7XG4gICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKylcbiAgICAgICAgaWYgKCFwcmltaXRpdmVFcSh0eXBlLCBhW2ldLCBiW2ldKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIHJlcGVhdGVkTXNnRXEodHlwZSwgYSwgYikge1xuICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspXG4gICAgICAgIGlmICghdHlwZS5lcXVhbHMoYVtpXSwgYltpXSkpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG59XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5NZXNzYWdlVHlwZSA9IHZvaWQgMDtcbmNvbnN0IG1lc3NhZ2VfdHlwZV9jb250cmFjdF8xID0gcmVxdWlyZShcIi4vbWVzc2FnZS10eXBlLWNvbnRyYWN0XCIpO1xuY29uc3QgcmVmbGVjdGlvbl9pbmZvXzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLWluZm9cIik7XG5jb25zdCByZWZsZWN0aW9uX3R5cGVfY2hlY2tfMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24tdHlwZS1jaGVja1wiKTtcbmNvbnN0IHJlZmxlY3Rpb25fanNvbl9yZWFkZXJfMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24tanNvbi1yZWFkZXJcIik7XG5jb25zdCByZWZsZWN0aW9uX2pzb25fd3JpdGVyXzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLWpzb24td3JpdGVyXCIpO1xuY29uc3QgcmVmbGVjdGlvbl9iaW5hcnlfcmVhZGVyXzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLWJpbmFyeS1yZWFkZXJcIik7XG5jb25zdCByZWZsZWN0aW9uX2JpbmFyeV93cml0ZXJfMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24tYmluYXJ5LXdyaXRlclwiKTtcbmNvbnN0IHJlZmxlY3Rpb25fY3JlYXRlXzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLWNyZWF0ZVwiKTtcbmNvbnN0IHJlZmxlY3Rpb25fbWVyZ2VfcGFydGlhbF8xID0gcmVxdWlyZShcIi4vcmVmbGVjdGlvbi1tZXJnZS1wYXJ0aWFsXCIpO1xuY29uc3QganNvbl90eXBpbmdzXzEgPSByZXF1aXJlKFwiLi9qc29uLXR5cGluZ3NcIik7XG5jb25zdCBqc29uX2Zvcm1hdF9jb250cmFjdF8xID0gcmVxdWlyZShcIi4vanNvbi1mb3JtYXQtY29udHJhY3RcIik7XG5jb25zdCByZWZsZWN0aW9uX2VxdWFsc18xID0gcmVxdWlyZShcIi4vcmVmbGVjdGlvbi1lcXVhbHNcIik7XG5jb25zdCBiaW5hcnlfd3JpdGVyXzEgPSByZXF1aXJlKFwiLi9iaW5hcnktd3JpdGVyXCIpO1xuY29uc3QgYmluYXJ5X3JlYWRlcl8xID0gcmVxdWlyZShcIi4vYmluYXJ5LXJlYWRlclwiKTtcbmNvbnN0IGJhc2VEZXNjcmlwdG9ycyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdC5nZXRQcm90b3R5cGVPZih7fSkpO1xuLyoqXG4gKiBUaGlzIHN0YW5kYXJkIG1lc3NhZ2UgdHlwZSBwcm92aWRlcyByZWZsZWN0aW9uLWJhc2VkXG4gKiBvcGVyYXRpb25zIHRvIHdvcmsgd2l0aCBhIG1lc3NhZ2UuXG4gKi9cbmNsYXNzIE1lc3NhZ2VUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcihuYW1lLCBmaWVsZHMsIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5kZWZhdWx0Q2hlY2tEZXB0aCA9IDE2O1xuICAgICAgICB0aGlzLnR5cGVOYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5maWVsZHMgPSBmaWVsZHMubWFwKHJlZmxlY3Rpb25faW5mb18xLm5vcm1hbGl6ZUZpZWxkSW5mbyk7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwID8gb3B0aW9ucyA6IHt9O1xuICAgICAgICB0aGlzLm1lc3NhZ2VQcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKG51bGwsIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYmFzZURlc2NyaXB0b3JzKSwgeyBbbWVzc2FnZV90eXBlX2NvbnRyYWN0XzEuTUVTU0FHRV9UWVBFXTogeyB2YWx1ZTogdGhpcyB9IH0pKTtcbiAgICAgICAgdGhpcy5yZWZUeXBlQ2hlY2sgPSBuZXcgcmVmbGVjdGlvbl90eXBlX2NoZWNrXzEuUmVmbGVjdGlvblR5cGVDaGVjayh0aGlzKTtcbiAgICAgICAgdGhpcy5yZWZKc29uUmVhZGVyID0gbmV3IHJlZmxlY3Rpb25fanNvbl9yZWFkZXJfMS5SZWZsZWN0aW9uSnNvblJlYWRlcih0aGlzKTtcbiAgICAgICAgdGhpcy5yZWZKc29uV3JpdGVyID0gbmV3IHJlZmxlY3Rpb25fanNvbl93cml0ZXJfMS5SZWZsZWN0aW9uSnNvbldyaXRlcih0aGlzKTtcbiAgICAgICAgdGhpcy5yZWZCaW5SZWFkZXIgPSBuZXcgcmVmbGVjdGlvbl9iaW5hcnlfcmVhZGVyXzEuUmVmbGVjdGlvbkJpbmFyeVJlYWRlcih0aGlzKTtcbiAgICAgICAgdGhpcy5yZWZCaW5Xcml0ZXIgPSBuZXcgcmVmbGVjdGlvbl9iaW5hcnlfd3JpdGVyXzEuUmVmbGVjdGlvbkJpbmFyeVdyaXRlcih0aGlzKTtcbiAgICB9XG4gICAgY3JlYXRlKHZhbHVlKSB7XG4gICAgICAgIGxldCBtZXNzYWdlID0gcmVmbGVjdGlvbl9jcmVhdGVfMS5yZWZsZWN0aW9uQ3JlYXRlKHRoaXMpO1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmVmbGVjdGlvbl9tZXJnZV9wYXJ0aWFsXzEucmVmbGVjdGlvbk1lcmdlUGFydGlhbCh0aGlzLCBtZXNzYWdlLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENsb25lIHRoZSBtZXNzYWdlLlxuICAgICAqXG4gICAgICogVW5rbm93biBmaWVsZHMgYXJlIGRpc2NhcmRlZC5cbiAgICAgKi9cbiAgICBjbG9uZShtZXNzYWdlKSB7XG4gICAgICAgIGxldCBjb3B5ID0gdGhpcy5jcmVhdGUoKTtcbiAgICAgICAgcmVmbGVjdGlvbl9tZXJnZV9wYXJ0aWFsXzEucmVmbGVjdGlvbk1lcmdlUGFydGlhbCh0aGlzLCBjb3B5LCBtZXNzYWdlKTtcbiAgICAgICAgcmV0dXJuIGNvcHk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERldGVybWluZXMgd2hldGhlciB0d28gbWVzc2FnZSBvZiB0aGUgc2FtZSB0eXBlIGhhdmUgdGhlIHNhbWUgZmllbGQgdmFsdWVzLlxuICAgICAqIENoZWNrcyBmb3IgZGVlcCBlcXVhbGl0eSwgdHJhdmVyc2luZyByZXBlYXRlZCBmaWVsZHMsIG9uZW9mIGdyb3VwcywgbWFwc1xuICAgICAqIGFuZCBtZXNzYWdlcyByZWN1cnNpdmVseS5cbiAgICAgKiBXaWxsIGFsc28gcmV0dXJuIHRydWUgaWYgYm90aCBtZXNzYWdlcyBhcmUgYHVuZGVmaW5lZGAuXG4gICAgICovXG4gICAgZXF1YWxzKGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIHJlZmxlY3Rpb25fZXF1YWxzXzEucmVmbGVjdGlvbkVxdWFscyh0aGlzLCBhLCBiKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSXMgdGhlIGdpdmVuIHZhbHVlIGFzc2lnbmFibGUgdG8gb3VyIG1lc3NhZ2UgdHlwZVxuICAgICAqIGFuZCBjb250YWlucyBubyBbZXhjZXNzIHByb3BlcnRpZXNdKGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rL2ludGVyZmFjZXMuaHRtbCNleGNlc3MtcHJvcGVydHktY2hlY2tzKT9cbiAgICAgKi9cbiAgICBpcyhhcmcsIGRlcHRoID0gdGhpcy5kZWZhdWx0Q2hlY2tEZXB0aCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWZUeXBlQ2hlY2suaXMoYXJnLCBkZXB0aCwgZmFsc2UpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJcyB0aGUgZ2l2ZW4gdmFsdWUgYXNzaWduYWJsZSB0byBvdXIgbWVzc2FnZSB0eXBlLFxuICAgICAqIHJlZ2FyZGxlc3Mgb2YgW2V4Y2VzcyBwcm9wZXJ0aWVzXShodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay9pbnRlcmZhY2VzLmh0bWwjZXhjZXNzLXByb3BlcnR5LWNoZWNrcyk/XG4gICAgICovXG4gICAgaXNBc3NpZ25hYmxlKGFyZywgZGVwdGggPSB0aGlzLmRlZmF1bHRDaGVja0RlcHRoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZlR5cGVDaGVjay5pcyhhcmcsIGRlcHRoLCB0cnVlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29weSBwYXJ0aWFsIGRhdGEgaW50byB0aGUgdGFyZ2V0IG1lc3NhZ2UuXG4gICAgICovXG4gICAgbWVyZ2VQYXJ0aWFsKHRhcmdldCwgc291cmNlKSB7XG4gICAgICAgIHJlZmxlY3Rpb25fbWVyZ2VfcGFydGlhbF8xLnJlZmxlY3Rpb25NZXJnZVBhcnRpYWwodGhpcywgdGFyZ2V0LCBzb3VyY2UpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBuZXcgbWVzc2FnZSBmcm9tIGJpbmFyeSBmb3JtYXQuXG4gICAgICovXG4gICAgZnJvbUJpbmFyeShkYXRhLCBvcHRpb25zKSB7XG4gICAgICAgIGxldCBvcHQgPSBiaW5hcnlfcmVhZGVyXzEuYmluYXJ5UmVhZE9wdGlvbnMob3B0aW9ucyk7XG4gICAgICAgIHJldHVybiB0aGlzLmludGVybmFsQmluYXJ5UmVhZChvcHQucmVhZGVyRmFjdG9yeShkYXRhKSwgZGF0YS5ieXRlTGVuZ3RoLCBvcHQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWFkIGEgbmV3IG1lc3NhZ2UgZnJvbSBhIEpTT04gdmFsdWUuXG4gICAgICovXG4gICAgZnJvbUpzb24oanNvbiwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbEpzb25SZWFkKGpzb24sIGpzb25fZm9ybWF0X2NvbnRyYWN0XzEuanNvblJlYWRPcHRpb25zKG9wdGlvbnMpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVhZCBhIG5ldyBtZXNzYWdlIGZyb20gYSBKU09OIHN0cmluZy5cbiAgICAgKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gYFQuZnJvbUpzb24oSlNPTi5wYXJzZShqc29uKSlgLlxuICAgICAqL1xuICAgIGZyb21Kc29uU3RyaW5nKGpzb24sIG9wdGlvbnMpIHtcbiAgICAgICAgbGV0IHZhbHVlID0gSlNPTi5wYXJzZShqc29uKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZnJvbUpzb24odmFsdWUsIG9wdGlvbnMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXcml0ZSB0aGUgbWVzc2FnZSB0byBjYW5vbmljYWwgSlNPTiB2YWx1ZS5cbiAgICAgKi9cbiAgICB0b0pzb24obWVzc2FnZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbEpzb25Xcml0ZShtZXNzYWdlLCBqc29uX2Zvcm1hdF9jb250cmFjdF8xLmpzb25Xcml0ZU9wdGlvbnMob3B0aW9ucykpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IHRoZSBtZXNzYWdlIHRvIGNhbm9uaWNhbCBKU09OIHN0cmluZy5cbiAgICAgKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gYEpTT04uc3RyaW5naWZ5KFQudG9Kc29uKHQpKWBcbiAgICAgKi9cbiAgICB0b0pzb25TdHJpbmcobWVzc2FnZSwgb3B0aW9ucykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGxldCB2YWx1ZSA9IHRoaXMudG9Kc29uKG1lc3NhZ2UsIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUsIG51bGwsIChfYSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5wcmV0dHlTcGFjZXMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IDApO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXcml0ZSB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZm9ybWF0LlxuICAgICAqL1xuICAgIHRvQmluYXJ5KG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgbGV0IG9wdCA9IGJpbmFyeV93cml0ZXJfMS5iaW5hcnlXcml0ZU9wdGlvbnMob3B0aW9ucyk7XG4gICAgICAgIHJldHVybiB0aGlzLmludGVybmFsQmluYXJ5V3JpdGUobWVzc2FnZSwgb3B0LndyaXRlckZhY3RvcnkoKSwgb3B0KS5maW5pc2goKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhpcyBpcyBhbiBpbnRlcm5hbCBtZXRob2QuIElmIHlvdSBqdXN0IHdhbnQgdG8gcmVhZCBhIG1lc3NhZ2UgZnJvbVxuICAgICAqIEpTT04sIHVzZSBgZnJvbUpzb24oKWAgb3IgYGZyb21Kc29uU3RyaW5nKClgLlxuICAgICAqXG4gICAgICogUmVhZHMgSlNPTiB2YWx1ZSBhbmQgbWVyZ2VzIHRoZSBmaWVsZHMgaW50byB0aGUgdGFyZ2V0XG4gICAgICogYWNjb3JkaW5nIHRvIHByb3RvYnVmIHJ1bGVzLiBJZiB0aGUgdGFyZ2V0IGlzIG9taXR0ZWQsXG4gICAgICogYSBuZXcgaW5zdGFuY2UgaXMgY3JlYXRlZCBmaXJzdC5cbiAgICAgKi9cbiAgICBpbnRlcm5hbEpzb25SZWFkKGpzb24sIG9wdGlvbnMsIHRhcmdldCkge1xuICAgICAgICBpZiAoanNvbiAhPT0gbnVsbCAmJiB0eXBlb2YganNvbiA9PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KGpzb24pKSB7XG4gICAgICAgICAgICBsZXQgbWVzc2FnZSA9IHRhcmdldCAhPT0gbnVsbCAmJiB0YXJnZXQgIT09IHZvaWQgMCA/IHRhcmdldCA6IHRoaXMuY3JlYXRlKCk7XG4gICAgICAgICAgICB0aGlzLnJlZkpzb25SZWFkZXIucmVhZChqc29uLCBtZXNzYWdlLCBvcHRpb25zKTtcbiAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIHBhcnNlIG1lc3NhZ2UgJHt0aGlzLnR5cGVOYW1lfSBmcm9tIEpTT04gJHtqc29uX3R5cGluZ3NfMS50eXBlb2ZKc29uVmFsdWUoanNvbil9LmApO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIGFuIGludGVybmFsIG1ldGhvZC4gSWYgeW91IGp1c3Qgd2FudCB0byB3cml0ZSBhIG1lc3NhZ2VcbiAgICAgKiB0byBKU09OLCB1c2UgYHRvSnNvbigpYCBvciBgdG9Kc29uU3RyaW5nKCkuXG4gICAgICpcbiAgICAgKiBXcml0ZXMgSlNPTiB2YWx1ZSBhbmQgcmV0dXJucyBpdC5cbiAgICAgKi9cbiAgICBpbnRlcm5hbEpzb25Xcml0ZShtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZkpzb25Xcml0ZXIud3JpdGUobWVzc2FnZSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgYW4gaW50ZXJuYWwgbWV0aG9kLiBJZiB5b3UganVzdCB3YW50IHRvIHdyaXRlIGEgbWVzc2FnZVxuICAgICAqIGluIGJpbmFyeSBmb3JtYXQsIHVzZSBgdG9CaW5hcnkoKWAuXG4gICAgICpcbiAgICAgKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIGluIGJpbmFyeSBmb3JtYXQgYW5kIGFwcGVuZHMgaXQgdG8gdGhlIGdpdmVuXG4gICAgICogd3JpdGVyLiBSZXR1cm5zIHBhc3NlZCB3cml0ZXIuXG4gICAgICovXG4gICAgaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLCB3cml0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5yZWZCaW5Xcml0ZXIud3JpdGUobWVzc2FnZSwgd3JpdGVyLCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhpcyBpcyBhbiBpbnRlcm5hbCBtZXRob2QuIElmIHlvdSBqdXN0IHdhbnQgdG8gcmVhZCBhIG1lc3NhZ2UgZnJvbVxuICAgICAqIGJpbmFyeSBkYXRhLCB1c2UgYGZyb21CaW5hcnkoKWAuXG4gICAgICpcbiAgICAgKiBSZWFkcyBkYXRhIGZyb20gYmluYXJ5IGZvcm1hdCBhbmQgbWVyZ2VzIHRoZSBmaWVsZHMgaW50b1xuICAgICAqIHRoZSB0YXJnZXQgYWNjb3JkaW5nIHRvIHByb3RvYnVmIHJ1bGVzLiBJZiB0aGUgdGFyZ2V0IGlzXG4gICAgICogb21pdHRlZCwgYSBuZXcgaW5zdGFuY2UgaXMgY3JlYXRlZCBmaXJzdC5cbiAgICAgKi9cbiAgICBpbnRlcm5hbEJpbmFyeVJlYWQocmVhZGVyLCBsZW5ndGgsIG9wdGlvbnMsIHRhcmdldCkge1xuICAgICAgICBsZXQgbWVzc2FnZSA9IHRhcmdldCAhPT0gbnVsbCAmJiB0YXJnZXQgIT09IHZvaWQgMCA/IHRhcmdldCA6IHRoaXMuY3JlYXRlKCk7XG4gICAgICAgIHRoaXMucmVmQmluUmVhZGVyLnJlYWQocmVhZGVyLCBtZXNzYWdlLCBvcHRpb25zLCBsZW5ndGgpO1xuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG59XG5leHBvcnRzLk1lc3NhZ2VUeXBlID0gTWVzc2FnZVR5cGU7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jb250YWluc01lc3NhZ2VUeXBlID0gdm9pZCAwO1xuY29uc3QgbWVzc2FnZV90eXBlX2NvbnRyYWN0XzEgPSByZXF1aXJlKFwiLi9tZXNzYWdlLXR5cGUtY29udHJhY3RcIik7XG4vKipcbiAqIENoZWNrIGlmIHRoZSBwcm92aWRlZCBvYmplY3QgaXMgYSBwcm90byBtZXNzYWdlLlxuICpcbiAqIE5vdGUgdGhhdCB0aGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBmZWF0dXJlIC0gaXQgaXMgaGVyZSB0byBzdGF5LCBidXRcbiAqIGltcGxlbWVudGF0aW9uIGRldGFpbHMgbWF5IGNoYW5nZSB3aXRob3V0IG5vdGljZS5cbiAqL1xuZnVuY3Rpb24gY29udGFpbnNNZXNzYWdlVHlwZShtc2cpIHtcbiAgICByZXR1cm4gbXNnW21lc3NhZ2VfdHlwZV9jb250cmFjdF8xLk1FU1NBR0VfVFlQRV0gIT0gbnVsbDtcbn1cbmV4cG9ydHMuY29udGFpbnNNZXNzYWdlVHlwZSA9IGNvbnRhaW5zTWVzc2FnZVR5cGU7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5saXN0RW51bU51bWJlcnMgPSBleHBvcnRzLmxpc3RFbnVtTmFtZXMgPSBleHBvcnRzLmxpc3RFbnVtVmFsdWVzID0gZXhwb3J0cy5pc0VudW1PYmplY3QgPSB2b2lkIDA7XG4vKipcbiAqIElzIHRoaXMgYSBsb29rdXAgb2JqZWN0IGdlbmVyYXRlZCBieSBUeXBlc2NyaXB0LCBmb3IgYSBUeXBlc2NyaXB0IGVudW1cbiAqIGdlbmVyYXRlZCBieSBwcm90b2J1Zi10cz9cbiAqXG4gKiAtIE5vIGBjb25zdCBlbnVtYCAoZW51bSBtdXN0IG5vdCBiZSBpbmxpbmVkLCB3ZSBuZWVkIHJldmVyc2UgbWFwcGluZykuXG4gKiAtIE5vIHN0cmluZyBlbnVtICh3ZSBuZWVkIGludDMyIGZvciBwcm90b2J1ZikuXG4gKiAtIE11c3QgaGF2ZSBhIHZhbHVlIGZvciAwIChvdGhlcndpc2UsIHdlIHdvdWxkIG5lZWQgdG8gc3VwcG9ydCBjdXN0b20gZGVmYXVsdCB2YWx1ZXMpLlxuICovXG5mdW5jdGlvbiBpc0VudW1PYmplY3QoYXJnKSB7XG4gICAgaWYgKHR5cGVvZiBhcmcgIT0gJ29iamVjdCcgfHwgYXJnID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCFhcmcuaGFzT3duUHJvcGVydHkoMCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBmb3IgKGxldCBrIG9mIE9iamVjdC5rZXlzKGFyZykpIHtcbiAgICAgICAgbGV0IG51bSA9IHBhcnNlSW50KGspO1xuICAgICAgICBpZiAoIU51bWJlci5pc05hTihudW0pKSB7XG4gICAgICAgICAgICAvLyBpcyB0aGVyZSBhIG5hbWUgZm9yIHRoZSBudW1iZXI/XG4gICAgICAgICAgICBsZXQgbmFtID0gYXJnW251bV07XG4gICAgICAgICAgICBpZiAobmFtID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgLy8gZG9lcyB0aGUgbmFtZSByZXNvbHZlIGJhY2sgdG8gdGhlIG51bWJlcj9cbiAgICAgICAgICAgIGlmIChhcmdbbmFtXSAhPT0gbnVtKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIGlzIHRoZXJlIGEgbnVtYmVyIGZvciB0aGUgbmFtZT9cbiAgICAgICAgICAgIGxldCBudW0gPSBhcmdba107XG4gICAgICAgICAgICBpZiAobnVtID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgLy8gaXMgaXQgYSBzdHJpbmcgZW51bT9cbiAgICAgICAgICAgIGlmICh0eXBlb2YgbnVtICE9PSAnbnVtYmVyJylcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAvLyBkbyB3ZSBrbm93IHRoZSBudW1iZXI/XG4gICAgICAgICAgICBpZiAoYXJnW251bV0gPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5leHBvcnRzLmlzRW51bU9iamVjdCA9IGlzRW51bU9iamVjdDtcbi8qKlxuICogTGlzdHMgYWxsIHZhbHVlcyBvZiBhIFR5cGVzY3JpcHQgZW51bSwgYXMgYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIGEgXCJuYW1lXCJcbiAqIHByb3BlcnR5IGFuZCBhIFwibnVtYmVyXCIgcHJvcGVydHkuXG4gKlxuICogTm90ZSB0aGF0IGl0IGlzIHBvc3NpYmxlIHRoYXQgYSBudW1iZXIgYXBwZWFycyBtb3JlIHRoYW4gb25jZSwgYmVjYXVzZSBpdCBpc1xuICogcG9zc2libGUgdG8gaGF2ZSBhbGlhc2VzIGluIGFuIGVudW0uXG4gKlxuICogVGhyb3dzIGlmIHRoZSBlbnVtIGRvZXMgbm90IGFkaGVyZSB0byB0aGUgcnVsZXMgb2YgZW51bXMgZ2VuZXJhdGVkIGJ5XG4gKiBwcm90b2J1Zi10cy4gU2VlIGBpc0VudW1PYmplY3QoKWAuXG4gKi9cbmZ1bmN0aW9uIGxpc3RFbnVtVmFsdWVzKGVudW1PYmplY3QpIHtcbiAgICBpZiAoIWlzRW51bU9iamVjdChlbnVtT2JqZWN0KSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibm90IGEgdHlwZXNjcmlwdCBlbnVtIG9iamVjdFwiKTtcbiAgICBsZXQgdmFsdWVzID0gW107XG4gICAgZm9yIChsZXQgW25hbWUsIG51bWJlcl0gb2YgT2JqZWN0LmVudHJpZXMoZW51bU9iamVjdCkpXG4gICAgICAgIGlmICh0eXBlb2YgbnVtYmVyID09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICB2YWx1ZXMucHVzaCh7IG5hbWUsIG51bWJlciB9KTtcbiAgICByZXR1cm4gdmFsdWVzO1xufVxuZXhwb3J0cy5saXN0RW51bVZhbHVlcyA9IGxpc3RFbnVtVmFsdWVzO1xuLyoqXG4gKiBMaXN0cyB0aGUgbmFtZXMgb2YgYSBUeXBlc2NyaXB0IGVudW0uXG4gKlxuICogVGhyb3dzIGlmIHRoZSBlbnVtIGRvZXMgbm90IGFkaGVyZSB0byB0aGUgcnVsZXMgb2YgZW51bXMgZ2VuZXJhdGVkIGJ5XG4gKiBwcm90b2J1Zi10cy4gU2VlIGBpc0VudW1PYmplY3QoKWAuXG4gKi9cbmZ1bmN0aW9uIGxpc3RFbnVtTmFtZXMoZW51bU9iamVjdCkge1xuICAgIHJldHVybiBsaXN0RW51bVZhbHVlcyhlbnVtT2JqZWN0KS5tYXAodmFsID0+IHZhbC5uYW1lKTtcbn1cbmV4cG9ydHMubGlzdEVudW1OYW1lcyA9IGxpc3RFbnVtTmFtZXM7XG4vKipcbiAqIExpc3RzIHRoZSBudW1iZXJzIG9mIGEgVHlwZXNjcmlwdCBlbnVtLlxuICpcbiAqIFRocm93cyBpZiB0aGUgZW51bSBkb2VzIG5vdCBhZGhlcmUgdG8gdGhlIHJ1bGVzIG9mIGVudW1zIGdlbmVyYXRlZCBieVxuICogcHJvdG9idWYtdHMuIFNlZSBgaXNFbnVtT2JqZWN0KClgLlxuICovXG5mdW5jdGlvbiBsaXN0RW51bU51bWJlcnMoZW51bU9iamVjdCkge1xuICAgIHJldHVybiBsaXN0RW51bVZhbHVlcyhlbnVtT2JqZWN0KVxuICAgICAgICAubWFwKHZhbCA9PiB2YWwubnVtYmVyKVxuICAgICAgICAuZmlsdGVyKChudW0sIGluZGV4LCBhcnIpID0+IGFyci5pbmRleE9mKG51bSkgPT0gaW5kZXgpO1xufVxuZXhwb3J0cy5saXN0RW51bU51bWJlcnMgPSBsaXN0RW51bU51bWJlcnM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gUHVibGljIEFQSSBvZiB0aGUgcHJvdG9idWYtdHMgcnVudGltZS5cbi8vIE5vdGU6IHdlIGRvIG5vdCB1c2UgYGV4cG9ydCAqIGZyb20gLi4uYCB0byBoZWxwIHRyZWUgc2hha2Vycyxcbi8vIHdlYnBhY2sgdmVyYm9zZSBvdXRwdXQgaGludHMgdGhhdCB0aGlzIHNob3VsZCBiZSB1c2VmdWxcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8vIENvbnZlbmllbmNlIEpTT04gdHlwaW5ncyBhbmQgY29ycmVzcG9uZGluZyB0eXBlIGd1YXJkc1xudmFyIGpzb25fdHlwaW5nc18xID0gcmVxdWlyZShcIi4vanNvbi10eXBpbmdzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidHlwZW9mSnNvblZhbHVlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBqc29uX3R5cGluZ3NfMS50eXBlb2ZKc29uVmFsdWU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0pzb25PYmplY3RcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGpzb25fdHlwaW5nc18xLmlzSnNvbk9iamVjdDsgfSB9KTtcbi8vIEJhc2UgNjQgZW5jb2RpbmdcbnZhciBiYXNlNjRfMSA9IHJlcXVpcmUoXCIuL2Jhc2U2NFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImJhc2U2NGRlY29kZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYmFzZTY0XzEuYmFzZTY0ZGVjb2RlOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYmFzZTY0ZW5jb2RlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBiYXNlNjRfMS5iYXNlNjRlbmNvZGU7IH0gfSk7XG4vLyBVVEY4IGVuY29kaW5nXG52YXIgcHJvdG9idWZqc191dGY4XzEgPSByZXF1aXJlKFwiLi9wcm90b2J1ZmpzLXV0ZjhcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ1dGY4cmVhZFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcHJvdG9idWZqc191dGY4XzEudXRmOHJlYWQ7IH0gfSk7XG4vLyBCaW5hcnkgZm9ybWF0IGNvbnRyYWN0cywgb3B0aW9ucyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZywgZm9yIGV4YW1wbGVcbnZhciBiaW5hcnlfZm9ybWF0X2NvbnRyYWN0XzEgPSByZXF1aXJlKFwiLi9iaW5hcnktZm9ybWF0LWNvbnRyYWN0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiV2lyZVR5cGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMS5XaXJlVHlwZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm1lcmdlQmluYXJ5T3B0aW9uc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYmluYXJ5X2Zvcm1hdF9jb250cmFjdF8xLm1lcmdlQmluYXJ5T3B0aW9uczsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlVua25vd25GaWVsZEhhbmRsZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMS5Vbmtub3duRmllbGRIYW5kbGVyOyB9IH0pO1xuLy8gU3RhbmRhcmQgSUJpbmFyeVJlYWRlciBpbXBsZW1lbnRhdGlvblxudmFyIGJpbmFyeV9yZWFkZXJfMSA9IHJlcXVpcmUoXCIuL2JpbmFyeS1yZWFkZXJcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJCaW5hcnlSZWFkZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGJpbmFyeV9yZWFkZXJfMS5CaW5hcnlSZWFkZXI7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJiaW5hcnlSZWFkT3B0aW9uc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYmluYXJ5X3JlYWRlcl8xLmJpbmFyeVJlYWRPcHRpb25zOyB9IH0pO1xuLy8gU3RhbmRhcmQgSUJpbmFyeVdyaXRlciBpbXBsZW1lbnRhdGlvblxudmFyIGJpbmFyeV93cml0ZXJfMSA9IHJlcXVpcmUoXCIuL2JpbmFyeS13cml0ZXJcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJCaW5hcnlXcml0ZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGJpbmFyeV93cml0ZXJfMS5CaW5hcnlXcml0ZXI7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJiaW5hcnlXcml0ZU9wdGlvbnNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGJpbmFyeV93cml0ZXJfMS5iaW5hcnlXcml0ZU9wdGlvbnM7IH0gfSk7XG4vLyBJbnQ2NCBhbmQgVUludDY0IGltcGxlbWVudGF0aW9ucyByZXF1aXJlZCBmb3IgdGhlIGJpbmFyeSBmb3JtYXRcbnZhciBwYl9sb25nXzEgPSByZXF1aXJlKFwiLi9wYi1sb25nXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUGJMb25nXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwYl9sb25nXzEuUGJMb25nOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUGJVTG9uZ1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcGJfbG9uZ18xLlBiVUxvbmc7IH0gfSk7XG4vLyBKU09OIGZvcm1hdCBjb250cmFjdHMsIG9wdGlvbnMgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcsIGZvciBleGFtcGxlXG52YXIganNvbl9mb3JtYXRfY29udHJhY3RfMSA9IHJlcXVpcmUoXCIuL2pzb24tZm9ybWF0LWNvbnRyYWN0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwianNvblJlYWRPcHRpb25zXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBqc29uX2Zvcm1hdF9jb250cmFjdF8xLmpzb25SZWFkT3B0aW9uczsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImpzb25Xcml0ZU9wdGlvbnNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGpzb25fZm9ybWF0X2NvbnRyYWN0XzEuanNvbldyaXRlT3B0aW9uczsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm1lcmdlSnNvbk9wdGlvbnNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGpzb25fZm9ybWF0X2NvbnRyYWN0XzEubWVyZ2VKc29uT3B0aW9uczsgfSB9KTtcbi8vIE1lc3NhZ2UgdHlwZSBjb250cmFjdFxudmFyIG1lc3NhZ2VfdHlwZV9jb250cmFjdF8xID0gcmVxdWlyZShcIi4vbWVzc2FnZS10eXBlLWNvbnRyYWN0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTUVTU0FHRV9UWVBFXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBtZXNzYWdlX3R5cGVfY29udHJhY3RfMS5NRVNTQUdFX1RZUEU7IH0gfSk7XG4vLyBNZXNzYWdlIHR5cGUgaW1wbGVtZW50YXRpb24gdmlhIHJlZmxlY3Rpb25cbnZhciBtZXNzYWdlX3R5cGVfMSA9IHJlcXVpcmUoXCIuL21lc3NhZ2UtdHlwZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk1lc3NhZ2VUeXBlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBtZXNzYWdlX3R5cGVfMS5NZXNzYWdlVHlwZTsgfSB9KTtcbi8vIFJlZmxlY3Rpb24gaW5mbywgZ2VuZXJhdGVkIGJ5IHRoZSBwbHVnaW4sIGV4cG9zZWQgdG8gdGhlIHVzZXIsIHVzZWQgYnkgcmVmbGVjdGlvbiBvcHNcbnZhciByZWZsZWN0aW9uX2luZm9fMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24taW5mb1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlNjYWxhclR5cGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJMb25nVHlwZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVmbGVjdGlvbl9pbmZvXzEuTG9uZ1R5cGU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJSZXBlYXRUeXBlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZWZsZWN0aW9uX2luZm9fMS5SZXBlYXRUeXBlOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibm9ybWFsaXplRmllbGRJbmZvXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZWZsZWN0aW9uX2luZm9fMS5ub3JtYWxpemVGaWVsZEluZm87IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyZWFkRmllbGRPcHRpb25zXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZWZsZWN0aW9uX2luZm9fMS5yZWFkRmllbGRPcHRpb25zOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmVhZEZpZWxkT3B0aW9uXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZWZsZWN0aW9uX2luZm9fMS5yZWFkRmllbGRPcHRpb247IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyZWFkTWVzc2FnZU9wdGlvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVmbGVjdGlvbl9pbmZvXzEucmVhZE1lc3NhZ2VPcHRpb247IH0gfSk7XG4vLyBNZXNzYWdlIG9wZXJhdGlvbnMgdmlhIHJlZmxlY3Rpb25cbnZhciByZWZsZWN0aW9uX3R5cGVfY2hlY2tfMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24tdHlwZS1jaGVja1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlJlZmxlY3Rpb25UeXBlQ2hlY2tcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlZmxlY3Rpb25fdHlwZV9jaGVja18xLlJlZmxlY3Rpb25UeXBlQ2hlY2s7IH0gfSk7XG52YXIgcmVmbGVjdGlvbl9jcmVhdGVfMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24tY3JlYXRlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmVmbGVjdGlvbkNyZWF0ZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVmbGVjdGlvbl9jcmVhdGVfMS5yZWZsZWN0aW9uQ3JlYXRlOyB9IH0pO1xudmFyIHJlZmxlY3Rpb25fc2NhbGFyX2RlZmF1bHRfMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24tc2NhbGFyLWRlZmF1bHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyZWZsZWN0aW9uU2NhbGFyRGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVmbGVjdGlvbl9zY2FsYXJfZGVmYXVsdF8xLnJlZmxlY3Rpb25TY2FsYXJEZWZhdWx0OyB9IH0pO1xudmFyIHJlZmxlY3Rpb25fbWVyZ2VfcGFydGlhbF8xID0gcmVxdWlyZShcIi4vcmVmbGVjdGlvbi1tZXJnZS1wYXJ0aWFsXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmVmbGVjdGlvbk1lcmdlUGFydGlhbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVmbGVjdGlvbl9tZXJnZV9wYXJ0aWFsXzEucmVmbGVjdGlvbk1lcmdlUGFydGlhbDsgfSB9KTtcbnZhciByZWZsZWN0aW9uX2VxdWFsc18xID0gcmVxdWlyZShcIi4vcmVmbGVjdGlvbi1lcXVhbHNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyZWZsZWN0aW9uRXF1YWxzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZWZsZWN0aW9uX2VxdWFsc18xLnJlZmxlY3Rpb25FcXVhbHM7IH0gfSk7XG52YXIgcmVmbGVjdGlvbl9iaW5hcnlfcmVhZGVyXzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLWJpbmFyeS1yZWFkZXJcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJSZWZsZWN0aW9uQmluYXJ5UmVhZGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZWZsZWN0aW9uX2JpbmFyeV9yZWFkZXJfMS5SZWZsZWN0aW9uQmluYXJ5UmVhZGVyOyB9IH0pO1xudmFyIHJlZmxlY3Rpb25fYmluYXJ5X3dyaXRlcl8xID0gcmVxdWlyZShcIi4vcmVmbGVjdGlvbi1iaW5hcnktd3JpdGVyXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUmVmbGVjdGlvbkJpbmFyeVdyaXRlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVmbGVjdGlvbl9iaW5hcnlfd3JpdGVyXzEuUmVmbGVjdGlvbkJpbmFyeVdyaXRlcjsgfSB9KTtcbnZhciByZWZsZWN0aW9uX2pzb25fcmVhZGVyXzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLWpzb24tcmVhZGVyXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUmVmbGVjdGlvbkpzb25SZWFkZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlZmxlY3Rpb25fanNvbl9yZWFkZXJfMS5SZWZsZWN0aW9uSnNvblJlYWRlcjsgfSB9KTtcbnZhciByZWZsZWN0aW9uX2pzb25fd3JpdGVyXzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLWpzb24td3JpdGVyXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUmVmbGVjdGlvbkpzb25Xcml0ZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlZmxlY3Rpb25fanNvbl93cml0ZXJfMS5SZWZsZWN0aW9uSnNvbldyaXRlcjsgfSB9KTtcbnZhciByZWZsZWN0aW9uX2NvbnRhaW5zX21lc3NhZ2VfdHlwZV8xID0gcmVxdWlyZShcIi4vcmVmbGVjdGlvbi1jb250YWlucy1tZXNzYWdlLXR5cGVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb250YWluc01lc3NhZ2VUeXBlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZWZsZWN0aW9uX2NvbnRhaW5zX21lc3NhZ2VfdHlwZV8xLmNvbnRhaW5zTWVzc2FnZVR5cGU7IH0gfSk7XG4vLyBPbmVvZiBoZWxwZXJzXG52YXIgb25lb2ZfMSA9IHJlcXVpcmUoXCIuL29uZW9mXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNPbmVvZkdyb3VwXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBvbmVvZl8xLmlzT25lb2ZHcm91cDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNldE9uZW9mVmFsdWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9uZW9mXzEuc2V0T25lb2ZWYWx1ZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImdldE9uZW9mVmFsdWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9uZW9mXzEuZ2V0T25lb2ZWYWx1ZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNsZWFyT25lb2ZWYWx1ZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gb25lb2ZfMS5jbGVhck9uZW9mVmFsdWU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnZXRTZWxlY3RlZE9uZW9mVmFsdWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9uZW9mXzEuZ2V0U2VsZWN0ZWRPbmVvZlZhbHVlOyB9IH0pO1xuLy8gRW51bSBvYmplY3QgdHlwZSBndWFyZCBhbmQgcmVmbGVjdGlvbiB1dGlsLCBtYXkgYmUgaW50ZXJlc3RpbmcgdG8gdGhlIHVzZXIuXG52YXIgZW51bV9vYmplY3RfMSA9IHJlcXVpcmUoXCIuL2VudW0tb2JqZWN0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibGlzdEVudW1WYWx1ZXNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGVudW1fb2JqZWN0XzEubGlzdEVudW1WYWx1ZXM7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJsaXN0RW51bU5hbWVzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBlbnVtX29iamVjdF8xLmxpc3RFbnVtTmFtZXM7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJsaXN0RW51bU51bWJlcnNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGVudW1fb2JqZWN0XzEubGlzdEVudW1OdW1iZXJzOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNFbnVtT2JqZWN0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBlbnVtX29iamVjdF8xLmlzRW51bU9iamVjdDsgfSB9KTtcbi8vIGxvd2VyQ2FtZWxDYXNlKCkgaXMgZXhwb3J0ZWQgZm9yIHBsdWdpbiwgcnBjLXJ1bnRpbWUgYW5kIG90aGVyIHJwYyBwYWNrYWdlc1xudmFyIGxvd2VyX2NhbWVsX2Nhc2VfMSA9IHJlcXVpcmUoXCIuL2xvd2VyLWNhbWVsLWNhc2VcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJsb3dlckNhbWVsQ2FzZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbG93ZXJfY2FtZWxfY2FzZV8xLmxvd2VyQ2FtZWxDYXNlOyB9IH0pO1xuLy8gYXNzZXJ0aW9uIGZ1bmN0aW9ucyBhcmUgZXhwb3J0ZWQgZm9yIHBsdWdpbiwgbWF5IGFsc28gYmUgdXNlZnVsIHRvIHVzZXJcbnZhciBhc3NlcnRfMSA9IHJlcXVpcmUoXCIuL2Fzc2VydFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImFzc2VydFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYXNzZXJ0XzEuYXNzZXJ0OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYXNzZXJ0TmV2ZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFzc2VydF8xLmFzc2VydE5ldmVyOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYXNzZXJ0SW50MzJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFzc2VydF8xLmFzc2VydEludDMyOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYXNzZXJ0VUludDMyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBhc3NlcnRfMS5hc3NlcnRVSW50MzI7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhc3NlcnRGbG9hdDMyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBhc3NlcnRfMS5hc3NlcnRGbG9hdDMyOyB9IH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVGltZXN0YW1wID0gdm9pZCAwO1xuY29uc3QgcnVudGltZV8xID0gcmVxdWlyZShcIkBwcm90b2J1Zi10cy9ydW50aW1lXCIpO1xuY29uc3QgcnVudGltZV8yID0gcmVxdWlyZShcIkBwcm90b2J1Zi10cy9ydW50aW1lXCIpO1xuY29uc3QgcnVudGltZV8zID0gcmVxdWlyZShcIkBwcm90b2J1Zi10cy9ydW50aW1lXCIpO1xuY29uc3QgcnVudGltZV80ID0gcmVxdWlyZShcIkBwcm90b2J1Zi10cy9ydW50aW1lXCIpO1xuY29uc3QgcnVudGltZV81ID0gcmVxdWlyZShcIkBwcm90b2J1Zi10cy9ydW50aW1lXCIpO1xuY29uc3QgcnVudGltZV82ID0gcmVxdWlyZShcIkBwcm90b2J1Zi10cy9ydW50aW1lXCIpO1xuY29uc3QgcnVudGltZV83ID0gcmVxdWlyZShcIkBwcm90b2J1Zi10cy9ydW50aW1lXCIpO1xuLy8gQGdlbmVyYXRlZCBtZXNzYWdlIHR5cGUgd2l0aCByZWZsZWN0aW9uIGluZm9ybWF0aW9uLCBtYXkgcHJvdmlkZSBzcGVlZCBvcHRpbWl6ZWQgbWV0aG9kc1xuY2xhc3MgVGltZXN0YW1wJFR5cGUgZXh0ZW5kcyBydW50aW1lXzcuTWVzc2FnZVR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcImdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBcIiwgW1xuICAgICAgICAgICAgeyBubzogMSwgbmFtZTogXCJzZWNvbmRzXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDMgLypTY2FsYXJUeXBlLklOVDY0Ki8gfSxcbiAgICAgICAgICAgIHsgbm86IDIsIG5hbWU6IFwibmFub3NcIiwga2luZDogXCJzY2FsYXJcIiwgVDogNSAvKlNjYWxhclR5cGUuSU5UMzIqLyB9XG4gICAgICAgIF0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IGBUaW1lc3RhbXBgIGZvciB0aGUgY3VycmVudCB0aW1lLlxuICAgICAqL1xuICAgIG5vdygpIHtcbiAgICAgICAgY29uc3QgbXNnID0gdGhpcy5jcmVhdGUoKTtcbiAgICAgICAgY29uc3QgbXMgPSBEYXRlLm5vdygpO1xuICAgICAgICBtc2cuc2Vjb25kcyA9IHJ1bnRpbWVfNi5QYkxvbmcuZnJvbShNYXRoLmZsb29yKG1zIC8gMTAwMCkpLnRvU3RyaW5nKCk7XG4gICAgICAgIG1zZy5uYW5vcyA9IChtcyAlIDEwMDApICogMTAwMDAwMDtcbiAgICAgICAgcmV0dXJuIG1zZztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYSBgVGltZXN0YW1wYCB0byBhIEphdmFTY3JpcHQgRGF0ZS5cbiAgICAgKi9cbiAgICB0b0RhdGUobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUocnVudGltZV82LlBiTG9uZy5mcm9tKG1lc3NhZ2Uuc2Vjb25kcykudG9OdW1iZXIoKSAqIDEwMDAgKyBNYXRoLmNlaWwobWVzc2FnZS5uYW5vcyAvIDEwMDAwMDApKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYSBKYXZhU2NyaXB0IERhdGUgdG8gYSBgVGltZXN0YW1wYC5cbiAgICAgKi9cbiAgICBmcm9tRGF0ZShkYXRlKSB7XG4gICAgICAgIGNvbnN0IG1zZyA9IHRoaXMuY3JlYXRlKCk7XG4gICAgICAgIGNvbnN0IG1zID0gZGF0ZS5nZXRUaW1lKCk7XG4gICAgICAgIG1zZy5zZWNvbmRzID0gcnVudGltZV82LlBiTG9uZy5mcm9tKE1hdGguZmxvb3IobXMgLyAxMDAwKSkudG9TdHJpbmcoKTtcbiAgICAgICAgbXNnLm5hbm9zID0gKG1zICUgMTAwMCkgKiAxMDAwMDAwO1xuICAgICAgICByZXR1cm4gbXNnO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbiBKU09OIGZvcm1hdCwgdGhlIGBUaW1lc3RhbXBgIHR5cGUgaXMgZW5jb2RlZCBhcyBhIHN0cmluZ1xuICAgICAqIGluIHRoZSBSRkMgMzMzOSBmb3JtYXQuXG4gICAgICovXG4gICAgaW50ZXJuYWxKc29uV3JpdGUobWVzc2FnZSwgb3B0aW9ucykge1xuICAgICAgICBsZXQgbXMgPSBydW50aW1lXzYuUGJMb25nLmZyb20obWVzc2FnZS5zZWNvbmRzKS50b051bWJlcigpICogMTAwMDtcbiAgICAgICAgaWYgKG1zIDwgRGF0ZS5wYXJzZShcIjAwMDEtMDEtMDFUMDA6MDA6MDBaXCIpIHx8IG1zID4gRGF0ZS5wYXJzZShcIjk5OTktMTItMzFUMjM6NTk6NTlaXCIpKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIGVuY29kZSBUaW1lc3RhbXAgdG8gSlNPTi4gTXVzdCBiZSBmcm9tIDAwMDEtMDEtMDFUMDA6MDA6MDBaIHRvIDk5OTktMTItMzFUMjM6NTk6NTlaIGluY2x1c2l2ZS5cIik7XG4gICAgICAgIGlmIChtZXNzYWdlLm5hbm9zIDwgMClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBlbmNvZGUgaW52YWxpZCBUaW1lc3RhbXAgdG8gSlNPTi4gTmFub3MgbXVzdCBub3QgYmUgbmVnYXRpdmUuXCIpO1xuICAgICAgICBsZXQgeiA9IFwiWlwiO1xuICAgICAgICBpZiAobWVzc2FnZS5uYW5vcyA+IDApIHtcbiAgICAgICAgICAgIGxldCBuYW5vc1N0ciA9IChtZXNzYWdlLm5hbm9zICsgMTAwMDAwMDAwMCkudG9TdHJpbmcoKS5zdWJzdHJpbmcoMSk7XG4gICAgICAgICAgICBpZiAobmFub3NTdHIuc3Vic3RyaW5nKDMpID09PSBcIjAwMDAwMFwiKVxuICAgICAgICAgICAgICAgIHogPSBcIi5cIiArIG5hbm9zU3RyLnN1YnN0cmluZygwLCAzKSArIFwiWlwiO1xuICAgICAgICAgICAgZWxzZSBpZiAobmFub3NTdHIuc3Vic3RyaW5nKDYpID09PSBcIjAwMFwiKVxuICAgICAgICAgICAgICAgIHogPSBcIi5cIiArIG5hbm9zU3RyLnN1YnN0cmluZygwLCA2KSArIFwiWlwiO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHogPSBcIi5cIiArIG5hbm9zU3RyICsgXCJaXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKG1zKS50b0lTT1N0cmluZygpLnJlcGxhY2UoXCIuMDAwWlwiLCB6KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSW4gSlNPTiBmb3JtYXQsIHRoZSBgVGltZXN0YW1wYCB0eXBlIGlzIGVuY29kZWQgYXMgYSBzdHJpbmdcbiAgICAgKiBpbiB0aGUgUkZDIDMzMzkgZm9ybWF0LlxuICAgICAqL1xuICAgIGludGVybmFsSnNvblJlYWQoanNvbiwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGlmICh0eXBlb2YganNvbiAhPT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBwYXJzZSBUaW1lc3RhbXAgZnJvbSBKU09OIFwiICsgKDAsIHJ1bnRpbWVfNS50eXBlb2ZKc29uVmFsdWUpKGpzb24pICsgXCIuXCIpO1xuICAgICAgICBsZXQgbWF0Y2hlcyA9IGpzb24ubWF0Y2goL14oWzAtOV17NH0pLShbMC05XXsyfSktKFswLTldezJ9KVQoWzAtOV17Mn0pOihbMC05XXsyfSk6KFswLTldezJ9KSg/Olp8XFwuKFswLTldezMsOX0pWnwoWystXVswLTldWzAtOV06WzAtOV1bMC05XSkpJC8pO1xuICAgICAgICBpZiAoIW1hdGNoZXMpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gcGFyc2UgVGltZXN0YW1wIGZyb20gSlNPTi4gSW52YWxpZCBmb3JtYXQuXCIpO1xuICAgICAgICBsZXQgbXMgPSBEYXRlLnBhcnNlKG1hdGNoZXNbMV0gKyBcIi1cIiArIG1hdGNoZXNbMl0gKyBcIi1cIiArIG1hdGNoZXNbM10gKyBcIlRcIiArIG1hdGNoZXNbNF0gKyBcIjpcIiArIG1hdGNoZXNbNV0gKyBcIjpcIiArIG1hdGNoZXNbNl0gKyAobWF0Y2hlc1s4XSA/IG1hdGNoZXNbOF0gOiBcIlpcIikpO1xuICAgICAgICBpZiAoTnVtYmVyLmlzTmFOKG1zKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBwYXJzZSBUaW1lc3RhbXAgZnJvbSBKU09OLiBJbnZhbGlkIHZhbHVlLlwiKTtcbiAgICAgICAgaWYgKG1zIDwgRGF0ZS5wYXJzZShcIjAwMDEtMDEtMDFUMDA6MDA6MDBaXCIpIHx8IG1zID4gRGF0ZS5wYXJzZShcIjk5OTktMTItMzFUMjM6NTk6NTlaXCIpKVxuICAgICAgICAgICAgdGhyb3cgbmV3IGdsb2JhbFRoaXMuRXJyb3IoXCJVbmFibGUgdG8gcGFyc2UgVGltZXN0YW1wIGZyb20gSlNPTi4gTXVzdCBiZSBmcm9tIDAwMDEtMDEtMDFUMDA6MDA6MDBaIHRvIDk5OTktMTItMzFUMjM6NTk6NTlaIGluY2x1c2l2ZS5cIik7XG4gICAgICAgIGlmICghdGFyZ2V0KVxuICAgICAgICAgICAgdGFyZ2V0ID0gdGhpcy5jcmVhdGUoKTtcbiAgICAgICAgdGFyZ2V0LnNlY29uZHMgPSBydW50aW1lXzYuUGJMb25nLmZyb20obXMgLyAxMDAwKS50b1N0cmluZygpO1xuICAgICAgICB0YXJnZXQubmFub3MgPSAwO1xuICAgICAgICBpZiAobWF0Y2hlc1s3XSlcbiAgICAgICAgICAgIHRhcmdldC5uYW5vcyA9IChwYXJzZUludChcIjFcIiArIG1hdGNoZXNbN10gKyBcIjBcIi5yZXBlYXQoOSAtIG1hdGNoZXNbN10ubGVuZ3RoKSkgLSAxMDAwMDAwMDAwKTtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG4gICAgY3JlYXRlKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7IHNlY29uZHM6IFwiMFwiLCBuYW5vczogMCB9O1xuICAgICAgICBnbG9iYWxUaGlzLk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZXNzYWdlLCBydW50aW1lXzQuTUVTU0FHRV9UWVBFLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdGhpcyB9KTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAoMCwgcnVudGltZV8zLnJlZmxlY3Rpb25NZXJnZVBhcnRpYWwpKHRoaXMsIG1lc3NhZ2UsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5UmVhZChyZWFkZXIsIGxlbmd0aCwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGxldCBtZXNzYWdlID0gdGFyZ2V0ICE9PSBudWxsICYmIHRhcmdldCAhPT0gdm9pZCAwID8gdGFyZ2V0IDogdGhpcy5jcmVhdGUoKSwgZW5kID0gcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgIGxldCBbZmllbGRObywgd2lyZVR5cGVdID0gcmVhZGVyLnRhZygpO1xuICAgICAgICAgICAgc3dpdGNoIChmaWVsZE5vKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBpbnQ2NCBzZWNvbmRzICovIDE6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2Vjb25kcyA9IHJlYWRlci5pbnQ2NCgpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgLyogaW50MzIgbmFub3MgKi8gMjpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5uYW5vcyA9IHJlYWRlci5pbnQzMigpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBsZXQgdSA9IG9wdGlvbnMucmVhZFVua25vd25GaWVsZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgPT09IFwidGhyb3dcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBnbG9iYWxUaGlzLkVycm9yKGBVbmtub3duIGZpZWxkICR7ZmllbGROb30gKHdpcmUgdHlwZSAke3dpcmVUeXBlfSkgZm9yICR7dGhpcy50eXBlTmFtZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGQgPSByZWFkZXIuc2tpcCh3aXJlVHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICh1ID09PSB0cnVlID8gcnVudGltZV8yLlVua25vd25GaWVsZEhhbmRsZXIub25SZWFkIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgZmllbGRObywgd2lyZVR5cGUsIGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVdyaXRlKG1lc3NhZ2UsIHdyaXRlciwgb3B0aW9ucykge1xuICAgICAgICAvKiBpbnQ2NCBzZWNvbmRzID0gMTsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2Uuc2Vjb25kcyAhPT0gXCIwXCIpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDEsIHJ1bnRpbWVfMS5XaXJlVHlwZS5WYXJpbnQpLmludDY0KG1lc3NhZ2Uuc2Vjb25kcyk7XG4gICAgICAgIC8qIGludDMyIG5hbm9zID0gMjsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2UubmFub3MgIT09IDApXG4gICAgICAgICAgICB3cml0ZXIudGFnKDIsIHJ1bnRpbWVfMS5XaXJlVHlwZS5WYXJpbnQpLmludDMyKG1lc3NhZ2UubmFub3MpO1xuICAgICAgICBsZXQgdSA9IG9wdGlvbnMud3JpdGVVbmtub3duRmllbGRzO1xuICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAodSA9PSB0cnVlID8gcnVudGltZV8yLlVua25vd25GaWVsZEhhbmRsZXIub25Xcml0ZSA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIHdyaXRlcik7XG4gICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgfVxufVxuLyoqXG4gKiBAZ2VuZXJhdGVkIE1lc3NhZ2VUeXBlIGZvciBwcm90b2J1ZiBtZXNzYWdlIGdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBcbiAqL1xuZXhwb3J0cy5UaW1lc3RhbXAgPSBuZXcgVGltZXN0YW1wJFR5cGUoKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRpbWVzdGFtcC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5CeXRlc1ZhbHVlID0gZXhwb3J0cy5TdHJpbmdWYWx1ZSA9IGV4cG9ydHMuQm9vbFZhbHVlID0gZXhwb3J0cy5VSW50MzJWYWx1ZSA9IGV4cG9ydHMuSW50MzJWYWx1ZSA9IGV4cG9ydHMuVUludDY0VmFsdWUgPSBleHBvcnRzLkludDY0VmFsdWUgPSBleHBvcnRzLkZsb2F0VmFsdWUgPSBleHBvcnRzLkRvdWJsZVZhbHVlID0gdm9pZCAwO1xuLy8gQGdlbmVyYXRlZCBieSBwcm90b2J1Zi10cyAyLjkuMSB3aXRoIHBhcmFtZXRlciBsb25nX3R5cGVfc3RyaW5nLGNsaWVudF9ub25lLGdlbmVyYXRlX2RlcGVuZGVuY2llc1xuLy8gQGdlbmVyYXRlZCBmcm9tIHByb3RvYnVmIGZpbGUgXCJnb29nbGUvcHJvdG9idWYvd3JhcHBlcnMucHJvdG9cIiAocGFja2FnZSBcImdvb2dsZS5wcm90b2J1ZlwiLCBzeW50YXggcHJvdG8zKVxuLy8gdHNsaW50OmRpc2FibGVcbi8vXG4vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXRcbi8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9cbi8vXG4vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbi8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmVcbi8vIG1ldDpcbi8vXG4vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZVxuLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lclxuLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZVxuLy8gZGlzdHJpYnV0aW9uLlxuLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0c1xuLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb21cbi8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG4vL1xuLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SU1xuLy8gXCJBUyBJU1wiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVFxuLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SXG4vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVFxuLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsXG4vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UXG4vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSxcbi8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWVxuLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFXG4vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuLy9cbi8vXG4vLyBXcmFwcGVycyBmb3IgcHJpbWl0aXZlIChub24tbWVzc2FnZSkgdHlwZXMuIFRoZXNlIHR5cGVzIGFyZSB1c2VmdWxcbi8vIGZvciBlbWJlZGRpbmcgcHJpbWl0aXZlcyBpbiB0aGUgYGdvb2dsZS5wcm90b2J1Zi5BbnlgIHR5cGUgYW5kIGZvciBwbGFjZXNcbi8vIHdoZXJlIHdlIG5lZWQgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGUgYWJzZW5jZSBvZiBhIHByaW1pdGl2ZVxuLy8gdHlwZWQgZmllbGQgYW5kIGl0cyBkZWZhdWx0IHZhbHVlLlxuLy9cbmNvbnN0IHJ1bnRpbWVfMSA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbmNvbnN0IHJ1bnRpbWVfMiA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbmNvbnN0IHJ1bnRpbWVfMyA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbmNvbnN0IHJ1bnRpbWVfNCA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbmNvbnN0IHJ1bnRpbWVfNSA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbmNvbnN0IHJ1bnRpbWVfNiA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbmNvbnN0IHJ1bnRpbWVfNyA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbi8vIEBnZW5lcmF0ZWQgbWVzc2FnZSB0eXBlIHdpdGggcmVmbGVjdGlvbiBpbmZvcm1hdGlvbiwgbWF5IHByb3ZpZGUgc3BlZWQgb3B0aW1pemVkIG1ldGhvZHNcbmNsYXNzIERvdWJsZVZhbHVlJFR5cGUgZXh0ZW5kcyBydW50aW1lXzcuTWVzc2FnZVR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcImdvb2dsZS5wcm90b2J1Zi5Eb3VibGVWYWx1ZVwiLCBbXG4gICAgICAgICAgICB7IG5vOiAxLCBuYW1lOiBcInZhbHVlXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDEgLypTY2FsYXJUeXBlLkRPVUJMRSovIH1cbiAgICAgICAgXSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEVuY29kZSBgRG91YmxlVmFsdWVgIHRvIEpTT04gbnVtYmVyLlxuICAgICAqL1xuICAgIGludGVybmFsSnNvbldyaXRlKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmSnNvbldyaXRlci5zY2FsYXIoMiwgbWVzc2FnZS52YWx1ZSwgXCJ2YWx1ZVwiLCBmYWxzZSwgdHJ1ZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlY29kZSBgRG91YmxlVmFsdWVgIGZyb20gSlNPTiBudW1iZXIuXG4gICAgICovXG4gICAgaW50ZXJuYWxKc29uUmVhZChqc29uLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgaWYgKCF0YXJnZXQpXG4gICAgICAgICAgICB0YXJnZXQgPSB0aGlzLmNyZWF0ZSgpO1xuICAgICAgICB0YXJnZXQudmFsdWUgPSB0aGlzLnJlZkpzb25SZWFkZXIuc2NhbGFyKGpzb24sIDEsIHVuZGVmaW5lZCwgXCJ2YWx1ZVwiKTtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG4gICAgY3JlYXRlKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7IHZhbHVlOiAwIH07XG4gICAgICAgIGdsb2JhbFRoaXMuT2JqZWN0LmRlZmluZVByb3BlcnR5KG1lc3NhZ2UsIHJ1bnRpbWVfNi5NRVNTQUdFX1RZUEUsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0aGlzIH0pO1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICgwLCBydW50aW1lXzUucmVmbGVjdGlvbk1lcmdlUGFydGlhbCkodGhpcywgbWVzc2FnZSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlSZWFkKHJlYWRlciwgbGVuZ3RoLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSB0YXJnZXQgIT09IG51bGwgJiYgdGFyZ2V0ICE9PSB2b2lkIDAgPyB0YXJnZXQgOiB0aGlzLmNyZWF0ZSgpLCBlbmQgPSByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgbGV0IFtmaWVsZE5vLCB3aXJlVHlwZV0gPSByZWFkZXIudGFnKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkTm8pIHtcbiAgICAgICAgICAgICAgICBjYXNlIC8qIGRvdWJsZSB2YWx1ZSAqLyAxOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnZhbHVlID0gcmVhZGVyLmRvdWJsZSgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBsZXQgdSA9IG9wdGlvbnMucmVhZFVua25vd25GaWVsZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgPT09IFwidGhyb3dcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBnbG9iYWxUaGlzLkVycm9yKGBVbmtub3duIGZpZWxkICR7ZmllbGROb30gKHdpcmUgdHlwZSAke3dpcmVUeXBlfSkgZm9yICR7dGhpcy50eXBlTmFtZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGQgPSByZWFkZXIuc2tpcCh3aXJlVHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICh1ID09PSB0cnVlID8gcnVudGltZV80LlVua25vd25GaWVsZEhhbmRsZXIub25SZWFkIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgZmllbGRObywgd2lyZVR5cGUsIGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVdyaXRlKG1lc3NhZ2UsIHdyaXRlciwgb3B0aW9ucykge1xuICAgICAgICAvKiBkb3VibGUgdmFsdWUgPSAxOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS52YWx1ZSAhPT0gMClcbiAgICAgICAgICAgIHdyaXRlci50YWcoMSwgcnVudGltZV8zLldpcmVUeXBlLkJpdDY0KS5kb3VibGUobWVzc2FnZS52YWx1ZSk7XG4gICAgICAgIGxldCB1ID0gb3B0aW9ucy53cml0ZVVua25vd25GaWVsZHM7XG4gICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICh1ID09IHRydWUgPyBydW50aW1lXzQuVW5rbm93bkZpZWxkSGFuZGxlci5vbldyaXRlIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgd3JpdGVyKTtcbiAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICB9XG59XG4vKipcbiAqIEBnZW5lcmF0ZWQgTWVzc2FnZVR5cGUgZm9yIHByb3RvYnVmIG1lc3NhZ2UgZ29vZ2xlLnByb3RvYnVmLkRvdWJsZVZhbHVlXG4gKi9cbmV4cG9ydHMuRG91YmxlVmFsdWUgPSBuZXcgRG91YmxlVmFsdWUkVHlwZSgpO1xuLy8gQGdlbmVyYXRlZCBtZXNzYWdlIHR5cGUgd2l0aCByZWZsZWN0aW9uIGluZm9ybWF0aW9uLCBtYXkgcHJvdmlkZSBzcGVlZCBvcHRpbWl6ZWQgbWV0aG9kc1xuY2xhc3MgRmxvYXRWYWx1ZSRUeXBlIGV4dGVuZHMgcnVudGltZV83Lk1lc3NhZ2VUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoXCJnb29nbGUucHJvdG9idWYuRmxvYXRWYWx1ZVwiLCBbXG4gICAgICAgICAgICB7IG5vOiAxLCBuYW1lOiBcInZhbHVlXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDIgLypTY2FsYXJUeXBlLkZMT0FUKi8gfVxuICAgICAgICBdKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRW5jb2RlIGBGbG9hdFZhbHVlYCB0byBKU09OIG51bWJlci5cbiAgICAgKi9cbiAgICBpbnRlcm5hbEpzb25Xcml0ZShtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZkpzb25Xcml0ZXIuc2NhbGFyKDEsIG1lc3NhZ2UudmFsdWUsIFwidmFsdWVcIiwgZmFsc2UsIHRydWUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWNvZGUgYEZsb2F0VmFsdWVgIGZyb20gSlNPTiBudW1iZXIuXG4gICAgICovXG4gICAgaW50ZXJuYWxKc29uUmVhZChqc29uLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgaWYgKCF0YXJnZXQpXG4gICAgICAgICAgICB0YXJnZXQgPSB0aGlzLmNyZWF0ZSgpO1xuICAgICAgICB0YXJnZXQudmFsdWUgPSB0aGlzLnJlZkpzb25SZWFkZXIuc2NhbGFyKGpzb24sIDEsIHVuZGVmaW5lZCwgXCJ2YWx1ZVwiKTtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG4gICAgY3JlYXRlKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7IHZhbHVlOiAwIH07XG4gICAgICAgIGdsb2JhbFRoaXMuT2JqZWN0LmRlZmluZVByb3BlcnR5KG1lc3NhZ2UsIHJ1bnRpbWVfNi5NRVNTQUdFX1RZUEUsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0aGlzIH0pO1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICgwLCBydW50aW1lXzUucmVmbGVjdGlvbk1lcmdlUGFydGlhbCkodGhpcywgbWVzc2FnZSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlSZWFkKHJlYWRlciwgbGVuZ3RoLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSB0YXJnZXQgIT09IG51bGwgJiYgdGFyZ2V0ICE9PSB2b2lkIDAgPyB0YXJnZXQgOiB0aGlzLmNyZWF0ZSgpLCBlbmQgPSByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgbGV0IFtmaWVsZE5vLCB3aXJlVHlwZV0gPSByZWFkZXIudGFnKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkTm8pIHtcbiAgICAgICAgICAgICAgICBjYXNlIC8qIGZsb2F0IHZhbHVlICovIDE6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudmFsdWUgPSByZWFkZXIuZmxvYXQoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBvcHRpb25zLnJlYWRVbmtub3duRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ID09PSBcInRocm93XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZ2xvYmFsVGhpcy5FcnJvcihgVW5rbm93biBmaWVsZCAke2ZpZWxkTm99ICh3aXJlIHR5cGUgJHt3aXJlVHlwZX0pIGZvciAke3RoaXMudHlwZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkID0gcmVhZGVyLnNraXAod2lyZVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAodSA9PT0gdHJ1ZSA/IHJ1bnRpbWVfNC5Vbmtub3duRmllbGRIYW5kbGVyLm9uUmVhZCA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIGZpZWxkTm8sIHdpcmVUeXBlLCBkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLCB3cml0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgLyogZmxvYXQgdmFsdWUgPSAxOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS52YWx1ZSAhPT0gMClcbiAgICAgICAgICAgIHdyaXRlci50YWcoMSwgcnVudGltZV8zLldpcmVUeXBlLkJpdDMyKS5mbG9hdChtZXNzYWdlLnZhbHVlKTtcbiAgICAgICAgbGV0IHUgPSBvcHRpb25zLndyaXRlVW5rbm93bkZpZWxkcztcbiAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgKHUgPT0gdHJ1ZSA/IHJ1bnRpbWVfNC5Vbmtub3duRmllbGRIYW5kbGVyLm9uV3JpdGUgOiB1KSh0aGlzLnR5cGVOYW1lLCBtZXNzYWdlLCB3cml0ZXIpO1xuICAgICAgICByZXR1cm4gd3JpdGVyO1xuICAgIH1cbn1cbi8qKlxuICogQGdlbmVyYXRlZCBNZXNzYWdlVHlwZSBmb3IgcHJvdG9idWYgbWVzc2FnZSBnb29nbGUucHJvdG9idWYuRmxvYXRWYWx1ZVxuICovXG5leHBvcnRzLkZsb2F0VmFsdWUgPSBuZXcgRmxvYXRWYWx1ZSRUeXBlKCk7XG4vLyBAZ2VuZXJhdGVkIG1lc3NhZ2UgdHlwZSB3aXRoIHJlZmxlY3Rpb24gaW5mb3JtYXRpb24sIG1heSBwcm92aWRlIHNwZWVkIG9wdGltaXplZCBtZXRob2RzXG5jbGFzcyBJbnQ2NFZhbHVlJFR5cGUgZXh0ZW5kcyBydW50aW1lXzcuTWVzc2FnZVR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcImdvb2dsZS5wcm90b2J1Zi5JbnQ2NFZhbHVlXCIsIFtcbiAgICAgICAgICAgIHsgbm86IDEsIG5hbWU6IFwidmFsdWVcIiwga2luZDogXCJzY2FsYXJcIiwgVDogMyAvKlNjYWxhclR5cGUuSU5UNjQqLyB9XG4gICAgICAgIF0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFbmNvZGUgYEludDY0VmFsdWVgIHRvIEpTT04gc3RyaW5nLlxuICAgICAqL1xuICAgIGludGVybmFsSnNvbldyaXRlKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmSnNvbldyaXRlci5zY2FsYXIocnVudGltZV8xLlNjYWxhclR5cGUuSU5UNjQsIG1lc3NhZ2UudmFsdWUsIFwidmFsdWVcIiwgZmFsc2UsIHRydWUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWNvZGUgYEludDY0VmFsdWVgIGZyb20gSlNPTiBzdHJpbmcuXG4gICAgICovXG4gICAgaW50ZXJuYWxKc29uUmVhZChqc29uLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgaWYgKCF0YXJnZXQpXG4gICAgICAgICAgICB0YXJnZXQgPSB0aGlzLmNyZWF0ZSgpO1xuICAgICAgICB0YXJnZXQudmFsdWUgPSB0aGlzLnJlZkpzb25SZWFkZXIuc2NhbGFyKGpzb24sIHJ1bnRpbWVfMS5TY2FsYXJUeXBlLklOVDY0LCBydW50aW1lXzIuTG9uZ1R5cGUuU1RSSU5HLCBcInZhbHVlXCIpO1xuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cbiAgICBjcmVhdGUodmFsdWUpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IHsgdmFsdWU6IFwiMFwiIH07XG4gICAgICAgIGdsb2JhbFRoaXMuT2JqZWN0LmRlZmluZVByb3BlcnR5KG1lc3NhZ2UsIHJ1bnRpbWVfNi5NRVNTQUdFX1RZUEUsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0aGlzIH0pO1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICgwLCBydW50aW1lXzUucmVmbGVjdGlvbk1lcmdlUGFydGlhbCkodGhpcywgbWVzc2FnZSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlSZWFkKHJlYWRlciwgbGVuZ3RoLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSB0YXJnZXQgIT09IG51bGwgJiYgdGFyZ2V0ICE9PSB2b2lkIDAgPyB0YXJnZXQgOiB0aGlzLmNyZWF0ZSgpLCBlbmQgPSByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgbGV0IFtmaWVsZE5vLCB3aXJlVHlwZV0gPSByZWFkZXIudGFnKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkTm8pIHtcbiAgICAgICAgICAgICAgICBjYXNlIC8qIGludDY0IHZhbHVlICovIDE6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudmFsdWUgPSByZWFkZXIuaW50NjQoKS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBsZXQgdSA9IG9wdGlvbnMucmVhZFVua25vd25GaWVsZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgPT09IFwidGhyb3dcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBnbG9iYWxUaGlzLkVycm9yKGBVbmtub3duIGZpZWxkICR7ZmllbGROb30gKHdpcmUgdHlwZSAke3dpcmVUeXBlfSkgZm9yICR7dGhpcy50eXBlTmFtZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGQgPSByZWFkZXIuc2tpcCh3aXJlVHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICh1ID09PSB0cnVlID8gcnVudGltZV80LlVua25vd25GaWVsZEhhbmRsZXIub25SZWFkIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgZmllbGRObywgd2lyZVR5cGUsIGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVdyaXRlKG1lc3NhZ2UsIHdyaXRlciwgb3B0aW9ucykge1xuICAgICAgICAvKiBpbnQ2NCB2YWx1ZSA9IDE7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLnZhbHVlICE9PSBcIjBcIilcbiAgICAgICAgICAgIHdyaXRlci50YWcoMSwgcnVudGltZV8zLldpcmVUeXBlLlZhcmludCkuaW50NjQobWVzc2FnZS52YWx1ZSk7XG4gICAgICAgIGxldCB1ID0gb3B0aW9ucy53cml0ZVVua25vd25GaWVsZHM7XG4gICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICh1ID09IHRydWUgPyBydW50aW1lXzQuVW5rbm93bkZpZWxkSGFuZGxlci5vbldyaXRlIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgd3JpdGVyKTtcbiAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICB9XG59XG4vKipcbiAqIEBnZW5lcmF0ZWQgTWVzc2FnZVR5cGUgZm9yIHByb3RvYnVmIG1lc3NhZ2UgZ29vZ2xlLnByb3RvYnVmLkludDY0VmFsdWVcbiAqL1xuZXhwb3J0cy5JbnQ2NFZhbHVlID0gbmV3IEludDY0VmFsdWUkVHlwZSgpO1xuLy8gQGdlbmVyYXRlZCBtZXNzYWdlIHR5cGUgd2l0aCByZWZsZWN0aW9uIGluZm9ybWF0aW9uLCBtYXkgcHJvdmlkZSBzcGVlZCBvcHRpbWl6ZWQgbWV0aG9kc1xuY2xhc3MgVUludDY0VmFsdWUkVHlwZSBleHRlbmRzIHJ1bnRpbWVfNy5NZXNzYWdlVHlwZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiZ29vZ2xlLnByb3RvYnVmLlVJbnQ2NFZhbHVlXCIsIFtcbiAgICAgICAgICAgIHsgbm86IDEsIG5hbWU6IFwidmFsdWVcIiwga2luZDogXCJzY2FsYXJcIiwgVDogNCAvKlNjYWxhclR5cGUuVUlOVDY0Ki8gfVxuICAgICAgICBdKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRW5jb2RlIGBVSW50NjRWYWx1ZWAgdG8gSlNPTiBzdHJpbmcuXG4gICAgICovXG4gICAgaW50ZXJuYWxKc29uV3JpdGUobWVzc2FnZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWZKc29uV3JpdGVyLnNjYWxhcihydW50aW1lXzEuU2NhbGFyVHlwZS5VSU5UNjQsIG1lc3NhZ2UudmFsdWUsIFwidmFsdWVcIiwgZmFsc2UsIHRydWUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWNvZGUgYFVJbnQ2NFZhbHVlYCBmcm9tIEpTT04gc3RyaW5nLlxuICAgICAqL1xuICAgIGludGVybmFsSnNvblJlYWQoanNvbiwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGlmICghdGFyZ2V0KVxuICAgICAgICAgICAgdGFyZ2V0ID0gdGhpcy5jcmVhdGUoKTtcbiAgICAgICAgdGFyZ2V0LnZhbHVlID0gdGhpcy5yZWZKc29uUmVhZGVyLnNjYWxhcihqc29uLCBydW50aW1lXzEuU2NhbGFyVHlwZS5VSU5UNjQsIHJ1bnRpbWVfMi5Mb25nVHlwZS5TVFJJTkcsIFwidmFsdWVcIik7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuICAgIGNyZWF0ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0geyB2YWx1ZTogXCIwXCIgfTtcbiAgICAgICAgZ2xvYmFsVGhpcy5PYmplY3QuZGVmaW5lUHJvcGVydHkobWVzc2FnZSwgcnVudGltZV82Lk1FU1NBR0VfVFlQRSwgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRoaXMgfSk7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgKDAsIHJ1bnRpbWVfNS5yZWZsZWN0aW9uTWVyZ2VQYXJ0aWFsKSh0aGlzLCBtZXNzYWdlLCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVJlYWQocmVhZGVyLCBsZW5ndGgsIG9wdGlvbnMsIHRhcmdldCkge1xuICAgICAgICBsZXQgbWVzc2FnZSA9IHRhcmdldCAhPT0gbnVsbCAmJiB0YXJnZXQgIT09IHZvaWQgMCA/IHRhcmdldCA6IHRoaXMuY3JlYXRlKCksIGVuZCA9IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICBsZXQgW2ZpZWxkTm8sIHdpcmVUeXBlXSA9IHJlYWRlci50YWcoKTtcbiAgICAgICAgICAgIHN3aXRjaCAoZmllbGRObykge1xuICAgICAgICAgICAgICAgIGNhc2UgLyogdWludDY0IHZhbHVlICovIDE6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudmFsdWUgPSByZWFkZXIudWludDY0KCkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBvcHRpb25zLnJlYWRVbmtub3duRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ID09PSBcInRocm93XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZ2xvYmFsVGhpcy5FcnJvcihgVW5rbm93biBmaWVsZCAke2ZpZWxkTm99ICh3aXJlIHR5cGUgJHt3aXJlVHlwZX0pIGZvciAke3RoaXMudHlwZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkID0gcmVhZGVyLnNraXAod2lyZVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAodSA9PT0gdHJ1ZSA/IHJ1bnRpbWVfNC5Vbmtub3duRmllbGRIYW5kbGVyLm9uUmVhZCA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIGZpZWxkTm8sIHdpcmVUeXBlLCBkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLCB3cml0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgLyogdWludDY0IHZhbHVlID0gMTsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2UudmFsdWUgIT09IFwiMFwiKVxuICAgICAgICAgICAgd3JpdGVyLnRhZygxLCBydW50aW1lXzMuV2lyZVR5cGUuVmFyaW50KS51aW50NjQobWVzc2FnZS52YWx1ZSk7XG4gICAgICAgIGxldCB1ID0gb3B0aW9ucy53cml0ZVVua25vd25GaWVsZHM7XG4gICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICh1ID09IHRydWUgPyBydW50aW1lXzQuVW5rbm93bkZpZWxkSGFuZGxlci5vbldyaXRlIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgd3JpdGVyKTtcbiAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICB9XG59XG4vKipcbiAqIEBnZW5lcmF0ZWQgTWVzc2FnZVR5cGUgZm9yIHByb3RvYnVmIG1lc3NhZ2UgZ29vZ2xlLnByb3RvYnVmLlVJbnQ2NFZhbHVlXG4gKi9cbmV4cG9ydHMuVUludDY0VmFsdWUgPSBuZXcgVUludDY0VmFsdWUkVHlwZSgpO1xuLy8gQGdlbmVyYXRlZCBtZXNzYWdlIHR5cGUgd2l0aCByZWZsZWN0aW9uIGluZm9ybWF0aW9uLCBtYXkgcHJvdmlkZSBzcGVlZCBvcHRpbWl6ZWQgbWV0aG9kc1xuY2xhc3MgSW50MzJWYWx1ZSRUeXBlIGV4dGVuZHMgcnVudGltZV83Lk1lc3NhZ2VUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoXCJnb29nbGUucHJvdG9idWYuSW50MzJWYWx1ZVwiLCBbXG4gICAgICAgICAgICB7IG5vOiAxLCBuYW1lOiBcInZhbHVlXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDUgLypTY2FsYXJUeXBlLklOVDMyKi8gfVxuICAgICAgICBdKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRW5jb2RlIGBJbnQzMlZhbHVlYCB0byBKU09OIHN0cmluZy5cbiAgICAgKi9cbiAgICBpbnRlcm5hbEpzb25Xcml0ZShtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZkpzb25Xcml0ZXIuc2NhbGFyKDUsIG1lc3NhZ2UudmFsdWUsIFwidmFsdWVcIiwgZmFsc2UsIHRydWUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWNvZGUgYEludDMyVmFsdWVgIGZyb20gSlNPTiBzdHJpbmcuXG4gICAgICovXG4gICAgaW50ZXJuYWxKc29uUmVhZChqc29uLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgaWYgKCF0YXJnZXQpXG4gICAgICAgICAgICB0YXJnZXQgPSB0aGlzLmNyZWF0ZSgpO1xuICAgICAgICB0YXJnZXQudmFsdWUgPSB0aGlzLnJlZkpzb25SZWFkZXIuc2NhbGFyKGpzb24sIDUsIHVuZGVmaW5lZCwgXCJ2YWx1ZVwiKTtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG4gICAgY3JlYXRlKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7IHZhbHVlOiAwIH07XG4gICAgICAgIGdsb2JhbFRoaXMuT2JqZWN0LmRlZmluZVByb3BlcnR5KG1lc3NhZ2UsIHJ1bnRpbWVfNi5NRVNTQUdFX1RZUEUsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0aGlzIH0pO1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICgwLCBydW50aW1lXzUucmVmbGVjdGlvbk1lcmdlUGFydGlhbCkodGhpcywgbWVzc2FnZSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlSZWFkKHJlYWRlciwgbGVuZ3RoLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSB0YXJnZXQgIT09IG51bGwgJiYgdGFyZ2V0ICE9PSB2b2lkIDAgPyB0YXJnZXQgOiB0aGlzLmNyZWF0ZSgpLCBlbmQgPSByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgbGV0IFtmaWVsZE5vLCB3aXJlVHlwZV0gPSByZWFkZXIudGFnKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkTm8pIHtcbiAgICAgICAgICAgICAgICBjYXNlIC8qIGludDMyIHZhbHVlICovIDE6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudmFsdWUgPSByZWFkZXIuaW50MzIoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBvcHRpb25zLnJlYWRVbmtub3duRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ID09PSBcInRocm93XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZ2xvYmFsVGhpcy5FcnJvcihgVW5rbm93biBmaWVsZCAke2ZpZWxkTm99ICh3aXJlIHR5cGUgJHt3aXJlVHlwZX0pIGZvciAke3RoaXMudHlwZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkID0gcmVhZGVyLnNraXAod2lyZVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAodSA9PT0gdHJ1ZSA/IHJ1bnRpbWVfNC5Vbmtub3duRmllbGRIYW5kbGVyLm9uUmVhZCA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIGZpZWxkTm8sIHdpcmVUeXBlLCBkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLCB3cml0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgLyogaW50MzIgdmFsdWUgPSAxOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS52YWx1ZSAhPT0gMClcbiAgICAgICAgICAgIHdyaXRlci50YWcoMSwgcnVudGltZV8zLldpcmVUeXBlLlZhcmludCkuaW50MzIobWVzc2FnZS52YWx1ZSk7XG4gICAgICAgIGxldCB1ID0gb3B0aW9ucy53cml0ZVVua25vd25GaWVsZHM7XG4gICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICh1ID09IHRydWUgPyBydW50aW1lXzQuVW5rbm93bkZpZWxkSGFuZGxlci5vbldyaXRlIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgd3JpdGVyKTtcbiAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICB9XG59XG4vKipcbiAqIEBnZW5lcmF0ZWQgTWVzc2FnZVR5cGUgZm9yIHByb3RvYnVmIG1lc3NhZ2UgZ29vZ2xlLnByb3RvYnVmLkludDMyVmFsdWVcbiAqL1xuZXhwb3J0cy5JbnQzMlZhbHVlID0gbmV3IEludDMyVmFsdWUkVHlwZSgpO1xuLy8gQGdlbmVyYXRlZCBtZXNzYWdlIHR5cGUgd2l0aCByZWZsZWN0aW9uIGluZm9ybWF0aW9uLCBtYXkgcHJvdmlkZSBzcGVlZCBvcHRpbWl6ZWQgbWV0aG9kc1xuY2xhc3MgVUludDMyVmFsdWUkVHlwZSBleHRlbmRzIHJ1bnRpbWVfNy5NZXNzYWdlVHlwZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiZ29vZ2xlLnByb3RvYnVmLlVJbnQzMlZhbHVlXCIsIFtcbiAgICAgICAgICAgIHsgbm86IDEsIG5hbWU6IFwidmFsdWVcIiwga2luZDogXCJzY2FsYXJcIiwgVDogMTMgLypTY2FsYXJUeXBlLlVJTlQzMiovIH1cbiAgICAgICAgXSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEVuY29kZSBgVUludDMyVmFsdWVgIHRvIEpTT04gc3RyaW5nLlxuICAgICAqL1xuICAgIGludGVybmFsSnNvbldyaXRlKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmSnNvbldyaXRlci5zY2FsYXIoMTMsIG1lc3NhZ2UudmFsdWUsIFwidmFsdWVcIiwgZmFsc2UsIHRydWUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWNvZGUgYFVJbnQzMlZhbHVlYCBmcm9tIEpTT04gc3RyaW5nLlxuICAgICAqL1xuICAgIGludGVybmFsSnNvblJlYWQoanNvbiwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGlmICghdGFyZ2V0KVxuICAgICAgICAgICAgdGFyZ2V0ID0gdGhpcy5jcmVhdGUoKTtcbiAgICAgICAgdGFyZ2V0LnZhbHVlID0gdGhpcy5yZWZKc29uUmVhZGVyLnNjYWxhcihqc29uLCAxMywgdW5kZWZpbmVkLCBcInZhbHVlXCIpO1xuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cbiAgICBjcmVhdGUodmFsdWUpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IHsgdmFsdWU6IDAgfTtcbiAgICAgICAgZ2xvYmFsVGhpcy5PYmplY3QuZGVmaW5lUHJvcGVydHkobWVzc2FnZSwgcnVudGltZV82Lk1FU1NBR0VfVFlQRSwgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRoaXMgfSk7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgKDAsIHJ1bnRpbWVfNS5yZWZsZWN0aW9uTWVyZ2VQYXJ0aWFsKSh0aGlzLCBtZXNzYWdlLCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVJlYWQocmVhZGVyLCBsZW5ndGgsIG9wdGlvbnMsIHRhcmdldCkge1xuICAgICAgICBsZXQgbWVzc2FnZSA9IHRhcmdldCAhPT0gbnVsbCAmJiB0YXJnZXQgIT09IHZvaWQgMCA/IHRhcmdldCA6IHRoaXMuY3JlYXRlKCksIGVuZCA9IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICBsZXQgW2ZpZWxkTm8sIHdpcmVUeXBlXSA9IHJlYWRlci50YWcoKTtcbiAgICAgICAgICAgIHN3aXRjaCAoZmllbGRObykge1xuICAgICAgICAgICAgICAgIGNhc2UgLyogdWludDMyIHZhbHVlICovIDE6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudmFsdWUgPSByZWFkZXIudWludDMyKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGxldCB1ID0gb3B0aW9ucy5yZWFkVW5rbm93bkZpZWxkO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSA9PT0gXCJ0aHJvd1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGdsb2JhbFRoaXMuRXJyb3IoYFVua25vd24gZmllbGQgJHtmaWVsZE5vfSAod2lyZSB0eXBlICR7d2lyZVR5cGV9KSBmb3IgJHt0aGlzLnR5cGVOYW1lfWApO1xuICAgICAgICAgICAgICAgICAgICBsZXQgZCA9IHJlYWRlci5za2lwKHdpcmVUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgKHUgPT09IHRydWUgPyBydW50aW1lXzQuVW5rbm93bkZpZWxkSGFuZGxlci5vblJlYWQgOiB1KSh0aGlzLnR5cGVOYW1lLCBtZXNzYWdlLCBmaWVsZE5vLCB3aXJlVHlwZSwgZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5V3JpdGUobWVzc2FnZSwgd3JpdGVyLCBvcHRpb25zKSB7XG4gICAgICAgIC8qIHVpbnQzMiB2YWx1ZSA9IDE7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLnZhbHVlICE9PSAwKVxuICAgICAgICAgICAgd3JpdGVyLnRhZygxLCBydW50aW1lXzMuV2lyZVR5cGUuVmFyaW50KS51aW50MzIobWVzc2FnZS52YWx1ZSk7XG4gICAgICAgIGxldCB1ID0gb3B0aW9ucy53cml0ZVVua25vd25GaWVsZHM7XG4gICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICh1ID09IHRydWUgPyBydW50aW1lXzQuVW5rbm93bkZpZWxkSGFuZGxlci5vbldyaXRlIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgd3JpdGVyKTtcbiAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICB9XG59XG4vKipcbiAqIEBnZW5lcmF0ZWQgTWVzc2FnZVR5cGUgZm9yIHByb3RvYnVmIG1lc3NhZ2UgZ29vZ2xlLnByb3RvYnVmLlVJbnQzMlZhbHVlXG4gKi9cbmV4cG9ydHMuVUludDMyVmFsdWUgPSBuZXcgVUludDMyVmFsdWUkVHlwZSgpO1xuLy8gQGdlbmVyYXRlZCBtZXNzYWdlIHR5cGUgd2l0aCByZWZsZWN0aW9uIGluZm9ybWF0aW9uLCBtYXkgcHJvdmlkZSBzcGVlZCBvcHRpbWl6ZWQgbWV0aG9kc1xuY2xhc3MgQm9vbFZhbHVlJFR5cGUgZXh0ZW5kcyBydW50aW1lXzcuTWVzc2FnZVR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcImdvb2dsZS5wcm90b2J1Zi5Cb29sVmFsdWVcIiwgW1xuICAgICAgICAgICAgeyBubzogMSwgbmFtZTogXCJ2YWx1ZVwiLCBraW5kOiBcInNjYWxhclwiLCBUOiA4IC8qU2NhbGFyVHlwZS5CT09MKi8gfVxuICAgICAgICBdKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRW5jb2RlIGBCb29sVmFsdWVgIHRvIEpTT04gYm9vbC5cbiAgICAgKi9cbiAgICBpbnRlcm5hbEpzb25Xcml0ZShtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBtZXNzYWdlLnZhbHVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWNvZGUgYEJvb2xWYWx1ZWAgZnJvbSBKU09OIGJvb2wuXG4gICAgICovXG4gICAgaW50ZXJuYWxKc29uUmVhZChqc29uLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgaWYgKCF0YXJnZXQpXG4gICAgICAgICAgICB0YXJnZXQgPSB0aGlzLmNyZWF0ZSgpO1xuICAgICAgICB0YXJnZXQudmFsdWUgPSB0aGlzLnJlZkpzb25SZWFkZXIuc2NhbGFyKGpzb24sIDgsIHVuZGVmaW5lZCwgXCJ2YWx1ZVwiKTtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG4gICAgY3JlYXRlKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7IHZhbHVlOiBmYWxzZSB9O1xuICAgICAgICBnbG9iYWxUaGlzLk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZXNzYWdlLCBydW50aW1lXzYuTUVTU0FHRV9UWVBFLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdGhpcyB9KTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAoMCwgcnVudGltZV81LnJlZmxlY3Rpb25NZXJnZVBhcnRpYWwpKHRoaXMsIG1lc3NhZ2UsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5UmVhZChyZWFkZXIsIGxlbmd0aCwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGxldCBtZXNzYWdlID0gdGFyZ2V0ICE9PSBudWxsICYmIHRhcmdldCAhPT0gdm9pZCAwID8gdGFyZ2V0IDogdGhpcy5jcmVhdGUoKSwgZW5kID0gcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgIGxldCBbZmllbGRObywgd2lyZVR5cGVdID0gcmVhZGVyLnRhZygpO1xuICAgICAgICAgICAgc3dpdGNoIChmaWVsZE5vKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBib29sIHZhbHVlICovIDE6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudmFsdWUgPSByZWFkZXIuYm9vbCgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBsZXQgdSA9IG9wdGlvbnMucmVhZFVua25vd25GaWVsZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgPT09IFwidGhyb3dcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBnbG9iYWxUaGlzLkVycm9yKGBVbmtub3duIGZpZWxkICR7ZmllbGROb30gKHdpcmUgdHlwZSAke3dpcmVUeXBlfSkgZm9yICR7dGhpcy50eXBlTmFtZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGQgPSByZWFkZXIuc2tpcCh3aXJlVHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICh1ID09PSB0cnVlID8gcnVudGltZV80LlVua25vd25GaWVsZEhhbmRsZXIub25SZWFkIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgZmllbGRObywgd2lyZVR5cGUsIGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVdyaXRlKG1lc3NhZ2UsIHdyaXRlciwgb3B0aW9ucykge1xuICAgICAgICAvKiBib29sIHZhbHVlID0gMTsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2UudmFsdWUgIT09IGZhbHNlKVxuICAgICAgICAgICAgd3JpdGVyLnRhZygxLCBydW50aW1lXzMuV2lyZVR5cGUuVmFyaW50KS5ib29sKG1lc3NhZ2UudmFsdWUpO1xuICAgICAgICBsZXQgdSA9IG9wdGlvbnMud3JpdGVVbmtub3duRmllbGRzO1xuICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAodSA9PSB0cnVlID8gcnVudGltZV80LlVua25vd25GaWVsZEhhbmRsZXIub25Xcml0ZSA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIHdyaXRlcik7XG4gICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgfVxufVxuLyoqXG4gKiBAZ2VuZXJhdGVkIE1lc3NhZ2VUeXBlIGZvciBwcm90b2J1ZiBtZXNzYWdlIGdvb2dsZS5wcm90b2J1Zi5Cb29sVmFsdWVcbiAqL1xuZXhwb3J0cy5Cb29sVmFsdWUgPSBuZXcgQm9vbFZhbHVlJFR5cGUoKTtcbi8vIEBnZW5lcmF0ZWQgbWVzc2FnZSB0eXBlIHdpdGggcmVmbGVjdGlvbiBpbmZvcm1hdGlvbiwgbWF5IHByb3ZpZGUgc3BlZWQgb3B0aW1pemVkIG1ldGhvZHNcbmNsYXNzIFN0cmluZ1ZhbHVlJFR5cGUgZXh0ZW5kcyBydW50aW1lXzcuTWVzc2FnZVR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcImdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZVwiLCBbXG4gICAgICAgICAgICB7IG5vOiAxLCBuYW1lOiBcInZhbHVlXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDkgLypTY2FsYXJUeXBlLlNUUklORyovIH1cbiAgICAgICAgXSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEVuY29kZSBgU3RyaW5nVmFsdWVgIHRvIEpTT04gc3RyaW5nLlxuICAgICAqL1xuICAgIGludGVybmFsSnNvbldyaXRlKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2UudmFsdWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlY29kZSBgU3RyaW5nVmFsdWVgIGZyb20gSlNPTiBzdHJpbmcuXG4gICAgICovXG4gICAgaW50ZXJuYWxKc29uUmVhZChqc29uLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgaWYgKCF0YXJnZXQpXG4gICAgICAgICAgICB0YXJnZXQgPSB0aGlzLmNyZWF0ZSgpO1xuICAgICAgICB0YXJnZXQudmFsdWUgPSB0aGlzLnJlZkpzb25SZWFkZXIuc2NhbGFyKGpzb24sIDksIHVuZGVmaW5lZCwgXCJ2YWx1ZVwiKTtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG4gICAgY3JlYXRlKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7IHZhbHVlOiBcIlwiIH07XG4gICAgICAgIGdsb2JhbFRoaXMuT2JqZWN0LmRlZmluZVByb3BlcnR5KG1lc3NhZ2UsIHJ1bnRpbWVfNi5NRVNTQUdFX1RZUEUsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0aGlzIH0pO1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICgwLCBydW50aW1lXzUucmVmbGVjdGlvbk1lcmdlUGFydGlhbCkodGhpcywgbWVzc2FnZSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlSZWFkKHJlYWRlciwgbGVuZ3RoLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSB0YXJnZXQgIT09IG51bGwgJiYgdGFyZ2V0ICE9PSB2b2lkIDAgPyB0YXJnZXQgOiB0aGlzLmNyZWF0ZSgpLCBlbmQgPSByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgbGV0IFtmaWVsZE5vLCB3aXJlVHlwZV0gPSByZWFkZXIudGFnKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkTm8pIHtcbiAgICAgICAgICAgICAgICBjYXNlIC8qIHN0cmluZyB2YWx1ZSAqLyAxOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnZhbHVlID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBsZXQgdSA9IG9wdGlvbnMucmVhZFVua25vd25GaWVsZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgPT09IFwidGhyb3dcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBnbG9iYWxUaGlzLkVycm9yKGBVbmtub3duIGZpZWxkICR7ZmllbGROb30gKHdpcmUgdHlwZSAke3dpcmVUeXBlfSkgZm9yICR7dGhpcy50eXBlTmFtZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGQgPSByZWFkZXIuc2tpcCh3aXJlVHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICh1ID09PSB0cnVlID8gcnVudGltZV80LlVua25vd25GaWVsZEhhbmRsZXIub25SZWFkIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgZmllbGRObywgd2lyZVR5cGUsIGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVdyaXRlKG1lc3NhZ2UsIHdyaXRlciwgb3B0aW9ucykge1xuICAgICAgICAvKiBzdHJpbmcgdmFsdWUgPSAxOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS52YWx1ZSAhPT0gXCJcIilcbiAgICAgICAgICAgIHdyaXRlci50YWcoMSwgcnVudGltZV8zLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCkuc3RyaW5nKG1lc3NhZ2UudmFsdWUpO1xuICAgICAgICBsZXQgdSA9IG9wdGlvbnMud3JpdGVVbmtub3duRmllbGRzO1xuICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAodSA9PSB0cnVlID8gcnVudGltZV80LlVua25vd25GaWVsZEhhbmRsZXIub25Xcml0ZSA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIHdyaXRlcik7XG4gICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgfVxufVxuLyoqXG4gKiBAZ2VuZXJhdGVkIE1lc3NhZ2VUeXBlIGZvciBwcm90b2J1ZiBtZXNzYWdlIGdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZVxuICovXG5leHBvcnRzLlN0cmluZ1ZhbHVlID0gbmV3IFN0cmluZ1ZhbHVlJFR5cGUoKTtcbi8vIEBnZW5lcmF0ZWQgbWVzc2FnZSB0eXBlIHdpdGggcmVmbGVjdGlvbiBpbmZvcm1hdGlvbiwgbWF5IHByb3ZpZGUgc3BlZWQgb3B0aW1pemVkIG1ldGhvZHNcbmNsYXNzIEJ5dGVzVmFsdWUkVHlwZSBleHRlbmRzIHJ1bnRpbWVfNy5NZXNzYWdlVHlwZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiZ29vZ2xlLnByb3RvYnVmLkJ5dGVzVmFsdWVcIiwgW1xuICAgICAgICAgICAgeyBubzogMSwgbmFtZTogXCJ2YWx1ZVwiLCBraW5kOiBcInNjYWxhclwiLCBUOiAxMiAvKlNjYWxhclR5cGUuQllURVMqLyB9XG4gICAgICAgIF0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFbmNvZGUgYEJ5dGVzVmFsdWVgIHRvIEpTT04gc3RyaW5nLlxuICAgICAqL1xuICAgIGludGVybmFsSnNvbldyaXRlKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmSnNvbldyaXRlci5zY2FsYXIoMTIsIG1lc3NhZ2UudmFsdWUsIFwidmFsdWVcIiwgZmFsc2UsIHRydWUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWNvZGUgYEJ5dGVzVmFsdWVgIGZyb20gSlNPTiBzdHJpbmcuXG4gICAgICovXG4gICAgaW50ZXJuYWxKc29uUmVhZChqc29uLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgaWYgKCF0YXJnZXQpXG4gICAgICAgICAgICB0YXJnZXQgPSB0aGlzLmNyZWF0ZSgpO1xuICAgICAgICB0YXJnZXQudmFsdWUgPSB0aGlzLnJlZkpzb25SZWFkZXIuc2NhbGFyKGpzb24sIDEyLCB1bmRlZmluZWQsIFwidmFsdWVcIik7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuICAgIGNyZWF0ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0geyB2YWx1ZTogbmV3IFVpbnQ4QXJyYXkoMCkgfTtcbiAgICAgICAgZ2xvYmFsVGhpcy5PYmplY3QuZGVmaW5lUHJvcGVydHkobWVzc2FnZSwgcnVudGltZV82Lk1FU1NBR0VfVFlQRSwgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRoaXMgfSk7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgKDAsIHJ1bnRpbWVfNS5yZWZsZWN0aW9uTWVyZ2VQYXJ0aWFsKSh0aGlzLCBtZXNzYWdlLCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVJlYWQocmVhZGVyLCBsZW5ndGgsIG9wdGlvbnMsIHRhcmdldCkge1xuICAgICAgICBsZXQgbWVzc2FnZSA9IHRhcmdldCAhPT0gbnVsbCAmJiB0YXJnZXQgIT09IHZvaWQgMCA/IHRhcmdldCA6IHRoaXMuY3JlYXRlKCksIGVuZCA9IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICBsZXQgW2ZpZWxkTm8sIHdpcmVUeXBlXSA9IHJlYWRlci50YWcoKTtcbiAgICAgICAgICAgIHN3aXRjaCAoZmllbGRObykge1xuICAgICAgICAgICAgICAgIGNhc2UgLyogYnl0ZXMgdmFsdWUgKi8gMTpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS52YWx1ZSA9IHJlYWRlci5ieXRlcygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBsZXQgdSA9IG9wdGlvbnMucmVhZFVua25vd25GaWVsZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgPT09IFwidGhyb3dcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBnbG9iYWxUaGlzLkVycm9yKGBVbmtub3duIGZpZWxkICR7ZmllbGROb30gKHdpcmUgdHlwZSAke3dpcmVUeXBlfSkgZm9yICR7dGhpcy50eXBlTmFtZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGQgPSByZWFkZXIuc2tpcCh3aXJlVHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICh1ID09PSB0cnVlID8gcnVudGltZV80LlVua25vd25GaWVsZEhhbmRsZXIub25SZWFkIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgZmllbGRObywgd2lyZVR5cGUsIGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVdyaXRlKG1lc3NhZ2UsIHdyaXRlciwgb3B0aW9ucykge1xuICAgICAgICAvKiBieXRlcyB2YWx1ZSA9IDE7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLnZhbHVlLmxlbmd0aClcbiAgICAgICAgICAgIHdyaXRlci50YWcoMSwgcnVudGltZV8zLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCkuYnl0ZXMobWVzc2FnZS52YWx1ZSk7XG4gICAgICAgIGxldCB1ID0gb3B0aW9ucy53cml0ZVVua25vd25GaWVsZHM7XG4gICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICh1ID09IHRydWUgPyBydW50aW1lXzQuVW5rbm93bkZpZWxkSGFuZGxlci5vbldyaXRlIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgd3JpdGVyKTtcbiAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICB9XG59XG4vKipcbiAqIEBnZW5lcmF0ZWQgTWVzc2FnZVR5cGUgZm9yIHByb3RvYnVmIG1lc3NhZ2UgZ29vZ2xlLnByb3RvYnVmLkJ5dGVzVmFsdWVcbiAqL1xuZXhwb3J0cy5CeXRlc1ZhbHVlID0gbmV3IEJ5dGVzVmFsdWUkVHlwZSgpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9d3JhcHBlcnMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVhZFNlcnZpY2VPcHRpb24gPSBleHBvcnRzLnJlYWRNZXRob2RPcHRpb24gPSBleHBvcnRzLnJlYWRNZXRob2RPcHRpb25zID0gZXhwb3J0cy5ub3JtYWxpemVNZXRob2RJbmZvID0gdm9pZCAwO1xuY29uc3QgcnVudGltZV8xID0gcmVxdWlyZShcIkBwcm90b2J1Zi10cy9ydW50aW1lXCIpO1xuLyoqXG4gKiBUdXJucyBQYXJ0aWFsTWV0aG9kSW5mbyBpbnRvIE1ldGhvZEluZm8uXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZU1ldGhvZEluZm8obWV0aG9kLCBzZXJ2aWNlKSB7XG4gICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgbGV0IG0gPSBtZXRob2Q7XG4gICAgbS5zZXJ2aWNlID0gc2VydmljZTtcbiAgICBtLmxvY2FsTmFtZSA9IChfYSA9IG0ubG9jYWxOYW1lKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBydW50aW1lXzEubG93ZXJDYW1lbENhc2UobS5uYW1lKTtcbiAgICAvLyBub2luc3BlY3Rpb24gUG9pbnRsZXNzQm9vbGVhbkV4cHJlc3Npb25KU1xuICAgIG0uc2VydmVyU3RyZWFtaW5nID0gISFtLnNlcnZlclN0cmVhbWluZztcbiAgICAvLyBub2luc3BlY3Rpb24gUG9pbnRsZXNzQm9vbGVhbkV4cHJlc3Npb25KU1xuICAgIG0uY2xpZW50U3RyZWFtaW5nID0gISFtLmNsaWVudFN0cmVhbWluZztcbiAgICBtLm9wdGlvbnMgPSAoX2IgPSBtLm9wdGlvbnMpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IHt9O1xuICAgIG0uaWRlbXBvdGVuY3kgPSAoX2MgPSBtLmlkZW1wb3RlbmN5KSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIG07XG59XG5leHBvcnRzLm5vcm1hbGl6ZU1ldGhvZEluZm8gPSBub3JtYWxpemVNZXRob2RJbmZvO1xuLyoqXG4gKiBSZWFkIGN1c3RvbSBtZXRob2Qgb3B0aW9ucyBmcm9tIGEgZ2VuZXJhdGVkIHNlcnZpY2UgY2xpZW50LlxuICpcbiAqIEBkZXByZWNhdGVkIHVzZSByZWFkTWV0aG9kT3B0aW9uKClcbiAqL1xuZnVuY3Rpb24gcmVhZE1ldGhvZE9wdGlvbnMoc2VydmljZSwgbWV0aG9kTmFtZSwgZXh0ZW5zaW9uTmFtZSwgZXh0ZW5zaW9uVHlwZSkge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCBvcHRpb25zID0gKF9hID0gc2VydmljZS5tZXRob2RzLmZpbmQoKG0sIGkpID0+IG0ubG9jYWxOYW1lID09PSBtZXRob2ROYW1lIHx8IGkgPT09IG1ldGhvZE5hbWUpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub3B0aW9ucztcbiAgICByZXR1cm4gb3B0aW9ucyAmJiBvcHRpb25zW2V4dGVuc2lvbk5hbWVdID8gZXh0ZW5zaW9uVHlwZS5mcm9tSnNvbihvcHRpb25zW2V4dGVuc2lvbk5hbWVdKSA6IHVuZGVmaW5lZDtcbn1cbmV4cG9ydHMucmVhZE1ldGhvZE9wdGlvbnMgPSByZWFkTWV0aG9kT3B0aW9ucztcbmZ1bmN0aW9uIHJlYWRNZXRob2RPcHRpb24oc2VydmljZSwgbWV0aG9kTmFtZSwgZXh0ZW5zaW9uTmFtZSwgZXh0ZW5zaW9uVHlwZSkge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCBvcHRpb25zID0gKF9hID0gc2VydmljZS5tZXRob2RzLmZpbmQoKG0sIGkpID0+IG0ubG9jYWxOYW1lID09PSBtZXRob2ROYW1lIHx8IGkgPT09IG1ldGhvZE5hbWUpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub3B0aW9ucztcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3Qgb3B0aW9uVmFsID0gb3B0aW9uc1tleHRlbnNpb25OYW1lXTtcbiAgICBpZiAob3B0aW9uVmFsID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvblZhbDtcbiAgICB9XG4gICAgcmV0dXJuIGV4dGVuc2lvblR5cGUgPyBleHRlbnNpb25UeXBlLmZyb21Kc29uKG9wdGlvblZhbCkgOiBvcHRpb25WYWw7XG59XG5leHBvcnRzLnJlYWRNZXRob2RPcHRpb24gPSByZWFkTWV0aG9kT3B0aW9uO1xuZnVuY3Rpb24gcmVhZFNlcnZpY2VPcHRpb24oc2VydmljZSwgZXh0ZW5zaW9uTmFtZSwgZXh0ZW5zaW9uVHlwZSkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBzZXJ2aWNlLm9wdGlvbnM7XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IG9wdGlvblZhbCA9IG9wdGlvbnNbZXh0ZW5zaW9uTmFtZV07XG4gICAgaWYgKG9wdGlvblZhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBvcHRpb25WYWw7XG4gICAgfVxuICAgIHJldHVybiBleHRlbnNpb25UeXBlID8gZXh0ZW5zaW9uVHlwZS5mcm9tSnNvbihvcHRpb25WYWwpIDogb3B0aW9uVmFsO1xufVxuZXhwb3J0cy5yZWFkU2VydmljZU9wdGlvbiA9IHJlYWRTZXJ2aWNlT3B0aW9uO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU2VydmljZVR5cGUgPSB2b2lkIDA7XG5jb25zdCByZWZsZWN0aW9uX2luZm9fMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24taW5mb1wiKTtcbmNsYXNzIFNlcnZpY2VUeXBlIHtcbiAgICBjb25zdHJ1Y3Rvcih0eXBlTmFtZSwgbWV0aG9kcywgb3B0aW9ucykge1xuICAgICAgICB0aGlzLnR5cGVOYW1lID0gdHlwZU5hbWU7XG4gICAgICAgIHRoaXMubWV0aG9kcyA9IG1ldGhvZHMubWFwKGkgPT4gcmVmbGVjdGlvbl9pbmZvXzEubm9ybWFsaXplTWV0aG9kSW5mbyhpLCB0aGlzKSk7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwID8gb3B0aW9ucyA6IHt9O1xuICAgIH1cbn1cbmV4cG9ydHMuU2VydmljZVR5cGUgPSBTZXJ2aWNlVHlwZTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlJwY0Vycm9yID0gdm9pZCAwO1xuLyoqXG4gKiBBbiBlcnJvciB0aGF0IG9jY3VycmVkIHdoaWxlIGNhbGxpbmcgYSBSUEMgbWV0aG9kLlxuICovXG5jbGFzcyBScGNFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlLCBjb2RlID0gJ1VOS05PV04nLCBtZXRhKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLm5hbWUgPSAnUnBjRXJyb3InO1xuICAgICAgICAvLyBzZWUgaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svcmVsZWFzZS1ub3Rlcy90eXBlc2NyaXB0LTItMi5odG1sI2V4YW1wbGVcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIG5ldy50YXJnZXQucHJvdG90eXBlKTtcbiAgICAgICAgdGhpcy5jb2RlID0gY29kZTtcbiAgICAgICAgdGhpcy5tZXRhID0gbWV0YSAhPT0gbnVsbCAmJiBtZXRhICE9PSB2b2lkIDAgPyBtZXRhIDoge307XG4gICAgfVxuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICBjb25zdCBsID0gW3RoaXMubmFtZSArICc6ICcgKyB0aGlzLm1lc3NhZ2VdO1xuICAgICAgICBpZiAodGhpcy5jb2RlKSB7XG4gICAgICAgICAgICBsLnB1c2goJycpO1xuICAgICAgICAgICAgbC5wdXNoKCdDb2RlOiAnICsgdGhpcy5jb2RlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zZXJ2aWNlTmFtZSAmJiB0aGlzLm1ldGhvZE5hbWUpIHtcbiAgICAgICAgICAgIGwucHVzaCgnTWV0aG9kOiAnICsgdGhpcy5zZXJ2aWNlTmFtZSArICcvJyArIHRoaXMubWV0aG9kTmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG0gPSBPYmplY3QuZW50cmllcyh0aGlzLm1ldGEpO1xuICAgICAgICBpZiAobS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGwucHVzaCgnJyk7XG4gICAgICAgICAgICBsLnB1c2goJ01ldGE6Jyk7XG4gICAgICAgICAgICBmb3IgKGxldCBbaywgdl0gb2YgbSkge1xuICAgICAgICAgICAgICAgIGwucHVzaChgICAke2t9OiAke3Z9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGwuam9pbignXFxuJyk7XG4gICAgfVxufVxuZXhwb3J0cy5ScGNFcnJvciA9IFJwY0Vycm9yO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubWVyZ2VScGNPcHRpb25zID0gdm9pZCAwO1xuY29uc3QgcnVudGltZV8xID0gcmVxdWlyZShcIkBwcm90b2J1Zi10cy9ydW50aW1lXCIpO1xuLyoqXG4gKiBNZXJnZXMgY3VzdG9tIFJQQyBvcHRpb25zIHdpdGggZGVmYXVsdHMuIFJldHVybnMgYSBuZXcgaW5zdGFuY2UgYW5kIGtlZXBzXG4gKiB0aGUgXCJkZWZhdWx0c1wiIGFuZCB0aGUgXCJvcHRpb25zXCIgdW5tb2RpZmllZC5cbiAqXG4gKiBNZXJnZXMgYFJwY01ldGFkYXRhYCBcIm1ldGFcIiwgb3ZlcndyaXRpbmcgdmFsdWVzIGZyb20gXCJkZWZhdWx0c1wiIHdpdGhcbiAqIHZhbHVlcyBmcm9tIFwib3B0aW9uc1wiLiBEb2VzIG5vdCBhcHBlbmQgdmFsdWVzIHRvIGV4aXN0aW5nIGVudHJpZXMuXG4gKlxuICogTWVyZ2VzIFwianNvbk9wdGlvbnNcIiwgaW5jbHVkaW5nIFwianNvbk9wdGlvbnMudHlwZVJlZ2lzdHJ5XCIsIGJ5IGNyZWF0aW5nXG4gKiBhIG5ldyBhcnJheSB0aGF0IGNvbnRhaW5zIHR5cGVzIGZyb20gXCJvcHRpb25zLmpzb25PcHRpb25zLnR5cGVSZWdpc3RyeVwiXG4gKiBmaXJzdCwgdGhlbiB0eXBlcyBmcm9tIFwiZGVmYXVsdHMuanNvbk9wdGlvbnMudHlwZVJlZ2lzdHJ5XCIuXG4gKlxuICogTWVyZ2VzIFwiYmluYXJ5T3B0aW9uc1wiLlxuICpcbiAqIE1lcmdlcyBcImludGVyY2VwdG9yc1wiIGJ5IGNyZWF0aW5nIGEgbmV3IGFycmF5IHRoYXQgY29udGFpbnMgaW50ZXJjZXB0b3JzXG4gKiBmcm9tIFwiZGVmYXVsdHNcIiBmaXJzdCwgdGhlbiBpbnRlcmNlcHRvcnMgZnJvbSBcIm9wdGlvbnNcIi5cbiAqXG4gKiBXb3JrcyB3aXRoIG9iamVjdHMgdGhhdCBleHRlbmQgYFJwY09wdGlvbnNgLCBidXQgb25seSBpZiB0aGUgYWRkZWRcbiAqIHByb3BlcnRpZXMgYXJlIG9mIHR5cGUgRGF0ZSwgcHJpbWl0aXZlIGxpa2Ugc3RyaW5nLCBib29sZWFuLCBvciBBcnJheVxuICogb2YgcHJpbWl0aXZlcy4gSWYgeW91IGhhdmUgb3RoZXIgcHJvcGVydHkgdHlwZXMsIHlvdSBoYXZlIHRvIG1lcmdlIHRoZW1cbiAqIHlvdXJzZWxmLlxuICovXG5mdW5jdGlvbiBtZXJnZVJwY09wdGlvbnMoZGVmYXVsdHMsIG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMpXG4gICAgICAgIHJldHVybiBkZWZhdWx0cztcbiAgICBsZXQgbyA9IHt9O1xuICAgIGNvcHkoZGVmYXVsdHMsIG8pO1xuICAgIGNvcHkob3B0aW9ucywgbyk7XG4gICAgZm9yIChsZXQga2V5IG9mIE9iamVjdC5rZXlzKG9wdGlvbnMpKSB7XG4gICAgICAgIGxldCB2YWwgPSBvcHRpb25zW2tleV07XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlIFwianNvbk9wdGlvbnNcIjpcbiAgICAgICAgICAgICAgICBvLmpzb25PcHRpb25zID0gcnVudGltZV8xLm1lcmdlSnNvbk9wdGlvbnMoZGVmYXVsdHMuanNvbk9wdGlvbnMsIG8uanNvbk9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImJpbmFyeU9wdGlvbnNcIjpcbiAgICAgICAgICAgICAgICBvLmJpbmFyeU9wdGlvbnMgPSBydW50aW1lXzEubWVyZ2VCaW5hcnlPcHRpb25zKGRlZmF1bHRzLmJpbmFyeU9wdGlvbnMsIG8uYmluYXJ5T3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWV0YVwiOlxuICAgICAgICAgICAgICAgIG8ubWV0YSA9IHt9O1xuICAgICAgICAgICAgICAgIGNvcHkoZGVmYXVsdHMubWV0YSwgby5tZXRhKTtcbiAgICAgICAgICAgICAgICBjb3B5KG9wdGlvbnMubWV0YSwgby5tZXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJpbnRlcmNlcHRvcnNcIjpcbiAgICAgICAgICAgICAgICBvLmludGVyY2VwdG9ycyA9IGRlZmF1bHRzLmludGVyY2VwdG9ycyA/IGRlZmF1bHRzLmludGVyY2VwdG9ycy5jb25jYXQodmFsKSA6IHZhbC5jb25jYXQoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbztcbn1cbmV4cG9ydHMubWVyZ2VScGNPcHRpb25zID0gbWVyZ2VScGNPcHRpb25zO1xuZnVuY3Rpb24gY29weShhLCBpbnRvKSB7XG4gICAgaWYgKCFhKVxuICAgICAgICByZXR1cm47XG4gICAgbGV0IGMgPSBpbnRvO1xuICAgIGZvciAobGV0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhhKSkge1xuICAgICAgICBpZiAodiBpbnN0YW5jZW9mIERhdGUpXG4gICAgICAgICAgICBjW2tdID0gbmV3IERhdGUodi5nZXRUaW1lKCkpO1xuICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHYpKVxuICAgICAgICAgICAgY1trXSA9IHYuY29uY2F0KCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIGNba10gPSB2O1xuICAgIH1cbn1cbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkRlZmVycmVkID0gZXhwb3J0cy5EZWZlcnJlZFN0YXRlID0gdm9pZCAwO1xudmFyIERlZmVycmVkU3RhdGU7XG4oZnVuY3Rpb24gKERlZmVycmVkU3RhdGUpIHtcbiAgICBEZWZlcnJlZFN0YXRlW0RlZmVycmVkU3RhdGVbXCJQRU5ESU5HXCJdID0gMF0gPSBcIlBFTkRJTkdcIjtcbiAgICBEZWZlcnJlZFN0YXRlW0RlZmVycmVkU3RhdGVbXCJSRUpFQ1RFRFwiXSA9IDFdID0gXCJSRUpFQ1RFRFwiO1xuICAgIERlZmVycmVkU3RhdGVbRGVmZXJyZWRTdGF0ZVtcIlJFU09MVkVEXCJdID0gMl0gPSBcIlJFU09MVkVEXCI7XG59KShEZWZlcnJlZFN0YXRlID0gZXhwb3J0cy5EZWZlcnJlZFN0YXRlIHx8IChleHBvcnRzLkRlZmVycmVkU3RhdGUgPSB7fSkpO1xuLyoqXG4gKiBBIGRlZmVycmVkIHByb21pc2UuIFRoaXMgaXMgYSBcImNvbnRyb2xsZXJcIiBmb3IgYSBwcm9taXNlLCB3aGljaCBsZXRzIHlvdVxuICogcGFzcyBhIHByb21pc2UgYXJvdW5kIGFuZCByZWplY3Qgb3IgcmVzb2x2ZSBpdCBmcm9tIHRoZSBvdXRzaWRlLlxuICpcbiAqIFdhcm5pbmc6IFRoaXMgY2xhc3MgaXMgdG8gYmUgdXNlZCB3aXRoIGNhcmUuIFVzaW5nIGl0IGNhbiBtYWtlIGNvZGUgdmVyeVxuICogZGlmZmljdWx0IHRvIHJlYWQuIEl0IGlzIGludGVuZGVkIGZvciB1c2UgaW4gbGlicmFyeSBjb2RlIHRoYXQgZXhwb3Nlc1xuICogcHJvbWlzZXMsIG5vdCBmb3IgcmVndWxhciBidXNpbmVzcyBsb2dpYy5cbiAqL1xuY2xhc3MgRGVmZXJyZWQge1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSBwcmV2ZW50VW5oYW5kbGVkUmVqZWN0aW9uV2FybmluZyAtIHByZXZlbnRzIHRoZSB3YXJuaW5nXG4gICAgICogXCJVbmhhbmRsZWQgUHJvbWlzZSByZWplY3Rpb25cIiBieSBhZGRpbmcgYSBub29wIHJlamVjdGlvbiBoYW5kbGVyLlxuICAgICAqIFdvcmtpbmcgd2l0aCBjYWxscyByZXR1cm5lZCBmcm9tIHRoZSBydW50aW1lLXJwYyBwYWNrYWdlIGluIGFuXG4gICAgICogYXN5bmMgZnVuY3Rpb24gdXN1YWxseSBtZWFucyBhd2FpdGluZyBvbmUgY2FsbCBwcm9wZXJ0eSBhZnRlclxuICAgICAqIHRoZSBvdGhlci4gVGhpcyBtZWFucyB0aGF0IHRoZSBcInN0YXR1c1wiIGlzIG5vdCBiZWluZyBhd2FpdGVkIHdoZW5cbiAgICAgKiBhbiBlYXJsaWVyIGF3YWl0IGZvciB0aGUgXCJoZWFkZXJzXCIgaXMgcmVqZWN0ZWQuIFRoaXMgY2F1c2VzIHRoZVxuICAgICAqIFwidW5oYW5kbGVkIHByb21pc2UgcmVqZWN0XCIgd2FybmluZy4gQSBtb3JlIGNvcnJlY3QgYmVoYXZpb3VyIGZvclxuICAgICAqIGNhbGxzIG1pZ2h0IGJlIHRvIGJlY29tZSBhd2FyZSB3aGV0aGVyIGF0IGxlYXN0IG9uZSBvZiB0aGVcbiAgICAgKiBwcm9taXNlcyBpcyBoYW5kbGVkIGFuZCBzd2FsbG93IHRoZSByZWplY3Rpb24gd2FybmluZyBmb3IgdGhlXG4gICAgICogb3RoZXJzLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHByZXZlbnRVbmhhbmRsZWRSZWplY3Rpb25XYXJuaW5nID0gdHJ1ZSkge1xuICAgICAgICB0aGlzLl9zdGF0ZSA9IERlZmVycmVkU3RhdGUuUEVORElORztcbiAgICAgICAgdGhpcy5fcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgICAgICAgICAgdGhpcy5fcmVqZWN0ID0gcmVqZWN0O1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHByZXZlbnRVbmhhbmRsZWRSZWplY3Rpb25XYXJuaW5nKSB7XG4gICAgICAgICAgICB0aGlzLl9wcm9taXNlLmNhdGNoKF8gPT4geyB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHByb21pc2UuXG4gICAgICovXG4gICAgZ2V0IHN0YXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgZGVmZXJyZWQgcHJvbWlzZS5cbiAgICAgKi9cbiAgICBnZXQgcHJvbWlzZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb21pc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlc29sdmUgdGhlIHByb21pc2UuIFRocm93cyBpZiB0aGUgcHJvbWlzZSBpcyBhbHJlYWR5IHJlc29sdmVkIG9yIHJlamVjdGVkLlxuICAgICAqL1xuICAgIHJlc29sdmUodmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgIT09IERlZmVycmVkU3RhdGUuUEVORElORylcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgY2Fubm90IHJlc29sdmUgJHtEZWZlcnJlZFN0YXRlW3RoaXMuc3RhdGVdLnRvTG93ZXJDYXNlKCl9YCk7XG4gICAgICAgIHRoaXMuX3Jlc29sdmUodmFsdWUpO1xuICAgICAgICB0aGlzLl9zdGF0ZSA9IERlZmVycmVkU3RhdGUuUkVTT0xWRUQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlamVjdCB0aGUgcHJvbWlzZS4gVGhyb3dzIGlmIHRoZSBwcm9taXNlIGlzIGFscmVhZHkgcmVzb2x2ZWQgb3IgcmVqZWN0ZWQuXG4gICAgICovXG4gICAgcmVqZWN0KHJlYXNvbikge1xuICAgICAgICBpZiAodGhpcy5zdGF0ZSAhPT0gRGVmZXJyZWRTdGF0ZS5QRU5ESU5HKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBjYW5ub3QgcmVqZWN0ICR7RGVmZXJyZWRTdGF0ZVt0aGlzLnN0YXRlXS50b0xvd2VyQ2FzZSgpfWApO1xuICAgICAgICB0aGlzLl9yZWplY3QocmVhc29uKTtcbiAgICAgICAgdGhpcy5fc3RhdGUgPSBEZWZlcnJlZFN0YXRlLlJFSkVDVEVEO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXNvbHZlIHRoZSBwcm9taXNlLiBJZ25vcmUgaWYgbm90IHBlbmRpbmcuXG4gICAgICovXG4gICAgcmVzb2x2ZVBlbmRpbmcodmFsKSB7XG4gICAgICAgIGlmICh0aGlzLl9zdGF0ZSA9PT0gRGVmZXJyZWRTdGF0ZS5QRU5ESU5HKVxuICAgICAgICAgICAgdGhpcy5yZXNvbHZlKHZhbCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlamVjdCB0aGUgcHJvbWlzZS4gSWdub3JlIGlmIG5vdCBwZW5kaW5nLlxuICAgICAqL1xuICAgIHJlamVjdFBlbmRpbmcocmVhc29uKSB7XG4gICAgICAgIGlmICh0aGlzLl9zdGF0ZSA9PT0gRGVmZXJyZWRTdGF0ZS5QRU5ESU5HKVxuICAgICAgICAgICAgdGhpcy5yZWplY3QocmVhc29uKTtcbiAgICB9XG59XG5leHBvcnRzLkRlZmVycmVkID0gRGVmZXJyZWQ7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5ScGNPdXRwdXRTdHJlYW1Db250cm9sbGVyID0gdm9pZCAwO1xuY29uc3QgZGVmZXJyZWRfMSA9IHJlcXVpcmUoXCIuL2RlZmVycmVkXCIpO1xuY29uc3QgcnVudGltZV8xID0gcmVxdWlyZShcIkBwcm90b2J1Zi10cy9ydW50aW1lXCIpO1xuLyoqXG4gKiBBIGBScGNPdXRwdXRTdHJlYW1gIHRoYXQgeW91IGNvbnRyb2wuXG4gKi9cbmNsYXNzIFJwY091dHB1dFN0cmVhbUNvbnRyb2xsZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLl9saXMgPSB7XG4gICAgICAgICAgICBueHQ6IFtdLFxuICAgICAgICAgICAgbXNnOiBbXSxcbiAgICAgICAgICAgIGVycjogW10sXG4gICAgICAgICAgICBjbXA6IFtdLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLl9jbG9zZWQgPSBmYWxzZTtcbiAgICB9XG4gICAgLy8gLS0tIFJwY091dHB1dFN0cmVhbSBjYWxsYmFjayBBUElcbiAgICBvbk5leHQoY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkTGlzKGNhbGxiYWNrLCB0aGlzLl9saXMubnh0KTtcbiAgICB9XG4gICAgb25NZXNzYWdlKGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZExpcyhjYWxsYmFjaywgdGhpcy5fbGlzLm1zZyk7XG4gICAgfVxuICAgIG9uRXJyb3IoY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkTGlzKGNhbGxiYWNrLCB0aGlzLl9saXMuZXJyKTtcbiAgICB9XG4gICAgb25Db21wbGV0ZShjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRMaXMoY2FsbGJhY2ssIHRoaXMuX2xpcy5jbXApO1xuICAgIH1cbiAgICBhZGRMaXMoY2FsbGJhY2ssIGxpc3QpIHtcbiAgICAgICAgbGlzdC5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGxldCBpID0gbGlzdC5pbmRleE9mKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIGlmIChpID49IDApXG4gICAgICAgICAgICAgICAgbGlzdC5zcGxpY2UoaSwgMSk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8vIHJlbW92ZSBhbGwgbGlzdGVuZXJzXG4gICAgY2xlYXJMaXMoKSB7XG4gICAgICAgIGZvciAobGV0IGwgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLl9saXMpKVxuICAgICAgICAgICAgbC5zcGxpY2UoMCwgbC5sZW5ndGgpO1xuICAgIH1cbiAgICAvLyAtLS0gQ29udHJvbGxlciBBUElcbiAgICAvKipcbiAgICAgKiBJcyB0aGlzIHN0cmVhbSBhbHJlYWR5IGNsb3NlZCBieSBhIGNvbXBsZXRpb24gb3IgZXJyb3I/XG4gICAgICovXG4gICAgZ2V0IGNsb3NlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Nsb3NlZCAhPT0gZmFsc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEVtaXQgbWVzc2FnZSwgY2xvc2Ugd2l0aCBlcnJvciwgb3IgY2xvc2Ugc3VjY2Vzc2Z1bGx5LCBidXQgb25seSBvbmVcbiAgICAgKiBhdCBhIHRpbWUuXG4gICAgICogQ2FuIGJlIHVzZWQgdG8gd3JhcCBhIHN0cmVhbSBieSB1c2luZyB0aGUgb3RoZXIgc3RyZWFtJ3MgYG9uTmV4dGAuXG4gICAgICovXG4gICAgbm90aWZ5TmV4dChtZXNzYWdlLCBlcnJvciwgY29tcGxldGUpIHtcbiAgICAgICAgcnVudGltZV8xLmFzc2VydCgobWVzc2FnZSA/IDEgOiAwKSArIChlcnJvciA/IDEgOiAwKSArIChjb21wbGV0ZSA/IDEgOiAwKSA8PSAxLCAnb25seSBvbmUgZW1pc3Npb24gYXQgYSB0aW1lJyk7XG4gICAgICAgIGlmIChtZXNzYWdlKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnlNZXNzYWdlKG1lc3NhZ2UpO1xuICAgICAgICBpZiAoZXJyb3IpXG4gICAgICAgICAgICB0aGlzLm5vdGlmeUVycm9yKGVycm9yKTtcbiAgICAgICAgaWYgKGNvbXBsZXRlKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnlDb21wbGV0ZSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFbWl0cyBhIG5ldyBtZXNzYWdlLiBUaHJvd3MgaWYgc3RyZWFtIGlzIGNsb3NlZC5cbiAgICAgKlxuICAgICAqIFRyaWdnZXJzIG9uTmV4dCBhbmQgb25NZXNzYWdlIGNhbGxiYWNrcy5cbiAgICAgKi9cbiAgICBub3RpZnlNZXNzYWdlKG1lc3NhZ2UpIHtcbiAgICAgICAgcnVudGltZV8xLmFzc2VydCghdGhpcy5jbG9zZWQsICdzdHJlYW0gaXMgY2xvc2VkJyk7XG4gICAgICAgIHRoaXMucHVzaEl0KHsgdmFsdWU6IG1lc3NhZ2UsIGRvbmU6IGZhbHNlIH0pO1xuICAgICAgICB0aGlzLl9saXMubXNnLmZvckVhY2gobCA9PiBsKG1lc3NhZ2UpKTtcbiAgICAgICAgdGhpcy5fbGlzLm54dC5mb3JFYWNoKGwgPT4gbChtZXNzYWdlLCB1bmRlZmluZWQsIGZhbHNlKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENsb3NlcyB0aGUgc3RyZWFtIHdpdGggYW4gZXJyb3IuIFRocm93cyBpZiBzdHJlYW0gaXMgY2xvc2VkLlxuICAgICAqXG4gICAgICogVHJpZ2dlcnMgb25OZXh0IGFuZCBvbkVycm9yIGNhbGxiYWNrcy5cbiAgICAgKi9cbiAgICBub3RpZnlFcnJvcihlcnJvcikge1xuICAgICAgICBydW50aW1lXzEuYXNzZXJ0KCF0aGlzLmNsb3NlZCwgJ3N0cmVhbSBpcyBjbG9zZWQnKTtcbiAgICAgICAgdGhpcy5fY2xvc2VkID0gZXJyb3I7XG4gICAgICAgIHRoaXMucHVzaEl0KGVycm9yKTtcbiAgICAgICAgdGhpcy5fbGlzLmVyci5mb3JFYWNoKGwgPT4gbChlcnJvcikpO1xuICAgICAgICB0aGlzLl9saXMubnh0LmZvckVhY2gobCA9PiBsKHVuZGVmaW5lZCwgZXJyb3IsIGZhbHNlKSk7XG4gICAgICAgIHRoaXMuY2xlYXJMaXMoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2xvc2VzIHRoZSBzdHJlYW0gc3VjY2Vzc2Z1bGx5LiBUaHJvd3MgaWYgc3RyZWFtIGlzIGNsb3NlZC5cbiAgICAgKlxuICAgICAqIFRyaWdnZXJzIG9uTmV4dCBhbmQgb25Db21wbGV0ZSBjYWxsYmFja3MuXG4gICAgICovXG4gICAgbm90aWZ5Q29tcGxldGUoKSB7XG4gICAgICAgIHJ1bnRpbWVfMS5hc3NlcnQoIXRoaXMuY2xvc2VkLCAnc3RyZWFtIGlzIGNsb3NlZCcpO1xuICAgICAgICB0aGlzLl9jbG9zZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnB1c2hJdCh7IHZhbHVlOiBudWxsLCBkb25lOiB0cnVlIH0pO1xuICAgICAgICB0aGlzLl9saXMuY21wLmZvckVhY2gobCA9PiBsKCkpO1xuICAgICAgICB0aGlzLl9saXMubnh0LmZvckVhY2gobCA9PiBsKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB0cnVlKSk7XG4gICAgICAgIHRoaXMuY2xlYXJMaXMoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhc3luYyBpdGVyYXRvciAodGhhdCBjYW4gYmUgdXNlZCB3aXRoIGBmb3IgYXdhaXQgey4uLn1gKVxuICAgICAqIHRvIGNvbnN1bWUgdGhlIHN0cmVhbS5cbiAgICAgKlxuICAgICAqIFNvbWUgdGhpbmdzIHRvIG5vdGU6XG4gICAgICogLSBJZiBhbiBlcnJvciBvY2N1cnMsIHRoZSBgZm9yIGF3YWl0YCB3aWxsIHRocm93IGl0LlxuICAgICAqIC0gSWYgYW4gZXJyb3Igb2NjdXJyZWQgYmVmb3JlIHRoZSBgZm9yIGF3YWl0YCB3YXMgc3RhcnRlZCwgYGZvciBhd2FpdGBcbiAgICAgKiAgIHdpbGwgcmUtdGhyb3cgaXQuXG4gICAgICogLSBJZiB0aGUgc3RyZWFtIGlzIGFscmVhZHkgY29tcGxldGUsIHRoZSBgZm9yIGF3YWl0YCB3aWxsIGJlIGVtcHR5LlxuICAgICAqIC0gSWYgeW91ciBgZm9yIGF3YWl0YCBjb25zdW1lcyBzbG93ZXIgdGhhbiB0aGUgc3RyZWFtIHByb2R1Y2VzLFxuICAgICAqICAgZm9yIGV4YW1wbGUgYmVjYXVzZSB5b3UgYXJlIHJlbGF5aW5nIG1lc3NhZ2VzIGluIGEgc2xvdyBvcGVyYXRpb24sXG4gICAgICogICBtZXNzYWdlcyBhcmUgcXVldWVkLlxuICAgICAqL1xuICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSB7XG4gICAgICAgIC8vIGluaXQgdGhlIGl0ZXJhdG9yIHN0YXRlLCBlbmFibGluZyBwdXNoSXQoKVxuICAgICAgICBpZiAoIXRoaXMuX2l0U3RhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuX2l0U3RhdGUgPSB7IHE6IFtdIH07XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgd2UgYXJlIGNsb3NlZCwgd2UgYXJlIGRlZmluaXRlbHkgbm90IHJlY2VpdmluZyBhbnkgbW9yZSBtZXNzYWdlcy5cbiAgICAgICAgLy8gYnV0IHdlIGNhbid0IGxldCB0aGUgaXRlcmF0b3IgZ2V0IHN0dWNrLiB3ZSB3YW50IHRvIGVpdGhlcjpcbiAgICAgICAgLy8gYSkgZmluaXNoIHRoZSBuZXcgaXRlcmF0b3IgaW1tZWRpYXRlbHksIGJlY2F1c2Ugd2UgYXJlIGNvbXBsZXRlZFxuICAgICAgICAvLyBiKSByZWplY3QgdGhlIG5ldyBpdGVyYXRvciwgYmVjYXVzZSB3ZSBlcnJvcmVkXG4gICAgICAgIGlmICh0aGlzLl9jbG9zZWQgPT09IHRydWUpXG4gICAgICAgICAgICB0aGlzLnB1c2hJdCh7IHZhbHVlOiBudWxsLCBkb25lOiB0cnVlIH0pO1xuICAgICAgICBlbHNlIGlmICh0aGlzLl9jbG9zZWQgIT09IGZhbHNlKVxuICAgICAgICAgICAgdGhpcy5wdXNoSXQodGhpcy5fY2xvc2VkKTtcbiAgICAgICAgLy8gdGhlIGFzeW5jIGl0ZXJhdG9yXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IHN0YXRlID0gdGhpcy5faXRTdGF0ZTtcbiAgICAgICAgICAgICAgICBydW50aW1lXzEuYXNzZXJ0KHN0YXRlLCBcImJhZCBzdGF0ZVwiKTsgLy8gaWYgd2UgZG9uJ3QgaGF2ZSBhIHN0YXRlIGhlcmUsIGNvZGUgaXMgYnJva2VuXG4gICAgICAgICAgICAgICAgLy8gdGhlcmUgc2hvdWxkIGJlIG5vIHBlbmRpbmcgcmVzdWx0LlxuICAgICAgICAgICAgICAgIC8vIGRpZCB0aGUgY29uc3VtZXIgY2FsbCBuZXh0KCkgYmVmb3JlIHdlIHJlc29sdmVkIG91ciBwcmV2aW91cyByZXN1bHQgcHJvbWlzZT9cbiAgICAgICAgICAgICAgICBydW50aW1lXzEuYXNzZXJ0KCFzdGF0ZS5wLCBcIml0ZXJhdG9yIGNvbnRyYWN0IGJyb2tlblwiKTtcbiAgICAgICAgICAgICAgICAvLyBkaWQgd2UgcHJvZHVjZSBmYXN0ZXIgdGhhbiB0aGUgaXRlcmF0b3IgY29uc3VtZWQ/XG4gICAgICAgICAgICAgICAgLy8gcmV0dXJuIHRoZSBvbGRlc3QgcmVzdWx0IGZyb20gdGhlIHF1ZXVlLlxuICAgICAgICAgICAgICAgIGxldCBmaXJzdCA9IHN0YXRlLnEuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICBpZiAoZmlyc3QpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoXCJ2YWx1ZVwiIGluIGZpcnN0KSA/IFByb21pc2UucmVzb2x2ZShmaXJzdCkgOiBQcm9taXNlLnJlamVjdChmaXJzdCk7XG4gICAgICAgICAgICAgICAgLy8gd2UgaGF2ZSBubyByZXN1bHQgQVRNLCBidXQgd2UgcHJvbWlzZSBvbmUuXG4gICAgICAgICAgICAgICAgLy8gYXMgc29vbiBhcyB3ZSBoYXZlIGEgcmVzdWx0LCB3ZSBtdXN0IHJlc29sdmUgcHJvbWlzZS5cbiAgICAgICAgICAgICAgICBzdGF0ZS5wID0gbmV3IGRlZmVycmVkXzEuRGVmZXJyZWQoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGUucC5wcm9taXNlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLy8gXCJwdXNoXCIgYSBuZXcgaXRlcmF0b3IgcmVzdWx0LlxuICAgIC8vIHRoaXMgZWl0aGVyIHJlc29sdmVzIGEgcGVuZGluZyBwcm9taXNlLCBvciBlbnF1ZXVlcyB0aGUgcmVzdWx0LlxuICAgIHB1c2hJdChyZXN1bHQpIHtcbiAgICAgICAgbGV0IHN0YXRlID0gdGhpcy5faXRTdGF0ZTtcbiAgICAgICAgaWYgKCFzdGF0ZSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgLy8gaXMgdGhlIGNvbnN1bWVyIHdhaXRpbmcgZm9yIHVzP1xuICAgICAgICBpZiAoc3RhdGUucCkge1xuICAgICAgICAgICAgLy8geWVzLCBjb25zdW1lciBpcyB3YWl0aW5nIGZvciB0aGlzIHByb21pc2UuXG4gICAgICAgICAgICBjb25zdCBwID0gc3RhdGUucDtcbiAgICAgICAgICAgIHJ1bnRpbWVfMS5hc3NlcnQocC5zdGF0ZSA9PSBkZWZlcnJlZF8xLkRlZmVycmVkU3RhdGUuUEVORElORywgXCJpdGVyYXRvciBjb250cmFjdCBicm9rZW5cIik7XG4gICAgICAgICAgICAvLyByZXNvbHZlIHRoZSBwcm9taXNlXG4gICAgICAgICAgICAoXCJ2YWx1ZVwiIGluIHJlc3VsdCkgPyBwLnJlc29sdmUocmVzdWx0KSA6IHAucmVqZWN0KHJlc3VsdCk7XG4gICAgICAgICAgICAvLyBtdXN0IGNsZWFudXAsIG90aGVyd2lzZSBpdGVyYXRvci5uZXh0KCkgd291bGQgcGljayBpdCB1cCBhZ2Fpbi5cbiAgICAgICAgICAgIGRlbGV0ZSBzdGF0ZS5wO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gd2UgYXJlIHByb2R1Y2luZyBmYXN0ZXIgdGhhbiB0aGUgaXRlcmF0b3IgY29uc3VtZXMuXG4gICAgICAgICAgICAvLyBwdXNoIHJlc3VsdCBvbnRvIHF1ZXVlLlxuICAgICAgICAgICAgc3RhdGUucS5wdXNoKHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLlJwY091dHB1dFN0cmVhbUNvbnRyb2xsZXIgPSBScGNPdXRwdXRTdHJlYW1Db250cm9sbGVyO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5VbmFyeUNhbGwgPSB2b2lkIDA7XG4vKipcbiAqIEEgdW5hcnkgUlBDIGNhbGwuIFVuYXJ5IG1lYW5zIHRoZXJlIGlzIGV4YWN0bHkgb25lIGlucHV0IG1lc3NhZ2UgYW5kXG4gKiBleGFjdGx5IG9uZSBvdXRwdXQgbWVzc2FnZSB1bmxlc3MgYW4gZXJyb3Igb2NjdXJyZWQuXG4gKi9cbmNsYXNzIFVuYXJ5Q2FsbCB7XG4gICAgY29uc3RydWN0b3IobWV0aG9kLCByZXF1ZXN0SGVhZGVycywgcmVxdWVzdCwgaGVhZGVycywgcmVzcG9uc2UsIHN0YXR1cywgdHJhaWxlcnMpIHtcbiAgICAgICAgdGhpcy5tZXRob2QgPSBtZXRob2Q7XG4gICAgICAgIHRoaXMucmVxdWVzdEhlYWRlcnMgPSByZXF1ZXN0SGVhZGVycztcbiAgICAgICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICAgICAgdGhpcy5oZWFkZXJzID0gaGVhZGVycztcbiAgICAgICAgdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnN0YXR1cyA9IHN0YXR1cztcbiAgICAgICAgdGhpcy50cmFpbGVycyA9IHRyYWlsZXJzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJZiB5b3UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiB0aGUgZmluYWwgb3V0Y29tZSBvZiB0aGlzIGNhbGwsXG4gICAgICogeW91IGNhbiBhd2FpdCBpdCB0byByZWNlaXZlIGEgYEZpbmlzaGVkVW5hcnlDYWxsYC5cbiAgICAgKi9cbiAgICB0aGVuKG9uZnVsZmlsbGVkLCBvbnJlamVjdGVkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb21pc2VGaW5pc2hlZCgpLnRoZW4odmFsdWUgPT4gb25mdWxmaWxsZWQgPyBQcm9taXNlLnJlc29sdmUob25mdWxmaWxsZWQodmFsdWUpKSA6IHZhbHVlLCByZWFzb24gPT4gb25yZWplY3RlZCA/IFByb21pc2UucmVzb2x2ZShvbnJlamVjdGVkKHJlYXNvbikpIDogUHJvbWlzZS5yZWplY3QocmVhc29uKSk7XG4gICAgfVxuICAgIHByb21pc2VGaW5pc2hlZCgpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGxldCBbaGVhZGVycywgcmVzcG9uc2UsIHN0YXR1cywgdHJhaWxlcnNdID0geWllbGQgUHJvbWlzZS5hbGwoW3RoaXMuaGVhZGVycywgdGhpcy5yZXNwb25zZSwgdGhpcy5zdGF0dXMsIHRoaXMudHJhaWxlcnNdKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiB0aGlzLm1ldGhvZCxcbiAgICAgICAgICAgICAgICByZXF1ZXN0SGVhZGVyczogdGhpcy5yZXF1ZXN0SGVhZGVycyxcbiAgICAgICAgICAgICAgICByZXF1ZXN0OiB0aGlzLnJlcXVlc3QsXG4gICAgICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICAgICAgICByZXNwb25zZSxcbiAgICAgICAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgICAgICAgdHJhaWxlcnNcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuVW5hcnlDYWxsID0gVW5hcnlDYWxsO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TZXJ2ZXJTdHJlYW1pbmdDYWxsID0gdm9pZCAwO1xuLyoqXG4gKiBBIHNlcnZlciBzdHJlYW1pbmcgUlBDIGNhbGwuIFRoZSBjbGllbnQgcHJvdmlkZXMgZXhhY3RseSBvbmUgaW5wdXQgbWVzc2FnZVxuICogYnV0IHRoZSBzZXJ2ZXIgbWF5IHJlc3BvbmQgd2l0aCAwLCAxLCBvciBtb3JlIG1lc3NhZ2VzLlxuICovXG5jbGFzcyBTZXJ2ZXJTdHJlYW1pbmdDYWxsIHtcbiAgICBjb25zdHJ1Y3RvcihtZXRob2QsIHJlcXVlc3RIZWFkZXJzLCByZXF1ZXN0LCBoZWFkZXJzLCByZXNwb25zZSwgc3RhdHVzLCB0cmFpbGVycykge1xuICAgICAgICB0aGlzLm1ldGhvZCA9IG1ldGhvZDtcbiAgICAgICAgdGhpcy5yZXF1ZXN0SGVhZGVycyA9IHJlcXVlc3RIZWFkZXJzO1xuICAgICAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgICAgICB0aGlzLmhlYWRlcnMgPSBoZWFkZXJzO1xuICAgICAgICB0aGlzLnJlc3BvbnNlcyA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnN0YXR1cyA9IHN0YXR1cztcbiAgICAgICAgdGhpcy50cmFpbGVycyA9IHRyYWlsZXJzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbnN0ZWFkIG9mIGF3YWl0aW5nIHRoZSByZXNwb25zZSBzdGF0dXMgYW5kIHRyYWlsZXJzLCB5b3UgY2FuXG4gICAgICoganVzdCBhcyB3ZWxsIGF3YWl0IHRoaXMgY2FsbCBpdHNlbGYgdG8gcmVjZWl2ZSB0aGUgc2VydmVyIG91dGNvbWUuXG4gICAgICogWW91IHNob3VsZCBmaXJzdCBzZXR1cCBzb21lIGxpc3RlbmVycyB0byB0aGUgYHJlcXVlc3RgIHRvXG4gICAgICogc2VlIHRoZSBhY3R1YWwgbWVzc2FnZXMgdGhlIHNlcnZlciByZXBsaWVkIHdpdGguXG4gICAgICovXG4gICAgdGhlbihvbmZ1bGZpbGxlZCwgb25yZWplY3RlZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9taXNlRmluaXNoZWQoKS50aGVuKHZhbHVlID0+IG9uZnVsZmlsbGVkID8gUHJvbWlzZS5yZXNvbHZlKG9uZnVsZmlsbGVkKHZhbHVlKSkgOiB2YWx1ZSwgcmVhc29uID0+IG9ucmVqZWN0ZWQgPyBQcm9taXNlLnJlc29sdmUob25yZWplY3RlZChyZWFzb24pKSA6IFByb21pc2UucmVqZWN0KHJlYXNvbikpO1xuICAgIH1cbiAgICBwcm9taXNlRmluaXNoZWQoKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBsZXQgW2hlYWRlcnMsIHN0YXR1cywgdHJhaWxlcnNdID0geWllbGQgUHJvbWlzZS5hbGwoW3RoaXMuaGVhZGVycywgdGhpcy5zdGF0dXMsIHRoaXMudHJhaWxlcnNdKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiB0aGlzLm1ldGhvZCxcbiAgICAgICAgICAgICAgICByZXF1ZXN0SGVhZGVyczogdGhpcy5yZXF1ZXN0SGVhZGVycyxcbiAgICAgICAgICAgICAgICByZXF1ZXN0OiB0aGlzLnJlcXVlc3QsXG4gICAgICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgICAgICAgdHJhaWxlcnMsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnRzLlNlcnZlclN0cmVhbWluZ0NhbGwgPSBTZXJ2ZXJTdHJlYW1pbmdDYWxsO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5DbGllbnRTdHJlYW1pbmdDYWxsID0gdm9pZCAwO1xuLyoqXG4gKiBBIGNsaWVudCBzdHJlYW1pbmcgUlBDIGNhbGwuIFRoaXMgbWVhbnMgdGhhdCB0aGUgY2xpZW50cyBzZW5kcyAwLCAxLCBvclxuICogbW9yZSBtZXNzYWdlcyB0byB0aGUgc2VydmVyLCBhbmQgdGhlIHNlcnZlciByZXBsaWVzIHdpdGggZXhhY3RseSBvbmVcbiAqIG1lc3NhZ2UuXG4gKi9cbmNsYXNzIENsaWVudFN0cmVhbWluZ0NhbGwge1xuICAgIGNvbnN0cnVjdG9yKG1ldGhvZCwgcmVxdWVzdEhlYWRlcnMsIHJlcXVlc3QsIGhlYWRlcnMsIHJlc3BvbnNlLCBzdGF0dXMsIHRyYWlsZXJzKSB7XG4gICAgICAgIHRoaXMubWV0aG9kID0gbWV0aG9kO1xuICAgICAgICB0aGlzLnJlcXVlc3RIZWFkZXJzID0gcmVxdWVzdEhlYWRlcnM7XG4gICAgICAgIHRoaXMucmVxdWVzdHMgPSByZXF1ZXN0O1xuICAgICAgICB0aGlzLmhlYWRlcnMgPSBoZWFkZXJzO1xuICAgICAgICB0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzO1xuICAgICAgICB0aGlzLnRyYWlsZXJzID0gdHJhaWxlcnM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEluc3RlYWQgb2YgYXdhaXRpbmcgdGhlIHJlc3BvbnNlIHN0YXR1cyBhbmQgdHJhaWxlcnMsIHlvdSBjYW5cbiAgICAgKiBqdXN0IGFzIHdlbGwgYXdhaXQgdGhpcyBjYWxsIGl0c2VsZiB0byByZWNlaXZlIHRoZSBzZXJ2ZXIgb3V0Y29tZS5cbiAgICAgKiBOb3RlIHRoYXQgaXQgbWF5IHN0aWxsIGJlIHZhbGlkIHRvIHNlbmQgbW9yZSByZXF1ZXN0IG1lc3NhZ2VzLlxuICAgICAqL1xuICAgIHRoZW4ob25mdWxmaWxsZWQsIG9ucmVqZWN0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvbWlzZUZpbmlzaGVkKCkudGhlbih2YWx1ZSA9PiBvbmZ1bGZpbGxlZCA/IFByb21pc2UucmVzb2x2ZShvbmZ1bGZpbGxlZCh2YWx1ZSkpIDogdmFsdWUsIHJlYXNvbiA9PiBvbnJlamVjdGVkID8gUHJvbWlzZS5yZXNvbHZlKG9ucmVqZWN0ZWQocmVhc29uKSkgOiBQcm9taXNlLnJlamVjdChyZWFzb24pKTtcbiAgICB9XG4gICAgcHJvbWlzZUZpbmlzaGVkKCkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgbGV0IFtoZWFkZXJzLCByZXNwb25zZSwgc3RhdHVzLCB0cmFpbGVyc10gPSB5aWVsZCBQcm9taXNlLmFsbChbdGhpcy5oZWFkZXJzLCB0aGlzLnJlc3BvbnNlLCB0aGlzLnN0YXR1cywgdGhpcy50cmFpbGVyc10pO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6IHRoaXMubWV0aG9kLFxuICAgICAgICAgICAgICAgIHJlcXVlc3RIZWFkZXJzOiB0aGlzLnJlcXVlc3RIZWFkZXJzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgICAgICAgIHRyYWlsZXJzXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnRzLkNsaWVudFN0cmVhbWluZ0NhbGwgPSBDbGllbnRTdHJlYW1pbmdDYWxsO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5EdXBsZXhTdHJlYW1pbmdDYWxsID0gdm9pZCAwO1xuLyoqXG4gKiBBIGR1cGxleCBzdHJlYW1pbmcgUlBDIGNhbGwuIFRoaXMgbWVhbnMgdGhhdCB0aGUgY2xpZW50cyBzZW5kcyBhblxuICogYXJiaXRyYXJ5IGFtb3VudCBvZiBtZXNzYWdlcyB0byB0aGUgc2VydmVyLCB3aGlsZSBhdCB0aGUgc2FtZSB0aW1lLFxuICogdGhlIHNlcnZlciBzZW5kcyBhbiBhcmJpdHJhcnkgYW1vdW50IG9mIG1lc3NhZ2VzIHRvIHRoZSBjbGllbnQuXG4gKi9cbmNsYXNzIER1cGxleFN0cmVhbWluZ0NhbGwge1xuICAgIGNvbnN0cnVjdG9yKG1ldGhvZCwgcmVxdWVzdEhlYWRlcnMsIHJlcXVlc3QsIGhlYWRlcnMsIHJlc3BvbnNlLCBzdGF0dXMsIHRyYWlsZXJzKSB7XG4gICAgICAgIHRoaXMubWV0aG9kID0gbWV0aG9kO1xuICAgICAgICB0aGlzLnJlcXVlc3RIZWFkZXJzID0gcmVxdWVzdEhlYWRlcnM7XG4gICAgICAgIHRoaXMucmVxdWVzdHMgPSByZXF1ZXN0O1xuICAgICAgICB0aGlzLmhlYWRlcnMgPSBoZWFkZXJzO1xuICAgICAgICB0aGlzLnJlc3BvbnNlcyA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnN0YXR1cyA9IHN0YXR1cztcbiAgICAgICAgdGhpcy50cmFpbGVycyA9IHRyYWlsZXJzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbnN0ZWFkIG9mIGF3YWl0aW5nIHRoZSByZXNwb25zZSBzdGF0dXMgYW5kIHRyYWlsZXJzLCB5b3UgY2FuXG4gICAgICoganVzdCBhcyB3ZWxsIGF3YWl0IHRoaXMgY2FsbCBpdHNlbGYgdG8gcmVjZWl2ZSB0aGUgc2VydmVyIG91dGNvbWUuXG4gICAgICogTm90ZSB0aGF0IGl0IG1heSBzdGlsbCBiZSB2YWxpZCB0byBzZW5kIG1vcmUgcmVxdWVzdCBtZXNzYWdlcy5cbiAgICAgKi9cbiAgICB0aGVuKG9uZnVsZmlsbGVkLCBvbnJlamVjdGVkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb21pc2VGaW5pc2hlZCgpLnRoZW4odmFsdWUgPT4gb25mdWxmaWxsZWQgPyBQcm9taXNlLnJlc29sdmUob25mdWxmaWxsZWQodmFsdWUpKSA6IHZhbHVlLCByZWFzb24gPT4gb25yZWplY3RlZCA/IFByb21pc2UucmVzb2x2ZShvbnJlamVjdGVkKHJlYXNvbikpIDogUHJvbWlzZS5yZWplY3QocmVhc29uKSk7XG4gICAgfVxuICAgIHByb21pc2VGaW5pc2hlZCgpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGxldCBbaGVhZGVycywgc3RhdHVzLCB0cmFpbGVyc10gPSB5aWVsZCBQcm9taXNlLmFsbChbdGhpcy5oZWFkZXJzLCB0aGlzLnN0YXR1cywgdGhpcy50cmFpbGVyc10pO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6IHRoaXMubWV0aG9kLFxuICAgICAgICAgICAgICAgIHJlcXVlc3RIZWFkZXJzOiB0aGlzLnJlcXVlc3RIZWFkZXJzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgICAgICAgIHRyYWlsZXJzLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0cy5EdXBsZXhTdHJlYW1pbmdDYWxsID0gRHVwbGV4U3RyZWFtaW5nQ2FsbDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVGVzdFRyYW5zcG9ydCA9IHZvaWQgMDtcbmNvbnN0IHJwY19lcnJvcl8xID0gcmVxdWlyZShcIi4vcnBjLWVycm9yXCIpO1xuY29uc3QgcnVudGltZV8xID0gcmVxdWlyZShcIkBwcm90b2J1Zi10cy9ydW50aW1lXCIpO1xuY29uc3QgcnBjX291dHB1dF9zdHJlYW1fMSA9IHJlcXVpcmUoXCIuL3JwYy1vdXRwdXQtc3RyZWFtXCIpO1xuY29uc3QgcnBjX29wdGlvbnNfMSA9IHJlcXVpcmUoXCIuL3JwYy1vcHRpb25zXCIpO1xuY29uc3QgdW5hcnlfY2FsbF8xID0gcmVxdWlyZShcIi4vdW5hcnktY2FsbFwiKTtcbmNvbnN0IHNlcnZlcl9zdHJlYW1pbmdfY2FsbF8xID0gcmVxdWlyZShcIi4vc2VydmVyLXN0cmVhbWluZy1jYWxsXCIpO1xuY29uc3QgY2xpZW50X3N0cmVhbWluZ19jYWxsXzEgPSByZXF1aXJlKFwiLi9jbGllbnQtc3RyZWFtaW5nLWNhbGxcIik7XG5jb25zdCBkdXBsZXhfc3RyZWFtaW5nX2NhbGxfMSA9IHJlcXVpcmUoXCIuL2R1cGxleC1zdHJlYW1pbmctY2FsbFwiKTtcbi8qKlxuICogVHJhbnNwb3J0IGZvciB0ZXN0aW5nLlxuICovXG5jbGFzcyBUZXN0VHJhbnNwb3J0IHtcbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplIHdpdGggbW9jayBkYXRhLiBPbWl0dGVkIGZpZWxkcyBoYXZlIGRlZmF1bHQgdmFsdWUuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoZGF0YSkge1xuICAgICAgICAvKipcbiAgICAgICAgICogU3VwcHJlc3Mgd2FybmluZyAvIGVycm9yIGFib3V0IHVuY2F1Z2h0IHJlamVjdGlvbnMgb2ZcbiAgICAgICAgICogXCJzdGF0dXNcIiBhbmQgXCJ0cmFpbGVyc1wiLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5zdXBwcmVzc1VuY2F1Z2h0UmVqZWN0aW9ucyA9IHRydWU7XG4gICAgICAgIHRoaXMuaGVhZGVyRGVsYXkgPSAxMDtcbiAgICAgICAgdGhpcy5yZXNwb25zZURlbGF5ID0gNTA7XG4gICAgICAgIHRoaXMuYmV0d2VlblJlc3BvbnNlRGVsYXkgPSAxMDtcbiAgICAgICAgdGhpcy5hZnRlclJlc3BvbnNlRGVsYXkgPSAxMDtcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YSAhPT0gbnVsbCAmJiBkYXRhICE9PSB2b2lkIDAgPyBkYXRhIDoge307XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNlbnQgbWVzc2FnZShzKSBkdXJpbmcgdGhlIGxhc3Qgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGdldCBzZW50TWVzc2FnZXMoKSB7XG4gICAgICAgIGlmICh0aGlzLmxhc3RJbnB1dCBpbnN0YW5jZW9mIFRlc3RJbnB1dFN0cmVhbSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubGFzdElucHV0LnNlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHRoaXMubGFzdElucHV0ID09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIHJldHVybiBbdGhpcy5sYXN0SW5wdXQuc2luZ2xlXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNlbmRpbmcgbWVzc2FnZShzKSBjb21wbGV0ZWQ/XG4gICAgICovXG4gICAgZ2V0IHNlbmRDb21wbGV0ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMubGFzdElucHV0IGluc3RhbmNlb2YgVGVzdElucHV0U3RyZWFtKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sYXN0SW5wdXQuY29tcGxldGVkO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiB0aGlzLmxhc3RJbnB1dCA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8vIENyZWF0ZXMgYSBwcm9taXNlIGZvciByZXNwb25zZSBoZWFkZXJzIGZyb20gdGhlIG1vY2sgZGF0YS5cbiAgICBwcm9taXNlSGVhZGVycygpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBoZWFkZXJzID0gKF9hID0gdGhpcy5kYXRhLmhlYWRlcnMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFRlc3RUcmFuc3BvcnQuZGVmYXVsdEhlYWRlcnM7XG4gICAgICAgIHJldHVybiBoZWFkZXJzIGluc3RhbmNlb2YgcnBjX2Vycm9yXzEuUnBjRXJyb3JcbiAgICAgICAgICAgID8gUHJvbWlzZS5yZWplY3QoaGVhZGVycylcbiAgICAgICAgICAgIDogUHJvbWlzZS5yZXNvbHZlKGhlYWRlcnMpO1xuICAgIH1cbiAgICAvLyBDcmVhdGVzIGEgcHJvbWlzZSBmb3IgYSBzaW5nbGUsIHZhbGlkLCBtZXNzYWdlIGZyb20gdGhlIG1vY2sgZGF0YS5cbiAgICBwcm9taXNlU2luZ2xlUmVzcG9uc2UobWV0aG9kKSB7XG4gICAgICAgIGlmICh0aGlzLmRhdGEucmVzcG9uc2UgaW5zdGFuY2VvZiBycGNfZXJyb3JfMS5ScGNFcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHRoaXMuZGF0YS5yZXNwb25zZSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHI7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZGF0YS5yZXNwb25zZSkpIHtcbiAgICAgICAgICAgIHJ1bnRpbWVfMS5hc3NlcnQodGhpcy5kYXRhLnJlc3BvbnNlLmxlbmd0aCA+IDApO1xuICAgICAgICAgICAgciA9IHRoaXMuZGF0YS5yZXNwb25zZVswXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmRhdGEucmVzcG9uc2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgciA9IHRoaXMuZGF0YS5yZXNwb25zZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHIgPSBtZXRob2QuTy5jcmVhdGUoKTtcbiAgICAgICAgfVxuICAgICAgICBydW50aW1lXzEuYXNzZXJ0KG1ldGhvZC5PLmlzKHIpKTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUHVzaGVzIHJlc3BvbnNlIG1lc3NhZ2VzIGZyb20gdGhlIG1vY2sgZGF0YSB0byB0aGUgb3V0cHV0IHN0cmVhbS5cbiAgICAgKiBJZiBhbiBlcnJvciByZXNwb25zZSwgc3RhdHVzIG9yIHRyYWlsZXJzIGFyZSBtb2NrZWQsIHRoZSBzdHJlYW0gaXNcbiAgICAgKiBjbG9zZWQgd2l0aCB0aGUgcmVzcGVjdGl2ZSBlcnJvci5cbiAgICAgKiBPdGhlcndpc2UsIHN0cmVhbSBpcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlxuICAgICAqXG4gICAgICogVGhlIHJldHVybmVkIHByb21pc2UgcmVzb2x2ZXMgd2hlbiB0aGUgc3RyZWFtIGlzIGNsb3NlZC4gSXQgc2hvdWxkXG4gICAgICogbm90IHJlamVjdC4gSWYgaXQgZG9lcywgY29kZSBpcyBicm9rZW4uXG4gICAgICovXG4gICAgc3RyZWFtUmVzcG9uc2VzKG1ldGhvZCwgc3RyZWFtLCBhYm9ydCkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgLy8gbm9ybWFsaXplIFwiZGF0YS5yZXNwb25zZVwiIGludG8gYW4gYXJyYXkgb2YgdmFsaWQgb3V0cHV0IG1lc3NhZ2VzXG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlcyA9IFtdO1xuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YS5yZXNwb25zZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZXMucHVzaChtZXRob2QuTy5jcmVhdGUoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZGF0YS5yZXNwb25zZSkpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBtc2cgb2YgdGhpcy5kYXRhLnJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bnRpbWVfMS5hc3NlcnQobWV0aG9kLk8uaXMobXNnKSk7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VzLnB1c2gobXNnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICghKHRoaXMuZGF0YS5yZXNwb25zZSBpbnN0YW5jZW9mIHJwY19lcnJvcl8xLlJwY0Vycm9yKSkge1xuICAgICAgICAgICAgICAgIHJ1bnRpbWVfMS5hc3NlcnQobWV0aG9kLk8uaXModGhpcy5kYXRhLnJlc3BvbnNlKSk7XG4gICAgICAgICAgICAgICAgbWVzc2FnZXMucHVzaCh0aGlzLmRhdGEucmVzcG9uc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gc3RhcnQgdGhlIHN0cmVhbSB3aXRoIGFuIGluaXRpYWwgZGVsYXkuXG4gICAgICAgICAgICAvLyBpZiB0aGUgcmVxdWVzdCBpcyBjYW5jZWxsZWQsIG5vdGlmeSgpIGVycm9yIGFuZCBleGl0LlxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB5aWVsZCBkZWxheSh0aGlzLnJlc3BvbnNlRGVsYXksIGFib3J0KSh1bmRlZmluZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgc3RyZWFtLm5vdGlmeUVycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBpZiBlcnJvciByZXNwb25zZSB3YXMgbW9ja2VkLCBub3RpZnkoKSBlcnJvciAoc3RyZWFtIGlzIG5vdyBjbG9zZWQgd2l0aCBlcnJvcikgYW5kIGV4aXQuXG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhLnJlc3BvbnNlIGluc3RhbmNlb2YgcnBjX2Vycm9yXzEuUnBjRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBzdHJlYW0ubm90aWZ5RXJyb3IodGhpcy5kYXRhLnJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyByZWd1bGFyIHJlc3BvbnNlIG1lc3NhZ2VzIHdlcmUgbW9ja2VkLiBub3RpZnkoKSB0aGVtLlxuICAgICAgICAgICAgZm9yIChsZXQgbXNnIG9mIG1lc3NhZ2VzKSB7XG4gICAgICAgICAgICAgICAgc3RyZWFtLm5vdGlmeU1lc3NhZ2UobXNnKTtcbiAgICAgICAgICAgICAgICAvLyBhZGQgYSBzaG9ydCBkZWxheSBiZXR3ZWVuIHJlc3BvbnNlc1xuICAgICAgICAgICAgICAgIC8vIGlmIHRoZSByZXF1ZXN0IGlzIGNhbmNlbGxlZCwgbm90aWZ5KCkgZXJyb3IgYW5kIGV4aXQuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgZGVsYXkodGhpcy5iZXR3ZWVuUmVzcG9uc2VEZWxheSwgYWJvcnQpKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBzdHJlYW0ubm90aWZ5RXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZXJyb3Igc3RhdHVzIHdhcyBtb2NrZWQsIG5vdGlmeSgpIGVycm9yIChzdHJlYW0gaXMgbm93IGNsb3NlZCB3aXRoIGVycm9yKSBhbmQgZXhpdC5cbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGEuc3RhdHVzIGluc3RhbmNlb2YgcnBjX2Vycm9yXzEuUnBjRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBzdHJlYW0ubm90aWZ5RXJyb3IodGhpcy5kYXRhLnN0YXR1cyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZXJyb3IgdHJhaWxlcnMgd2VyZSBtb2NrZWQsIG5vdGlmeSgpIGVycm9yIChzdHJlYW0gaXMgbm93IGNsb3NlZCB3aXRoIGVycm9yKSBhbmQgZXhpdC5cbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGEudHJhaWxlcnMgaW5zdGFuY2VvZiBycGNfZXJyb3JfMS5ScGNFcnJvcikge1xuICAgICAgICAgICAgICAgIHN0cmVhbS5ub3RpZnlFcnJvcih0aGlzLmRhdGEudHJhaWxlcnMpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHN0cmVhbSBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XG4gICAgICAgICAgICBzdHJlYW0ubm90aWZ5Q29tcGxldGUoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIENyZWF0ZXMgYSBwcm9taXNlIGZvciByZXNwb25zZSBzdGF0dXMgZnJvbSB0aGUgbW9jayBkYXRhLlxuICAgIHByb21pc2VTdGF0dXMoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gKF9hID0gdGhpcy5kYXRhLnN0YXR1cykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogVGVzdFRyYW5zcG9ydC5kZWZhdWx0U3RhdHVzO1xuICAgICAgICByZXR1cm4gc3RhdHVzIGluc3RhbmNlb2YgcnBjX2Vycm9yXzEuUnBjRXJyb3JcbiAgICAgICAgICAgID8gUHJvbWlzZS5yZWplY3Qoc3RhdHVzKVxuICAgICAgICAgICAgOiBQcm9taXNlLnJlc29sdmUoc3RhdHVzKTtcbiAgICB9XG4gICAgLy8gQ3JlYXRlcyBhIHByb21pc2UgZm9yIHJlc3BvbnNlIHRyYWlsZXJzIGZyb20gdGhlIG1vY2sgZGF0YS5cbiAgICBwcm9taXNlVHJhaWxlcnMoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgdHJhaWxlcnMgPSAoX2EgPSB0aGlzLmRhdGEudHJhaWxlcnMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFRlc3RUcmFuc3BvcnQuZGVmYXVsdFRyYWlsZXJzO1xuICAgICAgICByZXR1cm4gdHJhaWxlcnMgaW5zdGFuY2VvZiBycGNfZXJyb3JfMS5ScGNFcnJvclxuICAgICAgICAgICAgPyBQcm9taXNlLnJlamVjdCh0cmFpbGVycylcbiAgICAgICAgICAgIDogUHJvbWlzZS5yZXNvbHZlKHRyYWlsZXJzKTtcbiAgICB9XG4gICAgbWF5YmVTdXBwcmVzc1VuY2F1Z2h0KC4uLnByb21pc2UpIHtcbiAgICAgICAgaWYgKHRoaXMuc3VwcHJlc3NVbmNhdWdodFJlamVjdGlvbnMpIHtcbiAgICAgICAgICAgIGZvciAobGV0IHAgb2YgcHJvbWlzZSkge1xuICAgICAgICAgICAgICAgIHAuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIG1lcmdlT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBycGNfb3B0aW9uc18xLm1lcmdlUnBjT3B0aW9ucyh7fSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIHVuYXJ5KG1ldGhvZCwgaW5wdXQsIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCByZXF1ZXN0SGVhZGVycyA9IChfYSA9IG9wdGlvbnMubWV0YSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoge30sIGhlYWRlcnNQcm9taXNlID0gdGhpcy5wcm9taXNlSGVhZGVycygpXG4gICAgICAgICAgICAudGhlbihkZWxheSh0aGlzLmhlYWRlckRlbGF5LCBvcHRpb25zLmFib3J0KSksIHJlc3BvbnNlUHJvbWlzZSA9IGhlYWRlcnNQcm9taXNlXG4gICAgICAgICAgICAuY2F0Y2goXyA9PiB7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbihkZWxheSh0aGlzLnJlc3BvbnNlRGVsYXksIG9wdGlvbnMuYWJvcnQpKVxuICAgICAgICAgICAgLnRoZW4oXyA9PiB0aGlzLnByb21pc2VTaW5nbGVSZXNwb25zZShtZXRob2QpKSwgc3RhdHVzUHJvbWlzZSA9IHJlc3BvbnNlUHJvbWlzZVxuICAgICAgICAgICAgLmNhdGNoKF8gPT4ge1xuICAgICAgICB9KVxuICAgICAgICAgICAgLnRoZW4oZGVsYXkodGhpcy5hZnRlclJlc3BvbnNlRGVsYXksIG9wdGlvbnMuYWJvcnQpKVxuICAgICAgICAgICAgLnRoZW4oXyA9PiB0aGlzLnByb21pc2VTdGF0dXMoKSksIHRyYWlsZXJzUHJvbWlzZSA9IHJlc3BvbnNlUHJvbWlzZVxuICAgICAgICAgICAgLmNhdGNoKF8gPT4ge1xuICAgICAgICB9KVxuICAgICAgICAgICAgLnRoZW4oZGVsYXkodGhpcy5hZnRlclJlc3BvbnNlRGVsYXksIG9wdGlvbnMuYWJvcnQpKVxuICAgICAgICAgICAgLnRoZW4oXyA9PiB0aGlzLnByb21pc2VUcmFpbGVycygpKTtcbiAgICAgICAgdGhpcy5tYXliZVN1cHByZXNzVW5jYXVnaHQoc3RhdHVzUHJvbWlzZSwgdHJhaWxlcnNQcm9taXNlKTtcbiAgICAgICAgdGhpcy5sYXN0SW5wdXQgPSB7IHNpbmdsZTogaW5wdXQgfTtcbiAgICAgICAgcmV0dXJuIG5ldyB1bmFyeV9jYWxsXzEuVW5hcnlDYWxsKG1ldGhvZCwgcmVxdWVzdEhlYWRlcnMsIGlucHV0LCBoZWFkZXJzUHJvbWlzZSwgcmVzcG9uc2VQcm9taXNlLCBzdGF0dXNQcm9taXNlLCB0cmFpbGVyc1Byb21pc2UpO1xuICAgIH1cbiAgICBzZXJ2ZXJTdHJlYW1pbmcobWV0aG9kLCBpbnB1dCwgb3B0aW9ucykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzID0gKF9hID0gb3B0aW9ucy5tZXRhKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB7fSwgaGVhZGVyc1Byb21pc2UgPSB0aGlzLnByb21pc2VIZWFkZXJzKClcbiAgICAgICAgICAgIC50aGVuKGRlbGF5KHRoaXMuaGVhZGVyRGVsYXksIG9wdGlvbnMuYWJvcnQpKSwgb3V0cHV0U3RyZWFtID0gbmV3IHJwY19vdXRwdXRfc3RyZWFtXzEuUnBjT3V0cHV0U3RyZWFtQ29udHJvbGxlcigpLCByZXNwb25zZVN0cmVhbUNsb3NlZFByb21pc2UgPSBoZWFkZXJzUHJvbWlzZVxuICAgICAgICAgICAgLnRoZW4oZGVsYXkodGhpcy5yZXNwb25zZURlbGF5LCBvcHRpb25zLmFib3J0KSlcbiAgICAgICAgICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbigoKSA9PiB0aGlzLnN0cmVhbVJlc3BvbnNlcyhtZXRob2QsIG91dHB1dFN0cmVhbSwgb3B0aW9ucy5hYm9ydCkpXG4gICAgICAgICAgICAudGhlbihkZWxheSh0aGlzLmFmdGVyUmVzcG9uc2VEZWxheSwgb3B0aW9ucy5hYm9ydCkpLCBzdGF0dXNQcm9taXNlID0gcmVzcG9uc2VTdHJlYW1DbG9zZWRQcm9taXNlXG4gICAgICAgICAgICAudGhlbigoKSA9PiB0aGlzLnByb21pc2VTdGF0dXMoKSksIHRyYWlsZXJzUHJvbWlzZSA9IHJlc3BvbnNlU3RyZWFtQ2xvc2VkUHJvbWlzZVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5wcm9taXNlVHJhaWxlcnMoKSk7XG4gICAgICAgIHRoaXMubWF5YmVTdXBwcmVzc1VuY2F1Z2h0KHN0YXR1c1Byb21pc2UsIHRyYWlsZXJzUHJvbWlzZSk7XG4gICAgICAgIHRoaXMubGFzdElucHV0ID0geyBzaW5nbGU6IGlucHV0IH07XG4gICAgICAgIHJldHVybiBuZXcgc2VydmVyX3N0cmVhbWluZ19jYWxsXzEuU2VydmVyU3RyZWFtaW5nQ2FsbChtZXRob2QsIHJlcXVlc3RIZWFkZXJzLCBpbnB1dCwgaGVhZGVyc1Byb21pc2UsIG91dHB1dFN0cmVhbSwgc3RhdHVzUHJvbWlzZSwgdHJhaWxlcnNQcm9taXNlKTtcbiAgICB9XG4gICAgY2xpZW50U3RyZWFtaW5nKG1ldGhvZCwgb3B0aW9ucykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzID0gKF9hID0gb3B0aW9ucy5tZXRhKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB7fSwgaGVhZGVyc1Byb21pc2UgPSB0aGlzLnByb21pc2VIZWFkZXJzKClcbiAgICAgICAgICAgIC50aGVuKGRlbGF5KHRoaXMuaGVhZGVyRGVsYXksIG9wdGlvbnMuYWJvcnQpKSwgcmVzcG9uc2VQcm9taXNlID0gaGVhZGVyc1Byb21pc2VcbiAgICAgICAgICAgIC5jYXRjaChfID0+IHtcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuKGRlbGF5KHRoaXMucmVzcG9uc2VEZWxheSwgb3B0aW9ucy5hYm9ydCkpXG4gICAgICAgICAgICAudGhlbihfID0+IHRoaXMucHJvbWlzZVNpbmdsZVJlc3BvbnNlKG1ldGhvZCkpLCBzdGF0dXNQcm9taXNlID0gcmVzcG9uc2VQcm9taXNlXG4gICAgICAgICAgICAuY2F0Y2goXyA9PiB7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbihkZWxheSh0aGlzLmFmdGVyUmVzcG9uc2VEZWxheSwgb3B0aW9ucy5hYm9ydCkpXG4gICAgICAgICAgICAudGhlbihfID0+IHRoaXMucHJvbWlzZVN0YXR1cygpKSwgdHJhaWxlcnNQcm9taXNlID0gcmVzcG9uc2VQcm9taXNlXG4gICAgICAgICAgICAuY2F0Y2goXyA9PiB7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbihkZWxheSh0aGlzLmFmdGVyUmVzcG9uc2VEZWxheSwgb3B0aW9ucy5hYm9ydCkpXG4gICAgICAgICAgICAudGhlbihfID0+IHRoaXMucHJvbWlzZVRyYWlsZXJzKCkpO1xuICAgICAgICB0aGlzLm1heWJlU3VwcHJlc3NVbmNhdWdodChzdGF0dXNQcm9taXNlLCB0cmFpbGVyc1Byb21pc2UpO1xuICAgICAgICB0aGlzLmxhc3RJbnB1dCA9IG5ldyBUZXN0SW5wdXRTdHJlYW0odGhpcy5kYXRhLCBvcHRpb25zLmFib3J0KTtcbiAgICAgICAgcmV0dXJuIG5ldyBjbGllbnRfc3RyZWFtaW5nX2NhbGxfMS5DbGllbnRTdHJlYW1pbmdDYWxsKG1ldGhvZCwgcmVxdWVzdEhlYWRlcnMsIHRoaXMubGFzdElucHV0LCBoZWFkZXJzUHJvbWlzZSwgcmVzcG9uc2VQcm9taXNlLCBzdGF0dXNQcm9taXNlLCB0cmFpbGVyc1Byb21pc2UpO1xuICAgIH1cbiAgICBkdXBsZXgobWV0aG9kLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgcmVxdWVzdEhlYWRlcnMgPSAoX2EgPSBvcHRpb25zLm1ldGEpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHt9LCBoZWFkZXJzUHJvbWlzZSA9IHRoaXMucHJvbWlzZUhlYWRlcnMoKVxuICAgICAgICAgICAgLnRoZW4oZGVsYXkodGhpcy5oZWFkZXJEZWxheSwgb3B0aW9ucy5hYm9ydCkpLCBvdXRwdXRTdHJlYW0gPSBuZXcgcnBjX291dHB1dF9zdHJlYW1fMS5ScGNPdXRwdXRTdHJlYW1Db250cm9sbGVyKCksIHJlc3BvbnNlU3RyZWFtQ2xvc2VkUHJvbWlzZSA9IGhlYWRlcnNQcm9taXNlXG4gICAgICAgICAgICAudGhlbihkZWxheSh0aGlzLnJlc3BvbnNlRGVsYXksIG9wdGlvbnMuYWJvcnQpKVxuICAgICAgICAgICAgLmNhdGNoKCgpID0+IHtcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHRoaXMuc3RyZWFtUmVzcG9uc2VzKG1ldGhvZCwgb3V0cHV0U3RyZWFtLCBvcHRpb25zLmFib3J0KSlcbiAgICAgICAgICAgIC50aGVuKGRlbGF5KHRoaXMuYWZ0ZXJSZXNwb25zZURlbGF5LCBvcHRpb25zLmFib3J0KSksIHN0YXR1c1Byb21pc2UgPSByZXNwb25zZVN0cmVhbUNsb3NlZFByb21pc2VcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHRoaXMucHJvbWlzZVN0YXR1cygpKSwgdHJhaWxlcnNQcm9taXNlID0gcmVzcG9uc2VTdHJlYW1DbG9zZWRQcm9taXNlXG4gICAgICAgICAgICAudGhlbigoKSA9PiB0aGlzLnByb21pc2VUcmFpbGVycygpKTtcbiAgICAgICAgdGhpcy5tYXliZVN1cHByZXNzVW5jYXVnaHQoc3RhdHVzUHJvbWlzZSwgdHJhaWxlcnNQcm9taXNlKTtcbiAgICAgICAgdGhpcy5sYXN0SW5wdXQgPSBuZXcgVGVzdElucHV0U3RyZWFtKHRoaXMuZGF0YSwgb3B0aW9ucy5hYm9ydCk7XG4gICAgICAgIHJldHVybiBuZXcgZHVwbGV4X3N0cmVhbWluZ19jYWxsXzEuRHVwbGV4U3RyZWFtaW5nQ2FsbChtZXRob2QsIHJlcXVlc3RIZWFkZXJzLCB0aGlzLmxhc3RJbnB1dCwgaGVhZGVyc1Byb21pc2UsIG91dHB1dFN0cmVhbSwgc3RhdHVzUHJvbWlzZSwgdHJhaWxlcnNQcm9taXNlKTtcbiAgICB9XG59XG5leHBvcnRzLlRlc3RUcmFuc3BvcnQgPSBUZXN0VHJhbnNwb3J0O1xuVGVzdFRyYW5zcG9ydC5kZWZhdWx0SGVhZGVycyA9IHtcbiAgICByZXNwb25zZUhlYWRlcjogXCJ0ZXN0XCJcbn07XG5UZXN0VHJhbnNwb3J0LmRlZmF1bHRTdGF0dXMgPSB7XG4gICAgY29kZTogXCJPS1wiLCBkZXRhaWw6IFwiYWxsIGdvb2RcIlxufTtcblRlc3RUcmFuc3BvcnQuZGVmYXVsdFRyYWlsZXJzID0ge1xuICAgIHJlc3BvbnNlVHJhaWxlcjogXCJ0ZXN0XCJcbn07XG5mdW5jdGlvbiBkZWxheShtcywgYWJvcnQpIHtcbiAgICByZXR1cm4gKHYpID0+IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgaWYgKGFib3J0ID09PSBudWxsIHx8IGFib3J0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBhYm9ydC5hYm9ydGVkKSB7XG4gICAgICAgICAgICByZWplY3QobmV3IHJwY19lcnJvcl8xLlJwY0Vycm9yKFwidXNlciBjYW5jZWxcIiwgXCJDQU5DRUxMRURcIikpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgaWQgPSBzZXRUaW1lb3V0KCgpID0+IHJlc29sdmUodiksIG1zKTtcbiAgICAgICAgICAgIGlmIChhYm9ydCkge1xuICAgICAgICAgICAgICAgIGFib3J0LmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBldiA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChpZCk7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgcnBjX2Vycm9yXzEuUnBjRXJyb3IoXCJ1c2VyIGNhbmNlbFwiLCBcIkNBTkNFTExFRFwiKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbmNsYXNzIFRlc3RJbnB1dFN0cmVhbSB7XG4gICAgY29uc3RydWN0b3IoZGF0YSwgYWJvcnQpIHtcbiAgICAgICAgdGhpcy5fY29tcGxldGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3NlbnQgPSBbXTtcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICAgICAgdGhpcy5hYm9ydCA9IGFib3J0O1xuICAgIH1cbiAgICBnZXQgc2VudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbnQ7XG4gICAgfVxuICAgIGdldCBjb21wbGV0ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb21wbGV0ZWQ7XG4gICAgfVxuICAgIHNlbmQobWVzc2FnZSkge1xuICAgICAgICBpZiAodGhpcy5kYXRhLmlucHV0TWVzc2FnZSBpbnN0YW5jZW9mIHJwY19lcnJvcl8xLlJwY0Vycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QodGhpcy5kYXRhLmlucHV0TWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGVsYXlNcyA9IHRoaXMuZGF0YS5pbnB1dE1lc3NhZ2UgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyAxMFxuICAgICAgICAgICAgOiB0aGlzLmRhdGEuaW5wdXRNZXNzYWdlO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZClcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3NlbnQucHVzaChtZXNzYWdlKTtcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuKGRlbGF5KGRlbGF5TXMsIHRoaXMuYWJvcnQpKTtcbiAgICB9XG4gICAgY29tcGxldGUoKSB7XG4gICAgICAgIGlmICh0aGlzLmRhdGEuaW5wdXRDb21wbGV0ZSBpbnN0YW5jZW9mIHJwY19lcnJvcl8xLlJwY0Vycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QodGhpcy5kYXRhLmlucHV0Q29tcGxldGUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRlbGF5TXMgPSB0aGlzLmRhdGEuaW5wdXRDb21wbGV0ZSA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IDEwXG4gICAgICAgICAgICA6IHRoaXMuZGF0YS5pbnB1dENvbXBsZXRlO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZClcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2NvbXBsZXRlZCA9IHRydWU7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbihkZWxheShkZWxheU1zLCB0aGlzLmFib3J0KSk7XG4gICAgfVxufVxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc3RhY2tEdXBsZXhTdHJlYW1pbmdJbnRlcmNlcHRvcnMgPSBleHBvcnRzLnN0YWNrQ2xpZW50U3RyZWFtaW5nSW50ZXJjZXB0b3JzID0gZXhwb3J0cy5zdGFja1NlcnZlclN0cmVhbWluZ0ludGVyY2VwdG9ycyA9IGV4cG9ydHMuc3RhY2tVbmFyeUludGVyY2VwdG9ycyA9IGV4cG9ydHMuc3RhY2tJbnRlcmNlcHQgPSB2b2lkIDA7XG5jb25zdCBydW50aW1lXzEgPSByZXF1aXJlKFwiQHByb3RvYnVmLXRzL3J1bnRpbWVcIik7XG4vKipcbiAqIENyZWF0ZXMgYSBcInN0YWNrXCIgb2Ygb2YgYWxsIGludGVyY2VwdG9ycyBzcGVjaWZpZWQgaW4gdGhlIGdpdmVuIGBScGNPcHRpb25zYC5cbiAqIFVzZWQgYnkgZ2VuZXJhdGVkIGNsaWVudCBpbXBsZW1lbnRhdGlvbnMuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gc3RhY2tJbnRlcmNlcHQoa2luZCwgdHJhbnNwb3J0LCBtZXRob2QsIG9wdGlvbnMsIGlucHV0KSB7XG4gICAgdmFyIF9hLCBfYiwgX2MsIF9kO1xuICAgIGlmIChraW5kID09IFwidW5hcnlcIikge1xuICAgICAgICBsZXQgdGFpbCA9IChtdGQsIGlucCwgb3B0KSA9PiB0cmFuc3BvcnQudW5hcnkobXRkLCBpbnAsIG9wdCk7XG4gICAgICAgIGZvciAoY29uc3QgY3VyciBvZiAoKF9hID0gb3B0aW9ucy5pbnRlcmNlcHRvcnMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFtdKS5maWx0ZXIoaSA9PiBpLmludGVyY2VwdFVuYXJ5KS5yZXZlcnNlKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IG5leHQgPSB0YWlsO1xuICAgICAgICAgICAgdGFpbCA9IChtdGQsIGlucCwgb3B0KSA9PiBjdXJyLmludGVyY2VwdFVuYXJ5KG5leHQsIG10ZCwgaW5wLCBvcHQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0YWlsKG1ldGhvZCwgaW5wdXQsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBpZiAoa2luZCA9PSBcInNlcnZlclN0cmVhbWluZ1wiKSB7XG4gICAgICAgIGxldCB0YWlsID0gKG10ZCwgaW5wLCBvcHQpID0+IHRyYW5zcG9ydC5zZXJ2ZXJTdHJlYW1pbmcobXRkLCBpbnAsIG9wdCk7XG4gICAgICAgIGZvciAoY29uc3QgY3VyciBvZiAoKF9iID0gb3B0aW9ucy5pbnRlcmNlcHRvcnMpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IFtdKS5maWx0ZXIoaSA9PiBpLmludGVyY2VwdFNlcnZlclN0cmVhbWluZykucmV2ZXJzZSgpKSB7XG4gICAgICAgICAgICBjb25zdCBuZXh0ID0gdGFpbDtcbiAgICAgICAgICAgIHRhaWwgPSAobXRkLCBpbnAsIG9wdCkgPT4gY3Vyci5pbnRlcmNlcHRTZXJ2ZXJTdHJlYW1pbmcobmV4dCwgbXRkLCBpbnAsIG9wdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRhaWwobWV0aG9kLCBpbnB1dCwgb3B0aW9ucyk7XG4gICAgfVxuICAgIGlmIChraW5kID09IFwiY2xpZW50U3RyZWFtaW5nXCIpIHtcbiAgICAgICAgbGV0IHRhaWwgPSAobXRkLCBvcHQpID0+IHRyYW5zcG9ydC5jbGllbnRTdHJlYW1pbmcobXRkLCBvcHQpO1xuICAgICAgICBmb3IgKGNvbnN0IGN1cnIgb2YgKChfYyA9IG9wdGlvbnMuaW50ZXJjZXB0b3JzKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiBbXSkuZmlsdGVyKGkgPT4gaS5pbnRlcmNlcHRDbGllbnRTdHJlYW1pbmcpLnJldmVyc2UoKSkge1xuICAgICAgICAgICAgY29uc3QgbmV4dCA9IHRhaWw7XG4gICAgICAgICAgICB0YWlsID0gKG10ZCwgb3B0KSA9PiBjdXJyLmludGVyY2VwdENsaWVudFN0cmVhbWluZyhuZXh0LCBtdGQsIG9wdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRhaWwobWV0aG9kLCBvcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKGtpbmQgPT0gXCJkdXBsZXhcIikge1xuICAgICAgICBsZXQgdGFpbCA9IChtdGQsIG9wdCkgPT4gdHJhbnNwb3J0LmR1cGxleChtdGQsIG9wdCk7XG4gICAgICAgIGZvciAoY29uc3QgY3VyciBvZiAoKF9kID0gb3B0aW9ucy5pbnRlcmNlcHRvcnMpICE9PSBudWxsICYmIF9kICE9PSB2b2lkIDAgPyBfZCA6IFtdKS5maWx0ZXIoaSA9PiBpLmludGVyY2VwdER1cGxleCkucmV2ZXJzZSgpKSB7XG4gICAgICAgICAgICBjb25zdCBuZXh0ID0gdGFpbDtcbiAgICAgICAgICAgIHRhaWwgPSAobXRkLCBvcHQpID0+IGN1cnIuaW50ZXJjZXB0RHVwbGV4KG5leHQsIG10ZCwgb3B0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFpbChtZXRob2QsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBydW50aW1lXzEuYXNzZXJ0TmV2ZXIoa2luZCk7XG59XG5leHBvcnRzLnN0YWNrSW50ZXJjZXB0ID0gc3RhY2tJbnRlcmNlcHQ7XG4vKipcbiAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIGJ5IGBzdGFja0ludGVyY2VwdCgpYCwgc3RpbGwgaGVyZSB0byBzdXBwb3J0IG9sZGVyIGdlbmVyYXRlZCBjb2RlXG4gKi9cbmZ1bmN0aW9uIHN0YWNrVW5hcnlJbnRlcmNlcHRvcnModHJhbnNwb3J0LCBtZXRob2QsIGlucHV0LCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIHN0YWNrSW50ZXJjZXB0KFwidW5hcnlcIiwgdHJhbnNwb3J0LCBtZXRob2QsIG9wdGlvbnMsIGlucHV0KTtcbn1cbmV4cG9ydHMuc3RhY2tVbmFyeUludGVyY2VwdG9ycyA9IHN0YWNrVW5hcnlJbnRlcmNlcHRvcnM7XG4vKipcbiAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIGJ5IGBzdGFja0ludGVyY2VwdCgpYCwgc3RpbGwgaGVyZSB0byBzdXBwb3J0IG9sZGVyIGdlbmVyYXRlZCBjb2RlXG4gKi9cbmZ1bmN0aW9uIHN0YWNrU2VydmVyU3RyZWFtaW5nSW50ZXJjZXB0b3JzKHRyYW5zcG9ydCwgbWV0aG9kLCBpbnB1dCwgb3B0aW9ucykge1xuICAgIHJldHVybiBzdGFja0ludGVyY2VwdChcInNlcnZlclN0cmVhbWluZ1wiLCB0cmFuc3BvcnQsIG1ldGhvZCwgb3B0aW9ucywgaW5wdXQpO1xufVxuZXhwb3J0cy5zdGFja1NlcnZlclN0cmVhbWluZ0ludGVyY2VwdG9ycyA9IHN0YWNrU2VydmVyU3RyZWFtaW5nSW50ZXJjZXB0b3JzO1xuLyoqXG4gKiBAZGVwcmVjYXRlZCByZXBsYWNlZCBieSBgc3RhY2tJbnRlcmNlcHQoKWAsIHN0aWxsIGhlcmUgdG8gc3VwcG9ydCBvbGRlciBnZW5lcmF0ZWQgY29kZVxuICovXG5mdW5jdGlvbiBzdGFja0NsaWVudFN0cmVhbWluZ0ludGVyY2VwdG9ycyh0cmFuc3BvcnQsIG1ldGhvZCwgb3B0aW9ucykge1xuICAgIHJldHVybiBzdGFja0ludGVyY2VwdChcImNsaWVudFN0cmVhbWluZ1wiLCB0cmFuc3BvcnQsIG1ldGhvZCwgb3B0aW9ucyk7XG59XG5leHBvcnRzLnN0YWNrQ2xpZW50U3RyZWFtaW5nSW50ZXJjZXB0b3JzID0gc3RhY2tDbGllbnRTdHJlYW1pbmdJbnRlcmNlcHRvcnM7XG4vKipcbiAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIGJ5IGBzdGFja0ludGVyY2VwdCgpYCwgc3RpbGwgaGVyZSB0byBzdXBwb3J0IG9sZGVyIGdlbmVyYXRlZCBjb2RlXG4gKi9cbmZ1bmN0aW9uIHN0YWNrRHVwbGV4U3RyZWFtaW5nSW50ZXJjZXB0b3JzKHRyYW5zcG9ydCwgbWV0aG9kLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIHN0YWNrSW50ZXJjZXB0KFwiZHVwbGV4XCIsIHRyYW5zcG9ydCwgbWV0aG9kLCBvcHRpb25zKTtcbn1cbmV4cG9ydHMuc3RhY2tEdXBsZXhTdHJlYW1pbmdJbnRlcmNlcHRvcnMgPSBzdGFja0R1cGxleFN0cmVhbWluZ0ludGVyY2VwdG9ycztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlNlcnZlckNhbGxDb250ZXh0Q29udHJvbGxlciA9IHZvaWQgMDtcbmNsYXNzIFNlcnZlckNhbGxDb250ZXh0Q29udHJvbGxlciB7XG4gICAgY29uc3RydWN0b3IobWV0aG9kLCBoZWFkZXJzLCBkZWFkbGluZSwgc2VuZFJlc3BvbnNlSGVhZGVyc0ZuLCBkZWZhdWx0U3RhdHVzID0geyBjb2RlOiAnT0snLCBkZXRhaWw6ICcnIH0pIHtcbiAgICAgICAgdGhpcy5fY2FuY2VsbGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2xpc3RlbmVycyA9IFtdO1xuICAgICAgICB0aGlzLm1ldGhvZCA9IG1ldGhvZDtcbiAgICAgICAgdGhpcy5oZWFkZXJzID0gaGVhZGVycztcbiAgICAgICAgdGhpcy5kZWFkbGluZSA9IGRlYWRsaW5lO1xuICAgICAgICB0aGlzLnRyYWlsZXJzID0ge307XG4gICAgICAgIHRoaXMuX3NlbmRSSCA9IHNlbmRSZXNwb25zZUhlYWRlcnNGbjtcbiAgICAgICAgdGhpcy5zdGF0dXMgPSBkZWZhdWx0U3RhdHVzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIGNhbGwgY2FuY2VsbGVkLlxuICAgICAqXG4gICAgICogSW52b2tlcyBhbGwgY2FsbGJhY2tzIHJlZ2lzdGVyZWQgd2l0aCBvbkNhbmNlbCgpIGFuZFxuICAgICAqIHNldHMgYGNhbmNlbGxlZCA9IHRydWVgLlxuICAgICAqL1xuICAgIG5vdGlmeUNhbmNlbGxlZCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9jYW5jZWxsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2NhbmNlbGxlZCA9IHRydWU7XG4gICAgICAgICAgICBmb3IgKGxldCBsIG9mIHRoaXMuX2xpc3RlbmVycykge1xuICAgICAgICAgICAgICAgIGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZW5kIHJlc3BvbnNlIGhlYWRlcnMuXG4gICAgICovXG4gICAgc2VuZFJlc3BvbnNlSGVhZGVycyhkYXRhKSB7XG4gICAgICAgIHRoaXMuX3NlbmRSSChkYXRhKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSXMgdGhlIGNhbGwgY2FuY2VsbGVkP1xuICAgICAqXG4gICAgICogV2hlbiB0aGUgY2xpZW50IGNsb3NlcyB0aGUgY29ubmVjdGlvbiBiZWZvcmUgdGhlIHNlcnZlclxuICAgICAqIGlzIGRvbmUsIHRoZSBjYWxsIGlzIGNhbmNlbGxlZC5cbiAgICAgKlxuICAgICAqIElmIHlvdSB3YW50IHRvIGNhbmNlbCBhIHJlcXVlc3Qgb24gdGhlIHNlcnZlciwgdGhyb3cgYVxuICAgICAqIFJwY0Vycm9yIHdpdGggdGhlIENBTkNFTExFRCBzdGF0dXMgY29kZS5cbiAgICAgKi9cbiAgICBnZXQgY2FuY2VsbGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2FuY2VsbGVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGQgYSBjYWxsYmFjayBmb3IgY2FuY2VsbGF0aW9uLlxuICAgICAqL1xuICAgIG9uQ2FuY2VsKGNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IGwgPSB0aGlzLl9saXN0ZW5lcnM7XG4gICAgICAgIGwucHVzaChjYWxsYmFjayk7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBsZXQgaSA9IGwuaW5kZXhPZihjYWxsYmFjayk7XG4gICAgICAgICAgICBpZiAoaSA+PSAwKVxuICAgICAgICAgICAgICAgIGwuc3BsaWNlKGksIDEpO1xuICAgICAgICB9O1xuICAgIH1cbn1cbmV4cG9ydHMuU2VydmVyQ2FsbENvbnRleHRDb250cm9sbGVyID0gU2VydmVyQ2FsbENvbnRleHRDb250cm9sbGVyO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIFB1YmxpYyBBUEkgb2YgdGhlIHJwYyBydW50aW1lLlxuLy8gTm90ZTogd2UgZG8gbm90IHVzZSBgZXhwb3J0ICogZnJvbSAuLi5gIHRvIGhlbHAgdHJlZSBzaGFrZXJzLFxuLy8gd2VicGFjayB2ZXJib3NlIG91dHB1dCBoaW50cyB0aGF0IHRoaXMgc2hvdWxkIGJlIHVzZWZ1bFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHNlcnZpY2VfdHlwZV8xID0gcmVxdWlyZShcIi4vc2VydmljZS10eXBlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiU2VydmljZVR5cGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNlcnZpY2VfdHlwZV8xLlNlcnZpY2VUeXBlOyB9IH0pO1xudmFyIHJlZmxlY3Rpb25faW5mb18xID0gcmVxdWlyZShcIi4vcmVmbGVjdGlvbi1pbmZvXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmVhZE1ldGhvZE9wdGlvbnNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlZmxlY3Rpb25faW5mb18xLnJlYWRNZXRob2RPcHRpb25zOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmVhZE1ldGhvZE9wdGlvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVmbGVjdGlvbl9pbmZvXzEucmVhZE1ldGhvZE9wdGlvbjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlYWRTZXJ2aWNlT3B0aW9uXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZWZsZWN0aW9uX2luZm9fMS5yZWFkU2VydmljZU9wdGlvbjsgfSB9KTtcbnZhciBycGNfZXJyb3JfMSA9IHJlcXVpcmUoXCIuL3JwYy1lcnJvclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlJwY0Vycm9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBycGNfZXJyb3JfMS5ScGNFcnJvcjsgfSB9KTtcbnZhciBycGNfb3B0aW9uc18xID0gcmVxdWlyZShcIi4vcnBjLW9wdGlvbnNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtZXJnZVJwY09wdGlvbnNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJwY19vcHRpb25zXzEubWVyZ2VScGNPcHRpb25zOyB9IH0pO1xudmFyIHJwY19vdXRwdXRfc3RyZWFtXzEgPSByZXF1aXJlKFwiLi9ycGMtb3V0cHV0LXN0cmVhbVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlJwY091dHB1dFN0cmVhbUNvbnRyb2xsZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJwY19vdXRwdXRfc3RyZWFtXzEuUnBjT3V0cHV0U3RyZWFtQ29udHJvbGxlcjsgfSB9KTtcbnZhciB0ZXN0X3RyYW5zcG9ydF8xID0gcmVxdWlyZShcIi4vdGVzdC10cmFuc3BvcnRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJUZXN0VHJhbnNwb3J0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0ZXN0X3RyYW5zcG9ydF8xLlRlc3RUcmFuc3BvcnQ7IH0gfSk7XG52YXIgZGVmZXJyZWRfMSA9IHJlcXVpcmUoXCIuL2RlZmVycmVkXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRGVmZXJyZWRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRlZmVycmVkXzEuRGVmZXJyZWQ7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJEZWZlcnJlZFN0YXRlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkZWZlcnJlZF8xLkRlZmVycmVkU3RhdGU7IH0gfSk7XG52YXIgZHVwbGV4X3N0cmVhbWluZ19jYWxsXzEgPSByZXF1aXJlKFwiLi9kdXBsZXgtc3RyZWFtaW5nLWNhbGxcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJEdXBsZXhTdHJlYW1pbmdDYWxsXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkdXBsZXhfc3RyZWFtaW5nX2NhbGxfMS5EdXBsZXhTdHJlYW1pbmdDYWxsOyB9IH0pO1xudmFyIGNsaWVudF9zdHJlYW1pbmdfY2FsbF8xID0gcmVxdWlyZShcIi4vY2xpZW50LXN0cmVhbWluZy1jYWxsXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQ2xpZW50U3RyZWFtaW5nQ2FsbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY2xpZW50X3N0cmVhbWluZ19jYWxsXzEuQ2xpZW50U3RyZWFtaW5nQ2FsbDsgfSB9KTtcbnZhciBzZXJ2ZXJfc3RyZWFtaW5nX2NhbGxfMSA9IHJlcXVpcmUoXCIuL3NlcnZlci1zdHJlYW1pbmctY2FsbFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlNlcnZlclN0cmVhbWluZ0NhbGxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNlcnZlcl9zdHJlYW1pbmdfY2FsbF8xLlNlcnZlclN0cmVhbWluZ0NhbGw7IH0gfSk7XG52YXIgdW5hcnlfY2FsbF8xID0gcmVxdWlyZShcIi4vdW5hcnktY2FsbFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlVuYXJ5Q2FsbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdW5hcnlfY2FsbF8xLlVuYXJ5Q2FsbDsgfSB9KTtcbnZhciBycGNfaW50ZXJjZXB0b3JfMSA9IHJlcXVpcmUoXCIuL3JwYy1pbnRlcmNlcHRvclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0YWNrSW50ZXJjZXB0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBycGNfaW50ZXJjZXB0b3JfMS5zdGFja0ludGVyY2VwdDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0YWNrRHVwbGV4U3RyZWFtaW5nSW50ZXJjZXB0b3JzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBycGNfaW50ZXJjZXB0b3JfMS5zdGFja0R1cGxleFN0cmVhbWluZ0ludGVyY2VwdG9yczsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0YWNrQ2xpZW50U3RyZWFtaW5nSW50ZXJjZXB0b3JzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBycGNfaW50ZXJjZXB0b3JfMS5zdGFja0NsaWVudFN0cmVhbWluZ0ludGVyY2VwdG9yczsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0YWNrU2VydmVyU3RyZWFtaW5nSW50ZXJjZXB0b3JzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBycGNfaW50ZXJjZXB0b3JfMS5zdGFja1NlcnZlclN0cmVhbWluZ0ludGVyY2VwdG9yczsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0YWNrVW5hcnlJbnRlcmNlcHRvcnNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJwY19pbnRlcmNlcHRvcl8xLnN0YWNrVW5hcnlJbnRlcmNlcHRvcnM7IH0gfSk7XG52YXIgc2VydmVyX2NhbGxfY29udGV4dF8xID0gcmVxdWlyZShcIi4vc2VydmVyLWNhbGwtY29udGV4dFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlNlcnZlckNhbGxDb250ZXh0Q29udHJvbGxlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2VydmVyX2NhbGxfY29udGV4dF8xLlNlcnZlckNhbGxDb250ZXh0Q29udHJvbGxlcjsgfSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkFydGlmYWN0U2VydmljZSA9IGV4cG9ydHMuRGVsZXRlQXJ0aWZhY3RSZXNwb25zZSA9IGV4cG9ydHMuRGVsZXRlQXJ0aWZhY3RSZXF1ZXN0ID0gZXhwb3J0cy5HZXRTaWduZWRBcnRpZmFjdFVSTFJlc3BvbnNlID0gZXhwb3J0cy5HZXRTaWduZWRBcnRpZmFjdFVSTFJlcXVlc3QgPSBleHBvcnRzLkxpc3RBcnRpZmFjdHNSZXNwb25zZV9Nb25vbGl0aEFydGlmYWN0ID0gZXhwb3J0cy5MaXN0QXJ0aWZhY3RzUmVzcG9uc2UgPSBleHBvcnRzLkxpc3RBcnRpZmFjdHNSZXF1ZXN0ID0gZXhwb3J0cy5GaW5hbGl6ZUFydGlmYWN0UmVzcG9uc2UgPSBleHBvcnRzLkZpbmFsaXplQXJ0aWZhY3RSZXF1ZXN0ID0gZXhwb3J0cy5DcmVhdGVBcnRpZmFjdFJlc3BvbnNlID0gZXhwb3J0cy5DcmVhdGVBcnRpZmFjdFJlcXVlc3QgPSB2b2lkIDA7XG4vLyBAZ2VuZXJhdGVkIGJ5IHByb3RvYnVmLXRzIDIuOS4xIHdpdGggcGFyYW1ldGVyIGxvbmdfdHlwZV9zdHJpbmcsY2xpZW50X25vbmUsZ2VuZXJhdGVfZGVwZW5kZW5jaWVzXG4vLyBAZ2VuZXJhdGVkIGZyb20gcHJvdG9idWYgZmlsZSBcInJlc3VsdHMvYXBpL3YxL2FydGlmYWN0LnByb3RvXCIgKHBhY2thZ2UgXCJnaXRodWIuYWN0aW9ucy5yZXN1bHRzLmFwaS52MVwiLCBzeW50YXggcHJvdG8zKVxuLy8gdHNsaW50OmRpc2FibGVcbmNvbnN0IHJ1bnRpbWVfcnBjXzEgPSByZXF1aXJlKFwiQHByb3RvYnVmLXRzL3J1bnRpbWUtcnBjXCIpO1xuY29uc3QgcnVudGltZV8xID0gcmVxdWlyZShcIkBwcm90b2J1Zi10cy9ydW50aW1lXCIpO1xuY29uc3QgcnVudGltZV8yID0gcmVxdWlyZShcIkBwcm90b2J1Zi10cy9ydW50aW1lXCIpO1xuY29uc3QgcnVudGltZV8zID0gcmVxdWlyZShcIkBwcm90b2J1Zi10cy9ydW50aW1lXCIpO1xuY29uc3QgcnVudGltZV80ID0gcmVxdWlyZShcIkBwcm90b2J1Zi10cy9ydW50aW1lXCIpO1xuY29uc3QgcnVudGltZV81ID0gcmVxdWlyZShcIkBwcm90b2J1Zi10cy9ydW50aW1lXCIpO1xuY29uc3Qgd3JhcHBlcnNfMSA9IHJlcXVpcmUoXCIuLi8uLi8uLi9nb29nbGUvcHJvdG9idWYvd3JhcHBlcnNcIik7XG5jb25zdCB3cmFwcGVyc18yID0gcmVxdWlyZShcIi4uLy4uLy4uL2dvb2dsZS9wcm90b2J1Zi93cmFwcGVyc1wiKTtcbmNvbnN0IHRpbWVzdGFtcF8xID0gcmVxdWlyZShcIi4uLy4uLy4uL2dvb2dsZS9wcm90b2J1Zi90aW1lc3RhbXBcIik7XG4vLyBAZ2VuZXJhdGVkIG1lc3NhZ2UgdHlwZSB3aXRoIHJlZmxlY3Rpb24gaW5mb3JtYXRpb24sIG1heSBwcm92aWRlIHNwZWVkIG9wdGltaXplZCBtZXRob2RzXG5jbGFzcyBDcmVhdGVBcnRpZmFjdFJlcXVlc3QkVHlwZSBleHRlbmRzIHJ1bnRpbWVfNS5NZXNzYWdlVHlwZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuQ3JlYXRlQXJ0aWZhY3RSZXF1ZXN0XCIsIFtcbiAgICAgICAgICAgIHsgbm86IDEsIG5hbWU6IFwid29ya2Zsb3dfcnVuX2JhY2tlbmRfaWRcIiwga2luZDogXCJzY2FsYXJcIiwgVDogOSAvKlNjYWxhclR5cGUuU1RSSU5HKi8gfSxcbiAgICAgICAgICAgIHsgbm86IDIsIG5hbWU6IFwid29ya2Zsb3dfam9iX3J1bl9iYWNrZW5kX2lkXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDkgLypTY2FsYXJUeXBlLlNUUklORyovIH0sXG4gICAgICAgICAgICB7IG5vOiAzLCBuYW1lOiBcIm5hbWVcIiwga2luZDogXCJzY2FsYXJcIiwgVDogOSAvKlNjYWxhclR5cGUuU1RSSU5HKi8gfSxcbiAgICAgICAgICAgIHsgbm86IDQsIG5hbWU6IFwiZXhwaXJlc19hdFwiLCBraW5kOiBcIm1lc3NhZ2VcIiwgVDogKCkgPT4gdGltZXN0YW1wXzEuVGltZXN0YW1wIH0sXG4gICAgICAgICAgICB7IG5vOiA1LCBuYW1lOiBcInZlcnNpb25cIiwga2luZDogXCJzY2FsYXJcIiwgVDogNSAvKlNjYWxhclR5cGUuSU5UMzIqLyB9XG4gICAgICAgIF0pO1xuICAgIH1cbiAgICBjcmVhdGUodmFsdWUpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IHsgd29ya2Zsb3dSdW5CYWNrZW5kSWQ6IFwiXCIsIHdvcmtmbG93Sm9iUnVuQmFja2VuZElkOiBcIlwiLCBuYW1lOiBcIlwiLCB2ZXJzaW9uOiAwIH07XG4gICAgICAgIGdsb2JhbFRoaXMuT2JqZWN0LmRlZmluZVByb3BlcnR5KG1lc3NhZ2UsIHJ1bnRpbWVfNC5NRVNTQUdFX1RZUEUsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0aGlzIH0pO1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICgwLCBydW50aW1lXzMucmVmbGVjdGlvbk1lcmdlUGFydGlhbCkodGhpcywgbWVzc2FnZSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlSZWFkKHJlYWRlciwgbGVuZ3RoLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSB0YXJnZXQgIT09IG51bGwgJiYgdGFyZ2V0ICE9PSB2b2lkIDAgPyB0YXJnZXQgOiB0aGlzLmNyZWF0ZSgpLCBlbmQgPSByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgbGV0IFtmaWVsZE5vLCB3aXJlVHlwZV0gPSByZWFkZXIudGFnKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkTm8pIHtcbiAgICAgICAgICAgICAgICBjYXNlIC8qIHN0cmluZyB3b3JrZmxvd19ydW5fYmFja2VuZF9pZCAqLyAxOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLndvcmtmbG93UnVuQmFja2VuZElkID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIC8qIHN0cmluZyB3b3JrZmxvd19qb2JfcnVuX2JhY2tlbmRfaWQgKi8gMjpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS53b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZCA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBzdHJpbmcgbmFtZSAqLyAzOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLm5hbWUgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgLyogZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCBleHBpcmVzX2F0ICovIDQ6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZXhwaXJlc0F0ID0gdGltZXN0YW1wXzEuVGltZXN0YW1wLmludGVybmFsQmluYXJ5UmVhZChyZWFkZXIsIHJlYWRlci51aW50MzIoKSwgb3B0aW9ucywgbWVzc2FnZS5leHBpcmVzQXQpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIC8qIGludDMyIHZlcnNpb24gKi8gNTpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS52ZXJzaW9uID0gcmVhZGVyLmludDMyKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGxldCB1ID0gb3B0aW9ucy5yZWFkVW5rbm93bkZpZWxkO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSA9PT0gXCJ0aHJvd1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGdsb2JhbFRoaXMuRXJyb3IoYFVua25vd24gZmllbGQgJHtmaWVsZE5vfSAod2lyZSB0eXBlICR7d2lyZVR5cGV9KSBmb3IgJHt0aGlzLnR5cGVOYW1lfWApO1xuICAgICAgICAgICAgICAgICAgICBsZXQgZCA9IHJlYWRlci5za2lwKHdpcmVUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgKHUgPT09IHRydWUgPyBydW50aW1lXzIuVW5rbm93bkZpZWxkSGFuZGxlci5vblJlYWQgOiB1KSh0aGlzLnR5cGVOYW1lLCBtZXNzYWdlLCBmaWVsZE5vLCB3aXJlVHlwZSwgZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5V3JpdGUobWVzc2FnZSwgd3JpdGVyLCBvcHRpb25zKSB7XG4gICAgICAgIC8qIHN0cmluZyB3b3JrZmxvd19ydW5fYmFja2VuZF9pZCA9IDE7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLndvcmtmbG93UnVuQmFja2VuZElkICE9PSBcIlwiKVxuICAgICAgICAgICAgd3JpdGVyLnRhZygxLCBydW50aW1lXzEuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKS5zdHJpbmcobWVzc2FnZS53b3JrZmxvd1J1bkJhY2tlbmRJZCk7XG4gICAgICAgIC8qIHN0cmluZyB3b3JrZmxvd19qb2JfcnVuX2JhY2tlbmRfaWQgPSAyOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS53b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZCAhPT0gXCJcIilcbiAgICAgICAgICAgIHdyaXRlci50YWcoMiwgcnVudGltZV8xLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCkuc3RyaW5nKG1lc3NhZ2Uud29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQpO1xuICAgICAgICAvKiBzdHJpbmcgbmFtZSA9IDM7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLm5hbWUgIT09IFwiXCIpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDMsIHJ1bnRpbWVfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLnN0cmluZyhtZXNzYWdlLm5hbWUpO1xuICAgICAgICAvKiBnb29nbGUucHJvdG9idWYuVGltZXN0YW1wIGV4cGlyZXNfYXQgPSA0OyAqL1xuICAgICAgICBpZiAobWVzc2FnZS5leHBpcmVzQXQpXG4gICAgICAgICAgICB0aW1lc3RhbXBfMS5UaW1lc3RhbXAuaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLmV4cGlyZXNBdCwgd3JpdGVyLnRhZyg0LCBydW50aW1lXzEuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKS5mb3JrKCksIG9wdGlvbnMpLmpvaW4oKTtcbiAgICAgICAgLyogaW50MzIgdmVyc2lvbiA9IDU7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLnZlcnNpb24gIT09IDApXG4gICAgICAgICAgICB3cml0ZXIudGFnKDUsIHJ1bnRpbWVfMS5XaXJlVHlwZS5WYXJpbnQpLmludDMyKG1lc3NhZ2UudmVyc2lvbik7XG4gICAgICAgIGxldCB1ID0gb3B0aW9ucy53cml0ZVVua25vd25GaWVsZHM7XG4gICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICh1ID09IHRydWUgPyBydW50aW1lXzIuVW5rbm93bkZpZWxkSGFuZGxlci5vbldyaXRlIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgd3JpdGVyKTtcbiAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICB9XG59XG4vKipcbiAqIEBnZW5lcmF0ZWQgTWVzc2FnZVR5cGUgZm9yIHByb3RvYnVmIG1lc3NhZ2UgZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuQ3JlYXRlQXJ0aWZhY3RSZXF1ZXN0XG4gKi9cbmV4cG9ydHMuQ3JlYXRlQXJ0aWZhY3RSZXF1ZXN0ID0gbmV3IENyZWF0ZUFydGlmYWN0UmVxdWVzdCRUeXBlKCk7XG4vLyBAZ2VuZXJhdGVkIG1lc3NhZ2UgdHlwZSB3aXRoIHJlZmxlY3Rpb24gaW5mb3JtYXRpb24sIG1heSBwcm92aWRlIHNwZWVkIG9wdGltaXplZCBtZXRob2RzXG5jbGFzcyBDcmVhdGVBcnRpZmFjdFJlc3BvbnNlJFR5cGUgZXh0ZW5kcyBydW50aW1lXzUuTWVzc2FnZVR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcImdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkNyZWF0ZUFydGlmYWN0UmVzcG9uc2VcIiwgW1xuICAgICAgICAgICAgeyBubzogMSwgbmFtZTogXCJva1wiLCBraW5kOiBcInNjYWxhclwiLCBUOiA4IC8qU2NhbGFyVHlwZS5CT09MKi8gfSxcbiAgICAgICAgICAgIHsgbm86IDIsIG5hbWU6IFwic2lnbmVkX3VwbG9hZF91cmxcIiwga2luZDogXCJzY2FsYXJcIiwgVDogOSAvKlNjYWxhclR5cGUuU1RSSU5HKi8gfVxuICAgICAgICBdKTtcbiAgICB9XG4gICAgY3JlYXRlKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7IG9rOiBmYWxzZSwgc2lnbmVkVXBsb2FkVXJsOiBcIlwiIH07XG4gICAgICAgIGdsb2JhbFRoaXMuT2JqZWN0LmRlZmluZVByb3BlcnR5KG1lc3NhZ2UsIHJ1bnRpbWVfNC5NRVNTQUdFX1RZUEUsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0aGlzIH0pO1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICgwLCBydW50aW1lXzMucmVmbGVjdGlvbk1lcmdlUGFydGlhbCkodGhpcywgbWVzc2FnZSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlSZWFkKHJlYWRlciwgbGVuZ3RoLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSB0YXJnZXQgIT09IG51bGwgJiYgdGFyZ2V0ICE9PSB2b2lkIDAgPyB0YXJnZXQgOiB0aGlzLmNyZWF0ZSgpLCBlbmQgPSByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgbGV0IFtmaWVsZE5vLCB3aXJlVHlwZV0gPSByZWFkZXIudGFnKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkTm8pIHtcbiAgICAgICAgICAgICAgICBjYXNlIC8qIGJvb2wgb2sgKi8gMTpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5vayA9IHJlYWRlci5ib29sKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgLyogc3RyaW5nIHNpZ25lZF91cGxvYWRfdXJsICovIDI6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2lnbmVkVXBsb2FkVXJsID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBsZXQgdSA9IG9wdGlvbnMucmVhZFVua25vd25GaWVsZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgPT09IFwidGhyb3dcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBnbG9iYWxUaGlzLkVycm9yKGBVbmtub3duIGZpZWxkICR7ZmllbGROb30gKHdpcmUgdHlwZSAke3dpcmVUeXBlfSkgZm9yICR7dGhpcy50eXBlTmFtZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGQgPSByZWFkZXIuc2tpcCh3aXJlVHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICh1ID09PSB0cnVlID8gcnVudGltZV8yLlVua25vd25GaWVsZEhhbmRsZXIub25SZWFkIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgZmllbGRObywgd2lyZVR5cGUsIGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVdyaXRlKG1lc3NhZ2UsIHdyaXRlciwgb3B0aW9ucykge1xuICAgICAgICAvKiBib29sIG9rID0gMTsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2Uub2sgIT09IGZhbHNlKVxuICAgICAgICAgICAgd3JpdGVyLnRhZygxLCBydW50aW1lXzEuV2lyZVR5cGUuVmFyaW50KS5ib29sKG1lc3NhZ2Uub2spO1xuICAgICAgICAvKiBzdHJpbmcgc2lnbmVkX3VwbG9hZF91cmwgPSAyOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS5zaWduZWRVcGxvYWRVcmwgIT09IFwiXCIpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDIsIHJ1bnRpbWVfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLnN0cmluZyhtZXNzYWdlLnNpZ25lZFVwbG9hZFVybCk7XG4gICAgICAgIGxldCB1ID0gb3B0aW9ucy53cml0ZVVua25vd25GaWVsZHM7XG4gICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICh1ID09IHRydWUgPyBydW50aW1lXzIuVW5rbm93bkZpZWxkSGFuZGxlci5vbldyaXRlIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgd3JpdGVyKTtcbiAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICB9XG59XG4vKipcbiAqIEBnZW5lcmF0ZWQgTWVzc2FnZVR5cGUgZm9yIHByb3RvYnVmIG1lc3NhZ2UgZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuQ3JlYXRlQXJ0aWZhY3RSZXNwb25zZVxuICovXG5leHBvcnRzLkNyZWF0ZUFydGlmYWN0UmVzcG9uc2UgPSBuZXcgQ3JlYXRlQXJ0aWZhY3RSZXNwb25zZSRUeXBlKCk7XG4vLyBAZ2VuZXJhdGVkIG1lc3NhZ2UgdHlwZSB3aXRoIHJlZmxlY3Rpb24gaW5mb3JtYXRpb24sIG1heSBwcm92aWRlIHNwZWVkIG9wdGltaXplZCBtZXRob2RzXG5jbGFzcyBGaW5hbGl6ZUFydGlmYWN0UmVxdWVzdCRUeXBlIGV4dGVuZHMgcnVudGltZV81Lk1lc3NhZ2VUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoXCJnaXRodWIuYWN0aW9ucy5yZXN1bHRzLmFwaS52MS5GaW5hbGl6ZUFydGlmYWN0UmVxdWVzdFwiLCBbXG4gICAgICAgICAgICB7IG5vOiAxLCBuYW1lOiBcIndvcmtmbG93X3J1bl9iYWNrZW5kX2lkXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDkgLypTY2FsYXJUeXBlLlNUUklORyovIH0sXG4gICAgICAgICAgICB7IG5vOiAyLCBuYW1lOiBcIndvcmtmbG93X2pvYl9ydW5fYmFja2VuZF9pZFwiLCBraW5kOiBcInNjYWxhclwiLCBUOiA5IC8qU2NhbGFyVHlwZS5TVFJJTkcqLyB9LFxuICAgICAgICAgICAgeyBubzogMywgbmFtZTogXCJuYW1lXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDkgLypTY2FsYXJUeXBlLlNUUklORyovIH0sXG4gICAgICAgICAgICB7IG5vOiA0LCBuYW1lOiBcInNpemVcIiwga2luZDogXCJzY2FsYXJcIiwgVDogMyAvKlNjYWxhclR5cGUuSU5UNjQqLyB9LFxuICAgICAgICAgICAgeyBubzogNSwgbmFtZTogXCJoYXNoXCIsIGtpbmQ6IFwibWVzc2FnZVwiLCBUOiAoKSA9PiB3cmFwcGVyc18yLlN0cmluZ1ZhbHVlIH1cbiAgICAgICAgXSk7XG4gICAgfVxuICAgIGNyZWF0ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0geyB3b3JrZmxvd1J1bkJhY2tlbmRJZDogXCJcIiwgd29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQ6IFwiXCIsIG5hbWU6IFwiXCIsIHNpemU6IFwiMFwiIH07XG4gICAgICAgIGdsb2JhbFRoaXMuT2JqZWN0LmRlZmluZVByb3BlcnR5KG1lc3NhZ2UsIHJ1bnRpbWVfNC5NRVNTQUdFX1RZUEUsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0aGlzIH0pO1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICgwLCBydW50aW1lXzMucmVmbGVjdGlvbk1lcmdlUGFydGlhbCkodGhpcywgbWVzc2FnZSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlSZWFkKHJlYWRlciwgbGVuZ3RoLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSB0YXJnZXQgIT09IG51bGwgJiYgdGFyZ2V0ICE9PSB2b2lkIDAgPyB0YXJnZXQgOiB0aGlzLmNyZWF0ZSgpLCBlbmQgPSByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgbGV0IFtmaWVsZE5vLCB3aXJlVHlwZV0gPSByZWFkZXIudGFnKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkTm8pIHtcbiAgICAgICAgICAgICAgICBjYXNlIC8qIHN0cmluZyB3b3JrZmxvd19ydW5fYmFja2VuZF9pZCAqLyAxOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLndvcmtmbG93UnVuQmFja2VuZElkID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIC8qIHN0cmluZyB3b3JrZmxvd19qb2JfcnVuX2JhY2tlbmRfaWQgKi8gMjpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS53b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZCA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBzdHJpbmcgbmFtZSAqLyAzOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLm5hbWUgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgLyogaW50NjQgc2l6ZSAqLyA0OlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnNpemUgPSByZWFkZXIuaW50NjQoKS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIC8qIGdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZSBoYXNoICovIDU6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuaGFzaCA9IHdyYXBwZXJzXzIuU3RyaW5nVmFsdWUuaW50ZXJuYWxCaW5hcnlSZWFkKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpLCBvcHRpb25zLCBtZXNzYWdlLmhhc2gpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBsZXQgdSA9IG9wdGlvbnMucmVhZFVua25vd25GaWVsZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgPT09IFwidGhyb3dcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBnbG9iYWxUaGlzLkVycm9yKGBVbmtub3duIGZpZWxkICR7ZmllbGROb30gKHdpcmUgdHlwZSAke3dpcmVUeXBlfSkgZm9yICR7dGhpcy50eXBlTmFtZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGQgPSByZWFkZXIuc2tpcCh3aXJlVHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICh1ID09PSB0cnVlID8gcnVudGltZV8yLlVua25vd25GaWVsZEhhbmRsZXIub25SZWFkIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgZmllbGRObywgd2lyZVR5cGUsIGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVdyaXRlKG1lc3NhZ2UsIHdyaXRlciwgb3B0aW9ucykge1xuICAgICAgICAvKiBzdHJpbmcgd29ya2Zsb3dfcnVuX2JhY2tlbmRfaWQgPSAxOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS53b3JrZmxvd1J1bkJhY2tlbmRJZCAhPT0gXCJcIilcbiAgICAgICAgICAgIHdyaXRlci50YWcoMSwgcnVudGltZV8xLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCkuc3RyaW5nKG1lc3NhZ2Uud29ya2Zsb3dSdW5CYWNrZW5kSWQpO1xuICAgICAgICAvKiBzdHJpbmcgd29ya2Zsb3dfam9iX3J1bl9iYWNrZW5kX2lkID0gMjsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2Uud29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQgIT09IFwiXCIpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDIsIHJ1bnRpbWVfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLnN0cmluZyhtZXNzYWdlLndvcmtmbG93Sm9iUnVuQmFja2VuZElkKTtcbiAgICAgICAgLyogc3RyaW5nIG5hbWUgPSAzOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS5uYW1lICE9PSBcIlwiKVxuICAgICAgICAgICAgd3JpdGVyLnRhZygzLCBydW50aW1lXzEuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKS5zdHJpbmcobWVzc2FnZS5uYW1lKTtcbiAgICAgICAgLyogaW50NjQgc2l6ZSA9IDQ7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLnNpemUgIT09IFwiMFwiKVxuICAgICAgICAgICAgd3JpdGVyLnRhZyg0LCBydW50aW1lXzEuV2lyZVR5cGUuVmFyaW50KS5pbnQ2NChtZXNzYWdlLnNpemUpO1xuICAgICAgICAvKiBnb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUgaGFzaCA9IDU7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLmhhc2gpXG4gICAgICAgICAgICB3cmFwcGVyc18yLlN0cmluZ1ZhbHVlLmludGVybmFsQmluYXJ5V3JpdGUobWVzc2FnZS5oYXNoLCB3cml0ZXIudGFnKDUsIHJ1bnRpbWVfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLmZvcmsoKSwgb3B0aW9ucykuam9pbigpO1xuICAgICAgICBsZXQgdSA9IG9wdGlvbnMud3JpdGVVbmtub3duRmllbGRzO1xuICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAodSA9PSB0cnVlID8gcnVudGltZV8yLlVua25vd25GaWVsZEhhbmRsZXIub25Xcml0ZSA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIHdyaXRlcik7XG4gICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgfVxufVxuLyoqXG4gKiBAZ2VuZXJhdGVkIE1lc3NhZ2VUeXBlIGZvciBwcm90b2J1ZiBtZXNzYWdlIGdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkZpbmFsaXplQXJ0aWZhY3RSZXF1ZXN0XG4gKi9cbmV4cG9ydHMuRmluYWxpemVBcnRpZmFjdFJlcXVlc3QgPSBuZXcgRmluYWxpemVBcnRpZmFjdFJlcXVlc3QkVHlwZSgpO1xuLy8gQGdlbmVyYXRlZCBtZXNzYWdlIHR5cGUgd2l0aCByZWZsZWN0aW9uIGluZm9ybWF0aW9uLCBtYXkgcHJvdmlkZSBzcGVlZCBvcHRpbWl6ZWQgbWV0aG9kc1xuY2xhc3MgRmluYWxpemVBcnRpZmFjdFJlc3BvbnNlJFR5cGUgZXh0ZW5kcyBydW50aW1lXzUuTWVzc2FnZVR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcImdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkZpbmFsaXplQXJ0aWZhY3RSZXNwb25zZVwiLCBbXG4gICAgICAgICAgICB7IG5vOiAxLCBuYW1lOiBcIm9rXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDggLypTY2FsYXJUeXBlLkJPT0wqLyB9LFxuICAgICAgICAgICAgeyBubzogMiwgbmFtZTogXCJhcnRpZmFjdF9pZFwiLCBraW5kOiBcInNjYWxhclwiLCBUOiAzIC8qU2NhbGFyVHlwZS5JTlQ2NCovIH1cbiAgICAgICAgXSk7XG4gICAgfVxuICAgIGNyZWF0ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0geyBvazogZmFsc2UsIGFydGlmYWN0SWQ6IFwiMFwiIH07XG4gICAgICAgIGdsb2JhbFRoaXMuT2JqZWN0LmRlZmluZVByb3BlcnR5KG1lc3NhZ2UsIHJ1bnRpbWVfNC5NRVNTQUdFX1RZUEUsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0aGlzIH0pO1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICgwLCBydW50aW1lXzMucmVmbGVjdGlvbk1lcmdlUGFydGlhbCkodGhpcywgbWVzc2FnZSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlSZWFkKHJlYWRlciwgbGVuZ3RoLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSB0YXJnZXQgIT09IG51bGwgJiYgdGFyZ2V0ICE9PSB2b2lkIDAgPyB0YXJnZXQgOiB0aGlzLmNyZWF0ZSgpLCBlbmQgPSByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgbGV0IFtmaWVsZE5vLCB3aXJlVHlwZV0gPSByZWFkZXIudGFnKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkTm8pIHtcbiAgICAgICAgICAgICAgICBjYXNlIC8qIGJvb2wgb2sgKi8gMTpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5vayA9IHJlYWRlci5ib29sKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgLyogaW50NjQgYXJ0aWZhY3RfaWQgKi8gMjpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5hcnRpZmFjdElkID0gcmVhZGVyLmludDY0KCkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBvcHRpb25zLnJlYWRVbmtub3duRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ID09PSBcInRocm93XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZ2xvYmFsVGhpcy5FcnJvcihgVW5rbm93biBmaWVsZCAke2ZpZWxkTm99ICh3aXJlIHR5cGUgJHt3aXJlVHlwZX0pIGZvciAke3RoaXMudHlwZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkID0gcmVhZGVyLnNraXAod2lyZVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAodSA9PT0gdHJ1ZSA/IHJ1bnRpbWVfMi5Vbmtub3duRmllbGRIYW5kbGVyLm9uUmVhZCA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIGZpZWxkTm8sIHdpcmVUeXBlLCBkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLCB3cml0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgLyogYm9vbCBvayA9IDE7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLm9rICE9PSBmYWxzZSlcbiAgICAgICAgICAgIHdyaXRlci50YWcoMSwgcnVudGltZV8xLldpcmVUeXBlLlZhcmludCkuYm9vbChtZXNzYWdlLm9rKTtcbiAgICAgICAgLyogaW50NjQgYXJ0aWZhY3RfaWQgPSAyOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS5hcnRpZmFjdElkICE9PSBcIjBcIilcbiAgICAgICAgICAgIHdyaXRlci50YWcoMiwgcnVudGltZV8xLldpcmVUeXBlLlZhcmludCkuaW50NjQobWVzc2FnZS5hcnRpZmFjdElkKTtcbiAgICAgICAgbGV0IHUgPSBvcHRpb25zLndyaXRlVW5rbm93bkZpZWxkcztcbiAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgKHUgPT0gdHJ1ZSA/IHJ1bnRpbWVfMi5Vbmtub3duRmllbGRIYW5kbGVyLm9uV3JpdGUgOiB1KSh0aGlzLnR5cGVOYW1lLCBtZXNzYWdlLCB3cml0ZXIpO1xuICAgICAgICByZXR1cm4gd3JpdGVyO1xuICAgIH1cbn1cbi8qKlxuICogQGdlbmVyYXRlZCBNZXNzYWdlVHlwZSBmb3IgcHJvdG9idWYgbWVzc2FnZSBnaXRodWIuYWN0aW9ucy5yZXN1bHRzLmFwaS52MS5GaW5hbGl6ZUFydGlmYWN0UmVzcG9uc2VcbiAqL1xuZXhwb3J0cy5GaW5hbGl6ZUFydGlmYWN0UmVzcG9uc2UgPSBuZXcgRmluYWxpemVBcnRpZmFjdFJlc3BvbnNlJFR5cGUoKTtcbi8vIEBnZW5lcmF0ZWQgbWVzc2FnZSB0eXBlIHdpdGggcmVmbGVjdGlvbiBpbmZvcm1hdGlvbiwgbWF5IHByb3ZpZGUgc3BlZWQgb3B0aW1pemVkIG1ldGhvZHNcbmNsYXNzIExpc3RBcnRpZmFjdHNSZXF1ZXN0JFR5cGUgZXh0ZW5kcyBydW50aW1lXzUuTWVzc2FnZVR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcImdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkxpc3RBcnRpZmFjdHNSZXF1ZXN0XCIsIFtcbiAgICAgICAgICAgIHsgbm86IDEsIG5hbWU6IFwid29ya2Zsb3dfcnVuX2JhY2tlbmRfaWRcIiwga2luZDogXCJzY2FsYXJcIiwgVDogOSAvKlNjYWxhclR5cGUuU1RSSU5HKi8gfSxcbiAgICAgICAgICAgIHsgbm86IDIsIG5hbWU6IFwid29ya2Zsb3dfam9iX3J1bl9iYWNrZW5kX2lkXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDkgLypTY2FsYXJUeXBlLlNUUklORyovIH0sXG4gICAgICAgICAgICB7IG5vOiAzLCBuYW1lOiBcIm5hbWVfZmlsdGVyXCIsIGtpbmQ6IFwibWVzc2FnZVwiLCBUOiAoKSA9PiB3cmFwcGVyc18yLlN0cmluZ1ZhbHVlIH0sXG4gICAgICAgICAgICB7IG5vOiA0LCBuYW1lOiBcImlkX2ZpbHRlclwiLCBraW5kOiBcIm1lc3NhZ2VcIiwgVDogKCkgPT4gd3JhcHBlcnNfMS5JbnQ2NFZhbHVlIH1cbiAgICAgICAgXSk7XG4gICAgfVxuICAgIGNyZWF0ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0geyB3b3JrZmxvd1J1bkJhY2tlbmRJZDogXCJcIiwgd29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQ6IFwiXCIgfTtcbiAgICAgICAgZ2xvYmFsVGhpcy5PYmplY3QuZGVmaW5lUHJvcGVydHkobWVzc2FnZSwgcnVudGltZV80Lk1FU1NBR0VfVFlQRSwgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRoaXMgfSk7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgKDAsIHJ1bnRpbWVfMy5yZWZsZWN0aW9uTWVyZ2VQYXJ0aWFsKSh0aGlzLCBtZXNzYWdlLCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVJlYWQocmVhZGVyLCBsZW5ndGgsIG9wdGlvbnMsIHRhcmdldCkge1xuICAgICAgICBsZXQgbWVzc2FnZSA9IHRhcmdldCAhPT0gbnVsbCAmJiB0YXJnZXQgIT09IHZvaWQgMCA/IHRhcmdldCA6IHRoaXMuY3JlYXRlKCksIGVuZCA9IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICBsZXQgW2ZpZWxkTm8sIHdpcmVUeXBlXSA9IHJlYWRlci50YWcoKTtcbiAgICAgICAgICAgIHN3aXRjaCAoZmllbGRObykge1xuICAgICAgICAgICAgICAgIGNhc2UgLyogc3RyaW5nIHdvcmtmbG93X3J1bl9iYWNrZW5kX2lkICovIDE6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uud29ya2Zsb3dSdW5CYWNrZW5kSWQgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgLyogc3RyaW5nIHdvcmtmbG93X2pvYl9ydW5fYmFja2VuZF9pZCAqLyAyOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLndvcmtmbG93Sm9iUnVuQmFja2VuZElkID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIC8qIGdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZSBuYW1lX2ZpbHRlciAqLyAzOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLm5hbWVGaWx0ZXIgPSB3cmFwcGVyc18yLlN0cmluZ1ZhbHVlLmludGVybmFsQmluYXJ5UmVhZChyZWFkZXIsIHJlYWRlci51aW50MzIoKSwgb3B0aW9ucywgbWVzc2FnZS5uYW1lRmlsdGVyKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBnb29nbGUucHJvdG9idWYuSW50NjRWYWx1ZSBpZF9maWx0ZXIgKi8gNDpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5pZEZpbHRlciA9IHdyYXBwZXJzXzEuSW50NjRWYWx1ZS5pbnRlcm5hbEJpbmFyeVJlYWQocmVhZGVyLCByZWFkZXIudWludDMyKCksIG9wdGlvbnMsIG1lc3NhZ2UuaWRGaWx0ZXIpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBsZXQgdSA9IG9wdGlvbnMucmVhZFVua25vd25GaWVsZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgPT09IFwidGhyb3dcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBnbG9iYWxUaGlzLkVycm9yKGBVbmtub3duIGZpZWxkICR7ZmllbGROb30gKHdpcmUgdHlwZSAke3dpcmVUeXBlfSkgZm9yICR7dGhpcy50eXBlTmFtZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGQgPSByZWFkZXIuc2tpcCh3aXJlVHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICh1ID09PSB0cnVlID8gcnVudGltZV8yLlVua25vd25GaWVsZEhhbmRsZXIub25SZWFkIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgZmllbGRObywgd2lyZVR5cGUsIGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVdyaXRlKG1lc3NhZ2UsIHdyaXRlciwgb3B0aW9ucykge1xuICAgICAgICAvKiBzdHJpbmcgd29ya2Zsb3dfcnVuX2JhY2tlbmRfaWQgPSAxOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS53b3JrZmxvd1J1bkJhY2tlbmRJZCAhPT0gXCJcIilcbiAgICAgICAgICAgIHdyaXRlci50YWcoMSwgcnVudGltZV8xLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCkuc3RyaW5nKG1lc3NhZ2Uud29ya2Zsb3dSdW5CYWNrZW5kSWQpO1xuICAgICAgICAvKiBzdHJpbmcgd29ya2Zsb3dfam9iX3J1bl9iYWNrZW5kX2lkID0gMjsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2Uud29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQgIT09IFwiXCIpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDIsIHJ1bnRpbWVfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLnN0cmluZyhtZXNzYWdlLndvcmtmbG93Sm9iUnVuQmFja2VuZElkKTtcbiAgICAgICAgLyogZ29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlIG5hbWVfZmlsdGVyID0gMzsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2UubmFtZUZpbHRlcilcbiAgICAgICAgICAgIHdyYXBwZXJzXzIuU3RyaW5nVmFsdWUuaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLm5hbWVGaWx0ZXIsIHdyaXRlci50YWcoMywgcnVudGltZV8xLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCkuZm9yaygpLCBvcHRpb25zKS5qb2luKCk7XG4gICAgICAgIC8qIGdvb2dsZS5wcm90b2J1Zi5JbnQ2NFZhbHVlIGlkX2ZpbHRlciA9IDQ7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLmlkRmlsdGVyKVxuICAgICAgICAgICAgd3JhcHBlcnNfMS5JbnQ2NFZhbHVlLmludGVybmFsQmluYXJ5V3JpdGUobWVzc2FnZS5pZEZpbHRlciwgd3JpdGVyLnRhZyg0LCBydW50aW1lXzEuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKS5mb3JrKCksIG9wdGlvbnMpLmpvaW4oKTtcbiAgICAgICAgbGV0IHUgPSBvcHRpb25zLndyaXRlVW5rbm93bkZpZWxkcztcbiAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgKHUgPT0gdHJ1ZSA/IHJ1bnRpbWVfMi5Vbmtub3duRmllbGRIYW5kbGVyLm9uV3JpdGUgOiB1KSh0aGlzLnR5cGVOYW1lLCBtZXNzYWdlLCB3cml0ZXIpO1xuICAgICAgICByZXR1cm4gd3JpdGVyO1xuICAgIH1cbn1cbi8qKlxuICogQGdlbmVyYXRlZCBNZXNzYWdlVHlwZSBmb3IgcHJvdG9idWYgbWVzc2FnZSBnaXRodWIuYWN0aW9ucy5yZXN1bHRzLmFwaS52MS5MaXN0QXJ0aWZhY3RzUmVxdWVzdFxuICovXG5leHBvcnRzLkxpc3RBcnRpZmFjdHNSZXF1ZXN0ID0gbmV3IExpc3RBcnRpZmFjdHNSZXF1ZXN0JFR5cGUoKTtcbi8vIEBnZW5lcmF0ZWQgbWVzc2FnZSB0eXBlIHdpdGggcmVmbGVjdGlvbiBpbmZvcm1hdGlvbiwgbWF5IHByb3ZpZGUgc3BlZWQgb3B0aW1pemVkIG1ldGhvZHNcbmNsYXNzIExpc3RBcnRpZmFjdHNSZXNwb25zZSRUeXBlIGV4dGVuZHMgcnVudGltZV81Lk1lc3NhZ2VUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoXCJnaXRodWIuYWN0aW9ucy5yZXN1bHRzLmFwaS52MS5MaXN0QXJ0aWZhY3RzUmVzcG9uc2VcIiwgW1xuICAgICAgICAgICAgeyBubzogMSwgbmFtZTogXCJhcnRpZmFjdHNcIiwga2luZDogXCJtZXNzYWdlXCIsIHJlcGVhdDogMSAvKlJlcGVhdFR5cGUuUEFDS0VEKi8sIFQ6ICgpID0+IGV4cG9ydHMuTGlzdEFydGlmYWN0c1Jlc3BvbnNlX01vbm9saXRoQXJ0aWZhY3QgfVxuICAgICAgICBdKTtcbiAgICB9XG4gICAgY3JlYXRlKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7IGFydGlmYWN0czogW10gfTtcbiAgICAgICAgZ2xvYmFsVGhpcy5PYmplY3QuZGVmaW5lUHJvcGVydHkobWVzc2FnZSwgcnVudGltZV80Lk1FU1NBR0VfVFlQRSwgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRoaXMgfSk7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgKDAsIHJ1bnRpbWVfMy5yZWZsZWN0aW9uTWVyZ2VQYXJ0aWFsKSh0aGlzLCBtZXNzYWdlLCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVJlYWQocmVhZGVyLCBsZW5ndGgsIG9wdGlvbnMsIHRhcmdldCkge1xuICAgICAgICBsZXQgbWVzc2FnZSA9IHRhcmdldCAhPT0gbnVsbCAmJiB0YXJnZXQgIT09IHZvaWQgMCA/IHRhcmdldCA6IHRoaXMuY3JlYXRlKCksIGVuZCA9IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICBsZXQgW2ZpZWxkTm8sIHdpcmVUeXBlXSA9IHJlYWRlci50YWcoKTtcbiAgICAgICAgICAgIHN3aXRjaCAoZmllbGRObykge1xuICAgICAgICAgICAgICAgIGNhc2UgLyogcmVwZWF0ZWQgZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuTGlzdEFydGlmYWN0c1Jlc3BvbnNlLk1vbm9saXRoQXJ0aWZhY3QgYXJ0aWZhY3RzICovIDE6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYXJ0aWZhY3RzLnB1c2goZXhwb3J0cy5MaXN0QXJ0aWZhY3RzUmVzcG9uc2VfTW9ub2xpdGhBcnRpZmFjdC5pbnRlcm5hbEJpbmFyeVJlYWQocmVhZGVyLCByZWFkZXIudWludDMyKCksIG9wdGlvbnMpKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBvcHRpb25zLnJlYWRVbmtub3duRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ID09PSBcInRocm93XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZ2xvYmFsVGhpcy5FcnJvcihgVW5rbm93biBmaWVsZCAke2ZpZWxkTm99ICh3aXJlIHR5cGUgJHt3aXJlVHlwZX0pIGZvciAke3RoaXMudHlwZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkID0gcmVhZGVyLnNraXAod2lyZVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAodSA9PT0gdHJ1ZSA/IHJ1bnRpbWVfMi5Vbmtub3duRmllbGRIYW5kbGVyLm9uUmVhZCA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIGZpZWxkTm8sIHdpcmVUeXBlLCBkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLCB3cml0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgLyogcmVwZWF0ZWQgZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuTGlzdEFydGlmYWN0c1Jlc3BvbnNlLk1vbm9saXRoQXJ0aWZhY3QgYXJ0aWZhY3RzID0gMTsgKi9cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtZXNzYWdlLmFydGlmYWN0cy5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIGV4cG9ydHMuTGlzdEFydGlmYWN0c1Jlc3BvbnNlX01vbm9saXRoQXJ0aWZhY3QuaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLmFydGlmYWN0c1tpXSwgd3JpdGVyLnRhZygxLCBydW50aW1lXzEuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKS5mb3JrKCksIG9wdGlvbnMpLmpvaW4oKTtcbiAgICAgICAgbGV0IHUgPSBvcHRpb25zLndyaXRlVW5rbm93bkZpZWxkcztcbiAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgKHUgPT0gdHJ1ZSA/IHJ1bnRpbWVfMi5Vbmtub3duRmllbGRIYW5kbGVyLm9uV3JpdGUgOiB1KSh0aGlzLnR5cGVOYW1lLCBtZXNzYWdlLCB3cml0ZXIpO1xuICAgICAgICByZXR1cm4gd3JpdGVyO1xuICAgIH1cbn1cbi8qKlxuICogQGdlbmVyYXRlZCBNZXNzYWdlVHlwZSBmb3IgcHJvdG9idWYgbWVzc2FnZSBnaXRodWIuYWN0aW9ucy5yZXN1bHRzLmFwaS52MS5MaXN0QXJ0aWZhY3RzUmVzcG9uc2VcbiAqL1xuZXhwb3J0cy5MaXN0QXJ0aWZhY3RzUmVzcG9uc2UgPSBuZXcgTGlzdEFydGlmYWN0c1Jlc3BvbnNlJFR5cGUoKTtcbi8vIEBnZW5lcmF0ZWQgbWVzc2FnZSB0eXBlIHdpdGggcmVmbGVjdGlvbiBpbmZvcm1hdGlvbiwgbWF5IHByb3ZpZGUgc3BlZWQgb3B0aW1pemVkIG1ldGhvZHNcbmNsYXNzIExpc3RBcnRpZmFjdHNSZXNwb25zZV9Nb25vbGl0aEFydGlmYWN0JFR5cGUgZXh0ZW5kcyBydW50aW1lXzUuTWVzc2FnZVR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcImdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkxpc3RBcnRpZmFjdHNSZXNwb25zZS5Nb25vbGl0aEFydGlmYWN0XCIsIFtcbiAgICAgICAgICAgIHsgbm86IDEsIG5hbWU6IFwid29ya2Zsb3dfcnVuX2JhY2tlbmRfaWRcIiwga2luZDogXCJzY2FsYXJcIiwgVDogOSAvKlNjYWxhclR5cGUuU1RSSU5HKi8gfSxcbiAgICAgICAgICAgIHsgbm86IDIsIG5hbWU6IFwid29ya2Zsb3dfam9iX3J1bl9iYWNrZW5kX2lkXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDkgLypTY2FsYXJUeXBlLlNUUklORyovIH0sXG4gICAgICAgICAgICB7IG5vOiAzLCBuYW1lOiBcImRhdGFiYXNlX2lkXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDMgLypTY2FsYXJUeXBlLklOVDY0Ki8gfSxcbiAgICAgICAgICAgIHsgbm86IDQsIG5hbWU6IFwibmFtZVwiLCBraW5kOiBcInNjYWxhclwiLCBUOiA5IC8qU2NhbGFyVHlwZS5TVFJJTkcqLyB9LFxuICAgICAgICAgICAgeyBubzogNSwgbmFtZTogXCJzaXplXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDMgLypTY2FsYXJUeXBlLklOVDY0Ki8gfSxcbiAgICAgICAgICAgIHsgbm86IDYsIG5hbWU6IFwiY3JlYXRlZF9hdFwiLCBraW5kOiBcIm1lc3NhZ2VcIiwgVDogKCkgPT4gdGltZXN0YW1wXzEuVGltZXN0YW1wIH1cbiAgICAgICAgXSk7XG4gICAgfVxuICAgIGNyZWF0ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0geyB3b3JrZmxvd1J1bkJhY2tlbmRJZDogXCJcIiwgd29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQ6IFwiXCIsIGRhdGFiYXNlSWQ6IFwiMFwiLCBuYW1lOiBcIlwiLCBzaXplOiBcIjBcIiB9O1xuICAgICAgICBnbG9iYWxUaGlzLk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZXNzYWdlLCBydW50aW1lXzQuTUVTU0FHRV9UWVBFLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdGhpcyB9KTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAoMCwgcnVudGltZV8zLnJlZmxlY3Rpb25NZXJnZVBhcnRpYWwpKHRoaXMsIG1lc3NhZ2UsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5UmVhZChyZWFkZXIsIGxlbmd0aCwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGxldCBtZXNzYWdlID0gdGFyZ2V0ICE9PSBudWxsICYmIHRhcmdldCAhPT0gdm9pZCAwID8gdGFyZ2V0IDogdGhpcy5jcmVhdGUoKSwgZW5kID0gcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgIGxldCBbZmllbGRObywgd2lyZVR5cGVdID0gcmVhZGVyLnRhZygpO1xuICAgICAgICAgICAgc3dpdGNoIChmaWVsZE5vKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBzdHJpbmcgd29ya2Zsb3dfcnVuX2JhY2tlbmRfaWQgKi8gMTpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS53b3JrZmxvd1J1bkJhY2tlbmRJZCA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBzdHJpbmcgd29ya2Zsb3dfam9iX3J1bl9iYWNrZW5kX2lkICovIDI6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uud29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgLyogaW50NjQgZGF0YWJhc2VfaWQgKi8gMzpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5kYXRhYmFzZUlkID0gcmVhZGVyLmludDY0KCkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBzdHJpbmcgbmFtZSAqLyA0OlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLm5hbWUgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgLyogaW50NjQgc2l6ZSAqLyA1OlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnNpemUgPSByZWFkZXIuaW50NjQoKS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIC8qIGdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAgY3JlYXRlZF9hdCAqLyA2OlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmNyZWF0ZWRBdCA9IHRpbWVzdGFtcF8xLlRpbWVzdGFtcC5pbnRlcm5hbEJpbmFyeVJlYWQocmVhZGVyLCByZWFkZXIudWludDMyKCksIG9wdGlvbnMsIG1lc3NhZ2UuY3JlYXRlZEF0KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBvcHRpb25zLnJlYWRVbmtub3duRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ID09PSBcInRocm93XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZ2xvYmFsVGhpcy5FcnJvcihgVW5rbm93biBmaWVsZCAke2ZpZWxkTm99ICh3aXJlIHR5cGUgJHt3aXJlVHlwZX0pIGZvciAke3RoaXMudHlwZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkID0gcmVhZGVyLnNraXAod2lyZVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAodSA9PT0gdHJ1ZSA/IHJ1bnRpbWVfMi5Vbmtub3duRmllbGRIYW5kbGVyLm9uUmVhZCA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIGZpZWxkTm8sIHdpcmVUeXBlLCBkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLCB3cml0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgLyogc3RyaW5nIHdvcmtmbG93X3J1bl9iYWNrZW5kX2lkID0gMTsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2Uud29ya2Zsb3dSdW5CYWNrZW5kSWQgIT09IFwiXCIpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDEsIHJ1bnRpbWVfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLnN0cmluZyhtZXNzYWdlLndvcmtmbG93UnVuQmFja2VuZElkKTtcbiAgICAgICAgLyogc3RyaW5nIHdvcmtmbG93X2pvYl9ydW5fYmFja2VuZF9pZCA9IDI7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLndvcmtmbG93Sm9iUnVuQmFja2VuZElkICE9PSBcIlwiKVxuICAgICAgICAgICAgd3JpdGVyLnRhZygyLCBydW50aW1lXzEuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKS5zdHJpbmcobWVzc2FnZS53b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZCk7XG4gICAgICAgIC8qIGludDY0IGRhdGFiYXNlX2lkID0gMzsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2UuZGF0YWJhc2VJZCAhPT0gXCIwXCIpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDMsIHJ1bnRpbWVfMS5XaXJlVHlwZS5WYXJpbnQpLmludDY0KG1lc3NhZ2UuZGF0YWJhc2VJZCk7XG4gICAgICAgIC8qIHN0cmluZyBuYW1lID0gNDsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2UubmFtZSAhPT0gXCJcIilcbiAgICAgICAgICAgIHdyaXRlci50YWcoNCwgcnVudGltZV8xLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCkuc3RyaW5nKG1lc3NhZ2UubmFtZSk7XG4gICAgICAgIC8qIGludDY0IHNpemUgPSA1OyAqL1xuICAgICAgICBpZiAobWVzc2FnZS5zaXplICE9PSBcIjBcIilcbiAgICAgICAgICAgIHdyaXRlci50YWcoNSwgcnVudGltZV8xLldpcmVUeXBlLlZhcmludCkuaW50NjQobWVzc2FnZS5zaXplKTtcbiAgICAgICAgLyogZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCBjcmVhdGVkX2F0ID0gNjsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2UuY3JlYXRlZEF0KVxuICAgICAgICAgICAgdGltZXN0YW1wXzEuVGltZXN0YW1wLmludGVybmFsQmluYXJ5V3JpdGUobWVzc2FnZS5jcmVhdGVkQXQsIHdyaXRlci50YWcoNiwgcnVudGltZV8xLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCkuZm9yaygpLCBvcHRpb25zKS5qb2luKCk7XG4gICAgICAgIGxldCB1ID0gb3B0aW9ucy53cml0ZVVua25vd25GaWVsZHM7XG4gICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICh1ID09IHRydWUgPyBydW50aW1lXzIuVW5rbm93bkZpZWxkSGFuZGxlci5vbldyaXRlIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgd3JpdGVyKTtcbiAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICB9XG59XG4vKipcbiAqIEBnZW5lcmF0ZWQgTWVzc2FnZVR5cGUgZm9yIHByb3RvYnVmIG1lc3NhZ2UgZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuTGlzdEFydGlmYWN0c1Jlc3BvbnNlLk1vbm9saXRoQXJ0aWZhY3RcbiAqL1xuZXhwb3J0cy5MaXN0QXJ0aWZhY3RzUmVzcG9uc2VfTW9ub2xpdGhBcnRpZmFjdCA9IG5ldyBMaXN0QXJ0aWZhY3RzUmVzcG9uc2VfTW9ub2xpdGhBcnRpZmFjdCRUeXBlKCk7XG4vLyBAZ2VuZXJhdGVkIG1lc3NhZ2UgdHlwZSB3aXRoIHJlZmxlY3Rpb24gaW5mb3JtYXRpb24sIG1heSBwcm92aWRlIHNwZWVkIG9wdGltaXplZCBtZXRob2RzXG5jbGFzcyBHZXRTaWduZWRBcnRpZmFjdFVSTFJlcXVlc3QkVHlwZSBleHRlbmRzIHJ1bnRpbWVfNS5NZXNzYWdlVHlwZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuR2V0U2lnbmVkQXJ0aWZhY3RVUkxSZXF1ZXN0XCIsIFtcbiAgICAgICAgICAgIHsgbm86IDEsIG5hbWU6IFwid29ya2Zsb3dfcnVuX2JhY2tlbmRfaWRcIiwga2luZDogXCJzY2FsYXJcIiwgVDogOSAvKlNjYWxhclR5cGUuU1RSSU5HKi8gfSxcbiAgICAgICAgICAgIHsgbm86IDIsIG5hbWU6IFwid29ya2Zsb3dfam9iX3J1bl9iYWNrZW5kX2lkXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDkgLypTY2FsYXJUeXBlLlNUUklORyovIH0sXG4gICAgICAgICAgICB7IG5vOiAzLCBuYW1lOiBcIm5hbWVcIiwga2luZDogXCJzY2FsYXJcIiwgVDogOSAvKlNjYWxhclR5cGUuU1RSSU5HKi8gfVxuICAgICAgICBdKTtcbiAgICB9XG4gICAgY3JlYXRlKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7IHdvcmtmbG93UnVuQmFja2VuZElkOiBcIlwiLCB3b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZDogXCJcIiwgbmFtZTogXCJcIiB9O1xuICAgICAgICBnbG9iYWxUaGlzLk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZXNzYWdlLCBydW50aW1lXzQuTUVTU0FHRV9UWVBFLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdGhpcyB9KTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAoMCwgcnVudGltZV8zLnJlZmxlY3Rpb25NZXJnZVBhcnRpYWwpKHRoaXMsIG1lc3NhZ2UsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5UmVhZChyZWFkZXIsIGxlbmd0aCwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGxldCBtZXNzYWdlID0gdGFyZ2V0ICE9PSBudWxsICYmIHRhcmdldCAhPT0gdm9pZCAwID8gdGFyZ2V0IDogdGhpcy5jcmVhdGUoKSwgZW5kID0gcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgIGxldCBbZmllbGRObywgd2lyZVR5cGVdID0gcmVhZGVyLnRhZygpO1xuICAgICAgICAgICAgc3dpdGNoIChmaWVsZE5vKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBzdHJpbmcgd29ya2Zsb3dfcnVuX2JhY2tlbmRfaWQgKi8gMTpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS53b3JrZmxvd1J1bkJhY2tlbmRJZCA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBzdHJpbmcgd29ya2Zsb3dfam9iX3J1bl9iYWNrZW5kX2lkICovIDI6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uud29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgLyogc3RyaW5nIG5hbWUgKi8gMzpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5uYW1lID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBsZXQgdSA9IG9wdGlvbnMucmVhZFVua25vd25GaWVsZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgPT09IFwidGhyb3dcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBnbG9iYWxUaGlzLkVycm9yKGBVbmtub3duIGZpZWxkICR7ZmllbGROb30gKHdpcmUgdHlwZSAke3dpcmVUeXBlfSkgZm9yICR7dGhpcy50eXBlTmFtZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGQgPSByZWFkZXIuc2tpcCh3aXJlVHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICh1ID09PSB0cnVlID8gcnVudGltZV8yLlVua25vd25GaWVsZEhhbmRsZXIub25SZWFkIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgZmllbGRObywgd2lyZVR5cGUsIGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVdyaXRlKG1lc3NhZ2UsIHdyaXRlciwgb3B0aW9ucykge1xuICAgICAgICAvKiBzdHJpbmcgd29ya2Zsb3dfcnVuX2JhY2tlbmRfaWQgPSAxOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS53b3JrZmxvd1J1bkJhY2tlbmRJZCAhPT0gXCJcIilcbiAgICAgICAgICAgIHdyaXRlci50YWcoMSwgcnVudGltZV8xLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCkuc3RyaW5nKG1lc3NhZ2Uud29ya2Zsb3dSdW5CYWNrZW5kSWQpO1xuICAgICAgICAvKiBzdHJpbmcgd29ya2Zsb3dfam9iX3J1bl9iYWNrZW5kX2lkID0gMjsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2Uud29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQgIT09IFwiXCIpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDIsIHJ1bnRpbWVfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLnN0cmluZyhtZXNzYWdlLndvcmtmbG93Sm9iUnVuQmFja2VuZElkKTtcbiAgICAgICAgLyogc3RyaW5nIG5hbWUgPSAzOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS5uYW1lICE9PSBcIlwiKVxuICAgICAgICAgICAgd3JpdGVyLnRhZygzLCBydW50aW1lXzEuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKS5zdHJpbmcobWVzc2FnZS5uYW1lKTtcbiAgICAgICAgbGV0IHUgPSBvcHRpb25zLndyaXRlVW5rbm93bkZpZWxkcztcbiAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgKHUgPT0gdHJ1ZSA/IHJ1bnRpbWVfMi5Vbmtub3duRmllbGRIYW5kbGVyLm9uV3JpdGUgOiB1KSh0aGlzLnR5cGVOYW1lLCBtZXNzYWdlLCB3cml0ZXIpO1xuICAgICAgICByZXR1cm4gd3JpdGVyO1xuICAgIH1cbn1cbi8qKlxuICogQGdlbmVyYXRlZCBNZXNzYWdlVHlwZSBmb3IgcHJvdG9idWYgbWVzc2FnZSBnaXRodWIuYWN0aW9ucy5yZXN1bHRzLmFwaS52MS5HZXRTaWduZWRBcnRpZmFjdFVSTFJlcXVlc3RcbiAqL1xuZXhwb3J0cy5HZXRTaWduZWRBcnRpZmFjdFVSTFJlcXVlc3QgPSBuZXcgR2V0U2lnbmVkQXJ0aWZhY3RVUkxSZXF1ZXN0JFR5cGUoKTtcbi8vIEBnZW5lcmF0ZWQgbWVzc2FnZSB0eXBlIHdpdGggcmVmbGVjdGlvbiBpbmZvcm1hdGlvbiwgbWF5IHByb3ZpZGUgc3BlZWQgb3B0aW1pemVkIG1ldGhvZHNcbmNsYXNzIEdldFNpZ25lZEFydGlmYWN0VVJMUmVzcG9uc2UkVHlwZSBleHRlbmRzIHJ1bnRpbWVfNS5NZXNzYWdlVHlwZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuR2V0U2lnbmVkQXJ0aWZhY3RVUkxSZXNwb25zZVwiLCBbXG4gICAgICAgICAgICB7IG5vOiAxLCBuYW1lOiBcInNpZ25lZF91cmxcIiwga2luZDogXCJzY2FsYXJcIiwgVDogOSAvKlNjYWxhclR5cGUuU1RSSU5HKi8gfVxuICAgICAgICBdKTtcbiAgICB9XG4gICAgY3JlYXRlKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7IHNpZ25lZFVybDogXCJcIiB9O1xuICAgICAgICBnbG9iYWxUaGlzLk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZXNzYWdlLCBydW50aW1lXzQuTUVTU0FHRV9UWVBFLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdGhpcyB9KTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAoMCwgcnVudGltZV8zLnJlZmxlY3Rpb25NZXJnZVBhcnRpYWwpKHRoaXMsIG1lc3NhZ2UsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5UmVhZChyZWFkZXIsIGxlbmd0aCwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGxldCBtZXNzYWdlID0gdGFyZ2V0ICE9PSBudWxsICYmIHRhcmdldCAhPT0gdm9pZCAwID8gdGFyZ2V0IDogdGhpcy5jcmVhdGUoKSwgZW5kID0gcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgIGxldCBbZmllbGRObywgd2lyZVR5cGVdID0gcmVhZGVyLnRhZygpO1xuICAgICAgICAgICAgc3dpdGNoIChmaWVsZE5vKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBzdHJpbmcgc2lnbmVkX3VybCAqLyAxOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnNpZ25lZFVybCA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBvcHRpb25zLnJlYWRVbmtub3duRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ID09PSBcInRocm93XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZ2xvYmFsVGhpcy5FcnJvcihgVW5rbm93biBmaWVsZCAke2ZpZWxkTm99ICh3aXJlIHR5cGUgJHt3aXJlVHlwZX0pIGZvciAke3RoaXMudHlwZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkID0gcmVhZGVyLnNraXAod2lyZVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAodSA9PT0gdHJ1ZSA/IHJ1bnRpbWVfMi5Vbmtub3duRmllbGRIYW5kbGVyLm9uUmVhZCA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIGZpZWxkTm8sIHdpcmVUeXBlLCBkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLCB3cml0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgLyogc3RyaW5nIHNpZ25lZF91cmwgPSAxOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS5zaWduZWRVcmwgIT09IFwiXCIpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDEsIHJ1bnRpbWVfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLnN0cmluZyhtZXNzYWdlLnNpZ25lZFVybCk7XG4gICAgICAgIGxldCB1ID0gb3B0aW9ucy53cml0ZVVua25vd25GaWVsZHM7XG4gICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICh1ID09IHRydWUgPyBydW50aW1lXzIuVW5rbm93bkZpZWxkSGFuZGxlci5vbldyaXRlIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgd3JpdGVyKTtcbiAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICB9XG59XG4vKipcbiAqIEBnZW5lcmF0ZWQgTWVzc2FnZVR5cGUgZm9yIHByb3RvYnVmIG1lc3NhZ2UgZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuR2V0U2lnbmVkQXJ0aWZhY3RVUkxSZXNwb25zZVxuICovXG5leHBvcnRzLkdldFNpZ25lZEFydGlmYWN0VVJMUmVzcG9uc2UgPSBuZXcgR2V0U2lnbmVkQXJ0aWZhY3RVUkxSZXNwb25zZSRUeXBlKCk7XG4vLyBAZ2VuZXJhdGVkIG1lc3NhZ2UgdHlwZSB3aXRoIHJlZmxlY3Rpb24gaW5mb3JtYXRpb24sIG1heSBwcm92aWRlIHNwZWVkIG9wdGltaXplZCBtZXRob2RzXG5jbGFzcyBEZWxldGVBcnRpZmFjdFJlcXVlc3QkVHlwZSBleHRlbmRzIHJ1bnRpbWVfNS5NZXNzYWdlVHlwZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuRGVsZXRlQXJ0aWZhY3RSZXF1ZXN0XCIsIFtcbiAgICAgICAgICAgIHsgbm86IDEsIG5hbWU6IFwid29ya2Zsb3dfcnVuX2JhY2tlbmRfaWRcIiwga2luZDogXCJzY2FsYXJcIiwgVDogOSAvKlNjYWxhclR5cGUuU1RSSU5HKi8gfSxcbiAgICAgICAgICAgIHsgbm86IDIsIG5hbWU6IFwid29ya2Zsb3dfam9iX3J1bl9iYWNrZW5kX2lkXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDkgLypTY2FsYXJUeXBlLlNUUklORyovIH0sXG4gICAgICAgICAgICB7IG5vOiAzLCBuYW1lOiBcIm5hbWVcIiwga2luZDogXCJzY2FsYXJcIiwgVDogOSAvKlNjYWxhclR5cGUuU1RSSU5HKi8gfVxuICAgICAgICBdKTtcbiAgICB9XG4gICAgY3JlYXRlKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7IHdvcmtmbG93UnVuQmFja2VuZElkOiBcIlwiLCB3b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZDogXCJcIiwgbmFtZTogXCJcIiB9O1xuICAgICAgICBnbG9iYWxUaGlzLk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZXNzYWdlLCBydW50aW1lXzQuTUVTU0FHRV9UWVBFLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdGhpcyB9KTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAoMCwgcnVudGltZV8zLnJlZmxlY3Rpb25NZXJnZVBhcnRpYWwpKHRoaXMsIG1lc3NhZ2UsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5UmVhZChyZWFkZXIsIGxlbmd0aCwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGxldCBtZXNzYWdlID0gdGFyZ2V0ICE9PSBudWxsICYmIHRhcmdldCAhPT0gdm9pZCAwID8gdGFyZ2V0IDogdGhpcy5jcmVhdGUoKSwgZW5kID0gcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgIGxldCBbZmllbGRObywgd2lyZVR5cGVdID0gcmVhZGVyLnRhZygpO1xuICAgICAgICAgICAgc3dpdGNoIChmaWVsZE5vKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBzdHJpbmcgd29ya2Zsb3dfcnVuX2JhY2tlbmRfaWQgKi8gMTpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS53b3JrZmxvd1J1bkJhY2tlbmRJZCA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBzdHJpbmcgd29ya2Zsb3dfam9iX3J1bl9iYWNrZW5kX2lkICovIDI6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uud29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgLyogc3RyaW5nIG5hbWUgKi8gMzpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5uYW1lID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBsZXQgdSA9IG9wdGlvbnMucmVhZFVua25vd25GaWVsZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgPT09IFwidGhyb3dcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBnbG9iYWxUaGlzLkVycm9yKGBVbmtub3duIGZpZWxkICR7ZmllbGROb30gKHdpcmUgdHlwZSAke3dpcmVUeXBlfSkgZm9yICR7dGhpcy50eXBlTmFtZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGQgPSByZWFkZXIuc2tpcCh3aXJlVHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICh1ID09PSB0cnVlID8gcnVudGltZV8yLlVua25vd25GaWVsZEhhbmRsZXIub25SZWFkIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgZmllbGRObywgd2lyZVR5cGUsIGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVdyaXRlKG1lc3NhZ2UsIHdyaXRlciwgb3B0aW9ucykge1xuICAgICAgICAvKiBzdHJpbmcgd29ya2Zsb3dfcnVuX2JhY2tlbmRfaWQgPSAxOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS53b3JrZmxvd1J1bkJhY2tlbmRJZCAhPT0gXCJcIilcbiAgICAgICAgICAgIHdyaXRlci50YWcoMSwgcnVudGltZV8xLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCkuc3RyaW5nKG1lc3NhZ2Uud29ya2Zsb3dSdW5CYWNrZW5kSWQpO1xuICAgICAgICAvKiBzdHJpbmcgd29ya2Zsb3dfam9iX3J1bl9iYWNrZW5kX2lkID0gMjsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2Uud29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQgIT09IFwiXCIpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDIsIHJ1bnRpbWVfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLnN0cmluZyhtZXNzYWdlLndvcmtmbG93Sm9iUnVuQmFja2VuZElkKTtcbiAgICAgICAgLyogc3RyaW5nIG5hbWUgPSAzOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS5uYW1lICE9PSBcIlwiKVxuICAgICAgICAgICAgd3JpdGVyLnRhZygzLCBydW50aW1lXzEuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKS5zdHJpbmcobWVzc2FnZS5uYW1lKTtcbiAgICAgICAgbGV0IHUgPSBvcHRpb25zLndyaXRlVW5rbm93bkZpZWxkcztcbiAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgKHUgPT0gdHJ1ZSA/IHJ1bnRpbWVfMi5Vbmtub3duRmllbGRIYW5kbGVyLm9uV3JpdGUgOiB1KSh0aGlzLnR5cGVOYW1lLCBtZXNzYWdlLCB3cml0ZXIpO1xuICAgICAgICByZXR1cm4gd3JpdGVyO1xuICAgIH1cbn1cbi8qKlxuICogQGdlbmVyYXRlZCBNZXNzYWdlVHlwZSBmb3IgcHJvdG9idWYgbWVzc2FnZSBnaXRodWIuYWN0aW9ucy5yZXN1bHRzLmFwaS52MS5EZWxldGVBcnRpZmFjdFJlcXVlc3RcbiAqL1xuZXhwb3J0cy5EZWxldGVBcnRpZmFjdFJlcXVlc3QgPSBuZXcgRGVsZXRlQXJ0aWZhY3RSZXF1ZXN0JFR5cGUoKTtcbi8vIEBnZW5lcmF0ZWQgbWVzc2FnZSB0eXBlIHdpdGggcmVmbGVjdGlvbiBpbmZvcm1hdGlvbiwgbWF5IHByb3ZpZGUgc3BlZWQgb3B0aW1pemVkIG1ldGhvZHNcbmNsYXNzIERlbGV0ZUFydGlmYWN0UmVzcG9uc2UkVHlwZSBleHRlbmRzIHJ1bnRpbWVfNS5NZXNzYWdlVHlwZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuRGVsZXRlQXJ0aWZhY3RSZXNwb25zZVwiLCBbXG4gICAgICAgICAgICB7IG5vOiAxLCBuYW1lOiBcIm9rXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDggLypTY2FsYXJUeXBlLkJPT0wqLyB9LFxuICAgICAgICAgICAgeyBubzogMiwgbmFtZTogXCJhcnRpZmFjdF9pZFwiLCBraW5kOiBcInNjYWxhclwiLCBUOiAzIC8qU2NhbGFyVHlwZS5JTlQ2NCovIH1cbiAgICAgICAgXSk7XG4gICAgfVxuICAgIGNyZWF0ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0geyBvazogZmFsc2UsIGFydGlmYWN0SWQ6IFwiMFwiIH07XG4gICAgICAgIGdsb2JhbFRoaXMuT2JqZWN0LmRlZmluZVByb3BlcnR5KG1lc3NhZ2UsIHJ1bnRpbWVfNC5NRVNTQUdFX1RZUEUsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0aGlzIH0pO1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICgwLCBydW50aW1lXzMucmVmbGVjdGlvbk1lcmdlUGFydGlhbCkodGhpcywgbWVzc2FnZSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlSZWFkKHJlYWRlciwgbGVuZ3RoLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSB0YXJnZXQgIT09IG51bGwgJiYgdGFyZ2V0ICE9PSB2b2lkIDAgPyB0YXJnZXQgOiB0aGlzLmNyZWF0ZSgpLCBlbmQgPSByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgbGV0IFtmaWVsZE5vLCB3aXJlVHlwZV0gPSByZWFkZXIudGFnKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkTm8pIHtcbiAgICAgICAgICAgICAgICBjYXNlIC8qIGJvb2wgb2sgKi8gMTpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5vayA9IHJlYWRlci5ib29sKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgLyogaW50NjQgYXJ0aWZhY3RfaWQgKi8gMjpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5hcnRpZmFjdElkID0gcmVhZGVyLmludDY0KCkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBvcHRpb25zLnJlYWRVbmtub3duRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ID09PSBcInRocm93XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZ2xvYmFsVGhpcy5FcnJvcihgVW5rbm93biBmaWVsZCAke2ZpZWxkTm99ICh3aXJlIHR5cGUgJHt3aXJlVHlwZX0pIGZvciAke3RoaXMudHlwZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkID0gcmVhZGVyLnNraXAod2lyZVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAodSA9PT0gdHJ1ZSA/IHJ1bnRpbWVfMi5Vbmtub3duRmllbGRIYW5kbGVyLm9uUmVhZCA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIGZpZWxkTm8sIHdpcmVUeXBlLCBkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLCB3cml0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgLyogYm9vbCBvayA9IDE7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLm9rICE9PSBmYWxzZSlcbiAgICAgICAgICAgIHdyaXRlci50YWcoMSwgcnVudGltZV8xLldpcmVUeXBlLlZhcmludCkuYm9vbChtZXNzYWdlLm9rKTtcbiAgICAgICAgLyogaW50NjQgYXJ0aWZhY3RfaWQgPSAyOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS5hcnRpZmFjdElkICE9PSBcIjBcIilcbiAgICAgICAgICAgIHdyaXRlci50YWcoMiwgcnVudGltZV8xLldpcmVUeXBlLlZhcmludCkuaW50NjQobWVzc2FnZS5hcnRpZmFjdElkKTtcbiAgICAgICAgbGV0IHUgPSBvcHRpb25zLndyaXRlVW5rbm93bkZpZWxkcztcbiAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgKHUgPT0gdHJ1ZSA/IHJ1bnRpbWVfMi5Vbmtub3duRmllbGRIYW5kbGVyLm9uV3JpdGUgOiB1KSh0aGlzLnR5cGVOYW1lLCBtZXNzYWdlLCB3cml0ZXIpO1xuICAgICAgICByZXR1cm4gd3JpdGVyO1xuICAgIH1cbn1cbi8qKlxuICogQGdlbmVyYXRlZCBNZXNzYWdlVHlwZSBmb3IgcHJvdG9idWYgbWVzc2FnZSBnaXRodWIuYWN0aW9ucy5yZXN1bHRzLmFwaS52MS5EZWxldGVBcnRpZmFjdFJlc3BvbnNlXG4gKi9cbmV4cG9ydHMuRGVsZXRlQXJ0aWZhY3RSZXNwb25zZSA9IG5ldyBEZWxldGVBcnRpZmFjdFJlc3BvbnNlJFR5cGUoKTtcbi8qKlxuICogQGdlbmVyYXRlZCBTZXJ2aWNlVHlwZSBmb3IgcHJvdG9idWYgc2VydmljZSBnaXRodWIuYWN0aW9ucy5yZXN1bHRzLmFwaS52MS5BcnRpZmFjdFNlcnZpY2VcbiAqL1xuZXhwb3J0cy5BcnRpZmFjdFNlcnZpY2UgPSBuZXcgcnVudGltZV9ycGNfMS5TZXJ2aWNlVHlwZShcImdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkFydGlmYWN0U2VydmljZVwiLCBbXG4gICAgeyBuYW1lOiBcIkNyZWF0ZUFydGlmYWN0XCIsIG9wdGlvbnM6IHt9LCBJOiBleHBvcnRzLkNyZWF0ZUFydGlmYWN0UmVxdWVzdCwgTzogZXhwb3J0cy5DcmVhdGVBcnRpZmFjdFJlc3BvbnNlIH0sXG4gICAgeyBuYW1lOiBcIkZpbmFsaXplQXJ0aWZhY3RcIiwgb3B0aW9uczoge30sIEk6IGV4cG9ydHMuRmluYWxpemVBcnRpZmFjdFJlcXVlc3QsIE86IGV4cG9ydHMuRmluYWxpemVBcnRpZmFjdFJlc3BvbnNlIH0sXG4gICAgeyBuYW1lOiBcIkxpc3RBcnRpZmFjdHNcIiwgb3B0aW9uczoge30sIEk6IGV4cG9ydHMuTGlzdEFydGlmYWN0c1JlcXVlc3QsIE86IGV4cG9ydHMuTGlzdEFydGlmYWN0c1Jlc3BvbnNlIH0sXG4gICAgeyBuYW1lOiBcIkdldFNpZ25lZEFydGlmYWN0VVJMXCIsIG9wdGlvbnM6IHt9LCBJOiBleHBvcnRzLkdldFNpZ25lZEFydGlmYWN0VVJMUmVxdWVzdCwgTzogZXhwb3J0cy5HZXRTaWduZWRBcnRpZmFjdFVSTFJlc3BvbnNlIH0sXG4gICAgeyBuYW1lOiBcIkRlbGV0ZUFydGlmYWN0XCIsIG9wdGlvbnM6IHt9LCBJOiBleHBvcnRzLkRlbGV0ZUFydGlmYWN0UmVxdWVzdCwgTzogZXhwb3J0cy5EZWxldGVBcnRpZmFjdFJlc3BvbnNlIH1cbl0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXJ0aWZhY3QuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNIb29rID0gZXhwb3J0cy5jaGFpbkhvb2tzID0gdm9pZCAwO1xuLy8gQ2hhaW5Ib29rcyBjcmVhdGVzIGEgbmV3IFNlcnZlckhvb2sgd2hpY2ggY2hhaW5zIHRoZSBjYWxsYmFja3MgaW5cbi8vIGVhY2ggb2YgdGhlIGNvbnN0aXR1ZW50IGhvb2tzIHBhc3NlZCBpbi4gRWFjaCBob29rIGZ1bmN0aW9uIHdpbGwgYmVcbi8vIGNhbGxlZCBpbiB0aGUgb3JkZXIgb2YgdGhlIFNlcnZlckhvb2tzIHZhbHVlcyBwYXNzZWQgaW4uXG4vL1xuLy8gRm9yIHRoZSBlcnJvcmluZyBob29rcywgUmVxdWVzdFJlY2VpdmVkIGFuZCBSZXF1ZXN0Um91dGVkLCBhbnkgcmV0dXJuZWRcbi8vIGVycm9ycyBwcmV2ZW50IHByb2Nlc3NpbmcgYnkgbGF0ZXIgaG9va3MuXG5mdW5jdGlvbiBjaGFpbkhvb2tzKC4uLmhvb2tzKSB7XG4gICAgaWYgKGhvb2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKGhvb2tzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gaG9va3NbMF07XG4gICAgfVxuICAgIGNvbnN0IHNlcnZlckhvb2sgPSB7XG4gICAgICAgIHJlcXVlc3RSZWNlaXZlZChjdHgpIHtcbiAgICAgICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBob29rIG9mIGhvb2tzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaG9vay5yZXF1ZXN0UmVjZWl2ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIGhvb2sucmVxdWVzdFJlY2VpdmVkKGN0eCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlcXVlc3RQcmVwYXJlZChjdHgpIHtcbiAgICAgICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBob29rIG9mIGhvb2tzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaG9vay5yZXF1ZXN0UHJlcGFyZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcImhvb2sgcmVxdWVzdFByZXBhcmVkIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCByZWxlYXNlLiBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlBsZWFzZSB1c2UgcmVzcG9uc2VQcmVwYXJlZCBpbnN0ZWFkLlwiKTtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgaG9vay5yZXF1ZXN0UHJlcGFyZWQoY3R4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVzcG9uc2VQcmVwYXJlZChjdHgpIHtcbiAgICAgICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBob29rIG9mIGhvb2tzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaG9vay5yZXNwb25zZVByZXBhcmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB5aWVsZCBob29rLnJlc3BvbnNlUHJlcGFyZWQoY3R4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVxdWVzdFNlbnQoY3R4KSB7XG4gICAgICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaG9vayBvZiBob29rcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWhvb2sucmVxdWVzdFNlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcImhvb2sgcmVxdWVzdFNlbnQgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IHJlbGVhc2UuIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiUGxlYXNlIHVzZSByZXNwb25zZVNlbnQgaW5zdGVhZC5cIik7XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIGhvb2sucmVxdWVzdFNlbnQoY3R4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVzcG9uc2VTZW50KGN0eCkge1xuICAgICAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGhvb2sgb2YgaG9va3MpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFob29rLnJlc3BvbnNlU2VudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgeWllbGQgaG9vay5yZXNwb25zZVNlbnQoY3R4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVxdWVzdFJvdXRlZChjdHgpIHtcbiAgICAgICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBob29rIG9mIGhvb2tzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaG9vay5yZXF1ZXN0Um91dGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB5aWVsZCBob29rLnJlcXVlc3RSb3V0ZWQoY3R4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3IoY3R4LCBlcnIpIHtcbiAgICAgICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBob29rIG9mIGhvb2tzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaG9vay5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgeWllbGQgaG9vay5lcnJvcihjdHgsIGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgfTtcbiAgICByZXR1cm4gc2VydmVySG9vaztcbn1cbmV4cG9ydHMuY2hhaW5Ib29rcyA9IGNoYWluSG9va3M7XG5mdW5jdGlvbiBpc0hvb2sob2JqZWN0KSB7XG4gICAgcmV0dXJuIChcInJlcXVlc3RSZWNlaXZlZFwiIGluIG9iamVjdCB8fFxuICAgICAgICBcInJlcXVlc3RQcmVwYXJlZFwiIGluIG9iamVjdCB8fFxuICAgICAgICBcInJlcXVlc3RTZW50XCIgaW4gb2JqZWN0IHx8XG4gICAgICAgIFwicmVxdWVzdFJvdXRlZFwiIGluIG9iamVjdCB8fFxuICAgICAgICBcInJlc3BvbnNlUHJlcGFyZWRcIiBpbiBvYmplY3QgfHxcbiAgICAgICAgXCJyZXNwb25zZVNlbnRcIiBpbiBvYmplY3QgfHxcbiAgICAgICAgXCJlcnJvclwiIGluIG9iamVjdCk7XG59XG5leHBvcnRzLmlzSG9vayA9IGlzSG9vaztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlzVmFsaWRFcnJvckNvZGUgPSBleHBvcnRzLmh0dHBTdGF0dXNGcm9tRXJyb3JDb2RlID0gZXhwb3J0cy5Ud2lycEVycm9yQ29kZSA9IGV4cG9ydHMuQmFkUm91dGVFcnJvciA9IGV4cG9ydHMuSW50ZXJuYWxTZXJ2ZXJFcnJvcldpdGggPSBleHBvcnRzLkludGVybmFsU2VydmVyRXJyb3IgPSBleHBvcnRzLlJlcXVpcmVkQXJndW1lbnRFcnJvciA9IGV4cG9ydHMuSW52YWxpZEFyZ3VtZW50RXJyb3IgPSBleHBvcnRzLk5vdEZvdW5kRXJyb3IgPSBleHBvcnRzLlR3aXJwRXJyb3IgPSB2b2lkIDA7XG4vKipcbiAqIFJlcHJlc2VudHMgYSB0d2lycCBlcnJvclxuICovXG5jbGFzcyBUd2lycEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKGNvZGUsIG1zZykge1xuICAgICAgICBzdXBlcihtc2cpO1xuICAgICAgICB0aGlzLmNvZGUgPSBUd2lycEVycm9yQ29kZS5JbnRlcm5hbDtcbiAgICAgICAgdGhpcy5tZXRhID0ge307XG4gICAgICAgIHRoaXMuY29kZSA9IGNvZGU7XG4gICAgICAgIHRoaXMubXNnID0gbXNnO1xuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgVHdpcnBFcnJvci5wcm90b3R5cGUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgbWV0YWRhdGEga3YgdG8gdGhlIGVycm9yXG4gICAgICogQHBhcmFtIGtleVxuICAgICAqIEBwYXJhbSB2YWx1ZVxuICAgICAqL1xuICAgIHdpdGhNZXRhKGtleSwgdmFsdWUpIHtcbiAgICAgICAgdGhpcy5tZXRhW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBzaW5nbGUgbWV0YWRhdGEgdmFsdWVcbiAgICAgKiByZXR1cm4gXCJcIiBpZiBub3QgZm91bmRcbiAgICAgKiBAcGFyYW0ga2V5XG4gICAgICovXG4gICAgZ2V0TWV0YShrZXkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWV0YVtrZXldIHx8IFwiXCI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZCB0aGUgb3JpZ2luYWwgZXJyb3IgY2F1c2VcbiAgICAgKiBAcGFyYW0gZXJyXG4gICAgICogQHBhcmFtIGFkZE1ldGFcbiAgICAgKi9cbiAgICB3aXRoQ2F1c2UoZXJyLCBhZGRNZXRhID0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5fb3JpZ2luYWxDYXVzZSA9IGVycjtcbiAgICAgICAgaWYgKGFkZE1ldGEpIHtcbiAgICAgICAgICAgIHRoaXMud2l0aE1ldGEoXCJjYXVzZVwiLCBlcnIubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGNhdXNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fb3JpZ2luYWxDYXVzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZXJyb3IgcmVwcmVzZW50YXRpb24gdG8gSlNPTlxuICAgICAqL1xuICAgIHRvSlNPTigpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgY29kZTogdGhpcy5jb2RlLFxuICAgICAgICAgICAgICAgIG1zZzogdGhpcy5tc2csXG4gICAgICAgICAgICAgICAgbWV0YTogdGhpcy5tZXRhLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBge1wiY29kZVwiOiBcImludGVybmFsXCIsIFwibXNnXCI6IFwiVGhlcmUgd2FzIGFuIGVycm9yIGJ1dCBpdCBjb3VsZCBub3QgYmUgc2VyaWFsaXplZCBpbnRvIEpTT05cIn1gO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIHR3aXJwIGVycm9yIGZyb20gYW4gb2JqZWN0XG4gICAgICogQHBhcmFtIG9ialxuICAgICAqL1xuICAgIHN0YXRpYyBmcm9tT2JqZWN0KG9iaikge1xuICAgICAgICBjb25zdCBjb2RlID0gb2JqW1wiY29kZVwiXSB8fCBUd2lycEVycm9yQ29kZS5Vbmtub3duO1xuICAgICAgICBjb25zdCBtc2cgPSBvYmpbXCJtc2dcIl0gfHwgXCJ1bmtub3duXCI7XG4gICAgICAgIGNvbnN0IGVycm9yID0gbmV3IFR3aXJwRXJyb3IoY29kZSwgbXNnKTtcbiAgICAgICAgaWYgKG9ialtcIm1ldGFcIl0pIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKG9ialtcIm1ldGFcIl0pLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIGVycm9yLndpdGhNZXRhKGtleSwgb2JqW1wibWV0YVwiXVtrZXldKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlcnJvcjtcbiAgICB9XG59XG5leHBvcnRzLlR3aXJwRXJyb3IgPSBUd2lycEVycm9yO1xuLyoqXG4gKiBOb3RGb3VuZEVycm9yIGNvbnN0cnVjdG9yIGZvciB0aGUgY29tbW9uIE5vdEZvdW5kIGVycm9yLlxuICovXG5jbGFzcyBOb3RGb3VuZEVycm9yIGV4dGVuZHMgVHdpcnBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobXNnKSB7XG4gICAgICAgIHN1cGVyKFR3aXJwRXJyb3JDb2RlLk5vdEZvdW5kLCBtc2cpO1xuICAgIH1cbn1cbmV4cG9ydHMuTm90Rm91bmRFcnJvciA9IE5vdEZvdW5kRXJyb3I7XG4vKipcbiAqIEludmFsaWRBcmd1bWVudEVycm9yIGNvbnN0cnVjdG9yIGZvciB0aGUgY29tbW9uIEludmFsaWRBcmd1bWVudCBlcnJvci4gQ2FuIGJlXG4gKiB1c2VkIHdoZW4gYW4gYXJndW1lbnQgaGFzIGludmFsaWQgZm9ybWF0LCBpcyBhIG51bWJlciBvdXQgb2YgcmFuZ2UsIGlzIGEgYmFkXG4gKiBvcHRpb24sIGV0YykuXG4gKi9cbmNsYXNzIEludmFsaWRBcmd1bWVudEVycm9yIGV4dGVuZHMgVHdpcnBFcnJvciB7XG4gICAgY29uc3RydWN0b3IoYXJndW1lbnQsIHZhbGlkYXRpb25Nc2cpIHtcbiAgICAgICAgc3VwZXIoVHdpcnBFcnJvckNvZGUuSW52YWxpZEFyZ3VtZW50LCBhcmd1bWVudCArIFwiIFwiICsgdmFsaWRhdGlvbk1zZyk7XG4gICAgICAgIHRoaXMud2l0aE1ldGEoXCJhcmd1bWVudFwiLCBhcmd1bWVudCk7XG4gICAgfVxufVxuZXhwb3J0cy5JbnZhbGlkQXJndW1lbnRFcnJvciA9IEludmFsaWRBcmd1bWVudEVycm9yO1xuLyoqXG4gKiBSZXF1aXJlZEFyZ3VtZW50RXJyb3IgaXMgYSBtb3JlIHNwZWNpZmljIGNvbnN0cnVjdG9yIGZvciBJbnZhbGlkQXJndW1lbnRcbiAqIGVycm9yLiBTaG91bGQgYmUgdXNlZCB3aGVuIHRoZSBhcmd1bWVudCBpcyByZXF1aXJlZCAoZXhwZWN0ZWQgdG8gaGF2ZSBhXG4gKiBub24temVybyB2YWx1ZSkuXG4gKi9cbmNsYXNzIFJlcXVpcmVkQXJndW1lbnRFcnJvciBleHRlbmRzIEludmFsaWRBcmd1bWVudEVycm9yIHtcbiAgICBjb25zdHJ1Y3Rvcihhcmd1bWVudCkge1xuICAgICAgICBzdXBlcihhcmd1bWVudCwgXCJpcyByZXF1aXJlZFwiKTtcbiAgICB9XG59XG5leHBvcnRzLlJlcXVpcmVkQXJndW1lbnRFcnJvciA9IFJlcXVpcmVkQXJndW1lbnRFcnJvcjtcbi8qKlxuICogSW50ZXJuYWxFcnJvciBjb25zdHJ1Y3RvciBmb3IgdGhlIGNvbW1vbiBJbnRlcm5hbCBlcnJvci4gU2hvdWxkIGJlIHVzZWQgdG9cbiAqIHNwZWNpZnkgdGhhdCBzb21ldGhpbmcgYmFkIG9yIHVuZXhwZWN0ZWQgaGFwcGVuZWQuXG4gKi9cbmNsYXNzIEludGVybmFsU2VydmVyRXJyb3IgZXh0ZW5kcyBUd2lycEVycm9yIHtcbiAgICBjb25zdHJ1Y3Rvcihtc2cpIHtcbiAgICAgICAgc3VwZXIoVHdpcnBFcnJvckNvZGUuSW50ZXJuYWwsIG1zZyk7XG4gICAgfVxufVxuZXhwb3J0cy5JbnRlcm5hbFNlcnZlckVycm9yID0gSW50ZXJuYWxTZXJ2ZXJFcnJvcjtcbi8qKlxuICogSW50ZXJuYWxFcnJvcldpdGggbWFrZXMgYW4gaW50ZXJuYWwgZXJyb3IsIHdyYXBwaW5nIHRoZSBvcmlnaW5hbCBlcnJvciBhbmQgdXNpbmcgaXRcbiAqIGZvciB0aGUgZXJyb3IgbWVzc2FnZSwgYW5kIHdpdGggbWV0YWRhdGEgXCJjYXVzZVwiIHdpdGggdGhlIG9yaWdpbmFsIGVycm9yIHR5cGUuXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYnkgVHdpcnAgc2VydmljZXMgdG8gd3JhcCBub24tVHdpcnAgZXJyb3JzIGFzIGludGVybmFsIGVycm9ycy5cbiAqIFRoZSB3cmFwcGVkIGVycm9yIGNhbiBiZSBleHRyYWN0ZWQgbGF0ZXIgd2l0aCBlcnIuY2F1c2UoKVxuICovXG5jbGFzcyBJbnRlcm5hbFNlcnZlckVycm9yV2l0aCBleHRlbmRzIEludGVybmFsU2VydmVyRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKGVycikge1xuICAgICAgICBzdXBlcihlcnIubWVzc2FnZSk7XG4gICAgICAgIHRoaXMud2l0aE1ldGEoXCJjYXVzZVwiLCBlcnIubmFtZSk7XG4gICAgICAgIHRoaXMud2l0aENhdXNlKGVycik7XG4gICAgfVxufVxuZXhwb3J0cy5JbnRlcm5hbFNlcnZlckVycm9yV2l0aCA9IEludGVybmFsU2VydmVyRXJyb3JXaXRoO1xuLyoqXG4gKiBBIHN0YW5kYXJkIEJhZFJvdXRlIEVycm9yXG4gKi9cbmNsYXNzIEJhZFJvdXRlRXJyb3IgZXh0ZW5kcyBUd2lycEVycm9yIHtcbiAgICBjb25zdHJ1Y3Rvcihtc2csIG1ldGhvZCwgdXJsKSB7XG4gICAgICAgIHN1cGVyKFR3aXJwRXJyb3JDb2RlLkJhZFJvdXRlLCBtc2cpO1xuICAgICAgICB0aGlzLndpdGhNZXRhKFwidHdpcnBfaW52YWxpZF9yb3V0ZVwiLCBtZXRob2QgKyBcIiBcIiArIHVybCk7XG4gICAgfVxufVxuZXhwb3J0cy5CYWRSb3V0ZUVycm9yID0gQmFkUm91dGVFcnJvcjtcbnZhciBUd2lycEVycm9yQ29kZTtcbihmdW5jdGlvbiAoVHdpcnBFcnJvckNvZGUpIHtcbiAgICAvLyBDYW5jZWxlZCBpbmRpY2F0ZXMgdGhlIG9wZXJhdGlvbiB3YXMgY2FuY2VsbGVkICh0eXBpY2FsbHkgYnkgdGhlIGNhbGxlcikuXG4gICAgVHdpcnBFcnJvckNvZGVbXCJDYW5jZWxlZFwiXSA9IFwiY2FuY2VsZWRcIjtcbiAgICAvLyBVbmtub3duIGVycm9yLiBGb3IgZXhhbXBsZSB3aGVuIGhhbmRsaW5nIGVycm9ycyByYWlzZWQgYnkgQVBJcyB0aGF0IGRvIG5vdFxuICAgIC8vIHJldHVybiBlbm91Z2ggZXJyb3IgaW5mb3JtYXRpb24uXG4gICAgVHdpcnBFcnJvckNvZGVbXCJVbmtub3duXCJdID0gXCJ1bmtub3duXCI7XG4gICAgLy8gSW52YWxpZEFyZ3VtZW50IGluZGljYXRlcyBjbGllbnQgc3BlY2lmaWVkIGFuIGludmFsaWQgYXJndW1lbnQuIEl0XG4gICAgLy8gaW5kaWNhdGVzIGFyZ3VtZW50cyB0aGF0IGFyZSBwcm9ibGVtYXRpYyByZWdhcmRsZXNzIG9mIHRoZSBzdGF0ZSBvZiB0aGVcbiAgICAvLyBzeXN0ZW0gKGkuZS4gYSBtYWxmb3JtZWQgZmlsZSBuYW1lLCByZXF1aXJlZCBhcmd1bWVudCwgbnVtYmVyIG91dCBvZiByYW5nZSxcbiAgICAvLyBldGMuKS5cbiAgICBUd2lycEVycm9yQ29kZVtcIkludmFsaWRBcmd1bWVudFwiXSA9IFwiaW52YWxpZF9hcmd1bWVudFwiO1xuICAgIC8vIE1hbGZvcm1lZCBpbmRpY2F0ZXMgYW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgZGVjb2RpbmcgdGhlIGNsaWVudCdzIHJlcXVlc3QuXG4gICAgLy8gVGhpcyBtYXkgbWVhbiB0aGF0IHRoZSBtZXNzYWdlIHdhcyBlbmNvZGVkIGltcHJvcGVybHksIG9yIHRoYXQgdGhlcmUgaXMgYVxuICAgIC8vIGRpc2FncmVlbWVudCBpbiBtZXNzYWdlIGZvcm1hdCBiZXR3ZWVuIHRoZSBjbGllbnQgYW5kIHNlcnZlci5cbiAgICBUd2lycEVycm9yQ29kZVtcIk1hbGZvcm1lZFwiXSA9IFwibWFsZm9ybWVkXCI7XG4gICAgLy8gRGVhZGxpbmVFeGNlZWRlZCBtZWFucyBvcGVyYXRpb24gZXhwaXJlZCBiZWZvcmUgY29tcGxldGlvbi4gRm9yIG9wZXJhdGlvbnNcbiAgICAvLyB0aGF0IGNoYW5nZSB0aGUgc3RhdGUgb2YgdGhlIHN5c3RlbSwgdGhpcyBlcnJvciBtYXkgYmUgcmV0dXJuZWQgZXZlbiBpZiB0aGVcbiAgICAvLyBvcGVyYXRpb24gaGFzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgKHRpbWVvdXQpLlxuICAgIFR3aXJwRXJyb3JDb2RlW1wiRGVhZGxpbmVFeGNlZWRlZFwiXSA9IFwiZGVhZGxpbmVfZXhjZWVkZWRcIjtcbiAgICAvLyBOb3RGb3VuZCBtZWFucyBzb21lIHJlcXVlc3RlZCBlbnRpdHkgd2FzIG5vdCBmb3VuZC5cbiAgICBUd2lycEVycm9yQ29kZVtcIk5vdEZvdW5kXCJdID0gXCJub3RfZm91bmRcIjtcbiAgICAvLyBCYWRSb3V0ZSBtZWFucyB0aGF0IHRoZSByZXF1ZXN0ZWQgVVJMIHBhdGggd2Fzbid0IHJvdXRhYmxlIHRvIGEgVHdpcnBcbiAgICAvLyBzZXJ2aWNlIGFuZCBtZXRob2QuIFRoaXMgaXMgcmV0dXJuZWQgYnkgdGhlIGdlbmVyYXRlZCBzZXJ2ZXIsIGFuZCB1c3VhbGx5XG4gICAgLy8gc2hvdWxkbid0IGJlIHJldHVybmVkIGJ5IGFwcGxpY2F0aW9ucy4gSW5zdGVhZCwgYXBwbGljYXRpb25zIHNob3VsZCB1c2VcbiAgICAvLyBOb3RGb3VuZCBvciBVbmltcGxlbWVudGVkLlxuICAgIFR3aXJwRXJyb3JDb2RlW1wiQmFkUm91dGVcIl0gPSBcImJhZF9yb3V0ZVwiO1xuICAgIC8vIEFscmVhZHlFeGlzdHMgbWVhbnMgYW4gYXR0ZW1wdCB0byBjcmVhdGUgYW4gZW50aXR5IGZhaWxlZCBiZWNhdXNlIG9uZVxuICAgIC8vIGFscmVhZHkgZXhpc3RzLlxuICAgIFR3aXJwRXJyb3JDb2RlW1wiQWxyZWFkeUV4aXN0c1wiXSA9IFwiYWxyZWFkeV9leGlzdHNcIjtcbiAgICAvLyBQZXJtaXNzaW9uRGVuaWVkIGluZGljYXRlcyB0aGUgY2FsbGVyIGRvZXMgbm90IGhhdmUgcGVybWlzc2lvbiB0byBleGVjdXRlXG4gICAgLy8gdGhlIHNwZWNpZmllZCBvcGVyYXRpb24uIEl0IG11c3Qgbm90IGJlIHVzZWQgaWYgdGhlIGNhbGxlciBjYW5ub3QgYmVcbiAgICAvLyBpZGVudGlmaWVkIChVbmF1dGhlbnRpY2F0ZWQpLlxuICAgIFR3aXJwRXJyb3JDb2RlW1wiUGVybWlzc2lvbkRlbmllZFwiXSA9IFwicGVybWlzc2lvbl9kZW5pZWRcIjtcbiAgICAvLyBVbmF1dGhlbnRpY2F0ZWQgaW5kaWNhdGVzIHRoZSByZXF1ZXN0IGRvZXMgbm90IGhhdmUgdmFsaWQgYXV0aGVudGljYXRpb25cbiAgICAvLyBjcmVkZW50aWFscyBmb3IgdGhlIG9wZXJhdGlvbi5cbiAgICBUd2lycEVycm9yQ29kZVtcIlVuYXV0aGVudGljYXRlZFwiXSA9IFwidW5hdXRoZW50aWNhdGVkXCI7XG4gICAgLy8gUmVzb3VyY2VFeGhhdXN0ZWQgaW5kaWNhdGVzIHNvbWUgcmVzb3VyY2UgaGFzIGJlZW4gZXhoYXVzdGVkLCBwZXJoYXBzIGFcbiAgICAvLyBwZXItdXNlciBxdW90YSwgb3IgcGVyaGFwcyB0aGUgZW50aXJlIGZpbGUgc3lzdGVtIGlzIG91dCBvZiBzcGFjZS5cbiAgICBUd2lycEVycm9yQ29kZVtcIlJlc291cmNlRXhoYXVzdGVkXCJdID0gXCJyZXNvdXJjZV9leGhhdXN0ZWRcIjtcbiAgICAvLyBGYWlsZWRQcmVjb25kaXRpb24gaW5kaWNhdGVzIG9wZXJhdGlvbiB3YXMgcmVqZWN0ZWQgYmVjYXVzZSB0aGUgc3lzdGVtIGlzXG4gICAgLy8gbm90IGluIGEgc3RhdGUgcmVxdWlyZWQgZm9yIHRoZSBvcGVyYXRpb24ncyBleGVjdXRpb24uIEZvciBleGFtcGxlLCBkb2luZ1xuICAgIC8vIGFuIHJtZGlyIG9wZXJhdGlvbiBvbiBhIGRpcmVjdG9yeSB0aGF0IGlzIG5vbi1lbXB0eSwgb3Igb24gYSBub24tZGlyZWN0b3J5XG4gICAgLy8gb2JqZWN0LCBvciB3aGVuIGhhdmluZyBjb25mbGljdGluZyByZWFkLW1vZGlmeS13cml0ZSBvbiB0aGUgc2FtZSByZXNvdXJjZS5cbiAgICBUd2lycEVycm9yQ29kZVtcIkZhaWxlZFByZWNvbmRpdGlvblwiXSA9IFwiZmFpbGVkX3ByZWNvbmRpdGlvblwiO1xuICAgIC8vIEFib3J0ZWQgaW5kaWNhdGVzIHRoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQsIHR5cGljYWxseSBkdWUgdG8gYSBjb25jdXJyZW5jeVxuICAgIC8vIGlzc3VlIGxpa2Ugc2VxdWVuY2VyIGNoZWNrIGZhaWx1cmVzLCB0cmFuc2FjdGlvbiBhYm9ydHMsIGV0Yy5cbiAgICBUd2lycEVycm9yQ29kZVtcIkFib3J0ZWRcIl0gPSBcImFib3J0ZWRcIjtcbiAgICAvLyBPdXRPZlJhbmdlIG1lYW5zIG9wZXJhdGlvbiB3YXMgYXR0ZW1wdGVkIHBhc3QgdGhlIHZhbGlkIHJhbmdlLiBGb3IgZXhhbXBsZSxcbiAgICAvLyBzZWVraW5nIG9yIHJlYWRpbmcgcGFzdCBlbmQgb2YgYSBwYWdpbmF0ZWQgY29sbGVjdGlvbi5cbiAgICAvL1xuICAgIC8vIFVubGlrZSBJbnZhbGlkQXJndW1lbnQsIHRoaXMgZXJyb3IgaW5kaWNhdGVzIGEgcHJvYmxlbSB0aGF0IG1heSBiZSBmaXhlZCBpZlxuICAgIC8vIHRoZSBzeXN0ZW0gc3RhdGUgY2hhbmdlcyAoaS5lLiBhZGRpbmcgbW9yZSBpdGVtcyB0byB0aGUgY29sbGVjdGlvbikuXG4gICAgLy9cbiAgICAvLyBUaGVyZSBpcyBhIGZhaXIgYml0IG9mIG92ZXJsYXAgYmV0d2VlbiBGYWlsZWRQcmVjb25kaXRpb24gYW5kIE91dE9mUmFuZ2UuXG4gICAgLy8gV2UgcmVjb21tZW5kIHVzaW5nIE91dE9mUmFuZ2UgKHRoZSBtb3JlIHNwZWNpZmljIGVycm9yKSB3aGVuIGl0IGFwcGxpZXMgc29cbiAgICAvLyB0aGF0IGNhbGxlcnMgd2hvIGFyZSBpdGVyYXRpbmcgdGhyb3VnaCBhIHNwYWNlIGNhbiBlYXNpbHkgbG9vayBmb3IgYW5cbiAgICAvLyBPdXRPZlJhbmdlIGVycm9yIHRvIGRldGVjdCB3aGVuIHRoZXkgYXJlIGRvbmUuXG4gICAgVHdpcnBFcnJvckNvZGVbXCJPdXRPZlJhbmdlXCJdID0gXCJvdXRfb2ZfcmFuZ2VcIjtcbiAgICAvLyBVbmltcGxlbWVudGVkIGluZGljYXRlcyBvcGVyYXRpb24gaXMgbm90IGltcGxlbWVudGVkIG9yIG5vdFxuICAgIC8vIHN1cHBvcnRlZC9lbmFibGVkIGluIHRoaXMgc2VydmljZS5cbiAgICBUd2lycEVycm9yQ29kZVtcIlVuaW1wbGVtZW50ZWRcIl0gPSBcInVuaW1wbGVtZW50ZWRcIjtcbiAgICAvLyBJbnRlcm5hbCBlcnJvcnMuIFdoZW4gc29tZSBpbnZhcmlhbnRzIGV4cGVjdGVkIGJ5IHRoZSB1bmRlcmx5aW5nIHN5c3RlbVxuICAgIC8vIGhhdmUgYmVlbiBicm9rZW4uIEluIG90aGVyIHdvcmRzLCBzb21ldGhpbmcgYmFkIGhhcHBlbmVkIGluIHRoZSBsaWJyYXJ5IG9yXG4gICAgLy8gYmFja2VuZCBzZXJ2aWNlLiBEbyBub3QgY29uZnVzZSB3aXRoIEhUVFAgSW50ZXJuYWwgU2VydmVyIEVycm9yOyBhblxuICAgIC8vIEludGVybmFsIGVycm9yIGNvdWxkIGFsc28gaGFwcGVuIG9uIHRoZSBjbGllbnQgY29kZSwgaS5lLiB3aGVuIHBhcnNpbmcgYVxuICAgIC8vIHNlcnZlciByZXNwb25zZS5cbiAgICBUd2lycEVycm9yQ29kZVtcIkludGVybmFsXCJdID0gXCJpbnRlcm5hbFwiO1xuICAgIC8vIFVuYXZhaWxhYmxlIGluZGljYXRlcyB0aGUgc2VydmljZSBpcyBjdXJyZW50bHkgdW5hdmFpbGFibGUuIFRoaXMgaXMgYSBtb3N0XG4gICAgLy8gbGlrZWx5IGEgdHJhbnNpZW50IGNvbmRpdGlvbiBhbmQgbWF5IGJlIGNvcnJlY3RlZCBieSByZXRyeWluZyB3aXRoIGFcbiAgICAvLyBiYWNrb2ZmLlxuICAgIFR3aXJwRXJyb3JDb2RlW1wiVW5hdmFpbGFibGVcIl0gPSBcInVuYXZhaWxhYmxlXCI7XG4gICAgLy8gRGF0YUxvc3MgaW5kaWNhdGVzIHVucmVjb3ZlcmFibGUgZGF0YSBsb3NzIG9yIGNvcnJ1cHRpb24uXG4gICAgVHdpcnBFcnJvckNvZGVbXCJEYXRhTG9zc1wiXSA9IFwiZGF0YV9sb3NzXCI7XG59KShUd2lycEVycm9yQ29kZSA9IGV4cG9ydHMuVHdpcnBFcnJvckNvZGUgfHwgKGV4cG9ydHMuVHdpcnBFcnJvckNvZGUgPSB7fSkpO1xuLy8gU2VydmVySFRUUFN0YXR1c0Zyb21FcnJvckNvZGUgbWFwcyBhIFR3aXJwIGVycm9yIHR5cGUgaW50byBhIHNpbWlsYXIgSFRUUFxuLy8gcmVzcG9uc2Ugc3RhdHVzLiBJdCBpcyB1c2VkIGJ5IHRoZSBUd2lycCBzZXJ2ZXIgaGFuZGxlciB0byBzZXQgdGhlIEhUVFBcbi8vIHJlc3BvbnNlIHN0YXR1cyBjb2RlLiBSZXR1cm5zIDAgaWYgdGhlIEVycm9yQ29kZSBpcyBpbnZhbGlkLlxuZnVuY3Rpb24gaHR0cFN0YXR1c0Zyb21FcnJvckNvZGUoY29kZSkge1xuICAgIHN3aXRjaCAoY29kZSkge1xuICAgICAgICBjYXNlIFR3aXJwRXJyb3JDb2RlLkNhbmNlbGVkOlxuICAgICAgICAgICAgcmV0dXJuIDQwODsgLy8gUmVxdWVzdFRpbWVvdXRcbiAgICAgICAgY2FzZSBUd2lycEVycm9yQ29kZS5Vbmtub3duOlxuICAgICAgICAgICAgcmV0dXJuIDUwMDsgLy8gSW50ZXJuYWwgU2VydmVyIEVycm9yXG4gICAgICAgIGNhc2UgVHdpcnBFcnJvckNvZGUuSW52YWxpZEFyZ3VtZW50OlxuICAgICAgICAgICAgcmV0dXJuIDQwMDsgLy8gQmFkUmVxdWVzdFxuICAgICAgICBjYXNlIFR3aXJwRXJyb3JDb2RlLk1hbGZvcm1lZDpcbiAgICAgICAgICAgIHJldHVybiA0MDA7IC8vIEJhZFJlcXVlc3RcbiAgICAgICAgY2FzZSBUd2lycEVycm9yQ29kZS5EZWFkbGluZUV4Y2VlZGVkOlxuICAgICAgICAgICAgcmV0dXJuIDQwODsgLy8gUmVxdWVzdFRpbWVvdXRcbiAgICAgICAgY2FzZSBUd2lycEVycm9yQ29kZS5Ob3RGb3VuZDpcbiAgICAgICAgICAgIHJldHVybiA0MDQ7IC8vIE5vdCBGb3VuZFxuICAgICAgICBjYXNlIFR3aXJwRXJyb3JDb2RlLkJhZFJvdXRlOlxuICAgICAgICAgICAgcmV0dXJuIDQwNDsgLy8gTm90IEZvdW5kXG4gICAgICAgIGNhc2UgVHdpcnBFcnJvckNvZGUuQWxyZWFkeUV4aXN0czpcbiAgICAgICAgICAgIHJldHVybiA0MDk7IC8vIENvbmZsaWN0XG4gICAgICAgIGNhc2UgVHdpcnBFcnJvckNvZGUuUGVybWlzc2lvbkRlbmllZDpcbiAgICAgICAgICAgIHJldHVybiA0MDM7IC8vIEZvcmJpZGRlblxuICAgICAgICBjYXNlIFR3aXJwRXJyb3JDb2RlLlVuYXV0aGVudGljYXRlZDpcbiAgICAgICAgICAgIHJldHVybiA0MDE7IC8vIFVuYXV0aG9yaXplZFxuICAgICAgICBjYXNlIFR3aXJwRXJyb3JDb2RlLlJlc291cmNlRXhoYXVzdGVkOlxuICAgICAgICAgICAgcmV0dXJuIDQyOTsgLy8gVG9vIE1hbnkgUmVxdWVzdHNcbiAgICAgICAgY2FzZSBUd2lycEVycm9yQ29kZS5GYWlsZWRQcmVjb25kaXRpb246XG4gICAgICAgICAgICByZXR1cm4gNDEyOyAvLyBQcmVjb25kaXRpb24gRmFpbGVkXG4gICAgICAgIGNhc2UgVHdpcnBFcnJvckNvZGUuQWJvcnRlZDpcbiAgICAgICAgICAgIHJldHVybiA0MDk7IC8vIENvbmZsaWN0XG4gICAgICAgIGNhc2UgVHdpcnBFcnJvckNvZGUuT3V0T2ZSYW5nZTpcbiAgICAgICAgICAgIHJldHVybiA0MDA7IC8vIEJhZCBSZXF1ZXN0XG4gICAgICAgIGNhc2UgVHdpcnBFcnJvckNvZGUuVW5pbXBsZW1lbnRlZDpcbiAgICAgICAgICAgIHJldHVybiA1MDE7IC8vIE5vdCBJbXBsZW1lbnRlZFxuICAgICAgICBjYXNlIFR3aXJwRXJyb3JDb2RlLkludGVybmFsOlxuICAgICAgICAgICAgcmV0dXJuIDUwMDsgLy8gSW50ZXJuYWwgU2VydmVyIEVycm9yXG4gICAgICAgIGNhc2UgVHdpcnBFcnJvckNvZGUuVW5hdmFpbGFibGU6XG4gICAgICAgICAgICByZXR1cm4gNTAzOyAvLyBTZXJ2aWNlIFVuYXZhaWxhYmxlXG4gICAgICAgIGNhc2UgVHdpcnBFcnJvckNvZGUuRGF0YUxvc3M6XG4gICAgICAgICAgICByZXR1cm4gNTAwOyAvLyBJbnRlcm5hbCBTZXJ2ZXIgRXJyb3JcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiAwOyAvLyBJbnZhbGlkIVxuICAgIH1cbn1cbmV4cG9ydHMuaHR0cFN0YXR1c0Zyb21FcnJvckNvZGUgPSBodHRwU3RhdHVzRnJvbUVycm9yQ29kZTtcbi8vIElzVmFsaWRFcnJvckNvZGUgcmV0dXJucyB0cnVlIGlmIGlzIG9uZSBvZiB0aGUgdmFsaWQgcHJlZGVmaW5lZCBjb25zdGFudHMuXG5mdW5jdGlvbiBpc1ZhbGlkRXJyb3JDb2RlKGNvZGUpIHtcbiAgICByZXR1cm4gaHR0cFN0YXR1c0Zyb21FcnJvckNvZGUoY29kZSkgIT0gMDtcbn1cbmV4cG9ydHMuaXNWYWxpZEVycm9yQ29kZSA9IGlzVmFsaWRFcnJvckNvZGU7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnBhcnNlVHdpcnBQYXRoID0gZXhwb3J0cy5nZXRSZXF1ZXN0RGF0YSA9IGV4cG9ydHMudmFsaWRhdGVSZXF1ZXN0ID0gZXhwb3J0cy5nZXRDb250ZW50VHlwZSA9IGV4cG9ydHMuVHdpcnBDb250ZW50VHlwZSA9IHZvaWQgMDtcbmNvbnN0IGVycm9yc18xID0gcmVxdWlyZShcIi4vZXJyb3JzXCIpO1xuLyoqXG4gKiBTdXBwb3J0ZWQgVHdpcnAgQ29udGVudC1UeXBlXG4gKi9cbnZhciBUd2lycENvbnRlbnRUeXBlO1xuKGZ1bmN0aW9uIChUd2lycENvbnRlbnRUeXBlKSB7XG4gICAgVHdpcnBDb250ZW50VHlwZVtUd2lycENvbnRlbnRUeXBlW1wiUHJvdG9idWZcIl0gPSAwXSA9IFwiUHJvdG9idWZcIjtcbiAgICBUd2lycENvbnRlbnRUeXBlW1R3aXJwQ29udGVudFR5cGVbXCJKU09OXCJdID0gMV0gPSBcIkpTT05cIjtcbiAgICBUd2lycENvbnRlbnRUeXBlW1R3aXJwQ29udGVudFR5cGVbXCJVbmtub3duXCJdID0gMl0gPSBcIlVua25vd25cIjtcbn0pKFR3aXJwQ29udGVudFR5cGUgPSBleHBvcnRzLlR3aXJwQ29udGVudFR5cGUgfHwgKGV4cG9ydHMuVHdpcnBDb250ZW50VHlwZSA9IHt9KSk7XG4vKipcbiAqIEdldCBzdXBwb3J0ZWQgY29udGVudC10eXBlXG4gKiBAcGFyYW0gbWltZVR5cGVcbiAqL1xuZnVuY3Rpb24gZ2V0Q29udGVudFR5cGUobWltZVR5cGUpIHtcbiAgICBzd2l0Y2ggKG1pbWVUeXBlKSB7XG4gICAgICAgIGNhc2UgXCJhcHBsaWNhdGlvbi9wcm90b2J1ZlwiOlxuICAgICAgICAgICAgcmV0dXJuIFR3aXJwQ29udGVudFR5cGUuUHJvdG9idWY7XG4gICAgICAgIGNhc2UgXCJhcHBsaWNhdGlvbi9qc29uXCI6XG4gICAgICAgICAgICByZXR1cm4gVHdpcnBDb250ZW50VHlwZS5KU09OO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIFR3aXJwQ29udGVudFR5cGUuVW5rbm93bjtcbiAgICB9XG59XG5leHBvcnRzLmdldENvbnRlbnRUeXBlID0gZ2V0Q29udGVudFR5cGU7XG4vKipcbiAqIFZhbGlkYXRlIGEgdHdpcnAgcmVxdWVzdFxuICogQHBhcmFtIGN0eFxuICogQHBhcmFtIHJlcXVlc3RcbiAqIEBwYXJhbSBwYXRoUHJlZml4XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlUmVxdWVzdChjdHgsIHJlcXVlc3QsIHBhdGhQcmVmaXgpIHtcbiAgICBpZiAocmVxdWVzdC5tZXRob2QgIT09IFwiUE9TVFwiKSB7XG4gICAgICAgIGNvbnN0IG1zZyA9IGB1bnN1cHBvcnRlZCBtZXRob2QgJHtyZXF1ZXN0Lm1ldGhvZH0gKG9ubHkgUE9TVCBpcyBhbGxvd2VkKWA7XG4gICAgICAgIHRocm93IG5ldyBlcnJvcnNfMS5CYWRSb3V0ZUVycm9yKG1zZywgcmVxdWVzdC5tZXRob2QgfHwgXCJcIiwgcmVxdWVzdC51cmwgfHwgXCJcIik7XG4gICAgfVxuICAgIGNvbnN0IHBhdGggPSBwYXJzZVR3aXJwUGF0aChyZXF1ZXN0LnVybCB8fCBcIlwiKTtcbiAgICBpZiAocGF0aC5wa2dTZXJ2aWNlICE9PVxuICAgICAgICAoY3R4LnBhY2thZ2VOYW1lID8gY3R4LnBhY2thZ2VOYW1lICsgXCIuXCIgOiBcIlwiKSArIGN0eC5zZXJ2aWNlTmFtZSkge1xuICAgICAgICBjb25zdCBtc2cgPSBgbm8gaGFuZGxlciBmb3IgcGF0aCAke3JlcXVlc3QudXJsfWA7XG4gICAgICAgIHRocm93IG5ldyBlcnJvcnNfMS5CYWRSb3V0ZUVycm9yKG1zZywgcmVxdWVzdC5tZXRob2QgfHwgXCJcIiwgcmVxdWVzdC51cmwgfHwgXCJcIik7XG4gICAgfVxuICAgIGlmIChwYXRoLnByZWZpeCAhPT0gcGF0aFByZWZpeCkge1xuICAgICAgICBjb25zdCBtc2cgPSBgaW52YWxpZCBwYXRoIHByZWZpeCAke3BhdGgucHJlZml4fSwgZXhwZWN0ZWQgJHtwYXRoUHJlZml4fSwgb24gcGF0aCAke3JlcXVlc3QudXJsfWA7XG4gICAgICAgIHRocm93IG5ldyBlcnJvcnNfMS5CYWRSb3V0ZUVycm9yKG1zZywgcmVxdWVzdC5tZXRob2QgfHwgXCJcIiwgcmVxdWVzdC51cmwgfHwgXCJcIik7XG4gICAgfVxuICAgIGNvbnN0IG1pbWVDb250ZW50VHlwZSA9IHJlcXVlc3QuaGVhZGVyc1tcImNvbnRlbnQtdHlwZVwiXSB8fCBcIlwiO1xuICAgIGlmIChjdHguY29udGVudFR5cGUgPT09IFR3aXJwQ29udGVudFR5cGUuVW5rbm93bikge1xuICAgICAgICBjb25zdCBtc2cgPSBgdW5leHBlY3RlZCBDb250ZW50LVR5cGU6ICR7cmVxdWVzdC5oZWFkZXJzW1wiY29udGVudC10eXBlXCJdfWA7XG4gICAgICAgIHRocm93IG5ldyBlcnJvcnNfMS5CYWRSb3V0ZUVycm9yKG1zZywgcmVxdWVzdC5tZXRob2QgfHwgXCJcIiwgcmVxdWVzdC51cmwgfHwgXCJcIik7XG4gICAgfVxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHBhdGgpLCB7IG1pbWVDb250ZW50VHlwZSwgY29udGVudFR5cGU6IGN0eC5jb250ZW50VHlwZSB9KTtcbn1cbmV4cG9ydHMudmFsaWRhdGVSZXF1ZXN0ID0gdmFsaWRhdGVSZXF1ZXN0O1xuLyoqXG4gKiBHZXQgcmVxdWVzdCBkYXRhIGZyb20gdGhlIGJvZHlcbiAqIEBwYXJhbSByZXFcbiAqL1xuZnVuY3Rpb24gZ2V0UmVxdWVzdERhdGEocmVxKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgcmVxV2l0aFJhd0JvZHkgPSByZXE7XG4gICAgICAgIGlmIChyZXFXaXRoUmF3Qm9keS5yYXdCb2R5IGluc3RhbmNlb2YgQnVmZmVyKSB7XG4gICAgICAgICAgICByZXNvbHZlKHJlcVdpdGhSYXdCb2R5LnJhd0JvZHkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNodW5rcyA9IFtdO1xuICAgICAgICByZXEub24oXCJkYXRhXCIsIChjaHVuaykgPT4gY2h1bmtzLnB1c2goY2h1bmspKTtcbiAgICAgICAgcmVxLm9uKFwiZW5kXCIsICgpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBCdWZmZXIuY29uY2F0KGNodW5rcyk7XG4gICAgICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgICB9KSk7XG4gICAgICAgIHJlcS5vbihcImVycm9yXCIsIChlcnIpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXEuYWJvcnRlZCkge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgZXJyb3JzXzEuVHdpcnBFcnJvcihlcnJvcnNfMS5Ud2lycEVycm9yQ29kZS5EZWFkbGluZUV4Y2VlZGVkLCBcImZhaWxlZCB0byByZWFkIHJlcXVlc3Q6IGRlYWRsaW5lIGV4Y2VlZGVkXCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgZXJyb3JzXzEuVHdpcnBFcnJvcihlcnJvcnNfMS5Ud2lycEVycm9yQ29kZS5NYWxmb3JtZWQsIGVyci5tZXNzYWdlKS53aXRoQ2F1c2UoZXJyKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXEub24oXCJjbG9zZVwiLCAoKSA9PiB7XG4gICAgICAgICAgICByZWplY3QobmV3IGVycm9yc18xLlR3aXJwRXJyb3IoZXJyb3JzXzEuVHdpcnBFcnJvckNvZGUuQ2FuY2VsZWQsIFwiZmFpbGVkIHRvIHJlYWQgcmVxdWVzdDogY29udGV4dCBjYW5jZWxlZFwiKSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZXhwb3J0cy5nZXRSZXF1ZXN0RGF0YSA9IGdldFJlcXVlc3REYXRhO1xuLyoqXG4gKiBQYXJzZXMgdHdpcnAgdXJsIHBhdGhcbiAqIEBwYXJhbSBwYXRoXG4gKi9cbmZ1bmN0aW9uIHBhcnNlVHdpcnBQYXRoKHBhdGgpIHtcbiAgICBjb25zdCBwYXJ0cyA9IHBhdGguc3BsaXQoXCIvXCIpO1xuICAgIGlmIChwYXJ0cy5sZW5ndGggPCAyKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwa2dTZXJ2aWNlOiBcIlwiLFxuICAgICAgICAgICAgbWV0aG9kOiBcIlwiLFxuICAgICAgICAgICAgcHJlZml4OiBcIlwiLFxuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBtZXRob2Q6IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdLFxuICAgICAgICBwa2dTZXJ2aWNlOiBwYXJ0c1twYXJ0cy5sZW5ndGggLSAyXSxcbiAgICAgICAgcHJlZml4OiBwYXJ0cy5zbGljZSgwLCBwYXJ0cy5sZW5ndGggLSAyKS5qb2luKFwiL1wiKSxcbiAgICB9O1xufVxuZXhwb3J0cy5wYXJzZVR3aXJwUGF0aCA9IHBhcnNlVHdpcnBQYXRoO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy53cml0ZUVycm9yID0gZXhwb3J0cy5Ud2lycFNlcnZlciA9IHZvaWQgMDtcbmNvbnN0IGhvb2tzXzEgPSByZXF1aXJlKFwiLi9ob29rc1wiKTtcbmNvbnN0IHJlcXVlc3RfMSA9IHJlcXVpcmUoXCIuL3JlcXVlc3RcIik7XG5jb25zdCBlcnJvcnNfMSA9IHJlcXVpcmUoXCIuL2Vycm9yc1wiKTtcbi8qKlxuICogUnVudGltZSBzZXJ2ZXIgaW1wbGVtZW50YXRpb24gb2YgYSBUd2lycFNlcnZlclxuICovXG5jbGFzcyBUd2lycFNlcnZlciB7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICB0aGlzLnBhdGhQcmVmaXggPSBcIi90d2lycFwiO1xuICAgICAgICB0aGlzLmhvb2tzID0gW107XG4gICAgICAgIHRoaXMuaW50ZXJjZXB0b3JzID0gW107XG4gICAgICAgIHRoaXMucGFja2FnZU5hbWUgPSBvcHRpb25zLnBhY2thZ2VOYW1lO1xuICAgICAgICB0aGlzLnNlcnZpY2VOYW1lID0gb3B0aW9ucy5zZXJ2aWNlTmFtZTtcbiAgICAgICAgdGhpcy5tZXRob2RMaXN0ID0gb3B0aW9ucy5tZXRob2RMaXN0O1xuICAgICAgICB0aGlzLm1hdGNoUm91dGUgPSBvcHRpb25zLm1hdGNoUm91dGU7XG4gICAgICAgIHRoaXMuc2VydmljZSA9IG9wdGlvbnMuc2VydmljZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgcHJlZml4IGZvciB0aGlzIHNlcnZlclxuICAgICAqL1xuICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhdGhQcmVmaXg7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBodHRwIGhhbmRsZXIgZm9yIHR3aXJwIGNvbXBsYWludCBlbmRwb2ludHNcbiAgICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgICAqL1xuICAgIGh0dHBIYW5kbGVyKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIChyZXEsIHJlc3ApID0+IHtcbiAgICAgICAgICAgIC8vIHNldHVwIHByZWZpeFxuICAgICAgICAgICAgaWYgKChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMucHJlZml4KSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy53aXRoUHJlZml4KG9wdGlvbnMucHJlZml4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9odHRwSGFuZGxlcihyZXEsIHJlc3ApO1xuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGludGVyY2VwdG9ycyBvciBob29rcyB0byB0aGUgcmVxdWVzdCBzdGFja1xuICAgICAqIEBwYXJhbSBtaWRkbGV3YXJlc1xuICAgICAqL1xuICAgIHVzZSguLi5taWRkbGV3YXJlcykge1xuICAgICAgICBtaWRkbGV3YXJlcy5mb3JFYWNoKChtaWRkbGV3YXJlKSA9PiB7XG4gICAgICAgICAgICBpZiAoaG9va3NfMS5pc0hvb2sobWlkZGxld2FyZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhvb2tzLnB1c2gobWlkZGxld2FyZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmludGVyY2VwdG9ycy5wdXNoKG1pZGRsZXdhcmUpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBwcmVmaXggdG8gdGhlIHNlcnZpY2UgdXJsIHBhdGhcbiAgICAgKiBAcGFyYW0gcHJlZml4XG4gICAgICovXG4gICAgd2l0aFByZWZpeChwcmVmaXgpIHtcbiAgICAgICAgaWYgKHByZWZpeCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHRoaXMucGF0aFByZWZpeCA9IFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnBhdGhQcmVmaXggPSBwcmVmaXg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHJlZ2V4IG1hdGNoaW5nIHBhdGggZm9yIHRoaXMgdHdpcnAgc2VydmVyXG4gICAgICovXG4gICAgbWF0Y2hpbmdQYXRoKCkge1xuICAgICAgICBjb25zdCBiYXNlUmVnZXggPSB0aGlzLmJhc2VVUkkoKS5yZXBsYWNlKC9cXC4vZywgXCJcXFxcLlwiKTtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoYCR7YmFzZVJlZ2V4fVxcLygke3RoaXMubWV0aG9kTGlzdC5qb2luKFwifFwiKX0pYCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGJhc2UgVVJJIGZvciB0aGlzIHR3aXJwIHNlcnZlclxuICAgICAqL1xuICAgIGJhc2VVUkkoKSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLnBhdGhQcmVmaXh9LyR7dGhpcy5wYWNrYWdlTmFtZSA/IHRoaXMucGFja2FnZU5hbWUgKyBcIi5cIiA6IFwiXCJ9JHt0aGlzLnNlcnZpY2VOYW1lfWA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIHR3aXJwIGNvbnRleHRcbiAgICAgKiBAcGFyYW0gcmVxXG4gICAgICogQHBhcmFtIHJlc1xuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgY3JlYXRlQ29udGV4dChyZXEsIHJlcykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcGFja2FnZU5hbWU6IHRoaXMucGFja2FnZU5hbWUsXG4gICAgICAgICAgICBzZXJ2aWNlTmFtZTogdGhpcy5zZXJ2aWNlTmFtZSxcbiAgICAgICAgICAgIG1ldGhvZE5hbWU6IFwiXCIsXG4gICAgICAgICAgICBjb250ZW50VHlwZTogcmVxdWVzdF8xLmdldENvbnRlbnRUeXBlKHJlcS5oZWFkZXJzW1wiY29udGVudC10eXBlXCJdKSxcbiAgICAgICAgICAgIHJlcTogcmVxLFxuICAgICAgICAgICAgcmVzOiByZXMsXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFR3cmlwIHNlcnZlciBodHRwIGhhbmRsZXIgaW1wbGVtZW50YXRpb25cbiAgICAgKiBAcGFyYW0gcmVxXG4gICAgICogQHBhcmFtIHJlc3BcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF9odHRwSGFuZGxlcihyZXEsIHJlc3ApIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuY3JlYXRlQ29udGV4dChyZXEsIHJlc3ApO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB5aWVsZCB0aGlzLmludm9rZUhvb2soXCJyZXF1ZXN0UmVjZWl2ZWRcIiwgY3R4KTtcbiAgICAgICAgICAgICAgICBjb25zdCB7IG1ldGhvZCwgbWltZUNvbnRlbnRUeXBlIH0gPSByZXF1ZXN0XzEudmFsaWRhdGVSZXF1ZXN0KGN0eCwgcmVxLCB0aGlzLnBhdGhQcmVmaXggfHwgXCJcIik7XG4gICAgICAgICAgICAgICAgY29uc3QgaGFuZGxlciA9IHRoaXMubWF0Y2hSb3V0ZShtZXRob2QsIHtcbiAgICAgICAgICAgICAgICAgICAgb25NYXRjaDogKGN0eCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW52b2tlSG9vayhcInJlcXVlc3RSb3V0ZWRcIiwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgb25Ob3RGb3VuZDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXNnID0gYG5vIGhhbmRsZXIgZm9yIHBhdGggJHtyZXEudXJsfWA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuQmFkUm91dGVFcnJvcihtc2csIHJlcS5tZXRob2QgfHwgXCJcIiwgcmVxLnVybCB8fCBcIlwiKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCBib2R5ID0geWllbGQgcmVxdWVzdF8xLmdldFJlcXVlc3REYXRhKHJlcSk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSB5aWVsZCBoYW5kbGVyKGN0eCwgdGhpcy5zZXJ2aWNlLCBib2R5LCB0aGlzLmludGVyY2VwdG9ycyk7XG4gICAgICAgICAgICAgICAgeWllbGQgUHJvbWlzZS5hbGwoW1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludm9rZUhvb2soXCJyZXNwb25zZVByZXBhcmVkXCIsIGN0eCksXG4gICAgICAgICAgICAgICAgICAgIC8vIGtlZXAgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgdGlsbCBuZXh0IHJlbGVhc2VcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZva2VIb29rKFwicmVxdWVzdFByZXBhcmVkXCIsIGN0eCksXG4gICAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICAgICAgcmVzcC5zdGF0dXNDb2RlID0gMjAwO1xuICAgICAgICAgICAgICAgIHJlc3Auc2V0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIG1pbWVDb250ZW50VHlwZSk7XG4gICAgICAgICAgICAgICAgcmVzcC5lbmQocmVzcG9uc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICB5aWVsZCB0aGlzLmludm9rZUhvb2soXCJlcnJvclwiLCBjdHgsIG11c3RCZVR3aXJwRXJyb3IoZSkpO1xuICAgICAgICAgICAgICAgIGlmICghcmVzcC5oZWFkZXJzU2VudCkge1xuICAgICAgICAgICAgICAgICAgICB3cml0ZUVycm9yKHJlc3AsIGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHlpZWxkIFByb21pc2UuYWxsKFtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZva2VIb29rKFwicmVzcG9uc2VTZW50XCIsIGN0eCksXG4gICAgICAgICAgICAgICAgICAgIC8vIGtlZXAgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgdGlsbCBuZXh0IHJlbGVhc2VcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZva2VIb29rKFwicmVxdWVzdFNlbnRcIiwgY3R4KSxcbiAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEludm9rZSBhIGhvb2tcbiAgICAgKiBAcGFyYW0gaG9va05hbWVcbiAgICAgKiBAcGFyYW0gY3R4XG4gICAgICogQHBhcmFtIGVyclxuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbiAgICBpbnZva2VIb29rKGhvb2tOYW1lLCBjdHgsIGVycikge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaG9va3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY2hhaW5lZEhvb2tzID0gaG9va3NfMS5jaGFpbkhvb2tzKC4uLnRoaXMuaG9va3MpO1xuICAgICAgICAgICAgY29uc3QgaG9vayA9IGNoYWluZWRIb29rcyA9PT0gbnVsbCB8fCBjaGFpbmVkSG9va3MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNoYWluZWRIb29rc1tob29rTmFtZV07XG4gICAgICAgICAgICBpZiAoaG9vaykge1xuICAgICAgICAgICAgICAgIHlpZWxkIGhvb2soY3R4LCBlcnIgfHwgbmV3IGVycm9yc18xLkludGVybmFsU2VydmVyRXJyb3IoXCJpbnRlcm5hbCBzZXJ2ZXIgZXJyb3JcIikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnRzLlR3aXJwU2VydmVyID0gVHdpcnBTZXJ2ZXI7XG4vKipcbiAqIFdyaXRlIGh0dHAgZXJyb3IgcmVzcG9uc2VcbiAqIEBwYXJhbSByZXNcbiAqIEBwYXJhbSBlcnJvclxuICovXG5mdW5jdGlvbiB3cml0ZUVycm9yKHJlcywgZXJyb3IpIHtcbiAgICBjb25zdCB0d2lycEVycm9yID0gbXVzdEJlVHdpcnBFcnJvcihlcnJvcik7XG4gICAgcmVzLnNldEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb25cIik7XG4gICAgcmVzLnN0YXR1c0NvZGUgPSBlcnJvcnNfMS5odHRwU3RhdHVzRnJvbUVycm9yQ29kZSh0d2lycEVycm9yLmNvZGUpO1xuICAgIHJlcy5lbmQodHdpcnBFcnJvci50b0pTT04oKSk7XG59XG5leHBvcnRzLndyaXRlRXJyb3IgPSB3cml0ZUVycm9yO1xuLyoqXG4gKiBNYWtlIHN1cmUgdGhhdCB0aGUgZXJyb3IgcGFzc2VkIGlzIGEgVHdpcnBFcnJvclxuICogb3RoZXJ3aXNlIGl0IHdpbGwgd3JhcCBpdCBpbnRvIGFuIEludGVybmFsRXJyb3JcbiAqIEBwYXJhbSBlcnJcbiAqL1xuZnVuY3Rpb24gbXVzdEJlVHdpcnBFcnJvcihlcnIpIHtcbiAgICBpZiAoZXJyIGluc3RhbmNlb2YgZXJyb3JzXzEuVHdpcnBFcnJvcikge1xuICAgICAgICByZXR1cm4gZXJyO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IGVycm9yc18xLkludGVybmFsU2VydmVyRXJyb3JXaXRoKGVycik7XG59XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNoYWluSW50ZXJjZXB0b3JzID0gdm9pZCAwO1xuLy8gY2hhaW5zIG11bHRpcGxlIEludGVyY2VwdG9ycyBpbnRvIGEgc2luZ2xlIEludGVyY2VwdG9yLlxuLy8gVGhlIGZpcnN0IGludGVyY2VwdG9yIHdyYXBzIHRoZSBzZWNvbmQgb25lLCBhbmQgc28gb24uXG4vLyBSZXR1cm5zIG51bGwgaWYgaW50ZXJjZXB0b3JzIGlzIGVtcHR5LlxuZnVuY3Rpb24gY2hhaW5JbnRlcmNlcHRvcnMoLi4uaW50ZXJjZXB0b3JzKSB7XG4gICAgaWYgKGludGVyY2VwdG9ycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaW50ZXJjZXB0b3JzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gaW50ZXJjZXB0b3JzWzBdO1xuICAgIH1cbiAgICBjb25zdCBmaXJzdCA9IGludGVyY2VwdG9yc1swXTtcbiAgICByZXR1cm4gKGN0eCwgcmVxdWVzdCwgaGFuZGxlcikgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBsZXQgbmV4dCA9IGhhbmRsZXI7XG4gICAgICAgIGZvciAobGV0IGkgPSBpbnRlcmNlcHRvcnMubGVuZ3RoIC0gMTsgaSA+IDA7IGktLSkge1xuICAgICAgICAgICAgbmV4dCA9ICgobmV4dCkgPT4gKGN0eCwgdHlwZWRSZXF1ZXN0KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGludGVyY2VwdG9yc1tpXShjdHgsIHR5cGVkUmVxdWVzdCwgbmV4dCk7XG4gICAgICAgICAgICB9KShuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlyc3QoY3R4LCByZXF1ZXN0LCBuZXh0KTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuY2hhaW5JbnRlcmNlcHRvcnMgPSBjaGFpbkludGVyY2VwdG9ycztcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmZ1bmN0aW9uIF9wcm9jZXNzICh2LCBtb2QpIHtcbiAgdmFyIGlcbiAgdmFyIHJcblxuICBpZiAodHlwZW9mIG1vZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHIgPSBtb2QodilcbiAgICBpZiAociAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2ID0gclxuICAgIH1cbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG1vZCkpIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbW9kLmxlbmd0aDsgaSsrKSB7XG4gICAgICByID0gbW9kW2ldKHYpXG4gICAgICBpZiAociAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHYgPSByXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZcbn1cblxuZnVuY3Rpb24gcGFyc2VLZXkgKGtleSwgdmFsKSB7XG4gIC8vIGRldGVjdCBuZWdhdGl2ZSBpbmRleCBub3RhdGlvblxuICBpZiAoa2V5WzBdID09PSAnLScgJiYgQXJyYXkuaXNBcnJheSh2YWwpICYmIC9eLVxcZCskLy50ZXN0KGtleSkpIHtcbiAgICByZXR1cm4gdmFsLmxlbmd0aCArIHBhcnNlSW50KGtleSwgMTApXG4gIH1cbiAgcmV0dXJuIGtleVxufVxuXG5mdW5jdGlvbiBpc0luZGV4IChrKSB7XG4gIHJldHVybiAvXlxcZCskLy50ZXN0KGspXG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0ICh2YWwpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBPYmplY3RdJ1xufVxuXG5mdW5jdGlvbiBpc0FycmF5T3JPYmplY3QgKHZhbCkge1xuICByZXR1cm4gT2JqZWN0KHZhbCkgPT09IHZhbFxufVxuXG5mdW5jdGlvbiBpc0VtcHR5T2JqZWN0ICh2YWwpIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKHZhbCkubGVuZ3RoID09PSAwXG59XG5cbnZhciBibGFja2xpc3QgPSBbJ19fcHJvdG9fXycsICdwcm90b3R5cGUnLCAnY29uc3RydWN0b3InXVxudmFyIGJsYWNrbGlzdEZpbHRlciA9IGZ1bmN0aW9uIChwYXJ0KSB7IHJldHVybiBibGFja2xpc3QuaW5kZXhPZihwYXJ0KSA9PT0gLTEgfVxuXG5mdW5jdGlvbiBwYXJzZVBhdGggKHBhdGgsIHNlcCkge1xuICBpZiAocGF0aC5pbmRleE9mKCdbJykgPj0gMCkge1xuICAgIHBhdGggPSBwYXRoLnJlcGxhY2UoL1xcWy9nLCBzZXApLnJlcGxhY2UoL10vZywgJycpXG4gIH1cblxuICB2YXIgcGFydHMgPSBwYXRoLnNwbGl0KHNlcClcblxuICB2YXIgY2hlY2sgPSBwYXJ0cy5maWx0ZXIoYmxhY2tsaXN0RmlsdGVyKVxuXG4gIGlmIChjaGVjay5sZW5ndGggIT09IHBhcnRzLmxlbmd0aCkge1xuICAgIHRocm93IEVycm9yKCdSZWZ1c2luZyB0byB1cGRhdGUgYmxhY2tsaXN0ZWQgcHJvcGVydHkgJyArIHBhdGgpXG4gIH1cblxuICByZXR1cm4gcGFydHNcbn1cblxudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eVxuXG5mdW5jdGlvbiBEb3RPYmplY3QgKHNlcGFyYXRvciwgb3ZlcnJpZGUsIHVzZUFycmF5LCB1c2VCcmFja2V0cykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRG90T2JqZWN0KSkge1xuICAgIHJldHVybiBuZXcgRG90T2JqZWN0KHNlcGFyYXRvciwgb3ZlcnJpZGUsIHVzZUFycmF5LCB1c2VCcmFja2V0cylcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb3ZlcnJpZGUgPT09ICd1bmRlZmluZWQnKSBvdmVycmlkZSA9IGZhbHNlXG4gIGlmICh0eXBlb2YgdXNlQXJyYXkgPT09ICd1bmRlZmluZWQnKSB1c2VBcnJheSA9IHRydWVcbiAgaWYgKHR5cGVvZiB1c2VCcmFja2V0cyA9PT0gJ3VuZGVmaW5lZCcpIHVzZUJyYWNrZXRzID0gdHJ1ZVxuICB0aGlzLnNlcGFyYXRvciA9IHNlcGFyYXRvciB8fCAnLidcbiAgdGhpcy5vdmVycmlkZSA9IG92ZXJyaWRlXG4gIHRoaXMudXNlQXJyYXkgPSB1c2VBcnJheVxuICB0aGlzLnVzZUJyYWNrZXRzID0gdXNlQnJhY2tldHNcbiAgdGhpcy5rZWVwQXJyYXkgPSBmYWxzZVxuXG4gIC8vIGNvbnRhaW5zIHRvdWNoZWQgYXJyYXlzXG4gIHRoaXMuY2xlYW51cCA9IFtdXG59XG5cbnZhciBkb3REZWZhdWx0ID0gbmV3IERvdE9iamVjdCgnLicsIGZhbHNlLCB0cnVlLCB0cnVlKVxuZnVuY3Rpb24gd3JhcCAobWV0aG9kKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGRvdERlZmF1bHRbbWV0aG9kXS5hcHBseShkb3REZWZhdWx0LCBhcmd1bWVudHMpXG4gIH1cbn1cblxuRG90T2JqZWN0LnByb3RvdHlwZS5fZmlsbCA9IGZ1bmN0aW9uIChhLCBvYmosIHYsIG1vZCkge1xuICB2YXIgayA9IGEuc2hpZnQoKVxuXG4gIGlmIChhLmxlbmd0aCA+IDApIHtcbiAgICBvYmpba10gPSBvYmpba10gfHwgKHRoaXMudXNlQXJyYXkgJiYgaXNJbmRleChhWzBdKSA/IFtdIDoge30pXG5cbiAgICBpZiAoIWlzQXJyYXlPck9iamVjdChvYmpba10pKSB7XG4gICAgICBpZiAodGhpcy5vdmVycmlkZSkge1xuICAgICAgICBvYmpba10gPSB7fVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCEoaXNBcnJheU9yT2JqZWN0KHYpICYmIGlzRW1wdHlPYmplY3QodikpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgJ1RyeWluZyB0byByZWRlZmluZSBgJyArIGsgKyAnYCB3aGljaCBpcyBhICcgKyB0eXBlb2Ygb2JqW2tdXG4gICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fZmlsbChhLCBvYmpba10sIHYsIG1vZClcbiAgfSBlbHNlIHtcbiAgICBpZiAoIXRoaXMub3ZlcnJpZGUgJiYgaXNBcnJheU9yT2JqZWN0KG9ialtrXSkgJiYgIWlzRW1wdHlPYmplY3Qob2JqW2tdKSkge1xuICAgICAgaWYgKCEoaXNBcnJheU9yT2JqZWN0KHYpICYmIGlzRW1wdHlPYmplY3QodikpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRyeWluZyB0byByZWRlZmluZSBub24tZW1wdHkgb2JqWydcIiArIGsgKyBcIiddXCIpXG4gICAgICB9XG5cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIG9ialtrXSA9IF9wcm9jZXNzKHYsIG1vZClcbiAgfVxufVxuXG4vKipcbiAqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgd2l0aCBkb3R0ZWQta2V5L3ZhbHVlIHBhaXJzIHRvIGl0J3MgZXhwYW5kZWQgdmVyc2lvblxuICpcbiAqIE9wdGlvbmFsbHkgdHJhbnNmb3JtZWQgYnkgYSBzZXQgb2YgbW9kaWZpZXJzLlxuICpcbiAqIFVzYWdlOlxuICpcbiAqICAgdmFyIHJvdyA9IHtcbiAqICAgICAnbnInOiAyMDAsXG4gKiAgICAgJ2RvYy5uYW1lJzogJyAgTXkgRG9jdW1lbnQgICdcbiAqICAgfVxuICpcbiAqICAgdmFyIG1vZHMgPSB7XG4gKiAgICAgJ2RvYy5uYW1lJzogW19zLnRyaW0sIF9zLnVuZGVyc2NvcmVkXVxuICogICB9XG4gKlxuICogICBkb3Qub2JqZWN0KHJvdywgbW9kcylcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcGFyYW0ge09iamVjdH0gbW9kc1xuICovXG5Eb3RPYmplY3QucHJvdG90eXBlLm9iamVjdCA9IGZ1bmN0aW9uIChvYmosIG1vZHMpIHtcbiAgdmFyIHNlbGYgPSB0aGlzXG5cbiAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgdmFyIG1vZCA9IG1vZHMgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBtb2RzW2tdXG4gICAgLy8gbm9ybWFsaXplIGFycmF5IG5vdGF0aW9uLlxuICAgIHZhciBvayA9IHBhcnNlUGF0aChrLCBzZWxmLnNlcGFyYXRvcikuam9pbihzZWxmLnNlcGFyYXRvcilcblxuICAgIGlmIChvay5pbmRleE9mKHNlbGYuc2VwYXJhdG9yKSAhPT0gLTEpIHtcbiAgICAgIHNlbGYuX2ZpbGwob2suc3BsaXQoc2VsZi5zZXBhcmF0b3IpLCBvYmosIG9ialtrXSwgbW9kKVxuICAgICAgZGVsZXRlIG9ialtrXVxuICAgIH0gZWxzZSB7XG4gICAgICBvYmpba10gPSBfcHJvY2VzcyhvYmpba10sIG1vZClcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIG9ialxufVxuXG4vKipcbiAqIEBwYXJhbSB7U3RyaW5nfSBwYXRoIGRvdHRlZCBwYXRoXG4gKiBAcGFyYW0ge1N0cmluZ30gdiB2YWx1ZSB0byBiZSBzZXRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogb2JqZWN0IHRvIGJlIG1vZGlmaWVkXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufEFycmF5fSBtb2Qgb3B0aW9uYWwgbW9kaWZpZXJcbiAqL1xuRG90T2JqZWN0LnByb3RvdHlwZS5zdHIgPSBmdW5jdGlvbiAocGF0aCwgdiwgb2JqLCBtb2QpIHtcbiAgdmFyIG9rID0gcGFyc2VQYXRoKHBhdGgsIHRoaXMuc2VwYXJhdG9yKS5qb2luKHRoaXMuc2VwYXJhdG9yKVxuXG4gIGlmIChwYXRoLmluZGV4T2YodGhpcy5zZXBhcmF0b3IpICE9PSAtMSkge1xuICAgIHRoaXMuX2ZpbGwob2suc3BsaXQodGhpcy5zZXBhcmF0b3IpLCBvYmosIHYsIG1vZClcbiAgfSBlbHNlIHtcbiAgICBvYmpbcGF0aF0gPSBfcHJvY2Vzcyh2LCBtb2QpXG4gIH1cblxuICByZXR1cm4gb2JqXG59XG5cbi8qKlxuICpcbiAqIFBpY2sgYSB2YWx1ZSBmcm9tIGFuIG9iamVjdCB1c2luZyBkb3Qgbm90YXRpb24uXG4gKlxuICogT3B0aW9uYWxseSByZW1vdmUgdGhlIHZhbHVlXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHBhdGhcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gcmVtb3ZlXG4gKi9cbkRvdE9iamVjdC5wcm90b3R5cGUucGljayA9IGZ1bmN0aW9uIChwYXRoLCBvYmosIHJlbW92ZSwgcmVpbmRleEFycmF5KSB7XG4gIHZhciBpXG4gIHZhciBrZXlzXG4gIHZhciB2YWxcbiAgdmFyIGtleVxuICB2YXIgY3BcblxuICBrZXlzID0gcGFyc2VQYXRoKHBhdGgsIHRoaXMuc2VwYXJhdG9yKVxuICBmb3IgKGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGtleSA9IHBhcnNlS2V5KGtleXNbaV0sIG9iailcbiAgICBpZiAob2JqICYmIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIGtleSBpbiBvYmopIHtcbiAgICAgIGlmIChpID09PSBrZXlzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgaWYgKHJlbW92ZSkge1xuICAgICAgICAgIHZhbCA9IG9ialtrZXldXG4gICAgICAgICAgaWYgKHJlaW5kZXhBcnJheSAmJiBBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgICAgICAgIG9iai5zcGxpY2Uoa2V5LCAxKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZWxldGUgb2JqW2tleV1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgICAgICAgY3AgPSBrZXlzLnNsaWNlKDAsIC0xKS5qb2luKCcuJylcbiAgICAgICAgICAgIGlmICh0aGlzLmNsZWFudXAuaW5kZXhPZihjcCkgPT09IC0xKSB7XG4gICAgICAgICAgICAgIHRoaXMuY2xlYW51cC5wdXNoKGNwKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdmFsXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG9ialtrZXldXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9iaiA9IG9ialtrZXldXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG4gIH1cbiAgaWYgKHJlbW92ZSAmJiBBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICBvYmogPSBvYmouZmlsdGVyKGZ1bmN0aW9uIChuKSB7XG4gICAgICByZXR1cm4gbiAhPT0gdW5kZWZpbmVkXG4gICAgfSlcbiAgfVxuICByZXR1cm4gb2JqXG59XG4vKipcbiAqXG4gKiBEZWxldGUgdmFsdWUgZnJvbSBhbiBvYmplY3QgdXNpbmcgZG90IG5vdGF0aW9uLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBwYXRoXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcmV0dXJuIHthbnl9IFRoZSByZW1vdmVkIHZhbHVlXG4gKi9cbkRvdE9iamVjdC5wcm90b3R5cGUuZGVsZXRlID0gZnVuY3Rpb24gKHBhdGgsIG9iaikge1xuICByZXR1cm4gdGhpcy5yZW1vdmUocGF0aCwgb2JqLCB0cnVlKVxufVxuXG4vKipcbiAqXG4gKiBSZW1vdmUgdmFsdWUgZnJvbSBhbiBvYmplY3QgdXNpbmcgZG90IG5vdGF0aW9uLlxuICpcbiAqIFdpbGwgcmVtb3ZlIG11bHRpcGxlIGl0ZW1zIGlmIHBhdGggaXMgYW4gYXJyYXkuXG4gKiBJbiB0aGlzIGNhc2UgYXJyYXkgaW5kZXhlcyB3aWxsIGJlIHJldGFpbmVkIHVudGlsIGFsbFxuICogcmVtb3ZhbHMgaGF2ZSBiZWVuIHByb2Nlc3NlZC5cbiAqXG4gKiBVc2UgZG90LmRlbGV0ZSgpIHRvIGF1dG9tYXRpY2FsbHkgIHJlLWluZGV4IGFycmF5cy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ3xBcnJheTxTdHJpbmc+fSBwYXRoXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcGFyYW0ge0Jvb2xlYW59IHJlaW5kZXhBcnJheVxuICogQHJldHVybiB7YW55fSBUaGUgcmVtb3ZlZCB2YWx1ZVxuICovXG5Eb3RPYmplY3QucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uIChwYXRoLCBvYmosIHJlaW5kZXhBcnJheSkge1xuICB2YXIgaVxuXG4gIHRoaXMuY2xlYW51cCA9IFtdXG4gIGlmIChBcnJheS5pc0FycmF5KHBhdGgpKSB7XG4gICAgZm9yIChpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMucGljayhwYXRoW2ldLCBvYmosIHRydWUsIHJlaW5kZXhBcnJheSlcbiAgICB9XG4gICAgaWYgKCFyZWluZGV4QXJyYXkpIHtcbiAgICAgIHRoaXMuX2NsZWFudXAob2JqKVxuICAgIH1cbiAgICByZXR1cm4gb2JqXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHRoaXMucGljayhwYXRoLCBvYmosIHRydWUsIHJlaW5kZXhBcnJheSlcbiAgfVxufVxuXG5Eb3RPYmplY3QucHJvdG90eXBlLl9jbGVhbnVwID0gZnVuY3Rpb24gKG9iaikge1xuICB2YXIgcmV0XG4gIHZhciBpXG4gIHZhciBrZXlzXG4gIHZhciByb290XG4gIGlmICh0aGlzLmNsZWFudXAubGVuZ3RoKSB7XG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuY2xlYW51cC5sZW5ndGg7IGkrKykge1xuICAgICAga2V5cyA9IHRoaXMuY2xlYW51cFtpXS5zcGxpdCgnLicpXG4gICAgICByb290ID0ga2V5cy5zcGxpY2UoMCwgLTEpLmpvaW4oJy4nKVxuICAgICAgcmV0ID0gcm9vdCA/IHRoaXMucGljayhyb290LCBvYmopIDogb2JqXG4gICAgICByZXQgPSByZXRba2V5c1swXV0uZmlsdGVyKGZ1bmN0aW9uICh2KSB7XG4gICAgICAgIHJldHVybiB2ICE9PSB1bmRlZmluZWRcbiAgICAgIH0pXG4gICAgICB0aGlzLnNldCh0aGlzLmNsZWFudXBbaV0sIHJldCwgb2JqKVxuICAgIH1cbiAgICB0aGlzLmNsZWFudXAgPSBbXVxuICB9XG59XG5cbi8qKlxuICogQWxpYXMgbWV0aG9kICBmb3IgYGRvdC5yZW1vdmVgXG4gKlxuICogTm90ZTogdGhpcyBpcyBub3QgYW4gYWxpYXMgZm9yIGRvdC5kZWxldGUoKVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfEFycmF5PFN0cmluZz59IHBhdGhcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gcmVpbmRleEFycmF5XG4gKiBAcmV0dXJuIHthbnl9IFRoZSByZW1vdmVkIHZhbHVlXG4gKi9cbkRvdE9iamVjdC5wcm90b3R5cGUuZGVsID0gRG90T2JqZWN0LnByb3RvdHlwZS5yZW1vdmVcblxuLyoqXG4gKlxuICogTW92ZSBhIHByb3BlcnR5IGZyb20gb25lIHBsYWNlIHRvIHRoZSBvdGhlci5cbiAqXG4gKiBJZiB0aGUgc291cmNlIHBhdGggZG9lcyBub3QgZXhpc3QgKHVuZGVmaW5lZClcbiAqIHRoZSB0YXJnZXQgcHJvcGVydHkgd2lsbCBub3QgYmUgc2V0LlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzb3VyY2VcbiAqIEBwYXJhbSB7U3RyaW5nfSB0YXJnZXRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEBwYXJhbSB7RnVuY3Rpb258QXJyYXl9IG1vZHNcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gbWVyZ2VcbiAqL1xuRG90T2JqZWN0LnByb3RvdHlwZS5tb3ZlID0gZnVuY3Rpb24gKHNvdXJjZSwgdGFyZ2V0LCBvYmosIG1vZHMsIG1lcmdlKSB7XG4gIGlmICh0eXBlb2YgbW9kcyA9PT0gJ2Z1bmN0aW9uJyB8fCBBcnJheS5pc0FycmF5KG1vZHMpKSB7XG4gICAgdGhpcy5zZXQodGFyZ2V0LCBfcHJvY2Vzcyh0aGlzLnBpY2soc291cmNlLCBvYmosIHRydWUpLCBtb2RzKSwgb2JqLCBtZXJnZSlcbiAgfSBlbHNlIHtcbiAgICBtZXJnZSA9IG1vZHNcbiAgICB0aGlzLnNldCh0YXJnZXQsIHRoaXMucGljayhzb3VyY2UsIG9iaiwgdHJ1ZSksIG9iaiwgbWVyZ2UpXG4gIH1cblxuICByZXR1cm4gb2JqXG59XG5cbi8qKlxuICpcbiAqIFRyYW5zZmVyIGEgcHJvcGVydHkgZnJvbSBvbmUgb2JqZWN0IHRvIGFub3RoZXIgb2JqZWN0LlxuICpcbiAqIElmIHRoZSBzb3VyY2UgcGF0aCBkb2VzIG5vdCBleGlzdCAodW5kZWZpbmVkKVxuICogdGhlIHByb3BlcnR5IG9uIHRoZSBvdGhlciBvYmplY3Qgd2lsbCBub3QgYmUgc2V0LlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzb3VyY2VcbiAqIEBwYXJhbSB7U3RyaW5nfSB0YXJnZXRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmoxXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqMlxuICogQHBhcmFtIHtGdW5jdGlvbnxBcnJheX0gbW9kc1xuICogQHBhcmFtIHtCb29sZWFufSBtZXJnZVxuICovXG5Eb3RPYmplY3QucHJvdG90eXBlLnRyYW5zZmVyID0gZnVuY3Rpb24gKFxuICBzb3VyY2UsXG4gIHRhcmdldCxcbiAgb2JqMSxcbiAgb2JqMixcbiAgbW9kcyxcbiAgbWVyZ2Vcbikge1xuICBpZiAodHlwZW9mIG1vZHMgPT09ICdmdW5jdGlvbicgfHwgQXJyYXkuaXNBcnJheShtb2RzKSkge1xuICAgIHRoaXMuc2V0KFxuICAgICAgdGFyZ2V0LFxuICAgICAgX3Byb2Nlc3ModGhpcy5waWNrKHNvdXJjZSwgb2JqMSwgdHJ1ZSksIG1vZHMpLFxuICAgICAgb2JqMixcbiAgICAgIG1lcmdlXG4gICAgKVxuICB9IGVsc2Uge1xuICAgIG1lcmdlID0gbW9kc1xuICAgIHRoaXMuc2V0KHRhcmdldCwgdGhpcy5waWNrKHNvdXJjZSwgb2JqMSwgdHJ1ZSksIG9iajIsIG1lcmdlKVxuICB9XG5cbiAgcmV0dXJuIG9iajJcbn1cblxuLyoqXG4gKlxuICogQ29weSBhIHByb3BlcnR5IGZyb20gb25lIG9iamVjdCB0byBhbm90aGVyIG9iamVjdC5cbiAqXG4gKiBJZiB0aGUgc291cmNlIHBhdGggZG9lcyBub3QgZXhpc3QgKHVuZGVmaW5lZClcbiAqIHRoZSBwcm9wZXJ0eSBvbiB0aGUgb3RoZXIgb2JqZWN0IHdpbGwgbm90IGJlIHNldC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc291cmNlXG4gKiBAcGFyYW0ge1N0cmluZ30gdGFyZ2V0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqMVxuICogQHBhcmFtIHtPYmplY3R9IG9iajJcbiAqIEBwYXJhbSB7RnVuY3Rpb258QXJyYXl9IG1vZHNcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gbWVyZ2VcbiAqL1xuRG90T2JqZWN0LnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gKHNvdXJjZSwgdGFyZ2V0LCBvYmoxLCBvYmoyLCBtb2RzLCBtZXJnZSkge1xuICBpZiAodHlwZW9mIG1vZHMgPT09ICdmdW5jdGlvbicgfHwgQXJyYXkuaXNBcnJheShtb2RzKSkge1xuICAgIHRoaXMuc2V0KFxuICAgICAgdGFyZ2V0LFxuICAgICAgX3Byb2Nlc3MoXG4gICAgICAgIC8vIGNsb25lIHdoYXQgaXMgcGlja2VkXG4gICAgICAgIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5waWNrKHNvdXJjZSwgb2JqMSwgZmFsc2UpKSksXG4gICAgICAgIG1vZHNcbiAgICAgICksXG4gICAgICBvYmoyLFxuICAgICAgbWVyZ2VcbiAgICApXG4gIH0gZWxzZSB7XG4gICAgbWVyZ2UgPSBtb2RzXG4gICAgdGhpcy5zZXQodGFyZ2V0LCB0aGlzLnBpY2soc291cmNlLCBvYmoxLCBmYWxzZSksIG9iajIsIG1lcmdlKVxuICB9XG5cbiAgcmV0dXJuIG9iajJcbn1cblxuLyoqXG4gKlxuICogU2V0IGEgcHJvcGVydHkgb24gYW4gb2JqZWN0IHVzaW5nIGRvdCBub3RhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gcGF0aFxuICogQHBhcmFtIHthbnl9IHZhbFxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHBhcmFtIHtCb29sZWFufSBtZXJnZVxuICovXG5Eb3RPYmplY3QucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChwYXRoLCB2YWwsIG9iaiwgbWVyZ2UpIHtcbiAgdmFyIGlcbiAgdmFyIGtcbiAgdmFyIGtleXNcbiAgdmFyIGtleVxuXG4gIC8vIERvIG5vdCBvcGVyYXRlIGlmIHRoZSB2YWx1ZSBpcyB1bmRlZmluZWQuXG4gIGlmICh0eXBlb2YgdmFsID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBvYmpcbiAgfVxuICBrZXlzID0gcGFyc2VQYXRoKHBhdGgsIHRoaXMuc2VwYXJhdG9yKVxuXG4gIGZvciAoaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAga2V5ID0ga2V5c1tpXVxuICAgIGlmIChpID09PSBrZXlzLmxlbmd0aCAtIDEpIHtcbiAgICAgIGlmIChtZXJnZSAmJiBpc09iamVjdCh2YWwpICYmIGlzT2JqZWN0KG9ialtrZXldKSkge1xuICAgICAgICBmb3IgKGsgaW4gdmFsKSB7XG4gICAgICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwodmFsLCBrKSkge1xuICAgICAgICAgICAgb2JqW2tleV1ba10gPSB2YWxba11cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAobWVyZ2UgJiYgQXJyYXkuaXNBcnJheShvYmpba2V5XSkgJiYgQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdmFsLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgb2JqW2tleXNbaV1dLnB1c2godmFsW2pdKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvYmpba2V5XSA9IHZhbFxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICAvLyBmb3JjZSB0aGUgdmFsdWUgdG8gYmUgYW4gb2JqZWN0XG4gICAgICAhaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkgfHxcbiAgICAgICghaXNPYmplY3Qob2JqW2tleV0pICYmICFBcnJheS5pc0FycmF5KG9ialtrZXldKSlcbiAgICApIHtcbiAgICAgIC8vIGluaXRpYWxpemUgYXMgYXJyYXkgaWYgbmV4dCBrZXkgaXMgbnVtZXJpY1xuICAgICAgaWYgKC9eXFxkKyQvLnRlc3Qoa2V5c1tpICsgMV0pKSB7XG4gICAgICAgIG9ialtrZXldID0gW11cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9ialtrZXldID0ge31cbiAgICAgIH1cbiAgICB9XG4gICAgb2JqID0gb2JqW2tleV1cbiAgfVxuICByZXR1cm4gb2JqXG59XG5cbi8qKlxuICpcbiAqIFRyYW5zZm9ybSBhbiBvYmplY3RcbiAqXG4gKiBVc2FnZTpcbiAqXG4gKiAgIHZhciBvYmogPSB7XG4gKiAgICAgXCJpZFwiOiAxLFxuICogICAgXCJzb21lXCI6IHtcbiAqICAgICAgXCJ0aGluZ1wiOiBcImVsc2VcIlxuICogICAgfVxuICogICB9XG4gKlxuICogICB2YXIgdHJhbnNmb3JtID0ge1xuICogICAgIFwiaWRcIjogXCJuclwiLFxuICogICAgXCJzb21lLnRoaW5nXCI6IFwibmFtZVwiXG4gKiAgIH1cbiAqXG4gKiAgIHZhciB0Z3QgPSBkb3QudHJhbnNmb3JtKHRyYW5zZm9ybSwgb2JqKVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSByZWNpcGUgVHJhbnNmb3JtIHJlY2lwZVxuICogQHBhcmFtIHtPYmplY3R9IG9iaiBPYmplY3QgdG8gYmUgdHJhbnNmb3JtZWRcbiAqIEBwYXJhbSB7QXJyYXl9IG1vZHMgbW9kaWZpZXJzIGZvciB0aGUgdGFyZ2V0XG4gKi9cbkRvdE9iamVjdC5wcm90b3R5cGUudHJhbnNmb3JtID0gZnVuY3Rpb24gKHJlY2lwZSwgb2JqLCB0Z3QpIHtcbiAgb2JqID0gb2JqIHx8IHt9XG4gIHRndCA9IHRndCB8fCB7fVxuICBPYmplY3Qua2V5cyhyZWNpcGUpLmZvckVhY2goXG4gICAgZnVuY3Rpb24gKGtleSkge1xuICAgICAgdGhpcy5zZXQocmVjaXBlW2tleV0sIHRoaXMucGljayhrZXksIG9iaiksIHRndClcbiAgICB9LmJpbmQodGhpcylcbiAgKVxuICByZXR1cm4gdGd0XG59XG5cbi8qKlxuICpcbiAqIENvbnZlcnQgb2JqZWN0IHRvIGRvdHRlZC1rZXkvdmFsdWUgcGFpclxuICpcbiAqIFVzYWdlOlxuICpcbiAqICAgdmFyIHRndCA9IGRvdC5kb3Qob2JqKVxuICpcbiAqICAgb3JcbiAqXG4gKiAgIHZhciB0Z3QgPSB7fVxuICogICBkb3QuZG90KG9iaiwgdGd0KVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogc291cmNlIG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IHRndCB0YXJnZXQgb2JqZWN0XG4gKiBAcGFyYW0ge0FycmF5fSBwYXRoIHBhdGggYXJyYXkgKGludGVybmFsKVxuICovXG5Eb3RPYmplY3QucHJvdG90eXBlLmRvdCA9IGZ1bmN0aW9uIChvYmosIHRndCwgcGF0aCkge1xuICB0Z3QgPSB0Z3QgfHwge31cbiAgcGF0aCA9IHBhdGggfHwgW11cbiAgdmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5KG9iailcblxuICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goXG4gICAgZnVuY3Rpb24gKGtleSkge1xuICAgICAgdmFyIGluZGV4ID0gaXNBcnJheSAmJiB0aGlzLnVzZUJyYWNrZXRzID8gJ1snICsga2V5ICsgJ10nIDoga2V5XG4gICAgICBpZiAoXG4gICAgICAgIGlzQXJyYXlPck9iamVjdChvYmpba2V5XSkgJiZcbiAgICAgICAgKChpc09iamVjdChvYmpba2V5XSkgJiYgIWlzRW1wdHlPYmplY3Qob2JqW2tleV0pKSB8fFxuICAgICAgICAgIChBcnJheS5pc0FycmF5KG9ialtrZXldKSAmJiAhdGhpcy5rZWVwQXJyYXkgJiYgb2JqW2tleV0ubGVuZ3RoICE9PSAwKSlcbiAgICAgICkge1xuICAgICAgICBpZiAoaXNBcnJheSAmJiB0aGlzLnVzZUJyYWNrZXRzKSB7XG4gICAgICAgICAgdmFyIHByZXZpb3VzS2V5ID0gcGF0aFtwYXRoLmxlbmd0aCAtIDFdIHx8ICcnXG4gICAgICAgICAgcmV0dXJuIHRoaXMuZG90KFxuICAgICAgICAgICAgb2JqW2tleV0sXG4gICAgICAgICAgICB0Z3QsXG4gICAgICAgICAgICBwYXRoLnNsaWNlKDAsIC0xKS5jb25jYXQocHJldmlvdXNLZXkgKyBpbmRleClcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZG90KG9ialtrZXldLCB0Z3QsIHBhdGguY29uY2F0KGluZGV4KSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGlzQXJyYXkgJiYgdGhpcy51c2VCcmFja2V0cykge1xuICAgICAgICAgIHRndFtwYXRoLmpvaW4odGhpcy5zZXBhcmF0b3IpLmNvbmNhdCgnWycgKyBrZXkgKyAnXScpXSA9IG9ialtrZXldXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGd0W3BhdGguY29uY2F0KGluZGV4KS5qb2luKHRoaXMuc2VwYXJhdG9yKV0gPSBvYmpba2V5XVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfS5iaW5kKHRoaXMpXG4gIClcbiAgcmV0dXJuIHRndFxufVxuXG5Eb3RPYmplY3QucGljayA9IHdyYXAoJ3BpY2snKVxuRG90T2JqZWN0Lm1vdmUgPSB3cmFwKCdtb3ZlJylcbkRvdE9iamVjdC50cmFuc2ZlciA9IHdyYXAoJ3RyYW5zZmVyJylcbkRvdE9iamVjdC50cmFuc2Zvcm0gPSB3cmFwKCd0cmFuc2Zvcm0nKVxuRG90T2JqZWN0LmNvcHkgPSB3cmFwKCdjb3B5JylcbkRvdE9iamVjdC5vYmplY3QgPSB3cmFwKCdvYmplY3QnKVxuRG90T2JqZWN0LnN0ciA9IHdyYXAoJ3N0cicpXG5Eb3RPYmplY3Quc2V0ID0gd3JhcCgnc2V0JylcbkRvdE9iamVjdC5kZWxldGUgPSB3cmFwKCdkZWxldGUnKVxuRG90T2JqZWN0LmRlbCA9IERvdE9iamVjdC5yZW1vdmUgPSB3cmFwKCdyZW1vdmUnKVxuRG90T2JqZWN0LmRvdCA9IHdyYXAoJ2RvdCcpO1xuWydvdmVycmlkZScsICdvdmVyd3JpdGUnXS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEb3RPYmplY3QsIHByb3AsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBkb3REZWZhdWx0Lm92ZXJyaWRlXG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIGRvdERlZmF1bHQub3ZlcnJpZGUgPSAhIXZhbFxuICAgIH1cbiAgfSlcbn0pO1xuWyd1c2VBcnJheScsICdrZWVwQXJyYXknLCAndXNlQnJhY2tldHMnXS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEb3RPYmplY3QsIHByb3AsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBkb3REZWZhdWx0W3Byb3BdXG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIGRvdERlZmF1bHRbcHJvcF0gPSB2YWxcbiAgICB9XG4gIH0pXG59KVxuXG5Eb3RPYmplY3QuX3Byb2Nlc3MgPSBfcHJvY2Vzc1xuXG5tb2R1bGUuZXhwb3J0cyA9IERvdE9iamVjdFxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9KTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkZldGNoUlBDID0gZXhwb3J0cy53cmFwRXJyb3JSZXNwb25zZVRvVHdpcnBFcnJvciA9IGV4cG9ydHMuTm9kZUh0dHBSUEMgPSB2b2lkIDA7XG5jb25zdCBodHRwID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJodHRwXCIpKTtcbmNvbnN0IGh0dHBzID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJodHRwc1wiKSk7XG5jb25zdCB1cmxfMSA9IHJlcXVpcmUoXCJ1cmxcIik7XG5jb25zdCBlcnJvcnNfMSA9IHJlcXVpcmUoXCIuL2Vycm9yc1wiKTtcbi8qKlxuICogYSBub2RlIEhUVFAgUlBDIGltcGxlbWVudGF0aW9uXG4gKiBAcGFyYW0gb3B0aW9uc1xuICogQGNvbnN0cnVjdG9yXG4gKi9cbmNvbnN0IE5vZGVIdHRwUlBDID0gKG9wdGlvbnMpID0+ICh7XG4gICAgcmVxdWVzdChzZXJ2aWNlLCBtZXRob2QsIGNvbnRlbnRUeXBlLCBkYXRhKSB7XG4gICAgICAgIGxldCBjbGllbnQ7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0ZWQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlQ2h1bmtzID0gW107XG4gICAgICAgICAgICBjb25zdCByZXF1ZXN0RGF0YSA9IGNvbnRlbnRUeXBlID09PSBcImFwcGxpY2F0aW9uL3Byb3RvYnVmXCJcbiAgICAgICAgICAgICAgICA/IEJ1ZmZlci5mcm9tKGRhdGEpXG4gICAgICAgICAgICAgICAgOiBKU09OLnN0cmluZ2lmeShkYXRhKTtcbiAgICAgICAgICAgIGNvbnN0IHVybCA9IG5ldyB1cmxfMS5VUkwob3B0aW9ucy5iYXNlVXJsKTtcbiAgICAgICAgICAgIGNvbnN0IGlzSHR0cHMgPSB1cmwucHJvdG9jb2wgPT09IFwiaHR0cHM6XCI7XG4gICAgICAgICAgICBpZiAoaXNIdHRwcykge1xuICAgICAgICAgICAgICAgIGNsaWVudCA9IGh0dHBzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY2xpZW50ID0gaHR0cDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHByZWZpeCA9IHVybC5wYXRobmFtZSAhPT0gXCIvXCIgPyB1cmwucGF0aG5hbWUgOiBcIlwiO1xuICAgICAgICAgICAgY29uc3QgcmVxID0gY2xpZW50XG4gICAgICAgICAgICAgICAgLnJlcXVlc3QoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCAob3B0aW9ucyA/IG9wdGlvbnMgOiB7fSkpLCB7IG1ldGhvZDogXCJQT1NUXCIsIHByb3RvY29sOiB1cmwucHJvdG9jb2wsIGhvc3Q6IHVybC5ob3N0bmFtZSwgcG9ydDogdXJsLnBvcnQgPyB1cmwucG9ydCA6IGlzSHR0cHMgPyA0NDMgOiA4MCwgcGF0aDogYCR7cHJlZml4fS8ke3NlcnZpY2V9LyR7bWV0aG9kfWAsIGhlYWRlcnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgKG9wdGlvbnMuaGVhZGVycyA/IG9wdGlvbnMuaGVhZGVycyA6IHt9KSksIHsgXCJDb250ZW50LVR5cGVcIjogY29udGVudFR5cGUsIFwiQ29udGVudC1MZW5ndGhcIjogY29udGVudFR5cGUgPT09IFwiYXBwbGljYXRpb24vcHJvdG9idWZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPyBCdWZmZXIuYnl0ZUxlbmd0aChyZXF1ZXN0RGF0YSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogQnVmZmVyLmZyb20ocmVxdWVzdERhdGEpLmJ5dGVMZW5ndGggfSkgfSksIChyZXMpID0+IHtcbiAgICAgICAgICAgICAgICByZXMub24oXCJkYXRhXCIsIChjaHVuaykgPT4gcmVzcG9uc2VDaHVua3MucHVzaChjaHVuaykpO1xuICAgICAgICAgICAgICAgIHJlcy5vbihcImVuZFwiLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBCdWZmZXIuY29uY2F0KHJlc3BvbnNlQ2h1bmtzKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcy5zdGF0dXNDb2RlICE9IDIwMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0ZWQod3JhcEVycm9yUmVzcG9uc2VUb1R3aXJwRXJyb3IoZGF0YS50b1N0cmluZygpKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudFR5cGUgPT09IFwiYXBwbGljYXRpb24vanNvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShKU09OLnBhcnNlKGRhdGEudG9TdHJpbmcoKSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJlcy5vbihcImVycm9yXCIsIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0ZWQoZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLm9uKFwiZXJyb3JcIiwgKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIHJlamVjdGVkKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJlcS5lbmQocmVxdWVzdERhdGEpO1xuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG5leHBvcnRzLk5vZGVIdHRwUlBDID0gTm9kZUh0dHBSUEM7XG5mdW5jdGlvbiB3cmFwRXJyb3JSZXNwb25zZVRvVHdpcnBFcnJvcihlcnJvclJlc3BvbnNlKSB7XG4gICAgcmV0dXJuIGVycm9yc18xLlR3aXJwRXJyb3IuZnJvbU9iamVjdChKU09OLnBhcnNlKGVycm9yUmVzcG9uc2UpKTtcbn1cbmV4cG9ydHMud3JhcEVycm9yUmVzcG9uc2VUb1R3aXJwRXJyb3IgPSB3cmFwRXJyb3JSZXNwb25zZVRvVHdpcnBFcnJvcjtcbi8qKlxuICogYSBicm93c2VyIGZldGNoIFJQQyBpbXBsZW1lbnRhdGlvblxuICovXG5jb25zdCBGZXRjaFJQQyA9IChvcHRpb25zKSA9PiAoe1xuICAgIHJlcXVlc3Qoc2VydmljZSwgbWV0aG9kLCBjb250ZW50VHlwZSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgY29uc3QgaGVhZGVycyA9IG5ldyBIZWFkZXJzKG9wdGlvbnMuaGVhZGVycyk7XG4gICAgICAgICAgICBoZWFkZXJzLnNldChcImNvbnRlbnQtdHlwZVwiLCBjb250ZW50VHlwZSk7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IHlpZWxkIGZldGNoKGAke29wdGlvbnMuYmFzZVVybH0vJHtzZXJ2aWNlfS8ke21ldGhvZH1gLCBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMpLCB7IG1ldGhvZDogXCJQT1NUXCIsIGhlYWRlcnMsIGJvZHk6IGRhdGEgaW5zdGFuY2VvZiBVaW50OEFycmF5ID8gZGF0YSA6IEpTT04uc3RyaW5naWZ5KGRhdGEpIH0pKTtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgICAgIGlmIChjb250ZW50VHlwZSA9PT0gXCJhcHBsaWNhdGlvbi9qc29uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHlpZWxkIHJlc3BvbnNlLmpzb24oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHlpZWxkIHJlc3BvbnNlLmFycmF5QnVmZmVyKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3JzXzEuVHdpcnBFcnJvci5mcm9tT2JqZWN0KHlpZWxkIHJlc3BvbnNlLmpzb24oKSk7XG4gICAgICAgIH0pO1xuICAgIH0sXG59KTtcbmV4cG9ydHMuRmV0Y2hSUEMgPSBGZXRjaFJQQztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfSk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9fcmVzdCA9ICh0aGlzICYmIHRoaXMuX19yZXN0KSB8fCBmdW5jdGlvbiAocywgZSkge1xuICAgIHZhciB0ID0ge307XG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXG4gICAgICAgIHRbcF0gPSBzW3BdO1xuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xuICAgICAgICB9XG4gICAgcmV0dXJuIHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5HYXRld2F5ID0gZXhwb3J0cy5QYXR0ZXJuID0gdm9pZCAwO1xuY29uc3QgcXVlcnlzdHJpbmdfMSA9IHJlcXVpcmUoXCJxdWVyeXN0cmluZ1wiKTtcbmNvbnN0IGRvdE9iamVjdCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiZG90LW9iamVjdFwiKSk7XG5jb25zdCByZXF1ZXN0XzEgPSByZXF1aXJlKFwiLi9yZXF1ZXN0XCIpO1xuY29uc3QgZXJyb3JzXzEgPSByZXF1aXJlKFwiLi9lcnJvcnNcIik7XG5jb25zdCBodHRwX2NsaWVudF8xID0gcmVxdWlyZShcIi4vaHR0cC5jbGllbnRcIik7XG5jb25zdCBzZXJ2ZXJfMSA9IHJlcXVpcmUoXCIuL3NlcnZlclwiKTtcbnZhciBQYXR0ZXJuO1xuKGZ1bmN0aW9uIChQYXR0ZXJuKSB7XG4gICAgUGF0dGVybltcIlBPU1RcIl0gPSBcInBvc3RcIjtcbiAgICBQYXR0ZXJuW1wiR0VUXCJdID0gXCJnZXRcIjtcbiAgICBQYXR0ZXJuW1wiUEFUQ0hcIl0gPSBcInBhdGNoXCI7XG4gICAgUGF0dGVybltcIlBVVFwiXSA9IFwicHV0XCI7XG4gICAgUGF0dGVybltcIkRFTEVURVwiXSA9IFwiZGVsZXRlXCI7XG59KShQYXR0ZXJuID0gZXhwb3J0cy5QYXR0ZXJuIHx8IChleHBvcnRzLlBhdHRlcm4gPSB7fSkpO1xuLyoqXG4gKiBUaGUgR2F0ZXdheSBwcm94aWVzIGh0dHAgcmVxdWVzdHMgdG8gVHdpcnAgQ29tcGxpYW50XG4gKiBoYW5kbGVyc1xuICovXG5jbGFzcyBHYXRld2F5IHtcbiAgICBjb25zdHJ1Y3Rvcihyb3V0ZXMpIHtcbiAgICAgICAgdGhpcy5yb3V0ZXMgPSByb3V0ZXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1pZGRsZXdhcmUgdGhhdCByZXdyaXRlIHRoZSBjdXJyZW50IHJlcXVlc3RcbiAgICAgKiB0byBhIFR3aXJwIGNvbXBsaWFudCByZXF1ZXN0XG4gICAgICovXG4gICAgdHdpcnBSZXdyaXRlKHByZWZpeCA9IFwiL3R3aXJwXCIpIHtcbiAgICAgICAgcmV0dXJuIChyZXEsIHJlc3AsIG5leHQpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmV3cml0ZShyZXEsIHJlc3AsIHByZWZpeClcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiBuZXh0KCkpXG4gICAgICAgICAgICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBlcnJvcnNfMS5Ud2lycEVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlLmNvZGUgIT09IGVycm9yc18xLlR3aXJwRXJyb3JDb2RlLk5vdEZvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfMS53cml0ZUVycm9yKHJlc3AsIGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJld3JpdGUgYW4gaW5jb21pbmcgcmVxdWVzdCB0byBhIFR3aXJwIGNvbXBsaWFudCByZXF1ZXN0XG4gICAgICogQHBhcmFtIHJlcVxuICAgICAqIEBwYXJhbSByZXNwXG4gICAgICogQHBhcmFtIHByZWZpeFxuICAgICAqL1xuICAgIHJld3JpdGUocmVxLCByZXNwLCBwcmVmaXggPSBcIi90d2lycFwiKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCBbbWF0Y2gsIHJvdXRlXSA9IHRoaXMubWF0Y2hSb3V0ZShyZXEpO1xuICAgICAgICAgICAgY29uc3QgYm9keSA9IHlpZWxkIHRoaXMucHJlcGFyZVR3aXJwQm9keShyZXEsIG1hdGNoLCByb3V0ZSk7XG4gICAgICAgICAgICBjb25zdCB0d2lycFVybCA9IGAke3ByZWZpeH0vJHtyb3V0ZS5wYWNrYWdlTmFtZX0uJHtyb3V0ZS5zZXJ2aWNlTmFtZX0vJHtyb3V0ZS5tZXRob2ROYW1lfWA7XG4gICAgICAgICAgICByZXEudXJsID0gdHdpcnBVcmw7XG4gICAgICAgICAgICByZXEub3JpZ2luYWxVcmwgPSB0d2lycFVybDtcbiAgICAgICAgICAgIHJlcS5tZXRob2QgPSBcIlBPU1RcIjtcbiAgICAgICAgICAgIHJlcS5oZWFkZXJzW1wiY29udGVudC10eXBlXCJdID0gXCJhcHBsaWNhdGlvbi9qc29uXCI7XG4gICAgICAgICAgICByZXEucmF3Qm9keSA9IEJ1ZmZlci5mcm9tKEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcbiAgICAgICAgICAgIGlmIChyb3V0ZS5yZXNwb25zZUJvZHlLZXkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmRGbiA9IHJlc3AuZW5kLmJpbmQocmVzcCk7XG4gICAgICAgICAgICAgICAgcmVzcC5lbmQgPSBmdW5jdGlvbiAoY2h1bmspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3Auc3RhdHVzQ29kZSA9PT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRGbihgeyBcIiR7cm91dGUucmVzcG9uc2VCb2R5S2V5fVwiOiAke2NodW5rfSB9YCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRGbihjaHVuayk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgcmV2ZXJzZSBwcm94eSBoYW5kbGVyIHRvXG4gICAgICogcHJveHkgaHR0cCByZXF1ZXN0cyB0byBUd2lycCBDb21wbGlhbnQgaGFuZGxlcnNcbiAgICAgKiBAcGFyYW0gaHR0cENsaWVudE9wdGlvblxuICAgICAqL1xuICAgIHJldmVyc2VQcm94eShodHRwQ2xpZW50T3B0aW9uKSB7XG4gICAgICAgIGNvbnN0IGNsaWVudCA9IGh0dHBfY2xpZW50XzEuTm9kZUh0dHBSUEMoaHR0cENsaWVudE9wdGlvbik7XG4gICAgICAgIHJldHVybiAocmVxLCByZXMpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgW21hdGNoLCByb3V0ZV0gPSB0aGlzLm1hdGNoUm91dGUocmVxKTtcbiAgICAgICAgICAgICAgICBjb25zdCBib2R5ID0geWllbGQgdGhpcy5wcmVwYXJlVHdpcnBCb2R5KHJlcSwgbWF0Y2gsIHJvdXRlKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IHlpZWxkIGNsaWVudC5yZXF1ZXN0KGAke3JvdXRlLnBhY2thZ2VOYW1lfS4ke3JvdXRlLnNlcnZpY2VOYW1lfWAsIHJvdXRlLm1ldGhvZE5hbWUsIFwiYXBwbGljYXRpb24vanNvblwiLCBib2R5KTtcbiAgICAgICAgICAgICAgICByZXMuc3RhdHVzQ29kZSA9IDIwMDtcbiAgICAgICAgICAgICAgICByZXMuc2V0SGVhZGVyKFwiY29udGVudC10eXBlXCIsIFwiYXBwbGljYXRpb24vanNvblwiKTtcbiAgICAgICAgICAgICAgICBsZXQganNvblJlc3BvbnNlO1xuICAgICAgICAgICAgICAgIGlmIChyb3V0ZS5yZXNwb25zZUJvZHlLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAganNvblJlc3BvbnNlID0gSlNPTi5zdHJpbmdpZnkoeyBbcm91dGUucmVzcG9uc2VCb2R5S2V5XTogcmVzcG9uc2UgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBqc29uUmVzcG9uc2UgPSBKU09OLnN0cmluZ2lmeShyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlcy5lbmQoanNvblJlc3BvbnNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgc2VydmVyXzEud3JpdGVFcnJvcihyZXMsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUHJlcGFyZXMgdHdpcnAgYm9keSByZXF1ZXN0cyB1c2luZyBodHRwLmdvb2dsZS5hbm5vdGlvbnNcbiAgICAgKiBjb21wbGlhbnQgc3BlY1xuICAgICAqXG4gICAgICogQHBhcmFtIHJlcVxuICAgICAqIEBwYXJhbSBtYXRjaFxuICAgICAqIEBwYXJhbSByb3V0ZVxuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbiAgICBwcmVwYXJlVHdpcnBCb2R5KHJlcSwgbWF0Y2gsIHJvdXRlKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCBfYSA9IG1hdGNoLnBhcmFtcywgeyBxdWVyeV9zdHJpbmcgfSA9IF9hLCBwYXJhbXMgPSBfX3Jlc3QoX2EsIFtcInF1ZXJ5X3N0cmluZ1wiXSk7XG4gICAgICAgICAgICBsZXQgcmVxdWVzdEJvZHkgPSBPYmplY3QuYXNzaWduKHt9LCBwYXJhbXMpO1xuICAgICAgICAgICAgaWYgKHF1ZXJ5X3N0cmluZyAmJiByb3V0ZS5ib2R5S2V5ICE9PSBcIipcIikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gdGhpcy5wYXJzZVF1ZXJ5U3RyaW5nKHF1ZXJ5X3N0cmluZyk7XG4gICAgICAgICAgICAgICAgcmVxdWVzdEJvZHkgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHF1ZXJ5UGFyYW1zKSwgcmVxdWVzdEJvZHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGJvZHkgPSB7fTtcbiAgICAgICAgICAgIGlmIChyb3V0ZS5ib2R5S2V5KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IHlpZWxkIHJlcXVlc3RfMS5nZXRSZXF1ZXN0RGF0YShyZXEpO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGpzb25Cb2R5ID0gSlNPTi5wYXJzZShkYXRhLnRvU3RyaW5nKCkgfHwgXCJ7fVwiKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJvdXRlLmJvZHlLZXkgPT09IFwiKlwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5ID0ganNvbkJvZHk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5W3JvdXRlLmJvZHlLZXldID0ganNvbkJvZHk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbXNnID0gXCJ0aGUganNvbiByZXF1ZXN0IGNvdWxkIG5vdCBiZSBkZWNvZGVkXCI7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBlcnJvcnNfMS5Ud2lycEVycm9yKGVycm9yc18xLlR3aXJwRXJyb3JDb2RlLk1hbGZvcm1lZCwgbXNnKS53aXRoQ2F1c2UoZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYm9keSksIHJlcXVlc3RCb2R5KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1hdGNoZXMgYSByb3V0ZVxuICAgICAqIEBwYXJhbSByZXFcbiAgICAgKi9cbiAgICBtYXRjaFJvdXRlKHJlcSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IGh0dHBNZXRob2QgPSAoX2EgPSByZXEubWV0aG9kKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKCFodHRwTWV0aG9kKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuQmFkUm91dGVFcnJvcihgbWV0aG9kIG5vdCBhbGxvd2VkYCwgcmVxLm1ldGhvZCB8fCBcIlwiLCByZXEudXJsIHx8IFwiXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJvdXRlcyA9IHRoaXMucm91dGVzW2h0dHBNZXRob2RdO1xuICAgICAgICBmb3IgKGNvbnN0IHJvdXRlIG9mIHJvdXRlcykge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSByb3V0ZS5tYXRjaGVyKHJlcS51cmwgfHwgXCIvXCIpO1xuICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFttYXRjaCwgcm91dGVdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBlcnJvcnNfMS5Ob3RGb3VuZEVycm9yKGB1cmwgJHtyZXEudXJsfSBub3QgZm91bmRgKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUGFyc2UgcXVlcnkgc3RyaW5nXG4gICAgICogQHBhcmFtIHF1ZXJ5U3RyaW5nXG4gICAgICovXG4gICAgcGFyc2VRdWVyeVN0cmluZyhxdWVyeVN0cmluZykge1xuICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHF1ZXJ5c3RyaW5nXzEucGFyc2UocXVlcnlTdHJpbmcucmVwbGFjZShcIj9cIiwgXCJcIikpO1xuICAgICAgICByZXR1cm4gZG90T2JqZWN0Lm9iamVjdChxdWVyeVBhcmFtcyk7XG4gICAgfVxufVxuZXhwb3J0cy5HYXRld2F5ID0gR2F0ZXdheTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfSk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fZXhwb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19leHBvcnRTdGFyKSB8fCBmdW5jdGlvbihtLCBleHBvcnRzKSB7XG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChleHBvcnRzLCBwKSkgX19jcmVhdGVCaW5kaW5nKGV4cG9ydHMsIG0sIHApO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVHdpcnBDb250ZW50VHlwZSA9IHZvaWQgMDtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9jb250ZXh0XCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9zZXJ2ZXJcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2ludGVyY2VwdG9yc1wiKSwgZXhwb3J0cyk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vaG9va3NcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2Vycm9yc1wiKSwgZXhwb3J0cyk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vZ2F0ZXdheVwiKSwgZXhwb3J0cyk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vaHR0cC5jbGllbnRcIiksIGV4cG9ydHMpO1xudmFyIHJlcXVlc3RfMSA9IHJlcXVpcmUoXCIuL3JlcXVlc3RcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJUd2lycENvbnRlbnRUeXBlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZXF1ZXN0XzEuVHdpcnBDb250ZW50VHlwZTsgfSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlQXJ0aWZhY3RTZXJ2aWNlU2VydmVyID0gZXhwb3J0cy5BcnRpZmFjdFNlcnZpY2VNZXRob2RMaXN0ID0gZXhwb3J0cy5BcnRpZmFjdFNlcnZpY2VNZXRob2QgPSBleHBvcnRzLkFydGlmYWN0U2VydmljZUNsaWVudFByb3RvYnVmID0gZXhwb3J0cy5BcnRpZmFjdFNlcnZpY2VDbGllbnRKU09OID0gdm9pZCAwO1xuY29uc3QgdHdpcnBfdHNfMSA9IHJlcXVpcmUoXCJ0d2lycC10c1wiKTtcbmNvbnN0IGFydGlmYWN0XzEgPSByZXF1aXJlKFwiLi9hcnRpZmFjdFwiKTtcbmNsYXNzIEFydGlmYWN0U2VydmljZUNsaWVudEpTT04ge1xuICAgIGNvbnN0cnVjdG9yKHJwYykge1xuICAgICAgICB0aGlzLnJwYyA9IHJwYztcbiAgICAgICAgdGhpcy5DcmVhdGVBcnRpZmFjdC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLkZpbmFsaXplQXJ0aWZhY3QuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5MaXN0QXJ0aWZhY3RzLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuR2V0U2lnbmVkQXJ0aWZhY3RVUkwuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5EZWxldGVBcnRpZmFjdC5iaW5kKHRoaXMpO1xuICAgIH1cbiAgICBDcmVhdGVBcnRpZmFjdChyZXF1ZXN0KSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhcnRpZmFjdF8xLkNyZWF0ZUFydGlmYWN0UmVxdWVzdC50b0pzb24ocmVxdWVzdCwge1xuICAgICAgICAgICAgdXNlUHJvdG9GaWVsZE5hbWU6IHRydWUsXG4gICAgICAgICAgICBlbWl0RGVmYXVsdFZhbHVlczogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBwcm9taXNlID0gdGhpcy5ycGMucmVxdWVzdChcImdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkFydGlmYWN0U2VydmljZVwiLCBcIkNyZWF0ZUFydGlmYWN0XCIsIFwiYXBwbGljYXRpb24vanNvblwiLCBkYXRhKTtcbiAgICAgICAgcmV0dXJuIHByb21pc2UudGhlbigoZGF0YSkgPT4gYXJ0aWZhY3RfMS5DcmVhdGVBcnRpZmFjdFJlc3BvbnNlLmZyb21Kc29uKGRhdGEsIHtcbiAgICAgICAgICAgIGlnbm9yZVVua25vd25GaWVsZHM6IHRydWUsXG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgRmluYWxpemVBcnRpZmFjdChyZXF1ZXN0KSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhcnRpZmFjdF8xLkZpbmFsaXplQXJ0aWZhY3RSZXF1ZXN0LnRvSnNvbihyZXF1ZXN0LCB7XG4gICAgICAgICAgICB1c2VQcm90b0ZpZWxkTmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGVtaXREZWZhdWx0VmFsdWVzOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLnJwYy5yZXF1ZXN0KFwiZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuQXJ0aWZhY3RTZXJ2aWNlXCIsIFwiRmluYWxpemVBcnRpZmFjdFwiLCBcImFwcGxpY2F0aW9uL2pzb25cIiwgZGF0YSk7XG4gICAgICAgIHJldHVybiBwcm9taXNlLnRoZW4oKGRhdGEpID0+IGFydGlmYWN0XzEuRmluYWxpemVBcnRpZmFjdFJlc3BvbnNlLmZyb21Kc29uKGRhdGEsIHtcbiAgICAgICAgICAgIGlnbm9yZVVua25vd25GaWVsZHM6IHRydWUsXG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgTGlzdEFydGlmYWN0cyhyZXF1ZXN0KSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhcnRpZmFjdF8xLkxpc3RBcnRpZmFjdHNSZXF1ZXN0LnRvSnNvbihyZXF1ZXN0LCB7XG4gICAgICAgICAgICB1c2VQcm90b0ZpZWxkTmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGVtaXREZWZhdWx0VmFsdWVzOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLnJwYy5yZXF1ZXN0KFwiZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuQXJ0aWZhY3RTZXJ2aWNlXCIsIFwiTGlzdEFydGlmYWN0c1wiLCBcImFwcGxpY2F0aW9uL2pzb25cIiwgZGF0YSk7XG4gICAgICAgIHJldHVybiBwcm9taXNlLnRoZW4oKGRhdGEpID0+IGFydGlmYWN0XzEuTGlzdEFydGlmYWN0c1Jlc3BvbnNlLmZyb21Kc29uKGRhdGEsIHsgaWdub3JlVW5rbm93bkZpZWxkczogdHJ1ZSB9KSk7XG4gICAgfVxuICAgIEdldFNpZ25lZEFydGlmYWN0VVJMKHJlcXVlc3QpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGFydGlmYWN0XzEuR2V0U2lnbmVkQXJ0aWZhY3RVUkxSZXF1ZXN0LnRvSnNvbihyZXF1ZXN0LCB7XG4gICAgICAgICAgICB1c2VQcm90b0ZpZWxkTmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGVtaXREZWZhdWx0VmFsdWVzOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLnJwYy5yZXF1ZXN0KFwiZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuQXJ0aWZhY3RTZXJ2aWNlXCIsIFwiR2V0U2lnbmVkQXJ0aWZhY3RVUkxcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIsIGRhdGEpO1xuICAgICAgICByZXR1cm4gcHJvbWlzZS50aGVuKChkYXRhKSA9PiBhcnRpZmFjdF8xLkdldFNpZ25lZEFydGlmYWN0VVJMUmVzcG9uc2UuZnJvbUpzb24oZGF0YSwge1xuICAgICAgICAgICAgaWdub3JlVW5rbm93bkZpZWxkczogdHJ1ZSxcbiAgICAgICAgfSkpO1xuICAgIH1cbiAgICBEZWxldGVBcnRpZmFjdChyZXF1ZXN0KSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhcnRpZmFjdF8xLkRlbGV0ZUFydGlmYWN0UmVxdWVzdC50b0pzb24ocmVxdWVzdCwge1xuICAgICAgICAgICAgdXNlUHJvdG9GaWVsZE5hbWU6IHRydWUsXG4gICAgICAgICAgICBlbWl0RGVmYXVsdFZhbHVlczogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBwcm9taXNlID0gdGhpcy5ycGMucmVxdWVzdChcImdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkFydGlmYWN0U2VydmljZVwiLCBcIkRlbGV0ZUFydGlmYWN0XCIsIFwiYXBwbGljYXRpb24vanNvblwiLCBkYXRhKTtcbiAgICAgICAgcmV0dXJuIHByb21pc2UudGhlbigoZGF0YSkgPT4gYXJ0aWZhY3RfMS5EZWxldGVBcnRpZmFjdFJlc3BvbnNlLmZyb21Kc29uKGRhdGEsIHtcbiAgICAgICAgICAgIGlnbm9yZVVua25vd25GaWVsZHM6IHRydWUsXG4gICAgICAgIH0pKTtcbiAgICB9XG59XG5leHBvcnRzLkFydGlmYWN0U2VydmljZUNsaWVudEpTT04gPSBBcnRpZmFjdFNlcnZpY2VDbGllbnRKU09OO1xuY2xhc3MgQXJ0aWZhY3RTZXJ2aWNlQ2xpZW50UHJvdG9idWYge1xuICAgIGNvbnN0cnVjdG9yKHJwYykge1xuICAgICAgICB0aGlzLnJwYyA9IHJwYztcbiAgICAgICAgdGhpcy5DcmVhdGVBcnRpZmFjdC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLkZpbmFsaXplQXJ0aWZhY3QuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5MaXN0QXJ0aWZhY3RzLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuR2V0U2lnbmVkQXJ0aWZhY3RVUkwuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5EZWxldGVBcnRpZmFjdC5iaW5kKHRoaXMpO1xuICAgIH1cbiAgICBDcmVhdGVBcnRpZmFjdChyZXF1ZXN0KSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhcnRpZmFjdF8xLkNyZWF0ZUFydGlmYWN0UmVxdWVzdC50b0JpbmFyeShyZXF1ZXN0KTtcbiAgICAgICAgY29uc3QgcHJvbWlzZSA9IHRoaXMucnBjLnJlcXVlc3QoXCJnaXRodWIuYWN0aW9ucy5yZXN1bHRzLmFwaS52MS5BcnRpZmFjdFNlcnZpY2VcIiwgXCJDcmVhdGVBcnRpZmFjdFwiLCBcImFwcGxpY2F0aW9uL3Byb3RvYnVmXCIsIGRhdGEpO1xuICAgICAgICByZXR1cm4gcHJvbWlzZS50aGVuKChkYXRhKSA9PiBhcnRpZmFjdF8xLkNyZWF0ZUFydGlmYWN0UmVzcG9uc2UuZnJvbUJpbmFyeShkYXRhKSk7XG4gICAgfVxuICAgIEZpbmFsaXplQXJ0aWZhY3QocmVxdWVzdCkge1xuICAgICAgICBjb25zdCBkYXRhID0gYXJ0aWZhY3RfMS5GaW5hbGl6ZUFydGlmYWN0UmVxdWVzdC50b0JpbmFyeShyZXF1ZXN0KTtcbiAgICAgICAgY29uc3QgcHJvbWlzZSA9IHRoaXMucnBjLnJlcXVlc3QoXCJnaXRodWIuYWN0aW9ucy5yZXN1bHRzLmFwaS52MS5BcnRpZmFjdFNlcnZpY2VcIiwgXCJGaW5hbGl6ZUFydGlmYWN0XCIsIFwiYXBwbGljYXRpb24vcHJvdG9idWZcIiwgZGF0YSk7XG4gICAgICAgIHJldHVybiBwcm9taXNlLnRoZW4oKGRhdGEpID0+IGFydGlmYWN0XzEuRmluYWxpemVBcnRpZmFjdFJlc3BvbnNlLmZyb21CaW5hcnkoZGF0YSkpO1xuICAgIH1cbiAgICBMaXN0QXJ0aWZhY3RzKHJlcXVlc3QpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGFydGlmYWN0XzEuTGlzdEFydGlmYWN0c1JlcXVlc3QudG9CaW5hcnkocmVxdWVzdCk7XG4gICAgICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLnJwYy5yZXF1ZXN0KFwiZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuQXJ0aWZhY3RTZXJ2aWNlXCIsIFwiTGlzdEFydGlmYWN0c1wiLCBcImFwcGxpY2F0aW9uL3Byb3RvYnVmXCIsIGRhdGEpO1xuICAgICAgICByZXR1cm4gcHJvbWlzZS50aGVuKChkYXRhKSA9PiBhcnRpZmFjdF8xLkxpc3RBcnRpZmFjdHNSZXNwb25zZS5mcm9tQmluYXJ5KGRhdGEpKTtcbiAgICB9XG4gICAgR2V0U2lnbmVkQXJ0aWZhY3RVUkwocmVxdWVzdCkge1xuICAgICAgICBjb25zdCBkYXRhID0gYXJ0aWZhY3RfMS5HZXRTaWduZWRBcnRpZmFjdFVSTFJlcXVlc3QudG9CaW5hcnkocmVxdWVzdCk7XG4gICAgICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLnJwYy5yZXF1ZXN0KFwiZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuQXJ0aWZhY3RTZXJ2aWNlXCIsIFwiR2V0U2lnbmVkQXJ0aWZhY3RVUkxcIiwgXCJhcHBsaWNhdGlvbi9wcm90b2J1ZlwiLCBkYXRhKTtcbiAgICAgICAgcmV0dXJuIHByb21pc2UudGhlbigoZGF0YSkgPT4gYXJ0aWZhY3RfMS5HZXRTaWduZWRBcnRpZmFjdFVSTFJlc3BvbnNlLmZyb21CaW5hcnkoZGF0YSkpO1xuICAgIH1cbiAgICBEZWxldGVBcnRpZmFjdChyZXF1ZXN0KSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhcnRpZmFjdF8xLkRlbGV0ZUFydGlmYWN0UmVxdWVzdC50b0JpbmFyeShyZXF1ZXN0KTtcbiAgICAgICAgY29uc3QgcHJvbWlzZSA9IHRoaXMucnBjLnJlcXVlc3QoXCJnaXRodWIuYWN0aW9ucy5yZXN1bHRzLmFwaS52MS5BcnRpZmFjdFNlcnZpY2VcIiwgXCJEZWxldGVBcnRpZmFjdFwiLCBcImFwcGxpY2F0aW9uL3Byb3RvYnVmXCIsIGRhdGEpO1xuICAgICAgICByZXR1cm4gcHJvbWlzZS50aGVuKChkYXRhKSA9PiBhcnRpZmFjdF8xLkRlbGV0ZUFydGlmYWN0UmVzcG9uc2UuZnJvbUJpbmFyeShkYXRhKSk7XG4gICAgfVxufVxuZXhwb3J0cy5BcnRpZmFjdFNlcnZpY2VDbGllbnRQcm90b2J1ZiA9IEFydGlmYWN0U2VydmljZUNsaWVudFByb3RvYnVmO1xudmFyIEFydGlmYWN0U2VydmljZU1ldGhvZDtcbihmdW5jdGlvbiAoQXJ0aWZhY3RTZXJ2aWNlTWV0aG9kKSB7XG4gICAgQXJ0aWZhY3RTZXJ2aWNlTWV0aG9kW1wiQ3JlYXRlQXJ0aWZhY3RcIl0gPSBcIkNyZWF0ZUFydGlmYWN0XCI7XG4gICAgQXJ0aWZhY3RTZXJ2aWNlTWV0aG9kW1wiRmluYWxpemVBcnRpZmFjdFwiXSA9IFwiRmluYWxpemVBcnRpZmFjdFwiO1xuICAgIEFydGlmYWN0U2VydmljZU1ldGhvZFtcIkxpc3RBcnRpZmFjdHNcIl0gPSBcIkxpc3RBcnRpZmFjdHNcIjtcbiAgICBBcnRpZmFjdFNlcnZpY2VNZXRob2RbXCJHZXRTaWduZWRBcnRpZmFjdFVSTFwiXSA9IFwiR2V0U2lnbmVkQXJ0aWZhY3RVUkxcIjtcbiAgICBBcnRpZmFjdFNlcnZpY2VNZXRob2RbXCJEZWxldGVBcnRpZmFjdFwiXSA9IFwiRGVsZXRlQXJ0aWZhY3RcIjtcbn0pKEFydGlmYWN0U2VydmljZU1ldGhvZCB8fCAoZXhwb3J0cy5BcnRpZmFjdFNlcnZpY2VNZXRob2QgPSBBcnRpZmFjdFNlcnZpY2VNZXRob2QgPSB7fSkpO1xuZXhwb3J0cy5BcnRpZmFjdFNlcnZpY2VNZXRob2RMaXN0ID0gW1xuICAgIEFydGlmYWN0U2VydmljZU1ldGhvZC5DcmVhdGVBcnRpZmFjdCxcbiAgICBBcnRpZmFjdFNlcnZpY2VNZXRob2QuRmluYWxpemVBcnRpZmFjdCxcbiAgICBBcnRpZmFjdFNlcnZpY2VNZXRob2QuTGlzdEFydGlmYWN0cyxcbiAgICBBcnRpZmFjdFNlcnZpY2VNZXRob2QuR2V0U2lnbmVkQXJ0aWZhY3RVUkwsXG4gICAgQXJ0aWZhY3RTZXJ2aWNlTWV0aG9kLkRlbGV0ZUFydGlmYWN0LFxuXTtcbmZ1bmN0aW9uIGNyZWF0ZUFydGlmYWN0U2VydmljZVNlcnZlcihzZXJ2aWNlKSB7XG4gICAgcmV0dXJuIG5ldyB0d2lycF90c18xLlR3aXJwU2VydmVyKHtcbiAgICAgICAgc2VydmljZSxcbiAgICAgICAgcGFja2FnZU5hbWU6IFwiZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjFcIixcbiAgICAgICAgc2VydmljZU5hbWU6IFwiQXJ0aWZhY3RTZXJ2aWNlXCIsXG4gICAgICAgIG1ldGhvZExpc3Q6IGV4cG9ydHMuQXJ0aWZhY3RTZXJ2aWNlTWV0aG9kTGlzdCxcbiAgICAgICAgbWF0Y2hSb3V0ZTogbWF0Y2hBcnRpZmFjdFNlcnZpY2VSb3V0ZSxcbiAgICB9KTtcbn1cbmV4cG9ydHMuY3JlYXRlQXJ0aWZhY3RTZXJ2aWNlU2VydmVyID0gY3JlYXRlQXJ0aWZhY3RTZXJ2aWNlU2VydmVyO1xuZnVuY3Rpb24gbWF0Y2hBcnRpZmFjdFNlcnZpY2VSb3V0ZShtZXRob2QsIGV2ZW50cykge1xuICAgIHN3aXRjaCAobWV0aG9kKSB7XG4gICAgICAgIGNhc2UgXCJDcmVhdGVBcnRpZmFjdFwiOlxuICAgICAgICAgICAgcmV0dXJuIChjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycykgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgIGN0eCA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgY3R4KSwgeyBtZXRob2ROYW1lOiBcIkNyZWF0ZUFydGlmYWN0XCIgfSk7XG4gICAgICAgICAgICAgICAgeWllbGQgZXZlbnRzLm9uTWF0Y2goY3R4KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlQ3JlYXRlQXJ0aWZhY3RSZXF1ZXN0KGN0eCwgc2VydmljZSwgZGF0YSwgaW50ZXJjZXB0b3JzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICBjYXNlIFwiRmluYWxpemVBcnRpZmFjdFwiOlxuICAgICAgICAgICAgcmV0dXJuIChjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycykgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgIGN0eCA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgY3R4KSwgeyBtZXRob2ROYW1lOiBcIkZpbmFsaXplQXJ0aWZhY3RcIiB9KTtcbiAgICAgICAgICAgICAgICB5aWVsZCBldmVudHMub25NYXRjaChjdHgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGVBcnRpZmFjdFNlcnZpY2VGaW5hbGl6ZUFydGlmYWN0UmVxdWVzdChjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgY2FzZSBcIkxpc3RBcnRpZmFjdHNcIjpcbiAgICAgICAgICAgIHJldHVybiAoY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICBjdHggPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGN0eCksIHsgbWV0aG9kTmFtZTogXCJMaXN0QXJ0aWZhY3RzXCIgfSk7XG4gICAgICAgICAgICAgICAgeWllbGQgZXZlbnRzLm9uTWF0Y2goY3R4KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlTGlzdEFydGlmYWN0c1JlcXVlc3QoY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIGNhc2UgXCJHZXRTaWduZWRBcnRpZmFjdFVSTFwiOlxuICAgICAgICAgICAgcmV0dXJuIChjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycykgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgIGN0eCA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgY3R4KSwgeyBtZXRob2ROYW1lOiBcIkdldFNpZ25lZEFydGlmYWN0VVJMXCIgfSk7XG4gICAgICAgICAgICAgICAgeWllbGQgZXZlbnRzLm9uTWF0Y2goY3R4KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlR2V0U2lnbmVkQXJ0aWZhY3RVUkxSZXF1ZXN0KGN0eCwgc2VydmljZSwgZGF0YSwgaW50ZXJjZXB0b3JzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICBjYXNlIFwiRGVsZXRlQXJ0aWZhY3RcIjpcbiAgICAgICAgICAgIHJldHVybiAoY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICBjdHggPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGN0eCksIHsgbWV0aG9kTmFtZTogXCJEZWxldGVBcnRpZmFjdFwiIH0pO1xuICAgICAgICAgICAgICAgIHlpZWxkIGV2ZW50cy5vbk1hdGNoKGN0eCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUFydGlmYWN0U2VydmljZURlbGV0ZUFydGlmYWN0UmVxdWVzdChjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGV2ZW50cy5vbk5vdEZvdW5kKCk7XG4gICAgICAgICAgICBjb25zdCBtc2cgPSBgbm8gaGFuZGxlciBmb3VuZGA7XG4gICAgICAgICAgICB0aHJvdyBuZXcgdHdpcnBfdHNfMS5Ud2lycEVycm9yKHR3aXJwX3RzXzEuVHdpcnBFcnJvckNvZGUuQmFkUm91dGUsIG1zZyk7XG4gICAgfVxufVxuZnVuY3Rpb24gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlQ3JlYXRlQXJ0aWZhY3RSZXF1ZXN0KGN0eCwgc2VydmljZSwgZGF0YSwgaW50ZXJjZXB0b3JzKSB7XG4gICAgc3dpdGNoIChjdHguY29udGVudFR5cGUpIHtcbiAgICAgICAgY2FzZSB0d2lycF90c18xLlR3aXJwQ29udGVudFR5cGUuSlNPTjpcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVBcnRpZmFjdFNlcnZpY2VDcmVhdGVBcnRpZmFjdEpTT04oY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpO1xuICAgICAgICBjYXNlIHR3aXJwX3RzXzEuVHdpcnBDb250ZW50VHlwZS5Qcm90b2J1ZjpcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVBcnRpZmFjdFNlcnZpY2VDcmVhdGVBcnRpZmFjdFByb3RvYnVmKGN0eCwgc2VydmljZSwgZGF0YSwgaW50ZXJjZXB0b3JzKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNvbnN0IG1zZyA9IFwidW5leHBlY3RlZCBDb250ZW50LVR5cGVcIjtcbiAgICAgICAgICAgIHRocm93IG5ldyB0d2lycF90c18xLlR3aXJwRXJyb3IodHdpcnBfdHNfMS5Ud2lycEVycm9yQ29kZS5CYWRSb3V0ZSwgbXNnKTtcbiAgICB9XG59XG5mdW5jdGlvbiBoYW5kbGVBcnRpZmFjdFNlcnZpY2VGaW5hbGl6ZUFydGlmYWN0UmVxdWVzdChjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycykge1xuICAgIHN3aXRjaCAoY3R4LmNvbnRlbnRUeXBlKSB7XG4gICAgICAgIGNhc2UgdHdpcnBfdHNfMS5Ud2lycENvbnRlbnRUeXBlLkpTT046XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlRmluYWxpemVBcnRpZmFjdEpTT04oY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpO1xuICAgICAgICBjYXNlIHR3aXJwX3RzXzEuVHdpcnBDb250ZW50VHlwZS5Qcm90b2J1ZjpcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVBcnRpZmFjdFNlcnZpY2VGaW5hbGl6ZUFydGlmYWN0UHJvdG9idWYoY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgY29uc3QgbXNnID0gXCJ1bmV4cGVjdGVkIENvbnRlbnQtVHlwZVwiO1xuICAgICAgICAgICAgdGhyb3cgbmV3IHR3aXJwX3RzXzEuVHdpcnBFcnJvcih0d2lycF90c18xLlR3aXJwRXJyb3JDb2RlLkJhZFJvdXRlLCBtc2cpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGhhbmRsZUFydGlmYWN0U2VydmljZUxpc3RBcnRpZmFjdHNSZXF1ZXN0KGN0eCwgc2VydmljZSwgZGF0YSwgaW50ZXJjZXB0b3JzKSB7XG4gICAgc3dpdGNoIChjdHguY29udGVudFR5cGUpIHtcbiAgICAgICAgY2FzZSB0d2lycF90c18xLlR3aXJwQ29udGVudFR5cGUuSlNPTjpcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVBcnRpZmFjdFNlcnZpY2VMaXN0QXJ0aWZhY3RzSlNPTihjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycyk7XG4gICAgICAgIGNhc2UgdHdpcnBfdHNfMS5Ud2lycENvbnRlbnRUeXBlLlByb3RvYnVmOlxuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUFydGlmYWN0U2VydmljZUxpc3RBcnRpZmFjdHNQcm90b2J1ZihjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycyk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zdCBtc2cgPSBcInVuZXhwZWN0ZWQgQ29udGVudC1UeXBlXCI7XG4gICAgICAgICAgICB0aHJvdyBuZXcgdHdpcnBfdHNfMS5Ud2lycEVycm9yKHR3aXJwX3RzXzEuVHdpcnBFcnJvckNvZGUuQmFkUm91dGUsIG1zZyk7XG4gICAgfVxufVxuZnVuY3Rpb24gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlR2V0U2lnbmVkQXJ0aWZhY3RVUkxSZXF1ZXN0KGN0eCwgc2VydmljZSwgZGF0YSwgaW50ZXJjZXB0b3JzKSB7XG4gICAgc3dpdGNoIChjdHguY29udGVudFR5cGUpIHtcbiAgICAgICAgY2FzZSB0d2lycF90c18xLlR3aXJwQ29udGVudFR5cGUuSlNPTjpcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVBcnRpZmFjdFNlcnZpY2VHZXRTaWduZWRBcnRpZmFjdFVSTEpTT04oY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpO1xuICAgICAgICBjYXNlIHR3aXJwX3RzXzEuVHdpcnBDb250ZW50VHlwZS5Qcm90b2J1ZjpcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVBcnRpZmFjdFNlcnZpY2VHZXRTaWduZWRBcnRpZmFjdFVSTFByb3RvYnVmKGN0eCwgc2VydmljZSwgZGF0YSwgaW50ZXJjZXB0b3JzKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNvbnN0IG1zZyA9IFwidW5leHBlY3RlZCBDb250ZW50LVR5cGVcIjtcbiAgICAgICAgICAgIHRocm93IG5ldyB0d2lycF90c18xLlR3aXJwRXJyb3IodHdpcnBfdHNfMS5Ud2lycEVycm9yQ29kZS5CYWRSb3V0ZSwgbXNnKTtcbiAgICB9XG59XG5mdW5jdGlvbiBoYW5kbGVBcnRpZmFjdFNlcnZpY2VEZWxldGVBcnRpZmFjdFJlcXVlc3QoY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpIHtcbiAgICBzd2l0Y2ggKGN0eC5jb250ZW50VHlwZSkge1xuICAgICAgICBjYXNlIHR3aXJwX3RzXzEuVHdpcnBDb250ZW50VHlwZS5KU09OOlxuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUFydGlmYWN0U2VydmljZURlbGV0ZUFydGlmYWN0SlNPTihjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycyk7XG4gICAgICAgIGNhc2UgdHdpcnBfdHNfMS5Ud2lycENvbnRlbnRUeXBlLlByb3RvYnVmOlxuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUFydGlmYWN0U2VydmljZURlbGV0ZUFydGlmYWN0UHJvdG9idWYoY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgY29uc3QgbXNnID0gXCJ1bmV4cGVjdGVkIENvbnRlbnQtVHlwZVwiO1xuICAgICAgICAgICAgdGhyb3cgbmV3IHR3aXJwX3RzXzEuVHdpcnBFcnJvcih0d2lycF90c18xLlR3aXJwRXJyb3JDb2RlLkJhZFJvdXRlLCBtc2cpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGhhbmRsZUFydGlmYWN0U2VydmljZUNyZWF0ZUFydGlmYWN0SlNPTihjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGxldCByZXF1ZXN0O1xuICAgICAgICBsZXQgcmVzcG9uc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5wYXJzZShkYXRhLnRvU3RyaW5nKCkgfHwgXCJ7fVwiKTtcbiAgICAgICAgICAgIHJlcXVlc3QgPSBhcnRpZmFjdF8xLkNyZWF0ZUFydGlmYWN0UmVxdWVzdC5mcm9tSnNvbihib2R5LCB7XG4gICAgICAgICAgICAgICAgaWdub3JlVW5rbm93bkZpZWxkczogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbXNnID0gXCJ0aGUganNvbiByZXF1ZXN0IGNvdWxkIG5vdCBiZSBkZWNvZGVkXCI7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IHR3aXJwX3RzXzEuVHdpcnBFcnJvcih0d2lycF90c18xLlR3aXJwRXJyb3JDb2RlLk1hbGZvcm1lZCwgbXNnKS53aXRoQ2F1c2UoZSwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGludGVyY2VwdG9ycyAmJiBpbnRlcmNlcHRvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgaW50ZXJjZXB0b3IgPSAoMCwgdHdpcnBfdHNfMS5jaGFpbkludGVyY2VwdG9ycykoLi4uaW50ZXJjZXB0b3JzKTtcbiAgICAgICAgICAgIHJlc3BvbnNlID0geWllbGQgaW50ZXJjZXB0b3IoY3R4LCByZXF1ZXN0LCAoY3R4LCBpbnB1dFJlcSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBzZXJ2aWNlLkNyZWF0ZUFydGlmYWN0KGN0eCwgaW5wdXRSZXEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXNwb25zZSA9IHlpZWxkIHNlcnZpY2UuQ3JlYXRlQXJ0aWZhY3QoY3R4LCByZXF1ZXN0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoYXJ0aWZhY3RfMS5DcmVhdGVBcnRpZmFjdFJlc3BvbnNlLnRvSnNvbihyZXNwb25zZSwge1xuICAgICAgICAgICAgdXNlUHJvdG9GaWVsZE5hbWU6IHRydWUsXG4gICAgICAgICAgICBlbWl0RGVmYXVsdFZhbHVlczogZmFsc2UsXG4gICAgICAgIH0pKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGhhbmRsZUFydGlmYWN0U2VydmljZUZpbmFsaXplQXJ0aWZhY3RKU09OKGN0eCwgc2VydmljZSwgZGF0YSwgaW50ZXJjZXB0b3JzKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgbGV0IHJlcXVlc3Q7XG4gICAgICAgIGxldCByZXNwb25zZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBKU09OLnBhcnNlKGRhdGEudG9TdHJpbmcoKSB8fCBcInt9XCIpO1xuICAgICAgICAgICAgcmVxdWVzdCA9IGFydGlmYWN0XzEuRmluYWxpemVBcnRpZmFjdFJlcXVlc3QuZnJvbUpzb24oYm9keSwge1xuICAgICAgICAgICAgICAgIGlnbm9yZVVua25vd25GaWVsZHM6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1zZyA9IFwidGhlIGpzb24gcmVxdWVzdCBjb3VsZCBub3QgYmUgZGVjb2RlZFwiO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyB0d2lycF90c18xLlR3aXJwRXJyb3IodHdpcnBfdHNfMS5Ud2lycEVycm9yQ29kZS5NYWxmb3JtZWQsIG1zZykud2l0aENhdXNlKGUsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpbnRlcmNlcHRvcnMgJiYgaW50ZXJjZXB0b3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGludGVyY2VwdG9yID0gKDAsIHR3aXJwX3RzXzEuY2hhaW5JbnRlcmNlcHRvcnMpKC4uLmludGVyY2VwdG9ycyk7XG4gICAgICAgICAgICByZXNwb25zZSA9IHlpZWxkIGludGVyY2VwdG9yKGN0eCwgcmVxdWVzdCwgKGN0eCwgaW5wdXRSZXEpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VydmljZS5GaW5hbGl6ZUFydGlmYWN0KGN0eCwgaW5wdXRSZXEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXNwb25zZSA9IHlpZWxkIHNlcnZpY2UuRmluYWxpemVBcnRpZmFjdChjdHgsIHJlcXVlc3QpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShhcnRpZmFjdF8xLkZpbmFsaXplQXJ0aWZhY3RSZXNwb25zZS50b0pzb24ocmVzcG9uc2UsIHtcbiAgICAgICAgICAgIHVzZVByb3RvRmllbGROYW1lOiB0cnVlLFxuICAgICAgICAgICAgZW1pdERlZmF1bHRWYWx1ZXM6IGZhbHNlLFxuICAgICAgICB9KSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBoYW5kbGVBcnRpZmFjdFNlcnZpY2VMaXN0QXJ0aWZhY3RzSlNPTihjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGxldCByZXF1ZXN0O1xuICAgICAgICBsZXQgcmVzcG9uc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5wYXJzZShkYXRhLnRvU3RyaW5nKCkgfHwgXCJ7fVwiKTtcbiAgICAgICAgICAgIHJlcXVlc3QgPSBhcnRpZmFjdF8xLkxpc3RBcnRpZmFjdHNSZXF1ZXN0LmZyb21Kc29uKGJvZHksIHtcbiAgICAgICAgICAgICAgICBpZ25vcmVVbmtub3duRmllbGRzOiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtc2cgPSBcInRoZSBqc29uIHJlcXVlc3QgY291bGQgbm90IGJlIGRlY29kZWRcIjtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgdHdpcnBfdHNfMS5Ud2lycEVycm9yKHR3aXJwX3RzXzEuVHdpcnBFcnJvckNvZGUuTWFsZm9ybWVkLCBtc2cpLndpdGhDYXVzZShlLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaW50ZXJjZXB0b3JzICYmIGludGVyY2VwdG9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBpbnRlcmNlcHRvciA9ICgwLCB0d2lycF90c18xLmNoYWluSW50ZXJjZXB0b3JzKSguLi5pbnRlcmNlcHRvcnMpO1xuICAgICAgICAgICAgcmVzcG9uc2UgPSB5aWVsZCBpbnRlcmNlcHRvcihjdHgsIHJlcXVlc3QsIChjdHgsIGlucHV0UmVxKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlcnZpY2UuTGlzdEFydGlmYWN0cyhjdHgsIGlucHV0UmVxKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzcG9uc2UgPSB5aWVsZCBzZXJ2aWNlLkxpc3RBcnRpZmFjdHMoY3R4LCByZXF1ZXN0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoYXJ0aWZhY3RfMS5MaXN0QXJ0aWZhY3RzUmVzcG9uc2UudG9Kc29uKHJlc3BvbnNlLCB7XG4gICAgICAgICAgICB1c2VQcm90b0ZpZWxkTmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGVtaXREZWZhdWx0VmFsdWVzOiBmYWxzZSxcbiAgICAgICAgfSkpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlR2V0U2lnbmVkQXJ0aWZhY3RVUkxKU09OKGN0eCwgc2VydmljZSwgZGF0YSwgaW50ZXJjZXB0b3JzKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgbGV0IHJlcXVlc3Q7XG4gICAgICAgIGxldCByZXNwb25zZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBKU09OLnBhcnNlKGRhdGEudG9TdHJpbmcoKSB8fCBcInt9XCIpO1xuICAgICAgICAgICAgcmVxdWVzdCA9IGFydGlmYWN0XzEuR2V0U2lnbmVkQXJ0aWZhY3RVUkxSZXF1ZXN0LmZyb21Kc29uKGJvZHksIHtcbiAgICAgICAgICAgICAgICBpZ25vcmVVbmtub3duRmllbGRzOiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtc2cgPSBcInRoZSBqc29uIHJlcXVlc3QgY291bGQgbm90IGJlIGRlY29kZWRcIjtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgdHdpcnBfdHNfMS5Ud2lycEVycm9yKHR3aXJwX3RzXzEuVHdpcnBFcnJvckNvZGUuTWFsZm9ybWVkLCBtc2cpLndpdGhDYXVzZShlLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaW50ZXJjZXB0b3JzICYmIGludGVyY2VwdG9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBpbnRlcmNlcHRvciA9ICgwLCB0d2lycF90c18xLmNoYWluSW50ZXJjZXB0b3JzKSguLi5pbnRlcmNlcHRvcnMpO1xuICAgICAgICAgICAgcmVzcG9uc2UgPSB5aWVsZCBpbnRlcmNlcHRvcihjdHgsIHJlcXVlc3QsIChjdHgsIGlucHV0UmVxKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlcnZpY2UuR2V0U2lnbmVkQXJ0aWZhY3RVUkwoY3R4LCBpbnB1dFJlcSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3BvbnNlID0geWllbGQgc2VydmljZS5HZXRTaWduZWRBcnRpZmFjdFVSTChjdHgsIHJlcXVlc3QpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShhcnRpZmFjdF8xLkdldFNpZ25lZEFydGlmYWN0VVJMUmVzcG9uc2UudG9Kc29uKHJlc3BvbnNlLCB7XG4gICAgICAgICAgICB1c2VQcm90b0ZpZWxkTmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGVtaXREZWZhdWx0VmFsdWVzOiBmYWxzZSxcbiAgICAgICAgfSkpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlRGVsZXRlQXJ0aWZhY3RKU09OKGN0eCwgc2VydmljZSwgZGF0YSwgaW50ZXJjZXB0b3JzKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgbGV0IHJlcXVlc3Q7XG4gICAgICAgIGxldCByZXNwb25zZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBKU09OLnBhcnNlKGRhdGEudG9TdHJpbmcoKSB8fCBcInt9XCIpO1xuICAgICAgICAgICAgcmVxdWVzdCA9IGFydGlmYWN0XzEuRGVsZXRlQXJ0aWZhY3RSZXF1ZXN0LmZyb21Kc29uKGJvZHksIHtcbiAgICAgICAgICAgICAgICBpZ25vcmVVbmtub3duRmllbGRzOiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtc2cgPSBcInRoZSBqc29uIHJlcXVlc3QgY291bGQgbm90IGJlIGRlY29kZWRcIjtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgdHdpcnBfdHNfMS5Ud2lycEVycm9yKHR3aXJwX3RzXzEuVHdpcnBFcnJvckNvZGUuTWFsZm9ybWVkLCBtc2cpLndpdGhDYXVzZShlLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaW50ZXJjZXB0b3JzICYmIGludGVyY2VwdG9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBpbnRlcmNlcHRvciA9ICgwLCB0d2lycF90c18xLmNoYWluSW50ZXJjZXB0b3JzKSguLi5pbnRlcmNlcHRvcnMpO1xuICAgICAgICAgICAgcmVzcG9uc2UgPSB5aWVsZCBpbnRlcmNlcHRvcihjdHgsIHJlcXVlc3QsIChjdHgsIGlucHV0UmVxKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlcnZpY2UuRGVsZXRlQXJ0aWZhY3QoY3R4LCBpbnB1dFJlcSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3BvbnNlID0geWllbGQgc2VydmljZS5EZWxldGVBcnRpZmFjdChjdHgsIHJlcXVlc3QpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShhcnRpZmFjdF8xLkRlbGV0ZUFydGlmYWN0UmVzcG9uc2UudG9Kc29uKHJlc3BvbnNlLCB7XG4gICAgICAgICAgICB1c2VQcm90b0ZpZWxkTmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGVtaXREZWZhdWx0VmFsdWVzOiBmYWxzZSxcbiAgICAgICAgfSkpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlQ3JlYXRlQXJ0aWZhY3RQcm90b2J1ZihjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGxldCByZXF1ZXN0O1xuICAgICAgICBsZXQgcmVzcG9uc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXF1ZXN0ID0gYXJ0aWZhY3RfMS5DcmVhdGVBcnRpZmFjdFJlcXVlc3QuZnJvbUJpbmFyeShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1zZyA9IFwidGhlIHByb3RvYnVmIHJlcXVlc3QgY291bGQgbm90IGJlIGRlY29kZWRcIjtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgdHdpcnBfdHNfMS5Ud2lycEVycm9yKHR3aXJwX3RzXzEuVHdpcnBFcnJvckNvZGUuTWFsZm9ybWVkLCBtc2cpLndpdGhDYXVzZShlLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaW50ZXJjZXB0b3JzICYmIGludGVyY2VwdG9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBpbnRlcmNlcHRvciA9ICgwLCB0d2lycF90c18xLmNoYWluSW50ZXJjZXB0b3JzKSguLi5pbnRlcmNlcHRvcnMpO1xuICAgICAgICAgICAgcmVzcG9uc2UgPSB5aWVsZCBpbnRlcmNlcHRvcihjdHgsIHJlcXVlc3QsIChjdHgsIGlucHV0UmVxKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlcnZpY2UuQ3JlYXRlQXJ0aWZhY3QoY3R4LCBpbnB1dFJlcSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3BvbnNlID0geWllbGQgc2VydmljZS5DcmVhdGVBcnRpZmFjdChjdHgsIHJlcXVlc3QpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShhcnRpZmFjdF8xLkNyZWF0ZUFydGlmYWN0UmVzcG9uc2UudG9CaW5hcnkocmVzcG9uc2UpKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGhhbmRsZUFydGlmYWN0U2VydmljZUZpbmFsaXplQXJ0aWZhY3RQcm90b2J1ZihjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGxldCByZXF1ZXN0O1xuICAgICAgICBsZXQgcmVzcG9uc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXF1ZXN0ID0gYXJ0aWZhY3RfMS5GaW5hbGl6ZUFydGlmYWN0UmVxdWVzdC5mcm9tQmluYXJ5KGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbXNnID0gXCJ0aGUgcHJvdG9idWYgcmVxdWVzdCBjb3VsZCBub3QgYmUgZGVjb2RlZFwiO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyB0d2lycF90c18xLlR3aXJwRXJyb3IodHdpcnBfdHNfMS5Ud2lycEVycm9yQ29kZS5NYWxmb3JtZWQsIG1zZykud2l0aENhdXNlKGUsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpbnRlcmNlcHRvcnMgJiYgaW50ZXJjZXB0b3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGludGVyY2VwdG9yID0gKDAsIHR3aXJwX3RzXzEuY2hhaW5JbnRlcmNlcHRvcnMpKC4uLmludGVyY2VwdG9ycyk7XG4gICAgICAgICAgICByZXNwb25zZSA9IHlpZWxkIGludGVyY2VwdG9yKGN0eCwgcmVxdWVzdCwgKGN0eCwgaW5wdXRSZXEpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VydmljZS5GaW5hbGl6ZUFydGlmYWN0KGN0eCwgaW5wdXRSZXEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXNwb25zZSA9IHlpZWxkIHNlcnZpY2UuRmluYWxpemVBcnRpZmFjdChjdHgsIHJlcXVlc3QpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShhcnRpZmFjdF8xLkZpbmFsaXplQXJ0aWZhY3RSZXNwb25zZS50b0JpbmFyeShyZXNwb25zZSkpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlTGlzdEFydGlmYWN0c1Byb3RvYnVmKGN0eCwgc2VydmljZSwgZGF0YSwgaW50ZXJjZXB0b3JzKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgbGV0IHJlcXVlc3Q7XG4gICAgICAgIGxldCByZXNwb25zZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlcXVlc3QgPSBhcnRpZmFjdF8xLkxpc3RBcnRpZmFjdHNSZXF1ZXN0LmZyb21CaW5hcnkoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtc2cgPSBcInRoZSBwcm90b2J1ZiByZXF1ZXN0IGNvdWxkIG5vdCBiZSBkZWNvZGVkXCI7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IHR3aXJwX3RzXzEuVHdpcnBFcnJvcih0d2lycF90c18xLlR3aXJwRXJyb3JDb2RlLk1hbGZvcm1lZCwgbXNnKS53aXRoQ2F1c2UoZSwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGludGVyY2VwdG9ycyAmJiBpbnRlcmNlcHRvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgaW50ZXJjZXB0b3IgPSAoMCwgdHdpcnBfdHNfMS5jaGFpbkludGVyY2VwdG9ycykoLi4uaW50ZXJjZXB0b3JzKTtcbiAgICAgICAgICAgIHJlc3BvbnNlID0geWllbGQgaW50ZXJjZXB0b3IoY3R4LCByZXF1ZXN0LCAoY3R4LCBpbnB1dFJlcSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBzZXJ2aWNlLkxpc3RBcnRpZmFjdHMoY3R4LCBpbnB1dFJlcSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3BvbnNlID0geWllbGQgc2VydmljZS5MaXN0QXJ0aWZhY3RzKGN0eCwgcmVxdWVzdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGFydGlmYWN0XzEuTGlzdEFydGlmYWN0c1Jlc3BvbnNlLnRvQmluYXJ5KHJlc3BvbnNlKSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBoYW5kbGVBcnRpZmFjdFNlcnZpY2VHZXRTaWduZWRBcnRpZmFjdFVSTFByb3RvYnVmKGN0eCwgc2VydmljZSwgZGF0YSwgaW50ZXJjZXB0b3JzKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgbGV0IHJlcXVlc3Q7XG4gICAgICAgIGxldCByZXNwb25zZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlcXVlc3QgPSBhcnRpZmFjdF8xLkdldFNpZ25lZEFydGlmYWN0VVJMUmVxdWVzdC5mcm9tQmluYXJ5KGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbXNnID0gXCJ0aGUgcHJvdG9idWYgcmVxdWVzdCBjb3VsZCBub3QgYmUgZGVjb2RlZFwiO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyB0d2lycF90c18xLlR3aXJwRXJyb3IodHdpcnBfdHNfMS5Ud2lycEVycm9yQ29kZS5NYWxmb3JtZWQsIG1zZykud2l0aENhdXNlKGUsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpbnRlcmNlcHRvcnMgJiYgaW50ZXJjZXB0b3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGludGVyY2VwdG9yID0gKDAsIHR3aXJwX3RzXzEuY2hhaW5JbnRlcmNlcHRvcnMpKC4uLmludGVyY2VwdG9ycyk7XG4gICAgICAgICAgICByZXNwb25zZSA9IHlpZWxkIGludGVyY2VwdG9yKGN0eCwgcmVxdWVzdCwgKGN0eCwgaW5wdXRSZXEpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VydmljZS5HZXRTaWduZWRBcnRpZmFjdFVSTChjdHgsIGlucHV0UmVxKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzcG9uc2UgPSB5aWVsZCBzZXJ2aWNlLkdldFNpZ25lZEFydGlmYWN0VVJMKGN0eCwgcmVxdWVzdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGFydGlmYWN0XzEuR2V0U2lnbmVkQXJ0aWZhY3RVUkxSZXNwb25zZS50b0JpbmFyeShyZXNwb25zZSkpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlRGVsZXRlQXJ0aWZhY3RQcm90b2J1ZihjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGxldCByZXF1ZXN0O1xuICAgICAgICBsZXQgcmVzcG9uc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXF1ZXN0ID0gYXJ0aWZhY3RfMS5EZWxldGVBcnRpZmFjdFJlcXVlc3QuZnJvbUJpbmFyeShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1zZyA9IFwidGhlIHByb3RvYnVmIHJlcXVlc3QgY291bGQgbm90IGJlIGRlY29kZWRcIjtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgdHdpcnBfdHNfMS5Ud2lycEVycm9yKHR3aXJwX3RzXzEuVHdpcnBFcnJvckNvZGUuTWFsZm9ybWVkLCBtc2cpLndpdGhDYXVzZShlLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaW50ZXJjZXB0b3JzICYmIGludGVyY2VwdG9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBpbnRlcmNlcHRvciA9ICgwLCB0d2lycF90c18xLmNoYWluSW50ZXJjZXB0b3JzKSguLi5pbnRlcmNlcHRvcnMpO1xuICAgICAgICAgICAgcmVzcG9uc2UgPSB5aWVsZCBpbnRlcmNlcHRvcihjdHgsIHJlcXVlc3QsIChjdHgsIGlucHV0UmVxKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlcnZpY2UuRGVsZXRlQXJ0aWZhY3QoY3R4LCBpbnB1dFJlcSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3BvbnNlID0geWllbGQgc2VydmljZS5EZWxldGVBcnRpZmFjdChjdHgsIHJlcXVlc3QpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShhcnRpZmFjdF8xLkRlbGV0ZUFydGlmYWN0UmVzcG9uc2UudG9CaW5hcnkocmVzcG9uc2UpKTtcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFydGlmYWN0LnR3aXJwLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fZXhwb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19leHBvcnRTdGFyKSB8fCBmdW5jdGlvbihtLCBleHBvcnRzKSB7XG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChleHBvcnRzLCBwKSkgX19jcmVhdGVCaW5kaW5nKGV4cG9ydHMsIG0sIHApO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9nb29nbGUvcHJvdG9idWYvdGltZXN0YW1wXCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9nb29nbGUvcHJvdG9idWYvd3JhcHBlcnNcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3Jlc3VsdHMvYXBpL3YxL2FydGlmYWN0XCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9yZXN1bHRzL2FwaS92MS9hcnRpZmFjdC50d2lycFwiKSwgZXhwb3J0cyk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldEV4cGlyYXRpb24gPSB2b2lkIDA7XG5jb25zdCBnZW5lcmF0ZWRfMSA9IHJlcXVpcmUoXCIuLi8uLi9nZW5lcmF0ZWRcIik7XG5jb25zdCBjb3JlID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJAYWN0aW9ucy9jb3JlXCIpKTtcbmZ1bmN0aW9uIGdldEV4cGlyYXRpb24ocmV0ZW50aW9uRGF5cykge1xuICAgIGlmICghcmV0ZW50aW9uRGF5cykge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBtYXhSZXRlbnRpb25EYXlzID0gZ2V0UmV0ZW50aW9uRGF5cygpO1xuICAgIGlmIChtYXhSZXRlbnRpb25EYXlzICYmIG1heFJldGVudGlvbkRheXMgPCByZXRlbnRpb25EYXlzKSB7XG4gICAgICAgIGNvcmUud2FybmluZyhgUmV0ZW50aW9uIGRheXMgY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiB0aGUgbWF4aW11bSBhbGxvd2VkIHJldGVudGlvbiBzZXQgd2l0aGluIHRoZSByZXBvc2l0b3J5LiBVc2luZyAke21heFJldGVudGlvbkRheXN9IGluc3RlYWQuYCk7XG4gICAgICAgIHJldGVudGlvbkRheXMgPSBtYXhSZXRlbnRpb25EYXlzO1xuICAgIH1cbiAgICBjb25zdCBleHBpcmF0aW9uRGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgZXhwaXJhdGlvbkRhdGUuc2V0RGF0ZShleHBpcmF0aW9uRGF0ZS5nZXREYXRlKCkgKyByZXRlbnRpb25EYXlzKTtcbiAgICByZXR1cm4gZ2VuZXJhdGVkXzEuVGltZXN0YW1wLmZyb21EYXRlKGV4cGlyYXRpb25EYXRlKTtcbn1cbmV4cG9ydHMuZ2V0RXhwaXJhdGlvbiA9IGdldEV4cGlyYXRpb247XG5mdW5jdGlvbiBnZXRSZXRlbnRpb25EYXlzKCkge1xuICAgIGNvbnN0IHJldGVudGlvbkRheXMgPSBwcm9jZXNzLmVudlsnR0lUSFVCX1JFVEVOVElPTl9EQVlTJ107XG4gICAgaWYgKCFyZXRlbnRpb25EYXlzKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IGRheXMgPSBwYXJzZUludChyZXRlbnRpb25EYXlzKTtcbiAgICBpZiAoaXNOYU4oZGF5cykpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIGRheXM7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZXRlbnRpb24uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudmFsaWRhdGVGaWxlUGF0aCA9IGV4cG9ydHMudmFsaWRhdGVBcnRpZmFjdE5hbWUgPSB2b2lkIDA7XG5jb25zdCBjb3JlXzEgPSByZXF1aXJlKFwiQGFjdGlvbnMvY29yZVwiKTtcbi8qKlxuICogSW52YWxpZCBjaGFyYWN0ZXJzIHRoYXQgY2Fubm90IGJlIGluIHRoZSBhcnRpZmFjdCBuYW1lIG9yIGFuIHVwbG9hZGVkIGZpbGUuIFdpbGwgYmUgcmVqZWN0ZWRcbiAqIGZyb20gdGhlIHNlcnZlciBpZiBhdHRlbXB0ZWQgdG8gYmUgc2VudCBvdmVyLiBUaGVzZSBjaGFyYWN0ZXJzIGFyZSBub3QgYWxsb3dlZCBkdWUgdG8gbGltaXRhdGlvbnMgd2l0aCBjZXJ0YWluXG4gKiBmaWxlIHN5c3RlbXMgc3VjaCBhcyBOVEZTLiBUbyBtYWludGFpbiBwbGF0Zm9ybS1hZ25vc3RpYyBiZWhhdmlvciwgYWxsIGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90IHN1cHBvcnRlZCBieSBhblxuICogaW5kaXZpZHVhbCBmaWxlc3lzdGVtL3BsYXRmb3JtIHdpbGwgbm90IGJlIHN1cHBvcnRlZCBvbiBhbGwgZmlsZVN5c3RlbXMvcGxhdGZvcm1zXG4gKlxuICogRmlsZVBhdGhzIGNhbiBpbmNsdWRlIGNoYXJhY3RlcnMgc3VjaCBhcyBcXCBhbmQgLyB3aGljaCBhcmUgbm90IHBlcm1pdHRlZCBpbiB0aGUgYXJ0aWZhY3QgbmFtZSBhbG9uZVxuICovXG5jb25zdCBpbnZhbGlkQXJ0aWZhY3RGaWxlUGF0aENoYXJhY3RlcnMgPSBuZXcgTWFwKFtcbiAgICBbJ1wiJywgJyBEb3VibGUgcXVvdGUgXCInXSxcbiAgICBbJzonLCAnIENvbG9uIDonXSxcbiAgICBbJzwnLCAnIExlc3MgdGhhbiA8J10sXG4gICAgWyc+JywgJyBHcmVhdGVyIHRoYW4gPiddLFxuICAgIFsnfCcsICcgVmVydGljYWwgYmFyIHwnXSxcbiAgICBbJyonLCAnIEFzdGVyaXNrIConXSxcbiAgICBbJz8nLCAnIFF1ZXN0aW9uIG1hcmsgPyddLFxuICAgIFsnXFxyJywgJyBDYXJyaWFnZSByZXR1cm4gXFxcXHInXSxcbiAgICBbJ1xcbicsICcgTGluZSBmZWVkIFxcXFxuJ11cbl0pO1xuY29uc3QgaW52YWxpZEFydGlmYWN0TmFtZUNoYXJhY3RlcnMgPSBuZXcgTWFwKFtcbiAgICAuLi5pbnZhbGlkQXJ0aWZhY3RGaWxlUGF0aENoYXJhY3RlcnMsXG4gICAgWydcXFxcJywgJyBCYWNrc2xhc2ggXFxcXCddLFxuICAgIFsnLycsICcgRm9yd2FyZCBzbGFzaCAvJ11cbl0pO1xuLyoqXG4gKiBWYWxpZGF0ZXMgdGhlIG5hbWUgb2YgdGhlIGFydGlmYWN0IHRvIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gaWxsZWdhbCBjaGFyYWN0ZXJzXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQXJ0aWZhY3ROYW1lKG5hbWUpIHtcbiAgICBpZiAoIW5hbWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQcm92aWRlZCBhcnRpZmFjdCBuYW1lIGlucHV0IGR1cmluZyB2YWxpZGF0aW9uIGlzIGVtcHR5YCk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgW2ludmFsaWRDaGFyYWN0ZXJLZXksIGVycm9yTWVzc2FnZUZvckNoYXJhY3Rlcl0gb2YgaW52YWxpZEFydGlmYWN0TmFtZUNoYXJhY3RlcnMpIHtcbiAgICAgICAgaWYgKG5hbWUuaW5jbHVkZXMoaW52YWxpZENoYXJhY3RlcktleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGFydGlmYWN0IG5hbWUgaXMgbm90IHZhbGlkOiAke25hbWV9LiBDb250YWlucyB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcjogJHtlcnJvck1lc3NhZ2VGb3JDaGFyYWN0ZXJ9XG4gICAgICAgICAgXG5JbnZhbGlkIGNoYXJhY3RlcnMgaW5jbHVkZTogJHtBcnJheS5mcm9tKGludmFsaWRBcnRpZmFjdE5hbWVDaGFyYWN0ZXJzLnZhbHVlcygpKS50b1N0cmluZygpfVxuICAgICAgICAgIFxuVGhlc2UgY2hhcmFjdGVycyBhcmUgbm90IGFsbG93ZWQgaW4gdGhlIGFydGlmYWN0IG5hbWUgZHVlIHRvIGxpbWl0YXRpb25zIHdpdGggY2VydGFpbiBmaWxlIHN5c3RlbXMgc3VjaCBhcyBOVEZTLiBUbyBtYWludGFpbiBmaWxlIHN5c3RlbSBhZ25vc3RpYyBiZWhhdmlvciwgdGhlc2UgY2hhcmFjdGVycyBhcmUgaW50ZW50aW9uYWxseSBub3QgYWxsb3dlZCB0byBwcmV2ZW50IHBvdGVudGlhbCBwcm9ibGVtcyB3aXRoIGRvd25sb2FkcyBvbiBkaWZmZXJlbnQgZmlsZSBzeXN0ZW1zLmApO1xuICAgICAgICB9XG4gICAgfVxuICAgICgwLCBjb3JlXzEuaW5mbykoYEFydGlmYWN0IG5hbWUgaXMgdmFsaWQhYCk7XG59XG5leHBvcnRzLnZhbGlkYXRlQXJ0aWZhY3ROYW1lID0gdmFsaWRhdGVBcnRpZmFjdE5hbWU7XG4vKipcbiAqIFZhbGlkYXRlcyBmaWxlIHBhdGhzIHRvIGNoZWNrIGZvciBhbnkgaWxsZWdhbCBjaGFyYWN0ZXJzIHRoYXQgY2FuIGNhdXNlIHByb2JsZW1zIG9uIGRpZmZlcmVudCBmaWxlIHN5c3RlbXNcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVGaWxlUGF0aChwYXRoKSB7XG4gICAgaWYgKCFwYXRoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgUHJvdmlkZWQgZmlsZSBwYXRoIGlucHV0IGR1cmluZyB2YWxpZGF0aW9uIGlzIGVtcHR5YCk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgW2ludmFsaWRDaGFyYWN0ZXJLZXksIGVycm9yTWVzc2FnZUZvckNoYXJhY3Rlcl0gb2YgaW52YWxpZEFydGlmYWN0RmlsZVBhdGhDaGFyYWN0ZXJzKSB7XG4gICAgICAgIGlmIChwYXRoLmluY2x1ZGVzKGludmFsaWRDaGFyYWN0ZXJLZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBwYXRoIGZvciBvbmUgb2YgdGhlIGZpbGVzIGluIGFydGlmYWN0IGlzIG5vdCB2YWxpZDogJHtwYXRofS4gQ29udGFpbnMgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXI6ICR7ZXJyb3JNZXNzYWdlRm9yQ2hhcmFjdGVyfVxuICAgICAgICAgIFxuSW52YWxpZCBjaGFyYWN0ZXJzIGluY2x1ZGU6ICR7QXJyYXkuZnJvbShpbnZhbGlkQXJ0aWZhY3RGaWxlUGF0aENoYXJhY3RlcnMudmFsdWVzKCkpLnRvU3RyaW5nKCl9XG4gICAgICAgICAgXG5UaGUgZm9sbG93aW5nIGNoYXJhY3RlcnMgYXJlIG5vdCBhbGxvd2VkIGluIGZpbGVzIHRoYXQgYXJlIHVwbG9hZGVkIGR1ZSB0byBsaW1pdGF0aW9ucyB3aXRoIGNlcnRhaW4gZmlsZSBzeXN0ZW1zIHN1Y2ggYXMgTlRGUy4gVG8gbWFpbnRhaW4gZmlsZSBzeXN0ZW0gYWdub3N0aWMgYmVoYXZpb3IsIHRoZXNlIGNoYXJhY3RlcnMgYXJlIGludGVudGlvbmFsbHkgbm90IGFsbG93ZWQgdG8gcHJldmVudCBwb3RlbnRpYWwgcHJvYmxlbXMgd2l0aCBkb3dubG9hZHMgb24gZGlmZmVyZW50IGZpbGUgc3lzdGVtcy5cbiAgICAgICAgICBgKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMudmFsaWRhdGVGaWxlUGF0aCA9IHZhbGlkYXRlRmlsZVBhdGg7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wYXRoLWFuZC1hcnRpZmFjdC1uYW1lLXZhbGlkYXRpb24uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0VXNlckFnZW50U3RyaW5nID0gdm9pZCAwO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby12YXItcmVxdWlyZXMsIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbmNvbnN0IHBhY2thZ2VKc29uID0gcmVxdWlyZSgnLi4vLi4vLi4vcGFja2FnZS5qc29uJyk7XG4vKipcbiAqIEVuc3VyZSB0aGF0IHRoaXMgVXNlciBBZ2VudCBTdHJpbmcgaXMgdXNlZCBpbiBhbGwgSFRUUCBjYWxscyBzbyB0aGF0IHdlIGNhbiBtb25pdG9yIHRlbGVtZXRyeSBiZXR3ZWVuIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiB0aGlzIHBhY2thZ2VcbiAqL1xuZnVuY3Rpb24gZ2V0VXNlckFnZW50U3RyaW5nKCkge1xuICAgIHJldHVybiBgQGFjdGlvbnMvYXJ0aWZhY3QtJHtwYWNrYWdlSnNvbi52ZXJzaW9ufWA7XG59XG5leHBvcnRzLmdldFVzZXJBZ2VudFN0cmluZyA9IGdldFVzZXJBZ2VudFN0cmluZztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzZXItYWdlbnQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVXNhZ2VFcnJvciA9IGV4cG9ydHMuTmV0d29ya0Vycm9yID0gZXhwb3J0cy5HSEVTTm90U3VwcG9ydGVkRXJyb3IgPSBleHBvcnRzLkFydGlmYWN0Tm90Rm91bmRFcnJvciA9IGV4cG9ydHMuSW52YWxpZFJlc3BvbnNlRXJyb3IgPSBleHBvcnRzLkZpbGVzTm90Rm91bmRFcnJvciA9IHZvaWQgMDtcbmNsYXNzIEZpbGVzTm90Rm91bmRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihmaWxlcyA9IFtdKSB7XG4gICAgICAgIGxldCBtZXNzYWdlID0gJ05vIGZpbGVzIHdlcmUgZm91bmQgdG8gdXBsb2FkJztcbiAgICAgICAgaWYgKGZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIG1lc3NhZ2UgKz0gYDogJHtmaWxlcy5qb2luKCcsICcpfWA7XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XG4gICAgICAgIHRoaXMuZmlsZXMgPSBmaWxlcztcbiAgICAgICAgdGhpcy5uYW1lID0gJ0ZpbGVzTm90Rm91bmRFcnJvcic7XG4gICAgfVxufVxuZXhwb3J0cy5GaWxlc05vdEZvdW5kRXJyb3IgPSBGaWxlc05vdEZvdW5kRXJyb3I7XG5jbGFzcyBJbnZhbGlkUmVzcG9uc2VFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLm5hbWUgPSAnSW52YWxpZFJlc3BvbnNlRXJyb3InO1xuICAgIH1cbn1cbmV4cG9ydHMuSW52YWxpZFJlc3BvbnNlRXJyb3IgPSBJbnZhbGlkUmVzcG9uc2VFcnJvcjtcbmNsYXNzIEFydGlmYWN0Tm90Rm91bmRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlID0gJ0FydGlmYWN0IG5vdCBmb3VuZCcpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XG4gICAgICAgIHRoaXMubmFtZSA9ICdBcnRpZmFjdE5vdEZvdW5kRXJyb3InO1xuICAgIH1cbn1cbmV4cG9ydHMuQXJ0aWZhY3ROb3RGb3VuZEVycm9yID0gQXJ0aWZhY3ROb3RGb3VuZEVycm9yO1xuY2xhc3MgR0hFU05vdFN1cHBvcnRlZEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2UgPSAnQGFjdGlvbnMvYXJ0aWZhY3QgdjIuMC4wKywgdXBsb2FkLWFydGlmYWN0QHY0KyBhbmQgZG93bmxvYWQtYXJ0aWZhY3RAdjQrIGFyZSBub3QgY3VycmVudGx5IHN1cHBvcnRlZCBvbiBHSEVTLicpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XG4gICAgICAgIHRoaXMubmFtZSA9ICdHSEVTTm90U3VwcG9ydGVkRXJyb3InO1xuICAgIH1cbn1cbmV4cG9ydHMuR0hFU05vdFN1cHBvcnRlZEVycm9yID0gR0hFU05vdFN1cHBvcnRlZEVycm9yO1xuY2xhc3MgTmV0d29ya0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKGNvZGUpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGBVbmFibGUgdG8gbWFrZSByZXF1ZXN0OiAke2NvZGV9XFxuSWYgeW91IGFyZSB1c2luZyBzZWxmLWhvc3RlZCBydW5uZXJzLCBwbGVhc2UgbWFrZSBzdXJlIHlvdXIgcnVubmVyIGhhcyBhY2Nlc3MgdG8gYWxsIEdpdEh1YiBlbmRwb2ludHM6IGh0dHBzOi8vZG9jcy5naXRodWIuY29tL2VuL2FjdGlvbnMvaG9zdGluZy15b3VyLW93bi1ydW5uZXJzL21hbmFnaW5nLXNlbGYtaG9zdGVkLXJ1bm5lcnMvYWJvdXQtc2VsZi1ob3N0ZWQtcnVubmVycyNjb21tdW5pY2F0aW9uLWJldHdlZW4tc2VsZi1ob3N0ZWQtcnVubmVycy1hbmQtZ2l0aHViYDtcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XG4gICAgICAgIHRoaXMuY29kZSA9IGNvZGU7XG4gICAgICAgIHRoaXMubmFtZSA9ICdOZXR3b3JrRXJyb3InO1xuICAgIH1cbn1cbmV4cG9ydHMuTmV0d29ya0Vycm9yID0gTmV0d29ya0Vycm9yO1xuTmV0d29ya0Vycm9yLmlzTmV0d29ya0Vycm9yQ29kZSA9IChjb2RlKSA9PiB7XG4gICAgaWYgKCFjb2RlKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgJ0VDT05OUkVTRVQnLFxuICAgICAgICAnRU5PVEZPVU5EJyxcbiAgICAgICAgJ0VUSU1FRE9VVCcsXG4gICAgICAgICdFQ09OTlJFRlVTRUQnLFxuICAgICAgICAnRUhPU1RVTlJFQUNIJ1xuICAgIF0uaW5jbHVkZXMoY29kZSk7XG59O1xuY2xhc3MgVXNhZ2VFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGBBcnRpZmFjdCBzdG9yYWdlIHF1b3RhIGhhcyBiZWVuIGhpdC4gVW5hYmxlIHRvIHVwbG9hZCBhbnkgbmV3IGFydGlmYWN0cy4gVXNhZ2UgaXMgcmVjYWxjdWxhdGVkIGV2ZXJ5IDYtMTIgaG91cnMuXFxuTW9yZSBpbmZvIG9uIHN0b3JhZ2UgbGltaXRzOiBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9lbi9iaWxsaW5nL21hbmFnaW5nLWJpbGxpbmctZm9yLWdpdGh1Yi1hY3Rpb25zL2Fib3V0LWJpbGxpbmctZm9yLWdpdGh1Yi1hY3Rpb25zI2NhbGN1bGF0aW5nLW1pbnV0ZS1hbmQtc3RvcmFnZS1zcGVuZGluZ2A7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLm5hbWUgPSAnVXNhZ2VFcnJvcic7XG4gICAgfVxufVxuZXhwb3J0cy5Vc2FnZUVycm9yID0gVXNhZ2VFcnJvcjtcblVzYWdlRXJyb3IuaXNVc2FnZUVycm9yTWVzc2FnZSA9IChtc2cpID0+IHtcbiAgICBpZiAoIW1zZylcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBtc2cuaW5jbHVkZXMoJ2luc3VmZmljaWVudCB1c2FnZScpO1xufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVycm9ycy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmludGVybmFsQXJ0aWZhY3RUd2lycENsaWVudCA9IHZvaWQgMDtcbmNvbnN0IGh0dHBfY2xpZW50XzEgPSByZXF1aXJlKFwiQGFjdGlvbnMvaHR0cC1jbGllbnRcIik7XG5jb25zdCBhdXRoXzEgPSByZXF1aXJlKFwiQGFjdGlvbnMvaHR0cC1jbGllbnQvbGliL2F1dGhcIik7XG5jb25zdCBjb3JlXzEgPSByZXF1aXJlKFwiQGFjdGlvbnMvY29yZVwiKTtcbmNvbnN0IGdlbmVyYXRlZF8xID0gcmVxdWlyZShcIi4uLy4uL2dlbmVyYXRlZFwiKTtcbmNvbnN0IGNvbmZpZ18xID0gcmVxdWlyZShcIi4vY29uZmlnXCIpO1xuY29uc3QgdXNlcl9hZ2VudF8xID0gcmVxdWlyZShcIi4vdXNlci1hZ2VudFwiKTtcbmNvbnN0IGVycm9yc18xID0gcmVxdWlyZShcIi4vZXJyb3JzXCIpO1xuY2xhc3MgQXJ0aWZhY3RIdHRwQ2xpZW50IHtcbiAgICBjb25zdHJ1Y3Rvcih1c2VyQWdlbnQsIG1heEF0dGVtcHRzLCBiYXNlUmV0cnlJbnRlcnZhbE1pbGxpc2Vjb25kcywgcmV0cnlNdWx0aXBsaWVyKSB7XG4gICAgICAgIHRoaXMubWF4QXR0ZW1wdHMgPSA1O1xuICAgICAgICB0aGlzLmJhc2VSZXRyeUludGVydmFsTWlsbGlzZWNvbmRzID0gMzAwMDtcbiAgICAgICAgdGhpcy5yZXRyeU11bHRpcGxpZXIgPSAxLjU7XG4gICAgICAgIGNvbnN0IHRva2VuID0gKDAsIGNvbmZpZ18xLmdldFJ1bnRpbWVUb2tlbikoKTtcbiAgICAgICAgdGhpcy5iYXNlVXJsID0gKDAsIGNvbmZpZ18xLmdldFJlc3VsdHNTZXJ2aWNlVXJsKSgpO1xuICAgICAgICBpZiAobWF4QXR0ZW1wdHMpIHtcbiAgICAgICAgICAgIHRoaXMubWF4QXR0ZW1wdHMgPSBtYXhBdHRlbXB0cztcbiAgICAgICAgfVxuICAgICAgICBpZiAoYmFzZVJldHJ5SW50ZXJ2YWxNaWxsaXNlY29uZHMpIHtcbiAgICAgICAgICAgIHRoaXMuYmFzZVJldHJ5SW50ZXJ2YWxNaWxsaXNlY29uZHMgPSBiYXNlUmV0cnlJbnRlcnZhbE1pbGxpc2Vjb25kcztcbiAgICAgICAgfVxuICAgICAgICBpZiAocmV0cnlNdWx0aXBsaWVyKSB7XG4gICAgICAgICAgICB0aGlzLnJldHJ5TXVsdGlwbGllciA9IHJldHJ5TXVsdGlwbGllcjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmh0dHBDbGllbnQgPSBuZXcgaHR0cF9jbGllbnRfMS5IdHRwQ2xpZW50KHVzZXJBZ2VudCwgW1xuICAgICAgICAgICAgbmV3IGF1dGhfMS5CZWFyZXJDcmVkZW50aWFsSGFuZGxlcih0b2tlbilcbiAgICAgICAgXSk7XG4gICAgfVxuICAgIC8vIFRoaXMgZnVuY3Rpb24gc2F0aXNmaWVzIHRoZSBScGMgaW50ZXJmYWNlLiBJdCBpcyBjb21wYXRpYmxlIHdpdGggdGhlIEpTT05cbiAgICAvLyBKU09OIGdlbmVyYXRlZCBjbGllbnQuXG4gICAgcmVxdWVzdChzZXJ2aWNlLCBtZXRob2QsIGNvbnRlbnRUeXBlLCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKGAvdHdpcnAvJHtzZXJ2aWNlfS8ke21ldGhvZH1gLCB0aGlzLmJhc2VVcmwpLmhyZWY7XG4gICAgICAgICAgICAoMCwgY29yZV8xLmRlYnVnKShgW1JlcXVlc3RdICR7bWV0aG9kfSAke3VybH1gKTtcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6IGNvbnRlbnRUeXBlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGJvZHkgfSA9IHlpZWxkIHRoaXMucmV0cnlhYmxlUmVxdWVzdCgoKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7IHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdCh1cmwsIEpTT04uc3RyaW5naWZ5KGRhdGEpLCBoZWFkZXJzKTsgfSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiBib2R5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gJHttZXRob2R9OiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXRyeWFibGVSZXF1ZXN0KG9wZXJhdGlvbikge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgbGV0IGF0dGVtcHQgPSAwO1xuICAgICAgICAgICAgbGV0IGVycm9yTWVzc2FnZSA9ICcnO1xuICAgICAgICAgICAgbGV0IHJhd0JvZHkgPSAnJztcbiAgICAgICAgICAgIHdoaWxlIChhdHRlbXB0IDwgdGhpcy5tYXhBdHRlbXB0cykge1xuICAgICAgICAgICAgICAgIGxldCBpc1JldHJ5YWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0geWllbGQgb3BlcmF0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXR1c0NvZGUgPSByZXNwb25zZS5tZXNzYWdlLnN0YXR1c0NvZGU7XG4gICAgICAgICAgICAgICAgICAgIHJhd0JvZHkgPSB5aWVsZCByZXNwb25zZS5yZWFkQm9keSgpO1xuICAgICAgICAgICAgICAgICAgICAoMCwgY29yZV8xLmRlYnVnKShgW1Jlc3BvbnNlXSAtICR7cmVzcG9uc2UubWVzc2FnZS5zdGF0dXNDb2RlfWApO1xuICAgICAgICAgICAgICAgICAgICAoMCwgY29yZV8xLmRlYnVnKShgSGVhZGVyczogJHtKU09OLnN0cmluZ2lmeShyZXNwb25zZS5tZXNzYWdlLmhlYWRlcnMsIG51bGwsIDIpfWApO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5wYXJzZShyYXdCb2R5KTtcbiAgICAgICAgICAgICAgICAgICAgKDAsIGNvcmVfMS5kZWJ1ZykoYEJvZHk6ICR7SlNPTi5zdHJpbmdpZnkoYm9keSwgbnVsbCwgMil9YCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzU3VjY2Vzc1N0YXR1c0NvZGUoc3RhdHVzQ29kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHJlc3BvbnNlLCBib2R5IH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaXNSZXRyeWFibGUgPSB0aGlzLmlzUmV0cnlhYmxlSHR0cFN0YXR1c0NvZGUoc3RhdHVzQ29kZSk7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGBGYWlsZWQgcmVxdWVzdDogKCR7c3RhdHVzQ29kZX0pICR7cmVzcG9uc2UubWVzc2FnZS5zdGF0dXNNZXNzYWdlfWA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChib2R5Lm1zZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yc18xLlVzYWdlRXJyb3IuaXNVc2FnZUVycm9yTWVzc2FnZShib2R5Lm1zZykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuVXNhZ2VFcnJvcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gYCR7ZXJyb3JNZXNzYWdlfTogJHtib2R5Lm1zZ31gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgKDAsIGNvcmVfMS5kZWJ1ZykoYFJhdyBCb2R5OiAke3Jhd0JvZHl9YCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgZXJyb3JzXzEuVXNhZ2VFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yc18xLk5ldHdvcmtFcnJvci5pc05ldHdvcmtFcnJvckNvZGUoZXJyb3IgPT09IG51bGwgfHwgZXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGVycm9yLmNvZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuTmV0d29ya0Vycm9yKGVycm9yID09PSBudWxsIHx8IGVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlcnJvci5jb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpc1JldHJ5YWJsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGVycm9yLm1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghaXNSZXRyeWFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBSZWNlaXZlZCBub24tcmV0cnlhYmxlIGVycm9yOiAke2Vycm9yTWVzc2FnZX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGF0dGVtcHQgKyAxID09PSB0aGlzLm1heEF0dGVtcHRzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIG1ha2UgcmVxdWVzdCBhZnRlciAke3RoaXMubWF4QXR0ZW1wdHN9IGF0dGVtcHRzOiAke2Vycm9yTWVzc2FnZX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcmV0cnlUaW1lTWlsbGlzZWNvbmRzID0gdGhpcy5nZXRFeHBvbmVudGlhbFJldHJ5VGltZU1pbGxpc2Vjb25kcyhhdHRlbXB0KTtcbiAgICAgICAgICAgICAgICAoMCwgY29yZV8xLmluZm8pKGBBdHRlbXB0ICR7YXR0ZW1wdCArIDF9IG9mICR7dGhpcy5tYXhBdHRlbXB0c30gZmFpbGVkIHdpdGggZXJyb3I6ICR7ZXJyb3JNZXNzYWdlfS4gUmV0cnlpbmcgcmVxdWVzdCBpbiAke3JldHJ5VGltZU1pbGxpc2Vjb25kc30gbXMuLi5gKTtcbiAgICAgICAgICAgICAgICB5aWVsZCB0aGlzLnNsZWVwKHJldHJ5VGltZU1pbGxpc2Vjb25kcyk7XG4gICAgICAgICAgICAgICAgYXR0ZW1wdCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBSZXF1ZXN0IGZhaWxlZGApO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgaXNTdWNjZXNzU3RhdHVzQ29kZShzdGF0dXNDb2RlKSB7XG4gICAgICAgIGlmICghc3RhdHVzQ29kZSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHN0YXR1c0NvZGUgPj0gMjAwICYmIHN0YXR1c0NvZGUgPCAzMDA7XG4gICAgfVxuICAgIGlzUmV0cnlhYmxlSHR0cFN0YXR1c0NvZGUoc3RhdHVzQ29kZSkge1xuICAgICAgICBpZiAoIXN0YXR1c0NvZGUpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNvbnN0IHJldHJ5YWJsZVN0YXR1c0NvZGVzID0gW1xuICAgICAgICAgICAgaHR0cF9jbGllbnRfMS5IdHRwQ29kZXMuQmFkR2F0ZXdheSxcbiAgICAgICAgICAgIGh0dHBfY2xpZW50XzEuSHR0cENvZGVzLkdhdGV3YXlUaW1lb3V0LFxuICAgICAgICAgICAgaHR0cF9jbGllbnRfMS5IdHRwQ29kZXMuSW50ZXJuYWxTZXJ2ZXJFcnJvcixcbiAgICAgICAgICAgIGh0dHBfY2xpZW50XzEuSHR0cENvZGVzLlNlcnZpY2VVbmF2YWlsYWJsZSxcbiAgICAgICAgICAgIGh0dHBfY2xpZW50XzEuSHR0cENvZGVzLlRvb01hbnlSZXF1ZXN0c1xuICAgICAgICBdO1xuICAgICAgICByZXR1cm4gcmV0cnlhYmxlU3RhdHVzQ29kZXMuaW5jbHVkZXMoc3RhdHVzQ29kZSk7XG4gICAgfVxuICAgIHNsZWVwKG1pbGxpc2Vjb25kcykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtaWxsaXNlY29uZHMpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGdldEV4cG9uZW50aWFsUmV0cnlUaW1lTWlsbGlzZWNvbmRzKGF0dGVtcHQpIHtcbiAgICAgICAgaWYgKGF0dGVtcHQgPCAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2F0dGVtcHQgc2hvdWxkIGJlIGEgcG9zaXRpdmUgaW50ZWdlcicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhdHRlbXB0ID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5iYXNlUmV0cnlJbnRlcnZhbE1pbGxpc2Vjb25kcztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtaW5UaW1lID0gdGhpcy5iYXNlUmV0cnlJbnRlcnZhbE1pbGxpc2Vjb25kcyAqIE1hdGgucG93KHRoaXMucmV0cnlNdWx0aXBsaWVyLCBhdHRlbXB0KTtcbiAgICAgICAgY29uc3QgbWF4VGltZSA9IG1pblRpbWUgKiB0aGlzLnJldHJ5TXVsdGlwbGllcjtcbiAgICAgICAgLy8gcmV0dXJucyBhIHJhbmRvbSBudW1iZXIgYmV0d2VlbiBtaW5UaW1lIGFuZCBtYXhUaW1lIChleGNsdXNpdmUpXG4gICAgICAgIHJldHVybiBNYXRoLnRydW5jKE1hdGgucmFuZG9tKCkgKiAobWF4VGltZSAtIG1pblRpbWUpICsgbWluVGltZSk7XG4gICAgfVxufVxuZnVuY3Rpb24gaW50ZXJuYWxBcnRpZmFjdFR3aXJwQ2xpZW50KG9wdGlvbnMpIHtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgQXJ0aWZhY3RIdHRwQ2xpZW50KCgwLCB1c2VyX2FnZW50XzEuZ2V0VXNlckFnZW50U3RyaW5nKSgpLCBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMubWF4QXR0ZW1wdHMsIG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5yZXRyeUludGVydmFsTXMsIG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5yZXRyeU11bHRpcGxpZXIpO1xuICAgIHJldHVybiBuZXcgZ2VuZXJhdGVkXzEuQXJ0aWZhY3RTZXJ2aWNlQ2xpZW50SlNPTihjbGllbnQpO1xufVxuZXhwb3J0cy5pbnRlcm5hbEFydGlmYWN0VHdpcnBDbGllbnQgPSBpbnRlcm5hbEFydGlmYWN0VHdpcnBDbGllbnQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hcnRpZmFjdC10d2lycC1jbGllbnQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRVcGxvYWRaaXBTcGVjaWZpY2F0aW9uID0gZXhwb3J0cy52YWxpZGF0ZVJvb3REaXJlY3RvcnkgPSB2b2lkIDA7XG5jb25zdCBmcyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiZnNcIikpO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIkBhY3Rpb25zL2NvcmVcIik7XG5jb25zdCBwYXRoXzEgPSByZXF1aXJlKFwicGF0aFwiKTtcbmNvbnN0IHBhdGhfYW5kX2FydGlmYWN0X25hbWVfdmFsaWRhdGlvbl8xID0gcmVxdWlyZShcIi4vcGF0aC1hbmQtYXJ0aWZhY3QtbmFtZS12YWxpZGF0aW9uXCIpO1xuLyoqXG4gKiBDaGVja3MgaWYgYSByb290IGRpcmVjdG9yeSBleGlzdHMgYW5kIGlzIHZhbGlkXG4gKiBAcGFyYW0gcm9vdERpcmVjdG9yeSBhbiBhYnNvbHV0ZSByb290IGRpcmVjdG9yeSBwYXRoIGNvbW1vbiB0byBhbGwgaW5wdXQgZmlsZXMgdGhhdCB0aGF0IHdpbGwgYmUgdHJpbW1lZCBmcm9tIHRoZSBmaW5hbCB6aXAgc3RydWN0dXJlXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlUm9vdERpcmVjdG9yeShyb290RGlyZWN0b3J5KSB7XG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKHJvb3REaXJlY3RvcnkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIHByb3ZpZGVkIHJvb3REaXJlY3RvcnkgJHtyb290RGlyZWN0b3J5fSBkb2VzIG5vdCBleGlzdGApO1xuICAgIH1cbiAgICBpZiAoIWZzLnN0YXRTeW5jKHJvb3REaXJlY3RvcnkpLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgcHJvdmlkZWQgcm9vdERpcmVjdG9yeSAke3Jvb3REaXJlY3Rvcnl9IGlzIG5vdCBhIHZhbGlkIGRpcmVjdG9yeWApO1xuICAgIH1cbiAgICAoMCwgY29yZV8xLmluZm8pKGBSb290IGRpcmVjdG9yeSBpbnB1dCBpcyB2YWxpZCFgKTtcbn1cbmV4cG9ydHMudmFsaWRhdGVSb290RGlyZWN0b3J5ID0gdmFsaWRhdGVSb290RGlyZWN0b3J5O1xuLyoqXG4gKiBDcmVhdGVzIGEgc3BlY2lmaWNhdGlvbiB0aGF0IGRlc2NyaWJlcyBob3cgYSB6aXAgZmlsZSB3aWxsIGJlIGNyZWF0ZWQgZm9yIGEgc2V0IG9mIGlucHV0IGZpbGVzXG4gKiBAcGFyYW0gZmlsZXNUb1ppcCBhIGxpc3Qgb2YgZmlsZSB0aGF0IHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgemlwXG4gKiBAcGFyYW0gcm9vdERpcmVjdG9yeSBhbiBhYnNvbHV0ZSByb290IGRpcmVjdG9yeSBwYXRoIGNvbW1vbiB0byBhbGwgaW5wdXQgZmlsZXMgdGhhdCB0aGF0IHdpbGwgYmUgdHJpbW1lZCBmcm9tIHRoZSBmaW5hbCB6aXAgc3RydWN0dXJlXG4gKi9cbmZ1bmN0aW9uIGdldFVwbG9hZFppcFNwZWNpZmljYXRpb24oZmlsZXNUb1ppcCwgcm9vdERpcmVjdG9yeSkge1xuICAgIGNvbnN0IHNwZWNpZmljYXRpb24gPSBbXTtcbiAgICAvLyBOb3JtYWxpemUgYW5kIHJlc29sdmUsIHRoaXMgYWxsb3dzIGZvciBlaXRoZXIgYWJzb2x1dGUgb3IgcmVsYXRpdmUgcGF0aHMgdG8gYmUgdXNlZFxuICAgIHJvb3REaXJlY3RvcnkgPSAoMCwgcGF0aF8xLm5vcm1hbGl6ZSkocm9vdERpcmVjdG9yeSk7XG4gICAgcm9vdERpcmVjdG9yeSA9ICgwLCBwYXRoXzEucmVzb2x2ZSkocm9vdERpcmVjdG9yeSk7XG4gICAgLypcbiAgICAgICBFeGFtcGxlXG4gICAgICAgXG4gICAgICAgSW5wdXQ6XG4gICAgICAgICByb290RGlyZWN0b3J5OiAnL2hvbWUvdXNlci9maWxlcy9wbHotdXBsb2FkJ1xuICAgICAgICAgYXJ0aWZhY3RGaWxlczogW1xuICAgICAgICAgICAnL2hvbWUvdXNlci9maWxlcy9wbHotdXBsb2FkL2ZpbGUxLnR4dCcsXG4gICAgICAgICAgICcvaG9tZS91c2VyL2ZpbGVzL3Bsei11cGxvYWQvZmlsZTIudHh0JyxcbiAgICAgICAgICAgJy9ob21lL3VzZXIvZmlsZXMvcGx6LXVwbG9hZC9kaXIvZmlsZTMudHh0J1xuICAgICAgICAgXVxuICAgICAgIFxuICAgICAgIE91dHB1dDpcbiAgICAgICAgIHNwZWNpZmljYXRpb25zOiBbXG4gICAgICAgICAgIFsnL2hvbWUvdXNlci9maWxlcy9wbHotdXBsb2FkL2ZpbGUxLnR4dCcsICcvZmlsZTEudHh0J10sXG4gICAgICAgICAgIFsnL2hvbWUvdXNlci9maWxlcy9wbHotdXBsb2FkL2ZpbGUxLnR4dCcsICcvZmlsZTIudHh0J10sXG4gICAgICAgICAgIFsnL2hvbWUvdXNlci9maWxlcy9wbHotdXBsb2FkL2ZpbGUxLnR4dCcsICcvZGlyL2ZpbGUzLnR4dCddXG4gICAgICAgICBdXG4gIFxuICAgICAgICBUaGUgZmluYWwgemlwIHRoYXQgaXMgbGF0ZXIgdXBsb2FkZWQgd2lsbCBsb29rIGxpa2UgdGhpczpcbiAgXG4gICAgICAgIG15LWFydGlmYWN0LnppcFxuICAgICAgICAgIC0gZmlsZS50eHRcbiAgICAgICAgICAtIGZpbGUyLnR4dFxuICAgICAgICAgIC0gZGlyL1xuICAgICAgICAgICAgLSBmaWxlMy50eHRcbiAgICAqL1xuICAgIGZvciAobGV0IGZpbGUgb2YgZmlsZXNUb1ppcCkge1xuICAgICAgICBjb25zdCBzdGF0cyA9IGZzLmxzdGF0U3luYyhmaWxlLCB7IHRocm93SWZOb0VudHJ5OiBmYWxzZSB9KTtcbiAgICAgICAgaWYgKCFzdGF0cykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGaWxlICR7ZmlsZX0gZG9lcyBub3QgZXhpc3RgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgICAgIC8vIE5vcm1hbGl6ZSBhbmQgcmVzb2x2ZSwgdGhpcyBhbGxvd3MgZm9yIGVpdGhlciBhYnNvbHV0ZSBvciByZWxhdGl2ZSBwYXRocyB0byBiZSB1c2VkXG4gICAgICAgICAgICBmaWxlID0gKDAsIHBhdGhfMS5ub3JtYWxpemUpKGZpbGUpO1xuICAgICAgICAgICAgZmlsZSA9ICgwLCBwYXRoXzEucmVzb2x2ZSkoZmlsZSk7XG4gICAgICAgICAgICBpZiAoIWZpbGUuc3RhcnRzV2l0aChyb290RGlyZWN0b3J5KSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIHJvb3REaXJlY3Rvcnk6ICR7cm9vdERpcmVjdG9yeX0gaXMgbm90IGEgcGFyZW50IGRpcmVjdG9yeSBvZiB0aGUgZmlsZTogJHtmaWxlfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIGZvcmJpZGRlbiBjaGFyYWN0ZXJzIGluIGZpbGUgcGF0aHMgdGhhdCBtYXkgY2F1c2UgYW1iaWd1b3VzIGJlaGF2aW9yIGlmIGRvd25sb2FkZWQgb24gZGlmZmVyZW50IGZpbGUgc3lzdGVtc1xuICAgICAgICAgICAgY29uc3QgdXBsb2FkUGF0aCA9IGZpbGUucmVwbGFjZShyb290RGlyZWN0b3J5LCAnJyk7XG4gICAgICAgICAgICAoMCwgcGF0aF9hbmRfYXJ0aWZhY3RfbmFtZV92YWxpZGF0aW9uXzEudmFsaWRhdGVGaWxlUGF0aCkodXBsb2FkUGF0aCk7XG4gICAgICAgICAgICBzcGVjaWZpY2F0aW9uLnB1c2goe1xuICAgICAgICAgICAgICAgIHNvdXJjZVBhdGg6IGZpbGUsXG4gICAgICAgICAgICAgICAgZGVzdGluYXRpb25QYXRoOiB1cGxvYWRQYXRoLFxuICAgICAgICAgICAgICAgIHN0YXRzXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIEVtcHR5IGRpcmVjdG9yeVxuICAgICAgICAgICAgY29uc3QgZGlyZWN0b3J5UGF0aCA9IGZpbGUucmVwbGFjZShyb290RGlyZWN0b3J5LCAnJyk7XG4gICAgICAgICAgICAoMCwgcGF0aF9hbmRfYXJ0aWZhY3RfbmFtZV92YWxpZGF0aW9uXzEudmFsaWRhdGVGaWxlUGF0aCkoZGlyZWN0b3J5UGF0aCk7XG4gICAgICAgICAgICBzcGVjaWZpY2F0aW9uLnB1c2goe1xuICAgICAgICAgICAgICAgIHNvdXJjZVBhdGg6IG51bGwsXG4gICAgICAgICAgICAgICAgZGVzdGluYXRpb25QYXRoOiBkaXJlY3RvcnlQYXRoLFxuICAgICAgICAgICAgICAgIHN0YXRzXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3BlY2lmaWNhdGlvbjtcbn1cbmV4cG9ydHMuZ2V0VXBsb2FkWmlwU3BlY2lmaWNhdGlvbiA9IGdldFVwbG9hZFppcFNwZWNpZmljYXRpb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD11cGxvYWQtemlwLXNwZWNpZmljYXRpb24uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBlKGUpe3RoaXMubWVzc2FnZT1lfWUucHJvdG90eXBlPW5ldyBFcnJvcixlLnByb3RvdHlwZS5uYW1lPVwiSW52YWxpZENoYXJhY3RlckVycm9yXCI7dmFyIHI9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93LmF0b2ImJndpbmRvdy5hdG9iLmJpbmQod2luZG93KXx8ZnVuY3Rpb24ocil7dmFyIHQ9U3RyaW5nKHIpLnJlcGxhY2UoLz0rJC8sXCJcIik7aWYodC5sZW5ndGglND09MSl0aHJvdyBuZXcgZShcIidhdG9iJyBmYWlsZWQ6IFRoZSBzdHJpbmcgdG8gYmUgZGVjb2RlZCBpcyBub3QgY29ycmVjdGx5IGVuY29kZWQuXCIpO2Zvcih2YXIgbixvLGE9MCxpPTAsYz1cIlwiO289dC5jaGFyQXQoaSsrKTt+byYmKG49YSU0PzY0Km4rbzpvLGErKyU0KT9jKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDI1NSZuPj4oLTIqYSY2KSk6MClvPVwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz1cIi5pbmRleE9mKG8pO3JldHVybiBjfTtmdW5jdGlvbiB0KGUpe3ZhciB0PWUucmVwbGFjZSgvLS9nLFwiK1wiKS5yZXBsYWNlKC9fL2csXCIvXCIpO3N3aXRjaCh0Lmxlbmd0aCU0KXtjYXNlIDA6YnJlYWs7Y2FzZSAyOnQrPVwiPT1cIjticmVhaztjYXNlIDM6dCs9XCI9XCI7YnJlYWs7ZGVmYXVsdDp0aHJvd1wiSWxsZWdhbCBiYXNlNjR1cmwgc3RyaW5nIVwifXRyeXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChyKGUpLnJlcGxhY2UoLyguKS9nLChmdW5jdGlvbihlLHIpe3ZhciB0PXIuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtyZXR1cm4gdC5sZW5ndGg8MiYmKHQ9XCIwXCIrdCksXCIlXCIrdH0pKSl9KHQpfWNhdGNoKGUpe3JldHVybiByKHQpfX1mdW5jdGlvbiBuKGUpe3RoaXMubWVzc2FnZT1lfWZ1bmN0aW9uIG8oZSxyKXtpZihcInN0cmluZ1wiIT10eXBlb2YgZSl0aHJvdyBuZXcgbihcIkludmFsaWQgdG9rZW4gc3BlY2lmaWVkXCIpO3ZhciBvPSEwPT09KHI9cnx8e30pLmhlYWRlcj8wOjE7dHJ5e3JldHVybiBKU09OLnBhcnNlKHQoZS5zcGxpdChcIi5cIilbb10pKX1jYXRjaChlKXt0aHJvdyBuZXcgbihcIkludmFsaWQgdG9rZW4gc3BlY2lmaWVkOiBcIitlLm1lc3NhZ2UpfX1uLnByb3RvdHlwZT1uZXcgRXJyb3Isbi5wcm90b3R5cGUubmFtZT1cIkludmFsaWRUb2tlbkVycm9yXCI7Y29uc3QgYT1vO2EuZGVmYXVsdD1vLGEuSW52YWxpZFRva2VuRXJyb3I9bixtb2R1bGUuZXhwb3J0cz1hO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9and0LWRlY29kZS5janMuanMubWFwXG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldEJhY2tlbmRJZHNGcm9tVG9rZW4gPSB2b2lkIDA7XG5jb25zdCBjb3JlID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJAYWN0aW9ucy9jb3JlXCIpKTtcbmNvbnN0IGNvbmZpZ18xID0gcmVxdWlyZShcIi4vY29uZmlnXCIpO1xuY29uc3Qgand0X2RlY29kZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJqd3QtZGVjb2RlXCIpKTtcbmNvbnN0IEludmFsaWRKd3RFcnJvciA9IG5ldyBFcnJvcignRmFpbGVkIHRvIGdldCBiYWNrZW5kIElEczogVGhlIHByb3ZpZGVkIEpXVCB0b2tlbiBpcyBpbnZhbGlkIGFuZC9vciBtaXNzaW5nIGNsYWltcycpO1xuLy8gdXNlcyB0aGUgSldUIHRva2VuIGNsYWltcyB0byBnZXQgdGhlXG4vLyB3b3JrZmxvdyBydW4gYW5kIHdvcmtmbG93IGpvYiBydW4gYmFja2VuZCBpZHNcbmZ1bmN0aW9uIGdldEJhY2tlbmRJZHNGcm9tVG9rZW4oKSB7XG4gICAgY29uc3QgdG9rZW4gPSAoMCwgY29uZmlnXzEuZ2V0UnVudGltZVRva2VuKSgpO1xuICAgIGNvbnN0IGRlY29kZWQgPSAoMCwgand0X2RlY29kZV8xLmRlZmF1bHQpKHRva2VuKTtcbiAgICBpZiAoIWRlY29kZWQuc2NwKSB7XG4gICAgICAgIHRocm93IEludmFsaWRKd3RFcnJvcjtcbiAgICB9XG4gICAgLypcbiAgICAgKiBleGFtcGxlIGRlY29kZWQ6XG4gICAgICoge1xuICAgICAqICAgc2NwOiBcIkFjdGlvbnMuRXhhbXBsZVNjb3BlIEFjdGlvbnMuUmVzdWx0czpjZTdmNTRjNy02MWM3LTRhYWUtODg3Zi0zMGRhNDc1ZjVmMWE6Y2EzOTUwODUtMDQwYS01MjZiLTJjZTgtYmRjODVmNjkyNzc0XCJcbiAgICAgKiB9XG4gICAgICovXG4gICAgY29uc3Qgc2NwUGFydHMgPSBkZWNvZGVkLnNjcC5zcGxpdCgnICcpO1xuICAgIGlmIChzY3BQYXJ0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhyb3cgSW52YWxpZEp3dEVycm9yO1xuICAgIH1cbiAgICAvKlxuICAgICAqIGV4YW1wbGUgc2NwUGFydHM6XG4gICAgICogW1wiQWN0aW9ucy5FeGFtcGxlU2NvcGVcIiwgXCJBY3Rpb25zLlJlc3VsdHM6Y2U3ZjU0YzctNjFjNy00YWFlLTg4N2YtMzBkYTQ3NWY1ZjFhOmNhMzk1MDg1LTA0MGEtNTI2Yi0yY2U4LWJkYzg1ZjY5Mjc3NFwiXVxuICAgICAqL1xuICAgIGZvciAoY29uc3Qgc2NvcGVzIG9mIHNjcFBhcnRzKSB7XG4gICAgICAgIGNvbnN0IHNjb3BlUGFydHMgPSBzY29wZXMuc3BsaXQoJzonKTtcbiAgICAgICAgaWYgKChzY29wZVBhcnRzID09PSBudWxsIHx8IHNjb3BlUGFydHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNjb3BlUGFydHNbMF0pICE9PSAnQWN0aW9ucy5SZXN1bHRzJykge1xuICAgICAgICAgICAgLy8gbm90IHRoZSBBY3Rpb25zLlJlc3VsdHMgc2NvcGVcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIC8qXG4gICAgICAgICAqIGV4YW1wbGUgc2NvcGVQYXJ0czpcbiAgICAgICAgICogW1wiQWN0aW9ucy5SZXN1bHRzXCIsIFwiY2U3ZjU0YzctNjFjNy00YWFlLTg4N2YtMzBkYTQ3NWY1ZjFhXCIsIFwiY2EzOTUwODUtMDQwYS01MjZiLTJjZTgtYmRjODVmNjkyNzc0XCJdXG4gICAgICAgICAqL1xuICAgICAgICBpZiAoc2NvcGVQYXJ0cy5sZW5ndGggIT09IDMpIHtcbiAgICAgICAgICAgIC8vIG1pc3NpbmcgZXhwZWN0ZWQgbnVtYmVyIG9mIGNsYWltc1xuICAgICAgICAgICAgdGhyb3cgSW52YWxpZEp3dEVycm9yO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlkcyA9IHtcbiAgICAgICAgICAgIHdvcmtmbG93UnVuQmFja2VuZElkOiBzY29wZVBhcnRzWzFdLFxuICAgICAgICAgICAgd29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQ6IHNjb3BlUGFydHNbMl1cbiAgICAgICAgfTtcbiAgICAgICAgY29yZS5kZWJ1ZyhgV29ya2Zsb3cgUnVuIEJhY2tlbmQgSUQ6ICR7aWRzLndvcmtmbG93UnVuQmFja2VuZElkfWApO1xuICAgICAgICBjb3JlLmRlYnVnKGBXb3JrZmxvdyBKb2IgUnVuIEJhY2tlbmQgSUQ6ICR7aWRzLndvcmtmbG93Sm9iUnVuQmFja2VuZElkfWApO1xuICAgICAgICByZXR1cm4gaWRzO1xuICAgIH1cbiAgICB0aHJvdyBJbnZhbGlkSnd0RXJyb3I7XG59XG5leHBvcnRzLmdldEJhY2tlbmRJZHNGcm9tVG9rZW4gPSBnZXRCYWNrZW5kSWRzRnJvbVRva2VuO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNyZWF0ZUVtcHR5UGlwZWxpbmUgPSBjcmVhdGVFbXB0eVBpcGVsaW5lO1xuY29uc3QgVmFsaWRQaGFzZU5hbWVzID0gbmV3IFNldChbXCJEZXNlcmlhbGl6ZVwiLCBcIlNlcmlhbGl6ZVwiLCBcIlJldHJ5XCIsIFwiU2lnblwiXSk7XG4vKipcbiAqIEEgcHJpdmF0ZSBpbXBsZW1lbnRhdGlvbiBvZiBQaXBlbGluZS5cbiAqIERvIG5vdCBleHBvcnQgdGhpcyBjbGFzcyBmcm9tIHRoZSBwYWNrYWdlLlxuICogQGludGVybmFsXG4gKi9cbmNsYXNzIEh0dHBQaXBlbGluZSB7XG4gICAgY29uc3RydWN0b3IocG9saWNpZXMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB0aGlzLl9wb2xpY2llcyA9IFtdO1xuICAgICAgICB0aGlzLl9wb2xpY2llcyA9IChfYSA9IHBvbGljaWVzID09PSBudWxsIHx8IHBvbGljaWVzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwb2xpY2llcy5zbGljZSgwKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogW107XG4gICAgICAgIHRoaXMuX29yZGVyZWRQb2xpY2llcyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgYWRkUG9saWN5KHBvbGljeSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGlmIChvcHRpb25zLnBoYXNlICYmIG9wdGlvbnMuYWZ0ZXJQaGFzZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUG9saWNpZXMgaW5zaWRlIGEgcGhhc2UgY2Fubm90IHNwZWNpZnkgYWZ0ZXJQaGFzZS5cIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMucGhhc2UgJiYgIVZhbGlkUGhhc2VOYW1lcy5oYXMob3B0aW9ucy5waGFzZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwaGFzZSBuYW1lOiAke29wdGlvbnMucGhhc2V9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuYWZ0ZXJQaGFzZSAmJiAhVmFsaWRQaGFzZU5hbWVzLmhhcyhvcHRpb25zLmFmdGVyUGhhc2UpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgYWZ0ZXJQaGFzZSBuYW1lOiAke29wdGlvbnMuYWZ0ZXJQaGFzZX1gKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9wb2xpY2llcy5wdXNoKHtcbiAgICAgICAgICAgIHBvbGljeSxcbiAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9vcmRlcmVkUG9saWNpZXMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJlbW92ZVBvbGljeShvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHJlbW92ZWRQb2xpY2llcyA9IFtdO1xuICAgICAgICB0aGlzLl9wb2xpY2llcyA9IHRoaXMuX3BvbGljaWVzLmZpbHRlcigocG9saWN5RGVzY3JpcHRvcikgPT4ge1xuICAgICAgICAgICAgaWYgKChvcHRpb25zLm5hbWUgJiYgcG9saWN5RGVzY3JpcHRvci5wb2xpY3kubmFtZSA9PT0gb3B0aW9ucy5uYW1lKSB8fFxuICAgICAgICAgICAgICAgIChvcHRpb25zLnBoYXNlICYmIHBvbGljeURlc2NyaXB0b3Iub3B0aW9ucy5waGFzZSA9PT0gb3B0aW9ucy5waGFzZSkpIHtcbiAgICAgICAgICAgICAgICByZW1vdmVkUG9saWNpZXMucHVzaChwb2xpY3lEZXNjcmlwdG9yLnBvbGljeSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9vcmRlcmVkUG9saWNpZXMgPSB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiByZW1vdmVkUG9saWNpZXM7XG4gICAgfVxuICAgIHNlbmRSZXF1ZXN0KGh0dHBDbGllbnQsIHJlcXVlc3QpIHtcbiAgICAgICAgY29uc3QgcG9saWNpZXMgPSB0aGlzLmdldE9yZGVyZWRQb2xpY2llcygpO1xuICAgICAgICBjb25zdCBwaXBlbGluZSA9IHBvbGljaWVzLnJlZHVjZVJpZ2h0KChuZXh0LCBwb2xpY3kpID0+IHtcbiAgICAgICAgICAgIHJldHVybiAocmVxKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBvbGljeS5zZW5kUmVxdWVzdChyZXEsIG5leHQpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSwgKHJlcSkgPT4gaHR0cENsaWVudC5zZW5kUmVxdWVzdChyZXEpKTtcbiAgICAgICAgcmV0dXJuIHBpcGVsaW5lKHJlcXVlc3QpO1xuICAgIH1cbiAgICBnZXRPcmRlcmVkUG9saWNpZXMoKSB7XG4gICAgICAgIGlmICghdGhpcy5fb3JkZXJlZFBvbGljaWVzKSB7XG4gICAgICAgICAgICB0aGlzLl9vcmRlcmVkUG9saWNpZXMgPSB0aGlzLm9yZGVyUG9saWNpZXMoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fb3JkZXJlZFBvbGljaWVzO1xuICAgIH1cbiAgICBjbG9uZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBIdHRwUGlwZWxpbmUodGhpcy5fcG9saWNpZXMpO1xuICAgIH1cbiAgICBzdGF0aWMgY3JlYXRlKCkge1xuICAgICAgICByZXR1cm4gbmV3IEh0dHBQaXBlbGluZSgpO1xuICAgIH1cbiAgICBvcmRlclBvbGljaWVzKCkge1xuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIGdvYWwgb2YgdGhpcyBtZXRob2QgaXMgdG8gcmVsaWFibHkgb3JkZXIgcGlwZWxpbmUgcG9saWNpZXNcbiAgICAgICAgICogYmFzZWQgb24gdGhlaXIgZGVjbGFyZWQgcmVxdWlyZW1lbnRzIHdoZW4gdGhleSB3ZXJlIGFkZGVkLlxuICAgICAgICAgKlxuICAgICAgICAgKiBPcmRlciBpcyBmaXJzdCBkZXRlcm1pbmVkIGJ5IHBoYXNlOlxuICAgICAgICAgKlxuICAgICAgICAgKiAxLiBTZXJpYWxpemUgUGhhc2VcbiAgICAgICAgICogMi4gUG9saWNpZXMgbm90IGluIGEgcGhhc2VcbiAgICAgICAgICogMy4gRGVzZXJpYWxpemUgUGhhc2VcbiAgICAgICAgICogNC4gUmV0cnkgUGhhc2VcbiAgICAgICAgICogNS4gU2lnbiBQaGFzZVxuICAgICAgICAgKlxuICAgICAgICAgKiBXaXRoaW4gZWFjaCBwaGFzZSwgcG9saWNpZXMgYXJlIGV4ZWN1dGVkIGluIHRoZSBvcmRlclxuICAgICAgICAgKiB0aGV5IHdlcmUgYWRkZWQgdW5sZXNzIHRoZXkgd2VyZSBzcGVjaWZpZWQgdG8gZXhlY3V0ZVxuICAgICAgICAgKiBiZWZvcmUvYWZ0ZXIgb3RoZXIgcG9saWNpZXMgb3IgYWZ0ZXIgYSBwYXJ0aWN1bGFyIHBoYXNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBUbyBkZXRlcm1pbmUgdGhlIGZpbmFsIG9yZGVyLCB3ZSB3aWxsIHdhbGsgdGhlIHBvbGljeSBsaXN0XG4gICAgICAgICAqIGluIHBoYXNlIG9yZGVyIG11bHRpcGxlIHRpbWVzIHVudGlsIGFsbCBkZXBlbmRlbmNpZXMgYXJlXG4gICAgICAgICAqIHNhdGlzZmllZC5cbiAgICAgICAgICpcbiAgICAgICAgICogYGFmdGVyUG9saWNpZXNgIGFyZSB0aGUgc2V0IG9mIHBvbGljaWVzIHRoYXQgbXVzdCBiZVxuICAgICAgICAgKiBleGVjdXRlZCBiZWZvcmUgYSBnaXZlbiBwb2xpY3kuIFRoaXMgcmVxdWlyZW1lbnQgaXNcbiAgICAgICAgICogY29uc2lkZXJlZCBzYXRpc2ZpZWQgd2hlbiBlYWNoIG9mIHRoZSBsaXN0ZWQgcG9saWNpZXNcbiAgICAgICAgICogaGF2ZSBiZWVuIHNjaGVkdWxlZC5cbiAgICAgICAgICpcbiAgICAgICAgICogYGJlZm9yZVBvbGljaWVzYCBhcmUgdGhlIHNldCBvZiBwb2xpY2llcyB0aGF0IG11c3QgYmVcbiAgICAgICAgICogZXhlY3V0ZWQgYWZ0ZXIgYSBnaXZlbiBwb2xpY3kuIFNpbmNlIHRoaXMgZGVwZW5kZW5jeVxuICAgICAgICAgKiBjYW4gYmUgZXhwcmVzc2VkIGJ5IGNvbnZlcnRpbmcgaXQgaW50byBhIGVxdWl2YWxlbnRcbiAgICAgICAgICogYGFmdGVyUG9saWNpZXNgIGRlY2xhcmF0aW9ucywgdGhleSBhcmUgbm9ybWFsaXplZFxuICAgICAgICAgKiBpbnRvIHRoYXQgZm9ybSBmb3Igc2ltcGxpY2l0eS5cbiAgICAgICAgICpcbiAgICAgICAgICogQW4gYGFmdGVyUGhhc2VgIGRlcGVuZGVuY3kgaXMgY29uc2lkZXJlZCBzYXRpc2ZpZWQgd2hlbiBhbGxcbiAgICAgICAgICogcG9saWNpZXMgaW4gdGhhdCBwaGFzZSBoYXZlIHNjaGVkdWxlZC5cbiAgICAgICAgICpcbiAgICAgICAgICovXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgICAvLyBUcmFjayBhbGwgcG9saWNpZXMgd2Uga25vdyBhYm91dC5cbiAgICAgICAgY29uc3QgcG9saWN5TWFwID0gbmV3IE1hcCgpO1xuICAgICAgICBmdW5jdGlvbiBjcmVhdGVQaGFzZShuYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgcG9saWNpZXM6IG5ldyBTZXQoKSxcbiAgICAgICAgICAgICAgICBoYXNSdW46IGZhbHNlLFxuICAgICAgICAgICAgICAgIGhhc0FmdGVyUG9saWNpZXM6IGZhbHNlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUcmFjayBwb2xpY2llcyBmb3IgZWFjaCBwaGFzZS5cbiAgICAgICAgY29uc3Qgc2VyaWFsaXplUGhhc2UgPSBjcmVhdGVQaGFzZShcIlNlcmlhbGl6ZVwiKTtcbiAgICAgICAgY29uc3Qgbm9QaGFzZSA9IGNyZWF0ZVBoYXNlKFwiTm9uZVwiKTtcbiAgICAgICAgY29uc3QgZGVzZXJpYWxpemVQaGFzZSA9IGNyZWF0ZVBoYXNlKFwiRGVzZXJpYWxpemVcIik7XG4gICAgICAgIGNvbnN0IHJldHJ5UGhhc2UgPSBjcmVhdGVQaGFzZShcIlJldHJ5XCIpO1xuICAgICAgICBjb25zdCBzaWduUGhhc2UgPSBjcmVhdGVQaGFzZShcIlNpZ25cIik7XG4gICAgICAgIC8vIGEgbGlzdCBvZiBwaGFzZXMgaW4gb3JkZXJcbiAgICAgICAgY29uc3Qgb3JkZXJlZFBoYXNlcyA9IFtzZXJpYWxpemVQaGFzZSwgbm9QaGFzZSwgZGVzZXJpYWxpemVQaGFzZSwgcmV0cnlQaGFzZSwgc2lnblBoYXNlXTtcbiAgICAgICAgLy8gU21hbGwgaGVscGVyIGZ1bmN0aW9uIHRvIG1hcCBwaGFzZSBuYW1lIHRvIGVhY2ggUGhhc2VcbiAgICAgICAgZnVuY3Rpb24gZ2V0UGhhc2UocGhhc2UpIHtcbiAgICAgICAgICAgIGlmIChwaGFzZSA9PT0gXCJSZXRyeVwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldHJ5UGhhc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChwaGFzZSA9PT0gXCJTZXJpYWxpemVcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemVQaGFzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHBoYXNlID09PSBcIkRlc2VyaWFsaXplXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGVzZXJpYWxpemVQaGFzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHBoYXNlID09PSBcIlNpZ25cIikge1xuICAgICAgICAgICAgICAgIHJldHVybiBzaWduUGhhc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbm9QaGFzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBGaXJzdCB3YWxrIGVhY2ggcG9saWN5IGFuZCBjcmVhdGUgYSBub2RlIHRvIHRyYWNrIG1ldGFkYXRhLlxuICAgICAgICBmb3IgKGNvbnN0IGRlc2NyaXB0b3Igb2YgdGhpcy5fcG9saWNpZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHBvbGljeSA9IGRlc2NyaXB0b3IucG9saWN5O1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGRlc2NyaXB0b3Iub3B0aW9ucztcbiAgICAgICAgICAgIGNvbnN0IHBvbGljeU5hbWUgPSBwb2xpY3kubmFtZTtcbiAgICAgICAgICAgIGlmIChwb2xpY3lNYXAuaGFzKHBvbGljeU5hbWUpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRHVwbGljYXRlIHBvbGljeSBuYW1lcyBub3QgYWxsb3dlZCBpbiBwaXBlbGluZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB7XG4gICAgICAgICAgICAgICAgcG9saWN5LFxuICAgICAgICAgICAgICAgIGRlcGVuZHNPbjogbmV3IFNldCgpLFxuICAgICAgICAgICAgICAgIGRlcGVuZGFudHM6IG5ldyBTZXQoKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5hZnRlclBoYXNlKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5hZnRlclBoYXNlID0gZ2V0UGhhc2Uob3B0aW9ucy5hZnRlclBoYXNlKTtcbiAgICAgICAgICAgICAgICBub2RlLmFmdGVyUGhhc2UuaGFzQWZ0ZXJQb2xpY2llcyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwb2xpY3lNYXAuc2V0KHBvbGljeU5hbWUsIG5vZGUpO1xuICAgICAgICAgICAgY29uc3QgcGhhc2UgPSBnZXRQaGFzZShvcHRpb25zLnBoYXNlKTtcbiAgICAgICAgICAgIHBoYXNlLnBvbGljaWVzLmFkZChub2RlKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBOb3cgdGhhdCBlYWNoIHBvbGljeSBoYXMgYSBub2RlLCBjb25uZWN0IGRlcGVuZGVuY3kgcmVmZXJlbmNlcy5cbiAgICAgICAgZm9yIChjb25zdCBkZXNjcmlwdG9yIG9mIHRoaXMuX3BvbGljaWVzKSB7XG4gICAgICAgICAgICBjb25zdCB7IHBvbGljeSwgb3B0aW9ucyB9ID0gZGVzY3JpcHRvcjtcbiAgICAgICAgICAgIGNvbnN0IHBvbGljeU5hbWUgPSBwb2xpY3kubmFtZTtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBwb2xpY3lNYXAuZ2V0KHBvbGljeU5hbWUpO1xuICAgICAgICAgICAgaWYgKCFub2RlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIG5vZGUgZm9yIHBvbGljeSAke3BvbGljeU5hbWV9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5hZnRlclBvbGljaWVzKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBhZnRlclBvbGljeU5hbWUgb2Ygb3B0aW9ucy5hZnRlclBvbGljaWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFmdGVyTm9kZSA9IHBvbGljeU1hcC5nZXQoYWZ0ZXJQb2xpY3lOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFmdGVyTm9kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gTGlua2luZyBpbiBib3RoIGRpcmVjdGlvbnMgaGVscHMgbGF0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdoZW4gd2Ugd2FudCB0byBub3RpZnkgZGVwZW5kYW50cy5cbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuZGVwZW5kc09uLmFkZChhZnRlck5vZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJOb2RlLmRlcGVuZGFudHMuYWRkKG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuYmVmb3JlUG9saWNpZXMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGJlZm9yZVBvbGljeU5hbWUgb2Ygb3B0aW9ucy5iZWZvcmVQb2xpY2llcykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBiZWZvcmVOb2RlID0gcG9saWN5TWFwLmdldChiZWZvcmVQb2xpY3lOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJlZm9yZU5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRvIGV4ZWN1dGUgYmVmb3JlIGFub3RoZXIgbm9kZSwgbWFrZSBpdFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVwZW5kIG9uIHRoZSBjdXJyZW50IG5vZGUuXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmVOb2RlLmRlcGVuZHNPbi5hZGQobm9kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLmRlcGVuZGFudHMuYWRkKGJlZm9yZU5vZGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHdhbGtQaGFzZShwaGFzZSkge1xuICAgICAgICAgICAgcGhhc2UuaGFzUnVuID0gdHJ1ZTtcbiAgICAgICAgICAgIC8vIFNldHMgaXRlcmF0ZSBpbiBpbnNlcnRpb24gb3JkZXJcbiAgICAgICAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBwaGFzZS5wb2xpY2llcykge1xuICAgICAgICAgICAgICAgIGlmIChub2RlLmFmdGVyUGhhc2UgJiYgKCFub2RlLmFmdGVyUGhhc2UuaGFzUnVuIHx8IG5vZGUuYWZ0ZXJQaGFzZS5wb2xpY2llcy5zaXplKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIG5vZGUgaXMgd2FpdGluZyBvbiBhIHBoYXNlIHRvIGNvbXBsZXRlLFxuICAgICAgICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIHNraXAgaXQgZm9yIG5vdy5cbiAgICAgICAgICAgICAgICAgICAgLy8gRXZlbiBpZiB0aGUgcGhhc2UgaXMgZW1wdHksIHdlIHNob3VsZCB3YWl0IGZvciBpdFxuICAgICAgICAgICAgICAgICAgICAvLyB0byBiZSB3YWxrZWQgdG8gYXZvaWQgcmUtb3JkZXJpbmcgcG9saWNpZXMuXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobm9kZS5kZXBlbmRzT24uc2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSdzIG5vdGhpbmcgZWxzZSB3ZSdyZSB3YWl0aW5nIGZvciwgd2UgY2FuXG4gICAgICAgICAgICAgICAgICAgIC8vIGFkZCB0aGlzIHBvbGljeSB0byB0aGUgcmVzdWx0IGxpc3QuXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5vZGUucG9saWN5KTtcbiAgICAgICAgICAgICAgICAgICAgLy8gTm90aWZ5IGFueXRoaW5nIHRoYXQgZGVwZW5kcyBvbiB0aGlzIHBvbGljeSB0aGF0XG4gICAgICAgICAgICAgICAgICAgIC8vIHRoZSBwb2xpY3kgaGFzIGJlZW4gc2NoZWR1bGVkLlxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGRlcGVuZGFudCBvZiBub2RlLmRlcGVuZGFudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZGFudC5kZXBlbmRzT24uZGVsZXRlKG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHBvbGljeU1hcC5kZWxldGUobm9kZS5wb2xpY3kubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIHBoYXNlLnBvbGljaWVzLmRlbGV0ZShub2RlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gd2Fsa1BoYXNlcygpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcGhhc2Ugb2Ygb3JkZXJlZFBoYXNlcykge1xuICAgICAgICAgICAgICAgIHdhbGtQaGFzZShwaGFzZSk7XG4gICAgICAgICAgICAgICAgLy8gaWYgdGhlIHBoYXNlIGlzbid0IGNvbXBsZXRlXG4gICAgICAgICAgICAgICAgaWYgKHBoYXNlLnBvbGljaWVzLnNpemUgPiAwICYmIHBoYXNlICE9PSBub1BoYXNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghbm9QaGFzZS5oYXNSdW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRyeSBydW5uaW5nIG5vUGhhc2UgdG8gc2VlIGlmIHRoYXQgdW5ibG9ja3MgdGhpcyBwaGFzZSBuZXh0IHRpY2suXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gaWYgYSBwaGFzZSB0aGF0IGhhcHBlbnMgYmVmb3JlIG5vUGhhc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlzIHdhaXRpbmcgb24gYSBub1BoYXNlIHBvbGljeSB0byBjb21wbGV0ZS5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdhbGtQaGFzZShub1BoYXNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCBwcm9jZWVkIHRvIHRoZSBuZXh0IHBoYXNlIHVudGlsIHRoaXMgcGhhc2UgZmluaXNoZXMuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHBoYXNlLmhhc0FmdGVyUG9saWNpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gUnVuIGFueSBwb2xpY2llcyB1bmJsb2NrZWQgYnkgdGhpcyBwaGFzZVxuICAgICAgICAgICAgICAgICAgICB3YWxrUGhhc2Uobm9QaGFzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIEl0ZXJhdGUgdW50aWwgd2UndmUgcHV0IGV2ZXJ5IG5vZGUgaW4gdGhlIHJlc3VsdCBsaXN0LlxuICAgICAgICBsZXQgaXRlcmF0aW9uID0gMDtcbiAgICAgICAgd2hpbGUgKHBvbGljeU1hcC5zaXplID4gMCkge1xuICAgICAgICAgICAgaXRlcmF0aW9uKys7XG4gICAgICAgICAgICBjb25zdCBpbml0aWFsUmVzdWx0TGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcbiAgICAgICAgICAgIC8vIEtlZXAgd2Fsa2luZyBlYWNoIHBoYXNlIGluIG9yZGVyIHVudGlsIHdlIGNhbiBvcmRlciBldmVyeSBub2RlLlxuICAgICAgICAgICAgd2Fsa1BoYXNlcygpO1xuICAgICAgICAgICAgLy8gVGhlIHJlc3VsdCBsaXN0ICpzaG91bGQqIGdldCBhdCBsZWFzdCBvbmUgbGFyZ2VyIGVhY2ggdGltZVxuICAgICAgICAgICAgLy8gYWZ0ZXIgdGhlIGZpcnN0IGZ1bGwgcGFzcy5cbiAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgd2UncmUgZ29pbmcgdG8gbG9vcCBmb3JldmVyLlxuICAgICAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPD0gaW5pdGlhbFJlc3VsdExlbmd0aCAmJiBpdGVyYXRpb24gPiAxKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IHNhdGlzZnkgcG9saWN5IGRlcGVuZGVuY2llcyBkdWUgdG8gcmVxdWlyZW1lbnRzIGN5Y2xlLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8qKlxuICogQ3JlYXRlcyBhIHRvdGFsbHkgZW1wdHkgcGlwZWxpbmUuXG4gKiBVc2VmdWwgZm9yIHRlc3Rpbmcgb3IgY3JlYXRpbmcgYSBjdXN0b20gb25lLlxuICovXG5mdW5jdGlvbiBjcmVhdGVFbXB0eVBpcGVsaW5lKCkge1xuICAgIHJldHVybiBIdHRwUGlwZWxpbmUuY3JlYXRlKCk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1waXBlbGluZS5qcy5tYXAiLAogICAgIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXHJcblxyXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcclxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxyXG5cclxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxyXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcclxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxyXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cclxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1JcclxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxyXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG4vKiBnbG9iYWwgZ2xvYmFsLCBkZWZpbmUsIFN5bWJvbCwgUmVmbGVjdCwgUHJvbWlzZSwgU3VwcHJlc3NlZEVycm9yLCBJdGVyYXRvciAqL1xyXG52YXIgX19leHRlbmRzO1xyXG52YXIgX19hc3NpZ247XHJcbnZhciBfX3Jlc3Q7XHJcbnZhciBfX2RlY29yYXRlO1xyXG52YXIgX19wYXJhbTtcclxudmFyIF9fZXNEZWNvcmF0ZTtcclxudmFyIF9fcnVuSW5pdGlhbGl6ZXJzO1xyXG52YXIgX19wcm9wS2V5O1xyXG52YXIgX19zZXRGdW5jdGlvbk5hbWU7XHJcbnZhciBfX21ldGFkYXRhO1xyXG52YXIgX19hd2FpdGVyO1xyXG52YXIgX19nZW5lcmF0b3I7XHJcbnZhciBfX2V4cG9ydFN0YXI7XHJcbnZhciBfX3ZhbHVlcztcclxudmFyIF9fcmVhZDtcclxudmFyIF9fc3ByZWFkO1xyXG52YXIgX19zcHJlYWRBcnJheXM7XHJcbnZhciBfX3NwcmVhZEFycmF5O1xyXG52YXIgX19hd2FpdDtcclxudmFyIF9fYXN5bmNHZW5lcmF0b3I7XHJcbnZhciBfX2FzeW5jRGVsZWdhdG9yO1xyXG52YXIgX19hc3luY1ZhbHVlcztcclxudmFyIF9fbWFrZVRlbXBsYXRlT2JqZWN0O1xyXG52YXIgX19pbXBvcnRTdGFyO1xyXG52YXIgX19pbXBvcnREZWZhdWx0O1xyXG52YXIgX19jbGFzc1ByaXZhdGVGaWVsZEdldDtcclxudmFyIF9fY2xhc3NQcml2YXRlRmllbGRTZXQ7XHJcbnZhciBfX2NsYXNzUHJpdmF0ZUZpZWxkSW47XHJcbnZhciBfX2NyZWF0ZUJpbmRpbmc7XHJcbnZhciBfX2FkZERpc3Bvc2FibGVSZXNvdXJjZTtcclxudmFyIF9fZGlzcG9zZVJlc291cmNlcztcclxudmFyIF9fcmV3cml0ZVJlbGF0aXZlSW1wb3J0RXh0ZW5zaW9uO1xyXG4oZnVuY3Rpb24gKGZhY3RvcnkpIHtcclxuICAgIHZhciByb290ID0gdHlwZW9mIGdsb2JhbCA9PT0gXCJvYmplY3RcIiA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmID09PSBcIm9iamVjdFwiID8gc2VsZiA6IHR5cGVvZiB0aGlzID09PSBcIm9iamVjdFwiID8gdGhpcyA6IHt9O1xyXG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XHJcbiAgICAgICAgZGVmaW5lKFwidHNsaWJcIiwgW1wiZXhwb3J0c1wiXSwgZnVuY3Rpb24gKGV4cG9ydHMpIHsgZmFjdG9yeShjcmVhdGVFeHBvcnRlcihyb290LCBjcmVhdGVFeHBvcnRlcihleHBvcnRzKSkpOyB9KTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZS5leHBvcnRzID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgZmFjdG9yeShjcmVhdGVFeHBvcnRlcihyb290LCBjcmVhdGVFeHBvcnRlcihtb2R1bGUuZXhwb3J0cykpKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGZhY3RvcnkoY3JlYXRlRXhwb3J0ZXIocm9vdCkpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gY3JlYXRlRXhwb3J0ZXIoZXhwb3J0cywgcHJldmlvdXMpIHtcclxuICAgICAgICBpZiAoZXhwb3J0cyAhPT0gcm9vdCkge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIE9iamVjdC5jcmVhdGUgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGlkLCB2KSB7IHJldHVybiBleHBvcnRzW2lkXSA9IHByZXZpb3VzID8gcHJldmlvdXMoaWQsIHYpIDogdjsgfTtcclxuICAgIH1cclxufSlcclxuKGZ1bmN0aW9uIChleHBvcnRlcikge1xyXG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcclxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XHJcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcclxuXHJcbiAgICBfX2V4dGVuZHMgPSBmdW5jdGlvbiAoZCwgYikge1xyXG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcclxuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcclxuICAgIH07XHJcblxyXG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0KSB7XHJcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XHJcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgfTtcclxuXHJcbiAgICBfX3Jlc3QgPSBmdW5jdGlvbiAocywgZSkge1xyXG4gICAgICAgIHZhciB0ID0ge307XHJcbiAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXHJcbiAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxyXG4gICAgICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHQ7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fZGVjb3JhdGUgPSBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgICAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xyXG4gICAgICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICAgICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgICAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX3BhcmFtID0gZnVuY3Rpb24gKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHsgZGVjb3JhdG9yKHRhcmdldCwga2V5LCBwYXJhbUluZGV4KTsgfVxyXG4gICAgfTtcclxuXHJcbiAgICBfX2VzRGVjb3JhdGUgPSBmdW5jdGlvbiAoY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHtcclxuICAgICAgICBmdW5jdGlvbiBhY2NlcHQoZikgeyBpZiAoZiAhPT0gdm9pZCAwICYmIHR5cGVvZiBmICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGdW5jdGlvbiBleHBlY3RlZFwiKTsgcmV0dXJuIGY7IH1cclxuICAgICAgICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkgPSBraW5kID09PSBcImdldHRlclwiID8gXCJnZXRcIiA6IGtpbmQgPT09IFwic2V0dGVyXCIgPyBcInNldFwiIDogXCJ2YWx1ZVwiO1xyXG4gICAgICAgIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bXCJzdGF0aWNcIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsO1xyXG4gICAgICAgIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pO1xyXG4gICAgICAgIHZhciBfLCBkb25lID0gZmFsc2U7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICAgICAgdmFyIGNvbnRleHQgPSB7fTtcclxuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBjb250ZXh0SW4pIGNvbnRleHRbcF0gPSBwID09PSBcImFjY2Vzc1wiID8ge30gOiBjb250ZXh0SW5bcF07XHJcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dC5hY2Nlc3NbcF0gPSBjb250ZXh0SW4uYWNjZXNzW3BdO1xyXG4gICAgICAgICAgICBjb250ZXh0LmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24gKGYpIHsgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWRcIik7IGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGYgfHwgbnVsbCkpOyB9O1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaV0pKGtpbmQgPT09IFwiYWNjZXNzb3JcIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXldLCBjb250ZXh0KTtcclxuICAgICAgICAgICAgaWYgKGtpbmQgPT09IFwiYWNjZXNzb3JcIikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gXCJvYmplY3RcIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBleHBlY3RlZFwiKTtcclxuICAgICAgICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF87XHJcbiAgICAgICAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfO1xyXG4gICAgICAgICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChfID0gYWNjZXB0KHJlc3VsdCkpIHtcclxuICAgICAgICAgICAgICAgIGlmIChraW5kID09PSBcImZpZWxkXCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF8pO1xyXG4gICAgICAgICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleV0gPSBfO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTtcclxuICAgICAgICBkb25lID0gdHJ1ZTtcclxuICAgIH07XHJcblxyXG4gICAgX19ydW5Jbml0aWFsaXplcnMgPSBmdW5jdGlvbiAodGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZSkge1xyXG4gICAgICAgIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnLCB2YWx1ZSkgOiBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUgOiB2b2lkIDA7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fcHJvcEtleSA9IGZ1bmN0aW9uICh4KSB7XHJcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB4ID09PSBcInN5bWJvbFwiID8geCA6IFwiXCIuY29uY2F0KHgpO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX3NldEZ1bmN0aW9uTmFtZSA9IGZ1bmN0aW9uIChmLCBuYW1lLCBwcmVmaXgpIHtcclxuICAgICAgICBpZiAodHlwZW9mIG5hbWUgPT09IFwic3ltYm9sXCIpIG5hbWUgPSBuYW1lLmRlc2NyaXB0aW9uID8gXCJbXCIuY29uY2F0KG5hbWUuZGVzY3JpcHRpb24sIFwiXVwiKSA6IFwiXCI7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLCBcIm5hbWVcIiwgeyBjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiBwcmVmaXggPyBcIlwiLmNvbmNhdChwcmVmaXgsIFwiIFwiLCBuYW1lKSA6IG5hbWUgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fbWV0YWRhdGEgPSBmdW5jdGlvbiAobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2F3YWl0ZXIgPSBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XHJcbiAgICAgICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XHJcbiAgICAgICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcblxyXG4gICAgX19nZW5lcmF0b3IgPSBmdW5jdGlvbiAodGhpc0FyZywgYm9keSkge1xyXG4gICAgICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGcgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgSXRlcmF0b3IgPT09IFwiZnVuY3Rpb25cIiA/IEl0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpO1xyXG4gICAgICAgIHJldHVybiBnLm5leHQgPSB2ZXJiKDApLCBnW1widGhyb3dcIl0gPSB2ZXJiKDEpLCBnW1wicmV0dXJuXCJdID0gdmVyYigyKSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xyXG4gICAgICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcclxuICAgICAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xyXG4gICAgICAgICAgICB3aGlsZSAoZyAmJiAoZyA9IDAsIG9wWzBdICYmIChfID0gMCkpLCBfKSB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xyXG4gICAgICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cclxuICAgICAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBfX2V4cG9ydFN0YXIgPSBmdW5jdGlvbihtLCBvKSB7XHJcbiAgICAgICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBwKSkgX19jcmVhdGVCaW5kaW5nKG8sIG0sIHApO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2NyZWF0ZUJpbmRpbmcgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XHJcbiAgICAgICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgICAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XHJcbiAgICAgICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcclxuICAgICAgICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcclxuICAgIH0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XHJcbiAgICAgICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgICAgICBvW2syXSA9IG1ba107XHJcbiAgICB9KTtcclxuXHJcbiAgICBfX3ZhbHVlcyA9IGZ1bmN0aW9uIChvKSB7XHJcbiAgICAgICAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcclxuICAgICAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcclxuICAgICAgICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XHJcbiAgICAgICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIH07XHJcblxyXG4gICAgX19yZWFkID0gZnVuY3Rpb24gKG8sIG4pIHtcclxuICAgICAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XHJcbiAgICAgICAgaWYgKCFtKSByZXR1cm4gbztcclxuICAgICAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XHJcbiAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGFyO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKiogQGRlcHJlY2F0ZWQgKi9cclxuICAgIF9fc3ByZWFkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICBhciA9IGFyLmNvbmNhdChfX3JlYWQoYXJndW1lbnRzW2ldKSk7XHJcbiAgICAgICAgcmV0dXJuIGFyO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKiogQGRlcHJlY2F0ZWQgKi9cclxuICAgIF9fc3ByZWFkQXJyYXlzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGZvciAodmFyIHMgPSAwLCBpID0gMCwgaWwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWw7IGkrKykgcyArPSBhcmd1bWVudHNbaV0ubGVuZ3RoO1xyXG4gICAgICAgIGZvciAodmFyIHIgPSBBcnJheShzKSwgayA9IDAsIGkgPSAwOyBpIDwgaWw7IGkrKylcclxuICAgICAgICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXHJcbiAgICAgICAgICAgICAgICByW2tdID0gYVtqXTtcclxuICAgICAgICByZXR1cm4gcjtcclxuICAgIH07XHJcblxyXG4gICAgX19zcHJlYWRBcnJheSA9IGZ1bmN0aW9uICh0bywgZnJvbSwgcGFjaykge1xyXG4gICAgICAgIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcclxuICAgICAgICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XHJcbiAgICAgICAgICAgICAgICBhcltpXSA9IGZyb21baV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fYXdhaXQgPSBmdW5jdGlvbiAodikge1xyXG4gICAgICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2FzeW5jR2VuZXJhdG9yID0gZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xyXG4gICAgICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICAgICAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcclxuICAgICAgICByZXR1cm4gaSA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBBc3luY0l0ZXJhdG9yID09PSBcImZ1bmN0aW9uXCIgPyBBc3luY0l0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpLCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIsIGF3YWl0UmV0dXJuKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgICAgIGZ1bmN0aW9uIGF3YWl0UmV0dXJuKGYpIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBQcm9taXNlLnJlc29sdmUodikudGhlbihmLCByZWplY3QpOyB9OyB9XHJcbiAgICAgICAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlmIChnW25dKSB7IGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IGlmIChmKSBpW25dID0gZihpW25dKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgfVxyXG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cclxuICAgICAgICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XHJcbiAgICAgICAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxyXG4gICAgfTtcclxuXHJcbiAgICBfX2FzeW5jRGVsZWdhdG9yID0gZnVuY3Rpb24gKG8pIHtcclxuICAgICAgICB2YXIgaSwgcDtcclxuICAgICAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIsIGZ1bmN0aW9uIChlKSB7IHRocm93IGU7IH0pLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IGZhbHNlIH0gOiBmID8gZih2KSA6IHY7IH0gOiBmOyB9XHJcbiAgICB9O1xyXG5cclxuICAgIF9fYXN5bmNWYWx1ZXMgPSBmdW5jdGlvbiAobykge1xyXG4gICAgICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICAgICAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcclxuICAgICAgICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XHJcbiAgICAgICAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxyXG4gICAgICAgIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cclxuICAgIH07XHJcblxyXG4gICAgX19tYWtlVGVtcGxhdGVPYmplY3QgPSBmdW5jdGlvbiAoY29va2VkLCByYXcpIHtcclxuICAgICAgICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb29rZWQsIFwicmF3XCIsIHsgdmFsdWU6IHJhdyB9KTsgfSBlbHNlIHsgY29va2VkLnJhdyA9IHJhdzsgfVxyXG4gICAgICAgIHJldHVybiBjb29rZWQ7XHJcbiAgICB9O1xyXG5cclxuICAgIHZhciBfX3NldE1vZHVsZURlZmF1bHQgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XHJcbiAgICB9KSA6IGZ1bmN0aW9uKG8sIHYpIHtcclxuICAgICAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XHJcbiAgICB9O1xyXG5cclxuICAgIF9faW1wb3J0U3RhciA9IGZ1bmN0aW9uIChtb2QpIHtcclxuICAgICAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xyXG4gICAgICAgIHZhciByZXN1bHQgPSB7fTtcclxuICAgICAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XHJcbiAgICAgICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2ltcG9ydERlZmF1bHQgPSBmdW5jdGlvbiAobW9kKSB7XHJcbiAgICAgICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XHJcbiAgICB9O1xyXG5cclxuICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQgPSBmdW5jdGlvbiAocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XHJcbiAgICAgICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO1xyXG4gICAgICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xyXG4gICAgICAgIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQgPSBmdW5jdGlvbiAocmVjZWl2ZXIsIHN0YXRlLCB2YWx1ZSwga2luZCwgZikge1xyXG4gICAgICAgIGlmIChraW5kID09PSBcIm1cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZVwiKTtcclxuICAgICAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXJcIik7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcclxuICAgICAgICByZXR1cm4gKGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyLCB2YWx1ZSkgOiBmID8gZi52YWx1ZSA9IHZhbHVlIDogc3RhdGUuc2V0KHJlY2VpdmVyLCB2YWx1ZSkpLCB2YWx1ZTtcclxuICAgIH07XHJcblxyXG4gICAgX19jbGFzc1ByaXZhdGVGaWVsZEluID0gZnVuY3Rpb24gKHN0YXRlLCByZWNlaXZlcikge1xyXG4gICAgICAgIGlmIChyZWNlaXZlciA9PT0gbnVsbCB8fCAodHlwZW9mIHJlY2VpdmVyICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiByZWNlaXZlciAhPT0gXCJmdW5jdGlvblwiKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB1c2UgJ2luJyBvcGVyYXRvciBvbiBub24tb2JqZWN0XCIpO1xyXG4gICAgICAgIHJldHVybiB0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyID09PSBzdGF0ZSA6IHN0YXRlLmhhcyhyZWNlaXZlcik7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fYWRkRGlzcG9zYWJsZVJlc291cmNlID0gZnVuY3Rpb24gKGVudiwgdmFsdWUsIGFzeW5jKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB2b2lkIDApIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBleHBlY3RlZC5cIik7XHJcbiAgICAgICAgICAgIHZhciBkaXNwb3NlLCBpbm5lcjtcclxuICAgICAgICAgICAgaWYgKGFzeW5jKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIVN5bWJvbC5hc3luY0Rpc3Bvc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNEaXNwb3NlIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgICAgICAgICAgICAgIGRpc3Bvc2UgPSB2YWx1ZVtTeW1ib2wuYXN5bmNEaXNwb3NlXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZGlzcG9zZSA9PT0gdm9pZCAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIVN5bWJvbC5kaXNwb3NlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmRpc3Bvc2UgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgICAgICAgICAgICAgZGlzcG9zZSA9IHZhbHVlW1N5bWJvbC5kaXNwb3NlXTtcclxuICAgICAgICAgICAgICAgIGlmIChhc3luYykgaW5uZXIgPSBkaXNwb3NlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZGlzcG9zZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiT2JqZWN0IG5vdCBkaXNwb3NhYmxlLlwiKTtcclxuICAgICAgICAgICAgaWYgKGlubmVyKSBkaXNwb3NlID0gZnVuY3Rpb24oKSB7IHRyeSB7IGlubmVyLmNhbGwodGhpcyk7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIFByb21pc2UucmVqZWN0KGUpOyB9IH07XHJcbiAgICAgICAgICAgIGVudi5zdGFjay5wdXNoKHsgdmFsdWU6IHZhbHVlLCBkaXNwb3NlOiBkaXNwb3NlLCBhc3luYzogYXN5bmMgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGFzeW5jKSB7XHJcbiAgICAgICAgICAgIGVudi5zdGFjay5wdXNoKHsgYXN5bmM6IHRydWUgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH07XHJcblxyXG4gICAgdmFyIF9TdXBwcmVzc2VkRXJyb3IgPSB0eXBlb2YgU3VwcHJlc3NlZEVycm9yID09PSBcImZ1bmN0aW9uXCIgPyBTdXBwcmVzc2VkRXJyb3IgOiBmdW5jdGlvbiAoZXJyb3IsIHN1cHByZXNzZWQsIG1lc3NhZ2UpIHtcclxuICAgICAgICB2YXIgZSA9IG5ldyBFcnJvcihtZXNzYWdlKTtcclxuICAgICAgICByZXR1cm4gZS5uYW1lID0gXCJTdXBwcmVzc2VkRXJyb3JcIiwgZS5lcnJvciA9IGVycm9yLCBlLnN1cHByZXNzZWQgPSBzdXBwcmVzc2VkLCBlO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2Rpc3Bvc2VSZXNvdXJjZXMgPSBmdW5jdGlvbiAoZW52KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZmFpbChlKSB7XHJcbiAgICAgICAgICAgIGVudi5lcnJvciA9IGVudi5oYXNFcnJvciA/IG5ldyBfU3VwcHJlc3NlZEVycm9yKGUsIGVudi5lcnJvciwgXCJBbiBlcnJvciB3YXMgc3VwcHJlc3NlZCBkdXJpbmcgZGlzcG9zYWwuXCIpIDogZTtcclxuICAgICAgICAgICAgZW52Lmhhc0Vycm9yID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHIsIHMgPSAwO1xyXG4gICAgICAgIGZ1bmN0aW9uIG5leHQoKSB7XHJcbiAgICAgICAgICAgIHdoaWxlIChyID0gZW52LnN0YWNrLnBvcCgpKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghci5hc3luYyAmJiBzID09PSAxKSByZXR1cm4gcyA9IDAsIGVudi5zdGFjay5wdXNoKHIpLCBQcm9taXNlLnJlc29sdmUoKS50aGVuKG5leHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyLmRpc3Bvc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHIuZGlzcG9zZS5jYWxsKHIudmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoci5hc3luYykgcmV0dXJuIHMgfD0gMiwgUHJvbWlzZS5yZXNvbHZlKHJlc3VsdCkudGhlbihuZXh0LCBmdW5jdGlvbihlKSB7IGZhaWwoZSk7IHJldHVybiBuZXh0KCk7IH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHMgfD0gMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmFpbChlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocyA9PT0gMSkgcmV0dXJuIGVudi5oYXNFcnJvciA/IFByb21pc2UucmVqZWN0KGVudi5lcnJvcikgOiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgICAgICAgICAgaWYgKGVudi5oYXNFcnJvcikgdGhyb3cgZW52LmVycm9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV4dCgpO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX3Jld3JpdGVSZWxhdGl2ZUltcG9ydEV4dGVuc2lvbiA9IGZ1bmN0aW9uIChwYXRoLCBwcmVzZXJ2ZUpzeCkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgcGF0aCA9PT0gXCJzdHJpbmdcIiAmJiAvXlxcLlxcLj9cXC8vLnRlc3QocGF0aCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHBhdGgucmVwbGFjZSgvXFwuKHRzeCkkfCgoPzpcXC5kKT8pKCg/OlxcLlteLi9dKz8pPylcXC4oW2NtXT8pdHMkL2ksIGZ1bmN0aW9uIChtLCB0c3gsIGQsIGV4dCwgY20pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0c3ggPyBwcmVzZXJ2ZUpzeCA/IFwiLmpzeFwiIDogXCIuanNcIiA6IGQgJiYgKCFleHQgfHwgIWNtKSA/IG0gOiAoZCArIGV4dCArIFwiLlwiICsgY20udG9Mb3dlckNhc2UoKSArIFwianNcIik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcGF0aDtcclxuICAgIH07XHJcblxyXG4gICAgZXhwb3J0ZXIoXCJfX2V4dGVuZHNcIiwgX19leHRlbmRzKTtcclxuICAgIGV4cG9ydGVyKFwiX19hc3NpZ25cIiwgX19hc3NpZ24pO1xyXG4gICAgZXhwb3J0ZXIoXCJfX3Jlc3RcIiwgX19yZXN0KTtcclxuICAgIGV4cG9ydGVyKFwiX19kZWNvcmF0ZVwiLCBfX2RlY29yYXRlKTtcclxuICAgIGV4cG9ydGVyKFwiX19wYXJhbVwiLCBfX3BhcmFtKTtcclxuICAgIGV4cG9ydGVyKFwiX19lc0RlY29yYXRlXCIsIF9fZXNEZWNvcmF0ZSk7XHJcbiAgICBleHBvcnRlcihcIl9fcnVuSW5pdGlhbGl6ZXJzXCIsIF9fcnVuSW5pdGlhbGl6ZXJzKTtcclxuICAgIGV4cG9ydGVyKFwiX19wcm9wS2V5XCIsIF9fcHJvcEtleSk7XHJcbiAgICBleHBvcnRlcihcIl9fc2V0RnVuY3Rpb25OYW1lXCIsIF9fc2V0RnVuY3Rpb25OYW1lKTtcclxuICAgIGV4cG9ydGVyKFwiX19tZXRhZGF0YVwiLCBfX21ldGFkYXRhKTtcclxuICAgIGV4cG9ydGVyKFwiX19hd2FpdGVyXCIsIF9fYXdhaXRlcik7XHJcbiAgICBleHBvcnRlcihcIl9fZ2VuZXJhdG9yXCIsIF9fZ2VuZXJhdG9yKTtcclxuICAgIGV4cG9ydGVyKFwiX19leHBvcnRTdGFyXCIsIF9fZXhwb3J0U3Rhcik7XHJcbiAgICBleHBvcnRlcihcIl9fY3JlYXRlQmluZGluZ1wiLCBfX2NyZWF0ZUJpbmRpbmcpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX3ZhbHVlc1wiLCBfX3ZhbHVlcyk7XHJcbiAgICBleHBvcnRlcihcIl9fcmVhZFwiLCBfX3JlYWQpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX3NwcmVhZFwiLCBfX3NwcmVhZCk7XHJcbiAgICBleHBvcnRlcihcIl9fc3ByZWFkQXJyYXlzXCIsIF9fc3ByZWFkQXJyYXlzKTtcclxuICAgIGV4cG9ydGVyKFwiX19zcHJlYWRBcnJheVwiLCBfX3NwcmVhZEFycmF5KTtcclxuICAgIGV4cG9ydGVyKFwiX19hd2FpdFwiLCBfX2F3YWl0KTtcclxuICAgIGV4cG9ydGVyKFwiX19hc3luY0dlbmVyYXRvclwiLCBfX2FzeW5jR2VuZXJhdG9yKTtcclxuICAgIGV4cG9ydGVyKFwiX19hc3luY0RlbGVnYXRvclwiLCBfX2FzeW5jRGVsZWdhdG9yKTtcclxuICAgIGV4cG9ydGVyKFwiX19hc3luY1ZhbHVlc1wiLCBfX2FzeW5jVmFsdWVzKTtcclxuICAgIGV4cG9ydGVyKFwiX19tYWtlVGVtcGxhdGVPYmplY3RcIiwgX19tYWtlVGVtcGxhdGVPYmplY3QpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2ltcG9ydFN0YXJcIiwgX19pbXBvcnRTdGFyKTtcclxuICAgIGV4cG9ydGVyKFwiX19pbXBvcnREZWZhdWx0XCIsIF9faW1wb3J0RGVmYXVsdCk7XHJcbiAgICBleHBvcnRlcihcIl9fY2xhc3NQcml2YXRlRmllbGRHZXRcIiwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCk7XHJcbiAgICBleHBvcnRlcihcIl9fY2xhc3NQcml2YXRlRmllbGRTZXRcIiwgX19jbGFzc1ByaXZhdGVGaWVsZFNldCk7XHJcbiAgICBleHBvcnRlcihcIl9fY2xhc3NQcml2YXRlRmllbGRJblwiLCBfX2NsYXNzUHJpdmF0ZUZpZWxkSW4pO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2FkZERpc3Bvc2FibGVSZXNvdXJjZVwiLCBfX2FkZERpc3Bvc2FibGVSZXNvdXJjZSk7XHJcbiAgICBleHBvcnRlcihcIl9fZGlzcG9zZVJlc291cmNlc1wiLCBfX2Rpc3Bvc2VSZXNvdXJjZXMpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX3Jld3JpdGVSZWxhdGl2ZUltcG9ydEV4dGVuc2lvblwiLCBfX3Jld3JpdGVSZWxhdGl2ZUltcG9ydEV4dGVuc2lvbik7XHJcbn0pO1xyXG5cclxuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XHJcbiAgICBfX2V4dGVuZHMsXHJcbiAgICBfX2Fzc2lnbixcclxuICAgIF9fcmVzdCxcclxuICAgIF9fZGVjb3JhdGUsXHJcbiAgICBfX3BhcmFtLFxyXG4gICAgX19lc0RlY29yYXRlLFxyXG4gICAgX19ydW5Jbml0aWFsaXplcnMsXHJcbiAgICBfX3Byb3BLZXksXHJcbiAgICBfX3NldEZ1bmN0aW9uTmFtZSxcclxuICAgIF9fbWV0YWRhdGEsXHJcbiAgICBfX2F3YWl0ZXIsXHJcbiAgICBfX2dlbmVyYXRvcixcclxuICAgIF9fZXhwb3J0U3RhcixcclxuICAgIF9fY3JlYXRlQmluZGluZyxcclxuICAgIF9fdmFsdWVzLFxyXG4gICAgX19yZWFkLFxyXG4gICAgX19zcHJlYWQsXHJcbiAgICBfX3NwcmVhZEFycmF5cyxcclxuICAgIF9fc3ByZWFkQXJyYXksXHJcbiAgICBfX2F3YWl0LFxyXG4gICAgX19hc3luY0dlbmVyYXRvcixcclxuICAgIF9fYXN5bmNEZWxlZ2F0b3IsXHJcbiAgICBfX2FzeW5jVmFsdWVzLFxyXG4gICAgX19tYWtlVGVtcGxhdGVPYmplY3QsXHJcbiAgICBfX2ltcG9ydFN0YXIsXHJcbiAgICBfX2ltcG9ydERlZmF1bHQsXHJcbiAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0LFxyXG4gICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCxcclxuICAgIF9fY2xhc3NQcml2YXRlRmllbGRJbixcclxuICAgIF9fYWRkRGlzcG9zYWJsZVJlc291cmNlLFxyXG4gICAgX19kaXNwb3NlUmVzb3VyY2VzLFxyXG4gICAgX19yZXdyaXRlUmVsYXRpdmVJbXBvcnRFeHRlbnNpb24sXHJcbn0pO1xyXG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmxvZyA9IGxvZztcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG5jb25zdCBub2RlX29zXzEgPSByZXF1aXJlKFwibm9kZTpvc1wiKTtcbmNvbnN0IG5vZGVfdXRpbF8xID0gdHNsaWJfMS5fX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIm5vZGU6dXRpbFwiKSk7XG5jb25zdCBwcm9jZXNzID0gdHNsaWJfMS5fX2ltcG9ydFN0YXIocmVxdWlyZShcIm5vZGU6cHJvY2Vzc1wiKSk7XG5mdW5jdGlvbiBsb2cobWVzc2FnZSwgLi4uYXJncykge1xuICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKGAke25vZGVfdXRpbF8xLmRlZmF1bHQuZm9ybWF0KG1lc3NhZ2UsIC4uLmFyZ3MpfSR7bm9kZV9vc18xLkVPTH1gKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxvZy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBsb2dfanNfMSA9IHJlcXVpcmUoXCIuL2xvZy5qc1wiKTtcbmNvbnN0IGRlYnVnRW52VmFyaWFibGUgPSAodHlwZW9mIHByb2Nlc3MgIT09IFwidW5kZWZpbmVkXCIgJiYgcHJvY2Vzcy5lbnYgJiYgcHJvY2Vzcy5lbnYuREVCVUcpIHx8IHVuZGVmaW5lZDtcbmxldCBlbmFibGVkU3RyaW5nO1xubGV0IGVuYWJsZWROYW1lc3BhY2VzID0gW107XG5sZXQgc2tpcHBlZE5hbWVzcGFjZXMgPSBbXTtcbmNvbnN0IGRlYnVnZ2VycyA9IFtdO1xuaWYgKGRlYnVnRW52VmFyaWFibGUpIHtcbiAgICBlbmFibGUoZGVidWdFbnZWYXJpYWJsZSk7XG59XG5jb25zdCBkZWJ1Z09iaiA9IE9iamVjdC5hc3NpZ24oKG5hbWVzcGFjZSkgPT4ge1xuICAgIHJldHVybiBjcmVhdGVEZWJ1Z2dlcihuYW1lc3BhY2UpO1xufSwge1xuICAgIGVuYWJsZSxcbiAgICBlbmFibGVkLFxuICAgIGRpc2FibGUsXG4gICAgbG9nOiBsb2dfanNfMS5sb2csXG59KTtcbmZ1bmN0aW9uIGVuYWJsZShuYW1lc3BhY2VzKSB7XG4gICAgZW5hYmxlZFN0cmluZyA9IG5hbWVzcGFjZXM7XG4gICAgZW5hYmxlZE5hbWVzcGFjZXMgPSBbXTtcbiAgICBza2lwcGVkTmFtZXNwYWNlcyA9IFtdO1xuICAgIGNvbnN0IHdpbGRjYXJkID0gL1xcKi9nO1xuICAgIGNvbnN0IG5hbWVzcGFjZUxpc3QgPSBuYW1lc3BhY2VzLnNwbGl0KFwiLFwiKS5tYXAoKG5zKSA9PiBucy50cmltKCkucmVwbGFjZSh3aWxkY2FyZCwgXCIuKj9cIikpO1xuICAgIGZvciAoY29uc3QgbnMgb2YgbmFtZXNwYWNlTGlzdCkge1xuICAgICAgICBpZiAobnMuc3RhcnRzV2l0aChcIi1cIikpIHtcbiAgICAgICAgICAgIHNraXBwZWROYW1lc3BhY2VzLnB1c2gobmV3IFJlZ0V4cChgXiR7bnMuc3Vic3RyKDEpfSRgKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBlbmFibGVkTmFtZXNwYWNlcy5wdXNoKG5ldyBSZWdFeHAoYF4ke25zfSRgKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBpbnN0YW5jZSBvZiBkZWJ1Z2dlcnMpIHtcbiAgICAgICAgaW5zdGFuY2UuZW5hYmxlZCA9IGVuYWJsZWQoaW5zdGFuY2UubmFtZXNwYWNlKTtcbiAgICB9XG59XG5mdW5jdGlvbiBlbmFibGVkKG5hbWVzcGFjZSkge1xuICAgIGlmIChuYW1lc3BhY2UuZW5kc1dpdGgoXCIqXCIpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHNraXBwZWQgb2Ygc2tpcHBlZE5hbWVzcGFjZXMpIHtcbiAgICAgICAgaWYgKHNraXBwZWQudGVzdChuYW1lc3BhY2UpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBlbmFibGVkTmFtZXNwYWNlIG9mIGVuYWJsZWROYW1lc3BhY2VzKSB7XG4gICAgICAgIGlmIChlbmFibGVkTmFtZXNwYWNlLnRlc3QobmFtZXNwYWNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gZGlzYWJsZSgpIHtcbiAgICBjb25zdCByZXN1bHQgPSBlbmFibGVkU3RyaW5nIHx8IFwiXCI7XG4gICAgZW5hYmxlKFwiXCIpO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBjcmVhdGVEZWJ1Z2dlcihuYW1lc3BhY2UpIHtcbiAgICBjb25zdCBuZXdEZWJ1Z2dlciA9IE9iamVjdC5hc3NpZ24oZGVidWcsIHtcbiAgICAgICAgZW5hYmxlZDogZW5hYmxlZChuYW1lc3BhY2UpLFxuICAgICAgICBkZXN0cm95LFxuICAgICAgICBsb2c6IGRlYnVnT2JqLmxvZyxcbiAgICAgICAgbmFtZXNwYWNlLFxuICAgICAgICBleHRlbmQsXG4gICAgfSk7XG4gICAgZnVuY3Rpb24gZGVidWcoLi4uYXJncykge1xuICAgICAgICBpZiAoIW5ld0RlYnVnZ2VyLmVuYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXJncy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBhcmdzWzBdID0gYCR7bmFtZXNwYWNlfSAke2FyZ3NbMF19YDtcbiAgICAgICAgfVxuICAgICAgICBuZXdEZWJ1Z2dlci5sb2coLi4uYXJncyk7XG4gICAgfVxuICAgIGRlYnVnZ2Vycy5wdXNoKG5ld0RlYnVnZ2VyKTtcbiAgICByZXR1cm4gbmV3RGVidWdnZXI7XG59XG5mdW5jdGlvbiBkZXN0cm95KCkge1xuICAgIGNvbnN0IGluZGV4ID0gZGVidWdnZXJzLmluZGV4T2YodGhpcyk7XG4gICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgZGVidWdnZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBleHRlbmQobmFtZXNwYWNlKSB7XG4gICAgY29uc3QgbmV3RGVidWdnZXIgPSBjcmVhdGVEZWJ1Z2dlcihgJHt0aGlzLm5hbWVzcGFjZX06JHtuYW1lc3BhY2V9YCk7XG4gICAgbmV3RGVidWdnZXIubG9nID0gdGhpcy5sb2c7XG4gICAgcmV0dXJuIG5ld0RlYnVnZ2VyO1xufVxuZXhwb3J0cy5kZWZhdWx0ID0gZGVidWdPYmo7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZWJ1Zy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkF6dXJlTG9nZ2VyID0gdm9pZCAwO1xuZXhwb3J0cy5zZXRMb2dMZXZlbCA9IHNldExvZ0xldmVsO1xuZXhwb3J0cy5nZXRMb2dMZXZlbCA9IGdldExvZ0xldmVsO1xuZXhwb3J0cy5jcmVhdGVDbGllbnRMb2dnZXIgPSBjcmVhdGVDbGllbnRMb2dnZXI7XG5jb25zdCB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xuY29uc3QgZGVidWdfanNfMSA9IHRzbGliXzEuX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL2RlYnVnLmpzXCIpKTtcbmNvbnN0IHJlZ2lzdGVyZWRMb2dnZXJzID0gbmV3IFNldCgpO1xuY29uc3QgbG9nTGV2ZWxGcm9tRW52ID0gKHR5cGVvZiBwcm9jZXNzICE9PSBcInVuZGVmaW5lZFwiICYmIHByb2Nlc3MuZW52ICYmIHByb2Nlc3MuZW52LkFaVVJFX0xPR19MRVZFTCkgfHwgdW5kZWZpbmVkO1xubGV0IGF6dXJlTG9nTGV2ZWw7XG4vKipcbiAqIFRoZSBBenVyZUxvZ2dlciBwcm92aWRlcyBhIG1lY2hhbmlzbSBmb3Igb3ZlcnJpZGluZyB3aGVyZSBsb2dzIGFyZSBvdXRwdXQgdG8uXG4gKiBCeSBkZWZhdWx0LCBsb2dzIGFyZSBzZW50IHRvIHN0ZGVyci5cbiAqIE92ZXJyaWRlIHRoZSBgbG9nYCBtZXRob2QgdG8gcmVkaXJlY3QgbG9ncyB0byBhbm90aGVyIGxvY2F0aW9uLlxuICovXG5leHBvcnRzLkF6dXJlTG9nZ2VyID0gKDAsIGRlYnVnX2pzXzEuZGVmYXVsdCkoXCJhenVyZVwiKTtcbmV4cG9ydHMuQXp1cmVMb2dnZXIubG9nID0gKC4uLmFyZ3MpID0+IHtcbiAgICBkZWJ1Z19qc18xLmRlZmF1bHQubG9nKC4uLmFyZ3MpO1xufTtcbmNvbnN0IEFaVVJFX0xPR19MRVZFTFMgPSBbXCJ2ZXJib3NlXCIsIFwiaW5mb1wiLCBcIndhcm5pbmdcIiwgXCJlcnJvclwiXTtcbmlmIChsb2dMZXZlbEZyb21FbnYpIHtcbiAgICAvLyBhdm9pZCBjYWxsaW5nIHNldExvZ0xldmVsIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCBhIG1pcy1zZXQgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gY3Jhc2hcbiAgICBpZiAoaXNBenVyZUxvZ0xldmVsKGxvZ0xldmVsRnJvbUVudikpIHtcbiAgICAgICAgc2V0TG9nTGV2ZWwobG9nTGV2ZWxGcm9tRW52KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYEFaVVJFX0xPR19MRVZFTCBzZXQgdG8gdW5rbm93biBsb2cgbGV2ZWwgJyR7bG9nTGV2ZWxGcm9tRW52fSc7IGxvZ2dpbmcgaXMgbm90IGVuYWJsZWQuIEFjY2VwdGFibGUgdmFsdWVzOiAke0FaVVJFX0xPR19MRVZFTFMuam9pbihcIiwgXCIpfS5gKTtcbiAgICB9XG59XG4vKipcbiAqIEltbWVkaWF0ZWx5IGVuYWJsZXMgbG9nZ2luZyBhdCB0aGUgc3BlY2lmaWVkIGxvZyBsZXZlbC4gSWYgbm8gbGV2ZWwgaXMgc3BlY2lmaWVkLCBsb2dnaW5nIGlzIGRpc2FibGVkLlxuICogQHBhcmFtIGxldmVsIC0gVGhlIGxvZyBsZXZlbCB0byBlbmFibGUgZm9yIGxvZ2dpbmcuXG4gKiBPcHRpb25zIGZyb20gbW9zdCB2ZXJib3NlIHRvIGxlYXN0IHZlcmJvc2UgYXJlOlxuICogLSB2ZXJib3NlXG4gKiAtIGluZm9cbiAqIC0gd2FybmluZ1xuICogLSBlcnJvclxuICovXG5mdW5jdGlvbiBzZXRMb2dMZXZlbChsZXZlbCkge1xuICAgIGlmIChsZXZlbCAmJiAhaXNBenVyZUxvZ0xldmVsKGxldmVsKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gbG9nIGxldmVsICcke2xldmVsfScuIEFjY2VwdGFibGUgdmFsdWVzOiAke0FaVVJFX0xPR19MRVZFTFMuam9pbihcIixcIil9YCk7XG4gICAgfVxuICAgIGF6dXJlTG9nTGV2ZWwgPSBsZXZlbDtcbiAgICBjb25zdCBlbmFibGVkTmFtZXNwYWNlcyA9IFtdO1xuICAgIGZvciAoY29uc3QgbG9nZ2VyIG9mIHJlZ2lzdGVyZWRMb2dnZXJzKSB7XG4gICAgICAgIGlmIChzaG91bGRFbmFibGUobG9nZ2VyKSkge1xuICAgICAgICAgICAgZW5hYmxlZE5hbWVzcGFjZXMucHVzaChsb2dnZXIubmFtZXNwYWNlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBkZWJ1Z19qc18xLmRlZmF1bHQuZW5hYmxlKGVuYWJsZWROYW1lc3BhY2VzLmpvaW4oXCIsXCIpKTtcbn1cbi8qKlxuICogUmV0cmlldmVzIHRoZSBjdXJyZW50bHkgc3BlY2lmaWVkIGxvZyBsZXZlbC5cbiAqL1xuZnVuY3Rpb24gZ2V0TG9nTGV2ZWwoKSB7XG4gICAgcmV0dXJuIGF6dXJlTG9nTGV2ZWw7XG59XG5jb25zdCBsZXZlbE1hcCA9IHtcbiAgICB2ZXJib3NlOiA0MDAsXG4gICAgaW5mbzogMzAwLFxuICAgIHdhcm5pbmc6IDIwMCxcbiAgICBlcnJvcjogMTAwLFxufTtcbi8qKlxuICogQ3JlYXRlcyBhIGxvZ2dlciBmb3IgdXNlIGJ5IHRoZSBBenVyZSBTREtzIHRoYXQgaW5oZXJpdHMgZnJvbSBgQXp1cmVMb2dnZXJgLlxuICogQHBhcmFtIG5hbWVzcGFjZSAtIFRoZSBuYW1lIG9mIHRoZSBTREsgcGFja2FnZS5cbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQ2xpZW50TG9nZ2VyKG5hbWVzcGFjZSkge1xuICAgIGNvbnN0IGNsaWVudFJvb3RMb2dnZXIgPSBleHBvcnRzLkF6dXJlTG9nZ2VyLmV4dGVuZChuYW1lc3BhY2UpO1xuICAgIHBhdGNoTG9nTWV0aG9kKGV4cG9ydHMuQXp1cmVMb2dnZXIsIGNsaWVudFJvb3RMb2dnZXIpO1xuICAgIHJldHVybiB7XG4gICAgICAgIGVycm9yOiBjcmVhdGVMb2dnZXIoY2xpZW50Um9vdExvZ2dlciwgXCJlcnJvclwiKSxcbiAgICAgICAgd2FybmluZzogY3JlYXRlTG9nZ2VyKGNsaWVudFJvb3RMb2dnZXIsIFwid2FybmluZ1wiKSxcbiAgICAgICAgaW5mbzogY3JlYXRlTG9nZ2VyKGNsaWVudFJvb3RMb2dnZXIsIFwiaW5mb1wiKSxcbiAgICAgICAgdmVyYm9zZTogY3JlYXRlTG9nZ2VyKGNsaWVudFJvb3RMb2dnZXIsIFwidmVyYm9zZVwiKSxcbiAgICB9O1xufVxuZnVuY3Rpb24gcGF0Y2hMb2dNZXRob2QocGFyZW50LCBjaGlsZCkge1xuICAgIGNoaWxkLmxvZyA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIHBhcmVudC5sb2coLi4uYXJncyk7XG4gICAgfTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUxvZ2dlcihwYXJlbnQsIGxldmVsKSB7XG4gICAgY29uc3QgbG9nZ2VyID0gT2JqZWN0LmFzc2lnbihwYXJlbnQuZXh0ZW5kKGxldmVsKSwge1xuICAgICAgICBsZXZlbCxcbiAgICB9KTtcbiAgICBwYXRjaExvZ01ldGhvZChwYXJlbnQsIGxvZ2dlcik7XG4gICAgaWYgKHNob3VsZEVuYWJsZShsb2dnZXIpKSB7XG4gICAgICAgIGNvbnN0IGVuYWJsZWROYW1lc3BhY2VzID0gZGVidWdfanNfMS5kZWZhdWx0LmRpc2FibGUoKTtcbiAgICAgICAgZGVidWdfanNfMS5kZWZhdWx0LmVuYWJsZShlbmFibGVkTmFtZXNwYWNlcyArIFwiLFwiICsgbG9nZ2VyLm5hbWVzcGFjZSk7XG4gICAgfVxuICAgIHJlZ2lzdGVyZWRMb2dnZXJzLmFkZChsb2dnZXIpO1xuICAgIHJldHVybiBsb2dnZXI7XG59XG5mdW5jdGlvbiBzaG91bGRFbmFibGUobG9nZ2VyKSB7XG4gICAgcmV0dXJuIEJvb2xlYW4oYXp1cmVMb2dMZXZlbCAmJiBsZXZlbE1hcFtsb2dnZXIubGV2ZWxdIDw9IGxldmVsTWFwW2F6dXJlTG9nTGV2ZWxdKTtcbn1cbmZ1bmN0aW9uIGlzQXp1cmVMb2dMZXZlbChsb2dMZXZlbCkge1xuICAgIHJldHVybiBBWlVSRV9MT0dfTEVWRUxTLmluY2x1ZGVzKGxvZ0xldmVsKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubG9nZ2VyID0gdm9pZCAwO1xuY29uc3QgbG9nZ2VyXzEgPSByZXF1aXJlKFwiQGF6dXJlL2xvZ2dlclwiKTtcbmV4cG9ydHMubG9nZ2VyID0gKDAsIGxvZ2dlcl8xLmNyZWF0ZUNsaWVudExvZ2dlcikoXCJjb3JlLXJlc3QtcGlwZWxpbmVcIik7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1sb2cuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5BYm9ydEVycm9yID0gdm9pZCAwO1xuLyoqXG4gKiBUaGlzIGVycm9yIGlzIHRocm93biB3aGVuIGFuIGFzeW5jaHJvbm91cyBvcGVyYXRpb24gaGFzIGJlZW4gYWJvcnRlZC5cbiAqIENoZWNrIGZvciB0aGlzIGVycm9yIGJ5IHRlc3RpbmcgdGhlIGBuYW1lYCB0aGF0IHRoZSBuYW1lIHByb3BlcnR5IG9mIHRoZVxuICogZXJyb3IgbWF0Y2hlcyBgXCJBYm9ydEVycm9yXCJgLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAqIGNvbnRyb2xsZXIuYWJvcnQoKTtcbiAqIHRyeSB7XG4gKiAgIGRvQXN5bmNXb3JrKGNvbnRyb2xsZXIuc2lnbmFsKVxuICogfSBjYXRjaCAoZSkge1xuICogICBpZiAoZS5uYW1lID09PSAnQWJvcnRFcnJvcicpIHtcbiAqICAgICAvLyBoYW5kbGUgYWJvcnQgZXJyb3IgaGVyZS5cbiAqICAgfVxuICogfVxuICogYGBgXG4gKi9cbmNsYXNzIEFib3J0RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZSkge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJBYm9ydEVycm9yXCI7XG4gICAgfVxufVxuZXhwb3J0cy5BYm9ydEVycm9yID0gQWJvcnRFcnJvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFib3J0RXJyb3IuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5BYm9ydEVycm9yID0gdm9pZCAwO1xudmFyIEFib3J0RXJyb3JfanNfMSA9IHJlcXVpcmUoXCIuL0Fib3J0RXJyb3IuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJBYm9ydEVycm9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBBYm9ydEVycm9yX2pzXzEuQWJvcnRFcnJvcjsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlQWJvcnRhYmxlUHJvbWlzZSA9IGNyZWF0ZUFib3J0YWJsZVByb21pc2U7XG5jb25zdCBhYm9ydF9jb250cm9sbGVyXzEgPSByZXF1aXJlKFwiQGF6dXJlL2Fib3J0LWNvbnRyb2xsZXJcIik7XG4vKipcbiAqIENyZWF0ZXMgYW4gYWJvcnRhYmxlIHByb21pc2UuXG4gKiBAcGFyYW0gYnVpbGRQcm9taXNlIC0gQSBmdW5jdGlvbiB0aGF0IHRha2VzIHRoZSByZXNvbHZlIGFuZCByZWplY3QgZnVuY3Rpb25zIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciB0aGUgYWJvcnRhYmxlIHByb21pc2UuXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCBjYW4gYmUgYWJvcnRlZC5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQWJvcnRhYmxlUHJvbWlzZShidWlsZFByb21pc2UsIG9wdGlvbnMpIHtcbiAgICBjb25zdCB7IGNsZWFudXBCZWZvcmVBYm9ydCwgYWJvcnRTaWduYWwsIGFib3J0RXJyb3JNc2cgfSA9IG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwID8gb3B0aW9ucyA6IHt9O1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdE9uQWJvcnQoKSB7XG4gICAgICAgICAgICByZWplY3QobmV3IGFib3J0X2NvbnRyb2xsZXJfMS5BYm9ydEVycm9yKGFib3J0RXJyb3JNc2cgIT09IG51bGwgJiYgYWJvcnRFcnJvck1zZyAhPT0gdm9pZCAwID8gYWJvcnRFcnJvck1zZyA6IFwiVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC5cIikpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVycygpIHtcbiAgICAgICAgICAgIGFib3J0U2lnbmFsID09PSBudWxsIHx8IGFib3J0U2lnbmFsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBhYm9ydFNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgb25BYm9ydCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gb25BYm9ydCgpIHtcbiAgICAgICAgICAgIGNsZWFudXBCZWZvcmVBYm9ydCA9PT0gbnVsbCB8fCBjbGVhbnVwQmVmb3JlQWJvcnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNsZWFudXBCZWZvcmVBYm9ydCgpO1xuICAgICAgICAgICAgcmVtb3ZlTGlzdGVuZXJzKCk7XG4gICAgICAgICAgICByZWplY3RPbkFib3J0KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFib3J0U2lnbmFsID09PSBudWxsIHx8IGFib3J0U2lnbmFsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBhYm9ydFNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0T25BYm9ydCgpO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBidWlsZFByb21pc2UoKHgpID0+IHtcbiAgICAgICAgICAgICAgICByZW1vdmVMaXN0ZW5lcnMoKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHgpO1xuICAgICAgICAgICAgfSwgKHgpID0+IHtcbiAgICAgICAgICAgICAgICByZW1vdmVMaXN0ZW5lcnMoKTtcbiAgICAgICAgICAgICAgICByZWplY3QoeCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgICBhYm9ydFNpZ25hbCA9PT0gbnVsbCB8fCBhYm9ydFNpZ25hbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogYWJvcnRTaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uQWJvcnQpO1xuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y3JlYXRlQWJvcnRhYmxlUHJvbWlzZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldFJhbmRvbUludGVnZXJJbmNsdXNpdmUgPSBnZXRSYW5kb21JbnRlZ2VySW5jbHVzaXZlO1xuLyoqXG4gKiBSZXR1cm5zIGEgcmFuZG9tIGludGVnZXIgdmFsdWUgYmV0d2VlbiBhIGxvd2VyIGFuZCB1cHBlciBib3VuZCxcbiAqIGluY2x1c2l2ZSBvZiBib3RoIGJvdW5kcy5cbiAqIE5vdGUgdGhhdCB0aGlzIHVzZXMgTWF0aC5yYW5kb20gYW5kIGlzbid0IHNlY3VyZS4gSWYgeW91IG5lZWQgdG8gdXNlXG4gKiB0aGlzIGZvciBhbnkga2luZCBvZiBzZWN1cml0eSBwdXJwb3NlLCBmaW5kIGEgYmV0dGVyIHNvdXJjZSBvZiByYW5kb20uXG4gKiBAcGFyYW0gbWluIC0gVGhlIHNtYWxsZXN0IGludGVnZXIgdmFsdWUgYWxsb3dlZC5cbiAqIEBwYXJhbSBtYXggLSBUaGUgbGFyZ2VzdCBpbnRlZ2VyIHZhbHVlIGFsbG93ZWQuXG4gKi9cbmZ1bmN0aW9uIGdldFJhbmRvbUludGVnZXJJbmNsdXNpdmUobWluLCBtYXgpIHtcbiAgICAvLyBNYWtlIHN1cmUgaW5wdXRzIGFyZSBpbnRlZ2Vycy5cbiAgICBtaW4gPSBNYXRoLmNlaWwobWluKTtcbiAgICBtYXggPSBNYXRoLmZsb29yKG1heCk7XG4gICAgLy8gUGljayBhIHJhbmRvbSBvZmZzZXQgZnJvbSB6ZXJvIHRvIHRoZSBzaXplIG9mIHRoZSByYW5nZS5cbiAgICAvLyBTaW5jZSBNYXRoLnJhbmRvbSgpIGNhbiBuZXZlciByZXR1cm4gMSwgd2UgaGF2ZSB0byBtYWtlIHRoZSByYW5nZSBvbmUgbGFyZ2VyXG4gICAgLy8gaW4gb3JkZXIgdG8gYmUgaW5jbHVzaXZlIG9mIHRoZSBtYXhpbXVtIHZhbHVlIGFmdGVyIHdlIHRha2UgdGhlIGZsb29yLlxuICAgIGNvbnN0IG9mZnNldCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4gKyAxKSk7XG4gICAgcmV0dXJuIG9mZnNldCArIG1pbjtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJhbmRvbS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlbGF5ID0gZGVsYXk7XG5leHBvcnRzLmNhbGN1bGF0ZVJldHJ5RGVsYXkgPSBjYWxjdWxhdGVSZXRyeURlbGF5O1xuY29uc3QgY3JlYXRlQWJvcnRhYmxlUHJvbWlzZV9qc18xID0gcmVxdWlyZShcIi4vY3JlYXRlQWJvcnRhYmxlUHJvbWlzZS5qc1wiKTtcbmNvbnN0IHJhbmRvbV9qc18xID0gcmVxdWlyZShcIi4vcmFuZG9tLmpzXCIpO1xuY29uc3QgU3RhbmRhcmRBYm9ydE1lc3NhZ2UgPSBcIlRoZSBkZWxheSB3YXMgYWJvcnRlZC5cIjtcbi8qKlxuICogQSB3cmFwcGVyIGZvciBzZXRUaW1lb3V0IHRoYXQgcmVzb2x2ZXMgYSBwcm9taXNlIGFmdGVyIHRpbWVJbk1zIG1pbGxpc2Vjb25kcy5cbiAqIEBwYXJhbSB0aW1lSW5NcyAtIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIGJlIGRlbGF5ZWQuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciBkZWxheSAtIGN1cnJlbnRseSBhYm9ydCBvcHRpb25zXG4gKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgYWZ0ZXIgdGltZUluTXNcbiAqL1xuZnVuY3Rpb24gZGVsYXkodGltZUluTXMsIG9wdGlvbnMpIHtcbiAgICBsZXQgdG9rZW47XG4gICAgY29uc3QgeyBhYm9ydFNpZ25hbCwgYWJvcnRFcnJvck1zZyB9ID0gb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgPyBvcHRpb25zIDoge307XG4gICAgcmV0dXJuICgwLCBjcmVhdGVBYm9ydGFibGVQcm9taXNlX2pzXzEuY3JlYXRlQWJvcnRhYmxlUHJvbWlzZSkoKHJlc29sdmUpID0+IHtcbiAgICAgICAgdG9rZW4gPSBzZXRUaW1lb3V0KHJlc29sdmUsIHRpbWVJbk1zKTtcbiAgICB9LCB7XG4gICAgICAgIGNsZWFudXBCZWZvcmVBYm9ydDogKCkgPT4gY2xlYXJUaW1lb3V0KHRva2VuKSxcbiAgICAgICAgYWJvcnRTaWduYWwsXG4gICAgICAgIGFib3J0RXJyb3JNc2c6IGFib3J0RXJyb3JNc2cgIT09IG51bGwgJiYgYWJvcnRFcnJvck1zZyAhPT0gdm9pZCAwID8gYWJvcnRFcnJvck1zZyA6IFN0YW5kYXJkQWJvcnRNZXNzYWdlLFxuICAgIH0pO1xufVxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBkZWxheSBpbnRlcnZhbCBmb3IgcmV0cnkgYXR0ZW1wdHMgdXNpbmcgZXhwb25lbnRpYWwgZGVsYXkgd2l0aCBqaXR0ZXIuXG4gKiBAcGFyYW0gcmV0cnlBdHRlbXB0IC0gVGhlIGN1cnJlbnQgcmV0cnkgYXR0ZW1wdCBudW1iZXIuXG4gKiBAcGFyYW0gY29uZmlnIC0gVGhlIGV4cG9uZW50aWFsIHJldHJ5IGNvbmZpZ3VyYXRpb24uXG4gKiBAcmV0dXJucyBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgY2FsY3VsYXRlZCByZXRyeSBkZWxheS5cbiAqL1xuZnVuY3Rpb24gY2FsY3VsYXRlUmV0cnlEZWxheShyZXRyeUF0dGVtcHQsIGNvbmZpZykge1xuICAgIC8vIEV4cG9uZW50aWFsbHkgaW5jcmVhc2UgdGhlIGRlbGF5IGVhY2ggdGltZVxuICAgIGNvbnN0IGV4cG9uZW50aWFsRGVsYXkgPSBjb25maWcucmV0cnlEZWxheUluTXMgKiBNYXRoLnBvdygyLCByZXRyeUF0dGVtcHQpO1xuICAgIC8vIERvbid0IGxldCB0aGUgZGVsYXkgZXhjZWVkIHRoZSBtYXhpbXVtXG4gICAgY29uc3QgY2xhbXBlZERlbGF5ID0gTWF0aC5taW4oY29uZmlnLm1heFJldHJ5RGVsYXlJbk1zLCBleHBvbmVudGlhbERlbGF5KTtcbiAgICAvLyBBbGxvdyB0aGUgZmluYWwgdmFsdWUgdG8gaGF2ZSBzb21lIFwiaml0dGVyXCIgKHdpdGhpbiA1MCUgb2YgdGhlIGRlbGF5IHNpemUpIHNvXG4gICAgLy8gdGhhdCByZXRyaWVzIGFjcm9zcyBtdWx0aXBsZSBjbGllbnRzIGRvbid0IG9jY3VyIHNpbXVsdGFuZW91c2x5LlxuICAgIGNvbnN0IHJldHJ5QWZ0ZXJJbk1zID0gY2xhbXBlZERlbGF5IC8gMiArICgwLCByYW5kb21fanNfMS5nZXRSYW5kb21JbnRlZ2VySW5jbHVzaXZlKSgwLCBjbGFtcGVkRGVsYXkgLyAyKTtcbiAgICByZXR1cm4geyByZXRyeUFmdGVySW5NcyB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGVsYXkuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jYW5jZWxhYmxlUHJvbWlzZVJhY2UgPSBjYW5jZWxhYmxlUHJvbWlzZVJhY2U7XG4vKipcbiAqIHByb21pc2UucmFjZSgpIHdyYXBwZXIgdGhhdCBhYm9ydHMgcmVzdCBvZiBwcm9taXNlcyBhcyBzb29uIGFzIHRoZSBmaXJzdCBwcm9taXNlIHNldHRsZXMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNhbmNlbGFibGVQcm9taXNlUmFjZShhYm9ydGFibGVQcm9taXNlQnVpbGRlcnMsIG9wdGlvbnMpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGNvbnN0IGFib3J0ZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgZnVuY3Rpb24gYWJvcnRIYW5kbGVyKCkge1xuICAgICAgICBhYm9ydGVyLmFib3J0KCk7XG4gICAgfVxuICAgIChfYSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5hYm9ydFNpZ25hbCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBhYm9ydEhhbmRsZXIpO1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBQcm9taXNlLnJhY2UoYWJvcnRhYmxlUHJvbWlzZUJ1aWxkZXJzLm1hcCgocCkgPT4gcCh7IGFib3J0U2lnbmFsOiBhYm9ydGVyLnNpZ25hbCB9KSkpO1xuICAgIH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgYWJvcnRlci5hYm9ydCgpO1xuICAgICAgICAoX2IgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuYWJvcnRTaWduYWwpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgYWJvcnRIYW5kbGVyKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hYm9ydGVyVXRpbHMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc09iamVjdCA9IGlzT2JqZWN0O1xuLyoqXG4gKiBIZWxwZXIgdG8gZGV0ZXJtaW5lIHdoZW4gYW4gaW5wdXQgaXMgYSBnZW5lcmljIEpTIG9iamVjdC5cbiAqIEByZXR1cm5zIHRydWUgd2hlbiBpbnB1dCBpcyBhbiBvYmplY3QgdHlwZSB0aGF0IGlzIG5vdCBudWxsLCBBcnJheSwgUmVnRXhwLCBvciBEYXRlLlxuICovXG5mdW5jdGlvbiBpc09iamVjdChpbnB1dCkge1xuICAgIHJldHVybiAodHlwZW9mIGlucHV0ID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgIGlucHV0ICE9PSBudWxsICYmXG4gICAgICAgICFBcnJheS5pc0FycmF5KGlucHV0KSAmJlxuICAgICAgICAhKGlucHV0IGluc3RhbmNlb2YgUmVnRXhwKSAmJlxuICAgICAgICAhKGlucHV0IGluc3RhbmNlb2YgRGF0ZSkpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9b2JqZWN0LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNFcnJvciA9IGlzRXJyb3I7XG5leHBvcnRzLmdldEVycm9yTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZTtcbmNvbnN0IG9iamVjdF9qc18xID0gcmVxdWlyZShcIi4vb2JqZWN0LmpzXCIpO1xuLyoqXG4gKiBUeXBlZ3VhcmQgZm9yIGFuIGVycm9yIG9iamVjdCBzaGFwZSAoaGFzIG5hbWUgYW5kIG1lc3NhZ2UpXG4gKiBAcGFyYW0gZSAtIFNvbWV0aGluZyBjYXVnaHQgYnkgYSBjYXRjaCBjbGF1c2UuXG4gKi9cbmZ1bmN0aW9uIGlzRXJyb3IoZSkge1xuICAgIGlmICgoMCwgb2JqZWN0X2pzXzEuaXNPYmplY3QpKGUpKSB7XG4gICAgICAgIGNvbnN0IGhhc05hbWUgPSB0eXBlb2YgZS5uYW1lID09PSBcInN0cmluZ1wiO1xuICAgICAgICBjb25zdCBoYXNNZXNzYWdlID0gdHlwZW9mIGUubWVzc2FnZSA9PT0gXCJzdHJpbmdcIjtcbiAgICAgICAgcmV0dXJuIGhhc05hbWUgJiYgaGFzTWVzc2FnZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuLyoqXG4gKiBHaXZlbiB3aGF0IGlzIHRob3VnaHQgdG8gYmUgYW4gZXJyb3Igb2JqZWN0LCByZXR1cm4gdGhlIG1lc3NhZ2UgaWYgcG9zc2libGUuXG4gKiBJZiB0aGUgbWVzc2FnZSBpcyBtaXNzaW5nLCByZXR1cm5zIGEgc3RyaW5naWZpZWQgdmVyc2lvbiBvZiB0aGUgaW5wdXQuXG4gKiBAcGFyYW0gZSAtIFNvbWV0aGluZyB0aHJvd24gZnJvbSBhIHRyeSBibG9ja1xuICogQHJldHVybnMgVGhlIGVycm9yIG1lc3NhZ2Ugb3IgYSBzdHJpbmcgb2YgdGhlIGlucHV0XG4gKi9cbmZ1bmN0aW9uIGdldEVycm9yTWVzc2FnZShlKSB7XG4gICAgaWYgKGlzRXJyb3IoZSkpIHtcbiAgICAgICAgcmV0dXJuIGUubWVzc2FnZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGxldCBzdHJpbmdpZmllZDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZSA9PT0gXCJvYmplY3RcIiAmJiBlKSB7XG4gICAgICAgICAgICAgICAgc3RyaW5naWZpZWQgPSBKU09OLnN0cmluZ2lmeShlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0cmluZ2lmaWVkID0gU3RyaW5nKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHN0cmluZ2lmaWVkID0gXCJbdW5hYmxlIHRvIHN0cmluZ2lmeSBpbnB1dF1cIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYFVua25vd24gZXJyb3IgJHtzdHJpbmdpZmllZH1gO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVycm9yLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY29tcHV0ZVNoYTI1NkhtYWMgPSBjb21wdXRlU2hhMjU2SG1hYztcbmV4cG9ydHMuY29tcHV0ZVNoYTI1Nkhhc2ggPSBjb21wdXRlU2hhMjU2SGFzaDtcbmNvbnN0IGNyeXB0b18xID0gcmVxdWlyZShcImNyeXB0b1wiKTtcbi8qKlxuICogR2VuZXJhdGVzIGEgU0hBLTI1NiBITUFDIHNpZ25hdHVyZS5cbiAqIEBwYXJhbSBrZXkgLSBUaGUgSE1BQyBrZXkgcmVwcmVzZW50ZWQgYXMgYSBiYXNlNjQgc3RyaW5nLCB1c2VkIHRvIGdlbmVyYXRlIHRoZSBjcnlwdG9ncmFwaGljIEhNQUMgaGFzaC5cbiAqIEBwYXJhbSBzdHJpbmdUb1NpZ24gLSBUaGUgZGF0YSB0byBiZSBzaWduZWQuXG4gKiBAcGFyYW0gZW5jb2RpbmcgLSBUaGUgdGV4dHVhbCBlbmNvZGluZyB0byB1c2UgZm9yIHRoZSByZXR1cm5lZCBITUFDIGRpZ2VzdC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gY29tcHV0ZVNoYTI1NkhtYWMoa2V5LCBzdHJpbmdUb1NpZ24sIGVuY29kaW5nKSB7XG4gICAgY29uc3QgZGVjb2RlZEtleSA9IEJ1ZmZlci5mcm9tKGtleSwgXCJiYXNlNjRcIik7XG4gICAgcmV0dXJuICgwLCBjcnlwdG9fMS5jcmVhdGVIbWFjKShcInNoYTI1NlwiLCBkZWNvZGVkS2V5KS51cGRhdGUoc3RyaW5nVG9TaWduKS5kaWdlc3QoZW5jb2RpbmcpO1xufVxuLyoqXG4gKiBHZW5lcmF0ZXMgYSBTSEEtMjU2IGhhc2guXG4gKiBAcGFyYW0gY29udGVudCAtIFRoZSBkYXRhIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBoYXNoLlxuICogQHBhcmFtIGVuY29kaW5nIC0gVGhlIHRleHR1YWwgZW5jb2RpbmcgdG8gdXNlIGZvciB0aGUgcmV0dXJuZWQgaGFzaC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gY29tcHV0ZVNoYTI1Nkhhc2goY29udGVudCwgZW5jb2RpbmcpIHtcbiAgICByZXR1cm4gKDAsIGNyeXB0b18xLmNyZWF0ZUhhc2gpKFwic2hhMjU2XCIpLnVwZGF0ZShjb250ZW50KS5kaWdlc3QoZW5jb2RpbmcpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2hhMjU2LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNEZWZpbmVkID0gaXNEZWZpbmVkO1xuZXhwb3J0cy5pc09iamVjdFdpdGhQcm9wZXJ0aWVzID0gaXNPYmplY3RXaXRoUHJvcGVydGllcztcbmV4cG9ydHMub2JqZWN0SGFzUHJvcGVydHkgPSBvYmplY3RIYXNQcm9wZXJ0eTtcbi8qKlxuICogSGVscGVyIFR5cGVHdWFyZCB0aGF0IGNoZWNrcyBpZiBzb21ldGhpbmcgaXMgZGVmaW5lZCBvciBub3QuXG4gKiBAcGFyYW0gdGhpbmcgLSBBbnl0aGluZ1xuICovXG5mdW5jdGlvbiBpc0RlZmluZWQodGhpbmcpIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaW5nICE9PSBcInVuZGVmaW5lZFwiICYmIHRoaW5nICE9PSBudWxsO1xufVxuLyoqXG4gKiBIZWxwZXIgVHlwZUd1YXJkIHRoYXQgY2hlY2tzIGlmIHRoZSBpbnB1dCBpcyBhbiBvYmplY3Qgd2l0aCB0aGUgc3BlY2lmaWVkIHByb3BlcnRpZXMuXG4gKiBAcGFyYW0gdGhpbmcgLSBBbnl0aGluZy5cbiAqIEBwYXJhbSBwcm9wZXJ0aWVzIC0gVGhlIG5hbWUgb2YgdGhlIHByb3BlcnRpZXMgdGhhdCBzaG91bGQgYXBwZWFyIGluIHRoZSBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0V2l0aFByb3BlcnRpZXModGhpbmcsIHByb3BlcnRpZXMpIHtcbiAgICBpZiAoIWlzRGVmaW5lZCh0aGluZykgfHwgdHlwZW9mIHRoaW5nICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBwcm9wZXJ0aWVzKSB7XG4gICAgICAgIGlmICghb2JqZWN0SGFzUHJvcGVydHkodGhpbmcsIHByb3BlcnR5KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuLyoqXG4gKiBIZWxwZXIgVHlwZUd1YXJkIHRoYXQgY2hlY2tzIGlmIHRoZSBpbnB1dCBpcyBhbiBvYmplY3Qgd2l0aCB0aGUgc3BlY2lmaWVkIHByb3BlcnR5LlxuICogQHBhcmFtIHRoaW5nIC0gQW55IG9iamVjdC5cbiAqIEBwYXJhbSBwcm9wZXJ0eSAtIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IHNob3VsZCBhcHBlYXIgaW4gdGhlIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gb2JqZWN0SGFzUHJvcGVydHkodGhpbmcsIHByb3BlcnR5KSB7XG4gICAgcmV0dXJuIChpc0RlZmluZWQodGhpbmcpICYmIHR5cGVvZiB0aGluZyA9PT0gXCJvYmplY3RcIiAmJiBwcm9wZXJ0eSBpbiB0aGluZyk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD10eXBlR3VhcmRzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbnZhciBfYTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmFuZG9tVVVJRCA9IHJhbmRvbVVVSUQ7XG5jb25zdCBjcnlwdG9fMSA9IHJlcXVpcmUoXCJjcnlwdG9cIik7XG4vLyBOT1RFOiBUaGlzIGlzIGEgd29ya2Fyb3VuZCB1bnRpbCB3ZSBjYW4gdXNlIGBnbG9iYWxUaGlzLmNyeXB0by5yYW5kb21VVUlEYCBpbiBOb2RlLmpzIDE5Ky5cbmNvbnN0IHV1aWRGdW5jdGlvbiA9IHR5cGVvZiAoKF9hID0gZ2xvYmFsVGhpcyA9PT0gbnVsbCB8fCBnbG9iYWxUaGlzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBnbG9iYWxUaGlzLmNyeXB0bykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnJhbmRvbVVVSUQpID09PSBcImZ1bmN0aW9uXCJcbiAgICA/IGdsb2JhbFRoaXMuY3J5cHRvLnJhbmRvbVVVSUQuYmluZChnbG9iYWxUaGlzLmNyeXB0bylcbiAgICA6IGNyeXB0b18xLnJhbmRvbVVVSUQ7XG4vKipcbiAqIEdlbmVyYXRlZCBVbml2ZXJzYWxseSBVbmlxdWUgSWRlbnRpZmllclxuICpcbiAqIEByZXR1cm5zIFJGQzQxMjIgdjQgVVVJRC5cbiAqL1xuZnVuY3Rpb24gcmFuZG9tVVVJRCgpIHtcbiAgICByZXR1cm4gdXVpZEZ1bmN0aW9uKCk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD11dWlkVXRpbHMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxudmFyIF9hLCBfYiwgX2MsIF9kO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc1JlYWN0TmF0aXZlID0gZXhwb3J0cy5pc05vZGVSdW50aW1lID0gZXhwb3J0cy5pc05vZGUgPSBleHBvcnRzLmlzTm9kZUxpa2UgPSBleHBvcnRzLmlzQnVuID0gZXhwb3J0cy5pc0Rlbm8gPSBleHBvcnRzLmlzV2ViV29ya2VyID0gZXhwb3J0cy5pc0Jyb3dzZXIgPSB2b2lkIDA7XG4vKipcbiAqIEEgY29uc3RhbnQgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgZW52aXJvbm1lbnQgdGhlIGNvZGUgaXMgcnVubmluZyBpcyBhIFdlYiBCcm93c2VyLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGF6dXJlL2F6dXJlLXNkay90cy1uby13aW5kb3dcbmV4cG9ydHMuaXNCcm93c2VyID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiO1xuLyoqXG4gKiBBIGNvbnN0YW50IHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGVudmlyb25tZW50IHRoZSBjb2RlIGlzIHJ1bm5pbmcgaXMgYSBXZWIgV29ya2VyLlxuICovXG5leHBvcnRzLmlzV2ViV29ya2VyID0gdHlwZW9mIHNlbGYgPT09IFwib2JqZWN0XCIgJiZcbiAgICB0eXBlb2YgKHNlbGYgPT09IG51bGwgfHwgc2VsZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsZi5pbXBvcnRTY3JpcHRzKSA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgKCgoX2EgPSBzZWxmLmNvbnN0cnVjdG9yKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubmFtZSkgPT09IFwiRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGVcIiB8fFxuICAgICAgICAoKF9iID0gc2VsZi5jb25zdHJ1Y3RvcikgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLm5hbWUpID09PSBcIlNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZVwiIHx8XG4gICAgICAgICgoX2MgPSBzZWxmLmNvbnN0cnVjdG9yKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MubmFtZSkgPT09IFwiU2hhcmVkV29ya2VyR2xvYmFsU2NvcGVcIik7XG4vKipcbiAqIEEgY29uc3RhbnQgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgZW52aXJvbm1lbnQgdGhlIGNvZGUgaXMgcnVubmluZyBpcyBEZW5vLlxuICovXG5leHBvcnRzLmlzRGVubyA9IHR5cGVvZiBEZW5vICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgdHlwZW9mIERlbm8udmVyc2lvbiAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgIHR5cGVvZiBEZW5vLnZlcnNpb24uZGVubyAhPT0gXCJ1bmRlZmluZWRcIjtcbi8qKlxuICogQSBjb25zdGFudCB0aGF0IGluZGljYXRlcyB3aGV0aGVyIHRoZSBlbnZpcm9ubWVudCB0aGUgY29kZSBpcyBydW5uaW5nIGlzIEJ1bi5zaC5cbiAqL1xuZXhwb3J0cy5pc0J1biA9IHR5cGVvZiBCdW4gIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIEJ1bi52ZXJzaW9uICE9PSBcInVuZGVmaW5lZFwiO1xuLyoqXG4gKiBBIGNvbnN0YW50IHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGVudmlyb25tZW50IHRoZSBjb2RlIGlzIHJ1bm5pbmcgaXMgYSBOb2RlLmpzIGNvbXBhdGlibGUgZW52aXJvbm1lbnQuXG4gKi9cbmV4cG9ydHMuaXNOb2RlTGlrZSA9IHR5cGVvZiBnbG9iYWxUaGlzLnByb2Nlc3MgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICBCb29sZWFuKGdsb2JhbFRoaXMucHJvY2Vzcy52ZXJzaW9uKSAmJlxuICAgIEJvb2xlYW4oKF9kID0gZ2xvYmFsVGhpcy5wcm9jZXNzLnZlcnNpb25zKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Qubm9kZSk7XG4vKipcbiAqIEEgY29uc3RhbnQgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgZW52aXJvbm1lbnQgdGhlIGNvZGUgaXMgcnVubmluZyBpcyBhIE5vZGUuanMgY29tcGF0aWJsZSBlbnZpcm9ubWVudC5cbiAqIEBkZXByZWNhdGVkIFVzZSBgaXNOb2RlTGlrZWAgaW5zdGVhZC5cbiAqL1xuZXhwb3J0cy5pc05vZGUgPSBleHBvcnRzLmlzTm9kZUxpa2U7XG4vKipcbiAqIEEgY29uc3RhbnQgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgZW52aXJvbm1lbnQgdGhlIGNvZGUgaXMgcnVubmluZyBpcyBOb2RlLkpTLlxuICovXG5leHBvcnRzLmlzTm9kZVJ1bnRpbWUgPSBleHBvcnRzLmlzTm9kZUxpa2UgJiYgIWV4cG9ydHMuaXNCdW4gJiYgIWV4cG9ydHMuaXNEZW5vO1xuLyoqXG4gKiBBIGNvbnN0YW50IHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGVudmlyb25tZW50IHRoZSBjb2RlIGlzIHJ1bm5pbmcgaXMgaW4gUmVhY3QtTmF0aXZlLlxuICovXG4vLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QtbmF0aXZlL2Jsb2IvbWFpbi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0NvcmUvc2V0VXBOYXZpZ2F0b3IuanNcbmV4cG9ydHMuaXNSZWFjdE5hdGl2ZSA9IHR5cGVvZiBuYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCIgJiYgKG5hdmlnYXRvciA9PT0gbnVsbCB8fCBuYXZpZ2F0b3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG5hdmlnYXRvci5wcm9kdWN0KSA9PT0gXCJSZWFjdE5hdGl2ZVwiO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y2hlY2tFbnZpcm9ubWVudC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnVpbnQ4QXJyYXlUb1N0cmluZyA9IHVpbnQ4QXJyYXlUb1N0cmluZztcbmV4cG9ydHMuc3RyaW5nVG9VaW50OEFycmF5ID0gc3RyaW5nVG9VaW50OEFycmF5O1xuLyoqXG4gKiBUaGUgaGVscGVyIHRoYXQgdHJhbnNmb3JtcyBieXRlcyB3aXRoIHNwZWNpZmljIGNoYXJhY3RlciBlbmNvZGluZyBpbnRvIHN0cmluZ1xuICogQHBhcmFtIGJ5dGVzIC0gdGhlIHVpbnQ4YXJyYXkgYnl0ZXNcbiAqIEBwYXJhbSBmb3JtYXQgLSB0aGUgZm9ybWF0IHdlIHVzZSB0byBlbmNvZGUgdGhlIGJ5dGVcbiAqIEByZXR1cm5zIGEgc3RyaW5nIG9mIHRoZSBlbmNvZGVkIHN0cmluZ1xuICovXG5mdW5jdGlvbiB1aW50OEFycmF5VG9TdHJpbmcoYnl0ZXMsIGZvcm1hdCkge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShieXRlcykudG9TdHJpbmcoZm9ybWF0KTtcbn1cbi8qKlxuICogVGhlIGhlbHBlciB0aGF0IHRyYW5zZm9ybXMgc3RyaW5nIHRvIHNwZWNpZmljIGNoYXJhY3RlciBlbmNvZGVkIGJ5dGVzIGFycmF5LlxuICogQHBhcmFtIHZhbHVlIC0gdGhlIHN0cmluZyB0byBiZSBjb252ZXJ0ZWRcbiAqIEBwYXJhbSBmb3JtYXQgLSB0aGUgZm9ybWF0IHdlIHVzZSB0byBkZWNvZGUgdGhlIHZhbHVlXG4gKiBAcmV0dXJucyBhIHVpbnQ4YXJyYXlcbiAqL1xuZnVuY3Rpb24gc3RyaW5nVG9VaW50OEFycmF5KHZhbHVlLCBmb3JtYXQpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20odmFsdWUsIGZvcm1hdCk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ieXRlc0VuY29kaW5nLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc3RyaW5nVG9VaW50OEFycmF5ID0gZXhwb3J0cy51aW50OEFycmF5VG9TdHJpbmcgPSBleHBvcnRzLmlzV2ViV29ya2VyID0gZXhwb3J0cy5pc1JlYWN0TmF0aXZlID0gZXhwb3J0cy5pc0Rlbm8gPSBleHBvcnRzLmlzTm9kZVJ1bnRpbWUgPSBleHBvcnRzLmlzTm9kZUxpa2UgPSBleHBvcnRzLmlzTm9kZSA9IGV4cG9ydHMuaXNCdW4gPSBleHBvcnRzLmlzQnJvd3NlciA9IGV4cG9ydHMucmFuZG9tVVVJRCA9IGV4cG9ydHMub2JqZWN0SGFzUHJvcGVydHkgPSBleHBvcnRzLmlzT2JqZWN0V2l0aFByb3BlcnRpZXMgPSBleHBvcnRzLmlzRGVmaW5lZCA9IGV4cG9ydHMuY29tcHV0ZVNoYTI1NkhtYWMgPSBleHBvcnRzLmNvbXB1dGVTaGEyNTZIYXNoID0gZXhwb3J0cy5nZXRFcnJvck1lc3NhZ2UgPSBleHBvcnRzLmlzRXJyb3IgPSBleHBvcnRzLmlzT2JqZWN0ID0gZXhwb3J0cy5nZXRSYW5kb21JbnRlZ2VySW5jbHVzaXZlID0gZXhwb3J0cy5jcmVhdGVBYm9ydGFibGVQcm9taXNlID0gZXhwb3J0cy5jYW5jZWxhYmxlUHJvbWlzZVJhY2UgPSBleHBvcnRzLmNhbGN1bGF0ZVJldHJ5RGVsYXkgPSBleHBvcnRzLmRlbGF5ID0gdm9pZCAwO1xudmFyIGRlbGF5X2pzXzEgPSByZXF1aXJlKFwiLi9kZWxheS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlbGF5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkZWxheV9qc18xLmRlbGF5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY2FsY3VsYXRlUmV0cnlEZWxheVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZGVsYXlfanNfMS5jYWxjdWxhdGVSZXRyeURlbGF5OyB9IH0pO1xudmFyIGFib3J0ZXJVdGlsc19qc18xID0gcmVxdWlyZShcIi4vYWJvcnRlclV0aWxzLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY2FuY2VsYWJsZVByb21pc2VSYWNlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBhYm9ydGVyVXRpbHNfanNfMS5jYW5jZWxhYmxlUHJvbWlzZVJhY2U7IH0gfSk7XG52YXIgY3JlYXRlQWJvcnRhYmxlUHJvbWlzZV9qc18xID0gcmVxdWlyZShcIi4vY3JlYXRlQWJvcnRhYmxlUHJvbWlzZS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUFib3J0YWJsZVByb21pc2VcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNyZWF0ZUFib3J0YWJsZVByb21pc2VfanNfMS5jcmVhdGVBYm9ydGFibGVQcm9taXNlOyB9IH0pO1xudmFyIHJhbmRvbV9qc18xID0gcmVxdWlyZShcIi4vcmFuZG9tLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZ2V0UmFuZG9tSW50ZWdlckluY2x1c2l2ZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmFuZG9tX2pzXzEuZ2V0UmFuZG9tSW50ZWdlckluY2x1c2l2ZTsgfSB9KTtcbnZhciBvYmplY3RfanNfMSA9IHJlcXVpcmUoXCIuL29iamVjdC5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzT2JqZWN0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBvYmplY3RfanNfMS5pc09iamVjdDsgfSB9KTtcbnZhciBlcnJvcl9qc18xID0gcmVxdWlyZShcIi4vZXJyb3IuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0Vycm9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBlcnJvcl9qc18xLmlzRXJyb3I7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnZXRFcnJvck1lc3NhZ2VcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGVycm9yX2pzXzEuZ2V0RXJyb3JNZXNzYWdlOyB9IH0pO1xudmFyIHNoYTI1Nl9qc18xID0gcmVxdWlyZShcIi4vc2hhMjU2LmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29tcHV0ZVNoYTI1Nkhhc2hcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNoYTI1Nl9qc18xLmNvbXB1dGVTaGEyNTZIYXNoOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29tcHV0ZVNoYTI1NkhtYWNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNoYTI1Nl9qc18xLmNvbXB1dGVTaGEyNTZIbWFjOyB9IH0pO1xudmFyIHR5cGVHdWFyZHNfanNfMSA9IHJlcXVpcmUoXCIuL3R5cGVHdWFyZHMuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0RlZmluZWRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHR5cGVHdWFyZHNfanNfMS5pc0RlZmluZWQ7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc09iamVjdFdpdGhQcm9wZXJ0aWVzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0eXBlR3VhcmRzX2pzXzEuaXNPYmplY3RXaXRoUHJvcGVydGllczsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm9iamVjdEhhc1Byb3BlcnR5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0eXBlR3VhcmRzX2pzXzEub2JqZWN0SGFzUHJvcGVydHk7IH0gfSk7XG52YXIgdXVpZFV0aWxzX2pzXzEgPSByZXF1aXJlKFwiLi91dWlkVXRpbHMuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyYW5kb21VVUlEXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB1dWlkVXRpbHNfanNfMS5yYW5kb21VVUlEOyB9IH0pO1xudmFyIGNoZWNrRW52aXJvbm1lbnRfanNfMSA9IHJlcXVpcmUoXCIuL2NoZWNrRW52aXJvbm1lbnQuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0Jyb3dzZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNoZWNrRW52aXJvbm1lbnRfanNfMS5pc0Jyb3dzZXI7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0J1blwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY2hlY2tFbnZpcm9ubWVudF9qc18xLmlzQnVuOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNOb2RlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjaGVja0Vudmlyb25tZW50X2pzXzEuaXNOb2RlOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNOb2RlTGlrZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY2hlY2tFbnZpcm9ubWVudF9qc18xLmlzTm9kZUxpa2U7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc05vZGVSdW50aW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjaGVja0Vudmlyb25tZW50X2pzXzEuaXNOb2RlUnVudGltZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzRGVub1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY2hlY2tFbnZpcm9ubWVudF9qc18xLmlzRGVubzsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzUmVhY3ROYXRpdmVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNoZWNrRW52aXJvbm1lbnRfanNfMS5pc1JlYWN0TmF0aXZlOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNXZWJXb3JrZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNoZWNrRW52aXJvbm1lbnRfanNfMS5pc1dlYldvcmtlcjsgfSB9KTtcbnZhciBieXRlc0VuY29kaW5nX2pzXzEgPSByZXF1aXJlKFwiLi9ieXRlc0VuY29kaW5nLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidWludDhBcnJheVRvU3RyaW5nXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBieXRlc0VuY29kaW5nX2pzXzEudWludDhBcnJheVRvU3RyaW5nOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3RyaW5nVG9VaW50OEFycmF5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBieXRlc0VuY29kaW5nX2pzXzEuc3RyaW5nVG9VaW50OEFycmF5OyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TYW5pdGl6ZXIgPSB2b2lkIDA7XG5jb25zdCBjb3JlX3V0aWxfMSA9IHJlcXVpcmUoXCJAYXp1cmUvY29yZS11dGlsXCIpO1xuY29uc3QgUmVkYWN0ZWRTdHJpbmcgPSBcIlJFREFDVEVEXCI7XG4vLyBNYWtlIHN1cmUgdGhpcyBsaXN0IGlzIHVwLXRvLWRhdGUgd2l0aCB0aGUgb25lIHVuZGVyIGNvcmUvbG9nZ2VyL1JlYWRtZSNLZXljb25jZXB0c1xuY29uc3QgZGVmYXVsdEFsbG93ZWRIZWFkZXJOYW1lcyA9IFtcbiAgICBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICBcIngtbXMtcmV0dXJuLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgXCJ4LW1zLXVzZXJhZ2VudFwiLFxuICAgIFwieC1tcy1jb3JyZWxhdGlvbi1yZXF1ZXN0LWlkXCIsXG4gICAgXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICBcImNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgXCJtcy1jdlwiLFxuICAgIFwicmV0dXJuLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgXCJ0cmFjZXBhcmVudFwiLFxuICAgIFwiQWNjZXNzLUNvbnRyb2wtQWxsb3ctQ3JlZGVudGlhbHNcIixcbiAgICBcIkFjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnNcIixcbiAgICBcIkFjY2Vzcy1Db250cm9sLUFsbG93LU1ldGhvZHNcIixcbiAgICBcIkFjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpblwiLFxuICAgIFwiQWNjZXNzLUNvbnRyb2wtRXhwb3NlLUhlYWRlcnNcIixcbiAgICBcIkFjY2Vzcy1Db250cm9sLU1heC1BZ2VcIixcbiAgICBcIkFjY2Vzcy1Db250cm9sLVJlcXVlc3QtSGVhZGVyc1wiLFxuICAgIFwiQWNjZXNzLUNvbnRyb2wtUmVxdWVzdC1NZXRob2RcIixcbiAgICBcIk9yaWdpblwiLFxuICAgIFwiQWNjZXB0XCIsXG4gICAgXCJBY2NlcHQtRW5jb2RpbmdcIixcbiAgICBcIkNhY2hlLUNvbnRyb2xcIixcbiAgICBcIkNvbm5lY3Rpb25cIixcbiAgICBcIkNvbnRlbnQtTGVuZ3RoXCIsXG4gICAgXCJDb250ZW50LVR5cGVcIixcbiAgICBcIkRhdGVcIixcbiAgICBcIkVUYWdcIixcbiAgICBcIkV4cGlyZXNcIixcbiAgICBcIklmLU1hdGNoXCIsXG4gICAgXCJJZi1Nb2RpZmllZC1TaW5jZVwiLFxuICAgIFwiSWYtTm9uZS1NYXRjaFwiLFxuICAgIFwiSWYtVW5tb2RpZmllZC1TaW5jZVwiLFxuICAgIFwiTGFzdC1Nb2RpZmllZFwiLFxuICAgIFwiUHJhZ21hXCIsXG4gICAgXCJSZXF1ZXN0LUlkXCIsXG4gICAgXCJSZXRyeS1BZnRlclwiLFxuICAgIFwiU2VydmVyXCIsXG4gICAgXCJUcmFuc2Zlci1FbmNvZGluZ1wiLFxuICAgIFwiVXNlci1BZ2VudFwiLFxuICAgIFwiV1dXLUF1dGhlbnRpY2F0ZVwiLFxuXTtcbmNvbnN0IGRlZmF1bHRBbGxvd2VkUXVlcnlQYXJhbWV0ZXJzID0gW1wiYXBpLXZlcnNpb25cIl07XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5jbGFzcyBTYW5pdGl6ZXIge1xuICAgIGNvbnN0cnVjdG9yKHsgYWRkaXRpb25hbEFsbG93ZWRIZWFkZXJOYW1lczogYWxsb3dlZEhlYWRlck5hbWVzID0gW10sIGFkZGl0aW9uYWxBbGxvd2VkUXVlcnlQYXJhbWV0ZXJzOiBhbGxvd2VkUXVlcnlQYXJhbWV0ZXJzID0gW10sIH0gPSB7fSkge1xuICAgICAgICBhbGxvd2VkSGVhZGVyTmFtZXMgPSBkZWZhdWx0QWxsb3dlZEhlYWRlck5hbWVzLmNvbmNhdChhbGxvd2VkSGVhZGVyTmFtZXMpO1xuICAgICAgICBhbGxvd2VkUXVlcnlQYXJhbWV0ZXJzID0gZGVmYXVsdEFsbG93ZWRRdWVyeVBhcmFtZXRlcnMuY29uY2F0KGFsbG93ZWRRdWVyeVBhcmFtZXRlcnMpO1xuICAgICAgICB0aGlzLmFsbG93ZWRIZWFkZXJOYW1lcyA9IG5ldyBTZXQoYWxsb3dlZEhlYWRlck5hbWVzLm1hcCgobikgPT4gbi50b0xvd2VyQ2FzZSgpKSk7XG4gICAgICAgIHRoaXMuYWxsb3dlZFF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBTZXQoYWxsb3dlZFF1ZXJ5UGFyYW1ldGVycy5tYXAoKHApID0+IHAudG9Mb3dlckNhc2UoKSkpO1xuICAgIH1cbiAgICBzYW5pdGl6ZShvYmopIHtcbiAgICAgICAgY29uc3Qgc2VlbiA9IG5ldyBTZXQoKTtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iaiwgKGtleSwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgIC8vIEVuc3VyZSBFcnJvcnMgaW5jbHVkZSB0aGVpciBpbnRlcmVzdGluZyBub24tZW51bWVyYWJsZSBtZW1iZXJzXG4gICAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHZhbHVlKSwgeyBuYW1lOiB2YWx1ZS5uYW1lLCBtZXNzYWdlOiB2YWx1ZS5tZXNzYWdlIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGtleSA9PT0gXCJoZWFkZXJzXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZUhlYWRlcnModmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoa2V5ID09PSBcInVybFwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2FuaXRpemVVcmwodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoa2V5ID09PSBcInF1ZXJ5XCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZVF1ZXJ5KHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSA9PT0gXCJib2R5XCIpIHtcbiAgICAgICAgICAgICAgICAvLyBEb24ndCBsb2cgdGhlIHJlcXVlc3QgYm9keVxuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChrZXkgPT09IFwicmVzcG9uc2VcIikge1xuICAgICAgICAgICAgICAgIC8vIERvbid0IGxvZyByZXNwb25zZSBhZ2FpblxuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChrZXkgPT09IFwib3BlcmF0aW9uU3BlY1wiKSB7XG4gICAgICAgICAgICAgICAgLy8gV2hlbiB1c2luZyBzZW5kT3BlcmF0aW9uUmVxdWVzdCwgdGhlIHJlcXVlc3QgY2FycmllcyBhIG1hc3NpdmVcbiAgICAgICAgICAgICAgICAvLyBmaWVsZCB3aXRoIHRoZSBhdXRvcmVzdCBzcGVjLiBObyBuZWVkIHRvIGxvZyBpdC5cbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgfHwgKDAsIGNvcmVfdXRpbF8xLmlzT2JqZWN0KSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2Vlbi5oYXModmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcIltDaXJjdWxhcl1cIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2Vlbi5hZGQodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9LCAyKTtcbiAgICB9XG4gICAgc2FuaXRpemVVcmwodmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJzdHJpbmdcIiB8fCB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gXCJcIikge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwodmFsdWUpO1xuICAgICAgICBpZiAoIXVybC5zZWFyY2gpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IFtrZXldIG9mIHVybC5zZWFyY2hQYXJhbXMpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5hbGxvd2VkUXVlcnlQYXJhbWV0ZXJzLmhhcyhrZXkudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgICAgICB1cmwuc2VhcmNoUGFyYW1zLnNldChrZXksIFJlZGFjdGVkU3RyaW5nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdXJsLnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIHNhbml0aXplSGVhZGVycyhvYmopIHtcbiAgICAgICAgY29uc3Qgc2FuaXRpemVkID0ge307XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG9iaikpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmFsbG93ZWRIZWFkZXJOYW1lcy5oYXMoa2V5LnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICAgICAgc2FuaXRpemVkW2tleV0gPSBvYmpba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHNhbml0aXplZFtrZXldID0gUmVkYWN0ZWRTdHJpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNhbml0aXplZDtcbiAgICB9XG4gICAgc2FuaXRpemVRdWVyeSh2YWx1ZSkge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2FuaXRpemVkID0ge307XG4gICAgICAgIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmFsbG93ZWRRdWVyeVBhcmFtZXRlcnMuaGFzKGsudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgICAgICBzYW5pdGl6ZWRba10gPSB2YWx1ZVtrXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHNhbml0aXplZFtrXSA9IFJlZGFjdGVkU3RyaW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzYW5pdGl6ZWQ7XG4gICAgfVxufVxuZXhwb3J0cy5TYW5pdGl6ZXIgPSBTYW5pdGl6ZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zYW5pdGl6ZXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5sb2dQb2xpY3lOYW1lID0gdm9pZCAwO1xuZXhwb3J0cy5sb2dQb2xpY3kgPSBsb2dQb2xpY3k7XG5jb25zdCBsb2dfanNfMSA9IHJlcXVpcmUoXCIuLi9sb2cuanNcIik7XG5jb25zdCBzYW5pdGl6ZXJfanNfMSA9IHJlcXVpcmUoXCIuLi91dGlsL3Nhbml0aXplci5qc1wiKTtcbi8qKlxuICogVGhlIHByb2dyYW1tYXRpYyBpZGVudGlmaWVyIG9mIHRoZSBsb2dQb2xpY3kuXG4gKi9cbmV4cG9ydHMubG9nUG9saWN5TmFtZSA9IFwibG9nUG9saWN5XCI7XG4vKipcbiAqIEEgcG9saWN5IHRoYXQgbG9ncyBhbGwgcmVxdWVzdHMgYW5kIHJlc3BvbnNlcy5cbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBjb25maWd1cmUgbG9nUG9saWN5LlxuICovXG5mdW5jdGlvbiBsb2dQb2xpY3kob3B0aW9ucyA9IHt9KSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IGxvZ2dlciA9IChfYSA9IG9wdGlvbnMubG9nZ2VyKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBsb2dfanNfMS5sb2dnZXIuaW5mbztcbiAgICBjb25zdCBzYW5pdGl6ZXIgPSBuZXcgc2FuaXRpemVyX2pzXzEuU2FuaXRpemVyKHtcbiAgICAgICAgYWRkaXRpb25hbEFsbG93ZWRIZWFkZXJOYW1lczogb3B0aW9ucy5hZGRpdGlvbmFsQWxsb3dlZEhlYWRlck5hbWVzLFxuICAgICAgICBhZGRpdGlvbmFsQWxsb3dlZFF1ZXJ5UGFyYW1ldGVyczogb3B0aW9ucy5hZGRpdGlvbmFsQWxsb3dlZFF1ZXJ5UGFyYW1ldGVycyxcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBleHBvcnRzLmxvZ1BvbGljeU5hbWUsXG4gICAgICAgIGFzeW5jIHNlbmRSZXF1ZXN0KHJlcXVlc3QsIG5leHQpIHtcbiAgICAgICAgICAgIGlmICghbG9nZ2VyLmVuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dChyZXF1ZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxvZ2dlcihgUmVxdWVzdDogJHtzYW5pdGl6ZXIuc2FuaXRpemUocmVxdWVzdCl9YCk7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG5leHQocmVxdWVzdCk7XG4gICAgICAgICAgICBsb2dnZXIoYFJlc3BvbnNlIHN0YXR1cyBjb2RlOiAke3Jlc3BvbnNlLnN0YXR1c31gKTtcbiAgICAgICAgICAgIGxvZ2dlcihgSGVhZGVyczogJHtzYW5pdGl6ZXIuc2FuaXRpemUocmVzcG9uc2UuaGVhZGVycyl9YCk7XG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxvZ1BvbGljeS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlZGlyZWN0UG9saWN5TmFtZSA9IHZvaWQgMDtcbmV4cG9ydHMucmVkaXJlY3RQb2xpY3kgPSByZWRpcmVjdFBvbGljeTtcbi8qKlxuICogVGhlIHByb2dyYW1tYXRpYyBpZGVudGlmaWVyIG9mIHRoZSByZWRpcmVjdFBvbGljeS5cbiAqL1xuZXhwb3J0cy5yZWRpcmVjdFBvbGljeU5hbWUgPSBcInJlZGlyZWN0UG9saWN5XCI7XG4vKipcbiAqIE1ldGhvZHMgdGhhdCBhcmUgYWxsb3dlZCB0byBmb2xsb3cgcmVkaXJlY3RzIDMwMSBhbmQgMzAyXG4gKi9cbmNvbnN0IGFsbG93ZWRSZWRpcmVjdCA9IFtcIkdFVFwiLCBcIkhFQURcIl07XG4vKipcbiAqIEEgcG9saWN5IHRvIGZvbGxvdyBMb2NhdGlvbiBoZWFkZXJzIGZyb20gdGhlIHNlcnZlciBpbiBvcmRlclxuICogdG8gc3VwcG9ydCBzZXJ2ZXItc2lkZSByZWRpcmVjdGlvbi5cbiAqIEluIHRoZSBicm93c2VyLCB0aGlzIHBvbGljeSBpcyBub3QgdXNlZC5cbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBjb250cm9sIHBvbGljeSBiZWhhdmlvci5cbiAqL1xuZnVuY3Rpb24gcmVkaXJlY3RQb2xpY3kob3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgeyBtYXhSZXRyaWVzID0gMjAgfSA9IG9wdGlvbnM7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogZXhwb3J0cy5yZWRpcmVjdFBvbGljeU5hbWUsXG4gICAgICAgIGFzeW5jIHNlbmRSZXF1ZXN0KHJlcXVlc3QsIG5leHQpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgbmV4dChyZXF1ZXN0KTtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVSZWRpcmVjdChuZXh0LCByZXNwb25zZSwgbWF4UmV0cmllcyk7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZVJlZGlyZWN0KG5leHQsIHJlc3BvbnNlLCBtYXhSZXRyaWVzLCBjdXJyZW50UmV0cmllcyA9IDApIHtcbiAgICBjb25zdCB7IHJlcXVlc3QsIHN0YXR1cywgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgY29uc3QgbG9jYXRpb25IZWFkZXIgPSBoZWFkZXJzLmdldChcImxvY2F0aW9uXCIpO1xuICAgIGlmIChsb2NhdGlvbkhlYWRlciAmJlxuICAgICAgICAoc3RhdHVzID09PSAzMDAgfHxcbiAgICAgICAgICAgIChzdGF0dXMgPT09IDMwMSAmJiBhbGxvd2VkUmVkaXJlY3QuaW5jbHVkZXMocmVxdWVzdC5tZXRob2QpKSB8fFxuICAgICAgICAgICAgKHN0YXR1cyA9PT0gMzAyICYmIGFsbG93ZWRSZWRpcmVjdC5pbmNsdWRlcyhyZXF1ZXN0Lm1ldGhvZCkpIHx8XG4gICAgICAgICAgICAoc3RhdHVzID09PSAzMDMgJiYgcmVxdWVzdC5tZXRob2QgPT09IFwiUE9TVFwiKSB8fFxuICAgICAgICAgICAgc3RhdHVzID09PSAzMDcpICYmXG4gICAgICAgIGN1cnJlbnRSZXRyaWVzIDwgbWF4UmV0cmllcykge1xuICAgICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKGxvY2F0aW9uSGVhZGVyLCByZXF1ZXN0LnVybCk7XG4gICAgICAgIHJlcXVlc3QudXJsID0gdXJsLnRvU3RyaW5nKCk7XG4gICAgICAgIC8vIFBPU1QgcmVxdWVzdCB3aXRoIFN0YXR1cyBjb2RlIDMwMyBzaG91bGQgYmUgY29udmVydGVkIGludG8gYVxuICAgICAgICAvLyByZWRpcmVjdGVkIEdFVCByZXF1ZXN0IGlmIHRoZSByZWRpcmVjdCB1cmwgaXMgcHJlc2VudCBpbiB0aGUgbG9jYXRpb24gaGVhZGVyXG4gICAgICAgIGlmIChzdGF0dXMgPT09IDMwMykge1xuICAgICAgICAgICAgcmVxdWVzdC5tZXRob2QgPSBcIkdFVFwiO1xuICAgICAgICAgICAgcmVxdWVzdC5oZWFkZXJzLmRlbGV0ZShcIkNvbnRlbnQtTGVuZ3RoXCIpO1xuICAgICAgICAgICAgZGVsZXRlIHJlcXVlc3QuYm9keTtcbiAgICAgICAgfVxuICAgICAgICByZXF1ZXN0LmhlYWRlcnMuZGVsZXRlKFwiQXV0aG9yaXphdGlvblwiKTtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgbmV4dChyZXF1ZXN0KTtcbiAgICAgICAgcmV0dXJuIGhhbmRsZVJlZGlyZWN0KG5leHQsIHJlcywgbWF4UmV0cmllcywgY3VycmVudFJldHJpZXMgKyAxKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3BvbnNlO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVkaXJlY3RQb2xpY3kuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRIZWFkZXJOYW1lID0gZ2V0SGVhZGVyTmFtZTtcbmV4cG9ydHMuc2V0UGxhdGZvcm1TcGVjaWZpY0RhdGEgPSBzZXRQbGF0Zm9ybVNwZWNpZmljRGF0YTtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG5jb25zdCBvcyA9IHRzbGliXzEuX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJub2RlOm9zXCIpKTtcbmNvbnN0IHByb2Nlc3MgPSB0c2xpYl8xLl9faW1wb3J0U3RhcihyZXF1aXJlKFwibm9kZTpwcm9jZXNzXCIpKTtcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIGdldEhlYWRlck5hbWUoKSB7XG4gICAgcmV0dXJuIFwiVXNlci1BZ2VudFwiO1xufVxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuYXN5bmMgZnVuY3Rpb24gc2V0UGxhdGZvcm1TcGVjaWZpY0RhdGEobWFwKSB7XG4gICAgaWYgKHByb2Nlc3MgJiYgcHJvY2Vzcy52ZXJzaW9ucykge1xuICAgICAgICBjb25zdCB2ZXJzaW9ucyA9IHByb2Nlc3MudmVyc2lvbnM7XG4gICAgICAgIGlmICh2ZXJzaW9ucy5idW4pIHtcbiAgICAgICAgICAgIG1hcC5zZXQoXCJCdW5cIiwgdmVyc2lvbnMuYnVuKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2ZXJzaW9ucy5kZW5vKSB7XG4gICAgICAgICAgICBtYXAuc2V0KFwiRGVub1wiLCB2ZXJzaW9ucy5kZW5vKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2ZXJzaW9ucy5ub2RlKSB7XG4gICAgICAgICAgICBtYXAuc2V0KFwiTm9kZVwiLCB2ZXJzaW9ucy5ub2RlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBtYXAuc2V0KFwiT1NcIiwgYCgke29zLmFyY2goKX0tJHtvcy50eXBlKCl9LSR7b3MucmVsZWFzZSgpfSlgKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzZXJBZ2VudFBsYXRmb3JtLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuREVGQVVMVF9SRVRSWV9QT0xJQ1lfQ09VTlQgPSBleHBvcnRzLlNES19WRVJTSU9OID0gdm9pZCAwO1xuZXhwb3J0cy5TREtfVkVSU0lPTiA9IFwiMS4xNy4wXCI7XG5leHBvcnRzLkRFRkFVTFRfUkVUUllfUE9MSUNZX0NPVU5UID0gMztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0YW50cy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldFVzZXJBZ2VudEhlYWRlck5hbWUgPSBnZXRVc2VyQWdlbnRIZWFkZXJOYW1lO1xuZXhwb3J0cy5nZXRVc2VyQWdlbnRWYWx1ZSA9IGdldFVzZXJBZ2VudFZhbHVlO1xuY29uc3QgdXNlckFnZW50UGxhdGZvcm1fanNfMSA9IHJlcXVpcmUoXCIuL3VzZXJBZ2VudFBsYXRmb3JtLmpzXCIpO1xuY29uc3QgY29uc3RhbnRzX2pzXzEgPSByZXF1aXJlKFwiLi4vY29uc3RhbnRzLmpzXCIpO1xuZnVuY3Rpb24gZ2V0VXNlckFnZW50U3RyaW5nKHRlbGVtZXRyeUluZm8pIHtcbiAgICBjb25zdCBwYXJ0cyA9IFtdO1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHRlbGVtZXRyeUluZm8pIHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSB2YWx1ZSA/IGAke2tleX0vJHt2YWx1ZX1gIDoga2V5O1xuICAgICAgICBwYXJ0cy5wdXNoKHRva2VuKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnRzLmpvaW4oXCIgXCIpO1xufVxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gZ2V0VXNlckFnZW50SGVhZGVyTmFtZSgpIHtcbiAgICByZXR1cm4gKDAsIHVzZXJBZ2VudFBsYXRmb3JtX2pzXzEuZ2V0SGVhZGVyTmFtZSkoKTtcbn1cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFVzZXJBZ2VudFZhbHVlKHByZWZpeCkge1xuICAgIGNvbnN0IHJ1bnRpbWVJbmZvID0gbmV3IE1hcCgpO1xuICAgIHJ1bnRpbWVJbmZvLnNldChcImNvcmUtcmVzdC1waXBlbGluZVwiLCBjb25zdGFudHNfanNfMS5TREtfVkVSU0lPTik7XG4gICAgYXdhaXQgKDAsIHVzZXJBZ2VudFBsYXRmb3JtX2pzXzEuc2V0UGxhdGZvcm1TcGVjaWZpY0RhdGEpKHJ1bnRpbWVJbmZvKTtcbiAgICBjb25zdCBkZWZhdWx0QWdlbnQgPSBnZXRVc2VyQWdlbnRTdHJpbmcocnVudGltZUluZm8pO1xuICAgIGNvbnN0IHVzZXJBZ2VudFZhbHVlID0gcHJlZml4ID8gYCR7cHJlZml4fSAke2RlZmF1bHRBZ2VudH1gIDogZGVmYXVsdEFnZW50O1xuICAgIHJldHVybiB1c2VyQWdlbnRWYWx1ZTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzZXJBZ2VudC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnVzZXJBZ2VudFBvbGljeU5hbWUgPSB2b2lkIDA7XG5leHBvcnRzLnVzZXJBZ2VudFBvbGljeSA9IHVzZXJBZ2VudFBvbGljeTtcbmNvbnN0IHVzZXJBZ2VudF9qc18xID0gcmVxdWlyZShcIi4uL3V0aWwvdXNlckFnZW50LmpzXCIpO1xuY29uc3QgVXNlckFnZW50SGVhZGVyTmFtZSA9ICgwLCB1c2VyQWdlbnRfanNfMS5nZXRVc2VyQWdlbnRIZWFkZXJOYW1lKSgpO1xuLyoqXG4gKiBUaGUgcHJvZ3JhbW1hdGljIGlkZW50aWZpZXIgb2YgdGhlIHVzZXJBZ2VudFBvbGljeS5cbiAqL1xuZXhwb3J0cy51c2VyQWdlbnRQb2xpY3lOYW1lID0gXCJ1c2VyQWdlbnRQb2xpY3lcIjtcbi8qKlxuICogQSBwb2xpY3kgdGhhdCBzZXRzIHRoZSBVc2VyLUFnZW50IGhlYWRlciAob3IgZXF1aXZhbGVudCkgdG8gcmVmbGVjdFxuICogdGhlIGxpYnJhcnkgdmVyc2lvbi5cbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBjdXN0b21pemUgdGhlIHVzZXIgYWdlbnQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHVzZXJBZ2VudFBvbGljeShvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCB1c2VyQWdlbnRWYWx1ZSA9ICgwLCB1c2VyQWdlbnRfanNfMS5nZXRVc2VyQWdlbnRWYWx1ZSkob3B0aW9ucy51c2VyQWdlbnRQcmVmaXgpO1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGV4cG9ydHMudXNlckFnZW50UG9saWN5TmFtZSxcbiAgICAgICAgYXN5bmMgc2VuZFJlcXVlc3QocmVxdWVzdCwgbmV4dCkge1xuICAgICAgICAgICAgaWYgKCFyZXF1ZXN0LmhlYWRlcnMuaGFzKFVzZXJBZ2VudEhlYWRlck5hbWUpKSB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdC5oZWFkZXJzLnNldChVc2VyQWdlbnRIZWFkZXJOYW1lLCBhd2FpdCB1c2VyQWdlbnRWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV4dChyZXF1ZXN0KTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXNlckFnZW50UG9saWN5LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNOb2RlUmVhZGFibGVTdHJlYW0gPSBpc05vZGVSZWFkYWJsZVN0cmVhbTtcbmV4cG9ydHMuaXNXZWJSZWFkYWJsZVN0cmVhbSA9IGlzV2ViUmVhZGFibGVTdHJlYW07XG5leHBvcnRzLmlzUmVhZGFibGVTdHJlYW0gPSBpc1JlYWRhYmxlU3RyZWFtO1xuZXhwb3J0cy5pc0Jsb2IgPSBpc0Jsb2I7XG5mdW5jdGlvbiBpc05vZGVSZWFkYWJsZVN0cmVhbSh4KSB7XG4gICAgcmV0dXJuIEJvb2xlYW4oeCAmJiB0eXBlb2YgeFtcInBpcGVcIl0gPT09IFwiZnVuY3Rpb25cIik7XG59XG5mdW5jdGlvbiBpc1dlYlJlYWRhYmxlU3RyZWFtKHgpIHtcbiAgICByZXR1cm4gQm9vbGVhbih4ICYmXG4gICAgICAgIHR5cGVvZiB4LmdldFJlYWRlciA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgICAgIHR5cGVvZiB4LnRlZSA9PT0gXCJmdW5jdGlvblwiKTtcbn1cbmZ1bmN0aW9uIGlzUmVhZGFibGVTdHJlYW0oeCkge1xuICAgIHJldHVybiBpc05vZGVSZWFkYWJsZVN0cmVhbSh4KSB8fCBpc1dlYlJlYWRhYmxlU3RyZWFtKHgpO1xufVxuZnVuY3Rpb24gaXNCbG9iKHgpIHtcbiAgICByZXR1cm4gdHlwZW9mIHguc3RyZWFtID09PSBcImZ1bmN0aW9uXCI7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD10eXBlR3VhcmRzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0UmF3Q29udGVudCA9IGdldFJhd0NvbnRlbnQ7XG5leHBvcnRzLmNyZWF0ZUZpbGVGcm9tU3RyZWFtID0gY3JlYXRlRmlsZUZyb21TdHJlYW07XG5leHBvcnRzLmNyZWF0ZUZpbGUgPSBjcmVhdGVGaWxlO1xuY29uc3QgY29yZV91dGlsXzEgPSByZXF1aXJlKFwiQGF6dXJlL2NvcmUtdXRpbFwiKTtcbmNvbnN0IHR5cGVHdWFyZHNfanNfMSA9IHJlcXVpcmUoXCIuL3R5cGVHdWFyZHMuanNcIik7XG5jb25zdCB1bmltcGxlbWVudGVkTWV0aG9kcyA9IHtcbiAgICBhcnJheUJ1ZmZlcjogKCkgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJOb3QgaW1wbGVtZW50ZWRcIik7XG4gICAgfSxcbiAgICBzbGljZTogKCkgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJOb3QgaW1wbGVtZW50ZWRcIik7XG4gICAgfSxcbiAgICB0ZXh0OiAoKSA9PiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgICB9LFxufTtcbi8qKlxuICogUHJpdmF0ZSBzeW1ib2wgdXNlZCBhcyBrZXkgb24gb2JqZWN0cyBjcmVhdGVkIHVzaW5nIGNyZWF0ZUZpbGUgY29udGFpbmluZyB0aGVcbiAqIG9yaWdpbmFsIHNvdXJjZSBvZiB0aGUgZmlsZSBvYmplY3QuXG4gKlxuICogVGhpcyBpcyB1c2VkIGluIE5vZGUgdG8gYWNjZXNzIHRoZSBvcmlnaW5hbCBOb2RlIHN0cmVhbSB3aXRob3V0IHVzaW5nIEJsb2Ijc3RyZWFtLCB3aGljaFxuICogcmV0dXJucyBhIHdlYiBzdHJlYW0uIFRoaXMgaXMgZG9uZSB0byBhdm9pZCBhIGNvdXBsZSBvZiBidWdzIHRvIGRvIHdpdGggQmxvYiNzdHJlYW0gYW5kXG4gKiBSZWFkYWJsZSN0by9mcm9tV2ViIGluIE5vZGUgdmVyc2lvbnMgd2Ugc3VwcG9ydDpcbiAqIC0gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2lzc3Vlcy80MjY5NCAoZml4ZWQgaW4gTm9kZSAxOC4xNClcbiAqIC0gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2lzc3Vlcy80ODkxNiAoZml4ZWQgaW4gTm9kZSAyMC42KVxuICpcbiAqIE9uY2UgdGhlc2UgdmVyc2lvbnMgYXJlIG5vIGxvbmdlciBzdXBwb3J0ZWQsIHdlIG1heSBiZSBhYmxlIHRvIHN0b3AgZG9pbmcgdGhpcy5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuY29uc3QgcmF3Q29udGVudCA9IFN5bWJvbChcInJhd0NvbnRlbnRcIik7XG5mdW5jdGlvbiBoYXNSYXdDb250ZW50KHgpIHtcbiAgICByZXR1cm4gdHlwZW9mIHhbcmF3Q29udGVudF0gPT09IFwiZnVuY3Rpb25cIjtcbn1cbi8qKlxuICogRXh0cmFjdCB0aGUgcmF3IGNvbnRlbnQgZnJvbSBhIGdpdmVuIGJsb2ItbGlrZSBvYmplY3QuIElmIHRoZSBpbnB1dCB3YXMgY3JlYXRlZCB1c2luZyBjcmVhdGVGaWxlXG4gKiBvciBjcmVhdGVGaWxlRnJvbVN0cmVhbSwgdGhlIGV4YWN0IGNvbnRlbnQgcGFzc2VkIGludG8gY3JlYXRlRmlsZS9jcmVhdGVGaWxlRnJvbVN0cmVhbSB3aWxsIGJlIHVzZWQuXG4gKiBGb3IgdHJ1ZSBpbnN0YW5jZXMgb2YgQmxvYiBhbmQgRmlsZSwgcmV0dXJucyB0aGUgYmxvYidzIGNvbnRlbnQgYXMgYSBXZWIgUmVhZGFibGVTdHJlYW08VWludDhBcnJheT4uXG4gKlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIGdldFJhd0NvbnRlbnQoYmxvYikge1xuICAgIGlmIChoYXNSYXdDb250ZW50KGJsb2IpKSB7XG4gICAgICAgIHJldHVybiBibG9iW3Jhd0NvbnRlbnRdKCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gYmxvYi5zdHJlYW0oKTtcbiAgICB9XG59XG4vKipcbiAqIENyZWF0ZSBhbiBvYmplY3QgdGhhdCBpbXBsZW1lbnRzIHRoZSBGaWxlIGludGVyZmFjZS4gVGhpcyBvYmplY3QgaXMgaW50ZW5kZWQgdG8gYmVcbiAqIHBhc3NlZCBpbnRvIFJlcXVlc3RCb2R5VHlwZS5mb3JtRGF0YSwgYW5kIGlzIG5vdCBndWFyYW50ZWVkIHRvIHdvcmsgYXMgZXhwZWN0ZWQgaW5cbiAqIG90aGVyIHNpdHVhdGlvbnMuXG4gKlxuICogVXNlIHRoaXMgZnVuY3Rpb24gdG86XG4gKiAtIENyZWF0ZSBhIEZpbGUgb2JqZWN0IGZvciB1c2UgaW4gUmVxdWVzdEJvZHlUeXBlLmZvcm1EYXRhIGluIGVudmlyb25tZW50cyB3aGVyZSB0aGVcbiAqICAgZ2xvYmFsIEZpbGUgb2JqZWN0IGlzIHVuYXZhaWxhYmxlLlxuICogLSBDcmVhdGUgYSBGaWxlLWxpa2Ugb2JqZWN0IGZyb20gYSByZWFkYWJsZSBzdHJlYW0gd2l0aG91dCByZWFkaW5nIHRoZSBzdHJlYW0gaW50byBtZW1vcnkuXG4gKlxuICogQHBhcmFtIHN0cmVhbSAtIHRoZSBjb250ZW50IG9mIHRoZSBmaWxlIGFzIGEgY2FsbGJhY2sgcmV0dXJuaW5nIGEgc3RyZWFtLiBXaGVuIGEgRmlsZSBvYmplY3QgbWFkZSB1c2luZyBjcmVhdGVGaWxlIGlzXG4gKiAgICAgICAgICAgICAgICAgIHBhc3NlZCBpbiBhIHJlcXVlc3QncyBmb3JtIGRhdGEgbWFwLCB0aGUgc3RyZWFtIHdpbGwgbm90IGJlIHJlYWQgaW50byBtZW1vcnlcbiAqICAgICAgICAgICAgICAgICAgYW5kIGluc3RlYWQgd2lsbCBiZSBzdHJlYW1lZCB3aGVuIHRoZSByZXF1ZXN0IGlzIG1hZGUuIEluIHRoZSBldmVudCBvZiBhIHJldHJ5LCB0aGVcbiAqICAgICAgICAgICAgICAgICAgc3RyZWFtIG5lZWRzIHRvIGJlIHJlYWQgYWdhaW4sIHNvIHRoaXMgY2FsbGJhY2sgU0hPVUxEIHJldHVybiBhIGZyZXNoIHN0cmVhbSBpZiBwb3NzaWJsZS5cbiAqIEBwYXJhbSBuYW1lIC0gdGhlIG5hbWUgb2YgdGhlIGZpbGUuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIG9wdGlvbmFsIG1ldGFkYXRhIGFib3V0IHRoZSBmaWxlLCBlLmcuIGZpbGUgbmFtZSwgZmlsZSBzaXplLCBNSU1FIHR5cGUuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUZpbGVGcm9tU3RyZWFtKHN0cmVhbSwgbmFtZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgdmFyIF9hLCBfYiwgX2MsIF9kO1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHVuaW1wbGVtZW50ZWRNZXRob2RzKSwgeyB0eXBlOiAoX2EgPSBvcHRpb25zLnR5cGUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFwiXCIsIGxhc3RNb2RpZmllZDogKF9iID0gb3B0aW9ucy5sYXN0TW9kaWZpZWQpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IG5ldyBEYXRlKCkuZ2V0VGltZSgpLCB3ZWJraXRSZWxhdGl2ZVBhdGg6IChfYyA9IG9wdGlvbnMud2Via2l0UmVsYXRpdmVQYXRoKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiBcIlwiLCBzaXplOiAoX2QgPSBvcHRpb25zLnNpemUpICE9PSBudWxsICYmIF9kICE9PSB2b2lkIDAgPyBfZCA6IC0xLCBuYW1lLCBzdHJlYW06ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHMgPSBzdHJlYW0oKTtcbiAgICAgICAgICAgIGlmICgoMCwgdHlwZUd1YXJkc19qc18xLmlzTm9kZVJlYWRhYmxlU3RyZWFtKShzKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vdCBzdXBwb3J0ZWQ6IGEgTm9kZSBzdHJlYW0gd2FzIHByb3ZpZGVkIGFzIGlucHV0IHRvIGNyZWF0ZUZpbGVGcm9tU3RyZWFtLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzO1xuICAgICAgICB9LCBbcmF3Q29udGVudF06IHN0cmVhbSB9KTtcbn1cbi8qKlxuICogQ3JlYXRlIGFuIG9iamVjdCB0aGF0IGltcGxlbWVudHMgdGhlIEZpbGUgaW50ZXJmYWNlLiBUaGlzIG9iamVjdCBpcyBpbnRlbmRlZCB0byBiZVxuICogcGFzc2VkIGludG8gUmVxdWVzdEJvZHlUeXBlLmZvcm1EYXRhLCBhbmQgaXMgbm90IGd1YXJhbnRlZWQgdG8gd29yayBhcyBleHBlY3RlZCBpblxuICogb3RoZXIgc2l0dWF0aW9ucy5cbiAqXG4gKiBVc2UgdGhpcyBmdW5jdGlvbiBjcmVhdGUgYSBGaWxlIG9iamVjdCBmb3IgdXNlIGluIFJlcXVlc3RCb2R5VHlwZS5mb3JtRGF0YSBpbiBlbnZpcm9ubWVudHMgd2hlcmUgdGhlIGdsb2JhbCBGaWxlIG9iamVjdCBpcyB1bmF2YWlsYWJsZS5cbiAqXG4gKiBAcGFyYW0gY29udGVudCAtIHRoZSBjb250ZW50IG9mIHRoZSBmaWxlIGFzIGEgVWludDhBcnJheSBpbiBtZW1vcnkuXG4gKiBAcGFyYW0gbmFtZSAtIHRoZSBuYW1lIG9mIHRoZSBmaWxlLlxuICogQHBhcmFtIG9wdGlvbnMgLSBvcHRpb25hbCBtZXRhZGF0YSBhYm91dCB0aGUgZmlsZSwgZS5nLiBmaWxlIG5hbWUsIGZpbGUgc2l6ZSwgTUlNRSB0eXBlLlxuICovXG5mdW5jdGlvbiBjcmVhdGVGaWxlKGNvbnRlbnQsIG5hbWUsIG9wdGlvbnMgPSB7fSkge1xuICAgIHZhciBfYSwgX2IsIF9jO1xuICAgIGlmIChjb3JlX3V0aWxfMS5pc05vZGVMaWtlKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHVuaW1wbGVtZW50ZWRNZXRob2RzKSwgeyB0eXBlOiAoX2EgPSBvcHRpb25zLnR5cGUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFwiXCIsIGxhc3RNb2RpZmllZDogKF9iID0gb3B0aW9ucy5sYXN0TW9kaWZpZWQpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IG5ldyBEYXRlKCkuZ2V0VGltZSgpLCB3ZWJraXRSZWxhdGl2ZVBhdGg6IChfYyA9IG9wdGlvbnMud2Via2l0UmVsYXRpdmVQYXRoKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiBcIlwiLCBzaXplOiBjb250ZW50LmJ5dGVMZW5ndGgsIG5hbWUsIGFycmF5QnVmZmVyOiBhc3luYyAoKSA9PiBjb250ZW50LmJ1ZmZlciwgc3RyZWFtOiAoKSA9PiBuZXcgQmxvYihbY29udGVudF0pLnN0cmVhbSgpLCBbcmF3Q29udGVudF06ICgpID0+IGNvbnRlbnQgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gbmV3IEZpbGUoW2NvbnRlbnRdLCBuYW1lLCBvcHRpb25zKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1maWxlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY29uY2F0ID0gY29uY2F0O1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbmNvbnN0IG5vZGVfc3RyZWFtXzEgPSByZXF1aXJlKFwibm9kZTpzdHJlYW1cIik7XG5jb25zdCB0eXBlR3VhcmRzX2pzXzEgPSByZXF1aXJlKFwiLi90eXBlR3VhcmRzLmpzXCIpO1xuY29uc3QgZmlsZV9qc18xID0gcmVxdWlyZShcIi4vZmlsZS5qc1wiKTtcbmZ1bmN0aW9uIHN0cmVhbUFzeW5jSXRlcmF0b3IoKSB7XG4gICAgcmV0dXJuIHRzbGliXzEuX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKiBzdHJlYW1Bc3luY0l0ZXJhdG9yXzEoKSB7XG4gICAgICAgIGNvbnN0IHJlYWRlciA9IHRoaXMuZ2V0UmVhZGVyKCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IHlpZWxkIHRzbGliXzEuX19hd2FpdChyZWFkZXIucmVhZCgpKTtcbiAgICAgICAgICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geWllbGQgdHNsaWJfMS5fX2F3YWl0KHZvaWQgMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHlpZWxkIHlpZWxkIHRzbGliXzEuX19hd2FpdCh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICByZWFkZXIucmVsZWFzZUxvY2soKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuZnVuY3Rpb24gbWFrZUFzeW5jSXRlcmFibGUod2ViU3RyZWFtKSB7XG4gICAgaWYgKCF3ZWJTdHJlYW1bU3ltYm9sLmFzeW5jSXRlcmF0b3JdKSB7XG4gICAgICAgIHdlYlN0cmVhbVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBzdHJlYW1Bc3luY0l0ZXJhdG9yLmJpbmQod2ViU3RyZWFtKTtcbiAgICB9XG4gICAgaWYgKCF3ZWJTdHJlYW0udmFsdWVzKSB7XG4gICAgICAgIHdlYlN0cmVhbS52YWx1ZXMgPSBzdHJlYW1Bc3luY0l0ZXJhdG9yLmJpbmQod2ViU3RyZWFtKTtcbiAgICB9XG59XG5mdW5jdGlvbiBlbnN1cmVOb2RlU3RyZWFtKHN0cmVhbSkge1xuICAgIGlmIChzdHJlYW0gaW5zdGFuY2VvZiBSZWFkYWJsZVN0cmVhbSkge1xuICAgICAgICBtYWtlQXN5bmNJdGVyYWJsZShzdHJlYW0pO1xuICAgICAgICByZXR1cm4gbm9kZV9zdHJlYW1fMS5SZWFkYWJsZS5mcm9tV2ViKHN0cmVhbSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gc3RyZWFtO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHRvU3RyZWFtKHNvdXJjZSkge1xuICAgIGlmIChzb3VyY2UgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XG4gICAgICAgIHJldHVybiBub2RlX3N0cmVhbV8xLlJlYWRhYmxlLmZyb20oQnVmZmVyLmZyb20oc291cmNlKSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKCgwLCB0eXBlR3VhcmRzX2pzXzEuaXNCbG9iKShzb3VyY2UpKSB7XG4gICAgICAgIHJldHVybiB0b1N0cmVhbSgoMCwgZmlsZV9qc18xLmdldFJhd0NvbnRlbnQpKHNvdXJjZSkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGVuc3VyZU5vZGVTdHJlYW0oc291cmNlKTtcbiAgICB9XG59XG4vKipcbiAqIFV0aWxpdHkgZnVuY3Rpb24gdGhhdCBjb25jYXRlbmF0ZXMgYSBzZXQgb2YgYmluYXJ5IGlucHV0cyBpbnRvIG9uZSBjb21iaW5lZCBvdXRwdXQuXG4gKlxuICogQHBhcmFtIHNvdXJjZXMgLSBhcnJheSBvZiBzb3VyY2VzIGZvciB0aGUgY29uY2F0ZW5hdGlvblxuICogQHJldHVybnMgLSBpbiBOb2RlLCBhICgoKSA9XFw+IE5vZGVKUy5SZWFkYWJsZVN0cmVhbSkgd2hpY2gsIHdoZW4gcmVhZCwgcHJvZHVjZXMgYSBjb25jYXRlbmF0aW9uIG9mIGFsbCB0aGUgaW5wdXRzLlxuICogICAgICAgICAgIEluIGJyb3dzZXIsIHJldHVybnMgYSBgQmxvYmAgcmVwcmVzZW50aW5nIGFsbCB0aGUgY29uY2F0ZW5hdGVkIGlucHV0cy5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuYXN5bmMgZnVuY3Rpb24gY29uY2F0KHNvdXJjZXMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBzdHJlYW1zID0gc291cmNlcy5tYXAoKHgpID0+ICh0eXBlb2YgeCA9PT0gXCJmdW5jdGlvblwiID8geCgpIDogeCkpLm1hcCh0b1N0cmVhbSk7XG4gICAgICAgIHJldHVybiBub2RlX3N0cmVhbV8xLlJlYWRhYmxlLmZyb20oKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0c2xpYl8xLl9fYXN5bmNHZW5lcmF0b3IodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgIHZhciBfYSwgZV8xLCBfYiwgX2M7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBzdHJlYW0gb2Ygc3RyZWFtcykge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2QgPSB0cnVlLCBzdHJlYW1fMSA9IChlXzEgPSB2b2lkIDAsIHRzbGliXzEuX19hc3luY1ZhbHVlcyhzdHJlYW0pKSwgc3RyZWFtXzFfMTsgc3RyZWFtXzFfMSA9IHlpZWxkIHRzbGliXzEuX19hd2FpdChzdHJlYW1fMS5uZXh0KCkpLCBfYSA9IHN0cmVhbV8xXzEuZG9uZSwgIV9hOyBfZCA9IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyA9IHN0cmVhbV8xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaHVuayA9IF9jO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIHlpZWxkIHRzbGliXzEuX19hd2FpdChjaHVuayk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghX2QgJiYgIV9hICYmIChfYiA9IHN0cmVhbV8xLnJldHVybikpIHlpZWxkIHRzbGliXzEuX19hd2FpdChfYi5jYWxsKHN0cmVhbV8xKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSkoKSk7XG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbmNhdC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLm11bHRpcGFydFBvbGljeU5hbWUgPSB2b2lkIDA7XG5leHBvcnRzLm11bHRpcGFydFBvbGljeSA9IG11bHRpcGFydFBvbGljeTtcbmNvbnN0IGNvcmVfdXRpbF8xID0gcmVxdWlyZShcIkBhenVyZS9jb3JlLXV0aWxcIik7XG5jb25zdCBjb25jYXRfanNfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2NvbmNhdC5qc1wiKTtcbmNvbnN0IHR5cGVHdWFyZHNfanNfMSA9IHJlcXVpcmUoXCIuLi91dGlsL3R5cGVHdWFyZHMuanNcIik7XG5mdW5jdGlvbiBnZW5lcmF0ZUJvdW5kYXJ5KCkge1xuICAgIHJldHVybiBgLS0tLUF6U0RLRm9ybUJvdW5kYXJ5JHsoMCwgY29yZV91dGlsXzEucmFuZG9tVVVJRCkoKX1gO1xufVxuZnVuY3Rpb24gZW5jb2RlSGVhZGVycyhoZWFkZXJzKSB7XG4gICAgbGV0IHJlc3VsdCA9IFwiXCI7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgaGVhZGVycykge1xuICAgICAgICByZXN1bHQgKz0gYCR7a2V5fTogJHt2YWx1ZX1cXHJcXG5gO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gZ2V0TGVuZ3RoKHNvdXJjZSkge1xuICAgIGlmIChzb3VyY2UgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XG4gICAgICAgIHJldHVybiBzb3VyY2UuYnl0ZUxlbmd0aDtcbiAgICB9XG4gICAgZWxzZSBpZiAoKDAsIHR5cGVHdWFyZHNfanNfMS5pc0Jsb2IpKHNvdXJjZSkpIHtcbiAgICAgICAgLy8gaWYgd2FzIGNyZWF0ZWQgdXNpbmcgY3JlYXRlRmlsZSB0aGVuIC0xIG1lYW5zIHdlIGhhdmUgYW4gdW5rbm93biBzaXplXG4gICAgICAgIHJldHVybiBzb3VyY2Uuc2l6ZSA9PT0gLTEgPyB1bmRlZmluZWQgOiBzb3VyY2Uuc2l6ZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0VG90YWxMZW5ndGgoc291cmNlcykge1xuICAgIGxldCB0b3RhbCA9IDA7XG4gICAgZm9yIChjb25zdCBzb3VyY2Ugb2Ygc291cmNlcykge1xuICAgICAgICBjb25zdCBwYXJ0TGVuZ3RoID0gZ2V0TGVuZ3RoKHNvdXJjZSk7XG4gICAgICAgIGlmIChwYXJ0TGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0b3RhbCArPSBwYXJ0TGVuZ3RoO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0b3RhbDtcbn1cbmFzeW5jIGZ1bmN0aW9uIGJ1aWxkUmVxdWVzdEJvZHkocmVxdWVzdCwgcGFydHMsIGJvdW5kYXJ5KSB7XG4gICAgY29uc3Qgc291cmNlcyA9IFtcbiAgICAgICAgKDAsIGNvcmVfdXRpbF8xLnN0cmluZ1RvVWludDhBcnJheSkoYC0tJHtib3VuZGFyeX1gLCBcInV0Zi04XCIpLFxuICAgICAgICAuLi5wYXJ0cy5mbGF0TWFwKChwYXJ0KSA9PiBbXG4gICAgICAgICAgICAoMCwgY29yZV91dGlsXzEuc3RyaW5nVG9VaW50OEFycmF5KShcIlxcclxcblwiLCBcInV0Zi04XCIpLFxuICAgICAgICAgICAgKDAsIGNvcmVfdXRpbF8xLnN0cmluZ1RvVWludDhBcnJheSkoZW5jb2RlSGVhZGVycyhwYXJ0LmhlYWRlcnMpLCBcInV0Zi04XCIpLFxuICAgICAgICAgICAgKDAsIGNvcmVfdXRpbF8xLnN0cmluZ1RvVWludDhBcnJheSkoXCJcXHJcXG5cIiwgXCJ1dGYtOFwiKSxcbiAgICAgICAgICAgIHBhcnQuYm9keSxcbiAgICAgICAgICAgICgwLCBjb3JlX3V0aWxfMS5zdHJpbmdUb1VpbnQ4QXJyYXkpKGBcXHJcXG4tLSR7Ym91bmRhcnl9YCwgXCJ1dGYtOFwiKSxcbiAgICAgICAgXSksXG4gICAgICAgICgwLCBjb3JlX3V0aWxfMS5zdHJpbmdUb1VpbnQ4QXJyYXkpKFwiLS1cXHJcXG5cXHJcXG5cIiwgXCJ1dGYtOFwiKSxcbiAgICBdO1xuICAgIGNvbnN0IGNvbnRlbnRMZW5ndGggPSBnZXRUb3RhbExlbmd0aChzb3VyY2VzKTtcbiAgICBpZiAoY29udGVudExlbmd0aCkge1xuICAgICAgICByZXF1ZXN0LmhlYWRlcnMuc2V0KFwiQ29udGVudC1MZW5ndGhcIiwgY29udGVudExlbmd0aCk7XG4gICAgfVxuICAgIHJlcXVlc3QuYm9keSA9IGF3YWl0ICgwLCBjb25jYXRfanNfMS5jb25jYXQpKHNvdXJjZXMpO1xufVxuLyoqXG4gKiBOYW1lIG9mIG11bHRpcGFydCBwb2xpY3lcbiAqL1xuZXhwb3J0cy5tdWx0aXBhcnRQb2xpY3lOYW1lID0gXCJtdWx0aXBhcnRQb2xpY3lcIjtcbmNvbnN0IG1heEJvdW5kYXJ5TGVuZ3RoID0gNzA7XG5jb25zdCB2YWxpZEJvdW5kYXJ5Q2hhcmFjdGVycyA9IG5ldyBTZXQoYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVowMTIzNDU2Nzg5JygpKywtLi86PT9gKTtcbmZ1bmN0aW9uIGFzc2VydFZhbGlkQm91bmRhcnkoYm91bmRhcnkpIHtcbiAgICBpZiAoYm91bmRhcnkubGVuZ3RoID4gbWF4Qm91bmRhcnlMZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNdWx0aXBhcnQgYm91bmRhcnkgXCIke2JvdW5kYXJ5fVwiIGV4Y2VlZHMgbWF4aW11bSBsZW5ndGggb2YgNzAgY2hhcmFjdGVyc2ApO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuZnJvbShib3VuZGFyeSkuc29tZSgoeCkgPT4gIXZhbGlkQm91bmRhcnlDaGFyYWN0ZXJzLmhhcyh4KSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNdWx0aXBhcnQgYm91bmRhcnkgXCIke2JvdW5kYXJ5fVwiIGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVyc2ApO1xuICAgIH1cbn1cbi8qKlxuICogUGlwZWxpbmUgcG9saWN5IGZvciBtdWx0aXBhcnQgcmVxdWVzdHNcbiAqL1xuZnVuY3Rpb24gbXVsdGlwYXJ0UG9saWN5KCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGV4cG9ydHMubXVsdGlwYXJ0UG9saWN5TmFtZSxcbiAgICAgICAgYXN5bmMgc2VuZFJlcXVlc3QocmVxdWVzdCwgbmV4dCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgaWYgKCFyZXF1ZXN0Lm11bHRpcGFydEJvZHkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dChyZXF1ZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXF1ZXN0LmJvZHkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJtdWx0aXBhcnRCb2R5IGFuZCByZWd1bGFyIGJvZHkgY2Fubm90IGJlIHNldCBhdCB0aGUgc2FtZSB0aW1lXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGJvdW5kYXJ5ID0gcmVxdWVzdC5tdWx0aXBhcnRCb2R5LmJvdW5kYXJ5O1xuICAgICAgICAgICAgY29uc3QgY29udGVudFR5cGVIZWFkZXIgPSAoX2EgPSByZXF1ZXN0LmhlYWRlcnMuZ2V0KFwiQ29udGVudC1UeXBlXCIpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBcIm11bHRpcGFydC9taXhlZFwiO1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkSGVhZGVyID0gY29udGVudFR5cGVIZWFkZXIubWF0Y2goL14obXVsdGlwYXJ0XFwvW14gO10rKSg/OjsgKmJvdW5kYXJ5PSguKykpPyQvKTtcbiAgICAgICAgICAgIGlmICghcGFyc2VkSGVhZGVyKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBHb3QgbXVsdGlwYXJ0IHJlcXVlc3QgYm9keSwgYnV0IGNvbnRlbnQtdHlwZSBoZWFkZXIgd2FzIG5vdCBtdWx0aXBhcnQ6ICR7Y29udGVudFR5cGVIZWFkZXJ9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBbLCBjb250ZW50VHlwZSwgcGFyc2VkQm91bmRhcnldID0gcGFyc2VkSGVhZGVyO1xuICAgICAgICAgICAgaWYgKHBhcnNlZEJvdW5kYXJ5ICYmIGJvdW5kYXJ5ICYmIHBhcnNlZEJvdW5kYXJ5ICE9PSBib3VuZGFyeSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTXVsdGlwYXJ0IGJvdW5kYXJ5IHdhcyBzcGVjaWZpZWQgYXMgJHtwYXJzZWRCb3VuZGFyeX0gaW4gdGhlIGhlYWRlciwgYnV0IGdvdCAke2JvdW5kYXJ5fSBpbiB0aGUgcmVxdWVzdCBib2R5YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBib3VuZGFyeSAhPT0gbnVsbCAmJiBib3VuZGFyeSAhPT0gdm9pZCAwID8gYm91bmRhcnkgOiAoYm91bmRhcnkgPSBwYXJzZWRCb3VuZGFyeSk7XG4gICAgICAgICAgICBpZiAoYm91bmRhcnkpIHtcbiAgICAgICAgICAgICAgICBhc3NlcnRWYWxpZEJvdW5kYXJ5KGJvdW5kYXJ5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGJvdW5kYXJ5ID0gZ2VuZXJhdGVCb3VuZGFyeSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVxdWVzdC5oZWFkZXJzLnNldChcIkNvbnRlbnQtVHlwZVwiLCBgJHtjb250ZW50VHlwZX07IGJvdW5kYXJ5PSR7Ym91bmRhcnl9YCk7XG4gICAgICAgICAgICBhd2FpdCBidWlsZFJlcXVlc3RCb2R5KHJlcXVlc3QsIHJlcXVlc3QubXVsdGlwYXJ0Qm9keS5wYXJ0cywgYm91bmRhcnkpO1xuICAgICAgICAgICAgcmVxdWVzdC5tdWx0aXBhcnRCb2R5ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgcmV0dXJuIG5leHQocmVxdWVzdCk7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW11bHRpcGFydFBvbGljeS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlY29tcHJlc3NSZXNwb25zZVBvbGljeU5hbWUgPSB2b2lkIDA7XG5leHBvcnRzLmRlY29tcHJlc3NSZXNwb25zZVBvbGljeSA9IGRlY29tcHJlc3NSZXNwb25zZVBvbGljeTtcbi8qKlxuICogVGhlIHByb2dyYW1tYXRpYyBpZGVudGlmaWVyIG9mIHRoZSBkZWNvbXByZXNzUmVzcG9uc2VQb2xpY3kuXG4gKi9cbmV4cG9ydHMuZGVjb21wcmVzc1Jlc3BvbnNlUG9saWN5TmFtZSA9IFwiZGVjb21wcmVzc1Jlc3BvbnNlUG9saWN5XCI7XG4vKipcbiAqIEEgcG9saWN5IHRvIGVuYWJsZSByZXNwb25zZSBkZWNvbXByZXNzaW9uIGFjY29yZGluZyB0byBBY2NlcHQtRW5jb2RpbmcgaGVhZGVyXG4gKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvQWNjZXB0LUVuY29kaW5nXG4gKi9cbmZ1bmN0aW9uIGRlY29tcHJlc3NSZXNwb25zZVBvbGljeSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBleHBvcnRzLmRlY29tcHJlc3NSZXNwb25zZVBvbGljeU5hbWUsXG4gICAgICAgIGFzeW5jIHNlbmRSZXF1ZXN0KHJlcXVlc3QsIG5leHQpIHtcbiAgICAgICAgICAgIC8vIEhFQUQgcmVxdWVzdHMgaGF2ZSBubyBib2R5XG4gICAgICAgICAgICBpZiAocmVxdWVzdC5tZXRob2QgIT09IFwiSEVBRFwiKSB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdC5oZWFkZXJzLnNldChcIkFjY2VwdC1FbmNvZGluZ1wiLCBcImd6aXAsZGVmbGF0ZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXh0KHJlcXVlc3QpO1xuICAgICAgICB9LFxuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZWNvbXByZXNzUmVzcG9uc2VQb2xpY3kuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZWxheSA9IGRlbGF5O1xuZXhwb3J0cy5wYXJzZUhlYWRlclZhbHVlQXNOdW1iZXIgPSBwYXJzZUhlYWRlclZhbHVlQXNOdW1iZXI7XG5jb25zdCBhYm9ydF9jb250cm9sbGVyXzEgPSByZXF1aXJlKFwiQGF6dXJlL2Fib3J0LWNvbnRyb2xsZXJcIik7XG5jb25zdCBTdGFuZGFyZEFib3J0TWVzc2FnZSA9IFwiVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC5cIjtcbi8qKlxuICogQSB3cmFwcGVyIGZvciBzZXRUaW1lb3V0IHRoYXQgcmVzb2x2ZXMgYSBwcm9taXNlIGFmdGVyIGRlbGF5SW5NcyBtaWxsaXNlY29uZHMuXG4gKiBAcGFyYW0gZGVsYXlJbk1zIC0gVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gYmUgZGVsYXllZC5cbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBiZSByZXNvbHZlZCB3aXRoIGFmdGVyIGEgdGltZW91dCBvZiB0IG1pbGxpc2Vjb25kcy5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIGRlbGF5IC0gY3VycmVudGx5IGFib3J0IG9wdGlvbnNcbiAqICAgICAgICAgICAgICAgICAgLSBhYm9ydFNpZ25hbCAtIFRoZSBhYm9ydFNpZ25hbCBhc3NvY2lhdGVkIHdpdGggY29udGFpbmluZyBvcGVyYXRpb24uXG4gKiAgICAgICAgICAgICAgICAgIC0gYWJvcnRFcnJvck1zZyAtIFRoZSBhYm9ydCBlcnJvciBtZXNzYWdlIGFzc29jaWF0ZWQgd2l0aCBjb250YWluaW5nIG9wZXJhdGlvbi5cbiAqIEByZXR1cm5zIFJlc29sdmVkIHByb21pc2VcbiAqL1xuZnVuY3Rpb24gZGVsYXkoZGVsYXlJbk1zLCB2YWx1ZSwgb3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGxldCB0aW1lciA9IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IG9uQWJvcnRlZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgcmVqZWN0T25BYm9ydCA9ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QobmV3IGFib3J0X2NvbnRyb2xsZXJfMS5BYm9ydEVycm9yKChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuYWJvcnRFcnJvck1zZykgPyBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuYWJvcnRFcnJvck1zZyA6IFN0YW5kYXJkQWJvcnRNZXNzYWdlKSk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHJlbW92ZUxpc3RlbmVycyA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmICgob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmFib3J0U2lnbmFsKSAmJiBvbkFib3J0ZWQpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLmFib3J0U2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0ZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBvbkFib3J0ZWQgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGltZXIpIHtcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVtb3ZlTGlzdGVuZXJzKCk7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0T25BYm9ydCgpO1xuICAgICAgICB9O1xuICAgICAgICBpZiAoKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5hYm9ydFNpZ25hbCkgJiYgb3B0aW9ucy5hYm9ydFNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0T25BYm9ydCgpO1xuICAgICAgICB9XG4gICAgICAgIHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICByZW1vdmVMaXN0ZW5lcnMoKTtcbiAgICAgICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICB9LCBkZWxheUluTXMpO1xuICAgICAgICBpZiAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmFib3J0U2lnbmFsKSB7XG4gICAgICAgICAgICBvcHRpb25zLmFib3J0U2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0ZWQpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG4vKipcbiAqIEBpbnRlcm5hbFxuICogQHJldHVybnMgdGhlIHBhcnNlZCB2YWx1ZSBvciB1bmRlZmluZWQgaWYgdGhlIHBhcnNlZCB2YWx1ZSBpcyBpbnZhbGlkLlxuICovXG5mdW5jdGlvbiBwYXJzZUhlYWRlclZhbHVlQXNOdW1iZXIocmVzcG9uc2UsIGhlYWRlck5hbWUpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KGhlYWRlck5hbWUpO1xuICAgIGlmICghdmFsdWUpXG4gICAgICAgIHJldHVybjtcbiAgICBjb25zdCB2YWx1ZUFzTnVtID0gTnVtYmVyKHZhbHVlKTtcbiAgICBpZiAoTnVtYmVyLmlzTmFOKHZhbHVlQXNOdW0pKVxuICAgICAgICByZXR1cm47XG4gICAgcmV0dXJuIHZhbHVlQXNOdW07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1oZWxwZXJzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNUaHJvdHRsaW5nUmV0cnlSZXNwb25zZSA9IGlzVGhyb3R0bGluZ1JldHJ5UmVzcG9uc2U7XG5leHBvcnRzLnRocm90dGxpbmdSZXRyeVN0cmF0ZWd5ID0gdGhyb3R0bGluZ1JldHJ5U3RyYXRlZ3k7XG5jb25zdCBoZWxwZXJzX2pzXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9oZWxwZXJzLmpzXCIpO1xuLyoqXG4gKiBUaGUgaGVhZGVyIHRoYXQgY29tZXMgYmFjayBmcm9tIEF6dXJlIHNlcnZpY2VzIHJlcHJlc2VudGluZ1xuICogdGhlIGFtb3VudCBvZiB0aW1lIChtaW5pbXVtKSB0byB3YWl0IHRvIHJldHJ5IChpbiBzZWNvbmRzIG9yIHRpbWVzdGFtcCBhZnRlciB3aGljaCB3ZSBjYW4gcmV0cnkpLlxuICovXG5jb25zdCBSZXRyeUFmdGVySGVhZGVyID0gXCJSZXRyeS1BZnRlclwiO1xuLyoqXG4gKiBUaGUgaGVhZGVycyB0aGF0IGNvbWUgYmFjayBmcm9tIEF6dXJlIHNlcnZpY2VzIHJlcHJlc2VudGluZ1xuICogdGhlIGFtb3VudCBvZiB0aW1lIChtaW5pbXVtKSB0byB3YWl0IHRvIHJldHJ5LlxuICpcbiAqIFwicmV0cnktYWZ0ZXItbXNcIiwgXCJ4LW1zLXJldHJ5LWFmdGVyLW1zXCIgOiBtaWxsaXNlY29uZHNcbiAqIFwiUmV0cnktQWZ0ZXJcIiA6IHNlY29uZHMgb3IgdGltZXN0YW1wXG4gKi9cbmNvbnN0IEFsbFJldHJ5QWZ0ZXJIZWFkZXJzID0gW1wicmV0cnktYWZ0ZXItbXNcIiwgXCJ4LW1zLXJldHJ5LWFmdGVyLW1zXCIsIFJldHJ5QWZ0ZXJIZWFkZXJdO1xuLyoqXG4gKiBBIHJlc3BvbnNlIGlzIGEgdGhyb3R0bGluZyByZXRyeSByZXNwb25zZSBpZiBpdCBoYXMgYSB0aHJvdHRsaW5nIHN0YXR1cyBjb2RlICg0Mjkgb3IgNTAzKSxcbiAqIGFzIGxvbmcgYXMgb25lIG9mIHRoZSBbIFwiUmV0cnktQWZ0ZXJcIiBvciBcInJldHJ5LWFmdGVyLW1zXCIgb3IgXCJ4LW1zLXJldHJ5LWFmdGVyLW1zXCIgXSBoZWFkZXJzIGhhcyBhIHZhbGlkIHZhbHVlLlxuICpcbiAqIFJldHVybnMgdGhlIGByZXRyeUFmdGVySW5Nc2AgdmFsdWUgaWYgdGhlIHJlc3BvbnNlIGlzIGEgdGhyb3R0bGluZyByZXRyeSByZXNwb25zZS5cbiAqIElmIG5vdCB0aHJvdHRsaW5nIHJldHJ5IHJlc3BvbnNlLCByZXR1cm5zIGB1bmRlZmluZWRgLlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBnZXRSZXRyeUFmdGVySW5NcyhyZXNwb25zZSkge1xuICAgIGlmICghKHJlc3BvbnNlICYmIFs0MjksIDUwM10uaW5jbHVkZXMocmVzcG9uc2Uuc3RhdHVzKSkpXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gSGVhZGVyczogXCJyZXRyeS1hZnRlci1tc1wiLCBcIngtbXMtcmV0cnktYWZ0ZXItbXNcIiwgXCJSZXRyeS1BZnRlclwiXG4gICAgICAgIGZvciAoY29uc3QgaGVhZGVyIG9mIEFsbFJldHJ5QWZ0ZXJIZWFkZXJzKSB7XG4gICAgICAgICAgICBjb25zdCByZXRyeUFmdGVyVmFsdWUgPSAoMCwgaGVscGVyc19qc18xLnBhcnNlSGVhZGVyVmFsdWVBc051bWJlcikocmVzcG9uc2UsIGhlYWRlcik7XG4gICAgICAgICAgICBpZiAocmV0cnlBZnRlclZhbHVlID09PSAwIHx8IHJldHJ5QWZ0ZXJWYWx1ZSkge1xuICAgICAgICAgICAgICAgIC8vIFwiUmV0cnktQWZ0ZXJcIiBoZWFkZXIgPT0+IHNlY29uZHNcbiAgICAgICAgICAgICAgICAvLyBcInJldHJ5LWFmdGVyLW1zXCIsIFwieC1tcy1yZXRyeS1hZnRlci1tc1wiIGhlYWRlcnMgPT0+IG1pbGxpLXNlY29uZHNcbiAgICAgICAgICAgICAgICBjb25zdCBtdWx0aXBseWluZ0ZhY3RvciA9IGhlYWRlciA9PT0gUmV0cnlBZnRlckhlYWRlciA/IDEwMDAgOiAxO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXRyeUFmdGVyVmFsdWUgKiBtdWx0aXBseWluZ0ZhY3RvcjsgLy8gaW4gbWlsbGktc2Vjb25kc1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFJldHJ5QWZ0ZXJIZWFkZXIgKFwiUmV0cnktQWZ0ZXJcIikgaGFzIGEgc3BlY2lhbCBjYXNlIHdoZXJlIGl0IG1pZ2h0IGJlIGZvcm1hdHRlZCBhcyBhIGRhdGUgaW5zdGVhZCBvZiBhIG51bWJlciBvZiBzZWNvbmRzXG4gICAgICAgIGNvbnN0IHJldHJ5QWZ0ZXJIZWFkZXIgPSByZXNwb25zZS5oZWFkZXJzLmdldChSZXRyeUFmdGVySGVhZGVyKTtcbiAgICAgICAgaWYgKCFyZXRyeUFmdGVySGVhZGVyKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBkYXRlID0gRGF0ZS5wYXJzZShyZXRyeUFmdGVySGVhZGVyKTtcbiAgICAgICAgY29uc3QgZGlmZiA9IGRhdGUgLSBEYXRlLm5vdygpO1xuICAgICAgICAvLyBuZWdhdGl2ZSBkaWZmIHdvdWxkIG1lYW4gYSBkYXRlIGluIHRoZSBwYXN0LCBzbyByZXRyeSBhc2FwIHdpdGggMCBtaWxsaXNlY29uZHNcbiAgICAgICAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShkaWZmKSA/IE1hdGgubWF4KDAsIGRpZmYpIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjYXRjaCAoX2EpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59XG4vKipcbiAqIEEgcmVzcG9uc2UgaXMgYSByZXRyeSByZXNwb25zZSBpZiBpdCBoYXMgYSB0aHJvdHRsaW5nIHN0YXR1cyBjb2RlICg0Mjkgb3IgNTAzKSxcbiAqIGFzIGxvbmcgYXMgb25lIG9mIHRoZSBbIFwiUmV0cnktQWZ0ZXJcIiBvciBcInJldHJ5LWFmdGVyLW1zXCIgb3IgXCJ4LW1zLXJldHJ5LWFmdGVyLW1zXCIgXSBoZWFkZXJzIGhhcyBhIHZhbGlkIHZhbHVlLlxuICovXG5mdW5jdGlvbiBpc1Rocm90dGxpbmdSZXRyeVJlc3BvbnNlKHJlc3BvbnNlKSB7XG4gICAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShnZXRSZXRyeUFmdGVySW5NcyhyZXNwb25zZSkpO1xufVxuZnVuY3Rpb24gdGhyb3R0bGluZ1JldHJ5U3RyYXRlZ3koKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogXCJ0aHJvdHRsaW5nUmV0cnlTdHJhdGVneVwiLFxuICAgICAgICByZXRyeSh7IHJlc3BvbnNlIH0pIHtcbiAgICAgICAgICAgIGNvbnN0IHJldHJ5QWZ0ZXJJbk1zID0gZ2V0UmV0cnlBZnRlckluTXMocmVzcG9uc2UpO1xuICAgICAgICAgICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUocmV0cnlBZnRlckluTXMpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgc2tpcFN0cmF0ZWd5OiB0cnVlIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHJldHJ5QWZ0ZXJJbk1zLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGhyb3R0bGluZ1JldHJ5U3RyYXRlZ3kuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5leHBvbmVudGlhbFJldHJ5U3RyYXRlZ3kgPSBleHBvbmVudGlhbFJldHJ5U3RyYXRlZ3k7XG5leHBvcnRzLmlzRXhwb25lbnRpYWxSZXRyeVJlc3BvbnNlID0gaXNFeHBvbmVudGlhbFJldHJ5UmVzcG9uc2U7XG5leHBvcnRzLmlzU3lzdGVtRXJyb3IgPSBpc1N5c3RlbUVycm9yO1xuY29uc3QgY29yZV91dGlsXzEgPSByZXF1aXJlKFwiQGF6dXJlL2NvcmUtdXRpbFwiKTtcbmNvbnN0IHRocm90dGxpbmdSZXRyeVN0cmF0ZWd5X2pzXzEgPSByZXF1aXJlKFwiLi90aHJvdHRsaW5nUmV0cnlTdHJhdGVneS5qc1wiKTtcbi8vIGludGVydmFscyBhcmUgaW4gbWlsbGlzZWNvbmRzXG5jb25zdCBERUZBVUxUX0NMSUVOVF9SRVRSWV9JTlRFUlZBTCA9IDEwMDA7XG5jb25zdCBERUZBVUxUX0NMSUVOVF9NQVhfUkVUUllfSU5URVJWQUwgPSAxMDAwICogNjQ7XG4vKipcbiAqIEEgcmV0cnkgc3RyYXRlZ3kgdGhhdCByZXRyaWVzIHdpdGggYW4gZXhwb25lbnRpYWxseSBpbmNyZWFzaW5nIGRlbGF5IGluIHRoZXNlIHR3byBjYXNlczpcbiAqIC0gV2hlbiB0aGVyZSBhcmUgZXJyb3JzIGluIHRoZSB1bmRlcmx5aW5nIHRyYW5zcG9ydCBsYXllciAoZS5nLiBETlMgbG9va3VwIGZhaWx1cmVzKS5cbiAqIC0gT3Igb3RoZXJ3aXNlIGlmIHRoZSBvdXRnb2luZyByZXF1ZXN0IGZhaWxzICg0MDgsIGdyZWF0ZXIgb3IgZXF1YWwgdGhhbiA1MDAsIGV4Y2VwdCBmb3IgNTAxIGFuZCA1MDUpLlxuICovXG5mdW5jdGlvbiBleHBvbmVudGlhbFJldHJ5U3RyYXRlZ3kob3B0aW9ucyA9IHt9KSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICBjb25zdCByZXRyeUludGVydmFsID0gKF9hID0gb3B0aW9ucy5yZXRyeURlbGF5SW5NcykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogREVGQVVMVF9DTElFTlRfUkVUUllfSU5URVJWQUw7XG4gICAgY29uc3QgbWF4UmV0cnlJbnRlcnZhbCA9IChfYiA9IG9wdGlvbnMubWF4UmV0cnlEZWxheUluTXMpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IERFRkFVTFRfQ0xJRU5UX01BWF9SRVRSWV9JTlRFUlZBTDtcbiAgICBsZXQgcmV0cnlBZnRlckluTXMgPSByZXRyeUludGVydmFsO1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IFwiZXhwb25lbnRpYWxSZXRyeVN0cmF0ZWd5XCIsXG4gICAgICAgIHJldHJ5KHsgcmV0cnlDb3VudCwgcmVzcG9uc2UsIHJlc3BvbnNlRXJyb3IgfSkge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2hlZFN5c3RlbUVycm9yID0gaXNTeXN0ZW1FcnJvcihyZXNwb25zZUVycm9yKTtcbiAgICAgICAgICAgIGNvbnN0IGlnbm9yZVN5c3RlbUVycm9ycyA9IG1hdGNoZWRTeXN0ZW1FcnJvciAmJiBvcHRpb25zLmlnbm9yZVN5c3RlbUVycm9ycztcbiAgICAgICAgICAgIGNvbnN0IGlzRXhwb25lbnRpYWwgPSBpc0V4cG9uZW50aWFsUmV0cnlSZXNwb25zZShyZXNwb25zZSk7XG4gICAgICAgICAgICBjb25zdCBpZ25vcmVFeHBvbmVudGlhbFJlc3BvbnNlID0gaXNFeHBvbmVudGlhbCAmJiBvcHRpb25zLmlnbm9yZUh0dHBTdGF0dXNDb2RlcztcbiAgICAgICAgICAgIGNvbnN0IHVua25vd25SZXNwb25zZSA9IHJlc3BvbnNlICYmICgoMCwgdGhyb3R0bGluZ1JldHJ5U3RyYXRlZ3lfanNfMS5pc1Rocm90dGxpbmdSZXRyeVJlc3BvbnNlKShyZXNwb25zZSkgfHwgIWlzRXhwb25lbnRpYWwpO1xuICAgICAgICAgICAgaWYgKHVua25vd25SZXNwb25zZSB8fCBpZ25vcmVFeHBvbmVudGlhbFJlc3BvbnNlIHx8IGlnbm9yZVN5c3RlbUVycm9ycykge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHNraXBTdHJhdGVneTogdHJ1ZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlRXJyb3IgJiYgIW1hdGNoZWRTeXN0ZW1FcnJvciAmJiAhaXNFeHBvbmVudGlhbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGVycm9yVG9UaHJvdzogcmVzcG9uc2VFcnJvciB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gRXhwb25lbnRpYWxseSBpbmNyZWFzZSB0aGUgZGVsYXkgZWFjaCB0aW1lXG4gICAgICAgICAgICBjb25zdCBleHBvbmVudGlhbERlbGF5ID0gcmV0cnlBZnRlckluTXMgKiBNYXRoLnBvdygyLCByZXRyeUNvdW50KTtcbiAgICAgICAgICAgIC8vIERvbid0IGxldCB0aGUgZGVsYXkgZXhjZWVkIHRoZSBtYXhpbXVtXG4gICAgICAgICAgICBjb25zdCBjbGFtcGVkRXhwb25lbnRpYWxEZWxheSA9IE1hdGgubWluKG1heFJldHJ5SW50ZXJ2YWwsIGV4cG9uZW50aWFsRGVsYXkpO1xuICAgICAgICAgICAgLy8gQWxsb3cgdGhlIGZpbmFsIHZhbHVlIHRvIGhhdmUgc29tZSBcImppdHRlclwiICh3aXRoaW4gNTAlIG9mIHRoZSBkZWxheSBzaXplKSBzb1xuICAgICAgICAgICAgLy8gdGhhdCByZXRyaWVzIGFjcm9zcyBtdWx0aXBsZSBjbGllbnRzIGRvbid0IG9jY3VyIHNpbXVsdGFuZW91c2x5LlxuICAgICAgICAgICAgcmV0cnlBZnRlckluTXMgPVxuICAgICAgICAgICAgICAgIGNsYW1wZWRFeHBvbmVudGlhbERlbGF5IC8gMiArICgwLCBjb3JlX3V0aWxfMS5nZXRSYW5kb21JbnRlZ2VySW5jbHVzaXZlKSgwLCBjbGFtcGVkRXhwb25lbnRpYWxEZWxheSAvIDIpO1xuICAgICAgICAgICAgcmV0dXJuIHsgcmV0cnlBZnRlckluTXMgfTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuLyoqXG4gKiBBIHJlc3BvbnNlIGlzIGEgcmV0cnkgcmVzcG9uc2UgaWYgaXQgaGFzIHN0YXR1cyBjb2RlczpcbiAqIC0gNDA4LCBvclxuICogLSBHcmVhdGVyIG9yIGVxdWFsIHRoYW4gNTAwLCBleGNlcHQgZm9yIDUwMSBhbmQgNTA1LlxuICovXG5mdW5jdGlvbiBpc0V4cG9uZW50aWFsUmV0cnlSZXNwb25zZShyZXNwb25zZSkge1xuICAgIHJldHVybiBCb29sZWFuKHJlc3BvbnNlICYmXG4gICAgICAgIHJlc3BvbnNlLnN0YXR1cyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIChyZXNwb25zZS5zdGF0dXMgPj0gNTAwIHx8IHJlc3BvbnNlLnN0YXR1cyA9PT0gNDA4KSAmJlxuICAgICAgICByZXNwb25zZS5zdGF0dXMgIT09IDUwMSAmJlxuICAgICAgICByZXNwb25zZS5zdGF0dXMgIT09IDUwNSk7XG59XG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciBhbiBlcnJvciBmcm9tIGEgcGlwZWxpbmUgcmVzcG9uc2Ugd2FzIHRyaWdnZXJlZCBpbiB0aGUgbmV0d29yayBsYXllci5cbiAqL1xuZnVuY3Rpb24gaXNTeXN0ZW1FcnJvcihlcnIpIHtcbiAgICBpZiAoIWVycikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiAoZXJyLmNvZGUgPT09IFwiRVRJTUVET1VUXCIgfHxcbiAgICAgICAgZXJyLmNvZGUgPT09IFwiRVNPQ0tFVFRJTUVET1VUXCIgfHxcbiAgICAgICAgZXJyLmNvZGUgPT09IFwiRUNPTk5SRUZVU0VEXCIgfHxcbiAgICAgICAgZXJyLmNvZGUgPT09IFwiRUNPTk5SRVNFVFwiIHx8XG4gICAgICAgIGVyci5jb2RlID09PSBcIkVOT0VOVFwiIHx8XG4gICAgICAgIGVyci5jb2RlID09PSBcIkVOT1RGT1VORFwiKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWV4cG9uZW50aWFsUmV0cnlTdHJhdGVneS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJldHJ5UG9saWN5ID0gcmV0cnlQb2xpY3k7XG5jb25zdCBoZWxwZXJzX2pzXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9oZWxwZXJzLmpzXCIpO1xuY29uc3QgbG9nZ2VyXzEgPSByZXF1aXJlKFwiQGF6dXJlL2xvZ2dlclwiKTtcbmNvbnN0IGFib3J0X2NvbnRyb2xsZXJfMSA9IHJlcXVpcmUoXCJAYXp1cmUvYWJvcnQtY29udHJvbGxlclwiKTtcbmNvbnN0IGNvbnN0YW50c19qc18xID0gcmVxdWlyZShcIi4uL2NvbnN0YW50cy5qc1wiKTtcbmNvbnN0IHJldHJ5UG9saWN5TG9nZ2VyID0gKDAsIGxvZ2dlcl8xLmNyZWF0ZUNsaWVudExvZ2dlcikoXCJjb3JlLXJlc3QtcGlwZWxpbmUgcmV0cnlQb2xpY3lcIik7XG4vKipcbiAqIFRoZSBwcm9ncmFtbWF0aWMgaWRlbnRpZmllciBvZiB0aGUgcmV0cnlQb2xpY3kuXG4gKi9cbmNvbnN0IHJldHJ5UG9saWN5TmFtZSA9IFwicmV0cnlQb2xpY3lcIjtcbi8qKlxuICogcmV0cnlQb2xpY3kgaXMgYSBnZW5lcmljIHBvbGljeSB0byBlbmFibGUgcmV0cnlpbmcgcmVxdWVzdHMgd2hlbiBjZXJ0YWluIGNvbmRpdGlvbnMgYXJlIG1ldFxuICovXG5mdW5jdGlvbiByZXRyeVBvbGljeShzdHJhdGVnaWVzLCBvcHRpb25zID0geyBtYXhSZXRyaWVzOiBjb25zdGFudHNfanNfMS5ERUZBVUxUX1JFVFJZX1BPTElDWV9DT1VOVCB9KSB7XG4gICAgY29uc3QgbG9nZ2VyID0gb3B0aW9ucy5sb2dnZXIgfHwgcmV0cnlQb2xpY3lMb2dnZXI7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogcmV0cnlQb2xpY3lOYW1lLFxuICAgICAgICBhc3luYyBzZW5kUmVxdWVzdChyZXF1ZXN0LCBuZXh0KSB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgICAgbGV0IHJlc3BvbnNlO1xuICAgICAgICAgICAgbGV0IHJlc3BvbnNlRXJyb3I7XG4gICAgICAgICAgICBsZXQgcmV0cnlDb3VudCA9IC0xO1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnN0YW50LWNvbmRpdGlvblxuICAgICAgICAgICAgcmV0cnlSZXF1ZXN0OiB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgICAgIHJldHJ5Q291bnQgKz0gMTtcbiAgICAgICAgICAgICAgICByZXNwb25zZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICByZXNwb25zZUVycm9yID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBSZXRyeSAke3JldHJ5Q291bnR9OiBBdHRlbXB0aW5nIHRvIHNlbmQgcmVxdWVzdGAsIHJlcXVlc3QucmVxdWVzdElkKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCBuZXh0KHJlcXVlc3QpO1xuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhgUmV0cnkgJHtyZXRyeUNvdW50fTogUmVjZWl2ZWQgYSByZXNwb25zZSBmcm9tIHJlcXVlc3RgLCByZXF1ZXN0LnJlcXVlc3RJZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihgUmV0cnkgJHtyZXRyeUNvdW50fTogUmVjZWl2ZWQgYW4gZXJyb3IgZnJvbSByZXF1ZXN0YCwgcmVxdWVzdC5yZXF1ZXN0SWQpO1xuICAgICAgICAgICAgICAgICAgICAvLyBSZXN0RXJyb3JzIGFyZSB2YWxpZCB0YXJnZXRzIGZvciB0aGUgcmV0cnkgc3RyYXRlZ2llcy5cbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgbm9uZSBvZiB0aGUgcmV0cnkgc3RyYXRlZ2llcyBjYW4gd29yayB3aXRoIHRoZW0sIHRoZXkgd2lsbCBiZSB0aHJvd24gbGF0ZXIgaW4gdGhpcyBwb2xpY3kuXG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSByZWNlaXZlZCBlcnJvciBpcyBub3QgYSBSZXN0RXJyb3IsIGl0IGlzIGltbWVkaWF0ZWx5IHRocm93bi5cbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VFcnJvciA9IGU7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZSB8fCByZXNwb25zZUVycm9yLm5hbWUgIT09IFwiUmVzdEVycm9yXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSByZXNwb25zZUVycm9yLnJlc3BvbnNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoKF9hID0gcmVxdWVzdC5hYm9ydFNpZ25hbCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmFib3J0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGBSZXRyeSAke3JldHJ5Q291bnR9OiBSZXF1ZXN0IGFib3J0ZWQuYCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFib3J0RXJyb3IgPSBuZXcgYWJvcnRfY29udHJvbGxlcl8xLkFib3J0RXJyb3IoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgYWJvcnRFcnJvcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJldHJ5Q291bnQgPj0gKChfYiA9IG9wdGlvbnMubWF4UmV0cmllcykgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogY29uc3RhbnRzX2pzXzEuREVGQVVMVF9SRVRSWV9QT0xJQ1lfQ09VTlQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBSZXRyeSAke3JldHJ5Q291bnR9OiBNYXhpbXVtIHJldHJpZXMgcmVhY2hlZC4gUmV0dXJuaW5nIHRoZSBsYXN0IHJlY2VpdmVkIHJlc3BvbnNlLCBvciB0aHJvd2luZyB0aGUgbGFzdCByZWNlaXZlZCBlcnJvci5gKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IHJlc3BvbnNlRXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1heGltdW0gcmV0cmllcyByZWFjaGVkIHdpdGggbm8gcmVzcG9uc2Ugb3IgZXJyb3IgdG8gdGhyb3dcIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYFJldHJ5ICR7cmV0cnlDb3VudH06IFByb2Nlc3NpbmcgJHtzdHJhdGVnaWVzLmxlbmd0aH0gcmV0cnkgc3RyYXRlZ2llcy5gKTtcbiAgICAgICAgICAgICAgICBzdHJhdGVnaWVzTG9vcDogZm9yIChjb25zdCBzdHJhdGVneSBvZiBzdHJhdGVnaWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmF0ZWd5TG9nZ2VyID0gc3RyYXRlZ3kubG9nZ2VyIHx8IHJldHJ5UG9saWN5TG9nZ2VyO1xuICAgICAgICAgICAgICAgICAgICBzdHJhdGVneUxvZ2dlci5pbmZvKGBSZXRyeSAke3JldHJ5Q291bnR9OiBQcm9jZXNzaW5nIHJldHJ5IHN0cmF0ZWd5ICR7c3RyYXRlZ3kubmFtZX0uYCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1vZGlmaWVycyA9IHN0cmF0ZWd5LnJldHJ5KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHJ5Q291bnQsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlRXJyb3IsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAobW9kaWZpZXJzLnNraXBTdHJhdGVneSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyYXRlZ3lMb2dnZXIuaW5mbyhgUmV0cnkgJHtyZXRyeUNvdW50fTogU2tpcHBlZC5gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIHN0cmF0ZWdpZXNMb29wO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgZXJyb3JUb1Rocm93LCByZXRyeUFmdGVySW5NcywgcmVkaXJlY3RUbyB9ID0gbW9kaWZpZXJzO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3JUb1Rocm93KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJhdGVneUxvZ2dlci5lcnJvcihgUmV0cnkgJHtyZXRyeUNvdW50fTogUmV0cnkgc3RyYXRlZ3kgJHtzdHJhdGVneS5uYW1lfSB0aHJvd3MgZXJyb3I6YCwgZXJyb3JUb1Rocm93KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9yVG9UaHJvdztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAocmV0cnlBZnRlckluTXMgfHwgcmV0cnlBZnRlckluTXMgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmF0ZWd5TG9nZ2VyLmluZm8oYFJldHJ5ICR7cmV0cnlDb3VudH06IFJldHJ5IHN0cmF0ZWd5ICR7c3RyYXRlZ3kubmFtZX0gcmV0cmllcyBhZnRlciAke3JldHJ5QWZ0ZXJJbk1zfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgKDAsIGhlbHBlcnNfanNfMS5kZWxheSkocmV0cnlBZnRlckluTXMsIHVuZGVmaW5lZCwgeyBhYm9ydFNpZ25hbDogcmVxdWVzdC5hYm9ydFNpZ25hbCB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIHJldHJ5UmVxdWVzdDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAocmVkaXJlY3RUbykge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyYXRlZ3lMb2dnZXIuaW5mbyhgUmV0cnkgJHtyZXRyeUNvdW50fTogUmV0cnkgc3RyYXRlZ3kgJHtzdHJhdGVneS5uYW1lfSByZWRpcmVjdHMgdG8gJHtyZWRpcmVjdFRvfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC51cmwgPSByZWRpcmVjdFRvO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUgcmV0cnlSZXF1ZXN0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZUVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBOb25lIG9mIHRoZSByZXRyeSBzdHJhdGVnaWVzIGNvdWxkIHdvcmsgd2l0aCB0aGUgcmVjZWl2ZWQgZXJyb3IuIFRocm93aW5nIGl0LmApO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyByZXNwb25zZUVycm9yO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYE5vbmUgb2YgdGhlIHJldHJ5IHN0cmF0ZWdpZXMgY291bGQgd29yayB3aXRoIHRoZSByZWNlaXZlZCByZXNwb25zZS4gUmV0dXJuaW5nIGl0LmApO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIElmIGFsbCB0aGUgcmV0cmllcyBza2lwIGFuZCB0aGVyZSdzIG5vIHJlc3BvbnNlLFxuICAgICAgICAgICAgICAgIC8vIHdlJ3JlIHN0aWxsIGluIHRoZSByZXRyeSBsb29wLCBzbyBhIG5ldyByZXF1ZXN0IHdpbGwgYmUgc2VudFxuICAgICAgICAgICAgICAgIC8vIHVudGlsIGBtYXhSZXRyaWVzYCBpcyByZWFjaGVkLlxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZXRyeVBvbGljeS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlZmF1bHRSZXRyeVBvbGljeU5hbWUgPSB2b2lkIDA7XG5leHBvcnRzLmRlZmF1bHRSZXRyeVBvbGljeSA9IGRlZmF1bHRSZXRyeVBvbGljeTtcbmNvbnN0IGV4cG9uZW50aWFsUmV0cnlTdHJhdGVneV9qc18xID0gcmVxdWlyZShcIi4uL3JldHJ5U3RyYXRlZ2llcy9leHBvbmVudGlhbFJldHJ5U3RyYXRlZ3kuanNcIik7XG5jb25zdCB0aHJvdHRsaW5nUmV0cnlTdHJhdGVneV9qc18xID0gcmVxdWlyZShcIi4uL3JldHJ5U3RyYXRlZ2llcy90aHJvdHRsaW5nUmV0cnlTdHJhdGVneS5qc1wiKTtcbmNvbnN0IHJldHJ5UG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9yZXRyeVBvbGljeS5qc1wiKTtcbmNvbnN0IGNvbnN0YW50c19qc18xID0gcmVxdWlyZShcIi4uL2NvbnN0YW50cy5qc1wiKTtcbi8qKlxuICogTmFtZSBvZiB0aGUge0BsaW5rIGRlZmF1bHRSZXRyeVBvbGljeX1cbiAqL1xuZXhwb3J0cy5kZWZhdWx0UmV0cnlQb2xpY3lOYW1lID0gXCJkZWZhdWx0UmV0cnlQb2xpY3lcIjtcbi8qKlxuICogQSBwb2xpY3kgdGhhdCByZXRyaWVzIGFjY29yZGluZyB0byB0aHJlZSBzdHJhdGVnaWVzOlxuICogLSBXaGVuIHRoZSBzZXJ2ZXIgc2VuZHMgYSA0MjkgcmVzcG9uc2Ugd2l0aCBhIFJldHJ5LUFmdGVyIGhlYWRlci5cbiAqIC0gV2hlbiB0aGVyZSBhcmUgZXJyb3JzIGluIHRoZSB1bmRlcmx5aW5nIHRyYW5zcG9ydCBsYXllciAoZS5nLiBETlMgbG9va3VwIGZhaWx1cmVzKS5cbiAqIC0gT3Igb3RoZXJ3aXNlIGlmIHRoZSBvdXRnb2luZyByZXF1ZXN0IGZhaWxzLCBpdCB3aWxsIHJldHJ5IHdpdGggYW4gZXhwb25lbnRpYWxseSBpbmNyZWFzaW5nIGRlbGF5LlxuICovXG5mdW5jdGlvbiBkZWZhdWx0UmV0cnlQb2xpY3kob3B0aW9ucyA9IHt9KSB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGV4cG9ydHMuZGVmYXVsdFJldHJ5UG9saWN5TmFtZSxcbiAgICAgICAgc2VuZFJlcXVlc3Q6ICgwLCByZXRyeVBvbGljeV9qc18xLnJldHJ5UG9saWN5KShbKDAsIHRocm90dGxpbmdSZXRyeVN0cmF0ZWd5X2pzXzEudGhyb3R0bGluZ1JldHJ5U3RyYXRlZ3kpKCksICgwLCBleHBvbmVudGlhbFJldHJ5U3RyYXRlZ3lfanNfMS5leHBvbmVudGlhbFJldHJ5U3RyYXRlZ3kpKG9wdGlvbnMpXSwge1xuICAgICAgICAgICAgbWF4UmV0cmllczogKF9hID0gb3B0aW9ucy5tYXhSZXRyaWVzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBjb25zdGFudHNfanNfMS5ERUZBVUxUX1JFVFJZX1BPTElDWV9DT1VOVCxcbiAgICAgICAgfSkuc2VuZFJlcXVlc3QsXG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlZmF1bHRSZXRyeVBvbGljeS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNyZWF0ZUh0dHBIZWFkZXJzID0gY3JlYXRlSHR0cEhlYWRlcnM7XG5mdW5jdGlvbiBub3JtYWxpemVOYW1lKG5hbWUpIHtcbiAgICByZXR1cm4gbmFtZS50b0xvd2VyQ2FzZSgpO1xufVxuZnVuY3Rpb24qIGhlYWRlckl0ZXJhdG9yKG1hcCkge1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgbWFwLnZhbHVlcygpKSB7XG4gICAgICAgIHlpZWxkIFtlbnRyeS5uYW1lLCBlbnRyeS52YWx1ZV07XG4gICAgfVxufVxuY2xhc3MgSHR0cEhlYWRlcnNJbXBsIHtcbiAgICBjb25zdHJ1Y3RvcihyYXdIZWFkZXJzKSB7XG4gICAgICAgIHRoaXMuX2hlYWRlcnNNYXAgPSBuZXcgTWFwKCk7XG4gICAgICAgIGlmIChyYXdIZWFkZXJzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGhlYWRlck5hbWUgb2YgT2JqZWN0LmtleXMocmF3SGVhZGVycykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldChoZWFkZXJOYW1lLCByYXdIZWFkZXJzW2hlYWRlck5hbWVdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXQgYSBoZWFkZXIgaW4gdGhpcyBjb2xsZWN0aW9uIHdpdGggdGhlIHByb3ZpZGVkIG5hbWUgYW5kIHZhbHVlLiBUaGUgbmFtZSBpc1xuICAgICAqIGNhc2UtaW5zZW5zaXRpdmUuXG4gICAgICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgaGVhZGVyIHRvIHNldC4gVGhpcyB2YWx1ZSBpcyBjYXNlLWluc2Vuc2l0aXZlLlxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSBvZiB0aGUgaGVhZGVyIHRvIHNldC5cbiAgICAgKi9cbiAgICBzZXQobmFtZSwgdmFsdWUpIHtcbiAgICAgICAgdGhpcy5faGVhZGVyc01hcC5zZXQobm9ybWFsaXplTmFtZShuYW1lKSwgeyBuYW1lLCB2YWx1ZTogU3RyaW5nKHZhbHVlKS50cmltKCkgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgaGVhZGVyIHZhbHVlIGZvciB0aGUgcHJvdmlkZWQgaGVhZGVyIG5hbWUsIG9yIHVuZGVmaW5lZCBpZiBubyBoZWFkZXIgZXhpc3RzIGluIHRoaXNcbiAgICAgKiBjb2xsZWN0aW9uIHdpdGggdGhlIHByb3ZpZGVkIG5hbWUuXG4gICAgICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgaGVhZGVyLiBUaGlzIHZhbHVlIGlzIGNhc2UtaW5zZW5zaXRpdmUuXG4gICAgICovXG4gICAgZ2V0KG5hbWUpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gKF9hID0gdGhpcy5faGVhZGVyc01hcC5nZXQobm9ybWFsaXplTmFtZShuYW1lKSkpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IHdoZXRoZXIgb3Igbm90IHRoaXMgaGVhZGVyIGNvbGxlY3Rpb24gY29udGFpbnMgYSBoZWFkZXIgZW50cnkgZm9yIHRoZSBwcm92aWRlZCBoZWFkZXIgbmFtZS5cbiAgICAgKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBoZWFkZXIgdG8gc2V0LiBUaGlzIHZhbHVlIGlzIGNhc2UtaW5zZW5zaXRpdmUuXG4gICAgICovXG4gICAgaGFzKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hlYWRlcnNNYXAuaGFzKG5vcm1hbGl6ZU5hbWUobmFtZSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZW1vdmUgdGhlIGhlYWRlciB3aXRoIHRoZSBwcm92aWRlZCBoZWFkZXJOYW1lLlxuICAgICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGhlYWRlciB0byByZW1vdmUuXG4gICAgICovXG4gICAgZGVsZXRlKG5hbWUpIHtcbiAgICAgICAgdGhpcy5faGVhZGVyc01hcC5kZWxldGUobm9ybWFsaXplTmFtZShuYW1lKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgSlNPTiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBIVFRQIGhlYWRlciBjb2xsZWN0aW9uLlxuICAgICAqL1xuICAgIHRvSlNPTihvcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgICAgIGlmIChvcHRpb25zLnByZXNlcnZlQ2FzZSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLl9oZWFkZXJzTWFwLnZhbHVlcygpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0W2VudHJ5Lm5hbWVdID0gZW50cnkudmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtub3JtYWxpemVkTmFtZSwgZW50cnldIG9mIHRoaXMuX2hlYWRlcnNNYXApIHtcbiAgICAgICAgICAgICAgICByZXN1bHRbbm9ybWFsaXplZE5hbWVdID0gZW50cnkudmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBIVFRQIGhlYWRlciBjb2xsZWN0aW9uLlxuICAgICAqL1xuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy50b0pTT04oeyBwcmVzZXJ2ZUNhc2U6IHRydWUgfSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJdGVyYXRlIG92ZXIgdHVwbGVzIG9mIGhlYWRlciBbbmFtZSwgdmFsdWVdIHBhaXJzLlxuICAgICAqL1xuICAgIFtTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgICAgICByZXR1cm4gaGVhZGVySXRlcmF0b3IodGhpcy5faGVhZGVyc01hcCk7XG4gICAgfVxufVxuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCB0aGF0IHNhdGlzZmllcyB0aGUgYEh0dHBIZWFkZXJzYCBpbnRlcmZhY2UuXG4gKiBAcGFyYW0gcmF3SGVhZGVycyAtIEEgc2ltcGxlIG9iamVjdCByZXByZXNlbnRpbmcgaW5pdGlhbCBoZWFkZXJzXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUh0dHBIZWFkZXJzKHJhd0hlYWRlcnMpIHtcbiAgICByZXR1cm4gbmV3IEh0dHBIZWFkZXJzSW1wbChyYXdIZWFkZXJzKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWh0dHBIZWFkZXJzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZm9ybURhdGFQb2xpY3lOYW1lID0gdm9pZCAwO1xuZXhwb3J0cy5mb3JtRGF0YVBvbGljeSA9IGZvcm1EYXRhUG9saWN5O1xuY29uc3QgY29yZV91dGlsXzEgPSByZXF1aXJlKFwiQGF6dXJlL2NvcmUtdXRpbFwiKTtcbmNvbnN0IGh0dHBIZWFkZXJzX2pzXzEgPSByZXF1aXJlKFwiLi4vaHR0cEhlYWRlcnMuanNcIik7XG4vKipcbiAqIFRoZSBwcm9ncmFtbWF0aWMgaWRlbnRpZmllciBvZiB0aGUgZm9ybURhdGFQb2xpY3kuXG4gKi9cbmV4cG9ydHMuZm9ybURhdGFQb2xpY3lOYW1lID0gXCJmb3JtRGF0YVBvbGljeVwiO1xuZnVuY3Rpb24gZm9ybURhdGFUb0Zvcm1EYXRhTWFwKGZvcm1EYXRhKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IGZvcm1EYXRhTWFwID0ge307XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgZm9ybURhdGEuZW50cmllcygpKSB7XG4gICAgICAgIChfYSA9IGZvcm1EYXRhTWFwW2tleV0pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IChmb3JtRGF0YU1hcFtrZXldID0gW10pO1xuICAgICAgICBmb3JtRGF0YU1hcFtrZXldLnB1c2godmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gZm9ybURhdGFNYXA7XG59XG4vKipcbiAqIEEgcG9saWN5IHRoYXQgZW5jb2RlcyBGb3JtRGF0YSBvbiB0aGUgcmVxdWVzdCBpbnRvIHRoZSBib2R5LlxuICovXG5mdW5jdGlvbiBmb3JtRGF0YVBvbGljeSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBleHBvcnRzLmZvcm1EYXRhUG9saWN5TmFtZSxcbiAgICAgICAgYXN5bmMgc2VuZFJlcXVlc3QocmVxdWVzdCwgbmV4dCkge1xuICAgICAgICAgICAgaWYgKGNvcmVfdXRpbF8xLmlzTm9kZUxpa2UgJiYgdHlwZW9mIEZvcm1EYXRhICE9PSBcInVuZGVmaW5lZFwiICYmIHJlcXVlc3QuYm9keSBpbnN0YW5jZW9mIEZvcm1EYXRhKSB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdC5mb3JtRGF0YSA9IGZvcm1EYXRhVG9Gb3JtRGF0YU1hcChyZXF1ZXN0LmJvZHkpO1xuICAgICAgICAgICAgICAgIHJlcXVlc3QuYm9keSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXF1ZXN0LmZvcm1EYXRhKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29udGVudFR5cGUgPSByZXF1ZXN0LmhlYWRlcnMuZ2V0KFwiQ29udGVudC1UeXBlXCIpO1xuICAgICAgICAgICAgICAgIGlmIChjb250ZW50VHlwZSAmJiBjb250ZW50VHlwZS5pbmRleE9mKFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmJvZHkgPSB3d3dGb3JtVXJsRW5jb2RlKHJlcXVlc3QuZm9ybURhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgcHJlcGFyZUZvcm1EYXRhKHJlcXVlc3QuZm9ybURhdGEsIHJlcXVlc3QpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXF1ZXN0LmZvcm1EYXRhID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5leHQocmVxdWVzdCk7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbmZ1bmN0aW9uIHd3d0Zvcm1VcmxFbmNvZGUoZm9ybURhdGEpIHtcbiAgICBjb25zdCB1cmxTZWFyY2hQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZm9ybURhdGEpKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBzdWJWYWx1ZSBvZiB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHVybFNlYXJjaFBhcmFtcy5hcHBlbmQoa2V5LCBzdWJWYWx1ZS50b1N0cmluZygpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHVybFNlYXJjaFBhcmFtcy5hcHBlbmQoa2V5LCB2YWx1ZS50b1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdXJsU2VhcmNoUGFyYW1zLnRvU3RyaW5nKCk7XG59XG5hc3luYyBmdW5jdGlvbiBwcmVwYXJlRm9ybURhdGEoZm9ybURhdGEsIHJlcXVlc3QpIHtcbiAgICAvLyB2YWxpZGF0ZSBjb250ZW50IHR5cGUgKG11bHRpcGFydC9mb3JtLWRhdGEpXG4gICAgY29uc3QgY29udGVudFR5cGUgPSByZXF1ZXN0LmhlYWRlcnMuZ2V0KFwiQ29udGVudC1UeXBlXCIpO1xuICAgIGlmIChjb250ZW50VHlwZSAmJiAhY29udGVudFR5cGUuc3RhcnRzV2l0aChcIm11bHRpcGFydC9mb3JtLWRhdGFcIikpIHtcbiAgICAgICAgLy8gY29udGVudCB0eXBlIGlzIHNwZWNpZmllZCBhbmQgaXMgbm90IG11bHRpcGFydC9mb3JtLWRhdGEuIEV4aXQuXG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmVxdWVzdC5oZWFkZXJzLnNldChcIkNvbnRlbnQtVHlwZVwiLCBjb250ZW50VHlwZSAhPT0gbnVsbCAmJiBjb250ZW50VHlwZSAhPT0gdm9pZCAwID8gY29udGVudFR5cGUgOiBcIm11bHRpcGFydC9mb3JtLWRhdGFcIik7XG4gICAgLy8gc2V0IGJvZHkgdG8gTXVsdGlwYXJ0UmVxdWVzdEJvZHkgdXNpbmcgY29udGVudCBmcm9tIEZvcm1EYXRhTWFwXG4gICAgY29uc3QgcGFydHMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IFtmaWVsZE5hbWUsIHZhbHVlc10gb2YgT2JqZWN0LmVudHJpZXMoZm9ybURhdGEpKSB7XG4gICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgQXJyYXkuaXNBcnJheSh2YWx1ZXMpID8gdmFsdWVzIDogW3ZhbHVlc10pIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBwYXJ0cy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogKDAsIGh0dHBIZWFkZXJzX2pzXzEuY3JlYXRlSHR0cEhlYWRlcnMpKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiQ29udGVudC1EaXNwb3NpdGlvblwiOiBgZm9ybS1kYXRhOyBuYW1lPVwiJHtmaWVsZE5hbWV9XCJgLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgYm9keTogKDAsIGNvcmVfdXRpbF8xLnN0cmluZ1RvVWludDhBcnJheSkodmFsdWUsIFwidXRmLThcIiksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCB2YWx1ZSBmb3Iga2V5ICR7ZmllbGROYW1lfTogJHt2YWx1ZX0uIFZhbHVlIHNob3VsZCBiZSBzZXJpYWxpemVkIHRvIHN0cmluZyBmaXJzdC5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIHVzaW5nIHx8IGluc3RlYWQgb2YgPz8gaGVyZSBzaW5jZSBpZiB2YWx1ZS5uYW1lIGlzIGVtcHR5IHdlIHNob3VsZCBjcmVhdGUgYSBmaWxlIG5hbWVcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlTmFtZSA9IHZhbHVlLm5hbWUgfHwgXCJibG9iXCI7XG4gICAgICAgICAgICAgICAgY29uc3QgaGVhZGVycyA9ICgwLCBodHRwSGVhZGVyc19qc18xLmNyZWF0ZUh0dHBIZWFkZXJzKSgpO1xuICAgICAgICAgICAgICAgIGhlYWRlcnMuc2V0KFwiQ29udGVudC1EaXNwb3NpdGlvblwiLCBgZm9ybS1kYXRhOyBuYW1lPVwiJHtmaWVsZE5hbWV9XCI7IGZpbGVuYW1lPVwiJHtmaWxlTmFtZX1cImApO1xuICAgICAgICAgICAgICAgIC8vIGFnYWluLCB8fCBpcyB1c2VkIHNpbmNlIGFuIGVtcHR5IHZhbHVlLnR5cGUgbWVhbnMgdGhlIGNvbnRlbnQgdHlwZSBpcyB1bnNldFxuICAgICAgICAgICAgICAgIGhlYWRlcnMuc2V0KFwiQ29udGVudC1UeXBlXCIsIHZhbHVlLnR5cGUgfHwgXCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIik7XG4gICAgICAgICAgICAgICAgcGFydHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgIGJvZHk6IHZhbHVlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJlcXVlc3QubXVsdGlwYXJ0Qm9keSA9IHsgcGFydHMgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZvcm1EYXRhUG9saWN5LmpzLm1hcCIsCiAgICAiLyoqXG4gKiBIZWxwZXJzLlxuICovXG5cbnZhciBzID0gMTAwMDtcbnZhciBtID0gcyAqIDYwO1xudmFyIGggPSBtICogNjA7XG52YXIgZCA9IGggKiAyNDtcbnZhciB3ID0gZCAqIDc7XG52YXIgeSA9IGQgKiAzNjUuMjU7XG5cbi8qKlxuICogUGFyc2Ugb3IgZm9ybWF0IHRoZSBnaXZlbiBgdmFsYC5cbiAqXG4gKiBPcHRpb25zOlxuICpcbiAqICAtIGBsb25nYCB2ZXJib3NlIGZvcm1hdHRpbmcgW2ZhbHNlXVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfE51bWJlcn0gdmFsXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhyb3cgYW4gZXJyb3IgaWYgdmFsIGlzIG5vdCBhIG5vbi1lbXB0eSBzdHJpbmcgb3IgYSBudW1iZXJcbiAqIEByZXR1cm4ge1N0cmluZ3xOdW1iZXJ9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHZhbCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsO1xuICBpZiAodHlwZSA9PT0gJ3N0cmluZycgJiYgdmFsLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gcGFyc2UodmFsKTtcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZSh2YWwpKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMubG9uZyA/IGZtdExvbmcodmFsKSA6IGZtdFNob3J0KHZhbCk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgICd2YWwgaXMgbm90IGEgbm9uLWVtcHR5IHN0cmluZyBvciBhIHZhbGlkIG51bWJlci4gdmFsPScgK1xuICAgICAgSlNPTi5zdHJpbmdpZnkodmFsKVxuICApO1xufTtcblxuLyoqXG4gKiBQYXJzZSB0aGUgZ2l2ZW4gYHN0cmAgYW5kIHJldHVybiBtaWxsaXNlY29uZHMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHJldHVybiB7TnVtYmVyfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gcGFyc2Uoc3RyKSB7XG4gIHN0ciA9IFN0cmluZyhzdHIpO1xuICBpZiAoc3RyLmxlbmd0aCA+IDEwMCkge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgbWF0Y2ggPSAvXigtPyg/OlxcZCspP1xcLj9cXGQrKSAqKG1pbGxpc2Vjb25kcz98bXNlY3M/fG1zfHNlY29uZHM/fHNlY3M/fHN8bWludXRlcz98bWlucz98bXxob3Vycz98aHJzP3xofGRheXM/fGR8d2Vla3M/fHd8eWVhcnM/fHlycz98eSk/JC9pLmV4ZWMoXG4gICAgc3RyXG4gICk7XG4gIGlmICghbWF0Y2gpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIG4gPSBwYXJzZUZsb2F0KG1hdGNoWzFdKTtcbiAgdmFyIHR5cGUgPSAobWF0Y2hbMl0gfHwgJ21zJykudG9Mb3dlckNhc2UoKTtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAneWVhcnMnOlxuICAgIGNhc2UgJ3llYXInOlxuICAgIGNhc2UgJ3lycyc6XG4gICAgY2FzZSAneXInOlxuICAgIGNhc2UgJ3knOlxuICAgICAgcmV0dXJuIG4gKiB5O1xuICAgIGNhc2UgJ3dlZWtzJzpcbiAgICBjYXNlICd3ZWVrJzpcbiAgICBjYXNlICd3JzpcbiAgICAgIHJldHVybiBuICogdztcbiAgICBjYXNlICdkYXlzJzpcbiAgICBjYXNlICdkYXknOlxuICAgIGNhc2UgJ2QnOlxuICAgICAgcmV0dXJuIG4gKiBkO1xuICAgIGNhc2UgJ2hvdXJzJzpcbiAgICBjYXNlICdob3VyJzpcbiAgICBjYXNlICdocnMnOlxuICAgIGNhc2UgJ2hyJzpcbiAgICBjYXNlICdoJzpcbiAgICAgIHJldHVybiBuICogaDtcbiAgICBjYXNlICdtaW51dGVzJzpcbiAgICBjYXNlICdtaW51dGUnOlxuICAgIGNhc2UgJ21pbnMnOlxuICAgIGNhc2UgJ21pbic6XG4gICAgY2FzZSAnbSc6XG4gICAgICByZXR1cm4gbiAqIG07XG4gICAgY2FzZSAnc2Vjb25kcyc6XG4gICAgY2FzZSAnc2Vjb25kJzpcbiAgICBjYXNlICdzZWNzJzpcbiAgICBjYXNlICdzZWMnOlxuICAgIGNhc2UgJ3MnOlxuICAgICAgcmV0dXJuIG4gKiBzO1xuICAgIGNhc2UgJ21pbGxpc2Vjb25kcyc6XG4gICAgY2FzZSAnbWlsbGlzZWNvbmQnOlxuICAgIGNhc2UgJ21zZWNzJzpcbiAgICBjYXNlICdtc2VjJzpcbiAgICBjYXNlICdtcyc6XG4gICAgICByZXR1cm4gbjtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIFNob3J0IGZvcm1hdCBmb3IgYG1zYC5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gbXNcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGZtdFNob3J0KG1zKSB7XG4gIHZhciBtc0FicyA9IE1hdGguYWJzKG1zKTtcbiAgaWYgKG1zQWJzID49IGQpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIGQpICsgJ2QnO1xuICB9XG4gIGlmIChtc0FicyA+PSBoKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBoKSArICdoJztcbiAgfVxuICBpZiAobXNBYnMgPj0gbSkge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gbSkgKyAnbSc7XG4gIH1cbiAgaWYgKG1zQWJzID49IHMpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIHMpICsgJ3MnO1xuICB9XG4gIHJldHVybiBtcyArICdtcyc7XG59XG5cbi8qKlxuICogTG9uZyBmb3JtYXQgZm9yIGBtc2AuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IG1zXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBmbXRMb25nKG1zKSB7XG4gIHZhciBtc0FicyA9IE1hdGguYWJzKG1zKTtcbiAgaWYgKG1zQWJzID49IGQpIHtcbiAgICByZXR1cm4gcGx1cmFsKG1zLCBtc0FicywgZCwgJ2RheScpO1xuICB9XG4gIGlmIChtc0FicyA+PSBoKSB7XG4gICAgcmV0dXJuIHBsdXJhbChtcywgbXNBYnMsIGgsICdob3VyJyk7XG4gIH1cbiAgaWYgKG1zQWJzID49IG0pIHtcbiAgICByZXR1cm4gcGx1cmFsKG1zLCBtc0FicywgbSwgJ21pbnV0ZScpO1xuICB9XG4gIGlmIChtc0FicyA+PSBzKSB7XG4gICAgcmV0dXJuIHBsdXJhbChtcywgbXNBYnMsIHMsICdzZWNvbmQnKTtcbiAgfVxuICByZXR1cm4gbXMgKyAnIG1zJztcbn1cblxuLyoqXG4gKiBQbHVyYWxpemF0aW9uIGhlbHBlci5cbiAqL1xuXG5mdW5jdGlvbiBwbHVyYWwobXMsIG1zQWJzLCBuLCBuYW1lKSB7XG4gIHZhciBpc1BsdXJhbCA9IG1zQWJzID49IG4gKiAxLjU7XG4gIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gbikgKyAnICcgKyBuYW1lICsgKGlzUGx1cmFsID8gJ3MnIDogJycpO1xufVxuIiwKICAgICJcbi8qKlxuICogVGhpcyBpcyB0aGUgY29tbW9uIGxvZ2ljIGZvciBib3RoIHRoZSBOb2RlLmpzIGFuZCB3ZWIgYnJvd3NlclxuICogaW1wbGVtZW50YXRpb25zIG9mIGBkZWJ1ZygpYC5cbiAqL1xuXG5mdW5jdGlvbiBzZXR1cChlbnYpIHtcblx0Y3JlYXRlRGVidWcuZGVidWcgPSBjcmVhdGVEZWJ1Zztcblx0Y3JlYXRlRGVidWcuZGVmYXVsdCA9IGNyZWF0ZURlYnVnO1xuXHRjcmVhdGVEZWJ1Zy5jb2VyY2UgPSBjb2VyY2U7XG5cdGNyZWF0ZURlYnVnLmRpc2FibGUgPSBkaXNhYmxlO1xuXHRjcmVhdGVEZWJ1Zy5lbmFibGUgPSBlbmFibGU7XG5cdGNyZWF0ZURlYnVnLmVuYWJsZWQgPSBlbmFibGVkO1xuXHRjcmVhdGVEZWJ1Zy5odW1hbml6ZSA9IHJlcXVpcmUoJ21zJyk7XG5cdGNyZWF0ZURlYnVnLmRlc3Ryb3kgPSBkZXN0cm95O1xuXG5cdE9iamVjdC5rZXlzKGVudikuZm9yRWFjaChrZXkgPT4ge1xuXHRcdGNyZWF0ZURlYnVnW2tleV0gPSBlbnZba2V5XTtcblx0fSk7XG5cblx0LyoqXG5cdCogVGhlIGN1cnJlbnRseSBhY3RpdmUgZGVidWcgbW9kZSBuYW1lcywgYW5kIG5hbWVzIHRvIHNraXAuXG5cdCovXG5cblx0Y3JlYXRlRGVidWcubmFtZXMgPSBbXTtcblx0Y3JlYXRlRGVidWcuc2tpcHMgPSBbXTtcblxuXHQvKipcblx0KiBNYXAgb2Ygc3BlY2lhbCBcIiVuXCIgaGFuZGxpbmcgZnVuY3Rpb25zLCBmb3IgdGhlIGRlYnVnIFwiZm9ybWF0XCIgYXJndW1lbnQuXG5cdCpcblx0KiBWYWxpZCBrZXkgbmFtZXMgYXJlIGEgc2luZ2xlLCBsb3dlciBvciB1cHBlci1jYXNlIGxldHRlciwgaS5lLiBcIm5cIiBhbmQgXCJOXCIuXG5cdCovXG5cdGNyZWF0ZURlYnVnLmZvcm1hdHRlcnMgPSB7fTtcblxuXHQvKipcblx0KiBTZWxlY3RzIGEgY29sb3IgZm9yIGEgZGVidWcgbmFtZXNwYWNlXG5cdCogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZSBUaGUgbmFtZXNwYWNlIHN0cmluZyBmb3IgdGhlIGRlYnVnIGluc3RhbmNlIHRvIGJlIGNvbG9yZWRcblx0KiBAcmV0dXJuIHtOdW1iZXJ8U3RyaW5nfSBBbiBBTlNJIGNvbG9yIGNvZGUgZm9yIHRoZSBnaXZlbiBuYW1lc3BhY2Vcblx0KiBAYXBpIHByaXZhdGVcblx0Ki9cblx0ZnVuY3Rpb24gc2VsZWN0Q29sb3IobmFtZXNwYWNlKSB7XG5cdFx0bGV0IGhhc2ggPSAwO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBuYW1lc3BhY2UubGVuZ3RoOyBpKyspIHtcblx0XHRcdGhhc2ggPSAoKGhhc2ggPDwgNSkgLSBoYXNoKSArIG5hbWVzcGFjZS5jaGFyQ29kZUF0KGkpO1xuXHRcdFx0aGFzaCB8PSAwOyAvLyBDb252ZXJ0IHRvIDMyYml0IGludGVnZXJcblx0XHR9XG5cblx0XHRyZXR1cm4gY3JlYXRlRGVidWcuY29sb3JzW01hdGguYWJzKGhhc2gpICUgY3JlYXRlRGVidWcuY29sb3JzLmxlbmd0aF07XG5cdH1cblx0Y3JlYXRlRGVidWcuc2VsZWN0Q29sb3IgPSBzZWxlY3RDb2xvcjtcblxuXHQvKipcblx0KiBDcmVhdGUgYSBkZWJ1Z2dlciB3aXRoIHRoZSBnaXZlbiBgbmFtZXNwYWNlYC5cblx0KlxuXHQqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2Vcblx0KiBAcmV0dXJuIHtGdW5jdGlvbn1cblx0KiBAYXBpIHB1YmxpY1xuXHQqL1xuXHRmdW5jdGlvbiBjcmVhdGVEZWJ1ZyhuYW1lc3BhY2UpIHtcblx0XHRsZXQgcHJldlRpbWU7XG5cdFx0bGV0IGVuYWJsZU92ZXJyaWRlID0gbnVsbDtcblx0XHRsZXQgbmFtZXNwYWNlc0NhY2hlO1xuXHRcdGxldCBlbmFibGVkQ2FjaGU7XG5cblx0XHRmdW5jdGlvbiBkZWJ1ZyguLi5hcmdzKSB7XG5cdFx0XHQvLyBEaXNhYmxlZD9cblx0XHRcdGlmICghZGVidWcuZW5hYmxlZCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHNlbGYgPSBkZWJ1ZztcblxuXHRcdFx0Ly8gU2V0IGBkaWZmYCB0aW1lc3RhbXBcblx0XHRcdGNvbnN0IGN1cnIgPSBOdW1iZXIobmV3IERhdGUoKSk7XG5cdFx0XHRjb25zdCBtcyA9IGN1cnIgLSAocHJldlRpbWUgfHwgY3Vycik7XG5cdFx0XHRzZWxmLmRpZmYgPSBtcztcblx0XHRcdHNlbGYucHJldiA9IHByZXZUaW1lO1xuXHRcdFx0c2VsZi5jdXJyID0gY3Vycjtcblx0XHRcdHByZXZUaW1lID0gY3VycjtcblxuXHRcdFx0YXJnc1swXSA9IGNyZWF0ZURlYnVnLmNvZXJjZShhcmdzWzBdKTtcblxuXHRcdFx0aWYgKHR5cGVvZiBhcmdzWzBdICE9PSAnc3RyaW5nJykge1xuXHRcdFx0XHQvLyBBbnl0aGluZyBlbHNlIGxldCdzIGluc3BlY3Qgd2l0aCAlT1xuXHRcdFx0XHRhcmdzLnVuc2hpZnQoJyVPJyk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFwcGx5IGFueSBgZm9ybWF0dGVyc2AgdHJhbnNmb3JtYXRpb25zXG5cdFx0XHRsZXQgaW5kZXggPSAwO1xuXHRcdFx0YXJnc1swXSA9IGFyZ3NbMF0ucmVwbGFjZSgvJShbYS16QS1aJV0pL2csIChtYXRjaCwgZm9ybWF0KSA9PiB7XG5cdFx0XHRcdC8vIElmIHdlIGVuY291bnRlciBhbiBlc2NhcGVkICUgdGhlbiBkb24ndCBpbmNyZWFzZSB0aGUgYXJyYXkgaW5kZXhcblx0XHRcdFx0aWYgKG1hdGNoID09PSAnJSUnKSB7XG5cdFx0XHRcdFx0cmV0dXJuICclJztcblx0XHRcdFx0fVxuXHRcdFx0XHRpbmRleCsrO1xuXHRcdFx0XHRjb25zdCBmb3JtYXR0ZXIgPSBjcmVhdGVEZWJ1Zy5mb3JtYXR0ZXJzW2Zvcm1hdF07XG5cdFx0XHRcdGlmICh0eXBlb2YgZm9ybWF0dGVyID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0Y29uc3QgdmFsID0gYXJnc1tpbmRleF07XG5cdFx0XHRcdFx0bWF0Y2ggPSBmb3JtYXR0ZXIuY2FsbChzZWxmLCB2YWwpO1xuXG5cdFx0XHRcdFx0Ly8gTm93IHdlIG5lZWQgdG8gcmVtb3ZlIGBhcmdzW2luZGV4XWAgc2luY2UgaXQncyBpbmxpbmVkIGluIHRoZSBgZm9ybWF0YFxuXHRcdFx0XHRcdGFyZ3Muc3BsaWNlKGluZGV4LCAxKTtcblx0XHRcdFx0XHRpbmRleC0tO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBtYXRjaDtcblx0XHRcdH0pO1xuXG5cdFx0XHQvLyBBcHBseSBlbnYtc3BlY2lmaWMgZm9ybWF0dGluZyAoY29sb3JzLCBldGMuKVxuXHRcdFx0Y3JlYXRlRGVidWcuZm9ybWF0QXJncy5jYWxsKHNlbGYsIGFyZ3MpO1xuXG5cdFx0XHRjb25zdCBsb2dGbiA9IHNlbGYubG9nIHx8IGNyZWF0ZURlYnVnLmxvZztcblx0XHRcdGxvZ0ZuLmFwcGx5KHNlbGYsIGFyZ3MpO1xuXHRcdH1cblxuXHRcdGRlYnVnLm5hbWVzcGFjZSA9IG5hbWVzcGFjZTtcblx0XHRkZWJ1Zy51c2VDb2xvcnMgPSBjcmVhdGVEZWJ1Zy51c2VDb2xvcnMoKTtcblx0XHRkZWJ1Zy5jb2xvciA9IGNyZWF0ZURlYnVnLnNlbGVjdENvbG9yKG5hbWVzcGFjZSk7XG5cdFx0ZGVidWcuZXh0ZW5kID0gZXh0ZW5kO1xuXHRcdGRlYnVnLmRlc3Ryb3kgPSBjcmVhdGVEZWJ1Zy5kZXN0cm95OyAvLyBYWFggVGVtcG9yYXJ5LiBXaWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZS5cblxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkZWJ1ZywgJ2VuYWJsZWQnLCB7XG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcblx0XHRcdGdldDogKCkgPT4ge1xuXHRcdFx0XHRpZiAoZW5hYmxlT3ZlcnJpZGUgIT09IG51bGwpIHtcblx0XHRcdFx0XHRyZXR1cm4gZW5hYmxlT3ZlcnJpZGU7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG5hbWVzcGFjZXNDYWNoZSAhPT0gY3JlYXRlRGVidWcubmFtZXNwYWNlcykge1xuXHRcdFx0XHRcdG5hbWVzcGFjZXNDYWNoZSA9IGNyZWF0ZURlYnVnLm5hbWVzcGFjZXM7XG5cdFx0XHRcdFx0ZW5hYmxlZENhY2hlID0gY3JlYXRlRGVidWcuZW5hYmxlZChuYW1lc3BhY2UpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGVuYWJsZWRDYWNoZTtcblx0XHRcdH0sXG5cdFx0XHRzZXQ6IHYgPT4ge1xuXHRcdFx0XHRlbmFibGVPdmVycmlkZSA9IHY7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHQvLyBFbnYtc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gbG9naWMgZm9yIGRlYnVnIGluc3RhbmNlc1xuXHRcdGlmICh0eXBlb2YgY3JlYXRlRGVidWcuaW5pdCA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0Y3JlYXRlRGVidWcuaW5pdChkZWJ1Zyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGRlYnVnO1xuXHR9XG5cblx0ZnVuY3Rpb24gZXh0ZW5kKG5hbWVzcGFjZSwgZGVsaW1pdGVyKSB7XG5cdFx0Y29uc3QgbmV3RGVidWcgPSBjcmVhdGVEZWJ1Zyh0aGlzLm5hbWVzcGFjZSArICh0eXBlb2YgZGVsaW1pdGVyID09PSAndW5kZWZpbmVkJyA/ICc6JyA6IGRlbGltaXRlcikgKyBuYW1lc3BhY2UpO1xuXHRcdG5ld0RlYnVnLmxvZyA9IHRoaXMubG9nO1xuXHRcdHJldHVybiBuZXdEZWJ1Zztcblx0fVxuXG5cdC8qKlxuXHQqIEVuYWJsZXMgYSBkZWJ1ZyBtb2RlIGJ5IG5hbWVzcGFjZXMuIFRoaXMgY2FuIGluY2x1ZGUgbW9kZXNcblx0KiBzZXBhcmF0ZWQgYnkgYSBjb2xvbiBhbmQgd2lsZGNhcmRzLlxuXHQqXG5cdCogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZXNcblx0KiBAYXBpIHB1YmxpY1xuXHQqL1xuXHRmdW5jdGlvbiBlbmFibGUobmFtZXNwYWNlcykge1xuXHRcdGNyZWF0ZURlYnVnLnNhdmUobmFtZXNwYWNlcyk7XG5cdFx0Y3JlYXRlRGVidWcubmFtZXNwYWNlcyA9IG5hbWVzcGFjZXM7XG5cblx0XHRjcmVhdGVEZWJ1Zy5uYW1lcyA9IFtdO1xuXHRcdGNyZWF0ZURlYnVnLnNraXBzID0gW107XG5cblx0XHRsZXQgaTtcblx0XHRjb25zdCBzcGxpdCA9ICh0eXBlb2YgbmFtZXNwYWNlcyA9PT0gJ3N0cmluZycgPyBuYW1lc3BhY2VzIDogJycpLnNwbGl0KC9bXFxzLF0rLyk7XG5cdFx0Y29uc3QgbGVuID0gc3BsaXQubGVuZ3RoO1xuXG5cdFx0Zm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0XHRpZiAoIXNwbGl0W2ldKSB7XG5cdFx0XHRcdC8vIGlnbm9yZSBlbXB0eSBzdHJpbmdzXG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRuYW1lc3BhY2VzID0gc3BsaXRbaV0ucmVwbGFjZSgvXFwqL2csICcuKj8nKTtcblxuXHRcdFx0aWYgKG5hbWVzcGFjZXNbMF0gPT09ICctJykge1xuXHRcdFx0XHRjcmVhdGVEZWJ1Zy5za2lwcy5wdXNoKG5ldyBSZWdFeHAoJ14nICsgbmFtZXNwYWNlcy5zbGljZSgxKSArICckJykpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y3JlYXRlRGVidWcubmFtZXMucHVzaChuZXcgUmVnRXhwKCdeJyArIG5hbWVzcGFjZXMgKyAnJCcpKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0KiBEaXNhYmxlIGRlYnVnIG91dHB1dC5cblx0KlxuXHQqIEByZXR1cm4ge1N0cmluZ30gbmFtZXNwYWNlc1xuXHQqIEBhcGkgcHVibGljXG5cdCovXG5cdGZ1bmN0aW9uIGRpc2FibGUoKSB7XG5cdFx0Y29uc3QgbmFtZXNwYWNlcyA9IFtcblx0XHRcdC4uLmNyZWF0ZURlYnVnLm5hbWVzLm1hcCh0b05hbWVzcGFjZSksXG5cdFx0XHQuLi5jcmVhdGVEZWJ1Zy5za2lwcy5tYXAodG9OYW1lc3BhY2UpLm1hcChuYW1lc3BhY2UgPT4gJy0nICsgbmFtZXNwYWNlKVxuXHRcdF0uam9pbignLCcpO1xuXHRcdGNyZWF0ZURlYnVnLmVuYWJsZSgnJyk7XG5cdFx0cmV0dXJuIG5hbWVzcGFjZXM7XG5cdH1cblxuXHQvKipcblx0KiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIG1vZGUgbmFtZSBpcyBlbmFibGVkLCBmYWxzZSBvdGhlcndpc2UuXG5cdCpcblx0KiBAcGFyYW0ge1N0cmluZ30gbmFtZVxuXHQqIEByZXR1cm4ge0Jvb2xlYW59XG5cdCogQGFwaSBwdWJsaWNcblx0Ki9cblx0ZnVuY3Rpb24gZW5hYmxlZChuYW1lKSB7XG5cdFx0aWYgKG5hbWVbbmFtZS5sZW5ndGggLSAxXSA9PT0gJyonKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRsZXQgaTtcblx0XHRsZXQgbGVuO1xuXG5cdFx0Zm9yIChpID0gMCwgbGVuID0gY3JlYXRlRGVidWcuc2tpcHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcblx0XHRcdGlmIChjcmVhdGVEZWJ1Zy5za2lwc1tpXS50ZXN0KG5hbWUpKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmb3IgKGkgPSAwLCBsZW4gPSBjcmVhdGVEZWJ1Zy5uYW1lcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuXHRcdFx0aWYgKGNyZWF0ZURlYnVnLm5hbWVzW2ldLnRlc3QobmFtZSkpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCogQ29udmVydCByZWdleHAgdG8gbmFtZXNwYWNlXG5cdCpcblx0KiBAcGFyYW0ge1JlZ0V4cH0gcmVneGVwXG5cdCogQHJldHVybiB7U3RyaW5nfSBuYW1lc3BhY2Vcblx0KiBAYXBpIHByaXZhdGVcblx0Ki9cblx0ZnVuY3Rpb24gdG9OYW1lc3BhY2UocmVnZXhwKSB7XG5cdFx0cmV0dXJuIHJlZ2V4cC50b1N0cmluZygpXG5cdFx0XHQuc3Vic3RyaW5nKDIsIHJlZ2V4cC50b1N0cmluZygpLmxlbmd0aCAtIDIpXG5cdFx0XHQucmVwbGFjZSgvXFwuXFwqXFw/JC8sICcqJyk7XG5cdH1cblxuXHQvKipcblx0KiBDb2VyY2UgYHZhbGAuXG5cdCpcblx0KiBAcGFyYW0ge01peGVkfSB2YWxcblx0KiBAcmV0dXJuIHtNaXhlZH1cblx0KiBAYXBpIHByaXZhdGVcblx0Ki9cblx0ZnVuY3Rpb24gY29lcmNlKHZhbCkge1xuXHRcdGlmICh2YWwgaW5zdGFuY2VvZiBFcnJvcikge1xuXHRcdFx0cmV0dXJuIHZhbC5zdGFjayB8fCB2YWwubWVzc2FnZTtcblx0XHR9XG5cdFx0cmV0dXJuIHZhbDtcblx0fVxuXG5cdC8qKlxuXHQqIFhYWCBETyBOT1QgVVNFLiBUaGlzIGlzIGEgdGVtcG9yYXJ5IHN0dWIgZnVuY3Rpb24uXG5cdCogWFhYIEl0IFdJTEwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlLlxuXHQqL1xuXHRmdW5jdGlvbiBkZXN0cm95KCkge1xuXHRcdGNvbnNvbGUud2FybignSW5zdGFuY2UgbWV0aG9kIGBkZWJ1Zy5kZXN0cm95KClgIGlzIGRlcHJlY2F0ZWQgYW5kIG5vIGxvbmdlciBkb2VzIGFueXRoaW5nLiBJdCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbiBvZiBgZGVidWdgLicpO1xuXHR9XG5cblx0Y3JlYXRlRGVidWcuZW5hYmxlKGNyZWF0ZURlYnVnLmxvYWQoKSk7XG5cblx0cmV0dXJuIGNyZWF0ZURlYnVnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldHVwO1xuIiwKICAgICIvKiBlc2xpbnQtZW52IGJyb3dzZXIgKi9cblxuLyoqXG4gKiBUaGlzIGlzIHRoZSB3ZWIgYnJvd3NlciBpbXBsZW1lbnRhdGlvbiBvZiBgZGVidWcoKWAuXG4gKi9cblxuZXhwb3J0cy5mb3JtYXRBcmdzID0gZm9ybWF0QXJncztcbmV4cG9ydHMuc2F2ZSA9IHNhdmU7XG5leHBvcnRzLmxvYWQgPSBsb2FkO1xuZXhwb3J0cy51c2VDb2xvcnMgPSB1c2VDb2xvcnM7XG5leHBvcnRzLnN0b3JhZ2UgPSBsb2NhbHN0b3JhZ2UoKTtcbmV4cG9ydHMuZGVzdHJveSA9ICgoKSA9PiB7XG5cdGxldCB3YXJuZWQgPSBmYWxzZTtcblxuXHRyZXR1cm4gKCkgPT4ge1xuXHRcdGlmICghd2FybmVkKSB7XG5cdFx0XHR3YXJuZWQgPSB0cnVlO1xuXHRcdFx0Y29uc29sZS53YXJuKCdJbnN0YW5jZSBtZXRob2QgYGRlYnVnLmRlc3Ryb3koKWAgaXMgZGVwcmVjYXRlZCBhbmQgbm8gbG9uZ2VyIGRvZXMgYW55dGhpbmcuIEl0IHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIGBkZWJ1Z2AuJyk7XG5cdFx0fVxuXHR9O1xufSkoKTtcblxuLyoqXG4gKiBDb2xvcnMuXG4gKi9cblxuZXhwb3J0cy5jb2xvcnMgPSBbXG5cdCcjMDAwMENDJyxcblx0JyMwMDAwRkYnLFxuXHQnIzAwMzNDQycsXG5cdCcjMDAzM0ZGJyxcblx0JyMwMDY2Q0MnLFxuXHQnIzAwNjZGRicsXG5cdCcjMDA5OUNDJyxcblx0JyMwMDk5RkYnLFxuXHQnIzAwQ0MwMCcsXG5cdCcjMDBDQzMzJyxcblx0JyMwMENDNjYnLFxuXHQnIzAwQ0M5OScsXG5cdCcjMDBDQ0NDJyxcblx0JyMwMENDRkYnLFxuXHQnIzMzMDBDQycsXG5cdCcjMzMwMEZGJyxcblx0JyMzMzMzQ0MnLFxuXHQnIzMzMzNGRicsXG5cdCcjMzM2NkNDJyxcblx0JyMzMzY2RkYnLFxuXHQnIzMzOTlDQycsXG5cdCcjMzM5OUZGJyxcblx0JyMzM0NDMDAnLFxuXHQnIzMzQ0MzMycsXG5cdCcjMzNDQzY2Jyxcblx0JyMzM0NDOTknLFxuXHQnIzMzQ0NDQycsXG5cdCcjMzNDQ0ZGJyxcblx0JyM2NjAwQ0MnLFxuXHQnIzY2MDBGRicsXG5cdCcjNjYzM0NDJyxcblx0JyM2NjMzRkYnLFxuXHQnIzY2Q0MwMCcsXG5cdCcjNjZDQzMzJyxcblx0JyM5OTAwQ0MnLFxuXHQnIzk5MDBGRicsXG5cdCcjOTkzM0NDJyxcblx0JyM5OTMzRkYnLFxuXHQnIzk5Q0MwMCcsXG5cdCcjOTlDQzMzJyxcblx0JyNDQzAwMDAnLFxuXHQnI0NDMDAzMycsXG5cdCcjQ0MwMDY2Jyxcblx0JyNDQzAwOTknLFxuXHQnI0NDMDBDQycsXG5cdCcjQ0MwMEZGJyxcblx0JyNDQzMzMDAnLFxuXHQnI0NDMzMzMycsXG5cdCcjQ0MzMzY2Jyxcblx0JyNDQzMzOTknLFxuXHQnI0NDMzNDQycsXG5cdCcjQ0MzM0ZGJyxcblx0JyNDQzY2MDAnLFxuXHQnI0NDNjYzMycsXG5cdCcjQ0M5OTAwJyxcblx0JyNDQzk5MzMnLFxuXHQnI0NDQ0MwMCcsXG5cdCcjQ0NDQzMzJyxcblx0JyNGRjAwMDAnLFxuXHQnI0ZGMDAzMycsXG5cdCcjRkYwMDY2Jyxcblx0JyNGRjAwOTknLFxuXHQnI0ZGMDBDQycsXG5cdCcjRkYwMEZGJyxcblx0JyNGRjMzMDAnLFxuXHQnI0ZGMzMzMycsXG5cdCcjRkYzMzY2Jyxcblx0JyNGRjMzOTknLFxuXHQnI0ZGMzNDQycsXG5cdCcjRkYzM0ZGJyxcblx0JyNGRjY2MDAnLFxuXHQnI0ZGNjYzMycsXG5cdCcjRkY5OTAwJyxcblx0JyNGRjk5MzMnLFxuXHQnI0ZGQ0MwMCcsXG5cdCcjRkZDQzMzJ1xuXTtcblxuLyoqXG4gKiBDdXJyZW50bHkgb25seSBXZWJLaXQtYmFzZWQgV2ViIEluc3BlY3RvcnMsIEZpcmVmb3ggPj0gdjMxLFxuICogYW5kIHRoZSBGaXJlYnVnIGV4dGVuc2lvbiAoYW55IEZpcmVmb3ggdmVyc2lvbikgYXJlIGtub3duXG4gKiB0byBzdXBwb3J0IFwiJWNcIiBDU1MgY3VzdG9taXphdGlvbnMuXG4gKlxuICogVE9ETzogYWRkIGEgYGxvY2FsU3RvcmFnZWAgdmFyaWFibGUgdG8gZXhwbGljaXRseSBlbmFibGUvZGlzYWJsZSBjb2xvcnNcbiAqL1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZnVuY3Rpb24gdXNlQ29sb3JzKCkge1xuXHQvLyBOQjogSW4gYW4gRWxlY3Ryb24gcHJlbG9hZCBzY3JpcHQsIGRvY3VtZW50IHdpbGwgYmUgZGVmaW5lZCBidXQgbm90IGZ1bGx5XG5cdC8vIGluaXRpYWxpemVkLiBTaW5jZSB3ZSBrbm93IHdlJ3JlIGluIENocm9tZSwgd2UnbGwganVzdCBkZXRlY3QgdGhpcyBjYXNlXG5cdC8vIGV4cGxpY2l0bHlcblx0aWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5wcm9jZXNzICYmICh3aW5kb3cucHJvY2Vzcy50eXBlID09PSAncmVuZGVyZXInIHx8IHdpbmRvdy5wcm9jZXNzLl9fbndqcykpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8vIEludGVybmV0IEV4cGxvcmVyIGFuZCBFZGdlIGRvIG5vdCBzdXBwb3J0IGNvbG9ycy5cblx0aWYgKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci51c2VyQWdlbnQgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC8oZWRnZXx0cmlkZW50KVxcLyhcXGQrKS8pKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0bGV0IG07XG5cblx0Ly8gSXMgd2Via2l0PyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8xNjQ1OTYwNi8zNzY3NzNcblx0Ly8gZG9jdW1lbnQgaXMgdW5kZWZpbmVkIGluIHJlYWN0LW5hdGl2ZTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0LW5hdGl2ZS9wdWxsLzE2MzJcblx0cmV0dXJuICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLldlYmtpdEFwcGVhcmFuY2UpIHx8XG5cdFx0Ly8gSXMgZmlyZWJ1Zz8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzk4MTIwLzM3Njc3M1xuXHRcdCh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuY29uc29sZSAmJiAod2luZG93LmNvbnNvbGUuZmlyZWJ1ZyB8fCAod2luZG93LmNvbnNvbGUuZXhjZXB0aW9uICYmIHdpbmRvdy5jb25zb2xlLnRhYmxlKSkpIHx8XG5cdFx0Ly8gSXMgZmlyZWZveCA+PSB2MzE/XG5cdFx0Ly8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9Ub29scy9XZWJfQ29uc29sZSNTdHlsaW5nX21lc3NhZ2VzXG5cdFx0KHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci51c2VyQWdlbnQgJiYgKG0gPSBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goL2ZpcmVmb3hcXC8oXFxkKykvKSkgJiYgcGFyc2VJbnQobVsxXSwgMTApID49IDMxKSB8fFxuXHRcdC8vIERvdWJsZSBjaGVjayB3ZWJraXQgaW4gdXNlckFnZW50IGp1c3QgaW4gY2FzZSB3ZSBhcmUgaW4gYSB3b3JrZXJcblx0XHQodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCAmJiBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goL2FwcGxld2Via2l0XFwvKFxcZCspLykpO1xufVxuXG4vKipcbiAqIENvbG9yaXplIGxvZyBhcmd1bWVudHMgaWYgZW5hYmxlZC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGZvcm1hdEFyZ3MoYXJncykge1xuXHRhcmdzWzBdID0gKHRoaXMudXNlQ29sb3JzID8gJyVjJyA6ICcnKSArXG5cdFx0dGhpcy5uYW1lc3BhY2UgK1xuXHRcdCh0aGlzLnVzZUNvbG9ycyA/ICcgJWMnIDogJyAnKSArXG5cdFx0YXJnc1swXSArXG5cdFx0KHRoaXMudXNlQ29sb3JzID8gJyVjICcgOiAnICcpICtcblx0XHQnKycgKyBtb2R1bGUuZXhwb3J0cy5odW1hbml6ZSh0aGlzLmRpZmYpO1xuXG5cdGlmICghdGhpcy51c2VDb2xvcnMpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRjb25zdCBjID0gJ2NvbG9yOiAnICsgdGhpcy5jb2xvcjtcblx0YXJncy5zcGxpY2UoMSwgMCwgYywgJ2NvbG9yOiBpbmhlcml0Jyk7XG5cblx0Ly8gVGhlIGZpbmFsIFwiJWNcIiBpcyBzb21ld2hhdCB0cmlja3ksIGJlY2F1c2UgdGhlcmUgY291bGQgYmUgb3RoZXJcblx0Ly8gYXJndW1lbnRzIHBhc3NlZCBlaXRoZXIgYmVmb3JlIG9yIGFmdGVyIHRoZSAlYywgc28gd2UgbmVlZCB0b1xuXHQvLyBmaWd1cmUgb3V0IHRoZSBjb3JyZWN0IGluZGV4IHRvIGluc2VydCB0aGUgQ1NTIGludG9cblx0bGV0IGluZGV4ID0gMDtcblx0bGV0IGxhc3RDID0gMDtcblx0YXJnc1swXS5yZXBsYWNlKC8lW2EtekEtWiVdL2csIG1hdGNoID0+IHtcblx0XHRpZiAobWF0Y2ggPT09ICclJScpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aW5kZXgrKztcblx0XHRpZiAobWF0Y2ggPT09ICclYycpIHtcblx0XHRcdC8vIFdlIG9ubHkgYXJlIGludGVyZXN0ZWQgaW4gdGhlICpsYXN0KiAlY1xuXHRcdFx0Ly8gKHRoZSB1c2VyIG1heSBoYXZlIHByb3ZpZGVkIHRoZWlyIG93bilcblx0XHRcdGxhc3RDID0gaW5kZXg7XG5cdFx0fVxuXHR9KTtcblxuXHRhcmdzLnNwbGljZShsYXN0QywgMCwgYyk7XG59XG5cbi8qKlxuICogSW52b2tlcyBgY29uc29sZS5kZWJ1ZygpYCB3aGVuIGF2YWlsYWJsZS5cbiAqIE5vLW9wIHdoZW4gYGNvbnNvbGUuZGVidWdgIGlzIG5vdCBhIFwiZnVuY3Rpb25cIi5cbiAqIElmIGBjb25zb2xlLmRlYnVnYCBpcyBub3QgYXZhaWxhYmxlLCBmYWxscyBiYWNrXG4gKiB0byBgY29uc29sZS5sb2dgLlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cbmV4cG9ydHMubG9nID0gY29uc29sZS5kZWJ1ZyB8fCBjb25zb2xlLmxvZyB8fCAoKCkgPT4ge30pO1xuXG4vKipcbiAqIFNhdmUgYG5hbWVzcGFjZXNgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2VzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gc2F2ZShuYW1lc3BhY2VzKSB7XG5cdHRyeSB7XG5cdFx0aWYgKG5hbWVzcGFjZXMpIHtcblx0XHRcdGV4cG9ydHMuc3RvcmFnZS5zZXRJdGVtKCdkZWJ1ZycsIG5hbWVzcGFjZXMpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRleHBvcnRzLnN0b3JhZ2UucmVtb3ZlSXRlbSgnZGVidWcnKTtcblx0XHR9XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0Ly8gU3dhbGxvd1xuXHRcdC8vIFhYWCAoQFFpeC0pIHNob3VsZCB3ZSBiZSBsb2dnaW5nIHRoZXNlP1xuXHR9XG59XG5cbi8qKlxuICogTG9hZCBgbmFtZXNwYWNlc2AuXG4gKlxuICogQHJldHVybiB7U3RyaW5nfSByZXR1cm5zIHRoZSBwcmV2aW91c2x5IHBlcnNpc3RlZCBkZWJ1ZyBtb2Rlc1xuICogQGFwaSBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGxvYWQoKSB7XG5cdGxldCByO1xuXHR0cnkge1xuXHRcdHIgPSBleHBvcnRzLnN0b3JhZ2UuZ2V0SXRlbSgnZGVidWcnKTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHQvLyBTd2FsbG93XG5cdFx0Ly8gWFhYIChAUWl4LSkgc2hvdWxkIHdlIGJlIGxvZ2dpbmcgdGhlc2U/XG5cdH1cblxuXHQvLyBJZiBkZWJ1ZyBpc24ndCBzZXQgaW4gTFMsIGFuZCB3ZSdyZSBpbiBFbGVjdHJvbiwgdHJ5IHRvIGxvYWQgJERFQlVHXG5cdGlmICghciAmJiB0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgJ2VudicgaW4gcHJvY2Vzcykge1xuXHRcdHIgPSBwcm9jZXNzLmVudi5ERUJVRztcblx0fVxuXG5cdHJldHVybiByO1xufVxuXG4vKipcbiAqIExvY2Fsc3RvcmFnZSBhdHRlbXB0cyB0byByZXR1cm4gdGhlIGxvY2Fsc3RvcmFnZS5cbiAqXG4gKiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHNhZmFyaSB0aHJvd3NcbiAqIHdoZW4gYSB1c2VyIGRpc2FibGVzIGNvb2tpZXMvbG9jYWxzdG9yYWdlXG4gKiBhbmQgeW91IGF0dGVtcHQgdG8gYWNjZXNzIGl0LlxuICpcbiAqIEByZXR1cm4ge0xvY2FsU3RvcmFnZX1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGxvY2Fsc3RvcmFnZSgpIHtcblx0dHJ5IHtcblx0XHQvLyBUVk1MS2l0IChBcHBsZSBUViBKUyBSdW50aW1lKSBkb2VzIG5vdCBoYXZlIGEgd2luZG93IG9iamVjdCwganVzdCBsb2NhbFN0b3JhZ2UgaW4gdGhlIGdsb2JhbCBjb250ZXh0XG5cdFx0Ly8gVGhlIEJyb3dzZXIgYWxzbyBoYXMgbG9jYWxTdG9yYWdlIGluIHRoZSBnbG9iYWwgY29udGV4dC5cblx0XHRyZXR1cm4gbG9jYWxTdG9yYWdlO1xuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdC8vIFN3YWxsb3dcblx0XHQvLyBYWFggKEBRaXgtKSBzaG91bGQgd2UgYmUgbG9nZ2luZyB0aGVzZT9cblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY29tbW9uJykoZXhwb3J0cyk7XG5cbmNvbnN0IHtmb3JtYXR0ZXJzfSA9IG1vZHVsZS5leHBvcnRzO1xuXG4vKipcbiAqIE1hcCAlaiB0byBgSlNPTi5zdHJpbmdpZnkoKWAsIHNpbmNlIG5vIFdlYiBJbnNwZWN0b3JzIGRvIHRoYXQgYnkgZGVmYXVsdC5cbiAqL1xuXG5mb3JtYXR0ZXJzLmogPSBmdW5jdGlvbiAodikge1xuXHR0cnkge1xuXHRcdHJldHVybiBKU09OLnN0cmluZ2lmeSh2KTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRyZXR1cm4gJ1tVbmV4cGVjdGVkSlNPTlBhcnNlRXJyb3JdOiAnICsgZXJyb3IubWVzc2FnZTtcblx0fVxufTtcbiIsCiAgICAiLyoqXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzLlxuICovXG5cbmNvbnN0IHR0eSA9IHJlcXVpcmUoJ3R0eScpO1xuY29uc3QgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcblxuLyoqXG4gKiBUaGlzIGlzIHRoZSBOb2RlLmpzIGltcGxlbWVudGF0aW9uIG9mIGBkZWJ1ZygpYC5cbiAqL1xuXG5leHBvcnRzLmluaXQgPSBpbml0O1xuZXhwb3J0cy5sb2cgPSBsb2c7XG5leHBvcnRzLmZvcm1hdEFyZ3MgPSBmb3JtYXRBcmdzO1xuZXhwb3J0cy5zYXZlID0gc2F2ZTtcbmV4cG9ydHMubG9hZCA9IGxvYWQ7XG5leHBvcnRzLnVzZUNvbG9ycyA9IHVzZUNvbG9ycztcbmV4cG9ydHMuZGVzdHJveSA9IHV0aWwuZGVwcmVjYXRlKFxuXHQoKSA9PiB7fSxcblx0J0luc3RhbmNlIG1ldGhvZCBgZGVidWcuZGVzdHJveSgpYCBpcyBkZXByZWNhdGVkIGFuZCBubyBsb25nZXIgZG9lcyBhbnl0aGluZy4gSXQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24gb2YgYGRlYnVnYC4nXG4pO1xuXG4vKipcbiAqIENvbG9ycy5cbiAqL1xuXG5leHBvcnRzLmNvbG9ycyA9IFs2LCAyLCAzLCA0LCA1LCAxXTtcblxudHJ5IHtcblx0Ly8gT3B0aW9uYWwgZGVwZW5kZW5jeSAoYXMgaW4sIGRvZXNuJ3QgbmVlZCB0byBiZSBpbnN0YWxsZWQsIE5PVCBsaWtlIG9wdGlvbmFsRGVwZW5kZW5jaWVzIGluIHBhY2thZ2UuanNvbilcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llc1xuXHRjb25zdCBzdXBwb3J0c0NvbG9yID0gcmVxdWlyZSgnc3VwcG9ydHMtY29sb3InKTtcblxuXHRpZiAoc3VwcG9ydHNDb2xvciAmJiAoc3VwcG9ydHNDb2xvci5zdGRlcnIgfHwgc3VwcG9ydHNDb2xvcikubGV2ZWwgPj0gMikge1xuXHRcdGV4cG9ydHMuY29sb3JzID0gW1xuXHRcdFx0MjAsXG5cdFx0XHQyMSxcblx0XHRcdDI2LFxuXHRcdFx0MjcsXG5cdFx0XHQzMixcblx0XHRcdDMzLFxuXHRcdFx0MzgsXG5cdFx0XHQzOSxcblx0XHRcdDQwLFxuXHRcdFx0NDEsXG5cdFx0XHQ0Mixcblx0XHRcdDQzLFxuXHRcdFx0NDQsXG5cdFx0XHQ0NSxcblx0XHRcdDU2LFxuXHRcdFx0NTcsXG5cdFx0XHQ2Mixcblx0XHRcdDYzLFxuXHRcdFx0NjgsXG5cdFx0XHQ2OSxcblx0XHRcdDc0LFxuXHRcdFx0NzUsXG5cdFx0XHQ3Nixcblx0XHRcdDc3LFxuXHRcdFx0NzgsXG5cdFx0XHQ3OSxcblx0XHRcdDgwLFxuXHRcdFx0ODEsXG5cdFx0XHQ5Mixcblx0XHRcdDkzLFxuXHRcdFx0OTgsXG5cdFx0XHQ5OSxcblx0XHRcdDExMixcblx0XHRcdDExMyxcblx0XHRcdDEyOCxcblx0XHRcdDEyOSxcblx0XHRcdDEzNCxcblx0XHRcdDEzNSxcblx0XHRcdDE0OCxcblx0XHRcdDE0OSxcblx0XHRcdDE2MCxcblx0XHRcdDE2MSxcblx0XHRcdDE2Mixcblx0XHRcdDE2Myxcblx0XHRcdDE2NCxcblx0XHRcdDE2NSxcblx0XHRcdDE2Nixcblx0XHRcdDE2Nyxcblx0XHRcdDE2OCxcblx0XHRcdDE2OSxcblx0XHRcdDE3MCxcblx0XHRcdDE3MSxcblx0XHRcdDE3Mixcblx0XHRcdDE3Myxcblx0XHRcdDE3OCxcblx0XHRcdDE3OSxcblx0XHRcdDE4NCxcblx0XHRcdDE4NSxcblx0XHRcdDE5Nixcblx0XHRcdDE5Nyxcblx0XHRcdDE5OCxcblx0XHRcdDE5OSxcblx0XHRcdDIwMCxcblx0XHRcdDIwMSxcblx0XHRcdDIwMixcblx0XHRcdDIwMyxcblx0XHRcdDIwNCxcblx0XHRcdDIwNSxcblx0XHRcdDIwNixcblx0XHRcdDIwNyxcblx0XHRcdDIwOCxcblx0XHRcdDIwOSxcblx0XHRcdDIxNCxcblx0XHRcdDIxNSxcblx0XHRcdDIyMCxcblx0XHRcdDIyMVxuXHRcdF07XG5cdH1cbn0gY2F0Y2ggKGVycm9yKSB7XG5cdC8vIFN3YWxsb3cgLSB3ZSBvbmx5IGNhcmUgaWYgYHN1cHBvcnRzLWNvbG9yYCBpcyBhdmFpbGFibGU7IGl0IGRvZXNuJ3QgaGF2ZSB0byBiZS5cbn1cblxuLyoqXG4gKiBCdWlsZCB1cCB0aGUgZGVmYXVsdCBgaW5zcGVjdE9wdHNgIG9iamVjdCBmcm9tIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG4gKlxuICogICAkIERFQlVHX0NPTE9SUz1ubyBERUJVR19ERVBUSD0xMCBERUJVR19TSE9XX0hJRERFTj1lbmFibGVkIG5vZGUgc2NyaXB0LmpzXG4gKi9cblxuZXhwb3J0cy5pbnNwZWN0T3B0cyA9IE9iamVjdC5rZXlzKHByb2Nlc3MuZW52KS5maWx0ZXIoa2V5ID0+IHtcblx0cmV0dXJuIC9eZGVidWdfL2kudGVzdChrZXkpO1xufSkucmVkdWNlKChvYmosIGtleSkgPT4ge1xuXHQvLyBDYW1lbC1jYXNlXG5cdGNvbnN0IHByb3AgPSBrZXlcblx0XHQuc3Vic3RyaW5nKDYpXG5cdFx0LnRvTG93ZXJDYXNlKClcblx0XHQucmVwbGFjZSgvXyhbYS16XSkvZywgKF8sIGspID0+IHtcblx0XHRcdHJldHVybiBrLnRvVXBwZXJDYXNlKCk7XG5cdFx0fSk7XG5cblx0Ly8gQ29lcmNlIHN0cmluZyB2YWx1ZSBpbnRvIEpTIHZhbHVlXG5cdGxldCB2YWwgPSBwcm9jZXNzLmVudltrZXldO1xuXHRpZiAoL14oeWVzfG9ufHRydWV8ZW5hYmxlZCkkL2kudGVzdCh2YWwpKSB7XG5cdFx0dmFsID0gdHJ1ZTtcblx0fSBlbHNlIGlmICgvXihub3xvZmZ8ZmFsc2V8ZGlzYWJsZWQpJC9pLnRlc3QodmFsKSkge1xuXHRcdHZhbCA9IGZhbHNlO1xuXHR9IGVsc2UgaWYgKHZhbCA9PT0gJ251bGwnKSB7XG5cdFx0dmFsID0gbnVsbDtcblx0fSBlbHNlIHtcblx0XHR2YWwgPSBOdW1iZXIodmFsKTtcblx0fVxuXG5cdG9ialtwcm9wXSA9IHZhbDtcblx0cmV0dXJuIG9iajtcbn0sIHt9KTtcblxuLyoqXG4gKiBJcyBzdGRvdXQgYSBUVFk/IENvbG9yZWQgb3V0cHV0IGlzIGVuYWJsZWQgd2hlbiBgdHJ1ZWAuXG4gKi9cblxuZnVuY3Rpb24gdXNlQ29sb3JzKCkge1xuXHRyZXR1cm4gJ2NvbG9ycycgaW4gZXhwb3J0cy5pbnNwZWN0T3B0cyA/XG5cdFx0Qm9vbGVhbihleHBvcnRzLmluc3BlY3RPcHRzLmNvbG9ycykgOlxuXHRcdHR0eS5pc2F0dHkocHJvY2Vzcy5zdGRlcnIuZmQpO1xufVxuXG4vKipcbiAqIEFkZHMgQU5TSSBjb2xvciBlc2NhcGUgY29kZXMgaWYgZW5hYmxlZC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGZvcm1hdEFyZ3MoYXJncykge1xuXHRjb25zdCB7bmFtZXNwYWNlOiBuYW1lLCB1c2VDb2xvcnN9ID0gdGhpcztcblxuXHRpZiAodXNlQ29sb3JzKSB7XG5cdFx0Y29uc3QgYyA9IHRoaXMuY29sb3I7XG5cdFx0Y29uc3QgY29sb3JDb2RlID0gJ1xcdTAwMUJbMycgKyAoYyA8IDggPyBjIDogJzg7NTsnICsgYyk7XG5cdFx0Y29uc3QgcHJlZml4ID0gYCAgJHtjb2xvckNvZGV9OzFtJHtuYW1lfSBcXHUwMDFCWzBtYDtcblxuXHRcdGFyZ3NbMF0gPSBwcmVmaXggKyBhcmdzWzBdLnNwbGl0KCdcXG4nKS5qb2luKCdcXG4nICsgcHJlZml4KTtcblx0XHRhcmdzLnB1c2goY29sb3JDb2RlICsgJ20rJyArIG1vZHVsZS5leHBvcnRzLmh1bWFuaXplKHRoaXMuZGlmZikgKyAnXFx1MDAxQlswbScpO1xuXHR9IGVsc2Uge1xuXHRcdGFyZ3NbMF0gPSBnZXREYXRlKCkgKyBuYW1lICsgJyAnICsgYXJnc1swXTtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXREYXRlKCkge1xuXHRpZiAoZXhwb3J0cy5pbnNwZWN0T3B0cy5oaWRlRGF0ZSkge1xuXHRcdHJldHVybiAnJztcblx0fVxuXHRyZXR1cm4gbmV3IERhdGUoKS50b0lTT1N0cmluZygpICsgJyAnO1xufVxuXG4vKipcbiAqIEludm9rZXMgYHV0aWwuZm9ybWF0V2l0aE9wdGlvbnMoKWAgd2l0aCB0aGUgc3BlY2lmaWVkIGFyZ3VtZW50cyBhbmQgd3JpdGVzIHRvIHN0ZGVyci5cbiAqL1xuXG5mdW5jdGlvbiBsb2coLi4uYXJncykge1xuXHRyZXR1cm4gcHJvY2Vzcy5zdGRlcnIud3JpdGUodXRpbC5mb3JtYXRXaXRoT3B0aW9ucyhleHBvcnRzLmluc3BlY3RPcHRzLCAuLi5hcmdzKSArICdcXG4nKTtcbn1cblxuLyoqXG4gKiBTYXZlIGBuYW1lc3BhY2VzYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlc1xuICogQGFwaSBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNhdmUobmFtZXNwYWNlcykge1xuXHRpZiAobmFtZXNwYWNlcykge1xuXHRcdHByb2Nlc3MuZW52LkRFQlVHID0gbmFtZXNwYWNlcztcblx0fSBlbHNlIHtcblx0XHQvLyBJZiB5b3Ugc2V0IGEgcHJvY2Vzcy5lbnYgZmllbGQgdG8gbnVsbCBvciB1bmRlZmluZWQsIGl0IGdldHMgY2FzdCB0byB0aGVcblx0XHQvLyBzdHJpbmcgJ251bGwnIG9yICd1bmRlZmluZWQnLiBKdXN0IGRlbGV0ZSBpbnN0ZWFkLlxuXHRcdGRlbGV0ZSBwcm9jZXNzLmVudi5ERUJVRztcblx0fVxufVxuXG4vKipcbiAqIExvYWQgYG5hbWVzcGFjZXNgLlxuICpcbiAqIEByZXR1cm4ge1N0cmluZ30gcmV0dXJucyB0aGUgcHJldmlvdXNseSBwZXJzaXN0ZWQgZGVidWcgbW9kZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGxvYWQoKSB7XG5cdHJldHVybiBwcm9jZXNzLmVudi5ERUJVRztcbn1cblxuLyoqXG4gKiBJbml0IGxvZ2ljIGZvciBgZGVidWdgIGluc3RhbmNlcy5cbiAqXG4gKiBDcmVhdGUgYSBuZXcgYGluc3BlY3RPcHRzYCBvYmplY3QgaW4gY2FzZSBgdXNlQ29sb3JzYCBpcyBzZXRcbiAqIGRpZmZlcmVudGx5IGZvciBhIHBhcnRpY3VsYXIgYGRlYnVnYCBpbnN0YW5jZS5cbiAqL1xuXG5mdW5jdGlvbiBpbml0KGRlYnVnKSB7XG5cdGRlYnVnLmluc3BlY3RPcHRzID0ge307XG5cblx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGV4cG9ydHMuaW5zcGVjdE9wdHMpO1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcblx0XHRkZWJ1Zy5pbnNwZWN0T3B0c1trZXlzW2ldXSA9IGV4cG9ydHMuaW5zcGVjdE9wdHNba2V5c1tpXV07XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2NvbW1vbicpKGV4cG9ydHMpO1xuXG5jb25zdCB7Zm9ybWF0dGVyc30gPSBtb2R1bGUuZXhwb3J0cztcblxuLyoqXG4gKiBNYXAgJW8gdG8gYHV0aWwuaW5zcGVjdCgpYCwgYWxsIG9uIGEgc2luZ2xlIGxpbmUuXG4gKi9cblxuZm9ybWF0dGVycy5vID0gZnVuY3Rpb24gKHYpIHtcblx0dGhpcy5pbnNwZWN0T3B0cy5jb2xvcnMgPSB0aGlzLnVzZUNvbG9ycztcblx0cmV0dXJuIHV0aWwuaW5zcGVjdCh2LCB0aGlzLmluc3BlY3RPcHRzKVxuXHRcdC5zcGxpdCgnXFxuJylcblx0XHQubWFwKHN0ciA9PiBzdHIudHJpbSgpKVxuXHRcdC5qb2luKCcgJyk7XG59O1xuXG4vKipcbiAqIE1hcCAlTyB0byBgdXRpbC5pbnNwZWN0KClgLCBhbGxvd2luZyBtdWx0aXBsZSBsaW5lcyBpZiBuZWVkZWQuXG4gKi9cblxuZm9ybWF0dGVycy5PID0gZnVuY3Rpb24gKHYpIHtcblx0dGhpcy5pbnNwZWN0T3B0cy5jb2xvcnMgPSB0aGlzLnVzZUNvbG9ycztcblx0cmV0dXJuIHV0aWwuaW5zcGVjdCh2LCB0aGlzLmluc3BlY3RPcHRzKTtcbn07XG4iLAogICAgIi8qKlxuICogRGV0ZWN0IEVsZWN0cm9uIHJlbmRlcmVyIC8gbndqcyBwcm9jZXNzLCB3aGljaCBpcyBub2RlLCBidXQgd2Ugc2hvdWxkXG4gKiB0cmVhdCBhcyBhIGJyb3dzZXIuXG4gKi9cblxuaWYgKHR5cGVvZiBwcm9jZXNzID09PSAndW5kZWZpbmVkJyB8fCBwcm9jZXNzLnR5cGUgPT09ICdyZW5kZXJlcicgfHwgcHJvY2Vzcy5icm93c2VyID09PSB0cnVlIHx8IHByb2Nlc3MuX19ud2pzKSB7XG5cdG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9icm93c2VyLmpzJyk7XG59IGVsc2Uge1xuXHRtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbm9kZS5qcycpO1xufVxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yZXEgPSBleHBvcnRzLmpzb24gPSBleHBvcnRzLnRvQnVmZmVyID0gdm9pZCAwO1xuY29uc3QgaHR0cCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiaHR0cFwiKSk7XG5jb25zdCBodHRwcyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiaHR0cHNcIikpO1xuYXN5bmMgZnVuY3Rpb24gdG9CdWZmZXIoc3RyZWFtKSB7XG4gICAgbGV0IGxlbmd0aCA9IDA7XG4gICAgY29uc3QgY2h1bmtzID0gW107XG4gICAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBzdHJlYW0pIHtcbiAgICAgICAgbGVuZ3RoICs9IGNodW5rLmxlbmd0aDtcbiAgICAgICAgY2h1bmtzLnB1c2goY2h1bmspO1xuICAgIH1cbiAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChjaHVua3MsIGxlbmd0aCk7XG59XG5leHBvcnRzLnRvQnVmZmVyID0gdG9CdWZmZXI7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuYXN5bmMgZnVuY3Rpb24ganNvbihzdHJlYW0pIHtcbiAgICBjb25zdCBidWYgPSBhd2FpdCB0b0J1ZmZlcihzdHJlYW0pO1xuICAgIGNvbnN0IHN0ciA9IGJ1Zi50b1N0cmluZygndXRmOCcpO1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKHN0cik7XG4gICAgfVxuICAgIGNhdGNoIChfZXJyKSB7XG4gICAgICAgIGNvbnN0IGVyciA9IF9lcnI7XG4gICAgICAgIGVyci5tZXNzYWdlICs9IGAgKGlucHV0OiAke3N0cn0pYDtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbn1cbmV4cG9ydHMuanNvbiA9IGpzb247XG5mdW5jdGlvbiByZXEodXJsLCBvcHRzID0ge30pIHtcbiAgICBjb25zdCBocmVmID0gdHlwZW9mIHVybCA9PT0gJ3N0cmluZycgPyB1cmwgOiB1cmwuaHJlZjtcbiAgICBjb25zdCByZXEgPSAoaHJlZi5zdGFydHNXaXRoKCdodHRwczonKSA/IGh0dHBzIDogaHR0cCkucmVxdWVzdCh1cmwsIG9wdHMpO1xuICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHJlcVxuICAgICAgICAgICAgLm9uY2UoJ3Jlc3BvbnNlJywgcmVzb2x2ZSlcbiAgICAgICAgICAgIC5vbmNlKCdlcnJvcicsIHJlamVjdClcbiAgICAgICAgICAgIC5lbmQoKTtcbiAgICB9KTtcbiAgICByZXEudGhlbiA9IHByb21pc2UudGhlbi5iaW5kKHByb21pc2UpO1xuICAgIHJldHVybiByZXE7XG59XG5leHBvcnRzLnJlcSA9IHJlcTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWhlbHBlcnMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9fZXhwb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19leHBvcnRTdGFyKSB8fCBmdW5jdGlvbihtLCBleHBvcnRzKSB7XG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChleHBvcnRzLCBwKSkgX19jcmVhdGVCaW5kaW5nKGV4cG9ydHMsIG0sIHApO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQWdlbnQgPSB2b2lkIDA7XG5jb25zdCBuZXQgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIm5ldFwiKSk7XG5jb25zdCBodHRwID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJodHRwXCIpKTtcbmNvbnN0IGh0dHBzXzEgPSByZXF1aXJlKFwiaHR0cHNcIik7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vaGVscGVyc1wiKSwgZXhwb3J0cyk7XG5jb25zdCBJTlRFUk5BTCA9IFN5bWJvbCgnQWdlbnRCYXNlSW50ZXJuYWxTdGF0ZScpO1xuY2xhc3MgQWdlbnQgZXh0ZW5kcyBodHRwLkFnZW50IHtcbiAgICBjb25zdHJ1Y3RvcihvcHRzKSB7XG4gICAgICAgIHN1cGVyKG9wdHMpO1xuICAgICAgICB0aGlzW0lOVEVSTkFMXSA9IHt9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmUgd2hldGhlciB0aGlzIGlzIGFuIGBodHRwYCBvciBgaHR0cHNgIHJlcXVlc3QuXG4gICAgICovXG4gICAgaXNTZWN1cmVFbmRwb2ludChvcHRpb25zKSB7XG4gICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICAvLyBGaXJzdCBjaGVjayB0aGUgYHNlY3VyZUVuZHBvaW50YCBwcm9wZXJ0eSBleHBsaWNpdGx5LCBzaW5jZSB0aGlzXG4gICAgICAgICAgICAvLyBtZWFucyB0aGF0IGEgcGFyZW50IGBBZ2VudGAgaXMgXCJwYXNzaW5nIHRocm91Z2hcIiB0byB0aGlzIGluc3RhbmNlLlxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5zZWN1cmVFbmRwb2ludCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMuc2VjdXJlRW5kcG9pbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBJZiBubyBleHBsaWNpdCBgc2VjdXJlYCBlbmRwb2ludCwgY2hlY2sgaWYgYHByb3RvY29sYCBwcm9wZXJ0eSBpc1xuICAgICAgICAgICAgLy8gc2V0LiBUaGlzIHdpbGwgdXN1YWxseSBiZSB0aGUgY2FzZSBzaW5jZSB1c2luZyBhIGZ1bGwgc3RyaW5nIFVSTFxuICAgICAgICAgICAgLy8gb3IgYFVSTGAgaW5zdGFuY2Ugc2hvdWxkIGJlIHRoZSBtb3N0IGNvbW1vbiB1c2FnZS5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5wcm90b2NvbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5wcm90b2NvbCA9PT0gJ2h0dHBzOic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gRmluYWxseSwgaWYgbm8gYHByb3RvY29sYCBwcm9wZXJ0eSB3YXMgc2V0LCB0aGVuIGZhbGwgYmFjayB0b1xuICAgICAgICAvLyBjaGVja2luZyB0aGUgc3RhY2sgdHJhY2Ugb2YgdGhlIGN1cnJlbnQgY2FsbCBzdGFjaywgYW5kIHRyeSB0b1xuICAgICAgICAvLyBkZXRlY3QgdGhlIFwiaHR0cHNcIiBtb2R1bGUuXG4gICAgICAgIGNvbnN0IHsgc3RhY2sgfSA9IG5ldyBFcnJvcigpO1xuICAgICAgICBpZiAodHlwZW9mIHN0YWNrICE9PSAnc3RyaW5nJylcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHN0YWNrXG4gICAgICAgICAgICAuc3BsaXQoJ1xcbicpXG4gICAgICAgICAgICAuc29tZSgobCkgPT4gbC5pbmRleE9mKCcoaHR0cHMuanM6JykgIT09IC0xIHx8XG4gICAgICAgICAgICBsLmluZGV4T2YoJ25vZGU6aHR0cHM6JykgIT09IC0xKTtcbiAgICB9XG4gICAgLy8gSW4gb3JkZXIgdG8gc3VwcG9ydCBhc3luYyBzaWduYXR1cmVzIGluIGBjb25uZWN0KClgIGFuZCBOb2RlJ3MgbmF0aXZlXG4gICAgLy8gY29ubmVjdGlvbiBwb29saW5nIGluIGBodHRwLkFnZW50YCwgdGhlIGFycmF5IG9mIHNvY2tldHMgZm9yIGVhY2ggb3JpZ2luXG4gICAgLy8gaGFzIHRvIGJlIHVwZGF0ZWQgc3luY2hyb25vdXNseS4gVGhpcyBpcyBzbyB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheSBpc1xuICAgIC8vIGFjY3VyYXRlIHdoZW4gYGFkZFJlcXVlc3QoKWAgaXMgbmV4dCBjYWxsZWQuIFdlIGFjaGlldmUgdGhpcyBieSBjcmVhdGluZyBhXG4gICAgLy8gZmFrZSBzb2NrZXQgYW5kIGFkZGluZyBpdCB0byBgc29ja2V0c1tvcmlnaW5dYCBhbmQgaW5jcmVtZW50aW5nXG4gICAgLy8gYHRvdGFsU29ja2V0Q291bnRgLlxuICAgIGluY3JlbWVudFNvY2tldHMobmFtZSkge1xuICAgICAgICAvLyBJZiBgbWF4U29ja2V0c2AgYW5kIGBtYXhUb3RhbFNvY2tldHNgIGFyZSBib3RoIEluZmluaXR5IHRoZW4gdGhlcmUgaXMgbm9cbiAgICAgICAgLy8gbmVlZCB0byBjcmVhdGUgYSBmYWtlIHNvY2tldCBiZWNhdXNlIE5vZGUuanMgbmF0aXZlIGNvbm5lY3Rpb24gcG9vbGluZ1xuICAgICAgICAvLyB3aWxsIG5ldmVyIGJlIGludm9rZWQuXG4gICAgICAgIGlmICh0aGlzLm1heFNvY2tldHMgPT09IEluZmluaXR5ICYmIHRoaXMubWF4VG90YWxTb2NrZXRzID09PSBJbmZpbml0eSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQWxsIGluc3RhbmNlcyBvZiBgc29ja2V0c2AgYXJlIGV4cGVjdGVkIFR5cGVTY3JpcHQgZXJyb3JzLiBUaGVcbiAgICAgICAgLy8gYWx0ZXJuYXRpdmUgaXMgdG8gYWRkIGl0IGFzIGEgcHJpdmF0ZSBwcm9wZXJ0eSBvZiB0aGlzIGNsYXNzIGJ1dCB0aGF0XG4gICAgICAgIC8vIHdpbGwgYnJlYWsgVHlwZVNjcmlwdCBzdWJjbGFzc2luZy5cbiAgICAgICAgaWYgKCF0aGlzLnNvY2tldHNbbmFtZV0pIHtcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgYHNvY2tldHNgIGlzIHJlYWRvbmx5IGluIGBAdHlwZXMvbm9kZWBcbiAgICAgICAgICAgIHRoaXMuc29ja2V0c1tuYW1lXSA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZha2VTb2NrZXQgPSBuZXcgbmV0LlNvY2tldCh7IHdyaXRhYmxlOiBmYWxzZSB9KTtcbiAgICAgICAgdGhpcy5zb2NrZXRzW25hbWVdLnB1c2goZmFrZVNvY2tldCk7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgYHRvdGFsU29ja2V0Q291bnRgIGlzbid0IGRlZmluZWQgaW4gYEB0eXBlcy9ub2RlYFxuICAgICAgICB0aGlzLnRvdGFsU29ja2V0Q291bnQrKztcbiAgICAgICAgcmV0dXJuIGZha2VTb2NrZXQ7XG4gICAgfVxuICAgIGRlY3JlbWVudFNvY2tldHMobmFtZSwgc29ja2V0KSB7XG4gICAgICAgIGlmICghdGhpcy5zb2NrZXRzW25hbWVdIHx8IHNvY2tldCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNvY2tldHMgPSB0aGlzLnNvY2tldHNbbmFtZV07XG4gICAgICAgIGNvbnN0IGluZGV4ID0gc29ja2V0cy5pbmRleE9mKHNvY2tldCk7XG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIHNvY2tldHMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgIGB0b3RhbFNvY2tldENvdW50YCBpc24ndCBkZWZpbmVkIGluIGBAdHlwZXMvbm9kZWBcbiAgICAgICAgICAgIHRoaXMudG90YWxTb2NrZXRDb3VudC0tO1xuICAgICAgICAgICAgaWYgKHNvY2tldHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBgc29ja2V0c2AgaXMgcmVhZG9ubHkgaW4gYEB0eXBlcy9ub2RlYFxuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnNvY2tldHNbbmFtZV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gSW4gb3JkZXIgdG8gcHJvcGVybHkgdXBkYXRlIHRoZSBzb2NrZXQgcG9vbCwgd2UgbmVlZCB0byBjYWxsIGBnZXROYW1lKClgIG9uXG4gICAgLy8gdGhlIGNvcmUgYGh0dHBzLkFnZW50YCBpZiBpdCBpcyBhIHNlY3VyZUVuZHBvaW50LlxuICAgIGdldE5hbWUob3B0aW9ucykge1xuICAgICAgICBjb25zdCBzZWN1cmVFbmRwb2ludCA9IHR5cGVvZiBvcHRpb25zLnNlY3VyZUVuZHBvaW50ID09PSAnYm9vbGVhbidcbiAgICAgICAgICAgID8gb3B0aW9ucy5zZWN1cmVFbmRwb2ludFxuICAgICAgICAgICAgOiB0aGlzLmlzU2VjdXJlRW5kcG9pbnQob3B0aW9ucyk7XG4gICAgICAgIGlmIChzZWN1cmVFbmRwb2ludCkge1xuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBgZ2V0TmFtZSgpYCBpc24ndCBkZWZpbmVkIGluIGBAdHlwZXMvbm9kZWBcbiAgICAgICAgICAgIHJldHVybiBodHRwc18xLkFnZW50LnByb3RvdHlwZS5nZXROYW1lLmNhbGwodGhpcywgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBgZ2V0TmFtZSgpYCBpc24ndCBkZWZpbmVkIGluIGBAdHlwZXMvbm9kZWBcbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldE5hbWUob3B0aW9ucyk7XG4gICAgfVxuICAgIGNyZWF0ZVNvY2tldChyZXEsIG9wdGlvbnMsIGNiKSB7XG4gICAgICAgIGNvbnN0IGNvbm5lY3RPcHRzID0ge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIHNlY3VyZUVuZHBvaW50OiB0aGlzLmlzU2VjdXJlRW5kcG9pbnQob3B0aW9ucyksXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLmdldE5hbWUoY29ubmVjdE9wdHMpO1xuICAgICAgICBjb25zdCBmYWtlU29ja2V0ID0gdGhpcy5pbmNyZW1lbnRTb2NrZXRzKG5hbWUpO1xuICAgICAgICBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5jb25uZWN0KHJlcSwgY29ubmVjdE9wdHMpKVxuICAgICAgICAgICAgLnRoZW4oKHNvY2tldCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5kZWNyZW1lbnRTb2NrZXRzKG5hbWUsIGZha2VTb2NrZXQpO1xuICAgICAgICAgICAgaWYgKHNvY2tldCBpbnN0YW5jZW9mIGh0dHAuQWdlbnQpIHtcbiAgICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGBhZGRSZXF1ZXN0KClgIGlzbid0IGRlZmluZWQgaW4gYEB0eXBlcy9ub2RlYFxuICAgICAgICAgICAgICAgIHJldHVybiBzb2NrZXQuYWRkUmVxdWVzdChyZXEsIGNvbm5lY3RPcHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXNbSU5URVJOQUxdLmN1cnJlbnRTb2NrZXQgPSBzb2NrZXQ7XG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGBjcmVhdGVTb2NrZXQoKWAgaXNuJ3QgZGVmaW5lZCBpbiBgQHR5cGVzL25vZGVgXG4gICAgICAgICAgICBzdXBlci5jcmVhdGVTb2NrZXQocmVxLCBvcHRpb25zLCBjYik7XG4gICAgICAgIH0sIChlcnIpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZGVjcmVtZW50U29ja2V0cyhuYW1lLCBmYWtlU29ja2V0KTtcbiAgICAgICAgICAgIGNiKGVycik7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjcmVhdGVDb25uZWN0aW9uKCkge1xuICAgICAgICBjb25zdCBzb2NrZXQgPSB0aGlzW0lOVEVSTkFMXS5jdXJyZW50U29ja2V0O1xuICAgICAgICB0aGlzW0lOVEVSTkFMXS5jdXJyZW50U29ja2V0ID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoIXNvY2tldCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBzb2NrZXQgd2FzIHJldHVybmVkIGluIHRoZSBgY29ubmVjdCgpYCBmdW5jdGlvbicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzb2NrZXQ7XG4gICAgfVxuICAgIGdldCBkZWZhdWx0UG9ydCgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzW0lOVEVSTkFMXS5kZWZhdWx0UG9ydCA/P1xuICAgICAgICAgICAgKHRoaXMucHJvdG9jb2wgPT09ICdodHRwczonID8gNDQzIDogODApKTtcbiAgICB9XG4gICAgc2V0IGRlZmF1bHRQb3J0KHYpIHtcbiAgICAgICAgaWYgKHRoaXNbSU5URVJOQUxdKSB7XG4gICAgICAgICAgICB0aGlzW0lOVEVSTkFMXS5kZWZhdWx0UG9ydCA9IHY7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IHByb3RvY29sKCkge1xuICAgICAgICByZXR1cm4gKHRoaXNbSU5URVJOQUxdLnByb3RvY29sID8/XG4gICAgICAgICAgICAodGhpcy5pc1NlY3VyZUVuZHBvaW50KCkgPyAnaHR0cHM6JyA6ICdodHRwOicpKTtcbiAgICB9XG4gICAgc2V0IHByb3RvY29sKHYpIHtcbiAgICAgICAgaWYgKHRoaXNbSU5URVJOQUxdKSB7XG4gICAgICAgICAgICB0aGlzW0lOVEVSTkFMXS5wcm90b2NvbCA9IHY7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLkFnZW50ID0gQWdlbnQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5wYXJzZVByb3h5UmVzcG9uc2UgPSB2b2lkIDA7XG5jb25zdCBkZWJ1Z18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJkZWJ1Z1wiKSk7XG5jb25zdCBkZWJ1ZyA9ICgwLCBkZWJ1Z18xLmRlZmF1bHQpKCdodHRwcy1wcm94eS1hZ2VudDpwYXJzZS1wcm94eS1yZXNwb25zZScpO1xuZnVuY3Rpb24gcGFyc2VQcm94eVJlc3BvbnNlKHNvY2tldCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIC8vIHdlIG5lZWQgdG8gYnVmZmVyIGFueSBIVFRQIHRyYWZmaWMgdGhhdCBoYXBwZW5zIHdpdGggdGhlIHByb3h5IGJlZm9yZSB3ZSBnZXRcbiAgICAgICAgLy8gdGhlIENPTk5FQ1QgcmVzcG9uc2UsIHNvIHRoYXQgaWYgdGhlIHJlc3BvbnNlIGlzIGFueXRoaW5nIG90aGVyIHRoYW4gYW4gXCIyMDBcIlxuICAgICAgICAvLyByZXNwb25zZSBjb2RlLCB0aGVuIHdlIGNhbiByZS1wbGF5IHRoZSBcImRhdGFcIiBldmVudHMgb24gdGhlIHNvY2tldCBvbmNlIHRoZVxuICAgICAgICAvLyBIVFRQIHBhcnNlciBpcyBob29rZWQgdXAuLi5cbiAgICAgICAgbGV0IGJ1ZmZlcnNMZW5ndGggPSAwO1xuICAgICAgICBjb25zdCBidWZmZXJzID0gW107XG4gICAgICAgIGZ1bmN0aW9uIHJlYWQoKSB7XG4gICAgICAgICAgICBjb25zdCBiID0gc29ja2V0LnJlYWQoKTtcbiAgICAgICAgICAgIGlmIChiKVxuICAgICAgICAgICAgICAgIG9uZGF0YShiKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBzb2NrZXQub25jZSgncmVhZGFibGUnLCByZWFkKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBjbGVhbnVwKCkge1xuICAgICAgICAgICAgc29ja2V0LnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBvbmVuZCk7XG4gICAgICAgICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgb25lcnJvcik7XG4gICAgICAgICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ3JlYWRhYmxlJywgcmVhZCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gb25lbmQoKSB7XG4gICAgICAgICAgICBjbGVhbnVwKCk7XG4gICAgICAgICAgICBkZWJ1Zygnb25lbmQnKTtcbiAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ1Byb3h5IGNvbm5lY3Rpb24gZW5kZWQgYmVmb3JlIHJlY2VpdmluZyBDT05ORUNUIHJlc3BvbnNlJykpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIG9uZXJyb3IoZXJyKSB7XG4gICAgICAgICAgICBjbGVhbnVwKCk7XG4gICAgICAgICAgICBkZWJ1Zygnb25lcnJvciAlbycsIGVycik7XG4gICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBvbmRhdGEoYikge1xuICAgICAgICAgICAgYnVmZmVycy5wdXNoKGIpO1xuICAgICAgICAgICAgYnVmZmVyc0xlbmd0aCArPSBiLmxlbmd0aDtcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZlcmVkID0gQnVmZmVyLmNvbmNhdChidWZmZXJzLCBidWZmZXJzTGVuZ3RoKTtcbiAgICAgICAgICAgIGNvbnN0IGVuZE9mSGVhZGVycyA9IGJ1ZmZlcmVkLmluZGV4T2YoJ1xcclxcblxcclxcbicpO1xuICAgICAgICAgICAgaWYgKGVuZE9mSGVhZGVycyA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAvLyBrZWVwIGJ1ZmZlcmluZ1xuICAgICAgICAgICAgICAgIGRlYnVnKCdoYXZlIG5vdCByZWNlaXZlZCBlbmQgb2YgSFRUUCBoZWFkZXJzIHlldC4uLicpO1xuICAgICAgICAgICAgICAgIHJlYWQoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBoZWFkZXJQYXJ0cyA9IGJ1ZmZlcmVkXG4gICAgICAgICAgICAgICAgLnNsaWNlKDAsIGVuZE9mSGVhZGVycylcbiAgICAgICAgICAgICAgICAudG9TdHJpbmcoJ2FzY2lpJylcbiAgICAgICAgICAgICAgICAuc3BsaXQoJ1xcclxcbicpO1xuICAgICAgICAgICAgY29uc3QgZmlyc3RMaW5lID0gaGVhZGVyUGFydHMuc2hpZnQoKTtcbiAgICAgICAgICAgIGlmICghZmlyc3RMaW5lKSB7XG4gICAgICAgICAgICAgICAgc29ja2V0LmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcignTm8gaGVhZGVyIHJlY2VpdmVkIGZyb20gcHJveHkgQ09OTkVDVCByZXNwb25zZScpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGZpcnN0TGluZVBhcnRzID0gZmlyc3RMaW5lLnNwbGl0KCcgJyk7XG4gICAgICAgICAgICBjb25zdCBzdGF0dXNDb2RlID0gK2ZpcnN0TGluZVBhcnRzWzFdO1xuICAgICAgICAgICAgY29uc3Qgc3RhdHVzVGV4dCA9IGZpcnN0TGluZVBhcnRzLnNsaWNlKDIpLmpvaW4oJyAnKTtcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7fTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaGVhZGVyIG9mIGhlYWRlclBhcnRzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFoZWFkZXIpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0Q29sb24gPSBoZWFkZXIuaW5kZXhPZignOicpO1xuICAgICAgICAgICAgICAgIGlmIChmaXJzdENvbG9uID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBzb2NrZXQuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcihgSW52YWxpZCBoZWFkZXIgZnJvbSBwcm94eSBDT05ORUNUIHJlc3BvbnNlOiBcIiR7aGVhZGVyfVwiYCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBoZWFkZXIuc2xpY2UoMCwgZmlyc3RDb2xvbikudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGhlYWRlci5zbGljZShmaXJzdENvbG9uICsgMSkudHJpbVN0YXJ0KCk7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudCA9IGhlYWRlcnNba2V5XTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnNba2V5XSA9IFtjdXJyZW50LCB2YWx1ZV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoY3VycmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudC5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnNba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlYnVnKCdnb3QgcHJveHkgc2VydmVyIHJlc3BvbnNlOiAlbyAlbycsIGZpcnN0TGluZSwgaGVhZGVycyk7XG4gICAgICAgICAgICBjbGVhbnVwKCk7XG4gICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICBjb25uZWN0OiB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1c0NvZGUsXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1c1RleHQsXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBidWZmZXJlZCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHNvY2tldC5vbignZXJyb3InLCBvbmVycm9yKTtcbiAgICAgICAgc29ja2V0Lm9uKCdlbmQnLCBvbmVuZCk7XG4gICAgICAgIHJlYWQoKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMucGFyc2VQcm94eVJlc3BvbnNlID0gcGFyc2VQcm94eVJlc3BvbnNlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGFyc2UtcHJveHktcmVzcG9uc2UuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5IdHRwc1Byb3h5QWdlbnQgPSB2b2lkIDA7XG5jb25zdCBuZXQgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIm5ldFwiKSk7XG5jb25zdCB0bHMgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcInRsc1wiKSk7XG5jb25zdCBhc3NlcnRfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiYXNzZXJ0XCIpKTtcbmNvbnN0IGRlYnVnXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImRlYnVnXCIpKTtcbmNvbnN0IGFnZW50X2Jhc2VfMSA9IHJlcXVpcmUoXCJhZ2VudC1iYXNlXCIpO1xuY29uc3QgdXJsXzEgPSByZXF1aXJlKFwidXJsXCIpO1xuY29uc3QgcGFyc2VfcHJveHlfcmVzcG9uc2VfMSA9IHJlcXVpcmUoXCIuL3BhcnNlLXByb3h5LXJlc3BvbnNlXCIpO1xuY29uc3QgZGVidWcgPSAoMCwgZGVidWdfMS5kZWZhdWx0KSgnaHR0cHMtcHJveHktYWdlbnQnKTtcbi8qKlxuICogVGhlIGBIdHRwc1Byb3h5QWdlbnRgIGltcGxlbWVudHMgYW4gSFRUUCBBZ2VudCBzdWJjbGFzcyB0aGF0IGNvbm5lY3RzIHRvXG4gKiB0aGUgc3BlY2lmaWVkIFwiSFRUUChzKSBwcm94eSBzZXJ2ZXJcIiBpbiBvcmRlciB0byBwcm94eSBIVFRQUyByZXF1ZXN0cy5cbiAqXG4gKiBPdXRnb2luZyBIVFRQIHJlcXVlc3RzIGFyZSBmaXJzdCB0dW5uZWxlZCB0aHJvdWdoIHRoZSBwcm94eSBzZXJ2ZXIgdXNpbmcgdGhlXG4gKiBgQ09OTkVDVGAgSFRUUCByZXF1ZXN0IG1ldGhvZCB0byBlc3RhYmxpc2ggYSBjb25uZWN0aW9uIHRvIHRoZSBwcm94eSBzZXJ2ZXIsXG4gKiBhbmQgdGhlbiB0aGUgcHJveHkgc2VydmVyIGNvbm5lY3RzIHRvIHRoZSBkZXN0aW5hdGlvbiB0YXJnZXQgYW5kIGlzc3VlcyB0aGVcbiAqIEhUVFAgcmVxdWVzdCBmcm9tIHRoZSBwcm94eSBzZXJ2ZXIuXG4gKlxuICogYGh0dHBzOmAgcmVxdWVzdHMgaGF2ZSB0aGVpciBzb2NrZXQgY29ubmVjdGlvbiB1cGdyYWRlZCB0byBUTFMgb25jZVxuICogdGhlIGNvbm5lY3Rpb24gdG8gdGhlIHByb3h5IHNlcnZlciBoYXMgYmVlbiBlc3RhYmxpc2hlZC5cbiAqL1xuY2xhc3MgSHR0cHNQcm94eUFnZW50IGV4dGVuZHMgYWdlbnRfYmFzZV8xLkFnZW50IHtcbiAgICBjb25zdHJ1Y3Rvcihwcm94eSwgb3B0cykge1xuICAgICAgICBzdXBlcihvcHRzKTtcbiAgICAgICAgdGhpcy5vcHRpb25zID0geyBwYXRoOiB1bmRlZmluZWQgfTtcbiAgICAgICAgdGhpcy5wcm94eSA9IHR5cGVvZiBwcm94eSA9PT0gJ3N0cmluZycgPyBuZXcgdXJsXzEuVVJMKHByb3h5KSA6IHByb3h5O1xuICAgICAgICB0aGlzLnByb3h5SGVhZGVycyA9IG9wdHM/LmhlYWRlcnMgPz8ge307XG4gICAgICAgIGRlYnVnKCdDcmVhdGluZyBuZXcgSHR0cHNQcm94eUFnZW50IGluc3RhbmNlOiAlbycsIHRoaXMucHJveHkuaHJlZik7XG4gICAgICAgIC8vIFRyaW0gb2ZmIHRoZSBicmFja2V0cyBmcm9tIElQdjYgYWRkcmVzc2VzXG4gICAgICAgIGNvbnN0IGhvc3QgPSAodGhpcy5wcm94eS5ob3N0bmFtZSB8fCB0aGlzLnByb3h5Lmhvc3QpLnJlcGxhY2UoL15cXFt8XFxdJC9nLCAnJyk7XG4gICAgICAgIGNvbnN0IHBvcnQgPSB0aGlzLnByb3h5LnBvcnRcbiAgICAgICAgICAgID8gcGFyc2VJbnQodGhpcy5wcm94eS5wb3J0LCAxMClcbiAgICAgICAgICAgIDogdGhpcy5wcm94eS5wcm90b2NvbCA9PT0gJ2h0dHBzOidcbiAgICAgICAgICAgICAgICA/IDQ0M1xuICAgICAgICAgICAgICAgIDogODA7XG4gICAgICAgIHRoaXMuY29ubmVjdE9wdHMgPSB7XG4gICAgICAgICAgICAvLyBBdHRlbXB0IHRvIG5lZ290aWF0ZSBodHRwLzEuMSBmb3IgcHJveHkgc2VydmVycyB0aGF0IHN1cHBvcnQgaHR0cC8yXG4gICAgICAgICAgICBBTFBOUHJvdG9jb2xzOiBbJ2h0dHAvMS4xJ10sXG4gICAgICAgICAgICAuLi4ob3B0cyA/IG9taXQob3B0cywgJ2hlYWRlcnMnKSA6IG51bGwpLFxuICAgICAgICAgICAgaG9zdCxcbiAgICAgICAgICAgIHBvcnQsXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENhbGxlZCB3aGVuIHRoZSBub2RlLWNvcmUgSFRUUCBjbGllbnQgbGlicmFyeSBpcyBjcmVhdGluZyBhXG4gICAgICogbmV3IEhUVFAgcmVxdWVzdC5cbiAgICAgKi9cbiAgICBhc3luYyBjb25uZWN0KHJlcSwgb3B0cykge1xuICAgICAgICBjb25zdCB7IHByb3h5IH0gPSB0aGlzO1xuICAgICAgICBpZiAoIW9wdHMuaG9zdCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gXCJob3N0XCIgcHJvdmlkZWQnKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBDcmVhdGUgYSBzb2NrZXQgY29ubmVjdGlvbiB0byB0aGUgcHJveHkgc2VydmVyLlxuICAgICAgICBsZXQgc29ja2V0O1xuICAgICAgICBpZiAocHJveHkucHJvdG9jb2wgPT09ICdodHRwczonKSB7XG4gICAgICAgICAgICBkZWJ1ZygnQ3JlYXRpbmcgYHRscy5Tb2NrZXRgOiAlbycsIHRoaXMuY29ubmVjdE9wdHMpO1xuICAgICAgICAgICAgY29uc3Qgc2VydmVybmFtZSA9IHRoaXMuY29ubmVjdE9wdHMuc2VydmVybmFtZSB8fCB0aGlzLmNvbm5lY3RPcHRzLmhvc3Q7XG4gICAgICAgICAgICBzb2NrZXQgPSB0bHMuY29ubmVjdCh7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5jb25uZWN0T3B0cyxcbiAgICAgICAgICAgICAgICBzZXJ2ZXJuYW1lLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkZWJ1ZygnQ3JlYXRpbmcgYG5ldC5Tb2NrZXRgOiAlbycsIHRoaXMuY29ubmVjdE9wdHMpO1xuICAgICAgICAgICAgc29ja2V0ID0gbmV0LmNvbm5lY3QodGhpcy5jb25uZWN0T3B0cyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaGVhZGVycyA9IHR5cGVvZiB0aGlzLnByb3h5SGVhZGVycyA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgPyB0aGlzLnByb3h5SGVhZGVycygpXG4gICAgICAgICAgICA6IHsgLi4udGhpcy5wcm94eUhlYWRlcnMgfTtcbiAgICAgICAgY29uc3QgaG9zdCA9IG5ldC5pc0lQdjYob3B0cy5ob3N0KSA/IGBbJHtvcHRzLmhvc3R9XWAgOiBvcHRzLmhvc3Q7XG4gICAgICAgIGxldCBwYXlsb2FkID0gYENPTk5FQ1QgJHtob3N0fToke29wdHMucG9ydH0gSFRUUC8xLjFcXHJcXG5gO1xuICAgICAgICAvLyBJbmplY3QgdGhlIGBQcm94eS1BdXRob3JpemF0aW9uYCBoZWFkZXIgaWYgbmVjZXNzYXJ5LlxuICAgICAgICBpZiAocHJveHkudXNlcm5hbWUgfHwgcHJveHkucGFzc3dvcmQpIHtcbiAgICAgICAgICAgIGNvbnN0IGF1dGggPSBgJHtkZWNvZGVVUklDb21wb25lbnQocHJveHkudXNlcm5hbWUpfToke2RlY29kZVVSSUNvbXBvbmVudChwcm94eS5wYXNzd29yZCl9YDtcbiAgICAgICAgICAgIGhlYWRlcnNbJ1Byb3h5LUF1dGhvcml6YXRpb24nXSA9IGBCYXNpYyAke0J1ZmZlci5mcm9tKGF1dGgpLnRvU3RyaW5nKCdiYXNlNjQnKX1gO1xuICAgICAgICB9XG4gICAgICAgIGhlYWRlcnMuSG9zdCA9IGAke2hvc3R9OiR7b3B0cy5wb3J0fWA7XG4gICAgICAgIGlmICghaGVhZGVyc1snUHJveHktQ29ubmVjdGlvbiddKSB7XG4gICAgICAgICAgICBoZWFkZXJzWydQcm94eS1Db25uZWN0aW9uJ10gPSB0aGlzLmtlZXBBbGl2ZVxuICAgICAgICAgICAgICAgID8gJ0tlZXAtQWxpdmUnXG4gICAgICAgICAgICAgICAgOiAnY2xvc2UnO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3Qua2V5cyhoZWFkZXJzKSkge1xuICAgICAgICAgICAgcGF5bG9hZCArPSBgJHtuYW1lfTogJHtoZWFkZXJzW25hbWVdfVxcclxcbmA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJveHlSZXNwb25zZVByb21pc2UgPSAoMCwgcGFyc2VfcHJveHlfcmVzcG9uc2VfMS5wYXJzZVByb3h5UmVzcG9uc2UpKHNvY2tldCk7XG4gICAgICAgIHNvY2tldC53cml0ZShgJHtwYXlsb2FkfVxcclxcbmApO1xuICAgICAgICBjb25zdCB7IGNvbm5lY3QsIGJ1ZmZlcmVkIH0gPSBhd2FpdCBwcm94eVJlc3BvbnNlUHJvbWlzZTtcbiAgICAgICAgcmVxLmVtaXQoJ3Byb3h5Q29ubmVjdCcsIGNvbm5lY3QpO1xuICAgICAgICB0aGlzLmVtaXQoJ3Byb3h5Q29ubmVjdCcsIGNvbm5lY3QsIHJlcSk7XG4gICAgICAgIGlmIChjb25uZWN0LnN0YXR1c0NvZGUgPT09IDIwMCkge1xuICAgICAgICAgICAgcmVxLm9uY2UoJ3NvY2tldCcsIHJlc3VtZSk7XG4gICAgICAgICAgICBpZiAob3B0cy5zZWN1cmVFbmRwb2ludCkge1xuICAgICAgICAgICAgICAgIC8vIFRoZSBwcm94eSBpcyBjb25uZWN0aW5nIHRvIGEgVExTIHNlcnZlciwgc28gdXBncmFkZVxuICAgICAgICAgICAgICAgIC8vIHRoaXMgc29ja2V0IGNvbm5lY3Rpb24gdG8gYSBUTFMgY29ubmVjdGlvbi5cbiAgICAgICAgICAgICAgICBkZWJ1ZygnVXBncmFkaW5nIHNvY2tldCBjb25uZWN0aW9uIHRvIFRMUycpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlcnZlcm5hbWUgPSBvcHRzLnNlcnZlcm5hbWUgfHwgb3B0cy5ob3N0O1xuICAgICAgICAgICAgICAgIHJldHVybiB0bHMuY29ubmVjdCh7XG4gICAgICAgICAgICAgICAgICAgIC4uLm9taXQob3B0cywgJ2hvc3QnLCAncGF0aCcsICdwb3J0JyksXG4gICAgICAgICAgICAgICAgICAgIHNvY2tldCxcbiAgICAgICAgICAgICAgICAgICAgc2VydmVybmFtZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzb2NrZXQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU29tZSBvdGhlciBzdGF0dXMgY29kZSB0aGF0J3Mgbm90IDIwMC4uLiBuZWVkIHRvIHJlLXBsYXkgdGhlIEhUVFBcbiAgICAgICAgLy8gaGVhZGVyIFwiZGF0YVwiIGV2ZW50cyBvbnRvIHRoZSBzb2NrZXQgb25jZSB0aGUgSFRUUCBtYWNoaW5lcnkgaXNcbiAgICAgICAgLy8gYXR0YWNoZWQgc28gdGhhdCB0aGUgbm9kZSBjb3JlIGBodHRwYCBjYW4gcGFyc2UgYW5kIGhhbmRsZSB0aGVcbiAgICAgICAgLy8gZXJyb3Igc3RhdHVzIGNvZGUuXG4gICAgICAgIC8vIENsb3NlIHRoZSBvcmlnaW5hbCBzb2NrZXQsIGFuZCBhIG5ldyBcImZha2VcIiBzb2NrZXQgaXMgcmV0dXJuZWRcbiAgICAgICAgLy8gaW5zdGVhZCwgc28gdGhhdCB0aGUgcHJveHkgZG9lc24ndCBnZXQgdGhlIEhUVFAgcmVxdWVzdFxuICAgICAgICAvLyB3cml0dGVuIHRvIGl0ICh3aGljaCBtYXkgY29udGFpbiBgQXV0aG9yaXphdGlvbmAgaGVhZGVycyBvciBvdGhlclxuICAgICAgICAvLyBzZW5zaXRpdmUgZGF0YSkuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFNlZTogaHR0cHM6Ly9oYWNrZXJvbmUuY29tL3JlcG9ydHMvNTQxNTAyXG4gICAgICAgIHNvY2tldC5kZXN0cm95KCk7XG4gICAgICAgIGNvbnN0IGZha2VTb2NrZXQgPSBuZXcgbmV0LlNvY2tldCh7IHdyaXRhYmxlOiBmYWxzZSB9KTtcbiAgICAgICAgZmFrZVNvY2tldC5yZWFkYWJsZSA9IHRydWU7XG4gICAgICAgIC8vIE5lZWQgdG8gd2FpdCBmb3IgdGhlIFwic29ja2V0XCIgZXZlbnQgdG8gcmUtcGxheSB0aGUgXCJkYXRhXCIgZXZlbnRzLlxuICAgICAgICByZXEub25jZSgnc29ja2V0JywgKHMpID0+IHtcbiAgICAgICAgICAgIGRlYnVnKCdSZXBsYXlpbmcgcHJveHkgYnVmZmVyIGZvciBmYWlsZWQgcmVxdWVzdCcpO1xuICAgICAgICAgICAgKDAsIGFzc2VydF8xLmRlZmF1bHQpKHMubGlzdGVuZXJDb3VudCgnZGF0YScpID4gMCk7XG4gICAgICAgICAgICAvLyBSZXBsYXkgdGhlIFwiYnVmZmVyZWRcIiBCdWZmZXIgb250byB0aGUgZmFrZSBgc29ja2V0YCwgc2luY2UgYXRcbiAgICAgICAgICAgIC8vIHRoaXMgcG9pbnQgdGhlIEhUVFAgbW9kdWxlIG1hY2hpbmVyeSBoYXMgYmVlbiBob29rZWQgdXAgZm9yXG4gICAgICAgICAgICAvLyB0aGUgdXNlci5cbiAgICAgICAgICAgIHMucHVzaChidWZmZXJlZCk7XG4gICAgICAgICAgICBzLnB1c2gobnVsbCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZmFrZVNvY2tldDtcbiAgICB9XG59XG5IdHRwc1Byb3h5QWdlbnQucHJvdG9jb2xzID0gWydodHRwJywgJ2h0dHBzJ107XG5leHBvcnRzLkh0dHBzUHJveHlBZ2VudCA9IEh0dHBzUHJveHlBZ2VudDtcbmZ1bmN0aW9uIHJlc3VtZShzb2NrZXQpIHtcbiAgICBzb2NrZXQucmVzdW1lKCk7XG59XG5mdW5jdGlvbiBvbWl0KG9iaiwgLi4ua2V5cykge1xuICAgIGNvbnN0IHJldCA9IHt9O1xuICAgIGxldCBrZXk7XG4gICAgZm9yIChrZXkgaW4gb2JqKSB7XG4gICAgICAgIGlmICgha2V5cy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgICAgICByZXRba2V5XSA9IG9ialtrZXldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkh0dHBQcm94eUFnZW50ID0gdm9pZCAwO1xuY29uc3QgbmV0ID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJuZXRcIikpO1xuY29uc3QgdGxzID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJ0bHNcIikpO1xuY29uc3QgZGVidWdfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiZGVidWdcIikpO1xuY29uc3QgZXZlbnRzXzEgPSByZXF1aXJlKFwiZXZlbnRzXCIpO1xuY29uc3QgYWdlbnRfYmFzZV8xID0gcmVxdWlyZShcImFnZW50LWJhc2VcIik7XG5jb25zdCB1cmxfMSA9IHJlcXVpcmUoXCJ1cmxcIik7XG5jb25zdCBkZWJ1ZyA9ICgwLCBkZWJ1Z18xLmRlZmF1bHQpKCdodHRwLXByb3h5LWFnZW50Jyk7XG4vKipcbiAqIFRoZSBgSHR0cFByb3h5QWdlbnRgIGltcGxlbWVudHMgYW4gSFRUUCBBZ2VudCBzdWJjbGFzcyB0aGF0IGNvbm5lY3RzXG4gKiB0byB0aGUgc3BlY2lmaWVkIFwiSFRUUCBwcm94eSBzZXJ2ZXJcIiBpbiBvcmRlciB0byBwcm94eSBIVFRQIHJlcXVlc3RzLlxuICovXG5jbGFzcyBIdHRwUHJveHlBZ2VudCBleHRlbmRzIGFnZW50X2Jhc2VfMS5BZ2VudCB7XG4gICAgY29uc3RydWN0b3IocHJveHksIG9wdHMpIHtcbiAgICAgICAgc3VwZXIob3B0cyk7XG4gICAgICAgIHRoaXMucHJveHkgPSB0eXBlb2YgcHJveHkgPT09ICdzdHJpbmcnID8gbmV3IHVybF8xLlVSTChwcm94eSkgOiBwcm94eTtcbiAgICAgICAgdGhpcy5wcm94eUhlYWRlcnMgPSBvcHRzPy5oZWFkZXJzID8/IHt9O1xuICAgICAgICBkZWJ1ZygnQ3JlYXRpbmcgbmV3IEh0dHBQcm94eUFnZW50IGluc3RhbmNlOiAlbycsIHRoaXMucHJveHkuaHJlZik7XG4gICAgICAgIC8vIFRyaW0gb2ZmIHRoZSBicmFja2V0cyBmcm9tIElQdjYgYWRkcmVzc2VzXG4gICAgICAgIGNvbnN0IGhvc3QgPSAodGhpcy5wcm94eS5ob3N0bmFtZSB8fCB0aGlzLnByb3h5Lmhvc3QpLnJlcGxhY2UoL15cXFt8XFxdJC9nLCAnJyk7XG4gICAgICAgIGNvbnN0IHBvcnQgPSB0aGlzLnByb3h5LnBvcnRcbiAgICAgICAgICAgID8gcGFyc2VJbnQodGhpcy5wcm94eS5wb3J0LCAxMClcbiAgICAgICAgICAgIDogdGhpcy5wcm94eS5wcm90b2NvbCA9PT0gJ2h0dHBzOidcbiAgICAgICAgICAgICAgICA/IDQ0M1xuICAgICAgICAgICAgICAgIDogODA7XG4gICAgICAgIHRoaXMuY29ubmVjdE9wdHMgPSB7XG4gICAgICAgICAgICAuLi4ob3B0cyA/IG9taXQob3B0cywgJ2hlYWRlcnMnKSA6IG51bGwpLFxuICAgICAgICAgICAgaG9zdCxcbiAgICAgICAgICAgIHBvcnQsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGFkZFJlcXVlc3QocmVxLCBvcHRzKSB7XG4gICAgICAgIHJlcS5faGVhZGVyID0gbnVsbDtcbiAgICAgICAgdGhpcy5zZXRSZXF1ZXN0UHJvcHMocmVxLCBvcHRzKTtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBgYWRkUmVxdWVzdCgpYCBpc24ndCBkZWZpbmVkIGluIGBAdHlwZXMvbm9kZWBcbiAgICAgICAgc3VwZXIuYWRkUmVxdWVzdChyZXEsIG9wdHMpO1xuICAgIH1cbiAgICBzZXRSZXF1ZXN0UHJvcHMocmVxLCBvcHRzKSB7XG4gICAgICAgIGNvbnN0IHsgcHJveHkgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IHByb3RvY29sID0gb3B0cy5zZWN1cmVFbmRwb2ludCA/ICdodHRwczonIDogJ2h0dHA6JztcbiAgICAgICAgY29uc3QgaG9zdG5hbWUgPSByZXEuZ2V0SGVhZGVyKCdob3N0JykgfHwgJ2xvY2FsaG9zdCc7XG4gICAgICAgIGNvbnN0IGJhc2UgPSBgJHtwcm90b2NvbH0vLyR7aG9zdG5hbWV9YDtcbiAgICAgICAgY29uc3QgdXJsID0gbmV3IHVybF8xLlVSTChyZXEucGF0aCwgYmFzZSk7XG4gICAgICAgIGlmIChvcHRzLnBvcnQgIT09IDgwKSB7XG4gICAgICAgICAgICB1cmwucG9ydCA9IFN0cmluZyhvcHRzLnBvcnQpO1xuICAgICAgICB9XG4gICAgICAgIC8vIENoYW5nZSB0aGUgYGh0dHAuQ2xpZW50UmVxdWVzdGAgaW5zdGFuY2UncyBcInBhdGhcIiBmaWVsZFxuICAgICAgICAvLyB0byB0aGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgVVJMIHRoYXQgd2lsbCBiZSByZXF1ZXN0ZWQuXG4gICAgICAgIHJlcS5wYXRoID0gU3RyaW5nKHVybCk7XG4gICAgICAgIC8vIEluamVjdCB0aGUgYFByb3h5LUF1dGhvcml6YXRpb25gIGhlYWRlciBpZiBuZWNlc3NhcnkuXG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB0eXBlb2YgdGhpcy5wcm94eUhlYWRlcnMgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICAgID8gdGhpcy5wcm94eUhlYWRlcnMoKVxuICAgICAgICAgICAgOiB7IC4uLnRoaXMucHJveHlIZWFkZXJzIH07XG4gICAgICAgIGlmIChwcm94eS51c2VybmFtZSB8fCBwcm94eS5wYXNzd29yZCkge1xuICAgICAgICAgICAgY29uc3QgYXV0aCA9IGAke2RlY29kZVVSSUNvbXBvbmVudChwcm94eS51c2VybmFtZSl9OiR7ZGVjb2RlVVJJQ29tcG9uZW50KHByb3h5LnBhc3N3b3JkKX1gO1xuICAgICAgICAgICAgaGVhZGVyc1snUHJveHktQXV0aG9yaXphdGlvbiddID0gYEJhc2ljICR7QnVmZmVyLmZyb20oYXV0aCkudG9TdHJpbmcoJ2Jhc2U2NCcpfWA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFoZWFkZXJzWydQcm94eS1Db25uZWN0aW9uJ10pIHtcbiAgICAgICAgICAgIGhlYWRlcnNbJ1Byb3h5LUNvbm5lY3Rpb24nXSA9IHRoaXMua2VlcEFsaXZlXG4gICAgICAgICAgICAgICAgPyAnS2VlcC1BbGl2ZSdcbiAgICAgICAgICAgICAgICA6ICdjbG9zZSc7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBuYW1lIG9mIE9iamVjdC5rZXlzKGhlYWRlcnMpKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGhlYWRlcnNbbmFtZV07XG4gICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXEuc2V0SGVhZGVyKG5hbWUsIHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBjb25uZWN0KHJlcSwgb3B0cykge1xuICAgICAgICByZXEuX2hlYWRlciA9IG51bGw7XG4gICAgICAgIGlmICghcmVxLnBhdGguaW5jbHVkZXMoJzovLycpKSB7XG4gICAgICAgICAgICB0aGlzLnNldFJlcXVlc3RQcm9wcyhyZXEsIG9wdHMpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEF0IHRoaXMgcG9pbnQsIHRoZSBodHRwIENsaWVudFJlcXVlc3QncyBpbnRlcm5hbCBgX2hlYWRlcmAgZmllbGRcbiAgICAgICAgLy8gbWlnaHQgaGF2ZSBhbHJlYWR5IGJlZW4gc2V0LiBJZiB0aGlzIGlzIHRoZSBjYXNlIHRoZW4gd2UnbGwgbmVlZFxuICAgICAgICAvLyB0byByZS1nZW5lcmF0ZSB0aGUgc3RyaW5nIHNpbmNlIHdlIGp1c3QgY2hhbmdlZCB0aGUgYHJlcS5wYXRoYC5cbiAgICAgICAgbGV0IGZpcnN0O1xuICAgICAgICBsZXQgZW5kT2ZIZWFkZXJzO1xuICAgICAgICBkZWJ1ZygnUmVnZW5lcmF0aW5nIHN0b3JlZCBIVFRQIGhlYWRlciBzdHJpbmcgZm9yIHJlcXVlc3QnKTtcbiAgICAgICAgcmVxLl9pbXBsaWNpdEhlYWRlcigpO1xuICAgICAgICBpZiAocmVxLm91dHB1dERhdGEgJiYgcmVxLm91dHB1dERhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZGVidWcoJ1BhdGNoaW5nIGNvbm5lY3Rpb24gd3JpdGUoKSBvdXRwdXQgYnVmZmVyIHdpdGggdXBkYXRlZCBoZWFkZXInKTtcbiAgICAgICAgICAgIGZpcnN0ID0gcmVxLm91dHB1dERhdGFbMF0uZGF0YTtcbiAgICAgICAgICAgIGVuZE9mSGVhZGVycyA9IGZpcnN0LmluZGV4T2YoJ1xcclxcblxcclxcbicpICsgNDtcbiAgICAgICAgICAgIHJlcS5vdXRwdXREYXRhWzBdLmRhdGEgPVxuICAgICAgICAgICAgICAgIHJlcS5faGVhZGVyICsgZmlyc3Quc3Vic3RyaW5nKGVuZE9mSGVhZGVycyk7XG4gICAgICAgICAgICBkZWJ1ZygnT3V0cHV0IGJ1ZmZlcjogJW8nLCByZXEub3V0cHV0RGF0YVswXS5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBDcmVhdGUgYSBzb2NrZXQgY29ubmVjdGlvbiB0byB0aGUgcHJveHkgc2VydmVyLlxuICAgICAgICBsZXQgc29ja2V0O1xuICAgICAgICBpZiAodGhpcy5wcm94eS5wcm90b2NvbCA9PT0gJ2h0dHBzOicpIHtcbiAgICAgICAgICAgIGRlYnVnKCdDcmVhdGluZyBgdGxzLlNvY2tldGA6ICVvJywgdGhpcy5jb25uZWN0T3B0cyk7XG4gICAgICAgICAgICBzb2NrZXQgPSB0bHMuY29ubmVjdCh0aGlzLmNvbm5lY3RPcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGRlYnVnKCdDcmVhdGluZyBgbmV0LlNvY2tldGA6ICVvJywgdGhpcy5jb25uZWN0T3B0cyk7XG4gICAgICAgICAgICBzb2NrZXQgPSBuZXQuY29ubmVjdCh0aGlzLmNvbm5lY3RPcHRzKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBXYWl0IGZvciB0aGUgc29ja2V0J3MgYGNvbm5lY3RgIGV2ZW50LCBzbyB0aGF0IHRoaXMgYGNhbGxiYWNrKClgXG4gICAgICAgIC8vIGZ1bmN0aW9uIHRocm93cyBpbnN0ZWFkIG9mIHRoZSBgaHR0cGAgcmVxdWVzdCBtYWNoaW5lcnkuIFRoaXMgaXNcbiAgICAgICAgLy8gaW1wb3J0YW50IGZvciBpLmUuIGBQYWNQcm94eUFnZW50YCB3aGljaCBkZXRlcm1pbmVzIGEgZmFpbGVkIHByb3h5XG4gICAgICAgIC8vIGNvbm5lY3Rpb24gdmlhIHRoZSBgY2FsbGJhY2soKWAgZnVuY3Rpb24gdGhyb3dpbmcuXG4gICAgICAgIGF3YWl0ICgwLCBldmVudHNfMS5vbmNlKShzb2NrZXQsICdjb25uZWN0Jyk7XG4gICAgICAgIHJldHVybiBzb2NrZXQ7XG4gICAgfVxufVxuSHR0cFByb3h5QWdlbnQucHJvdG9jb2xzID0gWydodHRwJywgJ2h0dHBzJ107XG5leHBvcnRzLkh0dHBQcm94eUFnZW50ID0gSHR0cFByb3h5QWdlbnQ7XG5mdW5jdGlvbiBvbWl0KG9iaiwgLi4ua2V5cykge1xuICAgIGNvbnN0IHJldCA9IHt9O1xuICAgIGxldCBrZXk7XG4gICAgZm9yIChrZXkgaW4gb2JqKSB7XG4gICAgICAgIGlmICgha2V5cy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgICAgICByZXRba2V5XSA9IG9ialtrZXldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdsb2JhbE5vUHJveHlMaXN0ID0gZXhwb3J0cy5wcm94eVBvbGljeU5hbWUgPSB2b2lkIDA7XG5leHBvcnRzLmxvYWROb1Byb3h5ID0gbG9hZE5vUHJveHk7XG5leHBvcnRzLmdldERlZmF1bHRQcm94eVNldHRpbmdzID0gZ2V0RGVmYXVsdFByb3h5U2V0dGluZ3M7XG5leHBvcnRzLnByb3h5UG9saWN5ID0gcHJveHlQb2xpY3k7XG5jb25zdCBodHRwc19wcm94eV9hZ2VudF8xID0gcmVxdWlyZShcImh0dHBzLXByb3h5LWFnZW50XCIpO1xuY29uc3QgaHR0cF9wcm94eV9hZ2VudF8xID0gcmVxdWlyZShcImh0dHAtcHJveHktYWdlbnRcIik7XG5jb25zdCBsb2dfanNfMSA9IHJlcXVpcmUoXCIuLi9sb2cuanNcIik7XG5jb25zdCBIVFRQU19QUk9YWSA9IFwiSFRUUFNfUFJPWFlcIjtcbmNvbnN0IEhUVFBfUFJPWFkgPSBcIkhUVFBfUFJPWFlcIjtcbmNvbnN0IEFMTF9QUk9YWSA9IFwiQUxMX1BST1hZXCI7XG5jb25zdCBOT19QUk9YWSA9IFwiTk9fUFJPWFlcIjtcbi8qKlxuICogVGhlIHByb2dyYW1tYXRpYyBpZGVudGlmaWVyIG9mIHRoZSBwcm94eVBvbGljeS5cbiAqL1xuZXhwb3J0cy5wcm94eVBvbGljeU5hbWUgPSBcInByb3h5UG9saWN5XCI7XG4vKipcbiAqIFN0b3JlcyB0aGUgcGF0dGVybnMgc3BlY2lmaWVkIGluIE5PX1BST1hZIGVudmlyb25tZW50IHZhcmlhYmxlLlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydHMuZ2xvYmFsTm9Qcm94eUxpc3QgPSBbXTtcbmxldCBub1Byb3h5TGlzdExvYWRlZCA9IGZhbHNlO1xuLyoqIEEgY2FjaGUgb2Ygd2hldGhlciBhIGhvc3Qgc2hvdWxkIGJ5cGFzcyB0aGUgcHJveHkuICovXG5jb25zdCBnbG9iYWxCeXBhc3NlZE1hcCA9IG5ldyBNYXAoKTtcbmZ1bmN0aW9uIGdldEVudmlyb25tZW50VmFsdWUobmFtZSkge1xuICAgIGlmIChwcm9jZXNzLmVudltuYW1lXSkge1xuICAgICAgICByZXR1cm4gcHJvY2Vzcy5lbnZbbmFtZV07XG4gICAgfVxuICAgIGVsc2UgaWYgKHByb2Nlc3MuZW52W25hbWUudG9Mb3dlckNhc2UoKV0pIHtcbiAgICAgICAgcmV0dXJuIHByb2Nlc3MuZW52W25hbWUudG9Mb3dlckNhc2UoKV07XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBsb2FkRW52aXJvbm1lbnRQcm94eVZhbHVlKCkge1xuICAgIGlmICghcHJvY2Vzcykge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBodHRwc1Byb3h5ID0gZ2V0RW52aXJvbm1lbnRWYWx1ZShIVFRQU19QUk9YWSk7XG4gICAgY29uc3QgYWxsUHJveHkgPSBnZXRFbnZpcm9ubWVudFZhbHVlKEFMTF9QUk9YWSk7XG4gICAgY29uc3QgaHR0cFByb3h5ID0gZ2V0RW52aXJvbm1lbnRWYWx1ZShIVFRQX1BST1hZKTtcbiAgICByZXR1cm4gaHR0cHNQcm94eSB8fCBhbGxQcm94eSB8fCBodHRwUHJveHk7XG59XG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdGhlIGhvc3Qgb2YgYSBnaXZlbiBgdXJpYCBtYXRjaGVzIGFueSBwYXR0ZXJuIGluIHRoZSBubyBwcm94eSBsaXN0LlxuICogSWYgdGhlcmUncyBhIG1hdGNoLCBhbnkgcmVxdWVzdCBzZW50IHRvIHRoZSBzYW1lIGhvc3Qgc2hvdWxkbid0IGhhdmUgdGhlIHByb3h5IHNldHRpbmdzIHNldC5cbiAqIFRoaXMgaW1wbGVtZW50YXRpb24gaXMgYSBwb3J0IG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9BenVyZS9henVyZS1zZGstZm9yLW5ldC9ibG9iLzhjY2E4MTEzNzExNTllNTI3MTU5YzdlYjY1NjAyNDc3ODk4NjgzZTIvc2RrL2NvcmUvQXp1cmUuQ29yZS9zcmMvUGlwZWxpbmUvSW50ZXJuYWwvSHR0cEVudmlyb25tZW50UHJveHkuY3MjTDIxMFxuICovXG5mdW5jdGlvbiBpc0J5cGFzc2VkKHVyaSwgbm9Qcm94eUxpc3QsIGJ5cGFzc2VkTWFwKSB7XG4gICAgaWYgKG5vUHJveHlMaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGhvc3QgPSBuZXcgVVJMKHVyaSkuaG9zdG5hbWU7XG4gICAgaWYgKGJ5cGFzc2VkTWFwID09PSBudWxsIHx8IGJ5cGFzc2VkTWFwID09PSB2b2lkIDAgPyB2b2lkIDAgOiBieXBhc3NlZE1hcC5oYXMoaG9zdCkpIHtcbiAgICAgICAgcmV0dXJuIGJ5cGFzc2VkTWFwLmdldChob3N0KTtcbiAgICB9XG4gICAgbGV0IGlzQnlwYXNzZWRGbGFnID0gZmFsc2U7XG4gICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIG5vUHJveHlMaXN0KSB7XG4gICAgICAgIGlmIChwYXR0ZXJuWzBdID09PSBcIi5cIikge1xuICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgbWF0Y2ggZWl0aGVyIGRvbWFpbiBpdCBzZWxmIG9yIGFueSBzdWJkb21haW4gb3IgaG9zdFxuICAgICAgICAgICAgLy8gLmZvby5jb20gd2lsbCBtYXRjaCBmb28uY29tIGl0IHNlbGYgb3IgKi5mb28uY29tXG4gICAgICAgICAgICBpZiAoaG9zdC5lbmRzV2l0aChwYXR0ZXJuKSkge1xuICAgICAgICAgICAgICAgIGlzQnlwYXNzZWRGbGFnID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChob3N0Lmxlbmd0aCA9PT0gcGF0dGVybi5sZW5ndGggLSAxICYmIGhvc3QgPT09IHBhdHRlcm4uc2xpY2UoMSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaXNCeXBhc3NlZEZsYWcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChob3N0ID09PSBwYXR0ZXJuKSB7XG4gICAgICAgICAgICAgICAgaXNCeXBhc3NlZEZsYWcgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGJ5cGFzc2VkTWFwID09PSBudWxsIHx8IGJ5cGFzc2VkTWFwID09PSB2b2lkIDAgPyB2b2lkIDAgOiBieXBhc3NlZE1hcC5zZXQoaG9zdCwgaXNCeXBhc3NlZEZsYWcpO1xuICAgIHJldHVybiBpc0J5cGFzc2VkRmxhZztcbn1cbmZ1bmN0aW9uIGxvYWROb1Byb3h5KCkge1xuICAgIGNvbnN0IG5vUHJveHkgPSBnZXRFbnZpcm9ubWVudFZhbHVlKE5PX1BST1hZKTtcbiAgICBub1Byb3h5TGlzdExvYWRlZCA9IHRydWU7XG4gICAgaWYgKG5vUHJveHkpIHtcbiAgICAgICAgcmV0dXJuIG5vUHJveHlcbiAgICAgICAgICAgIC5zcGxpdChcIixcIilcbiAgICAgICAgICAgIC5tYXAoKGl0ZW0pID0+IGl0ZW0udHJpbSgpKVxuICAgICAgICAgICAgLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5sZW5ndGgpO1xuICAgIH1cbiAgICByZXR1cm4gW107XG59XG4vKipcbiAqIFRoaXMgbWV0aG9kIGNvbnZlcnRzIGEgcHJveHkgdXJsIGludG8gYFByb3h5U2V0dGluZ3NgIGZvciB1c2Ugd2l0aCBQcm94eVBvbGljeS5cbiAqIElmIG5vIGFyZ3VtZW50IGlzIGdpdmVuLCBpdCBhdHRlbXB0cyB0byBwYXJzZSBhIHByb3h5IFVSTCBmcm9tIHRoZSBlbnZpcm9ubWVudFxuICogdmFyaWFibGVzIGBIVFRQU19QUk9YWWAgb3IgYEhUVFBfUFJPWFlgLlxuICogQHBhcmFtIHByb3h5VXJsIC0gVGhlIHVybCBvZiB0aGUgcHJveHkgdG8gdXNlLiBNYXkgY29udGFpbiBhdXRoZW50aWNhdGlvbiBpbmZvcm1hdGlvbi5cbiAqIEBkZXByZWNhdGVkIC0gSW50ZXJuYWxseSB0aGlzIG1ldGhvZCBpcyBubyBsb25nZXIgbmVjZXNzYXJ5IHdoZW4gc2V0dGluZyBwcm94eSBpbmZvcm1hdGlvbi5cbiAqL1xuZnVuY3Rpb24gZ2V0RGVmYXVsdFByb3h5U2V0dGluZ3MocHJveHlVcmwpIHtcbiAgICBpZiAoIXByb3h5VXJsKSB7XG4gICAgICAgIHByb3h5VXJsID0gbG9hZEVudmlyb25tZW50UHJveHlWYWx1ZSgpO1xuICAgICAgICBpZiAoIXByb3h5VXJsKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHBhcnNlZFVybCA9IG5ldyBVUkwocHJveHlVcmwpO1xuICAgIGNvbnN0IHNjaGVtYSA9IHBhcnNlZFVybC5wcm90b2NvbCA/IHBhcnNlZFVybC5wcm90b2NvbCArIFwiLy9cIiA6IFwiXCI7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgaG9zdDogc2NoZW1hICsgcGFyc2VkVXJsLmhvc3RuYW1lLFxuICAgICAgICBwb3J0OiBOdW1iZXIucGFyc2VJbnQocGFyc2VkVXJsLnBvcnQgfHwgXCI4MFwiKSxcbiAgICAgICAgdXNlcm5hbWU6IHBhcnNlZFVybC51c2VybmFtZSxcbiAgICAgICAgcGFzc3dvcmQ6IHBhcnNlZFVybC5wYXNzd29yZCxcbiAgICB9O1xufVxuLyoqXG4gKiBUaGlzIG1ldGhvZCBhdHRlbXB0cyB0byBwYXJzZSBhIHByb3h5IFVSTCBmcm9tIHRoZSBlbnZpcm9ubWVudFxuICogdmFyaWFibGVzIGBIVFRQU19QUk9YWWAgb3IgYEhUVFBfUFJPWFlgLlxuICovXG5mdW5jdGlvbiBnZXREZWZhdWx0UHJveHlTZXR0aW5nc0ludGVybmFsKCkge1xuICAgIGNvbnN0IGVudlByb3h5ID0gbG9hZEVudmlyb25tZW50UHJveHlWYWx1ZSgpO1xuICAgIHJldHVybiBlbnZQcm94eSA/IG5ldyBVUkwoZW52UHJveHkpIDogdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gZ2V0VXJsRnJvbVByb3h5U2V0dGluZ3Moc2V0dGluZ3MpIHtcbiAgICBsZXQgcGFyc2VkUHJveHlVcmw7XG4gICAgdHJ5IHtcbiAgICAgICAgcGFyc2VkUHJveHlVcmwgPSBuZXcgVVJMKHNldHRpbmdzLmhvc3QpO1xuICAgIH1cbiAgICBjYXRjaCAoX2EpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RpbmcgYSB2YWxpZCBob3N0IHN0cmluZyBpbiBwcm94eSBzZXR0aW5ncywgYnV0IGZvdW5kIFwiJHtzZXR0aW5ncy5ob3N0fVwiLmApO1xuICAgIH1cbiAgICBwYXJzZWRQcm94eVVybC5wb3J0ID0gU3RyaW5nKHNldHRpbmdzLnBvcnQpO1xuICAgIGlmIChzZXR0aW5ncy51c2VybmFtZSkge1xuICAgICAgICBwYXJzZWRQcm94eVVybC51c2VybmFtZSA9IHNldHRpbmdzLnVzZXJuYW1lO1xuICAgIH1cbiAgICBpZiAoc2V0dGluZ3MucGFzc3dvcmQpIHtcbiAgICAgICAgcGFyc2VkUHJveHlVcmwucGFzc3dvcmQgPSBzZXR0aW5ncy5wYXNzd29yZDtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlZFByb3h5VXJsO1xufVxuZnVuY3Rpb24gc2V0UHJveHlBZ2VudE9uUmVxdWVzdChyZXF1ZXN0LCBjYWNoZWRBZ2VudHMsIHByb3h5VXJsKSB7XG4gICAgLy8gQ3VzdG9tIEFnZW50IHNob3VsZCB0YWtlIHByZWNlZGVuY2Ugc28gaWYgb25lIGlzIHByZXNlbnRcbiAgICAvLyB3ZSBzaG91bGQgc2tpcCB0byBhdm9pZCBvdmVyd3JpdGluZyBpdC5cbiAgICBpZiAocmVxdWVzdC5hZ2VudCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwocmVxdWVzdC51cmwpO1xuICAgIGNvbnN0IGlzSW5zZWN1cmUgPSB1cmwucHJvdG9jb2wgIT09IFwiaHR0cHM6XCI7XG4gICAgaWYgKHJlcXVlc3QudGxzU2V0dGluZ3MpIHtcbiAgICAgICAgbG9nX2pzXzEubG9nZ2VyLndhcm5pbmcoXCJUTFMgc2V0dGluZ3MgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gY29tYmluYXRpb24gd2l0aCBjdXN0b20gUHJveHksIGNlcnRpZmljYXRlcyBwcm92aWRlZCB0byB0aGUgY2xpZW50IHdpbGwgYmUgaWdub3JlZC5cIik7XG4gICAgfVxuICAgIGNvbnN0IGhlYWRlcnMgPSByZXF1ZXN0LmhlYWRlcnMudG9KU09OKCk7XG4gICAgaWYgKGlzSW5zZWN1cmUpIHtcbiAgICAgICAgaWYgKCFjYWNoZWRBZ2VudHMuaHR0cFByb3h5QWdlbnQpIHtcbiAgICAgICAgICAgIGNhY2hlZEFnZW50cy5odHRwUHJveHlBZ2VudCA9IG5ldyBodHRwX3Byb3h5X2FnZW50XzEuSHR0cFByb3h5QWdlbnQocHJveHlVcmwsIHsgaGVhZGVycyB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXF1ZXN0LmFnZW50ID0gY2FjaGVkQWdlbnRzLmh0dHBQcm94eUFnZW50O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKCFjYWNoZWRBZ2VudHMuaHR0cHNQcm94eUFnZW50KSB7XG4gICAgICAgICAgICBjYWNoZWRBZ2VudHMuaHR0cHNQcm94eUFnZW50ID0gbmV3IGh0dHBzX3Byb3h5X2FnZW50XzEuSHR0cHNQcm94eUFnZW50KHByb3h5VXJsLCB7IGhlYWRlcnMgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVxdWVzdC5hZ2VudCA9IGNhY2hlZEFnZW50cy5odHRwc1Byb3h5QWdlbnQ7XG4gICAgfVxufVxuLyoqXG4gKiBBIHBvbGljeSB0aGF0IGFsbG93cyBvbmUgdG8gYXBwbHkgcHJveHkgc2V0dGluZ3MgdG8gYWxsIHJlcXVlc3RzLlxuICogSWYgbm90IHBhc3NlZCBzdGF0aWMgc2V0dGluZ3MsIHRoZXkgd2lsbCBiZSByZXRyaWV2ZWQgZnJvbSB0aGUgSFRUUFNfUFJPWFlcbiAqIG9yIEhUVFBfUFJPWFkgZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuICogQHBhcmFtIHByb3h5U2V0dGluZ3MgLSBQcm94eVNldHRpbmdzIHRvIHVzZSBvbiBlYWNoIHJlcXVlc3QuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIGFkZGl0aW9uYWwgc2V0dGluZ3MsIGZvciBleGFtcGxlLCBjdXN0b20gTk9fUFJPWFkgcGF0dGVybnNcbiAqL1xuZnVuY3Rpb24gcHJveHlQb2xpY3kocHJveHlTZXR0aW5ncywgb3B0aW9ucykge1xuICAgIGlmICghbm9Qcm94eUxpc3RMb2FkZWQpIHtcbiAgICAgICAgZXhwb3J0cy5nbG9iYWxOb1Byb3h5TGlzdC5wdXNoKC4uLmxvYWROb1Byb3h5KCkpO1xuICAgIH1cbiAgICBjb25zdCBkZWZhdWx0UHJveHkgPSBwcm94eVNldHRpbmdzXG4gICAgICAgID8gZ2V0VXJsRnJvbVByb3h5U2V0dGluZ3MocHJveHlTZXR0aW5ncylcbiAgICAgICAgOiBnZXREZWZhdWx0UHJveHlTZXR0aW5nc0ludGVybmFsKCk7XG4gICAgY29uc3QgY2FjaGVkQWdlbnRzID0ge307XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogZXhwb3J0cy5wcm94eVBvbGljeU5hbWUsXG4gICAgICAgIGFzeW5jIHNlbmRSZXF1ZXN0KHJlcXVlc3QsIG5leHQpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGlmICghcmVxdWVzdC5wcm94eVNldHRpbmdzICYmXG4gICAgICAgICAgICAgICAgZGVmYXVsdFByb3h5ICYmXG4gICAgICAgICAgICAgICAgIWlzQnlwYXNzZWQocmVxdWVzdC51cmwsIChfYSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5jdXN0b21Ob1Byb3h5TGlzdCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZXhwb3J0cy5nbG9iYWxOb1Byb3h5TGlzdCwgKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5jdXN0b21Ob1Byb3h5TGlzdCkgPyB1bmRlZmluZWQgOiBnbG9iYWxCeXBhc3NlZE1hcCkpIHtcbiAgICAgICAgICAgICAgICBzZXRQcm94eUFnZW50T25SZXF1ZXN0KHJlcXVlc3QsIGNhY2hlZEFnZW50cywgZGVmYXVsdFByb3h5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHJlcXVlc3QucHJveHlTZXR0aW5ncykge1xuICAgICAgICAgICAgICAgIHNldFByb3h5QWdlbnRPblJlcXVlc3QocmVxdWVzdCwgY2FjaGVkQWdlbnRzLCBnZXRVcmxGcm9tUHJveHlTZXR0aW5ncyhyZXF1ZXN0LnByb3h5U2V0dGluZ3MpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXh0KHJlcXVlc3QpO1xuICAgICAgICB9LFxuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wcm94eVBvbGljeS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnNldENsaWVudFJlcXVlc3RJZFBvbGljeU5hbWUgPSB2b2lkIDA7XG5leHBvcnRzLnNldENsaWVudFJlcXVlc3RJZFBvbGljeSA9IHNldENsaWVudFJlcXVlc3RJZFBvbGljeTtcbi8qKlxuICogVGhlIHByb2dyYW1tYXRpYyBpZGVudGlmaWVyIG9mIHRoZSBzZXRDbGllbnRSZXF1ZXN0SWRQb2xpY3kuXG4gKi9cbmV4cG9ydHMuc2V0Q2xpZW50UmVxdWVzdElkUG9saWN5TmFtZSA9IFwic2V0Q2xpZW50UmVxdWVzdElkUG9saWN5XCI7XG4vKipcbiAqIEVhY2ggUGlwZWxpbmVSZXF1ZXN0IGdldHMgYSB1bmlxdWUgaWQgdXBvbiBjcmVhdGlvbi5cbiAqIFRoaXMgcG9saWN5IHBhc3NlcyB0aGF0IHVuaXF1ZSBpZCBhbG9uZyB2aWEgYW4gSFRUUCBoZWFkZXIgdG8gZW5hYmxlIGJldHRlclxuICogdGVsZW1ldHJ5IGFuZCB0cmFjaW5nLlxuICogQHBhcmFtIHJlcXVlc3RJZEhlYWRlck5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgaGVhZGVyIHRvIHBhc3MgdGhlIHJlcXVlc3QgSUQgdG8uXG4gKi9cbmZ1bmN0aW9uIHNldENsaWVudFJlcXVlc3RJZFBvbGljeShyZXF1ZXN0SWRIZWFkZXJOYW1lID0gXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBleHBvcnRzLnNldENsaWVudFJlcXVlc3RJZFBvbGljeU5hbWUsXG4gICAgICAgIGFzeW5jIHNlbmRSZXF1ZXN0KHJlcXVlc3QsIG5leHQpIHtcbiAgICAgICAgICAgIGlmICghcmVxdWVzdC5oZWFkZXJzLmhhcyhyZXF1ZXN0SWRIZWFkZXJOYW1lKSkge1xuICAgICAgICAgICAgICAgIHJlcXVlc3QuaGVhZGVycy5zZXQocmVxdWVzdElkSGVhZGVyTmFtZSwgcmVxdWVzdC5yZXF1ZXN0SWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5leHQocmVxdWVzdCk7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNldENsaWVudFJlcXVlc3RJZFBvbGljeS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRsc1BvbGljeU5hbWUgPSB2b2lkIDA7XG5leHBvcnRzLnRsc1BvbGljeSA9IHRsc1BvbGljeTtcbi8qKlxuICogTmFtZSBvZiB0aGUgVExTIFBvbGljeVxuICovXG5leHBvcnRzLnRsc1BvbGljeU5hbWUgPSBcInRsc1BvbGljeVwiO1xuLyoqXG4gKiBHZXRzIGEgcGlwZWxpbmUgcG9saWN5IHRoYXQgYWRkcyB0aGUgY2xpZW50IGNlcnRpZmljYXRlIHRvIHRoZSBIdHRwQ2xpZW50IGFnZW50IGZvciBhdXRoZW50aWNhdGlvbi5cbiAqL1xuZnVuY3Rpb24gdGxzUG9saWN5KHRsc1NldHRpbmdzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogZXhwb3J0cy50bHNQb2xpY3lOYW1lLFxuICAgICAgICBzZW5kUmVxdWVzdDogYXN5bmMgKHJlcSwgbmV4dCkgPT4ge1xuICAgICAgICAgICAgLy8gVXNlcnMgbWF5IGRlZmluZSBhIHJlcXVlc3QgdGxzU2V0dGluZ3MsIGhvbm9yIHRob3NlIG92ZXIgdGhlIGNsaWVudCBsZXZlbCBvbmVcbiAgICAgICAgICAgIGlmICghcmVxLnRsc1NldHRpbmdzKSB7XG4gICAgICAgICAgICAgICAgcmVxLnRsc1NldHRpbmdzID0gdGxzU2V0dGluZ3M7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV4dChyZXEpO1xuICAgICAgICB9LFxuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD10bHNQb2xpY3kuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5UcmFjaW5nQ29udGV4dEltcGwgPSBleHBvcnRzLmtub3duQ29udGV4dEtleXMgPSB2b2lkIDA7XG5leHBvcnRzLmNyZWF0ZVRyYWNpbmdDb250ZXh0ID0gY3JlYXRlVHJhY2luZ0NvbnRleHQ7XG4vKiogQGludGVybmFsICovXG5leHBvcnRzLmtub3duQ29udGV4dEtleXMgPSB7XG4gICAgc3BhbjogU3ltYm9sLmZvcihcIkBhenVyZS9jb3JlLXRyYWNpbmcgc3BhblwiKSxcbiAgICBuYW1lc3BhY2U6IFN5bWJvbC5mb3IoXCJAYXp1cmUvY29yZS10cmFjaW5nIG5hbWVzcGFjZVwiKSxcbn07XG4vKipcbiAqIENyZWF0ZXMgYSBuZXcge0BsaW5rIFRyYWNpbmdDb250ZXh0fSB3aXRoIHRoZSBnaXZlbiBvcHRpb25zLlxuICogQHBhcmFtIG9wdGlvbnMgLSBBIHNldCBvZiBrbm93biBrZXlzIHRoYXQgbWF5IGJlIHNldCBvbiB0aGUgY29udGV4dC5cbiAqIEByZXR1cm5zIEEgbmV3IHtAbGluayBUcmFjaW5nQ29udGV4dH0gd2l0aCB0aGUgZ2l2ZW4gb3B0aW9ucy5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gY3JlYXRlVHJhY2luZ0NvbnRleHQob3B0aW9ucyA9IHt9KSB7XG4gICAgbGV0IGNvbnRleHQgPSBuZXcgVHJhY2luZ0NvbnRleHRJbXBsKG9wdGlvbnMucGFyZW50Q29udGV4dCk7XG4gICAgaWYgKG9wdGlvbnMuc3Bhbikge1xuICAgICAgICBjb250ZXh0ID0gY29udGV4dC5zZXRWYWx1ZShleHBvcnRzLmtub3duQ29udGV4dEtleXMuc3Bhbiwgb3B0aW9ucy5zcGFuKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMubmFtZXNwYWNlKSB7XG4gICAgICAgIGNvbnRleHQgPSBjb250ZXh0LnNldFZhbHVlKGV4cG9ydHMua25vd25Db250ZXh0S2V5cy5uYW1lc3BhY2UsIG9wdGlvbnMubmFtZXNwYWNlKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRleHQ7XG59XG4vKiogQGludGVybmFsICovXG5jbGFzcyBUcmFjaW5nQ29udGV4dEltcGwge1xuICAgIGNvbnN0cnVjdG9yKGluaXRpYWxDb250ZXh0KSB7XG4gICAgICAgIHRoaXMuX2NvbnRleHRNYXAgPVxuICAgICAgICAgICAgaW5pdGlhbENvbnRleHQgaW5zdGFuY2VvZiBUcmFjaW5nQ29udGV4dEltcGxcbiAgICAgICAgICAgICAgICA/IG5ldyBNYXAoaW5pdGlhbENvbnRleHQuX2NvbnRleHRNYXApXG4gICAgICAgICAgICAgICAgOiBuZXcgTWFwKCk7XG4gICAgfVxuICAgIHNldFZhbHVlKGtleSwgdmFsdWUpIHtcbiAgICAgICAgY29uc3QgbmV3Q29udGV4dCA9IG5ldyBUcmFjaW5nQ29udGV4dEltcGwodGhpcyk7XG4gICAgICAgIG5ld0NvbnRleHQuX2NvbnRleHRNYXAuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gbmV3Q29udGV4dDtcbiAgICB9XG4gICAgZ2V0VmFsdWUoa2V5KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb250ZXh0TWFwLmdldChrZXkpO1xuICAgIH1cbiAgICBkZWxldGVWYWx1ZShrZXkpIHtcbiAgICAgICAgY29uc3QgbmV3Q29udGV4dCA9IG5ldyBUcmFjaW5nQ29udGV4dEltcGwodGhpcyk7XG4gICAgICAgIG5ld0NvbnRleHQuX2NvbnRleHRNYXAuZGVsZXRlKGtleSk7XG4gICAgICAgIHJldHVybiBuZXdDb250ZXh0O1xuICAgIH1cbn1cbmV4cG9ydHMuVHJhY2luZ0NvbnRleHRJbXBsID0gVHJhY2luZ0NvbnRleHRJbXBsO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dHJhY2luZ0NvbnRleHQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5zdGF0ZSA9IHZvaWQgMDtcbi8qKlxuICogQGludGVybmFsXG4gKlxuICogSG9sZHMgdGhlIHNpbmdsZXRvbiBpbnN0cnVtZW50ZXIsIHRvIGJlIHNoYXJlZCBhY3Jvc3MgQ0pTIGFuZCBFU00gaW1wb3J0cy5cbiAqL1xuZXhwb3J0cy5zdGF0ZSA9IHtcbiAgICBpbnN0cnVtZW50ZXJJbXBsZW1lbnRhdGlvbjogdW5kZWZpbmVkLFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN0YXRlLWNqcy5janMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jcmVhdGVEZWZhdWx0VHJhY2luZ1NwYW4gPSBjcmVhdGVEZWZhdWx0VHJhY2luZ1NwYW47XG5leHBvcnRzLmNyZWF0ZURlZmF1bHRJbnN0cnVtZW50ZXIgPSBjcmVhdGVEZWZhdWx0SW5zdHJ1bWVudGVyO1xuZXhwb3J0cy51c2VJbnN0cnVtZW50ZXIgPSB1c2VJbnN0cnVtZW50ZXI7XG5leHBvcnRzLmdldEluc3RydW1lbnRlciA9IGdldEluc3RydW1lbnRlcjtcbmNvbnN0IHRyYWNpbmdDb250ZXh0X2pzXzEgPSByZXF1aXJlKFwiLi90cmFjaW5nQ29udGV4dC5qc1wiKTtcbmNvbnN0IHN0YXRlX2pzXzEgPSByZXF1aXJlKFwiLi9zdGF0ZS5qc1wiKTtcbmZ1bmN0aW9uIGNyZWF0ZURlZmF1bHRUcmFjaW5nU3BhbigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBlbmQ6ICgpID0+IHtcbiAgICAgICAgICAgIC8vIG5vb3BcbiAgICAgICAgfSxcbiAgICAgICAgaXNSZWNvcmRpbmc6ICgpID0+IGZhbHNlLFxuICAgICAgICByZWNvcmRFeGNlcHRpb246ICgpID0+IHtcbiAgICAgICAgICAgIC8vIG5vb3BcbiAgICAgICAgfSxcbiAgICAgICAgc2V0QXR0cmlidXRlOiAoKSA9PiB7XG4gICAgICAgICAgICAvLyBub29wXG4gICAgICAgIH0sXG4gICAgICAgIHNldFN0YXR1czogKCkgPT4ge1xuICAgICAgICAgICAgLy8gbm9vcFxuICAgICAgICB9LFxuICAgICAgICBhZGRFdmVudDogKCkgPT4ge1xuICAgICAgICAgICAgLy8gbm9vcFxuICAgICAgICB9LFxuICAgIH07XG59XG5mdW5jdGlvbiBjcmVhdGVEZWZhdWx0SW5zdHJ1bWVudGVyKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGNyZWF0ZVJlcXVlc3RIZWFkZXJzOiAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH0sXG4gICAgICAgIHBhcnNlVHJhY2VwYXJlbnRIZWFkZXI6ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH0sXG4gICAgICAgIHN0YXJ0U3BhbjogKF9uYW1lLCBzcGFuT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBzcGFuOiBjcmVhdGVEZWZhdWx0VHJhY2luZ1NwYW4oKSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nQ29udGV4dDogKDAsIHRyYWNpbmdDb250ZXh0X2pzXzEuY3JlYXRlVHJhY2luZ0NvbnRleHQpKHsgcGFyZW50Q29udGV4dDogc3Bhbk9wdGlvbnMudHJhY2luZ0NvbnRleHQgfSksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgICB3aXRoQ29udGV4dChfY29udGV4dCwgY2FsbGJhY2ssIC4uLmNhbGxiYWNrQXJncykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKC4uLmNhbGxiYWNrQXJncyk7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbi8qKlxuICogRXh0ZW5kcyB0aGUgQXp1cmUgU0RLIHdpdGggc3VwcG9ydCBmb3IgYSBnaXZlbiBpbnN0cnVtZW50ZXIgaW1wbGVtZW50YXRpb24uXG4gKlxuICogQHBhcmFtIGluc3RydW1lbnRlciAtIFRoZSBpbnN0cnVtZW50ZXIgaW1wbGVtZW50YXRpb24gdG8gdXNlLlxuICovXG5mdW5jdGlvbiB1c2VJbnN0cnVtZW50ZXIoaW5zdHJ1bWVudGVyKSB7XG4gICAgc3RhdGVfanNfMS5zdGF0ZS5pbnN0cnVtZW50ZXJJbXBsZW1lbnRhdGlvbiA9IGluc3RydW1lbnRlcjtcbn1cbi8qKlxuICogR2V0cyB0aGUgY3VycmVudGx5IHNldCBpbnN0cnVtZW50ZXIsIGEgTm8tT3AgaW5zdHJ1bWVudGVyIGJ5IGRlZmF1bHQuXG4gKlxuICogQHJldHVybnMgVGhlIGN1cnJlbnRseSBzZXQgaW5zdHJ1bWVudGVyXG4gKi9cbmZ1bmN0aW9uIGdldEluc3RydW1lbnRlcigpIHtcbiAgICBpZiAoIXN0YXRlX2pzXzEuc3RhdGUuaW5zdHJ1bWVudGVySW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgc3RhdGVfanNfMS5zdGF0ZS5pbnN0cnVtZW50ZXJJbXBsZW1lbnRhdGlvbiA9IGNyZWF0ZURlZmF1bHRJbnN0cnVtZW50ZXIoKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0YXRlX2pzXzEuc3RhdGUuaW5zdHJ1bWVudGVySW1wbGVtZW50YXRpb247XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbnN0cnVtZW50ZXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jcmVhdGVUcmFjaW5nQ2xpZW50ID0gY3JlYXRlVHJhY2luZ0NsaWVudDtcbmNvbnN0IGluc3RydW1lbnRlcl9qc18xID0gcmVxdWlyZShcIi4vaW5zdHJ1bWVudGVyLmpzXCIpO1xuY29uc3QgdHJhY2luZ0NvbnRleHRfanNfMSA9IHJlcXVpcmUoXCIuL3RyYWNpbmdDb250ZXh0LmpzXCIpO1xuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHRyYWNpbmcgY2xpZW50LlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgdHJhY2luZyBjbGllbnQuXG4gKiBAcmV0dXJucyAtIEFuIGluc3RhbmNlIG9mIHtAbGluayBUcmFjaW5nQ2xpZW50fS5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlVHJhY2luZ0NsaWVudChvcHRpb25zKSB7XG4gICAgY29uc3QgeyBuYW1lc3BhY2UsIHBhY2thZ2VOYW1lLCBwYWNrYWdlVmVyc2lvbiB9ID0gb3B0aW9ucztcbiAgICBmdW5jdGlvbiBzdGFydFNwYW4obmFtZSwgb3BlcmF0aW9uT3B0aW9ucywgc3Bhbk9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBzdGFydFNwYW5SZXN1bHQgPSAoMCwgaW5zdHJ1bWVudGVyX2pzXzEuZ2V0SW5zdHJ1bWVudGVyKSgpLnN0YXJ0U3BhbihuYW1lLCBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHNwYW5PcHRpb25zKSwgeyBwYWNrYWdlTmFtZTogcGFja2FnZU5hbWUsIHBhY2thZ2VWZXJzaW9uOiBwYWNrYWdlVmVyc2lvbiwgdHJhY2luZ0NvbnRleHQ6IChfYSA9IG9wZXJhdGlvbk9wdGlvbnMgPT09IG51bGwgfHwgb3BlcmF0aW9uT3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3BlcmF0aW9uT3B0aW9ucy50cmFjaW5nT3B0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRyYWNpbmdDb250ZXh0IH0pKTtcbiAgICAgICAgbGV0IHRyYWNpbmdDb250ZXh0ID0gc3RhcnRTcGFuUmVzdWx0LnRyYWNpbmdDb250ZXh0O1xuICAgICAgICBjb25zdCBzcGFuID0gc3RhcnRTcGFuUmVzdWx0LnNwYW47XG4gICAgICAgIGlmICghdHJhY2luZ0NvbnRleHQuZ2V0VmFsdWUodHJhY2luZ0NvbnRleHRfanNfMS5rbm93bkNvbnRleHRLZXlzLm5hbWVzcGFjZSkpIHtcbiAgICAgICAgICAgIHRyYWNpbmdDb250ZXh0ID0gdHJhY2luZ0NvbnRleHQuc2V0VmFsdWUodHJhY2luZ0NvbnRleHRfanNfMS5rbm93bkNvbnRleHRLZXlzLm5hbWVzcGFjZSwgbmFtZXNwYWNlKTtcbiAgICAgICAgfVxuICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShcImF6Lm5hbWVzcGFjZVwiLCB0cmFjaW5nQ29udGV4dC5nZXRWYWx1ZSh0cmFjaW5nQ29udGV4dF9qc18xLmtub3duQ29udGV4dEtleXMubmFtZXNwYWNlKSk7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRPcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgb3BlcmF0aW9uT3B0aW9ucywge1xuICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3BlcmF0aW9uT3B0aW9ucyA9PT0gbnVsbCB8fCBvcGVyYXRpb25PcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcGVyYXRpb25PcHRpb25zLnRyYWNpbmdPcHRpb25zKSwgeyB0cmFjaW5nQ29udGV4dCB9KSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzcGFuLFxuICAgICAgICAgICAgdXBkYXRlZE9wdGlvbnMsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGFzeW5jIGZ1bmN0aW9uIHdpdGhTcGFuKG5hbWUsIG9wZXJhdGlvbk9wdGlvbnMsIGNhbGxiYWNrLCBzcGFuT3B0aW9ucykge1xuICAgICAgICBjb25zdCB7IHNwYW4sIHVwZGF0ZWRPcHRpb25zIH0gPSBzdGFydFNwYW4obmFtZSwgb3BlcmF0aW9uT3B0aW9ucywgc3Bhbk9wdGlvbnMpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgd2l0aENvbnRleHQodXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMudHJhY2luZ0NvbnRleHQsICgpID0+IFByb21pc2UucmVzb2x2ZShjYWxsYmFjayh1cGRhdGVkT3B0aW9ucywgc3BhbikpKTtcbiAgICAgICAgICAgIHNwYW4uc2V0U3RhdHVzKHsgc3RhdHVzOiBcInN1Y2Nlc3NcIiB9KTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgc3Bhbi5zZXRTdGF0dXMoeyBzdGF0dXM6IFwiZXJyb3JcIiwgZXJyb3I6IGVyciB9KTtcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gd2l0aENvbnRleHQoY29udGV4dCwgY2FsbGJhY2ssIC4uLmNhbGxiYWNrQXJncykge1xuICAgICAgICByZXR1cm4gKDAsIGluc3RydW1lbnRlcl9qc18xLmdldEluc3RydW1lbnRlcikoKS53aXRoQ29udGV4dChjb250ZXh0LCBjYWxsYmFjaywgLi4uY2FsbGJhY2tBcmdzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUGFyc2VzIGEgdHJhY2VwYXJlbnQgaGVhZGVyIHZhbHVlIGludG8gYSBzcGFuIGlkZW50aWZpZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdHJhY2VwYXJlbnRIZWFkZXIgLSBUaGUgdHJhY2VwYXJlbnQgaGVhZGVyIHRvIHBhcnNlLlxuICAgICAqIEByZXR1cm5zIEFuIGltcGxlbWVudGF0aW9uLXNwZWNpZmljIGlkZW50aWZpZXIgZm9yIHRoZSBzcGFuLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHBhcnNlVHJhY2VwYXJlbnRIZWFkZXIodHJhY2VwYXJlbnRIZWFkZXIpIHtcbiAgICAgICAgcmV0dXJuICgwLCBpbnN0cnVtZW50ZXJfanNfMS5nZXRJbnN0cnVtZW50ZXIpKCkucGFyc2VUcmFjZXBhcmVudEhlYWRlcih0cmFjZXBhcmVudEhlYWRlcik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBzZXQgb2YgcmVxdWVzdCBoZWFkZXJzIHRvIHByb3BhZ2F0ZSB0cmFjaW5nIGluZm9ybWF0aW9uIHRvIGEgYmFja2VuZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0cmFjaW5nQ29udGV4dCAtIFRoZSBjb250ZXh0IGNvbnRhaW5pbmcgdGhlIHNwYW4gdG8gc2VyaWFsaXplLlxuICAgICAqIEByZXR1cm5zIFRoZSBzZXQgb2YgaGVhZGVycyB0byBhZGQgdG8gYSByZXF1ZXN0LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZVJlcXVlc3RIZWFkZXJzKHRyYWNpbmdDb250ZXh0KSB7XG4gICAgICAgIHJldHVybiAoMCwgaW5zdHJ1bWVudGVyX2pzXzEuZ2V0SW5zdHJ1bWVudGVyKSgpLmNyZWF0ZVJlcXVlc3RIZWFkZXJzKHRyYWNpbmdDb250ZXh0KTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc3RhcnRTcGFuLFxuICAgICAgICB3aXRoU3BhbixcbiAgICAgICAgd2l0aENvbnRleHQsXG4gICAgICAgIHBhcnNlVHJhY2VwYXJlbnRIZWFkZXIsXG4gICAgICAgIGNyZWF0ZVJlcXVlc3RIZWFkZXJzLFxuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD10cmFjaW5nQ2xpZW50LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlVHJhY2luZ0NsaWVudCA9IGV4cG9ydHMudXNlSW5zdHJ1bWVudGVyID0gdm9pZCAwO1xudmFyIGluc3RydW1lbnRlcl9qc18xID0gcmVxdWlyZShcIi4vaW5zdHJ1bWVudGVyLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidXNlSW5zdHJ1bWVudGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBpbnN0cnVtZW50ZXJfanNfMS51c2VJbnN0cnVtZW50ZXI7IH0gfSk7XG52YXIgdHJhY2luZ0NsaWVudF9qc18xID0gcmVxdWlyZShcIi4vdHJhY2luZ0NsaWVudC5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVRyYWNpbmdDbGllbnRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRyYWNpbmdDbGllbnRfanNfMS5jcmVhdGVUcmFjaW5nQ2xpZW50OyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jdXN0b20gPSB2b2lkIDA7XG5jb25zdCBub2RlX3V0aWxfMSA9IHJlcXVpcmUoXCJub2RlOnV0aWxcIik7XG5leHBvcnRzLmN1c3RvbSA9IG5vZGVfdXRpbF8xLmluc3BlY3QuY3VzdG9tO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5zcGVjdC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlJlc3RFcnJvciA9IHZvaWQgMDtcbmV4cG9ydHMuaXNSZXN0RXJyb3IgPSBpc1Jlc3RFcnJvcjtcbmNvbnN0IGNvcmVfdXRpbF8xID0gcmVxdWlyZShcIkBhenVyZS9jb3JlLXV0aWxcIik7XG5jb25zdCBpbnNwZWN0X2pzXzEgPSByZXF1aXJlKFwiLi91dGlsL2luc3BlY3QuanNcIik7XG5jb25zdCBzYW5pdGl6ZXJfanNfMSA9IHJlcXVpcmUoXCIuL3V0aWwvc2FuaXRpemVyLmpzXCIpO1xuY29uc3QgZXJyb3JTYW5pdGl6ZXIgPSBuZXcgc2FuaXRpemVyX2pzXzEuU2FuaXRpemVyKCk7XG4vKipcbiAqIEEgY3VzdG9tIGVycm9yIHR5cGUgZm9yIGZhaWxlZCBwaXBlbGluZSByZXF1ZXN0cy5cbiAqL1xuY2xhc3MgUmVzdEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2UsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJSZXN0RXJyb3JcIjtcbiAgICAgICAgdGhpcy5jb2RlID0gb3B0aW9ucy5jb2RlO1xuICAgICAgICB0aGlzLnN0YXR1c0NvZGUgPSBvcHRpb25zLnN0YXR1c0NvZGU7XG4gICAgICAgIC8vIFRoZSByZXF1ZXN0IGFuZCByZXNwb25zZSBtYXkgY29udGFpbiBzZW5zaXRpdmUgaW5mb3JtYXRpb24gaW4gdGhlIGhlYWRlcnMgb3IgYm9keS5cbiAgICAgICAgLy8gVG8gaGVscCBwcmV2ZW50IHRoaXMgc2Vuc2l0aXZlIGluZm9ybWF0aW9uIGJlaW5nIGFjY2lkZW50YWxseSBsb2dnZWQsIHRoZSByZXF1ZXN0IGFuZCByZXNwb25zZVxuICAgICAgICAvLyBwcm9wZXJ0aWVzIGFyZSBtYXJrZWQgYXMgbm9uLWVudW1lcmFibGUgaGVyZS4gVGhpcyBwcmV2ZW50cyB0aGVtIHNob3dpbmcgdXAgaW4gdGhlIG91dHB1dCBvZlxuICAgICAgICAvLyBKU09OLnN0cmluZ2lmeSBhbmQgY29uc29sZS5sb2cuXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInJlcXVlc3RcIiwgeyB2YWx1ZTogb3B0aW9ucy5yZXF1ZXN0LCBlbnVtZXJhYmxlOiBmYWxzZSB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwicmVzcG9uc2VcIiwgeyB2YWx1ZTogb3B0aW9ucy5yZXNwb25zZSwgZW51bWVyYWJsZTogZmFsc2UgfSk7XG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBSZXN0RXJyb3IucHJvdG90eXBlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTG9nZ2luZyBtZXRob2QgZm9yIHV0aWwuaW5zcGVjdCBpbiBOb2RlXG4gICAgICovXG4gICAgW2luc3BlY3RfanNfMS5jdXN0b21dKCkge1xuICAgICAgICAvLyBFeHRyYWN0IG5vbi1lbnVtZXJhYmxlIHByb3BlcnRpZXMgYW5kIGFkZCB0aGVtIGJhY2suIFRoaXMgaXMgT0sgc2luY2UgaW4gdGhpcyBvdXRwdXQgdGhlIHJlcXVlc3QgYW5kXG4gICAgICAgIC8vIHJlc3BvbnNlIGdldCBzYW5pdGl6ZWQuXG4gICAgICAgIHJldHVybiBgUmVzdEVycm9yOiAke3RoaXMubWVzc2FnZX0gXFxuICR7ZXJyb3JTYW5pdGl6ZXIuc2FuaXRpemUoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCB0aGlzKSwgeyByZXF1ZXN0OiB0aGlzLnJlcXVlc3QsIHJlc3BvbnNlOiB0aGlzLnJlc3BvbnNlIH0pKX1gO1xuICAgIH1cbn1cbmV4cG9ydHMuUmVzdEVycm9yID0gUmVzdEVycm9yO1xuLyoqXG4gKiBTb21ldGhpbmcgd2VudCB3cm9uZyB3aGVuIG1ha2luZyB0aGUgcmVxdWVzdC5cbiAqIFRoaXMgbWVhbnMgdGhlIGFjdHVhbCByZXF1ZXN0IGZhaWxlZCBmb3Igc29tZSByZWFzb24sXG4gKiBzdWNoIGFzIGEgRE5TIGlzc3VlIG9yIHRoZSBjb25uZWN0aW9uIGJlaW5nIGxvc3QuXG4gKi9cblJlc3RFcnJvci5SRVFVRVNUX1NFTkRfRVJST1IgPSBcIlJFUVVFU1RfU0VORF9FUlJPUlwiO1xuLyoqXG4gKiBUaGlzIG1lYW5zIHRoYXQgcGFyc2luZyB0aGUgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyIGZhaWxlZC5cbiAqIEl0IG1heSBoYXZlIGJlZW4gbWFsZm9ybWVkLlxuICovXG5SZXN0RXJyb3IuUEFSU0VfRVJST1IgPSBcIlBBUlNFX0VSUk9SXCI7XG4vKipcbiAqIFR5cGVndWFyZCBmb3IgUmVzdEVycm9yXG4gKiBAcGFyYW0gZSAtIFNvbWV0aGluZyBjYXVnaHQgYnkgYSBjYXRjaCBjbGF1c2UuXG4gKi9cbmZ1bmN0aW9uIGlzUmVzdEVycm9yKGUpIHtcbiAgICBpZiAoZSBpbnN0YW5jZW9mIFJlc3RFcnJvcikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuICgwLCBjb3JlX3V0aWxfMS5pc0Vycm9yKShlKSAmJiBlLm5hbWUgPT09IFwiUmVzdEVycm9yXCI7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZXN0RXJyb3IuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFjaW5nUG9saWN5TmFtZSA9IHZvaWQgMDtcbmV4cG9ydHMudHJhY2luZ1BvbGljeSA9IHRyYWNpbmdQb2xpY3k7XG5jb25zdCBjb3JlX3RyYWNpbmdfMSA9IHJlcXVpcmUoXCJAYXp1cmUvY29yZS10cmFjaW5nXCIpO1xuY29uc3QgY29uc3RhbnRzX2pzXzEgPSByZXF1aXJlKFwiLi4vY29uc3RhbnRzLmpzXCIpO1xuY29uc3QgdXNlckFnZW50X2pzXzEgPSByZXF1aXJlKFwiLi4vdXRpbC91c2VyQWdlbnQuanNcIik7XG5jb25zdCBsb2dfanNfMSA9IHJlcXVpcmUoXCIuLi9sb2cuanNcIik7XG5jb25zdCBjb3JlX3V0aWxfMSA9IHJlcXVpcmUoXCJAYXp1cmUvY29yZS11dGlsXCIpO1xuY29uc3QgcmVzdEVycm9yX2pzXzEgPSByZXF1aXJlKFwiLi4vcmVzdEVycm9yLmpzXCIpO1xuY29uc3Qgc2FuaXRpemVyX2pzXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9zYW5pdGl6ZXIuanNcIik7XG4vKipcbiAqIFRoZSBwcm9ncmFtbWF0aWMgaWRlbnRpZmllciBvZiB0aGUgdHJhY2luZ1BvbGljeS5cbiAqL1xuZXhwb3J0cy50cmFjaW5nUG9saWN5TmFtZSA9IFwidHJhY2luZ1BvbGljeVwiO1xuLyoqXG4gKiBBIHNpbXBsZSBwb2xpY3kgdG8gY3JlYXRlIE9wZW5UZWxlbWV0cnkgU3BhbnMgZm9yIGVhY2ggcmVxdWVzdCBtYWRlIGJ5IHRoZSBwaXBlbGluZVxuICogdGhhdCBoYXMgU3Bhbk9wdGlvbnMgd2l0aCBhIHBhcmVudC5cbiAqIFJlcXVlc3RzIG1hZGUgd2l0aG91dCBhIHBhcmVudCBTcGFuIHdpbGwgbm90IGJlIHJlY29yZGVkLlxuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIGNvbmZpZ3VyZSB0aGUgdGVsZW1ldHJ5IGxvZ2dlZCBieSB0aGUgdHJhY2luZyBwb2xpY3kuXG4gKi9cbmZ1bmN0aW9uIHRyYWNpbmdQb2xpY3kob3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgdXNlckFnZW50UHJvbWlzZSA9ICgwLCB1c2VyQWdlbnRfanNfMS5nZXRVc2VyQWdlbnRWYWx1ZSkob3B0aW9ucy51c2VyQWdlbnRQcmVmaXgpO1xuICAgIGNvbnN0IHNhbml0aXplciA9IG5ldyBzYW5pdGl6ZXJfanNfMS5TYW5pdGl6ZXIoe1xuICAgICAgICBhZGRpdGlvbmFsQWxsb3dlZFF1ZXJ5UGFyYW1ldGVyczogb3B0aW9ucy5hZGRpdGlvbmFsQWxsb3dlZFF1ZXJ5UGFyYW1ldGVycyxcbiAgICB9KTtcbiAgICBjb25zdCB0cmFjaW5nQ2xpZW50ID0gdHJ5Q3JlYXRlVHJhY2luZ0NsaWVudCgpO1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGV4cG9ydHMudHJhY2luZ1BvbGljeU5hbWUsXG4gICAgICAgIGFzeW5jIHNlbmRSZXF1ZXN0KHJlcXVlc3QsIG5leHQpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGlmICghdHJhY2luZ0NsaWVudCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0KHJlcXVlc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdXNlckFnZW50ID0gYXdhaXQgdXNlckFnZW50UHJvbWlzZTtcbiAgICAgICAgICAgIGNvbnN0IHNwYW5BdHRyaWJ1dGVzID0ge1xuICAgICAgICAgICAgICAgIFwiaHR0cC51cmxcIjogc2FuaXRpemVyLnNhbml0aXplVXJsKHJlcXVlc3QudXJsKSxcbiAgICAgICAgICAgICAgICBcImh0dHAubWV0aG9kXCI6IHJlcXVlc3QubWV0aG9kLFxuICAgICAgICAgICAgICAgIFwiaHR0cC51c2VyX2FnZW50XCI6IHVzZXJBZ2VudCxcbiAgICAgICAgICAgICAgICByZXF1ZXN0SWQ6IHJlcXVlc3QucmVxdWVzdElkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmICh1c2VyQWdlbnQpIHtcbiAgICAgICAgICAgICAgICBzcGFuQXR0cmlidXRlc1tcImh0dHAudXNlcl9hZ2VudFwiXSA9IHVzZXJBZ2VudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHsgc3BhbiwgdHJhY2luZ0NvbnRleHQgfSA9IChfYSA9IHRyeUNyZWF0ZVNwYW4odHJhY2luZ0NsaWVudCwgcmVxdWVzdCwgc3BhbkF0dHJpYnV0ZXMpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB7fTtcbiAgICAgICAgICAgIGlmICghc3BhbiB8fCAhdHJhY2luZ0NvbnRleHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dChyZXF1ZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0cmFjaW5nQ2xpZW50LndpdGhDb250ZXh0KHRyYWNpbmdDb250ZXh0LCBuZXh0LCByZXF1ZXN0KTtcbiAgICAgICAgICAgICAgICB0cnlQcm9jZXNzUmVzcG9uc2Uoc3BhbiwgcmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICB0cnlQcm9jZXNzRXJyb3Ioc3BhbiwgZXJyKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbmZ1bmN0aW9uIHRyeUNyZWF0ZVRyYWNpbmdDbGllbnQoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuICgwLCBjb3JlX3RyYWNpbmdfMS5jcmVhdGVUcmFjaW5nQ2xpZW50KSh7XG4gICAgICAgICAgICBuYW1lc3BhY2U6IFwiXCIsXG4gICAgICAgICAgICBwYWNrYWdlTmFtZTogXCJAYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lXCIsXG4gICAgICAgICAgICBwYWNrYWdlVmVyc2lvbjogY29uc3RhbnRzX2pzXzEuU0RLX1ZFUlNJT04sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBsb2dfanNfMS5sb2dnZXIud2FybmluZyhgRXJyb3Igd2hlbiBjcmVhdGluZyB0aGUgVHJhY2luZ0NsaWVudDogJHsoMCwgY29yZV91dGlsXzEuZ2V0RXJyb3JNZXNzYWdlKShlKX1gKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59XG5mdW5jdGlvbiB0cnlDcmVhdGVTcGFuKHRyYWNpbmdDbGllbnQsIHJlcXVlc3QsIHNwYW5BdHRyaWJ1dGVzKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gQXMgcGVyIHNwZWMsIHdlIGRvIG5vdCBuZWVkIHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBIVFRQIGFuZCBIVFRQUyBpbiBzcGFuIG5hbWUuXG4gICAgICAgIGNvbnN0IHsgc3BhbiwgdXBkYXRlZE9wdGlvbnMgfSA9IHRyYWNpbmdDbGllbnQuc3RhcnRTcGFuKGBIVFRQICR7cmVxdWVzdC5tZXRob2R9YCwgeyB0cmFjaW5nT3B0aW9uczogcmVxdWVzdC50cmFjaW5nT3B0aW9ucyB9LCB7XG4gICAgICAgICAgICBzcGFuS2luZDogXCJjbGllbnRcIixcbiAgICAgICAgICAgIHNwYW5BdHRyaWJ1dGVzLFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gSWYgdGhlIHNwYW4gaXMgbm90IHJlY29yZGluZywgZG9uJ3QgZG8gYW55IG1vcmUgd29yay5cbiAgICAgICAgaWYgKCFzcGFuLmlzUmVjb3JkaW5nKCkpIHtcbiAgICAgICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIC8vIHNldCBoZWFkZXJzXG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB0cmFjaW5nQ2xpZW50LmNyZWF0ZVJlcXVlc3RIZWFkZXJzKHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLnRyYWNpbmdDb250ZXh0KTtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoaGVhZGVycykpIHtcbiAgICAgICAgICAgIHJlcXVlc3QuaGVhZGVycy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgc3BhbiwgdHJhY2luZ0NvbnRleHQ6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLnRyYWNpbmdDb250ZXh0IH07XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIGxvZ19qc18xLmxvZ2dlci53YXJuaW5nKGBTa2lwcGluZyBjcmVhdGluZyBhIHRyYWNpbmcgc3BhbiBkdWUgdG8gYW4gZXJyb3I6ICR7KDAsIGNvcmVfdXRpbF8xLmdldEVycm9yTWVzc2FnZSkoZSl9YCk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufVxuZnVuY3Rpb24gdHJ5UHJvY2Vzc0Vycm9yKHNwYW4sIGVycm9yKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgc3Bhbi5zZXRTdGF0dXMoe1xuICAgICAgICAgICAgc3RhdHVzOiBcImVycm9yXCIsXG4gICAgICAgICAgICBlcnJvcjogKDAsIGNvcmVfdXRpbF8xLmlzRXJyb3IpKGVycm9yKSA/IGVycm9yIDogdW5kZWZpbmVkLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCgwLCByZXN0RXJyb3JfanNfMS5pc1Jlc3RFcnJvcikoZXJyb3IpICYmIGVycm9yLnN0YXR1c0NvZGUpIHtcbiAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKFwiaHR0cC5zdGF0dXNfY29kZVwiLCBlcnJvci5zdGF0dXNDb2RlKTtcbiAgICAgICAgfVxuICAgICAgICBzcGFuLmVuZCgpO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBsb2dfanNfMS5sb2dnZXIud2FybmluZyhgU2tpcHBpbmcgdHJhY2luZyBzcGFuIHByb2Nlc3NpbmcgZHVlIHRvIGFuIGVycm9yOiAkeygwLCBjb3JlX3V0aWxfMS5nZXRFcnJvck1lc3NhZ2UpKGUpfWApO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHRyeVByb2Nlc3NSZXNwb25zZShzcGFuLCByZXNwb25zZSkge1xuICAgIHRyeSB7XG4gICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKFwiaHR0cC5zdGF0dXNfY29kZVwiLCByZXNwb25zZS5zdGF0dXMpO1xuICAgICAgICBjb25zdCBzZXJ2aWNlUmVxdWVzdElkID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoXCJ4LW1zLXJlcXVlc3QtaWRcIik7XG4gICAgICAgIGlmIChzZXJ2aWNlUmVxdWVzdElkKSB7XG4gICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShcInNlcnZpY2VSZXF1ZXN0SWRcIiwgc2VydmljZVJlcXVlc3RJZCk7XG4gICAgICAgIH1cbiAgICAgICAgc3Bhbi5zZXRTdGF0dXMoe1xuICAgICAgICAgICAgc3RhdHVzOiBcInN1Y2Nlc3NcIixcbiAgICAgICAgfSk7XG4gICAgICAgIHNwYW4uZW5kKCk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIGxvZ19qc18xLmxvZ2dlci53YXJuaW5nKGBTa2lwcGluZyB0cmFjaW5nIHNwYW4gcHJvY2Vzc2luZyBkdWUgdG8gYW4gZXJyb3I6ICR7KDAsIGNvcmVfdXRpbF8xLmdldEVycm9yTWVzc2FnZSkoZSl9YCk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dHJhY2luZ1BvbGljeS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNyZWF0ZVBpcGVsaW5lRnJvbU9wdGlvbnMgPSBjcmVhdGVQaXBlbGluZUZyb21PcHRpb25zO1xuY29uc3QgbG9nUG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9wb2xpY2llcy9sb2dQb2xpY3kuanNcIik7XG5jb25zdCBwaXBlbGluZV9qc18xID0gcmVxdWlyZShcIi4vcGlwZWxpbmUuanNcIik7XG5jb25zdCByZWRpcmVjdFBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvcmVkaXJlY3RQb2xpY3kuanNcIik7XG5jb25zdCB1c2VyQWdlbnRQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL3VzZXJBZ2VudFBvbGljeS5qc1wiKTtcbmNvbnN0IG11bHRpcGFydFBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvbXVsdGlwYXJ0UG9saWN5LmpzXCIpO1xuY29uc3QgZGVjb21wcmVzc1Jlc3BvbnNlUG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9wb2xpY2llcy9kZWNvbXByZXNzUmVzcG9uc2VQb2xpY3kuanNcIik7XG5jb25zdCBkZWZhdWx0UmV0cnlQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL2RlZmF1bHRSZXRyeVBvbGljeS5qc1wiKTtcbmNvbnN0IGZvcm1EYXRhUG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9wb2xpY2llcy9mb3JtRGF0YVBvbGljeS5qc1wiKTtcbmNvbnN0IGNvcmVfdXRpbF8xID0gcmVxdWlyZShcIkBhenVyZS9jb3JlLXV0aWxcIik7XG5jb25zdCBwcm94eVBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvcHJveHlQb2xpY3kuanNcIik7XG5jb25zdCBzZXRDbGllbnRSZXF1ZXN0SWRQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL3NldENsaWVudFJlcXVlc3RJZFBvbGljeS5qc1wiKTtcbmNvbnN0IHRsc1BvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvdGxzUG9saWN5LmpzXCIpO1xuY29uc3QgdHJhY2luZ1BvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvdHJhY2luZ1BvbGljeS5qc1wiKTtcbi8qKlxuICogQ3JlYXRlIGEgbmV3IHBpcGVsaW5lIHdpdGggYSBkZWZhdWx0IHNldCBvZiBjdXN0b21pemFibGUgcG9saWNpZXMuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gY29uZmlndXJlIGEgY3VzdG9tIHBpcGVsaW5lLlxuICovXG5mdW5jdGlvbiBjcmVhdGVQaXBlbGluZUZyb21PcHRpb25zKG9wdGlvbnMpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3QgcGlwZWxpbmUgPSAoMCwgcGlwZWxpbmVfanNfMS5jcmVhdGVFbXB0eVBpcGVsaW5lKSgpO1xuICAgIGlmIChjb3JlX3V0aWxfMS5pc05vZGVMaWtlKSB7XG4gICAgICAgIGlmIChvcHRpb25zLnRsc09wdGlvbnMpIHtcbiAgICAgICAgICAgIHBpcGVsaW5lLmFkZFBvbGljeSgoMCwgdGxzUG9saWN5X2pzXzEudGxzUG9saWN5KShvcHRpb25zLnRsc09wdGlvbnMpKTtcbiAgICAgICAgfVxuICAgICAgICBwaXBlbGluZS5hZGRQb2xpY3koKDAsIHByb3h5UG9saWN5X2pzXzEucHJveHlQb2xpY3kpKG9wdGlvbnMucHJveHlPcHRpb25zKSk7XG4gICAgICAgIHBpcGVsaW5lLmFkZFBvbGljeSgoMCwgZGVjb21wcmVzc1Jlc3BvbnNlUG9saWN5X2pzXzEuZGVjb21wcmVzc1Jlc3BvbnNlUG9saWN5KSgpKTtcbiAgICB9XG4gICAgcGlwZWxpbmUuYWRkUG9saWN5KCgwLCBmb3JtRGF0YVBvbGljeV9qc18xLmZvcm1EYXRhUG9saWN5KSgpLCB7IGJlZm9yZVBvbGljaWVzOiBbbXVsdGlwYXJ0UG9saWN5X2pzXzEubXVsdGlwYXJ0UG9saWN5TmFtZV0gfSk7XG4gICAgcGlwZWxpbmUuYWRkUG9saWN5KCgwLCB1c2VyQWdlbnRQb2xpY3lfanNfMS51c2VyQWdlbnRQb2xpY3kpKG9wdGlvbnMudXNlckFnZW50T3B0aW9ucykpO1xuICAgIHBpcGVsaW5lLmFkZFBvbGljeSgoMCwgc2V0Q2xpZW50UmVxdWVzdElkUG9saWN5X2pzXzEuc2V0Q2xpZW50UmVxdWVzdElkUG9saWN5KSgoX2EgPSBvcHRpb25zLnRlbGVtZXRyeU9wdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jbGllbnRSZXF1ZXN0SWRIZWFkZXJOYW1lKSk7XG4gICAgLy8gVGhlIG11bHRpcGFydCBwb2xpY3kgaXMgYWRkZWQgYWZ0ZXIgcG9saWNpZXMgd2l0aCBubyBwaGFzZSwgc28gdGhhdFxuICAgIC8vIHBvbGljaWVzIGNhbiBiZSBhZGRlZCBiZXR3ZWVuIGl0IGFuZCBmb3JtRGF0YVBvbGljeSB0byBtb2RpZnlcbiAgICAvLyBwcm9wZXJ0aWVzIChlLmcuLCBtYWtpbmcgdGhlIGJvdW5kYXJ5IGNvbnN0YW50IGluIHJlY29yZGVkIHRlc3RzKS5cbiAgICBwaXBlbGluZS5hZGRQb2xpY3koKDAsIG11bHRpcGFydFBvbGljeV9qc18xLm11bHRpcGFydFBvbGljeSkoKSwgeyBhZnRlclBoYXNlOiBcIkRlc2VyaWFsaXplXCIgfSk7XG4gICAgcGlwZWxpbmUuYWRkUG9saWN5KCgwLCBkZWZhdWx0UmV0cnlQb2xpY3lfanNfMS5kZWZhdWx0UmV0cnlQb2xpY3kpKG9wdGlvbnMucmV0cnlPcHRpb25zKSwgeyBwaGFzZTogXCJSZXRyeVwiIH0pO1xuICAgIHBpcGVsaW5lLmFkZFBvbGljeSgoMCwgdHJhY2luZ1BvbGljeV9qc18xLnRyYWNpbmdQb2xpY3kpKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy51c2VyQWdlbnRPcHRpb25zKSwgb3B0aW9ucy5sb2dnaW5nT3B0aW9ucykpLCB7XG4gICAgICAgIGFmdGVyUGhhc2U6IFwiUmV0cnlcIixcbiAgICB9KTtcbiAgICBpZiAoY29yZV91dGlsXzEuaXNOb2RlTGlrZSkge1xuICAgICAgICAvLyBCb3RoIFhIUiBhbmQgRmV0Y2ggZXhwZWN0IHRvIGhhbmRsZSByZWRpcmVjdHMgYXV0b21hdGljYWxseSxcbiAgICAgICAgLy8gc28gb25seSBpbmNsdWRlIHRoaXMgcG9saWN5IHdoZW4gd2UncmUgaW4gTm9kZS5cbiAgICAgICAgcGlwZWxpbmUuYWRkUG9saWN5KCgwLCByZWRpcmVjdFBvbGljeV9qc18xLnJlZGlyZWN0UG9saWN5KShvcHRpb25zLnJlZGlyZWN0T3B0aW9ucyksIHsgYWZ0ZXJQaGFzZTogXCJSZXRyeVwiIH0pO1xuICAgIH1cbiAgICBwaXBlbGluZS5hZGRQb2xpY3koKDAsIGxvZ1BvbGljeV9qc18xLmxvZ1BvbGljeSkob3B0aW9ucy5sb2dnaW5nT3B0aW9ucyksIHsgYWZ0ZXJQaGFzZTogXCJTaWduXCIgfSk7XG4gICAgcmV0dXJuIHBpcGVsaW5lO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y3JlYXRlUGlwZWxpbmVGcm9tT3B0aW9ucy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldEJvZHlMZW5ndGggPSBnZXRCb2R5TGVuZ3RoO1xuZXhwb3J0cy5jcmVhdGVOb2RlSHR0cENsaWVudCA9IGNyZWF0ZU5vZGVIdHRwQ2xpZW50O1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbmNvbnN0IGh0dHAgPSB0c2xpYl8xLl9faW1wb3J0U3RhcihyZXF1aXJlKFwibm9kZTpodHRwXCIpKTtcbmNvbnN0IGh0dHBzID0gdHNsaWJfMS5fX2ltcG9ydFN0YXIocmVxdWlyZShcIm5vZGU6aHR0cHNcIikpO1xuY29uc3QgemxpYiA9IHRzbGliXzEuX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJub2RlOnpsaWJcIikpO1xuY29uc3Qgbm9kZV9zdHJlYW1fMSA9IHJlcXVpcmUoXCJub2RlOnN0cmVhbVwiKTtcbmNvbnN0IGFib3J0X2NvbnRyb2xsZXJfMSA9IHJlcXVpcmUoXCJAYXp1cmUvYWJvcnQtY29udHJvbGxlclwiKTtcbmNvbnN0IGh0dHBIZWFkZXJzX2pzXzEgPSByZXF1aXJlKFwiLi9odHRwSGVhZGVycy5qc1wiKTtcbmNvbnN0IHJlc3RFcnJvcl9qc18xID0gcmVxdWlyZShcIi4vcmVzdEVycm9yLmpzXCIpO1xuY29uc3QgbG9nX2pzXzEgPSByZXF1aXJlKFwiLi9sb2cuanNcIik7XG5jb25zdCBERUZBVUxUX1RMU19TRVRUSU5HUyA9IHt9O1xuZnVuY3Rpb24gaXNSZWFkYWJsZVN0cmVhbShib2R5KSB7XG4gICAgcmV0dXJuIGJvZHkgJiYgdHlwZW9mIGJvZHkucGlwZSA9PT0gXCJmdW5jdGlvblwiO1xufVxuZnVuY3Rpb24gaXNTdHJlYW1Db21wbGV0ZShzdHJlYW0pIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgY29uc3QgaGFuZGxlciA9ICgpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcihcImNsb3NlXCIsIGhhbmRsZXIpO1xuICAgICAgICAgICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKFwiZW5kXCIsIGhhbmRsZXIpO1xuICAgICAgICAgICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKFwiZXJyb3JcIiwgaGFuZGxlcik7XG4gICAgICAgIH07XG4gICAgICAgIHN0cmVhbS5vbihcImNsb3NlXCIsIGhhbmRsZXIpO1xuICAgICAgICBzdHJlYW0ub24oXCJlbmRcIiwgaGFuZGxlcik7XG4gICAgICAgIHN0cmVhbS5vbihcImVycm9yXCIsIGhhbmRsZXIpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gaXNBcnJheUJ1ZmZlcihib2R5KSB7XG4gICAgcmV0dXJuIGJvZHkgJiYgdHlwZW9mIGJvZHkuYnl0ZUxlbmd0aCA9PT0gXCJudW1iZXJcIjtcbn1cbmNsYXNzIFJlcG9ydFRyYW5zZm9ybSBleHRlbmRzIG5vZGVfc3RyZWFtXzEuVHJhbnNmb3JtIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1mdW5jdGlvbi10eXBlXG4gICAgX3RyYW5zZm9ybShjaHVuaywgX2VuY29kaW5nLCBjYWxsYmFjaykge1xuICAgICAgICB0aGlzLnB1c2goY2h1bmspO1xuICAgICAgICB0aGlzLmxvYWRlZEJ5dGVzICs9IGNodW5rLmxlbmd0aDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3NDYWxsYmFjayh7IGxvYWRlZEJ5dGVzOiB0aGlzLmxvYWRlZEJ5dGVzIH0pO1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY2FsbGJhY2soZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3RydWN0b3IocHJvZ3Jlc3NDYWxsYmFjaykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmxvYWRlZEJ5dGVzID0gMDtcbiAgICAgICAgdGhpcy5wcm9ncmVzc0NhbGxiYWNrID0gcHJvZ3Jlc3NDYWxsYmFjaztcbiAgICB9XG59XG4vKipcbiAqIEEgSHR0cENsaWVudCBpbXBsZW1lbnRhdGlvbiB0aGF0IHVzZXMgTm9kZSdzIFwiaHR0cHNcIiBtb2R1bGUgdG8gc2VuZCBIVFRQUyByZXF1ZXN0cy5cbiAqIEBpbnRlcm5hbFxuICovXG5jbGFzcyBOb2RlSHR0cENsaWVudCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuY2FjaGVkSHR0cHNBZ2VudHMgPSBuZXcgV2Vha01hcCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBNYWtlcyBhIHJlcXVlc3Qgb3ZlciBhbiB1bmRlcmx5aW5nIHRyYW5zcG9ydCBsYXllciBhbmQgcmV0dXJucyB0aGUgcmVzcG9uc2UuXG4gICAgICogQHBhcmFtIHJlcXVlc3QgLSBUaGUgcmVxdWVzdCB0byBiZSBtYWRlLlxuICAgICAqL1xuICAgIGFzeW5jIHNlbmRSZXF1ZXN0KHJlcXVlc3QpIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgIGNvbnN0IGFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICAgICAgbGV0IGFib3J0TGlzdGVuZXI7XG4gICAgICAgIGlmIChyZXF1ZXN0LmFib3J0U2lnbmFsKSB7XG4gICAgICAgICAgICBpZiAocmVxdWVzdC5hYm9ydFNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGFib3J0X2NvbnRyb2xsZXJfMS5BYm9ydEVycm9yKFwiVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhYm9ydExpc3RlbmVyID0gKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiYWJvcnRcIikge1xuICAgICAgICAgICAgICAgICAgICBhYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVxdWVzdC5hYm9ydFNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgYWJvcnRMaXN0ZW5lcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlcXVlc3QudGltZW91dCA+IDApIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGFib3J0Q29udHJvbGxlci5hYm9ydCgpO1xuICAgICAgICAgICAgfSwgcmVxdWVzdC50aW1lb3V0KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhY2NlcHRFbmNvZGluZyA9IHJlcXVlc3QuaGVhZGVycy5nZXQoXCJBY2NlcHQtRW5jb2RpbmdcIik7XG4gICAgICAgIGNvbnN0IHNob3VsZERlY29tcHJlc3MgPSAoYWNjZXB0RW5jb2RpbmcgPT09IG51bGwgfHwgYWNjZXB0RW5jb2RpbmcgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGFjY2VwdEVuY29kaW5nLmluY2x1ZGVzKFwiZ3ppcFwiKSkgfHwgKGFjY2VwdEVuY29kaW5nID09PSBudWxsIHx8IGFjY2VwdEVuY29kaW5nID09PSB2b2lkIDAgPyB2b2lkIDAgOiBhY2NlcHRFbmNvZGluZy5pbmNsdWRlcyhcImRlZmxhdGVcIikpO1xuICAgICAgICBsZXQgYm9keSA9IHR5cGVvZiByZXF1ZXN0LmJvZHkgPT09IFwiZnVuY3Rpb25cIiA/IHJlcXVlc3QuYm9keSgpIDogcmVxdWVzdC5ib2R5O1xuICAgICAgICBpZiAoYm9keSAmJiAhcmVxdWVzdC5oZWFkZXJzLmhhcyhcIkNvbnRlbnQtTGVuZ3RoXCIpKSB7XG4gICAgICAgICAgICBjb25zdCBib2R5TGVuZ3RoID0gZ2V0Qm9keUxlbmd0aChib2R5KTtcbiAgICAgICAgICAgIGlmIChib2R5TGVuZ3RoICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdC5oZWFkZXJzLnNldChcIkNvbnRlbnQtTGVuZ3RoXCIsIGJvZHlMZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZVN0cmVhbTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChib2R5ICYmIHJlcXVlc3Qub25VcGxvYWRQcm9ncmVzcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9uVXBsb2FkUHJvZ3Jlc3MgPSByZXF1ZXN0Lm9uVXBsb2FkUHJvZ3Jlc3M7XG4gICAgICAgICAgICAgICAgY29uc3QgdXBsb2FkUmVwb3J0U3RyZWFtID0gbmV3IFJlcG9ydFRyYW5zZm9ybShvblVwbG9hZFByb2dyZXNzKTtcbiAgICAgICAgICAgICAgICB1cGxvYWRSZXBvcnRTdHJlYW0ub24oXCJlcnJvclwiLCAoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsb2dfanNfMS5sb2dnZXIuZXJyb3IoXCJFcnJvciBpbiB1cGxvYWQgcHJvZ3Jlc3NcIiwgZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKGlzUmVhZGFibGVTdHJlYW0oYm9keSkpIHtcbiAgICAgICAgICAgICAgICAgICAgYm9keS5waXBlKHVwbG9hZFJlcG9ydFN0cmVhbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB1cGxvYWRSZXBvcnRTdHJlYW0uZW5kKGJvZHkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBib2R5ID0gdXBsb2FkUmVwb3J0U3RyZWFtO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5tYWtlUmVxdWVzdChyZXF1ZXN0LCBhYm9ydENvbnRyb2xsZXIsIGJvZHkpO1xuICAgICAgICAgICAgY29uc3QgaGVhZGVycyA9IGdldFJlc3BvbnNlSGVhZGVycyhyZXMpO1xuICAgICAgICAgICAgY29uc3Qgc3RhdHVzID0gKF9hID0gcmVzLnN0YXR1c0NvZGUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IDA7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IHtcbiAgICAgICAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICAgICAgICByZXF1ZXN0LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vIFJlc3BvbnNlcyB0byBIRUFEIG11c3Qgbm90IGhhdmUgYSBib2R5LlxuICAgICAgICAgICAgLy8gSWYgdGhleSBkbyByZXR1cm4gYSBib2R5LCB0aGF0IGJvZHkgbXVzdCBiZSBpZ25vcmVkLlxuICAgICAgICAgICAgaWYgKHJlcXVlc3QubWV0aG9kID09PSBcIkhFQURcIikge1xuICAgICAgICAgICAgICAgIC8vIGNhbGwgcmVzdW1lKCkgYW5kIG5vdCBkZXN0cm95KCkgdG8gYXZvaWQgY2xvc2luZyB0aGUgc29ja2V0XG4gICAgICAgICAgICAgICAgLy8gYW5kIGxvc2luZyBrZWVwIGFsaXZlXG4gICAgICAgICAgICAgICAgcmVzLnJlc3VtZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3BvbnNlU3RyZWFtID0gc2hvdWxkRGVjb21wcmVzcyA/IGdldERlY29kZWRSZXNwb25zZVN0cmVhbShyZXMsIGhlYWRlcnMpIDogcmVzO1xuICAgICAgICAgICAgY29uc3Qgb25Eb3dubG9hZFByb2dyZXNzID0gcmVxdWVzdC5vbkRvd25sb2FkUHJvZ3Jlc3M7XG4gICAgICAgICAgICBpZiAob25Eb3dubG9hZFByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZG93bmxvYWRSZXBvcnRTdHJlYW0gPSBuZXcgUmVwb3J0VHJhbnNmb3JtKG9uRG93bmxvYWRQcm9ncmVzcyk7XG4gICAgICAgICAgICAgICAgZG93bmxvYWRSZXBvcnRTdHJlYW0ub24oXCJlcnJvclwiLCAoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsb2dfanNfMS5sb2dnZXIuZXJyb3IoXCJFcnJvciBpbiBkb3dubG9hZCBwcm9ncmVzc1wiLCBlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXNwb25zZVN0cmVhbS5waXBlKGRvd25sb2FkUmVwb3J0U3RyZWFtKTtcbiAgICAgICAgICAgICAgICByZXNwb25zZVN0cmVhbSA9IGRvd25sb2FkUmVwb3J0U3RyZWFtO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgLy8gVmFsdWUgb2YgUE9TSVRJVkVfSU5GSU5JVFkgaW4gc3RyZWFtUmVzcG9uc2VTdGF0dXNDb2RlcyBpcyBjb25zaWRlcmVkIGFzIGFueSBzdGF0dXMgY29kZVxuICAgICAgICAgICAgKChfYiA9IHJlcXVlc3Quc3RyZWFtUmVzcG9uc2VTdGF0dXNDb2RlcykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmhhcyhOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpKSB8fFxuICAgICAgICAgICAgICAgICgoX2MgPSByZXF1ZXN0LnN0cmVhbVJlc3BvbnNlU3RhdHVzQ29kZXMpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5oYXMocmVzcG9uc2Uuc3RhdHVzKSkpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZS5yZWFkYWJsZVN0cmVhbUJvZHkgPSByZXNwb25zZVN0cmVhbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlLmJvZHlBc1RleHQgPSBhd2FpdCBzdHJlYW1Ub1RleHQocmVzcG9uc2VTdHJlYW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgLy8gY2xlYW4gdXAgZXZlbnQgbGlzdGVuZXJcbiAgICAgICAgICAgIGlmIChyZXF1ZXN0LmFib3J0U2lnbmFsICYmIGFib3J0TGlzdGVuZXIpIHtcbiAgICAgICAgICAgICAgICBsZXQgdXBsb2FkU3RyZWFtRG9uZSA9IFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIGlmIChpc1JlYWRhYmxlU3RyZWFtKGJvZHkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHVwbG9hZFN0cmVhbURvbmUgPSBpc1N0cmVhbUNvbXBsZXRlKGJvZHkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgZG93bmxvYWRTdHJlYW1Eb25lID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgaWYgKGlzUmVhZGFibGVTdHJlYW0ocmVzcG9uc2VTdHJlYW0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvd25sb2FkU3RyZWFtRG9uZSA9IGlzU3RyZWFtQ29tcGxldGUocmVzcG9uc2VTdHJlYW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBQcm9taXNlLmFsbChbdXBsb2FkU3RyZWFtRG9uZSwgZG93bmxvYWRTdHJlYW1Eb25lXSlcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcm9taXNlL2Fsd2F5cy1yZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGFib3J0TGlzdGVuZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIChfYSA9IHJlcXVlc3QuYWJvcnRTaWduYWwpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgYWJvcnRMaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbG9nX2pzXzEubG9nZ2VyLndhcm5pbmcoXCJFcnJvciB3aGVuIGNsZWFuaW5nIHVwIGFib3J0TGlzdGVuZXIgb24gaHR0cFJlcXVlc3RcIiwgZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgbWFrZVJlcXVlc3QocmVxdWVzdCwgYWJvcnRDb250cm9sbGVyLCBib2R5KSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgdXJsID0gbmV3IFVSTChyZXF1ZXN0LnVybCk7XG4gICAgICAgIGNvbnN0IGlzSW5zZWN1cmUgPSB1cmwucHJvdG9jb2wgIT09IFwiaHR0cHM6XCI7XG4gICAgICAgIGlmIChpc0luc2VjdXJlICYmICFyZXF1ZXN0LmFsbG93SW5zZWN1cmVDb25uZWN0aW9uKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjb25uZWN0IHRvICR7cmVxdWVzdC51cmx9IHdoaWxlIGFsbG93SW5zZWN1cmVDb25uZWN0aW9uIGlzIGZhbHNlLmApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFnZW50ID0gKF9hID0gcmVxdWVzdC5hZ2VudCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdGhpcy5nZXRPckNyZWF0ZUFnZW50KHJlcXVlc3QsIGlzSW5zZWN1cmUpO1xuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgYWdlbnQsXG4gICAgICAgICAgICBob3N0bmFtZTogdXJsLmhvc3RuYW1lLFxuICAgICAgICAgICAgcGF0aDogYCR7dXJsLnBhdGhuYW1lfSR7dXJsLnNlYXJjaH1gLFxuICAgICAgICAgICAgcG9ydDogdXJsLnBvcnQsXG4gICAgICAgICAgICBtZXRob2Q6IHJlcXVlc3QubWV0aG9kLFxuICAgICAgICAgICAgaGVhZGVyczogcmVxdWVzdC5oZWFkZXJzLnRvSlNPTih7IHByZXNlcnZlQ2FzZTogdHJ1ZSB9KSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlcSA9IGlzSW5zZWN1cmUgPyBodHRwLnJlcXVlc3Qob3B0aW9ucywgcmVzb2x2ZSkgOiBodHRwcy5yZXF1ZXN0KG9wdGlvbnMsIHJlc29sdmUpO1xuICAgICAgICAgICAgcmVxLm9uY2UoXCJlcnJvclwiLCAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgcmVzdEVycm9yX2pzXzEuUmVzdEVycm9yKGVyci5tZXNzYWdlLCB7IGNvZGU6IChfYSA9IGVyci5jb2RlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiByZXN0RXJyb3JfanNfMS5SZXN0RXJyb3IuUkVRVUVTVF9TRU5EX0VSUk9SLCByZXF1ZXN0IH0pKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYWJvcnRDb250cm9sbGVyLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFib3J0RXJyb3IgPSBuZXcgYWJvcnRfY29udHJvbGxlcl8xLkFib3J0RXJyb3IoXCJUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLlwiKTtcbiAgICAgICAgICAgICAgICByZXEuZGVzdHJveShhYm9ydEVycm9yKTtcbiAgICAgICAgICAgICAgICByZWplY3QoYWJvcnRFcnJvcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChib2R5ICYmIGlzUmVhZGFibGVTdHJlYW0oYm9keSkpIHtcbiAgICAgICAgICAgICAgICBib2R5LnBpcGUocmVxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGJvZHkpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGJvZHkgPT09IFwic3RyaW5nXCIgfHwgQnVmZmVyLmlzQnVmZmVyKGJvZHkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcS5lbmQoYm9keSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzQXJyYXlCdWZmZXIoYm9keSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVxLmVuZChBcnJheUJ1ZmZlci5pc1ZpZXcoYm9keSkgPyBCdWZmZXIuZnJvbShib2R5LmJ1ZmZlcikgOiBCdWZmZXIuZnJvbShib2R5KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsb2dfanNfMS5sb2dnZXIuZXJyb3IoXCJVbnJlY29nbml6ZWQgYm9keSB0eXBlXCIsIGJvZHkpO1xuICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IHJlc3RFcnJvcl9qc18xLlJlc3RFcnJvcihcIlVucmVjb2duaXplZCBib2R5IHR5cGVcIikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIHN0cmVhbXMgZG9uJ3QgbGlrZSBcInVuZGVmaW5lZFwiIGJlaW5nIHBhc3NlZCBhcyBkYXRhXG4gICAgICAgICAgICAgICAgcmVxLmVuZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZ2V0T3JDcmVhdGVBZ2VudChyZXF1ZXN0LCBpc0luc2VjdXJlKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgZGlzYWJsZUtlZXBBbGl2ZSA9IHJlcXVlc3QuZGlzYWJsZUtlZXBBbGl2ZTtcbiAgICAgICAgLy8gSGFuZGxlIEluc2VjdXJlIHJlcXVlc3RzIGZpcnN0XG4gICAgICAgIGlmIChpc0luc2VjdXJlKSB7XG4gICAgICAgICAgICBpZiAoZGlzYWJsZUtlZXBBbGl2ZSkge1xuICAgICAgICAgICAgICAgIC8vIGtlZXBBbGl2ZTpmYWxzZSBpcyB0aGUgZGVmYXVsdCBzbyB3ZSBkb24ndCBuZWVkIGEgY3VzdG9tIEFnZW50XG4gICAgICAgICAgICAgICAgcmV0dXJuIGh0dHAuZ2xvYmFsQWdlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuY2FjaGVkSHR0cEFnZW50KSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gY2FjaGVkIGFnZW50IGNyZWF0ZSBhIG5ldyBvbmUgYW5kIGNhY2hlIGl0LlxuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVkSHR0cEFnZW50ID0gbmV3IGh0dHAuQWdlbnQoeyBrZWVwQWxpdmU6IHRydWUgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYWNoZWRIdHRwQWdlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoZGlzYWJsZUtlZXBBbGl2ZSAmJiAhcmVxdWVzdC50bHNTZXR0aW5ncykge1xuICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhlcmUgYXJlIG5vIHRsc1NldHRpbmdzIGFuZCBrZWVwQWxpdmUgaXMgZmFsc2VcbiAgICAgICAgICAgICAgICAvLyB3ZSBkb24ndCBuZWVkIGEgY3VzdG9tIGFnZW50XG4gICAgICAgICAgICAgICAgcmV0dXJuIGh0dHBzLmdsb2JhbEFnZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gV2UgdXNlIHRoZSB0bHNTZXR0aW5ncyB0byBpbmRleCBjYWNoZWQgY2xpZW50c1xuICAgICAgICAgICAgY29uc3QgdGxzU2V0dGluZ3MgPSAoX2EgPSByZXF1ZXN0LnRsc1NldHRpbmdzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBERUZBVUxUX1RMU19TRVRUSU5HUztcbiAgICAgICAgICAgIC8vIEdldCB0aGUgY2FjaGVkIGFnZW50IG9yIGNyZWF0ZSBhIG5ldyBvbmUgd2l0aCB0aGVcbiAgICAgICAgICAgIC8vIHByb3ZpZGVkIHZhbHVlcyBmb3Iga2VlcEFsaXZlIGFuZCB0bHNTZXR0aW5nc1xuICAgICAgICAgICAgbGV0IGFnZW50ID0gdGhpcy5jYWNoZWRIdHRwc0FnZW50cy5nZXQodGxzU2V0dGluZ3MpO1xuICAgICAgICAgICAgaWYgKGFnZW50ICYmIGFnZW50Lm9wdGlvbnMua2VlcEFsaXZlID09PSAhZGlzYWJsZUtlZXBBbGl2ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhZ2VudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxvZ19qc18xLmxvZ2dlci5pbmZvKFwiTm8gY2FjaGVkIFRMUyBBZ2VudCBleGlzdCwgY3JlYXRpbmcgYSBuZXcgQWdlbnRcIik7XG4gICAgICAgICAgICBhZ2VudCA9IG5ldyBodHRwcy5BZ2VudChPYmplY3QuYXNzaWduKHsgXG4gICAgICAgICAgICAgICAgLy8ga2VlcEFsaXZlIGlzIHRydWUgaWYgZGlzYWJsZUtlZXBBbGl2ZSBpcyBmYWxzZS5cbiAgICAgICAgICAgICAgICBrZWVwQWxpdmU6ICFkaXNhYmxlS2VlcEFsaXZlIH0sIHRsc1NldHRpbmdzKSk7XG4gICAgICAgICAgICB0aGlzLmNhY2hlZEh0dHBzQWdlbnRzLnNldCh0bHNTZXR0aW5ncywgYWdlbnQpO1xuICAgICAgICAgICAgcmV0dXJuIGFnZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0UmVzcG9uc2VIZWFkZXJzKHJlcykge1xuICAgIGNvbnN0IGhlYWRlcnMgPSAoMCwgaHR0cEhlYWRlcnNfanNfMS5jcmVhdGVIdHRwSGVhZGVycykoKTtcbiAgICBmb3IgKGNvbnN0IGhlYWRlciBvZiBPYmplY3Qua2V5cyhyZXMuaGVhZGVycykpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSByZXMuaGVhZGVyc1toZWFkZXJdO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgaGVhZGVycy5zZXQoaGVhZGVyLCB2YWx1ZVswXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIGhlYWRlcnMuc2V0KGhlYWRlciwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBoZWFkZXJzO1xufVxuZnVuY3Rpb24gZ2V0RGVjb2RlZFJlc3BvbnNlU3RyZWFtKHN0cmVhbSwgaGVhZGVycykge1xuICAgIGNvbnN0IGNvbnRlbnRFbmNvZGluZyA9IGhlYWRlcnMuZ2V0KFwiQ29udGVudC1FbmNvZGluZ1wiKTtcbiAgICBpZiAoY29udGVudEVuY29kaW5nID09PSBcImd6aXBcIikge1xuICAgICAgICBjb25zdCB1bnppcCA9IHpsaWIuY3JlYXRlR3VuemlwKCk7XG4gICAgICAgIHN0cmVhbS5waXBlKHVuemlwKTtcbiAgICAgICAgcmV0dXJuIHVuemlwO1xuICAgIH1cbiAgICBlbHNlIGlmIChjb250ZW50RW5jb2RpbmcgPT09IFwiZGVmbGF0ZVwiKSB7XG4gICAgICAgIGNvbnN0IGluZmxhdGUgPSB6bGliLmNyZWF0ZUluZmxhdGUoKTtcbiAgICAgICAgc3RyZWFtLnBpcGUoaW5mbGF0ZSk7XG4gICAgICAgIHJldHVybiBpbmZsYXRlO1xuICAgIH1cbiAgICByZXR1cm4gc3RyZWFtO1xufVxuZnVuY3Rpb24gc3RyZWFtVG9UZXh0KHN0cmVhbSkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IFtdO1xuICAgICAgICBzdHJlYW0ub24oXCJkYXRhXCIsIChjaHVuaykgPT4ge1xuICAgICAgICAgICAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihjaHVuaykpIHtcbiAgICAgICAgICAgICAgICBidWZmZXIucHVzaChjaHVuayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBidWZmZXIucHVzaChCdWZmZXIuZnJvbShjaHVuaykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgc3RyZWFtLm9uKFwiZW5kXCIsICgpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUoQnVmZmVyLmNvbmNhdChidWZmZXIpLnRvU3RyaW5nKFwidXRmOFwiKSk7XG4gICAgICAgIH0pO1xuICAgICAgICBzdHJlYW0ub24oXCJlcnJvclwiLCAoZSkgPT4ge1xuICAgICAgICAgICAgaWYgKGUgJiYgKGUgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZS5uYW1lKSA9PT0gXCJBYm9ydEVycm9yXCIpIHtcbiAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IHJlc3RFcnJvcl9qc18xLlJlc3RFcnJvcihgRXJyb3IgcmVhZGluZyByZXNwb25zZSBhcyB0ZXh0OiAke2UubWVzc2FnZX1gLCB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IHJlc3RFcnJvcl9qc18xLlJlc3RFcnJvci5QQVJTRV9FUlJPUixcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gZ2V0Qm9keUxlbmd0aChib2R5KSB7XG4gICAgaWYgKCFib2R5KSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICBlbHNlIGlmIChCdWZmZXIuaXNCdWZmZXIoYm9keSkpIHtcbiAgICAgICAgcmV0dXJuIGJvZHkubGVuZ3RoO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc1JlYWRhYmxlU3RyZWFtKGJvZHkpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc0FycmF5QnVmZmVyKGJvZHkpKSB7XG4gICAgICAgIHJldHVybiBib2R5LmJ5dGVMZW5ndGg7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBib2R5ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShib2R5KS5sZW5ndGg7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59XG4vKipcbiAqIENyZWF0ZSBhIG5ldyBIdHRwQ2xpZW50IGluc3RhbmNlIGZvciB0aGUgTm9kZUpTIGVudmlyb25tZW50LlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZU5vZGVIdHRwQ2xpZW50KCkge1xuICAgIHJldHVybiBuZXcgTm9kZUh0dHBDbGllbnQoKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW5vZGVIdHRwQ2xpZW50LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlRGVmYXVsdEh0dHBDbGllbnQgPSBjcmVhdGVEZWZhdWx0SHR0cENsaWVudDtcbmNvbnN0IG5vZGVIdHRwQ2xpZW50X2pzXzEgPSByZXF1aXJlKFwiLi9ub2RlSHR0cENsaWVudC5qc1wiKTtcbi8qKlxuICogQ3JlYXRlIHRoZSBjb3JyZWN0IEh0dHBDbGllbnQgZm9yIHRoZSBjdXJyZW50IGVudmlyb25tZW50LlxuICovXG5mdW5jdGlvbiBjcmVhdGVEZWZhdWx0SHR0cENsaWVudCgpIHtcbiAgICByZXR1cm4gKDAsIG5vZGVIdHRwQ2xpZW50X2pzXzEuY3JlYXRlTm9kZUh0dHBDbGllbnQpKCk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZWZhdWx0SHR0cENsaWVudC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNyZWF0ZVBpcGVsaW5lUmVxdWVzdCA9IGNyZWF0ZVBpcGVsaW5lUmVxdWVzdDtcbmNvbnN0IGh0dHBIZWFkZXJzX2pzXzEgPSByZXF1aXJlKFwiLi9odHRwSGVhZGVycy5qc1wiKTtcbmNvbnN0IGNvcmVfdXRpbF8xID0gcmVxdWlyZShcIkBhenVyZS9jb3JlLXV0aWxcIik7XG5jbGFzcyBQaXBlbGluZVJlcXVlc3RJbXBsIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2UsIF9mLCBfZztcbiAgICAgICAgdGhpcy51cmwgPSBvcHRpb25zLnVybDtcbiAgICAgICAgdGhpcy5ib2R5ID0gb3B0aW9ucy5ib2R5O1xuICAgICAgICB0aGlzLmhlYWRlcnMgPSAoX2EgPSBvcHRpb25zLmhlYWRlcnMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICgwLCBodHRwSGVhZGVyc19qc18xLmNyZWF0ZUh0dHBIZWFkZXJzKSgpO1xuICAgICAgICB0aGlzLm1ldGhvZCA9IChfYiA9IG9wdGlvbnMubWV0aG9kKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBcIkdFVFwiO1xuICAgICAgICB0aGlzLnRpbWVvdXQgPSAoX2MgPSBvcHRpb25zLnRpbWVvdXQpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IDA7XG4gICAgICAgIHRoaXMubXVsdGlwYXJ0Qm9keSA9IG9wdGlvbnMubXVsdGlwYXJ0Qm9keTtcbiAgICAgICAgdGhpcy5mb3JtRGF0YSA9IG9wdGlvbnMuZm9ybURhdGE7XG4gICAgICAgIHRoaXMuZGlzYWJsZUtlZXBBbGl2ZSA9IChfZCA9IG9wdGlvbnMuZGlzYWJsZUtlZXBBbGl2ZSkgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDogZmFsc2U7XG4gICAgICAgIHRoaXMucHJveHlTZXR0aW5ncyA9IG9wdGlvbnMucHJveHlTZXR0aW5ncztcbiAgICAgICAgdGhpcy5zdHJlYW1SZXNwb25zZVN0YXR1c0NvZGVzID0gb3B0aW9ucy5zdHJlYW1SZXNwb25zZVN0YXR1c0NvZGVzO1xuICAgICAgICB0aGlzLndpdGhDcmVkZW50aWFscyA9IChfZSA9IG9wdGlvbnMud2l0aENyZWRlbnRpYWxzKSAhPT0gbnVsbCAmJiBfZSAhPT0gdm9pZCAwID8gX2UgOiBmYWxzZTtcbiAgICAgICAgdGhpcy5hYm9ydFNpZ25hbCA9IG9wdGlvbnMuYWJvcnRTaWduYWw7XG4gICAgICAgIHRoaXMudHJhY2luZ09wdGlvbnMgPSBvcHRpb25zLnRyYWNpbmdPcHRpb25zO1xuICAgICAgICB0aGlzLm9uVXBsb2FkUHJvZ3Jlc3MgPSBvcHRpb25zLm9uVXBsb2FkUHJvZ3Jlc3M7XG4gICAgICAgIHRoaXMub25Eb3dubG9hZFByb2dyZXNzID0gb3B0aW9ucy5vbkRvd25sb2FkUHJvZ3Jlc3M7XG4gICAgICAgIHRoaXMucmVxdWVzdElkID0gb3B0aW9ucy5yZXF1ZXN0SWQgfHwgKDAsIGNvcmVfdXRpbF8xLnJhbmRvbVVVSUQpKCk7XG4gICAgICAgIHRoaXMuYWxsb3dJbnNlY3VyZUNvbm5lY3Rpb24gPSAoX2YgPSBvcHRpb25zLmFsbG93SW5zZWN1cmVDb25uZWN0aW9uKSAhPT0gbnVsbCAmJiBfZiAhPT0gdm9pZCAwID8gX2YgOiBmYWxzZTtcbiAgICAgICAgdGhpcy5lbmFibGVCcm93c2VyU3RyZWFtcyA9IChfZyA9IG9wdGlvbnMuZW5hYmxlQnJvd3NlclN0cmVhbXMpICE9PSBudWxsICYmIF9nICE9PSB2b2lkIDAgPyBfZyA6IGZhbHNlO1xuICAgIH1cbn1cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBwaXBlbGluZSByZXF1ZXN0IHdpdGggdGhlIGdpdmVuIG9wdGlvbnMuXG4gKiBUaGlzIG1ldGhvZCBpcyB0byBhbGxvdyBmb3IgdGhlIGVhc3kgc2V0dGluZyBvZiBkZWZhdWx0IHZhbHVlcyBhbmQgbm90IHJlcXVpcmVkLlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyB0byBjcmVhdGUgdGhlIHJlcXVlc3Qgd2l0aC5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlUGlwZWxpbmVSZXF1ZXN0KG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IFBpcGVsaW5lUmVxdWVzdEltcGwob3B0aW9ucyk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1waXBlbGluZVJlcXVlc3QuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5leHBvbmVudGlhbFJldHJ5UG9saWN5TmFtZSA9IHZvaWQgMDtcbmV4cG9ydHMuZXhwb25lbnRpYWxSZXRyeVBvbGljeSA9IGV4cG9uZW50aWFsUmV0cnlQb2xpY3k7XG5jb25zdCBleHBvbmVudGlhbFJldHJ5U3RyYXRlZ3lfanNfMSA9IHJlcXVpcmUoXCIuLi9yZXRyeVN0cmF0ZWdpZXMvZXhwb25lbnRpYWxSZXRyeVN0cmF0ZWd5LmpzXCIpO1xuY29uc3QgcmV0cnlQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3JldHJ5UG9saWN5LmpzXCIpO1xuY29uc3QgY29uc3RhbnRzX2pzXzEgPSByZXF1aXJlKFwiLi4vY29uc3RhbnRzLmpzXCIpO1xuLyoqXG4gKiBUaGUgcHJvZ3JhbW1hdGljIGlkZW50aWZpZXIgb2YgdGhlIGV4cG9uZW50aWFsUmV0cnlQb2xpY3kuXG4gKi9cbmV4cG9ydHMuZXhwb25lbnRpYWxSZXRyeVBvbGljeU5hbWUgPSBcImV4cG9uZW50aWFsUmV0cnlQb2xpY3lcIjtcbi8qKlxuICogQSBwb2xpY3kgdGhhdCBhdHRlbXB0cyB0byByZXRyeSByZXF1ZXN0cyB3aGlsZSBpbnRyb2R1Y2luZyBhbiBleHBvbmVudGlhbGx5IGluY3JlYXNpbmcgZGVsYXkuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdGhhdCBjb25maWd1cmUgcmV0cnkgbG9naWMuXG4gKi9cbmZ1bmN0aW9uIGV4cG9uZW50aWFsUmV0cnlQb2xpY3kob3B0aW9ucyA9IHt9KSB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiAoMCwgcmV0cnlQb2xpY3lfanNfMS5yZXRyeVBvbGljeSkoW1xuICAgICAgICAoMCwgZXhwb25lbnRpYWxSZXRyeVN0cmF0ZWd5X2pzXzEuZXhwb25lbnRpYWxSZXRyeVN0cmF0ZWd5KShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMpLCB7IGlnbm9yZVN5c3RlbUVycm9yczogdHJ1ZSB9KSksXG4gICAgXSwge1xuICAgICAgICBtYXhSZXRyaWVzOiAoX2EgPSBvcHRpb25zLm1heFJldHJpZXMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGNvbnN0YW50c19qc18xLkRFRkFVTFRfUkVUUllfUE9MSUNZX0NPVU5ULFxuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXhwb25lbnRpYWxSZXRyeVBvbGljeS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnN5c3RlbUVycm9yUmV0cnlQb2xpY3lOYW1lID0gdm9pZCAwO1xuZXhwb3J0cy5zeXN0ZW1FcnJvclJldHJ5UG9saWN5ID0gc3lzdGVtRXJyb3JSZXRyeVBvbGljeTtcbmNvbnN0IGV4cG9uZW50aWFsUmV0cnlTdHJhdGVneV9qc18xID0gcmVxdWlyZShcIi4uL3JldHJ5U3RyYXRlZ2llcy9leHBvbmVudGlhbFJldHJ5U3RyYXRlZ3kuanNcIik7XG5jb25zdCByZXRyeVBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcmV0cnlQb2xpY3kuanNcIik7XG5jb25zdCBjb25zdGFudHNfanNfMSA9IHJlcXVpcmUoXCIuLi9jb25zdGFudHMuanNcIik7XG4vKipcbiAqIE5hbWUgb2YgdGhlIHtAbGluayBzeXN0ZW1FcnJvclJldHJ5UG9saWN5fVxuICovXG5leHBvcnRzLnN5c3RlbUVycm9yUmV0cnlQb2xpY3lOYW1lID0gXCJzeXN0ZW1FcnJvclJldHJ5UG9saWN5XCI7XG4vKipcbiAqIEEgcmV0cnkgcG9saWN5IHRoYXQgc3BlY2lmaWNhbGx5IHNlZWtzIHRvIGhhbmRsZSBlcnJvcnMgaW4gdGhlXG4gKiB1bmRlcmx5aW5nIHRyYW5zcG9ydCBsYXllciAoZS5nLiBETlMgbG9va3VwIGZhaWx1cmVzKSByYXRoZXIgdGhhblxuICogcmV0cnlhYmxlIGVycm9yIGNvZGVzIGZyb20gdGhlIHNlcnZlciBpdHNlbGYuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdGhhdCBjdXN0b21pemUgdGhlIHBvbGljeS5cbiAqL1xuZnVuY3Rpb24gc3lzdGVtRXJyb3JSZXRyeVBvbGljeShvcHRpb25zID0ge30pIHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogZXhwb3J0cy5zeXN0ZW1FcnJvclJldHJ5UG9saWN5TmFtZSxcbiAgICAgICAgc2VuZFJlcXVlc3Q6ICgwLCByZXRyeVBvbGljeV9qc18xLnJldHJ5UG9saWN5KShbXG4gICAgICAgICAgICAoMCwgZXhwb25lbnRpYWxSZXRyeVN0cmF0ZWd5X2pzXzEuZXhwb25lbnRpYWxSZXRyeVN0cmF0ZWd5KShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMpLCB7IGlnbm9yZUh0dHBTdGF0dXNDb2RlczogdHJ1ZSB9KSksXG4gICAgICAgIF0sIHtcbiAgICAgICAgICAgIG1heFJldHJpZXM6IChfYSA9IG9wdGlvbnMubWF4UmV0cmllcykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogY29uc3RhbnRzX2pzXzEuREVGQVVMVF9SRVRSWV9QT0xJQ1lfQ09VTlQsXG4gICAgICAgIH0pLnNlbmRSZXF1ZXN0LFxuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zeXN0ZW1FcnJvclJldHJ5UG9saWN5LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudGhyb3R0bGluZ1JldHJ5UG9saWN5TmFtZSA9IHZvaWQgMDtcbmV4cG9ydHMudGhyb3R0bGluZ1JldHJ5UG9saWN5ID0gdGhyb3R0bGluZ1JldHJ5UG9saWN5O1xuY29uc3QgdGhyb3R0bGluZ1JldHJ5U3RyYXRlZ3lfanNfMSA9IHJlcXVpcmUoXCIuLi9yZXRyeVN0cmF0ZWdpZXMvdGhyb3R0bGluZ1JldHJ5U3RyYXRlZ3kuanNcIik7XG5jb25zdCByZXRyeVBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcmV0cnlQb2xpY3kuanNcIik7XG5jb25zdCBjb25zdGFudHNfanNfMSA9IHJlcXVpcmUoXCIuLi9jb25zdGFudHMuanNcIik7XG4vKipcbiAqIE5hbWUgb2YgdGhlIHtAbGluayB0aHJvdHRsaW5nUmV0cnlQb2xpY3l9XG4gKi9cbmV4cG9ydHMudGhyb3R0bGluZ1JldHJ5UG9saWN5TmFtZSA9IFwidGhyb3R0bGluZ1JldHJ5UG9saWN5XCI7XG4vKipcbiAqIEEgcG9saWN5IHRoYXQgcmV0cmllcyB3aGVuIHRoZSBzZXJ2ZXIgc2VuZHMgYSA0MjkgcmVzcG9uc2Ugd2l0aCBhIFJldHJ5LUFmdGVyIGhlYWRlci5cbiAqXG4gKiBUbyBsZWFybiBtb3JlLCBwbGVhc2UgcmVmZXIgdG9cbiAqIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL2F6dXJlL2F6dXJlLXJlc291cmNlLW1hbmFnZXIvcmVzb3VyY2UtbWFuYWdlci1yZXF1ZXN0LWxpbWl0cyxcbiAqIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL2F6dXJlL2F6dXJlLXN1YnNjcmlwdGlvbi1zZXJ2aWNlLWxpbWl0cyBhbmRcbiAqIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL2F6dXJlL3ZpcnR1YWwtbWFjaGluZXMvdHJvdWJsZXNob290aW5nL3Ryb3VibGVzaG9vdGluZy10aHJvdHRsaW5nLWVycm9yc1xuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0aGF0IGNvbmZpZ3VyZSByZXRyeSBsb2dpYy5cbiAqL1xuZnVuY3Rpb24gdGhyb3R0bGluZ1JldHJ5UG9saWN5KG9wdGlvbnMgPSB7fSkge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBleHBvcnRzLnRocm90dGxpbmdSZXRyeVBvbGljeU5hbWUsXG4gICAgICAgIHNlbmRSZXF1ZXN0OiAoMCwgcmV0cnlQb2xpY3lfanNfMS5yZXRyeVBvbGljeSkoWygwLCB0aHJvdHRsaW5nUmV0cnlTdHJhdGVneV9qc18xLnRocm90dGxpbmdSZXRyeVN0cmF0ZWd5KSgpXSwge1xuICAgICAgICAgICAgbWF4UmV0cmllczogKF9hID0gb3B0aW9ucy5tYXhSZXRyaWVzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBjb25zdGFudHNfanNfMS5ERUZBVUxUX1JFVFJZX1BPTElDWV9DT1VOVCxcbiAgICAgICAgfSkuc2VuZFJlcXVlc3QsXG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRocm90dGxpbmdSZXRyeVBvbGljeS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkRFRkFVTFRfQ1lDTEVSX09QVElPTlMgPSB2b2lkIDA7XG5leHBvcnRzLmNyZWF0ZVRva2VuQ3ljbGVyID0gY3JlYXRlVG9rZW5DeWNsZXI7XG5jb25zdCBoZWxwZXJzX2pzXzEgPSByZXF1aXJlKFwiLi9oZWxwZXJzLmpzXCIpO1xuLy8gRGVmYXVsdCBvcHRpb25zIGZvciB0aGUgY3ljbGVyIGlmIG5vbmUgYXJlIHByb3ZpZGVkXG5leHBvcnRzLkRFRkFVTFRfQ1lDTEVSX09QVElPTlMgPSB7XG4gICAgZm9yY2VkUmVmcmVzaFdpbmRvd0luTXM6IDEwMDAsIC8vIEZvcmNlIHdhaXRpbmcgZm9yIGEgcmVmcmVzaCAxcyBiZWZvcmUgdGhlIHRva2VuIGV4cGlyZXNcbiAgICByZXRyeUludGVydmFsSW5NczogMzAwMCwgLy8gQWxsb3cgcmVmcmVzaCBhdHRlbXB0cyBldmVyeSAzc1xuICAgIHJlZnJlc2hXaW5kb3dJbk1zOiAxMDAwICogNjAgKiAyLCAvLyBTdGFydCByZWZyZXNoaW5nIDJtIGJlZm9yZSBleHBpcnlcbn07XG4vKipcbiAqIENvbnZlcnRzIGFuIGFuIHVucmVsaWFibGUgYWNjZXNzIHRva2VuIGdldHRlciAod2hpY2ggbWF5IHJlc29sdmUgd2l0aCBudWxsKVxuICogaW50byBhbiBBY2Nlc3NUb2tlbkdldHRlciBieSByZXRyeWluZyB0aGUgdW5yZWxpYWJsZSBnZXR0ZXIgaW4gYSByZWd1bGFyXG4gKiBpbnRlcnZhbC5cbiAqXG4gKiBAcGFyYW0gZ2V0QWNjZXNzVG9rZW4gLSBBIGZ1bmN0aW9uIHRoYXQgcHJvZHVjZXMgYSBwcm9taXNlIG9mIGFuIGFjY2VzcyB0b2tlbiB0aGF0IG1heSBmYWlsIGJ5IHJldHVybmluZyBudWxsLlxuICogQHBhcmFtIHJldHJ5SW50ZXJ2YWxJbk1zIC0gVGhlIHRpbWUgKGluIG1pbGxpc2Vjb25kcykgdG8gd2FpdCBiZXR3ZWVuIHJldHJ5IGF0dGVtcHRzLlxuICogQHBhcmFtIHJlZnJlc2hUaW1lb3V0IC0gVGhlIHRpbWVzdGFtcCBhZnRlciB3aGljaCB0aGUgcmVmcmVzaCBhdHRlbXB0IHdpbGwgZmFpbCwgdGhyb3dpbmcgYW4gZXhjZXB0aW9uLlxuICogQHJldHVybnMgLSBBIHByb21pc2UgdGhhdCwgaWYgaXQgcmVzb2x2ZXMsIHdpbGwgcmVzb2x2ZSB3aXRoIGFuIGFjY2VzcyB0b2tlbi5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gYmVnaW5SZWZyZXNoKGdldEFjY2Vzc1Rva2VuLCByZXRyeUludGVydmFsSW5NcywgcmVmcmVzaFRpbWVvdXQpIHtcbiAgICAvLyBUaGlzIHdyYXBwZXIgaGFuZGxlcyBleGNlcHRpb25zIGdyYWNlZnVsbHkgYXMgbG9uZyBhcyB3ZSBoYXZlbid0IGV4Y2VlZGVkXG4gICAgLy8gdGhlIHRpbWVvdXQuXG4gICAgYXN5bmMgZnVuY3Rpb24gdHJ5R2V0QWNjZXNzVG9rZW4oKSB7XG4gICAgICAgIGlmIChEYXRlLm5vdygpIDwgcmVmcmVzaFRpbWVvdXQpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGdldEFjY2Vzc1Rva2VuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoX2EpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbmFsVG9rZW4gPSBhd2FpdCBnZXRBY2Nlc3NUb2tlbigpO1xuICAgICAgICAgICAgLy8gVGltZW91dCBpcyB1cCwgc28gdGhyb3cgaWYgaXQncyBzdGlsbCBudWxsXG4gICAgICAgICAgICBpZiAoZmluYWxUb2tlbiA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byByZWZyZXNoIGFjY2VzcyB0b2tlbi5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmluYWxUb2tlbjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBsZXQgdG9rZW4gPSBhd2FpdCB0cnlHZXRBY2Nlc3NUb2tlbigpO1xuICAgIHdoaWxlICh0b2tlbiA9PT0gbnVsbCkge1xuICAgICAgICBhd2FpdCAoMCwgaGVscGVyc19qc18xLmRlbGF5KShyZXRyeUludGVydmFsSW5Ncyk7XG4gICAgICAgIHRva2VuID0gYXdhaXQgdHJ5R2V0QWNjZXNzVG9rZW4oKTtcbiAgICB9XG4gICAgcmV0dXJuIHRva2VuO1xufVxuLyoqXG4gKiBDcmVhdGVzIGEgdG9rZW4gY3ljbGVyIGZyb20gYSBjcmVkZW50aWFsLCBzY29wZXMsIGFuZCBvcHRpb25hbCBzZXR0aW5ncy5cbiAqXG4gKiBBIHRva2VuIGN5Y2xlciByZXByZXNlbnRzIGEgd2F5IHRvIHJlbGlhYmx5IHJldHJpZXZlIGEgdmFsaWQgYWNjZXNzIHRva2VuXG4gKiBmcm9tIGEgVG9rZW5DcmVkZW50aWFsLiBJdCB3aWxsIGhhbmRsZSBpbml0aWFsaXppbmcgdGhlIHRva2VuLCByZWZyZXNoaW5nIGl0XG4gKiB3aGVuIGl0IG5lYXJzIGV4cGlyYXRpb24sIGFuZCBzeW5jaHJvbml6ZXMgcmVmcmVzaCBhdHRlbXB0cyB0byBhdm9pZFxuICogY29uY3VycmVuY3kgaGF6YXJkcy5cbiAqXG4gKiBAcGFyYW0gY3JlZGVudGlhbCAtIHRoZSB1bmRlcmx5aW5nIFRva2VuQ3JlZGVudGlhbCB0aGF0IHByb3ZpZGVzIHRoZSBhY2Nlc3NcbiAqIHRva2VuXG4gKiBAcGFyYW0gdG9rZW5DeWNsZXJPcHRpb25zIC0gb3B0aW9uYWxseSBvdmVycmlkZSBkZWZhdWx0IHNldHRpbmdzIGZvciB0aGUgY3ljbGVyXG4gKlxuICogQHJldHVybnMgLSBhIGZ1bmN0aW9uIHRoYXQgcmVsaWFibHkgcHJvZHVjZXMgYSB2YWxpZCBhY2Nlc3MgdG9rZW5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlVG9rZW5DeWNsZXIoY3JlZGVudGlhbCwgdG9rZW5DeWNsZXJPcHRpb25zKSB7XG4gICAgbGV0IHJlZnJlc2hXb3JrZXIgPSBudWxsO1xuICAgIGxldCB0b2tlbiA9IG51bGw7XG4gICAgbGV0IHRlbmFudElkO1xuICAgIGNvbnN0IG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGV4cG9ydHMuREVGQVVMVF9DWUNMRVJfT1BUSU9OUyksIHRva2VuQ3ljbGVyT3B0aW9ucyk7XG4gICAgLyoqXG4gICAgICogVGhpcyBsaXR0bGUgaG9sZGVyIGRlZmluZXMgc2V2ZXJhbCBwcmVkaWNhdGVzIHRoYXQgd2UgdXNlIHRvIGNvbnN0cnVjdFxuICAgICAqIHRoZSBydWxlcyBvZiByZWZyZXNoaW5nIHRoZSB0b2tlbi5cbiAgICAgKi9cbiAgICBjb25zdCBjeWNsZXIgPSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQcm9kdWNlcyB0cnVlIGlmIGEgcmVmcmVzaCBqb2IgaXMgY3VycmVudGx5IGluIHByb2dyZXNzLlxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0IGlzUmVmcmVzaGluZygpIHtcbiAgICAgICAgICAgIHJldHVybiByZWZyZXNoV29ya2VyICE9PSBudWxsO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogUHJvZHVjZXMgdHJ1ZSBpZiB0aGUgY3ljbGVyIFNIT1VMRCByZWZyZXNoICh3ZSBhcmUgd2l0aGluIHRoZSByZWZyZXNoXG4gICAgICAgICAqIHdpbmRvdyBhbmQgbm90IGFscmVhZHkgcmVmcmVzaGluZylcbiAgICAgICAgICovXG4gICAgICAgIGdldCBzaG91bGRSZWZyZXNoKCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgaWYgKGN5Y2xlci5pc1JlZnJlc2hpbmcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoKHRva2VuID09PSBudWxsIHx8IHRva2VuID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0b2tlbi5yZWZyZXNoQWZ0ZXJUaW1lc3RhbXApICYmIHRva2VuLnJlZnJlc2hBZnRlclRpbWVzdGFtcCA8IERhdGUubm93KCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAoKF9hID0gdG9rZW4gPT09IG51bGwgfHwgdG9rZW4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRva2VuLmV4cGlyZXNPblRpbWVzdGFtcCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogMCkgLSBvcHRpb25zLnJlZnJlc2hXaW5kb3dJbk1zIDwgRGF0ZS5ub3coKTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFByb2R1Y2VzIHRydWUgaWYgdGhlIGN5Y2xlciBNVVNUIHJlZnJlc2ggKG51bGwgb3IgbmVhcmx5LWV4cGlyZWRcbiAgICAgICAgICogdG9rZW4pLlxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0IG11c3RSZWZyZXNoKCkge1xuICAgICAgICAgICAgcmV0dXJuICh0b2tlbiA9PT0gbnVsbCB8fCB0b2tlbi5leHBpcmVzT25UaW1lc3RhbXAgLSBvcHRpb25zLmZvcmNlZFJlZnJlc2hXaW5kb3dJbk1zIDwgRGF0ZS5ub3coKSk7XG4gICAgICAgIH0sXG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBTdGFydHMgYSByZWZyZXNoIGpvYiBvciByZXR1cm5zIHRoZSBleGlzdGluZyBqb2IgaWYgb25lIGlzIGFscmVhZHlcbiAgICAgKiBydW5uaW5nLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJlZnJlc2goc2NvcGVzLCBnZXRUb2tlbk9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoIWN5Y2xlci5pc1JlZnJlc2hpbmcpIHtcbiAgICAgICAgICAgIC8vIFdlIGJpbmQgYHNjb3Blc2AgaGVyZSB0byBhdm9pZCBwYXNzaW5nIGl0IGFyb3VuZCBhIGxvdFxuICAgICAgICAgICAgY29uc3QgdHJ5R2V0QWNjZXNzVG9rZW4gPSAoKSA9PiBjcmVkZW50aWFsLmdldFRva2VuKHNjb3BlcywgZ2V0VG9rZW5PcHRpb25zKTtcbiAgICAgICAgICAgIC8vIFRha2UgYWR2YW50YWdlIG9mIHByb21pc2UgY2hhaW5pbmcgdG8gaW5zZXJ0IGFuIGFzc2lnbm1lbnQgdG8gYHRva2VuYFxuICAgICAgICAgICAgLy8gYmVmb3JlIHRoZSByZWZyZXNoIGNhbiBiZSBjb25zaWRlcmVkIGRvbmUuXG4gICAgICAgICAgICByZWZyZXNoV29ya2VyID0gYmVnaW5SZWZyZXNoKHRyeUdldEFjY2Vzc1Rva2VuLCBvcHRpb25zLnJldHJ5SW50ZXJ2YWxJbk1zLCBcbiAgICAgICAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYSB0b2tlbiwgdGhlbiB3ZSBzaG91bGQgdGltZW91dCBpbW1lZGlhdGVseVxuICAgICAgICAgICAgKF9hID0gdG9rZW4gPT09IG51bGwgfHwgdG9rZW4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRva2VuLmV4cGlyZXNPblRpbWVzdGFtcCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogRGF0ZS5ub3coKSlcbiAgICAgICAgICAgICAgICAudGhlbigoX3Rva2VuKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVmcmVzaFdvcmtlciA9IG51bGw7XG4gICAgICAgICAgICAgICAgdG9rZW4gPSBfdG9rZW47XG4gICAgICAgICAgICAgICAgdGVuYW50SWQgPSBnZXRUb2tlbk9wdGlvbnMudGVuYW50SWQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuY2F0Y2goKHJlYXNvbikgPT4ge1xuICAgICAgICAgICAgICAgIC8vIFdlIGFsc28gc2hvdWxkIHJlc2V0IHRoZSByZWZyZXNoZXIgaWYgd2UgZW50ZXIgYSBmYWlsZWQgc3RhdGUuICBBbGxcbiAgICAgICAgICAgICAgICAvLyBleGlzdGluZyBhd2FpdGVycyB3aWxsIHRocm93LCBidXQgc3Vic2VxdWVudCByZXF1ZXN0cyB3aWxsIHN0YXJ0IGFcbiAgICAgICAgICAgICAgICAvLyBuZXcgcmV0cnkgY2hhaW4uXG4gICAgICAgICAgICAgICAgcmVmcmVzaFdvcmtlciA9IG51bGw7XG4gICAgICAgICAgICAgICAgdG9rZW4gPSBudWxsO1xuICAgICAgICAgICAgICAgIHRlbmFudElkID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHRocm93IHJlYXNvbjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZWZyZXNoV29ya2VyO1xuICAgIH1cbiAgICByZXR1cm4gYXN5bmMgKHNjb3BlcywgdG9rZW5PcHRpb25zKSA9PiB7XG4gICAgICAgIC8vXG4gICAgICAgIC8vIFNpbXBsZSBydWxlczpcbiAgICAgICAgLy8gLSBJZiB3ZSBNVVNUIHJlZnJlc2gsIHRoZW4gcmV0dXJuIHRoZSByZWZyZXNoIHRhc2ssIGJsb2NraW5nXG4gICAgICAgIC8vICAgdGhlIHBpcGVsaW5lIHVudGlsIGEgdG9rZW4gaXMgYXZhaWxhYmxlLlxuICAgICAgICAvLyAtIElmIHdlIFNIT1VMRCByZWZyZXNoLCB0aGVuIHJ1biByZWZyZXNoIGJ1dCBkb24ndCByZXR1cm4gaXRcbiAgICAgICAgLy8gICAod2UgY2FuIHN0aWxsIHVzZSB0aGUgY2FjaGVkIHRva2VuKS5cbiAgICAgICAgLy8gLSBSZXR1cm4gdGhlIHRva2VuLCBzaW5jZSBpdCdzIGZpbmUgaWYgd2UgZGlkbid0IHJldHVybiBpblxuICAgICAgICAvLyAgIHN0ZXAgMS5cbiAgICAgICAgLy9cbiAgICAgICAgY29uc3QgaGFzQ2xhaW1DaGFsbGVuZ2UgPSBCb29sZWFuKHRva2VuT3B0aW9ucy5jbGFpbXMpO1xuICAgICAgICBjb25zdCB0ZW5hbnRJZENoYW5nZWQgPSB0ZW5hbnRJZCAhPT0gdG9rZW5PcHRpb25zLnRlbmFudElkO1xuICAgICAgICBpZiAoaGFzQ2xhaW1DaGFsbGVuZ2UpIHtcbiAgICAgICAgICAgIC8vIElmIHdlJ3ZlIHJlY2VpdmVkIGEgY2xhaW0sIHdlIGtub3cgdGhlIGV4aXN0aW5nIHRva2VuIGlzbid0IHZhbGlkXG4gICAgICAgICAgICAvLyBXZSB3YW50IHRvIGNsZWFyIGl0IHNvIHRoYXQgdGhhdCByZWZyZXNoIHdvcmtlciB3b24ndCB1c2UgdGhlIG9sZCBleHBpcmF0aW9uIHRpbWUgYXMgYSB0aW1lb3V0XG4gICAgICAgICAgICB0b2tlbiA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgdGhlIHRlbmFudElkIHBhc3NlZCBpbiB0b2tlbiBvcHRpb25zIGlzIGRpZmZlcmVudCB0byB0aGUgb25lIHdlIGhhdmVcbiAgICAgICAgLy8gT3IgaWYgd2UgYXJlIGluIGNsYWltIGNoYWxsZW5nZSBhbmQgdGhlIHRva2VuIHdhcyByZWplY3RlZCBhbmQgYSBuZXcgYWNjZXNzIHRva2VuIG5lZWQgdG8gYmUgaXNzdWVkLCB3ZSBuZWVkIHRvXG4gICAgICAgIC8vIHJlZnJlc2ggdGhlIHRva2VuIHdpdGggdGhlIG5ldyB0ZW5hbnRJZCBvciB0b2tlbi5cbiAgICAgICAgY29uc3QgbXVzdFJlZnJlc2ggPSB0ZW5hbnRJZENoYW5nZWQgfHwgaGFzQ2xhaW1DaGFsbGVuZ2UgfHwgY3ljbGVyLm11c3RSZWZyZXNoO1xuICAgICAgICBpZiAobXVzdFJlZnJlc2gpIHtcbiAgICAgICAgICAgIHJldHVybiByZWZyZXNoKHNjb3BlcywgdG9rZW5PcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY3ljbGVyLnNob3VsZFJlZnJlc2gpIHtcbiAgICAgICAgICAgIHJlZnJlc2goc2NvcGVzLCB0b2tlbk9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0b2tlbjtcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dG9rZW5DeWNsZXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5iZWFyZXJUb2tlbkF1dGhlbnRpY2F0aW9uUG9saWN5TmFtZSA9IHZvaWQgMDtcbmV4cG9ydHMuYmVhcmVyVG9rZW5BdXRoZW50aWNhdGlvblBvbGljeSA9IGJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3k7XG5jb25zdCB0b2tlbkN5Y2xlcl9qc18xID0gcmVxdWlyZShcIi4uL3V0aWwvdG9rZW5DeWNsZXIuanNcIik7XG5jb25zdCBsb2dfanNfMSA9IHJlcXVpcmUoXCIuLi9sb2cuanNcIik7XG4vKipcbiAqIFRoZSBwcm9ncmFtbWF0aWMgaWRlbnRpZmllciBvZiB0aGUgYmVhcmVyVG9rZW5BdXRoZW50aWNhdGlvblBvbGljeS5cbiAqL1xuZXhwb3J0cy5iZWFyZXJUb2tlbkF1dGhlbnRpY2F0aW9uUG9saWN5TmFtZSA9IFwiYmVhcmVyVG9rZW5BdXRoZW50aWNhdGlvblBvbGljeVwiO1xuLyoqXG4gKiBEZWZhdWx0IGF1dGhvcml6ZSByZXF1ZXN0IGhhbmRsZXJcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZGVmYXVsdEF1dGhvcml6ZVJlcXVlc3Qob3B0aW9ucykge1xuICAgIGNvbnN0IHsgc2NvcGVzLCBnZXRBY2Nlc3NUb2tlbiwgcmVxdWVzdCB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBnZXRUb2tlbk9wdGlvbnMgPSB7XG4gICAgICAgIGFib3J0U2lnbmFsOiByZXF1ZXN0LmFib3J0U2lnbmFsLFxuICAgICAgICB0cmFjaW5nT3B0aW9uczogcmVxdWVzdC50cmFjaW5nT3B0aW9ucyxcbiAgICB9O1xuICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gYXdhaXQgZ2V0QWNjZXNzVG9rZW4oc2NvcGVzLCBnZXRUb2tlbk9wdGlvbnMpO1xuICAgIGlmIChhY2Nlc3NUb2tlbikge1xuICAgICAgICBvcHRpb25zLnJlcXVlc3QuaGVhZGVycy5zZXQoXCJBdXRob3JpemF0aW9uXCIsIGBCZWFyZXIgJHthY2Nlc3NUb2tlbi50b2tlbn1gKTtcbiAgICB9XG59XG4vKipcbiAqIFdlIHdpbGwgcmV0cmlldmUgdGhlIGNoYWxsZW5nZSBvbmx5IGlmIHRoZSByZXNwb25zZSBzdGF0dXMgY29kZSB3YXMgNDAxLFxuICogYW5kIGlmIHRoZSByZXNwb25zZSBjb250YWluZWQgdGhlIGhlYWRlciBcIldXVy1BdXRoZW50aWNhdGVcIiB3aXRoIGEgbm9uLWVtcHR5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBnZXRDaGFsbGVuZ2UocmVzcG9uc2UpIHtcbiAgICBjb25zdCBjaGFsbGVuZ2UgPSByZXNwb25zZS5oZWFkZXJzLmdldChcIldXVy1BdXRoZW50aWNhdGVcIik7XG4gICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAxICYmIGNoYWxsZW5nZSkge1xuICAgICAgICByZXR1cm4gY2hhbGxlbmdlO1xuICAgIH1cbiAgICByZXR1cm47XG59XG4vKipcbiAqIEEgcG9saWN5IHRoYXQgY2FuIHJlcXVlc3QgYSB0b2tlbiBmcm9tIGEgVG9rZW5DcmVkZW50aWFsIGltcGxlbWVudGF0aW9uIGFuZFxuICogdGhlbiBhcHBseSBpdCB0byB0aGUgQXV0aG9yaXphdGlvbiBoZWFkZXIgb2YgYSByZXF1ZXN0IGFzIGEgQmVhcmVyIHRva2VuLlxuICovXG5mdW5jdGlvbiBiZWFyZXJUb2tlbkF1dGhlbnRpY2F0aW9uUG9saWN5KG9wdGlvbnMpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3QgeyBjcmVkZW50aWFsLCBzY29wZXMsIGNoYWxsZW5nZUNhbGxiYWNrcyB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBsb2dnZXIgPSBvcHRpb25zLmxvZ2dlciB8fCBsb2dfanNfMS5sb2dnZXI7XG4gICAgY29uc3QgY2FsbGJhY2tzID0gT2JqZWN0LmFzc2lnbih7IGF1dGhvcml6ZVJlcXVlc3Q6IChfYSA9IGNoYWxsZW5nZUNhbGxiYWNrcyA9PT0gbnVsbCB8fCBjaGFsbGVuZ2VDYWxsYmFja3MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNoYWxsZW5nZUNhbGxiYWNrcy5hdXRob3JpemVSZXF1ZXN0KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBkZWZhdWx0QXV0aG9yaXplUmVxdWVzdCwgYXV0aG9yaXplUmVxdWVzdE9uQ2hhbGxlbmdlOiBjaGFsbGVuZ2VDYWxsYmFja3MgPT09IG51bGwgfHwgY2hhbGxlbmdlQ2FsbGJhY2tzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjaGFsbGVuZ2VDYWxsYmFja3MuYXV0aG9yaXplUmVxdWVzdE9uQ2hhbGxlbmdlIH0sIGNoYWxsZW5nZUNhbGxiYWNrcyk7XG4gICAgLy8gVGhpcyBmdW5jdGlvbiBlbmNhcHN1bGF0ZXMgdGhlIGVudGlyZSBwcm9jZXNzIG9mIHJlbGlhYmx5IHJldHJpZXZpbmcgdGhlIHRva2VuXG4gICAgLy8gVGhlIG9wdGlvbnMgYXJlIGxlZnQgb3V0IG9mIHRoZSBwdWJsaWMgQVBJIHVudGlsIHRoZXJlJ3MgZGVtYW5kIHRvIGNvbmZpZ3VyZSB0aGlzLlxuICAgIC8vIFJlbWVtYmVyIHRvIGV4dGVuZCBgQmVhcmVyVG9rZW5BdXRoZW50aWNhdGlvblBvbGljeU9wdGlvbnNgIHdpdGggYFRva2VuQ3ljbGVyT3B0aW9uc2BcbiAgICAvLyBpbiBvcmRlciB0byBwYXNzIHRocm91Z2ggdGhlIGBvcHRpb25zYCBvYmplY3QuXG4gICAgY29uc3QgZ2V0QWNjZXNzVG9rZW4gPSBjcmVkZW50aWFsXG4gICAgICAgID8gKDAsIHRva2VuQ3ljbGVyX2pzXzEuY3JlYXRlVG9rZW5DeWNsZXIpKGNyZWRlbnRpYWwgLyogLCBvcHRpb25zICovKVxuICAgICAgICA6ICgpID0+IFByb21pc2UucmVzb2x2ZShudWxsKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBleHBvcnRzLmJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3lOYW1lLFxuICAgICAgICAvKipcbiAgICAgICAgICogSWYgdGhlcmUncyBubyBjaGFsbGVuZ2UgcGFyYW1ldGVyOlxuICAgICAgICAgKiAtIEl0IHdpbGwgdHJ5IHRvIHJldHJpZXZlIHRoZSB0b2tlbiB1c2luZyB0aGUgY2FjaGUsIG9yIHRoZSBjcmVkZW50aWFsJ3MgZ2V0VG9rZW4uXG4gICAgICAgICAqIC0gVGhlbiBpdCB3aWxsIHRyeSB0aGUgbmV4dCBwb2xpY3kgd2l0aCBvciB3aXRob3V0IHRoZSByZXRyaWV2ZWQgdG9rZW4uXG4gICAgICAgICAqXG4gICAgICAgICAqIEl0IHVzZXMgdGhlIGNoYWxsZW5nZSBwYXJhbWV0ZXJzIHRvOlxuICAgICAgICAgKiAtIFNraXAgYSBmaXJzdCBhdHRlbXB0IHRvIGdldCB0aGUgdG9rZW4gZnJvbSB0aGUgY3JlZGVudGlhbCBpZiB0aGVyZSdzIG5vIGNhY2hlZCB0b2tlbixcbiAgICAgICAgICogICBzaW5jZSBpdCBleHBlY3RzIHRoZSB0b2tlbiB0byBiZSByZXRyaWV2YWJsZSBvbmx5IGFmdGVyIHRoZSBjaGFsbGVuZ2UuXG4gICAgICAgICAqIC0gUHJlcGFyZSB0aGUgb3V0Z29pbmcgcmVxdWVzdCBpZiB0aGUgYHByZXBhcmVSZXF1ZXN0YCBtZXRob2QgaGFzIGJlZW4gcHJvdmlkZWQuXG4gICAgICAgICAqIC0gU2VuZCBhbiBpbml0aWFsIHJlcXVlc3QgdG8gcmVjZWl2ZSB0aGUgY2hhbGxlbmdlIGlmIGl0IGZhaWxzLlxuICAgICAgICAgKiAtIFByb2Nlc3MgYSBjaGFsbGVuZ2UgaWYgdGhlIHJlc3BvbnNlIGNvbnRhaW5zIGl0LlxuICAgICAgICAgKiAtIFJldHJpZXZlIGEgdG9rZW4gd2l0aCB0aGUgY2hhbGxlbmdlIGluZm9ybWF0aW9uLCB0aGVuIHJlLXNlbmQgdGhlIHJlcXVlc3QuXG4gICAgICAgICAqL1xuICAgICAgICBhc3luYyBzZW5kUmVxdWVzdChyZXF1ZXN0LCBuZXh0KSB7XG4gICAgICAgICAgICBpZiAoIXJlcXVlc3QudXJsLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChcImh0dHBzOi8vXCIpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmVhcmVyIHRva2VuIGF1dGhlbnRpY2F0aW9uIGlzIG5vdCBwZXJtaXR0ZWQgZm9yIG5vbi1UTFMgcHJvdGVjdGVkIChub24taHR0cHMpIFVSTHMuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXdhaXQgY2FsbGJhY2tzLmF1dGhvcml6ZVJlcXVlc3Qoe1xuICAgICAgICAgICAgICAgIHNjb3BlczogQXJyYXkuaXNBcnJheShzY29wZXMpID8gc2NvcGVzIDogW3Njb3Blc10sXG4gICAgICAgICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgICAgICAgICBnZXRBY2Nlc3NUb2tlbixcbiAgICAgICAgICAgICAgICBsb2dnZXIsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxldCByZXNwb25zZTtcbiAgICAgICAgICAgIGxldCBlcnJvcjtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCBuZXh0KHJlcXVlc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIGVycm9yID0gZXJyO1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gZXJyLnJlc3BvbnNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNhbGxiYWNrcy5hdXRob3JpemVSZXF1ZXN0T25DaGFsbGVuZ2UgJiZcbiAgICAgICAgICAgICAgICAocmVzcG9uc2UgPT09IG51bGwgfHwgcmVzcG9uc2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlc3BvbnNlLnN0YXR1cykgPT09IDQwMSAmJlxuICAgICAgICAgICAgICAgIGdldENoYWxsZW5nZShyZXNwb25zZSkpIHtcbiAgICAgICAgICAgICAgICAvLyBwcm9jZXNzZXMgY2hhbGxlbmdlXG4gICAgICAgICAgICAgICAgY29uc3Qgc2hvdWxkU2VuZFJlcXVlc3QgPSBhd2FpdCBjYWxsYmFja3MuYXV0aG9yaXplUmVxdWVzdE9uQ2hhbGxlbmdlKHtcbiAgICAgICAgICAgICAgICAgICAgc2NvcGVzOiBBcnJheS5pc0FycmF5KHNjb3BlcykgPyBzY29wZXMgOiBbc2NvcGVzXSxcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgICAgIGdldEFjY2Vzc1Rva2VuLFxuICAgICAgICAgICAgICAgICAgICBsb2dnZXIsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKHNob3VsZFNlbmRSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXh0KHJlcXVlc3QpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1iZWFyZXJUb2tlbkF1dGhlbnRpY2F0aW9uUG9saWN5LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubmRKc29uUG9saWN5TmFtZSA9IHZvaWQgMDtcbmV4cG9ydHMubmRKc29uUG9saWN5ID0gbmRKc29uUG9saWN5O1xuLyoqXG4gKiBUaGUgcHJvZ3JhbW1hdGljIGlkZW50aWZpZXIgb2YgdGhlIG5kSnNvblBvbGljeS5cbiAqL1xuZXhwb3J0cy5uZEpzb25Qb2xpY3lOYW1lID0gXCJuZEpzb25Qb2xpY3lcIjtcbi8qKlxuICogbmRKc29uUG9saWN5IGlzIGEgcG9saWN5IHVzZWQgdG8gY29udHJvbCBrZWVwIGFsaXZlIHNldHRpbmdzIGZvciBldmVyeSByZXF1ZXN0LlxuICovXG5mdW5jdGlvbiBuZEpzb25Qb2xpY3koKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogZXhwb3J0cy5uZEpzb25Qb2xpY3lOYW1lLFxuICAgICAgICBhc3luYyBzZW5kUmVxdWVzdChyZXF1ZXN0LCBuZXh0KSB7XG4gICAgICAgICAgICAvLyBUaGVyZSBjdXJyZW50bHkgaXNuJ3QgYSBnb29kIHdheSB0byBieXBhc3MgdGhlIHNlcmlhbGl6ZXJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmVxdWVzdC5ib2R5ID09PSBcInN0cmluZ1wiICYmIHJlcXVlc3QuYm9keS5zdGFydHNXaXRoKFwiW1wiKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBKU09OLnBhcnNlKHJlcXVlc3QuYm9keSk7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYm9keSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5ib2R5ID0gYm9keS5tYXAoKGl0ZW0pID0+IEpTT04uc3RyaW5naWZ5KGl0ZW0pICsgXCJcXG5cIikuam9pbihcIlwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV4dChyZXF1ZXN0KTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bmRKc29uUG9saWN5LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYXV4aWxpYXJ5QXV0aGVudGljYXRpb25IZWFkZXJQb2xpY3lOYW1lID0gdm9pZCAwO1xuZXhwb3J0cy5hdXhpbGlhcnlBdXRoZW50aWNhdGlvbkhlYWRlclBvbGljeSA9IGF1eGlsaWFyeUF1dGhlbnRpY2F0aW9uSGVhZGVyUG9saWN5O1xuY29uc3QgdG9rZW5DeWNsZXJfanNfMSA9IHJlcXVpcmUoXCIuLi91dGlsL3Rva2VuQ3ljbGVyLmpzXCIpO1xuY29uc3QgbG9nX2pzXzEgPSByZXF1aXJlKFwiLi4vbG9nLmpzXCIpO1xuLyoqXG4gKiBUaGUgcHJvZ3JhbW1hdGljIGlkZW50aWZpZXIgb2YgdGhlIGF1eGlsaWFyeUF1dGhlbnRpY2F0aW9uSGVhZGVyUG9saWN5LlxuICovXG5leHBvcnRzLmF1eGlsaWFyeUF1dGhlbnRpY2F0aW9uSGVhZGVyUG9saWN5TmFtZSA9IFwiYXV4aWxpYXJ5QXV0aGVudGljYXRpb25IZWFkZXJQb2xpY3lcIjtcbmNvbnN0IEFVVEhPUklaQVRJT05fQVVYSUxJQVJZX0hFQURFUiA9IFwieC1tcy1hdXRob3JpemF0aW9uLWF1eGlsaWFyeVwiO1xuYXN5bmMgZnVuY3Rpb24gc2VuZEF1dGhvcml6ZVJlcXVlc3Qob3B0aW9ucykge1xuICAgIHZhciBfYSwgX2I7XG4gICAgY29uc3QgeyBzY29wZXMsIGdldEFjY2Vzc1Rva2VuLCByZXF1ZXN0IH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IGdldFRva2VuT3B0aW9ucyA9IHtcbiAgICAgICAgYWJvcnRTaWduYWw6IHJlcXVlc3QuYWJvcnRTaWduYWwsXG4gICAgICAgIHRyYWNpbmdPcHRpb25zOiByZXF1ZXN0LnRyYWNpbmdPcHRpb25zLFxuICAgIH07XG4gICAgcmV0dXJuIChfYiA9IChfYSA9IChhd2FpdCBnZXRBY2Nlc3NUb2tlbihzY29wZXMsIGdldFRva2VuT3B0aW9ucykpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudG9rZW4pICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IFwiXCI7XG59XG4vKipcbiAqIEEgcG9saWN5IGZvciBleHRlcm5hbCB0b2tlbnMgdG8gYHgtbXMtYXV0aG9yaXphdGlvbi1hdXhpbGlhcnlgIGhlYWRlci5cbiAqIFRoaXMgaGVhZGVyIHdpbGwgYmUgdXNlZCB3aGVuIGNyZWF0aW5nIGEgY3Jvc3MtdGVuYW50IGFwcGxpY2F0aW9uIHdlIG1heSBuZWVkIHRvIGhhbmRsZSBhdXRoZW50aWNhdGlvbiByZXF1ZXN0c1xuICogZm9yIHJlc291cmNlcyB0aGF0IGFyZSBpbiBkaWZmZXJlbnQgdGVuYW50cy5cbiAqIFlvdSBjb3VsZCBzZWUgW0FSTSBkb2NzXShodHRwczovL2xlYXJuLm1pY3Jvc29mdC5jb20vZW4tdXMvYXp1cmUvYXp1cmUtcmVzb3VyY2UtbWFuYWdlci9tYW5hZ2VtZW50L2F1dGhlbnRpY2F0ZS1tdWx0aS10ZW5hbnQpIGZvciBhIHJ1bmRvd24gb2YgaG93IHRoaXMgZmVhdHVyZSB3b3Jrc1xuICovXG5mdW5jdGlvbiBhdXhpbGlhcnlBdXRoZW50aWNhdGlvbkhlYWRlclBvbGljeShvcHRpb25zKSB7XG4gICAgY29uc3QgeyBjcmVkZW50aWFscywgc2NvcGVzIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IGxvZ2dlciA9IG9wdGlvbnMubG9nZ2VyIHx8IGxvZ19qc18xLmxvZ2dlcjtcbiAgICBjb25zdCB0b2tlbkN5Y2xlck1hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogZXhwb3J0cy5hdXhpbGlhcnlBdXRoZW50aWNhdGlvbkhlYWRlclBvbGljeU5hbWUsXG4gICAgICAgIGFzeW5jIHNlbmRSZXF1ZXN0KHJlcXVlc3QsIG5leHQpIHtcbiAgICAgICAgICAgIGlmICghcmVxdWVzdC51cmwudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKFwiaHR0cHM6Ly9cIikpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCZWFyZXIgdG9rZW4gYXV0aGVudGljYXRpb24gZm9yIGF1eGlsaWFyeSBoZWFkZXIgaXMgbm90IHBlcm1pdHRlZCBmb3Igbm9uLVRMUyBwcm90ZWN0ZWQgKG5vbi1odHRwcykgVVJMcy5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWNyZWRlbnRpYWxzIHx8IGNyZWRlbnRpYWxzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGAke2V4cG9ydHMuYXV4aWxpYXJ5QXV0aGVudGljYXRpb25IZWFkZXJQb2xpY3lOYW1lfSBoZWFkZXIgd2lsbCBub3QgYmUgc2V0IGR1ZSB0byBlbXB0eSBjcmVkZW50aWFscy5gKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dChyZXF1ZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHRva2VuUHJvbWlzZXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY3JlZGVudGlhbCBvZiBjcmVkZW50aWFscykge1xuICAgICAgICAgICAgICAgIGxldCBnZXRBY2Nlc3NUb2tlbiA9IHRva2VuQ3ljbGVyTWFwLmdldChjcmVkZW50aWFsKTtcbiAgICAgICAgICAgICAgICBpZiAoIWdldEFjY2Vzc1Rva2VuKSB7XG4gICAgICAgICAgICAgICAgICAgIGdldEFjY2Vzc1Rva2VuID0gKDAsIHRva2VuQ3ljbGVyX2pzXzEuY3JlYXRlVG9rZW5DeWNsZXIpKGNyZWRlbnRpYWwpO1xuICAgICAgICAgICAgICAgICAgICB0b2tlbkN5Y2xlck1hcC5zZXQoY3JlZGVudGlhbCwgZ2V0QWNjZXNzVG9rZW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0b2tlblByb21pc2VzLnB1c2goc2VuZEF1dGhvcml6ZVJlcXVlc3Qoe1xuICAgICAgICAgICAgICAgICAgICBzY29wZXM6IEFycmF5LmlzQXJyYXkoc2NvcGVzKSA/IHNjb3BlcyA6IFtzY29wZXNdLFxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LFxuICAgICAgICAgICAgICAgICAgICBnZXRBY2Nlc3NUb2tlbixcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLFxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGF1eGlsaWFyeVRva2VucyA9IChhd2FpdCBQcm9taXNlLmFsbCh0b2tlblByb21pc2VzKSkuZmlsdGVyKCh0b2tlbikgPT4gQm9vbGVhbih0b2tlbikpO1xuICAgICAgICAgICAgaWYgKGF1eGlsaWFyeVRva2Vucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBsb2dnZXIud2FybmluZyhgTm9uZSBvZiB0aGUgYXV4aWxpYXJ5IHRva2VucyBhcmUgdmFsaWQuICR7QVVUSE9SSVpBVElPTl9BVVhJTElBUllfSEVBREVSfSBoZWFkZXIgd2lsbCBub3QgYmUgc2V0LmApO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0KHJlcXVlc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVxdWVzdC5oZWFkZXJzLnNldChBVVRIT1JJWkFUSU9OX0FVWElMSUFSWV9IRUFERVIsIGF1eGlsaWFyeVRva2Vucy5tYXAoKHRva2VuKSA9PiBgQmVhcmVyICR7dG9rZW59YCkuam9pbihcIiwgXCIpKTtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KHJlcXVlc3QpO1xuICAgICAgICB9LFxuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hdXhpbGlhcnlBdXRoZW50aWNhdGlvbkhlYWRlclBvbGljeS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNyZWF0ZUZpbGVGcm9tU3RyZWFtID0gZXhwb3J0cy5jcmVhdGVGaWxlID0gZXhwb3J0cy5hdXhpbGlhcnlBdXRoZW50aWNhdGlvbkhlYWRlclBvbGljeU5hbWUgPSBleHBvcnRzLmF1eGlsaWFyeUF1dGhlbnRpY2F0aW9uSGVhZGVyUG9saWN5ID0gZXhwb3J0cy5uZEpzb25Qb2xpY3lOYW1lID0gZXhwb3J0cy5uZEpzb25Qb2xpY3kgPSBleHBvcnRzLmJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3lOYW1lID0gZXhwb3J0cy5iZWFyZXJUb2tlbkF1dGhlbnRpY2F0aW9uUG9saWN5ID0gZXhwb3J0cy5mb3JtRGF0YVBvbGljeU5hbWUgPSBleHBvcnRzLmZvcm1EYXRhUG9saWN5ID0gZXhwb3J0cy50bHNQb2xpY3lOYW1lID0gZXhwb3J0cy50bHNQb2xpY3kgPSBleHBvcnRzLnVzZXJBZ2VudFBvbGljeU5hbWUgPSBleHBvcnRzLnVzZXJBZ2VudFBvbGljeSA9IGV4cG9ydHMuZGVmYXVsdFJldHJ5UG9saWN5ID0gZXhwb3J0cy50cmFjaW5nUG9saWN5TmFtZSA9IGV4cG9ydHMudHJhY2luZ1BvbGljeSA9IGV4cG9ydHMucmV0cnlQb2xpY3kgPSBleHBvcnRzLnRocm90dGxpbmdSZXRyeVBvbGljeU5hbWUgPSBleHBvcnRzLnRocm90dGxpbmdSZXRyeVBvbGljeSA9IGV4cG9ydHMuc3lzdGVtRXJyb3JSZXRyeVBvbGljeU5hbWUgPSBleHBvcnRzLnN5c3RlbUVycm9yUmV0cnlQb2xpY3kgPSBleHBvcnRzLnJlZGlyZWN0UG9saWN5TmFtZSA9IGV4cG9ydHMucmVkaXJlY3RQb2xpY3kgPSBleHBvcnRzLmdldERlZmF1bHRQcm94eVNldHRpbmdzID0gZXhwb3J0cy5wcm94eVBvbGljeU5hbWUgPSBleHBvcnRzLnByb3h5UG9saWN5ID0gZXhwb3J0cy5tdWx0aXBhcnRQb2xpY3lOYW1lID0gZXhwb3J0cy5tdWx0aXBhcnRQb2xpY3kgPSBleHBvcnRzLmxvZ1BvbGljeU5hbWUgPSBleHBvcnRzLmxvZ1BvbGljeSA9IGV4cG9ydHMuc2V0Q2xpZW50UmVxdWVzdElkUG9saWN5TmFtZSA9IGV4cG9ydHMuc2V0Q2xpZW50UmVxdWVzdElkUG9saWN5ID0gZXhwb3J0cy5leHBvbmVudGlhbFJldHJ5UG9saWN5TmFtZSA9IGV4cG9ydHMuZXhwb25lbnRpYWxSZXRyeVBvbGljeSA9IGV4cG9ydHMuZGVjb21wcmVzc1Jlc3BvbnNlUG9saWN5TmFtZSA9IGV4cG9ydHMuZGVjb21wcmVzc1Jlc3BvbnNlUG9saWN5ID0gZXhwb3J0cy5pc1Jlc3RFcnJvciA9IGV4cG9ydHMuUmVzdEVycm9yID0gZXhwb3J0cy5jcmVhdGVQaXBlbGluZVJlcXVlc3QgPSBleHBvcnRzLmNyZWF0ZUh0dHBIZWFkZXJzID0gZXhwb3J0cy5jcmVhdGVEZWZhdWx0SHR0cENsaWVudCA9IGV4cG9ydHMuY3JlYXRlUGlwZWxpbmVGcm9tT3B0aW9ucyA9IGV4cG9ydHMuY3JlYXRlRW1wdHlQaXBlbGluZSA9IHZvaWQgMDtcbnZhciBwaXBlbGluZV9qc18xID0gcmVxdWlyZShcIi4vcGlwZWxpbmUuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVFbXB0eVBpcGVsaW5lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwaXBlbGluZV9qc18xLmNyZWF0ZUVtcHR5UGlwZWxpbmU7IH0gfSk7XG52YXIgY3JlYXRlUGlwZWxpbmVGcm9tT3B0aW9uc19qc18xID0gcmVxdWlyZShcIi4vY3JlYXRlUGlwZWxpbmVGcm9tT3B0aW9ucy5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVBpcGVsaW5lRnJvbU9wdGlvbnNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNyZWF0ZVBpcGVsaW5lRnJvbU9wdGlvbnNfanNfMS5jcmVhdGVQaXBlbGluZUZyb21PcHRpb25zOyB9IH0pO1xudmFyIGRlZmF1bHRIdHRwQ2xpZW50X2pzXzEgPSByZXF1aXJlKFwiLi9kZWZhdWx0SHR0cENsaWVudC5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZURlZmF1bHRIdHRwQ2xpZW50XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkZWZhdWx0SHR0cENsaWVudF9qc18xLmNyZWF0ZURlZmF1bHRIdHRwQ2xpZW50OyB9IH0pO1xudmFyIGh0dHBIZWFkZXJzX2pzXzEgPSByZXF1aXJlKFwiLi9odHRwSGVhZGVycy5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUh0dHBIZWFkZXJzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBodHRwSGVhZGVyc19qc18xLmNyZWF0ZUh0dHBIZWFkZXJzOyB9IH0pO1xudmFyIHBpcGVsaW5lUmVxdWVzdF9qc18xID0gcmVxdWlyZShcIi4vcGlwZWxpbmVSZXF1ZXN0LmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUGlwZWxpbmVSZXF1ZXN0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwaXBlbGluZVJlcXVlc3RfanNfMS5jcmVhdGVQaXBlbGluZVJlcXVlc3Q7IH0gfSk7XG52YXIgcmVzdEVycm9yX2pzXzEgPSByZXF1aXJlKFwiLi9yZXN0RXJyb3IuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJSZXN0RXJyb3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlc3RFcnJvcl9qc18xLlJlc3RFcnJvcjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzUmVzdEVycm9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZXN0RXJyb3JfanNfMS5pc1Jlc3RFcnJvcjsgfSB9KTtcbnZhciBkZWNvbXByZXNzUmVzcG9uc2VQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL2RlY29tcHJlc3NSZXNwb25zZVBvbGljeS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlY29tcHJlc3NSZXNwb25zZVBvbGljeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZGVjb21wcmVzc1Jlc3BvbnNlUG9saWN5X2pzXzEuZGVjb21wcmVzc1Jlc3BvbnNlUG9saWN5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVjb21wcmVzc1Jlc3BvbnNlUG9saWN5TmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZGVjb21wcmVzc1Jlc3BvbnNlUG9saWN5X2pzXzEuZGVjb21wcmVzc1Jlc3BvbnNlUG9saWN5TmFtZTsgfSB9KTtcbnZhciBleHBvbmVudGlhbFJldHJ5UG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9wb2xpY2llcy9leHBvbmVudGlhbFJldHJ5UG9saWN5LmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZXhwb25lbnRpYWxSZXRyeVBvbGljeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZXhwb25lbnRpYWxSZXRyeVBvbGljeV9qc18xLmV4cG9uZW50aWFsUmV0cnlQb2xpY3k7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJleHBvbmVudGlhbFJldHJ5UG9saWN5TmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZXhwb25lbnRpYWxSZXRyeVBvbGljeV9qc18xLmV4cG9uZW50aWFsUmV0cnlQb2xpY3lOYW1lOyB9IH0pO1xudmFyIHNldENsaWVudFJlcXVlc3RJZFBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvc2V0Q2xpZW50UmVxdWVzdElkUG9saWN5LmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2V0Q2xpZW50UmVxdWVzdElkUG9saWN5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZXRDbGllbnRSZXF1ZXN0SWRQb2xpY3lfanNfMS5zZXRDbGllbnRSZXF1ZXN0SWRQb2xpY3k7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzZXRDbGllbnRSZXF1ZXN0SWRQb2xpY3lOYW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZXRDbGllbnRSZXF1ZXN0SWRQb2xpY3lfanNfMS5zZXRDbGllbnRSZXF1ZXN0SWRQb2xpY3lOYW1lOyB9IH0pO1xudmFyIGxvZ1BvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvbG9nUG9saWN5LmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibG9nUG9saWN5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBsb2dQb2xpY3lfanNfMS5sb2dQb2xpY3k7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJsb2dQb2xpY3lOYW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBsb2dQb2xpY3lfanNfMS5sb2dQb2xpY3lOYW1lOyB9IH0pO1xudmFyIG11bHRpcGFydFBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvbXVsdGlwYXJ0UG9saWN5LmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibXVsdGlwYXJ0UG9saWN5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBtdWx0aXBhcnRQb2xpY3lfanNfMS5tdWx0aXBhcnRQb2xpY3k7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtdWx0aXBhcnRQb2xpY3lOYW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBtdWx0aXBhcnRQb2xpY3lfanNfMS5tdWx0aXBhcnRQb2xpY3lOYW1lOyB9IH0pO1xudmFyIHByb3h5UG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9wb2xpY2llcy9wcm94eVBvbGljeS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInByb3h5UG9saWN5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwcm94eVBvbGljeV9qc18xLnByb3h5UG9saWN5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicHJveHlQb2xpY3lOYW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwcm94eVBvbGljeV9qc18xLnByb3h5UG9saWN5TmFtZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImdldERlZmF1bHRQcm94eVNldHRpbmdzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwcm94eVBvbGljeV9qc18xLmdldERlZmF1bHRQcm94eVNldHRpbmdzOyB9IH0pO1xudmFyIHJlZGlyZWN0UG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9wb2xpY2llcy9yZWRpcmVjdFBvbGljeS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlZGlyZWN0UG9saWN5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZWRpcmVjdFBvbGljeV9qc18xLnJlZGlyZWN0UG9saWN5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmVkaXJlY3RQb2xpY3lOYW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZWRpcmVjdFBvbGljeV9qc18xLnJlZGlyZWN0UG9saWN5TmFtZTsgfSB9KTtcbnZhciBzeXN0ZW1FcnJvclJldHJ5UG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9wb2xpY2llcy9zeXN0ZW1FcnJvclJldHJ5UG9saWN5LmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3lzdGVtRXJyb3JSZXRyeVBvbGljeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc3lzdGVtRXJyb3JSZXRyeVBvbGljeV9qc18xLnN5c3RlbUVycm9yUmV0cnlQb2xpY3k7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzeXN0ZW1FcnJvclJldHJ5UG9saWN5TmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc3lzdGVtRXJyb3JSZXRyeVBvbGljeV9qc18xLnN5c3RlbUVycm9yUmV0cnlQb2xpY3lOYW1lOyB9IH0pO1xudmFyIHRocm90dGxpbmdSZXRyeVBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvdGhyb3R0bGluZ1JldHJ5UG9saWN5LmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidGhyb3R0bGluZ1JldHJ5UG9saWN5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aHJvdHRsaW5nUmV0cnlQb2xpY3lfanNfMS50aHJvdHRsaW5nUmV0cnlQb2xpY3k7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0aHJvdHRsaW5nUmV0cnlQb2xpY3lOYW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aHJvdHRsaW5nUmV0cnlQb2xpY3lfanNfMS50aHJvdHRsaW5nUmV0cnlQb2xpY3lOYW1lOyB9IH0pO1xudmFyIHJldHJ5UG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9wb2xpY2llcy9yZXRyeVBvbGljeS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJldHJ5UG9saWN5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZXRyeVBvbGljeV9qc18xLnJldHJ5UG9saWN5OyB9IH0pO1xudmFyIHRyYWNpbmdQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL3RyYWNpbmdQb2xpY3kuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0cmFjaW5nUG9saWN5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0cmFjaW5nUG9saWN5X2pzXzEudHJhY2luZ1BvbGljeTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRyYWNpbmdQb2xpY3lOYW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0cmFjaW5nUG9saWN5X2pzXzEudHJhY2luZ1BvbGljeU5hbWU7IH0gfSk7XG52YXIgZGVmYXVsdFJldHJ5UG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9wb2xpY2llcy9kZWZhdWx0UmV0cnlQb2xpY3kuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZWZhdWx0UmV0cnlQb2xpY3lcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRlZmF1bHRSZXRyeVBvbGljeV9qc18xLmRlZmF1bHRSZXRyeVBvbGljeTsgfSB9KTtcbnZhciB1c2VyQWdlbnRQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL3VzZXJBZ2VudFBvbGljeS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInVzZXJBZ2VudFBvbGljeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdXNlckFnZW50UG9saWN5X2pzXzEudXNlckFnZW50UG9saWN5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidXNlckFnZW50UG9saWN5TmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdXNlckFnZW50UG9saWN5X2pzXzEudXNlckFnZW50UG9saWN5TmFtZTsgfSB9KTtcbnZhciB0bHNQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL3Rsc1BvbGljeS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRsc1BvbGljeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGxzUG9saWN5X2pzXzEudGxzUG9saWN5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidGxzUG9saWN5TmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGxzUG9saWN5X2pzXzEudGxzUG9saWN5TmFtZTsgfSB9KTtcbnZhciBmb3JtRGF0YVBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvZm9ybURhdGFQb2xpY3kuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJmb3JtRGF0YVBvbGljeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZm9ybURhdGFQb2xpY3lfanNfMS5mb3JtRGF0YVBvbGljeTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZvcm1EYXRhUG9saWN5TmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZm9ybURhdGFQb2xpY3lfanNfMS5mb3JtRGF0YVBvbGljeU5hbWU7IH0gfSk7XG52YXIgYmVhcmVyVG9rZW5BdXRoZW50aWNhdGlvblBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvYmVhcmVyVG9rZW5BdXRoZW50aWNhdGlvblBvbGljeS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3lcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3lfanNfMS5iZWFyZXJUb2tlbkF1dGhlbnRpY2F0aW9uUG9saWN5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYmVhcmVyVG9rZW5BdXRoZW50aWNhdGlvblBvbGljeU5hbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3lfanNfMS5iZWFyZXJUb2tlbkF1dGhlbnRpY2F0aW9uUG9saWN5TmFtZTsgfSB9KTtcbnZhciBuZEpzb25Qb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL25kSnNvblBvbGljeS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm5kSnNvblBvbGljeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbmRKc29uUG9saWN5X2pzXzEubmRKc29uUG9saWN5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibmRKc29uUG9saWN5TmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbmRKc29uUG9saWN5X2pzXzEubmRKc29uUG9saWN5TmFtZTsgfSB9KTtcbnZhciBhdXhpbGlhcnlBdXRoZW50aWNhdGlvbkhlYWRlclBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvYXV4aWxpYXJ5QXV0aGVudGljYXRpb25IZWFkZXJQb2xpY3kuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhdXhpbGlhcnlBdXRoZW50aWNhdGlvbkhlYWRlclBvbGljeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYXV4aWxpYXJ5QXV0aGVudGljYXRpb25IZWFkZXJQb2xpY3lfanNfMS5hdXhpbGlhcnlBdXRoZW50aWNhdGlvbkhlYWRlclBvbGljeTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImF1eGlsaWFyeUF1dGhlbnRpY2F0aW9uSGVhZGVyUG9saWN5TmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYXV4aWxpYXJ5QXV0aGVudGljYXRpb25IZWFkZXJQb2xpY3lfanNfMS5hdXhpbGlhcnlBdXRoZW50aWNhdGlvbkhlYWRlclBvbGljeU5hbWU7IH0gfSk7XG52YXIgZmlsZV9qc18xID0gcmVxdWlyZShcIi4vdXRpbC9maWxlLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRmlsZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZmlsZV9qc18xLmNyZWF0ZUZpbGU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVGaWxlRnJvbVN0cmVhbVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZmlsZV9qc18xLmNyZWF0ZUZpbGVGcm9tU3RyZWFtOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5BenVyZUtleUNyZWRlbnRpYWwgPSB2b2lkIDA7XG4vKipcbiAqIEEgc3RhdGljLWtleS1iYXNlZCBjcmVkZW50aWFsIHRoYXQgc3VwcG9ydHMgdXBkYXRpbmdcbiAqIHRoZSB1bmRlcmx5aW5nIGtleSB2YWx1ZS5cbiAqL1xuY2xhc3MgQXp1cmVLZXlDcmVkZW50aWFsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdmFsdWUgb2YgdGhlIGtleSB0byBiZSB1c2VkIGluIGF1dGhlbnRpY2F0aW9uXG4gICAgICovXG4gICAgZ2V0IGtleSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2tleTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIGFuIEF6dXJlS2V5Q3JlZGVudGlhbCBmb3IgdXNlXG4gICAgICogd2l0aCBhIHNlcnZpY2UgY2xpZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGtleSAtIFRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSBrZXkgdG8gdXNlIGluIGF1dGhlbnRpY2F0aW9uXG4gICAgICovXG4gICAgY29uc3RydWN0b3Ioa2V5KSB7XG4gICAgICAgIGlmICgha2V5KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJrZXkgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmdcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fa2V5ID0ga2V5O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDaGFuZ2UgdGhlIHZhbHVlIG9mIHRoZSBrZXkuXG4gICAgICpcbiAgICAgKiBVcGRhdGVzIHdpbGwgdGFrZSBlZmZlY3QgdXBvbiB0aGUgbmV4dCByZXF1ZXN0IGFmdGVyXG4gICAgICogdXBkYXRpbmcgdGhlIGtleSB2YWx1ZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBuZXdLZXkgLSBUaGUgbmV3IGtleSB2YWx1ZSB0byBiZSB1c2VkXG4gICAgICovXG4gICAgdXBkYXRlKG5ld0tleSkge1xuICAgICAgICB0aGlzLl9rZXkgPSBuZXdLZXk7XG4gICAgfVxufVxuZXhwb3J0cy5BenVyZUtleUNyZWRlbnRpYWwgPSBBenVyZUtleUNyZWRlbnRpYWw7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1henVyZUtleUNyZWRlbnRpYWwuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc0tleUNyZWRlbnRpYWwgPSBpc0tleUNyZWRlbnRpYWw7XG5jb25zdCBjb3JlX3V0aWxfMSA9IHJlcXVpcmUoXCJAYXp1cmUvY29yZS11dGlsXCIpO1xuLyoqXG4gKiBUZXN0cyBhbiBvYmplY3QgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgaXQgaW1wbGVtZW50cyBLZXlDcmVkZW50aWFsLlxuICpcbiAqIEBwYXJhbSBjcmVkZW50aWFsIC0gVGhlIGFzc3VtZWQgS2V5Q3JlZGVudGlhbCB0byBiZSB0ZXN0ZWQuXG4gKi9cbmZ1bmN0aW9uIGlzS2V5Q3JlZGVudGlhbChjcmVkZW50aWFsKSB7XG4gICAgcmV0dXJuICgwLCBjb3JlX3V0aWxfMS5pc09iamVjdFdpdGhQcm9wZXJ0aWVzKShjcmVkZW50aWFsLCBbXCJrZXlcIl0pICYmIHR5cGVvZiBjcmVkZW50aWFsLmtleSA9PT0gXCJzdHJpbmdcIjtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWtleUNyZWRlbnRpYWwuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5BenVyZU5hbWVkS2V5Q3JlZGVudGlhbCA9IHZvaWQgMDtcbmV4cG9ydHMuaXNOYW1lZEtleUNyZWRlbnRpYWwgPSBpc05hbWVkS2V5Q3JlZGVudGlhbDtcbmNvbnN0IGNvcmVfdXRpbF8xID0gcmVxdWlyZShcIkBhenVyZS9jb3JlLXV0aWxcIik7XG4vKipcbiAqIEEgc3RhdGljIG5hbWUva2V5LWJhc2VkIGNyZWRlbnRpYWwgdGhhdCBzdXBwb3J0cyB1cGRhdGluZ1xuICogdGhlIHVuZGVybHlpbmcgbmFtZSBhbmQga2V5IHZhbHVlcy5cbiAqL1xuY2xhc3MgQXp1cmVOYW1lZEtleUNyZWRlbnRpYWwge1xuICAgIC8qKlxuICAgICAqIFRoZSB2YWx1ZSBvZiB0aGUga2V5IHRvIGJlIHVzZWQgaW4gYXV0aGVudGljYXRpb24uXG4gICAgICovXG4gICAgZ2V0IGtleSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2tleTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIHZhbHVlIG9mIHRoZSBuYW1lIHRvIGJlIHVzZWQgaW4gYXV0aGVudGljYXRpb24uXG4gICAgICovXG4gICAgZ2V0IG5hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9uYW1lO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgYW4gQXp1cmVOYW1lZEtleUNyZWRlbnRpYWwgZm9yIHVzZVxuICAgICAqIHdpdGggYSBzZXJ2aWNlIGNsaWVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBuYW1lIC0gVGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIG5hbWUgdG8gdXNlIGluIGF1dGhlbnRpY2F0aW9uLlxuICAgICAqIEBwYXJhbSBrZXkgLSBUaGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUga2V5IHRvIHVzZSBpbiBhdXRoZW50aWNhdGlvbi5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihuYW1lLCBrZXkpIHtcbiAgICAgICAgaWYgKCFuYW1lIHx8ICFrZXkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJuYW1lIGFuZCBrZXkgbXVzdCBiZSBub24tZW1wdHkgc3RyaW5nc1wiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5fa2V5ID0ga2V5O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDaGFuZ2UgdGhlIHZhbHVlIG9mIHRoZSBrZXkuXG4gICAgICpcbiAgICAgKiBVcGRhdGVzIHdpbGwgdGFrZSBlZmZlY3QgdXBvbiB0aGUgbmV4dCByZXF1ZXN0IGFmdGVyXG4gICAgICogdXBkYXRpbmcgdGhlIGtleSB2YWx1ZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBuZXdOYW1lIC0gVGhlIG5ldyBuYW1lIHZhbHVlIHRvIGJlIHVzZWQuXG4gICAgICogQHBhcmFtIG5ld0tleSAtIFRoZSBuZXcga2V5IHZhbHVlIHRvIGJlIHVzZWQuXG4gICAgICovXG4gICAgdXBkYXRlKG5ld05hbWUsIG5ld0tleSkge1xuICAgICAgICBpZiAoIW5ld05hbWUgfHwgIW5ld0tleSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIm5ld05hbWUgYW5kIG5ld0tleSBtdXN0IGJlIG5vbi1lbXB0eSBzdHJpbmdzXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX25hbWUgPSBuZXdOYW1lO1xuICAgICAgICB0aGlzLl9rZXkgPSBuZXdLZXk7XG4gICAgfVxufVxuZXhwb3J0cy5BenVyZU5hbWVkS2V5Q3JlZGVudGlhbCA9IEF6dXJlTmFtZWRLZXlDcmVkZW50aWFsO1xuLyoqXG4gKiBUZXN0cyBhbiBvYmplY3QgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgaXQgaW1wbGVtZW50cyBOYW1lZEtleUNyZWRlbnRpYWwuXG4gKlxuICogQHBhcmFtIGNyZWRlbnRpYWwgLSBUaGUgYXNzdW1lZCBOYW1lZEtleUNyZWRlbnRpYWwgdG8gYmUgdGVzdGVkLlxuICovXG5mdW5jdGlvbiBpc05hbWVkS2V5Q3JlZGVudGlhbChjcmVkZW50aWFsKSB7XG4gICAgcmV0dXJuICgoMCwgY29yZV91dGlsXzEuaXNPYmplY3RXaXRoUHJvcGVydGllcykoY3JlZGVudGlhbCwgW1wibmFtZVwiLCBcImtleVwiXSkgJiZcbiAgICAgICAgdHlwZW9mIGNyZWRlbnRpYWwua2V5ID09PSBcInN0cmluZ1wiICYmXG4gICAgICAgIHR5cGVvZiBjcmVkZW50aWFsLm5hbWUgPT09IFwic3RyaW5nXCIpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXp1cmVOYW1lZEtleUNyZWRlbnRpYWwuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5BenVyZVNBU0NyZWRlbnRpYWwgPSB2b2lkIDA7XG5leHBvcnRzLmlzU0FTQ3JlZGVudGlhbCA9IGlzU0FTQ3JlZGVudGlhbDtcbmNvbnN0IGNvcmVfdXRpbF8xID0gcmVxdWlyZShcIkBhenVyZS9jb3JlLXV0aWxcIik7XG4vKipcbiAqIEEgc3RhdGljLXNpZ25hdHVyZS1iYXNlZCBjcmVkZW50aWFsIHRoYXQgc3VwcG9ydHMgdXBkYXRpbmdcbiAqIHRoZSB1bmRlcmx5aW5nIHNpZ25hdHVyZSB2YWx1ZS5cbiAqL1xuY2xhc3MgQXp1cmVTQVNDcmVkZW50aWFsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdmFsdWUgb2YgdGhlIHNoYXJlZCBhY2Nlc3Mgc2lnbmF0dXJlIHRvIGJlIHVzZWQgaW4gYXV0aGVudGljYXRpb25cbiAgICAgKi9cbiAgICBnZXQgc2lnbmF0dXJlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2lnbmF0dXJlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgYW4gQXp1cmVTQVNDcmVkZW50aWFsIGZvciB1c2VcbiAgICAgKiB3aXRoIGEgc2VydmljZSBjbGllbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc2lnbmF0dXJlIC0gVGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIHNoYXJlZCBhY2Nlc3Mgc2lnbmF0dXJlIHRvIHVzZSBpbiBhdXRoZW50aWNhdGlvblxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHNpZ25hdHVyZSkge1xuICAgICAgICBpZiAoIXNpZ25hdHVyZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwic2hhcmVkIGFjY2VzcyBzaWduYXR1cmUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmdcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2lnbmF0dXJlID0gc2lnbmF0dXJlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDaGFuZ2UgdGhlIHZhbHVlIG9mIHRoZSBzaWduYXR1cmUuXG4gICAgICpcbiAgICAgKiBVcGRhdGVzIHdpbGwgdGFrZSBlZmZlY3QgdXBvbiB0aGUgbmV4dCByZXF1ZXN0IGFmdGVyXG4gICAgICogdXBkYXRpbmcgdGhlIHNpZ25hdHVyZSB2YWx1ZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBuZXdTaWduYXR1cmUgLSBUaGUgbmV3IHNoYXJlZCBhY2Nlc3Mgc2lnbmF0dXJlIHZhbHVlIHRvIGJlIHVzZWRcbiAgICAgKi9cbiAgICB1cGRhdGUobmV3U2lnbmF0dXJlKSB7XG4gICAgICAgIGlmICghbmV3U2lnbmF0dXJlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzaGFyZWQgYWNjZXNzIHNpZ25hdHVyZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZ1wiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zaWduYXR1cmUgPSBuZXdTaWduYXR1cmU7XG4gICAgfVxufVxuZXhwb3J0cy5BenVyZVNBU0NyZWRlbnRpYWwgPSBBenVyZVNBU0NyZWRlbnRpYWw7XG4vKipcbiAqIFRlc3RzIGFuIG9iamVjdCB0byBkZXRlcm1pbmUgd2hldGhlciBpdCBpbXBsZW1lbnRzIFNBU0NyZWRlbnRpYWwuXG4gKlxuICogQHBhcmFtIGNyZWRlbnRpYWwgLSBUaGUgYXNzdW1lZCBTQVNDcmVkZW50aWFsIHRvIGJlIHRlc3RlZC5cbiAqL1xuZnVuY3Rpb24gaXNTQVNDcmVkZW50aWFsKGNyZWRlbnRpYWwpIHtcbiAgICByZXR1cm4gKCgwLCBjb3JlX3V0aWxfMS5pc09iamVjdFdpdGhQcm9wZXJ0aWVzKShjcmVkZW50aWFsLCBbXCJzaWduYXR1cmVcIl0pICYmIHR5cGVvZiBjcmVkZW50aWFsLnNpZ25hdHVyZSA9PT0gXCJzdHJpbmdcIik7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1henVyZVNBU0NyZWRlbnRpYWwuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc0JlYXJlclRva2VuID0gaXNCZWFyZXJUb2tlbjtcbmV4cG9ydHMuaXNQb3BUb2tlbiA9IGlzUG9wVG9rZW47XG5leHBvcnRzLmlzVG9rZW5DcmVkZW50aWFsID0gaXNUb2tlbkNyZWRlbnRpYWw7XG4vKipcbiAqIEBpbnRlcm5hbFxuICogQHBhcmFtIGFjY2Vzc1Rva2VuIC0gQWNjZXNzIHRva2VuXG4gKiBAcmV0dXJucyBXaGV0aGVyIGEgdG9rZW4gaXMgYmVhcmVyIHR5cGUgb3Igbm90XG4gKi9cbmZ1bmN0aW9uIGlzQmVhcmVyVG9rZW4oYWNjZXNzVG9rZW4pIHtcbiAgICByZXR1cm4gIWFjY2Vzc1Rva2VuLnRva2VuVHlwZSB8fCBhY2Nlc3NUb2tlbi50b2tlblR5cGUgPT09IFwiQmVhcmVyXCI7XG59XG4vKipcbiAqIEBpbnRlcm5hbFxuICogQHBhcmFtIGFjY2Vzc1Rva2VuIC0gQWNjZXNzIHRva2VuXG4gKiBAcmV0dXJucyBXaGV0aGVyIGEgdG9rZW4gaXMgUG9wIHRva2VuIG9yIG5vdFxuICovXG5mdW5jdGlvbiBpc1BvcFRva2VuKGFjY2Vzc1Rva2VuKSB7XG4gICAgcmV0dXJuIGFjY2Vzc1Rva2VuLnRva2VuVHlwZSA9PT0gXCJwb3BcIjtcbn1cbi8qKlxuICogVGVzdHMgYW4gb2JqZWN0IHRvIGRldGVybWluZSB3aGV0aGVyIGl0IGltcGxlbWVudHMgVG9rZW5DcmVkZW50aWFsLlxuICpcbiAqIEBwYXJhbSBjcmVkZW50aWFsIC0gVGhlIGFzc3VtZWQgVG9rZW5DcmVkZW50aWFsIHRvIGJlIHRlc3RlZC5cbiAqL1xuZnVuY3Rpb24gaXNUb2tlbkNyZWRlbnRpYWwoY3JlZGVudGlhbCkge1xuICAgIC8vIENoZWNrIGZvciBhbiBvYmplY3Qgd2l0aCBhICdnZXRUb2tlbicgZnVuY3Rpb24gYW5kIHBvc3NpYmx5IHdpdGhcbiAgICAvLyBhICdzaWduUmVxdWVzdCcgZnVuY3Rpb24uICBXZSBkbyB0aGlzIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGF0XG4gICAgLy8gYSBTZXJ2aWNlQ2xpZW50Q3JlZGVudGlhbHMgaW1wbGVtZW50b3IgKGxpa2UgVG9rZW5DbGllbnRDcmVkZW50aWFsc1xuICAgIC8vIGluIG1zLXJlc3Qtbm9kZWF1dGgpIGRvZXNuJ3QgZ2V0IG1pc3Rha2VuIGZvciBhIFRva2VuQ3JlZGVudGlhbCBpZlxuICAgIC8vIGl0IGRvZXNuJ3QgYWN0dWFsbHkgaW1wbGVtZW50IFRva2VuQ3JlZGVudGlhbCBhbHNvLlxuICAgIGNvbnN0IGNhc3RDcmVkZW50aWFsID0gY3JlZGVudGlhbDtcbiAgICByZXR1cm4gKGNhc3RDcmVkZW50aWFsICYmXG4gICAgICAgIHR5cGVvZiBjYXN0Q3JlZGVudGlhbC5nZXRUb2tlbiA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgICAgIChjYXN0Q3JlZGVudGlhbC5zaWduUmVxdWVzdCA9PT0gdW5kZWZpbmVkIHx8IGNhc3RDcmVkZW50aWFsLmdldFRva2VuLmxlbmd0aCA+IDApKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRva2VuQ3JlZGVudGlhbC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc1Rva2VuQ3JlZGVudGlhbCA9IGV4cG9ydHMuaXNTQVNDcmVkZW50aWFsID0gZXhwb3J0cy5BenVyZVNBU0NyZWRlbnRpYWwgPSBleHBvcnRzLmlzTmFtZWRLZXlDcmVkZW50aWFsID0gZXhwb3J0cy5BenVyZU5hbWVkS2V5Q3JlZGVudGlhbCA9IGV4cG9ydHMuaXNLZXlDcmVkZW50aWFsID0gZXhwb3J0cy5BenVyZUtleUNyZWRlbnRpYWwgPSB2b2lkIDA7XG52YXIgYXp1cmVLZXlDcmVkZW50aWFsX2pzXzEgPSByZXF1aXJlKFwiLi9henVyZUtleUNyZWRlbnRpYWwuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJBenVyZUtleUNyZWRlbnRpYWxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGF6dXJlS2V5Q3JlZGVudGlhbF9qc18xLkF6dXJlS2V5Q3JlZGVudGlhbDsgfSB9KTtcbnZhciBrZXlDcmVkZW50aWFsX2pzXzEgPSByZXF1aXJlKFwiLi9rZXlDcmVkZW50aWFsLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNLZXlDcmVkZW50aWFsXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBrZXlDcmVkZW50aWFsX2pzXzEuaXNLZXlDcmVkZW50aWFsOyB9IH0pO1xudmFyIGF6dXJlTmFtZWRLZXlDcmVkZW50aWFsX2pzXzEgPSByZXF1aXJlKFwiLi9henVyZU5hbWVkS2V5Q3JlZGVudGlhbC5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkF6dXJlTmFtZWRLZXlDcmVkZW50aWFsXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBhenVyZU5hbWVkS2V5Q3JlZGVudGlhbF9qc18xLkF6dXJlTmFtZWRLZXlDcmVkZW50aWFsOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNOYW1lZEtleUNyZWRlbnRpYWxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGF6dXJlTmFtZWRLZXlDcmVkZW50aWFsX2pzXzEuaXNOYW1lZEtleUNyZWRlbnRpYWw7IH0gfSk7XG52YXIgYXp1cmVTQVNDcmVkZW50aWFsX2pzXzEgPSByZXF1aXJlKFwiLi9henVyZVNBU0NyZWRlbnRpYWwuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJBenVyZVNBU0NyZWRlbnRpYWxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGF6dXJlU0FTQ3JlZGVudGlhbF9qc18xLkF6dXJlU0FTQ3JlZGVudGlhbDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzU0FTQ3JlZGVudGlhbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYXp1cmVTQVNDcmVkZW50aWFsX2pzXzEuaXNTQVNDcmVkZW50aWFsOyB9IH0pO1xudmFyIHRva2VuQ3JlZGVudGlhbF9qc18xID0gcmVxdWlyZShcIi4vdG9rZW5DcmVkZW50aWFsLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNUb2tlbkNyZWRlbnRpYWxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRva2VuQ3JlZGVudGlhbF9qc18xLmlzVG9rZW5DcmVkZW50aWFsOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5waXBlbGluZUNvbnRhaW5zRGlzYWJsZUtlZXBBbGl2ZVBvbGljeSA9IGV4cG9ydHMuY3JlYXRlRGlzYWJsZUtlZXBBbGl2ZVBvbGljeSA9IGV4cG9ydHMuZGlzYWJsZUtlZXBBbGl2ZVBvbGljeU5hbWUgPSB2b2lkIDA7XG5leHBvcnRzLmRpc2FibGVLZWVwQWxpdmVQb2xpY3lOYW1lID0gXCJEaXNhYmxlS2VlcEFsaXZlUG9saWN5XCI7XG5mdW5jdGlvbiBjcmVhdGVEaXNhYmxlS2VlcEFsaXZlUG9saWN5KCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGV4cG9ydHMuZGlzYWJsZUtlZXBBbGl2ZVBvbGljeU5hbWUsXG4gICAgICAgIGFzeW5jIHNlbmRSZXF1ZXN0KHJlcXVlc3QsIG5leHQpIHtcbiAgICAgICAgICAgIHJlcXVlc3QuZGlzYWJsZUtlZXBBbGl2ZSA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gbmV4dChyZXF1ZXN0KTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuZXhwb3J0cy5jcmVhdGVEaXNhYmxlS2VlcEFsaXZlUG9saWN5ID0gY3JlYXRlRGlzYWJsZUtlZXBBbGl2ZVBvbGljeTtcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIHBpcGVsaW5lQ29udGFpbnNEaXNhYmxlS2VlcEFsaXZlUG9saWN5KHBpcGVsaW5lKSB7XG4gICAgcmV0dXJuIHBpcGVsaW5lLmdldE9yZGVyZWRQb2xpY2llcygpLnNvbWUoKHBvbGljeSkgPT4gcG9saWN5Lm5hbWUgPT09IGV4cG9ydHMuZGlzYWJsZUtlZXBBbGl2ZVBvbGljeU5hbWUpO1xufVxuZXhwb3J0cy5waXBlbGluZUNvbnRhaW5zRGlzYWJsZUtlZXBBbGl2ZVBvbGljeSA9IHBpcGVsaW5lQ29udGFpbnNEaXNhYmxlS2VlcEFsaXZlUG9saWN5O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGlzYWJsZUtlZXBBbGl2ZVBvbGljeS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlY29kZVN0cmluZ1RvU3RyaW5nID0gZXhwb3J0cy5kZWNvZGVTdHJpbmcgPSBleHBvcnRzLmVuY29kZUJ5dGVBcnJheSA9IGV4cG9ydHMuZW5jb2RlU3RyaW5nID0gdm9pZCAwO1xuLyoqXG4gKiBFbmNvZGVzIGEgc3RyaW5nIGluIGJhc2U2NCBmb3JtYXQuXG4gKiBAcGFyYW0gdmFsdWUgLSB0aGUgc3RyaW5nIHRvIGVuY29kZVxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIGVuY29kZVN0cmluZyh2YWx1ZSkge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbSh2YWx1ZSkudG9TdHJpbmcoXCJiYXNlNjRcIik7XG59XG5leHBvcnRzLmVuY29kZVN0cmluZyA9IGVuY29kZVN0cmluZztcbi8qKlxuICogRW5jb2RlcyBhIGJ5dGUgYXJyYXkgaW4gYmFzZTY0IGZvcm1hdC5cbiAqIEBwYXJhbSB2YWx1ZSAtIHRoZSBVaW50OEFyYXkgdG8gZW5jb2RlXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gZW5jb2RlQnl0ZUFycmF5KHZhbHVlKSB7XG4gICAgY29uc3QgYnVmZmVyVmFsdWUgPSB2YWx1ZSBpbnN0YW5jZW9mIEJ1ZmZlciA/IHZhbHVlIDogQnVmZmVyLmZyb20odmFsdWUuYnVmZmVyKTtcbiAgICByZXR1cm4gYnVmZmVyVmFsdWUudG9TdHJpbmcoXCJiYXNlNjRcIik7XG59XG5leHBvcnRzLmVuY29kZUJ5dGVBcnJheSA9IGVuY29kZUJ5dGVBcnJheTtcbi8qKlxuICogRGVjb2RlcyBhIGJhc2U2NCBzdHJpbmcgaW50byBhIGJ5dGUgYXJyYXkuXG4gKiBAcGFyYW0gdmFsdWUgLSB0aGUgYmFzZTY0IHN0cmluZyB0byBkZWNvZGVcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBkZWNvZGVTdHJpbmcodmFsdWUpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20odmFsdWUsIFwiYmFzZTY0XCIpO1xufVxuZXhwb3J0cy5kZWNvZGVTdHJpbmcgPSBkZWNvZGVTdHJpbmc7XG4vKipcbiAqIERlY29kZXMgYSBiYXNlNjQgc3RyaW5nIGludG8gYSBzdHJpbmcuXG4gKiBAcGFyYW0gdmFsdWUgLSB0aGUgYmFzZTY0IHN0cmluZyB0byBkZWNvZGVcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBkZWNvZGVTdHJpbmdUb1N0cmluZyh2YWx1ZSkge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbSh2YWx1ZSwgXCJiYXNlNjRcIikudG9TdHJpbmcoKTtcbn1cbmV4cG9ydHMuZGVjb2RlU3RyaW5nVG9TdHJpbmcgPSBkZWNvZGVTdHJpbmdUb1N0cmluZztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJhc2U2NC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlhNTF9DSEFSS0VZID0gZXhwb3J0cy5YTUxfQVRUUktFWSA9IHZvaWQgMDtcbi8qKlxuICogRGVmYXVsdCBrZXkgdXNlZCB0byBhY2Nlc3MgdGhlIFhNTCBhdHRyaWJ1dGVzLlxuICovXG5leHBvcnRzLlhNTF9BVFRSS0VZID0gXCIkXCI7XG4vKipcbiAqIERlZmF1bHQga2V5IHVzZWQgdG8gYWNjZXNzIHRoZSBYTUwgdmFsdWUgY29udGVudC5cbiAqL1xuZXhwb3J0cy5YTUxfQ0hBUktFWSA9IFwiX1wiO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW50ZXJmYWNlcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmZsYXR0ZW5SZXNwb25zZSA9IGV4cG9ydHMuaXNWYWxpZFV1aWQgPSBleHBvcnRzLmlzRHVyYXRpb24gPSBleHBvcnRzLmlzUHJpbWl0aXZlQm9keSA9IHZvaWQgMDtcbi8qKlxuICogQSB0eXBlIGd1YXJkIGZvciBhIHByaW1pdGl2ZSByZXNwb25zZSBib2R5LlxuICogQHBhcmFtIHZhbHVlIC0gVmFsdWUgdG8gdGVzdFxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBpc1ByaW1pdGl2ZUJvZHkodmFsdWUsIG1hcHBlclR5cGVOYW1lKSB7XG4gICAgcmV0dXJuIChtYXBwZXJUeXBlTmFtZSAhPT0gXCJDb21wb3NpdGVcIiAmJlxuICAgICAgICBtYXBwZXJUeXBlTmFtZSAhPT0gXCJEaWN0aW9uYXJ5XCIgJiZcbiAgICAgICAgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fFxuICAgICAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiIHx8XG4gICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwiYm9vbGVhblwiIHx8XG4gICAgICAgICAgICAobWFwcGVyVHlwZU5hbWUgPT09IG51bGwgfHwgbWFwcGVyVHlwZU5hbWUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG1hcHBlclR5cGVOYW1lLm1hdGNoKC9eKERhdGV8RGF0ZVRpbWV8RGF0ZVRpbWVSZmMxMTIzfFVuaXhUaW1lfEJ5dGVBcnJheXxCYXNlNjRVcmwpJC9pKSkgIT09XG4gICAgICAgICAgICAgICAgbnVsbCB8fFxuICAgICAgICAgICAgdmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgdmFsdWUgPT09IG51bGwpKTtcbn1cbmV4cG9ydHMuaXNQcmltaXRpdmVCb2R5ID0gaXNQcmltaXRpdmVCb2R5O1xuY29uc3QgdmFsaWRhdGVJU09EdXJhdGlvbiA9IC9eKC18XFwrKT9QKD86KFstK10/WzAtOSwuXSopWSk/KD86KFstK10/WzAtOSwuXSopTSk/KD86KFstK10/WzAtOSwuXSopVyk/KD86KFstK10/WzAtOSwuXSopRCk/KD86VCg/OihbLStdP1swLTksLl0qKUgpPyg/OihbLStdP1swLTksLl0qKU0pPyg/OihbLStdP1swLTksLl0qKVMpPyk/JC87XG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gc3RyaW5nIGlzIGluIElTTyA4NjAxIGZvcm1hdC5cbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBiZSB2YWxpZGF0ZWQgZm9yIElTTyA4NjAxIGR1cmF0aW9uIGZvcm1hdC5cbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBpc0R1cmF0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbGlkYXRlSVNPRHVyYXRpb24udGVzdCh2YWx1ZSk7XG59XG5leHBvcnRzLmlzRHVyYXRpb24gPSBpc0R1cmF0aW9uO1xuY29uc3QgdmFsaWRVdWlkUmVnZXggPSAvXlswLTlhLWZBLUZdezh9LVswLTlhLWZBLUZdezR9LVswLTlhLWZBLUZdezR9LVswLTlhLWZBLUZdezR9LVswLTlhLWZBLUZdezEyfSQvaTtcbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBwcm92aWRlZCB1dWlkIGlzIHZhbGlkLlxuICpcbiAqIEBwYXJhbSB1dWlkIC0gVGhlIHV1aWQgdGhhdCBuZWVkcyB0byBiZSB2YWxpZGF0ZWQuXG4gKlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRVdWlkKHV1aWQpIHtcbiAgICByZXR1cm4gdmFsaWRVdWlkUmVnZXgudGVzdCh1dWlkKTtcbn1cbmV4cG9ydHMuaXNWYWxpZFV1aWQgPSBpc1ZhbGlkVXVpZDtcbi8qKlxuICogTWFwcyB0aGUgcmVzcG9uc2UgYXMgZm9sbG93czpcbiAqIC0gd3JhcHMgdGhlIHJlc3BvbnNlIGJvZHkgaWYgbmVlZGVkICh0eXBpY2FsbHkgaWYgaXRzIHR5cGUgaXMgcHJpbWl0aXZlKS5cbiAqIC0gcmV0dXJucyBudWxsIGlmIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgaGVhZGVycyBhbmQgdGhlIGJvZHkgaXMgZW1wdHkuXG4gKiAtIG90aGVyd2lzZSwgcmV0dXJucyB0aGUgY29tYmluYXRpb24gb2YgdGhlIGhlYWRlcnMgYW5kIHRoZSBib2R5LlxuICpcbiAqIEBwYXJhbSByZXNwb25zZU9iamVjdCAtIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHBhcnNlZCByZXNwb25zZVxuICogQHJldHVybnMgdGhlIHJlc3BvbnNlIHRoYXQgd2lsbCBiZSByZXR1cm5lZCB0byB0aGUgdXNlciB3aGljaCBjYW4gYmUgbnVsbCBhbmQvb3Igd3JhcHBlZFxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBoYW5kbGVOdWxsYWJsZVJlc3BvbnNlQW5kV3JhcHBhYmxlQm9keShyZXNwb25zZU9iamVjdCkge1xuICAgIGNvbnN0IGNvbWJpbmVkSGVhZGVyc0FuZEJvZHkgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHJlc3BvbnNlT2JqZWN0LmhlYWRlcnMpLCByZXNwb25zZU9iamVjdC5ib2R5KTtcbiAgICBpZiAocmVzcG9uc2VPYmplY3QuaGFzTnVsbGFibGVUeXBlICYmXG4gICAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGNvbWJpbmVkSGVhZGVyc0FuZEJvZHkpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VPYmplY3Quc2hvdWxkV3JhcEJvZHkgPyB7IGJvZHk6IG51bGwgfSA6IG51bGw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VPYmplY3Quc2hvdWxkV3JhcEJvZHlcbiAgICAgICAgICAgID8gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCByZXNwb25zZU9iamVjdC5oZWFkZXJzKSwgeyBib2R5OiByZXNwb25zZU9iamVjdC5ib2R5IH0pIDogY29tYmluZWRIZWFkZXJzQW5kQm9keTtcbiAgICB9XG59XG4vKipcbiAqIFRha2UgYSBgRnVsbE9wZXJhdGlvblJlc3BvbnNlYCBhbmQgdHVybiBpdCBpbnRvIGEgZmxhdFxuICogcmVzcG9uc2Ugb2JqZWN0IHRvIGhhbmQgYmFjayB0byB0aGUgY29uc3VtZXIuXG4gKiBAcGFyYW0gZnVsbFJlc3BvbnNlIC0gVGhlIHByb2Nlc3NlZCByZXNwb25zZSBmcm9tIHRoZSBvcGVyYXRpb24gcmVxdWVzdFxuICogQHBhcmFtIHJlc3BvbnNlU3BlYyAtIFRoZSByZXNwb25zZSBtYXAgZnJvbSB0aGUgT3BlcmF0aW9uU3BlY1xuICpcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBmbGF0dGVuUmVzcG9uc2UoZnVsbFJlc3BvbnNlLCByZXNwb25zZVNwZWMpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGNvbnN0IHBhcnNlZEhlYWRlcnMgPSBmdWxsUmVzcG9uc2UucGFyc2VkSGVhZGVycztcbiAgICAvLyBoZWFkIG1ldGhvZHMgbmV2ZXIgaGF2ZSBhIGJvZHksIGJ1dCB3ZSByZXR1cm4gYSBib29sZWFuIHNldCB0byBib2R5IHByb3BlcnR5XG4gICAgLy8gdG8gaW5kaWNhdGUgcHJlc2VuY2UvYWJzZW5jZSBvZiB0aGUgcmVzb3VyY2VcbiAgICBpZiAoZnVsbFJlc3BvbnNlLnJlcXVlc3QubWV0aG9kID09PSBcIkhFQURcIikge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwYXJzZWRIZWFkZXJzKSwgeyBib2R5OiBmdWxsUmVzcG9uc2UucGFyc2VkQm9keSB9KTtcbiAgICB9XG4gICAgY29uc3QgYm9keU1hcHBlciA9IHJlc3BvbnNlU3BlYyAmJiByZXNwb25zZVNwZWMuYm9keU1hcHBlcjtcbiAgICBjb25zdCBpc051bGxhYmxlID0gQm9vbGVhbihib2R5TWFwcGVyID09PSBudWxsIHx8IGJvZHlNYXBwZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGJvZHlNYXBwZXIubnVsbGFibGUpO1xuICAgIGNvbnN0IGV4cGVjdGVkQm9keVR5cGVOYW1lID0gYm9keU1hcHBlciA9PT0gbnVsbCB8fCBib2R5TWFwcGVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBib2R5TWFwcGVyLnR5cGUubmFtZTtcbiAgICAvKiogSWYgdGhlIGJvZHkgaXMgYXNrZWQgZm9yLCB3ZSBsb29rIGF0IHRoZSBleHBlY3RlZCBib2R5IHR5cGUgdG8gaGFuZGxlIGl0ICovXG4gICAgaWYgKGV4cGVjdGVkQm9keVR5cGVOYW1lID09PSBcIlN0cmVhbVwiKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHBhcnNlZEhlYWRlcnMpLCB7IGJsb2JCb2R5OiBmdWxsUmVzcG9uc2UuYmxvYkJvZHksIHJlYWRhYmxlU3RyZWFtQm9keTogZnVsbFJlc3BvbnNlLnJlYWRhYmxlU3RyZWFtQm9keSB9KTtcbiAgICB9XG4gICAgY29uc3QgbW9kZWxQcm9wZXJ0aWVzID0gKGV4cGVjdGVkQm9keVR5cGVOYW1lID09PSBcIkNvbXBvc2l0ZVwiICYmXG4gICAgICAgIGJvZHlNYXBwZXIudHlwZS5tb2RlbFByb3BlcnRpZXMpIHx8XG4gICAgICAgIHt9O1xuICAgIGNvbnN0IGlzUGFnZWFibGVSZXNwb25zZSA9IE9iamVjdC5rZXlzKG1vZGVsUHJvcGVydGllcykuc29tZSgoaykgPT4gbW9kZWxQcm9wZXJ0aWVzW2tdLnNlcmlhbGl6ZWROYW1lID09PSBcIlwiKTtcbiAgICBpZiAoZXhwZWN0ZWRCb2R5VHlwZU5hbWUgPT09IFwiU2VxdWVuY2VcIiB8fCBpc1BhZ2VhYmxlUmVzcG9uc2UpIHtcbiAgICAgICAgY29uc3QgYXJyYXlSZXNwb25zZSA9IChfYSA9IGZ1bGxSZXNwb25zZS5wYXJzZWRCb2R5KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBbXTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMobW9kZWxQcm9wZXJ0aWVzKSkge1xuICAgICAgICAgICAgaWYgKG1vZGVsUHJvcGVydGllc1trZXldLnNlcmlhbGl6ZWROYW1lKSB7XG4gICAgICAgICAgICAgICAgYXJyYXlSZXNwb25zZVtrZXldID0gKF9iID0gZnVsbFJlc3BvbnNlLnBhcnNlZEJvZHkpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYltrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJzZWRIZWFkZXJzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhwYXJzZWRIZWFkZXJzKSkge1xuICAgICAgICAgICAgICAgIGFycmF5UmVzcG9uc2Vba2V5XSA9IHBhcnNlZEhlYWRlcnNba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNOdWxsYWJsZSAmJlxuICAgICAgICAgICAgIWZ1bGxSZXNwb25zZS5wYXJzZWRCb2R5ICYmXG4gICAgICAgICAgICAhcGFyc2VkSGVhZGVycyAmJlxuICAgICAgICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobW9kZWxQcm9wZXJ0aWVzKS5sZW5ndGggPT09IDBcbiAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgOiBhcnJheVJlc3BvbnNlO1xuICAgIH1cbiAgICByZXR1cm4gaGFuZGxlTnVsbGFibGVSZXNwb25zZUFuZFdyYXBwYWJsZUJvZHkoe1xuICAgICAgICBib2R5OiBmdWxsUmVzcG9uc2UucGFyc2VkQm9keSxcbiAgICAgICAgaGVhZGVyczogcGFyc2VkSGVhZGVycyxcbiAgICAgICAgaGFzTnVsbGFibGVUeXBlOiBpc051bGxhYmxlLFxuICAgICAgICBzaG91bGRXcmFwQm9keTogaXNQcmltaXRpdmVCb2R5KGZ1bGxSZXNwb25zZS5wYXJzZWRCb2R5LCBleHBlY3RlZEJvZHlUeXBlTmFtZSksXG4gICAgfSk7XG59XG5leHBvcnRzLmZsYXR0ZW5SZXNwb25zZSA9IGZsYXR0ZW5SZXNwb25zZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTWFwcGVyVHlwZU5hbWVzID0gZXhwb3J0cy5jcmVhdGVTZXJpYWxpemVyID0gdm9pZCAwO1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbmNvbnN0IGJhc2U2NCA9IHRzbGliXzEuX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL2Jhc2U2NC5qc1wiKSk7XG5jb25zdCBpbnRlcmZhY2VzX2pzXzEgPSByZXF1aXJlKFwiLi9pbnRlcmZhY2VzLmpzXCIpO1xuY29uc3QgdXRpbHNfanNfMSA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY2xhc3MgU2VyaWFsaXplckltcGwge1xuICAgIGNvbnN0cnVjdG9yKG1vZGVsTWFwcGVycyA9IHt9LCBpc1hNTCA9IGZhbHNlKSB7XG4gICAgICAgIHRoaXMubW9kZWxNYXBwZXJzID0gbW9kZWxNYXBwZXJzO1xuICAgICAgICB0aGlzLmlzWE1MID0gaXNYTUw7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIFJlbW92aW5nIHRoZSBjb25zdHJhaW50cyB2YWxpZGF0aW9uIG9uIGNsaWVudCBzaWRlLlxuICAgICAqL1xuICAgIHZhbGlkYXRlQ29uc3RyYWludHMobWFwcGVyLCB2YWx1ZSwgb2JqZWN0TmFtZSkge1xuICAgICAgICBjb25zdCBmYWlsVmFsaWRhdGlvbiA9IChjb25zdHJhaW50TmFtZSwgY29uc3RyYWludFZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFwiJHtvYmplY3ROYW1lfVwiIHdpdGggdmFsdWUgXCIke3ZhbHVlfVwiIHNob3VsZCBzYXRpc2Z5IHRoZSBjb25zdHJhaW50IFwiJHtjb25zdHJhaW50TmFtZX1cIjogJHtjb25zdHJhaW50VmFsdWV9LmApO1xuICAgICAgICB9O1xuICAgICAgICBpZiAobWFwcGVyLmNvbnN0cmFpbnRzICYmIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgRXhjbHVzaXZlTWF4aW11bSwgRXhjbHVzaXZlTWluaW11bSwgSW5jbHVzaXZlTWF4aW11bSwgSW5jbHVzaXZlTWluaW11bSwgTWF4SXRlbXMsIE1heExlbmd0aCwgTWluSXRlbXMsIE1pbkxlbmd0aCwgTXVsdGlwbGVPZiwgUGF0dGVybiwgVW5pcXVlSXRlbXMsIH0gPSBtYXBwZXIuY29uc3RyYWludHM7XG4gICAgICAgICAgICBpZiAoRXhjbHVzaXZlTWF4aW11bSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlID49IEV4Y2x1c2l2ZU1heGltdW0pIHtcbiAgICAgICAgICAgICAgICBmYWlsVmFsaWRhdGlvbihcIkV4Y2x1c2l2ZU1heGltdW1cIiwgRXhjbHVzaXZlTWF4aW11bSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoRXhjbHVzaXZlTWluaW11bSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlIDw9IEV4Y2x1c2l2ZU1pbmltdW0pIHtcbiAgICAgICAgICAgICAgICBmYWlsVmFsaWRhdGlvbihcIkV4Y2x1c2l2ZU1pbmltdW1cIiwgRXhjbHVzaXZlTWluaW11bSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoSW5jbHVzaXZlTWF4aW11bSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlID4gSW5jbHVzaXZlTWF4aW11bSkge1xuICAgICAgICAgICAgICAgIGZhaWxWYWxpZGF0aW9uKFwiSW5jbHVzaXZlTWF4aW11bVwiLCBJbmNsdXNpdmVNYXhpbXVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChJbmNsdXNpdmVNaW5pbXVtICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgPCBJbmNsdXNpdmVNaW5pbXVtKSB7XG4gICAgICAgICAgICAgICAgZmFpbFZhbGlkYXRpb24oXCJJbmNsdXNpdmVNaW5pbXVtXCIsIEluY2x1c2l2ZU1pbmltdW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKE1heEl0ZW1zICE9PSB1bmRlZmluZWQgJiYgdmFsdWUubGVuZ3RoID4gTWF4SXRlbXMpIHtcbiAgICAgICAgICAgICAgICBmYWlsVmFsaWRhdGlvbihcIk1heEl0ZW1zXCIsIE1heEl0ZW1zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChNYXhMZW5ndGggIT09IHVuZGVmaW5lZCAmJiB2YWx1ZS5sZW5ndGggPiBNYXhMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBmYWlsVmFsaWRhdGlvbihcIk1heExlbmd0aFwiLCBNYXhMZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKE1pbkl0ZW1zICE9PSB1bmRlZmluZWQgJiYgdmFsdWUubGVuZ3RoIDwgTWluSXRlbXMpIHtcbiAgICAgICAgICAgICAgICBmYWlsVmFsaWRhdGlvbihcIk1pbkl0ZW1zXCIsIE1pbkl0ZW1zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChNaW5MZW5ndGggIT09IHVuZGVmaW5lZCAmJiB2YWx1ZS5sZW5ndGggPCBNaW5MZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBmYWlsVmFsaWRhdGlvbihcIk1pbkxlbmd0aFwiLCBNaW5MZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKE11bHRpcGxlT2YgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAlIE11bHRpcGxlT2YgIT09IDApIHtcbiAgICAgICAgICAgICAgICBmYWlsVmFsaWRhdGlvbihcIk11bHRpcGxlT2ZcIiwgTXVsdGlwbGVPZik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoUGF0dGVybikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhdHRlcm4gPSB0eXBlb2YgUGF0dGVybiA9PT0gXCJzdHJpbmdcIiA/IG5ldyBSZWdFeHAoUGF0dGVybikgOiBQYXR0ZXJuO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIgfHwgdmFsdWUubWF0Y2gocGF0dGVybikgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgZmFpbFZhbGlkYXRpb24oXCJQYXR0ZXJuXCIsIFBhdHRlcm4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChVbmlxdWVJdGVtcyAmJlxuICAgICAgICAgICAgICAgIHZhbHVlLnNvbWUoKGl0ZW0sIGksIGFyKSA9PiBhci5pbmRleE9mKGl0ZW0pICE9PSBpKSkge1xuICAgICAgICAgICAgICAgIGZhaWxWYWxpZGF0aW9uKFwiVW5pcXVlSXRlbXNcIiwgVW5pcXVlSXRlbXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNlcmlhbGl6ZSB0aGUgZ2l2ZW4gb2JqZWN0IGJhc2VkIG9uIGl0cyBtZXRhZGF0YSBkZWZpbmVkIGluIHRoZSBtYXBwZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSBtYXBwZXIgLSBUaGUgbWFwcGVyIHdoaWNoIGRlZmluZXMgdGhlIG1ldGFkYXRhIG9mIHRoZSBzZXJpYWxpemFibGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gb2JqZWN0IC0gQSB2YWxpZCBKYXZhc2NyaXB0IG9iamVjdCB0byBiZSBzZXJpYWxpemVkXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb2JqZWN0TmFtZSAtIE5hbWUgb2YgdGhlIHNlcmlhbGl6ZWQgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIGFkZGl0aW9uYWwgb3B0aW9ucyB0byBzZXJpYWxpemF0aW9uXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBBIHZhbGlkIHNlcmlhbGl6ZWQgSmF2YXNjcmlwdCBvYmplY3RcbiAgICAgKi9cbiAgICBzZXJpYWxpemUobWFwcGVyLCBvYmplY3QsIG9iamVjdE5hbWUsIG9wdGlvbnMgPSB7IHhtbDoge30gfSkge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYztcbiAgICAgICAgY29uc3QgdXBkYXRlZE9wdGlvbnMgPSB7XG4gICAgICAgICAgICB4bWw6IHtcbiAgICAgICAgICAgICAgICByb290TmFtZTogKF9hID0gb3B0aW9ucy54bWwucm9vdE5hbWUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFwiXCIsXG4gICAgICAgICAgICAgICAgaW5jbHVkZVJvb3Q6IChfYiA9IG9wdGlvbnMueG1sLmluY2x1ZGVSb290KSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB4bWxDaGFyS2V5OiAoX2MgPSBvcHRpb25zLnhtbC54bWxDaGFyS2V5KSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiBpbnRlcmZhY2VzX2pzXzEuWE1MX0NIQVJLRVksXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBsZXQgcGF5bG9hZCA9IHt9O1xuICAgICAgICBjb25zdCBtYXBwZXJUeXBlID0gbWFwcGVyLnR5cGUubmFtZTtcbiAgICAgICAgaWYgKCFvYmplY3ROYW1lKSB7XG4gICAgICAgICAgICBvYmplY3ROYW1lID0gbWFwcGVyLnNlcmlhbGl6ZWROYW1lO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXBwZXJUeXBlLm1hdGNoKC9eU2VxdWVuY2UkL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICBwYXlsb2FkID0gW107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hcHBlci5pc0NvbnN0YW50KSB7XG4gICAgICAgICAgICBvYmplY3QgPSBtYXBwZXIuZGVmYXVsdFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRoaXMgdGFibGUgb2YgYWxsb3dlZCB2YWx1ZXMgc2hvdWxkIGhlbHAgZXhwbGFpblxuICAgICAgICAvLyB0aGUgbWFwcGVyLnJlcXVpcmVkIGFuZCBtYXBwZXIubnVsbGFibGUgcHJvcGVydGllcy5cbiAgICAgICAgLy8gWCBtZWFucyBcIm5laXRoZXIgdW5kZWZpbmVkIG9yIG51bGwgYXJlIGFsbG93ZWRcIi5cbiAgICAgICAgLy8gICAgICAgICAgIHx8IHJlcXVpcmVkXG4gICAgICAgIC8vICAgICAgICAgICB8fCB0cnVlICAgICAgfCBmYWxzZVxuICAgICAgICAvLyAgbnVsbGFibGUgfHwgPT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgICAgLy8gICAgICB0cnVlIHx8IG51bGwgICAgICB8IHVuZGVmaW5lZC9udWxsXG4gICAgICAgIC8vICAgICBmYWxzZSB8fCBYICAgICAgICAgfCB1bmRlZmluZWRcbiAgICAgICAgLy8gdW5kZWZpbmVkIHx8IFggICAgICAgICB8IHVuZGVmaW5lZC9udWxsXG4gICAgICAgIGNvbnN0IHsgcmVxdWlyZWQsIG51bGxhYmxlIH0gPSBtYXBwZXI7XG4gICAgICAgIGlmIChyZXF1aXJlZCAmJiBudWxsYWJsZSAmJiBvYmplY3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke29iamVjdE5hbWV9IGNhbm5vdCBiZSB1bmRlZmluZWQuYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlcXVpcmVkICYmICFudWxsYWJsZSAmJiAob2JqZWN0ID09PSB1bmRlZmluZWQgfHwgb2JqZWN0ID09PSBudWxsKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke29iamVjdE5hbWV9IGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC5gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXJlcXVpcmVkICYmIG51bGxhYmxlID09PSBmYWxzZSAmJiBvYmplY3QgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtvYmplY3ROYW1lfSBjYW5ub3QgYmUgbnVsbC5gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob2JqZWN0ID09PSB1bmRlZmluZWQgfHwgb2JqZWN0ID09PSBudWxsKSB7XG4gICAgICAgICAgICBwYXlsb2FkID0gb2JqZWN0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKG1hcHBlclR5cGUubWF0Y2goL15hbnkkL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZCA9IG9iamVjdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1hcHBlclR5cGUubWF0Y2goL14oTnVtYmVyfFN0cmluZ3xCb29sZWFufE9iamVjdHxTdHJlYW18VXVpZCkkL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZCA9IHNlcmlhbGl6ZUJhc2ljVHlwZXMobWFwcGVyVHlwZSwgb2JqZWN0TmFtZSwgb2JqZWN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1hcHBlclR5cGUubWF0Y2goL15FbnVtJC9pKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVudW1NYXBwZXIgPSBtYXBwZXI7XG4gICAgICAgICAgICAgICAgcGF5bG9hZCA9IHNlcmlhbGl6ZUVudW1UeXBlKG9iamVjdE5hbWUsIGVudW1NYXBwZXIudHlwZS5hbGxvd2VkVmFsdWVzLCBvYmplY3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobWFwcGVyVHlwZS5tYXRjaCgvXihEYXRlfERhdGVUaW1lfFRpbWVTcGFufERhdGVUaW1lUmZjMTEyM3xVbml4VGltZSkkL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZCA9IHNlcmlhbGl6ZURhdGVUeXBlcyhtYXBwZXJUeXBlLCBvYmplY3QsIG9iamVjdE5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobWFwcGVyVHlwZS5tYXRjaCgvXkJ5dGVBcnJheSQvaSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBwYXlsb2FkID0gc2VyaWFsaXplQnl0ZUFycmF5VHlwZShvYmplY3ROYW1lLCBvYmplY3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobWFwcGVyVHlwZS5tYXRjaCgvXkJhc2U2NFVybCQvaSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBwYXlsb2FkID0gc2VyaWFsaXplQmFzZTY0VXJsVHlwZShvYmplY3ROYW1lLCBvYmplY3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobWFwcGVyVHlwZS5tYXRjaCgvXlNlcXVlbmNlJC9pKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHBheWxvYWQgPSBzZXJpYWxpemVTZXF1ZW5jZVR5cGUodGhpcywgbWFwcGVyLCBvYmplY3QsIG9iamVjdE5hbWUsIEJvb2xlYW4odGhpcy5pc1hNTCksIHVwZGF0ZWRPcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1hcHBlclR5cGUubWF0Y2goL15EaWN0aW9uYXJ5JC9pKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHBheWxvYWQgPSBzZXJpYWxpemVEaWN0aW9uYXJ5VHlwZSh0aGlzLCBtYXBwZXIsIG9iamVjdCwgb2JqZWN0TmFtZSwgQm9vbGVhbih0aGlzLmlzWE1MKSwgdXBkYXRlZE9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobWFwcGVyVHlwZS5tYXRjaCgvXkNvbXBvc2l0ZSQvaSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBwYXlsb2FkID0gc2VyaWFsaXplQ29tcG9zaXRlVHlwZSh0aGlzLCBtYXBwZXIsIG9iamVjdCwgb2JqZWN0TmFtZSwgQm9vbGVhbih0aGlzLmlzWE1MKSwgdXBkYXRlZE9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZXNlcmlhbGl6ZSB0aGUgZ2l2ZW4gb2JqZWN0IGJhc2VkIG9uIGl0cyBtZXRhZGF0YSBkZWZpbmVkIGluIHRoZSBtYXBwZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSBtYXBwZXIgLSBUaGUgbWFwcGVyIHdoaWNoIGRlZmluZXMgdGhlIG1ldGFkYXRhIG9mIHRoZSBzZXJpYWxpemFibGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVzcG9uc2VCb2R5IC0gQSB2YWxpZCBKYXZhc2NyaXB0IGVudGl0eSB0byBiZSBkZXNlcmlhbGl6ZWRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvYmplY3ROYW1lIC0gTmFtZSBvZiB0aGUgZGVzZXJpYWxpemVkIG9iamVjdFxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBDb250cm9scyBiZWhhdmlvciBvZiBYTUwgcGFyc2VyIGFuZCBidWlsZGVyLlxuICAgICAqXG4gICAgICogQHJldHVybnMgQSB2YWxpZCBkZXNlcmlhbGl6ZWQgSmF2YXNjcmlwdCBvYmplY3RcbiAgICAgKi9cbiAgICBkZXNlcmlhbGl6ZShtYXBwZXIsIHJlc3BvbnNlQm9keSwgb2JqZWN0TmFtZSwgb3B0aW9ucyA9IHsgeG1sOiB7fSB9KSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZDtcbiAgICAgICAgY29uc3QgdXBkYXRlZE9wdGlvbnMgPSB7XG4gICAgICAgICAgICB4bWw6IHtcbiAgICAgICAgICAgICAgICByb290TmFtZTogKF9hID0gb3B0aW9ucy54bWwucm9vdE5hbWUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFwiXCIsXG4gICAgICAgICAgICAgICAgaW5jbHVkZVJvb3Q6IChfYiA9IG9wdGlvbnMueG1sLmluY2x1ZGVSb290KSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB4bWxDaGFyS2V5OiAoX2MgPSBvcHRpb25zLnhtbC54bWxDaGFyS2V5KSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiBpbnRlcmZhY2VzX2pzXzEuWE1MX0NIQVJLRVksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaWdub3JlVW5rbm93blByb3BlcnRpZXM6IChfZCA9IG9wdGlvbnMuaWdub3JlVW5rbm93blByb3BlcnRpZXMpICE9PSBudWxsICYmIF9kICE9PSB2b2lkIDAgPyBfZCA6IGZhbHNlLFxuICAgICAgICB9O1xuICAgICAgICBpZiAocmVzcG9uc2VCb2R5ID09PSB1bmRlZmluZWQgfHwgcmVzcG9uc2VCb2R5ID09PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1hNTCAmJiBtYXBwZXIudHlwZS5uYW1lID09PSBcIlNlcXVlbmNlXCIgJiYgIW1hcHBlci54bWxJc1dyYXBwZWQpIHtcbiAgICAgICAgICAgICAgICAvLyBFZGdlIGNhc2UgZm9yIGVtcHR5IFhNTCBub24td3JhcHBlZCBsaXN0cy4geG1sMmpzIGNhbid0IGRpc3Rpbmd1aXNoXG4gICAgICAgICAgICAgICAgLy8gYmV0d2VlbiB0aGUgbGlzdCBiZWluZyBlbXB0eSB2ZXJzdXMgYmVpbmcgbWlzc2luZyxcbiAgICAgICAgICAgICAgICAvLyBzbyBsZXQncyBkbyB0aGUgbW9yZSB1c2VyLWZyaWVuZGx5IHRoaW5nIGFuZCByZXR1cm4gYW4gZW1wdHkgbGlzdC5cbiAgICAgICAgICAgICAgICByZXNwb25zZUJvZHkgPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHNwZWNpZmljYWxseSBjaGVjayBmb3IgdW5kZWZpbmVkIGFzIGRlZmF1bHQgdmFsdWUgY2FuIGJlIGEgZmFsc2V5IHZhbHVlIGAwLCBcIlwiLCBmYWxzZSwgbnVsbGBcbiAgICAgICAgICAgIGlmIChtYXBwZXIuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZUJvZHkgPSBtYXBwZXIuZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlQm9keTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcGF5bG9hZDtcbiAgICAgICAgY29uc3QgbWFwcGVyVHlwZSA9IG1hcHBlci50eXBlLm5hbWU7XG4gICAgICAgIGlmICghb2JqZWN0TmFtZSkge1xuICAgICAgICAgICAgb2JqZWN0TmFtZSA9IG1hcHBlci5zZXJpYWxpemVkTmFtZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWFwcGVyVHlwZS5tYXRjaCgvXkNvbXBvc2l0ZSQvaSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHBheWxvYWQgPSBkZXNlcmlhbGl6ZUNvbXBvc2l0ZVR5cGUodGhpcywgbWFwcGVyLCByZXNwb25zZUJvZHksIG9iamVjdE5hbWUsIHVwZGF0ZWRPcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzWE1MKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeG1sQ2hhcktleSA9IHVwZGF0ZWRPcHRpb25zLnhtbC54bWxDaGFyS2V5O1xuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAqIElmIHRoZSBtYXBwZXIgc3BlY2lmaWVzIHRoaXMgYXMgYSBub24tY29tcG9zaXRlIHR5cGUgdmFsdWUgYnV0IHRoZSByZXNwb25zZUJvZHkgY29udGFpbnNcbiAgICAgICAgICAgICAgICAgKiBib3RoIGhlYWRlciAoXCIkXCIgaS5lLiwgWE1MX0FUVFJLRVkpIGFuZCBib2R5IChcIiNcIiBpLmUuLCBYTUxfQ0hBUktFWSkgcHJvcGVydGllcyxcbiAgICAgICAgICAgICAgICAgKiB0aGVuIGp1c3QgcmVkdWNlIHRoZSByZXNwb25zZUJvZHkgdmFsdWUgdG8gdGhlIGJvZHkgKFwiI1wiIGkuZS4sIFhNTF9DSEFSS0VZKSBwcm9wZXJ0eS5cbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2VCb2R5W2ludGVyZmFjZXNfanNfMS5YTUxfQVRUUktFWV0gIT09IHVuZGVmaW5lZCAmJiByZXNwb25zZUJvZHlbeG1sQ2hhcktleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICByZXNwb25zZUJvZHkgPSByZXNwb25zZUJvZHlbeG1sQ2hhcktleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1hcHBlclR5cGUubWF0Y2goL15OdW1iZXIkL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZCA9IHBhcnNlRmxvYXQocmVzcG9uc2VCb2R5KTtcbiAgICAgICAgICAgICAgICBpZiAoaXNOYU4ocGF5bG9hZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZCA9IHJlc3BvbnNlQm9keTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtYXBwZXJUeXBlLm1hdGNoKC9eQm9vbGVhbiQvaSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2VCb2R5ID09PSBcInRydWVcIikge1xuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAocmVzcG9uc2VCb2R5ID09PSBcImZhbHNlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZCA9IHJlc3BvbnNlQm9keTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtYXBwZXJUeXBlLm1hdGNoKC9eKFN0cmluZ3xFbnVtfE9iamVjdHxTdHJlYW18VXVpZHxUaW1lU3BhbnxhbnkpJC9pKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHBheWxvYWQgPSByZXNwb25zZUJvZHk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtYXBwZXJUeXBlLm1hdGNoKC9eKERhdGV8RGF0ZVRpbWV8RGF0ZVRpbWVSZmMxMTIzKSQvaSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBwYXlsb2FkID0gbmV3IERhdGUocmVzcG9uc2VCb2R5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1hcHBlclR5cGUubWF0Y2goL15Vbml4VGltZSQvaSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBwYXlsb2FkID0gdW5peFRpbWVUb0RhdGUocmVzcG9uc2VCb2R5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1hcHBlclR5cGUubWF0Y2goL15CeXRlQXJyYXkkL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZCA9IGJhc2U2NC5kZWNvZGVTdHJpbmcocmVzcG9uc2VCb2R5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1hcHBlclR5cGUubWF0Y2goL15CYXNlNjRVcmwkL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZCA9IGJhc2U2NFVybFRvQnl0ZUFycmF5KHJlc3BvbnNlQm9keSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtYXBwZXJUeXBlLm1hdGNoKC9eU2VxdWVuY2UkL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZCA9IGRlc2VyaWFsaXplU2VxdWVuY2VUeXBlKHRoaXMsIG1hcHBlciwgcmVzcG9uc2VCb2R5LCBvYmplY3ROYW1lLCB1cGRhdGVkT3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtYXBwZXJUeXBlLm1hdGNoKC9eRGljdGlvbmFyeSQvaSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBwYXlsb2FkID0gZGVzZXJpYWxpemVEaWN0aW9uYXJ5VHlwZSh0aGlzLCBtYXBwZXIsIHJlc3BvbnNlQm9keSwgb2JqZWN0TmFtZSwgdXBkYXRlZE9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtYXBwZXIuaXNDb25zdGFudCkge1xuICAgICAgICAgICAgcGF5bG9hZCA9IG1hcHBlci5kZWZhdWx0VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgfVxufVxuLyoqXG4gKiBNZXRob2QgdGhhdCBjcmVhdGVzIGFuZCByZXR1cm5zIGEgU2VyaWFsaXplci5cbiAqIEBwYXJhbSBtb2RlbE1hcHBlcnMgLSBLbm93biBtb2RlbHMgdG8gbWFwXG4gKiBAcGFyYW0gaXNYTUwgLSBJZiBYTUwgc2hvdWxkIGJlIHN1cHBvcnRlZFxuICovXG5mdW5jdGlvbiBjcmVhdGVTZXJpYWxpemVyKG1vZGVsTWFwcGVycyA9IHt9LCBpc1hNTCA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIG5ldyBTZXJpYWxpemVySW1wbChtb2RlbE1hcHBlcnMsIGlzWE1MKTtcbn1cbmV4cG9ydHMuY3JlYXRlU2VyaWFsaXplciA9IGNyZWF0ZVNlcmlhbGl6ZXI7XG5mdW5jdGlvbiB0cmltRW5kKHN0ciwgY2gpIHtcbiAgICBsZXQgbGVuID0gc3RyLmxlbmd0aDtcbiAgICB3aGlsZSAobGVuIC0gMSA+PSAwICYmIHN0cltsZW4gLSAxXSA9PT0gY2gpIHtcbiAgICAgICAgLS1sZW47XG4gICAgfVxuICAgIHJldHVybiBzdHIuc3Vic3RyKDAsIGxlbik7XG59XG5mdW5jdGlvbiBidWZmZXJUb0Jhc2U2NFVybChidWZmZXIpIHtcbiAgICBpZiAoIWJ1ZmZlcikge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAoIShidWZmZXIgaW5zdGFuY2VvZiBVaW50OEFycmF5KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFBsZWFzZSBwcm92aWRlIGFuIGlucHV0IG9mIHR5cGUgVWludDhBcnJheSBmb3IgY29udmVydGluZyB0byBCYXNlNjRVcmwuYCk7XG4gICAgfVxuICAgIC8vIFVpbnQ4QXJyYXkgdG8gQmFzZTY0LlxuICAgIGNvbnN0IHN0ciA9IGJhc2U2NC5lbmNvZGVCeXRlQXJyYXkoYnVmZmVyKTtcbiAgICAvLyBCYXNlNjQgdG8gQmFzZTY0VXJsLlxuICAgIHJldHVybiB0cmltRW5kKHN0ciwgXCI9XCIpLnJlcGxhY2UoL1xcKy9nLCBcIi1cIikucmVwbGFjZSgvXFwvL2csIFwiX1wiKTtcbn1cbmZ1bmN0aW9uIGJhc2U2NFVybFRvQnl0ZUFycmF5KHN0cikge1xuICAgIGlmICghc3RyKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmIChzdHIgJiYgdHlwZW9mIHN0ci52YWx1ZU9mKCkgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGxlYXNlIHByb3ZpZGUgYW4gaW5wdXQgb2YgdHlwZSBzdHJpbmcgZm9yIGNvbnZlcnRpbmcgdG8gVWludDhBcnJheVwiKTtcbiAgICB9XG4gICAgLy8gQmFzZTY0VXJsIHRvIEJhc2U2NC5cbiAgICBzdHIgPSBzdHIucmVwbGFjZSgvLS9nLCBcIitcIikucmVwbGFjZSgvXy9nLCBcIi9cIik7XG4gICAgLy8gQmFzZTY0IHRvIFVpbnQ4QXJyYXkuXG4gICAgcmV0dXJuIGJhc2U2NC5kZWNvZGVTdHJpbmcoc3RyKTtcbn1cbmZ1bmN0aW9uIHNwbGl0U2VyaWFsaXplTmFtZShwcm9wKSB7XG4gICAgY29uc3QgY2xhc3NlcyA9IFtdO1xuICAgIGxldCBwYXJ0aWFsY2xhc3MgPSBcIlwiO1xuICAgIGlmIChwcm9wKSB7XG4gICAgICAgIGNvbnN0IHN1YndvcmRzID0gcHJvcC5zcGxpdChcIi5cIik7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBzdWJ3b3Jkcykge1xuICAgICAgICAgICAgaWYgKGl0ZW0uY2hhckF0KGl0ZW0ubGVuZ3RoIC0gMSkgPT09IFwiXFxcXFwiKSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbGNsYXNzICs9IGl0ZW0uc3Vic3RyKDAsIGl0ZW0ubGVuZ3RoIC0gMSkgKyBcIi5cIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHBhcnRpYWxjbGFzcyArPSBpdGVtO1xuICAgICAgICAgICAgICAgIGNsYXNzZXMucHVzaChwYXJ0aWFsY2xhc3MpO1xuICAgICAgICAgICAgICAgIHBhcnRpYWxjbGFzcyA9IFwiXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNsYXNzZXM7XG59XG5mdW5jdGlvbiBkYXRlVG9Vbml4VGltZShkKSB7XG4gICAgaWYgKCFkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZC52YWx1ZU9mKCkgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgZCA9IG5ldyBEYXRlKGQpO1xuICAgIH1cbiAgICByZXR1cm4gTWF0aC5mbG9vcihkLmdldFRpbWUoKSAvIDEwMDApO1xufVxuZnVuY3Rpb24gdW5peFRpbWVUb0RhdGUobikge1xuICAgIGlmICghbikge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IERhdGUobiAqIDEwMDApO1xufVxuZnVuY3Rpb24gc2VyaWFsaXplQmFzaWNUeXBlcyh0eXBlTmFtZSwgb2JqZWN0TmFtZSwgdmFsdWUpIHtcbiAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZU5hbWUubWF0Y2goL15OdW1iZXIkL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke29iamVjdE5hbWV9IHdpdGggdmFsdWUgJHt2YWx1ZX0gbXVzdCBiZSBvZiB0eXBlIG51bWJlci5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlTmFtZS5tYXRjaCgvXlN0cmluZyQvaSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUudmFsdWVPZigpICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke29iamVjdE5hbWV9IHdpdGggdmFsdWUgXCIke3ZhbHVlfVwiIG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZU5hbWUubWF0Y2goL15VdWlkJC9pKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKCEodHlwZW9mIHZhbHVlLnZhbHVlT2YoKSA9PT0gXCJzdHJpbmdcIiAmJiAoMCwgdXRpbHNfanNfMS5pc1ZhbGlkVXVpZCkodmFsdWUpKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtvYmplY3ROYW1lfSB3aXRoIHZhbHVlIFwiJHt2YWx1ZX1cIiBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nIGFuZCBhIHZhbGlkIHV1aWQuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZU5hbWUubWF0Y2goL15Cb29sZWFuJC9pKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7b2JqZWN0TmFtZX0gd2l0aCB2YWx1ZSAke3ZhbHVlfSBtdXN0IGJlIG9mIHR5cGUgYm9vbGVhbi5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlTmFtZS5tYXRjaCgvXlN0cmVhbSQvaSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IG9iamVjdFR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gICAgICAgICAgICBpZiAob2JqZWN0VHlwZSAhPT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiB2YWx1ZS5waXBlICE9PSBcImZ1bmN0aW9uXCIgJiYgLy8gTm9kZUpTLlJlYWRhYmxlU3RyZWFtXG4gICAgICAgICAgICAgICAgdHlwZW9mIHZhbHVlLnRlZSAhPT0gXCJmdW5jdGlvblwiICYmIC8vIGJyb3dzZXIgUmVhZGFibGVTdHJlYW1cbiAgICAgICAgICAgICAgICAhKHZhbHVlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpICYmXG4gICAgICAgICAgICAgICAgIUFycmF5QnVmZmVyLmlzVmlldyh2YWx1ZSkgJiZcbiAgICAgICAgICAgICAgICAvLyBGaWxlIG9iamVjdHMgY291bnQgYXMgYSB0eXBlIG9mIEJsb2IsIHNvIHdlIHdhbnQgdG8gdXNlIGluc3RhbmNlb2YgZXhwbGljaXRseVxuICAgICAgICAgICAgICAgICEoKHR5cGVvZiBCbG9iID09PSBcImZ1bmN0aW9uXCIgfHwgdHlwZW9mIEJsb2IgPT09IFwib2JqZWN0XCIpICYmIHZhbHVlIGluc3RhbmNlb2YgQmxvYikgJiZcbiAgICAgICAgICAgICAgICBvYmplY3RUeXBlICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7b2JqZWN0TmFtZX0gbXVzdCBiZSBhIHN0cmluZywgQmxvYiwgQXJyYXlCdWZmZXIsIEFycmF5QnVmZmVyVmlldywgUmVhZGFibGVTdHJlYW0sIG9yICgpID0+IFJlYWRhYmxlU3RyZWFtLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbn1cbmZ1bmN0aW9uIHNlcmlhbGl6ZUVudW1UeXBlKG9iamVjdE5hbWUsIGFsbG93ZWRWYWx1ZXMsIHZhbHVlKSB7XG4gICAgaWYgKCFhbGxvd2VkVmFsdWVzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgUGxlYXNlIHByb3ZpZGUgYSBzZXQgb2YgYWxsb3dlZFZhbHVlcyB0byB2YWxpZGF0ZSAke29iamVjdE5hbWV9IGFzIGFuIEVudW0gVHlwZS5gKTtcbiAgICB9XG4gICAgY29uc3QgaXNQcmVzZW50ID0gYWxsb3dlZFZhbHVlcy5zb21lKChpdGVtKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgaXRlbS52YWx1ZU9mKCkgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtLnRvTG93ZXJDYXNlKCkgPT09IHZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW0gPT09IHZhbHVlO1xuICAgIH0pO1xuICAgIGlmICghaXNQcmVzZW50KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt2YWx1ZX0gaXMgbm90IGEgdmFsaWQgdmFsdWUgZm9yICR7b2JqZWN0TmFtZX0uIFRoZSB2YWxpZCB2YWx1ZXMgYXJlOiAke0pTT04uc3RyaW5naWZ5KGFsbG93ZWRWYWx1ZXMpfS5gKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuZnVuY3Rpb24gc2VyaWFsaXplQnl0ZUFycmF5VHlwZShvYmplY3ROYW1lLCB2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIGlmICghKHZhbHVlIGluc3RhbmNlb2YgVWludDhBcnJheSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtvYmplY3ROYW1lfSBtdXN0IGJlIG9mIHR5cGUgVWludDhBcnJheS5gKTtcbiAgICAgICAgfVxuICAgICAgICB2YWx1ZSA9IGJhc2U2NC5lbmNvZGVCeXRlQXJyYXkodmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59XG5mdW5jdGlvbiBzZXJpYWxpemVCYXNlNjRVcmxUeXBlKG9iamVjdE5hbWUsIHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKCEodmFsdWUgaW5zdGFuY2VvZiBVaW50OEFycmF5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke29iamVjdE5hbWV9IG11c3QgYmUgb2YgdHlwZSBVaW50OEFycmF5LmApO1xuICAgICAgICB9XG4gICAgICAgIHZhbHVlID0gYnVmZmVyVG9CYXNlNjRVcmwodmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59XG5mdW5jdGlvbiBzZXJpYWxpemVEYXRlVHlwZXModHlwZU5hbWUsIHZhbHVlLCBvYmplY3ROYW1lKSB7XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKHR5cGVOYW1lLm1hdGNoKC9eRGF0ZSQvaSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmICghKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSB8fFxuICAgICAgICAgICAgICAgICh0eXBlb2YgdmFsdWUudmFsdWVPZigpID09PSBcInN0cmluZ1wiICYmICFpc05hTihEYXRlLnBhcnNlKHZhbHVlKSkpKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtvYmplY3ROYW1lfSBtdXN0IGJlIGFuIGluc3RhbmNlb2YgRGF0ZSBvciBhIHN0cmluZyBpbiBJU084NjAxIGZvcm1hdC5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhbHVlID1cbiAgICAgICAgICAgICAgICB2YWx1ZSBpbnN0YW5jZW9mIERhdGVcbiAgICAgICAgICAgICAgICAgICAgPyB2YWx1ZS50b0lTT1N0cmluZygpLnN1YnN0cmluZygwLCAxMClcbiAgICAgICAgICAgICAgICAgICAgOiBuZXcgRGF0ZSh2YWx1ZSkudG9JU09TdHJpbmcoKS5zdWJzdHJpbmcoMCwgMTApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVOYW1lLm1hdGNoKC9eRGF0ZVRpbWUkL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoISh2YWx1ZSBpbnN0YW5jZW9mIERhdGUgfHxcbiAgICAgICAgICAgICAgICAodHlwZW9mIHZhbHVlLnZhbHVlT2YoKSA9PT0gXCJzdHJpbmdcIiAmJiAhaXNOYU4oRGF0ZS5wYXJzZSh2YWx1ZSkpKSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7b2JqZWN0TmFtZX0gbXVzdCBiZSBhbiBpbnN0YW5jZW9mIERhdGUgb3IgYSBzdHJpbmcgaW4gSVNPODYwMSBmb3JtYXQuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlIGluc3RhbmNlb2YgRGF0ZSA/IHZhbHVlLnRvSVNPU3RyaW5nKCkgOiBuZXcgRGF0ZSh2YWx1ZSkudG9JU09TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlTmFtZS5tYXRjaCgvXkRhdGVUaW1lUmZjMTEyMyQvaSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmICghKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSB8fFxuICAgICAgICAgICAgICAgICh0eXBlb2YgdmFsdWUudmFsdWVPZigpID09PSBcInN0cmluZ1wiICYmICFpc05hTihEYXRlLnBhcnNlKHZhbHVlKSkpKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtvYmplY3ROYW1lfSBtdXN0IGJlIGFuIGluc3RhbmNlb2YgRGF0ZSBvciBhIHN0cmluZyBpbiBSRkMtMTEyMyBmb3JtYXQuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlIGluc3RhbmNlb2YgRGF0ZSA/IHZhbHVlLnRvVVRDU3RyaW5nKCkgOiBuZXcgRGF0ZSh2YWx1ZSkudG9VVENTdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlTmFtZS5tYXRjaCgvXlVuaXhUaW1lJC9pKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKCEodmFsdWUgaW5zdGFuY2VvZiBEYXRlIHx8XG4gICAgICAgICAgICAgICAgKHR5cGVvZiB2YWx1ZS52YWx1ZU9mKCkgPT09IFwic3RyaW5nXCIgJiYgIWlzTmFOKERhdGUucGFyc2UodmFsdWUpKSkpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke29iamVjdE5hbWV9IG11c3QgYmUgYW4gaW5zdGFuY2VvZiBEYXRlIG9yIGEgc3RyaW5nIGluIFJGQy0xMTIzL0lTTzg2MDEgZm9ybWF0IGAgK1xuICAgICAgICAgICAgICAgICAgICBgZm9yIGl0IHRvIGJlIHNlcmlhbGl6ZWQgaW4gVW5peFRpbWUvRXBvY2ggZm9ybWF0LmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFsdWUgPSBkYXRlVG9Vbml4VGltZSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZU5hbWUubWF0Y2goL15UaW1lU3BhbiQvaSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmICghKDAsIHV0aWxzX2pzXzEuaXNEdXJhdGlvbikodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke29iamVjdE5hbWV9IG11c3QgYmUgYSBzdHJpbmcgaW4gSVNPIDg2MDEgZm9ybWF0LiBJbnN0ZWFkIHdhcyBcIiR7dmFsdWV9XCIuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuZnVuY3Rpb24gc2VyaWFsaXplU2VxdWVuY2VUeXBlKHNlcmlhbGl6ZXIsIG1hcHBlciwgb2JqZWN0LCBvYmplY3ROYW1lLCBpc1htbCwgb3B0aW9ucykge1xuICAgIHZhciBfYTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkob2JqZWN0KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7b2JqZWN0TmFtZX0gbXVzdCBiZSBvZiB0eXBlIEFycmF5LmApO1xuICAgIH1cbiAgICBsZXQgZWxlbWVudFR5cGUgPSBtYXBwZXIudHlwZS5lbGVtZW50O1xuICAgIGlmICghZWxlbWVudFR5cGUgfHwgdHlwZW9mIGVsZW1lbnRUeXBlICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgZWxlbWVudFwiIG1ldGFkYXRhIGZvciBhbiBBcnJheSBtdXN0IGJlIGRlZmluZWQgaW4gdGhlIGAgK1xuICAgICAgICAgICAgYG1hcHBlciBhbmQgaXQgbXVzdCBvZiB0eXBlIFwib2JqZWN0XCIgaW4gJHtvYmplY3ROYW1lfS5gKTtcbiAgICB9XG4gICAgLy8gUXVpcms6IENvbXBvc2l0ZSBtYXBwZXJzIHJlZmVyZW5jZWQgYnkgYGVsZW1lbnRgIG1pZ2h0XG4gICAgLy8gbm90IGhhdmUgKmFsbCogcHJvcGVydGllcyBkZWNsYXJlZCAobGlrZSB1YmVyUGFyZW50KSxcbiAgICAvLyBzbyBsZXQncyB0cnkgdG8gbG9vayB1cCB0aGUgZnVsbCBkZWZpbml0aW9uIGJ5IG5hbWUuXG4gICAgaWYgKGVsZW1lbnRUeXBlLnR5cGUubmFtZSA9PT0gXCJDb21wb3NpdGVcIiAmJiBlbGVtZW50VHlwZS50eXBlLmNsYXNzTmFtZSkge1xuICAgICAgICBlbGVtZW50VHlwZSA9IChfYSA9IHNlcmlhbGl6ZXIubW9kZWxNYXBwZXJzW2VsZW1lbnRUeXBlLnR5cGUuY2xhc3NOYW1lXSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZWxlbWVudFR5cGU7XG4gICAgfVxuICAgIGNvbnN0IHRlbXBBcnJheSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2JqZWN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZWRWYWx1ZSA9IHNlcmlhbGl6ZXIuc2VyaWFsaXplKGVsZW1lbnRUeXBlLCBvYmplY3RbaV0sIG9iamVjdE5hbWUsIG9wdGlvbnMpO1xuICAgICAgICBpZiAoaXNYbWwgJiYgZWxlbWVudFR5cGUueG1sTmFtZXNwYWNlKSB7XG4gICAgICAgICAgICBjb25zdCB4bWxuc0tleSA9IGVsZW1lbnRUeXBlLnhtbE5hbWVzcGFjZVByZWZpeFxuICAgICAgICAgICAgICAgID8gYHhtbG5zOiR7ZWxlbWVudFR5cGUueG1sTmFtZXNwYWNlUHJlZml4fWBcbiAgICAgICAgICAgICAgICA6IFwieG1sbnNcIjtcbiAgICAgICAgICAgIGlmIChlbGVtZW50VHlwZS50eXBlLm5hbWUgPT09IFwiQ29tcG9zaXRlXCIpIHtcbiAgICAgICAgICAgICAgICB0ZW1wQXJyYXlbaV0gPSBPYmplY3QuYXNzaWduKHt9LCBzZXJpYWxpemVkVmFsdWUpO1xuICAgICAgICAgICAgICAgIHRlbXBBcnJheVtpXVtpbnRlcmZhY2VzX2pzXzEuWE1MX0FUVFJLRVldID0geyBbeG1sbnNLZXldOiBlbGVtZW50VHlwZS54bWxOYW1lc3BhY2UgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRlbXBBcnJheVtpXSA9IHt9O1xuICAgICAgICAgICAgICAgIHRlbXBBcnJheVtpXVtvcHRpb25zLnhtbC54bWxDaGFyS2V5XSA9IHNlcmlhbGl6ZWRWYWx1ZTtcbiAgICAgICAgICAgICAgICB0ZW1wQXJyYXlbaV1baW50ZXJmYWNlc19qc18xLlhNTF9BVFRSS0VZXSA9IHsgW3htbG5zS2V5XTogZWxlbWVudFR5cGUueG1sTmFtZXNwYWNlIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0ZW1wQXJyYXlbaV0gPSBzZXJpYWxpemVkVmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRlbXBBcnJheTtcbn1cbmZ1bmN0aW9uIHNlcmlhbGl6ZURpY3Rpb25hcnlUeXBlKHNlcmlhbGl6ZXIsIG1hcHBlciwgb2JqZWN0LCBvYmplY3ROYW1lLCBpc1htbCwgb3B0aW9ucykge1xuICAgIGlmICh0eXBlb2Ygb2JqZWN0ICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtvYmplY3ROYW1lfSBtdXN0IGJlIG9mIHR5cGUgb2JqZWN0LmApO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZVR5cGUgPSBtYXBwZXIudHlwZS52YWx1ZTtcbiAgICBpZiAoIXZhbHVlVHlwZSB8fCB0eXBlb2YgdmFsdWVUeXBlICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgXCJ2YWx1ZVwiIG1ldGFkYXRhIGZvciBhIERpY3Rpb25hcnkgbXVzdCBiZSBkZWZpbmVkIGluIHRoZSBgICtcbiAgICAgICAgICAgIGBtYXBwZXIgYW5kIGl0IG11c3Qgb2YgdHlwZSBcIm9iamVjdFwiIGluICR7b2JqZWN0TmFtZX0uYCk7XG4gICAgfVxuICAgIGNvbnN0IHRlbXBEaWN0aW9uYXJ5ID0ge307XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMob2JqZWN0KSkge1xuICAgICAgICBjb25zdCBzZXJpYWxpemVkVmFsdWUgPSBzZXJpYWxpemVyLnNlcmlhbGl6ZSh2YWx1ZVR5cGUsIG9iamVjdFtrZXldLCBvYmplY3ROYW1lLCBvcHRpb25zKTtcbiAgICAgICAgLy8gSWYgdGhlIGVsZW1lbnQgbmVlZHMgYW4gWE1MIG5hbWVzcGFjZSB3ZSBuZWVkIHRvIGFkZCBpdCB3aXRoaW4gdGhlICQgcHJvcGVydHlcbiAgICAgICAgdGVtcERpY3Rpb25hcnlba2V5XSA9IGdldFhtbE9iamVjdFZhbHVlKHZhbHVlVHlwZSwgc2VyaWFsaXplZFZhbHVlLCBpc1htbCwgb3B0aW9ucyk7XG4gICAgfVxuICAgIC8vIEFkZCB0aGUgbmFtZXNwYWNlIHRvIHRoZSByb290IGVsZW1lbnQgaWYgbmVlZGVkXG4gICAgaWYgKGlzWG1sICYmIG1hcHBlci54bWxOYW1lc3BhY2UpIHtcbiAgICAgICAgY29uc3QgeG1sbnNLZXkgPSBtYXBwZXIueG1sTmFtZXNwYWNlUHJlZml4ID8gYHhtbG5zOiR7bWFwcGVyLnhtbE5hbWVzcGFjZVByZWZpeH1gIDogXCJ4bWxuc1wiO1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0ZW1wRGljdGlvbmFyeTtcbiAgICAgICAgcmVzdWx0W2ludGVyZmFjZXNfanNfMS5YTUxfQVRUUktFWV0gPSB7IFt4bWxuc0tleV06IG1hcHBlci54bWxOYW1lc3BhY2UgfTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgcmV0dXJuIHRlbXBEaWN0aW9uYXJ5O1xufVxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgYWRkaXRpb25hbFByb3BlcnRpZXMgcHJvcGVydHkgZnJvbSBhIHJlZmVyZW5jZWQgbWFwcGVyXG4gKiBAcGFyYW0gc2VyaWFsaXplciAtIHRoZSBzZXJpYWxpemVyIGNvbnRhaW5pbmcgdGhlIGVudGlyZSBzZXQgb2YgbWFwcGVyc1xuICogQHBhcmFtIG1hcHBlciAtIHRoZSBjb21wb3NpdGUgbWFwcGVyIHRvIHJlc29sdmVcbiAqIEBwYXJhbSBvYmplY3ROYW1lIC0gbmFtZSBvZiB0aGUgb2JqZWN0IGJlaW5nIHNlcmlhbGl6ZWRcbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZUFkZGl0aW9uYWxQcm9wZXJ0aWVzKHNlcmlhbGl6ZXIsIG1hcHBlciwgb2JqZWN0TmFtZSkge1xuICAgIGNvbnN0IGFkZGl0aW9uYWxQcm9wZXJ0aWVzID0gbWFwcGVyLnR5cGUuYWRkaXRpb25hbFByb3BlcnRpZXM7XG4gICAgaWYgKCFhZGRpdGlvbmFsUHJvcGVydGllcyAmJiBtYXBwZXIudHlwZS5jbGFzc05hbWUpIHtcbiAgICAgICAgY29uc3QgbW9kZWxNYXBwZXIgPSByZXNvbHZlUmVmZXJlbmNlZE1hcHBlcihzZXJpYWxpemVyLCBtYXBwZXIsIG9iamVjdE5hbWUpO1xuICAgICAgICByZXR1cm4gbW9kZWxNYXBwZXIgPT09IG51bGwgfHwgbW9kZWxNYXBwZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG1vZGVsTWFwcGVyLnR5cGUuYWRkaXRpb25hbFByb3BlcnRpZXM7XG4gICAgfVxuICAgIHJldHVybiBhZGRpdGlvbmFsUHJvcGVydGllcztcbn1cbi8qKlxuICogRmluZHMgdGhlIG1hcHBlciByZWZlcmVuY2VkIGJ5IGNsYXNzTmFtZVxuICogQHBhcmFtIHNlcmlhbGl6ZXIgLSB0aGUgc2VyaWFsaXplciBjb250YWluaW5nIHRoZSBlbnRpcmUgc2V0IG9mIG1hcHBlcnNcbiAqIEBwYXJhbSBtYXBwZXIgLSB0aGUgY29tcG9zaXRlIG1hcHBlciB0byByZXNvbHZlXG4gKiBAcGFyYW0gb2JqZWN0TmFtZSAtIG5hbWUgb2YgdGhlIG9iamVjdCBiZWluZyBzZXJpYWxpemVkXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVSZWZlcmVuY2VkTWFwcGVyKHNlcmlhbGl6ZXIsIG1hcHBlciwgb2JqZWN0TmFtZSkge1xuICAgIGNvbnN0IGNsYXNzTmFtZSA9IG1hcHBlci50eXBlLmNsYXNzTmFtZTtcbiAgICBpZiAoIWNsYXNzTmFtZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENsYXNzIG5hbWUgZm9yIG1vZGVsIFwiJHtvYmplY3ROYW1lfVwiIGlzIG5vdCBwcm92aWRlZCBpbiB0aGUgbWFwcGVyIFwiJHtKU09OLnN0cmluZ2lmeShtYXBwZXIsIHVuZGVmaW5lZCwgMil9XCIuYCk7XG4gICAgfVxuICAgIHJldHVybiBzZXJpYWxpemVyLm1vZGVsTWFwcGVyc1tjbGFzc05hbWVdO1xufVxuLyoqXG4gKiBSZXNvbHZlcyBhIGNvbXBvc2l0ZSBtYXBwZXIncyBtb2RlbFByb3BlcnRpZXMuXG4gKiBAcGFyYW0gc2VyaWFsaXplciAtIHRoZSBzZXJpYWxpemVyIGNvbnRhaW5pbmcgdGhlIGVudGlyZSBzZXQgb2YgbWFwcGVyc1xuICogQHBhcmFtIG1hcHBlciAtIHRoZSBjb21wb3NpdGUgbWFwcGVyIHRvIHJlc29sdmVcbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZU1vZGVsUHJvcGVydGllcyhzZXJpYWxpemVyLCBtYXBwZXIsIG9iamVjdE5hbWUpIHtcbiAgICBsZXQgbW9kZWxQcm9wcyA9IG1hcHBlci50eXBlLm1vZGVsUHJvcGVydGllcztcbiAgICBpZiAoIW1vZGVsUHJvcHMpIHtcbiAgICAgICAgY29uc3QgbW9kZWxNYXBwZXIgPSByZXNvbHZlUmVmZXJlbmNlZE1hcHBlcihzZXJpYWxpemVyLCBtYXBwZXIsIG9iamVjdE5hbWUpO1xuICAgICAgICBpZiAoIW1vZGVsTWFwcGVyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYG1hcHBlcigpIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZCBmb3IgbW9kZWwgXCIke21hcHBlci50eXBlLmNsYXNzTmFtZX1cIi5gKTtcbiAgICAgICAgfVxuICAgICAgICBtb2RlbFByb3BzID0gbW9kZWxNYXBwZXIgPT09IG51bGwgfHwgbW9kZWxNYXBwZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG1vZGVsTWFwcGVyLnR5cGUubW9kZWxQcm9wZXJ0aWVzO1xuICAgICAgICBpZiAoIW1vZGVsUHJvcHMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgbW9kZWxQcm9wZXJ0aWVzIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZCBpbiB0aGUgYCArXG4gICAgICAgICAgICAgICAgYG1hcHBlciBcIiR7SlNPTi5zdHJpbmdpZnkobW9kZWxNYXBwZXIpfVwiIG9mIHR5cGUgXCIke21hcHBlci50eXBlLmNsYXNzTmFtZX1cIiBmb3Igb2JqZWN0IFwiJHtvYmplY3ROYW1lfVwiLmApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtb2RlbFByb3BzO1xufVxuZnVuY3Rpb24gc2VyaWFsaXplQ29tcG9zaXRlVHlwZShzZXJpYWxpemVyLCBtYXBwZXIsIG9iamVjdCwgb2JqZWN0TmFtZSwgaXNYbWwsIG9wdGlvbnMpIHtcbiAgICBpZiAoZ2V0UG9seW1vcnBoaWNEaXNjcmltaW5hdG9yUmVjdXJzaXZlbHkoc2VyaWFsaXplciwgbWFwcGVyKSkge1xuICAgICAgICBtYXBwZXIgPSBnZXRQb2x5bW9ycGhpY01hcHBlcihzZXJpYWxpemVyLCBtYXBwZXIsIG9iamVjdCwgXCJjbGllbnROYW1lXCIpO1xuICAgIH1cbiAgICBpZiAob2JqZWN0ICE9PSB1bmRlZmluZWQgJiYgb2JqZWN0ICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSB7fTtcbiAgICAgICAgY29uc3QgbW9kZWxQcm9wcyA9IHJlc29sdmVNb2RlbFByb3BlcnRpZXMoc2VyaWFsaXplciwgbWFwcGVyLCBvYmplY3ROYW1lKTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMobW9kZWxQcm9wcykpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5TWFwcGVyID0gbW9kZWxQcm9wc1trZXldO1xuICAgICAgICAgICAgaWYgKHByb3BlcnR5TWFwcGVyLnJlYWRPbmx5KSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgcHJvcE5hbWU7XG4gICAgICAgICAgICBsZXQgcGFyZW50T2JqZWN0ID0gcGF5bG9hZDtcbiAgICAgICAgICAgIGlmIChzZXJpYWxpemVyLmlzWE1MKSB7XG4gICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5TWFwcGVyLnhtbElzV3JhcHBlZCkge1xuICAgICAgICAgICAgICAgICAgICBwcm9wTmFtZSA9IHByb3BlcnR5TWFwcGVyLnhtbE5hbWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwcm9wTmFtZSA9IHByb3BlcnR5TWFwcGVyLnhtbEVsZW1lbnROYW1lIHx8IHByb3BlcnR5TWFwcGVyLnhtbE5hbWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGF0aHMgPSBzcGxpdFNlcmlhbGl6ZU5hbWUocHJvcGVydHlNYXBwZXIuc2VyaWFsaXplZE5hbWUpO1xuICAgICAgICAgICAgICAgIHByb3BOYW1lID0gcGF0aHMucG9wKCk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBwYXRoTmFtZSBvZiBwYXRocykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZE9iamVjdCA9IHBhcmVudE9iamVjdFtwYXRoTmFtZV07XG4gICAgICAgICAgICAgICAgICAgIGlmICgoY2hpbGRPYmplY3QgPT09IHVuZGVmaW5lZCB8fCBjaGlsZE9iamVjdCA9PT0gbnVsbCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICgob2JqZWN0W2tleV0gIT09IHVuZGVmaW5lZCAmJiBvYmplY3Rba2V5XSAhPT0gbnVsbCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU1hcHBlci5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE9iamVjdFtwYXRoTmFtZV0gPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRPYmplY3QgPSBwYXJlbnRPYmplY3RbcGF0aE5hbWVdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwYXJlbnRPYmplY3QgIT09IHVuZGVmaW5lZCAmJiBwYXJlbnRPYmplY3QgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNYbWwgJiYgbWFwcGVyLnhtbE5hbWVzcGFjZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB4bWxuc0tleSA9IG1hcHBlci54bWxOYW1lc3BhY2VQcmVmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgID8gYHhtbG5zOiR7bWFwcGVyLnhtbE5hbWVzcGFjZVByZWZpeH1gXG4gICAgICAgICAgICAgICAgICAgICAgICA6IFwieG1sbnNcIjtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50T2JqZWN0W2ludGVyZmFjZXNfanNfMS5YTUxfQVRUUktFWV0gPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHBhcmVudE9iamVjdFtpbnRlcmZhY2VzX2pzXzEuWE1MX0FUVFJLRVldKSwgeyBbeG1sbnNLZXldOiBtYXBwZXIueG1sTmFtZXNwYWNlIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wZXJ0eU9iamVjdE5hbWUgPSBwcm9wZXJ0eU1hcHBlci5zZXJpYWxpemVkTmFtZSAhPT0gXCJcIlxuICAgICAgICAgICAgICAgICAgICA/IG9iamVjdE5hbWUgKyBcIi5cIiArIHByb3BlcnR5TWFwcGVyLnNlcmlhbGl6ZWROYW1lXG4gICAgICAgICAgICAgICAgICAgIDogb2JqZWN0TmFtZTtcbiAgICAgICAgICAgICAgICBsZXQgdG9TZXJpYWxpemUgPSBvYmplY3Rba2V5XTtcbiAgICAgICAgICAgICAgICBjb25zdCBwb2x5bW9ycGhpY0Rpc2NyaW1pbmF0b3IgPSBnZXRQb2x5bW9ycGhpY0Rpc2NyaW1pbmF0b3JSZWN1cnNpdmVseShzZXJpYWxpemVyLCBtYXBwZXIpO1xuICAgICAgICAgICAgICAgIGlmIChwb2x5bW9ycGhpY0Rpc2NyaW1pbmF0b3IgJiZcbiAgICAgICAgICAgICAgICAgICAgcG9seW1vcnBoaWNEaXNjcmltaW5hdG9yLmNsaWVudE5hbWUgPT09IGtleSAmJlxuICAgICAgICAgICAgICAgICAgICAodG9TZXJpYWxpemUgPT09IHVuZGVmaW5lZCB8fCB0b1NlcmlhbGl6ZSA9PT0gbnVsbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9TZXJpYWxpemUgPSBtYXBwZXIuc2VyaWFsaXplZE5hbWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHNlcmlhbGl6ZWRWYWx1ZSA9IHNlcmlhbGl6ZXIuc2VyaWFsaXplKHByb3BlcnR5TWFwcGVyLCB0b1NlcmlhbGl6ZSwgcHJvcGVydHlPYmplY3ROYW1lLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICBpZiAoc2VyaWFsaXplZFZhbHVlICE9PSB1bmRlZmluZWQgJiYgcHJvcE5hbWUgIT09IHVuZGVmaW5lZCAmJiBwcm9wTmFtZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGdldFhtbE9iamVjdFZhbHVlKHByb3BlcnR5TWFwcGVyLCBzZXJpYWxpemVkVmFsdWUsIGlzWG1sLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzWG1sICYmIHByb3BlcnR5TWFwcGVyLnhtbElzQXR0cmlidXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBYTUxfQVRUUktFWSwgaS5lLiwgJCBpcyB0aGUga2V5IGF0dHJpYnV0ZXMgYXJlIGtlcHQgdW5kZXIgaW4geG1sMmpzLlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBrZWVwcyB0aGluZ3Mgc2ltcGxlIHdoaWxlIHByZXZlbnRpbmcgbmFtZSBjb2xsaXNpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpdGggbmFtZXMgaW4gdXNlciBkb2N1bWVudHMuXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRPYmplY3RbaW50ZXJmYWNlc19qc18xLlhNTF9BVFRSS0VZXSA9IHBhcmVudE9iamVjdFtpbnRlcmZhY2VzX2pzXzEuWE1MX0FUVFJLRVldIHx8IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50T2JqZWN0W2ludGVyZmFjZXNfanNfMS5YTUxfQVRUUktFWV1bcHJvcE5hbWVdID0gc2VyaWFsaXplZFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzWG1sICYmIHByb3BlcnR5TWFwcGVyLnhtbElzV3JhcHBlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50T2JqZWN0W3Byb3BOYW1lXSA9IHsgW3Byb3BlcnR5TWFwcGVyLnhtbEVsZW1lbnROYW1lXTogdmFsdWUgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE9iamVjdFtwcm9wTmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhZGRpdGlvbmFsUHJvcGVydGllc01hcHBlciA9IHJlc29sdmVBZGRpdGlvbmFsUHJvcGVydGllcyhzZXJpYWxpemVyLCBtYXBwZXIsIG9iamVjdE5hbWUpO1xuICAgICAgICBpZiAoYWRkaXRpb25hbFByb3BlcnRpZXNNYXBwZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BOYW1lcyA9IE9iamVjdC5rZXlzKG1vZGVsUHJvcHMpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBjbGllbnRQcm9wTmFtZSBpbiBvYmplY3QpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0FkZGl0aW9uYWxQcm9wZXJ0eSA9IHByb3BOYW1lcy5ldmVyeSgocG4pID0+IHBuICE9PSBjbGllbnRQcm9wTmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKGlzQWRkaXRpb25hbFByb3BlcnR5KSB7XG4gICAgICAgICAgICAgICAgICAgIHBheWxvYWRbY2xpZW50UHJvcE5hbWVdID0gc2VyaWFsaXplci5zZXJpYWxpemUoYWRkaXRpb25hbFByb3BlcnRpZXNNYXBwZXIsIG9iamVjdFtjbGllbnRQcm9wTmFtZV0sIG9iamVjdE5hbWUgKyAnW1wiJyArIGNsaWVudFByb3BOYW1lICsgJ1wiXScsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdDtcbn1cbmZ1bmN0aW9uIGdldFhtbE9iamVjdFZhbHVlKHByb3BlcnR5TWFwcGVyLCBzZXJpYWxpemVkVmFsdWUsIGlzWG1sLCBvcHRpb25zKSB7XG4gICAgaWYgKCFpc1htbCB8fCAhcHJvcGVydHlNYXBwZXIueG1sTmFtZXNwYWNlKSB7XG4gICAgICAgIHJldHVybiBzZXJpYWxpemVkVmFsdWU7XG4gICAgfVxuICAgIGNvbnN0IHhtbG5zS2V5ID0gcHJvcGVydHlNYXBwZXIueG1sTmFtZXNwYWNlUHJlZml4XG4gICAgICAgID8gYHhtbG5zOiR7cHJvcGVydHlNYXBwZXIueG1sTmFtZXNwYWNlUHJlZml4fWBcbiAgICAgICAgOiBcInhtbG5zXCI7XG4gICAgY29uc3QgeG1sTmFtZXNwYWNlID0geyBbeG1sbnNLZXldOiBwcm9wZXJ0eU1hcHBlci54bWxOYW1lc3BhY2UgfTtcbiAgICBpZiAoW1wiQ29tcG9zaXRlXCJdLmluY2x1ZGVzKHByb3BlcnR5TWFwcGVyLnR5cGUubmFtZSkpIHtcbiAgICAgICAgaWYgKHNlcmlhbGl6ZWRWYWx1ZVtpbnRlcmZhY2VzX2pzXzEuWE1MX0FUVFJLRVldKSB7XG4gICAgICAgICAgICByZXR1cm4gc2VyaWFsaXplZFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gT2JqZWN0LmFzc2lnbih7fSwgc2VyaWFsaXplZFZhbHVlKTtcbiAgICAgICAgICAgIHJlc3VsdFtpbnRlcmZhY2VzX2pzXzEuWE1MX0FUVFJLRVldID0geG1sTmFtZXNwYWNlO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICByZXN1bHRbb3B0aW9ucy54bWwueG1sQ2hhcktleV0gPSBzZXJpYWxpemVkVmFsdWU7XG4gICAgcmVzdWx0W2ludGVyZmFjZXNfanNfMS5YTUxfQVRUUktFWV0gPSB4bWxOYW1lc3BhY2U7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIGlzU3BlY2lhbFhtbFByb3BlcnR5KHByb3BlcnR5TmFtZSwgb3B0aW9ucykge1xuICAgIHJldHVybiBbaW50ZXJmYWNlc19qc18xLlhNTF9BVFRSS0VZLCBvcHRpb25zLnhtbC54bWxDaGFyS2V5XS5pbmNsdWRlcyhwcm9wZXJ0eU5hbWUpO1xufVxuZnVuY3Rpb24gZGVzZXJpYWxpemVDb21wb3NpdGVUeXBlKHNlcmlhbGl6ZXIsIG1hcHBlciwgcmVzcG9uc2VCb2R5LCBvYmplY3ROYW1lLCBvcHRpb25zKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICBjb25zdCB4bWxDaGFyS2V5ID0gKF9hID0gb3B0aW9ucy54bWwueG1sQ2hhcktleSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogaW50ZXJmYWNlc19qc18xLlhNTF9DSEFSS0VZO1xuICAgIGlmIChnZXRQb2x5bW9ycGhpY0Rpc2NyaW1pbmF0b3JSZWN1cnNpdmVseShzZXJpYWxpemVyLCBtYXBwZXIpKSB7XG4gICAgICAgIG1hcHBlciA9IGdldFBvbHltb3JwaGljTWFwcGVyKHNlcmlhbGl6ZXIsIG1hcHBlciwgcmVzcG9uc2VCb2R5LCBcInNlcmlhbGl6ZWROYW1lXCIpO1xuICAgIH1cbiAgICBjb25zdCBtb2RlbFByb3BzID0gcmVzb2x2ZU1vZGVsUHJvcGVydGllcyhzZXJpYWxpemVyLCBtYXBwZXIsIG9iamVjdE5hbWUpO1xuICAgIGxldCBpbnN0YW5jZSA9IHt9O1xuICAgIGNvbnN0IGhhbmRsZWRQcm9wZXJ0eU5hbWVzID0gW107XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMobW9kZWxQcm9wcykpIHtcbiAgICAgICAgY29uc3QgcHJvcGVydHlNYXBwZXIgPSBtb2RlbFByb3BzW2tleV07XG4gICAgICAgIGNvbnN0IHBhdGhzID0gc3BsaXRTZXJpYWxpemVOYW1lKG1vZGVsUHJvcHNba2V5XS5zZXJpYWxpemVkTmFtZSk7XG4gICAgICAgIGhhbmRsZWRQcm9wZXJ0eU5hbWVzLnB1c2gocGF0aHNbMF0pO1xuICAgICAgICBjb25zdCB7IHNlcmlhbGl6ZWROYW1lLCB4bWxOYW1lLCB4bWxFbGVtZW50TmFtZSB9ID0gcHJvcGVydHlNYXBwZXI7XG4gICAgICAgIGxldCBwcm9wZXJ0eU9iamVjdE5hbWUgPSBvYmplY3ROYW1lO1xuICAgICAgICBpZiAoc2VyaWFsaXplZE5hbWUgIT09IFwiXCIgJiYgc2VyaWFsaXplZE5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcHJvcGVydHlPYmplY3ROYW1lID0gb2JqZWN0TmFtZSArIFwiLlwiICsgc2VyaWFsaXplZE5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaGVhZGVyQ29sbGVjdGlvblByZWZpeCA9IHByb3BlcnR5TWFwcGVyLmhlYWRlckNvbGxlY3Rpb25QcmVmaXg7XG4gICAgICAgIGlmIChoZWFkZXJDb2xsZWN0aW9uUHJlZml4KSB7XG4gICAgICAgICAgICBjb25zdCBkaWN0aW9uYXJ5ID0ge307XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGhlYWRlcktleSBvZiBPYmplY3Qua2V5cyhyZXNwb25zZUJvZHkpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhlYWRlcktleS5zdGFydHNXaXRoKGhlYWRlckNvbGxlY3Rpb25QcmVmaXgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRpY3Rpb25hcnlbaGVhZGVyS2V5LnN1YnN0cmluZyhoZWFkZXJDb2xsZWN0aW9uUHJlZml4Lmxlbmd0aCldID0gc2VyaWFsaXplci5kZXNlcmlhbGl6ZShwcm9wZXJ0eU1hcHBlci50eXBlLnZhbHVlLCByZXNwb25zZUJvZHlbaGVhZGVyS2V5XSwgcHJvcGVydHlPYmplY3ROYW1lLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaGFuZGxlZFByb3BlcnR5TmFtZXMucHVzaChoZWFkZXJLZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW5zdGFuY2Vba2V5XSA9IGRpY3Rpb25hcnk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc2VyaWFsaXplci5pc1hNTCkge1xuICAgICAgICAgICAgaWYgKHByb3BlcnR5TWFwcGVyLnhtbElzQXR0cmlidXRlICYmIHJlc3BvbnNlQm9keVtpbnRlcmZhY2VzX2pzXzEuWE1MX0FUVFJLRVldKSB7XG4gICAgICAgICAgICAgICAgaW5zdGFuY2Vba2V5XSA9IHNlcmlhbGl6ZXIuZGVzZXJpYWxpemUocHJvcGVydHlNYXBwZXIsIHJlc3BvbnNlQm9keVtpbnRlcmZhY2VzX2pzXzEuWE1MX0FUVFJLRVldW3htbE5hbWVdLCBwcm9wZXJ0eU9iamVjdE5hbWUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAocHJvcGVydHlNYXBwZXIueG1sSXNNc1RleHQpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2VCb2R5W3htbENoYXJLZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2Vba2V5XSA9IHJlc3BvbnNlQm9keVt4bWxDaGFyS2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIHJlc3BvbnNlQm9keSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICAvLyBUaGUgc3BlY2lhbCBjYXNlIHdoZXJlIHhtbCBwYXJzZXIgcGFyc2VzIFwiPE5hbWU+Y29udGVudDwvTmFtZT5cIiBpbnRvIEpTT04gb2ZcbiAgICAgICAgICAgICAgICAgICAgLy8gICBgeyBuYW1lOiBcImNvbnRlbnRcIn1gIGluc3RlYWQgb2YgYHsgbmFtZTogeyBcIl9cIjogXCJjb250ZW50XCIgfX1gXG4gICAgICAgICAgICAgICAgICAgIGluc3RhbmNlW2tleV0gPSByZXNwb25zZUJvZHk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvcGVydHlOYW1lID0geG1sRWxlbWVudE5hbWUgfHwgeG1sTmFtZSB8fCBzZXJpYWxpemVkTmFtZTtcbiAgICAgICAgICAgICAgICBpZiAocHJvcGVydHlNYXBwZXIueG1sSXNXcmFwcGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIC8qIGEgbGlzdCBvZiA8eG1sRWxlbWVudE5hbWU+IHdyYXBwZWQgYnkgPHhtbE5hbWU+XG4gICAgICAgICAgICAgICAgICAgICAgRm9yIHRoZSB4bWwgZXhhbXBsZSBiZWxvd1xuICAgICAgICAgICAgICAgICAgICAgICAgPENvcnM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxDb3JzUnVsZT4uLi48L0NvcnNSdWxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8Q29yc1J1bGU+Li4uPC9Db3JzUnVsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQ29ycz5cbiAgICAgICAgICAgICAgICAgICAgICB0aGUgcmVzcG9uc2VCb2R5IGhhc1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBDb3JzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29yc1J1bGU6IFt7Li4ufSwgey4uLn1dXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB4bWxOYW1lIGlzIFwiQ29yc1wiIGFuZCB4bWxFbGVtZW50TmFtZSBpc1wiQ29yc1J1bGVcIi5cbiAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgd3JhcHBlZCA9IHJlc3BvbnNlQm9keVt4bWxOYW1lXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudExpc3QgPSAoX2IgPSB3cmFwcGVkID09PSBudWxsIHx8IHdyYXBwZWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHdyYXBwZWRbeG1sRWxlbWVudE5hbWVdKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBbXTtcbiAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2Vba2V5XSA9IHNlcmlhbGl6ZXIuZGVzZXJpYWxpemUocHJvcGVydHlNYXBwZXIsIGVsZW1lbnRMaXN0LCBwcm9wZXJ0eU9iamVjdE5hbWUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBoYW5kbGVkUHJvcGVydHlOYW1lcy5wdXNoKHhtbE5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvcGVydHkgPSByZXNwb25zZUJvZHlbcHJvcGVydHlOYW1lXTtcbiAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2Vba2V5XSA9IHNlcmlhbGl6ZXIuZGVzZXJpYWxpemUocHJvcGVydHlNYXBwZXIsIHByb3BlcnR5LCBwcm9wZXJ0eU9iamVjdE5hbWUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBoYW5kbGVkUHJvcGVydHlOYW1lcy5wdXNoKHByb3BlcnR5TmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gZGVzZXJpYWxpemUgdGhlIHByb3BlcnR5IGlmIGl0IGlzIHByZXNlbnQgaW4gdGhlIHByb3ZpZGVkIHJlc3BvbnNlQm9keSBpbnN0YW5jZVxuICAgICAgICAgICAgbGV0IHByb3BlcnR5SW5zdGFuY2U7XG4gICAgICAgICAgICBsZXQgcmVzID0gcmVzcG9uc2VCb2R5O1xuICAgICAgICAgICAgLy8gdHJhdmVyc2luZyB0aGUgb2JqZWN0IHN0ZXAgYnkgc3RlcC5cbiAgICAgICAgICAgIGxldCBzdGVwcyA9IDA7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgcGF0aHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXJlcylcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgc3RlcHMrKztcbiAgICAgICAgICAgICAgICByZXMgPSByZXNbaXRlbV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBvbmx5IGFjY2VwdCBudWxsIHdoZW4gcmVhY2hpbmcgdGhlIGxhc3QgcG9zaXRpb24gb2Ygb2JqZWN0IG90aGVyd2lzZSBpdCB3b3VsZCBiZSB1bmRlZmluZWRcbiAgICAgICAgICAgIGlmIChyZXMgPT09IG51bGwgJiYgc3RlcHMgPCBwYXRocy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXMgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcm9wZXJ0eUluc3RhbmNlID0gcmVzO1xuICAgICAgICAgICAgY29uc3QgcG9seW1vcnBoaWNEaXNjcmltaW5hdG9yID0gbWFwcGVyLnR5cGUucG9seW1vcnBoaWNEaXNjcmltaW5hdG9yO1xuICAgICAgICAgICAgLy8gY2hlY2tpbmcgdGhhdCB0aGUgbW9kZWwgcHJvcGVydHkgbmFtZSAoa2V5KShleDogXCJmaXNodHlwZVwiKSBhbmQgdGhlXG4gICAgICAgICAgICAvLyBjbGllbnROYW1lIG9mIHRoZSBwb2x5bW9ycGhpY0Rpc2NyaW1pbmF0b3Ige21ldGFkYXRhfSAoZXg6IFwiZmlzaHR5cGVcIilcbiAgICAgICAgICAgIC8vIGluc3RlYWQgb2YgdGhlIHNlcmlhbGl6ZWROYW1lIG9mIHRoZSBwb2x5bW9ycGhpY0Rpc2NyaW1pbmF0b3IgKGV4OiBcImZpc2gudHlwZVwiKVxuICAgICAgICAgICAgLy8gaXMgYSBiZXR0ZXIgYXBwcm9hY2guIFRoZSBnZW5lcmF0b3IgaXMgbm90IGNvbnNpc3RlbnQgd2l0aCBlc2NhcGluZyAnXFwuJyBpbiB0aGVcbiAgICAgICAgICAgIC8vIHNlcmlhbGl6ZWROYW1lIG9mIHRoZSBwcm9wZXJ0eSAoZXg6IFwiZmlzaFxcLnR5cGVcIikgdGhhdCBpcyBtYXJrZWQgYXMgcG9seW1vcnBoaWMgZGlzY3JpbWluYXRvclxuICAgICAgICAgICAgLy8gYW5kIHRoZSBzZXJpYWxpemVkTmFtZSBvZiB0aGUgbWV0YWRhdGEgcG9seW1vcnBoaWNEaXNjcmltaW5hdG9yIChleDogXCJmaXNoLnR5cGVcIikuIEhvd2V2ZXIsXG4gICAgICAgICAgICAvLyB0aGUgY2xpZW50TmFtZSB0cmFuc2Zvcm1hdGlvbiBvZiB0aGUgcG9seW1vcnBoaWNEaXNjcmltaW5hdG9yIChleDogXCJmaXNodHlwZVwiKSBhbmRcbiAgICAgICAgICAgIC8vIHRoZSB0cmFuc2Zvcm1hdGlvbiBvZiBtb2RlbCBwcm9wZXJ0eSBuYW1lIChleDogXCJmaXNodHlwZVwiKSBpcyBkb25lIGNvbnNpc3RlbnRseS5cbiAgICAgICAgICAgIC8vIEhlbmNlLCBpdCBpcyBhIHNhZmVyIGJldCB0byByZWx5IG9uIHRoZSBjbGllbnROYW1lIG9mIHRoZSBwb2x5bW9ycGhpY0Rpc2NyaW1pbmF0b3IuXG4gICAgICAgICAgICBpZiAocG9seW1vcnBoaWNEaXNjcmltaW5hdG9yICYmXG4gICAgICAgICAgICAgICAga2V5ID09PSBwb2x5bW9ycGhpY0Rpc2NyaW1pbmF0b3IuY2xpZW50TmFtZSAmJlxuICAgICAgICAgICAgICAgIChwcm9wZXJ0eUluc3RhbmNlID09PSB1bmRlZmluZWQgfHwgcHJvcGVydHlJbnN0YW5jZSA9PT0gbnVsbCkpIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eUluc3RhbmNlID0gbWFwcGVyLnNlcmlhbGl6ZWROYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHNlcmlhbGl6ZWRWYWx1ZTtcbiAgICAgICAgICAgIC8vIHBhZ2luZ1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzcG9uc2VCb2R5W2tleV0pICYmIG1vZGVsUHJvcHNba2V5XS5zZXJpYWxpemVkTmFtZSA9PT0gXCJcIikge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5SW5zdGFuY2UgPSByZXNwb25zZUJvZHlba2V5XTtcbiAgICAgICAgICAgICAgICBjb25zdCBhcnJheUluc3RhbmNlID0gc2VyaWFsaXplci5kZXNlcmlhbGl6ZShwcm9wZXJ0eU1hcHBlciwgcHJvcGVydHlJbnN0YW5jZSwgcHJvcGVydHlPYmplY3ROYW1lLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAvLyBDb3B5IG92ZXIgYW55IHByb3BlcnRpZXMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBhZGRlZCBpbnRvIHRoZSBpbnN0YW5jZSwgd2hlcmUgdGhleSBkb1xuICAgICAgICAgICAgICAgIC8vIG5vdCBleGlzdCBvbiB0aGUgbmV3bHkgZGUtc2VyaWFsaXplZCBhcnJheVxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKGluc3RhbmNlKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhcnJheUluc3RhbmNlLCBrKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlJbnN0YW5jZVtrXSA9IHY7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaW5zdGFuY2UgPSBhcnJheUluc3RhbmNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAocHJvcGVydHlJbnN0YW5jZSAhPT0gdW5kZWZpbmVkIHx8IHByb3BlcnR5TWFwcGVyLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZFZhbHVlID0gc2VyaWFsaXplci5kZXNlcmlhbGl6ZShwcm9wZXJ0eU1hcHBlciwgcHJvcGVydHlJbnN0YW5jZSwgcHJvcGVydHlPYmplY3ROYW1lLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICBpbnN0YW5jZVtrZXldID0gc2VyaWFsaXplZFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGFkZGl0aW9uYWxQcm9wZXJ0aWVzTWFwcGVyID0gbWFwcGVyLnR5cGUuYWRkaXRpb25hbFByb3BlcnRpZXM7XG4gICAgaWYgKGFkZGl0aW9uYWxQcm9wZXJ0aWVzTWFwcGVyKSB7XG4gICAgICAgIGNvbnN0IGlzQWRkaXRpb25hbFByb3BlcnR5ID0gKHJlc3BvbnNlUHJvcE5hbWUpID0+IHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY2xpZW50UHJvcE5hbWUgaW4gbW9kZWxQcm9wcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGhzID0gc3BsaXRTZXJpYWxpemVOYW1lKG1vZGVsUHJvcHNbY2xpZW50UHJvcE5hbWVdLnNlcmlhbGl6ZWROYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAocGF0aHNbMF0gPT09IHJlc3BvbnNlUHJvcE5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9O1xuICAgICAgICBmb3IgKGNvbnN0IHJlc3BvbnNlUHJvcE5hbWUgaW4gcmVzcG9uc2VCb2R5KSB7XG4gICAgICAgICAgICBpZiAoaXNBZGRpdGlvbmFsUHJvcGVydHkocmVzcG9uc2VQcm9wTmFtZSkpIHtcbiAgICAgICAgICAgICAgICBpbnN0YW5jZVtyZXNwb25zZVByb3BOYW1lXSA9IHNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoYWRkaXRpb25hbFByb3BlcnRpZXNNYXBwZXIsIHJlc3BvbnNlQm9keVtyZXNwb25zZVByb3BOYW1lXSwgb2JqZWN0TmFtZSArICdbXCInICsgcmVzcG9uc2VQcm9wTmFtZSArICdcIl0nLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChyZXNwb25zZUJvZHkgJiYgIW9wdGlvbnMuaWdub3JlVW5rbm93blByb3BlcnRpZXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocmVzcG9uc2VCb2R5KSkge1xuICAgICAgICAgICAgaWYgKGluc3RhbmNlW2tleV0gPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICFoYW5kbGVkUHJvcGVydHlOYW1lcy5pbmNsdWRlcyhrZXkpICYmXG4gICAgICAgICAgICAgICAgIWlzU3BlY2lhbFhtbFByb3BlcnR5KGtleSwgb3B0aW9ucykpIHtcbiAgICAgICAgICAgICAgICBpbnN0YW5jZVtrZXldID0gcmVzcG9uc2VCb2R5W2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGluc3RhbmNlO1xufVxuZnVuY3Rpb24gZGVzZXJpYWxpemVEaWN0aW9uYXJ5VHlwZShzZXJpYWxpemVyLCBtYXBwZXIsIHJlc3BvbnNlQm9keSwgb2JqZWN0TmFtZSwgb3B0aW9ucykge1xuICAgIC8qIGpzaGludCB2YWxpZHRoaXM6IHRydWUgKi9cbiAgICBjb25zdCB2YWx1ZSA9IG1hcHBlci50eXBlLnZhbHVlO1xuICAgIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgXCJ2YWx1ZVwiIG1ldGFkYXRhIGZvciBhIERpY3Rpb25hcnkgbXVzdCBiZSBkZWZpbmVkIGluIHRoZSBgICtcbiAgICAgICAgICAgIGBtYXBwZXIgYW5kIGl0IG11c3Qgb2YgdHlwZSBcIm9iamVjdFwiIGluICR7b2JqZWN0TmFtZX1gKTtcbiAgICB9XG4gICAgaWYgKHJlc3BvbnNlQm9keSkge1xuICAgICAgICBjb25zdCB0ZW1wRGljdGlvbmFyeSA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhyZXNwb25zZUJvZHkpKSB7XG4gICAgICAgICAgICB0ZW1wRGljdGlvbmFyeVtrZXldID0gc2VyaWFsaXplci5kZXNlcmlhbGl6ZSh2YWx1ZSwgcmVzcG9uc2VCb2R5W2tleV0sIG9iamVjdE5hbWUsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0ZW1wRGljdGlvbmFyeTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3BvbnNlQm9keTtcbn1cbmZ1bmN0aW9uIGRlc2VyaWFsaXplU2VxdWVuY2VUeXBlKHNlcmlhbGl6ZXIsIG1hcHBlciwgcmVzcG9uc2VCb2R5LCBvYmplY3ROYW1lLCBvcHRpb25zKSB7XG4gICAgdmFyIF9hO1xuICAgIGxldCBlbGVtZW50ID0gbWFwcGVyLnR5cGUuZWxlbWVudDtcbiAgICBpZiAoIWVsZW1lbnQgfHwgdHlwZW9mIGVsZW1lbnQgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBlbGVtZW50XCIgbWV0YWRhdGEgZm9yIGFuIEFycmF5IG11c3QgYmUgZGVmaW5lZCBpbiB0aGUgYCArXG4gICAgICAgICAgICBgbWFwcGVyIGFuZCBpdCBtdXN0IG9mIHR5cGUgXCJvYmplY3RcIiBpbiAke29iamVjdE5hbWV9YCk7XG4gICAgfVxuICAgIGlmIChyZXNwb25zZUJvZHkpIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJlc3BvbnNlQm9keSkpIHtcbiAgICAgICAgICAgIC8vIHhtbDJqcyB3aWxsIGludGVycHJldCBhIHNpbmdsZSBlbGVtZW50IGFycmF5IGFzIGp1c3QgdGhlIGVsZW1lbnQsIHNvIGZvcmNlIGl0IHRvIGJlIGFuIGFycmF5XG4gICAgICAgICAgICByZXNwb25zZUJvZHkgPSBbcmVzcG9uc2VCb2R5XTtcbiAgICAgICAgfVxuICAgICAgICAvLyBRdWlyazogQ29tcG9zaXRlIG1hcHBlcnMgcmVmZXJlbmNlZCBieSBgZWxlbWVudGAgbWlnaHRcbiAgICAgICAgLy8gbm90IGhhdmUgKmFsbCogcHJvcGVydGllcyBkZWNsYXJlZCAobGlrZSB1YmVyUGFyZW50KSxcbiAgICAgICAgLy8gc28gbGV0J3MgdHJ5IHRvIGxvb2sgdXAgdGhlIGZ1bGwgZGVmaW5pdGlvbiBieSBuYW1lLlxuICAgICAgICBpZiAoZWxlbWVudC50eXBlLm5hbWUgPT09IFwiQ29tcG9zaXRlXCIgJiYgZWxlbWVudC50eXBlLmNsYXNzTmFtZSkge1xuICAgICAgICAgICAgZWxlbWVudCA9IChfYSA9IHNlcmlhbGl6ZXIubW9kZWxNYXBwZXJzW2VsZW1lbnQudHlwZS5jbGFzc05hbWVdKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBlbGVtZW50O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRlbXBBcnJheSA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc3BvbnNlQm9keS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGVtcEFycmF5W2ldID0gc2VyaWFsaXplci5kZXNlcmlhbGl6ZShlbGVtZW50LCByZXNwb25zZUJvZHlbaV0sIGAke29iamVjdE5hbWV9WyR7aX1dYCwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRlbXBBcnJheTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3BvbnNlQm9keTtcbn1cbmZ1bmN0aW9uIGdldEluZGV4RGlzY3JpbWluYXRvcihkaXNjcmltaW5hdG9ycywgZGlzY3JpbWluYXRvclZhbHVlLCB0eXBlTmFtZSkge1xuICAgIGNvbnN0IHR5cGVOYW1lc1RvQ2hlY2sgPSBbdHlwZU5hbWVdO1xuICAgIHdoaWxlICh0eXBlTmFtZXNUb0NoZWNrLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBjdXJyZW50TmFtZSA9IHR5cGVOYW1lc1RvQ2hlY2suc2hpZnQoKTtcbiAgICAgICAgY29uc3QgaW5kZXhEaXNjcmltaW5hdG9yID0gZGlzY3JpbWluYXRvclZhbHVlID09PSBjdXJyZW50TmFtZVxuICAgICAgICAgICAgPyBkaXNjcmltaW5hdG9yVmFsdWVcbiAgICAgICAgICAgIDogY3VycmVudE5hbWUgKyBcIi5cIiArIGRpc2NyaW1pbmF0b3JWYWx1ZTtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkaXNjcmltaW5hdG9ycywgaW5kZXhEaXNjcmltaW5hdG9yKSkge1xuICAgICAgICAgICAgcmV0dXJuIGRpc2NyaW1pbmF0b3JzW2luZGV4RGlzY3JpbWluYXRvcl07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtuYW1lLCBtYXBwZXJdIG9mIE9iamVjdC5lbnRyaWVzKGRpc2NyaW1pbmF0b3JzKSkge1xuICAgICAgICAgICAgICAgIGlmIChuYW1lLnN0YXJ0c1dpdGgoY3VycmVudE5hbWUgKyBcIi5cIikgJiZcbiAgICAgICAgICAgICAgICAgICAgbWFwcGVyLnR5cGUudWJlclBhcmVudCA9PT0gY3VycmVudE5hbWUgJiZcbiAgICAgICAgICAgICAgICAgICAgbWFwcGVyLnR5cGUuY2xhc3NOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGVOYW1lc1RvQ2hlY2sucHVzaChtYXBwZXIudHlwZS5jbGFzc05hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gZ2V0UG9seW1vcnBoaWNNYXBwZXIoc2VyaWFsaXplciwgbWFwcGVyLCBvYmplY3QsIHBvbHltb3JwaGljUHJvcGVydHlOYW1lKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IHBvbHltb3JwaGljRGlzY3JpbWluYXRvciA9IGdldFBvbHltb3JwaGljRGlzY3JpbWluYXRvclJlY3Vyc2l2ZWx5KHNlcmlhbGl6ZXIsIG1hcHBlcik7XG4gICAgaWYgKHBvbHltb3JwaGljRGlzY3JpbWluYXRvcikge1xuICAgICAgICBsZXQgZGlzY3JpbWluYXRvck5hbWUgPSBwb2x5bW9ycGhpY0Rpc2NyaW1pbmF0b3JbcG9seW1vcnBoaWNQcm9wZXJ0eU5hbWVdO1xuICAgICAgICBpZiAoZGlzY3JpbWluYXRvck5hbWUpIHtcbiAgICAgICAgICAgIC8vIFRoZSBzZXJpYWxpemVkTmFtZSBtaWdodCBoYXZlIFxcXFwsIHdoaWNoIHdlIGp1c3Qgd2FudCB0byBpZ25vcmVcbiAgICAgICAgICAgIGlmIChwb2x5bW9ycGhpY1Byb3BlcnR5TmFtZSA9PT0gXCJzZXJpYWxpemVkTmFtZVwiKSB7XG4gICAgICAgICAgICAgICAgZGlzY3JpbWluYXRvck5hbWUgPSBkaXNjcmltaW5hdG9yTmFtZS5yZXBsYWNlKC9cXFxcL2dpLCBcIlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRpc2NyaW1pbmF0b3JWYWx1ZSA9IG9iamVjdFtkaXNjcmltaW5hdG9yTmFtZV07XG4gICAgICAgICAgICBjb25zdCB0eXBlTmFtZSA9IChfYSA9IG1hcHBlci50eXBlLnViZXJQYXJlbnQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IG1hcHBlci50eXBlLmNsYXNzTmFtZTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZGlzY3JpbWluYXRvclZhbHVlID09PSBcInN0cmluZ1wiICYmIHR5cGVOYW1lKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcG9seW1vcnBoaWNNYXBwZXIgPSBnZXRJbmRleERpc2NyaW1pbmF0b3Ioc2VyaWFsaXplci5tb2RlbE1hcHBlcnMuZGlzY3JpbWluYXRvcnMsIGRpc2NyaW1pbmF0b3JWYWx1ZSwgdHlwZU5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChwb2x5bW9ycGhpY01hcHBlcikge1xuICAgICAgICAgICAgICAgICAgICBtYXBwZXIgPSBwb2x5bW9ycGhpY01hcHBlcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hcHBlcjtcbn1cbmZ1bmN0aW9uIGdldFBvbHltb3JwaGljRGlzY3JpbWluYXRvclJlY3Vyc2l2ZWx5KHNlcmlhbGl6ZXIsIG1hcHBlcikge1xuICAgIHJldHVybiAobWFwcGVyLnR5cGUucG9seW1vcnBoaWNEaXNjcmltaW5hdG9yIHx8XG4gICAgICAgIGdldFBvbHltb3JwaGljRGlzY3JpbWluYXRvclNhZmVseShzZXJpYWxpemVyLCBtYXBwZXIudHlwZS51YmVyUGFyZW50KSB8fFxuICAgICAgICBnZXRQb2x5bW9ycGhpY0Rpc2NyaW1pbmF0b3JTYWZlbHkoc2VyaWFsaXplciwgbWFwcGVyLnR5cGUuY2xhc3NOYW1lKSk7XG59XG5mdW5jdGlvbiBnZXRQb2x5bW9ycGhpY0Rpc2NyaW1pbmF0b3JTYWZlbHkoc2VyaWFsaXplciwgdHlwZU5hbWUpIHtcbiAgICByZXR1cm4gKHR5cGVOYW1lICYmXG4gICAgICAgIHNlcmlhbGl6ZXIubW9kZWxNYXBwZXJzW3R5cGVOYW1lXSAmJlxuICAgICAgICBzZXJpYWxpemVyLm1vZGVsTWFwcGVyc1t0eXBlTmFtZV0udHlwZS5wb2x5bW9ycGhpY0Rpc2NyaW1pbmF0b3IpO1xufVxuLyoqXG4gKiBLbm93biB0eXBlcyBvZiBNYXBwZXJzXG4gKi9cbmV4cG9ydHMuTWFwcGVyVHlwZU5hbWVzID0ge1xuICAgIEJhc2U2NFVybDogXCJCYXNlNjRVcmxcIixcbiAgICBCb29sZWFuOiBcIkJvb2xlYW5cIixcbiAgICBCeXRlQXJyYXk6IFwiQnl0ZUFycmF5XCIsXG4gICAgQ29tcG9zaXRlOiBcIkNvbXBvc2l0ZVwiLFxuICAgIERhdGU6IFwiRGF0ZVwiLFxuICAgIERhdGVUaW1lOiBcIkRhdGVUaW1lXCIsXG4gICAgRGF0ZVRpbWVSZmMxMTIzOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgIERpY3Rpb25hcnk6IFwiRGljdGlvbmFyeVwiLFxuICAgIEVudW06IFwiRW51bVwiLFxuICAgIE51bWJlcjogXCJOdW1iZXJcIixcbiAgICBPYmplY3Q6IFwiT2JqZWN0XCIsXG4gICAgU2VxdWVuY2U6IFwiU2VxdWVuY2VcIixcbiAgICBTdHJpbmc6IFwiU3RyaW5nXCIsXG4gICAgU3RyZWFtOiBcIlN0cmVhbVwiLFxuICAgIFRpbWVTcGFuOiBcIlRpbWVTcGFuXCIsXG4gICAgVW5peFRpbWU6IFwiVW5peFRpbWVcIixcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zZXJpYWxpemVyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc3RhdGUgPSB2b2lkIDA7XG4vKipcbiAqIEhvbGRzIHRoZSBzaW5nbGV0b24gb3BlcmF0aW9uUmVxdWVzdE1hcCwgdG8gYmUgc2hhcmVkIGFjcm9zcyBDSlMgYW5kIEVTTSBpbXBvcnRzLlxuICovXG5leHBvcnRzLnN0YXRlID0ge1xuICAgIG9wZXJhdGlvblJlcXVlc3RNYXA6IG5ldyBXZWFrTWFwKCksXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3RhdGUtY2pzLmNqcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldE9wZXJhdGlvblJlcXVlc3RJbmZvID0gZXhwb3J0cy5nZXRPcGVyYXRpb25Bcmd1bWVudFZhbHVlRnJvbVBhcmFtZXRlciA9IHZvaWQgMDtcbmNvbnN0IHN0YXRlX2pzXzEgPSByZXF1aXJlKFwiLi9zdGF0ZS5qc1wiKTtcbi8qKlxuICogQGludGVybmFsXG4gKiBSZXRyaWV2ZXMgdGhlIHZhbHVlIHRvIHVzZSBmb3IgYSBnaXZlbiBvcGVyYXRpb24gYXJndW1lbnRcbiAqIEBwYXJhbSBvcGVyYXRpb25Bcmd1bWVudHMgLSBUaGUgYXJndW1lbnRzIHBhc3NlZCBmcm9tIHRoZSBnZW5lcmF0ZWQgY2xpZW50XG4gKiBAcGFyYW0gcGFyYW1ldGVyIC0gVGhlIHBhcmFtZXRlciBkZXNjcmlwdGlvblxuICogQHBhcmFtIGZhbGxiYWNrT2JqZWN0IC0gSWYgc29tZXRoaW5nIGlzbid0IGZvdW5kIGluIHRoZSBhcmd1bWVudHMgYmFnLCBsb29rIGhlcmUuXG4gKiAgR2VuZXJhbGx5IHVzZWQgdG8gbG9vayBhdCB0aGUgc2VydmljZSBjbGllbnQgcHJvcGVydGllcy5cbiAqL1xuZnVuY3Rpb24gZ2V0T3BlcmF0aW9uQXJndW1lbnRWYWx1ZUZyb21QYXJhbWV0ZXIob3BlcmF0aW9uQXJndW1lbnRzLCBwYXJhbWV0ZXIsIGZhbGxiYWNrT2JqZWN0KSB7XG4gICAgbGV0IHBhcmFtZXRlclBhdGggPSBwYXJhbWV0ZXIucGFyYW1ldGVyUGF0aDtcbiAgICBjb25zdCBwYXJhbWV0ZXJNYXBwZXIgPSBwYXJhbWV0ZXIubWFwcGVyO1xuICAgIGxldCB2YWx1ZTtcbiAgICBpZiAodHlwZW9mIHBhcmFtZXRlclBhdGggPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcGFyYW1ldGVyUGF0aCA9IFtwYXJhbWV0ZXJQYXRoXTtcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocGFyYW1ldGVyUGF0aCkpIHtcbiAgICAgICAgaWYgKHBhcmFtZXRlclBhdGgubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgaWYgKHBhcmFtZXRlck1hcHBlci5pc0NvbnN0YW50KSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJhbWV0ZXJNYXBwZXIuZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbGV0IHByb3BlcnR5U2VhcmNoUmVzdWx0ID0gZ2V0UHJvcGVydHlGcm9tUGFyYW1ldGVyUGF0aChvcGVyYXRpb25Bcmd1bWVudHMsIHBhcmFtZXRlclBhdGgpO1xuICAgICAgICAgICAgICAgIGlmICghcHJvcGVydHlTZWFyY2hSZXN1bHQucHJvcGVydHlGb3VuZCAmJiBmYWxsYmFja09iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVNlYXJjaFJlc3VsdCA9IGdldFByb3BlcnR5RnJvbVBhcmFtZXRlclBhdGgoZmFsbGJhY2tPYmplY3QsIHBhcmFtZXRlclBhdGgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgdXNlRGVmYXVsdFZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKCFwcm9wZXJ0eVNlYXJjaFJlc3VsdC5wcm9wZXJ0eUZvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIHVzZURlZmF1bHRWYWx1ZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJNYXBwZXIucmVxdWlyZWQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGFyYW1ldGVyUGF0aFswXSA9PT0gXCJvcHRpb25zXCIgJiYgcGFyYW1ldGVyUGF0aC5sZW5ndGggPT09IDIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHVzZURlZmF1bHRWYWx1ZSA/IHBhcmFtZXRlck1hcHBlci5kZWZhdWx0VmFsdWUgOiBwcm9wZXJ0eVNlYXJjaFJlc3VsdC5wcm9wZXJ0eVZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAocGFyYW1ldGVyTWFwcGVyLnJlcXVpcmVkKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgcHJvcGVydHlOYW1lIGluIHBhcmFtZXRlclBhdGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5TWFwcGVyID0gcGFyYW1ldGVyTWFwcGVyLnR5cGUubW9kZWxQcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV07XG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0eVBhdGggPSBwYXJhbWV0ZXJQYXRoW3Byb3BlcnR5TmFtZV07XG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0eVZhbHVlID0gZ2V0T3BlcmF0aW9uQXJndW1lbnRWYWx1ZUZyb21QYXJhbWV0ZXIob3BlcmF0aW9uQXJndW1lbnRzLCB7XG4gICAgICAgICAgICAgICAgcGFyYW1ldGVyUGF0aDogcHJvcGVydHlQYXRoLFxuICAgICAgICAgICAgICAgIG1hcHBlcjogcHJvcGVydHlNYXBwZXIsXG4gICAgICAgICAgICB9LCBmYWxsYmFja09iamVjdCk7XG4gICAgICAgICAgICBpZiAocHJvcGVydHlWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YWx1ZVtwcm9wZXJ0eU5hbWVdID0gcHJvcGVydHlWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59XG5leHBvcnRzLmdldE9wZXJhdGlvbkFyZ3VtZW50VmFsdWVGcm9tUGFyYW1ldGVyID0gZ2V0T3BlcmF0aW9uQXJndW1lbnRWYWx1ZUZyb21QYXJhbWV0ZXI7XG5mdW5jdGlvbiBnZXRQcm9wZXJ0eUZyb21QYXJhbWV0ZXJQYXRoKHBhcmVudCwgcGFyYW1ldGVyUGF0aCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHsgcHJvcGVydHlGb3VuZDogZmFsc2UgfTtcbiAgICBsZXQgaSA9IDA7XG4gICAgZm9yICg7IGkgPCBwYXJhbWV0ZXJQYXRoLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGNvbnN0IHBhcmFtZXRlclBhdGhQYXJ0ID0gcGFyYW1ldGVyUGF0aFtpXTtcbiAgICAgICAgLy8gTWFrZSBzdXJlIHRvIGNoZWNrIGluaGVyaXRlZCBwcm9wZXJ0aWVzIHRvbywgc28gZG9uJ3QgdXNlIGhhc093blByb3BlcnR5KCkuXG4gICAgICAgIGlmIChwYXJlbnQgJiYgcGFyYW1ldGVyUGF0aFBhcnQgaW4gcGFyZW50KSB7XG4gICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnRbcGFyYW1ldGVyUGF0aFBhcnRdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGkgPT09IHBhcmFtZXRlclBhdGgubGVuZ3RoKSB7XG4gICAgICAgIHJlc3VsdC5wcm9wZXJ0eVZhbHVlID0gcGFyZW50O1xuICAgICAgICByZXN1bHQucHJvcGVydHlGb3VuZCA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5jb25zdCBvcmlnaW5hbFJlcXVlc3RTeW1ib2wgPSBTeW1ib2wuZm9yKFwiQGF6dXJlL2NvcmUtY2xpZW50IG9yaWdpbmFsIHJlcXVlc3RcIik7XG5mdW5jdGlvbiBoYXNPcmlnaW5hbFJlcXVlc3QocmVxdWVzdCkge1xuICAgIHJldHVybiBvcmlnaW5hbFJlcXVlc3RTeW1ib2wgaW4gcmVxdWVzdDtcbn1cbmZ1bmN0aW9uIGdldE9wZXJhdGlvblJlcXVlc3RJbmZvKHJlcXVlc3QpIHtcbiAgICBpZiAoaGFzT3JpZ2luYWxSZXF1ZXN0KHJlcXVlc3QpKSB7XG4gICAgICAgIHJldHVybiBnZXRPcGVyYXRpb25SZXF1ZXN0SW5mbyhyZXF1ZXN0W29yaWdpbmFsUmVxdWVzdFN5bWJvbF0pO1xuICAgIH1cbiAgICBsZXQgaW5mbyA9IHN0YXRlX2pzXzEuc3RhdGUub3BlcmF0aW9uUmVxdWVzdE1hcC5nZXQocmVxdWVzdCk7XG4gICAgaWYgKCFpbmZvKSB7XG4gICAgICAgIGluZm8gPSB7fTtcbiAgICAgICAgc3RhdGVfanNfMS5zdGF0ZS5vcGVyYXRpb25SZXF1ZXN0TWFwLnNldChyZXF1ZXN0LCBpbmZvKTtcbiAgICB9XG4gICAgcmV0dXJuIGluZm87XG59XG5leHBvcnRzLmdldE9wZXJhdGlvblJlcXVlc3RJbmZvID0gZ2V0T3BlcmF0aW9uUmVxdWVzdEluZm87XG4vLyMgc291cmNlTWFwcGluZ1VSTD1vcGVyYXRpb25IZWxwZXJzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZGVzZXJpYWxpemF0aW9uUG9saWN5ID0gZXhwb3J0cy5kZXNlcmlhbGl6YXRpb25Qb2xpY3lOYW1lID0gdm9pZCAwO1xuY29uc3QgaW50ZXJmYWNlc19qc18xID0gcmVxdWlyZShcIi4vaW50ZXJmYWNlcy5qc1wiKTtcbmNvbnN0IGNvcmVfcmVzdF9waXBlbGluZV8xID0gcmVxdWlyZShcIkBhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmVcIik7XG5jb25zdCBzZXJpYWxpemVyX2pzXzEgPSByZXF1aXJlKFwiLi9zZXJpYWxpemVyLmpzXCIpO1xuY29uc3Qgb3BlcmF0aW9uSGVscGVyc19qc18xID0gcmVxdWlyZShcIi4vb3BlcmF0aW9uSGVscGVycy5qc1wiKTtcbmNvbnN0IGRlZmF1bHRKc29uQ29udGVudFR5cGVzID0gW1wiYXBwbGljYXRpb24vanNvblwiLCBcInRleHQvanNvblwiXTtcbmNvbnN0IGRlZmF1bHRYbWxDb250ZW50VHlwZXMgPSBbXCJhcHBsaWNhdGlvbi94bWxcIiwgXCJhcHBsaWNhdGlvbi9hdG9tK3htbFwiXTtcbi8qKlxuICogVGhlIHByb2dyYW1tYXRpYyBpZGVudGlmaWVyIG9mIHRoZSBkZXNlcmlhbGl6YXRpb25Qb2xpY3kuXG4gKi9cbmV4cG9ydHMuZGVzZXJpYWxpemF0aW9uUG9saWN5TmFtZSA9IFwiZGVzZXJpYWxpemF0aW9uUG9saWN5XCI7XG4vKipcbiAqIFRoaXMgcG9saWN5IGhhbmRsZXMgcGFyc2luZyBvdXQgcmVzcG9uc2VzIGFjY29yZGluZyB0byBPcGVyYXRpb25TcGVjcyBvbiB0aGUgcmVxdWVzdC5cbiAqL1xuZnVuY3Rpb24gZGVzZXJpYWxpemF0aW9uUG9saWN5KG9wdGlvbnMgPSB7fSkge1xuICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2UsIF9mLCBfZztcbiAgICBjb25zdCBqc29uQ29udGVudFR5cGVzID0gKF9iID0gKF9hID0gb3B0aW9ucy5leHBlY3RlZENvbnRlbnRUeXBlcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmpzb24pICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IGRlZmF1bHRKc29uQ29udGVudFR5cGVzO1xuICAgIGNvbnN0IHhtbENvbnRlbnRUeXBlcyA9IChfZCA9IChfYyA9IG9wdGlvbnMuZXhwZWN0ZWRDb250ZW50VHlwZXMpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy54bWwpICE9PSBudWxsICYmIF9kICE9PSB2b2lkIDAgPyBfZCA6IGRlZmF1bHRYbWxDb250ZW50VHlwZXM7XG4gICAgY29uc3QgcGFyc2VYTUwgPSBvcHRpb25zLnBhcnNlWE1MO1xuICAgIGNvbnN0IHNlcmlhbGl6ZXJPcHRpb25zID0gb3B0aW9ucy5zZXJpYWxpemVyT3B0aW9ucztcbiAgICBjb25zdCB1cGRhdGVkT3B0aW9ucyA9IHtcbiAgICAgICAgeG1sOiB7XG4gICAgICAgICAgICByb290TmFtZTogKF9lID0gc2VyaWFsaXplck9wdGlvbnMgPT09IG51bGwgfHwgc2VyaWFsaXplck9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlcmlhbGl6ZXJPcHRpb25zLnhtbC5yb290TmFtZSkgIT09IG51bGwgJiYgX2UgIT09IHZvaWQgMCA/IF9lIDogXCJcIixcbiAgICAgICAgICAgIGluY2x1ZGVSb290OiAoX2YgPSBzZXJpYWxpemVyT3B0aW9ucyA9PT0gbnVsbCB8fCBzZXJpYWxpemVyT3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VyaWFsaXplck9wdGlvbnMueG1sLmluY2x1ZGVSb290KSAhPT0gbnVsbCAmJiBfZiAhPT0gdm9pZCAwID8gX2YgOiBmYWxzZSxcbiAgICAgICAgICAgIHhtbENoYXJLZXk6IChfZyA9IHNlcmlhbGl6ZXJPcHRpb25zID09PSBudWxsIHx8IHNlcmlhbGl6ZXJPcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZXJpYWxpemVyT3B0aW9ucy54bWwueG1sQ2hhcktleSkgIT09IG51bGwgJiYgX2cgIT09IHZvaWQgMCA/IF9nIDogaW50ZXJmYWNlc19qc18xLlhNTF9DSEFSS0VZLFxuICAgICAgICB9LFxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogZXhwb3J0cy5kZXNlcmlhbGl6YXRpb25Qb2xpY3lOYW1lLFxuICAgICAgICBhc3luYyBzZW5kUmVxdWVzdChyZXF1ZXN0LCBuZXh0KSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG5leHQocmVxdWVzdCk7XG4gICAgICAgICAgICByZXR1cm4gZGVzZXJpYWxpemVSZXNwb25zZUJvZHkoanNvbkNvbnRlbnRUeXBlcywgeG1sQ29udGVudFR5cGVzLCByZXNwb25zZSwgdXBkYXRlZE9wdGlvbnMsIHBhcnNlWE1MKTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuZXhwb3J0cy5kZXNlcmlhbGl6YXRpb25Qb2xpY3kgPSBkZXNlcmlhbGl6YXRpb25Qb2xpY3k7XG5mdW5jdGlvbiBnZXRPcGVyYXRpb25SZXNwb25zZU1hcChwYXJzZWRSZXNwb25zZSkge1xuICAgIGxldCByZXN1bHQ7XG4gICAgY29uc3QgcmVxdWVzdCA9IHBhcnNlZFJlc3BvbnNlLnJlcXVlc3Q7XG4gICAgY29uc3Qgb3BlcmF0aW9uSW5mbyA9ICgwLCBvcGVyYXRpb25IZWxwZXJzX2pzXzEuZ2V0T3BlcmF0aW9uUmVxdWVzdEluZm8pKHJlcXVlc3QpO1xuICAgIGNvbnN0IG9wZXJhdGlvblNwZWMgPSBvcGVyYXRpb25JbmZvID09PSBudWxsIHx8IG9wZXJhdGlvbkluZm8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wZXJhdGlvbkluZm8ub3BlcmF0aW9uU3BlYztcbiAgICBpZiAob3BlcmF0aW9uU3BlYykge1xuICAgICAgICBpZiAoIShvcGVyYXRpb25JbmZvID09PSBudWxsIHx8IG9wZXJhdGlvbkluZm8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wZXJhdGlvbkluZm8ub3BlcmF0aW9uUmVzcG9uc2VHZXR0ZXIpKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBvcGVyYXRpb25TcGVjLnJlc3BvbnNlc1twYXJzZWRSZXNwb25zZS5zdGF0dXNdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0ID0gb3BlcmF0aW9uSW5mbyA9PT0gbnVsbCB8fCBvcGVyYXRpb25JbmZvID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcGVyYXRpb25JbmZvLm9wZXJhdGlvblJlc3BvbnNlR2V0dGVyKG9wZXJhdGlvblNwZWMsIHBhcnNlZFJlc3BvbnNlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gc2hvdWxkRGVzZXJpYWxpemVSZXNwb25zZShwYXJzZWRSZXNwb25zZSkge1xuICAgIGNvbnN0IHJlcXVlc3QgPSBwYXJzZWRSZXNwb25zZS5yZXF1ZXN0O1xuICAgIGNvbnN0IG9wZXJhdGlvbkluZm8gPSAoMCwgb3BlcmF0aW9uSGVscGVyc19qc18xLmdldE9wZXJhdGlvblJlcXVlc3RJbmZvKShyZXF1ZXN0KTtcbiAgICBjb25zdCBzaG91bGREZXNlcmlhbGl6ZSA9IG9wZXJhdGlvbkluZm8gPT09IG51bGwgfHwgb3BlcmF0aW9uSW5mbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3BlcmF0aW9uSW5mby5zaG91bGREZXNlcmlhbGl6ZTtcbiAgICBsZXQgcmVzdWx0O1xuICAgIGlmIChzaG91bGREZXNlcmlhbGl6ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlc3VsdCA9IHRydWU7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBzaG91bGREZXNlcmlhbGl6ZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgcmVzdWx0ID0gc2hvdWxkRGVzZXJpYWxpemU7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXN1bHQgPSBzaG91bGREZXNlcmlhbGl6ZShwYXJzZWRSZXNwb25zZSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5hc3luYyBmdW5jdGlvbiBkZXNlcmlhbGl6ZVJlc3BvbnNlQm9keShqc29uQ29udGVudFR5cGVzLCB4bWxDb250ZW50VHlwZXMsIHJlc3BvbnNlLCBvcHRpb25zLCBwYXJzZVhNTCkge1xuICAgIGNvbnN0IHBhcnNlZFJlc3BvbnNlID0gYXdhaXQgcGFyc2UoanNvbkNvbnRlbnRUeXBlcywgeG1sQ29udGVudFR5cGVzLCByZXNwb25zZSwgb3B0aW9ucywgcGFyc2VYTUwpO1xuICAgIGlmICghc2hvdWxkRGVzZXJpYWxpemVSZXNwb25zZShwYXJzZWRSZXNwb25zZSkpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlZFJlc3BvbnNlO1xuICAgIH1cbiAgICBjb25zdCBvcGVyYXRpb25JbmZvID0gKDAsIG9wZXJhdGlvbkhlbHBlcnNfanNfMS5nZXRPcGVyYXRpb25SZXF1ZXN0SW5mbykocGFyc2VkUmVzcG9uc2UucmVxdWVzdCk7XG4gICAgY29uc3Qgb3BlcmF0aW9uU3BlYyA9IG9wZXJhdGlvbkluZm8gPT09IG51bGwgfHwgb3BlcmF0aW9uSW5mbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3BlcmF0aW9uSW5mby5vcGVyYXRpb25TcGVjO1xuICAgIGlmICghb3BlcmF0aW9uU3BlYyB8fCAhb3BlcmF0aW9uU3BlYy5yZXNwb25zZXMpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlZFJlc3BvbnNlO1xuICAgIH1cbiAgICBjb25zdCByZXNwb25zZVNwZWMgPSBnZXRPcGVyYXRpb25SZXNwb25zZU1hcChwYXJzZWRSZXNwb25zZSk7XG4gICAgY29uc3QgeyBlcnJvciwgc2hvdWxkUmV0dXJuUmVzcG9uc2UgfSA9IGhhbmRsZUVycm9yUmVzcG9uc2UocGFyc2VkUmVzcG9uc2UsIG9wZXJhdGlvblNwZWMsIHJlc3BvbnNlU3BlYywgb3B0aW9ucyk7XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgICBlbHNlIGlmIChzaG91bGRSZXR1cm5SZXNwb25zZSkge1xuICAgICAgICByZXR1cm4gcGFyc2VkUmVzcG9uc2U7XG4gICAgfVxuICAgIC8vIEFuIG9wZXJhdGlvbiByZXNwb25zZSBzcGVjIGRvZXMgZXhpc3QgZm9yIGN1cnJlbnQgc3RhdHVzIGNvZGUsIHNvXG4gICAgLy8gdXNlIGl0IHRvIGRlc2VyaWFsaXplIHRoZSByZXNwb25zZS5cbiAgICBpZiAocmVzcG9uc2VTcGVjKSB7XG4gICAgICAgIGlmIChyZXNwb25zZVNwZWMuYm9keU1hcHBlcikge1xuICAgICAgICAgICAgbGV0IHZhbHVlVG9EZXNlcmlhbGl6ZSA9IHBhcnNlZFJlc3BvbnNlLnBhcnNlZEJvZHk7XG4gICAgICAgICAgICBpZiAob3BlcmF0aW9uU3BlYy5pc1hNTCAmJiByZXNwb25zZVNwZWMuYm9keU1hcHBlci50eXBlLm5hbWUgPT09IHNlcmlhbGl6ZXJfanNfMS5NYXBwZXJUeXBlTmFtZXMuU2VxdWVuY2UpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZVRvRGVzZXJpYWxpemUgPVxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgdmFsdWVUb0Rlc2VyaWFsaXplID09PSBcIm9iamVjdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHZhbHVlVG9EZXNlcmlhbGl6ZVtyZXNwb25zZVNwZWMuYm9keU1hcHBlci54bWxFbGVtZW50TmFtZV1cbiAgICAgICAgICAgICAgICAgICAgICAgIDogW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBhcnNlZFJlc3BvbnNlLnBhcnNlZEJvZHkgPSBvcGVyYXRpb25TcGVjLnNlcmlhbGl6ZXIuZGVzZXJpYWxpemUocmVzcG9uc2VTcGVjLmJvZHlNYXBwZXIsIHZhbHVlVG9EZXNlcmlhbGl6ZSwgXCJvcGVyYXRpb25SZXMucGFyc2VkQm9keVwiLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChkZXNlcmlhbGl6ZUVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdEVycm9yID0gbmV3IGNvcmVfcmVzdF9waXBlbGluZV8xLlJlc3RFcnJvcihgRXJyb3IgJHtkZXNlcmlhbGl6ZUVycm9yfSBvY2N1cnJlZCBpbiBkZXNlcmlhbGl6aW5nIHRoZSByZXNwb25zZUJvZHkgLSAke3BhcnNlZFJlc3BvbnNlLmJvZHlBc1RleHR9YCwge1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXNDb2RlOiBwYXJzZWRSZXNwb25zZS5zdGF0dXMsXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3Q6IHBhcnNlZFJlc3BvbnNlLnJlcXVlc3QsXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlOiBwYXJzZWRSZXNwb25zZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aHJvdyByZXN0RXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAob3BlcmF0aW9uU3BlYy5odHRwTWV0aG9kID09PSBcIkhFQURcIikge1xuICAgICAgICAgICAgLy8gaGVhZCBtZXRob2RzIG5ldmVyIGhhdmUgYSBib2R5LCBidXQgd2UgcmV0dXJuIGEgYm9vbGVhbiB0byBpbmRpY2F0ZSBwcmVzZW5jZS9hYnNlbmNlIG9mIHRoZSByZXNvdXJjZVxuICAgICAgICAgICAgcGFyc2VkUmVzcG9uc2UucGFyc2VkQm9keSA9IHJlc3BvbnNlLnN0YXR1cyA+PSAyMDAgJiYgcmVzcG9uc2Uuc3RhdHVzIDwgMzAwO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXNwb25zZVNwZWMuaGVhZGVyc01hcHBlcikge1xuICAgICAgICAgICAgcGFyc2VkUmVzcG9uc2UucGFyc2VkSGVhZGVycyA9IG9wZXJhdGlvblNwZWMuc2VyaWFsaXplci5kZXNlcmlhbGl6ZShyZXNwb25zZVNwZWMuaGVhZGVyc01hcHBlciwgcGFyc2VkUmVzcG9uc2UuaGVhZGVycy50b0pTT04oKSwgXCJvcGVyYXRpb25SZXMucGFyc2VkSGVhZGVyc1wiLCB7IHhtbDoge30sIGlnbm9yZVVua25vd25Qcm9wZXJ0aWVzOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwYXJzZWRSZXNwb25zZTtcbn1cbmZ1bmN0aW9uIGlzT3BlcmF0aW9uU3BlY0VtcHR5KG9wZXJhdGlvblNwZWMpIHtcbiAgICBjb25zdCBleHBlY3RlZFN0YXR1c0NvZGVzID0gT2JqZWN0LmtleXMob3BlcmF0aW9uU3BlYy5yZXNwb25zZXMpO1xuICAgIHJldHVybiAoZXhwZWN0ZWRTdGF0dXNDb2Rlcy5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgKGV4cGVjdGVkU3RhdHVzQ29kZXMubGVuZ3RoID09PSAxICYmIGV4cGVjdGVkU3RhdHVzQ29kZXNbMF0gPT09IFwiZGVmYXVsdFwiKSk7XG59XG5mdW5jdGlvbiBoYW5kbGVFcnJvclJlc3BvbnNlKHBhcnNlZFJlc3BvbnNlLCBvcGVyYXRpb25TcGVjLCByZXNwb25zZVNwZWMsIG9wdGlvbnMpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3QgaXNTdWNjZXNzQnlTdGF0dXMgPSAyMDAgPD0gcGFyc2VkUmVzcG9uc2Uuc3RhdHVzICYmIHBhcnNlZFJlc3BvbnNlLnN0YXR1cyA8IDMwMDtcbiAgICBjb25zdCBpc0V4cGVjdGVkU3RhdHVzQ29kZSA9IGlzT3BlcmF0aW9uU3BlY0VtcHR5KG9wZXJhdGlvblNwZWMpXG4gICAgICAgID8gaXNTdWNjZXNzQnlTdGF0dXNcbiAgICAgICAgOiAhIXJlc3BvbnNlU3BlYztcbiAgICBpZiAoaXNFeHBlY3RlZFN0YXR1c0NvZGUpIHtcbiAgICAgICAgaWYgKHJlc3BvbnNlU3BlYykge1xuICAgICAgICAgICAgaWYgKCFyZXNwb25zZVNwZWMuaXNFcnJvcikge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGVycm9yOiBudWxsLCBzaG91bGRSZXR1cm5SZXNwb25zZTogZmFsc2UgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB7IGVycm9yOiBudWxsLCBzaG91bGRSZXR1cm5SZXNwb25zZTogZmFsc2UgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBlcnJvclJlc3BvbnNlU3BlYyA9IHJlc3BvbnNlU3BlYyAhPT0gbnVsbCAmJiByZXNwb25zZVNwZWMgIT09IHZvaWQgMCA/IHJlc3BvbnNlU3BlYyA6IG9wZXJhdGlvblNwZWMucmVzcG9uc2VzLmRlZmF1bHQ7XG4gICAgY29uc3QgaW5pdGlhbEVycm9yTWVzc2FnZSA9ICgoX2EgPSBwYXJzZWRSZXNwb25zZS5yZXF1ZXN0LnN0cmVhbVJlc3BvbnNlU3RhdHVzQ29kZXMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5oYXMocGFyc2VkUmVzcG9uc2Uuc3RhdHVzKSlcbiAgICAgICAgPyBgVW5leHBlY3RlZCBzdGF0dXMgY29kZTogJHtwYXJzZWRSZXNwb25zZS5zdGF0dXN9YFxuICAgICAgICA6IHBhcnNlZFJlc3BvbnNlLmJvZHlBc1RleHQ7XG4gICAgY29uc3QgZXJyb3IgPSBuZXcgY29yZV9yZXN0X3BpcGVsaW5lXzEuUmVzdEVycm9yKGluaXRpYWxFcnJvck1lc3NhZ2UsIHtcbiAgICAgICAgc3RhdHVzQ29kZTogcGFyc2VkUmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgICByZXF1ZXN0OiBwYXJzZWRSZXNwb25zZS5yZXF1ZXN0LFxuICAgICAgICByZXNwb25zZTogcGFyc2VkUmVzcG9uc2UsXG4gICAgfSk7XG4gICAgLy8gSWYgdGhlIGl0ZW0gZmFpbGVkIGJ1dCB0aGVyZSdzIG5vIGVycm9yIHNwZWMgb3IgZGVmYXVsdCBzcGVjIHRvIGRlc2VyaWFsaXplIHRoZSBlcnJvcixcbiAgICAvLyB3ZSBzaG91bGQgZmFpbCBzbyB3ZSBqdXN0IHRocm93IHRoZSBwYXJzZWQgcmVzcG9uc2VcbiAgICBpZiAoIWVycm9yUmVzcG9uc2VTcGVjKSB7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgICBjb25zdCBkZWZhdWx0Qm9keU1hcHBlciA9IGVycm9yUmVzcG9uc2VTcGVjLmJvZHlNYXBwZXI7XG4gICAgY29uc3QgZGVmYXVsdEhlYWRlcnNNYXBwZXIgPSBlcnJvclJlc3BvbnNlU3BlYy5oZWFkZXJzTWFwcGVyO1xuICAgIHRyeSB7XG4gICAgICAgIC8vIElmIGVycm9yIHJlc3BvbnNlIGhhcyBhIGJvZHksIHRyeSB0byBkZXNlcmlhbGl6ZSBpdCB1c2luZyBkZWZhdWx0IGJvZHkgbWFwcGVyLlxuICAgICAgICAvLyBUaGVuIHRyeSB0byBleHRyYWN0IGVycm9yIGNvZGUgJiBtZXNzYWdlIGZyb20gaXRcbiAgICAgICAgaWYgKHBhcnNlZFJlc3BvbnNlLnBhcnNlZEJvZHkpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZEJvZHkgPSBwYXJzZWRSZXNwb25zZS5wYXJzZWRCb2R5O1xuICAgICAgICAgICAgbGV0IGRlc2VyaWFsaXplZEVycm9yO1xuICAgICAgICAgICAgaWYgKGRlZmF1bHRCb2R5TWFwcGVyKSB7XG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlVG9EZXNlcmlhbGl6ZSA9IHBhcnNlZEJvZHk7XG4gICAgICAgICAgICAgICAgaWYgKG9wZXJhdGlvblNwZWMuaXNYTUwgJiYgZGVmYXVsdEJvZHlNYXBwZXIudHlwZS5uYW1lID09PSBzZXJpYWxpemVyX2pzXzEuTWFwcGVyVHlwZU5hbWVzLlNlcXVlbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlVG9EZXNlcmlhbGl6ZSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50TmFtZSA9IGRlZmF1bHRCb2R5TWFwcGVyLnhtbEVsZW1lbnROYW1lO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHBhcnNlZEJvZHkgPT09IFwib2JqZWN0XCIgJiYgZWxlbWVudE5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlVG9EZXNlcmlhbGl6ZSA9IHBhcnNlZEJvZHlbZWxlbWVudE5hbWVdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlc2VyaWFsaXplZEVycm9yID0gb3BlcmF0aW9uU3BlYy5zZXJpYWxpemVyLmRlc2VyaWFsaXplKGRlZmF1bHRCb2R5TWFwcGVyLCB2YWx1ZVRvRGVzZXJpYWxpemUsIFwiZXJyb3IucmVzcG9uc2UucGFyc2VkQm9keVwiLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGludGVybmFsRXJyb3IgPSBwYXJzZWRCb2R5LmVycm9yIHx8IGRlc2VyaWFsaXplZEVycm9yIHx8IHBhcnNlZEJvZHk7XG4gICAgICAgICAgICBlcnJvci5jb2RlID0gaW50ZXJuYWxFcnJvci5jb2RlO1xuICAgICAgICAgICAgaWYgKGludGVybmFsRXJyb3IubWVzc2FnZSkge1xuICAgICAgICAgICAgICAgIGVycm9yLm1lc3NhZ2UgPSBpbnRlcm5hbEVycm9yLm1lc3NhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGVmYXVsdEJvZHlNYXBwZXIpIHtcbiAgICAgICAgICAgICAgICBlcnJvci5yZXNwb25zZS5wYXJzZWRCb2R5ID0gZGVzZXJpYWxpemVkRXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgZXJyb3IgcmVzcG9uc2UgaGFzIGhlYWRlcnMsIHRyeSB0byBkZXNlcmlhbGl6ZSBpdCB1c2luZyBkZWZhdWx0IGhlYWRlciBtYXBwZXJcbiAgICAgICAgaWYgKHBhcnNlZFJlc3BvbnNlLmhlYWRlcnMgJiYgZGVmYXVsdEhlYWRlcnNNYXBwZXIpIHtcbiAgICAgICAgICAgIGVycm9yLnJlc3BvbnNlLnBhcnNlZEhlYWRlcnMgPVxuICAgICAgICAgICAgICAgIG9wZXJhdGlvblNwZWMuc2VyaWFsaXplci5kZXNlcmlhbGl6ZShkZWZhdWx0SGVhZGVyc01hcHBlciwgcGFyc2VkUmVzcG9uc2UuaGVhZGVycy50b0pTT04oKSwgXCJvcGVyYXRpb25SZXMucGFyc2VkSGVhZGVyc1wiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXRjaCAoZGVmYXVsdEVycm9yKSB7XG4gICAgICAgIGVycm9yLm1lc3NhZ2UgPSBgRXJyb3IgXCIke2RlZmF1bHRFcnJvci5tZXNzYWdlfVwiIG9jY3VycmVkIGluIGRlc2VyaWFsaXppbmcgdGhlIHJlc3BvbnNlQm9keSAtIFwiJHtwYXJzZWRSZXNwb25zZS5ib2R5QXNUZXh0fVwiIGZvciB0aGUgZGVmYXVsdCByZXNwb25zZS5gO1xuICAgIH1cbiAgICByZXR1cm4geyBlcnJvciwgc2hvdWxkUmV0dXJuUmVzcG9uc2U6IGZhbHNlIH07XG59XG5hc3luYyBmdW5jdGlvbiBwYXJzZShqc29uQ29udGVudFR5cGVzLCB4bWxDb250ZW50VHlwZXMsIG9wZXJhdGlvblJlc3BvbnNlLCBvcHRzLCBwYXJzZVhNTCkge1xuICAgIHZhciBfYTtcbiAgICBpZiAoISgoX2EgPSBvcGVyYXRpb25SZXNwb25zZS5yZXF1ZXN0LnN0cmVhbVJlc3BvbnNlU3RhdHVzQ29kZXMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5oYXMob3BlcmF0aW9uUmVzcG9uc2Uuc3RhdHVzKSkgJiZcbiAgICAgICAgb3BlcmF0aW9uUmVzcG9uc2UuYm9keUFzVGV4dCkge1xuICAgICAgICBjb25zdCB0ZXh0ID0gb3BlcmF0aW9uUmVzcG9uc2UuYm9keUFzVGV4dDtcbiAgICAgICAgY29uc3QgY29udGVudFR5cGUgPSBvcGVyYXRpb25SZXNwb25zZS5oZWFkZXJzLmdldChcIkNvbnRlbnQtVHlwZVwiKSB8fCBcIlwiO1xuICAgICAgICBjb25zdCBjb250ZW50Q29tcG9uZW50cyA9ICFjb250ZW50VHlwZVxuICAgICAgICAgICAgPyBbXVxuICAgICAgICAgICAgOiBjb250ZW50VHlwZS5zcGxpdChcIjtcIikubWFwKChjb21wb25lbnQpID0+IGNvbXBvbmVudC50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChjb250ZW50Q29tcG9uZW50cy5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAgICAgICBjb250ZW50Q29tcG9uZW50cy5zb21lKChjb21wb25lbnQpID0+IGpzb25Db250ZW50VHlwZXMuaW5kZXhPZihjb21wb25lbnQpICE9PSAtMSkpIHtcbiAgICAgICAgICAgICAgICBvcGVyYXRpb25SZXNwb25zZS5wYXJzZWRCb2R5ID0gSlNPTi5wYXJzZSh0ZXh0KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUmVzcG9uc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjb250ZW50Q29tcG9uZW50cy5zb21lKChjb21wb25lbnQpID0+IHhtbENvbnRlbnRUeXBlcy5pbmRleE9mKGNvbXBvbmVudCkgIT09IC0xKSkge1xuICAgICAgICAgICAgICAgIGlmICghcGFyc2VYTUwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFyc2luZyBYTUwgbm90IHN1cHBvcnRlZC5cIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBhd2FpdCBwYXJzZVhNTCh0ZXh0LCBvcHRzLnhtbCk7XG4gICAgICAgICAgICAgICAgb3BlcmF0aW9uUmVzcG9uc2UucGFyc2VkQm9keSA9IGJvZHk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblJlc3BvbnNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGNvbnN0IG1zZyA9IGBFcnJvciBcIiR7ZXJyfVwiIG9jY3VycmVkIHdoaWxlIHBhcnNpbmcgdGhlIHJlc3BvbnNlIGJvZHkgLSAke29wZXJhdGlvblJlc3BvbnNlLmJvZHlBc1RleHR9LmA7XG4gICAgICAgICAgICBjb25zdCBlcnJDb2RlID0gZXJyLmNvZGUgfHwgY29yZV9yZXN0X3BpcGVsaW5lXzEuUmVzdEVycm9yLlBBUlNFX0VSUk9SO1xuICAgICAgICAgICAgY29uc3QgZSA9IG5ldyBjb3JlX3Jlc3RfcGlwZWxpbmVfMS5SZXN0RXJyb3IobXNnLCB7XG4gICAgICAgICAgICAgICAgY29kZTogZXJyQ29kZSxcbiAgICAgICAgICAgICAgICBzdGF0dXNDb2RlOiBvcGVyYXRpb25SZXNwb25zZS5zdGF0dXMsXG4gICAgICAgICAgICAgICAgcmVxdWVzdDogb3BlcmF0aW9uUmVzcG9uc2UucmVxdWVzdCxcbiAgICAgICAgICAgICAgICByZXNwb25zZTogb3BlcmF0aW9uUmVzcG9uc2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9wZXJhdGlvblJlc3BvbnNlO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGVzZXJpYWxpemF0aW9uUG9saWN5LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0UGF0aFN0cmluZ0Zyb21QYXJhbWV0ZXIgPSBleHBvcnRzLmdldFN0cmVhbWluZ1Jlc3BvbnNlU3RhdHVzQ29kZXMgPSB2b2lkIDA7XG5jb25zdCBzZXJpYWxpemVyX2pzXzEgPSByZXF1aXJlKFwiLi9zZXJpYWxpemVyLmpzXCIpO1xuLyoqXG4gKiBHZXRzIHRoZSBsaXN0IG9mIHN0YXR1cyBjb2RlcyBmb3Igc3RyZWFtaW5nIHJlc3BvbnNlcy5cbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBnZXRTdHJlYW1pbmdSZXNwb25zZVN0YXR1c0NvZGVzKG9wZXJhdGlvblNwZWMpIHtcbiAgICBjb25zdCByZXN1bHQgPSBuZXcgU2V0KCk7XG4gICAgZm9yIChjb25zdCBzdGF0dXNDb2RlIGluIG9wZXJhdGlvblNwZWMucmVzcG9uc2VzKSB7XG4gICAgICAgIGNvbnN0IG9wZXJhdGlvblJlc3BvbnNlID0gb3BlcmF0aW9uU3BlYy5yZXNwb25zZXNbc3RhdHVzQ29kZV07XG4gICAgICAgIGlmIChvcGVyYXRpb25SZXNwb25zZS5ib2R5TWFwcGVyICYmXG4gICAgICAgICAgICBvcGVyYXRpb25SZXNwb25zZS5ib2R5TWFwcGVyLnR5cGUubmFtZSA9PT0gc2VyaWFsaXplcl9qc18xLk1hcHBlclR5cGVOYW1lcy5TdHJlYW0pIHtcbiAgICAgICAgICAgIHJlc3VsdC5hZGQoTnVtYmVyKHN0YXR1c0NvZGUpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZXhwb3J0cy5nZXRTdHJlYW1pbmdSZXNwb25zZVN0YXR1c0NvZGVzID0gZ2V0U3RyZWFtaW5nUmVzcG9uc2VTdGF0dXNDb2Rlcztcbi8qKlxuICogR2V0IHRoZSBwYXRoIHRvIHRoaXMgcGFyYW1ldGVyJ3MgdmFsdWUgYXMgYSBkb3R0ZWQgc3RyaW5nIChhLmIuYykuXG4gKiBAcGFyYW0gcGFyYW1ldGVyIC0gVGhlIHBhcmFtZXRlciB0byBnZXQgdGhlIHBhdGggc3RyaW5nIGZvci5cbiAqIEByZXR1cm5zIFRoZSBwYXRoIHRvIHRoaXMgcGFyYW1ldGVyJ3MgdmFsdWUgYXMgYSBkb3R0ZWQgc3RyaW5nLlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIGdldFBhdGhTdHJpbmdGcm9tUGFyYW1ldGVyKHBhcmFtZXRlcikge1xuICAgIGNvbnN0IHsgcGFyYW1ldGVyUGF0aCwgbWFwcGVyIH0gPSBwYXJhbWV0ZXI7XG4gICAgbGV0IHJlc3VsdDtcbiAgICBpZiAodHlwZW9mIHBhcmFtZXRlclBhdGggPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmVzdWx0ID0gcGFyYW1ldGVyUGF0aDtcbiAgICB9XG4gICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShwYXJhbWV0ZXJQYXRoKSkge1xuICAgICAgICByZXN1bHQgPSBwYXJhbWV0ZXJQYXRoLmpvaW4oXCIuXCIpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gbWFwcGVyLnNlcmlhbGl6ZWROYW1lO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZXhwb3J0cy5nZXRQYXRoU3RyaW5nRnJvbVBhcmFtZXRlciA9IGdldFBhdGhTdHJpbmdGcm9tUGFyYW1ldGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW50ZXJmYWNlSGVscGVycy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnNlcmlhbGl6ZVJlcXVlc3RCb2R5ID0gZXhwb3J0cy5zZXJpYWxpemVIZWFkZXJzID0gZXhwb3J0cy5zZXJpYWxpemF0aW9uUG9saWN5ID0gZXhwb3J0cy5zZXJpYWxpemF0aW9uUG9saWN5TmFtZSA9IHZvaWQgMDtcbmNvbnN0IGludGVyZmFjZXNfanNfMSA9IHJlcXVpcmUoXCIuL2ludGVyZmFjZXMuanNcIik7XG5jb25zdCBvcGVyYXRpb25IZWxwZXJzX2pzXzEgPSByZXF1aXJlKFwiLi9vcGVyYXRpb25IZWxwZXJzLmpzXCIpO1xuY29uc3Qgc2VyaWFsaXplcl9qc18xID0gcmVxdWlyZShcIi4vc2VyaWFsaXplci5qc1wiKTtcbmNvbnN0IGludGVyZmFjZUhlbHBlcnNfanNfMSA9IHJlcXVpcmUoXCIuL2ludGVyZmFjZUhlbHBlcnMuanNcIik7XG4vKipcbiAqIFRoZSBwcm9ncmFtbWF0aWMgaWRlbnRpZmllciBvZiB0aGUgc2VyaWFsaXphdGlvblBvbGljeS5cbiAqL1xuZXhwb3J0cy5zZXJpYWxpemF0aW9uUG9saWN5TmFtZSA9IFwic2VyaWFsaXphdGlvblBvbGljeVwiO1xuLyoqXG4gKiBUaGlzIHBvbGljeSBoYW5kbGVzIGFzc2VtYmxpbmcgdGhlIHJlcXVlc3QgYm9keSBhbmQgaGVhZGVycyB1c2luZ1xuICogYW4gT3BlcmF0aW9uU3BlYyBhbmQgT3BlcmF0aW9uQXJndW1lbnRzIG9uIHRoZSByZXF1ZXN0LlxuICovXG5mdW5jdGlvbiBzZXJpYWxpemF0aW9uUG9saWN5KG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHN0cmluZ2lmeVhNTCA9IG9wdGlvbnMuc3RyaW5naWZ5WE1MO1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGV4cG9ydHMuc2VyaWFsaXphdGlvblBvbGljeU5hbWUsXG4gICAgICAgIGFzeW5jIHNlbmRSZXF1ZXN0KHJlcXVlc3QsIG5leHQpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wZXJhdGlvbkluZm8gPSAoMCwgb3BlcmF0aW9uSGVscGVyc19qc18xLmdldE9wZXJhdGlvblJlcXVlc3RJbmZvKShyZXF1ZXN0KTtcbiAgICAgICAgICAgIGNvbnN0IG9wZXJhdGlvblNwZWMgPSBvcGVyYXRpb25JbmZvID09PSBudWxsIHx8IG9wZXJhdGlvbkluZm8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wZXJhdGlvbkluZm8ub3BlcmF0aW9uU3BlYztcbiAgICAgICAgICAgIGNvbnN0IG9wZXJhdGlvbkFyZ3VtZW50cyA9IG9wZXJhdGlvbkluZm8gPT09IG51bGwgfHwgb3BlcmF0aW9uSW5mbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3BlcmF0aW9uSW5mby5vcGVyYXRpb25Bcmd1bWVudHM7XG4gICAgICAgICAgICBpZiAob3BlcmF0aW9uU3BlYyAmJiBvcGVyYXRpb25Bcmd1bWVudHMpIHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVIZWFkZXJzKHJlcXVlc3QsIG9wZXJhdGlvbkFyZ3VtZW50cywgb3BlcmF0aW9uU3BlYyk7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplUmVxdWVzdEJvZHkocmVxdWVzdCwgb3BlcmF0aW9uQXJndW1lbnRzLCBvcGVyYXRpb25TcGVjLCBzdHJpbmdpZnlYTUwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5leHQocmVxdWVzdCk7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbmV4cG9ydHMuc2VyaWFsaXphdGlvblBvbGljeSA9IHNlcmlhbGl6YXRpb25Qb2xpY3k7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBzZXJpYWxpemVIZWFkZXJzKHJlcXVlc3QsIG9wZXJhdGlvbkFyZ3VtZW50cywgb3BlcmF0aW9uU3BlYykge1xuICAgIHZhciBfYSwgX2I7XG4gICAgaWYgKG9wZXJhdGlvblNwZWMuaGVhZGVyUGFyYW1ldGVycykge1xuICAgICAgICBmb3IgKGNvbnN0IGhlYWRlclBhcmFtZXRlciBvZiBvcGVyYXRpb25TcGVjLmhlYWRlclBhcmFtZXRlcnMpIHtcbiAgICAgICAgICAgIGxldCBoZWFkZXJWYWx1ZSA9ICgwLCBvcGVyYXRpb25IZWxwZXJzX2pzXzEuZ2V0T3BlcmF0aW9uQXJndW1lbnRWYWx1ZUZyb21QYXJhbWV0ZXIpKG9wZXJhdGlvbkFyZ3VtZW50cywgaGVhZGVyUGFyYW1ldGVyKTtcbiAgICAgICAgICAgIGlmICgoaGVhZGVyVmFsdWUgIT09IG51bGwgJiYgaGVhZGVyVmFsdWUgIT09IHVuZGVmaW5lZCkgfHwgaGVhZGVyUGFyYW1ldGVyLm1hcHBlci5yZXF1aXJlZCkge1xuICAgICAgICAgICAgICAgIGhlYWRlclZhbHVlID0gb3BlcmF0aW9uU3BlYy5zZXJpYWxpemVyLnNlcmlhbGl6ZShoZWFkZXJQYXJhbWV0ZXIubWFwcGVyLCBoZWFkZXJWYWx1ZSwgKDAsIGludGVyZmFjZUhlbHBlcnNfanNfMS5nZXRQYXRoU3RyaW5nRnJvbVBhcmFtZXRlcikoaGVhZGVyUGFyYW1ldGVyKSk7XG4gICAgICAgICAgICAgICAgY29uc3QgaGVhZGVyQ29sbGVjdGlvblByZWZpeCA9IGhlYWRlclBhcmFtZXRlci5tYXBwZXJcbiAgICAgICAgICAgICAgICAgICAgLmhlYWRlckNvbGxlY3Rpb25QcmVmaXg7XG4gICAgICAgICAgICAgICAgaWYgKGhlYWRlckNvbGxlY3Rpb25QcmVmaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoaGVhZGVyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmhlYWRlcnMuc2V0KGhlYWRlckNvbGxlY3Rpb25QcmVmaXggKyBrZXksIGhlYWRlclZhbHVlW2tleV0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmhlYWRlcnMuc2V0KGhlYWRlclBhcmFtZXRlci5tYXBwZXIuc2VyaWFsaXplZE5hbWUgfHwgKDAsIGludGVyZmFjZUhlbHBlcnNfanNfMS5nZXRQYXRoU3RyaW5nRnJvbVBhcmFtZXRlcikoaGVhZGVyUGFyYW1ldGVyKSwgaGVhZGVyVmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBjdXN0b21IZWFkZXJzID0gKF9iID0gKF9hID0gb3BlcmF0aW9uQXJndW1lbnRzLm9wdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5yZXF1ZXN0T3B0aW9ucykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmN1c3RvbUhlYWRlcnM7XG4gICAgaWYgKGN1c3RvbUhlYWRlcnMpIHtcbiAgICAgICAgZm9yIChjb25zdCBjdXN0b21IZWFkZXJOYW1lIG9mIE9iamVjdC5rZXlzKGN1c3RvbUhlYWRlcnMpKSB7XG4gICAgICAgICAgICByZXF1ZXN0LmhlYWRlcnMuc2V0KGN1c3RvbUhlYWRlck5hbWUsIGN1c3RvbUhlYWRlcnNbY3VzdG9tSGVhZGVyTmFtZV0pO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5zZXJpYWxpemVIZWFkZXJzID0gc2VyaWFsaXplSGVhZGVycztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIHNlcmlhbGl6ZVJlcXVlc3RCb2R5KHJlcXVlc3QsIG9wZXJhdGlvbkFyZ3VtZW50cywgb3BlcmF0aW9uU3BlYywgc3RyaW5naWZ5WE1MID0gZnVuY3Rpb24gKCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlhNTCBzZXJpYWxpemF0aW9uIHVuc3VwcG9ydGVkIVwiKTtcbn0pIHtcbiAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lO1xuICAgIGNvbnN0IHNlcmlhbGl6ZXJPcHRpb25zID0gKF9hID0gb3BlcmF0aW9uQXJndW1lbnRzLm9wdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zZXJpYWxpemVyT3B0aW9ucztcbiAgICBjb25zdCB1cGRhdGVkT3B0aW9ucyA9IHtcbiAgICAgICAgeG1sOiB7XG4gICAgICAgICAgICByb290TmFtZTogKF9iID0gc2VyaWFsaXplck9wdGlvbnMgPT09IG51bGwgfHwgc2VyaWFsaXplck9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlcmlhbGl6ZXJPcHRpb25zLnhtbC5yb290TmFtZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogXCJcIixcbiAgICAgICAgICAgIGluY2x1ZGVSb290OiAoX2MgPSBzZXJpYWxpemVyT3B0aW9ucyA9PT0gbnVsbCB8fCBzZXJpYWxpemVyT3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VyaWFsaXplck9wdGlvbnMueG1sLmluY2x1ZGVSb290KSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiBmYWxzZSxcbiAgICAgICAgICAgIHhtbENoYXJLZXk6IChfZCA9IHNlcmlhbGl6ZXJPcHRpb25zID09PSBudWxsIHx8IHNlcmlhbGl6ZXJPcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZXJpYWxpemVyT3B0aW9ucy54bWwueG1sQ2hhcktleSkgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDogaW50ZXJmYWNlc19qc18xLlhNTF9DSEFSS0VZLFxuICAgICAgICB9LFxuICAgIH07XG4gICAgY29uc3QgeG1sQ2hhcktleSA9IHVwZGF0ZWRPcHRpb25zLnhtbC54bWxDaGFyS2V5O1xuICAgIGlmIChvcGVyYXRpb25TcGVjLnJlcXVlc3RCb2R5ICYmIG9wZXJhdGlvblNwZWMucmVxdWVzdEJvZHkubWFwcGVyKSB7XG4gICAgICAgIHJlcXVlc3QuYm9keSA9ICgwLCBvcGVyYXRpb25IZWxwZXJzX2pzXzEuZ2V0T3BlcmF0aW9uQXJndW1lbnRWYWx1ZUZyb21QYXJhbWV0ZXIpKG9wZXJhdGlvbkFyZ3VtZW50cywgb3BlcmF0aW9uU3BlYy5yZXF1ZXN0Qm9keSk7XG4gICAgICAgIGNvbnN0IGJvZHlNYXBwZXIgPSBvcGVyYXRpb25TcGVjLnJlcXVlc3RCb2R5Lm1hcHBlcjtcbiAgICAgICAgY29uc3QgeyByZXF1aXJlZCwgc2VyaWFsaXplZE5hbWUsIHhtbE5hbWUsIHhtbEVsZW1lbnROYW1lLCB4bWxOYW1lc3BhY2UsIHhtbE5hbWVzcGFjZVByZWZpeCwgbnVsbGFibGUsIH0gPSBib2R5TWFwcGVyO1xuICAgICAgICBjb25zdCB0eXBlTmFtZSA9IGJvZHlNYXBwZXIudHlwZS5uYW1lO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKChyZXF1ZXN0LmJvZHkgIT09IHVuZGVmaW5lZCAmJiByZXF1ZXN0LmJvZHkgIT09IG51bGwpIHx8XG4gICAgICAgICAgICAgICAgKG51bGxhYmxlICYmIHJlcXVlc3QuYm9keSA9PT0gbnVsbCkgfHxcbiAgICAgICAgICAgICAgICByZXF1aXJlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RCb2R5UGFyYW1ldGVyUGF0aFN0cmluZyA9ICgwLCBpbnRlcmZhY2VIZWxwZXJzX2pzXzEuZ2V0UGF0aFN0cmluZ0Zyb21QYXJhbWV0ZXIpKG9wZXJhdGlvblNwZWMucmVxdWVzdEJvZHkpO1xuICAgICAgICAgICAgICAgIHJlcXVlc3QuYm9keSA9IG9wZXJhdGlvblNwZWMuc2VyaWFsaXplci5zZXJpYWxpemUoYm9keU1hcHBlciwgcmVxdWVzdC5ib2R5LCByZXF1ZXN0Qm9keVBhcmFtZXRlclBhdGhTdHJpbmcsIHVwZGF0ZWRPcHRpb25zKTtcbiAgICAgICAgICAgICAgICBjb25zdCBpc1N0cmVhbSA9IHR5cGVOYW1lID09PSBzZXJpYWxpemVyX2pzXzEuTWFwcGVyVHlwZU5hbWVzLlN0cmVhbTtcbiAgICAgICAgICAgICAgICBpZiAob3BlcmF0aW9uU3BlYy5pc1hNTCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB4bWxuc0tleSA9IHhtbE5hbWVzcGFjZVByZWZpeCA/IGB4bWxuczoke3htbE5hbWVzcGFjZVByZWZpeH1gIDogXCJ4bWxuc1wiO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGdldFhtbFZhbHVlV2l0aE5hbWVzcGFjZSh4bWxOYW1lc3BhY2UsIHhtbG5zS2V5LCB0eXBlTmFtZSwgcmVxdWVzdC5ib2R5LCB1cGRhdGVkT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlTmFtZSA9PT0gc2VyaWFsaXplcl9qc18xLk1hcHBlclR5cGVOYW1lcy5TZXF1ZW5jZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5ib2R5ID0gc3RyaW5naWZ5WE1MKHByZXBhcmVYTUxSb290TGlzdCh2YWx1ZSwgeG1sRWxlbWVudE5hbWUgfHwgeG1sTmFtZSB8fCBzZXJpYWxpemVkTmFtZSwgeG1sbnNLZXksIHhtbE5hbWVzcGFjZSksIHsgcm9vdE5hbWU6IHhtbE5hbWUgfHwgc2VyaWFsaXplZE5hbWUsIHhtbENoYXJLZXkgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIWlzU3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmJvZHkgPSBzdHJpbmdpZnlYTUwodmFsdWUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290TmFtZTogeG1sTmFtZSB8fCBzZXJpYWxpemVkTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxDaGFyS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZU5hbWUgPT09IHNlcmlhbGl6ZXJfanNfMS5NYXBwZXJUeXBlTmFtZXMuU3RyaW5nICYmXG4gICAgICAgICAgICAgICAgICAgICgoKF9lID0gb3BlcmF0aW9uU3BlYy5jb250ZW50VHlwZSkgPT09IG51bGwgfHwgX2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9lLm1hdGNoKFwidGV4dC9wbGFpblwiKSkgfHwgb3BlcmF0aW9uU3BlYy5tZWRpYVR5cGUgPT09IFwidGV4dFwiKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyB0aGUgU3RyaW5nIHNlcmlhbGl6ZXIgaGFzIHZhbGlkYXRlZCB0aGF0IHJlcXVlc3QgYm9keSBpcyBhIHN0cmluZ1xuICAgICAgICAgICAgICAgICAgICAvLyBzbyBqdXN0IHNlbmQgdGhlIHN0cmluZy5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICghaXNTdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5ib2R5ID0gSlNPTi5zdHJpbmdpZnkocmVxdWVzdC5ib2R5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIFwiJHtlcnJvci5tZXNzYWdlfVwiIG9jY3VycmVkIGluIHNlcmlhbGl6aW5nIHRoZSBwYXlsb2FkIC0gJHtKU09OLnN0cmluZ2lmeShzZXJpYWxpemVkTmFtZSwgdW5kZWZpbmVkLCBcIiAgXCIpfS5gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChvcGVyYXRpb25TcGVjLmZvcm1EYXRhUGFyYW1ldGVycyAmJiBvcGVyYXRpb25TcGVjLmZvcm1EYXRhUGFyYW1ldGVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJlcXVlc3QuZm9ybURhdGEgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBmb3JtRGF0YVBhcmFtZXRlciBvZiBvcGVyYXRpb25TcGVjLmZvcm1EYXRhUGFyYW1ldGVycykge1xuICAgICAgICAgICAgY29uc3QgZm9ybURhdGFQYXJhbWV0ZXJWYWx1ZSA9ICgwLCBvcGVyYXRpb25IZWxwZXJzX2pzXzEuZ2V0T3BlcmF0aW9uQXJndW1lbnRWYWx1ZUZyb21QYXJhbWV0ZXIpKG9wZXJhdGlvbkFyZ3VtZW50cywgZm9ybURhdGFQYXJhbWV0ZXIpO1xuICAgICAgICAgICAgaWYgKGZvcm1EYXRhUGFyYW1ldGVyVmFsdWUgIT09IHVuZGVmaW5lZCAmJiBmb3JtRGF0YVBhcmFtZXRlclZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZm9ybURhdGFQYXJhbWV0ZXJQcm9wZXJ0eU5hbWUgPSBmb3JtRGF0YVBhcmFtZXRlci5tYXBwZXIuc2VyaWFsaXplZE5hbWUgfHwgKDAsIGludGVyZmFjZUhlbHBlcnNfanNfMS5nZXRQYXRoU3RyaW5nRnJvbVBhcmFtZXRlcikoZm9ybURhdGFQYXJhbWV0ZXIpO1xuICAgICAgICAgICAgICAgIHJlcXVlc3QuZm9ybURhdGFbZm9ybURhdGFQYXJhbWV0ZXJQcm9wZXJ0eU5hbWVdID0gb3BlcmF0aW9uU3BlYy5zZXJpYWxpemVyLnNlcmlhbGl6ZShmb3JtRGF0YVBhcmFtZXRlci5tYXBwZXIsIGZvcm1EYXRhUGFyYW1ldGVyVmFsdWUsICgwLCBpbnRlcmZhY2VIZWxwZXJzX2pzXzEuZ2V0UGF0aFN0cmluZ0Zyb21QYXJhbWV0ZXIpKGZvcm1EYXRhUGFyYW1ldGVyKSwgdXBkYXRlZE9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5zZXJpYWxpemVSZXF1ZXN0Qm9keSA9IHNlcmlhbGl6ZVJlcXVlc3RCb2R5O1xuLyoqXG4gKiBBZGRzIGFuIHhtbCBuYW1lc3BhY2UgdG8gdGhlIHhtbCBzZXJpYWxpemVkIG9iamVjdCBpZiBuZWVkZWQsIG90aGVyd2lzZSBpdCBqdXN0IHJldHVybnMgdGhlIHZhbHVlIGl0c2VsZlxuICovXG5mdW5jdGlvbiBnZXRYbWxWYWx1ZVdpdGhOYW1lc3BhY2UoeG1sTmFtZXNwYWNlLCB4bWxuc0tleSwgdHlwZU5hbWUsIHNlcmlhbGl6ZWRWYWx1ZSwgb3B0aW9ucykge1xuICAgIC8vIENvbXBvc2l0ZSBhbmQgU2VxdWVuY2Ugc2NoZW1hcyBhbHJlYWR5IGdvdCB0aGVpciByb290IG5hbWVzcGFjZSBzZXQgZHVyaW5nIHNlcmlhbGl6YXRpb25cbiAgICAvLyBXZSBqdXN0IG5lZWQgdG8gYWRkIHhtbG5zIHRvIHRoZSBvdGhlciBzY2hlbWEgdHlwZXNcbiAgICBpZiAoeG1sTmFtZXNwYWNlICYmICFbXCJDb21wb3NpdGVcIiwgXCJTZXF1ZW5jZVwiLCBcIkRpY3Rpb25hcnlcIl0uaW5jbHVkZXModHlwZU5hbWUpKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgICAgICByZXN1bHRbb3B0aW9ucy54bWwueG1sQ2hhcktleV0gPSBzZXJpYWxpemVkVmFsdWU7XG4gICAgICAgIHJlc3VsdFtpbnRlcmZhY2VzX2pzXzEuWE1MX0FUVFJLRVldID0geyBbeG1sbnNLZXldOiB4bWxOYW1lc3BhY2UgfTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgcmV0dXJuIHNlcmlhbGl6ZWRWYWx1ZTtcbn1cbmZ1bmN0aW9uIHByZXBhcmVYTUxSb290TGlzdChvYmosIGVsZW1lbnROYW1lLCB4bWxOYW1lc3BhY2VLZXksIHhtbE5hbWVzcGFjZSkge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgICAgIG9iaiA9IFtvYmpdO1xuICAgIH1cbiAgICBpZiAoIXhtbE5hbWVzcGFjZUtleSB8fCAheG1sTmFtZXNwYWNlKSB7XG4gICAgICAgIHJldHVybiB7IFtlbGVtZW50TmFtZV06IG9iaiB9O1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSB7IFtlbGVtZW50TmFtZV06IG9iaiB9O1xuICAgIHJlc3VsdFtpbnRlcmZhY2VzX2pzXzEuWE1MX0FUVFJLRVldID0geyBbeG1sTmFtZXNwYWNlS2V5XTogeG1sTmFtZXNwYWNlIH07XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNlcmlhbGl6YXRpb25Qb2xpY3kuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jcmVhdGVDbGllbnRQaXBlbGluZSA9IHZvaWQgMDtcbmNvbnN0IGRlc2VyaWFsaXphdGlvblBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vZGVzZXJpYWxpemF0aW9uUG9saWN5LmpzXCIpO1xuY29uc3QgY29yZV9yZXN0X3BpcGVsaW5lXzEgPSByZXF1aXJlKFwiQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZVwiKTtcbmNvbnN0IHNlcmlhbGl6YXRpb25Qb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3NlcmlhbGl6YXRpb25Qb2xpY3kuanNcIik7XG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgUGlwZWxpbmUgZm9yIHVzZSB3aXRoIGEgU2VydmljZSBDbGllbnQuXG4gKiBBZGRzIGluIGRlc2VyaWFsaXphdGlvblBvbGljeSBieSBkZWZhdWx0LlxuICogQWxzbyBhZGRzIGluIGJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3kgaWYgcGFzc2VkIGEgVG9rZW5DcmVkZW50aWFsLlxuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIGN1c3RvbWl6ZSB0aGUgY3JlYXRlZCBwaXBlbGluZS5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQ2xpZW50UGlwZWxpbmUob3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgcGlwZWxpbmUgPSAoMCwgY29yZV9yZXN0X3BpcGVsaW5lXzEuY3JlYXRlUGlwZWxpbmVGcm9tT3B0aW9ucykob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgPyBvcHRpb25zIDoge30pO1xuICAgIGlmIChvcHRpb25zLmNyZWRlbnRpYWxPcHRpb25zKSB7XG4gICAgICAgIHBpcGVsaW5lLmFkZFBvbGljeSgoMCwgY29yZV9yZXN0X3BpcGVsaW5lXzEuYmVhcmVyVG9rZW5BdXRoZW50aWNhdGlvblBvbGljeSkoe1xuICAgICAgICAgICAgY3JlZGVudGlhbDogb3B0aW9ucy5jcmVkZW50aWFsT3B0aW9ucy5jcmVkZW50aWFsLFxuICAgICAgICAgICAgc2NvcGVzOiBvcHRpb25zLmNyZWRlbnRpYWxPcHRpb25zLmNyZWRlbnRpYWxTY29wZXMsXG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgcGlwZWxpbmUuYWRkUG9saWN5KCgwLCBzZXJpYWxpemF0aW9uUG9saWN5X2pzXzEuc2VyaWFsaXphdGlvblBvbGljeSkob3B0aW9ucy5zZXJpYWxpemF0aW9uT3B0aW9ucyksIHsgcGhhc2U6IFwiU2VyaWFsaXplXCIgfSk7XG4gICAgcGlwZWxpbmUuYWRkUG9saWN5KCgwLCBkZXNlcmlhbGl6YXRpb25Qb2xpY3lfanNfMS5kZXNlcmlhbGl6YXRpb25Qb2xpY3kpKG9wdGlvbnMuZGVzZXJpYWxpemF0aW9uT3B0aW9ucyksIHtcbiAgICAgICAgcGhhc2U6IFwiRGVzZXJpYWxpemVcIixcbiAgICB9KTtcbiAgICByZXR1cm4gcGlwZWxpbmU7XG59XG5leHBvcnRzLmNyZWF0ZUNsaWVudFBpcGVsaW5lID0gY3JlYXRlQ2xpZW50UGlwZWxpbmU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1waXBlbGluZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldENhY2hlZERlZmF1bHRIdHRwQ2xpZW50ID0gdm9pZCAwO1xuY29uc3QgY29yZV9yZXN0X3BpcGVsaW5lXzEgPSByZXF1aXJlKFwiQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZVwiKTtcbmxldCBjYWNoZWRIdHRwQ2xpZW50O1xuZnVuY3Rpb24gZ2V0Q2FjaGVkRGVmYXVsdEh0dHBDbGllbnQoKSB7XG4gICAgaWYgKCFjYWNoZWRIdHRwQ2xpZW50KSB7XG4gICAgICAgIGNhY2hlZEh0dHBDbGllbnQgPSAoMCwgY29yZV9yZXN0X3BpcGVsaW5lXzEuY3JlYXRlRGVmYXVsdEh0dHBDbGllbnQpKCk7XG4gICAgfVxuICAgIHJldHVybiBjYWNoZWRIdHRwQ2xpZW50O1xufVxuZXhwb3J0cy5nZXRDYWNoZWREZWZhdWx0SHR0cENsaWVudCA9IGdldENhY2hlZERlZmF1bHRIdHRwQ2xpZW50O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aHR0cENsaWVudENhY2hlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYXBwZW5kUXVlcnlQYXJhbXMgPSBleHBvcnRzLmdldFJlcXVlc3RVcmwgPSB2b2lkIDA7XG5jb25zdCBvcGVyYXRpb25IZWxwZXJzX2pzXzEgPSByZXF1aXJlKFwiLi9vcGVyYXRpb25IZWxwZXJzLmpzXCIpO1xuY29uc3QgaW50ZXJmYWNlSGVscGVyc19qc18xID0gcmVxdWlyZShcIi4vaW50ZXJmYWNlSGVscGVycy5qc1wiKTtcbmNvbnN0IENvbGxlY3Rpb25Gb3JtYXRUb0RlbGltaXRlck1hcCA9IHtcbiAgICBDU1Y6IFwiLFwiLFxuICAgIFNTVjogXCIgXCIsXG4gICAgTXVsdGk6IFwiTXVsdGlcIixcbiAgICBUU1Y6IFwiXFx0XCIsXG4gICAgUGlwZXM6IFwifFwiLFxufTtcbmZ1bmN0aW9uIGdldFJlcXVlc3RVcmwoYmFzZVVyaSwgb3BlcmF0aW9uU3BlYywgb3BlcmF0aW9uQXJndW1lbnRzLCBmYWxsYmFja09iamVjdCkge1xuICAgIGNvbnN0IHVybFJlcGxhY2VtZW50cyA9IGNhbGN1bGF0ZVVybFJlcGxhY2VtZW50cyhvcGVyYXRpb25TcGVjLCBvcGVyYXRpb25Bcmd1bWVudHMsIGZhbGxiYWNrT2JqZWN0KTtcbiAgICBsZXQgaXNBYnNvbHV0ZVBhdGggPSBmYWxzZTtcbiAgICBsZXQgcmVxdWVzdFVybCA9IHJlcGxhY2VBbGwoYmFzZVVyaSwgdXJsUmVwbGFjZW1lbnRzKTtcbiAgICBpZiAob3BlcmF0aW9uU3BlYy5wYXRoKSB7XG4gICAgICAgIGxldCBwYXRoID0gcmVwbGFjZUFsbChvcGVyYXRpb25TcGVjLnBhdGgsIHVybFJlcGxhY2VtZW50cyk7XG4gICAgICAgIC8vIFFVSVJLOiBzb21ldGltZXMgd2UgZ2V0IGEgcGF0aCBjb21wb25lbnQgbGlrZSAve25leHRMaW5rfVxuICAgICAgICAvLyB3aGljaCBtYXkgYmUgYSBmdWxseSBmb3JtZWQgVVJMIHdpdGggYSBsZWFkaW5nIC8uIEluIHRoYXQgY2FzZSwgd2Ugc2hvdWxkXG4gICAgICAgIC8vIHJlbW92ZSB0aGUgbGVhZGluZyAvXG4gICAgICAgIGlmIChvcGVyYXRpb25TcGVjLnBhdGggPT09IFwiL3tuZXh0TGlua31cIiAmJiBwYXRoLnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG4gICAgICAgICAgICBwYXRoID0gcGF0aC5zdWJzdHJpbmcoMSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUVVJUks6IHNvbWV0aW1lcyB3ZSBnZXQgYSBwYXRoIGNvbXBvbmVudCBsaWtlIHtuZXh0TGlua31cbiAgICAgICAgLy8gd2hpY2ggbWF5IGJlIGEgZnVsbHkgZm9ybWVkIFVSTC4gSW4gdGhhdCBjYXNlLCB3ZSBzaG91bGRcbiAgICAgICAgLy8gaWdub3JlIHRoZSBiYXNlVXJpLlxuICAgICAgICBpZiAoaXNBYnNvbHV0ZVVybChwYXRoKSkge1xuICAgICAgICAgICAgcmVxdWVzdFVybCA9IHBhdGg7XG4gICAgICAgICAgICBpc0Fic29sdXRlUGF0aCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXF1ZXN0VXJsID0gYXBwZW5kUGF0aChyZXF1ZXN0VXJsLCBwYXRoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCB7IHF1ZXJ5UGFyYW1zLCBzZXF1ZW5jZVBhcmFtcyB9ID0gY2FsY3VsYXRlUXVlcnlQYXJhbWV0ZXJzKG9wZXJhdGlvblNwZWMsIG9wZXJhdGlvbkFyZ3VtZW50cywgZmFsbGJhY2tPYmplY3QpO1xuICAgIC8qKlxuICAgICAqIE5vdGljZSB0aGF0IHRoaXMgY2FsbCBzZXRzIHRoZSBgbm9PdmVyd3JpdGVgIHBhcmFtZXRlciB0byB0cnVlIGlmIHRoZSBgcmVxdWVzdFVybGBcbiAgICAgKiBpcyBhbiBhYnNvbHV0ZSBwYXRoLiBUaGlzIGVuc3VyZXMgdGhhdCBleGlzdGluZyBxdWVyeSBwYXJhbWV0ZXIgdmFsdWVzIGluIGByZXF1ZXN0VXJsYFxuICAgICAqIGRvIG5vdCBnZXQgb3ZlcndyaXR0ZW4uIE9uIHRoZSBvdGhlciBoYW5kIHdoZW4gYHJlcXVlc3RVcmxgIGlzIG5vdCBhYnNvbHV0ZSBwYXRoLCBpdFxuICAgICAqIGlzIHN0aWxsIGJlaW5nIGJ1aWx0IHNvIHRoZXJlIGlzIG5vdGhpbmcgdG8gb3ZlcndyaXRlLlxuICAgICAqL1xuICAgIHJlcXVlc3RVcmwgPSBhcHBlbmRRdWVyeVBhcmFtcyhyZXF1ZXN0VXJsLCBxdWVyeVBhcmFtcywgc2VxdWVuY2VQYXJhbXMsIGlzQWJzb2x1dGVQYXRoKTtcbiAgICByZXR1cm4gcmVxdWVzdFVybDtcbn1cbmV4cG9ydHMuZ2V0UmVxdWVzdFVybCA9IGdldFJlcXVlc3RVcmw7XG5mdW5jdGlvbiByZXBsYWNlQWxsKGlucHV0LCByZXBsYWNlbWVudHMpIHtcbiAgICBsZXQgcmVzdWx0ID0gaW5wdXQ7XG4gICAgZm9yIChjb25zdCBbc2VhcmNoVmFsdWUsIHJlcGxhY2VWYWx1ZV0gb2YgcmVwbGFjZW1lbnRzKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdC5zcGxpdChzZWFyY2hWYWx1ZSkuam9pbihyZXBsYWNlVmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gY2FsY3VsYXRlVXJsUmVwbGFjZW1lbnRzKG9wZXJhdGlvblNwZWMsIG9wZXJhdGlvbkFyZ3VtZW50cywgZmFsbGJhY2tPYmplY3QpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IE1hcCgpO1xuICAgIGlmICgoX2EgPSBvcGVyYXRpb25TcGVjLnVybFBhcmFtZXRlcnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5sZW5ndGgpIHtcbiAgICAgICAgZm9yIChjb25zdCB1cmxQYXJhbWV0ZXIgb2Ygb3BlcmF0aW9uU3BlYy51cmxQYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgICBsZXQgdXJsUGFyYW1ldGVyVmFsdWUgPSAoMCwgb3BlcmF0aW9uSGVscGVyc19qc18xLmdldE9wZXJhdGlvbkFyZ3VtZW50VmFsdWVGcm9tUGFyYW1ldGVyKShvcGVyYXRpb25Bcmd1bWVudHMsIHVybFBhcmFtZXRlciwgZmFsbGJhY2tPYmplY3QpO1xuICAgICAgICAgICAgY29uc3QgcGFyYW1ldGVyUGF0aFN0cmluZyA9ICgwLCBpbnRlcmZhY2VIZWxwZXJzX2pzXzEuZ2V0UGF0aFN0cmluZ0Zyb21QYXJhbWV0ZXIpKHVybFBhcmFtZXRlcik7XG4gICAgICAgICAgICB1cmxQYXJhbWV0ZXJWYWx1ZSA9IG9wZXJhdGlvblNwZWMuc2VyaWFsaXplci5zZXJpYWxpemUodXJsUGFyYW1ldGVyLm1hcHBlciwgdXJsUGFyYW1ldGVyVmFsdWUsIHBhcmFtZXRlclBhdGhTdHJpbmcpO1xuICAgICAgICAgICAgaWYgKCF1cmxQYXJhbWV0ZXIuc2tpcEVuY29kaW5nKSB7XG4gICAgICAgICAgICAgICAgdXJsUGFyYW1ldGVyVmFsdWUgPSBlbmNvZGVVUklDb21wb25lbnQodXJsUGFyYW1ldGVyVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0LnNldChgeyR7dXJsUGFyYW1ldGVyLm1hcHBlci5zZXJpYWxpemVkTmFtZSB8fCBwYXJhbWV0ZXJQYXRoU3RyaW5nfX1gLCB1cmxQYXJhbWV0ZXJWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIGlzQWJzb2x1dGVVcmwodXJsKSB7XG4gICAgcmV0dXJuIHVybC5pbmNsdWRlcyhcIjovL1wiKTtcbn1cbmZ1bmN0aW9uIGFwcGVuZFBhdGgodXJsLCBwYXRoVG9BcHBlbmQpIHtcbiAgICBpZiAoIXBhdGhUb0FwcGVuZCkge1xuICAgICAgICByZXR1cm4gdXJsO1xuICAgIH1cbiAgICBjb25zdCBwYXJzZWRVcmwgPSBuZXcgVVJMKHVybCk7XG4gICAgbGV0IG5ld1BhdGggPSBwYXJzZWRVcmwucGF0aG5hbWU7XG4gICAgaWYgKCFuZXdQYXRoLmVuZHNXaXRoKFwiL1wiKSkge1xuICAgICAgICBuZXdQYXRoID0gYCR7bmV3UGF0aH0vYDtcbiAgICB9XG4gICAgaWYgKHBhdGhUb0FwcGVuZC5zdGFydHNXaXRoKFwiL1wiKSkge1xuICAgICAgICBwYXRoVG9BcHBlbmQgPSBwYXRoVG9BcHBlbmQuc3Vic3RyaW5nKDEpO1xuICAgIH1cbiAgICBjb25zdCBzZWFyY2hTdGFydCA9IHBhdGhUb0FwcGVuZC5pbmRleE9mKFwiP1wiKTtcbiAgICBpZiAoc2VhcmNoU3RhcnQgIT09IC0xKSB7XG4gICAgICAgIGNvbnN0IHBhdGggPSBwYXRoVG9BcHBlbmQuc3Vic3RyaW5nKDAsIHNlYXJjaFN0YXJ0KTtcbiAgICAgICAgY29uc3Qgc2VhcmNoID0gcGF0aFRvQXBwZW5kLnN1YnN0cmluZyhzZWFyY2hTdGFydCArIDEpO1xuICAgICAgICBuZXdQYXRoID0gbmV3UGF0aCArIHBhdGg7XG4gICAgICAgIGlmIChzZWFyY2gpIHtcbiAgICAgICAgICAgIHBhcnNlZFVybC5zZWFyY2ggPSBwYXJzZWRVcmwuc2VhcmNoID8gYCR7cGFyc2VkVXJsLnNlYXJjaH0mJHtzZWFyY2h9YCA6IHNlYXJjaDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgbmV3UGF0aCA9IG5ld1BhdGggKyBwYXRoVG9BcHBlbmQ7XG4gICAgfVxuICAgIHBhcnNlZFVybC5wYXRobmFtZSA9IG5ld1BhdGg7XG4gICAgcmV0dXJuIHBhcnNlZFVybC50b1N0cmluZygpO1xufVxuZnVuY3Rpb24gY2FsY3VsYXRlUXVlcnlQYXJhbWV0ZXJzKG9wZXJhdGlvblNwZWMsIG9wZXJhdGlvbkFyZ3VtZW50cywgZmFsbGJhY2tPYmplY3QpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0IHNlcXVlbmNlUGFyYW1zID0gbmV3IFNldCgpO1xuICAgIGlmICgoX2EgPSBvcGVyYXRpb25TcGVjLnF1ZXJ5UGFyYW1ldGVycykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmxlbmd0aCkge1xuICAgICAgICBmb3IgKGNvbnN0IHF1ZXJ5UGFyYW1ldGVyIG9mIG9wZXJhdGlvblNwZWMucXVlcnlQYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgICBpZiAocXVlcnlQYXJhbWV0ZXIubWFwcGVyLnR5cGUubmFtZSA9PT0gXCJTZXF1ZW5jZVwiICYmIHF1ZXJ5UGFyYW1ldGVyLm1hcHBlci5zZXJpYWxpemVkTmFtZSkge1xuICAgICAgICAgICAgICAgIHNlcXVlbmNlUGFyYW1zLmFkZChxdWVyeVBhcmFtZXRlci5tYXBwZXIuc2VyaWFsaXplZE5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHF1ZXJ5UGFyYW1ldGVyVmFsdWUgPSAoMCwgb3BlcmF0aW9uSGVscGVyc19qc18xLmdldE9wZXJhdGlvbkFyZ3VtZW50VmFsdWVGcm9tUGFyYW1ldGVyKShvcGVyYXRpb25Bcmd1bWVudHMsIHF1ZXJ5UGFyYW1ldGVyLCBmYWxsYmFja09iamVjdCk7XG4gICAgICAgICAgICBpZiAoKHF1ZXJ5UGFyYW1ldGVyVmFsdWUgIT09IHVuZGVmaW5lZCAmJiBxdWVyeVBhcmFtZXRlclZhbHVlICE9PSBudWxsKSB8fFxuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVyLm1hcHBlci5yZXF1aXJlZCkge1xuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVyVmFsdWUgPSBvcGVyYXRpb25TcGVjLnNlcmlhbGl6ZXIuc2VyaWFsaXplKHF1ZXJ5UGFyYW1ldGVyLm1hcHBlciwgcXVlcnlQYXJhbWV0ZXJWYWx1ZSwgKDAsIGludGVyZmFjZUhlbHBlcnNfanNfMS5nZXRQYXRoU3RyaW5nRnJvbVBhcmFtZXRlcikocXVlcnlQYXJhbWV0ZXIpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkZWxpbWl0ZXIgPSBxdWVyeVBhcmFtZXRlci5jb2xsZWN0aW9uRm9ybWF0XG4gICAgICAgICAgICAgICAgICAgID8gQ29sbGVjdGlvbkZvcm1hdFRvRGVsaW1pdGVyTWFwW3F1ZXJ5UGFyYW1ldGVyLmNvbGxlY3Rpb25Gb3JtYXRdXG4gICAgICAgICAgICAgICAgICAgIDogXCJcIjtcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShxdWVyeVBhcmFtZXRlclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyByZXBsYWNlIG51bGwgYW5kIHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtZXRlclZhbHVlID0gcXVlcnlQYXJhbWV0ZXJWYWx1ZS5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtID09PSBudWxsIHx8IGl0ZW0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocXVlcnlQYXJhbWV0ZXIuY29sbGVjdGlvbkZvcm1hdCA9PT0gXCJNdWx0aVwiICYmIHF1ZXJ5UGFyYW1ldGVyVmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHF1ZXJ5UGFyYW1ldGVyVmFsdWUpICYmXG4gICAgICAgICAgICAgICAgICAgIChxdWVyeVBhcmFtZXRlci5jb2xsZWN0aW9uRm9ybWF0ID09PSBcIlNTVlwiIHx8IHF1ZXJ5UGFyYW1ldGVyLmNvbGxlY3Rpb25Gb3JtYXQgPT09IFwiVFNWXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVyVmFsdWUgPSBxdWVyeVBhcmFtZXRlclZhbHVlLmpvaW4oZGVsaW1pdGVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFxdWVyeVBhcmFtZXRlci5za2lwRW5jb2RpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocXVlcnlQYXJhbWV0ZXJWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVyVmFsdWUgPSBxdWVyeVBhcmFtZXRlclZhbHVlLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVyVmFsdWUgPSBlbmNvZGVVUklDb21wb25lbnQocXVlcnlQYXJhbWV0ZXJWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gSm9pbiBwaXBlcyBhbmQgQ1NWICphZnRlciogZW5jb2RpbmcsIG9yIHRoZSBzZXJ2ZXIgd2lsbCBiZSB1cHNldC5cbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShxdWVyeVBhcmFtZXRlclZhbHVlKSAmJlxuICAgICAgICAgICAgICAgICAgICAocXVlcnlQYXJhbWV0ZXIuY29sbGVjdGlvbkZvcm1hdCA9PT0gXCJDU1ZcIiB8fCBxdWVyeVBhcmFtZXRlci5jb2xsZWN0aW9uRm9ybWF0ID09PSBcIlBpcGVzXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVyVmFsdWUgPSBxdWVyeVBhcmFtZXRlclZhbHVlLmpvaW4oZGVsaW1pdGVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzdWx0LnNldChxdWVyeVBhcmFtZXRlci5tYXBwZXIuc2VyaWFsaXplZE5hbWUgfHwgKDAsIGludGVyZmFjZUhlbHBlcnNfanNfMS5nZXRQYXRoU3RyaW5nRnJvbVBhcmFtZXRlcikocXVlcnlQYXJhbWV0ZXIpLCBxdWVyeVBhcmFtZXRlclZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBxdWVyeVBhcmFtczogcmVzdWx0LFxuICAgICAgICBzZXF1ZW5jZVBhcmFtcyxcbiAgICB9O1xufVxuZnVuY3Rpb24gc2ltcGxlUGFyc2VRdWVyeVBhcmFtcyhxdWVyeVN0cmluZykge1xuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBNYXAoKTtcbiAgICBpZiAoIXF1ZXJ5U3RyaW5nIHx8IHF1ZXJ5U3RyaW5nWzBdICE9PSBcIj9cIikge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICAvLyByZW1vdmUgdGhlIGxlYWRpbmcgP1xuICAgIHF1ZXJ5U3RyaW5nID0gcXVlcnlTdHJpbmcuc2xpY2UoMSk7XG4gICAgY29uc3QgcGFpcnMgPSBxdWVyeVN0cmluZy5zcGxpdChcIiZcIik7XG4gICAgZm9yIChjb25zdCBwYWlyIG9mIHBhaXJzKSB7XG4gICAgICAgIGNvbnN0IFtuYW1lLCB2YWx1ZV0gPSBwYWlyLnNwbGl0KFwiPVwiLCAyKTtcbiAgICAgICAgY29uc3QgZXhpc3RpbmdWYWx1ZSA9IHJlc3VsdC5nZXQobmFtZSk7XG4gICAgICAgIGlmIChleGlzdGluZ1ZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShleGlzdGluZ1ZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGV4aXN0aW5nVmFsdWUucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuc2V0KG5hbWUsIFtleGlzdGluZ1ZhbHVlLCB2YWx1ZV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0LnNldChuYW1lLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIGFwcGVuZFF1ZXJ5UGFyYW1zKHVybCwgcXVlcnlQYXJhbXMsIHNlcXVlbmNlUGFyYW1zLCBub092ZXJ3cml0ZSA9IGZhbHNlKSB7XG4gICAgaWYgKHF1ZXJ5UGFyYW1zLnNpemUgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG4gICAgY29uc3QgcGFyc2VkVXJsID0gbmV3IFVSTCh1cmwpO1xuICAgIC8vIFFVSVJLOiBwYXJzZWRVcmwuc2VhcmNoUGFyYW1zIHdpbGwgaGF2ZSB0aGVpciBuYW1lL3ZhbHVlIHBhaXJzIGRlY29kZWQsIHdoaWNoXG4gICAgLy8gY2FuIGNoYW5nZSB0aGVpciBtZWFuaW5nIHRvIHRoZSBzZXJ2ZXIsIHN1Y2ggYXMgaW4gdGhlIGNhc2Ugb2YgYSBTQVMgc2lnbmF0dXJlLlxuICAgIC8vIFRvIGF2b2lkIGFjY2lkZW50YWxseSB1bi1lbmNvZGluZyBhIHF1ZXJ5IHBhcmFtLCB3ZSBwYXJzZSB0aGUga2V5L3ZhbHVlcyBvdXJzZWx2ZXNcbiAgICBjb25zdCBjb21iaW5lZFBhcmFtcyA9IHNpbXBsZVBhcnNlUXVlcnlQYXJhbXMocGFyc2VkVXJsLnNlYXJjaCk7XG4gICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIHF1ZXJ5UGFyYW1zKSB7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nVmFsdWUgPSBjb21iaW5lZFBhcmFtcy5nZXQobmFtZSk7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGV4aXN0aW5nVmFsdWUpKSB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBleGlzdGluZ1ZhbHVlLnB1c2goLi4udmFsdWUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlU2V0ID0gbmV3IFNldChleGlzdGluZ1ZhbHVlKTtcbiAgICAgICAgICAgICAgICBjb21iaW5lZFBhcmFtcy5zZXQobmFtZSwgQXJyYXkuZnJvbSh2YWx1ZVNldCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZXhpc3RpbmdWYWx1ZS5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChleGlzdGluZ1ZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZS51bnNoaWZ0KGV4aXN0aW5nVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoc2VxdWVuY2VQYXJhbXMuaGFzKG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgY29tYmluZWRQYXJhbXMuc2V0KG5hbWUsIFtleGlzdGluZ1ZhbHVlLCB2YWx1ZV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFub092ZXJ3cml0ZSkge1xuICAgICAgICAgICAgICAgIGNvbWJpbmVkUGFyYW1zLnNldChuYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb21iaW5lZFBhcmFtcy5zZXQobmFtZSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHNlYXJjaFBpZWNlcyA9IFtdO1xuICAgIGZvciAoY29uc3QgW25hbWUsIHZhbHVlXSBvZiBjb21iaW5lZFBhcmFtcykge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBzZWFyY2hQaWVjZXMucHVzaChgJHtuYW1lfT0ke3ZhbHVlfWApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAvLyBRVUlSSzogSWYgd2UgZ2V0IGFuIGFycmF5IG9mIHZhbHVlcywgaW5jbHVkZSBtdWx0aXBsZSBrZXkvdmFsdWUgcGFpcnNcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc3ViVmFsdWUgb2YgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICBzZWFyY2hQaWVjZXMucHVzaChgJHtuYW1lfT0ke3N1YlZhbHVlfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc2VhcmNoUGllY2VzLnB1c2goYCR7bmFtZX09JHt2YWx1ZX1gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBRVUlSSzogd2UgaGF2ZSB0byBzZXQgc2VhcmNoIG1hbnVhbGx5IGFzIHNlYXJjaFBhcmFtcyB3aWxsIGVuY29kZSBjb21tYSB3aGVuIGl0IHNob3VsZG4ndC5cbiAgICBwYXJzZWRVcmwuc2VhcmNoID0gc2VhcmNoUGllY2VzLmxlbmd0aCA/IGA/JHtzZWFyY2hQaWVjZXMuam9pbihcIiZcIil9YCA6IFwiXCI7XG4gICAgcmV0dXJuIHBhcnNlZFVybC50b1N0cmluZygpO1xufVxuZXhwb3J0cy5hcHBlbmRRdWVyeVBhcmFtcyA9IGFwcGVuZFF1ZXJ5UGFyYW1zO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXJsSGVscGVycy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmxvZ2dlciA9IHZvaWQgMDtcbmNvbnN0IGxvZ2dlcl8xID0gcmVxdWlyZShcIkBhenVyZS9sb2dnZXJcIik7XG5leHBvcnRzLmxvZ2dlciA9ICgwLCBsb2dnZXJfMS5jcmVhdGVDbGllbnRMb2dnZXIpKFwiY29yZS1jbGllbnRcIik7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1sb2cuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TZXJ2aWNlQ2xpZW50ID0gdm9pZCAwO1xuY29uc3QgY29yZV9yZXN0X3BpcGVsaW5lXzEgPSByZXF1aXJlKFwiQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZVwiKTtcbmNvbnN0IHBpcGVsaW5lX2pzXzEgPSByZXF1aXJlKFwiLi9waXBlbGluZS5qc1wiKTtcbmNvbnN0IHV0aWxzX2pzXzEgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IGh0dHBDbGllbnRDYWNoZV9qc18xID0gcmVxdWlyZShcIi4vaHR0cENsaWVudENhY2hlLmpzXCIpO1xuY29uc3Qgb3BlcmF0aW9uSGVscGVyc19qc18xID0gcmVxdWlyZShcIi4vb3BlcmF0aW9uSGVscGVycy5qc1wiKTtcbmNvbnN0IHVybEhlbHBlcnNfanNfMSA9IHJlcXVpcmUoXCIuL3VybEhlbHBlcnMuanNcIik7XG5jb25zdCBpbnRlcmZhY2VIZWxwZXJzX2pzXzEgPSByZXF1aXJlKFwiLi9pbnRlcmZhY2VIZWxwZXJzLmpzXCIpO1xuY29uc3QgbG9nX2pzXzEgPSByZXF1aXJlKFwiLi9sb2cuanNcIik7XG4vKipcbiAqIEluaXRpYWxpemVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBTZXJ2aWNlQ2xpZW50LlxuICovXG5jbGFzcyBTZXJ2aWNlQ2xpZW50IHtcbiAgICAvKipcbiAgICAgKiBUaGUgU2VydmljZUNsaWVudCBjb25zdHJ1Y3RvclxuICAgICAqIEBwYXJhbSBjcmVkZW50aWFsIC0gVGhlIGNyZWRlbnRpYWxzIHVzZWQgZm9yIGF1dGhlbnRpY2F0aW9uIHdpdGggdGhlIHNlcnZpY2UuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgc2VydmljZSBjbGllbnQgb3B0aW9ucyB0aGF0IGdvdmVybiB0aGUgYmVoYXZpb3Igb2YgdGhlIGNsaWVudC5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgdGhpcy5fcmVxdWVzdENvbnRlbnRUeXBlID0gb3B0aW9ucy5yZXF1ZXN0Q29udGVudFR5cGU7XG4gICAgICAgIHRoaXMuX2VuZHBvaW50ID0gKF9hID0gb3B0aW9ucy5lbmRwb2ludCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogb3B0aW9ucy5iYXNlVXJpO1xuICAgICAgICBpZiAob3B0aW9ucy5iYXNlVXJpKSB7XG4gICAgICAgICAgICBsb2dfanNfMS5sb2dnZXIud2FybmluZyhcIlRoZSBiYXNlVXJpIG9wdGlvbiBmb3IgU0RLIENsaWVudHMgaGFzIGJlZW4gZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSBlbmRwb2ludCBpbnN0ZWFkLlwiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9hbGxvd0luc2VjdXJlQ29ubmVjdGlvbiA9IG9wdGlvbnMuYWxsb3dJbnNlY3VyZUNvbm5lY3Rpb247XG4gICAgICAgIHRoaXMuX2h0dHBDbGllbnQgPSBvcHRpb25zLmh0dHBDbGllbnQgfHwgKDAsIGh0dHBDbGllbnRDYWNoZV9qc18xLmdldENhY2hlZERlZmF1bHRIdHRwQ2xpZW50KSgpO1xuICAgICAgICB0aGlzLnBpcGVsaW5lID0gb3B0aW9ucy5waXBlbGluZSB8fCBjcmVhdGVEZWZhdWx0UGlwZWxpbmUob3B0aW9ucyk7XG4gICAgICAgIGlmICgoX2IgPSBvcHRpb25zLmFkZGl0aW9uYWxQb2xpY2llcykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmxlbmd0aCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCB7IHBvbGljeSwgcG9zaXRpb24gfSBvZiBvcHRpb25zLmFkZGl0aW9uYWxQb2xpY2llcykge1xuICAgICAgICAgICAgICAgIC8vIFNpZ24gaGFwcGVucyBhZnRlciBSZXRyeSBhbmQgaXMgY29tbW9ubHkgbmVlZGVkIHRvIG9jY3VyXG4gICAgICAgICAgICAgICAgLy8gYmVmb3JlIHBvbGljaWVzIHRoYXQgaW50ZXJjZXB0IHBvc3QtcmV0cnkuXG4gICAgICAgICAgICAgICAgY29uc3QgYWZ0ZXJQaGFzZSA9IHBvc2l0aW9uID09PSBcInBlclJldHJ5XCIgPyBcIlNpZ25cIiA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB0aGlzLnBpcGVsaW5lLmFkZFBvbGljeShwb2xpY3ksIHtcbiAgICAgICAgICAgICAgICAgICAgYWZ0ZXJQaGFzZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZW5kIHRoZSBwcm92aWRlZCBodHRwUmVxdWVzdC5cbiAgICAgKi9cbiAgICBhc3luYyBzZW5kUmVxdWVzdChyZXF1ZXN0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBpcGVsaW5lLnNlbmRSZXF1ZXN0KHRoaXMuX2h0dHBDbGllbnQsIHJlcXVlc3QpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZW5kIGFuIEhUVFAgcmVxdWVzdCB0aGF0IGlzIHBvcHVsYXRlZCB1c2luZyB0aGUgcHJvdmlkZWQgT3BlcmF0aW9uU3BlYy5cbiAgICAgKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZWQgcmVzdWx0IG9mIHRoZSByZXF1ZXN0LCBiYXNlZCBvbiB0aGUgT3BlcmF0aW9uU3BlYy5cbiAgICAgKiBAcGFyYW0gb3BlcmF0aW9uQXJndW1lbnRzIC0gVGhlIGFyZ3VtZW50cyB0aGF0IHRoZSBIVFRQIHJlcXVlc3QncyB0ZW1wbGF0ZWQgdmFsdWVzIHdpbGwgYmUgcG9wdWxhdGVkIGZyb20uXG4gICAgICogQHBhcmFtIG9wZXJhdGlvblNwZWMgLSBUaGUgT3BlcmF0aW9uU3BlYyB0byB1c2UgdG8gcG9wdWxhdGUgdGhlIGh0dHBSZXF1ZXN0LlxuICAgICAqL1xuICAgIGFzeW5jIHNlbmRPcGVyYXRpb25SZXF1ZXN0KG9wZXJhdGlvbkFyZ3VtZW50cywgb3BlcmF0aW9uU3BlYykge1xuICAgICAgICBjb25zdCBlbmRwb2ludCA9IG9wZXJhdGlvblNwZWMuYmFzZVVybCB8fCB0aGlzLl9lbmRwb2ludDtcbiAgICAgICAgaWYgKCFlbmRwb2ludCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSWYgb3BlcmF0aW9uU3BlYy5iYXNlVXJsIGlzIG5vdCBzcGVjaWZpZWQsIHRoZW4gdGhlIFNlcnZpY2VDbGllbnQgbXVzdCBoYXZlIGEgZW5kcG9pbnQgc3RyaW5nIHByb3BlcnR5IHRoYXQgY29udGFpbnMgdGhlIGJhc2UgVVJMIHRvIHVzZS5cIik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVGVtcGxhdGl6ZWQgVVJMcyBzb21ldGltZXMgcmVmZXJlbmNlIHByb3BlcnRpZXMgb24gdGhlIFNlcnZpY2VDbGllbnQgY2hpbGQgY2xhc3MsXG4gICAgICAgIC8vIHNvIHdlIGhhdmUgdG8gcGFzcyBgdGhpc2AgYmVsb3cgaW4gb3JkZXIgdG8gc2VhcmNoIHRoZXNlIHByb3BlcnRpZXMgaWYgdGhleSdyZVxuICAgICAgICAvLyBub3QgcGFydCBvZiBPcGVyYXRpb25Bcmd1bWVudHNcbiAgICAgICAgY29uc3QgdXJsID0gKDAsIHVybEhlbHBlcnNfanNfMS5nZXRSZXF1ZXN0VXJsKShlbmRwb2ludCwgb3BlcmF0aW9uU3BlYywgb3BlcmF0aW9uQXJndW1lbnRzLCB0aGlzKTtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9ICgwLCBjb3JlX3Jlc3RfcGlwZWxpbmVfMS5jcmVhdGVQaXBlbGluZVJlcXVlc3QpKHtcbiAgICAgICAgICAgIHVybCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJlcXVlc3QubWV0aG9kID0gb3BlcmF0aW9uU3BlYy5odHRwTWV0aG9kO1xuICAgICAgICBjb25zdCBvcGVyYXRpb25JbmZvID0gKDAsIG9wZXJhdGlvbkhlbHBlcnNfanNfMS5nZXRPcGVyYXRpb25SZXF1ZXN0SW5mbykocmVxdWVzdCk7XG4gICAgICAgIG9wZXJhdGlvbkluZm8ub3BlcmF0aW9uU3BlYyA9IG9wZXJhdGlvblNwZWM7XG4gICAgICAgIG9wZXJhdGlvbkluZm8ub3BlcmF0aW9uQXJndW1lbnRzID0gb3BlcmF0aW9uQXJndW1lbnRzO1xuICAgICAgICBjb25zdCBjb250ZW50VHlwZSA9IG9wZXJhdGlvblNwZWMuY29udGVudFR5cGUgfHwgdGhpcy5fcmVxdWVzdENvbnRlbnRUeXBlO1xuICAgICAgICBpZiAoY29udGVudFR5cGUgJiYgb3BlcmF0aW9uU3BlYy5yZXF1ZXN0Qm9keSkge1xuICAgICAgICAgICAgcmVxdWVzdC5oZWFkZXJzLnNldChcIkNvbnRlbnQtVHlwZVwiLCBjb250ZW50VHlwZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IG9wZXJhdGlvbkFyZ3VtZW50cy5vcHRpb25zO1xuICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgY29uc3QgcmVxdWVzdE9wdGlvbnMgPSBvcHRpb25zLnJlcXVlc3RPcHRpb25zO1xuICAgICAgICAgICAgaWYgKHJlcXVlc3RPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcXVlc3RPcHRpb25zLnRpbWVvdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC50aW1lb3V0ID0gcmVxdWVzdE9wdGlvbnMudGltZW91dDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlcXVlc3RPcHRpb25zLm9uVXBsb2FkUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5vblVwbG9hZFByb2dyZXNzID0gcmVxdWVzdE9wdGlvbnMub25VcGxvYWRQcm9ncmVzcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlcXVlc3RPcHRpb25zLm9uRG93bmxvYWRQcm9ncmVzcykge1xuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Lm9uRG93bmxvYWRQcm9ncmVzcyA9IHJlcXVlc3RPcHRpb25zLm9uRG93bmxvYWRQcm9ncmVzcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlcXVlc3RPcHRpb25zLnNob3VsZERlc2VyaWFsaXplICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uSW5mby5zaG91bGREZXNlcmlhbGl6ZSA9IHJlcXVlc3RPcHRpb25zLnNob3VsZERlc2VyaWFsaXplO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocmVxdWVzdE9wdGlvbnMuYWxsb3dJbnNlY3VyZUNvbm5lY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5hbGxvd0luc2VjdXJlQ29ubmVjdGlvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuYWJvcnRTaWduYWwpIHtcbiAgICAgICAgICAgICAgICByZXF1ZXN0LmFib3J0U2lnbmFsID0gb3B0aW9ucy5hYm9ydFNpZ25hbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHRpb25zLnRyYWNpbmdPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdC50cmFjaW5nT3B0aW9ucyA9IG9wdGlvbnMudHJhY2luZ09wdGlvbnM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2FsbG93SW5zZWN1cmVDb25uZWN0aW9uKSB7XG4gICAgICAgICAgICByZXF1ZXN0LmFsbG93SW5zZWN1cmVDb25uZWN0aW9uID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVxdWVzdC5zdHJlYW1SZXNwb25zZVN0YXR1c0NvZGVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJlcXVlc3Quc3RyZWFtUmVzcG9uc2VTdGF0dXNDb2RlcyA9ICgwLCBpbnRlcmZhY2VIZWxwZXJzX2pzXzEuZ2V0U3RyZWFtaW5nUmVzcG9uc2VTdGF0dXNDb2Rlcykob3BlcmF0aW9uU3BlYyk7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJhd1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdChyZXF1ZXN0KTtcbiAgICAgICAgICAgIGNvbnN0IGZsYXRSZXNwb25zZSA9ICgwLCB1dGlsc19qc18xLmZsYXR0ZW5SZXNwb25zZSkocmF3UmVzcG9uc2UsIG9wZXJhdGlvblNwZWMucmVzcG9uc2VzW3Jhd1Jlc3BvbnNlLnN0YXR1c10pO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5vblJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5vblJlc3BvbnNlKHJhd1Jlc3BvbnNlLCBmbGF0UmVzcG9uc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZsYXRSZXNwb25zZTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZXJyb3IgPT09IFwib2JqZWN0XCIgJiYgKGVycm9yID09PSBudWxsIHx8IGVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlcnJvci5yZXNwb25zZSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByYXdSZXNwb25zZSA9IGVycm9yLnJlc3BvbnNlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZsYXRSZXNwb25zZSA9ICgwLCB1dGlsc19qc18xLmZsYXR0ZW5SZXNwb25zZSkocmF3UmVzcG9uc2UsIG9wZXJhdGlvblNwZWMucmVzcG9uc2VzW2Vycm9yLnN0YXR1c0NvZGVdIHx8IG9wZXJhdGlvblNwZWMucmVzcG9uc2VzW1wiZGVmYXVsdFwiXSk7XG4gICAgICAgICAgICAgICAgZXJyb3IuZGV0YWlscyA9IGZsYXRSZXNwb25zZTtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLm9uUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5vblJlc3BvbnNlKHJhd1Jlc3BvbnNlLCBmbGF0UmVzcG9uc2UsIGVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuU2VydmljZUNsaWVudCA9IFNlcnZpY2VDbGllbnQ7XG5mdW5jdGlvbiBjcmVhdGVEZWZhdWx0UGlwZWxpbmUob3B0aW9ucykge1xuICAgIGNvbnN0IGNyZWRlbnRpYWxTY29wZXMgPSBnZXRDcmVkZW50aWFsU2NvcGVzKG9wdGlvbnMpO1xuICAgIGNvbnN0IGNyZWRlbnRpYWxPcHRpb25zID0gb3B0aW9ucy5jcmVkZW50aWFsICYmIGNyZWRlbnRpYWxTY29wZXNcbiAgICAgICAgPyB7IGNyZWRlbnRpYWxTY29wZXMsIGNyZWRlbnRpYWw6IG9wdGlvbnMuY3JlZGVudGlhbCB9XG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiAoMCwgcGlwZWxpbmVfanNfMS5jcmVhdGVDbGllbnRQaXBlbGluZSkoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKSwgeyBjcmVkZW50aWFsT3B0aW9ucyB9KSk7XG59XG5mdW5jdGlvbiBnZXRDcmVkZW50aWFsU2NvcGVzKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucy5jcmVkZW50aWFsU2NvcGVzKSB7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmNyZWRlbnRpYWxTY29wZXM7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmVuZHBvaW50KSB7XG4gICAgICAgIHJldHVybiBgJHtvcHRpb25zLmVuZHBvaW50fS8uZGVmYXVsdGA7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmJhc2VVcmkpIHtcbiAgICAgICAgcmV0dXJuIGAke29wdGlvbnMuYmFzZVVyaX0vLmRlZmF1bHRgO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5jcmVkZW50aWFsICYmICFvcHRpb25zLmNyZWRlbnRpYWxTY29wZXMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBXaGVuIHVzaW5nIGNyZWRlbnRpYWxzLCB0aGUgU2VydmljZUNsaWVudE9wdGlvbnMgbXVzdCBjb250YWluIGVpdGhlciBhIGVuZHBvaW50IG9yIGEgY3JlZGVudGlhbFNjb3Blcy4gVW5hYmxlIHRvIGNyZWF0ZSBhIGJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3lgKTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNlcnZpY2VDbGllbnQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5hdXRob3JpemVSZXF1ZXN0T25DbGFpbUNoYWxsZW5nZSA9IGV4cG9ydHMucGFyc2VDQUVDaGFsbGVuZ2UgPSB2b2lkIDA7XG5jb25zdCBsb2dfanNfMSA9IHJlcXVpcmUoXCIuL2xvZy5qc1wiKTtcbmNvbnN0IGJhc2U2NF9qc18xID0gcmVxdWlyZShcIi4vYmFzZTY0LmpzXCIpO1xuLyoqXG4gKiBDb252ZXJ0czogYEJlYXJlciBhPVwiYlwiLCBjPVwiZFwiLCBCZWFyZXIgZD1cImVcIiwgZj1cImdcImAuXG4gKiBJbnRvOiBgWyB7IGE6ICdiJywgYzogJ2QnIH0sIHsgZDogJ2UnLCBmOiAnZycgfSBdYC5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gcGFyc2VDQUVDaGFsbGVuZ2UoY2hhbGxlbmdlcykge1xuICAgIGNvbnN0IGJlYXJlckNoYWxsZW5nZXMgPSBgLCAke2NoYWxsZW5nZXMudHJpbSgpfWAuc3BsaXQoXCIsIEJlYXJlciBcIikuZmlsdGVyKCh4KSA9PiB4KTtcbiAgICByZXR1cm4gYmVhcmVyQ2hhbGxlbmdlcy5tYXAoKGNoYWxsZW5nZSkgPT4ge1xuICAgICAgICBjb25zdCBjaGFsbGVuZ2VQYXJ0cyA9IGAke2NoYWxsZW5nZS50cmltKCl9LCBgLnNwbGl0KCdcIiwgJykuZmlsdGVyKCh4KSA9PiB4KTtcbiAgICAgICAgY29uc3Qga2V5VmFsdWVQYWlycyA9IGNoYWxsZW5nZVBhcnRzLm1hcCgoa2V5VmFsdWUpID0+ICgoW2tleSwgdmFsdWVdKSA9PiAoeyBba2V5XTogdmFsdWUgfSkpKGtleVZhbHVlLnRyaW0oKS5zcGxpdCgnPVwiJykpKTtcbiAgICAgICAgLy8gS2V5LXZhbHVlIHBhaXJzIHRvIHBsYWluIG9iamVjdDpcbiAgICAgICAgcmV0dXJuIGtleVZhbHVlUGFpcnMucmVkdWNlKChhLCBiKSA9PiAoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBhKSwgYikpLCB7fSk7XG4gICAgfSk7XG59XG5leHBvcnRzLnBhcnNlQ0FFQ2hhbGxlbmdlID0gcGFyc2VDQUVDaGFsbGVuZ2U7XG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgYXMgYSBjYWxsYmFjayBmb3IgdGhlIGBiZWFyZXJUb2tlbkF1dGhlbnRpY2F0aW9uUG9saWN5YCBvZiBgQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZWAsIHRvIHN1cHBvcnQgQ0FFIGNoYWxsZW5nZXM6XG4gKiBbQ29udGludW91cyBBY2Nlc3MgRXZhbHVhdGlvbl0oaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vYXp1cmUvYWN0aXZlLWRpcmVjdG9yeS9jb25kaXRpb25hbC1hY2Nlc3MvY29uY2VwdC1jb250aW51b3VzLWFjY2Vzcy1ldmFsdWF0aW9uKS5cbiAqXG4gKiBDYWxsIHRoZSBgYmVhcmVyVG9rZW5BdXRoZW50aWNhdGlvblBvbGljeWAgd2l0aCB0aGUgZm9sbG93aW5nIG9wdGlvbnM6XG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3kgfSBmcm9tIFwiQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZVwiO1xuICogaW1wb3J0IHsgYXV0aG9yaXplUmVxdWVzdE9uQ2xhaW1DaGFsbGVuZ2UgfSBmcm9tIFwiQGF6dXJlL2NvcmUtY2xpZW50XCI7XG4gKlxuICogY29uc3QgYmVhcmVyVG9rZW5BdXRoZW50aWNhdGlvblBvbGljeSA9IGJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3koe1xuICogICBhdXRob3JpemVSZXF1ZXN0T25DaGFsbGVuZ2U6IGF1dGhvcml6ZVJlcXVlc3RPbkNsYWltQ2hhbGxlbmdlXG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIE9uY2UgcHJvdmlkZWQsIHRoZSBgYmVhcmVyVG9rZW5BdXRoZW50aWNhdGlvblBvbGljeWAgcG9saWN5IHdpbGwgaW50ZXJuYWxseSBoYW5kbGUgQ29udGludW91cyBBY2Nlc3MgRXZhbHVhdGlvbiAoQ0FFKSBjaGFsbGVuZ2VzLlxuICogV2hlbiBpdCBjYW4ndCBjb21wbGV0ZSBhIGNoYWxsZW5nZSBpdCB3aWxsIHJldHVybiB0aGUgNDAxICh1bmF1dGhvcml6ZWQpIHJlc3BvbnNlIGZyb20gQVJNLlxuICpcbiAqIEV4YW1wbGUgY2hhbGxlbmdlIHdpdGggY2xhaW1zOlxuICpcbiAqIGBgYFxuICogQmVhcmVyIGF1dGhvcml6YXRpb25fdXJpPVwiaHR0cHM6Ly9sb2dpbi53aW5kb3dzLXBwZS5uZXQvXCIsIGVycm9yPVwiaW52YWxpZF90b2tlblwiLFxuICogZXJyb3JfZGVzY3JpcHRpb249XCJVc2VyIHNlc3Npb24gaGFzIGJlZW4gcmV2b2tlZFwiLFxuICogY2xhaW1zPVwiZXlKaFkyTmxjM05mZEc5clpXNGlPbnNpYm1KbUlqcDdJbVZ6YzJWdWRHbGhiQ0k2ZEhKMVpTd2dJblpoYkhWbElqb2lNVFl3TXpjME1qZ3dNQ0o5ZlgwPVwiXG4gKiBgYGBcbiAqL1xuYXN5bmMgZnVuY3Rpb24gYXV0aG9yaXplUmVxdWVzdE9uQ2xhaW1DaGFsbGVuZ2Uob25DaGFsbGVuZ2VPcHRpb25zKSB7XG4gICAgY29uc3QgeyBzY29wZXMsIHJlc3BvbnNlIH0gPSBvbkNoYWxsZW5nZU9wdGlvbnM7XG4gICAgY29uc3QgbG9nZ2VyID0gb25DaGFsbGVuZ2VPcHRpb25zLmxvZ2dlciB8fCBsb2dfanNfMS5sb2dnZXI7XG4gICAgY29uc3QgY2hhbGxlbmdlID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoXCJXV1ctQXV0aGVudGljYXRlXCIpO1xuICAgIGlmICghY2hhbGxlbmdlKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKGBUaGUgV1dXLUF1dGhlbnRpY2F0ZSBoZWFkZXIgd2FzIG1pc3NpbmcuIEZhaWxlZCB0byBwZXJmb3JtIHRoZSBDb250aW51b3VzIEFjY2VzcyBFdmFsdWF0aW9uIGF1dGhlbnRpY2F0aW9uIGZsb3cuYCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgY2hhbGxlbmdlcyA9IHBhcnNlQ0FFQ2hhbGxlbmdlKGNoYWxsZW5nZSkgfHwgW107XG4gICAgY29uc3QgcGFyc2VkQ2hhbGxlbmdlID0gY2hhbGxlbmdlcy5maW5kKCh4KSA9PiB4LmNsYWltcyk7XG4gICAgaWYgKCFwYXJzZWRDaGFsbGVuZ2UpIHtcbiAgICAgICAgbG9nZ2VyLmluZm8oYFRoZSBXV1ctQXV0aGVudGljYXRlIGhlYWRlciB3YXMgbWlzc2luZyB0aGUgbmVjZXNzYXJ5IFwiY2xhaW1zXCIgdG8gcGVyZm9ybSB0aGUgQ29udGludW91cyBBY2Nlc3MgRXZhbHVhdGlvbiBhdXRoZW50aWNhdGlvbiBmbG93LmApO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gYXdhaXQgb25DaGFsbGVuZ2VPcHRpb25zLmdldEFjY2Vzc1Rva2VuKHBhcnNlZENoYWxsZW5nZS5zY29wZSA/IFtwYXJzZWRDaGFsbGVuZ2Uuc2NvcGVdIDogc2NvcGVzLCB7XG4gICAgICAgIGNsYWltczogKDAsIGJhc2U2NF9qc18xLmRlY29kZVN0cmluZ1RvU3RyaW5nKShwYXJzZWRDaGFsbGVuZ2UuY2xhaW1zKSxcbiAgICB9KTtcbiAgICBpZiAoIWFjY2Vzc1Rva2VuKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgb25DaGFsbGVuZ2VPcHRpb25zLnJlcXVlc3QuaGVhZGVycy5zZXQoXCJBdXRob3JpemF0aW9uXCIsIGBCZWFyZXIgJHthY2Nlc3NUb2tlbi50b2tlbn1gKTtcbiAgICByZXR1cm4gdHJ1ZTtcbn1cbmV4cG9ydHMuYXV0aG9yaXplUmVxdWVzdE9uQ2xhaW1DaGFsbGVuZ2UgPSBhdXRob3JpemVSZXF1ZXN0T25DbGFpbUNoYWxsZW5nZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWF1dGhvcml6ZVJlcXVlc3RPbkNsYWltQ2hhbGxlbmdlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYXV0aG9yaXplUmVxdWVzdE9uVGVuYW50Q2hhbGxlbmdlID0gdm9pZCAwO1xuLyoqXG4gKiBBIHNldCBvZiBjb25zdGFudHMgdXNlZCBpbnRlcm5hbGx5IHdoZW4gcHJvY2Vzc2luZyByZXF1ZXN0cy5cbiAqL1xuY29uc3QgQ29uc3RhbnRzID0ge1xuICAgIERlZmF1bHRTY29wZTogXCIvLmRlZmF1bHRcIixcbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIGNvbnN0YW50cyBmb3IgdXNlIHdpdGggSFRUUCBoZWFkZXJzLlxuICAgICAqL1xuICAgIEhlYWRlckNvbnN0YW50czoge1xuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIEF1dGhvcml6YXRpb24gaGVhZGVyLlxuICAgICAgICAgKi9cbiAgICAgICAgQVVUSE9SSVpBVElPTjogXCJhdXRob3JpemF0aW9uXCIsXG4gICAgfSxcbn07XG5mdW5jdGlvbiBpc1V1aWQodGV4dCkge1xuICAgIHJldHVybiAvXlswLTlhLWZBLUZdezh9XFxiLVswLTlhLWZBLUZdezR9XFxiLVswLTlhLWZBLUZdezR9XFxiLVswLTlhLWZBLUZdezR9XFxiLVswLTlhLWZBLUZdezEyfSQvLnRlc3QodGV4dCk7XG59XG4vKipcbiAqIERlZmluZXMgYSBjYWxsYmFjayB0byBoYW5kbGUgYXV0aCBjaGFsbGVuZ2UgZm9yIFN0b3JhZ2UgQVBJcy5cbiAqIFRoaXMgaW1wbGVtZW50cyB0aGUgYmVhcmVyIGNoYWxsZW5nZSBwcm9jZXNzIGRlc2NyaWJlZCBoZXJlOiBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvYXV0aG9yaXplLXdpdGgtYXp1cmUtYWN0aXZlLWRpcmVjdG9yeSNiZWFyZXItY2hhbGxlbmdlXG4gKiBIYW5kbGluZyBoYXMgc3BlY2lmaWMgZmVhdHVyZXMgZm9yIHN0b3JhZ2UgdGhhdCBkZXBhcnRzIHRvIHRoZSBnZW5lcmFsIEFBRCBjaGFsbGVuZ2UgZG9jcy5cbiAqKi9cbmNvbnN0IGF1dGhvcml6ZVJlcXVlc3RPblRlbmFudENoYWxsZW5nZSA9IGFzeW5jIChjaGFsbGVuZ2VPcHRpb25zKSA9PiB7XG4gICAgY29uc3QgcmVxdWVzdE9wdGlvbnMgPSByZXF1ZXN0VG9PcHRpb25zKGNoYWxsZW5nZU9wdGlvbnMucmVxdWVzdCk7XG4gICAgY29uc3QgY2hhbGxlbmdlID0gZ2V0Q2hhbGxlbmdlKGNoYWxsZW5nZU9wdGlvbnMucmVzcG9uc2UpO1xuICAgIGlmIChjaGFsbGVuZ2UpIHtcbiAgICAgICAgY29uc3QgY2hhbGxlbmdlSW5mbyA9IHBhcnNlQ2hhbGxlbmdlKGNoYWxsZW5nZSk7XG4gICAgICAgIGNvbnN0IGNoYWxsZW5nZVNjb3BlcyA9IGJ1aWxkU2NvcGVzKGNoYWxsZW5nZU9wdGlvbnMsIGNoYWxsZW5nZUluZm8pO1xuICAgICAgICBjb25zdCB0ZW5hbnRJZCA9IGV4dHJhY3RUZW5hbnRJZChjaGFsbGVuZ2VJbmZvKTtcbiAgICAgICAgaWYgKCF0ZW5hbnRJZCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gYXdhaXQgY2hhbGxlbmdlT3B0aW9ucy5nZXRBY2Nlc3NUb2tlbihjaGFsbGVuZ2VTY29wZXMsIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcmVxdWVzdE9wdGlvbnMpLCB7IHRlbmFudElkIH0pKTtcbiAgICAgICAgaWYgKCFhY2Nlc3NUb2tlbikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNoYWxsZW5nZU9wdGlvbnMucmVxdWVzdC5oZWFkZXJzLnNldChDb25zdGFudHMuSGVhZGVyQ29uc3RhbnRzLkFVVEhPUklaQVRJT04sIGBCZWFyZXIgJHthY2Nlc3NUb2tlbi50b2tlbn1gKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5leHBvcnRzLmF1dGhvcml6ZVJlcXVlc3RPblRlbmFudENoYWxsZW5nZSA9IGF1dGhvcml6ZVJlcXVlc3RPblRlbmFudENoYWxsZW5nZTtcbi8qKlxuICogRXh0cmFjdHMgdGhlIHRlbmFudCBpZCBmcm9tIHRoZSBjaGFsbGVuZ2UgaW5mb3JtYXRpb25cbiAqIFRoZSB0ZW5hbnQgaWQgaXMgY29udGFpbmVkIGluIHRoZSBhdXRob3JpemF0aW9uX3VyaSBhcyB0aGUgZmlyc3RcbiAqIHBhdGggcGFydC5cbiAqL1xuZnVuY3Rpb24gZXh0cmFjdFRlbmFudElkKGNoYWxsZW5nZUluZm8pIHtcbiAgICBjb25zdCBwYXJzZWRBdXRoVXJpID0gbmV3IFVSTChjaGFsbGVuZ2VJbmZvLmF1dGhvcml6YXRpb25fdXJpKTtcbiAgICBjb25zdCBwYXRoU2VnbWVudHMgPSBwYXJzZWRBdXRoVXJpLnBhdGhuYW1lLnNwbGl0KFwiL1wiKTtcbiAgICBjb25zdCB0ZW5hbnRJZCA9IHBhdGhTZWdtZW50c1sxXTtcbiAgICBpZiAodGVuYW50SWQgJiYgaXNVdWlkKHRlbmFudElkKSkge1xuICAgICAgICByZXR1cm4gdGVuYW50SWQ7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG4vKipcbiAqIEJ1aWxkcyB0aGUgYXV0aGVudGljYXRpb24gc2NvcGVzIGJhc2VkIG9uIHRoZSBpbmZvcm1hdGlvbiB0aGF0IGNvbWVzIGluIHRoZVxuICogY2hhbGxlbmdlIGluZm9ybWF0aW9uLiBTY29wZXMgdXJsIGlzIHByZXNlbnQgaW4gdGhlIHJlc291cmNlX2lkLCBpZiBpdCBpcyBlbXB0eVxuICogd2Uga2VlcCB1c2luZyB0aGUgb3JpZ2luYWwgc2NvcGVzLlxuICovXG5mdW5jdGlvbiBidWlsZFNjb3BlcyhjaGFsbGVuZ2VPcHRpb25zLCBjaGFsbGVuZ2VJbmZvKSB7XG4gICAgaWYgKCFjaGFsbGVuZ2VJbmZvLnJlc291cmNlX2lkKSB7XG4gICAgICAgIHJldHVybiBjaGFsbGVuZ2VPcHRpb25zLnNjb3BlcztcbiAgICB9XG4gICAgY29uc3QgY2hhbGxlbmdlU2NvcGVzID0gbmV3IFVSTChjaGFsbGVuZ2VJbmZvLnJlc291cmNlX2lkKTtcbiAgICBjaGFsbGVuZ2VTY29wZXMucGF0aG5hbWUgPSBDb25zdGFudHMuRGVmYXVsdFNjb3BlO1xuICAgIGxldCBzY29wZSA9IGNoYWxsZW5nZVNjb3Blcy50b1N0cmluZygpO1xuICAgIGlmIChzY29wZSA9PT0gXCJodHRwczovL2Rpc2suYXp1cmUuY29tLy5kZWZhdWx0XCIpIHtcbiAgICAgICAgLy8gdGhlIGV4dHJhIHNsYXNoIGlzIHJlcXVpcmVkIGJ5IHRoZSBzZXJ2aWNlXG4gICAgICAgIHNjb3BlID0gXCJodHRwczovL2Rpc2suYXp1cmUuY29tLy8uZGVmYXVsdFwiO1xuICAgIH1cbiAgICByZXR1cm4gW3Njb3BlXTtcbn1cbi8qKlxuICogV2Ugd2lsbCByZXRyaWV2ZSB0aGUgY2hhbGxlbmdlIG9ubHkgaWYgdGhlIHJlc3BvbnNlIHN0YXR1cyBjb2RlIHdhcyA0MDEsXG4gKiBhbmQgaWYgdGhlIHJlc3BvbnNlIGNvbnRhaW5lZCB0aGUgaGVhZGVyIFwiV1dXLUF1dGhlbnRpY2F0ZVwiIHdpdGggYSBub24tZW1wdHkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGdldENoYWxsZW5nZShyZXNwb25zZSkge1xuICAgIGNvbnN0IGNoYWxsZW5nZSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFwiV1dXLUF1dGhlbnRpY2F0ZVwiKTtcbiAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDEgJiYgY2hhbGxlbmdlKSB7XG4gICAgICAgIHJldHVybiBjaGFsbGVuZ2U7XG4gICAgfVxuICAgIHJldHVybjtcbn1cbi8qKlxuICogQ29udmVydHM6IGBCZWFyZXIgYT1cImJcIiBjPVwiZFwiYC5cbiAqIEludG86IGBbIHsgYTogJ2InLCBjOiAnZCcgfV1gLlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBwYXJzZUNoYWxsZW5nZShjaGFsbGVuZ2UpIHtcbiAgICBjb25zdCBiZWFyZXJDaGFsbGVuZ2UgPSBjaGFsbGVuZ2Uuc2xpY2UoXCJCZWFyZXIgXCIubGVuZ3RoKTtcbiAgICBjb25zdCBjaGFsbGVuZ2VQYXJ0cyA9IGAke2JlYXJlckNoYWxsZW5nZS50cmltKCl9IGAuc3BsaXQoXCIgXCIpLmZpbHRlcigoeCkgPT4geCk7XG4gICAgY29uc3Qga2V5VmFsdWVQYWlycyA9IGNoYWxsZW5nZVBhcnRzLm1hcCgoa2V5VmFsdWUpID0+ICgoW2tleSwgdmFsdWVdKSA9PiAoeyBba2V5XTogdmFsdWUgfSkpKGtleVZhbHVlLnRyaW0oKS5zcGxpdChcIj1cIikpKTtcbiAgICAvLyBLZXktdmFsdWUgcGFpcnMgdG8gcGxhaW4gb2JqZWN0OlxuICAgIHJldHVybiBrZXlWYWx1ZVBhaXJzLnJlZHVjZSgoYSwgYikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYSksIGIpKSwge30pO1xufVxuLyoqXG4gKiBFeHRyYWN0cyB0aGUgb3B0aW9ucyBmb3JtIGEgUGlwZWxpbmUgUmVxdWVzdCBmb3IgbGF0ZXIgcmUtdXNlXG4gKi9cbmZ1bmN0aW9uIHJlcXVlc3RUb09wdGlvbnMocmVxdWVzdCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGFib3J0U2lnbmFsOiByZXF1ZXN0LmFib3J0U2lnbmFsLFxuICAgICAgICByZXF1ZXN0T3B0aW9uczoge1xuICAgICAgICAgICAgdGltZW91dDogcmVxdWVzdC50aW1lb3V0LFxuICAgICAgICB9LFxuICAgICAgICB0cmFjaW5nT3B0aW9uczogcmVxdWVzdC50cmFjaW5nT3B0aW9ucyxcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXV0aG9yaXplUmVxdWVzdE9uVGVuYW50Q2hhbGxlbmdlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYXV0aG9yaXplUmVxdWVzdE9uVGVuYW50Q2hhbGxlbmdlID0gZXhwb3J0cy5hdXRob3JpemVSZXF1ZXN0T25DbGFpbUNoYWxsZW5nZSA9IGV4cG9ydHMuc2VyaWFsaXphdGlvblBvbGljeU5hbWUgPSBleHBvcnRzLnNlcmlhbGl6YXRpb25Qb2xpY3kgPSBleHBvcnRzLmRlc2VyaWFsaXphdGlvblBvbGljeU5hbWUgPSBleHBvcnRzLmRlc2VyaWFsaXphdGlvblBvbGljeSA9IGV4cG9ydHMuWE1MX0NIQVJLRVkgPSBleHBvcnRzLlhNTF9BVFRSS0VZID0gZXhwb3J0cy5jcmVhdGVDbGllbnRQaXBlbGluZSA9IGV4cG9ydHMuU2VydmljZUNsaWVudCA9IGV4cG9ydHMuTWFwcGVyVHlwZU5hbWVzID0gZXhwb3J0cy5jcmVhdGVTZXJpYWxpemVyID0gdm9pZCAwO1xudmFyIHNlcmlhbGl6ZXJfanNfMSA9IHJlcXVpcmUoXCIuL3NlcmlhbGl6ZXIuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTZXJpYWxpemVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZXJpYWxpemVyX2pzXzEuY3JlYXRlU2VyaWFsaXplcjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk1hcHBlclR5cGVOYW1lc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2VyaWFsaXplcl9qc18xLk1hcHBlclR5cGVOYW1lczsgfSB9KTtcbnZhciBzZXJ2aWNlQ2xpZW50X2pzXzEgPSByZXF1aXJlKFwiLi9zZXJ2aWNlQ2xpZW50LmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiU2VydmljZUNsaWVudFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2VydmljZUNsaWVudF9qc18xLlNlcnZpY2VDbGllbnQ7IH0gfSk7XG52YXIgcGlwZWxpbmVfanNfMSA9IHJlcXVpcmUoXCIuL3BpcGVsaW5lLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ2xpZW50UGlwZWxpbmVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBpcGVsaW5lX2pzXzEuY3JlYXRlQ2xpZW50UGlwZWxpbmU7IH0gfSk7XG52YXIgaW50ZXJmYWNlc19qc18xID0gcmVxdWlyZShcIi4vaW50ZXJmYWNlcy5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlhNTF9BVFRSS0VZXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBpbnRlcmZhY2VzX2pzXzEuWE1MX0FUVFJLRVk7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJYTUxfQ0hBUktFWVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gaW50ZXJmYWNlc19qc18xLlhNTF9DSEFSS0VZOyB9IH0pO1xudmFyIGRlc2VyaWFsaXphdGlvblBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vZGVzZXJpYWxpemF0aW9uUG9saWN5LmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVzZXJpYWxpemF0aW9uUG9saWN5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkZXNlcmlhbGl6YXRpb25Qb2xpY3lfanNfMS5kZXNlcmlhbGl6YXRpb25Qb2xpY3k7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZXNlcmlhbGl6YXRpb25Qb2xpY3lOYW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkZXNlcmlhbGl6YXRpb25Qb2xpY3lfanNfMS5kZXNlcmlhbGl6YXRpb25Qb2xpY3lOYW1lOyB9IH0pO1xudmFyIHNlcmlhbGl6YXRpb25Qb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3NlcmlhbGl6YXRpb25Qb2xpY3kuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzZXJpYWxpemF0aW9uUG9saWN5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZXJpYWxpemF0aW9uUG9saWN5X2pzXzEuc2VyaWFsaXphdGlvblBvbGljeTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNlcmlhbGl6YXRpb25Qb2xpY3lOYW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZXJpYWxpemF0aW9uUG9saWN5X2pzXzEuc2VyaWFsaXphdGlvblBvbGljeU5hbWU7IH0gfSk7XG52YXIgYXV0aG9yaXplUmVxdWVzdE9uQ2xhaW1DaGFsbGVuZ2VfanNfMSA9IHJlcXVpcmUoXCIuL2F1dGhvcml6ZVJlcXVlc3RPbkNsYWltQ2hhbGxlbmdlLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYXV0aG9yaXplUmVxdWVzdE9uQ2xhaW1DaGFsbGVuZ2VcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGF1dGhvcml6ZVJlcXVlc3RPbkNsYWltQ2hhbGxlbmdlX2pzXzEuYXV0aG9yaXplUmVxdWVzdE9uQ2xhaW1DaGFsbGVuZ2U7IH0gfSk7XG52YXIgYXV0aG9yaXplUmVxdWVzdE9uVGVuYW50Q2hhbGxlbmdlX2pzXzEgPSByZXF1aXJlKFwiLi9hdXRob3JpemVSZXF1ZXN0T25UZW5hbnRDaGFsbGVuZ2UuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhdXRob3JpemVSZXF1ZXN0T25UZW5hbnRDaGFsbGVuZ2VcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGF1dGhvcml6ZVJlcXVlc3RPblRlbmFudENoYWxsZW5nZV9qc18xLmF1dGhvcml6ZVJlcXVlc3RPblRlbmFudENoYWxsZW5nZTsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuSHR0cEhlYWRlcnMgPSBleHBvcnRzLnRvSHR0cEhlYWRlcnNMaWtlID0gZXhwb3J0cy50b1dlYlJlc291cmNlTGlrZSA9IGV4cG9ydHMudG9QaXBlbGluZVJlcXVlc3QgPSB2b2lkIDA7XG5jb25zdCBjb3JlX3Jlc3RfcGlwZWxpbmVfMSA9IHJlcXVpcmUoXCJAYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lXCIpO1xuLy8gV2UgdXNlIGEgY3VzdG9tIHN5bWJvbCB0byBjYWNoZSBhIHJlZmVyZW5jZSB0byB0aGUgb3JpZ2luYWwgcmVxdWVzdCB3aXRob3V0XG4vLyBleHBvc2luZyBpdCBvbiB0aGUgcHVibGljIGludGVyZmFjZS5cbmNvbnN0IG9yaWdpbmFsUmVxdWVzdFN5bWJvbCA9IFN5bWJvbChcIk9yaWdpbmFsIFBpcGVsaW5lUmVxdWVzdFwiKTtcbi8vIFN5bWJvbC5mb3IoKSB3aWxsIHJldHVybiB0aGUgc2FtZSBzeW1ib2wgaWYgaXQncyBhbHJlYWR5IGJlZW4gY3JlYXRlZFxuLy8gVGhpcyBwYXJ0aWN1bGFyIG9uZSBpcyB1c2VkIGluIGNvcmUtY2xpZW50IHRvIGhhbmRsZSB0aGUgY2FzZSBvZiB3aGVuIGEgcmVxdWVzdCBpc1xuLy8gY2xvbmVkIGJ1dCB3ZSBuZWVkIHRvIHJldHJpZXZlIHRoZSBPcGVyYXRpb25TcGVjIGFuZCBPcGVyYXRpb25Bcmd1bWVudHMgZnJvbSB0aGVcbi8vIG9yaWdpbmFsIHJlcXVlc3QuXG5jb25zdCBvcmlnaW5hbENsaWVudFJlcXVlc3RTeW1ib2wgPSBTeW1ib2wuZm9yKFwiQGF6dXJlL2NvcmUtY2xpZW50IG9yaWdpbmFsIHJlcXVlc3RcIik7XG5mdW5jdGlvbiB0b1BpcGVsaW5lUmVxdWVzdCh3ZWJSZXNvdXJjZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgY29tcGF0V2ViUmVzb3VyY2UgPSB3ZWJSZXNvdXJjZTtcbiAgICBjb25zdCByZXF1ZXN0ID0gY29tcGF0V2ViUmVzb3VyY2Vbb3JpZ2luYWxSZXF1ZXN0U3ltYm9sXTtcbiAgICBjb25zdCBoZWFkZXJzID0gKDAsIGNvcmVfcmVzdF9waXBlbGluZV8xLmNyZWF0ZUh0dHBIZWFkZXJzKSh3ZWJSZXNvdXJjZS5oZWFkZXJzLnRvSnNvbih7IHByZXNlcnZlQ2FzZTogdHJ1ZSB9KSk7XG4gICAgaWYgKHJlcXVlc3QpIHtcbiAgICAgICAgcmVxdWVzdC5oZWFkZXJzID0gaGVhZGVycztcbiAgICAgICAgcmV0dXJuIHJlcXVlc3Q7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjb25zdCBuZXdSZXF1ZXN0ID0gKDAsIGNvcmVfcmVzdF9waXBlbGluZV8xLmNyZWF0ZVBpcGVsaW5lUmVxdWVzdCkoe1xuICAgICAgICAgICAgdXJsOiB3ZWJSZXNvdXJjZS51cmwsXG4gICAgICAgICAgICBtZXRob2Q6IHdlYlJlc291cmNlLm1ldGhvZCxcbiAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHdlYlJlc291cmNlLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgICAgIHRpbWVvdXQ6IHdlYlJlc291cmNlLnRpbWVvdXQsXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHdlYlJlc291cmNlLnJlcXVlc3RJZCxcbiAgICAgICAgICAgIGFib3J0U2lnbmFsOiB3ZWJSZXNvdXJjZS5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgIGJvZHk6IHdlYlJlc291cmNlLmJvZHksXG4gICAgICAgICAgICBmb3JtRGF0YTogd2ViUmVzb3VyY2UuZm9ybURhdGEsXG4gICAgICAgICAgICBkaXNhYmxlS2VlcEFsaXZlOiAhIXdlYlJlc291cmNlLmtlZXBBbGl2ZSxcbiAgICAgICAgICAgIG9uRG93bmxvYWRQcm9ncmVzczogd2ViUmVzb3VyY2Uub25Eb3dubG9hZFByb2dyZXNzLFxuICAgICAgICAgICAgb25VcGxvYWRQcm9ncmVzczogd2ViUmVzb3VyY2Uub25VcGxvYWRQcm9ncmVzcyxcbiAgICAgICAgICAgIHByb3h5U2V0dGluZ3M6IHdlYlJlc291cmNlLnByb3h5U2V0dGluZ3MsXG4gICAgICAgICAgICBzdHJlYW1SZXNwb25zZVN0YXR1c0NvZGVzOiB3ZWJSZXNvdXJjZS5zdHJlYW1SZXNwb25zZVN0YXR1c0NvZGVzLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKG9wdGlvbnMub3JpZ2luYWxSZXF1ZXN0KSB7XG4gICAgICAgICAgICBuZXdSZXF1ZXN0W29yaWdpbmFsQ2xpZW50UmVxdWVzdFN5bWJvbF0gPVxuICAgICAgICAgICAgICAgIG9wdGlvbnMub3JpZ2luYWxSZXF1ZXN0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXdSZXF1ZXN0O1xuICAgIH1cbn1cbmV4cG9ydHMudG9QaXBlbGluZVJlcXVlc3QgPSB0b1BpcGVsaW5lUmVxdWVzdDtcbmZ1bmN0aW9uIHRvV2ViUmVzb3VyY2VMaWtlKHJlcXVlc3QsIG9wdGlvbnMpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3Qgb3JpZ2luYWxSZXF1ZXN0ID0gKF9hID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLm9yaWdpbmFsUmVxdWVzdCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogcmVxdWVzdDtcbiAgICBjb25zdCB3ZWJSZXNvdXJjZSA9IHtcbiAgICAgICAgdXJsOiByZXF1ZXN0LnVybCxcbiAgICAgICAgbWV0aG9kOiByZXF1ZXN0Lm1ldGhvZCxcbiAgICAgICAgaGVhZGVyczogdG9IdHRwSGVhZGVyc0xpa2UocmVxdWVzdC5oZWFkZXJzKSxcbiAgICAgICAgd2l0aENyZWRlbnRpYWxzOiByZXF1ZXN0LndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgdGltZW91dDogcmVxdWVzdC50aW1lb3V0LFxuICAgICAgICByZXF1ZXN0SWQ6IHJlcXVlc3QuaGVhZGVycy5nZXQoXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIpIHx8IHJlcXVlc3QucmVxdWVzdElkLFxuICAgICAgICBhYm9ydFNpZ25hbDogcmVxdWVzdC5hYm9ydFNpZ25hbCxcbiAgICAgICAgYm9keTogcmVxdWVzdC5ib2R5LFxuICAgICAgICBmb3JtRGF0YTogcmVxdWVzdC5mb3JtRGF0YSxcbiAgICAgICAga2VlcEFsaXZlOiAhIXJlcXVlc3QuZGlzYWJsZUtlZXBBbGl2ZSxcbiAgICAgICAgb25Eb3dubG9hZFByb2dyZXNzOiByZXF1ZXN0Lm9uRG93bmxvYWRQcm9ncmVzcyxcbiAgICAgICAgb25VcGxvYWRQcm9ncmVzczogcmVxdWVzdC5vblVwbG9hZFByb2dyZXNzLFxuICAgICAgICBwcm94eVNldHRpbmdzOiByZXF1ZXN0LnByb3h5U2V0dGluZ3MsXG4gICAgICAgIHN0cmVhbVJlc3BvbnNlU3RhdHVzQ29kZXM6IHJlcXVlc3Quc3RyZWFtUmVzcG9uc2VTdGF0dXNDb2RlcyxcbiAgICAgICAgY2xvbmUoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgY2xvbmUgYSBub24tcHJveGllZCBXZWJSZXNvdXJjZUxpa2VcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHByZXBhcmUoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJXZWJSZXNvdXJjZUxpa2UucHJlcGFyZSgpIGlzIG5vdCBzdXBwb3J0ZWQgYnkgQGF6dXJlL2NvcmUtaHR0cC1jb21wYXRcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHZhbGlkYXRlUmVxdWVzdFByb3BlcnRpZXMoKSB7XG4gICAgICAgICAgICAvKiogZG8gbm90aGluZyAqL1xuICAgICAgICB9LFxuICAgIH07XG4gICAgaWYgKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5jcmVhdGVQcm94eSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb3h5KHdlYlJlc291cmNlLCB7XG4gICAgICAgICAgICBnZXQodGFyZ2V0LCBwcm9wLCByZWNlaXZlcikge1xuICAgICAgICAgICAgICAgIGlmIChwcm9wID09PSBvcmlnaW5hbFJlcXVlc3RTeW1ib2wpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3Q7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHByb3AgPT09IFwiY2xvbmVcIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRvV2ViUmVzb3VyY2VMaWtlKHRvUGlwZWxpbmVSZXF1ZXN0KHdlYlJlc291cmNlLCB7IG9yaWdpbmFsUmVxdWVzdCB9KSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZVByb3h5OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsUmVxdWVzdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5nZXQodGFyZ2V0LCBwcm9wLCByZWNlaXZlcik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0KHRhcmdldCwgcHJvcCwgdmFsdWUsIHJlY2VpdmVyKSB7XG4gICAgICAgICAgICAgICAgaWYgKHByb3AgPT09IFwia2VlcEFsaXZlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5kaXNhYmxlS2VlcEFsaXZlID0gIXZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBwYXNzVGhyb3VnaFByb3BzID0gW1xuICAgICAgICAgICAgICAgICAgICBcInVybFwiLFxuICAgICAgICAgICAgICAgICAgICBcIm1ldGhvZFwiLFxuICAgICAgICAgICAgICAgICAgICBcIndpdGhDcmVkZW50aWFsc1wiLFxuICAgICAgICAgICAgICAgICAgICBcInRpbWVvdXRcIixcbiAgICAgICAgICAgICAgICAgICAgXCJyZXF1ZXN0SWRcIixcbiAgICAgICAgICAgICAgICAgICAgXCJhYm9ydFNpZ25hbFwiLFxuICAgICAgICAgICAgICAgICAgICBcImJvZHlcIixcbiAgICAgICAgICAgICAgICAgICAgXCJmb3JtRGF0YVwiLFxuICAgICAgICAgICAgICAgICAgICBcIm9uRG93bmxvYWRQcm9ncmVzc1wiLFxuICAgICAgICAgICAgICAgICAgICBcIm9uVXBsb2FkUHJvZ3Jlc3NcIixcbiAgICAgICAgICAgICAgICAgICAgXCJwcm94eVNldHRpbmdzXCIsXG4gICAgICAgICAgICAgICAgICAgIFwic3RyZWFtUmVzcG9uc2VTdGF0dXNDb2Rlc1wiLFxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwcm9wID09PSBcInN0cmluZ1wiICYmIHBhc3NUaHJvdWdoUHJvcHMuaW5jbHVkZXMocHJvcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFtwcm9wXSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5zZXQodGFyZ2V0LCBwcm9wLCB2YWx1ZSwgcmVjZWl2ZXIpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gd2ViUmVzb3VyY2U7XG4gICAgfVxufVxuZXhwb3J0cy50b1dlYlJlc291cmNlTGlrZSA9IHRvV2ViUmVzb3VyY2VMaWtlO1xuLyoqXG4gKiBDb252ZXJ0cyBIdHRwSGVhZGVycyBmcm9tIGNvcmUtcmVzdC1waXBlbGluZSB0byBsb29rIGxpa2VcbiAqIEh0dHBIZWFkZXJzIGZyb20gY29yZS1odHRwLlxuICogQHBhcmFtIGhlYWRlcnMgLSBIdHRwSGVhZGVycyBmcm9tIGNvcmUtcmVzdC1waXBlbGluZVxuICogQHJldHVybnMgSHR0cEhlYWRlcnMgYXMgdGhleSBsb29rZWQgaW4gY29yZS1odHRwXG4gKi9cbmZ1bmN0aW9uIHRvSHR0cEhlYWRlcnNMaWtlKGhlYWRlcnMpIHtcbiAgICByZXR1cm4gbmV3IEh0dHBIZWFkZXJzKGhlYWRlcnMudG9KU09OKHsgcHJlc2VydmVDYXNlOiB0cnVlIH0pKTtcbn1cbmV4cG9ydHMudG9IdHRwSGVhZGVyc0xpa2UgPSB0b0h0dHBIZWFkZXJzTGlrZTtcbi8qKlxuICogQSBjb2xsZWN0aW9uIG9mIEh0dHBIZWFkZXJzIHRoYXQgY2FuIGJlIHNlbnQgd2l0aCBhIEhUVFAgcmVxdWVzdC5cbiAqL1xuZnVuY3Rpb24gZ2V0SGVhZGVyS2V5KGhlYWRlck5hbWUpIHtcbiAgICByZXR1cm4gaGVhZGVyTmFtZS50b0xvd2VyQ2FzZSgpO1xufVxuLyoqXG4gKiBBIGNvbGxlY3Rpb24gb2YgSFRUUCBoZWFkZXIga2V5L3ZhbHVlIHBhaXJzLlxuICovXG5jbGFzcyBIdHRwSGVhZGVycyB7XG4gICAgY29uc3RydWN0b3IocmF3SGVhZGVycykge1xuICAgICAgICB0aGlzLl9oZWFkZXJzTWFwID0ge307XG4gICAgICAgIGlmIChyYXdIZWFkZXJzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGhlYWRlck5hbWUgaW4gcmF3SGVhZGVycykge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0KGhlYWRlck5hbWUsIHJhd0hlYWRlcnNbaGVhZGVyTmFtZV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldCBhIGhlYWRlciBpbiB0aGlzIGNvbGxlY3Rpb24gd2l0aCB0aGUgcHJvdmlkZWQgbmFtZSBhbmQgdmFsdWUuIFRoZSBuYW1lIGlzXG4gICAgICogY2FzZS1pbnNlbnNpdGl2ZS5cbiAgICAgKiBAcGFyYW0gaGVhZGVyTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBoZWFkZXIgdG8gc2V0LiBUaGlzIHZhbHVlIGlzIGNhc2UtaW5zZW5zaXRpdmUuXG4gICAgICogQHBhcmFtIGhlYWRlclZhbHVlIC0gVGhlIHZhbHVlIG9mIHRoZSBoZWFkZXIgdG8gc2V0LlxuICAgICAqL1xuICAgIHNldChoZWFkZXJOYW1lLCBoZWFkZXJWYWx1ZSkge1xuICAgICAgICB0aGlzLl9oZWFkZXJzTWFwW2dldEhlYWRlcktleShoZWFkZXJOYW1lKV0gPSB7XG4gICAgICAgICAgICBuYW1lOiBoZWFkZXJOYW1lLFxuICAgICAgICAgICAgdmFsdWU6IGhlYWRlclZhbHVlLnRvU3RyaW5nKCksXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgaGVhZGVyIHZhbHVlIGZvciB0aGUgcHJvdmlkZWQgaGVhZGVyIG5hbWUsIG9yIHVuZGVmaW5lZCBpZiBubyBoZWFkZXIgZXhpc3RzIGluIHRoaXNcbiAgICAgKiBjb2xsZWN0aW9uIHdpdGggdGhlIHByb3ZpZGVkIG5hbWUuXG4gICAgICogQHBhcmFtIGhlYWRlck5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgaGVhZGVyLlxuICAgICAqL1xuICAgIGdldChoZWFkZXJOYW1lKSB7XG4gICAgICAgIGNvbnN0IGhlYWRlciA9IHRoaXMuX2hlYWRlcnNNYXBbZ2V0SGVhZGVyS2V5KGhlYWRlck5hbWUpXTtcbiAgICAgICAgcmV0dXJuICFoZWFkZXIgPyB1bmRlZmluZWQgOiBoZWFkZXIudmFsdWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCB3aGV0aGVyIG9yIG5vdCB0aGlzIGhlYWRlciBjb2xsZWN0aW9uIGNvbnRhaW5zIGEgaGVhZGVyIGVudHJ5IGZvciB0aGUgcHJvdmlkZWQgaGVhZGVyIG5hbWUuXG4gICAgICovXG4gICAgY29udGFpbnMoaGVhZGVyTmFtZSkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9oZWFkZXJzTWFwW2dldEhlYWRlcktleShoZWFkZXJOYW1lKV07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlbW92ZSB0aGUgaGVhZGVyIHdpdGggdGhlIHByb3ZpZGVkIGhlYWRlck5hbWUuIFJldHVybiB3aGV0aGVyIG9yIG5vdCB0aGUgaGVhZGVyIGV4aXN0ZWQgYW5kXG4gICAgICogd2FzIHJlbW92ZWQuXG4gICAgICogQHBhcmFtIGhlYWRlck5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgaGVhZGVyIHRvIHJlbW92ZS5cbiAgICAgKi9cbiAgICByZW1vdmUoaGVhZGVyTmFtZSkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmNvbnRhaW5zKGhlYWRlck5hbWUpO1xuICAgICAgICBkZWxldGUgdGhpcy5faGVhZGVyc01hcFtnZXRIZWFkZXJLZXkoaGVhZGVyTmFtZSldO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGhlYWRlcnMgdGhhdCBhcmUgY29udGFpbmVkIHRoaXMgY29sbGVjdGlvbiBhcyBhbiBvYmplY3QuXG4gICAgICovXG4gICAgcmF3SGVhZGVycygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9Kc29uKHsgcHJlc2VydmVDYXNlOiB0cnVlIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGhlYWRlcnMgdGhhdCBhcmUgY29udGFpbmVkIGluIHRoaXMgY29sbGVjdGlvbiBhcyBhbiBhcnJheS5cbiAgICAgKi9cbiAgICBoZWFkZXJzQXJyYXkoKSB7XG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBoZWFkZXJLZXkgaW4gdGhpcy5faGVhZGVyc01hcCkge1xuICAgICAgICAgICAgaGVhZGVycy5wdXNoKHRoaXMuX2hlYWRlcnNNYXBbaGVhZGVyS2V5XSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGhlYWRlcnM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgaGVhZGVyIG5hbWVzIHRoYXQgYXJlIGNvbnRhaW5lZCBpbiB0aGlzIGNvbGxlY3Rpb24uXG4gICAgICovXG4gICAgaGVhZGVyTmFtZXMoKSB7XG4gICAgICAgIGNvbnN0IGhlYWRlck5hbWVzID0gW107XG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNBcnJheSgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGhlYWRlck5hbWVzLnB1c2goaGVhZGVyc1tpXS5uYW1lKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGVhZGVyTmFtZXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgaGVhZGVyIHZhbHVlcyB0aGF0IGFyZSBjb250YWluZWQgaW4gdGhpcyBjb2xsZWN0aW9uLlxuICAgICAqL1xuICAgIGhlYWRlclZhbHVlcygpIHtcbiAgICAgICAgY29uc3QgaGVhZGVyVmFsdWVzID0gW107XG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNBcnJheSgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGhlYWRlclZhbHVlcy5wdXNoKGhlYWRlcnNbaV0udmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoZWFkZXJWYWx1ZXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgSlNPTiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBIVFRQIGhlYWRlciBjb2xsZWN0aW9uLlxuICAgICAqL1xuICAgIHRvSnNvbihvcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgICAgIGlmIChvcHRpb25zLnByZXNlcnZlQ2FzZSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBoZWFkZXJLZXkgaW4gdGhpcy5faGVhZGVyc01hcCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRlciA9IHRoaXMuX2hlYWRlcnNNYXBbaGVhZGVyS2V5XTtcbiAgICAgICAgICAgICAgICByZXN1bHRbaGVhZGVyLm5hbWVdID0gaGVhZGVyLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZm9yIChjb25zdCBoZWFkZXJLZXkgaW4gdGhpcy5faGVhZGVyc01hcCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRlciA9IHRoaXMuX2hlYWRlcnNNYXBbaGVhZGVyS2V5XTtcbiAgICAgICAgICAgICAgICByZXN1bHRbZ2V0SGVhZGVyS2V5KGhlYWRlci5uYW1lKV0gPSBoZWFkZXIudmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBIVFRQIGhlYWRlciBjb2xsZWN0aW9uLlxuICAgICAqL1xuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy50b0pzb24oeyBwcmVzZXJ2ZUNhc2U6IHRydWUgfSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBkZWVwIGNsb25lL2NvcHkgb2YgdGhpcyBIdHRwSGVhZGVycyBjb2xsZWN0aW9uLlxuICAgICAqL1xuICAgIGNsb25lKCkge1xuICAgICAgICBjb25zdCByZXN1bHRQcmVzZXJ2aW5nQ2FzaW5nID0ge307XG4gICAgICAgIGZvciAoY29uc3QgaGVhZGVyS2V5IGluIHRoaXMuX2hlYWRlcnNNYXApIHtcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlciA9IHRoaXMuX2hlYWRlcnNNYXBbaGVhZGVyS2V5XTtcbiAgICAgICAgICAgIHJlc3VsdFByZXNlcnZpbmdDYXNpbmdbaGVhZGVyLm5hbWVdID0gaGVhZGVyLnZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgSHR0cEhlYWRlcnMocmVzdWx0UHJlc2VydmluZ0Nhc2luZyk7XG4gICAgfVxufVxuZXhwb3J0cy5IdHRwSGVhZGVycyA9IEh0dHBIZWFkZXJzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRvUGlwZWxpbmVSZXNwb25zZSA9IGV4cG9ydHMudG9Db21wYXRSZXNwb25zZSA9IHZvaWQgMDtcbmNvbnN0IGNvcmVfcmVzdF9waXBlbGluZV8xID0gcmVxdWlyZShcIkBhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmVcIik7XG5jb25zdCB1dGlsX2pzXzEgPSByZXF1aXJlKFwiLi91dGlsLmpzXCIpO1xuY29uc3Qgb3JpZ2luYWxSZXNwb25zZSA9IFN5bWJvbChcIk9yaWdpbmFsIEZ1bGxPcGVyYXRpb25SZXNwb25zZVwiKTtcbi8qKlxuICogQSBoZWxwZXIgdG8gY29udmVydCByZXNwb25zZSBvYmplY3RzIGZyb20gdGhlIG5ldyBwaXBlbGluZSBiYWNrIHRvIHRoZSBvbGQgb25lLlxuICogQHBhcmFtIHJlc3BvbnNlIC0gQSByZXNwb25zZSBvYmplY3QgZnJvbSBjb3JlLWNsaWVudC5cbiAqIEByZXR1cm5zIEEgcmVzcG9uc2UgY29tcGF0aWJsZSB3aXRoIGBIdHRwT3BlcmF0aW9uUmVzcG9uc2VgIGZyb20gY29yZS1odHRwLlxuICovXG5mdW5jdGlvbiB0b0NvbXBhdFJlc3BvbnNlKHJlc3BvbnNlLCBvcHRpb25zKSB7XG4gICAgbGV0IHJlcXVlc3QgPSAoMCwgdXRpbF9qc18xLnRvV2ViUmVzb3VyY2VMaWtlKShyZXNwb25zZS5yZXF1ZXN0KTtcbiAgICBsZXQgaGVhZGVycyA9ICgwLCB1dGlsX2pzXzEudG9IdHRwSGVhZGVyc0xpa2UpKHJlc3BvbnNlLmhlYWRlcnMpO1xuICAgIGlmIChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY3JlYXRlUHJveHkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm94eShyZXNwb25zZSwge1xuICAgICAgICAgICAgZ2V0KHRhcmdldCwgcHJvcCwgcmVjZWl2ZXIpIHtcbiAgICAgICAgICAgICAgICBpZiAocHJvcCA9PT0gXCJoZWFkZXJzXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhlYWRlcnM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHByb3AgPT09IFwicmVxdWVzdFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXF1ZXN0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChwcm9wID09PSBvcmlnaW5hbFJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0KHRhcmdldCwgcHJvcCwgcmVjZWl2ZXIpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldCh0YXJnZXQsIHByb3AsIHZhbHVlLCByZWNlaXZlcikge1xuICAgICAgICAgICAgICAgIGlmIChwcm9wID09PSBcImhlYWRlcnNcIikge1xuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHByb3AgPT09IFwicmVxdWVzdFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3QgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3Quc2V0KHRhcmdldCwgcHJvcCwgdmFsdWUsIHJlY2VpdmVyKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcmVzcG9uc2UpLCB7IHJlcXVlc3QsXG4gICAgICAgICAgICBoZWFkZXJzIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMudG9Db21wYXRSZXNwb25zZSA9IHRvQ29tcGF0UmVzcG9uc2U7XG4vKipcbiAqIEEgaGVscGVyIHRvIGNvbnZlcnQgYmFjayB0byBhIFBpcGVsaW5lUmVzcG9uc2VcbiAqIEBwYXJhbSBjb21wYXRSZXNwb25zZSAtIEEgcmVzcG9uc2UgY29tcGF0aWJsZSB3aXRoIGBIdHRwT3BlcmF0aW9uUmVzcG9uc2VgIGZyb20gY29yZS1odHRwLlxuICovXG5mdW5jdGlvbiB0b1BpcGVsaW5lUmVzcG9uc2UoY29tcGF0UmVzcG9uc2UpIHtcbiAgICBjb25zdCBleHRlbmRlZENvbXBhdFJlc3BvbnNlID0gY29tcGF0UmVzcG9uc2U7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBleHRlbmRlZENvbXBhdFJlc3BvbnNlW29yaWdpbmFsUmVzcG9uc2VdO1xuICAgIGNvbnN0IGhlYWRlcnMgPSAoMCwgY29yZV9yZXN0X3BpcGVsaW5lXzEuY3JlYXRlSHR0cEhlYWRlcnMpKGNvbXBhdFJlc3BvbnNlLmhlYWRlcnMudG9Kc29uKHsgcHJlc2VydmVDYXNlOiB0cnVlIH0pKTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgcmVzcG9uc2UuaGVhZGVycyA9IGhlYWRlcnM7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGNvbXBhdFJlc3BvbnNlKSwgeyBoZWFkZXJzLCByZXF1ZXN0OiAoMCwgdXRpbF9qc18xLnRvUGlwZWxpbmVSZXF1ZXN0KShjb21wYXRSZXNwb25zZS5yZXF1ZXN0KSB9KTtcbiAgICB9XG59XG5leHBvcnRzLnRvUGlwZWxpbmVSZXNwb25zZSA9IHRvUGlwZWxpbmVSZXNwb25zZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlc3BvbnNlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuRXh0ZW5kZWRTZXJ2aWNlQ2xpZW50ID0gdm9pZCAwO1xuY29uc3QgZGlzYWJsZUtlZXBBbGl2ZVBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvZGlzYWJsZUtlZXBBbGl2ZVBvbGljeS5qc1wiKTtcbmNvbnN0IGNvcmVfcmVzdF9waXBlbGluZV8xID0gcmVxdWlyZShcIkBhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmVcIik7XG5jb25zdCBjb3JlX2NsaWVudF8xID0gcmVxdWlyZShcIkBhenVyZS9jb3JlLWNsaWVudFwiKTtcbmNvbnN0IHJlc3BvbnNlX2pzXzEgPSByZXF1aXJlKFwiLi9yZXNwb25zZS5qc1wiKTtcbi8qKlxuICogQ2xpZW50IHRvIHByb3ZpZGUgY29tcGF0YWJpbGl0eSBiZXR3ZWVuIGNvcmUgVjEgJiBWMi5cbiAqL1xuY2xhc3MgRXh0ZW5kZWRTZXJ2aWNlQ2xpZW50IGV4dGVuZHMgY29yZV9jbGllbnRfMS5TZXJ2aWNlQ2xpZW50IHtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHN1cGVyKG9wdGlvbnMpO1xuICAgICAgICBpZiAoKChfYSA9IG9wdGlvbnMua2VlcEFsaXZlT3B0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmVuYWJsZSkgPT09IGZhbHNlICYmXG4gICAgICAgICAgICAhKDAsIGRpc2FibGVLZWVwQWxpdmVQb2xpY3lfanNfMS5waXBlbGluZUNvbnRhaW5zRGlzYWJsZUtlZXBBbGl2ZVBvbGljeSkodGhpcy5waXBlbGluZSkpIHtcbiAgICAgICAgICAgIHRoaXMucGlwZWxpbmUuYWRkUG9saWN5KCgwLCBkaXNhYmxlS2VlcEFsaXZlUG9saWN5X2pzXzEuY3JlYXRlRGlzYWJsZUtlZXBBbGl2ZVBvbGljeSkoKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCgoX2IgPSBvcHRpb25zLnJlZGlyZWN0T3B0aW9ucykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmhhbmRsZVJlZGlyZWN0cykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICB0aGlzLnBpcGVsaW5lLnJlbW92ZVBvbGljeSh7XG4gICAgICAgICAgICAgICAgbmFtZTogY29yZV9yZXN0X3BpcGVsaW5lXzEucmVkaXJlY3RQb2xpY3lOYW1lLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29tcGF0aWJsZSBzZW5kIG9wZXJhdGlvbiByZXF1ZXN0IGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wZXJhdGlvbkFyZ3VtZW50cyAtIE9wZXJhdGlvbiBhcmd1bWVudHNcbiAgICAgKiBAcGFyYW0gb3BlcmF0aW9uU3BlYyAtIE9wZXJhdGlvbiBTcGVjXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBhc3luYyBzZW5kT3BlcmF0aW9uUmVxdWVzdChvcGVyYXRpb25Bcmd1bWVudHMsIG9wZXJhdGlvblNwZWMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCB1c2VyUHJvdmlkZWRDYWxsQmFjayA9IChfYSA9IG9wZXJhdGlvbkFyZ3VtZW50cyA9PT0gbnVsbCB8fCBvcGVyYXRpb25Bcmd1bWVudHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wZXJhdGlvbkFyZ3VtZW50cy5vcHRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub25SZXNwb25zZTtcbiAgICAgICAgbGV0IGxhc3RSZXNwb25zZTtcbiAgICAgICAgZnVuY3Rpb24gb25SZXNwb25zZShyYXdSZXNwb25zZSwgZmxhdFJlc3BvbnNlLCBlcnJvcikge1xuICAgICAgICAgICAgbGFzdFJlc3BvbnNlID0gcmF3UmVzcG9uc2U7XG4gICAgICAgICAgICBpZiAodXNlclByb3ZpZGVkQ2FsbEJhY2spIHtcbiAgICAgICAgICAgICAgICB1c2VyUHJvdmlkZWRDYWxsQmFjayhyYXdSZXNwb25zZSwgZmxhdFJlc3BvbnNlLCBlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgb3BlcmF0aW9uQXJndW1lbnRzLm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wZXJhdGlvbkFyZ3VtZW50cy5vcHRpb25zKSwgeyBvblJlc3BvbnNlIH0pO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzdXBlci5zZW5kT3BlcmF0aW9uUmVxdWVzdChvcGVyYXRpb25Bcmd1bWVudHMsIG9wZXJhdGlvblNwZWMpO1xuICAgICAgICBpZiAobGFzdFJlc3BvbnNlKSB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVzdWx0LCBcIl9yZXNwb25zZVwiLCB7XG4gICAgICAgICAgICAgICAgdmFsdWU6ICgwLCByZXNwb25zZV9qc18xLnRvQ29tcGF0UmVzcG9uc2UpKGxhc3RSZXNwb25zZSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbmV4cG9ydHMuRXh0ZW5kZWRTZXJ2aWNlQ2xpZW50ID0gRXh0ZW5kZWRTZXJ2aWNlQ2xpZW50O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXh0ZW5kZWRDbGllbnQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jcmVhdGVSZXF1ZXN0UG9saWN5RmFjdG9yeVBvbGljeSA9IGV4cG9ydHMucmVxdWVzdFBvbGljeUZhY3RvcnlQb2xpY3lOYW1lID0gZXhwb3J0cy5IdHRwUGlwZWxpbmVMb2dMZXZlbCA9IHZvaWQgMDtcbmNvbnN0IHV0aWxfanNfMSA9IHJlcXVpcmUoXCIuLi91dGlsLmpzXCIpO1xuY29uc3QgcmVzcG9uc2VfanNfMSA9IHJlcXVpcmUoXCIuLi9yZXNwb25zZS5qc1wiKTtcbi8qKlxuICogQW4gZW51bSBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFJlcXVlc3RQb2xpY3lcbiAqL1xudmFyIEh0dHBQaXBlbGluZUxvZ0xldmVsO1xuKGZ1bmN0aW9uIChIdHRwUGlwZWxpbmVMb2dMZXZlbCkge1xuICAgIEh0dHBQaXBlbGluZUxvZ0xldmVsW0h0dHBQaXBlbGluZUxvZ0xldmVsW1wiRVJST1JcIl0gPSAxXSA9IFwiRVJST1JcIjtcbiAgICBIdHRwUGlwZWxpbmVMb2dMZXZlbFtIdHRwUGlwZWxpbmVMb2dMZXZlbFtcIklORk9cIl0gPSAzXSA9IFwiSU5GT1wiO1xuICAgIEh0dHBQaXBlbGluZUxvZ0xldmVsW0h0dHBQaXBlbGluZUxvZ0xldmVsW1wiT0ZGXCJdID0gMF0gPSBcIk9GRlwiO1xuICAgIEh0dHBQaXBlbGluZUxvZ0xldmVsW0h0dHBQaXBlbGluZUxvZ0xldmVsW1wiV0FSTklOR1wiXSA9IDJdID0gXCJXQVJOSU5HXCI7XG59KShIdHRwUGlwZWxpbmVMb2dMZXZlbCB8fCAoZXhwb3J0cy5IdHRwUGlwZWxpbmVMb2dMZXZlbCA9IEh0dHBQaXBlbGluZUxvZ0xldmVsID0ge30pKTtcbmNvbnN0IG1vY2tSZXF1ZXN0UG9saWN5T3B0aW9ucyA9IHtcbiAgICBsb2coX2xvZ0xldmVsLCBfbWVzc2FnZSkge1xuICAgICAgICAvKiBkbyBub3RoaW5nICovXG4gICAgfSxcbiAgICBzaG91bGRMb2coX2xvZ0xldmVsKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxufTtcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIFJlcXVlc3RQb2xpY3lGYWN0b3J5UG9saWN5XG4gKi9cbmV4cG9ydHMucmVxdWVzdFBvbGljeUZhY3RvcnlQb2xpY3lOYW1lID0gXCJSZXF1ZXN0UG9saWN5RmFjdG9yeVBvbGljeVwiO1xuLyoqXG4gKiBBIHBvbGljeSB0aGF0IHdyYXBzIHBvbGljaWVzIHdyaXR0ZW4gZm9yIGNvcmUtaHR0cC5cbiAqIEBwYXJhbSBmYWN0b3JpZXMgLSBBbiBhcnJheSBvZiBgUmVxdWVzdFBvbGljeUZhY3RvcnlgIG9iamVjdHMgZnJvbSBhIGNvcmUtaHR0cCBwaXBlbGluZVxuICovXG5mdW5jdGlvbiBjcmVhdGVSZXF1ZXN0UG9saWN5RmFjdG9yeVBvbGljeShmYWN0b3JpZXMpIHtcbiAgICBjb25zdCBvcmRlcmVkRmFjdG9yaWVzID0gZmFjdG9yaWVzLnNsaWNlKCkucmV2ZXJzZSgpO1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGV4cG9ydHMucmVxdWVzdFBvbGljeUZhY3RvcnlQb2xpY3lOYW1lLFxuICAgICAgICBhc3luYyBzZW5kUmVxdWVzdChyZXF1ZXN0LCBuZXh0KSB7XG4gICAgICAgICAgICBsZXQgaHR0cFBpcGVsaW5lID0ge1xuICAgICAgICAgICAgICAgIGFzeW5jIHNlbmRSZXF1ZXN0KGh0dHBSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgbmV4dCgoMCwgdXRpbF9qc18xLnRvUGlwZWxpbmVSZXF1ZXN0KShodHRwUmVxdWVzdCkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIHJlc3BvbnNlX2pzXzEudG9Db21wYXRSZXNwb25zZSkocmVzcG9uc2UsIHsgY3JlYXRlUHJveHk6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZhY3Rvcnkgb2Ygb3JkZXJlZEZhY3Rvcmllcykge1xuICAgICAgICAgICAgICAgIGh0dHBQaXBlbGluZSA9IGZhY3RvcnkuY3JlYXRlKGh0dHBQaXBlbGluZSwgbW9ja1JlcXVlc3RQb2xpY3lPcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHdlYlJlc291cmNlTGlrZSA9ICgwLCB1dGlsX2pzXzEudG9XZWJSZXNvdXJjZUxpa2UpKHJlcXVlc3QsIHsgY3JlYXRlUHJveHk6IHRydWUgfSk7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGh0dHBQaXBlbGluZS5zZW5kUmVxdWVzdCh3ZWJSZXNvdXJjZUxpa2UpO1xuICAgICAgICAgICAgcmV0dXJuICgwLCByZXNwb25zZV9qc18xLnRvUGlwZWxpbmVSZXNwb25zZSkocmVzcG9uc2UpO1xuICAgICAgICB9LFxuICAgIH07XG59XG5leHBvcnRzLmNyZWF0ZVJlcXVlc3RQb2xpY3lGYWN0b3J5UG9saWN5ID0gY3JlYXRlUmVxdWVzdFBvbGljeUZhY3RvcnlQb2xpY3k7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZXF1ZXN0UG9saWN5RmFjdG9yeVBvbGljeS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNvbnZlcnRIdHRwQ2xpZW50ID0gdm9pZCAwO1xuY29uc3QgcmVzcG9uc2VfanNfMSA9IHJlcXVpcmUoXCIuL3Jlc3BvbnNlLmpzXCIpO1xuY29uc3QgdXRpbF9qc18xID0gcmVxdWlyZShcIi4vdXRpbC5qc1wiKTtcbi8qKlxuICogQ29udmVydHMgYSBSZXF1ZXN0UG9saWN5IGJhc2VkIEh0dHBDbGllbnQgdG8gYSBQaXBlbGluZVJlcXVlc3QgYmFzZWQgSHR0cENsaWVudC5cbiAqIEBwYXJhbSByZXF1ZXN0UG9saWN5Q2xpZW50IC0gQSBIdHRwQ2xpZW50IGNvbXBhdGlibGUgd2l0aCBjb3JlLWh0dHBcbiAqIEByZXR1cm5zIEEgSHR0cENsaWVudCBjb21wYXRpYmxlIHdpdGggY29yZS1yZXN0LXBpcGVsaW5lXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRIdHRwQ2xpZW50KHJlcXVlc3RQb2xpY3lDbGllbnQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBzZW5kUmVxdWVzdDogYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdFBvbGljeUNsaWVudC5zZW5kUmVxdWVzdCgoMCwgdXRpbF9qc18xLnRvV2ViUmVzb3VyY2VMaWtlKShyZXF1ZXN0LCB7IGNyZWF0ZVByb3h5OiB0cnVlIH0pKTtcbiAgICAgICAgICAgIHJldHVybiAoMCwgcmVzcG9uc2VfanNfMS50b1BpcGVsaW5lUmVzcG9uc2UpKHJlc3BvbnNlKTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuZXhwb3J0cy5jb252ZXJ0SHR0cENsaWVudCA9IGNvbnZlcnRIdHRwQ2xpZW50O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aHR0cENsaWVudEFkYXB0ZXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50b0h0dHBIZWFkZXJzTGlrZSA9IGV4cG9ydHMuY29udmVydEh0dHBDbGllbnQgPSBleHBvcnRzLmRpc2FibGVLZWVwQWxpdmVQb2xpY3lOYW1lID0gZXhwb3J0cy5IdHRwUGlwZWxpbmVMb2dMZXZlbCA9IGV4cG9ydHMuY3JlYXRlUmVxdWVzdFBvbGljeUZhY3RvcnlQb2xpY3kgPSBleHBvcnRzLnJlcXVlc3RQb2xpY3lGYWN0b3J5UG9saWN5TmFtZSA9IGV4cG9ydHMuRXh0ZW5kZWRTZXJ2aWNlQ2xpZW50ID0gdm9pZCAwO1xuLyoqXG4gKiBBIFNoaW0gTGlicmFyeSB0aGF0IHByb3ZpZGVzIGNvbXBhdGliaWxpdHkgYmV0d2VlbiBDb3JlIFYxICYgVjIgUGFja2FnZXMuXG4gKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uXG4gKi9cbnZhciBleHRlbmRlZENsaWVudF9qc18xID0gcmVxdWlyZShcIi4vZXh0ZW5kZWRDbGllbnQuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJFeHRlbmRlZFNlcnZpY2VDbGllbnRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGV4dGVuZGVkQ2xpZW50X2pzXzEuRXh0ZW5kZWRTZXJ2aWNlQ2xpZW50OyB9IH0pO1xudmFyIHJlcXVlc3RQb2xpY3lGYWN0b3J5UG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9wb2xpY2llcy9yZXF1ZXN0UG9saWN5RmFjdG9yeVBvbGljeS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlcXVlc3RQb2xpY3lGYWN0b3J5UG9saWN5TmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVxdWVzdFBvbGljeUZhY3RvcnlQb2xpY3lfanNfMS5yZXF1ZXN0UG9saWN5RmFjdG9yeVBvbGljeU5hbWU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVSZXF1ZXN0UG9saWN5RmFjdG9yeVBvbGljeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVxdWVzdFBvbGljeUZhY3RvcnlQb2xpY3lfanNfMS5jcmVhdGVSZXF1ZXN0UG9saWN5RmFjdG9yeVBvbGljeTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkh0dHBQaXBlbGluZUxvZ0xldmVsXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZXF1ZXN0UG9saWN5RmFjdG9yeVBvbGljeV9qc18xLkh0dHBQaXBlbGluZUxvZ0xldmVsOyB9IH0pO1xudmFyIGRpc2FibGVLZWVwQWxpdmVQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL2Rpc2FibGVLZWVwQWxpdmVQb2xpY3kuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkaXNhYmxlS2VlcEFsaXZlUG9saWN5TmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZGlzYWJsZUtlZXBBbGl2ZVBvbGljeV9qc18xLmRpc2FibGVLZWVwQWxpdmVQb2xpY3lOYW1lOyB9IH0pO1xudmFyIGh0dHBDbGllbnRBZGFwdGVyX2pzXzEgPSByZXF1aXJlKFwiLi9odHRwQ2xpZW50QWRhcHRlci5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNvbnZlcnRIdHRwQ2xpZW50XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBodHRwQ2xpZW50QWRhcHRlcl9qc18xLmNvbnZlcnRIdHRwQ2xpZW50OyB9IH0pO1xudmFyIHV0aWxfanNfMSA9IHJlcXVpcmUoXCIuL3V0aWwuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0b0h0dHBIZWFkZXJzTGlrZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdXRpbF9qc18xLnRvSHR0cEhlYWRlcnNMaWtlOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICIndXNlIHN0cmljdCc7XG5cbmNvbnN0IG5hbWVTdGFydENoYXIgPSAnOkEtWmEtel9cXFxcdTAwQzAtXFxcXHUwMEQ2XFxcXHUwMEQ4LVxcXFx1MDBGNlxcXFx1MDBGOC1cXFxcdTAyRkZcXFxcdTAzNzAtXFxcXHUwMzdEXFxcXHUwMzdGLVxcXFx1MUZGRlxcXFx1MjAwQy1cXFxcdTIwMERcXFxcdTIwNzAtXFxcXHUyMThGXFxcXHUyQzAwLVxcXFx1MkZFRlxcXFx1MzAwMS1cXFxcdUQ3RkZcXFxcdUY5MDAtXFxcXHVGRENGXFxcXHVGREYwLVxcXFx1RkZGRCc7XG5jb25zdCBuYW1lQ2hhciA9IG5hbWVTdGFydENoYXIgKyAnXFxcXC0uXFxcXGRcXFxcdTAwQjdcXFxcdTAzMDAtXFxcXHUwMzZGXFxcXHUyMDNGLVxcXFx1MjA0MCc7XG5jb25zdCBuYW1lUmVnZXhwID0gJ1snICsgbmFtZVN0YXJ0Q2hhciArICddWycgKyBuYW1lQ2hhciArICddKidcbmNvbnN0IHJlZ2V4TmFtZSA9IG5ldyBSZWdFeHAoJ14nICsgbmFtZVJlZ2V4cCArICckJyk7XG5cbmNvbnN0IGdldEFsbE1hdGNoZXMgPSBmdW5jdGlvbihzdHJpbmcsIHJlZ2V4KSB7XG4gIGNvbnN0IG1hdGNoZXMgPSBbXTtcbiAgbGV0IG1hdGNoID0gcmVnZXguZXhlYyhzdHJpbmcpO1xuICB3aGlsZSAobWF0Y2gpIHtcbiAgICBjb25zdCBhbGxtYXRjaGVzID0gW107XG4gICAgYWxsbWF0Y2hlcy5zdGFydEluZGV4ID0gcmVnZXgubGFzdEluZGV4IC0gbWF0Y2hbMF0ubGVuZ3RoO1xuICAgIGNvbnN0IGxlbiA9IG1hdGNoLmxlbmd0aDtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbGVuOyBpbmRleCsrKSB7XG4gICAgICBhbGxtYXRjaGVzLnB1c2gobWF0Y2hbaW5kZXhdKTtcbiAgICB9XG4gICAgbWF0Y2hlcy5wdXNoKGFsbG1hdGNoZXMpO1xuICAgIG1hdGNoID0gcmVnZXguZXhlYyhzdHJpbmcpO1xuICB9XG4gIHJldHVybiBtYXRjaGVzO1xufTtcblxuY29uc3QgaXNOYW1lID0gZnVuY3Rpb24oc3RyaW5nKSB7XG4gIGNvbnN0IG1hdGNoID0gcmVnZXhOYW1lLmV4ZWMoc3RyaW5nKTtcbiAgcmV0dXJuICEobWF0Y2ggPT09IG51bGwgfHwgdHlwZW9mIG1hdGNoID09PSAndW5kZWZpbmVkJyk7XG59O1xuXG5leHBvcnRzLmlzRXhpc3QgPSBmdW5jdGlvbih2KSB7XG4gIHJldHVybiB0eXBlb2YgdiAhPT0gJ3VuZGVmaW5lZCc7XG59O1xuXG5leHBvcnRzLmlzRW1wdHlPYmplY3QgPSBmdW5jdGlvbihvYmopIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikubGVuZ3RoID09PSAwO1xufTtcblxuLyoqXG4gKiBDb3B5IGFsbCB0aGUgcHJvcGVydGllcyBvZiBhIGludG8gYi5cbiAqIEBwYXJhbSB7Kn0gdGFyZ2V0XG4gKiBAcGFyYW0geyp9IGFcbiAqL1xuZXhwb3J0cy5tZXJnZSA9IGZ1bmN0aW9uKHRhcmdldCwgYSwgYXJyYXlNb2RlKSB7XG4gIGlmIChhKSB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGEpOyAvLyB3aWxsIHJldHVybiBhbiBhcnJheSBvZiBvd24gcHJvcGVydGllc1xuICAgIGNvbnN0IGxlbiA9IGtleXMubGVuZ3RoOyAvL2Rvbid0IG1ha2UgaXQgaW5saW5lXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgaWYgKGFycmF5TW9kZSA9PT0gJ3N0cmljdCcpIHtcbiAgICAgICAgdGFyZ2V0W2tleXNbaV1dID0gWyBhW2tleXNbaV1dIF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXRba2V5c1tpXV0gPSBhW2tleXNbaV1dO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcbi8qIGV4cG9ydHMubWVyZ2UgPWZ1bmN0aW9uIChiLGEpe1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihiLGEpO1xufSAqL1xuXG5leHBvcnRzLmdldFZhbHVlID0gZnVuY3Rpb24odikge1xuICBpZiAoZXhwb3J0cy5pc0V4aXN0KHYpKSB7XG4gICAgcmV0dXJuIHY7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG59O1xuXG4vLyBjb25zdCBmYWtlQ2FsbCA9IGZ1bmN0aW9uKGEpIHtyZXR1cm4gYTt9O1xuLy8gY29uc3QgZmFrZUNhbGxOb1JldHVybiA9IGZ1bmN0aW9uKCkge307XG5cbmV4cG9ydHMuaXNOYW1lID0gaXNOYW1lO1xuZXhwb3J0cy5nZXRBbGxNYXRjaGVzID0gZ2V0QWxsTWF0Y2hlcztcbmV4cG9ydHMubmFtZVJlZ2V4cCA9IG5hbWVSZWdleHA7XG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xuXG5jb25zdCBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgYWxsb3dCb29sZWFuQXR0cmlidXRlczogZmFsc2UsIC8vQSB0YWcgY2FuIGhhdmUgYXR0cmlidXRlcyB3aXRob3V0IGFueSB2YWx1ZVxuICB1bnBhaXJlZFRhZ3M6IFtdXG59O1xuXG4vL2NvbnN0IHRhZ3NQYXR0ZXJuID0gbmV3IFJlZ0V4cChcIjxcXFxcLz8oW1xcXFx3OlxcXFwtX1xcLl0rKVxcXFxzKlxcLz8+XCIsXCJnXCIpO1xuZXhwb3J0cy52YWxpZGF0ZSA9IGZ1bmN0aW9uICh4bWxEYXRhLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0T3B0aW9ucywgb3B0aW9ucyk7XG5cbiAgLy94bWxEYXRhID0geG1sRGF0YS5yZXBsYWNlKC8oXFxyXFxufFxcbnxcXHIpL2dtLFwiXCIpOy8vbWFrZSBpdCBzaW5nbGUgbGluZVxuICAvL3htbERhdGEgPSB4bWxEYXRhLnJlcGxhY2UoLyheXFxzKjxcXD94bWwuKj9cXD8+KS9nLFwiXCIpOy8vUmVtb3ZlIFhNTCBzdGFydGluZyB0YWdcbiAgLy94bWxEYXRhID0geG1sRGF0YS5yZXBsYWNlKC8oPCFET0NUWVBFW1xcc1xcd1xcXCJcXC5cXC9cXC1cXDpdKyhcXFsuKlxcXSkqXFxzKj4pL2csXCJcIik7Ly9SZW1vdmUgRE9DVFlQRVxuICBjb25zdCB0YWdzID0gW107XG4gIGxldCB0YWdGb3VuZCA9IGZhbHNlO1xuXG4gIC8vaW5kaWNhdGVzIHRoYXQgdGhlIHJvb3QgdGFnIGhhcyBiZWVuIGNsb3NlZCAoYWthLiBkZXB0aCAwIGhhcyBiZWVuIHJlYWNoZWQpXG4gIGxldCByZWFjaGVkUm9vdCA9IGZhbHNlO1xuXG4gIGlmICh4bWxEYXRhWzBdID09PSAnXFx1ZmVmZicpIHtcbiAgICAvLyBjaGVjayBmb3IgYnl0ZSBvcmRlciBtYXJrIChCT00pXG4gICAgeG1sRGF0YSA9IHhtbERhdGEuc3Vic3RyKDEpO1xuICB9XG4gIFxuICBmb3IgKGxldCBpID0gMDsgaSA8IHhtbERhdGEubGVuZ3RoOyBpKyspIHtcblxuICAgIGlmICh4bWxEYXRhW2ldID09PSAnPCcgJiYgeG1sRGF0YVtpKzFdID09PSAnPycpIHtcbiAgICAgIGkrPTI7XG4gICAgICBpID0gcmVhZFBJKHhtbERhdGEsaSk7XG4gICAgICBpZiAoaS5lcnIpIHJldHVybiBpO1xuICAgIH1lbHNlIGlmICh4bWxEYXRhW2ldID09PSAnPCcpIHtcbiAgICAgIC8vc3RhcnRpbmcgb2YgdGFnXG4gICAgICAvL3JlYWQgdW50aWwgeW91IHJlYWNoIHRvICc+JyBhdm9pZGluZyBhbnkgJz4nIGluIGF0dHJpYnV0ZSB2YWx1ZVxuICAgICAgbGV0IHRhZ1N0YXJ0UG9zID0gaTtcbiAgICAgIGkrKztcbiAgICAgIFxuICAgICAgaWYgKHhtbERhdGFbaV0gPT09ICchJykge1xuICAgICAgICBpID0gcmVhZENvbW1lbnRBbmRDREFUQSh4bWxEYXRhLCBpKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgY2xvc2luZ1RhZyA9IGZhbHNlO1xuICAgICAgICBpZiAoeG1sRGF0YVtpXSA9PT0gJy8nKSB7XG4gICAgICAgICAgLy9jbG9zaW5nIHRhZ1xuICAgICAgICAgIGNsb3NpbmdUYWcgPSB0cnVlO1xuICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgICAvL3JlYWQgdGFnbmFtZVxuICAgICAgICBsZXQgdGFnTmFtZSA9ICcnO1xuICAgICAgICBmb3IgKDsgaSA8IHhtbERhdGEubGVuZ3RoICYmXG4gICAgICAgICAgeG1sRGF0YVtpXSAhPT0gJz4nICYmXG4gICAgICAgICAgeG1sRGF0YVtpXSAhPT0gJyAnICYmXG4gICAgICAgICAgeG1sRGF0YVtpXSAhPT0gJ1xcdCcgJiZcbiAgICAgICAgICB4bWxEYXRhW2ldICE9PSAnXFxuJyAmJlxuICAgICAgICAgIHhtbERhdGFbaV0gIT09ICdcXHInOyBpKytcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGFnTmFtZSArPSB4bWxEYXRhW2ldO1xuICAgICAgICB9XG4gICAgICAgIHRhZ05hbWUgPSB0YWdOYW1lLnRyaW0oKTtcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0YWdOYW1lKTtcblxuICAgICAgICBpZiAodGFnTmFtZVt0YWdOYW1lLmxlbmd0aCAtIDFdID09PSAnLycpIHtcbiAgICAgICAgICAvL3NlbGYgY2xvc2luZyB0YWcgd2l0aG91dCBhdHRyaWJ1dGVzXG4gICAgICAgICAgdGFnTmFtZSA9IHRhZ05hbWUuc3Vic3RyaW5nKDAsIHRhZ05hbWUubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgLy9jb250aW51ZTtcbiAgICAgICAgICBpLS07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF2YWxpZGF0ZVRhZ05hbWUodGFnTmFtZSkpIHtcbiAgICAgICAgICBsZXQgbXNnO1xuICAgICAgICAgIGlmICh0YWdOYW1lLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIG1zZyA9IFwiSW52YWxpZCBzcGFjZSBhZnRlciAnPCcuXCI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1zZyA9IFwiVGFnICdcIit0YWdOYW1lK1wiJyBpcyBhbiBpbnZhbGlkIG5hbWUuXCI7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBnZXRFcnJvck9iamVjdCgnSW52YWxpZFRhZycsIG1zZywgZ2V0TGluZU51bWJlckZvclBvc2l0aW9uKHhtbERhdGEsIGkpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHJlYWRBdHRyaWJ1dGVTdHIoeG1sRGF0YSwgaSk7XG4gICAgICAgIGlmIChyZXN1bHQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KCdJbnZhbGlkQXR0cicsIFwiQXR0cmlidXRlcyBmb3IgJ1wiK3RhZ05hbWUrXCInIGhhdmUgb3BlbiBxdW90ZS5cIiwgZ2V0TGluZU51bWJlckZvclBvc2l0aW9uKHhtbERhdGEsIGkpKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgYXR0clN0ciA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgaSA9IHJlc3VsdC5pbmRleDtcblxuICAgICAgICBpZiAoYXR0clN0clthdHRyU3RyLmxlbmd0aCAtIDFdID09PSAnLycpIHtcbiAgICAgICAgICAvL3NlbGYgY2xvc2luZyB0YWdcbiAgICAgICAgICBjb25zdCBhdHRyU3RyU3RhcnQgPSBpIC0gYXR0clN0ci5sZW5ndGg7XG4gICAgICAgICAgYXR0clN0ciA9IGF0dHJTdHIuc3Vic3RyaW5nKDAsIGF0dHJTdHIubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgY29uc3QgaXNWYWxpZCA9IHZhbGlkYXRlQXR0cmlidXRlU3RyaW5nKGF0dHJTdHIsIG9wdGlvbnMpO1xuICAgICAgICAgIGlmIChpc1ZhbGlkID09PSB0cnVlKSB7XG4gICAgICAgICAgICB0YWdGb3VuZCA9IHRydWU7XG4gICAgICAgICAgICAvL2NvbnRpbnVlOyAvL3RleHQgbWF5IHByZXNlbnRzIGFmdGVyIHNlbGYgY2xvc2luZyB0YWdcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy90aGUgcmVzdWx0IGZyb20gdGhlIG5lc3RlZCBmdW5jdGlvbiByZXR1cm5zIHRoZSBwb3NpdGlvbiBvZiB0aGUgZXJyb3Igd2l0aGluIHRoZSBhdHRyaWJ1dGVcbiAgICAgICAgICAgIC8vaW4gb3JkZXIgdG8gZ2V0IHRoZSAndHJ1ZScgZXJyb3IgbGluZSwgd2UgbmVlZCB0byBjYWxjdWxhdGUgdGhlIHBvc2l0aW9uIHdoZXJlIHRoZSBhdHRyaWJ1dGUgYmVnaW5zIChpIC0gYXR0clN0ci5sZW5ndGgpIGFuZCB0aGVuIGFkZCB0aGUgcG9zaXRpb24gd2l0aGluIHRoZSBhdHRyaWJ1dGVcbiAgICAgICAgICAgIC8vdGhpcyBnaXZlcyB1cyB0aGUgYWJzb2x1dGUgaW5kZXggaW4gdGhlIGVudGlyZSB4bWwsIHdoaWNoIHdlIGNhbiB1c2UgdG8gZmluZCB0aGUgbGluZSBhdCBsYXN0XG4gICAgICAgICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoaXNWYWxpZC5lcnIuY29kZSwgaXNWYWxpZC5lcnIubXNnLCBnZXRMaW5lTnVtYmVyRm9yUG9zaXRpb24oeG1sRGF0YSwgYXR0clN0clN0YXJ0ICsgaXNWYWxpZC5lcnIubGluZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChjbG9zaW5nVGFnKSB7XG4gICAgICAgICAgaWYgKCFyZXN1bHQudGFnQ2xvc2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRUYWcnLCBcIkNsb3NpbmcgdGFnICdcIit0YWdOYW1lK1wiJyBkb2Vzbid0IGhhdmUgcHJvcGVyIGNsb3NpbmcuXCIsIGdldExpbmVOdW1iZXJGb3JQb3NpdGlvbih4bWxEYXRhLCBpKSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChhdHRyU3RyLnRyaW0oKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRUYWcnLCBcIkNsb3NpbmcgdGFnICdcIit0YWdOYW1lK1wiJyBjYW4ndCBoYXZlIGF0dHJpYnV0ZXMgb3IgaW52YWxpZCBzdGFydGluZy5cIiwgZ2V0TGluZU51bWJlckZvclBvc2l0aW9uKHhtbERhdGEsIHRhZ1N0YXJ0UG9zKSk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0YWdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KCdJbnZhbGlkVGFnJywgXCJDbG9zaW5nIHRhZyAnXCIrdGFnTmFtZStcIicgaGFzIG5vdCBiZWVuIG9wZW5lZC5cIiwgZ2V0TGluZU51bWJlckZvclBvc2l0aW9uKHhtbERhdGEsIHRhZ1N0YXJ0UG9zKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG90ZyA9IHRhZ3MucG9wKCk7XG4gICAgICAgICAgICBpZiAodGFnTmFtZSAhPT0gb3RnLnRhZ05hbWUpIHtcbiAgICAgICAgICAgICAgbGV0IG9wZW5Qb3MgPSBnZXRMaW5lTnVtYmVyRm9yUG9zaXRpb24oeG1sRGF0YSwgb3RnLnRhZ1N0YXJ0UG9zKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KCdJbnZhbGlkVGFnJyxcbiAgICAgICAgICAgICAgICBcIkV4cGVjdGVkIGNsb3NpbmcgdGFnICdcIitvdGcudGFnTmFtZStcIicgKG9wZW5lZCBpbiBsaW5lIFwiK29wZW5Qb3MubGluZStcIiwgY29sIFwiK29wZW5Qb3MuY29sK1wiKSBpbnN0ZWFkIG9mIGNsb3NpbmcgdGFnICdcIit0YWdOYW1lK1wiJy5cIixcbiAgICAgICAgICAgICAgICBnZXRMaW5lTnVtYmVyRm9yUG9zaXRpb24oeG1sRGF0YSwgdGFnU3RhcnRQb3MpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy93aGVuIHRoZXJlIGFyZSBubyBtb3JlIHRhZ3MsIHdlIHJlYWNoZWQgdGhlIHJvb3QgbGV2ZWwuXG4gICAgICAgICAgICBpZiAodGFncy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICByZWFjaGVkUm9vdCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGlzVmFsaWQgPSB2YWxpZGF0ZUF0dHJpYnV0ZVN0cmluZyhhdHRyU3RyLCBvcHRpb25zKTtcbiAgICAgICAgICBpZiAoaXNWYWxpZCAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgLy90aGUgcmVzdWx0IGZyb20gdGhlIG5lc3RlZCBmdW5jdGlvbiByZXR1cm5zIHRoZSBwb3NpdGlvbiBvZiB0aGUgZXJyb3Igd2l0aGluIHRoZSBhdHRyaWJ1dGVcbiAgICAgICAgICAgIC8vaW4gb3JkZXIgdG8gZ2V0IHRoZSAndHJ1ZScgZXJyb3IgbGluZSwgd2UgbmVlZCB0byBjYWxjdWxhdGUgdGhlIHBvc2l0aW9uIHdoZXJlIHRoZSBhdHRyaWJ1dGUgYmVnaW5zIChpIC0gYXR0clN0ci5sZW5ndGgpIGFuZCB0aGVuIGFkZCB0aGUgcG9zaXRpb24gd2l0aGluIHRoZSBhdHRyaWJ1dGVcbiAgICAgICAgICAgIC8vdGhpcyBnaXZlcyB1cyB0aGUgYWJzb2x1dGUgaW5kZXggaW4gdGhlIGVudGlyZSB4bWwsIHdoaWNoIHdlIGNhbiB1c2UgdG8gZmluZCB0aGUgbGluZSBhdCBsYXN0XG4gICAgICAgICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoaXNWYWxpZC5lcnIuY29kZSwgaXNWYWxpZC5lcnIubXNnLCBnZXRMaW5lTnVtYmVyRm9yUG9zaXRpb24oeG1sRGF0YSwgaSAtIGF0dHJTdHIubGVuZ3RoICsgaXNWYWxpZC5lcnIubGluZSkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vaWYgdGhlIHJvb3QgbGV2ZWwgaGFzIGJlZW4gcmVhY2hlZCBiZWZvcmUgLi4uXG4gICAgICAgICAgaWYgKHJlYWNoZWRSb290ID09PSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRYbWwnLCAnTXVsdGlwbGUgcG9zc2libGUgcm9vdCBub2RlcyBmb3VuZC4nLCBnZXRMaW5lTnVtYmVyRm9yUG9zaXRpb24oeG1sRGF0YSwgaSkpO1xuICAgICAgICAgIH0gZWxzZSBpZihvcHRpb25zLnVucGFpcmVkVGFncy5pbmRleE9mKHRhZ05hbWUpICE9PSAtMSl7XG4gICAgICAgICAgICAvL2Rvbid0IHB1c2ggaW50byBzdGFja1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0YWdzLnB1c2goe3RhZ05hbWUsIHRhZ1N0YXJ0UG9zfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRhZ0ZvdW5kID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vc2tpcCB0YWcgdGV4dCB2YWx1ZVxuICAgICAgICAvL0l0IG1heSBpbmNsdWRlIGNvbW1lbnRzIGFuZCBDREFUQSB2YWx1ZVxuICAgICAgICBmb3IgKGkrKzsgaSA8IHhtbERhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoeG1sRGF0YVtpXSA9PT0gJzwnKSB7XG4gICAgICAgICAgICBpZiAoeG1sRGF0YVtpICsgMV0gPT09ICchJykge1xuICAgICAgICAgICAgICAvL2NvbW1lbnQgb3IgQ0FEQVRBXG4gICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgaSA9IHJlYWRDb21tZW50QW5kQ0RBVEEoeG1sRGF0YSwgaSk7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh4bWxEYXRhW2krMV0gPT09ICc/Jykge1xuICAgICAgICAgICAgICBpID0gcmVhZFBJKHhtbERhdGEsICsraSk7XG4gICAgICAgICAgICAgIGlmIChpLmVycikgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2V7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoeG1sRGF0YVtpXSA9PT0gJyYnKSB7XG4gICAgICAgICAgICBjb25zdCBhZnRlckFtcCA9IHZhbGlkYXRlQW1wZXJzYW5kKHhtbERhdGEsIGkpO1xuICAgICAgICAgICAgaWYgKGFmdGVyQW1wID09IC0xKVxuICAgICAgICAgICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRDaGFyJywgXCJjaGFyICcmJyBpcyBub3QgZXhwZWN0ZWQuXCIsIGdldExpbmVOdW1iZXJGb3JQb3NpdGlvbih4bWxEYXRhLCBpKSk7XG4gICAgICAgICAgICBpID0gYWZ0ZXJBbXA7XG4gICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBpZiAocmVhY2hlZFJvb3QgPT09IHRydWUgJiYgIWlzV2hpdGVTcGFjZSh4bWxEYXRhW2ldKSkge1xuICAgICAgICAgICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRYbWwnLCBcIkV4dHJhIHRleHQgYXQgdGhlIGVuZFwiLCBnZXRMaW5lTnVtYmVyRm9yUG9zaXRpb24oeG1sRGF0YSwgaSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSAvL2VuZCBvZiByZWFkaW5nIHRhZyB0ZXh0IHZhbHVlXG4gICAgICAgIGlmICh4bWxEYXRhW2ldID09PSAnPCcpIHtcbiAgICAgICAgICBpLS07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCBpc1doaXRlU3BhY2UoeG1sRGF0YVtpXSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRDaGFyJywgXCJjaGFyICdcIit4bWxEYXRhW2ldK1wiJyBpcyBub3QgZXhwZWN0ZWQuXCIsIGdldExpbmVOdW1iZXJGb3JQb3NpdGlvbih4bWxEYXRhLCBpKSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKCF0YWdGb3VuZCkge1xuICAgIHJldHVybiBnZXRFcnJvck9iamVjdCgnSW52YWxpZFhtbCcsICdTdGFydCB0YWcgZXhwZWN0ZWQuJywgMSk7XG4gIH1lbHNlIGlmICh0YWdzLmxlbmd0aCA9PSAxKSB7XG4gICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRUYWcnLCBcIlVuY2xvc2VkIHRhZyAnXCIrdGFnc1swXS50YWdOYW1lK1wiJy5cIiwgZ2V0TGluZU51bWJlckZvclBvc2l0aW9uKHhtbERhdGEsIHRhZ3NbMF0udGFnU3RhcnRQb3MpKTtcbiAgfWVsc2UgaWYgKHRhZ3MubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KCdJbnZhbGlkWG1sJywgXCJJbnZhbGlkICdcIitcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeSh0YWdzLm1hcCh0ID0+IHQudGFnTmFtZSksIG51bGwsIDQpLnJlcGxhY2UoL1xccj9cXG4vZywgJycpK1xuICAgICAgICAgIFwiJyBmb3VuZC5cIiwge2xpbmU6IDEsIGNvbDogMX0pO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5mdW5jdGlvbiBpc1doaXRlU3BhY2UoY2hhcil7XG4gIHJldHVybiBjaGFyID09PSAnICcgfHwgY2hhciA9PT0gJ1xcdCcgfHwgY2hhciA9PT0gJ1xcbicgIHx8IGNoYXIgPT09ICdcXHInO1xufVxuLyoqXG4gKiBSZWFkIFByb2Nlc3NpbmcgaW5zc3RydWN0aW9ucyBhbmQgc2tpcFxuICogQHBhcmFtIHsqfSB4bWxEYXRhXG4gKiBAcGFyYW0geyp9IGlcbiAqL1xuZnVuY3Rpb24gcmVhZFBJKHhtbERhdGEsIGkpIHtcbiAgY29uc3Qgc3RhcnQgPSBpO1xuICBmb3IgKDsgaSA8IHhtbERhdGEubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoeG1sRGF0YVtpXSA9PSAnPycgfHwgeG1sRGF0YVtpXSA9PSAnICcpIHtcbiAgICAgIC8vdGFnbmFtZVxuICAgICAgY29uc3QgdGFnbmFtZSA9IHhtbERhdGEuc3Vic3RyKHN0YXJ0LCBpIC0gc3RhcnQpO1xuICAgICAgaWYgKGkgPiA1ICYmIHRhZ25hbWUgPT09ICd4bWwnKSB7XG4gICAgICAgIHJldHVybiBnZXRFcnJvck9iamVjdCgnSW52YWxpZFhtbCcsICdYTUwgZGVjbGFyYXRpb24gYWxsb3dlZCBvbmx5IGF0IHRoZSBzdGFydCBvZiB0aGUgZG9jdW1lbnQuJywgZ2V0TGluZU51bWJlckZvclBvc2l0aW9uKHhtbERhdGEsIGkpKTtcbiAgICAgIH0gZWxzZSBpZiAoeG1sRGF0YVtpXSA9PSAnPycgJiYgeG1sRGF0YVtpICsgMV0gPT0gJz4nKSB7XG4gICAgICAgIC8vY2hlY2sgaWYgdmFsaWQgYXR0cmlidXQgc3RyaW5nXG4gICAgICAgIGkrKztcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGk7XG59XG5cbmZ1bmN0aW9uIHJlYWRDb21tZW50QW5kQ0RBVEEoeG1sRGF0YSwgaSkge1xuICBpZiAoeG1sRGF0YS5sZW5ndGggPiBpICsgNSAmJiB4bWxEYXRhW2kgKyAxXSA9PT0gJy0nICYmIHhtbERhdGFbaSArIDJdID09PSAnLScpIHtcbiAgICAvL2NvbW1lbnRcbiAgICBmb3IgKGkgKz0gMzsgaSA8IHhtbERhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh4bWxEYXRhW2ldID09PSAnLScgJiYgeG1sRGF0YVtpICsgMV0gPT09ICctJyAmJiB4bWxEYXRhW2kgKyAyXSA9PT0gJz4nKSB7XG4gICAgICAgIGkgKz0gMjtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKFxuICAgIHhtbERhdGEubGVuZ3RoID4gaSArIDggJiZcbiAgICB4bWxEYXRhW2kgKyAxXSA9PT0gJ0QnICYmXG4gICAgeG1sRGF0YVtpICsgMl0gPT09ICdPJyAmJlxuICAgIHhtbERhdGFbaSArIDNdID09PSAnQycgJiZcbiAgICB4bWxEYXRhW2kgKyA0XSA9PT0gJ1QnICYmXG4gICAgeG1sRGF0YVtpICsgNV0gPT09ICdZJyAmJlxuICAgIHhtbERhdGFbaSArIDZdID09PSAnUCcgJiZcbiAgICB4bWxEYXRhW2kgKyA3XSA9PT0gJ0UnXG4gICkge1xuICAgIGxldCBhbmdsZUJyYWNrZXRzQ291bnQgPSAxO1xuICAgIGZvciAoaSArPSA4OyBpIDwgeG1sRGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHhtbERhdGFbaV0gPT09ICc8Jykge1xuICAgICAgICBhbmdsZUJyYWNrZXRzQ291bnQrKztcbiAgICAgIH0gZWxzZSBpZiAoeG1sRGF0YVtpXSA9PT0gJz4nKSB7XG4gICAgICAgIGFuZ2xlQnJhY2tldHNDb3VudC0tO1xuICAgICAgICBpZiAoYW5nbGVCcmFja2V0c0NvdW50ID09PSAwKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAoXG4gICAgeG1sRGF0YS5sZW5ndGggPiBpICsgOSAmJlxuICAgIHhtbERhdGFbaSArIDFdID09PSAnWycgJiZcbiAgICB4bWxEYXRhW2kgKyAyXSA9PT0gJ0MnICYmXG4gICAgeG1sRGF0YVtpICsgM10gPT09ICdEJyAmJlxuICAgIHhtbERhdGFbaSArIDRdID09PSAnQScgJiZcbiAgICB4bWxEYXRhW2kgKyA1XSA9PT0gJ1QnICYmXG4gICAgeG1sRGF0YVtpICsgNl0gPT09ICdBJyAmJlxuICAgIHhtbERhdGFbaSArIDddID09PSAnWydcbiAgKSB7XG4gICAgZm9yIChpICs9IDg7IGkgPCB4bWxEYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoeG1sRGF0YVtpXSA9PT0gJ10nICYmIHhtbERhdGFbaSArIDFdID09PSAnXScgJiYgeG1sRGF0YVtpICsgMl0gPT09ICc+Jykge1xuICAgICAgICBpICs9IDI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpO1xufVxuXG5jb25zdCBkb3VibGVRdW90ZSA9ICdcIic7XG5jb25zdCBzaW5nbGVRdW90ZSA9IFwiJ1wiO1xuXG4vKipcbiAqIEtlZXAgcmVhZGluZyB4bWxEYXRhIHVudGlsICc8JyBpcyBmb3VuZCBvdXRzaWRlIHRoZSBhdHRyaWJ1dGUgdmFsdWUuXG4gKiBAcGFyYW0ge3N0cmluZ30geG1sRGF0YVxuICogQHBhcmFtIHtudW1iZXJ9IGlcbiAqL1xuZnVuY3Rpb24gcmVhZEF0dHJpYnV0ZVN0cih4bWxEYXRhLCBpKSB7XG4gIGxldCBhdHRyU3RyID0gJyc7XG4gIGxldCBzdGFydENoYXIgPSAnJztcbiAgbGV0IHRhZ0Nsb3NlZCA9IGZhbHNlO1xuICBmb3IgKDsgaSA8IHhtbERhdGEubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoeG1sRGF0YVtpXSA9PT0gZG91YmxlUXVvdGUgfHwgeG1sRGF0YVtpXSA9PT0gc2luZ2xlUXVvdGUpIHtcbiAgICAgIGlmIChzdGFydENoYXIgPT09ICcnKSB7XG4gICAgICAgIHN0YXJ0Q2hhciA9IHhtbERhdGFbaV07XG4gICAgICB9IGVsc2UgaWYgKHN0YXJ0Q2hhciAhPT0geG1sRGF0YVtpXSkge1xuICAgICAgICAvL2lmIHZhdWUgaXMgZW5jbG9zZWQgd2l0aCBkb3VibGUgcXVvdGUgdGhlbiBzaW5nbGUgcXVvdGVzIGFyZSBhbGxvd2VkIGluc2lkZSB0aGUgdmFsdWUgYW5kIHZpY2UgdmVyc2FcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXJ0Q2hhciA9ICcnO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoeG1sRGF0YVtpXSA9PT0gJz4nKSB7XG4gICAgICBpZiAoc3RhcnRDaGFyID09PSAnJykge1xuICAgICAgICB0YWdDbG9zZWQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgYXR0clN0ciArPSB4bWxEYXRhW2ldO1xuICB9XG4gIGlmIChzdGFydENoYXIgIT09ICcnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB2YWx1ZTogYXR0clN0cixcbiAgICBpbmRleDogaSxcbiAgICB0YWdDbG9zZWQ6IHRhZ0Nsb3NlZFxuICB9O1xufVxuXG4vKipcbiAqIFNlbGVjdCBhbGwgdGhlIGF0dHJpYnV0ZXMgd2hldGhlciB2YWxpZCBvciBpbnZhbGlkLlxuICovXG5jb25zdCB2YWxpZEF0dHJTdHJSZWd4cCA9IG5ldyBSZWdFeHAoJyhcXFxccyopKFteXFxcXHM9XSspKFxcXFxzKj0pPyhcXFxccyooW1xcJ1wiXSkoKFtcXFxcc1xcXFxTXSkqPylcXFxcNSk/JywgJ2cnKTtcblxuLy9hdHRyLCA9XCJzZFwiLCBhPVwiYW1pdCdzXCIsIGE9XCJzZFwiYj1cInNhZlwiLCBhYiAgY2Q9XCJcIlxuXG5mdW5jdGlvbiB2YWxpZGF0ZUF0dHJpYnV0ZVN0cmluZyhhdHRyU3RyLCBvcHRpb25zKSB7XG4gIC8vY29uc29sZS5sb2coXCJzdGFydDpcIithdHRyU3RyK1wiOmVuZFwiKTtcblxuICAvL2lmKGF0dHJTdHIudHJpbSgpLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRydWU7IC8vZW1wdHkgc3RyaW5nXG5cbiAgY29uc3QgbWF0Y2hlcyA9IHV0aWwuZ2V0QWxsTWF0Y2hlcyhhdHRyU3RyLCB2YWxpZEF0dHJTdHJSZWd4cCk7XG4gIGNvbnN0IGF0dHJOYW1lcyA9IHt9O1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWF0Y2hlcy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChtYXRjaGVzW2ldWzFdLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy9ub3NwYWNlIGJlZm9yZSBhdHRyaWJ1dGUgbmFtZTogYT1cInNkXCJiPVwic2FmXCJcbiAgICAgIHJldHVybiBnZXRFcnJvck9iamVjdCgnSW52YWxpZEF0dHInLCBcIkF0dHJpYnV0ZSAnXCIrbWF0Y2hlc1tpXVsyXStcIicgaGFzIG5vIHNwYWNlIGluIHN0YXJ0aW5nLlwiLCBnZXRQb3NpdGlvbkZyb21NYXRjaChtYXRjaGVzW2ldKSlcbiAgICB9IGVsc2UgaWYgKG1hdGNoZXNbaV1bM10gIT09IHVuZGVmaW5lZCAmJiBtYXRjaGVzW2ldWzRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBnZXRFcnJvck9iamVjdCgnSW52YWxpZEF0dHInLCBcIkF0dHJpYnV0ZSAnXCIrbWF0Y2hlc1tpXVsyXStcIicgaXMgd2l0aG91dCB2YWx1ZS5cIiwgZ2V0UG9zaXRpb25Gcm9tTWF0Y2gobWF0Y2hlc1tpXSkpO1xuICAgIH0gZWxzZSBpZiAobWF0Y2hlc1tpXVszXSA9PT0gdW5kZWZpbmVkICYmICFvcHRpb25zLmFsbG93Qm9vbGVhbkF0dHJpYnV0ZXMpIHtcbiAgICAgIC8vaW5kZXBlbmRlbnQgYXR0cmlidXRlOiBhYlxuICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KCdJbnZhbGlkQXR0cicsIFwiYm9vbGVhbiBhdHRyaWJ1dGUgJ1wiK21hdGNoZXNbaV1bMl0rXCInIGlzIG5vdCBhbGxvd2VkLlwiLCBnZXRQb3NpdGlvbkZyb21NYXRjaChtYXRjaGVzW2ldKSk7XG4gICAgfVxuICAgIC8qIGVsc2UgaWYobWF0Y2hlc1tpXVs2XSA9PT0gdW5kZWZpbmVkKXsvL2F0dHJpYnV0ZSB3aXRob3V0IHZhbHVlOiBhYj1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZXJyOiB7IGNvZGU6XCJJbnZhbGlkQXR0clwiLG1zZzpcImF0dHJpYnV0ZSBcIiArIG1hdGNoZXNbaV1bMl0gKyBcIiBoYXMgbm8gdmFsdWUgYXNzaWduZWQuXCJ9fTtcbiAgICAgICAgICAgICAgICB9ICovXG4gICAgY29uc3QgYXR0ck5hbWUgPSBtYXRjaGVzW2ldWzJdO1xuICAgIGlmICghdmFsaWRhdGVBdHRyTmFtZShhdHRyTmFtZSkpIHtcbiAgICAgIHJldHVybiBnZXRFcnJvck9iamVjdCgnSW52YWxpZEF0dHInLCBcIkF0dHJpYnV0ZSAnXCIrYXR0ck5hbWUrXCInIGlzIGFuIGludmFsaWQgbmFtZS5cIiwgZ2V0UG9zaXRpb25Gcm9tTWF0Y2gobWF0Y2hlc1tpXSkpO1xuICAgIH1cbiAgICBpZiAoIWF0dHJOYW1lcy5oYXNPd25Qcm9wZXJ0eShhdHRyTmFtZSkpIHtcbiAgICAgIC8vY2hlY2sgZm9yIGR1cGxpY2F0ZSBhdHRyaWJ1dGUuXG4gICAgICBhdHRyTmFtZXNbYXR0ck5hbWVdID0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KCdJbnZhbGlkQXR0cicsIFwiQXR0cmlidXRlICdcIithdHRyTmFtZStcIicgaXMgcmVwZWF0ZWQuXCIsIGdldFBvc2l0aW9uRnJvbU1hdGNoKG1hdGNoZXNbaV0pKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVOdW1iZXJBbXBlcnNhbmQoeG1sRGF0YSwgaSkge1xuICBsZXQgcmUgPSAvXFxkLztcbiAgaWYgKHhtbERhdGFbaV0gPT09ICd4Jykge1xuICAgIGkrKztcbiAgICByZSA9IC9bXFxkYS1mQS1GXS87XG4gIH1cbiAgZm9yICg7IGkgPCB4bWxEYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHhtbERhdGFbaV0gPT09ICc7JylcbiAgICAgIHJldHVybiBpO1xuICAgIGlmICgheG1sRGF0YVtpXS5tYXRjaChyZSkpXG4gICAgICBicmVhaztcbiAgfVxuICByZXR1cm4gLTE7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlQW1wZXJzYW5kKHhtbERhdGEsIGkpIHtcbiAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL3htbC8jZHQtY2hhcnJlZlxuICBpKys7XG4gIGlmICh4bWxEYXRhW2ldID09PSAnOycpXG4gICAgcmV0dXJuIC0xO1xuICBpZiAoeG1sRGF0YVtpXSA9PT0gJyMnKSB7XG4gICAgaSsrO1xuICAgIHJldHVybiB2YWxpZGF0ZU51bWJlckFtcGVyc2FuZCh4bWxEYXRhLCBpKTtcbiAgfVxuICBsZXQgY291bnQgPSAwO1xuICBmb3IgKDsgaSA8IHhtbERhdGEubGVuZ3RoOyBpKyssIGNvdW50KyspIHtcbiAgICBpZiAoeG1sRGF0YVtpXS5tYXRjaCgvXFx3LykgJiYgY291bnQgPCAyMClcbiAgICAgIGNvbnRpbnVlO1xuICAgIGlmICh4bWxEYXRhW2ldID09PSAnOycpXG4gICAgICBicmVhaztcbiAgICByZXR1cm4gLTE7XG4gIH1cbiAgcmV0dXJuIGk7XG59XG5cbmZ1bmN0aW9uIGdldEVycm9yT2JqZWN0KGNvZGUsIG1lc3NhZ2UsIGxpbmVOdW1iZXIpIHtcbiAgcmV0dXJuIHtcbiAgICBlcnI6IHtcbiAgICAgIGNvZGU6IGNvZGUsXG4gICAgICBtc2c6IG1lc3NhZ2UsXG4gICAgICBsaW5lOiBsaW5lTnVtYmVyLmxpbmUgfHwgbGluZU51bWJlcixcbiAgICAgIGNvbDogbGluZU51bWJlci5jb2wsXG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVBdHRyTmFtZShhdHRyTmFtZSkge1xuICByZXR1cm4gdXRpbC5pc05hbWUoYXR0ck5hbWUpO1xufVxuXG4vLyBjb25zdCBzdGFydHNXaXRoWE1MID0gL154bWwvaTtcblxuZnVuY3Rpb24gdmFsaWRhdGVUYWdOYW1lKHRhZ25hbWUpIHtcbiAgcmV0dXJuIHV0aWwuaXNOYW1lKHRhZ25hbWUpIC8qICYmICF0YWduYW1lLm1hdGNoKHN0YXJ0c1dpdGhYTUwpICovO1xufVxuXG4vL3RoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbGluZSBudW1iZXIgZm9yIHRoZSBjaGFyYWN0ZXIgYXQgdGhlIGdpdmVuIGluZGV4XG5mdW5jdGlvbiBnZXRMaW5lTnVtYmVyRm9yUG9zaXRpb24oeG1sRGF0YSwgaW5kZXgpIHtcbiAgY29uc3QgbGluZXMgPSB4bWxEYXRhLnN1YnN0cmluZygwLCBpbmRleCkuc3BsaXQoL1xccj9cXG4vKTtcbiAgcmV0dXJuIHtcbiAgICBsaW5lOiBsaW5lcy5sZW5ndGgsXG5cbiAgICAvLyBjb2x1bW4gbnVtYmVyIGlzIGxhc3QgbGluZSdzIGxlbmd0aCArIDEsIGJlY2F1c2UgY29sdW1uIG51bWJlcmluZyBzdGFydHMgYXQgMTpcbiAgICBjb2w6IGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLmxlbmd0aCArIDFcbiAgfTtcbn1cblxuLy90aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHBvc2l0aW9uIG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgbWF0Y2ggd2l0aGluIGF0dHJTdHJcbmZ1bmN0aW9uIGdldFBvc2l0aW9uRnJvbU1hdGNoKG1hdGNoKSB7XG4gIHJldHVybiBtYXRjaC5zdGFydEluZGV4ICsgbWF0Y2hbMV0ubGVuZ3RoO1xufVxuIiwKICAgICJcbmNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xuICAgIHByZXNlcnZlT3JkZXI6IGZhbHNlLFxuICAgIGF0dHJpYnV0ZU5hbWVQcmVmaXg6ICdAXycsXG4gICAgYXR0cmlidXRlc0dyb3VwTmFtZTogZmFsc2UsXG4gICAgdGV4dE5vZGVOYW1lOiAnI3RleHQnLFxuICAgIGlnbm9yZUF0dHJpYnV0ZXM6IHRydWUsXG4gICAgcmVtb3ZlTlNQcmVmaXg6IGZhbHNlLCAvLyByZW1vdmUgTlMgZnJvbSB0YWcgbmFtZSBvciBhdHRyaWJ1dGUgbmFtZSBpZiB0cnVlXG4gICAgYWxsb3dCb29sZWFuQXR0cmlidXRlczogZmFsc2UsIC8vYSB0YWcgY2FuIGhhdmUgYXR0cmlidXRlcyB3aXRob3V0IGFueSB2YWx1ZVxuICAgIC8vaWdub3JlUm9vdEVsZW1lbnQgOiBmYWxzZSxcbiAgICBwYXJzZVRhZ1ZhbHVlOiB0cnVlLFxuICAgIHBhcnNlQXR0cmlidXRlVmFsdWU6IGZhbHNlLFxuICAgIHRyaW1WYWx1ZXM6IHRydWUsIC8vVHJpbSBzdHJpbmcgdmFsdWVzIG9mIHRhZyBhbmQgYXR0cmlidXRlc1xuICAgIGNkYXRhUHJvcE5hbWU6IGZhbHNlLFxuICAgIG51bWJlclBhcnNlT3B0aW9uczoge1xuICAgICAgaGV4OiB0cnVlLFxuICAgICAgbGVhZGluZ1plcm9zOiB0cnVlLFxuICAgICAgZU5vdGF0aW9uOiB0cnVlXG4gICAgfSxcbiAgICB0YWdWYWx1ZVByb2Nlc3NvcjogZnVuY3Rpb24odGFnTmFtZSwgdmFsKSB7XG4gICAgICByZXR1cm4gdmFsO1xuICAgIH0sXG4gICAgYXR0cmlidXRlVmFsdWVQcm9jZXNzb3I6IGZ1bmN0aW9uKGF0dHJOYW1lLCB2YWwpIHtcbiAgICAgIHJldHVybiB2YWw7XG4gICAgfSxcbiAgICBzdG9wTm9kZXM6IFtdLCAvL25lc3RlZCB0YWdzIHdpbGwgbm90IGJlIHBhcnNlZCBldmVuIGZvciBlcnJvcnNcbiAgICBhbHdheXNDcmVhdGVUZXh0Tm9kZTogZmFsc2UsXG4gICAgaXNBcnJheTogKCkgPT4gZmFsc2UsXG4gICAgY29tbWVudFByb3BOYW1lOiBmYWxzZSxcbiAgICB1bnBhaXJlZFRhZ3M6IFtdLFxuICAgIHByb2Nlc3NFbnRpdGllczogdHJ1ZSxcbiAgICBodG1sRW50aXRpZXM6IGZhbHNlLFxuICAgIGlnbm9yZURlY2xhcmF0aW9uOiBmYWxzZSxcbiAgICBpZ25vcmVQaVRhZ3M6IGZhbHNlLFxuICAgIHRyYW5zZm9ybVRhZ05hbWU6IGZhbHNlLFxuICAgIHRyYW5zZm9ybUF0dHJpYnV0ZU5hbWU6IGZhbHNlLFxuICAgIHVwZGF0ZVRhZzogZnVuY3Rpb24odGFnTmFtZSwgalBhdGgsIGF0dHJzKXtcbiAgICAgIHJldHVybiB0YWdOYW1lXG4gICAgfSxcbiAgICAvLyBza2lwRW1wdHlMaXN0SXRlbTogZmFsc2Vcbn07XG4gICBcbmNvbnN0IGJ1aWxkT3B0aW9ucyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdE9wdGlvbnMsIG9wdGlvbnMpO1xufTtcblxuZXhwb3J0cy5idWlsZE9wdGlvbnMgPSBidWlsZE9wdGlvbnM7XG5leHBvcnRzLmRlZmF1bHRPcHRpb25zID0gZGVmYXVsdE9wdGlvbnM7IiwKICAgICIndXNlIHN0cmljdCc7XG5cbmNsYXNzIFhtbE5vZGV7XG4gIGNvbnN0cnVjdG9yKHRhZ25hbWUpIHtcbiAgICB0aGlzLnRhZ25hbWUgPSB0YWduYW1lO1xuICAgIHRoaXMuY2hpbGQgPSBbXTsgLy9uZXN0ZWQgdGFncywgdGV4dCwgY2RhdGEsIGNvbW1lbnRzIGluIG9yZGVyXG4gICAgdGhpc1tcIjpAXCJdID0ge307IC8vYXR0cmlidXRlcyBtYXBcbiAgfVxuICBhZGQoa2V5LHZhbCl7XG4gICAgLy8gdGhpcy5jaGlsZC5wdXNoKCB7bmFtZSA6IGtleSwgdmFsOiB2YWwsIGlzQ2RhdGE6IGlzQ2RhdGEgfSk7XG4gICAgaWYoa2V5ID09PSBcIl9fcHJvdG9fX1wiKSBrZXkgPSBcIiNfX3Byb3RvX19cIjtcbiAgICB0aGlzLmNoaWxkLnB1c2goIHtba2V5XTogdmFsIH0pO1xuICB9XG4gIGFkZENoaWxkKG5vZGUpIHtcbiAgICBpZihub2RlLnRhZ25hbWUgPT09IFwiX19wcm90b19fXCIpIG5vZGUudGFnbmFtZSA9IFwiI19fcHJvdG9fX1wiO1xuICAgIGlmKG5vZGVbXCI6QFwiXSAmJiBPYmplY3Qua2V5cyhub2RlW1wiOkBcIl0pLmxlbmd0aCA+IDApe1xuICAgICAgdGhpcy5jaGlsZC5wdXNoKCB7IFtub2RlLnRhZ25hbWVdOiBub2RlLmNoaWxkLCBbXCI6QFwiXTogbm9kZVtcIjpAXCJdIH0pO1xuICAgIH1lbHNle1xuICAgICAgdGhpcy5jaGlsZC5wdXNoKCB7IFtub2RlLnRhZ25hbWVdOiBub2RlLmNoaWxkIH0pO1xuICAgIH1cbiAgfTtcbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBYbWxOb2RlOyIsCiAgICAiY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL3V0aWwnKTtcblxuLy9UT0RPOiBoYW5kbGUgY29tbWVudHNcbmZ1bmN0aW9uIHJlYWREb2NUeXBlKHhtbERhdGEsIGkpe1xuICAgIFxuICAgIGNvbnN0IGVudGl0aWVzID0ge307XG4gICAgaWYoIHhtbERhdGFbaSArIDNdID09PSAnTycgJiZcbiAgICAgICAgIHhtbERhdGFbaSArIDRdID09PSAnQycgJiZcbiAgICAgICAgIHhtbERhdGFbaSArIDVdID09PSAnVCcgJiZcbiAgICAgICAgIHhtbERhdGFbaSArIDZdID09PSAnWScgJiZcbiAgICAgICAgIHhtbERhdGFbaSArIDddID09PSAnUCcgJiZcbiAgICAgICAgIHhtbERhdGFbaSArIDhdID09PSAnRScpXG4gICAgeyAgICBcbiAgICAgICAgaSA9IGkrOTtcbiAgICAgICAgbGV0IGFuZ2xlQnJhY2tldHNDb3VudCA9IDE7XG4gICAgICAgIGxldCBoYXNCb2R5ID0gZmFsc2UsIGNvbW1lbnQgPSBmYWxzZTtcbiAgICAgICAgbGV0IGV4cCA9IFwiXCI7XG4gICAgICAgIGZvcig7aTx4bWxEYXRhLmxlbmd0aDtpKyspe1xuICAgICAgICAgICAgaWYgKHhtbERhdGFbaV0gPT09ICc8JyAmJiAhY29tbWVudCkgeyAvL0RldGVybWluZSB0aGUgdGFnIHR5cGVcbiAgICAgICAgICAgICAgICBpZiggaGFzQm9keSAmJiBpc0VudGl0eSh4bWxEYXRhLCBpKSl7XG4gICAgICAgICAgICAgICAgICAgIGkgKz0gNzsgXG4gICAgICAgICAgICAgICAgICAgIFtlbnRpdHlOYW1lLCB2YWwsaV0gPSByZWFkRW50aXR5RXhwKHhtbERhdGEsaSsxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYodmFsLmluZGV4T2YoXCImXCIpID09PSAtMSkgLy9QYXJhbWV0ZXIgZW50aXRpZXMgYXJlIG5vdCBzdXBwb3J0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0aWVzWyB2YWxpZGF0ZUVudGl0eU5hbWUoZW50aXR5TmFtZSkgXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWd4IDogUmVnRXhwKCBgJiR7ZW50aXR5TmFtZX07YCxcImdcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsOiB2YWxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYoIGhhc0JvZHkgJiYgaXNFbGVtZW50KHhtbERhdGEsIGkpKSAgaSArPSA4Oy8vTm90IHN1cHBvcnRlZFxuICAgICAgICAgICAgICAgIGVsc2UgaWYoIGhhc0JvZHkgJiYgaXNBdHRsaXN0KHhtbERhdGEsIGkpKSAgaSArPSA4Oy8vTm90IHN1cHBvcnRlZFxuICAgICAgICAgICAgICAgIGVsc2UgaWYoIGhhc0JvZHkgJiYgaXNOb3RhdGlvbih4bWxEYXRhLCBpKSkgaSArPSA5Oy8vTm90IHN1cHBvcnRlZFxuICAgICAgICAgICAgICAgIGVsc2UgaWYoIGlzQ29tbWVudCkgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudCA9IHRydWU7XG4gICAgICAgICAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIERPQ1RZUEVcIik7XG5cbiAgICAgICAgICAgICAgICBhbmdsZUJyYWNrZXRzQ291bnQrKztcbiAgICAgICAgICAgICAgICBleHAgPSBcIlwiO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh4bWxEYXRhW2ldID09PSAnPicpIHsgLy9SZWFkIHRhZyBjb250ZW50XG4gICAgICAgICAgICAgICAgaWYoY29tbWVudCl7XG4gICAgICAgICAgICAgICAgICAgIGlmKCB4bWxEYXRhW2kgLSAxXSA9PT0gXCItXCIgJiYgeG1sRGF0YVtpIC0gMl0gPT09IFwiLVwiKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuZ2xlQnJhY2tldHNDb3VudC0tO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgIGFuZ2xlQnJhY2tldHNDb3VudC0tO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoYW5nbGVCcmFja2V0c0NvdW50ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9ZWxzZSBpZiggeG1sRGF0YVtpXSA9PT0gJ1snKXtcbiAgICAgICAgICAgICAgICBoYXNCb2R5ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIGV4cCArPSB4bWxEYXRhW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmKGFuZ2xlQnJhY2tldHNDb3VudCAhPT0gMCl7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuY2xvc2VkIERPQ1RZUEVgKTtcbiAgICAgICAgfVxuICAgIH1lbHNle1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgVGFnIGluc3RlYWQgb2YgRE9DVFlQRWApO1xuICAgIH1cbiAgICByZXR1cm4ge2VudGl0aWVzLCBpfTtcbn1cblxuZnVuY3Rpb24gcmVhZEVudGl0eUV4cCh4bWxEYXRhLGkpe1xuICAgIC8vRXh0ZXJuYWwgZW50aXRpZXMgYXJlIG5vdCBzdXBwb3J0ZWRcbiAgICAvLyAgICA8IUVOVElUWSBleHQgU1lTVEVNIFwiaHR0cDovL25vcm1hbC13ZWJzaXRlLmNvbVwiID5cblxuICAgIC8vUGFyYW1ldGVyIGVudGl0aWVzIGFyZSBub3Qgc3VwcG9ydGVkXG4gICAgLy8gICAgPCFFTlRJVFkgZW50aXR5bmFtZSBcIiZhbm90aGVyRWxlbWVudDtcIj5cblxuICAgIC8vSW50ZXJuYWwgZW50aXRpZXMgYXJlIHN1cHBvcnRlZFxuICAgIC8vICAgIDwhRU5USVRZIGVudGl0eW5hbWUgXCJyZXBsYWNlbWVudCB0ZXh0XCI+XG4gICAgXG4gICAgLy9yZWFkIEVudGl0eU5hbWVcbiAgICBsZXQgZW50aXR5TmFtZSA9IFwiXCI7XG4gICAgZm9yICg7IGkgPCB4bWxEYXRhLmxlbmd0aCAmJiAoeG1sRGF0YVtpXSAhPT0gXCInXCIgJiYgeG1sRGF0YVtpXSAhPT0gJ1wiJyApOyBpKyspIHtcbiAgICAgICAgLy8gaWYoeG1sRGF0YVtpXSA9PT0gXCIgXCIpIGNvbnRpbnVlO1xuICAgICAgICAvLyBlbHNlIFxuICAgICAgICBlbnRpdHlOYW1lICs9IHhtbERhdGFbaV07XG4gICAgfVxuICAgIGVudGl0eU5hbWUgPSBlbnRpdHlOYW1lLnRyaW0oKTtcbiAgICBpZihlbnRpdHlOYW1lLmluZGV4T2YoXCIgXCIpICE9PSAtMSkgdGhyb3cgbmV3IEVycm9yKFwiRXh0ZXJuYWwgZW50aXRlcyBhcmUgbm90IHN1cHBvcnRlZFwiKTtcblxuICAgIC8vcmVhZCBFbnRpdHkgVmFsdWVcbiAgICBjb25zdCBzdGFydENoYXIgPSB4bWxEYXRhW2krK107XG4gICAgbGV0IHZhbCA9IFwiXCJcbiAgICBmb3IgKDsgaSA8IHhtbERhdGEubGVuZ3RoICYmIHhtbERhdGFbaV0gIT09IHN0YXJ0Q2hhciA7IGkrKykge1xuICAgICAgICB2YWwgKz0geG1sRGF0YVtpXTtcbiAgICB9XG4gICAgcmV0dXJuIFtlbnRpdHlOYW1lLCB2YWwsIGldO1xufVxuXG5mdW5jdGlvbiBpc0NvbW1lbnQoeG1sRGF0YSwgaSl7XG4gICAgaWYoeG1sRGF0YVtpKzFdID09PSAnIScgJiZcbiAgICB4bWxEYXRhW2krMl0gPT09ICctJyAmJlxuICAgIHhtbERhdGFbaSszXSA9PT0gJy0nKSByZXR1cm4gdHJ1ZVxuICAgIHJldHVybiBmYWxzZVxufVxuZnVuY3Rpb24gaXNFbnRpdHkoeG1sRGF0YSwgaSl7XG4gICAgaWYoeG1sRGF0YVtpKzFdID09PSAnIScgJiZcbiAgICB4bWxEYXRhW2krMl0gPT09ICdFJyAmJlxuICAgIHhtbERhdGFbaSszXSA9PT0gJ04nICYmXG4gICAgeG1sRGF0YVtpKzRdID09PSAnVCcgJiZcbiAgICB4bWxEYXRhW2krNV0gPT09ICdJJyAmJlxuICAgIHhtbERhdGFbaSs2XSA9PT0gJ1QnICYmXG4gICAgeG1sRGF0YVtpKzddID09PSAnWScpIHJldHVybiB0cnVlXG4gICAgcmV0dXJuIGZhbHNlXG59XG5mdW5jdGlvbiBpc0VsZW1lbnQoeG1sRGF0YSwgaSl7XG4gICAgaWYoeG1sRGF0YVtpKzFdID09PSAnIScgJiZcbiAgICB4bWxEYXRhW2krMl0gPT09ICdFJyAmJlxuICAgIHhtbERhdGFbaSszXSA9PT0gJ0wnICYmXG4gICAgeG1sRGF0YVtpKzRdID09PSAnRScgJiZcbiAgICB4bWxEYXRhW2krNV0gPT09ICdNJyAmJlxuICAgIHhtbERhdGFbaSs2XSA9PT0gJ0UnICYmXG4gICAgeG1sRGF0YVtpKzddID09PSAnTicgJiZcbiAgICB4bWxEYXRhW2krOF0gPT09ICdUJykgcmV0dXJuIHRydWVcbiAgICByZXR1cm4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gaXNBdHRsaXN0KHhtbERhdGEsIGkpe1xuICAgIGlmKHhtbERhdGFbaSsxXSA9PT0gJyEnICYmXG4gICAgeG1sRGF0YVtpKzJdID09PSAnQScgJiZcbiAgICB4bWxEYXRhW2krM10gPT09ICdUJyAmJlxuICAgIHhtbERhdGFbaSs0XSA9PT0gJ1QnICYmXG4gICAgeG1sRGF0YVtpKzVdID09PSAnTCcgJiZcbiAgICB4bWxEYXRhW2krNl0gPT09ICdJJyAmJlxuICAgIHhtbERhdGFbaSs3XSA9PT0gJ1MnICYmXG4gICAgeG1sRGF0YVtpKzhdID09PSAnVCcpIHJldHVybiB0cnVlXG4gICAgcmV0dXJuIGZhbHNlXG59XG5mdW5jdGlvbiBpc05vdGF0aW9uKHhtbERhdGEsIGkpe1xuICAgIGlmKHhtbERhdGFbaSsxXSA9PT0gJyEnICYmXG4gICAgeG1sRGF0YVtpKzJdID09PSAnTicgJiZcbiAgICB4bWxEYXRhW2krM10gPT09ICdPJyAmJlxuICAgIHhtbERhdGFbaSs0XSA9PT0gJ1QnICYmXG4gICAgeG1sRGF0YVtpKzVdID09PSAnQScgJiZcbiAgICB4bWxEYXRhW2krNl0gPT09ICdUJyAmJlxuICAgIHhtbERhdGFbaSs3XSA9PT0gJ0knICYmXG4gICAgeG1sRGF0YVtpKzhdID09PSAnTycgJiZcbiAgICB4bWxEYXRhW2krOV0gPT09ICdOJykgcmV0dXJuIHRydWVcbiAgICByZXR1cm4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVFbnRpdHlOYW1lKG5hbWUpe1xuICAgIGlmICh1dGlsLmlzTmFtZShuYW1lKSlcblx0cmV0dXJuIG5hbWU7XG4gICAgZWxzZVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZW50aXR5IG5hbWUgJHtuYW1lfWApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHJlYWREb2NUeXBlO1xuIiwKICAgICJjb25zdCBoZXhSZWdleCA9IC9eWy0rXT8weFthLWZBLUYwLTldKyQvO1xuY29uc3QgbnVtUmVnZXggPSAvXihbXFwtXFwrXSk/KDAqKShcXC5bMC05XSsoW2VFXVxcLT9bMC05XSspP3xbMC05XSsoXFwuWzAtOV0rKFtlRV1cXC0/WzAtOV0rKT8pPykkLztcbi8vIGNvbnN0IG9jdFJlZ2V4ID0gLzB4W2EtejAtOV0rLztcbi8vIGNvbnN0IGJpblJlZ2V4ID0gLzB4W2EtejAtOV0rLztcblxuXG4vL3BvbHlmaWxsXG5pZiAoIU51bWJlci5wYXJzZUludCAmJiB3aW5kb3cucGFyc2VJbnQpIHtcbiAgICBOdW1iZXIucGFyc2VJbnQgPSB3aW5kb3cucGFyc2VJbnQ7XG59XG5pZiAoIU51bWJlci5wYXJzZUZsb2F0ICYmIHdpbmRvdy5wYXJzZUZsb2F0KSB7XG4gICAgTnVtYmVyLnBhcnNlRmxvYXQgPSB3aW5kb3cucGFyc2VGbG9hdDtcbn1cblxuICBcbmNvbnN0IGNvbnNpZGVyID0ge1xuICAgIGhleCA6ICB0cnVlLFxuICAgIGxlYWRpbmdaZXJvczogdHJ1ZSxcbiAgICBkZWNpbWFsUG9pbnQ6IFwiXFwuXCIsXG4gICAgZU5vdGF0aW9uOiB0cnVlXG4gICAgLy9za2lwTGlrZTogL3JlZ2V4L1xufTtcblxuZnVuY3Rpb24gdG9OdW1iZXIoc3RyLCBvcHRpb25zID0ge30pe1xuICAgIC8vIGNvbnN0IG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBjb25zaWRlcik7XG4gICAgLy8gaWYob3B0LmxlYWRpbmdaZXJvcyA9PT0gZmFsc2Upe1xuICAgIC8vICAgICBvcHRpb25zLmxlYWRpbmdaZXJvcyA9IGZhbHNlO1xuICAgIC8vIH1lbHNlIGlmKG9wdC5oZXggPT09IGZhbHNlKXtcbiAgICAvLyAgICAgb3B0aW9ucy5oZXggPSBmYWxzZTtcbiAgICAvLyB9XG5cbiAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgY29uc2lkZXIsIG9wdGlvbnMgKTtcbiAgICBpZighc3RyIHx8IHR5cGVvZiBzdHIgIT09IFwic3RyaW5nXCIgKSByZXR1cm4gc3RyO1xuICAgIFxuICAgIGxldCB0cmltbWVkU3RyICA9IHN0ci50cmltKCk7XG4gICAgLy8gaWYodHJpbW1lZFN0ciA9PT0gXCIwLjBcIikgcmV0dXJuIDA7XG4gICAgLy8gZWxzZSBpZih0cmltbWVkU3RyID09PSBcIiswLjBcIikgcmV0dXJuIDA7XG4gICAgLy8gZWxzZSBpZih0cmltbWVkU3RyID09PSBcIi0wLjBcIikgcmV0dXJuIC0wO1xuXG4gICAgaWYob3B0aW9ucy5za2lwTGlrZSAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbnMuc2tpcExpa2UudGVzdCh0cmltbWVkU3RyKSkgcmV0dXJuIHN0cjtcbiAgICBlbHNlIGlmIChvcHRpb25zLmhleCAmJiBoZXhSZWdleC50ZXN0KHRyaW1tZWRTdHIpKSB7XG4gICAgICAgIHJldHVybiBOdW1iZXIucGFyc2VJbnQodHJpbW1lZFN0ciwgMTYpO1xuICAgIC8vIH0gZWxzZSBpZiAob3B0aW9ucy5wYXJzZU9jdCAmJiBvY3RSZWdleC50ZXN0KHN0cikpIHtcbiAgICAvLyAgICAgcmV0dXJuIE51bWJlci5wYXJzZUludCh2YWwsIDgpO1xuICAgIC8vIH1lbHNlIGlmIChvcHRpb25zLnBhcnNlQmluICYmIGJpblJlZ2V4LnRlc3Qoc3RyKSkge1xuICAgIC8vICAgICByZXR1cm4gTnVtYmVyLnBhcnNlSW50KHZhbCwgMik7XG4gICAgfWVsc2V7XG4gICAgICAgIC8vc2VwYXJhdGUgbmVnYXRpdmUgc2lnbiwgbGVhZGluZyB6ZXJvcywgYW5kIHJlc3QgbnVtYmVyXG4gICAgICAgIGNvbnN0IG1hdGNoID0gbnVtUmVnZXguZXhlYyh0cmltbWVkU3RyKTtcbiAgICAgICAgaWYobWF0Y2gpe1xuICAgICAgICAgICAgY29uc3Qgc2lnbiA9IG1hdGNoWzFdO1xuICAgICAgICAgICAgY29uc3QgbGVhZGluZ1plcm9zID0gbWF0Y2hbMl07XG4gICAgICAgICAgICBsZXQgbnVtVHJpbW1lZEJ5WmVyb3MgPSB0cmltWmVyb3MobWF0Y2hbM10pOyAvL2NvbXBsZXRlIG51bSB3aXRob3V0IGxlYWRpbmcgemVyb3NcbiAgICAgICAgICAgIC8vdHJpbSBlbmRpbmcgemVyb3MgZm9yIGZsb2F0aW5nIG51bWJlclxuICAgICAgICAgICAgXG4gICAgICAgICAgICBjb25zdCBlTm90YXRpb24gPSBtYXRjaFs0XSB8fCBtYXRjaFs2XTtcbiAgICAgICAgICAgIGlmKCFvcHRpb25zLmxlYWRpbmdaZXJvcyAmJiBsZWFkaW5nWmVyb3MubGVuZ3RoID4gMCAmJiBzaWduICYmIHRyaW1tZWRTdHJbMl0gIT09IFwiLlwiKSByZXR1cm4gc3RyOyAvLy0wMTIzXG4gICAgICAgICAgICBlbHNlIGlmKCFvcHRpb25zLmxlYWRpbmdaZXJvcyAmJiBsZWFkaW5nWmVyb3MubGVuZ3RoID4gMCAmJiAhc2lnbiAmJiB0cmltbWVkU3RyWzFdICE9PSBcIi5cIikgcmV0dXJuIHN0cjsgLy8wMTIzXG4gICAgICAgICAgICBlbHNley8vbm8gbGVhZGluZyB6ZXJvcyBvciBsZWFkaW5nIHplcm9zIGFyZSBhbGxvd2VkXG4gICAgICAgICAgICAgICAgY29uc3QgbnVtID0gTnVtYmVyKHRyaW1tZWRTdHIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG51bVN0ciA9IFwiXCIgKyBudW07XG4gICAgICAgICAgICAgICAgaWYobnVtU3RyLnNlYXJjaCgvW2VFXS8pICE9PSAtMSl7IC8vZ2l2ZW4gbnVtYmVyIGlzIGxvbmcgYW5kIHBhcnNlZCB0byBlTm90YXRpb25cbiAgICAgICAgICAgICAgICAgICAgaWYob3B0aW9ucy5lTm90YXRpb24pIHJldHVybiBudW07XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgcmV0dXJuIHN0cjtcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZihlTm90YXRpb24peyAvL2dpdmVuIG51bWJlciBoYXMgZW5vdGF0aW9uXG4gICAgICAgICAgICAgICAgICAgIGlmKG9wdGlvbnMuZU5vdGF0aW9uKSByZXR1cm4gbnVtO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIHJldHVybiBzdHI7XG4gICAgICAgICAgICAgICAgfWVsc2UgaWYodHJpbW1lZFN0ci5pbmRleE9mKFwiLlwiKSAhPT0gLTEpeyAvL2Zsb2F0aW5nIG51bWJlclxuICAgICAgICAgICAgICAgICAgICAvLyBjb25zdCBkZWNpbWFsUGFydCA9IG1hdGNoWzVdLnN1YnN0cigxKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc3QgaW50UGFydCA9IHRyaW1tZWRTdHIuc3Vic3RyKDAsdHJpbW1lZFN0ci5pbmRleE9mKFwiLlwiKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnN0IHAgPSBudW1TdHIuaW5kZXhPZihcIi5cIik7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnN0IGdpdmVuSW50UGFydCA9IG51bVN0ci5zdWJzdHIoMCxwKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc3QgZ2l2ZW5EZWNQYXJ0ID0gbnVtU3RyLnN1YnN0cihwKzEpO1xuICAgICAgICAgICAgICAgICAgICBpZihudW1TdHIgPT09IFwiMFwiICYmIChudW1UcmltbWVkQnlaZXJvcyA9PT0gXCJcIikgKSByZXR1cm4gbnVtOyAvLzAuMFxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKG51bVN0ciA9PT0gbnVtVHJpbW1lZEJ5WmVyb3MpIHJldHVybiBudW07IC8vMC40NTYuIDAuNzkwMDBcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiggc2lnbiAmJiBudW1TdHIgPT09IFwiLVwiK251bVRyaW1tZWRCeVplcm9zKSByZXR1cm4gbnVtO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIHJldHVybiBzdHI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGlmKGxlYWRpbmdaZXJvcyl7XG4gICAgICAgICAgICAgICAgICAgIC8vIGlmKG51bVRyaW1tZWRCeVplcm9zID09PSBudW1TdHIpe1xuICAgICAgICAgICAgICAgICAgICAvLyAgICAgaWYob3B0aW9ucy5sZWFkaW5nWmVyb3MpIHJldHVybiBudW07XG4gICAgICAgICAgICAgICAgICAgIC8vICAgICBlbHNlIHJldHVybiBzdHI7XG4gICAgICAgICAgICAgICAgICAgIC8vIH1lbHNlIHJldHVybiBzdHI7XG4gICAgICAgICAgICAgICAgICAgIGlmKG51bVRyaW1tZWRCeVplcm9zID09PSBudW1TdHIpIHJldHVybiBudW07XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYoc2lnbitudW1UcmltbWVkQnlaZXJvcyA9PT0gbnVtU3RyKSByZXR1cm4gbnVtO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIHJldHVybiBzdHI7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYodHJpbW1lZFN0ciA9PT0gbnVtU3RyKSByZXR1cm4gbnVtO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYodHJpbW1lZFN0ciA9PT0gc2lnbitudW1TdHIpIHJldHVybiBudW07XG4gICAgICAgICAgICAgICAgLy8gZWxzZXtcbiAgICAgICAgICAgICAgICAvLyAgICAgLy9udW1iZXIgd2l0aCArLy0gc2lnblxuICAgICAgICAgICAgICAgIC8vICAgICB0cmltbWVkU3RyLnRlc3QoL1stK11bMC05XSk7XG5cbiAgICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0cjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGVsc2UgaWYoIWVOb3RhdGlvbiAmJiB0cmltbWVkU3RyICYmIHRyaW1tZWRTdHIgIT09IE51bWJlcih0cmltbWVkU3RyKSApIHJldHVybiBzdHI7XG4gICAgICAgICAgICBcbiAgICAgICAgfWVsc2V7IC8vbm9uLW51bWVyaWMgc3RyaW5nXG4gICAgICAgICAgICByZXR1cm4gc3RyO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vKipcbiAqIFxuICogQHBhcmFtIHtzdHJpbmd9IG51bVN0ciB3aXRob3V0IGxlYWRpbmcgemVyb3NcbiAqIEByZXR1cm5zIFxuICovXG5mdW5jdGlvbiB0cmltWmVyb3MobnVtU3RyKXtcbiAgICBpZihudW1TdHIgJiYgbnVtU3RyLmluZGV4T2YoXCIuXCIpICE9PSAtMSl7Ly9mbG9hdFxuICAgICAgICBudW1TdHIgPSBudW1TdHIucmVwbGFjZSgvMCskLywgXCJcIik7IC8vcmVtb3ZlIGVuZGluZyB6ZXJvc1xuICAgICAgICBpZihudW1TdHIgPT09IFwiLlwiKSAgbnVtU3RyID0gXCIwXCI7XG4gICAgICAgIGVsc2UgaWYobnVtU3RyWzBdID09PSBcIi5cIikgIG51bVN0ciA9IFwiMFwiK251bVN0cjtcbiAgICAgICAgZWxzZSBpZihudW1TdHJbbnVtU3RyLmxlbmd0aC0xXSA9PT0gXCIuXCIpICBudW1TdHIgPSBudW1TdHIuc3Vic3RyKDAsbnVtU3RyLmxlbmd0aC0xKTtcbiAgICAgICAgcmV0dXJuIG51bVN0cjtcbiAgICB9XG4gICAgcmV0dXJuIG51bVN0cjtcbn1cbm1vZHVsZS5leHBvcnRzID0gdG9OdW1iZXJcbiIsCiAgICAiZnVuY3Rpb24gZ2V0SWdub3JlQXR0cmlidXRlc0ZuKGlnbm9yZUF0dHJpYnV0ZXMpIHtcbiAgICBpZiAodHlwZW9mIGlnbm9yZUF0dHJpYnV0ZXMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIGlnbm9yZUF0dHJpYnV0ZXNcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaWdub3JlQXR0cmlidXRlcykpIHtcbiAgICAgICAgcmV0dXJuIChhdHRyTmFtZSkgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIGlnbm9yZUF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHBhdHRlcm4gPT09ICdzdHJpbmcnICYmIGF0dHJOYW1lID09PSBwYXR0ZXJuKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwYXR0ZXJuIGluc3RhbmNlb2YgUmVnRXhwICYmIHBhdHRlcm4udGVzdChhdHRyTmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuICgpID0+IGZhbHNlXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0SWdub3JlQXR0cmlidXRlc0ZuIiwKICAgICIndXNlIHN0cmljdCc7XG4vLy9AdHMtY2hlY2tcblxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL3V0aWwnKTtcbmNvbnN0IHhtbE5vZGUgPSByZXF1aXJlKCcuL3htbE5vZGUnKTtcbmNvbnN0IHJlYWREb2NUeXBlID0gcmVxdWlyZShcIi4vRG9jVHlwZVJlYWRlclwiKTtcbmNvbnN0IHRvTnVtYmVyID0gcmVxdWlyZShcInN0cm51bVwiKTtcbmNvbnN0IGdldElnbm9yZUF0dHJpYnV0ZXNGbiA9IHJlcXVpcmUoJy4uL2lnbm9yZUF0dHJpYnV0ZXMnKVxuXG4vLyBjb25zdCByZWd4ID1cbi8vICAgJzwoKCFcXFxcW0NEQVRBXFxcXFsoW1xcXFxzXFxcXFNdKj8pKF1dPikpfCgoTkFNRTopPyhOQU1FKSkoW14+XSopPnwoKFxcXFwvKShOQU1FKVxcXFxzKj4pKShbXjxdKiknXG4vLyAgIC5yZXBsYWNlKC9OQU1FL2csIHV0aWwubmFtZVJlZ2V4cCk7XG5cbi8vY29uc3QgdGFnc1JlZ3ggPSBuZXcgUmVnRXhwKFwiPChcXFxcLz9bXFxcXHc6XFxcXC1cXC5fXSspKFtePl0qKT4oXFxcXHMqXCIrY2RhdGFSZWd4K1wiKSooW148XSspP1wiLFwiZ1wiKTtcbi8vY29uc3QgdGFnc1JlZ3ggPSBuZXcgUmVnRXhwKFwiPChcXFxcLz8pKChcXFxcdyo6KT8oW1xcXFx3OlxcXFwtXFwuX10rKSkoW14+XSopPihbXjxdKikoXCIrY2RhdGFSZWd4K1wiKFtePF0qKSkqKFtePF0rKT9cIixcImdcIik7XG5cbmNsYXNzIE9yZGVyZWRPYmpQYXJzZXJ7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMpe1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy5jdXJyZW50Tm9kZSA9IG51bGw7XG4gICAgdGhpcy50YWdzTm9kZVN0YWNrID0gW107XG4gICAgdGhpcy5kb2NUeXBlRW50aXRpZXMgPSB7fTtcbiAgICB0aGlzLmxhc3RFbnRpdGllcyA9IHtcbiAgICAgIFwiYXBvc1wiIDogeyByZWdleDogLyYoYXBvc3wjMzl8I3gyNyk7L2csIHZhbCA6IFwiJ1wifSxcbiAgICAgIFwiZ3RcIiA6IHsgcmVnZXg6IC8mKGd0fCM2MnwjeDNFKTsvZywgdmFsIDogXCI+XCJ9LFxuICAgICAgXCJsdFwiIDogeyByZWdleDogLyYobHR8IzYwfCN4M0MpOy9nLCB2YWwgOiBcIjxcIn0sXG4gICAgICBcInF1b3RcIiA6IHsgcmVnZXg6IC8mKHF1b3R8IzM0fCN4MjIpOy9nLCB2YWwgOiBcIlxcXCJcIn0sXG4gICAgfTtcbiAgICB0aGlzLmFtcEVudGl0eSA9IHsgcmVnZXg6IC8mKGFtcHwjMzh8I3gyNik7L2csIHZhbCA6IFwiJlwifTtcbiAgICB0aGlzLmh0bWxFbnRpdGllcyA9IHtcbiAgICAgIFwic3BhY2VcIjogeyByZWdleDogLyYobmJzcHwjMTYwKTsvZywgdmFsOiBcIiBcIiB9LFxuICAgICAgLy8gXCJsdFwiIDogeyByZWdleDogLyYobHR8IzYwKTsvZywgdmFsOiBcIjxcIiB9LFxuICAgICAgLy8gXCJndFwiIDogeyByZWdleDogLyYoZ3R8IzYyKTsvZywgdmFsOiBcIj5cIiB9LFxuICAgICAgLy8gXCJhbXBcIiA6IHsgcmVnZXg6IC8mKGFtcHwjMzgpOy9nLCB2YWw6IFwiJlwiIH0sXG4gICAgICAvLyBcInF1b3RcIiA6IHsgcmVnZXg6IC8mKHF1b3R8IzM0KTsvZywgdmFsOiBcIlxcXCJcIiB9LFxuICAgICAgLy8gXCJhcG9zXCIgOiB7IHJlZ2V4OiAvJihhcG9zfCMzOSk7L2csIHZhbDogXCInXCIgfSxcbiAgICAgIFwiY2VudFwiIDogeyByZWdleDogLyYoY2VudHwjMTYyKTsvZywgdmFsOiBcIsKiXCIgfSxcbiAgICAgIFwicG91bmRcIiA6IHsgcmVnZXg6IC8mKHBvdW5kfCMxNjMpOy9nLCB2YWw6IFwiwqNcIiB9LFxuICAgICAgXCJ5ZW5cIiA6IHsgcmVnZXg6IC8mKHllbnwjMTY1KTsvZywgdmFsOiBcIsKlXCIgfSxcbiAgICAgIFwiZXVyb1wiIDogeyByZWdleDogLyYoZXVyb3wjODM2NCk7L2csIHZhbDogXCLigqxcIiB9LFxuICAgICAgXCJjb3B5cmlnaHRcIiA6IHsgcmVnZXg6IC8mKGNvcHl8IzE2OSk7L2csIHZhbDogXCLCqVwiIH0sXG4gICAgICBcInJlZ1wiIDogeyByZWdleDogLyYocmVnfCMxNzQpOy9nLCB2YWw6IFwiwq5cIiB9LFxuICAgICAgXCJpbnJcIiA6IHsgcmVnZXg6IC8mKGlucnwjODM3Nyk7L2csIHZhbDogXCLigrlcIiB9LFxuICAgICAgXCJudW1fZGVjXCI6IHsgcmVnZXg6IC8mIyhbMC05XXsxLDd9KTsvZywgdmFsIDogKF8sIHN0cikgPT4gU3RyaW5nLmZyb21DaGFyQ29kZShOdW1iZXIucGFyc2VJbnQoc3RyLCAxMCkpIH0sXG4gICAgICBcIm51bV9oZXhcIjogeyByZWdleDogLyYjeChbMC05YS1mQS1GXXsxLDZ9KTsvZywgdmFsIDogKF8sIHN0cikgPT4gU3RyaW5nLmZyb21DaGFyQ29kZShOdW1iZXIucGFyc2VJbnQoc3RyLCAxNikpIH0sXG4gICAgfTtcbiAgICB0aGlzLmFkZEV4dGVybmFsRW50aXRpZXMgPSBhZGRFeHRlcm5hbEVudGl0aWVzO1xuICAgIHRoaXMucGFyc2VYbWwgPSBwYXJzZVhtbDtcbiAgICB0aGlzLnBhcnNlVGV4dERhdGEgPSBwYXJzZVRleHREYXRhO1xuICAgIHRoaXMucmVzb2x2ZU5hbWVTcGFjZSA9IHJlc29sdmVOYW1lU3BhY2U7XG4gICAgdGhpcy5idWlsZEF0dHJpYnV0ZXNNYXAgPSBidWlsZEF0dHJpYnV0ZXNNYXA7XG4gICAgdGhpcy5pc0l0U3RvcE5vZGUgPSBpc0l0U3RvcE5vZGU7XG4gICAgdGhpcy5yZXBsYWNlRW50aXRpZXNWYWx1ZSA9IHJlcGxhY2VFbnRpdGllc1ZhbHVlO1xuICAgIHRoaXMucmVhZFN0b3BOb2RlRGF0YSA9IHJlYWRTdG9wTm9kZURhdGE7XG4gICAgdGhpcy5zYXZlVGV4dFRvUGFyZW50VGFnID0gc2F2ZVRleHRUb1BhcmVudFRhZztcbiAgICB0aGlzLmFkZENoaWxkID0gYWRkQ2hpbGQ7XG4gICAgdGhpcy5pZ25vcmVBdHRyaWJ1dGVzRm4gPSBnZXRJZ25vcmVBdHRyaWJ1dGVzRm4odGhpcy5vcHRpb25zLmlnbm9yZUF0dHJpYnV0ZXMpXG4gIH1cblxufVxuXG5mdW5jdGlvbiBhZGRFeHRlcm5hbEVudGl0aWVzKGV4dGVybmFsRW50aXRpZXMpe1xuICBjb25zdCBlbnRLZXlzID0gT2JqZWN0LmtleXMoZXh0ZXJuYWxFbnRpdGllcyk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZW50S2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGVudCA9IGVudEtleXNbaV07XG4gICAgdGhpcy5sYXN0RW50aXRpZXNbZW50XSA9IHtcbiAgICAgICByZWdleDogbmV3IFJlZ0V4cChcIiZcIitlbnQrXCI7XCIsXCJnXCIpLFxuICAgICAgIHZhbCA6IGV4dGVybmFsRW50aXRpZXNbZW50XVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWxcbiAqIEBwYXJhbSB7c3RyaW5nfSB0YWdOYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30galBhdGhcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gZG9udFRyaW1cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaGFzQXR0cmlidXRlc1xuICogQHBhcmFtIHtib29sZWFufSBpc0xlYWZOb2RlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGVzY2FwZUVudGl0aWVzXG4gKi9cbmZ1bmN0aW9uIHBhcnNlVGV4dERhdGEodmFsLCB0YWdOYW1lLCBqUGF0aCwgZG9udFRyaW0sIGhhc0F0dHJpYnV0ZXMsIGlzTGVhZk5vZGUsIGVzY2FwZUVudGl0aWVzKSB7XG4gIGlmICh2YWwgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMudHJpbVZhbHVlcyAmJiAhZG9udFRyaW0pIHtcbiAgICAgIHZhbCA9IHZhbC50cmltKCk7XG4gICAgfVxuICAgIGlmKHZhbC5sZW5ndGggPiAwKXtcbiAgICAgIGlmKCFlc2NhcGVFbnRpdGllcykgdmFsID0gdGhpcy5yZXBsYWNlRW50aXRpZXNWYWx1ZSh2YWwpO1xuICAgICAgXG4gICAgICBjb25zdCBuZXd2YWwgPSB0aGlzLm9wdGlvbnMudGFnVmFsdWVQcm9jZXNzb3IodGFnTmFtZSwgdmFsLCBqUGF0aCwgaGFzQXR0cmlidXRlcywgaXNMZWFmTm9kZSk7XG4gICAgICBpZihuZXd2YWwgPT09IG51bGwgfHwgbmV3dmFsID09PSB1bmRlZmluZWQpe1xuICAgICAgICAvL2Rvbid0IHBhcnNlXG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgICB9ZWxzZSBpZih0eXBlb2YgbmV3dmFsICE9PSB0eXBlb2YgdmFsIHx8IG5ld3ZhbCAhPT0gdmFsKXtcbiAgICAgICAgLy9vdmVyd3JpdGVcbiAgICAgICAgcmV0dXJuIG5ld3ZhbDtcbiAgICAgIH1lbHNlIGlmKHRoaXMub3B0aW9ucy50cmltVmFsdWVzKXtcbiAgICAgICAgcmV0dXJuIHBhcnNlVmFsdWUodmFsLCB0aGlzLm9wdGlvbnMucGFyc2VUYWdWYWx1ZSwgdGhpcy5vcHRpb25zLm51bWJlclBhcnNlT3B0aW9ucyk7XG4gICAgICB9ZWxzZXtcbiAgICAgICAgY29uc3QgdHJpbW1lZFZhbCA9IHZhbC50cmltKCk7XG4gICAgICAgIGlmKHRyaW1tZWRWYWwgPT09IHZhbCl7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlVmFsdWUodmFsLCB0aGlzLm9wdGlvbnMucGFyc2VUYWdWYWx1ZSwgdGhpcy5vcHRpb25zLm51bWJlclBhcnNlT3B0aW9ucyk7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgIHJldHVybiB2YWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzb2x2ZU5hbWVTcGFjZSh0YWduYW1lKSB7XG4gIGlmICh0aGlzLm9wdGlvbnMucmVtb3ZlTlNQcmVmaXgpIHtcbiAgICBjb25zdCB0YWdzID0gdGFnbmFtZS5zcGxpdCgnOicpO1xuICAgIGNvbnN0IHByZWZpeCA9IHRhZ25hbWUuY2hhckF0KDApID09PSAnLycgPyAnLycgOiAnJztcbiAgICBpZiAodGFnc1swXSA9PT0gJ3htbG5zJykge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBpZiAodGFncy5sZW5ndGggPT09IDIpIHtcbiAgICAgIHRhZ25hbWUgPSBwcmVmaXggKyB0YWdzWzFdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdGFnbmFtZTtcbn1cblxuLy9UT0RPOiBjaGFuZ2UgcmVnZXggdG8gY2FwdHVyZSBOU1xuLy9jb25zdCBhdHRyc1JlZ3ggPSBuZXcgUmVnRXhwKFwiKFtcXFxcd1xcXFwtXFxcXC5cXFxcOl0rKVxcXFxzKj1cXFxccyooWydcXFwiXSkoKC58XFxuKSo/KVxcXFwyXCIsXCJnbVwiKTtcbmNvbnN0IGF0dHJzUmVneCA9IG5ldyBSZWdFeHAoJyhbXlxcXFxzPV0rKVxcXFxzKig9XFxcXHMqKFtcXCdcIl0pKFtcXFxcc1xcXFxTXSo/KVxcXFwzKT8nLCAnZ20nKTtcblxuZnVuY3Rpb24gYnVpbGRBdHRyaWJ1dGVzTWFwKGF0dHJTdHIsIGpQYXRoLCB0YWdOYW1lKSB7XG4gIGlmICh0aGlzLm9wdGlvbnMuaWdub3JlQXR0cmlidXRlcyAhPT0gdHJ1ZSAmJiB0eXBlb2YgYXR0clN0ciA9PT0gJ3N0cmluZycpIHtcbiAgICAvLyBhdHRyU3RyID0gYXR0clN0ci5yZXBsYWNlKC9cXHI/XFxuL2csICcgJyk7XG4gICAgLy9hdHRyU3RyID0gYXR0clN0ciB8fCBhdHRyU3RyLnRyaW0oKTtcblxuICAgIGNvbnN0IG1hdGNoZXMgPSB1dGlsLmdldEFsbE1hdGNoZXMoYXR0clN0ciwgYXR0cnNSZWd4KTtcbiAgICBjb25zdCBsZW4gPSBtYXRjaGVzLmxlbmd0aDsgLy9kb24ndCBtYWtlIGl0IGlubGluZVxuICAgIGNvbnN0IGF0dHJzID0ge307XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgY29uc3QgYXR0ck5hbWUgPSB0aGlzLnJlc29sdmVOYW1lU3BhY2UobWF0Y2hlc1tpXVsxXSk7XG4gICAgICBpZiAodGhpcy5pZ25vcmVBdHRyaWJ1dGVzRm4oYXR0ck5hbWUsIGpQYXRoKSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgbGV0IG9sZFZhbCA9IG1hdGNoZXNbaV1bNF07XG4gICAgICBsZXQgYU5hbWUgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlTmFtZVByZWZpeCArIGF0dHJOYW1lO1xuICAgICAgaWYgKGF0dHJOYW1lLmxlbmd0aCkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnRyYW5zZm9ybUF0dHJpYnV0ZU5hbWUpIHtcbiAgICAgICAgICBhTmFtZSA9IHRoaXMub3B0aW9ucy50cmFuc2Zvcm1BdHRyaWJ1dGVOYW1lKGFOYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBpZihhTmFtZSA9PT0gXCJfX3Byb3RvX19cIikgYU5hbWUgID0gXCIjX19wcm90b19fXCI7XG4gICAgICAgIGlmIChvbGRWYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMudHJpbVZhbHVlcykge1xuICAgICAgICAgICAgb2xkVmFsID0gb2xkVmFsLnRyaW0oKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb2xkVmFsID0gdGhpcy5yZXBsYWNlRW50aXRpZXNWYWx1ZShvbGRWYWwpO1xuICAgICAgICAgIGNvbnN0IG5ld1ZhbCA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVWYWx1ZVByb2Nlc3NvcihhdHRyTmFtZSwgb2xkVmFsLCBqUGF0aCk7XG4gICAgICAgICAgaWYobmV3VmFsID09PSBudWxsIHx8IG5ld1ZhbCA9PT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgIC8vZG9uJ3QgcGFyc2VcbiAgICAgICAgICAgIGF0dHJzW2FOYW1lXSA9IG9sZFZhbDtcbiAgICAgICAgICB9ZWxzZSBpZih0eXBlb2YgbmV3VmFsICE9PSB0eXBlb2Ygb2xkVmFsIHx8IG5ld1ZhbCAhPT0gb2xkVmFsKXtcbiAgICAgICAgICAgIC8vb3ZlcndyaXRlXG4gICAgICAgICAgICBhdHRyc1thTmFtZV0gPSBuZXdWYWw7XG4gICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAvL3BhcnNlXG4gICAgICAgICAgICBhdHRyc1thTmFtZV0gPSBwYXJzZVZhbHVlKFxuICAgICAgICAgICAgICBvbGRWYWwsXG4gICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5wYXJzZUF0dHJpYnV0ZVZhbHVlLFxuICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMubnVtYmVyUGFyc2VPcHRpb25zXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMuYWxsb3dCb29sZWFuQXR0cmlidXRlcykge1xuICAgICAgICAgIGF0dHJzW2FOYW1lXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFPYmplY3Qua2V5cyhhdHRycykubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdGlvbnMuYXR0cmlidXRlc0dyb3VwTmFtZSkge1xuICAgICAgY29uc3QgYXR0ckNvbGxlY3Rpb24gPSB7fTtcbiAgICAgIGF0dHJDb2xsZWN0aW9uW3RoaXMub3B0aW9ucy5hdHRyaWJ1dGVzR3JvdXBOYW1lXSA9IGF0dHJzO1xuICAgICAgcmV0dXJuIGF0dHJDb2xsZWN0aW9uO1xuICAgIH1cbiAgICByZXR1cm4gYXR0cnNcbiAgfVxufVxuXG5jb25zdCBwYXJzZVhtbCA9IGZ1bmN0aW9uKHhtbERhdGEpIHtcbiAgeG1sRGF0YSA9IHhtbERhdGEucmVwbGFjZSgvXFxyXFxuPy9nLCBcIlxcblwiKTsgLy9UT0RPOiByZW1vdmUgdGhpcyBsaW5lXG4gIGNvbnN0IHhtbE9iaiA9IG5ldyB4bWxOb2RlKCcheG1sJyk7XG4gIGxldCBjdXJyZW50Tm9kZSA9IHhtbE9iajtcbiAgbGV0IHRleHREYXRhID0gXCJcIjtcbiAgbGV0IGpQYXRoID0gXCJcIjtcbiAgZm9yKGxldCBpPTA7IGk8IHhtbERhdGEubGVuZ3RoOyBpKyspey8vZm9yIGVhY2ggY2hhciBpbiBYTUwgZGF0YVxuICAgIGNvbnN0IGNoID0geG1sRGF0YVtpXTtcbiAgICBpZihjaCA9PT0gJzwnKXtcbiAgICAgIC8vIGNvbnN0IG5leHRJbmRleCA9IGkrMTtcbiAgICAgIC8vIGNvbnN0IF8ybmRDaGFyID0geG1sRGF0YVtuZXh0SW5kZXhdO1xuICAgICAgaWYoIHhtbERhdGFbaSsxXSA9PT0gJy8nKSB7Ly9DbG9zaW5nIFRhZ1xuICAgICAgICBjb25zdCBjbG9zZUluZGV4ID0gZmluZENsb3NpbmdJbmRleCh4bWxEYXRhLCBcIj5cIiwgaSwgXCJDbG9zaW5nIFRhZyBpcyBub3QgY2xvc2VkLlwiKVxuICAgICAgICBsZXQgdGFnTmFtZSA9IHhtbERhdGEuc3Vic3RyaW5nKGkrMixjbG9zZUluZGV4KS50cmltKCk7XG5cbiAgICAgICAgaWYodGhpcy5vcHRpb25zLnJlbW92ZU5TUHJlZml4KXtcbiAgICAgICAgICBjb25zdCBjb2xvbkluZGV4ID0gdGFnTmFtZS5pbmRleE9mKFwiOlwiKTtcbiAgICAgICAgICBpZihjb2xvbkluZGV4ICE9PSAtMSl7XG4gICAgICAgICAgICB0YWdOYW1lID0gdGFnTmFtZS5zdWJzdHIoY29sb25JbmRleCsxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZih0aGlzLm9wdGlvbnMudHJhbnNmb3JtVGFnTmFtZSkge1xuICAgICAgICAgIHRhZ05hbWUgPSB0aGlzLm9wdGlvbnMudHJhbnNmb3JtVGFnTmFtZSh0YWdOYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKGN1cnJlbnROb2RlKXtcbiAgICAgICAgICB0ZXh0RGF0YSA9IHRoaXMuc2F2ZVRleHRUb1BhcmVudFRhZyh0ZXh0RGF0YSwgY3VycmVudE5vZGUsIGpQYXRoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vY2hlY2sgaWYgbGFzdCB0YWcgb2YgbmVzdGVkIHRhZyB3YXMgdW5wYWlyZWQgdGFnXG4gICAgICAgIGNvbnN0IGxhc3RUYWdOYW1lID0galBhdGguc3Vic3RyaW5nKGpQYXRoLmxhc3RJbmRleE9mKFwiLlwiKSsxKTtcbiAgICAgICAgaWYodGFnTmFtZSAmJiB0aGlzLm9wdGlvbnMudW5wYWlyZWRUYWdzLmluZGV4T2YodGFnTmFtZSkgIT09IC0xICl7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnBhaXJlZCB0YWcgY2FuIG5vdCBiZSB1c2VkIGFzIGNsb3NpbmcgdGFnOiA8LyR7dGFnTmFtZX0+YCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHByb3BJbmRleCA9IDBcbiAgICAgICAgaWYobGFzdFRhZ05hbWUgJiYgdGhpcy5vcHRpb25zLnVucGFpcmVkVGFncy5pbmRleE9mKGxhc3RUYWdOYW1lKSAhPT0gLTEgKXtcbiAgICAgICAgICBwcm9wSW5kZXggPSBqUGF0aC5sYXN0SW5kZXhPZignLicsIGpQYXRoLmxhc3RJbmRleE9mKCcuJyktMSlcbiAgICAgICAgICB0aGlzLnRhZ3NOb2RlU3RhY2sucG9wKCk7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgIHByb3BJbmRleCA9IGpQYXRoLmxhc3RJbmRleE9mKFwiLlwiKTtcbiAgICAgICAgfVxuICAgICAgICBqUGF0aCA9IGpQYXRoLnN1YnN0cmluZygwLCBwcm9wSW5kZXgpO1xuXG4gICAgICAgIGN1cnJlbnROb2RlID0gdGhpcy50YWdzTm9kZVN0YWNrLnBvcCgpOy8vYXZvaWQgcmVjdXJzaW9uLCBzZXQgdGhlIHBhcmVudCB0YWcgc2NvcGVcbiAgICAgICAgdGV4dERhdGEgPSBcIlwiO1xuICAgICAgICBpID0gY2xvc2VJbmRleDtcbiAgICAgIH0gZWxzZSBpZiggeG1sRGF0YVtpKzFdID09PSAnPycpIHtcblxuICAgICAgICBsZXQgdGFnRGF0YSA9IHJlYWRUYWdFeHAoeG1sRGF0YSxpLCBmYWxzZSwgXCI/PlwiKTtcbiAgICAgICAgaWYoIXRhZ0RhdGEpIHRocm93IG5ldyBFcnJvcihcIlBpIFRhZyBpcyBub3QgY2xvc2VkLlwiKTtcblxuICAgICAgICB0ZXh0RGF0YSA9IHRoaXMuc2F2ZVRleHRUb1BhcmVudFRhZyh0ZXh0RGF0YSwgY3VycmVudE5vZGUsIGpQYXRoKTtcbiAgICAgICAgaWYoICh0aGlzLm9wdGlvbnMuaWdub3JlRGVjbGFyYXRpb24gJiYgdGFnRGF0YS50YWdOYW1lID09PSBcIj94bWxcIikgfHwgdGhpcy5vcHRpb25zLmlnbm9yZVBpVGFncyl7XG5cbiAgICAgICAgfWVsc2V7XG4gIFxuICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IG5ldyB4bWxOb2RlKHRhZ0RhdGEudGFnTmFtZSk7XG4gICAgICAgICAgY2hpbGROb2RlLmFkZCh0aGlzLm9wdGlvbnMudGV4dE5vZGVOYW1lLCBcIlwiKTtcbiAgICAgICAgICBcbiAgICAgICAgICBpZih0YWdEYXRhLnRhZ05hbWUgIT09IHRhZ0RhdGEudGFnRXhwICYmIHRhZ0RhdGEuYXR0ckV4cFByZXNlbnQpe1xuICAgICAgICAgICAgY2hpbGROb2RlW1wiOkBcIl0gPSB0aGlzLmJ1aWxkQXR0cmlidXRlc01hcCh0YWdEYXRhLnRhZ0V4cCwgalBhdGgsIHRhZ0RhdGEudGFnTmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuYWRkQ2hpbGQoY3VycmVudE5vZGUsIGNoaWxkTm9kZSwgalBhdGgpXG5cbiAgICAgICAgfVxuXG5cbiAgICAgICAgaSA9IHRhZ0RhdGEuY2xvc2VJbmRleCArIDE7XG4gICAgICB9IGVsc2UgaWYoeG1sRGF0YS5zdWJzdHIoaSArIDEsIDMpID09PSAnIS0tJykge1xuICAgICAgICBjb25zdCBlbmRJbmRleCA9IGZpbmRDbG9zaW5nSW5kZXgoeG1sRGF0YSwgXCItLT5cIiwgaSs0LCBcIkNvbW1lbnQgaXMgbm90IGNsb3NlZC5cIilcbiAgICAgICAgaWYodGhpcy5vcHRpb25zLmNvbW1lbnRQcm9wTmFtZSl7XG4gICAgICAgICAgY29uc3QgY29tbWVudCA9IHhtbERhdGEuc3Vic3RyaW5nKGkgKyA0LCBlbmRJbmRleCAtIDIpO1xuXG4gICAgICAgICAgdGV4dERhdGEgPSB0aGlzLnNhdmVUZXh0VG9QYXJlbnRUYWcodGV4dERhdGEsIGN1cnJlbnROb2RlLCBqUGF0aCk7XG5cbiAgICAgICAgICBjdXJyZW50Tm9kZS5hZGQodGhpcy5vcHRpb25zLmNvbW1lbnRQcm9wTmFtZSwgWyB7IFt0aGlzLm9wdGlvbnMudGV4dE5vZGVOYW1lXSA6IGNvbW1lbnQgfSBdKTtcbiAgICAgICAgfVxuICAgICAgICBpID0gZW5kSW5kZXg7XG4gICAgICB9IGVsc2UgaWYoIHhtbERhdGEuc3Vic3RyKGkgKyAxLCAyKSA9PT0gJyFEJykge1xuICAgICAgICBjb25zdCByZXN1bHQgPSByZWFkRG9jVHlwZSh4bWxEYXRhLCBpKTtcbiAgICAgICAgdGhpcy5kb2NUeXBlRW50aXRpZXMgPSByZXN1bHQuZW50aXRpZXM7XG4gICAgICAgIGkgPSByZXN1bHQuaTtcbiAgICAgIH1lbHNlIGlmKHhtbERhdGEuc3Vic3RyKGkgKyAxLCAyKSA9PT0gJyFbJykge1xuICAgICAgICBjb25zdCBjbG9zZUluZGV4ID0gZmluZENsb3NpbmdJbmRleCh4bWxEYXRhLCBcIl1dPlwiLCBpLCBcIkNEQVRBIGlzIG5vdCBjbG9zZWQuXCIpIC0gMjtcbiAgICAgICAgY29uc3QgdGFnRXhwID0geG1sRGF0YS5zdWJzdHJpbmcoaSArIDksY2xvc2VJbmRleCk7XG5cbiAgICAgICAgdGV4dERhdGEgPSB0aGlzLnNhdmVUZXh0VG9QYXJlbnRUYWcodGV4dERhdGEsIGN1cnJlbnROb2RlLCBqUGF0aCk7XG5cbiAgICAgICAgbGV0IHZhbCA9IHRoaXMucGFyc2VUZXh0RGF0YSh0YWdFeHAsIGN1cnJlbnROb2RlLnRhZ25hbWUsIGpQYXRoLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgIGlmKHZhbCA9PSB1bmRlZmluZWQpIHZhbCA9IFwiXCI7XG5cbiAgICAgICAgLy9jZGF0YSBzaG91bGQgYmUgc2V0IGV2ZW4gaWYgaXQgaXMgMCBsZW5ndGggc3RyaW5nXG4gICAgICAgIGlmKHRoaXMub3B0aW9ucy5jZGF0YVByb3BOYW1lKXtcbiAgICAgICAgICBjdXJyZW50Tm9kZS5hZGQodGhpcy5vcHRpb25zLmNkYXRhUHJvcE5hbWUsIFsgeyBbdGhpcy5vcHRpb25zLnRleHROb2RlTmFtZV0gOiB0YWdFeHAgfSBdKTtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgY3VycmVudE5vZGUuYWRkKHRoaXMub3B0aW9ucy50ZXh0Tm9kZU5hbWUsIHZhbCk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGkgPSBjbG9zZUluZGV4ICsgMjtcbiAgICAgIH1lbHNlIHsvL09wZW5pbmcgdGFnXG4gICAgICAgIGxldCByZXN1bHQgPSByZWFkVGFnRXhwKHhtbERhdGEsaSwgdGhpcy5vcHRpb25zLnJlbW92ZU5TUHJlZml4KTtcbiAgICAgICAgbGV0IHRhZ05hbWU9IHJlc3VsdC50YWdOYW1lO1xuICAgICAgICBjb25zdCByYXdUYWdOYW1lID0gcmVzdWx0LnJhd1RhZ05hbWU7XG4gICAgICAgIGxldCB0YWdFeHAgPSByZXN1bHQudGFnRXhwO1xuICAgICAgICBsZXQgYXR0ckV4cFByZXNlbnQgPSByZXN1bHQuYXR0ckV4cFByZXNlbnQ7XG4gICAgICAgIGxldCBjbG9zZUluZGV4ID0gcmVzdWx0LmNsb3NlSW5kZXg7XG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy50cmFuc2Zvcm1UYWdOYW1lKSB7XG4gICAgICAgICAgdGFnTmFtZSA9IHRoaXMub3B0aW9ucy50cmFuc2Zvcm1UYWdOYW1lKHRhZ05hbWUpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvL3NhdmUgdGV4dCBhcyBjaGlsZCBub2RlXG4gICAgICAgIGlmIChjdXJyZW50Tm9kZSAmJiB0ZXh0RGF0YSkge1xuICAgICAgICAgIGlmKGN1cnJlbnROb2RlLnRhZ25hbWUgIT09ICcheG1sJyl7XG4gICAgICAgICAgICAvL3doZW4gbmVzdGVkIHRhZyBpcyBmb3VuZFxuICAgICAgICAgICAgdGV4dERhdGEgPSB0aGlzLnNhdmVUZXh0VG9QYXJlbnRUYWcodGV4dERhdGEsIGN1cnJlbnROb2RlLCBqUGF0aCwgZmFsc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vY2hlY2sgaWYgbGFzdCB0YWcgd2FzIHVucGFpcmVkIHRhZ1xuICAgICAgICBjb25zdCBsYXN0VGFnID0gY3VycmVudE5vZGU7XG4gICAgICAgIGlmKGxhc3RUYWcgJiYgdGhpcy5vcHRpb25zLnVucGFpcmVkVGFncy5pbmRleE9mKGxhc3RUYWcudGFnbmFtZSkgIT09IC0xICl7XG4gICAgICAgICAgY3VycmVudE5vZGUgPSB0aGlzLnRhZ3NOb2RlU3RhY2sucG9wKCk7XG4gICAgICAgICAgalBhdGggPSBqUGF0aC5zdWJzdHJpbmcoMCwgalBhdGgubGFzdEluZGV4T2YoXCIuXCIpKTtcbiAgICAgICAgfVxuICAgICAgICBpZih0YWdOYW1lICE9PSB4bWxPYmoudGFnbmFtZSl7XG4gICAgICAgICAgalBhdGggKz0galBhdGggPyBcIi5cIiArIHRhZ05hbWUgOiB0YWdOYW1lO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzSXRTdG9wTm9kZSh0aGlzLm9wdGlvbnMuc3RvcE5vZGVzLCBqUGF0aCwgdGFnTmFtZSkpIHtcbiAgICAgICAgICBsZXQgdGFnQ29udGVudCA9IFwiXCI7XG4gICAgICAgICAgLy9zZWxmLWNsb3NpbmcgdGFnXG4gICAgICAgICAgaWYodGFnRXhwLmxlbmd0aCA+IDAgJiYgdGFnRXhwLmxhc3RJbmRleE9mKFwiL1wiKSA9PT0gdGFnRXhwLmxlbmd0aCAtIDEpe1xuICAgICAgICAgICAgaWYodGFnTmFtZVt0YWdOYW1lLmxlbmd0aCAtIDFdID09PSBcIi9cIil7IC8vcmVtb3ZlIHRyYWlsaW5nICcvJ1xuICAgICAgICAgICAgICB0YWdOYW1lID0gdGFnTmFtZS5zdWJzdHIoMCwgdGFnTmFtZS5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgICAgalBhdGggPSBqUGF0aC5zdWJzdHIoMCwgalBhdGgubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAgIHRhZ0V4cCA9IHRhZ05hbWU7XG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgdGFnRXhwID0gdGFnRXhwLnN1YnN0cigwLCB0YWdFeHAubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpID0gcmVzdWx0LmNsb3NlSW5kZXg7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vdW5wYWlyZWQgdGFnXG4gICAgICAgICAgZWxzZSBpZih0aGlzLm9wdGlvbnMudW5wYWlyZWRUYWdzLmluZGV4T2YodGFnTmFtZSkgIT09IC0xKXtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaSA9IHJlc3VsdC5jbG9zZUluZGV4O1xuICAgICAgICAgIH1cbiAgICAgICAgICAvL25vcm1hbCB0YWdcbiAgICAgICAgICBlbHNle1xuICAgICAgICAgICAgLy9yZWFkIHVudGlsIGNsb3NpbmcgdGFnIGlzIGZvdW5kXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLnJlYWRTdG9wTm9kZURhdGEoeG1sRGF0YSwgcmF3VGFnTmFtZSwgY2xvc2VJbmRleCArIDEpO1xuICAgICAgICAgICAgaWYoIXJlc3VsdCkgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIGVuZCBvZiAke3Jhd1RhZ05hbWV9YCk7XG4gICAgICAgICAgICBpID0gcmVzdWx0Lmk7XG4gICAgICAgICAgICB0YWdDb250ZW50ID0gcmVzdWx0LnRhZ0NvbnRlbnQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgY2hpbGROb2RlID0gbmV3IHhtbE5vZGUodGFnTmFtZSk7XG4gICAgICAgICAgaWYodGFnTmFtZSAhPT0gdGFnRXhwICYmIGF0dHJFeHBQcmVzZW50KXtcbiAgICAgICAgICAgIGNoaWxkTm9kZVtcIjpAXCJdID0gdGhpcy5idWlsZEF0dHJpYnV0ZXNNYXAodGFnRXhwLCBqUGF0aCwgdGFnTmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmKHRhZ0NvbnRlbnQpIHtcbiAgICAgICAgICAgIHRhZ0NvbnRlbnQgPSB0aGlzLnBhcnNlVGV4dERhdGEodGFnQ29udGVudCwgdGFnTmFtZSwgalBhdGgsIHRydWUsIGF0dHJFeHBQcmVzZW50LCB0cnVlLCB0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgalBhdGggPSBqUGF0aC5zdWJzdHIoMCwgalBhdGgubGFzdEluZGV4T2YoXCIuXCIpKTtcbiAgICAgICAgICBjaGlsZE5vZGUuYWRkKHRoaXMub3B0aW9ucy50ZXh0Tm9kZU5hbWUsIHRhZ0NvbnRlbnQpO1xuICAgICAgICAgIFxuICAgICAgICAgIHRoaXMuYWRkQ2hpbGQoY3VycmVudE5vZGUsIGNoaWxkTm9kZSwgalBhdGgpXG4gICAgICAgIH1lbHNle1xuICAvL3NlbGZDbG9zaW5nIHRhZ1xuICAgICAgICAgIGlmKHRhZ0V4cC5sZW5ndGggPiAwICYmIHRhZ0V4cC5sYXN0SW5kZXhPZihcIi9cIikgPT09IHRhZ0V4cC5sZW5ndGggLSAxKXtcbiAgICAgICAgICAgIGlmKHRhZ05hbWVbdGFnTmFtZS5sZW5ndGggLSAxXSA9PT0gXCIvXCIpeyAvL3JlbW92ZSB0cmFpbGluZyAnLydcbiAgICAgICAgICAgICAgdGFnTmFtZSA9IHRhZ05hbWUuc3Vic3RyKDAsIHRhZ05hbWUubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAgIGpQYXRoID0galBhdGguc3Vic3RyKDAsIGpQYXRoLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgICB0YWdFeHAgPSB0YWdOYW1lO1xuICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgIHRhZ0V4cCA9IHRhZ0V4cC5zdWJzdHIoMCwgdGFnRXhwLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZih0aGlzLm9wdGlvbnMudHJhbnNmb3JtVGFnTmFtZSkge1xuICAgICAgICAgICAgICB0YWdOYW1lID0gdGhpcy5vcHRpb25zLnRyYW5zZm9ybVRhZ05hbWUodGFnTmFtZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IG5ldyB4bWxOb2RlKHRhZ05hbWUpO1xuICAgICAgICAgICAgaWYodGFnTmFtZSAhPT0gdGFnRXhwICYmIGF0dHJFeHBQcmVzZW50KXtcbiAgICAgICAgICAgICAgY2hpbGROb2RlW1wiOkBcIl0gPSB0aGlzLmJ1aWxkQXR0cmlidXRlc01hcCh0YWdFeHAsIGpQYXRoLCB0YWdOYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYWRkQ2hpbGQoY3VycmVudE5vZGUsIGNoaWxkTm9kZSwgalBhdGgpXG4gICAgICAgICAgICBqUGF0aCA9IGpQYXRoLnN1YnN0cigwLCBqUGF0aC5sYXN0SW5kZXhPZihcIi5cIikpO1xuICAgICAgICAgIH1cbiAgICAvL29wZW5pbmcgdGFnXG4gICAgICAgICAgZWxzZXtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IG5ldyB4bWxOb2RlKCB0YWdOYW1lKTtcbiAgICAgICAgICAgIHRoaXMudGFnc05vZGVTdGFjay5wdXNoKGN1cnJlbnROb2RlKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYodGFnTmFtZSAhPT0gdGFnRXhwICYmIGF0dHJFeHBQcmVzZW50KXtcbiAgICAgICAgICAgICAgY2hpbGROb2RlW1wiOkBcIl0gPSB0aGlzLmJ1aWxkQXR0cmlidXRlc01hcCh0YWdFeHAsIGpQYXRoLCB0YWdOYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYWRkQ2hpbGQoY3VycmVudE5vZGUsIGNoaWxkTm9kZSwgalBhdGgpXG4gICAgICAgICAgICBjdXJyZW50Tm9kZSA9IGNoaWxkTm9kZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGV4dERhdGEgPSBcIlwiO1xuICAgICAgICAgIGkgPSBjbG9zZUluZGV4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfWVsc2V7XG4gICAgICB0ZXh0RGF0YSArPSB4bWxEYXRhW2ldO1xuICAgIH1cbiAgfVxuICByZXR1cm4geG1sT2JqLmNoaWxkO1xufVxuXG5mdW5jdGlvbiBhZGRDaGlsZChjdXJyZW50Tm9kZSwgY2hpbGROb2RlLCBqUGF0aCl7XG4gIGNvbnN0IHJlc3VsdCA9IHRoaXMub3B0aW9ucy51cGRhdGVUYWcoY2hpbGROb2RlLnRhZ25hbWUsIGpQYXRoLCBjaGlsZE5vZGVbXCI6QFwiXSlcbiAgaWYocmVzdWx0ID09PSBmYWxzZSl7XG4gIH1lbHNlIGlmKHR5cGVvZiByZXN1bHQgPT09IFwic3RyaW5nXCIpe1xuICAgIGNoaWxkTm9kZS50YWduYW1lID0gcmVzdWx0XG4gICAgY3VycmVudE5vZGUuYWRkQ2hpbGQoY2hpbGROb2RlKTtcbiAgfWVsc2V7XG4gICAgY3VycmVudE5vZGUuYWRkQ2hpbGQoY2hpbGROb2RlKTtcbiAgfVxufVxuXG5jb25zdCByZXBsYWNlRW50aXRpZXNWYWx1ZSA9IGZ1bmN0aW9uKHZhbCl7XG5cbiAgaWYodGhpcy5vcHRpb25zLnByb2Nlc3NFbnRpdGllcyl7XG4gICAgZm9yKGxldCBlbnRpdHlOYW1lIGluIHRoaXMuZG9jVHlwZUVudGl0aWVzKXtcbiAgICAgIGNvbnN0IGVudGl0eSA9IHRoaXMuZG9jVHlwZUVudGl0aWVzW2VudGl0eU5hbWVdO1xuICAgICAgdmFsID0gdmFsLnJlcGxhY2UoIGVudGl0eS5yZWd4LCBlbnRpdHkudmFsKTtcbiAgICB9XG4gICAgZm9yKGxldCBlbnRpdHlOYW1lIGluIHRoaXMubGFzdEVudGl0aWVzKXtcbiAgICAgIGNvbnN0IGVudGl0eSA9IHRoaXMubGFzdEVudGl0aWVzW2VudGl0eU5hbWVdO1xuICAgICAgdmFsID0gdmFsLnJlcGxhY2UoIGVudGl0eS5yZWdleCwgZW50aXR5LnZhbCk7XG4gICAgfVxuICAgIGlmKHRoaXMub3B0aW9ucy5odG1sRW50aXRpZXMpe1xuICAgICAgZm9yKGxldCBlbnRpdHlOYW1lIGluIHRoaXMuaHRtbEVudGl0aWVzKXtcbiAgICAgICAgY29uc3QgZW50aXR5ID0gdGhpcy5odG1sRW50aXRpZXNbZW50aXR5TmFtZV07XG4gICAgICAgIHZhbCA9IHZhbC5yZXBsYWNlKCBlbnRpdHkucmVnZXgsIGVudGl0eS52YWwpO1xuICAgICAgfVxuICAgIH1cbiAgICB2YWwgPSB2YWwucmVwbGFjZSggdGhpcy5hbXBFbnRpdHkucmVnZXgsIHRoaXMuYW1wRW50aXR5LnZhbCk7XG4gIH1cbiAgcmV0dXJuIHZhbDtcbn1cbmZ1bmN0aW9uIHNhdmVUZXh0VG9QYXJlbnRUYWcodGV4dERhdGEsIGN1cnJlbnROb2RlLCBqUGF0aCwgaXNMZWFmTm9kZSkge1xuICBpZiAodGV4dERhdGEpIHsgLy9zdG9yZSBwcmV2aW91c2x5IGNvbGxlY3RlZCBkYXRhIGFzIHRleHROb2RlXG4gICAgaWYoaXNMZWFmTm9kZSA9PT0gdW5kZWZpbmVkKSBpc0xlYWZOb2RlID0gT2JqZWN0LmtleXMoY3VycmVudE5vZGUuY2hpbGQpLmxlbmd0aCA9PT0gMFxuICAgIFxuICAgIHRleHREYXRhID0gdGhpcy5wYXJzZVRleHREYXRhKHRleHREYXRhLFxuICAgICAgY3VycmVudE5vZGUudGFnbmFtZSxcbiAgICAgIGpQYXRoLFxuICAgICAgZmFsc2UsXG4gICAgICBjdXJyZW50Tm9kZVtcIjpAXCJdID8gT2JqZWN0LmtleXMoY3VycmVudE5vZGVbXCI6QFwiXSkubGVuZ3RoICE9PSAwIDogZmFsc2UsXG4gICAgICBpc0xlYWZOb2RlKTtcblxuICAgIGlmICh0ZXh0RGF0YSAhPT0gdW5kZWZpbmVkICYmIHRleHREYXRhICE9PSBcIlwiKVxuICAgICAgY3VycmVudE5vZGUuYWRkKHRoaXMub3B0aW9ucy50ZXh0Tm9kZU5hbWUsIHRleHREYXRhKTtcbiAgICB0ZXh0RGF0YSA9IFwiXCI7XG4gIH1cbiAgcmV0dXJuIHRleHREYXRhO1xufVxuXG4vL1RPRE86IHVzZSBqUGF0aCB0byBzaW1wbGlmeSB0aGUgbG9naWNcbi8qKlxuICogXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBzdG9wTm9kZXMgXG4gKiBAcGFyYW0ge3N0cmluZ30galBhdGhcbiAqIEBwYXJhbSB7c3RyaW5nfSBjdXJyZW50VGFnTmFtZSBcbiAqL1xuZnVuY3Rpb24gaXNJdFN0b3BOb2RlKHN0b3BOb2RlcywgalBhdGgsIGN1cnJlbnRUYWdOYW1lKXtcbiAgY29uc3QgYWxsTm9kZXNFeHAgPSBcIiouXCIgKyBjdXJyZW50VGFnTmFtZTtcbiAgZm9yIChjb25zdCBzdG9wTm9kZVBhdGggaW4gc3RvcE5vZGVzKSB7XG4gICAgY29uc3Qgc3RvcE5vZGVFeHAgPSBzdG9wTm9kZXNbc3RvcE5vZGVQYXRoXTtcbiAgICBpZiggYWxsTm9kZXNFeHAgPT09IHN0b3BOb2RlRXhwIHx8IGpQYXRoID09PSBzdG9wTm9kZUV4cCAgKSByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgdGFnIEV4cHJlc3Npb24gYW5kIHdoZXJlIGl0IGlzIGVuZGluZyBoYW5kbGluZyBzaW5nbGUtZG91YmxlIHF1b3RlcyBzaXR1YXRpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSB4bWxEYXRhIFxuICogQHBhcmFtIHtudW1iZXJ9IGkgc3RhcnRpbmcgaW5kZXhcbiAqIEByZXR1cm5zIFxuICovXG5mdW5jdGlvbiB0YWdFeHBXaXRoQ2xvc2luZ0luZGV4KHhtbERhdGEsIGksIGNsb3NpbmdDaGFyID0gXCI+XCIpe1xuICBsZXQgYXR0ckJvdW5kYXJ5O1xuICBsZXQgdGFnRXhwID0gXCJcIjtcbiAgZm9yIChsZXQgaW5kZXggPSBpOyBpbmRleCA8IHhtbERhdGEubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgbGV0IGNoID0geG1sRGF0YVtpbmRleF07XG4gICAgaWYgKGF0dHJCb3VuZGFyeSkge1xuICAgICAgICBpZiAoY2ggPT09IGF0dHJCb3VuZGFyeSkgYXR0ckJvdW5kYXJ5ID0gXCJcIjsvL3Jlc2V0XG4gICAgfSBlbHNlIGlmIChjaCA9PT0gJ1wiJyB8fCBjaCA9PT0gXCInXCIpIHtcbiAgICAgICAgYXR0ckJvdW5kYXJ5ID0gY2g7XG4gICAgfSBlbHNlIGlmIChjaCA9PT0gY2xvc2luZ0NoYXJbMF0pIHtcbiAgICAgIGlmKGNsb3NpbmdDaGFyWzFdKXtcbiAgICAgICAgaWYoeG1sRGF0YVtpbmRleCArIDFdID09PSBjbG9zaW5nQ2hhclsxXSl7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRhdGE6IHRhZ0V4cCxcbiAgICAgICAgICAgIGluZGV4OiBpbmRleFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfWVsc2V7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGF0YTogdGFnRXhwLFxuICAgICAgICAgIGluZGV4OiBpbmRleFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjaCA9PT0gJ1xcdCcpIHtcbiAgICAgIGNoID0gXCIgXCJcbiAgICB9XG4gICAgdGFnRXhwICs9IGNoO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmRDbG9zaW5nSW5kZXgoeG1sRGF0YSwgc3RyLCBpLCBlcnJNc2cpe1xuICBjb25zdCBjbG9zaW5nSW5kZXggPSB4bWxEYXRhLmluZGV4T2Yoc3RyLCBpKTtcbiAgaWYoY2xvc2luZ0luZGV4ID09PSAtMSl7XG4gICAgdGhyb3cgbmV3IEVycm9yKGVyck1zZylcbiAgfWVsc2V7XG4gICAgcmV0dXJuIGNsb3NpbmdJbmRleCArIHN0ci5sZW5ndGggLSAxO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlYWRUYWdFeHAoeG1sRGF0YSxpLCByZW1vdmVOU1ByZWZpeCwgY2xvc2luZ0NoYXIgPSBcIj5cIil7XG4gIGNvbnN0IHJlc3VsdCA9IHRhZ0V4cFdpdGhDbG9zaW5nSW5kZXgoeG1sRGF0YSwgaSsxLCBjbG9zaW5nQ2hhcik7XG4gIGlmKCFyZXN1bHQpIHJldHVybjtcbiAgbGV0IHRhZ0V4cCA9IHJlc3VsdC5kYXRhO1xuICBjb25zdCBjbG9zZUluZGV4ID0gcmVzdWx0LmluZGV4O1xuICBjb25zdCBzZXBhcmF0b3JJbmRleCA9IHRhZ0V4cC5zZWFyY2goL1xccy8pO1xuICBsZXQgdGFnTmFtZSA9IHRhZ0V4cDtcbiAgbGV0IGF0dHJFeHBQcmVzZW50ID0gdHJ1ZTtcbiAgaWYoc2VwYXJhdG9ySW5kZXggIT09IC0xKXsvL3NlcGFyYXRlIHRhZyBuYW1lIGFuZCBhdHRyaWJ1dGVzIGV4cHJlc3Npb25cbiAgICB0YWdOYW1lID0gdGFnRXhwLnN1YnN0cmluZygwLCBzZXBhcmF0b3JJbmRleCk7XG4gICAgdGFnRXhwID0gdGFnRXhwLnN1YnN0cmluZyhzZXBhcmF0b3JJbmRleCArIDEpLnRyaW1TdGFydCgpO1xuICB9XG5cbiAgY29uc3QgcmF3VGFnTmFtZSA9IHRhZ05hbWU7XG4gIGlmKHJlbW92ZU5TUHJlZml4KXtcbiAgICBjb25zdCBjb2xvbkluZGV4ID0gdGFnTmFtZS5pbmRleE9mKFwiOlwiKTtcbiAgICBpZihjb2xvbkluZGV4ICE9PSAtMSl7XG4gICAgICB0YWdOYW1lID0gdGFnTmFtZS5zdWJzdHIoY29sb25JbmRleCsxKTtcbiAgICAgIGF0dHJFeHBQcmVzZW50ID0gdGFnTmFtZSAhPT0gcmVzdWx0LmRhdGEuc3Vic3RyKGNvbG9uSW5kZXggKyAxKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHRhZ05hbWU6IHRhZ05hbWUsXG4gICAgdGFnRXhwOiB0YWdFeHAsXG4gICAgY2xvc2VJbmRleDogY2xvc2VJbmRleCxcbiAgICBhdHRyRXhwUHJlc2VudDogYXR0ckV4cFByZXNlbnQsXG4gICAgcmF3VGFnTmFtZTogcmF3VGFnTmFtZSxcbiAgfVxufVxuLyoqXG4gKiBmaW5kIHBhaXJlZCB0YWcgZm9yIGEgc3RvcCBub2RlXG4gKiBAcGFyYW0ge3N0cmluZ30geG1sRGF0YSBcbiAqIEBwYXJhbSB7c3RyaW5nfSB0YWdOYW1lIFxuICogQHBhcmFtIHtudW1iZXJ9IGkgXG4gKi9cbmZ1bmN0aW9uIHJlYWRTdG9wTm9kZURhdGEoeG1sRGF0YSwgdGFnTmFtZSwgaSl7XG4gIGNvbnN0IHN0YXJ0SW5kZXggPSBpO1xuICAvLyBTdGFydGluZyBhdCAxIHNpbmNlIHdlIGFscmVhZHkgaGF2ZSBhbiBvcGVuIHRhZ1xuICBsZXQgb3BlblRhZ0NvdW50ID0gMTtcblxuICBmb3IgKDsgaSA8IHhtbERhdGEubGVuZ3RoOyBpKyspIHtcbiAgICBpZiggeG1sRGF0YVtpXSA9PT0gXCI8XCIpeyBcbiAgICAgIGlmICh4bWxEYXRhW2krMV0gPT09IFwiL1wiKSB7Ly9jbG9zZSB0YWdcbiAgICAgICAgICBjb25zdCBjbG9zZUluZGV4ID0gZmluZENsb3NpbmdJbmRleCh4bWxEYXRhLCBcIj5cIiwgaSwgYCR7dGFnTmFtZX0gaXMgbm90IGNsb3NlZGApO1xuICAgICAgICAgIGxldCBjbG9zZVRhZ05hbWUgPSB4bWxEYXRhLnN1YnN0cmluZyhpKzIsY2xvc2VJbmRleCkudHJpbSgpO1xuICAgICAgICAgIGlmKGNsb3NlVGFnTmFtZSA9PT0gdGFnTmFtZSl7XG4gICAgICAgICAgICBvcGVuVGFnQ291bnQtLTtcbiAgICAgICAgICAgIGlmIChvcGVuVGFnQ291bnQgPT09IDApIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0YWdDb250ZW50OiB4bWxEYXRhLnN1YnN0cmluZyhzdGFydEluZGV4LCBpKSxcbiAgICAgICAgICAgICAgICBpIDogY2xvc2VJbmRleFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGk9Y2xvc2VJbmRleDtcbiAgICAgICAgfSBlbHNlIGlmKHhtbERhdGFbaSsxXSA9PT0gJz8nKSB7IFxuICAgICAgICAgIGNvbnN0IGNsb3NlSW5kZXggPSBmaW5kQ2xvc2luZ0luZGV4KHhtbERhdGEsIFwiPz5cIiwgaSsxLCBcIlN0b3BOb2RlIGlzIG5vdCBjbG9zZWQuXCIpXG4gICAgICAgICAgaT1jbG9zZUluZGV4O1xuICAgICAgICB9IGVsc2UgaWYoeG1sRGF0YS5zdWJzdHIoaSArIDEsIDMpID09PSAnIS0tJykgeyBcbiAgICAgICAgICBjb25zdCBjbG9zZUluZGV4ID0gZmluZENsb3NpbmdJbmRleCh4bWxEYXRhLCBcIi0tPlwiLCBpKzMsIFwiU3RvcE5vZGUgaXMgbm90IGNsb3NlZC5cIilcbiAgICAgICAgICBpPWNsb3NlSW5kZXg7XG4gICAgICAgIH0gZWxzZSBpZih4bWxEYXRhLnN1YnN0cihpICsgMSwgMikgPT09ICchWycpIHsgXG4gICAgICAgICAgY29uc3QgY2xvc2VJbmRleCA9IGZpbmRDbG9zaW5nSW5kZXgoeG1sRGF0YSwgXCJdXT5cIiwgaSwgXCJTdG9wTm9kZSBpcyBub3QgY2xvc2VkLlwiKSAtIDI7XG4gICAgICAgICAgaT1jbG9zZUluZGV4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHRhZ0RhdGEgPSByZWFkVGFnRXhwKHhtbERhdGEsIGksICc+JylcblxuICAgICAgICAgIGlmICh0YWdEYXRhKSB7XG4gICAgICAgICAgICBjb25zdCBvcGVuVGFnTmFtZSA9IHRhZ0RhdGEgJiYgdGFnRGF0YS50YWdOYW1lO1xuICAgICAgICAgICAgaWYgKG9wZW5UYWdOYW1lID09PSB0YWdOYW1lICYmIHRhZ0RhdGEudGFnRXhwW3RhZ0RhdGEudGFnRXhwLmxlbmd0aC0xXSAhPT0gXCIvXCIpIHtcbiAgICAgICAgICAgICAgb3BlblRhZ0NvdW50Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpPXRhZ0RhdGEuY2xvc2VJbmRleDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgfS8vZW5kIGZvciBsb29wXG59XG5cbmZ1bmN0aW9uIHBhcnNlVmFsdWUodmFsLCBzaG91bGRQYXJzZSwgb3B0aW9ucykge1xuICBpZiAoc2hvdWxkUGFyc2UgJiYgdHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICAvL2NvbnNvbGUubG9nKG9wdGlvbnMpXG4gICAgY29uc3QgbmV3dmFsID0gdmFsLnRyaW0oKTtcbiAgICBpZihuZXd2YWwgPT09ICd0cnVlJyApIHJldHVybiB0cnVlO1xuICAgIGVsc2UgaWYobmV3dmFsID09PSAnZmFsc2UnICkgcmV0dXJuIGZhbHNlO1xuICAgIGVsc2UgcmV0dXJuIHRvTnVtYmVyKHZhbCwgb3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHV0aWwuaXNFeGlzdCh2YWwpKSB7XG4gICAgICByZXR1cm4gdmFsO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG59XG5cblxubW9kdWxlLmV4cG9ydHMgPSBPcmRlcmVkT2JqUGFyc2VyO1xuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogXG4gKiBAcGFyYW0ge2FycmF5fSBub2RlIFxuICogQHBhcmFtIHthbnl9IG9wdGlvbnMgXG4gKiBAcmV0dXJucyBcbiAqL1xuZnVuY3Rpb24gcHJldHRpZnkobm9kZSwgb3B0aW9ucyl7XG4gIHJldHVybiBjb21wcmVzcyggbm9kZSwgb3B0aW9ucyk7XG59XG5cbi8qKlxuICogXG4gKiBAcGFyYW0ge2FycmF5fSBhcnIgXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyBcbiAqIEBwYXJhbSB7c3RyaW5nfSBqUGF0aCBcbiAqIEByZXR1cm5zIG9iamVjdFxuICovXG5mdW5jdGlvbiBjb21wcmVzcyhhcnIsIG9wdGlvbnMsIGpQYXRoKXtcbiAgbGV0IHRleHQ7XG4gIGNvbnN0IGNvbXByZXNzZWRPYmogPSB7fTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCB0YWdPYmogPSBhcnJbaV07XG4gICAgY29uc3QgcHJvcGVydHkgPSBwcm9wTmFtZSh0YWdPYmopO1xuICAgIGxldCBuZXdKcGF0aCA9IFwiXCI7XG4gICAgaWYoalBhdGggPT09IHVuZGVmaW5lZCkgbmV3SnBhdGggPSBwcm9wZXJ0eTtcbiAgICBlbHNlIG5ld0pwYXRoID0galBhdGggKyBcIi5cIiArIHByb3BlcnR5O1xuXG4gICAgaWYocHJvcGVydHkgPT09IG9wdGlvbnMudGV4dE5vZGVOYW1lKXtcbiAgICAgIGlmKHRleHQgPT09IHVuZGVmaW5lZCkgdGV4dCA9IHRhZ09ialtwcm9wZXJ0eV07XG4gICAgICBlbHNlIHRleHQgKz0gXCJcIiArIHRhZ09ialtwcm9wZXJ0eV07XG4gICAgfWVsc2UgaWYocHJvcGVydHkgPT09IHVuZGVmaW5lZCl7XG4gICAgICBjb250aW51ZTtcbiAgICB9ZWxzZSBpZih0YWdPYmpbcHJvcGVydHldKXtcbiAgICAgIFxuICAgICAgbGV0IHZhbCA9IGNvbXByZXNzKHRhZ09ialtwcm9wZXJ0eV0sIG9wdGlvbnMsIG5ld0pwYXRoKTtcbiAgICAgIGNvbnN0IGlzTGVhZiA9IGlzTGVhZlRhZyh2YWwsIG9wdGlvbnMpO1xuXG4gICAgICBpZih0YWdPYmpbXCI6QFwiXSl7XG4gICAgICAgIGFzc2lnbkF0dHJpYnV0ZXMoIHZhbCwgdGFnT2JqW1wiOkBcIl0sIG5ld0pwYXRoLCBvcHRpb25zKTtcbiAgICAgIH1lbHNlIGlmKE9iamVjdC5rZXlzKHZhbCkubGVuZ3RoID09PSAxICYmIHZhbFtvcHRpb25zLnRleHROb2RlTmFtZV0gIT09IHVuZGVmaW5lZCAmJiAhb3B0aW9ucy5hbHdheXNDcmVhdGVUZXh0Tm9kZSl7XG4gICAgICAgIHZhbCA9IHZhbFtvcHRpb25zLnRleHROb2RlTmFtZV07XG4gICAgICB9ZWxzZSBpZihPYmplY3Qua2V5cyh2YWwpLmxlbmd0aCA9PT0gMCl7XG4gICAgICAgIGlmKG9wdGlvbnMuYWx3YXlzQ3JlYXRlVGV4dE5vZGUpIHZhbFtvcHRpb25zLnRleHROb2RlTmFtZV0gPSBcIlwiO1xuICAgICAgICBlbHNlIHZhbCA9IFwiXCI7XG4gICAgICB9XG5cbiAgICAgIGlmKGNvbXByZXNzZWRPYmpbcHJvcGVydHldICE9PSB1bmRlZmluZWQgJiYgY29tcHJlc3NlZE9iai5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpIHtcbiAgICAgICAgaWYoIUFycmF5LmlzQXJyYXkoY29tcHJlc3NlZE9ialtwcm9wZXJ0eV0pKSB7XG4gICAgICAgICAgICBjb21wcmVzc2VkT2JqW3Byb3BlcnR5XSA9IFsgY29tcHJlc3NlZE9ialtwcm9wZXJ0eV0gXTtcbiAgICAgICAgfVxuICAgICAgICBjb21wcmVzc2VkT2JqW3Byb3BlcnR5XS5wdXNoKHZhbCk7XG4gICAgICB9ZWxzZXtcbiAgICAgICAgLy9UT0RPOiBpZiBhIG5vZGUgaXMgbm90IGFuIGFycmF5LCB0aGVuIGNoZWNrIGlmIGl0IHNob3VsZCBiZSBhbiBhcnJheVxuICAgICAgICAvL2Fsc28gZGV0ZXJtaW5lIGlmIGl0IGlzIGEgbGVhZiBub2RlXG4gICAgICAgIGlmIChvcHRpb25zLmlzQXJyYXkocHJvcGVydHksIG5ld0pwYXRoLCBpc0xlYWYgKSkge1xuICAgICAgICAgIGNvbXByZXNzZWRPYmpbcHJvcGVydHldID0gW3ZhbF07XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgIGNvbXByZXNzZWRPYmpbcHJvcGVydHldID0gdmFsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIFxuICB9XG4gIC8vIGlmKHRleHQgJiYgdGV4dC5sZW5ndGggPiAwKSBjb21wcmVzc2VkT2JqW29wdGlvbnMudGV4dE5vZGVOYW1lXSA9IHRleHQ7XG4gIGlmKHR5cGVvZiB0ZXh0ID09PSBcInN0cmluZ1wiKXtcbiAgICBpZih0ZXh0Lmxlbmd0aCA+IDApIGNvbXByZXNzZWRPYmpbb3B0aW9ucy50ZXh0Tm9kZU5hbWVdID0gdGV4dDtcbiAgfWVsc2UgaWYodGV4dCAhPT0gdW5kZWZpbmVkKSBjb21wcmVzc2VkT2JqW29wdGlvbnMudGV4dE5vZGVOYW1lXSA9IHRleHQ7XG4gIHJldHVybiBjb21wcmVzc2VkT2JqO1xufVxuXG5mdW5jdGlvbiBwcm9wTmFtZShvYmope1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICBpZihrZXkgIT09IFwiOkBcIikgcmV0dXJuIGtleTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhc3NpZ25BdHRyaWJ1dGVzKG9iaiwgYXR0ck1hcCwganBhdGgsIG9wdGlvbnMpe1xuICBpZiAoYXR0ck1hcCkge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhhdHRyTWFwKTtcbiAgICBjb25zdCBsZW4gPSBrZXlzLmxlbmd0aDsgLy9kb24ndCBtYWtlIGl0IGlubGluZVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNvbnN0IGF0cnJOYW1lID0ga2V5c1tpXTtcbiAgICAgIGlmIChvcHRpb25zLmlzQXJyYXkoYXRyck5hbWUsIGpwYXRoICsgXCIuXCIgKyBhdHJyTmFtZSwgdHJ1ZSwgdHJ1ZSkpIHtcbiAgICAgICAgb2JqW2F0cnJOYW1lXSA9IFsgYXR0ck1hcFthdHJyTmFtZV0gXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9ialthdHJyTmFtZV0gPSBhdHRyTWFwW2F0cnJOYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNMZWFmVGFnKG9iaiwgb3B0aW9ucyl7XG4gIGNvbnN0IHsgdGV4dE5vZGVOYW1lIH0gPSBvcHRpb25zO1xuICBjb25zdCBwcm9wQ291bnQgPSBPYmplY3Qua2V5cyhvYmopLmxlbmd0aDtcbiAgXG4gIGlmIChwcm9wQ291bnQgPT09IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChcbiAgICBwcm9wQ291bnQgPT09IDEgJiZcbiAgICAob2JqW3RleHROb2RlTmFtZV0gfHwgdHlwZW9mIG9ialt0ZXh0Tm9kZU5hbWVdID09PSBcImJvb2xlYW5cIiB8fCBvYmpbdGV4dE5vZGVOYW1lXSA9PT0gMClcbiAgKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5leHBvcnRzLnByZXR0aWZ5ID0gcHJldHRpZnk7XG4iLAogICAgImNvbnN0IHsgYnVpbGRPcHRpb25zfSA9IHJlcXVpcmUoXCIuL09wdGlvbnNCdWlsZGVyXCIpO1xuY29uc3QgT3JkZXJlZE9ialBhcnNlciA9IHJlcXVpcmUoXCIuL09yZGVyZWRPYmpQYXJzZXJcIik7XG5jb25zdCB7IHByZXR0aWZ5fSA9IHJlcXVpcmUoXCIuL25vZGUyanNvblwiKTtcbmNvbnN0IHZhbGlkYXRvciA9IHJlcXVpcmUoJy4uL3ZhbGlkYXRvcicpO1xuXG5jbGFzcyBYTUxQYXJzZXJ7XG4gICAgXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucyl7XG4gICAgICAgIHRoaXMuZXh0ZXJuYWxFbnRpdGllcyA9IHt9O1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBidWlsZE9wdGlvbnMob3B0aW9ucyk7XG4gICAgICAgIFxuICAgIH1cbiAgICAvKipcbiAgICAgKiBQYXJzZSBYTUwgZGF0cyB0byBKUyBvYmplY3QgXG4gICAgICogQHBhcmFtIHtzdHJpbmd8QnVmZmVyfSB4bWxEYXRhIFxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbnxPYmplY3R9IHZhbGlkYXRpb25PcHRpb24gXG4gICAgICovXG4gICAgcGFyc2UoeG1sRGF0YSx2YWxpZGF0aW9uT3B0aW9uKXtcbiAgICAgICAgaWYodHlwZW9mIHhtbERhdGEgPT09IFwic3RyaW5nXCIpe1xuICAgICAgICB9ZWxzZSBpZiggeG1sRGF0YS50b1N0cmluZyl7XG4gICAgICAgICAgICB4bWxEYXRhID0geG1sRGF0YS50b1N0cmluZygpO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlhNTCBkYXRhIGlzIGFjY2VwdGVkIGluIFN0cmluZyBvciBCeXRlc1tdIGZvcm0uXCIpXG4gICAgICAgIH1cbiAgICAgICAgaWYoIHZhbGlkYXRpb25PcHRpb24pe1xuICAgICAgICAgICAgaWYodmFsaWRhdGlvbk9wdGlvbiA9PT0gdHJ1ZSkgdmFsaWRhdGlvbk9wdGlvbiA9IHt9OyAvL3ZhbGlkYXRlIHdpdGggZGVmYXVsdCBvcHRpb25zXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHZhbGlkYXRvci52YWxpZGF0ZSh4bWxEYXRhLCB2YWxpZGF0aW9uT3B0aW9uKTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgIT09IHRydWUpIHtcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoIGAke3Jlc3VsdC5lcnIubXNnfToke3Jlc3VsdC5lcnIubGluZX06JHtyZXN1bHQuZXJyLmNvbH1gIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9yZGVyZWRPYmpQYXJzZXIgPSBuZXcgT3JkZXJlZE9ialBhcnNlcih0aGlzLm9wdGlvbnMpO1xuICAgICAgICBvcmRlcmVkT2JqUGFyc2VyLmFkZEV4dGVybmFsRW50aXRpZXModGhpcy5leHRlcm5hbEVudGl0aWVzKTtcbiAgICAgICAgY29uc3Qgb3JkZXJlZFJlc3VsdCA9IG9yZGVyZWRPYmpQYXJzZXIucGFyc2VYbWwoeG1sRGF0YSk7XG4gICAgICAgIGlmKHRoaXMub3B0aW9ucy5wcmVzZXJ2ZU9yZGVyIHx8IG9yZGVyZWRSZXN1bHQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIG9yZGVyZWRSZXN1bHQ7XG4gICAgICAgIGVsc2UgcmV0dXJuIHByZXR0aWZ5KG9yZGVyZWRSZXN1bHQsIHRoaXMub3B0aW9ucyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkIEVudGl0eSB3aGljaCBpcyBub3QgYnkgZGVmYXVsdCBzdXBwb3J0ZWQgYnkgdGhpcyBsaWJyYXJ5XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUgXG4gICAgICovXG4gICAgYWRkRW50aXR5KGtleSwgdmFsdWUpe1xuICAgICAgICBpZih2YWx1ZS5pbmRleE9mKFwiJlwiKSAhPT0gLTEpe1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRW50aXR5IHZhbHVlIGNhbid0IGhhdmUgJyYnXCIpXG4gICAgICAgIH1lbHNlIGlmKGtleS5pbmRleE9mKFwiJlwiKSAhPT0gLTEgfHwga2V5LmluZGV4T2YoXCI7XCIpICE9PSAtMSl7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBbiBlbnRpdHkgbXVzdCBiZSBzZXQgd2l0aG91dCAnJicgYW5kICc7Jy4gRWcuIHVzZSAnI3hEJyBmb3IgJyYjeEQ7J1wiKVxuICAgICAgICB9ZWxzZSBpZih2YWx1ZSA9PT0gXCImXCIpe1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQW4gZW50aXR5IHdpdGggdmFsdWUgJyYnIGlzIG5vdCBwZXJtaXR0ZWRcIik7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgdGhpcy5leHRlcm5hbEVudGl0aWVzW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBYTUxQYXJzZXI7IiwKICAgICJjb25zdCBFT0wgPSBcIlxcblwiO1xuXG4vKipcbiAqIFxuICogQHBhcmFtIHthcnJheX0gakFycmF5IFxuICogQHBhcmFtIHthbnl9IG9wdGlvbnMgXG4gKiBAcmV0dXJucyBcbiAqL1xuZnVuY3Rpb24gdG9YbWwoakFycmF5LCBvcHRpb25zKSB7XG4gICAgbGV0IGluZGVudGF0aW9uID0gXCJcIjtcbiAgICBpZiAob3B0aW9ucy5mb3JtYXQgJiYgb3B0aW9ucy5pbmRlbnRCeS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGluZGVudGF0aW9uID0gRU9MO1xuICAgIH1cbiAgICByZXR1cm4gYXJyVG9TdHIoakFycmF5LCBvcHRpb25zLCBcIlwiLCBpbmRlbnRhdGlvbik7XG59XG5cbmZ1bmN0aW9uIGFyclRvU3RyKGFyciwgb3B0aW9ucywgalBhdGgsIGluZGVudGF0aW9uKSB7XG4gICAgbGV0IHhtbFN0ciA9IFwiXCI7XG4gICAgbGV0IGlzUHJldmlvdXNFbGVtZW50VGFnID0gZmFsc2U7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCB0YWdPYmogPSBhcnJbaV07XG4gICAgICAgIGNvbnN0IHRhZ05hbWUgPSBwcm9wTmFtZSh0YWdPYmopO1xuICAgICAgICBpZih0YWdOYW1lID09PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xuXG4gICAgICAgIGxldCBuZXdKUGF0aCA9IFwiXCI7XG4gICAgICAgIGlmIChqUGF0aC5sZW5ndGggPT09IDApIG5ld0pQYXRoID0gdGFnTmFtZVxuICAgICAgICBlbHNlIG5ld0pQYXRoID0gYCR7alBhdGh9LiR7dGFnTmFtZX1gO1xuXG4gICAgICAgIGlmICh0YWdOYW1lID09PSBvcHRpb25zLnRleHROb2RlTmFtZSkge1xuICAgICAgICAgICAgbGV0IHRhZ1RleHQgPSB0YWdPYmpbdGFnTmFtZV07XG4gICAgICAgICAgICBpZiAoIWlzU3RvcE5vZGUobmV3SlBhdGgsIG9wdGlvbnMpKSB7XG4gICAgICAgICAgICAgICAgdGFnVGV4dCA9IG9wdGlvbnMudGFnVmFsdWVQcm9jZXNzb3IodGFnTmFtZSwgdGFnVGV4dCk7XG4gICAgICAgICAgICAgICAgdGFnVGV4dCA9IHJlcGxhY2VFbnRpdGllc1ZhbHVlKHRhZ1RleHQsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzUHJldmlvdXNFbGVtZW50VGFnKSB7XG4gICAgICAgICAgICAgICAgeG1sU3RyICs9IGluZGVudGF0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgeG1sU3RyICs9IHRhZ1RleHQ7XG4gICAgICAgICAgICBpc1ByZXZpb3VzRWxlbWVudFRhZyA9IGZhbHNlO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gZWxzZSBpZiAodGFnTmFtZSA9PT0gb3B0aW9ucy5jZGF0YVByb3BOYW1lKSB7XG4gICAgICAgICAgICBpZiAoaXNQcmV2aW91c0VsZW1lbnRUYWcpIHtcbiAgICAgICAgICAgICAgICB4bWxTdHIgKz0gaW5kZW50YXRpb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB4bWxTdHIgKz0gYDwhW0NEQVRBWyR7dGFnT2JqW3RhZ05hbWVdWzBdW29wdGlvbnMudGV4dE5vZGVOYW1lXX1dXT5gO1xuICAgICAgICAgICAgaXNQcmV2aW91c0VsZW1lbnRUYWcgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHRhZ05hbWUgPT09IG9wdGlvbnMuY29tbWVudFByb3BOYW1lKSB7XG4gICAgICAgICAgICB4bWxTdHIgKz0gaW5kZW50YXRpb24gKyBgPCEtLSR7dGFnT2JqW3RhZ05hbWVdWzBdW29wdGlvbnMudGV4dE5vZGVOYW1lXX0tLT5gO1xuICAgICAgICAgICAgaXNQcmV2aW91c0VsZW1lbnRUYWcgPSB0cnVlO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gZWxzZSBpZiAodGFnTmFtZVswXSA9PT0gXCI/XCIpIHtcbiAgICAgICAgICAgIGNvbnN0IGF0dFN0ciA9IGF0dHJfdG9fc3RyKHRhZ09ialtcIjpAXCJdLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGNvbnN0IHRlbXBJbmQgPSB0YWdOYW1lID09PSBcIj94bWxcIiA/IFwiXCIgOiBpbmRlbnRhdGlvbjtcbiAgICAgICAgICAgIGxldCBwaVRleHROb2RlTmFtZSA9IHRhZ09ialt0YWdOYW1lXVswXVtvcHRpb25zLnRleHROb2RlTmFtZV07XG4gICAgICAgICAgICBwaVRleHROb2RlTmFtZSA9IHBpVGV4dE5vZGVOYW1lLmxlbmd0aCAhPT0gMCA/IFwiIFwiICsgcGlUZXh0Tm9kZU5hbWUgOiBcIlwiOyAvL3JlbW92ZSBleHRyYSBzcGFjaW5nXG4gICAgICAgICAgICB4bWxTdHIgKz0gdGVtcEluZCArIGA8JHt0YWdOYW1lfSR7cGlUZXh0Tm9kZU5hbWV9JHthdHRTdHJ9Pz5gO1xuICAgICAgICAgICAgaXNQcmV2aW91c0VsZW1lbnRUYWcgPSB0cnVlO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG5ld0lkZW50YXRpb24gPSBpbmRlbnRhdGlvbjtcbiAgICAgICAgaWYgKG5ld0lkZW50YXRpb24gIT09IFwiXCIpIHtcbiAgICAgICAgICAgIG5ld0lkZW50YXRpb24gKz0gb3B0aW9ucy5pbmRlbnRCeTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhdHRTdHIgPSBhdHRyX3RvX3N0cih0YWdPYmpbXCI6QFwiXSwgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHRhZ1N0YXJ0ID0gaW5kZW50YXRpb24gKyBgPCR7dGFnTmFtZX0ke2F0dFN0cn1gO1xuICAgICAgICBjb25zdCB0YWdWYWx1ZSA9IGFyclRvU3RyKHRhZ09ialt0YWdOYW1lXSwgb3B0aW9ucywgbmV3SlBhdGgsIG5ld0lkZW50YXRpb24pO1xuICAgICAgICBpZiAob3B0aW9ucy51bnBhaXJlZFRhZ3MuaW5kZXhPZih0YWdOYW1lKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnN1cHByZXNzVW5wYWlyZWROb2RlKSB4bWxTdHIgKz0gdGFnU3RhcnQgKyBcIj5cIjtcbiAgICAgICAgICAgIGVsc2UgeG1sU3RyICs9IHRhZ1N0YXJ0ICsgXCIvPlwiO1xuICAgICAgICB9IGVsc2UgaWYgKCghdGFnVmFsdWUgfHwgdGFnVmFsdWUubGVuZ3RoID09PSAwKSAmJiBvcHRpb25zLnN1cHByZXNzRW1wdHlOb2RlKSB7XG4gICAgICAgICAgICB4bWxTdHIgKz0gdGFnU3RhcnQgKyBcIi8+XCI7XG4gICAgICAgIH0gZWxzZSBpZiAodGFnVmFsdWUgJiYgdGFnVmFsdWUuZW5kc1dpdGgoXCI+XCIpKSB7XG4gICAgICAgICAgICB4bWxTdHIgKz0gdGFnU3RhcnQgKyBgPiR7dGFnVmFsdWV9JHtpbmRlbnRhdGlvbn08LyR7dGFnTmFtZX0+YDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHhtbFN0ciArPSB0YWdTdGFydCArIFwiPlwiO1xuICAgICAgICAgICAgaWYgKHRhZ1ZhbHVlICYmIGluZGVudGF0aW9uICE9PSBcIlwiICYmICh0YWdWYWx1ZS5pbmNsdWRlcyhcIi8+XCIpIHx8IHRhZ1ZhbHVlLmluY2x1ZGVzKFwiPC9cIikpKSB7XG4gICAgICAgICAgICAgICAgeG1sU3RyICs9IGluZGVudGF0aW9uICsgb3B0aW9ucy5pbmRlbnRCeSArIHRhZ1ZhbHVlICsgaW5kZW50YXRpb247XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHhtbFN0ciArPSB0YWdWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHhtbFN0ciArPSBgPC8ke3RhZ05hbWV9PmA7XG4gICAgICAgIH1cbiAgICAgICAgaXNQcmV2aW91c0VsZW1lbnRUYWcgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB4bWxTdHI7XG59XG5cbmZ1bmN0aW9uIHByb3BOYW1lKG9iaikge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xuICAgICAgICBpZighb2JqLmhhc093blByb3BlcnR5KGtleSkpIGNvbnRpbnVlO1xuICAgICAgICBpZiAoa2V5ICE9PSBcIjpAXCIpIHJldHVybiBrZXk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBhdHRyX3RvX3N0cihhdHRyTWFwLCBvcHRpb25zKSB7XG4gICAgbGV0IGF0dHJTdHIgPSBcIlwiO1xuICAgIGlmIChhdHRyTWFwICYmICFvcHRpb25zLmlnbm9yZUF0dHJpYnV0ZXMpIHtcbiAgICAgICAgZm9yIChsZXQgYXR0ciBpbiBhdHRyTWFwKSB7XG4gICAgICAgICAgICBpZighYXR0ck1hcC5oYXNPd25Qcm9wZXJ0eShhdHRyKSkgY29udGludWU7XG4gICAgICAgICAgICBsZXQgYXR0clZhbCA9IG9wdGlvbnMuYXR0cmlidXRlVmFsdWVQcm9jZXNzb3IoYXR0ciwgYXR0ck1hcFthdHRyXSk7XG4gICAgICAgICAgICBhdHRyVmFsID0gcmVwbGFjZUVudGl0aWVzVmFsdWUoYXR0clZhbCwgb3B0aW9ucyk7XG4gICAgICAgICAgICBpZiAoYXR0clZhbCA9PT0gdHJ1ZSAmJiBvcHRpb25zLnN1cHByZXNzQm9vbGVhbkF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgICAgICBhdHRyU3RyICs9IGAgJHthdHRyLnN1YnN0cihvcHRpb25zLmF0dHJpYnV0ZU5hbWVQcmVmaXgubGVuZ3RoKX1gO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhdHRyU3RyICs9IGAgJHthdHRyLnN1YnN0cihvcHRpb25zLmF0dHJpYnV0ZU5hbWVQcmVmaXgubGVuZ3RoKX09XCIke2F0dHJWYWx9XCJgO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhdHRyU3RyO1xufVxuXG5mdW5jdGlvbiBpc1N0b3BOb2RlKGpQYXRoLCBvcHRpb25zKSB7XG4gICAgalBhdGggPSBqUGF0aC5zdWJzdHIoMCwgalBhdGgubGVuZ3RoIC0gb3B0aW9ucy50ZXh0Tm9kZU5hbWUubGVuZ3RoIC0gMSk7XG4gICAgbGV0IHRhZ05hbWUgPSBqUGF0aC5zdWJzdHIoalBhdGgubGFzdEluZGV4T2YoXCIuXCIpICsgMSk7XG4gICAgZm9yIChsZXQgaW5kZXggaW4gb3B0aW9ucy5zdG9wTm9kZXMpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuc3RvcE5vZGVzW2luZGV4XSA9PT0galBhdGggfHwgb3B0aW9ucy5zdG9wTm9kZXNbaW5kZXhdID09PSBcIiouXCIgKyB0YWdOYW1lKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiByZXBsYWNlRW50aXRpZXNWYWx1ZSh0ZXh0VmFsdWUsIG9wdGlvbnMpIHtcbiAgICBpZiAodGV4dFZhbHVlICYmIHRleHRWYWx1ZS5sZW5ndGggPiAwICYmIG9wdGlvbnMucHJvY2Vzc0VudGl0aWVzKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3B0aW9ucy5lbnRpdGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgZW50aXR5ID0gb3B0aW9ucy5lbnRpdGllc1tpXTtcbiAgICAgICAgICAgIHRleHRWYWx1ZSA9IHRleHRWYWx1ZS5yZXBsYWNlKGVudGl0eS5yZWdleCwgZW50aXR5LnZhbCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRleHRWYWx1ZTtcbn1cbm1vZHVsZS5leHBvcnRzID0gdG9YbWw7XG4iLAogICAgIid1c2Ugc3RyaWN0Jztcbi8vcGFyc2UgRW1wdHkgTm9kZSBhcyBzZWxmIGNsb3Npbmcgbm9kZVxuY29uc3QgYnVpbGRGcm9tT3JkZXJlZEpzID0gcmVxdWlyZSgnLi9vcmRlcmVkSnMyWG1sJyk7XG5jb25zdCBnZXRJZ25vcmVBdHRyaWJ1dGVzRm4gPSByZXF1aXJlKCcuLi9pZ25vcmVBdHRyaWJ1dGVzJylcblxuY29uc3QgZGVmYXVsdE9wdGlvbnMgPSB7XG4gIGF0dHJpYnV0ZU5hbWVQcmVmaXg6ICdAXycsXG4gIGF0dHJpYnV0ZXNHcm91cE5hbWU6IGZhbHNlLFxuICB0ZXh0Tm9kZU5hbWU6ICcjdGV4dCcsXG4gIGlnbm9yZUF0dHJpYnV0ZXM6IHRydWUsXG4gIGNkYXRhUHJvcE5hbWU6IGZhbHNlLFxuICBmb3JtYXQ6IGZhbHNlLFxuICBpbmRlbnRCeTogJyAgJyxcbiAgc3VwcHJlc3NFbXB0eU5vZGU6IGZhbHNlLFxuICBzdXBwcmVzc1VucGFpcmVkTm9kZTogdHJ1ZSxcbiAgc3VwcHJlc3NCb29sZWFuQXR0cmlidXRlczogdHJ1ZSxcbiAgdGFnVmFsdWVQcm9jZXNzb3I6IGZ1bmN0aW9uKGtleSwgYSkge1xuICAgIHJldHVybiBhO1xuICB9LFxuICBhdHRyaWJ1dGVWYWx1ZVByb2Nlc3NvcjogZnVuY3Rpb24oYXR0ck5hbWUsIGEpIHtcbiAgICByZXR1cm4gYTtcbiAgfSxcbiAgcHJlc2VydmVPcmRlcjogZmFsc2UsXG4gIGNvbW1lbnRQcm9wTmFtZTogZmFsc2UsXG4gIHVucGFpcmVkVGFnczogW10sXG4gIGVudGl0aWVzOiBbXG4gICAgeyByZWdleDogbmV3IFJlZ0V4cChcIiZcIiwgXCJnXCIpLCB2YWw6IFwiJmFtcDtcIiB9LC8vaXQgbXVzdCBiZSBvbiB0b3BcbiAgICB7IHJlZ2V4OiBuZXcgUmVnRXhwKFwiPlwiLCBcImdcIiksIHZhbDogXCImZ3Q7XCIgfSxcbiAgICB7IHJlZ2V4OiBuZXcgUmVnRXhwKFwiPFwiLCBcImdcIiksIHZhbDogXCImbHQ7XCIgfSxcbiAgICB7IHJlZ2V4OiBuZXcgUmVnRXhwKFwiXFwnXCIsIFwiZ1wiKSwgdmFsOiBcIiZhcG9zO1wiIH0sXG4gICAgeyByZWdleDogbmV3IFJlZ0V4cChcIlxcXCJcIiwgXCJnXCIpLCB2YWw6IFwiJnF1b3Q7XCIgfVxuICBdLFxuICBwcm9jZXNzRW50aXRpZXM6IHRydWUsXG4gIHN0b3BOb2RlczogW10sXG4gIC8vIHRyYW5zZm9ybVRhZ05hbWU6IGZhbHNlLFxuICAvLyB0cmFuc2Zvcm1BdHRyaWJ1dGVOYW1lOiBmYWxzZSxcbiAgb25lTGlzdEdyb3VwOiBmYWxzZVxufTtcblxuZnVuY3Rpb24gQnVpbGRlcihvcHRpb25zKSB7XG4gIHRoaXMub3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRPcHRpb25zLCBvcHRpb25zKTtcbiAgaWYgKHRoaXMub3B0aW9ucy5pZ25vcmVBdHRyaWJ1dGVzID09PSB0cnVlIHx8IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVzR3JvdXBOYW1lKSB7XG4gICAgdGhpcy5pc0F0dHJpYnV0ZSA9IGZ1bmN0aW9uKC8qYSovKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmlnbm9yZUF0dHJpYnV0ZXNGbiA9IGdldElnbm9yZUF0dHJpYnV0ZXNGbih0aGlzLm9wdGlvbnMuaWdub3JlQXR0cmlidXRlcylcbiAgICB0aGlzLmF0dHJQcmVmaXhMZW4gPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlTmFtZVByZWZpeC5sZW5ndGg7XG4gICAgdGhpcy5pc0F0dHJpYnV0ZSA9IGlzQXR0cmlidXRlO1xuICB9XG5cbiAgdGhpcy5wcm9jZXNzVGV4dE9yT2JqTm9kZSA9IHByb2Nlc3NUZXh0T3JPYmpOb2RlXG5cbiAgaWYgKHRoaXMub3B0aW9ucy5mb3JtYXQpIHtcbiAgICB0aGlzLmluZGVudGF0ZSA9IGluZGVudGF0ZTtcbiAgICB0aGlzLnRhZ0VuZENoYXIgPSAnPlxcbic7XG4gICAgdGhpcy5uZXdMaW5lID0gJ1xcbic7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5pbmRlbnRhdGUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9O1xuICAgIHRoaXMudGFnRW5kQ2hhciA9ICc+JztcbiAgICB0aGlzLm5ld0xpbmUgPSAnJztcbiAgfVxufVxuXG5CdWlsZGVyLnByb3RvdHlwZS5idWlsZCA9IGZ1bmN0aW9uKGpPYmopIHtcbiAgaWYodGhpcy5vcHRpb25zLnByZXNlcnZlT3JkZXIpe1xuICAgIHJldHVybiBidWlsZEZyb21PcmRlcmVkSnMoak9iaiwgdGhpcy5vcHRpb25zKTtcbiAgfWVsc2Uge1xuICAgIGlmKEFycmF5LmlzQXJyYXkoak9iaikgJiYgdGhpcy5vcHRpb25zLmFycmF5Tm9kZU5hbWUgJiYgdGhpcy5vcHRpb25zLmFycmF5Tm9kZU5hbWUubGVuZ3RoID4gMSl7XG4gICAgICBqT2JqID0ge1xuICAgICAgICBbdGhpcy5vcHRpb25zLmFycmF5Tm9kZU5hbWVdIDogak9ialxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5qMngoak9iaiwgMCwgW10pLnZhbDtcbiAgfVxufTtcblxuQnVpbGRlci5wcm90b3R5cGUuajJ4ID0gZnVuY3Rpb24oak9iaiwgbGV2ZWwsIGFqUGF0aCkge1xuICBsZXQgYXR0clN0ciA9ICcnO1xuICBsZXQgdmFsID0gJyc7XG4gIGNvbnN0IGpQYXRoID0gYWpQYXRoLmpvaW4oJy4nKVxuICBmb3IgKGxldCBrZXkgaW4gak9iaikge1xuICAgIGlmKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoak9iaiwga2V5KSkgY29udGludWU7XG4gICAgaWYgKHR5cGVvZiBqT2JqW2tleV0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyBzdXByZXNzIHVuZGVmaW5lZCBub2RlIG9ubHkgaWYgaXQgaXMgbm90IGFuIGF0dHJpYnV0ZVxuICAgICAgaWYgKHRoaXMuaXNBdHRyaWJ1dGUoa2V5KSkge1xuICAgICAgICB2YWwgKz0gJyc7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChqT2JqW2tleV0gPT09IG51bGwpIHtcbiAgICAgIC8vIG51bGwgYXR0cmlidXRlIHNob3VsZCBiZSBpZ25vcmVkIGJ5IHRoZSBhdHRyaWJ1dGUgbGlzdCwgYnV0IHNob3VsZCBub3QgY2F1c2UgdGhlIHRhZyBjbG9zaW5nXG4gICAgICBpZiAodGhpcy5pc0F0dHJpYnV0ZShrZXkpKSB7XG4gICAgICAgIHZhbCArPSAnJztcbiAgICAgIH0gZWxzZSBpZiAoa2V5WzBdID09PSAnPycpIHtcbiAgICAgICAgdmFsICs9IHRoaXMuaW5kZW50YXRlKGxldmVsKSArICc8JyArIGtleSArICc/JyArIHRoaXMudGFnRW5kQ2hhcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbCArPSB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyAnPCcgKyBrZXkgKyAnLycgKyB0aGlzLnRhZ0VuZENoYXI7XG4gICAgICB9XG4gICAgICAvLyB2YWwgKz0gdGhpcy5pbmRlbnRhdGUobGV2ZWwpICsgJzwnICsga2V5ICsgJy8nICsgdGhpcy50YWdFbmRDaGFyO1xuICAgIH0gZWxzZSBpZiAoak9ialtrZXldIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgdmFsICs9IHRoaXMuYnVpbGRUZXh0VmFsTm9kZShqT2JqW2tleV0sIGtleSwgJycsIGxldmVsKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBqT2JqW2tleV0gIT09ICdvYmplY3QnKSB7XG4gICAgICAvL3ByZW1pdGl2ZSB0eXBlXG4gICAgICBjb25zdCBhdHRyID0gdGhpcy5pc0F0dHJpYnV0ZShrZXkpO1xuICAgICAgaWYgKGF0dHIgJiYgIXRoaXMuaWdub3JlQXR0cmlidXRlc0ZuKGF0dHIsIGpQYXRoKSkge1xuICAgICAgICBhdHRyU3RyICs9IHRoaXMuYnVpbGRBdHRyUGFpclN0cihhdHRyLCAnJyArIGpPYmpba2V5XSk7XG4gICAgICB9IGVsc2UgaWYgKCFhdHRyKSB7XG4gICAgICAgIC8vdGFnIHZhbHVlXG4gICAgICAgIGlmIChrZXkgPT09IHRoaXMub3B0aW9ucy50ZXh0Tm9kZU5hbWUpIHtcbiAgICAgICAgICBsZXQgbmV3dmFsID0gdGhpcy5vcHRpb25zLnRhZ1ZhbHVlUHJvY2Vzc29yKGtleSwgJycgKyBqT2JqW2tleV0pO1xuICAgICAgICAgIHZhbCArPSB0aGlzLnJlcGxhY2VFbnRpdGllc1ZhbHVlKG5ld3ZhbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsICs9IHRoaXMuYnVpbGRUZXh0VmFsTm9kZShqT2JqW2tleV0sIGtleSwgJycsIGxldmVsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShqT2JqW2tleV0pKSB7XG4gICAgICAvL3JlcGVhdGVkIG5vZGVzXG4gICAgICBjb25zdCBhcnJMZW4gPSBqT2JqW2tleV0ubGVuZ3RoO1xuICAgICAgbGV0IGxpc3RUYWdWYWwgPSBcIlwiO1xuICAgICAgbGV0IGxpc3RUYWdBdHRyID0gXCJcIjtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgYXJyTGVuOyBqKyspIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IGpPYmpba2V5XVtqXTtcbiAgICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIC8vIHN1cHJlc3MgdW5kZWZpbmVkIG5vZGVcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtID09PSBudWxsKSB7XG4gICAgICAgICAgaWYoa2V5WzBdID09PSBcIj9cIikgdmFsICs9IHRoaXMuaW5kZW50YXRlKGxldmVsKSArICc8JyArIGtleSArICc/JyArIHRoaXMudGFnRW5kQ2hhcjtcbiAgICAgICAgICBlbHNlIHZhbCArPSB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyAnPCcgKyBrZXkgKyAnLycgKyB0aGlzLnRhZ0VuZENoYXI7XG4gICAgICAgICAgLy8gdmFsICs9IHRoaXMuaW5kZW50YXRlKGxldmVsKSArICc8JyArIGtleSArICcvJyArIHRoaXMudGFnRW5kQ2hhcjtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBpZih0aGlzLm9wdGlvbnMub25lTGlzdEdyb3VwKXtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuajJ4KGl0ZW0sIGxldmVsICsgMSwgYWpQYXRoLmNvbmNhdChrZXkpKTtcbiAgICAgICAgICAgIGxpc3RUYWdWYWwgKz0gcmVzdWx0LnZhbDtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYXR0cmlidXRlc0dyb3VwTmFtZSAmJiBpdGVtLmhhc093blByb3BlcnR5KHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVzR3JvdXBOYW1lKSkge1xuICAgICAgICAgICAgICBsaXN0VGFnQXR0ciArPSByZXN1bHQuYXR0clN0clxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgbGlzdFRhZ1ZhbCArPSB0aGlzLnByb2Nlc3NUZXh0T3JPYmpOb2RlKGl0ZW0sIGtleSwgbGV2ZWwsIGFqUGF0aClcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5vbmVMaXN0R3JvdXApIHtcbiAgICAgICAgICAgIGxldCB0ZXh0VmFsdWUgPSB0aGlzLm9wdGlvbnMudGFnVmFsdWVQcm9jZXNzb3Ioa2V5LCBpdGVtKTtcbiAgICAgICAgICAgIHRleHRWYWx1ZSA9IHRoaXMucmVwbGFjZUVudGl0aWVzVmFsdWUodGV4dFZhbHVlKTtcbiAgICAgICAgICAgIGxpc3RUYWdWYWwgKz0gdGV4dFZhbHVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsaXN0VGFnVmFsICs9IHRoaXMuYnVpbGRUZXh0VmFsTm9kZShpdGVtLCBrZXksICcnLCBsZXZlbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZih0aGlzLm9wdGlvbnMub25lTGlzdEdyb3VwKXtcbiAgICAgICAgbGlzdFRhZ1ZhbCA9IHRoaXMuYnVpbGRPYmplY3ROb2RlKGxpc3RUYWdWYWwsIGtleSwgbGlzdFRhZ0F0dHIsIGxldmVsKTtcbiAgICAgIH1cbiAgICAgIHZhbCArPSBsaXN0VGFnVmFsO1xuICAgIH0gZWxzZSB7XG4gICAgICAvL25lc3RlZCBub2RlXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmF0dHJpYnV0ZXNHcm91cE5hbWUgJiYga2V5ID09PSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlc0dyb3VwTmFtZSkge1xuICAgICAgICBjb25zdCBLcyA9IE9iamVjdC5rZXlzKGpPYmpba2V5XSk7XG4gICAgICAgIGNvbnN0IEwgPSBLcy5sZW5ndGg7XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgTDsgaisrKSB7XG4gICAgICAgICAgYXR0clN0ciArPSB0aGlzLmJ1aWxkQXR0clBhaXJTdHIoS3Nbal0sICcnICsgak9ialtrZXldW0tzW2pdXSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbCArPSB0aGlzLnByb2Nlc3NUZXh0T3JPYmpOb2RlKGpPYmpba2V5XSwga2V5LCBsZXZlbCwgYWpQYXRoKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4ge2F0dHJTdHI6IGF0dHJTdHIsIHZhbDogdmFsfTtcbn07XG5cbkJ1aWxkZXIucHJvdG90eXBlLmJ1aWxkQXR0clBhaXJTdHIgPSBmdW5jdGlvbihhdHRyTmFtZSwgdmFsKXtcbiAgdmFsID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZVZhbHVlUHJvY2Vzc29yKGF0dHJOYW1lLCAnJyArIHZhbCk7XG4gIHZhbCA9IHRoaXMucmVwbGFjZUVudGl0aWVzVmFsdWUodmFsKTtcbiAgaWYgKHRoaXMub3B0aW9ucy5zdXBwcmVzc0Jvb2xlYW5BdHRyaWJ1dGVzICYmIHZhbCA9PT0gXCJ0cnVlXCIpIHtcbiAgICByZXR1cm4gJyAnICsgYXR0ck5hbWU7XG4gIH0gZWxzZSByZXR1cm4gJyAnICsgYXR0ck5hbWUgKyAnPVwiJyArIHZhbCArICdcIic7XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NUZXh0T3JPYmpOb2RlIChvYmplY3QsIGtleSwgbGV2ZWwsIGFqUGF0aCkge1xuICBjb25zdCByZXN1bHQgPSB0aGlzLmoyeChvYmplY3QsIGxldmVsICsgMSwgYWpQYXRoLmNvbmNhdChrZXkpKTtcbiAgaWYgKG9iamVjdFt0aGlzLm9wdGlvbnMudGV4dE5vZGVOYW1lXSAhPT0gdW5kZWZpbmVkICYmIE9iamVjdC5rZXlzKG9iamVjdCkubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIHRoaXMuYnVpbGRUZXh0VmFsTm9kZShvYmplY3RbdGhpcy5vcHRpb25zLnRleHROb2RlTmFtZV0sIGtleSwgcmVzdWx0LmF0dHJTdHIsIGxldmVsKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdGhpcy5idWlsZE9iamVjdE5vZGUocmVzdWx0LnZhbCwga2V5LCByZXN1bHQuYXR0clN0ciwgbGV2ZWwpO1xuICB9XG59XG5cbkJ1aWxkZXIucHJvdG90eXBlLmJ1aWxkT2JqZWN0Tm9kZSA9IGZ1bmN0aW9uKHZhbCwga2V5LCBhdHRyU3RyLCBsZXZlbCkge1xuICBpZih2YWwgPT09IFwiXCIpe1xuICAgIGlmKGtleVswXSA9PT0gXCI/XCIpIHJldHVybiAgdGhpcy5pbmRlbnRhdGUobGV2ZWwpICsgJzwnICsga2V5ICsgYXR0clN0cisgJz8nICsgdGhpcy50YWdFbmRDaGFyO1xuICAgIGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuaW5kZW50YXRlKGxldmVsKSArICc8JyArIGtleSArIGF0dHJTdHIgKyB0aGlzLmNsb3NlVGFnKGtleSkgKyB0aGlzLnRhZ0VuZENoYXI7XG4gICAgfVxuICB9ZWxzZXtcblxuICAgIGxldCB0YWdFbmRFeHAgPSAnPC8nICsga2V5ICsgdGhpcy50YWdFbmRDaGFyO1xuICAgIGxldCBwaUNsb3NpbmdDaGFyID0gXCJcIjtcbiAgICBcbiAgICBpZihrZXlbMF0gPT09IFwiP1wiKSB7XG4gICAgICBwaUNsb3NpbmdDaGFyID0gXCI/XCI7XG4gICAgICB0YWdFbmRFeHAgPSBcIlwiO1xuICAgIH1cbiAgXG4gICAgLy8gYXR0clN0ciBpcyBhbiBlbXB0eSBzdHJpbmcgaW4gY2FzZSB0aGUgYXR0cmlidXRlIGNhbWUgYXMgdW5kZWZpbmVkIG9yIG51bGxcbiAgICBpZiAoKGF0dHJTdHIgfHwgYXR0clN0ciA9PT0gJycpICYmIHZhbC5pbmRleE9mKCc8JykgPT09IC0xKSB7XG4gICAgICByZXR1cm4gKCB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyAnPCcgKyAga2V5ICsgYXR0clN0ciArIHBpQ2xvc2luZ0NoYXIgKyAnPicgKyB2YWwgKyB0YWdFbmRFeHAgKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5jb21tZW50UHJvcE5hbWUgIT09IGZhbHNlICYmIGtleSA9PT0gdGhpcy5vcHRpb25zLmNvbW1lbnRQcm9wTmFtZSAmJiBwaUNsb3NpbmdDaGFyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5kZW50YXRlKGxldmVsKSArIGA8IS0tJHt2YWx9LS0+YCArIHRoaXMubmV3TGluZTtcbiAgICB9ZWxzZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyAnPCcgKyBrZXkgKyBhdHRyU3RyICsgcGlDbG9zaW5nQ2hhciArIHRoaXMudGFnRW5kQ2hhciArXG4gICAgICAgIHZhbCArXG4gICAgICAgIHRoaXMuaW5kZW50YXRlKGxldmVsKSArIHRhZ0VuZEV4cCAgICApO1xuICAgIH1cbiAgfVxufVxuXG5CdWlsZGVyLnByb3RvdHlwZS5jbG9zZVRhZyA9IGZ1bmN0aW9uKGtleSl7XG4gIGxldCBjbG9zZVRhZyA9IFwiXCI7XG4gIGlmKHRoaXMub3B0aW9ucy51bnBhaXJlZFRhZ3MuaW5kZXhPZihrZXkpICE9PSAtMSl7IC8vdW5wYWlyZWRcbiAgICBpZighdGhpcy5vcHRpb25zLnN1cHByZXNzVW5wYWlyZWROb2RlKSBjbG9zZVRhZyA9IFwiL1wiXG4gIH1lbHNlIGlmKHRoaXMub3B0aW9ucy5zdXBwcmVzc0VtcHR5Tm9kZSl7IC8vZW1wdHlcbiAgICBjbG9zZVRhZyA9IFwiL1wiO1xuICB9ZWxzZXtcbiAgICBjbG9zZVRhZyA9IGA+PC8ke2tleX1gXG4gIH1cbiAgcmV0dXJuIGNsb3NlVGFnO1xufVxuXG5mdW5jdGlvbiBidWlsZEVtcHR5T2JqTm9kZSh2YWwsIGtleSwgYXR0clN0ciwgbGV2ZWwpIHtcbiAgaWYgKHZhbCAhPT0gJycpIHtcbiAgICByZXR1cm4gdGhpcy5idWlsZE9iamVjdE5vZGUodmFsLCBrZXksIGF0dHJTdHIsIGxldmVsKTtcbiAgfSBlbHNlIHtcbiAgICBpZihrZXlbMF0gPT09IFwiP1wiKSByZXR1cm4gIHRoaXMuaW5kZW50YXRlKGxldmVsKSArICc8JyArIGtleSArIGF0dHJTdHIrICc/JyArIHRoaXMudGFnRW5kQ2hhcjtcbiAgICBlbHNlIHtcbiAgICAgIHJldHVybiAgdGhpcy5pbmRlbnRhdGUobGV2ZWwpICsgJzwnICsga2V5ICsgYXR0clN0ciArICcvJyArIHRoaXMudGFnRW5kQ2hhcjtcbiAgICAgIC8vIHJldHVybiB0aGlzLmJ1aWxkVGFnU3RyKGxldmVsLGtleSwgYXR0clN0cik7XG4gICAgfVxuICB9XG59XG5cbkJ1aWxkZXIucHJvdG90eXBlLmJ1aWxkVGV4dFZhbE5vZGUgPSBmdW5jdGlvbih2YWwsIGtleSwgYXR0clN0ciwgbGV2ZWwpIHtcbiAgaWYgKHRoaXMub3B0aW9ucy5jZGF0YVByb3BOYW1lICE9PSBmYWxzZSAmJiBrZXkgPT09IHRoaXMub3B0aW9ucy5jZGF0YVByb3BOYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuaW5kZW50YXRlKGxldmVsKSArIGA8IVtDREFUQVske3ZhbH1dXT5gICsgIHRoaXMubmV3TGluZTtcbiAgfWVsc2UgaWYgKHRoaXMub3B0aW9ucy5jb21tZW50UHJvcE5hbWUgIT09IGZhbHNlICYmIGtleSA9PT0gdGhpcy5vcHRpb25zLmNvbW1lbnRQcm9wTmFtZSkge1xuICAgIHJldHVybiB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyBgPCEtLSR7dmFsfS0tPmAgKyAgdGhpcy5uZXdMaW5lO1xuICB9ZWxzZSBpZihrZXlbMF0gPT09IFwiP1wiKSB7Ly9QSSB0YWdcbiAgICByZXR1cm4gIHRoaXMuaW5kZW50YXRlKGxldmVsKSArICc8JyArIGtleSArIGF0dHJTdHIrICc/JyArIHRoaXMudGFnRW5kQ2hhcjsgXG4gIH1lbHNle1xuICAgIGxldCB0ZXh0VmFsdWUgPSB0aGlzLm9wdGlvbnMudGFnVmFsdWVQcm9jZXNzb3Ioa2V5LCB2YWwpO1xuICAgIHRleHRWYWx1ZSA9IHRoaXMucmVwbGFjZUVudGl0aWVzVmFsdWUodGV4dFZhbHVlKTtcbiAgXG4gICAgaWYoIHRleHRWYWx1ZSA9PT0gJycpe1xuICAgICAgcmV0dXJuIHRoaXMuaW5kZW50YXRlKGxldmVsKSArICc8JyArIGtleSArIGF0dHJTdHIgKyB0aGlzLmNsb3NlVGFnKGtleSkgKyB0aGlzLnRhZ0VuZENoYXI7XG4gICAgfWVsc2V7XG4gICAgICByZXR1cm4gdGhpcy5pbmRlbnRhdGUobGV2ZWwpICsgJzwnICsga2V5ICsgYXR0clN0ciArICc+JyArXG4gICAgICAgICB0ZXh0VmFsdWUgK1xuICAgICAgICAnPC8nICsga2V5ICsgdGhpcy50YWdFbmRDaGFyO1xuICAgIH1cbiAgfVxufVxuXG5CdWlsZGVyLnByb3RvdHlwZS5yZXBsYWNlRW50aXRpZXNWYWx1ZSA9IGZ1bmN0aW9uKHRleHRWYWx1ZSl7XG4gIGlmKHRleHRWYWx1ZSAmJiB0ZXh0VmFsdWUubGVuZ3RoID4gMCAmJiB0aGlzLm9wdGlvbnMucHJvY2Vzc0VudGl0aWVzKXtcbiAgICBmb3IgKGxldCBpPTA7IGk8dGhpcy5vcHRpb25zLmVudGl0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBlbnRpdHkgPSB0aGlzLm9wdGlvbnMuZW50aXRpZXNbaV07XG4gICAgICB0ZXh0VmFsdWUgPSB0ZXh0VmFsdWUucmVwbGFjZShlbnRpdHkucmVnZXgsIGVudGl0eS52YWwpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdGV4dFZhbHVlO1xufVxuXG5mdW5jdGlvbiBpbmRlbnRhdGUobGV2ZWwpIHtcbiAgcmV0dXJuIHRoaXMub3B0aW9ucy5pbmRlbnRCeS5yZXBlYXQobGV2ZWwpO1xufVxuXG5mdW5jdGlvbiBpc0F0dHJpYnV0ZShuYW1lIC8qLCBvcHRpb25zKi8pIHtcbiAgaWYgKG5hbWUuc3RhcnRzV2l0aCh0aGlzLm9wdGlvbnMuYXR0cmlidXRlTmFtZVByZWZpeCkgJiYgbmFtZSAhPT0gdGhpcy5vcHRpb25zLnRleHROb2RlTmFtZSkge1xuICAgIHJldHVybiBuYW1lLnN1YnN0cih0aGlzLmF0dHJQcmVmaXhMZW4pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEJ1aWxkZXI7XG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxuY29uc3QgdmFsaWRhdG9yID0gcmVxdWlyZSgnLi92YWxpZGF0b3InKTtcbmNvbnN0IFhNTFBhcnNlciA9IHJlcXVpcmUoJy4veG1scGFyc2VyL1hNTFBhcnNlcicpO1xuY29uc3QgWE1MQnVpbGRlciA9IHJlcXVpcmUoJy4veG1sYnVpbGRlci9qc29uMnhtbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgWE1MUGFyc2VyOiBYTUxQYXJzZXIsXG4gIFhNTFZhbGlkYXRvcjogdmFsaWRhdG9yLFxuICBYTUxCdWlsZGVyOiBYTUxCdWlsZGVyXG59IiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5YTUxfQ0hBUktFWSA9IGV4cG9ydHMuWE1MX0FUVFJLRVkgPSB2b2lkIDA7XG4vKipcbiAqIERlZmF1bHQga2V5IHVzZWQgdG8gYWNjZXNzIHRoZSBYTUwgYXR0cmlidXRlcy5cbiAqL1xuZXhwb3J0cy5YTUxfQVRUUktFWSA9IFwiJFwiO1xuLyoqXG4gKiBEZWZhdWx0IGtleSB1c2VkIHRvIGFjY2VzcyB0aGUgWE1MIHZhbHVlIGNvbnRlbnQuXG4gKi9cbmV4cG9ydHMuWE1MX0NIQVJLRVkgPSBcIl9cIjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXhtbC5jb21tb24uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5zdHJpbmdpZnlYTUwgPSBzdHJpbmdpZnlYTUw7XG5leHBvcnRzLnBhcnNlWE1MID0gcGFyc2VYTUw7XG5jb25zdCBmYXN0X3htbF9wYXJzZXJfMSA9IHJlcXVpcmUoXCJmYXN0LXhtbC1wYXJzZXJcIik7XG5jb25zdCB4bWxfY29tbW9uX2pzXzEgPSByZXF1aXJlKFwiLi94bWwuY29tbW9uLmpzXCIpO1xuZnVuY3Rpb24gZ2V0Q29tbW9uT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiB7XG4gICAgICAgIGF0dHJpYnV0ZXNHcm91cE5hbWU6IHhtbF9jb21tb25fanNfMS5YTUxfQVRUUktFWSxcbiAgICAgICAgdGV4dE5vZGVOYW1lOiAoX2EgPSBvcHRpb25zLnhtbENoYXJLZXkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHhtbF9jb21tb25fanNfMS5YTUxfQ0hBUktFWSxcbiAgICAgICAgaWdub3JlQXR0cmlidXRlczogZmFsc2UsXG4gICAgICAgIHN1cHByZXNzQm9vbGVhbkF0dHJpYnV0ZXM6IGZhbHNlLFxuICAgIH07XG59XG5mdW5jdGlvbiBnZXRTZXJpYWxpemVyT3B0aW9ucyhvcHRpb25zID0ge30pIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGdldENvbW1vbk9wdGlvbnMob3B0aW9ucykpLCB7IGF0dHJpYnV0ZU5hbWVQcmVmaXg6IFwiQF9cIiwgZm9ybWF0OiB0cnVlLCBzdXBwcmVzc0VtcHR5Tm9kZTogdHJ1ZSwgaW5kZW50Qnk6IFwiXCIsIHJvb3ROb2RlTmFtZTogKF9hID0gb3B0aW9ucy5yb290TmFtZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogXCJyb290XCIsIGNkYXRhUHJvcE5hbWU6IChfYiA9IG9wdGlvbnMuY2RhdGFQcm9wTmFtZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogXCJfX2NkYXRhXCIgfSk7XG59XG5mdW5jdGlvbiBnZXRQYXJzZXJPcHRpb25zKG9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGdldENvbW1vbk9wdGlvbnMob3B0aW9ucykpLCB7IHBhcnNlQXR0cmlidXRlVmFsdWU6IGZhbHNlLCBwYXJzZVRhZ1ZhbHVlOiBmYWxzZSwgYXR0cmlidXRlTmFtZVByZWZpeDogXCJcIiwgc3RvcE5vZGVzOiBvcHRpb25zLnN0b3BOb2RlcywgcHJvY2Vzc0VudGl0aWVzOiB0cnVlIH0pO1xufVxuLyoqXG4gKiBDb252ZXJ0cyBnaXZlbiBKU09OIG9iamVjdCB0byBYTUwgc3RyaW5nXG4gKiBAcGFyYW0gb2JqIC0gSlNPTiBvYmplY3QgdG8gYmUgY29udmVydGVkIGludG8gWE1MIHN0cmluZ1xuICogQHBhcmFtIG9wdHMgLSBPcHRpb25zIHRoYXQgZ292ZXJuIHRoZSBYTUwgYnVpbGRpbmcgb2YgZ2l2ZW4gSlNPTiBvYmplY3RcbiAqIGByb290TmFtZWAgaW5kaWNhdGVzIHRoZSBuYW1lIG9mIHRoZSByb290IGVsZW1lbnQgaW4gdGhlIHJlc3VsdGluZyBYTUxcbiAqL1xuZnVuY3Rpb24gc3RyaW5naWZ5WE1MKG9iaiwgb3B0cyA9IHt9KSB7XG4gICAgY29uc3QgcGFyc2VyT3B0aW9ucyA9IGdldFNlcmlhbGl6ZXJPcHRpb25zKG9wdHMpO1xuICAgIGNvbnN0IGoyeCA9IG5ldyBmYXN0X3htbF9wYXJzZXJfMS5YTUxCdWlsZGVyKHBhcnNlck9wdGlvbnMpO1xuICAgIGNvbnN0IG5vZGUgPSB7IFtwYXJzZXJPcHRpb25zLnJvb3ROb2RlTmFtZV06IG9iaiB9O1xuICAgIGNvbnN0IHhtbERhdGEgPSBqMnguYnVpbGQobm9kZSk7XG4gICAgcmV0dXJuIGA8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJVVEYtOFwiIHN0YW5kYWxvbmU9XCJ5ZXNcIj8+JHt4bWxEYXRhfWAucmVwbGFjZSgvXFxuL2csIFwiXCIpO1xufVxuLyoqXG4gKiBDb252ZXJ0cyBnaXZlbiBYTUwgc3RyaW5nIGludG8gSlNPTlxuICogQHBhcmFtIHN0ciAtIFN0cmluZyBjb250YWluaW5nIHRoZSBYTUwgY29udGVudCB0byBiZSBwYXJzZWQgaW50byBKU09OXG4gKiBAcGFyYW0gb3B0cyAtIE9wdGlvbnMgdGhhdCBnb3Zlcm4gdGhlIHBhcnNpbmcgb2YgZ2l2ZW4geG1sIHN0cmluZ1xuICogYGluY2x1ZGVSb290YCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgcm9vdCBlbGVtZW50IGlzIHRvIGJlIGluY2x1ZGVkIG9yIG5vdCBpbiB0aGUgb3V0cHV0XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHBhcnNlWE1MKHN0ciwgb3B0cyA9IHt9KSB7XG4gICAgaWYgKCFzdHIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRG9jdW1lbnQgaXMgZW1wdHlcIik7XG4gICAgfVxuICAgIGNvbnN0IHZhbGlkYXRpb24gPSBmYXN0X3htbF9wYXJzZXJfMS5YTUxWYWxpZGF0b3IudmFsaWRhdGUoc3RyKTtcbiAgICBpZiAodmFsaWRhdGlvbiAhPT0gdHJ1ZSkge1xuICAgICAgICB0aHJvdyB2YWxpZGF0aW9uO1xuICAgIH1cbiAgICBjb25zdCBwYXJzZXIgPSBuZXcgZmFzdF94bWxfcGFyc2VyXzEuWE1MUGFyc2VyKGdldFBhcnNlck9wdGlvbnMob3B0cykpO1xuICAgIGNvbnN0IHBhcnNlZFhtbCA9IHBhcnNlci5wYXJzZShzdHIpO1xuICAgIC8vIFJlbW92ZSB0aGUgPD94bWwgdmVyc2lvbj1cIi4uLlwiID8+IG5vZGUuXG4gICAgLy8gVGhpcyBpcyBhIGNoYW5nZSBpbiBiZWhhdmlvciBvbiBmeHAgdjQuIElzc3VlICM0MjRcbiAgICBpZiAocGFyc2VkWG1sW1wiP3htbFwiXSkge1xuICAgICAgICBkZWxldGUgcGFyc2VkWG1sW1wiP3htbFwiXTtcbiAgICB9XG4gICAgaWYgKCFvcHRzLmluY2x1ZGVSb290KSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHBhcnNlZFhtbCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcGFyc2VkWG1sW2tleV07XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiID8gT2JqZWN0LmFzc2lnbih7fSwgdmFsdWUpIDogdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlZFhtbDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXhtbC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlhNTF9DSEFSS0VZID0gZXhwb3J0cy5YTUxfQVRUUktFWSA9IGV4cG9ydHMucGFyc2VYTUwgPSBleHBvcnRzLnN0cmluZ2lmeVhNTCA9IHZvaWQgMDtcbnZhciB4bWxfanNfMSA9IHJlcXVpcmUoXCIuL3htbC5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0cmluZ2lmeVhNTFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4geG1sX2pzXzEuc3RyaW5naWZ5WE1MOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicGFyc2VYTUxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHhtbF9qc18xLnBhcnNlWE1MOyB9IH0pO1xudmFyIHhtbF9jb21tb25fanNfMSA9IHJlcXVpcmUoXCIuL3htbC5jb21tb24uanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJYTUxfQVRUUktFWVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4geG1sX2NvbW1vbl9qc18xLlhNTF9BVFRSS0VZOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiWE1MX0NIQVJLRVlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHhtbF9jb21tb25fanNfMS5YTUxfQ0hBUktFWTsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubG9nZ2VyID0gdm9pZCAwO1xuY29uc3QgbG9nZ2VyXzEgPSByZXF1aXJlKFwiQGF6dXJlL2xvZ2dlclwiKTtcbi8qKlxuICogVGhlIGBAYXp1cmUvbG9nZ2VyYCBjb25maWd1cmF0aW9uIGZvciB0aGlzIHBhY2thZ2UuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0cy5sb2dnZXIgPSAoMCwgbG9nZ2VyXzEuY3JlYXRlQ2xpZW50TG9nZ2VyKShcImNvcmUtbHJvXCIpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bG9nZ2VyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudGVybWluYWxTdGF0ZXMgPSBleHBvcnRzLlBPTExfSU5URVJWQUxfSU5fTVMgPSB2b2lkIDA7XG4vKipcbiAqIFRoZSBkZWZhdWx0IHRpbWUgaW50ZXJ2YWwgdG8gd2FpdCBiZWZvcmUgc2VuZGluZyB0aGUgbmV4dCBwb2xsaW5nIHJlcXVlc3QuXG4gKi9cbmV4cG9ydHMuUE9MTF9JTlRFUlZBTF9JTl9NUyA9IDIwMDA7XG4vKipcbiAqIFRoZSBjbG9zZWQgc2V0IG9mIHRlcm1pbmFsIHN0YXRlcy5cbiAqL1xuZXhwb3J0cy50ZXJtaW5hbFN0YXRlcyA9IFtcInN1Y2NlZWRlZFwiLCBcImNhbmNlbGVkXCIsIFwiZmFpbGVkXCJdO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3RhbnRzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucG9sbE9wZXJhdGlvbiA9IGV4cG9ydHMuaW5pdE9wZXJhdGlvbiA9IGV4cG9ydHMuZGVzZXJpYWxpemVTdGF0ZSA9IHZvaWQgMDtcbmNvbnN0IGxvZ2dlcl9qc18xID0gcmVxdWlyZShcIi4uL2xvZ2dlci5qc1wiKTtcbmNvbnN0IGNvbnN0YW50c19qc18xID0gcmVxdWlyZShcIi4vY29uc3RhbnRzLmpzXCIpO1xuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgdGhlIHN0YXRlXG4gKi9cbmZ1bmN0aW9uIGRlc2VyaWFsaXplU3RhdGUoc2VyaWFsaXplZFN0YXRlKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2Uoc2VyaWFsaXplZFN0YXRlKS5zdGF0ZTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gZGVzZXJpYWxpemUgaW5wdXQgc3RhdGU6ICR7c2VyaWFsaXplZFN0YXRlfWApO1xuICAgIH1cbn1cbmV4cG9ydHMuZGVzZXJpYWxpemVTdGF0ZSA9IGRlc2VyaWFsaXplU3RhdGU7XG5mdW5jdGlvbiBzZXRTdGF0ZUVycm9yKGlucHV0cykge1xuICAgIGNvbnN0IHsgc3RhdGUsIHN0YXRlUHJveHksIGlzT3BlcmF0aW9uRXJyb3IgfSA9IGlucHV0cztcbiAgICByZXR1cm4gKGVycm9yKSA9PiB7XG4gICAgICAgIGlmIChpc09wZXJhdGlvbkVycm9yKGVycm9yKSkge1xuICAgICAgICAgICAgc3RhdGVQcm94eS5zZXRFcnJvcihzdGF0ZSwgZXJyb3IpO1xuICAgICAgICAgICAgc3RhdGVQcm94eS5zZXRGYWlsZWQoc3RhdGUpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgIH07XG59XG5mdW5jdGlvbiBhcHBlbmRSZWFkYWJsZUVycm9yTWVzc2FnZShjdXJyZW50TWVzc2FnZSwgaW5uZXJNZXNzYWdlKSB7XG4gICAgbGV0IG1lc3NhZ2UgPSBjdXJyZW50TWVzc2FnZTtcbiAgICBpZiAobWVzc2FnZS5zbGljZSgtMSkgIT09IFwiLlwiKSB7XG4gICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlICsgXCIuXCI7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlICsgXCIgXCIgKyBpbm5lck1lc3NhZ2U7XG59XG5mdW5jdGlvbiBzaW1wbGlmeUVycm9yKGVycikge1xuICAgIGxldCBtZXNzYWdlID0gZXJyLm1lc3NhZ2U7XG4gICAgbGV0IGNvZGUgPSBlcnIuY29kZTtcbiAgICBsZXQgY3VyRXJyID0gZXJyO1xuICAgIHdoaWxlIChjdXJFcnIuaW5uZXJlcnJvcikge1xuICAgICAgICBjdXJFcnIgPSBjdXJFcnIuaW5uZXJlcnJvcjtcbiAgICAgICAgY29kZSA9IGN1ckVyci5jb2RlO1xuICAgICAgICBtZXNzYWdlID0gYXBwZW5kUmVhZGFibGVFcnJvck1lc3NhZ2UobWVzc2FnZSwgY3VyRXJyLm1lc3NhZ2UpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBjb2RlLFxuICAgICAgICBtZXNzYWdlLFxuICAgIH07XG59XG5mdW5jdGlvbiBwcm9jZXNzT3BlcmF0aW9uU3RhdHVzKHJlc3VsdCkge1xuICAgIGNvbnN0IHsgc3RhdGUsIHN0YXRlUHJveHksIHN0YXR1cywgaXNEb25lLCBwcm9jZXNzUmVzdWx0LCBnZXRFcnJvciwgcmVzcG9uc2UsIHNldEVycm9yQXNSZXN1bHQgfSA9IHJlc3VsdDtcbiAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgICBjYXNlIFwic3VjY2VlZGVkXCI6IHtcbiAgICAgICAgICAgIHN0YXRlUHJveHkuc2V0U3VjY2VlZGVkKHN0YXRlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJmYWlsZWRcIjoge1xuICAgICAgICAgICAgY29uc3QgZXJyID0gZ2V0RXJyb3IgPT09IG51bGwgfHwgZ2V0RXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGdldEVycm9yKHJlc3BvbnNlKTtcbiAgICAgICAgICAgIGxldCBwb3N0Zml4ID0gXCJcIjtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGNvZGUsIG1lc3NhZ2UgfSA9IHNpbXBsaWZ5RXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICBwb3N0Zml4ID0gYC4gJHtjb2RlfS4gJHttZXNzYWdlfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBlcnJTdHIgPSBgVGhlIGxvbmctcnVubmluZyBvcGVyYXRpb24gaGFzIGZhaWxlZCR7cG9zdGZpeH1gO1xuICAgICAgICAgICAgc3RhdGVQcm94eS5zZXRFcnJvcihzdGF0ZSwgbmV3IEVycm9yKGVyclN0cikpO1xuICAgICAgICAgICAgc3RhdGVQcm94eS5zZXRGYWlsZWQoc3RhdGUpO1xuICAgICAgICAgICAgbG9nZ2VyX2pzXzEubG9nZ2VyLndhcm5pbmcoZXJyU3RyKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJjYW5jZWxlZFwiOiB7XG4gICAgICAgICAgICBzdGF0ZVByb3h5LnNldENhbmNlbGVkKHN0YXRlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICgoaXNEb25lID09PSBudWxsIHx8IGlzRG9uZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogaXNEb25lKHJlc3BvbnNlLCBzdGF0ZSkpIHx8XG4gICAgICAgIChpc0RvbmUgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgW1wic3VjY2VlZGVkXCIsIFwiY2FuY2VsZWRcIl0uY29uY2F0KHNldEVycm9yQXNSZXN1bHQgPyBbXSA6IFtcImZhaWxlZFwiXSkuaW5jbHVkZXMoc3RhdHVzKSkpIHtcbiAgICAgICAgc3RhdGVQcm94eS5zZXRSZXN1bHQoc3RhdGUsIGJ1aWxkUmVzdWx0KHtcbiAgICAgICAgICAgIHJlc3BvbnNlLFxuICAgICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgICBwcm9jZXNzUmVzdWx0LFxuICAgICAgICB9KSk7XG4gICAgfVxufVxuZnVuY3Rpb24gYnVpbGRSZXN1bHQoaW5wdXRzKSB7XG4gICAgY29uc3QgeyBwcm9jZXNzUmVzdWx0LCByZXNwb25zZSwgc3RhdGUgfSA9IGlucHV0cztcbiAgICByZXR1cm4gcHJvY2Vzc1Jlc3VsdCA/IHByb2Nlc3NSZXN1bHQocmVzcG9uc2UsIHN0YXRlKSA6IHJlc3BvbnNlO1xufVxuLyoqXG4gKiBJbml0aWF0ZXMgdGhlIGxvbmctcnVubmluZyBvcGVyYXRpb24uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGluaXRPcGVyYXRpb24oaW5wdXRzKSB7XG4gICAgY29uc3QgeyBpbml0LCBzdGF0ZVByb3h5LCBwcm9jZXNzUmVzdWx0LCBnZXRPcGVyYXRpb25TdGF0dXMsIHdpdGhPcGVyYXRpb25Mb2NhdGlvbiwgc2V0RXJyb3JBc1Jlc3VsdCwgfSA9IGlucHV0cztcbiAgICBjb25zdCB7IG9wZXJhdGlvbkxvY2F0aW9uLCByZXNvdXJjZUxvY2F0aW9uLCBtZXRhZGF0YSwgcmVzcG9uc2UgfSA9IGF3YWl0IGluaXQoKTtcbiAgICBpZiAob3BlcmF0aW9uTG9jYXRpb24pXG4gICAgICAgIHdpdGhPcGVyYXRpb25Mb2NhdGlvbiA9PT0gbnVsbCB8fCB3aXRoT3BlcmF0aW9uTG9jYXRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHdpdGhPcGVyYXRpb25Mb2NhdGlvbihvcGVyYXRpb25Mb2NhdGlvbiwgZmFsc2UpO1xuICAgIGNvbnN0IGNvbmZpZyA9IHtcbiAgICAgICAgbWV0YWRhdGEsXG4gICAgICAgIG9wZXJhdGlvbkxvY2F0aW9uLFxuICAgICAgICByZXNvdXJjZUxvY2F0aW9uLFxuICAgIH07XG4gICAgbG9nZ2VyX2pzXzEubG9nZ2VyLnZlcmJvc2UoYExSTzogT3BlcmF0aW9uIGRlc2NyaXB0aW9uOmAsIGNvbmZpZyk7XG4gICAgY29uc3Qgc3RhdGUgPSBzdGF0ZVByb3h5LmluaXRTdGF0ZShjb25maWcpO1xuICAgIGNvbnN0IHN0YXR1cyA9IGdldE9wZXJhdGlvblN0YXR1cyh7IHJlc3BvbnNlLCBzdGF0ZSwgb3BlcmF0aW9uTG9jYXRpb24gfSk7XG4gICAgcHJvY2Vzc09wZXJhdGlvblN0YXR1cyh7IHN0YXRlLCBzdGF0dXMsIHN0YXRlUHJveHksIHJlc3BvbnNlLCBzZXRFcnJvckFzUmVzdWx0LCBwcm9jZXNzUmVzdWx0IH0pO1xuICAgIHJldHVybiBzdGF0ZTtcbn1cbmV4cG9ydHMuaW5pdE9wZXJhdGlvbiA9IGluaXRPcGVyYXRpb247XG5hc3luYyBmdW5jdGlvbiBwb2xsT3BlcmF0aW9uSGVscGVyKGlucHV0cykge1xuICAgIGNvbnN0IHsgcG9sbCwgc3RhdGUsIHN0YXRlUHJveHksIG9wZXJhdGlvbkxvY2F0aW9uLCBnZXRPcGVyYXRpb25TdGF0dXMsIGdldFJlc291cmNlTG9jYXRpb24sIGlzT3BlcmF0aW9uRXJyb3IsIG9wdGlvbnMsIH0gPSBpbnB1dHM7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBwb2xsKG9wZXJhdGlvbkxvY2F0aW9uLCBvcHRpb25zKS5jYXRjaChzZXRTdGF0ZUVycm9yKHtcbiAgICAgICAgc3RhdGUsXG4gICAgICAgIHN0YXRlUHJveHksXG4gICAgICAgIGlzT3BlcmF0aW9uRXJyb3IsXG4gICAgfSkpO1xuICAgIGNvbnN0IHN0YXR1cyA9IGdldE9wZXJhdGlvblN0YXR1cyhyZXNwb25zZSwgc3RhdGUpO1xuICAgIGxvZ2dlcl9qc18xLmxvZ2dlci52ZXJib3NlKGBMUk86IFN0YXR1czpcXG5cXHRQb2xsaW5nIGZyb206ICR7c3RhdGUuY29uZmlnLm9wZXJhdGlvbkxvY2F0aW9ufVxcblxcdE9wZXJhdGlvbiBzdGF0dXM6ICR7c3RhdHVzfVxcblxcdFBvbGxpbmcgc3RhdHVzOiAke2NvbnN0YW50c19qc18xLnRlcm1pbmFsU3RhdGVzLmluY2x1ZGVzKHN0YXR1cykgPyBcIlN0b3BwZWRcIiA6IFwiUnVubmluZ1wifWApO1xuICAgIGlmIChzdGF0dXMgPT09IFwic3VjY2VlZGVkXCIpIHtcbiAgICAgICAgY29uc3QgcmVzb3VyY2VMb2NhdGlvbiA9IGdldFJlc291cmNlTG9jYXRpb24ocmVzcG9uc2UsIHN0YXRlKTtcbiAgICAgICAgaWYgKHJlc291cmNlTG9jYXRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZTogYXdhaXQgcG9sbChyZXNvdXJjZUxvY2F0aW9uKS5jYXRjaChzZXRTdGF0ZUVycm9yKHsgc3RhdGUsIHN0YXRlUHJveHksIGlzT3BlcmF0aW9uRXJyb3IgfSkpLFxuICAgICAgICAgICAgICAgIHN0YXR1cyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHsgcmVzcG9uc2UsIHN0YXR1cyB9O1xufVxuLyoqIFBvbGxzIHRoZSBsb25nLXJ1bm5pbmcgb3BlcmF0aW9uLiAqL1xuYXN5bmMgZnVuY3Rpb24gcG9sbE9wZXJhdGlvbihpbnB1dHMpIHtcbiAgICBjb25zdCB7IHBvbGwsIHN0YXRlLCBzdGF0ZVByb3h5LCBvcHRpb25zLCBnZXRPcGVyYXRpb25TdGF0dXMsIGdldFJlc291cmNlTG9jYXRpb24sIGdldE9wZXJhdGlvbkxvY2F0aW9uLCBpc09wZXJhdGlvbkVycm9yLCB3aXRoT3BlcmF0aW9uTG9jYXRpb24sIGdldFBvbGxpbmdJbnRlcnZhbCwgcHJvY2Vzc1Jlc3VsdCwgZ2V0RXJyb3IsIHVwZGF0ZVN0YXRlLCBzZXREZWxheSwgaXNEb25lLCBzZXRFcnJvckFzUmVzdWx0LCB9ID0gaW5wdXRzO1xuICAgIGNvbnN0IHsgb3BlcmF0aW9uTG9jYXRpb24gfSA9IHN0YXRlLmNvbmZpZztcbiAgICBpZiAob3BlcmF0aW9uTG9jYXRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCB7IHJlc3BvbnNlLCBzdGF0dXMgfSA9IGF3YWl0IHBvbGxPcGVyYXRpb25IZWxwZXIoe1xuICAgICAgICAgICAgcG9sbCxcbiAgICAgICAgICAgIGdldE9wZXJhdGlvblN0YXR1cyxcbiAgICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgICAgc3RhdGVQcm94eSxcbiAgICAgICAgICAgIG9wZXJhdGlvbkxvY2F0aW9uLFxuICAgICAgICAgICAgZ2V0UmVzb3VyY2VMb2NhdGlvbixcbiAgICAgICAgICAgIGlzT3BlcmF0aW9uRXJyb3IsXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICB9KTtcbiAgICAgICAgcHJvY2Vzc09wZXJhdGlvblN0YXR1cyh7XG4gICAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgICByZXNwb25zZSxcbiAgICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgICAgc3RhdGVQcm94eSxcbiAgICAgICAgICAgIGlzRG9uZSxcbiAgICAgICAgICAgIHByb2Nlc3NSZXN1bHQsXG4gICAgICAgICAgICBnZXRFcnJvcixcbiAgICAgICAgICAgIHNldEVycm9yQXNSZXN1bHQsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIWNvbnN0YW50c19qc18xLnRlcm1pbmFsU3RhdGVzLmluY2x1ZGVzKHN0YXR1cykpIHtcbiAgICAgICAgICAgIGNvbnN0IGludGVydmFsSW5NcyA9IGdldFBvbGxpbmdJbnRlcnZhbCA9PT0gbnVsbCB8fCBnZXRQb2xsaW5nSW50ZXJ2YWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGdldFBvbGxpbmdJbnRlcnZhbChyZXNwb25zZSk7XG4gICAgICAgICAgICBpZiAoaW50ZXJ2YWxJbk1zKVxuICAgICAgICAgICAgICAgIHNldERlbGF5KGludGVydmFsSW5Ncyk7XG4gICAgICAgICAgICBjb25zdCBsb2NhdGlvbiA9IGdldE9wZXJhdGlvbkxvY2F0aW9uID09PSBudWxsIHx8IGdldE9wZXJhdGlvbkxvY2F0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiBnZXRPcGVyYXRpb25Mb2NhdGlvbihyZXNwb25zZSwgc3RhdGUpO1xuICAgICAgICAgICAgaWYgKGxvY2F0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc1VwZGF0ZWQgPSBvcGVyYXRpb25Mb2NhdGlvbiAhPT0gbG9jYXRpb247XG4gICAgICAgICAgICAgICAgc3RhdGUuY29uZmlnLm9wZXJhdGlvbkxvY2F0aW9uID0gbG9jYXRpb247XG4gICAgICAgICAgICAgICAgd2l0aE9wZXJhdGlvbkxvY2F0aW9uID09PSBudWxsIHx8IHdpdGhPcGVyYXRpb25Mb2NhdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogd2l0aE9wZXJhdGlvbkxvY2F0aW9uKGxvY2F0aW9uLCBpc1VwZGF0ZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHdpdGhPcGVyYXRpb25Mb2NhdGlvbiA9PT0gbnVsbCB8fCB3aXRoT3BlcmF0aW9uTG9jYXRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHdpdGhPcGVyYXRpb25Mb2NhdGlvbihvcGVyYXRpb25Mb2NhdGlvbiwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZVN0YXRlID09PSBudWxsIHx8IHVwZGF0ZVN0YXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiB1cGRhdGVTdGF0ZShzdGF0ZSwgcmVzcG9uc2UpO1xuICAgIH1cbn1cbmV4cG9ydHMucG9sbE9wZXJhdGlvbiA9IHBvbGxPcGVyYXRpb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1vcGVyYXRpb24uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5wb2xsSHR0cE9wZXJhdGlvbiA9IGV4cG9ydHMuaXNPcGVyYXRpb25FcnJvciA9IGV4cG9ydHMuZ2V0UmVzb3VyY2VMb2NhdGlvbiA9IGV4cG9ydHMuZ2V0T3BlcmF0aW9uU3RhdHVzID0gZXhwb3J0cy5nZXRPcGVyYXRpb25Mb2NhdGlvbiA9IGV4cG9ydHMuaW5pdEh0dHBPcGVyYXRpb24gPSBleHBvcnRzLmdldFN0YXR1c0Zyb21Jbml0aWFsUmVzcG9uc2UgPSBleHBvcnRzLmdldEVycm9yRnJvbVJlc3BvbnNlID0gZXhwb3J0cy5wYXJzZVJldHJ5QWZ0ZXIgPSBleHBvcnRzLmluZmVyTHJvTW9kZSA9IHZvaWQgMDtcbmNvbnN0IG9wZXJhdGlvbl9qc18xID0gcmVxdWlyZShcIi4uL3BvbGxlci9vcGVyYXRpb24uanNcIik7XG5jb25zdCBsb2dnZXJfanNfMSA9IHJlcXVpcmUoXCIuLi9sb2dnZXIuanNcIik7XG5mdW5jdGlvbiBnZXRPcGVyYXRpb25Mb2NhdGlvblBvbGxpbmdVcmwoaW5wdXRzKSB7XG4gICAgY29uc3QgeyBhenVyZUFzeW5jT3BlcmF0aW9uLCBvcGVyYXRpb25Mb2NhdGlvbiB9ID0gaW5wdXRzO1xuICAgIHJldHVybiBvcGVyYXRpb25Mb2NhdGlvbiAhPT0gbnVsbCAmJiBvcGVyYXRpb25Mb2NhdGlvbiAhPT0gdm9pZCAwID8gb3BlcmF0aW9uTG9jYXRpb24gOiBhenVyZUFzeW5jT3BlcmF0aW9uO1xufVxuZnVuY3Rpb24gZ2V0TG9jYXRpb25IZWFkZXIocmF3UmVzcG9uc2UpIHtcbiAgICByZXR1cm4gcmF3UmVzcG9uc2UuaGVhZGVyc1tcImxvY2F0aW9uXCJdO1xufVxuZnVuY3Rpb24gZ2V0T3BlcmF0aW9uTG9jYXRpb25IZWFkZXIocmF3UmVzcG9uc2UpIHtcbiAgICByZXR1cm4gcmF3UmVzcG9uc2UuaGVhZGVyc1tcIm9wZXJhdGlvbi1sb2NhdGlvblwiXTtcbn1cbmZ1bmN0aW9uIGdldEF6dXJlQXN5bmNPcGVyYXRpb25IZWFkZXIocmF3UmVzcG9uc2UpIHtcbiAgICByZXR1cm4gcmF3UmVzcG9uc2UuaGVhZGVyc1tcImF6dXJlLWFzeW5jb3BlcmF0aW9uXCJdO1xufVxuZnVuY3Rpb24gZmluZFJlc291cmNlTG9jYXRpb24oaW5wdXRzKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IHsgbG9jYXRpb24sIHJlcXVlc3RNZXRob2QsIHJlcXVlc3RQYXRoLCByZXNvdXJjZUxvY2F0aW9uQ29uZmlnIH0gPSBpbnB1dHM7XG4gICAgc3dpdGNoIChyZXF1ZXN0TWV0aG9kKSB7XG4gICAgICAgIGNhc2UgXCJQVVRcIjoge1xuICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3RQYXRoO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJERUxFVEVcIjoge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwiUEFUQ0hcIjoge1xuICAgICAgICAgICAgcmV0dXJuIChfYSA9IGdldERlZmF1bHQoKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogcmVxdWVzdFBhdGg7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgcmV0dXJuIGdldERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBnZXREZWZhdWx0KCkge1xuICAgICAgICBzd2l0Y2ggKHJlc291cmNlTG9jYXRpb25Db25maWcpIHtcbiAgICAgICAgICAgIGNhc2UgXCJhenVyZS1hc3luYy1vcGVyYXRpb25cIjoge1xuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwib3JpZ2luYWwtdXJpXCI6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVxdWVzdFBhdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwibG9jYXRpb25cIjpcbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbG9jYXRpb247XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBpbmZlckxyb01vZGUoaW5wdXRzKSB7XG4gICAgY29uc3QgeyByYXdSZXNwb25zZSwgcmVxdWVzdE1ldGhvZCwgcmVxdWVzdFBhdGgsIHJlc291cmNlTG9jYXRpb25Db25maWcgfSA9IGlucHV0cztcbiAgICBjb25zdCBvcGVyYXRpb25Mb2NhdGlvbiA9IGdldE9wZXJhdGlvbkxvY2F0aW9uSGVhZGVyKHJhd1Jlc3BvbnNlKTtcbiAgICBjb25zdCBhenVyZUFzeW5jT3BlcmF0aW9uID0gZ2V0QXp1cmVBc3luY09wZXJhdGlvbkhlYWRlcihyYXdSZXNwb25zZSk7XG4gICAgY29uc3QgcG9sbGluZ1VybCA9IGdldE9wZXJhdGlvbkxvY2F0aW9uUG9sbGluZ1VybCh7IG9wZXJhdGlvbkxvY2F0aW9uLCBhenVyZUFzeW5jT3BlcmF0aW9uIH0pO1xuICAgIGNvbnN0IGxvY2F0aW9uID0gZ2V0TG9jYXRpb25IZWFkZXIocmF3UmVzcG9uc2UpO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRSZXF1ZXN0TWV0aG9kID0gcmVxdWVzdE1ldGhvZCA9PT0gbnVsbCB8fCByZXF1ZXN0TWV0aG9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZXF1ZXN0TWV0aG9kLnRvTG9jYWxlVXBwZXJDYXNlKCk7XG4gICAgaWYgKHBvbGxpbmdVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbW9kZTogXCJPcGVyYXRpb25Mb2NhdGlvblwiLFxuICAgICAgICAgICAgb3BlcmF0aW9uTG9jYXRpb246IHBvbGxpbmdVcmwsXG4gICAgICAgICAgICByZXNvdXJjZUxvY2F0aW9uOiBmaW5kUmVzb3VyY2VMb2NhdGlvbih7XG4gICAgICAgICAgICAgICAgcmVxdWVzdE1ldGhvZDogbm9ybWFsaXplZFJlcXVlc3RNZXRob2QsXG4gICAgICAgICAgICAgICAgbG9jYXRpb24sXG4gICAgICAgICAgICAgICAgcmVxdWVzdFBhdGgsXG4gICAgICAgICAgICAgICAgcmVzb3VyY2VMb2NhdGlvbkNvbmZpZyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBlbHNlIGlmIChsb2NhdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBtb2RlOiBcIlJlc291cmNlTG9jYXRpb25cIixcbiAgICAgICAgICAgIG9wZXJhdGlvbkxvY2F0aW9uOiBsb2NhdGlvbixcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZWxzZSBpZiAobm9ybWFsaXplZFJlcXVlc3RNZXRob2QgPT09IFwiUFVUXCIgJiYgcmVxdWVzdFBhdGgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1vZGU6IFwiQm9keVwiLFxuICAgICAgICAgICAgb3BlcmF0aW9uTG9jYXRpb246IHJlcXVlc3RQYXRoLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59XG5leHBvcnRzLmluZmVyTHJvTW9kZSA9IGluZmVyTHJvTW9kZTtcbmZ1bmN0aW9uIHRyYW5zZm9ybVN0YXR1cyhpbnB1dHMpIHtcbiAgICBjb25zdCB7IHN0YXR1cywgc3RhdHVzQ29kZSB9ID0gaW5wdXRzO1xuICAgIGlmICh0eXBlb2Ygc3RhdHVzICE9PSBcInN0cmluZ1wiICYmIHN0YXR1cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgUG9sbGluZyB3YXMgdW5zdWNjZXNzZnVsLiBFeHBlY3RlZCBzdGF0dXMgdG8gaGF2ZSBhIHN0cmluZyB2YWx1ZSBvciBubyB2YWx1ZSBidXQgaXQgaGFzIGluc3RlYWQ6ICR7c3RhdHVzfS4gVGhpcyBkb2Vzbid0IG5lY2Vzc2FyaWx5IGluZGljYXRlIHRoZSBvcGVyYXRpb24gaGFzIGZhaWxlZC4gQ2hlY2sgeW91ciBBenVyZSBzdWJzY3JpcHRpb24gb3IgcmVzb3VyY2Ugc3RhdHVzIGZvciBtb3JlIGluZm9ybWF0aW9uLmApO1xuICAgIH1cbiAgICBzd2l0Y2ggKHN0YXR1cyA9PT0gbnVsbCB8fCBzdGF0dXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHN0YXR1cy50b0xvY2FsZUxvd2VyQ2FzZSgpKSB7XG4gICAgICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgICAgICAgcmV0dXJuIHRvT3BlcmF0aW9uU3RhdHVzKHN0YXR1c0NvZGUpO1xuICAgICAgICBjYXNlIFwic3VjY2VlZGVkXCI6XG4gICAgICAgICAgICByZXR1cm4gXCJzdWNjZWVkZWRcIjtcbiAgICAgICAgY2FzZSBcImZhaWxlZFwiOlxuICAgICAgICAgICAgcmV0dXJuIFwiZmFpbGVkXCI7XG4gICAgICAgIGNhc2UgXCJydW5uaW5nXCI6XG4gICAgICAgIGNhc2UgXCJhY2NlcHRlZFwiOlxuICAgICAgICBjYXNlIFwic3RhcnRlZFwiOlxuICAgICAgICBjYXNlIFwiY2FuY2VsaW5nXCI6XG4gICAgICAgIGNhc2UgXCJjYW5jZWxsaW5nXCI6XG4gICAgICAgICAgICByZXR1cm4gXCJydW5uaW5nXCI7XG4gICAgICAgIGNhc2UgXCJjYW5jZWxlZFwiOlxuICAgICAgICBjYXNlIFwiY2FuY2VsbGVkXCI6XG4gICAgICAgICAgICByZXR1cm4gXCJjYW5jZWxlZFwiO1xuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBsb2dnZXJfanNfMS5sb2dnZXIudmVyYm9zZShgTFJPOiB1bnJlY29nbml6ZWQgb3BlcmF0aW9uIHN0YXR1czogJHtzdGF0dXN9YCk7XG4gICAgICAgICAgICByZXR1cm4gc3RhdHVzO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0U3RhdHVzKHJhd1Jlc3BvbnNlKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IHsgc3RhdHVzIH0gPSAoX2EgPSByYXdSZXNwb25zZS5ib2R5KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB7fTtcbiAgICByZXR1cm4gdHJhbnNmb3JtU3RhdHVzKHsgc3RhdHVzLCBzdGF0dXNDb2RlOiByYXdSZXNwb25zZS5zdGF0dXNDb2RlIH0pO1xufVxuZnVuY3Rpb24gZ2V0UHJvdmlzaW9uaW5nU3RhdGUocmF3UmVzcG9uc2UpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGNvbnN0IHsgcHJvcGVydGllcywgcHJvdmlzaW9uaW5nU3RhdGUgfSA9IChfYSA9IHJhd1Jlc3BvbnNlLmJvZHkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHt9O1xuICAgIGNvbnN0IHN0YXR1cyA9IChfYiA9IHByb3BlcnRpZXMgPT09IG51bGwgfHwgcHJvcGVydGllcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcHJvcGVydGllcy5wcm92aXNpb25pbmdTdGF0ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogcHJvdmlzaW9uaW5nU3RhdGU7XG4gICAgcmV0dXJuIHRyYW5zZm9ybVN0YXR1cyh7IHN0YXR1cywgc3RhdHVzQ29kZTogcmF3UmVzcG9uc2Uuc3RhdHVzQ29kZSB9KTtcbn1cbmZ1bmN0aW9uIHRvT3BlcmF0aW9uU3RhdHVzKHN0YXR1c0NvZGUpIHtcbiAgICBpZiAoc3RhdHVzQ29kZSA9PT0gMjAyKSB7XG4gICAgICAgIHJldHVybiBcInJ1bm5pbmdcIjtcbiAgICB9XG4gICAgZWxzZSBpZiAoc3RhdHVzQ29kZSA8IDMwMCkge1xuICAgICAgICByZXR1cm4gXCJzdWNjZWVkZWRcIjtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBcImZhaWxlZFwiO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHBhcnNlUmV0cnlBZnRlcih7IHJhd1Jlc3BvbnNlIH0pIHtcbiAgICBjb25zdCByZXRyeUFmdGVyID0gcmF3UmVzcG9uc2UuaGVhZGVyc1tcInJldHJ5LWFmdGVyXCJdO1xuICAgIGlmIChyZXRyeUFmdGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gUmV0cnktQWZ0ZXIgaGVhZGVyIHZhbHVlIGlzIGVpdGhlciBpbiBIVFRQIGRhdGUgZm9ybWF0LCBvciBpbiBzZWNvbmRzXG4gICAgICAgIGNvbnN0IHJldHJ5QWZ0ZXJJblNlY29uZHMgPSBwYXJzZUludChyZXRyeUFmdGVyKTtcbiAgICAgICAgcmV0dXJuIGlzTmFOKHJldHJ5QWZ0ZXJJblNlY29uZHMpXG4gICAgICAgICAgICA/IGNhbGN1bGF0ZVBvbGxpbmdJbnRlcnZhbEZyb21EYXRlKG5ldyBEYXRlKHJldHJ5QWZ0ZXIpKVxuICAgICAgICAgICAgOiByZXRyeUFmdGVySW5TZWNvbmRzICogMTAwMDtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmV4cG9ydHMucGFyc2VSZXRyeUFmdGVyID0gcGFyc2VSZXRyeUFmdGVyO1xuZnVuY3Rpb24gZ2V0RXJyb3JGcm9tUmVzcG9uc2UocmVzcG9uc2UpIHtcbiAgICBjb25zdCBlcnJvciA9IGFjY2Vzc0JvZHlQcm9wZXJ0eShyZXNwb25zZSwgXCJlcnJvclwiKTtcbiAgICBpZiAoIWVycm9yKSB7XG4gICAgICAgIGxvZ2dlcl9qc18xLmxvZ2dlci53YXJuaW5nKGBUaGUgbG9uZy1ydW5uaW5nIG9wZXJhdGlvbiBmYWlsZWQgYnV0IHRoZXJlIGlzIG5vIGVycm9yIHByb3BlcnR5IGluIHRoZSByZXNwb25zZSdzIGJvZHlgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWVycm9yLmNvZGUgfHwgIWVycm9yLm1lc3NhZ2UpIHtcbiAgICAgICAgbG9nZ2VyX2pzXzEubG9nZ2VyLndhcm5pbmcoYFRoZSBsb25nLXJ1bm5pbmcgb3BlcmF0aW9uIGZhaWxlZCBidXQgdGhlIGVycm9yIHByb3BlcnR5IGluIHRoZSByZXNwb25zZSdzIGJvZHkgZG9lc24ndCBjb250YWluIGNvZGUgb3IgbWVzc2FnZWApO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHJldHVybiBlcnJvcjtcbn1cbmV4cG9ydHMuZ2V0RXJyb3JGcm9tUmVzcG9uc2UgPSBnZXRFcnJvckZyb21SZXNwb25zZTtcbmZ1bmN0aW9uIGNhbGN1bGF0ZVBvbGxpbmdJbnRlcnZhbEZyb21EYXRlKHJldHJ5QWZ0ZXJEYXRlKSB7XG4gICAgY29uc3QgdGltZU5vdyA9IE1hdGguZmxvb3IobmV3IERhdGUoKS5nZXRUaW1lKCkpO1xuICAgIGNvbnN0IHJldHJ5QWZ0ZXJUaW1lID0gcmV0cnlBZnRlckRhdGUuZ2V0VGltZSgpO1xuICAgIGlmICh0aW1lTm93IDwgcmV0cnlBZnRlclRpbWUpIHtcbiAgICAgICAgcmV0dXJuIHJldHJ5QWZ0ZXJUaW1lIC0gdGltZU5vdztcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGdldFN0YXR1c0Zyb21Jbml0aWFsUmVzcG9uc2UoaW5wdXRzKSB7XG4gICAgY29uc3QgeyByZXNwb25zZSwgc3RhdGUsIG9wZXJhdGlvbkxvY2F0aW9uIH0gPSBpbnB1dHM7XG4gICAgZnVuY3Rpb24gaGVscGVyKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IG1vZGUgPSAoX2EgPSBzdGF0ZS5jb25maWcubWV0YWRhdGEpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVtcIm1vZGVcIl07XG4gICAgICAgIHN3aXRjaCAobW9kZSkge1xuICAgICAgICAgICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRvT3BlcmF0aW9uU3RhdHVzKHJlc3BvbnNlLnJhd1Jlc3BvbnNlLnN0YXR1c0NvZGUpO1xuICAgICAgICAgICAgY2FzZSBcIkJvZHlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0T3BlcmF0aW9uU3RhdHVzKHJlc3BvbnNlLCBzdGF0ZSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBcInJ1bm5pbmdcIjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBzdGF0dXMgPSBoZWxwZXIoKTtcbiAgICByZXR1cm4gc3RhdHVzID09PSBcInJ1bm5pbmdcIiAmJiBvcGVyYXRpb25Mb2NhdGlvbiA9PT0gdW5kZWZpbmVkID8gXCJzdWNjZWVkZWRcIiA6IHN0YXR1cztcbn1cbmV4cG9ydHMuZ2V0U3RhdHVzRnJvbUluaXRpYWxSZXNwb25zZSA9IGdldFN0YXR1c0Zyb21Jbml0aWFsUmVzcG9uc2U7XG4vKipcbiAqIEluaXRpYXRlcyB0aGUgbG9uZy1ydW5uaW5nIG9wZXJhdGlvbi5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gaW5pdEh0dHBPcGVyYXRpb24oaW5wdXRzKSB7XG4gICAgY29uc3QgeyBzdGF0ZVByb3h5LCByZXNvdXJjZUxvY2F0aW9uQ29uZmlnLCBwcm9jZXNzUmVzdWx0LCBscm8sIHNldEVycm9yQXNSZXN1bHQgfSA9IGlucHV0cztcbiAgICByZXR1cm4gKDAsIG9wZXJhdGlvbl9qc18xLmluaXRPcGVyYXRpb24pKHtcbiAgICAgICAgaW5pdDogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBscm8uc2VuZEluaXRpYWxSZXF1ZXN0KCk7XG4gICAgICAgICAgICBjb25zdCBjb25maWcgPSBpbmZlckxyb01vZGUoe1xuICAgICAgICAgICAgICAgIHJhd1Jlc3BvbnNlOiByZXNwb25zZS5yYXdSZXNwb25zZSxcbiAgICAgICAgICAgICAgICByZXF1ZXN0UGF0aDogbHJvLnJlcXVlc3RQYXRoLFxuICAgICAgICAgICAgICAgIHJlcXVlc3RNZXRob2Q6IGxyby5yZXF1ZXN0TWV0aG9kLFxuICAgICAgICAgICAgICAgIHJlc291cmNlTG9jYXRpb25Db25maWcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHsgcmVzcG9uc2UsIG9wZXJhdGlvbkxvY2F0aW9uOiBjb25maWcgPT09IG51bGwgfHwgY29uZmlnID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb25maWcub3BlcmF0aW9uTG9jYXRpb24sIHJlc291cmNlTG9jYXRpb246IGNvbmZpZyA9PT0gbnVsbCB8fCBjb25maWcgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbmZpZy5yZXNvdXJjZUxvY2F0aW9uIH0sICgoY29uZmlnID09PSBudWxsIHx8IGNvbmZpZyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29uZmlnLm1vZGUpID8geyBtZXRhZGF0YTogeyBtb2RlOiBjb25maWcubW9kZSB9IH0gOiB7fSkpO1xuICAgICAgICB9LFxuICAgICAgICBzdGF0ZVByb3h5LFxuICAgICAgICBwcm9jZXNzUmVzdWx0OiBwcm9jZXNzUmVzdWx0XG4gICAgICAgICAgICA/ICh7IGZsYXRSZXNwb25zZSB9LCBzdGF0ZSkgPT4gcHJvY2Vzc1Jlc3VsdChmbGF0UmVzcG9uc2UsIHN0YXRlKVxuICAgICAgICAgICAgOiAoeyBmbGF0UmVzcG9uc2UgfSkgPT4gZmxhdFJlc3BvbnNlLFxuICAgICAgICBnZXRPcGVyYXRpb25TdGF0dXM6IGdldFN0YXR1c0Zyb21Jbml0aWFsUmVzcG9uc2UsXG4gICAgICAgIHNldEVycm9yQXNSZXN1bHQsXG4gICAgfSk7XG59XG5leHBvcnRzLmluaXRIdHRwT3BlcmF0aW9uID0gaW5pdEh0dHBPcGVyYXRpb247XG5mdW5jdGlvbiBnZXRPcGVyYXRpb25Mb2NhdGlvbih7IHJhd1Jlc3BvbnNlIH0sIHN0YXRlKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IG1vZGUgPSAoX2EgPSBzdGF0ZS5jb25maWcubWV0YWRhdGEpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVtcIm1vZGVcIl07XG4gICAgc3dpdGNoIChtb2RlKSB7XG4gICAgICAgIGNhc2UgXCJPcGVyYXRpb25Mb2NhdGlvblwiOiB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0T3BlcmF0aW9uTG9jYXRpb25Qb2xsaW5nVXJsKHtcbiAgICAgICAgICAgICAgICBvcGVyYXRpb25Mb2NhdGlvbjogZ2V0T3BlcmF0aW9uTG9jYXRpb25IZWFkZXIocmF3UmVzcG9uc2UpLFxuICAgICAgICAgICAgICAgIGF6dXJlQXN5bmNPcGVyYXRpb246IGdldEF6dXJlQXN5bmNPcGVyYXRpb25IZWFkZXIocmF3UmVzcG9uc2UpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcIlJlc291cmNlTG9jYXRpb25cIjoge1xuICAgICAgICAgICAgcmV0dXJuIGdldExvY2F0aW9uSGVhZGVyKHJhd1Jlc3BvbnNlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwiQm9keVwiOlxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5nZXRPcGVyYXRpb25Mb2NhdGlvbiA9IGdldE9wZXJhdGlvbkxvY2F0aW9uO1xuZnVuY3Rpb24gZ2V0T3BlcmF0aW9uU3RhdHVzKHsgcmF3UmVzcG9uc2UgfSwgc3RhdGUpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3QgbW9kZSA9IChfYSA9IHN0YXRlLmNvbmZpZy5tZXRhZGF0YSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hW1wibW9kZVwiXTtcbiAgICBzd2l0Y2ggKG1vZGUpIHtcbiAgICAgICAgY2FzZSBcIk9wZXJhdGlvbkxvY2F0aW9uXCI6IHtcbiAgICAgICAgICAgIHJldHVybiBnZXRTdGF0dXMocmF3UmVzcG9uc2UpO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJSZXNvdXJjZUxvY2F0aW9uXCI6IHtcbiAgICAgICAgICAgIHJldHVybiB0b09wZXJhdGlvblN0YXR1cyhyYXdSZXNwb25zZS5zdGF0dXNDb2RlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwiQm9keVwiOiB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0UHJvdmlzaW9uaW5nU3RhdGUocmF3UmVzcG9uc2UpO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludGVybmFsIGVycm9yOiBVbmV4cGVjdGVkIG9wZXJhdGlvbiBtb2RlOiAke21vZGV9YCk7XG4gICAgfVxufVxuZXhwb3J0cy5nZXRPcGVyYXRpb25TdGF0dXMgPSBnZXRPcGVyYXRpb25TdGF0dXM7XG5mdW5jdGlvbiBhY2Nlc3NCb2R5UHJvcGVydHkoeyBmbGF0UmVzcG9uc2UsIHJhd1Jlc3BvbnNlIH0sIHByb3ApIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIHJldHVybiAoX2EgPSBmbGF0UmVzcG9uc2UgPT09IG51bGwgfHwgZmxhdFJlc3BvbnNlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBmbGF0UmVzcG9uc2VbcHJvcF0pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IChfYiA9IHJhd1Jlc3BvbnNlLmJvZHkpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYltwcm9wXTtcbn1cbmZ1bmN0aW9uIGdldFJlc291cmNlTG9jYXRpb24ocmVzLCBzdGF0ZSkge1xuICAgIGNvbnN0IGxvYyA9IGFjY2Vzc0JvZHlQcm9wZXJ0eShyZXMsIFwicmVzb3VyY2VMb2NhdGlvblwiKTtcbiAgICBpZiAobG9jICYmIHR5cGVvZiBsb2MgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgc3RhdGUuY29uZmlnLnJlc291cmNlTG9jYXRpb24gPSBsb2M7XG4gICAgfVxuICAgIHJldHVybiBzdGF0ZS5jb25maWcucmVzb3VyY2VMb2NhdGlvbjtcbn1cbmV4cG9ydHMuZ2V0UmVzb3VyY2VMb2NhdGlvbiA9IGdldFJlc291cmNlTG9jYXRpb247XG5mdW5jdGlvbiBpc09wZXJhdGlvbkVycm9yKGUpIHtcbiAgICByZXR1cm4gZS5uYW1lID09PSBcIlJlc3RFcnJvclwiO1xufVxuZXhwb3J0cy5pc09wZXJhdGlvbkVycm9yID0gaXNPcGVyYXRpb25FcnJvcjtcbi8qKiBQb2xscyB0aGUgbG9uZy1ydW5uaW5nIG9wZXJhdGlvbi4gKi9cbmFzeW5jIGZ1bmN0aW9uIHBvbGxIdHRwT3BlcmF0aW9uKGlucHV0cykge1xuICAgIGNvbnN0IHsgbHJvLCBzdGF0ZVByb3h5LCBvcHRpb25zLCBwcm9jZXNzUmVzdWx0LCB1cGRhdGVTdGF0ZSwgc2V0RGVsYXksIHN0YXRlLCBzZXRFcnJvckFzUmVzdWx0LCB9ID0gaW5wdXRzO1xuICAgIHJldHVybiAoMCwgb3BlcmF0aW9uX2pzXzEucG9sbE9wZXJhdGlvbikoe1xuICAgICAgICBzdGF0ZSxcbiAgICAgICAgc3RhdGVQcm94eSxcbiAgICAgICAgc2V0RGVsYXksXG4gICAgICAgIHByb2Nlc3NSZXN1bHQ6IHByb2Nlc3NSZXN1bHRcbiAgICAgICAgICAgID8gKHsgZmxhdFJlc3BvbnNlIH0sIGlucHV0U3RhdGUpID0+IHByb2Nlc3NSZXN1bHQoZmxhdFJlc3BvbnNlLCBpbnB1dFN0YXRlKVxuICAgICAgICAgICAgOiAoeyBmbGF0UmVzcG9uc2UgfSkgPT4gZmxhdFJlc3BvbnNlLFxuICAgICAgICBnZXRFcnJvcjogZ2V0RXJyb3JGcm9tUmVzcG9uc2UsXG4gICAgICAgIHVwZGF0ZVN0YXRlLFxuICAgICAgICBnZXRQb2xsaW5nSW50ZXJ2YWw6IHBhcnNlUmV0cnlBZnRlcixcbiAgICAgICAgZ2V0T3BlcmF0aW9uTG9jYXRpb24sXG4gICAgICAgIGdldE9wZXJhdGlvblN0YXR1cyxcbiAgICAgICAgaXNPcGVyYXRpb25FcnJvcixcbiAgICAgICAgZ2V0UmVzb3VyY2VMb2NhdGlvbixcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBleHBhbnNpb24gaGVyZSBpcyBpbnRlbnRpb25hbCBiZWNhdXNlIGBscm9gIGNvdWxkIGJlIGFuIG9iamVjdCB0aGF0XG4gICAgICAgICAqIHJlZmVyZW5jZXMgYW4gaW5uZXIgdGhpcywgc28gd2UgbmVlZCB0byBwcmVzZXJ2ZSBhIHJlZmVyZW5jZSB0byBpdC5cbiAgICAgICAgICovXG4gICAgICAgIHBvbGw6IGFzeW5jIChsb2NhdGlvbiwgaW5wdXRPcHRpb25zKSA9PiBscm8uc2VuZFBvbGxSZXF1ZXN0KGxvY2F0aW9uLCBpbnB1dE9wdGlvbnMpLFxuICAgICAgICBzZXRFcnJvckFzUmVzdWx0LFxuICAgIH0pO1xufVxuZXhwb3J0cy5wb2xsSHR0cE9wZXJhdGlvbiA9IHBvbGxIdHRwT3BlcmF0aW9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9b3BlcmF0aW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYnVpbGRDcmVhdGVQb2xsZXIgPSB2b2lkIDA7XG5jb25zdCBvcGVyYXRpb25fanNfMSA9IHJlcXVpcmUoXCIuL29wZXJhdGlvbi5qc1wiKTtcbmNvbnN0IGNvbnN0YW50c19qc18xID0gcmVxdWlyZShcIi4vY29uc3RhbnRzLmpzXCIpO1xuY29uc3QgY29yZV91dGlsXzEgPSByZXF1aXJlKFwiQGF6dXJlL2NvcmUtdXRpbFwiKTtcbmNvbnN0IGNyZWF0ZVN0YXRlUHJveHkgPSAoKSA9PiAoe1xuICAgIC8qKlxuICAgICAqIFRoZSBzdGF0ZSBhdCB0aGlzIHBvaW50IGlzIGNyZWF0ZWQgdG8gYmUgb2YgdHlwZSBPcGVyYXRpb25TdGF0ZTxUUmVzdWx0Pi5cbiAgICAgKiBJdCB3aWxsIGJlIHVwZGF0ZWQgbGF0ZXIgdG8gYmUgb2YgdHlwZSBUU3RhdGUgd2hlbiB0aGVcbiAgICAgKiBjdXN0b21lci1wcm92aWRlZCBjYWxsYmFjaywgYHVwZGF0ZVN0YXRlYCwgaXMgY2FsbGVkIGR1cmluZyBwb2xsaW5nLlxuICAgICAqL1xuICAgIGluaXRTdGF0ZTogKGNvbmZpZykgPT4gKHsgc3RhdHVzOiBcInJ1bm5pbmdcIiwgY29uZmlnIH0pLFxuICAgIHNldENhbmNlbGVkOiAoc3RhdGUpID0+IChzdGF0ZS5zdGF0dXMgPSBcImNhbmNlbGVkXCIpLFxuICAgIHNldEVycm9yOiAoc3RhdGUsIGVycm9yKSA9PiAoc3RhdGUuZXJyb3IgPSBlcnJvciksXG4gICAgc2V0UmVzdWx0OiAoc3RhdGUsIHJlc3VsdCkgPT4gKHN0YXRlLnJlc3VsdCA9IHJlc3VsdCksXG4gICAgc2V0UnVubmluZzogKHN0YXRlKSA9PiAoc3RhdGUuc3RhdHVzID0gXCJydW5uaW5nXCIpLFxuICAgIHNldFN1Y2NlZWRlZDogKHN0YXRlKSA9PiAoc3RhdGUuc3RhdHVzID0gXCJzdWNjZWVkZWRcIiksXG4gICAgc2V0RmFpbGVkOiAoc3RhdGUpID0+IChzdGF0ZS5zdGF0dXMgPSBcImZhaWxlZFwiKSxcbiAgICBnZXRFcnJvcjogKHN0YXRlKSA9PiBzdGF0ZS5lcnJvcixcbiAgICBnZXRSZXN1bHQ6IChzdGF0ZSkgPT4gc3RhdGUucmVzdWx0LFxuICAgIGlzQ2FuY2VsZWQ6IChzdGF0ZSkgPT4gc3RhdGUuc3RhdHVzID09PSBcImNhbmNlbGVkXCIsXG4gICAgaXNGYWlsZWQ6IChzdGF0ZSkgPT4gc3RhdGUuc3RhdHVzID09PSBcImZhaWxlZFwiLFxuICAgIGlzUnVubmluZzogKHN0YXRlKSA9PiBzdGF0ZS5zdGF0dXMgPT09IFwicnVubmluZ1wiLFxuICAgIGlzU3VjY2VlZGVkOiAoc3RhdGUpID0+IHN0YXRlLnN0YXR1cyA9PT0gXCJzdWNjZWVkZWRcIixcbn0pO1xuLyoqXG4gKiBSZXR1cm5zIGEgcG9sbGVyIGZhY3RvcnkuXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkQ3JlYXRlUG9sbGVyKGlucHV0cykge1xuICAgIGNvbnN0IHsgZ2V0T3BlcmF0aW9uTG9jYXRpb24sIGdldFN0YXR1c0Zyb21Jbml0aWFsUmVzcG9uc2UsIGdldFN0YXR1c0Zyb21Qb2xsUmVzcG9uc2UsIGlzT3BlcmF0aW9uRXJyb3IsIGdldFJlc291cmNlTG9jYXRpb24sIGdldFBvbGxpbmdJbnRlcnZhbCwgZ2V0RXJyb3IsIHJlc29sdmVPblVuc3VjY2Vzc2Z1bCwgfSA9IGlucHV0cztcbiAgICByZXR1cm4gYXN5bmMgKHsgaW5pdCwgcG9sbCB9LCBvcHRpb25zKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcHJvY2Vzc1Jlc3VsdCwgdXBkYXRlU3RhdGUsIHdpdGhPcGVyYXRpb25Mb2NhdGlvbjogd2l0aE9wZXJhdGlvbkxvY2F0aW9uQ2FsbGJhY2ssIGludGVydmFsSW5NcyA9IGNvbnN0YW50c19qc18xLlBPTExfSU5URVJWQUxfSU5fTVMsIHJlc3RvcmVGcm9tLCB9ID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgY29uc3Qgc3RhdGVQcm94eSA9IGNyZWF0ZVN0YXRlUHJveHkoKTtcbiAgICAgICAgY29uc3Qgd2l0aE9wZXJhdGlvbkxvY2F0aW9uID0gd2l0aE9wZXJhdGlvbkxvY2F0aW9uQ2FsbGJhY2tcbiAgICAgICAgICAgID8gKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgY2FsbGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChvcGVyYXRpb25Mb2NhdGlvbiwgaXNVcGRhdGVkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1VwZGF0ZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICB3aXRoT3BlcmF0aW9uTG9jYXRpb25DYWxsYmFjayhvcGVyYXRpb25Mb2NhdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFjYWxsZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICB3aXRoT3BlcmF0aW9uTG9jYXRpb25DYWxsYmFjayhvcGVyYXRpb25Mb2NhdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pKClcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBzdGF0ZSA9IHJlc3RvcmVGcm9tXG4gICAgICAgICAgICA/ICgwLCBvcGVyYXRpb25fanNfMS5kZXNlcmlhbGl6ZVN0YXRlKShyZXN0b3JlRnJvbSlcbiAgICAgICAgICAgIDogYXdhaXQgKDAsIG9wZXJhdGlvbl9qc18xLmluaXRPcGVyYXRpb24pKHtcbiAgICAgICAgICAgICAgICBpbml0LFxuICAgICAgICAgICAgICAgIHN0YXRlUHJveHksXG4gICAgICAgICAgICAgICAgcHJvY2Vzc1Jlc3VsdCxcbiAgICAgICAgICAgICAgICBnZXRPcGVyYXRpb25TdGF0dXM6IGdldFN0YXR1c0Zyb21Jbml0aWFsUmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgd2l0aE9wZXJhdGlvbkxvY2F0aW9uLFxuICAgICAgICAgICAgICAgIHNldEVycm9yQXNSZXN1bHQ6ICFyZXNvbHZlT25VbnN1Y2Nlc3NmdWwsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgbGV0IHJlc3VsdFByb21pc2U7XG4gICAgICAgIGNvbnN0IGFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICAgICAgY29uc3QgaGFuZGxlcnMgPSBuZXcgTWFwKCk7XG4gICAgICAgIGNvbnN0IGhhbmRsZVByb2dyZXNzRXZlbnRzID0gYXN5bmMgKCkgPT4gaGFuZGxlcnMuZm9yRWFjaCgoaCkgPT4gaChzdGF0ZSkpO1xuICAgICAgICBjb25zdCBjYW5jZWxFcnJNc2cgPSBcIk9wZXJhdGlvbiB3YXMgY2FuY2VsZWRcIjtcbiAgICAgICAgbGV0IGN1cnJlbnRQb2xsSW50ZXJ2YWxJbk1zID0gaW50ZXJ2YWxJbk1zO1xuICAgICAgICBjb25zdCBwb2xsZXIgPSB7XG4gICAgICAgICAgICBnZXRPcGVyYXRpb25TdGF0ZTogKCkgPT4gc3RhdGUsXG4gICAgICAgICAgICBnZXRSZXN1bHQ6ICgpID0+IHN0YXRlLnJlc3VsdCxcbiAgICAgICAgICAgIGlzRG9uZTogKCkgPT4gW1wic3VjY2VlZGVkXCIsIFwiZmFpbGVkXCIsIFwiY2FuY2VsZWRcIl0uaW5jbHVkZXMoc3RhdGUuc3RhdHVzKSxcbiAgICAgICAgICAgIGlzU3RvcHBlZDogKCkgPT4gcmVzdWx0UHJvbWlzZSA9PT0gdW5kZWZpbmVkLFxuICAgICAgICAgICAgc3RvcFBvbGxpbmc6ICgpID0+IHtcbiAgICAgICAgICAgICAgICBhYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0b1N0cmluZzogKCkgPT4gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBvblByb2dyZXNzOiAoY2FsbGJhY2spID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzID0gU3ltYm9sKCk7XG4gICAgICAgICAgICAgICAgaGFuZGxlcnMuc2V0KHMsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gKCkgPT4gaGFuZGxlcnMuZGVsZXRlKHMpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBvbGxVbnRpbERvbmU6IChwb2xsT3B0aW9ucykgPT4gKHJlc3VsdFByb21pc2UgIT09IG51bGwgJiYgcmVzdWx0UHJvbWlzZSAhPT0gdm9pZCAwID8gcmVzdWx0UHJvbWlzZSA6IChyZXN1bHRQcm9taXNlID0gKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGFib3J0U2lnbmFsOiBpbnB1dEFib3J0U2lnbmFsIH0gPSBwb2xsT3B0aW9ucyB8fCB7fTtcbiAgICAgICAgICAgICAgICAvLyBJbiB0aGUgZnV0dXJlIHdlIGNhbiB1c2UgQWJvcnRTaWduYWwuYW55KCkgaW5zdGVhZFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGFib3J0TGlzdGVuZXIoKSB7XG4gICAgICAgICAgICAgICAgICAgIGFib3J0Q29udHJvbGxlci5hYm9ydCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBhYm9ydFNpZ25hbCA9IGFib3J0Q29udHJvbGxlci5zaWduYWw7XG4gICAgICAgICAgICAgICAgaWYgKGlucHV0QWJvcnRTaWduYWwgPT09IG51bGwgfHwgaW5wdXRBYm9ydFNpZ25hbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogaW5wdXRBYm9ydFNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGFib3J0Q29udHJvbGxlci5hYm9ydCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICghYWJvcnRTaWduYWwuYWJvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICBpbnB1dEFib3J0U2lnbmFsID09PSBudWxsIHx8IGlucHV0QWJvcnRTaWduYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGlucHV0QWJvcnRTaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIGFib3J0TGlzdGVuZXIsIHsgb25jZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwb2xsZXIuaXNEb25lKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHBvbGxlci5wb2xsKHsgYWJvcnRTaWduYWwgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIXBvbGxlci5pc0RvbmUoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0ICgwLCBjb3JlX3V0aWxfMS5kZWxheSkoY3VycmVudFBvbGxJbnRlcnZhbEluTXMsIHsgYWJvcnRTaWduYWwgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgcG9sbGVyLnBvbGwoeyBhYm9ydFNpZ25hbCB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRBYm9ydFNpZ25hbCA9PT0gbnVsbCB8fCBpbnB1dEFib3J0U2lnbmFsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBpbnB1dEFib3J0U2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBhYm9ydExpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlc29sdmVPblVuc3VjY2Vzc2Z1bCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcG9sbGVyLmdldFJlc3VsdCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChzdGF0ZS5zdGF0dXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJzdWNjZWVkZWRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcG9sbGVyLmdldFJlc3VsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImNhbmNlbGVkXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGNhbmNlbEVyck1zZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZmFpbGVkXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgc3RhdGUuZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwibm90U3RhcnRlZFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcInJ1bm5pbmdcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFBvbGxpbmcgY29tcGxldGVkIHdpdGhvdXQgc3VjY2VlZGluZyBvciBmYWlsaW5nYCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSgpLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc3VsdFByb21pc2UgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9KSkpLFxuICAgICAgICAgICAgYXN5bmMgcG9sbChwb2xsT3B0aW9ucykge1xuICAgICAgICAgICAgICAgIGlmIChyZXNvbHZlT25VbnN1Y2Nlc3NmdWwpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBvbGxlci5pc0RvbmUoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoc3RhdGUuc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwic3VjY2VlZGVkXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImNhbmNlbGVkXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGNhbmNlbEVyck1zZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZmFpbGVkXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgc3RhdGUuZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXdhaXQgKDAsIG9wZXJhdGlvbl9qc18xLnBvbGxPcGVyYXRpb24pKHtcbiAgICAgICAgICAgICAgICAgICAgcG9sbCxcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlUHJveHksXG4gICAgICAgICAgICAgICAgICAgIGdldE9wZXJhdGlvbkxvY2F0aW9uLFxuICAgICAgICAgICAgICAgICAgICBpc09wZXJhdGlvbkVycm9yLFxuICAgICAgICAgICAgICAgICAgICB3aXRoT3BlcmF0aW9uTG9jYXRpb24sXG4gICAgICAgICAgICAgICAgICAgIGdldFBvbGxpbmdJbnRlcnZhbCxcbiAgICAgICAgICAgICAgICAgICAgZ2V0T3BlcmF0aW9uU3RhdHVzOiBnZXRTdGF0dXNGcm9tUG9sbFJlc3BvbnNlLFxuICAgICAgICAgICAgICAgICAgICBnZXRSZXNvdXJjZUxvY2F0aW9uLFxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzUmVzdWx0LFxuICAgICAgICAgICAgICAgICAgICBnZXRFcnJvcixcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IHBvbGxPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICBzZXREZWxheTogKHBvbGxJbnRlcnZhbEluTXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQb2xsSW50ZXJ2YWxJbk1zID0gcG9sbEludGVydmFsSW5NcztcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgc2V0RXJyb3JBc1Jlc3VsdDogIXJlc29sdmVPblVuc3VjY2Vzc2Z1bCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVQcm9ncmVzc0V2ZW50cygpO1xuICAgICAgICAgICAgICAgIGlmICghcmVzb2x2ZU9uVW5zdWNjZXNzZnVsKSB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoc3RhdGUuc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiY2FuY2VsZWRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoY2FuY2VsRXJyTXNnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJmYWlsZWRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBzdGF0ZS5lcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBwb2xsZXI7XG4gICAgfTtcbn1cbmV4cG9ydHMuYnVpbGRDcmVhdGVQb2xsZXIgPSBidWlsZENyZWF0ZVBvbGxlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBvbGxlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNyZWF0ZUh0dHBQb2xsZXIgPSB2b2lkIDA7XG5jb25zdCBvcGVyYXRpb25fanNfMSA9IHJlcXVpcmUoXCIuL29wZXJhdGlvbi5qc1wiKTtcbmNvbnN0IHBvbGxlcl9qc18xID0gcmVxdWlyZShcIi4uL3BvbGxlci9wb2xsZXIuanNcIik7XG4vKipcbiAqIENyZWF0ZXMgYSBwb2xsZXIgdGhhdCBjYW4gYmUgdXNlZCB0byBwb2xsIGEgbG9uZy1ydW5uaW5nIG9wZXJhdGlvbi5cbiAqIEBwYXJhbSBscm8gLSBEZXNjcmlwdGlvbiBvZiB0aGUgbG9uZy1ydW5uaW5nIG9wZXJhdGlvblxuICogQHBhcmFtIG9wdGlvbnMgLSBvcHRpb25zIHRvIGNvbmZpZ3VyZSB0aGUgcG9sbGVyXG4gKiBAcmV0dXJucyBhbiBpbml0aWFsaXplZCBwb2xsZXJcbiAqL1xuYXN5bmMgZnVuY3Rpb24gY3JlYXRlSHR0cFBvbGxlcihscm8sIG9wdGlvbnMpIHtcbiAgICBjb25zdCB7IHJlc291cmNlTG9jYXRpb25Db25maWcsIGludGVydmFsSW5NcywgcHJvY2Vzc1Jlc3VsdCwgcmVzdG9yZUZyb20sIHVwZGF0ZVN0YXRlLCB3aXRoT3BlcmF0aW9uTG9jYXRpb24sIHJlc29sdmVPblVuc3VjY2Vzc2Z1bCA9IGZhbHNlLCB9ID0gb3B0aW9ucyB8fCB7fTtcbiAgICByZXR1cm4gKDAsIHBvbGxlcl9qc18xLmJ1aWxkQ3JlYXRlUG9sbGVyKSh7XG4gICAgICAgIGdldFN0YXR1c0Zyb21Jbml0aWFsUmVzcG9uc2U6IG9wZXJhdGlvbl9qc18xLmdldFN0YXR1c0Zyb21Jbml0aWFsUmVzcG9uc2UsXG4gICAgICAgIGdldFN0YXR1c0Zyb21Qb2xsUmVzcG9uc2U6IG9wZXJhdGlvbl9qc18xLmdldE9wZXJhdGlvblN0YXR1cyxcbiAgICAgICAgaXNPcGVyYXRpb25FcnJvcjogb3BlcmF0aW9uX2pzXzEuaXNPcGVyYXRpb25FcnJvcixcbiAgICAgICAgZ2V0T3BlcmF0aW9uTG9jYXRpb246IG9wZXJhdGlvbl9qc18xLmdldE9wZXJhdGlvbkxvY2F0aW9uLFxuICAgICAgICBnZXRSZXNvdXJjZUxvY2F0aW9uOiBvcGVyYXRpb25fanNfMS5nZXRSZXNvdXJjZUxvY2F0aW9uLFxuICAgICAgICBnZXRQb2xsaW5nSW50ZXJ2YWw6IG9wZXJhdGlvbl9qc18xLnBhcnNlUmV0cnlBZnRlcixcbiAgICAgICAgZ2V0RXJyb3I6IG9wZXJhdGlvbl9qc18xLmdldEVycm9yRnJvbVJlc3BvbnNlLFxuICAgICAgICByZXNvbHZlT25VbnN1Y2Nlc3NmdWwsXG4gICAgfSkoe1xuICAgICAgICBpbml0OiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGxyby5zZW5kSW5pdGlhbFJlcXVlc3QoKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbmZpZyA9ICgwLCBvcGVyYXRpb25fanNfMS5pbmZlckxyb01vZGUpKHtcbiAgICAgICAgICAgICAgICByYXdSZXNwb25zZTogcmVzcG9uc2UucmF3UmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgcmVxdWVzdFBhdGg6IGxyby5yZXF1ZXN0UGF0aCxcbiAgICAgICAgICAgICAgICByZXF1ZXN0TWV0aG9kOiBscm8ucmVxdWVzdE1ldGhvZCxcbiAgICAgICAgICAgICAgICByZXNvdXJjZUxvY2F0aW9uQ29uZmlnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7IHJlc3BvbnNlLCBvcGVyYXRpb25Mb2NhdGlvbjogY29uZmlnID09PSBudWxsIHx8IGNvbmZpZyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29uZmlnLm9wZXJhdGlvbkxvY2F0aW9uLCByZXNvdXJjZUxvY2F0aW9uOiBjb25maWcgPT09IG51bGwgfHwgY29uZmlnID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb25maWcucmVzb3VyY2VMb2NhdGlvbiB9LCAoKGNvbmZpZyA9PT0gbnVsbCB8fCBjb25maWcgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbmZpZy5tb2RlKSA/IHsgbWV0YWRhdGE6IHsgbW9kZTogY29uZmlnLm1vZGUgfSB9IDoge30pKTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9sbDogbHJvLnNlbmRQb2xsUmVxdWVzdCxcbiAgICB9LCB7XG4gICAgICAgIGludGVydmFsSW5NcyxcbiAgICAgICAgd2l0aE9wZXJhdGlvbkxvY2F0aW9uLFxuICAgICAgICByZXN0b3JlRnJvbSxcbiAgICAgICAgdXBkYXRlU3RhdGUsXG4gICAgICAgIHByb2Nlc3NSZXN1bHQ6IHByb2Nlc3NSZXN1bHRcbiAgICAgICAgICAgID8gKHsgZmxhdFJlc3BvbnNlIH0sIHN0YXRlKSA9PiBwcm9jZXNzUmVzdWx0KGZsYXRSZXNwb25zZSwgc3RhdGUpXG4gICAgICAgICAgICA6ICh7IGZsYXRSZXNwb25zZSB9KSA9PiBmbGF0UmVzcG9uc2UsXG4gICAgfSk7XG59XG5leHBvcnRzLmNyZWF0ZUh0dHBQb2xsZXIgPSBjcmVhdGVIdHRwUG9sbGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cG9sbGVyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuR2VuZXJpY1BvbGxPcGVyYXRpb24gPSB2b2lkIDA7XG5jb25zdCBvcGVyYXRpb25fanNfMSA9IHJlcXVpcmUoXCIuLi8uLi9odHRwL29wZXJhdGlvbi5qc1wiKTtcbmNvbnN0IGxvZ2dlcl9qc18xID0gcmVxdWlyZShcIi4uLy4uL2xvZ2dlci5qc1wiKTtcbmNvbnN0IGNyZWF0ZVN0YXRlUHJveHkgPSAoKSA9PiAoe1xuICAgIGluaXRTdGF0ZTogKGNvbmZpZykgPT4gKHsgY29uZmlnLCBpc1N0YXJ0ZWQ6IHRydWUgfSksXG4gICAgc2V0Q2FuY2VsZWQ6IChzdGF0ZSkgPT4gKHN0YXRlLmlzQ2FuY2VsbGVkID0gdHJ1ZSksXG4gICAgc2V0RXJyb3I6IChzdGF0ZSwgZXJyb3IpID0+IChzdGF0ZS5lcnJvciA9IGVycm9yKSxcbiAgICBzZXRSZXN1bHQ6IChzdGF0ZSwgcmVzdWx0KSA9PiAoc3RhdGUucmVzdWx0ID0gcmVzdWx0KSxcbiAgICBzZXRSdW5uaW5nOiAoc3RhdGUpID0+IChzdGF0ZS5pc1N0YXJ0ZWQgPSB0cnVlKSxcbiAgICBzZXRTdWNjZWVkZWQ6IChzdGF0ZSkgPT4gKHN0YXRlLmlzQ29tcGxldGVkID0gdHJ1ZSksXG4gICAgc2V0RmFpbGVkOiAoKSA9PiB7XG4gICAgICAgIC8qKiBlbXB0eSBib2R5ICovXG4gICAgfSxcbiAgICBnZXRFcnJvcjogKHN0YXRlKSA9PiBzdGF0ZS5lcnJvcixcbiAgICBnZXRSZXN1bHQ6IChzdGF0ZSkgPT4gc3RhdGUucmVzdWx0LFxuICAgIGlzQ2FuY2VsZWQ6IChzdGF0ZSkgPT4gISFzdGF0ZS5pc0NhbmNlbGxlZCxcbiAgICBpc0ZhaWxlZDogKHN0YXRlKSA9PiAhIXN0YXRlLmVycm9yLFxuICAgIGlzUnVubmluZzogKHN0YXRlKSA9PiAhIXN0YXRlLmlzU3RhcnRlZCxcbiAgICBpc1N1Y2NlZWRlZDogKHN0YXRlKSA9PiBCb29sZWFuKHN0YXRlLmlzQ29tcGxldGVkICYmICFzdGF0ZS5pc0NhbmNlbGxlZCAmJiAhc3RhdGUuZXJyb3IpLFxufSk7XG5jbGFzcyBHZW5lcmljUG9sbE9wZXJhdGlvbiB7XG4gICAgY29uc3RydWN0b3Ioc3RhdGUsIGxybywgc2V0RXJyb3JBc1Jlc3VsdCwgbHJvUmVzb3VyY2VMb2NhdGlvbkNvbmZpZywgcHJvY2Vzc1Jlc3VsdCwgdXBkYXRlU3RhdGUsIGlzRG9uZSkge1xuICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGU7XG4gICAgICAgIHRoaXMubHJvID0gbHJvO1xuICAgICAgICB0aGlzLnNldEVycm9yQXNSZXN1bHQgPSBzZXRFcnJvckFzUmVzdWx0O1xuICAgICAgICB0aGlzLmxyb1Jlc291cmNlTG9jYXRpb25Db25maWcgPSBscm9SZXNvdXJjZUxvY2F0aW9uQ29uZmlnO1xuICAgICAgICB0aGlzLnByb2Nlc3NSZXN1bHQgPSBwcm9jZXNzUmVzdWx0O1xuICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlID0gdXBkYXRlU3RhdGU7XG4gICAgICAgIHRoaXMuaXNEb25lID0gaXNEb25lO1xuICAgIH1cbiAgICBzZXRQb2xsZXJDb25maWcocG9sbGVyQ29uZmlnKSB7XG4gICAgICAgIHRoaXMucG9sbGVyQ29uZmlnID0gcG9sbGVyQ29uZmlnO1xuICAgIH1cbiAgICBhc3luYyB1cGRhdGUob3B0aW9ucykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IHN0YXRlUHJveHkgPSBjcmVhdGVTdGF0ZVByb3h5KCk7XG4gICAgICAgIGlmICghdGhpcy5zdGF0ZS5pc1N0YXJ0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHRoaXMuc3RhdGUpLCAoYXdhaXQgKDAsIG9wZXJhdGlvbl9qc18xLmluaXRIdHRwT3BlcmF0aW9uKSh7XG4gICAgICAgICAgICAgICAgbHJvOiB0aGlzLmxybyxcbiAgICAgICAgICAgICAgICBzdGF0ZVByb3h5LFxuICAgICAgICAgICAgICAgIHJlc291cmNlTG9jYXRpb25Db25maWc6IHRoaXMubHJvUmVzb3VyY2VMb2NhdGlvbkNvbmZpZyxcbiAgICAgICAgICAgICAgICBwcm9jZXNzUmVzdWx0OiB0aGlzLnByb2Nlc3NSZXN1bHQsXG4gICAgICAgICAgICAgICAgc2V0RXJyb3JBc1Jlc3VsdDogdGhpcy5zZXRFcnJvckFzUmVzdWx0LFxuICAgICAgICAgICAgfSkpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1cGRhdGVTdGF0ZSA9IHRoaXMudXBkYXRlU3RhdGU7XG4gICAgICAgIGNvbnN0IGlzRG9uZSA9IHRoaXMuaXNEb25lO1xuICAgICAgICBpZiAoIXRoaXMuc3RhdGUuaXNDb21wbGV0ZWQgJiYgdGhpcy5zdGF0ZS5lcnJvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhd2FpdCAoMCwgb3BlcmF0aW9uX2pzXzEucG9sbEh0dHBPcGVyYXRpb24pKHtcbiAgICAgICAgICAgICAgICBscm86IHRoaXMubHJvLFxuICAgICAgICAgICAgICAgIHN0YXRlOiB0aGlzLnN0YXRlLFxuICAgICAgICAgICAgICAgIHN0YXRlUHJveHksXG4gICAgICAgICAgICAgICAgcHJvY2Vzc1Jlc3VsdDogdGhpcy5wcm9jZXNzUmVzdWx0LFxuICAgICAgICAgICAgICAgIHVwZGF0ZVN0YXRlOiB1cGRhdGVTdGF0ZVxuICAgICAgICAgICAgICAgICAgICA/IChzdGF0ZSwgeyByYXdSZXNwb25zZSB9KSA9PiB1cGRhdGVTdGF0ZShzdGF0ZSwgcmF3UmVzcG9uc2UpXG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIGlzRG9uZTogaXNEb25lXG4gICAgICAgICAgICAgICAgICAgID8gKHsgZmxhdFJlc3BvbnNlIH0sIHN0YXRlKSA9PiBpc0RvbmUoZmxhdFJlc3BvbnNlLCBzdGF0ZSlcbiAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgICAgICBzZXREZWxheTogKGludGVydmFsSW5NcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBvbGxlckNvbmZpZy5pbnRlcnZhbEluTXMgPSBpbnRlcnZhbEluTXM7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZXRFcnJvckFzUmVzdWx0OiB0aGlzLnNldEVycm9yQXNSZXN1bHQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAoX2EgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuZmlyZVByb2dyZXNzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbChvcHRpb25zLCB0aGlzLnN0YXRlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGFzeW5jIGNhbmNlbCgpIHtcbiAgICAgICAgbG9nZ2VyX2pzXzEubG9nZ2VyLmVycm9yKFwiYGNhbmNlbE9wZXJhdGlvbmAgaXMgZGVwcmVjYXRlZCBiZWNhdXNlIGl0IHdhc24ndCBpbXBsZW1lbnRlZFwiKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNlcmlhbGl6ZXMgdGhlIFBvbGxlciBvcGVyYXRpb24uXG4gICAgICovXG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBzdGF0ZTogdGhpcy5zdGF0ZSxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0cy5HZW5lcmljUG9sbE9wZXJhdGlvbiA9IEdlbmVyaWNQb2xsT3BlcmF0aW9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9b3BlcmF0aW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUG9sbGVyID0gZXhwb3J0cy5Qb2xsZXJDYW5jZWxsZWRFcnJvciA9IGV4cG9ydHMuUG9sbGVyU3RvcHBlZEVycm9yID0gdm9pZCAwO1xuLyoqXG4gKiBXaGVuIGEgcG9sbGVyIGlzIG1hbnVhbGx5IHN0b3BwZWQgdGhyb3VnaCB0aGUgYHN0b3BQb2xsaW5nYCBtZXRob2QsXG4gKiB0aGUgcG9sbGVyIHdpbGwgYmUgcmVqZWN0ZWQgd2l0aCBhbiBpbnN0YW5jZSBvZiB0aGUgUG9sbGVyU3RvcHBlZEVycm9yLlxuICovXG5jbGFzcyBQb2xsZXJTdG9wcGVkRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZSkge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJQb2xsZXJTdG9wcGVkRXJyb3JcIjtcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIFBvbGxlclN0b3BwZWRFcnJvci5wcm90b3R5cGUpO1xuICAgIH1cbn1cbmV4cG9ydHMuUG9sbGVyU3RvcHBlZEVycm9yID0gUG9sbGVyU3RvcHBlZEVycm9yO1xuLyoqXG4gKiBXaGVuIHRoZSBvcGVyYXRpb24gaXMgY2FuY2VsbGVkLCB0aGUgcG9sbGVyIHdpbGwgYmUgcmVqZWN0ZWQgd2l0aCBhbiBpbnN0YW5jZVxuICogb2YgdGhlIFBvbGxlckNhbmNlbGxlZEVycm9yLlxuICovXG5jbGFzcyBQb2xsZXJDYW5jZWxsZWRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlBvbGxlckNhbmNlbGxlZEVycm9yXCI7XG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBQb2xsZXJDYW5jZWxsZWRFcnJvci5wcm90b3R5cGUpO1xuICAgIH1cbn1cbmV4cG9ydHMuUG9sbGVyQ2FuY2VsbGVkRXJyb3IgPSBQb2xsZXJDYW5jZWxsZWRFcnJvcjtcbi8qKlxuICogQSBjbGFzcyB0aGF0IHJlcHJlc2VudHMgdGhlIGRlZmluaXRpb24gb2YgYSBwcm9ncmFtIHRoYXQgcG9sbHMgdGhyb3VnaCBjb25zZWN1dGl2ZSByZXF1ZXN0c1xuICogdW50aWwgaXQgcmVhY2hlcyBhIHN0YXRlIG9mIGNvbXBsZXRpb24uXG4gKlxuICogQSBwb2xsZXIgY2FuIGJlIGV4ZWN1dGVkIG1hbnVhbGx5LCBieSBwb2xsaW5nIHJlcXVlc3QgYnkgcmVxdWVzdCBieSBjYWxsaW5nIHRvIHRoZSBgcG9sbCgpYCBtZXRob2QgcmVwZWF0ZWRseSwgdW50aWwgaXRzIG9wZXJhdGlvbiBpcyBjb21wbGV0ZWQuXG4gKiBJdCBhbHNvIHByb3ZpZGVzIGEgd2F5IHRvIHdhaXQgdW50aWwgdGhlIG9wZXJhdGlvbiBjb21wbGV0ZXMsIGJ5IGNhbGxpbmcgYHBvbGxVbnRpbERvbmUoKWAgYW5kIHdhaXRpbmcgdW50aWwgdGhlIG9wZXJhdGlvbiBmaW5pc2hlcy5cbiAqIFBvbGxlcnMgY2FuIGFsc28gcmVxdWVzdCB0aGUgY2FuY2VsbGF0aW9uIG9mIHRoZSBvbmdvaW5nIHByb2Nlc3MgdG8gd2hvbSBpcyBwcm92aWRpbmcgdGhlIHVuZGVybHlpbmcgbG9uZyBydW5uaW5nIG9wZXJhdGlvbi5cbiAqXG4gKiBgYGB0c1xuICogY29uc3QgcG9sbGVyID0gbmV3IE15UG9sbGVyKCk7XG4gKlxuICogLy8gUG9sbGluZyBqdXN0IG9uY2U6XG4gKiBhd2FpdCBwb2xsZXIucG9sbCgpO1xuICpcbiAqIC8vIFdlIGNhbiB0cnkgdG8gY2FuY2VsIHRoZSByZXF1ZXN0IGhlcmUsIGJ5IGNhbGxpbmc6XG4gKiAvL1xuICogLy8gICAgIGF3YWl0IHBvbGxlci5jYW5jZWxPcGVyYXRpb24oKTtcbiAqIC8vXG4gKlxuICogLy8gR2V0dGluZyB0aGUgZmluYWwgcmVzdWx0OlxuICogY29uc3QgcmVzdWx0ID0gYXdhaXQgcG9sbGVyLnBvbGxVbnRpbERvbmUoKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBQb2xsZXIgaXMgZGVmaW5lZCBieSB0d28gdHlwZXMsIGEgdHlwZSByZXByZXNlbnRpbmcgdGhlIHN0YXRlIG9mIHRoZSBwb2xsZXIsIHdoaWNoXG4gKiBtdXN0IGluY2x1ZGUgYSBiYXNpYyBzZXQgb2YgcHJvcGVydGllcyBmcm9tIGBQb2xsT3BlcmF0aW9uU3RhdGU8VFJlc3VsdD5gLFxuICogYW5kIGEgcmV0dXJuIHR5cGUgZGVmaW5lZCBieSBgVFJlc3VsdGAsIHdoaWNoIGNhbiBiZSBhbnl0aGluZy5cbiAqXG4gKiBUaGUgUG9sbGVyIGNsYXNzIGltcGxlbWVudHMgdGhlIGBQb2xsZXJMaWtlYCBpbnRlcmZhY2UsIHdoaWNoIGFsbG93cyBwb2xsZXIgaW1wbGVtZW50YXRpb25zIHRvIGF2b2lkIGhhdmluZ1xuICogdG8gZXhwb3J0IHRoZSBQb2xsZXIncyBjbGFzcyBkaXJlY3RseSwgYW5kIGluc3RlYWQgb25seSBleHBvcnQgdGhlIGFscmVhZHkgaW5zdGFudGlhdGVkIHBvbGxlciB3aXRoIHRoZSBQb2xsZXJMaWtlIHR5cGUuXG4gKlxuICogYGBgdHNcbiAqIGNsYXNzIENsaWVudCB7XG4gKiAgIHB1YmxpYyBhc3luYyBtYWtlUG9sbGVyOiBQb2xsZXJMaWtlPE15T3BlcmF0aW9uU3RhdGUsIE15UmVzdWx0PiB7XG4gKiAgICAgY29uc3QgcG9sbGVyID0gbmV3IE15UG9sbGVyKHt9KTtcbiAqICAgICAvLyBJdCBtaWdodCBiZSBwcmVmZXJyZWQgdG8gcmV0dXJuIHRoZSBwb2xsZXIgYWZ0ZXIgdGhlIGZpcnN0IHJlcXVlc3QgaXMgbWFkZSxcbiAqICAgICAvLyBzbyB0aGF0IHNvbWUgaW5mb3JtYXRpb24gY2FuIGJlIG9idGFpbmVkIHJpZ2h0IGF3YXkuXG4gKiAgICAgYXdhaXQgcG9sbGVyLnBvbGwoKTtcbiAqICAgICByZXR1cm4gcG9sbGVyO1xuICogICB9XG4gKiB9XG4gKlxuICogY29uc3QgcG9sbGVyOiBQb2xsZXJMaWtlPE15T3BlcmF0aW9uU3RhdGUsIE15UmVzdWx0PiA9IG15Q2xpZW50Lm1ha2VQb2xsZXIoKTtcbiAqIGBgYFxuICpcbiAqIEEgcG9sbGVyIGNhbiBiZSBjcmVhdGVkIHRocm91Z2ggaXRzIGNvbnN0cnVjdG9yLCB0aGVuIGl0IGNhbiBiZSBwb2xsZWQgdW50aWwgaXQncyBjb21wbGV0ZWQuXG4gKiBBdCBhbnkgcG9pbnQgaW4gdGltZSwgdGhlIHN0YXRlIG9mIHRoZSBwb2xsZXIgY2FuIGJlIG9idGFpbmVkIHdpdGhvdXQgZGVsYXkgdGhyb3VnaCB0aGUgZ2V0T3BlcmF0aW9uU3RhdGUgbWV0aG9kLlxuICogQXQgYW55IHBvaW50IGluIHRpbWUsIHRoZSBpbnRlcm1lZGlhdGUgZm9ybXMgb2YgdGhlIHJlc3VsdCB0eXBlIGNhbiBiZSByZXF1ZXN0ZWQgd2l0aG91dCBkZWxheS5cbiAqIE9uY2UgdGhlIHVuZGVybHlpbmcgb3BlcmF0aW9uIGlzIG1hcmtlZCBhcyBjb21wbGV0ZWQsIHRoZSBwb2xsZXIgd2lsbCBzdG9wIGFuZCB0aGUgZmluYWwgdmFsdWUgd2lsbCBiZSByZXR1cm5lZC5cbiAqXG4gKiBgYGB0c1xuICogY29uc3QgcG9sbGVyID0gbXlDbGllbnQubWFrZVBvbGxlcigpO1xuICogY29uc3Qgc3RhdGU6IE15T3BlcmF0aW9uU3RhdGUgPSBwb2xsZXIuZ2V0T3BlcmF0aW9uU3RhdGUoKTtcbiAqXG4gKiAvLyBUaGUgaW50ZXJtZWRpYXRlIHJlc3VsdCBjYW4gYmUgb2J0YWluZWQgYXQgYW55IHRpbWUuXG4gKiBjb25zdCByZXN1bHQ6IE15UmVzdWx0IHwgdW5kZWZpbmVkID0gcG9sbGVyLmdldFJlc3VsdCgpO1xuICpcbiAqIC8vIFRoZSBmaW5hbCByZXN1bHQgY2FuIG9ubHkgYmUgb2J0YWluZWQgYWZ0ZXIgdGhlIHBvbGxlciBmaW5pc2hlcy5cbiAqIGNvbnN0IHJlc3VsdDogTXlSZXN1bHQgPSBhd2FpdCBwb2xsZXIucG9sbFVudGlsRG9uZSgpO1xuICogYGBgXG4gKlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbmNsYXNzIFBvbGxlciB7XG4gICAgLyoqXG4gICAgICogQSBwb2xsZXIgbmVlZHMgdG8gYmUgaW5pdGlhbGl6ZWQgYnkgcGFzc2luZyBpbiBhdCBsZWFzdCB0aGUgYmFzaWMgcHJvcGVydGllcyBvZiB0aGUgYFBvbGxPcGVyYXRpb248VFN0YXRlLCBUUmVzdWx0PmAuXG4gICAgICpcbiAgICAgKiBXaGVuIHdyaXRpbmcgYW4gaW1wbGVtZW50YXRpb24gb2YgYSBQb2xsZXIsIHRoaXMgaW1wbGVtZW50YXRpb24gbmVlZHMgdG8gZGVhbCB3aXRoIHRoZSBpbml0aWFsaXphdGlvblxuICAgICAqIG9mIGFueSBjdXN0b20gc3RhdGUgYmV5b25kIHRoZSBiYXNpYyBkZWZpbml0aW9uIG9mIHRoZSBwb2xsZXIuIFRoZSBiYXNpYyBwb2xsZXIgYXNzdW1lcyB0aGF0IHRoZSBwb2xsZXInc1xuICAgICAqIG9wZXJhdGlvbiBoYXMgYWxyZWFkeSBiZWVuIGRlZmluZWQsIGF0IGxlYXN0IGl0cyBiYXNpYyBwcm9wZXJ0aWVzLiBUaGUgY29kZSBiZWxvdyBzaG93cyBob3cgdG8gYXBwcm9hY2hcbiAgICAgKiB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgY29uc3RydWN0b3Igb2YgYSBuZXcgY3VzdG9tIHBvbGxlci5cbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogZXhwb3J0IGNsYXNzIE15UG9sbGVyIGV4dGVuZHMgUG9sbGVyPE15T3BlcmF0aW9uU3RhdGUsIHN0cmluZz4ge1xuICAgICAqICAgY29uc3RydWN0b3Ioe1xuICAgICAqICAgICAvLyBBbnl0aGluZyB5b3UgbWlnaHQgbmVlZCBvdXRzaWRlIG9mIHRoZSBiYXNpY3NcbiAgICAgKiAgIH0pIHtcbiAgICAgKiAgICAgbGV0IHN0YXRlOiBNeU9wZXJhdGlvblN0YXRlID0ge1xuICAgICAqICAgICAgIHByaXZhdGVQcm9wZXJ0eTogcHJpdmF0ZSxcbiAgICAgKiAgICAgICBwdWJsaWNQcm9wZXJ0eTogcHVibGljLFxuICAgICAqICAgICB9O1xuICAgICAqXG4gICAgICogICAgIGNvbnN0IG9wZXJhdGlvbiA9IHtcbiAgICAgKiAgICAgICBzdGF0ZSxcbiAgICAgKiAgICAgICB1cGRhdGUsXG4gICAgICogICAgICAgY2FuY2VsLFxuICAgICAqICAgICAgIHRvU3RyaW5nXG4gICAgICogICAgIH1cbiAgICAgKlxuICAgICAqICAgICAvLyBTZW5kaW5nIHRoZSBvcGVyYXRpb24gdG8gdGhlIHBhcmVudCdzIGNvbnN0cnVjdG9yLlxuICAgICAqICAgICBzdXBlcihvcGVyYXRpb24pO1xuICAgICAqXG4gICAgICogICAgIC8vIFlvdSBjYW4gYXNzaWduIG1vcmUgbG9jYWwgcHJvcGVydGllcyBoZXJlLlxuICAgICAqICAgfVxuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEluc2lkZSBvZiB0aGlzIGNvbnN0cnVjdG9yLCBhIG5ldyBwcm9taXNlIGlzIGNyZWF0ZWQuIFRoaXMgd2lsbCBiZSB1c2VkIHRvXG4gICAgICogdGVsbCB0aGUgdXNlciB3aGVuIHRoZSBwb2xsZXIgZmluaXNoZXMgKHNlZSBgcG9sbFVudGlsRG9uZSgpYCkuIFRoZSBwcm9taXNlJ3NcbiAgICAgKiByZXNvbHZlIGFuZCByZWplY3QgbWV0aG9kcyBhcmUgYWxzbyB1c2VkIGludGVybmFsbHkgdG8gY29udHJvbCB3aGVuIHRvIHJlc29sdmVcbiAgICAgKiBvciByZWplY3QgYW55b25lIHdhaXRpbmcgZm9yIHRoZSBwb2xsZXIgdG8gZmluaXNoLlxuICAgICAqXG4gICAgICogVGhlIGNvbnN0cnVjdG9yIG9mIGEgY3VzdG9tIGltcGxlbWVudGF0aW9uIG9mIGEgcG9sbGVyIGlzIHdoZXJlIGFueSBzZXJpYWxpemVkIHZlcnNpb24gb2ZcbiAgICAgKiBhIHByZXZpb3VzIHBvbGxlcidzIG9wZXJhdGlvbiBzaG91bGQgYmUgZGVzZXJpYWxpemVkIGludG8gdGhlIG9wZXJhdGlvbiBzZW50IHRvIHRoZVxuICAgICAqIGJhc2UgY29uc3RydWN0b3IuIEZvciBleGFtcGxlOlxuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBleHBvcnQgY2xhc3MgTXlQb2xsZXIgZXh0ZW5kcyBQb2xsZXI8TXlPcGVyYXRpb25TdGF0ZSwgc3RyaW5nPiB7XG4gICAgICogICBjb25zdHJ1Y3RvcihcbiAgICAgKiAgICAgYmFzZU9wZXJhdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkXG4gICAgICogICApIHtcbiAgICAgKiAgICAgbGV0IHN0YXRlOiBNeU9wZXJhdGlvblN0YXRlID0ge307XG4gICAgICogICAgIGlmIChiYXNlT3BlcmF0aW9uKSB7XG4gICAgICogICAgICAgc3RhdGUgPSB7XG4gICAgICogICAgICAgICAuLi5KU09OLnBhcnNlKGJhc2VPcGVyYXRpb24pLnN0YXRlLFxuICAgICAqICAgICAgICAgLi4uc3RhdGVcbiAgICAgKiAgICAgICB9O1xuICAgICAqICAgICB9XG4gICAgICogICAgIGNvbnN0IG9wZXJhdGlvbiA9IHtcbiAgICAgKiAgICAgICBzdGF0ZSxcbiAgICAgKiAgICAgICAvLyAuLi5cbiAgICAgKiAgICAgfVxuICAgICAqICAgICBzdXBlcihvcGVyYXRpb24pO1xuICAgICAqICAgfVxuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcGVyYXRpb24gLSBNdXN0IGNvbnRhaW4gdGhlIGJhc2ljIHByb3BlcnRpZXMgb2YgYFBvbGxPcGVyYXRpb248U3RhdGUsIFRSZXN1bHQ+YC5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihvcGVyYXRpb24pIHtcbiAgICAgICAgLyoqIGNvbnRyb2xzIHdoZXRoZXIgdG8gdGhyb3cgYW4gZXJyb3IgaWYgdGhlIG9wZXJhdGlvbiBmYWlsZWQgb3Igd2FzIGNhbmNlbGVkLiAqL1xuICAgICAgICB0aGlzLnJlc29sdmVPblVuc3VjY2Vzc2Z1bCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0b3BwZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnBvbGxQcm9ncmVzc0NhbGxiYWNrcyA9IFtdO1xuICAgICAgICB0aGlzLm9wZXJhdGlvbiA9IG9wZXJhdGlvbjtcbiAgICAgICAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgICAgICAgIHRoaXMucmVqZWN0ID0gcmVqZWN0O1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gVGhpcyBwcmV2ZW50cyB0aGUgVW5oYW5kbGVkUHJvbWlzZVJlamVjdGlvbldhcm5pbmcgaW4gbm9kZS5qcyBmcm9tIGJlaW5nIHRocm93bi5cbiAgICAgICAgLy8gVGhlIGFib3ZlIHdhcm5pbmcgd291bGQgZ2V0IHRocm93biBpZiBgcG9sbGVyLnBvbGxgIGlzIGNhbGxlZCwgaXQgcmV0dXJucyBhbiBlcnJvcixcbiAgICAgICAgLy8gYW5kIHB1bGxVbnRpbERvbmUgZGlkIG5vdCBoYXZlIGEgLmNhdGNoIG9yIGF3YWl0IHRyeS9jYXRjaCBvbiBpdCdzIHJldHVybiB2YWx1ZS5cbiAgICAgICAgdGhpcy5wcm9taXNlLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICAgIC8qIGludGVudGlvbmFsbHkgYmxhbmsgKi9cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN0YXJ0cyBhIGxvb3AgdGhhdCB3aWxsIGJyZWFrIG9ubHkgaWYgdGhlIHBvbGxlciBpcyBkb25lXG4gICAgICogb3IgaWYgdGhlIHBvbGxlciBpcyBzdG9wcGVkLlxuICAgICAqL1xuICAgIGFzeW5jIHN0YXJ0UG9sbGluZyhwb2xsT3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGlmICh0aGlzLnN0b3BwZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcHBlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlICghdGhpcy5pc1N0b3BwZWQoKSAmJiAhdGhpcy5pc0RvbmUoKSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5wb2xsKHBvbGxPcHRpb25zKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZGVsYXkoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBwb2xsT25jZSBkb2VzIG9uZSBwb2xsaW5nLCBieSBjYWxsaW5nIHRvIHRoZSB1cGRhdGUgbWV0aG9kIG9mIHRoZSB1bmRlcmx5aW5nXG4gICAgICogcG9sbCBvcGVyYXRpb24gdG8gbWFrZSBhbnkgcmVsZXZhbnQgY2hhbmdlIGVmZmVjdGl2ZS5cbiAgICAgKlxuICAgICAqIEl0IG9ubHkgb3B0aW9uYWxseSByZWNlaXZlcyBhbiBvYmplY3Qgd2l0aCBhbiBhYm9ydFNpZ25hbCBwcm9wZXJ0eSwgZnJvbSBcXEBhenVyZS9hYm9ydC1jb250cm9sbGVyJ3MgQWJvcnRTaWduYWxMaWtlLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBwcm9wZXJ0aWVzIHBhc3NlZCB0byB0aGUgb3BlcmF0aW9uJ3MgdXBkYXRlIG1ldGhvZC5cbiAgICAgKi9cbiAgICBhc3luYyBwb2xsT25jZShvcHRpb25zID0ge30pIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzRG9uZSgpKSB7XG4gICAgICAgICAgICB0aGlzLm9wZXJhdGlvbiA9IGF3YWl0IHRoaXMub3BlcmF0aW9uLnVwZGF0ZSh7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgZmlyZVByb2dyZXNzOiB0aGlzLmZpcmVQcm9ncmVzcy5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcm9jZXNzVXBkYXRlZFN0YXRlKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIGZpcmVQcm9ncmVzcyBjYWxscyB0aGUgZnVuY3Rpb25zIHBhc3NlZCBpbiB2aWEgb25Qcm9ncmVzcyB0aGUgbWV0aG9kIG9mIHRoZSBwb2xsZXIuXG4gICAgICpcbiAgICAgKiBJdCBsb29wcyBvdmVyIGFsbCBvZiB0aGUgY2FsbGJhY2tzIHJlY2VpdmVkIGZyb20gb25Qcm9ncmVzcywgYW5kIGV4ZWN1dGVzIHRoZW0sIHNlbmRpbmcgdGhlbVxuICAgICAqIHRoZSBjdXJyZW50IG9wZXJhdGlvbiBzdGF0ZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzdGF0ZSAtIFRoZSBjdXJyZW50IG9wZXJhdGlvbiBzdGF0ZS5cbiAgICAgKi9cbiAgICBmaXJlUHJvZ3Jlc3Moc3RhdGUpIHtcbiAgICAgICAgZm9yIChjb25zdCBjYWxsYmFjayBvZiB0aGlzLnBvbGxQcm9ncmVzc0NhbGxiYWNrcykge1xuICAgICAgICAgICAgY2FsbGJhY2soc3RhdGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEludm9rZXMgdGhlIHVuZGVybHlpbmcgb3BlcmF0aW9uJ3MgY2FuY2VsIG1ldGhvZC5cbiAgICAgKi9cbiAgICBhc3luYyBjYW5jZWxPbmNlKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICB0aGlzLm9wZXJhdGlvbiA9IGF3YWl0IHRoaXMub3BlcmF0aW9uLmNhbmNlbChvcHRpb25zKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHByb21pc2UgdGhhdCB3aWxsIHJlc29sdmUgb25jZSBhIHNpbmdsZSBwb2xsaW5nIHJlcXVlc3QgZmluaXNoZXMuXG4gICAgICogSXQgZG9lcyB0aGlzIGJ5IGNhbGxpbmcgdGhlIHVwZGF0ZSBtZXRob2Qgb2YgdGhlIFBvbGxlcidzIG9wZXJhdGlvbi5cbiAgICAgKlxuICAgICAqIEl0IG9ubHkgb3B0aW9uYWxseSByZWNlaXZlcyBhbiBvYmplY3Qgd2l0aCBhbiBhYm9ydFNpZ25hbCBwcm9wZXJ0eSwgZnJvbSBcXEBhenVyZS9hYm9ydC1jb250cm9sbGVyJ3MgQWJvcnRTaWduYWxMaWtlLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBwcm9wZXJ0aWVzIHBhc3NlZCB0byB0aGUgb3BlcmF0aW9uJ3MgdXBkYXRlIG1ldGhvZC5cbiAgICAgKi9cbiAgICBwb2xsKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBpZiAoIXRoaXMucG9sbE9uY2VQcm9taXNlKSB7XG4gICAgICAgICAgICB0aGlzLnBvbGxPbmNlUHJvbWlzZSA9IHRoaXMucG9sbE9uY2Uob3B0aW9ucyk7XG4gICAgICAgICAgICBjb25zdCBjbGVhclBvbGxPbmNlUHJvbWlzZSA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnBvbGxPbmNlUHJvbWlzZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLnBvbGxPbmNlUHJvbWlzZS50aGVuKGNsZWFyUG9sbE9uY2VQcm9taXNlLCBjbGVhclBvbGxPbmNlUHJvbWlzZSkuY2F0Y2godGhpcy5yZWplY3QpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnBvbGxPbmNlUHJvbWlzZTtcbiAgICB9XG4gICAgcHJvY2Vzc1VwZGF0ZWRTdGF0ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMub3BlcmF0aW9uLnN0YXRlLmVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCF0aGlzLnJlc29sdmVPblVuc3VjY2Vzc2Z1bCkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVqZWN0KHRoaXMub3BlcmF0aW9uLnN0YXRlLmVycm9yKTtcbiAgICAgICAgICAgICAgICB0aHJvdyB0aGlzLm9wZXJhdGlvbi5zdGF0ZS5lcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcGVyYXRpb24uc3RhdGUuaXNDYW5jZWxsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICBpZiAoIXRoaXMucmVzb2x2ZU9uVW5zdWNjZXNzZnVsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgUG9sbGVyQ2FuY2VsbGVkRXJyb3IoXCJPcGVyYXRpb24gd2FzIGNhbmNlbGVkXCIpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc0RvbmUoKSAmJiB0aGlzLnJlc29sdmUpIHtcbiAgICAgICAgICAgIC8vIElmIHRoZSBwb2xsZXIgaGFzIGZpbmlzaGVkIHBvbGxpbmcsIHRoaXMgbWVhbnMgd2Ugbm93IGhhdmUgYSByZXN1bHQuXG4gICAgICAgICAgICAvLyBIb3dldmVyLCBpdCBjYW4gYmUgdGhlIGNhc2UgdGhhdCBUUmVzdWx0IGlzIGluc3RhbnRpYXRlZCB0byB2b2lkLCBzb1xuICAgICAgICAgICAgLy8gd2UgYXJlIG5vdCBleHBlY3RpbmcgYSByZXN1bHQgYW55d2F5LiBUbyBhc3NlcnQgdGhhdCB3ZSBtaWdodCBub3RcbiAgICAgICAgICAgIC8vIGhhdmUgYSByZXN1bHQgZXZlbnR1YWxseSBhZnRlciBmaW5pc2hpbmcgcG9sbGluZywgd2UgY2FzdCB0aGUgcmVzdWx0XG4gICAgICAgICAgICAvLyB0byBUUmVzdWx0LlxuICAgICAgICAgICAgdGhpcy5yZXNvbHZlKHRoaXMuZ2V0UmVzdWx0KCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBwcm9taXNlIHRoYXQgd2lsbCByZXNvbHZlIG9uY2UgdGhlIHVuZGVybHlpbmcgb3BlcmF0aW9uIGlzIGNvbXBsZXRlZC5cbiAgICAgKi9cbiAgICBhc3luYyBwb2xsVW50aWxEb25lKHBvbGxPcHRpb25zID0ge30pIHtcbiAgICAgICAgaWYgKHRoaXMuc3RvcHBlZCkge1xuICAgICAgICAgICAgdGhpcy5zdGFydFBvbGxpbmcocG9sbE9wdGlvbnMpLmNhdGNoKHRoaXMucmVqZWN0KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIHRoZSBzdGF0ZSBjb3VsZCBoYXZlIGJlZW4gdXBkYXRlZCBieVxuICAgICAgICAvLyBgY2FuY2VsT3BlcmF0aW9uYCwgZS5nLiB0aGUgb3BlcmF0aW9uIGlzIGNhbmNlbGVkIG9yIGFuIGVycm9yIG9jY3VycmVkLlxuICAgICAgICB0aGlzLnByb2Nlc3NVcGRhdGVkU3RhdGUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvbWlzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSW52b2tlcyB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgYWZ0ZXIgZWFjaCBwb2xsaW5nIGlzIGNvbXBsZXRlZCxcbiAgICAgKiBzZW5kaW5nIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBwb2xsZXIncyBvcGVyYXRpb24uXG4gICAgICpcbiAgICAgKiBJdCByZXR1cm5zIGEgbWV0aG9kIHRoYXQgY2FuIGJlIHVzZWQgdG8gc3RvcCByZWNlaXZpbmcgdXBkYXRlcyBvbiB0aGUgZ2l2ZW4gY2FsbGJhY2sgZnVuY3Rpb24uXG4gICAgICovXG4gICAgb25Qcm9ncmVzcyhjYWxsYmFjaykge1xuICAgICAgICB0aGlzLnBvbGxQcm9ncmVzc0NhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucG9sbFByb2dyZXNzQ2FsbGJhY2tzID0gdGhpcy5wb2xsUHJvZ3Jlc3NDYWxsYmFja3MuZmlsdGVyKChjKSA9PiBjICE9PSBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcG9sbGVyIGhhcyBmaW5pc2hlZCBwb2xsaW5nLlxuICAgICAqL1xuICAgIGlzRG9uZSgpIHtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLm9wZXJhdGlvbi5zdGF0ZTtcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4oc3RhdGUuaXNDb21wbGV0ZWQgfHwgc3RhdGUuaXNDYW5jZWxsZWQgfHwgc3RhdGUuZXJyb3IpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTdG9wcyB0aGUgcG9sbGVyIGZyb20gY29udGludWluZyB0byBwb2xsLlxuICAgICAqL1xuICAgIHN0b3BQb2xsaW5nKCkge1xuICAgICAgICBpZiAoIXRoaXMuc3RvcHBlZCkge1xuICAgICAgICAgICAgdGhpcy5zdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlamVjdCkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVqZWN0KG5ldyBQb2xsZXJTdG9wcGVkRXJyb3IoXCJUaGlzIHBvbGxlciBpcyBhbHJlYWR5IHN0b3BwZWRcIikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcG9sbGVyIGlzIHN0b3BwZWQuXG4gICAgICovXG4gICAgaXNTdG9wcGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdG9wcGVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBdHRlbXB0cyB0byBjYW5jZWwgdGhlIHVuZGVybHlpbmcgb3BlcmF0aW9uLlxuICAgICAqXG4gICAgICogSXQgb25seSBvcHRpb25hbGx5IHJlY2VpdmVzIGFuIG9iamVjdCB3aXRoIGFuIGFib3J0U2lnbmFsIHByb3BlcnR5LCBmcm9tIFxcQGF6dXJlL2Fib3J0LWNvbnRyb2xsZXIncyBBYm9ydFNpZ25hbExpa2UuXG4gICAgICpcbiAgICAgKiBJZiBpdCdzIGNhbGxlZCBhZ2FpbiBiZWZvcmUgaXQgZmluaXNoZXMsIGl0IHdpbGwgdGhyb3cgYW4gZXJyb3IuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIHByb3BlcnRpZXMgcGFzc2VkIHRvIHRoZSBvcGVyYXRpb24ncyB1cGRhdGUgbWV0aG9kLlxuICAgICAqL1xuICAgIGNhbmNlbE9wZXJhdGlvbihvcHRpb25zID0ge30pIHtcbiAgICAgICAgaWYgKCF0aGlzLmNhbmNlbFByb21pc2UpIHtcbiAgICAgICAgICAgIHRoaXMuY2FuY2VsUHJvbWlzZSA9IHRoaXMuY2FuY2VsT25jZShvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChvcHRpb25zLmFib3J0U2lnbmFsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBIGNhbmNlbCByZXF1ZXN0IGlzIGN1cnJlbnRseSBwZW5kaW5nXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmNhbmNlbFByb21pc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHN0YXRlIG9mIHRoZSBvcGVyYXRpb24uXG4gICAgICpcbiAgICAgKiBFdmVuIHRob3VnaCBUU3RhdGUgd2lsbCBiZSB0aGUgc2FtZSB0eXBlIGluc2lkZSBhbnkgb2YgdGhlIG1ldGhvZHMgb2YgYW55IGV4dGVuc2lvbiBvZiB0aGUgUG9sbGVyIGNsYXNzLFxuICAgICAqIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgcG9sbGVycyBjYW4gY3VzdG9taXplIHdoYXQncyBzaGFyZWQgd2l0aCB0aGUgcHVibGljIGJ5IHdyaXRpbmcgdGhlaXIgb3duXG4gICAgICogdmVyc2lvbiBvZiB0aGUgYGdldE9wZXJhdGlvblN0YXRlYCBtZXRob2QsIGFuZCBieSBkZWZpbmluZyB0d28gdHlwZXMsIG9uZSByZXByZXNlbnRpbmcgdGhlIGludGVybmFsIHN0YXRlIG9mIHRoZSBwb2xsZXJcbiAgICAgKiBhbmQgYSBwdWJsaWMgdHlwZSByZXByZXNlbnRpbmcgYSBzYWZlIHRvIHNoYXJlIHN1YnNldCBvZiB0aGUgcHJvcGVydGllcyBvZiB0aGUgaW50ZXJuYWwgc3RhdGUuXG4gICAgICogVGhlaXIgZGVmaW5pdGlvbiBvZiBnZXRPcGVyYXRpb25TdGF0ZSBjYW4gdGhlbiByZXR1cm4gdGhlaXIgcHVibGljIHR5cGUuXG4gICAgICpcbiAgICAgKiBFeGFtcGxlOlxuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiAvLyBMZXQncyBzYXkgd2UgaGF2ZSBvdXIgcG9sbGVyJ3Mgb3BlcmF0aW9uIHN0YXRlIGRlZmluZWQgYXM6XG4gICAgICogaW50ZXJmYWNlIE15T3BlcmF0aW9uU3RhdGUgZXh0ZW5kcyBQb2xsT3BlcmF0aW9uU3RhdGU8UmVzdWx0VHlwZT4ge1xuICAgICAqICAgcHJpdmF0ZVByb3BlcnR5Pzogc3RyaW5nO1xuICAgICAqICAgcHVibGljUHJvcGVydHk/OiBzdHJpbmc7XG4gICAgICogfVxuICAgICAqXG4gICAgICogLy8gVG8gYWxsb3cgdXMgdG8gaGF2ZSBhIHRydWUgc2VwYXJhdGlvbiBvZiBwdWJsaWMgYW5kIHByaXZhdGUgc3RhdGUsIHdlIGhhdmUgdG8gZGVmaW5lIGFub3RoZXIgaW50ZXJmYWNlOlxuICAgICAqIGludGVyZmFjZSBQdWJsaWNTdGF0ZSBleHRlbmRzIFBvbGxPcGVyYXRpb25TdGF0ZTxSZXN1bHRUeXBlPiB7XG4gICAgICogICBwdWJsaWNQcm9wZXJ0eT86IHN0cmluZztcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBUaGVuLCB3ZSBkZWZpbmUgb3VyIFBvbGxlciBhcyBmb2xsb3dzOlxuICAgICAqIGV4cG9ydCBjbGFzcyBNeVBvbGxlciBleHRlbmRzIFBvbGxlcjxNeU9wZXJhdGlvblN0YXRlLCBSZXN1bHRUeXBlPiB7XG4gICAgICogICAvLyAuLi4gTW9yZSBjb250ZW50IGlzIG5lZWRlZCBoZXJlIC4uLlxuICAgICAqXG4gICAgICogICBwdWJsaWMgZ2V0T3BlcmF0aW9uU3RhdGUoKTogUHVibGljU3RhdGUge1xuICAgICAqICAgICBjb25zdCBzdGF0ZTogUHVibGljU3RhdGUgPSB0aGlzLm9wZXJhdGlvbi5zdGF0ZTtcbiAgICAgKiAgICAgcmV0dXJuIHtcbiAgICAgKiAgICAgICAvLyBQcm9wZXJ0aWVzIGZyb20gUG9sbE9wZXJhdGlvblN0YXRlPFRSZXN1bHQ+XG4gICAgICogICAgICAgaXNTdGFydGVkOiBzdGF0ZS5pc1N0YXJ0ZWQsXG4gICAgICogICAgICAgaXNDb21wbGV0ZWQ6IHN0YXRlLmlzQ29tcGxldGVkLFxuICAgICAqICAgICAgIGlzQ2FuY2VsbGVkOiBzdGF0ZS5pc0NhbmNlbGxlZCxcbiAgICAgKiAgICAgICBlcnJvcjogc3RhdGUuZXJyb3IsXG4gICAgICogICAgICAgcmVzdWx0OiBzdGF0ZS5yZXN1bHQsXG4gICAgICpcbiAgICAgKiAgICAgICAvLyBUaGUgb25seSBvdGhlciBwcm9wZXJ0eSBuZWVkZWQgYnkgUHVibGljU3RhdGUuXG4gICAgICogICAgICAgcHVibGljUHJvcGVydHk6IHN0YXRlLnB1YmxpY1Byb3BlcnR5XG4gICAgICogICAgIH1cbiAgICAgKiAgIH1cbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBZb3UgY2FuIHNlZSB0aGlzIGluIHRoZSB0ZXN0cyBvZiB0aGlzIHJlcG9zaXRvcnksIGdvIHRvIHRoZSBmaWxlOlxuICAgICAqIGAuLi90ZXN0L3V0aWxzL3Rlc3RQb2xsZXIudHNgXG4gICAgICogYW5kIGxvb2sgZm9yIHRoZSBnZXRPcGVyYXRpb25TdGF0ZSBpbXBsZW1lbnRhdGlvbi5cbiAgICAgKi9cbiAgICBnZXRPcGVyYXRpb25TdGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3BlcmF0aW9uLnN0YXRlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgdmFsdWUgb2YgdGhlIG9wZXJhdGlvbixcbiAgICAgKiByZWdhcmRsZXNzIG9mIHRoZSBzdGF0ZSBvZiB0aGUgcG9sbGVyLlxuICAgICAqIEl0IGNhbiByZXR1cm4gdW5kZWZpbmVkIG9yIGFuIGluY29tcGxldGUgZm9ybSBvZiB0aGUgZmluYWwgVFJlc3VsdCB2YWx1ZVxuICAgICAqIGRlcGVuZGluZyBvbiB0aGUgaW1wbGVtZW50YXRpb24uXG4gICAgICovXG4gICAgZ2V0UmVzdWx0KCkge1xuICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMub3BlcmF0aW9uLnN0YXRlO1xuICAgICAgICByZXR1cm4gc3RhdGUucmVzdWx0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgc2VyaWFsaXplZCB2ZXJzaW9uIG9mIHRoZSBwb2xsZXIncyBvcGVyYXRpb25cbiAgICAgKiBieSBpbnZva2luZyB0aGUgb3BlcmF0aW9uJ3MgdG9TdHJpbmcgbWV0aG9kLlxuICAgICAqL1xuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcGVyYXRpb24udG9TdHJpbmcoKTtcbiAgICB9XG59XG5leHBvcnRzLlBvbGxlciA9IFBvbGxlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBvbGxlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkxyb0VuZ2luZSA9IHZvaWQgMDtcbmNvbnN0IG9wZXJhdGlvbl9qc18xID0gcmVxdWlyZShcIi4vb3BlcmF0aW9uLmpzXCIpO1xuY29uc3QgY29uc3RhbnRzX2pzXzEgPSByZXF1aXJlKFwiLi4vLi4vcG9sbGVyL2NvbnN0YW50cy5qc1wiKTtcbmNvbnN0IHBvbGxlcl9qc18xID0gcmVxdWlyZShcIi4uL3BvbGxlci5qc1wiKTtcbmNvbnN0IG9wZXJhdGlvbl9qc18yID0gcmVxdWlyZShcIi4uLy4uL3BvbGxlci9vcGVyYXRpb24uanNcIik7XG4vKipcbiAqIFRoZSBMUk8gRW5naW5lLCBhIGNsYXNzIHRoYXQgcGVyZm9ybXMgcG9sbGluZy5cbiAqL1xuY2xhc3MgTHJvRW5naW5lIGV4dGVuZHMgcG9sbGVyX2pzXzEuUG9sbGVyIHtcbiAgICBjb25zdHJ1Y3Rvcihscm8sIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgeyBpbnRlcnZhbEluTXMgPSBjb25zdGFudHNfanNfMS5QT0xMX0lOVEVSVkFMX0lOX01TLCByZXN1bWVGcm9tLCByZXNvbHZlT25VbnN1Y2Nlc3NmdWwgPSBmYWxzZSwgaXNEb25lLCBscm9SZXNvdXJjZUxvY2F0aW9uQ29uZmlnLCBwcm9jZXNzUmVzdWx0LCB1cGRhdGVTdGF0ZSwgfSA9IG9wdGlvbnMgfHwge307XG4gICAgICAgIGNvbnN0IHN0YXRlID0gcmVzdW1lRnJvbVxuICAgICAgICAgICAgPyAoMCwgb3BlcmF0aW9uX2pzXzIuZGVzZXJpYWxpemVTdGF0ZSkocmVzdW1lRnJvbSlcbiAgICAgICAgICAgIDoge307XG4gICAgICAgIGNvbnN0IG9wZXJhdGlvbiA9IG5ldyBvcGVyYXRpb25fanNfMS5HZW5lcmljUG9sbE9wZXJhdGlvbihzdGF0ZSwgbHJvLCAhcmVzb2x2ZU9uVW5zdWNjZXNzZnVsLCBscm9SZXNvdXJjZUxvY2F0aW9uQ29uZmlnLCBwcm9jZXNzUmVzdWx0LCB1cGRhdGVTdGF0ZSwgaXNEb25lKTtcbiAgICAgICAgc3VwZXIob3BlcmF0aW9uKTtcbiAgICAgICAgdGhpcy5yZXNvbHZlT25VbnN1Y2Nlc3NmdWwgPSByZXNvbHZlT25VbnN1Y2Nlc3NmdWw7XG4gICAgICAgIHRoaXMuY29uZmlnID0geyBpbnRlcnZhbEluTXM6IGludGVydmFsSW5NcyB9O1xuICAgICAgICBvcGVyYXRpb24uc2V0UG9sbGVyQ29uZmlnKHRoaXMuY29uZmlnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIG1ldGhvZCB1c2VkIGJ5IHRoZSBwb2xsZXIgdG8gd2FpdCBiZWZvcmUgYXR0ZW1wdGluZyB0byB1cGRhdGUgaXRzIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBkZWxheSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KCgpID0+IHJlc29sdmUoKSwgdGhpcy5jb25maWcuaW50ZXJ2YWxJbk1zKSk7XG4gICAgfVxufVxuZXhwb3J0cy5Mcm9FbmdpbmUgPSBMcm9FbmdpbmU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1scm9FbmdpbmUuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Mcm9FbmdpbmUgPSB2b2lkIDA7XG52YXIgbHJvRW5naW5lX2pzXzEgPSByZXF1aXJlKFwiLi9scm9FbmdpbmUuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJMcm9FbmdpbmVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGxyb0VuZ2luZV9qc18xLkxyb0VuZ2luZTsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBvbGxPcGVyYXRpb24uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jcmVhdGVIdHRwUG9sbGVyID0gdm9pZCAwO1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbnZhciBwb2xsZXJfanNfMSA9IHJlcXVpcmUoXCIuL2h0dHAvcG9sbGVyLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlSHR0cFBvbGxlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcG9sbGVyX2pzXzEuY3JlYXRlSHR0cFBvbGxlcjsgfSB9KTtcbi8qKlxuICogVGhpcyBjYW4gYmUgdW5jb21tZW50ZWQgdG8gZXhwb3NlIHRoZSBwcm90b2NvbC1hZ25vc3RpYyBwb2xsZXJcbiAqL1xuLy8gZXhwb3J0IHtcbi8vICAgQnVpbGRDcmVhdGVQb2xsZXJPcHRpb25zLFxuLy8gICBPcGVyYXRpb24sXG4vLyAgIENyZWF0ZVBvbGxlck9wdGlvbnMsXG4vLyAgIE9wZXJhdGlvbkNvbmZpZyxcbi8vICAgUmVzdG9yYWJsZU9wZXJhdGlvblN0YXRlLFxuLy8gfSBmcm9tIFwiLi9wb2xsZXIvbW9kZWxzXCI7XG4vLyBleHBvcnQgeyBidWlsZENyZWF0ZVBvbGxlciB9IGZyb20gXCIuL3BvbGxlci9wb2xsZXJcIjtcbi8qKiBsZWdhY3kgKi9cbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2xlZ2FjeS9scm9FbmdpbmUvaW5kZXguanNcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vbGVnYWN5L3BvbGxlci5qc1wiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9sZWdhY3kvcG9sbE9wZXJhdGlvbi5qc1wiKSwgZXhwb3J0cyk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxudmFyIGNvcmVSZXN0UGlwZWxpbmUgPSByZXF1aXJlKCdAYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lJyk7XG52YXIgdHNsaWIgPSByZXF1aXJlKCd0c2xpYicpO1xudmFyIGNvcmVBdXRoID0gcmVxdWlyZSgnQGF6dXJlL2NvcmUtYXV0aCcpO1xudmFyIGNvcmVVdGlsID0gcmVxdWlyZSgnQGF6dXJlL2NvcmUtdXRpbCcpO1xudmFyIGNvcmVIdHRwQ29tcGF0ID0gcmVxdWlyZSgnQGF6dXJlL2NvcmUtaHR0cC1jb21wYXQnKTtcbnZhciBjb3JlQ2xpZW50ID0gcmVxdWlyZSgnQGF6dXJlL2NvcmUtY2xpZW50Jyk7XG52YXIgY29yZVhtbCA9IHJlcXVpcmUoJ0BhenVyZS9jb3JlLXhtbCcpO1xudmFyIGxvZ2dlciQxID0gcmVxdWlyZSgnQGF6dXJlL2xvZ2dlcicpO1xudmFyIGFib3J0Q29udHJvbGxlciA9IHJlcXVpcmUoJ0BhenVyZS9hYm9ydC1jb250cm9sbGVyJyk7XG52YXIgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJyk7XG52YXIgY29yZVRyYWNpbmcgPSByZXF1aXJlKCdAYXp1cmUvY29yZS10cmFjaW5nJyk7XG52YXIgc3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJyk7XG52YXIgY29yZUxybyA9IHJlcXVpcmUoJ0BhenVyZS9jb3JlLWxybycpO1xudmFyIGV2ZW50cyA9IHJlcXVpcmUoJ2V2ZW50cycpO1xudmFyIGZzID0gcmVxdWlyZSgnZnMnKTtcbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xudmFyIGJ1ZmZlciA9IHJlcXVpcmUoJ2J1ZmZlcicpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcE5hbWVzcGFjZURlZmF1bHQoZSkge1xuICAgIHZhciBuID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICBpZiAoZSkge1xuICAgICAgICBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICBpZiAoayAhPT0gJ2RlZmF1bHQnKSB7XG4gICAgICAgICAgICAgICAgdmFyIGQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIGspO1xuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCBrLCBkLmdldCA/IGQgOiB7XG4gICAgICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZVtrXTsgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgbi5kZWZhdWx0ID0gZTtcbiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZShuKTtcbn1cblxudmFyIGNvcmVIdHRwQ29tcGF0X19uYW1lc3BhY2UgPSAvKiNfX1BVUkVfXyovX2ludGVyb3BOYW1lc3BhY2VEZWZhdWx0KGNvcmVIdHRwQ29tcGF0KTtcbnZhciBjb3JlQ2xpZW50X19uYW1lc3BhY2UgPSAvKiNfX1BVUkVfXyovX2ludGVyb3BOYW1lc3BhY2VEZWZhdWx0KGNvcmVDbGllbnQpO1xudmFyIGZzX19uYW1lc3BhY2UgPSAvKiNfX1BVUkVfXyovX2ludGVyb3BOYW1lc3BhY2VEZWZhdWx0KGZzKTtcbnZhciB1dGlsX19uYW1lc3BhY2UgPSAvKiNfX1BVUkVfXyovX2ludGVyb3BOYW1lc3BhY2VEZWZhdWx0KHV0aWwpO1xuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogVGhlIGBAYXp1cmUvbG9nZ2VyYCBjb25maWd1cmF0aW9uIGZvciB0aGlzIHBhY2thZ2UuXG4gKi9cbmNvbnN0IGxvZ2dlciA9IGxvZ2dlciQxLmNyZWF0ZUNsaWVudExvZ2dlcihcInN0b3JhZ2UtYmxvYlwiKTtcblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIFRoZSBiYXNlIGNsYXNzIGZyb20gd2hpY2ggYWxsIHJlcXVlc3QgcG9saWNpZXMgZGVyaXZlLlxuICovXG5jbGFzcyBCYXNlUmVxdWVzdFBvbGljeSB7XG4gICAgLyoqXG4gICAgICogVGhlIG1haW4gbWV0aG9kIHRvIGltcGxlbWVudCB0aGF0IG1hbmlwdWxhdGVzIGEgcmVxdWVzdC9yZXNwb25zZS5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAvKipcbiAgICAgKiBUaGUgbmV4dCBwb2xpY3kgaW4gdGhlIHBpcGVsaW5lLiBFYWNoIHBvbGljeSBpcyByZXNwb25zaWJsZSBmb3IgZXhlY3V0aW5nIHRoZSBuZXh0IG9uZSBpZiB0aGUgcmVxdWVzdCBpcyB0byBjb250aW51ZSB0aHJvdWdoIHRoZSBwaXBlbGluZS5cbiAgICAgKi9cbiAgICBfbmV4dFBvbGljeSwgXG4gICAgLyoqXG4gICAgICogVGhlIG9wdGlvbnMgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIGEgZ2l2ZW4gcmVxdWVzdCBwb2xpY3kuXG4gICAgICovXG4gICAgX29wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5fbmV4dFBvbGljeSA9IF9uZXh0UG9saWN5O1xuICAgICAgICB0aGlzLl9vcHRpb25zID0gX29wdGlvbnM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCB3aGV0aGVyIG9yIG5vdCBhIGxvZyB3aXRoIHRoZSBwcm92aWRlZCBsb2cgbGV2ZWwgc2hvdWxkIGJlIGxvZ2dlZC5cbiAgICAgKiBAcGFyYW0gbG9nTGV2ZWwgLSBUaGUgbG9nIGxldmVsIG9mIHRoZSBsb2cgdGhhdCB3aWxsIGJlIGxvZ2dlZC5cbiAgICAgKiBAcmV0dXJucyBXaGV0aGVyIG9yIG5vdCBhIGxvZyB3aXRoIHRoZSBwcm92aWRlZCBsb2cgbGV2ZWwgc2hvdWxkIGJlIGxvZ2dlZC5cbiAgICAgKi9cbiAgICBzaG91bGRMb2cobG9nTGV2ZWwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29wdGlvbnMuc2hvdWxkTG9nKGxvZ0xldmVsKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQXR0ZW1wdCB0byBsb2cgdGhlIHByb3ZpZGVkIG1lc3NhZ2UgdG8gdGhlIHByb3ZpZGVkIGxvZ2dlci4gSWYgbm8gbG9nZ2VyIHdhcyBwcm92aWRlZCBvciBpZlxuICAgICAqIHRoZSBsb2cgbGV2ZWwgZG9lcyBub3QgbWVhdCB0aGUgbG9nZ2VyJ3MgdGhyZXNob2xkLCB0aGVuIG5vdGhpbmcgd2lsbCBiZSBsb2dnZWQuXG4gICAgICogQHBhcmFtIGxvZ0xldmVsIC0gVGhlIGxvZyBsZXZlbCBvZiB0aGlzIGxvZy5cbiAgICAgKiBAcGFyYW0gbWVzc2FnZSAtIFRoZSBtZXNzYWdlIG9mIHRoaXMgbG9nLlxuICAgICAqL1xuICAgIGxvZyhsb2dMZXZlbCwgbWVzc2FnZSkge1xuICAgICAgICB0aGlzLl9vcHRpb25zLmxvZyhsb2dMZXZlbCwgbWVzc2FnZSk7XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbmNvbnN0IFNES19WRVJTSU9OID0gXCIxMi4yNS4wXCI7XG5jb25zdCBTRVJWSUNFX1ZFUlNJT04gPSBcIjIwMjQtMTEtMDRcIjtcbmNvbnN0IEJMT0NLX0JMT0JfTUFYX1VQTE9BRF9CTE9CX0JZVEVTID0gMjU2ICogMTAyNCAqIDEwMjQ7IC8vIDI1Nk1CXG5jb25zdCBCTE9DS19CTE9CX01BWF9TVEFHRV9CTE9DS19CWVRFUyA9IDQwMDAgKiAxMDI0ICogMTAyNDsgLy8gNDAwME1CXG5jb25zdCBCTE9DS19CTE9CX01BWF9CTE9DS1MgPSA1MDAwMDtcbmNvbnN0IERFRkFVTFRfQkxPQ0tfQlVGRkVSX1NJWkVfQllURVMgPSA4ICogMTAyNCAqIDEwMjQ7IC8vIDhNQlxuY29uc3QgREVGQVVMVF9CTE9CX0RPV05MT0FEX0JMT0NLX0JZVEVTID0gNCAqIDEwMjQgKiAxMDI0OyAvLyA0TUJcbmNvbnN0IERFRkFVTFRfTUFYX0RPV05MT0FEX1JFVFJZX1JFUVVFU1RTID0gNTtcbmNvbnN0IFJFUVVFU1RfVElNRU9VVCA9IDEwMCAqIDEwMDA7IC8vIEluIG1zXG4vKipcbiAqIFRoZSBPQXV0aCBzY29wZSB0byB1c2Ugd2l0aCBBenVyZSBTdG9yYWdlLlxuICovXG5jb25zdCBTdG9yYWdlT0F1dGhTY29wZXMgPSBcImh0dHBzOi8vc3RvcmFnZS5henVyZS5jb20vLmRlZmF1bHRcIjtcbmNvbnN0IFVSTENvbnN0YW50cyA9IHtcbiAgICBQYXJhbWV0ZXJzOiB7XG4gICAgICAgIEZPUkNFX0JST1dTRVJfTk9fQ0FDSEU6IFwiX1wiLFxuICAgICAgICBTSUdOQVRVUkU6IFwic2lnXCIsXG4gICAgICAgIFNOQVBTSE9UOiBcInNuYXBzaG90XCIsXG4gICAgICAgIFZFUlNJT05JRDogXCJ2ZXJzaW9uaWRcIixcbiAgICAgICAgVElNRU9VVDogXCJ0aW1lb3V0XCIsXG4gICAgfSxcbn07XG5jb25zdCBIVFRQVVJMQ29ubmVjdGlvbiA9IHtcbiAgICBIVFRQX0FDQ0VQVEVEOiAyMDIsXG4gICAgSFRUUF9DT05GTElDVDogNDA5LFxuICAgIEhUVFBfTk9UX0ZPVU5EOiA0MDQsXG4gICAgSFRUUF9QUkVDT05fRkFJTEVEOiA0MTIsXG4gICAgSFRUUF9SQU5HRV9OT1RfU0FUSVNGSUFCTEU6IDQxNixcbn07XG5jb25zdCBIZWFkZXJDb25zdGFudHMgPSB7XG4gICAgQVVUSE9SSVpBVElPTjogXCJBdXRob3JpemF0aW9uXCIsXG4gICAgQVVUSE9SSVpBVElPTl9TQ0hFTUU6IFwiQmVhcmVyXCIsXG4gICAgQ09OVEVOVF9FTkNPRElORzogXCJDb250ZW50LUVuY29kaW5nXCIsXG4gICAgQ09OVEVOVF9JRDogXCJDb250ZW50LUlEXCIsXG4gICAgQ09OVEVOVF9MQU5HVUFHRTogXCJDb250ZW50LUxhbmd1YWdlXCIsXG4gICAgQ09OVEVOVF9MRU5HVEg6IFwiQ29udGVudC1MZW5ndGhcIixcbiAgICBDT05URU5UX01ENTogXCJDb250ZW50LU1kNVwiLFxuICAgIENPTlRFTlRfVFJBTlNGRVJfRU5DT0RJTkc6IFwiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZ1wiLFxuICAgIENPTlRFTlRfVFlQRTogXCJDb250ZW50LVR5cGVcIixcbiAgICBDT09LSUU6IFwiQ29va2llXCIsXG4gICAgREFURTogXCJkYXRlXCIsXG4gICAgSUZfTUFUQ0g6IFwiaWYtbWF0Y2hcIixcbiAgICBJRl9NT0RJRklFRF9TSU5DRTogXCJpZi1tb2RpZmllZC1zaW5jZVwiLFxuICAgIElGX05PTkVfTUFUQ0g6IFwiaWYtbm9uZS1tYXRjaFwiLFxuICAgIElGX1VOTU9ESUZJRURfU0lOQ0U6IFwiaWYtdW5tb2RpZmllZC1zaW5jZVwiLFxuICAgIFBSRUZJWF9GT1JfU1RPUkFHRTogXCJ4LW1zLVwiLFxuICAgIFJBTkdFOiBcIlJhbmdlXCIsXG4gICAgVVNFUl9BR0VOVDogXCJVc2VyLUFnZW50XCIsXG4gICAgWF9NU19DTElFTlRfUkVRVUVTVF9JRDogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgWF9NU19DT1BZX1NPVVJDRTogXCJ4LW1zLWNvcHktc291cmNlXCIsXG4gICAgWF9NU19EQVRFOiBcIngtbXMtZGF0ZVwiLFxuICAgIFhfTVNfRVJST1JfQ09ERTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICBYX01TX1ZFUlNJT046IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgWF9NU19Db3B5U291cmNlRXJyb3JDb2RlOiBcIngtbXMtY29weS1zb3VyY2UtZXJyb3ItY29kZVwiLFxufTtcbmNvbnN0IEVUYWdOb25lID0gXCJcIjtcbmNvbnN0IEVUYWdBbnkgPSBcIipcIjtcbmNvbnN0IFNJWkVfMV9NQiA9IDEgKiAxMDI0ICogMTAyNDtcbmNvbnN0IEJBVENIX01BWF9SRVFVRVNUID0gMjU2O1xuY29uc3QgQkFUQ0hfTUFYX1BBWUxPQURfSU5fQllURVMgPSA0ICogU0laRV8xX01CO1xuY29uc3QgSFRUUF9MSU5FX0VORElORyA9IFwiXFxyXFxuXCI7XG5jb25zdCBIVFRQX1ZFUlNJT05fMV8xID0gXCJIVFRQLzEuMVwiO1xuY29uc3QgRW5jcnlwdGlvbkFsZ29yaXRobUFFUzI1ID0gXCJBRVMyNTZcIjtcbmNvbnN0IERldmVsb3BtZW50Q29ubmVjdGlvblN0cmluZyA9IGBEZWZhdWx0RW5kcG9pbnRzUHJvdG9jb2w9aHR0cDtBY2NvdW50TmFtZT1kZXZzdG9yZWFjY291bnQxO0FjY291bnRLZXk9RWJ5OHZkTTAyeE5PY3FGbHFVd0pQTGxtRXRsQ0RYSjFPVXpGVDUwdVNSWjZJRnN1RnEyVVZFckN6NEk2dHEvSzFTWkZQVE90ci9LQkhCZWtzb0dNR3c9PTtCbG9iRW5kcG9pbnQ9aHR0cDovLzEyNy4wLjAuMToxMDAwMC9kZXZzdG9yZWFjY291bnQxO2A7XG5jb25zdCBTdG9yYWdlQmxvYkxvZ2dpbmdBbGxvd2VkSGVhZGVyTmFtZXMgPSBbXG4gICAgXCJBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW5cIixcbiAgICBcIkNhY2hlLUNvbnRyb2xcIixcbiAgICBcIkNvbnRlbnQtTGVuZ3RoXCIsXG4gICAgXCJDb250ZW50LVR5cGVcIixcbiAgICBcIkRhdGVcIixcbiAgICBcIlJlcXVlc3QtSWRcIixcbiAgICBcInRyYWNlcGFyZW50XCIsXG4gICAgXCJUcmFuc2Zlci1FbmNvZGluZ1wiLFxuICAgIFwiVXNlci1BZ2VudFwiLFxuICAgIFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgIFwieC1tcy1kYXRlXCIsXG4gICAgXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgIFwieC1tcy1yZXR1cm4tY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICBcIngtbXMtdmVyc2lvblwiLFxuICAgIFwiQWNjZXB0LVJhbmdlc1wiLFxuICAgIFwiQ29udGVudC1EaXNwb3NpdGlvblwiLFxuICAgIFwiQ29udGVudC1FbmNvZGluZ1wiLFxuICAgIFwiQ29udGVudC1MYW5ndWFnZVwiLFxuICAgIFwiQ29udGVudC1NRDVcIixcbiAgICBcIkNvbnRlbnQtUmFuZ2VcIixcbiAgICBcIkVUYWdcIixcbiAgICBcIkxhc3QtTW9kaWZpZWRcIixcbiAgICBcIlNlcnZlclwiLFxuICAgIFwiVmFyeVwiLFxuICAgIFwieC1tcy1jb250ZW50LWNyYzY0XCIsXG4gICAgXCJ4LW1zLWNvcHktYWN0aW9uXCIsXG4gICAgXCJ4LW1zLWNvcHktY29tcGxldGlvbi10aW1lXCIsXG4gICAgXCJ4LW1zLWNvcHktaWRcIixcbiAgICBcIngtbXMtY29weS1wcm9ncmVzc1wiLFxuICAgIFwieC1tcy1jb3B5LXN0YXR1c1wiLFxuICAgIFwieC1tcy1oYXMtaW1tdXRhYmlsaXR5LXBvbGljeVwiLFxuICAgIFwieC1tcy1oYXMtbGVnYWwtaG9sZFwiLFxuICAgIFwieC1tcy1sZWFzZS1zdGF0ZVwiLFxuICAgIFwieC1tcy1sZWFzZS1zdGF0dXNcIixcbiAgICBcIngtbXMtcmFuZ2VcIixcbiAgICBcIngtbXMtcmVxdWVzdC1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgXCJ4LW1zLXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICBcIngtbXMtc25hcHNob3RcIixcbiAgICBcIngtbXMtc291cmNlLXJhbmdlXCIsXG4gICAgXCJJZi1NYXRjaFwiLFxuICAgIFwiSWYtTW9kaWZpZWQtU2luY2VcIixcbiAgICBcIklmLU5vbmUtTWF0Y2hcIixcbiAgICBcIklmLVVubW9kaWZpZWQtU2luY2VcIixcbiAgICBcIngtbXMtYWNjZXNzLXRpZXJcIixcbiAgICBcIngtbXMtYWNjZXNzLXRpZXItY2hhbmdlLXRpbWVcIixcbiAgICBcIngtbXMtYWNjZXNzLXRpZXItaW5mZXJyZWRcIixcbiAgICBcIngtbXMtYWNjb3VudC1raW5kXCIsXG4gICAgXCJ4LW1zLWFyY2hpdmUtc3RhdHVzXCIsXG4gICAgXCJ4LW1zLWJsb2ItYXBwZW5kLW9mZnNldFwiLFxuICAgIFwieC1tcy1ibG9iLWNhY2hlLWNvbnRyb2xcIixcbiAgICBcIngtbXMtYmxvYi1jb21taXR0ZWQtYmxvY2stY291bnRcIixcbiAgICBcIngtbXMtYmxvYi1jb25kaXRpb24tYXBwZW5kcG9zXCIsXG4gICAgXCJ4LW1zLWJsb2ItY29uZGl0aW9uLW1heHNpemVcIixcbiAgICBcIngtbXMtYmxvYi1jb250ZW50LWRpc3Bvc2l0aW9uXCIsXG4gICAgXCJ4LW1zLWJsb2ItY29udGVudC1lbmNvZGluZ1wiLFxuICAgIFwieC1tcy1ibG9iLWNvbnRlbnQtbGFuZ3VhZ2VcIixcbiAgICBcIngtbXMtYmxvYi1jb250ZW50LWxlbmd0aFwiLFxuICAgIFwieC1tcy1ibG9iLWNvbnRlbnQtbWQ1XCIsXG4gICAgXCJ4LW1zLWJsb2ItY29udGVudC10eXBlXCIsXG4gICAgXCJ4LW1zLWJsb2ItcHVibGljLWFjY2Vzc1wiLFxuICAgIFwieC1tcy1ibG9iLXNlcXVlbmNlLW51bWJlclwiLFxuICAgIFwieC1tcy1ibG9iLXR5cGVcIixcbiAgICBcIngtbXMtY29weS1kZXN0aW5hdGlvbi1zbmFwc2hvdFwiLFxuICAgIFwieC1tcy1jcmVhdGlvbi10aW1lXCIsXG4gICAgXCJ4LW1zLWRlZmF1bHQtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgIFwieC1tcy1kZWxldGUtc25hcHNob3RzXCIsXG4gICAgXCJ4LW1zLWRlbGV0ZS10eXBlLXBlcm1hbmVudFwiLFxuICAgIFwieC1tcy1kZW55LWVuY3J5cHRpb24tc2NvcGUtb3ZlcnJpZGVcIixcbiAgICBcIngtbXMtZW5jcnlwdGlvbi1hbGdvcml0aG1cIixcbiAgICBcIngtbXMtaWYtc2VxdWVuY2UtbnVtYmVyLWVxXCIsXG4gICAgXCJ4LW1zLWlmLXNlcXVlbmNlLW51bWJlci1sZVwiLFxuICAgIFwieC1tcy1pZi1zZXF1ZW5jZS1udW1iZXItbHRcIixcbiAgICBcIngtbXMtaW5jcmVtZW50YWwtY29weVwiLFxuICAgIFwieC1tcy1sZWFzZS1hY3Rpb25cIixcbiAgICBcIngtbXMtbGVhc2UtYnJlYWstcGVyaW9kXCIsXG4gICAgXCJ4LW1zLWxlYXNlLWR1cmF0aW9uXCIsXG4gICAgXCJ4LW1zLWxlYXNlLWlkXCIsXG4gICAgXCJ4LW1zLWxlYXNlLXRpbWVcIixcbiAgICBcIngtbXMtcGFnZS13cml0ZVwiLFxuICAgIFwieC1tcy1wcm9wb3NlZC1sZWFzZS1pZFwiLFxuICAgIFwieC1tcy1yYW5nZS1nZXQtY29udGVudC1tZDVcIixcbiAgICBcIngtbXMtcmVoeWRyYXRlLXByaW9yaXR5XCIsXG4gICAgXCJ4LW1zLXNlcXVlbmNlLW51bWJlci1hY3Rpb25cIixcbiAgICBcIngtbXMtc2t1LW5hbWVcIixcbiAgICBcIngtbXMtc291cmNlLWNvbnRlbnQtbWQ1XCIsXG4gICAgXCJ4LW1zLXNvdXJjZS1pZi1tYXRjaFwiLFxuICAgIFwieC1tcy1zb3VyY2UtaWYtbW9kaWZpZWQtc2luY2VcIixcbiAgICBcIngtbXMtc291cmNlLWlmLW5vbmUtbWF0Y2hcIixcbiAgICBcIngtbXMtc291cmNlLWlmLXVubW9kaWZpZWQtc2luY2VcIixcbiAgICBcIngtbXMtdGFnLWNvdW50XCIsXG4gICAgXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgIFwieC1tcy1jb3B5LXNvdXJjZS1lcnJvci1jb2RlXCIsXG4gICAgXCJ4LW1zLWNvcHktc291cmNlLXN0YXR1cy1jb2RlXCIsXG4gICAgXCJ4LW1zLWlmLXRhZ3NcIixcbiAgICBcIngtbXMtc291cmNlLWlmLXRhZ3NcIixcbl07XG5jb25zdCBTdG9yYWdlQmxvYkxvZ2dpbmdBbGxvd2VkUXVlcnlQYXJhbWV0ZXJzID0gW1xuICAgIFwiY29tcFwiLFxuICAgIFwibWF4cmVzdWx0c1wiLFxuICAgIFwicnNjY1wiLFxuICAgIFwicnNjZFwiLFxuICAgIFwicnNjZVwiLFxuICAgIFwicnNjbFwiLFxuICAgIFwicnNjdFwiLFxuICAgIFwic2VcIixcbiAgICBcInNpXCIsXG4gICAgXCJzaXBcIixcbiAgICBcInNwXCIsXG4gICAgXCJzcHJcIixcbiAgICBcInNyXCIsXG4gICAgXCJzcnRcIixcbiAgICBcInNzXCIsXG4gICAgXCJzdFwiLFxuICAgIFwic3ZcIixcbiAgICBcImluY2x1ZGVcIixcbiAgICBcIm1hcmtlclwiLFxuICAgIFwicHJlZml4XCIsXG4gICAgXCJjb3B5aWRcIixcbiAgICBcInJlc3R5cGVcIixcbiAgICBcImJsb2NraWRcIixcbiAgICBcImJsb2NrbGlzdHR5cGVcIixcbiAgICBcImRlbGltaXRlclwiLFxuICAgIFwicHJldnNuYXBzaG90XCIsXG4gICAgXCJza2VcIixcbiAgICBcInNrb2lkXCIsXG4gICAgXCJza3NcIixcbiAgICBcInNrdFwiLFxuICAgIFwic2t0aWRcIixcbiAgICBcInNrdlwiLFxuICAgIFwic25hcHNob3RcIixcbl07XG5jb25zdCBCbG9iVXNlc0N1c3RvbWVyU3BlY2lmaWVkRW5jcnlwdGlvbk1zZyA9IFwiQmxvYlVzZXNDdXN0b21lclNwZWNpZmllZEVuY3J5cHRpb25cIjtcbmNvbnN0IEJsb2JEb2VzTm90VXNlQ3VzdG9tZXJTcGVjaWZpZWRFbmNyeXB0aW9uID0gXCJCbG9iRG9lc05vdFVzZUN1c3RvbWVyU3BlY2lmaWVkRW5jcnlwdGlvblwiO1xuLy8vIExpc3Qgb2YgcG9ydHMgdXNlZCBmb3IgcGF0aCBzdHlsZSBhZGRyZXNzaW5nLlxuLy8vIFBhdGggc3R5bGUgYWRkcmVzc2luZyBtZWFucyB0aGF0IHN0b3JhZ2UgYWNjb3VudCBpcyBwdXQgaW4gVVJJJ3MgUGF0aCBzZWdtZW50IGluIGluc3RlYWQgb2YgaW4gaG9zdC5cbmNvbnN0IFBhdGhTdHlsZVBvcnRzID0gW1xuICAgIFwiMTAwMDBcIixcbiAgICBcIjEwMDAxXCIsXG4gICAgXCIxMDAwMlwiLFxuICAgIFwiMTAwMDNcIixcbiAgICBcIjEwMDA0XCIsXG4gICAgXCIxMDEwMFwiLFxuICAgIFwiMTAxMDFcIixcbiAgICBcIjEwMTAyXCIsXG4gICAgXCIxMDEwM1wiLFxuICAgIFwiMTAxMDRcIixcbiAgICBcIjExMDAwXCIsXG4gICAgXCIxMTAwMVwiLFxuICAgIFwiMTEwMDJcIixcbiAgICBcIjExMDAzXCIsXG4gICAgXCIxMTAwNFwiLFxuICAgIFwiMTExMDBcIixcbiAgICBcIjExMTAxXCIsXG4gICAgXCIxMTEwMlwiLFxuICAgIFwiMTExMDNcIixcbiAgICBcIjExMTA0XCIsXG5dO1xuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogUmVzZXJ2ZWQgVVJMIGNoYXJhY3RlcnMgbXVzdCBiZSBwcm9wZXJseSBlc2NhcGVkIGZvciBTdG9yYWdlIHNlcnZpY2VzIGxpa2UgQmxvYiBvciBGaWxlLlxuICpcbiAqICMjIFVSTCBlbmNvZGUgYW5kIGVzY2FwZSBzdHJhdGVneSBmb3IgSlMgU0RLc1xuICpcbiAqIFdoZW4gY3VzdG9tZXJzIHBhc3MgYSBVUkwgc3RyaW5nIGludG8gWHh4Q2xpZW50IGNsYXNzZXMgY29uc3RydWN0b3IsIHRoZSBVUkwgc3RyaW5nIG1heSBhbHJlYWR5IGJlIFVSTCBlbmNvZGVkIG9yIG5vdC5cbiAqIEJ1dCBiZWZvcmUgc2VuZGluZyB0byBBenVyZSBTdG9yYWdlIHNlcnZlciwgdGhlIFVSTCBtdXN0IGJlIGVuY29kZWQuIEhvd2V2ZXIsIGl0J3MgaGFyZCBmb3IgYSBTREsgdG8gZ3Vlc3Mgd2hldGhlciB0aGUgVVJMXG4gKiBzdHJpbmcgaGFzIGJlZW4gZW5jb2RlZCBvciBub3QuIFdlIGhhdmUgMiBwb3RlbnRpYWwgc3RyYXRlZ2llcywgYW5kIGNob3NlIHN0cmF0ZWd5IHR3byBmb3IgdGhlIFh4eENsaWVudCBjb25zdHJ1Y3RvcnMuXG4gKlxuICogIyMjIFN0cmF0ZWd5IE9uZTogQXNzdW1lIHRoZSBjdXN0b21lciBVUkwgc3RyaW5nIGlzIG5vdCBlbmNvZGVkLCBhbmQgYWx3YXlzIGVuY29kZSBVUkwgc3RyaW5nIGluIFNESy5cbiAqXG4gKiBUaGlzIGlzIHdoYXQgbGVnYWN5IFYyIFNESyBkb2VzLCBzaW1wbGUgYW5kIHdvcmtzIGZvciBtb3N0IG9mIHRoZSBjYXNlcy5cbiAqIC0gV2hlbiBjdXN0b21lciBVUkwgc3RyaW5nIGlzIFwiaHR0cDovL2FjY291bnQuYmxvYi5jb3JlLndpbmRvd3MubmV0L2Nvbi9iOlwiLFxuICogICBTREsgd2lsbCBlbmNvZGUgaXQgdG8gXCJodHRwOi8vYWNjb3VudC5ibG9iLmNvcmUud2luZG93cy5uZXQvY29uL2IlM0FcIiBhbmQgc2VuZCB0byBzZXJ2ZXIuIEEgYmxvYiBuYW1lZCBcImI6XCIgd2lsbCBiZSBjcmVhdGVkLlxuICogLSBXaGVuIGN1c3RvbWVyIFVSTCBzdHJpbmcgaXMgXCJodHRwOi8vYWNjb3VudC5ibG9iLmNvcmUud2luZG93cy5uZXQvY29uL2IlM0FcIixcbiAqICAgU0RLIHdpbGwgZW5jb2RlIGl0IHRvIFwiaHR0cDovL2FjY291bnQuYmxvYi5jb3JlLndpbmRvd3MubmV0L2Nvbi9iJTI1M0FcIiBhbmQgc2VuZCB0byBzZXJ2ZXIuIEEgYmxvYiBuYW1lZCBcImIlM0FcIiB3aWxsIGJlIGNyZWF0ZWQuXG4gKlxuICogQnV0IHRoaXMgc3RyYXRlZ3kgd2lsbCBtYWtlIGl0IG5vdCBwb3NzaWJsZSB0byBjcmVhdGUgYSBibG9iIHdpdGggXCI/XCIgaW4gaXQncyBuYW1lLiBCZWNhdXNlIHdoZW4gY3VzdG9tZXIgVVJMIHN0cmluZyBpc1xuICogXCJodHRwOi8vYWNjb3VudC5ibG9iLmNvcmUud2luZG93cy5uZXQvY29uL2Jsb2I/bmFtZVwiLCB0aGUgXCI/bmFtZVwiIHdpbGwgYmUgdHJlYXRlZCBhcyBVUkwgcGFyYW10ZXIgaW5zdGVhZCBvZiBibG9iIG5hbWUuXG4gKiBJZiBjdXN0b21lciBVUkwgc3RyaW5nIGlzIFwiaHR0cDovL2FjY291bnQuYmxvYi5jb3JlLndpbmRvd3MubmV0L2Nvbi9ibG9iJTNGbmFtZVwiLCBhIGJsb2IgbmFtZWQgXCJibG9iJTNGbmFtZVwiIHdpbGwgYmUgY3JlYXRlZC5cbiAqIFYyIFNESyBkb2Vzbid0IGhhdmUgdGhpcyBpc3N1ZSBiZWNhdXNlIGl0IGRvZXNuJ3QgYWxsb3cgY3VzdG9tZXIgcGFzcyBpbiBhIGZ1bGwgVVJMLCBpdCBhY2NlcHRzIGEgc2VwYXJhdGUgYmxvYiBuYW1lIGFuZCBlbmNvZGVVUklDb21wb25lbnQgZm9yIGl0LlxuICogV2UgY2Fubm90IGFjY2VwdCBhIFNESyBjYW5ub3QgY3JlYXRlIGEgYmxvYiBuYW1lIHdpdGggXCI/XCIuIFNvIHdlIGltcGxlbWVudCBzdHJhdGVneSB0d286XG4gKlxuICogIyMjIFN0cmF0ZWd5IFR3bzogU0RLIGRvZXNuJ3QgYXNzdW1lIHRoZSBVUkwgaGFzIGJlZW4gZW5jb2RlZCBvciBub3QuIEl0IHdpbGwganVzdCBlc2NhcGUgdGhlIHNwZWNpYWwgY2hhcmFjdGVycy5cbiAqXG4gKiBUaGlzIGlzIHdoYXQgVjEwIEJsb2IgR28gU0RLIGRvZXMuIEl0IGFjY2VwdHMgYSBVUkwgdHlwZSBpbiBHbywgYW5kIGNhbGwgdXJsLkVzY2FwZWRQYXRoKCkgdG8gZXNjYXBlIHRoZSBzcGVjaWFsIGNoYXJzIHVuZXNjYXBlZC5cbiAqIC0gV2hlbiBjdXN0b21lciBVUkwgc3RyaW5nIGlzIFwiaHR0cDovL2FjY291bnQuYmxvYi5jb3JlLndpbmRvd3MubmV0L2Nvbi9iOlwiLFxuICogICBTREsgd2lsbCBlc2NhcGUgXCI6XCIgbGlrZSBcImh0dHA6Ly9hY2NvdW50LmJsb2IuY29yZS53aW5kb3dzLm5ldC9jb24vYiUzQVwiIGFuZCBzZW5kIHRvIHNlcnZlci4gQSBibG9iIG5hbWVkIFwiYjpcIiB3aWxsIGJlIGNyZWF0ZWQuXG4gKiAtIFdoZW4gY3VzdG9tZXIgVVJMIHN0cmluZyBpcyBcImh0dHA6Ly9hY2NvdW50LmJsb2IuY29yZS53aW5kb3dzLm5ldC9jb24vYiUzQVwiLFxuICogICBUaGVyZSBpcyBubyBzcGVjaWFsIGNoYXJhY3RlcnMsIHNvIHNlbmQgXCJodHRwOi8vYWNjb3VudC5ibG9iLmNvcmUud2luZG93cy5uZXQvY29uL2IlM0FcIiB0byBzZXJ2ZXIuIEEgYmxvYiBuYW1lZCBcImI6XCIgd2lsbCBiZSBjcmVhdGVkLlxuICogLSBXaGVuIGN1c3RvbWVyIFVSTCBzdHJpbmcgaXMgXCJodHRwOi8vYWNjb3VudC5ibG9iLmNvcmUud2luZG93cy5uZXQvY29uL2IlMjUzQVwiLFxuICogICBUaGVyZSBpcyBubyBzcGVjaWFsIGNoYXJhY3RlcnMsIHNvIHNlbmQgXCJodHRwOi8vYWNjb3VudC5ibG9iLmNvcmUud2luZG93cy5uZXQvY29uL2IlMjUzQVwiIHRvIHNlcnZlci4gQSBibG9iIG5hbWVkIFwiYiUzQVwiIHdpbGwgYmUgY3JlYXRlZC5cbiAqXG4gKiBUaGlzIHN0cmF0ZWd5IGdpdmVzIHVzIGZsZXhpYmlsaXR5IHRvIGNyZWF0ZSB3aXRoIGFueSBzcGVjaWFsIGNoYXJhY3RlcnMuIEJ1dCBcIiVcIiB3aWxsIGJlIHRyZWF0ZWQgYXMgYSBzcGVjaWFsIGNoYXJhY3RlcnMsIGlmIHRoZSBVUkwgc3RyaW5nXG4gKiBpcyBub3QgZW5jb2RlZCwgdGhlcmUgc2hvdWxkbid0IGEgXCIlXCIgaW4gdGhlIFVSTCBzdHJpbmcsIG90aGVyd2lzZSB0aGUgVVJMIGlzIG5vdCBhIHZhbGlkIFVSTC5cbiAqIElmIGN1c3RvbWVyIG5lZWRzIHRvIGNyZWF0ZSBhIGJsb2Igd2l0aCBcIiVcIiBpbiBpdCdzIGJsb2IgbmFtZSwgdXNlIFwiJTI1XCIgaW5zdGVhZCBvZiBcIiVcIi4gSnVzdCBsaWtlIGFib3ZlIDNyZCBzYW1wbGUuXG4gKiBBbmQgZm9sbG93aW5nIFVSTCBzdHJpbmdzIGFyZSBpbnZhbGlkOlxuICogLSBcImh0dHA6Ly9hY2NvdW50LmJsb2IuY29yZS53aW5kb3dzLm5ldC9jb24vYiVcIlxuICogLSBcImh0dHA6Ly9hY2NvdW50LmJsb2IuY29yZS53aW5kb3dzLm5ldC9jb24vYiUyXCJcbiAqIC0gXCJodHRwOi8vYWNjb3VudC5ibG9iLmNvcmUud2luZG93cy5uZXQvY29uL2IlR1wiXG4gKlxuICogQW5vdGhlciBzcGVjaWFsIGNoYXJhY3RlciBpcyBcIj9cIiwgdXNlIFwiJTJGXCIgdG8gcmVwcmVzZW50IGEgYmxvYiBuYW1lIHdpdGggXCI/XCIgaW4gYSBVUkwgc3RyaW5nLlxuICpcbiAqICMjIyBTdHJhdGVneSBmb3IgY29udGFpbmVyTmFtZSwgYmxvYk5hbWUgb3Igb3RoZXIgc3BlY2lmaWMgWFhYTmFtZSBwYXJhbWV0ZXJzIGluIG1ldGhvZHMgc3VjaCBhcyBgY29udGFpbmVyQ2xpZW50LmdldEJsb2JDbGllbnQoYmxvYk5hbWUpYFxuICpcbiAqIFdlIHdpbGwgYXBwbHkgc3RyYXRlZ3kgb25lLCBhbmQgY2FsbCBlbmNvZGVVUklDb21wb25lbnQgZm9yIHRoZXNlIHBhcmFtZXRlcnMgbGlrZSBibG9iTmFtZS4gQmVjYXVzZSB3aGF0IGN1c3RvbWVycyBwYXNzZXMgaW4gaXMgYSBwbGFpbiBuYW1lIGluc3RlYWQgb2YgYSBVUkwuXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvbmFtaW5nLWFuZC1yZWZlcmVuY2luZy1jb250YWluZXJzLS1ibG9icy0tYW5kLW1ldGFkYXRhXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9uYW1pbmctYW5kLXJlZmVyZW5jaW5nLXNoYXJlcy0tZGlyZWN0b3JpZXMtLWZpbGVzLS1hbmQtbWV0YWRhdGFcbiAqXG4gKiBAcGFyYW0gdXJsIC1cbiAqL1xuZnVuY3Rpb24gZXNjYXBlVVJMUGF0aCh1cmwpIHtcbiAgICBjb25zdCB1cmxQYXJzZWQgPSBuZXcgVVJMKHVybCk7XG4gICAgbGV0IHBhdGggPSB1cmxQYXJzZWQucGF0aG5hbWU7XG4gICAgcGF0aCA9IHBhdGggfHwgXCIvXCI7XG4gICAgcGF0aCA9IGVzY2FwZShwYXRoKTtcbiAgICB1cmxQYXJzZWQucGF0aG5hbWUgPSBwYXRoO1xuICAgIHJldHVybiB1cmxQYXJzZWQudG9TdHJpbmcoKTtcbn1cbmZ1bmN0aW9uIGdldFByb3h5VXJpRnJvbURldkNvbm5TdHJpbmcoY29ubmVjdGlvblN0cmluZykge1xuICAgIC8vIERldmVsb3BtZW50IENvbm5lY3Rpb24gU3RyaW5nXG4gICAgLy8gaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvYXp1cmUvc3RvcmFnZS9jb21tb24vc3RvcmFnZS1jb25maWd1cmUtY29ubmVjdGlvbi1zdHJpbmcjY29ubmVjdC10by10aGUtZW11bGF0b3ItYWNjb3VudC11c2luZy10aGUtd2VsbC1rbm93bi1hY2NvdW50LW5hbWUtYW5kLWtleVxuICAgIGxldCBwcm94eVVyaSA9IFwiXCI7XG4gICAgaWYgKGNvbm5lY3Rpb25TdHJpbmcuc2VhcmNoKFwiRGV2ZWxvcG1lbnRTdG9yYWdlUHJveHlVcmk9XCIpICE9PSAtMSkge1xuICAgICAgICAvLyBDT05ORUNUSU9OX1NUUklORz1Vc2VEZXZlbG9wbWVudFN0b3JhZ2U9dHJ1ZTtEZXZlbG9wbWVudFN0b3JhZ2VQcm94eVVyaT1odHRwOi8vbXlQcm94eVVyaVxuICAgICAgICBjb25zdCBtYXRjaENyZWRlbnRpYWxzID0gY29ubmVjdGlvblN0cmluZy5zcGxpdChcIjtcIik7XG4gICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBtYXRjaENyZWRlbnRpYWxzKSB7XG4gICAgICAgICAgICBpZiAoZWxlbWVudC50cmltKCkuc3RhcnRzV2l0aChcIkRldmVsb3BtZW50U3RvcmFnZVByb3h5VXJpPVwiKSkge1xuICAgICAgICAgICAgICAgIHByb3h5VXJpID0gZWxlbWVudC50cmltKCkubWF0Y2goXCJEZXZlbG9wbWVudFN0b3JhZ2VQcm94eVVyaT0oLiopXCIpWzFdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwcm94eVVyaTtcbn1cbmZ1bmN0aW9uIGdldFZhbHVlSW5Db25uU3RyaW5nKGNvbm5lY3Rpb25TdHJpbmcsIGFyZ3VtZW50KSB7XG4gICAgY29uc3QgZWxlbWVudHMgPSBjb25uZWN0aW9uU3RyaW5nLnNwbGl0KFwiO1wiKTtcbiAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgZWxlbWVudHMpIHtcbiAgICAgICAgaWYgKGVsZW1lbnQudHJpbSgpLnN0YXJ0c1dpdGgoYXJndW1lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudC50cmltKCkubWF0Y2goYXJndW1lbnQgKyBcIj0oLiopXCIpWzFdO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBcIlwiO1xufVxuLyoqXG4gKiBFeHRyYWN0cyB0aGUgcGFydHMgb2YgYW4gQXp1cmUgU3RvcmFnZSBhY2NvdW50IGNvbm5lY3Rpb24gc3RyaW5nLlxuICpcbiAqIEBwYXJhbSBjb25uZWN0aW9uU3RyaW5nIC0gQ29ubmVjdGlvbiBzdHJpbmcuXG4gKiBAcmV0dXJucyBTdHJpbmcga2V5IHZhbHVlIHBhaXJzIG9mIHRoZSBzdG9yYWdlIGFjY291bnQncyB1cmwgYW5kIGNyZWRlbnRpYWxzLlxuICovXG5mdW5jdGlvbiBleHRyYWN0Q29ubmVjdGlvblN0cmluZ1BhcnRzKGNvbm5lY3Rpb25TdHJpbmcpIHtcbiAgICBsZXQgcHJveHlVcmkgPSBcIlwiO1xuICAgIGlmIChjb25uZWN0aW9uU3RyaW5nLnN0YXJ0c1dpdGgoXCJVc2VEZXZlbG9wbWVudFN0b3JhZ2U9dHJ1ZVwiKSkge1xuICAgICAgICAvLyBEZXZlbG9wbWVudCBjb25uZWN0aW9uIHN0cmluZ1xuICAgICAgICBwcm94eVVyaSA9IGdldFByb3h5VXJpRnJvbURldkNvbm5TdHJpbmcoY29ubmVjdGlvblN0cmluZyk7XG4gICAgICAgIGNvbm5lY3Rpb25TdHJpbmcgPSBEZXZlbG9wbWVudENvbm5lY3Rpb25TdHJpbmc7XG4gICAgfVxuICAgIC8vIE1hdGNoaW5nIEJsb2JFbmRwb2ludCBpbiB0aGUgQWNjb3VudCBjb25uZWN0aW9uIHN0cmluZ1xuICAgIGxldCBibG9iRW5kcG9pbnQgPSBnZXRWYWx1ZUluQ29ublN0cmluZyhjb25uZWN0aW9uU3RyaW5nLCBcIkJsb2JFbmRwb2ludFwiKTtcbiAgICAvLyBTbGljaW5nIG9mZiAnLycgYXQgdGhlIGVuZCBpZiBleGlzdHNcbiAgICAvLyAoVGhlIG1ldGhvZHMgdGhhdCB1c2UgYGV4dHJhY3RDb25uZWN0aW9uU3RyaW5nUGFydHNgIGV4cGVjdCB0aGUgdXJsIHRvIG5vdCBoYXZlIGAvYCBhdCB0aGUgZW5kKVxuICAgIGJsb2JFbmRwb2ludCA9IGJsb2JFbmRwb2ludC5lbmRzV2l0aChcIi9cIikgPyBibG9iRW5kcG9pbnQuc2xpY2UoMCwgLTEpIDogYmxvYkVuZHBvaW50O1xuICAgIGlmIChjb25uZWN0aW9uU3RyaW5nLnNlYXJjaChcIkRlZmF1bHRFbmRwb2ludHNQcm90b2NvbD1cIikgIT09IC0xICYmXG4gICAgICAgIGNvbm5lY3Rpb25TdHJpbmcuc2VhcmNoKFwiQWNjb3VudEtleT1cIikgIT09IC0xKSB7XG4gICAgICAgIC8vIEFjY291bnQgY29ubmVjdGlvbiBzdHJpbmdcbiAgICAgICAgbGV0IGRlZmF1bHRFbmRwb2ludHNQcm90b2NvbCA9IFwiXCI7XG4gICAgICAgIGxldCBhY2NvdW50TmFtZSA9IFwiXCI7XG4gICAgICAgIGxldCBhY2NvdW50S2V5ID0gQnVmZmVyLmZyb20oXCJhY2NvdW50S2V5XCIsIFwiYmFzZTY0XCIpO1xuICAgICAgICBsZXQgZW5kcG9pbnRTdWZmaXggPSBcIlwiO1xuICAgICAgICAvLyBHZXQgYWNjb3VudCBuYW1lIGFuZCBrZXlcbiAgICAgICAgYWNjb3VudE5hbWUgPSBnZXRWYWx1ZUluQ29ublN0cmluZyhjb25uZWN0aW9uU3RyaW5nLCBcIkFjY291bnROYW1lXCIpO1xuICAgICAgICBhY2NvdW50S2V5ID0gQnVmZmVyLmZyb20oZ2V0VmFsdWVJbkNvbm5TdHJpbmcoY29ubmVjdGlvblN0cmluZywgXCJBY2NvdW50S2V5XCIpLCBcImJhc2U2NFwiKTtcbiAgICAgICAgaWYgKCFibG9iRW5kcG9pbnQpIHtcbiAgICAgICAgICAgIC8vIEJsb2JFbmRwb2ludCBpcyBub3QgcHJlc2VudCBpbiB0aGUgQWNjb3VudCBjb25uZWN0aW9uIHN0cmluZ1xuICAgICAgICAgICAgLy8gQ2FuIGJlIG9idGFpbmVkIGZyb20gYCR7ZGVmYXVsdEVuZHBvaW50c1Byb3RvY29sfTovLyR7YWNjb3VudE5hbWV9LmJsb2IuJHtlbmRwb2ludFN1ZmZpeH1gXG4gICAgICAgICAgICBkZWZhdWx0RW5kcG9pbnRzUHJvdG9jb2wgPSBnZXRWYWx1ZUluQ29ublN0cmluZyhjb25uZWN0aW9uU3RyaW5nLCBcIkRlZmF1bHRFbmRwb2ludHNQcm90b2NvbFwiKTtcbiAgICAgICAgICAgIGNvbnN0IHByb3RvY29sID0gZGVmYXVsdEVuZHBvaW50c1Byb3RvY29sLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICBpZiAocHJvdG9jb2wgIT09IFwiaHR0cHNcIiAmJiBwcm90b2NvbCAhPT0gXCJodHRwXCIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIERlZmF1bHRFbmRwb2ludHNQcm90b2NvbCBpbiB0aGUgcHJvdmlkZWQgQ29ubmVjdGlvbiBTdHJpbmcuIEV4cGVjdGluZyAnaHR0cHMnIG9yICdodHRwJ1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVuZHBvaW50U3VmZml4ID0gZ2V0VmFsdWVJbkNvbm5TdHJpbmcoY29ubmVjdGlvblN0cmluZywgXCJFbmRwb2ludFN1ZmZpeFwiKTtcbiAgICAgICAgICAgIGlmICghZW5kcG9pbnRTdWZmaXgpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIEVuZHBvaW50U3VmZml4IGluIHRoZSBwcm92aWRlZCBDb25uZWN0aW9uIFN0cmluZ1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJsb2JFbmRwb2ludCA9IGAke2RlZmF1bHRFbmRwb2ludHNQcm90b2NvbH06Ly8ke2FjY291bnROYW1lfS5ibG9iLiR7ZW5kcG9pbnRTdWZmaXh9YDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWFjY291bnROYW1lKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIEFjY291bnROYW1lIGluIHRoZSBwcm92aWRlZCBDb25uZWN0aW9uIFN0cmluZ1wiKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChhY2NvdW50S2V5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBBY2NvdW50S2V5IGluIHRoZSBwcm92aWRlZCBDb25uZWN0aW9uIFN0cmluZ1wiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2luZDogXCJBY2NvdW50Q29ublN0cmluZ1wiLFxuICAgICAgICAgICAgdXJsOiBibG9iRW5kcG9pbnQsXG4gICAgICAgICAgICBhY2NvdW50TmFtZSxcbiAgICAgICAgICAgIGFjY291bnRLZXksXG4gICAgICAgICAgICBwcm94eVVyaSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIC8vIFNBUyBjb25uZWN0aW9uIHN0cmluZ1xuICAgICAgICBsZXQgYWNjb3VudFNhcyA9IGdldFZhbHVlSW5Db25uU3RyaW5nKGNvbm5lY3Rpb25TdHJpbmcsIFwiU2hhcmVkQWNjZXNzU2lnbmF0dXJlXCIpO1xuICAgICAgICBsZXQgYWNjb3VudE5hbWUgPSBnZXRWYWx1ZUluQ29ublN0cmluZyhjb25uZWN0aW9uU3RyaW5nLCBcIkFjY291bnROYW1lXCIpO1xuICAgICAgICAvLyBpZiBhY2NvdW50TmFtZSBpcyBlbXB0eSwgdHJ5IHRvIHJlYWQgaXQgZnJvbSBCbG9iRW5kcG9pbnRcbiAgICAgICAgaWYgKCFhY2NvdW50TmFtZSkge1xuICAgICAgICAgICAgYWNjb3VudE5hbWUgPSBnZXRBY2NvdW50TmFtZUZyb21VcmwoYmxvYkVuZHBvaW50KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWJsb2JFbmRwb2ludCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBCbG9iRW5kcG9pbnQgaW4gdGhlIHByb3ZpZGVkIFNBUyBDb25uZWN0aW9uIFN0cmluZ1wiKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghYWNjb3VudFNhcykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBTaGFyZWRBY2Nlc3NTaWduYXR1cmUgaW4gdGhlIHByb3ZpZGVkIFNBUyBDb25uZWN0aW9uIFN0cmluZ1wiKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjbGllbnQgY29uc3RydWN0b3JzIGFzc3VtZSBhY2NvdW50U2FzIGRvZXMgKm5vdCogc3RhcnQgd2l0aCA/XG4gICAgICAgIGlmIChhY2NvdW50U2FzLnN0YXJ0c1dpdGgoXCI/XCIpKSB7XG4gICAgICAgICAgICBhY2NvdW50U2FzID0gYWNjb3VudFNhcy5zdWJzdHJpbmcoMSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsga2luZDogXCJTQVNDb25uU3RyaW5nXCIsIHVybDogYmxvYkVuZHBvaW50LCBhY2NvdW50TmFtZSwgYWNjb3VudFNhcyB9O1xuICAgIH1cbn1cbi8qKlxuICogSW50ZXJuYWwgZXNjYXBlIG1ldGhvZCBpbXBsZW1lbnRlZCBTdHJhdGVneSBUd28gbWVudGlvbmVkIGluIGVzY2FwZVVSTCgpIGRlc2NyaXB0aW9uLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC1cbiAqL1xuZnVuY3Rpb24gZXNjYXBlKHRleHQpIHtcbiAgICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHRleHQpXG4gICAgICAgIC5yZXBsYWNlKC8lMkYvZywgXCIvXCIpIC8vIERvbid0IGVzY2FwZSBmb3IgXCIvXCJcbiAgICAgICAgLnJlcGxhY2UoLycvZywgXCIlMjdcIikgLy8gRXNjYXBlIGZvciBcIidcIlxuICAgICAgICAucmVwbGFjZSgvXFwrL2csIFwiJTIwXCIpXG4gICAgICAgIC5yZXBsYWNlKC8lMjUvZywgXCIlXCIpOyAvLyBSZXZlcnQgZW5jb2RlZCBcIiVcIlxufVxuLyoqXG4gKiBBcHBlbmQgYSBzdHJpbmcgdG8gVVJMIHBhdGguIFdpbGwgcmVtb3ZlIGR1cGxpY2F0ZWQgXCIvXCIgaW4gZnJvbnQgb2YgdGhlIHN0cmluZ1xuICogd2hlbiBVUkwgcGF0aCBlbmRzIHdpdGggYSBcIi9cIi5cbiAqXG4gKiBAcGFyYW0gdXJsIC0gU291cmNlIFVSTCBzdHJpbmdcbiAqIEBwYXJhbSBuYW1lIC0gU3RyaW5nIHRvIGJlIGFwcGVuZGVkIHRvIFVSTFxuICogQHJldHVybnMgQW4gdXBkYXRlZCBVUkwgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGFwcGVuZFRvVVJMUGF0aCh1cmwsIG5hbWUpIHtcbiAgICBjb25zdCB1cmxQYXJzZWQgPSBuZXcgVVJMKHVybCk7XG4gICAgbGV0IHBhdGggPSB1cmxQYXJzZWQucGF0aG5hbWU7XG4gICAgcGF0aCA9IHBhdGggPyAocGF0aC5lbmRzV2l0aChcIi9cIikgPyBgJHtwYXRofSR7bmFtZX1gIDogYCR7cGF0aH0vJHtuYW1lfWApIDogbmFtZTtcbiAgICB1cmxQYXJzZWQucGF0aG5hbWUgPSBwYXRoO1xuICAgIHJldHVybiB1cmxQYXJzZWQudG9TdHJpbmcoKTtcbn1cbi8qKlxuICogU2V0IFVSTCBwYXJhbWV0ZXIgbmFtZSBhbmQgdmFsdWUuIElmIG5hbWUgZXhpc3RzIGluIFVSTCBwYXJhbWV0ZXJzLCBvbGQgdmFsdWVcbiAqIHdpbGwgYmUgcmVwbGFjZWQgYnkgbmFtZSBrZXkuIElmIG5vdCBwcm92aWRlIHZhbHVlLCB0aGUgcGFyYW1ldGVyIHdpbGwgYmUgZGVsZXRlZC5cbiAqXG4gKiBAcGFyYW0gdXJsIC0gU291cmNlIFVSTCBzdHJpbmdcbiAqIEBwYXJhbSBuYW1lIC0gUGFyYW1ldGVyIG5hbWVcbiAqIEBwYXJhbSB2YWx1ZSAtIFBhcmFtZXRlciB2YWx1ZVxuICogQHJldHVybnMgQW4gdXBkYXRlZCBVUkwgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIHNldFVSTFBhcmFtZXRlcih1cmwsIG5hbWUsIHZhbHVlKSB7XG4gICAgY29uc3QgdXJsUGFyc2VkID0gbmV3IFVSTCh1cmwpO1xuICAgIGNvbnN0IGVuY29kZWROYW1lID0gZW5jb2RlVVJJQ29tcG9uZW50KG5hbWUpO1xuICAgIGNvbnN0IGVuY29kZWRWYWx1ZSA9IHZhbHVlID8gZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKSA6IHVuZGVmaW5lZDtcbiAgICAvLyBtdXRhdGluZyBzZWFyY2hQYXJhbXMgd2lsbCBjaGFuZ2UgdGhlIGVuY29kaW5nLCBzbyB3ZSBoYXZlIHRvIGRvIHRoaXMgb3Vyc2VsdmVzXG4gICAgY29uc3Qgc2VhcmNoU3RyaW5nID0gdXJsUGFyc2VkLnNlYXJjaCA9PT0gXCJcIiA/IFwiP1wiIDogdXJsUGFyc2VkLnNlYXJjaDtcbiAgICBjb25zdCBzZWFyY2hQaWVjZXMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IHBhaXIgb2Ygc2VhcmNoU3RyaW5nLnNsaWNlKDEpLnNwbGl0KFwiJlwiKSkge1xuICAgICAgICBpZiAocGFpcikge1xuICAgICAgICAgICAgY29uc3QgW2tleV0gPSBwYWlyLnNwbGl0KFwiPVwiLCAyKTtcbiAgICAgICAgICAgIGlmIChrZXkgIT09IGVuY29kZWROYW1lKSB7XG4gICAgICAgICAgICAgICAgc2VhcmNoUGllY2VzLnB1c2gocGFpcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGVuY29kZWRWYWx1ZSkge1xuICAgICAgICBzZWFyY2hQaWVjZXMucHVzaChgJHtlbmNvZGVkTmFtZX09JHtlbmNvZGVkVmFsdWV9YCk7XG4gICAgfVxuICAgIHVybFBhcnNlZC5zZWFyY2ggPSBzZWFyY2hQaWVjZXMubGVuZ3RoID8gYD8ke3NlYXJjaFBpZWNlcy5qb2luKFwiJlwiKX1gIDogXCJcIjtcbiAgICByZXR1cm4gdXJsUGFyc2VkLnRvU3RyaW5nKCk7XG59XG4vKipcbiAqIEdldCBVUkwgcGFyYW1ldGVyIGJ5IG5hbWUuXG4gKlxuICogQHBhcmFtIHVybCAtXG4gKiBAcGFyYW0gbmFtZSAtXG4gKi9cbmZ1bmN0aW9uIGdldFVSTFBhcmFtZXRlcih1cmwsIG5hbWUpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3QgdXJsUGFyc2VkID0gbmV3IFVSTCh1cmwpO1xuICAgIHJldHVybiAoX2EgPSB1cmxQYXJzZWQuc2VhcmNoUGFyYW1zLmdldChuYW1lKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdW5kZWZpbmVkO1xufVxuLyoqXG4gKiBTZXQgVVJMIGhvc3QuXG4gKlxuICogQHBhcmFtIHVybCAtIFNvdXJjZSBVUkwgc3RyaW5nXG4gKiBAcGFyYW0gaG9zdCAtIE5ldyBob3N0IHN0cmluZ1xuICogQHJldHVybnMgQW4gdXBkYXRlZCBVUkwgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIHNldFVSTEhvc3QodXJsLCBob3N0KSB7XG4gICAgY29uc3QgdXJsUGFyc2VkID0gbmV3IFVSTCh1cmwpO1xuICAgIHVybFBhcnNlZC5ob3N0bmFtZSA9IGhvc3Q7XG4gICAgcmV0dXJuIHVybFBhcnNlZC50b1N0cmluZygpO1xufVxuLyoqXG4gKiBHZXQgVVJMIHBhdGggZnJvbSBhbiBVUkwgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB1cmwgLSBTb3VyY2UgVVJMIHN0cmluZ1xuICovXG5mdW5jdGlvbiBnZXRVUkxQYXRoKHVybCkge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHVybFBhcnNlZCA9IG5ldyBVUkwodXJsKTtcbiAgICAgICAgcmV0dXJuIHVybFBhcnNlZC5wYXRobmFtZTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59XG4vKipcbiAqIEdldCBVUkwgc2NoZW1lIGZyb20gYW4gVVJMIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gdXJsIC0gU291cmNlIFVSTCBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gZ2V0VVJMU2NoZW1lKHVybCkge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHVybFBhcnNlZCA9IG5ldyBVUkwodXJsKTtcbiAgICAgICAgcmV0dXJuIHVybFBhcnNlZC5wcm90b2NvbC5lbmRzV2l0aChcIjpcIikgPyB1cmxQYXJzZWQucHJvdG9jb2wuc2xpY2UoMCwgLTEpIDogdXJsUGFyc2VkLnByb3RvY29sO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbn1cbi8qKlxuICogR2V0IFVSTCBwYXRoIGFuZCBxdWVyeSBmcm9tIGFuIFVSTCBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHVybCAtIFNvdXJjZSBVUkwgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGdldFVSTFBhdGhBbmRRdWVyeSh1cmwpIHtcbiAgICBjb25zdCB1cmxQYXJzZWQgPSBuZXcgVVJMKHVybCk7XG4gICAgY29uc3QgcGF0aFN0cmluZyA9IHVybFBhcnNlZC5wYXRobmFtZTtcbiAgICBpZiAoIXBhdGhTdHJpbmcpIHtcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbnZhbGlkIHVybCB3aXRob3V0IHZhbGlkIHBhdGguXCIpO1xuICAgIH1cbiAgICBsZXQgcXVlcnlTdHJpbmcgPSB1cmxQYXJzZWQuc2VhcmNoIHx8IFwiXCI7XG4gICAgcXVlcnlTdHJpbmcgPSBxdWVyeVN0cmluZy50cmltKCk7XG4gICAgaWYgKHF1ZXJ5U3RyaW5nICE9PSBcIlwiKSB7XG4gICAgICAgIHF1ZXJ5U3RyaW5nID0gcXVlcnlTdHJpbmcuc3RhcnRzV2l0aChcIj9cIikgPyBxdWVyeVN0cmluZyA6IGA/JHtxdWVyeVN0cmluZ31gOyAvLyBFbnN1cmUgcXVlcnkgc3RyaW5nIHN0YXJ0IHdpdGggJz8nXG4gICAgfVxuICAgIHJldHVybiBgJHtwYXRoU3RyaW5nfSR7cXVlcnlTdHJpbmd9YDtcbn1cbi8qKlxuICogR2V0IFVSTCBxdWVyeSBrZXkgdmFsdWUgcGFpcnMgZnJvbSBhbiBVUkwgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB1cmwgLVxuICovXG5mdW5jdGlvbiBnZXRVUkxRdWVyaWVzKHVybCkge1xuICAgIGxldCBxdWVyeVN0cmluZyA9IG5ldyBVUkwodXJsKS5zZWFyY2g7XG4gICAgaWYgKCFxdWVyeVN0cmluZykge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIHF1ZXJ5U3RyaW5nID0gcXVlcnlTdHJpbmcudHJpbSgpO1xuICAgIHF1ZXJ5U3RyaW5nID0gcXVlcnlTdHJpbmcuc3RhcnRzV2l0aChcIj9cIikgPyBxdWVyeVN0cmluZy5zdWJzdHJpbmcoMSkgOiBxdWVyeVN0cmluZztcbiAgICBsZXQgcXVlcnlTdWJTdHJpbmdzID0gcXVlcnlTdHJpbmcuc3BsaXQoXCImXCIpO1xuICAgIHF1ZXJ5U3ViU3RyaW5ncyA9IHF1ZXJ5U3ViU3RyaW5ncy5maWx0ZXIoKHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IGluZGV4T2ZFcXVhbCA9IHZhbHVlLmluZGV4T2YoXCI9XCIpO1xuICAgICAgICBjb25zdCBsYXN0SW5kZXhPZkVxdWFsID0gdmFsdWUubGFzdEluZGV4T2YoXCI9XCIpO1xuICAgICAgICByZXR1cm4gKGluZGV4T2ZFcXVhbCA+IDAgJiYgaW5kZXhPZkVxdWFsID09PSBsYXN0SW5kZXhPZkVxdWFsICYmIGxhc3RJbmRleE9mRXF1YWwgPCB2YWx1ZS5sZW5ndGggLSAxKTtcbiAgICB9KTtcbiAgICBjb25zdCBxdWVyaWVzID0ge307XG4gICAgZm9yIChjb25zdCBxdWVyeVN1YlN0cmluZyBvZiBxdWVyeVN1YlN0cmluZ3MpIHtcbiAgICAgICAgY29uc3Qgc3BsaXRSZXN1bHRzID0gcXVlcnlTdWJTdHJpbmcuc3BsaXQoXCI9XCIpO1xuICAgICAgICBjb25zdCBrZXkgPSBzcGxpdFJlc3VsdHNbMF07XG4gICAgICAgIGNvbnN0IHZhbHVlID0gc3BsaXRSZXN1bHRzWzFdO1xuICAgICAgICBxdWVyaWVzW2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHF1ZXJpZXM7XG59XG4vKipcbiAqIEFwcGVuZCBhIHN0cmluZyB0byBVUkwgcXVlcnkuXG4gKlxuICogQHBhcmFtIHVybCAtIFNvdXJjZSBVUkwgc3RyaW5nLlxuICogQHBhcmFtIHF1ZXJ5UGFydHMgLSBTdHJpbmcgdG8gYmUgYXBwZW5kZWQgdG8gdGhlIFVSTCBxdWVyeS5cbiAqIEByZXR1cm5zIEFuIHVwZGF0ZWQgVVJMIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gYXBwZW5kVG9VUkxRdWVyeSh1cmwsIHF1ZXJ5UGFydHMpIHtcbiAgICBjb25zdCB1cmxQYXJzZWQgPSBuZXcgVVJMKHVybCk7XG4gICAgbGV0IHF1ZXJ5ID0gdXJsUGFyc2VkLnNlYXJjaDtcbiAgICBpZiAocXVlcnkpIHtcbiAgICAgICAgcXVlcnkgKz0gXCImXCIgKyBxdWVyeVBhcnRzO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcXVlcnkgPSBxdWVyeVBhcnRzO1xuICAgIH1cbiAgICB1cmxQYXJzZWQuc2VhcmNoID0gcXVlcnk7XG4gICAgcmV0dXJuIHVybFBhcnNlZC50b1N0cmluZygpO1xufVxuLyoqXG4gKiBSb3VuZHMgYSBkYXRlIG9mZiB0byBzZWNvbmRzLlxuICpcbiAqIEBwYXJhbSBkYXRlIC1cbiAqIEBwYXJhbSB3aXRoTWlsbGlzZWNvbmRzIC0gSWYgdHJ1ZSwgWVlZWS1NTS1ERFRoaDptbTpzcy5mZmZmZmZmWiB3aWxsIGJlIHJldHVybmVkO1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBmYWxzZSwgWVlZWS1NTS1ERFRoaDptbTpzc1ogd2lsbCBiZSByZXR1cm5lZC5cbiAqIEByZXR1cm5zIERhdGUgc3RyaW5nIGluIElTTzgwNjEgZm9ybWF0LCB3aXRoIG9yIHdpdGhvdXQgNyBtaWxsaXNlY29uZHMgY29tcG9uZW50XG4gKi9cbmZ1bmN0aW9uIHRydW5jYXRlZElTTzgwNjFEYXRlKGRhdGUsIHdpdGhNaWxsaXNlY29uZHMgPSB0cnVlKSB7XG4gICAgLy8gRGF0ZS50b0lTT1N0cmluZygpIHdpbGwgcmV0dXJuIGxpa2UgXCIyMDE4LTEwLTI5VDA2OjM0OjM2LjEzOVpcIlxuICAgIGNvbnN0IGRhdGVTdHJpbmcgPSBkYXRlLnRvSVNPU3RyaW5nKCk7XG4gICAgcmV0dXJuIHdpdGhNaWxsaXNlY29uZHNcbiAgICAgICAgPyBkYXRlU3RyaW5nLnN1YnN0cmluZygwLCBkYXRlU3RyaW5nLmxlbmd0aCAtIDEpICsgXCIwMDAwXCIgKyBcIlpcIlxuICAgICAgICA6IGRhdGVTdHJpbmcuc3Vic3RyaW5nKDAsIGRhdGVTdHJpbmcubGVuZ3RoIC0gNSkgKyBcIlpcIjtcbn1cbi8qKlxuICogQmFzZTY0IGVuY29kZS5cbiAqXG4gKiBAcGFyYW0gY29udGVudCAtXG4gKi9cbmZ1bmN0aW9uIGJhc2U2NGVuY29kZShjb250ZW50KSB7XG4gICAgcmV0dXJuICFjb3JlVXRpbC5pc05vZGUgPyBidG9hKGNvbnRlbnQpIDogQnVmZmVyLmZyb20oY29udGVudCkudG9TdHJpbmcoXCJiYXNlNjRcIik7XG59XG4vKipcbiAqIEdlbmVyYXRlIGEgNjQgYnl0ZXMgYmFzZTY0IGJsb2NrIElEIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gYmxvY2tJbmRleCAtXG4gKi9cbmZ1bmN0aW9uIGdlbmVyYXRlQmxvY2tJRChibG9ja0lEUHJlZml4LCBibG9ja0luZGV4KSB7XG4gICAgLy8gVG8gZ2VuZXJhdGUgYSA2NCBieXRlcyBiYXNlNjQgc3RyaW5nLCBzb3VyY2Ugc3RyaW5nIHNob3VsZCBiZSA0OFxuICAgIGNvbnN0IG1heFNvdXJjZVN0cmluZ0xlbmd0aCA9IDQ4O1xuICAgIC8vIEEgYmxvYiBjYW4gaGF2ZSBhIG1heGltdW0gb2YgMTAwLDAwMCB1bmNvbW1pdHRlZCBibG9ja3MgYXQgYW55IGdpdmVuIHRpbWVcbiAgICBjb25zdCBtYXhCbG9ja0luZGV4TGVuZ3RoID0gNjtcbiAgICBjb25zdCBtYXhBbGxvd2VkQmxvY2tJRFByZWZpeExlbmd0aCA9IG1heFNvdXJjZVN0cmluZ0xlbmd0aCAtIG1heEJsb2NrSW5kZXhMZW5ndGg7XG4gICAgaWYgKGJsb2NrSURQcmVmaXgubGVuZ3RoID4gbWF4QWxsb3dlZEJsb2NrSURQcmVmaXhMZW5ndGgpIHtcbiAgICAgICAgYmxvY2tJRFByZWZpeCA9IGJsb2NrSURQcmVmaXguc2xpY2UoMCwgbWF4QWxsb3dlZEJsb2NrSURQcmVmaXhMZW5ndGgpO1xuICAgIH1cbiAgICBjb25zdCByZXMgPSBibG9ja0lEUHJlZml4ICtcbiAgICAgICAgcGFkU3RhcnQoYmxvY2tJbmRleC50b1N0cmluZygpLCBtYXhTb3VyY2VTdHJpbmdMZW5ndGggLSBibG9ja0lEUHJlZml4Lmxlbmd0aCwgXCIwXCIpO1xuICAgIHJldHVybiBiYXNlNjRlbmNvZGUocmVzKTtcbn1cbi8qKlxuICogRGVsYXkgc3BlY2lmaWVkIHRpbWUgaW50ZXJ2YWwuXG4gKlxuICogQHBhcmFtIHRpbWVJbk1zIC1cbiAqIEBwYXJhbSBhYm9ydGVyIC1cbiAqIEBwYXJhbSBhYm9ydEVycm9yIC1cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZGVsYXkodGltZUluTXMsIGFib3J0ZXIsIGFib3J0RXJyb3IpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0ICovXG4gICAgICAgIGxldCB0aW1lb3V0O1xuICAgICAgICBjb25zdCBhYm9ydEhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVqZWN0KGFib3J0RXJyb3IpO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZXNvbHZlSGFuZGxlciA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChhYm9ydGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBhYm9ydGVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBhYm9ydEhhbmRsZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9O1xuICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChyZXNvbHZlSGFuZGxlciwgdGltZUluTXMpO1xuICAgICAgICBpZiAoYWJvcnRlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhYm9ydGVyLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBhYm9ydEhhbmRsZXIpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG4vKipcbiAqIFN0cmluZy5wcm90b3R5cGUucGFkU3RhcnQoKVxuICpcbiAqIEBwYXJhbSBjdXJyZW50U3RyaW5nIC1cbiAqIEBwYXJhbSB0YXJnZXRMZW5ndGggLVxuICogQHBhcmFtIHBhZFN0cmluZyAtXG4gKi9cbmZ1bmN0aW9uIHBhZFN0YXJ0KGN1cnJlbnRTdHJpbmcsIHRhcmdldExlbmd0aCwgcGFkU3RyaW5nID0gXCIgXCIpIHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBUUyBkb2Vzbid0IGtub3cgdGhpcyBjb2RlIG5lZWRzIHRvIHJ1biBkb3dubGV2ZWwgc29tZXRpbWVzXG4gICAgaWYgKFN0cmluZy5wcm90b3R5cGUucGFkU3RhcnQpIHtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRTdHJpbmcucGFkU3RhcnQodGFyZ2V0TGVuZ3RoLCBwYWRTdHJpbmcpO1xuICAgIH1cbiAgICBwYWRTdHJpbmcgPSBwYWRTdHJpbmcgfHwgXCIgXCI7XG4gICAgaWYgKGN1cnJlbnRTdHJpbmcubGVuZ3RoID4gdGFyZ2V0TGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBjdXJyZW50U3RyaW5nO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGFyZ2V0TGVuZ3RoID0gdGFyZ2V0TGVuZ3RoIC0gY3VycmVudFN0cmluZy5sZW5ndGg7XG4gICAgICAgIGlmICh0YXJnZXRMZW5ndGggPiBwYWRTdHJpbmcubGVuZ3RoKSB7XG4gICAgICAgICAgICBwYWRTdHJpbmcgKz0gcGFkU3RyaW5nLnJlcGVhdCh0YXJnZXRMZW5ndGggLyBwYWRTdHJpbmcubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFkU3RyaW5nLnNsaWNlKDAsIHRhcmdldExlbmd0aCkgKyBjdXJyZW50U3RyaW5nO1xuICAgIH1cbn1cbi8qKlxuICogSWYgdHdvIHN0cmluZ3MgYXJlIGVxdWFsIHdoZW4gY29tcGFyZWQgY2FzZSBpbnNlbnNpdGl2ZS5cbiAqXG4gKiBAcGFyYW0gc3RyMSAtXG4gKiBAcGFyYW0gc3RyMiAtXG4gKi9cbmZ1bmN0aW9uIGlFcXVhbChzdHIxLCBzdHIyKSB7XG4gICAgcmV0dXJuIHN0cjEudG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gc3RyMi50b0xvY2FsZUxvd2VyQ2FzZSgpO1xufVxuLyoqXG4gKiBFeHRyYWN0cyBhY2NvdW50IG5hbWUgZnJvbSB0aGUgdXJsXG4gKiBAcGFyYW0gdXJsIC0gdXJsIHRvIGV4dHJhY3QgdGhlIGFjY291bnQgbmFtZSBmcm9tXG4gKiBAcmV0dXJucyB3aXRoIHRoZSBhY2NvdW50IG5hbWVcbiAqL1xuZnVuY3Rpb24gZ2V0QWNjb3VudE5hbWVGcm9tVXJsKHVybCkge1xuICAgIGNvbnN0IHBhcnNlZFVybCA9IG5ldyBVUkwodXJsKTtcbiAgICBsZXQgYWNjb3VudE5hbWU7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHBhcnNlZFVybC5ob3N0bmFtZS5zcGxpdChcIi5cIilbMV0gPT09IFwiYmxvYlwiKSB7XG4gICAgICAgICAgICAvLyBgJHtkZWZhdWx0RW5kcG9pbnRzUHJvdG9jb2x9Oi8vJHthY2NvdW50TmFtZX0uYmxvYi4ke2VuZHBvaW50U3VmZml4fWA7XG4gICAgICAgICAgICBhY2NvdW50TmFtZSA9IHBhcnNlZFVybC5ob3N0bmFtZS5zcGxpdChcIi5cIilbMF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNJcEVuZHBvaW50U3R5bGUocGFyc2VkVXJsKSkge1xuICAgICAgICAgICAgLy8gSVB2NC9JUHY2IGFkZHJlc3MgaG9zdHMuLi4gRXhhbXBsZSAtIGh0dHA6Ly8xOTIuMC4wLjEwOjEwMDAxL2RldnN0b3JlYWNjb3VudDEvXG4gICAgICAgICAgICAvLyBTaW5nbGUgd29yZCBkb21haW4gd2l0aG91dCBhIFtkb3RdIGluIHRoZSBlbmRwb2ludC4uLiBFeGFtcGxlIC0gaHR0cDovL2xvY2FsaG9zdDoxMDAwMS9kZXZzdG9yZWFjY291bnQxL1xuICAgICAgICAgICAgLy8gLmdldFBhdGgoKSAtPiAvZGV2c3RvcmVhY2NvdW50MS9cbiAgICAgICAgICAgIGFjY291bnROYW1lID0gcGFyc2VkVXJsLnBhdGhuYW1lLnNwbGl0KFwiL1wiKVsxXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIEN1c3RvbSBkb21haW4gY2FzZTogXCJodHRwczovL2N1c3RvbWRvbWFpbi5jb20vY29udGFpbmVybmFtZS9ibG9iXCIuXG4gICAgICAgICAgICBhY2NvdW50TmFtZSA9IFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjY291bnROYW1lO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIGV4dHJhY3QgYWNjb3VudE5hbWUgd2l0aCBwcm92aWRlZCBpbmZvcm1hdGlvbi5cIik7XG4gICAgfVxufVxuZnVuY3Rpb24gaXNJcEVuZHBvaW50U3R5bGUocGFyc2VkVXJsKSB7XG4gICAgY29uc3QgaG9zdCA9IHBhcnNlZFVybC5ob3N0O1xuICAgIC8vIENhc2UgMTogSXB2NiwgdXNlIGEgYnJvYWQgcmVnZXggdG8gZmluZCBvdXQgY2FuZGlkYXRlcyB3aG9zZSBob3N0IGNvbnRhaW5zIHR3byAnOicuXG4gICAgLy8gQ2FzZSAyOiBsb2NhbGhvc3QoOnBvcnQpIG9yIGhvc3QuZG9ja2VyLmludGVybmFsLCB1c2UgYnJvYWQgcmVnZXggdG8gbWF0Y2ggcG9ydCBwYXJ0LlxuICAgIC8vIENhc2UgMzogSXB2NCwgdXNlIGJyb2FkIHJlZ2V4IHdoaWNoIGp1c3QgY2hlY2sgaWYgaG9zdCBjb250YWlucyBJcHY0LlxuICAgIC8vIEZvciB2YWxpZCBob3N0IHBsZWFzZSByZWZlciB0byBodHRwczovL21hbjcub3JnL2xpbnV4L21hbi1wYWdlcy9tYW43L2hvc3RuYW1lLjcuaHRtbC5cbiAgICByZXR1cm4gKC9eLio6Lio6LiokfF4obG9jYWxob3N0fGhvc3QuZG9ja2VyLmludGVybmFsKSg6WzAtOV0rKT8kfF4oXFxkfFsxLTldXFxkfDFcXGRcXGR8MlswLTRdXFxkfDI1WzAtNV0pKFxcLihcXGR8WzEtOV1cXGR8MVxcZFxcZHwyWzAtNF1cXGR8MjVbMC01XSkpezN9KDpbMC05XSspPyQvLnRlc3QoaG9zdCkgfHxcbiAgICAgICAgKEJvb2xlYW4ocGFyc2VkVXJsLnBvcnQpICYmIFBhdGhTdHlsZVBvcnRzLmluY2x1ZGVzKHBhcnNlZFVybC5wb3J0KSkpO1xufVxuLyoqXG4gKiBDb252ZXJ0IFRhZ3MgdG8gZW5jb2RlZCBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHRhZ3MgLVxuICovXG5mdW5jdGlvbiB0b0Jsb2JUYWdzU3RyaW5nKHRhZ3MpIHtcbiAgICBpZiAodGFncyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IHRhZ1BhaXJzID0gW107XG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGFncykge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRhZ3MsIGtleSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGFnc1trZXldO1xuICAgICAgICAgICAgdGFnUGFpcnMucHVzaChgJHtlbmNvZGVVUklDb21wb25lbnQoa2V5KX09JHtlbmNvZGVVUklDb21wb25lbnQodmFsdWUpfWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0YWdQYWlycy5qb2luKFwiJlwiKTtcbn1cbi8qKlxuICogQ29udmVydCBUYWdzIHR5cGUgdG8gQmxvYlRhZ3MuXG4gKlxuICogQHBhcmFtIHRhZ3MgLVxuICovXG5mdW5jdGlvbiB0b0Jsb2JUYWdzKHRhZ3MpIHtcbiAgICBpZiAodGFncyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IHJlcyA9IHtcbiAgICAgICAgYmxvYlRhZ1NldDogW10sXG4gICAgfTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0YWdzKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGFncywga2V5KSkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0YWdzW2tleV07XG4gICAgICAgICAgICByZXMuYmxvYlRhZ1NldC5wdXNoKHtcbiAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuLyoqXG4gKiBDb3ZlcnQgQmxvYlRhZ3MgdG8gVGFncyB0eXBlLlxuICpcbiAqIEBwYXJhbSB0YWdzIC1cbiAqL1xuZnVuY3Rpb24gdG9UYWdzKHRhZ3MpIHtcbiAgICBpZiAodGFncyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IHJlcyA9IHt9O1xuICAgIGZvciAoY29uc3QgYmxvYlRhZyBvZiB0YWdzLmJsb2JUYWdTZXQpIHtcbiAgICAgICAgcmVzW2Jsb2JUYWcua2V5XSA9IGJsb2JUYWcudmFsdWU7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG4vKipcbiAqIENvbnZlcnQgQmxvYlF1ZXJ5VGV4dENvbmZpZ3VyYXRpb24gdG8gUXVlcnlTZXJpYWxpemF0aW9uIHR5cGUuXG4gKlxuICogQHBhcmFtIHRleHRDb25maWd1cmF0aW9uIC1cbiAqL1xuZnVuY3Rpb24gdG9RdWVyeVNlcmlhbGl6YXRpb24odGV4dENvbmZpZ3VyYXRpb24pIHtcbiAgICBpZiAodGV4dENvbmZpZ3VyYXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBzd2l0Y2ggKHRleHRDb25maWd1cmF0aW9uLmtpbmQpIHtcbiAgICAgICAgY2FzZSBcImNzdlwiOlxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJkZWxpbWl0ZWRcIixcbiAgICAgICAgICAgICAgICAgICAgZGVsaW1pdGVkVGV4dENvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtblNlcGFyYXRvcjogdGV4dENvbmZpZ3VyYXRpb24uY29sdW1uU2VwYXJhdG9yIHx8IFwiLFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRRdW90ZTogdGV4dENvbmZpZ3VyYXRpb24uZmllbGRRdW90ZSB8fCBcIlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkU2VwYXJhdG9yOiB0ZXh0Q29uZmlndXJhdGlvbi5yZWNvcmRTZXBhcmF0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgICBlc2NhcGVDaGFyOiB0ZXh0Q29uZmlndXJhdGlvbi5lc2NhcGVDaGFyYWN0ZXIgfHwgXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnNQcmVzZW50OiB0ZXh0Q29uZmlndXJhdGlvbi5oYXNIZWFkZXJzIHx8IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICBjYXNlIFwianNvblwiOlxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJqc29uXCIsXG4gICAgICAgICAgICAgICAgICAgIGpzb25UZXh0Q29uZmlndXJhdGlvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkU2VwYXJhdG9yOiB0ZXh0Q29uZmlndXJhdGlvbi5yZWNvcmRTZXBhcmF0b3IsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIGNhc2UgXCJhcnJvd1wiOlxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJhcnJvd1wiLFxuICAgICAgICAgICAgICAgICAgICBhcnJvd0NvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYTogdGV4dENvbmZpZ3VyYXRpb24uc2NoZW1hLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICBjYXNlIFwicGFycXVldFwiOlxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJwYXJxdWV0XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcIkludmFsaWQgQmxvYlF1ZXJ5VGV4dENvbmZpZ3VyYXRpb24uXCIpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHBhcnNlT2JqZWN0UmVwbGljYXRpb25SZWNvcmQob2JqZWN0UmVwbGljYXRpb25SZWNvcmQpIHtcbiAgICBpZiAoIW9iamVjdFJlcGxpY2F0aW9uUmVjb3JkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmIChcInBvbGljeS1pZFwiIGluIG9iamVjdFJlcGxpY2F0aW9uUmVjb3JkKSB7XG4gICAgICAgIC8vIElmIHRoZSBkaWN0aW9uYXJ5IGNvbnRhaW5zIGEga2V5IHdpdGggcG9saWN5IGlkLCB3ZSBhcmUgbm90IHJlcXVpcmVkIHRvIGRvIGFueSBwYXJzaW5nIHNpbmNlXG4gICAgICAgIC8vIHRoZSBwb2xpY3kgaWQgc2hvdWxkIGFscmVhZHkgYmUgc3RvcmVkIGluIHRoZSBPYmplY3RSZXBsaWNhdGlvbkRlc3RpbmF0aW9uUG9saWN5SWQuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IG9yUHJvcGVydGllcyA9IFtdO1xuICAgIGZvciAoY29uc3Qga2V5IGluIG9iamVjdFJlcGxpY2F0aW9uUmVjb3JkKSB7XG4gICAgICAgIGNvbnN0IGlkcyA9IGtleS5zcGxpdChcIl9cIik7XG4gICAgICAgIGNvbnN0IHBvbGljeVByZWZpeCA9IFwib3ItXCI7XG4gICAgICAgIGlmIChpZHNbMF0uc3RhcnRzV2l0aChwb2xpY3lQcmVmaXgpKSB7XG4gICAgICAgICAgICBpZHNbMF0gPSBpZHNbMF0uc3Vic3RyaW5nKHBvbGljeVByZWZpeC5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJ1bGUgPSB7XG4gICAgICAgICAgICBydWxlSWQ6IGlkc1sxXSxcbiAgICAgICAgICAgIHJlcGxpY2F0aW9uU3RhdHVzOiBvYmplY3RSZXBsaWNhdGlvblJlY29yZFtrZXldLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBwb2xpY3lJbmRleCA9IG9yUHJvcGVydGllcy5maW5kSW5kZXgoKHBvbGljeSkgPT4gcG9saWN5LnBvbGljeUlkID09PSBpZHNbMF0pO1xuICAgICAgICBpZiAocG9saWN5SW5kZXggPiAtMSkge1xuICAgICAgICAgICAgb3JQcm9wZXJ0aWVzW3BvbGljeUluZGV4XS5ydWxlcy5wdXNoKHJ1bGUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgb3JQcm9wZXJ0aWVzLnB1c2goe1xuICAgICAgICAgICAgICAgIHBvbGljeUlkOiBpZHNbMF0sXG4gICAgICAgICAgICAgICAgcnVsZXM6IFtydWxlXSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvclByb3BlcnRpZXM7XG59XG5mdW5jdGlvbiBodHRwQXV0aG9yaXphdGlvblRvU3RyaW5nKGh0dHBBdXRob3JpemF0aW9uKSB7XG4gICAgcmV0dXJuIGh0dHBBdXRob3JpemF0aW9uID8gaHR0cEF1dGhvcml6YXRpb24uc2NoZW1lICsgXCIgXCIgKyBodHRwQXV0aG9yaXphdGlvbi52YWx1ZSA6IHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIEJsb2JOYW1lVG9TdHJpbmcobmFtZSkge1xuICAgIGlmIChuYW1lLmVuY29kZWQpIHtcbiAgICAgICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChuYW1lLmNvbnRlbnQpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5hbWUuY29udGVudDtcbiAgICB9XG59XG5mdW5jdGlvbiBDb252ZXJ0SW50ZXJuYWxSZXNwb25zZU9mTGlzdEJsb2JGbGF0KGludGVybmFsUmVzcG9uc2UpIHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBpbnRlcm5hbFJlc3BvbnNlKSwgeyBzZWdtZW50OiB7XG4gICAgICAgICAgICBibG9iSXRlbXM6IGludGVybmFsUmVzcG9uc2Uuc2VnbWVudC5ibG9iSXRlbXMubWFwKChibG9iSXRlbUludGVyYWwpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBibG9iSXRlbSA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYmxvYkl0ZW1JbnRlcmFsKSwgeyBuYW1lOiBCbG9iTmFtZVRvU3RyaW5nKGJsb2JJdGVtSW50ZXJhbC5uYW1lKSB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYmxvYkl0ZW07XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSB9KTtcbn1cbmZ1bmN0aW9uIENvbnZlcnRJbnRlcm5hbFJlc3BvbnNlT2ZMaXN0QmxvYkhpZXJhcmNoeShpbnRlcm5hbFJlc3BvbnNlKSB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGludGVybmFsUmVzcG9uc2UpLCB7IHNlZ21lbnQ6IHtcbiAgICAgICAgICAgIGJsb2JQcmVmaXhlczogKF9hID0gaW50ZXJuYWxSZXNwb25zZS5zZWdtZW50LmJsb2JQcmVmaXhlcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm1hcCgoYmxvYlByZWZpeEludGVybmFsKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmxvYlByZWZpeCA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYmxvYlByZWZpeEludGVybmFsKSwgeyBuYW1lOiBCbG9iTmFtZVRvU3RyaW5nKGJsb2JQcmVmaXhJbnRlcm5hbC5uYW1lKSB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYmxvYlByZWZpeDtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgYmxvYkl0ZW1zOiBpbnRlcm5hbFJlc3BvbnNlLnNlZ21lbnQuYmxvYkl0ZW1zLm1hcCgoYmxvYkl0ZW1JbnRlcmFsKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmxvYkl0ZW0gPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGJsb2JJdGVtSW50ZXJhbCksIHsgbmFtZTogQmxvYk5hbWVUb1N0cmluZyhibG9iSXRlbUludGVyYWwubmFtZSkgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJsb2JJdGVtO1xuICAgICAgICAgICAgfSksXG4gICAgICAgIH0gfSk7XG59XG5mdW5jdGlvbiogRXh0cmFjdFBhZ2VSYW5nZUluZm9JdGVtcyhnZXRQYWdlUmFuZ2VzU2VnbWVudCkge1xuICAgIGxldCBwYWdlUmFuZ2UgPSBbXTtcbiAgICBsZXQgY2xlYXJSYW5nZSA9IFtdO1xuICAgIGlmIChnZXRQYWdlUmFuZ2VzU2VnbWVudC5wYWdlUmFuZ2UpXG4gICAgICAgIHBhZ2VSYW5nZSA9IGdldFBhZ2VSYW5nZXNTZWdtZW50LnBhZ2VSYW5nZTtcbiAgICBpZiAoZ2V0UGFnZVJhbmdlc1NlZ21lbnQuY2xlYXJSYW5nZSlcbiAgICAgICAgY2xlYXJSYW5nZSA9IGdldFBhZ2VSYW5nZXNTZWdtZW50LmNsZWFyUmFuZ2U7XG4gICAgbGV0IHBhZ2VSYW5nZUluZGV4ID0gMDtcbiAgICBsZXQgY2xlYXJSYW5nZUluZGV4ID0gMDtcbiAgICB3aGlsZSAocGFnZVJhbmdlSW5kZXggPCBwYWdlUmFuZ2UubGVuZ3RoICYmIGNsZWFyUmFuZ2VJbmRleCA8IGNsZWFyUmFuZ2UubGVuZ3RoKSB7XG4gICAgICAgIGlmIChwYWdlUmFuZ2VbcGFnZVJhbmdlSW5kZXhdLnN0YXJ0IDwgY2xlYXJSYW5nZVtjbGVhclJhbmdlSW5kZXhdLnN0YXJ0KSB7XG4gICAgICAgICAgICB5aWVsZCB7XG4gICAgICAgICAgICAgICAgc3RhcnQ6IHBhZ2VSYW5nZVtwYWdlUmFuZ2VJbmRleF0uc3RhcnQsXG4gICAgICAgICAgICAgICAgZW5kOiBwYWdlUmFuZ2VbcGFnZVJhbmdlSW5kZXhdLmVuZCxcbiAgICAgICAgICAgICAgICBpc0NsZWFyOiBmYWxzZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICArK3BhZ2VSYW5nZUluZGV4O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgeWllbGQge1xuICAgICAgICAgICAgICAgIHN0YXJ0OiBjbGVhclJhbmdlW2NsZWFyUmFuZ2VJbmRleF0uc3RhcnQsXG4gICAgICAgICAgICAgICAgZW5kOiBjbGVhclJhbmdlW2NsZWFyUmFuZ2VJbmRleF0uZW5kLFxuICAgICAgICAgICAgICAgIGlzQ2xlYXI6IHRydWUsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgKytjbGVhclJhbmdlSW5kZXg7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZm9yICg7IHBhZ2VSYW5nZUluZGV4IDwgcGFnZVJhbmdlLmxlbmd0aDsgKytwYWdlUmFuZ2VJbmRleCkge1xuICAgICAgICB5aWVsZCB7XG4gICAgICAgICAgICBzdGFydDogcGFnZVJhbmdlW3BhZ2VSYW5nZUluZGV4XS5zdGFydCxcbiAgICAgICAgICAgIGVuZDogcGFnZVJhbmdlW3BhZ2VSYW5nZUluZGV4XS5lbmQsXG4gICAgICAgICAgICBpc0NsZWFyOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZm9yICg7IGNsZWFyUmFuZ2VJbmRleCA8IGNsZWFyUmFuZ2UubGVuZ3RoOyArK2NsZWFyUmFuZ2VJbmRleCkge1xuICAgICAgICB5aWVsZCB7XG4gICAgICAgICAgICBzdGFydDogY2xlYXJSYW5nZVtjbGVhclJhbmdlSW5kZXhdLnN0YXJ0LFxuICAgICAgICAgICAgZW5kOiBjbGVhclJhbmdlW2NsZWFyUmFuZ2VJbmRleF0uZW5kLFxuICAgICAgICAgICAgaXNDbGVhcjogdHJ1ZSxcbiAgICAgICAgfTtcbiAgICB9XG59XG4vKipcbiAqIEVzY2FwZSB0aGUgYmxvYk5hbWUgYnV0IGtlZXAgcGF0aCBzZXBhcmF0b3IgKCcvJykuXG4gKi9cbmZ1bmN0aW9uIEVzY2FwZVBhdGgoYmxvYk5hbWUpIHtcbiAgICBjb25zdCBzcGxpdCA9IGJsb2JOYW1lLnNwbGl0KFwiL1wiKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNwbGl0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHNwbGl0W2ldID0gZW5jb2RlVVJJQ29tcG9uZW50KHNwbGl0W2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIHNwbGl0LmpvaW4oXCIvXCIpO1xufVxuLyoqXG4gKiBBIHR5cGVzYWZlIGhlbHBlciBmb3IgZW5zdXJpbmcgdGhhdCBhIGdpdmVuIHJlc3BvbnNlIG9iamVjdCBoYXNcbiAqIHRoZSBvcmlnaW5hbCBfcmVzcG9uc2UgYXR0YWNoZWQuXG4gKiBAcGFyYW0gcmVzcG9uc2UgLSBBIHJlc3BvbnNlIG9iamVjdCBmcm9tIGNhbGxpbmcgYSBjbGllbnQgb3BlcmF0aW9uXG4gKiBAcmV0dXJucyBUaGUgc2FtZSBvYmplY3QsIGJ1dCB3aXRoIGtub3duIF9yZXNwb25zZSBwcm9wZXJ0eVxuICovXG5mdW5jdGlvbiBhc3NlcnRSZXNwb25zZShyZXNwb25zZSkge1xuICAgIGlmIChgX3Jlc3BvbnNlYCBpbiByZXNwb25zZSkge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFVuZXhwZWN0ZWQgcmVzcG9uc2Ugb2JqZWN0ICR7cmVzcG9uc2V9YCk7XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBSZXRyeVBvbGljeSB0eXBlcy5cbiAqL1xuZXhwb3J0cy5TdG9yYWdlUmV0cnlQb2xpY3lUeXBlID0gdm9pZCAwO1xuKGZ1bmN0aW9uIChTdG9yYWdlUmV0cnlQb2xpY3lUeXBlKSB7XG4gICAgLyoqXG4gICAgICogRXhwb25lbnRpYWwgcmV0cnkuIFJldHJ5IHRpbWUgZGVsYXkgZ3Jvd3MgZXhwb25lbnRpYWxseS5cbiAgICAgKi9cbiAgICBTdG9yYWdlUmV0cnlQb2xpY3lUeXBlW1N0b3JhZ2VSZXRyeVBvbGljeVR5cGVbXCJFWFBPTkVOVElBTFwiXSA9IDBdID0gXCJFWFBPTkVOVElBTFwiO1xuICAgIC8qKlxuICAgICAqIExpbmVhciByZXRyeS4gUmV0cnkgdGltZSBkZWxheSBncm93cyBsaW5lYXJseS5cbiAgICAgKi9cbiAgICBTdG9yYWdlUmV0cnlQb2xpY3lUeXBlW1N0b3JhZ2VSZXRyeVBvbGljeVR5cGVbXCJGSVhFRFwiXSA9IDFdID0gXCJGSVhFRFwiO1xufSkoZXhwb3J0cy5TdG9yYWdlUmV0cnlQb2xpY3lUeXBlIHx8IChleHBvcnRzLlN0b3JhZ2VSZXRyeVBvbGljeVR5cGUgPSB7fSkpO1xuLy8gRGVmYXVsdCB2YWx1ZXMgb2YgU3RvcmFnZVJldHJ5T3B0aW9uc1xuY29uc3QgREVGQVVMVF9SRVRSWV9PUFRJT05TJDEgPSB7XG4gICAgbWF4UmV0cnlEZWxheUluTXM6IDEyMCAqIDEwMDAsXG4gICAgbWF4VHJpZXM6IDQsXG4gICAgcmV0cnlEZWxheUluTXM6IDQgKiAxMDAwLFxuICAgIHJldHJ5UG9saWN5VHlwZTogZXhwb3J0cy5TdG9yYWdlUmV0cnlQb2xpY3lUeXBlLkVYUE9ORU5USUFMLFxuICAgIHNlY29uZGFyeUhvc3Q6IFwiXCIsXG4gICAgdHJ5VGltZW91dEluTXM6IHVuZGVmaW5lZCwgLy8gVXNlIHNlcnZlciBzaWRlIGRlZmF1bHQgdGltZW91dCBzdHJhdGVneVxufTtcbmNvbnN0IFJFVFJZX0FCT1JUX0VSUk9SJDEgPSBuZXcgYWJvcnRDb250cm9sbGVyLkFib3J0RXJyb3IoXCJUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLlwiKTtcbi8qKlxuICogUmV0cnkgcG9saWN5IHdpdGggZXhwb25lbnRpYWwgcmV0cnkgYW5kIGxpbmVhciByZXRyeSBpbXBsZW1lbnRlZC5cbiAqL1xuY2xhc3MgU3RvcmFnZVJldHJ5UG9saWN5IGV4dGVuZHMgQmFzZVJlcXVlc3RQb2xpY3kge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgUmV0cnlQb2xpY3kuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmV4dFBvbGljeSAtXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLVxuICAgICAqIEBwYXJhbSByZXRyeU9wdGlvbnMgLVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG5leHRQb2xpY3ksIG9wdGlvbnMsIHJldHJ5T3B0aW9ucyA9IERFRkFVTFRfUkVUUllfT1BUSU9OUyQxKSB7XG4gICAgICAgIHN1cGVyKG5leHRQb2xpY3ksIG9wdGlvbnMpO1xuICAgICAgICAvLyBJbml0aWFsaXplIHJldHJ5IG9wdGlvbnNcbiAgICAgICAgdGhpcy5yZXRyeU9wdGlvbnMgPSB7XG4gICAgICAgICAgICByZXRyeVBvbGljeVR5cGU6IHJldHJ5T3B0aW9ucy5yZXRyeVBvbGljeVR5cGVcbiAgICAgICAgICAgICAgICA/IHJldHJ5T3B0aW9ucy5yZXRyeVBvbGljeVR5cGVcbiAgICAgICAgICAgICAgICA6IERFRkFVTFRfUkVUUllfT1BUSU9OUyQxLnJldHJ5UG9saWN5VHlwZSxcbiAgICAgICAgICAgIG1heFRyaWVzOiByZXRyeU9wdGlvbnMubWF4VHJpZXMgJiYgcmV0cnlPcHRpb25zLm1heFRyaWVzID49IDFcbiAgICAgICAgICAgICAgICA/IE1hdGguZmxvb3IocmV0cnlPcHRpb25zLm1heFRyaWVzKVxuICAgICAgICAgICAgICAgIDogREVGQVVMVF9SRVRSWV9PUFRJT05TJDEubWF4VHJpZXMsXG4gICAgICAgICAgICB0cnlUaW1lb3V0SW5NczogcmV0cnlPcHRpb25zLnRyeVRpbWVvdXRJbk1zICYmIHJldHJ5T3B0aW9ucy50cnlUaW1lb3V0SW5NcyA+PSAwXG4gICAgICAgICAgICAgICAgPyByZXRyeU9wdGlvbnMudHJ5VGltZW91dEluTXNcbiAgICAgICAgICAgICAgICA6IERFRkFVTFRfUkVUUllfT1BUSU9OUyQxLnRyeVRpbWVvdXRJbk1zLFxuICAgICAgICAgICAgcmV0cnlEZWxheUluTXM6IHJldHJ5T3B0aW9ucy5yZXRyeURlbGF5SW5NcyAmJiByZXRyeU9wdGlvbnMucmV0cnlEZWxheUluTXMgPj0gMFxuICAgICAgICAgICAgICAgID8gTWF0aC5taW4ocmV0cnlPcHRpb25zLnJldHJ5RGVsYXlJbk1zLCByZXRyeU9wdGlvbnMubWF4UmV0cnlEZWxheUluTXNcbiAgICAgICAgICAgICAgICAgICAgPyByZXRyeU9wdGlvbnMubWF4UmV0cnlEZWxheUluTXNcbiAgICAgICAgICAgICAgICAgICAgOiBERUZBVUxUX1JFVFJZX09QVElPTlMkMS5tYXhSZXRyeURlbGF5SW5NcylcbiAgICAgICAgICAgICAgICA6IERFRkFVTFRfUkVUUllfT1BUSU9OUyQxLnJldHJ5RGVsYXlJbk1zLFxuICAgICAgICAgICAgbWF4UmV0cnlEZWxheUluTXM6IHJldHJ5T3B0aW9ucy5tYXhSZXRyeURlbGF5SW5NcyAmJiByZXRyeU9wdGlvbnMubWF4UmV0cnlEZWxheUluTXMgPj0gMFxuICAgICAgICAgICAgICAgID8gcmV0cnlPcHRpb25zLm1heFJldHJ5RGVsYXlJbk1zXG4gICAgICAgICAgICAgICAgOiBERUZBVUxUX1JFVFJZX09QVElPTlMkMS5tYXhSZXRyeURlbGF5SW5NcyxcbiAgICAgICAgICAgIHNlY29uZGFyeUhvc3Q6IHJldHJ5T3B0aW9ucy5zZWNvbmRhcnlIb3N0XG4gICAgICAgICAgICAgICAgPyByZXRyeU9wdGlvbnMuc2Vjb25kYXJ5SG9zdFxuICAgICAgICAgICAgICAgIDogREVGQVVMVF9SRVRSWV9PUFRJT05TJDEuc2Vjb25kYXJ5SG9zdCxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2VuZHMgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByZXF1ZXN0IC1cbiAgICAgKi9cbiAgICBhc3luYyBzZW5kUmVxdWVzdChyZXF1ZXN0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmF0dGVtcHRTZW5kUmVxdWVzdChyZXF1ZXN0LCBmYWxzZSwgMSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlY2lkZSBhbmQgcGVyZm9ybSBuZXh0IHJldHJ5LiBXb24ndCBtdXRhdGUgcmVxdWVzdCBwYXJhbWV0ZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVxdWVzdCAtXG4gICAgICogQHBhcmFtIHNlY29uZGFyeUhhczQwNCAtICBJZiBhdHRlbXB0IHdhcyBhZ2FpbnN0IHRoZSBzZWNvbmRhcnkgJiBpdCByZXR1cm5lZCBhIFN0YXR1c05vdEZvdW5kICg0MDQpLCB0aGVuXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSByZXNvdXJjZSB3YXMgbm90IGZvdW5kLiBUaGlzIG1heSBiZSBkdWUgdG8gcmVwbGljYXRpb24gZGVsYXkuIFNvLCBpbiB0aGlzXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UsIHdlJ2xsIG5ldmVyIHRyeSB0aGUgc2Vjb25kYXJ5IGFnYWluIGZvciB0aGlzIG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0gYXR0ZW1wdCAtICAgICAgICAgICBIb3cgbWFueSByZXRyaWVzIGhhcyBiZWVuIGF0dGVtcHRlZCB0byBwZXJmb3JtZWQsIHN0YXJ0aW5nIGZyb20gMSwgd2hpY2ggaW5jbHVkZXNcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGF0dGVtcHQgd2lsbCBiZSBwZXJmb3JtZWQgYnkgdGhpcyBtZXRob2QgY2FsbC5cbiAgICAgKi9cbiAgICBhc3luYyBhdHRlbXB0U2VuZFJlcXVlc3QocmVxdWVzdCwgc2Vjb25kYXJ5SGFzNDA0LCBhdHRlbXB0KSB7XG4gICAgICAgIGNvbnN0IG5ld1JlcXVlc3QgPSByZXF1ZXN0LmNsb25lKCk7XG4gICAgICAgIGNvbnN0IGlzUHJpbWFyeVJldHJ5ID0gc2Vjb25kYXJ5SGFzNDA0IHx8XG4gICAgICAgICAgICAhdGhpcy5yZXRyeU9wdGlvbnMuc2Vjb25kYXJ5SG9zdCB8fFxuICAgICAgICAgICAgIShyZXF1ZXN0Lm1ldGhvZCA9PT0gXCJHRVRcIiB8fCByZXF1ZXN0Lm1ldGhvZCA9PT0gXCJIRUFEXCIgfHwgcmVxdWVzdC5tZXRob2QgPT09IFwiT1BUSU9OU1wiKSB8fFxuICAgICAgICAgICAgYXR0ZW1wdCAlIDIgPT09IDE7XG4gICAgICAgIGlmICghaXNQcmltYXJ5UmV0cnkpIHtcbiAgICAgICAgICAgIG5ld1JlcXVlc3QudXJsID0gc2V0VVJMSG9zdChuZXdSZXF1ZXN0LnVybCwgdGhpcy5yZXRyeU9wdGlvbnMuc2Vjb25kYXJ5SG9zdCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU2V0IHRoZSBzZXJ2ZXItc2lkZSB0aW1lb3V0IHF1ZXJ5IHBhcmFtZXRlciBcInRpbWVvdXQ9W3NlY29uZHNdXCJcbiAgICAgICAgaWYgKHRoaXMucmV0cnlPcHRpb25zLnRyeVRpbWVvdXRJbk1zKSB7XG4gICAgICAgICAgICBuZXdSZXF1ZXN0LnVybCA9IHNldFVSTFBhcmFtZXRlcihuZXdSZXF1ZXN0LnVybCwgVVJMQ29uc3RhbnRzLlBhcmFtZXRlcnMuVElNRU9VVCwgTWF0aC5mbG9vcih0aGlzLnJldHJ5T3B0aW9ucy50cnlUaW1lb3V0SW5NcyAvIDEwMDApLnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBSZXRyeVBvbGljeTogPT09PT0+IFRyeT0ke2F0dGVtcHR9ICR7aXNQcmltYXJ5UmV0cnkgPyBcIlByaW1hcnlcIiA6IFwiU2Vjb25kYXJ5XCJ9YCk7XG4gICAgICAgICAgICByZXNwb25zZSA9IGF3YWl0IHRoaXMuX25leHRQb2xpY3kuc2VuZFJlcXVlc3QobmV3UmVxdWVzdCk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuc2hvdWxkUmV0cnkoaXNQcmltYXJ5UmV0cnksIGF0dGVtcHQsIHJlc3BvbnNlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlY29uZGFyeUhhczQwNCA9IHNlY29uZGFyeUhhczQwNCB8fCAoIWlzUHJpbWFyeVJldHJ5ICYmIHJlc3BvbnNlLnN0YXR1cyA9PT0gNDA0KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBsb2dnZXIuZXJyb3IoYFJldHJ5UG9saWN5OiBDYXVnaHQgZXJyb3IsIG1lc3NhZ2U6ICR7ZXJyLm1lc3NhZ2V9LCBjb2RlOiAke2Vyci5jb2RlfWApO1xuICAgICAgICAgICAgaWYgKCF0aGlzLnNob3VsZFJldHJ5KGlzUHJpbWFyeVJldHJ5LCBhdHRlbXB0LCByZXNwb25zZSwgZXJyKSkge1xuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLmRlbGF5KGlzUHJpbWFyeVJldHJ5LCBhdHRlbXB0LCByZXF1ZXN0LmFib3J0U2lnbmFsKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXR0ZW1wdFNlbmRSZXF1ZXN0KHJlcXVlc3QsIHNlY29uZGFyeUhhczQwNCwgKythdHRlbXB0KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVjaWRlIHdoZXRoZXIgdG8gcmV0cnkgYWNjb3JkaW5nIHRvIGxhc3QgSFRUUCByZXNwb25zZSBhbmQgcmV0cnkgY291bnRlcnMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaXNQcmltYXJ5UmV0cnkgLVxuICAgICAqIEBwYXJhbSBhdHRlbXB0IC1cbiAgICAgKiBAcGFyYW0gcmVzcG9uc2UgLVxuICAgICAqIEBwYXJhbSBlcnIgLVxuICAgICAqL1xuICAgIHNob3VsZFJldHJ5KGlzUHJpbWFyeVJldHJ5LCBhdHRlbXB0LCByZXNwb25zZSwgZXJyKSB7XG4gICAgICAgIGlmIChhdHRlbXB0ID49IHRoaXMucmV0cnlPcHRpb25zLm1heFRyaWVzKSB7XG4gICAgICAgICAgICBsb2dnZXIuaW5mbyhgUmV0cnlQb2xpY3k6IEF0dGVtcHQocykgJHthdHRlbXB0fSA+PSBtYXhUcmllcyAke3RoaXMucmV0cnlPcHRpb25zXG4gICAgICAgICAgICAgICAgLm1heFRyaWVzfSwgbm8gZnVydGhlciB0cnkuYCk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSGFuZGxlIG5ldHdvcmsgZmFpbHVyZXMsIHlvdSBtYXkgbmVlZCB0byBjdXN0b21pemUgdGhlIGxpc3Qgd2hlbiB5b3UgaW1wbGVtZW50XG4gICAgICAgIC8vIHlvdXIgb3duIGh0dHAgY2xpZW50XG4gICAgICAgIGNvbnN0IHJldHJpYWJsZUVycm9ycyA9IFtcbiAgICAgICAgICAgIFwiRVRJTUVET1VUXCIsXG4gICAgICAgICAgICBcIkVTT0NLRVRUSU1FRE9VVFwiLFxuICAgICAgICAgICAgXCJFQ09OTlJFRlVTRURcIixcbiAgICAgICAgICAgIFwiRUNPTk5SRVNFVFwiLFxuICAgICAgICAgICAgXCJFTk9FTlRcIixcbiAgICAgICAgICAgIFwiRU5PVEZPVU5EXCIsXG4gICAgICAgICAgICBcIlRJTUVPVVRcIixcbiAgICAgICAgICAgIFwiRVBJUEVcIixcbiAgICAgICAgICAgIFwiUkVRVUVTVF9TRU5EX0VSUk9SXCIsIC8vIEZvciBkZWZhdWx0IHhociBiYXNlZCBodHRwIGNsaWVudCBwcm92aWRlZCBpbiBtcy1yZXN0LWpzXG4gICAgICAgIF07XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcmV0cmlhYmxlRXJyb3Igb2YgcmV0cmlhYmxlRXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVyci5uYW1lLnRvVXBwZXJDYXNlKCkuaW5jbHVkZXMocmV0cmlhYmxlRXJyb3IpIHx8XG4gICAgICAgICAgICAgICAgICAgIGVyci5tZXNzYWdlLnRvVXBwZXJDYXNlKCkuaW5jbHVkZXMocmV0cmlhYmxlRXJyb3IpIHx8XG4gICAgICAgICAgICAgICAgICAgIChlcnIuY29kZSAmJiBlcnIuY29kZS50b1N0cmluZygpLnRvVXBwZXJDYXNlKCkgPT09IHJldHJpYWJsZUVycm9yKSkge1xuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhgUmV0cnlQb2xpY3k6IE5ldHdvcmsgZXJyb3IgJHtyZXRyaWFibGVFcnJvcn0gZm91bmQsIHdpbGwgcmV0cnkuYCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBJZiBhdHRlbXB0IHdhcyBhZ2FpbnN0IHRoZSBzZWNvbmRhcnkgJiBpdCByZXR1cm5lZCBhIFN0YXR1c05vdEZvdW5kICg0MDQpLCB0aGVuXG4gICAgICAgIC8vIHRoZSByZXNvdXJjZSB3YXMgbm90IGZvdW5kLiBUaGlzIG1heSBiZSBkdWUgdG8gcmVwbGljYXRpb24gZGVsYXkuIFNvLCBpbiB0aGlzXG4gICAgICAgIC8vIGNhc2UsIHdlJ2xsIG5ldmVyIHRyeSB0aGUgc2Vjb25kYXJ5IGFnYWluIGZvciB0aGlzIG9wZXJhdGlvbi5cbiAgICAgICAgaWYgKHJlc3BvbnNlIHx8IGVycikge1xuICAgICAgICAgICAgY29uc3Qgc3RhdHVzQ29kZSA9IHJlc3BvbnNlID8gcmVzcG9uc2Uuc3RhdHVzIDogZXJyID8gZXJyLnN0YXR1c0NvZGUgOiAwO1xuICAgICAgICAgICAgaWYgKCFpc1ByaW1hcnlSZXRyeSAmJiBzdGF0dXNDb2RlID09PSA0MDQpIHtcbiAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhgUmV0cnlQb2xpY3k6IFNlY29uZGFyeSBhY2Nlc3Mgd2l0aCA0MDQsIHdpbGwgcmV0cnkuYCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBTZXJ2ZXIgaW50ZXJuYWwgZXJyb3Igb3Igc2VydmVyIHRpbWVvdXRcbiAgICAgICAgICAgIGlmIChzdGF0dXNDb2RlID09PSA1MDMgfHwgc3RhdHVzQ29kZSA9PT0gNTAwKSB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYFJldHJ5UG9saWN5OiBXaWxsIHJldHJ5IGZvciBzdGF0dXMgY29kZSAke3N0YXR1c0NvZGV9LmApO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFtDb3B5IHNvdXJjZSBlcnJvciBjb2RlXSBGZWF0dXJlIGlzIHBlbmRpbmcgb24gc2VydmljZSBzaWRlLCBza2lwIHJldHJ5IG9uIGNvcHkgc291cmNlIGVycm9yIGZvciBub3cuXG4gICAgICAgIC8vIGlmIChyZXNwb25zZSkge1xuICAgICAgICAvLyAgIC8vIFJldHJ5IHNlbGVjdCBDb3B5IFNvdXJjZSBFcnJvciBDb2Rlcy5cbiAgICAgICAgLy8gICBpZiAocmVzcG9uc2U/LnN0YXR1cyA+PSA0MDApIHtcbiAgICAgICAgLy8gICAgIGNvbnN0IGNvcHlTb3VyY2VFcnJvciA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KEhlYWRlckNvbnN0YW50cy5YX01TX0NvcHlTb3VyY2VFcnJvckNvZGUpO1xuICAgICAgICAvLyAgICAgaWYgKGNvcHlTb3VyY2VFcnJvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vICAgICAgIHN3aXRjaCAoY29weVNvdXJjZUVycm9yKSB7XG4gICAgICAgIC8vICAgICAgICAgY2FzZSBcIkludGVybmFsRXJyb3JcIjpcbiAgICAgICAgLy8gICAgICAgICBjYXNlIFwiT3BlcmF0aW9uVGltZWRPdXRcIjpcbiAgICAgICAgLy8gICAgICAgICBjYXNlIFwiU2VydmVyQnVzeVwiOlxuICAgICAgICAvLyAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIC8vICAgICAgIH1cbiAgICAgICAgLy8gICAgIH1cbiAgICAgICAgLy8gICB9XG4gICAgICAgIC8vIH1cbiAgICAgICAgaWYgKChlcnIgPT09IG51bGwgfHwgZXJyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlcnIuY29kZSkgPT09IFwiUEFSU0VfRVJST1JcIiAmJiAoZXJyID09PSBudWxsIHx8IGVyciA9PT0gdm9pZCAwID8gdm9pZCAwIDogZXJyLm1lc3NhZ2Uuc3RhcnRzV2l0aChgRXJyb3IgXCJFcnJvcjogVW5jbG9zZWQgcm9vdCB0YWdgKSkpIHtcbiAgICAgICAgICAgIGxvZ2dlci5pbmZvKFwiUmV0cnlQb2xpY3k6IEluY29tcGxldGUgWE1MIHJlc3BvbnNlIGxpa2VseSBkdWUgdG8gc2VydmljZSB0aW1lb3V0LCB3aWxsIHJldHJ5LlwiKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVsYXkgYSBjYWxjdWxhdGVkIHRpbWUgYmV0d2VlbiByZXRyaWVzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGlzUHJpbWFyeVJldHJ5IC1cbiAgICAgKiBAcGFyYW0gYXR0ZW1wdCAtXG4gICAgICogQHBhcmFtIGFib3J0U2lnbmFsIC1cbiAgICAgKi9cbiAgICBhc3luYyBkZWxheShpc1ByaW1hcnlSZXRyeSwgYXR0ZW1wdCwgYWJvcnRTaWduYWwpIHtcbiAgICAgICAgbGV0IGRlbGF5VGltZUluTXMgPSAwO1xuICAgICAgICBpZiAoaXNQcmltYXJ5UmV0cnkpIHtcbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy5yZXRyeU9wdGlvbnMucmV0cnlQb2xpY3lUeXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBleHBvcnRzLlN0b3JhZ2VSZXRyeVBvbGljeVR5cGUuRVhQT05FTlRJQUw6XG4gICAgICAgICAgICAgICAgICAgIGRlbGF5VGltZUluTXMgPSBNYXRoLm1pbigoTWF0aC5wb3coMiwgYXR0ZW1wdCAtIDEpIC0gMSkgKiB0aGlzLnJldHJ5T3B0aW9ucy5yZXRyeURlbGF5SW5NcywgdGhpcy5yZXRyeU9wdGlvbnMubWF4UmV0cnlEZWxheUluTXMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIGV4cG9ydHMuU3RvcmFnZVJldHJ5UG9saWN5VHlwZS5GSVhFRDpcbiAgICAgICAgICAgICAgICAgICAgZGVsYXlUaW1lSW5NcyA9IHRoaXMucmV0cnlPcHRpb25zLnJldHJ5RGVsYXlJbk1zO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGRlbGF5VGltZUluTXMgPSBNYXRoLnJhbmRvbSgpICogMTAwMDtcbiAgICAgICAgfVxuICAgICAgICBsb2dnZXIuaW5mbyhgUmV0cnlQb2xpY3k6IERlbGF5IGZvciAke2RlbGF5VGltZUluTXN9bXNgKTtcbiAgICAgICAgcmV0dXJuIGRlbGF5KGRlbGF5VGltZUluTXMsIGFib3J0U2lnbmFsLCBSRVRSWV9BQk9SVF9FUlJPUiQxKTtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBTdG9yYWdlUmV0cnlQb2xpY3lGYWN0b3J5IGlzIGEgZmFjdG9yeSBjbGFzcyBoZWxwaW5nIGdlbmVyYXRpbmcge0BsaW5rIFN0b3JhZ2VSZXRyeVBvbGljeX0gb2JqZWN0cy5cbiAqL1xuY2xhc3MgU3RvcmFnZVJldHJ5UG9saWN5RmFjdG9yeSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBTdG9yYWdlUmV0cnlQb2xpY3lGYWN0b3J5LlxuICAgICAqIEBwYXJhbSByZXRyeU9wdGlvbnMgLVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHJldHJ5T3B0aW9ucykge1xuICAgICAgICB0aGlzLnJldHJ5T3B0aW9ucyA9IHJldHJ5T3B0aW9ucztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIFN0b3JhZ2VSZXRyeVBvbGljeSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmV4dFBvbGljeSAtXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLVxuICAgICAqL1xuICAgIGNyZWF0ZShuZXh0UG9saWN5LCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBuZXcgU3RvcmFnZVJldHJ5UG9saWN5KG5leHRQb2xpY3ksIG9wdGlvbnMsIHRoaXMucmV0cnlPcHRpb25zKTtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBDcmVkZW50aWFsIHBvbGljeSB1c2VkIHRvIHNpZ24gSFRUUChTKSByZXF1ZXN0cyBiZWZvcmUgc2VuZGluZy4gVGhpcyBpcyBhblxuICogYWJzdHJhY3QgY2xhc3MuXG4gKi9cbmNsYXNzIENyZWRlbnRpYWxQb2xpY3kgZXh0ZW5kcyBCYXNlUmVxdWVzdFBvbGljeSB7XG4gICAgLyoqXG4gICAgICogU2VuZHMgb3V0IHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVxdWVzdCAtXG4gICAgICovXG4gICAgc2VuZFJlcXVlc3QocmVxdWVzdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbmV4dFBvbGljeS5zZW5kUmVxdWVzdCh0aGlzLnNpZ25SZXF1ZXN0KHJlcXVlc3QpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2hpbGQgY2xhc3NlcyBtdXN0IGltcGxlbWVudCB0aGlzIG1ldGhvZCB3aXRoIHJlcXVlc3Qgc2lnbmluZy4gVGhpcyBtZXRob2RcbiAgICAgKiB3aWxsIGJlIGV4ZWN1dGVkIGluIHtAbGluayBzZW5kUmVxdWVzdH0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVxdWVzdCAtXG4gICAgICovXG4gICAgc2lnblJlcXVlc3QocmVxdWVzdCkge1xuICAgICAgICAvLyBDaGlsZCBjbGFzc2VzIG11c3Qgb3ZlcnJpZGUgdGhpcyBtZXRob2Qgd2l0aCByZXF1ZXN0IHNpZ25pbmcuIFRoaXMgbWV0aG9kXG4gICAgICAgIC8vIHdpbGwgYmUgZXhlY3V0ZWQgaW4gc2VuZFJlcXVlc3QoKS5cbiAgICAgICAgcmV0dXJuIHJlcXVlc3Q7XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qXG4gKiBXZSBuZWVkIHRvIGltaXRhdGUgLk5ldCBjdWx0dXJlLWF3YXJlIHNvcnRpbmcsIHdoaWNoIGlzIHVzZWQgaW4gc3RvcmFnZSBzZXJ2aWNlLlxuICogQmVsb3cgdGFibGVzIGNvbnRhaW4gc29ydC1rZXlzIGZvciBlbi1VUyBjdWx0dXJlLlxuICovXG5jb25zdCB0YWJsZV9sdjAgPSBuZXcgVWludDMyQXJyYXkoW1xuICAgIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCxcbiAgICAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHg3MWMsIDB4MCwgMHg3MWYsIDB4NzIxLFxuICAgIDB4NzIzLCAweDcyNSwgMHgwLCAweDAsIDB4MCwgMHg3MmQsIDB4ODAzLCAweDAsIDB4MCwgMHg3MzMsIDB4MCwgMHhkMDMsIDB4ZDFhLCAweGQxYywgMHhkMWUsXG4gICAgMHhkMjAsIDB4ZDIyLCAweGQyNCwgMHhkMjYsIDB4ZDI4LCAweGQyYSwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweGUwMiwgMHhlMDksIDB4ZTBhLFxuICAgIDB4ZTFhLCAweGUyMSwgMHhlMjMsIDB4ZTI1LCAweGUyYywgMHhlMzIsIDB4ZTM1LCAweGUzNiwgMHhlNDgsIDB4ZTUxLCAweGU3MCwgMHhlN2MsIDB4ZTdlLCAweGU4OSxcbiAgICAweGU4YSwgMHhlOTEsIDB4ZTk5LCAweGU5ZiwgMHhlYTIsIDB4ZWE0LCAweGVhNiwgMHhlYTcsIDB4ZWE5LCAweDAsIDB4MCwgMHgwLCAweDc0MywgMHg3NDQsIDB4NzQ4LFxuICAgIDB4ZTAyLCAweGUwOSwgMHhlMGEsIDB4ZTFhLCAweGUyMSwgMHhlMjMsIDB4ZTI1LCAweGUyYywgMHhlMzIsIDB4ZTM1LCAweGUzNiwgMHhlNDgsIDB4ZTUxLCAweGU3MCxcbiAgICAweGU3YywgMHhlN2UsIDB4ZTg5LCAweGU4YSwgMHhlOTEsIDB4ZTk5LCAweGU5ZiwgMHhlYTIsIDB4ZWE0LCAweGVhNiwgMHhlYTcsIDB4ZWE5LCAweDAsIDB4NzRjLFxuICAgIDB4MCwgMHg3NTAsIDB4MCxcbl0pO1xuY29uc3QgdGFibGVfbHYyID0gbmV3IFVpbnQzMkFycmF5KFtcbiAgICAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsXG4gICAgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLFxuICAgIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCxcbiAgICAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgxMiwgMHgxMiwgMHgxMiwgMHgxMiwgMHgxMiwgMHgxMiwgMHgxMiwgMHgxMiwgMHgxMixcbiAgICAweDEyLCAweDEyLCAweDEyLCAweDEyLCAweDEyLCAweDEyLCAweDEyLCAweDEyLCAweDEyLCAweDEyLCAweDEyLCAweDEyLCAweDEyLCAweDEyLCAweDEyLCAweDEyLFxuICAgIDB4MTIsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsXG4gICAgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLFxuXSk7XG5jb25zdCB0YWJsZV9sdjQgPSBuZXcgVWludDMyQXJyYXkoW1xuICAgIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCxcbiAgICAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsXG4gICAgMHgwLCAweDgwMTIsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDgyMTIsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCxcbiAgICAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsXG4gICAgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLFxuICAgIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCxcbiAgICAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLFxuXSk7XG5mdW5jdGlvbiBjb21wYXJlSGVhZGVyKGxocywgcmhzKSB7XG4gICAgaWYgKGlzTGVzc1RoYW4obGhzLCByaHMpKVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgcmV0dXJuIDE7XG59XG5mdW5jdGlvbiBpc0xlc3NUaGFuKGxocywgcmhzKSB7XG4gICAgY29uc3QgdGFibGVzID0gW3RhYmxlX2x2MCwgdGFibGVfbHYyLCB0YWJsZV9sdjRdO1xuICAgIGxldCBjdXJyX2xldmVsID0gMDtcbiAgICBsZXQgaSA9IDA7XG4gICAgbGV0IGogPSAwO1xuICAgIHdoaWxlIChjdXJyX2xldmVsIDwgdGFibGVzLmxlbmd0aCkge1xuICAgICAgICBpZiAoY3Vycl9sZXZlbCA9PT0gdGFibGVzLmxlbmd0aCAtIDEgJiYgaSAhPT0gaikge1xuICAgICAgICAgICAgcmV0dXJuIGkgPiBqO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHdlaWdodDEgPSBpIDwgbGhzLmxlbmd0aCA/IHRhYmxlc1tjdXJyX2xldmVsXVtsaHNbaV0uY2hhckNvZGVBdCgwKV0gOiAweDE7XG4gICAgICAgIGNvbnN0IHdlaWdodDIgPSBqIDwgcmhzLmxlbmd0aCA/IHRhYmxlc1tjdXJyX2xldmVsXVtyaHNbal0uY2hhckNvZGVBdCgwKV0gOiAweDE7XG4gICAgICAgIGlmICh3ZWlnaHQxID09PSAweDEgJiYgd2VpZ2h0MiA9PT0gMHgxKSB7XG4gICAgICAgICAgICBpID0gMDtcbiAgICAgICAgICAgIGogPSAwO1xuICAgICAgICAgICAgKytjdXJyX2xldmVsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHdlaWdodDEgPT09IHdlaWdodDIpIHtcbiAgICAgICAgICAgICsraTtcbiAgICAgICAgICAgICsrajtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh3ZWlnaHQxID09PSAwKSB7XG4gICAgICAgICAgICArK2k7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAod2VpZ2h0MiA9PT0gMCkge1xuICAgICAgICAgICAgKytqO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHdlaWdodDEgPCB3ZWlnaHQyO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsUG9saWN5IGlzIGEgcG9saWN5IHVzZWQgdG8gc2lnbiBIVFRQIHJlcXVlc3Qgd2l0aCBhIHNoYXJlZCBrZXkuXG4gKi9cbmNsYXNzIFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsUG9saWN5IGV4dGVuZHMgQ3JlZGVudGlhbFBvbGljeSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbFBvbGljeS5cbiAgICAgKiBAcGFyYW0gbmV4dFBvbGljeSAtXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLVxuICAgICAqIEBwYXJhbSBmYWN0b3J5IC1cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihuZXh0UG9saWN5LCBvcHRpb25zLCBmYWN0b3J5KSB7XG4gICAgICAgIHN1cGVyKG5leHRQb2xpY3ksIG9wdGlvbnMpO1xuICAgICAgICB0aGlzLmZhY3RvcnkgPSBmYWN0b3J5O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTaWducyByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlcXVlc3QgLVxuICAgICAqL1xuICAgIHNpZ25SZXF1ZXN0KHJlcXVlc3QpIHtcbiAgICAgICAgcmVxdWVzdC5oZWFkZXJzLnNldChIZWFkZXJDb25zdGFudHMuWF9NU19EQVRFLCBuZXcgRGF0ZSgpLnRvVVRDU3RyaW5nKCkpO1xuICAgICAgICBpZiAocmVxdWVzdC5ib2R5ICYmXG4gICAgICAgICAgICAodHlwZW9mIHJlcXVlc3QuYm9keSA9PT0gXCJzdHJpbmdcIiB8fCByZXF1ZXN0LmJvZHkgIT09IHVuZGVmaW5lZCkgJiZcbiAgICAgICAgICAgIHJlcXVlc3QuYm9keS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXF1ZXN0LmhlYWRlcnMuc2V0KEhlYWRlckNvbnN0YW50cy5DT05URU5UX0xFTkdUSCwgQnVmZmVyLmJ5dGVMZW5ndGgocmVxdWVzdC5ib2R5KSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RyaW5nVG9TaWduID0gW1xuICAgICAgICAgICAgcmVxdWVzdC5tZXRob2QudG9VcHBlckNhc2UoKSxcbiAgICAgICAgICAgIHRoaXMuZ2V0SGVhZGVyVmFsdWVUb1NpZ24ocmVxdWVzdCwgSGVhZGVyQ29uc3RhbnRzLkNPTlRFTlRfTEFOR1VBR0UpLFxuICAgICAgICAgICAgdGhpcy5nZXRIZWFkZXJWYWx1ZVRvU2lnbihyZXF1ZXN0LCBIZWFkZXJDb25zdGFudHMuQ09OVEVOVF9FTkNPRElORyksXG4gICAgICAgICAgICB0aGlzLmdldEhlYWRlclZhbHVlVG9TaWduKHJlcXVlc3QsIEhlYWRlckNvbnN0YW50cy5DT05URU5UX0xFTkdUSCksXG4gICAgICAgICAgICB0aGlzLmdldEhlYWRlclZhbHVlVG9TaWduKHJlcXVlc3QsIEhlYWRlckNvbnN0YW50cy5DT05URU5UX01ENSksXG4gICAgICAgICAgICB0aGlzLmdldEhlYWRlclZhbHVlVG9TaWduKHJlcXVlc3QsIEhlYWRlckNvbnN0YW50cy5DT05URU5UX1RZUEUpLFxuICAgICAgICAgICAgdGhpcy5nZXRIZWFkZXJWYWx1ZVRvU2lnbihyZXF1ZXN0LCBIZWFkZXJDb25zdGFudHMuREFURSksXG4gICAgICAgICAgICB0aGlzLmdldEhlYWRlclZhbHVlVG9TaWduKHJlcXVlc3QsIEhlYWRlckNvbnN0YW50cy5JRl9NT0RJRklFRF9TSU5DRSksXG4gICAgICAgICAgICB0aGlzLmdldEhlYWRlclZhbHVlVG9TaWduKHJlcXVlc3QsIEhlYWRlckNvbnN0YW50cy5JRl9NQVRDSCksXG4gICAgICAgICAgICB0aGlzLmdldEhlYWRlclZhbHVlVG9TaWduKHJlcXVlc3QsIEhlYWRlckNvbnN0YW50cy5JRl9OT05FX01BVENIKSxcbiAgICAgICAgICAgIHRoaXMuZ2V0SGVhZGVyVmFsdWVUb1NpZ24ocmVxdWVzdCwgSGVhZGVyQ29uc3RhbnRzLklGX1VOTU9ESUZJRURfU0lOQ0UpLFxuICAgICAgICAgICAgdGhpcy5nZXRIZWFkZXJWYWx1ZVRvU2lnbihyZXF1ZXN0LCBIZWFkZXJDb25zdGFudHMuUkFOR0UpLFxuICAgICAgICBdLmpvaW4oXCJcXG5cIikgK1xuICAgICAgICAgICAgXCJcXG5cIiArXG4gICAgICAgICAgICB0aGlzLmdldENhbm9uaWNhbGl6ZWRIZWFkZXJzU3RyaW5nKHJlcXVlc3QpICtcbiAgICAgICAgICAgIHRoaXMuZ2V0Q2Fub25pY2FsaXplZFJlc291cmNlU3RyaW5nKHJlcXVlc3QpO1xuICAgICAgICBjb25zdCBzaWduYXR1cmUgPSB0aGlzLmZhY3RvcnkuY29tcHV0ZUhNQUNTSEEyNTYoc3RyaW5nVG9TaWduKTtcbiAgICAgICAgcmVxdWVzdC5oZWFkZXJzLnNldChIZWFkZXJDb25zdGFudHMuQVVUSE9SSVpBVElPTiwgYFNoYXJlZEtleSAke3RoaXMuZmFjdG9yeS5hY2NvdW50TmFtZX06JHtzaWduYXR1cmV9YCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGBbVVJMXToke3JlcXVlc3QudXJsfWApO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhgW0hFQURFUlNdOiR7cmVxdWVzdC5oZWFkZXJzLnRvU3RyaW5nKCl9YCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGBbU1RSSU5HIFRPIFNJR05dOiR7SlNPTi5zdHJpbmdpZnkoc3RyaW5nVG9TaWduKX1gKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYFtLRVldOiAke3JlcXVlc3QuaGVhZGVycy5nZXQoSGVhZGVyQ29uc3RhbnRzLkFVVEhPUklaQVRJT04pfWApO1xuICAgICAgICByZXR1cm4gcmVxdWVzdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0cmlldmUgaGVhZGVyIHZhbHVlIGFjY29yZGluZyB0byBzaGFyZWQga2V5IHNpZ24gcnVsZXMuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvYXV0aGVudGljYXRlLXdpdGgtc2hhcmVkLWtleVxuICAgICAqXG4gICAgICogQHBhcmFtIHJlcXVlc3QgLVxuICAgICAqIEBwYXJhbSBoZWFkZXJOYW1lIC1cbiAgICAgKi9cbiAgICBnZXRIZWFkZXJWYWx1ZVRvU2lnbihyZXF1ZXN0LCBoZWFkZXJOYW1lKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gcmVxdWVzdC5oZWFkZXJzLmdldChoZWFkZXJOYW1lKTtcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgLy8gV2hlbiB1c2luZyB2ZXJzaW9uIDIwMTUtMDItMjEgb3IgbGF0ZXIsIGlmIENvbnRlbnQtTGVuZ3RoIGlzIHplcm8sIHRoZW5cbiAgICAgICAgLy8gc2V0IHRoZSBDb250ZW50LUxlbmd0aCBwYXJ0IG9mIHRoZSBTdHJpbmdUb1NpZ24gdG8gYW4gZW1wdHkgc3RyaW5nLlxuICAgICAgICAvLyBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvYXV0aGVudGljYXRlLXdpdGgtc2hhcmVkLWtleVxuICAgICAgICBpZiAoaGVhZGVyTmFtZSA9PT0gSGVhZGVyQ29uc3RhbnRzLkNPTlRFTlRfTEVOR1RIICYmIHZhbHVlID09PSBcIjBcIikge1xuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUbyBjb25zdHJ1Y3QgdGhlIENhbm9uaWNhbGl6ZWRIZWFkZXJzIHBvcnRpb24gb2YgdGhlIHNpZ25hdHVyZSBzdHJpbmcsIGZvbGxvdyB0aGVzZSBzdGVwczpcbiAgICAgKiAxLiBSZXRyaWV2ZSBhbGwgaGVhZGVycyBmb3IgdGhlIHJlc291cmNlIHRoYXQgYmVnaW4gd2l0aCB4LW1zLSwgaW5jbHVkaW5nIHRoZSB4LW1zLWRhdGUgaGVhZGVyLlxuICAgICAqIDIuIENvbnZlcnQgZWFjaCBIVFRQIGhlYWRlciBuYW1lIHRvIGxvd2VyY2FzZS5cbiAgICAgKiAzLiBTb3J0IHRoZSBoZWFkZXJzIGxleGljb2dyYXBoaWNhbGx5IGJ5IGhlYWRlciBuYW1lLCBpbiBhc2NlbmRpbmcgb3JkZXIuXG4gICAgICogICAgRWFjaCBoZWFkZXIgbWF5IGFwcGVhciBvbmx5IG9uY2UgaW4gdGhlIHN0cmluZy5cbiAgICAgKiA0LiBSZXBsYWNlIGFueSBsaW5lYXIgd2hpdGVzcGFjZSBpbiB0aGUgaGVhZGVyIHZhbHVlIHdpdGggYSBzaW5nbGUgc3BhY2UuXG4gICAgICogNS4gVHJpbSBhbnkgd2hpdGVzcGFjZSBhcm91bmQgdGhlIGNvbG9uIGluIHRoZSBoZWFkZXIuXG4gICAgICogNi4gRmluYWxseSwgYXBwZW5kIGEgbmV3LWxpbmUgY2hhcmFjdGVyIHRvIGVhY2ggY2Fub25pY2FsaXplZCBoZWFkZXIgaW4gdGhlIHJlc3VsdGluZyBsaXN0LlxuICAgICAqICAgIENvbnN0cnVjdCB0aGUgQ2Fub25pY2FsaXplZEhlYWRlcnMgc3RyaW5nIGJ5IGNvbmNhdGVuYXRpbmcgYWxsIGhlYWRlcnMgaW4gdGhpcyBsaXN0IGludG8gYSBzaW5nbGUgc3RyaW5nLlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlcXVlc3QgLVxuICAgICAqL1xuICAgIGdldENhbm9uaWNhbGl6ZWRIZWFkZXJzU3RyaW5nKHJlcXVlc3QpIHtcbiAgICAgICAgbGV0IGhlYWRlcnNBcnJheSA9IHJlcXVlc3QuaGVhZGVycy5oZWFkZXJzQXJyYXkoKS5maWx0ZXIoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUubmFtZS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoSGVhZGVyQ29uc3RhbnRzLlBSRUZJWF9GT1JfU1RPUkFHRSk7XG4gICAgICAgIH0pO1xuICAgICAgICBoZWFkZXJzQXJyYXkuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmVIZWFkZXIoYS5uYW1lLnRvTG93ZXJDYXNlKCksIGIubmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIFJlbW92ZSBkdXBsaWNhdGUgaGVhZGVyc1xuICAgICAgICBoZWFkZXJzQXJyYXkgPSBoZWFkZXJzQXJyYXkuZmlsdGVyKCh2YWx1ZSwgaW5kZXgsIGFycmF5KSA9PiB7XG4gICAgICAgICAgICBpZiAoaW5kZXggPiAwICYmIHZhbHVlLm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gYXJyYXlbaW5kZXggLSAxXS5uYW1lLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCBjYW5vbmljYWxpemVkSGVhZGVyc1N0cmluZ1RvU2lnbiA9IFwiXCI7XG4gICAgICAgIGhlYWRlcnNBcnJheS5mb3JFYWNoKChoZWFkZXIpID0+IHtcbiAgICAgICAgICAgIGNhbm9uaWNhbGl6ZWRIZWFkZXJzU3RyaW5nVG9TaWduICs9IGAke2hlYWRlci5uYW1lXG4gICAgICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgICAudHJpbVJpZ2h0KCl9OiR7aGVhZGVyLnZhbHVlLnRyaW1MZWZ0KCl9XFxuYDtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBjYW5vbmljYWxpemVkSGVhZGVyc1N0cmluZ1RvU2lnbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHRoZSB3ZWJSZXNvdXJjZSBjYW5vbmljYWxpemVkIHJlc291cmNlIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByZXF1ZXN0IC1cbiAgICAgKi9cbiAgICBnZXRDYW5vbmljYWxpemVkUmVzb3VyY2VTdHJpbmcocmVxdWVzdCkge1xuICAgICAgICBjb25zdCBwYXRoID0gZ2V0VVJMUGF0aChyZXF1ZXN0LnVybCkgfHwgXCIvXCI7XG4gICAgICAgIGxldCBjYW5vbmljYWxpemVkUmVzb3VyY2VTdHJpbmcgPSBcIlwiO1xuICAgICAgICBjYW5vbmljYWxpemVkUmVzb3VyY2VTdHJpbmcgKz0gYC8ke3RoaXMuZmFjdG9yeS5hY2NvdW50TmFtZX0ke3BhdGh9YDtcbiAgICAgICAgY29uc3QgcXVlcmllcyA9IGdldFVSTFF1ZXJpZXMocmVxdWVzdC51cmwpO1xuICAgICAgICBjb25zdCBsb3dlcmNhc2VRdWVyaWVzID0ge307XG4gICAgICAgIGlmIChxdWVyaWVzKSB7XG4gICAgICAgICAgICBjb25zdCBxdWVyeUtleXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHF1ZXJpZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHF1ZXJpZXMsIGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbG93ZXJjYXNlS2V5ID0ga2V5LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgICAgIGxvd2VyY2FzZVF1ZXJpZXNbbG93ZXJjYXNlS2V5XSA9IHF1ZXJpZXNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgcXVlcnlLZXlzLnB1c2gobG93ZXJjYXNlS2V5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxdWVyeUtleXMuc29ydCgpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgcXVlcnlLZXlzKSB7XG4gICAgICAgICAgICAgICAgY2Fub25pY2FsaXplZFJlc291cmNlU3RyaW5nICs9IGBcXG4ke2tleX06JHtkZWNvZGVVUklDb21wb25lbnQobG93ZXJjYXNlUXVlcmllc1trZXldKX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYW5vbmljYWxpemVkUmVzb3VyY2VTdHJpbmc7XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogQ3JlZGVudGlhbCBpcyBhbiBhYnN0cmFjdCBjbGFzcyBmb3IgQXp1cmUgU3RvcmFnZSBIVFRQIHJlcXVlc3RzIHNpZ25pbmcuIFRoaXNcbiAqIGNsYXNzIHdpbGwgaG9zdCBhbiBjcmVkZW50aWFsUG9saWN5Q3JlYXRvciBmYWN0b3J5IHdoaWNoIGdlbmVyYXRlcyBDcmVkZW50aWFsUG9saWN5LlxuICovXG5jbGFzcyBDcmVkZW50aWFsIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgUmVxdWVzdFBvbGljeSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gX25leHRQb2xpY3kgLVxuICAgICAqIEBwYXJhbSBfb3B0aW9ucyAtXG4gICAgICovXG4gICAgY3JlYXRlKF9uZXh0UG9saWN5LCBfb3B0aW9ucykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgc2hvdWxkIGJlIGltcGxlbWVudGVkIGluIGNoaWxkcmVuIGNsYXNzZXMuXCIpO1xuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIE9OTFkgQVZBSUxBQkxFIElOIE5PREUuSlMgUlVOVElNRS5cbiAqXG4gKiBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbCBmb3IgYWNjb3VudCBrZXkgYXV0aG9yaXphdGlvbiBvZiBBenVyZSBTdG9yYWdlIHNlcnZpY2UuXG4gKi9cbmNsYXNzIFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsIGV4dGVuZHMgQ3JlZGVudGlhbCB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbC5cbiAgICAgKiBAcGFyYW0gYWNjb3VudE5hbWUgLVxuICAgICAqIEBwYXJhbSBhY2NvdW50S2V5IC1cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihhY2NvdW50TmFtZSwgYWNjb3VudEtleSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmFjY291bnROYW1lID0gYWNjb3VudE5hbWU7XG4gICAgICAgIHRoaXMuYWNjb3VudEtleSA9IEJ1ZmZlci5mcm9tKGFjY291bnRLZXksIFwiYmFzZTY0XCIpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWxQb2xpY3kgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIG5leHRQb2xpY3kgLVxuICAgICAqIEBwYXJhbSBvcHRpb25zIC1cbiAgICAgKi9cbiAgICBjcmVhdGUobmV4dFBvbGljeSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gbmV3IFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsUG9saWN5KG5leHRQb2xpY3ksIG9wdGlvbnMsIHRoaXMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZW5lcmF0ZXMgYSBoYXNoIHNpZ25hdHVyZSBmb3IgYW4gSFRUUCByZXF1ZXN0IG9yIGZvciBhIFNBUy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzdHJpbmdUb1NpZ24gLVxuICAgICAqL1xuICAgIGNvbXB1dGVITUFDU0hBMjU2KHN0cmluZ1RvU2lnbikge1xuICAgICAgICByZXR1cm4gY3J5cHRvLmNyZWF0ZUhtYWMoXCJzaGEyNTZcIiwgdGhpcy5hY2NvdW50S2V5KS51cGRhdGUoc3RyaW5nVG9TaWduLCBcInV0ZjhcIikuZGlnZXN0KFwiYmFzZTY0XCIpO1xuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIEFub255bW91c0NyZWRlbnRpYWxQb2xpY3kgaXMgdXNlZCB3aXRoIEhUVFAoUykgcmVxdWVzdHMgdGhhdCByZWFkIHB1YmxpYyByZXNvdXJjZXNcbiAqIG9yIGZvciB1c2Ugd2l0aCBTaGFyZWQgQWNjZXNzIFNpZ25hdHVyZXMgKFNBUykuXG4gKi9cbmNsYXNzIEFub255bW91c0NyZWRlbnRpYWxQb2xpY3kgZXh0ZW5kcyBDcmVkZW50aWFsUG9saWN5IHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIEFub255bW91c0NyZWRlbnRpYWxQb2xpY3kuXG4gICAgICogQHBhcmFtIG5leHRQb2xpY3kgLVxuICAgICAqIEBwYXJhbSBvcHRpb25zIC1cbiAgICAgKi9cbiAgICAvLyBUaGUgYmFzZSBjbGFzcyBoYXMgYSBwcm90ZWN0ZWQgY29uc3RydWN0b3IuIEFkZGluZyBhIHB1YmxpYyBvbmUgdG8gZW5hYmxlIGNvbnN0cnVjdGluZyBvZiB0aGlzIGNsYXNzLlxuICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlbGVzcy1jb25zdHJ1Y3RvciovXG4gICAgY29uc3RydWN0b3IobmV4dFBvbGljeSwgb3B0aW9ucykge1xuICAgICAgICBzdXBlcihuZXh0UG9saWN5LCBvcHRpb25zKTtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBBbm9ueW1vdXNDcmVkZW50aWFsIHByb3ZpZGVzIGEgY3JlZGVudGlhbFBvbGljeUNyZWF0b3IgbWVtYmVyIHVzZWQgdG8gY3JlYXRlXG4gKiBBbm9ueW1vdXNDcmVkZW50aWFsUG9saWN5IG9iamVjdHMuIEFub255bW91c0NyZWRlbnRpYWxQb2xpY3kgaXMgdXNlZCB3aXRoXG4gKiBIVFRQKFMpIHJlcXVlc3RzIHRoYXQgcmVhZCBwdWJsaWMgcmVzb3VyY2VzIG9yIGZvciB1c2Ugd2l0aCBTaGFyZWQgQWNjZXNzXG4gKiBTaWduYXR1cmVzIChTQVMpLlxuICovXG5jbGFzcyBBbm9ueW1vdXNDcmVkZW50aWFsIGV4dGVuZHMgQ3JlZGVudGlhbCB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiB7QGxpbmsgQW5vbnltb3VzQ3JlZGVudGlhbFBvbGljeX0gb2JqZWN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIG5leHRQb2xpY3kgLVxuICAgICAqIEBwYXJhbSBvcHRpb25zIC1cbiAgICAgKi9cbiAgICBjcmVhdGUobmV4dFBvbGljeSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gbmV3IEFub255bW91c0NyZWRlbnRpYWxQb2xpY3kobmV4dFBvbGljeSwgb3B0aW9ucyk7XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbmxldCBfZGVmYXVsdEh0dHBDbGllbnQ7XG5mdW5jdGlvbiBnZXRDYWNoZWREZWZhdWx0SHR0cENsaWVudCgpIHtcbiAgICBpZiAoIV9kZWZhdWx0SHR0cENsaWVudCkge1xuICAgICAgICBfZGVmYXVsdEh0dHBDbGllbnQgPSBjb3JlUmVzdFBpcGVsaW5lLmNyZWF0ZURlZmF1bHRIdHRwQ2xpZW50KCk7XG4gICAgfVxuICAgIHJldHVybiBfZGVmYXVsdEh0dHBDbGllbnQ7XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBUaGUgcHJvZ3JhbW1hdGljIGlkZW50aWZpZXIgb2YgdGhlIFN0b3JhZ2VCcm93c2VyUG9saWN5LlxuICovXG5jb25zdCBzdG9yYWdlQnJvd3NlclBvbGljeU5hbWUgPSBcInN0b3JhZ2VCcm93c2VyUG9saWN5XCI7XG4vKipcbiAqIHN0b3JhZ2VCcm93c2VyUG9saWN5IGlzIGEgcG9saWN5IHVzZWQgdG8gcHJldmVudCBicm93c2VycyBmcm9tIGNhY2hpbmcgcmVxdWVzdHNcbiAqIGFuZCB0byByZW1vdmUgY29va2llcyBhbmQgZXhwbGljaXQgY29udGVudC1sZW5ndGggaGVhZGVycy5cbiAqL1xuZnVuY3Rpb24gc3RvcmFnZUJyb3dzZXJQb2xpY3koKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogc3RvcmFnZUJyb3dzZXJQb2xpY3lOYW1lLFxuICAgICAgICBhc3luYyBzZW5kUmVxdWVzdChyZXF1ZXN0LCBuZXh0KSB7XG4gICAgICAgICAgICBpZiAoY29yZVV0aWwuaXNOb2RlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5leHQocmVxdWVzdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVxdWVzdC5tZXRob2QgPT09IFwiR0VUXCIgfHwgcmVxdWVzdC5tZXRob2QgPT09IFwiSEVBRFwiKSB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdC51cmwgPSBzZXRVUkxQYXJhbWV0ZXIocmVxdWVzdC51cmwsIFVSTENvbnN0YW50cy5QYXJhbWV0ZXJzLkZPUkNFX0JST1dTRVJfTk9fQ0FDSEUsIG5ldyBEYXRlKCkuZ2V0VGltZSgpLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVxdWVzdC5oZWFkZXJzLmRlbGV0ZShIZWFkZXJDb25zdGFudHMuQ09PS0lFKTtcbiAgICAgICAgICAgIC8vIEFjY29yZGluZyB0byBYSFIgc3RhbmRhcmRzLCBjb250ZW50LWxlbmd0aCBzaG91bGQgYmUgZnVsbHkgY29udHJvbGxlZCBieSBicm93c2Vyc1xuICAgICAgICAgICAgcmVxdWVzdC5oZWFkZXJzLmRlbGV0ZShIZWFkZXJDb25zdGFudHMuQ09OVEVOVF9MRU5HVEgpO1xuICAgICAgICAgICAgcmV0dXJuIG5leHQocmVxdWVzdCk7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIE5hbWUgb2YgdGhlIHtAbGluayBzdG9yYWdlUmV0cnlQb2xpY3l9XG4gKi9cbmNvbnN0IHN0b3JhZ2VSZXRyeVBvbGljeU5hbWUgPSBcInN0b3JhZ2VSZXRyeVBvbGljeVwiO1xuLyoqXG4gKiBSZXRyeVBvbGljeSB0eXBlcy5cbiAqL1xudmFyIFN0b3JhZ2VSZXRyeVBvbGljeVR5cGU7XG4oZnVuY3Rpb24gKFN0b3JhZ2VSZXRyeVBvbGljeVR5cGUpIHtcbiAgICAvKipcbiAgICAgKiBFeHBvbmVudGlhbCByZXRyeS4gUmV0cnkgdGltZSBkZWxheSBncm93cyBleHBvbmVudGlhbGx5LlxuICAgICAqL1xuICAgIFN0b3JhZ2VSZXRyeVBvbGljeVR5cGVbU3RvcmFnZVJldHJ5UG9saWN5VHlwZVtcIkVYUE9ORU5USUFMXCJdID0gMF0gPSBcIkVYUE9ORU5USUFMXCI7XG4gICAgLyoqXG4gICAgICogTGluZWFyIHJldHJ5LiBSZXRyeSB0aW1lIGRlbGF5IGdyb3dzIGxpbmVhcmx5LlxuICAgICAqL1xuICAgIFN0b3JhZ2VSZXRyeVBvbGljeVR5cGVbU3RvcmFnZVJldHJ5UG9saWN5VHlwZVtcIkZJWEVEXCJdID0gMV0gPSBcIkZJWEVEXCI7XG59KShTdG9yYWdlUmV0cnlQb2xpY3lUeXBlIHx8IChTdG9yYWdlUmV0cnlQb2xpY3lUeXBlID0ge30pKTtcbi8vIERlZmF1bHQgdmFsdWVzIG9mIFN0b3JhZ2VSZXRyeU9wdGlvbnNcbmNvbnN0IERFRkFVTFRfUkVUUllfT1BUSU9OUyA9IHtcbiAgICBtYXhSZXRyeURlbGF5SW5NczogMTIwICogMTAwMCxcbiAgICBtYXhUcmllczogNCxcbiAgICByZXRyeURlbGF5SW5NczogNCAqIDEwMDAsXG4gICAgcmV0cnlQb2xpY3lUeXBlOiBTdG9yYWdlUmV0cnlQb2xpY3lUeXBlLkVYUE9ORU5USUFMLFxuICAgIHNlY29uZGFyeUhvc3Q6IFwiXCIsXG4gICAgdHJ5VGltZW91dEluTXM6IHVuZGVmaW5lZCwgLy8gVXNlIHNlcnZlciBzaWRlIGRlZmF1bHQgdGltZW91dCBzdHJhdGVneVxufTtcbmNvbnN0IHJldHJpYWJsZUVycm9ycyA9IFtcbiAgICBcIkVUSU1FRE9VVFwiLFxuICAgIFwiRVNPQ0tFVFRJTUVET1VUXCIsXG4gICAgXCJFQ09OTlJFRlVTRURcIixcbiAgICBcIkVDT05OUkVTRVRcIixcbiAgICBcIkVOT0VOVFwiLFxuICAgIFwiRU5PVEZPVU5EXCIsXG4gICAgXCJUSU1FT1VUXCIsXG4gICAgXCJFUElQRVwiLFxuICAgIFwiUkVRVUVTVF9TRU5EX0VSUk9SXCIsXG5dO1xuY29uc3QgUkVUUllfQUJPUlRfRVJST1IgPSBuZXcgYWJvcnRDb250cm9sbGVyLkFib3J0RXJyb3IoXCJUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLlwiKTtcbi8qKlxuICogUmV0cnkgcG9saWN5IHdpdGggZXhwb25lbnRpYWwgcmV0cnkgYW5kIGxpbmVhciByZXRyeSBpbXBsZW1lbnRlZC5cbiAqL1xuZnVuY3Rpb24gc3RvcmFnZVJldHJ5UG9saWN5KG9wdGlvbnMgPSB7fSkge1xuICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2UsIF9mO1xuICAgIGNvbnN0IHJldHJ5UG9saWN5VHlwZSA9IChfYSA9IG9wdGlvbnMucmV0cnlQb2xpY3lUeXBlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBERUZBVUxUX1JFVFJZX09QVElPTlMucmV0cnlQb2xpY3lUeXBlO1xuICAgIGNvbnN0IG1heFRyaWVzID0gKF9iID0gb3B0aW9ucy5tYXhUcmllcykgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogREVGQVVMVF9SRVRSWV9PUFRJT05TLm1heFRyaWVzO1xuICAgIGNvbnN0IHJldHJ5RGVsYXlJbk1zID0gKF9jID0gb3B0aW9ucy5yZXRyeURlbGF5SW5NcykgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogREVGQVVMVF9SRVRSWV9PUFRJT05TLnJldHJ5RGVsYXlJbk1zO1xuICAgIGNvbnN0IG1heFJldHJ5RGVsYXlJbk1zID0gKF9kID0gb3B0aW9ucy5tYXhSZXRyeURlbGF5SW5NcykgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDogREVGQVVMVF9SRVRSWV9PUFRJT05TLm1heFJldHJ5RGVsYXlJbk1zO1xuICAgIGNvbnN0IHNlY29uZGFyeUhvc3QgPSAoX2UgPSBvcHRpb25zLnNlY29uZGFyeUhvc3QpICE9PSBudWxsICYmIF9lICE9PSB2b2lkIDAgPyBfZSA6IERFRkFVTFRfUkVUUllfT1BUSU9OUy5zZWNvbmRhcnlIb3N0O1xuICAgIGNvbnN0IHRyeVRpbWVvdXRJbk1zID0gKF9mID0gb3B0aW9ucy50cnlUaW1lb3V0SW5NcykgIT09IG51bGwgJiYgX2YgIT09IHZvaWQgMCA/IF9mIDogREVGQVVMVF9SRVRSWV9PUFRJT05TLnRyeVRpbWVvdXRJbk1zO1xuICAgIGZ1bmN0aW9uIHNob3VsZFJldHJ5KHsgaXNQcmltYXJ5UmV0cnksIGF0dGVtcHQsIHJlc3BvbnNlLCBlcnJvciwgfSkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBpZiAoYXR0ZW1wdCA+PSBtYXhUcmllcykge1xuICAgICAgICAgICAgbG9nZ2VyLmluZm8oYFJldHJ5UG9saWN5OiBBdHRlbXB0KHMpICR7YXR0ZW1wdH0gPj0gbWF4VHJpZXMgJHttYXhUcmllc30sIG5vIGZ1cnRoZXIgdHJ5LmApO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgZm9yIChjb25zdCByZXRyaWFibGVFcnJvciBvZiByZXRyaWFibGVFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IubmFtZS50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKHJldHJpYWJsZUVycm9yKSB8fFxuICAgICAgICAgICAgICAgICAgICBlcnJvci5tZXNzYWdlLnRvVXBwZXJDYXNlKCkuaW5jbHVkZXMocmV0cmlhYmxlRXJyb3IpIHx8XG4gICAgICAgICAgICAgICAgICAgIChlcnJvci5jb2RlICYmIGVycm9yLmNvZGUudG9TdHJpbmcoKS50b1VwcGVyQ2FzZSgpID09PSByZXRyaWFibGVFcnJvcikpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYFJldHJ5UG9saWN5OiBOZXR3b3JrIGVycm9yICR7cmV0cmlhYmxlRXJyb3J9IGZvdW5kLCB3aWxsIHJldHJ5LmApO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoKGVycm9yID09PSBudWxsIHx8IGVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlcnJvci5jb2RlKSA9PT0gXCJQQVJTRV9FUlJPUlwiICYmXG4gICAgICAgICAgICAgICAgKGVycm9yID09PSBudWxsIHx8IGVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlcnJvci5tZXNzYWdlLnN0YXJ0c1dpdGgoYEVycm9yIFwiRXJyb3I6IFVuY2xvc2VkIHJvb3QgdGFnYCkpKSB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oXCJSZXRyeVBvbGljeTogSW5jb21wbGV0ZSBYTUwgcmVzcG9uc2UgbGlrZWx5IGR1ZSB0byBzZXJ2aWNlIHRpbWVvdXQsIHdpbGwgcmV0cnkuXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIElmIGF0dGVtcHQgd2FzIGFnYWluc3QgdGhlIHNlY29uZGFyeSAmIGl0IHJldHVybmVkIGEgU3RhdHVzTm90Rm91bmQgKDQwNCksIHRoZW5cbiAgICAgICAgLy8gdGhlIHJlc291cmNlIHdhcyBub3QgZm91bmQuIFRoaXMgbWF5IGJlIGR1ZSB0byByZXBsaWNhdGlvbiBkZWxheS4gU28sIGluIHRoaXNcbiAgICAgICAgLy8gY2FzZSwgd2UnbGwgbmV2ZXIgdHJ5IHRoZSBzZWNvbmRhcnkgYWdhaW4gZm9yIHRoaXMgb3BlcmF0aW9uLlxuICAgICAgICBpZiAocmVzcG9uc2UgfHwgZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXR1c0NvZGUgPSAoX2IgPSAoX2EgPSByZXNwb25zZSA9PT0gbnVsbCB8fCByZXNwb25zZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogcmVzcG9uc2Uuc3RhdHVzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBlcnJvciA9PT0gbnVsbCB8fCBlcnJvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogZXJyb3Iuc3RhdHVzQ29kZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogMDtcbiAgICAgICAgICAgIGlmICghaXNQcmltYXJ5UmV0cnkgJiYgc3RhdHVzQ29kZSA9PT0gNDA0KSB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYFJldHJ5UG9saWN5OiBTZWNvbmRhcnkgYWNjZXNzIHdpdGggNDA0LCB3aWxsIHJldHJ5LmApO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU2VydmVyIGludGVybmFsIGVycm9yIG9yIHNlcnZlciB0aW1lb3V0XG4gICAgICAgICAgICBpZiAoc3RhdHVzQ29kZSA9PT0gNTAzIHx8IHN0YXR1c0NvZGUgPT09IDUwMCkge1xuICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBSZXRyeVBvbGljeTogV2lsbCByZXRyeSBmb3Igc3RhdHVzIGNvZGUgJHtzdGF0dXNDb2RlfS5gKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBbQ29weSBzb3VyY2UgZXJyb3IgY29kZV0gRmVhdHVyZSBpcyBwZW5kaW5nIG9uIHNlcnZpY2Ugc2lkZSwgc2tpcCByZXRyeSBvbiBjb3B5IHNvdXJjZSBlcnJvciBmb3Igbm93LlxuICAgICAgICAvLyBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgLy8gICAvLyBSZXRyeSBzZWxlY3QgQ29weSBTb3VyY2UgRXJyb3IgQ29kZXMuXG4gICAgICAgIC8vICAgaWYgKHJlc3BvbnNlPy5zdGF0dXMgPj0gNDAwKSB7XG4gICAgICAgIC8vICAgICBjb25zdCBjb3B5U291cmNlRXJyb3IgPSByZXNwb25zZS5oZWFkZXJzLmdldChIZWFkZXJDb25zdGFudHMuWF9NU19Db3B5U291cmNlRXJyb3JDb2RlKTtcbiAgICAgICAgLy8gICAgIGlmIChjb3B5U291cmNlRXJyb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyAgICAgICBzd2l0Y2ggKGNvcHlTb3VyY2VFcnJvcikge1xuICAgICAgICAvLyAgICAgICAgIGNhc2UgXCJJbnRlcm5hbEVycm9yXCI6XG4gICAgICAgIC8vICAgICAgICAgY2FzZSBcIk9wZXJhdGlvblRpbWVkT3V0XCI6XG4gICAgICAgIC8vICAgICAgICAgY2FzZSBcIlNlcnZlckJ1c3lcIjpcbiAgICAgICAgLy8gICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAvLyAgICAgICB9XG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vICAgfVxuICAgICAgICAvLyB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2FsY3VsYXRlRGVsYXkoaXNQcmltYXJ5UmV0cnksIGF0dGVtcHQpIHtcbiAgICAgICAgbGV0IGRlbGF5VGltZUluTXMgPSAwO1xuICAgICAgICBpZiAoaXNQcmltYXJ5UmV0cnkpIHtcbiAgICAgICAgICAgIHN3aXRjaCAocmV0cnlQb2xpY3lUeXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBTdG9yYWdlUmV0cnlQb2xpY3lUeXBlLkVYUE9ORU5USUFMOlxuICAgICAgICAgICAgICAgICAgICBkZWxheVRpbWVJbk1zID0gTWF0aC5taW4oKE1hdGgucG93KDIsIGF0dGVtcHQgLSAxKSAtIDEpICogcmV0cnlEZWxheUluTXMsIG1heFJldHJ5RGVsYXlJbk1zKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBTdG9yYWdlUmV0cnlQb2xpY3lUeXBlLkZJWEVEOlxuICAgICAgICAgICAgICAgICAgICBkZWxheVRpbWVJbk1zID0gcmV0cnlEZWxheUluTXM7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZGVsYXlUaW1lSW5NcyA9IE1hdGgucmFuZG9tKCkgKiAxMDAwO1xuICAgICAgICB9XG4gICAgICAgIGxvZ2dlci5pbmZvKGBSZXRyeVBvbGljeTogRGVsYXkgZm9yICR7ZGVsYXlUaW1lSW5Nc31tc2ApO1xuICAgICAgICByZXR1cm4gZGVsYXlUaW1lSW5NcztcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogc3RvcmFnZVJldHJ5UG9saWN5TmFtZSxcbiAgICAgICAgYXN5bmMgc2VuZFJlcXVlc3QocmVxdWVzdCwgbmV4dCkge1xuICAgICAgICAgICAgLy8gU2V0IHRoZSBzZXJ2ZXItc2lkZSB0aW1lb3V0IHF1ZXJ5IHBhcmFtZXRlciBcInRpbWVvdXQ9W3NlY29uZHNdXCJcbiAgICAgICAgICAgIGlmICh0cnlUaW1lb3V0SW5Ncykge1xuICAgICAgICAgICAgICAgIHJlcXVlc3QudXJsID0gc2V0VVJMUGFyYW1ldGVyKHJlcXVlc3QudXJsLCBVUkxDb25zdGFudHMuUGFyYW1ldGVycy5USU1FT1VULCBTdHJpbmcoTWF0aC5mbG9vcih0cnlUaW1lb3V0SW5NcyAvIDEwMDApKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwcmltYXJ5VXJsID0gcmVxdWVzdC51cmw7XG4gICAgICAgICAgICBjb25zdCBzZWNvbmRhcnlVcmwgPSBzZWNvbmRhcnlIb3N0ID8gc2V0VVJMSG9zdChyZXF1ZXN0LnVybCwgc2Vjb25kYXJ5SG9zdCkgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBsZXQgc2Vjb25kYXJ5SGFzNDA0ID0gZmFsc2U7XG4gICAgICAgICAgICBsZXQgYXR0ZW1wdCA9IDE7XG4gICAgICAgICAgICBsZXQgcmV0cnlBZ2FpbiA9IHRydWU7XG4gICAgICAgICAgICBsZXQgcmVzcG9uc2U7XG4gICAgICAgICAgICBsZXQgZXJyb3I7XG4gICAgICAgICAgICB3aGlsZSAocmV0cnlBZ2Fpbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzUHJpbWFyeVJldHJ5ID0gc2Vjb25kYXJ5SGFzNDA0IHx8XG4gICAgICAgICAgICAgICAgICAgICFzZWNvbmRhcnlVcmwgfHxcbiAgICAgICAgICAgICAgICAgICAgIVtcIkdFVFwiLCBcIkhFQURcIiwgXCJPUFRJT05TXCJdLmluY2x1ZGVzKHJlcXVlc3QubWV0aG9kKSB8fFxuICAgICAgICAgICAgICAgICAgICBhdHRlbXB0ICUgMiA9PT0gMTtcbiAgICAgICAgICAgICAgICByZXF1ZXN0LnVybCA9IGlzUHJpbWFyeVJldHJ5ID8gcHJpbWFyeVVybCA6IHNlY29uZGFyeVVybDtcbiAgICAgICAgICAgICAgICByZXNwb25zZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBlcnJvciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhgUmV0cnlQb2xpY3k6ID09PT09PiBUcnk9JHthdHRlbXB0fSAke2lzUHJpbWFyeVJldHJ5ID8gXCJQcmltYXJ5XCIgOiBcIlNlY29uZGFyeVwifWApO1xuICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IGF3YWl0IG5leHQocmVxdWVzdCk7XG4gICAgICAgICAgICAgICAgICAgIHNlY29uZGFyeUhhczQwNCA9IHNlY29uZGFyeUhhczQwNCB8fCAoIWlzUHJpbWFyeVJldHJ5ICYmIHJlc3BvbnNlLnN0YXR1cyA9PT0gNDA0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvcmVSZXN0UGlwZWxpbmUuaXNSZXN0RXJyb3IoZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihgUmV0cnlQb2xpY3k6IENhdWdodCBlcnJvciwgbWVzc2FnZTogJHtlLm1lc3NhZ2V9LCBjb2RlOiAke2UuY29kZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihgUmV0cnlQb2xpY3k6IENhdWdodCBlcnJvciwgbWVzc2FnZTogJHtjb3JlVXRpbC5nZXRFcnJvck1lc3NhZ2UoZSl9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHJ5QWdhaW4gPSBzaG91bGRSZXRyeSh7IGlzUHJpbWFyeVJldHJ5LCBhdHRlbXB0LCByZXNwb25zZSwgZXJyb3IgfSk7XG4gICAgICAgICAgICAgICAgaWYgKHJldHJ5QWdhaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZGVsYXkoY2FsY3VsYXRlRGVsYXkoaXNQcmltYXJ5UmV0cnksIGF0dGVtcHQpLCByZXF1ZXN0LmFib3J0U2lnbmFsLCBSRVRSWV9BQk9SVF9FUlJPUik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGF0dGVtcHQrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yICE9PSBudWxsICYmIGVycm9yICE9PSB2b2lkIDAgPyBlcnJvciA6IG5ldyBjb3JlUmVzdFBpcGVsaW5lLlJlc3RFcnJvcihcIlJldHJ5UG9saWN5IGZhaWxlZCB3aXRob3V0IGtub3duIGVycm9yLlwiKTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogVGhlIHByb2dyYW1tYXRpYyBpZGVudGlmaWVyIG9mIHRoZSBzdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbFBvbGljeS5cbiAqL1xuY29uc3Qgc3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWxQb2xpY3lOYW1lID0gXCJzdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbFBvbGljeVwiO1xuLyoqXG4gKiBzdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbFBvbGljeSBoYW5kbGVzIHNpZ25pbmcgcmVxdWVzdHMgdXNpbmcgc3RvcmFnZSBhY2NvdW50IGtleXMuXG4gKi9cbmZ1bmN0aW9uIHN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsUG9saWN5KG9wdGlvbnMpIHtcbiAgICBmdW5jdGlvbiBzaWduUmVxdWVzdChyZXF1ZXN0KSB7XG4gICAgICAgIHJlcXVlc3QuaGVhZGVycy5zZXQoSGVhZGVyQ29uc3RhbnRzLlhfTVNfREFURSwgbmV3IERhdGUoKS50b1VUQ1N0cmluZygpKTtcbiAgICAgICAgaWYgKHJlcXVlc3QuYm9keSAmJlxuICAgICAgICAgICAgKHR5cGVvZiByZXF1ZXN0LmJvZHkgPT09IFwic3RyaW5nXCIgfHwgQnVmZmVyLmlzQnVmZmVyKHJlcXVlc3QuYm9keSkpICYmXG4gICAgICAgICAgICByZXF1ZXN0LmJvZHkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmVxdWVzdC5oZWFkZXJzLnNldChIZWFkZXJDb25zdGFudHMuQ09OVEVOVF9MRU5HVEgsIEJ1ZmZlci5ieXRlTGVuZ3RoKHJlcXVlc3QuYm9keSkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0cmluZ1RvU2lnbiA9IFtcbiAgICAgICAgICAgIHJlcXVlc3QubWV0aG9kLnRvVXBwZXJDYXNlKCksXG4gICAgICAgICAgICBnZXRIZWFkZXJWYWx1ZVRvU2lnbihyZXF1ZXN0LCBIZWFkZXJDb25zdGFudHMuQ09OVEVOVF9MQU5HVUFHRSksXG4gICAgICAgICAgICBnZXRIZWFkZXJWYWx1ZVRvU2lnbihyZXF1ZXN0LCBIZWFkZXJDb25zdGFudHMuQ09OVEVOVF9FTkNPRElORyksXG4gICAgICAgICAgICBnZXRIZWFkZXJWYWx1ZVRvU2lnbihyZXF1ZXN0LCBIZWFkZXJDb25zdGFudHMuQ09OVEVOVF9MRU5HVEgpLFxuICAgICAgICAgICAgZ2V0SGVhZGVyVmFsdWVUb1NpZ24ocmVxdWVzdCwgSGVhZGVyQ29uc3RhbnRzLkNPTlRFTlRfTUQ1KSxcbiAgICAgICAgICAgIGdldEhlYWRlclZhbHVlVG9TaWduKHJlcXVlc3QsIEhlYWRlckNvbnN0YW50cy5DT05URU5UX1RZUEUpLFxuICAgICAgICAgICAgZ2V0SGVhZGVyVmFsdWVUb1NpZ24ocmVxdWVzdCwgSGVhZGVyQ29uc3RhbnRzLkRBVEUpLFxuICAgICAgICAgICAgZ2V0SGVhZGVyVmFsdWVUb1NpZ24ocmVxdWVzdCwgSGVhZGVyQ29uc3RhbnRzLklGX01PRElGSUVEX1NJTkNFKSxcbiAgICAgICAgICAgIGdldEhlYWRlclZhbHVlVG9TaWduKHJlcXVlc3QsIEhlYWRlckNvbnN0YW50cy5JRl9NQVRDSCksXG4gICAgICAgICAgICBnZXRIZWFkZXJWYWx1ZVRvU2lnbihyZXF1ZXN0LCBIZWFkZXJDb25zdGFudHMuSUZfTk9ORV9NQVRDSCksXG4gICAgICAgICAgICBnZXRIZWFkZXJWYWx1ZVRvU2lnbihyZXF1ZXN0LCBIZWFkZXJDb25zdGFudHMuSUZfVU5NT0RJRklFRF9TSU5DRSksXG4gICAgICAgICAgICBnZXRIZWFkZXJWYWx1ZVRvU2lnbihyZXF1ZXN0LCBIZWFkZXJDb25zdGFudHMuUkFOR0UpLFxuICAgICAgICBdLmpvaW4oXCJcXG5cIikgK1xuICAgICAgICAgICAgXCJcXG5cIiArXG4gICAgICAgICAgICBnZXRDYW5vbmljYWxpemVkSGVhZGVyc1N0cmluZyhyZXF1ZXN0KSArXG4gICAgICAgICAgICBnZXRDYW5vbmljYWxpemVkUmVzb3VyY2VTdHJpbmcocmVxdWVzdCk7XG4gICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IGNyeXB0by5jcmVhdGVIbWFjKFwic2hhMjU2XCIsIG9wdGlvbnMuYWNjb3VudEtleSlcbiAgICAgICAgICAgIC51cGRhdGUoc3RyaW5nVG9TaWduLCBcInV0ZjhcIilcbiAgICAgICAgICAgIC5kaWdlc3QoXCJiYXNlNjRcIik7XG4gICAgICAgIHJlcXVlc3QuaGVhZGVycy5zZXQoSGVhZGVyQ29uc3RhbnRzLkFVVEhPUklaQVRJT04sIGBTaGFyZWRLZXkgJHtvcHRpb25zLmFjY291bnROYW1lfToke3NpZ25hdHVyZX1gKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYFtVUkxdOiR7cmVxdWVzdC51cmx9YCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGBbSEVBREVSU106JHtyZXF1ZXN0LmhlYWRlcnMudG9TdHJpbmcoKX1gKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYFtTVFJJTkcgVE8gU0lHTl06JHtKU09OLnN0cmluZ2lmeShzdHJpbmdUb1NpZ24pfWApO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhgW0tFWV06ICR7cmVxdWVzdC5oZWFkZXJzLmdldChIZWFkZXJDb25zdGFudHMuQVVUSE9SSVpBVElPTil9YCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlIGhlYWRlciB2YWx1ZSBhY2NvcmRpbmcgdG8gc2hhcmVkIGtleSBzaWduIHJ1bGVzLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2F1dGhlbnRpY2F0ZS13aXRoLXNoYXJlZC1rZXlcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRIZWFkZXJWYWx1ZVRvU2lnbihyZXF1ZXN0LCBoZWFkZXJOYW1lKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gcmVxdWVzdC5oZWFkZXJzLmdldChoZWFkZXJOYW1lKTtcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgLy8gV2hlbiB1c2luZyB2ZXJzaW9uIDIwMTUtMDItMjEgb3IgbGF0ZXIsIGlmIENvbnRlbnQtTGVuZ3RoIGlzIHplcm8sIHRoZW5cbiAgICAgICAgLy8gc2V0IHRoZSBDb250ZW50LUxlbmd0aCBwYXJ0IG9mIHRoZSBTdHJpbmdUb1NpZ24gdG8gYW4gZW1wdHkgc3RyaW5nLlxuICAgICAgICAvLyBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvYXV0aGVudGljYXRlLXdpdGgtc2hhcmVkLWtleVxuICAgICAgICBpZiAoaGVhZGVyTmFtZSA9PT0gSGVhZGVyQ29uc3RhbnRzLkNPTlRFTlRfTEVOR1RIICYmIHZhbHVlID09PSBcIjBcIikge1xuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUbyBjb25zdHJ1Y3QgdGhlIENhbm9uaWNhbGl6ZWRIZWFkZXJzIHBvcnRpb24gb2YgdGhlIHNpZ25hdHVyZSBzdHJpbmcsIGZvbGxvdyB0aGVzZSBzdGVwczpcbiAgICAgKiAxLiBSZXRyaWV2ZSBhbGwgaGVhZGVycyBmb3IgdGhlIHJlc291cmNlIHRoYXQgYmVnaW4gd2l0aCB4LW1zLSwgaW5jbHVkaW5nIHRoZSB4LW1zLWRhdGUgaGVhZGVyLlxuICAgICAqIDIuIENvbnZlcnQgZWFjaCBIVFRQIGhlYWRlciBuYW1lIHRvIGxvd2VyY2FzZS5cbiAgICAgKiAzLiBTb3J0IHRoZSBoZWFkZXJzIGxleGljb2dyYXBoaWNhbGx5IGJ5IGhlYWRlciBuYW1lLCBpbiBhc2NlbmRpbmcgb3JkZXIuXG4gICAgICogICAgRWFjaCBoZWFkZXIgbWF5IGFwcGVhciBvbmx5IG9uY2UgaW4gdGhlIHN0cmluZy5cbiAgICAgKiA0LiBSZXBsYWNlIGFueSBsaW5lYXIgd2hpdGVzcGFjZSBpbiB0aGUgaGVhZGVyIHZhbHVlIHdpdGggYSBzaW5nbGUgc3BhY2UuXG4gICAgICogNS4gVHJpbSBhbnkgd2hpdGVzcGFjZSBhcm91bmQgdGhlIGNvbG9uIGluIHRoZSBoZWFkZXIuXG4gICAgICogNi4gRmluYWxseSwgYXBwZW5kIGEgbmV3LWxpbmUgY2hhcmFjdGVyIHRvIGVhY2ggY2Fub25pY2FsaXplZCBoZWFkZXIgaW4gdGhlIHJlc3VsdGluZyBsaXN0LlxuICAgICAqICAgIENvbnN0cnVjdCB0aGUgQ2Fub25pY2FsaXplZEhlYWRlcnMgc3RyaW5nIGJ5IGNvbmNhdGVuYXRpbmcgYWxsIGhlYWRlcnMgaW4gdGhpcyBsaXN0IGludG8gYSBzaW5nbGUgc3RyaW5nLlxuICAgICAqXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0Q2Fub25pY2FsaXplZEhlYWRlcnNTdHJpbmcocmVxdWVzdCkge1xuICAgICAgICBsZXQgaGVhZGVyc0FycmF5ID0gW107XG4gICAgICAgIGZvciAoY29uc3QgW25hbWUsIHZhbHVlXSBvZiByZXF1ZXN0LmhlYWRlcnMpIHtcbiAgICAgICAgICAgIGlmIChuYW1lLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChIZWFkZXJDb25zdGFudHMuUFJFRklYX0ZPUl9TVE9SQUdFKSkge1xuICAgICAgICAgICAgICAgIGhlYWRlcnNBcnJheS5wdXNoKHsgbmFtZSwgdmFsdWUgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaGVhZGVyc0FycmF5LnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBjb21wYXJlSGVhZGVyKGEubmFtZS50b0xvd2VyQ2FzZSgpLCBiLm5hbWUudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBSZW1vdmUgZHVwbGljYXRlIGhlYWRlcnNcbiAgICAgICAgaGVhZGVyc0FycmF5ID0gaGVhZGVyc0FycmF5LmZpbHRlcigodmFsdWUsIGluZGV4LCBhcnJheSkgPT4ge1xuICAgICAgICAgICAgaWYgKGluZGV4ID4gMCAmJiB2YWx1ZS5uYW1lLnRvTG93ZXJDYXNlKCkgPT09IGFycmF5W2luZGV4IC0gMV0ubmFtZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgY2Fub25pY2FsaXplZEhlYWRlcnNTdHJpbmdUb1NpZ24gPSBcIlwiO1xuICAgICAgICBoZWFkZXJzQXJyYXkuZm9yRWFjaCgoaGVhZGVyKSA9PiB7XG4gICAgICAgICAgICBjYW5vbmljYWxpemVkSGVhZGVyc1N0cmluZ1RvU2lnbiArPSBgJHtoZWFkZXIubmFtZVxuICAgICAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgICAgLnRyaW1SaWdodCgpfToke2hlYWRlci52YWx1ZS50cmltTGVmdCgpfVxcbmA7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gY2Fub25pY2FsaXplZEhlYWRlcnNTdHJpbmdUb1NpZ247XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldENhbm9uaWNhbGl6ZWRSZXNvdXJjZVN0cmluZyhyZXF1ZXN0KSB7XG4gICAgICAgIGNvbnN0IHBhdGggPSBnZXRVUkxQYXRoKHJlcXVlc3QudXJsKSB8fCBcIi9cIjtcbiAgICAgICAgbGV0IGNhbm9uaWNhbGl6ZWRSZXNvdXJjZVN0cmluZyA9IFwiXCI7XG4gICAgICAgIGNhbm9uaWNhbGl6ZWRSZXNvdXJjZVN0cmluZyArPSBgLyR7b3B0aW9ucy5hY2NvdW50TmFtZX0ke3BhdGh9YDtcbiAgICAgICAgY29uc3QgcXVlcmllcyA9IGdldFVSTFF1ZXJpZXMocmVxdWVzdC51cmwpO1xuICAgICAgICBjb25zdCBsb3dlcmNhc2VRdWVyaWVzID0ge307XG4gICAgICAgIGlmIChxdWVyaWVzKSB7XG4gICAgICAgICAgICBjb25zdCBxdWVyeUtleXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHF1ZXJpZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHF1ZXJpZXMsIGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbG93ZXJjYXNlS2V5ID0ga2V5LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgICAgIGxvd2VyY2FzZVF1ZXJpZXNbbG93ZXJjYXNlS2V5XSA9IHF1ZXJpZXNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgcXVlcnlLZXlzLnB1c2gobG93ZXJjYXNlS2V5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxdWVyeUtleXMuc29ydCgpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgcXVlcnlLZXlzKSB7XG4gICAgICAgICAgICAgICAgY2Fub25pY2FsaXplZFJlc291cmNlU3RyaW5nICs9IGBcXG4ke2tleX06JHtkZWNvZGVVUklDb21wb25lbnQobG93ZXJjYXNlUXVlcmllc1trZXldKX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYW5vbmljYWxpemVkUmVzb3VyY2VTdHJpbmc7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IHN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsUG9saWN5TmFtZSxcbiAgICAgICAgYXN5bmMgc2VuZFJlcXVlc3QocmVxdWVzdCwgbmV4dCkge1xuICAgICAgICAgICAgc2lnblJlcXVlc3QocmVxdWVzdCk7XG4gICAgICAgICAgICByZXR1cm4gbmV4dChyZXF1ZXN0KTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogU3RvcmFnZUJyb3dzZXJQb2xpY3kgd2lsbCBoYW5kbGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBOb2RlLmpzIGFuZCBicm93c2VyIHJ1bnRpbWUsIGluY2x1ZGluZzpcbiAqXG4gKiAxLiBCcm93c2VycyBjYWNoZSBHRVQvSEVBRCByZXF1ZXN0cyBieSBhZGRpbmcgY29uZGl0aW9uYWwgaGVhZGVycyBzdWNoIGFzICdJRl9NT0RJRklFRF9TSU5DRScuXG4gKiBTdG9yYWdlQnJvd3NlclBvbGljeSBpcyBhIHBvbGljeSB1c2VkIHRvIGFkZCBhIHRpbWVzdGFtcCBxdWVyeSB0byBHRVQvSEVBRCByZXF1ZXN0IFVSTFxuICogdGh1cyBhdm9pZCB0aGUgYnJvd3NlciBjYWNoZS5cbiAqXG4gKiAyLiBSZW1vdmUgY29va2llIGhlYWRlciBmb3Igc2VjdXJpdHlcbiAqXG4gKiAzLiBSZW1vdmUgY29udGVudC1sZW5ndGggaGVhZGVyIHRvIGF2b2lkIGJyb3dzZXJzIHdhcm5pbmdcbiAqL1xuY2xhc3MgU3RvcmFnZUJyb3dzZXJQb2xpY3kgZXh0ZW5kcyBCYXNlUmVxdWVzdFBvbGljeSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBTdG9yYWdlQnJvd3NlclBvbGljeS5cbiAgICAgKiBAcGFyYW0gbmV4dFBvbGljeSAtXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLVxuICAgICAqL1xuICAgIC8vIFRoZSBiYXNlIGNsYXNzIGhhcyBhIHByb3RlY3RlZCBjb25zdHJ1Y3Rvci4gQWRkaW5nIGEgcHVibGljIG9uZSB0byBlbmFibGUgY29uc3RydWN0aW5nIG9mIHRoaXMgY2xhc3MuXG4gICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11c2VsZXNzLWNvbnN0cnVjdG9yKi9cbiAgICBjb25zdHJ1Y3RvcihuZXh0UG9saWN5LCBvcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKG5leHRQb2xpY3ksIG9wdGlvbnMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZW5kcyBvdXQgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByZXF1ZXN0IC1cbiAgICAgKi9cbiAgICBhc3luYyBzZW5kUmVxdWVzdChyZXF1ZXN0KSB7XG4gICAgICAgIGlmIChjb3JlVXRpbC5pc05vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9uZXh0UG9saWN5LnNlbmRSZXF1ZXN0KHJlcXVlc3QpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXF1ZXN0Lm1ldGhvZC50b1VwcGVyQ2FzZSgpID09PSBcIkdFVFwiIHx8IHJlcXVlc3QubWV0aG9kLnRvVXBwZXJDYXNlKCkgPT09IFwiSEVBRFwiKSB7XG4gICAgICAgICAgICByZXF1ZXN0LnVybCA9IHNldFVSTFBhcmFtZXRlcihyZXF1ZXN0LnVybCwgVVJMQ29uc3RhbnRzLlBhcmFtZXRlcnMuRk9SQ0VfQlJPV1NFUl9OT19DQUNIRSwgbmV3IERhdGUoKS5nZXRUaW1lKCkudG9TdHJpbmcoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVxdWVzdC5oZWFkZXJzLnJlbW92ZShIZWFkZXJDb25zdGFudHMuQ09PS0lFKTtcbiAgICAgICAgLy8gQWNjb3JkaW5nIHRvIFhIUiBzdGFuZGFyZHMsIGNvbnRlbnQtbGVuZ3RoIHNob3VsZCBiZSBmdWxseSBjb250cm9sbGVkIGJ5IGJyb3dzZXJzXG4gICAgICAgIHJlcXVlc3QuaGVhZGVycy5yZW1vdmUoSGVhZGVyQ29uc3RhbnRzLkNPTlRFTlRfTEVOR1RIKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX25leHRQb2xpY3kuc2VuZFJlcXVlc3QocmVxdWVzdCk7XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogU3RvcmFnZUJyb3dzZXJQb2xpY3lGYWN0b3J5IGlzIGEgZmFjdG9yeSBjbGFzcyBoZWxwaW5nIGdlbmVyYXRpbmcgU3RvcmFnZUJyb3dzZXJQb2xpY3kgb2JqZWN0cy5cbiAqL1xuY2xhc3MgU3RvcmFnZUJyb3dzZXJQb2xpY3lGYWN0b3J5IHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgU3RvcmFnZUJyb3dzZXJQb2xpY3lGYWN0b3J5IG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBuZXh0UG9saWN5IC1cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtXG4gICAgICovXG4gICAgY3JlYXRlKG5leHRQb2xpY3ksIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTdG9yYWdlQnJvd3NlclBvbGljeShuZXh0UG9saWN5LCBvcHRpb25zKTtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBUaGUgcHJvZ3JhbW1hdGljIGlkZW50aWZpZXIgb2YgdGhlIHN0b3JhZ2VDb3JyZWN0Q29udGVudExlbmd0aFBvbGljeS5cbiAqL1xuY29uc3Qgc3RvcmFnZUNvcnJlY3RDb250ZW50TGVuZ3RoUG9saWN5TmFtZSA9IFwiU3RvcmFnZUNvcnJlY3RDb250ZW50TGVuZ3RoUG9saWN5XCI7XG4vKipcbiAqIHN0b3JhZ2VDb3JyZWN0Q29udGVudExlbmd0aFBvbGljeSB0byBjb3JyZWN0bHkgc2V0IENvbnRlbnQtTGVuZ3RoIGhlYWRlciB3aXRoIHJlcXVlc3QgYm9keSBsZW5ndGguXG4gKi9cbmZ1bmN0aW9uIHN0b3JhZ2VDb3JyZWN0Q29udGVudExlbmd0aFBvbGljeSgpIHtcbiAgICBmdW5jdGlvbiBjb3JyZWN0Q29udGVudExlbmd0aChyZXF1ZXN0KSB7XG4gICAgICAgIGlmIChyZXF1ZXN0LmJvZHkgJiZcbiAgICAgICAgICAgICh0eXBlb2YgcmVxdWVzdC5ib2R5ID09PSBcInN0cmluZ1wiIHx8IEJ1ZmZlci5pc0J1ZmZlcihyZXF1ZXN0LmJvZHkpKSAmJlxuICAgICAgICAgICAgcmVxdWVzdC5ib2R5Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJlcXVlc3QuaGVhZGVycy5zZXQoSGVhZGVyQ29uc3RhbnRzLkNPTlRFTlRfTEVOR1RILCBCdWZmZXIuYnl0ZUxlbmd0aChyZXF1ZXN0LmJvZHkpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBzdG9yYWdlQ29ycmVjdENvbnRlbnRMZW5ndGhQb2xpY3lOYW1lLFxuICAgICAgICBhc3luYyBzZW5kUmVxdWVzdChyZXF1ZXN0LCBuZXh0KSB7XG4gICAgICAgICAgICBjb3JyZWN0Q29udGVudExlbmd0aChyZXF1ZXN0KTtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KHJlcXVlc3QpO1xuICAgICAgICB9LFxuICAgIH07XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBBIGhlbHBlciB0byBkZWNpZGUgaWYgYSBnaXZlbiBhcmd1bWVudCBzYXRpc2ZpZXMgdGhlIFBpcGVsaW5lIGNvbnRyYWN0XG4gKiBAcGFyYW0gcGlwZWxpbmUgLSBBbiBhcmd1bWVudCB0aGF0IG1heSBiZSBhIFBpcGVsaW5lXG4gKiBAcmV0dXJucyB0cnVlIHdoZW4gdGhlIGFyZ3VtZW50IHNhdGlzZmllcyB0aGUgUGlwZWxpbmUgY29udHJhY3RcbiAqL1xuZnVuY3Rpb24gaXNQaXBlbGluZUxpa2UocGlwZWxpbmUpIHtcbiAgICBpZiAoIXBpcGVsaW5lIHx8IHR5cGVvZiBwaXBlbGluZSAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGNhc3RQaXBlbGluZSA9IHBpcGVsaW5lO1xuICAgIHJldHVybiAoQXJyYXkuaXNBcnJheShjYXN0UGlwZWxpbmUuZmFjdG9yaWVzKSAmJlxuICAgICAgICB0eXBlb2YgY2FzdFBpcGVsaW5lLm9wdGlvbnMgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgdHlwZW9mIGNhc3RQaXBlbGluZS50b1NlcnZpY2VDbGllbnRPcHRpb25zID09PSBcImZ1bmN0aW9uXCIpO1xufVxuLyoqXG4gKiBBIFBpcGVsaW5lIGNsYXNzIGNvbnRhaW5pbmcgSFRUUCByZXF1ZXN0IHBvbGljaWVzLlxuICogWW91IGNhbiBjcmVhdGUgYSBkZWZhdWx0IFBpcGVsaW5lIGJ5IGNhbGxpbmcge0BsaW5rIG5ld1BpcGVsaW5lfS5cbiAqIE9yIHlvdSBjYW4gY3JlYXRlIGEgUGlwZWxpbmUgd2l0aCB5b3VyIG93biBwb2xpY2llcyBieSB0aGUgY29uc3RydWN0b3Igb2YgUGlwZWxpbmUuXG4gKlxuICogUmVmZXIgdG8ge0BsaW5rIG5ld1BpcGVsaW5lfSBhbmQgcHJvdmlkZWQgcG9saWNpZXMgYmVmb3JlIGltcGxlbWVudGluZyB5b3VyXG4gKiBjdXN0b21pemVkIFBpcGVsaW5lLlxuICovXG5jbGFzcyBQaXBlbGluZSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBQaXBlbGluZS4gQ3VzdG9taXplIEhUVFBDbGllbnQgYnkgaW1wbGVtZW50aW5nIElIdHRwQ2xpZW50IGludGVyZmFjZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBmYWN0b3JpZXMgLVxuICAgICAqIEBwYXJhbSBvcHRpb25zIC1cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihmYWN0b3JpZXMsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICB0aGlzLmZhY3RvcmllcyA9IGZhY3RvcmllcztcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB9XG4gICAgLyoqXG4gICAgICogVHJhbnNmZXIgUGlwZWxpbmUgb2JqZWN0IHRvIFNlcnZpY2VDbGllbnRPcHRpb25zIG9iamVjdCB3aGljaCBpcyByZXF1aXJlZCBieVxuICAgICAqIFNlcnZpY2VDbGllbnQgY29uc3RydWN0b3IuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBUaGUgU2VydmljZUNsaWVudE9wdGlvbnMgb2JqZWN0IGZyb20gdGhpcyBQaXBlbGluZS5cbiAgICAgKi9cbiAgICB0b1NlcnZpY2VDbGllbnRPcHRpb25zKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaHR0cENsaWVudDogdGhpcy5vcHRpb25zLmh0dHBDbGllbnQsXG4gICAgICAgICAgICByZXF1ZXN0UG9saWN5RmFjdG9yaWVzOiB0aGlzLmZhY3RvcmllcyxcbiAgICAgICAgfTtcbiAgICB9XG59XG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgUGlwZWxpbmUgb2JqZWN0IHdpdGggQ3JlZGVudGlhbCBwcm92aWRlZC5cbiAqXG4gKiBAcGFyYW0gY3JlZGVudGlhbCAtICBTdWNoIGFzIEFub255bW91c0NyZWRlbnRpYWwsIFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsIG9yIGFueSBjcmVkZW50aWFsIGZyb20gdGhlIGBAYXp1cmUvaWRlbnRpdHlgIHBhY2thZ2UgdG8gYXV0aGVudGljYXRlIHJlcXVlc3RzIHRvIHRoZSBzZXJ2aWNlLiBZb3UgY2FuIGFsc28gcHJvdmlkZSBhbiBvYmplY3QgdGhhdCBpbXBsZW1lbnRzIHRoZSBUb2tlbkNyZWRlbnRpYWwgaW50ZXJmYWNlLiBJZiBub3Qgc3BlY2lmaWVkLCBBbm9ueW1vdXNDcmVkZW50aWFsIGlzIHVzZWQuXG4gKiBAcGFyYW0gcGlwZWxpbmVPcHRpb25zIC0gT3B0aW9uYWwuIE9wdGlvbnMuXG4gKiBAcmV0dXJucyBBIG5ldyBQaXBlbGluZSBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIG5ld1BpcGVsaW5lKGNyZWRlbnRpYWwsIHBpcGVsaW5lT3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKCFjcmVkZW50aWFsKSB7XG4gICAgICAgIGNyZWRlbnRpYWwgPSBuZXcgQW5vbnltb3VzQ3JlZGVudGlhbCgpO1xuICAgIH1cbiAgICBjb25zdCBwaXBlbGluZSA9IG5ldyBQaXBlbGluZShbXSwgcGlwZWxpbmVPcHRpb25zKTtcbiAgICBwaXBlbGluZS5fY3JlZGVudGlhbCA9IGNyZWRlbnRpYWw7XG4gICAgcmV0dXJuIHBpcGVsaW5lO1xufVxuZnVuY3Rpb24gcHJvY2Vzc0Rvd25sZXZlbFBpcGVsaW5lKHBpcGVsaW5lKSB7XG4gICAgY29uc3Qga25vd25GYWN0b3J5RnVuY3Rpb25zID0gW1xuICAgICAgICBpc0Fub255bW91c0NyZWRlbnRpYWwsXG4gICAgICAgIGlzU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwsXG4gICAgICAgIGlzQ29yZUh0dHBCZWFyZXJUb2tlbkZhY3RvcnksXG4gICAgICAgIGlzU3RvcmFnZUJyb3dzZXJQb2xpY3lGYWN0b3J5LFxuICAgICAgICBpc1N0b3JhZ2VSZXRyeVBvbGljeUZhY3RvcnksXG4gICAgICAgIGlzU3RvcmFnZVRlbGVtZXRyeVBvbGljeUZhY3RvcnksXG4gICAgICAgIGlzQ29yZUh0dHBQb2xpY3lGYWN0b3J5LFxuICAgIF07XG4gICAgaWYgKHBpcGVsaW5lLmZhY3Rvcmllcy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3Qgbm92ZWxGYWN0b3JpZXMgPSBwaXBlbGluZS5mYWN0b3JpZXMuZmlsdGVyKChmYWN0b3J5KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gIWtub3duRmFjdG9yeUZ1bmN0aW9ucy5zb21lKChrbm93bkZhY3RvcnkpID0+IGtub3duRmFjdG9yeShmYWN0b3J5KSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAobm92ZWxGYWN0b3JpZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBoYXNJbmplY3RvciA9IG5vdmVsRmFjdG9yaWVzLnNvbWUoKGZhY3RvcnkpID0+IGlzSW5qZWN0b3JQb2xpY3lGYWN0b3J5KGZhY3RvcnkpKTtcbiAgICAgICAgICAgIC8vIGlmIHRoZXJlIGFyZSBhbnkgbGVmdCBvdmVyLCB3cmFwIGluIGEgcmVxdWVzdFBvbGljeUZhY3RvcnlQb2xpY3lcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgd3JhcHBlZFBvbGljaWVzOiBjb3JlSHR0cENvbXBhdC5jcmVhdGVSZXF1ZXN0UG9saWN5RmFjdG9yeVBvbGljeShub3ZlbEZhY3RvcmllcyksXG4gICAgICAgICAgICAgICAgYWZ0ZXJSZXRyeTogaGFzSW5qZWN0b3IsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBnZXRDb3JlQ2xpZW50T3B0aW9ucyhwaXBlbGluZSkge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCBfYiA9IHBpcGVsaW5lLm9wdGlvbnMsIHsgaHR0cENsaWVudDogdjFDbGllbnQgfSA9IF9iLCByZXN0T3B0aW9ucyA9IHRzbGliLl9fcmVzdChfYiwgW1wiaHR0cENsaWVudFwiXSk7XG4gICAgbGV0IGh0dHBDbGllbnQgPSBwaXBlbGluZS5fY29yZUh0dHBDbGllbnQ7XG4gICAgaWYgKCFodHRwQ2xpZW50KSB7XG4gICAgICAgIGh0dHBDbGllbnQgPSB2MUNsaWVudCA/IGNvcmVIdHRwQ29tcGF0LmNvbnZlcnRIdHRwQ2xpZW50KHYxQ2xpZW50KSA6IGdldENhY2hlZERlZmF1bHRIdHRwQ2xpZW50KCk7XG4gICAgICAgIHBpcGVsaW5lLl9jb3JlSHR0cENsaWVudCA9IGh0dHBDbGllbnQ7XG4gICAgfVxuICAgIGxldCBjb3JlUGlwZWxpbmUgPSBwaXBlbGluZS5fY29yZVBpcGVsaW5lO1xuICAgIGlmICghY29yZVBpcGVsaW5lKSB7XG4gICAgICAgIGNvbnN0IHBhY2thZ2VEZXRhaWxzID0gYGF6c2RrLWpzLWF6dXJlLXN0b3JhZ2UtYmxvYi8ke1NES19WRVJTSU9OfWA7XG4gICAgICAgIGNvbnN0IHVzZXJBZ2VudFByZWZpeCA9IHJlc3RPcHRpb25zLnVzZXJBZ2VudE9wdGlvbnMgJiYgcmVzdE9wdGlvbnMudXNlckFnZW50T3B0aW9ucy51c2VyQWdlbnRQcmVmaXhcbiAgICAgICAgICAgID8gYCR7cmVzdE9wdGlvbnMudXNlckFnZW50T3B0aW9ucy51c2VyQWdlbnRQcmVmaXh9ICR7cGFja2FnZURldGFpbHN9YFxuICAgICAgICAgICAgOiBgJHtwYWNrYWdlRGV0YWlsc31gO1xuICAgICAgICBjb3JlUGlwZWxpbmUgPSBjb3JlQ2xpZW50LmNyZWF0ZUNsaWVudFBpcGVsaW5lKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcmVzdE9wdGlvbnMpLCB7IGxvZ2dpbmdPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgYWRkaXRpb25hbEFsbG93ZWRIZWFkZXJOYW1lczogU3RvcmFnZUJsb2JMb2dnaW5nQWxsb3dlZEhlYWRlck5hbWVzLFxuICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxBbGxvd2VkUXVlcnlQYXJhbWV0ZXJzOiBTdG9yYWdlQmxvYkxvZ2dpbmdBbGxvd2VkUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgICAgIGxvZ2dlcjogbG9nZ2VyLmluZm8sXG4gICAgICAgICAgICB9LCB1c2VyQWdlbnRPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgdXNlckFnZW50UHJlZml4LFxuICAgICAgICAgICAgfSwgc2VyaWFsaXphdGlvbk9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICBzdHJpbmdpZnlYTUw6IGNvcmVYbWwuc3RyaW5naWZ5WE1MLFxuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZXJPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgIHhtbDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXNlIGN1c3RvbWl6ZWQgWE1MIGNoYXIga2V5IG9mIFwiI1wiIHNvIHdlIGNhbiBkZXNlcmlhbGl6ZSBtZXRhZGF0YVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2l0aCBcIl9cIiBrZXlcbiAgICAgICAgICAgICAgICAgICAgICAgIHhtbENoYXJLZXk6IFwiI1wiLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LCBkZXNlcmlhbGl6YXRpb25PcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgcGFyc2VYTUw6IGNvcmVYbWwucGFyc2VYTUwsXG4gICAgICAgICAgICAgICAgc2VyaWFsaXplck9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgeG1sOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBVc2UgY3VzdG9taXplZCBYTUwgY2hhciBrZXkgb2YgXCIjXCIgc28gd2UgY2FuIGRlc2VyaWFsaXplIG1ldGFkYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB3aXRoIFwiX1wiIGtleVxuICAgICAgICAgICAgICAgICAgICAgICAgeG1sQ2hhcktleTogXCIjXCIsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0gfSkpO1xuICAgICAgICBjb3JlUGlwZWxpbmUucmVtb3ZlUG9saWN5KHsgcGhhc2U6IFwiUmV0cnlcIiB9KTtcbiAgICAgICAgY29yZVBpcGVsaW5lLnJlbW92ZVBvbGljeSh7IG5hbWU6IGNvcmVSZXN0UGlwZWxpbmUuZGVjb21wcmVzc1Jlc3BvbnNlUG9saWN5TmFtZSB9KTtcbiAgICAgICAgY29yZVBpcGVsaW5lLmFkZFBvbGljeShzdG9yYWdlQ29ycmVjdENvbnRlbnRMZW5ndGhQb2xpY3koKSk7XG4gICAgICAgIGNvcmVQaXBlbGluZS5hZGRQb2xpY3koc3RvcmFnZVJldHJ5UG9saWN5KHJlc3RPcHRpb25zLnJldHJ5T3B0aW9ucyksIHsgcGhhc2U6IFwiUmV0cnlcIiB9KTtcbiAgICAgICAgY29yZVBpcGVsaW5lLmFkZFBvbGljeShzdG9yYWdlQnJvd3NlclBvbGljeSgpKTtcbiAgICAgICAgY29uc3QgZG93bmxldmVsUmVzdWx0cyA9IHByb2Nlc3NEb3dubGV2ZWxQaXBlbGluZShwaXBlbGluZSk7XG4gICAgICAgIGlmIChkb3dubGV2ZWxSZXN1bHRzKSB7XG4gICAgICAgICAgICBjb3JlUGlwZWxpbmUuYWRkUG9saWN5KGRvd25sZXZlbFJlc3VsdHMud3JhcHBlZFBvbGljaWVzLCBkb3dubGV2ZWxSZXN1bHRzLmFmdGVyUmV0cnkgPyB7IGFmdGVyUGhhc2U6IFwiUmV0cnlcIiB9IDogdW5kZWZpbmVkKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjcmVkZW50aWFsID0gZ2V0Q3JlZGVudGlhbEZyb21QaXBlbGluZShwaXBlbGluZSk7XG4gICAgICAgIGlmIChjb3JlQXV0aC5pc1Rva2VuQ3JlZGVudGlhbChjcmVkZW50aWFsKSkge1xuICAgICAgICAgICAgY29yZVBpcGVsaW5lLmFkZFBvbGljeShjb3JlUmVzdFBpcGVsaW5lLmJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3koe1xuICAgICAgICAgICAgICAgIGNyZWRlbnRpYWwsXG4gICAgICAgICAgICAgICAgc2NvcGVzOiAoX2EgPSByZXN0T3B0aW9ucy5hdWRpZW5jZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogU3RvcmFnZU9BdXRoU2NvcGVzLFxuICAgICAgICAgICAgICAgIGNoYWxsZW5nZUNhbGxiYWNrczogeyBhdXRob3JpemVSZXF1ZXN0T25DaGFsbGVuZ2U6IGNvcmVDbGllbnQuYXV0aG9yaXplUmVxdWVzdE9uVGVuYW50Q2hhbGxlbmdlIH0sXG4gICAgICAgICAgICB9KSwgeyBwaGFzZTogXCJTaWduXCIgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY3JlZGVudGlhbCBpbnN0YW5jZW9mIFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsKSB7XG4gICAgICAgICAgICBjb3JlUGlwZWxpbmUuYWRkUG9saWN5KHN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsUG9saWN5KHtcbiAgICAgICAgICAgICAgICBhY2NvdW50TmFtZTogY3JlZGVudGlhbC5hY2NvdW50TmFtZSxcbiAgICAgICAgICAgICAgICBhY2NvdW50S2V5OiBjcmVkZW50aWFsLmFjY291bnRLZXksXG4gICAgICAgICAgICB9KSwgeyBwaGFzZTogXCJTaWduXCIgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcGlwZWxpbmUuX2NvcmVQaXBlbGluZSA9IGNvcmVQaXBlbGluZTtcbiAgICB9XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcmVzdE9wdGlvbnMpLCB7IGFsbG93SW5zZWN1cmVDb25uZWN0aW9uOiB0cnVlLCBodHRwQ2xpZW50LCBwaXBlbGluZTogY29yZVBpcGVsaW5lIH0pO1xufVxuZnVuY3Rpb24gZ2V0Q3JlZGVudGlhbEZyb21QaXBlbGluZShwaXBlbGluZSkge1xuICAgIC8vIHNlZSBpZiB3ZSBzcXVpcnJlbGVkIG9uZSBhd2F5IG9uIHRoZSB0eXBlIGl0c2VsZlxuICAgIGlmIChwaXBlbGluZS5fY3JlZGVudGlhbCkge1xuICAgICAgICByZXR1cm4gcGlwZWxpbmUuX2NyZWRlbnRpYWw7XG4gICAgfVxuICAgIC8vIGlmIGl0IGNhbWUgZnJvbSBhbm90aGVyIHBhY2thZ2UsIGxvb3Agb3ZlciB0aGUgZmFjdG9yaWVzIGFuZCBsb29rIGZvciBvbmUgbGlrZSBiZWZvcmVcbiAgICBsZXQgY3JlZGVudGlhbCA9IG5ldyBBbm9ueW1vdXNDcmVkZW50aWFsKCk7XG4gICAgZm9yIChjb25zdCBmYWN0b3J5IG9mIHBpcGVsaW5lLmZhY3Rvcmllcykge1xuICAgICAgICBpZiAoY29yZUF1dGguaXNUb2tlbkNyZWRlbnRpYWwoZmFjdG9yeS5jcmVkZW50aWFsKSkge1xuICAgICAgICAgICAgLy8gT25seSB3b3JrcyBpZiB0aGUgZmFjdG9yeSBoYXMgYmVlbiBhdHRhY2hlZCBhIFwiY3JlZGVudGlhbFwiIHByb3BlcnR5LlxuICAgICAgICAgICAgLy8gV2UgZG8gdGhhdCBpbiBuZXdQaXBlbGluZSgpIHdoZW4gdXNpbmcgVG9rZW5DcmVkZW50aWFsLlxuICAgICAgICAgICAgY3JlZGVudGlhbCA9IGZhY3RvcnkuY3JlZGVudGlhbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc1N0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsKGZhY3RvcnkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFjdG9yeTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY3JlZGVudGlhbDtcbn1cbmZ1bmN0aW9uIGlzU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwoZmFjdG9yeSkge1xuICAgIGlmIChmYWN0b3J5IGluc3RhbmNlb2YgU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWN0b3J5LmNvbnN0cnVjdG9yLm5hbWUgPT09IFwiU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWxcIjtcbn1cbmZ1bmN0aW9uIGlzQW5vbnltb3VzQ3JlZGVudGlhbChmYWN0b3J5KSB7XG4gICAgaWYgKGZhY3RvcnkgaW5zdGFuY2VvZiBBbm9ueW1vdXNDcmVkZW50aWFsKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFjdG9yeS5jb25zdHJ1Y3Rvci5uYW1lID09PSBcIkFub255bW91c0NyZWRlbnRpYWxcIjtcbn1cbmZ1bmN0aW9uIGlzQ29yZUh0dHBCZWFyZXJUb2tlbkZhY3RvcnkoZmFjdG9yeSkge1xuICAgIHJldHVybiBjb3JlQXV0aC5pc1Rva2VuQ3JlZGVudGlhbChmYWN0b3J5LmNyZWRlbnRpYWwpO1xufVxuZnVuY3Rpb24gaXNTdG9yYWdlQnJvd3NlclBvbGljeUZhY3RvcnkoZmFjdG9yeSkge1xuICAgIGlmIChmYWN0b3J5IGluc3RhbmNlb2YgU3RvcmFnZUJyb3dzZXJQb2xpY3lGYWN0b3J5KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFjdG9yeS5jb25zdHJ1Y3Rvci5uYW1lID09PSBcIlN0b3JhZ2VCcm93c2VyUG9saWN5RmFjdG9yeVwiO1xufVxuZnVuY3Rpb24gaXNTdG9yYWdlUmV0cnlQb2xpY3lGYWN0b3J5KGZhY3RvcnkpIHtcbiAgICBpZiAoZmFjdG9yeSBpbnN0YW5jZW9mIFN0b3JhZ2VSZXRyeVBvbGljeUZhY3RvcnkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWN0b3J5LmNvbnN0cnVjdG9yLm5hbWUgPT09IFwiU3RvcmFnZVJldHJ5UG9saWN5RmFjdG9yeVwiO1xufVxuZnVuY3Rpb24gaXNTdG9yYWdlVGVsZW1ldHJ5UG9saWN5RmFjdG9yeShmYWN0b3J5KSB7XG4gICAgcmV0dXJuIGZhY3RvcnkuY29uc3RydWN0b3IubmFtZSA9PT0gXCJUZWxlbWV0cnlQb2xpY3lGYWN0b3J5XCI7XG59XG5mdW5jdGlvbiBpc0luamVjdG9yUG9saWN5RmFjdG9yeShmYWN0b3J5KSB7XG4gICAgcmV0dXJuIGZhY3RvcnkuY29uc3RydWN0b3IubmFtZSA9PT0gXCJJbmplY3RvclBvbGljeUZhY3RvcnlcIjtcbn1cbmZ1bmN0aW9uIGlzQ29yZUh0dHBQb2xpY3lGYWN0b3J5KGZhY3RvcnkpIHtcbiAgICBjb25zdCBrbm93blBvbGljaWVzID0gW1xuICAgICAgICBcIkdlbmVyYXRlQ2xpZW50UmVxdWVzdElkUG9saWN5XCIsXG4gICAgICAgIFwiVHJhY2luZ1BvbGljeVwiLFxuICAgICAgICBcIkxvZ1BvbGljeVwiLFxuICAgICAgICBcIlByb3h5UG9saWN5XCIsXG4gICAgICAgIFwiRGlzYWJsZVJlc3BvbnNlRGVjb21wcmVzc2lvblBvbGljeVwiLFxuICAgICAgICBcIktlZXBBbGl2ZVBvbGljeVwiLFxuICAgICAgICBcIkRlc2VyaWFsaXphdGlvblBvbGljeVwiLFxuICAgIF07XG4gICAgY29uc3QgbW9ja0h0dHBDbGllbnQgPSB7XG4gICAgICAgIHNlbmRSZXF1ZXN0OiBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICByZXF1ZXN0LFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHJlcXVlc3QuaGVhZGVycy5jbG9uZSgpLFxuICAgICAgICAgICAgICAgIHN0YXR1czogNTAwLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICB9O1xuICAgIGNvbnN0IG1vY2tSZXF1ZXN0UG9saWN5T3B0aW9ucyA9IHtcbiAgICAgICAgbG9nKF9sb2dMZXZlbCwgX21lc3NhZ2UpIHtcbiAgICAgICAgICAgIC8qIGRvIG5vdGhpbmcgKi9cbiAgICAgICAgfSxcbiAgICAgICAgc2hvdWxkTG9nKF9sb2dMZXZlbCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9LFxuICAgIH07XG4gICAgY29uc3QgcG9saWN5SW5zdGFuY2UgPSBmYWN0b3J5LmNyZWF0ZShtb2NrSHR0cENsaWVudCwgbW9ja1JlcXVlc3RQb2xpY3lPcHRpb25zKTtcbiAgICBjb25zdCBwb2xpY3lOYW1lID0gcG9saWN5SW5zdGFuY2UuY29uc3RydWN0b3IubmFtZTtcbiAgICAvLyBidW5kbGVycyBzb21ldGltZXMgYWRkIGEgY3VzdG9tIHN1ZmZpeCB0byB0aGUgY2xhc3MgbmFtZSB0byBtYWtlIGl0IHVuaXF1ZVxuICAgIHJldHVybiBrbm93blBvbGljaWVzLnNvbWUoKGtub3duUG9saWN5TmFtZSkgPT4ge1xuICAgICAgICByZXR1cm4gcG9saWN5TmFtZS5zdGFydHNXaXRoKGtub3duUG9saWN5TmFtZSk7XG4gICAgfSk7XG59XG5cbi8qXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAqXG4gKiBDb2RlIGdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEF1dG9SZXN0IENvZGUgR2VuZXJhdG9yLlxuICogQ2hhbmdlcyBtYXkgY2F1c2UgaW5jb3JyZWN0IGJlaGF2aW9yIGFuZCB3aWxsIGJlIGxvc3QgaWYgdGhlIGNvZGUgaXMgcmVnZW5lcmF0ZWQuXG4gKi9cbmNvbnN0IEJsb2JTZXJ2aWNlUHJvcGVydGllcyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iU2VydmljZVByb3BlcnRpZXNcIixcbiAgICB4bWxOYW1lOiBcIlN0b3JhZ2VTZXJ2aWNlUHJvcGVydGllc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JTZXJ2aWNlUHJvcGVydGllc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGJsb2JBbmFseXRpY3NMb2dnaW5nOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTG9nZ2luZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTG9nZ2luZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIkxvZ2dpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhvdXJNZXRyaWNzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiSG91ck1ldHJpY3NcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkhvdXJNZXRyaWNzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiTWV0cmljc1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbWludXRlTWV0cmljczoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIk1pbnV0ZU1ldHJpY3NcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIk1pbnV0ZU1ldHJpY3NcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJNZXRyaWNzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3JzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ29yc1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQ29yc1wiLFxuICAgICAgICAgICAgICAgIHhtbElzV3JhcHBlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxFbGVtZW50TmFtZTogXCJDb3JzUnVsZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTZXF1ZW5jZVwiLFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiQ29yc1J1bGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZWZhdWx0U2VydmljZVZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJEZWZhdWx0U2VydmljZVZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkRlZmF1bHRTZXJ2aWNlVmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlbGV0ZVJldGVudGlvblBvbGljeToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkRlbGV0ZVJldGVudGlvblBvbGljeVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiRGVsZXRlUmV0ZW50aW9uUG9saWN5XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiUmV0ZW50aW9uUG9saWN5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdGF0aWNXZWJzaXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiU3RhdGljV2Vic2l0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiU3RhdGljV2Vic2l0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIlN0YXRpY1dlYnNpdGVcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IExvZ2dpbmcgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiTG9nZ2luZ1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkxvZ2dpbmdcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiVmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiVmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlbGV0ZVByb3BlcnR5OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRGVsZXRlXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJEZWxldGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVhZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlJlYWRcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlJlYWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgd3JpdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJXcml0ZVwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiV3JpdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmV0ZW50aW9uUG9saWN5OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiUmV0ZW50aW9uUG9saWN5XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJSZXRlbnRpb25Qb2xpY3lcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJSZXRlbnRpb25Qb2xpY3lcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFJldGVudGlvblBvbGljeSA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJSZXRlbnRpb25Qb2xpY3lcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJSZXRlbnRpb25Qb2xpY3lcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlbmFibGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRW5hYmxlZFwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiRW5hYmxlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXlzOiB7XG4gICAgICAgICAgICAgICAgY29uc3RyYWludHM6IHtcbiAgICAgICAgICAgICAgICAgICAgSW5jbHVzaXZlTWluaW11bTogMSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkRheXNcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkRheXNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBNZXRyaWNzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIk1ldHJpY3NcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJNZXRyaWNzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmFibGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRW5hYmxlZFwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiRW5hYmxlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpbmNsdWRlQVBJczoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkluY2x1ZGVBUElzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJJbmNsdWRlQVBJc1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXRlbnRpb25Qb2xpY3k6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJSZXRlbnRpb25Qb2xpY3lcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlJldGVudGlvblBvbGljeVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIlJldGVudGlvblBvbGljeVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29yc1J1bGUgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29yc1J1bGVcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb3JzUnVsZVwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGFsbG93ZWRPcmlnaW5zOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQWxsb3dlZE9yaWdpbnNcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkFsbG93ZWRPcmlnaW5zXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWxsb3dlZE1ldGhvZHM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJBbGxvd2VkTWV0aG9kc1wiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQWxsb3dlZE1ldGhvZHNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhbGxvd2VkSGVhZGVyczoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkFsbG93ZWRIZWFkZXJzXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJBbGxvd2VkSGVhZGVyc1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGV4cG9zZWRIZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRXhwb3NlZEhlYWRlcnNcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkV4cG9zZWRIZWFkZXJzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbWF4QWdlSW5TZWNvbmRzOiB7XG4gICAgICAgICAgICAgICAgY29uc3RyYWludHM6IHtcbiAgICAgICAgICAgICAgICAgICAgSW5jbHVzaXZlTWluaW11bTogMCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIk1heEFnZUluU2Vjb25kc1wiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTWF4QWdlSW5TZWNvbmRzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgU3RhdGljV2Vic2l0ZSA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJTdGF0aWNXZWJzaXRlXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiU3RhdGljV2Vic2l0ZVwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVuYWJsZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJFbmFibGVkXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJFbmFibGVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGluZGV4RG9jdW1lbnQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJJbmRleERvY3VtZW50XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJJbmRleERvY3VtZW50XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JEb2N1bWVudDQwNFBhdGg6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJFcnJvckRvY3VtZW50NDA0UGF0aFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiRXJyb3JEb2N1bWVudDQwNFBhdGhcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZWZhdWx0SW5kZXhEb2N1bWVudFBhdGg6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJEZWZhdWx0SW5kZXhEb2N1bWVudFBhdGhcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkRlZmF1bHRJbmRleERvY3VtZW50UGF0aFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFN0b3JhZ2VFcnJvciA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJTdG9yYWdlRXJyb3JcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJTdG9yYWdlRXJyb3JcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBtZXNzYWdlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTWVzc2FnZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTWVzc2FnZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJDb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJDb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYXV0aGVudGljYXRpb25FcnJvckRldGFpbDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkF1dGhlbnRpY2F0aW9uRXJyb3JEZXRhaWxcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkF1dGhlbnRpY2F0aW9uRXJyb3JEZXRhaWxcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iU2VydmljZVN0YXRpc3RpY3MgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYlNlcnZpY2VTdGF0aXN0aWNzXCIsXG4gICAgeG1sTmFtZTogXCJTdG9yYWdlU2VydmljZVN0YXRzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYlNlcnZpY2VTdGF0aXN0aWNzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZ2VvUmVwbGljYXRpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJHZW9SZXBsaWNhdGlvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiR2VvUmVwbGljYXRpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJHZW9SZXBsaWNhdGlvblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgR2VvUmVwbGljYXRpb24gPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiR2VvUmVwbGljYXRpb25cIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJHZW9SZXBsaWNhdGlvblwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHN0YXR1czoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiU3RhdHVzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wibGl2ZVwiLCBcImJvb3RzdHJhcFwiLCBcInVuYXZhaWxhYmxlXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdFN5bmNPbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkxhc3RTeW5jVGltZVwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTGFzdFN5bmNUaW1lXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgTGlzdENvbnRhaW5lcnNTZWdtZW50UmVzcG9uc2UgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiTGlzdENvbnRhaW5lcnNTZWdtZW50UmVzcG9uc2VcIixcbiAgICB4bWxOYW1lOiBcIkVudW1lcmF0aW9uUmVzdWx0c1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkxpc3RDb250YWluZXJzU2VnbWVudFJlc3BvbnNlXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgc2VydmljZUVuZHBvaW50OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiU2VydmljZUVuZHBvaW50XCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJTZXJ2aWNlRW5kcG9pbnRcIixcbiAgICAgICAgICAgICAgICB4bWxJc0F0dHJpYnV0ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcmVmaXg6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJQcmVmaXhcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlByZWZpeFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1hcmtlcjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIk1hcmtlclwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTWFya2VyXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbWF4UGFnZVNpemU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJNYXhSZXN1bHRzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJNYXhSZXN1bHRzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGFpbmVySXRlbXM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJJdGVtc1wiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQ29udGFpbmVyc1wiLFxuICAgICAgICAgICAgICAgIHhtbElzV3JhcHBlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxFbGVtZW50TmFtZTogXCJDb250YWluZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU2VxdWVuY2VcIixcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lckl0ZW1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250aW51YXRpb25Ub2tlbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIk5leHRNYXJrZXJcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIk5leHRNYXJrZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJJdGVtID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lckl0ZW1cIixcbiAgICB4bWxOYW1lOiBcIkNvbnRhaW5lclwiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lckl0ZW1cIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBuYW1lOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTmFtZVwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTmFtZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlbGV0ZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJEZWxldGVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJEZWxldGVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJWZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJWZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlByb3BlcnRpZXNcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlByb3BlcnRpZXNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJQcm9wZXJ0aWVzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIk1ldGFkYXRhXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJNZXRhZGF0YVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEaWN0aW9uYXJ5XCIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB7IHR5cGU6IHsgbmFtZTogXCJTdHJpbmdcIiB9IH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJQcm9wZXJ0aWVzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lclByb3BlcnRpZXNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJQcm9wZXJ0aWVzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTGFzdC1Nb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTGFzdC1Nb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJFdGFnXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJFdGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVhc2VTdGF0dXM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJMZWFzZVN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTGVhc2VTdGF0dXNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJsb2NrZWRcIiwgXCJ1bmxvY2tlZFwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlYXNlU3RhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJMZWFzZVN0YXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJMZWFzZVN0YXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJhdmFpbGFibGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibGVhc2VkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImV4cGlyZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYnJlYWtpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYnJva2VuXCIsXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZWFzZUR1cmF0aW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTGVhc2VEdXJhdGlvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTGVhc2VEdXJhdGlvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcImluZmluaXRlXCIsIFwiZml4ZWRcIl0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwdWJsaWNBY2Nlc3M6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJQdWJsaWNBY2Nlc3NcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlB1YmxpY0FjY2Vzc1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcImNvbnRhaW5lclwiLCBcImJsb2JcIl0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBoYXNJbW11dGFiaWxpdHlQb2xpY3k6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJIYXNJbW11dGFiaWxpdHlQb2xpY3lcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkhhc0ltbXV0YWJpbGl0eVBvbGljeVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBoYXNMZWdhbEhvbGQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJIYXNMZWdhbEhvbGRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkhhc0xlZ2FsSG9sZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZWZhdWx0RW5jcnlwdGlvblNjb3BlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRGVmYXVsdEVuY3J5cHRpb25TY29wZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiRGVmYXVsdEVuY3J5cHRpb25TY29wZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByZXZlbnRFbmNyeXB0aW9uU2NvcGVPdmVycmlkZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkRlbnlFbmNyeXB0aW9uU2NvcGVPdmVycmlkZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiRGVueUVuY3J5cHRpb25TY29wZU92ZXJyaWRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlbGV0ZWRPbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkRlbGV0ZWRUaW1lXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJEZWxldGVkVGltZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlbWFpbmluZ1JldGVudGlvbkRheXM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJSZW1haW5pbmdSZXRlbnRpb25EYXlzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJSZW1haW5pbmdSZXRlbnRpb25EYXlzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNJbW11dGFibGVTdG9yYWdlV2l0aFZlcnNpb25pbmdFbmFibGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiSW1tdXRhYmxlU3RvcmFnZVdpdGhWZXJzaW9uaW5nRW5hYmxlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiSW1tdXRhYmxlU3RvcmFnZVdpdGhWZXJzaW9uaW5nRW5hYmxlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBLZXlJbmZvID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIktleUluZm9cIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJLZXlJbmZvXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgc3RhcnRzT246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJTdGFydFwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiU3RhcnRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBleHBpcmVzT246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJFeHBpcnlcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkV4cGlyeVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFVzZXJEZWxlZ2F0aW9uS2V5ID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlVzZXJEZWxlZ2F0aW9uS2V5XCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiVXNlckRlbGVnYXRpb25LZXlcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBzaWduZWRPYmplY3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNpZ25lZE9pZFwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiU2lnbmVkT2lkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2lnbmVkVGVuYW50SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJTaWduZWRUaWRcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlNpZ25lZFRpZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNpZ25lZFN0YXJ0c09uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiU2lnbmVkU3RhcnRcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlNpZ25lZFN0YXJ0XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2lnbmVkRXhwaXJlc09uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiU2lnbmVkRXhwaXJ5XCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJTaWduZWRFeHBpcnlcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzaWduZWRTZXJ2aWNlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiU2lnbmVkU2VydmljZVwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiU2lnbmVkU2VydmljZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNpZ25lZFZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJTaWduZWRWZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJTaWduZWRWZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJWYWx1ZVwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiVmFsdWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBGaWx0ZXJCbG9iU2VnbWVudCA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJGaWx0ZXJCbG9iU2VnbWVudFwiLFxuICAgIHhtbE5hbWU6IFwiRW51bWVyYXRpb25SZXN1bHRzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiRmlsdGVyQmxvYlNlZ21lbnRcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBzZXJ2aWNlRW5kcG9pbnQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJTZXJ2aWNlRW5kcG9pbnRcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlNlcnZpY2VFbmRwb2ludFwiLFxuICAgICAgICAgICAgICAgIHhtbElzQXR0cmlidXRlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHdoZXJlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiV2hlcmVcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIldoZXJlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmxvYnM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9ic1wiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQmxvYnNcIixcbiAgICAgICAgICAgICAgICB4bWxJc1dyYXBwZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sRWxlbWVudE5hbWU6IFwiQmxvYlwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTZXF1ZW5jZVwiLFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiRmlsdGVyQmxvYkl0ZW1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250aW51YXRpb25Ub2tlbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIk5leHRNYXJrZXJcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIk5leHRNYXJrZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBGaWx0ZXJCbG9iSXRlbSA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJGaWx0ZXJCbG9iSXRlbVwiLFxuICAgIHhtbE5hbWU6IFwiQmxvYlwiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkZpbHRlckJsb2JJdGVtXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgbmFtZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIk5hbWVcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIk5hbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250YWluZXJOYW1lOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyTmFtZVwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQ29udGFpbmVyTmFtZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRhZ3M6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJUYWdzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJUYWdzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiQmxvYlRhZ3NcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JUYWdzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JUYWdzXCIsXG4gICAgeG1sTmFtZTogXCJUYWdzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYlRhZ3NcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBibG9iVGFnU2V0OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYlRhZ1NldFwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiVGFnU2V0XCIsXG4gICAgICAgICAgICAgICAgeG1sSXNXcmFwcGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbEVsZW1lbnROYW1lOiBcIlRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTZXF1ZW5jZVwiLFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiQmxvYlRhZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JUYWcgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYlRhZ1wiLFxuICAgIHhtbE5hbWU6IFwiVGFnXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYlRhZ1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGtleToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIktleVwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiS2V5XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJWYWx1ZVwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiVmFsdWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBTaWduZWRJZGVudGlmaWVyID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNpZ25lZElkZW50aWZpZXJcIixcbiAgICB4bWxOYW1lOiBcIlNpZ25lZElkZW50aWZpZXJcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJTaWduZWRJZGVudGlmaWVyXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgaWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJJZFwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiSWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhY2Nlc3NQb2xpY3k6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJBY2Nlc3NQb2xpY3lcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkFjY2Vzc1BvbGljeVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIkFjY2Vzc1BvbGljeVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQWNjZXNzUG9saWN5ID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkFjY2Vzc1BvbGljeVwiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkFjY2Vzc1BvbGljeVwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHN0YXJ0c09uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiU3RhcnRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlN0YXJ0XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXhwaXJlc09uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRXhwaXJ5XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJFeHBpcnlcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwZXJtaXNzaW9uczoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlBlcm1pc3Npb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlBlcm1pc3Npb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBMaXN0QmxvYnNGbGF0U2VnbWVudFJlc3BvbnNlID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkxpc3RCbG9ic0ZsYXRTZWdtZW50UmVzcG9uc2VcIixcbiAgICB4bWxOYW1lOiBcIkVudW1lcmF0aW9uUmVzdWx0c1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkxpc3RCbG9ic0ZsYXRTZWdtZW50UmVzcG9uc2VcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBzZXJ2aWNlRW5kcG9pbnQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJTZXJ2aWNlRW5kcG9pbnRcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlNlcnZpY2VFbmRwb2ludFwiLFxuICAgICAgICAgICAgICAgIHhtbElzQXR0cmlidXRlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRhaW5lck5hbWU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJOYW1lXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJDb250YWluZXJOYW1lXCIsXG4gICAgICAgICAgICAgICAgeG1sSXNBdHRyaWJ1dGU6IHRydWUsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJlZml4OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiUHJlZml4XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJQcmVmaXhcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtYXJrZXI6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJNYXJrZXJcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIk1hcmtlclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1heFBhZ2VTaXplOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTWF4UmVzdWx0c1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTWF4UmVzdWx0c1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNlZ21lbnQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJTZWdtZW50XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJCbG9ic1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JGbGF0TGlzdFNlZ21lbnRcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRpbnVhdGlvblRva2VuOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTmV4dE1hcmtlclwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTmV4dE1hcmtlclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JGbGF0TGlzdFNlZ21lbnQgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYkZsYXRMaXN0U2VnbWVudFwiLFxuICAgIHhtbE5hbWU6IFwiQmxvYnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iRmxhdExpc3RTZWdtZW50XCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgYmxvYkl0ZW1zOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYkl0ZW1zXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJCbG9iSXRlbXNcIixcbiAgICAgICAgICAgICAgICB4bWxFbGVtZW50TmFtZTogXCJCbG9iXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlNlcXVlbmNlXCIsXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJCbG9iSXRlbUludGVybmFsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYkl0ZW1JbnRlcm5hbCA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iSXRlbUludGVybmFsXCIsXG4gICAgeG1sTmFtZTogXCJCbG9iXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYkl0ZW1JbnRlcm5hbFwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIG5hbWU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJOYW1lXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJOYW1lXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiQmxvYk5hbWVcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlbGV0ZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJEZWxldGVkXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJEZWxldGVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNuYXBzaG90OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiU25hcHNob3RcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlNuYXBzaG90XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbklkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiVmVyc2lvbklkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJWZXJzaW9uSWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc0N1cnJlbnRWZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiSXNDdXJyZW50VmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiSXNDdXJyZW50VmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiUHJvcGVydGllc1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiUHJvcGVydGllc1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JQcm9wZXJ0aWVzSW50ZXJuYWxcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTWV0YWRhdGFcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIk1ldGFkYXRhXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRpY3Rpb25hcnlcIixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHsgdHlwZTogeyBuYW1lOiBcIlN0cmluZ1wiIH0gfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JUYWdzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYlRhZ3NcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlRhZ3NcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJCbG9iVGFnc1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb2JqZWN0UmVwbGljYXRpb25NZXRhZGF0YToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIk9iamVjdFJlcGxpY2F0aW9uTWV0YWRhdGFcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIk9yTWV0YWRhdGFcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGljdGlvbmFyeVwiLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogeyB0eXBlOiB7IG5hbWU6IFwiU3RyaW5nXCIgfSB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaGFzVmVyc2lvbnNPbmx5OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiSGFzVmVyc2lvbnNPbmx5XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJIYXNWZXJzaW9uc09ubHlcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYk5hbWUgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYk5hbWVcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iTmFtZVwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVuY29kZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJFbmNvZGVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJFbmNvZGVkXCIsXG4gICAgICAgICAgICAgICAgeG1sSXNBdHRyaWJ1dGU6IHRydWUsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50XCIsXG4gICAgICAgICAgICAgICAgeG1sSXNNc1RleHQ6IHRydWUsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlByb3BlcnRpZXNJbnRlcm5hbCA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iUHJvcGVydGllc0ludGVybmFsXCIsXG4gICAgeG1sTmFtZTogXCJQcm9wZXJ0aWVzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYlByb3BlcnRpZXNJbnRlcm5hbFwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNyZWF0ZWRPbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNyZWF0aW9uLVRpbWVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkNyZWF0aW9uLVRpbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJMYXN0LU1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJMYXN0LU1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkV0YWdcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50TGVuZ3RoOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGVudC1MZW5ndGhcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkNvbnRlbnQtTGVuZ3RoXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudFR5cGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJDb250ZW50LVR5cGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkNvbnRlbnQtVHlwZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnRFbmNvZGluZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRlbnQtRW5jb2RpbmdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkNvbnRlbnQtRW5jb2RpbmdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50TGFuZ3VhZ2U6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJDb250ZW50LUxhbmd1YWdlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJDb250ZW50LUxhbmd1YWdlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudE1ENToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRlbnQtTUQ1XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJDb250ZW50LU1ENVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnREaXNwb3NpdGlvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRlbnQtRGlzcG9zaXRpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkNvbnRlbnQtRGlzcG9zaXRpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjYWNoZUNvbnRyb2w6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJDYWNoZS1Db250cm9sXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJDYWNoZS1Db250cm9sXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmxvYlNlcXVlbmNlTnVtYmVyOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLXNlcXVlbmNlLW51bWJlclwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLXNlcXVlbmNlLW51bWJlclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JUeXBlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYlR5cGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkJsb2JUeXBlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wiQmxvY2tCbG9iXCIsIFwiUGFnZUJsb2JcIiwgXCJBcHBlbmRCbG9iXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVhc2VTdGF0dXM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJMZWFzZVN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTGVhc2VTdGF0dXNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJsb2NrZWRcIiwgXCJ1bmxvY2tlZFwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlYXNlU3RhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJMZWFzZVN0YXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJMZWFzZVN0YXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJhdmFpbGFibGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibGVhc2VkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImV4cGlyZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYnJlYWtpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYnJva2VuXCIsXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZWFzZUR1cmF0aW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTGVhc2VEdXJhdGlvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTGVhc2VEdXJhdGlvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcImluZmluaXRlXCIsIFwiZml4ZWRcIl0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3B5SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJDb3B5SWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkNvcHlJZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvcHlTdGF0dXM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJDb3B5U3RhdHVzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJDb3B5U3RhdHVzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wicGVuZGluZ1wiLCBcInN1Y2Nlc3NcIiwgXCJhYm9ydGVkXCIsIFwiZmFpbGVkXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29weVNvdXJjZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvcHlTb3VyY2VcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkNvcHlTb3VyY2VcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3B5UHJvZ3Jlc3M6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJDb3B5UHJvZ3Jlc3NcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkNvcHlQcm9ncmVzc1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvcHlDb21wbGV0ZWRPbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvcHlDb21wbGV0aW9uVGltZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQ29weUNvbXBsZXRpb25UaW1lXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29weVN0YXR1c0Rlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ29weVN0YXR1c0Rlc2NyaXB0aW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJDb3B5U3RhdHVzRGVzY3JpcHRpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXJ2ZXJFbmNyeXB0ZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJTZXJ2ZXJFbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlNlcnZlckVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpbmNyZW1lbnRhbENvcHk6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJJbmNyZW1lbnRhbENvcHlcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkluY3JlbWVudGFsQ29weVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZXN0aW5hdGlvblNuYXBzaG90OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRGVzdGluYXRpb25TbmFwc2hvdFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiRGVzdGluYXRpb25TbmFwc2hvdFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlbGV0ZWRPbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkRlbGV0ZWRUaW1lXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJEZWxldGVkVGltZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlbWFpbmluZ1JldGVudGlvbkRheXM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJSZW1haW5pbmdSZXRlbnRpb25EYXlzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJSZW1haW5pbmdSZXRlbnRpb25EYXlzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWNjZXNzVGllcjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkFjY2Vzc1RpZXJcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkFjY2Vzc1RpZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlA0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlA2XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlAxMFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJQMTVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiUDIwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlAzMFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJQNDBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiUDUwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlA2MFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJQNzBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiUDgwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkhvdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJDb29sXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkFyY2hpdmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiQ29sZFwiLFxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWNjZXNzVGllckluZmVycmVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQWNjZXNzVGllckluZmVycmVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJBY2Nlc3NUaWVySW5mZXJyZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYXJjaGl2ZVN0YXR1czoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkFyY2hpdmVTdGF0dXNcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkFyY2hpdmVTdGF0dXNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICBcInJlaHlkcmF0ZS1wZW5kaW5nLXRvLWhvdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJyZWh5ZHJhdGUtcGVuZGluZy10by1jb29sXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInJlaHlkcmF0ZS1wZW5kaW5nLXRvLWNvbGRcIixcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGN1c3RvbWVyUHJvdmlkZWRLZXlTaGEyNTY6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJDdXN0b21lclByb3ZpZGVkS2V5U2hhMjU2XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJDdXN0b21lclByb3ZpZGVkS2V5U2hhMjU2XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRW5jcnlwdGlvblNjb3BlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJFbmNyeXB0aW9uU2NvcGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhY2Nlc3NUaWVyQ2hhbmdlZE9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQWNjZXNzVGllckNoYW5nZVRpbWVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkFjY2Vzc1RpZXJDaGFuZ2VUaW1lXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGFnQ291bnQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJUYWdDb3VudFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiVGFnQ291bnRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBleHBpcmVzT246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJFeHBpcnktVGltZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiRXhwaXJ5LVRpbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc1NlYWxlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNlYWxlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiU2VhbGVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlaHlkcmF0ZVByaW9yaXR5OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiUmVoeWRyYXRlUHJpb3JpdHlcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlJlaHlkcmF0ZVByaW9yaXR5XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wiSGlnaFwiLCBcIlN0YW5kYXJkXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdEFjY2Vzc2VkT246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJMYXN0QWNjZXNzVGltZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTGFzdEFjY2Vzc1RpbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpbW11dGFiaWxpdHlQb2xpY3lFeHBpcmVzT246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJJbW11dGFiaWxpdHlQb2xpY3lVbnRpbERhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkltbXV0YWJpbGl0eVBvbGljeVVudGlsRGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGltbXV0YWJpbGl0eVBvbGljeU1vZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJJbW11dGFiaWxpdHlQb2xpY3lNb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJJbW11dGFiaWxpdHlQb2xpY3lNb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wiTXV0YWJsZVwiLCBcIlVubG9ja2VkXCIsIFwiTG9ja2VkXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVnYWxIb2xkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTGVnYWxIb2xkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJMZWdhbEhvbGRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgTGlzdEJsb2JzSGllcmFyY2h5U2VnbWVudFJlc3BvbnNlID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkxpc3RCbG9ic0hpZXJhcmNoeVNlZ21lbnRSZXNwb25zZVwiLFxuICAgIHhtbE5hbWU6IFwiRW51bWVyYXRpb25SZXN1bHRzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiTGlzdEJsb2JzSGllcmFyY2h5U2VnbWVudFJlc3BvbnNlXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgc2VydmljZUVuZHBvaW50OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiU2VydmljZUVuZHBvaW50XCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJTZXJ2aWNlRW5kcG9pbnRcIixcbiAgICAgICAgICAgICAgICB4bWxJc0F0dHJpYnV0ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250YWluZXJOYW1lOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyTmFtZVwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQ29udGFpbmVyTmFtZVwiLFxuICAgICAgICAgICAgICAgIHhtbElzQXR0cmlidXRlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByZWZpeDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlByZWZpeFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiUHJlZml4XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbWFya2VyOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTWFya2VyXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJNYXJrZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtYXhQYWdlU2l6ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIk1heFJlc3VsdHNcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIk1heFJlc3VsdHNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZWxpbWl0ZXI6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJEZWxpbWl0ZXJcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkRlbGltaXRlclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNlZ21lbnQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJTZWdtZW50XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJCbG9ic1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JIaWVyYXJjaHlMaXN0U2VnbWVudFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGludWF0aW9uVG9rZW46IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJOZXh0TWFya2VyXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJOZXh0TWFya2VyXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYkhpZXJhcmNoeUxpc3RTZWdtZW50ID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JIaWVyYXJjaHlMaXN0U2VnbWVudFwiLFxuICAgIHhtbE5hbWU6IFwiQmxvYnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iSGllcmFyY2h5TGlzdFNlZ21lbnRcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBibG9iUHJlZml4ZXM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iUHJlZml4ZXNcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkJsb2JQcmVmaXhlc1wiLFxuICAgICAgICAgICAgICAgIHhtbEVsZW1lbnROYW1lOiBcIkJsb2JQcmVmaXhcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU2VxdWVuY2VcIixcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JQcmVmaXhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBibG9iSXRlbXM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iSXRlbXNcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkJsb2JJdGVtc1wiLFxuICAgICAgICAgICAgICAgIHhtbEVsZW1lbnROYW1lOiBcIkJsb2JcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU2VxdWVuY2VcIixcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JJdGVtSW50ZXJuYWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iUHJlZml4ID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JQcmVmaXhcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iUHJlZml4XCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgbmFtZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIk5hbWVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIk5hbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJCbG9iTmFtZVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvY2tMb29rdXBMaXN0ID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2NrTG9va3VwTGlzdFwiLFxuICAgIHhtbE5hbWU6IFwiQmxvY2tMaXN0XCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvY2tMb29rdXBMaXN0XCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgY29tbWl0dGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ29tbWl0dGVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJDb21taXR0ZWRcIixcbiAgICAgICAgICAgICAgICB4bWxFbGVtZW50TmFtZTogXCJDb21taXR0ZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU2VxdWVuY2VcIixcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdW5jb21taXR0ZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJVbmNvbW1pdHRlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiVW5jb21taXR0ZWRcIixcbiAgICAgICAgICAgICAgICB4bWxFbGVtZW50TmFtZTogXCJVbmNvbW1pdHRlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTZXF1ZW5jZVwiLFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXRlc3Q6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJMYXRlc3RcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkxhdGVzdFwiLFxuICAgICAgICAgICAgICAgIHhtbEVsZW1lbnROYW1lOiBcIkxhdGVzdFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTZXF1ZW5jZVwiLFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9ja0xpc3QgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvY2tMaXN0XCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvY2tMaXN0XCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgY29tbWl0dGVkQmxvY2tzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ29tbWl0dGVkQmxvY2tzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJDb21taXR0ZWRCbG9ja3NcIixcbiAgICAgICAgICAgICAgICB4bWxJc1dyYXBwZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sRWxlbWVudE5hbWU6IFwiQmxvY2tcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU2VxdWVuY2VcIixcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2NrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdW5jb21taXR0ZWRCbG9ja3M6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJVbmNvbW1pdHRlZEJsb2Nrc1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiVW5jb21taXR0ZWRCbG9ja3NcIixcbiAgICAgICAgICAgICAgICB4bWxJc1dyYXBwZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sRWxlbWVudE5hbWU6IFwiQmxvY2tcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU2VxdWVuY2VcIixcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2NrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvY2sgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvY2tcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9ja1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIG5hbWU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJOYW1lXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJOYW1lXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2l6ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNpemVcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlNpemVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBQYWdlTGlzdCA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJQYWdlTGlzdFwiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlBhZ2VMaXN0XCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgcGFnZVJhbmdlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiUGFnZVJhbmdlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJQYWdlUmFuZ2VcIixcbiAgICAgICAgICAgICAgICB4bWxFbGVtZW50TmFtZTogXCJQYWdlUmFuZ2VcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU2VxdWVuY2VcIixcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIlBhZ2VSYW5nZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsZWFyUmFuZ2U6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJDbGVhclJhbmdlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJDbGVhclJhbmdlXCIsXG4gICAgICAgICAgICAgICAgeG1sRWxlbWVudE5hbWU6IFwiQ2xlYXJSYW5nZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTZXF1ZW5jZVwiLFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiQ2xlYXJSYW5nZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRpbnVhdGlvblRva2VuOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTmV4dE1hcmtlclwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTmV4dE1hcmtlclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFBhZ2VSYW5nZSA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJQYWdlUmFuZ2VcIixcbiAgICB4bWxOYW1lOiBcIlBhZ2VSYW5nZVwiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlBhZ2VSYW5nZVwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHN0YXJ0OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiU3RhcnRcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlN0YXJ0XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5kOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRW5kXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJFbmRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDbGVhclJhbmdlID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNsZWFyUmFuZ2VcIixcbiAgICB4bWxOYW1lOiBcIkNsZWFyUmFuZ2VcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDbGVhclJhbmdlXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgc3RhcnQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJTdGFydFwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiU3RhcnRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJFbmRcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkVuZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFF1ZXJ5UmVxdWVzdCA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJRdWVyeVJlcXVlc3RcIixcbiAgICB4bWxOYW1lOiBcIlF1ZXJ5UmVxdWVzdFwiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlF1ZXJ5UmVxdWVzdFwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHF1ZXJ5VHlwZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlF1ZXJ5VHlwZVwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiUXVlcnlUeXBlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXhwcmVzc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkV4cHJlc3Npb25cIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkV4cHJlc3Npb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpbnB1dFNlcmlhbGl6YXRpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJJbnB1dFNlcmlhbGl6YXRpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIklucHV0U2VyaWFsaXphdGlvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIlF1ZXJ5U2VyaWFsaXphdGlvblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb3V0cHV0U2VyaWFsaXphdGlvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIk91dHB1dFNlcmlhbGl6YXRpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIk91dHB1dFNlcmlhbGl6YXRpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJRdWVyeVNlcmlhbGl6YXRpb25cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFF1ZXJ5U2VyaWFsaXphdGlvbiA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJRdWVyeVNlcmlhbGl6YXRpb25cIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJRdWVyeVNlcmlhbGl6YXRpb25cIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBmb3JtYXQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJGb3JtYXRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkZvcm1hdFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIlF1ZXJ5Rm9ybWF0XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBRdWVyeUZvcm1hdCA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJRdWVyeUZvcm1hdFwiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlF1ZXJ5Rm9ybWF0XCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlR5cGVcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlR5cGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJkZWxpbWl0ZWRcIiwgXCJqc29uXCIsIFwiYXJyb3dcIiwgXCJwYXJxdWV0XCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVsaW1pdGVkVGV4dENvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJEZWxpbWl0ZWRUZXh0Q29uZmlndXJhdGlvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiRGVsaW1pdGVkVGV4dENvbmZpZ3VyYXRpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJEZWxpbWl0ZWRUZXh0Q29uZmlndXJhdGlvblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAganNvblRleHRDb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiSnNvblRleHRDb25maWd1cmF0aW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJKc29uVGV4dENvbmZpZ3VyYXRpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJKc29uVGV4dENvbmZpZ3VyYXRpb25cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFycm93Q29uZmlndXJhdGlvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkFycm93Q29uZmlndXJhdGlvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQXJyb3dDb25maWd1cmF0aW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiQXJyb3dDb25maWd1cmF0aW9uXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwYXJxdWV0VGV4dENvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJQYXJxdWV0VGV4dENvbmZpZ3VyYXRpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlBhcnF1ZXRUZXh0Q29uZmlndXJhdGlvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEaWN0aW9uYXJ5XCIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB7IHR5cGU6IHsgbmFtZTogXCJhbnlcIiB9IH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBEZWxpbWl0ZWRUZXh0Q29uZmlndXJhdGlvbiA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJEZWxpbWl0ZWRUZXh0Q29uZmlndXJhdGlvblwiLFxuICAgIHhtbE5hbWU6IFwiRGVsaW1pdGVkVGV4dENvbmZpZ3VyYXRpb25cIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJEZWxpbWl0ZWRUZXh0Q29uZmlndXJhdGlvblwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNvbHVtblNlcGFyYXRvcjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbHVtblNlcGFyYXRvclwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQ29sdW1uU2VwYXJhdG9yXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZmllbGRRdW90ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkZpZWxkUXVvdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkZpZWxkUXVvdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZWNvcmRTZXBhcmF0b3I6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJSZWNvcmRTZXBhcmF0b3JcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlJlY29yZFNlcGFyYXRvclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVzY2FwZUNoYXI6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJFc2NhcGVDaGFyXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJFc2NhcGVDaGFyXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaGVhZGVyc1ByZXNlbnQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJIZWFkZXJzUHJlc2VudFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiSGFzSGVhZGVyc1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBKc29uVGV4dENvbmZpZ3VyYXRpb24gPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiSnNvblRleHRDb25maWd1cmF0aW9uXCIsXG4gICAgeG1sTmFtZTogXCJKc29uVGV4dENvbmZpZ3VyYXRpb25cIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJKc29uVGV4dENvbmZpZ3VyYXRpb25cIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICByZWNvcmRTZXBhcmF0b3I6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJSZWNvcmRTZXBhcmF0b3JcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlJlY29yZFNlcGFyYXRvclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEFycm93Q29uZmlndXJhdGlvbiA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJBcnJvd0NvbmZpZ3VyYXRpb25cIixcbiAgICB4bWxOYW1lOiBcIkFycm93Q29uZmlndXJhdGlvblwiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkFycm93Q29uZmlndXJhdGlvblwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHNjaGVtYToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNjaGVtYVwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiU2NoZW1hXCIsXG4gICAgICAgICAgICAgICAgeG1sSXNXcmFwcGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbEVsZW1lbnROYW1lOiBcIkZpZWxkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlNlcXVlbmNlXCIsXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJBcnJvd0ZpZWxkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQXJyb3dGaWVsZCA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJBcnJvd0ZpZWxkXCIsXG4gICAgeG1sTmFtZTogXCJGaWVsZFwiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkFycm93RmllbGRcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiVHlwZVwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiVHlwZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5hbWU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJOYW1lXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJOYW1lXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJlY2lzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiUHJlY2lzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJQcmVjaXNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzY2FsZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNjYWxlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJTY2FsZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFNlcnZpY2VTZXRQcm9wZXJ0aWVzSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJTZXJ2aWNlX3NldFByb3BlcnRpZXNIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiU2VydmljZVNldFByb3BlcnRpZXNIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBTZXJ2aWNlU2V0UHJvcGVydGllc0V4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiU2VydmljZV9zZXRQcm9wZXJ0aWVzRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlNlcnZpY2VTZXRQcm9wZXJ0aWVzRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgU2VydmljZUdldFByb3BlcnRpZXNIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNlcnZpY2VfZ2V0UHJvcGVydGllc0hlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJTZXJ2aWNlR2V0UHJvcGVydGllc0hlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFNlcnZpY2VHZXRQcm9wZXJ0aWVzRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJTZXJ2aWNlX2dldFByb3BlcnRpZXNFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiU2VydmljZUdldFByb3BlcnRpZXNFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBTZXJ2aWNlR2V0U3RhdGlzdGljc0hlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiU2VydmljZV9nZXRTdGF0aXN0aWNzSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlNlcnZpY2VHZXRTdGF0aXN0aWNzSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBTZXJ2aWNlR2V0U3RhdGlzdGljc0V4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiU2VydmljZV9nZXRTdGF0aXN0aWNzRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlNlcnZpY2VHZXRTdGF0aXN0aWNzRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgU2VydmljZUxpc3RDb250YWluZXJzU2VnbWVudEhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiU2VydmljZV9saXN0Q29udGFpbmVyc1NlZ21lbnRIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiU2VydmljZUxpc3RDb250YWluZXJzU2VnbWVudEhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFNlcnZpY2VMaXN0Q29udGFpbmVyc1NlZ21lbnRFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNlcnZpY2VfbGlzdENvbnRhaW5lcnNTZWdtZW50RXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlNlcnZpY2VMaXN0Q29udGFpbmVyc1NlZ21lbnRFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBTZXJ2aWNlR2V0VXNlckRlbGVnYXRpb25LZXlIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNlcnZpY2VfZ2V0VXNlckRlbGVnYXRpb25LZXlIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiU2VydmljZUdldFVzZXJEZWxlZ2F0aW9uS2V5SGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBTZXJ2aWNlR2V0VXNlckRlbGVnYXRpb25LZXlFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNlcnZpY2VfZ2V0VXNlckRlbGVnYXRpb25LZXlFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiU2VydmljZUdldFVzZXJEZWxlZ2F0aW9uS2V5RXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgU2VydmljZUdldEFjY291bnRJbmZvSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJTZXJ2aWNlX2dldEFjY291bnRJbmZvSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlNlcnZpY2VHZXRBY2NvdW50SW5mb0hlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNrdU5hbWU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXNrdS1uYW1lXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXNrdS1uYW1lXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJTdGFuZGFyZF9MUlNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiU3RhbmRhcmRfR1JTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlN0YW5kYXJkX1JBR1JTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlN0YW5kYXJkX1pSU1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJQcmVtaXVtX0xSU1wiLFxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWNjb3VudEtpbmQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWFjY291bnQta2luZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1hY2NvdW50LWtpbmRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlN0b3JhZ2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiQmxvYlN0b3JhZ2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiU3RvcmFnZVYyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkZpbGVTdG9yYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkJsb2NrQmxvYlN0b3JhZ2VcIixcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzSGllcmFyY2hpY2FsTmFtZXNwYWNlRW5hYmxlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtaXMtaG5zLWVuYWJsZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtaXMtaG5zLWVuYWJsZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBTZXJ2aWNlR2V0QWNjb3VudEluZm9FeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNlcnZpY2VfZ2V0QWNjb3VudEluZm9FeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiU2VydmljZUdldEFjY291bnRJbmZvRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgU2VydmljZVN1Ym1pdEJhdGNoSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJTZXJ2aWNlX3N1Ym1pdEJhdGNoSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlNlcnZpY2VTdWJtaXRCYXRjaEhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBjb250ZW50VHlwZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtdHlwZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC10eXBlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBTZXJ2aWNlU3VibWl0QmF0Y2hFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNlcnZpY2Vfc3VibWl0QmF0Y2hFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiU2VydmljZVN1Ym1pdEJhdGNoRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgU2VydmljZUZpbHRlckJsb2JzSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJTZXJ2aWNlX2ZpbHRlckJsb2JzSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlNlcnZpY2VGaWx0ZXJCbG9ic0hlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgU2VydmljZUZpbHRlckJsb2JzRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJTZXJ2aWNlX2ZpbHRlckJsb2JzRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlNlcnZpY2VGaWx0ZXJCbG9ic0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lckNyZWF0ZUhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX2NyZWF0ZUhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJDcmVhdGVIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lckNyZWF0ZUV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX2NyZWF0ZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJDcmVhdGVFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJHZXRQcm9wZXJ0aWVzSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfZ2V0UHJvcGVydGllc0hlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJHZXRQcm9wZXJ0aWVzSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1tZXRhXCIsXG4gICAgICAgICAgICAgICAgaGVhZGVyQ29sbGVjdGlvblByZWZpeDogXCJ4LW1zLW1ldGEtXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLW1ldGFcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGljdGlvbmFyeVwiLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogeyB0eXBlOiB7IG5hbWU6IFwiU3RyaW5nXCIgfSB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVhc2VEdXJhdGlvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVhc2UtZHVyYXRpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGVhc2UtZHVyYXRpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJpbmZpbml0ZVwiLCBcImZpeGVkXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVhc2VTdGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVhc2Utc3RhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGVhc2Utc3RhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICBcImF2YWlsYWJsZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJsZWFzZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZXhwaXJlZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJicmVha2luZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJicm9rZW5cIixcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlYXNlU3RhdHVzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWFzZS1zdGF0dXNcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGVhc2Utc3RhdHVzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wibG9ja2VkXCIsIFwidW5sb2NrZWRcIl0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JQdWJsaWNBY2Nlc3M6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2ItcHVibGljLWFjY2Vzc1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLXB1YmxpYy1hY2Nlc3NcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJjb250YWluZXJcIiwgXCJibG9iXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaGFzSW1tdXRhYmlsaXR5UG9saWN5OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1oYXMtaW1tdXRhYmlsaXR5LXBvbGljeVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1oYXMtaW1tdXRhYmlsaXR5LXBvbGljeVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBoYXNMZWdhbEhvbGQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWhhcy1sZWdhbC1ob2xkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWhhcy1sZWdhbC1ob2xkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlZmF1bHRFbmNyeXB0aW9uU2NvcGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWRlZmF1bHQtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1kZWZhdWx0LWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZW55RW5jcnlwdGlvblNjb3BlT3ZlcnJpZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWRlbnktZW5jcnlwdGlvbi1zY29wZS1vdmVycmlkZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1kZW55LWVuY3J5cHRpb24tc2NvcGUtb3ZlcnJpZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNJbW11dGFibGVTdG9yYWdlV2l0aFZlcnNpb25pbmdFbmFibGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1pbW11dGFibGUtc3RvcmFnZS13aXRoLXZlcnNpb25pbmctZW5hYmxlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1pbW11dGFibGUtc3RvcmFnZS13aXRoLXZlcnNpb25pbmctZW5hYmxlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lckdldFByb3BlcnRpZXNFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9nZXRQcm9wZXJ0aWVzRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lckdldFByb3BlcnRpZXNFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJEZWxldGVIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9kZWxldGVIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyRGVsZXRlSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJEZWxldGVFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9kZWxldGVFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyRGVsZXRlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyU2V0TWV0YWRhdGFIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9zZXRNZXRhZGF0YUhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJTZXRNZXRhZGF0YUhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyU2V0TWV0YWRhdGFFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9zZXRNZXRhZGF0YUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJTZXRNZXRhZGF0YUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lckdldEFjY2Vzc1BvbGljeUhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX2dldEFjY2Vzc1BvbGljeUhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJHZXRBY2Nlc3NQb2xpY3lIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgYmxvYlB1YmxpY0FjY2Vzczoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1wdWJsaWMtYWNjZXNzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2ItcHVibGljLWFjY2Vzc1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcImNvbnRhaW5lclwiLCBcImJsb2JcIl0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyR2V0QWNjZXNzUG9saWN5RXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfZ2V0QWNjZXNzUG9saWN5RXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lckdldEFjY2Vzc1BvbGljeUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lclNldEFjY2Vzc1BvbGljeUhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX3NldEFjY2Vzc1BvbGljeUhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJTZXRBY2Nlc3NQb2xpY3lIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lclNldEFjY2Vzc1BvbGljeUV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX3NldEFjY2Vzc1BvbGljeUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJTZXRBY2Nlc3NQb2xpY3lFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJSZXN0b3JlSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfcmVzdG9yZUhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJSZXN0b3JlSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJSZXN0b3JlRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfcmVzdG9yZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJSZXN0b3JlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyUmVuYW1lSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfcmVuYW1lSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lclJlbmFtZUhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyUmVuYW1lRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfcmVuYW1lRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lclJlbmFtZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lclN1Ym1pdEJhdGNoSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfc3VibWl0QmF0Y2hIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyU3VibWl0QmF0Y2hIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgY29udGVudFR5cGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LXR5cGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtdHlwZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyU3VibWl0QmF0Y2hFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9zdWJtaXRCYXRjaEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJTdWJtaXRCYXRjaEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lckZpbHRlckJsb2JzSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfZmlsdGVyQmxvYnNIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyRmlsdGVyQmxvYnNIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJGaWx0ZXJCbG9ic0V4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX2ZpbHRlckJsb2JzRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lckZpbHRlckJsb2JzRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyQWNxdWlyZUxlYXNlSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfYWNxdWlyZUxlYXNlSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lckFjcXVpcmVMZWFzZUhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZWFzZUlkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWFzZS1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1sZWFzZS1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyQWNxdWlyZUxlYXNlRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfYWNxdWlyZUxlYXNlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lckFjcXVpcmVMZWFzZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lclJlbGVhc2VMZWFzZUhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX3JlbGVhc2VMZWFzZUhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJSZWxlYXNlTGVhc2VIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJSZWxlYXNlTGVhc2VFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9yZWxlYXNlTGVhc2VFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyUmVsZWFzZUxlYXNlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyUmVuZXdMZWFzZUhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX3JlbmV3TGVhc2VIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyUmVuZXdMZWFzZUhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZWFzZUlkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWFzZS1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1sZWFzZS1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyUmVuZXdMZWFzZUV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX3JlbmV3TGVhc2VFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyUmVuZXdMZWFzZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lckJyZWFrTGVhc2VIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9icmVha0xlYXNlSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lckJyZWFrTGVhc2VIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVhc2VUaW1lOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWFzZS10aW1lXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWxlYXNlLXRpbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lckJyZWFrTGVhc2VFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9icmVha0xlYXNlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lckJyZWFrTGVhc2VFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJDaGFuZ2VMZWFzZUhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX2NoYW5nZUxlYXNlSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lckNoYW5nZUxlYXNlSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlYXNlSWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxlYXNlLWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWxlYXNlLWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJDaGFuZ2VMZWFzZUV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX2NoYW5nZUxlYXNlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lckNoYW5nZUxlYXNlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyTGlzdEJsb2JGbGF0U2VnbWVudEhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX2xpc3RCbG9iRmxhdFNlZ21lbnRIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyTGlzdEJsb2JGbGF0U2VnbWVudEhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBjb250ZW50VHlwZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtdHlwZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC10eXBlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lckxpc3RCbG9iRmxhdFNlZ21lbnRFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9saXN0QmxvYkZsYXRTZWdtZW50RXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lckxpc3RCbG9iRmxhdFNlZ21lbnRFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJMaXN0QmxvYkhpZXJhcmNoeVNlZ21lbnRIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9saXN0QmxvYkhpZXJhcmNoeVNlZ21lbnRIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyTGlzdEJsb2JIaWVyYXJjaHlTZWdtZW50SGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNvbnRlbnRUeXBlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC10eXBlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LXR5cGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyTGlzdEJsb2JIaWVyYXJjaHlTZWdtZW50RXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfbGlzdEJsb2JIaWVyYXJjaHlTZWdtZW50RXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lckxpc3RCbG9iSGllcmFyY2h5U2VnbWVudEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lckdldEFjY291bnRJbmZvSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfZ2V0QWNjb3VudEluZm9IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyR2V0QWNjb3VudEluZm9IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBza3VOYW1lOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1za3UtbmFtZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1za3UtbmFtZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiU3RhbmRhcmRfTFJTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlN0YW5kYXJkX0dSU1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJTdGFuZGFyZF9SQUdSU1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJTdGFuZGFyZF9aUlNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiUHJlbWl1bV9MUlNcIixcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFjY291bnRLaW5kOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1hY2NvdW50LWtpbmRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYWNjb3VudC1raW5kXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJTdG9yYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkJsb2JTdG9yYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlN0b3JhZ2VWMlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJGaWxlU3RvcmFnZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJCbG9ja0Jsb2JTdG9yYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc0hpZXJhcmNoaWNhbE5hbWVzcGFjZUVuYWJsZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWlzLWhucy1lbmFibGVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWlzLWhucy1lbmFibGVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lckdldEFjY291bnRJbmZvRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfZ2V0QWNjb3VudEluZm9FeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyR2V0QWNjb3VudEluZm9FeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iRG93bmxvYWRIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JfZG93bmxvYWRIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYkRvd25sb2FkSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjcmVhdGVkT246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNyZWF0aW9uLXRpbWVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY3JlYXRpb24tdGltZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1tZXRhXCIsXG4gICAgICAgICAgICAgICAgaGVhZGVyQ29sbGVjdGlvblByZWZpeDogXCJ4LW1zLW1ldGEtXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLW1ldGFcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGljdGlvbmFyeVwiLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogeyB0eXBlOiB7IG5hbWU6IFwiU3RyaW5nXCIgfSB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb2JqZWN0UmVwbGljYXRpb25Qb2xpY3lJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtb3ItcG9saWN5LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLW9yLXBvbGljeS1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9iamVjdFJlcGxpY2F0aW9uUnVsZXM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLW9yXCIsXG4gICAgICAgICAgICAgICAgaGVhZGVyQ29sbGVjdGlvblByZWZpeDogXCJ4LW1zLW9yLVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1vclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEaWN0aW9uYXJ5XCIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB7IHR5cGU6IHsgbmFtZTogXCJTdHJpbmdcIiB9IH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50TGVuZ3RoOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC1sZW5ndGhcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtbGVuZ3RoXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudFR5cGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LXR5cGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtdHlwZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnRSYW5nZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtcmFuZ2VcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtcmFuZ2VcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnRNRDU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50RW5jb2Rpbmc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LWVuY29kaW5nXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LWVuY29kaW5nXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2FjaGVDb250cm9sOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY2FjaGUtY29udHJvbFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY2FjaGUtY29udHJvbFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnREaXNwb3NpdGlvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtZGlzcG9zaXRpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtZGlzcG9zaXRpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50TGFuZ3VhZ2U6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LWxhbmd1YWdlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LWxhbmd1YWdlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmxvYlNlcXVlbmNlTnVtYmVyOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLXNlcXVlbmNlLW51bWJlclwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLXNlcXVlbmNlLW51bWJlclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JUeXBlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLXR5cGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi10eXBlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wiQmxvY2tCbG9iXCIsIFwiUGFnZUJsb2JcIiwgXCJBcHBlbmRCbG9iXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29weUNvbXBsZXRlZE9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LWNvbXBsZXRpb24tdGltZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LWNvbXBsZXRpb24tdGltZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvcHlTdGF0dXNEZXNjcmlwdGlvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1zdGF0dXMtZGVzY3JpcHRpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29weS1zdGF0dXMtZGVzY3JpcHRpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3B5SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvcHktaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29weS1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvcHlQcm9ncmVzczoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1wcm9ncmVzc1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LXByb2dyZXNzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29weVNvdXJjZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1zb3VyY2VcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29weS1zb3VyY2VcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3B5U3RhdHVzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LXN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LXN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcInBlbmRpbmdcIiwgXCJzdWNjZXNzXCIsIFwiYWJvcnRlZFwiLCBcImZhaWxlZFwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlYXNlRHVyYXRpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxlYXNlLWR1cmF0aW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWxlYXNlLWR1cmF0aW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wiaW5maW5pdGVcIiwgXCJmaXhlZFwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlYXNlU3RhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxlYXNlLXN0YXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWxlYXNlLXN0YXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJhdmFpbGFibGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibGVhc2VkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImV4cGlyZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYnJlYWtpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYnJva2VuXCIsXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZWFzZVN0YXR1czoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVhc2Utc3RhdHVzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWxlYXNlLXN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcImxvY2tlZFwiLCBcInVubG9ja2VkXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbklkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uLWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb24taWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc0N1cnJlbnRWZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1pcy1jdXJyZW50LXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtaXMtY3VycmVudC12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFjY2VwdFJhbmdlczoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImFjY2VwdC1yYW5nZXNcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImFjY2VwdC1yYW5nZXNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JDb21taXR0ZWRCbG9ja0NvdW50OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLWNvbW1pdHRlZC1ibG9jay1jb3VudFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLWNvbW1pdHRlZC1ibG9jay1jb3VudFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzU2VydmVyRW5jcnlwdGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1Njoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1rZXktc2hhMjU2XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25TY29wZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmxvYkNvbnRlbnRNRDU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2ItY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1jb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRhZ0NvdW50OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy10YWctY291bnRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdGFnLWNvdW50XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNTZWFsZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2Itc2VhbGVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2Itc2VhbGVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RBY2Nlc3NlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGFzdC1hY2Nlc3MtdGltZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1sYXN0LWFjY2Vzcy10aW1lXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5RXhwaXJlc09uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1pbW11dGFiaWxpdHktcG9saWN5LXVudGlsLWRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtaW1tdXRhYmlsaXR5LXBvbGljeS11bnRpbC1kYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5TW9kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtaW1tdXRhYmlsaXR5LXBvbGljeS1tb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWltbXV0YWJpbGl0eS1wb2xpY3ktbW9kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcIk11dGFibGVcIiwgXCJVbmxvY2tlZFwiLCBcIkxvY2tlZFwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlZ2FsSG9sZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVnYWwtaG9sZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1sZWdhbC1ob2xkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudENyYzY0OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb250ZW50LWNyYzY0XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvbnRlbnQtY3JjNjRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iRG93bmxvYWRFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JfZG93bmxvYWRFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYkRvd25sb2FkRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYkdldFByb3BlcnRpZXNIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JfZ2V0UHJvcGVydGllc0hlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iR2V0UHJvcGVydGllc0hlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY3JlYXRlZE9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jcmVhdGlvbi10aW1lXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNyZWF0aW9uLXRpbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbWV0YVwiLFxuICAgICAgICAgICAgICAgIGhlYWRlckNvbGxlY3Rpb25QcmVmaXg6IFwieC1tcy1tZXRhLVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1tZXRhXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRpY3Rpb25hcnlcIixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHsgdHlwZTogeyBuYW1lOiBcIlN0cmluZ1wiIH0gfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9iamVjdFJlcGxpY2F0aW9uUG9saWN5SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLW9yLXBvbGljeS1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1vci1wb2xpY3ktaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvYmplY3RSZXBsaWNhdGlvblJ1bGVzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1vclwiLFxuICAgICAgICAgICAgICAgIGhlYWRlckNvbGxlY3Rpb25QcmVmaXg6IFwieC1tcy1vci1cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtb3JcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGljdGlvbmFyeVwiLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogeyB0eXBlOiB7IG5hbWU6IFwiU3RyaW5nXCIgfSB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmxvYlR5cGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2ItdHlwZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLXR5cGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJCbG9ja0Jsb2JcIiwgXCJQYWdlQmxvYlwiLCBcIkFwcGVuZEJsb2JcIl0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3B5Q29tcGxldGVkT246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvcHktY29tcGxldGlvbi10aW1lXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvcHktY29tcGxldGlvbi10aW1lXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29weVN0YXR1c0Rlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LXN0YXR1cy1kZXNjcmlwdGlvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LXN0YXR1cy1kZXNjcmlwdGlvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvcHlJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29weVByb2dyZXNzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LXByb2dyZXNzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvcHktcHJvZ3Jlc3NcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3B5U291cmNlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LXNvdXJjZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LXNvdXJjZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvcHlTdGF0dXM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvcHktc3RhdHVzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvcHktc3RhdHVzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wicGVuZGluZ1wiLCBcInN1Y2Nlc3NcIiwgXCJhYm9ydGVkXCIsIFwiZmFpbGVkXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNJbmNyZW1lbnRhbENvcHk6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWluY3JlbWVudGFsLWNvcHlcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtaW5jcmVtZW50YWwtY29weVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZXN0aW5hdGlvblNuYXBzaG90OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LWRlc3RpbmF0aW9uLXNuYXBzaG90XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvcHktZGVzdGluYXRpb24tc25hcHNob3RcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZWFzZUR1cmF0aW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWFzZS1kdXJhdGlvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1sZWFzZS1kdXJhdGlvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcImluZmluaXRlXCIsIFwiZml4ZWRcIl0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZWFzZVN0YXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWFzZS1zdGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1sZWFzZS1zdGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYXZhaWxhYmxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImxlYXNlZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJleHBpcmVkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImJyZWFraW5nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImJyb2tlblwiLFxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVhc2VTdGF0dXM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxlYXNlLXN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1sZWFzZS1zdGF0dXNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJsb2NrZWRcIiwgXCJ1bmxvY2tlZFwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnRMZW5ndGg6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LWxlbmd0aFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC1sZW5ndGhcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50VHlwZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtdHlwZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC10eXBlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50TUQ1OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudEVuY29kaW5nOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC1lbmNvZGluZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC1lbmNvZGluZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnREaXNwb3NpdGlvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtZGlzcG9zaXRpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtZGlzcG9zaXRpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50TGFuZ3VhZ2U6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LWxhbmd1YWdlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LWxhbmd1YWdlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2FjaGVDb250cm9sOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY2FjaGUtY29udHJvbFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY2FjaGUtY29udHJvbFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JTZXF1ZW5jZU51bWJlcjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1zZXF1ZW5jZS1udW1iZXJcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1zZXF1ZW5jZS1udW1iZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFjY2VwdFJhbmdlczoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImFjY2VwdC1yYW5nZXNcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImFjY2VwdC1yYW5nZXNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBibG9iQ29tbWl0dGVkQmxvY2tDb3VudDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1jb21taXR0ZWQtYmxvY2stY291bnRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1jb21taXR0ZWQtYmxvY2stY291bnRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc1NlcnZlckVuY3J5cHRlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25LZXlTaGEyNTY6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uU2NvcGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFjY2Vzc1RpZXI6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWFjY2Vzcy10aWVyXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWFjY2Vzcy10aWVyXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWNjZXNzVGllckluZmVycmVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1hY2Nlc3MtdGllci1pbmZlcnJlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1hY2Nlc3MtdGllci1pbmZlcnJlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhcmNoaXZlU3RhdHVzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1hcmNoaXZlLXN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1hcmNoaXZlLXN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFjY2Vzc1RpZXJDaGFuZ2VkT246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWFjY2Vzcy10aWVyLWNoYW5nZS10aW1lXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWFjY2Vzcy10aWVyLWNoYW5nZS10aW1lXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbklkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uLWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb24taWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc0N1cnJlbnRWZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1pcy1jdXJyZW50LXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtaXMtY3VycmVudC12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRhZ0NvdW50OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy10YWctY291bnRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdGFnLWNvdW50XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXhwaXJlc09uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1leHBpcnktdGltZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1leHBpcnktdGltZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzU2VhbGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLXNlYWxlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLXNlYWxlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZWh5ZHJhdGVQcmlvcml0eToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVoeWRyYXRlLXByaW9yaXR5XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlaHlkcmF0ZS1wcmlvcml0eVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcIkhpZ2hcIiwgXCJTdGFuZGFyZFwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RBY2Nlc3NlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGFzdC1hY2Nlc3MtdGltZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1sYXN0LWFjY2Vzcy10aW1lXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5RXhwaXJlc09uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1pbW11dGFiaWxpdHktcG9saWN5LXVudGlsLWRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtaW1tdXRhYmlsaXR5LXBvbGljeS11bnRpbC1kYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5TW9kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtaW1tdXRhYmlsaXR5LXBvbGljeS1tb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWltbXV0YWJpbGl0eS1wb2xpY3ktbW9kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcIk11dGFibGVcIiwgXCJVbmxvY2tlZFwiLCBcIkxvY2tlZFwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlZ2FsSG9sZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVnYWwtaG9sZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1sZWdhbC1ob2xkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYkdldFByb3BlcnRpZXNFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JfZ2V0UHJvcGVydGllc0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iR2V0UHJvcGVydGllc0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JEZWxldGVIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JfZGVsZXRlSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JEZWxldGVIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JEZWxldGVFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JfZGVsZXRlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JEZWxldGVFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iVW5kZWxldGVIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JfdW5kZWxldGVIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYlVuZGVsZXRlSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iVW5kZWxldGVFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JfdW5kZWxldGVFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYlVuZGVsZXRlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlNldEV4cGlyeUhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9zZXRFeHBpcnlIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYlNldEV4cGlyeUhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JTZXRFeHBpcnlFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2Jfc2V0RXhwaXJ5RXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JTZXRFeHBpcnlFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iU2V0SHR0cEhlYWRlcnNIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2Jfc2V0SHR0cEhlYWRlcnNIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYlNldEh0dHBIZWFkZXJzSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JTZXF1ZW5jZU51bWJlcjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1zZXF1ZW5jZS1udW1iZXJcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1zZXF1ZW5jZS1udW1iZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlNldEh0dHBIZWFkZXJzRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX3NldEh0dHBIZWFkZXJzRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JTZXRIdHRwSGVhZGVyc0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JTZXRJbW11dGFiaWxpdHlQb2xpY3lIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2Jfc2V0SW1tdXRhYmlsaXR5UG9saWN5SGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JTZXRJbW11dGFiaWxpdHlQb2xpY3lIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpbW11dGFiaWxpdHlQb2xpY3lFeHBpcnk6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWltbXV0YWJpbGl0eS1wb2xpY3ktdW50aWwtZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1pbW11dGFiaWxpdHktcG9saWN5LXVudGlsLWRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpbW11dGFiaWxpdHlQb2xpY3lNb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1pbW11dGFiaWxpdHktcG9saWN5LW1vZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtaW1tdXRhYmlsaXR5LXBvbGljeS1tb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wiTXV0YWJsZVwiLCBcIlVubG9ja2VkXCIsIFwiTG9ja2VkXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlNldEltbXV0YWJpbGl0eVBvbGljeUV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9zZXRJbW11dGFiaWxpdHlQb2xpY3lFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYlNldEltbXV0YWJpbGl0eVBvbGljeUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JEZWxldGVJbW11dGFiaWxpdHlQb2xpY3lIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JfZGVsZXRlSW1tdXRhYmlsaXR5UG9saWN5SGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JEZWxldGVJbW11dGFiaWxpdHlQb2xpY3lIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iRGVsZXRlSW1tdXRhYmlsaXR5UG9saWN5RXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX2RlbGV0ZUltbXV0YWJpbGl0eVBvbGljeUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iRGVsZXRlSW1tdXRhYmlsaXR5UG9saWN5RXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlNldExlZ2FsSG9sZEhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9zZXRMZWdhbEhvbGRIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYlNldExlZ2FsSG9sZEhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlZ2FsSG9sZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVnYWwtaG9sZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1sZWdhbC1ob2xkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JTZXRMZWdhbEhvbGRFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2Jfc2V0TGVnYWxIb2xkRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JTZXRMZWdhbEhvbGRFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iU2V0TWV0YWRhdGFIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2Jfc2V0TWV0YWRhdGFIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYlNldE1ldGFkYXRhSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb25JZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvbi1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uLWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc1NlcnZlckVuY3J5cHRlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3Qtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uS2V5U2hhMjU2OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1rZXktc2hhMjU2XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JTZXRNZXRhZGF0YUV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9zZXRNZXRhZGF0YUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iU2V0TWV0YWRhdGFFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iQWNxdWlyZUxlYXNlSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX2FjcXVpcmVMZWFzZUhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iQWNxdWlyZUxlYXNlSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlYXNlSWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxlYXNlLWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWxlYXNlLWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iQWNxdWlyZUxlYXNlRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX2FjcXVpcmVMZWFzZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iQWNxdWlyZUxlYXNlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlJlbGVhc2VMZWFzZUhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9yZWxlYXNlTGVhc2VIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYlJlbGVhc2VMZWFzZUhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JSZWxlYXNlTGVhc2VFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JfcmVsZWFzZUxlYXNlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JSZWxlYXNlTGVhc2VFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iUmVuZXdMZWFzZUhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9yZW5ld0xlYXNlSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JSZW5ld0xlYXNlSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlYXNlSWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxlYXNlLWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWxlYXNlLWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iUmVuZXdMZWFzZUV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9yZW5ld0xlYXNlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JSZW5ld0xlYXNlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYkNoYW5nZUxlYXNlSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX2NoYW5nZUxlYXNlSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JDaGFuZ2VMZWFzZUhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZWFzZUlkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWFzZS1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1sZWFzZS1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYkNoYW5nZUxlYXNlRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX2NoYW5nZUxlYXNlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JDaGFuZ2VMZWFzZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JCcmVha0xlYXNlSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX2JyZWFrTGVhc2VIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYkJyZWFrTGVhc2VIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVhc2VUaW1lOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWFzZS10aW1lXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWxlYXNlLXRpbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JCcmVha0xlYXNlRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX2JyZWFrTGVhc2VFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYkJyZWFrTGVhc2VFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iQ3JlYXRlU25hcHNob3RIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JfY3JlYXRlU25hcHNob3RIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYkNyZWF0ZVNuYXBzaG90SGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHNuYXBzaG90OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1zbmFwc2hvdFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1zbmFwc2hvdFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb25JZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvbi1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uLWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc1NlcnZlckVuY3J5cHRlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3Qtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JDcmVhdGVTbmFwc2hvdEV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9jcmVhdGVTbmFwc2hvdEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iQ3JlYXRlU25hcHNob3RFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iU3RhcnRDb3B5RnJvbVVSTEhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9zdGFydENvcHlGcm9tVVJMSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JTdGFydENvcHlGcm9tVVJMSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb25JZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvbi1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uLWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3B5SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvcHktaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29weS1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvcHlTdGF0dXM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvcHktc3RhdHVzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvcHktc3RhdHVzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wicGVuZGluZ1wiLCBcInN1Y2Nlc3NcIiwgXCJhYm9ydGVkXCIsIFwiZmFpbGVkXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iU3RhcnRDb3B5RnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9zdGFydENvcHlGcm9tVVJMRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JTdGFydENvcHlGcm9tVVJMRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYkNvcHlGcm9tVVJMSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX2NvcHlGcm9tVVJMSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JDb3B5RnJvbVVSTEhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uSWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb24taWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvbi1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29weUlkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvcHktaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3B5U3RhdHVzOiB7XG4gICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBcInN1Y2Nlc3NcIixcbiAgICAgICAgICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1zdGF0dXNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50TUQ1OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeE1zQ29udGVudENyYzY0OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb250ZW50LWNyYzY0XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvbnRlbnQtY3JjNjRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uU2NvcGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYkNvcHlGcm9tVVJMRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX2NvcHlGcm9tVVJMRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JDb3B5RnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JBYm9ydENvcHlGcm9tVVJMSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX2Fib3J0Q29weUZyb21VUkxIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYkFib3J0Q29weUZyb21VUkxIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JBYm9ydENvcHlGcm9tVVJMRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX2Fib3J0Q29weUZyb21VUkxFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYkFib3J0Q29weUZyb21VUkxFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iU2V0VGllckhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9zZXRUaWVySGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JTZXRUaWVySGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlNldFRpZXJFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2Jfc2V0VGllckV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iU2V0VGllckV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JHZXRBY2NvdW50SW5mb0hlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9nZXRBY2NvdW50SW5mb0hlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iR2V0QWNjb3VudEluZm9IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBza3VOYW1lOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1za3UtbmFtZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1za3UtbmFtZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiU3RhbmRhcmRfTFJTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlN0YW5kYXJkX0dSU1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJTdGFuZGFyZF9SQUdSU1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJTdGFuZGFyZF9aUlNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiUHJlbWl1bV9MUlNcIixcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFjY291bnRLaW5kOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1hY2NvdW50LWtpbmRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYWNjb3VudC1raW5kXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJTdG9yYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkJsb2JTdG9yYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlN0b3JhZ2VWMlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJGaWxlU3RvcmFnZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJCbG9ja0Jsb2JTdG9yYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc0hpZXJhcmNoaWNhbE5hbWVzcGFjZUVuYWJsZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWlzLWhucy1lbmFibGVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWlzLWhucy1lbmFibGVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JHZXRBY2NvdW50SW5mb0V4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9nZXRBY2NvdW50SW5mb0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iR2V0QWNjb3VudEluZm9FeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iUXVlcnlIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JfcXVlcnlIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYlF1ZXJ5SGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbWV0YVwiLFxuICAgICAgICAgICAgICAgIGhlYWRlckNvbGxlY3Rpb25QcmVmaXg6IFwieC1tcy1tZXRhLVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1tZXRhXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRpY3Rpb25hcnlcIixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHsgdHlwZTogeyBuYW1lOiBcIlN0cmluZ1wiIH0gfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnRMZW5ndGg6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LWxlbmd0aFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC1sZW5ndGhcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50VHlwZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtdHlwZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC10eXBlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudFJhbmdlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC1yYW5nZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC1yYW5nZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudE1ENToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnRFbmNvZGluZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtZW5jb2RpbmdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtZW5jb2RpbmdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjYWNoZUNvbnRyb2w6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjYWNoZS1jb250cm9sXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjYWNoZS1jb250cm9sXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudERpc3Bvc2l0aW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC1kaXNwb3NpdGlvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC1kaXNwb3NpdGlvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnRMYW5ndWFnZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtbGFuZ3VhZ2VcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtbGFuZ3VhZ2VcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBibG9iU2VxdWVuY2VOdW1iZXI6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2Itc2VxdWVuY2UtbnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2Itc2VxdWVuY2UtbnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmxvYlR5cGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2ItdHlwZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLXR5cGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJCbG9ja0Jsb2JcIiwgXCJQYWdlQmxvYlwiLCBcIkFwcGVuZEJsb2JcIl0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3B5Q29tcGxldGlvblRpbWU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvcHktY29tcGxldGlvbi10aW1lXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvcHktY29tcGxldGlvbi10aW1lXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29weVN0YXR1c0Rlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LXN0YXR1cy1kZXNjcmlwdGlvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LXN0YXR1cy1kZXNjcmlwdGlvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvcHlJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29weVByb2dyZXNzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LXByb2dyZXNzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvcHktcHJvZ3Jlc3NcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3B5U291cmNlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LXNvdXJjZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LXNvdXJjZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvcHlTdGF0dXM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvcHktc3RhdHVzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvcHktc3RhdHVzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wicGVuZGluZ1wiLCBcInN1Y2Nlc3NcIiwgXCJhYm9ydGVkXCIsIFwiZmFpbGVkXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVhc2VEdXJhdGlvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVhc2UtZHVyYXRpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGVhc2UtZHVyYXRpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJpbmZpbml0ZVwiLCBcImZpeGVkXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVhc2VTdGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVhc2Utc3RhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGVhc2Utc3RhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICBcImF2YWlsYWJsZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJsZWFzZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZXhwaXJlZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJicmVha2luZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJicm9rZW5cIixcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlYXNlU3RhdHVzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWFzZS1zdGF0dXNcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGVhc2Utc3RhdHVzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wibG9ja2VkXCIsIFwidW5sb2NrZWRcIl0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhY2NlcHRSYW5nZXM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJhY2NlcHQtcmFuZ2VzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJhY2NlcHQtcmFuZ2VzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBibG9iQ29tbWl0dGVkQmxvY2tDb3VudDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1jb21taXR0ZWQtYmxvY2stY291bnRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1jb21taXR0ZWQtYmxvY2stY291bnRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc1NlcnZlckVuY3J5cHRlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25LZXlTaGEyNTY6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uU2NvcGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JDb250ZW50TUQ1OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLWNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2ItY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnRDcmM2NDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29udGVudC1jcmM2NFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb250ZW50LWNyYzY0XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlF1ZXJ5RXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX3F1ZXJ5RXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JRdWVyeUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JHZXRUYWdzSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX2dldFRhZ3NIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYkdldFRhZ3NIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JHZXRUYWdzRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX2dldFRhZ3NFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYkdldFRhZ3NFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iU2V0VGFnc0hlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9zZXRUYWdzSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JTZXRUYWdzSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iU2V0VGFnc0V4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9zZXRUYWdzRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JTZXRUYWdzRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgUGFnZUJsb2JDcmVhdGVIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlBhZ2VCbG9iX2NyZWF0ZUhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJQYWdlQmxvYkNyZWF0ZUhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50TUQ1OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbklkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uLWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb24taWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzU2VydmVyRW5jcnlwdGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25LZXlTaGEyNTY6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uU2NvcGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgUGFnZUJsb2JDcmVhdGVFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlBhZ2VCbG9iX2NyZWF0ZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJQYWdlQmxvYkNyZWF0ZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFBhZ2VCbG9iVXBsb2FkUGFnZXNIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlBhZ2VCbG9iX3VwbG9hZFBhZ2VzSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlBhZ2VCbG9iVXBsb2FkUGFnZXNIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudE1ENToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHhNc0NvbnRlbnRDcmM2NDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29udGVudC1jcmM2NFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb250ZW50LWNyYzY0XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmxvYlNlcXVlbmNlTnVtYmVyOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLXNlcXVlbmNlLW51bWJlclwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLXNlcXVlbmNlLW51bWJlclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNTZXJ2ZXJFbmNyeXB0ZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3Qtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1Njoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1rZXktc2hhMjU2XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25TY29wZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBQYWdlQmxvYlVwbG9hZFBhZ2VzRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJQYWdlQmxvYl91cGxvYWRQYWdlc0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJQYWdlQmxvYlVwbG9hZFBhZ2VzRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgUGFnZUJsb2JDbGVhclBhZ2VzSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJQYWdlQmxvYl9jbGVhclBhZ2VzSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlBhZ2VCbG9iQ2xlYXJQYWdlc0hlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50TUQ1OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeE1zQ29udGVudENyYzY0OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb250ZW50LWNyYzY0XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvbnRlbnQtY3JjNjRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBibG9iU2VxdWVuY2VOdW1iZXI6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2Itc2VxdWVuY2UtbnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2Itc2VxdWVuY2UtbnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFBhZ2VCbG9iQ2xlYXJQYWdlc0V4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiUGFnZUJsb2JfY2xlYXJQYWdlc0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJQYWdlQmxvYkNsZWFyUGFnZXNFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBQYWdlQmxvYlVwbG9hZFBhZ2VzRnJvbVVSTEhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiUGFnZUJsb2JfdXBsb2FkUGFnZXNGcm9tVVJMSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlBhZ2VCbG9iVXBsb2FkUGFnZXNGcm9tVVJMSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnRNRDU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB4TXNDb250ZW50Q3JjNjQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvbnRlbnQtY3JjNjRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29udGVudC1jcmM2NFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JTZXF1ZW5jZU51bWJlcjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1zZXF1ZW5jZS1udW1iZXJcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1zZXF1ZW5jZS1udW1iZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNTZXJ2ZXJFbmNyeXB0ZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3Qtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1Njoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1rZXktc2hhMjU2XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25TY29wZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBQYWdlQmxvYlVwbG9hZFBhZ2VzRnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiUGFnZUJsb2JfdXBsb2FkUGFnZXNGcm9tVVJMRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlBhZ2VCbG9iVXBsb2FkUGFnZXNGcm9tVVJMRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgUGFnZUJsb2JHZXRQYWdlUmFuZ2VzSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJQYWdlQmxvYl9nZXRQYWdlUmFuZ2VzSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlBhZ2VCbG9iR2V0UGFnZVJhbmdlc0hlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBibG9iQ29udGVudExlbmd0aDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1jb250ZW50LWxlbmd0aFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLWNvbnRlbnQtbGVuZ3RoXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFBhZ2VCbG9iR2V0UGFnZVJhbmdlc0V4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiUGFnZUJsb2JfZ2V0UGFnZVJhbmdlc0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJQYWdlQmxvYkdldFBhZ2VSYW5nZXNFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBQYWdlQmxvYkdldFBhZ2VSYW5nZXNEaWZmSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJQYWdlQmxvYl9nZXRQYWdlUmFuZ2VzRGlmZkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJQYWdlQmxvYkdldFBhZ2VSYW5nZXNEaWZmSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JDb250ZW50TGVuZ3RoOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLWNvbnRlbnQtbGVuZ3RoXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2ItY29udGVudC1sZW5ndGhcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgUGFnZUJsb2JHZXRQYWdlUmFuZ2VzRGlmZkV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiUGFnZUJsb2JfZ2V0UGFnZVJhbmdlc0RpZmZFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiUGFnZUJsb2JHZXRQYWdlUmFuZ2VzRGlmZkV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFBhZ2VCbG9iUmVzaXplSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJQYWdlQmxvYl9yZXNpemVIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiUGFnZUJsb2JSZXNpemVIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmxvYlNlcXVlbmNlTnVtYmVyOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLXNlcXVlbmNlLW51bWJlclwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLXNlcXVlbmNlLW51bWJlclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBQYWdlQmxvYlJlc2l6ZUV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiUGFnZUJsb2JfcmVzaXplRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlBhZ2VCbG9iUmVzaXplRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgUGFnZUJsb2JVcGRhdGVTZXF1ZW5jZU51bWJlckhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiUGFnZUJsb2JfdXBkYXRlU2VxdWVuY2VOdW1iZXJIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiUGFnZUJsb2JVcGRhdGVTZXF1ZW5jZU51bWJlckhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBibG9iU2VxdWVuY2VOdW1iZXI6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2Itc2VxdWVuY2UtbnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2Itc2VxdWVuY2UtbnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFBhZ2VCbG9iVXBkYXRlU2VxdWVuY2VOdW1iZXJFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlBhZ2VCbG9iX3VwZGF0ZVNlcXVlbmNlTnVtYmVyRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlBhZ2VCbG9iVXBkYXRlU2VxdWVuY2VOdW1iZXJFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBQYWdlQmxvYkNvcHlJbmNyZW1lbnRhbEhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiUGFnZUJsb2JfY29weUluY3JlbWVudGFsSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlBhZ2VCbG9iQ29weUluY3JlbWVudGFsSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29weUlkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvcHktaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3B5U3RhdHVzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LXN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LXN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcInBlbmRpbmdcIiwgXCJzdWNjZXNzXCIsIFwiYWJvcnRlZFwiLCBcImZhaWxlZFwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgUGFnZUJsb2JDb3B5SW5jcmVtZW50YWxFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlBhZ2VCbG9iX2NvcHlJbmNyZW1lbnRhbEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJQYWdlQmxvYkNvcHlJbmNyZW1lbnRhbEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEFwcGVuZEJsb2JDcmVhdGVIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkFwcGVuZEJsb2JfY3JlYXRlSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkFwcGVuZEJsb2JDcmVhdGVIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudE1ENToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb25JZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvbi1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uLWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc1NlcnZlckVuY3J5cHRlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3Qtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uS2V5U2hhMjU2OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1rZXktc2hhMjU2XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEFwcGVuZEJsb2JDcmVhdGVFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkFwcGVuZEJsb2JfY3JlYXRlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkFwcGVuZEJsb2JDcmVhdGVFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBBcHBlbmRCbG9iQXBwZW5kQmxvY2tIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkFwcGVuZEJsb2JfYXBwZW5kQmxvY2tIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQXBwZW5kQmxvYkFwcGVuZEJsb2NrSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnRNRDU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB4TXNDb250ZW50Q3JjNjQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvbnRlbnQtY3JjNjRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29udGVudC1jcmM2NFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmxvYkFwcGVuZE9mZnNldDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1hcHBlbmQtb2Zmc2V0XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2ItYXBwZW5kLW9mZnNldFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JDb21taXR0ZWRCbG9ja0NvdW50OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLWNvbW1pdHRlZC1ibG9jay1jb3VudFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLWNvbW1pdHRlZC1ibG9jay1jb3VudFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzU2VydmVyRW5jcnlwdGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25LZXlTaGEyNTY6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uU2NvcGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQXBwZW5kQmxvYkFwcGVuZEJsb2NrRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJBcHBlbmRCbG9iX2FwcGVuZEJsb2NrRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkFwcGVuZEJsb2JBcHBlbmRCbG9ja0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEFwcGVuZEJsb2JBcHBlbmRCbG9ja0Zyb21VcmxIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkFwcGVuZEJsb2JfYXBwZW5kQmxvY2tGcm9tVXJsSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkFwcGVuZEJsb2JBcHBlbmRCbG9ja0Zyb21VcmxIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudE1ENToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHhNc0NvbnRlbnRDcmM2NDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29udGVudC1jcmM2NFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb250ZW50LWNyYzY0XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JBcHBlbmRPZmZzZXQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2ItYXBwZW5kLW9mZnNldFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLWFwcGVuZC1vZmZzZXRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBibG9iQ29tbWl0dGVkQmxvY2tDb3VudDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1jb21taXR0ZWQtYmxvY2stY291bnRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1jb21taXR0ZWQtYmxvY2stY291bnRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uS2V5U2hhMjU2OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1rZXktc2hhMjU2XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc1NlcnZlckVuY3J5cHRlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3Qtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEFwcGVuZEJsb2JBcHBlbmRCbG9ja0Zyb21VcmxFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkFwcGVuZEJsb2JfYXBwZW5kQmxvY2tGcm9tVXJsRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkFwcGVuZEJsb2JBcHBlbmRCbG9ja0Zyb21VcmxFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBBcHBlbmRCbG9iU2VhbEhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQXBwZW5kQmxvYl9zZWFsSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkFwcGVuZEJsb2JTZWFsSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNTZWFsZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2Itc2VhbGVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2Itc2VhbGVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEFwcGVuZEJsb2JTZWFsRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJBcHBlbmRCbG9iX3NlYWxFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQXBwZW5kQmxvYlNlYWxFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9ja0Jsb2JVcGxvYWRIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2NrQmxvYl91cGxvYWRIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvY2tCbG9iVXBsb2FkSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnRNRDU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uSWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb24taWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvbi1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNTZXJ2ZXJFbmNyeXB0ZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3Qtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1Njoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1rZXktc2hhMjU2XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25TY29wZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9ja0Jsb2JVcGxvYWRFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2NrQmxvYl91cGxvYWRFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvY2tCbG9iVXBsb2FkRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvY2tCbG9iUHV0QmxvYkZyb21VcmxIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2NrQmxvYl9wdXRCbG9iRnJvbVVybEhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9ja0Jsb2JQdXRCbG9iRnJvbVVybEhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50TUQ1OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbklkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uLWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb24taWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzU2VydmVyRW5jcnlwdGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25LZXlTaGEyNTY6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uU2NvcGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvY2tCbG9iUHV0QmxvYkZyb21VcmxFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2NrQmxvYl9wdXRCbG9iRnJvbVVybEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9ja0Jsb2JQdXRCbG9iRnJvbVVybEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2NrQmxvYlN0YWdlQmxvY2tIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2NrQmxvYl9zdGFnZUJsb2NrSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2NrQmxvYlN0YWdlQmxvY2tIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgY29udGVudE1ENToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeE1zQ29udGVudENyYzY0OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb250ZW50LWNyYzY0XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvbnRlbnQtY3JjNjRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc1NlcnZlckVuY3J5cHRlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3Qtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uS2V5U2hhMjU2OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1rZXktc2hhMjU2XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2NrQmxvYlN0YWdlQmxvY2tFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2NrQmxvYl9zdGFnZUJsb2NrRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2NrQmxvYlN0YWdlQmxvY2tFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9ja0Jsb2JTdGFnZUJsb2NrRnJvbVVSTEhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvY2tCbG9iX3N0YWdlQmxvY2tGcm9tVVJMSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2NrQmxvYlN0YWdlQmxvY2tGcm9tVVJMSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNvbnRlbnRNRDU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB4TXNDb250ZW50Q3JjNjQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvbnRlbnQtY3JjNjRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29udGVudC1jcmM2NFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNTZXJ2ZXJFbmNyeXB0ZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3Qtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1Njoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1rZXktc2hhMjU2XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25TY29wZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9ja0Jsb2JTdGFnZUJsb2NrRnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvY2tCbG9iX3N0YWdlQmxvY2tGcm9tVVJMRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2NrQmxvYlN0YWdlQmxvY2tGcm9tVVJMRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvY2tCbG9iQ29tbWl0QmxvY2tMaXN0SGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9ja0Jsb2JfY29tbWl0QmxvY2tMaXN0SGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2NrQmxvYkNvbW1pdEJsb2NrTGlzdEhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50TUQ1OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeE1zQ29udGVudENyYzY0OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb250ZW50LWNyYzY0XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvbnRlbnQtY3JjNjRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uSWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb24taWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvbi1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNTZXJ2ZXJFbmNyeXB0ZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3Qtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1Njoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1rZXktc2hhMjU2XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25TY29wZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9ja0Jsb2JDb21taXRCbG9ja0xpc3RFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2NrQmxvYl9jb21taXRCbG9ja0xpc3RFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvY2tCbG9iQ29tbWl0QmxvY2tMaXN0RXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvY2tCbG9iR2V0QmxvY2tMaXN0SGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9ja0Jsb2JfZ2V0QmxvY2tMaXN0SGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2NrQmxvYkdldEJsb2NrTGlzdEhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50VHlwZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtdHlwZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC10eXBlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmxvYkNvbnRlbnRMZW5ndGg6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2ItY29udGVudC1sZW5ndGhcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1jb250ZW50LWxlbmd0aFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9ja0Jsb2JHZXRCbG9ja0xpc3RFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2NrQmxvYl9nZXRCbG9ja0xpc3RFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvY2tCbG9iR2V0QmxvY2tMaXN0RXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuXG52YXIgTWFwcGVycyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgQWNjZXNzUG9saWN5OiBBY2Nlc3NQb2xpY3ksXG4gICAgQXBwZW5kQmxvYkFwcGVuZEJsb2NrRXhjZXB0aW9uSGVhZGVyczogQXBwZW5kQmxvYkFwcGVuZEJsb2NrRXhjZXB0aW9uSGVhZGVycyxcbiAgICBBcHBlbmRCbG9iQXBwZW5kQmxvY2tGcm9tVXJsRXhjZXB0aW9uSGVhZGVyczogQXBwZW5kQmxvYkFwcGVuZEJsb2NrRnJvbVVybEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQXBwZW5kQmxvYkFwcGVuZEJsb2NrRnJvbVVybEhlYWRlcnM6IEFwcGVuZEJsb2JBcHBlbmRCbG9ja0Zyb21VcmxIZWFkZXJzLFxuICAgIEFwcGVuZEJsb2JBcHBlbmRCbG9ja0hlYWRlcnM6IEFwcGVuZEJsb2JBcHBlbmRCbG9ja0hlYWRlcnMsXG4gICAgQXBwZW5kQmxvYkNyZWF0ZUV4Y2VwdGlvbkhlYWRlcnM6IEFwcGVuZEJsb2JDcmVhdGVFeGNlcHRpb25IZWFkZXJzLFxuICAgIEFwcGVuZEJsb2JDcmVhdGVIZWFkZXJzOiBBcHBlbmRCbG9iQ3JlYXRlSGVhZGVycyxcbiAgICBBcHBlbmRCbG9iU2VhbEV4Y2VwdGlvbkhlYWRlcnM6IEFwcGVuZEJsb2JTZWFsRXhjZXB0aW9uSGVhZGVycyxcbiAgICBBcHBlbmRCbG9iU2VhbEhlYWRlcnM6IEFwcGVuZEJsb2JTZWFsSGVhZGVycyxcbiAgICBBcnJvd0NvbmZpZ3VyYXRpb246IEFycm93Q29uZmlndXJhdGlvbixcbiAgICBBcnJvd0ZpZWxkOiBBcnJvd0ZpZWxkLFxuICAgIEJsb2JBYm9ydENvcHlGcm9tVVJMRXhjZXB0aW9uSGVhZGVyczogQmxvYkFib3J0Q29weUZyb21VUkxFeGNlcHRpb25IZWFkZXJzLFxuICAgIEJsb2JBYm9ydENvcHlGcm9tVVJMSGVhZGVyczogQmxvYkFib3J0Q29weUZyb21VUkxIZWFkZXJzLFxuICAgIEJsb2JBY3F1aXJlTGVhc2VFeGNlcHRpb25IZWFkZXJzOiBCbG9iQWNxdWlyZUxlYXNlRXhjZXB0aW9uSGVhZGVycyxcbiAgICBCbG9iQWNxdWlyZUxlYXNlSGVhZGVyczogQmxvYkFjcXVpcmVMZWFzZUhlYWRlcnMsXG4gICAgQmxvYkJyZWFrTGVhc2VFeGNlcHRpb25IZWFkZXJzOiBCbG9iQnJlYWtMZWFzZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQmxvYkJyZWFrTGVhc2VIZWFkZXJzOiBCbG9iQnJlYWtMZWFzZUhlYWRlcnMsXG4gICAgQmxvYkNoYW5nZUxlYXNlRXhjZXB0aW9uSGVhZGVyczogQmxvYkNoYW5nZUxlYXNlRXhjZXB0aW9uSGVhZGVycyxcbiAgICBCbG9iQ2hhbmdlTGVhc2VIZWFkZXJzOiBCbG9iQ2hhbmdlTGVhc2VIZWFkZXJzLFxuICAgIEJsb2JDb3B5RnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnM6IEJsb2JDb3B5RnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQmxvYkNvcHlGcm9tVVJMSGVhZGVyczogQmxvYkNvcHlGcm9tVVJMSGVhZGVycyxcbiAgICBCbG9iQ3JlYXRlU25hcHNob3RFeGNlcHRpb25IZWFkZXJzOiBCbG9iQ3JlYXRlU25hcHNob3RFeGNlcHRpb25IZWFkZXJzLFxuICAgIEJsb2JDcmVhdGVTbmFwc2hvdEhlYWRlcnM6IEJsb2JDcmVhdGVTbmFwc2hvdEhlYWRlcnMsXG4gICAgQmxvYkRlbGV0ZUV4Y2VwdGlvbkhlYWRlcnM6IEJsb2JEZWxldGVFeGNlcHRpb25IZWFkZXJzLFxuICAgIEJsb2JEZWxldGVIZWFkZXJzOiBCbG9iRGVsZXRlSGVhZGVycyxcbiAgICBCbG9iRGVsZXRlSW1tdXRhYmlsaXR5UG9saWN5RXhjZXB0aW9uSGVhZGVyczogQmxvYkRlbGV0ZUltbXV0YWJpbGl0eVBvbGljeUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQmxvYkRlbGV0ZUltbXV0YWJpbGl0eVBvbGljeUhlYWRlcnM6IEJsb2JEZWxldGVJbW11dGFiaWxpdHlQb2xpY3lIZWFkZXJzLFxuICAgIEJsb2JEb3dubG9hZEV4Y2VwdGlvbkhlYWRlcnM6IEJsb2JEb3dubG9hZEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQmxvYkRvd25sb2FkSGVhZGVyczogQmxvYkRvd25sb2FkSGVhZGVycyxcbiAgICBCbG9iRmxhdExpc3RTZWdtZW50OiBCbG9iRmxhdExpc3RTZWdtZW50LFxuICAgIEJsb2JHZXRBY2NvdW50SW5mb0V4Y2VwdGlvbkhlYWRlcnM6IEJsb2JHZXRBY2NvdW50SW5mb0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQmxvYkdldEFjY291bnRJbmZvSGVhZGVyczogQmxvYkdldEFjY291bnRJbmZvSGVhZGVycyxcbiAgICBCbG9iR2V0UHJvcGVydGllc0V4Y2VwdGlvbkhlYWRlcnM6IEJsb2JHZXRQcm9wZXJ0aWVzRXhjZXB0aW9uSGVhZGVycyxcbiAgICBCbG9iR2V0UHJvcGVydGllc0hlYWRlcnM6IEJsb2JHZXRQcm9wZXJ0aWVzSGVhZGVycyxcbiAgICBCbG9iR2V0VGFnc0V4Y2VwdGlvbkhlYWRlcnM6IEJsb2JHZXRUYWdzRXhjZXB0aW9uSGVhZGVycyxcbiAgICBCbG9iR2V0VGFnc0hlYWRlcnM6IEJsb2JHZXRUYWdzSGVhZGVycyxcbiAgICBCbG9iSGllcmFyY2h5TGlzdFNlZ21lbnQ6IEJsb2JIaWVyYXJjaHlMaXN0U2VnbWVudCxcbiAgICBCbG9iSXRlbUludGVybmFsOiBCbG9iSXRlbUludGVybmFsLFxuICAgIEJsb2JOYW1lOiBCbG9iTmFtZSxcbiAgICBCbG9iUHJlZml4OiBCbG9iUHJlZml4LFxuICAgIEJsb2JQcm9wZXJ0aWVzSW50ZXJuYWw6IEJsb2JQcm9wZXJ0aWVzSW50ZXJuYWwsXG4gICAgQmxvYlF1ZXJ5RXhjZXB0aW9uSGVhZGVyczogQmxvYlF1ZXJ5RXhjZXB0aW9uSGVhZGVycyxcbiAgICBCbG9iUXVlcnlIZWFkZXJzOiBCbG9iUXVlcnlIZWFkZXJzLFxuICAgIEJsb2JSZWxlYXNlTGVhc2VFeGNlcHRpb25IZWFkZXJzOiBCbG9iUmVsZWFzZUxlYXNlRXhjZXB0aW9uSGVhZGVycyxcbiAgICBCbG9iUmVsZWFzZUxlYXNlSGVhZGVyczogQmxvYlJlbGVhc2VMZWFzZUhlYWRlcnMsXG4gICAgQmxvYlJlbmV3TGVhc2VFeGNlcHRpb25IZWFkZXJzOiBCbG9iUmVuZXdMZWFzZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQmxvYlJlbmV3TGVhc2VIZWFkZXJzOiBCbG9iUmVuZXdMZWFzZUhlYWRlcnMsXG4gICAgQmxvYlNlcnZpY2VQcm9wZXJ0aWVzOiBCbG9iU2VydmljZVByb3BlcnRpZXMsXG4gICAgQmxvYlNlcnZpY2VTdGF0aXN0aWNzOiBCbG9iU2VydmljZVN0YXRpc3RpY3MsXG4gICAgQmxvYlNldEV4cGlyeUV4Y2VwdGlvbkhlYWRlcnM6IEJsb2JTZXRFeHBpcnlFeGNlcHRpb25IZWFkZXJzLFxuICAgIEJsb2JTZXRFeHBpcnlIZWFkZXJzOiBCbG9iU2V0RXhwaXJ5SGVhZGVycyxcbiAgICBCbG9iU2V0SHR0cEhlYWRlcnNFeGNlcHRpb25IZWFkZXJzOiBCbG9iU2V0SHR0cEhlYWRlcnNFeGNlcHRpb25IZWFkZXJzLFxuICAgIEJsb2JTZXRIdHRwSGVhZGVyc0hlYWRlcnM6IEJsb2JTZXRIdHRwSGVhZGVyc0hlYWRlcnMsXG4gICAgQmxvYlNldEltbXV0YWJpbGl0eVBvbGljeUV4Y2VwdGlvbkhlYWRlcnM6IEJsb2JTZXRJbW11dGFiaWxpdHlQb2xpY3lFeGNlcHRpb25IZWFkZXJzLFxuICAgIEJsb2JTZXRJbW11dGFiaWxpdHlQb2xpY3lIZWFkZXJzOiBCbG9iU2V0SW1tdXRhYmlsaXR5UG9saWN5SGVhZGVycyxcbiAgICBCbG9iU2V0TGVnYWxIb2xkRXhjZXB0aW9uSGVhZGVyczogQmxvYlNldExlZ2FsSG9sZEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQmxvYlNldExlZ2FsSG9sZEhlYWRlcnM6IEJsb2JTZXRMZWdhbEhvbGRIZWFkZXJzLFxuICAgIEJsb2JTZXRNZXRhZGF0YUV4Y2VwdGlvbkhlYWRlcnM6IEJsb2JTZXRNZXRhZGF0YUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQmxvYlNldE1ldGFkYXRhSGVhZGVyczogQmxvYlNldE1ldGFkYXRhSGVhZGVycyxcbiAgICBCbG9iU2V0VGFnc0V4Y2VwdGlvbkhlYWRlcnM6IEJsb2JTZXRUYWdzRXhjZXB0aW9uSGVhZGVycyxcbiAgICBCbG9iU2V0VGFnc0hlYWRlcnM6IEJsb2JTZXRUYWdzSGVhZGVycyxcbiAgICBCbG9iU2V0VGllckV4Y2VwdGlvbkhlYWRlcnM6IEJsb2JTZXRUaWVyRXhjZXB0aW9uSGVhZGVycyxcbiAgICBCbG9iU2V0VGllckhlYWRlcnM6IEJsb2JTZXRUaWVySGVhZGVycyxcbiAgICBCbG9iU3RhcnRDb3B5RnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnM6IEJsb2JTdGFydENvcHlGcm9tVVJMRXhjZXB0aW9uSGVhZGVycyxcbiAgICBCbG9iU3RhcnRDb3B5RnJvbVVSTEhlYWRlcnM6IEJsb2JTdGFydENvcHlGcm9tVVJMSGVhZGVycyxcbiAgICBCbG9iVGFnOiBCbG9iVGFnLFxuICAgIEJsb2JUYWdzOiBCbG9iVGFncyxcbiAgICBCbG9iVW5kZWxldGVFeGNlcHRpb25IZWFkZXJzOiBCbG9iVW5kZWxldGVFeGNlcHRpb25IZWFkZXJzLFxuICAgIEJsb2JVbmRlbGV0ZUhlYWRlcnM6IEJsb2JVbmRlbGV0ZUhlYWRlcnMsXG4gICAgQmxvY2s6IEJsb2NrLFxuICAgIEJsb2NrQmxvYkNvbW1pdEJsb2NrTGlzdEV4Y2VwdGlvbkhlYWRlcnM6IEJsb2NrQmxvYkNvbW1pdEJsb2NrTGlzdEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQmxvY2tCbG9iQ29tbWl0QmxvY2tMaXN0SGVhZGVyczogQmxvY2tCbG9iQ29tbWl0QmxvY2tMaXN0SGVhZGVycyxcbiAgICBCbG9ja0Jsb2JHZXRCbG9ja0xpc3RFeGNlcHRpb25IZWFkZXJzOiBCbG9ja0Jsb2JHZXRCbG9ja0xpc3RFeGNlcHRpb25IZWFkZXJzLFxuICAgIEJsb2NrQmxvYkdldEJsb2NrTGlzdEhlYWRlcnM6IEJsb2NrQmxvYkdldEJsb2NrTGlzdEhlYWRlcnMsXG4gICAgQmxvY2tCbG9iUHV0QmxvYkZyb21VcmxFeGNlcHRpb25IZWFkZXJzOiBCbG9ja0Jsb2JQdXRCbG9iRnJvbVVybEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQmxvY2tCbG9iUHV0QmxvYkZyb21VcmxIZWFkZXJzOiBCbG9ja0Jsb2JQdXRCbG9iRnJvbVVybEhlYWRlcnMsXG4gICAgQmxvY2tCbG9iU3RhZ2VCbG9ja0V4Y2VwdGlvbkhlYWRlcnM6IEJsb2NrQmxvYlN0YWdlQmxvY2tFeGNlcHRpb25IZWFkZXJzLFxuICAgIEJsb2NrQmxvYlN0YWdlQmxvY2tGcm9tVVJMRXhjZXB0aW9uSGVhZGVyczogQmxvY2tCbG9iU3RhZ2VCbG9ja0Zyb21VUkxFeGNlcHRpb25IZWFkZXJzLFxuICAgIEJsb2NrQmxvYlN0YWdlQmxvY2tGcm9tVVJMSGVhZGVyczogQmxvY2tCbG9iU3RhZ2VCbG9ja0Zyb21VUkxIZWFkZXJzLFxuICAgIEJsb2NrQmxvYlN0YWdlQmxvY2tIZWFkZXJzOiBCbG9ja0Jsb2JTdGFnZUJsb2NrSGVhZGVycyxcbiAgICBCbG9ja0Jsb2JVcGxvYWRFeGNlcHRpb25IZWFkZXJzOiBCbG9ja0Jsb2JVcGxvYWRFeGNlcHRpb25IZWFkZXJzLFxuICAgIEJsb2NrQmxvYlVwbG9hZEhlYWRlcnM6IEJsb2NrQmxvYlVwbG9hZEhlYWRlcnMsXG4gICAgQmxvY2tMaXN0OiBCbG9ja0xpc3QsXG4gICAgQmxvY2tMb29rdXBMaXN0OiBCbG9ja0xvb2t1cExpc3QsXG4gICAgQ2xlYXJSYW5nZTogQ2xlYXJSYW5nZSxcbiAgICBDb250YWluZXJBY3F1aXJlTGVhc2VFeGNlcHRpb25IZWFkZXJzOiBDb250YWluZXJBY3F1aXJlTGVhc2VFeGNlcHRpb25IZWFkZXJzLFxuICAgIENvbnRhaW5lckFjcXVpcmVMZWFzZUhlYWRlcnM6IENvbnRhaW5lckFjcXVpcmVMZWFzZUhlYWRlcnMsXG4gICAgQ29udGFpbmVyQnJlYWtMZWFzZUV4Y2VwdGlvbkhlYWRlcnM6IENvbnRhaW5lckJyZWFrTGVhc2VFeGNlcHRpb25IZWFkZXJzLFxuICAgIENvbnRhaW5lckJyZWFrTGVhc2VIZWFkZXJzOiBDb250YWluZXJCcmVha0xlYXNlSGVhZGVycyxcbiAgICBDb250YWluZXJDaGFuZ2VMZWFzZUV4Y2VwdGlvbkhlYWRlcnM6IENvbnRhaW5lckNoYW5nZUxlYXNlRXhjZXB0aW9uSGVhZGVycyxcbiAgICBDb250YWluZXJDaGFuZ2VMZWFzZUhlYWRlcnM6IENvbnRhaW5lckNoYW5nZUxlYXNlSGVhZGVycyxcbiAgICBDb250YWluZXJDcmVhdGVFeGNlcHRpb25IZWFkZXJzOiBDb250YWluZXJDcmVhdGVFeGNlcHRpb25IZWFkZXJzLFxuICAgIENvbnRhaW5lckNyZWF0ZUhlYWRlcnM6IENvbnRhaW5lckNyZWF0ZUhlYWRlcnMsXG4gICAgQ29udGFpbmVyRGVsZXRlRXhjZXB0aW9uSGVhZGVyczogQ29udGFpbmVyRGVsZXRlRXhjZXB0aW9uSGVhZGVycyxcbiAgICBDb250YWluZXJEZWxldGVIZWFkZXJzOiBDb250YWluZXJEZWxldGVIZWFkZXJzLFxuICAgIENvbnRhaW5lckZpbHRlckJsb2JzRXhjZXB0aW9uSGVhZGVyczogQ29udGFpbmVyRmlsdGVyQmxvYnNFeGNlcHRpb25IZWFkZXJzLFxuICAgIENvbnRhaW5lckZpbHRlckJsb2JzSGVhZGVyczogQ29udGFpbmVyRmlsdGVyQmxvYnNIZWFkZXJzLFxuICAgIENvbnRhaW5lckdldEFjY2Vzc1BvbGljeUV4Y2VwdGlvbkhlYWRlcnM6IENvbnRhaW5lckdldEFjY2Vzc1BvbGljeUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQ29udGFpbmVyR2V0QWNjZXNzUG9saWN5SGVhZGVyczogQ29udGFpbmVyR2V0QWNjZXNzUG9saWN5SGVhZGVycyxcbiAgICBDb250YWluZXJHZXRBY2NvdW50SW5mb0V4Y2VwdGlvbkhlYWRlcnM6IENvbnRhaW5lckdldEFjY291bnRJbmZvRXhjZXB0aW9uSGVhZGVycyxcbiAgICBDb250YWluZXJHZXRBY2NvdW50SW5mb0hlYWRlcnM6IENvbnRhaW5lckdldEFjY291bnRJbmZvSGVhZGVycyxcbiAgICBDb250YWluZXJHZXRQcm9wZXJ0aWVzRXhjZXB0aW9uSGVhZGVyczogQ29udGFpbmVyR2V0UHJvcGVydGllc0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQ29udGFpbmVyR2V0UHJvcGVydGllc0hlYWRlcnM6IENvbnRhaW5lckdldFByb3BlcnRpZXNIZWFkZXJzLFxuICAgIENvbnRhaW5lckl0ZW06IENvbnRhaW5lckl0ZW0sXG4gICAgQ29udGFpbmVyTGlzdEJsb2JGbGF0U2VnbWVudEV4Y2VwdGlvbkhlYWRlcnM6IENvbnRhaW5lckxpc3RCbG9iRmxhdFNlZ21lbnRFeGNlcHRpb25IZWFkZXJzLFxuICAgIENvbnRhaW5lckxpc3RCbG9iRmxhdFNlZ21lbnRIZWFkZXJzOiBDb250YWluZXJMaXN0QmxvYkZsYXRTZWdtZW50SGVhZGVycyxcbiAgICBDb250YWluZXJMaXN0QmxvYkhpZXJhcmNoeVNlZ21lbnRFeGNlcHRpb25IZWFkZXJzOiBDb250YWluZXJMaXN0QmxvYkhpZXJhcmNoeVNlZ21lbnRFeGNlcHRpb25IZWFkZXJzLFxuICAgIENvbnRhaW5lckxpc3RCbG9iSGllcmFyY2h5U2VnbWVudEhlYWRlcnM6IENvbnRhaW5lckxpc3RCbG9iSGllcmFyY2h5U2VnbWVudEhlYWRlcnMsXG4gICAgQ29udGFpbmVyUHJvcGVydGllczogQ29udGFpbmVyUHJvcGVydGllcyxcbiAgICBDb250YWluZXJSZWxlYXNlTGVhc2VFeGNlcHRpb25IZWFkZXJzOiBDb250YWluZXJSZWxlYXNlTGVhc2VFeGNlcHRpb25IZWFkZXJzLFxuICAgIENvbnRhaW5lclJlbGVhc2VMZWFzZUhlYWRlcnM6IENvbnRhaW5lclJlbGVhc2VMZWFzZUhlYWRlcnMsXG4gICAgQ29udGFpbmVyUmVuYW1lRXhjZXB0aW9uSGVhZGVyczogQ29udGFpbmVyUmVuYW1lRXhjZXB0aW9uSGVhZGVycyxcbiAgICBDb250YWluZXJSZW5hbWVIZWFkZXJzOiBDb250YWluZXJSZW5hbWVIZWFkZXJzLFxuICAgIENvbnRhaW5lclJlbmV3TGVhc2VFeGNlcHRpb25IZWFkZXJzOiBDb250YWluZXJSZW5ld0xlYXNlRXhjZXB0aW9uSGVhZGVycyxcbiAgICBDb250YWluZXJSZW5ld0xlYXNlSGVhZGVyczogQ29udGFpbmVyUmVuZXdMZWFzZUhlYWRlcnMsXG4gICAgQ29udGFpbmVyUmVzdG9yZUV4Y2VwdGlvbkhlYWRlcnM6IENvbnRhaW5lclJlc3RvcmVFeGNlcHRpb25IZWFkZXJzLFxuICAgIENvbnRhaW5lclJlc3RvcmVIZWFkZXJzOiBDb250YWluZXJSZXN0b3JlSGVhZGVycyxcbiAgICBDb250YWluZXJTZXRBY2Nlc3NQb2xpY3lFeGNlcHRpb25IZWFkZXJzOiBDb250YWluZXJTZXRBY2Nlc3NQb2xpY3lFeGNlcHRpb25IZWFkZXJzLFxuICAgIENvbnRhaW5lclNldEFjY2Vzc1BvbGljeUhlYWRlcnM6IENvbnRhaW5lclNldEFjY2Vzc1BvbGljeUhlYWRlcnMsXG4gICAgQ29udGFpbmVyU2V0TWV0YWRhdGFFeGNlcHRpb25IZWFkZXJzOiBDb250YWluZXJTZXRNZXRhZGF0YUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQ29udGFpbmVyU2V0TWV0YWRhdGFIZWFkZXJzOiBDb250YWluZXJTZXRNZXRhZGF0YUhlYWRlcnMsXG4gICAgQ29udGFpbmVyU3VibWl0QmF0Y2hFeGNlcHRpb25IZWFkZXJzOiBDb250YWluZXJTdWJtaXRCYXRjaEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQ29udGFpbmVyU3VibWl0QmF0Y2hIZWFkZXJzOiBDb250YWluZXJTdWJtaXRCYXRjaEhlYWRlcnMsXG4gICAgQ29yc1J1bGU6IENvcnNSdWxlLFxuICAgIERlbGltaXRlZFRleHRDb25maWd1cmF0aW9uOiBEZWxpbWl0ZWRUZXh0Q29uZmlndXJhdGlvbixcbiAgICBGaWx0ZXJCbG9iSXRlbTogRmlsdGVyQmxvYkl0ZW0sXG4gICAgRmlsdGVyQmxvYlNlZ21lbnQ6IEZpbHRlckJsb2JTZWdtZW50LFxuICAgIEdlb1JlcGxpY2F0aW9uOiBHZW9SZXBsaWNhdGlvbixcbiAgICBKc29uVGV4dENvbmZpZ3VyYXRpb246IEpzb25UZXh0Q29uZmlndXJhdGlvbixcbiAgICBLZXlJbmZvOiBLZXlJbmZvLFxuICAgIExpc3RCbG9ic0ZsYXRTZWdtZW50UmVzcG9uc2U6IExpc3RCbG9ic0ZsYXRTZWdtZW50UmVzcG9uc2UsXG4gICAgTGlzdEJsb2JzSGllcmFyY2h5U2VnbWVudFJlc3BvbnNlOiBMaXN0QmxvYnNIaWVyYXJjaHlTZWdtZW50UmVzcG9uc2UsXG4gICAgTGlzdENvbnRhaW5lcnNTZWdtZW50UmVzcG9uc2U6IExpc3RDb250YWluZXJzU2VnbWVudFJlc3BvbnNlLFxuICAgIExvZ2dpbmc6IExvZ2dpbmcsXG4gICAgTWV0cmljczogTWV0cmljcyxcbiAgICBQYWdlQmxvYkNsZWFyUGFnZXNFeGNlcHRpb25IZWFkZXJzOiBQYWdlQmxvYkNsZWFyUGFnZXNFeGNlcHRpb25IZWFkZXJzLFxuICAgIFBhZ2VCbG9iQ2xlYXJQYWdlc0hlYWRlcnM6IFBhZ2VCbG9iQ2xlYXJQYWdlc0hlYWRlcnMsXG4gICAgUGFnZUJsb2JDb3B5SW5jcmVtZW50YWxFeGNlcHRpb25IZWFkZXJzOiBQYWdlQmxvYkNvcHlJbmNyZW1lbnRhbEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgUGFnZUJsb2JDb3B5SW5jcmVtZW50YWxIZWFkZXJzOiBQYWdlQmxvYkNvcHlJbmNyZW1lbnRhbEhlYWRlcnMsXG4gICAgUGFnZUJsb2JDcmVhdGVFeGNlcHRpb25IZWFkZXJzOiBQYWdlQmxvYkNyZWF0ZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgUGFnZUJsb2JDcmVhdGVIZWFkZXJzOiBQYWdlQmxvYkNyZWF0ZUhlYWRlcnMsXG4gICAgUGFnZUJsb2JHZXRQYWdlUmFuZ2VzRGlmZkV4Y2VwdGlvbkhlYWRlcnM6IFBhZ2VCbG9iR2V0UGFnZVJhbmdlc0RpZmZFeGNlcHRpb25IZWFkZXJzLFxuICAgIFBhZ2VCbG9iR2V0UGFnZVJhbmdlc0RpZmZIZWFkZXJzOiBQYWdlQmxvYkdldFBhZ2VSYW5nZXNEaWZmSGVhZGVycyxcbiAgICBQYWdlQmxvYkdldFBhZ2VSYW5nZXNFeGNlcHRpb25IZWFkZXJzOiBQYWdlQmxvYkdldFBhZ2VSYW5nZXNFeGNlcHRpb25IZWFkZXJzLFxuICAgIFBhZ2VCbG9iR2V0UGFnZVJhbmdlc0hlYWRlcnM6IFBhZ2VCbG9iR2V0UGFnZVJhbmdlc0hlYWRlcnMsXG4gICAgUGFnZUJsb2JSZXNpemVFeGNlcHRpb25IZWFkZXJzOiBQYWdlQmxvYlJlc2l6ZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgUGFnZUJsb2JSZXNpemVIZWFkZXJzOiBQYWdlQmxvYlJlc2l6ZUhlYWRlcnMsXG4gICAgUGFnZUJsb2JVcGRhdGVTZXF1ZW5jZU51bWJlckV4Y2VwdGlvbkhlYWRlcnM6IFBhZ2VCbG9iVXBkYXRlU2VxdWVuY2VOdW1iZXJFeGNlcHRpb25IZWFkZXJzLFxuICAgIFBhZ2VCbG9iVXBkYXRlU2VxdWVuY2VOdW1iZXJIZWFkZXJzOiBQYWdlQmxvYlVwZGF0ZVNlcXVlbmNlTnVtYmVySGVhZGVycyxcbiAgICBQYWdlQmxvYlVwbG9hZFBhZ2VzRXhjZXB0aW9uSGVhZGVyczogUGFnZUJsb2JVcGxvYWRQYWdlc0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgUGFnZUJsb2JVcGxvYWRQYWdlc0Zyb21VUkxFeGNlcHRpb25IZWFkZXJzOiBQYWdlQmxvYlVwbG9hZFBhZ2VzRnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgUGFnZUJsb2JVcGxvYWRQYWdlc0Zyb21VUkxIZWFkZXJzOiBQYWdlQmxvYlVwbG9hZFBhZ2VzRnJvbVVSTEhlYWRlcnMsXG4gICAgUGFnZUJsb2JVcGxvYWRQYWdlc0hlYWRlcnM6IFBhZ2VCbG9iVXBsb2FkUGFnZXNIZWFkZXJzLFxuICAgIFBhZ2VMaXN0OiBQYWdlTGlzdCxcbiAgICBQYWdlUmFuZ2U6IFBhZ2VSYW5nZSxcbiAgICBRdWVyeUZvcm1hdDogUXVlcnlGb3JtYXQsXG4gICAgUXVlcnlSZXF1ZXN0OiBRdWVyeVJlcXVlc3QsXG4gICAgUXVlcnlTZXJpYWxpemF0aW9uOiBRdWVyeVNlcmlhbGl6YXRpb24sXG4gICAgUmV0ZW50aW9uUG9saWN5OiBSZXRlbnRpb25Qb2xpY3ksXG4gICAgU2VydmljZUZpbHRlckJsb2JzRXhjZXB0aW9uSGVhZGVyczogU2VydmljZUZpbHRlckJsb2JzRXhjZXB0aW9uSGVhZGVycyxcbiAgICBTZXJ2aWNlRmlsdGVyQmxvYnNIZWFkZXJzOiBTZXJ2aWNlRmlsdGVyQmxvYnNIZWFkZXJzLFxuICAgIFNlcnZpY2VHZXRBY2NvdW50SW5mb0V4Y2VwdGlvbkhlYWRlcnM6IFNlcnZpY2VHZXRBY2NvdW50SW5mb0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgU2VydmljZUdldEFjY291bnRJbmZvSGVhZGVyczogU2VydmljZUdldEFjY291bnRJbmZvSGVhZGVycyxcbiAgICBTZXJ2aWNlR2V0UHJvcGVydGllc0V4Y2VwdGlvbkhlYWRlcnM6IFNlcnZpY2VHZXRQcm9wZXJ0aWVzRXhjZXB0aW9uSGVhZGVycyxcbiAgICBTZXJ2aWNlR2V0UHJvcGVydGllc0hlYWRlcnM6IFNlcnZpY2VHZXRQcm9wZXJ0aWVzSGVhZGVycyxcbiAgICBTZXJ2aWNlR2V0U3RhdGlzdGljc0V4Y2VwdGlvbkhlYWRlcnM6IFNlcnZpY2VHZXRTdGF0aXN0aWNzRXhjZXB0aW9uSGVhZGVycyxcbiAgICBTZXJ2aWNlR2V0U3RhdGlzdGljc0hlYWRlcnM6IFNlcnZpY2VHZXRTdGF0aXN0aWNzSGVhZGVycyxcbiAgICBTZXJ2aWNlR2V0VXNlckRlbGVnYXRpb25LZXlFeGNlcHRpb25IZWFkZXJzOiBTZXJ2aWNlR2V0VXNlckRlbGVnYXRpb25LZXlFeGNlcHRpb25IZWFkZXJzLFxuICAgIFNlcnZpY2VHZXRVc2VyRGVsZWdhdGlvbktleUhlYWRlcnM6IFNlcnZpY2VHZXRVc2VyRGVsZWdhdGlvbktleUhlYWRlcnMsXG4gICAgU2VydmljZUxpc3RDb250YWluZXJzU2VnbWVudEV4Y2VwdGlvbkhlYWRlcnM6IFNlcnZpY2VMaXN0Q29udGFpbmVyc1NlZ21lbnRFeGNlcHRpb25IZWFkZXJzLFxuICAgIFNlcnZpY2VMaXN0Q29udGFpbmVyc1NlZ21lbnRIZWFkZXJzOiBTZXJ2aWNlTGlzdENvbnRhaW5lcnNTZWdtZW50SGVhZGVycyxcbiAgICBTZXJ2aWNlU2V0UHJvcGVydGllc0V4Y2VwdGlvbkhlYWRlcnM6IFNlcnZpY2VTZXRQcm9wZXJ0aWVzRXhjZXB0aW9uSGVhZGVycyxcbiAgICBTZXJ2aWNlU2V0UHJvcGVydGllc0hlYWRlcnM6IFNlcnZpY2VTZXRQcm9wZXJ0aWVzSGVhZGVycyxcbiAgICBTZXJ2aWNlU3VibWl0QmF0Y2hFeGNlcHRpb25IZWFkZXJzOiBTZXJ2aWNlU3VibWl0QmF0Y2hFeGNlcHRpb25IZWFkZXJzLFxuICAgIFNlcnZpY2VTdWJtaXRCYXRjaEhlYWRlcnM6IFNlcnZpY2VTdWJtaXRCYXRjaEhlYWRlcnMsXG4gICAgU2lnbmVkSWRlbnRpZmllcjogU2lnbmVkSWRlbnRpZmllcixcbiAgICBTdGF0aWNXZWJzaXRlOiBTdGF0aWNXZWJzaXRlLFxuICAgIFN0b3JhZ2VFcnJvcjogU3RvcmFnZUVycm9yLFxuICAgIFVzZXJEZWxlZ2F0aW9uS2V5OiBVc2VyRGVsZWdhdGlvbktleVxufSk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAqXG4gKiBDb2RlIGdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEF1dG9SZXN0IENvZGUgR2VuZXJhdG9yLlxuICogQ2hhbmdlcyBtYXkgY2F1c2UgaW5jb3JyZWN0IGJlaGF2aW9yIGFuZCB3aWxsIGJlIGxvc3QgaWYgdGhlIGNvZGUgaXMgcmVnZW5lcmF0ZWQuXG4gKi9cbmNvbnN0IGNvbnRlbnRUeXBlID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJjb250ZW50VHlwZVwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcImFwcGxpY2F0aW9uL3htbFwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJDb250ZW50LVR5cGVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGJsb2JTZXJ2aWNlUHJvcGVydGllcyA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImJsb2JTZXJ2aWNlUHJvcGVydGllc1wiLFxuICAgIG1hcHBlcjogQmxvYlNlcnZpY2VQcm9wZXJ0aWVzLFxufTtcbmNvbnN0IGFjY2VwdCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImFjY2VwdFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwiYXBwbGljYXRpb24veG1sXCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkFjY2VwdFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgdXJsID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwidXJsXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcInVybFwiLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgeG1sTmFtZTogXCJ1cmxcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHNraXBFbmNvZGluZzogdHJ1ZSxcbn07XG5jb25zdCByZXN0eXBlID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwicmVzdHlwZVwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwic2VydmljZVwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJyZXN0eXBlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb21wID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiY29tcFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwicHJvcGVydGllc1wiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb21wXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCB0aW1lb3V0SW5TZWNvbmRzID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJ0aW1lb3V0SW5TZWNvbmRzXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBjb25zdHJhaW50czoge1xuICAgICAgICAgICAgSW5jbHVzaXZlTWluaW11bTogMCxcbiAgICAgICAgfSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwidGltZW91dFwiLFxuICAgICAgICB4bWxOYW1lOiBcInRpbWVvdXRcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHZlcnNpb24gPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJ2ZXJzaW9uXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCIyMDI0LTExLTA0XCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgcmVxdWVzdElkID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJyZXF1ZXN0SWRcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBhY2NlcHQxID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiYWNjZXB0XCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJhcHBsaWNhdGlvbi94bWxcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQWNjZXB0XCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb21wMSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImNvbXBcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcInN0YXRzXCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbXBcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGNvbXAyID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiY29tcFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwibGlzdFwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb21wXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBwcmVmaXggPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcInByZWZpeFwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwicHJlZml4XCIsXG4gICAgICAgIHhtbE5hbWU6IFwicHJlZml4XCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBtYXJrZXIgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcIm1hcmtlclwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibWFya2VyXCIsXG4gICAgICAgIHhtbE5hbWU6IFwibWFya2VyXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBtYXhQYWdlU2l6ZSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwibWF4UGFnZVNpemVcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGNvbnN0cmFpbnRzOiB7XG4gICAgICAgICAgICBJbmNsdXNpdmVNaW5pbXVtOiAxLFxuICAgICAgICB9LFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJtYXhyZXN1bHRzXCIsXG4gICAgICAgIHhtbE5hbWU6IFwibWF4cmVzdWx0c1wiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgaW5jbHVkZSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiaW5jbHVkZVwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiaW5jbHVkZVwiLFxuICAgICAgICB4bWxOYW1lOiBcImluY2x1ZGVcIixcbiAgICAgICAgeG1sRWxlbWVudE5hbWU6IFwiTGlzdENvbnRhaW5lcnNJbmNsdWRlVHlwZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlNlcXVlbmNlXCIsXG4gICAgICAgICAgICBlbGVtZW50OiB7XG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wibWV0YWRhdGFcIiwgXCJkZWxldGVkXCIsIFwic3lzdGVtXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgY29sbGVjdGlvbkZvcm1hdDogXCJDU1ZcIixcbn07XG5jb25zdCBrZXlJbmZvID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwia2V5SW5mb1wiLFxuICAgIG1hcHBlcjogS2V5SW5mbyxcbn07XG5jb25zdCBjb21wMyA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImNvbXBcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcInVzZXJkZWxlZ2F0aW9ua2V5XCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbXBcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHJlc3R5cGUxID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwicmVzdHlwZVwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwiYWNjb3VudFwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJyZXN0eXBlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBib2R5ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiYm9keVwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJib2R5XCIsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB4bWxOYW1lOiBcImJvZHlcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJlYW1cIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGNvbXA0ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiY29tcFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwiYmF0Y2hcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29tcFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgY29udGVudExlbmd0aCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImNvbnRlbnRMZW5ndGhcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGVudC1MZW5ndGhcIixcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIHhtbE5hbWU6IFwiQ29udGVudC1MZW5ndGhcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IG11bHRpcGFydENvbnRlbnRUeXBlID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwibXVsdGlwYXJ0Q29udGVudFR5cGVcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGVudC1UeXBlXCIsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB4bWxOYW1lOiBcIkNvbnRlbnQtVHlwZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgY29tcDUgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb21wXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJibG9ic1wiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb21wXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCB3aGVyZSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwid2hlcmVcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIndoZXJlXCIsXG4gICAgICAgIHhtbE5hbWU6IFwid2hlcmVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHJlc3R5cGUyID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwicmVzdHlwZVwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwiY29udGFpbmVyXCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcInJlc3R5cGVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IG1ldGFkYXRhID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJtZXRhZGF0YVwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1tZXRhXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1tZXRhXCIsXG4gICAgICAgIGhlYWRlckNvbGxlY3Rpb25QcmVmaXg6IFwieC1tcy1tZXRhLVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIkRpY3Rpb25hcnlcIixcbiAgICAgICAgICAgIHZhbHVlOiB7IHR5cGU6IHsgbmFtZTogXCJTdHJpbmdcIiB9IH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBhY2Nlc3MgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcImFjY2Vzc1wiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLXB1YmxpYy1hY2Nlc3NcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2ItcHVibGljLWFjY2Vzc1wiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcImNvbnRhaW5lclwiLCBcImJsb2JcIl0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBkZWZhdWx0RW5jcnlwdGlvblNjb3BlID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcbiAgICAgICAgXCJvcHRpb25zXCIsXG4gICAgICAgIFwiY29udGFpbmVyRW5jcnlwdGlvblNjb3BlXCIsXG4gICAgICAgIFwiZGVmYXVsdEVuY3J5cHRpb25TY29wZVwiLFxuICAgIF0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZGVmYXVsdC1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1kZWZhdWx0LWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHByZXZlbnRFbmNyeXB0aW9uU2NvcGVPdmVycmlkZSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXG4gICAgICAgIFwib3B0aW9uc1wiLFxuICAgICAgICBcImNvbnRhaW5lckVuY3J5cHRpb25TY29wZVwiLFxuICAgICAgICBcInByZXZlbnRFbmNyeXB0aW9uU2NvcGVPdmVycmlkZVwiLFxuICAgIF0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZGVueS1lbmNyeXB0aW9uLXNjb3BlLW92ZXJyaWRlXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1kZW55LWVuY3J5cHRpb24tc2NvcGUtb3ZlcnJpZGVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBsZWFzZUlkID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJsZWFzZUFjY2Vzc0NvbmRpdGlvbnNcIiwgXCJsZWFzZUlkXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxlYXNlLWlkXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1sZWFzZS1pZFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgaWZNb2RpZmllZFNpbmNlID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnNcIiwgXCJpZk1vZGlmaWVkU2luY2VcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIklmLU1vZGlmaWVkLVNpbmNlXCIsXG4gICAgICAgIHhtbE5hbWU6IFwiSWYtTW9kaWZpZWQtU2luY2VcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGlmVW5tb2RpZmllZFNpbmNlID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnNcIiwgXCJpZlVubW9kaWZpZWRTaW5jZVwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiSWYtVW5tb2RpZmllZC1TaW5jZVwiLFxuICAgICAgICB4bWxOYW1lOiBcIklmLVVubW9kaWZpZWQtU2luY2VcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGNvbXA2ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiY29tcFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwibWV0YWRhdGFcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29tcFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgY29tcDcgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb21wXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJhY2xcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29tcFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgY29udGFpbmVyQWNsID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJjb250YWluZXJBY2xcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRhaW5lckFjbFwiLFxuICAgICAgICB4bWxOYW1lOiBcIlNpZ25lZElkZW50aWZpZXJzXCIsXG4gICAgICAgIHhtbElzV3JhcHBlZDogdHJ1ZSxcbiAgICAgICAgeG1sRWxlbWVudE5hbWU6IFwiU2lnbmVkSWRlbnRpZmllclwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlNlcXVlbmNlXCIsXG4gICAgICAgICAgICBlbGVtZW50OiB7XG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiU2lnbmVkSWRlbnRpZmllclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgY29tcDggPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb21wXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJ1bmRlbGV0ZVwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb21wXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBkZWxldGVkQ29udGFpbmVyTmFtZSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiZGVsZXRlZENvbnRhaW5lck5hbWVcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZGVsZXRlZC1jb250YWluZXItbmFtZVwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtZGVsZXRlZC1jb250YWluZXItbmFtZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgZGVsZXRlZENvbnRhaW5lclZlcnNpb24gPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcImRlbGV0ZWRDb250YWluZXJWZXJzaW9uXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWRlbGV0ZWQtY29udGFpbmVyLXZlcnNpb25cIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWRlbGV0ZWQtY29udGFpbmVyLXZlcnNpb25cIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGNvbXA5ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiY29tcFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwicmVuYW1lXCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbXBcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHNvdXJjZUNvbnRhaW5lck5hbWUgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJzb3VyY2VDb250YWluZXJOYW1lXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtc291cmNlLWNvbnRhaW5lci1uYW1lXCIsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtc291cmNlLWNvbnRhaW5lci1uYW1lXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBzb3VyY2VMZWFzZUlkID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJzb3VyY2VMZWFzZUlkXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXNvdXJjZS1sZWFzZS1pZFwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtc291cmNlLWxlYXNlLWlkXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb21wMTAgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb21wXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJsZWFzZVwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb21wXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBhY3Rpb24gPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJhY3Rpb25cIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcImFjcXVpcmVcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWFzZS1hY3Rpb25cIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGR1cmF0aW9uID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJkdXJhdGlvblwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWFzZS1kdXJhdGlvblwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGVhc2UtZHVyYXRpb25cIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHByb3Bvc2VkTGVhc2VJZCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwicHJvcG9zZWRMZWFzZUlkXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXByb3Bvc2VkLWxlYXNlLWlkXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1wcm9wb3NlZC1sZWFzZS1pZFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgYWN0aW9uMSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImFjdGlvblwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwicmVsZWFzZVwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxlYXNlLWFjdGlvblwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgbGVhc2VJZDEgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJsZWFzZUlkXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVhc2UtaWRcIixcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1sZWFzZS1pZFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgYWN0aW9uMiA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImFjdGlvblwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwicmVuZXdcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWFzZS1hY3Rpb25cIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGFjdGlvbjMgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJhY3Rpb25cIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcImJyZWFrXCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVhc2UtYWN0aW9uXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBicmVha1BlcmlvZCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiYnJlYWtQZXJpb2RcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVhc2UtYnJlYWstcGVyaW9kXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1sZWFzZS1icmVhay1wZXJpb2RcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGFjdGlvbjQgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJhY3Rpb25cIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcImNoYW5nZVwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxlYXNlLWFjdGlvblwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgcHJvcG9zZWRMZWFzZUlkMSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcInByb3Bvc2VkTGVhc2VJZFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXByb3Bvc2VkLWxlYXNlLWlkXCIsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtcHJvcG9zZWQtbGVhc2UtaWRcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGluY2x1ZGUxID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJpbmNsdWRlXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJpbmNsdWRlXCIsXG4gICAgICAgIHhtbE5hbWU6IFwiaW5jbHVkZVwiLFxuICAgICAgICB4bWxFbGVtZW50TmFtZTogXCJMaXN0QmxvYnNJbmNsdWRlSXRlbVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlNlcXVlbmNlXCIsXG4gICAgICAgICAgICBlbGVtZW50OiB7XG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJjb3B5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRlbGV0ZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibWV0YWRhdGFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwic25hcHNob3RzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInVuY29tbWl0dGVkYmxvYnNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwidmVyc2lvbnNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwidGFnc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJpbW11dGFiaWxpdHlwb2xpY3lcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibGVnYWxob2xkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRlbGV0ZWR3aXRodmVyc2lvbnNcIixcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIGNvbGxlY3Rpb25Gb3JtYXQ6IFwiQ1NWXCIsXG59O1xuY29uc3QgZGVsaW1pdGVyID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiZGVsaW1pdGVyXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRlbGltaXRlclwiLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgeG1sTmFtZTogXCJkZWxpbWl0ZXJcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHNuYXBzaG90ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJzbmFwc2hvdFwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwic25hcHNob3RcIixcbiAgICAgICAgeG1sTmFtZTogXCJzbmFwc2hvdFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgdmVyc2lvbklkID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJ2ZXJzaW9uSWRcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcInZlcnNpb25pZFwiLFxuICAgICAgICB4bWxOYW1lOiBcInZlcnNpb25pZFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgcmFuZ2UgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcInJhbmdlXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJhbmdlXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1yYW5nZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgcmFuZ2VHZXRDb250ZW50TUQ1ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJyYW5nZUdldENvbnRlbnRNRDVcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmFuZ2UtZ2V0LWNvbnRlbnQtbWQ1XCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1yYW5nZS1nZXQtY29udGVudC1tZDVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCByYW5nZUdldENvbnRlbnRDUkM2NCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwicmFuZ2VHZXRDb250ZW50Q1JDNjRcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmFuZ2UtZ2V0LWNvbnRlbnQtY3JjNjRcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJhbmdlLWdldC1jb250ZW50LWNyYzY0XCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgZW5jcnlwdGlvbktleSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiY3BrSW5mb1wiLCBcImVuY3J5cHRpb25LZXlcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1rZXlcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5XCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBlbmNyeXB0aW9uS2V5U2hhMjU2ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJjcGtJbmZvXCIsIFwiZW5jcnlwdGlvbktleVNoYTI1NlwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgZW5jcnlwdGlvbkFsZ29yaXRobSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiY3BrSW5mb1wiLCBcImVuY3J5cHRpb25BbGdvcml0aG1cIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1hbGdvcml0aG1cIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tYWxnb3JpdGhtXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBpZk1hdGNoID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnNcIiwgXCJpZk1hdGNoXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJJZi1NYXRjaFwiLFxuICAgICAgICB4bWxOYW1lOiBcIklmLU1hdGNoXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBpZk5vbmVNYXRjaCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwibW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zXCIsIFwiaWZOb25lTWF0Y2hcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIklmLU5vbmUtTWF0Y2hcIixcbiAgICAgICAgeG1sTmFtZTogXCJJZi1Ob25lLU1hdGNoXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBpZlRhZ3MgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcIm1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uc1wiLCBcImlmVGFnc1wiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1pZi10YWdzXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1pZi10YWdzXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBkZWxldGVTbmFwc2hvdHMgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcImRlbGV0ZVNuYXBzaG90c1wiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1kZWxldGUtc25hcHNob3RzXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1kZWxldGUtc25hcHNob3RzXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wiaW5jbHVkZVwiLCBcIm9ubHlcIl0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBibG9iRGVsZXRlVHlwZSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiYmxvYkRlbGV0ZVR5cGVcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRlbGV0ZXR5cGVcIixcbiAgICAgICAgeG1sTmFtZTogXCJkZWxldGV0eXBlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb21wMTEgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb21wXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJleHBpcnlcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29tcFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgZXhwaXJ5T3B0aW9ucyA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImV4cGlyeU9wdGlvbnNcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1leHBpcnktb3B0aW9uXCIsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXhwaXJ5LW9wdGlvblwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgZXhwaXJlc09uID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJleHBpcmVzT25cIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXhwaXJ5LXRpbWVcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWV4cGlyeS10aW1lXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBibG9iQ2FjaGVDb250cm9sID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJibG9iSHR0cEhlYWRlcnNcIiwgXCJibG9iQ2FjaGVDb250cm9sXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2ItY2FjaGUtY29udHJvbFwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1jYWNoZS1jb250cm9sXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBibG9iQ29udGVudFR5cGUgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcImJsb2JIdHRwSGVhZGVyc1wiLCBcImJsb2JDb250ZW50VHlwZVwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLWNvbnRlbnQtdHlwZVwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1jb250ZW50LXR5cGVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGJsb2JDb250ZW50TUQ1ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJibG9iSHR0cEhlYWRlcnNcIiwgXCJibG9iQ29udGVudE1ENVwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLWNvbnRlbnQtbWQ1XCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLWNvbnRlbnQtbWQ1XCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBibG9iQ29udGVudEVuY29kaW5nID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJibG9iSHR0cEhlYWRlcnNcIiwgXCJibG9iQ29udGVudEVuY29kaW5nXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2ItY29udGVudC1lbmNvZGluZ1wiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1jb250ZW50LWVuY29kaW5nXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBibG9iQ29udGVudExhbmd1YWdlID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJibG9iSHR0cEhlYWRlcnNcIiwgXCJibG9iQ29udGVudExhbmd1YWdlXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2ItY29udGVudC1sYW5ndWFnZVwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1jb250ZW50LWxhbmd1YWdlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBibG9iQ29udGVudERpc3Bvc2l0aW9uID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJibG9iSHR0cEhlYWRlcnNcIiwgXCJibG9iQ29udGVudERpc3Bvc2l0aW9uXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2ItY29udGVudC1kaXNwb3NpdGlvblwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1jb250ZW50LWRpc3Bvc2l0aW9uXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb21wMTIgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb21wXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJpbW11dGFiaWxpdHlQb2xpY2llc1wiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb21wXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBpbW11dGFiaWxpdHlQb2xpY3lFeHBpcnkgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcImltbXV0YWJpbGl0eVBvbGljeUV4cGlyeVwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1pbW11dGFiaWxpdHktcG9saWN5LXVudGlsLWRhdGVcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWltbXV0YWJpbGl0eS1wb2xpY3ktdW50aWwtZGF0ZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgaW1tdXRhYmlsaXR5UG9saWN5TW9kZSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiaW1tdXRhYmlsaXR5UG9saWN5TW9kZVwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1pbW11dGFiaWxpdHktcG9saWN5LW1vZGVcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWltbXV0YWJpbGl0eS1wb2xpY3ktbW9kZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcIk11dGFibGVcIiwgXCJVbmxvY2tlZFwiLCBcIkxvY2tlZFwiXSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGNvbXAxMyA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImNvbXBcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcImxlZ2FsaG9sZFwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb21wXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBsZWdhbEhvbGQgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJsZWdhbEhvbGRcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWdhbC1ob2xkXCIsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGVnYWwtaG9sZFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGVuY3J5cHRpb25TY29wZSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiZW5jcnlwdGlvblNjb3BlXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGNvbXAxNCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImNvbXBcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcInNuYXBzaG90XCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbXBcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHRpZXIgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcInRpZXJcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYWNjZXNzLXRpZXJcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWFjY2Vzcy10aWVyXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1xuICAgICAgICAgICAgICAgIFwiUDRcIixcbiAgICAgICAgICAgICAgICBcIlA2XCIsXG4gICAgICAgICAgICAgICAgXCJQMTBcIixcbiAgICAgICAgICAgICAgICBcIlAxNVwiLFxuICAgICAgICAgICAgICAgIFwiUDIwXCIsXG4gICAgICAgICAgICAgICAgXCJQMzBcIixcbiAgICAgICAgICAgICAgICBcIlA0MFwiLFxuICAgICAgICAgICAgICAgIFwiUDUwXCIsXG4gICAgICAgICAgICAgICAgXCJQNjBcIixcbiAgICAgICAgICAgICAgICBcIlA3MFwiLFxuICAgICAgICAgICAgICAgIFwiUDgwXCIsXG4gICAgICAgICAgICAgICAgXCJIb3RcIixcbiAgICAgICAgICAgICAgICBcIkNvb2xcIixcbiAgICAgICAgICAgICAgICBcIkFyY2hpdmVcIixcbiAgICAgICAgICAgICAgICBcIkNvbGRcIixcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCByZWh5ZHJhdGVQcmlvcml0eSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwicmVoeWRyYXRlUHJpb3JpdHlcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVoeWRyYXRlLXByaW9yaXR5XCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZWh5ZHJhdGUtcHJpb3JpdHlcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJIaWdoXCIsIFwiU3RhbmRhcmRcIl0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBzb3VyY2VJZk1vZGlmaWVkU2luY2UgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1xuICAgICAgICBcIm9wdGlvbnNcIixcbiAgICAgICAgXCJzb3VyY2VNb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnNcIixcbiAgICAgICAgXCJzb3VyY2VJZk1vZGlmaWVkU2luY2VcIixcbiAgICBdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXNvdXJjZS1pZi1tb2RpZmllZC1zaW5jZVwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtc291cmNlLWlmLW1vZGlmaWVkLXNpbmNlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBzb3VyY2VJZlVubW9kaWZpZWRTaW5jZSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXG4gICAgICAgIFwib3B0aW9uc1wiLFxuICAgICAgICBcInNvdXJjZU1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uc1wiLFxuICAgICAgICBcInNvdXJjZUlmVW5tb2RpZmllZFNpbmNlXCIsXG4gICAgXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1zb3VyY2UtaWYtdW5tb2RpZmllZC1zaW5jZVwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtc291cmNlLWlmLXVubW9kaWZpZWQtc2luY2VcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHNvdXJjZUlmTWF0Y2ggPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcInNvdXJjZU1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uc1wiLCBcInNvdXJjZUlmTWF0Y2hcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtc291cmNlLWlmLW1hdGNoXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1zb3VyY2UtaWYtbWF0Y2hcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHNvdXJjZUlmTm9uZU1hdGNoID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcbiAgICAgICAgXCJvcHRpb25zXCIsXG4gICAgICAgIFwic291cmNlTW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zXCIsXG4gICAgICAgIFwic291cmNlSWZOb25lTWF0Y2hcIixcbiAgICBdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXNvdXJjZS1pZi1ub25lLW1hdGNoXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1zb3VyY2UtaWYtbm9uZS1tYXRjaFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3Qgc291cmNlSWZUYWdzID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJzb3VyY2VNb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnNcIiwgXCJzb3VyY2VJZlRhZ3NcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtc291cmNlLWlmLXRhZ3NcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXNvdXJjZS1pZi10YWdzXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb3B5U291cmNlID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiY29weVNvdXJjZVwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvcHktc291cmNlXCIsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29weS1zb3VyY2VcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGJsb2JUYWdzU3RyaW5nID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJibG9iVGFnc1N0cmluZ1wiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy10YWdzXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy10YWdzXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBzZWFsQmxvYiA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwic2VhbEJsb2JcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtc2VhbC1ibG9iXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1zZWFsLWJsb2JcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBsZWdhbEhvbGQxID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJsZWdhbEhvbGRcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVnYWwtaG9sZFwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGVnYWwtaG9sZFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHhNc1JlcXVpcmVzU3luYyA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcInhNc1JlcXVpcmVzU3luY1wiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwidHJ1ZVwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVpcmVzLXN5bmNcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHNvdXJjZUNvbnRlbnRNRDUgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcInNvdXJjZUNvbnRlbnRNRDVcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtc291cmNlLWNvbnRlbnQtbWQ1XCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1zb3VyY2UtY29udGVudC1tZDVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGNvcHlTb3VyY2VBdXRob3JpemF0aW9uID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJjb3B5U291cmNlQXV0aG9yaXphdGlvblwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LXNvdXJjZS1hdXRob3JpemF0aW9uXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LXNvdXJjZS1hdXRob3JpemF0aW9uXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb3B5U291cmNlVGFncyA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiY29weVNvdXJjZVRhZ3NcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1zb3VyY2UtdGFnLW9wdGlvblwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29weS1zb3VyY2UtdGFnLW9wdGlvblwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcIlJFUExBQ0VcIiwgXCJDT1BZXCJdLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgY29tcDE1ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiY29tcFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwiY29weVwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb21wXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb3B5QWN0aW9uQWJvcnRDb25zdGFudCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImNvcHlBY3Rpb25BYm9ydENvbnN0YW50XCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJhYm9ydFwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvcHktYWN0aW9uXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb3B5SWQgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb3B5SWRcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29weWlkXCIsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB4bWxOYW1lOiBcImNvcHlpZFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgY29tcDE2ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiY29tcFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwidGllclwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb21wXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCB0aWVyMSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcInRpZXJcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1hY2Nlc3MtdGllclwiLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWFjY2Vzcy10aWVyXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1xuICAgICAgICAgICAgICAgIFwiUDRcIixcbiAgICAgICAgICAgICAgICBcIlA2XCIsXG4gICAgICAgICAgICAgICAgXCJQMTBcIixcbiAgICAgICAgICAgICAgICBcIlAxNVwiLFxuICAgICAgICAgICAgICAgIFwiUDIwXCIsXG4gICAgICAgICAgICAgICAgXCJQMzBcIixcbiAgICAgICAgICAgICAgICBcIlA0MFwiLFxuICAgICAgICAgICAgICAgIFwiUDUwXCIsXG4gICAgICAgICAgICAgICAgXCJQNjBcIixcbiAgICAgICAgICAgICAgICBcIlA3MFwiLFxuICAgICAgICAgICAgICAgIFwiUDgwXCIsXG4gICAgICAgICAgICAgICAgXCJIb3RcIixcbiAgICAgICAgICAgICAgICBcIkNvb2xcIixcbiAgICAgICAgICAgICAgICBcIkFyY2hpdmVcIixcbiAgICAgICAgICAgICAgICBcIkNvbGRcIixcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBxdWVyeVJlcXVlc3QgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcInF1ZXJ5UmVxdWVzdFwiXSxcbiAgICBtYXBwZXI6IFF1ZXJ5UmVxdWVzdCxcbn07XG5jb25zdCBjb21wMTcgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb21wXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJxdWVyeVwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb21wXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb21wMTggPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb21wXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJ0YWdzXCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbXBcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHRhZ3MgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcInRhZ3NcIl0sXG4gICAgbWFwcGVyOiBCbG9iVGFncyxcbn07XG5jb25zdCB0cmFuc2FjdGlvbmFsQ29udGVudE1ENSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwidHJhbnNhY3Rpb25hbENvbnRlbnRNRDVcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRlbnQtTUQ1XCIsXG4gICAgICAgIHhtbE5hbWU6IFwiQ29udGVudC1NRDVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHRyYW5zYWN0aW9uYWxDb250ZW50Q3JjNjQgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcInRyYW5zYWN0aW9uYWxDb250ZW50Q3JjNjRcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29udGVudC1jcmM2NFwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29udGVudC1jcmM2NFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgYmxvYlR5cGUgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJibG9iVHlwZVwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwiUGFnZUJsb2JcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLXR5cGVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGJsb2JDb250ZW50TGVuZ3RoID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiYmxvYkNvbnRlbnRMZW5ndGhcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLWNvbnRlbnQtbGVuZ3RoXCIsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1jb250ZW50LWxlbmd0aFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgYmxvYlNlcXVlbmNlTnVtYmVyID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJibG9iU2VxdWVuY2VOdW1iZXJcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogMCxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLXNlcXVlbmNlLW51bWJlclwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1zZXF1ZW5jZS1udW1iZXJcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGNvbnRlbnRUeXBlMSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiY29udGVudFR5cGVcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGVudC1UeXBlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBib2R5MSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImJvZHlcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiYm9keVwiLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgeG1sTmFtZTogXCJib2R5XCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyZWFtXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBhY2NlcHQyID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiYWNjZXB0XCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJhcHBsaWNhdGlvbi94bWxcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQWNjZXB0XCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb21wMTkgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb21wXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJwYWdlXCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbXBcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHBhZ2VXcml0ZSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcInBhZ2VXcml0ZVwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwidXBkYXRlXCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcGFnZS13cml0ZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgaWZTZXF1ZW5jZU51bWJlckxlc3NUaGFuT3JFcXVhbFRvID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcbiAgICAgICAgXCJvcHRpb25zXCIsXG4gICAgICAgIFwic2VxdWVuY2VOdW1iZXJBY2Nlc3NDb25kaXRpb25zXCIsXG4gICAgICAgIFwiaWZTZXF1ZW5jZU51bWJlckxlc3NUaGFuT3JFcXVhbFRvXCIsXG4gICAgXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1pZi1zZXF1ZW5jZS1udW1iZXItbGVcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWlmLXNlcXVlbmNlLW51bWJlci1sZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgaWZTZXF1ZW5jZU51bWJlckxlc3NUaGFuID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcbiAgICAgICAgXCJvcHRpb25zXCIsXG4gICAgICAgIFwic2VxdWVuY2VOdW1iZXJBY2Nlc3NDb25kaXRpb25zXCIsXG4gICAgICAgIFwiaWZTZXF1ZW5jZU51bWJlckxlc3NUaGFuXCIsXG4gICAgXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1pZi1zZXF1ZW5jZS1udW1iZXItbHRcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWlmLXNlcXVlbmNlLW51bWJlci1sdFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgaWZTZXF1ZW5jZU51bWJlckVxdWFsVG8gPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1xuICAgICAgICBcIm9wdGlvbnNcIixcbiAgICAgICAgXCJzZXF1ZW5jZU51bWJlckFjY2Vzc0NvbmRpdGlvbnNcIixcbiAgICAgICAgXCJpZlNlcXVlbmNlTnVtYmVyRXF1YWxUb1wiLFxuICAgIF0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtaWYtc2VxdWVuY2UtbnVtYmVyLWVxXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1pZi1zZXF1ZW5jZS1udW1iZXItZXFcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHBhZ2VXcml0ZTEgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJwYWdlV3JpdGVcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcImNsZWFyXCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcGFnZS13cml0ZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3Qgc291cmNlVXJsID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwic291cmNlVXJsXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1zb3VyY2VcIixcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LXNvdXJjZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3Qgc291cmNlUmFuZ2UgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJzb3VyY2VSYW5nZVwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXNvdXJjZS1yYW5nZVwiLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXNvdXJjZS1yYW5nZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3Qgc291cmNlQ29udGVudENyYzY0ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJzb3VyY2VDb250ZW50Q3JjNjRcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtc291cmNlLWNvbnRlbnQtY3JjNjRcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXNvdXJjZS1jb250ZW50LWNyYzY0XCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCByYW5nZTEgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJyYW5nZVwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJhbmdlXCIsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmFuZ2VcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGNvbXAyMCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImNvbXBcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcInBhZ2VsaXN0XCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbXBcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHByZXZzbmFwc2hvdCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwicHJldnNuYXBzaG90XCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJwcmV2c25hcHNob3RcIixcbiAgICAgICAgeG1sTmFtZTogXCJwcmV2c25hcHNob3RcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHByZXZTbmFwc2hvdFVybCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwicHJldlNuYXBzaG90VXJsXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXByZXZpb3VzLXNuYXBzaG90LXVybFwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtcHJldmlvdXMtc25hcHNob3QtdXJsXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBzZXF1ZW5jZU51bWJlckFjdGlvbiA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcInNlcXVlbmNlTnVtYmVyQWN0aW9uXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtc2VxdWVuY2UtbnVtYmVyLWFjdGlvblwiLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXNlcXVlbmNlLW51bWJlci1hY3Rpb25cIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJtYXhcIiwgXCJ1cGRhdGVcIiwgXCJpbmNyZW1lbnRcIl0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb21wMjEgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb21wXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJpbmNyZW1lbnRhbGNvcHlcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29tcFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgYmxvYlR5cGUxID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiYmxvYlR5cGVcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcIkFwcGVuZEJsb2JcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLXR5cGVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGNvbXAyMiA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImNvbXBcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcImFwcGVuZGJsb2NrXCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbXBcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IG1heFNpemUgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcImFwcGVuZFBvc2l0aW9uQWNjZXNzQ29uZGl0aW9uc1wiLCBcIm1heFNpemVcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1jb25kaXRpb24tbWF4c2l6ZVwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1jb25kaXRpb24tbWF4c2l6ZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgYXBwZW5kUG9zaXRpb24gPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1xuICAgICAgICBcIm9wdGlvbnNcIixcbiAgICAgICAgXCJhcHBlbmRQb3NpdGlvbkFjY2Vzc0NvbmRpdGlvbnNcIixcbiAgICAgICAgXCJhcHBlbmRQb3NpdGlvblwiLFxuICAgIF0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1jb25kaXRpb24tYXBwZW5kcG9zXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLWNvbmRpdGlvbi1hcHBlbmRwb3NcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHNvdXJjZVJhbmdlMSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwic291cmNlUmFuZ2VcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtc291cmNlLXJhbmdlXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1zb3VyY2UtcmFuZ2VcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGNvbXAyMyA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImNvbXBcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcInNlYWxcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29tcFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgYmxvYlR5cGUyID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiYmxvYlR5cGVcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcIkJsb2NrQmxvYlwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2ItdHlwZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgY29weVNvdXJjZUJsb2JQcm9wZXJ0aWVzID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJjb3B5U291cmNlQmxvYlByb3BlcnRpZXNcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1zb3VyY2UtYmxvYi1wcm9wZXJ0aWVzXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LXNvdXJjZS1ibG9iLXByb3BlcnRpZXNcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb21wMjQgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb21wXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJibG9ja1wiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb21wXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBibG9ja0lkID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiYmxvY2tJZFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJibG9ja2lkXCIsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB4bWxOYW1lOiBcImJsb2NraWRcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGJsb2NrcyA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImJsb2Nrc1wiLFxuICAgIG1hcHBlcjogQmxvY2tMb29rdXBMaXN0LFxufTtcbmNvbnN0IGNvbXAyNSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImNvbXBcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcImJsb2NrbGlzdFwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb21wXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBsaXN0VHlwZSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImxpc3RUeXBlXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJjb21taXR0ZWRcIixcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiYmxvY2tsaXN0dHlwZVwiLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgeG1sTmFtZTogXCJibG9ja2xpc3R0eXBlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wiY29tbWl0dGVkXCIsIFwidW5jb21taXR0ZWRcIiwgXCJhbGxcIl0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5cbi8qXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAqXG4gKiBDb2RlIGdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEF1dG9SZXN0IENvZGUgR2VuZXJhdG9yLlxuICogQ2hhbmdlcyBtYXkgY2F1c2UgaW5jb3JyZWN0IGJlaGF2aW9yIGFuZCB3aWxsIGJlIGxvc3QgaWYgdGhlIGNvZGUgaXMgcmVnZW5lcmF0ZWQuXG4gKi9cbi8qKiBDbGFzcyBjb250YWluaW5nIFNlcnZpY2Ugb3BlcmF0aW9ucy4gKi9cbmNsYXNzIFNlcnZpY2VJbXBsIHtcbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBjbGFzcyBTZXJ2aWNlIGNsYXNzLlxuICAgICAqIEBwYXJhbSBjbGllbnQgUmVmZXJlbmNlIHRvIHRoZSBzZXJ2aWNlIGNsaWVudFxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGNsaWVudCkge1xuICAgICAgICB0aGlzLmNsaWVudCA9IGNsaWVudDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyBwcm9wZXJ0aWVzIGZvciBhIHN0b3JhZ2UgYWNjb3VudCdzIEJsb2Igc2VydmljZSBlbmRwb2ludCwgaW5jbHVkaW5nIHByb3BlcnRpZXMgZm9yIFN0b3JhZ2VcbiAgICAgKiBBbmFseXRpY3MgYW5kIENPUlMgKENyb3NzLU9yaWdpbiBSZXNvdXJjZSBTaGFyaW5nKSBydWxlc1xuICAgICAqIEBwYXJhbSBibG9iU2VydmljZVByb3BlcnRpZXMgVGhlIFN0b3JhZ2VTZXJ2aWNlIHByb3BlcnRpZXMuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBzZXRQcm9wZXJ0aWVzKGJsb2JTZXJ2aWNlUHJvcGVydGllcywgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBibG9iU2VydmljZVByb3BlcnRpZXMsIG9wdGlvbnMgfSwgc2V0UHJvcGVydGllc09wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBnZXRzIHRoZSBwcm9wZXJ0aWVzIG9mIGEgc3RvcmFnZSBhY2NvdW50J3MgQmxvYiBzZXJ2aWNlLCBpbmNsdWRpbmcgcHJvcGVydGllcyBmb3IgU3RvcmFnZSBBbmFseXRpY3NcbiAgICAgKiBhbmQgQ09SUyAoQ3Jvc3MtT3JpZ2luIFJlc291cmNlIFNoYXJpbmcpIHJ1bGVzLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgZ2V0UHJvcGVydGllcyhvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgZ2V0UHJvcGVydGllc09wZXJhdGlvblNwZWMkMik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyBzdGF0aXN0aWNzIHJlbGF0ZWQgdG8gcmVwbGljYXRpb24gZm9yIHRoZSBCbG9iIHNlcnZpY2UuIEl0IGlzIG9ubHkgYXZhaWxhYmxlIG9uIHRoZVxuICAgICAqIHNlY29uZGFyeSBsb2NhdGlvbiBlbmRwb2ludCB3aGVuIHJlYWQtYWNjZXNzIGdlby1yZWR1bmRhbnQgcmVwbGljYXRpb24gaXMgZW5hYmxlZCBmb3IgdGhlIHN0b3JhZ2VcbiAgICAgKiBhY2NvdW50LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgZ2V0U3RhdGlzdGljcyhvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgZ2V0U3RhdGlzdGljc09wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgTGlzdCBDb250YWluZXJzIFNlZ21lbnQgb3BlcmF0aW9uIHJldHVybnMgYSBsaXN0IG9mIHRoZSBjb250YWluZXJzIHVuZGVyIHRoZSBzcGVjaWZpZWQgYWNjb3VudFxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgbGlzdENvbnRhaW5lcnNTZWdtZW50KG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgb3B0aW9ucyB9LCBsaXN0Q29udGFpbmVyc1NlZ21lbnRPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIGEgdXNlciBkZWxlZ2F0aW9uIGtleSBmb3IgdGhlIEJsb2Igc2VydmljZS4gVGhpcyBpcyBvbmx5IGEgdmFsaWQgb3BlcmF0aW9uIHdoZW4gdXNpbmdcbiAgICAgKiBiZWFyZXIgdG9rZW4gYXV0aGVudGljYXRpb24uXG4gICAgICogQHBhcmFtIGtleUluZm8gS2V5IGluZm9ybWF0aW9uXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBnZXRVc2VyRGVsZWdhdGlvbktleShrZXlJbmZvLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IGtleUluZm8sIG9wdGlvbnMgfSwgZ2V0VXNlckRlbGVnYXRpb25LZXlPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgc2t1IG5hbWUgYW5kIGFjY291bnQga2luZFxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgZ2V0QWNjb3VudEluZm8ob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIGdldEFjY291bnRJbmZvT3BlcmF0aW9uU3BlYyQyKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIEJhdGNoIG9wZXJhdGlvbiBhbGxvd3MgbXVsdGlwbGUgQVBJIGNhbGxzIHRvIGJlIGVtYmVkZGVkIGludG8gYSBzaW5nbGUgSFRUUCByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBjb250ZW50TGVuZ3RoIFRoZSBsZW5ndGggb2YgdGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIG11bHRpcGFydENvbnRlbnRUeXBlIFJlcXVpcmVkLiBUaGUgdmFsdWUgb2YgdGhpcyBoZWFkZXIgbXVzdCBiZSBtdWx0aXBhcnQvbWl4ZWQgd2l0aCBhIGJhdGNoXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kYXJ5LiBFeGFtcGxlIGhlYWRlciB2YWx1ZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT1iYXRjaF88R1VJRD5cbiAgICAgKiBAcGFyYW0gYm9keSBJbml0aWFsIGRhdGFcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIHN1Ym1pdEJhdGNoKGNvbnRlbnRMZW5ndGgsIG11bHRpcGFydENvbnRlbnRUeXBlLCBib2R5LCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IGNvbnRlbnRMZW5ndGgsIG11bHRpcGFydENvbnRlbnRUeXBlLCBib2R5LCBvcHRpb25zIH0sIHN1Ym1pdEJhdGNoT3BlcmF0aW9uU3BlYyQxKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIEZpbHRlciBCbG9icyBvcGVyYXRpb24gZW5hYmxlcyBjYWxsZXJzIHRvIGxpc3QgYmxvYnMgYWNyb3NzIGFsbCBjb250YWluZXJzIHdob3NlIHRhZ3MgbWF0Y2ggYVxuICAgICAqIGdpdmVuIHNlYXJjaCBleHByZXNzaW9uLiAgRmlsdGVyIGJsb2JzIHNlYXJjaGVzIGFjcm9zcyBhbGwgY29udGFpbmVycyB3aXRoaW4gYSBzdG9yYWdlIGFjY291bnQgYnV0XG4gICAgICogY2FuIGJlIHNjb3BlZCB3aXRoaW4gdGhlIGV4cHJlc3Npb24gdG8gYSBzaW5nbGUgY29udGFpbmVyLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgZmlsdGVyQmxvYnMob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIGZpbHRlckJsb2JzT3BlcmF0aW9uU3BlYyQxKTtcbiAgICB9XG59XG4vLyBPcGVyYXRpb24gU3BlY2lmaWNhdGlvbnNcbmNvbnN0IHhtbFNlcmlhbGl6ZXIkNSA9IGNvcmVDbGllbnRfX25hbWVzcGFjZS5jcmVhdGVTZXJpYWxpemVyKE1hcHBlcnMsIC8qIGlzWG1sICovIHRydWUpO1xuY29uc3Qgc2V0UHJvcGVydGllc09wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIvXCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAyOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBTZXJ2aWNlU2V0UHJvcGVydGllc0hlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFNlcnZpY2VTZXRQcm9wZXJ0aWVzRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHJlcXVlc3RCb2R5OiBibG9iU2VydmljZVByb3BlcnRpZXMsXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHJlc3R5cGUsXG4gICAgICAgIGNvbXAsXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIGNvbnRlbnRUeXBlLFxuICAgICAgICBhY2NlcHQsXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3htbDsgY2hhcnNldD11dGYtOFwiLFxuICAgIG1lZGlhVHlwZTogXCJ4bWxcIixcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDUsXG59O1xuY29uc3QgZ2V0UHJvcGVydGllc09wZXJhdGlvblNwZWMkMiA9IHtcbiAgICBwYXRoOiBcIi9cIixcbiAgICBodHRwTWV0aG9kOiBcIkdFVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IEJsb2JTZXJ2aWNlUHJvcGVydGllcyxcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFNlcnZpY2VHZXRQcm9wZXJ0aWVzSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogU2VydmljZUdldFByb3BlcnRpZXNFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHJlc3R5cGUsXG4gICAgICAgIGNvbXAsXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkNSxcbn07XG5jb25zdCBnZXRTdGF0aXN0aWNzT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi9cIixcbiAgICBodHRwTWV0aG9kOiBcIkdFVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IEJsb2JTZXJ2aWNlU3RhdGlzdGljcyxcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFNlcnZpY2VHZXRTdGF0aXN0aWNzSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogU2VydmljZUdldFN0YXRpc3RpY3NFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHJlc3R5cGUsXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIGNvbXAxLFxuICAgIF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDUsXG59O1xuY29uc3QgbGlzdENvbnRhaW5lcnNTZWdtZW50T3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi9cIixcbiAgICBodHRwTWV0aG9kOiBcIkdFVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IExpc3RDb250YWluZXJzU2VnbWVudFJlc3BvbnNlLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogU2VydmljZUxpc3RDb250YWluZXJzU2VnbWVudEhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFNlcnZpY2VMaXN0Q29udGFpbmVyc1NlZ21lbnRFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIGNvbXAyLFxuICAgICAgICBwcmVmaXgsXG4gICAgICAgIG1hcmtlcixcbiAgICAgICAgbWF4UGFnZVNpemUsXG4gICAgICAgIGluY2x1ZGUsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkNSxcbn07XG5jb25zdCBnZXRVc2VyRGVsZWdhdGlvbktleU9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIvXCIsXG4gICAgaHR0cE1ldGhvZDogXCJQT1NUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogVXNlckRlbGVnYXRpb25LZXksXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBTZXJ2aWNlR2V0VXNlckRlbGVnYXRpb25LZXlIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBTZXJ2aWNlR2V0VXNlckRlbGVnYXRpb25LZXlFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcmVxdWVzdEJvZHk6IGtleUluZm8sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHJlc3R5cGUsXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIGNvbXAzLFxuICAgIF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICBjb250ZW50VHlwZSxcbiAgICAgICAgYWNjZXB0LFxuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi94bWw7IGNoYXJzZXQ9dXRmLThcIixcbiAgICBtZWRpYVR5cGU6IFwieG1sXCIsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQ1LFxufTtcbmNvbnN0IGdldEFjY291bnRJbmZvT3BlcmF0aW9uU3BlYyQyID0ge1xuICAgIHBhdGg6IFwiL1wiLFxuICAgIGh0dHBNZXRob2Q6IFwiR0VUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogU2VydmljZUdldEFjY291bnRJbmZvSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogU2VydmljZUdldEFjY291bnRJbmZvRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICBjb21wLFxuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgICAgICByZXN0eXBlMSxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQ1LFxufTtcbmNvbnN0IHN1Ym1pdEJhdGNoT3BlcmF0aW9uU3BlYyQxID0ge1xuICAgIHBhdGg6IFwiL1wiLFxuICAgIGh0dHBNZXRob2Q6IFwiUE9TVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDI6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiB7IG5hbWU6IFwiU3RyZWFtXCIgfSxcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJwYXJzZWRSZXNwb25zZVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFNlcnZpY2VTdWJtaXRCYXRjaEhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFNlcnZpY2VTdWJtaXRCYXRjaEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICByZXF1ZXN0Qm9keTogYm9keSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzLCBjb21wNF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICBhY2NlcHQsXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgbXVsdGlwYXJ0Q29udGVudFR5cGUsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi94bWw7IGNoYXJzZXQ9dXRmLThcIixcbiAgICBtZWRpYVR5cGU6IFwieG1sXCIsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQ1LFxufTtcbmNvbnN0IGZpbHRlckJsb2JzT3BlcmF0aW9uU3BlYyQxID0ge1xuICAgIHBhdGg6IFwiL1wiLFxuICAgIGh0dHBNZXRob2Q6IFwiR0VUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogRmlsdGVyQmxvYlNlZ21lbnQsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBTZXJ2aWNlRmlsdGVyQmxvYnNIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBTZXJ2aWNlRmlsdGVyQmxvYnNFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIG1hcmtlcixcbiAgICAgICAgbWF4UGFnZVNpemUsXG4gICAgICAgIGNvbXA1LFxuICAgICAgICB3aGVyZSxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQ1LFxufTtcblxuLypcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuICpcbiAqIENvZGUgZ2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgQXV0b1Jlc3QgQ29kZSBHZW5lcmF0b3IuXG4gKiBDaGFuZ2VzIG1heSBjYXVzZSBpbmNvcnJlY3QgYmVoYXZpb3IgYW5kIHdpbGwgYmUgbG9zdCBpZiB0aGUgY29kZSBpcyByZWdlbmVyYXRlZC5cbiAqL1xuLyoqIENsYXNzIGNvbnRhaW5pbmcgQ29udGFpbmVyIG9wZXJhdGlvbnMuICovXG5jbGFzcyBDb250YWluZXJJbXBsIHtcbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBjbGFzcyBDb250YWluZXIgY2xhc3MuXG4gICAgICogQHBhcmFtIGNsaWVudCBSZWZlcmVuY2UgdG8gdGhlIHNlcnZpY2UgY2xpZW50XG4gICAgICovXG4gICAgY29uc3RydWN0b3IoY2xpZW50KSB7XG4gICAgICAgIHRoaXMuY2xpZW50ID0gY2xpZW50O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBjcmVhdGVzIGEgbmV3IGNvbnRhaW5lciB1bmRlciB0aGUgc3BlY2lmaWVkIGFjY291bnQuIElmIHRoZSBjb250YWluZXIgd2l0aCB0aGUgc2FtZSBuYW1lIGFscmVhZHlcbiAgICAgKiBleGlzdHMsIHRoZSBvcGVyYXRpb24gZmFpbHNcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGNyZWF0ZShvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgY3JlYXRlT3BlcmF0aW9uU3BlYyQyKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogcmV0dXJucyBhbGwgdXNlci1kZWZpbmVkIG1ldGFkYXRhIGFuZCBzeXN0ZW0gcHJvcGVydGllcyBmb3IgdGhlIHNwZWNpZmllZCBjb250YWluZXIuIFRoZSBkYXRhXG4gICAgICogcmV0dXJuZWQgZG9lcyBub3QgaW5jbHVkZSB0aGUgY29udGFpbmVyJ3MgbGlzdCBvZiBibG9ic1xuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgZ2V0UHJvcGVydGllcyhvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgZ2V0UHJvcGVydGllc09wZXJhdGlvblNwZWMkMSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIG9wZXJhdGlvbiBtYXJrcyB0aGUgc3BlY2lmaWVkIGNvbnRhaW5lciBmb3IgZGVsZXRpb24uIFRoZSBjb250YWluZXIgYW5kIGFueSBibG9icyBjb250YWluZWQgd2l0aGluXG4gICAgICogaXQgYXJlIGxhdGVyIGRlbGV0ZWQgZHVyaW5nIGdhcmJhZ2UgY29sbGVjdGlvblxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgZGVsZXRlKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgb3B0aW9ucyB9LCBkZWxldGVPcGVyYXRpb25TcGVjJDEpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBvcGVyYXRpb24gc2V0cyBvbmUgb3IgbW9yZSB1c2VyLWRlZmluZWQgbmFtZS12YWx1ZSBwYWlycyBmb3IgdGhlIHNwZWNpZmllZCBjb250YWluZXIuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBzZXRNZXRhZGF0YShvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgc2V0TWV0YWRhdGFPcGVyYXRpb25TcGVjJDEpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBnZXRzIHRoZSBwZXJtaXNzaW9ucyBmb3IgdGhlIHNwZWNpZmllZCBjb250YWluZXIuIFRoZSBwZXJtaXNzaW9ucyBpbmRpY2F0ZSB3aGV0aGVyIGNvbnRhaW5lciBkYXRhXG4gICAgICogbWF5IGJlIGFjY2Vzc2VkIHB1YmxpY2x5LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgZ2V0QWNjZXNzUG9saWN5KG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgb3B0aW9ucyB9LCBnZXRBY2Nlc3NQb2xpY3lPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogc2V0cyB0aGUgcGVybWlzc2lvbnMgZm9yIHRoZSBzcGVjaWZpZWQgY29udGFpbmVyLiBUaGUgcGVybWlzc2lvbnMgaW5kaWNhdGUgd2hldGhlciBibG9icyBpbiBhXG4gICAgICogY29udGFpbmVyIG1heSBiZSBhY2Nlc3NlZCBwdWJsaWNseS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIHNldEFjY2Vzc1BvbGljeShvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgc2V0QWNjZXNzUG9saWN5T3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlc3RvcmVzIGEgcHJldmlvdXNseS1kZWxldGVkIGNvbnRhaW5lci5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIHJlc3RvcmUob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIHJlc3RvcmVPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVuYW1lcyBhbiBleGlzdGluZyBjb250YWluZXIuXG4gICAgICogQHBhcmFtIHNvdXJjZUNvbnRhaW5lck5hbWUgUmVxdWlyZWQuICBTcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIGNvbnRhaW5lciB0byByZW5hbWUuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICByZW5hbWUoc291cmNlQ29udGFpbmVyTmFtZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBzb3VyY2VDb250YWluZXJOYW1lLCBvcHRpb25zIH0sIHJlbmFtZU9wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgQmF0Y2ggb3BlcmF0aW9uIGFsbG93cyBtdWx0aXBsZSBBUEkgY2FsbHMgdG8gYmUgZW1iZWRkZWQgaW50byBhIHNpbmdsZSBIVFRQIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIGNvbnRlbnRMZW5ndGggVGhlIGxlbmd0aCBvZiB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gbXVsdGlwYXJ0Q29udGVudFR5cGUgUmVxdWlyZWQuIFRoZSB2YWx1ZSBvZiB0aGlzIGhlYWRlciBtdXN0IGJlIG11bHRpcGFydC9taXhlZCB3aXRoIGEgYmF0Y2hcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRhcnkuIEV4YW1wbGUgaGVhZGVyIHZhbHVlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PWJhdGNoXzxHVUlEPlxuICAgICAqIEBwYXJhbSBib2R5IEluaXRpYWwgZGF0YVxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgc3VibWl0QmF0Y2goY29udGVudExlbmd0aCwgbXVsdGlwYXJ0Q29udGVudFR5cGUsIGJvZHksIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgY29udGVudExlbmd0aCwgbXVsdGlwYXJ0Q29udGVudFR5cGUsIGJvZHksIG9wdGlvbnMgfSwgc3VibWl0QmF0Y2hPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIEZpbHRlciBCbG9icyBvcGVyYXRpb24gZW5hYmxlcyBjYWxsZXJzIHRvIGxpc3QgYmxvYnMgaW4gYSBjb250YWluZXIgd2hvc2UgdGFncyBtYXRjaCBhIGdpdmVuXG4gICAgICogc2VhcmNoIGV4cHJlc3Npb24uICBGaWx0ZXIgYmxvYnMgc2VhcmNoZXMgd2l0aGluIHRoZSBnaXZlbiBjb250YWluZXIuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBmaWx0ZXJCbG9icyhvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgZmlsdGVyQmxvYnNPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogW1VwZGF0ZV0gZXN0YWJsaXNoZXMgYW5kIG1hbmFnZXMgYSBsb2NrIG9uIGEgY29udGFpbmVyIGZvciBkZWxldGUgb3BlcmF0aW9ucy4gVGhlIGxvY2sgZHVyYXRpb24gY2FuXG4gICAgICogYmUgMTUgdG8gNjAgc2Vjb25kcywgb3IgY2FuIGJlIGluZmluaXRlXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBhY3F1aXJlTGVhc2Uob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIGFjcXVpcmVMZWFzZU9wZXJhdGlvblNwZWMkMSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFtVcGRhdGVdIGVzdGFibGlzaGVzIGFuZCBtYW5hZ2VzIGEgbG9jayBvbiBhIGNvbnRhaW5lciBmb3IgZGVsZXRlIG9wZXJhdGlvbnMuIFRoZSBsb2NrIGR1cmF0aW9uIGNhblxuICAgICAqIGJlIDE1IHRvIDYwIHNlY29uZHMsIG9yIGNhbiBiZSBpbmZpbml0ZVxuICAgICAqIEBwYXJhbSBsZWFzZUlkIFNwZWNpZmllcyB0aGUgY3VycmVudCBsZWFzZSBJRCBvbiB0aGUgcmVzb3VyY2UuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICByZWxlYXNlTGVhc2UobGVhc2VJZCwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBsZWFzZUlkLCBvcHRpb25zIH0sIHJlbGVhc2VMZWFzZU9wZXJhdGlvblNwZWMkMSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFtVcGRhdGVdIGVzdGFibGlzaGVzIGFuZCBtYW5hZ2VzIGEgbG9jayBvbiBhIGNvbnRhaW5lciBmb3IgZGVsZXRlIG9wZXJhdGlvbnMuIFRoZSBsb2NrIGR1cmF0aW9uIGNhblxuICAgICAqIGJlIDE1IHRvIDYwIHNlY29uZHMsIG9yIGNhbiBiZSBpbmZpbml0ZVxuICAgICAqIEBwYXJhbSBsZWFzZUlkIFNwZWNpZmllcyB0aGUgY3VycmVudCBsZWFzZSBJRCBvbiB0aGUgcmVzb3VyY2UuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICByZW5ld0xlYXNlKGxlYXNlSWQsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgbGVhc2VJZCwgb3B0aW9ucyB9LCByZW5ld0xlYXNlT3BlcmF0aW9uU3BlYyQxKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogW1VwZGF0ZV0gZXN0YWJsaXNoZXMgYW5kIG1hbmFnZXMgYSBsb2NrIG9uIGEgY29udGFpbmVyIGZvciBkZWxldGUgb3BlcmF0aW9ucy4gVGhlIGxvY2sgZHVyYXRpb24gY2FuXG4gICAgICogYmUgMTUgdG8gNjAgc2Vjb25kcywgb3IgY2FuIGJlIGluZmluaXRlXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBicmVha0xlYXNlKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgb3B0aW9ucyB9LCBicmVha0xlYXNlT3BlcmF0aW9uU3BlYyQxKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogW1VwZGF0ZV0gZXN0YWJsaXNoZXMgYW5kIG1hbmFnZXMgYSBsb2NrIG9uIGEgY29udGFpbmVyIGZvciBkZWxldGUgb3BlcmF0aW9ucy4gVGhlIGxvY2sgZHVyYXRpb24gY2FuXG4gICAgICogYmUgMTUgdG8gNjAgc2Vjb25kcywgb3IgY2FuIGJlIGluZmluaXRlXG4gICAgICogQHBhcmFtIGxlYXNlSWQgU3BlY2lmaWVzIHRoZSBjdXJyZW50IGxlYXNlIElEIG9uIHRoZSByZXNvdXJjZS5cbiAgICAgKiBAcGFyYW0gcHJvcG9zZWRMZWFzZUlkIFByb3Bvc2VkIGxlYXNlIElELCBpbiBhIEdVSUQgc3RyaW5nIGZvcm1hdC4gVGhlIEJsb2Igc2VydmljZSByZXR1cm5zIDQwMFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgKEludmFsaWQgcmVxdWVzdCkgaWYgdGhlIHByb3Bvc2VkIGxlYXNlIElEIGlzIG5vdCBpbiB0aGUgY29ycmVjdCBmb3JtYXQuIFNlZSBHdWlkIENvbnN0cnVjdG9yXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAoU3RyaW5nKSBmb3IgYSBsaXN0IG9mIHZhbGlkIEdVSUQgc3RyaW5nIGZvcm1hdHMuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBjaGFuZ2VMZWFzZShsZWFzZUlkLCBwcm9wb3NlZExlYXNlSWQsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgbGVhc2VJZCwgcHJvcG9zZWRMZWFzZUlkLCBvcHRpb25zIH0sIGNoYW5nZUxlYXNlT3BlcmF0aW9uU3BlYyQxKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogW1VwZGF0ZV0gVGhlIExpc3QgQmxvYnMgb3BlcmF0aW9uIHJldHVybnMgYSBsaXN0IG9mIHRoZSBibG9icyB1bmRlciB0aGUgc3BlY2lmaWVkIGNvbnRhaW5lclxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgbGlzdEJsb2JGbGF0U2VnbWVudChvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgbGlzdEJsb2JGbGF0U2VnbWVudE9wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBbVXBkYXRlXSBUaGUgTGlzdCBCbG9icyBvcGVyYXRpb24gcmV0dXJucyBhIGxpc3Qgb2YgdGhlIGJsb2JzIHVuZGVyIHRoZSBzcGVjaWZpZWQgY29udGFpbmVyXG4gICAgICogQHBhcmFtIGRlbGltaXRlciBXaGVuIHRoZSByZXF1ZXN0IGluY2x1ZGVzIHRoaXMgcGFyYW1ldGVyLCB0aGUgb3BlcmF0aW9uIHJldHVybnMgYSBCbG9iUHJlZml4XG4gICAgICogICAgICAgICAgICAgICAgICBlbGVtZW50IGluIHRoZSByZXNwb25zZSBib2R5IHRoYXQgYWN0cyBhcyBhIHBsYWNlaG9sZGVyIGZvciBhbGwgYmxvYnMgd2hvc2UgbmFtZXMgYmVnaW4gd2l0aCB0aGVcbiAgICAgKiAgICAgICAgICAgICAgICAgIHNhbWUgc3Vic3RyaW5nIHVwIHRvIHRoZSBhcHBlYXJhbmNlIG9mIHRoZSBkZWxpbWl0ZXIgY2hhcmFjdGVyLiBUaGUgZGVsaW1pdGVyIG1heSBiZSBhIHNpbmdsZVxuICAgICAqICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyIG9yIGEgc3RyaW5nLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgbGlzdEJsb2JIaWVyYXJjaHlTZWdtZW50KGRlbGltaXRlciwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBkZWxpbWl0ZXIsIG9wdGlvbnMgfSwgbGlzdEJsb2JIaWVyYXJjaHlTZWdtZW50T3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHNrdSBuYW1lIGFuZCBhY2NvdW50IGtpbmRcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGdldEFjY291bnRJbmZvKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgb3B0aW9ucyB9LCBnZXRBY2NvdW50SW5mb09wZXJhdGlvblNwZWMkMSk7XG4gICAgfVxufVxuLy8gT3BlcmF0aW9uIFNwZWNpZmljYXRpb25zXG5jb25zdCB4bWxTZXJpYWxpemVyJDQgPSBjb3JlQ2xpZW50X19uYW1lc3BhY2UuY3JlYXRlU2VyaWFsaXplcihNYXBwZXJzLCAvKiBpc1htbCAqLyB0cnVlKTtcbmNvbnN0IGNyZWF0ZU9wZXJhdGlvblNwZWMkMiA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDE6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lckNyZWF0ZUhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lckNyZWF0ZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzLCByZXN0eXBlMl0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIG1ldGFkYXRhLFxuICAgICAgICBhY2Nlc3MsXG4gICAgICAgIGRlZmF1bHRFbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgIHByZXZlbnRFbmNyeXB0aW9uU2NvcGVPdmVycmlkZSxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkNCxcbn07XG5jb25zdCBnZXRQcm9wZXJ0aWVzT3BlcmF0aW9uU3BlYyQxID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiR0VUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQ29udGFpbmVyR2V0UHJvcGVydGllc0hlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lckdldFByb3BlcnRpZXNFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbdGltZW91dEluU2Vjb25kcywgcmVzdHlwZTJdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBsZWFzZUlkLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQ0LFxufTtcbmNvbnN0IGRlbGV0ZU9wZXJhdGlvblNwZWMkMSA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX1cIixcbiAgICBodHRwTWV0aG9kOiBcIkRFTEVURVwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDI6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lckRlbGV0ZUhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lckRlbGV0ZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzLCByZXN0eXBlMl0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIGxlYXNlSWQsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDQsXG59O1xuY29uc3Qgc2V0TWV0YWRhdGFPcGVyYXRpb25TcGVjJDEgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJTZXRNZXRhZGF0YUhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lclNldE1ldGFkYXRhRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgICAgICByZXN0eXBlMixcbiAgICAgICAgY29tcDYsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgbWV0YWRhdGEsXG4gICAgICAgIGxlYXNlSWQsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkNCxcbn07XG5jb25zdCBnZXRBY2Nlc3NQb2xpY3lPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiR0VUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjoge1xuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTZXF1ZW5jZVwiLFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB7IG5hbWU6IFwiQ29tcG9zaXRlXCIsIGNsYXNzTmFtZTogXCJTaWduZWRJZGVudGlmaWVyXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNpZ25lZElkZW50aWZpZXJzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJTaWduZWRJZGVudGlmaWVyc1wiLFxuICAgICAgICAgICAgICAgIHhtbElzV3JhcHBlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxFbGVtZW50TmFtZTogXCJTaWduZWRJZGVudGlmaWVyXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQ29udGFpbmVyR2V0QWNjZXNzUG9saWN5SGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQ29udGFpbmVyR2V0QWNjZXNzUG9saWN5RXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgICAgICByZXN0eXBlMixcbiAgICAgICAgY29tcDcsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgbGVhc2VJZCxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkNCxcbn07XG5jb25zdCBzZXRBY2Nlc3NQb2xpY3lPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQ29udGFpbmVyU2V0QWNjZXNzUG9saWN5SGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQ29udGFpbmVyU2V0QWNjZXNzUG9saWN5RXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHJlcXVlc3RCb2R5OiBjb250YWluZXJBY2wsXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIHJlc3R5cGUyLFxuICAgICAgICBjb21wNyxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgY29udGVudFR5cGUsXG4gICAgICAgIGFjY2VwdCxcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2Nlc3MsXG4gICAgICAgIGxlYXNlSWQsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi94bWw7IGNoYXJzZXQ9dXRmLThcIixcbiAgICBtZWRpYVR5cGU6IFwieG1sXCIsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQ0LFxufTtcbmNvbnN0IHJlc3RvcmVPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMToge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQ29udGFpbmVyUmVzdG9yZUhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lclJlc3RvcmVFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIHJlc3R5cGUyLFxuICAgICAgICBjb21wOCxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBkZWxldGVkQ29udGFpbmVyTmFtZSxcbiAgICAgICAgZGVsZXRlZENvbnRhaW5lclZlcnNpb24sXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDQsXG59O1xuY29uc3QgcmVuYW1lT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lclJlbmFtZUhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lclJlbmFtZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFtcbiAgICAgICAgdGltZW91dEluU2Vjb25kcyxcbiAgICAgICAgcmVzdHlwZTIsXG4gICAgICAgIGNvbXA5LFxuICAgIF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIHNvdXJjZUNvbnRhaW5lck5hbWUsXG4gICAgICAgIHNvdXJjZUxlYXNlSWQsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDQsXG59O1xuY29uc3Qgc3VibWl0QmF0Y2hPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUE9TVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDI6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiB7IG5hbWU6IFwiU3RyZWFtXCIgfSxcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJwYXJzZWRSZXNwb25zZVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lclN1Ym1pdEJhdGNoSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQ29udGFpbmVyU3VibWl0QmF0Y2hFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcmVxdWVzdEJvZHk6IGJvZHksXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIGNvbXA0LFxuICAgICAgICByZXN0eXBlMixcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgYWNjZXB0LFxuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGNvbnRlbnRMZW5ndGgsXG4gICAgICAgIG11bHRpcGFydENvbnRlbnRUeXBlLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgY29udGVudFR5cGU6IFwiYXBwbGljYXRpb24veG1sOyBjaGFyc2V0PXV0Zi04XCIsXG4gICAgbWVkaWFUeXBlOiBcInhtbFwiLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkNCxcbn07XG5jb25zdCBmaWx0ZXJCbG9ic09wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJHRVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBGaWx0ZXJCbG9iU2VnbWVudCxcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lckZpbHRlckJsb2JzSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQ29udGFpbmVyRmlsdGVyQmxvYnNFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIG1hcmtlcixcbiAgICAgICAgbWF4UGFnZVNpemUsXG4gICAgICAgIGNvbXA1LFxuICAgICAgICB3aGVyZSxcbiAgICAgICAgcmVzdHlwZTIsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkNCxcbn07XG5jb25zdCBhY3F1aXJlTGVhc2VPcGVyYXRpb25TcGVjJDEgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAxOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJBY3F1aXJlTGVhc2VIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJBY3F1aXJlTGVhc2VFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIHJlc3R5cGUyLFxuICAgICAgICBjb21wMTAsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBkdXJhdGlvbixcbiAgICAgICAgcHJvcG9zZWRMZWFzZUlkLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQ0LFxufTtcbmNvbnN0IHJlbGVhc2VMZWFzZU9wZXJhdGlvblNwZWMkMSA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lclJlbGVhc2VMZWFzZUhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lclJlbGVhc2VMZWFzZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFtcbiAgICAgICAgdGltZW91dEluU2Vjb25kcyxcbiAgICAgICAgcmVzdHlwZTIsXG4gICAgICAgIGNvbXAxMCxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBhY3Rpb24xLFxuICAgICAgICBsZWFzZUlkMSxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkNCxcbn07XG5jb25zdCByZW5ld0xlYXNlT3BlcmF0aW9uU3BlYyQxID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQ29udGFpbmVyUmVuZXdMZWFzZUhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lclJlbmV3TGVhc2VFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIHJlc3R5cGUyLFxuICAgICAgICBjb21wMTAsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgbGVhc2VJZDEsXG4gICAgICAgIGFjdGlvbjIsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDQsXG59O1xuY29uc3QgYnJlYWtMZWFzZU9wZXJhdGlvblNwZWMkMSA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDI6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lckJyZWFrTGVhc2VIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJCcmVha0xlYXNlRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgICAgICByZXN0eXBlMixcbiAgICAgICAgY29tcDEwLFxuICAgIF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIGFjdGlvbjMsXG4gICAgICAgIGJyZWFrUGVyaW9kLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQ0LFxufTtcbmNvbnN0IGNoYW5nZUxlYXNlT3BlcmF0aW9uU3BlYyQxID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQ29udGFpbmVyQ2hhbmdlTGVhc2VIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJDaGFuZ2VMZWFzZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFtcbiAgICAgICAgdGltZW91dEluU2Vjb25kcyxcbiAgICAgICAgcmVzdHlwZTIsXG4gICAgICAgIGNvbXAxMCxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBsZWFzZUlkMSxcbiAgICAgICAgYWN0aW9uNCxcbiAgICAgICAgcHJvcG9zZWRMZWFzZUlkMSxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkNCxcbn07XG5jb25zdCBsaXN0QmxvYkZsYXRTZWdtZW50T3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX1cIixcbiAgICBodHRwTWV0aG9kOiBcIkdFVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IExpc3RCbG9ic0ZsYXRTZWdtZW50UmVzcG9uc2UsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJMaXN0QmxvYkZsYXRTZWdtZW50SGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQ29udGFpbmVyTGlzdEJsb2JGbGF0U2VnbWVudEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFtcbiAgICAgICAgdGltZW91dEluU2Vjb25kcyxcbiAgICAgICAgY29tcDIsXG4gICAgICAgIHByZWZpeCxcbiAgICAgICAgbWFya2VyLFxuICAgICAgICBtYXhQYWdlU2l6ZSxcbiAgICAgICAgcmVzdHlwZTIsXG4gICAgICAgIGluY2x1ZGUxLFxuICAgIF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDQsXG59O1xuY29uc3QgbGlzdEJsb2JIaWVyYXJjaHlTZWdtZW50T3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX1cIixcbiAgICBodHRwTWV0aG9kOiBcIkdFVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IExpc3RCbG9ic0hpZXJhcmNoeVNlZ21lbnRSZXNwb25zZSxcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lckxpc3RCbG9iSGllcmFyY2h5U2VnbWVudEhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lckxpc3RCbG9iSGllcmFyY2h5U2VnbWVudEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFtcbiAgICAgICAgdGltZW91dEluU2Vjb25kcyxcbiAgICAgICAgY29tcDIsXG4gICAgICAgIHByZWZpeCxcbiAgICAgICAgbWFya2VyLFxuICAgICAgICBtYXhQYWdlU2l6ZSxcbiAgICAgICAgcmVzdHlwZTIsXG4gICAgICAgIGluY2x1ZGUxLFxuICAgICAgICBkZWxpbWl0ZXIsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkNCxcbn07XG5jb25zdCBnZXRBY2NvdW50SW5mb09wZXJhdGlvblNwZWMkMSA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX1cIixcbiAgICBodHRwTWV0aG9kOiBcIkdFVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lckdldEFjY291bnRJbmZvSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQ29udGFpbmVyR2V0QWNjb3VudEluZm9FeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIGNvbXAsXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIHJlc3R5cGUxLFxuICAgIF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDQsXG59O1xuXG4vKlxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKlxuICogQ29kZSBnZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBBdXRvUmVzdCBDb2RlIEdlbmVyYXRvci5cbiAqIENoYW5nZXMgbWF5IGNhdXNlIGluY29ycmVjdCBiZWhhdmlvciBhbmQgd2lsbCBiZSBsb3N0IGlmIHRoZSBjb2RlIGlzIHJlZ2VuZXJhdGVkLlxuICovXG4vKiogQ2xhc3MgY29udGFpbmluZyBCbG9iIG9wZXJhdGlvbnMuICovXG5jbGFzcyBCbG9iSW1wbCB7XG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgY2xhc3MgQmxvYiBjbGFzcy5cbiAgICAgKiBAcGFyYW0gY2xpZW50IFJlZmVyZW5jZSB0byB0aGUgc2VydmljZSBjbGllbnRcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihjbGllbnQpIHtcbiAgICAgICAgdGhpcy5jbGllbnQgPSBjbGllbnQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBEb3dubG9hZCBvcGVyYXRpb24gcmVhZHMgb3IgZG93bmxvYWRzIGEgYmxvYiBmcm9tIHRoZSBzeXN0ZW0sIGluY2x1ZGluZyBpdHMgbWV0YWRhdGEgYW5kXG4gICAgICogcHJvcGVydGllcy4gWW91IGNhbiBhbHNvIGNhbGwgRG93bmxvYWQgdG8gcmVhZCBhIHNuYXBzaG90LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgZG93bmxvYWQob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIGRvd25sb2FkT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBHZXQgUHJvcGVydGllcyBvcGVyYXRpb24gcmV0dXJucyBhbGwgdXNlci1kZWZpbmVkIG1ldGFkYXRhLCBzdGFuZGFyZCBIVFRQIHByb3BlcnRpZXMsIGFuZCBzeXN0ZW1cbiAgICAgKiBwcm9wZXJ0aWVzIGZvciB0aGUgYmxvYi4gSXQgZG9lcyBub3QgcmV0dXJuIHRoZSBjb250ZW50IG9mIHRoZSBibG9iLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgZ2V0UHJvcGVydGllcyhvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgZ2V0UHJvcGVydGllc09wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJZiB0aGUgc3RvcmFnZSBhY2NvdW50J3Mgc29mdCBkZWxldGUgZmVhdHVyZSBpcyBkaXNhYmxlZCB0aGVuLCB3aGVuIGEgYmxvYiBpcyBkZWxldGVkLCBpdCBpc1xuICAgICAqIHBlcm1hbmVudGx5IHJlbW92ZWQgZnJvbSB0aGUgc3RvcmFnZSBhY2NvdW50LiBJZiB0aGUgc3RvcmFnZSBhY2NvdW50J3Mgc29mdCBkZWxldGUgZmVhdHVyZSBpc1xuICAgICAqIGVuYWJsZWQsIHRoZW4sIHdoZW4gYSBibG9iIGlzIGRlbGV0ZWQsIGl0IGlzIG1hcmtlZCBmb3IgZGVsZXRpb24gYW5kIGJlY29tZXMgaW5hY2Nlc3NpYmxlXG4gICAgICogaW1tZWRpYXRlbHkuIEhvd2V2ZXIsIHRoZSBibG9iIHNlcnZpY2UgcmV0YWlucyB0aGUgYmxvYiBvciBzbmFwc2hvdCBmb3IgdGhlIG51bWJlciBvZiBkYXlzIHNwZWNpZmllZFxuICAgICAqIGJ5IHRoZSBEZWxldGVSZXRlbnRpb25Qb2xpY3kgc2VjdGlvbiBvZiBbU3RvcmFnZSBzZXJ2aWNlIHByb3BlcnRpZXNdXG4gICAgICogKFNldC1CbG9iLVNlcnZpY2UtUHJvcGVydGllcy5tZCkuIEFmdGVyIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGRheXMgaGFzIHBhc3NlZCwgdGhlIGJsb2IncyBkYXRhIGlzXG4gICAgICogcGVybWFuZW50bHkgcmVtb3ZlZCBmcm9tIHRoZSBzdG9yYWdlIGFjY291bnQuIE5vdGUgdGhhdCB5b3UgY29udGludWUgdG8gYmUgY2hhcmdlZCBmb3IgdGhlXG4gICAgICogc29mdC1kZWxldGVkIGJsb2IncyBzdG9yYWdlIHVudGlsIGl0IGlzIHBlcm1hbmVudGx5IHJlbW92ZWQuIFVzZSB0aGUgTGlzdCBCbG9icyBBUEkgYW5kIHNwZWNpZnkgdGhlXG4gICAgICogXCJpbmNsdWRlPWRlbGV0ZWRcIiBxdWVyeSBwYXJhbWV0ZXIgdG8gZGlzY292ZXIgd2hpY2ggYmxvYnMgYW5kIHNuYXBzaG90cyBoYXZlIGJlZW4gc29mdCBkZWxldGVkLiBZb3VcbiAgICAgKiBjYW4gdGhlbiB1c2UgdGhlIFVuZGVsZXRlIEJsb2IgQVBJIHRvIHJlc3RvcmUgYSBzb2Z0LWRlbGV0ZWQgYmxvYi4gQWxsIG90aGVyIG9wZXJhdGlvbnMgb24gYVxuICAgICAqIHNvZnQtZGVsZXRlZCBibG9iIG9yIHNuYXBzaG90IGNhdXNlcyB0aGUgc2VydmljZSB0byByZXR1cm4gYW4gSFRUUCBzdGF0dXMgY29kZSBvZiA0MDRcbiAgICAgKiAoUmVzb3VyY2VOb3RGb3VuZCkuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBkZWxldGUob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIGRlbGV0ZU9wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBVbmRlbGV0ZSBhIGJsb2IgdGhhdCB3YXMgcHJldmlvdXNseSBzb2Z0IGRlbGV0ZWRcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIHVuZGVsZXRlKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgb3B0aW9ucyB9LCB1bmRlbGV0ZU9wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSB0aW1lIGEgYmxvYiB3aWxsIGV4cGlyZSBhbmQgYmUgZGVsZXRlZC5cbiAgICAgKiBAcGFyYW0gZXhwaXJ5T3B0aW9ucyBSZXF1aXJlZC4gSW5kaWNhdGVzIG1vZGUgb2YgdGhlIGV4cGlyeSB0aW1lXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBzZXRFeHBpcnkoZXhwaXJ5T3B0aW9ucywgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBleHBpcnlPcHRpb25zLCBvcHRpb25zIH0sIHNldEV4cGlyeU9wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgU2V0IEhUVFAgSGVhZGVycyBvcGVyYXRpb24gc2V0cyBzeXN0ZW0gcHJvcGVydGllcyBvbiB0aGUgYmxvYlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgc2V0SHR0cEhlYWRlcnMob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIHNldEh0dHBIZWFkZXJzT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBTZXQgSW1tdXRhYmlsaXR5IFBvbGljeSBvcGVyYXRpb24gc2V0cyB0aGUgaW1tdXRhYmlsaXR5IHBvbGljeSBvbiB0aGUgYmxvYlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgc2V0SW1tdXRhYmlsaXR5UG9saWN5KG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgb3B0aW9ucyB9LCBzZXRJbW11dGFiaWxpdHlQb2xpY3lPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIERlbGV0ZSBJbW11dGFiaWxpdHkgUG9saWN5IG9wZXJhdGlvbiBkZWxldGVzIHRoZSBpbW11dGFiaWxpdHkgcG9saWN5IG9uIHRoZSBibG9iXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBkZWxldGVJbW11dGFiaWxpdHlQb2xpY3kob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIGRlbGV0ZUltbXV0YWJpbGl0eVBvbGljeU9wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgU2V0IExlZ2FsIEhvbGQgb3BlcmF0aW9uIHNldHMgYSBsZWdhbCBob2xkIG9uIHRoZSBibG9iLlxuICAgICAqIEBwYXJhbSBsZWdhbEhvbGQgU3BlY2lmaWVkIGlmIGEgbGVnYWwgaG9sZCBzaG91bGQgYmUgc2V0IG9uIHRoZSBibG9iLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgc2V0TGVnYWxIb2xkKGxlZ2FsSG9sZCwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBsZWdhbEhvbGQsIG9wdGlvbnMgfSwgc2V0TGVnYWxIb2xkT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBTZXQgQmxvYiBNZXRhZGF0YSBvcGVyYXRpb24gc2V0cyB1c2VyLWRlZmluZWQgbWV0YWRhdGEgZm9yIHRoZSBzcGVjaWZpZWQgYmxvYiBhcyBvbmUgb3IgbW9yZVxuICAgICAqIG5hbWUtdmFsdWUgcGFpcnNcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIHNldE1ldGFkYXRhKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgb3B0aW9ucyB9LCBzZXRNZXRhZGF0YU9wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBbVXBkYXRlXSBUaGUgTGVhc2UgQmxvYiBvcGVyYXRpb24gZXN0YWJsaXNoZXMgYW5kIG1hbmFnZXMgYSBsb2NrIG9uIGEgYmxvYiBmb3Igd3JpdGUgYW5kIGRlbGV0ZVxuICAgICAqIG9wZXJhdGlvbnNcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGFjcXVpcmVMZWFzZShvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgYWNxdWlyZUxlYXNlT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFtVcGRhdGVdIFRoZSBMZWFzZSBCbG9iIG9wZXJhdGlvbiBlc3RhYmxpc2hlcyBhbmQgbWFuYWdlcyBhIGxvY2sgb24gYSBibG9iIGZvciB3cml0ZSBhbmQgZGVsZXRlXG4gICAgICogb3BlcmF0aW9uc1xuICAgICAqIEBwYXJhbSBsZWFzZUlkIFNwZWNpZmllcyB0aGUgY3VycmVudCBsZWFzZSBJRCBvbiB0aGUgcmVzb3VyY2UuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICByZWxlYXNlTGVhc2UobGVhc2VJZCwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBsZWFzZUlkLCBvcHRpb25zIH0sIHJlbGVhc2VMZWFzZU9wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBbVXBkYXRlXSBUaGUgTGVhc2UgQmxvYiBvcGVyYXRpb24gZXN0YWJsaXNoZXMgYW5kIG1hbmFnZXMgYSBsb2NrIG9uIGEgYmxvYiBmb3Igd3JpdGUgYW5kIGRlbGV0ZVxuICAgICAqIG9wZXJhdGlvbnNcbiAgICAgKiBAcGFyYW0gbGVhc2VJZCBTcGVjaWZpZXMgdGhlIGN1cnJlbnQgbGVhc2UgSUQgb24gdGhlIHJlc291cmNlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgcmVuZXdMZWFzZShsZWFzZUlkLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IGxlYXNlSWQsIG9wdGlvbnMgfSwgcmVuZXdMZWFzZU9wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBbVXBkYXRlXSBUaGUgTGVhc2UgQmxvYiBvcGVyYXRpb24gZXN0YWJsaXNoZXMgYW5kIG1hbmFnZXMgYSBsb2NrIG9uIGEgYmxvYiBmb3Igd3JpdGUgYW5kIGRlbGV0ZVxuICAgICAqIG9wZXJhdGlvbnNcbiAgICAgKiBAcGFyYW0gbGVhc2VJZCBTcGVjaWZpZXMgdGhlIGN1cnJlbnQgbGVhc2UgSUQgb24gdGhlIHJlc291cmNlLlxuICAgICAqIEBwYXJhbSBwcm9wb3NlZExlYXNlSWQgUHJvcG9zZWQgbGVhc2UgSUQsIGluIGEgR1VJRCBzdHJpbmcgZm9ybWF0LiBUaGUgQmxvYiBzZXJ2aWNlIHJldHVybnMgNDAwXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAoSW52YWxpZCByZXF1ZXN0KSBpZiB0aGUgcHJvcG9zZWQgbGVhc2UgSUQgaXMgbm90IGluIHRoZSBjb3JyZWN0IGZvcm1hdC4gU2VlIEd1aWQgQ29uc3RydWN0b3JcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIChTdHJpbmcpIGZvciBhIGxpc3Qgb2YgdmFsaWQgR1VJRCBzdHJpbmcgZm9ybWF0cy5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGNoYW5nZUxlYXNlKGxlYXNlSWQsIHByb3Bvc2VkTGVhc2VJZCwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBsZWFzZUlkLCBwcm9wb3NlZExlYXNlSWQsIG9wdGlvbnMgfSwgY2hhbmdlTGVhc2VPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogW1VwZGF0ZV0gVGhlIExlYXNlIEJsb2Igb3BlcmF0aW9uIGVzdGFibGlzaGVzIGFuZCBtYW5hZ2VzIGEgbG9jayBvbiBhIGJsb2IgZm9yIHdyaXRlIGFuZCBkZWxldGVcbiAgICAgKiBvcGVyYXRpb25zXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBicmVha0xlYXNlKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgb3B0aW9ucyB9LCBicmVha0xlYXNlT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBDcmVhdGUgU25hcHNob3Qgb3BlcmF0aW9uIGNyZWF0ZXMgYSByZWFkLW9ubHkgc25hcHNob3Qgb2YgYSBibG9iXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBjcmVhdGVTbmFwc2hvdChvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgY3JlYXRlU25hcHNob3RPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIFN0YXJ0IENvcHkgRnJvbSBVUkwgb3BlcmF0aW9uIGNvcGllcyBhIGJsb2Igb3IgYW4gaW50ZXJuZXQgcmVzb3VyY2UgdG8gYSBuZXcgYmxvYi5cbiAgICAgKiBAcGFyYW0gY29weVNvdXJjZSBTcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIHNvdXJjZSBwYWdlIGJsb2Igc25hcHNob3QuIFRoaXMgdmFsdWUgaXMgYSBVUkwgb2YgdXAgdG9cbiAgICAgKiAgICAgICAgICAgICAgICAgICAyIEtCIGluIGxlbmd0aCB0aGF0IHNwZWNpZmllcyBhIHBhZ2UgYmxvYiBzbmFwc2hvdC4gVGhlIHZhbHVlIHNob3VsZCBiZSBVUkwtZW5jb2RlZCBhcyBpdCB3b3VsZFxuICAgICAqICAgICAgICAgICAgICAgICAgIGFwcGVhciBpbiBhIHJlcXVlc3QgVVJJLiBUaGUgc291cmNlIGJsb2IgbXVzdCBlaXRoZXIgYmUgcHVibGljIG9yIG11c3QgYmUgYXV0aGVudGljYXRlZCB2aWEgYSBzaGFyZWRcbiAgICAgKiAgICAgICAgICAgICAgICAgICBhY2Nlc3Mgc2lnbmF0dXJlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgc3RhcnRDb3B5RnJvbVVSTChjb3B5U291cmNlLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IGNvcHlTb3VyY2UsIG9wdGlvbnMgfSwgc3RhcnRDb3B5RnJvbVVSTE9wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgQ29weSBGcm9tIFVSTCBvcGVyYXRpb24gY29waWVzIGEgYmxvYiBvciBhbiBpbnRlcm5ldCByZXNvdXJjZSB0byBhIG5ldyBibG9iLiBJdCB3aWxsIG5vdCByZXR1cm5cbiAgICAgKiBhIHJlc3BvbnNlIHVudGlsIHRoZSBjb3B5IGlzIGNvbXBsZXRlLlxuICAgICAqIEBwYXJhbSBjb3B5U291cmNlIFNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgc291cmNlIHBhZ2UgYmxvYiBzbmFwc2hvdC4gVGhpcyB2YWx1ZSBpcyBhIFVSTCBvZiB1cCB0b1xuICAgICAqICAgICAgICAgICAgICAgICAgIDIgS0IgaW4gbGVuZ3RoIHRoYXQgc3BlY2lmaWVzIGEgcGFnZSBibG9iIHNuYXBzaG90LiBUaGUgdmFsdWUgc2hvdWxkIGJlIFVSTC1lbmNvZGVkIGFzIGl0IHdvdWxkXG4gICAgICogICAgICAgICAgICAgICAgICAgYXBwZWFyIGluIGEgcmVxdWVzdCBVUkkuIFRoZSBzb3VyY2UgYmxvYiBtdXN0IGVpdGhlciBiZSBwdWJsaWMgb3IgbXVzdCBiZSBhdXRoZW50aWNhdGVkIHZpYSBhIHNoYXJlZFxuICAgICAqICAgICAgICAgICAgICAgICAgIGFjY2VzcyBzaWduYXR1cmUuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBjb3B5RnJvbVVSTChjb3B5U291cmNlLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IGNvcHlTb3VyY2UsIG9wdGlvbnMgfSwgY29weUZyb21VUkxPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIEFib3J0IENvcHkgRnJvbSBVUkwgb3BlcmF0aW9uIGFib3J0cyBhIHBlbmRpbmcgQ29weSBGcm9tIFVSTCBvcGVyYXRpb24sIGFuZCBsZWF2ZXMgYSBkZXN0aW5hdGlvblxuICAgICAqIGJsb2Igd2l0aCB6ZXJvIGxlbmd0aCBhbmQgZnVsbCBtZXRhZGF0YS5cbiAgICAgKiBAcGFyYW0gY29weUlkIFRoZSBjb3B5IGlkZW50aWZpZXIgcHJvdmlkZWQgaW4gdGhlIHgtbXMtY29weS1pZCBoZWFkZXIgb2YgdGhlIG9yaWdpbmFsIENvcHkgQmxvYlxuICAgICAqICAgICAgICAgICAgICAgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgYWJvcnRDb3B5RnJvbVVSTChjb3B5SWQsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgY29weUlkLCBvcHRpb25zIH0sIGFib3J0Q29weUZyb21VUkxPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIFNldCBUaWVyIG9wZXJhdGlvbiBzZXRzIHRoZSB0aWVyIG9uIGEgYmxvYi4gVGhlIG9wZXJhdGlvbiBpcyBhbGxvd2VkIG9uIGEgcGFnZSBibG9iIGluIGEgcHJlbWl1bVxuICAgICAqIHN0b3JhZ2UgYWNjb3VudCBhbmQgb24gYSBibG9jayBibG9iIGluIGEgYmxvYiBzdG9yYWdlIGFjY291bnQgKGxvY2FsbHkgcmVkdW5kYW50IHN0b3JhZ2Ugb25seSkuIEFcbiAgICAgKiBwcmVtaXVtIHBhZ2UgYmxvYidzIHRpZXIgZGV0ZXJtaW5lcyB0aGUgYWxsb3dlZCBzaXplLCBJT1BTLCBhbmQgYmFuZHdpZHRoIG9mIHRoZSBibG9iLiBBIGJsb2NrXG4gICAgICogYmxvYidzIHRpZXIgZGV0ZXJtaW5lcyBIb3QvQ29vbC9BcmNoaXZlIHN0b3JhZ2UgdHlwZS4gVGhpcyBvcGVyYXRpb24gZG9lcyBub3QgdXBkYXRlIHRoZSBibG9iJ3NcbiAgICAgKiBFVGFnLlxuICAgICAqIEBwYXJhbSB0aWVyIEluZGljYXRlcyB0aGUgdGllciB0byBiZSBzZXQgb24gdGhlIGJsb2IuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBzZXRUaWVyKHRpZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgdGllciwgb3B0aW9ucyB9LCBzZXRUaWVyT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHNrdSBuYW1lIGFuZCBhY2NvdW50IGtpbmRcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGdldEFjY291bnRJbmZvKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgb3B0aW9ucyB9LCBnZXRBY2NvdW50SW5mb09wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgUXVlcnkgb3BlcmF0aW9uIGVuYWJsZXMgdXNlcnMgdG8gc2VsZWN0L3Byb2plY3Qgb24gYmxvYiBkYXRhIGJ5IHByb3ZpZGluZyBzaW1wbGUgcXVlcnlcbiAgICAgKiBleHByZXNzaW9ucy5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIHF1ZXJ5KG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgb3B0aW9ucyB9LCBxdWVyeU9wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgR2V0IFRhZ3Mgb3BlcmF0aW9uIGVuYWJsZXMgdXNlcnMgdG8gZ2V0IHRoZSB0YWdzIGFzc29jaWF0ZWQgd2l0aCBhIGJsb2IuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBnZXRUYWdzKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgb3B0aW9ucyB9LCBnZXRUYWdzT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBTZXQgVGFncyBvcGVyYXRpb24gZW5hYmxlcyB1c2VycyB0byBzZXQgdGFncyBvbiBhIGJsb2IuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBzZXRUYWdzKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgb3B0aW9ucyB9LCBzZXRUYWdzT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxufVxuLy8gT3BlcmF0aW9uIFNwZWNpZmljYXRpb25zXG5jb25zdCB4bWxTZXJpYWxpemVyJDMgPSBjb3JlQ2xpZW50X19uYW1lc3BhY2UuY3JlYXRlU2VyaWFsaXplcihNYXBwZXJzLCAvKiBpc1htbCAqLyB0cnVlKTtcbmNvbnN0IGRvd25sb2FkT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJHRVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogeyBuYW1lOiBcIlN0cmVhbVwiIH0sXG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwicGFyc2VkUmVzcG9uc2VcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iRG93bmxvYWRIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICAyMDY6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiB7IG5hbWU6IFwiU3RyZWFtXCIgfSxcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJwYXJzZWRSZXNwb25zZVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JEb3dubG9hZEhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JEb3dubG9hZEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFtcbiAgICAgICAgdGltZW91dEluU2Vjb25kcyxcbiAgICAgICAgc25hcHNob3QsXG4gICAgICAgIHZlcnNpb25JZCxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICByYW5nZSxcbiAgICAgICAgcmFuZ2VHZXRDb250ZW50TUQ1LFxuICAgICAgICByYW5nZUdldENvbnRlbnRDUkM2NCxcbiAgICAgICAgZW5jcnlwdGlvbktleSxcbiAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1NixcbiAgICAgICAgZW5jcnlwdGlvbkFsZ29yaXRobSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMyxcbn07XG5jb25zdCBnZXRQcm9wZXJ0aWVzT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJIRUFEXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYkdldFByb3BlcnRpZXNIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iR2V0UHJvcGVydGllc0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFtcbiAgICAgICAgdGltZW91dEluU2Vjb25kcyxcbiAgICAgICAgc25hcHNob3QsXG4gICAgICAgIHZlcnNpb25JZCxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBlbmNyeXB0aW9uS2V5LFxuICAgICAgICBlbmNyeXB0aW9uS2V5U2hhMjU2LFxuICAgICAgICBlbmNyeXB0aW9uQWxnb3JpdGhtLFxuICAgICAgICBpZk1hdGNoLFxuICAgICAgICBpZk5vbmVNYXRjaCxcbiAgICAgICAgaWZUYWdzLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQzLFxufTtcbmNvbnN0IGRlbGV0ZU9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiREVMRVRFXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMjoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYkRlbGV0ZUhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JEZWxldGVFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIHNuYXBzaG90LFxuICAgICAgICB2ZXJzaW9uSWQsXG4gICAgICAgIGJsb2JEZWxldGVUeXBlLFxuICAgIF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIGxlYXNlSWQsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmTWF0Y2gsXG4gICAgICAgIGlmTm9uZU1hdGNoLFxuICAgICAgICBpZlRhZ3MsXG4gICAgICAgIGRlbGV0ZVNuYXBzaG90cyxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMyxcbn07XG5jb25zdCB1bmRlbGV0ZU9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYlVuZGVsZXRlSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYlVuZGVsZXRlRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW3RpbWVvdXRJblNlY29uZHMsIGNvbXA4XSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMyxcbn07XG5jb25zdCBzZXRFeHBpcnlPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JTZXRFeHBpcnlIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iU2V0RXhwaXJ5RXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW3RpbWVvdXRJblNlY29uZHMsIGNvbXAxMV0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIGV4cGlyeU9wdGlvbnMsXG4gICAgICAgIGV4cGlyZXNPbixcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMyxcbn07XG5jb25zdCBzZXRIdHRwSGVhZGVyc09wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYlNldEh0dHBIZWFkZXJzSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYlNldEh0dHBIZWFkZXJzRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW2NvbXAsIHRpbWVvdXRJblNlY29uZHNdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBpZk1hdGNoLFxuICAgICAgICBpZk5vbmVNYXRjaCxcbiAgICAgICAgaWZUYWdzLFxuICAgICAgICBibG9iQ2FjaGVDb250cm9sLFxuICAgICAgICBibG9iQ29udGVudFR5cGUsXG4gICAgICAgIGJsb2JDb250ZW50TUQ1LFxuICAgICAgICBibG9iQ29udGVudEVuY29kaW5nLFxuICAgICAgICBibG9iQ29udGVudExhbmd1YWdlLFxuICAgICAgICBibG9iQ29udGVudERpc3Bvc2l0aW9uLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQzLFxufTtcbmNvbnN0IHNldEltbXV0YWJpbGl0eVBvbGljeU9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYlNldEltbXV0YWJpbGl0eVBvbGljeUhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JTZXRJbW11dGFiaWxpdHlQb2xpY3lFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbdGltZW91dEluU2Vjb25kcywgY29tcDEyXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIGltbXV0YWJpbGl0eVBvbGljeUV4cGlyeSxcbiAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5TW9kZSxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMyxcbn07XG5jb25zdCBkZWxldGVJbW11dGFiaWxpdHlQb2xpY3lPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIkRFTEVURVwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JEZWxldGVJbW11dGFiaWxpdHlQb2xpY3lIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iRGVsZXRlSW1tdXRhYmlsaXR5UG9saWN5RXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW3RpbWVvdXRJblNlY29uZHMsIGNvbXAxMl0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDMsXG59O1xuY29uc3Qgc2V0TGVnYWxIb2xkT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iU2V0TGVnYWxIb2xkSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYlNldExlZ2FsSG9sZEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzLCBjb21wMTNdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBsZWdhbEhvbGQsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDMsXG59O1xuY29uc3Qgc2V0TWV0YWRhdGFPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JTZXRNZXRhZGF0YUhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JTZXRNZXRhZGF0YUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzLCBjb21wNl0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIG1ldGFkYXRhLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBlbmNyeXB0aW9uS2V5LFxuICAgICAgICBlbmNyeXB0aW9uS2V5U2hhMjU2LFxuICAgICAgICBlbmNyeXB0aW9uQWxnb3JpdGhtLFxuICAgICAgICBpZk1hdGNoLFxuICAgICAgICBpZk5vbmVNYXRjaCxcbiAgICAgICAgaWZUYWdzLFxuICAgICAgICBlbmNyeXB0aW9uU2NvcGUsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDMsXG59O1xuY29uc3QgYWNxdWlyZUxlYXNlT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAxOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iQWNxdWlyZUxlYXNlSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYkFjcXVpcmVMZWFzZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzLCBjb21wMTBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGR1cmF0aW9uLFxuICAgICAgICBwcm9wb3NlZExlYXNlSWQsXG4gICAgICAgIGlmTWF0Y2gsXG4gICAgICAgIGlmTm9uZU1hdGNoLFxuICAgICAgICBpZlRhZ3MsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDMsXG59O1xuY29uc3QgcmVsZWFzZUxlYXNlT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iUmVsZWFzZUxlYXNlSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYlJlbGVhc2VMZWFzZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzLCBjb21wMTBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBhY3Rpb24xLFxuICAgICAgICBsZWFzZUlkMSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMyxcbn07XG5jb25zdCByZW5ld0xlYXNlT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iUmVuZXdMZWFzZUhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JSZW5ld0xlYXNlRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW3RpbWVvdXRJblNlY29uZHMsIGNvbXAxMF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIGxlYXNlSWQxLFxuICAgICAgICBhY3Rpb24yLFxuICAgICAgICBpZk1hdGNoLFxuICAgICAgICBpZk5vbmVNYXRjaCxcbiAgICAgICAgaWZUYWdzLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQzLFxufTtcbmNvbnN0IGNoYW5nZUxlYXNlT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iQ2hhbmdlTGVhc2VIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iQ2hhbmdlTGVhc2VFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbdGltZW91dEluU2Vjb25kcywgY29tcDEwXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgbGVhc2VJZDEsXG4gICAgICAgIGFjdGlvbjQsXG4gICAgICAgIHByb3Bvc2VkTGVhc2VJZDEsXG4gICAgICAgIGlmTWF0Y2gsXG4gICAgICAgIGlmTm9uZU1hdGNoLFxuICAgICAgICBpZlRhZ3MsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDMsXG59O1xuY29uc3QgYnJlYWtMZWFzZU9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMjoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYkJyZWFrTGVhc2VIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iQnJlYWtMZWFzZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzLCBjb21wMTBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBhY3Rpb24zLFxuICAgICAgICBicmVha1BlcmlvZCxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMyxcbn07XG5jb25zdCBjcmVhdGVTbmFwc2hvdE9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMToge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYkNyZWF0ZVNuYXBzaG90SGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYkNyZWF0ZVNuYXBzaG90RXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW3RpbWVvdXRJblNlY29uZHMsIGNvbXAxNF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIG1ldGFkYXRhLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBlbmNyeXB0aW9uS2V5LFxuICAgICAgICBlbmNyeXB0aW9uS2V5U2hhMjU2LFxuICAgICAgICBlbmNyeXB0aW9uQWxnb3JpdGhtLFxuICAgICAgICBpZk1hdGNoLFxuICAgICAgICBpZk5vbmVNYXRjaCxcbiAgICAgICAgaWZUYWdzLFxuICAgICAgICBlbmNyeXB0aW9uU2NvcGUsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDMsXG59O1xuY29uc3Qgc3RhcnRDb3B5RnJvbVVSTE9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMjoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYlN0YXJ0Q29weUZyb21VUkxIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iU3RhcnRDb3B5RnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgbWV0YWRhdGEsXG4gICAgICAgIGxlYXNlSWQsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmTWF0Y2gsXG4gICAgICAgIGlmTm9uZU1hdGNoLFxuICAgICAgICBpZlRhZ3MsXG4gICAgICAgIGltbXV0YWJpbGl0eVBvbGljeUV4cGlyeSxcbiAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5TW9kZSxcbiAgICAgICAgdGllcixcbiAgICAgICAgcmVoeWRyYXRlUHJpb3JpdHksXG4gICAgICAgIHNvdXJjZUlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgc291cmNlSWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIHNvdXJjZUlmTWF0Y2gsXG4gICAgICAgIHNvdXJjZUlmTm9uZU1hdGNoLFxuICAgICAgICBzb3VyY2VJZlRhZ3MsXG4gICAgICAgIGNvcHlTb3VyY2UsXG4gICAgICAgIGJsb2JUYWdzU3RyaW5nLFxuICAgICAgICBzZWFsQmxvYixcbiAgICAgICAgbGVnYWxIb2xkMSxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMyxcbn07XG5jb25zdCBjb3B5RnJvbVVSTE9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMjoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYkNvcHlGcm9tVVJMSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYkNvcHlGcm9tVVJMRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW3RpbWVvdXRJblNlY29uZHNdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBtZXRhZGF0YSxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5RXhwaXJ5LFxuICAgICAgICBpbW11dGFiaWxpdHlQb2xpY3lNb2RlLFxuICAgICAgICBlbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgIHRpZXIsXG4gICAgICAgIHNvdXJjZUlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgc291cmNlSWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIHNvdXJjZUlmTWF0Y2gsXG4gICAgICAgIHNvdXJjZUlmTm9uZU1hdGNoLFxuICAgICAgICBjb3B5U291cmNlLFxuICAgICAgICBibG9iVGFnc1N0cmluZyxcbiAgICAgICAgbGVnYWxIb2xkMSxcbiAgICAgICAgeE1zUmVxdWlyZXNTeW5jLFxuICAgICAgICBzb3VyY2VDb250ZW50TUQ1LFxuICAgICAgICBjb3B5U291cmNlQXV0aG9yaXphdGlvbixcbiAgICAgICAgY29weVNvdXJjZVRhZ3MsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDMsXG59O1xuY29uc3QgYWJvcnRDb3B5RnJvbVVSTE9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwNDoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYkFib3J0Q29weUZyb21VUkxIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iQWJvcnRDb3B5RnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFtcbiAgICAgICAgdGltZW91dEluU2Vjb25kcyxcbiAgICAgICAgY29tcDE1LFxuICAgICAgICBjb3B5SWQsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgY29weUFjdGlvbkFib3J0Q29uc3RhbnQsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDMsXG59O1xuY29uc3Qgc2V0VGllck9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYlNldFRpZXJIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICAyMDI6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JTZXRUaWVySGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYlNldFRpZXJFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIHNuYXBzaG90LFxuICAgICAgICB2ZXJzaW9uSWQsXG4gICAgICAgIGNvbXAxNixcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZlRhZ3MsXG4gICAgICAgIHJlaHlkcmF0ZVByaW9yaXR5LFxuICAgICAgICB0aWVyMSxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMyxcbn07XG5jb25zdCBnZXRBY2NvdW50SW5mb09wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiR0VUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYkdldEFjY291bnRJbmZvSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYkdldEFjY291bnRJbmZvRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICBjb21wLFxuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgICAgICByZXN0eXBlMSxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQzLFxufTtcbmNvbnN0IHF1ZXJ5T3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQT1NUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjoge1xuICAgICAgICAgICAgICAgIHR5cGU6IHsgbmFtZTogXCJTdHJlYW1cIiB9LFxuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcInBhcnNlZFJlc3BvbnNlXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYlF1ZXJ5SGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgMjA2OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogeyBuYW1lOiBcIlN0cmVhbVwiIH0sXG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwicGFyc2VkUmVzcG9uc2VcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iUXVlcnlIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iUXVlcnlFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcmVxdWVzdEJvZHk6IHF1ZXJ5UmVxdWVzdCxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFtcbiAgICAgICAgdGltZW91dEluU2Vjb25kcyxcbiAgICAgICAgc25hcHNob3QsXG4gICAgICAgIGNvbXAxNyxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgY29udGVudFR5cGUsXG4gICAgICAgIGFjY2VwdCxcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBlbmNyeXB0aW9uS2V5LFxuICAgICAgICBlbmNyeXB0aW9uS2V5U2hhMjU2LFxuICAgICAgICBlbmNyeXB0aW9uQWxnb3JpdGhtLFxuICAgICAgICBpZk1hdGNoLFxuICAgICAgICBpZk5vbmVNYXRjaCxcbiAgICAgICAgaWZUYWdzLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgY29udGVudFR5cGU6IFwiYXBwbGljYXRpb24veG1sOyBjaGFyc2V0PXV0Zi04XCIsXG4gICAgbWVkaWFUeXBlOiBcInhtbFwiLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMyxcbn07XG5jb25zdCBnZXRUYWdzT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJHRVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBCbG9iVGFncyxcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JHZXRUYWdzSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYkdldFRhZ3NFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIHNuYXBzaG90LFxuICAgICAgICB2ZXJzaW9uSWQsXG4gICAgICAgIGNvbXAxOCxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZlRhZ3MsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDMsXG59O1xuY29uc3Qgc2V0VGFnc09wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwNDoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYlNldFRhZ3NIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iU2V0VGFnc0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICByZXF1ZXN0Qm9keTogdGFncyxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFtcbiAgICAgICAgdGltZW91dEluU2Vjb25kcyxcbiAgICAgICAgdmVyc2lvbklkLFxuICAgICAgICBjb21wMTgsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIGNvbnRlbnRUeXBlLFxuICAgICAgICBhY2NlcHQsXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgaWZUYWdzLFxuICAgICAgICB0cmFuc2FjdGlvbmFsQ29udGVudE1ENSxcbiAgICAgICAgdHJhbnNhY3Rpb25hbENvbnRlbnRDcmM2NCxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3htbDsgY2hhcnNldD11dGYtOFwiLFxuICAgIG1lZGlhVHlwZTogXCJ4bWxcIixcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDMsXG59O1xuXG4vKlxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKlxuICogQ29kZSBnZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBBdXRvUmVzdCBDb2RlIEdlbmVyYXRvci5cbiAqIENoYW5nZXMgbWF5IGNhdXNlIGluY29ycmVjdCBiZWhhdmlvciBhbmQgd2lsbCBiZSBsb3N0IGlmIHRoZSBjb2RlIGlzIHJlZ2VuZXJhdGVkLlxuICovXG4vKiogQ2xhc3MgY29udGFpbmluZyBQYWdlQmxvYiBvcGVyYXRpb25zLiAqL1xuY2xhc3MgUGFnZUJsb2JJbXBsIHtcbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBjbGFzcyBQYWdlQmxvYiBjbGFzcy5cbiAgICAgKiBAcGFyYW0gY2xpZW50IFJlZmVyZW5jZSB0byB0aGUgc2VydmljZSBjbGllbnRcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihjbGllbnQpIHtcbiAgICAgICAgdGhpcy5jbGllbnQgPSBjbGllbnQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBDcmVhdGUgb3BlcmF0aW9uIGNyZWF0ZXMgYSBuZXcgcGFnZSBibG9iLlxuICAgICAqIEBwYXJhbSBjb250ZW50TGVuZ3RoIFRoZSBsZW5ndGggb2YgdGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIGJsb2JDb250ZW50TGVuZ3RoIFRoaXMgaGVhZGVyIHNwZWNpZmllcyB0aGUgbWF4aW11bSBzaXplIGZvciB0aGUgcGFnZSBibG9iLCB1cCB0byAxIFRCLiBUaGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZSBibG9iIHNpemUgbXVzdCBiZSBhbGlnbmVkIHRvIGEgNTEyLWJ5dGUgYm91bmRhcnkuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBjcmVhdGUoY29udGVudExlbmd0aCwgYmxvYkNvbnRlbnRMZW5ndGgsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgY29udGVudExlbmd0aCwgYmxvYkNvbnRlbnRMZW5ndGgsIG9wdGlvbnMgfSwgY3JlYXRlT3BlcmF0aW9uU3BlYyQxKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIFVwbG9hZCBQYWdlcyBvcGVyYXRpb24gd3JpdGVzIGEgcmFuZ2Ugb2YgcGFnZXMgdG8gYSBwYWdlIGJsb2JcbiAgICAgKiBAcGFyYW0gY29udGVudExlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBib2R5IEluaXRpYWwgZGF0YVxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgdXBsb2FkUGFnZXMoY29udGVudExlbmd0aCwgYm9keSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBjb250ZW50TGVuZ3RoLCBib2R5LCBvcHRpb25zIH0sIHVwbG9hZFBhZ2VzT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBDbGVhciBQYWdlcyBvcGVyYXRpb24gY2xlYXJzIGEgc2V0IG9mIHBhZ2VzIGZyb20gYSBwYWdlIGJsb2JcbiAgICAgKiBAcGFyYW0gY29udGVudExlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgY2xlYXJQYWdlcyhjb250ZW50TGVuZ3RoLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IGNvbnRlbnRMZW5ndGgsIG9wdGlvbnMgfSwgY2xlYXJQYWdlc09wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgVXBsb2FkIFBhZ2VzIG9wZXJhdGlvbiB3cml0ZXMgYSByYW5nZSBvZiBwYWdlcyB0byBhIHBhZ2UgYmxvYiB3aGVyZSB0aGUgY29udGVudHMgYXJlIHJlYWQgZnJvbSBhXG4gICAgICogVVJMXG4gICAgICogQHBhcmFtIHNvdXJjZVVybCBTcGVjaWZ5IGEgVVJMIHRvIHRoZSBjb3B5IHNvdXJjZS5cbiAgICAgKiBAcGFyYW0gc291cmNlUmFuZ2UgQnl0ZXMgb2Ygc291cmNlIGRhdGEgaW4gdGhlIHNwZWNpZmllZCByYW5nZS4gVGhlIGxlbmd0aCBvZiB0aGlzIHJhbmdlIHNob3VsZFxuICAgICAqICAgICAgICAgICAgICAgICAgICBtYXRjaCB0aGUgQ29udGVudExlbmd0aCBoZWFkZXIgYW5kIHgtbXMtcmFuZ2UvUmFuZ2UgZGVzdGluYXRpb24gcmFuZ2UgaGVhZGVyLlxuICAgICAqIEBwYXJhbSBjb250ZW50TGVuZ3RoIFRoZSBsZW5ndGggb2YgdGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIHJhbmdlIFRoZSByYW5nZSBvZiBieXRlcyB0byB3aGljaCB0aGUgc291cmNlIHJhbmdlIHdvdWxkIGJlIHdyaXR0ZW4uIFRoZSByYW5nZSBzaG91bGQgYmUgNTEyXG4gICAgICogICAgICAgICAgICAgIGFsaWduZWQgYW5kIHJhbmdlLWVuZCBpcyByZXF1aXJlZC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIHVwbG9hZFBhZ2VzRnJvbVVSTChzb3VyY2VVcmwsIHNvdXJjZVJhbmdlLCBjb250ZW50TGVuZ3RoLCByYW5nZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBzb3VyY2VVcmwsIHNvdXJjZVJhbmdlLCBjb250ZW50TGVuZ3RoLCByYW5nZSwgb3B0aW9ucyB9LCB1cGxvYWRQYWdlc0Zyb21VUkxPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIEdldCBQYWdlIFJhbmdlcyBvcGVyYXRpb24gcmV0dXJucyB0aGUgbGlzdCBvZiB2YWxpZCBwYWdlIHJhbmdlcyBmb3IgYSBwYWdlIGJsb2Igb3Igc25hcHNob3Qgb2YgYVxuICAgICAqIHBhZ2UgYmxvYlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgZ2V0UGFnZVJhbmdlcyhvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgZ2V0UGFnZVJhbmdlc09wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgR2V0IFBhZ2UgUmFuZ2VzIERpZmYgb3BlcmF0aW9uIHJldHVybnMgdGhlIGxpc3Qgb2YgdmFsaWQgcGFnZSByYW5nZXMgZm9yIGEgcGFnZSBibG9iIHRoYXQgd2VyZVxuICAgICAqIGNoYW5nZWQgYmV0d2VlbiB0YXJnZXQgYmxvYiBhbmQgcHJldmlvdXMgc25hcHNob3QuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBnZXRQYWdlUmFuZ2VzRGlmZihvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgZ2V0UGFnZVJhbmdlc0RpZmZPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVzaXplIHRoZSBCbG9iXG4gICAgICogQHBhcmFtIGJsb2JDb250ZW50TGVuZ3RoIFRoaXMgaGVhZGVyIHNwZWNpZmllcyB0aGUgbWF4aW11bSBzaXplIGZvciB0aGUgcGFnZSBibG9iLCB1cCB0byAxIFRCLiBUaGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZSBibG9iIHNpemUgbXVzdCBiZSBhbGlnbmVkIHRvIGEgNTEyLWJ5dGUgYm91bmRhcnkuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICByZXNpemUoYmxvYkNvbnRlbnRMZW5ndGgsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgYmxvYkNvbnRlbnRMZW5ndGgsIG9wdGlvbnMgfSwgcmVzaXplT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFVwZGF0ZSB0aGUgc2VxdWVuY2UgbnVtYmVyIG9mIHRoZSBibG9iXG4gICAgICogQHBhcmFtIHNlcXVlbmNlTnVtYmVyQWN0aW9uIFJlcXVpcmVkIGlmIHRoZSB4LW1zLWJsb2Itc2VxdWVuY2UtbnVtYmVyIGhlYWRlciBpcyBzZXQgZm9yIHRoZSByZXF1ZXN0LlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHByb3BlcnR5IGFwcGxpZXMgdG8gcGFnZSBibG9icyBvbmx5LiBUaGlzIHByb3BlcnR5IGluZGljYXRlcyBob3cgdGhlIHNlcnZpY2Ugc2hvdWxkIG1vZGlmeSB0aGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvYidzIHNlcXVlbmNlIG51bWJlclxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgdXBkYXRlU2VxdWVuY2VOdW1iZXIoc2VxdWVuY2VOdW1iZXJBY3Rpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgc2VxdWVuY2VOdW1iZXJBY3Rpb24sIG9wdGlvbnMgfSwgdXBkYXRlU2VxdWVuY2VOdW1iZXJPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIENvcHkgSW5jcmVtZW50YWwgb3BlcmF0aW9uIGNvcGllcyBhIHNuYXBzaG90IG9mIHRoZSBzb3VyY2UgcGFnZSBibG9iIHRvIGEgZGVzdGluYXRpb24gcGFnZSBibG9iLlxuICAgICAqIFRoZSBzbmFwc2hvdCBpcyBjb3BpZWQgc3VjaCB0aGF0IG9ubHkgdGhlIGRpZmZlcmVudGlhbCBjaGFuZ2VzIGJldHdlZW4gdGhlIHByZXZpb3VzbHkgY29waWVkXG4gICAgICogc25hcHNob3QgYXJlIHRyYW5zZmVycmVkIHRvIHRoZSBkZXN0aW5hdGlvbi4gVGhlIGNvcGllZCBzbmFwc2hvdHMgYXJlIGNvbXBsZXRlIGNvcGllcyBvZiB0aGVcbiAgICAgKiBvcmlnaW5hbCBzbmFwc2hvdCBhbmQgY2FuIGJlIHJlYWQgb3IgY29waWVkIGZyb20gYXMgdXN1YWwuIFRoaXMgQVBJIGlzIHN1cHBvcnRlZCBzaW5jZSBSRVNUIHZlcnNpb25cbiAgICAgKiAyMDE2LTA1LTMxLlxuICAgICAqIEBwYXJhbSBjb3B5U291cmNlIFNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgc291cmNlIHBhZ2UgYmxvYiBzbmFwc2hvdC4gVGhpcyB2YWx1ZSBpcyBhIFVSTCBvZiB1cCB0b1xuICAgICAqICAgICAgICAgICAgICAgICAgIDIgS0IgaW4gbGVuZ3RoIHRoYXQgc3BlY2lmaWVzIGEgcGFnZSBibG9iIHNuYXBzaG90LiBUaGUgdmFsdWUgc2hvdWxkIGJlIFVSTC1lbmNvZGVkIGFzIGl0IHdvdWxkXG4gICAgICogICAgICAgICAgICAgICAgICAgYXBwZWFyIGluIGEgcmVxdWVzdCBVUkkuIFRoZSBzb3VyY2UgYmxvYiBtdXN0IGVpdGhlciBiZSBwdWJsaWMgb3IgbXVzdCBiZSBhdXRoZW50aWNhdGVkIHZpYSBhIHNoYXJlZFxuICAgICAqICAgICAgICAgICAgICAgICAgIGFjY2VzcyBzaWduYXR1cmUuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBjb3B5SW5jcmVtZW50YWwoY29weVNvdXJjZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBjb3B5U291cmNlLCBvcHRpb25zIH0sIGNvcHlJbmNyZW1lbnRhbE9wZXJhdGlvblNwZWMpO1xuICAgIH1cbn1cbi8vIE9wZXJhdGlvbiBTcGVjaWZpY2F0aW9uc1xuY29uc3QgeG1sU2VyaWFsaXplciQyID0gY29yZUNsaWVudF9fbmFtZXNwYWNlLmNyZWF0ZVNlcmlhbGl6ZXIoTWFwcGVycywgLyogaXNYbWwgKi8gdHJ1ZSk7XG5jb25zdCBjcmVhdGVPcGVyYXRpb25TcGVjJDEgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMToge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogUGFnZUJsb2JDcmVhdGVIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBQYWdlQmxvYkNyZWF0ZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgbWV0YWRhdGEsXG4gICAgICAgIGxlYXNlSWQsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIGVuY3J5cHRpb25LZXksXG4gICAgICAgIGVuY3J5cHRpb25LZXlTaGEyNTYsXG4gICAgICAgIGVuY3J5cHRpb25BbGdvcml0aG0sXG4gICAgICAgIGlmTWF0Y2gsXG4gICAgICAgIGlmTm9uZU1hdGNoLFxuICAgICAgICBpZlRhZ3MsXG4gICAgICAgIGJsb2JDYWNoZUNvbnRyb2wsXG4gICAgICAgIGJsb2JDb250ZW50VHlwZSxcbiAgICAgICAgYmxvYkNvbnRlbnRNRDUsXG4gICAgICAgIGJsb2JDb250ZW50RW5jb2RpbmcsXG4gICAgICAgIGJsb2JDb250ZW50TGFuZ3VhZ2UsXG4gICAgICAgIGJsb2JDb250ZW50RGlzcG9zaXRpb24sXG4gICAgICAgIGltbXV0YWJpbGl0eVBvbGljeUV4cGlyeSxcbiAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5TW9kZSxcbiAgICAgICAgZW5jcnlwdGlvblNjb3BlLFxuICAgICAgICB0aWVyLFxuICAgICAgICBibG9iVGFnc1N0cmluZyxcbiAgICAgICAgbGVnYWxIb2xkMSxcbiAgICAgICAgYmxvYlR5cGUsXG4gICAgICAgIGJsb2JDb250ZW50TGVuZ3RoLFxuICAgICAgICBibG9iU2VxdWVuY2VOdW1iZXIsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDIsXG59O1xuY29uc3QgdXBsb2FkUGFnZXNPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDE6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFBhZ2VCbG9iVXBsb2FkUGFnZXNIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBQYWdlQmxvYlVwbG9hZFBhZ2VzRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHJlcXVlc3RCb2R5OiBib2R5MSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzLCBjb21wMTldLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBjb250ZW50TGVuZ3RoLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICByYW5nZSxcbiAgICAgICAgZW5jcnlwdGlvbktleSxcbiAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1NixcbiAgICAgICAgZW5jcnlwdGlvbkFsZ29yaXRobSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICAgICAgZW5jcnlwdGlvblNjb3BlLFxuICAgICAgICB0cmFuc2FjdGlvbmFsQ29udGVudE1ENSxcbiAgICAgICAgdHJhbnNhY3Rpb25hbENvbnRlbnRDcmM2NCxcbiAgICAgICAgY29udGVudFR5cGUxLFxuICAgICAgICBhY2NlcHQyLFxuICAgICAgICBwYWdlV3JpdGUsXG4gICAgICAgIGlmU2VxdWVuY2VOdW1iZXJMZXNzVGhhbk9yRXF1YWxUbyxcbiAgICAgICAgaWZTZXF1ZW5jZU51bWJlckxlc3NUaGFuLFxuICAgICAgICBpZlNlcXVlbmNlTnVtYmVyRXF1YWxUbyxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3htbDsgY2hhcnNldD11dGYtOFwiLFxuICAgIG1lZGlhVHlwZTogXCJiaW5hcnlcIixcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDIsXG59O1xuY29uc3QgY2xlYXJQYWdlc09wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMToge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogUGFnZUJsb2JDbGVhclBhZ2VzSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogUGFnZUJsb2JDbGVhclBhZ2VzRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW3RpbWVvdXRJblNlY29uZHMsIGNvbXAxOV0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIGNvbnRlbnRMZW5ndGgsXG4gICAgICAgIGxlYXNlSWQsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIHJhbmdlLFxuICAgICAgICBlbmNyeXB0aW9uS2V5LFxuICAgICAgICBlbmNyeXB0aW9uS2V5U2hhMjU2LFxuICAgICAgICBlbmNyeXB0aW9uQWxnb3JpdGhtLFxuICAgICAgICBpZk1hdGNoLFxuICAgICAgICBpZk5vbmVNYXRjaCxcbiAgICAgICAgaWZUYWdzLFxuICAgICAgICBlbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgIGlmU2VxdWVuY2VOdW1iZXJMZXNzVGhhbk9yRXF1YWxUbyxcbiAgICAgICAgaWZTZXF1ZW5jZU51bWJlckxlc3NUaGFuLFxuICAgICAgICBpZlNlcXVlbmNlTnVtYmVyRXF1YWxUbyxcbiAgICAgICAgcGFnZVdyaXRlMSxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMixcbn07XG5jb25zdCB1cGxvYWRQYWdlc0Zyb21VUkxPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDE6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFBhZ2VCbG9iVXBsb2FkUGFnZXNGcm9tVVJMSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogUGFnZUJsb2JVcGxvYWRQYWdlc0Zyb21VUkxFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbdGltZW91dEluU2Vjb25kcywgY29tcDE5XSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgZW5jcnlwdGlvbktleSxcbiAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1NixcbiAgICAgICAgZW5jcnlwdGlvbkFsZ29yaXRobSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICAgICAgZW5jcnlwdGlvblNjb3BlLFxuICAgICAgICBzb3VyY2VJZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIHNvdXJjZUlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBzb3VyY2VJZk1hdGNoLFxuICAgICAgICBzb3VyY2VJZk5vbmVNYXRjaCxcbiAgICAgICAgc291cmNlQ29udGVudE1ENSxcbiAgICAgICAgY29weVNvdXJjZUF1dGhvcml6YXRpb24sXG4gICAgICAgIHBhZ2VXcml0ZSxcbiAgICAgICAgaWZTZXF1ZW5jZU51bWJlckxlc3NUaGFuT3JFcXVhbFRvLFxuICAgICAgICBpZlNlcXVlbmNlTnVtYmVyTGVzc1RoYW4sXG4gICAgICAgIGlmU2VxdWVuY2VOdW1iZXJFcXVhbFRvLFxuICAgICAgICBzb3VyY2VVcmwsXG4gICAgICAgIHNvdXJjZVJhbmdlLFxuICAgICAgICBzb3VyY2VDb250ZW50Q3JjNjQsXG4gICAgICAgIHJhbmdlMSxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMixcbn07XG5jb25zdCBnZXRQYWdlUmFuZ2VzT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJHRVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBQYWdlTGlzdCxcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFBhZ2VCbG9iR2V0UGFnZVJhbmdlc0hlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFBhZ2VCbG9iR2V0UGFnZVJhbmdlc0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFtcbiAgICAgICAgdGltZW91dEluU2Vjb25kcyxcbiAgICAgICAgbWFya2VyLFxuICAgICAgICBtYXhQYWdlU2l6ZSxcbiAgICAgICAgc25hcHNob3QsXG4gICAgICAgIGNvbXAyMCxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICByYW5nZSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMixcbn07XG5jb25zdCBnZXRQYWdlUmFuZ2VzRGlmZk9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiR0VUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogUGFnZUxpc3QsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBQYWdlQmxvYkdldFBhZ2VSYW5nZXNEaWZmSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogUGFnZUJsb2JHZXRQYWdlUmFuZ2VzRGlmZkV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFtcbiAgICAgICAgdGltZW91dEluU2Vjb25kcyxcbiAgICAgICAgbWFya2VyLFxuICAgICAgICBtYXhQYWdlU2l6ZSxcbiAgICAgICAgc25hcHNob3QsXG4gICAgICAgIGNvbXAyMCxcbiAgICAgICAgcHJldnNuYXBzaG90LFxuICAgIF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIGxlYXNlSWQsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIHJhbmdlLFxuICAgICAgICBpZk1hdGNoLFxuICAgICAgICBpZk5vbmVNYXRjaCxcbiAgICAgICAgaWZUYWdzLFxuICAgICAgICBwcmV2U25hcHNob3RVcmwsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDIsXG59O1xuY29uc3QgcmVzaXplT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBQYWdlQmxvYlJlc2l6ZUhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFBhZ2VCbG9iUmVzaXplRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW2NvbXAsIHRpbWVvdXRJblNlY29uZHNdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBlbmNyeXB0aW9uS2V5LFxuICAgICAgICBlbmNyeXB0aW9uS2V5U2hhMjU2LFxuICAgICAgICBlbmNyeXB0aW9uQWxnb3JpdGhtLFxuICAgICAgICBpZk1hdGNoLFxuICAgICAgICBpZk5vbmVNYXRjaCxcbiAgICAgICAgaWZUYWdzLFxuICAgICAgICBlbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgIGJsb2JDb250ZW50TGVuZ3RoLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQyLFxufTtcbmNvbnN0IHVwZGF0ZVNlcXVlbmNlTnVtYmVyT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBQYWdlQmxvYlVwZGF0ZVNlcXVlbmNlTnVtYmVySGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogUGFnZUJsb2JVcGRhdGVTZXF1ZW5jZU51bWJlckV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFtjb21wLCB0aW1lb3V0SW5TZWNvbmRzXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICAgICAgYmxvYlNlcXVlbmNlTnVtYmVyLFxuICAgICAgICBzZXF1ZW5jZU51bWJlckFjdGlvbixcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMixcbn07XG5jb25zdCBjb3B5SW5jcmVtZW50YWxPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDI6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFBhZ2VCbG9iQ29weUluY3JlbWVudGFsSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogUGFnZUJsb2JDb3B5SW5jcmVtZW50YWxFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbdGltZW91dEluU2Vjb25kcywgY29tcDIxXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICAgICAgY29weVNvdXJjZSxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMixcbn07XG5cbi8qXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAqXG4gKiBDb2RlIGdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEF1dG9SZXN0IENvZGUgR2VuZXJhdG9yLlxuICogQ2hhbmdlcyBtYXkgY2F1c2UgaW5jb3JyZWN0IGJlaGF2aW9yIGFuZCB3aWxsIGJlIGxvc3QgaWYgdGhlIGNvZGUgaXMgcmVnZW5lcmF0ZWQuXG4gKi9cbi8qKiBDbGFzcyBjb250YWluaW5nIEFwcGVuZEJsb2Igb3BlcmF0aW9ucy4gKi9cbmNsYXNzIEFwcGVuZEJsb2JJbXBsIHtcbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBjbGFzcyBBcHBlbmRCbG9iIGNsYXNzLlxuICAgICAqIEBwYXJhbSBjbGllbnQgUmVmZXJlbmNlIHRvIHRoZSBzZXJ2aWNlIGNsaWVudFxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGNsaWVudCkge1xuICAgICAgICB0aGlzLmNsaWVudCA9IGNsaWVudDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIENyZWF0ZSBBcHBlbmQgQmxvYiBvcGVyYXRpb24gY3JlYXRlcyBhIG5ldyBhcHBlbmQgYmxvYi5cbiAgICAgKiBAcGFyYW0gY29udGVudExlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgY3JlYXRlKGNvbnRlbnRMZW5ndGgsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgY29udGVudExlbmd0aCwgb3B0aW9ucyB9LCBjcmVhdGVPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIEFwcGVuZCBCbG9jayBvcGVyYXRpb24gY29tbWl0cyBhIG5ldyBibG9jayBvZiBkYXRhIHRvIHRoZSBlbmQgb2YgYW4gZXhpc3RpbmcgYXBwZW5kIGJsb2IuIFRoZVxuICAgICAqIEFwcGVuZCBCbG9jayBvcGVyYXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaWYgdGhlIGJsb2Igd2FzIGNyZWF0ZWQgd2l0aCB4LW1zLWJsb2ItdHlwZSBzZXQgdG9cbiAgICAgKiBBcHBlbmRCbG9iLiBBcHBlbmQgQmxvY2sgaXMgc3VwcG9ydGVkIG9ubHkgb24gdmVyc2lvbiAyMDE1LTAyLTIxIHZlcnNpb24gb3IgbGF0ZXIuXG4gICAgICogQHBhcmFtIGNvbnRlbnRMZW5ndGggVGhlIGxlbmd0aCBvZiB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gYm9keSBJbml0aWFsIGRhdGFcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGFwcGVuZEJsb2NrKGNvbnRlbnRMZW5ndGgsIGJvZHksIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgY29udGVudExlbmd0aCwgYm9keSwgb3B0aW9ucyB9LCBhcHBlbmRCbG9ja09wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgQXBwZW5kIEJsb2NrIG9wZXJhdGlvbiBjb21taXRzIGEgbmV3IGJsb2NrIG9mIGRhdGEgdG8gdGhlIGVuZCBvZiBhbiBleGlzdGluZyBhcHBlbmQgYmxvYiB3aGVyZVxuICAgICAqIHRoZSBjb250ZW50cyBhcmUgcmVhZCBmcm9tIGEgc291cmNlIHVybC4gVGhlIEFwcGVuZCBCbG9jayBvcGVyYXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaWYgdGhlIGJsb2JcbiAgICAgKiB3YXMgY3JlYXRlZCB3aXRoIHgtbXMtYmxvYi10eXBlIHNldCB0byBBcHBlbmRCbG9iLiBBcHBlbmQgQmxvY2sgaXMgc3VwcG9ydGVkIG9ubHkgb24gdmVyc2lvblxuICAgICAqIDIwMTUtMDItMjEgdmVyc2lvbiBvciBsYXRlci5cbiAgICAgKiBAcGFyYW0gc291cmNlVXJsIFNwZWNpZnkgYSBVUkwgdG8gdGhlIGNvcHkgc291cmNlLlxuICAgICAqIEBwYXJhbSBjb250ZW50TGVuZ3RoIFRoZSBsZW5ndGggb2YgdGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBhcHBlbmRCbG9ja0Zyb21Vcmwoc291cmNlVXJsLCBjb250ZW50TGVuZ3RoLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IHNvdXJjZVVybCwgY29udGVudExlbmd0aCwgb3B0aW9ucyB9LCBhcHBlbmRCbG9ja0Zyb21VcmxPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIFNlYWwgb3BlcmF0aW9uIHNlYWxzIHRoZSBBcHBlbmQgQmxvYiB0byBtYWtlIGl0IHJlYWQtb25seS4gU2VhbCBpcyBzdXBwb3J0ZWQgb25seSBvbiB2ZXJzaW9uXG4gICAgICogMjAxOS0xMi0xMiB2ZXJzaW9uIG9yIGxhdGVyLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgc2VhbChvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgc2VhbE9wZXJhdGlvblNwZWMpO1xuICAgIH1cbn1cbi8vIE9wZXJhdGlvbiBTcGVjaWZpY2F0aW9uc1xuY29uc3QgeG1sU2VyaWFsaXplciQxID0gY29yZUNsaWVudF9fbmFtZXNwYWNlLmNyZWF0ZVNlcmlhbGl6ZXIoTWFwcGVycywgLyogaXNYbWwgKi8gdHJ1ZSk7XG5jb25zdCBjcmVhdGVPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDE6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEFwcGVuZEJsb2JDcmVhdGVIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBBcHBlbmRCbG9iQ3JlYXRlRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW3RpbWVvdXRJblNlY29uZHNdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBjb250ZW50TGVuZ3RoLFxuICAgICAgICBtZXRhZGF0YSxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgZW5jcnlwdGlvbktleSxcbiAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1NixcbiAgICAgICAgZW5jcnlwdGlvbkFsZ29yaXRobSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICAgICAgYmxvYkNhY2hlQ29udHJvbCxcbiAgICAgICAgYmxvYkNvbnRlbnRUeXBlLFxuICAgICAgICBibG9iQ29udGVudE1ENSxcbiAgICAgICAgYmxvYkNvbnRlbnRFbmNvZGluZyxcbiAgICAgICAgYmxvYkNvbnRlbnRMYW5ndWFnZSxcbiAgICAgICAgYmxvYkNvbnRlbnREaXNwb3NpdGlvbixcbiAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5RXhwaXJ5LFxuICAgICAgICBpbW11dGFiaWxpdHlQb2xpY3lNb2RlLFxuICAgICAgICBlbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgIGJsb2JUYWdzU3RyaW5nLFxuICAgICAgICBsZWdhbEhvbGQxLFxuICAgICAgICBibG9iVHlwZTEsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDEsXG59O1xuY29uc3QgYXBwZW5kQmxvY2tPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDE6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEFwcGVuZEJsb2JBcHBlbmRCbG9ja0hlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEFwcGVuZEJsb2JBcHBlbmRCbG9ja0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICByZXF1ZXN0Qm9keTogYm9keTEsXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbdGltZW91dEluU2Vjb25kcywgY29tcDIyXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgZW5jcnlwdGlvbktleSxcbiAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1NixcbiAgICAgICAgZW5jcnlwdGlvbkFsZ29yaXRobSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICAgICAgZW5jcnlwdGlvblNjb3BlLFxuICAgICAgICB0cmFuc2FjdGlvbmFsQ29udGVudE1ENSxcbiAgICAgICAgdHJhbnNhY3Rpb25hbENvbnRlbnRDcmM2NCxcbiAgICAgICAgY29udGVudFR5cGUxLFxuICAgICAgICBhY2NlcHQyLFxuICAgICAgICBtYXhTaXplLFxuICAgICAgICBhcHBlbmRQb3NpdGlvbixcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3htbDsgY2hhcnNldD11dGYtOFwiLFxuICAgIG1lZGlhVHlwZTogXCJiaW5hcnlcIixcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDEsXG59O1xuY29uc3QgYXBwZW5kQmxvY2tGcm9tVXJsT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAxOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBBcHBlbmRCbG9iQXBwZW5kQmxvY2tGcm9tVXJsSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQXBwZW5kQmxvYkFwcGVuZEJsb2NrRnJvbVVybEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzLCBjb21wMjJdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBjb250ZW50TGVuZ3RoLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBlbmNyeXB0aW9uS2V5LFxuICAgICAgICBlbmNyeXB0aW9uS2V5U2hhMjU2LFxuICAgICAgICBlbmNyeXB0aW9uQWxnb3JpdGhtLFxuICAgICAgICBpZk1hdGNoLFxuICAgICAgICBpZk5vbmVNYXRjaCxcbiAgICAgICAgaWZUYWdzLFxuICAgICAgICBlbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgIHNvdXJjZUlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgc291cmNlSWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIHNvdXJjZUlmTWF0Y2gsXG4gICAgICAgIHNvdXJjZUlmTm9uZU1hdGNoLFxuICAgICAgICBzb3VyY2VDb250ZW50TUQ1LFxuICAgICAgICBjb3B5U291cmNlQXV0aG9yaXphdGlvbixcbiAgICAgICAgdHJhbnNhY3Rpb25hbENvbnRlbnRNRDUsXG4gICAgICAgIHNvdXJjZVVybCxcbiAgICAgICAgc291cmNlQ29udGVudENyYzY0LFxuICAgICAgICBtYXhTaXplLFxuICAgICAgICBhcHBlbmRQb3NpdGlvbixcbiAgICAgICAgc291cmNlUmFuZ2UxLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQxLFxufTtcbmNvbnN0IHNlYWxPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEFwcGVuZEJsb2JTZWFsSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQXBwZW5kQmxvYlNlYWxFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbdGltZW91dEluU2Vjb25kcywgY29tcDIzXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGFwcGVuZFBvc2l0aW9uLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQxLFxufTtcblxuLypcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuICpcbiAqIENvZGUgZ2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgQXV0b1Jlc3QgQ29kZSBHZW5lcmF0b3IuXG4gKiBDaGFuZ2VzIG1heSBjYXVzZSBpbmNvcnJlY3QgYmVoYXZpb3IgYW5kIHdpbGwgYmUgbG9zdCBpZiB0aGUgY29kZSBpcyByZWdlbmVyYXRlZC5cbiAqL1xuLyoqIENsYXNzIGNvbnRhaW5pbmcgQmxvY2tCbG9iIG9wZXJhdGlvbnMuICovXG5jbGFzcyBCbG9ja0Jsb2JJbXBsIHtcbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBjbGFzcyBCbG9ja0Jsb2IgY2xhc3MuXG4gICAgICogQHBhcmFtIGNsaWVudCBSZWZlcmVuY2UgdG8gdGhlIHNlcnZpY2UgY2xpZW50XG4gICAgICovXG4gICAgY29uc3RydWN0b3IoY2xpZW50KSB7XG4gICAgICAgIHRoaXMuY2xpZW50ID0gY2xpZW50O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgVXBsb2FkIEJsb2NrIEJsb2Igb3BlcmF0aW9uIHVwZGF0ZXMgdGhlIGNvbnRlbnQgb2YgYW4gZXhpc3RpbmcgYmxvY2sgYmxvYi4gVXBkYXRpbmcgYW4gZXhpc3RpbmdcbiAgICAgKiBibG9jayBibG9iIG92ZXJ3cml0ZXMgYW55IGV4aXN0aW5nIG1ldGFkYXRhIG9uIHRoZSBibG9iLiBQYXJ0aWFsIHVwZGF0ZXMgYXJlIG5vdCBzdXBwb3J0ZWQgd2l0aCBQdXRcbiAgICAgKiBCbG9iOyB0aGUgY29udGVudCBvZiB0aGUgZXhpc3RpbmcgYmxvYiBpcyBvdmVyd3JpdHRlbiB3aXRoIHRoZSBjb250ZW50IG9mIHRoZSBuZXcgYmxvYi4gVG8gcGVyZm9ybSBhXG4gICAgICogcGFydGlhbCB1cGRhdGUgb2YgdGhlIGNvbnRlbnQgb2YgYSBibG9jayBibG9iLCB1c2UgdGhlIFB1dCBCbG9jayBMaXN0IG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0gY29udGVudExlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBib2R5IEluaXRpYWwgZGF0YVxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgdXBsb2FkKGNvbnRlbnRMZW5ndGgsIGJvZHksIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgY29udGVudExlbmd0aCwgYm9keSwgb3B0aW9ucyB9LCB1cGxvYWRPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIFB1dCBCbG9iIGZyb20gVVJMIG9wZXJhdGlvbiBjcmVhdGVzIGEgbmV3IEJsb2NrIEJsb2Igd2hlcmUgdGhlIGNvbnRlbnRzIG9mIHRoZSBibG9iIGFyZSByZWFkXG4gICAgICogZnJvbSBhIGdpdmVuIFVSTC4gIFRoaXMgQVBJIGlzIHN1cHBvcnRlZCBiZWdpbm5pbmcgd2l0aCB0aGUgMjAyMC0wNC0wOCB2ZXJzaW9uLiBQYXJ0aWFsIHVwZGF0ZXMgYXJlXG4gICAgICogbm90IHN1cHBvcnRlZCB3aXRoIFB1dCBCbG9iIGZyb20gVVJMOyB0aGUgY29udGVudCBvZiBhbiBleGlzdGluZyBibG9iIGlzIG92ZXJ3cml0dGVuIHdpdGggdGhlXG4gICAgICogY29udGVudCBvZiB0aGUgbmV3IGJsb2IuICBUbyBwZXJmb3JtIHBhcnRpYWwgdXBkYXRlcyB0byBhIGJsb2NrIGJsb2LigJlzIGNvbnRlbnRzIHVzaW5nIGEgc291cmNlIFVSTCxcbiAgICAgKiB1c2UgdGhlIFB1dCBCbG9jayBmcm9tIFVSTCBBUEkgaW4gY29uanVuY3Rpb24gd2l0aCBQdXQgQmxvY2sgTGlzdC5cbiAgICAgKiBAcGFyYW0gY29udGVudExlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBjb3B5U291cmNlIFNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgc291cmNlIHBhZ2UgYmxvYiBzbmFwc2hvdC4gVGhpcyB2YWx1ZSBpcyBhIFVSTCBvZiB1cCB0b1xuICAgICAqICAgICAgICAgICAgICAgICAgIDIgS0IgaW4gbGVuZ3RoIHRoYXQgc3BlY2lmaWVzIGEgcGFnZSBibG9iIHNuYXBzaG90LiBUaGUgdmFsdWUgc2hvdWxkIGJlIFVSTC1lbmNvZGVkIGFzIGl0IHdvdWxkXG4gICAgICogICAgICAgICAgICAgICAgICAgYXBwZWFyIGluIGEgcmVxdWVzdCBVUkkuIFRoZSBzb3VyY2UgYmxvYiBtdXN0IGVpdGhlciBiZSBwdWJsaWMgb3IgbXVzdCBiZSBhdXRoZW50aWNhdGVkIHZpYSBhIHNoYXJlZFxuICAgICAqICAgICAgICAgICAgICAgICAgIGFjY2VzcyBzaWduYXR1cmUuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBwdXRCbG9iRnJvbVVybChjb250ZW50TGVuZ3RoLCBjb3B5U291cmNlLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IGNvbnRlbnRMZW5ndGgsIGNvcHlTb3VyY2UsIG9wdGlvbnMgfSwgcHV0QmxvYkZyb21VcmxPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIFN0YWdlIEJsb2NrIG9wZXJhdGlvbiBjcmVhdGVzIGEgbmV3IGJsb2NrIHRvIGJlIGNvbW1pdHRlZCBhcyBwYXJ0IG9mIGEgYmxvYlxuICAgICAqIEBwYXJhbSBibG9ja0lkIEEgdmFsaWQgQmFzZTY0IHN0cmluZyB2YWx1ZSB0aGF0IGlkZW50aWZpZXMgdGhlIGJsb2NrLiBQcmlvciB0byBlbmNvZGluZywgdGhlIHN0cmluZ1xuICAgICAqICAgICAgICAgICAgICAgIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDY0IGJ5dGVzIGluIHNpemUuIEZvciBhIGdpdmVuIGJsb2IsIHRoZSBsZW5ndGggb2YgdGhlIHZhbHVlIHNwZWNpZmllZFxuICAgICAqICAgICAgICAgICAgICAgIGZvciB0aGUgYmxvY2tpZCBwYXJhbWV0ZXIgbXVzdCBiZSB0aGUgc2FtZSBzaXplIGZvciBlYWNoIGJsb2NrLlxuICAgICAqIEBwYXJhbSBjb250ZW50TGVuZ3RoIFRoZSBsZW5ndGggb2YgdGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIGJvZHkgSW5pdGlhbCBkYXRhXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBzdGFnZUJsb2NrKGJsb2NrSWQsIGNvbnRlbnRMZW5ndGgsIGJvZHksIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgYmxvY2tJZCwgY29udGVudExlbmd0aCwgYm9keSwgb3B0aW9ucyB9LCBzdGFnZUJsb2NrT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBTdGFnZSBCbG9jayBvcGVyYXRpb24gY3JlYXRlcyBhIG5ldyBibG9jayB0byBiZSBjb21taXR0ZWQgYXMgcGFydCBvZiBhIGJsb2Igd2hlcmUgdGhlIGNvbnRlbnRzXG4gICAgICogYXJlIHJlYWQgZnJvbSBhIFVSTC5cbiAgICAgKiBAcGFyYW0gYmxvY2tJZCBBIHZhbGlkIEJhc2U2NCBzdHJpbmcgdmFsdWUgdGhhdCBpZGVudGlmaWVzIHRoZSBibG9jay4gUHJpb3IgdG8gZW5jb2RpbmcsIHRoZSBzdHJpbmdcbiAgICAgKiAgICAgICAgICAgICAgICBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byA2NCBieXRlcyBpbiBzaXplLiBGb3IgYSBnaXZlbiBibG9iLCB0aGUgbGVuZ3RoIG9mIHRoZSB2YWx1ZSBzcGVjaWZpZWRcbiAgICAgKiAgICAgICAgICAgICAgICBmb3IgdGhlIGJsb2NraWQgcGFyYW1ldGVyIG11c3QgYmUgdGhlIHNhbWUgc2l6ZSBmb3IgZWFjaCBibG9jay5cbiAgICAgKiBAcGFyYW0gY29udGVudExlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBzb3VyY2VVcmwgU3BlY2lmeSBhIFVSTCB0byB0aGUgY29weSBzb3VyY2UuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBzdGFnZUJsb2NrRnJvbVVSTChibG9ja0lkLCBjb250ZW50TGVuZ3RoLCBzb3VyY2VVcmwsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgYmxvY2tJZCwgY29udGVudExlbmd0aCwgc291cmNlVXJsLCBvcHRpb25zIH0sIHN0YWdlQmxvY2tGcm9tVVJMT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBDb21taXQgQmxvY2sgTGlzdCBvcGVyYXRpb24gd3JpdGVzIGEgYmxvYiBieSBzcGVjaWZ5aW5nIHRoZSBsaXN0IG9mIGJsb2NrIElEcyB0aGF0IG1ha2UgdXAgdGhlXG4gICAgICogYmxvYi4gSW4gb3JkZXIgdG8gYmUgd3JpdHRlbiBhcyBwYXJ0IG9mIGEgYmxvYiwgYSBibG9jayBtdXN0IGhhdmUgYmVlbiBzdWNjZXNzZnVsbHkgd3JpdHRlbiB0byB0aGVcbiAgICAgKiBzZXJ2ZXIgaW4gYSBwcmlvciBQdXQgQmxvY2sgb3BlcmF0aW9uLiBZb3UgY2FuIGNhbGwgUHV0IEJsb2NrIExpc3QgdG8gdXBkYXRlIGEgYmxvYiBieSB1cGxvYWRpbmdcbiAgICAgKiBvbmx5IHRob3NlIGJsb2NrcyB0aGF0IGhhdmUgY2hhbmdlZCwgdGhlbiBjb21taXR0aW5nIHRoZSBuZXcgYW5kIGV4aXN0aW5nIGJsb2NrcyB0b2dldGhlci4gWW91IGNhblxuICAgICAqIGRvIHRoaXMgYnkgc3BlY2lmeWluZyB3aGV0aGVyIHRvIGNvbW1pdCBhIGJsb2NrIGZyb20gdGhlIGNvbW1pdHRlZCBibG9jayBsaXN0IG9yIGZyb20gdGhlXG4gICAgICogdW5jb21taXR0ZWQgYmxvY2sgbGlzdCwgb3IgdG8gY29tbWl0IHRoZSBtb3N0IHJlY2VudGx5IHVwbG9hZGVkIHZlcnNpb24gb2YgdGhlIGJsb2NrLCB3aGljaGV2ZXIgbGlzdFxuICAgICAqIGl0IG1heSBiZWxvbmcgdG8uXG4gICAgICogQHBhcmFtIGJsb2NrcyBCbG9iIEJsb2Nrcy5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGNvbW1pdEJsb2NrTGlzdChibG9ja3MsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgYmxvY2tzLCBvcHRpb25zIH0sIGNvbW1pdEJsb2NrTGlzdE9wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgR2V0IEJsb2NrIExpc3Qgb3BlcmF0aW9uIHJldHJpZXZlcyB0aGUgbGlzdCBvZiBibG9ja3MgdGhhdCBoYXZlIGJlZW4gdXBsb2FkZWQgYXMgcGFydCBvZiBhIGJsb2NrXG4gICAgICogYmxvYlxuICAgICAqIEBwYXJhbSBsaXN0VHlwZSBTcGVjaWZpZXMgd2hldGhlciB0byByZXR1cm4gdGhlIGxpc3Qgb2YgY29tbWl0dGVkIGJsb2NrcywgdGhlIGxpc3Qgb2YgdW5jb21taXR0ZWRcbiAgICAgKiAgICAgICAgICAgICAgICAgYmxvY2tzLCBvciBib3RoIGxpc3RzIHRvZ2V0aGVyLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgZ2V0QmxvY2tMaXN0KGxpc3RUeXBlLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IGxpc3RUeXBlLCBvcHRpb25zIH0sIGdldEJsb2NrTGlzdE9wZXJhdGlvblNwZWMpO1xuICAgIH1cbn1cbi8vIE9wZXJhdGlvbiBTcGVjaWZpY2F0aW9uc1xuY29uc3QgeG1sU2VyaWFsaXplciA9IGNvcmVDbGllbnRfX25hbWVzcGFjZS5jcmVhdGVTZXJpYWxpemVyKE1hcHBlcnMsIC8qIGlzWG1sICovIHRydWUpO1xuY29uc3QgdXBsb2FkT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAxOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9ja0Jsb2JVcGxvYWRIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9ja0Jsb2JVcGxvYWRFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcmVxdWVzdEJvZHk6IGJvZHkxLFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW3RpbWVvdXRJblNlY29uZHNdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBjb250ZW50TGVuZ3RoLFxuICAgICAgICBtZXRhZGF0YSxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgZW5jcnlwdGlvbktleSxcbiAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1NixcbiAgICAgICAgZW5jcnlwdGlvbkFsZ29yaXRobSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICAgICAgYmxvYkNhY2hlQ29udHJvbCxcbiAgICAgICAgYmxvYkNvbnRlbnRUeXBlLFxuICAgICAgICBibG9iQ29udGVudE1ENSxcbiAgICAgICAgYmxvYkNvbnRlbnRFbmNvZGluZyxcbiAgICAgICAgYmxvYkNvbnRlbnRMYW5ndWFnZSxcbiAgICAgICAgYmxvYkNvbnRlbnREaXNwb3NpdGlvbixcbiAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5RXhwaXJ5LFxuICAgICAgICBpbW11dGFiaWxpdHlQb2xpY3lNb2RlLFxuICAgICAgICBlbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgIHRpZXIsXG4gICAgICAgIGJsb2JUYWdzU3RyaW5nLFxuICAgICAgICBsZWdhbEhvbGQxLFxuICAgICAgICB0cmFuc2FjdGlvbmFsQ29udGVudE1ENSxcbiAgICAgICAgdHJhbnNhY3Rpb25hbENvbnRlbnRDcmM2NCxcbiAgICAgICAgY29udGVudFR5cGUxLFxuICAgICAgICBhY2NlcHQyLFxuICAgICAgICBibG9iVHlwZTIsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi94bWw7IGNoYXJzZXQ9dXRmLThcIixcbiAgICBtZWRpYVR5cGU6IFwiYmluYXJ5XCIsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplcixcbn07XG5jb25zdCBwdXRCbG9iRnJvbVVybE9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMToge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvY2tCbG9iUHV0QmxvYkZyb21VcmxIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9ja0Jsb2JQdXRCbG9iRnJvbVVybEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgbWV0YWRhdGEsXG4gICAgICAgIGxlYXNlSWQsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIGVuY3J5cHRpb25LZXksXG4gICAgICAgIGVuY3J5cHRpb25LZXlTaGEyNTYsXG4gICAgICAgIGVuY3J5cHRpb25BbGdvcml0aG0sXG4gICAgICAgIGlmTWF0Y2gsXG4gICAgICAgIGlmTm9uZU1hdGNoLFxuICAgICAgICBpZlRhZ3MsXG4gICAgICAgIGJsb2JDYWNoZUNvbnRyb2wsXG4gICAgICAgIGJsb2JDb250ZW50VHlwZSxcbiAgICAgICAgYmxvYkNvbnRlbnRNRDUsXG4gICAgICAgIGJsb2JDb250ZW50RW5jb2RpbmcsXG4gICAgICAgIGJsb2JDb250ZW50TGFuZ3VhZ2UsXG4gICAgICAgIGJsb2JDb250ZW50RGlzcG9zaXRpb24sXG4gICAgICAgIGVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgdGllcixcbiAgICAgICAgc291cmNlSWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBzb3VyY2VJZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgc291cmNlSWZNYXRjaCxcbiAgICAgICAgc291cmNlSWZOb25lTWF0Y2gsXG4gICAgICAgIHNvdXJjZUlmVGFncyxcbiAgICAgICAgY29weVNvdXJjZSxcbiAgICAgICAgYmxvYlRhZ3NTdHJpbmcsXG4gICAgICAgIHNvdXJjZUNvbnRlbnRNRDUsXG4gICAgICAgIGNvcHlTb3VyY2VBdXRob3JpemF0aW9uLFxuICAgICAgICBjb3B5U291cmNlVGFncyxcbiAgICAgICAgdHJhbnNhY3Rpb25hbENvbnRlbnRNRDUsXG4gICAgICAgIGJsb2JUeXBlMixcbiAgICAgICAgY29weVNvdXJjZUJsb2JQcm9wZXJ0aWVzLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplcixcbn07XG5jb25zdCBzdGFnZUJsb2NrT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAxOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9ja0Jsb2JTdGFnZUJsb2NrSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvY2tCbG9iU3RhZ2VCbG9ja0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICByZXF1ZXN0Qm9keTogYm9keTEsXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIGNvbXAyNCxcbiAgICAgICAgYmxvY2tJZCxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBjb250ZW50TGVuZ3RoLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBlbmNyeXB0aW9uS2V5LFxuICAgICAgICBlbmNyeXB0aW9uS2V5U2hhMjU2LFxuICAgICAgICBlbmNyeXB0aW9uQWxnb3JpdGhtLFxuICAgICAgICBlbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgIHRyYW5zYWN0aW9uYWxDb250ZW50TUQ1LFxuICAgICAgICB0cmFuc2FjdGlvbmFsQ29udGVudENyYzY0LFxuICAgICAgICBjb250ZW50VHlwZTEsXG4gICAgICAgIGFjY2VwdDIsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi94bWw7IGNoYXJzZXQ9dXRmLThcIixcbiAgICBtZWRpYVR5cGU6IFwiYmluYXJ5XCIsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplcixcbn07XG5jb25zdCBzdGFnZUJsb2NrRnJvbVVSTE9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMToge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvY2tCbG9iU3RhZ2VCbG9ja0Zyb21VUkxIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9ja0Jsb2JTdGFnZUJsb2NrRnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFtcbiAgICAgICAgdGltZW91dEluU2Vjb25kcyxcbiAgICAgICAgY29tcDI0LFxuICAgICAgICBibG9ja0lkLFxuICAgIF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIGNvbnRlbnRMZW5ndGgsXG4gICAgICAgIGxlYXNlSWQsXG4gICAgICAgIGVuY3J5cHRpb25LZXksXG4gICAgICAgIGVuY3J5cHRpb25LZXlTaGEyNTYsXG4gICAgICAgIGVuY3J5cHRpb25BbGdvcml0aG0sXG4gICAgICAgIGVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgc291cmNlSWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBzb3VyY2VJZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgc291cmNlSWZNYXRjaCxcbiAgICAgICAgc291cmNlSWZOb25lTWF0Y2gsXG4gICAgICAgIHNvdXJjZUNvbnRlbnRNRDUsXG4gICAgICAgIGNvcHlTb3VyY2VBdXRob3JpemF0aW9uLFxuICAgICAgICBzb3VyY2VVcmwsXG4gICAgICAgIHNvdXJjZUNvbnRlbnRDcmM2NCxcbiAgICAgICAgc291cmNlUmFuZ2UxLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplcixcbn07XG5jb25zdCBjb21taXRCbG9ja0xpc3RPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDE6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2NrQmxvYkNvbW1pdEJsb2NrTGlzdEhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2NrQmxvYkNvbW1pdEJsb2NrTGlzdEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICByZXF1ZXN0Qm9keTogYmxvY2tzLFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW3RpbWVvdXRJblNlY29uZHMsIGNvbXAyNV0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICBjb250ZW50VHlwZSxcbiAgICAgICAgYWNjZXB0LFxuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIG1ldGFkYXRhLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBlbmNyeXB0aW9uS2V5LFxuICAgICAgICBlbmNyeXB0aW9uS2V5U2hhMjU2LFxuICAgICAgICBlbmNyeXB0aW9uQWxnb3JpdGhtLFxuICAgICAgICBpZk1hdGNoLFxuICAgICAgICBpZk5vbmVNYXRjaCxcbiAgICAgICAgaWZUYWdzLFxuICAgICAgICBibG9iQ2FjaGVDb250cm9sLFxuICAgICAgICBibG9iQ29udGVudFR5cGUsXG4gICAgICAgIGJsb2JDb250ZW50TUQ1LFxuICAgICAgICBibG9iQ29udGVudEVuY29kaW5nLFxuICAgICAgICBibG9iQ29udGVudExhbmd1YWdlLFxuICAgICAgICBibG9iQ29udGVudERpc3Bvc2l0aW9uLFxuICAgICAgICBpbW11dGFiaWxpdHlQb2xpY3lFeHBpcnksXG4gICAgICAgIGltbXV0YWJpbGl0eVBvbGljeU1vZGUsXG4gICAgICAgIGVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgdGllcixcbiAgICAgICAgYmxvYlRhZ3NTdHJpbmcsXG4gICAgICAgIGxlZ2FsSG9sZDEsXG4gICAgICAgIHRyYW5zYWN0aW9uYWxDb250ZW50TUQ1LFxuICAgICAgICB0cmFuc2FjdGlvbmFsQ29udGVudENyYzY0LFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgY29udGVudFR5cGU6IFwiYXBwbGljYXRpb24veG1sOyBjaGFyc2V0PXV0Zi04XCIsXG4gICAgbWVkaWFUeXBlOiBcInhtbFwiLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIsXG59O1xuY29uc3QgZ2V0QmxvY2tMaXN0T3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJHRVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBCbG9ja0xpc3QsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9ja0Jsb2JHZXRCbG9ja0xpc3RIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9ja0Jsb2JHZXRCbG9ja0xpc3RFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIHNuYXBzaG90LFxuICAgICAgICBjb21wMjUsXG4gICAgICAgIGxpc3RUeXBlLFxuICAgIF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIGxlYXNlSWQsXG4gICAgICAgIGlmVGFncyxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIsXG59O1xuXG4vKlxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKlxuICogQ29kZSBnZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBBdXRvUmVzdCBDb2RlIEdlbmVyYXRvci5cbiAqIENoYW5nZXMgbWF5IGNhdXNlIGluY29ycmVjdCBiZWhhdmlvciBhbmQgd2lsbCBiZSBsb3N0IGlmIHRoZSBjb2RlIGlzIHJlZ2VuZXJhdGVkLlxuICovXG5sZXQgU3RvcmFnZUNsaWVudCQxID0gY2xhc3MgU3RvcmFnZUNsaWVudCBleHRlbmRzIGNvcmVIdHRwQ29tcGF0X19uYW1lc3BhY2UuRXh0ZW5kZWRTZXJ2aWNlQ2xpZW50IHtcbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgU3RvcmFnZUNsaWVudCBjbGFzcy5cbiAgICAgKiBAcGFyYW0gdXJsIFRoZSBVUkwgb2YgdGhlIHNlcnZpY2UgYWNjb3VudCwgY29udGFpbmVyLCBvciBibG9iIHRoYXQgaXMgdGhlIHRhcmdldCBvZiB0aGUgZGVzaXJlZFxuICAgICAqICAgICAgICAgICAgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBwYXJhbWV0ZXIgb3B0aW9uc1xuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHVybCwgb3B0aW9ucykge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBpZiAodXJsID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIid1cmwnIGNhbm5vdCBiZSBudWxsXCIpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEluaXRpYWxpemluZyBkZWZhdWx0IHZhbHVlcyBmb3Igb3B0aW9uc1xuICAgICAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgICAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkZWZhdWx0cyA9IHtcbiAgICAgICAgICAgIHJlcXVlc3RDb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04XCIsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHBhY2thZ2VEZXRhaWxzID0gYGF6c2RrLWpzLWF6dXJlLXN0b3JhZ2UtYmxvYi8xMi4yNS4wYDtcbiAgICAgICAgY29uc3QgdXNlckFnZW50UHJlZml4ID0gb3B0aW9ucy51c2VyQWdlbnRPcHRpb25zICYmIG9wdGlvbnMudXNlckFnZW50T3B0aW9ucy51c2VyQWdlbnRQcmVmaXhcbiAgICAgICAgICAgID8gYCR7b3B0aW9ucy51c2VyQWdlbnRPcHRpb25zLnVzZXJBZ2VudFByZWZpeH0gJHtwYWNrYWdlRGV0YWlsc31gXG4gICAgICAgICAgICA6IGAke3BhY2thZ2VEZXRhaWxzfWA7XG4gICAgICAgIGNvbnN0IG9wdGlvbnNXaXRoRGVmYXVsdHMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdHMpLCBvcHRpb25zKSwgeyB1c2VyQWdlbnRPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgdXNlckFnZW50UHJlZml4LFxuICAgICAgICAgICAgfSwgZW5kcG9pbnQ6IChfYiA9IChfYSA9IG9wdGlvbnMuZW5kcG9pbnQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IG9wdGlvbnMuYmFzZVVyaSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogXCJ7dXJsfVwiIH0pO1xuICAgICAgICBzdXBlcihvcHRpb25zV2l0aERlZmF1bHRzKTtcbiAgICAgICAgLy8gUGFyYW1ldGVyIGFzc2lnbm1lbnRzXG4gICAgICAgIHRoaXMudXJsID0gdXJsO1xuICAgICAgICAvLyBBc3NpZ25pbmcgdmFsdWVzIHRvIENvbnN0YW50IHBhcmFtZXRlcnNcbiAgICAgICAgdGhpcy52ZXJzaW9uID0gb3B0aW9ucy52ZXJzaW9uIHx8IFwiMjAyNC0xMS0wNFwiO1xuICAgICAgICB0aGlzLnNlcnZpY2UgPSBuZXcgU2VydmljZUltcGwodGhpcyk7XG4gICAgICAgIHRoaXMuY29udGFpbmVyID0gbmV3IENvbnRhaW5lckltcGwodGhpcyk7XG4gICAgICAgIHRoaXMuYmxvYiA9IG5ldyBCbG9iSW1wbCh0aGlzKTtcbiAgICAgICAgdGhpcy5wYWdlQmxvYiA9IG5ldyBQYWdlQmxvYkltcGwodGhpcyk7XG4gICAgICAgIHRoaXMuYXBwZW5kQmxvYiA9IG5ldyBBcHBlbmRCbG9iSW1wbCh0aGlzKTtcbiAgICAgICAgdGhpcy5ibG9ja0Jsb2IgPSBuZXcgQmxvY2tCbG9iSW1wbCh0aGlzKTtcbiAgICB9XG59O1xuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmNsYXNzIFN0b3JhZ2VDb250ZXh0Q2xpZW50IGV4dGVuZHMgU3RvcmFnZUNsaWVudCQxIHtcbiAgICBhc3luYyBzZW5kT3BlcmF0aW9uUmVxdWVzdChvcGVyYXRpb25Bcmd1bWVudHMsIG9wZXJhdGlvblNwZWMpIHtcbiAgICAgICAgY29uc3Qgb3BlcmF0aW9uU3BlY1RvU2VuZCA9IE9iamVjdC5hc3NpZ24oe30sIG9wZXJhdGlvblNwZWMpO1xuICAgICAgICBpZiAob3BlcmF0aW9uU3BlY1RvU2VuZC5wYXRoID09PSBcIi97Y29udGFpbmVyTmFtZX1cIiB8fFxuICAgICAgICAgICAgb3BlcmF0aW9uU3BlY1RvU2VuZC5wYXRoID09PSBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIpIHtcbiAgICAgICAgICAgIG9wZXJhdGlvblNwZWNUb1NlbmQucGF0aCA9IFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN1cGVyLnNlbmRPcGVyYXRpb25SZXF1ZXN0KG9wZXJhdGlvbkFyZ3VtZW50cywgb3BlcmF0aW9uU3BlY1RvU2VuZCk7XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogQSBTdG9yYWdlQ2xpZW50IHJlcHJlc2VudHMgYSBiYXNlZCBVUkwgY2xhc3MgZm9yIHtAbGluayBCbG9iU2VydmljZUNsaWVudH0sIHtAbGluayBDb250YWluZXJDbGllbnR9XG4gKiBhbmQgZXRjLlxuICovXG5jbGFzcyBTdG9yYWdlQ2xpZW50IHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIFN0b3JhZ2VDbGllbnQuXG4gICAgICogQHBhcmFtIHVybCAtIHVybCB0byByZXNvdXJjZVxuICAgICAqIEBwYXJhbSBwaXBlbGluZSAtIHJlcXVlc3QgcG9saWN5IHBpcGVsaW5lLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHVybCwgcGlwZWxpbmUpIHtcbiAgICAgICAgLy8gVVJMIHNob3VsZCBiZSBlbmNvZGVkIGFuZCBvbmx5IG9uY2UsIHByb3RvY29sIGxheWVyIHNob3VsZG4ndCBlbmNvZGUgVVJMIGFnYWluXG4gICAgICAgIHRoaXMudXJsID0gZXNjYXBlVVJMUGF0aCh1cmwpO1xuICAgICAgICB0aGlzLmFjY291bnROYW1lID0gZ2V0QWNjb3VudE5hbWVGcm9tVXJsKHVybCk7XG4gICAgICAgIHRoaXMucGlwZWxpbmUgPSBwaXBlbGluZTtcbiAgICAgICAgdGhpcy5zdG9yYWdlQ2xpZW50Q29udGV4dCA9IG5ldyBTdG9yYWdlQ29udGV4dENsaWVudCh0aGlzLnVybCwgZ2V0Q29yZUNsaWVudE9wdGlvbnMocGlwZWxpbmUpKTtcbiAgICAgICAgdGhpcy5pc0h0dHBzID0gaUVxdWFsKGdldFVSTFNjaGVtZSh0aGlzLnVybCkgfHwgXCJcIiwgXCJodHRwc1wiKTtcbiAgICAgICAgdGhpcy5jcmVkZW50aWFsID0gZ2V0Q3JlZGVudGlhbEZyb21QaXBlbGluZShwaXBlbGluZSk7XG4gICAgICAgIC8vIE92ZXJyaWRlIHByb3RvY29sIGxheWVyJ3MgZGVmYXVsdCBjb250ZW50LXR5cGVcbiAgICAgICAgY29uc3Qgc3RvcmFnZUNsaWVudENvbnRleHQgPSB0aGlzLnN0b3JhZ2VDbGllbnRDb250ZXh0O1xuICAgICAgICBzdG9yYWdlQ2xpZW50Q29udGV4dC5yZXF1ZXN0Q29udGVudFR5cGUgPSB1bmRlZmluZWQ7XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogQ3JlYXRlcyBhIHNwYW4gdXNpbmcgdGhlIGdsb2JhbCB0cmFjZXIuXG4gKiBAaW50ZXJuYWxcbiAqL1xuY29uc3QgdHJhY2luZ0NsaWVudCA9IGNvcmVUcmFjaW5nLmNyZWF0ZVRyYWNpbmdDbGllbnQoe1xuICAgIHBhY2thZ2VOYW1lOiBcIkBhenVyZS9zdG9yYWdlLWJsb2JcIixcbiAgICBwYWNrYWdlVmVyc2lvbjogU0RLX1ZFUlNJT04sXG4gICAgbmFtZXNwYWNlOiBcIk1pY3Jvc29mdC5TdG9yYWdlXCIsXG59KTtcblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIE9OTFkgQVZBSUxBQkxFIElOIE5PREUuSlMgUlVOVElNRS5cbiAqXG4gKiBUaGlzIGlzIGEgaGVscGVyIGNsYXNzIHRvIGNvbnN0cnVjdCBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHBlcm1pc3Npb25zIGdyYW50ZWQgYnkgYSBTZXJ2aWNlU0FTIHRvIGEgYmxvYi4gU2V0dGluZ1xuICogYSB2YWx1ZSB0byB0cnVlIG1lYW5zIHRoYXQgYW55IFNBUyB3aGljaCB1c2VzIHRoZXNlIHBlcm1pc3Npb25zIHdpbGwgZ3JhbnQgcGVybWlzc2lvbnMgZm9yIHRoYXQgb3BlcmF0aW9uLiBPbmNlIGFsbFxuICogdGhlIHZhbHVlcyBhcmUgc2V0LCB0aGlzIHNob3VsZCBiZSBzZXJpYWxpemVkIHdpdGggdG9TdHJpbmcgYW5kIHNldCBhcyB0aGUgcGVybWlzc2lvbnMgZmllbGQgb24gYVxuICoge0BsaW5rIEJsb2JTQVNTaWduYXR1cmVWYWx1ZXN9IG9iamVjdC4gSXQgaXMgcG9zc2libGUgdG8gY29uc3RydWN0IHRoZSBwZXJtaXNzaW9ucyBzdHJpbmcgd2l0aG91dCB0aGlzIGNsYXNzLCBidXRcbiAqIHRoZSBvcmRlciBvZiB0aGUgcGVybWlzc2lvbnMgaXMgcGFydGljdWxhciBhbmQgdGhpcyBjbGFzcyBndWFyYW50ZWVzIGNvcnJlY3RuZXNzLlxuICovXG5jbGFzcyBCbG9iU0FTUGVybWlzc2lvbnMge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIFJlYWQgYWNjZXNzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnJlYWQgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyBBZGQgYWNjZXNzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmFkZCA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIENyZWF0ZSBhY2Nlc3MgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY3JlYXRlID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgV3JpdGUgYWNjZXNzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLndyaXRlID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgRGVsZXRlIGFjY2VzcyBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5kZWxldGUgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyBEZWxldGUgdmVyc2lvbiBhY2Nlc3MgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZGVsZXRlVmVyc2lvbiA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2ZpZXMgVGFnIGFjY2VzcyBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy50YWcgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyBNb3ZlIGFjY2VzcyBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5tb3ZlID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgRXhlY3V0ZSBhY2Nlc3MgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZXhlY3V0ZSA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIFNldEltbXV0YWJpbGl0eVBvbGljeSBhY2Nlc3MgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuc2V0SW1tdXRhYmlsaXR5UG9saWN5ID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgdGhhdCBQZXJtYW5lbnQgRGVsZXRlIGlzIHBlcm1pdHRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMucGVybWFuZW50RGVsZXRlID0gZmFsc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSB7QGxpbmsgQmxvYlNBU1Blcm1pc3Npb25zfSBmcm9tIHRoZSBzcGVjaWZpZWQgcGVybWlzc2lvbnMgc3RyaW5nLiBUaGlzIG1ldGhvZCB3aWxsIHRocm93IGFuXG4gICAgICogRXJyb3IgaWYgaXQgZW5jb3VudGVycyBhIGNoYXJhY3RlciB0aGF0IGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSB2YWxpZCBwZXJtaXNzaW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIHBlcm1pc3Npb25zIC1cbiAgICAgKi9cbiAgICBzdGF0aWMgcGFyc2UocGVybWlzc2lvbnMpIHtcbiAgICAgICAgY29uc3QgYmxvYlNBU1Blcm1pc3Npb25zID0gbmV3IEJsb2JTQVNQZXJtaXNzaW9ucygpO1xuICAgICAgICBmb3IgKGNvbnN0IGNoYXIgb2YgcGVybWlzc2lvbnMpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoY2hhcikge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJyXCI6XG4gICAgICAgICAgICAgICAgICAgIGJsb2JTQVNQZXJtaXNzaW9ucy5yZWFkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImFcIjpcbiAgICAgICAgICAgICAgICAgICAgYmxvYlNBU1Blcm1pc3Npb25zLmFkZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJjXCI6XG4gICAgICAgICAgICAgICAgICAgIGJsb2JTQVNQZXJtaXNzaW9ucy5jcmVhdGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwid1wiOlxuICAgICAgICAgICAgICAgICAgICBibG9iU0FTUGVybWlzc2lvbnMud3JpdGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiZFwiOlxuICAgICAgICAgICAgICAgICAgICBibG9iU0FTUGVybWlzc2lvbnMuZGVsZXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInhcIjpcbiAgICAgICAgICAgICAgICAgICAgYmxvYlNBU1Blcm1pc3Npb25zLmRlbGV0ZVZlcnNpb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwidFwiOlxuICAgICAgICAgICAgICAgICAgICBibG9iU0FTUGVybWlzc2lvbnMudGFnID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm1cIjpcbiAgICAgICAgICAgICAgICAgICAgYmxvYlNBU1Blcm1pc3Npb25zLm1vdmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiZVwiOlxuICAgICAgICAgICAgICAgICAgICBibG9iU0FTUGVybWlzc2lvbnMuZXhlY3V0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJpXCI6XG4gICAgICAgICAgICAgICAgICAgIGJsb2JTQVNQZXJtaXNzaW9ucy5zZXRJbW11dGFiaWxpdHlQb2xpY3kgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwieVwiOlxuICAgICAgICAgICAgICAgICAgICBibG9iU0FTUGVybWlzc2lvbnMucGVybWFuZW50RGVsZXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEludmFsaWQgcGVybWlzc2lvbjogJHtjaGFyfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBibG9iU0FTUGVybWlzc2lvbnM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSB7QGxpbmsgQmxvYlNBU1Blcm1pc3Npb25zfSBmcm9tIGEgcmF3IG9iamVjdCB3aGljaCBjb250YWlucyBzYW1lIGtleXMgYXMgaXRcbiAgICAgKiBhbmQgYm9vbGVhbiB2YWx1ZXMgZm9yIHRoZW0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGVybWlzc2lvbkxpa2UgLVxuICAgICAqL1xuICAgIHN0YXRpYyBmcm9tKHBlcm1pc3Npb25MaWtlKSB7XG4gICAgICAgIGNvbnN0IGJsb2JTQVNQZXJtaXNzaW9ucyA9IG5ldyBCbG9iU0FTUGVybWlzc2lvbnMoKTtcbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLnJlYWQpIHtcbiAgICAgICAgICAgIGJsb2JTQVNQZXJtaXNzaW9ucy5yZWFkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2UuYWRkKSB7XG4gICAgICAgICAgICBibG9iU0FTUGVybWlzc2lvbnMuYWRkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2UuY3JlYXRlKSB7XG4gICAgICAgICAgICBibG9iU0FTUGVybWlzc2lvbnMuY3JlYXRlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2Uud3JpdGUpIHtcbiAgICAgICAgICAgIGJsb2JTQVNQZXJtaXNzaW9ucy53cml0ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLmRlbGV0ZSkge1xuICAgICAgICAgICAgYmxvYlNBU1Blcm1pc3Npb25zLmRlbGV0ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLmRlbGV0ZVZlcnNpb24pIHtcbiAgICAgICAgICAgIGJsb2JTQVNQZXJtaXNzaW9ucy5kZWxldGVWZXJzaW9uID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2UudGFnKSB7XG4gICAgICAgICAgICBibG9iU0FTUGVybWlzc2lvbnMudGFnID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2UubW92ZSkge1xuICAgICAgICAgICAgYmxvYlNBU1Blcm1pc3Npb25zLm1vdmUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS5leGVjdXRlKSB7XG4gICAgICAgICAgICBibG9iU0FTUGVybWlzc2lvbnMuZXhlY3V0ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLnNldEltbXV0YWJpbGl0eVBvbGljeSkge1xuICAgICAgICAgICAgYmxvYlNBU1Blcm1pc3Npb25zLnNldEltbXV0YWJpbGl0eVBvbGljeSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLnBlcm1hbmVudERlbGV0ZSkge1xuICAgICAgICAgICAgYmxvYlNBU1Blcm1pc3Npb25zLnBlcm1hbmVudERlbGV0ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJsb2JTQVNQZXJtaXNzaW9ucztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29udmVydHMgdGhlIGdpdmVuIHBlcm1pc3Npb25zIHRvIGEgc3RyaW5nLiBVc2luZyB0aGlzIG1ldGhvZCB3aWxsIGd1YXJhbnRlZSB0aGUgcGVybWlzc2lvbnMgYXJlIGluIGFuXG4gICAgICogb3JkZXIgYWNjZXB0ZWQgYnkgdGhlIHNlcnZpY2UuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBBIHN0cmluZyB3aGljaCByZXByZXNlbnRzIHRoZSBCbG9iU0FTUGVybWlzc2lvbnNcbiAgICAgKi9cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgY29uc3QgcGVybWlzc2lvbnMgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMucmVhZCkge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcInJcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuYWRkKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwiYVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jcmVhdGUpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJjXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLndyaXRlKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwid1wiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kZWxldGUpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmRlbGV0ZVZlcnNpb24pIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJ4XCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnRhZykge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcInRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubW92ZSkge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcIm1cIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZXhlY3V0ZSkge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcImVcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2V0SW1tdXRhYmlsaXR5UG9saWN5KSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwiaVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wZXJtYW5lbnREZWxldGUpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJ5XCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwZXJtaXNzaW9ucy5qb2luKFwiXCIpO1xuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIFRoaXMgaXMgYSBoZWxwZXIgY2xhc3MgdG8gY29uc3RydWN0IGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSBhIFNlcnZpY2VTQVMgdG8gYSBjb250YWluZXIuXG4gKiBTZXR0aW5nIGEgdmFsdWUgdG8gdHJ1ZSBtZWFucyB0aGF0IGFueSBTQVMgd2hpY2ggdXNlcyB0aGVzZSBwZXJtaXNzaW9ucyB3aWxsIGdyYW50IHBlcm1pc3Npb25zIGZvciB0aGF0IG9wZXJhdGlvbi5cbiAqIE9uY2UgYWxsIHRoZSB2YWx1ZXMgYXJlIHNldCwgdGhpcyBzaG91bGQgYmUgc2VyaWFsaXplZCB3aXRoIHRvU3RyaW5nIGFuZCBzZXQgYXMgdGhlIHBlcm1pc3Npb25zIGZpZWxkIG9uIGFcbiAqIHtAbGluayBCbG9iU0FTU2lnbmF0dXJlVmFsdWVzfSBvYmplY3QuIEl0IGlzIHBvc3NpYmxlIHRvIGNvbnN0cnVjdCB0aGUgcGVybWlzc2lvbnMgc3RyaW5nIHdpdGhvdXQgdGhpcyBjbGFzcywgYnV0XG4gKiB0aGUgb3JkZXIgb2YgdGhlIHBlcm1pc3Npb25zIGlzIHBhcnRpY3VsYXIgYW5kIHRoaXMgY2xhc3MgZ3VhcmFudGVlcyBjb3JyZWN0bmVzcy5cbiAqL1xuY2xhc3MgQ29udGFpbmVyU0FTUGVybWlzc2lvbnMge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIFJlYWQgYWNjZXNzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnJlYWQgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyBBZGQgYWNjZXNzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmFkZCA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIENyZWF0ZSBhY2Nlc3MgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY3JlYXRlID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgV3JpdGUgYWNjZXNzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLndyaXRlID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgRGVsZXRlIGFjY2VzcyBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5kZWxldGUgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyBEZWxldGUgdmVyc2lvbiBhY2Nlc3MgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZGVsZXRlVmVyc2lvbiA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIExpc3QgYWNjZXNzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmxpc3QgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNmaWVzIFRhZyBhY2Nlc3MgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudGFnID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgTW92ZSBhY2Nlc3MgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMubW92ZSA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIEV4ZWN1dGUgYWNjZXNzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmV4ZWN1dGUgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyBTZXRJbW11dGFiaWxpdHlQb2xpY3kgYWNjZXNzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnNldEltbXV0YWJpbGl0eVBvbGljeSA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHRoYXQgUGVybWFuZW50IERlbGV0ZSBpcyBwZXJtaXR0ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnBlcm1hbmVudERlbGV0ZSA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHRoYXQgRmlsdGVyIEJsb2JzIGJ5IFRhZ3MgaXMgcGVybWl0dGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5maWx0ZXJCeVRhZ3MgPSBmYWxzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiB7QGxpbmsgQ29udGFpbmVyU0FTUGVybWlzc2lvbnN9IGZyb20gdGhlIHNwZWNpZmllZCBwZXJtaXNzaW9ucyBzdHJpbmcuIFRoaXMgbWV0aG9kIHdpbGwgdGhyb3cgYW5cbiAgICAgKiBFcnJvciBpZiBpdCBlbmNvdW50ZXJzIGEgY2hhcmFjdGVyIHRoYXQgZG9lcyBub3QgY29ycmVzcG9uZCB0byBhIHZhbGlkIHBlcm1pc3Npb24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGVybWlzc2lvbnMgLVxuICAgICAqL1xuICAgIHN0YXRpYyBwYXJzZShwZXJtaXNzaW9ucykge1xuICAgICAgICBjb25zdCBjb250YWluZXJTQVNQZXJtaXNzaW9ucyA9IG5ldyBDb250YWluZXJTQVNQZXJtaXNzaW9ucygpO1xuICAgICAgICBmb3IgKGNvbnN0IGNoYXIgb2YgcGVybWlzc2lvbnMpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoY2hhcikge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJyXCI6XG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lclNBU1Blcm1pc3Npb25zLnJlYWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiYVwiOlxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJTQVNQZXJtaXNzaW9ucy5hZGQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiY1wiOlxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJTQVNQZXJtaXNzaW9ucy5jcmVhdGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwid1wiOlxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJTQVNQZXJtaXNzaW9ucy53cml0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJkXCI6XG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lclNBU1Blcm1pc3Npb25zLmRlbGV0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJsXCI6XG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lclNBU1Blcm1pc3Npb25zLmxpc3QgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwidFwiOlxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJTQVNQZXJtaXNzaW9ucy50YWcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwieFwiOlxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJTQVNQZXJtaXNzaW9ucy5kZWxldGVWZXJzaW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm1cIjpcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyU0FTUGVybWlzc2lvbnMubW92ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJlXCI6XG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lclNBU1Blcm1pc3Npb25zLmV4ZWN1dGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiaVwiOlxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJTQVNQZXJtaXNzaW9ucy5zZXRJbW11dGFiaWxpdHlQb2xpY3kgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwieVwiOlxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJTQVNQZXJtaXNzaW9ucy5wZXJtYW5lbnREZWxldGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiZlwiOlxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJTQVNQZXJtaXNzaW9ucy5maWx0ZXJCeVRhZ3MgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgSW52YWxpZCBwZXJtaXNzaW9uICR7Y2hhcn1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29udGFpbmVyU0FTUGVybWlzc2lvbnM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSB7QGxpbmsgQ29udGFpbmVyU0FTUGVybWlzc2lvbnN9IGZyb20gYSByYXcgb2JqZWN0IHdoaWNoIGNvbnRhaW5zIHNhbWUga2V5cyBhcyBpdFxuICAgICAqIGFuZCBib29sZWFuIHZhbHVlcyBmb3IgdGhlbS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwZXJtaXNzaW9uTGlrZSAtXG4gICAgICovXG4gICAgc3RhdGljIGZyb20ocGVybWlzc2lvbkxpa2UpIHtcbiAgICAgICAgY29uc3QgY29udGFpbmVyU0FTUGVybWlzc2lvbnMgPSBuZXcgQ29udGFpbmVyU0FTUGVybWlzc2lvbnMoKTtcbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLnJlYWQpIHtcbiAgICAgICAgICAgIGNvbnRhaW5lclNBU1Blcm1pc3Npb25zLnJlYWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS5hZGQpIHtcbiAgICAgICAgICAgIGNvbnRhaW5lclNBU1Blcm1pc3Npb25zLmFkZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLmNyZWF0ZSkge1xuICAgICAgICAgICAgY29udGFpbmVyU0FTUGVybWlzc2lvbnMuY3JlYXRlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2Uud3JpdGUpIHtcbiAgICAgICAgICAgIGNvbnRhaW5lclNBU1Blcm1pc3Npb25zLndyaXRlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2UuZGVsZXRlKSB7XG4gICAgICAgICAgICBjb250YWluZXJTQVNQZXJtaXNzaW9ucy5kZWxldGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS5saXN0KSB7XG4gICAgICAgICAgICBjb250YWluZXJTQVNQZXJtaXNzaW9ucy5saXN0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2UuZGVsZXRlVmVyc2lvbikge1xuICAgICAgICAgICAgY29udGFpbmVyU0FTUGVybWlzc2lvbnMuZGVsZXRlVmVyc2lvbiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLnRhZykge1xuICAgICAgICAgICAgY29udGFpbmVyU0FTUGVybWlzc2lvbnMudGFnID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2UubW92ZSkge1xuICAgICAgICAgICAgY29udGFpbmVyU0FTUGVybWlzc2lvbnMubW92ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLmV4ZWN1dGUpIHtcbiAgICAgICAgICAgIGNvbnRhaW5lclNBU1Blcm1pc3Npb25zLmV4ZWN1dGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS5zZXRJbW11dGFiaWxpdHlQb2xpY3kpIHtcbiAgICAgICAgICAgIGNvbnRhaW5lclNBU1Blcm1pc3Npb25zLnNldEltbXV0YWJpbGl0eVBvbGljeSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLnBlcm1hbmVudERlbGV0ZSkge1xuICAgICAgICAgICAgY29udGFpbmVyU0FTUGVybWlzc2lvbnMucGVybWFuZW50RGVsZXRlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2UuZmlsdGVyQnlUYWdzKSB7XG4gICAgICAgICAgICBjb250YWluZXJTQVNQZXJtaXNzaW9ucy5maWx0ZXJCeVRhZ3MgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb250YWluZXJTQVNQZXJtaXNzaW9ucztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29udmVydHMgdGhlIGdpdmVuIHBlcm1pc3Npb25zIHRvIGEgc3RyaW5nLiBVc2luZyB0aGlzIG1ldGhvZCB3aWxsIGd1YXJhbnRlZSB0aGUgcGVybWlzc2lvbnMgYXJlIGluIGFuXG4gICAgICogb3JkZXIgYWNjZXB0ZWQgYnkgdGhlIHNlcnZpY2UuXG4gICAgICpcbiAgICAgKiBUaGUgb3JkZXIgb2YgdGhlIGNoYXJhY3RlcnMgc2hvdWxkIGJlIGFzIHNwZWNpZmllZCBoZXJlIHRvIGVuc3VyZSBjb3JyZWN0bmVzcy5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9jb25zdHJ1Y3RpbmctYS1zZXJ2aWNlLXNhc1xuICAgICAqXG4gICAgICovXG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIGNvbnN0IHBlcm1pc3Npb25zID0gW107XG4gICAgICAgIGlmICh0aGlzLnJlYWQpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJyXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmFkZCkge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcImFcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY3JlYXRlKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwiY1wiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy53cml0ZSkge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcIndcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZGVsZXRlKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwiZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kZWxldGVWZXJzaW9uKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwieFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5saXN0KSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwibFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy50YWcpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJ0XCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1vdmUpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJtXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmV4ZWN1dGUpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJlXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNldEltbXV0YWJpbGl0eVBvbGljeSkge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcImlcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucGVybWFuZW50RGVsZXRlKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwieVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5maWx0ZXJCeVRhZ3MpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJmXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwZXJtaXNzaW9ucy5qb2luKFwiXCIpO1xuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIE9OTFkgQVZBSUxBQkxFIElOIE5PREUuSlMgUlVOVElNRS5cbiAqXG4gKiBVc2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwgaXMgb25seSB1c2VkIGZvciBnZW5lcmF0aW9uIG9mIHVzZXIgZGVsZWdhdGlvbiBTQVMuXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9jcmVhdGUtdXNlci1kZWxlZ2F0aW9uLXNhc1xuICovXG5jbGFzcyBVc2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgVXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsLlxuICAgICAqIEBwYXJhbSBhY2NvdW50TmFtZSAtXG4gICAgICogQHBhcmFtIHVzZXJEZWxlZ2F0aW9uS2V5IC1cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihhY2NvdW50TmFtZSwgdXNlckRlbGVnYXRpb25LZXkpIHtcbiAgICAgICAgdGhpcy5hY2NvdW50TmFtZSA9IGFjY291bnROYW1lO1xuICAgICAgICB0aGlzLnVzZXJEZWxlZ2F0aW9uS2V5ID0gdXNlckRlbGVnYXRpb25LZXk7XG4gICAgICAgIHRoaXMua2V5ID0gQnVmZmVyLmZyb20odXNlckRlbGVnYXRpb25LZXkudmFsdWUsIFwiYmFzZTY0XCIpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZW5lcmF0ZXMgYSBoYXNoIHNpZ25hdHVyZSBmb3IgYW4gSFRUUCByZXF1ZXN0IG9yIGZvciBhIFNBUy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzdHJpbmdUb1NpZ24gLVxuICAgICAqL1xuICAgIGNvbXB1dGVITUFDU0hBMjU2KHN0cmluZ1RvU2lnbikge1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhgc3RyaW5nVG9TaWduOiAke0pTT04uc3RyaW5naWZ5KHN0cmluZ1RvU2lnbil9YCk7XG4gICAgICAgIHJldHVybiBjcnlwdG8uY3JlYXRlSG1hYyhcInNoYTI1NlwiLCB0aGlzLmtleSkudXBkYXRlKHN0cmluZ1RvU2lnbiwgXCJ1dGY4XCIpLmRpZ2VzdChcImJhc2U2NFwiKTtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBHZW5lcmF0ZSBTYXNJUFJhbmdlIGZvcm1hdCBzdHJpbmcuIEZvciBleGFtcGxlOlxuICpcbiAqIFwiOC44LjguOFwiIG9yIFwiMS4xLjEuMS0yNTUuMjU1LjI1NS4yNTVcIlxuICpcbiAqIEBwYXJhbSBpcFJhbmdlIC1cbiAqL1xuZnVuY3Rpb24gaXBSYW5nZVRvU3RyaW5nKGlwUmFuZ2UpIHtcbiAgICByZXR1cm4gaXBSYW5nZS5lbmQgPyBgJHtpcFJhbmdlLnN0YXJ0fS0ke2lwUmFuZ2UuZW5kfWAgOiBpcFJhbmdlLnN0YXJ0O1xufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogUHJvdG9jb2xzIGZvciBnZW5lcmF0ZWQgU0FTLlxuICovXG5leHBvcnRzLlNBU1Byb3RvY29sID0gdm9pZCAwO1xuKGZ1bmN0aW9uIChTQVNQcm90b2NvbCkge1xuICAgIC8qKlxuICAgICAqIFByb3RvY29sIHRoYXQgYWxsb3dzIEhUVFBTIG9ubHlcbiAgICAgKi9cbiAgICBTQVNQcm90b2NvbFtcIkh0dHBzXCJdID0gXCJodHRwc1wiO1xuICAgIC8qKlxuICAgICAqIFByb3RvY29sIHRoYXQgYWxsb3dzIGJvdGggSFRUUFMgYW5kIEhUVFBcbiAgICAgKi9cbiAgICBTQVNQcm90b2NvbFtcIkh0dHBzQW5kSHR0cFwiXSA9IFwiaHR0cHMsaHR0cFwiO1xufSkoZXhwb3J0cy5TQVNQcm90b2NvbCB8fCAoZXhwb3J0cy5TQVNQcm90b2NvbCA9IHt9KSk7XG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIGNvbXBvbmVudHMgdGhhdCBtYWtlIHVwIGFuIEF6dXJlIFN0b3JhZ2UgU0FTJyBxdWVyeSBwYXJhbWV0ZXJzLiBUaGlzIHR5cGUgaXMgbm90IGNvbnN0cnVjdGVkIGRpcmVjdGx5XG4gKiBieSB0aGUgdXNlcjsgaXQgaXMgb25seSBnZW5lcmF0ZWQgYnkgdGhlIHtAbGluayBBY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzfSBhbmQge0BsaW5rIEJsb2JTQVNTaWduYXR1cmVWYWx1ZXN9XG4gKiB0eXBlcy4gT25jZSBnZW5lcmF0ZWQsIGl0IGNhbiBiZSBlbmNvZGVkIGludG8gYSB7QGxpbmsgU3RyaW5nfSBhbmQgYXBwZW5kZWQgdG8gYSBVUkwgZGlyZWN0bHkgKHRob3VnaCBjYXV0aW9uIHNob3VsZFxuICogYmUgdGFrZW4gaGVyZSBpbiBjYXNlIHRoZXJlIGFyZSBleGlzdGluZyBxdWVyeSBwYXJhbWV0ZXJzLCB3aGljaCBtaWdodCBhZmZlY3QgdGhlIGFwcHJvcHJpYXRlIG1lYW5zIG9mIGFwcGVuZGluZ1xuICogdGhlc2UgcXVlcnkgcGFyYW1ldGVycykuXG4gKlxuICogTk9URTogSW5zdGFuY2VzIG9mIHRoaXMgY2xhc3MgYXJlIGltbXV0YWJsZS5cbiAqL1xuY2xhc3MgU0FTUXVlcnlQYXJhbWV0ZXJzIHtcbiAgICAvKipcbiAgICAgKiBPcHRpb25hbC4gSVAgcmFuZ2UgYWxsb3dlZCBmb3IgdGhpcyBTQVMuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgaXBSYW5nZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXBSYW5nZUlubmVyKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGVuZDogdGhpcy5pcFJhbmdlSW5uZXIuZW5kLFxuICAgICAgICAgICAgICAgIHN0YXJ0OiB0aGlzLmlwUmFuZ2VJbm5lci5zdGFydCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3RydWN0b3IodmVyc2lvbiwgc2lnbmF0dXJlLCBwZXJtaXNzaW9uc09yT3B0aW9ucywgc2VydmljZXMsIHJlc291cmNlVHlwZXMsIHByb3RvY29sLCBzdGFydHNPbiwgZXhwaXJlc09uLCBpcFJhbmdlLCBpZGVudGlmaWVyLCByZXNvdXJjZSwgY2FjaGVDb250cm9sLCBjb250ZW50RGlzcG9zaXRpb24sIGNvbnRlbnRFbmNvZGluZywgY29udGVudExhbmd1YWdlLCBjb250ZW50VHlwZSwgdXNlckRlbGVnYXRpb25LZXksIHByZWF1dGhvcml6ZWRBZ2VudE9iamVjdElkLCBjb3JyZWxhdGlvbklkLCBlbmNyeXB0aW9uU2NvcGUpIHtcbiAgICAgICAgdGhpcy52ZXJzaW9uID0gdmVyc2lvbjtcbiAgICAgICAgdGhpcy5zaWduYXR1cmUgPSBzaWduYXR1cmU7XG4gICAgICAgIGlmIChwZXJtaXNzaW9uc09yT3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBwZXJtaXNzaW9uc09yT3B0aW9ucyAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgLy8gU0FTUXVlcnlQYXJhbWV0ZXJzT3B0aW9uc1xuICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9ucyA9IHBlcm1pc3Npb25zT3JPcHRpb25zLnBlcm1pc3Npb25zO1xuICAgICAgICAgICAgdGhpcy5zZXJ2aWNlcyA9IHBlcm1pc3Npb25zT3JPcHRpb25zLnNlcnZpY2VzO1xuICAgICAgICAgICAgdGhpcy5yZXNvdXJjZVR5cGVzID0gcGVybWlzc2lvbnNPck9wdGlvbnMucmVzb3VyY2VUeXBlcztcbiAgICAgICAgICAgIHRoaXMucHJvdG9jb2wgPSBwZXJtaXNzaW9uc09yT3B0aW9ucy5wcm90b2NvbDtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRzT24gPSBwZXJtaXNzaW9uc09yT3B0aW9ucy5zdGFydHNPbjtcbiAgICAgICAgICAgIHRoaXMuZXhwaXJlc09uID0gcGVybWlzc2lvbnNPck9wdGlvbnMuZXhwaXJlc09uO1xuICAgICAgICAgICAgdGhpcy5pcFJhbmdlSW5uZXIgPSBwZXJtaXNzaW9uc09yT3B0aW9ucy5pcFJhbmdlO1xuICAgICAgICAgICAgdGhpcy5pZGVudGlmaWVyID0gcGVybWlzc2lvbnNPck9wdGlvbnMuaWRlbnRpZmllcjtcbiAgICAgICAgICAgIHRoaXMuZW5jcnlwdGlvblNjb3BlID0gcGVybWlzc2lvbnNPck9wdGlvbnMuZW5jcnlwdGlvblNjb3BlO1xuICAgICAgICAgICAgdGhpcy5yZXNvdXJjZSA9IHBlcm1pc3Npb25zT3JPcHRpb25zLnJlc291cmNlO1xuICAgICAgICAgICAgdGhpcy5jYWNoZUNvbnRyb2wgPSBwZXJtaXNzaW9uc09yT3B0aW9ucy5jYWNoZUNvbnRyb2w7XG4gICAgICAgICAgICB0aGlzLmNvbnRlbnREaXNwb3NpdGlvbiA9IHBlcm1pc3Npb25zT3JPcHRpb25zLmNvbnRlbnREaXNwb3NpdGlvbjtcbiAgICAgICAgICAgIHRoaXMuY29udGVudEVuY29kaW5nID0gcGVybWlzc2lvbnNPck9wdGlvbnMuY29udGVudEVuY29kaW5nO1xuICAgICAgICAgICAgdGhpcy5jb250ZW50TGFuZ3VhZ2UgPSBwZXJtaXNzaW9uc09yT3B0aW9ucy5jb250ZW50TGFuZ3VhZ2U7XG4gICAgICAgICAgICB0aGlzLmNvbnRlbnRUeXBlID0gcGVybWlzc2lvbnNPck9wdGlvbnMuY29udGVudFR5cGU7XG4gICAgICAgICAgICBpZiAocGVybWlzc2lvbnNPck9wdGlvbnMudXNlckRlbGVnYXRpb25LZXkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNpZ25lZE9pZCA9IHBlcm1pc3Npb25zT3JPcHRpb25zLnVzZXJEZWxlZ2F0aW9uS2V5LnNpZ25lZE9iamVjdElkO1xuICAgICAgICAgICAgICAgIHRoaXMuc2lnbmVkVGVuYW50SWQgPSBwZXJtaXNzaW9uc09yT3B0aW9ucy51c2VyRGVsZWdhdGlvbktleS5zaWduZWRUZW5hbnRJZDtcbiAgICAgICAgICAgICAgICB0aGlzLnNpZ25lZFN0YXJ0c09uID0gcGVybWlzc2lvbnNPck9wdGlvbnMudXNlckRlbGVnYXRpb25LZXkuc2lnbmVkU3RhcnRzT247XG4gICAgICAgICAgICAgICAgdGhpcy5zaWduZWRFeHBpcmVzT24gPSBwZXJtaXNzaW9uc09yT3B0aW9ucy51c2VyRGVsZWdhdGlvbktleS5zaWduZWRFeHBpcmVzT247XG4gICAgICAgICAgICAgICAgdGhpcy5zaWduZWRTZXJ2aWNlID0gcGVybWlzc2lvbnNPck9wdGlvbnMudXNlckRlbGVnYXRpb25LZXkuc2lnbmVkU2VydmljZTtcbiAgICAgICAgICAgICAgICB0aGlzLnNpZ25lZFZlcnNpb24gPSBwZXJtaXNzaW9uc09yT3B0aW9ucy51c2VyRGVsZWdhdGlvbktleS5zaWduZWRWZXJzaW9uO1xuICAgICAgICAgICAgICAgIHRoaXMucHJlYXV0aG9yaXplZEFnZW50T2JqZWN0SWQgPSBwZXJtaXNzaW9uc09yT3B0aW9ucy5wcmVhdXRob3JpemVkQWdlbnRPYmplY3RJZDtcbiAgICAgICAgICAgICAgICB0aGlzLmNvcnJlbGF0aW9uSWQgPSBwZXJtaXNzaW9uc09yT3B0aW9ucy5jb3JyZWxhdGlvbklkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXJ2aWNlcyA9IHNlcnZpY2VzO1xuICAgICAgICAgICAgdGhpcy5yZXNvdXJjZVR5cGVzID0gcmVzb3VyY2VUeXBlcztcbiAgICAgICAgICAgIHRoaXMuZXhwaXJlc09uID0gZXhwaXJlc09uO1xuICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9ucyA9IHBlcm1pc3Npb25zT3JPcHRpb25zO1xuICAgICAgICAgICAgdGhpcy5wcm90b2NvbCA9IHByb3RvY29sO1xuICAgICAgICAgICAgdGhpcy5zdGFydHNPbiA9IHN0YXJ0c09uO1xuICAgICAgICAgICAgdGhpcy5pcFJhbmdlSW5uZXIgPSBpcFJhbmdlO1xuICAgICAgICAgICAgdGhpcy5lbmNyeXB0aW9uU2NvcGUgPSBlbmNyeXB0aW9uU2NvcGU7XG4gICAgICAgICAgICB0aGlzLmlkZW50aWZpZXIgPSBpZGVudGlmaWVyO1xuICAgICAgICAgICAgdGhpcy5yZXNvdXJjZSA9IHJlc291cmNlO1xuICAgICAgICAgICAgdGhpcy5jYWNoZUNvbnRyb2wgPSBjYWNoZUNvbnRyb2w7XG4gICAgICAgICAgICB0aGlzLmNvbnRlbnREaXNwb3NpdGlvbiA9IGNvbnRlbnREaXNwb3NpdGlvbjtcbiAgICAgICAgICAgIHRoaXMuY29udGVudEVuY29kaW5nID0gY29udGVudEVuY29kaW5nO1xuICAgICAgICAgICAgdGhpcy5jb250ZW50TGFuZ3VhZ2UgPSBjb250ZW50TGFuZ3VhZ2U7XG4gICAgICAgICAgICB0aGlzLmNvbnRlbnRUeXBlID0gY29udGVudFR5cGU7XG4gICAgICAgICAgICBpZiAodXNlckRlbGVnYXRpb25LZXkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNpZ25lZE9pZCA9IHVzZXJEZWxlZ2F0aW9uS2V5LnNpZ25lZE9iamVjdElkO1xuICAgICAgICAgICAgICAgIHRoaXMuc2lnbmVkVGVuYW50SWQgPSB1c2VyRGVsZWdhdGlvbktleS5zaWduZWRUZW5hbnRJZDtcbiAgICAgICAgICAgICAgICB0aGlzLnNpZ25lZFN0YXJ0c09uID0gdXNlckRlbGVnYXRpb25LZXkuc2lnbmVkU3RhcnRzT247XG4gICAgICAgICAgICAgICAgdGhpcy5zaWduZWRFeHBpcmVzT24gPSB1c2VyRGVsZWdhdGlvbktleS5zaWduZWRFeHBpcmVzT247XG4gICAgICAgICAgICAgICAgdGhpcy5zaWduZWRTZXJ2aWNlID0gdXNlckRlbGVnYXRpb25LZXkuc2lnbmVkU2VydmljZTtcbiAgICAgICAgICAgICAgICB0aGlzLnNpZ25lZFZlcnNpb24gPSB1c2VyRGVsZWdhdGlvbktleS5zaWduZWRWZXJzaW9uO1xuICAgICAgICAgICAgICAgIHRoaXMucHJlYXV0aG9yaXplZEFnZW50T2JqZWN0SWQgPSBwcmVhdXRob3JpemVkQWdlbnRPYmplY3RJZDtcbiAgICAgICAgICAgICAgICB0aGlzLmNvcnJlbGF0aW9uSWQgPSBjb3JyZWxhdGlvbklkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEVuY29kZXMgYWxsIFNBUyBxdWVyeSBwYXJhbWV0ZXJzIGludG8gYSBzdHJpbmcgdGhhdCBjYW4gYmUgYXBwZW5kZWQgdG8gYSBVUkwuXG4gICAgICpcbiAgICAgKi9cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgY29uc3QgcGFyYW1zID0gW1xuICAgICAgICAgICAgXCJzdlwiLFxuICAgICAgICAgICAgXCJzc1wiLFxuICAgICAgICAgICAgXCJzcnRcIixcbiAgICAgICAgICAgIFwic3ByXCIsXG4gICAgICAgICAgICBcInN0XCIsXG4gICAgICAgICAgICBcInNlXCIsXG4gICAgICAgICAgICBcInNpcFwiLFxuICAgICAgICAgICAgXCJzaVwiLFxuICAgICAgICAgICAgXCJzZXNcIixcbiAgICAgICAgICAgIFwic2tvaWRcIiwgLy8gU2lnbmVkIG9iamVjdCBJRFxuICAgICAgICAgICAgXCJza3RpZFwiLCAvLyBTaWduZWQgdGVuYW50IElEXG4gICAgICAgICAgICBcInNrdFwiLCAvLyBTaWduZWQga2V5IHN0YXJ0IHRpbWVcbiAgICAgICAgICAgIFwic2tlXCIsIC8vIFNpZ25lZCBrZXkgZXhwaXJ5IHRpbWVcbiAgICAgICAgICAgIFwic2tzXCIsIC8vIFNpZ25lZCBrZXkgc2VydmljZVxuICAgICAgICAgICAgXCJza3ZcIiwgLy8gU2lnbmVkIGtleSB2ZXJzaW9uXG4gICAgICAgICAgICBcInNyXCIsXG4gICAgICAgICAgICBcInNwXCIsXG4gICAgICAgICAgICBcInNpZ1wiLFxuICAgICAgICAgICAgXCJyc2NjXCIsXG4gICAgICAgICAgICBcInJzY2RcIixcbiAgICAgICAgICAgIFwicnNjZVwiLFxuICAgICAgICAgICAgXCJyc2NsXCIsXG4gICAgICAgICAgICBcInJzY3RcIixcbiAgICAgICAgICAgIFwic2FvaWRcIixcbiAgICAgICAgICAgIFwic2NpZFwiLFxuICAgICAgICBdO1xuICAgICAgICBjb25zdCBxdWVyaWVzID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcGFyYW0gb2YgcGFyYW1zKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHBhcmFtKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcInN2XCI6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJ5QXBwZW5kUXVlcnlQYXJhbWV0ZXIocXVlcmllcywgcGFyYW0sIHRoaXMudmVyc2lvbik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzc1wiOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIHBhcmFtLCB0aGlzLnNlcnZpY2VzKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNydFwiOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIHBhcmFtLCB0aGlzLnJlc291cmNlVHlwZXMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwic3ByXCI6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJ5QXBwZW5kUXVlcnlQYXJhbWV0ZXIocXVlcmllcywgcGFyYW0sIHRoaXMucHJvdG9jb2wpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwic3RcIjpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cnlBcHBlbmRRdWVyeVBhcmFtZXRlcihxdWVyaWVzLCBwYXJhbSwgdGhpcy5zdGFydHNPbiA/IHRydW5jYXRlZElTTzgwNjFEYXRlKHRoaXMuc3RhcnRzT24sIGZhbHNlKSA6IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzZVwiOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIHBhcmFtLCB0aGlzLmV4cGlyZXNPbiA/IHRydW5jYXRlZElTTzgwNjFEYXRlKHRoaXMuZXhwaXJlc09uLCBmYWxzZSkgOiB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwic2lwXCI6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJ5QXBwZW5kUXVlcnlQYXJhbWV0ZXIocXVlcmllcywgcGFyYW0sIHRoaXMuaXBSYW5nZSA/IGlwUmFuZ2VUb1N0cmluZyh0aGlzLmlwUmFuZ2UpIDogdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNpXCI6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJ5QXBwZW5kUXVlcnlQYXJhbWV0ZXIocXVlcmllcywgcGFyYW0sIHRoaXMuaWRlbnRpZmllcik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzZXNcIjpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cnlBcHBlbmRRdWVyeVBhcmFtZXRlcihxdWVyaWVzLCBwYXJhbSwgdGhpcy5lbmNyeXB0aW9uU2NvcGUpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwic2tvaWRcIjogLy8gU2lnbmVkIG9iamVjdCBJRFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIHBhcmFtLCB0aGlzLnNpZ25lZE9pZCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJza3RpZFwiOiAvLyBTaWduZWQgdGVuYW50IElEXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJ5QXBwZW5kUXVlcnlQYXJhbWV0ZXIocXVlcmllcywgcGFyYW0sIHRoaXMuc2lnbmVkVGVuYW50SWQpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwic2t0XCI6IC8vIFNpZ25lZCBrZXkgc3RhcnQgdGltZVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIHBhcmFtLCB0aGlzLnNpZ25lZFN0YXJ0c09uID8gdHJ1bmNhdGVkSVNPODA2MURhdGUodGhpcy5zaWduZWRTdGFydHNPbiwgZmFsc2UpIDogdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNrZVwiOiAvLyBTaWduZWQga2V5IGV4cGlyeSB0aW1lXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJ5QXBwZW5kUXVlcnlQYXJhbWV0ZXIocXVlcmllcywgcGFyYW0sIHRoaXMuc2lnbmVkRXhwaXJlc09uID8gdHJ1bmNhdGVkSVNPODA2MURhdGUodGhpcy5zaWduZWRFeHBpcmVzT24sIGZhbHNlKSA6IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJza3NcIjogLy8gU2lnbmVkIGtleSBzZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJ5QXBwZW5kUXVlcnlQYXJhbWV0ZXIocXVlcmllcywgcGFyYW0sIHRoaXMuc2lnbmVkU2VydmljZSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJza3ZcIjogLy8gU2lnbmVkIGtleSB2ZXJzaW9uXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJ5QXBwZW5kUXVlcnlQYXJhbWV0ZXIocXVlcmllcywgcGFyYW0sIHRoaXMuc2lnbmVkVmVyc2lvbik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzclwiOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIHBhcmFtLCB0aGlzLnJlc291cmNlKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNwXCI6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJ5QXBwZW5kUXVlcnlQYXJhbWV0ZXIocXVlcmllcywgcGFyYW0sIHRoaXMucGVybWlzc2lvbnMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwic2lnXCI6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJ5QXBwZW5kUXVlcnlQYXJhbWV0ZXIocXVlcmllcywgcGFyYW0sIHRoaXMuc2lnbmF0dXJlKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInJzY2NcIjpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cnlBcHBlbmRRdWVyeVBhcmFtZXRlcihxdWVyaWVzLCBwYXJhbSwgdGhpcy5jYWNoZUNvbnRyb2wpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwicnNjZFwiOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIHBhcmFtLCB0aGlzLmNvbnRlbnREaXNwb3NpdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJyc2NlXCI6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJ5QXBwZW5kUXVlcnlQYXJhbWV0ZXIocXVlcmllcywgcGFyYW0sIHRoaXMuY29udGVudEVuY29kaW5nKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInJzY2xcIjpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cnlBcHBlbmRRdWVyeVBhcmFtZXRlcihxdWVyaWVzLCBwYXJhbSwgdGhpcy5jb250ZW50TGFuZ3VhZ2UpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwicnNjdFwiOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIHBhcmFtLCB0aGlzLmNvbnRlbnRUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNhb2lkXCI6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJ5QXBwZW5kUXVlcnlQYXJhbWV0ZXIocXVlcmllcywgcGFyYW0sIHRoaXMucHJlYXV0aG9yaXplZEFnZW50T2JqZWN0SWQpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwic2NpZFwiOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIHBhcmFtLCB0aGlzLmNvcnJlbGF0aW9uSWQpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcXVlcmllcy5qb2luKFwiJlwiKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQSBwcml2YXRlIGhlbHBlciBtZXRob2QgdXNlZCB0byBmaWx0ZXIgYW5kIGFwcGVuZCBxdWVyeSBrZXkvdmFsdWUgcGFpcnMgaW50byBhbiBhcnJheS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBxdWVyaWVzIC1cbiAgICAgKiBAcGFyYW0ga2V5IC1cbiAgICAgKiBAcGFyYW0gdmFsdWUgLVxuICAgICAqL1xuICAgIHRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIGtleSwgdmFsdWUpIHtcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGtleSA9IGVuY29kZVVSSUNvbXBvbmVudChrZXkpO1xuICAgICAgICB2YWx1ZSA9IGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7XG4gICAgICAgIGlmIChrZXkubGVuZ3RoID4gMCAmJiB2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBxdWVyaWVzLnB1c2goYCR7a2V5fT0ke3ZhbHVlfWApO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbmZ1bmN0aW9uIGdlbmVyYXRlQmxvYlNBU1F1ZXJ5UGFyYW1ldGVycyhibG9iU0FTU2lnbmF0dXJlVmFsdWVzLCBzaGFyZWRLZXlDcmVkZW50aWFsT3JVc2VyRGVsZWdhdGlvbktleSwgYWNjb3VudE5hbWUpIHtcbiAgICByZXR1cm4gZ2VuZXJhdGVCbG9iU0FTUXVlcnlQYXJhbWV0ZXJzSW50ZXJuYWwoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcywgc2hhcmVkS2V5Q3JlZGVudGlhbE9yVXNlckRlbGVnYXRpb25LZXksIGFjY291bnROYW1lKS5zYXNRdWVyeVBhcmFtZXRlcnM7XG59XG5mdW5jdGlvbiBnZW5lcmF0ZUJsb2JTQVNRdWVyeVBhcmFtZXRlcnNJbnRlcm5hbChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLCBzaGFyZWRLZXlDcmVkZW50aWFsT3JVc2VyRGVsZWdhdGlvbktleSwgYWNjb3VudE5hbWUpIHtcbiAgICBjb25zdCB2ZXJzaW9uID0gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uID8gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uIDogU0VSVklDRV9WRVJTSU9OO1xuICAgIGNvbnN0IHNoYXJlZEtleUNyZWRlbnRpYWwgPSBzaGFyZWRLZXlDcmVkZW50aWFsT3JVc2VyRGVsZWdhdGlvbktleSBpbnN0YW5jZW9mIFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsXG4gICAgICAgID8gc2hhcmVkS2V5Q3JlZGVudGlhbE9yVXNlckRlbGVnYXRpb25LZXlcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgbGV0IHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbDtcbiAgICBpZiAoc2hhcmVkS2V5Q3JlZGVudGlhbCA9PT0gdW5kZWZpbmVkICYmIGFjY291bnROYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsID0gbmV3IFVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbChhY2NvdW50TmFtZSwgc2hhcmVkS2V5Q3JlZGVudGlhbE9yVXNlckRlbGVnYXRpb25LZXkpO1xuICAgIH1cbiAgICBpZiAoc2hhcmVkS2V5Q3JlZGVudGlhbCA9PT0gdW5kZWZpbmVkICYmIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IFR5cGVFcnJvcihcIkludmFsaWQgc2hhcmVkS2V5Q3JlZGVudGlhbCwgdXNlckRlbGVnYXRpb25LZXkgb3IgYWNjb3VudE5hbWUuXCIpO1xuICAgIH1cbiAgICAvLyBWZXJzaW9uIDIwMjAtMTItMDYgYWRkcyBzdXBwb3J0IGZvciBlbmNyeXB0aW9uc2NvcGUgaW4gU0FTLlxuICAgIGlmICh2ZXJzaW9uID49IFwiMjAyMC0xMi0wNlwiKSB7XG4gICAgICAgIGlmIChzaGFyZWRLZXlDcmVkZW50aWFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBnZW5lcmF0ZUJsb2JTQVNRdWVyeVBhcmFtZXRlcnMyMDIwMTIwNihibG9iU0FTU2lnbmF0dXJlVmFsdWVzLCBzaGFyZWRLZXlDcmVkZW50aWFsKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBnZW5lcmF0ZUJsb2JTQVNRdWVyeVBhcmFtZXRlcnNVREsyMDIwMTIwNihibG9iU0FTU2lnbmF0dXJlVmFsdWVzLCB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFZlcnNpb24gMjAxOS0xMi0xMiBhZGRzIHN1cHBvcnQgZm9yIHRoZSBibG9iIHRhZ3MgcGVybWlzc2lvbi5cbiAgICAvLyBWZXJzaW9uIDIwMTgtMTEtMDkgYWRkcyBzdXBwb3J0IGZvciB0aGUgc2lnbmVkIHJlc291cmNlIGFuZCBzaWduZWQgYmxvYiBzbmFwc2hvdCB0aW1lIGZpZWxkcy5cbiAgICAvLyBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvY29uc3RydWN0aW5nLWEtc2VydmljZS1zYXMjY29uc3RydWN0aW5nLXRoZS1zaWduYXR1cmUtc3RyaW5nXG4gICAgaWYgKHZlcnNpb24gPj0gXCIyMDE4LTExLTA5XCIpIHtcbiAgICAgICAgaWYgKHNoYXJlZEtleUNyZWRlbnRpYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRlQmxvYlNBU1F1ZXJ5UGFyYW1ldGVyczIwMTgxMTA5KGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMsIHNoYXJlZEtleUNyZWRlbnRpYWwpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gVmVyc2lvbiAyMDIwLTAyLTEwIGRlbGVnYXRpb24gU0FTIHNpZ25hdHVyZSBjb25zdHJ1Y3Rpb24gaW5jbHVkZXMgcHJlYXV0aG9yaXplZEFnZW50T2JqZWN0SWQsIGFnZW50T2JqZWN0SWQsIGNvcnJlbGF0aW9uSWQuXG4gICAgICAgICAgICBpZiAodmVyc2lvbiA+PSBcIjIwMjAtMDItMTBcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiBnZW5lcmF0ZUJsb2JTQVNRdWVyeVBhcmFtZXRlcnNVREsyMDIwMDIxMChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLCB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRlQmxvYlNBU1F1ZXJ5UGFyYW1ldGVyc1VESzIwMTgxMTA5KGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMsIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHZlcnNpb24gPj0gXCIyMDE1LTA0LTA1XCIpIHtcbiAgICAgICAgaWYgKHNoYXJlZEtleUNyZWRlbnRpYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRlQmxvYlNBU1F1ZXJ5UGFyYW1ldGVyczIwMTUwNDA1KGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMsIHNoYXJlZEtleUNyZWRlbnRpYWwpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCIndmVyc2lvbicgbXVzdCBiZSA+PSAnMjAxOC0xMS0wOScgd2hlbiBnZW5lcmF0aW5nIHVzZXIgZGVsZWdhdGlvbiBTQVMgdXNpbmcgdXNlciBkZWxlZ2F0aW9uIGtleS5cIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCIndmVyc2lvbicgbXVzdCBiZSA+PSAnMjAxNS0wNC0wNScuXCIpO1xufVxuLyoqXG4gKiBPTkxZIEFWQUlMQUJMRSBJTiBOT0RFLkpTIFJVTlRJTUUuXG4gKiBJTVBMRU1FTlRBVElPTiBGT1IgQVBJIFZFUlNJT04gRlJPTSAyMDE1LTA0LTA1IEFORCBCRUZPUkUgMjAxOC0xMS0wOS5cbiAqXG4gKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIFNBU1F1ZXJ5UGFyYW1ldGVycy5cbiAqXG4gKiBPbmx5IGFjY2VwdHMgcmVxdWlyZWQgc2V0dGluZ3MgbmVlZGVkIHRvIGNyZWF0ZSBhIFNBUy4gRm9yIG9wdGlvbmFsIHNldHRpbmdzIHBsZWFzZVxuICogc2V0IGNvcnJlc3BvbmRpbmcgcHJvcGVydGllcyBkaXJlY3RseSwgc3VjaCBhcyBwZXJtaXNzaW9ucywgc3RhcnRzT24gYW5kIGlkZW50aWZpZXIuXG4gKlxuICogV0FSTklORzogV2hlbiBpZGVudGlmaWVyIGlzIG5vdCBwcm92aWRlZCwgcGVybWlzc2lvbnMgYW5kIGV4cGlyZXNPbiBhcmUgcmVxdWlyZWQuXG4gKiBZb3UgTVVTVCBhc3NpZ24gdmFsdWUgdG8gaWRlbnRpZmllciBvciBleHBpcmVzT24gJiBwZXJtaXNzaW9ucyBtYW51YWxseSBpZiB5b3UgaW5pdGlhbCB3aXRoXG4gKiB0aGlzIGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBibG9iU0FTU2lnbmF0dXJlVmFsdWVzIC1cbiAqIEBwYXJhbSBzaGFyZWRLZXlDcmVkZW50aWFsIC1cbiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGVCbG9iU0FTUXVlcnlQYXJhbWV0ZXJzMjAxNTA0MDUoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcywgc2hhcmVkS2V5Q3JlZGVudGlhbCkge1xuICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMgPSBTQVNTaWduYXR1cmVWYWx1ZXNTYW5pdHlDaGVja0FuZEF1dG9maWxsKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMpO1xuICAgIGlmICghYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5pZGVudGlmaWVyICYmXG4gICAgICAgICEoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucyAmJiBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmV4cGlyZXNPbikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJNdXN0IHByb3ZpZGUgJ3Blcm1pc3Npb25zJyBhbmQgJ2V4cGlyZXNPbicgZm9yIEJsb2IgU0FTIGdlbmVyYXRpb24gd2hlbiAnaWRlbnRpZmllcicgaXMgbm90IHByb3ZpZGVkLlwiKTtcbiAgICB9XG4gICAgbGV0IHJlc291cmNlID0gXCJjXCI7XG4gICAgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuYmxvYk5hbWUpIHtcbiAgICAgICAgcmVzb3VyY2UgPSBcImJcIjtcbiAgICB9XG4gICAgLy8gQ2FsbGluZyBwYXJzZSBhbmQgdG9TdHJpbmcgZ3VhcmFudGVlcyB0aGUgcHJvcGVyIG9yZGVyaW5nIGFuZCB0aHJvd3Mgb24gaW52YWxpZCBjaGFyYWN0ZXJzLlxuICAgIGxldCB2ZXJpZmllZFBlcm1pc3Npb25zO1xuICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zKSB7XG4gICAgICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmJsb2JOYW1lKSB7XG4gICAgICAgICAgICB2ZXJpZmllZFBlcm1pc3Npb25zID0gQmxvYlNBU1Blcm1pc3Npb25zLnBhcnNlKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMudG9TdHJpbmcoKSkudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZlcmlmaWVkUGVybWlzc2lvbnMgPSBDb250YWluZXJTQVNQZXJtaXNzaW9ucy5wYXJzZShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zLnRvU3RyaW5nKCkpLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gU2lnbmF0dXJlIGlzIGdlbmVyYXRlZCBvbiB0aGUgdW4tdXJsLWVuY29kZWQgdmFsdWVzLlxuICAgIGNvbnN0IHN0cmluZ1RvU2lnbiA9IFtcbiAgICAgICAgdmVyaWZpZWRQZXJtaXNzaW9ucyA/IHZlcmlmaWVkUGVybWlzc2lvbnMgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnN0YXJ0c09uXG4gICAgICAgICAgICA/IHRydW5jYXRlZElTTzgwNjFEYXRlKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuc3RhcnRzT24sIGZhbHNlKVxuICAgICAgICAgICAgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmV4cGlyZXNPblxuICAgICAgICAgICAgPyB0cnVuY2F0ZWRJU084MDYxRGF0ZShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmV4cGlyZXNPbiwgZmFsc2UpXG4gICAgICAgICAgICA6IFwiXCIsXG4gICAgICAgIGdldENhbm9uaWNhbE5hbWUoc2hhcmVkS2V5Q3JlZGVudGlhbC5hY2NvdW50TmFtZSwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250YWluZXJOYW1lLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmJsb2JOYW1lKSxcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5pZGVudGlmaWVyLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmlwUmFuZ2UgPyBpcFJhbmdlVG9TdHJpbmcoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5pcFJhbmdlKSA6IFwiXCIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucHJvdG9jb2wgPyBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnByb3RvY29sIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNhY2hlQ29udHJvbCA/IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY2FjaGVDb250cm9sIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50RGlzcG9zaXRpb24gPyBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnREaXNwb3NpdGlvbiA6IFwiXCIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudEVuY29kaW5nID8gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50RW5jb2RpbmcgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRMYW5ndWFnZSA/IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudExhbmd1YWdlIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50VHlwZSA/IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudFR5cGUgOiBcIlwiLFxuICAgIF0uam9pbihcIlxcblwiKTtcbiAgICBjb25zdCBzaWduYXR1cmUgPSBzaGFyZWRLZXlDcmVkZW50aWFsLmNvbXB1dGVITUFDU0hBMjU2KHN0cmluZ1RvU2lnbik7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc2FzUXVlcnlQYXJhbWV0ZXJzOiBuZXcgU0FTUXVlcnlQYXJhbWV0ZXJzKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMudmVyc2lvbiwgc2lnbmF0dXJlLCB2ZXJpZmllZFBlcm1pc3Npb25zLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wcm90b2NvbCwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5zdGFydHNPbiwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5leHBpcmVzT24sIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuaXBSYW5nZSwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5pZGVudGlmaWVyLCByZXNvdXJjZSwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jYWNoZUNvbnRyb2wsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudERpc3Bvc2l0aW9uLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRFbmNvZGluZywgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50TGFuZ3VhZ2UsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudFR5cGUpLFxuICAgICAgICBzdHJpbmdUb1NpZ246IHN0cmluZ1RvU2lnbixcbiAgICB9O1xufVxuLyoqXG4gKiBPTkxZIEFWQUlMQUJMRSBJTiBOT0RFLkpTIFJVTlRJTUUuXG4gKiBJTVBMRU1FTlRBVElPTiBGT1IgQVBJIFZFUlNJT04gRlJPTSAyMDE4LTExLTA5LlxuICpcbiAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgU0FTUXVlcnlQYXJhbWV0ZXJzLlxuICpcbiAqIE9ubHkgYWNjZXB0cyByZXF1aXJlZCBzZXR0aW5ncyBuZWVkZWQgdG8gY3JlYXRlIGEgU0FTLiBGb3Igb3B0aW9uYWwgc2V0dGluZ3MgcGxlYXNlXG4gKiBzZXQgY29ycmVzcG9uZGluZyBwcm9wZXJ0aWVzIGRpcmVjdGx5LCBzdWNoIGFzIHBlcm1pc3Npb25zLCBzdGFydHNPbiBhbmQgaWRlbnRpZmllci5cbiAqXG4gKiBXQVJOSU5HOiBXaGVuIGlkZW50aWZpZXIgaXMgbm90IHByb3ZpZGVkLCBwZXJtaXNzaW9ucyBhbmQgZXhwaXJlc09uIGFyZSByZXF1aXJlZC5cbiAqIFlvdSBNVVNUIGFzc2lnbiB2YWx1ZSB0byBpZGVudGlmaWVyIG9yIGV4cGlyZXNPbiAmIHBlcm1pc3Npb25zIG1hbnVhbGx5IGlmIHlvdSBpbml0aWFsIHdpdGhcbiAqIHRoaXMgY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMgLVxuICogQHBhcmFtIHNoYXJlZEtleUNyZWRlbnRpYWwgLVxuICovXG5mdW5jdGlvbiBnZW5lcmF0ZUJsb2JTQVNRdWVyeVBhcmFtZXRlcnMyMDE4MTEwOShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLCBzaGFyZWRLZXlDcmVkZW50aWFsKSB7XG4gICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcyA9IFNBU1NpZ25hdHVyZVZhbHVlc1Nhbml0eUNoZWNrQW5kQXV0b2ZpbGwoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcyk7XG4gICAgaWYgKCFibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmlkZW50aWZpZXIgJiZcbiAgICAgICAgIShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zICYmIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuZXhwaXJlc09uKSkge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIk11c3QgcHJvdmlkZSAncGVybWlzc2lvbnMnIGFuZCAnZXhwaXJlc09uJyBmb3IgQmxvYiBTQVMgZ2VuZXJhdGlvbiB3aGVuICdpZGVudGlmaWVyJyBpcyBub3QgcHJvdmlkZWQuXCIpO1xuICAgIH1cbiAgICBsZXQgcmVzb3VyY2UgPSBcImNcIjtcbiAgICBsZXQgdGltZXN0YW1wID0gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5zbmFwc2hvdFRpbWU7XG4gICAgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuYmxvYk5hbWUpIHtcbiAgICAgICAgcmVzb3VyY2UgPSBcImJcIjtcbiAgICAgICAgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuc25hcHNob3RUaW1lKSB7XG4gICAgICAgICAgICByZXNvdXJjZSA9IFwiYnNcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnZlcnNpb25JZCkge1xuICAgICAgICAgICAgcmVzb3VyY2UgPSBcImJ2XCI7XG4gICAgICAgICAgICB0aW1lc3RhbXAgPSBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnZlcnNpb25JZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBDYWxsaW5nIHBhcnNlIGFuZCB0b1N0cmluZyBndWFyYW50ZWVzIHRoZSBwcm9wZXIgb3JkZXJpbmcgYW5kIHRocm93cyBvbiBpbnZhbGlkIGNoYXJhY3RlcnMuXG4gICAgbGV0IHZlcmlmaWVkUGVybWlzc2lvbnM7XG4gICAgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMpIHtcbiAgICAgICAgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuYmxvYk5hbWUpIHtcbiAgICAgICAgICAgIHZlcmlmaWVkUGVybWlzc2lvbnMgPSBCbG9iU0FTUGVybWlzc2lvbnMucGFyc2UoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucy50b1N0cmluZygpKS50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmVyaWZpZWRQZXJtaXNzaW9ucyA9IENvbnRhaW5lclNBU1Blcm1pc3Npb25zLnBhcnNlKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMudG9TdHJpbmcoKSkudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBTaWduYXR1cmUgaXMgZ2VuZXJhdGVkIG9uIHRoZSB1bi11cmwtZW5jb2RlZCB2YWx1ZXMuXG4gICAgY29uc3Qgc3RyaW5nVG9TaWduID0gW1xuICAgICAgICB2ZXJpZmllZFBlcm1pc3Npb25zID8gdmVyaWZpZWRQZXJtaXNzaW9ucyA6IFwiXCIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuc3RhcnRzT25cbiAgICAgICAgICAgID8gdHJ1bmNhdGVkSVNPODA2MURhdGUoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5zdGFydHNPbiwgZmFsc2UpXG4gICAgICAgICAgICA6IFwiXCIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuZXhwaXJlc09uXG4gICAgICAgICAgICA/IHRydW5jYXRlZElTTzgwNjFEYXRlKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuZXhwaXJlc09uLCBmYWxzZSlcbiAgICAgICAgICAgIDogXCJcIixcbiAgICAgICAgZ2V0Q2Fub25pY2FsTmFtZShzaGFyZWRLZXlDcmVkZW50aWFsLmFjY291bnROYW1lLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRhaW5lck5hbWUsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuYmxvYk5hbWUpLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmlkZW50aWZpZXIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuaXBSYW5nZSA/IGlwUmFuZ2VUb1N0cmluZyhibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmlwUmFuZ2UpIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wcm90b2NvbCA/IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucHJvdG9jb2wgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnZlcnNpb24sXG4gICAgICAgIHJlc291cmNlLFxuICAgICAgICB0aW1lc3RhbXAsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY2FjaGVDb250cm9sID8gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jYWNoZUNvbnRyb2wgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnREaXNwb3NpdGlvbiA/IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudERpc3Bvc2l0aW9uIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50RW5jb2RpbmcgPyBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRFbmNvZGluZyA6IFwiXCIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudExhbmd1YWdlID8gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50TGFuZ3VhZ2UgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRUeXBlID8gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50VHlwZSA6IFwiXCIsXG4gICAgXS5qb2luKFwiXFxuXCIpO1xuICAgIGNvbnN0IHNpZ25hdHVyZSA9IHNoYXJlZEtleUNyZWRlbnRpYWwuY29tcHV0ZUhNQUNTSEEyNTYoc3RyaW5nVG9TaWduKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBzYXNRdWVyeVBhcmFtZXRlcnM6IG5ldyBTQVNRdWVyeVBhcmFtZXRlcnMoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uLCBzaWduYXR1cmUsIHZlcmlmaWVkUGVybWlzc2lvbnMsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnByb3RvY29sLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnN0YXJ0c09uLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmV4cGlyZXNPbiwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5pcFJhbmdlLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmlkZW50aWZpZXIsIHJlc291cmNlLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNhY2hlQ29udHJvbCwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50RGlzcG9zaXRpb24sIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudEVuY29kaW5nLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRMYW5ndWFnZSwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50VHlwZSksXG4gICAgICAgIHN0cmluZ1RvU2lnbjogc3RyaW5nVG9TaWduLFxuICAgIH07XG59XG4vKipcbiAqIE9OTFkgQVZBSUxBQkxFIElOIE5PREUuSlMgUlVOVElNRS5cbiAqIElNUExFTUVOVEFUSU9OIEZPUiBBUEkgVkVSU0lPTiBGUk9NIDIwMjAtMTItMDYuXG4gKlxuICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBTQVNRdWVyeVBhcmFtZXRlcnMuXG4gKlxuICogT25seSBhY2NlcHRzIHJlcXVpcmVkIHNldHRpbmdzIG5lZWRlZCB0byBjcmVhdGUgYSBTQVMuIEZvciBvcHRpb25hbCBzZXR0aW5ncyBwbGVhc2VcbiAqIHNldCBjb3JyZXNwb25kaW5nIHByb3BlcnRpZXMgZGlyZWN0bHksIHN1Y2ggYXMgcGVybWlzc2lvbnMsIHN0YXJ0c09uIGFuZCBpZGVudGlmaWVyLlxuICpcbiAqIFdBUk5JTkc6IFdoZW4gaWRlbnRpZmllciBpcyBub3QgcHJvdmlkZWQsIHBlcm1pc3Npb25zIGFuZCBleHBpcmVzT24gYXJlIHJlcXVpcmVkLlxuICogWW91IE1VU1QgYXNzaWduIHZhbHVlIHRvIGlkZW50aWZpZXIgb3IgZXhwaXJlc09uICYgcGVybWlzc2lvbnMgbWFudWFsbHkgaWYgeW91IGluaXRpYWwgd2l0aFxuICogdGhpcyBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcyAtXG4gKiBAcGFyYW0gc2hhcmVkS2V5Q3JlZGVudGlhbCAtXG4gKi9cbmZ1bmN0aW9uIGdlbmVyYXRlQmxvYlNBU1F1ZXJ5UGFyYW1ldGVyczIwMjAxMjA2KGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMsIHNoYXJlZEtleUNyZWRlbnRpYWwpIHtcbiAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzID0gU0FTU2lnbmF0dXJlVmFsdWVzU2FuaXR5Q2hlY2tBbmRBdXRvZmlsbChibG9iU0FTU2lnbmF0dXJlVmFsdWVzKTtcbiAgICBpZiAoIWJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuaWRlbnRpZmllciAmJlxuICAgICAgICAhKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMgJiYgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5leHBpcmVzT24pKSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiTXVzdCBwcm92aWRlICdwZXJtaXNzaW9ucycgYW5kICdleHBpcmVzT24nIGZvciBCbG9iIFNBUyBnZW5lcmF0aW9uIHdoZW4gJ2lkZW50aWZpZXInIGlzIG5vdCBwcm92aWRlZC5cIik7XG4gICAgfVxuICAgIGxldCByZXNvdXJjZSA9IFwiY1wiO1xuICAgIGxldCB0aW1lc3RhbXAgPSBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnNuYXBzaG90VGltZTtcbiAgICBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5ibG9iTmFtZSkge1xuICAgICAgICByZXNvdXJjZSA9IFwiYlwiO1xuICAgICAgICBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5zbmFwc2hvdFRpbWUpIHtcbiAgICAgICAgICAgIHJlc291cmNlID0gXCJic1wiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMudmVyc2lvbklkKSB7XG4gICAgICAgICAgICByZXNvdXJjZSA9IFwiYnZcIjtcbiAgICAgICAgICAgIHRpbWVzdGFtcCA9IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMudmVyc2lvbklkO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIENhbGxpbmcgcGFyc2UgYW5kIHRvU3RyaW5nIGd1YXJhbnRlZXMgdGhlIHByb3BlciBvcmRlcmluZyBhbmQgdGhyb3dzIG9uIGludmFsaWQgY2hhcmFjdGVycy5cbiAgICBsZXQgdmVyaWZpZWRQZXJtaXNzaW9ucztcbiAgICBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucykge1xuICAgICAgICBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5ibG9iTmFtZSkge1xuICAgICAgICAgICAgdmVyaWZpZWRQZXJtaXNzaW9ucyA9IEJsb2JTQVNQZXJtaXNzaW9ucy5wYXJzZShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zLnRvU3RyaW5nKCkpLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2ZXJpZmllZFBlcm1pc3Npb25zID0gQ29udGFpbmVyU0FTUGVybWlzc2lvbnMucGFyc2UoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucy50b1N0cmluZygpKS50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFNpZ25hdHVyZSBpcyBnZW5lcmF0ZWQgb24gdGhlIHVuLXVybC1lbmNvZGVkIHZhbHVlcy5cbiAgICBjb25zdCBzdHJpbmdUb1NpZ24gPSBbXG4gICAgICAgIHZlcmlmaWVkUGVybWlzc2lvbnMgPyB2ZXJpZmllZFBlcm1pc3Npb25zIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5zdGFydHNPblxuICAgICAgICAgICAgPyB0cnVuY2F0ZWRJU084MDYxRGF0ZShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnN0YXJ0c09uLCBmYWxzZSlcbiAgICAgICAgICAgIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5leHBpcmVzT25cbiAgICAgICAgICAgID8gdHJ1bmNhdGVkSVNPODA2MURhdGUoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5leHBpcmVzT24sIGZhbHNlKVxuICAgICAgICAgICAgOiBcIlwiLFxuICAgICAgICBnZXRDYW5vbmljYWxOYW1lKHNoYXJlZEtleUNyZWRlbnRpYWwuYWNjb3VudE5hbWUsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGFpbmVyTmFtZSwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5ibG9iTmFtZSksXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuaWRlbnRpZmllcixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5pcFJhbmdlID8gaXBSYW5nZVRvU3RyaW5nKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuaXBSYW5nZSkgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnByb3RvY29sID8gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wcm90b2NvbCA6IFwiXCIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMudmVyc2lvbixcbiAgICAgICAgcmVzb3VyY2UsXG4gICAgICAgIHRpbWVzdGFtcCxcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5lbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY2FjaGVDb250cm9sID8gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jYWNoZUNvbnRyb2wgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnREaXNwb3NpdGlvbiA/IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudERpc3Bvc2l0aW9uIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50RW5jb2RpbmcgPyBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRFbmNvZGluZyA6IFwiXCIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudExhbmd1YWdlID8gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50TGFuZ3VhZ2UgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRUeXBlID8gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50VHlwZSA6IFwiXCIsXG4gICAgXS5qb2luKFwiXFxuXCIpO1xuICAgIGNvbnN0IHNpZ25hdHVyZSA9IHNoYXJlZEtleUNyZWRlbnRpYWwuY29tcHV0ZUhNQUNTSEEyNTYoc3RyaW5nVG9TaWduKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBzYXNRdWVyeVBhcmFtZXRlcnM6IG5ldyBTQVNRdWVyeVBhcmFtZXRlcnMoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uLCBzaWduYXR1cmUsIHZlcmlmaWVkUGVybWlzc2lvbnMsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnByb3RvY29sLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnN0YXJ0c09uLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmV4cGlyZXNPbiwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5pcFJhbmdlLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmlkZW50aWZpZXIsIHJlc291cmNlLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNhY2hlQ29udHJvbCwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50RGlzcG9zaXRpb24sIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudEVuY29kaW5nLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRMYW5ndWFnZSwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50VHlwZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5lbmNyeXB0aW9uU2NvcGUpLFxuICAgICAgICBzdHJpbmdUb1NpZ246IHN0cmluZ1RvU2lnbixcbiAgICB9O1xufVxuLyoqXG4gKiBPTkxZIEFWQUlMQUJMRSBJTiBOT0RFLkpTIFJVTlRJTUUuXG4gKiBJTVBMRU1FTlRBVElPTiBGT1IgQVBJIFZFUlNJT04gRlJPTSAyMDE4LTExLTA5LlxuICpcbiAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgU0FTUXVlcnlQYXJhbWV0ZXJzLlxuICpcbiAqIE9ubHkgYWNjZXB0cyByZXF1aXJlZCBzZXR0aW5ncyBuZWVkZWQgdG8gY3JlYXRlIGEgU0FTLiBGb3Igb3B0aW9uYWwgc2V0dGluZ3MgcGxlYXNlXG4gKiBzZXQgY29ycmVzcG9uZGluZyBwcm9wZXJ0aWVzIGRpcmVjdGx5LCBzdWNoIGFzIHBlcm1pc3Npb25zLCBzdGFydHNPbi5cbiAqXG4gKiBXQVJOSU5HOiBpZGVudGlmaWVyIHdpbGwgYmUgaWdub3JlZCwgcGVybWlzc2lvbnMgYW5kIGV4cGlyZXNPbiBhcmUgcmVxdWlyZWQuXG4gKlxuICogQHBhcmFtIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMgLVxuICogQHBhcmFtIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbCAtXG4gKi9cbmZ1bmN0aW9uIGdlbmVyYXRlQmxvYlNBU1F1ZXJ5UGFyYW1ldGVyc1VESzIwMTgxMTA5KGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMsIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbCkge1xuICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMgPSBTQVNTaWduYXR1cmVWYWx1ZXNTYW5pdHlDaGVja0FuZEF1dG9maWxsKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMpO1xuICAgIC8vIFN0b3JlZCBhY2Nlc3MgcG9saWNpZXMgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIGEgdXNlciBkZWxlZ2F0aW9uIFNBUy5cbiAgICBpZiAoIWJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMgfHwgIWJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuZXhwaXJlc09uKSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiTXVzdCBwcm92aWRlICdwZXJtaXNzaW9ucycgYW5kICdleHBpcmVzT24nIGZvciBCbG9iIFNBUyBnZW5lcmF0aW9uIHdoZW4gZ2VuZXJhdGluZyB1c2VyIGRlbGVnYXRpb24gU0FTLlwiKTtcbiAgICB9XG4gICAgbGV0IHJlc291cmNlID0gXCJjXCI7XG4gICAgbGV0IHRpbWVzdGFtcCA9IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuc25hcHNob3RUaW1lO1xuICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmJsb2JOYW1lKSB7XG4gICAgICAgIHJlc291cmNlID0gXCJiXCI7XG4gICAgICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnNuYXBzaG90VGltZSkge1xuICAgICAgICAgICAgcmVzb3VyY2UgPSBcImJzXCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uSWQpIHtcbiAgICAgICAgICAgIHJlc291cmNlID0gXCJidlwiO1xuICAgICAgICAgICAgdGltZXN0YW1wID0gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uSWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gQ2FsbGluZyBwYXJzZSBhbmQgdG9TdHJpbmcgZ3VhcmFudGVlcyB0aGUgcHJvcGVyIG9yZGVyaW5nIGFuZCB0aHJvd3Mgb24gaW52YWxpZCBjaGFyYWN0ZXJzLlxuICAgIGxldCB2ZXJpZmllZFBlcm1pc3Npb25zO1xuICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zKSB7XG4gICAgICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmJsb2JOYW1lKSB7XG4gICAgICAgICAgICB2ZXJpZmllZFBlcm1pc3Npb25zID0gQmxvYlNBU1Blcm1pc3Npb25zLnBhcnNlKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMudG9TdHJpbmcoKSkudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZlcmlmaWVkUGVybWlzc2lvbnMgPSBDb250YWluZXJTQVNQZXJtaXNzaW9ucy5wYXJzZShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zLnRvU3RyaW5nKCkpLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gU2lnbmF0dXJlIGlzIGdlbmVyYXRlZCBvbiB0aGUgdW4tdXJsLWVuY29kZWQgdmFsdWVzLlxuICAgIGNvbnN0IHN0cmluZ1RvU2lnbiA9IFtcbiAgICAgICAgdmVyaWZpZWRQZXJtaXNzaW9ucyA/IHZlcmlmaWVkUGVybWlzc2lvbnMgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnN0YXJ0c09uXG4gICAgICAgICAgICA/IHRydW5jYXRlZElTTzgwNjFEYXRlKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuc3RhcnRzT24sIGZhbHNlKVxuICAgICAgICAgICAgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmV4cGlyZXNPblxuICAgICAgICAgICAgPyB0cnVuY2F0ZWRJU084MDYxRGF0ZShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmV4cGlyZXNPbiwgZmFsc2UpXG4gICAgICAgICAgICA6IFwiXCIsXG4gICAgICAgIGdldENhbm9uaWNhbE5hbWUodXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsLmFjY291bnROYW1lLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRhaW5lck5hbWUsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuYmxvYk5hbWUpLFxuICAgICAgICB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwudXNlckRlbGVnYXRpb25LZXkuc2lnbmVkT2JqZWN0SWQsXG4gICAgICAgIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC51c2VyRGVsZWdhdGlvbktleS5zaWduZWRUZW5hbnRJZCxcbiAgICAgICAgdXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsLnVzZXJEZWxlZ2F0aW9uS2V5LnNpZ25lZFN0YXJ0c09uXG4gICAgICAgICAgICA/IHRydW5jYXRlZElTTzgwNjFEYXRlKHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC51c2VyRGVsZWdhdGlvbktleS5zaWduZWRTdGFydHNPbiwgZmFsc2UpXG4gICAgICAgICAgICA6IFwiXCIsXG4gICAgICAgIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC51c2VyRGVsZWdhdGlvbktleS5zaWduZWRFeHBpcmVzT25cbiAgICAgICAgICAgID8gdHJ1bmNhdGVkSVNPODA2MURhdGUodXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsLnVzZXJEZWxlZ2F0aW9uS2V5LnNpZ25lZEV4cGlyZXNPbiwgZmFsc2UpXG4gICAgICAgICAgICA6IFwiXCIsXG4gICAgICAgIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC51c2VyRGVsZWdhdGlvbktleS5zaWduZWRTZXJ2aWNlLFxuICAgICAgICB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwudXNlckRlbGVnYXRpb25LZXkuc2lnbmVkVmVyc2lvbixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5pcFJhbmdlID8gaXBSYW5nZVRvU3RyaW5nKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuaXBSYW5nZSkgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnByb3RvY29sID8gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wcm90b2NvbCA6IFwiXCIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMudmVyc2lvbixcbiAgICAgICAgcmVzb3VyY2UsXG4gICAgICAgIHRpbWVzdGFtcCxcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jYWNoZUNvbnRyb2wsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudERpc3Bvc2l0aW9uLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRFbmNvZGluZyxcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50TGFuZ3VhZ2UsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudFR5cGUsXG4gICAgXS5qb2luKFwiXFxuXCIpO1xuICAgIGNvbnN0IHNpZ25hdHVyZSA9IHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC5jb21wdXRlSE1BQ1NIQTI1NihzdHJpbmdUb1NpZ24pO1xuICAgIHJldHVybiB7XG4gICAgICAgIHNhc1F1ZXJ5UGFyYW1ldGVyczogbmV3IFNBU1F1ZXJ5UGFyYW1ldGVycyhibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnZlcnNpb24sIHNpZ25hdHVyZSwgdmVyaWZpZWRQZXJtaXNzaW9ucywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucHJvdG9jb2wsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuc3RhcnRzT24sIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuZXhwaXJlc09uLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmlwUmFuZ2UsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuaWRlbnRpZmllciwgcmVzb3VyY2UsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY2FjaGVDb250cm9sLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnREaXNwb3NpdGlvbiwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50RW5jb2RpbmcsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudExhbmd1YWdlLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRUeXBlLCB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwudXNlckRlbGVnYXRpb25LZXkpLFxuICAgICAgICBzdHJpbmdUb1NpZ246IHN0cmluZ1RvU2lnbixcbiAgICB9O1xufVxuLyoqXG4gKiBPTkxZIEFWQUlMQUJMRSBJTiBOT0RFLkpTIFJVTlRJTUUuXG4gKiBJTVBMRU1FTlRBVElPTiBGT1IgQVBJIFZFUlNJT04gRlJPTSAyMDIwLTAyLTEwLlxuICpcbiAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgU0FTUXVlcnlQYXJhbWV0ZXJzLlxuICpcbiAqIE9ubHkgYWNjZXB0cyByZXF1aXJlZCBzZXR0aW5ncyBuZWVkZWQgdG8gY3JlYXRlIGEgU0FTLiBGb3Igb3B0aW9uYWwgc2V0dGluZ3MgcGxlYXNlXG4gKiBzZXQgY29ycmVzcG9uZGluZyBwcm9wZXJ0aWVzIGRpcmVjdGx5LCBzdWNoIGFzIHBlcm1pc3Npb25zLCBzdGFydHNPbi5cbiAqXG4gKiBXQVJOSU5HOiBpZGVudGlmaWVyIHdpbGwgYmUgaWdub3JlZCwgcGVybWlzc2lvbnMgYW5kIGV4cGlyZXNPbiBhcmUgcmVxdWlyZWQuXG4gKlxuICogQHBhcmFtIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMgLVxuICogQHBhcmFtIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbCAtXG4gKi9cbmZ1bmN0aW9uIGdlbmVyYXRlQmxvYlNBU1F1ZXJ5UGFyYW1ldGVyc1VESzIwMjAwMjEwKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMsIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbCkge1xuICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMgPSBTQVNTaWduYXR1cmVWYWx1ZXNTYW5pdHlDaGVja0FuZEF1dG9maWxsKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMpO1xuICAgIC8vIFN0b3JlZCBhY2Nlc3MgcG9saWNpZXMgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIGEgdXNlciBkZWxlZ2F0aW9uIFNBUy5cbiAgICBpZiAoIWJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMgfHwgIWJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuZXhwaXJlc09uKSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiTXVzdCBwcm92aWRlICdwZXJtaXNzaW9ucycgYW5kICdleHBpcmVzT24nIGZvciBCbG9iIFNBUyBnZW5lcmF0aW9uIHdoZW4gZ2VuZXJhdGluZyB1c2VyIGRlbGVnYXRpb24gU0FTLlwiKTtcbiAgICB9XG4gICAgbGV0IHJlc291cmNlID0gXCJjXCI7XG4gICAgbGV0IHRpbWVzdGFtcCA9IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuc25hcHNob3RUaW1lO1xuICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmJsb2JOYW1lKSB7XG4gICAgICAgIHJlc291cmNlID0gXCJiXCI7XG4gICAgICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnNuYXBzaG90VGltZSkge1xuICAgICAgICAgICAgcmVzb3VyY2UgPSBcImJzXCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uSWQpIHtcbiAgICAgICAgICAgIHJlc291cmNlID0gXCJidlwiO1xuICAgICAgICAgICAgdGltZXN0YW1wID0gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uSWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gQ2FsbGluZyBwYXJzZSBhbmQgdG9TdHJpbmcgZ3VhcmFudGVlcyB0aGUgcHJvcGVyIG9yZGVyaW5nIGFuZCB0aHJvd3Mgb24gaW52YWxpZCBjaGFyYWN0ZXJzLlxuICAgIGxldCB2ZXJpZmllZFBlcm1pc3Npb25zO1xuICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zKSB7XG4gICAgICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmJsb2JOYW1lKSB7XG4gICAgICAgICAgICB2ZXJpZmllZFBlcm1pc3Npb25zID0gQmxvYlNBU1Blcm1pc3Npb25zLnBhcnNlKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMudG9TdHJpbmcoKSkudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZlcmlmaWVkUGVybWlzc2lvbnMgPSBDb250YWluZXJTQVNQZXJtaXNzaW9ucy5wYXJzZShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zLnRvU3RyaW5nKCkpLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gU2lnbmF0dXJlIGlzIGdlbmVyYXRlZCBvbiB0aGUgdW4tdXJsLWVuY29kZWQgdmFsdWVzLlxuICAgIGNvbnN0IHN0cmluZ1RvU2lnbiA9IFtcbiAgICAgICAgdmVyaWZpZWRQZXJtaXNzaW9ucyA/IHZlcmlmaWVkUGVybWlzc2lvbnMgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnN0YXJ0c09uXG4gICAgICAgICAgICA/IHRydW5jYXRlZElTTzgwNjFEYXRlKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuc3RhcnRzT24sIGZhbHNlKVxuICAgICAgICAgICAgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmV4cGlyZXNPblxuICAgICAgICAgICAgPyB0cnVuY2F0ZWRJU084MDYxRGF0ZShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmV4cGlyZXNPbiwgZmFsc2UpXG4gICAgICAgICAgICA6IFwiXCIsXG4gICAgICAgIGdldENhbm9uaWNhbE5hbWUodXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsLmFjY291bnROYW1lLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRhaW5lck5hbWUsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuYmxvYk5hbWUpLFxuICAgICAgICB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwudXNlckRlbGVnYXRpb25LZXkuc2lnbmVkT2JqZWN0SWQsXG4gICAgICAgIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC51c2VyRGVsZWdhdGlvbktleS5zaWduZWRUZW5hbnRJZCxcbiAgICAgICAgdXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsLnVzZXJEZWxlZ2F0aW9uS2V5LnNpZ25lZFN0YXJ0c09uXG4gICAgICAgICAgICA/IHRydW5jYXRlZElTTzgwNjFEYXRlKHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC51c2VyRGVsZWdhdGlvbktleS5zaWduZWRTdGFydHNPbiwgZmFsc2UpXG4gICAgICAgICAgICA6IFwiXCIsXG4gICAgICAgIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC51c2VyRGVsZWdhdGlvbktleS5zaWduZWRFeHBpcmVzT25cbiAgICAgICAgICAgID8gdHJ1bmNhdGVkSVNPODA2MURhdGUodXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsLnVzZXJEZWxlZ2F0aW9uS2V5LnNpZ25lZEV4cGlyZXNPbiwgZmFsc2UpXG4gICAgICAgICAgICA6IFwiXCIsXG4gICAgICAgIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC51c2VyRGVsZWdhdGlvbktleS5zaWduZWRTZXJ2aWNlLFxuICAgICAgICB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwudXNlckRlbGVnYXRpb25LZXkuc2lnbmVkVmVyc2lvbixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wcmVhdXRob3JpemVkQWdlbnRPYmplY3RJZCxcbiAgICAgICAgdW5kZWZpbmVkLCAvLyBhZ2VudE9iamVjdElkXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29ycmVsYXRpb25JZCxcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5pcFJhbmdlID8gaXBSYW5nZVRvU3RyaW5nKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuaXBSYW5nZSkgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnByb3RvY29sID8gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wcm90b2NvbCA6IFwiXCIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMudmVyc2lvbixcbiAgICAgICAgcmVzb3VyY2UsXG4gICAgICAgIHRpbWVzdGFtcCxcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jYWNoZUNvbnRyb2wsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudERpc3Bvc2l0aW9uLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRFbmNvZGluZyxcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50TGFuZ3VhZ2UsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudFR5cGUsXG4gICAgXS5qb2luKFwiXFxuXCIpO1xuICAgIGNvbnN0IHNpZ25hdHVyZSA9IHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC5jb21wdXRlSE1BQ1NIQTI1NihzdHJpbmdUb1NpZ24pO1xuICAgIHJldHVybiB7XG4gICAgICAgIHNhc1F1ZXJ5UGFyYW1ldGVyczogbmV3IFNBU1F1ZXJ5UGFyYW1ldGVycyhibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnZlcnNpb24sIHNpZ25hdHVyZSwgdmVyaWZpZWRQZXJtaXNzaW9ucywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucHJvdG9jb2wsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuc3RhcnRzT24sIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuZXhwaXJlc09uLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmlwUmFuZ2UsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuaWRlbnRpZmllciwgcmVzb3VyY2UsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY2FjaGVDb250cm9sLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnREaXNwb3NpdGlvbiwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50RW5jb2RpbmcsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudExhbmd1YWdlLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRUeXBlLCB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwudXNlckRlbGVnYXRpb25LZXksIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucHJlYXV0aG9yaXplZEFnZW50T2JqZWN0SWQsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29ycmVsYXRpb25JZCksXG4gICAgICAgIHN0cmluZ1RvU2lnbjogc3RyaW5nVG9TaWduLFxuICAgIH07XG59XG4vKipcbiAqIE9OTFkgQVZBSUxBQkxFIElOIE5PREUuSlMgUlVOVElNRS5cbiAqIElNUExFTUVOVEFUSU9OIEZPUiBBUEkgVkVSU0lPTiBGUk9NIDIwMjAtMTItMDYuXG4gKlxuICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBTQVNRdWVyeVBhcmFtZXRlcnMuXG4gKlxuICogT25seSBhY2NlcHRzIHJlcXVpcmVkIHNldHRpbmdzIG5lZWRlZCB0byBjcmVhdGUgYSBTQVMuIEZvciBvcHRpb25hbCBzZXR0aW5ncyBwbGVhc2VcbiAqIHNldCBjb3JyZXNwb25kaW5nIHByb3BlcnRpZXMgZGlyZWN0bHksIHN1Y2ggYXMgcGVybWlzc2lvbnMsIHN0YXJ0c09uLlxuICpcbiAqIFdBUk5JTkc6IGlkZW50aWZpZXIgd2lsbCBiZSBpZ25vcmVkLCBwZXJtaXNzaW9ucyBhbmQgZXhwaXJlc09uIGFyZSByZXF1aXJlZC5cbiAqXG4gKiBAcGFyYW0gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcyAtXG4gKiBAcGFyYW0gdXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsIC1cbiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGVCbG9iU0FTUXVlcnlQYXJhbWV0ZXJzVURLMjAyMDEyMDYoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcywgdXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsKSB7XG4gICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcyA9IFNBU1NpZ25hdHVyZVZhbHVlc1Nhbml0eUNoZWNrQW5kQXV0b2ZpbGwoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcyk7XG4gICAgLy8gU3RvcmVkIGFjY2VzcyBwb2xpY2llcyBhcmUgbm90IHN1cHBvcnRlZCBmb3IgYSB1c2VyIGRlbGVnYXRpb24gU0FTLlxuICAgIGlmICghYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucyB8fCAhYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5leHBpcmVzT24pIHtcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJNdXN0IHByb3ZpZGUgJ3Blcm1pc3Npb25zJyBhbmQgJ2V4cGlyZXNPbicgZm9yIEJsb2IgU0FTIGdlbmVyYXRpb24gd2hlbiBnZW5lcmF0aW5nIHVzZXIgZGVsZWdhdGlvbiBTQVMuXCIpO1xuICAgIH1cbiAgICBsZXQgcmVzb3VyY2UgPSBcImNcIjtcbiAgICBsZXQgdGltZXN0YW1wID0gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5zbmFwc2hvdFRpbWU7XG4gICAgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuYmxvYk5hbWUpIHtcbiAgICAgICAgcmVzb3VyY2UgPSBcImJcIjtcbiAgICAgICAgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuc25hcHNob3RUaW1lKSB7XG4gICAgICAgICAgICByZXNvdXJjZSA9IFwiYnNcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnZlcnNpb25JZCkge1xuICAgICAgICAgICAgcmVzb3VyY2UgPSBcImJ2XCI7XG4gICAgICAgICAgICB0aW1lc3RhbXAgPSBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnZlcnNpb25JZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBDYWxsaW5nIHBhcnNlIGFuZCB0b1N0cmluZyBndWFyYW50ZWVzIHRoZSBwcm9wZXIgb3JkZXJpbmcgYW5kIHRocm93cyBvbiBpbnZhbGlkIGNoYXJhY3RlcnMuXG4gICAgbGV0IHZlcmlmaWVkUGVybWlzc2lvbnM7XG4gICAgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMpIHtcbiAgICAgICAgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuYmxvYk5hbWUpIHtcbiAgICAgICAgICAgIHZlcmlmaWVkUGVybWlzc2lvbnMgPSBCbG9iU0FTUGVybWlzc2lvbnMucGFyc2UoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucy50b1N0cmluZygpKS50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmVyaWZpZWRQZXJtaXNzaW9ucyA9IENvbnRhaW5lclNBU1Blcm1pc3Npb25zLnBhcnNlKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMudG9TdHJpbmcoKSkudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBTaWduYXR1cmUgaXMgZ2VuZXJhdGVkIG9uIHRoZSB1bi11cmwtZW5jb2RlZCB2YWx1ZXMuXG4gICAgY29uc3Qgc3RyaW5nVG9TaWduID0gW1xuICAgICAgICB2ZXJpZmllZFBlcm1pc3Npb25zID8gdmVyaWZpZWRQZXJtaXNzaW9ucyA6IFwiXCIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuc3RhcnRzT25cbiAgICAgICAgICAgID8gdHJ1bmNhdGVkSVNPODA2MURhdGUoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5zdGFydHNPbiwgZmFsc2UpXG4gICAgICAgICAgICA6IFwiXCIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuZXhwaXJlc09uXG4gICAgICAgICAgICA/IHRydW5jYXRlZElTTzgwNjFEYXRlKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuZXhwaXJlc09uLCBmYWxzZSlcbiAgICAgICAgICAgIDogXCJcIixcbiAgICAgICAgZ2V0Q2Fub25pY2FsTmFtZSh1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwuYWNjb3VudE5hbWUsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGFpbmVyTmFtZSwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5ibG9iTmFtZSksXG4gICAgICAgIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC51c2VyRGVsZWdhdGlvbktleS5zaWduZWRPYmplY3RJZCxcbiAgICAgICAgdXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsLnVzZXJEZWxlZ2F0aW9uS2V5LnNpZ25lZFRlbmFudElkLFxuICAgICAgICB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwudXNlckRlbGVnYXRpb25LZXkuc2lnbmVkU3RhcnRzT25cbiAgICAgICAgICAgID8gdHJ1bmNhdGVkSVNPODA2MURhdGUodXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsLnVzZXJEZWxlZ2F0aW9uS2V5LnNpZ25lZFN0YXJ0c09uLCBmYWxzZSlcbiAgICAgICAgICAgIDogXCJcIixcbiAgICAgICAgdXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsLnVzZXJEZWxlZ2F0aW9uS2V5LnNpZ25lZEV4cGlyZXNPblxuICAgICAgICAgICAgPyB0cnVuY2F0ZWRJU084MDYxRGF0ZSh1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwudXNlckRlbGVnYXRpb25LZXkuc2lnbmVkRXhwaXJlc09uLCBmYWxzZSlcbiAgICAgICAgICAgIDogXCJcIixcbiAgICAgICAgdXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsLnVzZXJEZWxlZ2F0aW9uS2V5LnNpZ25lZFNlcnZpY2UsXG4gICAgICAgIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC51c2VyRGVsZWdhdGlvbktleS5zaWduZWRWZXJzaW9uLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnByZWF1dGhvcml6ZWRBZ2VudE9iamVjdElkLFxuICAgICAgICB1bmRlZmluZWQsIC8vIGFnZW50T2JqZWN0SWRcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb3JyZWxhdGlvbklkLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmlwUmFuZ2UgPyBpcFJhbmdlVG9TdHJpbmcoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5pcFJhbmdlKSA6IFwiXCIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucHJvdG9jb2wgPyBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnByb3RvY29sIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uLFxuICAgICAgICByZXNvdXJjZSxcbiAgICAgICAgdGltZXN0YW1wLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jYWNoZUNvbnRyb2wsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudERpc3Bvc2l0aW9uLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRFbmNvZGluZyxcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50TGFuZ3VhZ2UsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudFR5cGUsXG4gICAgXS5qb2luKFwiXFxuXCIpO1xuICAgIGNvbnN0IHNpZ25hdHVyZSA9IHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC5jb21wdXRlSE1BQ1NIQTI1NihzdHJpbmdUb1NpZ24pO1xuICAgIHJldHVybiB7XG4gICAgICAgIHNhc1F1ZXJ5UGFyYW1ldGVyczogbmV3IFNBU1F1ZXJ5UGFyYW1ldGVycyhibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnZlcnNpb24sIHNpZ25hdHVyZSwgdmVyaWZpZWRQZXJtaXNzaW9ucywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucHJvdG9jb2wsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuc3RhcnRzT24sIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuZXhwaXJlc09uLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmlwUmFuZ2UsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuaWRlbnRpZmllciwgcmVzb3VyY2UsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY2FjaGVDb250cm9sLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnREaXNwb3NpdGlvbiwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50RW5jb2RpbmcsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudExhbmd1YWdlLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRUeXBlLCB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwudXNlckRlbGVnYXRpb25LZXksIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucHJlYXV0aG9yaXplZEFnZW50T2JqZWN0SWQsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29ycmVsYXRpb25JZCwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5lbmNyeXB0aW9uU2NvcGUpLFxuICAgICAgICBzdHJpbmdUb1NpZ246IHN0cmluZ1RvU2lnbixcbiAgICB9O1xufVxuZnVuY3Rpb24gZ2V0Q2Fub25pY2FsTmFtZShhY2NvdW50TmFtZSwgY29udGFpbmVyTmFtZSwgYmxvYk5hbWUpIHtcbiAgICAvLyBDb250YWluZXI6IFwiL2Jsb2IvYWNjb3VudC9jb250YWluZXJOYW1lXCJcbiAgICAvLyBCbG9iOiAgICAgIFwiL2Jsb2IvYWNjb3VudC9jb250YWluZXJOYW1lL2Jsb2JOYW1lXCJcbiAgICBjb25zdCBlbGVtZW50cyA9IFtgL2Jsb2IvJHthY2NvdW50TmFtZX0vJHtjb250YWluZXJOYW1lfWBdO1xuICAgIGlmIChibG9iTmFtZSkge1xuICAgICAgICBlbGVtZW50cy5wdXNoKGAvJHtibG9iTmFtZX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIGVsZW1lbnRzLmpvaW4oXCJcIik7XG59XG5mdW5jdGlvbiBTQVNTaWduYXR1cmVWYWx1ZXNTYW5pdHlDaGVja0FuZEF1dG9maWxsKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMpIHtcbiAgICBjb25zdCB2ZXJzaW9uID0gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uID8gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uIDogU0VSVklDRV9WRVJTSU9OO1xuICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnNuYXBzaG90VGltZSAmJiB2ZXJzaW9uIDwgXCIyMDE4LTExLTA5XCIpIHtcbiAgICAgICAgdGhyb3cgUmFuZ2VFcnJvcihcIid2ZXJzaW9uJyBtdXN0IGJlID49ICcyMDE4LTExLTA5JyB3aGVuIHByb3ZpZGluZyAnc25hcHNob3RUaW1lJy5cIik7XG4gICAgfVxuICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmJsb2JOYW1lID09PSB1bmRlZmluZWQgJiYgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5zbmFwc2hvdFRpbWUpIHtcbiAgICAgICAgdGhyb3cgUmFuZ2VFcnJvcihcIk11c3QgcHJvdmlkZSAnYmxvYk5hbWUnIHdoZW4gcHJvdmlkaW5nICdzbmFwc2hvdFRpbWUnLlwiKTtcbiAgICB9XG4gICAgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMudmVyc2lvbklkICYmIHZlcnNpb24gPCBcIjIwMTktMTAtMTBcIikge1xuICAgICAgICB0aHJvdyBSYW5nZUVycm9yKFwiJ3ZlcnNpb24nIG11c3QgYmUgPj0gJzIwMTktMTAtMTAnIHdoZW4gcHJvdmlkaW5nICd2ZXJzaW9uSWQnLlwiKTtcbiAgICB9XG4gICAgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuYmxvYk5hbWUgPT09IHVuZGVmaW5lZCAmJiBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnZlcnNpb25JZCkge1xuICAgICAgICB0aHJvdyBSYW5nZUVycm9yKFwiTXVzdCBwcm92aWRlICdibG9iTmFtZScgd2hlbiBwcm92aWRpbmcgJ3ZlcnNpb25JZCcuXCIpO1xuICAgIH1cbiAgICBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucyAmJlxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zLnNldEltbXV0YWJpbGl0eVBvbGljeSAmJlxuICAgICAgICB2ZXJzaW9uIDwgXCIyMDIwLTA4LTA0XCIpIHtcbiAgICAgICAgdGhyb3cgUmFuZ2VFcnJvcihcIid2ZXJzaW9uJyBtdXN0IGJlID49ICcyMDIwLTA4LTA0JyB3aGVuIHByb3ZpZGVkICdpJyBwZXJtaXNzaW9uLlwiKTtcbiAgICB9XG4gICAgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMgJiZcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucy5kZWxldGVWZXJzaW9uICYmXG4gICAgICAgIHZlcnNpb24gPCBcIjIwMTktMTAtMTBcIikge1xuICAgICAgICB0aHJvdyBSYW5nZUVycm9yKFwiJ3ZlcnNpb24nIG11c3QgYmUgPj0gJzIwMTktMTAtMTAnIHdoZW4gcHJvdmlkaW5nICd4JyBwZXJtaXNzaW9uLlwiKTtcbiAgICB9XG4gICAgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMgJiZcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucy5wZXJtYW5lbnREZWxldGUgJiZcbiAgICAgICAgdmVyc2lvbiA8IFwiMjAxOS0xMC0xMFwiKSB7XG4gICAgICAgIHRocm93IFJhbmdlRXJyb3IoXCIndmVyc2lvbicgbXVzdCBiZSA+PSAnMjAxOS0xMC0xMCcgd2hlbiBwcm92aWRpbmcgJ3knIHBlcm1pc3Npb24uXCIpO1xuICAgIH1cbiAgICBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucyAmJlxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zLnRhZyAmJlxuICAgICAgICB2ZXJzaW9uIDwgXCIyMDE5LTEyLTEyXCIpIHtcbiAgICAgICAgdGhyb3cgUmFuZ2VFcnJvcihcIid2ZXJzaW9uJyBtdXN0IGJlID49ICcyMDE5LTEyLTEyJyB3aGVuIHByb3ZpZGluZyAndCcgcGVybWlzc2lvbi5cIik7XG4gICAgfVxuICAgIGlmICh2ZXJzaW9uIDwgXCIyMDIwLTAyLTEwXCIgJiZcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucyAmJlxuICAgICAgICAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucy5tb3ZlIHx8IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMuZXhlY3V0ZSkpIHtcbiAgICAgICAgdGhyb3cgUmFuZ2VFcnJvcihcIid2ZXJzaW9uJyBtdXN0IGJlID49ICcyMDIwLTAyLTEwJyB3aGVuIHByb3ZpZGluZyB0aGUgJ20nIG9yICdlJyBwZXJtaXNzaW9uLlwiKTtcbiAgICB9XG4gICAgaWYgKHZlcnNpb24gPCBcIjIwMjEtMDQtMTBcIiAmJlxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zICYmXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMuZmlsdGVyQnlUYWdzKSB7XG4gICAgICAgIHRocm93IFJhbmdlRXJyb3IoXCIndmVyc2lvbicgbXVzdCBiZSA+PSAnMjAyMS0wNC0xMCcgd2hlbiBwcm92aWRpbmcgdGhlICdmJyBwZXJtaXNzaW9uLlwiKTtcbiAgICB9XG4gICAgaWYgKHZlcnNpb24gPCBcIjIwMjAtMDItMTBcIiAmJlxuICAgICAgICAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wcmVhdXRob3JpemVkQWdlbnRPYmplY3RJZCB8fCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvcnJlbGF0aW9uSWQpKSB7XG4gICAgICAgIHRocm93IFJhbmdlRXJyb3IoXCIndmVyc2lvbicgbXVzdCBiZSA+PSAnMjAyMC0wMi0xMCcgd2hlbiBwcm92aWRpbmcgJ3ByZWF1dGhvcml6ZWRBZ2VudE9iamVjdElkJyBvciAnY29ycmVsYXRpb25JZCcuXCIpO1xuICAgIH1cbiAgICBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5lbmNyeXB0aW9uU2NvcGUgJiYgdmVyc2lvbiA8IFwiMjAyMC0xMi0wNlwiKSB7XG4gICAgICAgIHRocm93IFJhbmdlRXJyb3IoXCIndmVyc2lvbicgbXVzdCBiZSA+PSAnMjAyMC0xMi0wNicgd2hlbiBwcm92aWRlZCAnZW5jcnlwdGlvblNjb3BlJyBpbiBTQVMuXCIpO1xuICAgIH1cbiAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnZlcnNpb24gPSB2ZXJzaW9uO1xuICAgIHJldHVybiBibG9iU0FTU2lnbmF0dXJlVmFsdWVzO1xufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogQSBjbGllbnQgdGhhdCBtYW5hZ2VzIGxlYXNlcyBmb3IgYSB7QGxpbmsgQ29udGFpbmVyQ2xpZW50fSBvciBhIHtAbGluayBCbG9iQ2xpZW50fS5cbiAqL1xuY2xhc3MgQmxvYkxlYXNlQ2xpZW50IHtcbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBsZWFzZSBJZC5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBsZWFzZUlkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGVhc2VJZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgdXJsLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IHVybCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VybDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBCbG9iTGVhc2VDbGllbnQuXG4gICAgICogQHBhcmFtIGNsaWVudCAtIFRoZSBjbGllbnQgdG8gbWFrZSB0aGUgbGVhc2Ugb3BlcmF0aW9uIHJlcXVlc3RzLlxuICAgICAqIEBwYXJhbSBsZWFzZUlkIC0gSW5pdGlhbCBwcm9wb3NlZCBsZWFzZSBpZC5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihjbGllbnQsIGxlYXNlSWQpIHtcbiAgICAgICAgY29uc3QgY2xpZW50Q29udGV4dCA9IGNsaWVudC5zdG9yYWdlQ2xpZW50Q29udGV4dDtcbiAgICAgICAgdGhpcy5fdXJsID0gY2xpZW50LnVybDtcbiAgICAgICAgaWYgKGNsaWVudC5uYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2lzQ29udGFpbmVyID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lck9yQmxvYk9wZXJhdGlvbiA9IGNsaWVudENvbnRleHQuY29udGFpbmVyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5faXNDb250YWluZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lck9yQmxvYk9wZXJhdGlvbiA9IGNsaWVudENvbnRleHQuYmxvYjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWxlYXNlSWQpIHtcbiAgICAgICAgICAgIGxlYXNlSWQgPSBjb3JlVXRpbC5yYW5kb21VVUlEKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbGVhc2VJZCA9IGxlYXNlSWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEVzdGFibGlzaGVzIGFuZCBtYW5hZ2VzIGEgbG9jayBvbiBhIGNvbnRhaW5lciBmb3IgZGVsZXRlIG9wZXJhdGlvbnMsIG9yIG9uIGEgYmxvYlxuICAgICAqIGZvciB3cml0ZSBhbmQgZGVsZXRlIG9wZXJhdGlvbnMuXG4gICAgICogVGhlIGxvY2sgZHVyYXRpb24gY2FuIGJlIDE1IHRvIDYwIHNlY29uZHMsIG9yIGNhbiBiZSBpbmZpbml0ZS5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9sZWFzZS1jb250YWluZXJcbiAgICAgKiBhbmRcbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9sZWFzZS1ibG9iXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZHVyYXRpb24gLSBNdXN0IGJlIGJldHdlZW4gMTUgdG8gNjAgc2Vjb25kcywgb3IgaW5maW5pdGUgKC0xKVxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gb3B0aW9uIHRvIGNvbmZpZ3VyZSBsZWFzZSBtYW5hZ2VtZW50IG9wZXJhdGlvbnMuXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgYWNxdWlyZSBsZWFzZSBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgYWNxdWlyZUxlYXNlKGR1cmF0aW9uLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZTtcbiAgICAgICAgaWYgKHRoaXMuX2lzQ29udGFpbmVyICYmXG4gICAgICAgICAgICAoKCgoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5pZk1hdGNoKSAmJiAoKF9iID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaWZNYXRjaCkgIT09IEVUYWdOb25lKSB8fFxuICAgICAgICAgICAgICAgICgoKF9jID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuaWZOb25lTWF0Y2gpICYmICgoX2QgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZC5pZk5vbmVNYXRjaCkgIT09IEVUYWdOb25lKSB8fFxuICAgICAgICAgICAgICAgICgoX2UgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZS50YWdDb25kaXRpb25zKSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVGhlIElmTWF0Y2gsIElmTm9uZU1hdGNoIGFuZCB0YWdzIGFjY2VzcyBjb25kaXRpb25zIGFyZSBpZ25vcmVkIGJ5IHRoZSBzZXJ2aWNlLiBWYWx1ZXMgb3RoZXIgdGhhbiB1bmRlZmluZWQgb3IgdGhlaXIgZGVmYXVsdCB2YWx1ZXMgYXJlIG5vdCBhY2NlcHRhYmxlLlwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JMZWFzZUNsaWVudC1hY3F1aXJlTGVhc2VcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5fY29udGFpbmVyT3JCbG9iT3BlcmF0aW9uLmFjcXVpcmVMZWFzZSh7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgZHVyYXRpb24sXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIHByb3Bvc2VkTGVhc2VJZDogdGhpcy5fbGVhc2VJZCxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUbyBjaGFuZ2UgdGhlIElEIG9mIHRoZSBsZWFzZS5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9sZWFzZS1jb250YWluZXJcbiAgICAgKiBhbmRcbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9sZWFzZS1ibG9iXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcG9zZWRMZWFzZUlkIC0gdGhlIHByb3Bvc2VkIG5ldyBsZWFzZSBJZC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIG9wdGlvbiB0byBjb25maWd1cmUgbGVhc2UgbWFuYWdlbWVudCBvcGVyYXRpb25zLlxuICAgICAqIEByZXR1cm5zIFJlc3BvbnNlIGRhdGEgZm9yIGNoYW5nZSBsZWFzZSBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgY2hhbmdlTGVhc2UocHJvcG9zZWRMZWFzZUlkLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZTtcbiAgICAgICAgaWYgKHRoaXMuX2lzQ29udGFpbmVyICYmXG4gICAgICAgICAgICAoKCgoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5pZk1hdGNoKSAmJiAoKF9iID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaWZNYXRjaCkgIT09IEVUYWdOb25lKSB8fFxuICAgICAgICAgICAgICAgICgoKF9jID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuaWZOb25lTWF0Y2gpICYmICgoX2QgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZC5pZk5vbmVNYXRjaCkgIT09IEVUYWdOb25lKSB8fFxuICAgICAgICAgICAgICAgICgoX2UgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZS50YWdDb25kaXRpb25zKSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVGhlIElmTWF0Y2gsIElmTm9uZU1hdGNoIGFuZCB0YWdzIGFjY2VzcyBjb25kaXRpb25zIGFyZSBpZ25vcmVkIGJ5IHRoZSBzZXJ2aWNlLiBWYWx1ZXMgb3RoZXIgdGhhbiB1bmRlZmluZWQgb3IgdGhlaXIgZGVmYXVsdCB2YWx1ZXMgYXJlIG5vdCBhY2NlcHRhYmxlLlwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JMZWFzZUNsaWVudC1jaGFuZ2VMZWFzZVwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5fY29udGFpbmVyT3JCbG9iT3BlcmF0aW9uLmNoYW5nZUxlYXNlKHRoaXMuX2xlYXNlSWQsIHByb3Bvc2VkTGVhc2VJZCwge1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB0aGlzLl9sZWFzZUlkID0gcHJvcG9zZWRMZWFzZUlkO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVG8gZnJlZSB0aGUgbGVhc2UgaWYgaXQgaXMgbm8gbG9uZ2VyIG5lZWRlZCBzbyB0aGF0IGFub3RoZXIgY2xpZW50IG1heVxuICAgICAqIGltbWVkaWF0ZWx5IGFjcXVpcmUgYSBsZWFzZSBhZ2FpbnN0IHRoZSBjb250YWluZXIgb3IgdGhlIGJsb2IuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvbGVhc2UtY29udGFpbmVyXG4gICAgICogYW5kXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvbGVhc2UtYmxvYlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBvcHRpb24gdG8gY29uZmlndXJlIGxlYXNlIG1hbmFnZW1lbnQgb3BlcmF0aW9ucy5cbiAgICAgKiBAcmV0dXJucyBSZXNwb25zZSBkYXRhIGZvciByZWxlYXNlIGxlYXNlIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyByZWxlYXNlTGVhc2Uob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2U7XG4gICAgICAgIGlmICh0aGlzLl9pc0NvbnRhaW5lciAmJlxuICAgICAgICAgICAgKCgoKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuaWZNYXRjaCkgJiYgKChfYiA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmlmTWF0Y2gpICE9PSBFVGFnTm9uZSkgfHxcbiAgICAgICAgICAgICAgICAoKChfYyA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmlmTm9uZU1hdGNoKSAmJiAoKF9kID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuaWZOb25lTWF0Y2gpICE9PSBFVGFnTm9uZSkgfHxcbiAgICAgICAgICAgICAgICAoKF9lID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2UudGFnQ29uZGl0aW9ucykpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlRoZSBJZk1hdGNoLCBJZk5vbmVNYXRjaCBhbmQgdGFncyBhY2Nlc3MgY29uZGl0aW9ucyBhcmUgaWdub3JlZCBieSB0aGUgc2VydmljZS4gVmFsdWVzIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIHRoZWlyIGRlZmF1bHQgdmFsdWVzIGFyZSBub3QgYWNjZXB0YWJsZS5cIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iTGVhc2VDbGllbnQtcmVsZWFzZUxlYXNlXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuX2NvbnRhaW5lck9yQmxvYk9wZXJhdGlvbi5yZWxlYXNlTGVhc2UodGhpcy5fbGVhc2VJZCwge1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUbyByZW5ldyB0aGUgbGVhc2UuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvbGVhc2UtY29udGFpbmVyXG4gICAgICogYW5kXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvbGVhc2UtYmxvYlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBvcHRpb24gdG8gY29uZmlndXJlIGxlYXNlIG1hbmFnZW1lbnQgb3BlcmF0aW9ucy5cbiAgICAgKiBAcmV0dXJucyBSZXNwb25zZSBkYXRhIGZvciByZW5ldyBsZWFzZSBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgcmVuZXdMZWFzZShvcHRpb25zID0ge30pIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZTtcbiAgICAgICAgaWYgKHRoaXMuX2lzQ29udGFpbmVyICYmXG4gICAgICAgICAgICAoKCgoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5pZk1hdGNoKSAmJiAoKF9iID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaWZNYXRjaCkgIT09IEVUYWdOb25lKSB8fFxuICAgICAgICAgICAgICAgICgoKF9jID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuaWZOb25lTWF0Y2gpICYmICgoX2QgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZC5pZk5vbmVNYXRjaCkgIT09IEVUYWdOb25lKSB8fFxuICAgICAgICAgICAgICAgICgoX2UgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZS50YWdDb25kaXRpb25zKSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVGhlIElmTWF0Y2gsIElmTm9uZU1hdGNoIGFuZCB0YWdzIGFjY2VzcyBjb25kaXRpb25zIGFyZSBpZ25vcmVkIGJ5IHRoZSBzZXJ2aWNlLiBWYWx1ZXMgb3RoZXIgdGhhbiB1bmRlZmluZWQgb3IgdGhlaXIgZGVmYXVsdCB2YWx1ZXMgYXJlIG5vdCBhY2NlcHRhYmxlLlwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JMZWFzZUNsaWVudC1yZW5ld0xlYXNlXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRhaW5lck9yQmxvYk9wZXJhdGlvbi5yZW5ld0xlYXNlKHRoaXMuX2xlYXNlSWQsIHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUbyBlbmQgdGhlIGxlYXNlIGJ1dCBlbnN1cmUgdGhhdCBhbm90aGVyIGNsaWVudCBjYW5ub3QgYWNxdWlyZSBhIG5ldyBsZWFzZVxuICAgICAqIHVudGlsIHRoZSBjdXJyZW50IGxlYXNlIHBlcmlvZCBoYXMgZXhwaXJlZC5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9sZWFzZS1jb250YWluZXJcbiAgICAgKiBhbmRcbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9sZWFzZS1ibG9iXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYnJlYWtQZXJpb2QgLSBCcmVhayBwZXJpb2RcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIG9wdGlvbnMgdG8gY29uZmlndXJlIGxlYXNlIG1hbmFnZW1lbnQgb3BlcmF0aW9ucy5cbiAgICAgKiBAcmV0dXJucyBSZXNwb25zZSBkYXRhIGZvciBicmVhayBsZWFzZSBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgYnJlYWtMZWFzZShicmVha1BlcmlvZCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2U7XG4gICAgICAgIGlmICh0aGlzLl9pc0NvbnRhaW5lciAmJlxuICAgICAgICAgICAgKCgoKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuaWZNYXRjaCkgJiYgKChfYiA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmlmTWF0Y2gpICE9PSBFVGFnTm9uZSkgfHxcbiAgICAgICAgICAgICAgICAoKChfYyA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmlmTm9uZU1hdGNoKSAmJiAoKF9kID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuaWZOb25lTWF0Y2gpICE9PSBFVGFnTm9uZSkgfHxcbiAgICAgICAgICAgICAgICAoKF9lID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2UudGFnQ29uZGl0aW9ucykpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlRoZSBJZk1hdGNoLCBJZk5vbmVNYXRjaCBhbmQgdGFncyBhY2Nlc3MgY29uZGl0aW9ucyBhcmUgaWdub3JlZCBieSB0aGUgc2VydmljZS4gVmFsdWVzIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIHRoZWlyIGRlZmF1bHQgdmFsdWVzIGFyZSBub3QgYWNjZXB0YWJsZS5cIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iTGVhc2VDbGllbnQtYnJlYWtMZWFzZVwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGNvbnN0IG9wZXJhdGlvbk9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgYnJlYWtQZXJpb2QsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5fY29udGFpbmVyT3JCbG9iT3BlcmF0aW9uLmJyZWFrTGVhc2Uob3BlcmF0aW9uT3B0aW9ucykpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBPTkxZIEFWQUlMQUJMRSBJTiBOT0RFLkpTIFJVTlRJTUUuXG4gKlxuICogQSBOb2RlLmpzIFJlYWRhYmxlU3RyZWFtIHdpbGwgaW50ZXJuYWxseSByZXRyeSB3aGVuIGludGVybmFsIFJlYWRhYmxlU3RyZWFtIHVuZXhwZWN0ZWQgZW5kcy5cbiAqL1xuY2xhc3MgUmV0cmlhYmxlUmVhZGFibGVTdHJlYW0gZXh0ZW5kcyBzdHJlYW0uUmVhZGFibGUge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgUmV0cmlhYmxlUmVhZGFibGVTdHJlYW0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc291cmNlIC0gVGhlIGN1cnJlbnQgUmVhZGFibGVTdHJlYW0gcmV0dXJuZWQgZnJvbSBnZXR0ZXJcbiAgICAgKiBAcGFyYW0gZ2V0dGVyIC0gQSBtZXRob2QgY2FsbGluZyBkb3dubG9hZGluZyByZXF1ZXN0IHJldHVybmluZ1xuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIG5ldyBSZWFkYWJsZVN0cmVhbSBmcm9tIHNwZWNpZmllZCBvZmZzZXRcbiAgICAgKiBAcGFyYW0gb2Zmc2V0IC0gT2Zmc2V0IHBvc2l0aW9uIGluIG9yaWdpbmFsIGRhdGEgc291cmNlIHRvIHJlYWRcbiAgICAgKiBAcGFyYW0gY291bnQgLSBIb3cgbXVjaCBkYXRhIGluIG9yaWdpbmFsIGRhdGEgc291cmNlIHRvIHJlYWRcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtXG4gICAgICovXG4gICAgY29uc3RydWN0b3Ioc291cmNlLCBnZXR0ZXIsIG9mZnNldCwgY291bnQsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBzdXBlcih7IGhpZ2hXYXRlck1hcms6IG9wdGlvbnMuaGlnaFdhdGVyTWFyayB9KTtcbiAgICAgICAgdGhpcy5yZXRyaWVzID0gMDtcbiAgICAgICAgdGhpcy5zb3VyY2VEYXRhSGFuZGxlciA9IChkYXRhKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmRvSW5qZWN0RXJyb3JPbmNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmRvSW5qZWN0RXJyb3JPbmNlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHRoaXMuc291cmNlLnBhdXNlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zb3VyY2VFcnJvck9yRW5kSGFuZGxlcigpO1xuICAgICAgICAgICAgICAgIHRoaXMuc291cmNlLmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIC8vICAgYE9mZnNldDogJHt0aGlzLm9mZnNldH0sIFJlY2VpdmVkICR7ZGF0YS5sZW5ndGh9IGZyb20gaW50ZXJuYWwgc3RyZWFtYFxuICAgICAgICAgICAgLy8gKTtcbiAgICAgICAgICAgIHRoaXMub2Zmc2V0ICs9IGRhdGEubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKHRoaXMub25Qcm9ncmVzcykge1xuICAgICAgICAgICAgICAgIHRoaXMub25Qcm9ncmVzcyh7IGxvYWRlZEJ5dGVzOiB0aGlzLm9mZnNldCAtIHRoaXMuc3RhcnQgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMucHVzaChkYXRhKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc291cmNlLnBhdXNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuc291cmNlQWJvcnRlZEhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhYm9ydEVycm9yID0gbmV3IGFib3J0Q29udHJvbGxlci5BYm9ydEVycm9yKFwiVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC5cIik7XG4gICAgICAgICAgICB0aGlzLmRlc3Ryb3koYWJvcnRFcnJvcik7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuc291cmNlRXJyb3JPckVuZEhhbmRsZXIgPSAoZXJyKSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyICYmIGVyci5uYW1lID09PSBcIkFib3J0RXJyb3JcIikge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveShlcnIpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgLy8gICBgU291cmNlIHN0cmVhbSBlbWl0cyBlbmQgb3IgZXJyb3IsIG9mZnNldDogJHtcbiAgICAgICAgICAgIC8vICAgICB0aGlzLm9mZnNldFxuICAgICAgICAgICAgLy8gICB9LCBkZXN0IGVuZCA6ICR7dGhpcy5lbmR9YFxuICAgICAgICAgICAgLy8gKTtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlU291cmNlRXZlbnRIYW5kbGVycygpO1xuICAgICAgICAgICAgaWYgKHRoaXMub2Zmc2V0IC0gMSA9PT0gdGhpcy5lbmQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnB1c2gobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLm9mZnNldCA8PSB0aGlzLmVuZCkge1xuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgIC8vICAgYHJldHJpZXM6ICR7dGhpcy5yZXRyaWVzfSwgbWF4IHJldHJpZXM6ICR7dGhpcy5tYXhSZXRyaWVzfWBcbiAgICAgICAgICAgICAgICAvLyApO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJldHJpZXMgPCB0aGlzLm1heFJldHJ5UmVxdWVzdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXRyaWVzICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0dGVyKHRoaXMub2Zmc2V0KVxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oKG5ld1NvdXJjZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zb3VyY2UgPSBuZXdTb3VyY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFNvdXJjZUV2ZW50SGFuZGxlcnMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveShlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95KG5ldyBFcnJvcihgRGF0YSBjb3JydXB0aW9uIGZhaWx1cmU6IHJlY2VpdmVkIGxlc3MgZGF0YSB0aGFuIHJlcXVpcmVkIGFuZCByZWFjaGVkIG1heFJldGlyZXMgbGltaXRhdGlvbi4gUmVjZWl2ZWQgZGF0YSBvZmZzZXQ6ICR7dGhpcy5vZmZzZXQgLSAxfSwgZGF0YSBuZWVkZWQgb2Zmc2V0OiAke3RoaXMuZW5kfSwgcmV0cmllczogJHt0aGlzLnJldHJpZXN9LCBtYXggcmV0cmllczogJHt0aGlzLm1heFJldHJ5UmVxdWVzdHN9YCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveShuZXcgRXJyb3IoYERhdGEgY29ycnVwdGlvbiBmYWlsdXJlOiBSZWNlaXZlZCBtb3JlIGRhdGEgdGhhbiBvcmlnaW5hbCByZXF1ZXN0LCBkYXRhIG5lZWRlZCBvZmZzZXQgaXMgJHt0aGlzLmVuZH0sIHJlY2VpdmVkIG9mZnNldDogJHt0aGlzLm9mZnNldCAtIDF9YCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmdldHRlciA9IGdldHRlcjtcbiAgICAgICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICAgIHRoaXMuc3RhcnQgPSBvZmZzZXQ7XG4gICAgICAgIHRoaXMub2Zmc2V0ID0gb2Zmc2V0O1xuICAgICAgICB0aGlzLmVuZCA9IG9mZnNldCArIGNvdW50IC0gMTtcbiAgICAgICAgdGhpcy5tYXhSZXRyeVJlcXVlc3RzID1cbiAgICAgICAgICAgIG9wdGlvbnMubWF4UmV0cnlSZXF1ZXN0cyAmJiBvcHRpb25zLm1heFJldHJ5UmVxdWVzdHMgPj0gMCA/IG9wdGlvbnMubWF4UmV0cnlSZXF1ZXN0cyA6IDA7XG4gICAgICAgIHRoaXMub25Qcm9ncmVzcyA9IG9wdGlvbnMub25Qcm9ncmVzcztcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgdGhpcy5zZXRTb3VyY2VFdmVudEhhbmRsZXJzKCk7XG4gICAgfVxuICAgIF9yZWFkKCkge1xuICAgICAgICB0aGlzLnNvdXJjZS5yZXN1bWUoKTtcbiAgICB9XG4gICAgc2V0U291cmNlRXZlbnRIYW5kbGVycygpIHtcbiAgICAgICAgdGhpcy5zb3VyY2Uub24oXCJkYXRhXCIsIHRoaXMuc291cmNlRGF0YUhhbmRsZXIpO1xuICAgICAgICB0aGlzLnNvdXJjZS5vbihcImVuZFwiLCB0aGlzLnNvdXJjZUVycm9yT3JFbmRIYW5kbGVyKTtcbiAgICAgICAgdGhpcy5zb3VyY2Uub24oXCJlcnJvclwiLCB0aGlzLnNvdXJjZUVycm9yT3JFbmRIYW5kbGVyKTtcbiAgICAgICAgLy8gbmVlZGVkIGZvciBOb2RlMTRcbiAgICAgICAgdGhpcy5zb3VyY2Uub24oXCJhYm9ydGVkXCIsIHRoaXMuc291cmNlQWJvcnRlZEhhbmRsZXIpO1xuICAgIH1cbiAgICByZW1vdmVTb3VyY2VFdmVudEhhbmRsZXJzKCkge1xuICAgICAgICB0aGlzLnNvdXJjZS5yZW1vdmVMaXN0ZW5lcihcImRhdGFcIiwgdGhpcy5zb3VyY2VEYXRhSGFuZGxlcik7XG4gICAgICAgIHRoaXMuc291cmNlLnJlbW92ZUxpc3RlbmVyKFwiZW5kXCIsIHRoaXMuc291cmNlRXJyb3JPckVuZEhhbmRsZXIpO1xuICAgICAgICB0aGlzLnNvdXJjZS5yZW1vdmVMaXN0ZW5lcihcImVycm9yXCIsIHRoaXMuc291cmNlRXJyb3JPckVuZEhhbmRsZXIpO1xuICAgICAgICB0aGlzLnNvdXJjZS5yZW1vdmVMaXN0ZW5lcihcImFib3J0ZWRcIiwgdGhpcy5zb3VyY2VBYm9ydGVkSGFuZGxlcik7XG4gICAgfVxuICAgIF9kZXN0cm95KGVycm9yLCBjYWxsYmFjaykge1xuICAgICAgICAvLyByZW1vdmUgbGlzdGVuZXIgZnJvbSBzb3VyY2UgYW5kIHJlbGVhc2Ugc291cmNlXG4gICAgICAgIHRoaXMucmVtb3ZlU291cmNlRXZlbnRIYW5kbGVycygpO1xuICAgICAgICB0aGlzLnNvdXJjZS5kZXN0cm95KCk7XG4gICAgICAgIGNhbGxiYWNrKGVycm9yID09PSBudWxsID8gdW5kZWZpbmVkIDogZXJyb3IpO1xuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIE9OTFkgQVZBSUxBQkxFIElOIE5PREUuSlMgUlVOVElNRS5cbiAqXG4gKiBCbG9iRG93bmxvYWRSZXNwb25zZSBpbXBsZW1lbnRzIEJsb2JEb3dubG9hZFJlc3BvbnNlUGFyc2VkIGludGVyZmFjZSwgYW5kIGluIE5vZGUuanMgcnVudGltZSBpdCB3aWxsXG4gKiBhdXRvbWF0aWNhbGx5IHJldHJ5IHdoZW4gaW50ZXJuYWwgcmVhZCBzdHJlYW0gdW5leHBlY3RlZCBlbmRzLiAoVGhpcyBraW5kIG9mIHVuZXhwZWN0ZWQgZW5kcyBjYW5ub3RcbiAqIHRyaWdnZXIgcmV0cmllcyBkZWZpbmVkIGluIHBpcGVsaW5lIHJldHJ5IHBvbGljeS4pXG4gKlxuICogVGhlIHtAbGluayByZWFkYWJsZVN0cmVhbUJvZHl9IHN0cmVhbSB3aWxsIHJldHJ5IHVuZGVybGF5ZXIsIHlvdSBjYW4ganVzdCB1c2UgaXQgYXMgYSBub3JtYWwgTm9kZS5qc1xuICogUmVhZGFibGUgc3RyZWFtLlxuICovXG5jbGFzcyBCbG9iRG93bmxvYWRSZXNwb25zZSB7XG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHRoYXQgdGhlIHNlcnZpY2Ugc3VwcG9ydHNcbiAgICAgKiByZXF1ZXN0cyBmb3IgcGFydGlhbCBmaWxlIGNvbnRlbnQuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgYWNjZXB0UmFuZ2VzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmFjY2VwdFJhbmdlcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBpZiBpdCB3YXMgcHJldmlvdXNseSBzcGVjaWZpZWRcbiAgICAgKiBmb3IgdGhlIGZpbGUuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY2FjaGVDb250cm9sKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNhY2hlQ29udHJvbDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgdmFsdWUgdGhhdCB3YXMgc3BlY2lmaWVkXG4gICAgICogZm9yIHRoZSAneC1tcy1jb250ZW50LWRpc3Bvc2l0aW9uJyBoZWFkZXIgYW5kIHNwZWNpZmllcyBob3cgdG8gcHJvY2VzcyB0aGVcbiAgICAgKiByZXNwb25zZS5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBjb250ZW50RGlzcG9zaXRpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuY29udGVudERpc3Bvc2l0aW9uO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSB0aGF0IHdhcyBzcGVjaWZpZWRcbiAgICAgKiBmb3IgdGhlIENvbnRlbnQtRW5jb2RpbmcgcmVxdWVzdCBoZWFkZXIuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY29udGVudEVuY29kaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNvbnRlbnRFbmNvZGluZztcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgdmFsdWUgdGhhdCB3YXMgc3BlY2lmaWVkXG4gICAgICogZm9yIHRoZSBDb250ZW50LUxhbmd1YWdlIHJlcXVlc3QgaGVhZGVyLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNvbnRlbnRMYW5ndWFnZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5jb250ZW50TGFuZ3VhZ2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IHNlcXVlbmNlIG51bWJlciBmb3IgYVxuICAgICAqIHBhZ2UgYmxvYi4gVGhpcyBoZWFkZXIgaXMgbm90IHJldHVybmVkIGZvciBibG9jayBibG9icyBvciBhcHBlbmQgYmxvYnMuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgYmxvYlNlcXVlbmNlTnVtYmVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmJsb2JTZXF1ZW5jZU51bWJlcjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGJsb2IncyB0eXBlLiBQb3NzaWJsZSB2YWx1ZXMgaW5jbHVkZTpcbiAgICAgKiAnQmxvY2tCbG9iJywgJ1BhZ2VCbG9iJywgJ0FwcGVuZEJsb2InLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGJsb2JUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmJsb2JUeXBlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIHByZXNlbnQgaW4gdGhlXG4gICAgICogcmVzcG9uc2UgYm9keS5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBjb250ZW50TGVuZ3RoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNvbnRlbnRMZW5ndGg7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElmIHRoZSBmaWxlIGhhcyBhbiBNRDUgaGFzaCBhbmQgdGhlXG4gICAgICogcmVxdWVzdCBpcyB0byByZWFkIHRoZSBmdWxsIGZpbGUsIHRoaXMgcmVzcG9uc2UgaGVhZGVyIGlzIHJldHVybmVkIHNvIHRoYXRcbiAgICAgKiB0aGUgY2xpZW50IGNhbiBjaGVjayBmb3IgbWVzc2FnZSBjb250ZW50IGludGVncml0eS4gSWYgdGhlIHJlcXVlc3QgaXMgdG9cbiAgICAgKiByZWFkIGEgc3BlY2lmaWVkIHJhbmdlIGFuZCB0aGUgJ3gtbXMtcmFuZ2UtZ2V0LWNvbnRlbnQtbWQ1JyBpcyBzZXQgdG9cbiAgICAgKiB0cnVlLCB0aGVuIHRoZSByZXF1ZXN0IHJldHVybnMgYW4gTUQ1IGhhc2ggZm9yIHRoZSByYW5nZSwgYXMgbG9uZyBhcyB0aGVcbiAgICAgKiByYW5nZSBzaXplIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byA0IE1CLiBJZiBuZWl0aGVyIG9mIHRoZXNlIHNldHMgb2ZcbiAgICAgKiBjb25kaXRpb25zIGlzIHRydWUsIHRoZW4gbm8gdmFsdWUgaXMgcmV0dXJuZWQgZm9yIHRoZSAnQ29udGVudC1NRDUnXG4gICAgICogaGVhZGVyLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNvbnRlbnRNRDUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuY29udGVudE1ENTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHRoZSByYW5nZSBvZiBieXRlcyByZXR1cm5lZCBpZlxuICAgICAqIHRoZSBjbGllbnQgcmVxdWVzdGVkIGEgc3Vic2V0IG9mIHRoZSBmaWxlIGJ5IHNldHRpbmcgdGhlIFJhbmdlIHJlcXVlc3RcbiAgICAgKiBoZWFkZXIuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY29udGVudFJhbmdlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNvbnRlbnRSYW5nZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGNvbnRlbnQgdHlwZSBzcGVjaWZpZWQgZm9yIHRoZSBmaWxlLlxuICAgICAqIFRoZSBkZWZhdWx0IGNvbnRlbnQgdHlwZSBpcyAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJ1xuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNvbnRlbnRUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNvbnRlbnRUeXBlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb25jbHVzaW9uIHRpbWUgb2YgdGhlIGxhc3QgYXR0ZW1wdGVkXG4gICAgICogQ29weSBGaWxlIG9wZXJhdGlvbiB3aGVyZSB0aGlzIGZpbGUgd2FzIHRoZSBkZXN0aW5hdGlvbiBmaWxlLiBUaGlzIHZhbHVlXG4gICAgICogY2FuIHNwZWNpZnkgdGhlIHRpbWUgb2YgYSBjb21wbGV0ZWQsIGFib3J0ZWQsIG9yIGZhaWxlZCBjb3B5IGF0dGVtcHQuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY29weUNvbXBsZXRlZE9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNvcHlDb21wbGV0ZWRPbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3RyaW5nIGlkZW50aWZpZXIgZm9yIHRoZSBsYXN0IGF0dGVtcHRlZCBDb3B5XG4gICAgICogRmlsZSBvcGVyYXRpb24gd2hlcmUgdGhpcyBmaWxlIHdhcyB0aGUgZGVzdGluYXRpb24gZmlsZS5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBjb3B5SWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuY29weUlkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb250YWlucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCBhbmRcbiAgICAgKiB0aGUgdG90YWwgYnl0ZXMgaW4gdGhlIHNvdXJjZSBpbiB0aGUgbGFzdCBhdHRlbXB0ZWQgQ29weSBGaWxlIG9wZXJhdGlvblxuICAgICAqIHdoZXJlIHRoaXMgZmlsZSB3YXMgdGhlIGRlc3RpbmF0aW9uIGZpbGUuIENhbiBzaG93IGJldHdlZW4gMCBhbmRcbiAgICAgKiBDb250ZW50LUxlbmd0aCBieXRlcyBjb3BpZWQuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY29weVByb2dyZXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNvcHlQcm9ncmVzcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogVVJMIHVwIHRvIDJLQiBpbiBsZW5ndGggdGhhdCBzcGVjaWZpZXMgdGhlXG4gICAgICogc291cmNlIGZpbGUgdXNlZCBpbiB0aGUgbGFzdCBhdHRlbXB0ZWQgQ29weSBGaWxlIG9wZXJhdGlvbiB3aGVyZSB0aGlzIGZpbGVcbiAgICAgKiB3YXMgdGhlIGRlc3RpbmF0aW9uIGZpbGUuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY29weVNvdXJjZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5jb3B5U291cmNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTdGF0ZSBvZiB0aGUgY29weSBvcGVyYXRpb25cbiAgICAgKiBpZGVudGlmaWVkIGJ5ICd4LW1zLWNvcHktaWQnLiBQb3NzaWJsZSB2YWx1ZXMgaW5jbHVkZTogJ3BlbmRpbmcnLFxuICAgICAqICdzdWNjZXNzJywgJ2Fib3J0ZWQnLCAnZmFpbGVkJ1xuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNvcHlTdGF0dXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuY29weVN0YXR1cztcbiAgICB9XG4gICAgLyoqXG4gICAgICogT25seSBhcHBlYXJzIHdoZW5cbiAgICAgKiB4LW1zLWNvcHktc3RhdHVzIGlzIGZhaWxlZCBvciBwZW5kaW5nLiBEZXNjcmliZXMgY2F1c2Ugb2YgZmF0YWwgb3JcbiAgICAgKiBub24tZmF0YWwgY29weSBvcGVyYXRpb24gZmFpbHVyZS5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBjb3B5U3RhdHVzRGVzY3JpcHRpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuY29weVN0YXR1c0Rlc2NyaXB0aW9uO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXaGVuIGEgYmxvYiBpcyBsZWFzZWQsXG4gICAgICogc3BlY2lmaWVzIHdoZXRoZXIgdGhlIGxlYXNlIGlzIG9mIGluZmluaXRlIG9yIGZpeGVkIGR1cmF0aW9uLiBQb3NzaWJsZVxuICAgICAqIHZhbHVlcyBpbmNsdWRlOiAnaW5maW5pdGUnLCAnZml4ZWQnLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGxlYXNlRHVyYXRpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UubGVhc2VEdXJhdGlvbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTGVhc2Ugc3RhdGUgb2YgdGhlIGJsb2IuIFBvc3NpYmxlXG4gICAgICogdmFsdWVzIGluY2x1ZGU6ICdhdmFpbGFibGUnLCAnbGVhc2VkJywgJ2V4cGlyZWQnLCAnYnJlYWtpbmcnLCAnYnJva2VuJy5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBsZWFzZVN0YXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmxlYXNlU3RhdGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IGxlYXNlIHN0YXR1cyBvZiB0aGVcbiAgICAgKiBibG9iLiBQb3NzaWJsZSB2YWx1ZXMgaW5jbHVkZTogJ2xvY2tlZCcsICd1bmxvY2tlZCcuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgbGVhc2VTdGF0dXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UubGVhc2VTdGF0dXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEEgVVRDIGRhdGUvdGltZSB2YWx1ZSBnZW5lcmF0ZWQgYnkgdGhlIHNlcnZpY2UgdGhhdFxuICAgICAqIGluZGljYXRlcyB0aGUgdGltZSBhdCB3aGljaCB0aGUgcmVzcG9uc2Ugd2FzIGluaXRpYXRlZC5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBkYXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmRhdGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2YgY29tbWl0dGVkIGJsb2Nrc1xuICAgICAqIHByZXNlbnQgaW4gdGhlIGJsb2IuIFRoaXMgaGVhZGVyIGlzIHJldHVybmVkIG9ubHkgZm9yIGFwcGVuZCBibG9icy5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBibG9iQ29tbWl0dGVkQmxvY2tDb3VudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5ibG9iQ29tbWl0dGVkQmxvY2tDb3VudDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIEVUYWcgY29udGFpbnMgYSB2YWx1ZSB0aGF0IHlvdSBjYW4gdXNlIHRvXG4gICAgICogcGVyZm9ybSBvcGVyYXRpb25zIGNvbmRpdGlvbmFsbHksIGluIHF1b3Rlcy5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBldGFnKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmV0YWc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2YgdGFncyBhc3NvY2lhdGVkIHdpdGggdGhlIGJsb2JcbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCB0YWdDb3VudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS50YWdDb3VudDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGVycm9yIGNvZGUuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgZXJyb3JDb2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmVycm9yQ29kZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIHZhbHVlIG9mIHRoaXMgaGVhZGVyIGlzIHNldCB0b1xuICAgICAqIHRydWUgaWYgdGhlIGZpbGUgZGF0YSBhbmQgYXBwbGljYXRpb24gbWV0YWRhdGEgYXJlIGNvbXBsZXRlbHkgZW5jcnlwdGVkXG4gICAgICogdXNpbmcgdGhlIHNwZWNpZmllZCBhbGdvcml0aG0uIE90aGVyd2lzZSwgdGhlIHZhbHVlIGlzIHNldCB0byBmYWxzZSAod2hlblxuICAgICAqIHRoZSBmaWxlIGlzIHVuZW5jcnlwdGVkLCBvciBpZiBvbmx5IHBhcnRzIG9mIHRoZSBmaWxlL2FwcGxpY2F0aW9uIG1ldGFkYXRhXG4gICAgICogYXJlIGVuY3J5cHRlZCkuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgaXNTZXJ2ZXJFbmNyeXB0ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuaXNTZXJ2ZXJFbmNyeXB0ZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElmIHRoZSBibG9iIGhhcyBhIE1ENSBoYXNoLCBhbmQgaWZcbiAgICAgKiByZXF1ZXN0IGNvbnRhaW5zIHJhbmdlIGhlYWRlciAoUmFuZ2Ugb3IgeC1tcy1yYW5nZSksIHRoaXMgcmVzcG9uc2UgaGVhZGVyXG4gICAgICogaXMgcmV0dXJuZWQgd2l0aCB0aGUgdmFsdWUgb2YgdGhlIHdob2xlIGJsb2IncyBNRDUgdmFsdWUuIFRoaXMgdmFsdWUgbWF5XG4gICAgICogb3IgbWF5IG5vdCBiZSBlcXVhbCB0byB0aGUgdmFsdWUgcmV0dXJuZWQgaW4gQ29udGVudC1NRDUgaGVhZGVyLCB3aXRoIHRoZVxuICAgICAqIGxhdHRlciBjYWxjdWxhdGVkIGZyb20gdGhlIHJlcXVlc3RlZCByYW5nZS5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBibG9iQ29udGVudE1ENSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5ibG9iQ29udGVudE1ENTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZGF0ZSBhbmQgdGltZSB0aGUgZmlsZSB3YXMgbGFzdFxuICAgICAqIG1vZGlmaWVkLiBBbnkgb3BlcmF0aW9uIHRoYXQgbW9kaWZpZXMgdGhlIGZpbGUgb3IgaXRzIHByb3BlcnRpZXMgdXBkYXRlc1xuICAgICAqIHRoZSBsYXN0IG1vZGlmaWVkIHRpbWUuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgbGFzdE1vZGlmaWVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmxhc3RNb2RpZmllZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgVVRDIGRhdGUgYW5kIHRpbWUgZ2VuZXJhdGVkIGJ5IHRoZSBzZXJ2aWNlIHRoYXQgaW5kaWNhdGVzIHRoZSB0aW1lIGF0IHdoaWNoIHRoZSBibG9iIHdhc1xuICAgICAqIGxhc3QgcmVhZCBvciB3cml0dGVuIHRvLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGxhc3RBY2Nlc3NlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5sYXN0QWNjZXNzZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGRhdGUgYW5kIHRpbWUgdGhlIGJsb2Igd2FzIGNyZWF0ZWQuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY3JlYXRlZE9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNyZWF0ZWRPbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQSBuYW1lLXZhbHVlIHBhaXJcbiAgICAgKiB0byBhc3NvY2lhdGUgd2l0aCBhIGZpbGUgc3RvcmFnZSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgbWV0YWRhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UubWV0YWRhdGE7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoaXMgaGVhZGVyIHVuaXF1ZWx5IGlkZW50aWZpZXMgdGhlIHJlcXVlc3RcbiAgICAgKiB0aGF0IHdhcyBtYWRlIGFuZCBjYW4gYmUgdXNlZCBmb3IgdHJvdWJsZXNob290aW5nIHRoZSByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IHJlcXVlc3RJZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5yZXF1ZXN0SWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElmIGEgY2xpZW50IHJlcXVlc3QgaWQgaGVhZGVyIGlzIHNlbnQgaW4gdGhlIHJlcXVlc3QsIHRoaXMgaGVhZGVyIHdpbGwgYmUgcHJlc2VudCBpbiB0aGVcbiAgICAgKiByZXNwb25zZSB3aXRoIHRoZSBzYW1lIHZhbHVlLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNsaWVudFJlcXVlc3RJZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5jbGllbnRSZXF1ZXN0SWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB0aGUgdmVyc2lvbiBvZiB0aGUgQmxvYiBzZXJ2aWNlIHVzZWRcbiAgICAgKiB0byBleGVjdXRlIHRoZSByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IHZlcnNpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UudmVyc2lvbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHRoZSB2ZXJzaW9uSWQgb2YgdGhlIGRvd25sb2FkZWQgYmxvYiB2ZXJzaW9uLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IHZlcnNpb25JZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS52ZXJzaW9uSWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHZlcnNpb24gb2YgdGhpcyBibG9iIGlzIGEgY3VycmVudCB2ZXJzaW9uLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGlzQ3VycmVudFZlcnNpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuaXNDdXJyZW50VmVyc2lvbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIFNIQS0yNTYgaGFzaCBvZiB0aGUgZW5jcnlwdGlvbiBrZXkgdXNlZCB0byBlbmNyeXB0IHRoZSBibG9iLiBUaGlzIHZhbHVlIGlzIG9ubHkgcmV0dXJuZWRcbiAgICAgKiB3aGVuIHRoZSBibG9iIHdhcyBlbmNyeXB0ZWQgd2l0aCBhIGN1c3RvbWVyLXByb3ZpZGVkIGtleS5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBlbmNyeXB0aW9uS2V5U2hhMjU2KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmVuY3J5cHRpb25LZXlTaGEyNTY7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElmIHRoZSByZXF1ZXN0IGlzIHRvIHJlYWQgYSBzcGVjaWZpZWQgcmFuZ2UgYW5kIHRoZSB4LW1zLXJhbmdlLWdldC1jb250ZW50LWNyYzY0IGlzIHNldCB0b1xuICAgICAqIHRydWUsIHRoZW4gdGhlIHJlcXVlc3QgcmV0dXJucyBhIGNyYzY0IGZvciB0aGUgcmFuZ2UsIGFzIGxvbmcgYXMgdGhlIHJhbmdlIHNpemUgaXMgbGVzcyB0aGFuXG4gICAgICogb3IgZXF1YWwgdG8gNCBNQi4gSWYgYm90aCB4LW1zLXJhbmdlLWdldC1jb250ZW50LWNyYzY0ICYgeC1tcy1yYW5nZS1nZXQtY29udGVudC1tZDUgaXNcbiAgICAgKiBzcGVjaWZpZWQgaW4gdGhlIHNhbWUgcmVxdWVzdCwgaXQgd2lsbCBmYWlsIHdpdGggNDAwKEJhZCBSZXF1ZXN0KVxuICAgICAqL1xuICAgIGdldCBjb250ZW50Q3JjNjQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuY29udGVudENyYzY0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBPYmplY3QgUmVwbGljYXRpb24gUG9saWN5IElkIG9mIHRoZSBkZXN0aW5hdGlvbiBibG9iLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IG9iamVjdFJlcGxpY2F0aW9uRGVzdGluYXRpb25Qb2xpY3lJZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5vYmplY3RSZXBsaWNhdGlvbkRlc3RpbmF0aW9uUG9saWN5SWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFBhcnNlZCBPYmplY3QgUmVwbGljYXRpb24gUG9saWN5IElkLCBSdWxlIElkKHMpIGFuZCBzdGF0dXMgb2YgdGhlIHNvdXJjZSBibG9iLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IG9iamVjdFJlcGxpY2F0aW9uU291cmNlUHJvcGVydGllcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5vYmplY3RSZXBsaWNhdGlvblNvdXJjZVByb3BlcnRpZXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElmIHRoaXMgYmxvYiBoYXMgYmVlbiBzZWFsZWQuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgaXNTZWFsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuaXNTZWFsZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFVUQyBkYXRlL3RpbWUgdmFsdWUgZ2VuZXJhdGVkIGJ5IHRoZSBzZXJ2aWNlIHRoYXQgaW5kaWNhdGVzIHRoZSB0aW1lIGF0IHdoaWNoIHRoZSBibG9iIGltbXV0YWJpbGl0eSBwb2xpY3kgd2lsbCBleHBpcmUuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgaW1tdXRhYmlsaXR5UG9saWN5RXhwaXJlc09uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmltbXV0YWJpbGl0eVBvbGljeUV4cGlyZXNPbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIGltbXV0YWJpbGl0eSBwb2xpY3kgbW9kZS5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBpbW11dGFiaWxpdHlQb2xpY3lNb2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmltbXV0YWJpbGl0eVBvbGljeU1vZGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyBpZiBhIGxlZ2FsIGhvbGQgaXMgcHJlc2VudCBvbiB0aGUgYmxvYi5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBsZWdhbEhvbGQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UubGVnYWxIb2xkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzcG9uc2UgYm9keSBhcyBhIGJyb3dzZXIgQmxvYi5cbiAgICAgKiBBbHdheXMgdW5kZWZpbmVkIGluIG5vZGUuanMuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY29udGVudEFzQmxvYigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5ibG9iQm9keTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIHJlc3BvbnNlIGJvZHkgYXMgYSBub2RlLmpzIFJlYWRhYmxlIHN0cmVhbS5cbiAgICAgKiBBbHdheXMgdW5kZWZpbmVkIGluIHRoZSBicm93c2VyLlxuICAgICAqXG4gICAgICogSXQgd2lsbCBhdXRvbWF0aWNhbGx5IHJldHJ5IHdoZW4gaW50ZXJuYWwgcmVhZCBzdHJlYW0gdW5leHBlY3RlZCBlbmRzLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IHJlYWRhYmxlU3RyZWFtQm9keSgpIHtcbiAgICAgICAgcmV0dXJuIGNvcmVVdGlsLmlzTm9kZSA/IHRoaXMuYmxvYkRvd25sb2FkU3RyZWFtIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgSFRUUCByZXNwb25zZS5cbiAgICAgKi9cbiAgICBnZXQgX3Jlc3BvbnNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLl9yZXNwb25zZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBCbG9iRG93bmxvYWRSZXNwb25zZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcmlnaW5hbFJlc3BvbnNlIC1cbiAgICAgKiBAcGFyYW0gZ2V0dGVyIC1cbiAgICAgKiBAcGFyYW0gb2Zmc2V0IC1cbiAgICAgKiBAcGFyYW0gY291bnQgLVxuICAgICAqIEBwYXJhbSBvcHRpb25zIC1cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihvcmlnaW5hbFJlc3BvbnNlLCBnZXR0ZXIsIG9mZnNldCwgY291bnQsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICB0aGlzLm9yaWdpbmFsUmVzcG9uc2UgPSBvcmlnaW5hbFJlc3BvbnNlO1xuICAgICAgICB0aGlzLmJsb2JEb3dubG9hZFN0cmVhbSA9IG5ldyBSZXRyaWFibGVSZWFkYWJsZVN0cmVhbSh0aGlzLm9yaWdpbmFsUmVzcG9uc2UucmVhZGFibGVTdHJlYW1Cb2R5LCBnZXR0ZXIsIG9mZnNldCwgY291bnQsIG9wdGlvbnMpO1xuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5jb25zdCBBVlJPX1NZTkNfTUFSS0VSX1NJWkUgPSAxNjtcbmNvbnN0IEFWUk9fSU5JVF9CWVRFUyA9IG5ldyBVaW50OEFycmF5KFs3OSwgOTgsIDEwNiwgMV0pO1xuY29uc3QgQVZST19DT0RFQ19LRVkgPSBcImF2cm8uY29kZWNcIjtcbmNvbnN0IEFWUk9fU0NIRU1BX0tFWSA9IFwiYXZyby5zY2hlbWFcIjtcblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5jbGFzcyBBdnJvUGFyc2VyIHtcbiAgICAvKipcbiAgICAgKiBSZWFkcyBhIGZpeGVkIG51bWJlciBvZiBieXRlcyBmcm9tIHRoZSBzdHJlYW0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc3RyZWFtIC1cbiAgICAgKiBAcGFyYW0gbGVuZ3RoIC1cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtXG4gICAgICovXG4gICAgc3RhdGljIGFzeW5jIHJlYWRGaXhlZEJ5dGVzKHN0cmVhbSwgbGVuZ3RoLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgYnl0ZXMgPSBhd2FpdCBzdHJlYW0ucmVhZChsZW5ndGgsIHsgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwgfSk7XG4gICAgICAgIGlmIChieXRlcy5sZW5ndGggIT09IGxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSGl0IHN0cmVhbSBlbmQuXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBieXRlcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVhZHMgYSBzaW5nbGUgYnl0ZSBmcm9tIHRoZSBzdHJlYW0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc3RyZWFtIC1cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtXG4gICAgICovXG4gICAgc3RhdGljIGFzeW5jIHJlYWRCeXRlKHN0cmVhbSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IGJ1ZiA9IGF3YWl0IEF2cm9QYXJzZXIucmVhZEZpeGVkQnl0ZXMoc3RyZWFtLCAxLCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIGJ1ZlswXTtcbiAgICB9XG4gICAgLy8gaW50IGFuZCBsb25nIGFyZSBzdG9yZWQgaW4gdmFyaWFibGUtbGVuZ3RoIHppZy16YWcgY29kaW5nLlxuICAgIC8vIHZhcmlhYmxlLWxlbmd0aDogaHR0cHM6Ly9sdWNlbmUuYXBhY2hlLm9yZy9jb3JlLzNfNV8wL2ZpbGVmb3JtYXRzLmh0bWwjVkludFxuICAgIC8vIHppZy16YWc6IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvZG9jcy9lbmNvZGluZz9jc3c9MSN0eXBlc1xuICAgIHN0YXRpYyBhc3luYyByZWFkWmlnWmFnTG9uZyhzdHJlYW0sIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBsZXQgemlnWmFnRW5jb2RlZCA9IDA7XG4gICAgICAgIGxldCBzaWduaWZpY2FuY2VJbkJpdCA9IDA7XG4gICAgICAgIGxldCBieXRlLCBoYXZlTW9yZUJ5dGUsIHNpZ25pZmljYW5jZUluRmxvYXQ7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGJ5dGUgPSBhd2FpdCBBdnJvUGFyc2VyLnJlYWRCeXRlKHN0cmVhbSwgb3B0aW9ucyk7XG4gICAgICAgICAgICBoYXZlTW9yZUJ5dGUgPSBieXRlICYgMHg4MDtcbiAgICAgICAgICAgIHppZ1phZ0VuY29kZWQgfD0gKGJ5dGUgJiAweDdmKSA8PCBzaWduaWZpY2FuY2VJbkJpdDtcbiAgICAgICAgICAgIHNpZ25pZmljYW5jZUluQml0ICs9IDc7XG4gICAgICAgIH0gd2hpbGUgKGhhdmVNb3JlQnl0ZSAmJiBzaWduaWZpY2FuY2VJbkJpdCA8IDI4KTsgLy8gYml0d2lzZSBvcGVyYXRpb24gb25seSB3b3JrcyBmb3IgMzItYml0IGludGVnZXJzXG4gICAgICAgIGlmIChoYXZlTW9yZUJ5dGUpIHtcbiAgICAgICAgICAgIC8vIFN3aXRjaCB0byBmbG9hdCBhcml0aG1ldGljXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1hc3NpZ25cbiAgICAgICAgICAgIHppZ1phZ0VuY29kZWQgPSB6aWdaYWdFbmNvZGVkO1xuICAgICAgICAgICAgc2lnbmlmaWNhbmNlSW5GbG9hdCA9IDI2ODQzNTQ1NjsgLy8gMiAqKiAyOC5cbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICBieXRlID0gYXdhaXQgQXZyb1BhcnNlci5yZWFkQnl0ZShzdHJlYW0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIHppZ1phZ0VuY29kZWQgKz0gKGJ5dGUgJiAweDdmKSAqIHNpZ25pZmljYW5jZUluRmxvYXQ7XG4gICAgICAgICAgICAgICAgc2lnbmlmaWNhbmNlSW5GbG9hdCAqPSAxMjg7IC8vIDIgKiogN1xuICAgICAgICAgICAgfSB3aGlsZSAoYnl0ZSAmIDB4ODApO1xuICAgICAgICAgICAgY29uc3QgcmVzID0gKHppZ1phZ0VuY29kZWQgJSAyID8gLSh6aWdaYWdFbmNvZGVkICsgMSkgOiB6aWdaYWdFbmNvZGVkKSAvIDI7XG4gICAgICAgICAgICBpZiAocmVzIDwgTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIgfHwgcmVzID4gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnRlZ2VyIG92ZXJmbG93LlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICh6aWdaYWdFbmNvZGVkID4+IDEpIF4gLSh6aWdaYWdFbmNvZGVkICYgMSk7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyByZWFkTG9uZyhzdHJlYW0sIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gQXZyb1BhcnNlci5yZWFkWmlnWmFnTG9uZyhzdHJlYW0sIG9wdGlvbnMpO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgcmVhZEludChzdHJlYW0sIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gQXZyb1BhcnNlci5yZWFkWmlnWmFnTG9uZyhzdHJlYW0sIG9wdGlvbnMpO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgcmVhZE51bGwoKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgcmVhZEJvb2xlYW4oc3RyZWFtLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgYiA9IGF3YWl0IEF2cm9QYXJzZXIucmVhZEJ5dGUoc3RyZWFtLCBvcHRpb25zKTtcbiAgICAgICAgaWYgKGIgPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGIgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJ5dGUgd2FzIG5vdCBhIGJvb2xlYW4uXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyByZWFkRmxvYXQoc3RyZWFtLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgdThhcnIgPSBhd2FpdCBBdnJvUGFyc2VyLnJlYWRGaXhlZEJ5dGVzKHN0cmVhbSwgNCwgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHZpZXcgPSBuZXcgRGF0YVZpZXcodThhcnIuYnVmZmVyLCB1OGFyci5ieXRlT2Zmc2V0LCB1OGFyci5ieXRlTGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIHZpZXcuZ2V0RmxvYXQzMigwLCB0cnVlKTsgLy8gbGl0dGxlRW5kaWFuID0gdHJ1ZVxuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgcmVhZERvdWJsZShzdHJlYW0sIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCB1OGFyciA9IGF3YWl0IEF2cm9QYXJzZXIucmVhZEZpeGVkQnl0ZXMoc3RyZWFtLCA4LCBvcHRpb25zKTtcbiAgICAgICAgY29uc3QgdmlldyA9IG5ldyBEYXRhVmlldyh1OGFyci5idWZmZXIsIHU4YXJyLmJ5dGVPZmZzZXQsIHU4YXJyLmJ5dGVMZW5ndGgpO1xuICAgICAgICByZXR1cm4gdmlldy5nZXRGbG9hdDY0KDAsIHRydWUpOyAvLyBsaXR0bGVFbmRpYW4gPSB0cnVlXG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyByZWFkQnl0ZXMoc3RyZWFtLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IGF3YWl0IEF2cm9QYXJzZXIucmVhZExvbmcoc3RyZWFtLCBvcHRpb25zKTtcbiAgICAgICAgaWYgKHNpemUgPCAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCeXRlcyBzaXplIHdhcyBuZWdhdGl2ZS5cIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0cmVhbS5yZWFkKHNpemUsIHsgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwgfSk7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyByZWFkU3RyaW5nKHN0cmVhbSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHU4YXJyID0gYXdhaXQgQXZyb1BhcnNlci5yZWFkQnl0ZXMoc3RyZWFtLCBvcHRpb25zKTtcbiAgICAgICAgY29uc3QgdXRmOGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKTtcbiAgICAgICAgcmV0dXJuIHV0ZjhkZWNvZGVyLmRlY29kZSh1OGFycik7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyByZWFkTWFwUGFpcihzdHJlYW0sIHJlYWRJdGVtTWV0aG9kLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3Qga2V5ID0gYXdhaXQgQXZyb1BhcnNlci5yZWFkU3RyaW5nKHN0cmVhbSwgb3B0aW9ucyk7XG4gICAgICAgIC8vIEZVVFVSRTogdGhpcyB3b24ndCB3b3JrIHdpdGggcmVhZEZpeGVkIChjdXJyZW50bHkgbm90IHN1cHBvcnRlZCkgd2hpY2ggbmVlZHMgYSBsZW5ndGggYXMgdGhlIHBhcmFtZXRlci5cbiAgICAgICAgY29uc3QgdmFsdWUgPSBhd2FpdCByZWFkSXRlbU1ldGhvZChzdHJlYW0sIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4geyBrZXksIHZhbHVlIH07XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyByZWFkTWFwKHN0cmVhbSwgcmVhZEl0ZW1NZXRob2QsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCByZWFkUGFpck1ldGhvZCA9IChzLCBvcHRzID0ge30pID0+IHtcbiAgICAgICAgICAgIHJldHVybiBBdnJvUGFyc2VyLnJlYWRNYXBQYWlyKHMsIHJlYWRJdGVtTWV0aG9kLCBvcHRzKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcGFpcnMgPSBhd2FpdCBBdnJvUGFyc2VyLnJlYWRBcnJheShzdHJlYW0sIHJlYWRQYWlyTWV0aG9kLCBvcHRpb25zKTtcbiAgICAgICAgY29uc3QgZGljdCA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IHBhaXIgb2YgcGFpcnMpIHtcbiAgICAgICAgICAgIGRpY3RbcGFpci5rZXldID0gcGFpci52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGljdDtcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIHJlYWRBcnJheShzdHJlYW0sIHJlYWRJdGVtTWV0aG9kLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgaXRlbXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgY291bnQgPSBhd2FpdCBBdnJvUGFyc2VyLnJlYWRMb25nKHN0cmVhbSwgb3B0aW9ucyk7IGNvdW50ICE9PSAwOyBjb3VudCA9IGF3YWl0IEF2cm9QYXJzZXIucmVhZExvbmcoc3RyZWFtLCBvcHRpb25zKSkge1xuICAgICAgICAgICAgaWYgKGNvdW50IDwgMCkge1xuICAgICAgICAgICAgICAgIC8vIElnbm9yZSBibG9jayBzaXplc1xuICAgICAgICAgICAgICAgIGF3YWl0IEF2cm9QYXJzZXIucmVhZExvbmcoc3RyZWFtLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICBjb3VudCA9IC1jb3VudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdoaWxlIChjb3VudC0tKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IGF3YWl0IHJlYWRJdGVtTWV0aG9kKHN0cmVhbSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgaXRlbXMucHVzaChpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgfVxufVxudmFyIEF2cm9Db21wbGV4O1xuKGZ1bmN0aW9uIChBdnJvQ29tcGxleCkge1xuICAgIEF2cm9Db21wbGV4W1wiUkVDT1JEXCJdID0gXCJyZWNvcmRcIjtcbiAgICBBdnJvQ29tcGxleFtcIkVOVU1cIl0gPSBcImVudW1cIjtcbiAgICBBdnJvQ29tcGxleFtcIkFSUkFZXCJdID0gXCJhcnJheVwiO1xuICAgIEF2cm9Db21wbGV4W1wiTUFQXCJdID0gXCJtYXBcIjtcbiAgICBBdnJvQ29tcGxleFtcIlVOSU9OXCJdID0gXCJ1bmlvblwiO1xuICAgIEF2cm9Db21wbGV4W1wiRklYRURcIl0gPSBcImZpeGVkXCI7XG59KShBdnJvQ29tcGxleCB8fCAoQXZyb0NvbXBsZXggPSB7fSkpO1xudmFyIEF2cm9QcmltaXRpdmU7XG4oZnVuY3Rpb24gKEF2cm9QcmltaXRpdmUpIHtcbiAgICBBdnJvUHJpbWl0aXZlW1wiTlVMTFwiXSA9IFwibnVsbFwiO1xuICAgIEF2cm9QcmltaXRpdmVbXCJCT09MRUFOXCJdID0gXCJib29sZWFuXCI7XG4gICAgQXZyb1ByaW1pdGl2ZVtcIklOVFwiXSA9IFwiaW50XCI7XG4gICAgQXZyb1ByaW1pdGl2ZVtcIkxPTkdcIl0gPSBcImxvbmdcIjtcbiAgICBBdnJvUHJpbWl0aXZlW1wiRkxPQVRcIl0gPSBcImZsb2F0XCI7XG4gICAgQXZyb1ByaW1pdGl2ZVtcIkRPVUJMRVwiXSA9IFwiZG91YmxlXCI7XG4gICAgQXZyb1ByaW1pdGl2ZVtcIkJZVEVTXCJdID0gXCJieXRlc1wiO1xuICAgIEF2cm9QcmltaXRpdmVbXCJTVFJJTkdcIl0gPSBcInN0cmluZ1wiO1xufSkoQXZyb1ByaW1pdGl2ZSB8fCAoQXZyb1ByaW1pdGl2ZSA9IHt9KSk7XG5jbGFzcyBBdnJvVHlwZSB7XG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lcyB0aGUgQXZyb1R5cGUgZnJvbSB0aGUgQXZybyBTY2hlbWEuXG4gICAgICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby13cmFwcGVyLW9iamVjdC10eXBlc1xuICAgIHN0YXRpYyBmcm9tU2NoZW1hKHNjaGVtYSkge1xuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIEF2cm9UeXBlLmZyb21TdHJpbmdTY2hlbWEoc2NoZW1hKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHNjaGVtYSkpIHtcbiAgICAgICAgICAgIHJldHVybiBBdnJvVHlwZS5mcm9tQXJyYXlTY2hlbWEoc2NoZW1hKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBBdnJvVHlwZS5mcm9tT2JqZWN0U2NoZW1hKHNjaGVtYSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGZyb21TdHJpbmdTY2hlbWEoc2NoZW1hKSB7XG4gICAgICAgIHN3aXRjaCAoc2NoZW1hKSB7XG4gICAgICAgICAgICBjYXNlIEF2cm9QcmltaXRpdmUuTlVMTDpcbiAgICAgICAgICAgIGNhc2UgQXZyb1ByaW1pdGl2ZS5CT09MRUFOOlxuICAgICAgICAgICAgY2FzZSBBdnJvUHJpbWl0aXZlLklOVDpcbiAgICAgICAgICAgIGNhc2UgQXZyb1ByaW1pdGl2ZS5MT05HOlxuICAgICAgICAgICAgY2FzZSBBdnJvUHJpbWl0aXZlLkZMT0FUOlxuICAgICAgICAgICAgY2FzZSBBdnJvUHJpbWl0aXZlLkRPVUJMRTpcbiAgICAgICAgICAgIGNhc2UgQXZyb1ByaW1pdGl2ZS5CWVRFUzpcbiAgICAgICAgICAgIGNhc2UgQXZyb1ByaW1pdGl2ZS5TVFJJTkc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBdnJvUHJpbWl0aXZlVHlwZShzY2hlbWEpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgQXZybyB0eXBlICR7c2NoZW1hfWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBmcm9tQXJyYXlTY2hlbWEoc2NoZW1hKSB7XG4gICAgICAgIHJldHVybiBuZXcgQXZyb1VuaW9uVHlwZShzY2hlbWEubWFwKEF2cm9UeXBlLmZyb21TY2hlbWEpKTtcbiAgICB9XG4gICAgc3RhdGljIGZyb21PYmplY3RTY2hlbWEoc2NoZW1hKSB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSBzY2hlbWEudHlwZTtcbiAgICAgICAgLy8gUHJpbWl0aXZlcyBjYW4gYmUgZGVmaW5lZCBhcyBzdHJpbmdzIG9yIG9iamVjdHNcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBBdnJvVHlwZS5mcm9tU3RyaW5nU2NoZW1hKHR5cGUpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChfYSkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSBBdnJvQ29tcGxleC5SRUNPUkQ6XG4gICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5hbGlhc2VzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgYWxpYXNlcyBjdXJyZW50bHkgaXMgbm90IHN1cHBvcnRlZCwgc2NoZW1hOiAke3NjaGVtYX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFzY2hlbWEubmFtZSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFJlcXVpcmVkIGF0dHJpYnV0ZSAnbmFtZScgZG9lc24ndCBleGlzdCBvbiBzY2hlbWE6ICR7c2NoZW1hfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY2FzZS1kZWNsYXJhdGlvbnNcbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZHMgPSB7fTtcbiAgICAgICAgICAgICAgICBpZiAoIXNjaGVtYS5maWVsZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBSZXF1aXJlZCBhdHRyaWJ1dGUgJ2ZpZWxkcycgZG9lc24ndCBleGlzdCBvbiBzY2hlbWE6ICR7c2NoZW1hfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIHNjaGVtYS5maWVsZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGRzW2ZpZWxkLm5hbWVdID0gQXZyb1R5cGUuZnJvbVNjaGVtYShmaWVsZC50eXBlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBdnJvUmVjb3JkVHlwZShmaWVsZHMsIHNjaGVtYS5uYW1lKTtcbiAgICAgICAgICAgIGNhc2UgQXZyb0NvbXBsZXguRU5VTTpcbiAgICAgICAgICAgICAgICBpZiAoc2NoZW1hLmFsaWFzZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBhbGlhc2VzIGN1cnJlbnRseSBpcyBub3Qgc3VwcG9ydGVkLCBzY2hlbWE6ICR7c2NoZW1hfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXNjaGVtYS5zeW1ib2xzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUmVxdWlyZWQgYXR0cmlidXRlICdzeW1ib2xzJyBkb2Vzbid0IGV4aXN0IG9uIHNjaGVtYTogJHtzY2hlbWF9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQXZyb0VudW1UeXBlKHNjaGVtYS5zeW1ib2xzKTtcbiAgICAgICAgICAgIGNhc2UgQXZyb0NvbXBsZXguTUFQOlxuICAgICAgICAgICAgICAgIGlmICghc2NoZW1hLnZhbHVlcykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFJlcXVpcmVkIGF0dHJpYnV0ZSAndmFsdWVzJyBkb2Vzbid0IGV4aXN0IG9uIHNjaGVtYTogJHtzY2hlbWF9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQXZyb01hcFR5cGUoQXZyb1R5cGUuZnJvbVNjaGVtYShzY2hlbWEudmFsdWVzKSk7XG4gICAgICAgICAgICBjYXNlIEF2cm9Db21wbGV4LkFSUkFZOiAvLyBVbnVzZWQgdG9kYXlcbiAgICAgICAgICAgIGNhc2UgQXZyb0NvbXBsZXguRklYRUQ6IC8vIFVudXNlZCB0b2RheVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgQXZybyB0eXBlICR7dHlwZX0gaW4gJHtzY2hlbWF9YCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5jbGFzcyBBdnJvUHJpbWl0aXZlVHlwZSBleHRlbmRzIEF2cm9UeXBlIHtcbiAgICBjb25zdHJ1Y3RvcihwcmltaXRpdmUpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5fcHJpbWl0aXZlID0gcHJpbWl0aXZlO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXdyYXBwZXItb2JqZWN0LXR5cGVzXG4gICAgcmVhZChzdHJlYW0sIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBzd2l0Y2ggKHRoaXMuX3ByaW1pdGl2ZSkge1xuICAgICAgICAgICAgY2FzZSBBdnJvUHJpbWl0aXZlLk5VTEw6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEF2cm9QYXJzZXIucmVhZE51bGwoKTtcbiAgICAgICAgICAgIGNhc2UgQXZyb1ByaW1pdGl2ZS5CT09MRUFOOlxuICAgICAgICAgICAgICAgIHJldHVybiBBdnJvUGFyc2VyLnJlYWRCb29sZWFuKHN0cmVhbSwgb3B0aW9ucyk7XG4gICAgICAgICAgICBjYXNlIEF2cm9QcmltaXRpdmUuSU5UOlxuICAgICAgICAgICAgICAgIHJldHVybiBBdnJvUGFyc2VyLnJlYWRJbnQoc3RyZWFtLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGNhc2UgQXZyb1ByaW1pdGl2ZS5MT05HOlxuICAgICAgICAgICAgICAgIHJldHVybiBBdnJvUGFyc2VyLnJlYWRMb25nKHN0cmVhbSwgb3B0aW9ucyk7XG4gICAgICAgICAgICBjYXNlIEF2cm9QcmltaXRpdmUuRkxPQVQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEF2cm9QYXJzZXIucmVhZEZsb2F0KHN0cmVhbSwgb3B0aW9ucyk7XG4gICAgICAgICAgICBjYXNlIEF2cm9QcmltaXRpdmUuRE9VQkxFOlxuICAgICAgICAgICAgICAgIHJldHVybiBBdnJvUGFyc2VyLnJlYWREb3VibGUoc3RyZWFtLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGNhc2UgQXZyb1ByaW1pdGl2ZS5CWVRFUzpcbiAgICAgICAgICAgICAgICByZXR1cm4gQXZyb1BhcnNlci5yZWFkQnl0ZXMoc3RyZWFtLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGNhc2UgQXZyb1ByaW1pdGl2ZS5TVFJJTkc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEF2cm9QYXJzZXIucmVhZFN0cmluZyhzdHJlYW0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIEF2cm8gUHJpbWl0aXZlXCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuY2xhc3MgQXZyb0VudW1UeXBlIGV4dGVuZHMgQXZyb1R5cGUge1xuICAgIGNvbnN0cnVjdG9yKHN5bWJvbHMpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5fc3ltYm9scyA9IHN5bWJvbHM7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8td3JhcHBlci1vYmplY3QtdHlwZXNcbiAgICBhc3luYyByZWFkKHN0cmVhbSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgQXZyb1BhcnNlci5yZWFkSW50KHN0cmVhbSwgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiB0aGlzLl9zeW1ib2xzW3ZhbHVlXTtcbiAgICB9XG59XG5jbGFzcyBBdnJvVW5pb25UeXBlIGV4dGVuZHMgQXZyb1R5cGUge1xuICAgIGNvbnN0cnVjdG9yKHR5cGVzKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuX3R5cGVzID0gdHlwZXM7XG4gICAgfVxuICAgIGFzeW5jIHJlYWQoc3RyZWFtLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgdHlwZUluZGV4ID0gYXdhaXQgQXZyb1BhcnNlci5yZWFkSW50KHN0cmVhbSwgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiB0aGlzLl90eXBlc1t0eXBlSW5kZXhdLnJlYWQoc3RyZWFtLCBvcHRpb25zKTtcbiAgICB9XG59XG5jbGFzcyBBdnJvTWFwVHlwZSBleHRlbmRzIEF2cm9UeXBlIHtcbiAgICBjb25zdHJ1Y3RvcihpdGVtVHlwZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLl9pdGVtVHlwZSA9IGl0ZW1UeXBlO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXdyYXBwZXItb2JqZWN0LXR5cGVzXG4gICAgcmVhZChzdHJlYW0sIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCByZWFkSXRlbU1ldGhvZCA9IChzLCBvcHRzKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faXRlbVR5cGUucmVhZChzLCBvcHRzKTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIEF2cm9QYXJzZXIucmVhZE1hcChzdHJlYW0sIHJlYWRJdGVtTWV0aG9kLCBvcHRpb25zKTtcbiAgICB9XG59XG5jbGFzcyBBdnJvUmVjb3JkVHlwZSBleHRlbmRzIEF2cm9UeXBlIHtcbiAgICBjb25zdHJ1Y3RvcihmaWVsZHMsIG5hbWUpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5fZmllbGRzID0gZmllbGRzO1xuICAgICAgICB0aGlzLl9uYW1lID0gbmFtZTtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby13cmFwcGVyLW9iamVjdC10eXBlc1xuICAgIGFzeW5jIHJlYWQoc3RyZWFtLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby13cmFwcGVyLW9iamVjdC10eXBlc1xuICAgICAgICBjb25zdCByZWNvcmQgPSB7fTtcbiAgICAgICAgcmVjb3JkW1wiJHNjaGVtYVwiXSA9IHRoaXMuX25hbWU7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuX2ZpZWxkcykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLl9maWVsZHMsIGtleSkpIHtcbiAgICAgICAgICAgICAgICByZWNvcmRba2V5XSA9IGF3YWl0IHRoaXMuX2ZpZWxkc1trZXldLnJlYWQoc3RyZWFtLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVjb3JkO1xuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5mdW5jdGlvbiBhcnJheXNFcXVhbChhLCBiKSB7XG4gICAgaWYgKGEgPT09IGIpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcbiAgICBpZiAoYSA9PSBudWxsIHx8IGIgPT0gbnVsbClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKGFbaV0gIT09IGJbaV0pXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbmNsYXNzIEF2cm9SZWFkZXIge1xuICAgIGdldCBibG9ja09mZnNldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Jsb2NrT2Zmc2V0O1xuICAgIH1cbiAgICBnZXQgb2JqZWN0SW5kZXgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vYmplY3RJbmRleDtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoZGF0YVN0cmVhbSwgaGVhZGVyU3RyZWFtLCBjdXJyZW50QmxvY2tPZmZzZXQsIGluZGV4V2l0aGluQ3VycmVudEJsb2NrKSB7XG4gICAgICAgIHRoaXMuX2RhdGFTdHJlYW0gPSBkYXRhU3RyZWFtO1xuICAgICAgICB0aGlzLl9oZWFkZXJTdHJlYW0gPSBoZWFkZXJTdHJlYW0gfHwgZGF0YVN0cmVhbTtcbiAgICAgICAgdGhpcy5faW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fYmxvY2tPZmZzZXQgPSBjdXJyZW50QmxvY2tPZmZzZXQgfHwgMDtcbiAgICAgICAgdGhpcy5fb2JqZWN0SW5kZXggPSBpbmRleFdpdGhpbkN1cnJlbnRCbG9jayB8fCAwO1xuICAgICAgICB0aGlzLl9pbml0aWFsQmxvY2tPZmZzZXQgPSBjdXJyZW50QmxvY2tPZmZzZXQgfHwgMDtcbiAgICB9XG4gICAgYXN5bmMgaW5pdGlhbGl6ZShvcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgaGVhZGVyID0gYXdhaXQgQXZyb1BhcnNlci5yZWFkRml4ZWRCeXRlcyh0aGlzLl9oZWFkZXJTdHJlYW0sIEFWUk9fSU5JVF9CWVRFUy5sZW5ndGgsIHtcbiAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFhcnJheXNFcXVhbChoZWFkZXIsIEFWUk9fSU5JVF9CWVRFUykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlN0cmVhbSBpcyBub3QgYW4gQXZybyBmaWxlLlwiKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBGaWxlIG1ldGFkYXRhIGlzIHdyaXR0ZW4gYXMgaWYgZGVmaW5lZCBieSB0aGUgZm9sbG93aW5nIG1hcCBzY2hlbWE6XG4gICAgICAgIC8vIHsgXCJ0eXBlXCI6IFwibWFwXCIsIFwidmFsdWVzXCI6IFwiYnl0ZXNcIn1cbiAgICAgICAgdGhpcy5fbWV0YWRhdGEgPSBhd2FpdCBBdnJvUGFyc2VyLnJlYWRNYXAodGhpcy5faGVhZGVyU3RyZWFtLCBBdnJvUGFyc2VyLnJlYWRTdHJpbmcsIHtcbiAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gVmFsaWRhdGUgY29kZWNcbiAgICAgICAgY29uc3QgY29kZWMgPSB0aGlzLl9tZXRhZGF0YVtBVlJPX0NPREVDX0tFWV07XG4gICAgICAgIGlmICghKGNvZGVjID09PSB1bmRlZmluZWQgfHwgY29kZWMgPT09IG51bGwgfHwgY29kZWMgPT09IFwibnVsbFwiKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29kZWNzIGFyZSBub3Qgc3VwcG9ydGVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRoZSAxNi1ieXRlLCByYW5kb21seS1nZW5lcmF0ZWQgc3luYyBtYXJrZXIgZm9yIHRoaXMgZmlsZS5cbiAgICAgICAgdGhpcy5fc3luY01hcmtlciA9IGF3YWl0IEF2cm9QYXJzZXIucmVhZEZpeGVkQnl0ZXModGhpcy5faGVhZGVyU3RyZWFtLCBBVlJPX1NZTkNfTUFSS0VSX1NJWkUsIHtcbiAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gUGFyc2UgdGhlIHNjaGVtYVxuICAgICAgICBjb25zdCBzY2hlbWEgPSBKU09OLnBhcnNlKHRoaXMuX21ldGFkYXRhW0FWUk9fU0NIRU1BX0tFWV0pO1xuICAgICAgICB0aGlzLl9pdGVtVHlwZSA9IEF2cm9UeXBlLmZyb21TY2hlbWEoc2NoZW1hKTtcbiAgICAgICAgaWYgKHRoaXMuX2Jsb2NrT2Zmc2V0ID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLl9ibG9ja09mZnNldCA9IHRoaXMuX2luaXRpYWxCbG9ja09mZnNldCArIHRoaXMuX2RhdGFTdHJlYW0ucG9zaXRpb247XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faXRlbXNSZW1haW5pbmdJbkJsb2NrID0gYXdhaXQgQXZyb1BhcnNlci5yZWFkTG9uZyh0aGlzLl9kYXRhU3RyZWFtLCB7XG4gICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIHNraXAgYmxvY2sgbGVuZ3RoXG4gICAgICAgIGF3YWl0IEF2cm9QYXJzZXIucmVhZExvbmcodGhpcy5fZGF0YVN0cmVhbSwgeyBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCB9KTtcbiAgICAgICAgdGhpcy5faW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy5fb2JqZWN0SW5kZXggJiYgdGhpcy5fb2JqZWN0SW5kZXggPiAwKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX29iamVjdEluZGV4OyBpKyspIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9pdGVtVHlwZS5yZWFkKHRoaXMuX2RhdGFTdHJlYW0sIHsgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5faXRlbXNSZW1haW5pbmdJbkJsb2NrLS07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgaGFzTmV4dCgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLl9pbml0aWFsaXplZCB8fCB0aGlzLl9pdGVtc1JlbWFpbmluZ0luQmxvY2sgPiAwO1xuICAgIH1cbiAgICBwYXJzZU9iamVjdHMoKSB7XG4gICAgICAgIHJldHVybiB0c2xpYi5fX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24qIHBhcnNlT2JqZWN0c18xKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9pbml0aWFsaXplZCkge1xuICAgICAgICAgICAgICAgIHlpZWxkIHRzbGliLl9fYXdhaXQodGhpcy5pbml0aWFsaXplKG9wdGlvbnMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdoaWxlICh0aGlzLmhhc05leHQoKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHlpZWxkIHRzbGliLl9fYXdhaXQodGhpcy5faXRlbVR5cGUucmVhZCh0aGlzLl9kYXRhU3RyZWFtLCB7XG4gICAgICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9pdGVtc1JlbWFpbmluZ0luQmxvY2stLTtcbiAgICAgICAgICAgICAgICB0aGlzLl9vYmplY3RJbmRleCsrO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pdGVtc1JlbWFpbmluZ0luQmxvY2sgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFya2VyID0geWllbGQgdHNsaWIuX19hd2FpdChBdnJvUGFyc2VyLnJlYWRGaXhlZEJ5dGVzKHRoaXMuX2RhdGFTdHJlYW0sIEFWUk9fU1lOQ19NQVJLRVJfU0laRSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYmxvY2tPZmZzZXQgPSB0aGlzLl9pbml0aWFsQmxvY2tPZmZzZXQgKyB0aGlzLl9kYXRhU3RyZWFtLnBvc2l0aW9uO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vYmplY3RJbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGlmICghYXJyYXlzRXF1YWwodGhpcy5fc3luY01hcmtlciwgbWFya2VyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU3RyZWFtIGlzIG5vdCBhIHZhbGlkIEF2cm8gZmlsZS5cIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2l0ZW1zUmVtYWluaW5nSW5CbG9jayA9IHlpZWxkIHRzbGliLl9fYXdhaXQoQXZyb1BhcnNlci5yZWFkTG9uZyh0aGlzLl9kYXRhU3RyZWFtLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBoaXQgdGhlIGVuZCBvZiB0aGUgc3RyZWFtLlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faXRlbXNSZW1haW5pbmdJbkJsb2NrID0gMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5faXRlbXNSZW1haW5pbmdJbkJsb2NrID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWdub3JlIGJsb2NrIHNpemVcbiAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIHRzbGliLl9fYXdhaXQoQXZyb1BhcnNlci5yZWFkTG9uZyh0aGlzLl9kYXRhU3RyZWFtLCB7IGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB5aWVsZCB5aWVsZCB0c2xpYi5fX2F3YWl0KHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5jbGFzcyBBdnJvUmVhZGFibGUge1xufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbmNvbnN0IEFCT1JUX0VSUk9SID0gbmV3IGFib3J0Q29udHJvbGxlci5BYm9ydEVycm9yKFwiUmVhZGluZyBmcm9tIHRoZSBhdnJvIHN0cmVhbSB3YXMgYWJvcnRlZC5cIik7XG5jbGFzcyBBdnJvUmVhZGFibGVGcm9tU3RyZWFtIGV4dGVuZHMgQXZyb1JlYWRhYmxlIHtcbiAgICB0b1VpbnQ4QXJyYXkoZGF0YSkge1xuICAgICAgICBpZiAodHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgY29uc3RydWN0b3IocmVhZGFibGUpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5fcmVhZGFibGUgPSByZWFkYWJsZTtcbiAgICAgICAgdGhpcy5fcG9zaXRpb24gPSAwO1xuICAgIH1cbiAgICBnZXQgcG9zaXRpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wb3NpdGlvbjtcbiAgICB9XG4gICAgYXN5bmMgcmVhZChzaXplLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoKF9hID0gb3B0aW9ucy5hYm9ydFNpZ25hbCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmFib3J0ZWQpIHtcbiAgICAgICAgICAgIHRocm93IEFCT1JUX0VSUk9SO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzaXplIDwgMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBzaXplIHBhcmFtZXRlciBzaG91bGQgYmUgcG9zaXRpdmU6ICR7c2l6ZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLl9yZWFkYWJsZS5yZWFkYWJsZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU3RyZWFtIG5vIGxvbmdlciByZWFkYWJsZS5cIik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU2VlIGlmIHRoZXJlIGlzIGFscmVhZHkgZW5vdWdoIGRhdGEuXG4gICAgICAgIGNvbnN0IGNodW5rID0gdGhpcy5fcmVhZGFibGUucmVhZChzaXplKTtcbiAgICAgICAgaWYgKGNodW5rKSB7XG4gICAgICAgICAgICB0aGlzLl9wb3NpdGlvbiArPSBjaHVuay5sZW5ndGg7XG4gICAgICAgICAgICAvLyBjaHVuay5sZW5ndGggbWF5YmUgbGVzcyB0aGFuIGRlc2lyZWQgc2l6ZSBpZiB0aGUgc3RyZWFtIGVuZHMuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy50b1VpbnQ4QXJyYXkoY2h1bmspO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gcmVnaXN0ZXIgY2FsbGJhY2sgdG8gd2FpdCBmb3IgZW5vdWdoIGRhdGEgdG8gcmVhZFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlLWJlZm9yZS1kZWZpbmUgKi9cbiAgICAgICAgICAgICAgICBjb25zdCBjbGVhblVwID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkYWJsZS5yZW1vdmVMaXN0ZW5lcihcInJlYWRhYmxlXCIsIHJlYWRhYmxlQ2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkYWJsZS5yZW1vdmVMaXN0ZW5lcihcImVycm9yXCIsIHJlamVjdENhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZGFibGUucmVtb3ZlTGlzdGVuZXIoXCJlbmRcIiwgcmVqZWN0Q2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkYWJsZS5yZW1vdmVMaXN0ZW5lcihcImNsb3NlXCIsIHJlamVjdENhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYWJvcnRTaWduYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuYWJvcnRTaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIGFib3J0SGFuZGxlcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlYWRhYmxlQ2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhbGxiYWNrQ2h1bmsgPSB0aGlzLl9yZWFkYWJsZS5yZWFkKHNpemUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2tDaHVuaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcG9zaXRpb24gKz0gY2FsbGJhY2tDaHVuay5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGVhblVwKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjYWxsYmFja0NodW5rLmxlbmd0aCBtYXliZSBsZXNzIHRoYW4gZGVzaXJlZCBzaXplIGlmIHRoZSBzdHJlYW0gZW5kcy5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy50b1VpbnQ4QXJyYXkoY2FsbGJhY2tDaHVuaykpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb25zdCByZWplY3RDYWxsYmFjayA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYW5VcCgpO1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGNvbnN0IGFib3J0SGFuZGxlciA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYW5VcCgpO1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoQUJPUlRfRVJST1IpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVhZGFibGUub24oXCJyZWFkYWJsZVwiLCByZWFkYWJsZUNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWFkYWJsZS5vbmNlKFwiZXJyb3JcIiwgcmVqZWN0Q2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRhYmxlLm9uY2UoXCJlbmRcIiwgcmVqZWN0Q2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRhYmxlLm9uY2UoXCJjbG9zZVwiLCByZWplY3RDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYWJvcnRTaWduYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5hYm9ydFNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgYWJvcnRIYW5kbGVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlLWJlZm9yZS1kZWZpbmUgKi9cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogT05MWSBBVkFJTEFCTEUgSU4gTk9ERS5KUyBSVU5USU1FLlxuICpcbiAqIEEgTm9kZS5qcyBCbG9iUXVpY2tRdWVyeVN0cmVhbSB3aWxsIGludGVybmFsbHkgcGFyc2UgYXZybyBkYXRhIHN0cmVhbSBmb3IgYmxvYiBxdWVyeS5cbiAqL1xuY2xhc3MgQmxvYlF1aWNrUXVlcnlTdHJlYW0gZXh0ZW5kcyBzdHJlYW0uUmVhZGFibGUge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgQmxvYlF1aWNrUXVlcnlTdHJlYW0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc291cmNlIC0gVGhlIGN1cnJlbnQgUmVhZGFibGVTdHJlYW0gcmV0dXJuZWQgZnJvbSBnZXR0ZXJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtXG4gICAgICovXG4gICAgY29uc3RydWN0b3Ioc291cmNlLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5hdnJvUGF1c2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICAgIHRoaXMub25Qcm9ncmVzcyA9IG9wdGlvbnMub25Qcm9ncmVzcztcbiAgICAgICAgdGhpcy5vbkVycm9yID0gb3B0aW9ucy5vbkVycm9yO1xuICAgICAgICB0aGlzLmF2cm9SZWFkZXIgPSBuZXcgQXZyb1JlYWRlcihuZXcgQXZyb1JlYWRhYmxlRnJvbVN0cmVhbSh0aGlzLnNvdXJjZSkpO1xuICAgICAgICB0aGlzLmF2cm9JdGVyID0gdGhpcy5hdnJvUmVhZGVyLnBhcnNlT2JqZWN0cyh7IGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsIH0pO1xuICAgIH1cbiAgICBfcmVhZCgpIHtcbiAgICAgICAgaWYgKHRoaXMuYXZyb1BhdXNlZCkge1xuICAgICAgICAgICAgdGhpcy5yZWFkSW50ZXJuYWwoKS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0KFwiZXJyb3JcIiwgZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIHJlYWRJbnRlcm5hbCgpIHtcbiAgICAgICAgdGhpcy5hdnJvUGF1c2VkID0gZmFsc2U7XG4gICAgICAgIGxldCBhdnJvTmV4dDtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgYXZyb05leHQgPSBhd2FpdCB0aGlzLmF2cm9JdGVyLm5leHQoKTtcbiAgICAgICAgICAgIGlmIChhdnJvTmV4dC5kb25lKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBvYmogPSBhdnJvTmV4dC52YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IHNjaGVtYSA9IG9iai4kc2NoZW1hO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcIk1pc3Npbmcgc2NoZW1hIGluIGF2cm8gcmVjb3JkLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN3aXRjaCAoc2NoZW1hKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcImNvbS5taWNyb3NvZnQuYXp1cmUuc3RvcmFnZS5xdWVyeUJsb2JDb250ZW50cy5yZXN1bHREYXRhXCI6XG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBvYmouZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhIGluc3RhbmNlb2YgVWludDhBcnJheSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcIkludmFsaWQgZGF0YSBpbiBhdnJvIHJlc3VsdCByZWNvcmQuXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnB1c2goQnVmZmVyLmZyb20oZGF0YSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hdnJvUGF1c2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiY29tLm1pY3Jvc29mdC5henVyZS5zdG9yYWdlLnF1ZXJ5QmxvYkNvbnRlbnRzLnByb2dyZXNzXCI6XG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGVzU2Nhbm5lZCA9IG9iai5ieXRlc1NjYW5uZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGJ5dGVzU2Nhbm5lZCAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFwiSW52YWxpZCBieXRlc1NjYW5uZWQgaW4gYXZybyBwcm9ncmVzcyByZWNvcmQuXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub25Qcm9ncmVzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25Qcm9ncmVzcyh7IGxvYWRlZEJ5dGVzOiBieXRlc1NjYW5uZWQgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImNvbS5taWNyb3NvZnQuYXp1cmUuc3RvcmFnZS5xdWVyeUJsb2JDb250ZW50cy5lbmRcIjpcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub25Qcm9ncmVzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdG90YWxCeXRlcyA9IG9iai50b3RhbEJ5dGVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0b3RhbEJ5dGVzICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJJbnZhbGlkIHRvdGFsQnl0ZXMgaW4gYXZybyBlbmQgcmVjb3JkLlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25Qcm9ncmVzcyh7IGxvYWRlZEJ5dGVzOiB0b3RhbEJ5dGVzIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHVzaChudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImNvbS5taWNyb3NvZnQuYXp1cmUuc3RvcmFnZS5xdWVyeUJsb2JDb250ZW50cy5lcnJvclwiOlxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmYXRhbCA9IG9iai5mYXRhbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZmF0YWwgIT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJJbnZhbGlkIGZhdGFsIGluIGF2cm8gZXJyb3IgcmVjb3JkLlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBvYmoubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbmFtZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFwiSW52YWxpZCBuYW1lIGluIGF2cm8gZXJyb3IgcmVjb3JkLlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gb2JqLmRlc2NyaXB0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkZXNjcmlwdGlvbiAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFwiSW52YWxpZCBkZXNjcmlwdGlvbiBpbiBhdnJvIGVycm9yIHJlY29yZC5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IG9iai5wb3NpdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcG9zaXRpb24gIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcIkludmFsaWQgcG9zaXRpb24gaW4gYXZybyBlcnJvciByZWNvcmQuXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkVycm9yKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRmF0YWw6IGZhdGFsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoYFVua25vd24gc2NoZW1hICR7c2NoZW1hfSBpbiBhdnJvIHByb2dyZXNzIHJlY29yZC5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSB3aGlsZSAoIWF2cm9OZXh0LmRvbmUgJiYgIXRoaXMuYXZyb1BhdXNlZCk7XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogT05MWSBBVkFJTEFCTEUgSU4gTk9ERS5KUyBSVU5USU1FLlxuICpcbiAqIEJsb2JRdWVyeVJlc3BvbnNlIGltcGxlbWVudHMgQmxvYkRvd25sb2FkUmVzcG9uc2VNb2RlbCBpbnRlcmZhY2UsIGFuZCBpbiBOb2RlLmpzIHJ1bnRpbWUgaXQgd2lsbFxuICogcGFyc2UgYXZvciBkYXRhIHJldHVybmVkIGJ5IGJsb2IgcXVlcnkuXG4gKi9cbmNsYXNzIEJsb2JRdWVyeVJlc3BvbnNlIHtcbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgc2VydmljZSBzdXBwb3J0c1xuICAgICAqIHJlcXVlc3RzIGZvciBwYXJ0aWFsIGZpbGUgY29udGVudC5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBhY2NlcHRSYW5nZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuYWNjZXB0UmFuZ2VzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGlmIGl0IHdhcyBwcmV2aW91c2x5IHNwZWNpZmllZFxuICAgICAqIGZvciB0aGUgZmlsZS5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBjYWNoZUNvbnRyb2woKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuY2FjaGVDb250cm9sO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSB0aGF0IHdhcyBzcGVjaWZpZWRcbiAgICAgKiBmb3IgdGhlICd4LW1zLWNvbnRlbnQtZGlzcG9zaXRpb24nIGhlYWRlciBhbmQgc3BlY2lmaWVzIGhvdyB0byBwcm9jZXNzIHRoZVxuICAgICAqIHJlc3BvbnNlLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNvbnRlbnREaXNwb3NpdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5jb250ZW50RGlzcG9zaXRpb247XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHZhbHVlIHRoYXQgd2FzIHNwZWNpZmllZFxuICAgICAqIGZvciB0aGUgQ29udGVudC1FbmNvZGluZyByZXF1ZXN0IGhlYWRlci5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBjb250ZW50RW5jb2RpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuY29udGVudEVuY29kaW5nO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSB0aGF0IHdhcyBzcGVjaWZpZWRcbiAgICAgKiBmb3IgdGhlIENvbnRlbnQtTGFuZ3VhZ2UgcmVxdWVzdCBoZWFkZXIuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY29udGVudExhbmd1YWdlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNvbnRlbnRMYW5ndWFnZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgc2VxdWVuY2UgbnVtYmVyIGZvciBhXG4gICAgICogcGFnZSBibG9iLiBUaGlzIGhlYWRlciBpcyBub3QgcmV0dXJuZWQgZm9yIGJsb2NrIGJsb2JzIG9yIGFwcGVuZCBibG9icy5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBibG9iU2VxdWVuY2VOdW1iZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuYmxvYlNlcXVlbmNlTnVtYmVyO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgYmxvYidzIHR5cGUuIFBvc3NpYmxlIHZhbHVlcyBpbmNsdWRlOlxuICAgICAqICdCbG9ja0Jsb2InLCAnUGFnZUJsb2InLCAnQXBwZW5kQmxvYicuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgYmxvYlR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuYmxvYlR5cGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2YgYnl0ZXMgcHJlc2VudCBpbiB0aGVcbiAgICAgKiByZXNwb25zZSBib2R5LlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNvbnRlbnRMZW5ndGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuY29udGVudExlbmd0aDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSWYgdGhlIGZpbGUgaGFzIGFuIE1ENSBoYXNoIGFuZCB0aGVcbiAgICAgKiByZXF1ZXN0IGlzIHRvIHJlYWQgdGhlIGZ1bGwgZmlsZSwgdGhpcyByZXNwb25zZSBoZWFkZXIgaXMgcmV0dXJuZWQgc28gdGhhdFxuICAgICAqIHRoZSBjbGllbnQgY2FuIGNoZWNrIGZvciBtZXNzYWdlIGNvbnRlbnQgaW50ZWdyaXR5LiBJZiB0aGUgcmVxdWVzdCBpcyB0b1xuICAgICAqIHJlYWQgYSBzcGVjaWZpZWQgcmFuZ2UgYW5kIHRoZSAneC1tcy1yYW5nZS1nZXQtY29udGVudC1tZDUnIGlzIHNldCB0b1xuICAgICAqIHRydWUsIHRoZW4gdGhlIHJlcXVlc3QgcmV0dXJucyBhbiBNRDUgaGFzaCBmb3IgdGhlIHJhbmdlLCBhcyBsb25nIGFzIHRoZVxuICAgICAqIHJhbmdlIHNpemUgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDQgTUIuIElmIG5laXRoZXIgb2YgdGhlc2Ugc2V0cyBvZlxuICAgICAqIGNvbmRpdGlvbnMgaXMgdHJ1ZSwgdGhlbiBubyB2YWx1ZSBpcyByZXR1cm5lZCBmb3IgdGhlICdDb250ZW50LU1ENSdcbiAgICAgKiBoZWFkZXIuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY29udGVudE1ENSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5jb250ZW50TUQ1O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgdGhlIHJhbmdlIG9mIGJ5dGVzIHJldHVybmVkIGlmXG4gICAgICogdGhlIGNsaWVudCByZXF1ZXN0ZWQgYSBzdWJzZXQgb2YgdGhlIGZpbGUgYnkgc2V0dGluZyB0aGUgUmFuZ2UgcmVxdWVzdFxuICAgICAqIGhlYWRlci5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBjb250ZW50UmFuZ2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuY29udGVudFJhbmdlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgY29udGVudCB0eXBlIHNwZWNpZmllZCBmb3IgdGhlIGZpbGUuXG4gICAgICogVGhlIGRlZmF1bHQgY29udGVudCB0eXBlIGlzICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY29udGVudFR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuY29udGVudFR5cGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbmNsdXNpb24gdGltZSBvZiB0aGUgbGFzdCBhdHRlbXB0ZWRcbiAgICAgKiBDb3B5IEZpbGUgb3BlcmF0aW9uIHdoZXJlIHRoaXMgZmlsZSB3YXMgdGhlIGRlc3RpbmF0aW9uIGZpbGUuIFRoaXMgdmFsdWVcbiAgICAgKiBjYW4gc3BlY2lmeSB0aGUgdGltZSBvZiBhIGNvbXBsZXRlZCwgYWJvcnRlZCwgb3IgZmFpbGVkIGNvcHkgYXR0ZW1wdC5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBjb3B5Q29tcGxldGVkT24oKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN0cmluZyBpZGVudGlmaWVyIGZvciB0aGUgbGFzdCBhdHRlbXB0ZWQgQ29weVxuICAgICAqIEZpbGUgb3BlcmF0aW9uIHdoZXJlIHRoaXMgZmlsZSB3YXMgdGhlIGRlc3RpbmF0aW9uIGZpbGUuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY29weUlkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNvcHlJZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29udGFpbnMgdGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQgYW5kXG4gICAgICogdGhlIHRvdGFsIGJ5dGVzIGluIHRoZSBzb3VyY2UgaW4gdGhlIGxhc3QgYXR0ZW1wdGVkIENvcHkgRmlsZSBvcGVyYXRpb25cbiAgICAgKiB3aGVyZSB0aGlzIGZpbGUgd2FzIHRoZSBkZXN0aW5hdGlvbiBmaWxlLiBDYW4gc2hvdyBiZXR3ZWVuIDAgYW5kXG4gICAgICogQ29udGVudC1MZW5ndGggYnl0ZXMgY29waWVkLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNvcHlQcm9ncmVzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5jb3B5UHJvZ3Jlc3M7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFVSTCB1cCB0byAyS0IgaW4gbGVuZ3RoIHRoYXQgc3BlY2lmaWVzIHRoZVxuICAgICAqIHNvdXJjZSBmaWxlIHVzZWQgaW4gdGhlIGxhc3QgYXR0ZW1wdGVkIENvcHkgRmlsZSBvcGVyYXRpb24gd2hlcmUgdGhpcyBmaWxlXG4gICAgICogd2FzIHRoZSBkZXN0aW5hdGlvbiBmaWxlLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNvcHlTb3VyY2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuY29weVNvdXJjZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3RhdGUgb2YgdGhlIGNvcHkgb3BlcmF0aW9uXG4gICAgICogaWRlbnRpZmllZCBieSAneC1tcy1jb3B5LWlkJy4gUG9zc2libGUgdmFsdWVzIGluY2x1ZGU6ICdwZW5kaW5nJyxcbiAgICAgKiAnc3VjY2VzcycsICdhYm9ydGVkJywgJ2ZhaWxlZCdcbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBjb3B5U3RhdHVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNvcHlTdGF0dXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE9ubHkgYXBwZWFycyB3aGVuXG4gICAgICogeC1tcy1jb3B5LXN0YXR1cyBpcyBmYWlsZWQgb3IgcGVuZGluZy4gRGVzY3JpYmVzIGNhdXNlIG9mIGZhdGFsIG9yXG4gICAgICogbm9uLWZhdGFsIGNvcHkgb3BlcmF0aW9uIGZhaWx1cmUuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY29weVN0YXR1c0Rlc2NyaXB0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNvcHlTdGF0dXNEZXNjcmlwdGlvbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogV2hlbiBhIGJsb2IgaXMgbGVhc2VkLFxuICAgICAqIHNwZWNpZmllcyB3aGV0aGVyIHRoZSBsZWFzZSBpcyBvZiBpbmZpbml0ZSBvciBmaXhlZCBkdXJhdGlvbi4gUG9zc2libGVcbiAgICAgKiB2YWx1ZXMgaW5jbHVkZTogJ2luZmluaXRlJywgJ2ZpeGVkJy5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBsZWFzZUR1cmF0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmxlYXNlRHVyYXRpb247XG4gICAgfVxuICAgIC8qKlxuICAgICAqIExlYXNlIHN0YXRlIG9mIHRoZSBibG9iLiBQb3NzaWJsZVxuICAgICAqIHZhbHVlcyBpbmNsdWRlOiAnYXZhaWxhYmxlJywgJ2xlYXNlZCcsICdleHBpcmVkJywgJ2JyZWFraW5nJywgJ2Jyb2tlbicuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgbGVhc2VTdGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5sZWFzZVN0YXRlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBsZWFzZSBzdGF0dXMgb2YgdGhlXG4gICAgICogYmxvYi4gUG9zc2libGUgdmFsdWVzIGluY2x1ZGU6ICdsb2NrZWQnLCAndW5sb2NrZWQnLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGxlYXNlU3RhdHVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmxlYXNlU3RhdHVzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBIFVUQyBkYXRlL3RpbWUgdmFsdWUgZ2VuZXJhdGVkIGJ5IHRoZSBzZXJ2aWNlIHRoYXRcbiAgICAgKiBpbmRpY2F0ZXMgdGhlIHRpbWUgYXQgd2hpY2ggdGhlIHJlc3BvbnNlIHdhcyBpbml0aWF0ZWQuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgZGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5kYXRlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIGNvbW1pdHRlZCBibG9ja3NcbiAgICAgKiBwcmVzZW50IGluIHRoZSBibG9iLiBUaGlzIGhlYWRlciBpcyByZXR1cm5lZCBvbmx5IGZvciBhcHBlbmQgYmxvYnMuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgYmxvYkNvbW1pdHRlZEJsb2NrQ291bnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuYmxvYkNvbW1pdHRlZEJsb2NrQ291bnQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBFVGFnIGNvbnRhaW5zIGEgdmFsdWUgdGhhdCB5b3UgY2FuIHVzZSB0b1xuICAgICAqIHBlcmZvcm0gb3BlcmF0aW9ucyBjb25kaXRpb25hbGx5LCBpbiBxdW90ZXMuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgZXRhZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5ldGFnO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgZXJyb3IgY29kZS5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBlcnJvckNvZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuZXJyb3JDb2RlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgdmFsdWUgb2YgdGhpcyBoZWFkZXIgaXMgc2V0IHRvXG4gICAgICogdHJ1ZSBpZiB0aGUgZmlsZSBkYXRhIGFuZCBhcHBsaWNhdGlvbiBtZXRhZGF0YSBhcmUgY29tcGxldGVseSBlbmNyeXB0ZWRcbiAgICAgKiB1c2luZyB0aGUgc3BlY2lmaWVkIGFsZ29yaXRobS4gT3RoZXJ3aXNlLCB0aGUgdmFsdWUgaXMgc2V0IHRvIGZhbHNlICh3aGVuXG4gICAgICogdGhlIGZpbGUgaXMgdW5lbmNyeXB0ZWQsIG9yIGlmIG9ubHkgcGFydHMgb2YgdGhlIGZpbGUvYXBwbGljYXRpb24gbWV0YWRhdGFcbiAgICAgKiBhcmUgZW5jcnlwdGVkKS5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBpc1NlcnZlckVuY3J5cHRlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5pc1NlcnZlckVuY3J5cHRlZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSWYgdGhlIGJsb2IgaGFzIGEgTUQ1IGhhc2gsIGFuZCBpZlxuICAgICAqIHJlcXVlc3QgY29udGFpbnMgcmFuZ2UgaGVhZGVyIChSYW5nZSBvciB4LW1zLXJhbmdlKSwgdGhpcyByZXNwb25zZSBoZWFkZXJcbiAgICAgKiBpcyByZXR1cm5lZCB3aXRoIHRoZSB2YWx1ZSBvZiB0aGUgd2hvbGUgYmxvYidzIE1ENSB2YWx1ZS4gVGhpcyB2YWx1ZSBtYXlcbiAgICAgKiBvciBtYXkgbm90IGJlIGVxdWFsIHRvIHRoZSB2YWx1ZSByZXR1cm5lZCBpbiBDb250ZW50LU1ENSBoZWFkZXIsIHdpdGggdGhlXG4gICAgICogbGF0dGVyIGNhbGN1bGF0ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHJhbmdlLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGJsb2JDb250ZW50TUQ1KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmJsb2JDb250ZW50TUQ1O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBkYXRlIGFuZCB0aW1lIHRoZSBmaWxlIHdhcyBsYXN0XG4gICAgICogbW9kaWZpZWQuIEFueSBvcGVyYXRpb24gdGhhdCBtb2RpZmllcyB0aGUgZmlsZSBvciBpdHMgcHJvcGVydGllcyB1cGRhdGVzXG4gICAgICogdGhlIGxhc3QgbW9kaWZpZWQgdGltZS5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBsYXN0TW9kaWZpZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UubGFzdE1vZGlmaWVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBIG5hbWUtdmFsdWUgcGFpclxuICAgICAqIHRvIGFzc29jaWF0ZSB3aXRoIGEgZmlsZSBzdG9yYWdlIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBtZXRhZGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5tZXRhZGF0YTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhpcyBoZWFkZXIgdW5pcXVlbHkgaWRlbnRpZmllcyB0aGUgcmVxdWVzdFxuICAgICAqIHRoYXQgd2FzIG1hZGUgYW5kIGNhbiBiZSB1c2VkIGZvciB0cm91Ymxlc2hvb3RpbmcgdGhlIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgcmVxdWVzdElkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLnJlcXVlc3RJZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSWYgYSBjbGllbnQgcmVxdWVzdCBpZCBoZWFkZXIgaXMgc2VudCBpbiB0aGUgcmVxdWVzdCwgdGhpcyBoZWFkZXIgd2lsbCBiZSBwcmVzZW50IGluIHRoZVxuICAgICAqIHJlc3BvbnNlIHdpdGggdGhlIHNhbWUgdmFsdWUuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY2xpZW50UmVxdWVzdElkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNsaWVudFJlcXVlc3RJZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHRoZSB2ZXJzaW9uIG9mIHRoZSBGaWxlIHNlcnZpY2UgdXNlZFxuICAgICAqIHRvIGV4ZWN1dGUgdGhlIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgdmVyc2lvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS52ZXJzaW9uO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgU0hBLTI1NiBoYXNoIG9mIHRoZSBlbmNyeXB0aW9uIGtleSB1c2VkIHRvIGVuY3J5cHQgdGhlIGJsb2IuIFRoaXMgdmFsdWUgaXMgb25seSByZXR1cm5lZFxuICAgICAqIHdoZW4gdGhlIGJsb2Igd2FzIGVuY3J5cHRlZCB3aXRoIGEgY3VzdG9tZXItcHJvdmlkZWQga2V5LlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGVuY3J5cHRpb25LZXlTaGEyNTYoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuZW5jcnlwdGlvbktleVNoYTI1NjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSWYgdGhlIHJlcXVlc3QgaXMgdG8gcmVhZCBhIHNwZWNpZmllZCByYW5nZSBhbmQgdGhlIHgtbXMtcmFuZ2UtZ2V0LWNvbnRlbnQtY3JjNjQgaXMgc2V0IHRvXG4gICAgICogdHJ1ZSwgdGhlbiB0aGUgcmVxdWVzdCByZXR1cm5zIGEgY3JjNjQgZm9yIHRoZSByYW5nZSwgYXMgbG9uZyBhcyB0aGUgcmFuZ2Ugc2l6ZSBpcyBsZXNzIHRoYW5cbiAgICAgKiBvciBlcXVhbCB0byA0IE1CLiBJZiBib3RoIHgtbXMtcmFuZ2UtZ2V0LWNvbnRlbnQtY3JjNjQgJiB4LW1zLXJhbmdlLWdldC1jb250ZW50LW1kNSBpc1xuICAgICAqIHNwZWNpZmllZCBpbiB0aGUgc2FtZSByZXF1ZXN0LCBpdCB3aWxsIGZhaWwgd2l0aCA0MDAoQmFkIFJlcXVlc3QpXG4gICAgICovXG4gICAgZ2V0IGNvbnRlbnRDcmM2NCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5jb250ZW50Q3JjNjQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSByZXNwb25zZSBib2R5IGFzIGEgYnJvd3NlciBCbG9iLlxuICAgICAqIEFsd2F5cyB1bmRlZmluZWQgaW4gbm9kZS5qcy5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBibG9iQm9keSgpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIHJlc3BvbnNlIGJvZHkgYXMgYSBub2RlLmpzIFJlYWRhYmxlIHN0cmVhbS5cbiAgICAgKiBBbHdheXMgdW5kZWZpbmVkIGluIHRoZSBicm93c2VyLlxuICAgICAqXG4gICAgICogSXQgd2lsbCBwYXJzZSBhdm9yIGRhdGEgcmV0dXJuZWQgYnkgYmxvYiBxdWVyeS5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCByZWFkYWJsZVN0cmVhbUJvZHkoKSB7XG4gICAgICAgIHJldHVybiBjb3JlVXRpbC5pc05vZGUgPyB0aGlzLmJsb2JEb3dubG9hZFN0cmVhbSA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIEhUVFAgcmVzcG9uc2UuXG4gICAgICovXG4gICAgZ2V0IF9yZXNwb25zZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5fcmVzcG9uc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgQmxvYlF1ZXJ5UmVzcG9uc2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3JpZ2luYWxSZXNwb25zZSAtXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG9yaWdpbmFsUmVzcG9uc2UsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICB0aGlzLm9yaWdpbmFsUmVzcG9uc2UgPSBvcmlnaW5hbFJlc3BvbnNlO1xuICAgICAgICB0aGlzLmJsb2JEb3dubG9hZFN0cmVhbSA9IG5ldyBCbG9iUXVpY2tRdWVyeVN0cmVhbSh0aGlzLm9yaWdpbmFsUmVzcG9uc2UucmVhZGFibGVTdHJlYW1Cb2R5LCBvcHRpb25zKTtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBhY2Nlc3MgdGllciBvbiBhIGJsb2IuXG4gKiBGb3IgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgYmxvY2sgYmxvYiBsZXZlbCB0aWVyaW5nIHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vYXp1cmUvc3RvcmFnZS9ibG9icy9zdG9yYWdlLWJsb2Itc3RvcmFnZS10aWVyc3xIb3QsIGNvb2wgYW5kIGFyY2hpdmUgc3RvcmFnZSB0aWVycy59XG4gKi9cbmV4cG9ydHMuQmxvY2tCbG9iVGllciA9IHZvaWQgMDtcbihmdW5jdGlvbiAoQmxvY2tCbG9iVGllcikge1xuICAgIC8qKlxuICAgICAqIE9wdGltaXplZCBmb3Igc3RvcmluZyBkYXRhIHRoYXQgaXMgYWNjZXNzZWQgZnJlcXVlbnRseS5cbiAgICAgKi9cbiAgICBCbG9ja0Jsb2JUaWVyW1wiSG90XCJdID0gXCJIb3RcIjtcbiAgICAvKipcbiAgICAgKiBPcHRpbWl6ZWQgZm9yIHN0b3JpbmcgZGF0YSB0aGF0IGlzIGluZnJlcXVlbnRseSBhY2Nlc3NlZCBhbmQgc3RvcmVkIGZvciBhdCBsZWFzdCAzMCBkYXlzLlxuICAgICAqL1xuICAgIEJsb2NrQmxvYlRpZXJbXCJDb29sXCJdID0gXCJDb29sXCI7XG4gICAgLyoqXG4gICAgICogT3B0aW1pemVkIGZvciBzdG9yaW5nIGRhdGEgdGhhdCBpcyByYXJlbHkgYWNjZXNzZWQuXG4gICAgICovXG4gICAgQmxvY2tCbG9iVGllcltcIkNvbGRcIl0gPSBcIkNvbGRcIjtcbiAgICAvKipcbiAgICAgKiBPcHRpbWl6ZWQgZm9yIHN0b3JpbmcgZGF0YSB0aGF0IGlzIHJhcmVseSBhY2Nlc3NlZCBhbmQgc3RvcmVkIGZvciBhdCBsZWFzdCAxODAgZGF5c1xuICAgICAqIHdpdGggZmxleGlibGUgbGF0ZW5jeSByZXF1aXJlbWVudHMgKG9uIHRoZSBvcmRlciBvZiBob3VycykuXG4gICAgICovXG4gICAgQmxvY2tCbG9iVGllcltcIkFyY2hpdmVcIl0gPSBcIkFyY2hpdmVcIjtcbn0pKGV4cG9ydHMuQmxvY2tCbG9iVGllciB8fCAoZXhwb3J0cy5CbG9ja0Jsb2JUaWVyID0ge30pKTtcbi8qKlxuICogU3BlY2lmaWVzIHRoZSBwYWdlIGJsb2IgdGllciB0byBzZXQgdGhlIGJsb2IgdG8uIFRoaXMgaXMgb25seSBhcHBsaWNhYmxlIHRvIHBhZ2UgYmxvYnMgb24gcHJlbWl1bSBzdG9yYWdlIGFjY291bnRzLlxuICogUGxlYXNlIHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vYXp1cmUvc3RvcmFnZS9zdG9yYWdlLXByZW1pdW0tc3RvcmFnZSNzY2FsYWJpbGl0eS1hbmQtcGVyZm9ybWFuY2UtdGFyZ2V0c3xoZXJlfVxuICogZm9yIGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIHRoZSBjb3JyZXNwb25kaW5nIElPUFMgYW5kIHRocm91Z2hwdXQgcGVyIFBhZ2VCbG9iVGllci5cbiAqL1xuZXhwb3J0cy5QcmVtaXVtUGFnZUJsb2JUaWVyID0gdm9pZCAwO1xuKGZ1bmN0aW9uIChQcmVtaXVtUGFnZUJsb2JUaWVyKSB7XG4gICAgLyoqXG4gICAgICogUDQgVGllci5cbiAgICAgKi9cbiAgICBQcmVtaXVtUGFnZUJsb2JUaWVyW1wiUDRcIl0gPSBcIlA0XCI7XG4gICAgLyoqXG4gICAgICogUDYgVGllci5cbiAgICAgKi9cbiAgICBQcmVtaXVtUGFnZUJsb2JUaWVyW1wiUDZcIl0gPSBcIlA2XCI7XG4gICAgLyoqXG4gICAgICogUDEwIFRpZXIuXG4gICAgICovXG4gICAgUHJlbWl1bVBhZ2VCbG9iVGllcltcIlAxMFwiXSA9IFwiUDEwXCI7XG4gICAgLyoqXG4gICAgICogUDE1IFRpZXIuXG4gICAgICovXG4gICAgUHJlbWl1bVBhZ2VCbG9iVGllcltcIlAxNVwiXSA9IFwiUDE1XCI7XG4gICAgLyoqXG4gICAgICogUDIwIFRpZXIuXG4gICAgICovXG4gICAgUHJlbWl1bVBhZ2VCbG9iVGllcltcIlAyMFwiXSA9IFwiUDIwXCI7XG4gICAgLyoqXG4gICAgICogUDMwIFRpZXIuXG4gICAgICovXG4gICAgUHJlbWl1bVBhZ2VCbG9iVGllcltcIlAzMFwiXSA9IFwiUDMwXCI7XG4gICAgLyoqXG4gICAgICogUDQwIFRpZXIuXG4gICAgICovXG4gICAgUHJlbWl1bVBhZ2VCbG9iVGllcltcIlA0MFwiXSA9IFwiUDQwXCI7XG4gICAgLyoqXG4gICAgICogUDUwIFRpZXIuXG4gICAgICovXG4gICAgUHJlbWl1bVBhZ2VCbG9iVGllcltcIlA1MFwiXSA9IFwiUDUwXCI7XG4gICAgLyoqXG4gICAgICogUDYwIFRpZXIuXG4gICAgICovXG4gICAgUHJlbWl1bVBhZ2VCbG9iVGllcltcIlA2MFwiXSA9IFwiUDYwXCI7XG4gICAgLyoqXG4gICAgICogUDcwIFRpZXIuXG4gICAgICovXG4gICAgUHJlbWl1bVBhZ2VCbG9iVGllcltcIlA3MFwiXSA9IFwiUDcwXCI7XG4gICAgLyoqXG4gICAgICogUDgwIFRpZXIuXG4gICAgICovXG4gICAgUHJlbWl1bVBhZ2VCbG9iVGllcltcIlA4MFwiXSA9IFwiUDgwXCI7XG59KShleHBvcnRzLlByZW1pdW1QYWdlQmxvYlRpZXIgfHwgKGV4cG9ydHMuUHJlbWl1bVBhZ2VCbG9iVGllciA9IHt9KSk7XG5mdW5jdGlvbiB0b0FjY2Vzc1RpZXIodGllcikge1xuICAgIGlmICh0aWVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHRpZXI7IC8vIE5vIG1vcmUgY2hlY2sgaWYgc3RyaW5nIGlzIGEgdmFsaWQgQWNjZXNzVGllciwgYW5kIGxlZnQgdGhpcyB0byB1bmRlcmxheSBsb2dpYyB0byBkZWNpZGUoc2VydmljZSkuXG59XG5mdW5jdGlvbiBlbnN1cmVDcGtJZlNwZWNpZmllZChjcGssIGlzSHR0cHMpIHtcbiAgICBpZiAoY3BrICYmICFpc0h0dHBzKSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiQ3VzdG9tZXItcHJvdmlkZWQgZW5jcnlwdGlvbiBrZXkgbXVzdCBiZSB1c2VkIG92ZXIgSFRUUFMuXCIpO1xuICAgIH1cbiAgICBpZiAoY3BrICYmICFjcGsuZW5jcnlwdGlvbkFsZ29yaXRobSkge1xuICAgICAgICBjcGsuZW5jcnlwdGlvbkFsZ29yaXRobSA9IEVuY3J5cHRpb25BbGdvcml0aG1BRVMyNTtcbiAgICB9XG59XG4vKipcbiAqIERlZmluZXMgdGhlIGtub3duIGNsb3VkIGF1ZGllbmNlcyBmb3IgU3RvcmFnZS5cbiAqL1xuZXhwb3J0cy5TdG9yYWdlQmxvYkF1ZGllbmNlID0gdm9pZCAwO1xuKGZ1bmN0aW9uIChTdG9yYWdlQmxvYkF1ZGllbmNlKSB7XG4gICAgLyoqXG4gICAgICogVGhlIE9BdXRoIHNjb3BlIHRvIHVzZSB0byByZXRyaWV2ZSBhbiBBQUQgdG9rZW4gZm9yIEF6dXJlIFN0b3JhZ2UuXG4gICAgICovXG4gICAgU3RvcmFnZUJsb2JBdWRpZW5jZVtcIlN0b3JhZ2VPQXV0aFNjb3Blc1wiXSA9IFwiaHR0cHM6Ly9zdG9yYWdlLmF6dXJlLmNvbS8uZGVmYXVsdFwiO1xuICAgIC8qKlxuICAgICAqIFRoZSBPQXV0aCBzY29wZSB0byB1c2UgdG8gcmV0cmlldmUgYW4gQUFEIHRva2VuIGZvciBBenVyZSBEaXNrLlxuICAgICAqL1xuICAgIFN0b3JhZ2VCbG9iQXVkaWVuY2VbXCJEaXNrQ29tcHV0ZU9BdXRoU2NvcGVzXCJdID0gXCJodHRwczovL2Rpc2suY29tcHV0ZS5henVyZS5jb20vLmRlZmF1bHRcIjtcbn0pKGV4cG9ydHMuU3RvcmFnZUJsb2JBdWRpZW5jZSB8fCAoZXhwb3J0cy5TdG9yYWdlQmxvYkF1ZGllbmNlID0ge30pKTtcbi8qKlxuICpcbiAqIFRvIGdldCBPQXV0aCBhdWRpZW5jZSBmb3IgYSBzdG9yYWdlIGFjY291bnQgZm9yIGJsb2Igc2VydmljZS5cbiAqL1xuZnVuY3Rpb24gZ2V0QmxvYlNlcnZpY2VBY2NvdW50QXVkaWVuY2Uoc3RvcmFnZUFjY291bnROYW1lKSB7XG4gICAgcmV0dXJuIGBodHRwczovLyR7c3RvcmFnZUFjY291bnROYW1lfS5ibG9iLmNvcmUud2luZG93cy5uZXQvLmRlZmF1bHRgO1xufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogRnVuY3Rpb24gdGhhdCBjb252ZXJ0cyBQYWdlUmFuZ2UgYW5kIENsZWFyUmFuZ2UgdG8gYSBjb21tb24gUmFuZ2Ugb2JqZWN0LlxuICogUGFnZVJhbmdlIGFuZCBDbGVhclJhbmdlIGhhdmUgc3RhcnQgYW5kIGVuZCB3aGlsZSBSYW5nZSBvZmZzZXQgYW5kIGNvdW50XG4gKiB0aGlzIGZ1bmN0aW9uIG5vcm1hbGl6ZXMgdG8gUmFuZ2UuXG4gKiBAcGFyYW0gcmVzcG9uc2UgLSBNb2RlbCBQYWdlQmxvYiBSYW5nZSByZXNwb25zZVxuICovXG5mdW5jdGlvbiByYW5nZVJlc3BvbnNlRnJvbU1vZGVsKHJlc3BvbnNlKSB7XG4gICAgY29uc3QgcGFnZVJhbmdlID0gKHJlc3BvbnNlLl9yZXNwb25zZS5wYXJzZWRCb2R5LnBhZ2VSYW5nZSB8fCBbXSkubWFwKCh4KSA9PiAoe1xuICAgICAgICBvZmZzZXQ6IHguc3RhcnQsXG4gICAgICAgIGNvdW50OiB4LmVuZCAtIHguc3RhcnQsXG4gICAgfSkpO1xuICAgIGNvbnN0IGNsZWFyUmFuZ2UgPSAocmVzcG9uc2UuX3Jlc3BvbnNlLnBhcnNlZEJvZHkuY2xlYXJSYW5nZSB8fCBbXSkubWFwKCh4KSA9PiAoe1xuICAgICAgICBvZmZzZXQ6IHguc3RhcnQsXG4gICAgICAgIGNvdW50OiB4LmVuZCAtIHguc3RhcnQsXG4gICAgfSkpO1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHJlc3BvbnNlKSwgeyBwYWdlUmFuZ2UsXG4gICAgICAgIGNsZWFyUmFuZ2UsIF9yZXNwb25zZTogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCByZXNwb25zZS5fcmVzcG9uc2UpLCB7IHBhcnNlZEJvZHk6IHtcbiAgICAgICAgICAgICAgICBwYWdlUmFuZ2UsXG4gICAgICAgICAgICAgICAgY2xlYXJSYW5nZSxcbiAgICAgICAgICAgIH0gfSkgfSk7XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBUaGlzIGlzIHRoZSBwb2xsZXIgcmV0dXJuZWQgYnkge0BsaW5rIEJsb2JDbGllbnQuYmVnaW5Db3B5RnJvbVVSTH0uXG4gKiBUaGlzIGNhbiBub3QgYmUgaW5zdGFudGlhdGVkIGRpcmVjdGx5IG91dHNpZGUgb2YgdGhpcyBwYWNrYWdlLlxuICpcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgQmxvYkJlZ2luQ29weUZyb21VcmxQb2xsZXIgZXh0ZW5kcyBjb3JlTHJvLlBvbGxlciB7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICBjb25zdCB7IGJsb2JDbGllbnQsIGNvcHlTb3VyY2UsIGludGVydmFsSW5NcyA9IDE1MDAwLCBvblByb2dyZXNzLCByZXN1bWVGcm9tLCBzdGFydENvcHlGcm9tVVJMT3B0aW9ucywgfSA9IG9wdGlvbnM7XG4gICAgICAgIGxldCBzdGF0ZTtcbiAgICAgICAgaWYgKHJlc3VtZUZyb20pIHtcbiAgICAgICAgICAgIHN0YXRlID0gSlNPTi5wYXJzZShyZXN1bWVGcm9tKS5zdGF0ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcGVyYXRpb24gPSBtYWtlQmxvYkJlZ2luQ29weUZyb21VUkxQb2xsT3BlcmF0aW9uKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUpLCB7IGJsb2JDbGllbnQsXG4gICAgICAgICAgICBjb3B5U291cmNlLFxuICAgICAgICAgICAgc3RhcnRDb3B5RnJvbVVSTE9wdGlvbnMgfSkpO1xuICAgICAgICBzdXBlcihvcGVyYXRpb24pO1xuICAgICAgICBpZiAodHlwZW9mIG9uUHJvZ3Jlc3MgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdGhpcy5vblByb2dyZXNzKG9uUHJvZ3Jlc3MpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW50ZXJ2YWxJbk1zID0gaW50ZXJ2YWxJbk1zO1xuICAgIH1cbiAgICBkZWxheSgpIHtcbiAgICAgICAgcmV0dXJuIGNvcmVVdGlsLmRlbGF5KHRoaXMuaW50ZXJ2YWxJbk1zKTtcbiAgICB9XG59XG4vKipcbiAqIE5vdGU6IEludGVudGlvbmFsbHkgdXNpbmcgZnVuY3Rpb24gZXhwcmVzc2lvbiBvdmVyIGFycm93IGZ1bmN0aW9uIGV4cHJlc3Npb25cbiAqIHNvIHRoYXQgdGhlIGZ1bmN0aW9uIGNhbiBiZSBpbnZva2VkIHdpdGggYSBkaWZmZXJlbnQgY29udGV4dC5cbiAqIFRoaXMgYWZmZWN0cyB3aGF0IGB0aGlzYCByZWZlcnMgdG8uXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGNhbmNlbCA9IGFzeW5jIGZ1bmN0aW9uIGNhbmNlbChvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgeyBjb3B5SWQgfSA9IHN0YXRlO1xuICAgIGlmIChzdGF0ZS5pc0NvbXBsZXRlZCkge1xuICAgICAgICByZXR1cm4gbWFrZUJsb2JCZWdpbkNvcHlGcm9tVVJMUG9sbE9wZXJhdGlvbihzdGF0ZSk7XG4gICAgfVxuICAgIGlmICghY29weUlkKSB7XG4gICAgICAgIHN0YXRlLmlzQ2FuY2VsbGVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIG1ha2VCbG9iQmVnaW5Db3B5RnJvbVVSTFBvbGxPcGVyYXRpb24oc3RhdGUpO1xuICAgIH1cbiAgICAvLyBpZiBhYm9ydENvcHlGcm9tVVJMIHRocm93cywgaXQgd2lsbCBidWJibGUgdXAgdG8gdXNlcidzIHBvbGxlci5jYW5jZWxPcGVyYXRpb24gY2FsbFxuICAgIGF3YWl0IHN0YXRlLmJsb2JDbGllbnQuYWJvcnRDb3B5RnJvbVVSTChjb3B5SWQsIHtcbiAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgfSk7XG4gICAgc3RhdGUuaXNDYW5jZWxsZWQgPSB0cnVlO1xuICAgIHJldHVybiBtYWtlQmxvYkJlZ2luQ29weUZyb21VUkxQb2xsT3BlcmF0aW9uKHN0YXRlKTtcbn07XG4vKipcbiAqIE5vdGU6IEludGVudGlvbmFsbHkgdXNpbmcgZnVuY3Rpb24gZXhwcmVzc2lvbiBvdmVyIGFycm93IGZ1bmN0aW9uIGV4cHJlc3Npb25cbiAqIHNvIHRoYXQgdGhlIGZ1bmN0aW9uIGNhbiBiZSBpbnZva2VkIHdpdGggYSBkaWZmZXJlbnQgY29udGV4dC5cbiAqIFRoaXMgYWZmZWN0cyB3aGF0IGB0aGlzYCByZWZlcnMgdG8uXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IHVwZGF0ZSA9IGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZShvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgeyBibG9iQ2xpZW50LCBjb3B5U291cmNlLCBzdGFydENvcHlGcm9tVVJMT3B0aW9ucyB9ID0gc3RhdGU7XG4gICAgaWYgKCFzdGF0ZS5pc1N0YXJ0ZWQpIHtcbiAgICAgICAgc3RhdGUuaXNTdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYmxvYkNsaWVudC5zdGFydENvcHlGcm9tVVJMKGNvcHlTb3VyY2UsIHN0YXJ0Q29weUZyb21VUkxPcHRpb25zKTtcbiAgICAgICAgLy8gY29weUlkIGlzIG5lZWRlZCB0byBhYm9ydFxuICAgICAgICBzdGF0ZS5jb3B5SWQgPSByZXN1bHQuY29weUlkO1xuICAgICAgICBpZiAocmVzdWx0LmNvcHlTdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgICBzdGF0ZS5yZXN1bHQgPSByZXN1bHQ7XG4gICAgICAgICAgICBzdGF0ZS5pc0NvbXBsZXRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoIXN0YXRlLmlzQ29tcGxldGVkKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzdGF0ZS5ibG9iQ2xpZW50LmdldFByb3BlcnRpZXMoeyBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCB9KTtcbiAgICAgICAgICAgIGNvbnN0IHsgY29weVN0YXR1cywgY29weVByb2dyZXNzIH0gPSByZXN1bHQ7XG4gICAgICAgICAgICBjb25zdCBwcmV2Q29weVByb2dyZXNzID0gc3RhdGUuY29weVByb2dyZXNzO1xuICAgICAgICAgICAgaWYgKGNvcHlQcm9ncmVzcykge1xuICAgICAgICAgICAgICAgIHN0YXRlLmNvcHlQcm9ncmVzcyA9IGNvcHlQcm9ncmVzcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb3B5U3RhdHVzID09PSBcInBlbmRpbmdcIiAmJlxuICAgICAgICAgICAgICAgIGNvcHlQcm9ncmVzcyAhPT0gcHJldkNvcHlQcm9ncmVzcyAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiBvcHRpb25zLmZpcmVQcm9ncmVzcyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgLy8gdHJpZ2dlciBpbiBzZXRUaW1lb3V0LCBvciBzd2FsbG93IGVycm9yP1xuICAgICAgICAgICAgICAgIG9wdGlvbnMuZmlyZVByb2dyZXNzKHN0YXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNvcHlTdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgICAgICAgc3RhdGUucmVzdWx0ID0gcmVzdWx0O1xuICAgICAgICAgICAgICAgIHN0YXRlLmlzQ29tcGxldGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNvcHlTdGF0dXMgPT09IFwiZmFpbGVkXCIpIHtcbiAgICAgICAgICAgICAgICBzdGF0ZS5lcnJvciA9IG5ldyBFcnJvcihgQmxvYiBjb3B5IGZhaWxlZCB3aXRoIHJlYXNvbjogXCIke3Jlc3VsdC5jb3B5U3RhdHVzRGVzY3JpcHRpb24gfHwgXCJ1bmtub3duXCJ9XCJgKTtcbiAgICAgICAgICAgICAgICBzdGF0ZS5pc0NvbXBsZXRlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgc3RhdGUuZXJyb3IgPSBlcnI7XG4gICAgICAgICAgICBzdGF0ZS5pc0NvbXBsZXRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1ha2VCbG9iQmVnaW5Db3B5RnJvbVVSTFBvbGxPcGVyYXRpb24oc3RhdGUpO1xufTtcbi8qKlxuICogTm90ZTogSW50ZW50aW9uYWxseSB1c2luZyBmdW5jdGlvbiBleHByZXNzaW9uIG92ZXIgYXJyb3cgZnVuY3Rpb24gZXhwcmVzc2lvblxuICogc28gdGhhdCB0aGUgZnVuY3Rpb24gY2FuIGJlIGludm9rZWQgd2l0aCBhIGRpZmZlcmVudCBjb250ZXh0LlxuICogVGhpcyBhZmZlY3RzIHdoYXQgYHRoaXNgIHJlZmVycyB0by5cbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgdG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoeyBzdGF0ZTogdGhpcy5zdGF0ZSB9LCAoa2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgICAvLyByZW1vdmUgYmxvYkNsaWVudCBmcm9tIHNlcmlhbGl6ZWQgc3RhdGUgc2luY2UgYSBjbGllbnQgY2FuJ3QgYmUgaHlkcmF0ZWQgZnJvbSB0aGlzIGluZm8uXG4gICAgICAgIGlmIChrZXkgPT09IFwiYmxvYkNsaWVudFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9KTtcbn07XG4vKipcbiAqIENyZWF0ZXMgYSBwb2xsIG9wZXJhdGlvbiBnaXZlbiB0aGUgcHJvdmlkZWQgc3RhdGUuXG4gKiBAaGlkZGVuXG4gKi9cbmZ1bmN0aW9uIG1ha2VCbG9iQmVnaW5Db3B5RnJvbVVSTFBvbGxPcGVyYXRpb24oc3RhdGUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBzdGF0ZTogT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUpLFxuICAgICAgICBjYW5jZWwsXG4gICAgICAgIHRvU3RyaW5nLFxuICAgICAgICB1cGRhdGUsXG4gICAgfTtcbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIEdlbmVyYXRlIGEgcmFuZ2Ugc3RyaW5nLiBGb3IgZXhhbXBsZTpcbiAqXG4gKiBcImJ5dGVzPTI1NS1cIiBvciBcImJ5dGVzPTAtNTExXCJcbiAqXG4gKiBAcGFyYW0gaVJhbmdlIC1cbiAqL1xuZnVuY3Rpb24gcmFuZ2VUb1N0cmluZyhpUmFuZ2UpIHtcbiAgICBpZiAoaVJhbmdlLm9mZnNldCA8IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYFJhbmdlLm9mZnNldCBjYW5ub3QgYmUgc21hbGxlciB0aGFuIDAuYCk7XG4gICAgfVxuICAgIGlmIChpUmFuZ2UuY291bnQgJiYgaVJhbmdlLmNvdW50IDw9IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYFJhbmdlLmNvdW50IG11c3QgYmUgbGFyZ2VyIHRoYW4gMC4gTGVhdmUgaXQgdW5kZWZpbmVkIGlmIHlvdSB3YW50IGEgcmFuZ2UgZnJvbSBvZmZzZXQgdG8gdGhlIGVuZC5gKTtcbiAgICB9XG4gICAgcmV0dXJuIGlSYW5nZS5jb3VudFxuICAgICAgICA/IGBieXRlcz0ke2lSYW5nZS5vZmZzZXR9LSR7aVJhbmdlLm9mZnNldCArIGlSYW5nZS5jb3VudCAtIDF9YFxuICAgICAgICA6IGBieXRlcz0ke2lSYW5nZS5vZmZzZXR9LWA7XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLy8gSW4gYnJvd3NlciwgZHVyaW5nIHdlYnBhY2sgb3IgYnJvd3NlcmlmeSBidW5kbGluZywgdGhpcyBtb2R1bGUgd2lsbCBiZSByZXBsYWNlZCBieSAnZXZlbnRzJ1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL0dvemFsYS9ldmVudHNcbi8qKlxuICogU3RhdGVzIGZvciBCYXRjaC5cbiAqL1xudmFyIEJhdGNoU3RhdGVzO1xuKGZ1bmN0aW9uIChCYXRjaFN0YXRlcykge1xuICAgIEJhdGNoU3RhdGVzW0JhdGNoU3RhdGVzW1wiR29vZFwiXSA9IDBdID0gXCJHb29kXCI7XG4gICAgQmF0Y2hTdGF0ZXNbQmF0Y2hTdGF0ZXNbXCJFcnJvclwiXSA9IDFdID0gXCJFcnJvclwiO1xufSkoQmF0Y2hTdGF0ZXMgfHwgKEJhdGNoU3RhdGVzID0ge30pKTtcbi8qKlxuICogQmF0Y2ggcHJvdmlkZXMgYmFzaWMgcGFyYWxsZWwgZXhlY3V0aW9uIHdpdGggY29uY3VycmVuY3kgbGltaXRzLlxuICogV2lsbCBzdG9wIGV4ZWN1dGUgbGVmdCBvcGVyYXRpb25zIHdoZW4gb25lIG9mIHRoZSBleGVjdXRlZCBvcGVyYXRpb24gdGhyb3dzIGFuIGVycm9yLlxuICogQnV0IEJhdGNoIGNhbm5vdCBjYW5jZWwgb25nb2luZyBvcGVyYXRpb25zLCB5b3UgbmVlZCB0byBjYW5jZWwgdGhlbSBieSB5b3Vyc2VsZi5cbiAqL1xuY2xhc3MgQmF0Y2gge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgQmF0Y2guXG4gICAgICogQHBhcmFtIGNvbmN1cnJlbmN5IC1cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcihjb25jdXJyZW5jeSA9IDUpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIE51bWJlciBvZiBhY3RpdmUgb3BlcmF0aW9ucyB1bmRlciBleGVjdXRpb24uXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmFjdGl2ZXMgPSAwO1xuICAgICAgICAvKipcbiAgICAgICAgICogTnVtYmVyIG9mIGNvbXBsZXRlZCBvcGVyYXRpb25zIHVuZGVyIGV4ZWN1dGlvbi5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY29tcGxldGVkID0gMDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIE9mZnNldCBvZiBuZXh0IG9wZXJhdGlvbiB0byBiZSBleGVjdXRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMub2Zmc2V0ID0gMDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIE9wZXJhdGlvbiBhcnJheSB0byBiZSBleGVjdXRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMub3BlcmF0aW9ucyA9IFtdO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3RhdGVzIG9mIEJhdGNoLiBXaGVuIGFuIGVycm9yIGhhcHBlbnMsIHN0YXRlIHdpbGwgdHVybiBpbnRvIGVycm9yLlxuICAgICAgICAgKiBCYXRjaCB3aWxsIHN0b3AgZXhlY3V0ZSBsZWZ0IG9wZXJhdGlvbnMuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnN0YXRlID0gQmF0Y2hTdGF0ZXMuR29vZDtcbiAgICAgICAgaWYgKGNvbmN1cnJlbmN5IDwgMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJjb25jdXJyZW5jeSBtdXN0IGJlIGxhcmdlciB0aGFuIDBcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb25jdXJyZW5jeSA9IGNvbmN1cnJlbmN5O1xuICAgICAgICB0aGlzLmVtaXR0ZXIgPSBuZXcgZXZlbnRzLkV2ZW50RW1pdHRlcigpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGQgYSBvcGVyYXRpb24gaW50byBxdWV1ZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcGVyYXRpb24gLVxuICAgICAqL1xuICAgIGFkZE9wZXJhdGlvbihvcGVyYXRpb24pIHtcbiAgICAgICAgdGhpcy5vcGVyYXRpb25zLnB1c2goYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZXMrKztcbiAgICAgICAgICAgICAgICBhd2FpdCBvcGVyYXRpb24oKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZXMtLTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbXBsZXRlZCsrO1xuICAgICAgICAgICAgICAgIHRoaXMucGFyYWxsZWxFeGVjdXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdChcImVycm9yXCIsIGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN0YXJ0IGV4ZWN1dGUgb3BlcmF0aW9ucyBpbiB0aGUgcXVldWUuXG4gICAgICpcbiAgICAgKi9cbiAgICBhc3luYyBkbygpIHtcbiAgICAgICAgaWYgKHRoaXMub3BlcmF0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBhcmFsbGVsRXhlY3V0ZSgpO1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLm9uKFwiZmluaXNoXCIsIHJlc29sdmUpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLm9uKFwiZXJyb3JcIiwgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IEJhdGNoU3RhdGVzLkVycm9yO1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCBuZXh0IG9wZXJhdGlvbiB0byBiZSBleGVjdXRlZC4gUmV0dXJuIG51bGwgd2hlbiByZWFjaGluZyBlbmRzLlxuICAgICAqXG4gICAgICovXG4gICAgbmV4dE9wZXJhdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMub2Zmc2V0IDwgdGhpcy5vcGVyYXRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMub3BlcmF0aW9uc1t0aGlzLm9mZnNldCsrXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3RhcnQgZXhlY3V0ZSBvcGVyYXRpb25zLiBPbmUgb25lIHRoZSBtb3N0IGltcG9ydGFudCBkaWZmZXJlbmNlIGJldHdlZW5cbiAgICAgKiB0aGlzIG1ldGhvZCB3aXRoIGRvKCkgaXMgdGhhdCBkbygpIHdyYXBzIGFzIGFuIHN5bmMgbWV0aG9kLlxuICAgICAqXG4gICAgICovXG4gICAgcGFyYWxsZWxFeGVjdXRlKCkge1xuICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gQmF0Y2hTdGF0ZXMuRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jb21wbGV0ZWQgPj0gdGhpcy5vcGVyYXRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoXCJmaW5pc2hcIik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKHRoaXMuYWN0aXZlcyA8IHRoaXMuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wZXJhdGlvbiA9IHRoaXMubmV4dE9wZXJhdGlvbigpO1xuICAgICAgICAgICAgaWYgKG9wZXJhdGlvbikge1xuICAgICAgICAgICAgICAgIG9wZXJhdGlvbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogVGhpcyBjbGFzcyBnZW5lcmF0ZXMgYSByZWFkYWJsZSBzdHJlYW0gZnJvbSB0aGUgZGF0YSBpbiBhbiBhcnJheSBvZiBidWZmZXJzLlxuICovXG5jbGFzcyBCdWZmZXJzU3RyZWFtIGV4dGVuZHMgc3RyZWFtLlJlYWRhYmxlIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIEJ1ZmZlcnNTdHJlYW0gdGhhdCB3aWxsIGVtaXQgdGhlIGRhdGFcbiAgICAgKiBjb250YWluZWQgaW4gdGhlIGFycmF5IG9mIGJ1ZmZlcnMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYnVmZmVycyAtIEFycmF5IG9mIGJ1ZmZlcnMgY29udGFpbmluZyB0aGUgZGF0YVxuICAgICAqIEBwYXJhbSBieXRlTGVuZ3RoIC0gVGhlIHRvdGFsIGxlbmd0aCBvZiBkYXRhIGNvbnRhaW5lZCBpbiB0aGUgYnVmZmVyc1xuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGJ1ZmZlcnMsIGJ5dGVMZW5ndGgsIG9wdGlvbnMpIHtcbiAgICAgICAgc3VwZXIob3B0aW9ucyk7XG4gICAgICAgIHRoaXMuYnVmZmVycyA9IGJ1ZmZlcnM7XG4gICAgICAgIHRoaXMuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGg7XG4gICAgICAgIHRoaXMuYnl0ZU9mZnNldEluQ3VycmVudEJ1ZmZlciA9IDA7XG4gICAgICAgIHRoaXMuYnVmZmVySW5kZXggPSAwO1xuICAgICAgICB0aGlzLnB1c2hlZEJ5dGVzTGVuZ3RoID0gMDtcbiAgICAgICAgLy8gY2hlY2sgYnl0ZUxlbmd0aCBpcyBubyBsYXJnZXIgdGhhbiBidWZmZXJzW10gdG90YWwgbGVuZ3RoXG4gICAgICAgIGxldCBidWZmZXJzTGVuZ3RoID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBidWYgb2YgdGhpcy5idWZmZXJzKSB7XG4gICAgICAgICAgICBidWZmZXJzTGVuZ3RoICs9IGJ1Zi5ieXRlTGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIGlmIChidWZmZXJzTGVuZ3RoIDwgdGhpcy5ieXRlTGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEYXRhIHNpemUgc2hvdWxkbid0IGJlIGxhcmdlciB0aGFuIHRoZSB0b3RhbCBsZW5ndGggb2YgYnVmZmVycy5cIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgX3JlYWQoKSB0aGF0IHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIHN0cmVhbSB3YW50cyB0byBwdWxsIG1vcmUgZGF0YSBpbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzaXplIC0gT3B0aW9uYWwuIFRoZSBzaXplIG9mIGRhdGEgdG8gYmUgcmVhZFxuICAgICAqL1xuICAgIF9yZWFkKHNpemUpIHtcbiAgICAgICAgaWYgKHRoaXMucHVzaGVkQnl0ZXNMZW5ndGggPj0gdGhpcy5ieXRlTGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnB1c2gobnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzaXplKSB7XG4gICAgICAgICAgICBzaXplID0gdGhpcy5yZWFkYWJsZUhpZ2hXYXRlck1hcms7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3V0QnVmZmVycyA9IFtdO1xuICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgIHdoaWxlIChpIDwgc2l6ZSAmJiB0aGlzLnB1c2hlZEJ5dGVzTGVuZ3RoIDwgdGhpcy5ieXRlTGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBUaGUgbGFzdCBidWZmZXIgbWF5IGJlIGxvbmdlciB0aGFuIHRoZSBkYXRhIGl0IGNvbnRhaW5zLlxuICAgICAgICAgICAgY29uc3QgcmVtYWluaW5nRGF0YUluQWxsQnVmZmVycyA9IHRoaXMuYnl0ZUxlbmd0aCAtIHRoaXMucHVzaGVkQnl0ZXNMZW5ndGg7XG4gICAgICAgICAgICBjb25zdCByZW1haW5pbmdDYXBhY2l0eUluVGhpc0J1ZmZlciA9IHRoaXMuYnVmZmVyc1t0aGlzLmJ1ZmZlckluZGV4XS5ieXRlTGVuZ3RoIC0gdGhpcy5ieXRlT2Zmc2V0SW5DdXJyZW50QnVmZmVyO1xuICAgICAgICAgICAgY29uc3QgcmVtYWluaW5nID0gTWF0aC5taW4ocmVtYWluaW5nQ2FwYWNpdHlJblRoaXNCdWZmZXIsIHJlbWFpbmluZ0RhdGFJbkFsbEJ1ZmZlcnMpO1xuICAgICAgICAgICAgaWYgKHJlbWFpbmluZyA+IHNpemUgLSBpKSB7XG4gICAgICAgICAgICAgICAgLy8gY2h1bmtTaXplID0gc2l6ZSAtIGlcbiAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSB0aGlzLmJ5dGVPZmZzZXRJbkN1cnJlbnRCdWZmZXIgKyBzaXplIC0gaTtcbiAgICAgICAgICAgICAgICBvdXRCdWZmZXJzLnB1c2godGhpcy5idWZmZXJzW3RoaXMuYnVmZmVySW5kZXhdLnNsaWNlKHRoaXMuYnl0ZU9mZnNldEluQ3VycmVudEJ1ZmZlciwgZW5kKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5wdXNoZWRCeXRlc0xlbmd0aCArPSBzaXplIC0gaTtcbiAgICAgICAgICAgICAgICB0aGlzLmJ5dGVPZmZzZXRJbkN1cnJlbnRCdWZmZXIgPSBlbmQ7XG4gICAgICAgICAgICAgICAgaSA9IHNpemU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBjaHVua1NpemUgPSByZW1haW5pbmdcbiAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSB0aGlzLmJ5dGVPZmZzZXRJbkN1cnJlbnRCdWZmZXIgKyByZW1haW5pbmc7XG4gICAgICAgICAgICAgICAgb3V0QnVmZmVycy5wdXNoKHRoaXMuYnVmZmVyc1t0aGlzLmJ1ZmZlckluZGV4XS5zbGljZSh0aGlzLmJ5dGVPZmZzZXRJbkN1cnJlbnRCdWZmZXIsIGVuZCkpO1xuICAgICAgICAgICAgICAgIGlmIChyZW1haW5pbmcgPT09IHJlbWFpbmluZ0NhcGFjaXR5SW5UaGlzQnVmZmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuYnVmZmVyc1t0aGlzLmJ1ZmZlckluZGV4XSB1c2VkIHVwLCBzaGlmdCB0byBuZXh0IG9uZVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ5dGVPZmZzZXRJbkN1cnJlbnRCdWZmZXIgPSAwO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlckluZGV4Kys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ5dGVPZmZzZXRJbkN1cnJlbnRCdWZmZXIgPSBlbmQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMucHVzaGVkQnl0ZXNMZW5ndGggKz0gcmVtYWluaW5nO1xuICAgICAgICAgICAgICAgIGkgKz0gcmVtYWluaW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChvdXRCdWZmZXJzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHRoaXMucHVzaChCdWZmZXIuY29uY2F0KG91dEJ1ZmZlcnMpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChvdXRCdWZmZXJzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgdGhpcy5wdXNoKG91dEJ1ZmZlcnNbMF0pO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbmNvbnN0IG1heEJ1ZmZlckxlbmd0aCA9IGJ1ZmZlci5jb25zdGFudHMuTUFYX0xFTkdUSDtcbi8qKlxuICogVGhpcyBjbGFzcyBwcm92aWRlcyBhIGJ1ZmZlciBjb250YWluZXIgd2hpY2ggY29uY2VwdHVhbGx5IGhhcyBubyBoYXJkIHNpemUgbGltaXQuXG4gKiBJdCBhY2NlcHRzIGEgY2FwYWNpdHksIGFuIGFycmF5IG9mIGlucHV0IGJ1ZmZlcnMgYW5kIHRoZSB0b3RhbCBsZW5ndGggb2YgaW5wdXQgZGF0YS5cbiAqIEl0IHdpbGwgYWxsb2NhdGUgYW4gaW50ZXJuYWwgXCJidWZmZXJcIiBvZiB0aGUgY2FwYWNpdHkgYW5kIGZpbGwgdGhlIGRhdGEgaW4gdGhlIGlucHV0IGJ1ZmZlcnNcbiAqIGludG8gdGhlIGludGVybmFsIFwiYnVmZmVyXCIgc2VyaWFsbHkgd2l0aCByZXNwZWN0IHRvIHRoZSB0b3RhbCBsZW5ndGguXG4gKiBUaGVuIGJ5IGNhbGxpbmcgUG9vbGVkQnVmZmVyLmdldFJlYWRhYmxlU3RyZWFtKCksIHlvdSBjYW4gZ2V0IGEgcmVhZGFibGUgc3RyZWFtXG4gKiBhc3NlbWJsZWQgZnJvbSBhbGwgdGhlIGRhdGEgaW4gdGhlIGludGVybmFsIFwiYnVmZmVyXCIuXG4gKi9cbmNsYXNzIFBvb2xlZEJ1ZmZlciB7XG4gICAgLyoqXG4gICAgICogVGhlIHNpemUgb2YgdGhlIGRhdGEgY29udGFpbmVkIGluIHRoZSBwb29sZWQgYnVmZmVycy5cbiAgICAgKi9cbiAgICBnZXQgc2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpemU7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKGNhcGFjaXR5LCBidWZmZXJzLCB0b3RhbExlbmd0aCkge1xuICAgICAgICAvKipcbiAgICAgICAgICogSW50ZXJuYWwgYnVmZmVycyB1c2VkIHRvIGtlZXAgdGhlIGRhdGEuXG4gICAgICAgICAqIEVhY2ggYnVmZmVyIGhhcyBhIGxlbmd0aCBvZiB0aGUgbWF4QnVmZmVyTGVuZ3RoIGV4Y2VwdCBsYXN0IG9uZS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuYnVmZmVycyA9IFtdO1xuICAgICAgICB0aGlzLmNhcGFjaXR5ID0gY2FwYWNpdHk7XG4gICAgICAgIHRoaXMuX3NpemUgPSAwO1xuICAgICAgICAvLyBhbGxvY2F0ZVxuICAgICAgICBjb25zdCBidWZmZXJOdW0gPSBNYXRoLmNlaWwoY2FwYWNpdHkgLyBtYXhCdWZmZXJMZW5ndGgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1ZmZlck51bTsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgbGVuID0gaSA9PT0gYnVmZmVyTnVtIC0gMSA/IGNhcGFjaXR5ICUgbWF4QnVmZmVyTGVuZ3RoIDogbWF4QnVmZmVyTGVuZ3RoO1xuICAgICAgICAgICAgaWYgKGxlbiA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGxlbiA9IG1heEJ1ZmZlckxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYnVmZmVycy5wdXNoKEJ1ZmZlci5hbGxvY1Vuc2FmZShsZW4pKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYnVmZmVycykge1xuICAgICAgICAgICAgdGhpcy5maWxsKGJ1ZmZlcnMsIHRvdGFsTGVuZ3RoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBGaWxsIHRoZSBpbnRlcm5hbCBidWZmZXJzIHdpdGggZGF0YSBpbiB0aGUgaW5wdXQgYnVmZmVycyBzZXJpYWxseVxuICAgICAqIHdpdGggcmVzcGVjdCB0byB0aGUgdG90YWwgbGVuZ3RoIGFuZCB0aGUgdG90YWwgY2FwYWNpdHkgb2YgdGhlIGludGVybmFsIGJ1ZmZlcnMuXG4gICAgICogRGF0YSBjb3BpZWQgd2lsbCBiZSBzaGlmdCBvdXQgb2YgdGhlIGlucHV0IGJ1ZmZlcnMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYnVmZmVycyAtIElucHV0IGJ1ZmZlcnMgY29udGFpbmluZyB0aGUgZGF0YSB0byBiZSBmaWxsZWQgaW4gdGhlIHBvb2xlZCBidWZmZXJcbiAgICAgKiBAcGFyYW0gdG90YWxMZW5ndGggLSBUb3RhbCBsZW5ndGggb2YgdGhlIGRhdGEgdG8gYmUgZmlsbGVkIGluLlxuICAgICAqXG4gICAgICovXG4gICAgZmlsbChidWZmZXJzLCB0b3RhbExlbmd0aCkge1xuICAgICAgICB0aGlzLl9zaXplID0gTWF0aC5taW4odGhpcy5jYXBhY2l0eSwgdG90YWxMZW5ndGgpO1xuICAgICAgICBsZXQgaSA9IDAsIGogPSAwLCB0YXJnZXRPZmZzZXQgPSAwLCBzb3VyY2VPZmZzZXQgPSAwLCB0b3RhbENvcGllZE51bSA9IDA7XG4gICAgICAgIHdoaWxlICh0b3RhbENvcGllZE51bSA8IHRoaXMuX3NpemUpIHtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IGJ1ZmZlcnNbaV07XG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLmJ1ZmZlcnNbal07XG4gICAgICAgICAgICBjb25zdCBjb3BpZWROdW0gPSBzb3VyY2UuY29weSh0YXJnZXQsIHRhcmdldE9mZnNldCwgc291cmNlT2Zmc2V0KTtcbiAgICAgICAgICAgIHRvdGFsQ29waWVkTnVtICs9IGNvcGllZE51bTtcbiAgICAgICAgICAgIHNvdXJjZU9mZnNldCArPSBjb3BpZWROdW07XG4gICAgICAgICAgICB0YXJnZXRPZmZzZXQgKz0gY29waWVkTnVtO1xuICAgICAgICAgICAgaWYgKHNvdXJjZU9mZnNldCA9PT0gc291cmNlLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICBzb3VyY2VPZmZzZXQgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRhcmdldE9mZnNldCA9PT0gdGFyZ2V0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGorKztcbiAgICAgICAgICAgICAgICB0YXJnZXRPZmZzZXQgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGNsZWFyIGNvcGllZCBmcm9tIHNvdXJjZSBidWZmZXJzXG4gICAgICAgIGJ1ZmZlcnMuc3BsaWNlKDAsIGkpO1xuICAgICAgICBpZiAoYnVmZmVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBidWZmZXJzWzBdID0gYnVmZmVyc1swXS5zbGljZShzb3VyY2VPZmZzZXQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgcmVhZGFibGUgc3RyZWFtIGFzc2VtYmxlZCBmcm9tIGFsbCB0aGUgZGF0YSBpbiB0aGUgaW50ZXJuYWwgYnVmZmVycy5cbiAgICAgKlxuICAgICAqL1xuICAgIGdldFJlYWRhYmxlU3RyZWFtKCkge1xuICAgICAgICByZXR1cm4gbmV3IEJ1ZmZlcnNTdHJlYW0odGhpcy5idWZmZXJzLCB0aGlzLnNpemUpO1xuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIFRoaXMgY2xhc3MgYWNjZXB0cyBhIE5vZGUuanMgUmVhZGFibGUgc3RyZWFtIGFzIGlucHV0LCBhbmQga2VlcHMgcmVhZGluZyBkYXRhXG4gKiBmcm9tIHRoZSBzdHJlYW0gaW50byB0aGUgaW50ZXJuYWwgYnVmZmVyIHN0cnVjdHVyZSwgdW50aWwgaXQgcmVhY2hlcyBtYXhCdWZmZXJzLlxuICogRXZlcnkgYXZhaWxhYmxlIGJ1ZmZlciB3aWxsIHRyeSB0byB0cmlnZ2VyIG91dGdvaW5nSGFuZGxlci5cbiAqXG4gKiBUaGUgaW50ZXJuYWwgYnVmZmVyIHN0cnVjdHVyZSBpbmNsdWRlcyBhbiBpbmNvbWluZyBidWZmZXIgYXJyYXksIGFuZCBhIG91dGdvaW5nXG4gKiBidWZmZXIgYXJyYXkuIFRoZSBpbmNvbWluZyBidWZmZXIgYXJyYXkgaW5jbHVkZXMgdGhlIFwiZW1wdHlcIiBidWZmZXJzIGNhbiBiZSBmaWxsZWRcbiAqIHdpdGggbmV3IGluY29taW5nIGRhdGEuIFRoZSBvdXRnb2luZyBhcnJheSBpbmNsdWRlcyB0aGUgZmlsbGVkIGJ1ZmZlcnMgdG8gYmVcbiAqIGhhbmRsZWQgYnkgb3V0Z29pbmdIYW5kbGVyLiBFdmVyeSBhYm92ZSBidWZmZXIgc2l6ZSBpcyBkZWZpbmVkIGJ5IHBhcmFtZXRlciBidWZmZXJTaXplLlxuICpcbiAqIE5VTV9PRl9BTExfQlVGRkVSUyA9IEJVRkZFUlNfSU5fSU5DT01JTkcgKyBCVUZGRVJTX0lOX09VVEdPSU5HICsgQlVGRkVSU19VTkRFUl9IQU5ETElOR1xuICpcbiAqIE5VTV9PRl9BTExfQlVGRkVSUyBsZXNzZXIgdGhhbiBvciBlcXVhbCB0byBtYXhCdWZmZXJzXG4gKlxuICogUEVSRk9STUFOQ0UgSU1QUk9WRU1FTlQgVElQUzpcbiAqIDEuIElucHV0IHN0cmVhbSBoaWdoV2F0ZXJNYXJrIGlzIGJldHRlciB0byBzZXQgYSBzYW1lIHZhbHVlIHdpdGggYnVmZmVyU2l6ZVxuICogICAgcGFyYW1ldGVyLCB3aGljaCB3aWxsIGF2b2lkIEJ1ZmZlci5jb25jYXQoKSBvcGVyYXRpb25zLlxuICogMi4gY29uY3VycmVuY3kgc2hvdWxkIHNldCBhIHNtYWxsZXIgdmFsdWUgdGhhbiBtYXhCdWZmZXJzLCB3aGljaCBpcyBoZWxwZnVsIHRvXG4gKiAgICByZWR1Y2UgdGhlIHBvc3NpYmlsaXR5IHdoZW4gYSBvdXRnb2luZyBoYW5kbGVyIHdhaXRzIGZvciB0aGUgc3RyZWFtIGRhdGEuXG4gKiAgICBpbiB0aGlzIHNpdHVhdGlvbiwgb3V0Z29pbmcgaGFuZGxlcnMgYXJlIGJsb2NrZWQuXG4gKiAgICBPdXRnb2luZyBxdWV1ZSBzaG91bGRuJ3QgYmUgZW1wdHkuXG4gKi9cbmNsYXNzIEJ1ZmZlclNjaGVkdWxlciB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBCdWZmZXJTY2hlZHVsZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVhZGFibGUgLSBBIE5vZGUuanMgUmVhZGFibGUgc3RyZWFtXG4gICAgICogQHBhcmFtIGJ1ZmZlclNpemUgLSBCdWZmZXIgc2l6ZSBvZiBldmVyeSBtYWludGFpbmVkIGJ1ZmZlclxuICAgICAqIEBwYXJhbSBtYXhCdWZmZXJzIC0gSG93IG1hbnkgYnVmZmVycyBjYW4gYmUgYWxsb2NhdGVkXG4gICAgICogQHBhcmFtIG91dGdvaW5nSGFuZGxlciAtIEFuIGFzeW5jIGZ1bmN0aW9uIHNjaGVkdWxlZCB0byBiZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcmVkIHdoZW4gYSBidWZmZXIgZnVsbHkgZmlsbGVkXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHN0cmVhbSBkYXRhXG4gICAgICogQHBhcmFtIGNvbmN1cnJlbmN5IC0gQ29uY3VycmVuY3kgb2YgZXhlY3V0aW5nIG91dGdvaW5nSGFuZGxlcnMgKD4wKVxuICAgICAqIEBwYXJhbSBlbmNvZGluZyAtIFtPcHRpb25hbF0gRW5jb2Rpbmcgb2YgUmVhZGFibGUgc3RyZWFtIHdoZW4gaXQncyBhIHN0cmluZyBzdHJlYW1cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihyZWFkYWJsZSwgYnVmZmVyU2l6ZSwgbWF4QnVmZmVycywgb3V0Z29pbmdIYW5kbGVyLCBjb25jdXJyZW5jeSwgZW5jb2RpbmcpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFuIGludGVybmFsIGV2ZW50IGVtaXR0ZXIuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmVtaXR0ZXIgPSBuZXcgZXZlbnRzLkV2ZW50RW1pdHRlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogQW4gaW50ZXJuYWwgb2Zmc2V0IG1hcmtlciB0byB0cmFjayBkYXRhIG9mZnNldCBpbiBieXRlcyBvZiBuZXh0IG91dGdvaW5nSGFuZGxlci5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMub2Zmc2V0ID0gMDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFuIGludGVybmFsIG1hcmtlciB0byB0cmFjayB3aGV0aGVyIHN0cmVhbSBpcyBlbmQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmlzU3RyZWFtRW5kID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBbiBpbnRlcm5hbCBtYXJrZXIgdG8gdHJhY2sgd2hldGhlciBzdHJlYW0gb3Igb3V0Z29pbmdIYW5kbGVyIHJldHVybnMgZXJyb3IuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmlzRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEhvdyBtYW55IGhhbmRsZXJzIGFyZSBleGVjdXRpbmcuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmV4ZWN1dGluZ091dGdvaW5nSGFuZGxlcnMgPSAwO1xuICAgICAgICAvKipcbiAgICAgICAgICogSG93IG1hbnkgYnVmZmVycyBoYXZlIGJlZW4gYWxsb2NhdGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5udW1CdWZmZXJzID0gMDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEJlY2F1c2UgdGhpcyBjbGFzcyBkb2Vzbid0IGtub3cgaG93IG11Y2ggZGF0YSBldmVyeSB0aW1lIHN0cmVhbSBwb3BzLCB3aGljaFxuICAgICAgICAgKiBpcyBkZWZpbmVkIGJ5IGhpZ2hXYXRlck1hcmtlciBvZiB0aGUgc3RyZWFtLiBTbyBCdWZmZXJTY2hlZHVsZXIgd2lsbCBjYWNoZVxuICAgICAgICAgKiBkYXRhIHJlY2VpdmVkIGZyb20gdGhlIHN0cmVhbSwgd2hlbiBkYXRhIGluIHVucmVzb2x2ZWREYXRhQXJyYXkgZXhjZWVkcyB0aGVcbiAgICAgICAgICogYmxvY2tTaXplIGRlZmluZWQsIGl0IHdpbGwgdHJ5IHRvIGNvbmNhdCBhIGJsb2NrU2l6ZSBvZiBidWZmZXIsIGZpbGwgaW50byBhdmFpbGFibGVcbiAgICAgICAgICogYnVmZmVycyBmcm9tIGluY29taW5nIGFuZCBwdXNoIHRvIG91dGdvaW5nIGFycmF5LlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy51bnJlc29sdmVkRGF0YUFycmF5ID0gW107XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBIb3cgbXVjaCBkYXRhIGNvbnNpc3RlZCBpbiB1bnJlc29sdmVkRGF0YUFycmF5LlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy51bnJlc29sdmVkTGVuZ3RoID0gMDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBhcnJheSBpbmNsdWRlcyBhbGwgdGhlIGF2YWlsYWJsZSBidWZmZXJzIGNhbiBiZSB1c2VkIHRvIGZpbGwgZGF0YSBmcm9tIHN0cmVhbS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuaW5jb21pbmcgPSBbXTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBhcnJheSAocXVldWUpIGluY2x1ZGVzIGFsbCB0aGUgYnVmZmVycyBmaWxsZWQgZnJvbSBzdHJlYW0gZGF0YS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMub3V0Z29pbmcgPSBbXTtcbiAgICAgICAgaWYgKGJ1ZmZlclNpemUgPD0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYGJ1ZmZlclNpemUgbXVzdCBiZSBsYXJnZXIgdGhhbiAwLCBjdXJyZW50IGlzICR7YnVmZmVyU2l6ZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF4QnVmZmVycyA8PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgbWF4QnVmZmVycyBtdXN0IGJlIGxhcmdlciB0aGFuIDAsIGN1cnJlbnQgaXMgJHttYXhCdWZmZXJzfWApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb25jdXJyZW5jeSA8PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgY29uY3VycmVuY3kgbXVzdCBiZSBsYXJnZXIgdGhhbiAwLCBjdXJyZW50IGlzICR7Y29uY3VycmVuY3l9YCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5idWZmZXJTaXplID0gYnVmZmVyU2l6ZTtcbiAgICAgICAgdGhpcy5tYXhCdWZmZXJzID0gbWF4QnVmZmVycztcbiAgICAgICAgdGhpcy5yZWFkYWJsZSA9IHJlYWRhYmxlO1xuICAgICAgICB0aGlzLm91dGdvaW5nSGFuZGxlciA9IG91dGdvaW5nSGFuZGxlcjtcbiAgICAgICAgdGhpcy5jb25jdXJyZW5jeSA9IGNvbmN1cnJlbmN5O1xuICAgICAgICB0aGlzLmVuY29kaW5nID0gZW5jb2Rpbmc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN0YXJ0IHRoZSBzY2hlZHVsZXIsIHdpbGwgcmV0dXJuIGVycm9yIHdoZW4gc3RyZWFtIG9mIGFueSBvZiB0aGUgb3V0Z29pbmdIYW5kbGVyc1xuICAgICAqIHJldHVybnMgZXJyb3IuXG4gICAgICpcbiAgICAgKi9cbiAgICBhc3luYyBkbygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVhZGFibGUub24oXCJkYXRhXCIsIChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiID8gQnVmZmVyLmZyb20oZGF0YSwgdGhpcy5lbmNvZGluZykgOiBkYXRhO1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kVW5yZXNvbHZlZERhdGEoZGF0YSk7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnJlc29sdmVEYXRhKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWFkYWJsZS5wYXVzZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5yZWFkYWJsZS5vbihcImVycm9yXCIsIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdChcImVycm9yXCIsIGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMucmVhZGFibGUub24oXCJlbmRcIiwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNTdHJlYW1FbmQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KFwiY2hlY2tFbmRcIik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5vbihcImVycm9yXCIsIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzRXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMucmVhZGFibGUucGF1c2UoKTtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLm9uKFwiY2hlY2tFbmRcIiwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm91dGdvaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyT3V0Z29pbmdIYW5kbGVycygpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzU3RyZWFtRW5kICYmIHRoaXMuZXhlY3V0aW5nT3V0Z29pbmdIYW5kbGVycyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy51bnJlc29sdmVkTGVuZ3RoID4gMCAmJiB0aGlzLnVucmVzb2x2ZWRMZW5ndGggPCB0aGlzLmJ1ZmZlclNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ1ZmZlciA9IHRoaXMuc2hpZnRCdWZmZXJGcm9tVW5yZXNvbHZlZERhdGFBcnJheSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vdXRnb2luZ0hhbmRsZXIoKCkgPT4gYnVmZmVyLmdldFJlYWRhYmxlU3RyZWFtKCksIGJ1ZmZlci5zaXplLCB0aGlzLm9mZnNldClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbihyZXNvbHZlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jYXRjaChyZWplY3QpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMudW5yZXNvbHZlZExlbmd0aCA+PSB0aGlzLmJ1ZmZlclNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSW5zZXJ0IGEgbmV3IGRhdGEgaW50byB1bnJlc29sdmVkIGFycmF5LlxuICAgICAqXG4gICAgICogQHBhcmFtIGRhdGEgLVxuICAgICAqL1xuICAgIGFwcGVuZFVucmVzb2x2ZWREYXRhKGRhdGEpIHtcbiAgICAgICAgdGhpcy51bnJlc29sdmVkRGF0YUFycmF5LnB1c2goZGF0YSk7XG4gICAgICAgIHRoaXMudW5yZXNvbHZlZExlbmd0aCArPSBkYXRhLmxlbmd0aDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVHJ5IHRvIHNoaWZ0IGEgYnVmZmVyIHdpdGggc2l6ZSBpbiBibG9ja1NpemUuIFRoZSBidWZmZXIgcmV0dXJuZWQgbWF5IGJlIGxlc3NcbiAgICAgKiB0aGFuIGJsb2NrU2l6ZSB3aGVuIGRhdGEgaW4gdW5yZXNvbHZlZERhdGFBcnJheSBpcyBsZXNzIHRoYW4gYnVmZmVyU2l6ZS5cbiAgICAgKlxuICAgICAqL1xuICAgIHNoaWZ0QnVmZmVyRnJvbVVucmVzb2x2ZWREYXRhQXJyYXkoYnVmZmVyKSB7XG4gICAgICAgIGlmICghYnVmZmVyKSB7XG4gICAgICAgICAgICBidWZmZXIgPSBuZXcgUG9vbGVkQnVmZmVyKHRoaXMuYnVmZmVyU2l6ZSwgdGhpcy51bnJlc29sdmVkRGF0YUFycmF5LCB0aGlzLnVucmVzb2x2ZWRMZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYnVmZmVyLmZpbGwodGhpcy51bnJlc29sdmVkRGF0YUFycmF5LCB0aGlzLnVucmVzb2x2ZWRMZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudW5yZXNvbHZlZExlbmd0aCAtPSBidWZmZXIuc2l6ZTtcbiAgICAgICAgcmV0dXJuIGJ1ZmZlcjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVzb2x2ZSBkYXRhIGluIHVucmVzb2x2ZWREYXRhQXJyYXkuIEZvciBldmVyeSBidWZmZXIgd2l0aCBzaXplIGluIGJsb2NrU2l6ZVxuICAgICAqIHNoaWZ0ZWQsIGl0IHdpbGwgdHJ5IHRvIGdldCAob3IgYWxsb2NhdGUgYSBidWZmZXIpIGZyb20gaW5jb21pbmcsIGFuZCBmaWxsIGl0LFxuICAgICAqIHRoZW4gcHVzaCBpdCBpbnRvIG91dGdvaW5nIHRvIGJlIGhhbmRsZWQgYnkgb3V0Z29pbmcgaGFuZGxlci5cbiAgICAgKlxuICAgICAqIFJldHVybiBmYWxzZSB3aGVuIGF2YWlsYWJsZSBidWZmZXJzIGluIGluY29taW5nIGFyZSBub3QgZW5vdWdoLCBlbHNlIHRydWUuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBSZXR1cm4gZmFsc2Ugd2hlbiBidWZmZXJzIGluIGluY29taW5nIGFyZSBub3QgZW5vdWdoLCBlbHNlIHRydWUuXG4gICAgICovXG4gICAgcmVzb2x2ZURhdGEoKSB7XG4gICAgICAgIHdoaWxlICh0aGlzLnVucmVzb2x2ZWRMZW5ndGggPj0gdGhpcy5idWZmZXJTaXplKSB7XG4gICAgICAgICAgICBsZXQgYnVmZmVyO1xuICAgICAgICAgICAgaWYgKHRoaXMuaW5jb21pbmcubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGJ1ZmZlciA9IHRoaXMuaW5jb21pbmcuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNoaWZ0QnVmZmVyRnJvbVVucmVzb2x2ZWREYXRhQXJyYXkoYnVmZmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm51bUJ1ZmZlcnMgPCB0aGlzLm1heEJ1ZmZlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgYnVmZmVyID0gdGhpcy5zaGlmdEJ1ZmZlckZyb21VbnJlc29sdmVkRGF0YUFycmF5KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubnVtQnVmZmVycysrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gTm8gYXZhaWxhYmxlIGJ1ZmZlciwgd2FpdCBmb3IgYnVmZmVyIHJldHVybmVkXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm91dGdvaW5nLnB1c2goYnVmZmVyKTtcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlck91dGdvaW5nSGFuZGxlcnMoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVHJ5IHRvIHRyaWdnZXIgYSBvdXRnb2luZyBoYW5kbGVyIGZvciBldmVyeSBidWZmZXIgaW4gb3V0Z29pbmcuIFN0b3Agd2hlblxuICAgICAqIGNvbmN1cnJlbmN5IHJlYWNoZXMuXG4gICAgICovXG4gICAgYXN5bmMgdHJpZ2dlck91dGdvaW5nSGFuZGxlcnMoKSB7XG4gICAgICAgIGxldCBidWZmZXI7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmV4ZWN1dGluZ091dGdvaW5nSGFuZGxlcnMgPj0gdGhpcy5jb25jdXJyZW5jeSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJ1ZmZlciA9IHRoaXMub3V0Z29pbmcuc2hpZnQoKTtcbiAgICAgICAgICAgIGlmIChidWZmZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXJPdXRnb2luZ0hhbmRsZXIoYnVmZmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSB3aGlsZSAoYnVmZmVyKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVHJpZ2dlciBhIG91dGdvaW5nIGhhbmRsZXIgZm9yIGEgYnVmZmVyIHNoaWZ0ZWQgZnJvbSBvdXRnb2luZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBidWZmZXIgLVxuICAgICAqL1xuICAgIGFzeW5jIHRyaWdnZXJPdXRnb2luZ0hhbmRsZXIoYnVmZmVyKSB7XG4gICAgICAgIGNvbnN0IGJ1ZmZlckxlbmd0aCA9IGJ1ZmZlci5zaXplO1xuICAgICAgICB0aGlzLmV4ZWN1dGluZ091dGdvaW5nSGFuZGxlcnMrKztcbiAgICAgICAgdGhpcy5vZmZzZXQgKz0gYnVmZmVyTGVuZ3RoO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5vdXRnb2luZ0hhbmRsZXIoKCkgPT4gYnVmZmVyLmdldFJlYWRhYmxlU3RyZWFtKCksIGJ1ZmZlckxlbmd0aCwgdGhpcy5vZmZzZXQgLSBidWZmZXJMZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KFwiZXJyb3JcIiwgZXJyKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmV4ZWN1dGluZ091dGdvaW5nSGFuZGxlcnMtLTtcbiAgICAgICAgdGhpcy5yZXVzZUJ1ZmZlcihidWZmZXIpO1xuICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdChcImNoZWNrRW5kXCIpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYnVmZmVyIHVzZWQgYnkgb3V0Z29pbmcgaGFuZGxlciBpbnRvIGluY29taW5nLlxuICAgICAqXG4gICAgICogQHBhcmFtIGJ1ZmZlciAtXG4gICAgICovXG4gICAgcmV1c2VCdWZmZXIoYnVmZmVyKSB7XG4gICAgICAgIHRoaXMuaW5jb21pbmcucHVzaChidWZmZXIpO1xuICAgICAgICBpZiAoIXRoaXMuaXNFcnJvciAmJiB0aGlzLnJlc29sdmVEYXRhKCkgJiYgIXRoaXMuaXNTdHJlYW1FbmQpIHtcbiAgICAgICAgICAgIHRoaXMucmVhZGFibGUucmVzdW1lKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBSZWFkcyBhIHJlYWRhYmxlIHN0cmVhbSBpbnRvIGJ1ZmZlci4gRmlsbCB0aGUgYnVmZmVyIGZyb20gb2Zmc2V0IHRvIGVuZC5cbiAqXG4gKiBAcGFyYW0gc3RyZWFtIC0gQSBOb2RlLmpzIFJlYWRhYmxlIHN0cmVhbVxuICogQHBhcmFtIGJ1ZmZlciAtIEJ1ZmZlciB0byBiZSBmaWxsZWQsIGxlbmd0aCBtdXN0IGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBvZmZzZXRcbiAqIEBwYXJhbSBvZmZzZXQgLSBGcm9tIHdoaWNoIHBvc2l0aW9uIGluIHRoZSBidWZmZXIgdG8gYmUgZmlsbGVkLCBpbmNsdXNpdmVcbiAqIEBwYXJhbSBlbmQgLSBUbyB3aGljaCBwb3NpdGlvbiBpbiB0aGUgYnVmZmVyIHRvIGJlIGZpbGxlZCwgZXhjbHVzaXZlXG4gKiBAcGFyYW0gZW5jb2RpbmcgLSBFbmNvZGluZyBvZiB0aGUgUmVhZGFibGUgc3RyZWFtXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHN0cmVhbVRvQnVmZmVyKHN0cmVhbSwgYnVmZmVyLCBvZmZzZXQsIGVuZCwgZW5jb2RpbmcpIHtcbiAgICBsZXQgcG9zID0gMDsgLy8gUG9zaXRpb24gaW4gc3RyZWFtXG4gICAgY29uc3QgY291bnQgPSBlbmQgLSBvZmZzZXQ7IC8vIFRvdGFsIGFtb3VudCBvZiBkYXRhIG5lZWRlZCBpbiBzdHJlYW1cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiByZWplY3QobmV3IEVycm9yKGBUaGUgb3BlcmF0aW9uIGNhbm5vdCBiZSBjb21wbGV0ZWQgaW4gdGltZW91dC5gKSksIFJFUVVFU1RfVElNRU9VVCk7XG4gICAgICAgIHN0cmVhbS5vbihcInJlYWRhYmxlXCIsICgpID0+IHtcbiAgICAgICAgICAgIGlmIChwb3MgPj0gY291bnQpIHtcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBjaHVuayA9IHN0cmVhbS5yZWFkKCk7XG4gICAgICAgICAgICBpZiAoIWNodW5rKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBjaHVuayA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIGNodW5rID0gQnVmZmVyLmZyb20oY2h1bmssIGVuY29kaW5nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEhvdyBtdWNoIGRhdGEgbmVlZGVkIGluIHRoaXMgY2h1bmtcbiAgICAgICAgICAgIGNvbnN0IGNodW5rTGVuZ3RoID0gcG9zICsgY2h1bmsubGVuZ3RoID4gY291bnQgPyBjb3VudCAtIHBvcyA6IGNodW5rLmxlbmd0aDtcbiAgICAgICAgICAgIGJ1ZmZlci5maWxsKGNodW5rLnNsaWNlKDAsIGNodW5rTGVuZ3RoKSwgb2Zmc2V0ICsgcG9zLCBvZmZzZXQgKyBwb3MgKyBjaHVua0xlbmd0aCk7XG4gICAgICAgICAgICBwb3MgKz0gY2h1bmtMZW5ndGg7XG4gICAgICAgIH0pO1xuICAgICAgICBzdHJlYW0ub24oXCJlbmRcIiwgKCkgPT4ge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgICAgaWYgKHBvcyA8IGNvdW50KSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgU3RyZWFtIGRyYWlucyBiZWZvcmUgZ2V0dGluZyBlbm91Z2ggZGF0YSBuZWVkZWQuIERhdGEgcmVhZDogJHtwb3N9LCBkYXRhIG5lZWQ6ICR7Y291bnR9YCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgc3RyZWFtLm9uKFwiZXJyb3JcIiwgKG1zZykgPT4ge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgICAgcmVqZWN0KG1zZyk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuLyoqXG4gKiBSZWFkcyBhIHJlYWRhYmxlIHN0cmVhbSBpbnRvIGJ1ZmZlciBlbnRpcmVseS5cbiAqXG4gKiBAcGFyYW0gc3RyZWFtIC0gQSBOb2RlLmpzIFJlYWRhYmxlIHN0cmVhbVxuICogQHBhcmFtIGJ1ZmZlciAtIEJ1ZmZlciB0byBiZSBmaWxsZWQsIGxlbmd0aCBtdXN0IGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBvZmZzZXRcbiAqIEBwYXJhbSBlbmNvZGluZyAtIEVuY29kaW5nIG9mIHRoZSBSZWFkYWJsZSBzdHJlYW1cbiAqIEByZXR1cm5zIHdpdGggdGhlIGNvdW50IG9mIGJ5dGVzIHJlYWQuXG4gKiBAdGhyb3dzIGBSYW5nZUVycm9yYCBJZiBidWZmZXIgc2l6ZSBpcyBub3QgYmlnIGVub3VnaC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc3RyZWFtVG9CdWZmZXIyKHN0cmVhbSwgYnVmZmVyLCBlbmNvZGluZykge1xuICAgIGxldCBwb3MgPSAwOyAvLyBQb3NpdGlvbiBpbiBzdHJlYW1cbiAgICBjb25zdCBidWZmZXJTaXplID0gYnVmZmVyLmxlbmd0aDtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBzdHJlYW0ub24oXCJyZWFkYWJsZVwiLCAoKSA9PiB7XG4gICAgICAgICAgICBsZXQgY2h1bmsgPSBzdHJlYW0ucmVhZCgpO1xuICAgICAgICAgICAgaWYgKCFjaHVuaykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgY2h1bmsgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBjaHVuayA9IEJ1ZmZlci5mcm9tKGNodW5rLCBlbmNvZGluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocG9zICsgY2h1bmsubGVuZ3RoID4gYnVmZmVyU2l6ZSkge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYFN0cmVhbSBleGNlZWRzIGJ1ZmZlciBzaXplLiBCdWZmZXIgc2l6ZTogJHtidWZmZXJTaXplfWApKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBidWZmZXIuZmlsbChjaHVuaywgcG9zLCBwb3MgKyBjaHVuay5sZW5ndGgpO1xuICAgICAgICAgICAgcG9zICs9IGNodW5rLmxlbmd0aDtcbiAgICAgICAgfSk7XG4gICAgICAgIHN0cmVhbS5vbihcImVuZFwiLCAoKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKHBvcyk7XG4gICAgICAgIH0pO1xuICAgICAgICBzdHJlYW0ub24oXCJlcnJvclwiLCByZWplY3QpO1xuICAgIH0pO1xufVxuLyoqXG4gKiBPTkxZIEFWQUlMQUJMRSBJTiBOT0RFLkpTIFJVTlRJTUUuXG4gKlxuICogV3JpdGVzIHRoZSBjb250ZW50IG9mIGEgcmVhZHN0cmVhbSB0byBhIGxvY2FsIGZpbGUuIFJldHVybnMgYSBQcm9taXNlIHdoaWNoIGlzIGNvbXBsZXRlZCBhZnRlciB0aGUgZmlsZSBoYW5kbGUgaXMgY2xvc2VkLlxuICpcbiAqIEBwYXJhbSBycyAtIFRoZSByZWFkIHN0cmVhbS5cbiAqIEBwYXJhbSBmaWxlIC0gRGVzdGluYXRpb24gZmlsZSBwYXRoLlxuICovXG5hc3luYyBmdW5jdGlvbiByZWFkU3RyZWFtVG9Mb2NhbEZpbGUocnMsIGZpbGUpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCB3cyA9IGZzX19uYW1lc3BhY2UuY3JlYXRlV3JpdGVTdHJlYW0oZmlsZSk7XG4gICAgICAgIHJzLm9uKFwiZXJyb3JcIiwgKGVycikgPT4ge1xuICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH0pO1xuICAgICAgICB3cy5vbihcImVycm9yXCIsIChlcnIpID0+IHtcbiAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9KTtcbiAgICAgICAgd3Mub24oXCJjbG9zZVwiLCByZXNvbHZlKTtcbiAgICAgICAgcnMucGlwZSh3cyk7XG4gICAgfSk7XG59XG4vKipcbiAqIE9OTFkgQVZBSUxBQkxFIElOIE5PREUuSlMgUlVOVElNRS5cbiAqXG4gKiBQcm9taXNpZmllZCB2ZXJzaW9uIG9mIGZzLnN0YXQoKS5cbiAqL1xuY29uc3QgZnNTdGF0ID0gdXRpbF9fbmFtZXNwYWNlLnByb21pc2lmeShmc19fbmFtZXNwYWNlLnN0YXQpO1xuY29uc3QgZnNDcmVhdGVSZWFkU3RyZWFtID0gZnNfX25hbWVzcGFjZS5jcmVhdGVSZWFkU3RyZWFtO1xuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogQSBCbG9iQ2xpZW50IHJlcHJlc2VudHMgYSBVUkwgdG8gYW4gQXp1cmUgU3RvcmFnZSBibG9iOyB0aGUgYmxvYiBtYXkgYmUgYSBibG9jayBibG9iLFxuICogYXBwZW5kIGJsb2IsIG9yIHBhZ2UgYmxvYi5cbiAqL1xuY2xhc3MgQmxvYkNsaWVudCBleHRlbmRzIFN0b3JhZ2VDbGllbnQge1xuICAgIC8qKlxuICAgICAqIFRoZSBuYW1lIG9mIHRoZSBibG9iLlxuICAgICAqL1xuICAgIGdldCBuYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbmFtZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgb2YgdGhlIHN0b3JhZ2UgY29udGFpbmVyIHRoZSBibG9iIGlzIGFzc29jaWF0ZWQgd2l0aC5cbiAgICAgKi9cbiAgICBnZXQgY29udGFpbmVyTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRhaW5lck5hbWU7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKHVybE9yQ29ubmVjdGlvblN0cmluZywgY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUsIGJsb2JOYW1lT3JPcHRpb25zLCBcbiAgICAvLyBMZWdhY3ksIG5vIGZpeCBmb3IgZXNsaW50IGVycm9yIHdpdGhvdXQgYnJlYWtpbmcuIERpc2FibGUgaXQgZm9yIHRoaXMgaW50ZXJmYWNlLlxuICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYXp1cmUvYXp1cmUtc2RrL3RzLW5hbWluZy1vcHRpb25zKi9cbiAgICBvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgICAgICBsZXQgcGlwZWxpbmU7XG4gICAgICAgIGxldCB1cmw7XG4gICAgICAgIGlmIChpc1BpcGVsaW5lTGlrZShjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSkpIHtcbiAgICAgICAgICAgIC8vICh1cmw6IHN0cmluZywgcGlwZWxpbmU6IFBpcGVsaW5lKVxuICAgICAgICAgICAgdXJsID0gdXJsT3JDb25uZWN0aW9uU3RyaW5nO1xuICAgICAgICAgICAgcGlwZWxpbmUgPSBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICgoY29yZVV0aWwuaXNOb2RlICYmIGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lIGluc3RhbmNlb2YgU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwpIHx8XG4gICAgICAgICAgICBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSBpbnN0YW5jZW9mIEFub255bW91c0NyZWRlbnRpYWwgfHxcbiAgICAgICAgICAgIGNvcmVBdXRoLmlzVG9rZW5DcmVkZW50aWFsKGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lKSkge1xuICAgICAgICAgICAgLy8gKHVybDogc3RyaW5nLCBjcmVkZW50aWFsPzogU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwgfCBBbm9ueW1vdXNDcmVkZW50aWFsIHwgVG9rZW5DcmVkZW50aWFsLCBvcHRpb25zPzogU3RvcmFnZVBpcGVsaW5lT3B0aW9ucylcbiAgICAgICAgICAgIHVybCA9IHVybE9yQ29ubmVjdGlvblN0cmluZztcbiAgICAgICAgICAgIG9wdGlvbnMgPSBibG9iTmFtZU9yT3B0aW9ucztcbiAgICAgICAgICAgIHBpcGVsaW5lID0gbmV3UGlwZWxpbmUoY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSAmJlxuICAgICAgICAgICAgdHlwZW9mIGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAvLyAodXJsOiBzdHJpbmcsIGNyZWRlbnRpYWw/OiBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbCB8IEFub255bW91c0NyZWRlbnRpYWwgfCBUb2tlbkNyZWRlbnRpYWwsIG9wdGlvbnM/OiBTdG9yYWdlUGlwZWxpbmVPcHRpb25zKVxuICAgICAgICAgICAgLy8gVGhlIHNlY29uZCBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkLiBVc2UgYW5vbnltb3VzIGNyZWRlbnRpYWwuXG4gICAgICAgICAgICB1cmwgPSB1cmxPckNvbm5lY3Rpb25TdHJpbmc7XG4gICAgICAgICAgICBpZiAoYmxvYk5hbWVPck9wdGlvbnMgJiYgdHlwZW9mIGJsb2JOYW1lT3JPcHRpb25zICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucyA9IGJsb2JOYW1lT3JPcHRpb25zO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGlwZWxpbmUgPSBuZXdQaXBlbGluZShuZXcgQW5vbnltb3VzQ3JlZGVudGlhbCgpLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSAmJlxuICAgICAgICAgICAgdHlwZW9mIGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lID09PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICBibG9iTmFtZU9yT3B0aW9ucyAmJlxuICAgICAgICAgICAgdHlwZW9mIGJsb2JOYW1lT3JPcHRpb25zID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAvLyAoY29ubmVjdGlvblN0cmluZzogc3RyaW5nLCBjb250YWluZXJOYW1lOiBzdHJpbmcsIGJsb2JOYW1lOiBzdHJpbmcsIG9wdGlvbnM/OiBTdG9yYWdlUGlwZWxpbmVPcHRpb25zKVxuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyTmFtZSA9IGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lO1xuICAgICAgICAgICAgY29uc3QgYmxvYk5hbWUgPSBibG9iTmFtZU9yT3B0aW9ucztcbiAgICAgICAgICAgIGNvbnN0IGV4dHJhY3RlZENyZWRzID0gZXh0cmFjdENvbm5lY3Rpb25TdHJpbmdQYXJ0cyh1cmxPckNvbm5lY3Rpb25TdHJpbmcpO1xuICAgICAgICAgICAgaWYgKGV4dHJhY3RlZENyZWRzLmtpbmQgPT09IFwiQWNjb3VudENvbm5TdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIGlmIChjb3JlVXRpbC5pc05vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2hhcmVkS2V5Q3JlZGVudGlhbCA9IG5ldyBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbChleHRyYWN0ZWRDcmVkcy5hY2NvdW50TmFtZSwgZXh0cmFjdGVkQ3JlZHMuYWNjb3VudEtleSk7XG4gICAgICAgICAgICAgICAgICAgIHVybCA9IGFwcGVuZFRvVVJMUGF0aChhcHBlbmRUb1VSTFBhdGgoZXh0cmFjdGVkQ3JlZHMudXJsLCBlbmNvZGVVUklDb21wb25lbnQoY29udGFpbmVyTmFtZSkpLCBlbmNvZGVVUklDb21wb25lbnQoYmxvYk5hbWUpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zLnByb3h5T3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5wcm94eU9wdGlvbnMgPSBjb3JlUmVzdFBpcGVsaW5lLmdldERlZmF1bHRQcm94eVNldHRpbmdzKGV4dHJhY3RlZENyZWRzLnByb3h5VXJpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBwaXBlbGluZSA9IG5ld1BpcGVsaW5lKHNoYXJlZEtleUNyZWRlbnRpYWwsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQWNjb3VudCBjb25uZWN0aW9uIHN0cmluZyBpcyBvbmx5IHN1cHBvcnRlZCBpbiBOb2RlLmpzIGVudmlyb25tZW50XCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGV4dHJhY3RlZENyZWRzLmtpbmQgPT09IFwiU0FTQ29ublN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgdXJsID1cbiAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG9VUkxQYXRoKGFwcGVuZFRvVVJMUGF0aChleHRyYWN0ZWRDcmVkcy51cmwsIGVuY29kZVVSSUNvbXBvbmVudChjb250YWluZXJOYW1lKSksIGVuY29kZVVSSUNvbXBvbmVudChibG9iTmFtZSkpICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiP1wiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhY3RlZENyZWRzLmFjY291bnRTYXM7XG4gICAgICAgICAgICAgICAgcGlwZWxpbmUgPSBuZXdQaXBlbGluZShuZXcgQW5vbnltb3VzQ3JlZGVudGlhbCgpLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbm5lY3Rpb24gc3RyaW5nIG11c3QgYmUgZWl0aGVyIGFuIEFjY291bnQgY29ubmVjdGlvbiBzdHJpbmcgb3IgYSBTQVMgY29ubmVjdGlvbiBzdHJpbmdcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3Rpbmcgbm9uLWVtcHR5IHN0cmluZ3MgZm9yIGNvbnRhaW5lck5hbWUgYW5kIGJsb2JOYW1lIHBhcmFtZXRlcnNcIik7XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIodXJsLCBwaXBlbGluZSk7XG4gICAgICAgICh7IGJsb2JOYW1lOiB0aGlzLl9uYW1lLCBjb250YWluZXJOYW1lOiB0aGlzLl9jb250YWluZXJOYW1lIH0gPVxuICAgICAgICAgICAgdGhpcy5nZXRCbG9iQW5kQ29udGFpbmVyTmFtZXNGcm9tVXJsKCkpO1xuICAgICAgICB0aGlzLmJsb2JDb250ZXh0ID0gdGhpcy5zdG9yYWdlQ2xpZW50Q29udGV4dC5ibG9iO1xuICAgICAgICB0aGlzLl9zbmFwc2hvdCA9IGdldFVSTFBhcmFtZXRlcih0aGlzLnVybCwgVVJMQ29uc3RhbnRzLlBhcmFtZXRlcnMuU05BUFNIT1QpO1xuICAgICAgICB0aGlzLl92ZXJzaW9uSWQgPSBnZXRVUkxQYXJhbWV0ZXIodGhpcy51cmwsIFVSTENvbnN0YW50cy5QYXJhbWV0ZXJzLlZFUlNJT05JRCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgQmxvYkNsaWVudCBvYmplY3QgaWRlbnRpY2FsIHRvIHRoZSBzb3VyY2UgYnV0IHdpdGggdGhlIHNwZWNpZmllZCBzbmFwc2hvdCB0aW1lc3RhbXAuXG4gICAgICogUHJvdmlkZSBcIlwiIHdpbGwgcmVtb3ZlIHRoZSBzbmFwc2hvdCBhbmQgcmV0dXJuIGEgQ2xpZW50IHRvIHRoZSBiYXNlIGJsb2IuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc25hcHNob3QgLSBUaGUgc25hcHNob3QgdGltZXN0YW1wLlxuICAgICAqIEByZXR1cm5zIEEgbmV3IEJsb2JDbGllbnQgb2JqZWN0IGlkZW50aWNhbCB0byB0aGUgc291cmNlIGJ1dCB3aXRoIHRoZSBzcGVjaWZpZWQgc25hcHNob3QgdGltZXN0YW1wXG4gICAgICovXG4gICAgd2l0aFNuYXBzaG90KHNuYXBzaG90KSB7XG4gICAgICAgIHJldHVybiBuZXcgQmxvYkNsaWVudChzZXRVUkxQYXJhbWV0ZXIodGhpcy51cmwsIFVSTENvbnN0YW50cy5QYXJhbWV0ZXJzLlNOQVBTSE9ULCBzbmFwc2hvdC5sZW5ndGggPT09IDAgPyB1bmRlZmluZWQgOiBzbmFwc2hvdCksIHRoaXMucGlwZWxpbmUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IEJsb2JDbGllbnQgb2JqZWN0IHBvaW50aW5nIHRvIGEgdmVyc2lvbiBvZiB0aGlzIGJsb2IuXG4gICAgICogUHJvdmlkZSBcIlwiIHdpbGwgcmVtb3ZlIHRoZSB2ZXJzaW9uSWQgYW5kIHJldHVybiBhIENsaWVudCB0byB0aGUgYmFzZSBibG9iLlxuICAgICAqXG4gICAgICogQHBhcmFtIHZlcnNpb25JZCAtIFRoZSB2ZXJzaW9uSWQuXG4gICAgICogQHJldHVybnMgQSBuZXcgQmxvYkNsaWVudCBvYmplY3QgcG9pbnRpbmcgdG8gdGhlIHZlcnNpb24gb2YgdGhpcyBibG9iLlxuICAgICAqL1xuICAgIHdpdGhWZXJzaW9uKHZlcnNpb25JZCkge1xuICAgICAgICByZXR1cm4gbmV3IEJsb2JDbGllbnQoc2V0VVJMUGFyYW1ldGVyKHRoaXMudXJsLCBVUkxDb25zdGFudHMuUGFyYW1ldGVycy5WRVJTSU9OSUQsIHZlcnNpb25JZC5sZW5ndGggPT09IDAgPyB1bmRlZmluZWQgOiB2ZXJzaW9uSWQpLCB0aGlzLnBpcGVsaW5lKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIEFwcGVuZEJsb2JDbGllbnQgb2JqZWN0LlxuICAgICAqXG4gICAgICovXG4gICAgZ2V0QXBwZW5kQmxvYkNsaWVudCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBcHBlbmRCbG9iQ2xpZW50KHRoaXMudXJsLCB0aGlzLnBpcGVsaW5lKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIEJsb2NrQmxvYkNsaWVudCBvYmplY3QuXG4gICAgICpcbiAgICAgKi9cbiAgICBnZXRCbG9ja0Jsb2JDbGllbnQoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQmxvY2tCbG9iQ2xpZW50KHRoaXMudXJsLCB0aGlzLnBpcGVsaW5lKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIFBhZ2VCbG9iQ2xpZW50IG9iamVjdC5cbiAgICAgKlxuICAgICAqL1xuICAgIGdldFBhZ2VCbG9iQ2xpZW50KCkge1xuICAgICAgICByZXR1cm4gbmV3IFBhZ2VCbG9iQ2xpZW50KHRoaXMudXJsLCB0aGlzLnBpcGVsaW5lKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVhZHMgb3IgZG93bmxvYWRzIGEgYmxvYiBmcm9tIHRoZSBzeXN0ZW0sIGluY2x1ZGluZyBpdHMgbWV0YWRhdGEgYW5kIHByb3BlcnRpZXMuXG4gICAgICogWW91IGNhbiBhbHNvIGNhbGwgR2V0IEJsb2IgdG8gcmVhZCBhIHNuYXBzaG90LlxuICAgICAqXG4gICAgICogKiBJbiBOb2RlLmpzLCBkYXRhIHJldHVybnMgaW4gYSBSZWFkYWJsZSBzdHJlYW0gcmVhZGFibGVTdHJlYW1Cb2R5XG4gICAgICogKiBJbiBicm93c2VycywgZGF0YSByZXR1cm5zIGluIGEgcHJvbWlzZSBibG9iQm9keVxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvZ2V0LWJsb2JcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvZmZzZXQgLSBGcm9tIHdoaWNoIHBvc2l0aW9uIG9mIHRoZSBibG9iIHRvIGRvd25sb2FkLCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMFxuICAgICAqIEBwYXJhbSBjb3VudCAtIEhvdyBtdWNoIGRhdGEgdG8gYmUgZG93bmxvYWRlZCwgZ3JlYXRlciB0aGFuIDAuIFdpbGwgZG93bmxvYWQgdG8gdGhlIGVuZCB3aGVuIHVuZGVmaW5lZFxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgb3B0aW9ucyB0byBCbG9iIERvd25sb2FkIG9wZXJhdGlvbi5cbiAgICAgKlxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2FnZSAoTm9kZS5qcyk6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIERvd25sb2FkIGFuZCBjb252ZXJ0IGEgYmxvYiB0byBhIHN0cmluZ1xuICAgICAqIGNvbnN0IGRvd25sb2FkQmxvY2tCbG9iUmVzcG9uc2UgPSBhd2FpdCBibG9iQ2xpZW50LmRvd25sb2FkKCk7XG4gICAgICogY29uc3QgZG93bmxvYWRlZCA9IGF3YWl0IHN0cmVhbVRvQnVmZmVyKGRvd25sb2FkQmxvY2tCbG9iUmVzcG9uc2UucmVhZGFibGVTdHJlYW1Cb2R5KTtcbiAgICAgKiBjb25zb2xlLmxvZyhcIkRvd25sb2FkZWQgYmxvYiBjb250ZW50OlwiLCBkb3dubG9hZGVkLnRvU3RyaW5nKCkpO1xuICAgICAqXG4gICAgICogYXN5bmMgZnVuY3Rpb24gc3RyZWFtVG9CdWZmZXIocmVhZGFibGVTdHJlYW0pIHtcbiAgICAgKiByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAqIGNvbnN0IGNodW5rcyA9IFtdO1xuICAgICAqIHJlYWRhYmxlU3RyZWFtLm9uKFwiZGF0YVwiLCAoZGF0YSkgPT4ge1xuICAgICAqIGNodW5rcy5wdXNoKGRhdGEgaW5zdGFuY2VvZiBCdWZmZXIgPyBkYXRhIDogQnVmZmVyLmZyb20oZGF0YSkpO1xuICAgICAqIH0pO1xuICAgICAqIHJlYWRhYmxlU3RyZWFtLm9uKFwiZW5kXCIsICgpID0+IHtcbiAgICAgKiByZXNvbHZlKEJ1ZmZlci5jb25jYXQoY2h1bmtzKSk7XG4gICAgICogfSk7XG4gICAgICogcmVhZGFibGVTdHJlYW0ub24oXCJlcnJvclwiLCByZWplY3QpO1xuICAgICAqIH0pO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNhZ2UgKGJyb3dzZXIpOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiAvLyBEb3dubG9hZCBhbmQgY29udmVydCBhIGJsb2IgdG8gYSBzdHJpbmdcbiAgICAgKiBjb25zdCBkb3dubG9hZEJsb2NrQmxvYlJlc3BvbnNlID0gYXdhaXQgYmxvYkNsaWVudC5kb3dubG9hZCgpO1xuICAgICAqIGNvbnN0IGRvd25sb2FkZWQgPSBhd2FpdCBibG9iVG9TdHJpbmcoYXdhaXQgZG93bmxvYWRCbG9ja0Jsb2JSZXNwb25zZS5ibG9iQm9keSk7XG4gICAgICogY29uc29sZS5sb2coXG4gICAgICogICBcIkRvd25sb2FkZWQgYmxvYiBjb250ZW50XCIsXG4gICAgICogICBkb3dubG9hZGVkXG4gICAgICogKTtcbiAgICAgKlxuICAgICAqIGFzeW5jIGZ1bmN0aW9uIGJsb2JUb1N0cmluZyhibG9iOiBCbG9iKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgKiAgIGNvbnN0IGZpbGVSZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAqICAgcmV0dXJuIG5ldyBQcm9taXNlPHN0cmluZz4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAqICAgICBmaWxlUmVhZGVyLm9ubG9hZGVuZCA9IChldjogYW55KSA9PiB7XG4gICAgICogICAgICAgcmVzb2x2ZShldi50YXJnZXQhLnJlc3VsdCk7XG4gICAgICogICAgIH07XG4gICAgICogICAgIGZpbGVSZWFkZXIub25lcnJvciA9IHJlamVjdDtcbiAgICAgKiAgICAgZmlsZVJlYWRlci5yZWFkQXNUZXh0KGJsb2IpO1xuICAgICAqICAgfSk7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGFzeW5jIGRvd25sb2FkKG9mZnNldCA9IDAsIGNvdW50LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0gb3B0aW9ucy5jb25kaXRpb25zIHx8IHt9O1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIGVuc3VyZUNwa0lmU3BlY2lmaWVkKG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSwgdGhpcy5pc0h0dHBzKTtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iQ2xpZW50LWRvd25sb2FkXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgY29uc3QgcmVzID0gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5ibG9iQ29udGV4dC5kb3dubG9hZCh7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIHJlcXVlc3RPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgIG9uRG93bmxvYWRQcm9ncmVzczogY29yZVV0aWwuaXNOb2RlID8gdW5kZWZpbmVkIDogb3B0aW9ucy5vblByb2dyZXNzLCAvLyBmb3IgTm9kZS5qcywgcHJvZ3Jlc3MgaXMgcmVwb3J0ZWQgYnkgUmV0cmlhYmxlUmVhZGFibGVTdHJlYW1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHJhbmdlOiBvZmZzZXQgPT09IDAgJiYgIWNvdW50ID8gdW5kZWZpbmVkIDogcmFuZ2VUb1N0cmluZyh7IG9mZnNldCwgY291bnQgfSksXG4gICAgICAgICAgICAgICAgcmFuZ2VHZXRDb250ZW50TUQ1OiBvcHRpb25zLnJhbmdlR2V0Q29udGVudE1ENSxcbiAgICAgICAgICAgICAgICByYW5nZUdldENvbnRlbnRDUkM2NDogb3B0aW9ucy5yYW5nZUdldENvbnRlbnRDcmM2NCxcbiAgICAgICAgICAgICAgICBzbmFwc2hvdDogb3B0aW9ucy5zbmFwc2hvdCxcbiAgICAgICAgICAgICAgICBjcGtJbmZvOiBvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgY29uc3Qgd3JhcHBlZFJlcyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcmVzKSwgeyBfcmVzcG9uc2U6IHJlcy5fcmVzcG9uc2UsIG9iamVjdFJlcGxpY2F0aW9uRGVzdGluYXRpb25Qb2xpY3lJZDogcmVzLm9iamVjdFJlcGxpY2F0aW9uUG9saWN5SWQsIG9iamVjdFJlcGxpY2F0aW9uU291cmNlUHJvcGVydGllczogcGFyc2VPYmplY3RSZXBsaWNhdGlvblJlY29yZChyZXMub2JqZWN0UmVwbGljYXRpb25SdWxlcykgfSk7XG4gICAgICAgICAgICAvLyBSZXR1cm4gYnJvd3NlciByZXNwb25zZSBpbW1lZGlhdGVseVxuICAgICAgICAgICAgaWYgKCFjb3JlVXRpbC5pc05vZGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlZFJlcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFdlIHN1cHBvcnQgcmV0cnlpbmcgd2hlbiBkb3dubG9hZCBzdHJlYW0gdW5leHBlY3RlZCBlbmRzIGluIE5vZGUuanMgcnVudGltZVxuICAgICAgICAgICAgLy8gRm9sbG93aW5nIGNvZGUgc2hvdWxkbid0IGJlIGJ1bmRsZWQgaW50byBicm93c2VyIGJ1aWxkLCBob3dldmVyIHNvbWVcbiAgICAgICAgICAgIC8vIGJ1bmRsZXJzIG1heSB0cnkgdG8gYnVuZGxlIGZvbGxvd2luZyBjb2RlIGFuZCBcIkZpbGVSZWFkUmVzcG9uc2UudHNcIi5cbiAgICAgICAgICAgIC8vIEluIHRoaXMgY2FzZSwgXCJGaWxlRG93bmxvYWRSZXNwb25zZS5icm93c2VyLnRzXCIgd2lsbCBiZSB1c2VkIGFzIGEgc2hpbSBvZiBcIkZpbGVEb3dubG9hZFJlc3BvbnNlLnRzXCJcbiAgICAgICAgICAgIC8vIFRoZSBjb25maWcgaXMgaW4gcGFja2FnZS5qc29uIFwiYnJvd3NlclwiIGZpZWxkXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5tYXhSZXRyeVJlcXVlc3RzID09PSB1bmRlZmluZWQgfHwgb3B0aW9ucy5tYXhSZXRyeVJlcXVlc3RzIDwgMCkge1xuICAgICAgICAgICAgICAgIC8vIFRPRE86IERlZmF1bHQgdmFsdWUgb3IgbWFrZSBpdCBhIHJlcXVpcmVkIHBhcmFtZXRlcj9cbiAgICAgICAgICAgICAgICBvcHRpb25zLm1heFJldHJ5UmVxdWVzdHMgPSBERUZBVUxUX01BWF9ET1dOTE9BRF9SRVRSWV9SRVFVRVNUUztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXMuY29udGVudExlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEZpbGUgZG93bmxvYWQgcmVzcG9uc2UgZG9lc24ndCBjb250YWluIHZhbGlkIGNvbnRlbnQgbGVuZ3RoIGhlYWRlcmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFyZXMuZXRhZykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBGaWxlIGRvd25sb2FkIHJlc3BvbnNlIGRvZXNuJ3QgY29udGFpbiB2YWxpZCBldGFnIGhlYWRlcmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBCbG9iRG93bmxvYWRSZXNwb25zZSh3cmFwcGVkUmVzLCBhc3luYyAoc3RhcnQpID0+IHtcbiAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZERvd25sb2FkT3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWZNYXRjaDogb3B0aW9ucy5jb25kaXRpb25zLmlmTWF0Y2ggfHwgcmVzLmV0YWcsXG4gICAgICAgICAgICAgICAgICAgICAgICBpZk1vZGlmaWVkU2luY2U6IG9wdGlvbnMuY29uZGl0aW9ucy5pZk1vZGlmaWVkU2luY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBpZk5vbmVNYXRjaDogb3B0aW9ucy5jb25kaXRpb25zLmlmTm9uZU1hdGNoLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWZVbm1vZGlmaWVkU2luY2U6IG9wdGlvbnMuY29uZGl0aW9ucy5pZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgcmFuZ2U6IHJhbmdlVG9TdHJpbmcoe1xuICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6IG9mZnNldCArIHJlcy5jb250ZW50TGVuZ3RoIC0gc3RhcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IHN0YXJ0LFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgcmFuZ2VHZXRDb250ZW50TUQ1OiBvcHRpb25zLnJhbmdlR2V0Q29udGVudE1ENSxcbiAgICAgICAgICAgICAgICAgICAgcmFuZ2VHZXRDb250ZW50Q1JDNjQ6IG9wdGlvbnMucmFuZ2VHZXRDb250ZW50Q3JjNjQsXG4gICAgICAgICAgICAgICAgICAgIHNuYXBzaG90OiBvcHRpb25zLnNuYXBzaG90LFxuICAgICAgICAgICAgICAgICAgICBjcGtJbmZvOiBvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAvLyBEZWJ1ZyBwdXJwb3NlIG9ubHlcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAvLyAgIGBSZWFkIGZyb20gaW50ZXJuYWwgc3RyZWFtLCByYW5nZTogJHtcbiAgICAgICAgICAgICAgICAvLyAgICAgdXBkYXRlZE9wdGlvbnMucmFuZ2VcbiAgICAgICAgICAgICAgICAvLyAgIH0sIG9wdGlvbnM6ICR7SlNPTi5zdHJpbmdpZnkodXBkYXRlZE9wdGlvbnMpfWBcbiAgICAgICAgICAgICAgICAvLyApO1xuICAgICAgICAgICAgICAgIHJldHVybiAoYXdhaXQgdGhpcy5ibG9iQ29udGV4dC5kb3dubG9hZChPYmplY3QuYXNzaWduKHsgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwgfSwgdXBkYXRlZERvd25sb2FkT3B0aW9ucykpKS5yZWFkYWJsZVN0cmVhbUJvZHk7XG4gICAgICAgICAgICB9LCBvZmZzZXQsIHJlcy5jb250ZW50TGVuZ3RoLCB7XG4gICAgICAgICAgICAgICAgbWF4UmV0cnlSZXF1ZXN0czogb3B0aW9ucy5tYXhSZXRyeVJlcXVlc3RzLFxuICAgICAgICAgICAgICAgIG9uUHJvZ3Jlc3M6IG9wdGlvbnMub25Qcm9ncmVzcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBBenVyZSBibG9iIHJlc291cmNlIHJlcHJlc2VudGVkIGJ5IHRoaXMgY2xpZW50IGV4aXN0czsgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAqXG4gICAgICogTk9URTogdXNlIHRoaXMgZnVuY3Rpb24gd2l0aCBjYXJlIHNpbmNlIGFuIGV4aXN0aW5nIGJsb2IgbWlnaHQgYmUgZGVsZXRlZCBieSBvdGhlciBjbGllbnRzIG9yXG4gICAgICogYXBwbGljYXRpb25zLiBWaWNlIHZlcnNhIG5ldyBibG9icyBtaWdodCBiZSBhZGRlZCBieSBvdGhlciBjbGllbnRzIG9yIGFwcGxpY2F0aW9ucyBhZnRlciB0aGlzXG4gICAgICogZnVuY3Rpb24gY29tcGxldGVzLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBvcHRpb25zIHRvIEV4aXN0cyBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgZXhpc3RzKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JDbGllbnQtZXhpc3RzXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBlbnN1cmVDcGtJZlNwZWNpZmllZChvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksIHRoaXMuaXNIdHRwcyk7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5nZXRQcm9wZXJ0aWVzKHtcbiAgICAgICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgICAgIGN1c3RvbWVyUHJvdmlkZWRLZXk6IG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSxcbiAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGlmIChlLnN0YXR1c0NvZGUgPT09IDQwNCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBFeHBlY3RlZCBleGNlcHRpb24gd2hlbiBjaGVja2luZyBibG9iIGV4aXN0ZW5jZVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGUuc3RhdHVzQ29kZSA9PT0gNDA5ICYmXG4gICAgICAgICAgICAgICAgICAgIChlLmRldGFpbHMuZXJyb3JDb2RlID09PSBCbG9iVXNlc0N1c3RvbWVyU3BlY2lmaWVkRW5jcnlwdGlvbk1zZyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgZS5kZXRhaWxzLmVycm9yQ29kZSA9PT0gQmxvYkRvZXNOb3RVc2VDdXN0b21lclNwZWNpZmllZEVuY3J5cHRpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEV4cGVjdGVkIGV4Y2VwdGlvbiB3aGVuIGNoZWNraW5nIGJsb2IgZXhpc3RlbmNlXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbGwgdXNlci1kZWZpbmVkIG1ldGFkYXRhLCBzdGFuZGFyZCBIVFRQIHByb3BlcnRpZXMsIGFuZCBzeXN0ZW0gcHJvcGVydGllc1xuICAgICAqIGZvciB0aGUgYmxvYi4gSXQgZG9lcyBub3QgcmV0dXJuIHRoZSBjb250ZW50IG9mIHRoZSBibG9iLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2dldC1ibG9iLXByb3BlcnRpZXNcbiAgICAgKlxuICAgICAqIFdBUk5JTkc6IFRoZSBgbWV0YWRhdGFgIG9iamVjdCByZXR1cm5lZCBpbiB0aGUgcmVzcG9uc2Ugd2lsbCBoYXZlIGl0cyBrZXlzIGluIGxvd2VyY2FzZSwgZXZlbiBpZlxuICAgICAqIHRoZXkgb3JpZ2luYWxseSBjb250YWluZWQgdXBwZXJjYXNlIGNoYXJhY3RlcnMuIFRoaXMgZGlmZmVycyBmcm9tIHRoZSBtZXRhZGF0YSBrZXlzIHJldHVybmVkIGJ5XG4gICAgICogdGhlIG1ldGhvZHMgb2Yge0BsaW5rIENvbnRhaW5lckNsaWVudH0gdGhhdCBsaXN0IGJsb2JzIHVzaW5nIHRoZSBgaW5jbHVkZU1ldGFkYXRhYCBvcHRpb24sIHdoaWNoXG4gICAgICogd2lsbCByZXRhaW4gdGhlaXIgb3JpZ2luYWwgY2FzaW5nLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBvcHRpb25zIHRvIEdldCBQcm9wZXJ0aWVzIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBnZXRQcm9wZXJ0aWVzKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIGVuc3VyZUNwa0lmU3BlY2lmaWVkKG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSwgdGhpcy5pc0h0dHBzKTtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iQ2xpZW50LWdldFByb3BlcnRpZXNcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBjb25zdCByZXMgPSBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLmJsb2JDb250ZXh0LmdldFByb3BlcnRpZXMoe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICBjcGtJbmZvOiBvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcmVzKSwgeyBfcmVzcG9uc2U6IHJlcy5fcmVzcG9uc2UsIG9iamVjdFJlcGxpY2F0aW9uRGVzdGluYXRpb25Qb2xpY3lJZDogcmVzLm9iamVjdFJlcGxpY2F0aW9uUG9saWN5SWQsIG9iamVjdFJlcGxpY2F0aW9uU291cmNlUHJvcGVydGllczogcGFyc2VPYmplY3RSZXBsaWNhdGlvblJlY29yZChyZXMub2JqZWN0UmVwbGljYXRpb25SdWxlcykgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBNYXJrcyB0aGUgc3BlY2lmaWVkIGJsb2Igb3Igc25hcHNob3QgZm9yIGRlbGV0aW9uLiBUaGUgYmxvYiBpcyBsYXRlciBkZWxldGVkXG4gICAgICogZHVyaW5nIGdhcmJhZ2UgY29sbGVjdGlvbi4gTm90ZSB0aGF0IGluIG9yZGVyIHRvIGRlbGV0ZSBhIGJsb2IsIHlvdSBtdXN0IGRlbGV0ZVxuICAgICAqIGFsbCBvZiBpdHMgc25hcHNob3RzLiBZb3UgY2FuIGRlbGV0ZSBib3RoIGF0IHRoZSBzYW1lIHRpbWUgd2l0aCB0aGUgRGVsZXRlXG4gICAgICogQmxvYiBvcGVyYXRpb24uXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvZGVsZXRlLWJsb2JcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgb3B0aW9ucyB0byBCbG9iIERlbGV0ZSBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgZGVsZXRlKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYkNsaWVudC1kZWxldGVcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5ibG9iQ29udGV4dC5kZWxldGUoe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGRlbGV0ZVNuYXBzaG90czogb3B0aW9ucy5kZWxldGVTbmFwc2hvdHMsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1hcmtzIHRoZSBzcGVjaWZpZWQgYmxvYiBvciBzbmFwc2hvdCBmb3IgZGVsZXRpb24gaWYgaXQgZXhpc3RzLiBUaGUgYmxvYiBpcyBsYXRlciBkZWxldGVkXG4gICAgICogZHVyaW5nIGdhcmJhZ2UgY29sbGVjdGlvbi4gTm90ZSB0aGF0IGluIG9yZGVyIHRvIGRlbGV0ZSBhIGJsb2IsIHlvdSBtdXN0IGRlbGV0ZVxuICAgICAqIGFsbCBvZiBpdHMgc25hcHNob3RzLiBZb3UgY2FuIGRlbGV0ZSBib3RoIGF0IHRoZSBzYW1lIHRpbWUgd2l0aCB0aGUgRGVsZXRlXG4gICAgICogQmxvYiBvcGVyYXRpb24uXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvZGVsZXRlLWJsb2JcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgb3B0aW9ucyB0byBCbG9iIERlbGV0ZSBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgZGVsZXRlSWZFeGlzdHMob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYkNsaWVudC1kZWxldGVJZkV4aXN0c1wiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuZGVsZXRlKHVwZGF0ZWRPcHRpb25zKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7IHN1Y2NlZWRlZDogdHJ1ZSB9LCByZXMpLCB7IF9yZXNwb25zZTogcmVzLl9yZXNwb25zZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCgoX2EgPSBlLmRldGFpbHMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5lcnJvckNvZGUpID09PSBcIkJsb2JOb3RGb3VuZFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oeyBzdWNjZWVkZWQ6IGZhbHNlIH0sIChfYiA9IGUucmVzcG9uc2UpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5wYXJzZWRIZWFkZXJzKSwgeyBfcmVzcG9uc2U6IGUucmVzcG9uc2UgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXN0b3JlcyB0aGUgY29udGVudHMgYW5kIG1ldGFkYXRhIG9mIHNvZnQgZGVsZXRlZCBibG9iIGFuZCBhbnkgYXNzb2NpYXRlZFxuICAgICAqIHNvZnQgZGVsZXRlZCBzbmFwc2hvdHMuIFVuZGVsZXRlIEJsb2IgaXMgc3VwcG9ydGVkIG9ubHkgb24gdmVyc2lvbiAyMDE3LTA3LTI5XG4gICAgICogb3IgbGF0ZXIuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvdW5kZWxldGUtYmxvYlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBvcHRpb25zIHRvIEJsb2IgVW5kZWxldGUgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIHVuZGVsZXRlKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JDbGllbnQtdW5kZWxldGVcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5ibG9iQ29udGV4dC51bmRlbGV0ZSh7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyBzeXN0ZW0gcHJvcGVydGllcyBvbiB0aGUgYmxvYi5cbiAgICAgKlxuICAgICAqIElmIG5vIHZhbHVlIHByb3ZpZGVkLCBvciBubyB2YWx1ZSBwcm92aWRlZCBmb3IgdGhlIHNwZWNpZmllZCBibG9iIEhUVFAgaGVhZGVycyxcbiAgICAgKiB0aGVzZSBibG9iIEhUVFAgaGVhZGVycyB3aXRob3V0IGEgdmFsdWUgd2lsbCBiZSBjbGVhcmVkLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL3NldC1ibG9iLXByb3BlcnRpZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBibG9iSFRUUEhlYWRlcnMgLSBJZiBubyB2YWx1ZSBwcm92aWRlZCwgb3Igbm8gdmFsdWUgcHJvdmlkZWQgZm9yXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgc3BlY2lmaWVkIGJsb2IgSFRUUCBoZWFkZXJzLCB0aGVzZSBibG9iIEhUVFBcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnMgd2l0aG91dCBhIHZhbHVlIHdpbGwgYmUgY2xlYXJlZC5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgY29tbW9uIGhlYWRlciB0byBzZXQgaXMgYGJsb2JDb250ZW50VHlwZWBcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsaW5nIHRoZSBicm93c2VyIHRvIHByb3ZpZGUgZnVuY3Rpb25hbGl0eVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZWQgb24gZmlsZSB0eXBlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgb3B0aW9ucyB0byBCbG9iIFNldCBIVFRQIEhlYWRlcnMgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIHNldEhUVFBIZWFkZXJzKGJsb2JIVFRQSGVhZGVycywgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIG9wdGlvbnMuY29uZGl0aW9ucyA9IG9wdGlvbnMuY29uZGl0aW9ucyB8fCB7fTtcbiAgICAgICAgZW5zdXJlQ3BrSWZTcGVjaWZpZWQob3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LCB0aGlzLmlzSHR0cHMpO1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JDbGllbnQtc2V0SFRUUEhlYWRlcnNcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5ibG9iQ29udGV4dC5zZXRIdHRwSGVhZGVycyh7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgYmxvYkh0dHBIZWFkZXJzOiBibG9iSFRUUEhlYWRlcnMsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIC8vIGNwa0luZm86IG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSwgLy8gQ1BLIGlzIG5vdCBpbmNsdWRlZCBpbiBTd2FnZ2VyLCBzaG91bGQgY2hhbmdlIHRoaXMgYmFjayB3aGVuIHRoaXMgaXNzdWUgaXMgZml4ZWQgaW4gU3dhZ2dlci5cbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIHVzZXItZGVmaW5lZCBtZXRhZGF0YSBmb3IgdGhlIHNwZWNpZmllZCBibG9iIGFzIG9uZSBvciBtb3JlIG5hbWUtdmFsdWUgcGFpcnMuXG4gICAgICpcbiAgICAgKiBJZiBubyBvcHRpb24gcHJvdmlkZWQsIG9yIG5vIG1ldGFkYXRhIGRlZmluZWQgaW4gdGhlIHBhcmFtZXRlciwgdGhlIGJsb2JcbiAgICAgKiBtZXRhZGF0YSB3aWxsIGJlIHJlbW92ZWQuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvc2V0LWJsb2ItbWV0YWRhdGFcbiAgICAgKlxuICAgICAqIEBwYXJhbSBtZXRhZGF0YSAtIFJlcGxhY2UgZXhpc3RpbmcgbWV0YWRhdGEgd2l0aCB0aGlzIHZhbHVlLlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIG5vIHZhbHVlIHByb3ZpZGVkIHRoZSBleGlzdGluZyBtZXRhZGF0YSB3aWxsIGJlIHJlbW92ZWQuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBvcHRpb25zIHRvIFNldCBNZXRhZGF0YSBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgc2V0TWV0YWRhdGEobWV0YWRhdGEsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIGVuc3VyZUNwa0lmU3BlY2lmaWVkKG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSwgdGhpcy5pc0h0dHBzKTtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iQ2xpZW50LXNldE1ldGFkYXRhXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuYmxvYkNvbnRleHQuc2V0TWV0YWRhdGEoe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIG1ldGFkYXRhLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICBjcGtJbmZvOiBvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksXG4gICAgICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiBvcHRpb25zLmVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIHRhZ3Mgb24gdGhlIHVuZGVybHlpbmcgYmxvYi5cbiAgICAgKiBBIGJsb2IgY2FuIGhhdmUgdXAgdG8gMTAgdGFncy4gVGFnIGtleXMgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDEyOCBjaGFyYWN0ZXJzLiAgVGFnIHZhbHVlcyBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMjU2IGNoYXJhY3RlcnMuXG4gICAgICogVmFsaWQgdGFnIGtleSBhbmQgdmFsdWUgY2hhcmFjdGVycyBpbmNsdWRlIGxvd2VyIGFuZCB1cHBlciBjYXNlIGxldHRlcnMsIGRpZ2l0cyAoMC05KSxcbiAgICAgKiBzcGFjZSAoJyAnKSwgcGx1cyAoJysnKSwgbWludXMgKCctJyksIHBlcmlvZCAoJy4nKSwgZm93YXJkIHNsYXNoICgnLycpLCBjb2xvbiAoJzonKSwgZXF1YWxzICgnPScpLCBhbmQgdW5kZXJzY29yZSAoJ18nKS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0YWdzIC1cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtXG4gICAgICovXG4gICAgYXN5bmMgc2V0VGFncyh0YWdzLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iQ2xpZW50LXNldFRhZ3NcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5ibG9iQ29udGV4dC5zZXRUYWdzKHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgICAgIHRhZ3M6IHRvQmxvYlRhZ3ModGFncyksXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSB0YWdzIGFzc29jaWF0ZWQgd2l0aCB0aGUgdW5kZXJseWluZyBibG9iLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLVxuICAgICAqL1xuICAgIGFzeW5jIGdldFRhZ3Mob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYkNsaWVudC1nZXRUYWdzXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLmJsb2JDb250ZXh0LmdldFRhZ3Moe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICBjb25zdCB3cmFwcGVkUmVzcG9uc2UgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHJlc3BvbnNlKSwgeyBfcmVzcG9uc2U6IHJlc3BvbnNlLl9yZXNwb25zZSwgdGFnczogdG9UYWdzKHsgYmxvYlRhZ1NldDogcmVzcG9uc2UuYmxvYlRhZ1NldCB9KSB8fCB7fSB9KTtcbiAgICAgICAgICAgIHJldHVybiB3cmFwcGVkUmVzcG9uc2U7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgYSB7QGxpbmsgQmxvYkxlYXNlQ2xpZW50fSB0aGF0IG1hbmFnZXMgbGVhc2VzIG9uIHRoZSBibG9iLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3Bvc2VMZWFzZUlkIC0gSW5pdGlhbCBwcm9wb3NlZCBsZWFzZSBJZC5cbiAgICAgKiBAcmV0dXJucyBBIG5ldyBCbG9iTGVhc2VDbGllbnQgb2JqZWN0IGZvciBtYW5hZ2luZyBsZWFzZXMgb24gdGhlIGJsb2IuXG4gICAgICovXG4gICAgZ2V0QmxvYkxlYXNlQ2xpZW50KHByb3Bvc2VMZWFzZUlkKSB7XG4gICAgICAgIHJldHVybiBuZXcgQmxvYkxlYXNlQ2xpZW50KHRoaXMsIHByb3Bvc2VMZWFzZUlkKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHJlYWQtb25seSBzbmFwc2hvdCBvZiBhIGJsb2IuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvc25hcHNob3QtYmxvYlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBvcHRpb25zIHRvIHRoZSBCbG9iIENyZWF0ZSBTbmFwc2hvdCBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgY3JlYXRlU25hcHNob3Qob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIG9wdGlvbnMuY29uZGl0aW9ucyA9IG9wdGlvbnMuY29uZGl0aW9ucyB8fCB7fTtcbiAgICAgICAgZW5zdXJlQ3BrSWZTcGVjaWZpZWQob3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LCB0aGlzLmlzSHR0cHMpO1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JDbGllbnQtY3JlYXRlU25hcHNob3RcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5ibG9iQ29udGV4dC5jcmVhdGVTbmFwc2hvdCh7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbWV0YWRhdGE6IG9wdGlvbnMubWV0YWRhdGEsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIGNwa0luZm86IG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSxcbiAgICAgICAgICAgICAgICBlbmNyeXB0aW9uU2NvcGU6IG9wdGlvbnMuZW5jcnlwdGlvblNjb3BlLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFzeW5jaHJvbm91c2x5IGNvcGllcyBhIGJsb2IgdG8gYSBkZXN0aW5hdGlvbiB3aXRoaW4gdGhlIHN0b3JhZ2UgYWNjb3VudC5cbiAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbG9uZyBydW5uaW5nIG9wZXJhdGlvbiBwb2xsZXIgdGhhdCBhbGxvd3MgeW91IHRvIHdhaXRcbiAgICAgKiBpbmRlZmluaXRlbHkgdW50aWwgdGhlIGNvcHkgaXMgY29tcGxldGVkLlxuICAgICAqIFlvdSBjYW4gYWxzbyBjYW5jZWwgYSBjb3B5IGJlZm9yZSBpdCBpcyBjb21wbGV0ZWQgYnkgY2FsbGluZyBgY2FuY2VsT3BlcmF0aW9uYCBvbiB0aGUgcG9sbGVyLlxuICAgICAqIE5vdGUgdGhhdCB0aGUgb25Qcm9ncmVzcyBjYWxsYmFjayB3aWxsIG5vdCBiZSBpbnZva2VkIGlmIHRoZSBvcGVyYXRpb24gY29tcGxldGVzIGluIHRoZSBmaXJzdFxuICAgICAqIHJlcXVlc3QsIGFuZCBhdHRlbXB0aW5nIHRvIGNhbmNlbCBhIGNvbXBsZXRlZCBjb3B5IHdpbGwgcmVzdWx0IGluIGFuIGVycm9yIGJlaW5nIHRocm93bi5cbiAgICAgKlxuICAgICAqIEluIHZlcnNpb24gMjAxMi0wMi0xMiBhbmQgbGF0ZXIsIHRoZSBzb3VyY2UgZm9yIGEgQ29weSBCbG9iIG9wZXJhdGlvbiBjYW4gYmVcbiAgICAgKiBhIGNvbW1pdHRlZCBibG9iIGluIGFueSBBenVyZSBzdG9yYWdlIGFjY291bnQuXG4gICAgICogQmVnaW5uaW5nIHdpdGggdmVyc2lvbiAyMDE1LTAyLTIxLCB0aGUgc291cmNlIGZvciBhIENvcHkgQmxvYiBvcGVyYXRpb24gY2FuIGJlXG4gICAgICogYW4gQXp1cmUgZmlsZSBpbiBhbnkgQXp1cmUgc3RvcmFnZSBhY2NvdW50LlxuICAgICAqIE9ubHkgc3RvcmFnZSBhY2NvdW50cyBjcmVhdGVkIG9uIG9yIGFmdGVyIEp1bmUgN3RoLCAyMDEyIGFsbG93IHRoZSBDb3B5IEJsb2JcbiAgICAgKiBvcGVyYXRpb24gdG8gY29weSBmcm9tIGFub3RoZXIgc3RvcmFnZSBhY2NvdW50LlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2NvcHktYmxvYlxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBhdXRvbWF0aWMgcG9sbGluZzpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogY29uc3QgY29weVBvbGxlciA9IGF3YWl0IGJsb2JDbGllbnQuYmVnaW5Db3B5RnJvbVVSTCgndXJsJyk7XG4gICAgICogY29uc3QgcmVzdWx0ID0gYXdhaXQgY29weVBvbGxlci5wb2xsVW50aWxEb25lKCk7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIG1hbnVhbCBwb2xsaW5nOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBjb25zdCBjb3B5UG9sbGVyID0gYXdhaXQgYmxvYkNsaWVudC5iZWdpbkNvcHlGcm9tVVJMKCd1cmwnKTtcbiAgICAgKiB3aGlsZSAoIXBvbGxlci5pc0RvbmUoKSkge1xuICAgICAqICAgIGF3YWl0IHBvbGxlci5wb2xsKCk7XG4gICAgICogfVxuICAgICAqIGNvbnN0IHJlc3VsdCA9IGNvcHlQb2xsZXIuZ2V0UmVzdWx0KCk7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIHByb2dyZXNzIHVwZGF0ZXM6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnN0IGNvcHlQb2xsZXIgPSBhd2FpdCBibG9iQ2xpZW50LmJlZ2luQ29weUZyb21VUkwoJ3VybCcsIHtcbiAgICAgKiAgIG9uUHJvZ3Jlc3Moc3RhdGUpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coYFByb2dyZXNzOiAke3N0YXRlLmNvcHlQcm9ncmVzc31gKTtcbiAgICAgKiAgIH1cbiAgICAgKiB9KTtcbiAgICAgKiBjb25zdCByZXN1bHQgPSBhd2FpdCBjb3B5UG9sbGVyLnBvbGxVbnRpbERvbmUoKTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNpbmcgYSBjaGFuZ2luZyBwb2xsaW5nIGludGVydmFsIChkZWZhdWx0IDE1IHNlY29uZHMpOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBjb25zdCBjb3B5UG9sbGVyID0gYXdhaXQgYmxvYkNsaWVudC5iZWdpbkNvcHlGcm9tVVJMKCd1cmwnLCB7XG4gICAgICogICBpbnRlcnZhbEluTXM6IDEwMDAgLy8gcG9sbCBibG9iIGV2ZXJ5IDEgc2Vjb25kIGZvciBjb3B5IHByb2dyZXNzXG4gICAgICogfSk7XG4gICAgICogY29uc3QgcmVzdWx0ID0gYXdhaXQgY29weVBvbGxlci5wb2xsVW50aWxEb25lKCk7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIGNvcHkgY2FuY2VsbGF0aW9uOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBjb25zdCBjb3B5UG9sbGVyID0gYXdhaXQgYmxvYkNsaWVudC5iZWdpbkNvcHlGcm9tVVJMKCd1cmwnKTtcbiAgICAgKiAvLyBjYW5jZWwgb3BlcmF0aW9uIGFmdGVyIHN0YXJ0aW5nIGl0LlxuICAgICAqIHRyeSB7XG4gICAgICogICBhd2FpdCBjb3B5UG9sbGVyLmNhbmNlbE9wZXJhdGlvbigpO1xuICAgICAqICAgLy8gY2FsbHMgdG8gZ2V0IHRoZSByZXN1bHQgbm93IHRocm93IFBvbGxlckNhbmNlbGxlZEVycm9yXG4gICAgICogICBhd2FpdCBjb3B5UG9sbGVyLmdldFJlc3VsdCgpO1xuICAgICAqIH0gY2F0Y2ggKGVycikge1xuICAgICAqICAgaWYgKGVyci5uYW1lID09PSAnUG9sbGVyQ2FuY2VsbGVkRXJyb3InKSB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKCdUaGUgY29weSB3YXMgY2FuY2VsbGVkLicpO1xuICAgICAqICAgfVxuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb3B5U291cmNlIC0gdXJsIHRvIHRoZSBzb3VyY2UgQXp1cmUgQmxvYi9GaWxlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgb3B0aW9ucyB0byB0aGUgQmxvYiBTdGFydCBDb3B5IEZyb20gVVJMIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBiZWdpbkNvcHlGcm9tVVJMKGNvcHlTb3VyY2UsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCBjbGllbnQgPSB7XG4gICAgICAgICAgICBhYm9ydENvcHlGcm9tVVJMOiAoLi4uYXJncykgPT4gdGhpcy5hYm9ydENvcHlGcm9tVVJMKC4uLmFyZ3MpLFxuICAgICAgICAgICAgZ2V0UHJvcGVydGllczogKC4uLmFyZ3MpID0+IHRoaXMuZ2V0UHJvcGVydGllcyguLi5hcmdzKSxcbiAgICAgICAgICAgIHN0YXJ0Q29weUZyb21VUkw6ICguLi5hcmdzKSA9PiB0aGlzLnN0YXJ0Q29weUZyb21VUkwoLi4uYXJncyksXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHBvbGxlciA9IG5ldyBCbG9iQmVnaW5Db3B5RnJvbVVybFBvbGxlcih7XG4gICAgICAgICAgICBibG9iQ2xpZW50OiBjbGllbnQsXG4gICAgICAgICAgICBjb3B5U291cmNlLFxuICAgICAgICAgICAgaW50ZXJ2YWxJbk1zOiBvcHRpb25zLmludGVydmFsSW5NcyxcbiAgICAgICAgICAgIG9uUHJvZ3Jlc3M6IG9wdGlvbnMub25Qcm9ncmVzcyxcbiAgICAgICAgICAgIHJlc3VtZUZyb206IG9wdGlvbnMucmVzdW1lRnJvbSxcbiAgICAgICAgICAgIHN0YXJ0Q29weUZyb21VUkxPcHRpb25zOiBvcHRpb25zLFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gVHJpZ2dlciB0aGUgc3RhcnRDb3B5RnJvbVVSTCBjYWxsIGJ5IGNhbGxpbmcgcG9sbC5cbiAgICAgICAgLy8gQW55IGVycm9ycyBmcm9tIHRoaXMgbWV0aG9kIHNob3VsZCBiZSBzdXJmYWNlZCB0byB0aGUgdXNlci5cbiAgICAgICAgYXdhaXQgcG9sbGVyLnBvbGwoKTtcbiAgICAgICAgcmV0dXJuIHBvbGxlcjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWJvcnRzIGEgcGVuZGluZyBhc3luY2hyb25vdXMgQ29weSBCbG9iIG9wZXJhdGlvbiwgYW5kIGxlYXZlcyBhIGRlc3RpbmF0aW9uIGJsb2Igd2l0aCB6ZXJvXG4gICAgICogbGVuZ3RoIGFuZCBmdWxsIG1ldGFkYXRhLiBWZXJzaW9uIDIwMTItMDItMTIgYW5kIG5ld2VyLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2Fib3J0LWNvcHktYmxvYlxuICAgICAqXG4gICAgICogQHBhcmFtIGNvcHlJZCAtIElkIG9mIHRoZSBDb3B5IEZyb20gVVJMIG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIG9wdGlvbnMgdG8gdGhlIEJsb2IgQWJvcnQgQ29weSBGcm9tIFVSTCBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgYWJvcnRDb3B5RnJvbVVSTChjb3B5SWQsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JDbGllbnQtYWJvcnRDb3B5RnJvbVVSTFwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLmJsb2JDb250ZXh0LmFib3J0Q29weUZyb21VUkwoY29weUlkLCB7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIHN5bmNocm9ub3VzIENvcHkgRnJvbSBVUkwgb3BlcmF0aW9uIGNvcGllcyBhIGJsb2Igb3IgYW4gaW50ZXJuZXQgcmVzb3VyY2UgdG8gYSBuZXcgYmxvYi4gSXQgd2lsbCBub3RcbiAgICAgKiByZXR1cm4gYSByZXNwb25zZSB1bnRpbCB0aGUgY29weSBpcyBjb21wbGV0ZS5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9jb3B5LWJsb2ItZnJvbS11cmxcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb3B5U291cmNlIC0gVGhlIHNvdXJjZSBVUkwgdG8gY29weSBmcm9tLCBTaGFyZWQgQWNjZXNzIFNpZ25hdHVyZShTQVMpIG1heWJlIG5lZWRlZCBmb3IgYXV0aGVudGljYXRpb25cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtXG4gICAgICovXG4gICAgYXN5bmMgc3luY0NvcHlGcm9tVVJMKGNvcHlTb3VyY2UsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucyA9IG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucyB8fCB7fTtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iQ2xpZW50LXN5bmNDb3B5RnJvbVVSTFwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2UsIF9mLCBfZztcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLmJsb2JDb250ZXh0LmNvcHlGcm9tVVJMKGNvcHlTb3VyY2UsIHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBtZXRhZGF0YTogb3B0aW9ucy5tZXRhZGF0YSxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgc291cmNlTW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUlmTWF0Y2g6IChfYiA9IG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmlmTWF0Y2gsXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUlmTW9kaWZpZWRTaW5jZTogKF9jID0gb3B0aW9ucy5zb3VyY2VDb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VJZk5vbmVNYXRjaDogKF9kID0gb3B0aW9ucy5zb3VyY2VDb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuaWZOb25lTWF0Y2gsXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUlmVW5tb2RpZmllZFNpbmNlOiAoX2UgPSBvcHRpb25zLnNvdXJjZUNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZS5pZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNvdXJjZUNvbnRlbnRNRDU6IG9wdGlvbnMuc291cmNlQ29udGVudE1ENSxcbiAgICAgICAgICAgICAgICBjb3B5U291cmNlQXV0aG9yaXphdGlvbjogaHR0cEF1dGhvcml6YXRpb25Ub1N0cmluZyhvcHRpb25zLnNvdXJjZUF1dGhvcml6YXRpb24pLFxuICAgICAgICAgICAgICAgIHRpZXI6IHRvQWNjZXNzVGllcihvcHRpb25zLnRpZXIpLFxuICAgICAgICAgICAgICAgIGJsb2JUYWdzU3RyaW5nOiB0b0Jsb2JUYWdzU3RyaW5nKG9wdGlvbnMudGFncyksXG4gICAgICAgICAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5RXhwaXJ5OiAoX2YgPSBvcHRpb25zLmltbXV0YWJpbGl0eVBvbGljeSkgPT09IG51bGwgfHwgX2YgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9mLmV4cGlyaWVzT24sXG4gICAgICAgICAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5TW9kZTogKF9nID0gb3B0aW9ucy5pbW11dGFiaWxpdHlQb2xpY3kpID09PSBudWxsIHx8IF9nID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZy5wb2xpY3lNb2RlLFxuICAgICAgICAgICAgICAgIGxlZ2FsSG9sZDogb3B0aW9ucy5sZWdhbEhvbGQsXG4gICAgICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiBvcHRpb25zLmVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgICAgICAgICBjb3B5U291cmNlVGFnczogb3B0aW9ucy5jb3B5U291cmNlVGFncyxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSB0aWVyIG9uIGEgYmxvYi4gVGhlIG9wZXJhdGlvbiBpcyBhbGxvd2VkIG9uIGEgcGFnZSBibG9iIGluIGEgcHJlbWl1bVxuICAgICAqIHN0b3JhZ2UgYWNjb3VudCBhbmQgb24gYSBibG9jayBibG9iIGluIGEgYmxvYiBzdG9yYWdlIGFjY291bnQgKGxvY2FsbHkgcmVkdW5kYW50XG4gICAgICogc3RvcmFnZSBvbmx5KS4gQSBwcmVtaXVtIHBhZ2UgYmxvYidzIHRpZXIgZGV0ZXJtaW5lcyB0aGUgYWxsb3dlZCBzaXplLCBJT1BTLFxuICAgICAqIGFuZCBiYW5kd2lkdGggb2YgdGhlIGJsb2IuIEEgYmxvY2sgYmxvYidzIHRpZXIgZGV0ZXJtaW5lcyBIb3QvQ29vbC9BcmNoaXZlXG4gICAgICogc3RvcmFnZSB0eXBlLiBUaGlzIG9wZXJhdGlvbiBkb2VzIG5vdCB1cGRhdGUgdGhlIGJsb2IncyBFVGFnLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL3NldC1ibG9iLXRpZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSB0aWVyIC0gVGhlIHRpZXIgdG8gYmUgc2V0IG9uIHRoZSBibG9iLiBWYWxpZCB2YWx1ZXMgYXJlIEhvdCwgQ29vbCwgb3IgQXJjaGl2ZS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIG9wdGlvbnMgdG8gdGhlIEJsb2IgU2V0IFRpZXIgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIHNldEFjY2Vzc1RpZXIodGllciwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYkNsaWVudC1zZXRBY2Nlc3NUaWVyXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuYmxvYkNvbnRleHQuc2V0VGllcih0b0FjY2Vzc1RpZXIodGllciksIHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgcmVoeWRyYXRlUHJpb3JpdHk6IG9wdGlvbnMucmVoeWRyYXRlUHJpb3JpdHksXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMgZG93bmxvYWRUb0J1ZmZlcihwYXJhbTEsIHBhcmFtMiwgcGFyYW0zLCBwYXJhbTQgPSB7fSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGxldCBidWZmZXI7XG4gICAgICAgIGxldCBvZmZzZXQgPSAwO1xuICAgICAgICBsZXQgY291bnQgPSAwO1xuICAgICAgICBsZXQgb3B0aW9ucyA9IHBhcmFtNDtcbiAgICAgICAgaWYgKHBhcmFtMSBpbnN0YW5jZW9mIEJ1ZmZlcikge1xuICAgICAgICAgICAgYnVmZmVyID0gcGFyYW0xO1xuICAgICAgICAgICAgb2Zmc2V0ID0gcGFyYW0yIHx8IDA7XG4gICAgICAgICAgICBjb3VudCA9IHR5cGVvZiBwYXJhbTMgPT09IFwibnVtYmVyXCIgPyBwYXJhbTMgOiAwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgb2Zmc2V0ID0gdHlwZW9mIHBhcmFtMSA9PT0gXCJudW1iZXJcIiA/IHBhcmFtMSA6IDA7XG4gICAgICAgICAgICBjb3VudCA9IHR5cGVvZiBwYXJhbTIgPT09IFwibnVtYmVyXCIgPyBwYXJhbTIgOiAwO1xuICAgICAgICAgICAgb3B0aW9ucyA9IHBhcmFtMyB8fCB7fTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgYmxvY2tTaXplID0gKF9hID0gb3B0aW9ucy5ibG9ja1NpemUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IDA7XG4gICAgICAgIGlmIChibG9ja1NpemUgPCAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcImJsb2NrU2l6ZSBvcHRpb24gbXVzdCBiZSA+PSAwXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChibG9ja1NpemUgPT09IDApIHtcbiAgICAgICAgICAgIGJsb2NrU2l6ZSA9IERFRkFVTFRfQkxPQl9ET1dOTE9BRF9CTE9DS19CWVRFUztcbiAgICAgICAgfVxuICAgICAgICBpZiAob2Zmc2V0IDwgMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJvZmZzZXQgb3B0aW9uIG11c3QgYmUgPj0gMFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY291bnQgJiYgY291bnQgPD0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJjb3VudCBvcHRpb24gbXVzdCBiZSBncmVhdGVyIHRoYW4gMFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW9wdGlvbnMuY29uZGl0aW9ucykge1xuICAgICAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0ge307XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iQ2xpZW50LWRvd25sb2FkVG9CdWZmZXJcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICAvLyBDdXN0b21lciBkb2Vzbid0IHNwZWNpZnkgbGVuZ3RoLCBnZXQgaXRcbiAgICAgICAgICAgIGlmICghY291bnQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZ2V0UHJvcGVydGllcyhPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMpLCB7IHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyB9KSk7XG4gICAgICAgICAgICAgICAgY291bnQgPSByZXNwb25zZS5jb250ZW50TGVuZ3RoIC0gb2Zmc2V0O1xuICAgICAgICAgICAgICAgIGlmIChjb3VudCA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYG9mZnNldCAke29mZnNldH0gc2hvdWxkbid0IGJlIGxhcmdlciB0aGFuIGJsb2Igc2l6ZSAke3Jlc3BvbnNlLmNvbnRlbnRMZW5ndGh9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQWxsb2NhdGUgdGhlIGJ1ZmZlciBvZiBzaXplID0gY291bnQgaWYgdGhlIGJ1ZmZlciBpcyBub3QgcHJvdmlkZWRcbiAgICAgICAgICAgIGlmICghYnVmZmVyKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgYnVmZmVyID0gQnVmZmVyLmFsbG9jKGNvdW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGFsbG9jYXRlIHRoZSBidWZmZXIgb2Ygc2l6ZTogJHtjb3VudH0oaW4gYnl0ZXMpLiBQbGVhc2UgdHJ5IHBhc3NpbmcgeW91ciBvd24gYnVmZmVyIHRvIHRoZSBcImRvd25sb2FkVG9CdWZmZXJcIiBtZXRob2Qgb3IgdHJ5IHVzaW5nIG90aGVyIG1ldGhvZHMgbGlrZSBcImRvd25sb2FkXCIgb3IgXCJkb3dubG9hZFRvRmlsZVwiLlxcdCAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGJ1ZmZlci5sZW5ndGggPCBjb3VudCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBUaGUgYnVmZmVyJ3Mgc2l6ZSBzaG91bGQgYmUgZXF1YWwgdG8gb3IgbGFyZ2VyIHRoYW4gdGhlIHJlcXVlc3QgY291bnQgb2YgYnl0ZXM6ICR7Y291bnR9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgdHJhbnNmZXJQcm9ncmVzcyA9IDA7XG4gICAgICAgICAgICBjb25zdCBiYXRjaCA9IG5ldyBCYXRjaChvcHRpb25zLmNvbmN1cnJlbmN5KTtcbiAgICAgICAgICAgIGZvciAobGV0IG9mZiA9IG9mZnNldDsgb2ZmIDwgb2Zmc2V0ICsgY291bnQ7IG9mZiA9IG9mZiArIGJsb2NrU2l6ZSkge1xuICAgICAgICAgICAgICAgIGJhdGNoLmFkZE9wZXJhdGlvbihhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEV4Y2x1c2l2ZSBjaHVuayBlbmQgcG9zaXRpb25cbiAgICAgICAgICAgICAgICAgICAgbGV0IGNodW5rRW5kID0gb2Zmc2V0ICsgY291bnQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvZmYgKyBibG9ja1NpemUgPCBjaHVua0VuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2h1bmtFbmQgPSBvZmYgKyBibG9ja1NpemU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmRvd25sb2FkKG9mZiwgY2h1bmtFbmQgLSBvZmYsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4UmV0cnlSZXF1ZXN0czogb3B0aW9ucy5tYXhSZXRyeVJlcXVlc3RzUGVyQmxvY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21lclByb3ZpZGVkS2V5OiBvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJlYW0gPSByZXNwb25zZS5yZWFkYWJsZVN0cmVhbUJvZHk7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHN0cmVhbVRvQnVmZmVyKHN0cmVhbSwgYnVmZmVyLCBvZmYgLSBvZmZzZXQsIGNodW5rRW5kIC0gb2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIHByb2dyZXNzIGFmdGVyIGJsb2NrIGlzIGRvd25sb2FkZWQsIGluIGNhc2Ugb2YgYmxvY2sgdHJ5aW5nXG4gICAgICAgICAgICAgICAgICAgIC8vIENvdWxkIHByb3ZpZGUgZmluZXIgZ3JhaW5lZCBwcm9ncmVzcyB1cGRhdGluZyBpbnNpZGUgSFRUUCByZXF1ZXN0cyxcbiAgICAgICAgICAgICAgICAgICAgLy8gb25seSBpZiBjb252ZW5pZW5jZSBsYXllciBkb3dubG9hZCB0cnkgaXMgZW5hYmxlZFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2ZlclByb2dyZXNzICs9IGNodW5rRW5kIC0gb2ZmO1xuICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5vblByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm9uUHJvZ3Jlc3MoeyBsb2FkZWRCeXRlczogdHJhbnNmZXJQcm9ncmVzcyB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXdhaXQgYmF0Y2guZG8oKTtcbiAgICAgICAgICAgIHJldHVybiBidWZmZXI7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBPTkxZIEFWQUlMQUJMRSBJTiBOT0RFLkpTIFJVTlRJTUUuXG4gICAgICpcbiAgICAgKiBEb3dubG9hZHMgYW4gQXp1cmUgQmxvYiB0byBhIGxvY2FsIGZpbGUuXG4gICAgICogRmFpbHMgaWYgdGhlIHRoZSBnaXZlbiBmaWxlIHBhdGggYWxyZWFkeSBleGl0cy5cbiAgICAgKiBPZmZzZXQgYW5kIGNvdW50IGFyZSBvcHRpb25hbCwgcGFzcyAwIGFuZCB1bmRlZmluZWQgcmVzcGVjdGl2ZWx5IHRvIGRvd25sb2FkIHRoZSBlbnRpcmUgYmxvYi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBmaWxlUGF0aCAtXG4gICAgICogQHBhcmFtIG9mZnNldCAtIEZyb20gd2hpY2ggcG9zaXRpb24gb2YgdGhlIGJsb2NrIGJsb2IgdG8gZG93bmxvYWQuXG4gICAgICogQHBhcmFtIGNvdW50IC0gSG93IG11Y2ggZGF0YSB0byBiZSBkb3dubG9hZGVkLiBXaWxsIGRvd25sb2FkIHRvIHRoZSBlbmQgd2hlbiBwYXNzaW5nIHVuZGVmaW5lZC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gQmxvYiBkb3dubG9hZCBvcHRpb25zLlxuICAgICAqIEByZXR1cm5zIFRoZSByZXNwb25zZSBkYXRhIGZvciBibG9iIGRvd25sb2FkIG9wZXJhdGlvbixcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXQgd2l0aCByZWFkYWJsZVN0cmVhbUJvZHkgc2V0IHRvIHVuZGVmaW5lZCBzaW5jZSBpdHNcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50IGlzIGFscmVhZHkgcmVhZCBhbmQgd3JpdHRlbiBpbnRvIGEgbG9jYWwgZmlsZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0IHRoZSBzcGVjaWZpZWQgcGF0aC5cbiAgICAgKi9cbiAgICBhc3luYyBkb3dubG9hZFRvRmlsZShmaWxlUGF0aCwgb2Zmc2V0ID0gMCwgY291bnQsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JDbGllbnQtZG93bmxvYWRUb0ZpbGVcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZG93bmxvYWQob2Zmc2V0LCBjb3VudCwgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKSwgeyB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMgfSkpO1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnJlYWRhYmxlU3RyZWFtQm9keSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHJlYWRTdHJlYW1Ub0xvY2FsRmlsZShyZXNwb25zZS5yZWFkYWJsZVN0cmVhbUJvZHksIGZpbGVQYXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFRoZSBzdHJlYW0gaXMgbm8gbG9uZ2VyIGFjY2Vzc2libGUgc28gc2V0dGluZyBpdCB0byB1bmRlZmluZWQuXG4gICAgICAgICAgICByZXNwb25zZS5ibG9iRG93bmxvYWRTdHJlYW0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBnZXRCbG9iQW5kQ29udGFpbmVyTmFtZXNGcm9tVXJsKCkge1xuICAgICAgICBsZXQgY29udGFpbmVyTmFtZTtcbiAgICAgICAgbGV0IGJsb2JOYW1lO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gIFVSTCBtYXkgbG9vayBsaWtlIHRoZSBmb2xsb3dpbmdcbiAgICAgICAgICAgIC8vIFwiaHR0cHM6Ly9teWFjY291bnQuYmxvYi5jb3JlLndpbmRvd3MubmV0L215Y29udGFpbmVyL2Jsb2I/c2FzU3RyaW5nXCI7XG4gICAgICAgICAgICAvLyBcImh0dHBzOi8vbXlhY2NvdW50LmJsb2IuY29yZS53aW5kb3dzLm5ldC9teWNvbnRhaW5lci9ibG9iXCI7XG4gICAgICAgICAgICAvLyBcImh0dHBzOi8vbXlhY2NvdW50LmJsb2IuY29yZS53aW5kb3dzLm5ldC9teWNvbnRhaW5lci9ibG9iL2EudHh0P3Nhc1N0cmluZ1wiO1xuICAgICAgICAgICAgLy8gXCJodHRwczovL215YWNjb3VudC5ibG9iLmNvcmUud2luZG93cy5uZXQvbXljb250YWluZXIvYmxvYi9hLnR4dFwiO1xuICAgICAgICAgICAgLy8gSVB2NC9JUHY2IGFkZHJlc3MgaG9zdHMsIEVuZHBvaW50cyAtIGBodHRwOi8vMTI3LjAuMC4xOjEwMDAwL2RldnN0b3JlYWNjb3VudDEvY29udGFpbmVybmFtZS9ibG9iYFxuICAgICAgICAgICAgLy8gaHR0cDovL2xvY2FsaG9zdDoxMDAwMS9kZXZzdG9yZWFjY291bnQxL2NvbnRhaW5lcm5hbWUvYmxvYlxuICAgICAgICAgICAgY29uc3QgcGFyc2VkVXJsID0gbmV3IFVSTCh0aGlzLnVybCk7XG4gICAgICAgICAgICBpZiAocGFyc2VkVXJsLmhvc3Quc3BsaXQoXCIuXCIpWzFdID09PSBcImJsb2JcIikge1xuICAgICAgICAgICAgICAgIC8vIFwiaHR0cHM6Ly9teWFjY291bnQuYmxvYi5jb3JlLndpbmRvd3MubmV0L2NvbnRhaW5lcm5hbWUvYmxvYlwiLlxuICAgICAgICAgICAgICAgIC8vIC5nZXRQYXRoKCkgLT4gL2NvbnRhaW5lcm5hbWUvYmxvYlxuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGhDb21wb25lbnRzID0gcGFyc2VkVXJsLnBhdGhuYW1lLm1hdGNoKFwiLyhbXi9dKikoLyguKikpP1wiKTtcbiAgICAgICAgICAgICAgICBjb250YWluZXJOYW1lID0gcGF0aENvbXBvbmVudHNbMV07XG4gICAgICAgICAgICAgICAgYmxvYk5hbWUgPSBwYXRoQ29tcG9uZW50c1szXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzSXBFbmRwb2ludFN0eWxlKHBhcnNlZFVybCkpIHtcbiAgICAgICAgICAgICAgICAvLyBJUHY0L0lQdjYgYWRkcmVzcyBob3N0cy4uLiBFeGFtcGxlIC0gaHR0cDovLzE5Mi4wLjAuMTA6MTAwMDEvZGV2c3RvcmVhY2NvdW50MS9jb250YWluZXJuYW1lL2Jsb2JcbiAgICAgICAgICAgICAgICAvLyBTaW5nbGUgd29yZCBkb21haW4gd2l0aG91dCBhIFtkb3RdIGluIHRoZSBlbmRwb2ludC4uLiBFeGFtcGxlIC0gaHR0cDovL2xvY2FsaG9zdDoxMDAwMS9kZXZzdG9yZWFjY291bnQxL2NvbnRhaW5lcm5hbWUvYmxvYlxuICAgICAgICAgICAgICAgIC8vIC5nZXRQYXRoKCkgLT4gL2RldnN0b3JlYWNjb3VudDEvY29udGFpbmVybmFtZS9ibG9iXG4gICAgICAgICAgICAgICAgY29uc3QgcGF0aENvbXBvbmVudHMgPSBwYXJzZWRVcmwucGF0aG5hbWUubWF0Y2goXCIvKFteL10qKS8oW14vXSopKC8oLiopKT9cIik7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyTmFtZSA9IHBhdGhDb21wb25lbnRzWzJdO1xuICAgICAgICAgICAgICAgIGJsb2JOYW1lID0gcGF0aENvbXBvbmVudHNbNF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBcImh0dHBzOi8vY3VzdG9tZG9tYWluLmNvbS9jb250YWluZXJuYW1lL2Jsb2JcIi5cbiAgICAgICAgICAgICAgICAvLyAuZ2V0UGF0aCgpIC0+IC9jb250YWluZXJuYW1lL2Jsb2JcbiAgICAgICAgICAgICAgICBjb25zdCBwYXRoQ29tcG9uZW50cyA9IHBhcnNlZFVybC5wYXRobmFtZS5tYXRjaChcIi8oW14vXSopKC8oLiopKT9cIik7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyTmFtZSA9IHBhdGhDb21wb25lbnRzWzFdO1xuICAgICAgICAgICAgICAgIGJsb2JOYW1lID0gcGF0aENvbXBvbmVudHNbM107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBkZWNvZGUgdGhlIGVuY29kZWQgYmxvYk5hbWUsIGNvbnRhaW5lck5hbWUgLSB0byBnZXQgYWxsIHRoZSBzcGVjaWFsIGNoYXJhY3RlcnMgdGhhdCBtaWdodCBiZSBwcmVzZW50IGluIHRoZW1cbiAgICAgICAgICAgIGNvbnRhaW5lck5hbWUgPSBkZWNvZGVVUklDb21wb25lbnQoY29udGFpbmVyTmFtZSk7XG4gICAgICAgICAgICBibG9iTmFtZSA9IGRlY29kZVVSSUNvbXBvbmVudChibG9iTmFtZSk7XG4gICAgICAgICAgICAvLyBBenVyZSBTdG9yYWdlIFNlcnZlciB3aWxsIHJlcGxhY2UgXCJcXFwiIHdpdGggXCIvXCIgaW4gdGhlIGJsb2IgbmFtZXNcbiAgICAgICAgICAgIC8vICAgZG9pbmcgdGhlIHNhbWUgaW4gdGhlIFNESyBzaWRlIHNvIHRoYXQgdGhlIHVzZXIgZG9lc24ndCBoYXZlIHRvIHJlcGxhY2UgXCJcXFwiIGluc3RhbmNlcyBpbiB0aGUgYmxvYk5hbWVcbiAgICAgICAgICAgIGJsb2JOYW1lID0gYmxvYk5hbWUucmVwbGFjZSgvXFxcXC9nLCBcIi9cIik7XG4gICAgICAgICAgICBpZiAoIWNvbnRhaW5lck5hbWUpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQcm92aWRlZCBjb250YWluZXJOYW1lIGlzIGludmFsaWQuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHsgYmxvYk5hbWUsIGNvbnRhaW5lck5hbWUgfTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBleHRyYWN0IGJsb2JOYW1lIGFuZCBjb250YWluZXJOYW1lIHdpdGggcHJvdmlkZWQgaW5mb3JtYXRpb24uXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFzeW5jaHJvbm91c2x5IGNvcGllcyBhIGJsb2IgdG8gYSBkZXN0aW5hdGlvbiB3aXRoaW4gdGhlIHN0b3JhZ2UgYWNjb3VudC5cbiAgICAgKiBJbiB2ZXJzaW9uIDIwMTItMDItMTIgYW5kIGxhdGVyLCB0aGUgc291cmNlIGZvciBhIENvcHkgQmxvYiBvcGVyYXRpb24gY2FuIGJlXG4gICAgICogYSBjb21taXR0ZWQgYmxvYiBpbiBhbnkgQXp1cmUgc3RvcmFnZSBhY2NvdW50LlxuICAgICAqIEJlZ2lubmluZyB3aXRoIHZlcnNpb24gMjAxNS0wMi0yMSwgdGhlIHNvdXJjZSBmb3IgYSBDb3B5IEJsb2Igb3BlcmF0aW9uIGNhbiBiZVxuICAgICAqIGFuIEF6dXJlIGZpbGUgaW4gYW55IEF6dXJlIHN0b3JhZ2UgYWNjb3VudC5cbiAgICAgKiBPbmx5IHN0b3JhZ2UgYWNjb3VudHMgY3JlYXRlZCBvbiBvciBhZnRlciBKdW5lIDd0aCwgMjAxMiBhbGxvdyB0aGUgQ29weSBCbG9iXG4gICAgICogb3BlcmF0aW9uIHRvIGNvcHkgZnJvbSBhbm90aGVyIHN0b3JhZ2UgYWNjb3VudC5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9jb3B5LWJsb2JcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb3B5U291cmNlIC0gdXJsIHRvIHRoZSBzb3VyY2UgQXp1cmUgQmxvYi9GaWxlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgb3B0aW9ucyB0byB0aGUgQmxvYiBTdGFydCBDb3B5IEZyb20gVVJMIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBzdGFydENvcHlGcm9tVVJMKGNvcHlTb3VyY2UsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JDbGllbnQtc3RhcnRDb3B5RnJvbVVSTFwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYSwgX2IsIF9jO1xuICAgICAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0gb3B0aW9ucy5jb25kaXRpb25zIHx8IHt9O1xuICAgICAgICAgICAgb3B0aW9ucy5zb3VyY2VDb25kaXRpb25zID0gb3B0aW9ucy5zb3VyY2VDb25kaXRpb25zIHx8IHt9O1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuYmxvYkNvbnRleHQuc3RhcnRDb3B5RnJvbVVSTChjb3B5U291cmNlLCB7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbWV0YWRhdGE6IG9wdGlvbnMubWV0YWRhdGEsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIHNvdXJjZU1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICBzb3VyY2VJZk1hdGNoOiBvcHRpb25zLnNvdXJjZUNvbmRpdGlvbnMuaWZNYXRjaCxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlSWZNb2RpZmllZFNpbmNlOiBvcHRpb25zLnNvdXJjZUNvbmRpdGlvbnMuaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VJZk5vbmVNYXRjaDogb3B0aW9ucy5zb3VyY2VDb25kaXRpb25zLmlmTm9uZU1hdGNoLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VJZlVubW9kaWZpZWRTaW5jZTogb3B0aW9ucy5zb3VyY2VDb25kaXRpb25zLmlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VJZlRhZ3M6IG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucy50YWdDb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5RXhwaXJ5OiAoX2IgPSBvcHRpb25zLmltbXV0YWJpbGl0eVBvbGljeSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmV4cGlyaWVzT24sXG4gICAgICAgICAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5TW9kZTogKF9jID0gb3B0aW9ucy5pbW11dGFiaWxpdHlQb2xpY3kpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5wb2xpY3lNb2RlLFxuICAgICAgICAgICAgICAgIGxlZ2FsSG9sZDogb3B0aW9ucy5sZWdhbEhvbGQsXG4gICAgICAgICAgICAgICAgcmVoeWRyYXRlUHJpb3JpdHk6IG9wdGlvbnMucmVoeWRyYXRlUHJpb3JpdHksXG4gICAgICAgICAgICAgICAgdGllcjogdG9BY2Nlc3NUaWVyKG9wdGlvbnMudGllciksXG4gICAgICAgICAgICAgICAgYmxvYlRhZ3NTdHJpbmc6IHRvQmxvYlRhZ3NTdHJpbmcob3B0aW9ucy50YWdzKSxcbiAgICAgICAgICAgICAgICBzZWFsQmxvYjogb3B0aW9ucy5zZWFsQmxvYixcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBPbmx5IGF2YWlsYWJsZSBmb3IgQmxvYkNsaWVudCBjb25zdHJ1Y3RlZCB3aXRoIGEgc2hhcmVkIGtleSBjcmVkZW50aWFsLlxuICAgICAqXG4gICAgICogR2VuZXJhdGVzIGEgQmxvYiBTZXJ2aWNlIFNoYXJlZCBBY2Nlc3MgU2lnbmF0dXJlIChTQVMpIFVSSSBiYXNlZCBvbiB0aGUgY2xpZW50IHByb3BlcnRpZXNcbiAgICAgKiBhbmQgcGFyYW1ldGVycyBwYXNzZWQgaW4uIFRoZSBTQVMgaXMgc2lnbmVkIGJ5IHRoZSBzaGFyZWQga2V5IGNyZWRlbnRpYWwgb2YgdGhlIGNsaWVudC5cbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2NvbnN0cnVjdGluZy1hLXNlcnZpY2Utc2FzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIHBhcmFtZXRlcnMuXG4gICAgICogQHJldHVybnMgVGhlIFNBUyBVUkkgY29uc2lzdGluZyBvZiB0aGUgVVJJIHRvIHRoZSByZXNvdXJjZSByZXByZXNlbnRlZCBieSB0aGlzIGNsaWVudCwgZm9sbG93ZWQgYnkgdGhlIGdlbmVyYXRlZCBTQVMgdG9rZW4uXG4gICAgICovXG4gICAgZ2VuZXJhdGVTYXNVcmwob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIGlmICghKHRoaXMuY3JlZGVudGlhbCBpbnN0YW5jZW9mIFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiQ2FuIG9ubHkgZ2VuZXJhdGUgdGhlIFNBUyB3aGVuIHRoZSBjbGllbnQgaXMgaW5pdGlhbGl6ZWQgd2l0aCBhIHNoYXJlZCBrZXkgY3JlZGVudGlhbFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHNhcyA9IGdlbmVyYXRlQmxvYlNBU1F1ZXJ5UGFyYW1ldGVycyhPYmplY3QuYXNzaWduKHsgY29udGFpbmVyTmFtZTogdGhpcy5fY29udGFpbmVyTmFtZSwgYmxvYk5hbWU6IHRoaXMuX25hbWUsIHNuYXBzaG90VGltZTogdGhpcy5fc25hcHNob3QsIHZlcnNpb25JZDogdGhpcy5fdmVyc2lvbklkIH0sIG9wdGlvbnMpLCB0aGlzLmNyZWRlbnRpYWwpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICByZXNvbHZlKGFwcGVuZFRvVVJMUXVlcnkodGhpcy51cmwsIHNhcykpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogT25seSBhdmFpbGFibGUgZm9yIEJsb2JDbGllbnQgY29uc3RydWN0ZWQgd2l0aCBhIHNoYXJlZCBrZXkgY3JlZGVudGlhbC5cbiAgICAgKlxuICAgICAqIEdlbmVyYXRlcyBzdHJpbmcgdG8gc2lnbiBmb3IgYSBCbG9iIFNlcnZpY2UgU2hhcmVkIEFjY2VzcyBTaWduYXR1cmUgKFNBUykgVVJJIGJhc2VkIG9uXG4gICAgICogdGhlIGNsaWVudCBwcm9wZXJ0aWVzIGFuZCBwYXJhbWV0ZXJzIHBhc3NlZCBpbi4gVGhlIFNBUyBpcyBzaWduZWQgYnkgdGhlIHNoYXJlZCBrZXkgY3JlZGVudGlhbCBvZiB0aGUgY2xpZW50LlxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvY29uc3RydWN0aW5nLWEtc2VydmljZS1zYXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgcGFyYW1ldGVycy5cbiAgICAgKiBAcmV0dXJucyBUaGUgU0FTIFVSSSBjb25zaXN0aW5nIG9mIHRoZSBVUkkgdG8gdGhlIHJlc291cmNlIHJlcHJlc2VudGVkIGJ5IHRoaXMgY2xpZW50LCBmb2xsb3dlZCBieSB0aGUgZ2VuZXJhdGVkIFNBUyB0b2tlbi5cbiAgICAgKi9cbiAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGF6dXJlL2F6dXJlLXNkay90cy1uYW1pbmctb3B0aW9ucyovXG4gICAgZ2VuZXJhdGVTYXNTdHJpbmdUb1NpZ24ob3B0aW9ucykge1xuICAgICAgICBpZiAoISh0aGlzLmNyZWRlbnRpYWwgaW5zdGFuY2VvZiBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiQ2FuIG9ubHkgZ2VuZXJhdGUgdGhlIFNBUyB3aGVuIHRoZSBjbGllbnQgaXMgaW5pdGlhbGl6ZWQgd2l0aCBhIHNoYXJlZCBrZXkgY3JlZGVudGlhbFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2VuZXJhdGVCbG9iU0FTUXVlcnlQYXJhbWV0ZXJzSW50ZXJuYWwoT2JqZWN0LmFzc2lnbih7IGNvbnRhaW5lck5hbWU6IHRoaXMuX2NvbnRhaW5lck5hbWUsIGJsb2JOYW1lOiB0aGlzLl9uYW1lLCBzbmFwc2hvdFRpbWU6IHRoaXMuX3NuYXBzaG90LCB2ZXJzaW9uSWQ6IHRoaXMuX3ZlcnNpb25JZCB9LCBvcHRpb25zKSwgdGhpcy5jcmVkZW50aWFsKS5zdHJpbmdUb1NpZ247XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlbGV0ZSB0aGUgaW1tdXRhYmxpbGl0eSBwb2xpY3kgb24gdGhlIGJsb2IuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIG9wdGlvbnMgdG8gZGVsZXRlIGltbXV0YWJpbGl0eSBwb2xpY3kgb24gdGhlIGJsb2IuXG4gICAgICovXG4gICAgYXN5bmMgZGVsZXRlSW1tdXRhYmlsaXR5UG9saWN5KG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JDbGllbnQtZGVsZXRlSW1tdXRhYmlsaXR5UG9saWN5XCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuYmxvYkNvbnRleHQuZGVsZXRlSW1tdXRhYmlsaXR5UG9saWN5KHtcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXQgaW1tdXRhYmlsaXR5IHBvbGljeSBvbiB0aGUgYmxvYi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgb3B0aW9ucyB0byBzZXQgaW1tdXRhYmlsaXR5IHBvbGljeSBvbiB0aGUgYmxvYi5cbiAgICAgKi9cbiAgICBhc3luYyBzZXRJbW11dGFiaWxpdHlQb2xpY3koaW1tdXRhYmlsaXR5UG9saWN5LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iQ2xpZW50LXNldEltbXV0YWJpbGl0eVBvbGljeVwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLmJsb2JDb250ZXh0LnNldEltbXV0YWJpbGl0eVBvbGljeSh7XG4gICAgICAgICAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5RXhwaXJ5OiBpbW11dGFiaWxpdHlQb2xpY3kuZXhwaXJpZXNPbixcbiAgICAgICAgICAgICAgICBpbW11dGFiaWxpdHlQb2xpY3lNb2RlOiBpbW11dGFiaWxpdHlQb2xpY3kucG9saWN5TW9kZSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXQgbGVnYWwgaG9sZCBvbiB0aGUgYmxvYi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgb3B0aW9ucyB0byBzZXQgbGVnYWwgaG9sZCBvbiB0aGUgYmxvYi5cbiAgICAgKi9cbiAgICBhc3luYyBzZXRMZWdhbEhvbGQobGVnYWxIb2xkRW5hYmxlZCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYkNsaWVudC1zZXRMZWdhbEhvbGRcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5ibG9iQ29udGV4dC5zZXRMZWdhbEhvbGQobGVnYWxIb2xkRW5hYmxlZCwge1xuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBHZXQgQWNjb3VudCBJbmZvcm1hdGlvbiBvcGVyYXRpb24gcmV0dXJucyB0aGUgc2t1IG5hbWUgYW5kIGFjY291bnQga2luZFxuICAgICAqIGZvciB0aGUgc3BlY2lmaWVkIGFjY291bnQuXG4gICAgICogVGhlIEdldCBBY2NvdW50IEluZm9ybWF0aW9uIG9wZXJhdGlvbiBpcyBhdmFpbGFibGUgb24gc2VydmljZSB2ZXJzaW9ucyBiZWdpbm5pbmdcbiAgICAgKiB3aXRoIHZlcnNpb24gMjAxOC0wMy0yOC5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9nZXQtYWNjb3VudC1pbmZvcm1hdGlvblxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHRoZSBTZXJ2aWNlIEdldCBBY2NvdW50IEluZm8gb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIFJlc3BvbnNlIGRhdGEgZm9yIHRoZSBTZXJ2aWNlIEdldCBBY2NvdW50IEluZm8gb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGdldEFjY291bnRJbmZvKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JDbGllbnQtZ2V0QWNjb3VudEluZm9cIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5ibG9iQ29udGV4dC5nZXRBY2NvdW50SW5mbyh7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4vKipcbiAqIEFwcGVuZEJsb2JDbGllbnQgZGVmaW5lcyBhIHNldCBvZiBvcGVyYXRpb25zIGFwcGxpY2FibGUgdG8gYXBwZW5kIGJsb2JzLlxuICovXG5jbGFzcyBBcHBlbmRCbG9iQ2xpZW50IGV4dGVuZHMgQmxvYkNsaWVudCB7XG4gICAgY29uc3RydWN0b3IodXJsT3JDb25uZWN0aW9uU3RyaW5nLCBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSwgYmxvYk5hbWVPck9wdGlvbnMsIFxuICAgIC8vIExlZ2FjeSwgbm8gZml4IGZvciBlc2xpbnQgZXJyb3Igd2l0aG91dCBicmVha2luZy4gRGlzYWJsZSBpdCBmb3IgdGhpcyBpbnRlcmZhY2UuXG4gICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhenVyZS9henVyZS1zZGsvdHMtbmFtaW5nLW9wdGlvbnMqL1xuICAgIG9wdGlvbnMpIHtcbiAgICAgICAgLy8gSW4gVHlwZVNjcmlwdCB3ZSBjYW5ub3Qgc2ltcGx5IHBhc3MgYWxsIHBhcmFtZXRlcnMgdG8gc3VwZXIoKSBsaWtlIGJlbG93IHNvIGhhdmUgdG8gZHVwbGljYXRlIHRoZSBjb2RlIGluc3RlYWQuXG4gICAgICAgIC8vICAgc3VwZXIocywgY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWVPck9wdGlvbnMsIGJsb2JOYW1lT3JPcHRpb25zLCBvcHRpb25zKTtcbiAgICAgICAgbGV0IHBpcGVsaW5lO1xuICAgICAgICBsZXQgdXJsO1xuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgaWYgKGlzUGlwZWxpbmVMaWtlKGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lKSkge1xuICAgICAgICAgICAgLy8gKHVybDogc3RyaW5nLCBwaXBlbGluZTogUGlwZWxpbmUpXG4gICAgICAgICAgICB1cmwgPSB1cmxPckNvbm5lY3Rpb25TdHJpbmc7XG4gICAgICAgICAgICBwaXBlbGluZSA9IGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKChjb3JlVXRpbC5pc05vZGUgJiYgY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUgaW5zdGFuY2VvZiBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbCkgfHxcbiAgICAgICAgICAgIGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lIGluc3RhbmNlb2YgQW5vbnltb3VzQ3JlZGVudGlhbCB8fFxuICAgICAgICAgICAgY29yZUF1dGguaXNUb2tlbkNyZWRlbnRpYWwoY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUpKSB7XG4gICAgICAgICAgICAvLyAodXJsOiBzdHJpbmcsIGNyZWRlbnRpYWw/OiBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbCB8IEFub255bW91c0NyZWRlbnRpYWwgfCBUb2tlbkNyZWRlbnRpYWwsIG9wdGlvbnM/OiBTdG9yYWdlUGlwZWxpbmVPcHRpb25zKSAgICAgIHVybCA9IHVybE9yQ29ubmVjdGlvblN0cmluZztcbiAgICAgICAgICAgIHVybCA9IHVybE9yQ29ubmVjdGlvblN0cmluZztcbiAgICAgICAgICAgIG9wdGlvbnMgPSBibG9iTmFtZU9yT3B0aW9ucztcbiAgICAgICAgICAgIHBpcGVsaW5lID0gbmV3UGlwZWxpbmUoY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSAmJlxuICAgICAgICAgICAgdHlwZW9mIGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAvLyAodXJsOiBzdHJpbmcsIGNyZWRlbnRpYWw/OiBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbCB8IEFub255bW91c0NyZWRlbnRpYWwgfCBUb2tlbkNyZWRlbnRpYWwsIG9wdGlvbnM/OiBTdG9yYWdlUGlwZWxpbmVPcHRpb25zKVxuICAgICAgICAgICAgdXJsID0gdXJsT3JDb25uZWN0aW9uU3RyaW5nO1xuICAgICAgICAgICAgLy8gVGhlIHNlY29uZCBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkLiBVc2UgYW5vbnltb3VzIGNyZWRlbnRpYWwuXG4gICAgICAgICAgICBwaXBlbGluZSA9IG5ld1BpcGVsaW5lKG5ldyBBbm9ueW1vdXNDcmVkZW50aWFsKCksIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lICYmXG4gICAgICAgICAgICB0eXBlb2YgY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICAgIGJsb2JOYW1lT3JPcHRpb25zICYmXG4gICAgICAgICAgICB0eXBlb2YgYmxvYk5hbWVPck9wdGlvbnMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIC8vIChjb25uZWN0aW9uU3RyaW5nOiBzdHJpbmcsIGNvbnRhaW5lck5hbWU6IHN0cmluZywgYmxvYk5hbWU6IHN0cmluZywgb3B0aW9ucz86IFN0b3JhZ2VQaXBlbGluZU9wdGlvbnMpXG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJOYW1lID0gY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWU7XG4gICAgICAgICAgICBjb25zdCBibG9iTmFtZSA9IGJsb2JOYW1lT3JPcHRpb25zO1xuICAgICAgICAgICAgY29uc3QgZXh0cmFjdGVkQ3JlZHMgPSBleHRyYWN0Q29ubmVjdGlvblN0cmluZ1BhcnRzKHVybE9yQ29ubmVjdGlvblN0cmluZyk7XG4gICAgICAgICAgICBpZiAoZXh0cmFjdGVkQ3JlZHMua2luZCA9PT0gXCJBY2NvdW50Q29ublN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvcmVVdGlsLmlzTm9kZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaGFyZWRLZXlDcmVkZW50aWFsID0gbmV3IFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsKGV4dHJhY3RlZENyZWRzLmFjY291bnROYW1lLCBleHRyYWN0ZWRDcmVkcy5hY2NvdW50S2V5KTtcbiAgICAgICAgICAgICAgICAgICAgdXJsID0gYXBwZW5kVG9VUkxQYXRoKGFwcGVuZFRvVVJMUGF0aChleHRyYWN0ZWRDcmVkcy51cmwsIGVuY29kZVVSSUNvbXBvbmVudChjb250YWluZXJOYW1lKSksIGVuY29kZVVSSUNvbXBvbmVudChibG9iTmFtZSkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMucHJveHlPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnByb3h5T3B0aW9ucyA9IGNvcmVSZXN0UGlwZWxpbmUuZ2V0RGVmYXVsdFByb3h5U2V0dGluZ3MoZXh0cmFjdGVkQ3JlZHMucHJveHlVcmkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHBpcGVsaW5lID0gbmV3UGlwZWxpbmUoc2hhcmVkS2V5Q3JlZGVudGlhbCwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBY2NvdW50IGNvbm5lY3Rpb24gc3RyaW5nIGlzIG9ubHkgc3VwcG9ydGVkIGluIE5vZGUuanMgZW52aXJvbm1lbnRcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZXh0cmFjdGVkQ3JlZHMua2luZCA9PT0gXCJTQVNDb25uU3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICB1cmwgPVxuICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb1VSTFBhdGgoYXBwZW5kVG9VUkxQYXRoKGV4dHJhY3RlZENyZWRzLnVybCwgZW5jb2RlVVJJQ29tcG9uZW50KGNvbnRhaW5lck5hbWUpKSwgZW5jb2RlVVJJQ29tcG9uZW50KGJsb2JOYW1lKSkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCI/XCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFjdGVkQ3JlZHMuYWNjb3VudFNhcztcbiAgICAgICAgICAgICAgICBwaXBlbGluZSA9IG5ld1BpcGVsaW5lKG5ldyBBbm9ueW1vdXNDcmVkZW50aWFsKCksIG9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29ubmVjdGlvbiBzdHJpbmcgbXVzdCBiZSBlaXRoZXIgYW4gQWNjb3VudCBjb25uZWN0aW9uIHN0cmluZyBvciBhIFNBUyBjb25uZWN0aW9uIHN0cmluZ1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGluZyBub24tZW1wdHkgc3RyaW5ncyBmb3IgY29udGFpbmVyTmFtZSBhbmQgYmxvYk5hbWUgcGFyYW1ldGVyc1wiKTtcbiAgICAgICAgfVxuICAgICAgICBzdXBlcih1cmwsIHBpcGVsaW5lKTtcbiAgICAgICAgdGhpcy5hcHBlbmRCbG9iQ29udGV4dCA9IHRoaXMuc3RvcmFnZUNsaWVudENvbnRleHQuYXBwZW5kQmxvYjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBBcHBlbmRCbG9iQ2xpZW50IG9iamVjdCBpZGVudGljYWwgdG8gdGhlIHNvdXJjZSBidXQgd2l0aCB0aGVcbiAgICAgKiBzcGVjaWZpZWQgc25hcHNob3QgdGltZXN0YW1wLlxuICAgICAqIFByb3ZpZGUgXCJcIiB3aWxsIHJlbW92ZSB0aGUgc25hcHNob3QgYW5kIHJldHVybiBhIENsaWVudCB0byB0aGUgYmFzZSBibG9iLlxuICAgICAqXG4gICAgICogQHBhcmFtIHNuYXBzaG90IC0gVGhlIHNuYXBzaG90IHRpbWVzdGFtcC5cbiAgICAgKiBAcmV0dXJucyBBIG5ldyBBcHBlbmRCbG9iQ2xpZW50IG9iamVjdCBpZGVudGljYWwgdG8gdGhlIHNvdXJjZSBidXQgd2l0aCB0aGUgc3BlY2lmaWVkIHNuYXBzaG90IHRpbWVzdGFtcC5cbiAgICAgKi9cbiAgICB3aXRoU25hcHNob3Qoc25hcHNob3QpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBcHBlbmRCbG9iQ2xpZW50KHNldFVSTFBhcmFtZXRlcih0aGlzLnVybCwgVVJMQ29uc3RhbnRzLlBhcmFtZXRlcnMuU05BUFNIT1QsIHNuYXBzaG90Lmxlbmd0aCA9PT0gMCA/IHVuZGVmaW5lZCA6IHNuYXBzaG90KSwgdGhpcy5waXBlbGluZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSAwLWxlbmd0aCBhcHBlbmQgYmxvYi4gQ2FsbCBBcHBlbmRCbG9jayB0byBhcHBlbmQgZGF0YSB0byBhbiBhcHBlbmQgYmxvYi5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9wdXQtYmxvYlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHRoZSBBcHBlbmQgQmxvY2sgQ3JlYXRlIG9wZXJhdGlvbi5cbiAgICAgKlxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2FnZTpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogY29uc3QgYXBwZW5kQmxvYkNsaWVudCA9IGNvbnRhaW5lckNsaWVudC5nZXRBcHBlbmRCbG9iQ2xpZW50KFwiPGJsb2IgbmFtZT5cIik7XG4gICAgICogYXdhaXQgYXBwZW5kQmxvYkNsaWVudC5jcmVhdGUoKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBhc3luYyBjcmVhdGUob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIG9wdGlvbnMuY29uZGl0aW9ucyA9IG9wdGlvbnMuY29uZGl0aW9ucyB8fCB7fTtcbiAgICAgICAgZW5zdXJlQ3BrSWZTcGVjaWZpZWQob3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LCB0aGlzLmlzSHR0cHMpO1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkFwcGVuZEJsb2JDbGllbnQtY3JlYXRlXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5hcHBlbmRCbG9iQ29udGV4dC5jcmVhdGUoMCwge1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGJsb2JIdHRwSGVhZGVyczogb3B0aW9ucy5ibG9iSFRUUEhlYWRlcnMsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbWV0YWRhdGE6IG9wdGlvbnMubWV0YWRhdGEsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIGNwa0luZm86IG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSxcbiAgICAgICAgICAgICAgICBlbmNyeXB0aW9uU2NvcGU6IG9wdGlvbnMuZW5jcnlwdGlvblNjb3BlLFxuICAgICAgICAgICAgICAgIGltbXV0YWJpbGl0eVBvbGljeUV4cGlyeTogKF9iID0gb3B0aW9ucy5pbW11dGFiaWxpdHlQb2xpY3kpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5leHBpcmllc09uLFxuICAgICAgICAgICAgICAgIGltbXV0YWJpbGl0eVBvbGljeU1vZGU6IChfYyA9IG9wdGlvbnMuaW1tdXRhYmlsaXR5UG9saWN5KSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MucG9saWN5TW9kZSxcbiAgICAgICAgICAgICAgICBsZWdhbEhvbGQ6IG9wdGlvbnMubGVnYWxIb2xkLFxuICAgICAgICAgICAgICAgIGJsb2JUYWdzU3RyaW5nOiB0b0Jsb2JUYWdzU3RyaW5nKG9wdGlvbnMudGFncyksXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIDAtbGVuZ3RoIGFwcGVuZCBibG9iLiBDYWxsIEFwcGVuZEJsb2NrIHRvIGFwcGVuZCBkYXRhIHRvIGFuIGFwcGVuZCBibG9iLlxuICAgICAqIElmIHRoZSBibG9iIHdpdGggdGhlIHNhbWUgbmFtZSBhbHJlYWR5IGV4aXN0cywgdGhlIGNvbnRlbnQgb2YgdGhlIGV4aXN0aW5nIGJsb2Igd2lsbCByZW1haW4gdW5jaGFuZ2VkLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL3B1dC1ibG9iXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtXG4gICAgICovXG4gICAgYXN5bmMgY3JlYXRlSWZOb3RFeGlzdHMob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IGNvbmRpdGlvbnMgPSB7IGlmTm9uZU1hdGNoOiBFVGFnQW55IH07XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQXBwZW5kQmxvYkNsaWVudC1jcmVhdGVJZk5vdEV4aXN0c1wiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuY3JlYXRlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgdXBkYXRlZE9wdGlvbnMpLCB7IGNvbmRpdGlvbnMgfSkpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHsgc3VjY2VlZGVkOiB0cnVlIH0sIHJlcyksIHsgX3Jlc3BvbnNlOiByZXMuX3Jlc3BvbnNlIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoKChfYSA9IGUuZGV0YWlscykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmVycm9yQ29kZSkgPT09IFwiQmxvYkFscmVhZHlFeGlzdHNcIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHsgc3VjY2VlZGVkOiBmYWxzZSB9LCAoX2IgPSBlLnJlc3BvbnNlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IucGFyc2VkSGVhZGVycyksIHsgX3Jlc3BvbnNlOiBlLnJlc3BvbnNlIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2VhbHMgdGhlIGFwcGVuZCBibG9iLCBtYWtpbmcgaXQgcmVhZCBvbmx5LlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLVxuICAgICAqL1xuICAgIGFzeW5jIHNlYWwob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIG9wdGlvbnMuY29uZGl0aW9ucyA9IG9wdGlvbnMuY29uZGl0aW9ucyB8fCB7fTtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJBcHBlbmRCbG9iQ2xpZW50LXNlYWxcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5hcHBlbmRCbG9iQ29udGV4dC5zZWFsKHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBhcHBlbmRQb3NpdGlvbkFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29tbWl0cyBhIG5ldyBibG9jayBvZiBkYXRhIHRvIHRoZSBlbmQgb2YgdGhlIGV4aXN0aW5nIGFwcGVuZCBibG9iLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2FwcGVuZC1ibG9ja1xuICAgICAqXG4gICAgICogQHBhcmFtIGJvZHkgLSBEYXRhIHRvIGJlIGFwcGVuZGVkLlxuICAgICAqIEBwYXJhbSBjb250ZW50TGVuZ3RoIC0gTGVuZ3RoIG9mIHRoZSBib2R5IGluIGJ5dGVzLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB0aGUgQXBwZW5kIEJsb2NrIG9wZXJhdGlvbi5cbiAgICAgKlxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2FnZTpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogY29uc3QgY29udGVudCA9IFwiSGVsbG8gV29ybGQhXCI7XG4gICAgICpcbiAgICAgKiAvLyBDcmVhdGUgYSBuZXcgYXBwZW5kIGJsb2IgYW5kIGFwcGVuZCBkYXRhIHRvIHRoZSBibG9iLlxuICAgICAqIGNvbnN0IG5ld0FwcGVuZEJsb2JDbGllbnQgPSBjb250YWluZXJDbGllbnQuZ2V0QXBwZW5kQmxvYkNsaWVudChcIjxibG9iIG5hbWU+XCIpO1xuICAgICAqIGF3YWl0IG5ld0FwcGVuZEJsb2JDbGllbnQuY3JlYXRlKCk7XG4gICAgICogYXdhaXQgbmV3QXBwZW5kQmxvYkNsaWVudC5hcHBlbmRCbG9jayhjb250ZW50LCBjb250ZW50Lmxlbmd0aCk7XG4gICAgICpcbiAgICAgKiAvLyBBcHBlbmQgZGF0YSB0byBhbiBleGlzdGluZyBhcHBlbmQgYmxvYi5cbiAgICAgKiBjb25zdCBleGlzdGluZ0FwcGVuZEJsb2JDbGllbnQgPSBjb250YWluZXJDbGllbnQuZ2V0QXBwZW5kQmxvYkNsaWVudChcIjxibG9iIG5hbWU+XCIpO1xuICAgICAqIGF3YWl0IGV4aXN0aW5nQXBwZW5kQmxvYkNsaWVudC5hcHBlbmRCbG9jayhjb250ZW50LCBjb250ZW50Lmxlbmd0aCk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgYXN5bmMgYXBwZW5kQmxvY2soYm9keSwgY29udGVudExlbmd0aCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIG9wdGlvbnMuY29uZGl0aW9ucyA9IG9wdGlvbnMuY29uZGl0aW9ucyB8fCB7fTtcbiAgICAgICAgZW5zdXJlQ3BrSWZTcGVjaWZpZWQob3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LCB0aGlzLmlzSHR0cHMpO1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkFwcGVuZEJsb2JDbGllbnQtYXBwZW5kQmxvY2tcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5hcHBlbmRCbG9iQ29udGV4dC5hcHBlbmRCbG9jayhjb250ZW50TGVuZ3RoLCBib2R5LCB7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgYXBwZW5kUG9zaXRpb25BY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIHJlcXVlc3RPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgIG9uVXBsb2FkUHJvZ3Jlc3M6IG9wdGlvbnMub25Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uYWxDb250ZW50TUQ1OiBvcHRpb25zLnRyYW5zYWN0aW9uYWxDb250ZW50TUQ1LFxuICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uYWxDb250ZW50Q3JjNjQ6IG9wdGlvbnMudHJhbnNhY3Rpb25hbENvbnRlbnRDcmM2NCxcbiAgICAgICAgICAgICAgICBjcGtJbmZvOiBvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksXG4gICAgICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiBvcHRpb25zLmVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgQXBwZW5kIEJsb2NrIG9wZXJhdGlvbiBjb21taXRzIGEgbmV3IGJsb2NrIG9mIGRhdGEgdG8gdGhlIGVuZCBvZiBhbiBleGlzdGluZyBhcHBlbmQgYmxvYlxuICAgICAqIHdoZXJlIHRoZSBjb250ZW50cyBhcmUgcmVhZCBmcm9tIGEgc291cmNlIHVybC5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9hcHBlbmQtYmxvY2stZnJvbS11cmxcbiAgICAgKlxuICAgICAqIEBwYXJhbSBzb3VyY2VVUkwgLVxuICAgICAqICAgICAgICAgICAgICAgICBUaGUgdXJsIHRvIHRoZSBibG9iIHRoYXQgd2lsbCBiZSB0aGUgc291cmNlIG9mIHRoZSBjb3B5LiBBIHNvdXJjZSBibG9iIGluIHRoZSBzYW1lIHN0b3JhZ2UgYWNjb3VudCBjYW5cbiAgICAgKiAgICAgICAgICAgICAgICAgYmUgYXV0aGVudGljYXRlZCB2aWEgU2hhcmVkIEtleS4gSG93ZXZlciwgaWYgdGhlIHNvdXJjZSBpcyBhIGJsb2IgaW4gYW5vdGhlciBhY2NvdW50LCB0aGUgc291cmNlIGJsb2JcbiAgICAgKiAgICAgICAgICAgICAgICAgbXVzdCBlaXRoZXIgYmUgcHVibGljIG9yIG11c3QgYmUgYXV0aGVudGljYXRlZCB2aWEgYSBzaGFyZWQgYWNjZXNzIHNpZ25hdHVyZS4gSWYgdGhlIHNvdXJjZSBibG9iIGlzXG4gICAgICogICAgICAgICAgICAgICAgIHB1YmxpYywgbm8gYXV0aGVudGljYXRpb24gaXMgcmVxdWlyZWQgdG8gcGVyZm9ybSB0aGUgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSBzb3VyY2VPZmZzZXQgLSBPZmZzZXQgaW4gc291cmNlIHRvIGJlIGFwcGVuZGVkXG4gICAgICogQHBhcmFtIGNvdW50IC0gTnVtYmVyIG9mIGJ5dGVzIHRvIGJlIGFwcGVuZGVkIGFzIGEgYmxvY2tcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtXG4gICAgICovXG4gICAgYXN5bmMgYXBwZW5kQmxvY2tGcm9tVVJMKHNvdXJjZVVSTCwgc291cmNlT2Zmc2V0LCBjb3VudCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIG9wdGlvbnMuY29uZGl0aW9ucyA9IG9wdGlvbnMuY29uZGl0aW9ucyB8fCB7fTtcbiAgICAgICAgb3B0aW9ucy5zb3VyY2VDb25kaXRpb25zID0gb3B0aW9ucy5zb3VyY2VDb25kaXRpb25zIHx8IHt9O1xuICAgICAgICBlbnN1cmVDcGtJZlNwZWNpZmllZChvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksIHRoaXMuaXNIdHRwcyk7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQXBwZW5kQmxvYkNsaWVudC1hcHBlbmRCbG9ja0Zyb21VUkxcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lO1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuYXBwZW5kQmxvYkNvbnRleHQuYXBwZW5kQmxvY2tGcm9tVXJsKHNvdXJjZVVSTCwgMCwge1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIHNvdXJjZVJhbmdlOiByYW5nZVRvU3RyaW5nKHsgb2Zmc2V0OiBzb3VyY2VPZmZzZXQsIGNvdW50IH0pLFxuICAgICAgICAgICAgICAgIHNvdXJjZUNvbnRlbnRNRDU6IG9wdGlvbnMuc291cmNlQ29udGVudE1ENSxcbiAgICAgICAgICAgICAgICBzb3VyY2VDb250ZW50Q3JjNjQ6IG9wdGlvbnMuc291cmNlQ29udGVudENyYzY0LFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIGFwcGVuZFBvc2l0aW9uQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICBzb3VyY2VNb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgc291cmNlSWZNYXRjaDogKF9iID0gb3B0aW9ucy5zb3VyY2VDb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaWZNYXRjaCxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlSWZNb2RpZmllZFNpbmNlOiAoX2MgPSBvcHRpb25zLnNvdXJjZUNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5pZk1vZGlmaWVkU2luY2UsXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUlmTm9uZU1hdGNoOiAoX2QgPSBvcHRpb25zLnNvdXJjZUNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZC5pZk5vbmVNYXRjaCxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlSWZVbm1vZGlmaWVkU2luY2U6IChfZSA9IG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucykgPT09IG51bGwgfHwgX2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9lLmlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY29weVNvdXJjZUF1dGhvcml6YXRpb246IGh0dHBBdXRob3JpemF0aW9uVG9TdHJpbmcob3B0aW9ucy5zb3VyY2VBdXRob3JpemF0aW9uKSxcbiAgICAgICAgICAgICAgICBjcGtJbmZvOiBvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksXG4gICAgICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiBvcHRpb25zLmVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbi8qKlxuICogQmxvY2tCbG9iQ2xpZW50IGRlZmluZXMgYSBzZXQgb2Ygb3BlcmF0aW9ucyBhcHBsaWNhYmxlIHRvIGJsb2NrIGJsb2JzLlxuICovXG5jbGFzcyBCbG9ja0Jsb2JDbGllbnQgZXh0ZW5kcyBCbG9iQ2xpZW50IHtcbiAgICBjb25zdHJ1Y3Rvcih1cmxPckNvbm5lY3Rpb25TdHJpbmcsIGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lLCBibG9iTmFtZU9yT3B0aW9ucywgXG4gICAgLy8gTGVnYWN5LCBubyBmaXggZm9yIGVzbGludCBlcnJvciB3aXRob3V0IGJyZWFraW5nLiBEaXNhYmxlIGl0IGZvciB0aGlzIGludGVyZmFjZS5cbiAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGF6dXJlL2F6dXJlLXNkay90cy1uYW1pbmctb3B0aW9ucyovXG4gICAgb3B0aW9ucykge1xuICAgICAgICAvLyBJbiBUeXBlU2NyaXB0IHdlIGNhbm5vdCBzaW1wbHkgcGFzcyBhbGwgcGFyYW1ldGVycyB0byBzdXBlcigpIGxpa2UgYmVsb3cgc28gaGF2ZSB0byBkdXBsaWNhdGUgdGhlIGNvZGUgaW5zdGVhZC5cbiAgICAgICAgLy8gICBzdXBlcihzLCBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZU9yT3B0aW9ucywgYmxvYk5hbWVPck9wdGlvbnMsIG9wdGlvbnMpO1xuICAgICAgICBsZXQgcGlwZWxpbmU7XG4gICAgICAgIGxldCB1cmw7XG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgICAgICBpZiAoaXNQaXBlbGluZUxpa2UoY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUpKSB7XG4gICAgICAgICAgICAvLyAodXJsOiBzdHJpbmcsIHBpcGVsaW5lOiBQaXBlbGluZSlcbiAgICAgICAgICAgIHVybCA9IHVybE9yQ29ubmVjdGlvblN0cmluZztcbiAgICAgICAgICAgIHBpcGVsaW5lID0gY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoKGNvcmVVdGlsLmlzTm9kZSAmJiBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSBpbnN0YW5jZW9mIFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsKSB8fFxuICAgICAgICAgICAgY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUgaW5zdGFuY2VvZiBBbm9ueW1vdXNDcmVkZW50aWFsIHx8XG4gICAgICAgICAgICBjb3JlQXV0aC5pc1Rva2VuQ3JlZGVudGlhbChjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSkpIHtcbiAgICAgICAgICAgIC8vICh1cmw6IHN0cmluZywgY3JlZGVudGlhbD86IFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsIHwgQW5vbnltb3VzQ3JlZGVudGlhbCB8IFRva2VuQ3JlZGVudGlhbCwgb3B0aW9ucz86IFN0b3JhZ2VQaXBlbGluZU9wdGlvbnMpXG4gICAgICAgICAgICB1cmwgPSB1cmxPckNvbm5lY3Rpb25TdHJpbmc7XG4gICAgICAgICAgICBvcHRpb25zID0gYmxvYk5hbWVPck9wdGlvbnM7XG4gICAgICAgICAgICBwaXBlbGluZSA9IG5ld1BpcGVsaW5lKGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUgJiZcbiAgICAgICAgICAgIHR5cGVvZiBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgLy8gKHVybDogc3RyaW5nLCBjcmVkZW50aWFsPzogU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwgfCBBbm9ueW1vdXNDcmVkZW50aWFsIHwgVG9rZW5DcmVkZW50aWFsLCBvcHRpb25zPzogU3RvcmFnZVBpcGVsaW5lT3B0aW9ucylcbiAgICAgICAgICAgIC8vIFRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZC4gVXNlIGFub255bW91cyBjcmVkZW50aWFsLlxuICAgICAgICAgICAgdXJsID0gdXJsT3JDb25uZWN0aW9uU3RyaW5nO1xuICAgICAgICAgICAgaWYgKGJsb2JOYW1lT3JPcHRpb25zICYmIHR5cGVvZiBibG9iTmFtZU9yT3B0aW9ucyAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMgPSBibG9iTmFtZU9yT3B0aW9ucztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBpcGVsaW5lID0gbmV3UGlwZWxpbmUobmV3IEFub255bW91c0NyZWRlbnRpYWwoKSwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUgJiZcbiAgICAgICAgICAgIHR5cGVvZiBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgYmxvYk5hbWVPck9wdGlvbnMgJiZcbiAgICAgICAgICAgIHR5cGVvZiBibG9iTmFtZU9yT3B0aW9ucyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgLy8gKGNvbm5lY3Rpb25TdHJpbmc6IHN0cmluZywgY29udGFpbmVyTmFtZTogc3RyaW5nLCBibG9iTmFtZTogc3RyaW5nLCBvcHRpb25zPzogU3RvcmFnZVBpcGVsaW5lT3B0aW9ucylcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lck5hbWUgPSBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZTtcbiAgICAgICAgICAgIGNvbnN0IGJsb2JOYW1lID0gYmxvYk5hbWVPck9wdGlvbnM7XG4gICAgICAgICAgICBjb25zdCBleHRyYWN0ZWRDcmVkcyA9IGV4dHJhY3RDb25uZWN0aW9uU3RyaW5nUGFydHModXJsT3JDb25uZWN0aW9uU3RyaW5nKTtcbiAgICAgICAgICAgIGlmIChleHRyYWN0ZWRDcmVkcy5raW5kID09PSBcIkFjY291bnRDb25uU3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29yZVV0aWwuaXNOb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNoYXJlZEtleUNyZWRlbnRpYWwgPSBuZXcgU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwoZXh0cmFjdGVkQ3JlZHMuYWNjb3VudE5hbWUsIGV4dHJhY3RlZENyZWRzLmFjY291bnRLZXkpO1xuICAgICAgICAgICAgICAgICAgICB1cmwgPSBhcHBlbmRUb1VSTFBhdGgoYXBwZW5kVG9VUkxQYXRoKGV4dHJhY3RlZENyZWRzLnVybCwgZW5jb2RlVVJJQ29tcG9uZW50KGNvbnRhaW5lck5hbWUpKSwgZW5jb2RlVVJJQ29tcG9uZW50KGJsb2JOYW1lKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucy5wcm94eU9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMucHJveHlPcHRpb25zID0gY29yZVJlc3RQaXBlbGluZS5nZXREZWZhdWx0UHJveHlTZXR0aW5ncyhleHRyYWN0ZWRDcmVkcy5wcm94eVVyaSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcGlwZWxpbmUgPSBuZXdQaXBlbGluZShzaGFyZWRLZXlDcmVkZW50aWFsLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFjY291bnQgY29ubmVjdGlvbiBzdHJpbmcgaXMgb25seSBzdXBwb3J0ZWQgaW4gTm9kZS5qcyBlbnZpcm9ubWVudFwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChleHRyYWN0ZWRDcmVkcy5raW5kID09PSBcIlNBU0Nvbm5TdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIHVybCA9XG4gICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvVVJMUGF0aChhcHBlbmRUb1VSTFBhdGgoZXh0cmFjdGVkQ3JlZHMudXJsLCBlbmNvZGVVUklDb21wb25lbnQoY29udGFpbmVyTmFtZSkpLCBlbmNvZGVVUklDb21wb25lbnQoYmxvYk5hbWUpKSArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIj9cIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYWN0ZWRDcmVkcy5hY2NvdW50U2FzO1xuICAgICAgICAgICAgICAgIHBpcGVsaW5lID0gbmV3UGlwZWxpbmUobmV3IEFub255bW91c0NyZWRlbnRpYWwoKSwgb3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb25uZWN0aW9uIHN0cmluZyBtdXN0IGJlIGVpdGhlciBhbiBBY2NvdW50IGNvbm5lY3Rpb24gc3RyaW5nIG9yIGEgU0FTIGNvbm5lY3Rpb24gc3RyaW5nXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0aW5nIG5vbi1lbXB0eSBzdHJpbmdzIGZvciBjb250YWluZXJOYW1lIGFuZCBibG9iTmFtZSBwYXJhbWV0ZXJzXCIpO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyKHVybCwgcGlwZWxpbmUpO1xuICAgICAgICB0aGlzLmJsb2NrQmxvYkNvbnRleHQgPSB0aGlzLnN0b3JhZ2VDbGllbnRDb250ZXh0LmJsb2NrQmxvYjtcbiAgICAgICAgdGhpcy5fYmxvYkNvbnRleHQgPSB0aGlzLnN0b3JhZ2VDbGllbnRDb250ZXh0LmJsb2I7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgQmxvY2tCbG9iQ2xpZW50IG9iamVjdCBpZGVudGljYWwgdG8gdGhlIHNvdXJjZSBidXQgd2l0aCB0aGVcbiAgICAgKiBzcGVjaWZpZWQgc25hcHNob3QgdGltZXN0YW1wLlxuICAgICAqIFByb3ZpZGUgXCJcIiB3aWxsIHJlbW92ZSB0aGUgc25hcHNob3QgYW5kIHJldHVybiBhIFVSTCB0byB0aGUgYmFzZSBibG9iLlxuICAgICAqXG4gICAgICogQHBhcmFtIHNuYXBzaG90IC0gVGhlIHNuYXBzaG90IHRpbWVzdGFtcC5cbiAgICAgKiBAcmV0dXJucyBBIG5ldyBCbG9ja0Jsb2JDbGllbnQgb2JqZWN0IGlkZW50aWNhbCB0byB0aGUgc291cmNlIGJ1dCB3aXRoIHRoZSBzcGVjaWZpZWQgc25hcHNob3QgdGltZXN0YW1wLlxuICAgICAqL1xuICAgIHdpdGhTbmFwc2hvdChzbmFwc2hvdCkge1xuICAgICAgICByZXR1cm4gbmV3IEJsb2NrQmxvYkNsaWVudChzZXRVUkxQYXJhbWV0ZXIodGhpcy51cmwsIFVSTENvbnN0YW50cy5QYXJhbWV0ZXJzLlNOQVBTSE9ULCBzbmFwc2hvdC5sZW5ndGggPT09IDAgPyB1bmRlZmluZWQgOiBzbmFwc2hvdCksIHRoaXMucGlwZWxpbmUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBPTkxZIEFWQUlMQUJMRSBJTiBOT0RFLkpTIFJVTlRJTUUuXG4gICAgICpcbiAgICAgKiBRdWljayBxdWVyeSBmb3IgYSBKU09OIG9yIENTViBmb3JtYXR0ZWQgYmxvYi5cbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNhZ2UgKE5vZGUuanMpOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiAvLyBRdWVyeSBhbmQgY29udmVydCBhIGJsb2IgdG8gYSBzdHJpbmdcbiAgICAgKiBjb25zdCBxdWVyeUJsb2NrQmxvYlJlc3BvbnNlID0gYXdhaXQgYmxvY2tCbG9iQ2xpZW50LnF1ZXJ5KFwic2VsZWN0ICogZnJvbSBCbG9iU3RvcmFnZVwiKTtcbiAgICAgKiBjb25zdCBkb3dubG9hZGVkID0gKGF3YWl0IHN0cmVhbVRvQnVmZmVyKHF1ZXJ5QmxvY2tCbG9iUmVzcG9uc2UucmVhZGFibGVTdHJlYW1Cb2R5KSkudG9TdHJpbmcoKTtcbiAgICAgKiBjb25zb2xlLmxvZyhcIlF1ZXJ5IGJsb2IgY29udGVudDpcIiwgZG93bmxvYWRlZCk7XG4gICAgICpcbiAgICAgKiBhc3luYyBmdW5jdGlvbiBzdHJlYW1Ub0J1ZmZlcihyZWFkYWJsZVN0cmVhbSkge1xuICAgICAqICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgKiAgICAgY29uc3QgY2h1bmtzID0gW107XG4gICAgICogICAgIHJlYWRhYmxlU3RyZWFtLm9uKFwiZGF0YVwiLCAoZGF0YSkgPT4ge1xuICAgICAqICAgICAgIGNodW5rcy5wdXNoKGRhdGEgaW5zdGFuY2VvZiBCdWZmZXIgPyBkYXRhIDogQnVmZmVyLmZyb20oZGF0YSkpO1xuICAgICAqICAgICB9KTtcbiAgICAgKiAgICAgcmVhZGFibGVTdHJlYW0ub24oXCJlbmRcIiwgKCkgPT4ge1xuICAgICAqICAgICAgIHJlc29sdmUoQnVmZmVyLmNvbmNhdChjaHVua3MpKTtcbiAgICAgKiAgICAgfSk7XG4gICAgICogICAgIHJlYWRhYmxlU3RyZWFtLm9uKFwiZXJyb3JcIiwgcmVqZWN0KTtcbiAgICAgKiAgIH0pO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBwYXJhbSBxdWVyeSAtXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLVxuICAgICAqL1xuICAgIGFzeW5jIHF1ZXJ5KHF1ZXJ5LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgZW5zdXJlQ3BrSWZTcGVjaWZpZWQob3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LCB0aGlzLmlzSHR0cHMpO1xuICAgICAgICBpZiAoIWNvcmVVdGlsLmlzTm9kZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBvcGVyYXRpb24gY3VycmVudGx5IGlzIG9ubHkgc3VwcG9ydGVkIGluIE5vZGUuanMuXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvY2tCbG9iQ2xpZW50LXF1ZXJ5XCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLl9ibG9iQ29udGV4dC5xdWVyeSh7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgcXVlcnlSZXF1ZXN0OiB7XG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5VHlwZTogXCJTUUxcIixcbiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogcXVlcnksXG4gICAgICAgICAgICAgICAgICAgIGlucHV0U2VyaWFsaXphdGlvbjogdG9RdWVyeVNlcmlhbGl6YXRpb24ob3B0aW9ucy5pbnB1dFRleHRDb25maWd1cmF0aW9uKSxcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0U2VyaWFsaXphdGlvbjogdG9RdWVyeVNlcmlhbGl6YXRpb24ob3B0aW9ucy5vdXRwdXRUZXh0Q29uZmlndXJhdGlvbiksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgY3BrSW5mbzogb3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQmxvYlF1ZXJ5UmVzcG9uc2UocmVzcG9uc2UsIHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBvblByb2dyZXNzOiBvcHRpb25zLm9uUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgb25FcnJvcjogb3B0aW9ucy5vbkVycm9yLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IGJsb2NrIGJsb2IsIG9yIHVwZGF0ZXMgdGhlIGNvbnRlbnQgb2YgYW4gZXhpc3RpbmcgYmxvY2sgYmxvYi5cbiAgICAgKiBVcGRhdGluZyBhbiBleGlzdGluZyBibG9jayBibG9iIG92ZXJ3cml0ZXMgYW55IGV4aXN0aW5nIG1ldGFkYXRhIG9uIHRoZSBibG9iLlxuICAgICAqIFBhcnRpYWwgdXBkYXRlcyBhcmUgbm90IHN1cHBvcnRlZDsgdGhlIGNvbnRlbnQgb2YgdGhlIGV4aXN0aW5nIGJsb2IgaXNcbiAgICAgKiBvdmVyd3JpdHRlbiB3aXRoIHRoZSBuZXcgY29udGVudC4gVG8gcGVyZm9ybSBhIHBhcnRpYWwgdXBkYXRlIG9mIGEgYmxvY2sgYmxvYidzLFxuICAgICAqIHVzZSB7QGxpbmsgc3RhZ2VCbG9ja30gYW5kIHtAbGluayBjb21taXRCbG9ja0xpc3R9LlxuICAgICAqXG4gICAgICogVGhpcyBpcyBhIG5vbi1wYXJhbGxlbCB1cGxvYWRpbmcgbWV0aG9kLCBwbGVhc2UgdXNlIHtAbGluayB1cGxvYWRGaWxlfSxcbiAgICAgKiB7QGxpbmsgdXBsb2FkU3RyZWFtfSBvciB7QGxpbmsgdXBsb2FkQnJvd3NlckRhdGF9IGZvciBiZXR0ZXIgcGVyZm9ybWFuY2VcbiAgICAgKiB3aXRoIGNvbmN1cnJlbmN5IHVwbG9hZGluZy5cbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL3B1dC1ibG9iXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYm9keSAtIEJsb2IsIHN0cmluZywgQXJyYXlCdWZmZXIsIEFycmF5QnVmZmVyVmlldyBvciBhIGZ1bmN0aW9uXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggcmV0dXJucyBhIG5ldyBSZWFkYWJsZSBzdHJlYW0gd2hvc2Ugb2Zmc2V0IGlzIGZyb20gZGF0YSBzb3VyY2UgYmVnaW5uaW5nLlxuICAgICAqIEBwYXJhbSBjb250ZW50TGVuZ3RoIC0gTGVuZ3RoIG9mIGJvZHkgaW4gYnl0ZXMuIFVzZSBCdWZmZXIuYnl0ZUxlbmd0aCgpIHRvIGNhbGN1bGF0ZSBib2R5IGxlbmd0aCBmb3IgYVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyBpbmNsdWRpbmcgbm9uIG5vbi1CYXNlNjQvSGV4LWVuY29kZWQgY2hhcmFjdGVycy5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gdGhlIEJsb2NrIEJsb2IgVXBsb2FkIG9wZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyBSZXNwb25zZSBkYXRhIGZvciB0aGUgQmxvY2sgQmxvYiBVcGxvYWQgb3BlcmF0aW9uLlxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2FnZTpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogY29uc3QgY29udGVudCA9IFwiSGVsbG8gd29ybGQhXCI7XG4gICAgICogY29uc3QgdXBsb2FkQmxvYlJlc3BvbnNlID0gYXdhaXQgYmxvY2tCbG9iQ2xpZW50LnVwbG9hZChjb250ZW50LCBjb250ZW50Lmxlbmd0aCk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgYXN5bmMgdXBsb2FkKGJvZHksIGNvbnRlbnRMZW5ndGgsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIGVuc3VyZUNwa0lmU3BlY2lmaWVkKG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSwgdGhpcy5pc0h0dHBzKTtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9ja0Jsb2JDbGllbnQtdXBsb2FkXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5ibG9ja0Jsb2JDb250ZXh0LnVwbG9hZChjb250ZW50TGVuZ3RoLCBib2R5LCB7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgYmxvYkh0dHBIZWFkZXJzOiBvcHRpb25zLmJsb2JIVFRQSGVhZGVycyxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBtZXRhZGF0YTogb3B0aW9ucy5tZXRhZGF0YSxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgcmVxdWVzdE9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgb25VcGxvYWRQcm9ncmVzczogb3B0aW9ucy5vblByb2dyZXNzLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY3BrSW5mbzogb3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LFxuICAgICAgICAgICAgICAgIGVuY3J5cHRpb25TY29wZTogb3B0aW9ucy5lbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgICAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5RXhwaXJ5OiAoX2IgPSBvcHRpb25zLmltbXV0YWJpbGl0eVBvbGljeSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmV4cGlyaWVzT24sXG4gICAgICAgICAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5TW9kZTogKF9jID0gb3B0aW9ucy5pbW11dGFiaWxpdHlQb2xpY3kpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5wb2xpY3lNb2RlLFxuICAgICAgICAgICAgICAgIGxlZ2FsSG9sZDogb3B0aW9ucy5sZWdhbEhvbGQsXG4gICAgICAgICAgICAgICAgdGllcjogdG9BY2Nlc3NUaWVyKG9wdGlvbnMudGllciksXG4gICAgICAgICAgICAgICAgYmxvYlRhZ3NTdHJpbmc6IHRvQmxvYlRhZ3NTdHJpbmcob3B0aW9ucy50YWdzKSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IEJsb2NrIEJsb2Igd2hlcmUgdGhlIGNvbnRlbnRzIG9mIHRoZSBibG9iIGFyZSByZWFkIGZyb20gYSBnaXZlbiBVUkwuXG4gICAgICogVGhpcyBBUEkgaXMgc3VwcG9ydGVkIGJlZ2lubmluZyB3aXRoIHRoZSAyMDIwLTA0LTA4IHZlcnNpb24uIFBhcnRpYWwgdXBkYXRlc1xuICAgICAqIGFyZSBub3Qgc3VwcG9ydGVkIHdpdGggUHV0IEJsb2IgZnJvbSBVUkw7IHRoZSBjb250ZW50IG9mIGFuIGV4aXN0aW5nIGJsb2IgaXMgb3ZlcndyaXR0ZW4gd2l0aFxuICAgICAqIHRoZSBjb250ZW50IG9mIHRoZSBuZXcgYmxvYi4gIFRvIHBlcmZvcm0gcGFydGlhbCB1cGRhdGVzIHRvIGEgYmxvY2sgYmxvYuKAmXMgY29udGVudHMgdXNpbmcgYVxuICAgICAqIHNvdXJjZSBVUkwsIHVzZSB7QGxpbmsgc3RhZ2VCbG9ja0Zyb21VUkx9IGFuZCB7QGxpbmsgY29tbWl0QmxvY2tMaXN0fS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzb3VyY2VVUkwgLSBTcGVjaWZpZXMgdGhlIFVSTCBvZiB0aGUgYmxvYi4gVGhlIHZhbHVlXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBtYXkgYmUgYSBVUkwgb2YgdXAgdG8gMiBLQiBpbiBsZW5ndGggdGhhdCBzcGVjaWZpZXMgYSBibG9iLlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHZhbHVlIHNob3VsZCBiZSBVUkwtZW5jb2RlZCBhcyBpdCB3b3VsZCBhcHBlYXJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGEgcmVxdWVzdCBVUkkuIFRoZSBzb3VyY2UgYmxvYiBtdXN0IGVpdGhlciBiZSBwdWJsaWNcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIG11c3QgYmUgYXV0aGVudGljYXRlZCB2aWEgYSBzaGFyZWQgYWNjZXNzIHNpZ25hdHVyZS5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoZSBzb3VyY2UgYmxvYiBpcyBwdWJsaWMsIG5vIGF1dGhlbnRpY2F0aW9uIGlzIHJlcXVpcmVkXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICB0byBwZXJmb3JtIHRoZSBvcGVyYXRpb24uIEhlcmUgYXJlIHNvbWUgZXhhbXBsZXMgb2Ygc291cmNlIG9iamVjdCBVUkxzOlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBodHRwczovL215YWNjb3VudC5ibG9iLmNvcmUud2luZG93cy5uZXQvbXljb250YWluZXIvbXlibG9iXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAtIGh0dHBzOi8vbXlhY2NvdW50LmJsb2IuY29yZS53aW5kb3dzLm5ldC9teWNvbnRhaW5lci9teWJsb2I/c25hcHNob3Q9PERhdGVUaW1lPlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBhc3luYyBzeW5jVXBsb2FkRnJvbVVSTChzb3VyY2VVUkwsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIGVuc3VyZUNwa0lmU3BlY2lmaWVkKG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSwgdGhpcy5pc0h0dHBzKTtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9ja0Jsb2JDbGllbnQtc3luY1VwbG9hZEZyb21VUkxcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lLCBfZjtcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLmJsb2NrQmxvYkNvbnRleHQucHV0QmxvYkZyb21VcmwoMCwgc291cmNlVVJMLCBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMpLCB7IGJsb2JIdHRwSGVhZGVyczogb3B0aW9ucy5ibG9iSFRUUEhlYWRlcnMsIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLCBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksIHNvdXJjZU1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICBzb3VyY2VJZk1hdGNoOiAoX2IgPSBvcHRpb25zLnNvdXJjZUNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5pZk1hdGNoLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VJZk1vZGlmaWVkU2luY2U6IChfYyA9IG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlSWZOb25lTWF0Y2g6IChfZCA9IG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucykgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLmlmTm9uZU1hdGNoLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VJZlVubW9kaWZpZWRTaW5jZTogKF9lID0gb3B0aW9ucy5zb3VyY2VDb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2UuaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUlmVGFnczogKF9mID0gb3B0aW9ucy5zb3VyY2VDb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2YudGFnQ29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICB9LCBjcGtJbmZvOiBvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksIGNvcHlTb3VyY2VBdXRob3JpemF0aW9uOiBodHRwQXV0aG9yaXphdGlvblRvU3RyaW5nKG9wdGlvbnMuc291cmNlQXV0aG9yaXphdGlvbiksIHRpZXI6IHRvQWNjZXNzVGllcihvcHRpb25zLnRpZXIpLCBibG9iVGFnc1N0cmluZzogdG9CbG9iVGFnc1N0cmluZyhvcHRpb25zLnRhZ3MpLCBjb3B5U291cmNlVGFnczogb3B0aW9ucy5jb3B5U291cmNlVGFncywgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zIH0pKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBVcGxvYWRzIHRoZSBzcGVjaWZpZWQgYmxvY2sgdG8gdGhlIGJsb2NrIGJsb2IncyBcInN0YWdpbmcgYXJlYVwiIHRvIGJlIGxhdGVyXG4gICAgICogY29tbWl0dGVkIGJ5IGEgY2FsbCB0byBjb21taXRCbG9ja0xpc3QuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvcHV0LWJsb2NrXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYmxvY2tJZCAtIEEgNjQtYnl0ZSB2YWx1ZSB0aGF0IGlzIGJhc2U2NC1lbmNvZGVkXG4gICAgICogQHBhcmFtIGJvZHkgLSBEYXRhIHRvIHVwbG9hZCB0byB0aGUgc3RhZ2luZyBhcmVhLlxuICAgICAqIEBwYXJhbSBjb250ZW50TGVuZ3RoIC0gTnVtYmVyIG9mIGJ5dGVzIHRvIHVwbG9hZC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gdGhlIEJsb2NrIEJsb2IgU3RhZ2UgQmxvY2sgb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIFJlc3BvbnNlIGRhdGEgZm9yIHRoZSBCbG9jayBCbG9iIFN0YWdlIEJsb2NrIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBzdGFnZUJsb2NrKGJsb2NrSWQsIGJvZHksIGNvbnRlbnRMZW5ndGgsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBlbnN1cmVDcGtJZlNwZWNpZmllZChvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksIHRoaXMuaXNIdHRwcyk7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvY2tCbG9iQ2xpZW50LXN0YWdlQmxvY2tcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5ibG9ja0Jsb2JDb250ZXh0LnN0YWdlQmxvY2soYmxvY2tJZCwgY29udGVudExlbmd0aCwgYm9keSwge1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIHJlcXVlc3RPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgIG9uVXBsb2FkUHJvZ3Jlc3M6IG9wdGlvbnMub25Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uYWxDb250ZW50TUQ1OiBvcHRpb25zLnRyYW5zYWN0aW9uYWxDb250ZW50TUQ1LFxuICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uYWxDb250ZW50Q3JjNjQ6IG9wdGlvbnMudHJhbnNhY3Rpb25hbENvbnRlbnRDcmM2NCxcbiAgICAgICAgICAgICAgICBjcGtJbmZvOiBvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksXG4gICAgICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiBvcHRpb25zLmVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgU3RhZ2UgQmxvY2sgRnJvbSBVUkwgb3BlcmF0aW9uIGNyZWF0ZXMgYSBuZXcgYmxvY2sgdG8gYmUgY29tbWl0dGVkIGFzIHBhcnRcbiAgICAgKiBvZiBhIGJsb2Igd2hlcmUgdGhlIGNvbnRlbnRzIGFyZSByZWFkIGZyb20gYSBVUkwuXG4gICAgICogVGhpcyBBUEkgaXMgYXZhaWxhYmxlIHN0YXJ0aW5nIGluIHZlcnNpb24gMjAxOC0wMy0yOC5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9wdXQtYmxvY2stZnJvbS11cmxcbiAgICAgKlxuICAgICAqIEBwYXJhbSBibG9ja0lkIC0gQSA2NC1ieXRlIHZhbHVlIHRoYXQgaXMgYmFzZTY0LWVuY29kZWRcbiAgICAgKiBAcGFyYW0gc291cmNlVVJMIC0gU3BlY2lmaWVzIHRoZSBVUkwgb2YgdGhlIGJsb2IuIFRoZSB2YWx1ZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF5IGJlIGEgVVJMIG9mIHVwIHRvIDIgS0IgaW4gbGVuZ3RoIHRoYXQgc3BlY2lmaWVzIGEgYmxvYi5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB2YWx1ZSBzaG91bGQgYmUgVVJMLWVuY29kZWQgYXMgaXQgd291bGQgYXBwZWFyXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBhIHJlcXVlc3QgVVJJLiBUaGUgc291cmNlIGJsb2IgbXVzdCBlaXRoZXIgYmUgcHVibGljXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBvciBtdXN0IGJlIGF1dGhlbnRpY2F0ZWQgdmlhIGEgc2hhcmVkIGFjY2VzcyBzaWduYXR1cmUuXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB0aGUgc291cmNlIGJsb2IgaXMgcHVibGljLCBubyBhdXRoZW50aWNhdGlvbiBpcyByZXF1aXJlZFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gcGVyZm9ybSB0aGUgb3BlcmF0aW9uLiBIZXJlIGFyZSBzb21lIGV4YW1wbGVzIG9mIHNvdXJjZSBvYmplY3QgVVJMczpcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gaHR0cHM6Ly9teWFjY291bnQuYmxvYi5jb3JlLndpbmRvd3MubmV0L215Y29udGFpbmVyL215YmxvYlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBodHRwczovL215YWNjb3VudC5ibG9iLmNvcmUud2luZG93cy5uZXQvbXljb250YWluZXIvbXlibG9iP3NuYXBzaG90PTxEYXRlVGltZT5cbiAgICAgKiBAcGFyYW0gb2Zmc2V0IC0gRnJvbSB3aGljaCBwb3NpdGlvbiBvZiB0aGUgYmxvYiB0byBkb3dubG9hZCwgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDBcbiAgICAgKiBAcGFyYW0gY291bnQgLSBIb3cgbXVjaCBkYXRhIHRvIGJlIGRvd25sb2FkZWQsIGdyZWF0ZXIgdGhhbiAwLiBXaWxsIGRvd25sb2FkIHRvIHRoZSBlbmQgd2hlbiB1bmRlZmluZWRcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gdGhlIEJsb2NrIEJsb2IgU3RhZ2UgQmxvY2sgRnJvbSBVUkwgb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIFJlc3BvbnNlIGRhdGEgZm9yIHRoZSBCbG9jayBCbG9iIFN0YWdlIEJsb2NrIEZyb20gVVJMIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBzdGFnZUJsb2NrRnJvbVVSTChibG9ja0lkLCBzb3VyY2VVUkwsIG9mZnNldCA9IDAsIGNvdW50LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgZW5zdXJlQ3BrSWZTcGVjaWZpZWQob3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LCB0aGlzLmlzSHR0cHMpO1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2NrQmxvYkNsaWVudC1zdGFnZUJsb2NrRnJvbVVSTFwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLmJsb2NrQmxvYkNvbnRleHQuc3RhZ2VCbG9ja0Zyb21VUkwoYmxvY2tJZCwgMCwgc291cmNlVVJMLCB7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgc291cmNlQ29udGVudE1ENTogb3B0aW9ucy5zb3VyY2VDb250ZW50TUQ1LFxuICAgICAgICAgICAgICAgIHNvdXJjZUNvbnRlbnRDcmM2NDogb3B0aW9ucy5zb3VyY2VDb250ZW50Q3JjNjQsXG4gICAgICAgICAgICAgICAgc291cmNlUmFuZ2U6IG9mZnNldCA9PT0gMCAmJiAhY291bnQgPyB1bmRlZmluZWQgOiByYW5nZVRvU3RyaW5nKHsgb2Zmc2V0LCBjb3VudCB9KSxcbiAgICAgICAgICAgICAgICBjcGtJbmZvOiBvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksXG4gICAgICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiBvcHRpb25zLmVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgICAgICAgICBjb3B5U291cmNlQXV0aG9yaXphdGlvbjogaHR0cEF1dGhvcml6YXRpb25Ub1N0cmluZyhvcHRpb25zLnNvdXJjZUF1dGhvcml6YXRpb24pLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyaXRlcyBhIGJsb2IgYnkgc3BlY2lmeWluZyB0aGUgbGlzdCBvZiBibG9jayBJRHMgdGhhdCBtYWtlIHVwIHRoZSBibG9iLlxuICAgICAqIEluIG9yZGVyIHRvIGJlIHdyaXR0ZW4gYXMgcGFydCBvZiBhIGJsb2IsIGEgYmxvY2sgbXVzdCBoYXZlIGJlZW4gc3VjY2Vzc2Z1bGx5IHdyaXR0ZW5cbiAgICAgKiB0byB0aGUgc2VydmVyIGluIGEgcHJpb3Ige0BsaW5rIHN0YWdlQmxvY2t9IG9wZXJhdGlvbi4gWW91IGNhbiBjYWxsIHtAbGluayBjb21taXRCbG9ja0xpc3R9IHRvXG4gICAgICogdXBkYXRlIGEgYmxvYiBieSB1cGxvYWRpbmcgb25seSB0aG9zZSBibG9ja3MgdGhhdCBoYXZlIGNoYW5nZWQsIHRoZW4gY29tbWl0dGluZyB0aGUgbmV3IGFuZCBleGlzdGluZ1xuICAgICAqIGJsb2NrcyB0b2dldGhlci4gQW55IGJsb2NrcyBub3Qgc3BlY2lmaWVkIGluIHRoZSBibG9jayBsaXN0IGFuZCBwZXJtYW5lbnRseSBkZWxldGVkLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL3B1dC1ibG9jay1saXN0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gYmxvY2tzIC0gIEFycmF5IG9mIDY0LWJ5dGUgdmFsdWUgdGhhdCBpcyBiYXNlNjQtZW5jb2RlZFxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB0aGUgQmxvY2sgQmxvYiBDb21taXQgQmxvY2sgTGlzdCBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgdGhlIEJsb2NrIEJsb2IgQ29tbWl0IEJsb2NrIExpc3Qgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGNvbW1pdEJsb2NrTGlzdChibG9ja3MsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIGVuc3VyZUNwa0lmU3BlY2lmaWVkKG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSwgdGhpcy5pc0h0dHBzKTtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9ja0Jsb2JDbGllbnQtY29tbWl0QmxvY2tMaXN0XCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5ibG9ja0Jsb2JDb250ZXh0LmNvbW1pdEJsb2NrTGlzdCh7IGxhdGVzdDogYmxvY2tzIH0sIHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBibG9iSHR0cEhlYWRlcnM6IG9wdGlvbnMuYmxvYkhUVFBIZWFkZXJzLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIG1ldGFkYXRhOiBvcHRpb25zLm1ldGFkYXRhLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICBjcGtJbmZvOiBvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksXG4gICAgICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiBvcHRpb25zLmVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgICAgICAgICBpbW11dGFiaWxpdHlQb2xpY3lFeHBpcnk6IChfYiA9IG9wdGlvbnMuaW1tdXRhYmlsaXR5UG9saWN5KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuZXhwaXJpZXNPbixcbiAgICAgICAgICAgICAgICBpbW11dGFiaWxpdHlQb2xpY3lNb2RlOiAoX2MgPSBvcHRpb25zLmltbXV0YWJpbGl0eVBvbGljeSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLnBvbGljeU1vZGUsXG4gICAgICAgICAgICAgICAgbGVnYWxIb2xkOiBvcHRpb25zLmxlZ2FsSG9sZCxcbiAgICAgICAgICAgICAgICB0aWVyOiB0b0FjY2Vzc1RpZXIob3B0aW9ucy50aWVyKSxcbiAgICAgICAgICAgICAgICBibG9iVGFnc1N0cmluZzogdG9CbG9iVGFnc1N0cmluZyhvcHRpb25zLnRhZ3MpLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGxpc3Qgb2YgYmxvY2tzIHRoYXQgaGF2ZSBiZWVuIHVwbG9hZGVkIGFzIHBhcnQgb2YgYSBibG9jayBibG9iXG4gICAgICogdXNpbmcgdGhlIHNwZWNpZmllZCBibG9jayBsaXN0IGZpbHRlci5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9nZXQtYmxvY2stbGlzdFxuICAgICAqXG4gICAgICogQHBhcmFtIGxpc3RUeXBlIC0gU3BlY2lmaWVzIHdoZXRoZXIgdG8gcmV0dXJuIHRoZSBsaXN0IG9mIGNvbW1pdHRlZCBibG9ja3MsXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGxpc3Qgb2YgdW5jb21taXR0ZWQgYmxvY2tzLCBvciBib3RoIGxpc3RzIHRvZ2V0aGVyLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB0aGUgQmxvY2sgQmxvYiBHZXQgQmxvY2sgTGlzdCBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgdGhlIEJsb2NrIEJsb2IgR2V0IEJsb2NrIExpc3Qgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGdldEJsb2NrTGlzdChsaXN0VHlwZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvY2tCbG9iQ2xpZW50LWdldEJsb2NrTGlzdFwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuYmxvY2tCbG9iQ29udGV4dC5nZXRCbG9ja0xpc3QobGlzdFR5cGUsIHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgaWYgKCFyZXMuY29tbWl0dGVkQmxvY2tzKSB7XG4gICAgICAgICAgICAgICAgcmVzLmNvbW1pdHRlZEJsb2NrcyA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFyZXMudW5jb21taXR0ZWRCbG9ja3MpIHtcbiAgICAgICAgICAgICAgICByZXMudW5jb21taXR0ZWRCbG9ja3MgPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBIaWdoIGxldmVsIGZ1bmN0aW9uc1xuICAgIC8qKlxuICAgICAqIFVwbG9hZHMgYSBCdWZmZXIoTm9kZS5qcykvQmxvYihicm93c2VycykvQXJyYXlCdWZmZXIvQXJyYXlCdWZmZXJWaWV3IG9iamVjdCB0byBhIEJsb2NrQmxvYi5cbiAgICAgKlxuICAgICAqIFdoZW4gZGF0YSBsZW5ndGggaXMgbm8gbW9yZSB0aGFuIHRoZSBzcGVjaWZpbGVkIHtAbGluayBCbG9ja0Jsb2JQYXJhbGxlbFVwbG9hZE9wdGlvbnMubWF4U2luZ2xlU2hvdFNpemV9IChkZWZhdWx0IGlzXG4gICAgICoge0BsaW5rIEJMT0NLX0JMT0JfTUFYX1VQTE9BRF9CTE9CX0JZVEVTfSksIHRoaXMgbWV0aG9kIHdpbGwgdXNlIDEge0BsaW5rIHVwbG9hZH0gY2FsbCB0byBmaW5pc2ggdGhlIHVwbG9hZC5cbiAgICAgKiBPdGhlcndpc2UsIHRoaXMgbWV0aG9kIHdpbGwgY2FsbCB7QGxpbmsgc3RhZ2VCbG9ja30gdG8gdXBsb2FkIGJsb2NrcywgYW5kIGZpbmFsbHkgY2FsbCB7QGxpbmsgY29tbWl0QmxvY2tMaXN0fVxuICAgICAqIHRvIGNvbW1pdCB0aGUgYmxvY2sgbGlzdC5cbiAgICAgKlxuICAgICAqIEEgY29tbW9uIHtAbGluayBCbG9ja0Jsb2JQYXJhbGxlbFVwbG9hZE9wdGlvbnMuYmxvYkhUVFBIZWFkZXJzfSBvcHRpb24gdG8gc2V0IGlzXG4gICAgICogYGJsb2JDb250ZW50VHlwZWAsIGVuYWJsaW5nIHRoZSBicm93c2VyIHRvIHByb3ZpZGVcbiAgICAgKiBmdW5jdGlvbmFsaXR5IGJhc2VkIG9uIGZpbGUgdHlwZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkYXRhIC0gQnVmZmVyKE5vZGUuanMpLCBCbG9iLCBBcnJheUJ1ZmZlciBvciBBcnJheUJ1ZmZlclZpZXdcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtXG4gICAgICovXG4gICAgYXN5bmMgdXBsb2FkRGF0YShkYXRhLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9ja0Jsb2JDbGllbnQtdXBsb2FkRGF0YVwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGlmIChjb3JlVXRpbC5pc05vZGUpIHtcbiAgICAgICAgICAgICAgICBsZXQgYnVmZmVyO1xuICAgICAgICAgICAgICAgIGlmIChkYXRhIGluc3RhbmNlb2YgQnVmZmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1ZmZlciA9IGRhdGE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgICAgICAgICAgICAgICAgICBidWZmZXIgPSBCdWZmZXIuZnJvbShkYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhO1xuICAgICAgICAgICAgICAgICAgICBidWZmZXIgPSBCdWZmZXIuZnJvbShkYXRhLmJ1ZmZlciwgZGF0YS5ieXRlT2Zmc2V0LCBkYXRhLmJ5dGVMZW5ndGgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy51cGxvYWRTZWVrYWJsZUludGVybmFsKChvZmZzZXQsIHNpemUpID0+IGJ1ZmZlci5zbGljZShvZmZzZXQsIG9mZnNldCArIHNpemUpLCBidWZmZXIuYnl0ZUxlbmd0aCwgdXBkYXRlZE9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYnJvd3NlckJsb2IgPSBuZXcgQmxvYihbZGF0YV0pO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnVwbG9hZFNlZWthYmxlSW50ZXJuYWwoKG9mZnNldCwgc2l6ZSkgPT4gYnJvd3NlckJsb2Iuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBzaXplKSwgYnJvd3NlckJsb2Iuc2l6ZSwgdXBkYXRlZE9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogT05MWSBBVkFJTEFCTEUgSU4gQlJPV1NFUlMuXG4gICAgICpcbiAgICAgKiBVcGxvYWRzIGEgYnJvd3NlciBCbG9iL0ZpbGUvQXJyYXlCdWZmZXIvQXJyYXlCdWZmZXJWaWV3IG9iamVjdCB0byBibG9jayBibG9iLlxuICAgICAqXG4gICAgICogV2hlbiBidWZmZXIgbGVuZ3RoIGxlc3NlciB0aGFuIG9yIGVxdWFsIHRvIDI1Nk1CLCB0aGlzIG1ldGhvZCB3aWxsIHVzZSAxIHVwbG9hZCBjYWxsIHRvIGZpbmlzaCB0aGUgdXBsb2FkLlxuICAgICAqIE90aGVyd2lzZSwgdGhpcyBtZXRob2Qgd2lsbCBjYWxsIHtAbGluayBzdGFnZUJsb2NrfSB0byB1cGxvYWQgYmxvY2tzLCBhbmQgZmluYWxseSBjYWxsXG4gICAgICoge0BsaW5rIGNvbW1pdEJsb2NrTGlzdH0gdG8gY29tbWl0IHRoZSBibG9jayBsaXN0LlxuICAgICAqXG4gICAgICogQSBjb21tb24ge0BsaW5rIEJsb2NrQmxvYlBhcmFsbGVsVXBsb2FkT3B0aW9ucy5ibG9iSFRUUEhlYWRlcnN9IG9wdGlvbiB0byBzZXQgaXNcbiAgICAgKiBgYmxvYkNvbnRlbnRUeXBlYCwgZW5hYmxpbmcgdGhlIGJyb3dzZXIgdG8gcHJvdmlkZVxuICAgICAqIGZ1bmN0aW9uYWxpdHkgYmFzZWQgb24gZmlsZSB0eXBlLlxuICAgICAqXG4gICAgICogQGRlcHJlY2F0ZWQgVXNlIHtAbGluayB1cGxvYWREYXRhfSBpbnN0ZWFkLlxuICAgICAqXG4gICAgICogQHBhcmFtIGJyb3dzZXJEYXRhIC0gQmxvYiwgRmlsZSwgQXJyYXlCdWZmZXIgb3IgQXJyYXlCdWZmZXJWaWV3XG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHVwbG9hZCBicm93c2VyIGRhdGEuXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgdGhlIEJsb2IgVXBsb2FkIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyB1cGxvYWRCcm93c2VyRGF0YShicm93c2VyRGF0YSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvY2tCbG9iQ2xpZW50LXVwbG9hZEJyb3dzZXJEYXRhXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgY29uc3QgYnJvd3NlckJsb2IgPSBuZXcgQmxvYihbYnJvd3NlckRhdGFdKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVwbG9hZFNlZWthYmxlSW50ZXJuYWwoKG9mZnNldCwgc2l6ZSkgPT4gYnJvd3NlckJsb2Iuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBzaXplKSwgYnJvd3NlckJsb2Iuc2l6ZSwgdXBkYXRlZE9wdGlvbnMpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBVcGxvYWRzIGRhdGEgdG8gYmxvY2sgYmxvYi4gUmVxdWlyZXMgYSBib2R5RmFjdG9yeSBhcyB0aGUgZGF0YSBzb3VyY2UsXG4gICAgICogd2hpY2ggbmVlZCB0byByZXR1cm4gYSB7QGxpbmsgSHR0cFJlcXVlc3RCb2R5fSBvYmplY3Qgd2l0aCB0aGUgb2Zmc2V0IGFuZCBzaXplIHByb3ZpZGVkLlxuICAgICAqXG4gICAgICogV2hlbiBkYXRhIGxlbmd0aCBpcyBubyBtb3JlIHRoYW4gdGhlIHNwZWNpZmllZCB7QGxpbmsgQmxvY2tCbG9iUGFyYWxsZWxVcGxvYWRPcHRpb25zLm1heFNpbmdsZVNob3RTaXplfSAoZGVmYXVsdCBpc1xuICAgICAqIHtAbGluayBCTE9DS19CTE9CX01BWF9VUExPQURfQkxPQl9CWVRFU30pLCB0aGlzIG1ldGhvZCB3aWxsIHVzZSAxIHtAbGluayB1cGxvYWR9IGNhbGwgdG8gZmluaXNoIHRoZSB1cGxvYWQuXG4gICAgICogT3RoZXJ3aXNlLCB0aGlzIG1ldGhvZCB3aWxsIGNhbGwge0BsaW5rIHN0YWdlQmxvY2t9IHRvIHVwbG9hZCBibG9ja3MsIGFuZCBmaW5hbGx5IGNhbGwge0BsaW5rIGNvbW1pdEJsb2NrTGlzdH1cbiAgICAgKiB0byBjb21taXQgdGhlIGJsb2NrIGxpc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYm9keUZhY3RvcnkgLVxuICAgICAqIEBwYXJhbSBzaXplIC0gc2l6ZSBvZiB0aGUgZGF0YSB0byB1cGxvYWQuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIFVwbG9hZCB0byBCbG9jayBCbG9iIG9wZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyBSZXNwb25zZSBkYXRhIGZvciB0aGUgQmxvYiBVcGxvYWQgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIHVwbG9hZFNlZWthYmxlSW50ZXJuYWwoYm9keUZhY3RvcnksIHNpemUsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBsZXQgYmxvY2tTaXplID0gKF9hID0gb3B0aW9ucy5ibG9ja1NpemUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IDA7XG4gICAgICAgIGlmIChibG9ja1NpemUgPCAwIHx8IGJsb2NrU2l6ZSA+IEJMT0NLX0JMT0JfTUFYX1NUQUdFX0JMT0NLX0JZVEVTKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgYmxvY2tTaXplIG9wdGlvbiBtdXN0IGJlID49IDAgYW5kIDw9ICR7QkxPQ0tfQkxPQl9NQVhfU1RBR0VfQkxPQ0tfQllURVN9YCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWF4U2luZ2xlU2hvdFNpemUgPSAoX2IgPSBvcHRpb25zLm1heFNpbmdsZVNob3RTaXplKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBCTE9DS19CTE9CX01BWF9VUExPQURfQkxPQl9CWVRFUztcbiAgICAgICAgaWYgKG1heFNpbmdsZVNob3RTaXplIDwgMCB8fCBtYXhTaW5nbGVTaG90U2l6ZSA+IEJMT0NLX0JMT0JfTUFYX1VQTE9BRF9CTE9CX0JZVEVTKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgbWF4U2luZ2xlU2hvdFNpemUgb3B0aW9uIG11c3QgYmUgPj0gMCBhbmQgPD0gJHtCTE9DS19CTE9CX01BWF9VUExPQURfQkxPQl9CWVRFU31gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYmxvY2tTaXplID09PSAwKSB7XG4gICAgICAgICAgICBpZiAoc2l6ZSA+IEJMT0NLX0JMT0JfTUFYX1NUQUdFX0JMT0NLX0JZVEVTICogQkxPQ0tfQkxPQl9NQVhfQkxPQ0tTKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYCR7c2l6ZX0gaXMgdG9vIGxhcmdlciB0byB1cGxvYWQgdG8gYSBibG9jayBibG9iLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNpemUgPiBtYXhTaW5nbGVTaG90U2l6ZSkge1xuICAgICAgICAgICAgICAgIGJsb2NrU2l6ZSA9IE1hdGguY2VpbChzaXplIC8gQkxPQ0tfQkxPQl9NQVhfQkxPQ0tTKTtcbiAgICAgICAgICAgICAgICBpZiAoYmxvY2tTaXplIDwgREVGQVVMVF9CTE9CX0RPV05MT0FEX0JMT0NLX0JZVEVTKSB7XG4gICAgICAgICAgICAgICAgICAgIGJsb2NrU2l6ZSA9IERFRkFVTFRfQkxPQl9ET1dOTE9BRF9CTE9DS19CWVRFUztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFvcHRpb25zLmJsb2JIVFRQSGVhZGVycykge1xuICAgICAgICAgICAgb3B0aW9ucy5ibG9iSFRUUEhlYWRlcnMgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW9wdGlvbnMuY29uZGl0aW9ucykge1xuICAgICAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0ge307XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9ja0Jsb2JDbGllbnQtdXBsb2FkU2Vla2FibGVJbnRlcm5hbFwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGlmIChzaXplIDw9IG1heFNpbmdsZVNob3RTaXplKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMudXBsb2FkKGJvZHlGYWN0b3J5KDAsIHNpemUpLCBzaXplLCB1cGRhdGVkT3B0aW9ucykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbnVtQmxvY2tzID0gTWF0aC5mbG9vcigoc2l6ZSAtIDEpIC8gYmxvY2tTaXplKSArIDE7XG4gICAgICAgICAgICBpZiAobnVtQmxvY2tzID4gQkxPQ0tfQkxPQl9NQVhfQkxPQ0tTKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYFRoZSBidWZmZXIncyBzaXplIGlzIHRvbyBiaWcgb3IgdGhlIEJsb2NrU2l6ZSBpcyB0b28gc21hbGw7YCArXG4gICAgICAgICAgICAgICAgICAgIGB0aGUgbnVtYmVyIG9mIGJsb2NrcyBtdXN0IGJlIDw9ICR7QkxPQ0tfQkxPQl9NQVhfQkxPQ0tTfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYmxvY2tMaXN0ID0gW107XG4gICAgICAgICAgICBjb25zdCBibG9ja0lEUHJlZml4ID0gY29yZVV0aWwucmFuZG9tVVVJRCgpO1xuICAgICAgICAgICAgbGV0IHRyYW5zZmVyUHJvZ3Jlc3MgPSAwO1xuICAgICAgICAgICAgY29uc3QgYmF0Y2ggPSBuZXcgQmF0Y2gob3B0aW9ucy5jb25jdXJyZW5jeSk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bUJsb2NrczsgaSsrKSB7XG4gICAgICAgICAgICAgICAgYmF0Y2guYWRkT3BlcmF0aW9uKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2tJRCA9IGdlbmVyYXRlQmxvY2tJRChibG9ja0lEUHJlZml4LCBpKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSBibG9ja1NpemUgKiBpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSBpID09PSBudW1CbG9ja3MgLSAxID8gc2l6ZSA6IHN0YXJ0ICsgYmxvY2tTaXplO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50TGVuZ3RoID0gZW5kIC0gc3RhcnQ7XG4gICAgICAgICAgICAgICAgICAgIGJsb2NrTGlzdC5wdXNoKGJsb2NrSUQpO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnN0YWdlQmxvY2soYmxvY2tJRCwgYm9keUZhY3Rvcnkoc3RhcnQsIGNvbnRlbnRMZW5ndGgpLCBjb250ZW50TGVuZ3RoLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuY3J5cHRpb25TY29wZTogb3B0aW9ucy5lbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgcHJvZ3Jlc3MgYWZ0ZXIgYmxvY2sgaXMgc3VjY2Vzc2Z1bGx5IHVwbG9hZGVkIHRvIHNlcnZlciwgaW4gY2FzZSBvZiBibG9jayB0cnlpbmdcbiAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogSG9vayB3aXRoIGNvbnZlbmllbmNlIGxheWVyIHByb2dyZXNzIGV2ZW50IGluIGZpbmVyIGxldmVsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZmVyUHJvZ3Jlc3MgKz0gY29udGVudExlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMub25Qcm9ncmVzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5vblByb2dyZXNzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZWRCeXRlczogdHJhbnNmZXJQcm9ncmVzcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhd2FpdCBiYXRjaC5kbygpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29tbWl0QmxvY2tMaXN0KGJsb2NrTGlzdCwgdXBkYXRlZE9wdGlvbnMpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogT05MWSBBVkFJTEFCTEUgSU4gTk9ERS5KUyBSVU5USU1FLlxuICAgICAqXG4gICAgICogVXBsb2FkcyBhIGxvY2FsIGZpbGUgaW4gYmxvY2tzIHRvIGEgYmxvY2sgYmxvYi5cbiAgICAgKlxuICAgICAqIFdoZW4gZmlsZSBzaXplIGxlc3NlciB0aGFuIG9yIGVxdWFsIHRvIDI1Nk1CLCB0aGlzIG1ldGhvZCB3aWxsIHVzZSAxIHVwbG9hZCBjYWxsIHRvIGZpbmlzaCB0aGUgdXBsb2FkLlxuICAgICAqIE90aGVyd2lzZSwgdGhpcyBtZXRob2Qgd2lsbCBjYWxsIHN0YWdlQmxvY2sgdG8gdXBsb2FkIGJsb2NrcywgYW5kIGZpbmFsbHkgY2FsbCBjb21taXRCbG9ja0xpc3RcbiAgICAgKiB0byBjb21taXQgdGhlIGJsb2NrIGxpc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZmlsZVBhdGggLSBGdWxsIHBhdGggb2YgbG9jYWwgZmlsZVxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBVcGxvYWQgdG8gQmxvY2sgQmxvYiBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgdGhlIEJsb2IgVXBsb2FkIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyB1cGxvYWRGaWxlKGZpbGVQYXRoLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9ja0Jsb2JDbGllbnQtdXBsb2FkRmlsZVwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNpemUgPSAoYXdhaXQgZnNTdGF0KGZpbGVQYXRoKSkuc2l6ZTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVwbG9hZFNlZWthYmxlSW50ZXJuYWwoKG9mZnNldCwgY291bnQpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKCkgPT4gZnNDcmVhdGVSZWFkU3RyZWFtKGZpbGVQYXRoLCB7XG4gICAgICAgICAgICAgICAgICAgIGF1dG9DbG9zZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgZW5kOiBjb3VudCA/IG9mZnNldCArIGNvdW50IC0gMSA6IEluZmluaXR5LFxuICAgICAgICAgICAgICAgICAgICBzdGFydDogb2Zmc2V0LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgc2l6ZSwgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKSwgeyB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogT05MWSBBVkFJTEFCTEUgSU4gTk9ERS5KUyBSVU5USU1FLlxuICAgICAqXG4gICAgICogVXBsb2FkcyBhIE5vZGUuanMgUmVhZGFibGUgc3RyZWFtIGludG8gYmxvY2sgYmxvYi5cbiAgICAgKlxuICAgICAqIFBFUkZPUk1BTkNFIElNUFJPVkVNRU5UIFRJUFM6XG4gICAgICogKiBJbnB1dCBzdHJlYW0gaGlnaFdhdGVyTWFyayBpcyBiZXR0ZXIgdG8gc2V0IGEgc2FtZSB2YWx1ZSB3aXRoIGJ1ZmZlclNpemVcbiAgICAgKiAgICBwYXJhbWV0ZXIsIHdoaWNoIHdpbGwgYXZvaWQgQnVmZmVyLmNvbmNhdCgpIG9wZXJhdGlvbnMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc3RyZWFtIC0gTm9kZS5qcyBSZWFkYWJsZSBzdHJlYW1cbiAgICAgKiBAcGFyYW0gYnVmZmVyU2l6ZSAtIFNpemUgb2YgZXZlcnkgYnVmZmVyIGFsbG9jYXRlZCwgYWxzbyB0aGUgYmxvY2sgc2l6ZSBpbiB0aGUgdXBsb2FkZWQgYmxvY2sgYmxvYi4gRGVmYXVsdCB2YWx1ZSBpcyA4TUJcbiAgICAgKiBAcGFyYW0gbWF4Q29uY3VycmVuY3kgLSAgTWF4IGNvbmN1cnJlbmN5IGluZGljYXRlcyB0aGUgbWF4IG51bWJlciBvZiBidWZmZXJzIHRoYXQgY2FuIGJlIGFsbG9jYXRlZCxcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aXZlIGNvcnJlbGF0aW9uIHdpdGggbWF4IHVwbG9hZGluZyBjb25jdXJyZW5jeS4gRGVmYXVsdCB2YWx1ZSBpcyA1XG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIFVwbG9hZCBTdHJlYW0gdG8gQmxvY2sgQmxvYiBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgdGhlIEJsb2IgVXBsb2FkIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyB1cGxvYWRTdHJlYW0oc3RyZWFtLCBidWZmZXJTaXplID0gREVGQVVMVF9CTE9DS19CVUZGRVJfU0laRV9CWVRFUywgbWF4Q29uY3VycmVuY3kgPSA1LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgaWYgKCFvcHRpb25zLmJsb2JIVFRQSGVhZGVycykge1xuICAgICAgICAgICAgb3B0aW9ucy5ibG9iSFRUUEhlYWRlcnMgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW9wdGlvbnMuY29uZGl0aW9ucykge1xuICAgICAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0ge307XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9ja0Jsb2JDbGllbnQtdXBsb2FkU3RyZWFtXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgbGV0IGJsb2NrTnVtID0gMDtcbiAgICAgICAgICAgIGNvbnN0IGJsb2NrSURQcmVmaXggPSBjb3JlVXRpbC5yYW5kb21VVUlEKCk7XG4gICAgICAgICAgICBsZXQgdHJhbnNmZXJQcm9ncmVzcyA9IDA7XG4gICAgICAgICAgICBjb25zdCBibG9ja0xpc3QgPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IHNjaGVkdWxlciA9IG5ldyBCdWZmZXJTY2hlZHVsZXIoc3RyZWFtLCBidWZmZXJTaXplLCBtYXhDb25jdXJyZW5jeSwgYXN5bmMgKGJvZHksIGxlbmd0aCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrSUQgPSBnZW5lcmF0ZUJsb2NrSUQoYmxvY2tJRFByZWZpeCwgYmxvY2tOdW0pO1xuICAgICAgICAgICAgICAgIGJsb2NrTGlzdC5wdXNoKGJsb2NrSUQpO1xuICAgICAgICAgICAgICAgIGJsb2NrTnVtKys7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zdGFnZUJsb2NrKGJsb2NrSUQsIGJvZHksIGxlbmd0aCwge1xuICAgICAgICAgICAgICAgICAgICBjdXN0b21lclByb3ZpZGVkS2V5OiBvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksXG4gICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiBvcHRpb25zLmVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBwcm9ncmVzcyBhZnRlciBibG9jayBpcyBzdWNjZXNzZnVsbHkgdXBsb2FkZWQgdG8gc2VydmVyLCBpbiBjYXNlIG9mIGJsb2NrIHRyeWluZ1xuICAgICAgICAgICAgICAgIHRyYW5zZmVyUHJvZ3Jlc3MgKz0gbGVuZ3RoO1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLm9uUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5vblByb2dyZXNzKHsgbG9hZGVkQnl0ZXM6IHRyYW5zZmVyUHJvZ3Jlc3MgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgXG4gICAgICAgICAgICAvLyBjb25jdXJyZW5jeSBzaG91bGQgc2V0IGEgc21hbGxlciB2YWx1ZSB0aGFuIG1heENvbmN1cnJlbmN5LCB3aGljaCBpcyBoZWxwZnVsIHRvXG4gICAgICAgICAgICAvLyByZWR1Y2UgdGhlIHBvc3NpYmlsaXR5IHdoZW4gYSBvdXRnb2luZyBoYW5kbGVyIHdhaXRzIGZvciBzdHJlYW0gZGF0YSwgaW5cbiAgICAgICAgICAgIC8vIHRoaXMgc2l0dWF0aW9uLCBvdXRnb2luZyBoYW5kbGVycyBhcmUgYmxvY2tlZC5cbiAgICAgICAgICAgIC8vIE91dGdvaW5nIHF1ZXVlIHNob3VsZG4ndCBiZSBlbXB0eS5cbiAgICAgICAgICAgIE1hdGguY2VpbCgobWF4Q29uY3VycmVuY3kgLyA0KSAqIDMpKTtcbiAgICAgICAgICAgIGF3YWl0IHNjaGVkdWxlci5kbygpO1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuY29tbWl0QmxvY2tMaXN0KGJsb2NrTGlzdCwgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKSwgeyB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMgfSkpKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuLyoqXG4gKiBQYWdlQmxvYkNsaWVudCBkZWZpbmVzIGEgc2V0IG9mIG9wZXJhdGlvbnMgYXBwbGljYWJsZSB0byBwYWdlIGJsb2JzLlxuICovXG5jbGFzcyBQYWdlQmxvYkNsaWVudCBleHRlbmRzIEJsb2JDbGllbnQge1xuICAgIGNvbnN0cnVjdG9yKHVybE9yQ29ubmVjdGlvblN0cmluZywgY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUsIGJsb2JOYW1lT3JPcHRpb25zLCBcbiAgICAvLyBMZWdhY3ksIG5vIGZpeCBmb3IgZXNsaW50IGVycm9yIHdpdGhvdXQgYnJlYWtpbmcuIERpc2FibGUgaXQgZm9yIHRoaXMgaW50ZXJmYWNlLlxuICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYXp1cmUvYXp1cmUtc2RrL3RzLW5hbWluZy1vcHRpb25zKi9cbiAgICBvcHRpb25zKSB7XG4gICAgICAgIC8vIEluIFR5cGVTY3JpcHQgd2UgY2Fubm90IHNpbXBseSBwYXNzIGFsbCBwYXJhbWV0ZXJzIHRvIHN1cGVyKCkgbGlrZSBiZWxvdyBzbyBoYXZlIHRvIGR1cGxpY2F0ZSB0aGUgY29kZSBpbnN0ZWFkLlxuICAgICAgICAvLyAgIHN1cGVyKHMsIGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lT3JPcHRpb25zLCBibG9iTmFtZU9yT3B0aW9ucywgb3B0aW9ucyk7XG4gICAgICAgIGxldCBwaXBlbGluZTtcbiAgICAgICAgbGV0IHVybDtcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgICAgIGlmIChpc1BpcGVsaW5lTGlrZShjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSkpIHtcbiAgICAgICAgICAgIC8vICh1cmw6IHN0cmluZywgcGlwZWxpbmU6IFBpcGVsaW5lKVxuICAgICAgICAgICAgdXJsID0gdXJsT3JDb25uZWN0aW9uU3RyaW5nO1xuICAgICAgICAgICAgcGlwZWxpbmUgPSBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICgoY29yZVV0aWwuaXNOb2RlICYmIGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lIGluc3RhbmNlb2YgU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwpIHx8XG4gICAgICAgICAgICBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSBpbnN0YW5jZW9mIEFub255bW91c0NyZWRlbnRpYWwgfHxcbiAgICAgICAgICAgIGNvcmVBdXRoLmlzVG9rZW5DcmVkZW50aWFsKGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lKSkge1xuICAgICAgICAgICAgLy8gKHVybDogc3RyaW5nLCBjcmVkZW50aWFsPzogU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwgfCBBbm9ueW1vdXNDcmVkZW50aWFsIHwgVG9rZW5DcmVkZW50aWFsLCBvcHRpb25zPzogU3RvcmFnZVBpcGVsaW5lT3B0aW9ucylcbiAgICAgICAgICAgIHVybCA9IHVybE9yQ29ubmVjdGlvblN0cmluZztcbiAgICAgICAgICAgIG9wdGlvbnMgPSBibG9iTmFtZU9yT3B0aW9ucztcbiAgICAgICAgICAgIHBpcGVsaW5lID0gbmV3UGlwZWxpbmUoY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSAmJlxuICAgICAgICAgICAgdHlwZW9mIGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAvLyAodXJsOiBzdHJpbmcsIGNyZWRlbnRpYWw/OiBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbCB8IEFub255bW91c0NyZWRlbnRpYWwgfCBUb2tlbkNyZWRlbnRpYWwsIG9wdGlvbnM/OiBTdG9yYWdlUGlwZWxpbmVPcHRpb25zKVxuICAgICAgICAgICAgLy8gVGhlIHNlY29uZCBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkLiBVc2UgYW5vbnltb3VzIGNyZWRlbnRpYWwuXG4gICAgICAgICAgICB1cmwgPSB1cmxPckNvbm5lY3Rpb25TdHJpbmc7XG4gICAgICAgICAgICBwaXBlbGluZSA9IG5ld1BpcGVsaW5lKG5ldyBBbm9ueW1vdXNDcmVkZW50aWFsKCksIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lICYmXG4gICAgICAgICAgICB0eXBlb2YgY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICAgIGJsb2JOYW1lT3JPcHRpb25zICYmXG4gICAgICAgICAgICB0eXBlb2YgYmxvYk5hbWVPck9wdGlvbnMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIC8vIChjb25uZWN0aW9uU3RyaW5nOiBzdHJpbmcsIGNvbnRhaW5lck5hbWU6IHN0cmluZywgYmxvYk5hbWU6IHN0cmluZywgb3B0aW9ucz86IFN0b3JhZ2VQaXBlbGluZU9wdGlvbnMpXG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJOYW1lID0gY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWU7XG4gICAgICAgICAgICBjb25zdCBibG9iTmFtZSA9IGJsb2JOYW1lT3JPcHRpb25zO1xuICAgICAgICAgICAgY29uc3QgZXh0cmFjdGVkQ3JlZHMgPSBleHRyYWN0Q29ubmVjdGlvblN0cmluZ1BhcnRzKHVybE9yQ29ubmVjdGlvblN0cmluZyk7XG4gICAgICAgICAgICBpZiAoZXh0cmFjdGVkQ3JlZHMua2luZCA9PT0gXCJBY2NvdW50Q29ublN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvcmVVdGlsLmlzTm9kZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaGFyZWRLZXlDcmVkZW50aWFsID0gbmV3IFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsKGV4dHJhY3RlZENyZWRzLmFjY291bnROYW1lLCBleHRyYWN0ZWRDcmVkcy5hY2NvdW50S2V5KTtcbiAgICAgICAgICAgICAgICAgICAgdXJsID0gYXBwZW5kVG9VUkxQYXRoKGFwcGVuZFRvVVJMUGF0aChleHRyYWN0ZWRDcmVkcy51cmwsIGVuY29kZVVSSUNvbXBvbmVudChjb250YWluZXJOYW1lKSksIGVuY29kZVVSSUNvbXBvbmVudChibG9iTmFtZSkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMucHJveHlPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnByb3h5T3B0aW9ucyA9IGNvcmVSZXN0UGlwZWxpbmUuZ2V0RGVmYXVsdFByb3h5U2V0dGluZ3MoZXh0cmFjdGVkQ3JlZHMucHJveHlVcmkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHBpcGVsaW5lID0gbmV3UGlwZWxpbmUoc2hhcmVkS2V5Q3JlZGVudGlhbCwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBY2NvdW50IGNvbm5lY3Rpb24gc3RyaW5nIGlzIG9ubHkgc3VwcG9ydGVkIGluIE5vZGUuanMgZW52aXJvbm1lbnRcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZXh0cmFjdGVkQ3JlZHMua2luZCA9PT0gXCJTQVNDb25uU3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICB1cmwgPVxuICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb1VSTFBhdGgoYXBwZW5kVG9VUkxQYXRoKGV4dHJhY3RlZENyZWRzLnVybCwgZW5jb2RlVVJJQ29tcG9uZW50KGNvbnRhaW5lck5hbWUpKSwgZW5jb2RlVVJJQ29tcG9uZW50KGJsb2JOYW1lKSkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCI/XCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFjdGVkQ3JlZHMuYWNjb3VudFNhcztcbiAgICAgICAgICAgICAgICBwaXBlbGluZSA9IG5ld1BpcGVsaW5lKG5ldyBBbm9ueW1vdXNDcmVkZW50aWFsKCksIG9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29ubmVjdGlvbiBzdHJpbmcgbXVzdCBiZSBlaXRoZXIgYW4gQWNjb3VudCBjb25uZWN0aW9uIHN0cmluZyBvciBhIFNBUyBjb25uZWN0aW9uIHN0cmluZ1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGluZyBub24tZW1wdHkgc3RyaW5ncyBmb3IgY29udGFpbmVyTmFtZSBhbmQgYmxvYk5hbWUgcGFyYW1ldGVyc1wiKTtcbiAgICAgICAgfVxuICAgICAgICBzdXBlcih1cmwsIHBpcGVsaW5lKTtcbiAgICAgICAgdGhpcy5wYWdlQmxvYkNvbnRleHQgPSB0aGlzLnN0b3JhZ2VDbGllbnRDb250ZXh0LnBhZ2VCbG9iO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IFBhZ2VCbG9iQ2xpZW50IG9iamVjdCBpZGVudGljYWwgdG8gdGhlIHNvdXJjZSBidXQgd2l0aCB0aGVcbiAgICAgKiBzcGVjaWZpZWQgc25hcHNob3QgdGltZXN0YW1wLlxuICAgICAqIFByb3ZpZGUgXCJcIiB3aWxsIHJlbW92ZSB0aGUgc25hcHNob3QgYW5kIHJldHVybiBhIENsaWVudCB0byB0aGUgYmFzZSBibG9iLlxuICAgICAqXG4gICAgICogQHBhcmFtIHNuYXBzaG90IC0gVGhlIHNuYXBzaG90IHRpbWVzdGFtcC5cbiAgICAgKiBAcmV0dXJucyBBIG5ldyBQYWdlQmxvYkNsaWVudCBvYmplY3QgaWRlbnRpY2FsIHRvIHRoZSBzb3VyY2UgYnV0IHdpdGggdGhlIHNwZWNpZmllZCBzbmFwc2hvdCB0aW1lc3RhbXAuXG4gICAgICovXG4gICAgd2l0aFNuYXBzaG90KHNuYXBzaG90KSB7XG4gICAgICAgIHJldHVybiBuZXcgUGFnZUJsb2JDbGllbnQoc2V0VVJMUGFyYW1ldGVyKHRoaXMudXJsLCBVUkxDb25zdGFudHMuUGFyYW1ldGVycy5TTkFQU0hPVCwgc25hcHNob3QubGVuZ3RoID09PSAwID8gdW5kZWZpbmVkIDogc25hcHNob3QpLCB0aGlzLnBpcGVsaW5lKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHBhZ2UgYmxvYiBvZiB0aGUgc3BlY2lmaWVkIGxlbmd0aC4gQ2FsbCB1cGxvYWRQYWdlcyB0byB1cGxvYWQgZGF0YVxuICAgICAqIGRhdGEgdG8gYSBwYWdlIGJsb2IuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvcHV0LWJsb2JcbiAgICAgKlxuICAgICAqIEBwYXJhbSBzaXplIC0gc2l6ZSBvZiB0aGUgcGFnZSBibG9iLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB0aGUgUGFnZSBCbG9iIENyZWF0ZSBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgdGhlIFBhZ2UgQmxvYiBDcmVhdGUgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGNyZWF0ZShzaXplLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0gb3B0aW9ucy5jb25kaXRpb25zIHx8IHt9O1xuICAgICAgICBlbnN1cmVDcGtJZlNwZWNpZmllZChvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksIHRoaXMuaXNIdHRwcyk7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiUGFnZUJsb2JDbGllbnQtY3JlYXRlXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5wYWdlQmxvYkNvbnRleHQuY3JlYXRlKDAsIHNpemUsIHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBibG9iSHR0cEhlYWRlcnM6IG9wdGlvbnMuYmxvYkhUVFBIZWFkZXJzLFxuICAgICAgICAgICAgICAgIGJsb2JTZXF1ZW5jZU51bWJlcjogb3B0aW9ucy5ibG9iU2VxdWVuY2VOdW1iZXIsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbWV0YWRhdGE6IG9wdGlvbnMubWV0YWRhdGEsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIGNwa0luZm86IG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSxcbiAgICAgICAgICAgICAgICBlbmNyeXB0aW9uU2NvcGU6IG9wdGlvbnMuZW5jcnlwdGlvblNjb3BlLFxuICAgICAgICAgICAgICAgIGltbXV0YWJpbGl0eVBvbGljeUV4cGlyeTogKF9iID0gb3B0aW9ucy5pbW11dGFiaWxpdHlQb2xpY3kpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5leHBpcmllc09uLFxuICAgICAgICAgICAgICAgIGltbXV0YWJpbGl0eVBvbGljeU1vZGU6IChfYyA9IG9wdGlvbnMuaW1tdXRhYmlsaXR5UG9saWN5KSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MucG9saWN5TW9kZSxcbiAgICAgICAgICAgICAgICBsZWdhbEhvbGQ6IG9wdGlvbnMubGVnYWxIb2xkLFxuICAgICAgICAgICAgICAgIHRpZXI6IHRvQWNjZXNzVGllcihvcHRpb25zLnRpZXIpLFxuICAgICAgICAgICAgICAgIGJsb2JUYWdzU3RyaW5nOiB0b0Jsb2JUYWdzU3RyaW5nKG9wdGlvbnMudGFncyksXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHBhZ2UgYmxvYiBvZiB0aGUgc3BlY2lmaWVkIGxlbmd0aC4gQ2FsbCB1cGxvYWRQYWdlcyB0byB1cGxvYWQgZGF0YVxuICAgICAqIGRhdGEgdG8gYSBwYWdlIGJsb2IuIElmIHRoZSBibG9iIHdpdGggdGhlIHNhbWUgbmFtZSBhbHJlYWR5IGV4aXN0cywgdGhlIGNvbnRlbnRcbiAgICAgKiBvZiB0aGUgZXhpc3RpbmcgYmxvYiB3aWxsIHJlbWFpbiB1bmNoYW5nZWQuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvcHV0LWJsb2JcbiAgICAgKlxuICAgICAqIEBwYXJhbSBzaXplIC0gc2l6ZSBvZiB0aGUgcGFnZSBibG9iLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC1cbiAgICAgKi9cbiAgICBhc3luYyBjcmVhdGVJZk5vdEV4aXN0cyhzaXplLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJQYWdlQmxvYkNsaWVudC1jcmVhdGVJZk5vdEV4aXN0c1wiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbmRpdGlvbnMgPSB7IGlmTm9uZU1hdGNoOiBFVGFnQW55IH07XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzID0gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5jcmVhdGUoc2l6ZSwgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKSwgeyBjb25kaXRpb25zLCB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMgfSkpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHsgc3VjY2VlZGVkOiB0cnVlIH0sIHJlcyksIHsgX3Jlc3BvbnNlOiByZXMuX3Jlc3BvbnNlIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoKChfYSA9IGUuZGV0YWlscykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmVycm9yQ29kZSkgPT09IFwiQmxvYkFscmVhZHlFeGlzdHNcIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHsgc3VjY2VlZGVkOiBmYWxzZSB9LCAoX2IgPSBlLnJlc3BvbnNlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IucGFyc2VkSGVhZGVycyksIHsgX3Jlc3BvbnNlOiBlLnJlc3BvbnNlIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGVzIDEgb3IgbW9yZSBwYWdlcyB0byB0aGUgcGFnZSBibG9iLiBUaGUgc3RhcnQgYW5kIGVuZCBvZmZzZXRzIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA1MTIuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvcHV0LXBhZ2VcbiAgICAgKlxuICAgICAqIEBwYXJhbSBib2R5IC0gRGF0YSB0byB1cGxvYWRcbiAgICAgKiBAcGFyYW0gb2Zmc2V0IC0gT2Zmc2V0IG9mIGRlc3RpbmF0aW9uIHBhZ2UgYmxvYlxuICAgICAqIEBwYXJhbSBjb3VudCAtIENvbnRlbnQgbGVuZ3RoIG9mIHRoZSBib2R5LCBhbHNvIG51bWJlciBvZiBieXRlcyB0byBiZSB1cGxvYWRlZFxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB0aGUgUGFnZSBCbG9iIFVwbG9hZCBQYWdlcyBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgdGhlIFBhZ2UgQmxvYiBVcGxvYWQgUGFnZXMgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIHVwbG9hZFBhZ2VzKGJvZHksIG9mZnNldCwgY291bnQsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIGVuc3VyZUNwa0lmU3BlY2lmaWVkKG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSwgdGhpcy5pc0h0dHBzKTtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJQYWdlQmxvYkNsaWVudC11cGxvYWRQYWdlc1wiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLnBhZ2VCbG9iQ29udGV4dC51cGxvYWRQYWdlcyhjb3VudCwgYm9keSwge1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICByZXF1ZXN0T3B0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICBvblVwbG9hZFByb2dyZXNzOiBvcHRpb25zLm9uUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICByYW5nZTogcmFuZ2VUb1N0cmluZyh7IG9mZnNldCwgY291bnQgfSksXG4gICAgICAgICAgICAgICAgc2VxdWVuY2VOdW1iZXJBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgdHJhbnNhY3Rpb25hbENvbnRlbnRNRDU6IG9wdGlvbnMudHJhbnNhY3Rpb25hbENvbnRlbnRNRDUsXG4gICAgICAgICAgICAgICAgdHJhbnNhY3Rpb25hbENvbnRlbnRDcmM2NDogb3B0aW9ucy50cmFuc2FjdGlvbmFsQ29udGVudENyYzY0LFxuICAgICAgICAgICAgICAgIGNwa0luZm86IG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSxcbiAgICAgICAgICAgICAgICBlbmNyeXB0aW9uU2NvcGU6IG9wdGlvbnMuZW5jcnlwdGlvblNjb3BlLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBVcGxvYWQgUGFnZXMgb3BlcmF0aW9uIHdyaXRlcyBhIHJhbmdlIG9mIHBhZ2VzIHRvIGEgcGFnZSBibG9iIHdoZXJlIHRoZVxuICAgICAqIGNvbnRlbnRzIGFyZSByZWFkIGZyb20gYSBVUkwuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvcHV0LXBhZ2UtZnJvbS11cmxcbiAgICAgKlxuICAgICAqIEBwYXJhbSBzb3VyY2VVUkwgLSBTcGVjaWZ5IGEgVVJMIHRvIHRoZSBjb3B5IHNvdXJjZSwgU2hhcmVkIEFjY2VzcyBTaWduYXR1cmUoU0FTKSBtYXliZSBuZWVkZWQgZm9yIGF1dGhlbnRpY2F0aW9uXG4gICAgICogQHBhcmFtIHNvdXJjZU9mZnNldCAtIFRoZSBzb3VyY2Ugb2Zmc2V0IHRvIGNvcHkgZnJvbS4gUGFzcyAwIHRvIGNvcHkgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHNvdXJjZSBwYWdlIGJsb2JcbiAgICAgKiBAcGFyYW0gZGVzdE9mZnNldCAtIE9mZnNldCBvZiBkZXN0aW5hdGlvbiBwYWdlIGJsb2JcbiAgICAgKiBAcGFyYW0gY291bnQgLSBOdW1iZXIgb2YgYnl0ZXMgdG8gYmUgdXBsb2FkZWQgZnJvbSBzb3VyY2UgcGFnZSBibG9iXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLVxuICAgICAqL1xuICAgIGFzeW5jIHVwbG9hZFBhZ2VzRnJvbVVSTChzb3VyY2VVUkwsIHNvdXJjZU9mZnNldCwgZGVzdE9mZnNldCwgY291bnQsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucyA9IG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucyB8fCB7fTtcbiAgICAgICAgZW5zdXJlQ3BrSWZTcGVjaWZpZWQob3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LCB0aGlzLmlzSHR0cHMpO1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIlBhZ2VCbG9iQ2xpZW50LXVwbG9hZFBhZ2VzRnJvbVVSTFwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2U7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5wYWdlQmxvYkNvbnRleHQudXBsb2FkUGFnZXNGcm9tVVJMKHNvdXJjZVVSTCwgcmFuZ2VUb1N0cmluZyh7IG9mZnNldDogc291cmNlT2Zmc2V0LCBjb3VudCB9KSwgMCwgcmFuZ2VUb1N0cmluZyh7IG9mZnNldDogZGVzdE9mZnNldCwgY291bnQgfSksIHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBzb3VyY2VDb250ZW50TUQ1OiBvcHRpb25zLnNvdXJjZUNvbnRlbnRNRDUsXG4gICAgICAgICAgICAgICAgc291cmNlQ29udGVudENyYzY0OiBvcHRpb25zLnNvdXJjZUNvbnRlbnRDcmM2NCxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBzZXF1ZW5jZU51bWJlckFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgc291cmNlTW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUlmTWF0Y2g6IChfYiA9IG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmlmTWF0Y2gsXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUlmTW9kaWZpZWRTaW5jZTogKF9jID0gb3B0aW9ucy5zb3VyY2VDb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VJZk5vbmVNYXRjaDogKF9kID0gb3B0aW9ucy5zb3VyY2VDb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuaWZOb25lTWF0Y2gsXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUlmVW5tb2RpZmllZFNpbmNlOiAoX2UgPSBvcHRpb25zLnNvdXJjZUNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZS5pZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNwa0luZm86IG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSxcbiAgICAgICAgICAgICAgICBlbmNyeXB0aW9uU2NvcGU6IG9wdGlvbnMuZW5jcnlwdGlvblNjb3BlLFxuICAgICAgICAgICAgICAgIGNvcHlTb3VyY2VBdXRob3JpemF0aW9uOiBodHRwQXV0aG9yaXphdGlvblRvU3RyaW5nKG9wdGlvbnMuc291cmNlQXV0aG9yaXphdGlvbiksXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRnJlZXMgdGhlIHNwZWNpZmllZCBwYWdlcyBmcm9tIHRoZSBwYWdlIGJsb2IuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvcHV0LXBhZ2VcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvZmZzZXQgLSBTdGFydGluZyBieXRlIHBvc2l0aW9uIG9mIHRoZSBwYWdlcyB0byBjbGVhci5cbiAgICAgKiBAcGFyYW0gY291bnQgLSBOdW1iZXIgb2YgYnl0ZXMgdG8gY2xlYXIuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHRoZSBQYWdlIEJsb2IgQ2xlYXIgUGFnZXMgb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIFJlc3BvbnNlIGRhdGEgZm9yIHRoZSBQYWdlIEJsb2IgQ2xlYXIgUGFnZXMgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGNsZWFyUGFnZXMob2Zmc2V0ID0gMCwgY291bnQsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiUGFnZUJsb2JDbGllbnQtY2xlYXJQYWdlc1wiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLnBhZ2VCbG9iQ29udGV4dC5jbGVhclBhZ2VzKDAsIHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgcmFuZ2U6IHJhbmdlVG9TdHJpbmcoeyBvZmZzZXQsIGNvdW50IH0pLFxuICAgICAgICAgICAgICAgIHNlcXVlbmNlTnVtYmVyQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIGNwa0luZm86IG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSxcbiAgICAgICAgICAgICAgICBlbmNyeXB0aW9uU2NvcGU6IG9wdGlvbnMuZW5jcnlwdGlvblNjb3BlLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGxpc3Qgb2YgdmFsaWQgcGFnZSByYW5nZXMgZm9yIGEgcGFnZSBibG9iIG9yIHNuYXBzaG90IG9mIGEgcGFnZSBibG9iLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2dldC1wYWdlLXJhbmdlc1xuICAgICAqXG4gICAgICogQHBhcmFtIG9mZnNldCAtIFN0YXJ0aW5nIGJ5dGUgcG9zaXRpb24gb2YgdGhlIHBhZ2UgcmFuZ2VzLlxuICAgICAqIEBwYXJhbSBjb3VudCAtIE51bWJlciBvZiBieXRlcyB0byBnZXQuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHRoZSBQYWdlIEJsb2IgR2V0IFJhbmdlcyBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgdGhlIFBhZ2UgQmxvYiBHZXQgUmFuZ2VzIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBnZXRQYWdlUmFuZ2VzKG9mZnNldCA9IDAsIGNvdW50LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0gb3B0aW9ucy5jb25kaXRpb25zIHx8IHt9O1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIlBhZ2VCbG9iQ2xpZW50LWdldFBhZ2VSYW5nZXNcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMucGFnZUJsb2JDb250ZXh0LmdldFBhZ2VSYW5nZXMoe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICByYW5nZTogcmFuZ2VUb1N0cmluZyh7IG9mZnNldCwgY291bnQgfSksXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgcmV0dXJuIHJhbmdlUmVzcG9uc2VGcm9tTW9kZWwocmVzcG9uc2UpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogZ2V0UGFnZVJhbmdlc1NlZ21lbnQgcmV0dXJucyBhIHNpbmdsZSBzZWdtZW50IG9mIHBhZ2UgcmFuZ2VzIHN0YXJ0aW5nIGZyb20gdGhlXG4gICAgICogc3BlY2lmaWVkIE1hcmtlci4gVXNlIGFuIGVtcHR5IE1hcmtlciB0byBzdGFydCBlbnVtZXJhdGlvbiBmcm9tIHRoZSBiZWdpbm5pbmcuXG4gICAgICogQWZ0ZXIgZ2V0dGluZyBhIHNlZ21lbnQsIHByb2Nlc3MgaXQsIGFuZCB0aGVuIGNhbGwgZ2V0UGFnZVJhbmdlc1NlZ21lbnQgYWdhaW5cbiAgICAgKiAocGFzc2luZyB0aGUgdGhlIHByZXZpb3VzbHktcmV0dXJuZWQgTWFya2VyKSB0byBnZXQgdGhlIG5leHQgc2VnbWVudC5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9nZXQtcGFnZS1yYW5nZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvZmZzZXQgLSBTdGFydGluZyBieXRlIHBvc2l0aW9uIG9mIHRoZSBwYWdlIHJhbmdlcy5cbiAgICAgKiBAcGFyYW0gY291bnQgLSBOdW1iZXIgb2YgYnl0ZXMgdG8gZ2V0LlxuICAgICAqIEBwYXJhbSBtYXJrZXIgLSBBIHN0cmluZyB2YWx1ZSB0aGF0IGlkZW50aWZpZXMgdGhlIHBvcnRpb24gb2YgdGhlIGxpc3QgdG8gYmUgcmV0dXJuZWQgd2l0aCB0aGUgbmV4dCBsaXN0IG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gUGFnZUJsb2IgR2V0IFBhZ2UgUmFuZ2VzIFNlZ21lbnQgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGxpc3RQYWdlUmFuZ2VzU2VnbWVudChvZmZzZXQgPSAwLCBjb3VudCwgbWFya2VyLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJQYWdlQmxvYkNsaWVudC1nZXRQYWdlUmFuZ2VzU2VnbWVudFwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLnBhZ2VCbG9iQ29udGV4dC5nZXRQYWdlUmFuZ2VzKHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgcmFuZ2U6IHJhbmdlVG9TdHJpbmcoeyBvZmZzZXQsIGNvdW50IH0pLFxuICAgICAgICAgICAgICAgIG1hcmtlcjogbWFya2VyLFxuICAgICAgICAgICAgICAgIG1heFBhZ2VTaXplOiBvcHRpb25zLm1heFBhZ2VTaXplLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIGZvciB7QGxpbmsgUGFnZUJsb2JHZXRQYWdlUmFuZ2VzUmVzcG9uc2VNb2RlbH1cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvZmZzZXQgLSBTdGFydGluZyBieXRlIHBvc2l0aW9uIG9mIHRoZSBwYWdlIHJhbmdlcy5cbiAgICAgKiBAcGFyYW0gY291bnQgLSBOdW1iZXIgb2YgYnl0ZXMgdG8gZ2V0LlxuICAgICAqIEBwYXJhbSBtYXJrZXIgLSBBIHN0cmluZyB2YWx1ZSB0aGF0IGlkZW50aWZpZXMgdGhlIHBvcnRpb24gb2ZcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGdldCBvZiBwYWdlIHJhbmdlcyB0byBiZSByZXR1cm5lZCB3aXRoIHRoZSBuZXh0IGdldHRpbmcgb3BlcmF0aW9uLiBUaGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uIHJldHVybnMgdGhlIENvbnRpbnVhdGlvblRva2VuIHZhbHVlIHdpdGhpbiB0aGUgcmVzcG9uc2UgYm9keSBpZiB0aGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0dGluZyBvcGVyYXRpb24gZGlkIG5vdCByZXR1cm4gYWxsIHBhZ2UgcmFuZ2VzIHJlbWFpbmluZyB3aXRoaW4gdGhlIGN1cnJlbnQgcGFnZS5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIENvbnRpbnVhdGlvblRva2VuIHZhbHVlIGNhbiBiZSB1c2VkIGFzIHRoZSB2YWx1ZSBmb3JcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1hcmtlciBwYXJhbWV0ZXIgaW4gYSBzdWJzZXF1ZW50IGNhbGwgdG8gcmVxdWVzdCB0aGUgbmV4dCBwYWdlIG9mIGdldFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy4gVGhlIG1hcmtlciB2YWx1ZSBpcyBvcGFxdWUgdG8gdGhlIGNsaWVudC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gTGlzdCBQYWdlIFJhbmdlcyBvcGVyYXRpb24uXG4gICAgICovXG4gICAgbGlzdFBhZ2VSYW5nZUl0ZW1TZWdtZW50cygpIHtcbiAgICAgICAgcmV0dXJuIHRzbGliLl9fYXN5bmNHZW5lcmF0b3IodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiogbGlzdFBhZ2VSYW5nZUl0ZW1TZWdtZW50c18xKG9mZnNldCA9IDAsIGNvdW50LCBtYXJrZXIsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICAgICAgbGV0IGdldFBhZ2VSYW5nZUl0ZW1TZWdtZW50c1Jlc3BvbnNlO1xuICAgICAgICAgICAgaWYgKCEhbWFya2VyIHx8IG1hcmtlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICBnZXRQYWdlUmFuZ2VJdGVtU2VnbWVudHNSZXNwb25zZSA9IHlpZWxkIHRzbGliLl9fYXdhaXQodGhpcy5saXN0UGFnZVJhbmdlc1NlZ21lbnQob2Zmc2V0LCBjb3VudCwgbWFya2VyLCBvcHRpb25zKSk7XG4gICAgICAgICAgICAgICAgICAgIG1hcmtlciA9IGdldFBhZ2VSYW5nZUl0ZW1TZWdtZW50c1Jlc3BvbnNlLmNvbnRpbnVhdGlvblRva2VuO1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCB5aWVsZCB0c2xpYi5fX2F3YWl0KHlpZWxkIHRzbGliLl9fYXdhaXQoZ2V0UGFnZVJhbmdlSXRlbVNlZ21lbnRzUmVzcG9uc2UpKTtcbiAgICAgICAgICAgICAgICB9IHdoaWxlIChtYXJrZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBBc3luY0l0ZXJhYmxlSXRlcmF0b3Igb2Yge0BsaW5rIFBhZ2VSYW5nZUluZm99IG9iamVjdHNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvZmZzZXQgLSBTdGFydGluZyBieXRlIHBvc2l0aW9uIG9mIHRoZSBwYWdlIHJhbmdlcy5cbiAgICAgKiBAcGFyYW0gY291bnQgLSBOdW1iZXIgb2YgYnl0ZXMgdG8gZ2V0LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBMaXN0IFBhZ2UgUmFuZ2VzIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBsaXN0UGFnZVJhbmdlSXRlbXMoKSB7XG4gICAgICAgIHJldHVybiB0c2xpYi5fX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24qIGxpc3RQYWdlUmFuZ2VJdGVtc18xKG9mZnNldCA9IDAsIGNvdW50LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgICAgIHZhciBfYSwgZV8xLCBfYiwgX2M7XG4gICAgICAgICAgICBsZXQgbWFya2VyO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBfZCA9IHRydWUsIF9lID0gdHNsaWIuX19hc3luY1ZhbHVlcyh0aGlzLmxpc3RQYWdlUmFuZ2VJdGVtU2VnbWVudHMob2Zmc2V0LCBjb3VudCwgbWFya2VyLCBvcHRpb25zKSksIF9mOyBfZiA9IHlpZWxkIHRzbGliLl9fYXdhaXQoX2UubmV4dCgpKSwgX2EgPSBfZi5kb25lLCAhX2E7IF9kID0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICBfYyA9IF9mLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBfZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBnZXRQYWdlUmFuZ2VzU2VnbWVudCA9IF9jO1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCB0c2xpYi5fX2F3YWl0KHlpZWxkKiB0c2xpYi5fX2FzeW5jRGVsZWdhdG9yKHRzbGliLl9fYXN5bmNWYWx1ZXMoRXh0cmFjdFBhZ2VSYW5nZUluZm9JdGVtcyhnZXRQYWdlUmFuZ2VzU2VnbWVudCkpKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghX2QgJiYgIV9hICYmIChfYiA9IF9lLnJldHVybikpIHlpZWxkIHRzbGliLl9fYXdhaXQoX2IuY2FsbChfZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIGFzeW5jIGl0ZXJhYmxlIGl0ZXJhdG9yIHRvIGxpc3Qgb2YgcGFnZSByYW5nZXMgZm9yIGEgcGFnZSBibG9iLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2dldC1wYWdlLXJhbmdlc1xuICAgICAqXG4gICAgICogIC5ieVBhZ2UoKSByZXR1cm5zIGFuIGFzeW5jIGl0ZXJhYmxlIGl0ZXJhdG9yIHRvIGxpc3Qgb2YgcGFnZSByYW5nZXMgZm9yIGEgcGFnZSBibG9iLlxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBgZm9yIGF3YWl0YCBzeW50YXg6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIEdldCB0aGUgcGFnZUJsb2JDbGllbnQgYmVmb3JlIHlvdSBydW4gdGhlc2Ugc25pcHBldHMsXG4gICAgICogLy8gQ2FuIGJlIG9idGFpbmVkIGZyb20gYGJsb2JTZXJ2aWNlQ2xpZW50LmdldENvbnRhaW5lckNsaWVudChcIjx5b3VyLWNvbnRhaW5lci1uYW1lPlwiKS5nZXRQYWdlQmxvYkNsaWVudChcIjx5b3VyLWJsb2ItbmFtZT5cIik7YFxuICAgICAqIGxldCBpID0gMTtcbiAgICAgKiBmb3IgYXdhaXQgKGNvbnN0IHBhZ2VSYW5nZSBvZiBwYWdlQmxvYkNsaWVudC5saXN0UGFnZVJhbmdlcygpKSB7XG4gICAgICogICBjb25zb2xlLmxvZyhgUGFnZSByYW5nZSAke2krK306ICR7cGFnZVJhbmdlLnN0YXJ0fSAtICR7cGFnZVJhbmdlLmVuZH1gKTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIGBpdGVyLm5leHQoKWA6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGxldCBpID0gMTtcbiAgICAgKiBsZXQgaXRlciA9IHBhZ2VCbG9iQ2xpZW50Lmxpc3RQYWdlUmFuZ2VzKCk7XG4gICAgICogbGV0IHBhZ2VSYW5nZUl0ZW0gPSBhd2FpdCBpdGVyLm5leHQoKTtcbiAgICAgKiB3aGlsZSAoIXBhZ2VSYW5nZUl0ZW0uZG9uZSkge1xuICAgICAqICAgY29uc29sZS5sb2coYFBhZ2UgcmFuZ2UgJHtpKyt9OiAke3BhZ2VSYW5nZUl0ZW0udmFsdWUuc3RhcnR9IC0gJHtwYWdlUmFuZ2VJdGVtLnZhbHVlLmVuZH0sIElzQ2xlYXI6ICR7cGFnZVJhbmdlSXRlbS52YWx1ZS5pc0NsZWFyfWApO1xuICAgICAqICAgcGFnZVJhbmdlSXRlbSA9IGF3YWl0IGl0ZXIubmV4dCgpO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNpbmcgYGJ5UGFnZSgpYDpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogLy8gcGFzc2luZyBvcHRpb25hbCBtYXhQYWdlU2l6ZSBpbiB0aGUgcGFnZSBzZXR0aW5nc1xuICAgICAqIGxldCBpID0gMTtcbiAgICAgKiBmb3IgYXdhaXQgKGNvbnN0IHJlc3BvbnNlIG9mIHBhZ2VCbG9iQ2xpZW50Lmxpc3RQYWdlUmFuZ2VzKCkuYnlQYWdlKHsgbWF4UGFnZVNpemU6IDIwIH0pKSB7XG4gICAgICogICBmb3IgKGNvbnN0IHBhZ2VSYW5nZSBvZiByZXNwb25zZSkge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhgUGFnZSByYW5nZSAke2krK306ICR7cGFnZVJhbmdlLnN0YXJ0fSAtICR7cGFnZVJhbmdlLmVuZH1gKTtcbiAgICAgKiAgIH1cbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIHBhZ2luZyB3aXRoIGEgbWFya2VyOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBsZXQgaSA9IDE7XG4gICAgICogbGV0IGl0ZXJhdG9yID0gcGFnZUJsb2JDbGllbnQubGlzdFBhZ2VSYW5nZXMoKS5ieVBhZ2UoeyBtYXhQYWdlU2l6ZTogMiB9KTtcbiAgICAgKiBsZXQgcmVzcG9uc2UgPSAoYXdhaXQgaXRlcmF0b3IubmV4dCgpKS52YWx1ZTtcbiAgICAgKlxuICAgICAqIC8vIFByaW50cyAyIHBhZ2UgcmFuZ2VzXG4gICAgICogZm9yIChjb25zdCBwYWdlUmFuZ2Ugb2YgcmVzcG9uc2UpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKGBQYWdlIHJhbmdlICR7aSsrfTogJHtwYWdlUmFuZ2Uuc3RhcnR9IC0gJHtwYWdlUmFuZ2UuZW5kfWApO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIC8vIEdldHMgbmV4dCBtYXJrZXJcbiAgICAgKiBsZXQgbWFya2VyID0gcmVzcG9uc2UuY29udGludWF0aW9uVG9rZW47XG4gICAgICpcbiAgICAgKiAvLyBQYXNzaW5nIG5leHQgbWFya2VyIGFzIGNvbnRpbnVhdGlvblRva2VuXG4gICAgICpcbiAgICAgKiBpdGVyYXRvciA9IHBhZ2VCbG9iQ2xpZW50Lmxpc3RQYWdlUmFuZ2VzKCkuYnlQYWdlKHsgY29udGludWF0aW9uVG9rZW46IG1hcmtlciwgbWF4UGFnZVNpemU6IDEwIH0pO1xuICAgICAqIHJlc3BvbnNlID0gKGF3YWl0IGl0ZXJhdG9yLm5leHQoKSkudmFsdWU7XG4gICAgICpcbiAgICAgKiAvLyBQcmludHMgMTAgcGFnZSByYW5nZXNcbiAgICAgKiBmb3IgKGNvbnN0IGJsb2Igb2YgcmVzcG9uc2UpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKGBQYWdlIHJhbmdlICR7aSsrfTogJHtwYWdlUmFuZ2Uuc3RhcnR9IC0gJHtwYWdlUmFuZ2UuZW5kfWApO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKiBAcGFyYW0gb2Zmc2V0IC0gU3RhcnRpbmcgYnl0ZSBwb3NpdGlvbiBvZiB0aGUgcGFnZSByYW5nZXMuXG4gICAgICogQHBhcmFtIGNvdW50IC0gTnVtYmVyIG9mIGJ5dGVzIHRvIGdldC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gdGhlIFBhZ2UgQmxvYiBHZXQgUmFuZ2VzIG9wZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyBBbiBhc3luY0l0ZXJhYmxlSXRlcmF0b3IgdGhhdCBzdXBwb3J0cyBwYWdpbmcuXG4gICAgICovXG4gICAgbGlzdFBhZ2VSYW5nZXMob2Zmc2V0ID0gMCwgY291bnQsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIC8vIEFzeW5jSXRlcmFibGVJdGVyYXRvciB0byBpdGVyYXRlIG92ZXIgYmxvYnNcbiAgICAgICAgY29uc3QgaXRlciA9IHRoaXMubGlzdFBhZ2VSYW5nZUl0ZW1zKG9mZnNldCwgY291bnQsIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBUaGUgbmV4dCBtZXRob2QsIHBhcnQgb2YgdGhlIGl0ZXJhdGlvbiBwcm90b2NvbFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBuZXh0KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVyLm5leHQoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFRoZSBjb25uZWN0aW9uIHRvIHRoZSBhc3luYyBpdGVyYXRvciwgcGFydCBvZiB0aGUgaXRlcmF0aW9uIHByb3RvY29sXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBSZXR1cm4gYW4gQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIHRoYXQgd29ya3MgYSBwYWdlIGF0IGEgdGltZVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBieVBhZ2U6IChzZXR0aW5ncyA9IHt9KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubGlzdFBhZ2VSYW5nZUl0ZW1TZWdtZW50cyhvZmZzZXQsIGNvdW50LCBzZXR0aW5ncy5jb250aW51YXRpb25Ub2tlbiwgT2JqZWN0LmFzc2lnbih7IG1heFBhZ2VTaXplOiBzZXR0aW5ncy5tYXhQYWdlU2l6ZSB9LCBvcHRpb25zKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBjb2xsZWN0aW9uIG9mIHBhZ2UgcmFuZ2VzIHRoYXQgZGlmZmVyIGJldHdlZW4gYSBzcGVjaWZpZWQgc25hcHNob3QgYW5kIHRoaXMgcGFnZSBibG9iLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2dldC1wYWdlLXJhbmdlc1xuICAgICAqXG4gICAgICogQHBhcmFtIG9mZnNldCAtIFN0YXJ0aW5nIGJ5dGUgcG9zaXRpb24gb2YgdGhlIHBhZ2UgYmxvYlxuICAgICAqIEBwYXJhbSBjb3VudCAtIE51bWJlciBvZiBieXRlcyB0byBnZXQgcmFuZ2VzIGRpZmYuXG4gICAgICogQHBhcmFtIHByZXZTbmFwc2hvdCAtIFRpbWVzdGFtcCBvZiBzbmFwc2hvdCB0byByZXRyaWV2ZSB0aGUgZGlmZmVyZW5jZS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gdGhlIFBhZ2UgQmxvYiBHZXQgUGFnZSBSYW5nZXMgRGlmZiBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgdGhlIFBhZ2UgQmxvYiBHZXQgUGFnZSBSYW5nZSBEaWZmIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBnZXRQYWdlUmFuZ2VzRGlmZihvZmZzZXQsIGNvdW50LCBwcmV2U25hcHNob3QsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiUGFnZUJsb2JDbGllbnQtZ2V0UGFnZVJhbmdlc0RpZmZcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLnBhZ2VCbG9iQ29udGV4dC5nZXRQYWdlUmFuZ2VzRGlmZih7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIHByZXZzbmFwc2hvdDogcHJldlNuYXBzaG90LFxuICAgICAgICAgICAgICAgIHJhbmdlOiByYW5nZVRvU3RyaW5nKHsgb2Zmc2V0LCBjb3VudCB9KSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICByZXR1cm4gcmFuZ2VSZXNwb25zZUZyb21Nb2RlbChyZXN1bHQpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogZ2V0UGFnZVJhbmdlc0RpZmZTZWdtZW50IHJldHVybnMgYSBzaW5nbGUgc2VnbWVudCBvZiBwYWdlIHJhbmdlcyBzdGFydGluZyBmcm9tIHRoZVxuICAgICAqIHNwZWNpZmllZCBNYXJrZXIgZm9yIGRpZmZlcmVuY2UgYmV0d2VlbiBwcmV2aW91cyBzbmFwc2hvdCBhbmQgdGhlIHRhcmdldCBwYWdlIGJsb2IuXG4gICAgICogVXNlIGFuIGVtcHR5IE1hcmtlciB0byBzdGFydCBlbnVtZXJhdGlvbiBmcm9tIHRoZSBiZWdpbm5pbmcuXG4gICAgICogQWZ0ZXIgZ2V0dGluZyBhIHNlZ21lbnQsIHByb2Nlc3MgaXQsIGFuZCB0aGVuIGNhbGwgZ2V0UGFnZVJhbmdlc0RpZmZTZWdtZW50IGFnYWluXG4gICAgICogKHBhc3NpbmcgdGhlIHRoZSBwcmV2aW91c2x5LXJldHVybmVkIE1hcmtlcikgdG8gZ2V0IHRoZSBuZXh0IHNlZ21lbnQuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvZ2V0LXBhZ2UtcmFuZ2VzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb2Zmc2V0IC0gU3RhcnRpbmcgYnl0ZSBwb3NpdGlvbiBvZiB0aGUgcGFnZSByYW5nZXMuXG4gICAgICogQHBhcmFtIGNvdW50IC0gTnVtYmVyIG9mIGJ5dGVzIHRvIGdldC5cbiAgICAgKiBAcGFyYW0gcHJldlNuYXBzaG90T3JVcmwgLSBUaW1lc3RhbXAgb2Ygc25hcHNob3QgdG8gcmV0cmlldmUgdGhlIGRpZmZlcmVuY2Ugb3IgVVJMIG9mIHNuYXBzaG90IHRvIHJldHJpZXZlIHRoZSBkaWZmZXJlbmNlLlxuICAgICAqIEBwYXJhbSBtYXJrZXIgLSBBIHN0cmluZyB2YWx1ZSB0aGF0IGlkZW50aWZpZXMgdGhlIHBvcnRpb24gb2YgdGhlIGdldCB0byBiZSByZXR1cm5lZCB3aXRoIHRoZSBuZXh0IGdldCBvcGVyYXRpb24uXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHRoZSBQYWdlIEJsb2IgR2V0IFBhZ2UgUmFuZ2VzIERpZmYgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGxpc3RQYWdlUmFuZ2VzRGlmZlNlZ21lbnQob2Zmc2V0LCBjb3VudCwgcHJldlNuYXBzaG90T3JVcmwsIG1hcmtlciwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiUGFnZUJsb2JDbGllbnQtZ2V0UGFnZVJhbmdlc0RpZmZTZWdtZW50XCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMucGFnZUJsb2JDb250ZXh0LmdldFBhZ2VSYW5nZXNEaWZmKHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICBwcmV2c25hcHNob3Q6IHByZXZTbmFwc2hvdE9yVXJsLFxuICAgICAgICAgICAgICAgIHJhbmdlOiByYW5nZVRvU3RyaW5nKHtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiBvZmZzZXQsXG4gICAgICAgICAgICAgICAgICAgIGNvdW50OiBjb3VudCxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBtYXJrZXI6IG1hcmtlcixcbiAgICAgICAgICAgICAgICBtYXhQYWdlU2l6ZTogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLm1heFBhZ2VTaXplLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIGZvciB7QGxpbmsgUGFnZUJsb2JHZXRQYWdlUmFuZ2VzRGlmZlJlc3BvbnNlTW9kZWx9XG4gICAgICpcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvZmZzZXQgLSBTdGFydGluZyBieXRlIHBvc2l0aW9uIG9mIHRoZSBwYWdlIHJhbmdlcy5cbiAgICAgKiBAcGFyYW0gY291bnQgLSBOdW1iZXIgb2YgYnl0ZXMgdG8gZ2V0LlxuICAgICAqIEBwYXJhbSBwcmV2U25hcHNob3RPclVybCAtIFRpbWVzdGFtcCBvZiBzbmFwc2hvdCB0byByZXRyaWV2ZSB0aGUgZGlmZmVyZW5jZSBvciBVUkwgb2Ygc25hcHNob3QgdG8gcmV0cmlldmUgdGhlIGRpZmZlcmVuY2UuXG4gICAgICogQHBhcmFtIG1hcmtlciAtIEEgc3RyaW5nIHZhbHVlIHRoYXQgaWRlbnRpZmllcyB0aGUgcG9ydGlvbiBvZlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZ2V0IG9mIHBhZ2UgcmFuZ2VzIHRvIGJlIHJldHVybmVkIHdpdGggdGhlIG5leHQgZ2V0dGluZyBvcGVyYXRpb24uIFRoZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gcmV0dXJucyB0aGUgQ29udGludWF0aW9uVG9rZW4gdmFsdWUgd2l0aGluIHRoZSByZXNwb25zZSBib2R5IGlmIHRoZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBnZXR0aW5nIG9wZXJhdGlvbiBkaWQgbm90IHJldHVybiBhbGwgcGFnZSByYW5nZXMgcmVtYWluaW5nIHdpdGhpbiB0aGUgY3VycmVudCBwYWdlLlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgQ29udGludWF0aW9uVG9rZW4gdmFsdWUgY2FuIGJlIHVzZWQgYXMgdGhlIHZhbHVlIGZvclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWFya2VyIHBhcmFtZXRlciBpbiBhIHN1YnNlcXVlbnQgY2FsbCB0byByZXF1ZXN0IHRoZSBuZXh0IHBhZ2Ugb2YgZ2V0XG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLiBUaGUgbWFya2VyIHZhbHVlIGlzIG9wYXF1ZSB0byB0aGUgY2xpZW50LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB0aGUgUGFnZSBCbG9iIEdldCBQYWdlIFJhbmdlcyBEaWZmIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBsaXN0UGFnZVJhbmdlRGlmZkl0ZW1TZWdtZW50cyhvZmZzZXQsIGNvdW50LCBwcmV2U25hcHNob3RPclVybCwgbWFya2VyLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0c2xpYi5fX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24qIGxpc3RQYWdlUmFuZ2VEaWZmSXRlbVNlZ21lbnRzXzEoKSB7XG4gICAgICAgICAgICBsZXQgZ2V0UGFnZVJhbmdlSXRlbVNlZ21lbnRzUmVzcG9uc2U7XG4gICAgICAgICAgICBpZiAoISFtYXJrZXIgfHwgbWFya2VyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgIGdldFBhZ2VSYW5nZUl0ZW1TZWdtZW50c1Jlc3BvbnNlID0geWllbGQgdHNsaWIuX19hd2FpdCh0aGlzLmxpc3RQYWdlUmFuZ2VzRGlmZlNlZ21lbnQob2Zmc2V0LCBjb3VudCwgcHJldlNuYXBzaG90T3JVcmwsIG1hcmtlciwgb3B0aW9ucykpO1xuICAgICAgICAgICAgICAgICAgICBtYXJrZXIgPSBnZXRQYWdlUmFuZ2VJdGVtU2VnbWVudHNSZXNwb25zZS5jb250aW51YXRpb25Ub2tlbjtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgeWllbGQgdHNsaWIuX19hd2FpdCh5aWVsZCB0c2xpYi5fX2F3YWl0KGdldFBhZ2VSYW5nZUl0ZW1TZWdtZW50c1Jlc3BvbnNlKSk7XG4gICAgICAgICAgICAgICAgfSB3aGlsZSAobWFya2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIG9mIHtAbGluayBQYWdlUmFuZ2VJbmZvfSBvYmplY3RzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb2Zmc2V0IC0gU3RhcnRpbmcgYnl0ZSBwb3NpdGlvbiBvZiB0aGUgcGFnZSByYW5nZXMuXG4gICAgICogQHBhcmFtIGNvdW50IC0gTnVtYmVyIG9mIGJ5dGVzIHRvIGdldC5cbiAgICAgKiBAcGFyYW0gcHJldlNuYXBzaG90T3JVcmwgLSBUaW1lc3RhbXAgb2Ygc25hcHNob3QgdG8gcmV0cmlldmUgdGhlIGRpZmZlcmVuY2Ugb3IgVVJMIG9mIHNuYXBzaG90IHRvIHJldHJpZXZlIHRoZSBkaWZmZXJlbmNlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB0aGUgUGFnZSBCbG9iIEdldCBQYWdlIFJhbmdlcyBEaWZmIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBsaXN0UGFnZVJhbmdlRGlmZkl0ZW1zKG9mZnNldCwgY291bnQsIHByZXZTbmFwc2hvdE9yVXJsLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0c2xpYi5fX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24qIGxpc3RQYWdlUmFuZ2VEaWZmSXRlbXNfMSgpIHtcbiAgICAgICAgICAgIHZhciBfYSwgZV8yLCBfYiwgX2M7XG4gICAgICAgICAgICBsZXQgbWFya2VyO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBfZCA9IHRydWUsIF9lID0gdHNsaWIuX19hc3luY1ZhbHVlcyh0aGlzLmxpc3RQYWdlUmFuZ2VEaWZmSXRlbVNlZ21lbnRzKG9mZnNldCwgY291bnQsIHByZXZTbmFwc2hvdE9yVXJsLCBtYXJrZXIsIG9wdGlvbnMpKSwgX2Y7IF9mID0geWllbGQgdHNsaWIuX19hd2FpdChfZS5uZXh0KCkpLCBfYSA9IF9mLmRvbmUsICFfYTsgX2QgPSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgIF9jID0gX2YudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIF9kID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGdldFBhZ2VSYW5nZXNTZWdtZW50ID0gX2M7XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIHRzbGliLl9fYXdhaXQoeWllbGQqIHRzbGliLl9fYXN5bmNEZWxlZ2F0b3IodHNsaWIuX19hc3luY1ZhbHVlcyhFeHRyYWN0UGFnZVJhbmdlSW5mb0l0ZW1zKGdldFBhZ2VSYW5nZXNTZWdtZW50KSkpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZV8yXzEpIHsgZV8yID0geyBlcnJvcjogZV8yXzEgfTsgfVxuICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFfZCAmJiAhX2EgJiYgKF9iID0gX2UucmV0dXJuKSkgeWllbGQgdHNsaWIuX19hd2FpdChfYi5jYWxsKF9lKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8yKSB0aHJvdyBlXzIuZXJyb3I7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gYXN5bmMgaXRlcmFibGUgaXRlcmF0b3IgdG8gbGlzdCBvZiBwYWdlIHJhbmdlcyB0aGF0IGRpZmZlciBiZXR3ZWVuIGEgc3BlY2lmaWVkIHNuYXBzaG90IGFuZCB0aGlzIHBhZ2UgYmxvYi5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9nZXQtcGFnZS1yYW5nZXNcbiAgICAgKlxuICAgICAqICAuYnlQYWdlKCkgcmV0dXJucyBhbiBhc3luYyBpdGVyYWJsZSBpdGVyYXRvciB0byBsaXN0IG9mIHBhZ2UgcmFuZ2VzIHRoYXQgZGlmZmVyIGJldHdlZW4gYSBzcGVjaWZpZWQgc25hcHNob3QgYW5kIHRoaXMgcGFnZSBibG9iLlxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBgZm9yIGF3YWl0YCBzeW50YXg6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIEdldCB0aGUgcGFnZUJsb2JDbGllbnQgYmVmb3JlIHlvdSBydW4gdGhlc2Ugc25pcHBldHMsXG4gICAgICogLy8gQ2FuIGJlIG9idGFpbmVkIGZyb20gYGJsb2JTZXJ2aWNlQ2xpZW50LmdldENvbnRhaW5lckNsaWVudChcIjx5b3VyLWNvbnRhaW5lci1uYW1lPlwiKS5nZXRQYWdlQmxvYkNsaWVudChcIjx5b3VyLWJsb2ItbmFtZT5cIik7YFxuICAgICAqIGxldCBpID0gMTtcbiAgICAgKiBmb3IgYXdhaXQgKGNvbnN0IHBhZ2VSYW5nZSBvZiBwYWdlQmxvYkNsaWVudC5saXN0UGFnZVJhbmdlc0RpZmYoKSkge1xuICAgICAqICAgY29uc29sZS5sb2coYFBhZ2UgcmFuZ2UgJHtpKyt9OiAke3BhZ2VSYW5nZS5zdGFydH0gLSAke3BhZ2VSYW5nZS5lbmR9YCk7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBgaXRlci5uZXh0KClgOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBsZXQgaSA9IDE7XG4gICAgICogbGV0IGl0ZXIgPSBwYWdlQmxvYkNsaWVudC5saXN0UGFnZVJhbmdlc0RpZmYoKTtcbiAgICAgKiBsZXQgcGFnZVJhbmdlSXRlbSA9IGF3YWl0IGl0ZXIubmV4dCgpO1xuICAgICAqIHdoaWxlICghcGFnZVJhbmdlSXRlbS5kb25lKSB7XG4gICAgICogICBjb25zb2xlLmxvZyhgUGFnZSByYW5nZSAke2krK306ICR7cGFnZVJhbmdlSXRlbS52YWx1ZS5zdGFydH0gLSAke3BhZ2VSYW5nZUl0ZW0udmFsdWUuZW5kfSwgSXNDbGVhcjogJHtwYWdlUmFuZ2VJdGVtLnZhbHVlLmlzQ2xlYXJ9YCk7XG4gICAgICogICBwYWdlUmFuZ2VJdGVtID0gYXdhaXQgaXRlci5uZXh0KCk7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBgYnlQYWdlKClgOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiAvLyBwYXNzaW5nIG9wdGlvbmFsIG1heFBhZ2VTaXplIGluIHRoZSBwYWdlIHNldHRpbmdzXG4gICAgICogbGV0IGkgPSAxO1xuICAgICAqIGZvciBhd2FpdCAoY29uc3QgcmVzcG9uc2Ugb2YgcGFnZUJsb2JDbGllbnQubGlzdFBhZ2VSYW5nZXNEaWZmKCkuYnlQYWdlKHsgbWF4UGFnZVNpemU6IDIwIH0pKSB7XG4gICAgICogICBmb3IgKGNvbnN0IHBhZ2VSYW5nZSBvZiByZXNwb25zZSkge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhgUGFnZSByYW5nZSAke2krK306ICR7cGFnZVJhbmdlLnN0YXJ0fSAtICR7cGFnZVJhbmdlLmVuZH1gKTtcbiAgICAgKiAgIH1cbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIHBhZ2luZyB3aXRoIGEgbWFya2VyOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBsZXQgaSA9IDE7XG4gICAgICogbGV0IGl0ZXJhdG9yID0gcGFnZUJsb2JDbGllbnQubGlzdFBhZ2VSYW5nZXNEaWZmKCkuYnlQYWdlKHsgbWF4UGFnZVNpemU6IDIgfSk7XG4gICAgICogbGV0IHJlc3BvbnNlID0gKGF3YWl0IGl0ZXJhdG9yLm5leHQoKSkudmFsdWU7XG4gICAgICpcbiAgICAgKiAvLyBQcmludHMgMiBwYWdlIHJhbmdlc1xuICAgICAqIGZvciAoY29uc3QgcGFnZVJhbmdlIG9mIHJlc3BvbnNlKSB7XG4gICAgICogICBjb25zb2xlLmxvZyhgUGFnZSByYW5nZSAke2krK306ICR7cGFnZVJhbmdlLnN0YXJ0fSAtICR7cGFnZVJhbmdlLmVuZH1gKTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBHZXRzIG5leHQgbWFya2VyXG4gICAgICogbGV0IG1hcmtlciA9IHJlc3BvbnNlLmNvbnRpbnVhdGlvblRva2VuO1xuICAgICAqXG4gICAgICogLy8gUGFzc2luZyBuZXh0IG1hcmtlciBhcyBjb250aW51YXRpb25Ub2tlblxuICAgICAqXG4gICAgICogaXRlcmF0b3IgPSBwYWdlQmxvYkNsaWVudC5saXN0UGFnZVJhbmdlc0RpZmYoKS5ieVBhZ2UoeyBjb250aW51YXRpb25Ub2tlbjogbWFya2VyLCBtYXhQYWdlU2l6ZTogMTAgfSk7XG4gICAgICogcmVzcG9uc2UgPSAoYXdhaXQgaXRlcmF0b3IubmV4dCgpKS52YWx1ZTtcbiAgICAgKlxuICAgICAqIC8vIFByaW50cyAxMCBwYWdlIHJhbmdlc1xuICAgICAqIGZvciAoY29uc3QgYmxvYiBvZiByZXNwb25zZSkge1xuICAgICAqICAgY29uc29sZS5sb2coYFBhZ2UgcmFuZ2UgJHtpKyt9OiAke3BhZ2VSYW5nZS5zdGFydH0gLSAke3BhZ2VSYW5nZS5lbmR9YCk7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqIEBwYXJhbSBvZmZzZXQgLSBTdGFydGluZyBieXRlIHBvc2l0aW9uIG9mIHRoZSBwYWdlIHJhbmdlcy5cbiAgICAgKiBAcGFyYW0gY291bnQgLSBOdW1iZXIgb2YgYnl0ZXMgdG8gZ2V0LlxuICAgICAqIEBwYXJhbSBwcmV2U25hcHNob3QgLSBUaW1lc3RhbXAgb2Ygc25hcHNob3QgdG8gcmV0cmlldmUgdGhlIGRpZmZlcmVuY2UuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHRoZSBQYWdlIEJsb2IgR2V0IFJhbmdlcyBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgQW4gYXN5bmNJdGVyYWJsZUl0ZXJhdG9yIHRoYXQgc3VwcG9ydHMgcGFnaW5nLlxuICAgICAqL1xuICAgIGxpc3RQYWdlUmFuZ2VzRGlmZihvZmZzZXQsIGNvdW50LCBwcmV2U25hcHNob3QsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIC8vIEFzeW5jSXRlcmFibGVJdGVyYXRvciB0byBpdGVyYXRlIG92ZXIgYmxvYnNcbiAgICAgICAgY29uc3QgaXRlciA9IHRoaXMubGlzdFBhZ2VSYW5nZURpZmZJdGVtcyhvZmZzZXQsIGNvdW50LCBwcmV2U25hcHNob3QsIE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVGhlIG5leHQgbWV0aG9kLCBwYXJ0IG9mIHRoZSBpdGVyYXRpb24gcHJvdG9jb2xcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgbmV4dCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlci5uZXh0KCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBUaGUgY29ubmVjdGlvbiB0byB0aGUgYXN5bmMgaXRlcmF0b3IsIHBhcnQgb2YgdGhlIGl0ZXJhdGlvbiBwcm90b2NvbFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogUmV0dXJuIGFuIEFzeW5jSXRlcmFibGVJdGVyYXRvciB0aGF0IHdvcmtzIGEgcGFnZSBhdCBhIHRpbWVcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgYnlQYWdlOiAoc2V0dGluZ3MgPSB7fSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxpc3RQYWdlUmFuZ2VEaWZmSXRlbVNlZ21lbnRzKG9mZnNldCwgY291bnQsIHByZXZTbmFwc2hvdCwgc2V0dGluZ3MuY29udGludWF0aW9uVG9rZW4sIE9iamVjdC5hc3NpZ24oeyBtYXhQYWdlU2l6ZTogc2V0dGluZ3MubWF4UGFnZVNpemUgfSwgb3B0aW9ucykpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgY29sbGVjdGlvbiBvZiBwYWdlIHJhbmdlcyB0aGF0IGRpZmZlciBiZXR3ZWVuIGEgc3BlY2lmaWVkIHNuYXBzaG90IGFuZCB0aGlzIHBhZ2UgYmxvYiBmb3IgbWFuYWdlZCBkaXNrcy5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9nZXQtcGFnZS1yYW5nZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvZmZzZXQgLSBTdGFydGluZyBieXRlIHBvc2l0aW9uIG9mIHRoZSBwYWdlIGJsb2JcbiAgICAgKiBAcGFyYW0gY291bnQgLSBOdW1iZXIgb2YgYnl0ZXMgdG8gZ2V0IHJhbmdlcyBkaWZmLlxuICAgICAqIEBwYXJhbSBwcmV2U25hcHNob3RVcmwgLSBVUkwgb2Ygc25hcHNob3QgdG8gcmV0cmlldmUgdGhlIGRpZmZlcmVuY2UuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHRoZSBQYWdlIEJsb2IgR2V0IFBhZ2UgUmFuZ2VzIERpZmYgb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIFJlc3BvbnNlIGRhdGEgZm9yIHRoZSBQYWdlIEJsb2IgR2V0IFBhZ2UgUmFuZ2UgRGlmZiBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgZ2V0UGFnZVJhbmdlc0RpZmZGb3JNYW5hZ2VkRGlza3Mob2Zmc2V0LCBjb3VudCwgcHJldlNuYXBzaG90VXJsLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0gb3B0aW9ucy5jb25kaXRpb25zIHx8IHt9O1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIlBhZ2VCbG9iQ2xpZW50LUdldFBhZ2VSYW5nZXNEaWZmRm9yTWFuYWdlZERpc2tzXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLnBhZ2VCbG9iQ29udGV4dC5nZXRQYWdlUmFuZ2VzRGlmZih7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIHByZXZTbmFwc2hvdFVybCxcbiAgICAgICAgICAgICAgICByYW5nZTogcmFuZ2VUb1N0cmluZyh7IG9mZnNldCwgY291bnQgfSksXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgcmV0dXJuIHJhbmdlUmVzcG9uc2VGcm9tTW9kZWwocmVzcG9uc2UpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVzaXplcyB0aGUgcGFnZSBibG9iIHRvIHRoZSBzcGVjaWZpZWQgc2l6ZSAod2hpY2ggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDUxMikuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvc2V0LWJsb2ItcHJvcGVydGllc1xuICAgICAqXG4gICAgICogQHBhcmFtIHNpemUgLSBUYXJnZXQgc2l6ZVxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB0aGUgUGFnZSBCbG9iIFJlc2l6ZSBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgdGhlIFBhZ2UgQmxvYiBSZXNpemUgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIHJlc2l6ZShzaXplLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0gb3B0aW9ucy5jb25kaXRpb25zIHx8IHt9O1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIlBhZ2VCbG9iQ2xpZW50LXJlc2l6ZVwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLnBhZ2VCbG9iQ29udGV4dC5yZXNpemUoc2l6ZSwge1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICBlbmNyeXB0aW9uU2NvcGU6IG9wdGlvbnMuZW5jcnlwdGlvblNjb3BlLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldHMgYSBwYWdlIGJsb2IncyBzZXF1ZW5jZSBudW1iZXIuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvc2V0LWJsb2ItcHJvcGVydGllc1xuICAgICAqXG4gICAgICogQHBhcmFtIHNlcXVlbmNlTnVtYmVyQWN0aW9uIC0gSW5kaWNhdGVzIGhvdyB0aGUgc2VydmljZSBzaG91bGQgbW9kaWZ5IHRoZSBibG9iJ3Mgc2VxdWVuY2UgbnVtYmVyLlxuICAgICAqIEBwYXJhbSBzZXF1ZW5jZU51bWJlciAtIFJlcXVpcmVkIGlmIHNlcXVlbmNlTnVtYmVyQWN0aW9uIGlzIG1heCBvciB1cGRhdGVcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gdGhlIFBhZ2UgQmxvYiBVcGRhdGUgU2VxdWVuY2UgTnVtYmVyIG9wZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyBSZXNwb25zZSBkYXRhIGZvciB0aGUgUGFnZSBCbG9iIFVwZGF0ZSBTZXF1ZW5jZSBOdW1iZXIgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIHVwZGF0ZVNlcXVlbmNlTnVtYmVyKHNlcXVlbmNlTnVtYmVyQWN0aW9uLCBzZXF1ZW5jZU51bWJlciwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIG9wdGlvbnMuY29uZGl0aW9ucyA9IG9wdGlvbnMuY29uZGl0aW9ucyB8fCB7fTtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJQYWdlQmxvYkNsaWVudC11cGRhdGVTZXF1ZW5jZU51bWJlclwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLnBhZ2VCbG9iQ29udGV4dC51cGRhdGVTZXF1ZW5jZU51bWJlcihzZXF1ZW5jZU51bWJlckFjdGlvbiwge1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGJsb2JTZXF1ZW5jZU51bWJlcjogc2VxdWVuY2VOdW1iZXIsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEJlZ2lucyBhbiBvcGVyYXRpb24gdG8gc3RhcnQgYW4gaW5jcmVtZW50YWwgY29weSBmcm9tIG9uZSBwYWdlIGJsb2IncyBzbmFwc2hvdCB0byB0aGlzIHBhZ2UgYmxvYi5cbiAgICAgKiBUaGUgc25hcHNob3QgaXMgY29waWVkIHN1Y2ggdGhhdCBvbmx5IHRoZSBkaWZmZXJlbnRpYWwgY2hhbmdlcyBiZXR3ZWVuIHRoZSBwcmV2aW91c2x5XG4gICAgICogY29waWVkIHNuYXBzaG90IGFyZSB0cmFuc2ZlcnJlZCB0byB0aGUgZGVzdGluYXRpb24uXG4gICAgICogVGhlIGNvcGllZCBzbmFwc2hvdHMgYXJlIGNvbXBsZXRlIGNvcGllcyBvZiB0aGUgb3JpZ2luYWwgc25hcHNob3QgYW5kIGNhbiBiZSByZWFkIG9yIGNvcGllZCBmcm9tIGFzIHVzdWFsLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2luY3JlbWVudGFsLWNvcHktYmxvYlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvYXp1cmUvdmlydHVhbC1tYWNoaW5lcy93aW5kb3dzL2luY3JlbWVudGFsLXNuYXBzaG90c1xuICAgICAqXG4gICAgICogQHBhcmFtIGNvcHlTb3VyY2UgLSBTcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIHNvdXJjZSBwYWdlIGJsb2Igc25hcHNob3QuIEZvciBleGFtcGxlLFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBzOi8vbXlhY2NvdW50LmJsb2IuY29yZS53aW5kb3dzLm5ldC9teWNvbnRhaW5lci9teWJsb2I/c25hcHNob3Q9PERhdGVUaW1lPlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB0aGUgUGFnZSBCbG9iIENvcHkgSW5jcmVtZW50YWwgb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIFJlc3BvbnNlIGRhdGEgZm9yIHRoZSBQYWdlIEJsb2IgQ29weSBJbmNyZW1lbnRhbCBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgc3RhcnRDb3B5SW5jcmVtZW50YWwoY29weVNvdXJjZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiUGFnZUJsb2JDbGllbnQtc3RhcnRDb3B5SW5jcmVtZW50YWxcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5wYWdlQmxvYkNvbnRleHQuY29weUluY3JlbWVudGFsKGNvcHlTb3VyY2UsIHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuYXN5bmMgZnVuY3Rpb24gZ2V0Qm9keUFzVGV4dChiYXRjaFJlc3BvbnNlKSB7XG4gICAgbGV0IGJ1ZmZlciA9IEJ1ZmZlci5hbGxvYyhCQVRDSF9NQVhfUEFZTE9BRF9JTl9CWVRFUyk7XG4gICAgY29uc3QgcmVzcG9uc2VMZW5ndGggPSBhd2FpdCBzdHJlYW1Ub0J1ZmZlcjIoYmF0Y2hSZXNwb25zZS5yZWFkYWJsZVN0cmVhbUJvZHksIGJ1ZmZlcik7XG4gICAgLy8gU2xpY2UgdGhlIGJ1ZmZlciB0byB0cmltIHRoZSBlbXB0eSBlbmRpbmcuXG4gICAgYnVmZmVyID0gYnVmZmVyLnNsaWNlKDAsIHJlc3BvbnNlTGVuZ3RoKTtcbiAgICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7XG59XG5mdW5jdGlvbiB1dGY4Qnl0ZUxlbmd0aChzdHIpIHtcbiAgICByZXR1cm4gQnVmZmVyLmJ5dGVMZW5ndGgoc3RyKTtcbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5jb25zdCBIVFRQX0hFQURFUl9ERUxJTUlURVIgPSBcIjogXCI7XG5jb25zdCBTUEFDRV9ERUxJTUlURVIgPSBcIiBcIjtcbmNvbnN0IE5PVF9GT1VORCA9IC0xO1xuLyoqXG4gKiBVdGlsIGNsYXNzIGZvciBwYXJzaW5nIGJhdGNoIHJlc3BvbnNlLlxuICovXG5jbGFzcyBCYXRjaFJlc3BvbnNlUGFyc2VyIHtcbiAgICBjb25zdHJ1Y3RvcihiYXRjaFJlc3BvbnNlLCBzdWJSZXF1ZXN0cykge1xuICAgICAgICBpZiAoIWJhdGNoUmVzcG9uc2UgfHwgIWJhdGNoUmVzcG9uc2UuY29udGVudFR5cGUpIHtcbiAgICAgICAgICAgIC8vIEluIHNwZWNpYWwgY2FzZShyZXBvcnRlZCksIHNlcnZlciBtYXkgcmV0dXJuIGludmFsaWQgY29udGVudC10eXBlIHdoaWNoIGNvdWxkIG5vdCBiZSBwYXJzZWQuXG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcImJhdGNoUmVzcG9uc2UgaXMgbWFsZm9ybWVkIG9yIGRvZXNuJ3QgY29udGFpbiB2YWxpZCBjb250ZW50LXR5cGUuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghc3ViUmVxdWVzdHMgfHwgc3ViUmVxdWVzdHMuc2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgYmUgcHJldmVudCBkdXJpbmcgY29kaW5nLlxuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBzdWJSZXF1ZXN0cyBpcyBub3QgcHJvdmlkZWQgb3Igc2l6ZSBpcyAwLlwiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJhdGNoUmVzcG9uc2UgPSBiYXRjaFJlc3BvbnNlO1xuICAgICAgICB0aGlzLnN1YlJlcXVlc3RzID0gc3ViUmVxdWVzdHM7XG4gICAgICAgIHRoaXMucmVzcG9uc2VCYXRjaEJvdW5kYXJ5ID0gdGhpcy5iYXRjaFJlc3BvbnNlLmNvbnRlbnRUeXBlLnNwbGl0KFwiPVwiKVsxXTtcbiAgICAgICAgdGhpcy5wZXJSZXNwb25zZVByZWZpeCA9IGAtLSR7dGhpcy5yZXNwb25zZUJhdGNoQm91bmRhcnl9JHtIVFRQX0xJTkVfRU5ESU5HfWA7XG4gICAgICAgIHRoaXMuYmF0Y2hSZXNwb25zZUVuZGluZyA9IGAtLSR7dGhpcy5yZXNwb25zZUJhdGNoQm91bmRhcnl9LS1gO1xuICAgIH1cbiAgICAvLyBGb3IgZXhhbXBsZSBvZiByZXNwb25zZSwgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9ibG9iLWJhdGNoI3Jlc3BvbnNlXG4gICAgYXN5bmMgcGFyc2VCYXRjaFJlc3BvbnNlKCkge1xuICAgICAgICAvLyBXaGVuIGxvZ2ljIHJlYWNoIGhlcmUsIHN1cHBvc2UgYmF0Y2ggcmVxdWVzdCBoYXMgYWxyZWFkeSBzdWNjZWVkZWQgd2l0aCAyMDIsIHNvIHdlIGNhbiBmdXJ0aGVyIHBhcnNlXG4gICAgICAgIC8vIHN1YiByZXF1ZXN0J3MgcmVzcG9uc2UuXG4gICAgICAgIGlmICh0aGlzLmJhdGNoUmVzcG9uc2UuX3Jlc3BvbnNlLnN0YXR1cyAhPT0gSFRUUFVSTENvbm5lY3Rpb24uSFRUUF9BQ0NFUFRFRCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHN0YXRlOiBiYXRjaCByZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1czogJyR7dGhpcy5iYXRjaFJlc3BvbnNlLl9yZXNwb25zZS5zdGF0dXN9Jy5gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXNwb25zZUJvZHlBc1RleHQgPSBhd2FpdCBnZXRCb2R5QXNUZXh0KHRoaXMuYmF0Y2hSZXNwb25zZSk7XG4gICAgICAgIGNvbnN0IHN1YlJlc3BvbnNlcyA9IHJlc3BvbnNlQm9keUFzVGV4dFxuICAgICAgICAgICAgLnNwbGl0KHRoaXMuYmF0Y2hSZXNwb25zZUVuZGluZylbMF0gLy8gc3RyaW5nIGFmdGVyIGVuZGluZyBpcyB1c2VsZXNzXG4gICAgICAgICAgICAuc3BsaXQodGhpcy5wZXJSZXNwb25zZVByZWZpeClcbiAgICAgICAgICAgIC5zbGljZSgxKTsgLy8gc3RyaW5nIGJlZm9yZSBmaXJzdCByZXNwb25zZSBib3VuZGFyeSBpcyB1c2VsZXNzXG4gICAgICAgIGNvbnN0IHN1YlJlc3BvbnNlQ291bnQgPSBzdWJSZXNwb25zZXMubGVuZ3RoO1xuICAgICAgICAvLyBEZWZlbnNpdmUgY29kaW5nIGluIGNhc2Ugb2YgcG90ZW50aWFsIGVycm9yIHBhcnNpbmcuXG4gICAgICAgIC8vIE5vdGU6IHN1YlJlc3BvbnNlQ291bnQgPT0gMSBpcyBzcGVjaWFsIGNhc2Ugd2hlcmUgc3ViIHJlcXVlc3QgaXMgaW52YWxpZC5cbiAgICAgICAgLy8gV2UgdHJ5IHRvIHByZXZlbnQgc3VjaCBjYXNlcyB0aHJvdWdoIGVhcmx5IHZhbGlkYXRpb24sIGUuZy4gdmFsaWRhdGUgc3ViIHJlcXVlc3QgY291bnQgPj0gMS5cbiAgICAgICAgLy8gV2hpbGUgaW4gdW5leHBlY3RlZCBzdWIgcmVxdWVzdCBpbnZhbGlkIGNhc2UsIHdlIGFsbG93IHN1YiByZXNwb25zZSB0byBiZSBwYXJzZWQgYW5kIHJldHVybiB0byB1c2VyLlxuICAgICAgICBpZiAoc3ViUmVzcG9uc2VDb3VudCAhPT0gdGhpcy5zdWJSZXF1ZXN0cy5zaXplICYmIHN1YlJlc3BvbnNlQ291bnQgIT09IDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGU6IHN1YiByZXNwb25zZXMnIGNvdW50IGlzIG5vdCBlcXVhbCB0byBzdWIgcmVxdWVzdHMnIGNvdW50LlwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkZXNlcmlhbGl6ZWRTdWJSZXNwb25zZXMgPSBuZXcgQXJyYXkoc3ViUmVzcG9uc2VDb3VudCk7XG4gICAgICAgIGxldCBzdWJSZXNwb25zZXNTdWNjZWVkZWRDb3VudCA9IDA7XG4gICAgICAgIGxldCBzdWJSZXNwb25zZXNGYWlsZWRDb3VudCA9IDA7XG4gICAgICAgIC8vIFBhcnNlIHN1YiBzdWJSZXNwb25zZXMuXG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBzdWJSZXNwb25zZUNvdW50OyBpbmRleCsrKSB7XG4gICAgICAgICAgICBjb25zdCBzdWJSZXNwb25zZSA9IHN1YlJlc3BvbnNlc1tpbmRleF07XG4gICAgICAgICAgICBjb25zdCBkZXNlcmlhbGl6ZWRTdWJSZXNwb25zZSA9IHt9O1xuICAgICAgICAgICAgZGVzZXJpYWxpemVkU3ViUmVzcG9uc2UuaGVhZGVycyA9IGNvcmVIdHRwQ29tcGF0LnRvSHR0cEhlYWRlcnNMaWtlKGNvcmVSZXN0UGlwZWxpbmUuY3JlYXRlSHR0cEhlYWRlcnMoKSk7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZUxpbmVzID0gc3ViUmVzcG9uc2Uuc3BsaXQoYCR7SFRUUF9MSU5FX0VORElOR31gKTtcbiAgICAgICAgICAgIGxldCBzdWJSZXNwSGVhZGVyU3RhcnRGb3VuZCA9IGZhbHNlO1xuICAgICAgICAgICAgbGV0IHN1YlJlc3BIZWFkZXJFbmRGb3VuZCA9IGZhbHNlO1xuICAgICAgICAgICAgbGV0IHN1YlJlc3BGYWlsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGxldCBjb250ZW50SWQgPSBOT1RfRk9VTkQ7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJlc3BvbnNlTGluZSBvZiByZXNwb25zZUxpbmVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFzdWJSZXNwSGVhZGVyU3RhcnRGb3VuZCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBDb252ZW50aW9uIGxpbmUgdG8gaW5kaWNhdGUgY29udGVudCBJRFxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2VMaW5lLnN0YXJ0c1dpdGgoSGVhZGVyQ29uc3RhbnRzLkNPTlRFTlRfSUQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50SWQgPSBwYXJzZUludChyZXNwb25zZUxpbmUuc3BsaXQoSFRUUF9IRUFERVJfREVMSU1JVEVSKVsxXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gSHR0cCB2ZXJzaW9uIGxpbmUgd2l0aCBzdGF0dXMgY29kZSBpbmRpY2F0ZXMgdGhlIHN0YXJ0IG9mIHN1YiByZXF1ZXN0J3MgcmVzcG9uc2UuXG4gICAgICAgICAgICAgICAgICAgIC8vIEV4YW1wbGU6IEhUVFAvMS4xIDIwMiBBY2NlcHRlZFxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2VMaW5lLnN0YXJ0c1dpdGgoSFRUUF9WRVJTSU9OXzFfMSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YlJlc3BIZWFkZXJTdGFydEZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRva2VucyA9IHJlc3BvbnNlTGluZS5zcGxpdChTUEFDRV9ERUxJTUlURVIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVzZXJpYWxpemVkU3ViUmVzcG9uc2Uuc3RhdHVzID0gcGFyc2VJbnQodG9rZW5zWzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2VyaWFsaXplZFN1YlJlc3BvbnNlLnN0YXR1c01lc3NhZ2UgPSB0b2tlbnMuc2xpY2UoMikuam9pbihTUEFDRV9ERUxJTUlURVIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBTa2lwIGNvbnZlbnRpb24gaGVhZGVycyBub3Qgc3BlY2lmaWNhbGx5IGZvciBzdWIgcmVxdWVzdCBpLmUuIENvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vaHR0cCBhbmQgQ29udGVudC1JRDogKlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2VMaW5lLnRyaW0oKSA9PT0gXCJcIikge1xuICAgICAgICAgICAgICAgICAgICAvLyBTdWIgcmVzcG9uc2UncyBoZWFkZXIgc3RhcnQgbGluZSBhbHJlYWR5IGZvdW5kLCBhbmQgdGhlIGZpcnN0IGVtcHR5IGxpbmUgaW5kaWNhdGVzIGhlYWRlciBlbmQgbGluZSBmb3VuZC5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzdWJSZXNwSGVhZGVyRW5kRm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YlJlc3BIZWFkZXJFbmRGb3VuZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7IC8vIFNraXAgZW1wdHkgbGluZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBOb3RlOiB3aGVuIGNvZGUgcmVhY2ggaGVyZSwgaXQgaW5kaWNhdGVzIHN1YlJlc3BIZWFkZXJTdGFydEZvdW5kID09IHRydWVcbiAgICAgICAgICAgICAgICBpZiAoIXN1YlJlc3BIZWFkZXJFbmRGb3VuZCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2VMaW5lLmluZGV4T2YoSFRUUF9IRUFERVJfREVMSU1JVEVSKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlZmVuc2l2ZSBjb2RpbmcgdG8gcHJldmVudCBmcm9tIG1pc3NpbmcgdmFsdWFibGUgbGluZXMuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgc3RhdGU6IGZpbmQgbm9uLWVtcHR5IGxpbmUgJyR7cmVzcG9uc2VMaW5lfScgd2l0aG91dCBIVFRQIGhlYWRlciBkZWxpbWl0ZXIgJyR7SFRUUF9IRUFERVJfREVMSU1JVEVSfScuYCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gUGFyc2UgaGVhZGVycyBvZiBzdWIgcmVzcG9uc2UuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRva2VucyA9IHJlc3BvbnNlTGluZS5zcGxpdChIVFRQX0hFQURFUl9ERUxJTUlURVIpO1xuICAgICAgICAgICAgICAgICAgICBkZXNlcmlhbGl6ZWRTdWJSZXNwb25zZS5oZWFkZXJzLnNldCh0b2tlbnNbMF0sIHRva2Vuc1sxXSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbnNbMF0gPT09IEhlYWRlckNvbnN0YW50cy5YX01TX0VSUk9SX0NPREUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2VyaWFsaXplZFN1YlJlc3BvbnNlLmVycm9yQ29kZSA9IHRva2Vuc1sxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YlJlc3BGYWlsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBBc3NlbWJsZSBib2R5IG9mIHN1YiByZXNwb25zZS5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFkZXNlcmlhbGl6ZWRTdWJSZXNwb25zZS5ib2R5QXNUZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNlcmlhbGl6ZWRTdWJSZXNwb25zZS5ib2R5QXNUZXh0ID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBkZXNlcmlhbGl6ZWRTdWJSZXNwb25zZS5ib2R5QXNUZXh0ICs9IHJlc3BvbnNlTGluZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IC8vIElubmVyIGZvciBlbmRcbiAgICAgICAgICAgIC8vIFRoZSByZXNwb25zZSB3aWxsIGNvbnRhaW4gdGhlIENvbnRlbnQtSUQgaGVhZGVyIGZvciBlYWNoIGNvcnJlc3BvbmRpbmcgc3VicmVxdWVzdCByZXNwb25zZSB0byB1c2UgZm9yIHRyYWNraW5nLlxuICAgICAgICAgICAgLy8gVGhlIENvbnRlbnQtSURzIGFyZSBzZXQgdG8gYSB2YWxpZCBpbmRleCBpbiB0aGUgc3VicmVxdWVzdHMgd2Ugc2VudC4gSW4gdGhlIHN0YXR1cyBjb2RlIDIwMiBwYXRoLCB3ZSBjb3VsZCBleHBlY3QgaXRcbiAgICAgICAgICAgIC8vIHRvIGJlIDEtMSBtYXBwaW5nIGZyb20gdGhlIFswLCBzdWJSZXF1ZXN0cy5zaXplKSB0byB0aGUgQ29udGVudC1JRHMgcmV0dXJuZWQuIElmIG5vdCwgd2Ugc2ltcGx5IGRvbid0IHJldHVybiB0aGF0XG4gICAgICAgICAgICAvLyB1bmV4cGVjdGVkIHN1YlJlc3BvbnNlIGluIHRoZSBwYXJzZWQgcmVwb25zZSBhbmQgd2UgY2FuIGFsd2F5cyBsb29rIGl0IHVwIGluIHRoZSByYXcgcmVzcG9uc2UgZm9yIGRlYnVnZ2luZyBwdXJwb3NlLlxuICAgICAgICAgICAgaWYgKGNvbnRlbnRJZCAhPT0gTk9UX0ZPVU5EICYmXG4gICAgICAgICAgICAgICAgTnVtYmVyLmlzSW50ZWdlcihjb250ZW50SWQpICYmXG4gICAgICAgICAgICAgICAgY29udGVudElkID49IDAgJiZcbiAgICAgICAgICAgICAgICBjb250ZW50SWQgPCB0aGlzLnN1YlJlcXVlc3RzLnNpemUgJiZcbiAgICAgICAgICAgICAgICBkZXNlcmlhbGl6ZWRTdWJSZXNwb25zZXNbY29udGVudElkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZGVzZXJpYWxpemVkU3ViUmVzcG9uc2UuX3JlcXVlc3QgPSB0aGlzLnN1YlJlcXVlc3RzLmdldChjb250ZW50SWQpO1xuICAgICAgICAgICAgICAgIGRlc2VyaWFsaXplZFN1YlJlc3BvbnNlc1tjb250ZW50SWRdID0gZGVzZXJpYWxpemVkU3ViUmVzcG9uc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoYHN1YlJlc3BvbnNlc1ske2luZGV4fV0gaXMgZHJvcHBlZCBhcyB0aGUgQ29udGVudC1JRCBpcyBub3QgZm91bmQgb3IgaW52YWxpZCwgQ29udGVudC1JRDogJHtjb250ZW50SWR9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3ViUmVzcEZhaWxlZCkge1xuICAgICAgICAgICAgICAgIHN1YlJlc3BvbnNlc0ZhaWxlZENvdW50Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdWJSZXNwb25zZXNTdWNjZWVkZWRDb3VudCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWJSZXNwb25zZXM6IGRlc2VyaWFsaXplZFN1YlJlc3BvbnNlcyxcbiAgICAgICAgICAgIHN1YlJlc3BvbnNlc1N1Y2NlZWRlZENvdW50OiBzdWJSZXNwb25zZXNTdWNjZWVkZWRDb3VudCxcbiAgICAgICAgICAgIHN1YlJlc3BvbnNlc0ZhaWxlZENvdW50OiBzdWJSZXNwb25zZXNGYWlsZWRDb3VudCxcbiAgICAgICAgfTtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxudmFyIE11dGV4TG9ja1N0YXR1cztcbihmdW5jdGlvbiAoTXV0ZXhMb2NrU3RhdHVzKSB7XG4gICAgTXV0ZXhMb2NrU3RhdHVzW011dGV4TG9ja1N0YXR1c1tcIkxPQ0tFRFwiXSA9IDBdID0gXCJMT0NLRURcIjtcbiAgICBNdXRleExvY2tTdGF0dXNbTXV0ZXhMb2NrU3RhdHVzW1wiVU5MT0NLRURcIl0gPSAxXSA9IFwiVU5MT0NLRURcIjtcbn0pKE11dGV4TG9ja1N0YXR1cyB8fCAoTXV0ZXhMb2NrU3RhdHVzID0ge30pKTtcbi8qKlxuICogQW4gYXN5bmMgbXV0ZXggbG9jay5cbiAqL1xuY2xhc3MgTXV0ZXgge1xuICAgIC8qKlxuICAgICAqIExvY2sgZm9yIGEgc3BlY2lmaWMga2V5LiBJZiB0aGUgbG9jayBoYXMgYmVlbiBhY3F1aXJlZCBieSBhbm90aGVyIGN1c3RvbWVyLCB0aGVuXG4gICAgICogd2lsbCB3YWl0IHVudGlsIGdldHRpbmcgdGhlIGxvY2suXG4gICAgICpcbiAgICAgKiBAcGFyYW0ga2V5IC0gbG9jayBrZXlcbiAgICAgKi9cbiAgICBzdGF0aWMgYXN5bmMgbG9jayhrZXkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5rZXlzW2tleV0gPT09IHVuZGVmaW5lZCB8fCB0aGlzLmtleXNba2V5XSA9PT0gTXV0ZXhMb2NrU3RhdHVzLlVOTE9DS0VEKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5rZXlzW2tleV0gPSBNdXRleExvY2tTdGF0dXMuTE9DS0VEO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMub25VbmxvY2tFdmVudChrZXksICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5rZXlzW2tleV0gPSBNdXRleExvY2tTdGF0dXMuTE9DS0VEO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBVbmxvY2sgYSBrZXkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ga2V5IC1cbiAgICAgKi9cbiAgICBzdGF0aWMgYXN5bmMgdW5sb2NrKGtleSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmtleXNba2V5XSA9PT0gTXV0ZXhMb2NrU3RhdHVzLkxPQ0tFRCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdFVubG9ja0V2ZW50KGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5rZXlzW2tleV07XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBzdGF0aWMgb25VbmxvY2tFdmVudChrZXksIGhhbmRsZXIpIHtcbiAgICAgICAgaWYgKHRoaXMubGlzdGVuZXJzW2tleV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5saXN0ZW5lcnNba2V5XSA9IFtoYW5kbGVyXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzW2tleV0ucHVzaChoYW5kbGVyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgZW1pdFVubG9ja0V2ZW50KGtleSkge1xuICAgICAgICBpZiAodGhpcy5saXN0ZW5lcnNba2V5XSAhPT0gdW5kZWZpbmVkICYmIHRoaXMubGlzdGVuZXJzW2tleV0ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlciA9IHRoaXMubGlzdGVuZXJzW2tleV0uc2hpZnQoKTtcbiAgICAgICAgICAgIHNldEltbWVkaWF0ZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaGFuZGxlci5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5NdXRleC5rZXlzID0ge307XG5NdXRleC5saXN0ZW5lcnMgPSB7fTtcblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIEEgQmxvYkJhdGNoIHJlcHJlc2VudHMgYW4gYWdncmVnYXRlZCBzZXQgb2Ygb3BlcmF0aW9ucyBvbiBibG9icy5cbiAqIEN1cnJlbnRseSwgb25seSBgZGVsZXRlYCBhbmQgYHNldEFjY2Vzc1RpZXJgIGFyZSBzdXBwb3J0ZWQuXG4gKi9cbmNsYXNzIEJsb2JCYXRjaCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuYmF0Y2ggPSBcImJhdGNoXCI7XG4gICAgICAgIHRoaXMuYmF0Y2hSZXF1ZXN0ID0gbmV3IElubmVyQmF0Y2hSZXF1ZXN0KCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgdmFsdWUgb2YgQ29udGVudC1UeXBlIGZvciBhIGJhdGNoIHJlcXVlc3QuXG4gICAgICogVGhlIHZhbHVlIG11c3QgYmUgbXVsdGlwYXJ0L21peGVkIHdpdGggYSBiYXRjaCBib3VuZGFyeS5cbiAgICAgKiBFeGFtcGxlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PWJhdGNoX2E4MTc4NmM4LWUzMDEtNGU0Mi1hNzI5LWEzMmNhMjRhZTI1MlxuICAgICAqL1xuICAgIGdldE11bHRpUGFydENvbnRlbnRUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5iYXRjaFJlcXVlc3QuZ2V0TXVsdGlwYXJ0Q29udGVudFR5cGUoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IGFzc2VtYmxlZCBIVFRQIHJlcXVlc3QgYm9keSBmb3Igc3ViIHJlcXVlc3RzLlxuICAgICAqL1xuICAgIGdldEh0dHBSZXF1ZXN0Qm9keSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmF0Y2hSZXF1ZXN0LmdldEh0dHBSZXF1ZXN0Qm9keSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgc3ViIHJlcXVlc3RzIHRoYXQgYXJlIGFkZGVkIGludG8gdGhlIGJhdGNoIHJlcXVlc3QuXG4gICAgICovXG4gICAgZ2V0U3ViUmVxdWVzdHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhdGNoUmVxdWVzdC5nZXRTdWJSZXF1ZXN0cygpO1xuICAgIH1cbiAgICBhc3luYyBhZGRTdWJSZXF1ZXN0SW50ZXJuYWwoc3ViUmVxdWVzdCwgYXNzZW1ibGVTdWJSZXF1ZXN0RnVuYykge1xuICAgICAgICBhd2FpdCBNdXRleC5sb2NrKHRoaXMuYmF0Y2gpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5iYXRjaFJlcXVlc3QucHJlQWRkU3ViUmVxdWVzdChzdWJSZXF1ZXN0KTtcbiAgICAgICAgICAgIGF3YWl0IGFzc2VtYmxlU3ViUmVxdWVzdEZ1bmMoKTtcbiAgICAgICAgICAgIHRoaXMuYmF0Y2hSZXF1ZXN0LnBvc3RBZGRTdWJSZXF1ZXN0KHN1YlJlcXVlc3QpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgYXdhaXQgTXV0ZXgudW5sb2NrKHRoaXMuYmF0Y2gpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNldEJhdGNoVHlwZShiYXRjaFR5cGUpIHtcbiAgICAgICAgaWYgKCF0aGlzLmJhdGNoVHlwZSkge1xuICAgICAgICAgICAgdGhpcy5iYXRjaFR5cGUgPSBiYXRjaFR5cGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuYmF0Y2hUeXBlICE9PSBiYXRjaFR5cGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBCbG9iQmF0Y2ggb25seSBzdXBwb3J0cyBvbmUgb3BlcmF0aW9uIHR5cGUgcGVyIGJhdGNoIGFuZCBpdCBhbHJlYWR5IGlzIGJlaW5nIHVzZWQgZm9yICR7dGhpcy5iYXRjaFR5cGV9IG9wZXJhdGlvbnMuYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgZGVsZXRlQmxvYih1cmxPckJsb2JDbGllbnQsIGNyZWRlbnRpYWxPck9wdGlvbnMsIG9wdGlvbnMpIHtcbiAgICAgICAgbGV0IHVybDtcbiAgICAgICAgbGV0IGNyZWRlbnRpYWw7XG4gICAgICAgIGlmICh0eXBlb2YgdXJsT3JCbG9iQ2xpZW50ID09PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICAoKGNvcmVVdGlsLmlzTm9kZSAmJiBjcmVkZW50aWFsT3JPcHRpb25zIGluc3RhbmNlb2YgU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwpIHx8XG4gICAgICAgICAgICAgICAgY3JlZGVudGlhbE9yT3B0aW9ucyBpbnN0YW5jZW9mIEFub255bW91c0NyZWRlbnRpYWwgfHxcbiAgICAgICAgICAgICAgICBjb3JlQXV0aC5pc1Rva2VuQ3JlZGVudGlhbChjcmVkZW50aWFsT3JPcHRpb25zKSkpIHtcbiAgICAgICAgICAgIC8vIEZpcnN0IG92ZXJsb2FkXG4gICAgICAgICAgICB1cmwgPSB1cmxPckJsb2JDbGllbnQ7XG4gICAgICAgICAgICBjcmVkZW50aWFsID0gY3JlZGVudGlhbE9yT3B0aW9ucztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1cmxPckJsb2JDbGllbnQgaW5zdGFuY2VvZiBCbG9iQ2xpZW50KSB7XG4gICAgICAgICAgICAvLyBTZWNvbmQgb3ZlcmxvYWRcbiAgICAgICAgICAgIHVybCA9IHVybE9yQmxvYkNsaWVudC51cmw7XG4gICAgICAgICAgICBjcmVkZW50aWFsID0gdXJsT3JCbG9iQ2xpZW50LmNyZWRlbnRpYWw7XG4gICAgICAgICAgICBvcHRpb25zID0gY3JlZGVudGlhbE9yT3B0aW9ucztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiSW52YWxpZCBhcmd1bWVudHMuIEVpdGhlciB1cmwgYW5kIGNyZWRlbnRpYWwsIG9yIEJsb2JDbGllbnQgbmVlZCBiZSBwcm92aWRlZC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICAgICAgICBvcHRpb25zID0ge307XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCYXRjaERlbGV0ZVJlcXVlc3QtYWRkU3ViUmVxdWVzdFwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0QmF0Y2hUeXBlKFwiZGVsZXRlXCIpO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5hZGRTdWJSZXF1ZXN0SW50ZXJuYWwoe1xuICAgICAgICAgICAgICAgIHVybDogdXJsLFxuICAgICAgICAgICAgICAgIGNyZWRlbnRpYWw6IGNyZWRlbnRpYWwsXG4gICAgICAgICAgICB9LCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgYXdhaXQgbmV3IEJsb2JDbGllbnQodXJsLCB0aGlzLmJhdGNoUmVxdWVzdC5jcmVhdGVQaXBlbGluZShjcmVkZW50aWFsKSkuZGVsZXRlKHVwZGF0ZWRPcHRpb25zKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMgc2V0QmxvYkFjY2Vzc1RpZXIodXJsT3JCbG9iQ2xpZW50LCBjcmVkZW50aWFsT3JUaWVyLCB0aWVyT3JPcHRpb25zLCBvcHRpb25zKSB7XG4gICAgICAgIGxldCB1cmw7XG4gICAgICAgIGxldCBjcmVkZW50aWFsO1xuICAgICAgICBsZXQgdGllcjtcbiAgICAgICAgaWYgKHR5cGVvZiB1cmxPckJsb2JDbGllbnQgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICAgICgoY29yZVV0aWwuaXNOb2RlICYmIGNyZWRlbnRpYWxPclRpZXIgaW5zdGFuY2VvZiBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbCkgfHxcbiAgICAgICAgICAgICAgICBjcmVkZW50aWFsT3JUaWVyIGluc3RhbmNlb2YgQW5vbnltb3VzQ3JlZGVudGlhbCB8fFxuICAgICAgICAgICAgICAgIGNvcmVBdXRoLmlzVG9rZW5DcmVkZW50aWFsKGNyZWRlbnRpYWxPclRpZXIpKSkge1xuICAgICAgICAgICAgLy8gRmlyc3Qgb3ZlcmxvYWRcbiAgICAgICAgICAgIHVybCA9IHVybE9yQmxvYkNsaWVudDtcbiAgICAgICAgICAgIGNyZWRlbnRpYWwgPSBjcmVkZW50aWFsT3JUaWVyO1xuICAgICAgICAgICAgdGllciA9IHRpZXJPck9wdGlvbnM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodXJsT3JCbG9iQ2xpZW50IGluc3RhbmNlb2YgQmxvYkNsaWVudCkge1xuICAgICAgICAgICAgLy8gU2Vjb25kIG92ZXJsb2FkXG4gICAgICAgICAgICB1cmwgPSB1cmxPckJsb2JDbGllbnQudXJsO1xuICAgICAgICAgICAgY3JlZGVudGlhbCA9IHVybE9yQmxvYkNsaWVudC5jcmVkZW50aWFsO1xuICAgICAgICAgICAgdGllciA9IGNyZWRlbnRpYWxPclRpZXI7XG4gICAgICAgICAgICBvcHRpb25zID0gdGllck9yT3B0aW9ucztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiSW52YWxpZCBhcmd1bWVudHMuIEVpdGhlciB1cmwgYW5kIGNyZWRlbnRpYWwsIG9yIEJsb2JDbGllbnQgbmVlZCBiZSBwcm92aWRlZC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICAgICAgICBvcHRpb25zID0ge307XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCYXRjaFNldFRpZXJSZXF1ZXN0LWFkZFN1YlJlcXVlc3RcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldEJhdGNoVHlwZShcInNldEFjY2Vzc1RpZXJcIik7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmFkZFN1YlJlcXVlc3RJbnRlcm5hbCh7XG4gICAgICAgICAgICAgICAgdXJsOiB1cmwsXG4gICAgICAgICAgICAgICAgY3JlZGVudGlhbDogY3JlZGVudGlhbCxcbiAgICAgICAgICAgIH0sIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICBhd2FpdCBuZXcgQmxvYkNsaWVudCh1cmwsIHRoaXMuYmF0Y2hSZXF1ZXN0LmNyZWF0ZVBpcGVsaW5lKGNyZWRlbnRpYWwpKS5zZXRBY2Nlc3NUaWVyKHRpZXIsIHVwZGF0ZWRPcHRpb25zKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4vKipcbiAqIElubmVyIGJhdGNoIHJlcXVlc3QgY2xhc3Mgd2hpY2ggaXMgcmVzcG9uc2libGUgZm9yIGFzc2VtYmxpbmcgYW5kIHNlcmlhbGl6aW5nIHN1YiByZXF1ZXN0cy5cbiAqIFNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvYmxvYi1iYXRjaCNyZXF1ZXN0LWJvZHkgZm9yIGhvdyByZXF1ZXN0cyBhcmUgYXNzZW1ibGVkLlxuICovXG5jbGFzcyBJbm5lckJhdGNoUmVxdWVzdCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMub3BlcmF0aW9uQ291bnQgPSAwO1xuICAgICAgICB0aGlzLmJvZHkgPSBcIlwiO1xuICAgICAgICBjb25zdCB0ZW1wR3VpZCA9IGNvcmVVdGlsLnJhbmRvbVVVSUQoKTtcbiAgICAgICAgLy8gYmF0Y2hfe2JhdGNoaWR9XG4gICAgICAgIHRoaXMuYm91bmRhcnkgPSBgYmF0Y2hfJHt0ZW1wR3VpZH1gO1xuICAgICAgICAvLyAtLWJhdGNoX3tiYXRjaGlkfVxuICAgICAgICAvLyBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2h0dHBcbiAgICAgICAgLy8gQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmluYXJ5XG4gICAgICAgIHRoaXMuc3ViUmVxdWVzdFByZWZpeCA9IGAtLSR7dGhpcy5ib3VuZGFyeX0ke0hUVFBfTElORV9FTkRJTkd9JHtIZWFkZXJDb25zdGFudHMuQ09OVEVOVF9UWVBFfTogYXBwbGljYXRpb24vaHR0cCR7SFRUUF9MSU5FX0VORElOR30ke0hlYWRlckNvbnN0YW50cy5DT05URU5UX1RSQU5TRkVSX0VOQ09ESU5HfTogYmluYXJ5YDtcbiAgICAgICAgLy8gbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT1iYXRjaF97YmF0Y2hpZH1cbiAgICAgICAgdGhpcy5tdWx0aXBhcnRDb250ZW50VHlwZSA9IGBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSR7dGhpcy5ib3VuZGFyeX1gO1xuICAgICAgICAvLyAtLWJhdGNoX3tiYXRjaGlkfS0tXG4gICAgICAgIHRoaXMuYmF0Y2hSZXF1ZXN0RW5kaW5nID0gYC0tJHt0aGlzLmJvdW5kYXJ5fS0tYDtcbiAgICAgICAgdGhpcy5zdWJSZXF1ZXN0cyA9IG5ldyBNYXAoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIHBpcGVsaW5lIHRvIGFzc2VtYmxlIHN1YiByZXF1ZXN0cy4gVGhlIGlkZWEgaGVyZSBpcyB0byB1c2UgZXhpc3RpbmdcbiAgICAgKiBjcmVkZW50aWFsIGFuZCBzZXJpYWxpemF0aW9uL2Rlc2VyaWFsaXphdGlvbiBjb21wb25lbnRzLCB3aXRoIGFkZGl0aW9uYWwgcG9saWNpZXMgdG9cbiAgICAgKiBmaWx0ZXIgdW5uZWNlc3NhcnkgaGVhZGVycywgYXNzZW1ibGUgc3ViIHJlcXVlc3RzIGludG8gcmVxdWVzdCdzIGJvZHlcbiAgICAgKiBhbmQgaW50ZXJjZXB0IHJlcXVlc3QgZnJvbSBnb2luZyB0byB3aXJlLlxuICAgICAqIEBwYXJhbSBjcmVkZW50aWFsIC0gIFN1Y2ggYXMgQW5vbnltb3VzQ3JlZGVudGlhbCwgU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwgb3IgYW55IGNyZWRlbnRpYWwgZnJvbSB0aGUgYEBhenVyZS9pZGVudGl0eWAgcGFja2FnZSB0byBhdXRoZW50aWNhdGUgcmVxdWVzdHMgdG8gdGhlIHNlcnZpY2UuIFlvdSBjYW4gYWxzbyBwcm92aWRlIGFuIG9iamVjdCB0aGF0IGltcGxlbWVudHMgdGhlIFRva2VuQ3JlZGVudGlhbCBpbnRlcmZhY2UuIElmIG5vdCBzcGVjaWZpZWQsIEFub255bW91c0NyZWRlbnRpYWwgaXMgdXNlZC5cbiAgICAgKi9cbiAgICBjcmVhdGVQaXBlbGluZShjcmVkZW50aWFsKSB7XG4gICAgICAgIGNvbnN0IGNvcmVQaXBlbGluZSA9IGNvcmVSZXN0UGlwZWxpbmUuY3JlYXRlRW1wdHlQaXBlbGluZSgpO1xuICAgICAgICBjb3JlUGlwZWxpbmUuYWRkUG9saWN5KGNvcmVDbGllbnQuc2VyaWFsaXphdGlvblBvbGljeSh7XG4gICAgICAgICAgICBzdHJpbmdpZnlYTUw6IGNvcmVYbWwuc3RyaW5naWZ5WE1MLFxuICAgICAgICAgICAgc2VyaWFsaXplck9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICB4bWw6IHtcbiAgICAgICAgICAgICAgICAgICAgeG1sQ2hhcktleTogXCIjXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pLCB7IHBoYXNlOiBcIlNlcmlhbGl6ZVwiIH0pO1xuICAgICAgICAvLyBVc2UgYmF0Y2ggaGVhZGVyIGZpbHRlciBwb2xpY3kgdG8gZXhjbHVkZSB1bm5lY2Vzc2FyeSBoZWFkZXJzXG4gICAgICAgIGNvcmVQaXBlbGluZS5hZGRQb2xpY3koYmF0Y2hIZWFkZXJGaWx0ZXJQb2xpY3koKSk7XG4gICAgICAgIC8vIFVzZSBiYXRjaCBhc3NlbWJsZSBwb2xpY3kgdG8gYXNzZW1ibGUgcmVxdWVzdCBhbmQgaW50ZXJjZXB0IHJlcXVlc3QgZnJvbSBnb2luZyB0byB3aXJlXG4gICAgICAgIGNvcmVQaXBlbGluZS5hZGRQb2xpY3koYmF0Y2hSZXF1ZXN0QXNzZW1ibGVQb2xpY3kodGhpcyksIHsgYWZ0ZXJQaGFzZTogXCJTaWduXCIgfSk7XG4gICAgICAgIGlmIChjb3JlQXV0aC5pc1Rva2VuQ3JlZGVudGlhbChjcmVkZW50aWFsKSkge1xuICAgICAgICAgICAgY29yZVBpcGVsaW5lLmFkZFBvbGljeShjb3JlUmVzdFBpcGVsaW5lLmJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3koe1xuICAgICAgICAgICAgICAgIGNyZWRlbnRpYWwsXG4gICAgICAgICAgICAgICAgc2NvcGVzOiBTdG9yYWdlT0F1dGhTY29wZXMsXG4gICAgICAgICAgICAgICAgY2hhbGxlbmdlQ2FsbGJhY2tzOiB7IGF1dGhvcml6ZVJlcXVlc3RPbkNoYWxsZW5nZTogY29yZUNsaWVudC5hdXRob3JpemVSZXF1ZXN0T25UZW5hbnRDaGFsbGVuZ2UgfSxcbiAgICAgICAgICAgIH0pLCB7IHBoYXNlOiBcIlNpZ25cIiB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjcmVkZW50aWFsIGluc3RhbmNlb2YgU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwpIHtcbiAgICAgICAgICAgIGNvcmVQaXBlbGluZS5hZGRQb2xpY3koc3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWxQb2xpY3koe1xuICAgICAgICAgICAgICAgIGFjY291bnROYW1lOiBjcmVkZW50aWFsLmFjY291bnROYW1lLFxuICAgICAgICAgICAgICAgIGFjY291bnRLZXk6IGNyZWRlbnRpYWwuYWNjb3VudEtleSxcbiAgICAgICAgICAgIH0pLCB7IHBoYXNlOiBcIlNpZ25cIiB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwaXBlbGluZSA9IG5ldyBQaXBlbGluZShbXSk7XG4gICAgICAgIC8vIGF0dGFjaCB0aGUgdjIgcGlwZWxpbmUgdG8gdGhpcyBvbmVcbiAgICAgICAgcGlwZWxpbmUuX2NyZWRlbnRpYWwgPSBjcmVkZW50aWFsO1xuICAgICAgICBwaXBlbGluZS5fY29yZVBpcGVsaW5lID0gY29yZVBpcGVsaW5lO1xuICAgICAgICByZXR1cm4gcGlwZWxpbmU7XG4gICAgfVxuICAgIGFwcGVuZFN1YlJlcXVlc3RUb0JvZHkocmVxdWVzdCkge1xuICAgICAgICAvLyBTdGFydCB0byBhc3NlbWJsZSBzdWIgcmVxdWVzdFxuICAgICAgICB0aGlzLmJvZHkgKz0gW1xuICAgICAgICAgICAgdGhpcy5zdWJSZXF1ZXN0UHJlZml4LCAvLyBzdWIgcmVxdWVzdCBjb25zdGFudCBwcmVmaXhcbiAgICAgICAgICAgIGAke0hlYWRlckNvbnN0YW50cy5DT05URU5UX0lEfTogJHt0aGlzLm9wZXJhdGlvbkNvdW50fWAsIC8vIHN1YiByZXF1ZXN0J3MgY29udGVudCBJRFxuICAgICAgICAgICAgXCJcIiwgLy8gZW1wdHkgbGluZSBhZnRlciBzdWIgcmVxdWVzdCdzIGNvbnRlbnQgSURcbiAgICAgICAgICAgIGAke3JlcXVlc3QubWV0aG9kLnRvU3RyaW5nKCl9ICR7Z2V0VVJMUGF0aEFuZFF1ZXJ5KHJlcXVlc3QudXJsKX0gJHtIVFRQX1ZFUlNJT05fMV8xfSR7SFRUUF9MSU5FX0VORElOR31gLCAvLyBzdWIgcmVxdWVzdCBzdGFydCBsaW5lIHdpdGggbWV0aG9kXG4gICAgICAgIF0uam9pbihIVFRQX0xJTkVfRU5ESU5HKTtcbiAgICAgICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIHJlcXVlc3QuaGVhZGVycykge1xuICAgICAgICAgICAgdGhpcy5ib2R5ICs9IGAke25hbWV9OiAke3ZhbHVlfSR7SFRUUF9MSU5FX0VORElOR31gO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYm9keSArPSBIVFRQX0xJTkVfRU5ESU5HOyAvLyBzdWIgcmVxdWVzdCdzIGhlYWRlcnMgbmVlZCBiZSBlbmRpbmcgd2l0aCBhbiBlbXB0eSBsaW5lXG4gICAgICAgIC8vIE5vIGJvZHkgdG8gYXNzZW1ibGUgZm9yIGN1cnJlbnQgYmF0Y2ggcmVxdWVzdCBzdXBwb3J0XG4gICAgICAgIC8vIEVuZCB0byBhc3NlbWJsZSBzdWIgcmVxdWVzdFxuICAgIH1cbiAgICBwcmVBZGRTdWJSZXF1ZXN0KHN1YlJlcXVlc3QpIHtcbiAgICAgICAgaWYgKHRoaXMub3BlcmF0aW9uQ291bnQgPj0gQkFUQ0hfTUFYX1JFUVVFU1QpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBDYW5ub3QgZXhjZWVkICR7QkFUQ0hfTUFYX1JFUVVFU1R9IHN1YiByZXF1ZXN0cyBpbiBhIHNpbmdsZSBiYXRjaGApO1xuICAgICAgICB9XG4gICAgICAgIC8vIEZhc3QgZmFpbCBpZiB1cmwgZm9yIHN1YiByZXF1ZXN0IGlzIGludmFsaWRcbiAgICAgICAgY29uc3QgcGF0aCA9IGdldFVSTFBhdGgoc3ViUmVxdWVzdC51cmwpO1xuICAgICAgICBpZiAoIXBhdGggfHwgcGF0aCA9PT0gXCJcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEludmFsaWQgdXJsIGZvciBzdWIgcmVxdWVzdDogJyR7c3ViUmVxdWVzdC51cmx9J2ApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHBvc3RBZGRTdWJSZXF1ZXN0KHN1YlJlcXVlc3QpIHtcbiAgICAgICAgdGhpcy5zdWJSZXF1ZXN0cy5zZXQodGhpcy5vcGVyYXRpb25Db3VudCwgc3ViUmVxdWVzdCk7XG4gICAgICAgIHRoaXMub3BlcmF0aW9uQ291bnQrKztcbiAgICB9XG4gICAgLy8gUmV0dXJuIHRoZSBodHRwIHJlcXVlc3QgYm9keSB3aXRoIGFzc2VtYmxpbmcgdGhlIGVuZGluZyBsaW5lIHRvIHRoZSBzdWIgcmVxdWVzdCBib2R5LlxuICAgIGdldEh0dHBSZXF1ZXN0Qm9keSgpIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuYm9keX0ke3RoaXMuYmF0Y2hSZXF1ZXN0RW5kaW5nfSR7SFRUUF9MSU5FX0VORElOR31gO1xuICAgIH1cbiAgICBnZXRNdWx0aXBhcnRDb250ZW50VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubXVsdGlwYXJ0Q29udGVudFR5cGU7XG4gICAgfVxuICAgIGdldFN1YlJlcXVlc3RzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdWJSZXF1ZXN0cztcbiAgICB9XG59XG5mdW5jdGlvbiBiYXRjaFJlcXVlc3RBc3NlbWJsZVBvbGljeShiYXRjaFJlcXVlc3QpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBcImJhdGNoUmVxdWVzdEFzc2VtYmxlUG9saWN5XCIsXG4gICAgICAgIGFzeW5jIHNlbmRSZXF1ZXN0KHJlcXVlc3QpIHtcbiAgICAgICAgICAgIGJhdGNoUmVxdWVzdC5hcHBlbmRTdWJSZXF1ZXN0VG9Cb2R5KHJlcXVlc3QpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICByZXF1ZXN0LFxuICAgICAgICAgICAgICAgIHN0YXR1czogMjAwLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGNvcmVSZXN0UGlwZWxpbmUuY3JlYXRlSHR0cEhlYWRlcnMoKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGJhdGNoSGVhZGVyRmlsdGVyUG9saWN5KCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IFwiYmF0Y2hIZWFkZXJGaWx0ZXJQb2xpY3lcIixcbiAgICAgICAgYXN5bmMgc2VuZFJlcXVlc3QocmVxdWVzdCwgbmV4dCkge1xuICAgICAgICAgICAgbGV0IHhNc0hlYWRlck5hbWUgPSBcIlwiO1xuICAgICAgICAgICAgZm9yIChjb25zdCBbbmFtZV0gb2YgcmVxdWVzdC5oZWFkZXJzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlFcXVhbChuYW1lLCBIZWFkZXJDb25zdGFudHMuWF9NU19WRVJTSU9OKSkge1xuICAgICAgICAgICAgICAgICAgICB4TXNIZWFkZXJOYW1lID0gbmFtZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoeE1zSGVhZGVyTmFtZSAhPT0gXCJcIikge1xuICAgICAgICAgICAgICAgIHJlcXVlc3QuaGVhZGVycy5kZWxldGUoeE1zSGVhZGVyTmFtZSk7IC8vIFRoZSBzdWJyZXF1ZXN0cyBzaG91bGQgbm90IGhhdmUgdGhlIHgtbXMtdmVyc2lvbiBoZWFkZXIuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV4dChyZXF1ZXN0KTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogQSBCbG9iQmF0Y2hDbGllbnQgYWxsb3dzIHlvdSB0byBtYWtlIGJhdGNoZWQgcmVxdWVzdHMgdG8gdGhlIEF6dXJlIFN0b3JhZ2UgQmxvYiBzZXJ2aWNlLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2Jsb2ItYmF0Y2hcbiAqL1xuY2xhc3MgQmxvYkJhdGNoQ2xpZW50IHtcbiAgICBjb25zdHJ1Y3Rvcih1cmwsIGNyZWRlbnRpYWxPclBpcGVsaW5lLCBcbiAgICAvLyBMZWdhY3ksIG5vIGZpeCBmb3IgZXNsaW50IGVycm9yIHdpdGhvdXQgYnJlYWtpbmcuIERpc2FibGUgaXQgZm9yIHRoaXMgaW50ZXJmYWNlLlxuICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYXp1cmUvYXp1cmUtc2RrL3RzLW5hbWluZy1vcHRpb25zKi9cbiAgICBvcHRpb25zKSB7XG4gICAgICAgIGxldCBwaXBlbGluZTtcbiAgICAgICAgaWYgKGlzUGlwZWxpbmVMaWtlKGNyZWRlbnRpYWxPclBpcGVsaW5lKSkge1xuICAgICAgICAgICAgcGlwZWxpbmUgPSBjcmVkZW50aWFsT3JQaXBlbGluZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghY3JlZGVudGlhbE9yUGlwZWxpbmUpIHtcbiAgICAgICAgICAgIC8vIG5vIGNyZWRlbnRpYWwgcHJvdmlkZWRcbiAgICAgICAgICAgIHBpcGVsaW5lID0gbmV3UGlwZWxpbmUobmV3IEFub255bW91c0NyZWRlbnRpYWwoKSwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBwaXBlbGluZSA9IG5ld1BpcGVsaW5lKGNyZWRlbnRpYWxPclBpcGVsaW5lLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdG9yYWdlQ2xpZW50Q29udGV4dCA9IG5ldyBTdG9yYWdlQ29udGV4dENsaWVudCh1cmwsIGdldENvcmVDbGllbnRPcHRpb25zKHBpcGVsaW5lKSk7XG4gICAgICAgIGNvbnN0IHBhdGggPSBnZXRVUkxQYXRoKHVybCk7XG4gICAgICAgIGlmIChwYXRoICYmIHBhdGggIT09IFwiL1wiKSB7XG4gICAgICAgICAgICAvLyBDb250YWluZXIgc2NvcGVkLlxuICAgICAgICAgICAgdGhpcy5zZXJ2aWNlT3JDb250YWluZXJDb250ZXh0ID0gc3RvcmFnZUNsaWVudENvbnRleHQuY29udGFpbmVyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXJ2aWNlT3JDb250YWluZXJDb250ZXh0ID0gc3RvcmFnZUNsaWVudENvbnRleHQuc2VydmljZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEge0BsaW5rIEJsb2JCYXRjaH0uXG4gICAgICogQSBCbG9iQmF0Y2ggcmVwcmVzZW50cyBhbiBhZ2dyZWdhdGVkIHNldCBvZiBvcGVyYXRpb25zIG9uIGJsb2JzLlxuICAgICAqL1xuICAgIGNyZWF0ZUJhdGNoKCkge1xuICAgICAgICByZXR1cm4gbmV3IEJsb2JCYXRjaCgpO1xuICAgIH1cbiAgICBhc3luYyBkZWxldGVCbG9icyh1cmxzT3JCbG9iQ2xpZW50cywgY3JlZGVudGlhbE9yT3B0aW9ucywgXG4gICAgLy8gTGVnYWN5LCBubyBmaXggZm9yIGVzbGludCBlcnJvciB3aXRob3V0IGJyZWFraW5nLiBEaXNhYmxlIGl0IGZvciB0aGlzIGludGVyZmFjZS5cbiAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGF6dXJlL2F6dXJlLXNkay90cy1uYW1pbmctb3B0aW9ucyovXG4gICAgb3B0aW9ucykge1xuICAgICAgICBjb25zdCBiYXRjaCA9IG5ldyBCbG9iQmF0Y2goKTtcbiAgICAgICAgZm9yIChjb25zdCB1cmxPckJsb2JDbGllbnQgb2YgdXJsc09yQmxvYkNsaWVudHMpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdXJsT3JCbG9iQ2xpZW50ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgYmF0Y2guZGVsZXRlQmxvYih1cmxPckJsb2JDbGllbnQsIGNyZWRlbnRpYWxPck9wdGlvbnMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgYmF0Y2guZGVsZXRlQmxvYih1cmxPckJsb2JDbGllbnQsIGNyZWRlbnRpYWxPck9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnN1Ym1pdEJhdGNoKGJhdGNoKTtcbiAgICB9XG4gICAgYXN5bmMgc2V0QmxvYnNBY2Nlc3NUaWVyKHVybHNPckJsb2JDbGllbnRzLCBjcmVkZW50aWFsT3JUaWVyLCB0aWVyT3JPcHRpb25zLCBcbiAgICAvLyBMZWdhY3ksIG5vIGZpeCBmb3IgZXNsaW50IGVycm9yIHdpdGhvdXQgYnJlYWtpbmcuIERpc2FibGUgaXQgZm9yIHRoaXMgaW50ZXJmYWNlLlxuICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYXp1cmUvYXp1cmUtc2RrL3RzLW5hbWluZy1vcHRpb25zKi9cbiAgICBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGJhdGNoID0gbmV3IEJsb2JCYXRjaCgpO1xuICAgICAgICBmb3IgKGNvbnN0IHVybE9yQmxvYkNsaWVudCBvZiB1cmxzT3JCbG9iQ2xpZW50cykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB1cmxPckJsb2JDbGllbnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBiYXRjaC5zZXRCbG9iQWNjZXNzVGllcih1cmxPckJsb2JDbGllbnQsIGNyZWRlbnRpYWxPclRpZXIsIHRpZXJPck9wdGlvbnMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgYmF0Y2guc2V0QmxvYkFjY2Vzc1RpZXIodXJsT3JCbG9iQ2xpZW50LCBjcmVkZW50aWFsT3JUaWVyLCB0aWVyT3JPcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5zdWJtaXRCYXRjaChiYXRjaCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN1Ym1pdCBiYXRjaCByZXF1ZXN0IHdoaWNoIGNvbnNpc3RzIG9mIG11bHRpcGxlIHN1YnJlcXVlc3RzLlxuICAgICAqXG4gICAgICogR2V0IGBibG9iQmF0Y2hDbGllbnRgIGFuZCBvdGhlciBkZXRhaWxzIGJlZm9yZSBydW5uaW5nIHRoZSBzbmlwcGV0cy5cbiAgICAgKiBgYmxvYlNlcnZpY2VDbGllbnQuZ2V0QmxvYkJhdGNoQ2xpZW50KClgIGdpdmVzIHRoZSBgYmxvYkJhdGNoQ2xpZW50YFxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2FnZTpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogbGV0IGJhdGNoUmVxdWVzdCA9IG5ldyBCbG9iQmF0Y2goKTtcbiAgICAgKiBhd2FpdCBiYXRjaFJlcXVlc3QuZGVsZXRlQmxvYih1cmxJblN0cmluZzAsIGNyZWRlbnRpYWwwKTtcbiAgICAgKiBhd2FpdCBiYXRjaFJlcXVlc3QuZGVsZXRlQmxvYih1cmxJblN0cmluZzEsIGNyZWRlbnRpYWwxLCB7XG4gICAgICogIGRlbGV0ZVNuYXBzaG90czogXCJpbmNsdWRlXCJcbiAgICAgKiB9KTtcbiAgICAgKiBjb25zdCBiYXRjaFJlc3AgPSBhd2FpdCBibG9iQmF0Y2hDbGllbnQuc3VibWl0QmF0Y2goYmF0Y2hSZXF1ZXN0KTtcbiAgICAgKiBjb25zb2xlLmxvZyhiYXRjaFJlc3Auc3ViUmVzcG9uc2VzU3VjY2VlZGVkQ291bnQpO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBhIGxlYXNlOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBsZXQgYmF0Y2hSZXF1ZXN0ID0gbmV3IEJsb2JCYXRjaCgpO1xuICAgICAqIGF3YWl0IGJhdGNoUmVxdWVzdC5zZXRCbG9iQWNjZXNzVGllcihibG9ja0Jsb2JDbGllbnQwLCBcIkNvb2xcIik7XG4gICAgICogYXdhaXQgYmF0Y2hSZXF1ZXN0LnNldEJsb2JBY2Nlc3NUaWVyKGJsb2NrQmxvYkNsaWVudDEsIFwiQ29vbFwiLCB7XG4gICAgICogIGNvbmRpdGlvbnM6IHsgbGVhc2VJZDogbGVhc2VJZCB9XG4gICAgICogfSk7XG4gICAgICogY29uc3QgYmF0Y2hSZXNwID0gYXdhaXQgYmxvYkJhdGNoQ2xpZW50LnN1Ym1pdEJhdGNoKGJhdGNoUmVxdWVzdCk7XG4gICAgICogY29uc29sZS5sb2coYmF0Y2hSZXNwLnN1YlJlc3BvbnNlc1N1Y2NlZWRlZENvdW50KTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2Jsb2ItYmF0Y2hcbiAgICAgKlxuICAgICAqIEBwYXJhbSBiYXRjaFJlcXVlc3QgLSBBIHNldCBvZiBEZWxldGUgb3IgU2V0VGllciBvcGVyYXRpb25zLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC1cbiAgICAgKi9cbiAgICBhc3luYyBzdWJtaXRCYXRjaChiYXRjaFJlcXVlc3QsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBpZiAoIWJhdGNoUmVxdWVzdCB8fCBiYXRjaFJlcXVlc3QuZ2V0U3ViUmVxdWVzdHMoKS5zaXplID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkJhdGNoIHJlcXVlc3Qgc2hvdWxkIGNvbnRhaW4gb25lIG9yIG1vcmUgc3ViIHJlcXVlc3RzLlwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JCYXRjaENsaWVudC1zdWJtaXRCYXRjaFwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJhdGNoUmVxdWVzdEJvZHkgPSBiYXRjaFJlcXVlc3QuZ2V0SHR0cFJlcXVlc3RCb2R5KCk7XG4gICAgICAgICAgICAvLyBTZXJ2aWNlU3VibWl0QmF0Y2hSZXNwb25zZU1vZGVsIGFuZCBDb250YWluZXJTdWJtaXRCYXRjaFJlc3BvbnNlIGFyZSBjb21wYXRpYmxlIGZvciBub3cuXG4gICAgICAgICAgICBjb25zdCByYXdCYXRjaFJlc3BvbnNlID0gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5zZXJ2aWNlT3JDb250YWluZXJDb250ZXh0LnN1Ym1pdEJhdGNoKHV0ZjhCeXRlTGVuZ3RoKGJhdGNoUmVxdWVzdEJvZHkpLCBiYXRjaFJlcXVlc3QuZ2V0TXVsdGlQYXJ0Q29udGVudFR5cGUoKSwgYmF0Y2hSZXF1ZXN0Qm9keSwgT2JqZWN0LmFzc2lnbih7fSwgdXBkYXRlZE9wdGlvbnMpKSk7XG4gICAgICAgICAgICAvLyBQYXJzZSB0aGUgc3ViIHJlc3BvbnNlcyByZXN1bHQsIGlmIGxvZ2ljIHJlYWNoZXMgaGVyZShpLmUuIHRoZSBiYXRjaCByZXF1ZXN0IHN1Y2NlZWRlZCB3aXRoIHN0YXR1cyBjb2RlIDIwMikuXG4gICAgICAgICAgICBjb25zdCBiYXRjaFJlc3BvbnNlUGFyc2VyID0gbmV3IEJhdGNoUmVzcG9uc2VQYXJzZXIocmF3QmF0Y2hSZXNwb25zZSwgYmF0Y2hSZXF1ZXN0LmdldFN1YlJlcXVlc3RzKCkpO1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2VTdW1tYXJ5ID0gYXdhaXQgYmF0Y2hSZXNwb25zZVBhcnNlci5wYXJzZUJhdGNoUmVzcG9uc2UoKTtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IHtcbiAgICAgICAgICAgICAgICBfcmVzcG9uc2U6IHJhd0JhdGNoUmVzcG9uc2UuX3Jlc3BvbnNlLFxuICAgICAgICAgICAgICAgIGNvbnRlbnRUeXBlOiByYXdCYXRjaFJlc3BvbnNlLmNvbnRlbnRUeXBlLFxuICAgICAgICAgICAgICAgIGVycm9yQ29kZTogcmF3QmF0Y2hSZXNwb25zZS5lcnJvckNvZGUsXG4gICAgICAgICAgICAgICAgcmVxdWVzdElkOiByYXdCYXRjaFJlc3BvbnNlLnJlcXVlc3RJZCxcbiAgICAgICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHJhd0JhdGNoUmVzcG9uc2UuY2xpZW50UmVxdWVzdElkLFxuICAgICAgICAgICAgICAgIHZlcnNpb246IHJhd0JhdGNoUmVzcG9uc2UudmVyc2lvbixcbiAgICAgICAgICAgICAgICBzdWJSZXNwb25zZXM6IHJlc3BvbnNlU3VtbWFyeS5zdWJSZXNwb25zZXMsXG4gICAgICAgICAgICAgICAgc3ViUmVzcG9uc2VzU3VjY2VlZGVkQ291bnQ6IHJlc3BvbnNlU3VtbWFyeS5zdWJSZXNwb25zZXNTdWNjZWVkZWRDb3VudCxcbiAgICAgICAgICAgICAgICBzdWJSZXNwb25zZXNGYWlsZWRDb3VudDogcmVzcG9uc2VTdW1tYXJ5LnN1YlJlc3BvbnNlc0ZhaWxlZENvdW50LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuLyoqXG4gKiBBIENvbnRhaW5lckNsaWVudCByZXByZXNlbnRzIGEgVVJMIHRvIHRoZSBBenVyZSBTdG9yYWdlIGNvbnRhaW5lciBhbGxvd2luZyB5b3UgdG8gbWFuaXB1bGF0ZSBpdHMgYmxvYnMuXG4gKi9cbmNsYXNzIENvbnRhaW5lckNsaWVudCBleHRlbmRzIFN0b3JhZ2VDbGllbnQge1xuICAgIC8qKlxuICAgICAqIFRoZSBuYW1lIG9mIHRoZSBjb250YWluZXIuXG4gICAgICovXG4gICAgZ2V0IGNvbnRhaW5lck5hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb250YWluZXJOYW1lO1xuICAgIH1cbiAgICBjb25zdHJ1Y3Rvcih1cmxPckNvbm5lY3Rpb25TdHJpbmcsIGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lLCBcbiAgICAvLyBMZWdhY3ksIG5vIGZpeCBmb3IgZXNsaW50IGVycm9yIHdpdGhvdXQgYnJlYWtpbmcuIERpc2FibGUgaXQgZm9yIHRoaXMgaW50ZXJmYWNlLlxuICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYXp1cmUvYXp1cmUtc2RrL3RzLW5hbWluZy1vcHRpb25zKi9cbiAgICBvcHRpb25zKSB7XG4gICAgICAgIGxldCBwaXBlbGluZTtcbiAgICAgICAgbGV0IHVybDtcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgICAgIGlmIChpc1BpcGVsaW5lTGlrZShjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSkpIHtcbiAgICAgICAgICAgIC8vICh1cmw6IHN0cmluZywgcGlwZWxpbmU6IFBpcGVsaW5lKVxuICAgICAgICAgICAgdXJsID0gdXJsT3JDb25uZWN0aW9uU3RyaW5nO1xuICAgICAgICAgICAgcGlwZWxpbmUgPSBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICgoY29yZVV0aWwuaXNOb2RlICYmIGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lIGluc3RhbmNlb2YgU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwpIHx8XG4gICAgICAgICAgICBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSBpbnN0YW5jZW9mIEFub255bW91c0NyZWRlbnRpYWwgfHxcbiAgICAgICAgICAgIGNvcmVBdXRoLmlzVG9rZW5DcmVkZW50aWFsKGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lKSkge1xuICAgICAgICAgICAgLy8gKHVybDogc3RyaW5nLCBjcmVkZW50aWFsPzogU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwgfCBBbm9ueW1vdXNDcmVkZW50aWFsIHwgVG9rZW5DcmVkZW50aWFsLCBvcHRpb25zPzogU3RvcmFnZVBpcGVsaW5lT3B0aW9ucylcbiAgICAgICAgICAgIHVybCA9IHVybE9yQ29ubmVjdGlvblN0cmluZztcbiAgICAgICAgICAgIHBpcGVsaW5lID0gbmV3UGlwZWxpbmUoY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSAmJlxuICAgICAgICAgICAgdHlwZW9mIGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAvLyAodXJsOiBzdHJpbmcsIGNyZWRlbnRpYWw/OiBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbCB8IEFub255bW91c0NyZWRlbnRpYWwgfCBUb2tlbkNyZWRlbnRpYWwsIG9wdGlvbnM/OiBTdG9yYWdlUGlwZWxpbmVPcHRpb25zKVxuICAgICAgICAgICAgLy8gVGhlIHNlY29uZCBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkLiBVc2UgYW5vbnltb3VzIGNyZWRlbnRpYWwuXG4gICAgICAgICAgICB1cmwgPSB1cmxPckNvbm5lY3Rpb25TdHJpbmc7XG4gICAgICAgICAgICBwaXBlbGluZSA9IG5ld1BpcGVsaW5lKG5ldyBBbm9ueW1vdXNDcmVkZW50aWFsKCksIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lICYmXG4gICAgICAgICAgICB0eXBlb2YgY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIC8vIChjb25uZWN0aW9uU3RyaW5nOiBzdHJpbmcsIGNvbnRhaW5lck5hbWU6IHN0cmluZywgYmxvYk5hbWU6IHN0cmluZywgb3B0aW9ucz86IFN0b3JhZ2VQaXBlbGluZU9wdGlvbnMpXG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJOYW1lID0gY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWU7XG4gICAgICAgICAgICBjb25zdCBleHRyYWN0ZWRDcmVkcyA9IGV4dHJhY3RDb25uZWN0aW9uU3RyaW5nUGFydHModXJsT3JDb25uZWN0aW9uU3RyaW5nKTtcbiAgICAgICAgICAgIGlmIChleHRyYWN0ZWRDcmVkcy5raW5kID09PSBcIkFjY291bnRDb25uU3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29yZVV0aWwuaXNOb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNoYXJlZEtleUNyZWRlbnRpYWwgPSBuZXcgU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwoZXh0cmFjdGVkQ3JlZHMuYWNjb3VudE5hbWUsIGV4dHJhY3RlZENyZWRzLmFjY291bnRLZXkpO1xuICAgICAgICAgICAgICAgICAgICB1cmwgPSBhcHBlbmRUb1VSTFBhdGgoZXh0cmFjdGVkQ3JlZHMudXJsLCBlbmNvZGVVUklDb21wb25lbnQoY29udGFpbmVyTmFtZSkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMucHJveHlPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnByb3h5T3B0aW9ucyA9IGNvcmVSZXN0UGlwZWxpbmUuZ2V0RGVmYXVsdFByb3h5U2V0dGluZ3MoZXh0cmFjdGVkQ3JlZHMucHJveHlVcmkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHBpcGVsaW5lID0gbmV3UGlwZWxpbmUoc2hhcmVkS2V5Q3JlZGVudGlhbCwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBY2NvdW50IGNvbm5lY3Rpb24gc3RyaW5nIGlzIG9ubHkgc3VwcG9ydGVkIGluIE5vZGUuanMgZW52aXJvbm1lbnRcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZXh0cmFjdGVkQ3JlZHMua2luZCA9PT0gXCJTQVNDb25uU3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICB1cmwgPVxuICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb1VSTFBhdGgoZXh0cmFjdGVkQ3JlZHMudXJsLCBlbmNvZGVVUklDb21wb25lbnQoY29udGFpbmVyTmFtZSkpICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiP1wiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhY3RlZENyZWRzLmFjY291bnRTYXM7XG4gICAgICAgICAgICAgICAgcGlwZWxpbmUgPSBuZXdQaXBlbGluZShuZXcgQW5vbnltb3VzQ3JlZGVudGlhbCgpLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbm5lY3Rpb24gc3RyaW5nIG11c3QgYmUgZWl0aGVyIGFuIEFjY291bnQgY29ubmVjdGlvbiBzdHJpbmcgb3IgYSBTQVMgY29ubmVjdGlvbiBzdHJpbmdcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3Rpbmcgbm9uLWVtcHR5IHN0cmluZ3MgZm9yIGNvbnRhaW5lck5hbWUgcGFyYW1ldGVyXCIpO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyKHVybCwgcGlwZWxpbmUpO1xuICAgICAgICB0aGlzLl9jb250YWluZXJOYW1lID0gdGhpcy5nZXRDb250YWluZXJOYW1lRnJvbVVybCgpO1xuICAgICAgICB0aGlzLmNvbnRhaW5lckNvbnRleHQgPSB0aGlzLnN0b3JhZ2VDbGllbnRDb250ZXh0LmNvbnRhaW5lcjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBjb250YWluZXIgdW5kZXIgdGhlIHNwZWNpZmllZCBhY2NvdW50LiBJZiB0aGUgY29udGFpbmVyIHdpdGhcbiAgICAgKiB0aGUgc2FtZSBuYW1lIGFscmVhZHkgZXhpc3RzLCB0aGUgb3BlcmF0aW9uIGZhaWxzLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2NyZWF0ZS1jb250YWluZXJcbiAgICAgKiBOYW1pbmcgcnVsZXM6IEBzZWUgaHR0cHM6Ly9sZWFybi5taWNyb3NvZnQuY29tL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9uYW1pbmctYW5kLXJlZmVyZW5jaW5nLWNvbnRhaW5lcnMtLWJsb2JzLS1hbmQtbWV0YWRhdGFcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBDb250YWluZXIgQ3JlYXRlIG9wZXJhdGlvbi5cbiAgICAgKlxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2FnZTpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogY29uc3QgY29udGFpbmVyQ2xpZW50ID0gYmxvYlNlcnZpY2VDbGllbnQuZ2V0Q29udGFpbmVyQ2xpZW50KFwiPGNvbnRhaW5lciBuYW1lPlwiKTtcbiAgICAgKiBjb25zdCBjcmVhdGVDb250YWluZXJSZXNwb25zZSA9IGF3YWl0IGNvbnRhaW5lckNsaWVudC5jcmVhdGUoKTtcbiAgICAgKiBjb25zb2xlLmxvZyhcIkNvbnRhaW5lciB3YXMgY3JlYXRlZCBzdWNjZXNzZnVsbHlcIiwgY3JlYXRlQ29udGFpbmVyUmVzcG9uc2UucmVxdWVzdElkKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBhc3luYyBjcmVhdGUob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQ29udGFpbmVyQ2xpZW50LWNyZWF0ZVwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLmNvbnRhaW5lckNvbnRleHQuY3JlYXRlKHVwZGF0ZWRPcHRpb25zKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IGNvbnRhaW5lciB1bmRlciB0aGUgc3BlY2lmaWVkIGFjY291bnQuIElmIHRoZSBjb250YWluZXIgd2l0aFxuICAgICAqIHRoZSBzYW1lIG5hbWUgYWxyZWFkeSBleGlzdHMsIGl0IGlzIG5vdCBjaGFuZ2VkLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2NyZWF0ZS1jb250YWluZXJcbiAgICAgKiBOYW1pbmcgcnVsZXM6IEBzZWUgaHR0cHM6Ly9sZWFybi5taWNyb3NvZnQuY29tL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9uYW1pbmctYW5kLXJlZmVyZW5jaW5nLWNvbnRhaW5lcnMtLWJsb2JzLS1hbmQtbWV0YWRhdGFcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC1cbiAgICAgKi9cbiAgICBhc3luYyBjcmVhdGVJZk5vdEV4aXN0cyhvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJDb250YWluZXJDbGllbnQtY3JlYXRlSWZOb3RFeGlzdHNcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmNyZWF0ZSh1cGRhdGVkT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7IHN1Y2NlZWRlZDogdHJ1ZSB9LCByZXMpLCB7IF9yZXNwb25zZTogcmVzLl9yZXNwb25zZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCgoX2EgPSBlLmRldGFpbHMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5lcnJvckNvZGUpID09PSBcIkNvbnRhaW5lckFscmVhZHlFeGlzdHNcIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHsgc3VjY2VlZGVkOiBmYWxzZSB9LCAoX2IgPSBlLnJlc3BvbnNlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IucGFyc2VkSGVhZGVycyksIHsgX3Jlc3BvbnNlOiBlLnJlc3BvbnNlIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIEF6dXJlIGNvbnRhaW5lciByZXNvdXJjZSByZXByZXNlbnRlZCBieSB0aGlzIGNsaWVudCBleGlzdHM7IGZhbHNlIG90aGVyd2lzZS5cbiAgICAgKlxuICAgICAqIE5PVEU6IHVzZSB0aGlzIGZ1bmN0aW9uIHdpdGggY2FyZSBzaW5jZSBhbiBleGlzdGluZyBjb250YWluZXIgbWlnaHQgYmUgZGVsZXRlZCBieSBvdGhlciBjbGllbnRzIG9yXG4gICAgICogYXBwbGljYXRpb25zLiBWaWNlIHZlcnNhIG5ldyBjb250YWluZXJzIHdpdGggdGhlIHNhbWUgbmFtZSBtaWdodCBiZSBhZGRlZCBieSBvdGhlciBjbGllbnRzIG9yXG4gICAgICogYXBwbGljYXRpb25zIGFmdGVyIHRoaXMgZnVuY3Rpb24gY29tcGxldGVzLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLVxuICAgICAqL1xuICAgIGFzeW5jIGV4aXN0cyhvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJDb250YWluZXJDbGllbnQtZXhpc3RzXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmdldFByb3BlcnRpZXMoe1xuICAgICAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoZS5zdGF0dXNDb2RlID09PSA0MDQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHtAbGluayBCbG9iQ2xpZW50fVxuICAgICAqXG4gICAgICogQHBhcmFtIGJsb2JOYW1lIC0gQSBibG9iIG5hbWVcbiAgICAgKiBAcmV0dXJucyBBIG5ldyBCbG9iQ2xpZW50IG9iamVjdCBmb3IgdGhlIGdpdmVuIGJsb2IgbmFtZS5cbiAgICAgKi9cbiAgICBnZXRCbG9iQ2xpZW50KGJsb2JOYW1lKSB7XG4gICAgICAgIHJldHVybiBuZXcgQmxvYkNsaWVudChhcHBlbmRUb1VSTFBhdGgodGhpcy51cmwsIEVzY2FwZVBhdGgoYmxvYk5hbWUpKSwgdGhpcy5waXBlbGluZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4ge0BsaW5rIEFwcGVuZEJsb2JDbGllbnR9XG4gICAgICpcbiAgICAgKiBAcGFyYW0gYmxvYk5hbWUgLSBBbiBhcHBlbmQgYmxvYiBuYW1lXG4gICAgICovXG4gICAgZ2V0QXBwZW5kQmxvYkNsaWVudChibG9iTmFtZSkge1xuICAgICAgICByZXR1cm4gbmV3IEFwcGVuZEJsb2JDbGllbnQoYXBwZW5kVG9VUkxQYXRoKHRoaXMudXJsLCBFc2NhcGVQYXRoKGJsb2JOYW1lKSksIHRoaXMucGlwZWxpbmUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEge0BsaW5rIEJsb2NrQmxvYkNsaWVudH1cbiAgICAgKlxuICAgICAqIEBwYXJhbSBibG9iTmFtZSAtIEEgYmxvY2sgYmxvYiBuYW1lXG4gICAgICpcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNhZ2U6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnN0IGNvbnRlbnQgPSBcIkhlbGxvIHdvcmxkIVwiO1xuICAgICAqXG4gICAgICogY29uc3QgYmxvY2tCbG9iQ2xpZW50ID0gY29udGFpbmVyQ2xpZW50LmdldEJsb2NrQmxvYkNsaWVudChcIjxibG9iIG5hbWU+XCIpO1xuICAgICAqIGNvbnN0IHVwbG9hZEJsb2JSZXNwb25zZSA9IGF3YWl0IGJsb2NrQmxvYkNsaWVudC51cGxvYWQoY29udGVudCwgY29udGVudC5sZW5ndGgpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGdldEJsb2NrQmxvYkNsaWVudChibG9iTmFtZSkge1xuICAgICAgICByZXR1cm4gbmV3IEJsb2NrQmxvYkNsaWVudChhcHBlbmRUb1VSTFBhdGgodGhpcy51cmwsIEVzY2FwZVBhdGgoYmxvYk5hbWUpKSwgdGhpcy5waXBlbGluZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSB7QGxpbmsgUGFnZUJsb2JDbGllbnR9XG4gICAgICpcbiAgICAgKiBAcGFyYW0gYmxvYk5hbWUgLSBBIHBhZ2UgYmxvYiBuYW1lXG4gICAgICovXG4gICAgZ2V0UGFnZUJsb2JDbGllbnQoYmxvYk5hbWUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQYWdlQmxvYkNsaWVudChhcHBlbmRUb1VSTFBhdGgodGhpcy51cmwsIEVzY2FwZVBhdGgoYmxvYk5hbWUpKSwgdGhpcy5waXBlbGluZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYWxsIHVzZXItZGVmaW5lZCBtZXRhZGF0YSBhbmQgc3lzdGVtIHByb3BlcnRpZXMgZm9yIHRoZSBzcGVjaWZpZWRcbiAgICAgKiBjb250YWluZXIuIFRoZSBkYXRhIHJldHVybmVkIGRvZXMgbm90IGluY2x1ZGUgdGhlIGNvbnRhaW5lcidzIGxpc3Qgb2YgYmxvYnMuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvZ2V0LWNvbnRhaW5lci1wcm9wZXJ0aWVzXG4gICAgICpcbiAgICAgKiBXQVJOSU5HOiBUaGUgYG1ldGFkYXRhYCBvYmplY3QgcmV0dXJuZWQgaW4gdGhlIHJlc3BvbnNlIHdpbGwgaGF2ZSBpdHMga2V5cyBpbiBsb3dlcmNhc2UsIGV2ZW4gaWZcbiAgICAgKiB0aGV5IG9yaWdpbmFsbHkgY29udGFpbmVkIHVwcGVyY2FzZSBjaGFyYWN0ZXJzLiBUaGlzIGRpZmZlcnMgZnJvbSB0aGUgbWV0YWRhdGEga2V5cyByZXR1cm5lZCBieVxuICAgICAqIHRoZSBgbGlzdENvbnRhaW5lcnNgIG1ldGhvZCBvZiB7QGxpbmsgQmxvYlNlcnZpY2VDbGllbnR9IHVzaW5nIHRoZSBgaW5jbHVkZU1ldGFkYXRhYCBvcHRpb24sIHdoaWNoXG4gICAgICogd2lsbCByZXRhaW4gdGhlaXIgb3JpZ2luYWwgY2FzaW5nLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIENvbnRhaW5lciBHZXQgUHJvcGVydGllcyBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgZ2V0UHJvcGVydGllcyhvcHRpb25zID0ge30pIHtcbiAgICAgICAgaWYgKCFvcHRpb25zLmNvbmRpdGlvbnMpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuY29uZGl0aW9ucyA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQ29udGFpbmVyQ2xpZW50LWdldFByb3BlcnRpZXNcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5jb250YWluZXJDb250ZXh0LmdldFByb3BlcnRpZXMoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHsgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwgfSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMgfSkpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1hcmtzIHRoZSBzcGVjaWZpZWQgY29udGFpbmVyIGZvciBkZWxldGlvbi4gVGhlIGNvbnRhaW5lciBhbmQgYW55IGJsb2JzXG4gICAgICogY29udGFpbmVkIHdpdGhpbiBpdCBhcmUgbGF0ZXIgZGVsZXRlZCBkdXJpbmcgZ2FyYmFnZSBjb2xsZWN0aW9uLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2RlbGV0ZS1jb250YWluZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBDb250YWluZXIgRGVsZXRlIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBkZWxldGUob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGlmICghb3B0aW9ucy5jb25kaXRpb25zKSB7XG4gICAgICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkNvbnRhaW5lckNsaWVudC1kZWxldGVcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5jb250YWluZXJDb250ZXh0LmRlbGV0ZSh7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTWFya3MgdGhlIHNwZWNpZmllZCBjb250YWluZXIgZm9yIGRlbGV0aW9uIGlmIGl0IGV4aXN0cy4gVGhlIGNvbnRhaW5lciBhbmQgYW55IGJsb2JzXG4gICAgICogY29udGFpbmVkIHdpdGhpbiBpdCBhcmUgbGF0ZXIgZGVsZXRlZCBkdXJpbmcgZ2FyYmFnZSBjb2xsZWN0aW9uLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2RlbGV0ZS1jb250YWluZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBDb250YWluZXIgRGVsZXRlIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBkZWxldGVJZkV4aXN0cyhvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJDb250YWluZXJDbGllbnQtZGVsZXRlSWZFeGlzdHNcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmRlbGV0ZSh1cGRhdGVkT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7IHN1Y2NlZWRlZDogdHJ1ZSB9LCByZXMpLCB7IF9yZXNwb25zZTogcmVzLl9yZXNwb25zZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCgoX2EgPSBlLmRldGFpbHMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5lcnJvckNvZGUpID09PSBcIkNvbnRhaW5lck5vdEZvdW5kXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7IHN1Y2NlZWRlZDogZmFsc2UgfSwgKF9iID0gZS5yZXNwb25zZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnBhcnNlZEhlYWRlcnMpLCB7IF9yZXNwb25zZTogZS5yZXNwb25zZSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldHMgb25lIG9yIG1vcmUgdXNlci1kZWZpbmVkIG5hbWUtdmFsdWUgcGFpcnMgZm9yIHRoZSBzcGVjaWZpZWQgY29udGFpbmVyLlxuICAgICAqXG4gICAgICogSWYgbm8gb3B0aW9uIHByb3ZpZGVkLCBvciBubyBtZXRhZGF0YSBkZWZpbmVkIGluIHRoZSBwYXJhbWV0ZXIsIHRoZSBjb250YWluZXJcbiAgICAgKiBtZXRhZGF0YSB3aWxsIGJlIHJlbW92ZWQuXG4gICAgICpcbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9zZXQtY29udGFpbmVyLW1ldGFkYXRhXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbWV0YWRhdGEgLSBSZXBsYWNlIGV4aXN0aW5nIG1ldGFkYXRhIHdpdGggdGhpcyB2YWx1ZS5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBubyB2YWx1ZSBwcm92aWRlZCB0aGUgZXhpc3RpbmcgbWV0YWRhdGEgd2lsbCBiZSByZW1vdmVkLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBDb250YWluZXIgU2V0IE1ldGFkYXRhIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBzZXRNZXRhZGF0YShtZXRhZGF0YSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGlmICghb3B0aW9ucy5jb25kaXRpb25zKSB7XG4gICAgICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5jb25kaXRpb25zLmlmVW5tb2RpZmllZFNpbmNlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcInRoZSBJZlVubW9kaWZpZWRTaW5jZSBtdXN0IGhhdmUgdGhlaXIgZGVmYXVsdCB2YWx1ZXMgYmVjYXVzZSB0aGV5IGFyZSBpZ25vcmVkIGJ5IHRoZSBibG9iIHNlcnZpY2VcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJDb250YWluZXJDbGllbnQtc2V0TWV0YWRhdGFcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5jb250YWluZXJDb250ZXh0LnNldE1ldGFkYXRhKHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBtZXRhZGF0YSxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBwZXJtaXNzaW9ucyBmb3IgdGhlIHNwZWNpZmllZCBjb250YWluZXIuIFRoZSBwZXJtaXNzaW9ucyBpbmRpY2F0ZVxuICAgICAqIHdoZXRoZXIgY29udGFpbmVyIGRhdGEgbWF5IGJlIGFjY2Vzc2VkIHB1YmxpY2x5LlxuICAgICAqXG4gICAgICogV0FSTklORzogSmF2YVNjcmlwdCBEYXRlIHdpbGwgcG90ZW50aWFsbHkgbG9zZSBwcmVjaXNpb24gd2hlbiBwYXJzaW5nIHN0YXJ0c09uIGFuZCBleHBpcmVzT24gc3RyaW5ncy5cbiAgICAgKiBGb3IgZXhhbXBsZSwgbmV3IERhdGUoXCIyMDE4LTEyLTMxVDAzOjQ0OjIzLjg4Mjc4OTFaXCIpLnRvSVNPU3RyaW5nKCkgd2lsbCBnZXQgXCIyMDE4LTEyLTMxVDAzOjQ0OjIzLjg4MlpcIi5cbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2dldC1jb250YWluZXItYWNsXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gQ29udGFpbmVyIEdldCBBY2Nlc3MgUG9saWN5IG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBnZXRBY2Nlc3NQb2xpY3kob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGlmICghb3B0aW9ucy5jb25kaXRpb25zKSB7XG4gICAgICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkNvbnRhaW5lckNsaWVudC1nZXRBY2Nlc3NQb2xpY3lcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuY29udGFpbmVyQ29udGV4dC5nZXRBY2Nlc3NQb2xpY3koe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IHtcbiAgICAgICAgICAgICAgICBfcmVzcG9uc2U6IHJlc3BvbnNlLl9yZXNwb25zZSxcbiAgICAgICAgICAgICAgICBibG9iUHVibGljQWNjZXNzOiByZXNwb25zZS5ibG9iUHVibGljQWNjZXNzLFxuICAgICAgICAgICAgICAgIGRhdGU6IHJlc3BvbnNlLmRhdGUsXG4gICAgICAgICAgICAgICAgZXRhZzogcmVzcG9uc2UuZXRhZyxcbiAgICAgICAgICAgICAgICBlcnJvckNvZGU6IHJlc3BvbnNlLmVycm9yQ29kZSxcbiAgICAgICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHJlc3BvbnNlLmxhc3RNb2RpZmllZCxcbiAgICAgICAgICAgICAgICByZXF1ZXN0SWQ6IHJlc3BvbnNlLnJlcXVlc3RJZCxcbiAgICAgICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHJlc3BvbnNlLmNsaWVudFJlcXVlc3RJZCxcbiAgICAgICAgICAgICAgICBzaWduZWRJZGVudGlmaWVyczogW10sXG4gICAgICAgICAgICAgICAgdmVyc2lvbjogcmVzcG9uc2UudmVyc2lvbixcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGlkZW50aWZpZXIgb2YgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBsZXQgYWNjZXNzUG9saWN5ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGlmIChpZGVudGlmaWVyLmFjY2Vzc1BvbGljeSkge1xuICAgICAgICAgICAgICAgICAgICBhY2Nlc3NQb2xpY3kgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwZXJtaXNzaW9uczogaWRlbnRpZmllci5hY2Nlc3NQb2xpY3kucGVybWlzc2lvbnMsXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGlmIChpZGVudGlmaWVyLmFjY2Vzc1BvbGljeS5leHBpcmVzT24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjY2Vzc1BvbGljeS5leHBpcmVzT24gPSBuZXcgRGF0ZShpZGVudGlmaWVyLmFjY2Vzc1BvbGljeS5leHBpcmVzT24pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChpZGVudGlmaWVyLmFjY2Vzc1BvbGljeS5zdGFydHNPbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXNzUG9saWN5LnN0YXJ0c09uID0gbmV3IERhdGUoaWRlbnRpZmllci5hY2Nlc3NQb2xpY3kuc3RhcnRzT24pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlcy5zaWduZWRJZGVudGlmaWVycy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgYWNjZXNzUG9saWN5LFxuICAgICAgICAgICAgICAgICAgICBpZDogaWRlbnRpZmllci5pZCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBwZXJtaXNzaW9ucyBmb3IgdGhlIHNwZWNpZmllZCBjb250YWluZXIuIFRoZSBwZXJtaXNzaW9ucyBpbmRpY2F0ZVxuICAgICAqIHdoZXRoZXIgYmxvYnMgaW4gYSBjb250YWluZXIgbWF5IGJlIGFjY2Vzc2VkIHB1YmxpY2x5LlxuICAgICAqXG4gICAgICogV2hlbiB5b3Ugc2V0IHBlcm1pc3Npb25zIGZvciBhIGNvbnRhaW5lciwgdGhlIGV4aXN0aW5nIHBlcm1pc3Npb25zIGFyZSByZXBsYWNlZC5cbiAgICAgKiBJZiBubyBhY2Nlc3Mgb3IgY29udGFpbmVyQWNsIHByb3ZpZGVkLCB0aGUgZXhpc3RpbmcgY29udGFpbmVyIEFDTCB3aWxsIGJlXG4gICAgICogcmVtb3ZlZC5cbiAgICAgKlxuICAgICAqIFdoZW4geW91IGVzdGFibGlzaCBhIHN0b3JlZCBhY2Nlc3MgcG9saWN5IG9uIGEgY29udGFpbmVyLCBpdCBtYXkgdGFrZSB1cCB0byAzMCBzZWNvbmRzIHRvIHRha2UgZWZmZWN0LlxuICAgICAqIER1cmluZyB0aGlzIGludGVydmFsLCBhIHNoYXJlZCBhY2Nlc3Mgc2lnbmF0dXJlIHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdG9yZWQgYWNjZXNzIHBvbGljeSB3aWxsXG4gICAgICogZmFpbCB3aXRoIHN0YXR1cyBjb2RlIDQwMyAoRm9yYmlkZGVuKSwgdW50aWwgdGhlIGFjY2VzcyBwb2xpY3kgYmVjb21lcyBhY3RpdmUuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvc2V0LWNvbnRhaW5lci1hY2xcbiAgICAgKlxuICAgICAqIEBwYXJhbSBhY2Nlc3MgLSBUaGUgbGV2ZWwgb2YgcHVibGljIGFjY2VzcyB0byBkYXRhIGluIHRoZSBjb250YWluZXIuXG4gICAgICogQHBhcmFtIGNvbnRhaW5lckFjbCAtIEFycmF5IG9mIGVsZW1lbnRzIGVhY2ggaGF2aW5nIGEgdW5pcXVlIElkIGFuZCBkZXRhaWxzIG9mIHRoZSBhY2Nlc3MgcG9saWN5LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBDb250YWluZXIgU2V0IEFjY2VzcyBQb2xpY3kgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIHNldEFjY2Vzc1BvbGljeShhY2Nlc3MsIGNvbnRhaW5lckFjbCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIG9wdGlvbnMuY29uZGl0aW9ucyA9IG9wdGlvbnMuY29uZGl0aW9ucyB8fCB7fTtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJDb250YWluZXJDbGllbnQtc2V0QWNjZXNzUG9saWN5XCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgY29uc3QgYWNsID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGlkZW50aWZpZXIgb2YgY29udGFpbmVyQWNsIHx8IFtdKSB7XG4gICAgICAgICAgICAgICAgYWNsLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBhY2Nlc3NQb2xpY3k6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGlyZXNPbjogaWRlbnRpZmllci5hY2Nlc3NQb2xpY3kuZXhwaXJlc09uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0cnVuY2F0ZWRJU084MDYxRGF0ZShpZGVudGlmaWVyLmFjY2Vzc1BvbGljeS5leHBpcmVzT24pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGVybWlzc2lvbnM6IGlkZW50aWZpZXIuYWNjZXNzUG9saWN5LnBlcm1pc3Npb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRzT246IGlkZW50aWZpZXIuYWNjZXNzUG9saWN5LnN0YXJ0c09uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0cnVuY2F0ZWRJU084MDYxRGF0ZShpZGVudGlmaWVyLmFjY2Vzc1BvbGljeS5zdGFydHNPbilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGlkOiBpZGVudGlmaWVyLmlkLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuY29udGFpbmVyQ29udGV4dC5zZXRBY2Nlc3NQb2xpY3koe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGFjY2VzcyxcbiAgICAgICAgICAgICAgICBjb250YWluZXJBY2w6IGFjbCxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgYSB7QGxpbmsgQmxvYkxlYXNlQ2xpZW50fSB0aGF0IG1hbmFnZXMgbGVhc2VzIG9uIHRoZSBjb250YWluZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcG9zZUxlYXNlSWQgLSBJbml0aWFsIHByb3Bvc2VkIGxlYXNlIElkLlxuICAgICAqIEByZXR1cm5zIEEgbmV3IEJsb2JMZWFzZUNsaWVudCBvYmplY3QgZm9yIG1hbmFnaW5nIGxlYXNlcyBvbiB0aGUgY29udGFpbmVyLlxuICAgICAqL1xuICAgIGdldEJsb2JMZWFzZUNsaWVudChwcm9wb3NlTGVhc2VJZCkge1xuICAgICAgICByZXR1cm4gbmV3IEJsb2JMZWFzZUNsaWVudCh0aGlzLCBwcm9wb3NlTGVhc2VJZCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgYmxvY2sgYmxvYiwgb3IgdXBkYXRlcyB0aGUgY29udGVudCBvZiBhbiBleGlzdGluZyBibG9jayBibG9iLlxuICAgICAqXG4gICAgICogVXBkYXRpbmcgYW4gZXhpc3RpbmcgYmxvY2sgYmxvYiBvdmVyd3JpdGVzIGFueSBleGlzdGluZyBtZXRhZGF0YSBvbiB0aGUgYmxvYi5cbiAgICAgKiBQYXJ0aWFsIHVwZGF0ZXMgYXJlIG5vdCBzdXBwb3J0ZWQ7IHRoZSBjb250ZW50IG9mIHRoZSBleGlzdGluZyBibG9iIGlzXG4gICAgICogb3ZlcndyaXR0ZW4gd2l0aCB0aGUgbmV3IGNvbnRlbnQuIFRvIHBlcmZvcm0gYSBwYXJ0aWFsIHVwZGF0ZSBvZiBhIGJsb2NrIGJsb2IncyxcbiAgICAgKiB1c2Uge0BsaW5rIEJsb2NrQmxvYkNsaWVudC5zdGFnZUJsb2NrfSBhbmQge0BsaW5rIEJsb2NrQmxvYkNsaWVudC5jb21taXRCbG9ja0xpc3R9LlxuICAgICAqXG4gICAgICogVGhpcyBpcyBhIG5vbi1wYXJhbGxlbCB1cGxvYWRpbmcgbWV0aG9kLCBwbGVhc2UgdXNlIHtAbGluayBCbG9ja0Jsb2JDbGllbnQudXBsb2FkRmlsZX0sXG4gICAgICoge0BsaW5rIEJsb2NrQmxvYkNsaWVudC51cGxvYWRTdHJlYW19IG9yIHtAbGluayBCbG9ja0Jsb2JDbGllbnQudXBsb2FkQnJvd3NlckRhdGF9IGZvciBiZXR0ZXJcbiAgICAgKiBwZXJmb3JtYW5jZSB3aXRoIGNvbmN1cnJlbmN5IHVwbG9hZGluZy5cbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL3B1dC1ibG9iXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYmxvYk5hbWUgLSBOYW1lIG9mIHRoZSBibG9jayBibG9iIHRvIGNyZWF0ZSBvciB1cGRhdGUuXG4gICAgICogQHBhcmFtIGJvZHkgLSBCbG9iLCBzdHJpbmcsIEFycmF5QnVmZmVyLCBBcnJheUJ1ZmZlclZpZXcgb3IgYSBmdW5jdGlvblxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIHJldHVybnMgYSBuZXcgUmVhZGFibGUgc3RyZWFtIHdob3NlIG9mZnNldCBpcyBmcm9tIGRhdGEgc291cmNlIGJlZ2lubmluZy5cbiAgICAgKiBAcGFyYW0gY29udGVudExlbmd0aCAtIExlbmd0aCBvZiBib2R5IGluIGJ5dGVzLiBVc2UgQnVmZmVyLmJ5dGVMZW5ndGgoKSB0byBjYWxjdWxhdGUgYm9keSBsZW5ndGggZm9yIGFcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcgaW5jbHVkaW5nIG5vbiBub24tQmFzZTY0L0hleC1lbmNvZGVkIGNoYXJhY3RlcnMuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIGNvbmZpZ3VyZSB0aGUgQmxvY2sgQmxvYiBVcGxvYWQgb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIEJsb2NrIEJsb2IgdXBsb2FkIHJlc3BvbnNlIGRhdGEgYW5kIHRoZSBjb3JyZXNwb25kaW5nIEJsb2NrQmxvYkNsaWVudCBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBhc3luYyB1cGxvYWRCbG9ja0Jsb2IoYmxvYk5hbWUsIGJvZHksIGNvbnRlbnRMZW5ndGgsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkNvbnRhaW5lckNsaWVudC11cGxvYWRCbG9ja0Jsb2JcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBibG9ja0Jsb2JDbGllbnQgPSB0aGlzLmdldEJsb2NrQmxvYkNsaWVudChibG9iTmFtZSk7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGJsb2NrQmxvYkNsaWVudC51cGxvYWQoYm9keSwgY29udGVudExlbmd0aCwgdXBkYXRlZE9wdGlvbnMpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBibG9ja0Jsb2JDbGllbnQsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTWFya3MgdGhlIHNwZWNpZmllZCBibG9iIG9yIHNuYXBzaG90IGZvciBkZWxldGlvbi4gVGhlIGJsb2IgaXMgbGF0ZXIgZGVsZXRlZFxuICAgICAqIGR1cmluZyBnYXJiYWdlIGNvbGxlY3Rpb24uIE5vdGUgdGhhdCBpbiBvcmRlciB0byBkZWxldGUgYSBibG9iLCB5b3UgbXVzdCBkZWxldGVcbiAgICAgKiBhbGwgb2YgaXRzIHNuYXBzaG90cy4gWW91IGNhbiBkZWxldGUgYm90aCBhdCB0aGUgc2FtZSB0aW1lIHdpdGggdGhlIERlbGV0ZVxuICAgICAqIEJsb2Igb3BlcmF0aW9uLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2RlbGV0ZS1ibG9iXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYmxvYk5hbWUgLVxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBCbG9iIERlbGV0ZSBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgQmxvY2sgYmxvYiBkZWxldGlvbiByZXNwb25zZSBkYXRhLlxuICAgICAqL1xuICAgIGFzeW5jIGRlbGV0ZUJsb2IoYmxvYk5hbWUsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkNvbnRhaW5lckNsaWVudC1kZWxldGVCbG9iXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgbGV0IGJsb2JDbGllbnQgPSB0aGlzLmdldEJsb2JDbGllbnQoYmxvYk5hbWUpO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyc2lvbklkKSB7XG4gICAgICAgICAgICAgICAgYmxvYkNsaWVudCA9IGJsb2JDbGllbnQud2l0aFZlcnNpb24ob3B0aW9ucy52ZXJzaW9uSWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGJsb2JDbGllbnQuZGVsZXRlKHVwZGF0ZWRPcHRpb25zKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIGxpc3RCbG9iRmxhdFNlZ21lbnQgcmV0dXJucyBhIHNpbmdsZSBzZWdtZW50IG9mIGJsb2JzIHN0YXJ0aW5nIGZyb20gdGhlXG4gICAgICogc3BlY2lmaWVkIE1hcmtlci4gVXNlIGFuIGVtcHR5IE1hcmtlciB0byBzdGFydCBlbnVtZXJhdGlvbiBmcm9tIHRoZSBiZWdpbm5pbmcuXG4gICAgICogQWZ0ZXIgZ2V0dGluZyBhIHNlZ21lbnQsIHByb2Nlc3MgaXQsIGFuZCB0aGVuIGNhbGwgbGlzdEJsb2JzRmxhdFNlZ21lbnQgYWdhaW5cbiAgICAgKiAocGFzc2luZyB0aGUgdGhlIHByZXZpb3VzbHktcmV0dXJuZWQgTWFya2VyKSB0byBnZXQgdGhlIG5leHQgc2VnbWVudC5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9saXN0LWJsb2JzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbWFya2VyIC0gQSBzdHJpbmcgdmFsdWUgdGhhdCBpZGVudGlmaWVzIHRoZSBwb3J0aW9uIG9mIHRoZSBsaXN0IHRvIGJlIHJldHVybmVkIHdpdGggdGhlIG5leHQgbGlzdCBvcGVyYXRpb24uXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIENvbnRhaW5lciBMaXN0IEJsb2IgRmxhdCBTZWdtZW50IG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBsaXN0QmxvYkZsYXRTZWdtZW50KG1hcmtlciwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQ29udGFpbmVyQ2xpZW50LWxpc3RCbG9iRmxhdFNlZ21lbnRcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuY29udGFpbmVyQ29udGV4dC5saXN0QmxvYkZsYXRTZWdtZW50KE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7IG1hcmtlciB9LCBvcHRpb25zKSwgeyB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMgfSkpKTtcbiAgICAgICAgICAgIGNvbnN0IHdyYXBwZWRSZXNwb25zZSA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcmVzcG9uc2UpLCB7IF9yZXNwb25zZTogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCByZXNwb25zZS5fcmVzcG9uc2UpLCB7IHBhcnNlZEJvZHk6IENvbnZlcnRJbnRlcm5hbFJlc3BvbnNlT2ZMaXN0QmxvYkZsYXQocmVzcG9uc2UuX3Jlc3BvbnNlLnBhcnNlZEJvZHkpIH0pLCBzZWdtZW50OiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHJlc3BvbnNlLnNlZ21lbnQpLCB7IGJsb2JJdGVtczogcmVzcG9uc2Uuc2VnbWVudC5ibG9iSXRlbXMubWFwKChibG9iSXRlbUludGVybmFsKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9iSXRlbSA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYmxvYkl0ZW1JbnRlcm5hbCksIHsgbmFtZTogQmxvYk5hbWVUb1N0cmluZyhibG9iSXRlbUludGVybmFsLm5hbWUpLCB0YWdzOiB0b1RhZ3MoYmxvYkl0ZW1JbnRlcm5hbC5ibG9iVGFncyksIG9iamVjdFJlcGxpY2F0aW9uU291cmNlUHJvcGVydGllczogcGFyc2VPYmplY3RSZXBsaWNhdGlvblJlY29yZChibG9iSXRlbUludGVybmFsLm9iamVjdFJlcGxpY2F0aW9uTWV0YWRhdGEpIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJsb2JJdGVtO1xuICAgICAgICAgICAgICAgICAgICB9KSB9KSB9KTtcbiAgICAgICAgICAgIHJldHVybiB3cmFwcGVkUmVzcG9uc2U7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBsaXN0QmxvYkhpZXJhcmNoeVNlZ21lbnQgcmV0dXJucyBhIHNpbmdsZSBzZWdtZW50IG9mIGJsb2JzIHN0YXJ0aW5nIGZyb21cbiAgICAgKiB0aGUgc3BlY2lmaWVkIE1hcmtlci4gVXNlIGFuIGVtcHR5IE1hcmtlciB0byBzdGFydCBlbnVtZXJhdGlvbiBmcm9tIHRoZVxuICAgICAqIGJlZ2lubmluZy4gQWZ0ZXIgZ2V0dGluZyBhIHNlZ21lbnQsIHByb2Nlc3MgaXQsIGFuZCB0aGVuIGNhbGwgbGlzdEJsb2JzSGllcmFyY2hpY2FsU2VnbWVudFxuICAgICAqIGFnYWluIChwYXNzaW5nIHRoZSB0aGUgcHJldmlvdXNseS1yZXR1cm5lZCBNYXJrZXIpIHRvIGdldCB0aGUgbmV4dCBzZWdtZW50LlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2xpc3QtYmxvYnNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBkZWxpbWl0ZXIgLSBUaGUgY2hhcmFjdGVyIG9yIHN0cmluZyB1c2VkIHRvIGRlZmluZSB0aGUgdmlydHVhbCBoaWVyYXJjaHlcbiAgICAgKiBAcGFyYW0gbWFya2VyIC0gQSBzdHJpbmcgdmFsdWUgdGhhdCBpZGVudGlmaWVzIHRoZSBwb3J0aW9uIG9mIHRoZSBsaXN0IHRvIGJlIHJldHVybmVkIHdpdGggdGhlIG5leHQgbGlzdCBvcGVyYXRpb24uXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIENvbnRhaW5lciBMaXN0IEJsb2IgSGllcmFyY2h5IFNlZ21lbnQgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGxpc3RCbG9iSGllcmFyY2h5U2VnbWVudChkZWxpbWl0ZXIsIG1hcmtlciwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQ29udGFpbmVyQ2xpZW50LWxpc3RCbG9iSGllcmFyY2h5U2VnbWVudFwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5jb250YWluZXJDb250ZXh0Lmxpc3RCbG9iSGllcmFyY2h5U2VnbWVudChkZWxpbWl0ZXIsIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7IG1hcmtlciB9LCBvcHRpb25zKSwgeyB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMgfSkpKTtcbiAgICAgICAgICAgIGNvbnN0IHdyYXBwZWRSZXNwb25zZSA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcmVzcG9uc2UpLCB7IF9yZXNwb25zZTogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCByZXNwb25zZS5fcmVzcG9uc2UpLCB7IHBhcnNlZEJvZHk6IENvbnZlcnRJbnRlcm5hbFJlc3BvbnNlT2ZMaXN0QmxvYkhpZXJhcmNoeShyZXNwb25zZS5fcmVzcG9uc2UucGFyc2VkQm9keSkgfSksIHNlZ21lbnQ6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcmVzcG9uc2Uuc2VnbWVudCksIHsgYmxvYkl0ZW1zOiByZXNwb25zZS5zZWdtZW50LmJsb2JJdGVtcy5tYXAoKGJsb2JJdGVtSW50ZXJuYWwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2JJdGVtID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBibG9iSXRlbUludGVybmFsKSwgeyBuYW1lOiBCbG9iTmFtZVRvU3RyaW5nKGJsb2JJdGVtSW50ZXJuYWwubmFtZSksIHRhZ3M6IHRvVGFncyhibG9iSXRlbUludGVybmFsLmJsb2JUYWdzKSwgb2JqZWN0UmVwbGljYXRpb25Tb3VyY2VQcm9wZXJ0aWVzOiBwYXJzZU9iamVjdFJlcGxpY2F0aW9uUmVjb3JkKGJsb2JJdGVtSW50ZXJuYWwub2JqZWN0UmVwbGljYXRpb25NZXRhZGF0YSkgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYmxvYkl0ZW07XG4gICAgICAgICAgICAgICAgICAgIH0pLCBibG9iUHJlZml4ZXM6IChfYSA9IHJlc3BvbnNlLnNlZ21lbnQuYmxvYlByZWZpeGVzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubWFwKChibG9iUHJlZml4SW50ZXJuYWwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2JQcmVmaXggPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGJsb2JQcmVmaXhJbnRlcm5hbCksIHsgbmFtZTogQmxvYk5hbWVUb1N0cmluZyhibG9iUHJlZml4SW50ZXJuYWwubmFtZSkgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYmxvYlByZWZpeDtcbiAgICAgICAgICAgICAgICAgICAgfSkgfSkgfSk7XG4gICAgICAgICAgICByZXR1cm4gd3JhcHBlZFJlc3BvbnNlO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBBc3luY0l0ZXJhYmxlSXRlcmF0b3IgZm9yIENvbnRhaW5lckxpc3RCbG9iRmxhdFNlZ21lbnRSZXNwb25zZVxuICAgICAqXG4gICAgICogQHBhcmFtIG1hcmtlciAtIEEgc3RyaW5nIHZhbHVlIHRoYXQgaWRlbnRpZmllcyB0aGUgcG9ydGlvbiBvZlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbGlzdCBvZiBibG9icyB0byBiZSByZXR1cm5lZCB3aXRoIHRoZSBuZXh0IGxpc3Rpbmcgb3BlcmF0aW9uLiBUaGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uIHJldHVybnMgdGhlIENvbnRpbnVhdGlvblRva2VuIHZhbHVlIHdpdGhpbiB0aGUgcmVzcG9uc2UgYm9keSBpZiB0aGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGluZyBvcGVyYXRpb24gZGlkIG5vdCByZXR1cm4gYWxsIGJsb2JzIHJlbWFpbmluZyB0byBiZSBsaXN0ZWRcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgY3VycmVudCBwYWdlLiBUaGUgQ29udGludWF0aW9uVG9rZW4gdmFsdWUgY2FuIGJlIHVzZWQgYXMgdGhlIHZhbHVlIGZvclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWFya2VyIHBhcmFtZXRlciBpbiBhIHN1YnNlcXVlbnQgY2FsbCB0byByZXF1ZXN0IHRoZSBuZXh0IHBhZ2Ugb2YgbGlzdFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy4gVGhlIG1hcmtlciB2YWx1ZSBpcyBvcGFxdWUgdG8gdGhlIGNsaWVudC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gbGlzdCBibG9icyBvcGVyYXRpb24uXG4gICAgICovXG4gICAgbGlzdFNlZ21lbnRzKG1hcmtlcl8xKSB7XG4gICAgICAgIHJldHVybiB0c2xpYi5fX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24qIGxpc3RTZWdtZW50c18xKG1hcmtlciwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgICAgICBsZXQgbGlzdEJsb2JzRmxhdFNlZ21lbnRSZXNwb25zZTtcbiAgICAgICAgICAgIGlmICghIW1hcmtlciB8fCBtYXJrZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgbGlzdEJsb2JzRmxhdFNlZ21lbnRSZXNwb25zZSA9IHlpZWxkIHRzbGliLl9fYXdhaXQodGhpcy5saXN0QmxvYkZsYXRTZWdtZW50KG1hcmtlciwgb3B0aW9ucykpO1xuICAgICAgICAgICAgICAgICAgICBtYXJrZXIgPSBsaXN0QmxvYnNGbGF0U2VnbWVudFJlc3BvbnNlLmNvbnRpbnVhdGlvblRva2VuO1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCB5aWVsZCB0c2xpYi5fX2F3YWl0KHlpZWxkIHRzbGliLl9fYXdhaXQobGlzdEJsb2JzRmxhdFNlZ21lbnRSZXNwb25zZSkpO1xuICAgICAgICAgICAgICAgIH0gd2hpbGUgKG1hcmtlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIEFzeW5jSXRlcmFibGVJdGVyYXRvciBvZiB7QGxpbmsgQmxvYkl0ZW19IG9iamVjdHNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBsaXN0IGJsb2JzIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBsaXN0SXRlbXMoKSB7XG4gICAgICAgIHJldHVybiB0c2xpYi5fX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24qIGxpc3RJdGVtc18xKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICAgICAgdmFyIF9hLCBlXzEsIF9iLCBfYztcbiAgICAgICAgICAgIGxldCBtYXJrZXI7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIF9kID0gdHJ1ZSwgX2UgPSB0c2xpYi5fX2FzeW5jVmFsdWVzKHRoaXMubGlzdFNlZ21lbnRzKG1hcmtlciwgb3B0aW9ucykpLCBfZjsgX2YgPSB5aWVsZCB0c2xpYi5fX2F3YWl0KF9lLm5leHQoKSksIF9hID0gX2YuZG9uZSwgIV9hOyBfZCA9IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgX2MgPSBfZi52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgX2QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlzdEJsb2JzRmxhdFNlZ21lbnRSZXNwb25zZSA9IF9jO1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCB0c2xpYi5fX2F3YWl0KHlpZWxkKiB0c2xpYi5fX2FzeW5jRGVsZWdhdG9yKHRzbGliLl9fYXN5bmNWYWx1ZXMobGlzdEJsb2JzRmxhdFNlZ21lbnRSZXNwb25zZS5zZWdtZW50LmJsb2JJdGVtcykpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFfZCAmJiAhX2EgJiYgKF9iID0gX2UucmV0dXJuKSkgeWllbGQgdHNsaWIuX19hd2FpdChfYi5jYWxsKF9lKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gYXN5bmMgaXRlcmFibGUgaXRlcmF0b3IgdG8gbGlzdCBhbGwgdGhlIGJsb2JzXG4gICAgICogdW5kZXIgdGhlIHNwZWNpZmllZCBhY2NvdW50LlxuICAgICAqXG4gICAgICogLmJ5UGFnZSgpIHJldHVybnMgYW4gYXN5bmMgaXRlcmFibGUgaXRlcmF0b3IgdG8gbGlzdCB0aGUgYmxvYnMgaW4gcGFnZXMuXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIGBmb3IgYXdhaXRgIHN5bnRheDpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogLy8gR2V0IHRoZSBjb250YWluZXJDbGllbnQgYmVmb3JlIHlvdSBydW4gdGhlc2Ugc25pcHBldHMsXG4gICAgICogLy8gQ2FuIGJlIG9idGFpbmVkIGZyb20gYGJsb2JTZXJ2aWNlQ2xpZW50LmdldENvbnRhaW5lckNsaWVudChcIjx5b3VyLWNvbnRhaW5lci1uYW1lPlwiKTtgXG4gICAgICogbGV0IGkgPSAxO1xuICAgICAqIGZvciBhd2FpdCAoY29uc3QgYmxvYiBvZiBjb250YWluZXJDbGllbnQubGlzdEJsb2JzRmxhdCgpKSB7XG4gICAgICogICBjb25zb2xlLmxvZyhgQmxvYiAke2krK306ICR7YmxvYi5uYW1lfWApO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNpbmcgYGl0ZXIubmV4dCgpYDpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogbGV0IGkgPSAxO1xuICAgICAqIGxldCBpdGVyID0gY29udGFpbmVyQ2xpZW50Lmxpc3RCbG9ic0ZsYXQoKTtcbiAgICAgKiBsZXQgYmxvYkl0ZW0gPSBhd2FpdCBpdGVyLm5leHQoKTtcbiAgICAgKiB3aGlsZSAoIWJsb2JJdGVtLmRvbmUpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKGBCbG9iICR7aSsrfTogJHtibG9iSXRlbS52YWx1ZS5uYW1lfWApO1xuICAgICAqICAgYmxvYkl0ZW0gPSBhd2FpdCBpdGVyLm5leHQoKTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIGBieVBhZ2UoKWA6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIHBhc3Npbmcgb3B0aW9uYWwgbWF4UGFnZVNpemUgaW4gdGhlIHBhZ2Ugc2V0dGluZ3NcbiAgICAgKiBsZXQgaSA9IDE7XG4gICAgICogZm9yIGF3YWl0IChjb25zdCByZXNwb25zZSBvZiBjb250YWluZXJDbGllbnQubGlzdEJsb2JzRmxhdCgpLmJ5UGFnZSh7IG1heFBhZ2VTaXplOiAyMCB9KSkge1xuICAgICAqICAgZm9yIChjb25zdCBibG9iIG9mIHJlc3BvbnNlLnNlZ21lbnQuYmxvYkl0ZW1zKSB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGBCbG9iICR7aSsrfTogJHtibG9iLm5hbWV9YCk7XG4gICAgICogICB9XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBwYWdpbmcgd2l0aCBhIG1hcmtlcjpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogbGV0IGkgPSAxO1xuICAgICAqIGxldCBpdGVyYXRvciA9IGNvbnRhaW5lckNsaWVudC5saXN0QmxvYnNGbGF0KCkuYnlQYWdlKHsgbWF4UGFnZVNpemU6IDIgfSk7XG4gICAgICogbGV0IHJlc3BvbnNlID0gKGF3YWl0IGl0ZXJhdG9yLm5leHQoKSkudmFsdWU7XG4gICAgICpcbiAgICAgKiAvLyBQcmludHMgMiBibG9iIG5hbWVzXG4gICAgICogZm9yIChjb25zdCBibG9iIG9mIHJlc3BvbnNlLnNlZ21lbnQuYmxvYkl0ZW1zKSB7XG4gICAgICogICBjb25zb2xlLmxvZyhgQmxvYiAke2krK306ICR7YmxvYi5uYW1lfWApO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIC8vIEdldHMgbmV4dCBtYXJrZXJcbiAgICAgKiBsZXQgbWFya2VyID0gcmVzcG9uc2UuY29udGludWF0aW9uVG9rZW47XG4gICAgICpcbiAgICAgKiAvLyBQYXNzaW5nIG5leHQgbWFya2VyIGFzIGNvbnRpbnVhdGlvblRva2VuXG4gICAgICpcbiAgICAgKiBpdGVyYXRvciA9IGNvbnRhaW5lckNsaWVudC5saXN0QmxvYnNGbGF0KCkuYnlQYWdlKHsgY29udGludWF0aW9uVG9rZW46IG1hcmtlciwgbWF4UGFnZVNpemU6IDEwIH0pO1xuICAgICAqIHJlc3BvbnNlID0gKGF3YWl0IGl0ZXJhdG9yLm5leHQoKSkudmFsdWU7XG4gICAgICpcbiAgICAgKiAvLyBQcmludHMgMTAgYmxvYiBuYW1lc1xuICAgICAqIGZvciAoY29uc3QgYmxvYiBvZiByZXNwb25zZS5zZWdtZW50LmJsb2JJdGVtcykge1xuICAgICAqICAgY29uc29sZS5sb2coYEJsb2IgJHtpKyt9OiAke2Jsb2IubmFtZX1gKTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gbGlzdCBibG9icy5cbiAgICAgKiBAcmV0dXJucyBBbiBhc3luY0l0ZXJhYmxlSXRlcmF0b3IgdGhhdCBzdXBwb3J0cyBwYWdpbmcuXG4gICAgICovXG4gICAgbGlzdEJsb2JzRmxhdChvcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgaW5jbHVkZSA9IFtdO1xuICAgICAgICBpZiAob3B0aW9ucy5pbmNsdWRlQ29weSkge1xuICAgICAgICAgICAgaW5jbHVkZS5wdXNoKFwiY29weVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5pbmNsdWRlRGVsZXRlZCkge1xuICAgICAgICAgICAgaW5jbHVkZS5wdXNoKFwiZGVsZXRlZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5pbmNsdWRlTWV0YWRhdGEpIHtcbiAgICAgICAgICAgIGluY2x1ZGUucHVzaChcIm1ldGFkYXRhXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVTbmFwc2hvdHMpIHtcbiAgICAgICAgICAgIGluY2x1ZGUucHVzaChcInNuYXBzaG90c1wiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5pbmNsdWRlVmVyc2lvbnMpIHtcbiAgICAgICAgICAgIGluY2x1ZGUucHVzaChcInZlcnNpb25zXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVVbmNvbW1pdGVkQmxvYnMpIHtcbiAgICAgICAgICAgIGluY2x1ZGUucHVzaChcInVuY29tbWl0dGVkYmxvYnNcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZVRhZ3MpIHtcbiAgICAgICAgICAgIGluY2x1ZGUucHVzaChcInRhZ3NcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZURlbGV0ZWRXaXRoVmVyc2lvbnMpIHtcbiAgICAgICAgICAgIGluY2x1ZGUucHVzaChcImRlbGV0ZWR3aXRodmVyc2lvbnNcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZUltbXV0YWJpbGl0eVBvbGljeSkge1xuICAgICAgICAgICAgaW5jbHVkZS5wdXNoKFwiaW1tdXRhYmlsaXR5cG9saWN5XCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVMZWdhbEhvbGQpIHtcbiAgICAgICAgICAgIGluY2x1ZGUucHVzaChcImxlZ2FsaG9sZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5wcmVmaXggPT09IFwiXCIpIHtcbiAgICAgICAgICAgIG9wdGlvbnMucHJlZml4ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRPcHRpb25zID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKSwgKGluY2x1ZGUubGVuZ3RoID4gMCA/IHsgaW5jbHVkZTogaW5jbHVkZSB9IDoge30pKTtcbiAgICAgICAgLy8gQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIHRvIGl0ZXJhdGUgb3ZlciBibG9ic1xuICAgICAgICBjb25zdCBpdGVyID0gdGhpcy5saXN0SXRlbXModXBkYXRlZE9wdGlvbnMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBUaGUgbmV4dCBtZXRob2QsIHBhcnQgb2YgdGhlIGl0ZXJhdGlvbiBwcm90b2NvbFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBuZXh0KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVyLm5leHQoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFRoZSBjb25uZWN0aW9uIHRvIHRoZSBhc3luYyBpdGVyYXRvciwgcGFydCBvZiB0aGUgaXRlcmF0aW9uIHByb3RvY29sXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBSZXR1cm4gYW4gQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIHRoYXQgd29ya3MgYSBwYWdlIGF0IGEgdGltZVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBieVBhZ2U6IChzZXR0aW5ncyA9IHt9KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubGlzdFNlZ21lbnRzKHNldHRpbmdzLmNvbnRpbnVhdGlvblRva2VuLCBPYmplY3QuYXNzaWduKHsgbWF4UGFnZVNpemU6IHNldHRpbmdzLm1heFBhZ2VTaXplIH0sIHVwZGF0ZWRPcHRpb25zKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIEFzeW5jSXRlcmFibGVJdGVyYXRvciBmb3IgQ29udGFpbmVyTGlzdEJsb2JIaWVyYXJjaHlTZWdtZW50UmVzcG9uc2VcbiAgICAgKlxuICAgICAqIEBwYXJhbSBkZWxpbWl0ZXIgLSBUaGUgY2hhcmFjdGVyIG9yIHN0cmluZyB1c2VkIHRvIGRlZmluZSB0aGUgdmlydHVhbCBoaWVyYXJjaHlcbiAgICAgKiBAcGFyYW0gbWFya2VyIC0gQSBzdHJpbmcgdmFsdWUgdGhhdCBpZGVudGlmaWVzIHRoZSBwb3J0aW9uIG9mXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBsaXN0IG9mIGJsb2JzIHRvIGJlIHJldHVybmVkIHdpdGggdGhlIG5leHQgbGlzdGluZyBvcGVyYXRpb24uIFRoZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gcmV0dXJucyB0aGUgQ29udGludWF0aW9uVG9rZW4gdmFsdWUgd2l0aGluIHRoZSByZXNwb25zZSBib2R5IGlmIHRoZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0aW5nIG9wZXJhdGlvbiBkaWQgbm90IHJldHVybiBhbGwgYmxvYnMgcmVtYWluaW5nIHRvIGJlIGxpc3RlZFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSBjdXJyZW50IHBhZ2UuIFRoZSBDb250aW51YXRpb25Ub2tlbiB2YWx1ZSBjYW4gYmUgdXNlZCBhcyB0aGUgdmFsdWUgZm9yXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBtYXJrZXIgcGFyYW1ldGVyIGluIGEgc3Vic2VxdWVudCBjYWxsIHRvIHJlcXVlc3QgdGhlIG5leHQgcGFnZSBvZiBsaXN0XG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLiBUaGUgbWFya2VyIHZhbHVlIGlzIG9wYXF1ZSB0byB0aGUgY2xpZW50LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBsaXN0IGJsb2JzIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBsaXN0SGllcmFyY2h5U2VnbWVudHMoZGVsaW1pdGVyXzEsIG1hcmtlcl8xKSB7XG4gICAgICAgIHJldHVybiB0c2xpYi5fX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24qIGxpc3RIaWVyYXJjaHlTZWdtZW50c18xKGRlbGltaXRlciwgbWFya2VyLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgICAgIGxldCBsaXN0QmxvYnNIaWVyYXJjaHlTZWdtZW50UmVzcG9uc2U7XG4gICAgICAgICAgICBpZiAoISFtYXJrZXIgfHwgbWFya2VyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RCbG9ic0hpZXJhcmNoeVNlZ21lbnRSZXNwb25zZSA9IHlpZWxkIHRzbGliLl9fYXdhaXQodGhpcy5saXN0QmxvYkhpZXJhcmNoeVNlZ21lbnQoZGVsaW1pdGVyLCBtYXJrZXIsIG9wdGlvbnMpKTtcbiAgICAgICAgICAgICAgICAgICAgbWFya2VyID0gbGlzdEJsb2JzSGllcmFyY2h5U2VnbWVudFJlc3BvbnNlLmNvbnRpbnVhdGlvblRva2VuO1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCB5aWVsZCB0c2xpYi5fX2F3YWl0KHlpZWxkIHRzbGliLl9fYXdhaXQobGlzdEJsb2JzSGllcmFyY2h5U2VnbWVudFJlc3BvbnNlKSk7XG4gICAgICAgICAgICAgICAgfSB3aGlsZSAobWFya2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIGZvciB7QGxpbmsgQmxvYlByZWZpeH0gYW5kIHtAbGluayBCbG9iSXRlbX0gb2JqZWN0cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkZWxpbWl0ZXIgLSBUaGUgY2hhcmFjdGVyIG9yIHN0cmluZyB1c2VkIHRvIGRlZmluZSB0aGUgdmlydHVhbCBoaWVyYXJjaHlcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gbGlzdCBibG9icyBvcGVyYXRpb24uXG4gICAgICovXG4gICAgbGlzdEl0ZW1zQnlIaWVyYXJjaHkoZGVsaW1pdGVyXzEpIHtcbiAgICAgICAgcmV0dXJuIHRzbGliLl9fYXN5bmNHZW5lcmF0b3IodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiogbGlzdEl0ZW1zQnlIaWVyYXJjaHlfMShkZWxpbWl0ZXIsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICAgICAgdmFyIF9hLCBlXzIsIF9iLCBfYztcbiAgICAgICAgICAgIGxldCBtYXJrZXI7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIF9kID0gdHJ1ZSwgX2UgPSB0c2xpYi5fX2FzeW5jVmFsdWVzKHRoaXMubGlzdEhpZXJhcmNoeVNlZ21lbnRzKGRlbGltaXRlciwgbWFya2VyLCBvcHRpb25zKSksIF9mOyBfZiA9IHlpZWxkIHRzbGliLl9fYXdhaXQoX2UubmV4dCgpKSwgX2EgPSBfZi5kb25lLCAhX2E7IF9kID0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICBfYyA9IF9mLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBfZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBsaXN0QmxvYnNIaWVyYXJjaHlTZWdtZW50UmVzcG9uc2UgPSBfYztcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VnbWVudCA9IGxpc3RCbG9ic0hpZXJhcmNoeVNlZ21lbnRSZXNwb25zZS5zZWdtZW50O1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2VnbWVudC5ibG9iUHJlZml4ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcHJlZml4IG9mIHNlZ21lbnQuYmxvYlByZWZpeGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgeWllbGQgdHNsaWIuX19hd2FpdChPYmplY3QuYXNzaWduKHsga2luZDogXCJwcmVmaXhcIiB9LCBwcmVmaXgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGJsb2Igb2Ygc2VnbWVudC5ibG9iSXRlbXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIHlpZWxkIHRzbGliLl9fYXdhaXQoT2JqZWN0LmFzc2lnbih7IGtpbmQ6IFwiYmxvYlwiIH0sIGJsb2IpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlXzJfMSkgeyBlXzIgPSB7IGVycm9yOiBlXzJfMSB9OyB9XG4gICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIV9kICYmICFfYSAmJiAoX2IgPSBfZS5yZXR1cm4pKSB5aWVsZCB0c2xpYi5fX2F3YWl0KF9iLmNhbGwoX2UpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzIpIHRocm93IGVfMi5lcnJvcjsgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBhc3luYyBpdGVyYWJsZSBpdGVyYXRvciB0byBsaXN0IGFsbCB0aGUgYmxvYnMgYnkgaGllcmFyY2h5LlxuICAgICAqIHVuZGVyIHRoZSBzcGVjaWZpZWQgYWNjb3VudC5cbiAgICAgKlxuICAgICAqIC5ieVBhZ2UoKSByZXR1cm5zIGFuIGFzeW5jIGl0ZXJhYmxlIGl0ZXJhdG9yIHRvIGxpc3QgdGhlIGJsb2JzIGJ5IGhpZXJhcmNoeSBpbiBwYWdlcy5cbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNpbmcgYGZvciBhd2FpdGAgc3ludGF4OlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBmb3IgYXdhaXQgKGNvbnN0IGl0ZW0gb2YgY29udGFpbmVyQ2xpZW50Lmxpc3RCbG9ic0J5SGllcmFyY2h5KFwiL1wiKSkge1xuICAgICAqICAgaWYgKGl0ZW0ua2luZCA9PT0gXCJwcmVmaXhcIikge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhgXFx0QmxvYlByZWZpeDogJHtpdGVtLm5hbWV9YCk7XG4gICAgICogICB9IGVsc2Uge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhgXFx0QmxvYkl0ZW06IG5hbWUgLSAke2l0ZW0ubmFtZX1gKTtcbiAgICAgKiAgIH1cbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIGBpdGVyLm5leHQoKWA6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGxldCBpdGVyID0gY29udGFpbmVyQ2xpZW50Lmxpc3RCbG9ic0J5SGllcmFyY2h5KFwiL1wiLCB7IHByZWZpeDogXCJwcmVmaXgxL1wiIH0pO1xuICAgICAqIGxldCBlbnRpdHkgPSBhd2FpdCBpdGVyLm5leHQoKTtcbiAgICAgKiB3aGlsZSAoIWVudGl0eS5kb25lKSB7XG4gICAgICogICBsZXQgaXRlbSA9IGVudGl0eS52YWx1ZTtcbiAgICAgKiAgIGlmIChpdGVtLmtpbmQgPT09IFwicHJlZml4XCIpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coYFxcdEJsb2JQcmVmaXg6ICR7aXRlbS5uYW1lfWApO1xuICAgICAqICAgfSBlbHNlIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coYFxcdEJsb2JJdGVtOiBuYW1lIC0gJHtpdGVtLm5hbWV9YCk7XG4gICAgICogICB9XG4gICAgICogICBlbnRpdHkgPSBhd2FpdCBpdGVyLm5leHQoKTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIGBieVBhZ2UoKWA6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnNvbGUubG9nKFwiTGlzdGluZyBibG9icyBieSBoaWVyYXJjaHkgYnkgcGFnZVwiKTtcbiAgICAgKiBmb3IgYXdhaXQgKGNvbnN0IHJlc3BvbnNlIG9mIGNvbnRhaW5lckNsaWVudC5saXN0QmxvYnNCeUhpZXJhcmNoeShcIi9cIikuYnlQYWdlKCkpIHtcbiAgICAgKiAgIGNvbnN0IHNlZ21lbnQgPSByZXNwb25zZS5zZWdtZW50O1xuICAgICAqICAgaWYgKHNlZ21lbnQuYmxvYlByZWZpeGVzKSB7XG4gICAgICogICAgIGZvciAoY29uc3QgcHJlZml4IG9mIHNlZ21lbnQuYmxvYlByZWZpeGVzKSB7XG4gICAgICogICAgICAgY29uc29sZS5sb2coYFxcdEJsb2JQcmVmaXg6ICR7cHJlZml4Lm5hbWV9YCk7XG4gICAgICogICAgIH1cbiAgICAgKiAgIH1cbiAgICAgKiAgIGZvciAoY29uc3QgYmxvYiBvZiByZXNwb25zZS5zZWdtZW50LmJsb2JJdGVtcykge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhgXFx0QmxvYkl0ZW06IG5hbWUgLSAke2Jsb2IubmFtZX1gKTtcbiAgICAgKiAgIH1cbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIHBhZ2luZyB3aXRoIGEgbWF4IHBhZ2Ugc2l6ZTpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogY29uc29sZS5sb2coXCJMaXN0aW5nIGJsb2JzIGJ5IGhpZXJhcmNoeSBieSBwYWdlLCBzcGVjaWZ5aW5nIGEgcHJlZml4IGFuZCBhIG1heCBwYWdlIHNpemVcIik7XG4gICAgICpcbiAgICAgKiBsZXQgaSA9IDE7XG4gICAgICogZm9yIGF3YWl0IChjb25zdCByZXNwb25zZSBvZiBjb250YWluZXJDbGllbnRcbiAgICAgKiAgIC5saXN0QmxvYnNCeUhpZXJhcmNoeShcIi9cIiwgeyBwcmVmaXg6IFwicHJlZml4Mi9zdWIxL1wiIH0pXG4gICAgICogICAuYnlQYWdlKHsgbWF4UGFnZVNpemU6IDIgfSkpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKGBQYWdlICR7aSsrfWApO1xuICAgICAqICAgY29uc3Qgc2VnbWVudCA9IHJlc3BvbnNlLnNlZ21lbnQ7XG4gICAgICpcbiAgICAgKiAgIGlmIChzZWdtZW50LmJsb2JQcmVmaXhlcykge1xuICAgICAqICAgICBmb3IgKGNvbnN0IHByZWZpeCBvZiBzZWdtZW50LmJsb2JQcmVmaXhlcykge1xuICAgICAqICAgICAgIGNvbnNvbGUubG9nKGBcXHRCbG9iUHJlZml4OiAke3ByZWZpeC5uYW1lfWApO1xuICAgICAqICAgICB9XG4gICAgICogICB9XG4gICAgICpcbiAgICAgKiAgIGZvciAoY29uc3QgYmxvYiBvZiByZXNwb25zZS5zZWdtZW50LmJsb2JJdGVtcykge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhgXFx0QmxvYkl0ZW06IG5hbWUgLSAke2Jsb2IubmFtZX1gKTtcbiAgICAgKiAgIH1cbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGVsaW1pdGVyIC0gVGhlIGNoYXJhY3RlciBvciBzdHJpbmcgdXNlZCB0byBkZWZpbmUgdGhlIHZpcnR1YWwgaGllcmFyY2h5XG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIGxpc3QgYmxvYnMgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGxpc3RCbG9ic0J5SGllcmFyY2h5KGRlbGltaXRlciwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGlmIChkZWxpbWl0ZXIgPT09IFwiXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiZGVsaW1pdGVyIHNob3VsZCBjb250YWluIG9uZSBvciBtb3JlIGNoYXJhY3RlcnNcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5jbHVkZSA9IFtdO1xuICAgICAgICBpZiAob3B0aW9ucy5pbmNsdWRlQ29weSkge1xuICAgICAgICAgICAgaW5jbHVkZS5wdXNoKFwiY29weVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5pbmNsdWRlRGVsZXRlZCkge1xuICAgICAgICAgICAgaW5jbHVkZS5wdXNoKFwiZGVsZXRlZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5pbmNsdWRlTWV0YWRhdGEpIHtcbiAgICAgICAgICAgIGluY2x1ZGUucHVzaChcIm1ldGFkYXRhXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVTbmFwc2hvdHMpIHtcbiAgICAgICAgICAgIGluY2x1ZGUucHVzaChcInNuYXBzaG90c1wiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5pbmNsdWRlVmVyc2lvbnMpIHtcbiAgICAgICAgICAgIGluY2x1ZGUucHVzaChcInZlcnNpb25zXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVVbmNvbW1pdGVkQmxvYnMpIHtcbiAgICAgICAgICAgIGluY2x1ZGUucHVzaChcInVuY29tbWl0dGVkYmxvYnNcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZVRhZ3MpIHtcbiAgICAgICAgICAgIGluY2x1ZGUucHVzaChcInRhZ3NcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZURlbGV0ZWRXaXRoVmVyc2lvbnMpIHtcbiAgICAgICAgICAgIGluY2x1ZGUucHVzaChcImRlbGV0ZWR3aXRodmVyc2lvbnNcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZUltbXV0YWJpbGl0eVBvbGljeSkge1xuICAgICAgICAgICAgaW5jbHVkZS5wdXNoKFwiaW1tdXRhYmlsaXR5cG9saWN5XCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVMZWdhbEhvbGQpIHtcbiAgICAgICAgICAgIGluY2x1ZGUucHVzaChcImxlZ2FsaG9sZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5wcmVmaXggPT09IFwiXCIpIHtcbiAgICAgICAgICAgIG9wdGlvbnMucHJlZml4ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRPcHRpb25zID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKSwgKGluY2x1ZGUubGVuZ3RoID4gMCA/IHsgaW5jbHVkZTogaW5jbHVkZSB9IDoge30pKTtcbiAgICAgICAgLy8gQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIHRvIGl0ZXJhdGUgb3ZlciBibG9iIHByZWZpeGVzIGFuZCBibG9ic1xuICAgICAgICBjb25zdCBpdGVyID0gdGhpcy5saXN0SXRlbXNCeUhpZXJhcmNoeShkZWxpbWl0ZXIsIHVwZGF0ZWRPcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVGhlIG5leHQgbWV0aG9kLCBwYXJ0IG9mIHRoZSBpdGVyYXRpb24gcHJvdG9jb2xcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgYXN5bmMgbmV4dCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlci5uZXh0KCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBUaGUgY29ubmVjdGlvbiB0byB0aGUgYXN5bmMgaXRlcmF0b3IsIHBhcnQgb2YgdGhlIGl0ZXJhdGlvbiBwcm90b2NvbFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogUmV0dXJuIGFuIEFzeW5jSXRlcmFibGVJdGVyYXRvciB0aGF0IHdvcmtzIGEgcGFnZSBhdCBhIHRpbWVcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgYnlQYWdlOiAoc2V0dGluZ3MgPSB7fSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxpc3RIaWVyYXJjaHlTZWdtZW50cyhkZWxpbWl0ZXIsIHNldHRpbmdzLmNvbnRpbnVhdGlvblRva2VuLCBPYmplY3QuYXNzaWduKHsgbWF4UGFnZVNpemU6IHNldHRpbmdzLm1heFBhZ2VTaXplIH0sIHVwZGF0ZWRPcHRpb25zKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgRmlsdGVyIEJsb2JzIG9wZXJhdGlvbiBlbmFibGVzIGNhbGxlcnMgdG8gbGlzdCBibG9icyBpbiB0aGUgY29udGFpbmVyIHdob3NlIHRhZ3NcbiAgICAgKiBtYXRjaCBhIGdpdmVuIHNlYXJjaCBleHByZXNzaW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRhZ0ZpbHRlclNxbEV4cHJlc3Npb24gLSBUaGUgd2hlcmUgcGFyYW1ldGVyIGVuYWJsZXMgdGhlIGNhbGxlciB0byBxdWVyeSBibG9icyB3aG9zZSB0YWdzIG1hdGNoIGEgZ2l2ZW4gZXhwcmVzc2lvbi5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZ2l2ZW4gZXhwcmVzc2lvbiBtdXN0IGV2YWx1YXRlIHRvIHRydWUgZm9yIGEgYmxvYiB0byBiZSByZXR1cm5lZCBpbiB0aGUgcmVzdWx0cy5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGVbT0RhdGEgLSBBQk5GXSBmaWx0ZXIgc3ludGF4IHJ1bGUgZGVmaW5lcyB0aGUgZm9ybWFsIGdyYW1tYXIgZm9yIHRoZSB2YWx1ZSBvZiB0aGUgd2hlcmUgcXVlcnkgcGFyYW1ldGVyO1xuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvd2V2ZXIsIG9ubHkgYSBzdWJzZXQgb2YgdGhlIE9EYXRhIGZpbHRlciBzeW50YXggaXMgc3VwcG9ydGVkIGluIHRoZSBCbG9iIHNlcnZpY2UuXG4gICAgICogQHBhcmFtIG1hcmtlciAtIEEgc3RyaW5nIHZhbHVlIHRoYXQgaWRlbnRpZmllcyB0aGUgcG9ydGlvbiBvZlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbGlzdCBvZiBibG9icyB0byBiZSByZXR1cm5lZCB3aXRoIHRoZSBuZXh0IGxpc3Rpbmcgb3BlcmF0aW9uLiBUaGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uIHJldHVybnMgdGhlIGNvbnRpbnVhdGlvblRva2VuIHZhbHVlIHdpdGhpbiB0aGUgcmVzcG9uc2UgYm9keSBpZiB0aGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGluZyBvcGVyYXRpb24gZGlkIG5vdCByZXR1cm4gYWxsIGJsb2JzIHJlbWFpbmluZyB0byBiZSBsaXN0ZWRcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgY3VycmVudCBwYWdlLiBUaGUgY29udGludWF0aW9uVG9rZW4gdmFsdWUgY2FuIGJlIHVzZWQgYXMgdGhlIHZhbHVlIGZvclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWFya2VyIHBhcmFtZXRlciBpbiBhIHN1YnNlcXVlbnQgY2FsbCB0byByZXF1ZXN0IHRoZSBuZXh0IHBhZ2Ugb2YgbGlzdFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy4gVGhlIG1hcmtlciB2YWx1ZSBpcyBvcGFxdWUgdG8gdGhlIGNsaWVudC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gZmluZCBibG9icyBieSB0YWdzLlxuICAgICAqL1xuICAgIGFzeW5jIGZpbmRCbG9ic0J5VGFnc1NlZ21lbnQodGFnRmlsdGVyU3FsRXhwcmVzc2lvbiwgbWFya2VyLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJDb250YWluZXJDbGllbnQtZmluZEJsb2JzQnlUYWdzU2VnbWVudFwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5jb250YWluZXJDb250ZXh0LmZpbHRlckJsb2JzKHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICB3aGVyZTogdGFnRmlsdGVyU3FsRXhwcmVzc2lvbixcbiAgICAgICAgICAgICAgICBtYXJrZXIsXG4gICAgICAgICAgICAgICAgbWF4UGFnZVNpemU6IG9wdGlvbnMubWF4UGFnZVNpemUsXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgY29uc3Qgd3JhcHBlZFJlc3BvbnNlID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCByZXNwb25zZSksIHsgX3Jlc3BvbnNlOiByZXNwb25zZS5fcmVzcG9uc2UsIGJsb2JzOiByZXNwb25zZS5ibG9icy5tYXAoKGJsb2IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgICAgICBsZXQgdGFnVmFsdWUgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICBpZiAoKChfYSA9IGJsb2IudGFncykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmJsb2JUYWdTZXQubGVuZ3RoKSA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFnVmFsdWUgPSBibG9iLnRhZ3MuYmxvYlRhZ1NldFswXS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBibG9iKSwgeyB0YWdzOiB0b1RhZ3MoYmxvYi50YWdzKSwgdGFnVmFsdWUgfSk7XG4gICAgICAgICAgICAgICAgfSkgfSk7XG4gICAgICAgICAgICByZXR1cm4gd3JhcHBlZFJlc3BvbnNlO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBBc3luY0l0ZXJhYmxlSXRlcmF0b3IgZm9yIENvbnRhaW5lckZpbmRCbG9ic0J5VGFnc1NlZ21lbnRSZXNwb25zZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0YWdGaWx0ZXJTcWxFeHByZXNzaW9uIC0gIFRoZSB3aGVyZSBwYXJhbWV0ZXIgZW5hYmxlcyB0aGUgY2FsbGVyIHRvIHF1ZXJ5IGJsb2JzIHdob3NlIHRhZ3MgbWF0Y2ggYSBnaXZlbiBleHByZXNzaW9uLlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZ2l2ZW4gZXhwcmVzc2lvbiBtdXN0IGV2YWx1YXRlIHRvIHRydWUgZm9yIGEgYmxvYiB0byBiZSByZXR1cm5lZCBpbiB0aGUgcmVzdWx0cy5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlW09EYXRhIC0gQUJORl0gZmlsdGVyIHN5bnRheCBydWxlIGRlZmluZXMgdGhlIGZvcm1hbCBncmFtbWFyIGZvciB0aGUgdmFsdWUgb2YgdGhlIHdoZXJlIHF1ZXJ5IHBhcmFtZXRlcjtcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG93ZXZlciwgb25seSBhIHN1YnNldCBvZiB0aGUgT0RhdGEgZmlsdGVyIHN5bnRheCBpcyBzdXBwb3J0ZWQgaW4gdGhlIEJsb2Igc2VydmljZS5cbiAgICAgKiBAcGFyYW0gbWFya2VyIC0gQSBzdHJpbmcgdmFsdWUgdGhhdCBpZGVudGlmaWVzIHRoZSBwb3J0aW9uIG9mXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBsaXN0IG9mIGJsb2JzIHRvIGJlIHJldHVybmVkIHdpdGggdGhlIG5leHQgbGlzdGluZyBvcGVyYXRpb24uIFRoZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gcmV0dXJucyB0aGUgY29udGludWF0aW9uVG9rZW4gdmFsdWUgd2l0aGluIHRoZSByZXNwb25zZSBib2R5IGlmIHRoZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0aW5nIG9wZXJhdGlvbiBkaWQgbm90IHJldHVybiBhbGwgYmxvYnMgcmVtYWluaW5nIHRvIGJlIGxpc3RlZFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSBjdXJyZW50IHBhZ2UuIFRoZSBjb250aW51YXRpb25Ub2tlbiB2YWx1ZSBjYW4gYmUgdXNlZCBhcyB0aGUgdmFsdWUgZm9yXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBtYXJrZXIgcGFyYW1ldGVyIGluIGEgc3Vic2VxdWVudCBjYWxsIHRvIHJlcXVlc3QgdGhlIG5leHQgcGFnZSBvZiBsaXN0XG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLiBUaGUgbWFya2VyIHZhbHVlIGlzIG9wYXF1ZSB0byB0aGUgY2xpZW50LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBmaW5kIGJsb2JzIGJ5IHRhZ3MuXG4gICAgICovXG4gICAgZmluZEJsb2JzQnlUYWdzU2VnbWVudHModGFnRmlsdGVyU3FsRXhwcmVzc2lvbl8xLCBtYXJrZXJfMSkge1xuICAgICAgICByZXR1cm4gdHNsaWIuX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKiBmaW5kQmxvYnNCeVRhZ3NTZWdtZW50c18xKHRhZ0ZpbHRlclNxbEV4cHJlc3Npb24sIG1hcmtlciwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgICAgICBsZXQgcmVzcG9uc2U7XG4gICAgICAgICAgICBpZiAoISFtYXJrZXIgfHwgbWFya2VyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0geWllbGQgdHNsaWIuX19hd2FpdCh0aGlzLmZpbmRCbG9ic0J5VGFnc1NlZ21lbnQodGFnRmlsdGVyU3FsRXhwcmVzc2lvbiwgbWFya2VyLCBvcHRpb25zKSk7XG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmJsb2JzID0gcmVzcG9uc2UuYmxvYnMgfHwgW107XG4gICAgICAgICAgICAgICAgICAgIG1hcmtlciA9IHJlc3BvbnNlLmNvbnRpbnVhdGlvblRva2VuO1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCB5aWVsZCB0c2xpYi5fX2F3YWl0KHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICB9IHdoaWxlIChtYXJrZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBBc3luY0l0ZXJhYmxlSXRlcmF0b3IgZm9yIGJsb2JzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRhZ0ZpbHRlclNxbEV4cHJlc3Npb24gLSAgVGhlIHdoZXJlIHBhcmFtZXRlciBlbmFibGVzIHRoZSBjYWxsZXIgdG8gcXVlcnkgYmxvYnMgd2hvc2UgdGFncyBtYXRjaCBhIGdpdmVuIGV4cHJlc3Npb24uXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBnaXZlbiBleHByZXNzaW9uIG11c3QgZXZhbHVhdGUgdG8gdHJ1ZSBmb3IgYSBibG9iIHRvIGJlIHJldHVybmVkIGluIHRoZSByZXN1bHRzLlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGVbT0RhdGEgLSBBQk5GXSBmaWx0ZXIgc3ludGF4IHJ1bGUgZGVmaW5lcyB0aGUgZm9ybWFsIGdyYW1tYXIgZm9yIHRoZSB2YWx1ZSBvZiB0aGUgd2hlcmUgcXVlcnkgcGFyYW1ldGVyO1xuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3dldmVyLCBvbmx5IGEgc3Vic2V0IG9mIHRoZSBPRGF0YSBmaWx0ZXIgc3ludGF4IGlzIHN1cHBvcnRlZCBpbiB0aGUgQmxvYiBzZXJ2aWNlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBmaW5kQmxvYnNCeVRhZ3NJdGVtcy5cbiAgICAgKi9cbiAgICBmaW5kQmxvYnNCeVRhZ3NJdGVtcyh0YWdGaWx0ZXJTcWxFeHByZXNzaW9uXzEpIHtcbiAgICAgICAgcmV0dXJuIHRzbGliLl9fYXN5bmNHZW5lcmF0b3IodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiogZmluZEJsb2JzQnlUYWdzSXRlbXNfMSh0YWdGaWx0ZXJTcWxFeHByZXNzaW9uLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgICAgIHZhciBfYSwgZV8zLCBfYiwgX2M7XG4gICAgICAgICAgICBsZXQgbWFya2VyO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBfZCA9IHRydWUsIF9lID0gdHNsaWIuX19hc3luY1ZhbHVlcyh0aGlzLmZpbmRCbG9ic0J5VGFnc1NlZ21lbnRzKHRhZ0ZpbHRlclNxbEV4cHJlc3Npb24sIG1hcmtlciwgb3B0aW9ucykpLCBfZjsgX2YgPSB5aWVsZCB0c2xpYi5fX2F3YWl0KF9lLm5leHQoKSksIF9hID0gX2YuZG9uZSwgIV9hOyBfZCA9IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgX2MgPSBfZi52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgX2QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VnbWVudCA9IF9jO1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCB0c2xpYi5fX2F3YWl0KHlpZWxkKiB0c2xpYi5fX2FzeW5jRGVsZWdhdG9yKHRzbGliLl9fYXN5bmNWYWx1ZXMoc2VnbWVudC5ibG9icykpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZV8zXzEpIHsgZV8zID0geyBlcnJvcjogZV8zXzEgfTsgfVxuICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFfZCAmJiAhX2EgJiYgKF9iID0gX2UucmV0dXJuKSkgeWllbGQgdHNsaWIuX19hd2FpdChfYi5jYWxsKF9lKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8zKSB0aHJvdyBlXzMuZXJyb3I7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gYXN5bmMgaXRlcmFibGUgaXRlcmF0b3IgdG8gZmluZCBhbGwgYmxvYnMgd2l0aCBzcGVjaWZpZWQgdGFnXG4gICAgICogdW5kZXIgdGhlIHNwZWNpZmllZCBjb250YWluZXIuXG4gICAgICpcbiAgICAgKiAuYnlQYWdlKCkgcmV0dXJucyBhbiBhc3luYyBpdGVyYWJsZSBpdGVyYXRvciB0byBsaXN0IHRoZSBibG9icyBpbiBwYWdlcy5cbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNpbmcgYGZvciBhd2FpdGAgc3ludGF4OlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBsZXQgaSA9IDE7XG4gICAgICogZm9yIGF3YWl0IChjb25zdCBibG9iIG9mIGNvbnRhaW5lckNsaWVudC5maW5kQmxvYnNCeVRhZ3MoXCJ0YWdrZXk9J3RhZ3ZhbHVlJ1wiKSkge1xuICAgICAqICAgY29uc29sZS5sb2coYEJsb2IgJHtpKyt9OiAke2Jsb2IubmFtZX1gKTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIGBpdGVyLm5leHQoKWA6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGxldCBpID0gMTtcbiAgICAgKiBjb25zdCBpdGVyID0gY29udGFpbmVyQ2xpZW50LmZpbmRCbG9ic0J5VGFncyhcInRhZ2tleT0ndGFndmFsdWUnXCIpO1xuICAgICAqIGxldCBibG9iSXRlbSA9IGF3YWl0IGl0ZXIubmV4dCgpO1xuICAgICAqIHdoaWxlICghYmxvYkl0ZW0uZG9uZSkge1xuICAgICAqICAgY29uc29sZS5sb2coYEJsb2IgJHtpKyt9OiAke2Jsb2JJdGVtLnZhbHVlLm5hbWV9YCk7XG4gICAgICogICBibG9iSXRlbSA9IGF3YWl0IGl0ZXIubmV4dCgpO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNpbmcgYGJ5UGFnZSgpYDpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogLy8gcGFzc2luZyBvcHRpb25hbCBtYXhQYWdlU2l6ZSBpbiB0aGUgcGFnZSBzZXR0aW5nc1xuICAgICAqIGxldCBpID0gMTtcbiAgICAgKiBmb3IgYXdhaXQgKGNvbnN0IHJlc3BvbnNlIG9mIGNvbnRhaW5lckNsaWVudC5maW5kQmxvYnNCeVRhZ3MoXCJ0YWdrZXk9J3RhZ3ZhbHVlJ1wiKS5ieVBhZ2UoeyBtYXhQYWdlU2l6ZTogMjAgfSkpIHtcbiAgICAgKiAgIGlmIChyZXNwb25zZS5ibG9icykge1xuICAgICAqICAgICBmb3IgKGNvbnN0IGJsb2Igb2YgcmVzcG9uc2UuYmxvYnMpIHtcbiAgICAgKiAgICAgICBjb25zb2xlLmxvZyhgQmxvYiAke2krK306ICR7YmxvYi5uYW1lfWApO1xuICAgICAqICAgICB9XG4gICAgICogICB9XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBwYWdpbmcgd2l0aCBhIG1hcmtlcjpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogbGV0IGkgPSAxO1xuICAgICAqIGxldCBpdGVyYXRvciA9IGNvbnRhaW5lckNsaWVudC5maW5kQmxvYnNCeVRhZ3MoXCJ0YWdrZXk9J3RhZ3ZhbHVlJ1wiKS5ieVBhZ2UoeyBtYXhQYWdlU2l6ZTogMiB9KTtcbiAgICAgKiBsZXQgcmVzcG9uc2UgPSAoYXdhaXQgaXRlcmF0b3IubmV4dCgpKS52YWx1ZTtcbiAgICAgKlxuICAgICAqIC8vIFByaW50cyAyIGJsb2IgbmFtZXNcbiAgICAgKiBpZiAocmVzcG9uc2UuYmxvYnMpIHtcbiAgICAgKiAgIGZvciAoY29uc3QgYmxvYiBvZiByZXNwb25zZS5ibG9icykge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhgQmxvYiAke2krK306ICR7YmxvYi5uYW1lfWApO1xuICAgICAqICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIC8vIEdldHMgbmV4dCBtYXJrZXJcbiAgICAgKiBsZXQgbWFya2VyID0gcmVzcG9uc2UuY29udGludWF0aW9uVG9rZW47XG4gICAgICogLy8gUGFzc2luZyBuZXh0IG1hcmtlciBhcyBjb250aW51YXRpb25Ub2tlblxuICAgICAqIGl0ZXJhdG9yID0gY29udGFpbmVyQ2xpZW50XG4gICAgICogICAuZmluZEJsb2JzQnlUYWdzKFwidGFna2V5PSd0YWd2YWx1ZSdcIilcbiAgICAgKiAgIC5ieVBhZ2UoeyBjb250aW51YXRpb25Ub2tlbjogbWFya2VyLCBtYXhQYWdlU2l6ZTogMTAgfSk7XG4gICAgICogcmVzcG9uc2UgPSAoYXdhaXQgaXRlcmF0b3IubmV4dCgpKS52YWx1ZTtcbiAgICAgKlxuICAgICAqIC8vIFByaW50cyBibG9iIG5hbWVzXG4gICAgICogaWYgKHJlc3BvbnNlLmJsb2JzKSB7XG4gICAgICogICBmb3IgKGNvbnN0IGJsb2Igb2YgcmVzcG9uc2UuYmxvYnMpIHtcbiAgICAgKiAgICAgIGNvbnNvbGUubG9nKGBCbG9iICR7aSsrfTogJHtibG9iLm5hbWV9YCk7XG4gICAgICogICB9XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQHBhcmFtIHRhZ0ZpbHRlclNxbEV4cHJlc3Npb24gLSAgVGhlIHdoZXJlIHBhcmFtZXRlciBlbmFibGVzIHRoZSBjYWxsZXIgdG8gcXVlcnkgYmxvYnMgd2hvc2UgdGFncyBtYXRjaCBhIGdpdmVuIGV4cHJlc3Npb24uXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBnaXZlbiBleHByZXNzaW9uIG11c3QgZXZhbHVhdGUgdG8gdHJ1ZSBmb3IgYSBibG9iIHRvIGJlIHJldHVybmVkIGluIHRoZSByZXN1bHRzLlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGVbT0RhdGEgLSBBQk5GXSBmaWx0ZXIgc3ludGF4IHJ1bGUgZGVmaW5lcyB0aGUgZm9ybWFsIGdyYW1tYXIgZm9yIHRoZSB2YWx1ZSBvZiB0aGUgd2hlcmUgcXVlcnkgcGFyYW1ldGVyO1xuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3dldmVyLCBvbmx5IGEgc3Vic2V0IG9mIHRoZSBPRGF0YSBmaWx0ZXIgc3ludGF4IGlzIHN1cHBvcnRlZCBpbiB0aGUgQmxvYiBzZXJ2aWNlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBmaW5kIGJsb2JzIGJ5IHRhZ3MuXG4gICAgICovXG4gICAgZmluZEJsb2JzQnlUYWdzKHRhZ0ZpbHRlclNxbEV4cHJlc3Npb24sIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICAvLyBBc3luY0l0ZXJhYmxlSXRlcmF0b3IgdG8gaXRlcmF0ZSBvdmVyIGJsb2JzXG4gICAgICAgIGNvbnN0IGxpc3RTZWdtZW50T3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBpdGVyID0gdGhpcy5maW5kQmxvYnNCeVRhZ3NJdGVtcyh0YWdGaWx0ZXJTcWxFeHByZXNzaW9uLCBsaXN0U2VnbWVudE9wdGlvbnMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBUaGUgbmV4dCBtZXRob2QsIHBhcnQgb2YgdGhlIGl0ZXJhdGlvbiBwcm90b2NvbFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBuZXh0KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVyLm5leHQoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFRoZSBjb25uZWN0aW9uIHRvIHRoZSBhc3luYyBpdGVyYXRvciwgcGFydCBvZiB0aGUgaXRlcmF0aW9uIHByb3RvY29sXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBSZXR1cm4gYW4gQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIHRoYXQgd29ya3MgYSBwYWdlIGF0IGEgdGltZVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBieVBhZ2U6IChzZXR0aW5ncyA9IHt9KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluZEJsb2JzQnlUYWdzU2VnbWVudHModGFnRmlsdGVyU3FsRXhwcmVzc2lvbiwgc2V0dGluZ3MuY29udGludWF0aW9uVG9rZW4sIE9iamVjdC5hc3NpZ24oeyBtYXhQYWdlU2l6ZTogc2V0dGluZ3MubWF4UGFnZVNpemUgfSwgbGlzdFNlZ21lbnRPcHRpb25zKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgR2V0IEFjY291bnQgSW5mb3JtYXRpb24gb3BlcmF0aW9uIHJldHVybnMgdGhlIHNrdSBuYW1lIGFuZCBhY2NvdW50IGtpbmRcbiAgICAgKiBmb3IgdGhlIHNwZWNpZmllZCBhY2NvdW50LlxuICAgICAqIFRoZSBHZXQgQWNjb3VudCBJbmZvcm1hdGlvbiBvcGVyYXRpb24gaXMgYXZhaWxhYmxlIG9uIHNlcnZpY2UgdmVyc2lvbnMgYmVnaW5uaW5nXG4gICAgICogd2l0aCB2ZXJzaW9uIDIwMTgtMDMtMjguXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvZ2V0LWFjY291bnQtaW5mb3JtYXRpb25cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB0aGUgU2VydmljZSBHZXQgQWNjb3VudCBJbmZvIG9wZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyBSZXNwb25zZSBkYXRhIGZvciB0aGUgU2VydmljZSBHZXQgQWNjb3VudCBJbmZvIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBnZXRBY2NvdW50SW5mbyhvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJDb250YWluZXJDbGllbnQtZ2V0QWNjb3VudEluZm9cIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5jb250YWluZXJDb250ZXh0LmdldEFjY291bnRJbmZvKHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBnZXRDb250YWluZXJOYW1lRnJvbVVybCgpIHtcbiAgICAgICAgbGV0IGNvbnRhaW5lck5hbWU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyAgVVJMIG1heSBsb29rIGxpa2UgdGhlIGZvbGxvd2luZ1xuICAgICAgICAgICAgLy8gXCJodHRwczovL215YWNjb3VudC5ibG9iLmNvcmUud2luZG93cy5uZXQvbXljb250YWluZXI/c2FzU3RyaW5nXCI7XG4gICAgICAgICAgICAvLyBcImh0dHBzOi8vbXlhY2NvdW50LmJsb2IuY29yZS53aW5kb3dzLm5ldC9teWNvbnRhaW5lclwiO1xuICAgICAgICAgICAgLy8gSVB2NC9JUHY2IGFkZHJlc3MgaG9zdHMsIEVuZHBvaW50cyAtIGBodHRwOi8vMTI3LjAuMC4xOjEwMDAwL2RldnN0b3JlYWNjb3VudDEvY29udGFpbmVybmFtZWBcbiAgICAgICAgICAgIC8vIGh0dHA6Ly9sb2NhbGhvc3Q6MTAwMDEvZGV2c3RvcmVhY2NvdW50MS9jb250YWluZXJuYW1lXG4gICAgICAgICAgICBjb25zdCBwYXJzZWRVcmwgPSBuZXcgVVJMKHRoaXMudXJsKTtcbiAgICAgICAgICAgIGlmIChwYXJzZWRVcmwuaG9zdG5hbWUuc3BsaXQoXCIuXCIpWzFdID09PSBcImJsb2JcIikge1xuICAgICAgICAgICAgICAgIC8vIFwiaHR0cHM6Ly9teWFjY291bnQuYmxvYi5jb3JlLndpbmRvd3MubmV0L2NvbnRhaW5lcm5hbWVcIi5cbiAgICAgICAgICAgICAgICAvLyBcImh0dHBzOi8vY3VzdG9tZG9tYWluLmNvbS9jb250YWluZXJuYW1lXCIuXG4gICAgICAgICAgICAgICAgLy8gLmdldFBhdGgoKSAtPiAvY29udGFpbmVybmFtZVxuICAgICAgICAgICAgICAgIGNvbnRhaW5lck5hbWUgPSBwYXJzZWRVcmwucGF0aG5hbWUuc3BsaXQoXCIvXCIpWzFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaXNJcEVuZHBvaW50U3R5bGUocGFyc2VkVXJsKSkge1xuICAgICAgICAgICAgICAgIC8vIElQdjQvSVB2NiBhZGRyZXNzIGhvc3RzLi4uIEV4YW1wbGUgLSBodHRwOi8vMTkyLjAuMC4xMDoxMDAwMS9kZXZzdG9yZWFjY291bnQxL2NvbnRhaW5lcm5hbWVcbiAgICAgICAgICAgICAgICAvLyBTaW5nbGUgd29yZCBkb21haW4gd2l0aG91dCBhIFtkb3RdIGluIHRoZSBlbmRwb2ludC4uLiBFeGFtcGxlIC0gaHR0cDovL2xvY2FsaG9zdDoxMDAwMS9kZXZzdG9yZWFjY291bnQxL2NvbnRhaW5lcm5hbWVcbiAgICAgICAgICAgICAgICAvLyAuZ2V0UGF0aCgpIC0+IC9kZXZzdG9yZWFjY291bnQxL2NvbnRhaW5lcm5hbWVcbiAgICAgICAgICAgICAgICBjb250YWluZXJOYW1lID0gcGFyc2VkVXJsLnBhdGhuYW1lLnNwbGl0KFwiL1wiKVsyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFwiaHR0cHM6Ly9jdXN0b21kb21haW4uY29tL2NvbnRhaW5lcm5hbWVcIi5cbiAgICAgICAgICAgICAgICAvLyAuZ2V0UGF0aCgpIC0+IC9jb250YWluZXJuYW1lXG4gICAgICAgICAgICAgICAgY29udGFpbmVyTmFtZSA9IHBhcnNlZFVybC5wYXRobmFtZS5zcGxpdChcIi9cIilbMV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBkZWNvZGUgdGhlIGVuY29kZWQgY29udGFpbmVyTmFtZSAtIHRvIGdldCBhbGwgdGhlIHNwZWNpYWwgY2hhcmFjdGVycyB0aGF0IG1pZ2h0IGJlIHByZXNlbnQgaW4gaXRcbiAgICAgICAgICAgIGNvbnRhaW5lck5hbWUgPSBkZWNvZGVVUklDb21wb25lbnQoY29udGFpbmVyTmFtZSk7XG4gICAgICAgICAgICBpZiAoIWNvbnRhaW5lck5hbWUpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQcm92aWRlZCBjb250YWluZXJOYW1lIGlzIGludmFsaWQuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5lck5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gZXh0cmFjdCBjb250YWluZXJOYW1lIHdpdGggcHJvdmlkZWQgaW5mb3JtYXRpb24uXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE9ubHkgYXZhaWxhYmxlIGZvciBDb250YWluZXJDbGllbnQgY29uc3RydWN0ZWQgd2l0aCBhIHNoYXJlZCBrZXkgY3JlZGVudGlhbC5cbiAgICAgKlxuICAgICAqIEdlbmVyYXRlcyBhIEJsb2IgQ29udGFpbmVyIFNlcnZpY2UgU2hhcmVkIEFjY2VzcyBTaWduYXR1cmUgKFNBUykgVVJJIGJhc2VkIG9uIHRoZSBjbGllbnQgcHJvcGVydGllc1xuICAgICAqIGFuZCBwYXJhbWV0ZXJzIHBhc3NlZCBpbi4gVGhlIFNBUyBpcyBzaWduZWQgYnkgdGhlIHNoYXJlZCBrZXkgY3JlZGVudGlhbCBvZiB0aGUgY2xpZW50LlxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvY29uc3RydWN0aW5nLWEtc2VydmljZS1zYXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgcGFyYW1ldGVycy5cbiAgICAgKiBAcmV0dXJucyBUaGUgU0FTIFVSSSBjb25zaXN0aW5nIG9mIHRoZSBVUkkgdG8gdGhlIHJlc291cmNlIHJlcHJlc2VudGVkIGJ5IHRoaXMgY2xpZW50LCBmb2xsb3dlZCBieSB0aGUgZ2VuZXJhdGVkIFNBUyB0b2tlbi5cbiAgICAgKi9cbiAgICBnZW5lcmF0ZVNhc1VybChvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKCEodGhpcy5jcmVkZW50aWFsIGluc3RhbmNlb2YgU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJDYW4gb25seSBnZW5lcmF0ZSB0aGUgU0FTIHdoZW4gdGhlIGNsaWVudCBpcyBpbml0aWFsaXplZCB3aXRoIGEgc2hhcmVkIGtleSBjcmVkZW50aWFsXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc2FzID0gZ2VuZXJhdGVCbG9iU0FTUXVlcnlQYXJhbWV0ZXJzKE9iamVjdC5hc3NpZ24oeyBjb250YWluZXJOYW1lOiB0aGlzLl9jb250YWluZXJOYW1lIH0sIG9wdGlvbnMpLCB0aGlzLmNyZWRlbnRpYWwpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICByZXNvbHZlKGFwcGVuZFRvVVJMUXVlcnkodGhpcy51cmwsIHNhcykpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogT25seSBhdmFpbGFibGUgZm9yIENvbnRhaW5lckNsaWVudCBjb25zdHJ1Y3RlZCB3aXRoIGEgc2hhcmVkIGtleSBjcmVkZW50aWFsLlxuICAgICAqXG4gICAgICogR2VuZXJhdGVzIHN0cmluZyB0byBzaWduIGZvciBhIEJsb2IgQ29udGFpbmVyIFNlcnZpY2UgU2hhcmVkIEFjY2VzcyBTaWduYXR1cmUgKFNBUykgVVJJXG4gICAgICogYmFzZWQgb24gdGhlIGNsaWVudCBwcm9wZXJ0aWVzIGFuZCBwYXJhbWV0ZXJzIHBhc3NlZCBpbi4gVGhlIFNBUyBpcyBzaWduZWQgYnkgdGhlIHNoYXJlZCBrZXkgY3JlZGVudGlhbCBvZiB0aGUgY2xpZW50LlxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvY29uc3RydWN0aW5nLWEtc2VydmljZS1zYXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgcGFyYW1ldGVycy5cbiAgICAgKiBAcmV0dXJucyBUaGUgU0FTIFVSSSBjb25zaXN0aW5nIG9mIHRoZSBVUkkgdG8gdGhlIHJlc291cmNlIHJlcHJlc2VudGVkIGJ5IHRoaXMgY2xpZW50LCBmb2xsb3dlZCBieSB0aGUgZ2VuZXJhdGVkIFNBUyB0b2tlbi5cbiAgICAgKi9cbiAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGF6dXJlL2F6dXJlLXNkay90cy1uYW1pbmctb3B0aW9ucyovXG4gICAgZ2VuZXJhdGVTYXNTdHJpbmdUb1NpZ24ob3B0aW9ucykge1xuICAgICAgICBpZiAoISh0aGlzLmNyZWRlbnRpYWwgaW5zdGFuY2VvZiBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiQ2FuIG9ubHkgZ2VuZXJhdGUgdGhlIFNBUyB3aGVuIHRoZSBjbGllbnQgaXMgaW5pdGlhbGl6ZWQgd2l0aCBhIHNoYXJlZCBrZXkgY3JlZGVudGlhbFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2VuZXJhdGVCbG9iU0FTUXVlcnlQYXJhbWV0ZXJzSW50ZXJuYWwoT2JqZWN0LmFzc2lnbih7IGNvbnRhaW5lck5hbWU6IHRoaXMuX2NvbnRhaW5lck5hbWUgfSwgb3B0aW9ucyksIHRoaXMuY3JlZGVudGlhbCkuc3RyaW5nVG9TaWduO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgQmxvYkJhdGNoQ2xpZW50IG9iamVjdCB0byBjb25kdWN0IGJhdGNoIG9wZXJhdGlvbnMuXG4gICAgICpcbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9ibG9iLWJhdGNoXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBBIG5ldyBCbG9iQmF0Y2hDbGllbnQgb2JqZWN0IGZvciB0aGlzIGNvbnRhaW5lci5cbiAgICAgKi9cbiAgICBnZXRCbG9iQmF0Y2hDbGllbnQoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQmxvYkJhdGNoQ2xpZW50KHRoaXMudXJsLCB0aGlzLnBpcGVsaW5lKTtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBPTkxZIEFWQUlMQUJMRSBJTiBOT0RFLkpTIFJVTlRJTUUuXG4gKlxuICogVGhpcyBpcyBhIGhlbHBlciBjbGFzcyB0byBjb25zdHJ1Y3QgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBwZXJtaXNzaW9ucyBncmFudGVkIGJ5IGFuIEFjY291bnRTQVMuIFNldHRpbmcgYSB2YWx1ZVxuICogdG8gdHJ1ZSBtZWFucyB0aGF0IGFueSBTQVMgd2hpY2ggdXNlcyB0aGVzZSBwZXJtaXNzaW9ucyB3aWxsIGdyYW50IHBlcm1pc3Npb25zIGZvciB0aGF0IG9wZXJhdGlvbi4gT25jZSBhbGwgdGhlXG4gKiB2YWx1ZXMgYXJlIHNldCwgdGhpcyBzaG91bGQgYmUgc2VyaWFsaXplZCB3aXRoIHRvU3RyaW5nIGFuZCBzZXQgYXMgdGhlIHBlcm1pc3Npb25zIGZpZWxkIG9uIGFuXG4gKiB7QGxpbmsgQWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlc30gb2JqZWN0LiBJdCBpcyBwb3NzaWJsZSB0byBjb25zdHJ1Y3QgdGhlIHBlcm1pc3Npb25zIHN0cmluZyB3aXRob3V0IHRoaXMgY2xhc3MsIGJ1dFxuICogdGhlIG9yZGVyIG9mIHRoZSBwZXJtaXNzaW9ucyBpcyBwYXJ0aWN1bGFyIGFuZCB0aGlzIGNsYXNzIGd1YXJhbnRlZXMgY29ycmVjdG5lc3MuXG4gKi9cbmNsYXNzIEFjY291bnRTQVNQZXJtaXNzaW9ucyB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQZXJtaXNzaW9uIHRvIHJlYWQgcmVzb3VyY2VzIGFuZCBsaXN0IHF1ZXVlcyBhbmQgdGFibGVzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnJlYWQgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFBlcm1pc3Npb24gdG8gd3JpdGUgcmVzb3VyY2VzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLndyaXRlID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQZXJtaXNzaW9uIHRvIGRlbGV0ZSBibG9icyBhbmQgZmlsZXMgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZGVsZXRlID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQZXJtaXNzaW9uIHRvIGRlbGV0ZSB2ZXJzaW9ucyBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5kZWxldGVWZXJzaW9uID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQZXJtaXNzaW9uIHRvIGxpc3QgYmxvYiBjb250YWluZXJzLCBibG9icywgc2hhcmVzLCBkaXJlY3RvcmllcywgYW5kIGZpbGVzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmxpc3QgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFBlcm1pc3Npb24gdG8gYWRkIG1lc3NhZ2VzLCB0YWJsZSBlbnRpdGllcywgYW5kIGFwcGVuZCB0byBibG9icyBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5hZGQgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFBlcm1pc3Npb24gdG8gY3JlYXRlIGJsb2JzIGFuZCBmaWxlcyBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5jcmVhdGUgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFBlcm1pc3Npb25zIHRvIHVwZGF0ZSBtZXNzYWdlcyBhbmQgdGFibGUgZW50aXRpZXMgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudXBkYXRlID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQZXJtaXNzaW9uIHRvIGdldCBhbmQgZGVsZXRlIG1lc3NhZ2VzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnByb2Nlc3MgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNmaWVzIFRhZyBhY2Nlc3MgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudGFnID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQZXJtaXNzaW9uIHRvIGZpbHRlciBibG9icy5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZmlsdGVyID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQZXJtaXNzaW9uIHRvIHNldCBpbW11dGFiaWxpdHkgcG9saWN5LlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5zZXRJbW11dGFiaWxpdHlQb2xpY3kgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB0aGF0IFBlcm1hbmVudCBEZWxldGUgaXMgcGVybWl0dGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5wZXJtYW5lbnREZWxldGUgPSBmYWxzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUGFyc2UgaW5pdGlhbGl6ZXMgdGhlIEFjY291bnRTQVNQZXJtaXNzaW9ucyBmaWVsZHMgZnJvbSBhIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwZXJtaXNzaW9ucyAtXG4gICAgICovXG4gICAgc3RhdGljIHBhcnNlKHBlcm1pc3Npb25zKSB7XG4gICAgICAgIGNvbnN0IGFjY291bnRTQVNQZXJtaXNzaW9ucyA9IG5ldyBBY2NvdW50U0FTUGVybWlzc2lvbnMoKTtcbiAgICAgICAgZm9yIChjb25zdCBjIG9mIHBlcm1pc3Npb25zKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGMpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwiclwiOlxuICAgICAgICAgICAgICAgICAgICBhY2NvdW50U0FTUGVybWlzc2lvbnMucmVhZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJ3XCI6XG4gICAgICAgICAgICAgICAgICAgIGFjY291bnRTQVNQZXJtaXNzaW9ucy53cml0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJkXCI6XG4gICAgICAgICAgICAgICAgICAgIGFjY291bnRTQVNQZXJtaXNzaW9ucy5kZWxldGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwieFwiOlxuICAgICAgICAgICAgICAgICAgICBhY2NvdW50U0FTUGVybWlzc2lvbnMuZGVsZXRlVmVyc2lvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJsXCI6XG4gICAgICAgICAgICAgICAgICAgIGFjY291bnRTQVNQZXJtaXNzaW9ucy5saXN0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImFcIjpcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudFNBU1Blcm1pc3Npb25zLmFkZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJjXCI6XG4gICAgICAgICAgICAgICAgICAgIGFjY291bnRTQVNQZXJtaXNzaW9ucy5jcmVhdGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwidVwiOlxuICAgICAgICAgICAgICAgICAgICBhY2NvdW50U0FTUGVybWlzc2lvbnMudXBkYXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInBcIjpcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudFNBU1Blcm1pc3Npb25zLnByb2Nlc3MgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwidFwiOlxuICAgICAgICAgICAgICAgICAgICBhY2NvdW50U0FTUGVybWlzc2lvbnMudGFnID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImZcIjpcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudFNBU1Blcm1pc3Npb25zLmZpbHRlciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJpXCI6XG4gICAgICAgICAgICAgICAgICAgIGFjY291bnRTQVNQZXJtaXNzaW9ucy5zZXRJbW11dGFiaWxpdHlQb2xpY3kgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwieVwiOlxuICAgICAgICAgICAgICAgICAgICBhY2NvdW50U0FTUGVybWlzc2lvbnMucGVybWFuZW50RGVsZXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEludmFsaWQgcGVybWlzc2lvbiBjaGFyYWN0ZXI6ICR7Y31gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjb3VudFNBU1Blcm1pc3Npb25zO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEge0BsaW5rIEFjY291bnRTQVNQZXJtaXNzaW9uc30gZnJvbSBhIHJhdyBvYmplY3Qgd2hpY2ggY29udGFpbnMgc2FtZSBrZXlzIGFzIGl0XG4gICAgICogYW5kIGJvb2xlYW4gdmFsdWVzIGZvciB0aGVtLlxuICAgICAqXG4gICAgICogQHBhcmFtIHBlcm1pc3Npb25MaWtlIC1cbiAgICAgKi9cbiAgICBzdGF0aWMgZnJvbShwZXJtaXNzaW9uTGlrZSkge1xuICAgICAgICBjb25zdCBhY2NvdW50U0FTUGVybWlzc2lvbnMgPSBuZXcgQWNjb3VudFNBU1Blcm1pc3Npb25zKCk7XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS5yZWFkKSB7XG4gICAgICAgICAgICBhY2NvdW50U0FTUGVybWlzc2lvbnMucmVhZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLndyaXRlKSB7XG4gICAgICAgICAgICBhY2NvdW50U0FTUGVybWlzc2lvbnMud3JpdGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS5kZWxldGUpIHtcbiAgICAgICAgICAgIGFjY291bnRTQVNQZXJtaXNzaW9ucy5kZWxldGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS5kZWxldGVWZXJzaW9uKSB7XG4gICAgICAgICAgICBhY2NvdW50U0FTUGVybWlzc2lvbnMuZGVsZXRlVmVyc2lvbiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLmZpbHRlcikge1xuICAgICAgICAgICAgYWNjb3VudFNBU1Blcm1pc3Npb25zLmZpbHRlciA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLnRhZykge1xuICAgICAgICAgICAgYWNjb3VudFNBU1Blcm1pc3Npb25zLnRhZyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLmxpc3QpIHtcbiAgICAgICAgICAgIGFjY291bnRTQVNQZXJtaXNzaW9ucy5saXN0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2UuYWRkKSB7XG4gICAgICAgICAgICBhY2NvdW50U0FTUGVybWlzc2lvbnMuYWRkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2UuY3JlYXRlKSB7XG4gICAgICAgICAgICBhY2NvdW50U0FTUGVybWlzc2lvbnMuY3JlYXRlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2UudXBkYXRlKSB7XG4gICAgICAgICAgICBhY2NvdW50U0FTUGVybWlzc2lvbnMudXBkYXRlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2UucHJvY2Vzcykge1xuICAgICAgICAgICAgYWNjb3VudFNBU1Blcm1pc3Npb25zLnByb2Nlc3MgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS5zZXRJbW11dGFiaWxpdHlQb2xpY3kpIHtcbiAgICAgICAgICAgIGFjY291bnRTQVNQZXJtaXNzaW9ucy5zZXRJbW11dGFiaWxpdHlQb2xpY3kgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS5wZXJtYW5lbnREZWxldGUpIHtcbiAgICAgICAgICAgIGFjY291bnRTQVNQZXJtaXNzaW9ucy5wZXJtYW5lbnREZWxldGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2NvdW50U0FTUGVybWlzc2lvbnM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFByb2R1Y2VzIHRoZSBTQVMgcGVybWlzc2lvbnMgc3RyaW5nIGZvciBhbiBBenVyZSBTdG9yYWdlIGFjY291bnQuXG4gICAgICogQ2FsbCB0aGlzIG1ldGhvZCB0byBzZXQgQWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcyBQZXJtaXNzaW9ucyBmaWVsZC5cbiAgICAgKlxuICAgICAqIFVzaW5nIHRoaXMgbWV0aG9kIHdpbGwgZ3VhcmFudGVlIHRoZSByZXNvdXJjZSB0eXBlcyBhcmUgaW5cbiAgICAgKiBhbiBvcmRlciBhY2NlcHRlZCBieSB0aGUgc2VydmljZS5cbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2NvbnN0cnVjdGluZy1hbi1hY2NvdW50LXNhc1xuICAgICAqXG4gICAgICovXG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIC8vIFRoZSBvcmRlciBvZiB0aGUgY2hhcmFjdGVycyBzaG91bGQgYmUgYXMgc3BlY2lmaWVkIGhlcmUgdG8gZW5zdXJlIGNvcnJlY3RuZXNzOlxuICAgICAgICAvLyBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvY29uc3RydWN0aW5nLWFuLWFjY291bnQtc2FzXG4gICAgICAgIC8vIFVzZSBhIHN0cmluZyBhcnJheSBpbnN0ZWFkIG9mIHN0cmluZyBjb25jYXRlbmF0aW5nICs9IG9wZXJhdG9yIGZvciBwZXJmb3JtYW5jZVxuICAgICAgICBjb25zdCBwZXJtaXNzaW9ucyA9IFtdO1xuICAgICAgICBpZiAodGhpcy5yZWFkKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwiclwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy53cml0ZSkge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcIndcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZGVsZXRlKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwiZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kZWxldGVWZXJzaW9uKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwieFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5maWx0ZXIpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJmXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnRhZykge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcInRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubGlzdCkge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcImxcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuYWRkKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwiYVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jcmVhdGUpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJjXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnVwZGF0ZSkge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcInVcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucHJvY2Vzcykge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcInBcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2V0SW1tdXRhYmlsaXR5UG9saWN5KSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwiaVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wZXJtYW5lbnREZWxldGUpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJ5XCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwZXJtaXNzaW9ucy5qb2luKFwiXCIpO1xuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIE9OTFkgQVZBSUxBQkxFIElOIE5PREUuSlMgUlVOVElNRS5cbiAqXG4gKiBUaGlzIGlzIGEgaGVscGVyIGNsYXNzIHRvIGNvbnN0cnVjdCBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHJlc291cmNlcyBhY2Nlc3NpYmxlIGJ5IGFuIEFjY291bnRTQVMuIFNldHRpbmcgYSB2YWx1ZVxuICogdG8gdHJ1ZSBtZWFucyB0aGF0IGFueSBTQVMgd2hpY2ggdXNlcyB0aGVzZSBwZXJtaXNzaW9ucyB3aWxsIGdyYW50IGFjY2VzcyB0byB0aGF0IHJlc291cmNlIHR5cGUuIE9uY2UgYWxsIHRoZVxuICogdmFsdWVzIGFyZSBzZXQsIHRoaXMgc2hvdWxkIGJlIHNlcmlhbGl6ZWQgd2l0aCB0b1N0cmluZyBhbmQgc2V0IGFzIHRoZSByZXNvdXJjZXMgZmllbGQgb24gYW5cbiAqIHtAbGluayBBY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzfSBvYmplY3QuIEl0IGlzIHBvc3NpYmxlIHRvIGNvbnN0cnVjdCB0aGUgcmVzb3VyY2VzIHN0cmluZyB3aXRob3V0IHRoaXMgY2xhc3MsIGJ1dFxuICogdGhlIG9yZGVyIG9mIHRoZSByZXNvdXJjZXMgaXMgcGFydGljdWxhciBhbmQgdGhpcyBjbGFzcyBndWFyYW50ZWVzIGNvcnJlY3RuZXNzLlxuICovXG5jbGFzcyBBY2NvdW50U0FTUmVzb3VyY2VUeXBlcyB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQZXJtaXNzaW9uIHRvIGFjY2VzcyBzZXJ2aWNlIGxldmVsIEFQSXMgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuc2VydmljZSA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogUGVybWlzc2lvbiB0byBhY2Nlc3MgY29udGFpbmVyIGxldmVsIEFQSXMgKEJsb2IgQ29udGFpbmVycywgVGFibGVzLCBRdWV1ZXMsIEZpbGUgU2hhcmVzKSBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5jb250YWluZXIgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFBlcm1pc3Npb24gdG8gYWNjZXNzIG9iamVjdCBsZXZlbCBBUElzIChCbG9icywgVGFibGUgRW50aXRpZXMsIFF1ZXVlIE1lc3NhZ2VzLCBGaWxlcykgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMub2JqZWN0ID0gZmFsc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4ge0BsaW5rIEFjY291bnRTQVNSZXNvdXJjZVR5cGVzfSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVzb3VyY2UgdHlwZXMgc3RyaW5nLiBUaGlzIG1ldGhvZCB3aWxsIHRocm93IGFuXG4gICAgICogRXJyb3IgaWYgaXQgZW5jb3VudGVycyBhIGNoYXJhY3RlciB0aGF0IGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSB2YWxpZCByZXNvdXJjZSB0eXBlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlc291cmNlVHlwZXMgLVxuICAgICAqL1xuICAgIHN0YXRpYyBwYXJzZShyZXNvdXJjZVR5cGVzKSB7XG4gICAgICAgIGNvbnN0IGFjY291bnRTQVNSZXNvdXJjZVR5cGVzID0gbmV3IEFjY291bnRTQVNSZXNvdXJjZVR5cGVzKCk7XG4gICAgICAgIGZvciAoY29uc3QgYyBvZiByZXNvdXJjZVR5cGVzKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGMpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwic1wiOlxuICAgICAgICAgICAgICAgICAgICBhY2NvdW50U0FTUmVzb3VyY2VUeXBlcy5zZXJ2aWNlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImNcIjpcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudFNBU1Jlc291cmNlVHlwZXMuY29udGFpbmVyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm9cIjpcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudFNBU1Jlc291cmNlVHlwZXMub2JqZWN0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEludmFsaWQgcmVzb3VyY2UgdHlwZTogJHtjfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2NvdW50U0FTUmVzb3VyY2VUeXBlcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29udmVydHMgdGhlIGdpdmVuIHJlc291cmNlIHR5cGVzIHRvIGEgc3RyaW5nLlxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvY29uc3RydWN0aW5nLWFuLWFjY291bnQtc2FzXG4gICAgICpcbiAgICAgKi9cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgY29uc3QgcmVzb3VyY2VUeXBlcyA9IFtdO1xuICAgICAgICBpZiAodGhpcy5zZXJ2aWNlKSB7XG4gICAgICAgICAgICByZXNvdXJjZVR5cGVzLnB1c2goXCJzXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNvbnRhaW5lcikge1xuICAgICAgICAgICAgcmVzb3VyY2VUeXBlcy5wdXNoKFwiY1wiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vYmplY3QpIHtcbiAgICAgICAgICAgIHJlc291cmNlVHlwZXMucHVzaChcIm9cIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc291cmNlVHlwZXMuam9pbihcIlwiKTtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBPTkxZIEFWQUlMQUJMRSBJTiBOT0RFLkpTIFJVTlRJTUUuXG4gKlxuICogVGhpcyBpcyBhIGhlbHBlciBjbGFzcyB0byBjb25zdHJ1Y3QgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBzZXJ2aWNlcyBhY2Nlc3NpYmxlIGJ5IGFuIEFjY291bnRTQVMuIFNldHRpbmcgYSB2YWx1ZVxuICogdG8gdHJ1ZSBtZWFucyB0aGF0IGFueSBTQVMgd2hpY2ggdXNlcyB0aGVzZSBwZXJtaXNzaW9ucyB3aWxsIGdyYW50IGFjY2VzcyB0byB0aGF0IHNlcnZpY2UuIE9uY2UgYWxsIHRoZVxuICogdmFsdWVzIGFyZSBzZXQsIHRoaXMgc2hvdWxkIGJlIHNlcmlhbGl6ZWQgd2l0aCB0b1N0cmluZyBhbmQgc2V0IGFzIHRoZSBzZXJ2aWNlcyBmaWVsZCBvbiBhblxuICoge0BsaW5rIEFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXN9IG9iamVjdC4gSXQgaXMgcG9zc2libGUgdG8gY29uc3RydWN0IHRoZSBzZXJ2aWNlcyBzdHJpbmcgd2l0aG91dCB0aGlzIGNsYXNzLCBidXRcbiAqIHRoZSBvcmRlciBvZiB0aGUgc2VydmljZXMgaXMgcGFydGljdWxhciBhbmQgdGhpcyBjbGFzcyBndWFyYW50ZWVzIGNvcnJlY3RuZXNzLlxuICovXG5jbGFzcyBBY2NvdW50U0FTU2VydmljZXMge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAvKipcbiAgICAgICAgICogUGVybWlzc2lvbiB0byBhY2Nlc3MgYmxvYiByZXNvdXJjZXMgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuYmxvYiA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogUGVybWlzc2lvbiB0byBhY2Nlc3MgZmlsZSByZXNvdXJjZXMgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZmlsZSA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogUGVybWlzc2lvbiB0byBhY2Nlc3MgcXVldWUgcmVzb3VyY2VzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnF1ZXVlID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQZXJtaXNzaW9uIHRvIGFjY2VzcyB0YWJsZSByZXNvdXJjZXMgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudGFibGUgPSBmYWxzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiB7QGxpbmsgQWNjb3VudFNBU1NlcnZpY2VzfSBmcm9tIHRoZSBzcGVjaWZpZWQgc2VydmljZXMgc3RyaW5nLiBUaGlzIG1ldGhvZCB3aWxsIHRocm93IGFuXG4gICAgICogRXJyb3IgaWYgaXQgZW5jb3VudGVycyBhIGNoYXJhY3RlciB0aGF0IGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSB2YWxpZCBzZXJ2aWNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHNlcnZpY2VzIC1cbiAgICAgKi9cbiAgICBzdGF0aWMgcGFyc2Uoc2VydmljZXMpIHtcbiAgICAgICAgY29uc3QgYWNjb3VudFNBU1NlcnZpY2VzID0gbmV3IEFjY291bnRTQVNTZXJ2aWNlcygpO1xuICAgICAgICBmb3IgKGNvbnN0IGMgb2Ygc2VydmljZXMpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoYykge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJiXCI6XG4gICAgICAgICAgICAgICAgICAgIGFjY291bnRTQVNTZXJ2aWNlcy5ibG9iID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImZcIjpcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudFNBU1NlcnZpY2VzLmZpbGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwicVwiOlxuICAgICAgICAgICAgICAgICAgICBhY2NvdW50U0FTU2VydmljZXMucXVldWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwidFwiOlxuICAgICAgICAgICAgICAgICAgICBhY2NvdW50U0FTU2VydmljZXMudGFibGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgSW52YWxpZCBzZXJ2aWNlIGNoYXJhY3RlcjogJHtjfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2NvdW50U0FTU2VydmljZXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIHRoZSBnaXZlbiBzZXJ2aWNlcyB0byBhIHN0cmluZy5cbiAgICAgKlxuICAgICAqL1xuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICBjb25zdCBzZXJ2aWNlcyA9IFtdO1xuICAgICAgICBpZiAodGhpcy5ibG9iKSB7XG4gICAgICAgICAgICBzZXJ2aWNlcy5wdXNoKFwiYlwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy50YWJsZSkge1xuICAgICAgICAgICAgc2VydmljZXMucHVzaChcInRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucXVldWUpIHtcbiAgICAgICAgICAgIHNlcnZpY2VzLnB1c2goXCJxXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZpbGUpIHtcbiAgICAgICAgICAgIHNlcnZpY2VzLnB1c2goXCJmXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXJ2aWNlcy5qb2luKFwiXCIpO1xuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIE9OTFkgQVZBSUxBQkxFIElOIE5PREUuSlMgUlVOVElNRS5cbiAqXG4gKiBHZW5lcmF0ZXMgYSB7QGxpbmsgU0FTUXVlcnlQYXJhbWV0ZXJzfSBvYmplY3Qgd2hpY2ggY29udGFpbnMgYWxsIFNBUyBxdWVyeSBwYXJhbWV0ZXJzIG5lZWRlZCB0byBtYWtlIGFuIGFjdHVhbFxuICogUkVTVCByZXF1ZXN0LlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2NvbnN0cnVjdGluZy1hbi1hY2NvdW50LXNhc1xuICpcbiAqIEBwYXJhbSBhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzIC1cbiAqIEBwYXJhbSBzaGFyZWRLZXlDcmVkZW50aWFsIC1cbiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGVBY2NvdW50U0FTUXVlcnlQYXJhbWV0ZXJzKGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMsIHNoYXJlZEtleUNyZWRlbnRpYWwpIHtcbiAgICByZXR1cm4gZ2VuZXJhdGVBY2NvdW50U0FTUXVlcnlQYXJhbWV0ZXJzSW50ZXJuYWwoYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcywgc2hhcmVkS2V5Q3JlZGVudGlhbClcbiAgICAgICAgLnNhc1F1ZXJ5UGFyYW1ldGVycztcbn1cbmZ1bmN0aW9uIGdlbmVyYXRlQWNjb3VudFNBU1F1ZXJ5UGFyYW1ldGVyc0ludGVybmFsKGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMsIHNoYXJlZEtleUNyZWRlbnRpYWwpIHtcbiAgICBjb25zdCB2ZXJzaW9uID0gYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uXG4gICAgICAgID8gYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uXG4gICAgICAgIDogU0VSVklDRV9WRVJTSU9OO1xuICAgIGlmIChhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zICYmXG4gICAgICAgIGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMuc2V0SW1tdXRhYmlsaXR5UG9saWN5ICYmXG4gICAgICAgIHZlcnNpb24gPCBcIjIwMjAtMDgtMDRcIikge1xuICAgICAgICB0aHJvdyBSYW5nZUVycm9yKFwiJ3ZlcnNpb24nIG11c3QgYmUgPj0gJzIwMjAtMDgtMDQnIHdoZW4gcHJvdmlkZWQgJ2knIHBlcm1pc3Npb24uXCIpO1xuICAgIH1cbiAgICBpZiAoYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucyAmJlxuICAgICAgICBhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zLmRlbGV0ZVZlcnNpb24gJiZcbiAgICAgICAgdmVyc2lvbiA8IFwiMjAxOS0xMC0xMFwiKSB7XG4gICAgICAgIHRocm93IFJhbmdlRXJyb3IoXCIndmVyc2lvbicgbXVzdCBiZSA+PSAnMjAxOS0xMC0xMCcgd2hlbiBwcm92aWRlZCAneCcgcGVybWlzc2lvbi5cIik7XG4gICAgfVxuICAgIGlmIChhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zICYmXG4gICAgICAgIGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMucGVybWFuZW50RGVsZXRlICYmXG4gICAgICAgIHZlcnNpb24gPCBcIjIwMTktMTAtMTBcIikge1xuICAgICAgICB0aHJvdyBSYW5nZUVycm9yKFwiJ3ZlcnNpb24nIG11c3QgYmUgPj0gJzIwMTktMTAtMTAnIHdoZW4gcHJvdmlkZWQgJ3knIHBlcm1pc3Npb24uXCIpO1xuICAgIH1cbiAgICBpZiAoYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucyAmJlxuICAgICAgICBhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zLnRhZyAmJlxuICAgICAgICB2ZXJzaW9uIDwgXCIyMDE5LTEyLTEyXCIpIHtcbiAgICAgICAgdGhyb3cgUmFuZ2VFcnJvcihcIid2ZXJzaW9uJyBtdXN0IGJlID49ICcyMDE5LTEyLTEyJyB3aGVuIHByb3ZpZGVkICd0JyBwZXJtaXNzaW9uLlwiKTtcbiAgICB9XG4gICAgaWYgKGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMgJiZcbiAgICAgICAgYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucy5maWx0ZXIgJiZcbiAgICAgICAgdmVyc2lvbiA8IFwiMjAxOS0xMi0xMlwiKSB7XG4gICAgICAgIHRocm93IFJhbmdlRXJyb3IoXCIndmVyc2lvbicgbXVzdCBiZSA+PSAnMjAxOS0xMi0xMicgd2hlbiBwcm92aWRlZCAnZicgcGVybWlzc2lvbi5cIik7XG4gICAgfVxuICAgIGlmIChhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLmVuY3J5cHRpb25TY29wZSAmJiB2ZXJzaW9uIDwgXCIyMDIwLTEyLTA2XCIpIHtcbiAgICAgICAgdGhyb3cgUmFuZ2VFcnJvcihcIid2ZXJzaW9uJyBtdXN0IGJlID49ICcyMDIwLTEyLTA2JyB3aGVuIHByb3ZpZGVkICdlbmNyeXB0aW9uU2NvcGUnIGluIFNBUy5cIik7XG4gICAgfVxuICAgIGNvbnN0IHBhcnNlZFBlcm1pc3Npb25zID0gQWNjb3VudFNBU1Blcm1pc3Npb25zLnBhcnNlKGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMudG9TdHJpbmcoKSk7XG4gICAgY29uc3QgcGFyc2VkU2VydmljZXMgPSBBY2NvdW50U0FTU2VydmljZXMucGFyc2UoYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5zZXJ2aWNlcykudG9TdHJpbmcoKTtcbiAgICBjb25zdCBwYXJzZWRSZXNvdXJjZVR5cGVzID0gQWNjb3VudFNBU1Jlc291cmNlVHlwZXMucGFyc2UoYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5yZXNvdXJjZVR5cGVzKS50b1N0cmluZygpO1xuICAgIGxldCBzdHJpbmdUb1NpZ247XG4gICAgaWYgKHZlcnNpb24gPj0gXCIyMDIwLTEyLTA2XCIpIHtcbiAgICAgICAgc3RyaW5nVG9TaWduID0gW1xuICAgICAgICAgICAgc2hhcmVkS2V5Q3JlZGVudGlhbC5hY2NvdW50TmFtZSxcbiAgICAgICAgICAgIHBhcnNlZFBlcm1pc3Npb25zLFxuICAgICAgICAgICAgcGFyc2VkU2VydmljZXMsXG4gICAgICAgICAgICBwYXJzZWRSZXNvdXJjZVR5cGVzLFxuICAgICAgICAgICAgYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5zdGFydHNPblxuICAgICAgICAgICAgICAgID8gdHJ1bmNhdGVkSVNPODA2MURhdGUoYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5zdGFydHNPbiwgZmFsc2UpXG4gICAgICAgICAgICAgICAgOiBcIlwiLFxuICAgICAgICAgICAgdHJ1bmNhdGVkSVNPODA2MURhdGUoYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5leHBpcmVzT24sIGZhbHNlKSxcbiAgICAgICAgICAgIGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMuaXBSYW5nZSA/IGlwUmFuZ2VUb1N0cmluZyhhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLmlwUmFuZ2UpIDogXCJcIixcbiAgICAgICAgICAgIGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMucHJvdG9jb2wgPyBhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLnByb3RvY29sIDogXCJcIixcbiAgICAgICAgICAgIHZlcnNpb24sXG4gICAgICAgICAgICBhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLmVuY3J5cHRpb25TY29wZSA/IGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMuZW5jcnlwdGlvblNjb3BlIDogXCJcIixcbiAgICAgICAgICAgIFwiXCIsIC8vIEFjY291bnQgU0FTIHJlcXVpcmVzIGFuIGFkZGl0aW9uYWwgbmV3bGluZSBjaGFyYWN0ZXJcbiAgICAgICAgXS5qb2luKFwiXFxuXCIpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgc3RyaW5nVG9TaWduID0gW1xuICAgICAgICAgICAgc2hhcmVkS2V5Q3JlZGVudGlhbC5hY2NvdW50TmFtZSxcbiAgICAgICAgICAgIHBhcnNlZFBlcm1pc3Npb25zLFxuICAgICAgICAgICAgcGFyc2VkU2VydmljZXMsXG4gICAgICAgICAgICBwYXJzZWRSZXNvdXJjZVR5cGVzLFxuICAgICAgICAgICAgYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5zdGFydHNPblxuICAgICAgICAgICAgICAgID8gdHJ1bmNhdGVkSVNPODA2MURhdGUoYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5zdGFydHNPbiwgZmFsc2UpXG4gICAgICAgICAgICAgICAgOiBcIlwiLFxuICAgICAgICAgICAgdHJ1bmNhdGVkSVNPODA2MURhdGUoYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5leHBpcmVzT24sIGZhbHNlKSxcbiAgICAgICAgICAgIGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMuaXBSYW5nZSA/IGlwUmFuZ2VUb1N0cmluZyhhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLmlwUmFuZ2UpIDogXCJcIixcbiAgICAgICAgICAgIGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMucHJvdG9jb2wgPyBhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLnByb3RvY29sIDogXCJcIixcbiAgICAgICAgICAgIHZlcnNpb24sXG4gICAgICAgICAgICBcIlwiLCAvLyBBY2NvdW50IFNBUyByZXF1aXJlcyBhbiBhZGRpdGlvbmFsIG5ld2xpbmUgY2hhcmFjdGVyXG4gICAgICAgIF0uam9pbihcIlxcblwiKTtcbiAgICB9XG4gICAgY29uc3Qgc2lnbmF0dXJlID0gc2hhcmVkS2V5Q3JlZGVudGlhbC5jb21wdXRlSE1BQ1NIQTI1NihzdHJpbmdUb1NpZ24pO1xuICAgIHJldHVybiB7XG4gICAgICAgIHNhc1F1ZXJ5UGFyYW1ldGVyczogbmV3IFNBU1F1ZXJ5UGFyYW1ldGVycyh2ZXJzaW9uLCBzaWduYXR1cmUsIHBhcnNlZFBlcm1pc3Npb25zLnRvU3RyaW5nKCksIHBhcnNlZFNlcnZpY2VzLCBwYXJzZWRSZXNvdXJjZVR5cGVzLCBhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLnByb3RvY29sLCBhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLnN0YXJ0c09uLCBhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLmV4cGlyZXNPbiwgYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5pcFJhbmdlLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMuZW5jcnlwdGlvblNjb3BlKSxcbiAgICAgICAgc3RyaW5nVG9TaWduOiBzdHJpbmdUb1NpZ24sXG4gICAgfTtcbn1cblxuLyoqXG4gKiBBIEJsb2JTZXJ2aWNlQ2xpZW50IHJlcHJlc2VudHMgYSBDbGllbnQgdG8gdGhlIEF6dXJlIFN0b3JhZ2UgQmxvYiBzZXJ2aWNlIGFsbG93aW5nIHlvdVxuICogdG8gbWFuaXB1bGF0ZSBibG9iIGNvbnRhaW5lcnMuXG4gKi9cbmNsYXNzIEJsb2JTZXJ2aWNlQ2xpZW50IGV4dGVuZHMgU3RvcmFnZUNsaWVudCB7XG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIEJsb2JTZXJ2aWNlQ2xpZW50IGZyb20gY29ubmVjdGlvbiBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29ubmVjdGlvblN0cmluZyAtIEFjY291bnQgY29ubmVjdGlvbiBzdHJpbmcgb3IgYSBTQVMgY29ubmVjdGlvbiBzdHJpbmcgb2YgYW4gQXp1cmUgc3RvcmFnZSBhY2NvdW50LlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsgTm90ZSAtIEFjY291bnQgY29ubmVjdGlvbiBzdHJpbmcgY2FuIG9ubHkgYmUgdXNlZCBpbiBOT0RFLkpTIHJ1bnRpbWUuIF1cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY2NvdW50IGNvbm5lY3Rpb24gc3RyaW5nIGV4YW1wbGUgLVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBEZWZhdWx0RW5kcG9pbnRzUHJvdG9jb2w9aHR0cHM7QWNjb3VudE5hbWU9bXlhY2NvdW50O0FjY291bnRLZXk9YWNjb3VudEtleTtFbmRwb2ludFN1ZmZpeD1jb3JlLndpbmRvd3MubmV0YFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNBUyBjb25uZWN0aW9uIHN0cmluZyBleGFtcGxlIC1cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgQmxvYkVuZHBvaW50PWh0dHBzOi8vbXlhY2NvdW50LmJsb2IuY29yZS53aW5kb3dzLm5ldC87UXVldWVFbmRwb2ludD1odHRwczovL215YWNjb3VudC5xdWV1ZS5jb3JlLndpbmRvd3MubmV0LztGaWxlRW5kcG9pbnQ9aHR0cHM6Ly9teWFjY291bnQuZmlsZS5jb3JlLndpbmRvd3MubmV0LztUYWJsZUVuZHBvaW50PWh0dHBzOi8vbXlhY2NvdW50LnRhYmxlLmNvcmUud2luZG93cy5uZXQvO1NoYXJlZEFjY2Vzc1NpZ25hdHVyZT1zYXNTdHJpbmdgXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbC4gT3B0aW9ucyB0byBjb25maWd1cmUgdGhlIEhUVFAgcGlwZWxpbmUuXG4gICAgICovXG4gICAgc3RhdGljIGZyb21Db25uZWN0aW9uU3RyaW5nKGNvbm5lY3Rpb25TdHJpbmcsIFxuICAgIC8vIExlZ2FjeSwgbm8gZml4IGZvciBlc2xpbnQgZXJyb3Igd2l0aG91dCBicmVha2luZy4gRGlzYWJsZSBpdCBmb3IgdGhpcyBpbnRlcmZhY2UuXG4gICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhenVyZS9henVyZS1zZGsvdHMtbmFtaW5nLW9wdGlvbnMqL1xuICAgIG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgICAgIGNvbnN0IGV4dHJhY3RlZENyZWRzID0gZXh0cmFjdENvbm5lY3Rpb25TdHJpbmdQYXJ0cyhjb25uZWN0aW9uU3RyaW5nKTtcbiAgICAgICAgaWYgKGV4dHJhY3RlZENyZWRzLmtpbmQgPT09IFwiQWNjb3VudENvbm5TdHJpbmdcIikge1xuICAgICAgICAgICAgaWYgKGNvcmVVdGlsLmlzTm9kZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNoYXJlZEtleUNyZWRlbnRpYWwgPSBuZXcgU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwoZXh0cmFjdGVkQ3JlZHMuYWNjb3VudE5hbWUsIGV4dHJhY3RlZENyZWRzLmFjY291bnRLZXkpO1xuICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucy5wcm94eU9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5wcm94eU9wdGlvbnMgPSBjb3JlUmVzdFBpcGVsaW5lLmdldERlZmF1bHRQcm94eVNldHRpbmdzKGV4dHJhY3RlZENyZWRzLnByb3h5VXJpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcGlwZWxpbmUgPSBuZXdQaXBlbGluZShzaGFyZWRLZXlDcmVkZW50aWFsLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEJsb2JTZXJ2aWNlQ2xpZW50KGV4dHJhY3RlZENyZWRzLnVybCwgcGlwZWxpbmUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQWNjb3VudCBjb25uZWN0aW9uIHN0cmluZyBpcyBvbmx5IHN1cHBvcnRlZCBpbiBOb2RlLmpzIGVudmlyb25tZW50XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGV4dHJhY3RlZENyZWRzLmtpbmQgPT09IFwiU0FTQ29ublN0cmluZ1wiKSB7XG4gICAgICAgICAgICBjb25zdCBwaXBlbGluZSA9IG5ld1BpcGVsaW5lKG5ldyBBbm9ueW1vdXNDcmVkZW50aWFsKCksIG9wdGlvbnMpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBCbG9iU2VydmljZUNsaWVudChleHRyYWN0ZWRDcmVkcy51cmwgKyBcIj9cIiArIGV4dHJhY3RlZENyZWRzLmFjY291bnRTYXMsIHBpcGVsaW5lKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbm5lY3Rpb24gc3RyaW5nIG11c3QgYmUgZWl0aGVyIGFuIEFjY291bnQgY29ubmVjdGlvbiBzdHJpbmcgb3IgYSBTQVMgY29ubmVjdGlvbiBzdHJpbmdcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3RydWN0b3IodXJsLCBjcmVkZW50aWFsT3JQaXBlbGluZSwgXG4gICAgLy8gTGVnYWN5LCBubyBmaXggZm9yIGVzbGludCBlcnJvciB3aXRob3V0IGJyZWFraW5nLiBEaXNhYmxlIGl0IGZvciB0aGlzIGludGVyZmFjZS5cbiAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGF6dXJlL2F6dXJlLXNkay90cy1uYW1pbmctb3B0aW9ucyovXG4gICAgb3B0aW9ucykge1xuICAgICAgICBsZXQgcGlwZWxpbmU7XG4gICAgICAgIGlmIChpc1BpcGVsaW5lTGlrZShjcmVkZW50aWFsT3JQaXBlbGluZSkpIHtcbiAgICAgICAgICAgIHBpcGVsaW5lID0gY3JlZGVudGlhbE9yUGlwZWxpbmU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoKGNvcmVVdGlsLmlzTm9kZSAmJiBjcmVkZW50aWFsT3JQaXBlbGluZSBpbnN0YW5jZW9mIFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsKSB8fFxuICAgICAgICAgICAgY3JlZGVudGlhbE9yUGlwZWxpbmUgaW5zdGFuY2VvZiBBbm9ueW1vdXNDcmVkZW50aWFsIHx8XG4gICAgICAgICAgICBjb3JlQXV0aC5pc1Rva2VuQ3JlZGVudGlhbChjcmVkZW50aWFsT3JQaXBlbGluZSkpIHtcbiAgICAgICAgICAgIHBpcGVsaW5lID0gbmV3UGlwZWxpbmUoY3JlZGVudGlhbE9yUGlwZWxpbmUsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gVGhlIHNlY29uZCBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkLiBVc2UgYW5vbnltb3VzIGNyZWRlbnRpYWxcbiAgICAgICAgICAgIHBpcGVsaW5lID0gbmV3UGlwZWxpbmUobmV3IEFub255bW91c0NyZWRlbnRpYWwoKSwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIodXJsLCBwaXBlbGluZSk7XG4gICAgICAgIHRoaXMuc2VydmljZUNvbnRleHQgPSB0aGlzLnN0b3JhZ2VDbGllbnRDb250ZXh0LnNlcnZpY2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSB7QGxpbmsgQ29udGFpbmVyQ2xpZW50fSBvYmplY3RcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb250YWluZXJOYW1lIC0gQSBjb250YWluZXIgbmFtZVxuICAgICAqIEByZXR1cm5zIEEgbmV3IENvbnRhaW5lckNsaWVudCBvYmplY3QgZm9yIHRoZSBnaXZlbiBjb250YWluZXIgbmFtZS5cbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNhZ2U6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnN0IGNvbnRhaW5lckNsaWVudCA9IGJsb2JTZXJ2aWNlQ2xpZW50LmdldENvbnRhaW5lckNsaWVudChcIjxjb250YWluZXIgbmFtZT5cIik7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgZ2V0Q29udGFpbmVyQ2xpZW50KGNvbnRhaW5lck5hbWUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb250YWluZXJDbGllbnQoYXBwZW5kVG9VUkxQYXRoKHRoaXMudXJsLCBlbmNvZGVVUklDb21wb25lbnQoY29udGFpbmVyTmFtZSkpLCB0aGlzLnBpcGVsaW5lKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgQmxvYiBjb250YWluZXIuIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2NyZWF0ZS1jb250YWluZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb250YWluZXJOYW1lIC0gTmFtZSBvZiB0aGUgY29udGFpbmVyIHRvIGNyZWF0ZS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gY29uZmlndXJlIENvbnRhaW5lciBDcmVhdGUgb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIENvbnRhaW5lciBjcmVhdGlvbiByZXNwb25zZSBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgY29udGFpbmVyIGNsaWVudC5cbiAgICAgKi9cbiAgICBhc3luYyBjcmVhdGVDb250YWluZXIoY29udGFpbmVyTmFtZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYlNlcnZpY2VDbGllbnQtY3JlYXRlQ29udGFpbmVyXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyQ2xpZW50ID0gdGhpcy5nZXRDb250YWluZXJDbGllbnQoY29udGFpbmVyTmFtZSk7XG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJDcmVhdGVSZXNwb25zZSA9IGF3YWl0IGNvbnRhaW5lckNsaWVudC5jcmVhdGUodXBkYXRlZE9wdGlvbnMpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBjb250YWluZXJDbGllbnQsXG4gICAgICAgICAgICAgICAgY29udGFpbmVyQ3JlYXRlUmVzcG9uc2UsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVsZXRlcyBhIEJsb2IgY29udGFpbmVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIGNvbnRhaW5lck5hbWUgLSBOYW1lIG9mIHRoZSBjb250YWluZXIgdG8gZGVsZXRlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBjb25maWd1cmUgQ29udGFpbmVyIERlbGV0ZSBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgQ29udGFpbmVyIGRlbGV0aW9uIHJlc3BvbnNlLlxuICAgICAqL1xuICAgIGFzeW5jIGRlbGV0ZUNvbnRhaW5lcihjb250YWluZXJOYW1lLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iU2VydmljZUNsaWVudC1kZWxldGVDb250YWluZXJcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJDbGllbnQgPSB0aGlzLmdldENvbnRhaW5lckNsaWVudChjb250YWluZXJOYW1lKTtcbiAgICAgICAgICAgIHJldHVybiBjb250YWluZXJDbGllbnQuZGVsZXRlKHVwZGF0ZWRPcHRpb25zKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlc3RvcmUgYSBwcmV2aW91c2x5IGRlbGV0ZWQgQmxvYiBjb250YWluZXIuXG4gICAgICogVGhpcyBBUEkgaXMgb25seSBmdW5jdGlvbmFsIGlmIENvbnRhaW5lciBTb2Z0IERlbGV0ZSBpcyBlbmFibGVkIGZvciB0aGUgc3RvcmFnZSBhY2NvdW50IGFzc29jaWF0ZWQgd2l0aCB0aGUgY29udGFpbmVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRlbGV0ZWRDb250YWluZXJOYW1lIC0gTmFtZSBvZiB0aGUgcHJldmlvdXNseSBkZWxldGVkIGNvbnRhaW5lci5cbiAgICAgKiBAcGFyYW0gZGVsZXRlZENvbnRhaW5lclZlcnNpb24gLSBWZXJzaW9uIG9mIHRoZSBwcmV2aW91c2x5IGRlbGV0ZWQgY29udGFpbmVyLCB1c2VkIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHRoZSBkZWxldGVkIGNvbnRhaW5lci5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gY29uZmlndXJlIENvbnRhaW5lciBSZXN0b3JlIG9wZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyBDb250YWluZXIgZGVsZXRpb24gcmVzcG9uc2UuXG4gICAgICovXG4gICAgYXN5bmMgdW5kZWxldGVDb250YWluZXIoZGVsZXRlZENvbnRhaW5lck5hbWUsIGRlbGV0ZWRDb250YWluZXJWZXJzaW9uLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iU2VydmljZUNsaWVudC11bmRlbGV0ZUNvbnRhaW5lclwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lckNsaWVudCA9IHRoaXMuZ2V0Q29udGFpbmVyQ2xpZW50KG9wdGlvbnMuZGVzdGluYXRpb25Db250YWluZXJOYW1lIHx8IGRlbGV0ZWRDb250YWluZXJOYW1lKTtcbiAgICAgICAgICAgIC8vIEhhY2sgdG8gYWNjZXNzIGEgcHJvdGVjdGVkIG1lbWJlci5cbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lckNvbnRleHQgPSBjb250YWluZXJDbGllbnRbXCJzdG9yYWdlQ2xpZW50Q29udGV4dFwiXS5jb250YWluZXI7XG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJVbmRlbGV0ZVJlc3BvbnNlID0gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgY29udGFpbmVyQ29udGV4dC5yZXN0b3JlKHtcbiAgICAgICAgICAgICAgICBkZWxldGVkQ29udGFpbmVyTmFtZSxcbiAgICAgICAgICAgICAgICBkZWxldGVkQ29udGFpbmVyVmVyc2lvbixcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICByZXR1cm4geyBjb250YWluZXJDbGllbnQsIGNvbnRhaW5lclVuZGVsZXRlUmVzcG9uc2UgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlbmFtZSBhbiBleGlzdGluZyBCbG9iIENvbnRhaW5lci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzb3VyY2VDb250YWluZXJOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHNvdXJjZSBjb250YWluZXIuXG4gICAgICogQHBhcmFtIGRlc3RpbmF0aW9uQ29udGFpbmVyTmFtZSAtIFRoZSBuZXcgbmFtZSBvZiB0aGUgY29udGFpbmVyLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBjb25maWd1cmUgQ29udGFpbmVyIFJlbmFtZSBvcGVyYXRpb24uXG4gICAgICovXG4gICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudCAqL1xuICAgIC8vIEB0cy1pZ25vcmUgTmVlZCB0byBoaWRlIHRoaXMgaW50ZXJmYWNlIGZvciBub3cuIE1ha2UgaXQgcHVibGljIGFuZCB0dXJuIG9uIHRoZSBsaXZlIHRlc3RzIGZvciBpdCB3aGVuIHRoZSBzZXJ2aWNlIGlzIHJlYWR5LlxuICAgIGFzeW5jIHJlbmFtZUNvbnRhaW5lcihzb3VyY2VDb250YWluZXJOYW1lLCBkZXN0aW5hdGlvbkNvbnRhaW5lck5hbWUsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JTZXJ2aWNlQ2xpZW50LXJlbmFtZUNvbnRhaW5lclwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lckNsaWVudCA9IHRoaXMuZ2V0Q29udGFpbmVyQ2xpZW50KGRlc3RpbmF0aW9uQ29udGFpbmVyTmFtZSk7XG4gICAgICAgICAgICAvLyBIYWNrIHRvIGFjY2VzcyBhIHByb3RlY3RlZCBtZW1iZXIuXG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJDb250ZXh0ID0gY29udGFpbmVyQ2xpZW50W1wic3RvcmFnZUNsaWVudENvbnRleHRcIl0uY29udGFpbmVyO1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyUmVuYW1lUmVzcG9uc2UgPSBhc3NlcnRSZXNwb25zZShhd2FpdCBjb250YWluZXJDb250ZXh0LnJlbmFtZShzb3VyY2VDb250YWluZXJOYW1lLCBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHVwZGF0ZWRPcHRpb25zKSwgeyBzb3VyY2VMZWFzZUlkOiAoX2EgPSBvcHRpb25zLnNvdXJjZUNvbmRpdGlvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmxlYXNlSWQgfSkpKTtcbiAgICAgICAgICAgIHJldHVybiB7IGNvbnRhaW5lckNsaWVudCwgY29udGFpbmVyUmVuYW1lUmVzcG9uc2UgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHByb3BlcnRpZXMgb2YgYSBzdG9yYWdlIGFjY291bnTigJlzIEJsb2Igc2VydmljZSwgaW5jbHVkaW5nIHByb3BlcnRpZXNcbiAgICAgKiBmb3IgU3RvcmFnZSBBbmFseXRpY3MgYW5kIENPUlMgKENyb3NzLU9yaWdpbiBSZXNvdXJjZSBTaGFyaW5nKSBydWxlcy5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9nZXQtYmxvYi1zZXJ2aWNlLXByb3BlcnRpZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB0aGUgU2VydmljZSBHZXQgUHJvcGVydGllcyBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgdGhlIFNlcnZpY2UgR2V0IFByb3BlcnRpZXMgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGdldFByb3BlcnRpZXMob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYlNlcnZpY2VDbGllbnQtZ2V0UHJvcGVydGllc1wiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLnNlcnZpY2VDb250ZXh0LmdldFByb3BlcnRpZXMoe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldHMgcHJvcGVydGllcyBmb3IgYSBzdG9yYWdlIGFjY291bnTigJlzIEJsb2Igc2VydmljZSBlbmRwb2ludCwgaW5jbHVkaW5nIHByb3BlcnRpZXNcbiAgICAgKiBmb3IgU3RvcmFnZSBBbmFseXRpY3MsIENPUlMgKENyb3NzLU9yaWdpbiBSZXNvdXJjZSBTaGFyaW5nKSBydWxlcyBhbmQgc29mdCBkZWxldGUgc2V0dGluZ3MuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvc2V0LWJsb2Itc2VydmljZS1wcm9wZXJ0aWVzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydGllcyAtXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHRoZSBTZXJ2aWNlIFNldCBQcm9wZXJ0aWVzIG9wZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyBSZXNwb25zZSBkYXRhIGZvciB0aGUgU2VydmljZSBTZXQgUHJvcGVydGllcyBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgc2V0UHJvcGVydGllcyhwcm9wZXJ0aWVzLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iU2VydmljZUNsaWVudC1zZXRQcm9wZXJ0aWVzXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuc2VydmljZUNvbnRleHQuc2V0UHJvcGVydGllcyhwcm9wZXJ0aWVzLCB7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHN0YXRpc3RpY3MgcmVsYXRlZCB0byByZXBsaWNhdGlvbiBmb3IgdGhlIEJsb2Igc2VydmljZS4gSXQgaXMgb25seVxuICAgICAqIGF2YWlsYWJsZSBvbiB0aGUgc2Vjb25kYXJ5IGxvY2F0aW9uIGVuZHBvaW50IHdoZW4gcmVhZC1hY2Nlc3MgZ2VvLXJlZHVuZGFudFxuICAgICAqIHJlcGxpY2F0aW9uIGlzIGVuYWJsZWQgZm9yIHRoZSBzdG9yYWdlIGFjY291bnQuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvZ2V0LWJsb2Itc2VydmljZS1zdGF0c1xuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHRoZSBTZXJ2aWNlIEdldCBTdGF0aXN0aWNzIG9wZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyBSZXNwb25zZSBkYXRhIGZvciB0aGUgU2VydmljZSBHZXQgU3RhdGlzdGljcyBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgZ2V0U3RhdGlzdGljcyhvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iU2VydmljZUNsaWVudC1nZXRTdGF0aXN0aWNzXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuc2VydmljZUNvbnRleHQuZ2V0U3RhdGlzdGljcyh7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIEdldCBBY2NvdW50IEluZm9ybWF0aW9uIG9wZXJhdGlvbiByZXR1cm5zIHRoZSBza3UgbmFtZSBhbmQgYWNjb3VudCBraW5kXG4gICAgICogZm9yIHRoZSBzcGVjaWZpZWQgYWNjb3VudC5cbiAgICAgKiBUaGUgR2V0IEFjY291bnQgSW5mb3JtYXRpb24gb3BlcmF0aW9uIGlzIGF2YWlsYWJsZSBvbiBzZXJ2aWNlIHZlcnNpb25zIGJlZ2lubmluZ1xuICAgICAqIHdpdGggdmVyc2lvbiAyMDE4LTAzLTI4LlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2dldC1hY2NvdW50LWluZm9ybWF0aW9uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gdGhlIFNlcnZpY2UgR2V0IEFjY291bnQgSW5mbyBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgdGhlIFNlcnZpY2UgR2V0IEFjY291bnQgSW5mbyBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgZ2V0QWNjb3VudEluZm8ob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYlNlcnZpY2VDbGllbnQtZ2V0QWNjb3VudEluZm9cIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5zZXJ2aWNlQ29udGV4dC5nZXRBY2NvdW50SW5mbyh7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIGxpc3Qgb2YgdGhlIGNvbnRhaW5lcnMgdW5kZXIgdGhlIHNwZWNpZmllZCBhY2NvdW50LlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2xpc3QtY29udGFpbmVyczJcbiAgICAgKlxuICAgICAqIEBwYXJhbSBtYXJrZXIgLSBBIHN0cmluZyB2YWx1ZSB0aGF0IGlkZW50aWZpZXMgdGhlIHBvcnRpb24gb2ZcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBsaXN0IG9mIGNvbnRhaW5lcnMgdG8gYmUgcmV0dXJuZWQgd2l0aCB0aGUgbmV4dCBsaXN0aW5nIG9wZXJhdGlvbi4gVGhlXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gcmV0dXJucyB0aGUgY29udGludWF0aW9uVG9rZW4gdmFsdWUgd2l0aGluIHRoZSByZXNwb25zZSBib2R5IGlmIHRoZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGluZyBvcGVyYXRpb24gZGlkIG5vdCByZXR1cm4gYWxsIGNvbnRhaW5lcnMgcmVtYWluaW5nIHRvIGJlIGxpc3RlZFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgY3VycmVudCBwYWdlLiBUaGUgY29udGludWF0aW9uVG9rZW4gdmFsdWUgY2FuIGJlIHVzZWQgYXMgdGhlIHZhbHVlIGZvclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1hcmtlciBwYXJhbWV0ZXIgaW4gYSBzdWJzZXF1ZW50IGNhbGwgdG8gcmVxdWVzdCB0aGUgbmV4dCBwYWdlIG9mIGxpc3RcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLiBUaGUgbWFya2VyIHZhbHVlIGlzIG9wYXF1ZSB0byB0aGUgY2xpZW50LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB0aGUgU2VydmljZSBMaXN0IENvbnRhaW5lciBTZWdtZW50IG9wZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyBSZXNwb25zZSBkYXRhIGZvciB0aGUgU2VydmljZSBMaXN0IENvbnRhaW5lciBTZWdtZW50IG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBsaXN0Q29udGFpbmVyc1NlZ21lbnQobWFya2VyLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iU2VydmljZUNsaWVudC1saXN0Q29udGFpbmVyc1NlZ21lbnRcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5zZXJ2aWNlQ29udGV4dC5saXN0Q29udGFpbmVyc1NlZ21lbnQoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHsgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsIG1hcmtlciB9LCBvcHRpb25zKSwgeyBpbmNsdWRlOiB0eXBlb2Ygb3B0aW9ucy5pbmNsdWRlID09PSBcInN0cmluZ1wiID8gW29wdGlvbnMuaW5jbHVkZV0gOiBvcHRpb25zLmluY2x1ZGUsIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyB9KSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIEZpbHRlciBCbG9icyBvcGVyYXRpb24gZW5hYmxlcyBjYWxsZXJzIHRvIGxpc3QgYmxvYnMgYWNyb3NzIGFsbCBjb250YWluZXJzIHdob3NlIHRhZ3NcbiAgICAgKiBtYXRjaCBhIGdpdmVuIHNlYXJjaCBleHByZXNzaW9uLiBGaWx0ZXIgYmxvYnMgc2VhcmNoZXMgYWNyb3NzIGFsbCBjb250YWluZXJzIHdpdGhpbiBhXG4gICAgICogc3RvcmFnZSBhY2NvdW50IGJ1dCBjYW4gYmUgc2NvcGVkIHdpdGhpbiB0aGUgZXhwcmVzc2lvbiB0byBhIHNpbmdsZSBjb250YWluZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGFnRmlsdGVyU3FsRXhwcmVzc2lvbiAtIFRoZSB3aGVyZSBwYXJhbWV0ZXIgZW5hYmxlcyB0aGUgY2FsbGVyIHRvIHF1ZXJ5IGJsb2JzIHdob3NlIHRhZ3MgbWF0Y2ggYSBnaXZlbiBleHByZXNzaW9uLlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBnaXZlbiBleHByZXNzaW9uIG11c3QgZXZhbHVhdGUgdG8gdHJ1ZSBmb3IgYSBibG9iIHRvIGJlIHJldHVybmVkIGluIHRoZSByZXN1bHRzLlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZVtPRGF0YSAtIEFCTkZdIGZpbHRlciBzeW50YXggcnVsZSBkZWZpbmVzIHRoZSBmb3JtYWwgZ3JhbW1hciBmb3IgdGhlIHZhbHVlIG9mIHRoZSB3aGVyZSBxdWVyeSBwYXJhbWV0ZXI7XG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG93ZXZlciwgb25seSBhIHN1YnNldCBvZiB0aGUgT0RhdGEgZmlsdGVyIHN5bnRheCBpcyBzdXBwb3J0ZWQgaW4gdGhlIEJsb2Igc2VydmljZS5cbiAgICAgKiBAcGFyYW0gbWFya2VyIC0gQSBzdHJpbmcgdmFsdWUgdGhhdCBpZGVudGlmaWVzIHRoZSBwb3J0aW9uIG9mXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBsaXN0IG9mIGJsb2JzIHRvIGJlIHJldHVybmVkIHdpdGggdGhlIG5leHQgbGlzdGluZyBvcGVyYXRpb24uIFRoZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gcmV0dXJucyB0aGUgY29udGludWF0aW9uVG9rZW4gdmFsdWUgd2l0aGluIHRoZSByZXNwb25zZSBib2R5IGlmIHRoZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0aW5nIG9wZXJhdGlvbiBkaWQgbm90IHJldHVybiBhbGwgYmxvYnMgcmVtYWluaW5nIHRvIGJlIGxpc3RlZFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSBjdXJyZW50IHBhZ2UuIFRoZSBjb250aW51YXRpb25Ub2tlbiB2YWx1ZSBjYW4gYmUgdXNlZCBhcyB0aGUgdmFsdWUgZm9yXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBtYXJrZXIgcGFyYW1ldGVyIGluIGEgc3Vic2VxdWVudCBjYWxsIHRvIHJlcXVlc3QgdGhlIG5leHQgcGFnZSBvZiBsaXN0XG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLiBUaGUgbWFya2VyIHZhbHVlIGlzIG9wYXF1ZSB0byB0aGUgY2xpZW50LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBmaW5kIGJsb2JzIGJ5IHRhZ3MuXG4gICAgICovXG4gICAgYXN5bmMgZmluZEJsb2JzQnlUYWdzU2VnbWVudCh0YWdGaWx0ZXJTcWxFeHByZXNzaW9uLCBtYXJrZXIsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JTZXJ2aWNlQ2xpZW50LWZpbmRCbG9ic0J5VGFnc1NlZ21lbnRcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuc2VydmljZUNvbnRleHQuZmlsdGVyQmxvYnMoe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIHdoZXJlOiB0YWdGaWx0ZXJTcWxFeHByZXNzaW9uLFxuICAgICAgICAgICAgICAgIG1hcmtlcixcbiAgICAgICAgICAgICAgICBtYXhQYWdlU2l6ZTogb3B0aW9ucy5tYXhQYWdlU2l6ZSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICBjb25zdCB3cmFwcGVkUmVzcG9uc2UgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHJlc3BvbnNlKSwgeyBfcmVzcG9uc2U6IHJlc3BvbnNlLl9yZXNwb25zZSwgYmxvYnM6IHJlc3BvbnNlLmJsb2JzLm1hcCgoYmxvYikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgICAgIGxldCB0YWdWYWx1ZSA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoKF9hID0gYmxvYi50YWdzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuYmxvYlRhZ1NldC5sZW5ndGgpID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YWdWYWx1ZSA9IGJsb2IudGFncy5ibG9iVGFnU2V0WzBdLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGJsb2IpLCB7IHRhZ3M6IHRvVGFncyhibG9iLnRhZ3MpLCB0YWdWYWx1ZSB9KTtcbiAgICAgICAgICAgICAgICB9KSB9KTtcbiAgICAgICAgICAgIHJldHVybiB3cmFwcGVkUmVzcG9uc2U7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIEFzeW5jSXRlcmFibGVJdGVyYXRvciBmb3IgU2VydmljZUZpbmRCbG9ic0J5VGFnc1NlZ21lbnRSZXNwb25zZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0YWdGaWx0ZXJTcWxFeHByZXNzaW9uIC0gIFRoZSB3aGVyZSBwYXJhbWV0ZXIgZW5hYmxlcyB0aGUgY2FsbGVyIHRvIHF1ZXJ5IGJsb2JzIHdob3NlIHRhZ3MgbWF0Y2ggYSBnaXZlbiBleHByZXNzaW9uLlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZ2l2ZW4gZXhwcmVzc2lvbiBtdXN0IGV2YWx1YXRlIHRvIHRydWUgZm9yIGEgYmxvYiB0byBiZSByZXR1cm5lZCBpbiB0aGUgcmVzdWx0cy5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlW09EYXRhIC0gQUJORl0gZmlsdGVyIHN5bnRheCBydWxlIGRlZmluZXMgdGhlIGZvcm1hbCBncmFtbWFyIGZvciB0aGUgdmFsdWUgb2YgdGhlIHdoZXJlIHF1ZXJ5IHBhcmFtZXRlcjtcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG93ZXZlciwgb25seSBhIHN1YnNldCBvZiB0aGUgT0RhdGEgZmlsdGVyIHN5bnRheCBpcyBzdXBwb3J0ZWQgaW4gdGhlIEJsb2Igc2VydmljZS5cbiAgICAgKiBAcGFyYW0gbWFya2VyIC0gQSBzdHJpbmcgdmFsdWUgdGhhdCBpZGVudGlmaWVzIHRoZSBwb3J0aW9uIG9mXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBsaXN0IG9mIGJsb2JzIHRvIGJlIHJldHVybmVkIHdpdGggdGhlIG5leHQgbGlzdGluZyBvcGVyYXRpb24uIFRoZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gcmV0dXJucyB0aGUgY29udGludWF0aW9uVG9rZW4gdmFsdWUgd2l0aGluIHRoZSByZXNwb25zZSBib2R5IGlmIHRoZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0aW5nIG9wZXJhdGlvbiBkaWQgbm90IHJldHVybiBhbGwgYmxvYnMgcmVtYWluaW5nIHRvIGJlIGxpc3RlZFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSBjdXJyZW50IHBhZ2UuIFRoZSBjb250aW51YXRpb25Ub2tlbiB2YWx1ZSBjYW4gYmUgdXNlZCBhcyB0aGUgdmFsdWUgZm9yXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBtYXJrZXIgcGFyYW1ldGVyIGluIGEgc3Vic2VxdWVudCBjYWxsIHRvIHJlcXVlc3QgdGhlIG5leHQgcGFnZSBvZiBsaXN0XG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLiBUaGUgbWFya2VyIHZhbHVlIGlzIG9wYXF1ZSB0byB0aGUgY2xpZW50LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBmaW5kIGJsb2JzIGJ5IHRhZ3MuXG4gICAgICovXG4gICAgZmluZEJsb2JzQnlUYWdzU2VnbWVudHModGFnRmlsdGVyU3FsRXhwcmVzc2lvbl8xLCBtYXJrZXJfMSkge1xuICAgICAgICByZXR1cm4gdHNsaWIuX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKiBmaW5kQmxvYnNCeVRhZ3NTZWdtZW50c18xKHRhZ0ZpbHRlclNxbEV4cHJlc3Npb24sIG1hcmtlciwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgICAgICBsZXQgcmVzcG9uc2U7XG4gICAgICAgICAgICBpZiAoISFtYXJrZXIgfHwgbWFya2VyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0geWllbGQgdHNsaWIuX19hd2FpdCh0aGlzLmZpbmRCbG9ic0J5VGFnc1NlZ21lbnQodGFnRmlsdGVyU3FsRXhwcmVzc2lvbiwgbWFya2VyLCBvcHRpb25zKSk7XG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmJsb2JzID0gcmVzcG9uc2UuYmxvYnMgfHwgW107XG4gICAgICAgICAgICAgICAgICAgIG1hcmtlciA9IHJlc3BvbnNlLmNvbnRpbnVhdGlvblRva2VuO1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCB5aWVsZCB0c2xpYi5fX2F3YWl0KHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICB9IHdoaWxlIChtYXJrZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBBc3luY0l0ZXJhYmxlSXRlcmF0b3IgZm9yIGJsb2JzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRhZ0ZpbHRlclNxbEV4cHJlc3Npb24gLSAgVGhlIHdoZXJlIHBhcmFtZXRlciBlbmFibGVzIHRoZSBjYWxsZXIgdG8gcXVlcnkgYmxvYnMgd2hvc2UgdGFncyBtYXRjaCBhIGdpdmVuIGV4cHJlc3Npb24uXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBnaXZlbiBleHByZXNzaW9uIG11c3QgZXZhbHVhdGUgdG8gdHJ1ZSBmb3IgYSBibG9iIHRvIGJlIHJldHVybmVkIGluIHRoZSByZXN1bHRzLlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGVbT0RhdGEgLSBBQk5GXSBmaWx0ZXIgc3ludGF4IHJ1bGUgZGVmaW5lcyB0aGUgZm9ybWFsIGdyYW1tYXIgZm9yIHRoZSB2YWx1ZSBvZiB0aGUgd2hlcmUgcXVlcnkgcGFyYW1ldGVyO1xuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3dldmVyLCBvbmx5IGEgc3Vic2V0IG9mIHRoZSBPRGF0YSBmaWx0ZXIgc3ludGF4IGlzIHN1cHBvcnRlZCBpbiB0aGUgQmxvYiBzZXJ2aWNlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBmaW5kQmxvYnNCeVRhZ3NJdGVtcy5cbiAgICAgKi9cbiAgICBmaW5kQmxvYnNCeVRhZ3NJdGVtcyh0YWdGaWx0ZXJTcWxFeHByZXNzaW9uXzEpIHtcbiAgICAgICAgcmV0dXJuIHRzbGliLl9fYXN5bmNHZW5lcmF0b3IodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiogZmluZEJsb2JzQnlUYWdzSXRlbXNfMSh0YWdGaWx0ZXJTcWxFeHByZXNzaW9uLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgICAgIHZhciBfYSwgZV8xLCBfYiwgX2M7XG4gICAgICAgICAgICBsZXQgbWFya2VyO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBfZCA9IHRydWUsIF9lID0gdHNsaWIuX19hc3luY1ZhbHVlcyh0aGlzLmZpbmRCbG9ic0J5VGFnc1NlZ21lbnRzKHRhZ0ZpbHRlclNxbEV4cHJlc3Npb24sIG1hcmtlciwgb3B0aW9ucykpLCBfZjsgX2YgPSB5aWVsZCB0c2xpYi5fX2F3YWl0KF9lLm5leHQoKSksIF9hID0gX2YuZG9uZSwgIV9hOyBfZCA9IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgX2MgPSBfZi52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgX2QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VnbWVudCA9IF9jO1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCB0c2xpYi5fX2F3YWl0KHlpZWxkKiB0c2xpYi5fX2FzeW5jRGVsZWdhdG9yKHRzbGliLl9fYXN5bmNWYWx1ZXMoc2VnbWVudC5ibG9icykpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFfZCAmJiAhX2EgJiYgKF9iID0gX2UucmV0dXJuKSkgeWllbGQgdHNsaWIuX19hd2FpdChfYi5jYWxsKF9lKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gYXN5bmMgaXRlcmFibGUgaXRlcmF0b3IgdG8gZmluZCBhbGwgYmxvYnMgd2l0aCBzcGVjaWZpZWQgdGFnXG4gICAgICogdW5kZXIgdGhlIHNwZWNpZmllZCBhY2NvdW50LlxuICAgICAqXG4gICAgICogLmJ5UGFnZSgpIHJldHVybnMgYW4gYXN5bmMgaXRlcmFibGUgaXRlcmF0b3IgdG8gbGlzdCB0aGUgYmxvYnMgaW4gcGFnZXMuXG4gICAgICpcbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9nZXQtYmxvYi1zZXJ2aWNlLXByb3BlcnRpZXNcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNpbmcgYGZvciBhd2FpdGAgc3ludGF4OlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBsZXQgaSA9IDE7XG4gICAgICogZm9yIGF3YWl0IChjb25zdCBibG9iIG9mIGJsb2JTZXJ2aWNlQ2xpZW50LmZpbmRCbG9ic0J5VGFncyhcInRhZ2tleT0ndGFndmFsdWUnXCIpKSB7XG4gICAgICogICBjb25zb2xlLmxvZyhgQmxvYiAke2krK306ICR7Y29udGFpbmVyLm5hbWV9YCk7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBgaXRlci5uZXh0KClgOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBsZXQgaSA9IDE7XG4gICAgICogY29uc3QgaXRlciA9IGJsb2JTZXJ2aWNlQ2xpZW50LmZpbmRCbG9ic0J5VGFncyhcInRhZ2tleT0ndGFndmFsdWUnXCIpO1xuICAgICAqIGxldCBibG9iSXRlbSA9IGF3YWl0IGl0ZXIubmV4dCgpO1xuICAgICAqIHdoaWxlICghYmxvYkl0ZW0uZG9uZSkge1xuICAgICAqICAgY29uc29sZS5sb2coYEJsb2IgJHtpKyt9OiAke2Jsb2JJdGVtLnZhbHVlLm5hbWV9YCk7XG4gICAgICogICBibG9iSXRlbSA9IGF3YWl0IGl0ZXIubmV4dCgpO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNpbmcgYGJ5UGFnZSgpYDpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogLy8gcGFzc2luZyBvcHRpb25hbCBtYXhQYWdlU2l6ZSBpbiB0aGUgcGFnZSBzZXR0aW5nc1xuICAgICAqIGxldCBpID0gMTtcbiAgICAgKiBmb3IgYXdhaXQgKGNvbnN0IHJlc3BvbnNlIG9mIGJsb2JTZXJ2aWNlQ2xpZW50LmZpbmRCbG9ic0J5VGFncyhcInRhZ2tleT0ndGFndmFsdWUnXCIpLmJ5UGFnZSh7IG1heFBhZ2VTaXplOiAyMCB9KSkge1xuICAgICAqICAgaWYgKHJlc3BvbnNlLmJsb2JzKSB7XG4gICAgICogICAgIGZvciAoY29uc3QgYmxvYiBvZiByZXNwb25zZS5ibG9icykge1xuICAgICAqICAgICAgIGNvbnNvbGUubG9nKGBCbG9iICR7aSsrfTogJHtibG9iLm5hbWV9YCk7XG4gICAgICogICAgIH1cbiAgICAgKiAgIH1cbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIHBhZ2luZyB3aXRoIGEgbWFya2VyOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBsZXQgaSA9IDE7XG4gICAgICogbGV0IGl0ZXJhdG9yID0gYmxvYlNlcnZpY2VDbGllbnQuZmluZEJsb2JzQnlUYWdzKFwidGFna2V5PSd0YWd2YWx1ZSdcIikuYnlQYWdlKHsgbWF4UGFnZVNpemU6IDIgfSk7XG4gICAgICogbGV0IHJlc3BvbnNlID0gKGF3YWl0IGl0ZXJhdG9yLm5leHQoKSkudmFsdWU7XG4gICAgICpcbiAgICAgKiAvLyBQcmludHMgMiBibG9iIG5hbWVzXG4gICAgICogaWYgKHJlc3BvbnNlLmJsb2JzKSB7XG4gICAgICogICBmb3IgKGNvbnN0IGJsb2Igb2YgcmVzcG9uc2UuYmxvYnMpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coYEJsb2IgJHtpKyt9OiAke2Jsb2IubmFtZX1gKTtcbiAgICAgKiAgIH1cbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBHZXRzIG5leHQgbWFya2VyXG4gICAgICogbGV0IG1hcmtlciA9IHJlc3BvbnNlLmNvbnRpbnVhdGlvblRva2VuO1xuICAgICAqIC8vIFBhc3NpbmcgbmV4dCBtYXJrZXIgYXMgY29udGludWF0aW9uVG9rZW5cbiAgICAgKiBpdGVyYXRvciA9IGJsb2JTZXJ2aWNlQ2xpZW50XG4gICAgICogICAuZmluZEJsb2JzQnlUYWdzKFwidGFna2V5PSd0YWd2YWx1ZSdcIilcbiAgICAgKiAgIC5ieVBhZ2UoeyBjb250aW51YXRpb25Ub2tlbjogbWFya2VyLCBtYXhQYWdlU2l6ZTogMTAgfSk7XG4gICAgICogcmVzcG9uc2UgPSAoYXdhaXQgaXRlcmF0b3IubmV4dCgpKS52YWx1ZTtcbiAgICAgKlxuICAgICAqIC8vIFByaW50cyBibG9iIG5hbWVzXG4gICAgICogaWYgKHJlc3BvbnNlLmJsb2JzKSB7XG4gICAgICogICBmb3IgKGNvbnN0IGJsb2Igb2YgcmVzcG9uc2UuYmxvYnMpIHtcbiAgICAgKiAgICAgIGNvbnNvbGUubG9nKGBCbG9iICR7aSsrfTogJHtibG9iLm5hbWV9YCk7XG4gICAgICogICB9XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQHBhcmFtIHRhZ0ZpbHRlclNxbEV4cHJlc3Npb24gLSAgVGhlIHdoZXJlIHBhcmFtZXRlciBlbmFibGVzIHRoZSBjYWxsZXIgdG8gcXVlcnkgYmxvYnMgd2hvc2UgdGFncyBtYXRjaCBhIGdpdmVuIGV4cHJlc3Npb24uXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBnaXZlbiBleHByZXNzaW9uIG11c3QgZXZhbHVhdGUgdG8gdHJ1ZSBmb3IgYSBibG9iIHRvIGJlIHJldHVybmVkIGluIHRoZSByZXN1bHRzLlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGVbT0RhdGEgLSBBQk5GXSBmaWx0ZXIgc3ludGF4IHJ1bGUgZGVmaW5lcyB0aGUgZm9ybWFsIGdyYW1tYXIgZm9yIHRoZSB2YWx1ZSBvZiB0aGUgd2hlcmUgcXVlcnkgcGFyYW1ldGVyO1xuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3dldmVyLCBvbmx5IGEgc3Vic2V0IG9mIHRoZSBPRGF0YSBmaWx0ZXIgc3ludGF4IGlzIHN1cHBvcnRlZCBpbiB0aGUgQmxvYiBzZXJ2aWNlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBmaW5kIGJsb2JzIGJ5IHRhZ3MuXG4gICAgICovXG4gICAgZmluZEJsb2JzQnlUYWdzKHRhZ0ZpbHRlclNxbEV4cHJlc3Npb24sIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICAvLyBBc3luY0l0ZXJhYmxlSXRlcmF0b3IgdG8gaXRlcmF0ZSBvdmVyIGJsb2JzXG4gICAgICAgIGNvbnN0IGxpc3RTZWdtZW50T3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBpdGVyID0gdGhpcy5maW5kQmxvYnNCeVRhZ3NJdGVtcyh0YWdGaWx0ZXJTcWxFeHByZXNzaW9uLCBsaXN0U2VnbWVudE9wdGlvbnMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBUaGUgbmV4dCBtZXRob2QsIHBhcnQgb2YgdGhlIGl0ZXJhdGlvbiBwcm90b2NvbFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBuZXh0KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVyLm5leHQoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFRoZSBjb25uZWN0aW9uIHRvIHRoZSBhc3luYyBpdGVyYXRvciwgcGFydCBvZiB0aGUgaXRlcmF0aW9uIHByb3RvY29sXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBSZXR1cm4gYW4gQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIHRoYXQgd29ya3MgYSBwYWdlIGF0IGEgdGltZVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBieVBhZ2U6IChzZXR0aW5ncyA9IHt9KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluZEJsb2JzQnlUYWdzU2VnbWVudHModGFnRmlsdGVyU3FsRXhwcmVzc2lvbiwgc2V0dGluZ3MuY29udGludWF0aW9uVG9rZW4sIE9iamVjdC5hc3NpZ24oeyBtYXhQYWdlU2l6ZTogc2V0dGluZ3MubWF4UGFnZVNpemUgfSwgbGlzdFNlZ21lbnRPcHRpb25zKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIEFzeW5jSXRlcmFibGVJdGVyYXRvciBmb3IgU2VydmljZUxpc3RDb250YWluZXJzU2VnbWVudFJlc3BvbnNlc1xuICAgICAqXG4gICAgICogQHBhcmFtIG1hcmtlciAtIEEgc3RyaW5nIHZhbHVlIHRoYXQgaWRlbnRpZmllcyB0aGUgcG9ydGlvbiBvZlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGxpc3Qgb2YgY29udGFpbmVycyB0byBiZSByZXR1cm5lZCB3aXRoIHRoZSBuZXh0IGxpc3Rpbmcgb3BlcmF0aW9uLiBUaGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiByZXR1cm5zIHRoZSBjb250aW51YXRpb25Ub2tlbiB2YWx1ZSB3aXRoaW4gdGhlIHJlc3BvbnNlIGJvZHkgaWYgdGhlXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICBsaXN0aW5nIG9wZXJhdGlvbiBkaWQgbm90IHJldHVybiBhbGwgY29udGFpbmVycyByZW1haW5pbmcgdG8gYmUgbGlzdGVkXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSBjdXJyZW50IHBhZ2UuIFRoZSBjb250aW51YXRpb25Ub2tlbiB2YWx1ZSBjYW4gYmUgdXNlZCBhcyB0aGUgdmFsdWUgZm9yXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWFya2VyIHBhcmFtZXRlciBpbiBhIHN1YnNlcXVlbnQgY2FsbCB0byByZXF1ZXN0IHRoZSBuZXh0IHBhZ2Ugb2YgbGlzdFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMuIFRoZSBtYXJrZXIgdmFsdWUgaXMgb3BhcXVlIHRvIHRoZSBjbGllbnQuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIGxpc3QgY29udGFpbmVycyBvcGVyYXRpb24uXG4gICAgICovXG4gICAgbGlzdFNlZ21lbnRzKG1hcmtlcl8xKSB7XG4gICAgICAgIHJldHVybiB0c2xpYi5fX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24qIGxpc3RTZWdtZW50c18xKG1hcmtlciwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgICAgICBsZXQgbGlzdENvbnRhaW5lcnNTZWdtZW50UmVzcG9uc2U7XG4gICAgICAgICAgICBpZiAoISFtYXJrZXIgfHwgbWFya2VyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RDb250YWluZXJzU2VnbWVudFJlc3BvbnNlID0geWllbGQgdHNsaWIuX19hd2FpdCh0aGlzLmxpc3RDb250YWluZXJzU2VnbWVudChtYXJrZXIsIG9wdGlvbnMpKTtcbiAgICAgICAgICAgICAgICAgICAgbGlzdENvbnRhaW5lcnNTZWdtZW50UmVzcG9uc2UuY29udGFpbmVySXRlbXMgPVxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdENvbnRhaW5lcnNTZWdtZW50UmVzcG9uc2UuY29udGFpbmVySXRlbXMgfHwgW107XG4gICAgICAgICAgICAgICAgICAgIG1hcmtlciA9IGxpc3RDb250YWluZXJzU2VnbWVudFJlc3BvbnNlLmNvbnRpbnVhdGlvblRva2VuO1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCB5aWVsZCB0c2xpYi5fX2F3YWl0KHlpZWxkIHRzbGliLl9fYXdhaXQobGlzdENvbnRhaW5lcnNTZWdtZW50UmVzcG9uc2UpKTtcbiAgICAgICAgICAgICAgICB9IHdoaWxlIChtYXJrZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBBc3luY0l0ZXJhYmxlSXRlcmF0b3IgZm9yIENvbnRhaW5lciBJdGVtc1xuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIGxpc3QgY29udGFpbmVycyBvcGVyYXRpb24uXG4gICAgICovXG4gICAgbGlzdEl0ZW1zKCkge1xuICAgICAgICByZXR1cm4gdHNsaWIuX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKiBsaXN0SXRlbXNfMShvcHRpb25zID0ge30pIHtcbiAgICAgICAgICAgIHZhciBfYSwgZV8yLCBfYiwgX2M7XG4gICAgICAgICAgICBsZXQgbWFya2VyO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBfZCA9IHRydWUsIF9lID0gdHNsaWIuX19hc3luY1ZhbHVlcyh0aGlzLmxpc3RTZWdtZW50cyhtYXJrZXIsIG9wdGlvbnMpKSwgX2Y7IF9mID0geWllbGQgdHNsaWIuX19hd2FpdChfZS5uZXh0KCkpLCBfYSA9IF9mLmRvbmUsICFfYTsgX2QgPSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgIF9jID0gX2YudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIF9kID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlZ21lbnQgPSBfYztcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgdHNsaWIuX19hd2FpdCh5aWVsZCogdHNsaWIuX19hc3luY0RlbGVnYXRvcih0c2xpYi5fX2FzeW5jVmFsdWVzKHNlZ21lbnQuY29udGFpbmVySXRlbXMpKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVfMl8xKSB7IGVfMiA9IHsgZXJyb3I6IGVfMl8xIH07IH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghX2QgJiYgIV9hICYmIChfYiA9IF9lLnJldHVybikpIHlpZWxkIHRzbGliLl9fYXdhaXQoX2IuY2FsbChfZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMikgdGhyb3cgZV8yLmVycm9yOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIGFzeW5jIGl0ZXJhYmxlIGl0ZXJhdG9yIHRvIGxpc3QgYWxsIHRoZSBjb250YWluZXJzXG4gICAgICogdW5kZXIgdGhlIHNwZWNpZmllZCBhY2NvdW50LlxuICAgICAqXG4gICAgICogLmJ5UGFnZSgpIHJldHVybnMgYW4gYXN5bmMgaXRlcmFibGUgaXRlcmF0b3IgdG8gbGlzdCB0aGUgY29udGFpbmVycyBpbiBwYWdlcy5cbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNpbmcgYGZvciBhd2FpdGAgc3ludGF4OlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBsZXQgaSA9IDE7XG4gICAgICogZm9yIGF3YWl0IChjb25zdCBjb250YWluZXIgb2YgYmxvYlNlcnZpY2VDbGllbnQubGlzdENvbnRhaW5lcnMoKSkge1xuICAgICAqICAgY29uc29sZS5sb2coYENvbnRhaW5lciAke2krK306ICR7Y29udGFpbmVyLm5hbWV9YCk7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBgaXRlci5uZXh0KClgOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBsZXQgaSA9IDE7XG4gICAgICogY29uc3QgaXRlciA9IGJsb2JTZXJ2aWNlQ2xpZW50Lmxpc3RDb250YWluZXJzKCk7XG4gICAgICogbGV0IGNvbnRhaW5lckl0ZW0gPSBhd2FpdCBpdGVyLm5leHQoKTtcbiAgICAgKiB3aGlsZSAoIWNvbnRhaW5lckl0ZW0uZG9uZSkge1xuICAgICAqICAgY29uc29sZS5sb2coYENvbnRhaW5lciAke2krK306ICR7Y29udGFpbmVySXRlbS52YWx1ZS5uYW1lfWApO1xuICAgICAqICAgY29udGFpbmVySXRlbSA9IGF3YWl0IGl0ZXIubmV4dCgpO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNpbmcgYGJ5UGFnZSgpYDpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogLy8gcGFzc2luZyBvcHRpb25hbCBtYXhQYWdlU2l6ZSBpbiB0aGUgcGFnZSBzZXR0aW5nc1xuICAgICAqIGxldCBpID0gMTtcbiAgICAgKiBmb3IgYXdhaXQgKGNvbnN0IHJlc3BvbnNlIG9mIGJsb2JTZXJ2aWNlQ2xpZW50Lmxpc3RDb250YWluZXJzKCkuYnlQYWdlKHsgbWF4UGFnZVNpemU6IDIwIH0pKSB7XG4gICAgICogICBpZiAocmVzcG9uc2UuY29udGFpbmVySXRlbXMpIHtcbiAgICAgKiAgICAgZm9yIChjb25zdCBjb250YWluZXIgb2YgcmVzcG9uc2UuY29udGFpbmVySXRlbXMpIHtcbiAgICAgKiAgICAgICBjb25zb2xlLmxvZyhgQ29udGFpbmVyICR7aSsrfTogJHtjb250YWluZXIubmFtZX1gKTtcbiAgICAgKiAgICAgfVxuICAgICAqICAgfVxuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNpbmcgcGFnaW5nIHdpdGggYSBtYXJrZXI6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGxldCBpID0gMTtcbiAgICAgKiBsZXQgaXRlcmF0b3IgPSBibG9iU2VydmljZUNsaWVudC5saXN0Q29udGFpbmVycygpLmJ5UGFnZSh7IG1heFBhZ2VTaXplOiAyIH0pO1xuICAgICAqIGxldCByZXNwb25zZSA9IChhd2FpdCBpdGVyYXRvci5uZXh0KCkpLnZhbHVlO1xuICAgICAqXG4gICAgICogLy8gUHJpbnRzIDIgY29udGFpbmVyIG5hbWVzXG4gICAgICogaWYgKHJlc3BvbnNlLmNvbnRhaW5lckl0ZW1zKSB7XG4gICAgICogICBmb3IgKGNvbnN0IGNvbnRhaW5lciBvZiByZXNwb25zZS5jb250YWluZXJJdGVtcykge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhgQ29udGFpbmVyICR7aSsrfTogJHtjb250YWluZXIubmFtZX1gKTtcbiAgICAgKiAgIH1cbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBHZXRzIG5leHQgbWFya2VyXG4gICAgICogbGV0IG1hcmtlciA9IHJlc3BvbnNlLmNvbnRpbnVhdGlvblRva2VuO1xuICAgICAqIC8vIFBhc3NpbmcgbmV4dCBtYXJrZXIgYXMgY29udGludWF0aW9uVG9rZW5cbiAgICAgKiBpdGVyYXRvciA9IGJsb2JTZXJ2aWNlQ2xpZW50XG4gICAgICogICAubGlzdENvbnRhaW5lcnMoKVxuICAgICAqICAgLmJ5UGFnZSh7IGNvbnRpbnVhdGlvblRva2VuOiBtYXJrZXIsIG1heFBhZ2VTaXplOiAxMCB9KTtcbiAgICAgKiByZXNwb25zZSA9IChhd2FpdCBpdGVyYXRvci5uZXh0KCkpLnZhbHVlO1xuICAgICAqXG4gICAgICogLy8gUHJpbnRzIDEwIGNvbnRhaW5lciBuYW1lc1xuICAgICAqIGlmIChyZXNwb25zZS5jb250YWluZXJJdGVtcykge1xuICAgICAqICAgZm9yIChjb25zdCBjb250YWluZXIgb2YgcmVzcG9uc2UuY29udGFpbmVySXRlbXMpIHtcbiAgICAgKiAgICAgIGNvbnNvbGUubG9nKGBDb250YWluZXIgJHtpKyt9OiAke2NvbnRhaW5lci5uYW1lfWApO1xuICAgICAqICAgfVxuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBsaXN0IGNvbnRhaW5lcnMuXG4gICAgICogQHJldHVybnMgQW4gYXN5bmNJdGVyYWJsZUl0ZXJhdG9yIHRoYXQgc3VwcG9ydHMgcGFnaW5nLlxuICAgICAqL1xuICAgIGxpc3RDb250YWluZXJzKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBpZiAob3B0aW9ucy5wcmVmaXggPT09IFwiXCIpIHtcbiAgICAgICAgICAgIG9wdGlvbnMucHJlZml4ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluY2x1ZGUgPSBbXTtcbiAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZURlbGV0ZWQpIHtcbiAgICAgICAgICAgIGluY2x1ZGUucHVzaChcImRlbGV0ZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZU1ldGFkYXRhKSB7XG4gICAgICAgICAgICBpbmNsdWRlLnB1c2goXCJtZXRhZGF0YVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5pbmNsdWRlU3lzdGVtKSB7XG4gICAgICAgICAgICBpbmNsdWRlLnB1c2goXCJzeXN0ZW1cIik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIHRvIGl0ZXJhdGUgb3ZlciBjb250YWluZXJzXG4gICAgICAgIGNvbnN0IGxpc3RTZWdtZW50T3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyksIChpbmNsdWRlLmxlbmd0aCA+IDAgPyB7IGluY2x1ZGUgfSA6IHt9KSk7XG4gICAgICAgIGNvbnN0IGl0ZXIgPSB0aGlzLmxpc3RJdGVtcyhsaXN0U2VnbWVudE9wdGlvbnMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBUaGUgbmV4dCBtZXRob2QsIHBhcnQgb2YgdGhlIGl0ZXJhdGlvbiBwcm90b2NvbFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBuZXh0KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVyLm5leHQoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFRoZSBjb25uZWN0aW9uIHRvIHRoZSBhc3luYyBpdGVyYXRvciwgcGFydCBvZiB0aGUgaXRlcmF0aW9uIHByb3RvY29sXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBSZXR1cm4gYW4gQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIHRoYXQgd29ya3MgYSBwYWdlIGF0IGEgdGltZVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBieVBhZ2U6IChzZXR0aW5ncyA9IHt9KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubGlzdFNlZ21lbnRzKHNldHRpbmdzLmNvbnRpbnVhdGlvblRva2VuLCBPYmplY3QuYXNzaWduKHsgbWF4UGFnZVNpemU6IHNldHRpbmdzLm1heFBhZ2VTaXplIH0sIGxpc3RTZWdtZW50T3B0aW9ucykpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogT05MWSBBVkFJTEFCTEUgV0hFTiBVU0lORyBCRUFSRVIgVE9LRU4gQVVUSEVOVElDQVRJT04gKFRva2VuQ3JlZGVudGlhbCkuXG4gICAgICpcbiAgICAgKiBSZXRyaWV2ZXMgYSB1c2VyIGRlbGVnYXRpb24ga2V5IGZvciB0aGUgQmxvYiBzZXJ2aWNlLiBUaGlzIGlzIG9ubHkgYSB2YWxpZCBvcGVyYXRpb24gd2hlbiB1c2luZ1xuICAgICAqIGJlYXJlciB0b2tlbiBhdXRoZW50aWNhdGlvbi5cbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2dldC11c2VyLWRlbGVnYXRpb24ta2V5XG4gICAgICpcbiAgICAgKiBAcGFyYW0gc3RhcnRzT24gLSAgICAgIFRoZSBzdGFydCB0aW1lIGZvciB0aGUgdXNlciBkZWxlZ2F0aW9uIFNBUy4gTXVzdCBiZSB3aXRoaW4gNyBkYXlzIG9mIHRoZSBjdXJyZW50IHRpbWVcbiAgICAgKiBAcGFyYW0gZXhwaXJlc09uIC0gICAgIFRoZSBlbmQgdGltZSBmb3IgdGhlIHVzZXIgZGVsZWdhdGlvbiBTQVMuIE11c3QgYmUgd2l0aGluIDcgZGF5cyBvZiB0aGUgY3VycmVudCB0aW1lXG4gICAgICovXG4gICAgYXN5bmMgZ2V0VXNlckRlbGVnYXRpb25LZXkoc3RhcnRzT24sIGV4cGlyZXNPbiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYlNlcnZpY2VDbGllbnQtZ2V0VXNlckRlbGVnYXRpb25LZXlcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuc2VydmljZUNvbnRleHQuZ2V0VXNlckRlbGVnYXRpb25LZXkoe1xuICAgICAgICAgICAgICAgIHN0YXJ0c09uOiB0cnVuY2F0ZWRJU084MDYxRGF0ZShzdGFydHNPbiwgZmFsc2UpLFxuICAgICAgICAgICAgICAgIGV4cGlyZXNPbjogdHJ1bmNhdGVkSVNPODA2MURhdGUoZXhwaXJlc09uLCBmYWxzZSksXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgY29uc3QgdXNlckRlbGVnYXRpb25LZXkgPSB7XG4gICAgICAgICAgICAgICAgc2lnbmVkT2JqZWN0SWQ6IHJlc3BvbnNlLnNpZ25lZE9iamVjdElkLFxuICAgICAgICAgICAgICAgIHNpZ25lZFRlbmFudElkOiByZXNwb25zZS5zaWduZWRUZW5hbnRJZCxcbiAgICAgICAgICAgICAgICBzaWduZWRTdGFydHNPbjogbmV3IERhdGUocmVzcG9uc2Uuc2lnbmVkU3RhcnRzT24pLFxuICAgICAgICAgICAgICAgIHNpZ25lZEV4cGlyZXNPbjogbmV3IERhdGUocmVzcG9uc2Uuc2lnbmVkRXhwaXJlc09uKSxcbiAgICAgICAgICAgICAgICBzaWduZWRTZXJ2aWNlOiByZXNwb25zZS5zaWduZWRTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHNpZ25lZFZlcnNpb246IHJlc3BvbnNlLnNpZ25lZFZlcnNpb24sXG4gICAgICAgICAgICAgICAgdmFsdWU6IHJlc3BvbnNlLnZhbHVlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IE9iamVjdC5hc3NpZ24oeyBfcmVzcG9uc2U6IHJlc3BvbnNlLl9yZXNwb25zZSwgcmVxdWVzdElkOiByZXNwb25zZS5yZXF1ZXN0SWQsIGNsaWVudFJlcXVlc3RJZDogcmVzcG9uc2UuY2xpZW50UmVxdWVzdElkLCB2ZXJzaW9uOiByZXNwb25zZS52ZXJzaW9uLCBkYXRlOiByZXNwb25zZS5kYXRlLCBlcnJvckNvZGU6IHJlc3BvbnNlLmVycm9yQ29kZSB9LCB1c2VyRGVsZWdhdGlvbktleSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIEJsb2JCYXRjaENsaWVudCBvYmplY3QgdG8gY29uZHVjdCBiYXRjaCBvcGVyYXRpb25zLlxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvYmxvYi1iYXRjaFxuICAgICAqXG4gICAgICogQHJldHVybnMgQSBuZXcgQmxvYkJhdGNoQ2xpZW50IG9iamVjdCBmb3IgdGhpcyBzZXJ2aWNlLlxuICAgICAqL1xuICAgIGdldEJsb2JCYXRjaENsaWVudCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBCbG9iQmF0Y2hDbGllbnQodGhpcy51cmwsIHRoaXMucGlwZWxpbmUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBPbmx5IGF2YWlsYWJsZSBmb3IgQmxvYlNlcnZpY2VDbGllbnQgY29uc3RydWN0ZWQgd2l0aCBhIHNoYXJlZCBrZXkgY3JlZGVudGlhbC5cbiAgICAgKlxuICAgICAqIEdlbmVyYXRlcyBhIEJsb2IgYWNjb3VudCBTaGFyZWQgQWNjZXNzIFNpZ25hdHVyZSAoU0FTKSBVUkkgYmFzZWQgb24gdGhlIGNsaWVudCBwcm9wZXJ0aWVzXG4gICAgICogYW5kIHBhcmFtZXRlcnMgcGFzc2VkIGluLiBUaGUgU0FTIGlzIHNpZ25lZCBieSB0aGUgc2hhcmVkIGtleSBjcmVkZW50aWFsIG9mIHRoZSBjbGllbnQuXG4gICAgICpcbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9jcmVhdGUtYWNjb3VudC1zYXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBleHBpcmVzT24gLSBPcHRpb25hbC4gVGhlIHRpbWUgYXQgd2hpY2ggdGhlIHNoYXJlZCBhY2Nlc3Mgc2lnbmF0dXJlIGJlY29tZXMgaW52YWxpZC4gRGVmYXVsdCB0byBhbiBob3VyIGxhdGVyIGlmIG5vdCBwcm92aWRlZC5cbiAgICAgKiBAcGFyYW0gcGVybWlzc2lvbnMgLSBTcGVjaWZpZXMgdGhlIGxpc3Qgb2YgcGVybWlzc2lvbnMgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBTQVMuXG4gICAgICogQHBhcmFtIHJlc291cmNlVHlwZXMgLSBTcGVjaWZpZXMgdGhlIHJlc291cmNlIHR5cGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2hhcmVkIGFjY2VzcyBzaWduYXR1cmUuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBwYXJhbWV0ZXJzLlxuICAgICAqIEByZXR1cm5zIEFuIGFjY291bnQgU0FTIFVSSSBjb25zaXN0aW5nIG9mIHRoZSBVUkkgdG8gdGhlIHJlc291cmNlIHJlcHJlc2VudGVkIGJ5IHRoaXMgY2xpZW50LCBmb2xsb3dlZCBieSB0aGUgZ2VuZXJhdGVkIFNBUyB0b2tlbi5cbiAgICAgKi9cbiAgICBnZW5lcmF0ZUFjY291bnRTYXNVcmwoZXhwaXJlc09uLCBwZXJtaXNzaW9ucyA9IEFjY291bnRTQVNQZXJtaXNzaW9ucy5wYXJzZShcInJcIiksIHJlc291cmNlVHlwZXMgPSBcInNjb1wiLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgaWYgKCEodGhpcy5jcmVkZW50aWFsIGluc3RhbmNlb2YgU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwpKSB7XG4gICAgICAgICAgICB0aHJvdyBSYW5nZUVycm9yKFwiQ2FuIG9ubHkgZ2VuZXJhdGUgdGhlIGFjY291bnQgU0FTIHdoZW4gdGhlIGNsaWVudCBpcyBpbml0aWFsaXplZCB3aXRoIGEgc2hhcmVkIGtleSBjcmVkZW50aWFsXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChleHBpcmVzT24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICAgICAgICAgIGV4cGlyZXNPbiA9IG5ldyBEYXRlKG5vdy5nZXRUaW1lKCkgKyAzNjAwICogMTAwMCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2FzID0gZ2VuZXJhdGVBY2NvdW50U0FTUXVlcnlQYXJhbWV0ZXJzKE9iamVjdC5hc3NpZ24oeyBwZXJtaXNzaW9ucyxcbiAgICAgICAgICAgIGV4cGlyZXNPbixcbiAgICAgICAgICAgIHJlc291cmNlVHlwZXMsIHNlcnZpY2VzOiBBY2NvdW50U0FTU2VydmljZXMucGFyc2UoXCJiXCIpLnRvU3RyaW5nKCkgfSwgb3B0aW9ucyksIHRoaXMuY3JlZGVudGlhbCkudG9TdHJpbmcoKTtcbiAgICAgICAgcmV0dXJuIGFwcGVuZFRvVVJMUXVlcnkodGhpcy51cmwsIHNhcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE9ubHkgYXZhaWxhYmxlIGZvciBCbG9iU2VydmljZUNsaWVudCBjb25zdHJ1Y3RlZCB3aXRoIGEgc2hhcmVkIGtleSBjcmVkZW50aWFsLlxuICAgICAqXG4gICAgICogR2VuZXJhdGVzIHN0cmluZyB0byBzaWduIGZvciBhIEJsb2IgYWNjb3VudCBTaGFyZWQgQWNjZXNzIFNpZ25hdHVyZSAoU0FTKSBVUkkgYmFzZWQgb25cbiAgICAgKiB0aGUgY2xpZW50IHByb3BlcnRpZXMgYW5kIHBhcmFtZXRlcnMgcGFzc2VkIGluLiBUaGUgU0FTIGlzIHNpZ25lZCBieSB0aGUgc2hhcmVkIGtleSBjcmVkZW50aWFsIG9mIHRoZSBjbGllbnQuXG4gICAgICpcbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9jcmVhdGUtYWNjb3VudC1zYXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBleHBpcmVzT24gLSBPcHRpb25hbC4gVGhlIHRpbWUgYXQgd2hpY2ggdGhlIHNoYXJlZCBhY2Nlc3Mgc2lnbmF0dXJlIGJlY29tZXMgaW52YWxpZC4gRGVmYXVsdCB0byBhbiBob3VyIGxhdGVyIGlmIG5vdCBwcm92aWRlZC5cbiAgICAgKiBAcGFyYW0gcGVybWlzc2lvbnMgLSBTcGVjaWZpZXMgdGhlIGxpc3Qgb2YgcGVybWlzc2lvbnMgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBTQVMuXG4gICAgICogQHBhcmFtIHJlc291cmNlVHlwZXMgLSBTcGVjaWZpZXMgdGhlIHJlc291cmNlIHR5cGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2hhcmVkIGFjY2VzcyBzaWduYXR1cmUuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBwYXJhbWV0ZXJzLlxuICAgICAqIEByZXR1cm5zIEFuIGFjY291bnQgU0FTIFVSSSBjb25zaXN0aW5nIG9mIHRoZSBVUkkgdG8gdGhlIHJlc291cmNlIHJlcHJlc2VudGVkIGJ5IHRoaXMgY2xpZW50LCBmb2xsb3dlZCBieSB0aGUgZ2VuZXJhdGVkIFNBUyB0b2tlbi5cbiAgICAgKi9cbiAgICBnZW5lcmF0ZVNhc1N0cmluZ1RvU2lnbihleHBpcmVzT24sIHBlcm1pc3Npb25zID0gQWNjb3VudFNBU1Blcm1pc3Npb25zLnBhcnNlKFwiclwiKSwgcmVzb3VyY2VUeXBlcyA9IFwic2NvXCIsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBpZiAoISh0aGlzLmNyZWRlbnRpYWwgaW5zdGFuY2VvZiBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbCkpIHtcbiAgICAgICAgICAgIHRocm93IFJhbmdlRXJyb3IoXCJDYW4gb25seSBnZW5lcmF0ZSB0aGUgYWNjb3VudCBTQVMgd2hlbiB0aGUgY2xpZW50IGlzIGluaXRpYWxpemVkIHdpdGggYSBzaGFyZWQga2V5IGNyZWRlbnRpYWxcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV4cGlyZXNPbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgZXhwaXJlc09uID0gbmV3IERhdGUobm93LmdldFRpbWUoKSArIDM2MDAgKiAxMDAwKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2VuZXJhdGVBY2NvdW50U0FTUXVlcnlQYXJhbWV0ZXJzSW50ZXJuYWwoT2JqZWN0LmFzc2lnbih7IHBlcm1pc3Npb25zLFxuICAgICAgICAgICAgZXhwaXJlc09uLFxuICAgICAgICAgICAgcmVzb3VyY2VUeXBlcywgc2VydmljZXM6IEFjY291bnRTQVNTZXJ2aWNlcy5wYXJzZShcImJcIikudG9TdHJpbmcoKSB9LCBvcHRpb25zKSwgdGhpcy5jcmVkZW50aWFsKS5zdHJpbmdUb1NpZ247XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKiBLbm93biB2YWx1ZXMgb2Yge0BsaW5rIEVuY3J5cHRpb25BbGdvcml0aG1UeXBlfSB0aGF0IHRoZSBzZXJ2aWNlIGFjY2VwdHMuICovXG5leHBvcnRzLktub3duRW5jcnlwdGlvbkFsZ29yaXRobVR5cGUgPSB2b2lkIDA7XG4oZnVuY3Rpb24gKEtub3duRW5jcnlwdGlvbkFsZ29yaXRobVR5cGUpIHtcbiAgICBLbm93bkVuY3J5cHRpb25BbGdvcml0aG1UeXBlW1wiQUVTMjU2XCJdID0gXCJBRVMyNTZcIjtcbn0pKGV4cG9ydHMuS25vd25FbmNyeXB0aW9uQWxnb3JpdGhtVHlwZSB8fCAoZXhwb3J0cy5Lbm93bkVuY3J5cHRpb25BbGdvcml0aG1UeXBlID0ge30pKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUmVzdEVycm9yXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29yZVJlc3RQaXBlbGluZS5SZXN0RXJyb3I7IH1cbn0pO1xuZXhwb3J0cy5BY2NvdW50U0FTUGVybWlzc2lvbnMgPSBBY2NvdW50U0FTUGVybWlzc2lvbnM7XG5leHBvcnRzLkFjY291bnRTQVNSZXNvdXJjZVR5cGVzID0gQWNjb3VudFNBU1Jlc291cmNlVHlwZXM7XG5leHBvcnRzLkFjY291bnRTQVNTZXJ2aWNlcyA9IEFjY291bnRTQVNTZXJ2aWNlcztcbmV4cG9ydHMuQW5vbnltb3VzQ3JlZGVudGlhbCA9IEFub255bW91c0NyZWRlbnRpYWw7XG5leHBvcnRzLkFub255bW91c0NyZWRlbnRpYWxQb2xpY3kgPSBBbm9ueW1vdXNDcmVkZW50aWFsUG9saWN5O1xuZXhwb3J0cy5BcHBlbmRCbG9iQ2xpZW50ID0gQXBwZW5kQmxvYkNsaWVudDtcbmV4cG9ydHMuQmFzZVJlcXVlc3RQb2xpY3kgPSBCYXNlUmVxdWVzdFBvbGljeTtcbmV4cG9ydHMuQmxvYkJhdGNoID0gQmxvYkJhdGNoO1xuZXhwb3J0cy5CbG9iQmF0Y2hDbGllbnQgPSBCbG9iQmF0Y2hDbGllbnQ7XG5leHBvcnRzLkJsb2JDbGllbnQgPSBCbG9iQ2xpZW50O1xuZXhwb3J0cy5CbG9iTGVhc2VDbGllbnQgPSBCbG9iTGVhc2VDbGllbnQ7XG5leHBvcnRzLkJsb2JTQVNQZXJtaXNzaW9ucyA9IEJsb2JTQVNQZXJtaXNzaW9ucztcbmV4cG9ydHMuQmxvYlNlcnZpY2VDbGllbnQgPSBCbG9iU2VydmljZUNsaWVudDtcbmV4cG9ydHMuQmxvY2tCbG9iQ2xpZW50ID0gQmxvY2tCbG9iQ2xpZW50O1xuZXhwb3J0cy5Db250YWluZXJDbGllbnQgPSBDb250YWluZXJDbGllbnQ7XG5leHBvcnRzLkNvbnRhaW5lclNBU1Blcm1pc3Npb25zID0gQ29udGFpbmVyU0FTUGVybWlzc2lvbnM7XG5leHBvcnRzLkNyZWRlbnRpYWwgPSBDcmVkZW50aWFsO1xuZXhwb3J0cy5DcmVkZW50aWFsUG9saWN5ID0gQ3JlZGVudGlhbFBvbGljeTtcbmV4cG9ydHMuUGFnZUJsb2JDbGllbnQgPSBQYWdlQmxvYkNsaWVudDtcbmV4cG9ydHMuUGlwZWxpbmUgPSBQaXBlbGluZTtcbmV4cG9ydHMuU0FTUXVlcnlQYXJhbWV0ZXJzID0gU0FTUXVlcnlQYXJhbWV0ZXJzO1xuZXhwb3J0cy5TdG9yYWdlQnJvd3NlclBvbGljeSA9IFN0b3JhZ2VCcm93c2VyUG9saWN5O1xuZXhwb3J0cy5TdG9yYWdlQnJvd3NlclBvbGljeUZhY3RvcnkgPSBTdG9yYWdlQnJvd3NlclBvbGljeUZhY3Rvcnk7XG5leHBvcnRzLlN0b3JhZ2VPQXV0aFNjb3BlcyA9IFN0b3JhZ2VPQXV0aFNjb3BlcztcbmV4cG9ydHMuU3RvcmFnZVJldHJ5UG9saWN5ID0gU3RvcmFnZVJldHJ5UG9saWN5O1xuZXhwb3J0cy5TdG9yYWdlUmV0cnlQb2xpY3lGYWN0b3J5ID0gU3RvcmFnZVJldHJ5UG9saWN5RmFjdG9yeTtcbmV4cG9ydHMuU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwgPSBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbDtcbmV4cG9ydHMuU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWxQb2xpY3kgPSBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbFBvbGljeTtcbmV4cG9ydHMuZ2VuZXJhdGVBY2NvdW50U0FTUXVlcnlQYXJhbWV0ZXJzID0gZ2VuZXJhdGVBY2NvdW50U0FTUXVlcnlQYXJhbWV0ZXJzO1xuZXhwb3J0cy5nZW5lcmF0ZUJsb2JTQVNRdWVyeVBhcmFtZXRlcnMgPSBnZW5lcmF0ZUJsb2JTQVNRdWVyeVBhcmFtZXRlcnM7XG5leHBvcnRzLmdldEJsb2JTZXJ2aWNlQWNjb3VudEF1ZGllbmNlID0gZ2V0QmxvYlNlcnZpY2VBY2NvdW50QXVkaWVuY2U7XG5leHBvcnRzLmlzUGlwZWxpbmVMaWtlID0gaXNQaXBlbGluZUxpa2U7XG5leHBvcnRzLmxvZ2dlciA9IGxvZ2dlcjtcbmV4cG9ydHMubmV3UGlwZWxpbmUgPSBuZXdQaXBlbGluZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnVwbG9hZFppcFRvQmxvYlN0b3JhZ2UgPSB2b2lkIDA7XG5jb25zdCBzdG9yYWdlX2Jsb2JfMSA9IHJlcXVpcmUoXCJAYXp1cmUvc3RvcmFnZS1ibG9iXCIpO1xuY29uc3QgY29uZmlnXzEgPSByZXF1aXJlKFwiLi4vc2hhcmVkL2NvbmZpZ1wiKTtcbmNvbnN0IGNvcmUgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIkBhY3Rpb25zL2NvcmVcIikpO1xuY29uc3QgY3J5cHRvID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJjcnlwdG9cIikpO1xuY29uc3Qgc3RyZWFtID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJzdHJlYW1cIikpO1xuY29uc3QgZXJyb3JzXzEgPSByZXF1aXJlKFwiLi4vc2hhcmVkL2Vycm9yc1wiKTtcbmZ1bmN0aW9uIHVwbG9hZFppcFRvQmxvYlN0b3JhZ2UoYXV0aGVudGljYXRlZFVwbG9hZFVSTCwgemlwVXBsb2FkU3RyZWFtKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgbGV0IHVwbG9hZEJ5dGVDb3VudCA9IDA7XG4gICAgICAgIGxldCBsYXN0UHJvZ3Jlc3NUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgY29uc3QgYWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgICAgICBjb25zdCBjaHVua1RpbWVyID0gKGludGVydmFsKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoRGF0ZS5ub3coKSAtIGxhc3RQcm9ncmVzc1RpbWUgPiBpbnRlcnZhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignVXBsb2FkIHByb2dyZXNzIHN0YWxsZWQuJykpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwgaW50ZXJ2YWwpO1xuICAgICAgICAgICAgICAgIGFib3J0Q29udHJvbGxlci5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGltZXIpO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IG1heENvbmN1cnJlbmN5ID0gKDAsIGNvbmZpZ18xLmdldENvbmN1cnJlbmN5KSgpO1xuICAgICAgICBjb25zdCBidWZmZXJTaXplID0gKDAsIGNvbmZpZ18xLmdldFVwbG9hZENodW5rU2l6ZSkoKTtcbiAgICAgICAgY29uc3QgYmxvYkNsaWVudCA9IG5ldyBzdG9yYWdlX2Jsb2JfMS5CbG9iQ2xpZW50KGF1dGhlbnRpY2F0ZWRVcGxvYWRVUkwpO1xuICAgICAgICBjb25zdCBibG9ja0Jsb2JDbGllbnQgPSBibG9iQ2xpZW50LmdldEJsb2NrQmxvYkNsaWVudCgpO1xuICAgICAgICBjb3JlLmRlYnVnKGBVcGxvYWRpbmcgYXJ0aWZhY3QgemlwIHRvIGJsb2Igc3RvcmFnZSB3aXRoIG1heENvbmN1cnJlbmN5OiAke21heENvbmN1cnJlbmN5fSwgYnVmZmVyU2l6ZTogJHtidWZmZXJTaXplfWApO1xuICAgICAgICBjb25zdCB1cGxvYWRDYWxsYmFjayA9IChwcm9ncmVzcykgPT4ge1xuICAgICAgICAgICAgY29yZS5pbmZvKGBVcGxvYWRlZCBieXRlcyAke3Byb2dyZXNzLmxvYWRlZEJ5dGVzfWApO1xuICAgICAgICAgICAgdXBsb2FkQnl0ZUNvdW50ID0gcHJvZ3Jlc3MubG9hZGVkQnl0ZXM7XG4gICAgICAgICAgICBsYXN0UHJvZ3Jlc3NUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGJsb2JIVFRQSGVhZGVyczogeyBibG9iQ29udGVudFR5cGU6ICd6aXAnIH0sXG4gICAgICAgICAgICBvblByb2dyZXNzOiB1cGxvYWRDYWxsYmFjayxcbiAgICAgICAgICAgIGFib3J0U2lnbmFsOiBhYm9ydENvbnRyb2xsZXIuc2lnbmFsXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaGEyNTZIYXNoID0gdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCB1cGxvYWRTdHJlYW0gPSBuZXcgc3RyZWFtLlBhc3NUaHJvdWdoKCk7XG4gICAgICAgIGNvbnN0IGhhc2hTdHJlYW0gPSBjcnlwdG8uY3JlYXRlSGFzaCgnc2hhMjU2Jyk7XG4gICAgICAgIHppcFVwbG9hZFN0cmVhbS5waXBlKHVwbG9hZFN0cmVhbSk7IC8vIFRoaXMgc3RyZWFtIGlzIHVzZWQgZm9yIHRoZSB1cGxvYWRcbiAgICAgICAgemlwVXBsb2FkU3RyZWFtLnBpcGUoaGFzaFN0cmVhbSkuc2V0RW5jb2RpbmcoJ2hleCcpOyAvLyBUaGlzIHN0cmVhbSBpcyB1c2VkIHRvIGNvbXB1dGUgYSBoYXNoIG9mIHRoZSB6aXAgY29udGVudCB0aGF0IGdldHMgdXNlZC4gSW50ZWdyaXR5IGNoZWNrXG4gICAgICAgIGNvcmUuaW5mbygnQmVnaW5uaW5nIHVwbG9hZCBvZiBhcnRpZmFjdCBjb250ZW50IHRvIGJsb2Igc3RvcmFnZScpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgeWllbGQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgICAgICAgICBibG9ja0Jsb2JDbGllbnQudXBsb2FkU3RyZWFtKHVwbG9hZFN0cmVhbSwgYnVmZmVyU2l6ZSwgbWF4Q29uY3VycmVuY3ksIG9wdGlvbnMpLFxuICAgICAgICAgICAgICAgIGNodW5rVGltZXIoKDAsIGNvbmZpZ18xLmdldFVwbG9hZENodW5rVGltZW91dCkoKSlcbiAgICAgICAgICAgIF0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgaWYgKGVycm9yc18xLk5ldHdvcmtFcnJvci5pc05ldHdvcmtFcnJvckNvZGUoZXJyb3IgPT09IG51bGwgfHwgZXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGVycm9yLmNvZGUpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGVycm9yc18xLk5ldHdvcmtFcnJvcihlcnJvciA9PT0gbnVsbCB8fCBlcnJvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogZXJyb3IuY29kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIGFib3J0Q29udHJvbGxlci5hYm9ydCgpO1xuICAgICAgICB9XG4gICAgICAgIGNvcmUuaW5mbygnRmluaXNoZWQgdXBsb2FkaW5nIGFydGlmYWN0IGNvbnRlbnQgdG8gYmxvYiBzdG9yYWdlIScpO1xuICAgICAgICBoYXNoU3RyZWFtLmVuZCgpO1xuICAgICAgICBzaGEyNTZIYXNoID0gaGFzaFN0cmVhbS5yZWFkKCk7XG4gICAgICAgIGNvcmUuaW5mbyhgU0hBMjU2IGhhc2ggb2YgdXBsb2FkZWQgYXJ0aWZhY3QgemlwIGlzICR7c2hhMjU2SGFzaH1gKTtcbiAgICAgICAgaWYgKHVwbG9hZEJ5dGVDb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgY29yZS53YXJuaW5nKGBObyBkYXRhIHdhcyB1cGxvYWRlZCB0byBibG9iIHN0b3JhZ2UuIFJlcG9ydGVkIHVwbG9hZCBieXRlIGNvdW50IGlzIDAuYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHVwbG9hZFNpemU6IHVwbG9hZEJ5dGVDb3VudCxcbiAgICAgICAgICAgIHNoYTI1Nkhhc2hcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cbmV4cG9ydHMudXBsb2FkWmlwVG9CbG9iU3RvcmFnZSA9IHVwbG9hZFppcFRvQmxvYlN0b3JhZ2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ibG9iLXVwbG9hZC5qcy5tYXAiLAogICAgImNvbnN0IGlzV2luZG93cyA9IHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JyAmJlxuICBwcm9jZXNzICYmXG4gIHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMidcbm1vZHVsZS5leHBvcnRzID0gaXNXaW5kb3dzID8geyBzZXA6ICdcXFxcJyB9IDogeyBzZXA6ICcvJyB9XG4iLAogICAgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gYmFsYW5jZWQ7XG5mdW5jdGlvbiBiYWxhbmNlZChhLCBiLCBzdHIpIHtcbiAgaWYgKGEgaW5zdGFuY2VvZiBSZWdFeHApIGEgPSBtYXliZU1hdGNoKGEsIHN0cik7XG4gIGlmIChiIGluc3RhbmNlb2YgUmVnRXhwKSBiID0gbWF5YmVNYXRjaChiLCBzdHIpO1xuXG4gIHZhciByID0gcmFuZ2UoYSwgYiwgc3RyKTtcblxuICByZXR1cm4gciAmJiB7XG4gICAgc3RhcnQ6IHJbMF0sXG4gICAgZW5kOiByWzFdLFxuICAgIHByZTogc3RyLnNsaWNlKDAsIHJbMF0pLFxuICAgIGJvZHk6IHN0ci5zbGljZShyWzBdICsgYS5sZW5ndGgsIHJbMV0pLFxuICAgIHBvc3Q6IHN0ci5zbGljZShyWzFdICsgYi5sZW5ndGgpXG4gIH07XG59XG5cbmZ1bmN0aW9uIG1heWJlTWF0Y2gocmVnLCBzdHIpIHtcbiAgdmFyIG0gPSBzdHIubWF0Y2gocmVnKTtcbiAgcmV0dXJuIG0gPyBtWzBdIDogbnVsbDtcbn1cblxuYmFsYW5jZWQucmFuZ2UgPSByYW5nZTtcbmZ1bmN0aW9uIHJhbmdlKGEsIGIsIHN0cikge1xuICB2YXIgYmVncywgYmVnLCBsZWZ0LCByaWdodCwgcmVzdWx0O1xuICB2YXIgYWkgPSBzdHIuaW5kZXhPZihhKTtcbiAgdmFyIGJpID0gc3RyLmluZGV4T2YoYiwgYWkgKyAxKTtcbiAgdmFyIGkgPSBhaTtcblxuICBpZiAoYWkgPj0gMCAmJiBiaSA+IDApIHtcbiAgICBpZihhPT09Yikge1xuICAgICAgcmV0dXJuIFthaSwgYmldO1xuICAgIH1cbiAgICBiZWdzID0gW107XG4gICAgbGVmdCA9IHN0ci5sZW5ndGg7XG5cbiAgICB3aGlsZSAoaSA+PSAwICYmICFyZXN1bHQpIHtcbiAgICAgIGlmIChpID09IGFpKSB7XG4gICAgICAgIGJlZ3MucHVzaChpKTtcbiAgICAgICAgYWkgPSBzdHIuaW5kZXhPZihhLCBpICsgMSk7XG4gICAgICB9IGVsc2UgaWYgKGJlZ3MubGVuZ3RoID09IDEpIHtcbiAgICAgICAgcmVzdWx0ID0gWyBiZWdzLnBvcCgpLCBiaSBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYmVnID0gYmVncy5wb3AoKTtcbiAgICAgICAgaWYgKGJlZyA8IGxlZnQpIHtcbiAgICAgICAgICBsZWZ0ID0gYmVnO1xuICAgICAgICAgIHJpZ2h0ID0gYmk7XG4gICAgICAgIH1cblxuICAgICAgICBiaSA9IHN0ci5pbmRleE9mKGIsIGkgKyAxKTtcbiAgICAgIH1cblxuICAgICAgaSA9IGFpIDwgYmkgJiYgYWkgPj0gMCA/IGFpIDogYmk7XG4gICAgfVxuXG4gICAgaWYgKGJlZ3MubGVuZ3RoKSB7XG4gICAgICByZXN1bHQgPSBbIGxlZnQsIHJpZ2h0IF07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbiIsCiAgICAidmFyIGJhbGFuY2VkID0gcmVxdWlyZSgnYmFsYW5jZWQtbWF0Y2gnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBleHBhbmRUb3A7XG5cbnZhciBlc2NTbGFzaCA9ICdcXDBTTEFTSCcrTWF0aC5yYW5kb20oKSsnXFwwJztcbnZhciBlc2NPcGVuID0gJ1xcME9QRU4nK01hdGgucmFuZG9tKCkrJ1xcMCc7XG52YXIgZXNjQ2xvc2UgPSAnXFwwQ0xPU0UnK01hdGgucmFuZG9tKCkrJ1xcMCc7XG52YXIgZXNjQ29tbWEgPSAnXFwwQ09NTUEnK01hdGgucmFuZG9tKCkrJ1xcMCc7XG52YXIgZXNjUGVyaW9kID0gJ1xcMFBFUklPRCcrTWF0aC5yYW5kb20oKSsnXFwwJztcblxuZnVuY3Rpb24gbnVtZXJpYyhzdHIpIHtcbiAgcmV0dXJuIHBhcnNlSW50KHN0ciwgMTApID09IHN0clxuICAgID8gcGFyc2VJbnQoc3RyLCAxMClcbiAgICA6IHN0ci5jaGFyQ29kZUF0KDApO1xufVxuXG5mdW5jdGlvbiBlc2NhcGVCcmFjZXMoc3RyKSB7XG4gIHJldHVybiBzdHIuc3BsaXQoJ1xcXFxcXFxcJykuam9pbihlc2NTbGFzaClcbiAgICAgICAgICAgIC5zcGxpdCgnXFxcXHsnKS5qb2luKGVzY09wZW4pXG4gICAgICAgICAgICAuc3BsaXQoJ1xcXFx9Jykuam9pbihlc2NDbG9zZSlcbiAgICAgICAgICAgIC5zcGxpdCgnXFxcXCwnKS5qb2luKGVzY0NvbW1hKVxuICAgICAgICAgICAgLnNwbGl0KCdcXFxcLicpLmpvaW4oZXNjUGVyaW9kKTtcbn1cblxuZnVuY3Rpb24gdW5lc2NhcGVCcmFjZXMoc3RyKSB7XG4gIHJldHVybiBzdHIuc3BsaXQoZXNjU2xhc2gpLmpvaW4oJ1xcXFwnKVxuICAgICAgICAgICAgLnNwbGl0KGVzY09wZW4pLmpvaW4oJ3snKVxuICAgICAgICAgICAgLnNwbGl0KGVzY0Nsb3NlKS5qb2luKCd9JylcbiAgICAgICAgICAgIC5zcGxpdChlc2NDb21tYSkuam9pbignLCcpXG4gICAgICAgICAgICAuc3BsaXQoZXNjUGVyaW9kKS5qb2luKCcuJyk7XG59XG5cblxuLy8gQmFzaWNhbGx5IGp1c3Qgc3RyLnNwbGl0KFwiLFwiKSwgYnV0IGhhbmRsaW5nIGNhc2VzXG4vLyB3aGVyZSB3ZSBoYXZlIG5lc3RlZCBicmFjZWQgc2VjdGlvbnMsIHdoaWNoIHNob3VsZCBiZVxuLy8gdHJlYXRlZCBhcyBpbmRpdmlkdWFsIG1lbWJlcnMsIGxpa2Uge2Ese2IsY30sZH1cbmZ1bmN0aW9uIHBhcnNlQ29tbWFQYXJ0cyhzdHIpIHtcbiAgaWYgKCFzdHIpXG4gICAgcmV0dXJuIFsnJ107XG5cbiAgdmFyIHBhcnRzID0gW107XG4gIHZhciBtID0gYmFsYW5jZWQoJ3snLCAnfScsIHN0cik7XG5cbiAgaWYgKCFtKVxuICAgIHJldHVybiBzdHIuc3BsaXQoJywnKTtcblxuICB2YXIgcHJlID0gbS5wcmU7XG4gIHZhciBib2R5ID0gbS5ib2R5O1xuICB2YXIgcG9zdCA9IG0ucG9zdDtcbiAgdmFyIHAgPSBwcmUuc3BsaXQoJywnKTtcblxuICBwW3AubGVuZ3RoLTFdICs9ICd7JyArIGJvZHkgKyAnfSc7XG4gIHZhciBwb3N0UGFydHMgPSBwYXJzZUNvbW1hUGFydHMocG9zdCk7XG4gIGlmIChwb3N0Lmxlbmd0aCkge1xuICAgIHBbcC5sZW5ndGgtMV0gKz0gcG9zdFBhcnRzLnNoaWZ0KCk7XG4gICAgcC5wdXNoLmFwcGx5KHAsIHBvc3RQYXJ0cyk7XG4gIH1cblxuICBwYXJ0cy5wdXNoLmFwcGx5KHBhcnRzLCBwKTtcblxuICByZXR1cm4gcGFydHM7XG59XG5cbmZ1bmN0aW9uIGV4cGFuZFRvcChzdHIpIHtcbiAgaWYgKCFzdHIpXG4gICAgcmV0dXJuIFtdO1xuXG4gIC8vIEkgZG9uJ3Qga25vdyB3aHkgQmFzaCA0LjMgZG9lcyB0aGlzLCBidXQgaXQgZG9lcy5cbiAgLy8gQW55dGhpbmcgc3RhcnRpbmcgd2l0aCB7fSB3aWxsIGhhdmUgdGhlIGZpcnN0IHR3byBieXRlcyBwcmVzZXJ2ZWRcbiAgLy8gYnV0ICpvbmx5KiBhdCB0aGUgdG9wIGxldmVsLCBzbyB7fSxhfWIgd2lsbCBub3QgZXhwYW5kIHRvIGFueXRoaW5nLFxuICAvLyBidXQgYXt9LGJ9YyB3aWxsIGJlIGV4cGFuZGVkIHRvIFthfWMsYWJjXS5cbiAgLy8gT25lIGNvdWxkIGFyZ3VlIHRoYXQgdGhpcyBpcyBhIGJ1ZyBpbiBCYXNoLCBidXQgc2luY2UgdGhlIGdvYWwgb2ZcbiAgLy8gdGhpcyBtb2R1bGUgaXMgdG8gbWF0Y2ggQmFzaCdzIHJ1bGVzLCB3ZSBlc2NhcGUgYSBsZWFkaW5nIHt9XG4gIGlmIChzdHIuc3Vic3RyKDAsIDIpID09PSAne30nKSB7XG4gICAgc3RyID0gJ1xcXFx7XFxcXH0nICsgc3RyLnN1YnN0cigyKTtcbiAgfVxuXG4gIHJldHVybiBleHBhbmQoZXNjYXBlQnJhY2VzKHN0ciksIHRydWUpLm1hcCh1bmVzY2FwZUJyYWNlcyk7XG59XG5cbmZ1bmN0aW9uIGVtYnJhY2Uoc3RyKSB7XG4gIHJldHVybiAneycgKyBzdHIgKyAnfSc7XG59XG5mdW5jdGlvbiBpc1BhZGRlZChlbCkge1xuICByZXR1cm4gL14tPzBcXGQvLnRlc3QoZWwpO1xufVxuXG5mdW5jdGlvbiBsdGUoaSwgeSkge1xuICByZXR1cm4gaSA8PSB5O1xufVxuZnVuY3Rpb24gZ3RlKGksIHkpIHtcbiAgcmV0dXJuIGkgPj0geTtcbn1cblxuZnVuY3Rpb24gZXhwYW5kKHN0ciwgaXNUb3ApIHtcbiAgdmFyIGV4cGFuc2lvbnMgPSBbXTtcblxuICB2YXIgbSA9IGJhbGFuY2VkKCd7JywgJ30nLCBzdHIpO1xuICBpZiAoIW0pIHJldHVybiBbc3RyXTtcblxuICAvLyBubyBuZWVkIHRvIGV4cGFuZCBwcmUsIHNpbmNlIGl0IGlzIGd1YXJhbnRlZWQgdG8gYmUgZnJlZSBvZiBicmFjZS1zZXRzXG4gIHZhciBwcmUgPSBtLnByZTtcbiAgdmFyIHBvc3QgPSBtLnBvc3QubGVuZ3RoXG4gICAgPyBleHBhbmQobS5wb3N0LCBmYWxzZSlcbiAgICA6IFsnJ107XG5cbiAgaWYgKC9cXCQkLy50ZXN0KG0ucHJlKSkgeyAgICBcbiAgICBmb3IgKHZhciBrID0gMDsgayA8IHBvc3QubGVuZ3RoOyBrKyspIHtcbiAgICAgIHZhciBleHBhbnNpb24gPSBwcmUrICd7JyArIG0uYm9keSArICd9JyArIHBvc3Rba107XG4gICAgICBleHBhbnNpb25zLnB1c2goZXhwYW5zaW9uKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGlzTnVtZXJpY1NlcXVlbmNlID0gL14tP1xcZCtcXC5cXC4tP1xcZCsoPzpcXC5cXC4tP1xcZCspPyQvLnRlc3QobS5ib2R5KTtcbiAgICB2YXIgaXNBbHBoYVNlcXVlbmNlID0gL15bYS16QS1aXVxcLlxcLlthLXpBLVpdKD86XFwuXFwuLT9cXGQrKT8kLy50ZXN0KG0uYm9keSk7XG4gICAgdmFyIGlzU2VxdWVuY2UgPSBpc051bWVyaWNTZXF1ZW5jZSB8fCBpc0FscGhhU2VxdWVuY2U7XG4gICAgdmFyIGlzT3B0aW9ucyA9IG0uYm9keS5pbmRleE9mKCcsJykgPj0gMDtcbiAgICBpZiAoIWlzU2VxdWVuY2UgJiYgIWlzT3B0aW9ucykge1xuICAgICAgLy8ge2F9LGJ9XG4gICAgICBpZiAobS5wb3N0Lm1hdGNoKC8sLipcXH0vKSkge1xuICAgICAgICBzdHIgPSBtLnByZSArICd7JyArIG0uYm9keSArIGVzY0Nsb3NlICsgbS5wb3N0O1xuICAgICAgICByZXR1cm4gZXhwYW5kKHN0cik7XG4gICAgICB9XG4gICAgICByZXR1cm4gW3N0cl07XG4gICAgfVxuXG4gICAgdmFyIG47XG4gICAgaWYgKGlzU2VxdWVuY2UpIHtcbiAgICAgIG4gPSBtLmJvZHkuc3BsaXQoL1xcLlxcLi8pO1xuICAgIH0gZWxzZSB7XG4gICAgICBuID0gcGFyc2VDb21tYVBhcnRzKG0uYm9keSk7XG4gICAgICBpZiAobi5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgLy8geHt7YSxifX15ID09PiB4e2F9eSB4e2J9eVxuICAgICAgICBuID0gZXhwYW5kKG5bMF0sIGZhbHNlKS5tYXAoZW1icmFjZSk7XG4gICAgICAgIGlmIChuLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIHJldHVybiBwb3N0Lm1hcChmdW5jdGlvbihwKSB7XG4gICAgICAgICAgICByZXR1cm4gbS5wcmUgKyBuWzBdICsgcDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGF0IHRoaXMgcG9pbnQsIG4gaXMgdGhlIHBhcnRzLCBhbmQgd2Uga25vdyBpdCdzIG5vdCBhIGNvbW1hIHNldFxuICAgIC8vIHdpdGggYSBzaW5nbGUgZW50cnkuXG4gICAgdmFyIE47XG5cbiAgICBpZiAoaXNTZXF1ZW5jZSkge1xuICAgICAgdmFyIHggPSBudW1lcmljKG5bMF0pO1xuICAgICAgdmFyIHkgPSBudW1lcmljKG5bMV0pO1xuICAgICAgdmFyIHdpZHRoID0gTWF0aC5tYXgoblswXS5sZW5ndGgsIG5bMV0ubGVuZ3RoKVxuICAgICAgdmFyIGluY3IgPSBuLmxlbmd0aCA9PSAzXG4gICAgICAgID8gTWF0aC5hYnMobnVtZXJpYyhuWzJdKSlcbiAgICAgICAgOiAxO1xuICAgICAgdmFyIHRlc3QgPSBsdGU7XG4gICAgICB2YXIgcmV2ZXJzZSA9IHkgPCB4O1xuICAgICAgaWYgKHJldmVyc2UpIHtcbiAgICAgICAgaW5jciAqPSAtMTtcbiAgICAgICAgdGVzdCA9IGd0ZTtcbiAgICAgIH1cbiAgICAgIHZhciBwYWQgPSBuLnNvbWUoaXNQYWRkZWQpO1xuXG4gICAgICBOID0gW107XG5cbiAgICAgIGZvciAodmFyIGkgPSB4OyB0ZXN0KGksIHkpOyBpICs9IGluY3IpIHtcbiAgICAgICAgdmFyIGM7XG4gICAgICAgIGlmIChpc0FscGhhU2VxdWVuY2UpIHtcbiAgICAgICAgICBjID0gU3RyaW5nLmZyb21DaGFyQ29kZShpKTtcbiAgICAgICAgICBpZiAoYyA9PT0gJ1xcXFwnKVxuICAgICAgICAgICAgYyA9ICcnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGMgPSBTdHJpbmcoaSk7XG4gICAgICAgICAgaWYgKHBhZCkge1xuICAgICAgICAgICAgdmFyIG5lZWQgPSB3aWR0aCAtIGMubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKG5lZWQgPiAwKSB7XG4gICAgICAgICAgICAgIHZhciB6ID0gbmV3IEFycmF5KG5lZWQgKyAxKS5qb2luKCcwJyk7XG4gICAgICAgICAgICAgIGlmIChpIDwgMClcbiAgICAgICAgICAgICAgICBjID0gJy0nICsgeiArIGMuc2xpY2UoMSk7XG4gICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBjID0geiArIGM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIE4ucHVzaChjKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgTiA9IFtdO1xuXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG4ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgTi5wdXNoLmFwcGx5KE4sIGV4cGFuZChuW2pdLCBmYWxzZSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgTi5sZW5ndGg7IGorKykge1xuICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBwb3N0Lmxlbmd0aDsgaysrKSB7XG4gICAgICAgIHZhciBleHBhbnNpb24gPSBwcmUgKyBOW2pdICsgcG9zdFtrXTtcbiAgICAgICAgaWYgKCFpc1RvcCB8fCBpc1NlcXVlbmNlIHx8IGV4cGFuc2lvbilcbiAgICAgICAgICBleHBhbnNpb25zLnB1c2goZXhwYW5zaW9uKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXhwYW5zaW9ucztcbn1cblxuIiwKICAgICJjb25zdCBtaW5pbWF0Y2ggPSBtb2R1bGUuZXhwb3J0cyA9IChwLCBwYXR0ZXJuLCBvcHRpb25zID0ge30pID0+IHtcbiAgYXNzZXJ0VmFsaWRQYXR0ZXJuKHBhdHRlcm4pXG5cbiAgLy8gc2hvcnRjdXQ6IGNvbW1lbnRzIG1hdGNoIG5vdGhpbmcuXG4gIGlmICghb3B0aW9ucy5ub2NvbW1lbnQgJiYgcGF0dGVybi5jaGFyQXQoMCkgPT09ICcjJykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIG5ldyBNaW5pbWF0Y2gocGF0dGVybiwgb3B0aW9ucykubWF0Y2gocClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtaW5pbWF0Y2hcblxuY29uc3QgcGF0aCA9IHJlcXVpcmUoJy4vbGliL3BhdGguanMnKVxubWluaW1hdGNoLnNlcCA9IHBhdGguc2VwXG5cbmNvbnN0IEdMT0JTVEFSID0gU3ltYm9sKCdnbG9ic3RhciAqKicpXG5taW5pbWF0Y2guR0xPQlNUQVIgPSBHTE9CU1RBUlxuY29uc3QgZXhwYW5kID0gcmVxdWlyZSgnYnJhY2UtZXhwYW5zaW9uJylcblxuY29uc3QgcGxUeXBlcyA9IHtcbiAgJyEnOiB7IG9wZW46ICcoPzooPyEoPzonLCBjbG9zZTogJykpW14vXSo/KSd9LFxuICAnPyc6IHsgb3BlbjogJyg/OicsIGNsb3NlOiAnKT8nIH0sXG4gICcrJzogeyBvcGVuOiAnKD86JywgY2xvc2U6ICcpKycgfSxcbiAgJyonOiB7IG9wZW46ICcoPzonLCBjbG9zZTogJykqJyB9LFxuICAnQCc6IHsgb3BlbjogJyg/OicsIGNsb3NlOiAnKScgfVxufVxuXG4vLyBhbnkgc2luZ2xlIHRoaW5nIG90aGVyIHRoYW4gL1xuLy8gZG9uJ3QgbmVlZCB0byBlc2NhcGUgLyB3aGVuIHVzaW5nIG5ldyBSZWdFeHAoKVxuY29uc3QgcW1hcmsgPSAnW14vXSdcblxuLy8gKiA9PiBhbnkgbnVtYmVyIG9mIGNoYXJhY3RlcnNcbmNvbnN0IHN0YXIgPSBxbWFyayArICcqPydcblxuLy8gKiogd2hlbiBkb3RzIGFyZSBhbGxvd2VkLiAgQW55dGhpbmcgZ29lcywgZXhjZXB0IC4uIGFuZCAuXG4vLyBub3QgKF4gb3IgLyBmb2xsb3dlZCBieSBvbmUgb3IgdHdvIGRvdHMgZm9sbG93ZWQgYnkgJCBvciAvKSxcbi8vIGZvbGxvd2VkIGJ5IGFueXRoaW5nLCBhbnkgbnVtYmVyIG9mIHRpbWVzLlxuY29uc3QgdHdvU3RhckRvdCA9ICcoPzooPyEoPzpcXFxcXFwvfF4pKD86XFxcXC57MSwyfSkoJHxcXFxcXFwvKSkuKSo/J1xuXG4vLyBub3QgYSBeIG9yIC8gZm9sbG93ZWQgYnkgYSBkb3QsXG4vLyBmb2xsb3dlZCBieSBhbnl0aGluZywgYW55IG51bWJlciBvZiB0aW1lcy5cbmNvbnN0IHR3b1N0YXJOb0RvdCA9ICcoPzooPyEoPzpcXFxcXFwvfF4pXFxcXC4pLikqPydcblxuLy8gXCJhYmNcIiAtPiB7IGE6dHJ1ZSwgYjp0cnVlLCBjOnRydWUgfVxuY29uc3QgY2hhclNldCA9IHMgPT4gcy5zcGxpdCgnJykucmVkdWNlKChzZXQsIGMpID0+IHtcbiAgc2V0W2NdID0gdHJ1ZVxuICByZXR1cm4gc2V0XG59LCB7fSlcblxuLy8gY2hhcmFjdGVycyB0aGF0IG5lZWQgdG8gYmUgZXNjYXBlZCBpbiBSZWdFeHAuXG5jb25zdCByZVNwZWNpYWxzID0gY2hhclNldCgnKCkuKnt9Kz9bXV4kXFxcXCEnKVxuXG4vLyBjaGFyYWN0ZXJzIHRoYXQgaW5kaWNhdGUgd2UgaGF2ZSB0byBhZGQgdGhlIHBhdHRlcm4gc3RhcnRcbmNvbnN0IGFkZFBhdHRlcm5TdGFydFNldCA9IGNoYXJTZXQoJ1suKCcpXG5cbi8vIG5vcm1hbGl6ZXMgc2xhc2hlcy5cbmNvbnN0IHNsYXNoU3BsaXQgPSAvXFwvKy9cblxubWluaW1hdGNoLmZpbHRlciA9IChwYXR0ZXJuLCBvcHRpb25zID0ge30pID0+XG4gIChwLCBpLCBsaXN0KSA9PiBtaW5pbWF0Y2gocCwgcGF0dGVybiwgb3B0aW9ucylcblxuY29uc3QgZXh0ID0gKGEsIGIgPSB7fSkgPT4ge1xuICBjb25zdCB0ID0ge31cbiAgT2JqZWN0LmtleXMoYSkuZm9yRWFjaChrID0+IHRba10gPSBhW2tdKVxuICBPYmplY3Qua2V5cyhiKS5mb3JFYWNoKGsgPT4gdFtrXSA9IGJba10pXG4gIHJldHVybiB0XG59XG5cbm1pbmltYXRjaC5kZWZhdWx0cyA9IGRlZiA9PiB7XG4gIGlmICghZGVmIHx8IHR5cGVvZiBkZWYgIT09ICdvYmplY3QnIHx8ICFPYmplY3Qua2V5cyhkZWYpLmxlbmd0aCkge1xuICAgIHJldHVybiBtaW5pbWF0Y2hcbiAgfVxuXG4gIGNvbnN0IG9yaWcgPSBtaW5pbWF0Y2hcblxuICBjb25zdCBtID0gKHAsIHBhdHRlcm4sIG9wdGlvbnMpID0+IG9yaWcocCwgcGF0dGVybiwgZXh0KGRlZiwgb3B0aW9ucykpXG4gIG0uTWluaW1hdGNoID0gY2xhc3MgTWluaW1hdGNoIGV4dGVuZHMgb3JpZy5NaW5pbWF0Y2gge1xuICAgIGNvbnN0cnVjdG9yIChwYXR0ZXJuLCBvcHRpb25zKSB7XG4gICAgICBzdXBlcihwYXR0ZXJuLCBleHQoZGVmLCBvcHRpb25zKSlcbiAgICB9XG4gIH1cbiAgbS5NaW5pbWF0Y2guZGVmYXVsdHMgPSBvcHRpb25zID0+IG9yaWcuZGVmYXVsdHMoZXh0KGRlZiwgb3B0aW9ucykpLk1pbmltYXRjaFxuICBtLmZpbHRlciA9IChwYXR0ZXJuLCBvcHRpb25zKSA9PiBvcmlnLmZpbHRlcihwYXR0ZXJuLCBleHQoZGVmLCBvcHRpb25zKSlcbiAgbS5kZWZhdWx0cyA9IG9wdGlvbnMgPT4gb3JpZy5kZWZhdWx0cyhleHQoZGVmLCBvcHRpb25zKSlcbiAgbS5tYWtlUmUgPSAocGF0dGVybiwgb3B0aW9ucykgPT4gb3JpZy5tYWtlUmUocGF0dGVybiwgZXh0KGRlZiwgb3B0aW9ucykpXG4gIG0uYnJhY2VFeHBhbmQgPSAocGF0dGVybiwgb3B0aW9ucykgPT4gb3JpZy5icmFjZUV4cGFuZChwYXR0ZXJuLCBleHQoZGVmLCBvcHRpb25zKSlcbiAgbS5tYXRjaCA9IChsaXN0LCBwYXR0ZXJuLCBvcHRpb25zKSA9PiBvcmlnLm1hdGNoKGxpc3QsIHBhdHRlcm4sIGV4dChkZWYsIG9wdGlvbnMpKVxuXG4gIHJldHVybiBtXG59XG5cblxuXG5cblxuLy8gQnJhY2UgZXhwYW5zaW9uOlxuLy8gYXtiLGN9ZCAtPiBhYmQgYWNkXG4vLyBhe2IsfWMgLT4gYWJjIGFjXG4vLyBhezAuLjN9ZCAtPiBhMGQgYTFkIGEyZCBhM2Rcbi8vIGF7Yixje2QsZX1mfWcgLT4gYWJnIGFjZGZnIGFjZWZnXG4vLyBhe2IsY31ke2UsZn1nIC0+IGFiZGVnIGFjZGVnIGFiZGVnIGFiZGZnXG4vL1xuLy8gSW52YWxpZCBzZXRzIGFyZSBub3QgZXhwYW5kZWQuXG4vLyBhezIuLn1iIC0+IGF7Mi4ufWJcbi8vIGF7Yn1jIC0+IGF7Yn1jXG5taW5pbWF0Y2guYnJhY2VFeHBhbmQgPSAocGF0dGVybiwgb3B0aW9ucykgPT4gYnJhY2VFeHBhbmQocGF0dGVybiwgb3B0aW9ucylcblxuY29uc3QgYnJhY2VFeHBhbmQgPSAocGF0dGVybiwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gIGFzc2VydFZhbGlkUGF0dGVybihwYXR0ZXJuKVxuXG4gIC8vIFRoYW5rcyB0byBZZXRpbmcgTGkgPGh0dHBzOi8vZ2l0aHViLmNvbS95ZXRpbmdsaT4gZm9yXG4gIC8vIGltcHJvdmluZyB0aGlzIHJlZ2V4cCB0byBhdm9pZCBhIFJlRE9TIHZ1bG5lcmFiaWxpdHkuXG4gIGlmIChvcHRpb25zLm5vYnJhY2UgfHwgIS9cXHsoPzooPyFcXHspLikqXFx9Ly50ZXN0KHBhdHRlcm4pKSB7XG4gICAgLy8gc2hvcnRjdXQuIG5vIG5lZWQgdG8gZXhwYW5kLlxuICAgIHJldHVybiBbcGF0dGVybl1cbiAgfVxuXG4gIHJldHVybiBleHBhbmQocGF0dGVybilcbn1cblxuY29uc3QgTUFYX1BBVFRFUk5fTEVOR1RIID0gMTAyNCAqIDY0XG5jb25zdCBhc3NlcnRWYWxpZFBhdHRlcm4gPSBwYXR0ZXJuID0+IHtcbiAgaWYgKHR5cGVvZiBwYXR0ZXJuICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludmFsaWQgcGF0dGVybicpXG4gIH1cblxuICBpZiAocGF0dGVybi5sZW5ndGggPiBNQVhfUEFUVEVSTl9MRU5HVEgpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdwYXR0ZXJuIGlzIHRvbyBsb25nJylcbiAgfVxufVxuXG4vLyBwYXJzZSBhIGNvbXBvbmVudCBvZiB0aGUgZXhwYW5kZWQgc2V0LlxuLy8gQXQgdGhpcyBwb2ludCwgbm8gcGF0dGVybiBtYXkgY29udGFpbiBcIi9cIiBpbiBpdFxuLy8gc28gd2UncmUgZ29pbmcgdG8gcmV0dXJuIGEgMmQgYXJyYXksIHdoZXJlIGVhY2ggZW50cnkgaXMgdGhlIGZ1bGxcbi8vIHBhdHRlcm4sIHNwbGl0IG9uICcvJywgYW5kIHRoZW4gdHVybmVkIGludG8gYSByZWd1bGFyIGV4cHJlc3Npb24uXG4vLyBBIHJlZ2V4cCBpcyBtYWRlIGF0IHRoZSBlbmQgd2hpY2ggam9pbnMgZWFjaCBhcnJheSB3aXRoIGFuXG4vLyBlc2NhcGVkIC8sIGFuZCBhbm90aGVyIGZ1bGwgb25lIHdoaWNoIGpvaW5zIGVhY2ggcmVnZXhwIHdpdGggfC5cbi8vXG4vLyBGb2xsb3dpbmcgdGhlIGxlYWQgb2YgQmFzaCA0LjEsIG5vdGUgdGhhdCBcIioqXCIgb25seSBoYXMgc3BlY2lhbCBtZWFuaW5nXG4vLyB3aGVuIGl0IGlzIHRoZSAqb25seSogdGhpbmcgaW4gYSBwYXRoIHBvcnRpb24uICBPdGhlcndpc2UsIGFueSBzZXJpZXNcbi8vIG9mICogaXMgZXF1aXZhbGVudCB0byBhIHNpbmdsZSAqLiAgR2xvYnN0YXIgYmVoYXZpb3IgaXMgZW5hYmxlZCBieVxuLy8gZGVmYXVsdCwgYW5kIGNhbiBiZSBkaXNhYmxlZCBieSBzZXR0aW5nIG9wdGlvbnMubm9nbG9ic3Rhci5cbmNvbnN0IFNVQlBBUlNFID0gU3ltYm9sKCdzdWJwYXJzZScpXG5cbm1pbmltYXRjaC5tYWtlUmUgPSAocGF0dGVybiwgb3B0aW9ucykgPT5cbiAgbmV3IE1pbmltYXRjaChwYXR0ZXJuLCBvcHRpb25zIHx8IHt9KS5tYWtlUmUoKVxuXG5taW5pbWF0Y2gubWF0Y2ggPSAobGlzdCwgcGF0dGVybiwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IG1tID0gbmV3IE1pbmltYXRjaChwYXR0ZXJuLCBvcHRpb25zKVxuICBsaXN0ID0gbGlzdC5maWx0ZXIoZiA9PiBtbS5tYXRjaChmKSlcbiAgaWYgKG1tLm9wdGlvbnMubm9udWxsICYmICFsaXN0Lmxlbmd0aCkge1xuICAgIGxpc3QucHVzaChwYXR0ZXJuKVxuICB9XG4gIHJldHVybiBsaXN0XG59XG5cbi8vIHJlcGxhY2Ugc3R1ZmYgbGlrZSBcXCogd2l0aCAqXG5jb25zdCBnbG9iVW5lc2NhcGUgPSBzID0+IHMucmVwbGFjZSgvXFxcXCguKS9nLCAnJDEnKVxuY29uc3QgY2hhclVuZXNjYXBlID0gcyA9PiBzLnJlcGxhY2UoL1xcXFwoW14tXFxdXSkvZywgJyQxJylcbmNvbnN0IHJlZ0V4cEVzY2FwZSA9IHMgPT4gcy5yZXBsYWNlKC9bLVtcXF17fSgpKis/LixcXFxcXiR8I1xcc10vZywgJ1xcXFwkJicpXG5jb25zdCBicmFFeHBFc2NhcGUgPSBzID0+IHMucmVwbGFjZSgvW1tcXF1cXFxcXS9nLCAnXFxcXCQmJylcblxuY2xhc3MgTWluaW1hdGNoIHtcbiAgY29uc3RydWN0b3IgKHBhdHRlcm4sIG9wdGlvbnMpIHtcbiAgICBhc3NlcnRWYWxpZFBhdHRlcm4ocGF0dGVybilcblxuICAgIGlmICghb3B0aW9ucykgb3B0aW9ucyA9IHt9XG5cbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zXG4gICAgdGhpcy5zZXQgPSBbXVxuICAgIHRoaXMucGF0dGVybiA9IHBhdHRlcm5cbiAgICB0aGlzLndpbmRvd3NQYXRoc05vRXNjYXBlID0gISFvcHRpb25zLndpbmRvd3NQYXRoc05vRXNjYXBlIHx8XG4gICAgICBvcHRpb25zLmFsbG93V2luZG93c0VzY2FwZSA9PT0gZmFsc2VcbiAgICBpZiAodGhpcy53aW5kb3dzUGF0aHNOb0VzY2FwZSkge1xuICAgICAgdGhpcy5wYXR0ZXJuID0gdGhpcy5wYXR0ZXJuLnJlcGxhY2UoL1xcXFwvZywgJy8nKVxuICAgIH1cbiAgICB0aGlzLnJlZ2V4cCA9IG51bGxcbiAgICB0aGlzLm5lZ2F0ZSA9IGZhbHNlXG4gICAgdGhpcy5jb21tZW50ID0gZmFsc2VcbiAgICB0aGlzLmVtcHR5ID0gZmFsc2VcbiAgICB0aGlzLnBhcnRpYWwgPSAhIW9wdGlvbnMucGFydGlhbFxuXG4gICAgLy8gbWFrZSB0aGUgc2V0IG9mIHJlZ2V4cHMgZXRjLlxuICAgIHRoaXMubWFrZSgpXG4gIH1cblxuICBkZWJ1ZyAoKSB7fVxuXG4gIG1ha2UgKCkge1xuICAgIGNvbnN0IHBhdHRlcm4gPSB0aGlzLnBhdHRlcm5cbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zXG5cbiAgICAvLyBlbXB0eSBwYXR0ZXJucyBhbmQgY29tbWVudHMgbWF0Y2ggbm90aGluZy5cbiAgICBpZiAoIW9wdGlvbnMubm9jb21tZW50ICYmIHBhdHRlcm4uY2hhckF0KDApID09PSAnIycpIHtcbiAgICAgIHRoaXMuY29tbWVudCA9IHRydWVcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoIXBhdHRlcm4pIHtcbiAgICAgIHRoaXMuZW1wdHkgPSB0cnVlXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBzdGVwIDE6IGZpZ3VyZSBvdXQgbmVnYXRpb24sIGV0Yy5cbiAgICB0aGlzLnBhcnNlTmVnYXRlKClcblxuICAgIC8vIHN0ZXAgMjogZXhwYW5kIGJyYWNlc1xuICAgIGxldCBzZXQgPSB0aGlzLmdsb2JTZXQgPSB0aGlzLmJyYWNlRXhwYW5kKClcblxuICAgIGlmIChvcHRpb25zLmRlYnVnKSB0aGlzLmRlYnVnID0gKC4uLmFyZ3MpID0+IGNvbnNvbGUuZXJyb3IoLi4uYXJncylcblxuICAgIHRoaXMuZGVidWcodGhpcy5wYXR0ZXJuLCBzZXQpXG5cbiAgICAvLyBzdGVwIDM6IG5vdyB3ZSBoYXZlIGEgc2V0LCBzbyB0dXJuIGVhY2ggb25lIGludG8gYSBzZXJpZXMgb2YgcGF0aC1wb3J0aW9uXG4gICAgLy8gbWF0Y2hpbmcgcGF0dGVybnMuXG4gICAgLy8gVGhlc2Ugd2lsbCBiZSByZWdleHBzLCBleGNlcHQgaW4gdGhlIGNhc2Ugb2YgXCIqKlwiLCB3aGljaCBpc1xuICAgIC8vIHNldCB0byB0aGUgR0xPQlNUQVIgb2JqZWN0IGZvciBnbG9ic3RhciBiZWhhdmlvcixcbiAgICAvLyBhbmQgd2lsbCBub3QgY29udGFpbiBhbnkgLyBjaGFyYWN0ZXJzXG4gICAgc2V0ID0gdGhpcy5nbG9iUGFydHMgPSBzZXQubWFwKHMgPT4gcy5zcGxpdChzbGFzaFNwbGl0KSlcblxuICAgIHRoaXMuZGVidWcodGhpcy5wYXR0ZXJuLCBzZXQpXG5cbiAgICAvLyBnbG9iIC0tPiByZWdleHBzXG4gICAgc2V0ID0gc2V0Lm1hcCgocywgc2ksIHNldCkgPT4gcy5tYXAodGhpcy5wYXJzZSwgdGhpcykpXG5cbiAgICB0aGlzLmRlYnVnKHRoaXMucGF0dGVybiwgc2V0KVxuXG4gICAgLy8gZmlsdGVyIG91dCBldmVyeXRoaW5nIHRoYXQgZGlkbid0IGNvbXBpbGUgcHJvcGVybHkuXG4gICAgc2V0ID0gc2V0LmZpbHRlcihzID0+IHMuaW5kZXhPZihmYWxzZSkgPT09IC0xKVxuXG4gICAgdGhpcy5kZWJ1Zyh0aGlzLnBhdHRlcm4sIHNldClcblxuICAgIHRoaXMuc2V0ID0gc2V0XG4gIH1cblxuICBwYXJzZU5lZ2F0ZSAoKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5ub25lZ2F0ZSkgcmV0dXJuXG5cbiAgICBjb25zdCBwYXR0ZXJuID0gdGhpcy5wYXR0ZXJuXG4gICAgbGV0IG5lZ2F0ZSA9IGZhbHNlXG4gICAgbGV0IG5lZ2F0ZU9mZnNldCA9IDBcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0dGVybi5sZW5ndGggJiYgcGF0dGVybi5jaGFyQXQoaSkgPT09ICchJzsgaSsrKSB7XG4gICAgICBuZWdhdGUgPSAhbmVnYXRlXG4gICAgICBuZWdhdGVPZmZzZXQrK1xuICAgIH1cblxuICAgIGlmIChuZWdhdGVPZmZzZXQpIHRoaXMucGF0dGVybiA9IHBhdHRlcm4uc2xpY2UobmVnYXRlT2Zmc2V0KVxuICAgIHRoaXMubmVnYXRlID0gbmVnYXRlXG4gIH1cblxuICAvLyBzZXQgcGFydGlhbCB0byB0cnVlIHRvIHRlc3QgaWYsIGZvciBleGFtcGxlLFxuICAvLyBcIi9hL2JcIiBtYXRjaGVzIHRoZSBzdGFydCBvZiBcIi8qL2IvKi9kXCJcbiAgLy8gUGFydGlhbCBtZWFucywgaWYgeW91IHJ1biBvdXQgb2YgZmlsZSBiZWZvcmUgeW91IHJ1blxuICAvLyBvdXQgb2YgcGF0dGVybiwgdGhlbiB0aGF0J3MgZmluZSwgYXMgbG9uZyBhcyBhbGxcbiAgLy8gdGhlIHBhcnRzIG1hdGNoLlxuICBtYXRjaE9uZSAoZmlsZSwgcGF0dGVybiwgcGFydGlhbCkge1xuICAgIHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zXG5cbiAgICB0aGlzLmRlYnVnKCdtYXRjaE9uZScsXG4gICAgICB7ICd0aGlzJzogdGhpcywgZmlsZTogZmlsZSwgcGF0dGVybjogcGF0dGVybiB9KVxuXG4gICAgdGhpcy5kZWJ1ZygnbWF0Y2hPbmUnLCBmaWxlLmxlbmd0aCwgcGF0dGVybi5sZW5ndGgpXG5cbiAgICBmb3IgKHZhciBmaSA9IDAsXG4gICAgICAgIHBpID0gMCxcbiAgICAgICAgZmwgPSBmaWxlLmxlbmd0aCxcbiAgICAgICAgcGwgPSBwYXR0ZXJuLmxlbmd0aFxuICAgICAgICA7IChmaSA8IGZsKSAmJiAocGkgPCBwbClcbiAgICAgICAgOyBmaSsrLCBwaSsrKSB7XG4gICAgICB0aGlzLmRlYnVnKCdtYXRjaE9uZSBsb29wJylcbiAgICAgIHZhciBwID0gcGF0dGVybltwaV1cbiAgICAgIHZhciBmID0gZmlsZVtmaV1cblxuICAgICAgdGhpcy5kZWJ1ZyhwYXR0ZXJuLCBwLCBmKVxuXG4gICAgICAvLyBzaG91bGQgYmUgaW1wb3NzaWJsZS5cbiAgICAgIC8vIHNvbWUgaW52YWxpZCByZWdleHAgc3R1ZmYgaW4gdGhlIHNldC5cbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKHAgPT09IGZhbHNlKSByZXR1cm4gZmFsc2VcblxuICAgICAgaWYgKHAgPT09IEdMT0JTVEFSKSB7XG4gICAgICAgIHRoaXMuZGVidWcoJ0dMT0JTVEFSJywgW3BhdHRlcm4sIHAsIGZdKVxuXG4gICAgICAgIC8vIFwiKipcIlxuICAgICAgICAvLyBhLyoqL2IvKiovYyB3b3VsZCBtYXRjaCB0aGUgZm9sbG93aW5nOlxuICAgICAgICAvLyBhL2IveC95L3ovY1xuICAgICAgICAvLyBhL3gveS96L2IvY1xuICAgICAgICAvLyBhL2IveC9iL3gvY1xuICAgICAgICAvLyBhL2IvY1xuICAgICAgICAvLyBUbyBkbyB0aGlzLCB0YWtlIHRoZSByZXN0IG9mIHRoZSBwYXR0ZXJuIGFmdGVyXG4gICAgICAgIC8vIHRoZSAqKiwgYW5kIHNlZSBpZiBpdCB3b3VsZCBtYXRjaCB0aGUgZmlsZSByZW1haW5kZXIuXG4gICAgICAgIC8vIElmIHNvLCByZXR1cm4gc3VjY2Vzcy5cbiAgICAgICAgLy8gSWYgbm90LCB0aGUgKiogXCJzd2FsbG93c1wiIGEgc2VnbWVudCwgYW5kIHRyeSBhZ2Fpbi5cbiAgICAgICAgLy8gVGhpcyBpcyByZWN1cnNpdmVseSBhd2Z1bC5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gYS8qKi9iLyoqL2MgbWF0Y2hpbmcgYS9iL3gveS96L2NcbiAgICAgICAgLy8gLSBhIG1hdGNoZXMgYVxuICAgICAgICAvLyAtIGRvdWJsZXN0YXJcbiAgICAgICAgLy8gICAtIG1hdGNoT25lKGIveC95L3ovYywgYi8qKi9jKVxuICAgICAgICAvLyAgICAgLSBiIG1hdGNoZXMgYlxuICAgICAgICAvLyAgICAgLSBkb3VibGVzdGFyXG4gICAgICAgIC8vICAgICAgIC0gbWF0Y2hPbmUoeC95L3ovYywgYykgLT4gbm9cbiAgICAgICAgLy8gICAgICAgLSBtYXRjaE9uZSh5L3ovYywgYykgLT4gbm9cbiAgICAgICAgLy8gICAgICAgLSBtYXRjaE9uZSh6L2MsIGMpIC0+IG5vXG4gICAgICAgIC8vICAgICAgIC0gbWF0Y2hPbmUoYywgYykgeWVzLCBoaXRcbiAgICAgICAgdmFyIGZyID0gZmlcbiAgICAgICAgdmFyIHByID0gcGkgKyAxXG4gICAgICAgIGlmIChwciA9PT0gcGwpIHtcbiAgICAgICAgICB0aGlzLmRlYnVnKCcqKiBhdCB0aGUgZW5kJylcbiAgICAgICAgICAvLyBhICoqIGF0IHRoZSBlbmQgd2lsbCBqdXN0IHN3YWxsb3cgdGhlIHJlc3QuXG4gICAgICAgICAgLy8gV2UgaGF2ZSBmb3VuZCBhIG1hdGNoLlxuICAgICAgICAgIC8vIGhvd2V2ZXIsIGl0IHdpbGwgbm90IHN3YWxsb3cgLy54LCB1bmxlc3NcbiAgICAgICAgICAvLyBvcHRpb25zLmRvdCBpcyBzZXQuXG4gICAgICAgICAgLy8gLiBhbmQgLi4gYXJlICpuZXZlciogbWF0Y2hlZCBieSAqKiwgZm9yIGV4cGxvc2l2ZWx5XG4gICAgICAgICAgLy8gZXhwb25lbnRpYWwgcmVhc29ucy5cbiAgICAgICAgICBmb3IgKDsgZmkgPCBmbDsgZmkrKykge1xuICAgICAgICAgICAgaWYgKGZpbGVbZmldID09PSAnLicgfHwgZmlsZVtmaV0gPT09ICcuLicgfHxcbiAgICAgICAgICAgICAgKCFvcHRpb25zLmRvdCAmJiBmaWxlW2ZpXS5jaGFyQXQoMCkgPT09ICcuJykpIHJldHVybiBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gb2ssIGxldCdzIHNlZSBpZiB3ZSBjYW4gc3dhbGxvdyB3aGF0ZXZlciB3ZSBjYW4uXG4gICAgICAgIHdoaWxlIChmciA8IGZsKSB7XG4gICAgICAgICAgdmFyIHN3YWxsb3dlZSA9IGZpbGVbZnJdXG5cbiAgICAgICAgICB0aGlzLmRlYnVnKCdcXG5nbG9ic3RhciB3aGlsZScsIGZpbGUsIGZyLCBwYXR0ZXJuLCBwciwgc3dhbGxvd2VlKVxuXG4gICAgICAgICAgLy8gWFhYIHJlbW92ZSB0aGlzIHNsaWNlLiAgSnVzdCBwYXNzIHRoZSBzdGFydCBpbmRleC5cbiAgICAgICAgICBpZiAodGhpcy5tYXRjaE9uZShmaWxlLnNsaWNlKGZyKSwgcGF0dGVybi5zbGljZShwciksIHBhcnRpYWwpKSB7XG4gICAgICAgICAgICB0aGlzLmRlYnVnKCdnbG9ic3RhciBmb3VuZCBtYXRjaCEnLCBmciwgZmwsIHN3YWxsb3dlZSlcbiAgICAgICAgICAgIC8vIGZvdW5kIGEgbWF0Y2guXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBjYW4ndCBzd2FsbG93IFwiLlwiIG9yIFwiLi5cIiBldmVyLlxuICAgICAgICAgICAgLy8gY2FuIG9ubHkgc3dhbGxvdyBcIi5mb29cIiB3aGVuIGV4cGxpY2l0bHkgYXNrZWQuXG4gICAgICAgICAgICBpZiAoc3dhbGxvd2VlID09PSAnLicgfHwgc3dhbGxvd2VlID09PSAnLi4nIHx8XG4gICAgICAgICAgICAgICghb3B0aW9ucy5kb3QgJiYgc3dhbGxvd2VlLmNoYXJBdCgwKSA9PT0gJy4nKSkge1xuICAgICAgICAgICAgICB0aGlzLmRlYnVnKCdkb3QgZGV0ZWN0ZWQhJywgZmlsZSwgZnIsIHBhdHRlcm4sIHByKVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyAqKiBzd2FsbG93cyBhIHNlZ21lbnQsIGFuZCBjb250aW51ZS5cbiAgICAgICAgICAgIHRoaXMuZGVidWcoJ2dsb2JzdGFyIHN3YWxsb3cgYSBzZWdtZW50LCBhbmQgY29udGludWUnKVxuICAgICAgICAgICAgZnIrK1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG5vIG1hdGNoIHdhcyBmb3VuZC5cbiAgICAgICAgLy8gSG93ZXZlciwgaW4gcGFydGlhbCBtb2RlLCB3ZSBjYW4ndCBzYXkgdGhpcyBpcyBuZWNlc3NhcmlseSBvdmVyLlxuICAgICAgICAvLyBJZiB0aGVyZSdzIG1vcmUgKnBhdHRlcm4qIGxlZnQsIHRoZW5cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmIChwYXJ0aWFsKSB7XG4gICAgICAgICAgLy8gcmFuIG91dCBvZiBmaWxlXG4gICAgICAgICAgdGhpcy5kZWJ1ZygnXFxuPj4+IG5vIG1hdGNoLCBwYXJ0aWFsPycsIGZpbGUsIGZyLCBwYXR0ZXJuLCBwcilcbiAgICAgICAgICBpZiAoZnIgPT09IGZsKSByZXR1cm4gdHJ1ZVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuXG4gICAgICAvLyBzb21ldGhpbmcgb3RoZXIgdGhhbiAqKlxuICAgICAgLy8gbm9uLW1hZ2ljIHBhdHRlcm5zIGp1c3QgaGF2ZSB0byBtYXRjaCBleGFjdGx5XG4gICAgICAvLyBwYXR0ZXJucyB3aXRoIG1hZ2ljIGhhdmUgYmVlbiB0dXJuZWQgaW50byByZWdleHBzLlxuICAgICAgdmFyIGhpdFxuICAgICAgaWYgKHR5cGVvZiBwID09PSAnc3RyaW5nJykge1xuICAgICAgICBoaXQgPSBmID09PSBwXG4gICAgICAgIHRoaXMuZGVidWcoJ3N0cmluZyBtYXRjaCcsIHAsIGYsIGhpdClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhpdCA9IGYubWF0Y2gocClcbiAgICAgICAgdGhpcy5kZWJ1ZygncGF0dGVybiBtYXRjaCcsIHAsIGYsIGhpdClcbiAgICAgIH1cblxuICAgICAgaWYgKCFoaXQpIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIC8vIE5vdGU6IGVuZGluZyBpbiAvIG1lYW5zIHRoYXQgd2UnbGwgZ2V0IGEgZmluYWwgXCJcIlxuICAgIC8vIGF0IHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4uICBUaGlzIGNhbiBvbmx5IG1hdGNoIGFcbiAgICAvLyBjb3JyZXNwb25kaW5nIFwiXCIgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZS5cbiAgICAvLyBJZiB0aGUgZmlsZSBlbmRzIGluIC8sIHRoZW4gaXQgY2FuIG9ubHkgbWF0Y2ggYVxuICAgIC8vIGEgcGF0dGVybiB0aGF0IGVuZHMgaW4gLywgdW5sZXNzIHRoZSBwYXR0ZXJuIGp1c3RcbiAgICAvLyBkb2Vzbid0IGhhdmUgYW55IG1vcmUgZm9yIGl0LiBCdXQsIGEvYi8gc2hvdWxkICpub3QqXG4gICAgLy8gbWF0Y2ggXCJhL2IvKlwiLCBldmVuIHRob3VnaCBcIlwiIG1hdGNoZXMgYWdhaW5zdCB0aGVcbiAgICAvLyBbXi9dKj8gcGF0dGVybiwgZXhjZXB0IGluIHBhcnRpYWwgbW9kZSwgd2hlcmUgaXQgbWlnaHRcbiAgICAvLyBzaW1wbHkgbm90IGJlIHJlYWNoZWQgeWV0LlxuICAgIC8vIEhvd2V2ZXIsIGEvYi8gc2hvdWxkIHN0aWxsIHNhdGlzZnkgYS8qXG5cbiAgICAvLyBub3cgZWl0aGVyIHdlIGZlbGwgb2ZmIHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4sIG9yIHdlJ3JlIGRvbmUuXG4gICAgaWYgKGZpID09PSBmbCAmJiBwaSA9PT0gcGwpIHtcbiAgICAgIC8vIHJhbiBvdXQgb2YgcGF0dGVybiBhbmQgZmlsZW5hbWUgYXQgdGhlIHNhbWUgdGltZS5cbiAgICAgIC8vIGFuIGV4YWN0IGhpdCFcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSBlbHNlIGlmIChmaSA9PT0gZmwpIHtcbiAgICAgIC8vIHJhbiBvdXQgb2YgZmlsZSwgYnV0IHN0aWxsIGhhZCBwYXR0ZXJuIGxlZnQuXG4gICAgICAvLyB0aGlzIGlzIG9rIGlmIHdlJ3JlIGRvaW5nIHRoZSBtYXRjaCBhcyBwYXJ0IG9mXG4gICAgICAvLyBhIGdsb2IgZnMgdHJhdmVyc2FsLlxuICAgICAgcmV0dXJuIHBhcnRpYWxcbiAgICB9IGVsc2UgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi8gaWYgKHBpID09PSBwbCkge1xuICAgICAgLy8gcmFuIG91dCBvZiBwYXR0ZXJuLCBzdGlsbCBoYXZlIGZpbGUgbGVmdC5cbiAgICAgIC8vIHRoaXMgaXMgb25seSBhY2NlcHRhYmxlIGlmIHdlJ3JlIG9uIHRoZSB2ZXJ5IGxhc3RcbiAgICAgIC8vIGVtcHR5IHNlZ21lbnQgb2YgYSBmaWxlIHdpdGggYSB0cmFpbGluZyBzbGFzaC5cbiAgICAgIC8vIGEvKiBzaG91bGQgbWF0Y2ggYS9iL1xuICAgICAgcmV0dXJuIChmaSA9PT0gZmwgLSAxKSAmJiAoZmlsZVtmaV0gPT09ICcnKVxuICAgIH1cblxuICAgIC8vIHNob3VsZCBiZSB1bnJlYWNoYWJsZS5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHRocm93IG5ldyBFcnJvcignd3RmPycpXG4gIH1cblxuICBicmFjZUV4cGFuZCAoKSB7XG4gICAgcmV0dXJuIGJyYWNlRXhwYW5kKHRoaXMucGF0dGVybiwgdGhpcy5vcHRpb25zKVxuICB9XG5cbiAgcGFyc2UgKHBhdHRlcm4sIGlzU3ViKSB7XG4gICAgYXNzZXJ0VmFsaWRQYXR0ZXJuKHBhdHRlcm4pXG5cbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zXG5cbiAgICAvLyBzaG9ydGN1dHNcbiAgICBpZiAocGF0dGVybiA9PT0gJyoqJykge1xuICAgICAgaWYgKCFvcHRpb25zLm5vZ2xvYnN0YXIpXG4gICAgICAgIHJldHVybiBHTE9CU1RBUlxuICAgICAgZWxzZVxuICAgICAgICBwYXR0ZXJuID0gJyonXG4gICAgfVxuICAgIGlmIChwYXR0ZXJuID09PSAnJykgcmV0dXJuICcnXG5cbiAgICBsZXQgcmUgPSAnJ1xuICAgIGxldCBoYXNNYWdpYyA9IGZhbHNlXG4gICAgbGV0IGVzY2FwaW5nID0gZmFsc2VcbiAgICAvLyA/ID0+IG9uZSBzaW5nbGUgY2hhcmFjdGVyXG4gICAgY29uc3QgcGF0dGVybkxpc3RTdGFjayA9IFtdXG4gICAgY29uc3QgbmVnYXRpdmVMaXN0cyA9IFtdXG4gICAgbGV0IHN0YXRlQ2hhclxuICAgIGxldCBpbkNsYXNzID0gZmFsc2VcbiAgICBsZXQgcmVDbGFzc1N0YXJ0ID0gLTFcbiAgICBsZXQgY2xhc3NTdGFydCA9IC0xXG4gICAgbGV0IGNzXG4gICAgbGV0IHBsXG4gICAgbGV0IHNwXG4gICAgLy8gLiBhbmQgLi4gbmV2ZXIgbWF0Y2ggYW55dGhpbmcgdGhhdCBkb2Vzbid0IHN0YXJ0IHdpdGggLixcbiAgICAvLyBldmVuIHdoZW4gb3B0aW9ucy5kb3QgaXMgc2V0LiAgSG93ZXZlciwgaWYgdGhlIHBhdHRlcm5cbiAgICAvLyBzdGFydHMgd2l0aCAuLCB0aGVuIHRyYXZlcnNhbCBwYXR0ZXJucyBjYW4gbWF0Y2guXG4gICAgbGV0IGRvdFRyYXZBbGxvd2VkID0gcGF0dGVybi5jaGFyQXQoMCkgPT09ICcuJ1xuICAgIGxldCBkb3RGaWxlQWxsb3dlZCA9IG9wdGlvbnMuZG90IHx8IGRvdFRyYXZBbGxvd2VkXG4gICAgY29uc3QgcGF0dGVyblN0YXJ0ID0gKCkgPT5cbiAgICAgIGRvdFRyYXZBbGxvd2VkXG4gICAgICAgID8gJydcbiAgICAgICAgOiBkb3RGaWxlQWxsb3dlZFxuICAgICAgICA/ICcoPyEoPzpefFxcXFwvKVxcXFwuezEsMn0oPzokfFxcXFwvKSknXG4gICAgICAgIDogJyg/IVxcXFwuKSdcbiAgICBjb25zdCBzdWJQYXR0ZXJuU3RhcnQgPSAocCkgPT5cbiAgICAgIHAuY2hhckF0KDApID09PSAnLidcbiAgICAgICAgPyAnJ1xuICAgICAgICA6IG9wdGlvbnMuZG90XG4gICAgICAgID8gJyg/ISg/Ol58XFxcXC8pXFxcXC57MSwyfSg/OiR8XFxcXC8pKSdcbiAgICAgICAgOiAnKD8hXFxcXC4pJ1xuXG5cbiAgICBjb25zdCBjbGVhclN0YXRlQ2hhciA9ICgpID0+IHtcbiAgICAgIGlmIChzdGF0ZUNoYXIpIHtcbiAgICAgICAgLy8gd2UgaGFkIHNvbWUgc3RhdGUtdHJhY2tpbmcgY2hhcmFjdGVyXG4gICAgICAgIC8vIHRoYXQgd2Fzbid0IGNvbnN1bWVkIGJ5IHRoaXMgcGFzcy5cbiAgICAgICAgc3dpdGNoIChzdGF0ZUNoYXIpIHtcbiAgICAgICAgICBjYXNlICcqJzpcbiAgICAgICAgICAgIHJlICs9IHN0YXJcbiAgICAgICAgICAgIGhhc01hZ2ljID0gdHJ1ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSAnPyc6XG4gICAgICAgICAgICByZSArPSBxbWFya1xuICAgICAgICAgICAgaGFzTWFnaWMgPSB0cnVlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmUgKz0gJ1xcXFwnICsgc3RhdGVDaGFyXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRlYnVnKCdjbGVhclN0YXRlQ2hhciAlaiAlaicsIHN0YXRlQ2hhciwgcmUpXG4gICAgICAgIHN0YXRlQ2hhciA9IGZhbHNlXG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDAsIGM7IChpIDwgcGF0dGVybi5sZW5ndGgpICYmIChjID0gcGF0dGVybi5jaGFyQXQoaSkpOyBpKyspIHtcbiAgICAgIHRoaXMuZGVidWcoJyVzXFx0JXMgJXMgJWonLCBwYXR0ZXJuLCBpLCByZSwgYylcblxuICAgICAgLy8gc2tpcCBvdmVyIGFueSB0aGF0IGFyZSBlc2NhcGVkLlxuICAgICAgaWYgKGVzY2FwaW5nKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0IC0gY29tcGxldGVseSBub3QgYWxsb3dlZCwgZXZlbiBlc2NhcGVkLiAqL1xuICAgICAgICBpZiAoYyA9PT0gJy8nKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVTcGVjaWFsc1tjXSkge1xuICAgICAgICAgIHJlICs9ICdcXFxcJ1xuICAgICAgICB9XG4gICAgICAgIHJlICs9IGNcbiAgICAgICAgZXNjYXBpbmcgPSBmYWxzZVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGMpIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgY2FzZSAnLyc6IHtcbiAgICAgICAgICAvLyBTaG91bGQgYWxyZWFkeSBiZSBwYXRoLXNwbGl0IGJ5IG5vdy5cbiAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgJ1xcXFwnOlxuICAgICAgICAgIGlmIChpbkNsYXNzICYmIHBhdHRlcm4uY2hhckF0KGkgKyAxKSA9PT0gJy0nKSB7XG4gICAgICAgICAgICByZSArPSBjXG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNsZWFyU3RhdGVDaGFyKClcbiAgICAgICAgICBlc2NhcGluZyA9IHRydWVcbiAgICAgICAgY29udGludWVcblxuICAgICAgICAvLyB0aGUgdmFyaW91cyBzdGF0ZUNoYXIgdmFsdWVzXG4gICAgICAgIC8vIGZvciB0aGUgXCJleHRnbG9iXCIgc3R1ZmYuXG4gICAgICAgIGNhc2UgJz8nOlxuICAgICAgICBjYXNlICcqJzpcbiAgICAgICAgY2FzZSAnKyc6XG4gICAgICAgIGNhc2UgJ0AnOlxuICAgICAgICBjYXNlICchJzpcbiAgICAgICAgICB0aGlzLmRlYnVnKCclc1xcdCVzICVzICVqIDwtLSBzdGF0ZUNoYXInLCBwYXR0ZXJuLCBpLCByZSwgYylcblxuICAgICAgICAgIC8vIGFsbCBvZiB0aG9zZSBhcmUgbGl0ZXJhbHMgaW5zaWRlIGEgY2xhc3MsIGV4Y2VwdCB0aGF0XG4gICAgICAgICAgLy8gdGhlIGdsb2IgWyFhXSBtZWFucyBbXmFdIGluIHJlZ2V4cFxuICAgICAgICAgIGlmIChpbkNsYXNzKSB7XG4gICAgICAgICAgICB0aGlzLmRlYnVnKCcgIGluIGNsYXNzJylcbiAgICAgICAgICAgIGlmIChjID09PSAnIScgJiYgaSA9PT0gY2xhc3NTdGFydCArIDEpIGMgPSAnXidcbiAgICAgICAgICAgIHJlICs9IGNcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gaWYgd2UgYWxyZWFkeSBoYXZlIGEgc3RhdGVDaGFyLCB0aGVuIGl0IG1lYW5zXG4gICAgICAgICAgLy8gdGhhdCB0aGVyZSB3YXMgc29tZXRoaW5nIGxpa2UgKiogb3IgKz8gaW4gdGhlcmUuXG4gICAgICAgICAgLy8gSGFuZGxlIHRoZSBzdGF0ZUNoYXIsIHRoZW4gcHJvY2VlZCB3aXRoIHRoaXMgb25lLlxuICAgICAgICAgIHRoaXMuZGVidWcoJ2NhbGwgY2xlYXJTdGF0ZUNoYXIgJWonLCBzdGF0ZUNoYXIpXG4gICAgICAgICAgY2xlYXJTdGF0ZUNoYXIoKVxuICAgICAgICAgIHN0YXRlQ2hhciA9IGNcbiAgICAgICAgICAvLyBpZiBleHRnbG9iIGlzIGRpc2FibGVkLCB0aGVuICsoYXNkZnxmb28pIGlzbid0IGEgdGhpbmcuXG4gICAgICAgICAgLy8ganVzdCBjbGVhciB0aGUgc3RhdGVjaGFyICpub3cqLCByYXRoZXIgdGhhbiBldmVuIGRpdmluZyBpbnRvXG4gICAgICAgICAgLy8gdGhlIHBhdHRlcm5MaXN0IHN0dWZmLlxuICAgICAgICAgIGlmIChvcHRpb25zLm5vZXh0KSBjbGVhclN0YXRlQ2hhcigpXG4gICAgICAgIGNvbnRpbnVlXG5cbiAgICAgICAgY2FzZSAnKCc6IHtcbiAgICAgICAgICBpZiAoaW5DbGFzcykge1xuICAgICAgICAgICAgcmUgKz0gJygnXG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghc3RhdGVDaGFyKSB7XG4gICAgICAgICAgICByZSArPSAnXFxcXCgnXG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHBsRW50cnkgPSB7XG4gICAgICAgICAgICB0eXBlOiBzdGF0ZUNoYXIsXG4gICAgICAgICAgICBzdGFydDogaSAtIDEsXG4gICAgICAgICAgICByZVN0YXJ0OiByZS5sZW5ndGgsXG4gICAgICAgICAgICBvcGVuOiBwbFR5cGVzW3N0YXRlQ2hhcl0ub3BlbixcbiAgICAgICAgICAgIGNsb3NlOiBwbFR5cGVzW3N0YXRlQ2hhcl0uY2xvc2UsXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZGVidWcodGhpcy5wYXR0ZXJuLCAnXFx0JywgcGxFbnRyeSlcbiAgICAgICAgICBwYXR0ZXJuTGlzdFN0YWNrLnB1c2gocGxFbnRyeSlcbiAgICAgICAgICAvLyBuZWdhdGlvbiBpcyAoPzooPyEoPzpqcykoPzo8cmVzdD4pKVteL10qKVxuICAgICAgICAgIHJlICs9IHBsRW50cnkub3BlblxuICAgICAgICAgIC8vIG5leHQgZW50cnkgc3RhcnRzIHdpdGggYSBkb3QgbWF5YmU/XG4gICAgICAgICAgaWYgKHBsRW50cnkuc3RhcnQgPT09IDAgJiYgcGxFbnRyeS50eXBlICE9PSAnIScpIHtcbiAgICAgICAgICAgIGRvdFRyYXZBbGxvd2VkID0gdHJ1ZVxuICAgICAgICAgICAgcmUgKz0gc3ViUGF0dGVyblN0YXJ0KHBhdHRlcm4uc2xpY2UoaSArIDEpKVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmRlYnVnKCdwbFR5cGUgJWogJWonLCBzdGF0ZUNoYXIsIHJlKVxuICAgICAgICAgIHN0YXRlQ2hhciA9IGZhbHNlXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgJyknOiB7XG4gICAgICAgICAgY29uc3QgcGxFbnRyeSA9IHBhdHRlcm5MaXN0U3RhY2tbcGF0dGVybkxpc3RTdGFjay5sZW5ndGggLSAxXVxuICAgICAgICAgIGlmIChpbkNsYXNzIHx8ICFwbEVudHJ5KSB7XG4gICAgICAgICAgICByZSArPSAnXFxcXCknXG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cbiAgICAgICAgICBwYXR0ZXJuTGlzdFN0YWNrLnBvcCgpXG5cbiAgICAgICAgICAvLyBjbG9zaW5nIGFuIGV4dGdsb2JcbiAgICAgICAgICBjbGVhclN0YXRlQ2hhcigpXG4gICAgICAgICAgaGFzTWFnaWMgPSB0cnVlXG4gICAgICAgICAgcGwgPSBwbEVudHJ5XG4gICAgICAgICAgLy8gbmVnYXRpb24gaXMgKD86KD8hanMpW14vXSopXG4gICAgICAgICAgLy8gVGhlIG90aGVycyBhcmUgKD86PHBhdHRlcm4+KTx0eXBlPlxuICAgICAgICAgIHJlICs9IHBsLmNsb3NlXG4gICAgICAgICAgaWYgKHBsLnR5cGUgPT09ICchJykge1xuICAgICAgICAgICAgbmVnYXRpdmVMaXN0cy5wdXNoKE9iamVjdC5hc3NpZ24ocGwsIHsgcmVFbmQ6IHJlLmxlbmd0aCB9KSlcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgJ3wnOiB7XG4gICAgICAgICAgY29uc3QgcGxFbnRyeSA9IHBhdHRlcm5MaXN0U3RhY2tbcGF0dGVybkxpc3RTdGFjay5sZW5ndGggLSAxXVxuICAgICAgICAgIGlmIChpbkNsYXNzIHx8ICFwbEVudHJ5KSB7XG4gICAgICAgICAgICByZSArPSAnXFxcXHwnXG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNsZWFyU3RhdGVDaGFyKClcbiAgICAgICAgICByZSArPSAnfCdcbiAgICAgICAgICAvLyBuZXh0IHN1YnBhdHRlcm4gY2FuIHN0YXJ0IHdpdGggYSBkb3Q/XG4gICAgICAgICAgaWYgKHBsRW50cnkuc3RhcnQgPT09IDAgJiYgcGxFbnRyeS50eXBlICE9PSAnIScpIHtcbiAgICAgICAgICAgIGRvdFRyYXZBbGxvd2VkID0gdHJ1ZVxuICAgICAgICAgICAgcmUgKz0gc3ViUGF0dGVyblN0YXJ0KHBhdHRlcm4uc2xpY2UoaSArIDEpKVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gdGhlc2UgYXJlIG1vc3RseSB0aGUgc2FtZSBpbiByZWdleHAgYW5kIGdsb2JcbiAgICAgICAgY2FzZSAnWyc6XG4gICAgICAgICAgLy8gc3dhbGxvdyBhbnkgc3RhdGUtdHJhY2tpbmcgY2hhciBiZWZvcmUgdGhlIFtcbiAgICAgICAgICBjbGVhclN0YXRlQ2hhcigpXG5cbiAgICAgICAgICBpZiAoaW5DbGFzcykge1xuICAgICAgICAgICAgcmUgKz0gJ1xcXFwnICsgY1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpbkNsYXNzID0gdHJ1ZVxuICAgICAgICAgIGNsYXNzU3RhcnQgPSBpXG4gICAgICAgICAgcmVDbGFzc1N0YXJ0ID0gcmUubGVuZ3RoXG4gICAgICAgICAgcmUgKz0gY1xuICAgICAgICBjb250aW51ZVxuXG4gICAgICAgIGNhc2UgJ10nOlxuICAgICAgICAgIC8vICBhIHJpZ2h0IGJyYWNrZXQgc2hhbGwgbG9zZSBpdHMgc3BlY2lhbFxuICAgICAgICAgIC8vICBtZWFuaW5nIGFuZCByZXByZXNlbnQgaXRzZWxmIGluXG4gICAgICAgICAgLy8gIGEgYnJhY2tldCBleHByZXNzaW9uIGlmIGl0IG9jY3Vyc1xuICAgICAgICAgIC8vICBmaXJzdCBpbiB0aGUgbGlzdC4gIC0tIFBPU0lYLjIgMi44LjMuMlxuICAgICAgICAgIGlmIChpID09PSBjbGFzc1N0YXJ0ICsgMSB8fCAhaW5DbGFzcykge1xuICAgICAgICAgICAgcmUgKz0gJ1xcXFwnICsgY1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBzcGxpdCB3aGVyZSB0aGUgbGFzdCBbIHdhcywgbWFrZSBzdXJlIHdlIGRvbid0IGhhdmVcbiAgICAgICAgICAvLyBhbiBpbnZhbGlkIHJlLiBpZiBzbywgcmUtd2FsayB0aGUgY29udGVudHMgb2YgdGhlXG4gICAgICAgICAgLy8gd291bGQtYmUgY2xhc3MgdG8gcmUtdHJhbnNsYXRlIGFueSBjaGFyYWN0ZXJzIHRoYXRcbiAgICAgICAgICAvLyB3ZXJlIHBhc3NlZCB0aHJvdWdoIGFzLWlzXG4gICAgICAgICAgLy8gVE9ETzogSXQgd291bGQgcHJvYmFibHkgYmUgZmFzdGVyIHRvIGRldGVybWluZSB0aGlzXG4gICAgICAgICAgLy8gd2l0aG91dCBhIHRyeS9jYXRjaCBhbmQgYSBuZXcgUmVnRXhwLCBidXQgaXQncyB0cmlja3lcbiAgICAgICAgICAvLyB0byBkbyBzYWZlbHkuICBGb3Igbm93LCB0aGlzIGlzIHNhZmUgYW5kIHdvcmtzLlxuICAgICAgICAgIGNzID0gcGF0dGVybi5zdWJzdHJpbmcoY2xhc3NTdGFydCArIDEsIGkpXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIFJlZ0V4cCgnWycgKyBicmFFeHBFc2NhcGUoY2hhclVuZXNjYXBlKGNzKSkgKyAnXScpXG4gICAgICAgICAgICAvLyBsb29rcyBnb29kLCBmaW5pc2ggdXAgdGhlIGNsYXNzLlxuICAgICAgICAgICAgcmUgKz0gY1xuICAgICAgICAgIH0gY2F0Y2ggKGVyKSB7XG4gICAgICAgICAgICAvLyBvdXQgb2Ygb3JkZXIgcmFuZ2VzIGluIEpTIGFyZSBlcnJvcnMsIGJ1dCBpbiBnbG9iIHN5bnRheCxcbiAgICAgICAgICAgIC8vIHRoZXkncmUganVzdCBhIHJhbmdlIHRoYXQgbWF0Y2hlcyBub3RoaW5nLlxuICAgICAgICAgICAgcmUgPSByZS5zdWJzdHJpbmcoMCwgcmVDbGFzc1N0YXJ0KSArICcoPzokLiknIC8vIG1hdGNoIG5vdGhpbmcgZXZlclxuICAgICAgICAgIH1cbiAgICAgICAgICBoYXNNYWdpYyA9IHRydWVcbiAgICAgICAgICBpbkNsYXNzID0gZmFsc2VcbiAgICAgICAgY29udGludWVcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIC8vIHN3YWxsb3cgYW55IHN0YXRlIGNoYXIgdGhhdCB3YXNuJ3QgY29uc3VtZWRcbiAgICAgICAgICBjbGVhclN0YXRlQ2hhcigpXG5cbiAgICAgICAgICBpZiAocmVTcGVjaWFsc1tjXSAmJiAhKGMgPT09ICdeJyAmJiBpbkNsYXNzKSkge1xuICAgICAgICAgICAgcmUgKz0gJ1xcXFwnXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmUgKz0gY1xuICAgICAgICAgIGJyZWFrXG5cbiAgICAgIH0gLy8gc3dpdGNoXG4gICAgfSAvLyBmb3JcblxuICAgIC8vIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB3ZSBsZWZ0IGEgY2xhc3Mgb3Blbi5cbiAgICAvLyBcIlthYmNcIiBpcyB2YWxpZCwgZXF1aXZhbGVudCB0byBcIlxcW2FiY1wiXG4gICAgaWYgKGluQ2xhc3MpIHtcbiAgICAgIC8vIHNwbGl0IHdoZXJlIHRoZSBsYXN0IFsgd2FzLCBhbmQgZXNjYXBlIGl0XG4gICAgICAvLyB0aGlzIGlzIGEgaHVnZSBwaXRhLiAgV2Ugbm93IGhhdmUgdG8gcmUtd2Fsa1xuICAgICAgLy8gdGhlIGNvbnRlbnRzIG9mIHRoZSB3b3VsZC1iZSBjbGFzcyB0byByZS10cmFuc2xhdGVcbiAgICAgIC8vIGFueSBjaGFyYWN0ZXJzIHRoYXQgd2VyZSBwYXNzZWQgdGhyb3VnaCBhcy1pc1xuICAgICAgY3MgPSBwYXR0ZXJuLnNsaWNlKGNsYXNzU3RhcnQgKyAxKVxuICAgICAgc3AgPSB0aGlzLnBhcnNlKGNzLCBTVUJQQVJTRSlcbiAgICAgIHJlID0gcmUuc3Vic3RyaW5nKDAsIHJlQ2xhc3NTdGFydCkgKyAnXFxcXFsnICsgc3BbMF1cbiAgICAgIGhhc01hZ2ljID0gaGFzTWFnaWMgfHwgc3BbMV1cbiAgICB9XG5cbiAgICAvLyBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgd2UgaGFkIGEgKyggdGhpbmcgYXQgdGhlICplbmQqXG4gICAgLy8gb2YgdGhlIHBhdHRlcm4uXG4gICAgLy8gZWFjaCBwYXR0ZXJuIGxpc3Qgc3RhY2sgYWRkcyAzIGNoYXJzLCBhbmQgd2UgbmVlZCB0byBnbyB0aHJvdWdoXG4gICAgLy8gYW5kIGVzY2FwZSBhbnkgfCBjaGFycyB0aGF0IHdlcmUgcGFzc2VkIHRocm91Z2ggYXMtaXMgZm9yIHRoZSByZWdleHAuXG4gICAgLy8gR28gdGhyb3VnaCBhbmQgZXNjYXBlIHRoZW0sIHRha2luZyBjYXJlIG5vdCB0byBkb3VibGUtZXNjYXBlIGFueVxuICAgIC8vIHwgY2hhcnMgdGhhdCB3ZXJlIGFscmVhZHkgZXNjYXBlZC5cbiAgICBmb3IgKHBsID0gcGF0dGVybkxpc3RTdGFjay5wb3AoKTsgcGw7IHBsID0gcGF0dGVybkxpc3RTdGFjay5wb3AoKSkge1xuICAgICAgbGV0IHRhaWxcbiAgICAgIHRhaWwgPSByZS5zbGljZShwbC5yZVN0YXJ0ICsgcGwub3Blbi5sZW5ndGgpXG4gICAgICB0aGlzLmRlYnVnKCdzZXR0aW5nIHRhaWwnLCByZSwgcGwpXG4gICAgICAvLyBtYXliZSBzb21lIGV2ZW4gbnVtYmVyIG9mIFxcLCB0aGVuIG1heWJlIDEgXFwsIGZvbGxvd2VkIGJ5IGEgfFxuICAgICAgdGFpbCA9IHRhaWwucmVwbGFjZSgvKCg/OlxcXFx7Mn0pezAsNjR9KShcXFxcPylcXHwvZywgKF8sICQxLCAkMikgPT4ge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAtIHNob3VsZCBhbHJlYWR5IGJlIGRvbmUgKi9cbiAgICAgICAgaWYgKCEkMikge1xuICAgICAgICAgIC8vIHRoZSB8IGlzbid0IGFscmVhZHkgZXNjYXBlZCwgc28gZXNjYXBlIGl0LlxuICAgICAgICAgICQyID0gJ1xcXFwnXG4gICAgICAgIH1cblxuICAgICAgICAvLyBuZWVkIHRvIGVzY2FwZSBhbGwgdGhvc2Ugc2xhc2hlcyAqYWdhaW4qLCB3aXRob3V0IGVzY2FwaW5nIHRoZVxuICAgICAgICAvLyBvbmUgdGhhdCB3ZSBuZWVkIGZvciBlc2NhcGluZyB0aGUgfCBjaGFyYWN0ZXIuICBBcyBpdCB3b3JrcyBvdXQsXG4gICAgICAgIC8vIGVzY2FwaW5nIGFuIGV2ZW4gbnVtYmVyIG9mIHNsYXNoZXMgY2FuIGJlIGRvbmUgYnkgc2ltcGx5IHJlcGVhdGluZ1xuICAgICAgICAvLyBpdCBleGFjdGx5IGFmdGVyIGl0c2VsZi4gIFRoYXQncyB3aHkgdGhpcyB0cmljayB3b3Jrcy5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gSSBhbSBzb3JyeSB0aGF0IHlvdSBoYXZlIHRvIHNlZSB0aGlzLlxuICAgICAgICByZXR1cm4gJDEgKyAkMSArICQyICsgJ3wnXG4gICAgICB9KVxuXG4gICAgICB0aGlzLmRlYnVnKCd0YWlsPSVqXFxuICAgJXMnLCB0YWlsLCB0YWlsLCBwbCwgcmUpXG4gICAgICBjb25zdCB0ID0gcGwudHlwZSA9PT0gJyonID8gc3RhclxuICAgICAgICA6IHBsLnR5cGUgPT09ICc/JyA/IHFtYXJrXG4gICAgICAgIDogJ1xcXFwnICsgcGwudHlwZVxuXG4gICAgICBoYXNNYWdpYyA9IHRydWVcbiAgICAgIHJlID0gcmUuc2xpY2UoMCwgcGwucmVTdGFydCkgKyB0ICsgJ1xcXFwoJyArIHRhaWxcbiAgICB9XG5cbiAgICAvLyBoYW5kbGUgdHJhaWxpbmcgdGhpbmdzIHRoYXQgb25seSBtYXR0ZXIgYXQgdGhlIHZlcnkgZW5kLlxuICAgIGNsZWFyU3RhdGVDaGFyKClcbiAgICBpZiAoZXNjYXBpbmcpIHtcbiAgICAgIC8vIHRyYWlsaW5nIFxcXFxcbiAgICAgIHJlICs9ICdcXFxcXFxcXCdcbiAgICB9XG5cbiAgICAvLyBvbmx5IG5lZWQgdG8gYXBwbHkgdGhlIG5vZG90IHN0YXJ0IGlmIHRoZSByZSBzdGFydHMgd2l0aFxuICAgIC8vIHNvbWV0aGluZyB0aGF0IGNvdWxkIGNvbmNlaXZhYmx5IGNhcHR1cmUgYSBkb3RcbiAgICBjb25zdCBhZGRQYXR0ZXJuU3RhcnQgPSBhZGRQYXR0ZXJuU3RhcnRTZXRbcmUuY2hhckF0KDApXVxuXG4gICAgLy8gSGFjayB0byB3b3JrIGFyb3VuZCBsYWNrIG9mIG5lZ2F0aXZlIGxvb2tiZWhpbmQgaW4gSlNcbiAgICAvLyBBIHBhdHRlcm4gbGlrZTogKi4hKHgpLiEoeXx6KSBuZWVkcyB0byBlbnN1cmUgdGhhdCBhIG5hbWVcbiAgICAvLyBsaWtlICdhLnh5ei55eicgZG9lc24ndCBtYXRjaC4gIFNvLCB0aGUgZmlyc3QgbmVnYXRpdmVcbiAgICAvLyBsb29rYWhlYWQsIGhhcyB0byBsb29rIEFMTCB0aGUgd2F5IGFoZWFkLCB0byB0aGUgZW5kIG9mXG4gICAgLy8gdGhlIHBhdHRlcm4uXG4gICAgZm9yIChsZXQgbiA9IG5lZ2F0aXZlTGlzdHMubGVuZ3RoIC0gMTsgbiA+IC0xOyBuLS0pIHtcbiAgICAgIGNvbnN0IG5sID0gbmVnYXRpdmVMaXN0c1tuXVxuXG4gICAgICBjb25zdCBubEJlZm9yZSA9IHJlLnNsaWNlKDAsIG5sLnJlU3RhcnQpXG4gICAgICBjb25zdCBubEZpcnN0ID0gcmUuc2xpY2UobmwucmVTdGFydCwgbmwucmVFbmQgLSA4KVxuICAgICAgbGV0IG5sQWZ0ZXIgPSByZS5zbGljZShubC5yZUVuZClcbiAgICAgIGNvbnN0IG5sTGFzdCA9IHJlLnNsaWNlKG5sLnJlRW5kIC0gOCwgbmwucmVFbmQpICsgbmxBZnRlclxuXG4gICAgICAvLyBIYW5kbGUgbmVzdGVkIHN0dWZmIGxpa2UgKigqLmpzfCEoKi5qc29uKSksIHdoZXJlIG9wZW4gcGFyZW5zXG4gICAgICAvLyBtZWFuIHRoYXQgd2Ugc2hvdWxkICpub3QqIGluY2x1ZGUgdGhlICkgaW4gdGhlIGJpdCB0aGF0IGlzIGNvbnNpZGVyZWRcbiAgICAgIC8vIFwiYWZ0ZXJcIiB0aGUgbmVnYXRlZCBzZWN0aW9uLlxuICAgICAgY29uc3QgY2xvc2VQYXJlbnNCZWZvcmUgPSBubEJlZm9yZS5zcGxpdCgnKScpLmxlbmd0aFxuICAgICAgY29uc3Qgb3BlblBhcmVuc0JlZm9yZSA9IG5sQmVmb3JlLnNwbGl0KCcoJykubGVuZ3RoIC0gY2xvc2VQYXJlbnNCZWZvcmVcbiAgICAgIGxldCBjbGVhbkFmdGVyID0gbmxBZnRlclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcGVuUGFyZW5zQmVmb3JlOyBpKyspIHtcbiAgICAgICAgY2xlYW5BZnRlciA9IGNsZWFuQWZ0ZXIucmVwbGFjZSgvXFwpWysqP10/LywgJycpXG4gICAgICB9XG4gICAgICBubEFmdGVyID0gY2xlYW5BZnRlclxuXG4gICAgICBjb25zdCBkb2xsYXIgPSBubEFmdGVyID09PSAnJyAmJiBpc1N1YiAhPT0gU1VCUEFSU0UgPyAnKD86JHxcXFxcLyknIDogJydcblxuICAgICAgcmUgPSBubEJlZm9yZSArIG5sRmlyc3QgKyBubEFmdGVyICsgZG9sbGFyICsgbmxMYXN0XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIHJlIGlzIG5vdCBcIlwiIGF0IHRoaXMgcG9pbnQsIHRoZW4gd2UgbmVlZCB0byBtYWtlIHN1cmVcbiAgICAvLyBpdCBkb2Vzbid0IG1hdGNoIGFnYWluc3QgYW4gZW1wdHkgcGF0aCBwYXJ0LlxuICAgIC8vIE90aGVyd2lzZSBhLyogd2lsbCBtYXRjaCBhLywgd2hpY2ggaXQgc2hvdWxkIG5vdC5cbiAgICBpZiAocmUgIT09ICcnICYmIGhhc01hZ2ljKSB7XG4gICAgICByZSA9ICcoPz0uKScgKyByZVxuICAgIH1cblxuICAgIGlmIChhZGRQYXR0ZXJuU3RhcnQpIHtcbiAgICAgIHJlID0gcGF0dGVyblN0YXJ0KCkgKyByZVxuICAgIH1cblxuICAgIC8vIHBhcnNpbmcganVzdCBhIHBpZWNlIG9mIGEgbGFyZ2VyIHBhdHRlcm4uXG4gICAgaWYgKGlzU3ViID09PSBTVUJQQVJTRSkge1xuICAgICAgcmV0dXJuIFtyZSwgaGFzTWFnaWNdXG4gICAgfVxuXG4gICAgLy8gaWYgaXQncyBub2Nhc2UsIGFuZCB0aGUgbGNhc2UvdXBwZXJjYXNlIGRvbid0IG1hdGNoLCBpdCdzIG1hZ2ljXG4gICAgaWYgKG9wdGlvbnMubm9jYXNlICYmICFoYXNNYWdpYykge1xuICAgICAgaGFzTWFnaWMgPSBwYXR0ZXJuLnRvVXBwZXJDYXNlKCkgIT09IHBhdHRlcm4udG9Mb3dlckNhc2UoKVxuICAgIH1cblxuICAgIC8vIHNraXAgdGhlIHJlZ2V4cCBmb3Igbm9uLW1hZ2ljYWwgcGF0dGVybnNcbiAgICAvLyB1bmVzY2FwZSBhbnl0aGluZyBpbiBpdCwgdGhvdWdoLCBzbyB0aGF0IGl0J2xsIGJlXG4gICAgLy8gYW4gZXhhY3QgbWF0Y2ggYWdhaW5zdCBhIGZpbGUgZXRjLlxuICAgIGlmICghaGFzTWFnaWMpIHtcbiAgICAgIHJldHVybiBnbG9iVW5lc2NhcGUocGF0dGVybilcbiAgICB9XG5cbiAgICBjb25zdCBmbGFncyA9IG9wdGlvbnMubm9jYXNlID8gJ2knIDogJydcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IFJlZ0V4cCgnXicgKyByZSArICckJywgZmxhZ3MpLCB7XG4gICAgICAgIF9nbG9iOiBwYXR0ZXJuLFxuICAgICAgICBfc3JjOiByZSxcbiAgICAgIH0pXG4gICAgfSBjYXRjaCAoZXIpIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0IC0gc2hvdWxkIGJlIGltcG9zc2libGUgKi8ge1xuICAgICAgLy8gSWYgaXQgd2FzIGFuIGludmFsaWQgcmVndWxhciBleHByZXNzaW9uLCB0aGVuIGl0IGNhbid0IG1hdGNoXG4gICAgICAvLyBhbnl0aGluZy4gIFRoaXMgdHJpY2sgbG9va3MgZm9yIGEgY2hhcmFjdGVyIGFmdGVyIHRoZSBlbmQgb2ZcbiAgICAgIC8vIHRoZSBzdHJpbmcsIHdoaWNoIGlzIG9mIGNvdXJzZSBpbXBvc3NpYmxlLCBleGNlcHQgaW4gbXVsdGktbGluZVxuICAgICAgLy8gbW9kZSwgYnV0IGl0J3Mgbm90IGEgL20gcmVnZXguXG4gICAgICByZXR1cm4gbmV3IFJlZ0V4cCgnJC4nKVxuICAgIH1cbiAgfVxuXG4gIG1ha2VSZSAoKSB7XG4gICAgaWYgKHRoaXMucmVnZXhwIHx8IHRoaXMucmVnZXhwID09PSBmYWxzZSkgcmV0dXJuIHRoaXMucmVnZXhwXG5cbiAgICAvLyBhdCB0aGlzIHBvaW50LCB0aGlzLnNldCBpcyBhIDJkIGFycmF5IG9mIHBhcnRpYWxcbiAgICAvLyBwYXR0ZXJuIHN0cmluZ3MsIG9yIFwiKipcIi5cbiAgICAvL1xuICAgIC8vIEl0J3MgYmV0dGVyIHRvIHVzZSAubWF0Y2goKS4gIFRoaXMgZnVuY3Rpb24gc2hvdWxkbid0XG4gICAgLy8gYmUgdXNlZCwgcmVhbGx5LCBidXQgaXQncyBwcmV0dHkgY29udmVuaWVudCBzb21ldGltZXMsXG4gICAgLy8gd2hlbiB5b3UganVzdCB3YW50IHRvIHdvcmsgd2l0aCBhIHJlZ2V4LlxuICAgIGNvbnN0IHNldCA9IHRoaXMuc2V0XG5cbiAgICBpZiAoIXNldC5sZW5ndGgpIHtcbiAgICAgIHRoaXMucmVnZXhwID0gZmFsc2VcbiAgICAgIHJldHVybiB0aGlzLnJlZ2V4cFxuICAgIH1cbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zXG5cbiAgICBjb25zdCB0d29TdGFyID0gb3B0aW9ucy5ub2dsb2JzdGFyID8gc3RhclxuICAgICAgOiBvcHRpb25zLmRvdCA/IHR3b1N0YXJEb3RcbiAgICAgIDogdHdvU3Rhck5vRG90XG4gICAgY29uc3QgZmxhZ3MgPSBvcHRpb25zLm5vY2FzZSA/ICdpJyA6ICcnXG5cbiAgICAvLyBjb2FsZXNjZSBnbG9ic3RhcnMgYW5kIHJlZ2V4cGlmeSBub24tZ2xvYnN0YXIgcGF0dGVybnNcbiAgICAvLyBpZiBpdCdzIHRoZSBvbmx5IGl0ZW0sIHRoZW4gd2UganVzdCBkbyBvbmUgdHdvU3RhclxuICAgIC8vIGlmIGl0J3MgdGhlIGZpcnN0LCBhbmQgdGhlcmUgYXJlIG1vcmUsIHByZXBlbmQgKFxcL3x0d29TdGFyXFwvKT8gdG8gbmV4dFxuICAgIC8vIGlmIGl0J3MgdGhlIGxhc3QsIGFwcGVuZCAoXFwvdHdvU3RhcnwpIHRvIHByZXZpb3VzXG4gICAgLy8gaWYgaXQncyBpbiB0aGUgbWlkZGxlLCBhcHBlbmQgKFxcL3xcXC90d29TdGFyXFwvKSB0byBwcmV2aW91c1xuICAgIC8vIHRoZW4gZmlsdGVyIG91dCBHTE9CU1RBUiBzeW1ib2xzXG4gICAgbGV0IHJlID0gc2V0Lm1hcChwYXR0ZXJuID0+IHtcbiAgICAgIHBhdHRlcm4gPSBwYXR0ZXJuLm1hcChwID0+XG4gICAgICAgIHR5cGVvZiBwID09PSAnc3RyaW5nJyA/IHJlZ0V4cEVzY2FwZShwKVxuICAgICAgICA6IHAgPT09IEdMT0JTVEFSID8gR0xPQlNUQVJcbiAgICAgICAgOiBwLl9zcmNcbiAgICAgICkucmVkdWNlKChzZXQsIHApID0+IHtcbiAgICAgICAgaWYgKCEoc2V0W3NldC5sZW5ndGggLSAxXSA9PT0gR0xPQlNUQVIgJiYgcCA9PT0gR0xPQlNUQVIpKSB7XG4gICAgICAgICAgc2V0LnB1c2gocClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2V0XG4gICAgICB9LCBbXSlcbiAgICAgIHBhdHRlcm4uZm9yRWFjaCgocCwgaSkgPT4ge1xuICAgICAgICBpZiAocCAhPT0gR0xPQlNUQVIgfHwgcGF0dGVybltpLTFdID09PSBHTE9CU1RBUikge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgaWYgKHBhdHRlcm4ubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgcGF0dGVybltpKzFdID0gJyg/OlxcXFxcXC98JyArIHR3b1N0YXIgKyAnXFxcXFxcLyk/JyArIHBhdHRlcm5baSsxXVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXR0ZXJuW2ldID0gdHdvU3RhclxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChpID09PSBwYXR0ZXJuLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICBwYXR0ZXJuW2ktMV0gKz0gJyg/OlxcXFxcXC98JyArIHR3b1N0YXIgKyAnKT8nXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGF0dGVybltpLTFdICs9ICcoPzpcXFxcXFwvfFxcXFxcXC8nICsgdHdvU3RhciArICdcXFxcXFwvKScgKyBwYXR0ZXJuW2krMV1cbiAgICAgICAgICBwYXR0ZXJuW2krMV0gPSBHTE9CU1RBUlxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgcmV0dXJuIHBhdHRlcm4uZmlsdGVyKHAgPT4gcCAhPT0gR0xPQlNUQVIpLmpvaW4oJy8nKVxuICAgIH0pLmpvaW4oJ3wnKVxuXG4gICAgLy8gbXVzdCBtYXRjaCBlbnRpcmUgcGF0dGVyblxuICAgIC8vIGVuZGluZyBpbiBhICogb3IgKiogd2lsbCBtYWtlIGl0IGxlc3Mgc3RyaWN0LlxuICAgIHJlID0gJ14oPzonICsgcmUgKyAnKSQnXG5cbiAgICAvLyBjYW4gbWF0Y2ggYW55dGhpbmcsIGFzIGxvbmcgYXMgaXQncyBub3QgdGhpcy5cbiAgICBpZiAodGhpcy5uZWdhdGUpIHJlID0gJ14oPyEnICsgcmUgKyAnKS4qJCdcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLnJlZ2V4cCA9IG5ldyBSZWdFeHAocmUsIGZsYWdzKVxuICAgIH0gY2F0Y2ggKGV4KSAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAtIHNob3VsZCBiZSBpbXBvc3NpYmxlICovIHtcbiAgICAgIHRoaXMucmVnZXhwID0gZmFsc2VcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucmVnZXhwXG4gIH1cblxuICBtYXRjaCAoZiwgcGFydGlhbCA9IHRoaXMucGFydGlhbCkge1xuICAgIHRoaXMuZGVidWcoJ21hdGNoJywgZiwgdGhpcy5wYXR0ZXJuKVxuICAgIC8vIHNob3J0LWNpcmN1aXQgaW4gdGhlIGNhc2Ugb2YgYnVzdGVkIHRoaW5ncy5cbiAgICAvLyBjb21tZW50cywgZXRjLlxuICAgIGlmICh0aGlzLmNvbW1lbnQpIHJldHVybiBmYWxzZVxuICAgIGlmICh0aGlzLmVtcHR5KSByZXR1cm4gZiA9PT0gJydcblxuICAgIGlmIChmID09PSAnLycgJiYgcGFydGlhbCkgcmV0dXJuIHRydWVcblxuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnNcblxuICAgIC8vIHdpbmRvd3M6IG5lZWQgdG8gdXNlIC8sIG5vdCBcXFxuICAgIGlmIChwYXRoLnNlcCAhPT0gJy8nKSB7XG4gICAgICBmID0gZi5zcGxpdChwYXRoLnNlcCkuam9pbignLycpXG4gICAgfVxuXG4gICAgLy8gdHJlYXQgdGhlIHRlc3QgcGF0aCBhcyBhIHNldCBvZiBwYXRocGFydHMuXG4gICAgZiA9IGYuc3BsaXQoc2xhc2hTcGxpdClcbiAgICB0aGlzLmRlYnVnKHRoaXMucGF0dGVybiwgJ3NwbGl0JywgZilcblxuICAgIC8vIGp1c3QgT05FIG9mIHRoZSBwYXR0ZXJuIHNldHMgaW4gdGhpcy5zZXQgbmVlZHMgdG8gbWF0Y2hcbiAgICAvLyBpbiBvcmRlciBmb3IgaXQgdG8gYmUgdmFsaWQuICBJZiBuZWdhdGluZywgdGhlbiBqdXN0IG9uZVxuICAgIC8vIG1hdGNoIG1lYW5zIHRoYXQgd2UgaGF2ZSBmYWlsZWQuXG4gICAgLy8gRWl0aGVyIHdheSwgcmV0dXJuIG9uIHRoZSBmaXJzdCBoaXQuXG5cbiAgICBjb25zdCBzZXQgPSB0aGlzLnNldFxuICAgIHRoaXMuZGVidWcodGhpcy5wYXR0ZXJuLCAnc2V0Jywgc2V0KVxuXG4gICAgLy8gRmluZCB0aGUgYmFzZW5hbWUgb2YgdGhlIHBhdGggYnkgbG9va2luZyBmb3IgdGhlIGxhc3Qgbm9uLWVtcHR5IHNlZ21lbnRcbiAgICBsZXQgZmlsZW5hbWVcbiAgICBmb3IgKGxldCBpID0gZi5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgZmlsZW5hbWUgPSBmW2ldXG4gICAgICBpZiAoZmlsZW5hbWUpIGJyZWFrXG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZXQubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHBhdHRlcm4gPSBzZXRbaV1cbiAgICAgIGxldCBmaWxlID0gZlxuICAgICAgaWYgKG9wdGlvbnMubWF0Y2hCYXNlICYmIHBhdHRlcm4ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGZpbGUgPSBbZmlsZW5hbWVdXG4gICAgICB9XG4gICAgICBjb25zdCBoaXQgPSB0aGlzLm1hdGNoT25lKGZpbGUsIHBhdHRlcm4sIHBhcnRpYWwpXG4gICAgICBpZiAoaGl0KSB7XG4gICAgICAgIGlmIChvcHRpb25zLmZsaXBOZWdhdGUpIHJldHVybiB0cnVlXG4gICAgICAgIHJldHVybiAhdGhpcy5uZWdhdGVcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBkaWRuJ3QgZ2V0IGFueSBoaXRzLiAgdGhpcyBpcyBzdWNjZXNzIGlmIGl0J3MgYSBuZWdhdGl2ZVxuICAgIC8vIHBhdHRlcm4sIGZhaWx1cmUgb3RoZXJ3aXNlLlxuICAgIGlmIChvcHRpb25zLmZsaXBOZWdhdGUpIHJldHVybiBmYWxzZVxuICAgIHJldHVybiB0aGlzLm5lZ2F0ZVxuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRzIChkZWYpIHtcbiAgICByZXR1cm4gbWluaW1hdGNoLmRlZmF1bHRzKGRlZikuTWluaW1hdGNoXG4gIH1cbn1cblxubWluaW1hdGNoLk1pbmltYXRjaCA9IE1pbmltYXRjaFxuIiwKICAgICJtb2R1bGUuZXhwb3J0cyA9IHJlYWRkaXJHbG9iO1xuXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG5jb25zdCB7IEV2ZW50RW1pdHRlciB9ID0gcmVxdWlyZSgnZXZlbnRzJyk7XG5jb25zdCB7IE1pbmltYXRjaCB9ID0gcmVxdWlyZSgnbWluaW1hdGNoJyk7XG5jb25zdCB7IHJlc29sdmUgfSA9IHJlcXVpcmUoJ3BhdGgnKTtcblxuZnVuY3Rpb24gcmVhZGRpcihkaXIsIHN0cmljdCkge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGZzLnJlYWRkaXIoZGlyLCB7d2l0aEZpbGVUeXBlczogdHJ1ZX0gLChlcnIsIGZpbGVzKSA9PiB7XG4gICAgICBpZihlcnIpIHtcbiAgICAgICAgc3dpdGNoIChlcnIuY29kZSkge1xuICAgICAgICAgIGNhc2UgJ0VOT1RESVInOiAgICAgIC8vIE5vdCBhIGRpcmVjdG9yeVxuICAgICAgICAgICAgaWYoc3RyaWN0KSB7XG4gICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmVzb2x2ZShbXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdFTk9UU1VQJzogICAgICAvLyBPcGVyYXRpb24gbm90IHN1cHBvcnRlZFxuICAgICAgICAgIGNhc2UgJ0VOT0VOVCc6ICAgICAgIC8vIE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnlcbiAgICAgICAgICBjYXNlICdFTkFNRVRPT0xPTkcnOiAvLyBGaWxlbmFtZSB0b28gbG9uZ1xuICAgICAgICAgIGNhc2UgJ1VOS05PV04nOlxuICAgICAgICAgICAgcmVzb2x2ZShbXSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdFTE9PUCc6ICAgICAgICAvLyBUb28gbWFueSBsZXZlbHMgb2Ygc3ltYm9saWMgbGlua3NcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZShmaWxlcyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gc3RhdChmaWxlLCBmb2xsb3dTeW1saW5rcykge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHN0YXRGdW5jID0gZm9sbG93U3ltbGlua3MgPyBmcy5zdGF0IDogZnMubHN0YXQ7XG4gICAgc3RhdEZ1bmMoZmlsZSwgKGVyciwgc3RhdHMpID0+IHtcbiAgICAgIGlmKGVycikge1xuICAgICAgICBzd2l0Y2ggKGVyci5jb2RlKSB7XG4gICAgICAgICAgY2FzZSAnRU5PRU5UJzpcbiAgICAgICAgICAgIGlmKGZvbGxvd1N5bWxpbmtzKSB7XG4gICAgICAgICAgICAgIC8vIEZhbGxiYWNrIHRvIGxzdGF0IHRvIGhhbmRsZSBicm9rZW4gbGlua3MgYXMgZmlsZXNcbiAgICAgICAgICAgICAgcmVzb2x2ZShzdGF0KGZpbGUsIGZhbHNlKSk7IFxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXNvbHZlKG51bGwpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUoc3RhdHMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24qIGV4cGxvcmVXYWxrQXN5bmMoZGlyLCBwYXRoLCBmb2xsb3dTeW1saW5rcywgdXNlU3RhdCwgc2hvdWxkU2tpcCwgc3RyaWN0KSB7XG4gIGxldCBmaWxlcyA9IGF3YWl0IHJlYWRkaXIocGF0aCArIGRpciwgc3RyaWN0KTtcbiAgZm9yKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICBsZXQgbmFtZSA9IGZpbGUubmFtZTtcbiAgICBpZihuYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIHVuZGVmaW5lZCBmaWxlLm5hbWUgbWVhbnMgdGhlIGB3aXRoRmlsZVR5cGVzYCBvcHRpb25zIGlzIG5vdCBzdXBwb3J0ZWQgYnkgbm9kZVxuICAgICAgLy8gd2UgaGF2ZSB0byBjYWxsIHRoZSBzdGF0IGZ1bmN0aW9uIHRvIGtub3cgaWYgZmlsZSBpcyBkaXJlY3Rvcnkgb3Igbm90LlxuICAgICAgbmFtZSA9IGZpbGU7XG4gICAgICB1c2VTdGF0ID0gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgZmlsZW5hbWUgPSBkaXIgKyAnLycgKyBuYW1lO1xuICAgIGNvbnN0IHJlbGF0aXZlID0gZmlsZW5hbWUuc2xpY2UoMSk7IC8vIFJlbW92ZSB0aGUgbGVhZGluZyAvXG4gICAgY29uc3QgYWJzb2x1dGUgPSBwYXRoICsgJy8nICsgcmVsYXRpdmU7XG4gICAgbGV0IHN0YXRzID0gbnVsbDtcbiAgICBpZih1c2VTdGF0IHx8IGZvbGxvd1N5bWxpbmtzKSB7XG4gICAgICBzdGF0cyA9IGF3YWl0IHN0YXQoYWJzb2x1dGUsIGZvbGxvd1N5bWxpbmtzKTtcbiAgICB9XG4gICAgaWYoIXN0YXRzICYmIGZpbGUubmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBzdGF0cyA9IGZpbGU7XG4gICAgfVxuICAgIGlmKHN0YXRzID09PSBudWxsKSB7XG4gICAgICBzdGF0cyA9IHsgaXNEaXJlY3Rvcnk6ICgpID0+IGZhbHNlIH07XG4gICAgfVxuXG4gICAgaWYoc3RhdHMuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgaWYoIXNob3VsZFNraXAocmVsYXRpdmUpKSB7XG4gICAgICAgIHlpZWxkIHtyZWxhdGl2ZSwgYWJzb2x1dGUsIHN0YXRzfTtcbiAgICAgICAgeWllbGQqIGV4cGxvcmVXYWxrQXN5bmMoZmlsZW5hbWUsIHBhdGgsIGZvbGxvd1N5bWxpbmtzLCB1c2VTdGF0LCBzaG91bGRTa2lwLCBmYWxzZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHlpZWxkIHtyZWxhdGl2ZSwgYWJzb2x1dGUsIHN0YXRzfTtcbiAgICB9XG4gIH1cbn1cbmFzeW5jIGZ1bmN0aW9uKiBleHBsb3JlKHBhdGgsIGZvbGxvd1N5bWxpbmtzLCB1c2VTdGF0LCBzaG91bGRTa2lwKSB7XG4gIHlpZWxkKiBleHBsb3JlV2Fsa0FzeW5jKCcnLCBwYXRoLCBmb2xsb3dTeW1saW5rcywgdXNlU3RhdCwgc2hvdWxkU2tpcCwgdHJ1ZSk7XG59XG5cblxuZnVuY3Rpb24gcmVhZE9wdGlvbnMob3B0aW9ucykge1xuICByZXR1cm4ge1xuICAgIHBhdHRlcm46IG9wdGlvbnMucGF0dGVybixcbiAgICBkb3Q6ICEhb3B0aW9ucy5kb3QsXG4gICAgbm9nbG9ic3RhcjogISFvcHRpb25zLm5vZ2xvYnN0YXIsXG4gICAgbWF0Y2hCYXNlOiAhIW9wdGlvbnMubWF0Y2hCYXNlLFxuICAgIG5vY2FzZTogISFvcHRpb25zLm5vY2FzZSxcbiAgICBpZ25vcmU6IG9wdGlvbnMuaWdub3JlLFxuICAgIHNraXA6IG9wdGlvbnMuc2tpcCxcblxuICAgIGZvbGxvdzogISFvcHRpb25zLmZvbGxvdyxcbiAgICBzdGF0OiAhIW9wdGlvbnMuc3RhdCxcbiAgICBub2RpcjogISFvcHRpb25zLm5vZGlyLFxuICAgIG1hcms6ICEhb3B0aW9ucy5tYXJrLFxuICAgIHNpbGVudDogISFvcHRpb25zLnNpbGVudCxcbiAgICBhYnNvbHV0ZTogISFvcHRpb25zLmFic29sdXRlXG4gIH07XG59XG5cbmNsYXNzIFJlYWRkaXJHbG9iIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgY29uc3RydWN0b3IoY3dkLCBvcHRpb25zLCBjYikge1xuICAgIHN1cGVyKCk7XG4gICAgaWYodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNiID0gb3B0aW9ucztcbiAgICAgIG9wdGlvbnMgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMub3B0aW9ucyA9IHJlYWRPcHRpb25zKG9wdGlvbnMgfHzCoHt9KTtcbiAgXG4gICAgdGhpcy5tYXRjaGVycyA9IFtdO1xuICAgIGlmKHRoaXMub3B0aW9ucy5wYXR0ZXJuKSB7XG4gICAgICBjb25zdCBtYXRjaGVycyA9IEFycmF5LmlzQXJyYXkodGhpcy5vcHRpb25zLnBhdHRlcm4pID8gdGhpcy5vcHRpb25zLnBhdHRlcm4gOiBbdGhpcy5vcHRpb25zLnBhdHRlcm5dO1xuICAgICAgdGhpcy5tYXRjaGVycyA9IG1hdGNoZXJzLm1hcCggbSA9PlxuICAgICAgICBuZXcgTWluaW1hdGNoKG0sIHtcbiAgICAgICAgICBkb3Q6IHRoaXMub3B0aW9ucy5kb3QsXG4gICAgICAgICAgbm9nbG9ic3Rhcjp0aGlzLm9wdGlvbnMubm9nbG9ic3RhcixcbiAgICAgICAgICBtYXRjaEJhc2U6dGhpcy5vcHRpb25zLm1hdGNoQmFzZSxcbiAgICAgICAgICBub2Nhc2U6dGhpcy5vcHRpb25zLm5vY2FzZVxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gIFxuICAgIHRoaXMuaWdub3JlTWF0Y2hlcnMgPSBbXTtcbiAgICBpZih0aGlzLm9wdGlvbnMuaWdub3JlKSB7XG4gICAgICBjb25zdCBpZ25vcmVQYXR0ZXJucyA9IEFycmF5LmlzQXJyYXkodGhpcy5vcHRpb25zLmlnbm9yZSkgPyB0aGlzLm9wdGlvbnMuaWdub3JlIDogW3RoaXMub3B0aW9ucy5pZ25vcmVdO1xuICAgICAgdGhpcy5pZ25vcmVNYXRjaGVycyA9IGlnbm9yZVBhdHRlcm5zLm1hcCggaWdub3JlID0+XG4gICAgICAgIG5ldyBNaW5pbWF0Y2goaWdub3JlLCB7ZG90OiB0cnVlfSlcbiAgICAgICk7XG4gICAgfVxuICBcbiAgICB0aGlzLnNraXBNYXRjaGVycyA9IFtdO1xuICAgIGlmKHRoaXMub3B0aW9ucy5za2lwKSB7XG4gICAgICBjb25zdCBza2lwUGF0dGVybnMgPSBBcnJheS5pc0FycmF5KHRoaXMub3B0aW9ucy5za2lwKSA/IHRoaXMub3B0aW9ucy5za2lwIDogW3RoaXMub3B0aW9ucy5za2lwXTtcbiAgICAgIHRoaXMuc2tpcE1hdGNoZXJzID0gc2tpcFBhdHRlcm5zLm1hcCggc2tpcCA9PlxuICAgICAgICBuZXcgTWluaW1hdGNoKHNraXAsIHtkb3Q6IHRydWV9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLml0ZXJhdG9yID0gZXhwbG9yZShyZXNvbHZlKGN3ZCB8fCAnLicpLCB0aGlzLm9wdGlvbnMuZm9sbG93LCB0aGlzLm9wdGlvbnMuc3RhdCwgdGhpcy5fc2hvdWxkU2tpcERpcmVjdG9yeS5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLnBhdXNlZCA9IGZhbHNlO1xuICAgIHRoaXMuaW5hY3RpdmUgPSBmYWxzZTtcbiAgICB0aGlzLmFib3J0ZWQgPSBmYWxzZTtcbiAgXG4gICAgaWYoY2IpIHtcbiAgICAgIHRoaXMuX21hdGNoZXMgPSBbXTsgXG4gICAgICB0aGlzLm9uKCdtYXRjaCcsIG1hdGNoID0+IHRoaXMuX21hdGNoZXMucHVzaCh0aGlzLm9wdGlvbnMuYWJzb2x1dGUgPyBtYXRjaC5hYnNvbHV0ZSA6IG1hdGNoLnJlbGF0aXZlKSk7XG4gICAgICB0aGlzLm9uKCdlcnJvcicsIGVyciA9PiBjYihlcnIpKTtcbiAgICAgIHRoaXMub24oJ2VuZCcsICgpID0+IGNiKG51bGwsIHRoaXMuX21hdGNoZXMpKTtcbiAgICB9XG5cbiAgICBzZXRUaW1lb3V0KCAoKSA9PiB0aGlzLl9uZXh0KCksIDApO1xuICB9XG5cbiAgX3Nob3VsZFNraXBEaXJlY3RvcnkocmVsYXRpdmUpIHtcbiAgICAvL2NvbnNvbGUubG9nKHJlbGF0aXZlLCB0aGlzLnNraXBNYXRjaGVycy5zb21lKG0gPT4gbS5tYXRjaChyZWxhdGl2ZSkpKTtcbiAgICByZXR1cm4gdGhpcy5za2lwTWF0Y2hlcnMuc29tZShtID0+IG0ubWF0Y2gocmVsYXRpdmUpKTtcbiAgfVxuXG4gIF9maWxlTWF0Y2hlcyhyZWxhdGl2ZSwgaXNEaXJlY3RvcnkpIHtcbiAgICBjb25zdCBmaWxlID0gcmVsYXRpdmUgKyAoaXNEaXJlY3RvcnkgPyAnLycgOiAnJyk7XG4gICAgcmV0dXJuICh0aGlzLm1hdGNoZXJzLmxlbmd0aCA9PT0gMCB8fCB0aGlzLm1hdGNoZXJzLnNvbWUobSA9PiBtLm1hdGNoKGZpbGUpKSlcbiAgICAgICYmICF0aGlzLmlnbm9yZU1hdGNoZXJzLnNvbWUobSA9PiBtLm1hdGNoKGZpbGUpKVxuICAgICAgJiYgKCF0aGlzLm9wdGlvbnMubm9kaXIgfHwgIWlzRGlyZWN0b3J5KTtcbiAgfVxuXG4gIF9uZXh0KCkge1xuICAgIGlmKCF0aGlzLnBhdXNlZCAmJiAhdGhpcy5hYm9ydGVkKSB7XG4gICAgICB0aGlzLml0ZXJhdG9yLm5leHQoKVxuICAgICAgLnRoZW4oKG9iaik9PiB7XG4gICAgICAgIGlmKCFvYmouZG9uZSkge1xuICAgICAgICAgIGNvbnN0IGlzRGlyZWN0b3J5ID0gb2JqLnZhbHVlLnN0YXRzLmlzRGlyZWN0b3J5KCk7XG4gICAgICAgICAgaWYodGhpcy5fZmlsZU1hdGNoZXMob2JqLnZhbHVlLnJlbGF0aXZlLCBpc0RpcmVjdG9yeSApKSB7XG4gICAgICAgICAgICBsZXQgcmVsYXRpdmUgPSBvYmoudmFsdWUucmVsYXRpdmU7XG4gICAgICAgICAgICBsZXQgYWJzb2x1dGUgPSBvYmoudmFsdWUuYWJzb2x1dGU7XG4gICAgICAgICAgICBpZih0aGlzLm9wdGlvbnMubWFyayAmJiBpc0RpcmVjdG9yeSkge1xuICAgICAgICAgICAgICByZWxhdGl2ZSArPSAnLyc7XG4gICAgICAgICAgICAgIGFic29sdXRlICs9ICcvJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKHRoaXMub3B0aW9ucy5zdGF0KSB7XG4gICAgICAgICAgICAgIHRoaXMuZW1pdCgnbWF0Y2gnLCB7cmVsYXRpdmUsIGFic29sdXRlLCBzdGF0Om9iai52YWx1ZS5zdGF0c30pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5lbWl0KCdtYXRjaCcsIHtyZWxhdGl2ZSwgYWJzb2x1dGV9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5fbmV4dCh0aGlzLml0ZXJhdG9yKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmVtaXQoJ2VuZCcpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgdGhpcy5hYm9ydCgpO1xuICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgICAgICAgaWYoIWVyci5jb2RlICYmICF0aGlzLm9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbmFjdGl2ZSA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgYWJvcnQoKSB7XG4gICAgdGhpcy5hYm9ydGVkID0gdHJ1ZTtcbiAgfVxuXG4gIHBhdXNlKCkge1xuICAgIHRoaXMucGF1c2VkID0gdHJ1ZTtcbiAgfVxuXG4gIHJlc3VtZSgpIHtcbiAgICB0aGlzLnBhdXNlZCA9IGZhbHNlO1xuICAgIGlmKHRoaXMuaW5hY3RpdmUpIHtcbiAgICAgIHRoaXMuaW5hY3RpdmUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX25leHQoKTtcbiAgICB9XG4gIH1cbn1cblxuXG5mdW5jdGlvbiByZWFkZGlyR2xvYihwYXR0ZXJuLCBvcHRpb25zLCBjYikge1xuICByZXR1cm4gbmV3IFJlYWRkaXJHbG9iKHBhdHRlcm4sIG9wdGlvbnMsIGNiKTtcbn1cbnJlYWRkaXJHbG9iLlJlYWRkaXJHbG9iID0gUmVhZGRpckdsb2I7IiwKICAgICIoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IGZhY3RvcnkoZXhwb3J0cykgOlxuICAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJ2V4cG9ydHMnXSwgZmFjdG9yeSkgOlxuICAgIChnbG9iYWwgPSB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWxUaGlzIDogZ2xvYmFsIHx8IHNlbGYsIGZhY3RvcnkoZ2xvYmFsLmFzeW5jID0ge30pKTtcbn0pKHRoaXMsIChmdW5jdGlvbiAoZXhwb3J0cykgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgY29udGludWF0aW9uIGZ1bmN0aW9uIHdpdGggc29tZSBhcmd1bWVudHMgYWxyZWFkeSBhcHBsaWVkLlxuICAgICAqXG4gICAgICogVXNlZnVsIGFzIGEgc2hvcnRoYW5kIHdoZW4gY29tYmluZWQgd2l0aCBvdGhlciBjb250cm9sIGZsb3cgZnVuY3Rpb25zLiBBbnlcbiAgICAgKiBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSByZXR1cm5lZCBmdW5jdGlvbiBhcmUgYWRkZWQgdG8gdGhlIGFyZ3VtZW50c1xuICAgICAqIG9yaWdpbmFsbHkgcGFzc2VkIHRvIGFwcGx5LlxuICAgICAqXG4gICAgICogQG5hbWUgYXBwbHlcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpVdGlsc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIC0gVGhlIGZ1bmN0aW9uIHlvdSB3YW50IHRvIGV2ZW50dWFsbHkgYXBwbHkgYWxsXG4gICAgICogYXJndW1lbnRzIHRvLiBJbnZva2VzIHdpdGggKGFyZ3VtZW50cy4uLikuXG4gICAgICogQHBhcmFtIHsuLi4qfSBhcmd1bWVudHMuLi4gLSBBbnkgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBhdXRvbWF0aWNhbGx5IGFwcGx5XG4gICAgICogd2hlbiB0aGUgY29udGludWF0aW9uIGlzIGNhbGxlZC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IHRoZSBwYXJ0aWFsbHktYXBwbGllZCBmdW5jdGlvblxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyB1c2luZyBhcHBseVxuICAgICAqIGFzeW5jLnBhcmFsbGVsKFtcbiAgICAgKiAgICAgYXN5bmMuYXBwbHkoZnMud3JpdGVGaWxlLCAndGVzdGZpbGUxJywgJ3Rlc3QxJyksXG4gICAgICogICAgIGFzeW5jLmFwcGx5KGZzLndyaXRlRmlsZSwgJ3Rlc3RmaWxlMicsICd0ZXN0MicpXG4gICAgICogXSk7XG4gICAgICpcbiAgICAgKlxuICAgICAqIC8vIHRoZSBzYW1lIHByb2Nlc3Mgd2l0aG91dCB1c2luZyBhcHBseVxuICAgICAqIGFzeW5jLnBhcmFsbGVsKFtcbiAgICAgKiAgICAgZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIGZzLndyaXRlRmlsZSgndGVzdGZpbGUxJywgJ3Rlc3QxJywgY2FsbGJhY2spO1xuICAgICAqICAgICB9LFxuICAgICAqICAgICBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgZnMud3JpdGVGaWxlKCd0ZXN0ZmlsZTInLCAndGVzdDInLCBjYWxsYmFjayk7XG4gICAgICogICAgIH1cbiAgICAgKiBdKTtcbiAgICAgKlxuICAgICAqIC8vIEl0J3MgcG9zc2libGUgdG8gcGFzcyBhbnkgbnVtYmVyIG9mIGFkZGl0aW9uYWwgYXJndW1lbnRzIHdoZW4gY2FsbGluZyB0aGVcbiAgICAgKiAvLyBjb250aW51YXRpb246XG4gICAgICpcbiAgICAgKiBub2RlPiB2YXIgZm4gPSBhc3luYy5hcHBseShzeXMucHV0cywgJ29uZScpO1xuICAgICAqIG5vZGU+IGZuKCd0d28nLCAndGhyZWUnKTtcbiAgICAgKiBvbmVcbiAgICAgKiB0d29cbiAgICAgKiB0aHJlZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGFwcGx5KGZuLCAuLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiAoLi4uY2FsbEFyZ3MpID0+IGZuKC4uLmFyZ3MsLi4uY2FsbEFyZ3MpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluaXRpYWxQYXJhbXMgKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoLi4uYXJncy8qLCBjYWxsYmFjayovKSB7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmNhbGwodGhpcywgYXJncywgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBmaWxlICovXG5cbiAgICB2YXIgaGFzUXVldWVNaWNyb3Rhc2sgPSB0eXBlb2YgcXVldWVNaWNyb3Rhc2sgPT09ICdmdW5jdGlvbicgJiYgcXVldWVNaWNyb3Rhc2s7XG4gICAgdmFyIGhhc1NldEltbWVkaWF0ZSA9IHR5cGVvZiBzZXRJbW1lZGlhdGUgPT09ICdmdW5jdGlvbicgJiYgc2V0SW1tZWRpYXRlO1xuICAgIHZhciBoYXNOZXh0VGljayA9IHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgcHJvY2Vzcy5uZXh0VGljayA9PT0gJ2Z1bmN0aW9uJztcblxuICAgIGZ1bmN0aW9uIGZhbGxiYWNrKGZuKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZm4sIDApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdyYXAoZGVmZXIpIHtcbiAgICAgICAgcmV0dXJuIChmbiwgLi4uYXJncykgPT4gZGVmZXIoKCkgPT4gZm4oLi4uYXJncykpO1xuICAgIH1cblxuICAgIHZhciBfZGVmZXIkMTtcblxuICAgIGlmIChoYXNRdWV1ZU1pY3JvdGFzaykge1xuICAgICAgICBfZGVmZXIkMSA9IHF1ZXVlTWljcm90YXNrO1xuICAgIH0gZWxzZSBpZiAoaGFzU2V0SW1tZWRpYXRlKSB7XG4gICAgICAgIF9kZWZlciQxID0gc2V0SW1tZWRpYXRlO1xuICAgIH0gZWxzZSBpZiAoaGFzTmV4dFRpY2spIHtcbiAgICAgICAgX2RlZmVyJDEgPSBwcm9jZXNzLm5leHRUaWNrO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIF9kZWZlciQxID0gZmFsbGJhY2s7XG4gICAgfVxuXG4gICAgdmFyIHNldEltbWVkaWF0ZSQxID0gd3JhcChfZGVmZXIkMSk7XG5cbiAgICAvKipcbiAgICAgKiBUYWtlIGEgc3luYyBmdW5jdGlvbiBhbmQgbWFrZSBpdCBhc3luYywgcGFzc2luZyBpdHMgcmV0dXJuIHZhbHVlIHRvIGFcbiAgICAgKiBjYWxsYmFjay4gVGhpcyBpcyB1c2VmdWwgZm9yIHBsdWdnaW5nIHN5bmMgZnVuY3Rpb25zIGludG8gYSB3YXRlcmZhbGwsXG4gICAgICogc2VyaWVzLCBvciBvdGhlciBhc3luYyBmdW5jdGlvbnMuIEFueSBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBnZW5lcmF0ZWRcbiAgICAgKiBmdW5jdGlvbiB3aWxsIGJlIHBhc3NlZCB0byB0aGUgd3JhcHBlZCBmdW5jdGlvbiAoZXhjZXB0IGZvciB0aGUgZmluYWxcbiAgICAgKiBjYWxsYmFjayBhcmd1bWVudCkuIEVycm9ycyB0aHJvd24gd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrLlxuICAgICAqXG4gICAgICogSWYgdGhlIGZ1bmN0aW9uIHBhc3NlZCB0byBgYXN5bmNpZnlgIHJldHVybnMgYSBQcm9taXNlLCB0aGF0IHByb21pc2VzJ3NcbiAgICAgKiByZXNvbHZlZC9yZWplY3RlZCBzdGF0ZSB3aWxsIGJlIHVzZWQgdG8gY2FsbCB0aGUgY2FsbGJhY2ssIHJhdGhlciB0aGFuIHNpbXBseVxuICAgICAqIHRoZSBzeW5jaHJvbm91cyByZXR1cm4gdmFsdWUuXG4gICAgICpcbiAgICAgKiBUaGlzIGFsc28gbWVhbnMgeW91IGNhbiBhc3luY2lmeSBFUzIwMTcgYGFzeW5jYCBmdW5jdGlvbnMuXG4gICAgICpcbiAgICAgKiBAbmFtZSBhc3luY2lmeVxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOlV0aWxzXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBhbGlhcyB3cmFwU3luY1xuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyAtIFRoZSBzeW5jaHJvbm91cyBmdW5jdGlvbiwgb3IgUHJvbWlzZS1yZXR1cm5pbmdcbiAgICAgKiBmdW5jdGlvbiB0byBjb252ZXJ0IHRvIGFuIHtAbGluayBBc3luY0Z1bmN0aW9ufS5cbiAgICAgKiBAcmV0dXJucyB7QXN5bmNGdW5jdGlvbn0gQW4gYXN5bmNocm9ub3VzIHdyYXBwZXIgb2YgdGhlIGBmdW5jYC4gVG8gYmVcbiAgICAgKiBpbnZva2VkIHdpdGggYChhcmdzLi4uLCBjYWxsYmFjaylgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBwYXNzaW5nIGEgcmVndWxhciBzeW5jaHJvbm91cyBmdW5jdGlvblxuICAgICAqIGFzeW5jLndhdGVyZmFsbChbXG4gICAgICogICAgIGFzeW5jLmFwcGx5KGZzLnJlYWRGaWxlLCBmaWxlbmFtZSwgXCJ1dGY4XCIpLFxuICAgICAqICAgICBhc3luYy5hc3luY2lmeShKU09OLnBhcnNlKSxcbiAgICAgKiAgICAgZnVuY3Rpb24gKGRhdGEsIG5leHQpIHtcbiAgICAgKiAgICAgICAgIC8vIGRhdGEgaXMgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIHRoZSB0ZXh0LlxuICAgICAqICAgICAgICAgLy8gSWYgdGhlcmUgd2FzIGEgcGFyc2luZyBlcnJvciwgaXQgd291bGQgaGF2ZSBiZWVuIGNhdWdodC5cbiAgICAgKiAgICAgfVxuICAgICAqIF0sIGNhbGxiYWNrKTtcbiAgICAgKlxuICAgICAqIC8vIHBhc3NpbmcgYSBmdW5jdGlvbiByZXR1cm5pbmcgYSBwcm9taXNlXG4gICAgICogYXN5bmMud2F0ZXJmYWxsKFtcbiAgICAgKiAgICAgYXN5bmMuYXBwbHkoZnMucmVhZEZpbGUsIGZpbGVuYW1lLCBcInV0ZjhcIiksXG4gICAgICogICAgIGFzeW5jLmFzeW5jaWZ5KGZ1bmN0aW9uIChjb250ZW50cykge1xuICAgICAqICAgICAgICAgcmV0dXJuIGRiLm1vZGVsLmNyZWF0ZShjb250ZW50cyk7XG4gICAgICogICAgIH0pLFxuICAgICAqICAgICBmdW5jdGlvbiAobW9kZWwsIG5leHQpIHtcbiAgICAgKiAgICAgICAgIC8vIGBtb2RlbGAgaXMgdGhlIGluc3RhbnRpYXRlZCBtb2RlbCBvYmplY3QuXG4gICAgICogICAgICAgICAvLyBJZiB0aGVyZSB3YXMgYW4gZXJyb3IsIHRoaXMgZnVuY3Rpb24gd291bGQgYmUgc2tpcHBlZC5cbiAgICAgKiAgICAgfVxuICAgICAqIF0sIGNhbGxiYWNrKTtcbiAgICAgKlxuICAgICAqIC8vIGVzMjAxNyBleGFtcGxlLCB0aG91Z2ggYGFzeW5jaWZ5YCBpcyBub3QgbmVlZGVkIGlmIHlvdXIgSlMgZW52aXJvbm1lbnRcbiAgICAgKiAvLyBzdXBwb3J0cyBhc3luYyBmdW5jdGlvbnMgb3V0IG9mIHRoZSBib3hcbiAgICAgKiB2YXIgcSA9IGFzeW5jLnF1ZXVlKGFzeW5jLmFzeW5jaWZ5KGFzeW5jIGZ1bmN0aW9uKGZpbGUpIHtcbiAgICAgKiAgICAgdmFyIGludGVybWVkaWF0ZVN0ZXAgPSBhd2FpdCBwcm9jZXNzRmlsZShmaWxlKTtcbiAgICAgKiAgICAgcmV0dXJuIGF3YWl0IHNvbWVQcm9taXNlKGludGVybWVkaWF0ZVN0ZXApXG4gICAgICogfSkpO1xuICAgICAqXG4gICAgICogcS5wdXNoKGZpbGVzKTtcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBhc3luY2lmeShmdW5jKSB7XG4gICAgICAgIGlmIChpc0FzeW5jKGZ1bmMpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3MvKiwgY2FsbGJhY2sqLykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9taXNlID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlUHJvbWlzZShwcm9taXNlLCBjYWxsYmFjaylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpbml0aWFsUGFyYW1zKGZ1bmN0aW9uIChhcmdzLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgdmFyIHJlc3VsdDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBpZiByZXN1bHQgaXMgUHJvbWlzZSBvYmplY3RcbiAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgdHlwZW9mIHJlc3VsdC50aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVByb21pc2UocmVzdWx0LCBjYWxsYmFjaylcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFuZGxlUHJvbWlzZShwcm9taXNlLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gcHJvbWlzZS50aGVuKHZhbHVlID0+IHtcbiAgICAgICAgICAgIGludm9rZUNhbGxiYWNrKGNhbGxiYWNrLCBudWxsLCB2YWx1ZSk7XG4gICAgICAgIH0sIGVyciA9PiB7XG4gICAgICAgICAgICBpbnZva2VDYWxsYmFjayhjYWxsYmFjaywgZXJyICYmIChlcnIgaW5zdGFuY2VvZiBFcnJvciB8fCBlcnIubWVzc2FnZSkgPyBlcnIgOiBuZXcgRXJyb3IoZXJyKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGludm9rZUNhbGxiYWNrKGNhbGxiYWNrLCBlcnJvciwgdmFsdWUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVycm9yLCB2YWx1ZSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgc2V0SW1tZWRpYXRlJDEoZSA9PiB7IHRocm93IGUgfSwgZXJyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQXN5bmMoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZuW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdBc3luY0Z1bmN0aW9uJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0FzeW5jR2VuZXJhdG9yKGZuKSB7XG4gICAgICAgIHJldHVybiBmbltTeW1ib2wudG9TdHJpbmdUYWddID09PSAnQXN5bmNHZW5lcmF0b3InO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQXN5bmNJdGVyYWJsZShvYmopIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBvYmpbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID09PSAnZnVuY3Rpb24nO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdyYXBBc3luYyhhc3luY0ZuKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYXN5bmNGbiAhPT0gJ2Z1bmN0aW9uJykgdGhyb3cgbmV3IEVycm9yKCdleHBlY3RlZCBhIGZ1bmN0aW9uJylcbiAgICAgICAgcmV0dXJuIGlzQXN5bmMoYXN5bmNGbikgPyBhc3luY2lmeShhc3luY0ZuKSA6IGFzeW5jRm47XG4gICAgfVxuXG4gICAgLy8gY29uZGl0aW9uYWxseSBwcm9taXNpZnkgYSBmdW5jdGlvbi5cbiAgICAvLyBvbmx5IHJldHVybiBhIHByb21pc2UgaWYgYSBjYWxsYmFjayBpcyBvbWl0dGVkXG4gICAgZnVuY3Rpb24gYXdhaXRpZnkgKGFzeW5jRm4sIGFyaXR5KSB7XG4gICAgICAgIGlmICghYXJpdHkpIGFyaXR5ID0gYXN5bmNGbi5sZW5ndGg7XG4gICAgICAgIGlmICghYXJpdHkpIHRocm93IG5ldyBFcnJvcignYXJpdHkgaXMgdW5kZWZpbmVkJylcbiAgICAgICAgZnVuY3Rpb24gYXdhaXRhYmxlICguLi5hcmdzKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGFyZ3NbYXJpdHkgLSAxXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBhc3luY0ZuLmFwcGx5KHRoaXMsIGFyZ3MpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgYXJnc1thcml0eSAtIDFdID0gKGVyciwgLi4uY2JBcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiByZWplY3QoZXJyKVxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGNiQXJncy5sZW5ndGggPiAxID8gY2JBcmdzIDogY2JBcmdzWzBdKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGFzeW5jRm4uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGF3YWl0YWJsZVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFwcGx5RWFjaCQxIChlYWNoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGFwcGx5RWFjaChmbnMsIC4uLmNhbGxBcmdzKSB7XG4gICAgICAgICAgICBjb25zdCBnbyA9IGF3YWl0aWZ5KGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgICAgICByZXR1cm4gZWFjaGZuKGZucywgKGZuLCBjYikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB3cmFwQXN5bmMoZm4pLmFwcGx5KHRoYXQsIGNhbGxBcmdzLmNvbmNhdChjYikpO1xuICAgICAgICAgICAgICAgIH0sIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGdvO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9hc3luY01hcChlYWNoZm4sIGFyciwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFyciA9IGFyciB8fCBbXTtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgICAgICB2YXIgX2l0ZXJhdGVlID0gd3JhcEFzeW5jKGl0ZXJhdGVlKTtcblxuICAgICAgICByZXR1cm4gZWFjaGZuKGFyciwgKHZhbHVlLCBfLCBpdGVyQ2IpID0+IHtcbiAgICAgICAgICAgIHZhciBpbmRleCA9IGNvdW50ZXIrKztcbiAgICAgICAgICAgIF9pdGVyYXRlZSh2YWx1ZSwgKGVyciwgdikgPT4ge1xuICAgICAgICAgICAgICAgIHJlc3VsdHNbaW5kZXhdID0gdjtcbiAgICAgICAgICAgICAgICBpdGVyQ2IoZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBlcnIgPT4ge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNBcnJheUxpa2UodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlICYmXG4gICAgICAgICAgICB0eXBlb2YgdmFsdWUubGVuZ3RoID09PSAnbnVtYmVyJyAmJlxuICAgICAgICAgICAgdmFsdWUubGVuZ3RoID49IDAgJiZcbiAgICAgICAgICAgIHZhbHVlLmxlbmd0aCAlIDEgPT09IDA7XG4gICAgfVxuXG4gICAgLy8gQSB0ZW1wb3JhcnkgdmFsdWUgdXNlZCB0byBpZGVudGlmeSBpZiB0aGUgbG9vcCBzaG91bGQgYmUgYnJva2VuLlxuICAgIC8vIFNlZSAjMTA2NCwgIzEyOTNcbiAgICBjb25zdCBicmVha0xvb3AgPSB7fTtcblxuICAgIGZ1bmN0aW9uIG9uY2UoZm4pIHtcbiAgICAgICAgZnVuY3Rpb24gd3JhcHBlciAoLi4uYXJncykge1xuICAgICAgICAgICAgaWYgKGZuID09PSBudWxsKSByZXR1cm47XG4gICAgICAgICAgICB2YXIgY2FsbEZuID0gZm47XG4gICAgICAgICAgICBmbiA9IG51bGw7XG4gICAgICAgICAgICBjYWxsRm4uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih3cmFwcGVyLCBmbik7XG4gICAgICAgIHJldHVybiB3cmFwcGVyXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0SXRlcmF0b3IgKGNvbGwpIHtcbiAgICAgICAgcmV0dXJuIGNvbGxbU3ltYm9sLml0ZXJhdG9yXSAmJiBjb2xsW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVBcnJheUl0ZXJhdG9yKGNvbGwpIHtcbiAgICAgICAgdmFyIGkgPSAtMTtcbiAgICAgICAgdmFyIGxlbiA9IGNvbGwubGVuZ3RoO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICAgIHJldHVybiArK2kgPCBsZW4gPyB7dmFsdWU6IGNvbGxbaV0sIGtleTogaX0gOiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlRVMyMDE1SXRlcmF0b3IoaXRlcmF0b3IpIHtcbiAgICAgICAgdmFyIGkgPSAtMTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgICB2YXIgaXRlbSA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgICAgIGlmIChpdGVtLmRvbmUpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBpKys7XG4gICAgICAgICAgICByZXR1cm4ge3ZhbHVlOiBpdGVtLnZhbHVlLCBrZXk6IGl9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlT2JqZWN0SXRlcmF0b3Iob2JqKSB7XG4gICAgICAgIHZhciBva2V5cyA9IG9iaiA/IE9iamVjdC5rZXlzKG9iaikgOiBbXTtcbiAgICAgICAgdmFyIGkgPSAtMTtcbiAgICAgICAgdmFyIGxlbiA9IG9rZXlzLmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgICB2YXIga2V5ID0gb2tleXNbKytpXTtcbiAgICAgICAgICAgIGlmIChrZXkgPT09ICdfX3Byb3RvX18nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBpIDwgbGVuID8ge3ZhbHVlOiBvYmpba2V5XSwga2V5fSA6IG51bGw7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlSXRlcmF0b3IoY29sbCkge1xuICAgICAgICBpZiAoaXNBcnJheUxpa2UoY29sbCkpIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVBcnJheUl0ZXJhdG9yKGNvbGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGl0ZXJhdG9yID0gZ2V0SXRlcmF0b3IoY29sbCk7XG4gICAgICAgIHJldHVybiBpdGVyYXRvciA/IGNyZWF0ZUVTMjAxNUl0ZXJhdG9yKGl0ZXJhdG9yKSA6IGNyZWF0ZU9iamVjdEl0ZXJhdG9yKGNvbGwpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9ubHlPbmNlKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgICAgICAgICAgaWYgKGZuID09PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoXCJDYWxsYmFjayB3YXMgYWxyZWFkeSBjYWxsZWQuXCIpO1xuICAgICAgICAgICAgdmFyIGNhbGxGbiA9IGZuO1xuICAgICAgICAgICAgZm4gPSBudWxsO1xuICAgICAgICAgICAgY2FsbEZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIGZvciBhc3luYyBnZW5lcmF0b3JzXG4gICAgZnVuY3Rpb24gYXN5bmNFYWNoT2ZMaW1pdChnZW5lcmF0b3IsIGxpbWl0LCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgbGV0IGRvbmUgPSBmYWxzZTtcbiAgICAgICAgbGV0IGNhbmNlbGVkID0gZmFsc2U7XG4gICAgICAgIGxldCBhd2FpdGluZyA9IGZhbHNlO1xuICAgICAgICBsZXQgcnVubmluZyA9IDA7XG4gICAgICAgIGxldCBpZHggPSAwO1xuXG4gICAgICAgIGZ1bmN0aW9uIHJlcGxlbmlzaCgpIHtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ3JlcGxlbmlzaCcpXG4gICAgICAgICAgICBpZiAocnVubmluZyA+PSBsaW1pdCB8fCBhd2FpdGluZyB8fCBkb25lKSByZXR1cm5cbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ3JlcGxlbmlzaCBhd2FpdGluZycpXG4gICAgICAgICAgICBhd2FpdGluZyA9IHRydWU7XG4gICAgICAgICAgICBnZW5lcmF0b3IubmV4dCgpLnRoZW4oKHt2YWx1ZSwgZG9uZTogaXRlckRvbmV9KSA9PiB7XG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnZ290IHZhbHVlJywgdmFsdWUpXG4gICAgICAgICAgICAgICAgaWYgKGNhbmNlbGVkIHx8IGRvbmUpIHJldHVyblxuICAgICAgICAgICAgICAgIGF3YWl0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZXJEb25lKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAocnVubmluZyA8PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdkb25lIG5leHRDYicpXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJ1bm5pbmcrKztcbiAgICAgICAgICAgICAgICBpdGVyYXRlZSh2YWx1ZSwgaWR4LCBpdGVyYXRlZUNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICBpZHgrKztcbiAgICAgICAgICAgICAgICByZXBsZW5pc2goKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGhhbmRsZUVycm9yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGl0ZXJhdGVlQ2FsbGJhY2soZXJyLCByZXN1bHQpIHtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ2l0ZXJhdGVlQ2FsbGJhY2snKVxuICAgICAgICAgICAgcnVubmluZyAtPSAxO1xuICAgICAgICAgICAgaWYgKGNhbmNlbGVkKSByZXR1cm5cbiAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBoYW5kbGVFcnJvcihlcnIpXG5cbiAgICAgICAgICAgIGlmIChlcnIgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgY2FuY2VsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVzdWx0ID09PSBicmVha0xvb3AgfHwgKGRvbmUgJiYgcnVubmluZyA8PSAwKSkge1xuICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ2RvbmUgaXRlckNiJylcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXBsZW5pc2goKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGhhbmRsZUVycm9yKGVycikge1xuICAgICAgICAgICAgaWYgKGNhbmNlbGVkKSByZXR1cm5cbiAgICAgICAgICAgIGF3YWl0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgIH1cblxuICAgICAgICByZXBsZW5pc2goKTtcbiAgICB9XG5cbiAgICB2YXIgZWFjaE9mTGltaXQkMiA9IChsaW1pdCkgPT4ge1xuICAgICAgICByZXR1cm4gKG9iaiwgaXRlcmF0ZWUsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IG9uY2UoY2FsbGJhY2spO1xuICAgICAgICAgICAgaWYgKGxpbWl0IDw9IDApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignY29uY3VycmVuY3kgbGltaXQgY2Fubm90IGJlIGxlc3MgdGhhbiAxJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghb2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzQXN5bmNHZW5lcmF0b3Iob2JqKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhc3luY0VhY2hPZkxpbWl0KG9iaiwgbGltaXQsIGl0ZXJhdGVlLCBjYWxsYmFjaylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc0FzeW5jSXRlcmFibGUob2JqKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhc3luY0VhY2hPZkxpbWl0KG9ialtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSwgbGltaXQsIGl0ZXJhdGVlLCBjYWxsYmFjaylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBuZXh0RWxlbSA9IGNyZWF0ZUl0ZXJhdG9yKG9iaik7XG4gICAgICAgICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgdmFyIGNhbmNlbGVkID0gZmFsc2U7XG4gICAgICAgICAgICB2YXIgcnVubmluZyA9IDA7XG4gICAgICAgICAgICB2YXIgbG9vcGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICBmdW5jdGlvbiBpdGVyYXRlZUNhbGxiYWNrKGVyciwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2FuY2VsZWQpIHJldHVyblxuICAgICAgICAgICAgICAgIHJ1bm5pbmcgLT0gMTtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChlcnIgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBjYW5jZWxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlID09PSBicmVha0xvb3AgfHwgKGRvbmUgJiYgcnVubmluZyA8PSAwKSkge1xuICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICghbG9vcGluZykge1xuICAgICAgICAgICAgICAgICAgICByZXBsZW5pc2goKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIHJlcGxlbmlzaCAoKSB7XG4gICAgICAgICAgICAgICAgbG9vcGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgd2hpbGUgKHJ1bm5pbmcgPCBsaW1pdCAmJiAhZG9uZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZWxlbSA9IG5leHRFbGVtKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlbGVtID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChydW5uaW5nIDw9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBydW5uaW5nICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGl0ZXJhdGVlKGVsZW0udmFsdWUsIGVsZW0ua2V5LCBvbmx5T25jZShpdGVyYXRlZUNhbGxiYWNrKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxvb3BpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVwbGVuaXNoKCk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzYW1lIGFzIFtgZWFjaE9mYF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmVhY2hPZn0gYnV0IHJ1bnMgYSBtYXhpbXVtIG9mIGBsaW1pdGAgYXN5bmMgb3BlcmF0aW9ucyBhdCBhXG4gICAgICogdGltZS5cbiAgICAgKlxuICAgICAqIEBuYW1lIGVhY2hPZkxpbWl0XG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMuZWFjaE9mXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZWFjaE9mfVxuICAgICAqIEBhbGlhcyBmb3JFYWNoT2ZMaW1pdFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbWl0IC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGFzeW5jIG9wZXJhdGlvbnMgYXQgYSB0aW1lLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBbiBhc3luYyBmdW5jdGlvbiB0byBhcHBseSB0byBlYWNoXG4gICAgICogaXRlbSBpbiBgY29sbGAuIFRoZSBga2V5YCBpcyB0aGUgaXRlbSdzIGtleSwgb3IgaW5kZXggaW4gdGhlIGNhc2Ugb2YgYW5cbiAgICAgKiBhcnJheS5cbiAgICAgKiBJbnZva2VkIHdpdGggKGl0ZW0sIGtleSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCB3aGVuIGFsbFxuICAgICAqIGBpdGVyYXRlZWAgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQsIG9yIGFuIGVycm9yIG9jY3Vycy4gSW52b2tlZCB3aXRoIChlcnIpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIGEgY2FsbGJhY2sgaXMgb21pdHRlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGVhY2hPZkxpbWl0KGNvbGwsIGxpbWl0LCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGVhY2hPZkxpbWl0JDIobGltaXQpKGNvbGwsIHdyYXBBc3luYyhpdGVyYXRlZSksIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICB2YXIgZWFjaE9mTGltaXQkMSA9IGF3YWl0aWZ5KGVhY2hPZkxpbWl0LCA0KTtcblxuICAgIC8vIGVhY2hPZiBpbXBsZW1lbnRhdGlvbiBvcHRpbWl6ZWQgZm9yIGFycmF5LWxpa2VzXG4gICAgZnVuY3Rpb24gZWFjaE9mQXJyYXlMaWtlKGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IG9uY2UoY2FsbGJhY2spO1xuICAgICAgICB2YXIgaW5kZXggPSAwLFxuICAgICAgICAgICAgY29tcGxldGVkID0gMCxcbiAgICAgICAgICAgIHtsZW5ndGh9ID0gY29sbCxcbiAgICAgICAgICAgIGNhbmNlbGVkID0gZmFsc2U7XG4gICAgICAgIGlmIChsZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gaXRlcmF0b3JDYWxsYmFjayhlcnIsIHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoZXJyID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIGNhbmNlbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjYW5jZWxlZCA9PT0gdHJ1ZSkgcmV0dXJuXG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoKCsrY29tcGxldGVkID09PSBsZW5ndGgpIHx8IHZhbHVlID09PSBicmVha0xvb3ApIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgaXRlcmF0ZWUoY29sbFtpbmRleF0sIGluZGV4LCBvbmx5T25jZShpdGVyYXRvckNhbGxiYWNrKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBhIGdlbmVyaWMgdmVyc2lvbiBvZiBlYWNoT2Ygd2hpY2ggY2FuIGhhbmRsZSBhcnJheSwgb2JqZWN0LCBhbmQgaXRlcmF0b3IgY2FzZXMuXG4gICAgZnVuY3Rpb24gZWFjaE9mR2VuZXJpYyAoY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBlYWNoT2ZMaW1pdCQxKGNvbGwsIEluZmluaXR5LCBpdGVyYXRlZSwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExpa2UgW2BlYWNoYF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmVhY2h9LCBleGNlcHQgdGhhdCBpdCBwYXNzZXMgdGhlIGtleSAob3IgaW5kZXgpIGFzIHRoZSBzZWNvbmQgYXJndW1lbnRcbiAgICAgKiB0byB0aGUgaXRlcmF0ZWUuXG4gICAgICpcbiAgICAgKiBAbmFtZSBlYWNoT2ZcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAYWxpYXMgZm9yRWFjaE9mXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAc2VlIFthc3luYy5lYWNoXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZWFjaH1cbiAgICAgKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfEFzeW5jSXRlcmFibGV8T2JqZWN0fSBjb2xsIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQSBmdW5jdGlvbiB0byBhcHBseSB0byBlYWNoXG4gICAgICogaXRlbSBpbiBgY29sbGAuXG4gICAgICogVGhlIGBrZXlgIGlzIHRoZSBpdGVtJ3Mga2V5LCBvciBpbmRleCBpbiB0aGUgY2FzZSBvZiBhbiBhcnJheS5cbiAgICAgKiBJbnZva2VkIHdpdGggKGl0ZW0sIGtleSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCB3aGVuIGFsbFxuICAgICAqIGBpdGVyYXRlZWAgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQsIG9yIGFuIGVycm9yIG9jY3Vycy4gSW52b2tlZCB3aXRoIChlcnIpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIGEgY2FsbGJhY2sgaXMgb21pdHRlZFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBkZXYuanNvbiBpcyBhIGZpbGUgY29udGFpbmluZyBhIHZhbGlkIGpzb24gb2JqZWN0IGNvbmZpZyBmb3IgZGV2IGVudmlyb25tZW50XG4gICAgICogLy8gZGV2Lmpzb24gaXMgYSBmaWxlIGNvbnRhaW5pbmcgYSB2YWxpZCBqc29uIG9iamVjdCBjb25maWcgZm9yIHRlc3QgZW52aXJvbm1lbnRcbiAgICAgKiAvLyBwcm9kLmpzb24gaXMgYSBmaWxlIGNvbnRhaW5pbmcgYSB2YWxpZCBqc29uIG9iamVjdCBjb25maWcgZm9yIHByb2QgZW52aXJvbm1lbnRcbiAgICAgKiAvLyBpbnZhbGlkLmpzb24gaXMgYSBmaWxlIHdpdGggYSBtYWxmb3JtZWQganNvbiBvYmplY3RcbiAgICAgKlxuICAgICAqIGxldCBjb25maWdzID0ge307IC8vZ2xvYmFsIHZhcmlhYmxlXG4gICAgICogbGV0IHZhbGlkQ29uZmlnRmlsZU1hcCA9IHtkZXY6ICdkZXYuanNvbicsIHRlc3Q6ICd0ZXN0Lmpzb24nLCBwcm9kOiAncHJvZC5qc29uJ307XG4gICAgICogbGV0IGludmFsaWRDb25maWdGaWxlTWFwID0ge2RldjogJ2Rldi5qc29uJywgdGVzdDogJ3Rlc3QuanNvbicsIGludmFsaWQ6ICdpbnZhbGlkLmpzb24nfTtcbiAgICAgKlxuICAgICAqIC8vIGFzeW5jaHJvbm91cyBmdW5jdGlvbiB0aGF0IHJlYWRzIGEganNvbiBmaWxlIGFuZCBwYXJzZXMgdGhlIGNvbnRlbnRzIGFzIGpzb24gb2JqZWN0XG4gICAgICogZnVuY3Rpb24gcGFyc2VGaWxlKGZpbGUsIGtleSwgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgZnMucmVhZEZpbGUoZmlsZSwgXCJ1dGY4XCIsIGZ1bmN0aW9uKGVyciwgZGF0YSkge1xuICAgICAqICAgICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGJhY2soZXJyKTtcbiAgICAgKiAgICAgICAgIHRyeSB7XG4gICAgICogICAgICAgICAgICAgY29uZmlnc1trZXldID0gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgKiAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgKiAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZSk7XG4gICAgICogICAgICAgICB9XG4gICAgICogICAgICAgICBjYWxsYmFjaygpO1xuICAgICAqICAgICB9KTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBjYWxsYmFja3NcbiAgICAgKiBhc3luYy5mb3JFYWNoT2YodmFsaWRDb25maWdGaWxlTWFwLCBwYXJzZUZpbGUsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgKiAgICAgaWYgKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAqICAgICB9IGVsc2Uge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coY29uZmlncyk7XG4gICAgICogICAgICAgICAvLyBjb25maWdzIGlzIG5vdyBhIG1hcCBvZiBKU09OIGRhdGEsIGUuZy5cbiAgICAgKiAgICAgICAgIC8vIHsgZGV2OiAvL3BhcnNlZCBkZXYuanNvbiwgdGVzdDogLy9wYXJzZWQgdGVzdC5qc29uLCBwcm9kOiAvL3BhcnNlZCBwcm9kLmpzb259XG4gICAgICogICAgIH1cbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vRXJyb3IgaGFuZGluZ1xuICAgICAqIGFzeW5jLmZvckVhY2hPZihpbnZhbGlkQ29uZmlnRmlsZU1hcCwgcGFyc2VGaWxlLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICogICAgIGlmIChlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgKiAgICAgICAgIC8vIEpTT04gcGFyc2UgZXJyb3IgZXhjZXB0aW9uXG4gICAgICogICAgIH0gZWxzZSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhjb25maWdzKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgUHJvbWlzZXNcbiAgICAgKiBhc3luYy5mb3JFYWNoT2YodmFsaWRDb25maWdGaWxlTWFwLCBwYXJzZUZpbGUpXG4gICAgICogLnRoZW4oICgpID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coY29uZmlncyk7XG4gICAgICogICAgIC8vIGNvbmZpZ3MgaXMgbm93IGEgbWFwIG9mIEpTT04gZGF0YSwgZS5nLlxuICAgICAqICAgICAvLyB7IGRldjogLy9wYXJzZWQgZGV2Lmpzb24sIHRlc3Q6IC8vcGFyc2VkIHRlc3QuanNvbiwgcHJvZDogLy9wYXJzZWQgcHJvZC5qc29ufVxuICAgICAqIH0pLmNhdGNoKCBlcnIgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvL0Vycm9yIGhhbmRpbmdcbiAgICAgKiBhc3luYy5mb3JFYWNoT2YoaW52YWxpZENvbmZpZ0ZpbGVNYXAsIHBhcnNlRmlsZSlcbiAgICAgKiAudGhlbiggKCkgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhjb25maWdzKTtcbiAgICAgKiB9KS5jYXRjaCggZXJyID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAqICAgICAvLyBKU09OIHBhcnNlIGVycm9yIGV4Y2VwdGlvblxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgYXN5bmMvYXdhaXRcbiAgICAgKiBhc3luYyAoKSA9PiB7XG4gICAgICogICAgIHRyeSB7XG4gICAgICogICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgYXN5bmMuZm9yRWFjaE9mKHZhbGlkQ29uZmlnRmlsZU1hcCwgcGFyc2VGaWxlKTtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGNvbmZpZ3MpO1xuICAgICAqICAgICAgICAgLy8gY29uZmlncyBpcyBub3cgYSBtYXAgb2YgSlNPTiBkYXRhLCBlLmcuXG4gICAgICogICAgICAgICAvLyB7IGRldjogLy9wYXJzZWQgZGV2Lmpzb24sIHRlc3Q6IC8vcGFyc2VkIHRlc3QuanNvbiwgcHJvZDogLy9wYXJzZWQgcHJvZC5qc29ufVxuICAgICAqICAgICB9XG4gICAgICogICAgIGNhdGNoIChlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgIH1cbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvL0Vycm9yIGhhbmRpbmdcbiAgICAgKiBhc3luYyAoKSA9PiB7XG4gICAgICogICAgIHRyeSB7XG4gICAgICogICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgYXN5bmMuZm9yRWFjaE9mKGludmFsaWRDb25maWdGaWxlTWFwLCBwYXJzZUZpbGUpO1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coY29uZmlncyk7XG4gICAgICogICAgIH1cbiAgICAgKiAgICAgY2F0Y2ggKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgICAgIC8vIEpTT04gcGFyc2UgZXJyb3IgZXhjZXB0aW9uXG4gICAgICogICAgIH1cbiAgICAgKiB9XG4gICAgICpcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBlYWNoT2YoY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBlYWNoT2ZJbXBsZW1lbnRhdGlvbiA9IGlzQXJyYXlMaWtlKGNvbGwpID8gZWFjaE9mQXJyYXlMaWtlIDogZWFjaE9mR2VuZXJpYztcbiAgICAgICAgcmV0dXJuIGVhY2hPZkltcGxlbWVudGF0aW9uKGNvbGwsIHdyYXBBc3luYyhpdGVyYXRlZSksIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICB2YXIgZWFjaE9mJDEgPSBhd2FpdGlmeShlYWNoT2YsIDMpO1xuXG4gICAgLyoqXG4gICAgICogUHJvZHVjZXMgYSBuZXcgY29sbGVjdGlvbiBvZiB2YWx1ZXMgYnkgbWFwcGluZyBlYWNoIHZhbHVlIGluIGBjb2xsYCB0aHJvdWdoXG4gICAgICogdGhlIGBpdGVyYXRlZWAgZnVuY3Rpb24uIFRoZSBgaXRlcmF0ZWVgIGlzIGNhbGxlZCB3aXRoIGFuIGl0ZW0gZnJvbSBgY29sbGBcbiAgICAgKiBhbmQgYSBjYWxsYmFjayBmb3Igd2hlbiBpdCBoYXMgZmluaXNoZWQgcHJvY2Vzc2luZy4gRWFjaCBvZiB0aGVzZSBjYWxsYmFja3NcbiAgICAgKiB0YWtlcyAyIGFyZ3VtZW50czogYW4gYGVycm9yYCwgYW5kIHRoZSB0cmFuc2Zvcm1lZCBpdGVtIGZyb20gYGNvbGxgLiBJZlxuICAgICAqIGBpdGVyYXRlZWAgcGFzc2VzIGFuIGVycm9yIHRvIGl0cyBjYWxsYmFjaywgdGhlIG1haW4gYGNhbGxiYWNrYCAoZm9yIHRoZVxuICAgICAqIGBtYXBgIGZ1bmN0aW9uKSBpcyBpbW1lZGlhdGVseSBjYWxsZWQgd2l0aCB0aGUgZXJyb3IuXG4gICAgICpcbiAgICAgKiBOb3RlLCB0aGF0IHNpbmNlIHRoaXMgZnVuY3Rpb24gYXBwbGllcyB0aGUgYGl0ZXJhdGVlYCB0byBlYWNoIGl0ZW0gaW5cbiAgICAgKiBwYXJhbGxlbCwgdGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgdGhlIGBpdGVyYXRlZWAgZnVuY3Rpb25zIHdpbGwgY29tcGxldGVcbiAgICAgKiBpbiBvcmRlci4gSG93ZXZlciwgdGhlIHJlc3VsdHMgYXJyYXkgd2lsbCBiZSBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGVcbiAgICAgKiBvcmlnaW5hbCBgY29sbGAuXG4gICAgICpcbiAgICAgKiBJZiBgbWFwYCBpcyBwYXNzZWQgYW4gT2JqZWN0LCB0aGUgcmVzdWx0cyB3aWxsIGJlIGFuIEFycmF5LiAgVGhlIHJlc3VsdHNcbiAgICAgKiB3aWxsIHJvdWdobHkgYmUgaW4gdGhlIG9yZGVyIG9mIHRoZSBvcmlnaW5hbCBPYmplY3RzJyBrZXlzIChidXQgdGhpcyBjYW5cbiAgICAgKiB2YXJ5IGFjcm9zcyBKYXZhU2NyaXB0IGVuZ2luZXMpLlxuICAgICAqXG4gICAgICogQG5hbWUgbWFwXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfEFzeW5jSXRlcmFibGV8T2JqZWN0fSBjb2xsIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQW4gYXN5bmMgZnVuY3Rpb24gdG8gYXBwbHkgdG8gZWFjaCBpdGVtIGluXG4gICAgICogYGNvbGxgLlxuICAgICAqIFRoZSBpdGVyYXRlZSBzaG91bGQgY29tcGxldGUgd2l0aCB0aGUgdHJhbnNmb3JtZWQgaXRlbS5cbiAgICAgKiBJbnZva2VkIHdpdGggKGl0ZW0sIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgd2hlbiBhbGwgYGl0ZXJhdGVlYFxuICAgICAqIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLCBvciBhbiBlcnJvciBvY2N1cnMuIFJlc3VsdHMgaXMgYW4gQXJyYXkgb2YgdGhlXG4gICAgICogdHJhbnNmb3JtZWQgaXRlbXMgZnJvbSB0aGUgYGNvbGxgLiBJbnZva2VkIHdpdGggKGVyciwgcmVzdWx0cykuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgaXMgcGFzc2VkXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vIGZpbGUxLnR4dCBpcyBhIGZpbGUgdGhhdCBpcyAxMDAwIGJ5dGVzIGluIHNpemVcbiAgICAgKiAvLyBmaWxlMi50eHQgaXMgYSBmaWxlIHRoYXQgaXMgMjAwMCBieXRlcyBpbiBzaXplXG4gICAgICogLy8gZmlsZTMudHh0IGlzIGEgZmlsZSB0aGF0IGlzIDMwMDAgYnl0ZXMgaW4gc2l6ZVxuICAgICAqIC8vIGZpbGU0LnR4dCBkb2VzIG5vdCBleGlzdFxuICAgICAqXG4gICAgICogY29uc3QgZmlsZUxpc3QgPSBbJ2ZpbGUxLnR4dCcsJ2ZpbGUyLnR4dCcsJ2ZpbGUzLnR4dCddO1xuICAgICAqIGNvbnN0IHdpdGhNaXNzaW5nRmlsZUxpc3QgPSBbJ2ZpbGUxLnR4dCcsJ2ZpbGUyLnR4dCcsJ2ZpbGU0LnR4dCddO1xuICAgICAqXG4gICAgICogLy8gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgZmlsZSBzaXplIGluIGJ5dGVzXG4gICAgICogZnVuY3Rpb24gZ2V0RmlsZVNpemVJbkJ5dGVzKGZpbGUsIGNhbGxiYWNrKSB7XG4gICAgICogICAgIGZzLnN0YXQoZmlsZSwgZnVuY3Rpb24oZXJyLCBzdGF0KSB7XG4gICAgICogICAgICAgICBpZiAoZXJyKSB7XG4gICAgICogICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICogICAgICAgICB9XG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCBzdGF0LnNpemUpO1xuICAgICAqICAgICB9KTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBjYWxsYmFja3NcbiAgICAgKiBhc3luYy5tYXAoZmlsZUxpc3QsIGdldEZpbGVTaXplSW5CeXRlcywgZnVuY3Rpb24oZXJyLCByZXN1bHRzKSB7XG4gICAgICogICAgIGlmIChlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgIH0gZWxzZSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiAgICAgICAgIC8vIHJlc3VsdHMgaXMgbm93IGFuIGFycmF5IG9mIHRoZSBmaWxlIHNpemUgaW4gYnl0ZXMgZm9yIGVhY2ggZmlsZSwgZS5nLlxuICAgICAqICAgICAgICAgLy8gWyAxMDAwLCAyMDAwLCAzMDAwXVxuICAgICAqICAgICB9XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBFcnJvciBIYW5kbGluZ1xuICAgICAqIGFzeW5jLm1hcCh3aXRoTWlzc2luZ0ZpbGVMaXN0LCBnZXRGaWxlU2l6ZUluQnl0ZXMsIGZ1bmN0aW9uKGVyciwgcmVzdWx0cykge1xuICAgICAqICAgICBpZiAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICAgICAgLy8gWyBFcnJvcjogRU5PRU5UOiBubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IF1cbiAgICAgKiAgICAgfSBlbHNlIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgICB9XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBQcm9taXNlc1xuICAgICAqIGFzeW5jLm1hcChmaWxlTGlzdCwgZ2V0RmlsZVNpemVJbkJ5dGVzKVxuICAgICAqIC50aGVuKCByZXN1bHRzID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgIC8vIHJlc3VsdHMgaXMgbm93IGFuIGFycmF5IG9mIHRoZSBmaWxlIHNpemUgaW4gYnl0ZXMgZm9yIGVhY2ggZmlsZSwgZS5nLlxuICAgICAqICAgICAvLyBbIDEwMDAsIDIwMDAsIDMwMDBdXG4gICAgICogfSkuY2F0Y2goIGVyciA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBFcnJvciBIYW5kbGluZ1xuICAgICAqIGFzeW5jLm1hcCh3aXRoTWlzc2luZ0ZpbGVMaXN0LCBnZXRGaWxlU2l6ZUluQnl0ZXMpXG4gICAgICogLnRoZW4oIHJlc3VsdHMgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiB9KS5jYXRjaCggZXJyID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgLy8gWyBFcnJvcjogRU5PRU5UOiBubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IF1cbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIGFzeW5jL2F3YWl0XG4gICAgICogYXN5bmMgKCkgPT4ge1xuICAgICAqICAgICB0cnkge1xuICAgICAqICAgICAgICAgbGV0IHJlc3VsdHMgPSBhd2FpdCBhc3luYy5tYXAoZmlsZUxpc3QsIGdldEZpbGVTaXplSW5CeXRlcyk7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiAgICAgICAgIC8vIHJlc3VsdHMgaXMgbm93IGFuIGFycmF5IG9mIHRoZSBmaWxlIHNpemUgaW4gYnl0ZXMgZm9yIGVhY2ggZmlsZSwgZS5nLlxuICAgICAqICAgICAgICAgLy8gWyAxMDAwLCAyMDAwLCAzMDAwXVxuICAgICAqICAgICB9XG4gICAgICogICAgIGNhdGNoIChlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgIH1cbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBFcnJvciBIYW5kbGluZ1xuICAgICAqIGFzeW5jICgpID0+IHtcbiAgICAgKiAgICAgdHJ5IHtcbiAgICAgKiAgICAgICAgIGxldCByZXN1bHRzID0gYXdhaXQgYXN5bmMubWFwKHdpdGhNaXNzaW5nRmlsZUxpc3QsIGdldEZpbGVTaXplSW5CeXRlcyk7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICAgICAgLy8gWyBFcnJvcjogRU5PRU5UOiBubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IF1cbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1hcCAoY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBfYXN5bmNNYXAoZWFjaE9mJDEsIGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaylcbiAgICB9XG4gICAgdmFyIG1hcCQxID0gYXdhaXRpZnkobWFwLCAzKTtcblxuICAgIC8qKlxuICAgICAqIEFwcGxpZXMgdGhlIHByb3ZpZGVkIGFyZ3VtZW50cyB0byBlYWNoIGZ1bmN0aW9uIGluIHRoZSBhcnJheSwgY2FsbGluZ1xuICAgICAqIGBjYWxsYmFja2AgYWZ0ZXIgYWxsIGZ1bmN0aW9ucyBoYXZlIGNvbXBsZXRlZC4gSWYgeW91IG9ubHkgcHJvdmlkZSB0aGUgZmlyc3RcbiAgICAgKiBhcmd1bWVudCwgYGZuc2AsIHRoZW4gaXQgd2lsbCByZXR1cm4gYSBmdW5jdGlvbiB3aGljaCBsZXRzIHlvdSBwYXNzIGluIHRoZVxuICAgICAqIGFyZ3VtZW50cyBhcyBpZiBpdCB3ZXJlIGEgc2luZ2xlIGZ1bmN0aW9uIGNhbGwuIElmIG1vcmUgYXJndW1lbnRzIGFyZVxuICAgICAqIHByb3ZpZGVkLCBgY2FsbGJhY2tgIGlzIHJlcXVpcmVkIHdoaWxlIGBhcmdzYCBpcyBzdGlsbCBvcHRpb25hbC4gVGhlIHJlc3VsdHNcbiAgICAgKiBmb3IgZWFjaCBvZiB0aGUgYXBwbGllZCBhc3luYyBmdW5jdGlvbnMgYXJlIHBhc3NlZCB0byB0aGUgZmluYWwgY2FsbGJhY2tcbiAgICAgKiBhcyBhbiBhcnJheS5cbiAgICAgKlxuICAgICAqIEBuYW1lIGFwcGx5RWFjaFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbnRyb2xGbG93XG4gICAgICogQG1ldGhvZFxuICAgICAqIEBjYXRlZ29yeSBDb250cm9sIEZsb3dcbiAgICAgKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfEFzeW5jSXRlcmFibGV8T2JqZWN0fSBmbnMgLSBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIEFzeW5jRnVuY3Rpb259c1xuICAgICAqIHRvIGFsbCBjYWxsIHdpdGggdGhlIHNhbWUgYXJndW1lbnRzXG4gICAgICogQHBhcmFtIHsuLi4qfSBbYXJnc10gLSBhbnkgbnVtYmVyIG9mIHNlcGFyYXRlIGFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZVxuICAgICAqIGZ1bmN0aW9uLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSB0aGUgZmluYWwgYXJndW1lbnQgc2hvdWxkIGJlIHRoZSBjYWxsYmFjayxcbiAgICAgKiBjYWxsZWQgd2hlbiBhbGwgZnVuY3Rpb25zIGhhdmUgY29tcGxldGVkIHByb2Nlc3NpbmcuXG4gICAgICogQHJldHVybnMge0FzeW5jRnVuY3Rpb259IC0gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgdGFrZXMgbm8gYXJncyBvdGhlciB0aGFuXG4gICAgICogYW4gb3B0aW9uYWwgY2FsbGJhY2ssIHRoYXQgaXMgdGhlIHJlc3VsdCBvZiBhcHBseWluZyB0aGUgYGFyZ3NgIHRvIGVhY2hcbiAgICAgKiBvZiB0aGUgZnVuY3Rpb25zLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBjb25zdCBhcHBsaWVkRm4gPSBhc3luYy5hcHBseUVhY2goW2VuYWJsZVNlYXJjaCwgdXBkYXRlU2NoZW1hXSwgJ2J1Y2tldCcpXG4gICAgICpcbiAgICAgKiBhcHBsaWVkRm4oKGVyciwgcmVzdWx0cykgPT4ge1xuICAgICAqICAgICAvLyByZXN1bHRzWzBdIGlzIHRoZSByZXN1bHRzIGZvciBgZW5hYmxlU2VhcmNoYFxuICAgICAqICAgICAvLyByZXN1bHRzWzFdIGlzIHRoZSByZXN1bHRzIGZvciBgdXBkYXRlU2NoZW1hYFxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gcGFydGlhbCBhcHBsaWNhdGlvbiBleGFtcGxlOlxuICAgICAqIGFzeW5jLmVhY2goXG4gICAgICogICAgIGJ1Y2tldHMsXG4gICAgICogICAgIGFzeW5jIChidWNrZXQpID0+IGFzeW5jLmFwcGx5RWFjaChbZW5hYmxlU2VhcmNoLCB1cGRhdGVTY2hlbWFdLCBidWNrZXQpKCksXG4gICAgICogICAgIGNhbGxiYWNrXG4gICAgICogKTtcbiAgICAgKi9cbiAgICB2YXIgYXBwbHlFYWNoID0gYXBwbHlFYWNoJDEobWFwJDEpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNhbWUgYXMgW2BlYWNoT2ZgXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZWFjaE9mfSBidXQgcnVucyBvbmx5IGEgc2luZ2xlIGFzeW5jIG9wZXJhdGlvbiBhdCBhIHRpbWUuXG4gICAgICpcbiAgICAgKiBAbmFtZSBlYWNoT2ZTZXJpZXNcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5lYWNoT2Zde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5lYWNoT2Z9XG4gICAgICogQGFsaWFzIGZvckVhY2hPZlNlcmllc1xuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEFuIGFzeW5jIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggaXRlbSBpblxuICAgICAqIGBjb2xsYC5cbiAgICAgKiBJbnZva2VkIHdpdGggKGl0ZW0sIGtleSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCB3aGVuIGFsbCBgaXRlcmF0ZWVgXG4gICAgICogZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQsIG9yIGFuIGVycm9yIG9jY3Vycy4gSW52b2tlZCB3aXRoIChlcnIpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIGEgY2FsbGJhY2sgaXMgb21pdHRlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGVhY2hPZlNlcmllcyhjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGVhY2hPZkxpbWl0JDEoY29sbCwgMSwgaXRlcmF0ZWUsIGNhbGxiYWNrKVxuICAgIH1cbiAgICB2YXIgZWFjaE9mU2VyaWVzJDEgPSBhd2FpdGlmeShlYWNoT2ZTZXJpZXMsIDMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNhbWUgYXMgW2BtYXBgXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMubWFwfSBidXQgcnVucyBvbmx5IGEgc2luZ2xlIGFzeW5jIG9wZXJhdGlvbiBhdCBhIHRpbWUuXG4gICAgICpcbiAgICAgKiBAbmFtZSBtYXBTZXJpZXNcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5tYXBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5tYXB9XG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfEFzeW5jSXRlcmFibGV8T2JqZWN0fSBjb2xsIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQW4gYXN5bmMgZnVuY3Rpb24gdG8gYXBwbHkgdG8gZWFjaCBpdGVtIGluXG4gICAgICogYGNvbGxgLlxuICAgICAqIFRoZSBpdGVyYXRlZSBzaG91bGQgY29tcGxldGUgd2l0aCB0aGUgdHJhbnNmb3JtZWQgaXRlbS5cbiAgICAgKiBJbnZva2VkIHdpdGggKGl0ZW0sIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgd2hlbiBhbGwgYGl0ZXJhdGVlYFxuICAgICAqIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLCBvciBhbiBlcnJvciBvY2N1cnMuIFJlc3VsdHMgaXMgYW4gYXJyYXkgb2YgdGhlXG4gICAgICogdHJhbnNmb3JtZWQgaXRlbXMgZnJvbSB0aGUgYGNvbGxgLiBJbnZva2VkIHdpdGggKGVyciwgcmVzdWx0cykuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgaXMgcGFzc2VkXG4gICAgICovXG4gICAgZnVuY3Rpb24gbWFwU2VyaWVzIChjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9hc3luY01hcChlYWNoT2ZTZXJpZXMkMSwgY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKVxuICAgIH1cbiAgICB2YXIgbWFwU2VyaWVzJDEgPSBhd2FpdGlmeShtYXBTZXJpZXMsIDMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNhbWUgYXMgW2BhcHBseUVhY2hgXXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cuYXBwbHlFYWNofSBidXQgcnVucyBvbmx5IGEgc2luZ2xlIGFzeW5jIG9wZXJhdGlvbiBhdCBhIHRpbWUuXG4gICAgICpcbiAgICAgKiBAbmFtZSBhcHBseUVhY2hTZXJpZXNcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb250cm9sRmxvd1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5hcHBseUVhY2hde0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy5hcHBseUVhY2h9XG4gICAgICogQGNhdGVnb3J5IENvbnRyb2wgRmxvd1xuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGZucyAtIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgQXN5bmNGdW5jdGlvbn1zIHRvIGFsbFxuICAgICAqIGNhbGwgd2l0aCB0aGUgc2FtZSBhcmd1bWVudHNcbiAgICAgKiBAcGFyYW0gey4uLip9IFthcmdzXSAtIGFueSBudW1iZXIgb2Ygc2VwYXJhdGUgYXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlXG4gICAgICogZnVuY3Rpb24uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIHRoZSBmaW5hbCBhcmd1bWVudCBzaG91bGQgYmUgdGhlIGNhbGxiYWNrLFxuICAgICAqIGNhbGxlZCB3aGVuIGFsbCBmdW5jdGlvbnMgaGF2ZSBjb21wbGV0ZWQgcHJvY2Vzc2luZy5cbiAgICAgKiBAcmV0dXJucyB7QXN5bmNGdW5jdGlvbn0gLSBBIGZ1bmN0aW9uLCB0aGF0IHdoZW4gY2FsbGVkLCBpcyB0aGUgcmVzdWx0IG9mXG4gICAgICogYXBwbGluZyB0aGUgYGFyZ3NgIHRvIHRoZSBsaXN0IG9mIGZ1bmN0aW9ucy4gIEl0IHRha2VzIG5vIGFyZ3MsIG90aGVyIHRoYW5cbiAgICAgKiBhIGNhbGxiYWNrLlxuICAgICAqL1xuICAgIHZhciBhcHBseUVhY2hTZXJpZXMgPSBhcHBseUVhY2gkMShtYXBTZXJpZXMkMSk7XG5cbiAgICBjb25zdCBQUk9NSVNFX1NZTUJPTCA9IFN5bWJvbCgncHJvbWlzZUNhbGxiYWNrJyk7XG5cbiAgICBmdW5jdGlvbiBwcm9taXNlQ2FsbGJhY2sgKCkge1xuICAgICAgICBsZXQgcmVzb2x2ZSwgcmVqZWN0O1xuICAgICAgICBmdW5jdGlvbiBjYWxsYmFjayAoZXJyLCAuLi5hcmdzKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gcmVqZWN0KGVycilcbiAgICAgICAgICAgIHJlc29sdmUoYXJncy5sZW5ndGggPiAxID8gYXJncyA6IGFyZ3NbMF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FsbGJhY2tbUFJPTUlTRV9TWU1CT0xdID0gbmV3IFByb21pc2UoKHJlcywgcmVqKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlID0gcmVzLFxuICAgICAgICAgICAgcmVqZWN0ID0gcmVqO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gY2FsbGJhY2tcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmVzIHRoZSBiZXN0IG9yZGVyIGZvciBydW5uaW5nIHRoZSB7QGxpbmsgQXN5bmNGdW5jdGlvbn1zIGluIGB0YXNrc2AsIGJhc2VkIG9uXG4gICAgICogdGhlaXIgcmVxdWlyZW1lbnRzLiBFYWNoIGZ1bmN0aW9uIGNhbiBvcHRpb25hbGx5IGRlcGVuZCBvbiBvdGhlciBmdW5jdGlvbnNcbiAgICAgKiBiZWluZyBjb21wbGV0ZWQgZmlyc3QsIGFuZCBlYWNoIGZ1bmN0aW9uIGlzIHJ1biBhcyBzb29uIGFzIGl0cyByZXF1aXJlbWVudHNcbiAgICAgKiBhcmUgc2F0aXNmaWVkLlxuICAgICAqXG4gICAgICogSWYgYW55IG9mIHRoZSB7QGxpbmsgQXN5bmNGdW5jdGlvbn1zIHBhc3MgYW4gZXJyb3IgdG8gdGhlaXIgY2FsbGJhY2ssIHRoZSBgYXV0b2Agc2VxdWVuY2VcbiAgICAgKiB3aWxsIHN0b3AuIEZ1cnRoZXIgdGFza3Mgd2lsbCBub3QgZXhlY3V0ZSAoc28gYW55IG90aGVyIGZ1bmN0aW9ucyBkZXBlbmRpbmdcbiAgICAgKiBvbiBpdCB3aWxsIG5vdCBydW4pLCBhbmQgdGhlIG1haW4gYGNhbGxiYWNrYCBpcyBpbW1lZGlhdGVseSBjYWxsZWQgd2l0aCB0aGVcbiAgICAgKiBlcnJvci5cbiAgICAgKlxuICAgICAqIHtAbGluayBBc3luY0Z1bmN0aW9ufXMgYWxzbyByZWNlaXZlIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSByZXN1bHRzIG9mIGZ1bmN0aW9ucyB3aGljaFxuICAgICAqIGhhdmUgY29tcGxldGVkIHNvIGZhciBhcyB0aGUgZmlyc3QgYXJndW1lbnQsIGlmIHRoZXkgaGF2ZSBkZXBlbmRlbmNpZXMuIElmIGFcbiAgICAgKiB0YXNrIGZ1bmN0aW9uIGhhcyBubyBkZXBlbmRlbmNpZXMsIGl0IHdpbGwgb25seSBiZSBwYXNzZWQgYSBjYWxsYmFjay5cbiAgICAgKlxuICAgICAqIEBuYW1lIGF1dG9cbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb250cm9sRmxvd1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgQ29udHJvbCBGbG93XG4gICAgICogQHBhcmFtIHtPYmplY3R9IHRhc2tzIC0gQW4gb2JqZWN0LiBFYWNoIG9mIGl0cyBwcm9wZXJ0aWVzIGlzIGVpdGhlciBhXG4gICAgICogZnVuY3Rpb24gb3IgYW4gYXJyYXkgb2YgcmVxdWlyZW1lbnRzLCB3aXRoIHRoZSB7QGxpbmsgQXN5bmNGdW5jdGlvbn0gaXRzZWxmIHRoZSBsYXN0IGl0ZW1cbiAgICAgKiBpbiB0aGUgYXJyYXkuIFRoZSBvYmplY3QncyBrZXkgb2YgYSBwcm9wZXJ0eSBzZXJ2ZXMgYXMgdGhlIG5hbWUgb2YgdGhlIHRhc2tcbiAgICAgKiBkZWZpbmVkIGJ5IHRoYXQgcHJvcGVydHksIGkuZS4gY2FuIGJlIHVzZWQgd2hlbiBzcGVjaWZ5aW5nIHJlcXVpcmVtZW50cyBmb3JcbiAgICAgKiBvdGhlciB0YXNrcy4gVGhlIGZ1bmN0aW9uIHJlY2VpdmVzIG9uZSBvciB0d28gYXJndW1lbnRzOlxuICAgICAqICogYSBgcmVzdWx0c2Agb2JqZWN0LCBjb250YWluaW5nIHRoZSByZXN1bHRzIG9mIHRoZSBwcmV2aW91c2x5IGV4ZWN1dGVkXG4gICAgICogICBmdW5jdGlvbnMsIG9ubHkgcGFzc2VkIGlmIHRoZSB0YXNrIGhhcyBhbnkgZGVwZW5kZW5jaWVzLFxuICAgICAqICogYSBgY2FsbGJhY2soZXJyLCByZXN1bHQpYCBmdW5jdGlvbiwgd2hpY2ggbXVzdCBiZSBjYWxsZWQgd2hlbiBmaW5pc2hlZCxcbiAgICAgKiAgIHBhc3NpbmcgYW4gYGVycm9yYCAod2hpY2ggY2FuIGJlIGBudWxsYCkgYW5kIHRoZSByZXN1bHQgb2YgdGhlIGZ1bmN0aW9uJ3NcbiAgICAgKiAgIGV4ZWN1dGlvbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2NvbmN1cnJlbmN5PUluZmluaXR5XSAtIEFuIG9wdGlvbmFsIGBpbnRlZ2VyYCBmb3JcbiAgICAgKiBkZXRlcm1pbmluZyB0aGUgbWF4aW11bSBudW1iZXIgb2YgdGFza3MgdGhhdCBjYW4gYmUgcnVuIGluIHBhcmFsbGVsLiBCeVxuICAgICAqIGRlZmF1bHQsIGFzIG1hbnkgYXMgcG9zc2libGUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEFuIG9wdGlvbmFsIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCB3aGVuIGFsbFxuICAgICAqIHRoZSB0YXNrcyBoYXZlIGJlZW4gY29tcGxldGVkLiBJdCByZWNlaXZlcyB0aGUgYGVycmAgYXJndW1lbnQgaWYgYW55IGB0YXNrc2BcbiAgICAgKiBwYXNzIGFuIGVycm9yIHRvIHRoZWlyIGNhbGxiYWNrLiBSZXN1bHRzIGFyZSBhbHdheXMgcmV0dXJuZWQ7IGhvd2V2ZXIsIGlmIGFuXG4gICAgICogZXJyb3Igb2NjdXJzLCBubyBmdXJ0aGVyIGB0YXNrc2Agd2lsbCBiZSBwZXJmb3JtZWQsIGFuZCB0aGUgcmVzdWx0cyBvYmplY3RcbiAgICAgKiB3aWxsIG9ubHkgY29udGFpbiBwYXJ0aWFsIHJlc3VsdHMuIEludm9rZWQgd2l0aCAoZXJyLCByZXN1bHRzKS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBhIGNhbGxiYWNrIGlzIG5vdCBwYXNzZWRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy9Vc2luZyBDYWxsYmFja3NcbiAgICAgKiBhc3luYy5hdXRvKHtcbiAgICAgKiAgICAgZ2V0X2RhdGE6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAvLyBhc3luYyBjb2RlIHRvIGdldCBzb21lIGRhdGFcbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsICdkYXRhJywgJ2NvbnZlcnRlZCB0byBhcnJheScpO1xuICAgICAqICAgICB9LFxuICAgICAqICAgICBtYWtlX2ZvbGRlcjogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIC8vIGFzeW5jIGNvZGUgdG8gY3JlYXRlIGEgZGlyZWN0b3J5IHRvIHN0b3JlIGEgZmlsZSBpblxuICAgICAqICAgICAgICAgLy8gdGhpcyBpcyBydW4gYXQgdGhlIHNhbWUgdGltZSBhcyBnZXR0aW5nIHRoZSBkYXRhXG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCAnZm9sZGVyJyk7XG4gICAgICogICAgIH0sXG4gICAgICogICAgIHdyaXRlX2ZpbGU6IFsnZ2V0X2RhdGEnLCAnbWFrZV9mb2xkZXInLCBmdW5jdGlvbihyZXN1bHRzLCBjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgLy8gb25jZSB0aGVyZSBpcyBzb21lIGRhdGEgYW5kIHRoZSBkaXJlY3RvcnkgZXhpc3RzLFxuICAgICAqICAgICAgICAgLy8gd3JpdGUgdGhlIGRhdGEgdG8gYSBmaWxlIGluIHRoZSBkaXJlY3RvcnlcbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsICdmaWxlbmFtZScpO1xuICAgICAqICAgICB9XSxcbiAgICAgKiAgICAgZW1haWxfbGluazogWyd3cml0ZV9maWxlJywgZnVuY3Rpb24ocmVzdWx0cywgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIC8vIG9uY2UgdGhlIGZpbGUgaXMgd3JpdHRlbiBsZXQncyBlbWFpbCBhIGxpbmsgdG8gaXQuLi5cbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsIHsnZmlsZSc6cmVzdWx0cy53cml0ZV9maWxlLCAnZW1haWwnOid1c2VyQGV4YW1wbGUuY29tJ30pO1xuICAgICAqICAgICB9XVxuICAgICAqIH0sIGZ1bmN0aW9uKGVyciwgcmVzdWx0cykge1xuICAgICAqICAgICBpZiAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZygnZXJyID0gJywgZXJyKTtcbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjb25zb2xlLmxvZygncmVzdWx0cyA9ICcsIHJlc3VsdHMpO1xuICAgICAqICAgICAvLyByZXN1bHRzID0ge1xuICAgICAqICAgICAvLyAgICAgZ2V0X2RhdGE6IFsnZGF0YScsICdjb252ZXJ0ZWQgdG8gYXJyYXknXVxuICAgICAqICAgICAvLyAgICAgbWFrZV9mb2xkZXI7ICdmb2xkZXInLFxuICAgICAqICAgICAvLyAgICAgd3JpdGVfZmlsZTogJ2ZpbGVuYW1lJ1xuICAgICAqICAgICAvLyAgICAgZW1haWxfbGluazogeyBmaWxlOiAnZmlsZW5hbWUnLCBlbWFpbDogJ3VzZXJAZXhhbXBsZS5jb20nIH1cbiAgICAgKiAgICAgLy8gfVxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy9Vc2luZyBQcm9taXNlc1xuICAgICAqIGFzeW5jLmF1dG8oe1xuICAgICAqICAgICBnZXRfZGF0YTogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKCdpbiBnZXRfZGF0YScpO1xuICAgICAqICAgICAgICAgLy8gYXN5bmMgY29kZSB0byBnZXQgc29tZSBkYXRhXG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCAnZGF0YScsICdjb252ZXJ0ZWQgdG8gYXJyYXknKTtcbiAgICAgKiAgICAgfSxcbiAgICAgKiAgICAgbWFrZV9mb2xkZXI6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZygnaW4gbWFrZV9mb2xkZXInKTtcbiAgICAgKiAgICAgICAgIC8vIGFzeW5jIGNvZGUgdG8gY3JlYXRlIGEgZGlyZWN0b3J5IHRvIHN0b3JlIGEgZmlsZSBpblxuICAgICAqICAgICAgICAgLy8gdGhpcyBpcyBydW4gYXQgdGhlIHNhbWUgdGltZSBhcyBnZXR0aW5nIHRoZSBkYXRhXG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCAnZm9sZGVyJyk7XG4gICAgICogICAgIH0sXG4gICAgICogICAgIHdyaXRlX2ZpbGU6IFsnZ2V0X2RhdGEnLCAnbWFrZV9mb2xkZXInLCBmdW5jdGlvbihyZXN1bHRzLCBjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgLy8gb25jZSB0aGVyZSBpcyBzb21lIGRhdGEgYW5kIHRoZSBkaXJlY3RvcnkgZXhpc3RzLFxuICAgICAqICAgICAgICAgLy8gd3JpdGUgdGhlIGRhdGEgdG8gYSBmaWxlIGluIHRoZSBkaXJlY3RvcnlcbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsICdmaWxlbmFtZScpO1xuICAgICAqICAgICB9XSxcbiAgICAgKiAgICAgZW1haWxfbGluazogWyd3cml0ZV9maWxlJywgZnVuY3Rpb24ocmVzdWx0cywgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIC8vIG9uY2UgdGhlIGZpbGUgaXMgd3JpdHRlbiBsZXQncyBlbWFpbCBhIGxpbmsgdG8gaXQuLi5cbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsIHsnZmlsZSc6cmVzdWx0cy53cml0ZV9maWxlLCAnZW1haWwnOid1c2VyQGV4YW1wbGUuY29tJ30pO1xuICAgICAqICAgICB9XVxuICAgICAqIH0pLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKCdyZXN1bHRzID0gJywgcmVzdWx0cyk7XG4gICAgICogICAgIC8vIHJlc3VsdHMgPSB7XG4gICAgICogICAgIC8vICAgICBnZXRfZGF0YTogWydkYXRhJywgJ2NvbnZlcnRlZCB0byBhcnJheSddXG4gICAgICogICAgIC8vICAgICBtYWtlX2ZvbGRlcjsgJ2ZvbGRlcicsXG4gICAgICogICAgIC8vICAgICB3cml0ZV9maWxlOiAnZmlsZW5hbWUnXG4gICAgICogICAgIC8vICAgICBlbWFpbF9saW5rOiB7IGZpbGU6ICdmaWxlbmFtZScsIGVtYWlsOiAndXNlckBleGFtcGxlLmNvbScgfVxuICAgICAqICAgICAvLyB9XG4gICAgICogfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coJ2VyciA9ICcsIGVycik7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvL1VzaW5nIGFzeW5jL2F3YWl0XG4gICAgICogYXN5bmMgKCkgPT4ge1xuICAgICAqICAgICB0cnkge1xuICAgICAqICAgICAgICAgbGV0IHJlc3VsdHMgPSBhd2FpdCBhc3luYy5hdXRvKHtcbiAgICAgKiAgICAgICAgICAgICBnZXRfZGF0YTogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgICAgICAgICAgLy8gYXN5bmMgY29kZSB0byBnZXQgc29tZSBkYXRhXG4gICAgICogICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsICdkYXRhJywgJ2NvbnZlcnRlZCB0byBhcnJheScpO1xuICAgICAqICAgICAgICAgICAgIH0sXG4gICAgICogICAgICAgICAgICAgbWFrZV9mb2xkZXI6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAgICAgICAgIC8vIGFzeW5jIGNvZGUgdG8gY3JlYXRlIGEgZGlyZWN0b3J5IHRvIHN0b3JlIGEgZmlsZSBpblxuICAgICAqICAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIHJ1biBhdCB0aGUgc2FtZSB0aW1lIGFzIGdldHRpbmcgdGhlIGRhdGFcbiAgICAgKiAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ2ZvbGRlcicpO1xuICAgICAqICAgICAgICAgICAgIH0sXG4gICAgICogICAgICAgICAgICAgd3JpdGVfZmlsZTogWydnZXRfZGF0YScsICdtYWtlX2ZvbGRlcicsIGZ1bmN0aW9uKHJlc3VsdHMsIGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAgICAgICAgIC8vIG9uY2UgdGhlcmUgaXMgc29tZSBkYXRhIGFuZCB0aGUgZGlyZWN0b3J5IGV4aXN0cyxcbiAgICAgKiAgICAgICAgICAgICAgICAgLy8gd3JpdGUgdGhlIGRhdGEgdG8gYSBmaWxlIGluIHRoZSBkaXJlY3RvcnlcbiAgICAgKiAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ2ZpbGVuYW1lJyk7XG4gICAgICogICAgICAgICAgICAgfV0sXG4gICAgICogICAgICAgICAgICAgZW1haWxfbGluazogWyd3cml0ZV9maWxlJywgZnVuY3Rpb24ocmVzdWx0cywgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgICAgICAgICAgLy8gb25jZSB0aGUgZmlsZSBpcyB3cml0dGVuIGxldCdzIGVtYWlsIGEgbGluayB0byBpdC4uLlxuICAgICAqICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB7J2ZpbGUnOnJlc3VsdHMud3JpdGVfZmlsZSwgJ2VtYWlsJzondXNlckBleGFtcGxlLmNvbSd9KTtcbiAgICAgKiAgICAgICAgICAgICB9XVxuICAgICAqICAgICAgICAgfSk7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZygncmVzdWx0cyA9ICcsIHJlc3VsdHMpO1xuICAgICAqICAgICAgICAgLy8gcmVzdWx0cyA9IHtcbiAgICAgKiAgICAgICAgIC8vICAgICBnZXRfZGF0YTogWydkYXRhJywgJ2NvbnZlcnRlZCB0byBhcnJheSddXG4gICAgICogICAgICAgICAvLyAgICAgbWFrZV9mb2xkZXI7ICdmb2xkZXInLFxuICAgICAqICAgICAgICAgLy8gICAgIHdyaXRlX2ZpbGU6ICdmaWxlbmFtZSdcbiAgICAgKiAgICAgICAgIC8vICAgICBlbWFpbF9saW5rOiB7IGZpbGU6ICdmaWxlbmFtZScsIGVtYWlsOiAndXNlckBleGFtcGxlLmNvbScgfVxuICAgICAqICAgICAgICAgLy8gfVxuICAgICAqICAgICB9XG4gICAgICogICAgIGNhdGNoIChlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgIH1cbiAgICAgKiB9XG4gICAgICpcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBhdXRvKHRhc2tzLCBjb25jdXJyZW5jeSwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25jdXJyZW5jeSAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIC8vIGNvbmN1cnJlbmN5IGlzIG9wdGlvbmFsLCBzaGlmdCB0aGUgYXJncy5cbiAgICAgICAgICAgIGNhbGxiYWNrID0gY29uY3VycmVuY3k7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY2FsbGJhY2sgPSBvbmNlKGNhbGxiYWNrIHx8IHByb21pc2VDYWxsYmFjaygpKTtcbiAgICAgICAgdmFyIG51bVRhc2tzID0gT2JqZWN0LmtleXModGFza3MpLmxlbmd0aDtcbiAgICAgICAgaWYgKCFudW1UYXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gbnVtVGFza3M7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICB2YXIgcnVubmluZ1Rhc2tzID0gMDtcbiAgICAgICAgdmFyIGNhbmNlbGVkID0gZmFsc2U7XG4gICAgICAgIHZhciBoYXNFcnJvciA9IGZhbHNlO1xuXG4gICAgICAgIHZhciBsaXN0ZW5lcnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgICAgIHZhciByZWFkeVRhc2tzID0gW107XG5cbiAgICAgICAgLy8gZm9yIGN5Y2xlIGRldGVjdGlvbjpcbiAgICAgICAgdmFyIHJlYWR5VG9DaGVjayA9IFtdOyAvLyB0YXNrcyB0aGF0IGhhdmUgYmVlbiBpZGVudGlmaWVkIGFzIHJlYWNoYWJsZVxuICAgICAgICAvLyB3aXRob3V0IHRoZSBwb3NzaWJpbGl0eSBvZiByZXR1cm5pbmcgdG8gYW4gYW5jZXN0b3IgdGFza1xuICAgICAgICB2YXIgdW5jaGVja2VkRGVwZW5kZW5jaWVzID0ge307XG5cbiAgICAgICAgT2JqZWN0LmtleXModGFza3MpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIHZhciB0YXNrID0gdGFza3Nba2V5XTtcbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0YXNrKSkge1xuICAgICAgICAgICAgICAgIC8vIG5vIGRlcGVuZGVuY2llc1xuICAgICAgICAgICAgICAgIGVucXVldWVUYXNrKGtleSwgW3Rhc2tdKTtcbiAgICAgICAgICAgICAgICByZWFkeVRvQ2hlY2sucHVzaChrZXkpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGRlcGVuZGVuY2llcyA9IHRhc2suc2xpY2UoMCwgdGFzay5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgIHZhciByZW1haW5pbmdEZXBlbmRlbmNpZXMgPSBkZXBlbmRlbmNpZXMubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKHJlbWFpbmluZ0RlcGVuZGVuY2llcyA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGVucXVldWVUYXNrKGtleSwgdGFzayk7XG4gICAgICAgICAgICAgICAgcmVhZHlUb0NoZWNrLnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB1bmNoZWNrZWREZXBlbmRlbmNpZXNba2V5XSA9IHJlbWFpbmluZ0RlcGVuZGVuY2llcztcblxuICAgICAgICAgICAgZGVwZW5kZW5jaWVzLmZvckVhY2goZGVwZW5kZW5jeU5hbWUgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGFza3NbZGVwZW5kZW5jeU5hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignYXN5bmMuYXV0byB0YXNrIGAnICsga2V5ICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdgIGhhcyBhIG5vbi1leGlzdGVudCBkZXBlbmRlbmN5IGAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZGVuY3lOYW1lICsgJ2AgaW4gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbmNpZXMuam9pbignLCAnKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFkZExpc3RlbmVyKGRlcGVuZGVuY3lOYW1lLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZ0RlcGVuZGVuY2llcy0tO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVtYWluaW5nRGVwZW5kZW5jaWVzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbnF1ZXVlVGFzayhrZXksIHRhc2spO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY2hlY2tGb3JEZWFkbG9ja3MoKTtcbiAgICAgICAgcHJvY2Vzc1F1ZXVlKCk7XG5cbiAgICAgICAgZnVuY3Rpb24gZW5xdWV1ZVRhc2soa2V5LCB0YXNrKSB7XG4gICAgICAgICAgICByZWFkeVRhc2tzLnB1c2goKCkgPT4gcnVuVGFzayhrZXksIHRhc2spKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHByb2Nlc3NRdWV1ZSgpIHtcbiAgICAgICAgICAgIGlmIChjYW5jZWxlZCkgcmV0dXJuXG4gICAgICAgICAgICBpZiAocmVhZHlUYXNrcy5sZW5ndGggPT09IDAgJiYgcnVubmluZ1Rhc2tzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2hpbGUocmVhZHlUYXNrcy5sZW5ndGggJiYgcnVubmluZ1Rhc2tzIDwgY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICB2YXIgcnVuID0gcmVhZHlUYXNrcy5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIHJ1bigpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBhZGRMaXN0ZW5lcih0YXNrTmFtZSwgZm4pIHtcbiAgICAgICAgICAgIHZhciB0YXNrTGlzdGVuZXJzID0gbGlzdGVuZXJzW3Rhc2tOYW1lXTtcbiAgICAgICAgICAgIGlmICghdGFza0xpc3RlbmVycykge1xuICAgICAgICAgICAgICAgIHRhc2tMaXN0ZW5lcnMgPSBsaXN0ZW5lcnNbdGFza05hbWVdID0gW107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRhc2tMaXN0ZW5lcnMucHVzaChmbik7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiB0YXNrQ29tcGxldGUodGFza05hbWUpIHtcbiAgICAgICAgICAgIHZhciB0YXNrTGlzdGVuZXJzID0gbGlzdGVuZXJzW3Rhc2tOYW1lXSB8fCBbXTtcbiAgICAgICAgICAgIHRhc2tMaXN0ZW5lcnMuZm9yRWFjaChmbiA9PiBmbigpKTtcbiAgICAgICAgICAgIHByb2Nlc3NRdWV1ZSgpO1xuICAgICAgICB9XG5cblxuICAgICAgICBmdW5jdGlvbiBydW5UYXNrKGtleSwgdGFzaykge1xuICAgICAgICAgICAgaWYgKGhhc0Vycm9yKSByZXR1cm47XG5cbiAgICAgICAgICAgIHZhciB0YXNrQ2FsbGJhY2sgPSBvbmx5T25jZSgoZXJyLCAuLi5yZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICBydW5uaW5nVGFza3MtLTtcbiAgICAgICAgICAgICAgICBpZiAoZXJyID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICBjYW5jZWxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgW3Jlc3VsdF0gPSByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNhZmVSZXN1bHRzID0ge307XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKHJlc3VsdHMpLmZvckVhY2gocmtleSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1tya2V5XSA9IHJlc3VsdHNbcmtleV07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1trZXldID0gcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICBoYXNFcnJvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVycyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYW5jZWxlZCkgcmV0dXJuXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgc2FmZVJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba2V5XSA9IHJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgdGFza0NvbXBsZXRlKGtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJ1bm5pbmdUYXNrcysrO1xuICAgICAgICAgICAgdmFyIHRhc2tGbiA9IHdyYXBBc3luYyh0YXNrW3Rhc2subGVuZ3RoIC0gMV0pO1xuICAgICAgICAgICAgaWYgKHRhc2subGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgIHRhc2tGbihyZXN1bHRzLCB0YXNrQ2FsbGJhY2spO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0YXNrRm4odGFza0NhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGNoZWNrRm9yRGVhZGxvY2tzKCkge1xuICAgICAgICAgICAgLy8gS2FobidzIGFsZ29yaXRobVxuICAgICAgICAgICAgLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVG9wb2xvZ2ljYWxfc29ydGluZyNLYWhuLjI3c19hbGdvcml0aG1cbiAgICAgICAgICAgIC8vIGh0dHA6Ly9jb25uYWxsZS5ibG9nc3BvdC5jb20vMjAxMy8xMC90b3BvbG9naWNhbC1zb3J0aW5na2Fobi1hbGdvcml0aG0uaHRtbFxuICAgICAgICAgICAgdmFyIGN1cnJlbnRUYXNrO1xuICAgICAgICAgICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgICAgICAgICAgd2hpbGUgKHJlYWR5VG9DaGVjay5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50VGFzayA9IHJlYWR5VG9DaGVjay5wb3AoKTtcbiAgICAgICAgICAgICAgICBjb3VudGVyKys7XG4gICAgICAgICAgICAgICAgZ2V0RGVwZW5kZW50cyhjdXJyZW50VGFzaykuZm9yRWFjaChkZXBlbmRlbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoLS11bmNoZWNrZWREZXBlbmRlbmNpZXNbZGVwZW5kZW50XSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZHlUb0NoZWNrLnB1c2goZGVwZW5kZW50KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY291bnRlciAhPT0gbnVtVGFza3MpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICdhc3luYy5hdXRvIGNhbm5vdCBleGVjdXRlIHRhc2tzIGR1ZSB0byBhIHJlY3Vyc2l2ZSBkZXBlbmRlbmN5J1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBnZXREZXBlbmRlbnRzKHRhc2tOYW1lKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICAgICAgICBPYmplY3Qua2V5cyh0YXNrcykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhc2sgPSB0YXNrc1trZXldO1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRhc2spICYmIHRhc2suaW5kZXhPZih0YXNrTmFtZSkgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjYWxsYmFja1tQUk9NSVNFX1NZTUJPTF1cbiAgICB9XG5cbiAgICB2YXIgRk5fQVJHUyA9IC9eKD86YXN5bmNcXHMpPyg/OmZ1bmN0aW9uKT9cXHMqKD86XFx3K1xccyopP1xcKChbXildKylcXCkoPzpcXHMqeykvO1xuICAgIHZhciBBUlJPV19GTl9BUkdTID0gL14oPzphc3luY1xccyk/XFxzKig/OlxcKFxccyopPygoPzpbXik9XFxzXVxccyopKikoPzpcXClcXHMqKT89Pi87XG4gICAgdmFyIEZOX0FSR19TUExJVCA9IC8sLztcbiAgICB2YXIgRk5fQVJHID0gLyg9LispPyhcXHMqKSQvO1xuXG4gICAgZnVuY3Rpb24gc3RyaXBDb21tZW50cyhzdHJpbmcpIHtcbiAgICAgICAgbGV0IHN0cmlwcGVkID0gJyc7XG4gICAgICAgIGxldCBpbmRleCA9IDA7XG4gICAgICAgIGxldCBlbmRCbG9ja0NvbW1lbnQgPSBzdHJpbmcuaW5kZXhPZignKi8nKTtcbiAgICAgICAgd2hpbGUgKGluZGV4IDwgc3RyaW5nLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKHN0cmluZ1tpbmRleF0gPT09ICcvJyAmJiBzdHJpbmdbaW5kZXgrMV0gPT09ICcvJykge1xuICAgICAgICAgICAgICAgIC8vIGlubGluZSBjb21tZW50XG4gICAgICAgICAgICAgICAgbGV0IGVuZEluZGV4ID0gc3RyaW5nLmluZGV4T2YoJ1xcbicsIGluZGV4KTtcbiAgICAgICAgICAgICAgICBpbmRleCA9IChlbmRJbmRleCA9PT0gLTEpID8gc3RyaW5nLmxlbmd0aCA6IGVuZEluZGV4O1xuICAgICAgICAgICAgfSBlbHNlIGlmICgoZW5kQmxvY2tDb21tZW50ICE9PSAtMSkgJiYgKHN0cmluZ1tpbmRleF0gPT09ICcvJykgJiYgKHN0cmluZ1tpbmRleCsxXSA9PT0gJyonKSkge1xuICAgICAgICAgICAgICAgIC8vIGJsb2NrIGNvbW1lbnRcbiAgICAgICAgICAgICAgICBsZXQgZW5kSW5kZXggPSBzdHJpbmcuaW5kZXhPZignKi8nLCBpbmRleCk7XG4gICAgICAgICAgICAgICAgaWYgKGVuZEluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBpbmRleCA9IGVuZEluZGV4ICsgMjtcbiAgICAgICAgICAgICAgICAgICAgZW5kQmxvY2tDb21tZW50ID0gc3RyaW5nLmluZGV4T2YoJyovJywgaW5kZXgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN0cmlwcGVkICs9IHN0cmluZ1tpbmRleF07XG4gICAgICAgICAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdHJpcHBlZCArPSBzdHJpbmdbaW5kZXhdO1xuICAgICAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0cmlwcGVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlUGFyYW1zKGZ1bmMpIHtcbiAgICAgICAgY29uc3Qgc3JjID0gc3RyaXBDb21tZW50cyhmdW5jLnRvU3RyaW5nKCkpO1xuICAgICAgICBsZXQgbWF0Y2ggPSBzcmMubWF0Y2goRk5fQVJHUyk7XG4gICAgICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgICAgIG1hdGNoID0gc3JjLm1hdGNoKEFSUk9XX0ZOX0FSR1MpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbWF0Y2gpIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IHBhcnNlIGFyZ3MgaW4gYXV0b0luamVjdFxcblNvdXJjZTpcXG4nICsgc3JjKVxuICAgICAgICBsZXQgWywgYXJnc10gPSBtYXRjaDtcbiAgICAgICAgcmV0dXJuIGFyZ3NcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXHMvZywgJycpXG4gICAgICAgICAgICAuc3BsaXQoRk5fQVJHX1NQTElUKVxuICAgICAgICAgICAgLm1hcCgoYXJnKSA9PiBhcmcucmVwbGFjZShGTl9BUkcsICcnKS50cmltKCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgZGVwZW5kZW5jeS1pbmplY3RlZCB2ZXJzaW9uIG9mIHRoZSBbYXN5bmMuYXV0b117QGxpbmsgbW9kdWxlOkNvbnRyb2xGbG93LmF1dG99IGZ1bmN0aW9uLiBEZXBlbmRlbnRcbiAgICAgKiB0YXNrcyBhcmUgc3BlY2lmaWVkIGFzIHBhcmFtZXRlcnMgdG8gdGhlIGZ1bmN0aW9uLCBhZnRlciB0aGUgdXN1YWwgY2FsbGJhY2tcbiAgICAgKiBwYXJhbWV0ZXIsIHdpdGggdGhlIHBhcmFtZXRlciBuYW1lcyBtYXRjaGluZyB0aGUgbmFtZXMgb2YgdGhlIHRhc2tzIGl0XG4gICAgICogZGVwZW5kcyBvbi4gVGhpcyBjYW4gcHJvdmlkZSBldmVuIG1vcmUgcmVhZGFibGUgdGFzayBncmFwaHMgd2hpY2ggY2FuIGJlXG4gICAgICogZWFzaWVyIHRvIG1haW50YWluLlxuICAgICAqXG4gICAgICogSWYgYSBmaW5hbCBjYWxsYmFjayBpcyBzcGVjaWZpZWQsIHRoZSB0YXNrIHJlc3VsdHMgYXJlIHNpbWlsYXJseSBpbmplY3RlZCxcbiAgICAgKiBzcGVjaWZpZWQgYXMgbmFtZWQgcGFyYW1ldGVycyBhZnRlciB0aGUgaW5pdGlhbCBlcnJvciBwYXJhbWV0ZXIuXG4gICAgICpcbiAgICAgKiBUaGUgYXV0b0luamVjdCBmdW5jdGlvbiBpcyBwdXJlbHkgc3ludGFjdGljIHN1Z2FyIGFuZCBpdHMgc2VtYW50aWNzIGFyZVxuICAgICAqIG90aGVyd2lzZSBlcXVpdmFsZW50IHRvIFthc3luYy5hdXRvXXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cuYXV0b30uXG4gICAgICpcbiAgICAgKiBAbmFtZSBhdXRvSW5qZWN0XG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMuYXV0b117QGxpbmsgbW9kdWxlOkNvbnRyb2xGbG93LmF1dG99XG4gICAgICogQGNhdGVnb3J5IENvbnRyb2wgRmxvd1xuICAgICAqIEBwYXJhbSB7T2JqZWN0fSB0YXNrcyAtIEFuIG9iamVjdCwgZWFjaCBvZiB3aG9zZSBwcm9wZXJ0aWVzIGlzIGFuIHtAbGluayBBc3luY0Z1bmN0aW9ufSBvZlxuICAgICAqIHRoZSBmb3JtICdmdW5jKFtkZXBlbmRlbmNpZXMuLi5dLCBjYWxsYmFjaykuIFRoZSBvYmplY3QncyBrZXkgb2YgYSBwcm9wZXJ0eVxuICAgICAqIHNlcnZlcyBhcyB0aGUgbmFtZSBvZiB0aGUgdGFzayBkZWZpbmVkIGJ5IHRoYXQgcHJvcGVydHksIGkuZS4gY2FuIGJlIHVzZWRcbiAgICAgKiB3aGVuIHNwZWNpZnlpbmcgcmVxdWlyZW1lbnRzIGZvciBvdGhlciB0YXNrcy5cbiAgICAgKiAqIFRoZSBgY2FsbGJhY2tgIHBhcmFtZXRlciBpcyBhIGBjYWxsYmFjayhlcnIsIHJlc3VsdClgIHdoaWNoIG11c3QgYmUgY2FsbGVkXG4gICAgICogICB3aGVuIGZpbmlzaGVkLCBwYXNzaW5nIGFuIGBlcnJvcmAgKHdoaWNoIGNhbiBiZSBgbnVsbGApIGFuZCB0aGUgcmVzdWx0IG9mXG4gICAgICogICB0aGUgZnVuY3Rpb24ncyBleGVjdXRpb24uIFRoZSByZW1haW5pbmcgcGFyYW1ldGVycyBuYW1lIG90aGVyIHRhc2tzIG9uXG4gICAgICogICB3aGljaCB0aGUgdGFzayBpcyBkZXBlbmRlbnQsIGFuZCB0aGUgcmVzdWx0cyBmcm9tIHRob3NlIHRhc2tzIGFyZSB0aGVcbiAgICAgKiAgIGFyZ3VtZW50cyBvZiB0aG9zZSBwYXJhbWV0ZXJzLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBbiBvcHRpb25hbCBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgd2hlbiBhbGxcbiAgICAgKiB0aGUgdGFza3MgaGF2ZSBiZWVuIGNvbXBsZXRlZC4gSXQgcmVjZWl2ZXMgdGhlIGBlcnJgIGFyZ3VtZW50IGlmIGFueSBgdGFza3NgXG4gICAgICogcGFzcyBhbiBlcnJvciB0byB0aGVpciBjYWxsYmFjaywgYW5kIGEgYHJlc3VsdHNgIG9iamVjdCB3aXRoIGFueSBjb21wbGV0ZWRcbiAgICAgKiB0YXNrIHJlc3VsdHMsIHNpbWlsYXIgdG8gYGF1dG9gLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIG5vIGNhbGxiYWNrIGlzIHBhc3NlZFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyAgVGhlIGV4YW1wbGUgZnJvbSBgYXV0b2AgY2FuIGJlIHJld3JpdHRlbiBhcyBmb2xsb3dzOlxuICAgICAqIGFzeW5jLmF1dG9JbmplY3Qoe1xuICAgICAqICAgICBnZXRfZGF0YTogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIC8vIGFzeW5jIGNvZGUgdG8gZ2V0IHNvbWUgZGF0YVxuICAgICAqICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ2RhdGEnLCAnY29udmVydGVkIHRvIGFycmF5Jyk7XG4gICAgICogICAgIH0sXG4gICAgICogICAgIG1ha2VfZm9sZGVyOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgLy8gYXN5bmMgY29kZSB0byBjcmVhdGUgYSBkaXJlY3RvcnkgdG8gc3RvcmUgYSBmaWxlIGluXG4gICAgICogICAgICAgICAvLyB0aGlzIGlzIHJ1biBhdCB0aGUgc2FtZSB0aW1lIGFzIGdldHRpbmcgdGhlIGRhdGFcbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsICdmb2xkZXInKTtcbiAgICAgKiAgICAgfSxcbiAgICAgKiAgICAgd3JpdGVfZmlsZTogZnVuY3Rpb24oZ2V0X2RhdGEsIG1ha2VfZm9sZGVyLCBjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgLy8gb25jZSB0aGVyZSBpcyBzb21lIGRhdGEgYW5kIHRoZSBkaXJlY3RvcnkgZXhpc3RzLFxuICAgICAqICAgICAgICAgLy8gd3JpdGUgdGhlIGRhdGEgdG8gYSBmaWxlIGluIHRoZSBkaXJlY3RvcnlcbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsICdmaWxlbmFtZScpO1xuICAgICAqICAgICB9LFxuICAgICAqICAgICBlbWFpbF9saW5rOiBmdW5jdGlvbih3cml0ZV9maWxlLCBjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgLy8gb25jZSB0aGUgZmlsZSBpcyB3cml0dGVuIGxldCdzIGVtYWlsIGEgbGluayB0byBpdC4uLlxuICAgICAqICAgICAgICAgLy8gd3JpdGVfZmlsZSBjb250YWlucyB0aGUgZmlsZW5hbWUgcmV0dXJuZWQgYnkgd3JpdGVfZmlsZS5cbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsIHsnZmlsZSc6d3JpdGVfZmlsZSwgJ2VtYWlsJzondXNlckBleGFtcGxlLmNvbSd9KTtcbiAgICAgKiAgICAgfVxuICAgICAqIH0sIGZ1bmN0aW9uKGVyciwgcmVzdWx0cykge1xuICAgICAqICAgICBjb25zb2xlLmxvZygnZXJyID0gJywgZXJyKTtcbiAgICAgKiAgICAgY29uc29sZS5sb2coJ2VtYWlsX2xpbmsgPSAnLCByZXN1bHRzLmVtYWlsX2xpbmspO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gSWYgeW91IGFyZSB1c2luZyBhIEpTIG1pbmlmaWVyIHRoYXQgbWFuZ2xlcyBwYXJhbWV0ZXIgbmFtZXMsIGBhdXRvSW5qZWN0YFxuICAgICAqIC8vIHdpbGwgbm90IHdvcmsgd2l0aCBwbGFpbiBmdW5jdGlvbnMsIHNpbmNlIHRoZSBwYXJhbWV0ZXIgbmFtZXMgd2lsbCBiZVxuICAgICAqIC8vIGNvbGxhcHNlZCB0byBhIHNpbmdsZSBsZXR0ZXIgaWRlbnRpZmllci4gIFRvIHdvcmsgYXJvdW5kIHRoaXMsIHlvdSBjYW5cbiAgICAgKiAvLyBleHBsaWNpdGx5IHNwZWNpZnkgdGhlIG5hbWVzIG9mIHRoZSBwYXJhbWV0ZXJzIHlvdXIgdGFzayBmdW5jdGlvbiBuZWVkc1xuICAgICAqIC8vIGluIGFuIGFycmF5LCBzaW1pbGFyIHRvIEFuZ3VsYXIuanMgZGVwZW5kZW5jeSBpbmplY3Rpb24uXG4gICAgICpcbiAgICAgKiAvLyBUaGlzIHN0aWxsIGhhcyBhbiBhZHZhbnRhZ2Ugb3ZlciBwbGFpbiBgYXV0b2AsIHNpbmNlIHRoZSByZXN1bHRzIGEgdGFza1xuICAgICAqIC8vIGRlcGVuZHMgb24gYXJlIHN0aWxsIHNwcmVhZCBpbnRvIGFyZ3VtZW50cy5cbiAgICAgKiBhc3luYy5hdXRvSW5qZWN0KHtcbiAgICAgKiAgICAgLy8uLi5cbiAgICAgKiAgICAgd3JpdGVfZmlsZTogWydnZXRfZGF0YScsICdtYWtlX2ZvbGRlcicsIGZ1bmN0aW9uKGdldF9kYXRhLCBtYWtlX2ZvbGRlciwgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsICdmaWxlbmFtZScpO1xuICAgICAqICAgICB9XSxcbiAgICAgKiAgICAgZW1haWxfbGluazogWyd3cml0ZV9maWxlJywgZnVuY3Rpb24od3JpdGVfZmlsZSwgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsIHsnZmlsZSc6d3JpdGVfZmlsZSwgJ2VtYWlsJzondXNlckBleGFtcGxlLmNvbSd9KTtcbiAgICAgKiAgICAgfV1cbiAgICAgKiAgICAgLy8uLi5cbiAgICAgKiB9LCBmdW5jdGlvbihlcnIsIHJlc3VsdHMpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coJ2VyciA9ICcsIGVycik7XG4gICAgICogICAgIGNvbnNvbGUubG9nKCdlbWFpbF9saW5rID0gJywgcmVzdWx0cy5lbWFpbF9saW5rKTtcbiAgICAgKiB9KTtcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBhdXRvSW5qZWN0KHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgbmV3VGFza3MgPSB7fTtcblxuICAgICAgICBPYmplY3Qua2V5cyh0YXNrcykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgdmFyIHRhc2tGbiA9IHRhc2tzW2tleV07XG4gICAgICAgICAgICB2YXIgcGFyYW1zO1xuICAgICAgICAgICAgdmFyIGZuSXNBc3luYyA9IGlzQXN5bmModGFza0ZuKTtcbiAgICAgICAgICAgIHZhciBoYXNOb0RlcHMgPVxuICAgICAgICAgICAgICAgICghZm5Jc0FzeW5jICYmIHRhc2tGbi5sZW5ndGggPT09IDEpIHx8XG4gICAgICAgICAgICAgICAgKGZuSXNBc3luYyAmJiB0YXNrRm4ubGVuZ3RoID09PSAwKTtcblxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGFza0ZuKSkge1xuICAgICAgICAgICAgICAgIHBhcmFtcyA9IFsuLi50YXNrRm5dO1xuICAgICAgICAgICAgICAgIHRhc2tGbiA9IHBhcmFtcy5wb3AoKTtcblxuICAgICAgICAgICAgICAgIG5ld1Rhc2tzW2tleV0gPSBwYXJhbXMuY29uY2F0KHBhcmFtcy5sZW5ndGggPiAwID8gbmV3VGFzayA6IHRhc2tGbik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhhc05vRGVwcykge1xuICAgICAgICAgICAgICAgIC8vIG5vIGRlcGVuZGVuY2llcywgdXNlIHRoZSBmdW5jdGlvbiBhcy1pc1xuICAgICAgICAgICAgICAgIG5ld1Rhc2tzW2tleV0gPSB0YXNrRm47XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHBhcmFtcyA9IHBhcnNlUGFyYW1zKHRhc2tGbik7XG4gICAgICAgICAgICAgICAgaWYgKCh0YXNrRm4ubGVuZ3RoID09PSAwICYmICFmbklzQXN5bmMpICYmIHBhcmFtcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYXV0b0luamVjdCB0YXNrIGZ1bmN0aW9ucyByZXF1aXJlIGV4cGxpY2l0IHBhcmFtZXRlcnMuXCIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBjYWxsYmFjayBwYXJhbVxuICAgICAgICAgICAgICAgIGlmICghZm5Jc0FzeW5jKSBwYXJhbXMucG9wKCk7XG5cbiAgICAgICAgICAgICAgICBuZXdUYXNrc1trZXldID0gcGFyYW1zLmNvbmNhdChuZXdUYXNrKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gbmV3VGFzayhyZXN1bHRzLCB0YXNrQ2IpIHtcbiAgICAgICAgICAgICAgICB2YXIgbmV3QXJncyA9IHBhcmFtcy5tYXAobmFtZSA9PiByZXN1bHRzW25hbWVdKTtcbiAgICAgICAgICAgICAgICBuZXdBcmdzLnB1c2godGFza0NiKTtcbiAgICAgICAgICAgICAgICB3cmFwQXN5bmModGFza0ZuKSguLi5uZXdBcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGF1dG8obmV3VGFza3MsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICAvLyBTaW1wbGUgZG91Ymx5IGxpbmtlZCBsaXN0IChodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Eb3VibHlfbGlua2VkX2xpc3QpIGltcGxlbWVudGF0aW9uXG4gICAgLy8gdXNlZCBmb3IgcXVldWVzLiBUaGlzIGltcGxlbWVudGF0aW9uIGFzc3VtZXMgdGhhdCB0aGUgbm9kZSBwcm92aWRlZCBieSB0aGUgdXNlciBjYW4gYmUgbW9kaWZpZWRcbiAgICAvLyB0byBhZGp1c3QgdGhlIG5leHQgYW5kIGxhc3QgcHJvcGVydGllcy4gV2UgaW1wbGVtZW50IG9ubHkgdGhlIG1pbmltYWwgZnVuY3Rpb25hbGl0eVxuICAgIC8vIGZvciBxdWV1ZSBzdXBwb3J0LlxuICAgIGNsYXNzIERMTCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgdGhpcy5oZWFkID0gdGhpcy50YWlsID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMubGVuZ3RoID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbW92ZUxpbmsobm9kZSkge1xuICAgICAgICAgICAgaWYgKG5vZGUucHJldikgbm9kZS5wcmV2Lm5leHQgPSBub2RlLm5leHQ7XG4gICAgICAgICAgICBlbHNlIHRoaXMuaGVhZCA9IG5vZGUubmV4dDtcbiAgICAgICAgICAgIGlmIChub2RlLm5leHQpIG5vZGUubmV4dC5wcmV2ID0gbm9kZS5wcmV2O1xuICAgICAgICAgICAgZWxzZSB0aGlzLnRhaWwgPSBub2RlLnByZXY7XG5cbiAgICAgICAgICAgIG5vZGUucHJldiA9IG5vZGUubmV4dCA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmxlbmd0aCAtPSAxO1xuICAgICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH1cblxuICAgICAgICBlbXB0eSAoKSB7XG4gICAgICAgICAgICB3aGlsZSh0aGlzLmhlYWQpIHRoaXMuc2hpZnQoKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5zZXJ0QWZ0ZXIobm9kZSwgbmV3Tm9kZSkge1xuICAgICAgICAgICAgbmV3Tm9kZS5wcmV2ID0gbm9kZTtcbiAgICAgICAgICAgIG5ld05vZGUubmV4dCA9IG5vZGUubmV4dDtcbiAgICAgICAgICAgIGlmIChub2RlLm5leHQpIG5vZGUubmV4dC5wcmV2ID0gbmV3Tm9kZTtcbiAgICAgICAgICAgIGVsc2UgdGhpcy50YWlsID0gbmV3Tm9kZTtcbiAgICAgICAgICAgIG5vZGUubmV4dCA9IG5ld05vZGU7XG4gICAgICAgICAgICB0aGlzLmxlbmd0aCArPSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5zZXJ0QmVmb3JlKG5vZGUsIG5ld05vZGUpIHtcbiAgICAgICAgICAgIG5ld05vZGUucHJldiA9IG5vZGUucHJldjtcbiAgICAgICAgICAgIG5ld05vZGUubmV4dCA9IG5vZGU7XG4gICAgICAgICAgICBpZiAobm9kZS5wcmV2KSBub2RlLnByZXYubmV4dCA9IG5ld05vZGU7XG4gICAgICAgICAgICBlbHNlIHRoaXMuaGVhZCA9IG5ld05vZGU7XG4gICAgICAgICAgICBub2RlLnByZXYgPSBuZXdOb2RlO1xuICAgICAgICAgICAgdGhpcy5sZW5ndGggKz0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHVuc2hpZnQobm9kZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaGVhZCkgdGhpcy5pbnNlcnRCZWZvcmUodGhpcy5oZWFkLCBub2RlKTtcbiAgICAgICAgICAgIGVsc2Ugc2V0SW5pdGlhbCh0aGlzLCBub2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1c2gobm9kZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMudGFpbCkgdGhpcy5pbnNlcnRBZnRlcih0aGlzLnRhaWwsIG5vZGUpO1xuICAgICAgICAgICAgZWxzZSBzZXRJbml0aWFsKHRoaXMsIG5vZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgc2hpZnQoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5oZWFkICYmIHRoaXMucmVtb3ZlTGluayh0aGlzLmhlYWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcG9wKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGFpbCAmJiB0aGlzLnJlbW92ZUxpbmsodGhpcy50YWlsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRvQXJyYXkoKSB7XG4gICAgICAgICAgICByZXR1cm4gWy4uLnRoaXNdXG4gICAgICAgIH1cblxuICAgICAgICAqW1N5bWJvbC5pdGVyYXRvcl0gKCkge1xuICAgICAgICAgICAgdmFyIGN1ciA9IHRoaXMuaGVhZDtcbiAgICAgICAgICAgIHdoaWxlIChjdXIpIHtcbiAgICAgICAgICAgICAgICB5aWVsZCBjdXIuZGF0YTtcbiAgICAgICAgICAgICAgICBjdXIgPSBjdXIubmV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJlbW92ZSAodGVzdEZuKSB7XG4gICAgICAgICAgICB2YXIgY3VyciA9IHRoaXMuaGVhZDtcbiAgICAgICAgICAgIHdoaWxlKGN1cnIpIHtcbiAgICAgICAgICAgICAgICB2YXIge25leHR9ID0gY3VycjtcbiAgICAgICAgICAgICAgICBpZiAodGVzdEZuKGN1cnIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlTGluayhjdXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY3VyciA9IG5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldEluaXRpYWwoZGxsLCBub2RlKSB7XG4gICAgICAgIGRsbC5sZW5ndGggPSAxO1xuICAgICAgICBkbGwuaGVhZCA9IGRsbC50YWlsID0gbm9kZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBxdWV1ZSQxKHdvcmtlciwgY29uY3VycmVuY3ksIHBheWxvYWQpIHtcbiAgICAgICAgaWYgKGNvbmN1cnJlbmN5ID09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKGNvbmN1cnJlbmN5ID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQ29uY3VycmVuY3kgbXVzdCBub3QgYmUgemVybycpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIF93b3JrZXIgPSB3cmFwQXN5bmMod29ya2VyKTtcbiAgICAgICAgdmFyIG51bVJ1bm5pbmcgPSAwO1xuICAgICAgICB2YXIgd29ya2Vyc0xpc3QgPSBbXTtcbiAgICAgICAgY29uc3QgZXZlbnRzID0ge1xuICAgICAgICAgICAgZXJyb3I6IFtdLFxuICAgICAgICAgICAgZHJhaW46IFtdLFxuICAgICAgICAgICAgc2F0dXJhdGVkOiBbXSxcbiAgICAgICAgICAgIHVuc2F0dXJhdGVkOiBbXSxcbiAgICAgICAgICAgIGVtcHR5OiBbXVxuICAgICAgICB9O1xuXG4gICAgICAgIGZ1bmN0aW9uIG9uIChldmVudCwgaGFuZGxlcikge1xuICAgICAgICAgICAgZXZlbnRzW2V2ZW50XS5wdXNoKGhhbmRsZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gb25jZSAoZXZlbnQsIGhhbmRsZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZUFuZFJlbW92ZSA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgb2ZmKGV2ZW50LCBoYW5kbGVBbmRSZW1vdmUpO1xuICAgICAgICAgICAgICAgIGhhbmRsZXIoLi4uYXJncyk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZXZlbnRzW2V2ZW50XS5wdXNoKGhhbmRsZUFuZFJlbW92ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBvZmYgKGV2ZW50LCBoYW5kbGVyKSB7XG4gICAgICAgICAgICBpZiAoIWV2ZW50KSByZXR1cm4gT2JqZWN0LmtleXMoZXZlbnRzKS5mb3JFYWNoKGV2ID0+IGV2ZW50c1tldl0gPSBbXSlcbiAgICAgICAgICAgIGlmICghaGFuZGxlcikgcmV0dXJuIGV2ZW50c1tldmVudF0gPSBbXVxuICAgICAgICAgICAgZXZlbnRzW2V2ZW50XSA9IGV2ZW50c1tldmVudF0uZmlsdGVyKGV2ID0+IGV2ICE9PSBoYW5kbGVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHRyaWdnZXIgKGV2ZW50LCAuLi5hcmdzKSB7XG4gICAgICAgICAgICBldmVudHNbZXZlbnRdLmZvckVhY2goaGFuZGxlciA9PiBoYW5kbGVyKC4uLmFyZ3MpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBwcm9jZXNzaW5nU2NoZWR1bGVkID0gZmFsc2U7XG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQoZGF0YSwgaW5zZXJ0QXRGcm9udCwgcmVqZWN0T25FcnJvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayAhPSBudWxsICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndGFzayBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHEuc3RhcnRlZCA9IHRydWU7XG5cbiAgICAgICAgICAgIHZhciByZXMsIHJlajtcbiAgICAgICAgICAgIGZ1bmN0aW9uIHByb21pc2VDYWxsYmFjayAoZXJyLCAuLi5hcmdzKSB7XG4gICAgICAgICAgICAgICAgLy8gd2UgZG9uJ3QgY2FyZSBhYm91dCB0aGUgZXJyb3IsIGxldCB0aGUgZ2xvYmFsIGVycm9yIGhhbmRsZXJcbiAgICAgICAgICAgICAgICAvLyBkZWFsIHdpdGggaXRcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gcmVqZWN0T25FcnJvciA/IHJlaihlcnIpIDogcmVzKClcbiAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkgcmV0dXJuIHJlcyhhcmdzWzBdKVxuICAgICAgICAgICAgICAgIHJlcyhhcmdzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGl0ZW0gPSBxLl9jcmVhdGVUYXNrSXRlbShcbiAgICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICAgIHJlamVjdE9uRXJyb3IgPyBwcm9taXNlQ2FsbGJhY2sgOlxuICAgICAgICAgICAgICAgICAgICAoY2FsbGJhY2sgfHwgcHJvbWlzZUNhbGxiYWNrKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKGluc2VydEF0RnJvbnQpIHtcbiAgICAgICAgICAgICAgICBxLl90YXNrcy51bnNoaWZ0KGl0ZW0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBxLl90YXNrcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXByb2Nlc3NpbmdTY2hlZHVsZWQpIHtcbiAgICAgICAgICAgICAgICBwcm9jZXNzaW5nU2NoZWR1bGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUkMSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3NpbmdTY2hlZHVsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcS5wcm9jZXNzKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZWplY3RPbkVycm9yIHx8ICFjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlcyA9IHJlc29sdmU7XG4gICAgICAgICAgICAgICAgICAgIHJlaiA9IHJlamVjdDtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gX2NyZWF0ZUNCKHRhc2tzKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGVyciwgLi4uYXJncykge1xuICAgICAgICAgICAgICAgIG51bVJ1bm5pbmcgLT0gMTtcblxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gdGFza3MubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0YXNrID0gdGFza3NbaV07XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gd29ya2Vyc0xpc3QuaW5kZXhPZih0YXNrKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzTGlzdC5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Vyc0xpc3Quc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRhc2suY2FsbGJhY2soZXJyLCAuLi5hcmdzKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXIoJ2Vycm9yJywgZXJyLCB0YXNrLmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKG51bVJ1bm5pbmcgPD0gKHEuY29uY3VycmVuY3kgLSBxLmJ1ZmZlcikgKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXIoJ3Vuc2F0dXJhdGVkJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHEuaWRsZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXIoJ2RyYWluJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHEucHJvY2VzcygpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIF9tYXliZURyYWluKGRhdGEpIHtcbiAgICAgICAgICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMCAmJiBxLmlkbGUoKSkge1xuICAgICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlJDEoKCkgPT4gdHJpZ2dlcignZHJhaW4nKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXZlbnRNZXRob2QgPSAobmFtZSkgPT4gKGhhbmRsZXIpID0+IHtcbiAgICAgICAgICAgIGlmICghaGFuZGxlcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG9uY2UobmFtZSwgKGVyciwgZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycikgcmV0dXJuIHJlamVjdChlcnIpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb2ZmKG5hbWUpO1xuICAgICAgICAgICAgb24obmFtZSwgaGFuZGxlcik7XG5cbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgaXNQcm9jZXNzaW5nID0gZmFsc2U7XG4gICAgICAgIHZhciBxID0ge1xuICAgICAgICAgICAgX3Rhc2tzOiBuZXcgRExMKCksXG4gICAgICAgICAgICBfY3JlYXRlVGFza0l0ZW0gKGRhdGEsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICpbU3ltYm9sLml0ZXJhdG9yXSAoKSB7XG4gICAgICAgICAgICAgICAgeWllbGQqIHEuX3Rhc2tzW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb25jdXJyZW5jeSxcbiAgICAgICAgICAgIHBheWxvYWQsXG4gICAgICAgICAgICBidWZmZXI6IGNvbmN1cnJlbmN5IC8gNCxcbiAgICAgICAgICAgIHN0YXJ0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgcGF1c2VkOiBmYWxzZSxcbiAgICAgICAgICAgIHB1c2ggKGRhdGEsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9tYXliZURyYWluKGRhdGEpKSByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEubWFwKGRhdHVtID0+IF9pbnNlcnQoZGF0dW0sIGZhbHNlLCBmYWxzZSwgY2FsbGJhY2spKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gX2luc2VydChkYXRhLCBmYWxzZSwgZmFsc2UsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwdXNoQXN5bmMgKGRhdGEsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9tYXliZURyYWluKGRhdGEpKSByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEubWFwKGRhdHVtID0+IF9pbnNlcnQoZGF0dW0sIGZhbHNlLCB0cnVlLCBjYWxsYmFjaykpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBfaW5zZXJ0KGRhdGEsIGZhbHNlLCB0cnVlLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAga2lsbCAoKSB7XG4gICAgICAgICAgICAgICAgb2ZmKCk7XG4gICAgICAgICAgICAgICAgcS5fdGFza3MuZW1wdHkoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bnNoaWZ0IChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfbWF5YmVEcmFpbihkYXRhKSkgcmV0dXJuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhLm1hcChkYXR1bSA9PiBfaW5zZXJ0KGRhdHVtLCB0cnVlLCBmYWxzZSwgY2FsbGJhY2spKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gX2luc2VydChkYXRhLCB0cnVlLCBmYWxzZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVuc2hpZnRBc3luYyAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoX21heWJlRHJhaW4oZGF0YSkpIHJldHVyblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YS5tYXAoZGF0dW0gPT4gX2luc2VydChkYXR1bSwgdHJ1ZSwgdHJ1ZSwgY2FsbGJhY2spKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gX2luc2VydChkYXRhLCB0cnVlLCB0cnVlLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVtb3ZlICh0ZXN0Rm4pIHtcbiAgICAgICAgICAgICAgICBxLl90YXNrcy5yZW1vdmUodGVzdEZuKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9jZXNzICgpIHtcbiAgICAgICAgICAgICAgICAvLyBBdm9pZCB0cnlpbmcgdG8gc3RhcnQgdG9vIG1hbnkgcHJvY2Vzc2luZyBvcGVyYXRpb25zLiBUaGlzIGNhbiBvY2N1clxuICAgICAgICAgICAgICAgIC8vIHdoZW4gY2FsbGJhY2tzIHJlc29sdmUgc3luY2hyb25vdXNseSAoIzEyNjcpLlxuICAgICAgICAgICAgICAgIGlmIChpc1Byb2Nlc3NpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpc1Byb2Nlc3NpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHdoaWxlKCFxLnBhdXNlZCAmJiBudW1SdW5uaW5nIDwgcS5jb25jdXJyZW5jeSAmJiBxLl90YXNrcy5sZW5ndGgpe1xuICAgICAgICAgICAgICAgICAgICB2YXIgdGFza3MgPSBbXSwgZGF0YSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbCA9IHEuX3Rhc2tzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHEucGF5bG9hZCkgbCA9IE1hdGgubWluKGwsIHEucGF5bG9hZCk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IHEuX3Rhc2tzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXNrcy5wdXNoKG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Vyc0xpc3QucHVzaChub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEucHVzaChub2RlLmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgbnVtUnVubmluZyArPSAxO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChxLl90YXNrcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXIoJ2VtcHR5Jyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAobnVtUnVubmluZyA9PT0gcS5jb25jdXJyZW5jeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcignc2F0dXJhdGVkJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgY2IgPSBvbmx5T25jZShfY3JlYXRlQ0IodGFza3MpKTtcbiAgICAgICAgICAgICAgICAgICAgX3dvcmtlcihkYXRhLCBjYik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlzUHJvY2Vzc2luZyA9IGZhbHNlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlbmd0aCAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHEuX3Rhc2tzLmxlbmd0aDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBydW5uaW5nICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtUnVubmluZztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB3b3JrZXJzTGlzdCAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtlcnNMaXN0O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlkbGUoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHEuX3Rhc2tzLmxlbmd0aCArIG51bVJ1bm5pbmcgPT09IDA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGF1c2UgKCkge1xuICAgICAgICAgICAgICAgIHEucGF1c2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXN1bWUgKCkge1xuICAgICAgICAgICAgICAgIGlmIChxLnBhdXNlZCA9PT0gZmFsc2UpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUkMShxLnByb2Nlc3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICAvLyBkZWZpbmUgdGhlc2UgYXMgZml4ZWQgcHJvcGVydGllcywgc28gcGVvcGxlIGdldCB1c2VmdWwgZXJyb3JzIHdoZW4gdXBkYXRpbmdcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMocSwge1xuICAgICAgICAgICAgc2F0dXJhdGVkOiB7XG4gICAgICAgICAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBldmVudE1ldGhvZCgnc2F0dXJhdGVkJylcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bnNhdHVyYXRlZDoge1xuICAgICAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogZXZlbnRNZXRob2QoJ3Vuc2F0dXJhdGVkJylcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbXB0eToge1xuICAgICAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogZXZlbnRNZXRob2QoJ2VtcHR5JylcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkcmFpbjoge1xuICAgICAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogZXZlbnRNZXRob2QoJ2RyYWluJylcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvcjoge1xuICAgICAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogZXZlbnRNZXRob2QoJ2Vycm9yJylcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgYGNhcmdvYCBvYmplY3Qgd2l0aCB0aGUgc3BlY2lmaWVkIHBheWxvYWQuIFRhc2tzIGFkZGVkIHRvIHRoZVxuICAgICAqIGNhcmdvIHdpbGwgYmUgcHJvY2Vzc2VkIGFsdG9nZXRoZXIgKHVwIHRvIHRoZSBgcGF5bG9hZGAgbGltaXQpLiBJZiB0aGVcbiAgICAgKiBgd29ya2VyYCBpcyBpbiBwcm9ncmVzcywgdGhlIHRhc2sgaXMgcXVldWVkIHVudGlsIGl0IGJlY29tZXMgYXZhaWxhYmxlLiBPbmNlXG4gICAgICogdGhlIGB3b3JrZXJgIGhhcyBjb21wbGV0ZWQgc29tZSB0YXNrcywgZWFjaCBjYWxsYmFjayBvZiB0aG9zZSB0YXNrcyBpc1xuICAgICAqIGNhbGxlZC4gQ2hlY2sgb3V0IFt0aGVzZV0oaHR0cHM6Ly9jYW1vLmdpdGh1YnVzZXJjb250ZW50LmNvbS82YmJkMzZmNGNmNWIzNWEwZjExYTk2ZGNkMmU5NzcxMWZmYzJmYjM3LzY4NzQ3NDcwNzMzYTJmMmY2NjJlNjM2YzZmNzU2NDJlNjc2OTc0Njg3NTYyMmU2MzZmNmQyZjYxNzM3MzY1NzQ3MzJmMzEzNjM3MzYzODM3MzEyZjM2MzgzMTMwMzgyZjYyNjI2MzMwNjM2NjYyMzAyZDM1NjYzMjM5MmQzMTMxNjUzMjJkMzkzNzM0NjYyZDMzMzMzOTM3NjMzNjM0NjQ2MzM4MzUzODJlNjc2OTY2KSBbYW5pbWF0aW9uc10oaHR0cHM6Ly9jYW1vLmdpdGh1YnVzZXJjb250ZW50LmNvbS9mNDgxMGUwMGUxYzVmNWY4YWRkYmUzZTlmNDkwNjRmZDVkMTAyNjk5LzY4NzQ3NDcwNzMzYTJmMmY2NjJlNjM2YzZmNzU2NDJlNjc2OTc0Njg3NTYyMmU2MzZmNmQyZjYxNzM3MzY1NzQ3MzJmMzEzNjM3MzYzODM3MzEyZjM2MzgzMTMwMzEyZjM4MzQ2MzM5MzIzMDM2MzYyZDM1NjYzMjM5MmQzMTMxNjUzMjJkMzgzMTM0NjYyZDM5NjQzMzY0MzAzMjM0MzEzMzYyNjY2NDJlNjc2OTY2KVxuICAgICAqIGZvciBob3cgYGNhcmdvYCBhbmQgYHF1ZXVlYCB3b3JrLlxuICAgICAqXG4gICAgICogV2hpbGUgW2BxdWV1ZWBde0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy5xdWV1ZX0gcGFzc2VzIG9ubHkgb25lIHRhc2sgdG8gb25lIG9mIGEgZ3JvdXAgb2Ygd29ya2Vyc1xuICAgICAqIGF0IGEgdGltZSwgY2FyZ28gcGFzc2VzIGFuIGFycmF5IG9mIHRhc2tzIHRvIGEgc2luZ2xlIHdvcmtlciwgcmVwZWF0aW5nXG4gICAgICogd2hlbiB0aGUgd29ya2VyIGlzIGZpbmlzaGVkLlxuICAgICAqXG4gICAgICogQG5hbWUgY2FyZ29cbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb250cm9sRmxvd1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5xdWV1ZV17QGxpbmsgbW9kdWxlOkNvbnRyb2xGbG93LnF1ZXVlfVxuICAgICAqIEBjYXRlZ29yeSBDb250cm9sIEZsb3dcbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IHdvcmtlciAtIEFuIGFzeW5jaHJvbm91cyBmdW5jdGlvbiBmb3IgcHJvY2Vzc2luZyBhbiBhcnJheVxuICAgICAqIG9mIHF1ZXVlZCB0YXNrcy4gSW52b2tlZCB3aXRoIGAodGFza3MsIGNhbGxiYWNrKWAuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtwYXlsb2FkPUluZmluaXR5XSAtIEFuIG9wdGlvbmFsIGBpbnRlZ2VyYCBmb3IgZGV0ZXJtaW5pbmdcbiAgICAgKiBob3cgbWFueSB0YXNrcyBzaG91bGQgYmUgcHJvY2Vzc2VkIHBlciByb3VuZDsgaWYgb21pdHRlZCwgdGhlIGRlZmF1bHQgaXNcbiAgICAgKiB1bmxpbWl0ZWQuXG4gICAgICogQHJldHVybnMge21vZHVsZTpDb250cm9sRmxvdy5RdWV1ZU9iamVjdH0gQSBjYXJnbyBvYmplY3QgdG8gbWFuYWdlIHRoZSB0YXNrcy4gQ2FsbGJhY2tzIGNhblxuICAgICAqIGF0dGFjaGVkIGFzIGNlcnRhaW4gcHJvcGVydGllcyB0byBsaXN0ZW4gZm9yIHNwZWNpZmljIGV2ZW50cyBkdXJpbmcgdGhlXG4gICAgICogbGlmZWN5Y2xlIG9mIHRoZSBjYXJnbyBhbmQgaW5uZXIgcXVldWUuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vIGNyZWF0ZSBhIGNhcmdvIG9iamVjdCB3aXRoIHBheWxvYWQgMlxuICAgICAqIHZhciBjYXJnbyA9IGFzeW5jLmNhcmdvKGZ1bmN0aW9uKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAqICAgICBmb3IgKHZhciBpPTA7IGk8dGFza3MubGVuZ3RoOyBpKyspIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKCdoZWxsbyAnICsgdGFza3NbaV0ubmFtZSk7XG4gICAgICogICAgIH1cbiAgICAgKiAgICAgY2FsbGJhY2soKTtcbiAgICAgKiB9LCAyKTtcbiAgICAgKlxuICAgICAqIC8vIGFkZCBzb21lIGl0ZW1zXG4gICAgICogY2FyZ28ucHVzaCh7bmFtZTogJ2Zvbyd9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coJ2ZpbmlzaGVkIHByb2Nlc3NpbmcgZm9vJyk7XG4gICAgICogfSk7XG4gICAgICogY2FyZ28ucHVzaCh7bmFtZTogJ2Jhcid9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coJ2ZpbmlzaGVkIHByb2Nlc3NpbmcgYmFyJyk7XG4gICAgICogfSk7XG4gICAgICogYXdhaXQgY2FyZ28ucHVzaCh7bmFtZTogJ2Jheid9KTtcbiAgICAgKiBjb25zb2xlLmxvZygnZmluaXNoZWQgcHJvY2Vzc2luZyBiYXonKTtcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjYXJnbyQxKHdvcmtlciwgcGF5bG9hZCkge1xuICAgICAgICByZXR1cm4gcXVldWUkMSh3b3JrZXIsIDEsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBgY2FyZ29RdWV1ZWAgb2JqZWN0IHdpdGggdGhlIHNwZWNpZmllZCBwYXlsb2FkLiBUYXNrcyBhZGRlZCB0byB0aGVcbiAgICAgKiBjYXJnb1F1ZXVlIHdpbGwgYmUgcHJvY2Vzc2VkIHRvZ2V0aGVyICh1cCB0byB0aGUgYHBheWxvYWRgIGxpbWl0KSBpbiBgY29uY3VycmVuY3lgIHBhcmFsbGVsIHdvcmtlcnMuXG4gICAgICogSWYgdGhlIGFsbCBgd29ya2Vyc2AgYXJlIGluIHByb2dyZXNzLCB0aGUgdGFzayBpcyBxdWV1ZWQgdW50aWwgb25lIGJlY29tZXMgYXZhaWxhYmxlLiBPbmNlXG4gICAgICogYSBgd29ya2VyYCBoYXMgY29tcGxldGVkIHNvbWUgdGFza3MsIGVhY2ggY2FsbGJhY2sgb2YgdGhvc2UgdGFza3MgaXNcbiAgICAgKiBjYWxsZWQuIENoZWNrIG91dCBbdGhlc2VdKGh0dHBzOi8vY2Ftby5naXRodWJ1c2VyY29udGVudC5jb20vNmJiZDM2ZjRjZjViMzVhMGYxMWE5NmRjZDJlOTc3MTFmZmMyZmIzNy82ODc0NzQ3MDczM2EyZjJmNjYyZTYzNmM2Zjc1NjQyZTY3Njk3NDY4NzU2MjJlNjM2ZjZkMmY2MTczNzM2NTc0NzMyZjMxMzYzNzM2MzgzNzMxMmYzNjM4MzEzMDM4MmY2MjYyNjMzMDYzNjY2MjMwMmQzNTY2MzIzOTJkMzEzMTY1MzIyZDM5MzczNDY2MmQzMzMzMzkzNzYzMzYzNDY0NjMzODM1MzgyZTY3Njk2NikgW2FuaW1hdGlvbnNdKGh0dHBzOi8vY2Ftby5naXRodWJ1c2VyY29udGVudC5jb20vZjQ4MTBlMDBlMWM1ZjVmOGFkZGJlM2U5ZjQ5MDY0ZmQ1ZDEwMjY5OS82ODc0NzQ3MDczM2EyZjJmNjYyZTYzNmM2Zjc1NjQyZTY3Njk3NDY4NzU2MjJlNjM2ZjZkMmY2MTczNzM2NTc0NzMyZjMxMzYzNzM2MzgzNzMxMmYzNjM4MzEzMDMxMmYzODM0NjMzOTMyMzAzNjM2MmQzNTY2MzIzOTJkMzEzMTY1MzIyZDM4MzEzNDY2MmQzOTY0MzM2NDMwMzIzNDMxMzM2MjY2NjQyZTY3Njk2NilcbiAgICAgKiBmb3IgaG93IGBjYXJnb2AgYW5kIGBxdWV1ZWAgd29yay5cbiAgICAgKlxuICAgICAqIFdoaWxlIFtgcXVldWVgXXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cucXVldWV9IHBhc3NlcyBvbmx5IG9uZSB0YXNrIHRvIG9uZSBvZiBhIGdyb3VwIG9mIHdvcmtlcnNcbiAgICAgKiBhdCBhIHRpbWUsIGFuZCBbYGNhcmdvYF17QGxpbmsgbW9kdWxlOkNvbnRyb2xGbG93LmNhcmdvfSBwYXNzZXMgYW4gYXJyYXkgb2YgdGFza3MgdG8gYSBzaW5nbGUgd29ya2VyLFxuICAgICAqIHRoZSBjYXJnb1F1ZXVlIHBhc3NlcyBhbiBhcnJheSBvZiB0YXNrcyB0byBtdWx0aXBsZSBwYXJhbGxlbCB3b3JrZXJzLlxuICAgICAqXG4gICAgICogQG5hbWUgY2FyZ29RdWV1ZVxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbnRyb2xGbG93XG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLnF1ZXVlXXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cucXVldWV9XG4gICAgICogQHNlZSBbYXN5bmMuY2FyZ29de0BsaW5rIG1vZHVsZTpDb250cm9sRkxvdy5jYXJnb31cbiAgICAgKiBAY2F0ZWdvcnkgQ29udHJvbCBGbG93XG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSB3b3JrZXIgLSBBbiBhc3luY2hyb25vdXMgZnVuY3Rpb24gZm9yIHByb2Nlc3NpbmcgYW4gYXJyYXlcbiAgICAgKiBvZiBxdWV1ZWQgdGFza3MuIEludm9rZWQgd2l0aCBgKHRhc2tzLCBjYWxsYmFjaylgLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbY29uY3VycmVuY3k9MV0gLSBBbiBgaW50ZWdlcmAgZm9yIGRldGVybWluaW5nIGhvdyBtYW55XG4gICAgICogYHdvcmtlcmAgZnVuY3Rpb25zIHNob3VsZCBiZSBydW4gaW4gcGFyYWxsZWwuICBJZiBvbWl0dGVkLCB0aGUgY29uY3VycmVuY3lcbiAgICAgKiBkZWZhdWx0cyB0byBgMWAuICBJZiB0aGUgY29uY3VycmVuY3kgaXMgYDBgLCBhbiBlcnJvciBpcyB0aHJvd24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtwYXlsb2FkPUluZmluaXR5XSAtIEFuIG9wdGlvbmFsIGBpbnRlZ2VyYCBmb3IgZGV0ZXJtaW5pbmdcbiAgICAgKiBob3cgbWFueSB0YXNrcyBzaG91bGQgYmUgcHJvY2Vzc2VkIHBlciByb3VuZDsgaWYgb21pdHRlZCwgdGhlIGRlZmF1bHQgaXNcbiAgICAgKiB1bmxpbWl0ZWQuXG4gICAgICogQHJldHVybnMge21vZHVsZTpDb250cm9sRmxvdy5RdWV1ZU9iamVjdH0gQSBjYXJnb1F1ZXVlIG9iamVjdCB0byBtYW5hZ2UgdGhlIHRhc2tzLiBDYWxsYmFja3MgY2FuXG4gICAgICogYXR0YWNoZWQgYXMgY2VydGFpbiBwcm9wZXJ0aWVzIHRvIGxpc3RlbiBmb3Igc3BlY2lmaWMgZXZlbnRzIGR1cmluZyB0aGVcbiAgICAgKiBsaWZlY3ljbGUgb2YgdGhlIGNhcmdvUXVldWUgYW5kIGlubmVyIHF1ZXVlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBjcmVhdGUgYSBjYXJnb1F1ZXVlIG9iamVjdCB3aXRoIHBheWxvYWQgMiBhbmQgY29uY3VycmVuY3kgMlxuICAgICAqIHZhciBjYXJnb1F1ZXVlID0gYXN5bmMuY2FyZ29RdWV1ZShmdW5jdGlvbih0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgZm9yICh2YXIgaT0wOyBpPHRhc2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZygnaGVsbG8gJyArIHRhc2tzW2ldLm5hbWUpO1xuICAgICAqICAgICB9XG4gICAgICogICAgIGNhbGxiYWNrKCk7XG4gICAgICogfSwgMiwgMik7XG4gICAgICpcbiAgICAgKiAvLyBhZGQgc29tZSBpdGVtc1xuICAgICAqIGNhcmdvUXVldWUucHVzaCh7bmFtZTogJ2Zvbyd9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coJ2ZpbmlzaGVkIHByb2Nlc3NpbmcgZm9vJyk7XG4gICAgICogfSk7XG4gICAgICogY2FyZ29RdWV1ZS5wdXNoKHtuYW1lOiAnYmFyJ30sIGZ1bmN0aW9uKGVycikge1xuICAgICAqICAgICBjb25zb2xlLmxvZygnZmluaXNoZWQgcHJvY2Vzc2luZyBiYXInKTtcbiAgICAgKiB9KTtcbiAgICAgKiBjYXJnb1F1ZXVlLnB1c2goe25hbWU6ICdiYXonfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKCdmaW5pc2hlZCBwcm9jZXNzaW5nIGJheicpO1xuICAgICAqIH0pO1xuICAgICAqIGNhcmdvUXVldWUucHVzaCh7bmFtZTogJ2Jvbyd9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coJ2ZpbmlzaGVkIHByb2Nlc3NpbmcgYm9vJyk7XG4gICAgICogfSk7XG4gICAgICovXG4gICAgZnVuY3Rpb24gY2FyZ28od29ya2VyLCBjb25jdXJyZW5jeSwgcGF5bG9hZCkge1xuICAgICAgICByZXR1cm4gcXVldWUkMSh3b3JrZXIsIGNvbmN1cnJlbmN5LCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWR1Y2VzIGBjb2xsYCBpbnRvIGEgc2luZ2xlIHZhbHVlIHVzaW5nIGFuIGFzeW5jIGBpdGVyYXRlZWAgdG8gcmV0dXJuIGVhY2hcbiAgICAgKiBzdWNjZXNzaXZlIHN0ZXAuIGBtZW1vYCBpcyB0aGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgcmVkdWN0aW9uLiBUaGlzIGZ1bmN0aW9uXG4gICAgICogb25seSBvcGVyYXRlcyBpbiBzZXJpZXMuXG4gICAgICpcbiAgICAgKiBGb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgaXQgbWF5IG1ha2Ugc2Vuc2UgdG8gc3BsaXQgYSBjYWxsIHRvIHRoaXMgZnVuY3Rpb25cbiAgICAgKiBpbnRvIGEgcGFyYWxsZWwgbWFwLCBhbmQgdGhlbiB1c2UgdGhlIG5vcm1hbCBgQXJyYXkucHJvdG90eXBlLnJlZHVjZWAgb24gdGhlXG4gICAgICogcmVzdWx0cy4gVGhpcyBmdW5jdGlvbiBpcyBmb3Igc2l0dWF0aW9ucyB3aGVyZSBlYWNoIHN0ZXAgaW4gdGhlIHJlZHVjdGlvblxuICAgICAqIG5lZWRzIHRvIGJlIGFzeW5jOyBpZiB5b3UgY2FuIGdldCB0aGUgZGF0YSBiZWZvcmUgcmVkdWNpbmcgaXQsIHRoZW4gaXQnc1xuICAgICAqIHByb2JhYmx5IGEgZ29vZCBpZGVhIHRvIGRvIHNvLlxuICAgICAqXG4gICAgICogQG5hbWUgcmVkdWNlXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGFsaWFzIGluamVjdFxuICAgICAqIEBhbGlhcyBmb2xkbFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHsqfSBtZW1vIC0gVGhlIGluaXRpYWwgc3RhdGUgb2YgdGhlIHJlZHVjdGlvbi5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQSBmdW5jdGlvbiBhcHBsaWVkIHRvIGVhY2ggaXRlbSBpbiB0aGVcbiAgICAgKiBhcnJheSB0byBwcm9kdWNlIHRoZSBuZXh0IHN0ZXAgaW4gdGhlIHJlZHVjdGlvbi5cbiAgICAgKiBUaGUgYGl0ZXJhdGVlYCBzaG91bGQgY29tcGxldGUgd2l0aCB0aGUgbmV4dCBzdGF0ZSBvZiB0aGUgcmVkdWN0aW9uLlxuICAgICAqIElmIHRoZSBpdGVyYXRlZSBjb21wbGV0ZXMgd2l0aCBhbiBlcnJvciwgdGhlIHJlZHVjdGlvbiBpcyBzdG9wcGVkIGFuZCB0aGVcbiAgICAgKiBtYWluIGBjYWxsYmFja2AgaXMgaW1tZWRpYXRlbHkgY2FsbGVkIHdpdGggdGhlIGVycm9yLlxuICAgICAqIEludm9rZWQgd2l0aCAobWVtbywgaXRlbSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCBhZnRlciBhbGwgdGhlXG4gICAgICogYGl0ZXJhdGVlYCBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZC4gUmVzdWx0IGlzIHRoZSByZWR1Y2VkIHZhbHVlLiBJbnZva2VkIHdpdGhcbiAgICAgKiAoZXJyLCByZXN1bHQpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIG5vIGNhbGxiYWNrIGlzIHBhc3NlZFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBmaWxlMS50eHQgaXMgYSBmaWxlIHRoYXQgaXMgMTAwMCBieXRlcyBpbiBzaXplXG4gICAgICogLy8gZmlsZTIudHh0IGlzIGEgZmlsZSB0aGF0IGlzIDIwMDAgYnl0ZXMgaW4gc2l6ZVxuICAgICAqIC8vIGZpbGUzLnR4dCBpcyBhIGZpbGUgdGhhdCBpcyAzMDAwIGJ5dGVzIGluIHNpemVcbiAgICAgKiAvLyBmaWxlNC50eHQgZG9lcyBub3QgZXhpc3RcbiAgICAgKlxuICAgICAqIGNvbnN0IGZpbGVMaXN0ID0gWydmaWxlMS50eHQnLCdmaWxlMi50eHQnLCdmaWxlMy50eHQnXTtcbiAgICAgKiBjb25zdCB3aXRoTWlzc2luZ0ZpbGVMaXN0ID0gWydmaWxlMS50eHQnLCdmaWxlMi50eHQnLCdmaWxlMy50eHQnLCAnZmlsZTQudHh0J107XG4gICAgICpcbiAgICAgKiAvLyBhc3luY2hyb25vdXMgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyB0aGUgZmlsZSBzaXplIGluIGJ5dGVzXG4gICAgICogLy8gZmlsZSBzaXplIGlzIGFkZGVkIHRvIHRoZSBtZW1vaXplZCB2YWx1ZSwgdGhlbiByZXR1cm5lZFxuICAgICAqIGZ1bmN0aW9uIGdldEZpbGVTaXplSW5CeXRlcyhtZW1vLCBmaWxlLCBjYWxsYmFjaykge1xuICAgICAqICAgICBmcy5zdGF0KGZpbGUsIGZ1bmN0aW9uKGVyciwgc3RhdCkge1xuICAgICAqICAgICAgICAgaWYgKGVycikge1xuICAgICAqICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAqICAgICAgICAgfVxuICAgICAqICAgICAgICAgY2FsbGJhY2sobnVsbCwgbWVtbyArIHN0YXQuc2l6ZSk7XG4gICAgICogICAgIH0pO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIGNhbGxiYWNrc1xuICAgICAqIGFzeW5jLnJlZHVjZShmaWxlTGlzdCwgMCwgZ2V0RmlsZVNpemVJbkJ5dGVzLCBmdW5jdGlvbihlcnIsIHJlc3VsdCkge1xuICAgICAqICAgICBpZiAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9IGVsc2Uge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgICAgIC8vIDYwMDBcbiAgICAgKiAgICAgICAgIC8vIHdoaWNoIGlzIHRoZSBzdW0gb2YgdGhlIGZpbGUgc2l6ZXMgb2YgdGhlIHRocmVlIGZpbGVzXG4gICAgICogICAgIH1cbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIEVycm9yIEhhbmRsaW5nXG4gICAgICogYXN5bmMucmVkdWNlKHdpdGhNaXNzaW5nRmlsZUxpc3QsIDAsIGdldEZpbGVTaXplSW5CeXRlcywgZnVuY3Rpb24oZXJyLCByZXN1bHQpIHtcbiAgICAgKiAgICAgaWYgKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgICAgIC8vIFsgRXJyb3I6IEVOT0VOVDogbm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSBdXG4gICAgICogICAgIH0gZWxzZSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICB9XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBQcm9taXNlc1xuICAgICAqIGFzeW5jLnJlZHVjZShmaWxlTGlzdCwgMCwgZ2V0RmlsZVNpemVJbkJ5dGVzKVxuICAgICAqIC50aGVuKCByZXN1bHQgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAvLyA2MDAwXG4gICAgICogICAgIC8vIHdoaWNoIGlzIHRoZSBzdW0gb2YgdGhlIGZpbGUgc2l6ZXMgb2YgdGhlIHRocmVlIGZpbGVzXG4gICAgICogfSkuY2F0Y2goIGVyciA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBFcnJvciBIYW5kbGluZ1xuICAgICAqIGFzeW5jLnJlZHVjZSh3aXRoTWlzc2luZ0ZpbGVMaXN0LCAwLCBnZXRGaWxlU2l6ZUluQnl0ZXMpXG4gICAgICogLnRoZW4oIHJlc3VsdCA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XG4gICAgICogfSkuY2F0Y2goIGVyciA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgIC8vIFsgRXJyb3I6IEVOT0VOVDogbm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSBdXG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBhc3luYy9hd2FpdFxuICAgICAqIGFzeW5jICgpID0+IHtcbiAgICAgKiAgICAgdHJ5IHtcbiAgICAgKiAgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBhc3luYy5yZWR1Y2UoZmlsZUxpc3QsIDAsIGdldEZpbGVTaXplSW5CeXRlcyk7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAgICAgLy8gNjAwMFxuICAgICAqICAgICAgICAgLy8gd2hpY2ggaXMgdGhlIHN1bSBvZiB0aGUgZmlsZSBzaXplcyBvZiB0aGUgdGhyZWUgZmlsZXNcbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICogLy8gRXJyb3IgSGFuZGxpbmdcbiAgICAgKiBhc3luYyAoKSA9PiB7XG4gICAgICogICAgIHRyeSB7XG4gICAgICogICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgYXN5bmMucmVkdWNlKHdpdGhNaXNzaW5nRmlsZUxpc3QsIDAsIGdldEZpbGVTaXplSW5CeXRlcyk7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICB9XG4gICAgICogICAgIGNhdGNoIChlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgICAgICAvLyBbIEVycm9yOiBFTk9FTlQ6IG5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkgXVxuICAgICAqICAgICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICovXG4gICAgZnVuY3Rpb24gcmVkdWNlKGNvbGwsIG1lbW8sIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IG9uY2UoY2FsbGJhY2spO1xuICAgICAgICB2YXIgX2l0ZXJhdGVlID0gd3JhcEFzeW5jKGl0ZXJhdGVlKTtcbiAgICAgICAgcmV0dXJuIGVhY2hPZlNlcmllcyQxKGNvbGwsICh4LCBpLCBpdGVyQ2IpID0+IHtcbiAgICAgICAgICAgIF9pdGVyYXRlZShtZW1vLCB4LCAoZXJyLCB2KSA9PiB7XG4gICAgICAgICAgICAgICAgbWVtbyA9IHY7XG4gICAgICAgICAgICAgICAgaXRlckNiKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZXJyID0+IGNhbGxiYWNrKGVyciwgbWVtbykpO1xuICAgIH1cbiAgICB2YXIgcmVkdWNlJDEgPSBhd2FpdGlmeShyZWR1Y2UsIDQpO1xuXG4gICAgLyoqXG4gICAgICogVmVyc2lvbiBvZiB0aGUgY29tcG9zZSBmdW5jdGlvbiB0aGF0IGlzIG1vcmUgbmF0dXJhbCB0byByZWFkLiBFYWNoIGZ1bmN0aW9uXG4gICAgICogY29uc3VtZXMgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgcHJldmlvdXMgZnVuY3Rpb24uIEl0IGlzIHRoZSBlcXVpdmFsZW50IG9mXG4gICAgICogW2NvbXBvc2Vde0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy5jb21wb3NlfSB3aXRoIHRoZSBhcmd1bWVudHMgcmV2ZXJzZWQuXG4gICAgICpcbiAgICAgKiBFYWNoIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIHRoZSBjb21wb3NlZCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBuYW1lIHNlcVxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbnRyb2xGbG93XG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLmNvbXBvc2Vde0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy5jb21wb3NlfVxuICAgICAqIEBjYXRlZ29yeSBDb250cm9sIEZsb3dcbiAgICAgKiBAcGFyYW0gey4uLkFzeW5jRnVuY3Rpb259IGZ1bmN0aW9ucyAtIHRoZSBhc3luY2hyb25vdXMgZnVuY3Rpb25zIHRvIGNvbXBvc2VcbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IGEgZnVuY3Rpb24gdGhhdCBjb21wb3NlcyB0aGUgYGZ1bmN0aW9uc2AgaW4gb3JkZXJcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gUmVxdWlyZXMgbG9kYXNoIChvciB1bmRlcnNjb3JlKSwgZXhwcmVzczMgYW5kIGRyZXNlbmRlJ3Mgb3JtMi5cbiAgICAgKiAvLyBQYXJ0IG9mIGFuIGFwcCwgdGhhdCBmZXRjaGVzIGNhdHMgb2YgdGhlIGxvZ2dlZCB1c2VyLlxuICAgICAqIC8vIFRoaXMgZXhhbXBsZSB1c2VzIGBzZXFgIGZ1bmN0aW9uIHRvIGF2b2lkIG92ZXJuZXN0aW5nIGFuZCBlcnJvclxuICAgICAqIC8vIGhhbmRsaW5nIGNsdXR0ZXIuXG4gICAgICogYXBwLmdldCgnL2NhdHMnLCBmdW5jdGlvbihyZXF1ZXN0LCByZXNwb25zZSkge1xuICAgICAqICAgICB2YXIgVXNlciA9IHJlcXVlc3QubW9kZWxzLlVzZXI7XG4gICAgICogICAgIGFzeW5jLnNlcShcbiAgICAgKiAgICAgICAgIFVzZXIuZ2V0LmJpbmQoVXNlciksICAvLyAnVXNlci5nZXQnIGhhcyBzaWduYXR1cmUgKGlkLCBjYWxsYmFjayhlcnIsIGRhdGEpKVxuICAgICAqICAgICAgICAgZnVuY3Rpb24odXNlciwgZm4pIHtcbiAgICAgKiAgICAgICAgICAgICB1c2VyLmdldENhdHMoZm4pOyAgICAgIC8vICdnZXRDYXRzJyBoYXMgc2lnbmF0dXJlIChjYWxsYmFjayhlcnIsIGRhdGEpKVxuICAgICAqICAgICAgICAgfVxuICAgICAqICAgICApKHJlcS5zZXNzaW9uLnVzZXJfaWQsIGZ1bmN0aW9uIChlcnIsIGNhdHMpIHtcbiAgICAgKiAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgKiAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICogICAgICAgICAgICAgcmVzcG9uc2UuanNvbih7IHN0YXR1czogJ2Vycm9yJywgbWVzc2FnZTogZXJyLm1lc3NhZ2UgfSk7XG4gICAgICogICAgICAgICB9IGVsc2Uge1xuICAgICAqICAgICAgICAgICAgIHJlc3BvbnNlLmpzb24oeyBzdGF0dXM6ICdvaycsIG1lc3NhZ2U6ICdDYXRzIGZvdW5kJywgZGF0YTogY2F0cyB9KTtcbiAgICAgKiAgICAgICAgIH1cbiAgICAgKiAgICAgfSk7XG4gICAgICogfSk7XG4gICAgICovXG4gICAgZnVuY3Rpb24gc2VxKC4uLmZ1bmN0aW9ucykge1xuICAgICAgICB2YXIgX2Z1bmN0aW9ucyA9IGZ1bmN0aW9ucy5tYXAod3JhcEFzeW5jKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG5cbiAgICAgICAgICAgIHZhciBjYiA9IGFyZ3NbYXJncy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY2IgPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIGFyZ3MucG9wKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNiID0gcHJvbWlzZUNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlZHVjZSQxKF9mdW5jdGlvbnMsIGFyZ3MsIChuZXdhcmdzLCBmbiwgaXRlckNiKSA9PiB7XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgbmV3YXJncy5jb25jYXQoKGVyciwgLi4ubmV4dGFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaXRlckNiKGVyciwgbmV4dGFyZ3MpO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAoZXJyLCByZXN1bHRzKSA9PiBjYihlcnIsIC4uLnJlc3VsdHMpKTtcblxuICAgICAgICAgICAgcmV0dXJuIGNiW1BST01JU0VfU1lNQk9MXVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB3aGljaCBpcyBhIGNvbXBvc2l0aW9uIG9mIHRoZSBwYXNzZWQgYXN5bmNocm9ub3VzXG4gICAgICogZnVuY3Rpb25zLiBFYWNoIGZ1bmN0aW9uIGNvbnN1bWVzIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uIHRoYXRcbiAgICAgKiBmb2xsb3dzLiBDb21wb3NpbmcgZnVuY3Rpb25zIGBmKClgLCBgZygpYCwgYW5kIGBoKClgIHdvdWxkIHByb2R1Y2UgdGhlIHJlc3VsdFxuICAgICAqIG9mIGBmKGcoaCgpKSlgLCBvbmx5IHRoaXMgdmVyc2lvbiB1c2VzIGNhbGxiYWNrcyB0byBvYnRhaW4gdGhlIHJldHVybiB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBJZiB0aGUgbGFzdCBhcmd1bWVudCB0byB0aGUgY29tcG9zZWQgZnVuY3Rpb24gaXMgbm90IGEgZnVuY3Rpb24sIGEgcHJvbWlzZVxuICAgICAqIGlzIHJldHVybmVkIHdoZW4geW91IGNhbGwgaXQuXG4gICAgICpcbiAgICAgKiBFYWNoIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIHRoZSBjb21wb3NlZCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBuYW1lIGNvbXBvc2VcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb250cm9sRmxvd1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgQ29udHJvbCBGbG93XG4gICAgICogQHBhcmFtIHsuLi5Bc3luY0Z1bmN0aW9ufSBmdW5jdGlvbnMgLSB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9ucyB0byBjb21wb3NlXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBhbiBhc3luY2hyb25vdXMgZnVuY3Rpb24gdGhhdCBpcyB0aGUgY29tcG9zZWRcbiAgICAgKiBhc3luY2hyb25vdXMgYGZ1bmN0aW9uc2BcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gYWRkMShuLCBjYWxsYmFjaykge1xuICAgICAqICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsIG4gKyAxKTtcbiAgICAgKiAgICAgfSwgMTApO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIG11bDMobiwgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCBuICogMyk7XG4gICAgICogICAgIH0sIDEwKTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiB2YXIgYWRkMW11bDMgPSBhc3luYy5jb21wb3NlKG11bDMsIGFkZDEpO1xuICAgICAqIGFkZDFtdWwzKDQsIGZ1bmN0aW9uIChlcnIsIHJlc3VsdCkge1xuICAgICAqICAgICAvLyByZXN1bHQgbm93IGVxdWFscyAxNVxuICAgICAqIH0pO1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbXBvc2UoLi4uYXJncykge1xuICAgICAgICByZXR1cm4gc2VxKC4uLmFyZ3MucmV2ZXJzZSgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyBbYG1hcGBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5tYXB9IGJ1dCBydW5zIGEgbWF4aW11bSBvZiBgbGltaXRgIGFzeW5jIG9wZXJhdGlvbnMgYXQgYSB0aW1lLlxuICAgICAqXG4gICAgICogQG5hbWUgbWFwTGltaXRcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5tYXBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5tYXB9XG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfEFzeW5jSXRlcmFibGV8T2JqZWN0fSBjb2xsIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbGltaXQgLSBUaGUgbWF4aW11bSBudW1iZXIgb2YgYXN5bmMgb3BlcmF0aW9ucyBhdCBhIHRpbWUuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEFuIGFzeW5jIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggaXRlbSBpblxuICAgICAqIGBjb2xsYC5cbiAgICAgKiBUaGUgaXRlcmF0ZWUgc2hvdWxkIGNvbXBsZXRlIHdpdGggdGhlIHRyYW5zZm9ybWVkIGl0ZW0uXG4gICAgICogSW52b2tlZCB3aXRoIChpdGVtLCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIHdoZW4gYWxsIGBpdGVyYXRlZWBcbiAgICAgKiBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZCwgb3IgYW4gZXJyb3Igb2NjdXJzLiBSZXN1bHRzIGlzIGFuIGFycmF5IG9mIHRoZVxuICAgICAqIHRyYW5zZm9ybWVkIGl0ZW1zIGZyb20gdGhlIGBjb2xsYC4gSW52b2tlZCB3aXRoIChlcnIsIHJlc3VsdHMpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIG5vIGNhbGxiYWNrIGlzIHBhc3NlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1hcExpbWl0IChjb2xsLCBsaW1pdCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBfYXN5bmNNYXAoZWFjaE9mTGltaXQkMihsaW1pdCksIGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaylcbiAgICB9XG4gICAgdmFyIG1hcExpbWl0JDEgPSBhd2FpdGlmeShtYXBMaW1pdCwgNCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyBbYGNvbmNhdGBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5jb25jYXR9IGJ1dCBydW5zIGEgbWF4aW11bSBvZiBgbGltaXRgIGFzeW5jIG9wZXJhdGlvbnMgYXQgYSB0aW1lLlxuICAgICAqXG4gICAgICogQG5hbWUgY29uY2F0TGltaXRcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5jb25jYXRde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5jb25jYXR9XG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAYWxpYXMgZmxhdE1hcExpbWl0XG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbWl0IC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGFzeW5jIG9wZXJhdGlvbnMgYXQgYSB0aW1lLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggaXRlbSBpbiBgY29sbGAsXG4gICAgICogd2hpY2ggc2hvdWxkIHVzZSBhbiBhcnJheSBhcyBpdHMgcmVzdWx0LiBJbnZva2VkIHdpdGggKGl0ZW0sIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgYWZ0ZXIgYWxsIHRoZVxuICAgICAqIGBpdGVyYXRlZWAgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQsIG9yIGFuIGVycm9yIG9jY3Vycy4gUmVzdWx0cyBpcyBhbiBhcnJheVxuICAgICAqIGNvbnRhaW5pbmcgdGhlIGNvbmNhdGVuYXRlZCByZXN1bHRzIG9mIHRoZSBgaXRlcmF0ZWVgIGZ1bmN0aW9uLiBJbnZva2VkIHdpdGhcbiAgICAgKiAoZXJyLCByZXN1bHRzKS5cbiAgICAgKiBAcmV0dXJucyBBIFByb21pc2UsIGlmIG5vIGNhbGxiYWNrIGlzIHBhc3NlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbmNhdExpbWl0KGNvbGwsIGxpbWl0LCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIF9pdGVyYXRlZSA9IHdyYXBBc3luYyhpdGVyYXRlZSk7XG4gICAgICAgIHJldHVybiBtYXBMaW1pdCQxKGNvbGwsIGxpbWl0LCAodmFsLCBpdGVyQ2IpID0+IHtcbiAgICAgICAgICAgIF9pdGVyYXRlZSh2YWwsIChlcnIsIC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gaXRlckNiKGVycik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZXJDYihlcnIsIGFyZ3MpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIChlcnIsIG1hcFJlc3VsdHMpID0+IHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFwUmVzdWx0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChtYXBSZXN1bHRzW2ldKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoLi4ubWFwUmVzdWx0c1tpXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyLCByZXN1bHQpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgdmFyIGNvbmNhdExpbWl0JDEgPSBhd2FpdGlmeShjb25jYXRMaW1pdCwgNCk7XG5cbiAgICAvKipcbiAgICAgKiBBcHBsaWVzIGBpdGVyYXRlZWAgdG8gZWFjaCBpdGVtIGluIGBjb2xsYCwgY29uY2F0ZW5hdGluZyB0aGUgcmVzdWx0cy4gUmV0dXJuc1xuICAgICAqIHRoZSBjb25jYXRlbmF0ZWQgbGlzdC4gVGhlIGBpdGVyYXRlZWBzIGFyZSBjYWxsZWQgaW4gcGFyYWxsZWwsIGFuZCB0aGVcbiAgICAgKiByZXN1bHRzIGFyZSBjb25jYXRlbmF0ZWQgYXMgdGhleSByZXR1cm4uIFRoZSByZXN1bHRzIGFycmF5IHdpbGwgYmUgcmV0dXJuZWQgaW5cbiAgICAgKiB0aGUgb3JpZ2luYWwgb3JkZXIgb2YgYGNvbGxgIHBhc3NlZCB0byB0aGUgYGl0ZXJhdGVlYCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBuYW1lIGNvbmNhdFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQGFsaWFzIGZsYXRNYXBcbiAgICAgKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfEFzeW5jSXRlcmFibGV8T2JqZWN0fSBjb2xsIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQSBmdW5jdGlvbiB0byBhcHBseSB0byBlYWNoIGl0ZW0gaW4gYGNvbGxgLFxuICAgICAqIHdoaWNoIHNob3VsZCB1c2UgYW4gYXJyYXkgYXMgaXRzIHJlc3VsdC4gSW52b2tlZCB3aXRoIChpdGVtLCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIGFmdGVyIGFsbCB0aGVcbiAgICAgKiBgaXRlcmF0ZWVgIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLCBvciBhbiBlcnJvciBvY2N1cnMuIFJlc3VsdHMgaXMgYW4gYXJyYXlcbiAgICAgKiBjb250YWluaW5nIHRoZSBjb25jYXRlbmF0ZWQgcmVzdWx0cyBvZiB0aGUgYGl0ZXJhdGVlYCBmdW5jdGlvbi4gSW52b2tlZCB3aXRoXG4gICAgICogKGVyciwgcmVzdWx0cykuXG4gICAgICogQHJldHVybnMgQSBQcm9taXNlLCBpZiBubyBjYWxsYmFjayBpcyBwYXNzZWRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gZGlyMSBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGZpbGUxLnR4dCwgZmlsZTIudHh0XG4gICAgICogLy8gZGlyMiBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGZpbGUzLnR4dCwgZmlsZTQudHh0XG4gICAgICogLy8gZGlyMyBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGZpbGU1LnR4dFxuICAgICAqIC8vIGRpcjQgZG9lcyBub3QgZXhpc3RcbiAgICAgKlxuICAgICAqIGxldCBkaXJlY3RvcnlMaXN0ID0gWydkaXIxJywnZGlyMicsJ2RpcjMnXTtcbiAgICAgKiBsZXQgd2l0aE1pc3NpbmdEaXJlY3RvcnlMaXN0ID0gWydkaXIxJywnZGlyMicsJ2RpcjMnLCAnZGlyNCddO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgY2FsbGJhY2tzXG4gICAgICogYXN5bmMuY29uY2F0KGRpcmVjdG9yeUxpc3QsIGZzLnJlYWRkaXIsIGZ1bmN0aW9uKGVyciwgcmVzdWx0cykge1xuICAgICAqICAgIGlmIChlcnIpIHtcbiAgICAgKiAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICB9IGVsc2Uge1xuICAgICAqICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiAgICAgICAgLy8gWyAnZmlsZTEudHh0JywgJ2ZpbGUyLnR4dCcsICdmaWxlMy50eHQnLCAnZmlsZTQudHh0JywgZmlsZTUudHh0IF1cbiAgICAgKiAgICB9XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBFcnJvciBIYW5kbGluZ1xuICAgICAqIGFzeW5jLmNvbmNhdCh3aXRoTWlzc2luZ0RpcmVjdG9yeUxpc3QsIGZzLnJlYWRkaXIsIGZ1bmN0aW9uKGVyciwgcmVzdWx0cykge1xuICAgICAqICAgIGlmIChlcnIpIHtcbiAgICAgKiAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgICAgLy8gWyBFcnJvcjogRU5PRU5UOiBubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IF1cbiAgICAgKiAgICAgICAgLy8gc2luY2UgZGlyNCBkb2VzIG5vdCBleGlzdFxuICAgICAqICAgIH0gZWxzZSB7XG4gICAgICogICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgIH1cbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIFByb21pc2VzXG4gICAgICogYXN5bmMuY29uY2F0KGRpcmVjdG9yeUxpc3QsIGZzLnJlYWRkaXIpXG4gICAgICogLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgICAvLyBbICdmaWxlMS50eHQnLCAnZmlsZTIudHh0JywgJ2ZpbGUzLnR4dCcsICdmaWxlNC50eHQnLCBmaWxlNS50eHQgXVxuICAgICAqIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICogICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gRXJyb3IgSGFuZGxpbmdcbiAgICAgKiBhc3luYy5jb25jYXQod2l0aE1pc3NpbmdEaXJlY3RvcnlMaXN0LCBmcy5yZWFkZGlyKVxuICAgICAqIC50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICAvLyBbIEVycm9yOiBFTk9FTlQ6IG5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkgXVxuICAgICAqICAgICAvLyBzaW5jZSBkaXI0IGRvZXMgbm90IGV4aXN0XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBhc3luYy9hd2FpdFxuICAgICAqIGFzeW5jICgpID0+IHtcbiAgICAgKiAgICAgdHJ5IHtcbiAgICAgKiAgICAgICAgIGxldCByZXN1bHRzID0gYXdhaXQgYXN5bmMuY29uY2F0KGRpcmVjdG9yeUxpc3QsIGZzLnJlYWRkaXIpO1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgICAgICAvLyBbICdmaWxlMS50eHQnLCAnZmlsZTIudHh0JywgJ2ZpbGUzLnR4dCcsICdmaWxlNC50eHQnLCBmaWxlNS50eHQgXVxuICAgICAqICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgIH1cbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBFcnJvciBIYW5kbGluZ1xuICAgICAqIGFzeW5jICgpID0+IHtcbiAgICAgKiAgICAgdHJ5IHtcbiAgICAgKiAgICAgICAgIGxldCByZXN1bHRzID0gYXdhaXQgYXN5bmMuY29uY2F0KHdpdGhNaXNzaW5nRGlyZWN0b3J5TGlzdCwgZnMucmVhZGRpcik7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICAgICAgLy8gWyBFcnJvcjogRU5PRU5UOiBubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IF1cbiAgICAgKiAgICAgICAgIC8vIHNpbmNlIGRpcjQgZG9lcyBub3QgZXhpc3RcbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbmNhdChjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGNvbmNhdExpbWl0JDEoY29sbCwgSW5maW5pdHksIGl0ZXJhdGVlLCBjYWxsYmFjaylcbiAgICB9XG4gICAgdmFyIGNvbmNhdCQxID0gYXdhaXRpZnkoY29uY2F0LCAzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzYW1lIGFzIFtgY29uY2F0YF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmNvbmNhdH0gYnV0IHJ1bnMgb25seSBhIHNpbmdsZSBhc3luYyBvcGVyYXRpb24gYXQgYSB0aW1lLlxuICAgICAqXG4gICAgICogQG5hbWUgY29uY2F0U2VyaWVzXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMuY29uY2F0XXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuY29uY2F0fVxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQGFsaWFzIGZsYXRNYXBTZXJpZXNcbiAgICAgKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfEFzeW5jSXRlcmFibGV8T2JqZWN0fSBjb2xsIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQSBmdW5jdGlvbiB0byBhcHBseSB0byBlYWNoIGl0ZW0gaW4gYGNvbGxgLlxuICAgICAqIFRoZSBpdGVyYXRlZSBzaG91bGQgY29tcGxldGUgd2l0aCBhbiBhcnJheSBhbiBhcnJheSBvZiByZXN1bHRzLlxuICAgICAqIEludm9rZWQgd2l0aCAoaXRlbSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCBhZnRlciBhbGwgdGhlXG4gICAgICogYGl0ZXJhdGVlYCBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZCwgb3IgYW4gZXJyb3Igb2NjdXJzLiBSZXN1bHRzIGlzIGFuIGFycmF5XG4gICAgICogY29udGFpbmluZyB0aGUgY29uY2F0ZW5hdGVkIHJlc3VsdHMgb2YgdGhlIGBpdGVyYXRlZWAgZnVuY3Rpb24uIEludm9rZWQgd2l0aFxuICAgICAqIChlcnIsIHJlc3VsdHMpLlxuICAgICAqIEByZXR1cm5zIEEgUHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgaXMgcGFzc2VkXG4gICAgICovXG4gICAgZnVuY3Rpb24gY29uY2F0U2VyaWVzKGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gY29uY2F0TGltaXQkMShjb2xsLCAxLCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuICAgIHZhciBjb25jYXRTZXJpZXMkMSA9IGF3YWl0aWZ5KGNvbmNhdFNlcmllcywgMyk7XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3aGVuIGNhbGxlZCwgY2FsbHMtYmFjayB3aXRoIHRoZSB2YWx1ZXMgcHJvdmlkZWQuXG4gICAgICogVXNlZnVsIGFzIHRoZSBmaXJzdCBmdW5jdGlvbiBpbiBhIFtgd2F0ZXJmYWxsYF17QGxpbmsgbW9kdWxlOkNvbnRyb2xGbG93LndhdGVyZmFsbH0sIG9yIGZvciBwbHVnZ2luZyB2YWx1ZXMgaW4gdG9cbiAgICAgKiBbYGF1dG9gXXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cuYXV0b30uXG4gICAgICpcbiAgICAgKiBAbmFtZSBjb25zdGFudFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOlV0aWxzXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHsuLi4qfSBhcmd1bWVudHMuLi4gLSBBbnkgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBhdXRvbWF0aWNhbGx5IGludm9rZVxuICAgICAqIGNhbGxiYWNrIHdpdGguXG4gICAgICogQHJldHVybnMge0FzeW5jRnVuY3Rpb259IFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHdoZW4gaW52b2tlZCwgYXV0b21hdGljYWxseVxuICAgICAqIGludm9rZXMgdGhlIGNhbGxiYWNrIHdpdGggdGhlIHByZXZpb3VzIGdpdmVuIGFyZ3VtZW50cy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogYXN5bmMud2F0ZXJmYWxsKFtcbiAgICAgKiAgICAgYXN5bmMuY29uc3RhbnQoNDIpLFxuICAgICAqICAgICBmdW5jdGlvbiAodmFsdWUsIG5leHQpIHtcbiAgICAgKiAgICAgICAgIC8vIHZhbHVlID09PSA0MlxuICAgICAqICAgICB9LFxuICAgICAqICAgICAvLy4uLlxuICAgICAqIF0sIGNhbGxiYWNrKTtcbiAgICAgKlxuICAgICAqIGFzeW5jLndhdGVyZmFsbChbXG4gICAgICogICAgIGFzeW5jLmNvbnN0YW50KGZpbGVuYW1lLCBcInV0ZjhcIiksXG4gICAgICogICAgIGZzLnJlYWRGaWxlLFxuICAgICAqICAgICBmdW5jdGlvbiAoZmlsZURhdGEsIG5leHQpIHtcbiAgICAgKiAgICAgICAgIC8vLi4uXG4gICAgICogICAgIH1cbiAgICAgKiAgICAgLy8uLi5cbiAgICAgKiBdLCBjYWxsYmFjayk7XG4gICAgICpcbiAgICAgKiBhc3luYy5hdXRvKHtcbiAgICAgKiAgICAgaG9zdG5hbWU6IGFzeW5jLmNvbnN0YW50KFwiaHR0cHM6Ly9zZXJ2ZXIubmV0L1wiKSxcbiAgICAgKiAgICAgcG9ydDogZmluZEZyZWVQb3J0LFxuICAgICAqICAgICBsYXVuY2hTZXJ2ZXI6IFtcImhvc3RuYW1lXCIsIFwicG9ydFwiLCBmdW5jdGlvbiAob3B0aW9ucywgY2IpIHtcbiAgICAgKiAgICAgICAgIHN0YXJ0U2VydmVyKG9wdGlvbnMsIGNiKTtcbiAgICAgKiAgICAgfV0sXG4gICAgICogICAgIC8vLi4uXG4gICAgICogfSwgY2FsbGJhY2spO1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbnN0YW50JDEoLi4uYXJncykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKC4uLmlnbm9yZWRBcmdzLyosIGNhbGxiYWNrKi8pIHtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGlnbm9yZWRBcmdzLnBvcCgpO1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIC4uLmFyZ3MpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9jcmVhdGVUZXN0ZXIoY2hlY2ssIGdldFJlc3VsdCkge1xuICAgICAgICByZXR1cm4gKGVhY2hmbiwgYXJyLCBfaXRlcmF0ZWUsIGNiKSA9PiB7XG4gICAgICAgICAgICB2YXIgdGVzdFBhc3NlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdmFyIHRlc3RSZXN1bHQ7XG4gICAgICAgICAgICBjb25zdCBpdGVyYXRlZSA9IHdyYXBBc3luYyhfaXRlcmF0ZWUpO1xuICAgICAgICAgICAgZWFjaGZuKGFyciwgKHZhbHVlLCBfLCBjYWxsYmFjaykgPT4ge1xuICAgICAgICAgICAgICAgIGl0ZXJhdGVlKHZhbHVlLCAoZXJyLCByZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVyciB8fCBlcnIgPT09IGZhbHNlKSByZXR1cm4gY2FsbGJhY2soZXJyKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hlY2socmVzdWx0KSAmJiAhdGVzdFJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGVzdFBhc3NlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXN0UmVzdWx0ID0gZ2V0UmVzdWx0KHRydWUsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsLCBicmVha0xvb3ApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCBlcnIgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpO1xuICAgICAgICAgICAgICAgIGNiKG51bGwsIHRlc3RQYXNzZWQgPyB0ZXN0UmVzdWx0IDogZ2V0UmVzdWx0KGZhbHNlKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBmaXJzdCB2YWx1ZSBpbiBgY29sbGAgdGhhdCBwYXNzZXMgYW4gYXN5bmMgdHJ1dGggdGVzdC4gVGhlXG4gICAgICogYGl0ZXJhdGVlYCBpcyBhcHBsaWVkIGluIHBhcmFsbGVsLCBtZWFuaW5nIHRoZSBmaXJzdCBpdGVyYXRlZSB0byByZXR1cm5cbiAgICAgKiBgdHJ1ZWAgd2lsbCBmaXJlIHRoZSBkZXRlY3QgYGNhbGxiYWNrYCB3aXRoIHRoYXQgcmVzdWx0LiBUaGF0IG1lYW5zIHRoZVxuICAgICAqIHJlc3VsdCBtaWdodCBub3QgYmUgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIG9yaWdpbmFsIGBjb2xsYCAoaW4gdGVybXMgb2Ygb3JkZXIpXG4gICAgICogdGhhdCBwYXNzZXMgdGhlIHRlc3QuXG5cbiAgICAgKiBJZiBvcmRlciB3aXRoaW4gdGhlIG9yaWdpbmFsIGBjb2xsYCBpcyBpbXBvcnRhbnQsIHRoZW4gbG9vayBhdFxuICAgICAqIFtgZGV0ZWN0U2VyaWVzYF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmRldGVjdFNlcmllc30uXG4gICAgICpcbiAgICAgKiBAbmFtZSBkZXRlY3RcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAYWxpYXMgZmluZFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uc1xuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBIHRydXRoIHRlc3QgdG8gYXBwbHkgdG8gZWFjaCBpdGVtIGluIGBjb2xsYC5cbiAgICAgKiBUaGUgaXRlcmF0ZWUgbXVzdCBjb21wbGV0ZSB3aXRoIGEgYm9vbGVhbiB2YWx1ZSBhcyBpdHMgcmVzdWx0LlxuICAgICAqIEludm9rZWQgd2l0aCAoaXRlbSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCBhcyBzb29uIGFzIGFueVxuICAgICAqIGl0ZXJhdGVlIHJldHVybnMgYHRydWVgLCBvciBhZnRlciBhbGwgdGhlIGBpdGVyYXRlZWAgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQuXG4gICAgICogUmVzdWx0IHdpbGwgYmUgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIGFycmF5IHRoYXQgcGFzc2VzIHRoZSB0cnV0aCB0ZXN0XG4gICAgICogKGl0ZXJhdGVlKSBvciB0aGUgdmFsdWUgYHVuZGVmaW5lZGAgaWYgbm9uZSBwYXNzZWQuIEludm9rZWQgd2l0aFxuICAgICAqIChlcnIsIHJlc3VsdCkuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgYSBjYWxsYmFjayBpcyBvbWl0dGVkXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vIGRpcjEgaXMgYSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyBmaWxlMS50eHQsIGZpbGUyLnR4dFxuICAgICAqIC8vIGRpcjIgaXMgYSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyBmaWxlMy50eHQsIGZpbGU0LnR4dFxuICAgICAqIC8vIGRpcjMgaXMgYSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyBmaWxlNS50eHRcbiAgICAgKlxuICAgICAqIC8vIGFzeW5jaHJvbm91cyBmdW5jdGlvbiB0aGF0IGNoZWNrcyBpZiBhIGZpbGUgZXhpc3RzXG4gICAgICogZnVuY3Rpb24gZmlsZUV4aXN0cyhmaWxlLCBjYWxsYmFjaykge1xuICAgICAqICAgIGZzLmFjY2VzcyhmaWxlLCBmcy5jb25zdGFudHMuRl9PSywgKGVycikgPT4ge1xuICAgICAqICAgICAgICBjYWxsYmFjayhudWxsLCAhZXJyKTtcbiAgICAgKiAgICB9KTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBhc3luYy5kZXRlY3QoWydmaWxlMy50eHQnLCdmaWxlMi50eHQnLCdkaXIxL2ZpbGUxLnR4dCddLCBmaWxlRXhpc3RzLFxuICAgICAqICAgIGZ1bmN0aW9uKGVyciwgcmVzdWx0KSB7XG4gICAgICogICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XG4gICAgICogICAgICAgIC8vIGRpcjEvZmlsZTEudHh0XG4gICAgICogICAgICAgIC8vIHJlc3VsdCBub3cgZXF1YWxzIHRoZSBmaXJzdCBmaWxlIGluIHRoZSBsaXN0IHRoYXQgZXhpc3RzXG4gICAgICogICAgfVxuICAgICAqKTtcbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIFByb21pc2VzXG4gICAgICogYXN5bmMuZGV0ZWN0KFsnZmlsZTMudHh0JywnZmlsZTIudHh0JywnZGlyMS9maWxlMS50eHQnXSwgZmlsZUV4aXN0cylcbiAgICAgKiAudGhlbihyZXN1bHQgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAvLyBkaXIxL2ZpbGUxLnR4dFxuICAgICAqICAgICAvLyByZXN1bHQgbm93IGVxdWFscyB0aGUgZmlyc3QgZmlsZSBpbiB0aGUgbGlzdCB0aGF0IGV4aXN0c1xuICAgICAqIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBhc3luYy9hd2FpdFxuICAgICAqIGFzeW5jICgpID0+IHtcbiAgICAgKiAgICAgdHJ5IHtcbiAgICAgKiAgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBhc3luYy5kZXRlY3QoWydmaWxlMy50eHQnLCdmaWxlMi50eHQnLCdkaXIxL2ZpbGUxLnR4dCddLCBmaWxlRXhpc3RzKTtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XG4gICAgICogICAgICAgICAvLyBkaXIxL2ZpbGUxLnR4dFxuICAgICAqICAgICAgICAgLy8gcmVzdWx0IG5vdyBlcXVhbHMgdGhlIGZpbGUgaW4gdGhlIGxpc3QgdGhhdCBleGlzdHNcbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICovXG4gICAgZnVuY3Rpb24gZGV0ZWN0KGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX2NyZWF0ZVRlc3Rlcihib29sID0+IGJvb2wsIChyZXMsIGl0ZW0pID0+IGl0ZW0pKGVhY2hPZiQxLCBjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuICAgIHZhciBkZXRlY3QkMSA9IGF3YWl0aWZ5KGRldGVjdCwgMyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyBbYGRldGVjdGBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5kZXRlY3R9IGJ1dCBydW5zIGEgbWF4aW11bSBvZiBgbGltaXRgIGFzeW5jIG9wZXJhdGlvbnMgYXQgYVxuICAgICAqIHRpbWUuXG4gICAgICpcbiAgICAgKiBAbmFtZSBkZXRlY3RMaW1pdFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLmRldGVjdF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmRldGVjdH1cbiAgICAgKiBAYWxpYXMgZmluZExpbWl0XG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25zXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbWl0IC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGFzeW5jIG9wZXJhdGlvbnMgYXQgYSB0aW1lLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBIHRydXRoIHRlc3QgdG8gYXBwbHkgdG8gZWFjaCBpdGVtIGluIGBjb2xsYC5cbiAgICAgKiBUaGUgaXRlcmF0ZWUgbXVzdCBjb21wbGV0ZSB3aXRoIGEgYm9vbGVhbiB2YWx1ZSBhcyBpdHMgcmVzdWx0LlxuICAgICAqIEludm9rZWQgd2l0aCAoaXRlbSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCBhcyBzb29uIGFzIGFueVxuICAgICAqIGl0ZXJhdGVlIHJldHVybnMgYHRydWVgLCBvciBhZnRlciBhbGwgdGhlIGBpdGVyYXRlZWAgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQuXG4gICAgICogUmVzdWx0IHdpbGwgYmUgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIGFycmF5IHRoYXQgcGFzc2VzIHRoZSB0cnV0aCB0ZXN0XG4gICAgICogKGl0ZXJhdGVlKSBvciB0aGUgdmFsdWUgYHVuZGVmaW5lZGAgaWYgbm9uZSBwYXNzZWQuIEludm9rZWQgd2l0aFxuICAgICAqIChlcnIsIHJlc3VsdCkuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgYSBjYWxsYmFjayBpcyBvbWl0dGVkXG4gICAgICovXG4gICAgZnVuY3Rpb24gZGV0ZWN0TGltaXQoY29sbCwgbGltaXQsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX2NyZWF0ZVRlc3Rlcihib29sID0+IGJvb2wsIChyZXMsIGl0ZW0pID0+IGl0ZW0pKGVhY2hPZkxpbWl0JDIobGltaXQpLCBjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuICAgIHZhciBkZXRlY3RMaW1pdCQxID0gYXdhaXRpZnkoZGV0ZWN0TGltaXQsIDQpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNhbWUgYXMgW2BkZXRlY3RgXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZGV0ZWN0fSBidXQgcnVucyBvbmx5IGEgc2luZ2xlIGFzeW5jIG9wZXJhdGlvbiBhdCBhIHRpbWUuXG4gICAgICpcbiAgICAgKiBAbmFtZSBkZXRlY3RTZXJpZXNcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5kZXRlY3Rde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5kZXRlY3R9XG4gICAgICogQGFsaWFzIGZpbmRTZXJpZXNcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvbnNcbiAgICAgKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfEFzeW5jSXRlcmFibGV8T2JqZWN0fSBjb2xsIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQSB0cnV0aCB0ZXN0IHRvIGFwcGx5IHRvIGVhY2ggaXRlbSBpbiBgY29sbGAuXG4gICAgICogVGhlIGl0ZXJhdGVlIG11c3QgY29tcGxldGUgd2l0aCBhIGJvb2xlYW4gdmFsdWUgYXMgaXRzIHJlc3VsdC5cbiAgICAgKiBJbnZva2VkIHdpdGggKGl0ZW0sIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgYXMgc29vbiBhcyBhbnlcbiAgICAgKiBpdGVyYXRlZSByZXR1cm5zIGB0cnVlYCwgb3IgYWZ0ZXIgYWxsIHRoZSBgaXRlcmF0ZWVgIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLlxuICAgICAqIFJlc3VsdCB3aWxsIGJlIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBhcnJheSB0aGF0IHBhc3NlcyB0aGUgdHJ1dGggdGVzdFxuICAgICAqIChpdGVyYXRlZSkgb3IgdGhlIHZhbHVlIGB1bmRlZmluZWRgIGlmIG5vbmUgcGFzc2VkLiBJbnZva2VkIHdpdGhcbiAgICAgKiAoZXJyLCByZXN1bHQpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIGEgY2FsbGJhY2sgaXMgb21pdHRlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGRldGVjdFNlcmllcyhjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9jcmVhdGVUZXN0ZXIoYm9vbCA9PiBib29sLCAocmVzLCBpdGVtKSA9PiBpdGVtKShlYWNoT2ZMaW1pdCQyKDEpLCBjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuXG4gICAgdmFyIGRldGVjdFNlcmllcyQxID0gYXdhaXRpZnkoZGV0ZWN0U2VyaWVzLCAzKTtcblxuICAgIGZ1bmN0aW9uIGNvbnNvbGVGdW5jKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIChmbiwgLi4uYXJncykgPT4gd3JhcEFzeW5jKGZuKSguLi5hcmdzLCAoZXJyLCAuLi5yZXN1bHRBcmdzKSA9PiB7XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29uc29sZS5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb25zb2xlW25hbWVdKSB7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdEFyZ3MuZm9yRWFjaCh4ID0+IGNvbnNvbGVbbmFtZV0oeCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMb2dzIHRoZSByZXN1bHQgb2YgYW4gW2Bhc3luY2AgZnVuY3Rpb25de0BsaW5rIEFzeW5jRnVuY3Rpb259IHRvIHRoZVxuICAgICAqIGBjb25zb2xlYCB1c2luZyBgY29uc29sZS5kaXJgIHRvIGRpc3BsYXkgdGhlIHByb3BlcnRpZXMgb2YgdGhlIHJlc3VsdGluZyBvYmplY3QuXG4gICAgICogT25seSB3b3JrcyBpbiBOb2RlLmpzIG9yIGluIGJyb3dzZXJzIHRoYXQgc3VwcG9ydCBgY29uc29sZS5kaXJgIGFuZFxuICAgICAqIGBjb25zb2xlLmVycm9yYCAoc3VjaCBhcyBGRiBhbmQgQ2hyb21lKS5cbiAgICAgKiBJZiBtdWx0aXBsZSBhcmd1bWVudHMgYXJlIHJldHVybmVkIGZyb20gdGhlIGFzeW5jIGZ1bmN0aW9uLFxuICAgICAqIGBjb25zb2xlLmRpcmAgaXMgY2FsbGVkIG9uIGVhY2ggYXJndW1lbnQgaW4gb3JkZXIuXG4gICAgICpcbiAgICAgKiBAbmFtZSBkaXJcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpVdGlsc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gZnVuY3Rpb24gLSBUaGUgZnVuY3Rpb24geW91IHdhbnQgdG8gZXZlbnR1YWxseSBhcHBseVxuICAgICAqIGFsbCBhcmd1bWVudHMgdG8uXG4gICAgICogQHBhcmFtIHsuLi4qfSBhcmd1bWVudHMuLi4gLSBBbnkgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBhcHBseSB0byB0aGUgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vIGluIGEgbW9kdWxlXG4gICAgICogdmFyIGhlbGxvID0gZnVuY3Rpb24obmFtZSwgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsIHtoZWxsbzogbmFtZX0pO1xuICAgICAqICAgICB9LCAxMDAwKTtcbiAgICAgKiB9O1xuICAgICAqXG4gICAgICogLy8gaW4gdGhlIG5vZGUgcmVwbFxuICAgICAqIG5vZGU+IGFzeW5jLmRpcihoZWxsbywgJ3dvcmxkJyk7XG4gICAgICoge2hlbGxvOiAnd29ybGQnfVxuICAgICAqL1xuICAgIHZhciBkaXIgPSBjb25zb2xlRnVuYygnZGlyJyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcG9zdC1jaGVjayB2ZXJzaW9uIG9mIFtgd2hpbHN0YF17QGxpbmsgbW9kdWxlOkNvbnRyb2xGbG93LndoaWxzdH0uIFRvIHJlZmxlY3QgdGhlIGRpZmZlcmVuY2UgaW5cbiAgICAgKiB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucywgdGhlIGFyZ3VtZW50cyBgdGVzdGAgYW5kIGBpdGVyYXRlZWAgYXJlIHN3aXRjaGVkLlxuICAgICAqXG4gICAgICogYGRvV2hpbHN0YCBpcyB0byBgd2hpbHN0YCBhcyBgZG8gd2hpbGVgIGlzIHRvIGB3aGlsZWAgaW4gcGxhaW4gSmF2YVNjcmlwdC5cbiAgICAgKlxuICAgICAqIEBuYW1lIGRvV2hpbHN0XG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMud2hpbHN0XXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cud2hpbHN0fVxuICAgICAqIEBjYXRlZ29yeSBDb250cm9sIEZsb3dcbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQSBmdW5jdGlvbiB3aGljaCBpcyBjYWxsZWQgZWFjaCB0aW1lIGB0ZXN0YFxuICAgICAqIHBhc3Nlcy4gSW52b2tlZCB3aXRoIChjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSB0ZXN0IC0gYXN5bmNocm9ub3VzIHRydXRoIHRlc3QgdG8gcGVyZm9ybSBhZnRlciBlYWNoXG4gICAgICogZXhlY3V0aW9uIG9mIGBpdGVyYXRlZWAuIEludm9rZWQgd2l0aCAoLi4uYXJncywgY2FsbGJhY2spLCB3aGVyZSBgLi4uYXJnc2AgYXJlIHRoZVxuICAgICAqIG5vbi1lcnJvciBhcmdzIGZyb20gdGhlIHByZXZpb3VzIGNhbGxiYWNrIG9mIGBpdGVyYXRlZWAuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIGFmdGVyIHRoZSB0ZXN0XG4gICAgICogZnVuY3Rpb24gaGFzIGZhaWxlZCBhbmQgcmVwZWF0ZWQgZXhlY3V0aW9uIG9mIGBpdGVyYXRlZWAgaGFzIHN0b3BwZWQuXG4gICAgICogYGNhbGxiYWNrYCB3aWxsIGJlIHBhc3NlZCBhbiBlcnJvciBhbmQgYW55IGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIGZpbmFsXG4gICAgICogYGl0ZXJhdGVlYCdzIGNhbGxiYWNrLiBJbnZva2VkIHdpdGggKGVyciwgW3Jlc3VsdHNdKTtcbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBpcyBwYXNzZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBkb1doaWxzdChpdGVyYXRlZSwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBvbmx5T25jZShjYWxsYmFjayk7XG4gICAgICAgIHZhciBfZm4gPSB3cmFwQXN5bmMoaXRlcmF0ZWUpO1xuICAgICAgICB2YXIgX3Rlc3QgPSB3cmFwQXN5bmModGVzdCk7XG4gICAgICAgIHZhciByZXN1bHRzO1xuXG4gICAgICAgIGZ1bmN0aW9uIG5leHQoZXJyLCAuLi5hcmdzKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIGlmIChlcnIgPT09IGZhbHNlKSByZXR1cm47XG4gICAgICAgICAgICByZXN1bHRzID0gYXJncztcbiAgICAgICAgICAgIF90ZXN0KC4uLmFyZ3MsIGNoZWNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGNoZWNrKGVyciwgdHJ1dGgpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgaWYgKGVyciA9PT0gZmFsc2UpIHJldHVybjtcbiAgICAgICAgICAgIGlmICghdHJ1dGgpIHJldHVybiBjYWxsYmFjayhudWxsLCAuLi5yZXN1bHRzKTtcbiAgICAgICAgICAgIF9mbihuZXh0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjaGVjayhudWxsLCB0cnVlKTtcbiAgICB9XG5cbiAgICB2YXIgZG9XaGlsc3QkMSA9IGF3YWl0aWZ5KGRvV2hpbHN0LCAzKTtcblxuICAgIC8qKlxuICAgICAqIExpa2UgWydkb1doaWxzdCdde0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy5kb1doaWxzdH0sIGV4Y2VwdCB0aGUgYHRlc3RgIGlzIGludmVydGVkLiBOb3RlIHRoZVxuICAgICAqIGFyZ3VtZW50IG9yZGVyaW5nIGRpZmZlcnMgZnJvbSBgdW50aWxgLlxuICAgICAqXG4gICAgICogQG5hbWUgZG9VbnRpbFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbnRyb2xGbG93XG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLmRvV2hpbHN0XXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cuZG9XaGlsc3R9XG4gICAgICogQGNhdGVnb3J5IENvbnRyb2wgRmxvd1xuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBbiBhc3luYyBmdW5jdGlvbiB3aGljaCBpcyBjYWxsZWQgZWFjaCB0aW1lXG4gICAgICogYHRlc3RgIGZhaWxzLiBJbnZva2VkIHdpdGggKGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IHRlc3QgLSBhc3luY2hyb25vdXMgdHJ1dGggdGVzdCB0byBwZXJmb3JtIGFmdGVyIGVhY2hcbiAgICAgKiBleGVjdXRpb24gb2YgYGl0ZXJhdGVlYC4gSW52b2tlZCB3aXRoICguLi5hcmdzLCBjYWxsYmFjayksIHdoZXJlIGAuLi5hcmdzYCBhcmUgdGhlXG4gICAgICogbm9uLWVycm9yIGFyZ3MgZnJvbSB0aGUgcHJldmlvdXMgY2FsbGJhY2sgb2YgYGl0ZXJhdGVlYFxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCBhZnRlciB0aGUgdGVzdFxuICAgICAqIGZ1bmN0aW9uIGhhcyBwYXNzZWQgYW5kIHJlcGVhdGVkIGV4ZWN1dGlvbiBvZiBgaXRlcmF0ZWVgIGhhcyBzdG9wcGVkLiBgY2FsbGJhY2tgXG4gICAgICogd2lsbCBiZSBwYXNzZWQgYW4gZXJyb3IgYW5kIGFueSBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBmaW5hbCBgaXRlcmF0ZWVgJ3NcbiAgICAgKiBjYWxsYmFjay4gSW52b2tlZCB3aXRoIChlcnIsIFtyZXN1bHRzXSk7XG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgaXMgcGFzc2VkXG4gICAgICovXG4gICAgZnVuY3Rpb24gZG9VbnRpbChpdGVyYXRlZSwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgY29uc3QgX3Rlc3QgPSB3cmFwQXN5bmModGVzdCk7XG4gICAgICAgIHJldHVybiBkb1doaWxzdCQxKGl0ZXJhdGVlLCAoLi4uYXJncykgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2IgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgX3Rlc3QoLi4uYXJncywgKGVyciwgdHJ1dGgpID0+IGNiIChlcnIsICF0cnV0aCkpO1xuICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3dpdGhvdXRJbmRleChpdGVyYXRlZSkge1xuICAgICAgICByZXR1cm4gKHZhbHVlLCBpbmRleCwgY2FsbGJhY2spID0+IGl0ZXJhdGVlKHZhbHVlLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQXBwbGllcyB0aGUgZnVuY3Rpb24gYGl0ZXJhdGVlYCB0byBlYWNoIGl0ZW0gaW4gYGNvbGxgLCBpbiBwYXJhbGxlbC5cbiAgICAgKiBUaGUgYGl0ZXJhdGVlYCBpcyBjYWxsZWQgd2l0aCBhbiBpdGVtIGZyb20gdGhlIGxpc3QsIGFuZCBhIGNhbGxiYWNrIGZvciB3aGVuXG4gICAgICogaXQgaGFzIGZpbmlzaGVkLiBJZiB0aGUgYGl0ZXJhdGVlYCBwYXNzZXMgYW4gZXJyb3IgdG8gaXRzIGBjYWxsYmFja2AsIHRoZVxuICAgICAqIG1haW4gYGNhbGxiYWNrYCAoZm9yIHRoZSBgZWFjaGAgZnVuY3Rpb24pIGlzIGltbWVkaWF0ZWx5IGNhbGxlZCB3aXRoIHRoZVxuICAgICAqIGVycm9yLlxuICAgICAqXG4gICAgICogTm90ZSwgdGhhdCBzaW5jZSB0aGlzIGZ1bmN0aW9uIGFwcGxpZXMgYGl0ZXJhdGVlYCB0byBlYWNoIGl0ZW0gaW4gcGFyYWxsZWwsXG4gICAgICogdGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgdGhlIGl0ZXJhdGVlIGZ1bmN0aW9ucyB3aWxsIGNvbXBsZXRlIGluIG9yZGVyLlxuICAgICAqXG4gICAgICogQG5hbWUgZWFjaFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBhbGlhcyBmb3JFYWNoXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfEFzeW5jSXRlcmFibGV8T2JqZWN0fSBjb2xsIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQW4gYXN5bmMgZnVuY3Rpb24gdG8gYXBwbHkgdG9cbiAgICAgKiBlYWNoIGl0ZW0gaW4gYGNvbGxgLiBJbnZva2VkIHdpdGggKGl0ZW0sIGNhbGxiYWNrKS5cbiAgICAgKiBUaGUgYXJyYXkgaW5kZXggaXMgbm90IHBhc3NlZCB0byB0aGUgaXRlcmF0ZWUuXG4gICAgICogSWYgeW91IG5lZWQgdGhlIGluZGV4LCB1c2UgYGVhY2hPZmAuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIHdoZW4gYWxsXG4gICAgICogYGl0ZXJhdGVlYCBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZCwgb3IgYW4gZXJyb3Igb2NjdXJzLiBJbnZva2VkIHdpdGggKGVycikuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgYSBjYWxsYmFjayBpcyBvbWl0dGVkXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vIGRpcjEgaXMgYSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyBmaWxlMS50eHQsIGZpbGUyLnR4dFxuICAgICAqIC8vIGRpcjIgaXMgYSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyBmaWxlMy50eHQsIGZpbGU0LnR4dFxuICAgICAqIC8vIGRpcjMgaXMgYSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyBmaWxlNS50eHRcbiAgICAgKiAvLyBkaXI0IGRvZXMgbm90IGV4aXN0XG4gICAgICpcbiAgICAgKiBjb25zdCBmaWxlTGlzdCA9IFsgJ2RpcjEvZmlsZTIudHh0JywgJ2RpcjIvZmlsZTMudHh0JywgJ2Rpci9maWxlNS50eHQnXTtcbiAgICAgKiBjb25zdCB3aXRoTWlzc2luZ0ZpbGVMaXN0ID0gWydkaXIxL2ZpbGUxLnR4dCcsICdkaXI0L2ZpbGUyLnR4dCddO1xuICAgICAqXG4gICAgICogLy8gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRoYXQgZGVsZXRlcyBhIGZpbGVcbiAgICAgKiBjb25zdCBkZWxldGVGaWxlID0gZnVuY3Rpb24oZmlsZSwgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgZnMudW5saW5rKGZpbGUsIGNhbGxiYWNrKTtcbiAgICAgKiB9O1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgY2FsbGJhY2tzXG4gICAgICogYXN5bmMuZWFjaChmaWxlTGlzdCwgZGVsZXRlRmlsZSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICogICAgIGlmKCBlcnIgKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9IGVsc2Uge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coJ0FsbCBmaWxlcyBoYXZlIGJlZW4gZGVsZXRlZCBzdWNjZXNzZnVsbHknKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gRXJyb3IgSGFuZGxpbmdcbiAgICAgKiBhc3luYy5lYWNoKHdpdGhNaXNzaW5nRmlsZUxpc3QsIGRlbGV0ZUZpbGUsIGZ1bmN0aW9uKGVycil7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgIC8vIFsgRXJyb3I6IEVOT0VOVDogbm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSBdXG4gICAgICogICAgIC8vIHNpbmNlIGRpcjQvZmlsZTIudHh0IGRvZXMgbm90IGV4aXN0XG4gICAgICogICAgIC8vIGRpcjEvZmlsZTEudHh0IGNvdWxkIGhhdmUgYmVlbiBkZWxldGVkXG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBQcm9taXNlc1xuICAgICAqIGFzeW5jLmVhY2goZmlsZUxpc3QsIGRlbGV0ZUZpbGUpXG4gICAgICogLnRoZW4oICgpID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coJ0FsbCBmaWxlcyBoYXZlIGJlZW4gZGVsZXRlZCBzdWNjZXNzZnVsbHknKTtcbiAgICAgKiB9KS5jYXRjaCggZXJyID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIEVycm9yIEhhbmRsaW5nXG4gICAgICogYXN5bmMuZWFjaChmaWxlTGlzdCwgZGVsZXRlRmlsZSlcbiAgICAgKiAudGhlbiggKCkgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZygnQWxsIGZpbGVzIGhhdmUgYmVlbiBkZWxldGVkIHN1Y2Nlc3NmdWxseScpO1xuICAgICAqIH0pLmNhdGNoKCBlcnIgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICAvLyBbIEVycm9yOiBFTk9FTlQ6IG5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkgXVxuICAgICAqICAgICAvLyBzaW5jZSBkaXI0L2ZpbGUyLnR4dCBkb2VzIG5vdCBleGlzdFxuICAgICAqICAgICAvLyBkaXIxL2ZpbGUxLnR4dCBjb3VsZCBoYXZlIGJlZW4gZGVsZXRlZFxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgYXN5bmMvYXdhaXRcbiAgICAgKiBhc3luYyAoKSA9PiB7XG4gICAgICogICAgIHRyeSB7XG4gICAgICogICAgICAgICBhd2FpdCBhc3luYy5lYWNoKGZpbGVzLCBkZWxldGVGaWxlKTtcbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICogLy8gRXJyb3IgSGFuZGxpbmdcbiAgICAgKiBhc3luYyAoKSA9PiB7XG4gICAgICogICAgIHRyeSB7XG4gICAgICogICAgICAgICBhd2FpdCBhc3luYy5lYWNoKHdpdGhNaXNzaW5nRmlsZUxpc3QsIGRlbGV0ZUZpbGUpO1xuICAgICAqICAgICB9XG4gICAgICogICAgIGNhdGNoIChlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgICAgICAvLyBbIEVycm9yOiBFTk9FTlQ6IG5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkgXVxuICAgICAqICAgICAgICAgLy8gc2luY2UgZGlyNC9maWxlMi50eHQgZG9lcyBub3QgZXhpc3RcbiAgICAgKiAgICAgICAgIC8vIGRpcjEvZmlsZTEudHh0IGNvdWxkIGhhdmUgYmVlbiBkZWxldGVkXG4gICAgICogICAgIH1cbiAgICAgKiB9XG4gICAgICpcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBlYWNoTGltaXQkMihjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGVhY2hPZiQxKGNvbGwsIF93aXRob3V0SW5kZXgod3JhcEFzeW5jKGl0ZXJhdGVlKSksIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICB2YXIgZWFjaCA9IGF3YWl0aWZ5KGVhY2hMaW1pdCQyLCAzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzYW1lIGFzIFtgZWFjaGBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5lYWNofSBidXQgcnVucyBhIG1heGltdW0gb2YgYGxpbWl0YCBhc3luYyBvcGVyYXRpb25zIGF0IGEgdGltZS5cbiAgICAgKlxuICAgICAqIEBuYW1lIGVhY2hMaW1pdFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLmVhY2hde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5lYWNofVxuICAgICAqIEBhbGlhcyBmb3JFYWNoTGltaXRcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW1pdCAtIFRoZSBtYXhpbXVtIG51bWJlciBvZiBhc3luYyBvcGVyYXRpb25zIGF0IGEgdGltZS5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQW4gYXN5bmMgZnVuY3Rpb24gdG8gYXBwbHkgdG8gZWFjaCBpdGVtIGluXG4gICAgICogYGNvbGxgLlxuICAgICAqIFRoZSBhcnJheSBpbmRleCBpcyBub3QgcGFzc2VkIHRvIHRoZSBpdGVyYXRlZS5cbiAgICAgKiBJZiB5b3UgbmVlZCB0aGUgaW5kZXgsIHVzZSBgZWFjaE9mTGltaXRgLlxuICAgICAqIEludm9rZWQgd2l0aCAoaXRlbSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCB3aGVuIGFsbFxuICAgICAqIGBpdGVyYXRlZWAgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQsIG9yIGFuIGVycm9yIG9jY3Vycy4gSW52b2tlZCB3aXRoIChlcnIpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIGEgY2FsbGJhY2sgaXMgb21pdHRlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGVhY2hMaW1pdChjb2xsLCBsaW1pdCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBlYWNoT2ZMaW1pdCQyKGxpbWl0KShjb2xsLCBfd2l0aG91dEluZGV4KHdyYXBBc3luYyhpdGVyYXRlZSkpLCBjYWxsYmFjayk7XG4gICAgfVxuICAgIHZhciBlYWNoTGltaXQkMSA9IGF3YWl0aWZ5KGVhY2hMaW1pdCwgNCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyBbYGVhY2hgXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZWFjaH0gYnV0IHJ1bnMgb25seSBhIHNpbmdsZSBhc3luYyBvcGVyYXRpb24gYXQgYSB0aW1lLlxuICAgICAqXG4gICAgICogTm90ZSwgdGhhdCB1bmxpa2UgW2BlYWNoYF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmVhY2h9LCB0aGlzIGZ1bmN0aW9uIGFwcGxpZXMgaXRlcmF0ZWUgdG8gZWFjaCBpdGVtXG4gICAgICogaW4gc2VyaWVzIGFuZCB0aGVyZWZvcmUgdGhlIGl0ZXJhdGVlIGZ1bmN0aW9ucyB3aWxsIGNvbXBsZXRlIGluIG9yZGVyLlxuXG4gICAgICogQG5hbWUgZWFjaFNlcmllc1xuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLmVhY2hde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5lYWNofVxuICAgICAqIEBhbGlhcyBmb3JFYWNoU2VyaWVzXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfEFzeW5jSXRlcmFibGV8T2JqZWN0fSBjb2xsIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQW4gYXN5bmMgZnVuY3Rpb24gdG8gYXBwbHkgdG8gZWFjaFxuICAgICAqIGl0ZW0gaW4gYGNvbGxgLlxuICAgICAqIFRoZSBhcnJheSBpbmRleCBpcyBub3QgcGFzc2VkIHRvIHRoZSBpdGVyYXRlZS5cbiAgICAgKiBJZiB5b3UgbmVlZCB0aGUgaW5kZXgsIHVzZSBgZWFjaE9mU2VyaWVzYC5cbiAgICAgKiBJbnZva2VkIHdpdGggKGl0ZW0sIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgd2hlbiBhbGxcbiAgICAgKiBgaXRlcmF0ZWVgIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLCBvciBhbiBlcnJvciBvY2N1cnMuIEludm9rZWQgd2l0aCAoZXJyKS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBhIGNhbGxiYWNrIGlzIG9taXR0ZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBlYWNoU2VyaWVzKGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gZWFjaExpbWl0JDEoY29sbCwgMSwgaXRlcmF0ZWUsIGNhbGxiYWNrKVxuICAgIH1cbiAgICB2YXIgZWFjaFNlcmllcyQxID0gYXdhaXRpZnkoZWFjaFNlcmllcywgMyk7XG5cbiAgICAvKipcbiAgICAgKiBXcmFwIGFuIGFzeW5jIGZ1bmN0aW9uIGFuZCBlbnN1cmUgaXQgY2FsbHMgaXRzIGNhbGxiYWNrIG9uIGEgbGF0ZXIgdGljayBvZlxuICAgICAqIHRoZSBldmVudCBsb29wLiAgSWYgdGhlIGZ1bmN0aW9uIGFscmVhZHkgY2FsbHMgaXRzIGNhbGxiYWNrIG9uIGEgbmV4dCB0aWNrLFxuICAgICAqIG5vIGV4dHJhIGRlZmVycmFsIGlzIGFkZGVkLiBUaGlzIGlzIHVzZWZ1bCBmb3IgcHJldmVudGluZyBzdGFjayBvdmVyZmxvd3NcbiAgICAgKiAoYFJhbmdlRXJyb3I6IE1heGltdW0gY2FsbCBzdGFjayBzaXplIGV4Y2VlZGVkYCkgYW5kIGdlbmVyYWxseSBrZWVwaW5nXG4gICAgICogW1phbGdvXShodHRwOi8vYmxvZy5penMubWUvcG9zdC81OTE0Mjc0MjE0My9kZXNpZ25pbmctYXBpcy1mb3ItYXN5bmNocm9ueSlcbiAgICAgKiBjb250YWluZWQuIEVTMjAxNyBgYXN5bmNgIGZ1bmN0aW9ucyBhcmUgcmV0dXJuZWQgYXMtaXMgLS0gdGhleSBhcmUgaW1tdW5lXG4gICAgICogdG8gWmFsZ28ncyBjb3JydXB0aW5nIGluZmx1ZW5jZXMsIGFzIHRoZXkgYWx3YXlzIHJlc29sdmUgb24gYSBsYXRlciB0aWNrLlxuICAgICAqXG4gICAgICogQG5hbWUgZW5zdXJlQXN5bmNcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpVdGlsc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gZm4gLSBhbiBhc3luYyBmdW5jdGlvbiwgb25lIHRoYXQgZXhwZWN0cyBhIG5vZGUtc3R5bGVcbiAgICAgKiBjYWxsYmFjayBhcyBpdHMgbGFzdCBhcmd1bWVudC5cbiAgICAgKiBAcmV0dXJucyB7QXN5bmNGdW5jdGlvbn0gUmV0dXJucyBhIHdyYXBwZWQgZnVuY3Rpb24gd2l0aCB0aGUgZXhhY3Qgc2FtZSBjYWxsXG4gICAgICogc2lnbmF0dXJlIGFzIHRoZSBmdW5jdGlvbiBwYXNzZWQgaW4uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIHNvbWV0aW1lc0FzeW5jKGFyZywgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgaWYgKGNhY2hlW2FyZ10pIHtcbiAgICAgKiAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsLCBjYWNoZVthcmddKTsgLy8gdGhpcyB3b3VsZCBiZSBzeW5jaHJvbm91cyEhXG4gICAgICogICAgIH0gZWxzZSB7XG4gICAgICogICAgICAgICBkb1NvbWVJTyhhcmcsIGNhbGxiYWNrKTsgLy8gdGhpcyBJTyB3b3VsZCBiZSBhc3luY2hyb25vdXNcbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIC8vIHRoaXMgaGFzIGEgcmlzayBvZiBzdGFjayBvdmVyZmxvd3MgaWYgbWFueSByZXN1bHRzIGFyZSBjYWNoZWQgaW4gYSByb3dcbiAgICAgKiBhc3luYy5tYXBTZXJpZXMoYXJncywgc29tZXRpbWVzQXN5bmMsIGRvbmUpO1xuICAgICAqXG4gICAgICogLy8gdGhpcyB3aWxsIGRlZmVyIHNvbWV0aW1lc0FzeW5jJ3MgY2FsbGJhY2sgaWYgbmVjZXNzYXJ5LFxuICAgICAqIC8vIHByZXZlbnRpbmcgc3RhY2sgb3ZlcmZsb3dzXG4gICAgICogYXN5bmMubWFwU2VyaWVzKGFyZ3MsIGFzeW5jLmVuc3VyZUFzeW5jKHNvbWV0aW1lc0FzeW5jKSwgZG9uZSk7XG4gICAgICovXG4gICAgZnVuY3Rpb24gZW5zdXJlQXN5bmMoZm4pIHtcbiAgICAgICAgaWYgKGlzQXN5bmMoZm4pKSByZXR1cm4gZm47XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoLi4uYXJncy8qLCBjYWxsYmFjayovKSB7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgdmFyIHN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgYXJncy5wdXNoKCguLi5pbm5lckFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoc3luYykge1xuICAgICAgICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUkMSgoKSA9PiBjYWxsYmFjayguLi5pbm5lckFyZ3MpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayguLi5pbm5lckFyZ3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICBzeW5jID0gZmFsc2U7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBgdHJ1ZWAgaWYgZXZlcnkgZWxlbWVudCBpbiBgY29sbGAgc2F0aXNmaWVzIGFuIGFzeW5jIHRlc3QuIElmIGFueVxuICAgICAqIGl0ZXJhdGVlIGNhbGwgcmV0dXJucyBgZmFsc2VgLCB0aGUgbWFpbiBgY2FsbGJhY2tgIGlzIGltbWVkaWF0ZWx5IGNhbGxlZC5cbiAgICAgKlxuICAgICAqIEBuYW1lIGV2ZXJ5XG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGFsaWFzIGFsbFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEFuIGFzeW5jIHRydXRoIHRlc3QgdG8gYXBwbHkgdG8gZWFjaCBpdGVtXG4gICAgICogaW4gdGhlIGNvbGxlY3Rpb24gaW4gcGFyYWxsZWwuXG4gICAgICogVGhlIGl0ZXJhdGVlIG11c3QgY29tcGxldGUgd2l0aCBhIGJvb2xlYW4gcmVzdWx0IHZhbHVlLlxuICAgICAqIEludm9rZWQgd2l0aCAoaXRlbSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCBhZnRlciBhbGwgdGhlXG4gICAgICogYGl0ZXJhdGVlYCBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZC4gUmVzdWx0IHdpbGwgYmUgZWl0aGVyIGB0cnVlYCBvciBgZmFsc2VgXG4gICAgICogZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZXMgb2YgdGhlIGFzeW5jIHRlc3RzLiBJbnZva2VkIHdpdGggKGVyciwgcmVzdWx0KS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBwcm92aWRlZFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBkaXIxIGlzIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgZmlsZTEudHh0LCBmaWxlMi50eHRcbiAgICAgKiAvLyBkaXIyIGlzIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgZmlsZTMudHh0LCBmaWxlNC50eHRcbiAgICAgKiAvLyBkaXIzIGlzIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgZmlsZTUudHh0XG4gICAgICogLy8gZGlyNCBkb2VzIG5vdCBleGlzdFxuICAgICAqXG4gICAgICogY29uc3QgZmlsZUxpc3QgPSBbJ2RpcjEvZmlsZTEudHh0JywnZGlyMi9maWxlMy50eHQnLCdkaXIzL2ZpbGU1LnR4dCddO1xuICAgICAqIGNvbnN0IHdpdGhNaXNzaW5nRmlsZUxpc3QgPSBbJ2ZpbGUxLnR4dCcsJ2ZpbGUyLnR4dCcsJ2ZpbGU0LnR4dCddO1xuICAgICAqXG4gICAgICogLy8gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIGlmIGEgZmlsZSBleGlzdHNcbiAgICAgKiBmdW5jdGlvbiBmaWxlRXhpc3RzKGZpbGUsIGNhbGxiYWNrKSB7XG4gICAgICogICAgZnMuYWNjZXNzKGZpbGUsIGZzLmNvbnN0YW50cy5GX09LLCAoZXJyKSA9PiB7XG4gICAgICogICAgICAgIGNhbGxiYWNrKG51bGwsICFlcnIpO1xuICAgICAqICAgIH0pO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIGNhbGxiYWNrc1xuICAgICAqIGFzeW5jLmV2ZXJ5KGZpbGVMaXN0LCBmaWxlRXhpc3RzLCBmdW5jdGlvbihlcnIsIHJlc3VsdCkge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAvLyB0cnVlXG4gICAgICogICAgIC8vIHJlc3VsdCBpcyB0cnVlIHNpbmNlIGV2ZXJ5IGZpbGUgZXhpc3RzXG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiBhc3luYy5ldmVyeSh3aXRoTWlzc2luZ0ZpbGVMaXN0LCBmaWxlRXhpc3RzLCBmdW5jdGlvbihlcnIsIHJlc3VsdCkge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAvLyBmYWxzZVxuICAgICAqICAgICAvLyByZXN1bHQgaXMgZmFsc2Ugc2luY2UgTk9UIGV2ZXJ5IGZpbGUgZXhpc3RzXG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBQcm9taXNlc1xuICAgICAqIGFzeW5jLmV2ZXJ5KGZpbGVMaXN0LCBmaWxlRXhpc3RzKVxuICAgICAqIC50aGVuKCByZXN1bHQgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAvLyB0cnVlXG4gICAgICogICAgIC8vIHJlc3VsdCBpcyB0cnVlIHNpbmNlIGV2ZXJ5IGZpbGUgZXhpc3RzXG4gICAgICogfSkuY2F0Y2goIGVyciA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiBhc3luYy5ldmVyeSh3aXRoTWlzc2luZ0ZpbGVMaXN0LCBmaWxlRXhpc3RzKVxuICAgICAqIC50aGVuKCByZXN1bHQgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAvLyBmYWxzZVxuICAgICAqICAgICAvLyByZXN1bHQgaXMgZmFsc2Ugc2luY2UgTk9UIGV2ZXJ5IGZpbGUgZXhpc3RzXG4gICAgICogfSkuY2F0Y2goIGVyciA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBhc3luYy9hd2FpdFxuICAgICAqIGFzeW5jICgpID0+IHtcbiAgICAgKiAgICAgdHJ5IHtcbiAgICAgKiAgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBhc3luYy5ldmVyeShmaWxlTGlzdCwgZmlsZUV4aXN0cyk7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAgICAgLy8gdHJ1ZVxuICAgICAqICAgICAgICAgLy8gcmVzdWx0IGlzIHRydWUgc2luY2UgZXZlcnkgZmlsZSBleGlzdHNcbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICogYXN5bmMgKCkgPT4ge1xuICAgICAqICAgICB0cnkge1xuICAgICAqICAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IGFzeW5jLmV2ZXJ5KHdpdGhNaXNzaW5nRmlsZUxpc3QsIGZpbGVFeGlzdHMpO1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgICAgIC8vIGZhbHNlXG4gICAgICogICAgICAgICAvLyByZXN1bHQgaXMgZmFsc2Ugc2luY2UgTk9UIGV2ZXJ5IGZpbGUgZXhpc3RzXG4gICAgICogICAgIH1cbiAgICAgKiAgICAgY2F0Y2ggKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGV2ZXJ5KGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX2NyZWF0ZVRlc3Rlcihib29sID0+ICFib29sLCByZXMgPT4gIXJlcykoZWFjaE9mJDEsIGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaylcbiAgICB9XG4gICAgdmFyIGV2ZXJ5JDEgPSBhd2FpdGlmeShldmVyeSwgMyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyBbYGV2ZXJ5YF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmV2ZXJ5fSBidXQgcnVucyBhIG1heGltdW0gb2YgYGxpbWl0YCBhc3luYyBvcGVyYXRpb25zIGF0IGEgdGltZS5cbiAgICAgKlxuICAgICAqIEBuYW1lIGV2ZXJ5TGltaXRcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5ldmVyeV17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmV2ZXJ5fVxuICAgICAqIEBhbGlhcyBhbGxMaW1pdFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbWl0IC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGFzeW5jIG9wZXJhdGlvbnMgYXQgYSB0aW1lLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBbiBhc3luYyB0cnV0aCB0ZXN0IHRvIGFwcGx5IHRvIGVhY2ggaXRlbVxuICAgICAqIGluIHRoZSBjb2xsZWN0aW9uIGluIHBhcmFsbGVsLlxuICAgICAqIFRoZSBpdGVyYXRlZSBtdXN0IGNvbXBsZXRlIHdpdGggYSBib29sZWFuIHJlc3VsdCB2YWx1ZS5cbiAgICAgKiBJbnZva2VkIHdpdGggKGl0ZW0sIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgYWZ0ZXIgYWxsIHRoZVxuICAgICAqIGBpdGVyYXRlZWAgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQuIFJlc3VsdCB3aWxsIGJlIGVpdGhlciBgdHJ1ZWAgb3IgYGZhbHNlYFxuICAgICAqIGRlcGVuZGluZyBvbiB0aGUgdmFsdWVzIG9mIHRoZSBhc3luYyB0ZXN0cy4gSW52b2tlZCB3aXRoIChlcnIsIHJlc3VsdCkuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgcHJvdmlkZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBldmVyeUxpbWl0KGNvbGwsIGxpbWl0LCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9jcmVhdGVUZXN0ZXIoYm9vbCA9PiAhYm9vbCwgcmVzID0+ICFyZXMpKGVhY2hPZkxpbWl0JDIobGltaXQpLCBjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuICAgIHZhciBldmVyeUxpbWl0JDEgPSBhd2FpdGlmeShldmVyeUxpbWl0LCA0KTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzYW1lIGFzIFtgZXZlcnlgXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZXZlcnl9IGJ1dCBydW5zIG9ubHkgYSBzaW5nbGUgYXN5bmMgb3BlcmF0aW9uIGF0IGEgdGltZS5cbiAgICAgKlxuICAgICAqIEBuYW1lIGV2ZXJ5U2VyaWVzXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMuZXZlcnlde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5ldmVyeX1cbiAgICAgKiBAYWxpYXMgYWxsU2VyaWVzXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfEFzeW5jSXRlcmFibGV8T2JqZWN0fSBjb2xsIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQW4gYXN5bmMgdHJ1dGggdGVzdCB0byBhcHBseSB0byBlYWNoIGl0ZW1cbiAgICAgKiBpbiB0aGUgY29sbGVjdGlvbiBpbiBzZXJpZXMuXG4gICAgICogVGhlIGl0ZXJhdGVlIG11c3QgY29tcGxldGUgd2l0aCBhIGJvb2xlYW4gcmVzdWx0IHZhbHVlLlxuICAgICAqIEludm9rZWQgd2l0aCAoaXRlbSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCBhZnRlciBhbGwgdGhlXG4gICAgICogYGl0ZXJhdGVlYCBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZC4gUmVzdWx0IHdpbGwgYmUgZWl0aGVyIGB0cnVlYCBvciBgZmFsc2VgXG4gICAgICogZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZXMgb2YgdGhlIGFzeW5jIHRlc3RzLiBJbnZva2VkIHdpdGggKGVyciwgcmVzdWx0KS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBwcm92aWRlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGV2ZXJ5U2VyaWVzKGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX2NyZWF0ZVRlc3Rlcihib29sID0+ICFib29sLCByZXMgPT4gIXJlcykoZWFjaE9mU2VyaWVzJDEsIGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaylcbiAgICB9XG4gICAgdmFyIGV2ZXJ5U2VyaWVzJDEgPSBhd2FpdGlmeShldmVyeVNlcmllcywgMyk7XG5cbiAgICBmdW5jdGlvbiBmaWx0ZXJBcnJheShlYWNoZm4sIGFyciwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciB0cnV0aFZhbHVlcyA9IG5ldyBBcnJheShhcnIubGVuZ3RoKTtcbiAgICAgICAgZWFjaGZuKGFyciwgKHgsIGluZGV4LCBpdGVyQ2IpID0+IHtcbiAgICAgICAgICAgIGl0ZXJhdGVlKHgsIChlcnIsIHYpID0+IHtcbiAgICAgICAgICAgICAgICB0cnV0aFZhbHVlc1tpbmRleF0gPSAhIXY7XG4gICAgICAgICAgICAgICAgaXRlckNiKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZXJyID0+IHtcbiAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRydXRoVmFsdWVzW2ldKSByZXN1bHRzLnB1c2goYXJyW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdHMpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmaWx0ZXJHZW5lcmljKGVhY2hmbiwgY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIGVhY2hmbihjb2xsLCAoeCwgaW5kZXgsIGl0ZXJDYikgPT4ge1xuICAgICAgICAgICAgaXRlcmF0ZWUoeCwgKGVyciwgdikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBpdGVyQ2IoZXJyKTtcbiAgICAgICAgICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goe2luZGV4LCB2YWx1ZTogeH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpdGVyQ2IoZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBlcnIgPT4ge1xuICAgICAgICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXN1bHRzXG4gICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEuaW5kZXggLSBiLmluZGV4KVxuICAgICAgICAgICAgICAgIC5tYXAodiA9PiB2LnZhbHVlKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9maWx0ZXIoZWFjaGZuLCBjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGZpbHRlciA9IGlzQXJyYXlMaWtlKGNvbGwpID8gZmlsdGVyQXJyYXkgOiBmaWx0ZXJHZW5lcmljO1xuICAgICAgICByZXR1cm4gZmlsdGVyKGVhY2hmbiwgY29sbCwgd3JhcEFzeW5jKGl0ZXJhdGVlKSwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBuZXcgYXJyYXkgb2YgYWxsIHRoZSB2YWx1ZXMgaW4gYGNvbGxgIHdoaWNoIHBhc3MgYW4gYXN5bmMgdHJ1dGhcbiAgICAgKiB0ZXN0LiBUaGlzIG9wZXJhdGlvbiBpcyBwZXJmb3JtZWQgaW4gcGFyYWxsZWwsIGJ1dCB0aGUgcmVzdWx0cyBhcnJheSB3aWxsIGJlXG4gICAgICogaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlIG9yaWdpbmFsLlxuICAgICAqXG4gICAgICogQG5hbWUgZmlsdGVyXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGFsaWFzIHNlbGVjdFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBIHRydXRoIHRlc3QgdG8gYXBwbHkgdG8gZWFjaCBpdGVtIGluIGBjb2xsYC5cbiAgICAgKiBUaGUgYGl0ZXJhdGVlYCBpcyBwYXNzZWQgYSBgY2FsbGJhY2soZXJyLCB0cnV0aFZhbHVlKWAsIHdoaWNoIG11c3QgYmUgY2FsbGVkXG4gICAgICogd2l0aCBhIGJvb2xlYW4gYXJndW1lbnQgb25jZSBpdCBoYXMgY29tcGxldGVkLiBJbnZva2VkIHdpdGggKGl0ZW0sIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgYWZ0ZXIgYWxsIHRoZVxuICAgICAqIGBpdGVyYXRlZWAgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQuIEludm9rZWQgd2l0aCAoZXJyLCByZXN1bHRzKS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBwcm92aWRlZFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBkaXIxIGlzIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgZmlsZTEudHh0LCBmaWxlMi50eHRcbiAgICAgKiAvLyBkaXIyIGlzIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgZmlsZTMudHh0LCBmaWxlNC50eHRcbiAgICAgKiAvLyBkaXIzIGlzIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgZmlsZTUudHh0XG4gICAgICpcbiAgICAgKiBjb25zdCBmaWxlcyA9IFsnZGlyMS9maWxlMS50eHQnLCdkaXIyL2ZpbGUzLnR4dCcsJ2RpcjMvZmlsZTYudHh0J107XG4gICAgICpcbiAgICAgKiAvLyBhc3luY2hyb25vdXMgZnVuY3Rpb24gdGhhdCBjaGVja3MgaWYgYSBmaWxlIGV4aXN0c1xuICAgICAqIGZ1bmN0aW9uIGZpbGVFeGlzdHMoZmlsZSwgY2FsbGJhY2spIHtcbiAgICAgKiAgICBmcy5hY2Nlc3MoZmlsZSwgZnMuY29uc3RhbnRzLkZfT0ssIChlcnIpID0+IHtcbiAgICAgKiAgICAgICAgY2FsbGJhY2sobnVsbCwgIWVycik7XG4gICAgICogICAgfSk7XG4gICAgICogfVxuICAgICAqXG4gICAgICogLy8gVXNpbmcgY2FsbGJhY2tzXG4gICAgICogYXN5bmMuZmlsdGVyKGZpbGVzLCBmaWxlRXhpc3RzLCBmdW5jdGlvbihlcnIsIHJlc3VsdHMpIHtcbiAgICAgKiAgICBpZihlcnIpIHtcbiAgICAgKiAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICB9IGVsc2Uge1xuICAgICAqICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiAgICAgICAgLy8gWyAnZGlyMS9maWxlMS50eHQnLCAnZGlyMi9maWxlMy50eHQnIF1cbiAgICAgKiAgICAgICAgLy8gcmVzdWx0cyBpcyBub3cgYW4gYXJyYXkgb2YgdGhlIGV4aXN0aW5nIGZpbGVzXG4gICAgICogICAgfVxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgUHJvbWlzZXNcbiAgICAgKiBhc3luYy5maWx0ZXIoZmlsZXMsIGZpbGVFeGlzdHMpXG4gICAgICogLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgICAvLyBbICdkaXIxL2ZpbGUxLnR4dCcsICdkaXIyL2ZpbGUzLnR4dCcgXVxuICAgICAqICAgICAvLyByZXN1bHRzIGlzIG5vdyBhbiBhcnJheSBvZiB0aGUgZXhpc3RpbmcgZmlsZXNcbiAgICAgKiB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgYXN5bmMvYXdhaXRcbiAgICAgKiBhc3luYyAoKSA9PiB7XG4gICAgICogICAgIHRyeSB7XG4gICAgICogICAgICAgICBsZXQgcmVzdWx0cyA9IGF3YWl0IGFzeW5jLmZpbHRlcihmaWxlcywgZmlsZUV4aXN0cyk7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiAgICAgICAgIC8vIFsgJ2RpcjEvZmlsZTEudHh0JywgJ2RpcjIvZmlsZTMudHh0JyBdXG4gICAgICogICAgICAgICAvLyByZXN1bHRzIGlzIG5vdyBhbiBhcnJheSBvZiB0aGUgZXhpc3RpbmcgZmlsZXNcbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICovXG4gICAgZnVuY3Rpb24gZmlsdGVyIChjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9maWx0ZXIoZWFjaE9mJDEsIGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaylcbiAgICB9XG4gICAgdmFyIGZpbHRlciQxID0gYXdhaXRpZnkoZmlsdGVyLCAzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzYW1lIGFzIFtgZmlsdGVyYF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmZpbHRlcn0gYnV0IHJ1bnMgYSBtYXhpbXVtIG9mIGBsaW1pdGAgYXN5bmMgb3BlcmF0aW9ucyBhdCBhXG4gICAgICogdGltZS5cbiAgICAgKlxuICAgICAqIEBuYW1lIGZpbHRlckxpbWl0XG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMuZmlsdGVyXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZmlsdGVyfVxuICAgICAqIEBhbGlhcyBzZWxlY3RMaW1pdFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbWl0IC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGFzeW5jIG9wZXJhdGlvbnMgYXQgYSB0aW1lLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIC0gQSB0cnV0aCB0ZXN0IHRvIGFwcGx5IHRvIGVhY2ggaXRlbSBpbiBgY29sbGAuXG4gICAgICogVGhlIGBpdGVyYXRlZWAgaXMgcGFzc2VkIGEgYGNhbGxiYWNrKGVyciwgdHJ1dGhWYWx1ZSlgLCB3aGljaCBtdXN0IGJlIGNhbGxlZFxuICAgICAqIHdpdGggYSBib29sZWFuIGFyZ3VtZW50IG9uY2UgaXQgaGFzIGNvbXBsZXRlZC4gSW52b2tlZCB3aXRoIChpdGVtLCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIGFmdGVyIGFsbCB0aGVcbiAgICAgKiBgaXRlcmF0ZWVgIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLiBJbnZva2VkIHdpdGggKGVyciwgcmVzdWx0cykuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgcHJvdmlkZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmaWx0ZXJMaW1pdCAoY29sbCwgbGltaXQsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX2ZpbHRlcihlYWNoT2ZMaW1pdCQyKGxpbWl0KSwgY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKVxuICAgIH1cbiAgICB2YXIgZmlsdGVyTGltaXQkMSA9IGF3YWl0aWZ5KGZpbHRlckxpbWl0LCA0KTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzYW1lIGFzIFtgZmlsdGVyYF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmZpbHRlcn0gYnV0IHJ1bnMgb25seSBhIHNpbmdsZSBhc3luYyBvcGVyYXRpb24gYXQgYSB0aW1lLlxuICAgICAqXG4gICAgICogQG5hbWUgZmlsdGVyU2VyaWVzXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMuZmlsdGVyXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZmlsdGVyfVxuICAgICAqIEBhbGlhcyBzZWxlY3RTZXJpZXNcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIC0gQSB0cnV0aCB0ZXN0IHRvIGFwcGx5IHRvIGVhY2ggaXRlbSBpbiBgY29sbGAuXG4gICAgICogVGhlIGBpdGVyYXRlZWAgaXMgcGFzc2VkIGEgYGNhbGxiYWNrKGVyciwgdHJ1dGhWYWx1ZSlgLCB3aGljaCBtdXN0IGJlIGNhbGxlZFxuICAgICAqIHdpdGggYSBib29sZWFuIGFyZ3VtZW50IG9uY2UgaXQgaGFzIGNvbXBsZXRlZC4gSW52b2tlZCB3aXRoIChpdGVtLCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIGFmdGVyIGFsbCB0aGVcbiAgICAgKiBgaXRlcmF0ZWVgIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLiBJbnZva2VkIHdpdGggKGVyciwgcmVzdWx0cylcbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBwcm92aWRlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZpbHRlclNlcmllcyAoY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBfZmlsdGVyKGVhY2hPZlNlcmllcyQxLCBjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuICAgIHZhciBmaWx0ZXJTZXJpZXMkMSA9IGF3YWl0aWZ5KGZpbHRlclNlcmllcywgMyk7XG5cbiAgICAvKipcbiAgICAgKiBDYWxscyB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIGBmbmAgd2l0aCBhIGNhbGxiYWNrIHBhcmFtZXRlciB0aGF0IGFsbG93cyBpdFxuICAgICAqIHRvIGNhbGwgaXRzZWxmIGFnYWluLCBpbiBzZXJpZXMsIGluZGVmaW5pdGVseS5cblxuICAgICAqIElmIGFuIGVycm9yIGlzIHBhc3NlZCB0byB0aGUgY2FsbGJhY2sgdGhlbiBgZXJyYmFja2AgaXMgY2FsbGVkIHdpdGggdGhlXG4gICAgICogZXJyb3IsIGFuZCBleGVjdXRpb24gc3RvcHMsIG90aGVyd2lzZSBpdCB3aWxsIG5ldmVyIGJlIGNhbGxlZC5cbiAgICAgKlxuICAgICAqIEBuYW1lIGZvcmV2ZXJcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb250cm9sRmxvd1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgQ29udHJvbCBGbG93XG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBmbiAtIGFuIGFzeW5jIGZ1bmN0aW9uIHRvIGNhbGwgcmVwZWF0ZWRseS5cbiAgICAgKiBJbnZva2VkIHdpdGggKG5leHQpLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtlcnJiYWNrXSAtIHdoZW4gYGZuYCBwYXNzZXMgYW4gZXJyb3IgdG8gaXQncyBjYWxsYmFjayxcbiAgICAgKiB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkLCBhbmQgZXhlY3V0aW9uIHN0b3BzLiBJbnZva2VkIHdpdGggKGVycikuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSB0aGF0IHJlamVjdHMgaWYgYW4gZXJyb3Igb2NjdXJzIGFuZCBhbiBlcnJiYWNrXG4gICAgICogaXMgbm90IHBhc3NlZFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBhc3luYy5mb3JldmVyKFxuICAgICAqICAgICBmdW5jdGlvbihuZXh0KSB7XG4gICAgICogICAgICAgICAvLyBuZXh0IGlzIHN1aXRhYmxlIGZvciBwYXNzaW5nIHRvIHRoaW5ncyB0aGF0IG5lZWQgYSBjYWxsYmFjayhlcnIgWywgd2hhdGV2ZXJdKTtcbiAgICAgKiAgICAgICAgIC8vIGl0IHdpbGwgcmVzdWx0IGluIHRoaXMgZnVuY3Rpb24gYmVpbmcgY2FsbGVkIGFnYWluLlxuICAgICAqICAgICB9LFxuICAgICAqICAgICBmdW5jdGlvbihlcnIpIHtcbiAgICAgKiAgICAgICAgIC8vIGlmIG5leHQgaXMgY2FsbGVkIHdpdGggYSB2YWx1ZSBpbiBpdHMgZmlyc3QgcGFyYW1ldGVyLCBpdCB3aWxsIGFwcGVhclxuICAgICAqICAgICAgICAgLy8gaW4gaGVyZSBhcyAnZXJyJywgYW5kIGV4ZWN1dGlvbiB3aWxsIHN0b3AuXG4gICAgICogICAgIH1cbiAgICAgKiApO1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZvcmV2ZXIoZm4sIGVycmJhY2spIHtcbiAgICAgICAgdmFyIGRvbmUgPSBvbmx5T25jZShlcnJiYWNrKTtcbiAgICAgICAgdmFyIHRhc2sgPSB3cmFwQXN5bmMoZW5zdXJlQXN5bmMoZm4pKTtcblxuICAgICAgICBmdW5jdGlvbiBuZXh0KGVycikge1xuICAgICAgICAgICAgaWYgKGVycikgcmV0dXJuIGRvbmUoZXJyKTtcbiAgICAgICAgICAgIGlmIChlcnIgPT09IGZhbHNlKSByZXR1cm47XG4gICAgICAgICAgICB0YXNrKG5leHQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgfVxuICAgIHZhciBmb3JldmVyJDEgPSBhd2FpdGlmeShmb3JldmVyLCAyKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzYW1lIGFzIFtgZ3JvdXBCeWBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5ncm91cEJ5fSBidXQgcnVucyBhIG1heGltdW0gb2YgYGxpbWl0YCBhc3luYyBvcGVyYXRpb25zIGF0IGEgdGltZS5cbiAgICAgKlxuICAgICAqIEBuYW1lIGdyb3VwQnlMaW1pdFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLmdyb3VwQnlde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5ncm91cEJ5fVxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbWl0IC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGFzeW5jIG9wZXJhdGlvbnMgYXQgYSB0aW1lLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBbiBhc3luYyBmdW5jdGlvbiB0byBhcHBseSB0byBlYWNoIGl0ZW0gaW5cbiAgICAgKiBgY29sbGAuXG4gICAgICogVGhlIGl0ZXJhdGVlIHNob3VsZCBjb21wbGV0ZSB3aXRoIGEgYGtleWAgdG8gZ3JvdXAgdGhlIHZhbHVlIHVuZGVyLlxuICAgICAqIEludm9rZWQgd2l0aCAodmFsdWUsIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgd2hlbiBhbGwgYGl0ZXJhdGVlYFxuICAgICAqIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLCBvciBhbiBlcnJvciBvY2N1cnMuIFJlc3VsdCBpcyBhbiBgT2JqZWN0YCB3aG9zZXNcbiAgICAgKiBwcm9wZXJ0aWVzIGFyZSBhcnJheXMgb2YgdmFsdWVzIHdoaWNoIHJldHVybmVkIHRoZSBjb3JyZXNwb25kaW5nIGtleS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBpcyBwYXNzZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBncm91cEJ5TGltaXQoY29sbCwgbGltaXQsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgX2l0ZXJhdGVlID0gd3JhcEFzeW5jKGl0ZXJhdGVlKTtcbiAgICAgICAgcmV0dXJuIG1hcExpbWl0JDEoY29sbCwgbGltaXQsICh2YWwsIGl0ZXJDYikgPT4ge1xuICAgICAgICAgICAgX2l0ZXJhdGVlKHZhbCwgKGVyciwga2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikgcmV0dXJuIGl0ZXJDYihlcnIpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVyQ2IoZXJyLCB7a2V5LCB2YWx9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCAoZXJyLCBtYXBSZXN1bHRzKSA9PiB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgICAgICAgICAvLyBmcm9tIE1ETiwgaGFuZGxlIG9iamVjdCBoYXZpbmcgYW4gYGhhc093blByb3BlcnR5YCBwcm9wXG4gICAgICAgICAgICB2YXIge2hhc093blByb3BlcnR5fSA9IE9iamVjdC5wcm90b3R5cGU7XG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFwUmVzdWx0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChtYXBSZXN1bHRzW2ldKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB7a2V5fSA9IG1hcFJlc3VsdHNbaV07XG4gICAgICAgICAgICAgICAgICAgIHZhciB7dmFsfSA9IG1hcFJlc3VsdHNbaV07XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwocmVzdWx0LCBrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRba2V5XS5wdXNoKHZhbCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IFt2YWxdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyLCByZXN1bHQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB2YXIgZ3JvdXBCeUxpbWl0JDEgPSBhd2FpdGlmeShncm91cEJ5TGltaXQsIDQpO1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBvYmplY3QsIHdoZXJlIGVhY2ggdmFsdWUgY29ycmVzcG9uZHMgdG8gYW4gYXJyYXkgb2YgaXRlbXMsIGZyb21cbiAgICAgKiBgY29sbGAsIHRoYXQgcmV0dXJuZWQgdGhlIGNvcnJlc3BvbmRpbmcga2V5LiBUaGF0IGlzLCB0aGUga2V5cyBvZiB0aGUgb2JqZWN0XG4gICAgICogY29ycmVzcG9uZCB0byB0aGUgdmFsdWVzIHBhc3NlZCB0byB0aGUgYGl0ZXJhdGVlYCBjYWxsYmFjay5cbiAgICAgKlxuICAgICAqIE5vdGU6IFNpbmNlIHRoaXMgZnVuY3Rpb24gYXBwbGllcyB0aGUgYGl0ZXJhdGVlYCB0byBlYWNoIGl0ZW0gaW4gcGFyYWxsZWwsXG4gICAgICogdGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgdGhlIGBpdGVyYXRlZWAgZnVuY3Rpb25zIHdpbGwgY29tcGxldGUgaW4gb3JkZXIuXG4gICAgICogSG93ZXZlciwgdGhlIHZhbHVlcyBmb3IgZWFjaCBrZXkgaW4gdGhlIGByZXN1bHRgIHdpbGwgYmUgaW4gdGhlIHNhbWUgb3JkZXIgYXNcbiAgICAgKiB0aGUgb3JpZ2luYWwgYGNvbGxgLiBGb3IgT2JqZWN0cywgdGhlIHZhbHVlcyB3aWxsIHJvdWdobHkgYmUgaW4gdGhlIG9yZGVyIG9mXG4gICAgICogdGhlIG9yaWdpbmFsIE9iamVjdHMnIGtleXMgKGJ1dCB0aGlzIGNhbiB2YXJ5IGFjcm9zcyBKYXZhU2NyaXB0IGVuZ2luZXMpLlxuICAgICAqXG4gICAgICogQG5hbWUgZ3JvdXBCeVxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEFuIGFzeW5jIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggaXRlbSBpblxuICAgICAqIGBjb2xsYC5cbiAgICAgKiBUaGUgaXRlcmF0ZWUgc2hvdWxkIGNvbXBsZXRlIHdpdGggYSBga2V5YCB0byBncm91cCB0aGUgdmFsdWUgdW5kZXIuXG4gICAgICogSW52b2tlZCB3aXRoICh2YWx1ZSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCB3aGVuIGFsbCBgaXRlcmF0ZWVgXG4gICAgICogZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQsIG9yIGFuIGVycm9yIG9jY3Vycy4gUmVzdWx0IGlzIGFuIGBPYmplY3RgIHdob3Nlc1xuICAgICAqIHByb3BlcnRpZXMgYXJlIGFycmF5cyBvZiB2YWx1ZXMgd2hpY2ggcmV0dXJuZWQgdGhlIGNvcnJlc3BvbmRpbmcga2V5LlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIG5vIGNhbGxiYWNrIGlzIHBhc3NlZFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBkaXIxIGlzIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgZmlsZTEudHh0LCBmaWxlMi50eHRcbiAgICAgKiAvLyBkaXIyIGlzIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgZmlsZTMudHh0LCBmaWxlNC50eHRcbiAgICAgKiAvLyBkaXIzIGlzIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgZmlsZTUudHh0XG4gICAgICogLy8gZGlyNCBkb2VzIG5vdCBleGlzdFxuICAgICAqXG4gICAgICogY29uc3QgZmlsZXMgPSBbJ2RpcjEvZmlsZTEudHh0JywnZGlyMicsJ2RpcjQnXVxuICAgICAqXG4gICAgICogLy8gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRoYXQgZGV0ZWN0cyBmaWxlIHR5cGUgYXMgbm9uZSwgZmlsZSwgb3IgZGlyZWN0b3J5XG4gICAgICogZnVuY3Rpb24gZGV0ZWN0RmlsZShmaWxlLCBjYWxsYmFjaykge1xuICAgICAqICAgICBmcy5zdGF0KGZpbGUsIGZ1bmN0aW9uKGVyciwgc3RhdCkge1xuICAgICAqICAgICAgICAgaWYgKGVycikge1xuICAgICAqICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsLCAnbm9uZScpO1xuICAgICAqICAgICAgICAgfVxuICAgICAqICAgICAgICAgY2FsbGJhY2sobnVsbCwgc3RhdC5pc0RpcmVjdG9yeSgpID8gJ2RpcmVjdG9yeScgOiAnZmlsZScpO1xuICAgICAqICAgICB9KTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvL1VzaW5nIGNhbGxiYWNrc1xuICAgICAqIGFzeW5jLmdyb3VwQnkoZmlsZXMsIGRldGVjdEZpbGUsIGZ1bmN0aW9uKGVyciwgcmVzdWx0KSB7XG4gICAgICogICAgIGlmKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgfSBlbHNlIHtcbiAgICAgKlx0ICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XG4gICAgICogICAgICAgICAvLyB7XG4gICAgICogICAgICAgICAvLyAgICAgZmlsZTogWyAnZGlyMS9maWxlMS50eHQnIF0sXG4gICAgICogICAgICAgICAvLyAgICAgbm9uZTogWyAnZGlyNCcgXSxcbiAgICAgKiAgICAgICAgIC8vICAgICBkaXJlY3Rvcnk6IFsgJ2RpcjInXVxuICAgICAqICAgICAgICAgLy8gfVxuICAgICAqICAgICAgICAgLy8gcmVzdWx0IGlzIG9iamVjdCBjb250YWluaW5nIHRoZSBmaWxlcyBncm91cGVkIGJ5IHR5cGVcbiAgICAgKiAgICAgfVxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgUHJvbWlzZXNcbiAgICAgKiBhc3luYy5ncm91cEJ5KGZpbGVzLCBkZXRlY3RGaWxlKVxuICAgICAqIC50aGVuKCByZXN1bHQgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAvLyB7XG4gICAgICogICAgIC8vICAgICBmaWxlOiBbICdkaXIxL2ZpbGUxLnR4dCcgXSxcbiAgICAgKiAgICAgLy8gICAgIG5vbmU6IFsgJ2RpcjQnIF0sXG4gICAgICogICAgIC8vICAgICBkaXJlY3Rvcnk6IFsgJ2RpcjInXVxuICAgICAqICAgICAvLyB9XG4gICAgICogICAgIC8vIHJlc3VsdCBpcyBvYmplY3QgY29udGFpbmluZyB0aGUgZmlsZXMgZ3JvdXBlZCBieSB0eXBlXG4gICAgICogfSkuY2F0Y2goIGVyciA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBhc3luYy9hd2FpdFxuICAgICAqIGFzeW5jICgpID0+IHtcbiAgICAgKiAgICAgdHJ5IHtcbiAgICAgKiAgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBhc3luYy5ncm91cEJ5KGZpbGVzLCBkZXRlY3RGaWxlKTtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XG4gICAgICogICAgICAgICAvLyB7XG4gICAgICogICAgICAgICAvLyAgICAgZmlsZTogWyAnZGlyMS9maWxlMS50eHQnIF0sXG4gICAgICogICAgICAgICAvLyAgICAgbm9uZTogWyAnZGlyNCcgXSxcbiAgICAgKiAgICAgICAgIC8vICAgICBkaXJlY3Rvcnk6IFsgJ2RpcjInXVxuICAgICAqICAgICAgICAgLy8gfVxuICAgICAqICAgICAgICAgLy8gcmVzdWx0IGlzIG9iamVjdCBjb250YWluaW5nIHRoZSBmaWxlcyBncm91cGVkIGJ5IHR5cGVcbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ3JvdXBCeSAoY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBncm91cEJ5TGltaXQkMShjb2xsLCBJbmZpbml0eSwgaXRlcmF0ZWUsIGNhbGxiYWNrKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBzYW1lIGFzIFtgZ3JvdXBCeWBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5ncm91cEJ5fSBidXQgcnVucyBvbmx5IGEgc2luZ2xlIGFzeW5jIG9wZXJhdGlvbiBhdCBhIHRpbWUuXG4gICAgICpcbiAgICAgKiBAbmFtZSBncm91cEJ5U2VyaWVzXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMuZ3JvdXBCeV17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmdyb3VwQnl9XG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfEFzeW5jSXRlcmFibGV8T2JqZWN0fSBjb2xsIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQW4gYXN5bmMgZnVuY3Rpb24gdG8gYXBwbHkgdG8gZWFjaCBpdGVtIGluXG4gICAgICogYGNvbGxgLlxuICAgICAqIFRoZSBpdGVyYXRlZSBzaG91bGQgY29tcGxldGUgd2l0aCBhIGBrZXlgIHRvIGdyb3VwIHRoZSB2YWx1ZSB1bmRlci5cbiAgICAgKiBJbnZva2VkIHdpdGggKHZhbHVlLCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIHdoZW4gYWxsIGBpdGVyYXRlZWBcbiAgICAgKiBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZCwgb3IgYW4gZXJyb3Igb2NjdXJzLiBSZXN1bHQgaXMgYW4gYE9iamVjdGAgd2hvc2VcbiAgICAgKiBwcm9wZXJ0aWVzIGFyZSBhcnJheXMgb2YgdmFsdWVzIHdoaWNoIHJldHVybmVkIHRoZSBjb3JyZXNwb25kaW5nIGtleS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBpcyBwYXNzZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBncm91cEJ5U2VyaWVzIChjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGdyb3VwQnlMaW1pdCQxKGNvbGwsIDEsIGl0ZXJhdGVlLCBjYWxsYmFjaylcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMb2dzIHRoZSByZXN1bHQgb2YgYW4gYGFzeW5jYCBmdW5jdGlvbiB0byB0aGUgYGNvbnNvbGVgLiBPbmx5IHdvcmtzIGluXG4gICAgICogTm9kZS5qcyBvciBpbiBicm93c2VycyB0aGF0IHN1cHBvcnQgYGNvbnNvbGUubG9nYCBhbmQgYGNvbnNvbGUuZXJyb3JgIChzdWNoXG4gICAgICogYXMgRkYgYW5kIENocm9tZSkuIElmIG11bHRpcGxlIGFyZ3VtZW50cyBhcmUgcmV0dXJuZWQgZnJvbSB0aGUgYXN5bmNcbiAgICAgKiBmdW5jdGlvbiwgYGNvbnNvbGUubG9nYCBpcyBjYWxsZWQgb24gZWFjaCBhcmd1bWVudCBpbiBvcmRlci5cbiAgICAgKlxuICAgICAqIEBuYW1lIGxvZ1xuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOlV0aWxzXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBmdW5jdGlvbiAtIFRoZSBmdW5jdGlvbiB5b3Ugd2FudCB0byBldmVudHVhbGx5IGFwcGx5XG4gICAgICogYWxsIGFyZ3VtZW50cyB0by5cbiAgICAgKiBAcGFyYW0gey4uLip9IGFyZ3VtZW50cy4uLiAtIEFueSBudW1iZXIgb2YgYXJndW1lbnRzIHRvIGFwcGx5IHRvIHRoZSBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gaW4gYSBtb2R1bGVcbiAgICAgKiB2YXIgaGVsbG8gPSBmdW5jdGlvbihuYW1lLCBjYWxsYmFjaykge1xuICAgICAqICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ2hlbGxvICcgKyBuYW1lKTtcbiAgICAgKiAgICAgfSwgMTAwMCk7XG4gICAgICogfTtcbiAgICAgKlxuICAgICAqIC8vIGluIHRoZSBub2RlIHJlcGxcbiAgICAgKiBub2RlPiBhc3luYy5sb2coaGVsbG8sICd3b3JsZCcpO1xuICAgICAqICdoZWxsbyB3b3JsZCdcbiAgICAgKi9cbiAgICB2YXIgbG9nID0gY29uc29sZUZ1bmMoJ2xvZycpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNhbWUgYXMgW2BtYXBWYWx1ZXNgXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMubWFwVmFsdWVzfSBidXQgcnVucyBhIG1heGltdW0gb2YgYGxpbWl0YCBhc3luYyBvcGVyYXRpb25zIGF0IGFcbiAgICAgKiB0aW1lLlxuICAgICAqXG4gICAgICogQG5hbWUgbWFwVmFsdWVzTGltaXRcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5tYXBWYWx1ZXNde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5tYXBWYWx1ZXN9XG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbGltaXQgLSBUaGUgbWF4aW11bSBudW1iZXIgb2YgYXN5bmMgb3BlcmF0aW9ucyBhdCBhIHRpbWUuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEEgZnVuY3Rpb24gdG8gYXBwbHkgdG8gZWFjaCB2YWx1ZSBhbmQga2V5XG4gICAgICogaW4gYGNvbGxgLlxuICAgICAqIFRoZSBpdGVyYXRlZSBzaG91bGQgY29tcGxldGUgd2l0aCB0aGUgdHJhbnNmb3JtZWQgdmFsdWUgYXMgaXRzIHJlc3VsdC5cbiAgICAgKiBJbnZva2VkIHdpdGggKHZhbHVlLCBrZXksIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgd2hlbiBhbGwgYGl0ZXJhdGVlYFxuICAgICAqIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLCBvciBhbiBlcnJvciBvY2N1cnMuIGByZXN1bHRgIGlzIGEgbmV3IG9iamVjdCBjb25zaXN0aW5nXG4gICAgICogb2YgZWFjaCBrZXkgZnJvbSBgb2JqYCwgd2l0aCBlYWNoIHRyYW5zZm9ybWVkIHZhbHVlIG9uIHRoZSByaWdodC1oYW5kIHNpZGUuXG4gICAgICogSW52b2tlZCB3aXRoIChlcnIsIHJlc3VsdCkuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgaXMgcGFzc2VkXG4gICAgICovXG4gICAgZnVuY3Rpb24gbWFwVmFsdWVzTGltaXQob2JqLCBsaW1pdCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gb25jZShjYWxsYmFjayk7XG4gICAgICAgIHZhciBuZXdPYmogPSB7fTtcbiAgICAgICAgdmFyIF9pdGVyYXRlZSA9IHdyYXBBc3luYyhpdGVyYXRlZSk7XG4gICAgICAgIHJldHVybiBlYWNoT2ZMaW1pdCQyKGxpbWl0KShvYmosICh2YWwsIGtleSwgbmV4dCkgPT4ge1xuICAgICAgICAgICAgX2l0ZXJhdGVlKHZhbCwga2V5LCAoZXJyLCByZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gbmV4dChlcnIpO1xuICAgICAgICAgICAgICAgIG5ld09ialtrZXldID0gcmVzdWx0O1xuICAgICAgICAgICAgICAgIG5leHQoZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBlcnIgPT4gY2FsbGJhY2soZXJyLCBuZXdPYmopKTtcbiAgICB9XG5cbiAgICB2YXIgbWFwVmFsdWVzTGltaXQkMSA9IGF3YWl0aWZ5KG1hcFZhbHVlc0xpbWl0LCA0KTtcblxuICAgIC8qKlxuICAgICAqIEEgcmVsYXRpdmUgb2YgW2BtYXBgXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMubWFwfSwgZGVzaWduZWQgZm9yIHVzZSB3aXRoIG9iamVjdHMuXG4gICAgICpcbiAgICAgKiBQcm9kdWNlcyBhIG5ldyBPYmplY3QgYnkgbWFwcGluZyBlYWNoIHZhbHVlIG9mIGBvYmpgIHRocm91Z2ggdGhlIGBpdGVyYXRlZWBcbiAgICAgKiBmdW5jdGlvbi4gVGhlIGBpdGVyYXRlZWAgaXMgY2FsbGVkIGVhY2ggYHZhbHVlYCBhbmQgYGtleWAgZnJvbSBgb2JqYCBhbmQgYVxuICAgICAqIGNhbGxiYWNrIGZvciB3aGVuIGl0IGhhcyBmaW5pc2hlZCBwcm9jZXNzaW5nLiBFYWNoIG9mIHRoZXNlIGNhbGxiYWNrcyB0YWtlc1xuICAgICAqIHR3byBhcmd1bWVudHM6IGFuIGBlcnJvcmAsIGFuZCB0aGUgdHJhbnNmb3JtZWQgaXRlbSBmcm9tIGBvYmpgLiBJZiBgaXRlcmF0ZWVgXG4gICAgICogcGFzc2VzIGFuIGVycm9yIHRvIGl0cyBjYWxsYmFjaywgdGhlIG1haW4gYGNhbGxiYWNrYCAoZm9yIHRoZSBgbWFwVmFsdWVzYFxuICAgICAqIGZ1bmN0aW9uKSBpcyBpbW1lZGlhdGVseSBjYWxsZWQgd2l0aCB0aGUgZXJyb3IuXG4gICAgICpcbiAgICAgKiBOb3RlLCB0aGUgb3JkZXIgb2YgdGhlIGtleXMgaW4gdGhlIHJlc3VsdCBpcyBub3QgZ3VhcmFudGVlZC4gIFRoZSBrZXlzIHdpbGxcbiAgICAgKiBiZSByb3VnaGx5IGluIHRoZSBvcmRlciB0aGV5IGNvbXBsZXRlLCAoYnV0IHRoaXMgaXMgdmVyeSBlbmdpbmUtc3BlY2lmaWMpXG4gICAgICpcbiAgICAgKiBAbmFtZSBtYXBWYWx1ZXNcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmogLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggdmFsdWUgYW5kIGtleVxuICAgICAqIGluIGBjb2xsYC5cbiAgICAgKiBUaGUgaXRlcmF0ZWUgc2hvdWxkIGNvbXBsZXRlIHdpdGggdGhlIHRyYW5zZm9ybWVkIHZhbHVlIGFzIGl0cyByZXN1bHQuXG4gICAgICogSW52b2tlZCB3aXRoICh2YWx1ZSwga2V5LCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIHdoZW4gYWxsIGBpdGVyYXRlZWBcbiAgICAgKiBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZCwgb3IgYW4gZXJyb3Igb2NjdXJzLiBgcmVzdWx0YCBpcyBhIG5ldyBvYmplY3QgY29uc2lzdGluZ1xuICAgICAqIG9mIGVhY2gga2V5IGZyb20gYG9iamAsIHdpdGggZWFjaCB0cmFuc2Zvcm1lZCB2YWx1ZSBvbiB0aGUgcmlnaHQtaGFuZCBzaWRlLlxuICAgICAqIEludm9rZWQgd2l0aCAoZXJyLCByZXN1bHQpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIG5vIGNhbGxiYWNrIGlzIHBhc3NlZFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBmaWxlMS50eHQgaXMgYSBmaWxlIHRoYXQgaXMgMTAwMCBieXRlcyBpbiBzaXplXG4gICAgICogLy8gZmlsZTIudHh0IGlzIGEgZmlsZSB0aGF0IGlzIDIwMDAgYnl0ZXMgaW4gc2l6ZVxuICAgICAqIC8vIGZpbGUzLnR4dCBpcyBhIGZpbGUgdGhhdCBpcyAzMDAwIGJ5dGVzIGluIHNpemVcbiAgICAgKiAvLyBmaWxlNC50eHQgZG9lcyBub3QgZXhpc3RcbiAgICAgKlxuICAgICAqIGNvbnN0IGZpbGVNYXAgPSB7XG4gICAgICogICAgIGYxOiAnZmlsZTEudHh0JyxcbiAgICAgKiAgICAgZjI6ICdmaWxlMi50eHQnLFxuICAgICAqICAgICBmMzogJ2ZpbGUzLnR4dCdcbiAgICAgKiB9O1xuICAgICAqXG4gICAgICogY29uc3Qgd2l0aE1pc3NpbmdGaWxlTWFwID0ge1xuICAgICAqICAgICBmMTogJ2ZpbGUxLnR4dCcsXG4gICAgICogICAgIGYyOiAnZmlsZTIudHh0JyxcbiAgICAgKiAgICAgZjM6ICdmaWxlNC50eHQnXG4gICAgICogfTtcbiAgICAgKlxuICAgICAqIC8vIGFzeW5jaHJvbm91cyBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGZpbGUgc2l6ZSBpbiBieXRlc1xuICAgICAqIGZ1bmN0aW9uIGdldEZpbGVTaXplSW5CeXRlcyhmaWxlLCBrZXksIGNhbGxiYWNrKSB7XG4gICAgICogICAgIGZzLnN0YXQoZmlsZSwgZnVuY3Rpb24oZXJyLCBzdGF0KSB7XG4gICAgICogICAgICAgICBpZiAoZXJyKSB7XG4gICAgICogICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICogICAgICAgICB9XG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCBzdGF0LnNpemUpO1xuICAgICAqICAgICB9KTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBjYWxsYmFja3NcbiAgICAgKiBhc3luYy5tYXBWYWx1ZXMoZmlsZU1hcCwgZ2V0RmlsZVNpemVJbkJ5dGVzLCBmdW5jdGlvbihlcnIsIHJlc3VsdCkge1xuICAgICAqICAgICBpZiAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9IGVsc2Uge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgICAgIC8vIHJlc3VsdCBpcyBub3cgYSBtYXAgb2YgZmlsZSBzaXplIGluIGJ5dGVzIGZvciBlYWNoIGZpbGUsIGUuZy5cbiAgICAgKiAgICAgICAgIC8vIHtcbiAgICAgKiAgICAgICAgIC8vICAgICBmMTogMTAwMCxcbiAgICAgKiAgICAgICAgIC8vICAgICBmMjogMjAwMCxcbiAgICAgKiAgICAgICAgIC8vICAgICBmMzogMzAwMFxuICAgICAqICAgICAgICAgLy8gfVxuICAgICAqICAgICB9XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBFcnJvciBoYW5kbGluZ1xuICAgICAqIGFzeW5jLm1hcFZhbHVlcyh3aXRoTWlzc2luZ0ZpbGVNYXAsIGdldEZpbGVTaXplSW5CeXRlcywgZnVuY3Rpb24oZXJyLCByZXN1bHQpIHtcbiAgICAgKiAgICAgaWYgKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgICAgIC8vIFsgRXJyb3I6IEVOT0VOVDogbm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSBdXG4gICAgICogICAgIH0gZWxzZSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICB9XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBQcm9taXNlc1xuICAgICAqIGFzeW5jLm1hcFZhbHVlcyhmaWxlTWFwLCBnZXRGaWxlU2l6ZUluQnl0ZXMpXG4gICAgICogLnRoZW4oIHJlc3VsdCA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XG4gICAgICogICAgIC8vIHJlc3VsdCBpcyBub3cgYSBtYXAgb2YgZmlsZSBzaXplIGluIGJ5dGVzIGZvciBlYWNoIGZpbGUsIGUuZy5cbiAgICAgKiAgICAgLy8ge1xuICAgICAqICAgICAvLyAgICAgZjE6IDEwMDAsXG4gICAgICogICAgIC8vICAgICBmMjogMjAwMCxcbiAgICAgKiAgICAgLy8gICAgIGYzOiAzMDAwXG4gICAgICogICAgIC8vIH1cbiAgICAgKiB9KS5jYXRjaCAoZXJyID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIEVycm9yIEhhbmRsaW5nXG4gICAgICogYXN5bmMubWFwVmFsdWVzKHdpdGhNaXNzaW5nRmlsZU1hcCwgZ2V0RmlsZVNpemVJbkJ5dGVzKVxuICAgICAqIC50aGVuKCByZXN1bHQgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqIH0pLmNhdGNoIChlcnIgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICAvLyBbIEVycm9yOiBFTk9FTlQ6IG5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkgXVxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgYXN5bmMvYXdhaXRcbiAgICAgKiBhc3luYyAoKSA9PiB7XG4gICAgICogICAgIHRyeSB7XG4gICAgICogICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgYXN5bmMubWFwVmFsdWVzKGZpbGVNYXAsIGdldEZpbGVTaXplSW5CeXRlcyk7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAgICAgLy8gcmVzdWx0IGlzIG5vdyBhIG1hcCBvZiBmaWxlIHNpemUgaW4gYnl0ZXMgZm9yIGVhY2ggZmlsZSwgZS5nLlxuICAgICAqICAgICAgICAgLy8ge1xuICAgICAqICAgICAgICAgLy8gICAgIGYxOiAxMDAwLFxuICAgICAqICAgICAgICAgLy8gICAgIGYyOiAyMDAwLFxuICAgICAqICAgICAgICAgLy8gICAgIGYzOiAzMDAwXG4gICAgICogICAgICAgICAvLyB9XG4gICAgICogICAgIH1cbiAgICAgKiAgICAgY2F0Y2ggKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIC8vIEVycm9yIEhhbmRsaW5nXG4gICAgICogYXN5bmMgKCkgPT4ge1xuICAgICAqICAgICB0cnkge1xuICAgICAqICAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IGFzeW5jLm1hcFZhbHVlcyh3aXRoTWlzc2luZ0ZpbGVNYXAsIGdldEZpbGVTaXplSW5CeXRlcyk7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICB9XG4gICAgICogICAgIGNhdGNoIChlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgICAgICAvLyBbIEVycm9yOiBFTk9FTlQ6IG5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkgXVxuICAgICAqICAgICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICovXG4gICAgZnVuY3Rpb24gbWFwVmFsdWVzKG9iaiwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBtYXBWYWx1ZXNMaW1pdCQxKG9iaiwgSW5maW5pdHksIGl0ZXJhdGVlLCBjYWxsYmFjaylcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyBbYG1hcFZhbHVlc2Bde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5tYXBWYWx1ZXN9IGJ1dCBydW5zIG9ubHkgYSBzaW5nbGUgYXN5bmMgb3BlcmF0aW9uIGF0IGEgdGltZS5cbiAgICAgKlxuICAgICAqIEBuYW1lIG1hcFZhbHVlc1Nlcmllc1xuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLm1hcFZhbHVlc117QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLm1hcFZhbHVlc31cbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmogLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggdmFsdWUgYW5kIGtleVxuICAgICAqIGluIGBjb2xsYC5cbiAgICAgKiBUaGUgaXRlcmF0ZWUgc2hvdWxkIGNvbXBsZXRlIHdpdGggdGhlIHRyYW5zZm9ybWVkIHZhbHVlIGFzIGl0cyByZXN1bHQuXG4gICAgICogSW52b2tlZCB3aXRoICh2YWx1ZSwga2V5LCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIHdoZW4gYWxsIGBpdGVyYXRlZWBcbiAgICAgKiBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZCwgb3IgYW4gZXJyb3Igb2NjdXJzLiBgcmVzdWx0YCBpcyBhIG5ldyBvYmplY3QgY29uc2lzdGluZ1xuICAgICAqIG9mIGVhY2gga2V5IGZyb20gYG9iamAsIHdpdGggZWFjaCB0cmFuc2Zvcm1lZCB2YWx1ZSBvbiB0aGUgcmlnaHQtaGFuZCBzaWRlLlxuICAgICAqIEludm9rZWQgd2l0aCAoZXJyLCByZXN1bHQpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIG5vIGNhbGxiYWNrIGlzIHBhc3NlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1hcFZhbHVlc1NlcmllcyhvYmosIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gbWFwVmFsdWVzTGltaXQkMShvYmosIDEsIGl0ZXJhdGVlLCBjYWxsYmFjaylcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWNoZXMgdGhlIHJlc3VsdHMgb2YgYW4gYXN5bmMgZnVuY3Rpb24uIFdoZW4gY3JlYXRpbmcgYSBoYXNoIHRvIHN0b3JlXG4gICAgICogZnVuY3Rpb24gcmVzdWx0cyBhZ2FpbnN0LCB0aGUgY2FsbGJhY2sgaXMgb21pdHRlZCBmcm9tIHRoZSBoYXNoIGFuZCBhblxuICAgICAqIG9wdGlvbmFsIGhhc2ggZnVuY3Rpb24gY2FuIGJlIHVzZWQuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6IGlmIHRoZSBhc3luYyBmdW5jdGlvbiBlcnJzLCB0aGUgcmVzdWx0IHdpbGwgbm90IGJlIGNhY2hlZCBhbmRcbiAgICAgKiBzdWJzZXF1ZW50IGNhbGxzIHdpbGwgY2FsbCB0aGUgd3JhcHBlZCBmdW5jdGlvbi4qKlxuICAgICAqXG4gICAgICogSWYgbm8gaGFzaCBmdW5jdGlvbiBpcyBzcGVjaWZpZWQsIHRoZSBmaXJzdCBhcmd1bWVudCBpcyB1c2VkIGFzIGEgaGFzaCBrZXksXG4gICAgICogd2hpY2ggbWF5IHdvcmsgcmVhc29uYWJseSBpZiBpdCBpcyBhIHN0cmluZyBvciBhIGRhdGEgdHlwZSB0aGF0IGNvbnZlcnRzIHRvIGFcbiAgICAgKiBkaXN0aW5jdCBzdHJpbmcuIE5vdGUgdGhhdCBvYmplY3RzIGFuZCBhcnJheXMgd2lsbCBub3QgYmVoYXZlIHJlYXNvbmFibHkuXG4gICAgICogTmVpdGhlciB3aWxsIGNhc2VzIHdoZXJlIHRoZSBvdGhlciBhcmd1bWVudHMgYXJlIHNpZ25pZmljYW50LiBJbiBzdWNoIGNhc2VzLFxuICAgICAqIHNwZWNpZnkgeW91ciBvd24gaGFzaCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIFRoZSBjYWNoZSBvZiByZXN1bHRzIGlzIGV4cG9zZWQgYXMgdGhlIGBtZW1vYCBwcm9wZXJ0eSBvZiB0aGUgZnVuY3Rpb25cbiAgICAgKiByZXR1cm5lZCBieSBgbWVtb2l6ZWAuXG4gICAgICpcbiAgICAgKiBAbmFtZSBtZW1vaXplXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6VXRpbHNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGZuIC0gVGhlIGFzeW5jIGZ1bmN0aW9uIHRvIHByb3h5IGFuZCBjYWNoZSByZXN1bHRzIGZyb20uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaGFzaGVyIC0gQW4gb3B0aW9uYWwgZnVuY3Rpb24gZm9yIGdlbmVyYXRpbmcgYSBjdXN0b20gaGFzaFxuICAgICAqIGZvciBzdG9yaW5nIHJlc3VsdHMuIEl0IGhhcyBhbGwgdGhlIGFyZ3VtZW50cyBhcHBsaWVkIHRvIGl0IGFwYXJ0IGZyb20gdGhlXG4gICAgICogY2FsbGJhY2ssIGFuZCBtdXN0IGJlIHN5bmNocm9ub3VzLlxuICAgICAqIEByZXR1cm5zIHtBc3luY0Z1bmN0aW9ufSBhIG1lbW9pemVkIHZlcnNpb24gb2YgYGZuYFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgc2xvd19mbiA9IGZ1bmN0aW9uKG5hbWUsIGNhbGxiYWNrKSB7XG4gICAgICogICAgIC8vIGRvIHNvbWV0aGluZ1xuICAgICAqICAgICBjYWxsYmFjayhudWxsLCByZXN1bHQpO1xuICAgICAqIH07XG4gICAgICogdmFyIGZuID0gYXN5bmMubWVtb2l6ZShzbG93X2ZuKTtcbiAgICAgKlxuICAgICAqIC8vIGZuIGNhbiBub3cgYmUgdXNlZCBhcyBpZiBpdCB3ZXJlIHNsb3dfZm5cbiAgICAgKiBmbignc29tZSBuYW1lJywgZnVuY3Rpb24oKSB7XG4gICAgICogICAgIC8vIGNhbGxiYWNrXG4gICAgICogfSk7XG4gICAgICovXG4gICAgZnVuY3Rpb24gbWVtb2l6ZShmbiwgaGFzaGVyID0gdiA9PiB2KSB7XG4gICAgICAgIHZhciBtZW1vID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgdmFyIHF1ZXVlcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIHZhciBfZm4gPSB3cmFwQXN5bmMoZm4pO1xuICAgICAgICB2YXIgbWVtb2l6ZWQgPSBpbml0aWFsUGFyYW1zKChhcmdzLCBjYWxsYmFjaykgPT4ge1xuICAgICAgICAgICAgdmFyIGtleSA9IGhhc2hlciguLi5hcmdzKTtcbiAgICAgICAgICAgIGlmIChrZXkgaW4gbWVtbykge1xuICAgICAgICAgICAgICAgIHNldEltbWVkaWF0ZSQxKCgpID0+IGNhbGxiYWNrKG51bGwsIC4uLm1lbW9ba2V5XSkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChrZXkgaW4gcXVldWVzKSB7XG4gICAgICAgICAgICAgICAgcXVldWVzW2tleV0ucHVzaChjYWxsYmFjayk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldID0gW2NhbGxiYWNrXTtcbiAgICAgICAgICAgICAgICBfZm4oLi4uYXJncywgKGVyciwgLi4ucmVzdWx0QXJncykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyAjMTQ2NSBkb24ndCBtZW1vaXplIGlmIGFuIGVycm9yIG9jY3VycmVkXG4gICAgICAgICAgICAgICAgICAgIGlmICghZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZW1vW2tleV0gPSByZXN1bHRBcmdzO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHZhciBxID0gcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBxdWV1ZXNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBxLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcVtpXShlcnIsIC4uLnJlc3VsdEFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBtZW1vaXplZC5tZW1vID0gbWVtbztcbiAgICAgICAgbWVtb2l6ZWQudW5tZW1vaXplZCA9IGZuO1xuICAgICAgICByZXR1cm4gbWVtb2l6ZWQ7XG4gICAgfVxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGZpbGUgKi9cblxuICAgIC8qKlxuICAgICAqIENhbGxzIGBjYWxsYmFja2Agb24gYSBsYXRlciBsb29wIGFyb3VuZCB0aGUgZXZlbnQgbG9vcC4gSW4gTm9kZS5qcyB0aGlzIGp1c3RcbiAgICAgKiBjYWxscyBgcHJvY2Vzcy5uZXh0VGlja2AuICBJbiB0aGUgYnJvd3NlciBpdCB3aWxsIHVzZSBgc2V0SW1tZWRpYXRlYCBpZlxuICAgICAqIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGBzZXRUaW1lb3V0KGNhbGxiYWNrLCAwKWAsIHdoaWNoIG1lYW5zIG90aGVyIGhpZ2hlclxuICAgICAqIHByaW9yaXR5IGV2ZW50cyBtYXkgcHJlY2VkZSB0aGUgZXhlY3V0aW9uIG9mIGBjYWxsYmFja2AuXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIHVzZWQgaW50ZXJuYWxseSBmb3IgYnJvd3Nlci1jb21wYXRpYmlsaXR5IHB1cnBvc2VzLlxuICAgICAqXG4gICAgICogQG5hbWUgbmV4dFRpY2tcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpVdGlsc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5zZXRJbW1lZGlhdGVde0BsaW5rIG1vZHVsZTpVdGlscy5zZXRJbW1lZGlhdGV9XG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAtIFRoZSBmdW5jdGlvbiB0byBjYWxsIG9uIGEgbGF0ZXIgbG9vcCBhcm91bmRcbiAgICAgKiB0aGUgZXZlbnQgbG9vcC4gSW52b2tlZCB3aXRoIChhcmdzLi4uKS5cbiAgICAgKiBAcGFyYW0gey4uLip9IGFyZ3MuLi4gLSBhbnkgbnVtYmVyIG9mIGFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlXG4gICAgICogY2FsbGJhY2sgb24gdGhlIG5leHQgdGljay5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGNhbGxfb3JkZXIgPSBbXTtcbiAgICAgKiBhc3luYy5uZXh0VGljayhmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgY2FsbF9vcmRlci5wdXNoKCd0d28nKTtcbiAgICAgKiAgICAgLy8gY2FsbF9vcmRlciBub3cgZXF1YWxzIFsnb25lJywndHdvJ11cbiAgICAgKiB9KTtcbiAgICAgKiBjYWxsX29yZGVyLnB1c2goJ29uZScpO1xuICAgICAqXG4gICAgICogYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICogICAgIC8vIGEsIGIsIGFuZCBjIGVxdWFsIDEsIDIsIGFuZCAzXG4gICAgICogfSwgMSwgMiwgMyk7XG4gICAgICovXG4gICAgdmFyIF9kZWZlcjtcblxuICAgIGlmIChoYXNOZXh0VGljaykge1xuICAgICAgICBfZGVmZXIgPSBwcm9jZXNzLm5leHRUaWNrO1xuICAgIH0gZWxzZSBpZiAoaGFzU2V0SW1tZWRpYXRlKSB7XG4gICAgICAgIF9kZWZlciA9IHNldEltbWVkaWF0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBfZGVmZXIgPSBmYWxsYmFjaztcbiAgICB9XG5cbiAgICB2YXIgbmV4dFRpY2sgPSB3cmFwKF9kZWZlcik7XG5cbiAgICB2YXIgX3BhcmFsbGVsID0gYXdhaXRpZnkoKGVhY2hmbiwgdGFza3MsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIHZhciByZXN1bHRzID0gaXNBcnJheUxpa2UodGFza3MpID8gW10gOiB7fTtcblxuICAgICAgICBlYWNoZm4odGFza3MsICh0YXNrLCBrZXksIHRhc2tDYikgPT4ge1xuICAgICAgICAgICAgd3JhcEFzeW5jKHRhc2spKChlcnIsIC4uLnJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQubGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgICAgICAgICBbcmVzdWx0XSA9IHJlc3VsdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzdWx0c1trZXldID0gcmVzdWx0O1xuICAgICAgICAgICAgICAgIHRhc2tDYihlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGVyciA9PiBjYWxsYmFjayhlcnIsIHJlc3VsdHMpKTtcbiAgICB9LCAzKTtcblxuICAgIC8qKlxuICAgICAqIFJ1biB0aGUgYHRhc2tzYCBjb2xsZWN0aW9uIG9mIGZ1bmN0aW9ucyBpbiBwYXJhbGxlbCwgd2l0aG91dCB3YWl0aW5nIHVudGlsXG4gICAgICogdGhlIHByZXZpb3VzIGZ1bmN0aW9uIGhhcyBjb21wbGV0ZWQuIElmIGFueSBvZiB0aGUgZnVuY3Rpb25zIHBhc3MgYW4gZXJyb3IgdG9cbiAgICAgKiBpdHMgY2FsbGJhY2ssIHRoZSBtYWluIGBjYWxsYmFja2AgaXMgaW1tZWRpYXRlbHkgY2FsbGVkIHdpdGggdGhlIHZhbHVlIG9mIHRoZVxuICAgICAqIGVycm9yLiBPbmNlIHRoZSBgdGFza3NgIGhhdmUgY29tcGxldGVkLCB0aGUgcmVzdWx0cyBhcmUgcGFzc2VkIHRvIHRoZSBmaW5hbFxuICAgICAqIGBjYWxsYmFja2AgYXMgYW4gYXJyYXkuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogYHBhcmFsbGVsYCBpcyBhYm91dCBraWNraW5nLW9mZiBJL08gdGFza3MgaW4gcGFyYWxsZWwsIG5vdCBhYm91dFxuICAgICAqIHBhcmFsbGVsIGV4ZWN1dGlvbiBvZiBjb2RlLiAgSWYgeW91ciB0YXNrcyBkbyBub3QgdXNlIGFueSB0aW1lcnMgb3IgcGVyZm9ybVxuICAgICAqIGFueSBJL08sIHRoZXkgd2lsbCBhY3R1YWxseSBiZSBleGVjdXRlZCBpbiBzZXJpZXMuICBBbnkgc3luY2hyb25vdXMgc2V0dXBcbiAgICAgKiBzZWN0aW9ucyBmb3IgZWFjaCB0YXNrIHdpbGwgaGFwcGVuIG9uZSBhZnRlciB0aGUgb3RoZXIuICBKYXZhU2NyaXB0IHJlbWFpbnNcbiAgICAgKiBzaW5nbGUtdGhyZWFkZWQuXG4gICAgICpcbiAgICAgKiAqKkhpbnQ6KiogVXNlIFtgcmVmbGVjdGBde0BsaW5rIG1vZHVsZTpVdGlscy5yZWZsZWN0fSB0byBjb250aW51ZSB0aGVcbiAgICAgKiBleGVjdXRpb24gb2Ygb3RoZXIgdGFza3Mgd2hlbiBhIHRhc2sgZmFpbHMuXG4gICAgICpcbiAgICAgKiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHVzZSBhbiBvYmplY3QgaW5zdGVhZCBvZiBhbiBhcnJheS4gRWFjaCBwcm9wZXJ0eSB3aWxsXG4gICAgICogYmUgcnVuIGFzIGEgZnVuY3Rpb24gYW5kIHRoZSByZXN1bHRzIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBmaW5hbCBgY2FsbGJhY2tgXG4gICAgICogYXMgYW4gb2JqZWN0IGluc3RlYWQgb2YgYW4gYXJyYXkuIFRoaXMgY2FuIGJlIGEgbW9yZSByZWFkYWJsZSB3YXkgb2YgaGFuZGxpbmdcbiAgICAgKiByZXN1bHRzIGZyb20ge0BsaW5rIGFzeW5jLnBhcmFsbGVsfS5cbiAgICAgKlxuICAgICAqIEBuYW1lIHBhcmFsbGVsXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGNhdGVnb3J5IENvbnRyb2wgRmxvd1xuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IHRhc2tzIC0gQSBjb2xsZWN0aW9uIG9mXG4gICAgICogW2FzeW5jIGZ1bmN0aW9uc117QGxpbmsgQXN5bmNGdW5jdGlvbn0gdG8gcnVuLlxuICAgICAqIEVhY2ggYXN5bmMgZnVuY3Rpb24gY2FuIGNvbXBsZXRlIHdpdGggYW55IG51bWJlciBvZiBvcHRpb25hbCBgcmVzdWx0YCB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEFuIG9wdGlvbmFsIGNhbGxiYWNrIHRvIHJ1biBvbmNlIGFsbCB0aGVcbiAgICAgKiBmdW5jdGlvbnMgaGF2ZSBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LiBUaGlzIGZ1bmN0aW9uIGdldHMgYSByZXN1bHRzIGFycmF5XG4gICAgICogKG9yIG9iamVjdCkgY29udGFpbmluZyBhbGwgdGhlIHJlc3VsdCBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSB0YXNrIGNhbGxiYWNrcy5cbiAgICAgKiBJbnZva2VkIHdpdGggKGVyciwgcmVzdWx0cykuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgYSBjYWxsYmFjayBpcyBub3QgcGFzc2VkXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy9Vc2luZyBDYWxsYmFja3NcbiAgICAgKiBhc3luYy5wYXJhbGxlbChbXG4gICAgICogICAgIGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsICdvbmUnKTtcbiAgICAgKiAgICAgICAgIH0sIDIwMCk7XG4gICAgICogICAgIH0sXG4gICAgICogICAgIGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsICd0d28nKTtcbiAgICAgKiAgICAgICAgIH0sIDEwMCk7XG4gICAgICogICAgIH1cbiAgICAgKiBdLCBmdW5jdGlvbihlcnIsIHJlc3VsdHMpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgIC8vIHJlc3VsdHMgaXMgZXF1YWwgdG8gWydvbmUnLCd0d28nXSBldmVuIHRob3VnaFxuICAgICAqICAgICAvLyB0aGUgc2Vjb25kIGZ1bmN0aW9uIGhhZCBhIHNob3J0ZXIgdGltZW91dC5cbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIGFuIGV4YW1wbGUgdXNpbmcgYW4gb2JqZWN0IGluc3RlYWQgb2YgYW4gYXJyYXlcbiAgICAgKiBhc3luYy5wYXJhbGxlbCh7XG4gICAgICogICAgIG9uZTogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICogICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgMSk7XG4gICAgICogICAgICAgICB9LCAyMDApO1xuICAgICAqICAgICB9LFxuICAgICAqICAgICB0d286IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIDIpO1xuICAgICAqICAgICAgICAgfSwgMTAwKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH0sIGZ1bmN0aW9uKGVyciwgcmVzdWx0cykge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiAgICAgLy8gcmVzdWx0cyBpcyBlcXVhbCB0bzogeyBvbmU6IDEsIHR3bzogMiB9XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvL1VzaW5nIFByb21pc2VzXG4gICAgICogYXN5bmMucGFyYWxsZWwoW1xuICAgICAqICAgICBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCAnb25lJyk7XG4gICAgICogICAgICAgICB9LCAyMDApO1xuICAgICAqICAgICB9LFxuICAgICAqICAgICBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCAndHdvJyk7XG4gICAgICogICAgICAgICB9LCAxMDApO1xuICAgICAqICAgICB9XG4gICAgICogXSkudGhlbihyZXN1bHRzID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgIC8vIHJlc3VsdHMgaXMgZXF1YWwgdG8gWydvbmUnLCd0d28nXSBldmVuIHRob3VnaFxuICAgICAqICAgICAvLyB0aGUgc2Vjb25kIGZ1bmN0aW9uIGhhZCBhIHNob3J0ZXIgdGltZW91dC5cbiAgICAgKiB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gYW4gZXhhbXBsZSB1c2luZyBhbiBvYmplY3QgaW5zdGVhZCBvZiBhbiBhcnJheVxuICAgICAqIGFzeW5jLnBhcmFsbGVsKHtcbiAgICAgKiAgICAgb25lOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCAxKTtcbiAgICAgKiAgICAgICAgIH0sIDIwMCk7XG4gICAgICogICAgIH0sXG4gICAgICogICAgIHR3bzogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICogICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgMik7XG4gICAgICogICAgICAgICB9LCAxMDApO1xuICAgICAqICAgICB9XG4gICAgICogfSkudGhlbihyZXN1bHRzID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgIC8vIHJlc3VsdHMgaXMgZXF1YWwgdG86IHsgb25lOiAxLCB0d286IDIgfVxuICAgICAqIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvL1VzaW5nIGFzeW5jL2F3YWl0XG4gICAgICogYXN5bmMgKCkgPT4ge1xuICAgICAqICAgICB0cnkge1xuICAgICAqICAgICAgICAgbGV0IHJlc3VsdHMgPSBhd2FpdCBhc3luYy5wYXJhbGxlbChbXG4gICAgICogICAgICAgICAgICAgZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsICdvbmUnKTtcbiAgICAgKiAgICAgICAgICAgICAgICAgfSwgMjAwKTtcbiAgICAgKiAgICAgICAgICAgICB9LFxuICAgICAqICAgICAgICAgICAgIGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICogICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCAndHdvJyk7XG4gICAgICogICAgICAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgICogICAgICAgICAgICAgfVxuICAgICAqICAgICAgICAgXSk7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiAgICAgICAgIC8vIHJlc3VsdHMgaXMgZXF1YWwgdG8gWydvbmUnLCd0d28nXSBldmVuIHRob3VnaFxuICAgICAqICAgICAgICAgLy8gdGhlIHNlY29uZCBmdW5jdGlvbiBoYWQgYSBzaG9ydGVyIHRpbWVvdXQuXG4gICAgICogICAgIH1cbiAgICAgKiAgICAgY2F0Y2ggKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIC8vIGFuIGV4YW1wbGUgdXNpbmcgYW4gb2JqZWN0IGluc3RlYWQgb2YgYW4gYXJyYXlcbiAgICAgKiBhc3luYyAoKSA9PiB7XG4gICAgICogICAgIHRyeSB7XG4gICAgICogICAgICAgICBsZXQgcmVzdWx0cyA9IGF3YWl0IGFzeW5jLnBhcmFsbGVsKHtcbiAgICAgKiAgICAgICAgICAgICBvbmU6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICogICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCAxKTtcbiAgICAgKiAgICAgICAgICAgICAgICAgfSwgMjAwKTtcbiAgICAgKiAgICAgICAgICAgICB9LFxuICAgICAqICAgICAgICAgICAgdHdvOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgMik7XG4gICAgICogICAgICAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgICogICAgICAgICAgICB9XG4gICAgICogICAgICAgICB9KTtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgICAgICAgLy8gcmVzdWx0cyBpcyBlcXVhbCB0bzogeyBvbmU6IDEsIHR3bzogMiB9XG4gICAgICogICAgIH1cbiAgICAgKiAgICAgY2F0Y2ggKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHBhcmFsbGVsKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX3BhcmFsbGVsKGVhY2hPZiQxLCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBzYW1lIGFzIFtgcGFyYWxsZWxgXXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cucGFyYWxsZWx9IGJ1dCBydW5zIGEgbWF4aW11bSBvZiBgbGltaXRgIGFzeW5jIG9wZXJhdGlvbnMgYXQgYVxuICAgICAqIHRpbWUuXG4gICAgICpcbiAgICAgKiBAbmFtZSBwYXJhbGxlbExpbWl0XG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMucGFyYWxsZWxde0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy5wYXJhbGxlbH1cbiAgICAgKiBAY2F0ZWdvcnkgQ29udHJvbCBGbG93XG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gdGFza3MgLSBBIGNvbGxlY3Rpb24gb2ZcbiAgICAgKiBbYXN5bmMgZnVuY3Rpb25zXXtAbGluayBBc3luY0Z1bmN0aW9ufSB0byBydW4uXG4gICAgICogRWFjaCBhc3luYyBmdW5jdGlvbiBjYW4gY29tcGxldGUgd2l0aCBhbnkgbnVtYmVyIG9mIG9wdGlvbmFsIGByZXN1bHRgIHZhbHVlcy5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbGltaXQgLSBUaGUgbWF4aW11bSBudW1iZXIgb2YgYXN5bmMgb3BlcmF0aW9ucyBhdCBhIHRpbWUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEFuIG9wdGlvbmFsIGNhbGxiYWNrIHRvIHJ1biBvbmNlIGFsbCB0aGVcbiAgICAgKiBmdW5jdGlvbnMgaGF2ZSBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LiBUaGlzIGZ1bmN0aW9uIGdldHMgYSByZXN1bHRzIGFycmF5XG4gICAgICogKG9yIG9iamVjdCkgY29udGFpbmluZyBhbGwgdGhlIHJlc3VsdCBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSB0YXNrIGNhbGxiYWNrcy5cbiAgICAgKiBJbnZva2VkIHdpdGggKGVyciwgcmVzdWx0cykuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgYSBjYWxsYmFjayBpcyBub3QgcGFzc2VkXG4gICAgICovXG4gICAgZnVuY3Rpb24gcGFyYWxsZWxMaW1pdCh0YXNrcywgbGltaXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBfcGFyYWxsZWwoZWFjaE9mTGltaXQkMihsaW1pdCksIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSBxdWV1ZSBvZiB0YXNrcyBmb3IgdGhlIHdvcmtlciBmdW5jdGlvbiB0byBjb21wbGV0ZS5cbiAgICAgKiBAdHlwZWRlZiB7SXRlcmFibGV9IFF1ZXVlT2JqZWN0XG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb250cm9sRmxvd1xuICAgICAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IGxlbmd0aCAtIGEgZnVuY3Rpb24gcmV0dXJuaW5nIHRoZSBudW1iZXIgb2YgaXRlbXNcbiAgICAgKiB3YWl0aW5nIHRvIGJlIHByb2Nlc3NlZC4gSW52b2tlIHdpdGggYHF1ZXVlLmxlbmd0aCgpYC5cbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IHN0YXJ0ZWQgLSBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCBhbnlcbiAgICAgKiBpdGVtcyBoYXZlIGJlZW4gcHVzaGVkIGFuZCBwcm9jZXNzZWQgYnkgdGhlIHF1ZXVlLlxuICAgICAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IHJ1bm5pbmcgLSBhIGZ1bmN0aW9uIHJldHVybmluZyB0aGUgbnVtYmVyIG9mIGl0ZW1zXG4gICAgICogY3VycmVudGx5IGJlaW5nIHByb2Nlc3NlZC4gSW52b2tlIHdpdGggYHF1ZXVlLnJ1bm5pbmcoKWAuXG4gICAgICogQHByb3BlcnR5IHtGdW5jdGlvbn0gd29ya2Vyc0xpc3QgLSBhIGZ1bmN0aW9uIHJldHVybmluZyB0aGUgYXJyYXkgb2YgaXRlbXNcbiAgICAgKiBjdXJyZW50bHkgYmVpbmcgcHJvY2Vzc2VkLiBJbnZva2Ugd2l0aCBgcXVldWUud29ya2Vyc0xpc3QoKWAuXG4gICAgICogQHByb3BlcnR5IHtGdW5jdGlvbn0gaWRsZSAtIGEgZnVuY3Rpb24gcmV0dXJuaW5nIGZhbHNlIGlmIHRoZXJlIGFyZSBpdGVtc1xuICAgICAqIHdhaXRpbmcgb3IgYmVpbmcgcHJvY2Vzc2VkLCBvciB0cnVlIGlmIG5vdC4gSW52b2tlIHdpdGggYHF1ZXVlLmlkbGUoKWAuXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IGNvbmN1cnJlbmN5IC0gYW4gaW50ZWdlciBmb3IgZGV0ZXJtaW5pbmcgaG93IG1hbnkgYHdvcmtlcmBcbiAgICAgKiBmdW5jdGlvbnMgc2hvdWxkIGJlIHJ1biBpbiBwYXJhbGxlbC4gVGhpcyBwcm9wZXJ0eSBjYW4gYmUgY2hhbmdlZCBhZnRlciBhXG4gICAgICogYHF1ZXVlYCBpcyBjcmVhdGVkIHRvIGFsdGVyIHRoZSBjb25jdXJyZW5jeSBvbi10aGUtZmx5LlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBwYXlsb2FkIC0gYW4gaW50ZWdlciB0aGF0IHNwZWNpZmllcyBob3cgbWFueSBpdGVtcyBhcmVcbiAgICAgKiBwYXNzZWQgdG8gdGhlIHdvcmtlciBmdW5jdGlvbiBhdCBhIHRpbWUuIG9ubHkgYXBwbGllcyBpZiB0aGlzIGlzIGFcbiAgICAgKiBbY2FyZ29de0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy5jYXJnb30gb2JqZWN0XG4gICAgICogQHByb3BlcnR5IHtBc3luY0Z1bmN0aW9ufSBwdXNoIC0gYWRkIGEgbmV3IHRhc2sgdG8gdGhlIGBxdWV1ZWAuIENhbGxzIGBjYWxsYmFja2BcbiAgICAgKiBvbmNlIHRoZSBgd29ya2VyYCBoYXMgZmluaXNoZWQgcHJvY2Vzc2luZyB0aGUgdGFzay4gSW5zdGVhZCBvZiBhIHNpbmdsZSB0YXNrLFxuICAgICAqIGEgYHRhc2tzYCBhcnJheSBjYW4gYmUgc3VibWl0dGVkLiBUaGUgcmVzcGVjdGl2ZSBjYWxsYmFjayBpcyB1c2VkIGZvciBldmVyeVxuICAgICAqIHRhc2sgaW4gdGhlIGxpc3QuIEludm9rZSB3aXRoIGBxdWV1ZS5wdXNoKHRhc2ssIFtjYWxsYmFja10pYCxcbiAgICAgKiBAcHJvcGVydHkge0FzeW5jRnVuY3Rpb259IHVuc2hpZnQgLSBhZGQgYSBuZXcgdGFzayB0byB0aGUgZnJvbnQgb2YgdGhlIGBxdWV1ZWAuXG4gICAgICogSW52b2tlIHdpdGggYHF1ZXVlLnVuc2hpZnQodGFzaywgW2NhbGxiYWNrXSlgLlxuICAgICAqIEBwcm9wZXJ0eSB7QXN5bmNGdW5jdGlvbn0gcHVzaEFzeW5jIC0gdGhlIHNhbWUgYXMgYHEucHVzaGAsIGV4Y2VwdCB0aGlzIHJldHVybnNcbiAgICAgKiBhIHByb21pc2UgdGhhdCByZWplY3RzIGlmIGFuIGVycm9yIG9jY3Vycy5cbiAgICAgKiBAcHJvcGVydHkge0FzeW5jRnVuY3Rpb259IHVuc2hpZnRBc3luYyAtIHRoZSBzYW1lIGFzIGBxLnVuc2hpZnRgLCBleGNlcHQgdGhpcyByZXR1cm5zXG4gICAgICogYSBwcm9taXNlIHRoYXQgcmVqZWN0cyBpZiBhbiBlcnJvciBvY2N1cnMuXG4gICAgICogQHByb3BlcnR5IHtGdW5jdGlvbn0gcmVtb3ZlIC0gcmVtb3ZlIGl0ZW1zIGZyb20gdGhlIHF1ZXVlIHRoYXQgbWF0Y2ggYSB0ZXN0XG4gICAgICogZnVuY3Rpb24uICBUaGUgdGVzdCBmdW5jdGlvbiB3aWxsIGJlIHBhc3NlZCBhbiBvYmplY3Qgd2l0aCBhIGBkYXRhYCBwcm9wZXJ0eSxcbiAgICAgKiBhbmQgYSBgcHJpb3JpdHlgIHByb3BlcnR5LCBpZiB0aGlzIGlzIGFcbiAgICAgKiBbcHJpb3JpdHlRdWV1ZV17QGxpbmsgbW9kdWxlOkNvbnRyb2xGbG93LnByaW9yaXR5UXVldWV9IG9iamVjdC5cbiAgICAgKiBJbnZva2VkIHdpdGggYHF1ZXVlLnJlbW92ZSh0ZXN0Rm4pYCwgd2hlcmUgYHRlc3RGbmAgaXMgb2YgdGhlIGZvcm1cbiAgICAgKiBgZnVuY3Rpb24gKHtkYXRhLCBwcmlvcml0eX0pIHt9YCBhbmQgcmV0dXJucyBhIEJvb2xlYW4uXG4gICAgICogQHByb3BlcnR5IHtGdW5jdGlvbn0gc2F0dXJhdGVkIC0gYSBmdW5jdGlvbiB0aGF0IHNldHMgYSBjYWxsYmFjayB0aGF0IGlzXG4gICAgICogY2FsbGVkIHdoZW4gdGhlIG51bWJlciBvZiBydW5uaW5nIHdvcmtlcnMgaGl0cyB0aGUgYGNvbmN1cnJlbmN5YCBsaW1pdCwgYW5kXG4gICAgICogZnVydGhlciB0YXNrcyB3aWxsIGJlIHF1ZXVlZC4gIElmIHRoZSBjYWxsYmFjayBpcyBvbWl0dGVkLCBgcS5zYXR1cmF0ZWQoKWBcbiAgICAgKiByZXR1cm5zIGEgcHJvbWlzZSBmb3IgdGhlIG5leHQgb2NjdXJyZW5jZS5cbiAgICAgKiBAcHJvcGVydHkge0Z1bmN0aW9ufSB1bnNhdHVyYXRlZCAtIGEgZnVuY3Rpb24gdGhhdCBzZXRzIGEgY2FsbGJhY2sgdGhhdCBpc1xuICAgICAqIGNhbGxlZCB3aGVuIHRoZSBudW1iZXIgb2YgcnVubmluZyB3b3JrZXJzIGlzIGxlc3MgdGhhbiB0aGUgYGNvbmN1cnJlbmN5YCAmXG4gICAgICogYGJ1ZmZlcmAgbGltaXRzLCBhbmQgZnVydGhlciB0YXNrcyB3aWxsIG5vdCBiZSBxdWV1ZWQuIElmIHRoZSBjYWxsYmFjayBpc1xuICAgICAqIG9taXR0ZWQsIGBxLnVuc2F0dXJhdGVkKClgIHJldHVybnMgYSBwcm9taXNlIGZvciB0aGUgbmV4dCBvY2N1cnJlbmNlLlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBidWZmZXIgLSBBIG1pbmltdW0gdGhyZXNob2xkIGJ1ZmZlciBpbiBvcmRlciB0byBzYXkgdGhhdFxuICAgICAqIHRoZSBgcXVldWVgIGlzIGB1bnNhdHVyYXRlZGAuXG4gICAgICogQHByb3BlcnR5IHtGdW5jdGlvbn0gZW1wdHkgLSBhIGZ1bmN0aW9uIHRoYXQgc2V0cyBhIGNhbGxiYWNrIHRoYXQgaXMgY2FsbGVkXG4gICAgICogd2hlbiB0aGUgbGFzdCBpdGVtIGZyb20gdGhlIGBxdWV1ZWAgaXMgZ2l2ZW4gdG8gYSBgd29ya2VyYC4gSWYgdGhlIGNhbGxiYWNrXG4gICAgICogaXMgb21pdHRlZCwgYHEuZW1wdHkoKWAgcmV0dXJucyBhIHByb21pc2UgZm9yIHRoZSBuZXh0IG9jY3VycmVuY2UuXG4gICAgICogQHByb3BlcnR5IHtGdW5jdGlvbn0gZHJhaW4gLSBhIGZ1bmN0aW9uIHRoYXQgc2V0cyBhIGNhbGxiYWNrIHRoYXQgaXMgY2FsbGVkXG4gICAgICogd2hlbiB0aGUgbGFzdCBpdGVtIGZyb20gdGhlIGBxdWV1ZWAgaGFzIHJldHVybmVkIGZyb20gdGhlIGB3b3JrZXJgLiBJZiB0aGVcbiAgICAgKiBjYWxsYmFjayBpcyBvbWl0dGVkLCBgcS5kcmFpbigpYCByZXR1cm5zIGEgcHJvbWlzZSBmb3IgdGhlIG5leHQgb2NjdXJyZW5jZS5cbiAgICAgKiBAcHJvcGVydHkge0Z1bmN0aW9ufSBlcnJvciAtIGEgZnVuY3Rpb24gdGhhdCBzZXRzIGEgY2FsbGJhY2sgdGhhdCBpcyBjYWxsZWRcbiAgICAgKiB3aGVuIGEgdGFzayBlcnJvcnMuIEhhcyB0aGUgc2lnbmF0dXJlIGBmdW5jdGlvbihlcnJvciwgdGFzaylgLiBJZiB0aGVcbiAgICAgKiBjYWxsYmFjayBpcyBvbWl0dGVkLCBgZXJyb3IoKWAgcmV0dXJucyBhIHByb21pc2UgdGhhdCByZWplY3RzIG9uIHRoZSBuZXh0XG4gICAgICogZXJyb3IuXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBwYXVzZWQgLSBhIGJvb2xlYW4gZm9yIGRldGVybWluaW5nIHdoZXRoZXIgdGhlIHF1ZXVlIGlzXG4gICAgICogaW4gYSBwYXVzZWQgc3RhdGUuXG4gICAgICogQHByb3BlcnR5IHtGdW5jdGlvbn0gcGF1c2UgLSBhIGZ1bmN0aW9uIHRoYXQgcGF1c2VzIHRoZSBwcm9jZXNzaW5nIG9mIHRhc2tzXG4gICAgICogdW50aWwgYHJlc3VtZSgpYCBpcyBjYWxsZWQuIEludm9rZSB3aXRoIGBxdWV1ZS5wYXVzZSgpYC5cbiAgICAgKiBAcHJvcGVydHkge0Z1bmN0aW9ufSByZXN1bWUgLSBhIGZ1bmN0aW9uIHRoYXQgcmVzdW1lcyB0aGUgcHJvY2Vzc2luZyBvZlxuICAgICAqIHF1ZXVlZCB0YXNrcyB3aGVuIHRoZSBxdWV1ZSBpcyBwYXVzZWQuIEludm9rZSB3aXRoIGBxdWV1ZS5yZXN1bWUoKWAuXG4gICAgICogQHByb3BlcnR5IHtGdW5jdGlvbn0ga2lsbCAtIGEgZnVuY3Rpb24gdGhhdCByZW1vdmVzIHRoZSBgZHJhaW5gIGNhbGxiYWNrIGFuZFxuICAgICAqIGVtcHRpZXMgcmVtYWluaW5nIHRhc2tzIGZyb20gdGhlIHF1ZXVlIGZvcmNpbmcgaXQgdG8gZ28gaWRsZS4gTm8gbW9yZSB0YXNrc1xuICAgICAqIHNob3VsZCBiZSBwdXNoZWQgdG8gdGhlIHF1ZXVlIGFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4gSW52b2tlIHdpdGggYHF1ZXVlLmtpbGwoKWAuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGNvbnN0IHEgPSBhc3luYy5xdWV1ZSh3b3JrZXIsIDIpXG4gICAgICogcS5wdXNoKGl0ZW0xKVxuICAgICAqIHEucHVzaChpdGVtMilcbiAgICAgKiBxLnB1c2goaXRlbTMpXG4gICAgICogLy8gcXVldWVzIGFyZSBpdGVyYWJsZSwgc3ByZWFkIGludG8gYW4gYXJyYXkgdG8gaW5zcGVjdFxuICAgICAqIGNvbnN0IGl0ZW1zID0gWy4uLnFdIC8vIFtpdGVtMSwgaXRlbTIsIGl0ZW0zXVxuICAgICAqIC8vIG9yIHVzZSBmb3Igb2ZcbiAgICAgKiBmb3IgKGxldCBpdGVtIG9mIHEpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coaXRlbSlcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBxLmRyYWluKCgpID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coJ2FsbCBkb25lJylcbiAgICAgKiB9KVxuICAgICAqIC8vIG9yXG4gICAgICogYXdhaXQgcS5kcmFpbigpXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgYHF1ZXVlYCBvYmplY3Qgd2l0aCB0aGUgc3BlY2lmaWVkIGBjb25jdXJyZW5jeWAuIFRhc2tzIGFkZGVkIHRvIHRoZVxuICAgICAqIGBxdWV1ZWAgYXJlIHByb2Nlc3NlZCBpbiBwYXJhbGxlbCAodXAgdG8gdGhlIGBjb25jdXJyZW5jeWAgbGltaXQpLiBJZiBhbGxcbiAgICAgKiBgd29ya2VyYHMgYXJlIGluIHByb2dyZXNzLCB0aGUgdGFzayBpcyBxdWV1ZWQgdW50aWwgb25lIGJlY29tZXMgYXZhaWxhYmxlLlxuICAgICAqIE9uY2UgYSBgd29ya2VyYCBjb21wbGV0ZXMgYSBgdGFza2AsIHRoYXQgYHRhc2tgJ3MgY2FsbGJhY2sgaXMgY2FsbGVkLlxuICAgICAqXG4gICAgICogQG5hbWUgcXVldWVcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb250cm9sRmxvd1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgQ29udHJvbCBGbG93XG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSB3b3JrZXIgLSBBbiBhc3luYyBmdW5jdGlvbiBmb3IgcHJvY2Vzc2luZyBhIHF1ZXVlZCB0YXNrLlxuICAgICAqIElmIHlvdSB3YW50IHRvIGhhbmRsZSBlcnJvcnMgZnJvbSBhbiBpbmRpdmlkdWFsIHRhc2ssIHBhc3MgYSBjYWxsYmFjayB0b1xuICAgICAqIGBxLnB1c2goKWAuIEludm9rZWQgd2l0aCAodGFzaywgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbY29uY3VycmVuY3k9MV0gLSBBbiBgaW50ZWdlcmAgZm9yIGRldGVybWluaW5nIGhvdyBtYW55XG4gICAgICogYHdvcmtlcmAgZnVuY3Rpb25zIHNob3VsZCBiZSBydW4gaW4gcGFyYWxsZWwuICBJZiBvbWl0dGVkLCB0aGUgY29uY3VycmVuY3lcbiAgICAgKiBkZWZhdWx0cyB0byBgMWAuICBJZiB0aGUgY29uY3VycmVuY3kgaXMgYDBgLCBhbiBlcnJvciBpcyB0aHJvd24uXG4gICAgICogQHJldHVybnMge21vZHVsZTpDb250cm9sRmxvdy5RdWV1ZU9iamVjdH0gQSBxdWV1ZSBvYmplY3QgdG8gbWFuYWdlIHRoZSB0YXNrcy4gQ2FsbGJhY2tzIGNhbiBiZVxuICAgICAqIGF0dGFjaGVkIGFzIGNlcnRhaW4gcHJvcGVydGllcyB0byBsaXN0ZW4gZm9yIHNwZWNpZmljIGV2ZW50cyBkdXJpbmcgdGhlXG4gICAgICogbGlmZWN5Y2xlIG9mIHRoZSBxdWV1ZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gY3JlYXRlIGEgcXVldWUgb2JqZWN0IHdpdGggY29uY3VycmVuY3kgMlxuICAgICAqIHZhciBxID0gYXN5bmMucXVldWUoZnVuY3Rpb24odGFzaywgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coJ2hlbGxvICcgKyB0YXNrLm5hbWUpO1xuICAgICAqICAgICBjYWxsYmFjaygpO1xuICAgICAqIH0sIDIpO1xuICAgICAqXG4gICAgICogLy8gYXNzaWduIGEgY2FsbGJhY2tcbiAgICAgKiBxLmRyYWluKGZ1bmN0aW9uKCkge1xuICAgICAqICAgICBjb25zb2xlLmxvZygnYWxsIGl0ZW1zIGhhdmUgYmVlbiBwcm9jZXNzZWQnKTtcbiAgICAgKiB9KTtcbiAgICAgKiAvLyBvciBhd2FpdCB0aGUgZW5kXG4gICAgICogYXdhaXQgcS5kcmFpbigpXG4gICAgICpcbiAgICAgKiAvLyBhc3NpZ24gYW4gZXJyb3IgY2FsbGJhY2tcbiAgICAgKiBxLmVycm9yKGZ1bmN0aW9uKGVyciwgdGFzaykge1xuICAgICAqICAgICBjb25zb2xlLmVycm9yKCd0YXNrIGV4cGVyaWVuY2VkIGFuIGVycm9yJyk7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBhZGQgc29tZSBpdGVtcyB0byB0aGUgcXVldWVcbiAgICAgKiBxLnB1c2goe25hbWU6ICdmb28nfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKCdmaW5pc2hlZCBwcm9jZXNzaW5nIGZvbycpO1xuICAgICAqIH0pO1xuICAgICAqIC8vIGNhbGxiYWNrIGlzIG9wdGlvbmFsXG4gICAgICogcS5wdXNoKHtuYW1lOiAnYmFyJ30pO1xuICAgICAqXG4gICAgICogLy8gYWRkIHNvbWUgaXRlbXMgdG8gdGhlIHF1ZXVlIChiYXRjaC13aXNlKVxuICAgICAqIHEucHVzaChbe25hbWU6ICdiYXonfSx7bmFtZTogJ2JheSd9LHtuYW1lOiAnYmF4J31dLCBmdW5jdGlvbihlcnIpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coJ2ZpbmlzaGVkIHByb2Nlc3NpbmcgaXRlbScpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gYWRkIHNvbWUgaXRlbXMgdG8gdGhlIGZyb250IG9mIHRoZSBxdWV1ZVxuICAgICAqIHEudW5zaGlmdCh7bmFtZTogJ2Jhcid9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKCdmaW5pc2hlZCBwcm9jZXNzaW5nIGJhcicpO1xuICAgICAqIH0pO1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHF1ZXVlICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG4gICAgICAgIHZhciBfd29ya2VyID0gd3JhcEFzeW5jKHdvcmtlcik7XG4gICAgICAgIHJldHVybiBxdWV1ZSQxKChpdGVtcywgY2IpID0+IHtcbiAgICAgICAgICAgIF93b3JrZXIoaXRlbXNbMF0sIGNiKTtcbiAgICAgICAgfSwgY29uY3VycmVuY3ksIDEpO1xuICAgIH1cblxuICAgIC8vIEJpbmFyeSBtaW4taGVhcCBpbXBsZW1lbnRhdGlvbiB1c2VkIGZvciBwcmlvcml0eSBxdWV1ZS5cbiAgICAvLyBJbXBsZW1lbnRhdGlvbiBpcyBzdGFibGUsIGkuZS4gcHVzaCB0aW1lIGlzIGNvbnNpZGVyZWQgZm9yIGVxdWFsIHByaW9yaXRpZXNcbiAgICBjbGFzcyBIZWFwIHtcbiAgICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgICB0aGlzLmhlYXAgPSBbXTtcbiAgICAgICAgICAgIHRoaXMucHVzaENvdW50ID0gTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVI7XG4gICAgICAgIH1cblxuICAgICAgICBnZXQgbGVuZ3RoKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGVhcC5sZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICBlbXB0eSAoKSB7XG4gICAgICAgICAgICB0aGlzLmhlYXAgPSBbXTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgcGVyY1VwKGluZGV4KSB7XG4gICAgICAgICAgICBsZXQgcDtcblxuICAgICAgICAgICAgd2hpbGUgKGluZGV4ID4gMCAmJiBzbWFsbGVyKHRoaXMuaGVhcFtpbmRleF0sIHRoaXMuaGVhcFtwPXBhcmVudChpbmRleCldKSkge1xuICAgICAgICAgICAgICAgIGxldCB0ID0gdGhpcy5oZWFwW2luZGV4XTtcbiAgICAgICAgICAgICAgICB0aGlzLmhlYXBbaW5kZXhdID0gdGhpcy5oZWFwW3BdO1xuICAgICAgICAgICAgICAgIHRoaXMuaGVhcFtwXSA9IHQ7XG5cbiAgICAgICAgICAgICAgICBpbmRleCA9IHA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwZXJjRG93bihpbmRleCkge1xuICAgICAgICAgICAgbGV0IGw7XG5cbiAgICAgICAgICAgIHdoaWxlICgobD1sZWZ0Q2hpKGluZGV4KSkgPCB0aGlzLmhlYXAubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGwrMSA8IHRoaXMuaGVhcC5sZW5ndGggJiYgc21hbGxlcih0aGlzLmhlYXBbbCsxXSwgdGhpcy5oZWFwW2xdKSkge1xuICAgICAgICAgICAgICAgICAgICBsID0gbCsxO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChzbWFsbGVyKHRoaXMuaGVhcFtpbmRleF0sIHRoaXMuaGVhcFtsXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGV0IHQgPSB0aGlzLmhlYXBbaW5kZXhdO1xuICAgICAgICAgICAgICAgIHRoaXMuaGVhcFtpbmRleF0gPSB0aGlzLmhlYXBbbF07XG4gICAgICAgICAgICAgICAgdGhpcy5oZWFwW2xdID0gdDtcblxuICAgICAgICAgICAgICAgIGluZGV4ID0gbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHB1c2gobm9kZSkge1xuICAgICAgICAgICAgbm9kZS5wdXNoQ291bnQgPSArK3RoaXMucHVzaENvdW50O1xuICAgICAgICAgICAgdGhpcy5oZWFwLnB1c2gobm9kZSk7XG4gICAgICAgICAgICB0aGlzLnBlcmNVcCh0aGlzLmhlYXAubGVuZ3RoLTEpO1xuICAgICAgICB9XG5cbiAgICAgICAgdW5zaGlmdChub2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5oZWFwLnB1c2gobm9kZSk7XG4gICAgICAgIH1cblxuICAgICAgICBzaGlmdCgpIHtcbiAgICAgICAgICAgIGxldCBbdG9wXSA9IHRoaXMuaGVhcDtcblxuICAgICAgICAgICAgdGhpcy5oZWFwWzBdID0gdGhpcy5oZWFwW3RoaXMuaGVhcC5sZW5ndGgtMV07XG4gICAgICAgICAgICB0aGlzLmhlYXAucG9wKCk7XG4gICAgICAgICAgICB0aGlzLnBlcmNEb3duKDApO1xuXG4gICAgICAgICAgICByZXR1cm4gdG9wO1xuICAgICAgICB9XG5cbiAgICAgICAgdG9BcnJheSgpIHtcbiAgICAgICAgICAgIHJldHVybiBbLi4udGhpc107XG4gICAgICAgIH1cblxuICAgICAgICAqW1N5bWJvbC5pdGVyYXRvcl0gKCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmhlYXAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB5aWVsZCB0aGlzLmhlYXBbaV0uZGF0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJlbW92ZSAodGVzdEZuKSB7XG4gICAgICAgICAgICBsZXQgaiA9IDA7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuaGVhcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICghdGVzdEZuKHRoaXMuaGVhcFtpXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oZWFwW2pdID0gdGhpcy5oZWFwW2ldO1xuICAgICAgICAgICAgICAgICAgICBqKys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmhlYXAuc3BsaWNlKGopO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gcGFyZW50KHRoaXMuaGVhcC5sZW5ndGgtMSk7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wZXJjRG93bihpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsZWZ0Q2hpKGkpIHtcbiAgICAgICAgcmV0dXJuIChpPDwxKSsxO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcmVudChpKSB7XG4gICAgICAgIHJldHVybiAoKGkrMSk+PjEpLTE7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc21hbGxlcih4LCB5KSB7XG4gICAgICAgIGlmICh4LnByaW9yaXR5ICE9PSB5LnByaW9yaXR5KSB7XG4gICAgICAgICAgICByZXR1cm4geC5wcmlvcml0eSA8IHkucHJpb3JpdHk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4geC5wdXNoQ291bnQgPCB5LnB1c2hDb3VudDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBzYW1lIGFzIFthc3luYy5xdWV1ZV17QGxpbmsgbW9kdWxlOkNvbnRyb2xGbG93LnF1ZXVlfSBvbmx5IHRhc2tzIGFyZSBhc3NpZ25lZCBhIHByaW9yaXR5IGFuZFxuICAgICAqIGNvbXBsZXRlZCBpbiBhc2NlbmRpbmcgcHJpb3JpdHkgb3JkZXIuXG4gICAgICpcbiAgICAgKiBAbmFtZSBwcmlvcml0eVF1ZXVlXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMucXVldWVde0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy5xdWV1ZX1cbiAgICAgKiBAY2F0ZWdvcnkgQ29udHJvbCBGbG93XG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSB3b3JrZXIgLSBBbiBhc3luYyBmdW5jdGlvbiBmb3IgcHJvY2Vzc2luZyBhIHF1ZXVlZCB0YXNrLlxuICAgICAqIElmIHlvdSB3YW50IHRvIGhhbmRsZSBlcnJvcnMgZnJvbSBhbiBpbmRpdmlkdWFsIHRhc2ssIHBhc3MgYSBjYWxsYmFjayB0b1xuICAgICAqIGBxLnB1c2goKWAuXG4gICAgICogSW52b2tlZCB3aXRoICh0YXNrLCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGNvbmN1cnJlbmN5IC0gQW4gYGludGVnZXJgIGZvciBkZXRlcm1pbmluZyBob3cgbWFueSBgd29ya2VyYFxuICAgICAqIGZ1bmN0aW9ucyBzaG91bGQgYmUgcnVuIGluIHBhcmFsbGVsLiAgSWYgb21pdHRlZCwgdGhlIGNvbmN1cnJlbmN5IGRlZmF1bHRzIHRvXG4gICAgICogYDFgLiAgSWYgdGhlIGNvbmN1cnJlbmN5IGlzIGAwYCwgYW4gZXJyb3IgaXMgdGhyb3duLlxuICAgICAqIEByZXR1cm5zIHttb2R1bGU6Q29udHJvbEZsb3cuUXVldWVPYmplY3R9IEEgcHJpb3JpdHlRdWV1ZSBvYmplY3QgdG8gbWFuYWdlIHRoZSB0YXNrcy4gVGhlcmUgYXJlIHRocmVlXG4gICAgICogZGlmZmVyZW5jZXMgYmV0d2VlbiBgcXVldWVgIGFuZCBgcHJpb3JpdHlRdWV1ZWAgb2JqZWN0czpcbiAgICAgKiAqIGBwdXNoKHRhc2ssIHByaW9yaXR5LCBbY2FsbGJhY2tdKWAgLSBgcHJpb3JpdHlgIHNob3VsZCBiZSBhIG51bWJlci4gSWYgYW5cbiAgICAgKiAgIGFycmF5IG9mIGB0YXNrc2AgaXMgZ2l2ZW4sIGFsbCB0YXNrcyB3aWxsIGJlIGFzc2lnbmVkIHRoZSBzYW1lIHByaW9yaXR5LlxuICAgICAqICogYHB1c2hBc3luYyh0YXNrLCBwcmlvcml0eSwgW2NhbGxiYWNrXSlgIC0gdGhlIHNhbWUgYXMgYHByaW9yaXR5UXVldWUucHVzaGAsXG4gICAgICogICBleGNlcHQgdGhpcyByZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHJlamVjdHMgaWYgYW4gZXJyb3Igb2NjdXJzLlxuICAgICAqICogVGhlIGB1bnNoaWZ0YCBhbmQgYHVuc2hpZnRBc3luY2AgbWV0aG9kcyB3ZXJlIHJlbW92ZWQuXG4gICAgICovXG4gICAgZnVuY3Rpb24gcHJpb3JpdHlRdWV1ZSh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG4gICAgICAgIC8vIFN0YXJ0IHdpdGggYSBub3JtYWwgcXVldWVcbiAgICAgICAgdmFyIHEgPSBxdWV1ZSh3b3JrZXIsIGNvbmN1cnJlbmN5KTtcblxuICAgICAgICB2YXIge1xuICAgICAgICAgICAgcHVzaCxcbiAgICAgICAgICAgIHB1c2hBc3luY1xuICAgICAgICB9ID0gcTtcblxuICAgICAgICBxLl90YXNrcyA9IG5ldyBIZWFwKCk7XG4gICAgICAgIHEuX2NyZWF0ZVRhc2tJdGVtID0gKHtkYXRhLCBwcmlvcml0eX0sIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgcHJpb3JpdHksXG4gICAgICAgICAgICAgICAgY2FsbGJhY2tcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG5cbiAgICAgICAgZnVuY3Rpb24gY3JlYXRlRGF0YUl0ZW1zKHRhc2tzLCBwcmlvcml0eSkge1xuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRhc2tzKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7ZGF0YTogdGFza3MsIHByaW9yaXR5fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0YXNrcy5tYXAoZGF0YSA9PiB7IHJldHVybiB7ZGF0YSwgcHJpb3JpdHl9OyB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE92ZXJyaWRlIHB1c2ggdG8gYWNjZXB0IHNlY29uZCBwYXJhbWV0ZXIgcmVwcmVzZW50aW5nIHByaW9yaXR5XG4gICAgICAgIHEucHVzaCA9IGZ1bmN0aW9uKGRhdGEsIHByaW9yaXR5ID0gMCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHJldHVybiBwdXNoKGNyZWF0ZURhdGFJdGVtcyhkYXRhLCBwcmlvcml0eSksIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcblxuICAgICAgICBxLnB1c2hBc3luYyA9IGZ1bmN0aW9uKGRhdGEsIHByaW9yaXR5ID0gMCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHJldHVybiBwdXNoQXN5bmMoY3JlYXRlRGF0YUl0ZW1zKGRhdGEsIHByaW9yaXR5KSwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFJlbW92ZSB1bnNoaWZ0IGZ1bmN0aW9uc1xuICAgICAgICBkZWxldGUgcS51bnNoaWZ0O1xuICAgICAgICBkZWxldGUgcS51bnNoaWZ0QXN5bmM7XG5cbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUnVucyB0aGUgYHRhc2tzYCBhcnJheSBvZiBmdW5jdGlvbnMgaW4gcGFyYWxsZWwsIHdpdGhvdXQgd2FpdGluZyB1bnRpbCB0aGVcbiAgICAgKiBwcmV2aW91cyBmdW5jdGlvbiBoYXMgY29tcGxldGVkLiBPbmNlIGFueSBvZiB0aGUgYHRhc2tzYCBjb21wbGV0ZSBvciBwYXNzIGFuXG4gICAgICogZXJyb3IgdG8gaXRzIGNhbGxiYWNrLCB0aGUgbWFpbiBgY2FsbGJhY2tgIGlzIGltbWVkaWF0ZWx5IGNhbGxlZC4gSXQnc1xuICAgICAqIGVxdWl2YWxlbnQgdG8gYFByb21pc2UucmFjZSgpYC5cbiAgICAgKlxuICAgICAqIEBuYW1lIHJhY2VcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb250cm9sRmxvd1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgQ29udHJvbCBGbG93XG4gICAgICogQHBhcmFtIHtBcnJheX0gdGFza3MgLSBBbiBhcnJheSBjb250YWluaW5nIFthc3luYyBmdW5jdGlvbnNde0BsaW5rIEFzeW5jRnVuY3Rpb259XG4gICAgICogdG8gcnVuLiBFYWNoIGZ1bmN0aW9uIGNhbiBjb21wbGV0ZSB3aXRoIGFuIG9wdGlvbmFsIGByZXN1bHRgIHZhbHVlLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIC0gQSBjYWxsYmFjayB0byBydW4gb25jZSBhbnkgb2YgdGhlIGZ1bmN0aW9ucyBoYXZlXG4gICAgICogY29tcGxldGVkLiBUaGlzIGZ1bmN0aW9uIGdldHMgYW4gZXJyb3Igb3IgcmVzdWx0IGZyb20gdGhlIGZpcnN0IGZ1bmN0aW9uIHRoYXRcbiAgICAgKiBjb21wbGV0ZWQuIEludm9rZWQgd2l0aCAoZXJyLCByZXN1bHQpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIGEgY2FsbGJhY2sgaXMgb21pdHRlZFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBhc3luYy5yYWNlKFtcbiAgICAgKiAgICAgZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICogICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ29uZScpO1xuICAgICAqICAgICAgICAgfSwgMjAwKTtcbiAgICAgKiAgICAgfSxcbiAgICAgKiAgICAgZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICogICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ3R3bycpO1xuICAgICAqICAgICAgICAgfSwgMTAwKTtcbiAgICAgKiAgICAgfVxuICAgICAqIF0sXG4gICAgICogLy8gbWFpbiBjYWxsYmFja1xuICAgICAqIGZ1bmN0aW9uKGVyciwgcmVzdWx0KSB7XG4gICAgICogICAgIC8vIHRoZSByZXN1bHQgd2lsbCBiZSBlcXVhbCB0byAndHdvJyBhcyBpdCBmaW5pc2hlcyBlYXJsaWVyXG4gICAgICogfSk7XG4gICAgICovXG4gICAgZnVuY3Rpb24gcmFjZSh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBvbmNlKGNhbGxiYWNrKTtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRhc2tzKSkgcmV0dXJuIGNhbGxiYWNrKG5ldyBUeXBlRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IHRvIHJhY2UgbXVzdCBiZSBhbiBhcnJheSBvZiBmdW5jdGlvbnMnKSk7XG4gICAgICAgIGlmICghdGFza3MubGVuZ3RoKSByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSB0YXNrcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgIHdyYXBBc3luYyh0YXNrc1tpXSkoY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHJhY2UkMSA9IGF3YWl0aWZ5KHJhY2UsIDIpO1xuXG4gICAgLyoqXG4gICAgICogU2FtZSBhcyBbYHJlZHVjZWBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5yZWR1Y2V9LCBvbmx5IG9wZXJhdGVzIG9uIGBhcnJheWAgaW4gcmV2ZXJzZSBvcmRlci5cbiAgICAgKlxuICAgICAqIEBuYW1lIHJlZHVjZVJpZ2h0XG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMucmVkdWNlXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMucmVkdWNlfVxuICAgICAqIEBhbGlhcyBmb2xkclxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7Kn0gbWVtbyAtIFRoZSBpbml0aWFsIHN0YXRlIG9mIHRoZSByZWR1Y3Rpb24uXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEEgZnVuY3Rpb24gYXBwbGllZCB0byBlYWNoIGl0ZW0gaW4gdGhlXG4gICAgICogYXJyYXkgdG8gcHJvZHVjZSB0aGUgbmV4dCBzdGVwIGluIHRoZSByZWR1Y3Rpb24uXG4gICAgICogVGhlIGBpdGVyYXRlZWAgc2hvdWxkIGNvbXBsZXRlIHdpdGggdGhlIG5leHQgc3RhdGUgb2YgdGhlIHJlZHVjdGlvbi5cbiAgICAgKiBJZiB0aGUgaXRlcmF0ZWUgY29tcGxldGVzIHdpdGggYW4gZXJyb3IsIHRoZSByZWR1Y3Rpb24gaXMgc3RvcHBlZCBhbmQgdGhlXG4gICAgICogbWFpbiBgY2FsbGJhY2tgIGlzIGltbWVkaWF0ZWx5IGNhbGxlZCB3aXRoIHRoZSBlcnJvci5cbiAgICAgKiBJbnZva2VkIHdpdGggKG1lbW8sIGl0ZW0sIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgYWZ0ZXIgYWxsIHRoZVxuICAgICAqIGBpdGVyYXRlZWAgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQuIFJlc3VsdCBpcyB0aGUgcmVkdWNlZCB2YWx1ZS4gSW52b2tlZCB3aXRoXG4gICAgICogKGVyciwgcmVzdWx0KS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBpcyBwYXNzZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiByZWR1Y2VSaWdodCAoYXJyYXksIG1lbW8sIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmV2ZXJzZWQgPSBbLi4uYXJyYXldLnJldmVyc2UoKTtcbiAgICAgICAgcmV0dXJuIHJlZHVjZSQxKHJldmVyc2VkLCBtZW1vLCBpdGVyYXRlZSwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdyYXBzIHRoZSBhc3luYyBmdW5jdGlvbiBpbiBhbm90aGVyIGZ1bmN0aW9uIHRoYXQgYWx3YXlzIGNvbXBsZXRlcyB3aXRoIGFcbiAgICAgKiByZXN1bHQgb2JqZWN0LCBldmVuIHdoZW4gaXQgZXJyb3JzLlxuICAgICAqXG4gICAgICogVGhlIHJlc3VsdCBvYmplY3QgaGFzIGVpdGhlciB0aGUgcHJvcGVydHkgYGVycm9yYCBvciBgdmFsdWVgLlxuICAgICAqXG4gICAgICogQG5hbWUgcmVmbGVjdFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOlV0aWxzXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBmbiAtIFRoZSBhc3luYyBmdW5jdGlvbiB5b3Ugd2FudCB0byB3cmFwXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSAtIEEgZnVuY3Rpb24gdGhhdCBhbHdheXMgcGFzc2VzIG51bGwgdG8gaXQncyBjYWxsYmFjayBhc1xuICAgICAqIHRoZSBlcnJvci4gVGhlIHNlY29uZCBhcmd1bWVudCB0byB0aGUgY2FsbGJhY2sgd2lsbCBiZSBhbiBgb2JqZWN0YCB3aXRoXG4gICAgICogZWl0aGVyIGFuIGBlcnJvcmAgb3IgYSBgdmFsdWVgIHByb3BlcnR5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBhc3luYy5wYXJhbGxlbChbXG4gICAgICogICAgIGFzeW5jLnJlZmxlY3QoZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIC8vIGRvIHNvbWUgc3R1ZmYgLi4uXG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCAnb25lJyk7XG4gICAgICogICAgIH0pLFxuICAgICAqICAgICBhc3luYy5yZWZsZWN0KGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAvLyBkbyBzb21lIG1vcmUgc3R1ZmYgYnV0IGVycm9yIC4uLlxuICAgICAqICAgICAgICAgY2FsbGJhY2soJ2JhZCBzdHVmZiBoYXBwZW5lZCcpO1xuICAgICAqICAgICB9KSxcbiAgICAgKiAgICAgYXN5bmMucmVmbGVjdChmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgLy8gZG8gc29tZSBtb3JlIHN0dWZmIC4uLlxuICAgICAqICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ3R3bycpO1xuICAgICAqICAgICB9KVxuICAgICAqIF0sXG4gICAgICogLy8gb3B0aW9uYWwgY2FsbGJhY2tcbiAgICAgKiBmdW5jdGlvbihlcnIsIHJlc3VsdHMpIHtcbiAgICAgKiAgICAgLy8gdmFsdWVzXG4gICAgICogICAgIC8vIHJlc3VsdHNbMF0udmFsdWUgPSAnb25lJ1xuICAgICAqICAgICAvLyByZXN1bHRzWzFdLmVycm9yID0gJ2JhZCBzdHVmZiBoYXBwZW5lZCdcbiAgICAgKiAgICAgLy8gcmVzdWx0c1syXS52YWx1ZSA9ICd0d28nXG4gICAgICogfSk7XG4gICAgICovXG4gICAgZnVuY3Rpb24gcmVmbGVjdChmbikge1xuICAgICAgICB2YXIgX2ZuID0gd3JhcEFzeW5jKGZuKTtcbiAgICAgICAgcmV0dXJuIGluaXRpYWxQYXJhbXMoZnVuY3Rpb24gcmVmbGVjdE9uKGFyZ3MsIHJlZmxlY3RDYWxsYmFjaykge1xuICAgICAgICAgICAgYXJncy5wdXNoKChlcnJvciwgLi4uY2JBcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IHJldFZhbCA9IHt9O1xuICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICByZXRWYWwuZXJyb3IgPSBlcnJvcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNiQXJncy5sZW5ndGggPiAwKXtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gY2JBcmdzO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2JBcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdID0gY2JBcmdzO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldFZhbC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZWZsZWN0Q2FsbGJhY2sobnVsbCwgcmV0VmFsKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gX2ZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIGhlbHBlciBmdW5jdGlvbiB0aGF0IHdyYXBzIGFuIGFycmF5IG9yIGFuIG9iamVjdCBvZiBmdW5jdGlvbnMgd2l0aCBgcmVmbGVjdGAuXG4gICAgICpcbiAgICAgKiBAbmFtZSByZWZsZWN0QWxsXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6VXRpbHNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMucmVmbGVjdF17QGxpbmsgbW9kdWxlOlV0aWxzLnJlZmxlY3R9XG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdHxJdGVyYWJsZX0gdGFza3MgLSBUaGUgY29sbGVjdGlvbiBvZlxuICAgICAqIFthc3luYyBmdW5jdGlvbnNde0BsaW5rIEFzeW5jRnVuY3Rpb259IHRvIHdyYXAgaW4gYGFzeW5jLnJlZmxlY3RgLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBhbiBhcnJheSBvZiBhc3luYyBmdW5jdGlvbnMsIGVhY2ggd3JhcHBlZCBpblxuICAgICAqIGBhc3luYy5yZWZsZWN0YFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBsZXQgdGFza3MgPSBbXG4gICAgICogICAgIGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsICdvbmUnKTtcbiAgICAgKiAgICAgICAgIH0sIDIwMCk7XG4gICAgICogICAgIH0sXG4gICAgICogICAgIGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAvLyBkbyBzb21lIG1vcmUgc3R1ZmYgYnV0IGVycm9yIC4uLlxuICAgICAqICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKCdiYWQgc3R1ZmYgaGFwcGVuZWQnKSk7XG4gICAgICogICAgIH0sXG4gICAgICogICAgIGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsICd0d28nKTtcbiAgICAgKiAgICAgICAgIH0sIDEwMCk7XG4gICAgICogICAgIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogYXN5bmMucGFyYWxsZWwoYXN5bmMucmVmbGVjdEFsbCh0YXNrcyksXG4gICAgICogLy8gb3B0aW9uYWwgY2FsbGJhY2tcbiAgICAgKiBmdW5jdGlvbihlcnIsIHJlc3VsdHMpIHtcbiAgICAgKiAgICAgLy8gdmFsdWVzXG4gICAgICogICAgIC8vIHJlc3VsdHNbMF0udmFsdWUgPSAnb25lJ1xuICAgICAqICAgICAvLyByZXN1bHRzWzFdLmVycm9yID0gRXJyb3IoJ2JhZCBzdHVmZiBoYXBwZW5lZCcpXG4gICAgICogICAgIC8vIHJlc3VsdHNbMl0udmFsdWUgPSAndHdvJ1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gYW4gZXhhbXBsZSB1c2luZyBhbiBvYmplY3QgaW5zdGVhZCBvZiBhbiBhcnJheVxuICAgICAqIGxldCB0YXNrcyA9IHtcbiAgICAgKiAgICAgb25lOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCAnb25lJyk7XG4gICAgICogICAgICAgICB9LCAyMDApO1xuICAgICAqICAgICB9LFxuICAgICAqICAgICB0d286IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBjYWxsYmFjaygndHdvJyk7XG4gICAgICogICAgIH0sXG4gICAgICogICAgIHRocmVlOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCAndGhyZWUnKTtcbiAgICAgKiAgICAgICAgIH0sIDEwMCk7XG4gICAgICogICAgIH1cbiAgICAgKiB9O1xuICAgICAqXG4gICAgICogYXN5bmMucGFyYWxsZWwoYXN5bmMucmVmbGVjdEFsbCh0YXNrcyksXG4gICAgICogLy8gb3B0aW9uYWwgY2FsbGJhY2tcbiAgICAgKiBmdW5jdGlvbihlcnIsIHJlc3VsdHMpIHtcbiAgICAgKiAgICAgLy8gdmFsdWVzXG4gICAgICogICAgIC8vIHJlc3VsdHMub25lLnZhbHVlID0gJ29uZSdcbiAgICAgKiAgICAgLy8gcmVzdWx0cy50d28uZXJyb3IgPSAndHdvJ1xuICAgICAqICAgICAvLyByZXN1bHRzLnRocmVlLnZhbHVlID0gJ3RocmVlJ1xuICAgICAqIH0pO1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJlZmxlY3RBbGwodGFza3MpIHtcbiAgICAgICAgdmFyIHJlc3VsdHM7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRhc2tzKSkge1xuICAgICAgICAgICAgcmVzdWx0cyA9IHRhc2tzLm1hcChyZWZsZWN0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHRhc2tzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzdWx0c1trZXldID0gcmVmbGVjdC5jYWxsKHRoaXMsIHRhc2tzW2tleV0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVqZWN0JDIoZWFjaGZuLCBhcnIsIF9pdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgY29uc3QgaXRlcmF0ZWUgPSB3cmFwQXN5bmMoX2l0ZXJhdGVlKTtcbiAgICAgICAgcmV0dXJuIF9maWx0ZXIoZWFjaGZuLCBhcnIsICh2YWx1ZSwgY2IpID0+IHtcbiAgICAgICAgICAgIGl0ZXJhdGVlKHZhbHVlLCAoZXJyLCB2KSA9PiB7XG4gICAgICAgICAgICAgICAgY2IoZXJyLCAhdik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBvcHBvc2l0ZSBvZiBbYGZpbHRlcmBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5maWx0ZXJ9LiBSZW1vdmVzIHZhbHVlcyB0aGF0IHBhc3MgYW4gYGFzeW5jYCB0cnV0aCB0ZXN0LlxuICAgICAqXG4gICAgICogQG5hbWUgcmVqZWN0XG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMuZmlsdGVyXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZmlsdGVyfVxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBbiBhc3luYyB0cnV0aCB0ZXN0IHRvIGFwcGx5IHRvIGVhY2ggaXRlbSBpblxuICAgICAqIGBjb2xsYC5cbiAgICAgKiBUaGUgc2hvdWxkIGNvbXBsZXRlIHdpdGggYSBib29sZWFuIHZhbHVlIGFzIGl0cyBgcmVzdWx0YC5cbiAgICAgKiBJbnZva2VkIHdpdGggKGl0ZW0sIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgYWZ0ZXIgYWxsIHRoZVxuICAgICAqIGBpdGVyYXRlZWAgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQuIEludm9rZWQgd2l0aCAoZXJyLCByZXN1bHRzKS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBpcyBwYXNzZWRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gZGlyMSBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGZpbGUxLnR4dCwgZmlsZTIudHh0XG4gICAgICogLy8gZGlyMiBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGZpbGUzLnR4dCwgZmlsZTQudHh0XG4gICAgICogLy8gZGlyMyBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGZpbGU1LnR4dFxuICAgICAqXG4gICAgICogY29uc3QgZmlsZUxpc3QgPSBbJ2RpcjEvZmlsZTEudHh0JywnZGlyMi9maWxlMy50eHQnLCdkaXIzL2ZpbGU2LnR4dCddO1xuICAgICAqXG4gICAgICogLy8gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIGlmIGEgZmlsZSBleGlzdHNcbiAgICAgKiBmdW5jdGlvbiBmaWxlRXhpc3RzKGZpbGUsIGNhbGxiYWNrKSB7XG4gICAgICogICAgZnMuYWNjZXNzKGZpbGUsIGZzLmNvbnN0YW50cy5GX09LLCAoZXJyKSA9PiB7XG4gICAgICogICAgICAgIGNhbGxiYWNrKG51bGwsICFlcnIpO1xuICAgICAqICAgIH0pO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIGNhbGxiYWNrc1xuICAgICAqIGFzeW5jLnJlamVjdChmaWxlTGlzdCwgZmlsZUV4aXN0cywgZnVuY3Rpb24oZXJyLCByZXN1bHRzKSB7XG4gICAgICogICAgLy8gWyAnZGlyMy9maWxlNi50eHQnIF1cbiAgICAgKiAgICAvLyByZXN1bHRzIG5vdyBlcXVhbHMgYW4gYXJyYXkgb2YgdGhlIG5vbi1leGlzdGluZyBmaWxlc1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgUHJvbWlzZXNcbiAgICAgKiBhc3luYy5yZWplY3QoZmlsZUxpc3QsIGZpbGVFeGlzdHMpXG4gICAgICogLnRoZW4oIHJlc3VsdHMgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiAgICAgLy8gWyAnZGlyMy9maWxlNi50eHQnIF1cbiAgICAgKiAgICAgLy8gcmVzdWx0cyBub3cgZXF1YWxzIGFuIGFycmF5IG9mIHRoZSBub24tZXhpc3RpbmcgZmlsZXNcbiAgICAgKiB9KS5jYXRjaCggZXJyID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIGFzeW5jL2F3YWl0XG4gICAgICogYXN5bmMgKCkgPT4ge1xuICAgICAqICAgICB0cnkge1xuICAgICAqICAgICAgICAgbGV0IHJlc3VsdHMgPSBhd2FpdCBhc3luYy5yZWplY3QoZmlsZUxpc3QsIGZpbGVFeGlzdHMpO1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgICAgICAvLyBbICdkaXIzL2ZpbGU2LnR4dCcgXVxuICAgICAqICAgICAgICAgLy8gcmVzdWx0cyBub3cgZXF1YWxzIGFuIGFycmF5IG9mIHRoZSBub24tZXhpc3RpbmcgZmlsZXNcbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICovXG4gICAgZnVuY3Rpb24gcmVqZWN0IChjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdCQyKGVhY2hPZiQxLCBjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuICAgIHZhciByZWplY3QkMSA9IGF3YWl0aWZ5KHJlamVjdCwgMyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyBbYHJlamVjdGBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5yZWplY3R9IGJ1dCBydW5zIGEgbWF4aW11bSBvZiBgbGltaXRgIGFzeW5jIG9wZXJhdGlvbnMgYXQgYVxuICAgICAqIHRpbWUuXG4gICAgICpcbiAgICAgKiBAbmFtZSByZWplY3RMaW1pdFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLnJlamVjdF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLnJlamVjdH1cbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW1pdCAtIFRoZSBtYXhpbXVtIG51bWJlciBvZiBhc3luYyBvcGVyYXRpb25zIGF0IGEgdGltZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEFuIGFzeW5jIHRydXRoIHRlc3QgdG8gYXBwbHkgdG8gZWFjaCBpdGVtIGluXG4gICAgICogYGNvbGxgLlxuICAgICAqIFRoZSBzaG91bGQgY29tcGxldGUgd2l0aCBhIGJvb2xlYW4gdmFsdWUgYXMgaXRzIGByZXN1bHRgLlxuICAgICAqIEludm9rZWQgd2l0aCAoaXRlbSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCBhZnRlciBhbGwgdGhlXG4gICAgICogYGl0ZXJhdGVlYCBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZC4gSW52b2tlZCB3aXRoIChlcnIsIHJlc3VsdHMpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIG5vIGNhbGxiYWNrIGlzIHBhc3NlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJlamVjdExpbWl0IChjb2xsLCBsaW1pdCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiByZWplY3QkMihlYWNoT2ZMaW1pdCQyKGxpbWl0KSwgY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKVxuICAgIH1cbiAgICB2YXIgcmVqZWN0TGltaXQkMSA9IGF3YWl0aWZ5KHJlamVjdExpbWl0LCA0KTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzYW1lIGFzIFtgcmVqZWN0YF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLnJlamVjdH0gYnV0IHJ1bnMgb25seSBhIHNpbmdsZSBhc3luYyBvcGVyYXRpb24gYXQgYSB0aW1lLlxuICAgICAqXG4gICAgICogQG5hbWUgcmVqZWN0U2VyaWVzXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMucmVqZWN0XXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMucmVqZWN0fVxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBbiBhc3luYyB0cnV0aCB0ZXN0IHRvIGFwcGx5IHRvIGVhY2ggaXRlbSBpblxuICAgICAqIGBjb2xsYC5cbiAgICAgKiBUaGUgc2hvdWxkIGNvbXBsZXRlIHdpdGggYSBib29sZWFuIHZhbHVlIGFzIGl0cyBgcmVzdWx0YC5cbiAgICAgKiBJbnZva2VkIHdpdGggKGl0ZW0sIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgYWZ0ZXIgYWxsIHRoZVxuICAgICAqIGBpdGVyYXRlZWAgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQuIEludm9rZWQgd2l0aCAoZXJyLCByZXN1bHRzKS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBpcyBwYXNzZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiByZWplY3RTZXJpZXMgKGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gcmVqZWN0JDIoZWFjaE9mU2VyaWVzJDEsIGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaylcbiAgICB9XG4gICAgdmFyIHJlamVjdFNlcmllcyQxID0gYXdhaXRpZnkocmVqZWN0U2VyaWVzLCAzKTtcblxuICAgIGZ1bmN0aW9uIGNvbnN0YW50KHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBdHRlbXB0cyB0byBnZXQgYSBzdWNjZXNzZnVsIHJlc3BvbnNlIGZyb20gYHRhc2tgIG5vIG1vcmUgdGhhbiBgdGltZXNgIHRpbWVzXG4gICAgICogYmVmb3JlIHJldHVybmluZyBhbiBlcnJvci4gSWYgdGhlIHRhc2sgaXMgc3VjY2Vzc2Z1bCwgdGhlIGBjYWxsYmFja2Agd2lsbCBiZVxuICAgICAqIHBhc3NlZCB0aGUgcmVzdWx0IG9mIHRoZSBzdWNjZXNzZnVsIHRhc2suIElmIGFsbCBhdHRlbXB0cyBmYWlsLCB0aGUgY2FsbGJhY2tcbiAgICAgKiB3aWxsIGJlIHBhc3NlZCB0aGUgZXJyb3IgYW5kIHJlc3VsdCAoaWYgYW55KSBvZiB0aGUgZmluYWwgYXR0ZW1wdC5cbiAgICAgKlxuICAgICAqIEBuYW1lIHJldHJ5XG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGNhdGVnb3J5IENvbnRyb2wgRmxvd1xuICAgICAqIEBzZWUgW2FzeW5jLnJldHJ5YWJsZV17QGxpbmsgbW9kdWxlOkNvbnRyb2xGbG93LnJldHJ5YWJsZX1cbiAgICAgKiBAcGFyYW0ge09iamVjdHxudW1iZXJ9IFtvcHRzID0ge3RpbWVzOiA1LCBpbnRlcnZhbDogMH18IDVdIC0gQ2FuIGJlIGVpdGhlciBhblxuICAgICAqIG9iamVjdCB3aXRoIGB0aW1lc2AgYW5kIGBpbnRlcnZhbGAgb3IgYSBudW1iZXIuXG4gICAgICogKiBgdGltZXNgIC0gVGhlIG51bWJlciBvZiBhdHRlbXB0cyB0byBtYWtlIGJlZm9yZSBnaXZpbmcgdXAuICBUaGUgZGVmYXVsdFxuICAgICAqICAgaXMgYDVgLlxuICAgICAqICogYGludGVydmFsYCAtIFRoZSB0aW1lIHRvIHdhaXQgYmV0d2VlbiByZXRyaWVzLCBpbiBtaWxsaXNlY29uZHMuICBUaGVcbiAgICAgKiAgIGRlZmF1bHQgaXMgYDBgLiBUaGUgaW50ZXJ2YWwgbWF5IGFsc28gYmUgc3BlY2lmaWVkIGFzIGEgZnVuY3Rpb24gb2YgdGhlXG4gICAgICogICByZXRyeSBjb3VudCAoc2VlIGV4YW1wbGUpLlxuICAgICAqICogYGVycm9yRmlsdGVyYCAtIEFuIG9wdGlvbmFsIHN5bmNocm9ub3VzIGZ1bmN0aW9uIHRoYXQgaXMgaW52b2tlZCBvblxuICAgICAqICAgZXJyb25lb3VzIHJlc3VsdC4gSWYgaXQgcmV0dXJucyBgdHJ1ZWAgdGhlIHJldHJ5IGF0dGVtcHRzIHdpbGwgY29udGludWU7XG4gICAgICogICBpZiB0aGUgZnVuY3Rpb24gcmV0dXJucyBgZmFsc2VgIHRoZSByZXRyeSBmbG93IGlzIGFib3J0ZWQgd2l0aCB0aGUgY3VycmVudFxuICAgICAqICAgYXR0ZW1wdCdzIGVycm9yIGFuZCByZXN1bHQgYmVpbmcgcmV0dXJuZWQgdG8gdGhlIGZpbmFsIGNhbGxiYWNrLlxuICAgICAqICAgSW52b2tlZCB3aXRoIChlcnIpLlxuICAgICAqICogSWYgYG9wdHNgIGlzIGEgbnVtYmVyLCB0aGUgbnVtYmVyIHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHRpbWVzIHRvIHJldHJ5LFxuICAgICAqICAgd2l0aCB0aGUgZGVmYXVsdCBpbnRlcnZhbCBvZiBgMGAuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSB0YXNrIC0gQW4gYXN5bmMgZnVuY3Rpb24gdG8gcmV0cnkuXG4gICAgICogSW52b2tlZCB3aXRoIChjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEFuIG9wdGlvbmFsIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCB3aGVuIHRoZVxuICAgICAqIHRhc2sgaGFzIHN1Y2NlZWRlZCwgb3IgYWZ0ZXIgdGhlIGZpbmFsIGZhaWxlZCBhdHRlbXB0LiBJdCByZWNlaXZlcyB0aGUgYGVycmBcbiAgICAgKiBhbmQgYHJlc3VsdGAgYXJndW1lbnRzIG9mIHRoZSBsYXN0IGF0dGVtcHQgYXQgY29tcGxldGluZyB0aGUgYHRhc2tgLiBJbnZva2VkXG4gICAgICogd2l0aCAoZXJyLCByZXN1bHRzKS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlIGlmIG5vIGNhbGxiYWNrIHByb3ZpZGVkXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gVGhlIGByZXRyeWAgZnVuY3Rpb24gY2FuIGJlIHVzZWQgYXMgYSBzdGFuZC1hbG9uZSBjb250cm9sIGZsb3cgYnkgcGFzc2luZ1xuICAgICAqIC8vIGEgY2FsbGJhY2ssIGFzIHNob3duIGJlbG93OlxuICAgICAqXG4gICAgICogLy8gdHJ5IGNhbGxpbmcgYXBpTWV0aG9kIDMgdGltZXNcbiAgICAgKiBhc3luYy5yZXRyeSgzLCBhcGlNZXRob2QsIGZ1bmN0aW9uKGVyciwgcmVzdWx0KSB7XG4gICAgICogICAgIC8vIGRvIHNvbWV0aGluZyB3aXRoIHRoZSByZXN1bHRcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIHRyeSBjYWxsaW5nIGFwaU1ldGhvZCAzIHRpbWVzLCB3YWl0aW5nIDIwMCBtcyBiZXR3ZWVuIGVhY2ggcmV0cnlcbiAgICAgKiBhc3luYy5yZXRyeSh7dGltZXM6IDMsIGludGVydmFsOiAyMDB9LCBhcGlNZXRob2QsIGZ1bmN0aW9uKGVyciwgcmVzdWx0KSB7XG4gICAgICogICAgIC8vIGRvIHNvbWV0aGluZyB3aXRoIHRoZSByZXN1bHRcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIHRyeSBjYWxsaW5nIGFwaU1ldGhvZCAxMCB0aW1lcyB3aXRoIGV4cG9uZW50aWFsIGJhY2tvZmZcbiAgICAgKiAvLyAoaS5lLiBpbnRlcnZhbHMgb2YgMTAwLCAyMDAsIDQwMCwgODAwLCAxNjAwLCAuLi4gbWlsbGlzZWNvbmRzKVxuICAgICAqIGFzeW5jLnJldHJ5KHtcbiAgICAgKiAgIHRpbWVzOiAxMCxcbiAgICAgKiAgIGludGVydmFsOiBmdW5jdGlvbihyZXRyeUNvdW50KSB7XG4gICAgICogICAgIHJldHVybiA1MCAqIE1hdGgucG93KDIsIHJldHJ5Q291bnQpO1xuICAgICAqICAgfVxuICAgICAqIH0sIGFwaU1ldGhvZCwgZnVuY3Rpb24oZXJyLCByZXN1bHQpIHtcbiAgICAgKiAgICAgLy8gZG8gc29tZXRoaW5nIHdpdGggdGhlIHJlc3VsdFxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gdHJ5IGNhbGxpbmcgYXBpTWV0aG9kIHRoZSBkZWZhdWx0IDUgdGltZXMgbm8gZGVsYXkgYmV0d2VlbiBlYWNoIHJldHJ5XG4gICAgICogYXN5bmMucmV0cnkoYXBpTWV0aG9kLCBmdW5jdGlvbihlcnIsIHJlc3VsdCkge1xuICAgICAqICAgICAvLyBkbyBzb21ldGhpbmcgd2l0aCB0aGUgcmVzdWx0XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyB0cnkgY2FsbGluZyBhcGlNZXRob2Qgb25seSB3aGVuIGVycm9yIGNvbmRpdGlvbiBzYXRpc2ZpZXMsIGFsbCBvdGhlclxuICAgICAqIC8vIGVycm9ycyB3aWxsIGFib3J0IHRoZSByZXRyeSBjb250cm9sIGZsb3cgYW5kIHJldHVybiB0byBmaW5hbCBjYWxsYmFja1xuICAgICAqIGFzeW5jLnJldHJ5KHtcbiAgICAgKiAgIGVycm9yRmlsdGVyOiBmdW5jdGlvbihlcnIpIHtcbiAgICAgKiAgICAgcmV0dXJuIGVyci5tZXNzYWdlID09PSAnVGVtcG9yYXJ5IGVycm9yJzsgLy8gb25seSByZXRyeSBvbiBhIHNwZWNpZmljIGVycm9yXG4gICAgICogICB9XG4gICAgICogfSwgYXBpTWV0aG9kLCBmdW5jdGlvbihlcnIsIHJlc3VsdCkge1xuICAgICAqICAgICAvLyBkbyBzb21ldGhpbmcgd2l0aCB0aGUgcmVzdWx0XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyB0byByZXRyeSBpbmRpdmlkdWFsIG1ldGhvZHMgdGhhdCBhcmUgbm90IGFzIHJlbGlhYmxlIHdpdGhpbiBvdGhlclxuICAgICAqIC8vIGNvbnRyb2wgZmxvdyBmdW5jdGlvbnMsIHVzZSB0aGUgYHJldHJ5YWJsZWAgd3JhcHBlcjpcbiAgICAgKiBhc3luYy5hdXRvKHtcbiAgICAgKiAgICAgdXNlcnM6IGFwaS5nZXRVc2Vycy5iaW5kKGFwaSksXG4gICAgICogICAgIHBheW1lbnRzOiBhc3luYy5yZXRyeWFibGUoMywgYXBpLmdldFBheW1lbnRzLmJpbmQoYXBpKSlcbiAgICAgKiB9LCBmdW5jdGlvbihlcnIsIHJlc3VsdHMpIHtcbiAgICAgKiAgICAgLy8gZG8gc29tZXRoaW5nIHdpdGggdGhlIHJlc3VsdHNcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqL1xuICAgIGNvbnN0IERFRkFVTFRfVElNRVMgPSA1O1xuICAgIGNvbnN0IERFRkFVTFRfSU5URVJWQUwgPSAwO1xuXG4gICAgZnVuY3Rpb24gcmV0cnkob3B0cywgdGFzaywgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICAgICAgICB0aW1lczogREVGQVVMVF9USU1FUyxcbiAgICAgICAgICAgIGludGVydmFsRnVuYzogY29uc3RhbnQoREVGQVVMVF9JTlRFUlZBTClcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDMgJiYgdHlwZW9mIG9wdHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gdGFzayB8fCBwcm9taXNlQ2FsbGJhY2soKTtcbiAgICAgICAgICAgIHRhc2sgPSBvcHRzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFyc2VUaW1lcyhvcHRpb25zLCBvcHRzKTtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgcHJvbWlzZUNhbGxiYWNrKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHRhc2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYXJndW1lbnRzIGZvciBhc3luYy5yZXRyeVwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBfdGFzayA9IHdyYXBBc3luYyh0YXNrKTtcblxuICAgICAgICB2YXIgYXR0ZW1wdCA9IDE7XG4gICAgICAgIGZ1bmN0aW9uIHJldHJ5QXR0ZW1wdCgpIHtcbiAgICAgICAgICAgIF90YXNrKChlcnIsIC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyID09PSBmYWxzZSkgcmV0dXJuXG4gICAgICAgICAgICAgICAgaWYgKGVyciAmJiBhdHRlbXB0KysgPCBvcHRpb25zLnRpbWVzICYmXG4gICAgICAgICAgICAgICAgICAgICh0eXBlb2Ygb3B0aW9ucy5lcnJvckZpbHRlciAhPSAnZnVuY3Rpb24nIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmVycm9yRmlsdGVyKGVycikpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQocmV0cnlBdHRlbXB0LCBvcHRpb25zLmludGVydmFsRnVuYyhhdHRlbXB0IC0gMSkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgLi4uYXJncyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXRyeUF0dGVtcHQoKTtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrW1BST01JU0VfU1lNQk9MXVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlVGltZXMoYWNjLCB0KSB7XG4gICAgICAgIGlmICh0eXBlb2YgdCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGFjYy50aW1lcyA9ICt0LnRpbWVzIHx8IERFRkFVTFRfVElNRVM7XG5cbiAgICAgICAgICAgIGFjYy5pbnRlcnZhbEZ1bmMgPSB0eXBlb2YgdC5pbnRlcnZhbCA9PT0gJ2Z1bmN0aW9uJyA/XG4gICAgICAgICAgICAgICAgdC5pbnRlcnZhbCA6XG4gICAgICAgICAgICAgICAgY29uc3RhbnQoK3QuaW50ZXJ2YWwgfHwgREVGQVVMVF9JTlRFUlZBTCk7XG5cbiAgICAgICAgICAgIGFjYy5lcnJvckZpbHRlciA9IHQuZXJyb3JGaWx0ZXI7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHQgPT09ICdudW1iZXInIHx8IHR5cGVvZiB0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgYWNjLnRpbWVzID0gK3QgfHwgREVGQVVMVF9USU1FUztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYXJndW1lbnRzIGZvciBhc3luYy5yZXRyeVwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgY2xvc2UgcmVsYXRpdmUgb2YgW2ByZXRyeWBde0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy5yZXRyeX0uICBUaGlzIG1ldGhvZFxuICAgICAqIHdyYXBzIGEgdGFzayBhbmQgbWFrZXMgaXQgcmV0cnlhYmxlLCByYXRoZXIgdGhhbiBpbW1lZGlhdGVseSBjYWxsaW5nIGl0XG4gICAgICogd2l0aCByZXRyaWVzLlxuICAgICAqXG4gICAgICogQG5hbWUgcmV0cnlhYmxlXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMucmV0cnlde0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy5yZXRyeX1cbiAgICAgKiBAY2F0ZWdvcnkgQ29udHJvbCBGbG93XG4gICAgICogQHBhcmFtIHtPYmplY3R8bnVtYmVyfSBbb3B0cyA9IHt0aW1lczogNSwgaW50ZXJ2YWw6IDB9fCA1XSAtIG9wdGlvbmFsXG4gICAgICogb3B0aW9ucywgZXhhY3RseSB0aGUgc2FtZSBhcyBmcm9tIGByZXRyeWAsIGV4Y2VwdCBmb3IgYSBgb3B0cy5hcml0eWAgdGhhdFxuICAgICAqIGlzIHRoZSBhcml0eSBvZiB0aGUgYHRhc2tgIGZ1bmN0aW9uLCBkZWZhdWx0aW5nIHRvIGB0YXNrLmxlbmd0aGBcbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IHRhc2sgLSB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRvIHdyYXAuXG4gICAgICogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIHBhc3NlZCBhbnkgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgcmV0dXJuZWQgd3JhcHBlci5cbiAgICAgKiBJbnZva2VkIHdpdGggKC4uLmFyZ3MsIGNhbGxiYWNrKS5cbiAgICAgKiBAcmV0dXJucyB7QXN5bmNGdW5jdGlvbn0gVGhlIHdyYXBwZWQgZnVuY3Rpb24sIHdoaWNoIHdoZW4gaW52b2tlZCwgd2lsbFxuICAgICAqIHJldHJ5IG9uIGFuIGVycm9yLCBiYXNlZCBvbiB0aGUgcGFyYW1ldGVycyBzcGVjaWZpZWQgaW4gYG9wdHNgLlxuICAgICAqIFRoaXMgZnVuY3Rpb24gd2lsbCBhY2NlcHQgdGhlIHNhbWUgcGFyYW1ldGVycyBhcyBgdGFza2AuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGFzeW5jLmF1dG8oe1xuICAgICAqICAgICBkZXAxOiBhc3luYy5yZXRyeWFibGUoMywgZ2V0RnJvbUZsYWt5U2VydmljZSksXG4gICAgICogICAgIHByb2Nlc3M6IFtcImRlcDFcIiwgYXN5bmMucmV0cnlhYmxlKDMsIGZ1bmN0aW9uIChyZXN1bHRzLCBjYikge1xuICAgICAqICAgICAgICAgbWF5YmVQcm9jZXNzRGF0YShyZXN1bHRzLmRlcDEsIGNiKTtcbiAgICAgKiAgICAgfSldXG4gICAgICogfSwgY2FsbGJhY2spO1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJldHJ5YWJsZSAob3B0cywgdGFzaykge1xuICAgICAgICBpZiAoIXRhc2spIHtcbiAgICAgICAgICAgIHRhc2sgPSBvcHRzO1xuICAgICAgICAgICAgb3B0cyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGFyaXR5ID0gKG9wdHMgJiYgb3B0cy5hcml0eSkgfHwgdGFzay5sZW5ndGg7XG4gICAgICAgIGlmIChpc0FzeW5jKHRhc2spKSB7XG4gICAgICAgICAgICBhcml0eSArPSAxO1xuICAgICAgICB9XG4gICAgICAgIHZhciBfdGFzayA9IHdyYXBBc3luYyh0YXNrKTtcbiAgICAgICAgcmV0dXJuIGluaXRpYWxQYXJhbXMoKGFyZ3MsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPCBhcml0eSAtIDEgfHwgY2FsbGJhY2sgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGFyZ3MucHVzaChjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBwcm9taXNlQ2FsbGJhY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIHRhc2tGbihjYikge1xuICAgICAgICAgICAgICAgIF90YXNrKC4uLmFyZ3MsIGNiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG9wdHMpIHJldHJ5KG9wdHMsIHRhc2tGbiwgY2FsbGJhY2spO1xuICAgICAgICAgICAgZWxzZSByZXRyeSh0YXNrRm4sIGNhbGxiYWNrKTtcblxuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrW1BST01JU0VfU1lNQk9MXVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSdW4gdGhlIGZ1bmN0aW9ucyBpbiB0aGUgYHRhc2tzYCBjb2xsZWN0aW9uIGluIHNlcmllcywgZWFjaCBvbmUgcnVubmluZyBvbmNlXG4gICAgICogdGhlIHByZXZpb3VzIGZ1bmN0aW9uIGhhcyBjb21wbGV0ZWQuIElmIGFueSBmdW5jdGlvbnMgaW4gdGhlIHNlcmllcyBwYXNzIGFuXG4gICAgICogZXJyb3IgdG8gaXRzIGNhbGxiYWNrLCBubyBtb3JlIGZ1bmN0aW9ucyBhcmUgcnVuLCBhbmQgYGNhbGxiYWNrYCBpc1xuICAgICAqIGltbWVkaWF0ZWx5IGNhbGxlZCB3aXRoIHRoZSB2YWx1ZSBvZiB0aGUgZXJyb3IuIE90aGVyd2lzZSwgYGNhbGxiYWNrYFxuICAgICAqIHJlY2VpdmVzIGFuIGFycmF5IG9mIHJlc3VsdHMgd2hlbiBgdGFza3NgIGhhdmUgY29tcGxldGVkLlxuICAgICAqXG4gICAgICogSXQgaXMgYWxzbyBwb3NzaWJsZSB0byB1c2UgYW4gb2JqZWN0IGluc3RlYWQgb2YgYW4gYXJyYXkuIEVhY2ggcHJvcGVydHkgd2lsbFxuICAgICAqIGJlIHJ1biBhcyBhIGZ1bmN0aW9uLCBhbmQgdGhlIHJlc3VsdHMgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGZpbmFsIGBjYWxsYmFja2BcbiAgICAgKiBhcyBhbiBvYmplY3QgaW5zdGVhZCBvZiBhbiBhcnJheS4gVGhpcyBjYW4gYmUgYSBtb3JlIHJlYWRhYmxlIHdheSBvZiBoYW5kbGluZ1xuICAgICAqICByZXN1bHRzIGZyb20ge0BsaW5rIGFzeW5jLnNlcmllc30uXG4gICAgICpcbiAgICAgKiAqKk5vdGUqKiB0aGF0IHdoaWxlIG1hbnkgaW1wbGVtZW50YXRpb25zIHByZXNlcnZlIHRoZSBvcmRlciBvZiBvYmplY3RcbiAgICAgKiBwcm9wZXJ0aWVzLCB0aGUgW0VDTUFTY3JpcHQgTGFuZ3VhZ2UgU3BlY2lmaWNhdGlvbl0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzUuMS8jc2VjLTguNilcbiAgICAgKiBleHBsaWNpdGx5IHN0YXRlcyB0aGF0XG4gICAgICpcbiAgICAgKiA+IFRoZSBtZWNoYW5pY3MgYW5kIG9yZGVyIG9mIGVudW1lcmF0aW5nIHRoZSBwcm9wZXJ0aWVzIGlzIG5vdCBzcGVjaWZpZWQuXG4gICAgICpcbiAgICAgKiBTbyBpZiB5b3UgcmVseSBvbiB0aGUgb3JkZXIgaW4gd2hpY2ggeW91ciBzZXJpZXMgb2YgZnVuY3Rpb25zIGFyZSBleGVjdXRlZCxcbiAgICAgKiBhbmQgd2FudCB0aGlzIHRvIHdvcmsgb24gYWxsIHBsYXRmb3JtcywgY29uc2lkZXIgdXNpbmcgYW4gYXJyYXkuXG4gICAgICpcbiAgICAgKiBAbmFtZSBzZXJpZXNcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb250cm9sRmxvd1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgQ29udHJvbCBGbG93XG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gdGFza3MgLSBBIGNvbGxlY3Rpb24gY29udGFpbmluZ1xuICAgICAqIFthc3luYyBmdW5jdGlvbnNde0BsaW5rIEFzeW5jRnVuY3Rpb259IHRvIHJ1biBpbiBzZXJpZXMuXG4gICAgICogRWFjaCBmdW5jdGlvbiBjYW4gY29tcGxldGUgd2l0aCBhbnkgbnVtYmVyIG9mIG9wdGlvbmFsIGByZXN1bHRgIHZhbHVlcy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQW4gb3B0aW9uYWwgY2FsbGJhY2sgdG8gcnVuIG9uY2UgYWxsIHRoZVxuICAgICAqIGZ1bmN0aW9ucyBoYXZlIGNvbXBsZXRlZC4gVGhpcyBmdW5jdGlvbiBnZXRzIGEgcmVzdWx0cyBhcnJheSAob3Igb2JqZWN0KVxuICAgICAqIGNvbnRhaW5pbmcgYWxsIHRoZSByZXN1bHQgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgYHRhc2tgIGNhbGxiYWNrcy4gSW52b2tlZFxuICAgICAqIHdpdGggKGVyciwgcmVzdWx0KS5cbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIG5vIGNhbGxiYWNrIGlzIHBhc3NlZFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvL1VzaW5nIENhbGxiYWNrc1xuICAgICAqIGFzeW5jLnNlcmllcyhbXG4gICAgICogICAgIGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgIC8vIGRvIHNvbWUgYXN5bmMgdGFza1xuICAgICAqICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsICdvbmUnKTtcbiAgICAgKiAgICAgICAgIH0sIDIwMCk7XG4gICAgICogICAgIH0sXG4gICAgICogICAgIGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgIC8vIHRoZW4gZG8gYW5vdGhlciBhc3luYyB0YXNrXG4gICAgICogICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ3R3bycpO1xuICAgICAqICAgICAgICAgfSwgMTAwKTtcbiAgICAgKiAgICAgfVxuICAgICAqIF0sIGZ1bmN0aW9uKGVyciwgcmVzdWx0cykge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiAgICAgLy8gcmVzdWx0cyBpcyBlcXVhbCB0byBbJ29uZScsJ3R3byddXG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBhbiBleGFtcGxlIHVzaW5nIG9iamVjdHMgaW5zdGVhZCBvZiBhcnJheXNcbiAgICAgKiBhc3luYy5zZXJpZXMoe1xuICAgICAqICAgICBvbmU6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgIC8vIGRvIHNvbWUgYXN5bmMgdGFza1xuICAgICAqICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIDEpO1xuICAgICAqICAgICAgICAgfSwgMjAwKTtcbiAgICAgKiAgICAgfSxcbiAgICAgKiAgICAgdHdvOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgICAgICAvLyB0aGVuIGRvIGFub3RoZXIgYXN5bmMgdGFza1xuICAgICAqICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIDIpO1xuICAgICAqICAgICAgICAgfSwgMTAwKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH0sIGZ1bmN0aW9uKGVyciwgcmVzdWx0cykge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiAgICAgLy8gcmVzdWx0cyBpcyBlcXVhbCB0bzogeyBvbmU6IDEsIHR3bzogMiB9XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvL1VzaW5nIFByb21pc2VzXG4gICAgICogYXN5bmMuc2VyaWVzKFtcbiAgICAgKiAgICAgZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICogICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ29uZScpO1xuICAgICAqICAgICAgICAgfSwgMjAwKTtcbiAgICAgKiAgICAgfSxcbiAgICAgKiAgICAgZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICogICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ3R3bycpO1xuICAgICAqICAgICAgICAgfSwgMTAwKTtcbiAgICAgKiAgICAgfVxuICAgICAqIF0pLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgICAvLyByZXN1bHRzIGlzIGVxdWFsIHRvIFsnb25lJywndHdvJ11cbiAgICAgKiB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gYW4gZXhhbXBsZSB1c2luZyBhbiBvYmplY3QgaW5zdGVhZCBvZiBhbiBhcnJheVxuICAgICAqIGFzeW5jLnNlcmllcyh7XG4gICAgICogICAgIG9uZTogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICogICAgICAgICAgICAgLy8gZG8gc29tZSBhc3luYyB0YXNrXG4gICAgICogICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgMSk7XG4gICAgICogICAgICAgICB9LCAyMDApO1xuICAgICAqICAgICB9LFxuICAgICAqICAgICB0d286IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgIC8vIHRoZW4gZG8gYW5vdGhlciBhc3luYyB0YXNrXG4gICAgICogICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgMik7XG4gICAgICogICAgICAgICB9LCAxMDApO1xuICAgICAqICAgICB9XG4gICAgICogfSkudGhlbihyZXN1bHRzID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgIC8vIHJlc3VsdHMgaXMgZXF1YWwgdG86IHsgb25lOiAxLCB0d286IDIgfVxuICAgICAqIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvL1VzaW5nIGFzeW5jL2F3YWl0XG4gICAgICogYXN5bmMgKCkgPT4ge1xuICAgICAqICAgICB0cnkge1xuICAgICAqICAgICAgICAgbGV0IHJlc3VsdHMgPSBhd2FpdCBhc3luYy5zZXJpZXMoW1xuICAgICAqICAgICAgICAgICAgIGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICogICAgICAgICAgICAgICAgICAgICAvLyBkbyBzb21lIGFzeW5jIHRhc2tcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsICdvbmUnKTtcbiAgICAgKiAgICAgICAgICAgICAgICAgfSwgMjAwKTtcbiAgICAgKiAgICAgICAgICAgICB9LFxuICAgICAqICAgICAgICAgICAgIGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICogICAgICAgICAgICAgICAgICAgICAvLyB0aGVuIGRvIGFub3RoZXIgYXN5bmMgdGFza1xuICAgICAqICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ3R3bycpO1xuICAgICAqICAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgICAqICAgICAgICAgICAgIH1cbiAgICAgKiAgICAgICAgIF0pO1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgICAgICAvLyByZXN1bHRzIGlzIGVxdWFsIHRvIFsnb25lJywndHdvJ11cbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICogLy8gYW4gZXhhbXBsZSB1c2luZyBhbiBvYmplY3QgaW5zdGVhZCBvZiBhbiBhcnJheVxuICAgICAqIGFzeW5jICgpID0+IHtcbiAgICAgKiAgICAgdHJ5IHtcbiAgICAgKiAgICAgICAgIGxldCByZXN1bHRzID0gYXdhaXQgYXN5bmMucGFyYWxsZWwoe1xuICAgICAqICAgICAgICAgICAgIG9uZTogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgIC8vIGRvIHNvbWUgYXN5bmMgdGFza1xuICAgICAqICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgMSk7XG4gICAgICogICAgICAgICAgICAgICAgIH0sIDIwMCk7XG4gICAgICogICAgICAgICAgICAgfSxcbiAgICAgKiAgICAgICAgICAgIHR3bzogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgIC8vIHRoZW4gZG8gYW5vdGhlciBhc3luYyB0YXNrXG4gICAgICogICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCAyKTtcbiAgICAgKiAgICAgICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAgKiAgICAgICAgICAgIH1cbiAgICAgKiAgICAgICAgIH0pO1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgICAgICAvLyByZXN1bHRzIGlzIGVxdWFsIHRvOiB7IG9uZTogMSwgdHdvOiAyIH1cbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICovXG4gICAgZnVuY3Rpb24gc2VyaWVzKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX3BhcmFsbGVsKGVhY2hPZlNlcmllcyQxLCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYHRydWVgIGlmIGF0IGxlYXN0IG9uZSBlbGVtZW50IGluIHRoZSBgY29sbGAgc2F0aXNmaWVzIGFuIGFzeW5jIHRlc3QuXG4gICAgICogSWYgYW55IGl0ZXJhdGVlIGNhbGwgcmV0dXJucyBgdHJ1ZWAsIHRoZSBtYWluIGBjYWxsYmFja2AgaXMgaW1tZWRpYXRlbHlcbiAgICAgKiBjYWxsZWQuXG4gICAgICpcbiAgICAgKiBAbmFtZSBzb21lXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGFsaWFzIGFueVxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEFuIGFzeW5jIHRydXRoIHRlc3QgdG8gYXBwbHkgdG8gZWFjaCBpdGVtXG4gICAgICogaW4gdGhlIGNvbGxlY3Rpb25zIGluIHBhcmFsbGVsLlxuICAgICAqIFRoZSBpdGVyYXRlZSBzaG91bGQgY29tcGxldGUgd2l0aCBhIGJvb2xlYW4gYHJlc3VsdGAgdmFsdWUuXG4gICAgICogSW52b2tlZCB3aXRoIChpdGVtLCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIGFzIHNvb24gYXMgYW55XG4gICAgICogaXRlcmF0ZWUgcmV0dXJucyBgdHJ1ZWAsIG9yIGFmdGVyIGFsbCB0aGUgaXRlcmF0ZWUgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQuXG4gICAgICogUmVzdWx0IHdpbGwgYmUgZWl0aGVyIGB0cnVlYCBvciBgZmFsc2VgIGRlcGVuZGluZyBvbiB0aGUgdmFsdWVzIG9mIHRoZSBhc3luY1xuICAgICAqIHRlc3RzLiBJbnZva2VkIHdpdGggKGVyciwgcmVzdWx0KS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBwcm92aWRlZFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBkaXIxIGlzIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgZmlsZTEudHh0LCBmaWxlMi50eHRcbiAgICAgKiAvLyBkaXIyIGlzIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgZmlsZTMudHh0LCBmaWxlNC50eHRcbiAgICAgKiAvLyBkaXIzIGlzIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgZmlsZTUudHh0XG4gICAgICogLy8gZGlyNCBkb2VzIG5vdCBleGlzdFxuICAgICAqXG4gICAgICogLy8gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIGlmIGEgZmlsZSBleGlzdHNcbiAgICAgKiBmdW5jdGlvbiBmaWxlRXhpc3RzKGZpbGUsIGNhbGxiYWNrKSB7XG4gICAgICogICAgZnMuYWNjZXNzKGZpbGUsIGZzLmNvbnN0YW50cy5GX09LLCAoZXJyKSA9PiB7XG4gICAgICogICAgICAgIGNhbGxiYWNrKG51bGwsICFlcnIpO1xuICAgICAqICAgIH0pO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIGNhbGxiYWNrc1xuICAgICAqIGFzeW5jLnNvbWUoWydkaXIxL21pc3NpbmcudHh0JywnZGlyMi9taXNzaW5nLnR4dCcsJ2RpcjMvZmlsZTUudHh0J10sIGZpbGVFeGlzdHMsXG4gICAgICogICAgZnVuY3Rpb24oZXJyLCByZXN1bHQpIHtcbiAgICAgKiAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgICAgLy8gdHJ1ZVxuICAgICAqICAgICAgICAvLyByZXN1bHQgaXMgdHJ1ZSBzaW5jZSBzb21lIGZpbGUgaW4gdGhlIGxpc3QgZXhpc3RzXG4gICAgICogICAgfVxuICAgICAqKTtcbiAgICAgKlxuICAgICAqIGFzeW5jLnNvbWUoWydkaXIxL21pc3NpbmcudHh0JywnZGlyMi9taXNzaW5nLnR4dCcsJ2RpcjQvbWlzc2luZy50eHQnXSwgZmlsZUV4aXN0cyxcbiAgICAgKiAgICBmdW5jdGlvbihlcnIsIHJlc3VsdCkge1xuICAgICAqICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAgICAvLyBmYWxzZVxuICAgICAqICAgICAgICAvLyByZXN1bHQgaXMgZmFsc2Ugc2luY2Ugbm9uZSBvZiB0aGUgZmlsZXMgZXhpc3RzXG4gICAgICogICAgfVxuICAgICAqKTtcbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIFByb21pc2VzXG4gICAgICogYXN5bmMuc29tZShbJ2RpcjEvbWlzc2luZy50eHQnLCdkaXIyL21pc3NpbmcudHh0JywnZGlyMy9maWxlNS50eHQnXSwgZmlsZUV4aXN0cylcbiAgICAgKiAudGhlbiggcmVzdWx0ID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgLy8gdHJ1ZVxuICAgICAqICAgICAvLyByZXN1bHQgaXMgdHJ1ZSBzaW5jZSBzb21lIGZpbGUgaW4gdGhlIGxpc3QgZXhpc3RzXG4gICAgICogfSkuY2F0Y2goIGVyciA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiBhc3luYy5zb21lKFsnZGlyMS9taXNzaW5nLnR4dCcsJ2RpcjIvbWlzc2luZy50eHQnLCdkaXI0L21pc3NpbmcudHh0J10sIGZpbGVFeGlzdHMpXG4gICAgICogLnRoZW4oIHJlc3VsdCA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XG4gICAgICogICAgIC8vIGZhbHNlXG4gICAgICogICAgIC8vIHJlc3VsdCBpcyBmYWxzZSBzaW5jZSBub25lIG9mIHRoZSBmaWxlcyBleGlzdHNcbiAgICAgKiB9KS5jYXRjaCggZXJyID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIGFzeW5jL2F3YWl0XG4gICAgICogYXN5bmMgKCkgPT4ge1xuICAgICAqICAgICB0cnkge1xuICAgICAqICAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IGFzeW5jLnNvbWUoWydkaXIxL21pc3NpbmcudHh0JywnZGlyMi9taXNzaW5nLnR4dCcsJ2RpcjMvZmlsZTUudHh0J10sIGZpbGVFeGlzdHMpO1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgICAgIC8vIHRydWVcbiAgICAgKiAgICAgICAgIC8vIHJlc3VsdCBpcyB0cnVlIHNpbmNlIHNvbWUgZmlsZSBpbiB0aGUgbGlzdCBleGlzdHNcbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICogYXN5bmMgKCkgPT4ge1xuICAgICAqICAgICB0cnkge1xuICAgICAqICAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IGFzeW5jLnNvbWUoWydkaXIxL21pc3NpbmcudHh0JywnZGlyMi9taXNzaW5nLnR4dCcsJ2RpcjQvbWlzc2luZy50eHQnXSwgZmlsZUV4aXN0cyk7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAgICAgLy8gZmFsc2VcbiAgICAgKiAgICAgICAgIC8vIHJlc3VsdCBpcyBmYWxzZSBzaW5jZSBub25lIG9mIHRoZSBmaWxlcyBleGlzdHNcbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICovXG4gICAgZnVuY3Rpb24gc29tZShjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9jcmVhdGVUZXN0ZXIoQm9vbGVhbiwgcmVzID0+IHJlcykoZWFjaE9mJDEsIGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaylcbiAgICB9XG4gICAgdmFyIHNvbWUkMSA9IGF3YWl0aWZ5KHNvbWUsIDMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNhbWUgYXMgW2Bzb21lYF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLnNvbWV9IGJ1dCBydW5zIGEgbWF4aW11bSBvZiBgbGltaXRgIGFzeW5jIG9wZXJhdGlvbnMgYXQgYSB0aW1lLlxuICAgICAqXG4gICAgICogQG5hbWUgc29tZUxpbWl0XG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMuc29tZV17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLnNvbWV9XG4gICAgICogQGFsaWFzIGFueUxpbWl0XG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfEFzeW5jSXRlcmFibGV8T2JqZWN0fSBjb2xsIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbGltaXQgLSBUaGUgbWF4aW11bSBudW1iZXIgb2YgYXN5bmMgb3BlcmF0aW9ucyBhdCBhIHRpbWUuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEFuIGFzeW5jIHRydXRoIHRlc3QgdG8gYXBwbHkgdG8gZWFjaCBpdGVtXG4gICAgICogaW4gdGhlIGNvbGxlY3Rpb25zIGluIHBhcmFsbGVsLlxuICAgICAqIFRoZSBpdGVyYXRlZSBzaG91bGQgY29tcGxldGUgd2l0aCBhIGJvb2xlYW4gYHJlc3VsdGAgdmFsdWUuXG4gICAgICogSW52b2tlZCB3aXRoIChpdGVtLCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIGFzIHNvb24gYXMgYW55XG4gICAgICogaXRlcmF0ZWUgcmV0dXJucyBgdHJ1ZWAsIG9yIGFmdGVyIGFsbCB0aGUgaXRlcmF0ZWUgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQuXG4gICAgICogUmVzdWx0IHdpbGwgYmUgZWl0aGVyIGB0cnVlYCBvciBgZmFsc2VgIGRlcGVuZGluZyBvbiB0aGUgdmFsdWVzIG9mIHRoZSBhc3luY1xuICAgICAqIHRlc3RzLiBJbnZva2VkIHdpdGggKGVyciwgcmVzdWx0KS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBwcm92aWRlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNvbWVMaW1pdChjb2xsLCBsaW1pdCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBfY3JlYXRlVGVzdGVyKEJvb2xlYW4sIHJlcyA9PiByZXMpKGVhY2hPZkxpbWl0JDIobGltaXQpLCBjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuICAgIHZhciBzb21lTGltaXQkMSA9IGF3YWl0aWZ5KHNvbWVMaW1pdCwgNCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyBbYHNvbWVgXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuc29tZX0gYnV0IHJ1bnMgb25seSBhIHNpbmdsZSBhc3luYyBvcGVyYXRpb24gYXQgYSB0aW1lLlxuICAgICAqXG4gICAgICogQG5hbWUgc29tZVNlcmllc1xuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLnNvbWVde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5zb21lfVxuICAgICAqIEBhbGlhcyBhbnlTZXJpZXNcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBbiBhc3luYyB0cnV0aCB0ZXN0IHRvIGFwcGx5IHRvIGVhY2ggaXRlbVxuICAgICAqIGluIHRoZSBjb2xsZWN0aW9ucyBpbiBzZXJpZXMuXG4gICAgICogVGhlIGl0ZXJhdGVlIHNob3VsZCBjb21wbGV0ZSB3aXRoIGEgYm9vbGVhbiBgcmVzdWx0YCB2YWx1ZS5cbiAgICAgKiBJbnZva2VkIHdpdGggKGl0ZW0sIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgYXMgc29vbiBhcyBhbnlcbiAgICAgKiBpdGVyYXRlZSByZXR1cm5zIGB0cnVlYCwgb3IgYWZ0ZXIgYWxsIHRoZSBpdGVyYXRlZSBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZC5cbiAgICAgKiBSZXN1bHQgd2lsbCBiZSBlaXRoZXIgYHRydWVgIG9yIGBmYWxzZWAgZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZXMgb2YgdGhlIGFzeW5jXG4gICAgICogdGVzdHMuIEludm9rZWQgd2l0aCAoZXJyLCByZXN1bHQpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIG5vIGNhbGxiYWNrIHByb3ZpZGVkXG4gICAgICovXG4gICAgZnVuY3Rpb24gc29tZVNlcmllcyhjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9jcmVhdGVUZXN0ZXIoQm9vbGVhbiwgcmVzID0+IHJlcykoZWFjaE9mU2VyaWVzJDEsIGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaylcbiAgICB9XG4gICAgdmFyIHNvbWVTZXJpZXMkMSA9IGF3YWl0aWZ5KHNvbWVTZXJpZXMsIDMpO1xuXG4gICAgLyoqXG4gICAgICogU29ydHMgYSBsaXN0IGJ5IHRoZSByZXN1bHRzIG9mIHJ1bm5pbmcgZWFjaCBgY29sbGAgdmFsdWUgdGhyb3VnaCBhbiBhc3luY1xuICAgICAqIGBpdGVyYXRlZWAuXG4gICAgICpcbiAgICAgKiBAbmFtZSBzb3J0QnlcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBbiBhc3luYyBmdW5jdGlvbiB0byBhcHBseSB0byBlYWNoIGl0ZW0gaW5cbiAgICAgKiBgY29sbGAuXG4gICAgICogVGhlIGl0ZXJhdGVlIHNob3VsZCBjb21wbGV0ZSB3aXRoIGEgdmFsdWUgdG8gdXNlIGFzIHRoZSBzb3J0IGNyaXRlcmlhIGFzXG4gICAgICogaXRzIGByZXN1bHRgLlxuICAgICAqIEludm9rZWQgd2l0aCAoaXRlbSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgYWZ0ZXIgYWxsIHRoZVxuICAgICAqIGBpdGVyYXRlZWAgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQsIG9yIGFuIGVycm9yIG9jY3Vycy4gUmVzdWx0cyBpcyB0aGUgaXRlbXNcbiAgICAgKiBmcm9tIHRoZSBvcmlnaW5hbCBgY29sbGAgc29ydGVkIGJ5IHRoZSB2YWx1ZXMgcmV0dXJuZWQgYnkgdGhlIGBpdGVyYXRlZWBcbiAgICAgKiBjYWxscy4gSW52b2tlZCB3aXRoIChlcnIsIHJlc3VsdHMpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIG5vIGNhbGxiYWNrIHBhc3NlZFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBiaWdmaWxlLnR4dCBpcyBhIGZpbGUgdGhhdCBpcyAyNTExMDAgYnl0ZXMgaW4gc2l6ZVxuICAgICAqIC8vIG1lZGl1bWZpbGUudHh0IGlzIGEgZmlsZSB0aGF0IGlzIDExMDAwIGJ5dGVzIGluIHNpemVcbiAgICAgKiAvLyBzbWFsbGZpbGUudHh0IGlzIGEgZmlsZSB0aGF0IGlzIDEyMSBieXRlcyBpbiBzaXplXG4gICAgICpcbiAgICAgKiAvLyBhc3luY2hyb25vdXMgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBmaWxlIHNpemUgaW4gYnl0ZXNcbiAgICAgKiBmdW5jdGlvbiBnZXRGaWxlU2l6ZUluQnl0ZXMoZmlsZSwgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgZnMuc3RhdChmaWxlLCBmdW5jdGlvbihlcnIsIHN0YXQpIHtcbiAgICAgKiAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgKiAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgKiAgICAgICAgIH1cbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsIHN0YXQuc2l6ZSk7XG4gICAgICogICAgIH0pO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIGNhbGxiYWNrc1xuICAgICAqIGFzeW5jLnNvcnRCeShbJ21lZGl1bWZpbGUudHh0Jywnc21hbGxmaWxlLnR4dCcsJ2JpZ2ZpbGUudHh0J10sIGdldEZpbGVTaXplSW5CeXRlcyxcbiAgICAgKiAgICAgZnVuY3Rpb24oZXJyLCByZXN1bHRzKSB7XG4gICAgICogICAgICAgICBpZiAoZXJyKSB7XG4gICAgICogICAgICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgICAgIH0gZWxzZSB7XG4gICAgICogICAgICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgICAgICAgICAgLy8gcmVzdWx0cyBpcyBub3cgdGhlIG9yaWdpbmFsIGFycmF5IG9mIGZpbGVzIHNvcnRlZCBieVxuICAgICAqICAgICAgICAgICAgIC8vIGZpbGUgc2l6ZSAoYXNjZW5kaW5nIGJ5IGRlZmF1bHQpLCBlLmcuXG4gICAgICogICAgICAgICAgICAgLy8gWyAnc21hbGxmaWxlLnR4dCcsICdtZWRpdW1maWxlLnR4dCcsICdiaWdmaWxlLnR4dCddXG4gICAgICogICAgICAgICB9XG4gICAgICogICAgIH1cbiAgICAgKiApO1xuICAgICAqXG4gICAgICogLy8gQnkgbW9kaWZ5aW5nIHRoZSBjYWxsYmFjayBwYXJhbWV0ZXIgdGhlXG4gICAgICogLy8gc29ydGluZyBvcmRlciBjYW4gYmUgaW5mbHVlbmNlZDpcbiAgICAgKlxuICAgICAqIC8vIGFzY2VuZGluZyBvcmRlclxuICAgICAqIGFzeW5jLnNvcnRCeShbJ21lZGl1bWZpbGUudHh0Jywnc21hbGxmaWxlLnR4dCcsJ2JpZ2ZpbGUudHh0J10sIGZ1bmN0aW9uKGZpbGUsIGNhbGxiYWNrKSB7XG4gICAgICogICAgIGdldEZpbGVTaXplSW5CeXRlcyhmaWxlLCBmdW5jdGlvbihnZXRGaWxlU2l6ZUVyciwgZmlsZVNpemUpIHtcbiAgICAgKiAgICAgICAgIGlmIChnZXRGaWxlU2l6ZUVycikgcmV0dXJuIGNhbGxiYWNrKGdldEZpbGVTaXplRXJyKTtcbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsIGZpbGVTaXplKTtcbiAgICAgKiAgICAgfSk7XG4gICAgICogfSwgZnVuY3Rpb24oZXJyLCByZXN1bHRzKSB7XG4gICAgICogICAgICAgICBpZiAoZXJyKSB7XG4gICAgICogICAgICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgICAgIH0gZWxzZSB7XG4gICAgICogICAgICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgICAgICAgICAgLy8gcmVzdWx0cyBpcyBub3cgdGhlIG9yaWdpbmFsIGFycmF5IG9mIGZpbGVzIHNvcnRlZCBieVxuICAgICAqICAgICAgICAgICAgIC8vIGZpbGUgc2l6ZSAoYXNjZW5kaW5nIGJ5IGRlZmF1bHQpLCBlLmcuXG4gICAgICogICAgICAgICAgICAgLy8gWyAnc21hbGxmaWxlLnR4dCcsICdtZWRpdW1maWxlLnR4dCcsICdiaWdmaWxlLnR4dCddXG4gICAgICogICAgICAgICB9XG4gICAgICogICAgIH1cbiAgICAgKiApO1xuICAgICAqXG4gICAgICogLy8gZGVzY2VuZGluZyBvcmRlclxuICAgICAqIGFzeW5jLnNvcnRCeShbJ2JpZ2ZpbGUudHh0JywnbWVkaXVtZmlsZS50eHQnLCdzbWFsbGZpbGUudHh0J10sIGZ1bmN0aW9uKGZpbGUsIGNhbGxiYWNrKSB7XG4gICAgICogICAgIGdldEZpbGVTaXplSW5CeXRlcyhmaWxlLCBmdW5jdGlvbihnZXRGaWxlU2l6ZUVyciwgZmlsZVNpemUpIHtcbiAgICAgKiAgICAgICAgIGlmIChnZXRGaWxlU2l6ZUVycikge1xuICAgICAqICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhnZXRGaWxlU2l6ZUVycik7XG4gICAgICogICAgICAgICB9XG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCBmaWxlU2l6ZSAqIC0xKTtcbiAgICAgKiAgICAgfSk7XG4gICAgICogfSwgZnVuY3Rpb24oZXJyLCByZXN1bHRzKSB7XG4gICAgICogICAgICAgICBpZiAoZXJyKSB7XG4gICAgICogICAgICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgICAgIH0gZWxzZSB7XG4gICAgICogICAgICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgICAgICAgICAgLy8gcmVzdWx0cyBpcyBub3cgdGhlIG9yaWdpbmFsIGFycmF5IG9mIGZpbGVzIHNvcnRlZCBieVxuICAgICAqICAgICAgICAgICAgIC8vIGZpbGUgc2l6ZSAoYXNjZW5kaW5nIGJ5IGRlZmF1bHQpLCBlLmcuXG4gICAgICogICAgICAgICAgICAgLy8gWyAnYmlnZmlsZS50eHQnLCAnbWVkaXVtZmlsZS50eHQnLCAnc21hbGxmaWxlLnR4dCddXG4gICAgICogICAgICAgICB9XG4gICAgICogICAgIH1cbiAgICAgKiApO1xuICAgICAqXG4gICAgICogLy8gRXJyb3IgaGFuZGxpbmdcbiAgICAgKiBhc3luYy5zb3J0QnkoWydtZWRpdW1maWxlLnR4dCcsJ3NtYWxsZmlsZS50eHQnLCdtaXNzaW5nZmlsZS50eHQnXSwgZ2V0RmlsZVNpemVJbkJ5dGVzLFxuICAgICAqICAgICBmdW5jdGlvbihlcnIsIHJlc3VsdHMpIHtcbiAgICAgKiAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgKiAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICAgICAgICAgIC8vIFsgRXJyb3I6IEVOT0VOVDogbm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSBdXG4gICAgICogICAgICAgICB9IGVsc2Uge1xuICAgICAqICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgICAgICAgfVxuICAgICAqICAgICB9XG4gICAgICogKTtcbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIFByb21pc2VzXG4gICAgICogYXN5bmMuc29ydEJ5KFsnbWVkaXVtZmlsZS50eHQnLCdzbWFsbGZpbGUudHh0JywnYmlnZmlsZS50eHQnXSwgZ2V0RmlsZVNpemVJbkJ5dGVzKVxuICAgICAqIC50aGVuKCByZXN1bHRzID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgIC8vIHJlc3VsdHMgaXMgbm93IHRoZSBvcmlnaW5hbCBhcnJheSBvZiBmaWxlcyBzb3J0ZWQgYnlcbiAgICAgKiAgICAgLy8gZmlsZSBzaXplIChhc2NlbmRpbmcgYnkgZGVmYXVsdCksIGUuZy5cbiAgICAgKiAgICAgLy8gWyAnc21hbGxmaWxlLnR4dCcsICdtZWRpdW1maWxlLnR4dCcsICdiaWdmaWxlLnR4dCddXG4gICAgICogfSkuY2F0Y2goIGVyciA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBFcnJvciBoYW5kbGluZ1xuICAgICAqIGFzeW5jLnNvcnRCeShbJ21lZGl1bWZpbGUudHh0Jywnc21hbGxmaWxlLnR4dCcsJ21pc3NpbmdmaWxlLnR4dCddLCBnZXRGaWxlU2l6ZUluQnl0ZXMpXG4gICAgICogLnRoZW4oIHJlc3VsdHMgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiB9KS5jYXRjaCggZXJyID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgLy8gWyBFcnJvcjogRU5PRU5UOiBubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IF1cbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIGFzeW5jL2F3YWl0XG4gICAgICogKGFzeW5jICgpID0+IHtcbiAgICAgKiAgICAgdHJ5IHtcbiAgICAgKiAgICAgICAgIGxldCByZXN1bHRzID0gYXdhaXQgYXN5bmMuc29ydEJ5KFsnYmlnZmlsZS50eHQnLCdtZWRpdW1maWxlLnR4dCcsJ3NtYWxsZmlsZS50eHQnXSwgZ2V0RmlsZVNpemVJbkJ5dGVzKTtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgICAgICAgLy8gcmVzdWx0cyBpcyBub3cgdGhlIG9yaWdpbmFsIGFycmF5IG9mIGZpbGVzIHNvcnRlZCBieVxuICAgICAqICAgICAgICAgLy8gZmlsZSBzaXplIChhc2NlbmRpbmcgYnkgZGVmYXVsdCksIGUuZy5cbiAgICAgKiAgICAgICAgIC8vIFsgJ3NtYWxsZmlsZS50eHQnLCAnbWVkaXVtZmlsZS50eHQnLCAnYmlnZmlsZS50eHQnXVxuICAgICAqICAgICB9XG4gICAgICogICAgIGNhdGNoIChlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgIH1cbiAgICAgKiB9KSgpO1xuICAgICAqXG4gICAgICogLy8gRXJyb3IgaGFuZGxpbmdcbiAgICAgKiBhc3luYyAoKSA9PiB7XG4gICAgICogICAgIHRyeSB7XG4gICAgICogICAgICAgICBsZXQgcmVzdWx0cyA9IGF3YWl0IGFzeW5jLnNvcnRCeShbJ21pc3NpbmdmaWxlLnR4dCcsJ21lZGl1bWZpbGUudHh0Jywnc21hbGxmaWxlLnR4dCddLCBnZXRGaWxlU2l6ZUluQnl0ZXMpO1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgIH1cbiAgICAgKiAgICAgY2F0Y2ggKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgICAgIC8vIFsgRXJyb3I6IEVOT0VOVDogbm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSBdXG4gICAgICogICAgIH1cbiAgICAgKiB9XG4gICAgICpcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzb3J0QnkgKGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgX2l0ZXJhdGVlID0gd3JhcEFzeW5jKGl0ZXJhdGVlKTtcbiAgICAgICAgcmV0dXJuIG1hcCQxKGNvbGwsICh4LCBpdGVyQ2IpID0+IHtcbiAgICAgICAgICAgIF9pdGVyYXRlZSh4LCAoZXJyLCBjcml0ZXJpYSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBpdGVyQ2IoZXJyKTtcbiAgICAgICAgICAgICAgICBpdGVyQ2IoZXJyLCB7dmFsdWU6IHgsIGNyaXRlcmlhfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgKGVyciwgcmVzdWx0cykgPT4ge1xuICAgICAgICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXN1bHRzLnNvcnQoY29tcGFyYXRvcikubWFwKHYgPT4gdi52YWx1ZSkpO1xuICAgICAgICB9KTtcblxuICAgICAgICBmdW5jdGlvbiBjb21wYXJhdG9yKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgICAgICB2YXIgYSA9IGxlZnQuY3JpdGVyaWEsIGIgPSByaWdodC5jcml0ZXJpYTtcbiAgICAgICAgICAgIHJldHVybiBhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogMDtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgc29ydEJ5JDEgPSBhd2FpdGlmeShzb3J0QnksIDMpO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyBhIHRpbWUgbGltaXQgb24gYW4gYXN5bmNocm9ub3VzIGZ1bmN0aW9uLiBJZiB0aGUgZnVuY3Rpb24gZG9lcyBub3QgY2FsbFxuICAgICAqIGl0cyBjYWxsYmFjayB3aXRoaW4gdGhlIHNwZWNpZmllZCBtaWxsaXNlY29uZHMsIGl0IHdpbGwgYmUgY2FsbGVkIHdpdGggYVxuICAgICAqIHRpbWVvdXQgZXJyb3IuIFRoZSBjb2RlIHByb3BlcnR5IGZvciB0aGUgZXJyb3Igb2JqZWN0IHdpbGwgYmUgYCdFVElNRURPVVQnYC5cbiAgICAgKlxuICAgICAqIEBuYW1lIHRpbWVvdXRcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpVdGlsc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gYXN5bmNGbiAtIFRoZSBhc3luYyBmdW5jdGlvbiB0byBsaW1pdCBpbiB0aW1lLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBtaWxsaXNlY29uZHMgLSBUaGUgc3BlY2lmaWVkIHRpbWUgbGltaXQuXG4gICAgICogQHBhcmFtIHsqfSBbaW5mb10gLSBBbnkgdmFyaWFibGUgeW91IHdhbnQgYXR0YWNoZWQgKGBzdHJpbmdgLCBgb2JqZWN0YCwgZXRjKVxuICAgICAqIHRvIHRpbWVvdXQgRXJyb3IgZm9yIG1vcmUgaW5mb3JtYXRpb24uLlxuICAgICAqIEByZXR1cm5zIHtBc3luY0Z1bmN0aW9ufSBSZXR1cm5zIGEgd3JhcHBlZCBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkIHdpdGggYW55XG4gICAgICogb2YgdGhlIGNvbnRyb2wgZmxvdyBmdW5jdGlvbnMuXG4gICAgICogSW52b2tlIHRoaXMgZnVuY3Rpb24gd2l0aCB0aGUgc2FtZSBwYXJhbWV0ZXJzIGFzIHlvdSB3b3VsZCBgYXN5bmNGdW5jYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gbXlGdW5jdGlvbihmb28sIGNhbGxiYWNrKSB7XG4gICAgICogICAgIGRvQXN5bmNUYXNrKGZvbywgZnVuY3Rpb24oZXJyLCBkYXRhKSB7XG4gICAgICogICAgICAgICAvLyBoYW5kbGUgZXJyb3JzXG4gICAgICogICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgKlxuICAgICAqICAgICAgICAgLy8gZG8gc29tZSBzdHVmZiAuLi5cbiAgICAgKlxuICAgICAqICAgICAgICAgLy8gcmV0dXJuIHByb2Nlc3NlZCBkYXRhXG4gICAgICogICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCwgZGF0YSk7XG4gICAgICogICAgIH0pO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIHZhciB3cmFwcGVkID0gYXN5bmMudGltZW91dChteUZ1bmN0aW9uLCAxMDAwKTtcbiAgICAgKlxuICAgICAqIC8vIGNhbGwgYHdyYXBwZWRgIGFzIHlvdSB3b3VsZCBgbXlGdW5jdGlvbmBcbiAgICAgKiB3cmFwcGVkKHsgYmFyOiAnYmFyJyB9LCBmdW5jdGlvbihlcnIsIGRhdGEpIHtcbiAgICAgKiAgICAgLy8gaWYgYG15RnVuY3Rpb25gIHRha2VzIDwgMTAwMCBtcyB0byBleGVjdXRlLCBgZXJyYFxuICAgICAqICAgICAvLyBhbmQgYGRhdGFgIHdpbGwgaGF2ZSB0aGVpciBleHBlY3RlZCB2YWx1ZXNcbiAgICAgKlxuICAgICAqICAgICAvLyBlbHNlIGBlcnJgIHdpbGwgYmUgYW4gRXJyb3Igd2l0aCB0aGUgY29kZSAnRVRJTUVET1VUJ1xuICAgICAqIH0pO1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRpbWVvdXQoYXN5bmNGbiwgbWlsbGlzZWNvbmRzLCBpbmZvKSB7XG4gICAgICAgIHZhciBmbiA9IHdyYXBBc3luYyhhc3luY0ZuKTtcblxuICAgICAgICByZXR1cm4gaW5pdGlhbFBhcmFtcygoYXJncywgY2FsbGJhY2spID0+IHtcbiAgICAgICAgICAgIHZhciB0aW1lZE91dCA9IGZhbHNlO1xuICAgICAgICAgICAgdmFyIHRpbWVyO1xuXG4gICAgICAgICAgICBmdW5jdGlvbiB0aW1lb3V0Q2FsbGJhY2soKSB7XG4gICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBhc3luY0ZuLm5hbWUgfHwgJ2Fub255bW91cyc7XG4gICAgICAgICAgICAgICAgdmFyIGVycm9yICA9IG5ldyBFcnJvcignQ2FsbGJhY2sgZnVuY3Rpb24gXCInICsgbmFtZSArICdcIiB0aW1lZCBvdXQuJyk7XG4gICAgICAgICAgICAgICAgZXJyb3IuY29kZSA9ICdFVElNRURPVVQnO1xuICAgICAgICAgICAgICAgIGlmIChpbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yLmluZm8gPSBpbmZvO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aW1lZE91dCA9IHRydWU7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhcmdzLnB1c2goKC4uLmNiQXJncykgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGltZWRPdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soLi4uY2JBcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8gc2V0dXAgdGltZXIgYW5kIGNhbGwgb3JpZ2luYWwgZnVuY3Rpb25cbiAgICAgICAgICAgIHRpbWVyID0gc2V0VGltZW91dCh0aW1lb3V0Q2FsbGJhY2ssIG1pbGxpc2Vjb25kcyk7XG4gICAgICAgICAgICBmbiguLi5hcmdzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmFuZ2Uoc2l6ZSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gQXJyYXkoc2l6ZSk7XG4gICAgICAgIHdoaWxlIChzaXplLS0pIHtcbiAgICAgICAgICAgIHJlc3VsdFtzaXplXSA9IHNpemU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyBbdGltZXNde0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy50aW1lc30gYnV0IHJ1bnMgYSBtYXhpbXVtIG9mIGBsaW1pdGAgYXN5bmMgb3BlcmF0aW9ucyBhdCBhXG4gICAgICogdGltZS5cbiAgICAgKlxuICAgICAqIEBuYW1lIHRpbWVzTGltaXRcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb250cm9sRmxvd1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy50aW1lc117QGxpbmsgbW9kdWxlOkNvbnRyb2xGbG93LnRpbWVzfVxuICAgICAqIEBjYXRlZ29yeSBDb250cm9sIEZsb3dcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gY291bnQgLSBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIHJ1biB0aGUgZnVuY3Rpb24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbWl0IC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGFzeW5jIG9wZXJhdGlvbnMgYXQgYSB0aW1lLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBUaGUgYXN5bmMgZnVuY3Rpb24gdG8gY2FsbCBgbmAgdGltZXMuXG4gICAgICogSW52b2tlZCB3aXRoIHRoZSBpdGVyYXRpb24gaW5kZXggYW5kIGEgY2FsbGJhY2s6IChuLCBuZXh0KS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAtIHNlZSBbYXN5bmMubWFwXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMubWFwfS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBpcyBwcm92aWRlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRpbWVzTGltaXQoY291bnQsIGxpbWl0LCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIF9pdGVyYXRlZSA9IHdyYXBBc3luYyhpdGVyYXRlZSk7XG4gICAgICAgIHJldHVybiBtYXBMaW1pdCQxKHJhbmdlKGNvdW50KSwgbGltaXQsIF9pdGVyYXRlZSwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhbGxzIHRoZSBgaXRlcmF0ZWVgIGZ1bmN0aW9uIGBuYCB0aW1lcywgYW5kIGFjY3VtdWxhdGVzIHJlc3VsdHMgaW4gdGhlIHNhbWVcbiAgICAgKiBtYW5uZXIgeW91IHdvdWxkIHVzZSB3aXRoIFttYXBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5tYXB9LlxuICAgICAqXG4gICAgICogQG5hbWUgdGltZXNcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb250cm9sRmxvd1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5tYXBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5tYXB9XG4gICAgICogQGNhdGVnb3J5IENvbnRyb2wgRmxvd1xuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuIC0gVGhlIG51bWJlciBvZiB0aW1lcyB0byBydW4gdGhlIGZ1bmN0aW9uLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBUaGUgYXN5bmMgZnVuY3Rpb24gdG8gY2FsbCBgbmAgdGltZXMuXG4gICAgICogSW52b2tlZCB3aXRoIHRoZSBpdGVyYXRpb24gaW5kZXggYW5kIGEgY2FsbGJhY2s6IChuLCBuZXh0KS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAtIHNlZSB7QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLm1hcH0uXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgaXMgcHJvdmlkZWRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gUHJldGVuZCB0aGlzIGlzIHNvbWUgY29tcGxpY2F0ZWQgYXN5bmMgZmFjdG9yeVxuICAgICAqIHZhciBjcmVhdGVVc2VyID0gZnVuY3Rpb24oaWQsIGNhbGxiYWNrKSB7XG4gICAgICogICAgIGNhbGxiYWNrKG51bGwsIHtcbiAgICAgKiAgICAgICAgIGlkOiAndXNlcicgKyBpZFxuICAgICAqICAgICB9KTtcbiAgICAgKiB9O1xuICAgICAqXG4gICAgICogLy8gZ2VuZXJhdGUgNSB1c2Vyc1xuICAgICAqIGFzeW5jLnRpbWVzKDUsIGZ1bmN0aW9uKG4sIG5leHQpIHtcbiAgICAgKiAgICAgY3JlYXRlVXNlcihuLCBmdW5jdGlvbihlcnIsIHVzZXIpIHtcbiAgICAgKiAgICAgICAgIG5leHQoZXJyLCB1c2VyKTtcbiAgICAgKiAgICAgfSk7XG4gICAgICogfSwgZnVuY3Rpb24oZXJyLCB1c2Vycykge1xuICAgICAqICAgICAvLyB3ZSBzaG91bGQgbm93IGhhdmUgNSB1c2Vyc1xuICAgICAqIH0pO1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRpbWVzIChuLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIHRpbWVzTGltaXQobiwgSW5maW5pdHksIGl0ZXJhdGVlLCBjYWxsYmFjaylcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyBbdGltZXNde0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy50aW1lc30gYnV0IHJ1bnMgb25seSBhIHNpbmdsZSBhc3luYyBvcGVyYXRpb24gYXQgYSB0aW1lLlxuICAgICAqXG4gICAgICogQG5hbWUgdGltZXNTZXJpZXNcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb250cm9sRmxvd1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy50aW1lc117QGxpbmsgbW9kdWxlOkNvbnRyb2xGbG93LnRpbWVzfVxuICAgICAqIEBjYXRlZ29yeSBDb250cm9sIEZsb3dcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbiAtIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gcnVuIHRoZSBmdW5jdGlvbi5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gVGhlIGFzeW5jIGZ1bmN0aW9uIHRvIGNhbGwgYG5gIHRpbWVzLlxuICAgICAqIEludm9rZWQgd2l0aCB0aGUgaXRlcmF0aW9uIGluZGV4IGFuZCBhIGNhbGxiYWNrOiAobiwgbmV4dCkuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgLSBzZWUge0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5tYXB9LlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIG5vIGNhbGxiYWNrIGlzIHByb3ZpZGVkXG4gICAgICovXG4gICAgZnVuY3Rpb24gdGltZXNTZXJpZXMgKG4sIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gdGltZXNMaW1pdChuLCAxLCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSByZWxhdGl2ZSBvZiBgcmVkdWNlYC4gIFRha2VzIGFuIE9iamVjdCBvciBBcnJheSwgYW5kIGl0ZXJhdGVzIG92ZXIgZWFjaFxuICAgICAqIGVsZW1lbnQgaW4gcGFyYWxsZWwsIGVhY2ggc3RlcCBwb3RlbnRpYWxseSBtdXRhdGluZyBhbiBgYWNjdW11bGF0b3JgIHZhbHVlLlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBhY2N1bXVsYXRvciBkZWZhdWx0cyB0byB0aGUgdHlwZSBvZiBjb2xsZWN0aW9uIHBhc3NlZCBpbi5cbiAgICAgKlxuICAgICAqIEBuYW1lIHRyYW5zZm9ybVxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHsqfSBbYWNjdW11bGF0b3JdIC0gVGhlIGluaXRpYWwgc3RhdGUgb2YgdGhlIHRyYW5zZm9ybS4gIElmIG9taXR0ZWQsXG4gICAgICogaXQgd2lsbCBkZWZhdWx0IHRvIGFuIGVtcHR5IE9iamVjdCBvciBBcnJheSwgZGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mIGBjb2xsYFxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBIGZ1bmN0aW9uIGFwcGxpZWQgdG8gZWFjaCBpdGVtIGluIHRoZVxuICAgICAqIGNvbGxlY3Rpb24gdGhhdCBwb3RlbnRpYWxseSBtb2RpZmllcyB0aGUgYWNjdW11bGF0b3IuXG4gICAgICogSW52b2tlZCB3aXRoIChhY2N1bXVsYXRvciwgaXRlbSwga2V5LCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIGFmdGVyIGFsbCB0aGVcbiAgICAgKiBgaXRlcmF0ZWVgIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLiBSZXN1bHQgaXMgdGhlIHRyYW5zZm9ybWVkIGFjY3VtdWxhdG9yLlxuICAgICAqIEludm9rZWQgd2l0aCAoZXJyLCByZXN1bHQpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIG5vIGNhbGxiYWNrIHByb3ZpZGVkXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vIGZpbGUxLnR4dCBpcyBhIGZpbGUgdGhhdCBpcyAxMDAwIGJ5dGVzIGluIHNpemVcbiAgICAgKiAvLyBmaWxlMi50eHQgaXMgYSBmaWxlIHRoYXQgaXMgMjAwMCBieXRlcyBpbiBzaXplXG4gICAgICogLy8gZmlsZTMudHh0IGlzIGEgZmlsZSB0aGF0IGlzIDMwMDAgYnl0ZXMgaW4gc2l6ZVxuICAgICAqXG4gICAgICogLy8gaGVscGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBodW1hbi1yZWFkYWJsZSBzaXplIGZvcm1hdCBmcm9tIGJ5dGVzXG4gICAgICogZnVuY3Rpb24gZm9ybWF0Qnl0ZXMoYnl0ZXMsIGRlY2ltYWxzID0gMikge1xuICAgICAqICAgLy8gaW1wbGVtZW50YXRpb24gbm90IGluY2x1ZGVkIGZvciBicmV2aXR5XG4gICAgICogICByZXR1cm4gaHVtYW5SZWFkYmxlRmlsZXNpemU7XG4gICAgICogfVxuICAgICAqXG4gICAgICogY29uc3QgZmlsZUxpc3QgPSBbJ2ZpbGUxLnR4dCcsJ2ZpbGUyLnR4dCcsJ2ZpbGUzLnR4dCddO1xuICAgICAqXG4gICAgICogLy8gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgZmlsZSBzaXplLCB0cmFuc2Zvcm1lZCB0byBodW1hbi1yZWFkYWJsZSBmb3JtYXRcbiAgICAgKiAvLyBlLmcuIDEwMjQgYnl0ZXMgPSAxS0IsIDEyMzQgYnl0ZXMgPSAxLjIxIEtCLCAxMDQ4NTc2IGJ5dGVzID0gMU1CLCBldGMuXG4gICAgICogZnVuY3Rpb24gdHJhbnNmb3JtRmlsZVNpemUoYWNjLCB2YWx1ZSwga2V5LCBjYWxsYmFjaykge1xuICAgICAqICAgICBmcy5zdGF0KHZhbHVlLCBmdW5jdGlvbihlcnIsIHN0YXQpIHtcbiAgICAgKiAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgKiAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgKiAgICAgICAgIH1cbiAgICAgKiAgICAgICAgIGFjY1trZXldID0gZm9ybWF0Qnl0ZXMoc3RhdC5zaXplKTtcbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAqICAgICB9KTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBjYWxsYmFja3NcbiAgICAgKiBhc3luYy50cmFuc2Zvcm0oZmlsZUxpc3QsIHRyYW5zZm9ybUZpbGVTaXplLCBmdW5jdGlvbihlcnIsIHJlc3VsdCkge1xuICAgICAqICAgICBpZihlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgIH0gZWxzZSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAgICAgLy8gWyAnMTAwMCBCeXRlcycsICcxLjk1IEtCJywgJzIuOTMgS0InIF1cbiAgICAgKiAgICAgfVxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgUHJvbWlzZXNcbiAgICAgKiBhc3luYy50cmFuc2Zvcm0oZmlsZUxpc3QsIHRyYW5zZm9ybUZpbGVTaXplKVxuICAgICAqIC50aGVuKHJlc3VsdCA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XG4gICAgICogICAgIC8vIFsgJzEwMDAgQnl0ZXMnLCAnMS45NSBLQicsICcyLjkzIEtCJyBdXG4gICAgICogfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIGFzeW5jL2F3YWl0XG4gICAgICogKGFzeW5jICgpID0+IHtcbiAgICAgKiAgICAgdHJ5IHtcbiAgICAgKiAgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBhc3luYy50cmFuc2Zvcm0oZmlsZUxpc3QsIHRyYW5zZm9ybUZpbGVTaXplKTtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XG4gICAgICogICAgICAgICAvLyBbICcxMDAwIEJ5dGVzJywgJzEuOTUgS0InLCAnMi45MyBLQicgXVxuICAgICAqICAgICB9XG4gICAgICogICAgIGNhdGNoIChlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgIH1cbiAgICAgKiB9KSgpO1xuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vIGZpbGUxLnR4dCBpcyBhIGZpbGUgdGhhdCBpcyAxMDAwIGJ5dGVzIGluIHNpemVcbiAgICAgKiAvLyBmaWxlMi50eHQgaXMgYSBmaWxlIHRoYXQgaXMgMjAwMCBieXRlcyBpbiBzaXplXG4gICAgICogLy8gZmlsZTMudHh0IGlzIGEgZmlsZSB0aGF0IGlzIDMwMDAgYnl0ZXMgaW4gc2l6ZVxuICAgICAqXG4gICAgICogLy8gaGVscGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBodW1hbi1yZWFkYWJsZSBzaXplIGZvcm1hdCBmcm9tIGJ5dGVzXG4gICAgICogZnVuY3Rpb24gZm9ybWF0Qnl0ZXMoYnl0ZXMsIGRlY2ltYWxzID0gMikge1xuICAgICAqICAgLy8gaW1wbGVtZW50YXRpb24gbm90IGluY2x1ZGVkIGZvciBicmV2aXR5XG4gICAgICogICByZXR1cm4gaHVtYW5SZWFkYmxlRmlsZXNpemU7XG4gICAgICogfVxuICAgICAqXG4gICAgICogY29uc3QgZmlsZU1hcCA9IHsgZjE6ICdmaWxlMS50eHQnLCBmMjogJ2ZpbGUyLnR4dCcsIGYzOiAnZmlsZTMudHh0JyB9O1xuICAgICAqXG4gICAgICogLy8gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgZmlsZSBzaXplLCB0cmFuc2Zvcm1lZCB0byBodW1hbi1yZWFkYWJsZSBmb3JtYXRcbiAgICAgKiAvLyBlLmcuIDEwMjQgYnl0ZXMgPSAxS0IsIDEyMzQgYnl0ZXMgPSAxLjIxIEtCLCAxMDQ4NTc2IGJ5dGVzID0gMU1CLCBldGMuXG4gICAgICogZnVuY3Rpb24gdHJhbnNmb3JtRmlsZVNpemUoYWNjLCB2YWx1ZSwga2V5LCBjYWxsYmFjaykge1xuICAgICAqICAgICBmcy5zdGF0KHZhbHVlLCBmdW5jdGlvbihlcnIsIHN0YXQpIHtcbiAgICAgKiAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgKiAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgKiAgICAgICAgIH1cbiAgICAgKiAgICAgICAgIGFjY1trZXldID0gZm9ybWF0Qnl0ZXMoc3RhdC5zaXplKTtcbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAqICAgICB9KTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBjYWxsYmFja3NcbiAgICAgKiBhc3luYy50cmFuc2Zvcm0oZmlsZU1hcCwgdHJhbnNmb3JtRmlsZVNpemUsIGZ1bmN0aW9uKGVyciwgcmVzdWx0KSB7XG4gICAgICogICAgIGlmKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgfSBlbHNlIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XG4gICAgICogICAgICAgICAvLyB7IGYxOiAnMTAwMCBCeXRlcycsIGYyOiAnMS45NSBLQicsIGYzOiAnMi45MyBLQicgfVxuICAgICAqICAgICB9XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBQcm9taXNlc1xuICAgICAqIGFzeW5jLnRyYW5zZm9ybShmaWxlTWFwLCB0cmFuc2Zvcm1GaWxlU2l6ZSlcbiAgICAgKiAudGhlbihyZXN1bHQgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAvLyB7IGYxOiAnMTAwMCBCeXRlcycsIGYyOiAnMS45NSBLQicsIGYzOiAnMi45MyBLQicgfVxuICAgICAqIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBhc3luYy9hd2FpdFxuICAgICAqIGFzeW5jICgpID0+IHtcbiAgICAgKiAgICAgdHJ5IHtcbiAgICAgKiAgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBhc3luYy50cmFuc2Zvcm0oZmlsZU1hcCwgdHJhbnNmb3JtRmlsZVNpemUpO1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgICAgIC8vIHsgZjE6ICcxMDAwIEJ5dGVzJywgZjI6ICcxLjk1IEtCJywgZjM6ICcyLjkzIEtCJyB9XG4gICAgICogICAgIH1cbiAgICAgKiAgICAgY2F0Y2ggKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRyYW5zZm9ybSAoY29sbCwgYWNjdW11bGF0b3IsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8PSAzICYmIHR5cGVvZiBhY2N1bXVsYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSBpdGVyYXRlZTtcbiAgICAgICAgICAgIGl0ZXJhdGVlID0gYWNjdW11bGF0b3I7XG4gICAgICAgICAgICBhY2N1bXVsYXRvciA9IEFycmF5LmlzQXJyYXkoY29sbCkgPyBbXSA6IHt9O1xuICAgICAgICB9XG4gICAgICAgIGNhbGxiYWNrID0gb25jZShjYWxsYmFjayB8fCBwcm9taXNlQ2FsbGJhY2soKSk7XG4gICAgICAgIHZhciBfaXRlcmF0ZWUgPSB3cmFwQXN5bmMoaXRlcmF0ZWUpO1xuXG4gICAgICAgIGVhY2hPZiQxKGNvbGwsICh2LCBrLCBjYikgPT4ge1xuICAgICAgICAgICAgX2l0ZXJhdGVlKGFjY3VtdWxhdG9yLCB2LCBrLCBjYik7XG4gICAgICAgIH0sIGVyciA9PiBjYWxsYmFjayhlcnIsIGFjY3VtdWxhdG9yKSk7XG4gICAgICAgIHJldHVybiBjYWxsYmFja1tQUk9NSVNFX1NZTUJPTF1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJdCBydW5zIGVhY2ggdGFzayBpbiBzZXJpZXMgYnV0IHN0b3BzIHdoZW5ldmVyIGFueSBvZiB0aGUgZnVuY3Rpb25zIHdlcmVcbiAgICAgKiBzdWNjZXNzZnVsLiBJZiBvbmUgb2YgdGhlIHRhc2tzIHdlcmUgc3VjY2Vzc2Z1bCwgdGhlIGBjYWxsYmFja2Agd2lsbCBiZVxuICAgICAqIHBhc3NlZCB0aGUgcmVzdWx0IG9mIHRoZSBzdWNjZXNzZnVsIHRhc2suIElmIGFsbCB0YXNrcyBmYWlsLCB0aGUgY2FsbGJhY2tcbiAgICAgKiB3aWxsIGJlIHBhc3NlZCB0aGUgZXJyb3IgYW5kIHJlc3VsdCAoaWYgYW55KSBvZiB0aGUgZmluYWwgYXR0ZW1wdC5cbiAgICAgKlxuICAgICAqIEBuYW1lIHRyeUVhY2hcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb250cm9sRmxvd1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgQ29udHJvbCBGbG93XG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gdGFza3MgLSBBIGNvbGxlY3Rpb24gY29udGFpbmluZyBmdW5jdGlvbnMgdG9cbiAgICAgKiBydW4sIGVhY2ggZnVuY3Rpb24gaXMgcGFzc2VkIGEgYGNhbGxiYWNrKGVyciwgcmVzdWx0KWAgaXQgbXVzdCBjYWxsIG9uXG4gICAgICogY29tcGxldGlvbiB3aXRoIGFuIGVycm9yIGBlcnJgICh3aGljaCBjYW4gYmUgYG51bGxgKSBhbmQgYW4gb3B0aW9uYWwgYHJlc3VsdGBcbiAgICAgKiB2YWx1ZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQW4gb3B0aW9uYWwgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIHdoZW4gb25lXG4gICAgICogb2YgdGhlIHRhc2tzIGhhcyBzdWNjZWVkZWQsIG9yIGFsbCBoYXZlIGZhaWxlZC4gSXQgcmVjZWl2ZXMgdGhlIGBlcnJgIGFuZFxuICAgICAqIGByZXN1bHRgIGFyZ3VtZW50cyBvZiB0aGUgbGFzdCBhdHRlbXB0IGF0IGNvbXBsZXRpbmcgdGhlIGB0YXNrYC4gSW52b2tlZCB3aXRoXG4gICAgICogKGVyciwgcmVzdWx0cykuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgaXMgcGFzc2VkXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBhc3luYy50cnlFYWNoKFtcbiAgICAgKiAgICAgZnVuY3Rpb24gZ2V0RGF0YUZyb21GaXJzdFdlYnNpdGUoY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIC8vIFRyeSBnZXR0aW5nIHRoZSBkYXRhIGZyb20gdGhlIGZpcnN0IHdlYnNpdGVcbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKGVyciwgZGF0YSk7XG4gICAgICogICAgIH0sXG4gICAgICogICAgIGZ1bmN0aW9uIGdldERhdGFGcm9tU2Vjb25kV2Vic2l0ZShjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgLy8gRmlyc3Qgd2Vic2l0ZSBmYWlsZWQsXG4gICAgICogICAgICAgICAvLyBUcnkgZ2V0dGluZyB0aGUgZGF0YSBmcm9tIHRoZSBiYWNrdXAgd2Vic2l0ZVxuICAgICAqICAgICAgICAgY2FsbGJhY2soZXJyLCBkYXRhKTtcbiAgICAgKiAgICAgfVxuICAgICAqIF0sXG4gICAgICogLy8gb3B0aW9uYWwgY2FsbGJhY2tcbiAgICAgKiBmdW5jdGlvbihlcnIsIHJlc3VsdHMpIHtcbiAgICAgKiAgICAgTm93IGRvIHNvbWV0aGluZyB3aXRoIHRoZSBkYXRhLlxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICovXG4gICAgZnVuY3Rpb24gdHJ5RWFjaCh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGVycm9yID0gbnVsbDtcbiAgICAgICAgdmFyIHJlc3VsdDtcbiAgICAgICAgcmV0dXJuIGVhY2hTZXJpZXMkMSh0YXNrcywgKHRhc2ssIHRhc2tDYikgPT4ge1xuICAgICAgICAgICAgd3JhcEFzeW5jKHRhc2spKChlcnIsIC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyID09PSBmYWxzZSkgcmV0dXJuIHRhc2tDYihlcnIpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgICAgICAgICBbcmVzdWx0XSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gYXJncztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZXJyb3IgPSBlcnI7XG4gICAgICAgICAgICAgICAgdGFza0NiKGVyciA/IG51bGwgOiB7fSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgKCkgPT4gY2FsbGJhY2soZXJyb3IsIHJlc3VsdCkpO1xuICAgIH1cblxuICAgIHZhciB0cnlFYWNoJDEgPSBhd2FpdGlmeSh0cnlFYWNoKTtcblxuICAgIC8qKlxuICAgICAqIFVuZG9lcyBhIFttZW1vaXplXXtAbGluayBtb2R1bGU6VXRpbHMubWVtb2l6ZX1kIGZ1bmN0aW9uLCByZXZlcnRpbmcgaXQgdG8gdGhlIG9yaWdpbmFsLFxuICAgICAqIHVubWVtb2l6ZWQgZm9ybS4gSGFuZHkgZm9yIHRlc3RpbmcuXG4gICAgICpcbiAgICAgKiBAbmFtZSB1bm1lbW9pemVcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpVdGlsc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5tZW1vaXplXXtAbGluayBtb2R1bGU6VXRpbHMubWVtb2l6ZX1cbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gZm4gLSB0aGUgbWVtb2l6ZWQgZnVuY3Rpb25cbiAgICAgKiBAcmV0dXJucyB7QXN5bmNGdW5jdGlvbn0gYSBmdW5jdGlvbiB0aGF0IGNhbGxzIHRoZSBvcmlnaW5hbCB1bm1lbW9pemVkIGZ1bmN0aW9uXG4gICAgICovXG4gICAgZnVuY3Rpb24gdW5tZW1vaXplKGZuKSB7XG4gICAgICAgIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIChmbi51bm1lbW9pemVkIHx8IGZuKSguLi5hcmdzKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXBlYXRlZGx5IGNhbGwgYGl0ZXJhdGVlYCwgd2hpbGUgYHRlc3RgIHJldHVybnMgYHRydWVgLiBDYWxscyBgY2FsbGJhY2tgIHdoZW5cbiAgICAgKiBzdG9wcGVkLCBvciBhbiBlcnJvciBvY2N1cnMuXG4gICAgICpcbiAgICAgKiBAbmFtZSB3aGlsc3RcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb250cm9sRmxvd1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgQ29udHJvbCBGbG93XG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSB0ZXN0IC0gYXN5bmNocm9ub3VzIHRydXRoIHRlc3QgdG8gcGVyZm9ybSBiZWZvcmUgZWFjaFxuICAgICAqIGV4ZWN1dGlvbiBvZiBgaXRlcmF0ZWVgLiBJbnZva2VkIHdpdGggKGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQW4gYXN5bmMgZnVuY3Rpb24gd2hpY2ggaXMgY2FsbGVkIGVhY2ggdGltZVxuICAgICAqIGB0ZXN0YCBwYXNzZXMuIEludm9rZWQgd2l0aCAoY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCBhZnRlciB0aGUgdGVzdFxuICAgICAqIGZ1bmN0aW9uIGhhcyBmYWlsZWQgYW5kIHJlcGVhdGVkIGV4ZWN1dGlvbiBvZiBgaXRlcmF0ZWVgIGhhcyBzdG9wcGVkLiBgY2FsbGJhY2tgXG4gICAgICogd2lsbCBiZSBwYXNzZWQgYW4gZXJyb3IgYW5kIGFueSBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBmaW5hbCBgaXRlcmF0ZWVgJ3NcbiAgICAgKiBjYWxsYmFjay4gSW52b2tlZCB3aXRoIChlcnIsIFtyZXN1bHRzXSk7XG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgaXMgcGFzc2VkXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBjb3VudCA9IDA7XG4gICAgICogYXN5bmMud2hpbHN0KFxuICAgICAqICAgICBmdW5jdGlvbiB0ZXN0KGNiKSB7IGNiKG51bGwsIGNvdW50IDwgNSk7IH0sXG4gICAgICogICAgIGZ1bmN0aW9uIGl0ZXIoY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIGNvdW50Kys7XG4gICAgICogICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIGNvdW50KTtcbiAgICAgKiAgICAgICAgIH0sIDEwMDApO1xuICAgICAqICAgICB9LFxuICAgICAqICAgICBmdW5jdGlvbiAoZXJyLCBuKSB7XG4gICAgICogICAgICAgICAvLyA1IHNlY29uZHMgaGF2ZSBwYXNzZWQsIG4gPSA1XG4gICAgICogICAgIH1cbiAgICAgKiApO1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHdoaWxzdCh0ZXN0LCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBvbmx5T25jZShjYWxsYmFjayk7XG4gICAgICAgIHZhciBfZm4gPSB3cmFwQXN5bmMoaXRlcmF0ZWUpO1xuICAgICAgICB2YXIgX3Rlc3QgPSB3cmFwQXN5bmModGVzdCk7XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG5cbiAgICAgICAgZnVuY3Rpb24gbmV4dChlcnIsIC4uLnJlc3QpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgcmVzdWx0cyA9IHJlc3Q7XG4gICAgICAgICAgICBpZiAoZXJyID09PSBmYWxzZSkgcmV0dXJuO1xuICAgICAgICAgICAgX3Rlc3QoY2hlY2spO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gY2hlY2soZXJyLCB0cnV0aCkge1xuICAgICAgICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICBpZiAoZXJyID09PSBmYWxzZSkgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKCF0cnV0aCkgcmV0dXJuIGNhbGxiYWNrKG51bGwsIC4uLnJlc3VsdHMpO1xuICAgICAgICAgICAgX2ZuKG5leHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF90ZXN0KGNoZWNrKTtcbiAgICB9XG4gICAgdmFyIHdoaWxzdCQxID0gYXdhaXRpZnkod2hpbHN0LCAzKTtcblxuICAgIC8qKlxuICAgICAqIFJlcGVhdGVkbHkgY2FsbCBgaXRlcmF0ZWVgIHVudGlsIGB0ZXN0YCByZXR1cm5zIGB0cnVlYC4gQ2FsbHMgYGNhbGxiYWNrYCB3aGVuXG4gICAgICogc3RvcHBlZCwgb3IgYW4gZXJyb3Igb2NjdXJzLiBgY2FsbGJhY2tgIHdpbGwgYmUgcGFzc2VkIGFuIGVycm9yIGFuZCBhbnlcbiAgICAgKiBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBmaW5hbCBgaXRlcmF0ZWVgJ3MgY2FsbGJhY2suXG4gICAgICpcbiAgICAgKiBUaGUgaW52ZXJzZSBvZiBbd2hpbHN0XXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cud2hpbHN0fS5cbiAgICAgKlxuICAgICAqIEBuYW1lIHVudGlsXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMud2hpbHN0XXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cud2hpbHN0fVxuICAgICAqIEBjYXRlZ29yeSBDb250cm9sIEZsb3dcbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IHRlc3QgLSBhc3luY2hyb25vdXMgdHJ1dGggdGVzdCB0byBwZXJmb3JtIGJlZm9yZSBlYWNoXG4gICAgICogZXhlY3V0aW9uIG9mIGBpdGVyYXRlZWAuIEludm9rZWQgd2l0aCAoY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBbiBhc3luYyBmdW5jdGlvbiB3aGljaCBpcyBjYWxsZWQgZWFjaCB0aW1lXG4gICAgICogYHRlc3RgIGZhaWxzLiBJbnZva2VkIHdpdGggKGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgYWZ0ZXIgdGhlIHRlc3RcbiAgICAgKiBmdW5jdGlvbiBoYXMgcGFzc2VkIGFuZCByZXBlYXRlZCBleGVjdXRpb24gb2YgYGl0ZXJhdGVlYCBoYXMgc3RvcHBlZC4gYGNhbGxiYWNrYFxuICAgICAqIHdpbGwgYmUgcGFzc2VkIGFuIGVycm9yIGFuZCBhbnkgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgZmluYWwgYGl0ZXJhdGVlYCdzXG4gICAgICogY2FsbGJhY2suIEludm9rZWQgd2l0aCAoZXJyLCBbcmVzdWx0c10pO1xuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIGEgY2FsbGJhY2sgaXMgbm90IHBhc3NlZFxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBjb25zdCByZXN1bHRzID0gW11cbiAgICAgKiBsZXQgZmluaXNoZWQgPSBmYWxzZVxuICAgICAqIGFzeW5jLnVudGlsKGZ1bmN0aW9uIHRlc3QoY2IpIHtcbiAgICAgKiAgICAgY2IobnVsbCwgZmluaXNoZWQpXG4gICAgICogfSwgZnVuY3Rpb24gaXRlcihuZXh0KSB7XG4gICAgICogICAgIGZldGNoUGFnZSh1cmwsIChlcnIsIGJvZHkpID0+IHtcbiAgICAgKiAgICAgICAgIGlmIChlcnIpIHJldHVybiBuZXh0KGVycilcbiAgICAgKiAgICAgICAgIHJlc3VsdHMgPSByZXN1bHRzLmNvbmNhdChib2R5Lm9iamVjdHMpXG4gICAgICogICAgICAgICBmaW5pc2hlZCA9ICEhYm9keS5uZXh0XG4gICAgICogICAgICAgICBuZXh0KGVycilcbiAgICAgKiAgICAgfSlcbiAgICAgKiB9LCBmdW5jdGlvbiBkb25lIChlcnIpIHtcbiAgICAgKiAgICAgLy8gYWxsIHBhZ2VzIGhhdmUgYmVlbiBmZXRjaGVkXG4gICAgICogfSlcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB1bnRpbCh0ZXN0LCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgY29uc3QgX3Rlc3QgPSB3cmFwQXN5bmModGVzdCk7XG4gICAgICAgIHJldHVybiB3aGlsc3QkMSgoY2IpID0+IF90ZXN0KChlcnIsIHRydXRoKSA9PiBjYiAoZXJyLCAhdHJ1dGgpKSwgaXRlcmF0ZWUsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSdW5zIHRoZSBgdGFza3NgIGFycmF5IG9mIGZ1bmN0aW9ucyBpbiBzZXJpZXMsIGVhY2ggcGFzc2luZyB0aGVpciByZXN1bHRzIHRvXG4gICAgICogdGhlIG5leHQgaW4gdGhlIGFycmF5LiBIb3dldmVyLCBpZiBhbnkgb2YgdGhlIGB0YXNrc2AgcGFzcyBhbiBlcnJvciB0byB0aGVpclxuICAgICAqIG93biBjYWxsYmFjaywgdGhlIG5leHQgZnVuY3Rpb24gaXMgbm90IGV4ZWN1dGVkLCBhbmQgdGhlIG1haW4gYGNhbGxiYWNrYCBpc1xuICAgICAqIGltbWVkaWF0ZWx5IGNhbGxlZCB3aXRoIHRoZSBlcnJvci5cbiAgICAgKlxuICAgICAqIEBuYW1lIHdhdGVyZmFsbFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbnRyb2xGbG93XG4gICAgICogQG1ldGhvZFxuICAgICAqIEBjYXRlZ29yeSBDb250cm9sIEZsb3dcbiAgICAgKiBAcGFyYW0ge0FycmF5fSB0YXNrcyAtIEFuIGFycmF5IG9mIFthc3luYyBmdW5jdGlvbnNde0BsaW5rIEFzeW5jRnVuY3Rpb259XG4gICAgICogdG8gcnVuLlxuICAgICAqIEVhY2ggZnVuY3Rpb24gc2hvdWxkIGNvbXBsZXRlIHdpdGggYW55IG51bWJlciBvZiBgcmVzdWx0YCB2YWx1ZXMuXG4gICAgICogVGhlIGByZXN1bHRgIHZhbHVlcyB3aWxsIGJlIHBhc3NlZCBhcyBhcmd1bWVudHMsIGluIG9yZGVyLCB0byB0aGUgbmV4dCB0YXNrLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBbiBvcHRpb25hbCBjYWxsYmFjayB0byBydW4gb25jZSBhbGwgdGhlXG4gICAgICogZnVuY3Rpb25zIGhhdmUgY29tcGxldGVkLiBUaGlzIHdpbGwgYmUgcGFzc2VkIHRoZSByZXN1bHRzIG9mIHRoZSBsYXN0IHRhc2snc1xuICAgICAqIGNhbGxiYWNrLiBJbnZva2VkIHdpdGggKGVyciwgW3Jlc3VsdHNdKS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBhIGNhbGxiYWNrIGlzIG9taXR0ZWRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogYXN5bmMud2F0ZXJmYWxsKFtcbiAgICAgKiAgICAgZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsICdvbmUnLCAndHdvJyk7XG4gICAgICogICAgIH0sXG4gICAgICogICAgIGZ1bmN0aW9uKGFyZzEsIGFyZzIsIGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAvLyBhcmcxIG5vdyBlcXVhbHMgJ29uZScgYW5kIGFyZzIgbm93IGVxdWFscyAndHdvJ1xuICAgICAqICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ3RocmVlJyk7XG4gICAgICogICAgIH0sXG4gICAgICogICAgIGZ1bmN0aW9uKGFyZzEsIGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAvLyBhcmcxIG5vdyBlcXVhbHMgJ3RocmVlJ1xuICAgICAqICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ2RvbmUnKTtcbiAgICAgKiAgICAgfVxuICAgICAqIF0sIGZ1bmN0aW9uIChlcnIsIHJlc3VsdCkge1xuICAgICAqICAgICAvLyByZXN1bHQgbm93IGVxdWFscyAnZG9uZSdcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIE9yLCB3aXRoIG5hbWVkIGZ1bmN0aW9uczpcbiAgICAgKiBhc3luYy53YXRlcmZhbGwoW1xuICAgICAqICAgICBteUZpcnN0RnVuY3Rpb24sXG4gICAgICogICAgIG15U2Vjb25kRnVuY3Rpb24sXG4gICAgICogICAgIG15TGFzdEZ1bmN0aW9uLFxuICAgICAqIF0sIGZ1bmN0aW9uIChlcnIsIHJlc3VsdCkge1xuICAgICAqICAgICAvLyByZXN1bHQgbm93IGVxdWFscyAnZG9uZSdcbiAgICAgKiB9KTtcbiAgICAgKiBmdW5jdGlvbiBteUZpcnN0RnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgY2FsbGJhY2sobnVsbCwgJ29uZScsICd0d28nKTtcbiAgICAgKiB9XG4gICAgICogZnVuY3Rpb24gbXlTZWNvbmRGdW5jdGlvbihhcmcxLCBhcmcyLCBjYWxsYmFjaykge1xuICAgICAqICAgICAvLyBhcmcxIG5vdyBlcXVhbHMgJ29uZScgYW5kIGFyZzIgbm93IGVxdWFscyAndHdvJ1xuICAgICAqICAgICBjYWxsYmFjayhudWxsLCAndGhyZWUnKTtcbiAgICAgKiB9XG4gICAgICogZnVuY3Rpb24gbXlMYXN0RnVuY3Rpb24oYXJnMSwgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgLy8gYXJnMSBub3cgZXF1YWxzICd0aHJlZSdcbiAgICAgKiAgICAgY2FsbGJhY2sobnVsbCwgJ2RvbmUnKTtcbiAgICAgKiB9XG4gICAgICovXG4gICAgZnVuY3Rpb24gd2F0ZXJmYWxsICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBvbmNlKGNhbGxiYWNrKTtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRhc2tzKSkgcmV0dXJuIGNhbGxiYWNrKG5ldyBFcnJvcignRmlyc3QgYXJndW1lbnQgdG8gd2F0ZXJmYWxsIG11c3QgYmUgYW4gYXJyYXkgb2YgZnVuY3Rpb25zJykpO1xuICAgICAgICBpZiAoIXRhc2tzLmxlbmd0aCkgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIHZhciB0YXNrSW5kZXggPSAwO1xuXG4gICAgICAgIGZ1bmN0aW9uIG5leHRUYXNrKGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciB0YXNrID0gd3JhcEFzeW5jKHRhc2tzW3Rhc2tJbmRleCsrXSk7XG4gICAgICAgICAgICB0YXNrKC4uLmFyZ3MsIG9ubHlPbmNlKG5leHQpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIG5leHQoZXJyLCAuLi5hcmdzKSB7XG4gICAgICAgICAgICBpZiAoZXJyID09PSBmYWxzZSkgcmV0dXJuXG4gICAgICAgICAgICBpZiAoZXJyIHx8IHRhc2tJbmRleCA9PT0gdGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVyciwgLi4uYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBuZXh0VGFzayhhcmdzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5leHRUYXNrKFtdKTtcbiAgICB9XG5cbiAgICB2YXIgd2F0ZXJmYWxsJDEgPSBhd2FpdGlmeSh3YXRlcmZhbGwpO1xuXG4gICAgLyoqXG4gICAgICogQW4gXCJhc3luYyBmdW5jdGlvblwiIGluIHRoZSBjb250ZXh0IG9mIEFzeW5jIGlzIGFuIGFzeW5jaHJvbm91cyBmdW5jdGlvbiB3aXRoXG4gICAgICogYSB2YXJpYWJsZSBudW1iZXIgb2YgcGFyYW1ldGVycywgd2l0aCB0aGUgZmluYWwgcGFyYW1ldGVyIGJlaW5nIGEgY2FsbGJhY2suXG4gICAgICogKGBmdW5jdGlvbiAoYXJnMSwgYXJnMiwgLi4uLCBjYWxsYmFjaykge31gKVxuICAgICAqIFRoZSBmaW5hbCBjYWxsYmFjayBpcyBvZiB0aGUgZm9ybSBgY2FsbGJhY2soZXJyLCByZXN1bHRzLi4uKWAsIHdoaWNoIG11c3QgYmVcbiAgICAgKiBjYWxsZWQgb25jZSB0aGUgZnVuY3Rpb24gaXMgY29tcGxldGVkLiAgVGhlIGNhbGxiYWNrIHNob3VsZCBiZSBjYWxsZWQgd2l0aCBhXG4gICAgICogRXJyb3IgYXMgaXRzIGZpcnN0IGFyZ3VtZW50IHRvIHNpZ25hbCB0aGF0IGFuIGVycm9yIG9jY3VycmVkLlxuICAgICAqIE90aGVyd2lzZSwgaWYgbm8gZXJyb3Igb2NjdXJyZWQsIGl0IHNob3VsZCBiZSBjYWxsZWQgd2l0aCBgbnVsbGAgYXMgdGhlIGZpcnN0XG4gICAgICogYXJndW1lbnQsIGFuZCBhbnkgYWRkaXRpb25hbCBgcmVzdWx0YCBhcmd1bWVudHMgdGhhdCBtYXkgYXBwbHksIHRvIHNpZ25hbFxuICAgICAqIHN1Y2Nlc3NmdWwgY29tcGxldGlvbi5cbiAgICAgKiBUaGUgY2FsbGJhY2sgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlLCBpZGVhbGx5IG9uIGEgbGF0ZXIgdGljayBvZiB0aGVcbiAgICAgKiBKYXZhU2NyaXB0IGV2ZW50IGxvb3AuXG4gICAgICpcbiAgICAgKiBUaGlzIHR5cGUgb2YgZnVuY3Rpb24gaXMgYWxzbyByZWZlcnJlZCB0byBhcyBhIFwiTm9kZS1zdHlsZSBhc3luYyBmdW5jdGlvblwiLFxuICAgICAqIG9yIGEgXCJjb250aW51YXRpb24gcGFzc2luZy1zdHlsZSBmdW5jdGlvblwiIChDUFMpLiBNb3N0IG9mIHRoZSBtZXRob2RzIG9mIHRoaXNcbiAgICAgKiBsaWJyYXJ5IGFyZSB0aGVtc2VsdmVzIENQUy9Ob2RlLXN0eWxlIGFzeW5jIGZ1bmN0aW9ucywgb3IgZnVuY3Rpb25zIHRoYXRcbiAgICAgKiByZXR1cm4gQ1BTL05vZGUtc3R5bGUgYXN5bmMgZnVuY3Rpb25zLlxuICAgICAqXG4gICAgICogV2hlcmV2ZXIgd2UgYWNjZXB0IGEgTm9kZS1zdHlsZSBhc3luYyBmdW5jdGlvbiwgd2UgYWxzbyBkaXJlY3RseSBhY2NlcHQgYW5cbiAgICAgKiBbRVMyMDE3IGBhc3luY2AgZnVuY3Rpb25de0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL1N0YXRlbWVudHMvYXN5bmNfZnVuY3Rpb259LlxuICAgICAqIEluIHRoaXMgY2FzZSwgdGhlIGBhc3luY2AgZnVuY3Rpb24gd2lsbCBub3QgYmUgcGFzc2VkIGEgZmluYWwgY2FsbGJhY2tcbiAgICAgKiBhcmd1bWVudCwgYW5kIGFueSB0aHJvd24gZXJyb3Igd2lsbCBiZSB1c2VkIGFzIHRoZSBgZXJyYCBhcmd1bWVudCBvZiB0aGVcbiAgICAgKiBpbXBsaWNpdCBjYWxsYmFjaywgYW5kIHRoZSByZXR1cm4gdmFsdWUgd2lsbCBiZSB1c2VkIGFzIHRoZSBgcmVzdWx0YCB2YWx1ZS5cbiAgICAgKiAoaS5lLiBhIGByZWplY3RlZGAgb2YgdGhlIHJldHVybmVkIFByb21pc2UgYmVjb21lcyB0aGUgYGVycmAgY2FsbGJhY2tcbiAgICAgKiBhcmd1bWVudCwgYW5kIGEgYHJlc29sdmVkYCB2YWx1ZSBiZWNvbWVzIHRoZSBgcmVzdWx0YC4pXG4gICAgICpcbiAgICAgKiBOb3RlLCBkdWUgdG8gSmF2YVNjcmlwdCBsaW1pdGF0aW9ucywgd2UgY2FuIG9ubHkgZGV0ZWN0IG5hdGl2ZSBgYXN5bmNgXG4gICAgICogZnVuY3Rpb25zIGFuZCBub3QgdHJhbnNwaWxpZWQgaW1wbGVtZW50YXRpb25zLlxuICAgICAqIFlvdXIgZW52aXJvbm1lbnQgbXVzdCBoYXZlIGBhc3luY2AvYGF3YWl0YCBzdXBwb3J0IGZvciB0aGlzIHRvIHdvcmsuXG4gICAgICogKGUuZy4gTm9kZSA+IHY3LjYsIG9yIGEgcmVjZW50IHZlcnNpb24gb2YgYSBtb2Rlcm4gYnJvd3NlcikuXG4gICAgICogSWYgeW91IGFyZSB1c2luZyBgYXN5bmNgIGZ1bmN0aW9ucyB0aHJvdWdoIGEgdHJhbnNwaWxlciAoZS5nLiBCYWJlbCksIHlvdVxuICAgICAqIG11c3Qgc3RpbGwgd3JhcCB0aGUgZnVuY3Rpb24gd2l0aCBbYXN5bmNpZnlde0BsaW5rIG1vZHVsZTpVdGlscy5hc3luY2lmeX0sXG4gICAgICogYmVjYXVzZSB0aGUgYGFzeW5jIGZ1bmN0aW9uYCB3aWxsIGJlIGNvbXBpbGVkIHRvIGFuIG9yZGluYXJ5IGZ1bmN0aW9uIHRoYXRcbiAgICAgKiByZXR1cm5zIGEgcHJvbWlzZS5cbiAgICAgKlxuICAgICAqIEB0eXBlZGVmIHtGdW5jdGlvbn0gQXN5bmNGdW5jdGlvblxuICAgICAqIEBzdGF0aWNcbiAgICAgKi9cblxuXG4gICAgdmFyIGluZGV4ID0ge1xuICAgICAgICBhcHBseSxcbiAgICAgICAgYXBwbHlFYWNoLFxuICAgICAgICBhcHBseUVhY2hTZXJpZXMsXG4gICAgICAgIGFzeW5jaWZ5LFxuICAgICAgICBhdXRvLFxuICAgICAgICBhdXRvSW5qZWN0LFxuICAgICAgICBjYXJnbzogY2FyZ28kMSxcbiAgICAgICAgY2FyZ29RdWV1ZTogY2FyZ28sXG4gICAgICAgIGNvbXBvc2UsXG4gICAgICAgIGNvbmNhdDogY29uY2F0JDEsXG4gICAgICAgIGNvbmNhdExpbWl0OiBjb25jYXRMaW1pdCQxLFxuICAgICAgICBjb25jYXRTZXJpZXM6IGNvbmNhdFNlcmllcyQxLFxuICAgICAgICBjb25zdGFudDogY29uc3RhbnQkMSxcbiAgICAgICAgZGV0ZWN0OiBkZXRlY3QkMSxcbiAgICAgICAgZGV0ZWN0TGltaXQ6IGRldGVjdExpbWl0JDEsXG4gICAgICAgIGRldGVjdFNlcmllczogZGV0ZWN0U2VyaWVzJDEsXG4gICAgICAgIGRpcixcbiAgICAgICAgZG9VbnRpbCxcbiAgICAgICAgZG9XaGlsc3Q6IGRvV2hpbHN0JDEsXG4gICAgICAgIGVhY2gsXG4gICAgICAgIGVhY2hMaW1pdDogZWFjaExpbWl0JDEsXG4gICAgICAgIGVhY2hPZjogZWFjaE9mJDEsXG4gICAgICAgIGVhY2hPZkxpbWl0OiBlYWNoT2ZMaW1pdCQxLFxuICAgICAgICBlYWNoT2ZTZXJpZXM6IGVhY2hPZlNlcmllcyQxLFxuICAgICAgICBlYWNoU2VyaWVzOiBlYWNoU2VyaWVzJDEsXG4gICAgICAgIGVuc3VyZUFzeW5jLFxuICAgICAgICBldmVyeTogZXZlcnkkMSxcbiAgICAgICAgZXZlcnlMaW1pdDogZXZlcnlMaW1pdCQxLFxuICAgICAgICBldmVyeVNlcmllczogZXZlcnlTZXJpZXMkMSxcbiAgICAgICAgZmlsdGVyOiBmaWx0ZXIkMSxcbiAgICAgICAgZmlsdGVyTGltaXQ6IGZpbHRlckxpbWl0JDEsXG4gICAgICAgIGZpbHRlclNlcmllczogZmlsdGVyU2VyaWVzJDEsXG4gICAgICAgIGZvcmV2ZXI6IGZvcmV2ZXIkMSxcbiAgICAgICAgZ3JvdXBCeSxcbiAgICAgICAgZ3JvdXBCeUxpbWl0OiBncm91cEJ5TGltaXQkMSxcbiAgICAgICAgZ3JvdXBCeVNlcmllcyxcbiAgICAgICAgbG9nLFxuICAgICAgICBtYXA6IG1hcCQxLFxuICAgICAgICBtYXBMaW1pdDogbWFwTGltaXQkMSxcbiAgICAgICAgbWFwU2VyaWVzOiBtYXBTZXJpZXMkMSxcbiAgICAgICAgbWFwVmFsdWVzLFxuICAgICAgICBtYXBWYWx1ZXNMaW1pdDogbWFwVmFsdWVzTGltaXQkMSxcbiAgICAgICAgbWFwVmFsdWVzU2VyaWVzLFxuICAgICAgICBtZW1vaXplLFxuICAgICAgICBuZXh0VGljayxcbiAgICAgICAgcGFyYWxsZWwsXG4gICAgICAgIHBhcmFsbGVsTGltaXQsXG4gICAgICAgIHByaW9yaXR5UXVldWUsXG4gICAgICAgIHF1ZXVlLFxuICAgICAgICByYWNlOiByYWNlJDEsXG4gICAgICAgIHJlZHVjZTogcmVkdWNlJDEsXG4gICAgICAgIHJlZHVjZVJpZ2h0LFxuICAgICAgICByZWZsZWN0LFxuICAgICAgICByZWZsZWN0QWxsLFxuICAgICAgICByZWplY3Q6IHJlamVjdCQxLFxuICAgICAgICByZWplY3RMaW1pdDogcmVqZWN0TGltaXQkMSxcbiAgICAgICAgcmVqZWN0U2VyaWVzOiByZWplY3RTZXJpZXMkMSxcbiAgICAgICAgcmV0cnksXG4gICAgICAgIHJldHJ5YWJsZSxcbiAgICAgICAgc2VxLFxuICAgICAgICBzZXJpZXMsXG4gICAgICAgIHNldEltbWVkaWF0ZTogc2V0SW1tZWRpYXRlJDEsXG4gICAgICAgIHNvbWU6IHNvbWUkMSxcbiAgICAgICAgc29tZUxpbWl0OiBzb21lTGltaXQkMSxcbiAgICAgICAgc29tZVNlcmllczogc29tZVNlcmllcyQxLFxuICAgICAgICBzb3J0Qnk6IHNvcnRCeSQxLFxuICAgICAgICB0aW1lb3V0LFxuICAgICAgICB0aW1lcyxcbiAgICAgICAgdGltZXNMaW1pdCxcbiAgICAgICAgdGltZXNTZXJpZXMsXG4gICAgICAgIHRyYW5zZm9ybSxcbiAgICAgICAgdHJ5RWFjaDogdHJ5RWFjaCQxLFxuICAgICAgICB1bm1lbW9pemUsXG4gICAgICAgIHVudGlsLFxuICAgICAgICB3YXRlcmZhbGw6IHdhdGVyZmFsbCQxLFxuICAgICAgICB3aGlsc3Q6IHdoaWxzdCQxLFxuXG4gICAgICAgIC8vIGFsaWFzZXNcbiAgICAgICAgYWxsOiBldmVyeSQxLFxuICAgICAgICBhbGxMaW1pdDogZXZlcnlMaW1pdCQxLFxuICAgICAgICBhbGxTZXJpZXM6IGV2ZXJ5U2VyaWVzJDEsXG4gICAgICAgIGFueTogc29tZSQxLFxuICAgICAgICBhbnlMaW1pdDogc29tZUxpbWl0JDEsXG4gICAgICAgIGFueVNlcmllczogc29tZVNlcmllcyQxLFxuICAgICAgICBmaW5kOiBkZXRlY3QkMSxcbiAgICAgICAgZmluZExpbWl0OiBkZXRlY3RMaW1pdCQxLFxuICAgICAgICBmaW5kU2VyaWVzOiBkZXRlY3RTZXJpZXMkMSxcbiAgICAgICAgZmxhdE1hcDogY29uY2F0JDEsXG4gICAgICAgIGZsYXRNYXBMaW1pdDogY29uY2F0TGltaXQkMSxcbiAgICAgICAgZmxhdE1hcFNlcmllczogY29uY2F0U2VyaWVzJDEsXG4gICAgICAgIGZvckVhY2g6IGVhY2gsXG4gICAgICAgIGZvckVhY2hTZXJpZXM6IGVhY2hTZXJpZXMkMSxcbiAgICAgICAgZm9yRWFjaExpbWl0OiBlYWNoTGltaXQkMSxcbiAgICAgICAgZm9yRWFjaE9mOiBlYWNoT2YkMSxcbiAgICAgICAgZm9yRWFjaE9mU2VyaWVzOiBlYWNoT2ZTZXJpZXMkMSxcbiAgICAgICAgZm9yRWFjaE9mTGltaXQ6IGVhY2hPZkxpbWl0JDEsXG4gICAgICAgIGluamVjdDogcmVkdWNlJDEsXG4gICAgICAgIGZvbGRsOiByZWR1Y2UkMSxcbiAgICAgICAgZm9sZHI6IHJlZHVjZVJpZ2h0LFxuICAgICAgICBzZWxlY3Q6IGZpbHRlciQxLFxuICAgICAgICBzZWxlY3RMaW1pdDogZmlsdGVyTGltaXQkMSxcbiAgICAgICAgc2VsZWN0U2VyaWVzOiBmaWx0ZXJTZXJpZXMkMSxcbiAgICAgICAgd3JhcFN5bmM6IGFzeW5jaWZ5LFxuICAgICAgICBkdXJpbmc6IHdoaWxzdCQxLFxuICAgICAgICBkb0R1cmluZzogZG9XaGlsc3QkMVxuICAgIH07XG5cbiAgICBleHBvcnRzLmFsbCA9IGV2ZXJ5JDE7XG4gICAgZXhwb3J0cy5hbGxMaW1pdCA9IGV2ZXJ5TGltaXQkMTtcbiAgICBleHBvcnRzLmFsbFNlcmllcyA9IGV2ZXJ5U2VyaWVzJDE7XG4gICAgZXhwb3J0cy5hbnkgPSBzb21lJDE7XG4gICAgZXhwb3J0cy5hbnlMaW1pdCA9IHNvbWVMaW1pdCQxO1xuICAgIGV4cG9ydHMuYW55U2VyaWVzID0gc29tZVNlcmllcyQxO1xuICAgIGV4cG9ydHMuYXBwbHkgPSBhcHBseTtcbiAgICBleHBvcnRzLmFwcGx5RWFjaCA9IGFwcGx5RWFjaDtcbiAgICBleHBvcnRzLmFwcGx5RWFjaFNlcmllcyA9IGFwcGx5RWFjaFNlcmllcztcbiAgICBleHBvcnRzLmFzeW5jaWZ5ID0gYXN5bmNpZnk7XG4gICAgZXhwb3J0cy5hdXRvID0gYXV0bztcbiAgICBleHBvcnRzLmF1dG9JbmplY3QgPSBhdXRvSW5qZWN0O1xuICAgIGV4cG9ydHMuY2FyZ28gPSBjYXJnbyQxO1xuICAgIGV4cG9ydHMuY2FyZ29RdWV1ZSA9IGNhcmdvO1xuICAgIGV4cG9ydHMuY29tcG9zZSA9IGNvbXBvc2U7XG4gICAgZXhwb3J0cy5jb25jYXQgPSBjb25jYXQkMTtcbiAgICBleHBvcnRzLmNvbmNhdExpbWl0ID0gY29uY2F0TGltaXQkMTtcbiAgICBleHBvcnRzLmNvbmNhdFNlcmllcyA9IGNvbmNhdFNlcmllcyQxO1xuICAgIGV4cG9ydHMuY29uc3RhbnQgPSBjb25zdGFudCQxO1xuICAgIGV4cG9ydHMuZGVmYXVsdCA9IGluZGV4O1xuICAgIGV4cG9ydHMuZGV0ZWN0ID0gZGV0ZWN0JDE7XG4gICAgZXhwb3J0cy5kZXRlY3RMaW1pdCA9IGRldGVjdExpbWl0JDE7XG4gICAgZXhwb3J0cy5kZXRlY3RTZXJpZXMgPSBkZXRlY3RTZXJpZXMkMTtcbiAgICBleHBvcnRzLmRpciA9IGRpcjtcbiAgICBleHBvcnRzLmRvRHVyaW5nID0gZG9XaGlsc3QkMTtcbiAgICBleHBvcnRzLmRvVW50aWwgPSBkb1VudGlsO1xuICAgIGV4cG9ydHMuZG9XaGlsc3QgPSBkb1doaWxzdCQxO1xuICAgIGV4cG9ydHMuZHVyaW5nID0gd2hpbHN0JDE7XG4gICAgZXhwb3J0cy5lYWNoID0gZWFjaDtcbiAgICBleHBvcnRzLmVhY2hMaW1pdCA9IGVhY2hMaW1pdCQxO1xuICAgIGV4cG9ydHMuZWFjaE9mID0gZWFjaE9mJDE7XG4gICAgZXhwb3J0cy5lYWNoT2ZMaW1pdCA9IGVhY2hPZkxpbWl0JDE7XG4gICAgZXhwb3J0cy5lYWNoT2ZTZXJpZXMgPSBlYWNoT2ZTZXJpZXMkMTtcbiAgICBleHBvcnRzLmVhY2hTZXJpZXMgPSBlYWNoU2VyaWVzJDE7XG4gICAgZXhwb3J0cy5lbnN1cmVBc3luYyA9IGVuc3VyZUFzeW5jO1xuICAgIGV4cG9ydHMuZXZlcnkgPSBldmVyeSQxO1xuICAgIGV4cG9ydHMuZXZlcnlMaW1pdCA9IGV2ZXJ5TGltaXQkMTtcbiAgICBleHBvcnRzLmV2ZXJ5U2VyaWVzID0gZXZlcnlTZXJpZXMkMTtcbiAgICBleHBvcnRzLmZpbHRlciA9IGZpbHRlciQxO1xuICAgIGV4cG9ydHMuZmlsdGVyTGltaXQgPSBmaWx0ZXJMaW1pdCQxO1xuICAgIGV4cG9ydHMuZmlsdGVyU2VyaWVzID0gZmlsdGVyU2VyaWVzJDE7XG4gICAgZXhwb3J0cy5maW5kID0gZGV0ZWN0JDE7XG4gICAgZXhwb3J0cy5maW5kTGltaXQgPSBkZXRlY3RMaW1pdCQxO1xuICAgIGV4cG9ydHMuZmluZFNlcmllcyA9IGRldGVjdFNlcmllcyQxO1xuICAgIGV4cG9ydHMuZmxhdE1hcCA9IGNvbmNhdCQxO1xuICAgIGV4cG9ydHMuZmxhdE1hcExpbWl0ID0gY29uY2F0TGltaXQkMTtcbiAgICBleHBvcnRzLmZsYXRNYXBTZXJpZXMgPSBjb25jYXRTZXJpZXMkMTtcbiAgICBleHBvcnRzLmZvbGRsID0gcmVkdWNlJDE7XG4gICAgZXhwb3J0cy5mb2xkciA9IHJlZHVjZVJpZ2h0O1xuICAgIGV4cG9ydHMuZm9yRWFjaCA9IGVhY2g7XG4gICAgZXhwb3J0cy5mb3JFYWNoTGltaXQgPSBlYWNoTGltaXQkMTtcbiAgICBleHBvcnRzLmZvckVhY2hPZiA9IGVhY2hPZiQxO1xuICAgIGV4cG9ydHMuZm9yRWFjaE9mTGltaXQgPSBlYWNoT2ZMaW1pdCQxO1xuICAgIGV4cG9ydHMuZm9yRWFjaE9mU2VyaWVzID0gZWFjaE9mU2VyaWVzJDE7XG4gICAgZXhwb3J0cy5mb3JFYWNoU2VyaWVzID0gZWFjaFNlcmllcyQxO1xuICAgIGV4cG9ydHMuZm9yZXZlciA9IGZvcmV2ZXIkMTtcbiAgICBleHBvcnRzLmdyb3VwQnkgPSBncm91cEJ5O1xuICAgIGV4cG9ydHMuZ3JvdXBCeUxpbWl0ID0gZ3JvdXBCeUxpbWl0JDE7XG4gICAgZXhwb3J0cy5ncm91cEJ5U2VyaWVzID0gZ3JvdXBCeVNlcmllcztcbiAgICBleHBvcnRzLmluamVjdCA9IHJlZHVjZSQxO1xuICAgIGV4cG9ydHMubG9nID0gbG9nO1xuICAgIGV4cG9ydHMubWFwID0gbWFwJDE7XG4gICAgZXhwb3J0cy5tYXBMaW1pdCA9IG1hcExpbWl0JDE7XG4gICAgZXhwb3J0cy5tYXBTZXJpZXMgPSBtYXBTZXJpZXMkMTtcbiAgICBleHBvcnRzLm1hcFZhbHVlcyA9IG1hcFZhbHVlcztcbiAgICBleHBvcnRzLm1hcFZhbHVlc0xpbWl0ID0gbWFwVmFsdWVzTGltaXQkMTtcbiAgICBleHBvcnRzLm1hcFZhbHVlc1NlcmllcyA9IG1hcFZhbHVlc1NlcmllcztcbiAgICBleHBvcnRzLm1lbW9pemUgPSBtZW1vaXplO1xuICAgIGV4cG9ydHMubmV4dFRpY2sgPSBuZXh0VGljaztcbiAgICBleHBvcnRzLnBhcmFsbGVsID0gcGFyYWxsZWw7XG4gICAgZXhwb3J0cy5wYXJhbGxlbExpbWl0ID0gcGFyYWxsZWxMaW1pdDtcbiAgICBleHBvcnRzLnByaW9yaXR5UXVldWUgPSBwcmlvcml0eVF1ZXVlO1xuICAgIGV4cG9ydHMucXVldWUgPSBxdWV1ZTtcbiAgICBleHBvcnRzLnJhY2UgPSByYWNlJDE7XG4gICAgZXhwb3J0cy5yZWR1Y2UgPSByZWR1Y2UkMTtcbiAgICBleHBvcnRzLnJlZHVjZVJpZ2h0ID0gcmVkdWNlUmlnaHQ7XG4gICAgZXhwb3J0cy5yZWZsZWN0ID0gcmVmbGVjdDtcbiAgICBleHBvcnRzLnJlZmxlY3RBbGwgPSByZWZsZWN0QWxsO1xuICAgIGV4cG9ydHMucmVqZWN0ID0gcmVqZWN0JDE7XG4gICAgZXhwb3J0cy5yZWplY3RMaW1pdCA9IHJlamVjdExpbWl0JDE7XG4gICAgZXhwb3J0cy5yZWplY3RTZXJpZXMgPSByZWplY3RTZXJpZXMkMTtcbiAgICBleHBvcnRzLnJldHJ5ID0gcmV0cnk7XG4gICAgZXhwb3J0cy5yZXRyeWFibGUgPSByZXRyeWFibGU7XG4gICAgZXhwb3J0cy5zZWxlY3QgPSBmaWx0ZXIkMTtcbiAgICBleHBvcnRzLnNlbGVjdExpbWl0ID0gZmlsdGVyTGltaXQkMTtcbiAgICBleHBvcnRzLnNlbGVjdFNlcmllcyA9IGZpbHRlclNlcmllcyQxO1xuICAgIGV4cG9ydHMuc2VxID0gc2VxO1xuICAgIGV4cG9ydHMuc2VyaWVzID0gc2VyaWVzO1xuICAgIGV4cG9ydHMuc2V0SW1tZWRpYXRlID0gc2V0SW1tZWRpYXRlJDE7XG4gICAgZXhwb3J0cy5zb21lID0gc29tZSQxO1xuICAgIGV4cG9ydHMuc29tZUxpbWl0ID0gc29tZUxpbWl0JDE7XG4gICAgZXhwb3J0cy5zb21lU2VyaWVzID0gc29tZVNlcmllcyQxO1xuICAgIGV4cG9ydHMuc29ydEJ5ID0gc29ydEJ5JDE7XG4gICAgZXhwb3J0cy50aW1lb3V0ID0gdGltZW91dDtcbiAgICBleHBvcnRzLnRpbWVzID0gdGltZXM7XG4gICAgZXhwb3J0cy50aW1lc0xpbWl0ID0gdGltZXNMaW1pdDtcbiAgICBleHBvcnRzLnRpbWVzU2VyaWVzID0gdGltZXNTZXJpZXM7XG4gICAgZXhwb3J0cy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm07XG4gICAgZXhwb3J0cy50cnlFYWNoID0gdHJ5RWFjaCQxO1xuICAgIGV4cG9ydHMudW5tZW1vaXplID0gdW5tZW1vaXplO1xuICAgIGV4cG9ydHMudW50aWwgPSB1bnRpbDtcbiAgICBleHBvcnRzLndhdGVyZmFsbCA9IHdhdGVyZmFsbCQxO1xuICAgIGV4cG9ydHMud2hpbHN0ID0gd2hpbHN0JDE7XG4gICAgZXhwb3J0cy53cmFwU3luYyA9IGFzeW5jaWZ5O1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxufSkpO1xuIiwKICAgICJ2YXIgY29uc3RhbnRzID0gcmVxdWlyZSgnY29uc3RhbnRzJylcblxudmFyIG9yaWdDd2QgPSBwcm9jZXNzLmN3ZFxudmFyIGN3ZCA9IG51bGxcblxudmFyIHBsYXRmb3JtID0gcHJvY2Vzcy5lbnYuR1JBQ0VGVUxfRlNfUExBVEZPUk0gfHwgcHJvY2Vzcy5wbGF0Zm9ybVxuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uKCkge1xuICBpZiAoIWN3ZClcbiAgICBjd2QgPSBvcmlnQ3dkLmNhbGwocHJvY2VzcylcbiAgcmV0dXJuIGN3ZFxufVxudHJ5IHtcbiAgcHJvY2Vzcy5jd2QoKVxufSBjYXRjaCAoZXIpIHt9XG5cbi8vIFRoaXMgY2hlY2sgaXMgbmVlZGVkIHVudGlsIG5vZGUuanMgMTIgaXMgcmVxdWlyZWRcbmlmICh0eXBlb2YgcHJvY2Vzcy5jaGRpciA9PT0gJ2Z1bmN0aW9uJykge1xuICB2YXIgY2hkaXIgPSBwcm9jZXNzLmNoZGlyXG4gIHByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZCkge1xuICAgIGN3ZCA9IG51bGxcbiAgICBjaGRpci5jYWxsKHByb2Nlc3MsIGQpXG4gIH1cbiAgaWYgKE9iamVjdC5zZXRQcm90b3R5cGVPZikgT2JqZWN0LnNldFByb3RvdHlwZU9mKHByb2Nlc3MuY2hkaXIsIGNoZGlyKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGNoXG5cbmZ1bmN0aW9uIHBhdGNoIChmcykge1xuICAvLyAocmUtKWltcGxlbWVudCBzb21lIHRoaW5ncyB0aGF0IGFyZSBrbm93biBidXN0ZWQgb3IgbWlzc2luZy5cblxuICAvLyBsY2htb2QsIGJyb2tlbiBwcmlvciB0byAwLjYuMlxuICAvLyBiYWNrLXBvcnQgdGhlIGZpeCBoZXJlLlxuICBpZiAoY29uc3RhbnRzLmhhc093blByb3BlcnR5KCdPX1NZTUxJTksnKSAmJlxuICAgICAgcHJvY2Vzcy52ZXJzaW9uLm1hdGNoKC9edjBcXC42XFwuWzAtMl18XnYwXFwuNVxcLi8pKSB7XG4gICAgcGF0Y2hMY2htb2QoZnMpXG4gIH1cblxuICAvLyBsdXRpbWVzIGltcGxlbWVudGF0aW9uLCBvciBuby1vcFxuICBpZiAoIWZzLmx1dGltZXMpIHtcbiAgICBwYXRjaEx1dGltZXMoZnMpXG4gIH1cblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vaXNhYWNzL25vZGUtZ3JhY2VmdWwtZnMvaXNzdWVzLzRcbiAgLy8gQ2hvd24gc2hvdWxkIG5vdCBmYWlsIG9uIGVpbnZhbCBvciBlcGVybSBpZiBub24tcm9vdC5cbiAgLy8gSXQgc2hvdWxkIG5vdCBmYWlsIG9uIGVub3N5cyBldmVyLCBhcyB0aGlzIGp1c3QgaW5kaWNhdGVzXG4gIC8vIHRoYXQgYSBmcyBkb2Vzbid0IHN1cHBvcnQgdGhlIGludGVuZGVkIG9wZXJhdGlvbi5cblxuICBmcy5jaG93biA9IGNob3duRml4KGZzLmNob3duKVxuICBmcy5mY2hvd24gPSBjaG93bkZpeChmcy5mY2hvd24pXG4gIGZzLmxjaG93biA9IGNob3duRml4KGZzLmxjaG93bilcblxuICBmcy5jaG1vZCA9IGNobW9kRml4KGZzLmNobW9kKVxuICBmcy5mY2htb2QgPSBjaG1vZEZpeChmcy5mY2htb2QpXG4gIGZzLmxjaG1vZCA9IGNobW9kRml4KGZzLmxjaG1vZClcblxuICBmcy5jaG93blN5bmMgPSBjaG93bkZpeFN5bmMoZnMuY2hvd25TeW5jKVxuICBmcy5mY2hvd25TeW5jID0gY2hvd25GaXhTeW5jKGZzLmZjaG93blN5bmMpXG4gIGZzLmxjaG93blN5bmMgPSBjaG93bkZpeFN5bmMoZnMubGNob3duU3luYylcblxuICBmcy5jaG1vZFN5bmMgPSBjaG1vZEZpeFN5bmMoZnMuY2htb2RTeW5jKVxuICBmcy5mY2htb2RTeW5jID0gY2htb2RGaXhTeW5jKGZzLmZjaG1vZFN5bmMpXG4gIGZzLmxjaG1vZFN5bmMgPSBjaG1vZEZpeFN5bmMoZnMubGNobW9kU3luYylcblxuICBmcy5zdGF0ID0gc3RhdEZpeChmcy5zdGF0KVxuICBmcy5mc3RhdCA9IHN0YXRGaXgoZnMuZnN0YXQpXG4gIGZzLmxzdGF0ID0gc3RhdEZpeChmcy5sc3RhdClcblxuICBmcy5zdGF0U3luYyA9IHN0YXRGaXhTeW5jKGZzLnN0YXRTeW5jKVxuICBmcy5mc3RhdFN5bmMgPSBzdGF0Rml4U3luYyhmcy5mc3RhdFN5bmMpXG4gIGZzLmxzdGF0U3luYyA9IHN0YXRGaXhTeW5jKGZzLmxzdGF0U3luYylcblxuICAvLyBpZiBsY2htb2QvbGNob3duIGRvIG5vdCBleGlzdCwgdGhlbiBtYWtlIHRoZW0gbm8tb3BzXG4gIGlmIChmcy5jaG1vZCAmJiAhZnMubGNobW9kKSB7XG4gICAgZnMubGNobW9kID0gZnVuY3Rpb24gKHBhdGgsIG1vZGUsIGNiKSB7XG4gICAgICBpZiAoY2IpIHByb2Nlc3MubmV4dFRpY2soY2IpXG4gICAgfVxuICAgIGZzLmxjaG1vZFN5bmMgPSBmdW5jdGlvbiAoKSB7fVxuICB9XG4gIGlmIChmcy5jaG93biAmJiAhZnMubGNob3duKSB7XG4gICAgZnMubGNob3duID0gZnVuY3Rpb24gKHBhdGgsIHVpZCwgZ2lkLCBjYikge1xuICAgICAgaWYgKGNiKSBwcm9jZXNzLm5leHRUaWNrKGNiKVxuICAgIH1cbiAgICBmcy5sY2hvd25TeW5jID0gZnVuY3Rpb24gKCkge31cbiAgfVxuXG4gIC8vIG9uIFdpbmRvd3MsIEEvViBzb2Z0d2FyZSBjYW4gbG9jayB0aGUgZGlyZWN0b3J5LCBjYXVzaW5nIHRoaXNcbiAgLy8gdG8gZmFpbCB3aXRoIGFuIEVBQ0NFUyBvciBFUEVSTSBpZiB0aGUgZGlyZWN0b3J5IGNvbnRhaW5zIG5ld2x5XG4gIC8vIGNyZWF0ZWQgZmlsZXMuICBUcnkgYWdhaW4gb24gZmFpbHVyZSwgZm9yIHVwIHRvIDYwIHNlY29uZHMuXG5cbiAgLy8gU2V0IHRoZSB0aW1lb3V0IHRoaXMgbG9uZyBiZWNhdXNlIHNvbWUgV2luZG93cyBBbnRpLVZpcnVzLCBzdWNoIGFzIFBhcml0eVxuICAvLyBiaXQ5LCBtYXkgbG9jayBmaWxlcyBmb3IgdXAgdG8gYSBtaW51dGUsIGNhdXNpbmcgbnBtIHBhY2thZ2UgaW5zdGFsbFxuICAvLyBmYWlsdXJlcy4gQWxzbywgdGFrZSBjYXJlIHRvIHlpZWxkIHRoZSBzY2hlZHVsZXIuIFdpbmRvd3Mgc2NoZWR1bGluZyBnaXZlc1xuICAvLyBDUFUgdG8gYSBidXN5IGxvb3BpbmcgcHJvY2Vzcywgd2hpY2ggY2FuIGNhdXNlIHRoZSBwcm9ncmFtIGNhdXNpbmcgdGhlIGxvY2tcbiAgLy8gY29udGVudGlvbiB0byBiZSBzdGFydmVkIG9mIENQVSBieSBub2RlLCBzbyB0aGUgY29udGVudGlvbiBkb2Vzbid0IHJlc29sdmUuXG4gIGlmIChwbGF0Zm9ybSA9PT0gXCJ3aW4zMlwiKSB7XG4gICAgZnMucmVuYW1lID0gdHlwZW9mIGZzLnJlbmFtZSAhPT0gJ2Z1bmN0aW9uJyA/IGZzLnJlbmFtZVxuICAgIDogKGZ1bmN0aW9uIChmcyRyZW5hbWUpIHtcbiAgICAgIGZ1bmN0aW9uIHJlbmFtZSAoZnJvbSwgdG8sIGNiKSB7XG4gICAgICAgIHZhciBzdGFydCA9IERhdGUubm93KClcbiAgICAgICAgdmFyIGJhY2tvZmYgPSAwO1xuICAgICAgICBmcyRyZW5hbWUoZnJvbSwgdG8sIGZ1bmN0aW9uIENCIChlcikge1xuICAgICAgICAgIGlmIChlclxuICAgICAgICAgICAgICAmJiAoZXIuY29kZSA9PT0gXCJFQUNDRVNcIiB8fCBlci5jb2RlID09PSBcIkVQRVJNXCIgfHwgZXIuY29kZSA9PT0gXCJFQlVTWVwiKVxuICAgICAgICAgICAgICAmJiBEYXRlLm5vdygpIC0gc3RhcnQgPCA2MDAwMCkge1xuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgZnMuc3RhdCh0bywgZnVuY3Rpb24gKHN0YXRlciwgc3QpIHtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdGVyICYmIHN0YXRlci5jb2RlID09PSBcIkVOT0VOVFwiKVxuICAgICAgICAgICAgICAgICAgZnMkcmVuYW1lKGZyb20sIHRvLCBDQik7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgY2IoZXIpXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9LCBiYWNrb2ZmKVxuICAgICAgICAgICAgaWYgKGJhY2tvZmYgPCAxMDApXG4gICAgICAgICAgICAgIGJhY2tvZmYgKz0gMTA7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjYikgY2IoZXIpXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSBPYmplY3Quc2V0UHJvdG90eXBlT2YocmVuYW1lLCBmcyRyZW5hbWUpXG4gICAgICByZXR1cm4gcmVuYW1lXG4gICAgfSkoZnMucmVuYW1lKVxuICB9XG5cbiAgLy8gaWYgcmVhZCgpIHJldHVybnMgRUFHQUlOLCB0aGVuIGp1c3QgdHJ5IGl0IGFnYWluLlxuICBmcy5yZWFkID0gdHlwZW9mIGZzLnJlYWQgIT09ICdmdW5jdGlvbicgPyBmcy5yZWFkXG4gIDogKGZ1bmN0aW9uIChmcyRyZWFkKSB7XG4gICAgZnVuY3Rpb24gcmVhZCAoZmQsIGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgsIHBvc2l0aW9uLCBjYWxsYmFja18pIHtcbiAgICAgIHZhciBjYWxsYmFja1xuICAgICAgaWYgKGNhbGxiYWNrXyAmJiB0eXBlb2YgY2FsbGJhY2tfID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZhciBlYWdDb3VudGVyID0gMFxuICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uIChlciwgXywgX18pIHtcbiAgICAgICAgICBpZiAoZXIgJiYgZXIuY29kZSA9PT0gJ0VBR0FJTicgJiYgZWFnQ291bnRlciA8IDEwKSB7XG4gICAgICAgICAgICBlYWdDb3VudGVyICsrXG4gICAgICAgICAgICByZXR1cm4gZnMkcmVhZC5jYWxsKGZzLCBmZCwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24sIGNhbGxiYWNrKVxuICAgICAgICAgIH1cbiAgICAgICAgICBjYWxsYmFja18uYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZnMkcmVhZC5jYWxsKGZzLCBmZCwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24sIGNhbGxiYWNrKVxuICAgIH1cblxuICAgIC8vIFRoaXMgZW5zdXJlcyBgdXRpbC5wcm9taXNpZnlgIHdvcmtzIGFzIGl0IGRvZXMgZm9yIG5hdGl2ZSBgZnMucmVhZGAuXG4gICAgaWYgKE9iamVjdC5zZXRQcm90b3R5cGVPZikgT2JqZWN0LnNldFByb3RvdHlwZU9mKHJlYWQsIGZzJHJlYWQpXG4gICAgcmV0dXJuIHJlYWRcbiAgfSkoZnMucmVhZClcblxuICBmcy5yZWFkU3luYyA9IHR5cGVvZiBmcy5yZWFkU3luYyAhPT0gJ2Z1bmN0aW9uJyA/IGZzLnJlYWRTeW5jXG4gIDogKGZ1bmN0aW9uIChmcyRyZWFkU3luYykgeyByZXR1cm4gZnVuY3Rpb24gKGZkLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbikge1xuICAgIHZhciBlYWdDb3VudGVyID0gMFxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gZnMkcmVhZFN5bmMuY2FsbChmcywgZmQsIGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgsIHBvc2l0aW9uKVxuICAgICAgfSBjYXRjaCAoZXIpIHtcbiAgICAgICAgaWYgKGVyLmNvZGUgPT09ICdFQUdBSU4nICYmIGVhZ0NvdW50ZXIgPCAxMCkge1xuICAgICAgICAgIGVhZ0NvdW50ZXIgKytcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIHRocm93IGVyXG4gICAgICB9XG4gICAgfVxuICB9fSkoZnMucmVhZFN5bmMpXG5cbiAgZnVuY3Rpb24gcGF0Y2hMY2htb2QgKGZzKSB7XG4gICAgZnMubGNobW9kID0gZnVuY3Rpb24gKHBhdGgsIG1vZGUsIGNhbGxiYWNrKSB7XG4gICAgICBmcy5vcGVuKCBwYXRoXG4gICAgICAgICAgICAgLCBjb25zdGFudHMuT19XUk9OTFkgfCBjb25zdGFudHMuT19TWU1MSU5LXG4gICAgICAgICAgICAgLCBtb2RlXG4gICAgICAgICAgICAgLCBmdW5jdGlvbiAoZXJyLCBmZCkge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgaWYgKGNhbGxiYWNrKSBjYWxsYmFjayhlcnIpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgLy8gcHJlZmVyIHRvIHJldHVybiB0aGUgY2htb2QgZXJyb3IsIGlmIG9uZSBvY2N1cnMsXG4gICAgICAgIC8vIGJ1dCBzdGlsbCB0cnkgdG8gY2xvc2UsIGFuZCByZXBvcnQgY2xvc2luZyBlcnJvcnMgaWYgdGhleSBvY2N1ci5cbiAgICAgICAgZnMuZmNobW9kKGZkLCBtb2RlLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgZnMuY2xvc2UoZmQsIGZ1bmN0aW9uKGVycjIpIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjaykgY2FsbGJhY2soZXJyIHx8IGVycjIpXG4gICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgZnMubGNobW9kU3luYyA9IGZ1bmN0aW9uIChwYXRoLCBtb2RlKSB7XG4gICAgICB2YXIgZmQgPSBmcy5vcGVuU3luYyhwYXRoLCBjb25zdGFudHMuT19XUk9OTFkgfCBjb25zdGFudHMuT19TWU1MSU5LLCBtb2RlKVxuXG4gICAgICAvLyBwcmVmZXIgdG8gcmV0dXJuIHRoZSBjaG1vZCBlcnJvciwgaWYgb25lIG9jY3VycyxcbiAgICAgIC8vIGJ1dCBzdGlsbCB0cnkgdG8gY2xvc2UsIGFuZCByZXBvcnQgY2xvc2luZyBlcnJvcnMgaWYgdGhleSBvY2N1ci5cbiAgICAgIHZhciB0aHJldyA9IHRydWVcbiAgICAgIHZhciByZXRcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldCA9IGZzLmZjaG1vZFN5bmMoZmQsIG1vZGUpXG4gICAgICAgIHRocmV3ID0gZmFsc2VcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmICh0aHJldykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmcy5jbG9zZVN5bmMoZmQpXG4gICAgICAgICAgfSBjYXRjaCAoZXIpIHt9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZnMuY2xvc2VTeW5jKGZkKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmV0XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcGF0Y2hMdXRpbWVzIChmcykge1xuICAgIGlmIChjb25zdGFudHMuaGFzT3duUHJvcGVydHkoXCJPX1NZTUxJTktcIikgJiYgZnMuZnV0aW1lcykge1xuICAgICAgZnMubHV0aW1lcyA9IGZ1bmN0aW9uIChwYXRoLCBhdCwgbXQsIGNiKSB7XG4gICAgICAgIGZzLm9wZW4ocGF0aCwgY29uc3RhbnRzLk9fU1lNTElOSywgZnVuY3Rpb24gKGVyLCBmZCkge1xuICAgICAgICAgIGlmIChlcikge1xuICAgICAgICAgICAgaWYgKGNiKSBjYihlcilcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgICBmcy5mdXRpbWVzKGZkLCBhdCwgbXQsIGZ1bmN0aW9uIChlcikge1xuICAgICAgICAgICAgZnMuY2xvc2UoZmQsIGZ1bmN0aW9uIChlcjIpIHtcbiAgICAgICAgICAgICAgaWYgKGNiKSBjYihlciB8fCBlcjIpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGZzLmx1dGltZXNTeW5jID0gZnVuY3Rpb24gKHBhdGgsIGF0LCBtdCkge1xuICAgICAgICB2YXIgZmQgPSBmcy5vcGVuU3luYyhwYXRoLCBjb25zdGFudHMuT19TWU1MSU5LKVxuICAgICAgICB2YXIgcmV0XG4gICAgICAgIHZhciB0aHJldyA9IHRydWVcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXQgPSBmcy5mdXRpbWVzU3luYyhmZCwgYXQsIG10KVxuICAgICAgICAgIHRocmV3ID0gZmFsc2VcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBpZiAodGhyZXcpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGZzLmNsb3NlU3luYyhmZClcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVyKSB7fVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmcy5jbG9zZVN5bmMoZmQpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXRcbiAgICAgIH1cblxuICAgIH0gZWxzZSBpZiAoZnMuZnV0aW1lcykge1xuICAgICAgZnMubHV0aW1lcyA9IGZ1bmN0aW9uIChfYSwgX2IsIF9jLCBjYikgeyBpZiAoY2IpIHByb2Nlc3MubmV4dFRpY2soY2IpIH1cbiAgICAgIGZzLmx1dGltZXNTeW5jID0gZnVuY3Rpb24gKCkge31cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjaG1vZEZpeCAob3JpZykge1xuICAgIGlmICghb3JpZykgcmV0dXJuIG9yaWdcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwgbW9kZSwgY2IpIHtcbiAgICAgIHJldHVybiBvcmlnLmNhbGwoZnMsIHRhcmdldCwgbW9kZSwgZnVuY3Rpb24gKGVyKSB7XG4gICAgICAgIGlmIChjaG93bkVyT2soZXIpKSBlciA9IG51bGxcbiAgICAgICAgaWYgKGNiKSBjYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNobW9kRml4U3luYyAob3JpZykge1xuICAgIGlmICghb3JpZykgcmV0dXJuIG9yaWdcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwgbW9kZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG9yaWcuY2FsbChmcywgdGFyZ2V0LCBtb2RlKVxuICAgICAgfSBjYXRjaCAoZXIpIHtcbiAgICAgICAgaWYgKCFjaG93bkVyT2soZXIpKSB0aHJvdyBlclxuICAgICAgfVxuICAgIH1cbiAgfVxuXG5cbiAgZnVuY3Rpb24gY2hvd25GaXggKG9yaWcpIHtcbiAgICBpZiAoIW9yaWcpIHJldHVybiBvcmlnXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIHVpZCwgZ2lkLCBjYikge1xuICAgICAgcmV0dXJuIG9yaWcuY2FsbChmcywgdGFyZ2V0LCB1aWQsIGdpZCwgZnVuY3Rpb24gKGVyKSB7XG4gICAgICAgIGlmIChjaG93bkVyT2soZXIpKSBlciA9IG51bGxcbiAgICAgICAgaWYgKGNiKSBjYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNob3duRml4U3luYyAob3JpZykge1xuICAgIGlmICghb3JpZykgcmV0dXJuIG9yaWdcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwgdWlkLCBnaWQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBvcmlnLmNhbGwoZnMsIHRhcmdldCwgdWlkLCBnaWQpXG4gICAgICB9IGNhdGNoIChlcikge1xuICAgICAgICBpZiAoIWNob3duRXJPayhlcikpIHRocm93IGVyXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc3RhdEZpeCAob3JpZykge1xuICAgIGlmICghb3JpZykgcmV0dXJuIG9yaWdcbiAgICAvLyBPbGRlciB2ZXJzaW9ucyBvZiBOb2RlIGVycm9uZW91c2x5IHJldHVybmVkIHNpZ25lZCBpbnRlZ2VycyBmb3JcbiAgICAvLyB1aWQgKyBnaWQuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIG9wdGlvbnMsIGNiKSB7XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY2IgPSBvcHRpb25zXG4gICAgICAgIG9wdGlvbnMgPSBudWxsXG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBjYWxsYmFjayAoZXIsIHN0YXRzKSB7XG4gICAgICAgIGlmIChzdGF0cykge1xuICAgICAgICAgIGlmIChzdGF0cy51aWQgPCAwKSBzdGF0cy51aWQgKz0gMHgxMDAwMDAwMDBcbiAgICAgICAgICBpZiAoc3RhdHMuZ2lkIDwgMCkgc3RhdHMuZ2lkICs9IDB4MTAwMDAwMDAwXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNiKSBjYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICB9XG4gICAgICByZXR1cm4gb3B0aW9ucyA/IG9yaWcuY2FsbChmcywgdGFyZ2V0LCBvcHRpb25zLCBjYWxsYmFjaylcbiAgICAgICAgOiBvcmlnLmNhbGwoZnMsIHRhcmdldCwgY2FsbGJhY2spXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc3RhdEZpeFN5bmMgKG9yaWcpIHtcbiAgICBpZiAoIW9yaWcpIHJldHVybiBvcmlnXG4gICAgLy8gT2xkZXIgdmVyc2lvbnMgb2YgTm9kZSBlcnJvbmVvdXNseSByZXR1cm5lZCBzaWduZWQgaW50ZWdlcnMgZm9yXG4gICAgLy8gdWlkICsgZ2lkLlxuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBvcHRpb25zKSB7XG4gICAgICB2YXIgc3RhdHMgPSBvcHRpb25zID8gb3JpZy5jYWxsKGZzLCB0YXJnZXQsIG9wdGlvbnMpXG4gICAgICAgIDogb3JpZy5jYWxsKGZzLCB0YXJnZXQpXG4gICAgICBpZiAoc3RhdHMpIHtcbiAgICAgICAgaWYgKHN0YXRzLnVpZCA8IDApIHN0YXRzLnVpZCArPSAweDEwMDAwMDAwMFxuICAgICAgICBpZiAoc3RhdHMuZ2lkIDwgMCkgc3RhdHMuZ2lkICs9IDB4MTAwMDAwMDAwXG4gICAgICB9XG4gICAgICByZXR1cm4gc3RhdHM7XG4gICAgfVxuICB9XG5cbiAgLy8gRU5PU1lTIG1lYW5zIHRoYXQgdGhlIGZzIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgb3AuIEp1c3QgaWdub3JlXG4gIC8vIHRoYXQsIGJlY2F1c2UgaXQgZG9lc24ndCBtYXR0ZXIuXG4gIC8vXG4gIC8vIGlmIHRoZXJlJ3Mgbm8gZ2V0dWlkLCBvciBpZiBnZXR1aWQoKSBpcyBzb21ldGhpbmcgb3RoZXJcbiAgLy8gdGhhbiAwLCBhbmQgdGhlIGVycm9yIGlzIEVJTlZBTCBvciBFUEVSTSwgdGhlbiBqdXN0IGlnbm9yZVxuICAvLyBpdC5cbiAgLy9cbiAgLy8gVGhpcyBzcGVjaWZpYyBjYXNlIGlzIGEgc2lsZW50IGZhaWx1cmUgaW4gY3AsIGluc3RhbGwsIHRhcixcbiAgLy8gYW5kIG1vc3Qgb3RoZXIgdW5peCB0b29scyB0aGF0IG1hbmFnZSBwZXJtaXNzaW9ucy5cbiAgLy9cbiAgLy8gV2hlbiBydW5uaW5nIGFzIHJvb3QsIG9yIGlmIG90aGVyIHR5cGVzIG9mIGVycm9ycyBhcmVcbiAgLy8gZW5jb3VudGVyZWQsIHRoZW4gaXQncyBzdHJpY3QuXG4gIGZ1bmN0aW9uIGNob3duRXJPayAoZXIpIHtcbiAgICBpZiAoIWVyKVxuICAgICAgcmV0dXJuIHRydWVcblxuICAgIGlmIChlci5jb2RlID09PSBcIkVOT1NZU1wiKVxuICAgICAgcmV0dXJuIHRydWVcblxuICAgIHZhciBub25yb290ID0gIXByb2Nlc3MuZ2V0dWlkIHx8IHByb2Nlc3MuZ2V0dWlkKCkgIT09IDBcbiAgICBpZiAobm9ucm9vdCkge1xuICAgICAgaWYgKGVyLmNvZGUgPT09IFwiRUlOVkFMXCIgfHwgZXIuY29kZSA9PT0gXCJFUEVSTVwiKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG4iLAogICAgInZhciBTdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0nKS5TdHJlYW1cblxubW9kdWxlLmV4cG9ydHMgPSBsZWdhY3lcblxuZnVuY3Rpb24gbGVnYWN5IChmcykge1xuICByZXR1cm4ge1xuICAgIFJlYWRTdHJlYW06IFJlYWRTdHJlYW0sXG4gICAgV3JpdGVTdHJlYW06IFdyaXRlU3RyZWFtXG4gIH1cblxuICBmdW5jdGlvbiBSZWFkU3RyZWFtIChwYXRoLCBvcHRpb25zKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlYWRTdHJlYW0pKSByZXR1cm4gbmV3IFJlYWRTdHJlYW0ocGF0aCwgb3B0aW9ucyk7XG5cbiAgICBTdHJlYW0uY2FsbCh0aGlzKTtcblxuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHRoaXMucGF0aCA9IHBhdGg7XG4gICAgdGhpcy5mZCA9IG51bGw7XG4gICAgdGhpcy5yZWFkYWJsZSA9IHRydWU7XG4gICAgdGhpcy5wYXVzZWQgPSBmYWxzZTtcblxuICAgIHRoaXMuZmxhZ3MgPSAncic7XG4gICAgdGhpcy5tb2RlID0gNDM4OyAvKj0wNjY2Ki9cbiAgICB0aGlzLmJ1ZmZlclNpemUgPSA2NCAqIDEwMjQ7XG5cbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIC8vIE1peGluIG9wdGlvbnMgaW50byB0aGlzXG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvcHRpb25zKTtcbiAgICBmb3IgKHZhciBpbmRleCA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaW5kZXhdO1xuICAgICAgdGhpc1trZXldID0gb3B0aW9uc1trZXldO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmVuY29kaW5nKSB0aGlzLnNldEVuY29kaW5nKHRoaXMuZW5jb2RpbmcpO1xuXG4gICAgaWYgKHRoaXMuc3RhcnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCdudW1iZXInICE9PSB0eXBlb2YgdGhpcy5zdGFydCkge1xuICAgICAgICB0aHJvdyBUeXBlRXJyb3IoJ3N0YXJ0IG11c3QgYmUgYSBOdW1iZXInKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuZW5kID0gSW5maW5pdHk7XG4gICAgICB9IGVsc2UgaWYgKCdudW1iZXInICE9PSB0eXBlb2YgdGhpcy5lbmQpIHtcbiAgICAgICAgdGhyb3cgVHlwZUVycm9yKCdlbmQgbXVzdCBiZSBhIE51bWJlcicpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5zdGFydCA+IHRoaXMuZW5kKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignc3RhcnQgbXVzdCBiZSA8PSBlbmQnKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5wb3MgPSB0aGlzLnN0YXJ0O1xuICAgIH1cblxuICAgIGlmICh0aGlzLmZkICE9PSBudWxsKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uKCkge1xuICAgICAgICBzZWxmLl9yZWFkKCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmcy5vcGVuKHRoaXMucGF0aCwgdGhpcy5mbGFncywgdGhpcy5tb2RlLCBmdW5jdGlvbiAoZXJyLCBmZCkge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICBzZWxmLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgICAgICAgc2VsZi5yZWFkYWJsZSA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHNlbGYuZmQgPSBmZDtcbiAgICAgIHNlbGYuZW1pdCgnb3BlbicsIGZkKTtcbiAgICAgIHNlbGYuX3JlYWQoKTtcbiAgICB9KVxuICB9XG5cbiAgZnVuY3Rpb24gV3JpdGVTdHJlYW0gKHBhdGgsIG9wdGlvbnMpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgV3JpdGVTdHJlYW0pKSByZXR1cm4gbmV3IFdyaXRlU3RyZWFtKHBhdGgsIG9wdGlvbnMpO1xuXG4gICAgU3RyZWFtLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnBhdGggPSBwYXRoO1xuICAgIHRoaXMuZmQgPSBudWxsO1xuICAgIHRoaXMud3JpdGFibGUgPSB0cnVlO1xuXG4gICAgdGhpcy5mbGFncyA9ICd3JztcbiAgICB0aGlzLmVuY29kaW5nID0gJ2JpbmFyeSc7XG4gICAgdGhpcy5tb2RlID0gNDM4OyAvKj0wNjY2Ki9cbiAgICB0aGlzLmJ5dGVzV3JpdHRlbiA9IDA7XG5cbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIC8vIE1peGluIG9wdGlvbnMgaW50byB0aGlzXG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvcHRpb25zKTtcbiAgICBmb3IgKHZhciBpbmRleCA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaW5kZXhdO1xuICAgICAgdGhpc1trZXldID0gb3B0aW9uc1trZXldO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnN0YXJ0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICgnbnVtYmVyJyAhPT0gdHlwZW9mIHRoaXMuc3RhcnQpIHtcbiAgICAgICAgdGhyb3cgVHlwZUVycm9yKCdzdGFydCBtdXN0IGJlIGEgTnVtYmVyJyk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5zdGFydCA8IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzdGFydCBtdXN0IGJlID49IHplcm8nKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5wb3MgPSB0aGlzLnN0YXJ0O1xuICAgIH1cblxuICAgIHRoaXMuYnVzeSA9IGZhbHNlO1xuICAgIHRoaXMuX3F1ZXVlID0gW107XG5cbiAgICBpZiAodGhpcy5mZCA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5fb3BlbiA9IGZzLm9wZW47XG4gICAgICB0aGlzLl9xdWV1ZS5wdXNoKFt0aGlzLl9vcGVuLCB0aGlzLnBhdGgsIHRoaXMuZmxhZ3MsIHRoaXMubW9kZSwgdW5kZWZpbmVkXSk7XG4gICAgICB0aGlzLmZsdXNoKCk7XG4gICAgfVxuICB9XG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lXG5cbnZhciBnZXRQcm90b3R5cGVPZiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiBvYmouX19wcm90b19fXG59XG5cbmZ1bmN0aW9uIGNsb25lIChvYmopIHtcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqICE9PSAnb2JqZWN0JylcbiAgICByZXR1cm4gb2JqXG5cbiAgaWYgKG9iaiBpbnN0YW5jZW9mIE9iamVjdClcbiAgICB2YXIgY29weSA9IHsgX19wcm90b19fOiBnZXRQcm90b3R5cGVPZihvYmopIH1cbiAgZWxzZVxuICAgIHZhciBjb3B5ID0gT2JqZWN0LmNyZWF0ZShudWxsKVxuXG4gIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvcHksIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIGtleSkpXG4gIH0pXG5cbiAgcmV0dXJuIGNvcHlcbn1cbiIsCiAgICAidmFyIGZzID0gcmVxdWlyZSgnZnMnKVxudmFyIHBvbHlmaWxscyA9IHJlcXVpcmUoJy4vcG9seWZpbGxzLmpzJylcbnZhciBsZWdhY3kgPSByZXF1aXJlKCcuL2xlZ2FjeS1zdHJlYW1zLmpzJylcbnZhciBjbG9uZSA9IHJlcXVpcmUoJy4vY2xvbmUuanMnKVxuXG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKVxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAtIG5vZGUgMC54IHBvbHlmaWxsICovXG52YXIgZ3JhY2VmdWxRdWV1ZVxudmFyIHByZXZpb3VzU3ltYm9sXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlIC0gbm9kZSAwLnggcG9seWZpbGwgKi9cbmlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuZm9yID09PSAnZnVuY3Rpb24nKSB7XG4gIGdyYWNlZnVsUXVldWUgPSBTeW1ib2wuZm9yKCdncmFjZWZ1bC1mcy5xdWV1ZScpXG4gIC8vIFRoaXMgaXMgdXNlZCBpbiB0ZXN0aW5nIGJ5IGZ1dHVyZSB2ZXJzaW9uc1xuICBwcmV2aW91c1N5bWJvbCA9IFN5bWJvbC5mb3IoJ2dyYWNlZnVsLWZzLnByZXZpb3VzJylcbn0gZWxzZSB7XG4gIGdyYWNlZnVsUXVldWUgPSAnX19fZ3JhY2VmdWwtZnMucXVldWUnXG4gIHByZXZpb3VzU3ltYm9sID0gJ19fX2dyYWNlZnVsLWZzLnByZXZpb3VzJ1xufVxuXG5mdW5jdGlvbiBub29wICgpIHt9XG5cbmZ1bmN0aW9uIHB1Ymxpc2hRdWV1ZShjb250ZXh0LCBxdWV1ZSkge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29udGV4dCwgZ3JhY2VmdWxRdWV1ZSwge1xuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gcXVldWVcbiAgICB9XG4gIH0pXG59XG5cbnZhciBkZWJ1ZyA9IG5vb3BcbmlmICh1dGlsLmRlYnVnbG9nKVxuICBkZWJ1ZyA9IHV0aWwuZGVidWdsb2coJ2dmczQnKVxuZWxzZSBpZiAoL1xcYmdmczRcXGIvaS50ZXN0KHByb2Nlc3MuZW52Lk5PREVfREVCVUcgfHwgJycpKVxuICBkZWJ1ZyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBtID0gdXRpbC5mb3JtYXQuYXBwbHkodXRpbCwgYXJndW1lbnRzKVxuICAgIG0gPSAnR0ZTNDogJyArIG0uc3BsaXQoL1xcbi8pLmpvaW4oJ1xcbkdGUzQ6ICcpXG4gICAgY29uc29sZS5lcnJvcihtKVxuICB9XG5cbi8vIE9uY2UgdGltZSBpbml0aWFsaXphdGlvblxuaWYgKCFmc1tncmFjZWZ1bFF1ZXVlXSkge1xuICAvLyBUaGlzIHF1ZXVlIGNhbiBiZSBzaGFyZWQgYnkgbXVsdGlwbGUgbG9hZGVkIGluc3RhbmNlc1xuICB2YXIgcXVldWUgPSBnbG9iYWxbZ3JhY2VmdWxRdWV1ZV0gfHwgW11cbiAgcHVibGlzaFF1ZXVlKGZzLCBxdWV1ZSlcblxuICAvLyBQYXRjaCBmcy5jbG9zZS9jbG9zZVN5bmMgdG8gc2hhcmVkIHF1ZXVlIHZlcnNpb24sIGJlY2F1c2Ugd2UgbmVlZFxuICAvLyB0byByZXRyeSgpIHdoZW5ldmVyIGEgY2xvc2UgaGFwcGVucyAqYW55d2hlcmUqIGluIHRoZSBwcm9ncmFtLlxuICAvLyBUaGlzIGlzIGVzc2VudGlhbCB3aGVuIG11bHRpcGxlIGdyYWNlZnVsLWZzIGluc3RhbmNlcyBhcmVcbiAgLy8gaW4gcGxheSBhdCB0aGUgc2FtZSB0aW1lLlxuICBmcy5jbG9zZSA9IChmdW5jdGlvbiAoZnMkY2xvc2UpIHtcbiAgICBmdW5jdGlvbiBjbG9zZSAoZmQsIGNiKSB7XG4gICAgICByZXR1cm4gZnMkY2xvc2UuY2FsbChmcywgZmQsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiB1c2VzIHRoZSBncmFjZWZ1bC1mcyBzaGFyZWQgcXVldWVcbiAgICAgICAgaWYgKCFlcnIpIHtcbiAgICAgICAgICByZXNldFF1ZXVlKClcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgY2IuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY2xvc2UsIHByZXZpb3VzU3ltYm9sLCB7XG4gICAgICB2YWx1ZTogZnMkY2xvc2VcbiAgICB9KVxuICAgIHJldHVybiBjbG9zZVxuICB9KShmcy5jbG9zZSlcblxuICBmcy5jbG9zZVN5bmMgPSAoZnVuY3Rpb24gKGZzJGNsb3NlU3luYykge1xuICAgIGZ1bmN0aW9uIGNsb3NlU3luYyAoZmQpIHtcbiAgICAgIC8vIFRoaXMgZnVuY3Rpb24gdXNlcyB0aGUgZ3JhY2VmdWwtZnMgc2hhcmVkIHF1ZXVlXG4gICAgICBmcyRjbG9zZVN5bmMuYXBwbHkoZnMsIGFyZ3VtZW50cylcbiAgICAgIHJlc2V0UXVldWUoKVxuICAgIH1cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjbG9zZVN5bmMsIHByZXZpb3VzU3ltYm9sLCB7XG4gICAgICB2YWx1ZTogZnMkY2xvc2VTeW5jXG4gICAgfSlcbiAgICByZXR1cm4gY2xvc2VTeW5jXG4gIH0pKGZzLmNsb3NlU3luYylcblxuICBpZiAoL1xcYmdmczRcXGIvaS50ZXN0KHByb2Nlc3MuZW52Lk5PREVfREVCVUcgfHwgJycpKSB7XG4gICAgcHJvY2Vzcy5vbignZXhpdCcsIGZ1bmN0aW9uKCkge1xuICAgICAgZGVidWcoZnNbZ3JhY2VmdWxRdWV1ZV0pXG4gICAgICByZXF1aXJlKCdhc3NlcnQnKS5lcXVhbChmc1tncmFjZWZ1bFF1ZXVlXS5sZW5ndGgsIDApXG4gICAgfSlcbiAgfVxufVxuXG5pZiAoIWdsb2JhbFtncmFjZWZ1bFF1ZXVlXSkge1xuICBwdWJsaXNoUXVldWUoZ2xvYmFsLCBmc1tncmFjZWZ1bFF1ZXVlXSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0Y2goY2xvbmUoZnMpKVxuaWYgKHByb2Nlc3MuZW52LlRFU1RfR1JBQ0VGVUxfRlNfR0xPQkFMX1BBVENIICYmICFmcy5fX3BhdGNoZWQpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IHBhdGNoKGZzKVxuICAgIGZzLl9fcGF0Y2hlZCA9IHRydWU7XG59XG5cbmZ1bmN0aW9uIHBhdGNoIChmcykge1xuICAvLyBFdmVyeXRoaW5nIHRoYXQgcmVmZXJlbmNlcyB0aGUgb3BlbigpIGZ1bmN0aW9uIG5lZWRzIHRvIGJlIGluIGhlcmVcbiAgcG9seWZpbGxzKGZzKVxuICBmcy5ncmFjZWZ1bGlmeSA9IHBhdGNoXG5cbiAgZnMuY3JlYXRlUmVhZFN0cmVhbSA9IGNyZWF0ZVJlYWRTdHJlYW1cbiAgZnMuY3JlYXRlV3JpdGVTdHJlYW0gPSBjcmVhdGVXcml0ZVN0cmVhbVxuICB2YXIgZnMkcmVhZEZpbGUgPSBmcy5yZWFkRmlsZVxuICBmcy5yZWFkRmlsZSA9IHJlYWRGaWxlXG4gIGZ1bmN0aW9uIHJlYWRGaWxlIChwYXRoLCBvcHRpb25zLCBjYikge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgIGNiID0gb3B0aW9ucywgb3B0aW9ucyA9IG51bGxcblxuICAgIHJldHVybiBnbyRyZWFkRmlsZShwYXRoLCBvcHRpb25zLCBjYilcblxuICAgIGZ1bmN0aW9uIGdvJHJlYWRGaWxlIChwYXRoLCBvcHRpb25zLCBjYiwgc3RhcnRUaW1lKSB7XG4gICAgICByZXR1cm4gZnMkcmVhZEZpbGUocGF0aCwgb3B0aW9ucywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAoZXJyICYmIChlcnIuY29kZSA9PT0gJ0VNRklMRScgfHwgZXJyLmNvZGUgPT09ICdFTkZJTEUnKSlcbiAgICAgICAgICBlbnF1ZXVlKFtnbyRyZWFkRmlsZSwgW3BhdGgsIG9wdGlvbnMsIGNiXSwgZXJyLCBzdGFydFRpbWUgfHwgRGF0ZS5ub3coKSwgRGF0ZS5ub3coKV0pXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICBjYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgdmFyIGZzJHdyaXRlRmlsZSA9IGZzLndyaXRlRmlsZVxuICBmcy53cml0ZUZpbGUgPSB3cml0ZUZpbGVcbiAgZnVuY3Rpb24gd3JpdGVGaWxlIChwYXRoLCBkYXRhLCBvcHRpb25zLCBjYikge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgIGNiID0gb3B0aW9ucywgb3B0aW9ucyA9IG51bGxcblxuICAgIHJldHVybiBnbyR3cml0ZUZpbGUocGF0aCwgZGF0YSwgb3B0aW9ucywgY2IpXG5cbiAgICBmdW5jdGlvbiBnbyR3cml0ZUZpbGUgKHBhdGgsIGRhdGEsIG9wdGlvbnMsIGNiLCBzdGFydFRpbWUpIHtcbiAgICAgIHJldHVybiBmcyR3cml0ZUZpbGUocGF0aCwgZGF0YSwgb3B0aW9ucywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAoZXJyICYmIChlcnIuY29kZSA9PT0gJ0VNRklMRScgfHwgZXJyLmNvZGUgPT09ICdFTkZJTEUnKSlcbiAgICAgICAgICBlbnF1ZXVlKFtnbyR3cml0ZUZpbGUsIFtwYXRoLCBkYXRhLCBvcHRpb25zLCBjYl0sIGVyciwgc3RhcnRUaW1lIHx8IERhdGUubm93KCksIERhdGUubm93KCldKVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgY2IuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHZhciBmcyRhcHBlbmRGaWxlID0gZnMuYXBwZW5kRmlsZVxuICBpZiAoZnMkYXBwZW5kRmlsZSlcbiAgICBmcy5hcHBlbmRGaWxlID0gYXBwZW5kRmlsZVxuICBmdW5jdGlvbiBhcHBlbmRGaWxlIChwYXRoLCBkYXRhLCBvcHRpb25zLCBjYikge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgIGNiID0gb3B0aW9ucywgb3B0aW9ucyA9IG51bGxcblxuICAgIHJldHVybiBnbyRhcHBlbmRGaWxlKHBhdGgsIGRhdGEsIG9wdGlvbnMsIGNiKVxuXG4gICAgZnVuY3Rpb24gZ28kYXBwZW5kRmlsZSAocGF0aCwgZGF0YSwgb3B0aW9ucywgY2IsIHN0YXJ0VGltZSkge1xuICAgICAgcmV0dXJuIGZzJGFwcGVuZEZpbGUocGF0aCwgZGF0YSwgb3B0aW9ucywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAoZXJyICYmIChlcnIuY29kZSA9PT0gJ0VNRklMRScgfHwgZXJyLmNvZGUgPT09ICdFTkZJTEUnKSlcbiAgICAgICAgICBlbnF1ZXVlKFtnbyRhcHBlbmRGaWxlLCBbcGF0aCwgZGF0YSwgb3B0aW9ucywgY2JdLCBlcnIsIHN0YXJ0VGltZSB8fCBEYXRlLm5vdygpLCBEYXRlLm5vdygpXSlcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICB2YXIgZnMkY29weUZpbGUgPSBmcy5jb3B5RmlsZVxuICBpZiAoZnMkY29weUZpbGUpXG4gICAgZnMuY29weUZpbGUgPSBjb3B5RmlsZVxuICBmdW5jdGlvbiBjb3B5RmlsZSAoc3JjLCBkZXN0LCBmbGFncywgY2IpIHtcbiAgICBpZiAodHlwZW9mIGZsYWdzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjYiA9IGZsYWdzXG4gICAgICBmbGFncyA9IDBcbiAgICB9XG4gICAgcmV0dXJuIGdvJGNvcHlGaWxlKHNyYywgZGVzdCwgZmxhZ3MsIGNiKVxuXG4gICAgZnVuY3Rpb24gZ28kY29weUZpbGUgKHNyYywgZGVzdCwgZmxhZ3MsIGNiLCBzdGFydFRpbWUpIHtcbiAgICAgIHJldHVybiBmcyRjb3B5RmlsZShzcmMsIGRlc3QsIGZsYWdzLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmIChlcnIgJiYgKGVyci5jb2RlID09PSAnRU1GSUxFJyB8fCBlcnIuY29kZSA9PT0gJ0VORklMRScpKVxuICAgICAgICAgIGVucXVldWUoW2dvJGNvcHlGaWxlLCBbc3JjLCBkZXN0LCBmbGFncywgY2JdLCBlcnIsIHN0YXJ0VGltZSB8fCBEYXRlLm5vdygpLCBEYXRlLm5vdygpXSlcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICB2YXIgZnMkcmVhZGRpciA9IGZzLnJlYWRkaXJcbiAgZnMucmVhZGRpciA9IHJlYWRkaXJcbiAgdmFyIG5vUmVhZGRpck9wdGlvblZlcnNpb25zID0gL152WzAtNV1cXC4vXG4gIGZ1bmN0aW9uIHJlYWRkaXIgKHBhdGgsIG9wdGlvbnMsIGNiKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKVxuICAgICAgY2IgPSBvcHRpb25zLCBvcHRpb25zID0gbnVsbFxuXG4gICAgdmFyIGdvJHJlYWRkaXIgPSBub1JlYWRkaXJPcHRpb25WZXJzaW9ucy50ZXN0KHByb2Nlc3MudmVyc2lvbilcbiAgICAgID8gZnVuY3Rpb24gZ28kcmVhZGRpciAocGF0aCwgb3B0aW9ucywgY2IsIHN0YXJ0VGltZSkge1xuICAgICAgICByZXR1cm4gZnMkcmVhZGRpcihwYXRoLCBmcyRyZWFkZGlyQ2FsbGJhY2soXG4gICAgICAgICAgcGF0aCwgb3B0aW9ucywgY2IsIHN0YXJ0VGltZVxuICAgICAgICApKVxuICAgICAgfVxuICAgICAgOiBmdW5jdGlvbiBnbyRyZWFkZGlyIChwYXRoLCBvcHRpb25zLCBjYiwgc3RhcnRUaW1lKSB7XG4gICAgICAgIHJldHVybiBmcyRyZWFkZGlyKHBhdGgsIG9wdGlvbnMsIGZzJHJlYWRkaXJDYWxsYmFjayhcbiAgICAgICAgICBwYXRoLCBvcHRpb25zLCBjYiwgc3RhcnRUaW1lXG4gICAgICAgICkpXG4gICAgICB9XG5cbiAgICByZXR1cm4gZ28kcmVhZGRpcihwYXRoLCBvcHRpb25zLCBjYilcblxuICAgIGZ1bmN0aW9uIGZzJHJlYWRkaXJDYWxsYmFjayAocGF0aCwgb3B0aW9ucywgY2IsIHN0YXJ0VGltZSkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChlcnIsIGZpbGVzKSB7XG4gICAgICAgIGlmIChlcnIgJiYgKGVyci5jb2RlID09PSAnRU1GSUxFJyB8fCBlcnIuY29kZSA9PT0gJ0VORklMRScpKVxuICAgICAgICAgIGVucXVldWUoW1xuICAgICAgICAgICAgZ28kcmVhZGRpcixcbiAgICAgICAgICAgIFtwYXRoLCBvcHRpb25zLCBjYl0sXG4gICAgICAgICAgICBlcnIsXG4gICAgICAgICAgICBzdGFydFRpbWUgfHwgRGF0ZS5ub3coKSxcbiAgICAgICAgICAgIERhdGUubm93KClcbiAgICAgICAgICBdKVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAoZmlsZXMgJiYgZmlsZXMuc29ydClcbiAgICAgICAgICAgIGZpbGVzLnNvcnQoKVxuXG4gICAgICAgICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIGNiLmNhbGwodGhpcywgZXJyLCBmaWxlcylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChwcm9jZXNzLnZlcnNpb24uc3Vic3RyKDAsIDQpID09PSAndjAuOCcpIHtcbiAgICB2YXIgbGVnU3RyZWFtcyA9IGxlZ2FjeShmcylcbiAgICBSZWFkU3RyZWFtID0gbGVnU3RyZWFtcy5SZWFkU3RyZWFtXG4gICAgV3JpdGVTdHJlYW0gPSBsZWdTdHJlYW1zLldyaXRlU3RyZWFtXG4gIH1cblxuICB2YXIgZnMkUmVhZFN0cmVhbSA9IGZzLlJlYWRTdHJlYW1cbiAgaWYgKGZzJFJlYWRTdHJlYW0pIHtcbiAgICBSZWFkU3RyZWFtLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZnMkUmVhZFN0cmVhbS5wcm90b3R5cGUpXG4gICAgUmVhZFN0cmVhbS5wcm90b3R5cGUub3BlbiA9IFJlYWRTdHJlYW0kb3BlblxuICB9XG5cbiAgdmFyIGZzJFdyaXRlU3RyZWFtID0gZnMuV3JpdGVTdHJlYW1cbiAgaWYgKGZzJFdyaXRlU3RyZWFtKSB7XG4gICAgV3JpdGVTdHJlYW0ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShmcyRXcml0ZVN0cmVhbS5wcm90b3R5cGUpXG4gICAgV3JpdGVTdHJlYW0ucHJvdG90eXBlLm9wZW4gPSBXcml0ZVN0cmVhbSRvcGVuXG4gIH1cblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnMsICdSZWFkU3RyZWFtJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIFJlYWRTdHJlYW1cbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgUmVhZFN0cmVhbSA9IHZhbFxuICAgIH0sXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSlcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZzLCAnV3JpdGVTdHJlYW0nLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gV3JpdGVTdHJlYW1cbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgV3JpdGVTdHJlYW0gPSB2YWxcbiAgICB9LFxuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pXG5cbiAgLy8gbGVnYWN5IG5hbWVzXG4gIHZhciBGaWxlUmVhZFN0cmVhbSA9IFJlYWRTdHJlYW1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZzLCAnRmlsZVJlYWRTdHJlYW0nLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gRmlsZVJlYWRTdHJlYW1cbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgRmlsZVJlYWRTdHJlYW0gPSB2YWxcbiAgICB9LFxuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pXG4gIHZhciBGaWxlV3JpdGVTdHJlYW0gPSBXcml0ZVN0cmVhbVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnMsICdGaWxlV3JpdGVTdHJlYW0nLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gRmlsZVdyaXRlU3RyZWFtXG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIEZpbGVXcml0ZVN0cmVhbSA9IHZhbFxuICAgIH0sXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSlcblxuICBmdW5jdGlvbiBSZWFkU3RyZWFtIChwYXRoLCBvcHRpb25zKSB7XG4gICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBSZWFkU3RyZWFtKVxuICAgICAgcmV0dXJuIGZzJFJlYWRTdHJlYW0uYXBwbHkodGhpcywgYXJndW1lbnRzKSwgdGhpc1xuICAgIGVsc2VcbiAgICAgIHJldHVybiBSZWFkU3RyZWFtLmFwcGx5KE9iamVjdC5jcmVhdGUoUmVhZFN0cmVhbS5wcm90b3R5cGUpLCBhcmd1bWVudHMpXG4gIH1cblxuICBmdW5jdGlvbiBSZWFkU3RyZWFtJG9wZW4gKCkge1xuICAgIHZhciB0aGF0ID0gdGhpc1xuICAgIG9wZW4odGhhdC5wYXRoLCB0aGF0LmZsYWdzLCB0aGF0Lm1vZGUsIGZ1bmN0aW9uIChlcnIsIGZkKSB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIGlmICh0aGF0LmF1dG9DbG9zZSlcbiAgICAgICAgICB0aGF0LmRlc3Ryb3koKVxuXG4gICAgICAgIHRoYXQuZW1pdCgnZXJyb3InLCBlcnIpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGF0LmZkID0gZmRcbiAgICAgICAgdGhhdC5lbWl0KCdvcGVuJywgZmQpXG4gICAgICAgIHRoYXQucmVhZCgpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIFdyaXRlU3RyZWFtIChwYXRoLCBvcHRpb25zKSB7XG4gICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBXcml0ZVN0cmVhbSlcbiAgICAgIHJldHVybiBmcyRXcml0ZVN0cmVhbS5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCB0aGlzXG4gICAgZWxzZVxuICAgICAgcmV0dXJuIFdyaXRlU3RyZWFtLmFwcGx5KE9iamVjdC5jcmVhdGUoV3JpdGVTdHJlYW0ucHJvdG90eXBlKSwgYXJndW1lbnRzKVxuICB9XG5cbiAgZnVuY3Rpb24gV3JpdGVTdHJlYW0kb3BlbiAoKSB7XG4gICAgdmFyIHRoYXQgPSB0aGlzXG4gICAgb3Blbih0aGF0LnBhdGgsIHRoYXQuZmxhZ3MsIHRoYXQubW9kZSwgZnVuY3Rpb24gKGVyciwgZmQpIHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgdGhhdC5kZXN0cm95KClcbiAgICAgICAgdGhhdC5lbWl0KCdlcnJvcicsIGVycilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoYXQuZmQgPSBmZFxuICAgICAgICB0aGF0LmVtaXQoJ29wZW4nLCBmZClcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlUmVhZFN0cmVhbSAocGF0aCwgb3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgZnMuUmVhZFN0cmVhbShwYXRoLCBvcHRpb25zKVxuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlV3JpdGVTdHJlYW0gKHBhdGgsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IGZzLldyaXRlU3RyZWFtKHBhdGgsIG9wdGlvbnMpXG4gIH1cblxuICB2YXIgZnMkb3BlbiA9IGZzLm9wZW5cbiAgZnMub3BlbiA9IG9wZW5cbiAgZnVuY3Rpb24gb3BlbiAocGF0aCwgZmxhZ3MsIG1vZGUsIGNiKSB7XG4gICAgaWYgKHR5cGVvZiBtb2RlID09PSAnZnVuY3Rpb24nKVxuICAgICAgY2IgPSBtb2RlLCBtb2RlID0gbnVsbFxuXG4gICAgcmV0dXJuIGdvJG9wZW4ocGF0aCwgZmxhZ3MsIG1vZGUsIGNiKVxuXG4gICAgZnVuY3Rpb24gZ28kb3BlbiAocGF0aCwgZmxhZ3MsIG1vZGUsIGNiLCBzdGFydFRpbWUpIHtcbiAgICAgIHJldHVybiBmcyRvcGVuKHBhdGgsIGZsYWdzLCBtb2RlLCBmdW5jdGlvbiAoZXJyLCBmZCkge1xuICAgICAgICBpZiAoZXJyICYmIChlcnIuY29kZSA9PT0gJ0VNRklMRScgfHwgZXJyLmNvZGUgPT09ICdFTkZJTEUnKSlcbiAgICAgICAgICBlbnF1ZXVlKFtnbyRvcGVuLCBbcGF0aCwgZmxhZ3MsIG1vZGUsIGNiXSwgZXJyLCBzdGFydFRpbWUgfHwgRGF0ZS5ub3coKSwgRGF0ZS5ub3coKV0pXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICBjYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZzXG59XG5cbmZ1bmN0aW9uIGVucXVldWUgKGVsZW0pIHtcbiAgZGVidWcoJ0VOUVVFVUUnLCBlbGVtWzBdLm5hbWUsIGVsZW1bMV0pXG4gIGZzW2dyYWNlZnVsUXVldWVdLnB1c2goZWxlbSlcbiAgcmV0cnkoKVxufVxuXG4vLyBrZWVwIHRyYWNrIG9mIHRoZSB0aW1lb3V0IGJldHdlZW4gcmV0cnkoKSBjYWxsc1xudmFyIHJldHJ5VGltZXJcblxuLy8gcmVzZXQgdGhlIHN0YXJ0VGltZSBhbmQgbGFzdFRpbWUgdG8gbm93XG4vLyB0aGlzIHJlc2V0cyB0aGUgc3RhcnQgb2YgdGhlIDYwIHNlY29uZCBvdmVyYWxsIHRpbWVvdXQgYXMgd2VsbCBhcyB0aGVcbi8vIGRlbGF5IGJldHdlZW4gYXR0ZW1wdHMgc28gdGhhdCB3ZSdsbCByZXRyeSB0aGVzZSBqb2JzIHNvb25lclxuZnVuY3Rpb24gcmVzZXRRdWV1ZSAoKSB7XG4gIHZhciBub3cgPSBEYXRlLm5vdygpXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZnNbZ3JhY2VmdWxRdWV1ZV0ubGVuZ3RoOyArK2kpIHtcbiAgICAvLyBlbnRyaWVzIHRoYXQgYXJlIG9ubHkgYSBsZW5ndGggb2YgMiBhcmUgZnJvbSBhbiBvbGRlciB2ZXJzaW9uLCBkb24ndFxuICAgIC8vIGJvdGhlciBtb2RpZnlpbmcgdGhvc2Ugc2luY2UgdGhleSdsbCBiZSByZXRyaWVkIGFueXdheS5cbiAgICBpZiAoZnNbZ3JhY2VmdWxRdWV1ZV1baV0ubGVuZ3RoID4gMikge1xuICAgICAgZnNbZ3JhY2VmdWxRdWV1ZV1baV1bM10gPSBub3cgLy8gc3RhcnRUaW1lXG4gICAgICBmc1tncmFjZWZ1bFF1ZXVlXVtpXVs0XSA9IG5vdyAvLyBsYXN0VGltZVxuICAgIH1cbiAgfVxuICAvLyBjYWxsIHJldHJ5IHRvIG1ha2Ugc3VyZSB3ZSdyZSBhY3RpdmVseSBwcm9jZXNzaW5nIHRoZSBxdWV1ZVxuICByZXRyeSgpXG59XG5cbmZ1bmN0aW9uIHJldHJ5ICgpIHtcbiAgLy8gY2xlYXIgdGhlIHRpbWVyIGFuZCByZW1vdmUgaXQgdG8gaGVscCBwcmV2ZW50IHVuaW50ZW5kZWQgY29uY3VycmVuY3lcbiAgY2xlYXJUaW1lb3V0KHJldHJ5VGltZXIpXG4gIHJldHJ5VGltZXIgPSB1bmRlZmluZWRcblxuICBpZiAoZnNbZ3JhY2VmdWxRdWV1ZV0ubGVuZ3RoID09PSAwKVxuICAgIHJldHVyblxuXG4gIHZhciBlbGVtID0gZnNbZ3JhY2VmdWxRdWV1ZV0uc2hpZnQoKVxuICB2YXIgZm4gPSBlbGVtWzBdXG4gIHZhciBhcmdzID0gZWxlbVsxXVxuICAvLyB0aGVzZSBpdGVtcyBtYXkgYmUgdW5zZXQgaWYgdGhleSB3ZXJlIGFkZGVkIGJ5IGFuIG9sZGVyIGdyYWNlZnVsLWZzXG4gIHZhciBlcnIgPSBlbGVtWzJdXG4gIHZhciBzdGFydFRpbWUgPSBlbGVtWzNdXG4gIHZhciBsYXN0VGltZSA9IGVsZW1bNF1cblxuICAvLyBpZiB3ZSBkb24ndCBoYXZlIGEgc3RhcnRUaW1lIHdlIGhhdmUgbm8gd2F5IG9mIGtub3dpbmcgaWYgd2UndmUgd2FpdGVkXG4gIC8vIGxvbmcgZW5vdWdoLCBzbyBnbyBhaGVhZCBhbmQgcmV0cnkgdGhpcyBpdGVtIG5vd1xuICBpZiAoc3RhcnRUaW1lID09PSB1bmRlZmluZWQpIHtcbiAgICBkZWJ1ZygnUkVUUlknLCBmbi5uYW1lLCBhcmdzKVxuICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MpXG4gIH0gZWxzZSBpZiAoRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSA+PSA2MDAwMCkge1xuICAgIC8vIGl0J3MgYmVlbiBtb3JlIHRoYW4gNjAgc2Vjb25kcyB0b3RhbCwgYmFpbCBub3dcbiAgICBkZWJ1ZygnVElNRU9VVCcsIGZuLm5hbWUsIGFyZ3MpXG4gICAgdmFyIGNiID0gYXJncy5wb3AoKVxuICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpXG4gICAgICBjYi5jYWxsKG51bGwsIGVycilcbiAgfSBlbHNlIHtcbiAgICAvLyB0aGUgYW1vdW50IG9mIHRpbWUgYmV0d2VlbiB0aGUgbGFzdCBhdHRlbXB0IGFuZCByaWdodCBub3dcbiAgICB2YXIgc2luY2VBdHRlbXB0ID0gRGF0ZS5ub3coKSAtIGxhc3RUaW1lXG4gICAgLy8gdGhlIGFtb3VudCBvZiB0aW1lIGJldHdlZW4gd2hlbiB3ZSBmaXJzdCB0cmllZCwgYW5kIHdoZW4gd2UgbGFzdCB0cmllZFxuICAgIC8vIHJvdW5kZWQgdXAgdG8gYXQgbGVhc3QgMVxuICAgIHZhciBzaW5jZVN0YXJ0ID0gTWF0aC5tYXgobGFzdFRpbWUgLSBzdGFydFRpbWUsIDEpXG4gICAgLy8gYmFja29mZi4gd2FpdCBsb25nZXIgdGhhbiB0aGUgdG90YWwgdGltZSB3ZSd2ZSBiZWVuIHJldHJ5aW5nLCBidXQgb25seVxuICAgIC8vIHVwIHRvIGEgbWF4aW11bSBvZiAxMDBtc1xuICAgIHZhciBkZXNpcmVkRGVsYXkgPSBNYXRoLm1pbihzaW5jZVN0YXJ0ICogMS4yLCAxMDApXG4gICAgLy8gaXQncyBiZWVuIGxvbmcgZW5vdWdoIHNpbmNlIHRoZSBsYXN0IHJldHJ5LCBkbyBpdCBhZ2FpblxuICAgIGlmIChzaW5jZUF0dGVtcHQgPj0gZGVzaXJlZERlbGF5KSB7XG4gICAgICBkZWJ1ZygnUkVUUlknLCBmbi5uYW1lLCBhcmdzKVxuICAgICAgZm4uYXBwbHkobnVsbCwgYXJncy5jb25jYXQoW3N0YXJ0VGltZV0pKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpZiB3ZSBjYW4ndCBkbyB0aGlzIGpvYiB5ZXQsIHB1c2ggaXQgdG8gdGhlIGVuZCBvZiB0aGUgcXVldWVcbiAgICAgIC8vIGFuZCBsZXQgdGhlIG5leHQgaXRlcmF0aW9uIGNoZWNrIGFnYWluXG4gICAgICBmc1tncmFjZWZ1bFF1ZXVlXS5wdXNoKGVsZW0pXG4gICAgfVxuICB9XG5cbiAgLy8gc2NoZWR1bGUgb3VyIG5leHQgcnVuIGlmIG9uZSBpc24ndCBhbHJlYWR5IHNjaGVkdWxlZFxuICBpZiAocmV0cnlUaW1lciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0cnlUaW1lciA9IHNldFRpbWVvdXQocmV0cnksIDApXG4gIH1cbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBpc1N0cmVhbSA9IHN0cmVhbSA9PlxuXHRzdHJlYW0gIT09IG51bGwgJiZcblx0dHlwZW9mIHN0cmVhbSA9PT0gJ29iamVjdCcgJiZcblx0dHlwZW9mIHN0cmVhbS5waXBlID09PSAnZnVuY3Rpb24nO1xuXG5pc1N0cmVhbS53cml0YWJsZSA9IHN0cmVhbSA9PlxuXHRpc1N0cmVhbShzdHJlYW0pICYmXG5cdHN0cmVhbS53cml0YWJsZSAhPT0gZmFsc2UgJiZcblx0dHlwZW9mIHN0cmVhbS5fd3JpdGUgPT09ICdmdW5jdGlvbicgJiZcblx0dHlwZW9mIHN0cmVhbS5fd3JpdGFibGVTdGF0ZSA9PT0gJ29iamVjdCc7XG5cbmlzU3RyZWFtLnJlYWRhYmxlID0gc3RyZWFtID0+XG5cdGlzU3RyZWFtKHN0cmVhbSkgJiZcblx0c3RyZWFtLnJlYWRhYmxlICE9PSBmYWxzZSAmJlxuXHR0eXBlb2Ygc3RyZWFtLl9yZWFkID09PSAnZnVuY3Rpb24nICYmXG5cdHR5cGVvZiBzdHJlYW0uX3JlYWRhYmxlU3RhdGUgPT09ICdvYmplY3QnO1xuXG5pc1N0cmVhbS5kdXBsZXggPSBzdHJlYW0gPT5cblx0aXNTdHJlYW0ud3JpdGFibGUoc3RyZWFtKSAmJlxuXHRpc1N0cmVhbS5yZWFkYWJsZShzdHJlYW0pO1xuXG5pc1N0cmVhbS50cmFuc2Zvcm0gPSBzdHJlYW0gPT5cblx0aXNTdHJlYW0uZHVwbGV4KHN0cmVhbSkgJiZcblx0dHlwZW9mIHN0cmVhbS5fdHJhbnNmb3JtID09PSAnZnVuY3Rpb24nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzU3RyZWFtO1xuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbmlmICh0eXBlb2YgcHJvY2VzcyA9PT0gJ3VuZGVmaW5lZCcgfHxcbiAgICAhcHJvY2Vzcy52ZXJzaW9uIHx8XG4gICAgcHJvY2Vzcy52ZXJzaW9uLmluZGV4T2YoJ3YwLicpID09PSAwIHx8XG4gICAgcHJvY2Vzcy52ZXJzaW9uLmluZGV4T2YoJ3YxLicpID09PSAwICYmIHByb2Nlc3MudmVyc2lvbi5pbmRleE9mKCd2MS44LicpICE9PSAwKSB7XG4gIG1vZHVsZS5leHBvcnRzID0geyBuZXh0VGljazogbmV4dFRpY2sgfTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcHJvY2Vzc1xufVxuXG5mdW5jdGlvbiBuZXh0VGljayhmbiwgYXJnMSwgYXJnMiwgYXJnMykge1xuICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJjYWxsYmFja1wiIGFyZ3VtZW50IG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICB9XG4gIHZhciBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICB2YXIgYXJncywgaTtcbiAgc3dpdGNoIChsZW4pIHtcbiAgY2FzZSAwOlxuICBjYXNlIDE6XG4gICAgcmV0dXJuIHByb2Nlc3MubmV4dFRpY2soZm4pO1xuICBjYXNlIDI6XG4gICAgcmV0dXJuIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gYWZ0ZXJUaWNrT25lKCkge1xuICAgICAgZm4uY2FsbChudWxsLCBhcmcxKTtcbiAgICB9KTtcbiAgY2FzZSAzOlxuICAgIHJldHVybiBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uIGFmdGVyVGlja1R3bygpIHtcbiAgICAgIGZuLmNhbGwobnVsbCwgYXJnMSwgYXJnMik7XG4gICAgfSk7XG4gIGNhc2UgNDpcbiAgICByZXR1cm4gcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiBhZnRlclRpY2tUaHJlZSgpIHtcbiAgICAgIGZuLmNhbGwobnVsbCwgYXJnMSwgYXJnMiwgYXJnMyk7XG4gICAgfSk7XG4gIGRlZmF1bHQ6XG4gICAgYXJncyA9IG5ldyBBcnJheShsZW4gLSAxKTtcbiAgICBpID0gMDtcbiAgICB3aGlsZSAoaSA8IGFyZ3MubGVuZ3RoKSB7XG4gICAgICBhcmdzW2krK10gPSBhcmd1bWVudHNbaV07XG4gICAgfVxuICAgIHJldHVybiBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uIGFmdGVyVGljaygpIHtcbiAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgIH0pO1xuICB9XG59XG5cbiIsCiAgICAidmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoYXJyKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKGFycikgPT0gJ1tvYmplY3QgQXJyYXldJztcbn07XG4iLAogICAgIi8qIGVzbGludC1kaXNhYmxlIG5vZGUvbm8tZGVwcmVjYXRlZC1hcGkgKi9cbnZhciBidWZmZXIgPSByZXF1aXJlKCdidWZmZXInKVxudmFyIEJ1ZmZlciA9IGJ1ZmZlci5CdWZmZXJcblxuLy8gYWx0ZXJuYXRpdmUgdG8gdXNpbmcgT2JqZWN0LmtleXMgZm9yIG9sZCBicm93c2Vyc1xuZnVuY3Rpb24gY29weVByb3BzIChzcmMsIGRzdCkge1xuICBmb3IgKHZhciBrZXkgaW4gc3JjKSB7XG4gICAgZHN0W2tleV0gPSBzcmNba2V5XVxuICB9XG59XG5pZiAoQnVmZmVyLmZyb20gJiYgQnVmZmVyLmFsbG9jICYmIEJ1ZmZlci5hbGxvY1Vuc2FmZSAmJiBCdWZmZXIuYWxsb2NVbnNhZmVTbG93KSB7XG4gIG1vZHVsZS5leHBvcnRzID0gYnVmZmVyXG59IGVsc2Uge1xuICAvLyBDb3B5IHByb3BlcnRpZXMgZnJvbSByZXF1aXJlKCdidWZmZXInKVxuICBjb3B5UHJvcHMoYnVmZmVyLCBleHBvcnRzKVxuICBleHBvcnRzLkJ1ZmZlciA9IFNhZmVCdWZmZXJcbn1cblxuZnVuY3Rpb24gU2FmZUJ1ZmZlciAoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIEJ1ZmZlcihhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuLy8gQ29weSBzdGF0aWMgbWV0aG9kcyBmcm9tIEJ1ZmZlclxuY29weVByb3BzKEJ1ZmZlciwgU2FmZUJ1ZmZlcilcblxuU2FmZUJ1ZmZlci5mcm9tID0gZnVuY3Rpb24gKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmICh0eXBlb2YgYXJnID09PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyJylcbiAgfVxuICByZXR1cm4gQnVmZmVyKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxufVxuXG5TYWZlQnVmZmVyLmFsbG9jID0gZnVuY3Rpb24gKHNpemUsIGZpbGwsIGVuY29kaW5nKSB7XG4gIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJylcbiAgfVxuICB2YXIgYnVmID0gQnVmZmVyKHNpemUpXG4gIGlmIChmaWxsICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnc3RyaW5nJykge1xuICAgICAgYnVmLmZpbGwoZmlsbCwgZW5jb2RpbmcpXG4gICAgfSBlbHNlIHtcbiAgICAgIGJ1Zi5maWxsKGZpbGwpXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGJ1Zi5maWxsKDApXG4gIH1cbiAgcmV0dXJuIGJ1ZlxufVxuXG5TYWZlQnVmZmVyLmFsbG9jVW5zYWZlID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKVxuICB9XG4gIHJldHVybiBCdWZmZXIoc2l6ZSlcbn1cblxuU2FmZUJ1ZmZlci5hbGxvY1Vuc2FmZVNsb3cgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpXG4gIH1cbiAgcmV0dXJuIGJ1ZmZlci5TbG93QnVmZmVyKHNpemUpXG59XG4iLAogICAgIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyBOT1RFOiBUaGVzZSB0eXBlIGNoZWNraW5nIGZ1bmN0aW9ucyBpbnRlbnRpb25hbGx5IGRvbid0IHVzZSBgaW5zdGFuY2VvZmBcbi8vIGJlY2F1c2UgaXQgaXMgZnJhZ2lsZSBhbmQgY2FuIGJlIGVhc2lseSBmYWtlZCB3aXRoIGBPYmplY3QuY3JlYXRlKClgLlxuXG5mdW5jdGlvbiBpc0FycmF5KGFyZykge1xuICBpZiAoQXJyYXkuaXNBcnJheSkge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KGFyZyk7XG4gIH1cbiAgcmV0dXJuIG9iamVjdFRvU3RyaW5nKGFyZykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59XG5leHBvcnRzLmlzQXJyYXkgPSBpc0FycmF5O1xuXG5mdW5jdGlvbiBpc0Jvb2xlYW4oYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnYm9vbGVhbic7XG59XG5leHBvcnRzLmlzQm9vbGVhbiA9IGlzQm9vbGVhbjtcblxuZnVuY3Rpb24gaXNOdWxsKGFyZykge1xuICByZXR1cm4gYXJnID09PSBudWxsO1xufVxuZXhwb3J0cy5pc051bGwgPSBpc051bGw7XG5cbmZ1bmN0aW9uIGlzTnVsbE9yVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gYXJnID09IG51bGw7XG59XG5leHBvcnRzLmlzTnVsbE9yVW5kZWZpbmVkID0gaXNOdWxsT3JVbmRlZmluZWQ7XG5cbmZ1bmN0aW9uIGlzTnVtYmVyKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ251bWJlcic7XG59XG5leHBvcnRzLmlzTnVtYmVyID0gaXNOdW1iZXI7XG5cbmZ1bmN0aW9uIGlzU3RyaW5nKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ3N0cmluZyc7XG59XG5leHBvcnRzLmlzU3RyaW5nID0gaXNTdHJpbmc7XG5cbmZ1bmN0aW9uIGlzU3ltYm9sKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ3N5bWJvbCc7XG59XG5leHBvcnRzLmlzU3ltYm9sID0gaXNTeW1ib2w7XG5cbmZ1bmN0aW9uIGlzVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gYXJnID09PSB2b2lkIDA7XG59XG5leHBvcnRzLmlzVW5kZWZpbmVkID0gaXNVbmRlZmluZWQ7XG5cbmZ1bmN0aW9uIGlzUmVnRXhwKHJlKSB7XG4gIHJldHVybiBvYmplY3RUb1N0cmluZyhyZSkgPT09ICdbb2JqZWN0IFJlZ0V4cF0nO1xufVxuZXhwb3J0cy5pc1JlZ0V4cCA9IGlzUmVnRXhwO1xuXG5mdW5jdGlvbiBpc09iamVjdChhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdvYmplY3QnICYmIGFyZyAhPT0gbnVsbDtcbn1cbmV4cG9ydHMuaXNPYmplY3QgPSBpc09iamVjdDtcblxuZnVuY3Rpb24gaXNEYXRlKGQpIHtcbiAgcmV0dXJuIG9iamVjdFRvU3RyaW5nKGQpID09PSAnW29iamVjdCBEYXRlXSc7XG59XG5leHBvcnRzLmlzRGF0ZSA9IGlzRGF0ZTtcblxuZnVuY3Rpb24gaXNFcnJvcihlKSB7XG4gIHJldHVybiAob2JqZWN0VG9TdHJpbmcoZSkgPT09ICdbb2JqZWN0IEVycm9yXScgfHwgZSBpbnN0YW5jZW9mIEVycm9yKTtcbn1cbmV4cG9ydHMuaXNFcnJvciA9IGlzRXJyb3I7XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24oYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnZnVuY3Rpb24nO1xufVxuZXhwb3J0cy5pc0Z1bmN0aW9uID0gaXNGdW5jdGlvbjtcblxuZnVuY3Rpb24gaXNQcmltaXRpdmUoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IG51bGwgfHxcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICdib29sZWFuJyB8fFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ251bWJlcicgfHxcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnIHx8XG4gICAgICAgICB0eXBlb2YgYXJnID09PSAnc3ltYm9sJyB8fCAgLy8gRVM2IHN5bWJvbFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ3VuZGVmaW5lZCc7XG59XG5leHBvcnRzLmlzUHJpbWl0aXZlID0gaXNQcmltaXRpdmU7XG5cbmV4cG9ydHMuaXNCdWZmZXIgPSByZXF1aXJlKCdidWZmZXInKS5CdWZmZXIuaXNCdWZmZXI7XG5cbmZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKG8pIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKTtcbn1cbiIsCiAgICAiaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIGltcGxlbWVudGF0aW9uIGZyb20gc3RhbmRhcmQgbm9kZS5qcyAndXRpbCcgbW9kdWxlXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgaWYgKHN1cGVyQ3Rvcikge1xuICAgICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICAgIGN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckN0b3IucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgICAgdmFsdWU6IGN0b3IsXG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9O1xufSBlbHNlIHtcbiAgLy8gb2xkIHNjaG9vbCBzaGltIGZvciBvbGQgYnJvd3NlcnNcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBpZiAoc3VwZXJDdG9yKSB7XG4gICAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvclxuICAgICAgdmFyIFRlbXBDdG9yID0gZnVuY3Rpb24gKCkge31cbiAgICAgIFRlbXBDdG9yLnByb3RvdHlwZSA9IHN1cGVyQ3Rvci5wcm90b3R5cGVcbiAgICAgIGN0b3IucHJvdG90eXBlID0gbmV3IFRlbXBDdG9yKClcbiAgICAgIGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvclxuICAgIH1cbiAgfVxufVxuIiwKICAgICJ0cnkge1xuICB2YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgaWYgKHR5cGVvZiB1dGlsLmluaGVyaXRzICE9PSAnZnVuY3Rpb24nKSB0aHJvdyAnJztcbiAgbW9kdWxlLmV4cG9ydHMgPSB1dGlsLmluaGVyaXRzO1xufSBjYXRjaCAoZSkge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vaW5oZXJpdHNfYnJvd3Nlci5qcycpO1xufVxuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbnZhciBCdWZmZXIgPSByZXF1aXJlKCdzYWZlLWJ1ZmZlcicpLkJ1ZmZlcjtcbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuXG5mdW5jdGlvbiBjb3B5QnVmZmVyKHNyYywgdGFyZ2V0LCBvZmZzZXQpIHtcbiAgc3JjLmNvcHkodGFyZ2V0LCBvZmZzZXQpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gQnVmZmVyTGlzdCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQnVmZmVyTGlzdCk7XG5cbiAgICB0aGlzLmhlYWQgPSBudWxsO1xuICAgIHRoaXMudGFpbCA9IG51bGw7XG4gICAgdGhpcy5sZW5ndGggPSAwO1xuICB9XG5cbiAgQnVmZmVyTGlzdC5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIHB1c2godikge1xuICAgIHZhciBlbnRyeSA9IHsgZGF0YTogdiwgbmV4dDogbnVsbCB9O1xuICAgIGlmICh0aGlzLmxlbmd0aCA+IDApIHRoaXMudGFpbC5uZXh0ID0gZW50cnk7ZWxzZSB0aGlzLmhlYWQgPSBlbnRyeTtcbiAgICB0aGlzLnRhaWwgPSBlbnRyeTtcbiAgICArK3RoaXMubGVuZ3RoO1xuICB9O1xuXG4gIEJ1ZmZlckxpc3QucHJvdG90eXBlLnVuc2hpZnQgPSBmdW5jdGlvbiB1bnNoaWZ0KHYpIHtcbiAgICB2YXIgZW50cnkgPSB7IGRhdGE6IHYsIG5leHQ6IHRoaXMuaGVhZCB9O1xuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkgdGhpcy50YWlsID0gZW50cnk7XG4gICAgdGhpcy5oZWFkID0gZW50cnk7XG4gICAgKyt0aGlzLmxlbmd0aDtcbiAgfTtcblxuICBCdWZmZXJMaXN0LnByb3RvdHlwZS5zaGlmdCA9IGZ1bmN0aW9uIHNoaWZ0KCkge1xuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIHZhciByZXQgPSB0aGlzLmhlYWQuZGF0YTtcbiAgICBpZiAodGhpcy5sZW5ndGggPT09IDEpIHRoaXMuaGVhZCA9IHRoaXMudGFpbCA9IG51bGw7ZWxzZSB0aGlzLmhlYWQgPSB0aGlzLmhlYWQubmV4dDtcbiAgICAtLXRoaXMubGVuZ3RoO1xuICAgIHJldHVybiByZXQ7XG4gIH07XG5cbiAgQnVmZmVyTGlzdC5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICB0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBudWxsO1xuICAgIHRoaXMubGVuZ3RoID0gMDtcbiAgfTtcblxuICBCdWZmZXJMaXN0LnByb3RvdHlwZS5qb2luID0gZnVuY3Rpb24gam9pbihzKSB7XG4gICAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSByZXR1cm4gJyc7XG4gICAgdmFyIHAgPSB0aGlzLmhlYWQ7XG4gICAgdmFyIHJldCA9ICcnICsgcC5kYXRhO1xuICAgIHdoaWxlIChwID0gcC5uZXh0KSB7XG4gICAgICByZXQgKz0gcyArIHAuZGF0YTtcbiAgICB9cmV0dXJuIHJldDtcbiAgfTtcblxuICBCdWZmZXJMaXN0LnByb3RvdHlwZS5jb25jYXQgPSBmdW5jdGlvbiBjb25jYXQobikge1xuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIEJ1ZmZlci5hbGxvYygwKTtcbiAgICB2YXIgcmV0ID0gQnVmZmVyLmFsbG9jVW5zYWZlKG4gPj4+IDApO1xuICAgIHZhciBwID0gdGhpcy5oZWFkO1xuICAgIHZhciBpID0gMDtcbiAgICB3aGlsZSAocCkge1xuICAgICAgY29weUJ1ZmZlcihwLmRhdGEsIHJldCwgaSk7XG4gICAgICBpICs9IHAuZGF0YS5sZW5ndGg7XG4gICAgICBwID0gcC5uZXh0O1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xuICB9O1xuXG4gIHJldHVybiBCdWZmZXJMaXN0O1xufSgpO1xuXG5pZiAodXRpbCAmJiB1dGlsLmluc3BlY3QgJiYgdXRpbC5pbnNwZWN0LmN1c3RvbSkge1xuICBtb2R1bGUuZXhwb3J0cy5wcm90b3R5cGVbdXRpbC5pbnNwZWN0LmN1c3RvbV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG9iaiA9IHV0aWwuaW5zcGVjdCh7IGxlbmd0aDogdGhpcy5sZW5ndGggfSk7XG4gICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IubmFtZSArICcgJyArIG9iajtcbiAgfTtcbn0iLAogICAgIid1c2Ugc3RyaWN0JztcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cblxudmFyIHBuYSA9IHJlcXVpcmUoJ3Byb2Nlc3MtbmV4dGljay1hcmdzJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuLy8gdW5kb2N1bWVudGVkIGNiKCkgQVBJLCBuZWVkZWQgZm9yIGNvcmUsIG5vdCBmb3IgcHVibGljIEFQSVxuZnVuY3Rpb24gZGVzdHJveShlcnIsIGNiKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgdmFyIHJlYWRhYmxlRGVzdHJveWVkID0gdGhpcy5fcmVhZGFibGVTdGF0ZSAmJiB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZDtcbiAgdmFyIHdyaXRhYmxlRGVzdHJveWVkID0gdGhpcy5fd3JpdGFibGVTdGF0ZSAmJiB0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZDtcblxuICBpZiAocmVhZGFibGVEZXN0cm95ZWQgfHwgd3JpdGFibGVEZXN0cm95ZWQpIHtcbiAgICBpZiAoY2IpIHtcbiAgICAgIGNiKGVycik7XG4gICAgfSBlbHNlIGlmIChlcnIpIHtcbiAgICAgIGlmICghdGhpcy5fd3JpdGFibGVTdGF0ZSkge1xuICAgICAgICBwbmEubmV4dFRpY2soZW1pdEVycm9yTlQsIHRoaXMsIGVycik7XG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZCkge1xuICAgICAgICB0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZCA9IHRydWU7XG4gICAgICAgIHBuYS5uZXh0VGljayhlbWl0RXJyb3JOVCwgdGhpcywgZXJyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIHdlIHNldCBkZXN0cm95ZWQgdG8gdHJ1ZSBiZWZvcmUgZmlyaW5nIGVycm9yIGNhbGxiYWNrcyBpbiBvcmRlclxuICAvLyB0byBtYWtlIGl0IHJlLWVudHJhbmNlIHNhZmUgaW4gY2FzZSBkZXN0cm95KCkgaXMgY2FsbGVkIHdpdGhpbiBjYWxsYmFja3NcblxuICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZSkge1xuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8vIGlmIHRoaXMgaXMgYSBkdXBsZXggc3RyZWFtIG1hcmsgdGhlIHdyaXRhYmxlIHBhcnQgYXMgZGVzdHJveWVkIGFzIHdlbGxcbiAgaWYgKHRoaXMuX3dyaXRhYmxlU3RhdGUpIHtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZCA9IHRydWU7XG4gIH1cblxuICB0aGlzLl9kZXN0cm95KGVyciB8fCBudWxsLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgaWYgKCFjYiAmJiBlcnIpIHtcbiAgICAgIGlmICghX3RoaXMuX3dyaXRhYmxlU3RhdGUpIHtcbiAgICAgICAgcG5hLm5leHRUaWNrKGVtaXRFcnJvck5ULCBfdGhpcywgZXJyKTtcbiAgICAgIH0gZWxzZSBpZiAoIV90aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZCkge1xuICAgICAgICBfdGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQgPSB0cnVlO1xuICAgICAgICBwbmEubmV4dFRpY2soZW1pdEVycm9yTlQsIF90aGlzLCBlcnIpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2IpIHtcbiAgICAgIGNiKGVycik7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gdW5kZXN0cm95KCkge1xuICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZSkge1xuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkID0gZmFsc2U7XG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5yZWFkaW5nID0gZmFsc2U7XG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRlZCA9IGZhbHNlO1xuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCA9IGZhbHNlO1xuICB9XG5cbiAgaWYgKHRoaXMuX3dyaXRhYmxlU3RhdGUpIHtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZCA9IGZhbHNlO1xuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWQgPSBmYWxzZTtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmVuZGluZyA9IGZhbHNlO1xuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluYWxDYWxsZWQgPSBmYWxzZTtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLnByZWZpbmlzaGVkID0gZmFsc2U7XG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5pc2hlZCA9IGZhbHNlO1xuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkID0gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gZW1pdEVycm9yTlQoc2VsZiwgZXJyKSB7XG4gIHNlbGYuZW1pdCgnZXJyb3InLCBlcnIpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZGVzdHJveTogZGVzdHJveSxcbiAgdW5kZXN0cm95OiB1bmRlc3Ryb3lcbn07IiwKICAgICJcbi8qKlxuICogRm9yIE5vZGUuanMsIHNpbXBseSByZS1leHBvcnQgdGhlIGNvcmUgYHV0aWwuZGVwcmVjYXRlYCBmdW5jdGlvbi5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJ3V0aWwnKS5kZXByZWNhdGU7XG4iLAogICAgIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyBBIGJpdCBzaW1wbGVyIHRoYW4gcmVhZGFibGUgc3RyZWFtcy5cbi8vIEltcGxlbWVudCBhbiBhc3luYyAuX3dyaXRlKGNodW5rLCBlbmNvZGluZywgY2IpLCBhbmQgaXQnbGwgaGFuZGxlIGFsbFxuLy8gdGhlIGRyYWluIGV2ZW50IGVtaXNzaW9uIGFuZCBidWZmZXJpbmcuXG5cbid1c2Ugc3RyaWN0JztcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cblxudmFyIHBuYSA9IHJlcXVpcmUoJ3Byb2Nlc3MtbmV4dGljay1hcmdzJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxubW9kdWxlLmV4cG9ydHMgPSBXcml0YWJsZTtcblxuLyogPHJlcGxhY2VtZW50PiAqL1xuZnVuY3Rpb24gV3JpdGVSZXEoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICB0aGlzLmNodW5rID0gY2h1bms7XG4gIHRoaXMuZW5jb2RpbmcgPSBlbmNvZGluZztcbiAgdGhpcy5jYWxsYmFjayA9IGNiO1xuICB0aGlzLm5leHQgPSBudWxsO1xufVxuXG4vLyBJdCBzZWVtcyBhIGxpbmtlZCBsaXN0IGJ1dCBpdCBpcyBub3Rcbi8vIHRoZXJlIHdpbGwgYmUgb25seSAyIG9mIHRoZXNlIGZvciBlYWNoIHN0cmVhbVxuZnVuY3Rpb24gQ29ya2VkUmVxdWVzdChzdGF0ZSkge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gIHRoaXMubmV4dCA9IG51bGw7XG4gIHRoaXMuZW50cnkgPSBudWxsO1xuICB0aGlzLmZpbmlzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICBvbkNvcmtlZEZpbmlzaChfdGhpcywgc3RhdGUpO1xuICB9O1xufVxuLyogPC9yZXBsYWNlbWVudD4gKi9cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBhc3luY1dyaXRlID0gIXByb2Nlc3MuYnJvd3NlciAmJiBbJ3YwLjEwJywgJ3YwLjkuJ10uaW5kZXhPZihwcm9jZXNzLnZlcnNpb24uc2xpY2UoMCwgNSkpID4gLTEgPyBzZXRJbW1lZGlhdGUgOiBwbmEubmV4dFRpY2s7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBEdXBsZXg7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuV3JpdGFibGUuV3JpdGFibGVTdGF0ZSA9IFdyaXRhYmxlU3RhdGU7XG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgdXRpbCA9IE9iamVjdC5jcmVhdGUocmVxdWlyZSgnY29yZS11dGlsLWlzJykpO1xudXRpbC5pbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBpbnRlcm5hbFV0aWwgPSB7XG4gIGRlcHJlY2F0ZTogcmVxdWlyZSgndXRpbC1kZXByZWNhdGUnKVxufTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIFN0cmVhbSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvc3RyZWFtcy9zdHJlYW0nKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG4vKjxyZXBsYWNlbWVudD4qL1xuXG52YXIgQnVmZmVyID0gcmVxdWlyZSgnc2FmZS1idWZmZXInKS5CdWZmZXI7XG52YXIgT3VyVWludDhBcnJheSA9ICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbCA6IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogdHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnID8gc2VsZiA6IHt9KS5VaW50OEFycmF5IHx8IGZ1bmN0aW9uICgpIHt9O1xuZnVuY3Rpb24gX3VpbnQ4QXJyYXlUb0J1ZmZlcihjaHVuaykge1xuICByZXR1cm4gQnVmZmVyLmZyb20oY2h1bmspO1xufVxuZnVuY3Rpb24gX2lzVWludDhBcnJheShvYmopIHtcbiAgcmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihvYmopIHx8IG9iaiBpbnN0YW5jZW9mIE91clVpbnQ4QXJyYXk7XG59XG5cbi8qPC9yZXBsYWNlbWVudD4qL1xuXG52YXIgZGVzdHJveUltcGwgPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvZGVzdHJveScpO1xuXG51dGlsLmluaGVyaXRzKFdyaXRhYmxlLCBTdHJlYW0pO1xuXG5mdW5jdGlvbiBub3AoKSB7fVxuXG5mdW5jdGlvbiBXcml0YWJsZVN0YXRlKG9wdGlvbnMsIHN0cmVhbSkge1xuICBEdXBsZXggPSBEdXBsZXggfHwgcmVxdWlyZSgnLi9fc3RyZWFtX2R1cGxleCcpO1xuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIC8vIER1cGxleCBzdHJlYW1zIGFyZSBib3RoIHJlYWRhYmxlIGFuZCB3cml0YWJsZSwgYnV0IHNoYXJlXG4gIC8vIHRoZSBzYW1lIG9wdGlvbnMgb2JqZWN0LlxuICAvLyBIb3dldmVyLCBzb21lIGNhc2VzIHJlcXVpcmUgc2V0dGluZyBvcHRpb25zIHRvIGRpZmZlcmVudFxuICAvLyB2YWx1ZXMgZm9yIHRoZSByZWFkYWJsZSBhbmQgdGhlIHdyaXRhYmxlIHNpZGVzIG9mIHRoZSBkdXBsZXggc3RyZWFtLlxuICAvLyBUaGVzZSBvcHRpb25zIGNhbiBiZSBwcm92aWRlZCBzZXBhcmF0ZWx5IGFzIHJlYWRhYmxlWFhYIGFuZCB3cml0YWJsZVhYWC5cbiAgdmFyIGlzRHVwbGV4ID0gc3RyZWFtIGluc3RhbmNlb2YgRHVwbGV4O1xuXG4gIC8vIG9iamVjdCBzdHJlYW0gZmxhZyB0byBpbmRpY2F0ZSB3aGV0aGVyIG9yIG5vdCB0aGlzIHN0cmVhbVxuICAvLyBjb250YWlucyBidWZmZXJzIG9yIG9iamVjdHMuXG4gIHRoaXMub2JqZWN0TW9kZSA9ICEhb3B0aW9ucy5vYmplY3RNb2RlO1xuXG4gIGlmIChpc0R1cGxleCkgdGhpcy5vYmplY3RNb2RlID0gdGhpcy5vYmplY3RNb2RlIHx8ICEhb3B0aW9ucy53cml0YWJsZU9iamVjdE1vZGU7XG5cbiAgLy8gdGhlIHBvaW50IGF0IHdoaWNoIHdyaXRlKCkgc3RhcnRzIHJldHVybmluZyBmYWxzZVxuICAvLyBOb3RlOiAwIGlzIGEgdmFsaWQgdmFsdWUsIG1lYW5zIHRoYXQgd2UgYWx3YXlzIHJldHVybiBmYWxzZSBpZlxuICAvLyB0aGUgZW50aXJlIGJ1ZmZlciBpcyBub3QgZmx1c2hlZCBpbW1lZGlhdGVseSBvbiB3cml0ZSgpXG4gIHZhciBod20gPSBvcHRpb25zLmhpZ2hXYXRlck1hcms7XG4gIHZhciB3cml0YWJsZUh3bSA9IG9wdGlvbnMud3JpdGFibGVIaWdoV2F0ZXJNYXJrO1xuICB2YXIgZGVmYXVsdEh3bSA9IHRoaXMub2JqZWN0TW9kZSA/IDE2IDogMTYgKiAxMDI0O1xuXG4gIGlmIChod20gfHwgaHdtID09PSAwKSB0aGlzLmhpZ2hXYXRlck1hcmsgPSBod207ZWxzZSBpZiAoaXNEdXBsZXggJiYgKHdyaXRhYmxlSHdtIHx8IHdyaXRhYmxlSHdtID09PSAwKSkgdGhpcy5oaWdoV2F0ZXJNYXJrID0gd3JpdGFibGVId207ZWxzZSB0aGlzLmhpZ2hXYXRlck1hcmsgPSBkZWZhdWx0SHdtO1xuXG4gIC8vIGNhc3QgdG8gaW50cy5cbiAgdGhpcy5oaWdoV2F0ZXJNYXJrID0gTWF0aC5mbG9vcih0aGlzLmhpZ2hXYXRlck1hcmspO1xuXG4gIC8vIGlmIF9maW5hbCBoYXMgYmVlbiBjYWxsZWRcbiAgdGhpcy5maW5hbENhbGxlZCA9IGZhbHNlO1xuXG4gIC8vIGRyYWluIGV2ZW50IGZsYWcuXG4gIHRoaXMubmVlZERyYWluID0gZmFsc2U7XG4gIC8vIGF0IHRoZSBzdGFydCBvZiBjYWxsaW5nIGVuZCgpXG4gIHRoaXMuZW5kaW5nID0gZmFsc2U7XG4gIC8vIHdoZW4gZW5kKCkgaGFzIGJlZW4gY2FsbGVkLCBhbmQgcmV0dXJuZWRcbiAgdGhpcy5lbmRlZCA9IGZhbHNlO1xuICAvLyB3aGVuICdmaW5pc2gnIGlzIGVtaXR0ZWRcbiAgdGhpcy5maW5pc2hlZCA9IGZhbHNlO1xuXG4gIC8vIGhhcyBpdCBiZWVuIGRlc3Ryb3llZFxuICB0aGlzLmRlc3Ryb3llZCA9IGZhbHNlO1xuXG4gIC8vIHNob3VsZCB3ZSBkZWNvZGUgc3RyaW5ncyBpbnRvIGJ1ZmZlcnMgYmVmb3JlIHBhc3NpbmcgdG8gX3dyaXRlP1xuICAvLyB0aGlzIGlzIGhlcmUgc28gdGhhdCBzb21lIG5vZGUtY29yZSBzdHJlYW1zIGNhbiBvcHRpbWl6ZSBzdHJpbmdcbiAgLy8gaGFuZGxpbmcgYXQgYSBsb3dlciBsZXZlbC5cbiAgdmFyIG5vRGVjb2RlID0gb3B0aW9ucy5kZWNvZGVTdHJpbmdzID09PSBmYWxzZTtcbiAgdGhpcy5kZWNvZGVTdHJpbmdzID0gIW5vRGVjb2RlO1xuXG4gIC8vIENyeXB0byBpcyBraW5kIG9mIG9sZCBhbmQgY3J1c3R5LiAgSGlzdG9yaWNhbGx5LCBpdHMgZGVmYXVsdCBzdHJpbmdcbiAgLy8gZW5jb2RpbmcgaXMgJ2JpbmFyeScgc28gd2UgaGF2ZSB0byBtYWtlIHRoaXMgY29uZmlndXJhYmxlLlxuICAvLyBFdmVyeXRoaW5nIGVsc2UgaW4gdGhlIHVuaXZlcnNlIHVzZXMgJ3V0ZjgnLCB0aG91Z2guXG4gIHRoaXMuZGVmYXVsdEVuY29kaW5nID0gb3B0aW9ucy5kZWZhdWx0RW5jb2RpbmcgfHwgJ3V0ZjgnO1xuXG4gIC8vIG5vdCBhbiBhY3R1YWwgYnVmZmVyIHdlIGtlZXAgdHJhY2sgb2YsIGJ1dCBhIG1lYXN1cmVtZW50XG4gIC8vIG9mIGhvdyBtdWNoIHdlJ3JlIHdhaXRpbmcgdG8gZ2V0IHB1c2hlZCB0byBzb21lIHVuZGVybHlpbmdcbiAgLy8gc29ja2V0IG9yIGZpbGUuXG4gIHRoaXMubGVuZ3RoID0gMDtcblxuICAvLyBhIGZsYWcgdG8gc2VlIHdoZW4gd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBhIHdyaXRlLlxuICB0aGlzLndyaXRpbmcgPSBmYWxzZTtcblxuICAvLyB3aGVuIHRydWUgYWxsIHdyaXRlcyB3aWxsIGJlIGJ1ZmZlcmVkIHVudGlsIC51bmNvcmsoKSBjYWxsXG4gIHRoaXMuY29ya2VkID0gMDtcblxuICAvLyBhIGZsYWcgdG8gYmUgYWJsZSB0byB0ZWxsIGlmIHRoZSBvbndyaXRlIGNiIGlzIGNhbGxlZCBpbW1lZGlhdGVseSxcbiAgLy8gb3Igb24gYSBsYXRlciB0aWNrLiAgV2Ugc2V0IHRoaXMgdG8gdHJ1ZSBhdCBmaXJzdCwgYmVjYXVzZSBhbnlcbiAgLy8gYWN0aW9ucyB0aGF0IHNob3VsZG4ndCBoYXBwZW4gdW50aWwgXCJsYXRlclwiIHNob3VsZCBnZW5lcmFsbHkgYWxzb1xuICAvLyBub3QgaGFwcGVuIGJlZm9yZSB0aGUgZmlyc3Qgd3JpdGUgY2FsbC5cbiAgdGhpcy5zeW5jID0gdHJ1ZTtcblxuICAvLyBhIGZsYWcgdG8ga25vdyBpZiB3ZSdyZSBwcm9jZXNzaW5nIHByZXZpb3VzbHkgYnVmZmVyZWQgaXRlbXMsIHdoaWNoXG4gIC8vIG1heSBjYWxsIHRoZSBfd3JpdGUoKSBjYWxsYmFjayBpbiB0aGUgc2FtZSB0aWNrLCBzbyB0aGF0IHdlIGRvbid0XG4gIC8vIGVuZCB1cCBpbiBhbiBvdmVybGFwcGVkIG9ud3JpdGUgc2l0dWF0aW9uLlxuICB0aGlzLmJ1ZmZlclByb2Nlc3NpbmcgPSBmYWxzZTtcblxuICAvLyB0aGUgY2FsbGJhY2sgdGhhdCdzIHBhc3NlZCB0byBfd3JpdGUoY2h1bmssY2IpXG4gIHRoaXMub253cml0ZSA9IGZ1bmN0aW9uIChlcikge1xuICAgIG9ud3JpdGUoc3RyZWFtLCBlcik7XG4gIH07XG5cbiAgLy8gdGhlIGNhbGxiYWNrIHRoYXQgdGhlIHVzZXIgc3VwcGxpZXMgdG8gd3JpdGUoY2h1bmssZW5jb2RpbmcsY2IpXG4gIHRoaXMud3JpdGVjYiA9IG51bGw7XG5cbiAgLy8gdGhlIGFtb3VudCB0aGF0IGlzIGJlaW5nIHdyaXR0ZW4gd2hlbiBfd3JpdGUgaXMgY2FsbGVkLlxuICB0aGlzLndyaXRlbGVuID0gMDtcblxuICB0aGlzLmJ1ZmZlcmVkUmVxdWVzdCA9IG51bGw7XG4gIHRoaXMubGFzdEJ1ZmZlcmVkUmVxdWVzdCA9IG51bGw7XG5cbiAgLy8gbnVtYmVyIG9mIHBlbmRpbmcgdXNlci1zdXBwbGllZCB3cml0ZSBjYWxsYmFja3NcbiAgLy8gdGhpcyBtdXN0IGJlIDAgYmVmb3JlICdmaW5pc2gnIGNhbiBiZSBlbWl0dGVkXG4gIHRoaXMucGVuZGluZ2NiID0gMDtcblxuICAvLyBlbWl0IHByZWZpbmlzaCBpZiB0aGUgb25seSB0aGluZyB3ZSdyZSB3YWl0aW5nIGZvciBpcyBfd3JpdGUgY2JzXG4gIC8vIFRoaXMgaXMgcmVsZXZhbnQgZm9yIHN5bmNocm9ub3VzIFRyYW5zZm9ybSBzdHJlYW1zXG4gIHRoaXMucHJlZmluaXNoZWQgPSBmYWxzZTtcblxuICAvLyBUcnVlIGlmIHRoZSBlcnJvciB3YXMgYWxyZWFkeSBlbWl0dGVkIGFuZCBzaG91bGQgbm90IGJlIHRocm93biBhZ2FpblxuICB0aGlzLmVycm9yRW1pdHRlZCA9IGZhbHNlO1xuXG4gIC8vIGNvdW50IGJ1ZmZlcmVkIHJlcXVlc3RzXG4gIHRoaXMuYnVmZmVyZWRSZXF1ZXN0Q291bnQgPSAwO1xuXG4gIC8vIGFsbG9jYXRlIHRoZSBmaXJzdCBDb3JrZWRSZXF1ZXN0LCB0aGVyZSBpcyBhbHdheXNcbiAgLy8gb25lIGFsbG9jYXRlZCBhbmQgZnJlZSB0byB1c2UsIGFuZCB3ZSBtYWludGFpbiBhdCBtb3N0IHR3b1xuICB0aGlzLmNvcmtlZFJlcXVlc3RzRnJlZSA9IG5ldyBDb3JrZWRSZXF1ZXN0KHRoaXMpO1xufVxuXG5Xcml0YWJsZVN0YXRlLnByb3RvdHlwZS5nZXRCdWZmZXIgPSBmdW5jdGlvbiBnZXRCdWZmZXIoKSB7XG4gIHZhciBjdXJyZW50ID0gdGhpcy5idWZmZXJlZFJlcXVlc3Q7XG4gIHZhciBvdXQgPSBbXTtcbiAgd2hpbGUgKGN1cnJlbnQpIHtcbiAgICBvdXQucHVzaChjdXJyZW50KTtcbiAgICBjdXJyZW50ID0gY3VycmVudC5uZXh0O1xuICB9XG4gIHJldHVybiBvdXQ7XG59O1xuXG4oZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXcml0YWJsZVN0YXRlLnByb3RvdHlwZSwgJ2J1ZmZlcicsIHtcbiAgICAgIGdldDogaW50ZXJuYWxVdGlsLmRlcHJlY2F0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEJ1ZmZlcigpO1xuICAgICAgfSwgJ193cml0YWJsZVN0YXRlLmJ1ZmZlciBpcyBkZXByZWNhdGVkLiBVc2UgX3dyaXRhYmxlU3RhdGUuZ2V0QnVmZmVyICcgKyAnaW5zdGVhZC4nLCAnREVQMDAwMycpXG4gICAgfSk7XG4gIH0gY2F0Y2ggKF8pIHt9XG59KSgpO1xuXG4vLyBUZXN0IF93cml0YWJsZVN0YXRlIGZvciBpbmhlcml0YW5jZSB0byBhY2NvdW50IGZvciBEdXBsZXggc3RyZWFtcyxcbi8vIHdob3NlIHByb3RvdHlwZSBjaGFpbiBvbmx5IHBvaW50cyB0byBSZWFkYWJsZS5cbnZhciByZWFsSGFzSW5zdGFuY2U7XG5pZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuaGFzSW5zdGFuY2UgJiYgdHlwZW9mIEZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdID09PSAnZnVuY3Rpb24nKSB7XG4gIHJlYWxIYXNJbnN0YW5jZSA9IEZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoV3JpdGFibGUsIFN5bWJvbC5oYXNJbnN0YW5jZSwge1xuICAgIHZhbHVlOiBmdW5jdGlvbiAob2JqZWN0KSB7XG4gICAgICBpZiAocmVhbEhhc0luc3RhbmNlLmNhbGwodGhpcywgb2JqZWN0KSkgcmV0dXJuIHRydWU7XG4gICAgICBpZiAodGhpcyAhPT0gV3JpdGFibGUpIHJldHVybiBmYWxzZTtcblxuICAgICAgcmV0dXJuIG9iamVjdCAmJiBvYmplY3QuX3dyaXRhYmxlU3RhdGUgaW5zdGFuY2VvZiBXcml0YWJsZVN0YXRlO1xuICAgIH1cbiAgfSk7XG59IGVsc2Uge1xuICByZWFsSGFzSW5zdGFuY2UgPSBmdW5jdGlvbiAob2JqZWN0KSB7XG4gICAgcmV0dXJuIG9iamVjdCBpbnN0YW5jZW9mIHRoaXM7XG4gIH07XG59XG5cbmZ1bmN0aW9uIFdyaXRhYmxlKG9wdGlvbnMpIHtcbiAgRHVwbGV4ID0gRHVwbGV4IHx8IHJlcXVpcmUoJy4vX3N0cmVhbV9kdXBsZXgnKTtcblxuICAvLyBXcml0YWJsZSBjdG9yIGlzIGFwcGxpZWQgdG8gRHVwbGV4ZXMsIHRvby5cbiAgLy8gYHJlYWxIYXNJbnN0YW5jZWAgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgdXNpbmcgcGxhaW4gYGluc3RhbmNlb2ZgXG4gIC8vIHdvdWxkIHJldHVybiBmYWxzZSwgYXMgbm8gYF93cml0YWJsZVN0YXRlYCBwcm9wZXJ0eSBpcyBhdHRhY2hlZC5cblxuICAvLyBUcnlpbmcgdG8gdXNlIHRoZSBjdXN0b20gYGluc3RhbmNlb2ZgIGZvciBXcml0YWJsZSBoZXJlIHdpbGwgYWxzbyBicmVhayB0aGVcbiAgLy8gTm9kZS5qcyBMYXp5VHJhbnNmb3JtIGltcGxlbWVudGF0aW9uLCB3aGljaCBoYXMgYSBub24tdHJpdmlhbCBnZXR0ZXIgZm9yXG4gIC8vIGBfd3JpdGFibGVTdGF0ZWAgdGhhdCB3b3VsZCBsZWFkIHRvIGluZmluaXRlIHJlY3Vyc2lvbi5cbiAgaWYgKCFyZWFsSGFzSW5zdGFuY2UuY2FsbChXcml0YWJsZSwgdGhpcykgJiYgISh0aGlzIGluc3RhbmNlb2YgRHVwbGV4KSkge1xuICAgIHJldHVybiBuZXcgV3JpdGFibGUob3B0aW9ucyk7XG4gIH1cblxuICB0aGlzLl93cml0YWJsZVN0YXRlID0gbmV3IFdyaXRhYmxlU3RhdGUob3B0aW9ucywgdGhpcyk7XG5cbiAgLy8gbGVnYWN5LlxuICB0aGlzLndyaXRhYmxlID0gdHJ1ZTtcblxuICBpZiAob3B0aW9ucykge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy53cml0ZSA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fd3JpdGUgPSBvcHRpb25zLndyaXRlO1xuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLndyaXRldiA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fd3JpdGV2ID0gb3B0aW9ucy53cml0ZXY7XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuZGVzdHJveSA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fZGVzdHJveSA9IG9wdGlvbnMuZGVzdHJveTtcblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5maW5hbCA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fZmluYWwgPSBvcHRpb25zLmZpbmFsO1xuICB9XG5cbiAgU3RyZWFtLmNhbGwodGhpcyk7XG59XG5cbi8vIE90aGVyd2lzZSBwZW9wbGUgY2FuIHBpcGUgV3JpdGFibGUgc3RyZWFtcywgd2hpY2ggaXMganVzdCB3cm9uZy5cbldyaXRhYmxlLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmVtaXQoJ2Vycm9yJywgbmV3IEVycm9yKCdDYW5ub3QgcGlwZSwgbm90IHJlYWRhYmxlJykpO1xufTtcblxuZnVuY3Rpb24gd3JpdGVBZnRlckVuZChzdHJlYW0sIGNiKSB7XG4gIHZhciBlciA9IG5ldyBFcnJvcignd3JpdGUgYWZ0ZXIgZW5kJyk7XG4gIC8vIFRPRE86IGRlZmVyIGVycm9yIGV2ZW50cyBjb25zaXN0ZW50bHkgZXZlcnl3aGVyZSwgbm90IGp1c3QgdGhlIGNiXG4gIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVyKTtcbiAgcG5hLm5leHRUaWNrKGNiLCBlcik7XG59XG5cbi8vIENoZWNrcyB0aGF0IGEgdXNlci1zdXBwbGllZCBjaHVuayBpcyB2YWxpZCwgZXNwZWNpYWxseSBmb3IgdGhlIHBhcnRpY3VsYXJcbi8vIG1vZGUgdGhlIHN0cmVhbSBpcyBpbi4gQ3VycmVudGx5IHRoaXMgbWVhbnMgdGhhdCBgbnVsbGAgaXMgbmV2ZXIgYWNjZXB0ZWRcbi8vIGFuZCB1bmRlZmluZWQvbm9uLXN0cmluZyB2YWx1ZXMgYXJlIG9ubHkgYWxsb3dlZCBpbiBvYmplY3QgbW9kZS5cbmZ1bmN0aW9uIHZhbGlkQ2h1bmsoc3RyZWFtLCBzdGF0ZSwgY2h1bmssIGNiKSB7XG4gIHZhciB2YWxpZCA9IHRydWU7XG4gIHZhciBlciA9IGZhbHNlO1xuXG4gIGlmIChjaHVuayA9PT0gbnVsbCkge1xuICAgIGVyID0gbmV3IFR5cGVFcnJvcignTWF5IG5vdCB3cml0ZSBudWxsIHZhbHVlcyB0byBzdHJlYW0nKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgY2h1bmsgIT09ICdzdHJpbmcnICYmIGNodW5rICE9PSB1bmRlZmluZWQgJiYgIXN0YXRlLm9iamVjdE1vZGUpIHtcbiAgICBlciA9IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgbm9uLXN0cmluZy9idWZmZXIgY2h1bmsnKTtcbiAgfVxuICBpZiAoZXIpIHtcbiAgICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcik7XG4gICAgcG5hLm5leHRUaWNrKGNiLCBlcik7XG4gICAgdmFsaWQgPSBmYWxzZTtcbiAgfVxuICByZXR1cm4gdmFsaWQ7XG59XG5cbldyaXRhYmxlLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3dyaXRhYmxlU3RhdGU7XG4gIHZhciByZXQgPSBmYWxzZTtcbiAgdmFyIGlzQnVmID0gIXN0YXRlLm9iamVjdE1vZGUgJiYgX2lzVWludDhBcnJheShjaHVuayk7XG5cbiAgaWYgKGlzQnVmICYmICFCdWZmZXIuaXNCdWZmZXIoY2h1bmspKSB7XG4gICAgY2h1bmsgPSBfdWludDhBcnJheVRvQnVmZmVyKGNodW5rKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYiA9IGVuY29kaW5nO1xuICAgIGVuY29kaW5nID0gbnVsbDtcbiAgfVxuXG4gIGlmIChpc0J1ZikgZW5jb2RpbmcgPSAnYnVmZmVyJztlbHNlIGlmICghZW5jb2RpbmcpIGVuY29kaW5nID0gc3RhdGUuZGVmYXVsdEVuY29kaW5nO1xuXG4gIGlmICh0eXBlb2YgY2IgIT09ICdmdW5jdGlvbicpIGNiID0gbm9wO1xuXG4gIGlmIChzdGF0ZS5lbmRlZCkgd3JpdGVBZnRlckVuZCh0aGlzLCBjYik7ZWxzZSBpZiAoaXNCdWYgfHwgdmFsaWRDaHVuayh0aGlzLCBzdGF0ZSwgY2h1bmssIGNiKSkge1xuICAgIHN0YXRlLnBlbmRpbmdjYisrO1xuICAgIHJldCA9IHdyaXRlT3JCdWZmZXIodGhpcywgc3RhdGUsIGlzQnVmLCBjaHVuaywgZW5jb2RpbmcsIGNiKTtcbiAgfVxuXG4gIHJldHVybiByZXQ7XG59O1xuXG5Xcml0YWJsZS5wcm90b3R5cGUuY29yayA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fd3JpdGFibGVTdGF0ZTtcblxuICBzdGF0ZS5jb3JrZWQrKztcbn07XG5cbldyaXRhYmxlLnByb3RvdHlwZS51bmNvcmsgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3dyaXRhYmxlU3RhdGU7XG5cbiAgaWYgKHN0YXRlLmNvcmtlZCkge1xuICAgIHN0YXRlLmNvcmtlZC0tO1xuXG4gICAgaWYgKCFzdGF0ZS53cml0aW5nICYmICFzdGF0ZS5jb3JrZWQgJiYgIXN0YXRlLmJ1ZmZlclByb2Nlc3NpbmcgJiYgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0KSBjbGVhckJ1ZmZlcih0aGlzLCBzdGF0ZSk7XG4gIH1cbn07XG5cbldyaXRhYmxlLnByb3RvdHlwZS5zZXREZWZhdWx0RW5jb2RpbmcgPSBmdW5jdGlvbiBzZXREZWZhdWx0RW5jb2RpbmcoZW5jb2RpbmcpIHtcbiAgLy8gbm9kZTo6UGFyc2VFbmNvZGluZygpIHJlcXVpcmVzIGxvd2VyIGNhc2UuXG4gIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnKSBlbmNvZGluZyA9IGVuY29kaW5nLnRvTG93ZXJDYXNlKCk7XG4gIGlmICghKFsnaGV4JywgJ3V0ZjgnLCAndXRmLTgnLCAnYXNjaWknLCAnYmluYXJ5JywgJ2Jhc2U2NCcsICd1Y3MyJywgJ3Vjcy0yJywgJ3V0ZjE2bGUnLCAndXRmLTE2bGUnLCAncmF3J10uaW5kZXhPZigoZW5jb2RpbmcgKyAnJykudG9Mb3dlckNhc2UoKSkgPiAtMSkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZyk7XG4gIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVmYXVsdEVuY29kaW5nID0gZW5jb2Rpbmc7XG4gIHJldHVybiB0aGlzO1xufTtcblxuZnVuY3Rpb24gZGVjb2RlQ2h1bmsoc3RhdGUsIGNodW5rLCBlbmNvZGluZykge1xuICBpZiAoIXN0YXRlLm9iamVjdE1vZGUgJiYgc3RhdGUuZGVjb2RlU3RyaW5ncyAhPT0gZmFsc2UgJiYgdHlwZW9mIGNodW5rID09PSAnc3RyaW5nJykge1xuICAgIGNodW5rID0gQnVmZmVyLmZyb20oY2h1bmssIGVuY29kaW5nKTtcbiAgfVxuICByZXR1cm4gY2h1bms7XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShXcml0YWJsZS5wcm90b3R5cGUsICd3cml0YWJsZUhpZ2hXYXRlck1hcmsnLCB7XG4gIC8vIG1ha2luZyBpdCBleHBsaWNpdCB0aGlzIHByb3BlcnR5IGlzIG5vdCBlbnVtZXJhYmxlXG4gIC8vIGJlY2F1c2Ugb3RoZXJ3aXNlIHNvbWUgcHJvdG90eXBlIG1hbmlwdWxhdGlvbiBpblxuICAvLyB1c2VybGFuZCB3aWxsIGZhaWxcbiAgZW51bWVyYWJsZTogZmFsc2UsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcms7XG4gIH1cbn0pO1xuXG4vLyBpZiB3ZSdyZSBhbHJlYWR5IHdyaXRpbmcgc29tZXRoaW5nLCB0aGVuIGp1c3QgcHV0IHRoaXNcbi8vIGluIHRoZSBxdWV1ZSwgYW5kIHdhaXQgb3VyIHR1cm4uICBPdGhlcndpc2UsIGNhbGwgX3dyaXRlXG4vLyBJZiB3ZSByZXR1cm4gZmFsc2UsIHRoZW4gd2UgbmVlZCBhIGRyYWluIGV2ZW50LCBzbyBzZXQgdGhhdCBmbGFnLlxuZnVuY3Rpb24gd3JpdGVPckJ1ZmZlcihzdHJlYW0sIHN0YXRlLCBpc0J1ZiwgY2h1bmssIGVuY29kaW5nLCBjYikge1xuICBpZiAoIWlzQnVmKSB7XG4gICAgdmFyIG5ld0NodW5rID0gZGVjb2RlQ2h1bmsoc3RhdGUsIGNodW5rLCBlbmNvZGluZyk7XG4gICAgaWYgKGNodW5rICE9PSBuZXdDaHVuaykge1xuICAgICAgaXNCdWYgPSB0cnVlO1xuICAgICAgZW5jb2RpbmcgPSAnYnVmZmVyJztcbiAgICAgIGNodW5rID0gbmV3Q2h1bms7XG4gICAgfVxuICB9XG4gIHZhciBsZW4gPSBzdGF0ZS5vYmplY3RNb2RlID8gMSA6IGNodW5rLmxlbmd0aDtcblxuICBzdGF0ZS5sZW5ndGggKz0gbGVuO1xuXG4gIHZhciByZXQgPSBzdGF0ZS5sZW5ndGggPCBzdGF0ZS5oaWdoV2F0ZXJNYXJrO1xuICAvLyB3ZSBtdXN0IGVuc3VyZSB0aGF0IHByZXZpb3VzIG5lZWREcmFpbiB3aWxsIG5vdCBiZSByZXNldCB0byBmYWxzZS5cbiAgaWYgKCFyZXQpIHN0YXRlLm5lZWREcmFpbiA9IHRydWU7XG5cbiAgaWYgKHN0YXRlLndyaXRpbmcgfHwgc3RhdGUuY29ya2VkKSB7XG4gICAgdmFyIGxhc3QgPSBzdGF0ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0O1xuICAgIHN0YXRlLmxhc3RCdWZmZXJlZFJlcXVlc3QgPSB7XG4gICAgICBjaHVuazogY2h1bmssXG4gICAgICBlbmNvZGluZzogZW5jb2RpbmcsXG4gICAgICBpc0J1ZjogaXNCdWYsXG4gICAgICBjYWxsYmFjazogY2IsXG4gICAgICBuZXh0OiBudWxsXG4gICAgfTtcbiAgICBpZiAobGFzdCkge1xuICAgICAgbGFzdC5uZXh0ID0gc3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0ID0gc3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdDtcbiAgICB9XG4gICAgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0Q291bnQgKz0gMTtcbiAgfSBlbHNlIHtcbiAgICBkb1dyaXRlKHN0cmVhbSwgc3RhdGUsIGZhbHNlLCBsZW4sIGNodW5rLCBlbmNvZGluZywgY2IpO1xuICB9XG5cbiAgcmV0dXJuIHJldDtcbn1cblxuZnVuY3Rpb24gZG9Xcml0ZShzdHJlYW0sIHN0YXRlLCB3cml0ZXYsIGxlbiwgY2h1bmssIGVuY29kaW5nLCBjYikge1xuICBzdGF0ZS53cml0ZWxlbiA9IGxlbjtcbiAgc3RhdGUud3JpdGVjYiA9IGNiO1xuICBzdGF0ZS53cml0aW5nID0gdHJ1ZTtcbiAgc3RhdGUuc3luYyA9IHRydWU7XG4gIGlmICh3cml0ZXYpIHN0cmVhbS5fd3JpdGV2KGNodW5rLCBzdGF0ZS5vbndyaXRlKTtlbHNlIHN0cmVhbS5fd3JpdGUoY2h1bmssIGVuY29kaW5nLCBzdGF0ZS5vbndyaXRlKTtcbiAgc3RhdGUuc3luYyA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBvbndyaXRlRXJyb3Ioc3RyZWFtLCBzdGF0ZSwgc3luYywgZXIsIGNiKSB7XG4gIC0tc3RhdGUucGVuZGluZ2NiO1xuXG4gIGlmIChzeW5jKSB7XG4gICAgLy8gZGVmZXIgdGhlIGNhbGxiYWNrIGlmIHdlIGFyZSBiZWluZyBjYWxsZWQgc3luY2hyb25vdXNseVxuICAgIC8vIHRvIGF2b2lkIHBpbGluZyB1cCB0aGluZ3Mgb24gdGhlIHN0YWNrXG4gICAgcG5hLm5leHRUaWNrKGNiLCBlcik7XG4gICAgLy8gdGhpcyBjYW4gZW1pdCBmaW5pc2gsIGFuZCBpdCB3aWxsIGFsd2F5cyBoYXBwZW5cbiAgICAvLyBhZnRlciBlcnJvclxuICAgIHBuYS5uZXh0VGljayhmaW5pc2hNYXliZSwgc3RyZWFtLCBzdGF0ZSk7XG4gICAgc3RyZWFtLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZCA9IHRydWU7XG4gICAgc3RyZWFtLmVtaXQoJ2Vycm9yJywgZXIpO1xuICB9IGVsc2Uge1xuICAgIC8vIHRoZSBjYWxsZXIgZXhwZWN0IHRoaXMgdG8gaGFwcGVuIGJlZm9yZSBpZlxuICAgIC8vIGl0IGlzIGFzeW5jXG4gICAgY2IoZXIpO1xuICAgIHN0cmVhbS5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQgPSB0cnVlO1xuICAgIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVyKTtcbiAgICAvLyB0aGlzIGNhbiBlbWl0IGZpbmlzaCwgYnV0IGZpbmlzaCBtdXN0XG4gICAgLy8gYWx3YXlzIGZvbGxvdyBlcnJvclxuICAgIGZpbmlzaE1heWJlKHN0cmVhbSwgc3RhdGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG9ud3JpdGVTdGF0ZVVwZGF0ZShzdGF0ZSkge1xuICBzdGF0ZS53cml0aW5nID0gZmFsc2U7XG4gIHN0YXRlLndyaXRlY2IgPSBudWxsO1xuICBzdGF0ZS5sZW5ndGggLT0gc3RhdGUud3JpdGVsZW47XG4gIHN0YXRlLndyaXRlbGVuID0gMDtcbn1cblxuZnVuY3Rpb24gb253cml0ZShzdHJlYW0sIGVyKSB7XG4gIHZhciBzdGF0ZSA9IHN0cmVhbS5fd3JpdGFibGVTdGF0ZTtcbiAgdmFyIHN5bmMgPSBzdGF0ZS5zeW5jO1xuICB2YXIgY2IgPSBzdGF0ZS53cml0ZWNiO1xuXG4gIG9ud3JpdGVTdGF0ZVVwZGF0ZShzdGF0ZSk7XG5cbiAgaWYgKGVyKSBvbndyaXRlRXJyb3Ioc3RyZWFtLCBzdGF0ZSwgc3luYywgZXIsIGNiKTtlbHNlIHtcbiAgICAvLyBDaGVjayBpZiB3ZSdyZSBhY3R1YWxseSByZWFkeSB0byBmaW5pc2gsIGJ1dCBkb24ndCBlbWl0IHlldFxuICAgIHZhciBmaW5pc2hlZCA9IG5lZWRGaW5pc2goc3RhdGUpO1xuXG4gICAgaWYgKCFmaW5pc2hlZCAmJiAhc3RhdGUuY29ya2VkICYmICFzdGF0ZS5idWZmZXJQcm9jZXNzaW5nICYmIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdCkge1xuICAgICAgY2xlYXJCdWZmZXIoc3RyZWFtLCBzdGF0ZSk7XG4gICAgfVxuXG4gICAgaWYgKHN5bmMpIHtcbiAgICAgIC8qPHJlcGxhY2VtZW50PiovXG4gICAgICBhc3luY1dyaXRlKGFmdGVyV3JpdGUsIHN0cmVhbSwgc3RhdGUsIGZpbmlzaGVkLCBjYik7XG4gICAgICAvKjwvcmVwbGFjZW1lbnQ+Ki9cbiAgICB9IGVsc2Uge1xuICAgICAgYWZ0ZXJXcml0ZShzdHJlYW0sIHN0YXRlLCBmaW5pc2hlZCwgY2IpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhZnRlcldyaXRlKHN0cmVhbSwgc3RhdGUsIGZpbmlzaGVkLCBjYikge1xuICBpZiAoIWZpbmlzaGVkKSBvbndyaXRlRHJhaW4oc3RyZWFtLCBzdGF0ZSk7XG4gIHN0YXRlLnBlbmRpbmdjYi0tO1xuICBjYigpO1xuICBmaW5pc2hNYXliZShzdHJlYW0sIHN0YXRlKTtcbn1cblxuLy8gTXVzdCBmb3JjZSBjYWxsYmFjayB0byBiZSBjYWxsZWQgb24gbmV4dFRpY2ssIHNvIHRoYXQgd2UgZG9uJ3Rcbi8vIGVtaXQgJ2RyYWluJyBiZWZvcmUgdGhlIHdyaXRlKCkgY29uc3VtZXIgZ2V0cyB0aGUgJ2ZhbHNlJyByZXR1cm5cbi8vIHZhbHVlLCBhbmQgaGFzIGEgY2hhbmNlIHRvIGF0dGFjaCBhICdkcmFpbicgbGlzdGVuZXIuXG5mdW5jdGlvbiBvbndyaXRlRHJhaW4oc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoc3RhdGUubGVuZ3RoID09PSAwICYmIHN0YXRlLm5lZWREcmFpbikge1xuICAgIHN0YXRlLm5lZWREcmFpbiA9IGZhbHNlO1xuICAgIHN0cmVhbS5lbWl0KCdkcmFpbicpO1xuICB9XG59XG5cbi8vIGlmIHRoZXJlJ3Mgc29tZXRoaW5nIGluIHRoZSBidWZmZXIgd2FpdGluZywgdGhlbiBwcm9jZXNzIGl0XG5mdW5jdGlvbiBjbGVhckJ1ZmZlcihzdHJlYW0sIHN0YXRlKSB7XG4gIHN0YXRlLmJ1ZmZlclByb2Nlc3NpbmcgPSB0cnVlO1xuICB2YXIgZW50cnkgPSBzdGF0ZS5idWZmZXJlZFJlcXVlc3Q7XG5cbiAgaWYgKHN0cmVhbS5fd3JpdGV2ICYmIGVudHJ5ICYmIGVudHJ5Lm5leHQpIHtcbiAgICAvLyBGYXN0IGNhc2UsIHdyaXRlIGV2ZXJ5dGhpbmcgdXNpbmcgX3dyaXRldigpXG4gICAgdmFyIGwgPSBzdGF0ZS5idWZmZXJlZFJlcXVlc3RDb3VudDtcbiAgICB2YXIgYnVmZmVyID0gbmV3IEFycmF5KGwpO1xuICAgIHZhciBob2xkZXIgPSBzdGF0ZS5jb3JrZWRSZXF1ZXN0c0ZyZWU7XG4gICAgaG9sZGVyLmVudHJ5ID0gZW50cnk7XG5cbiAgICB2YXIgY291bnQgPSAwO1xuICAgIHZhciBhbGxCdWZmZXJzID0gdHJ1ZTtcbiAgICB3aGlsZSAoZW50cnkpIHtcbiAgICAgIGJ1ZmZlcltjb3VudF0gPSBlbnRyeTtcbiAgICAgIGlmICghZW50cnkuaXNCdWYpIGFsbEJ1ZmZlcnMgPSBmYWxzZTtcbiAgICAgIGVudHJ5ID0gZW50cnkubmV4dDtcbiAgICAgIGNvdW50ICs9IDE7XG4gICAgfVxuICAgIGJ1ZmZlci5hbGxCdWZmZXJzID0gYWxsQnVmZmVycztcblxuICAgIGRvV3JpdGUoc3RyZWFtLCBzdGF0ZSwgdHJ1ZSwgc3RhdGUubGVuZ3RoLCBidWZmZXIsICcnLCBob2xkZXIuZmluaXNoKTtcblxuICAgIC8vIGRvV3JpdGUgaXMgYWxtb3N0IGFsd2F5cyBhc3luYywgZGVmZXIgdGhlc2UgdG8gc2F2ZSBhIGJpdCBvZiB0aW1lXG4gICAgLy8gYXMgdGhlIGhvdCBwYXRoIGVuZHMgd2l0aCBkb1dyaXRlXG4gICAgc3RhdGUucGVuZGluZ2NiKys7XG4gICAgc3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdCA9IG51bGw7XG4gICAgaWYgKGhvbGRlci5uZXh0KSB7XG4gICAgICBzdGF0ZS5jb3JrZWRSZXF1ZXN0c0ZyZWUgPSBob2xkZXIubmV4dDtcbiAgICAgIGhvbGRlci5uZXh0ID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUuY29ya2VkUmVxdWVzdHNGcmVlID0gbmV3IENvcmtlZFJlcXVlc3Qoc3RhdGUpO1xuICAgIH1cbiAgICBzdGF0ZS5idWZmZXJlZFJlcXVlc3RDb3VudCA9IDA7XG4gIH0gZWxzZSB7XG4gICAgLy8gU2xvdyBjYXNlLCB3cml0ZSBjaHVua3Mgb25lLWJ5LW9uZVxuICAgIHdoaWxlIChlbnRyeSkge1xuICAgICAgdmFyIGNodW5rID0gZW50cnkuY2h1bms7XG4gICAgICB2YXIgZW5jb2RpbmcgPSBlbnRyeS5lbmNvZGluZztcbiAgICAgIHZhciBjYiA9IGVudHJ5LmNhbGxiYWNrO1xuICAgICAgdmFyIGxlbiA9IHN0YXRlLm9iamVjdE1vZGUgPyAxIDogY2h1bmsubGVuZ3RoO1xuXG4gICAgICBkb1dyaXRlKHN0cmVhbSwgc3RhdGUsIGZhbHNlLCBsZW4sIGNodW5rLCBlbmNvZGluZywgY2IpO1xuICAgICAgZW50cnkgPSBlbnRyeS5uZXh0O1xuICAgICAgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0Q291bnQtLTtcbiAgICAgIC8vIGlmIHdlIGRpZG4ndCBjYWxsIHRoZSBvbndyaXRlIGltbWVkaWF0ZWx5LCB0aGVuXG4gICAgICAvLyBpdCBtZWFucyB0aGF0IHdlIG5lZWQgdG8gd2FpdCB1bnRpbCBpdCBkb2VzLlxuICAgICAgLy8gYWxzbywgdGhhdCBtZWFucyB0aGF0IHRoZSBjaHVuayBhbmQgY2IgYXJlIGN1cnJlbnRseVxuICAgICAgLy8gYmVpbmcgcHJvY2Vzc2VkLCBzbyBtb3ZlIHRoZSBidWZmZXIgY291bnRlciBwYXN0IHRoZW0uXG4gICAgICBpZiAoc3RhdGUud3JpdGluZykge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZW50cnkgPT09IG51bGwpIHN0YXRlLmxhc3RCdWZmZXJlZFJlcXVlc3QgPSBudWxsO1xuICB9XG5cbiAgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0ID0gZW50cnk7XG4gIHN0YXRlLmJ1ZmZlclByb2Nlc3NpbmcgPSBmYWxzZTtcbn1cblxuV3JpdGFibGUucHJvdG90eXBlLl93cml0ZSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIGNiKG5ldyBFcnJvcignX3dyaXRlKCkgaXMgbm90IGltcGxlbWVudGVkJykpO1xufTtcblxuV3JpdGFibGUucHJvdG90eXBlLl93cml0ZXYgPSBudWxsO1xuXG5Xcml0YWJsZS5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fd3JpdGFibGVTdGF0ZTtcblxuICBpZiAodHlwZW9mIGNodW5rID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2IgPSBjaHVuaztcbiAgICBjaHVuayA9IG51bGw7XG4gICAgZW5jb2RpbmcgPSBudWxsO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNiID0gZW5jb2Rpbmc7XG4gICAgZW5jb2RpbmcgPSBudWxsO1xuICB9XG5cbiAgaWYgKGNodW5rICE9PSBudWxsICYmIGNodW5rICE9PSB1bmRlZmluZWQpIHRoaXMud3JpdGUoY2h1bmssIGVuY29kaW5nKTtcblxuICAvLyAuZW5kKCkgZnVsbHkgdW5jb3Jrc1xuICBpZiAoc3RhdGUuY29ya2VkKSB7XG4gICAgc3RhdGUuY29ya2VkID0gMTtcbiAgICB0aGlzLnVuY29yaygpO1xuICB9XG5cbiAgLy8gaWdub3JlIHVubmVjZXNzYXJ5IGVuZCgpIGNhbGxzLlxuICBpZiAoIXN0YXRlLmVuZGluZykgZW5kV3JpdGFibGUodGhpcywgc3RhdGUsIGNiKTtcbn07XG5cbmZ1bmN0aW9uIG5lZWRGaW5pc2goc3RhdGUpIHtcbiAgcmV0dXJuIHN0YXRlLmVuZGluZyAmJiBzdGF0ZS5sZW5ndGggPT09IDAgJiYgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0ID09PSBudWxsICYmICFzdGF0ZS5maW5pc2hlZCAmJiAhc3RhdGUud3JpdGluZztcbn1cbmZ1bmN0aW9uIGNhbGxGaW5hbChzdHJlYW0sIHN0YXRlKSB7XG4gIHN0cmVhbS5fZmluYWwoZnVuY3Rpb24gKGVycikge1xuICAgIHN0YXRlLnBlbmRpbmdjYi0tO1xuICAgIGlmIChlcnIpIHtcbiAgICAgIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVycik7XG4gICAgfVxuICAgIHN0YXRlLnByZWZpbmlzaGVkID0gdHJ1ZTtcbiAgICBzdHJlYW0uZW1pdCgncHJlZmluaXNoJyk7XG4gICAgZmluaXNoTWF5YmUoc3RyZWFtLCBzdGF0ZSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gcHJlZmluaXNoKHN0cmVhbSwgc3RhdGUpIHtcbiAgaWYgKCFzdGF0ZS5wcmVmaW5pc2hlZCAmJiAhc3RhdGUuZmluYWxDYWxsZWQpIHtcbiAgICBpZiAodHlwZW9mIHN0cmVhbS5fZmluYWwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHN0YXRlLnBlbmRpbmdjYisrO1xuICAgICAgc3RhdGUuZmluYWxDYWxsZWQgPSB0cnVlO1xuICAgICAgcG5hLm5leHRUaWNrKGNhbGxGaW5hbCwgc3RyZWFtLCBzdGF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLnByZWZpbmlzaGVkID0gdHJ1ZTtcbiAgICAgIHN0cmVhbS5lbWl0KCdwcmVmaW5pc2gnKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluaXNoTWF5YmUoc3RyZWFtLCBzdGF0ZSkge1xuICB2YXIgbmVlZCA9IG5lZWRGaW5pc2goc3RhdGUpO1xuICBpZiAobmVlZCkge1xuICAgIHByZWZpbmlzaChzdHJlYW0sIHN0YXRlKTtcbiAgICBpZiAoc3RhdGUucGVuZGluZ2NiID09PSAwKSB7XG4gICAgICBzdGF0ZS5maW5pc2hlZCA9IHRydWU7XG4gICAgICBzdHJlYW0uZW1pdCgnZmluaXNoJyk7XG4gICAgfVxuICB9XG4gIHJldHVybiBuZWVkO1xufVxuXG5mdW5jdGlvbiBlbmRXcml0YWJsZShzdHJlYW0sIHN0YXRlLCBjYikge1xuICBzdGF0ZS5lbmRpbmcgPSB0cnVlO1xuICBmaW5pc2hNYXliZShzdHJlYW0sIHN0YXRlKTtcbiAgaWYgKGNiKSB7XG4gICAgaWYgKHN0YXRlLmZpbmlzaGVkKSBwbmEubmV4dFRpY2soY2IpO2Vsc2Ugc3RyZWFtLm9uY2UoJ2ZpbmlzaCcsIGNiKTtcbiAgfVxuICBzdGF0ZS5lbmRlZCA9IHRydWU7XG4gIHN0cmVhbS53cml0YWJsZSA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBvbkNvcmtlZEZpbmlzaChjb3JrUmVxLCBzdGF0ZSwgZXJyKSB7XG4gIHZhciBlbnRyeSA9IGNvcmtSZXEuZW50cnk7XG4gIGNvcmtSZXEuZW50cnkgPSBudWxsO1xuICB3aGlsZSAoZW50cnkpIHtcbiAgICB2YXIgY2IgPSBlbnRyeS5jYWxsYmFjaztcbiAgICBzdGF0ZS5wZW5kaW5nY2ItLTtcbiAgICBjYihlcnIpO1xuICAgIGVudHJ5ID0gZW50cnkubmV4dDtcbiAgfVxuXG4gIC8vIHJldXNlIHRoZSBmcmVlIGNvcmtSZXEuXG4gIHN0YXRlLmNvcmtlZFJlcXVlc3RzRnJlZS5uZXh0ID0gY29ya1JlcTtcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFdyaXRhYmxlLnByb3RvdHlwZSwgJ2Rlc3Ryb3llZCcsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMuX3dyaXRhYmxlU3RhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgLy8gd2UgaWdub3JlIHRoZSB2YWx1ZSBpZiB0aGUgc3RyZWFtXG4gICAgLy8gaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkIHlldFxuICAgIGlmICghdGhpcy5fd3JpdGFibGVTdGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHRoZSB1c2VyIGlzIGV4cGxpY2l0bHlcbiAgICAvLyBtYW5hZ2luZyBkZXN0cm95ZWRcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZCA9IHZhbHVlO1xuICB9XG59KTtcblxuV3JpdGFibGUucHJvdG90eXBlLmRlc3Ryb3kgPSBkZXN0cm95SW1wbC5kZXN0cm95O1xuV3JpdGFibGUucHJvdG90eXBlLl91bmRlc3Ryb3kgPSBkZXN0cm95SW1wbC51bmRlc3Ryb3k7XG5Xcml0YWJsZS5wcm90b3R5cGUuX2Rlc3Ryb3kgPSBmdW5jdGlvbiAoZXJyLCBjYikge1xuICB0aGlzLmVuZCgpO1xuICBjYihlcnIpO1xufTsiLAogICAgIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyBhIGR1cGxleCBzdHJlYW0gaXMganVzdCBhIHN0cmVhbSB0aGF0IGlzIGJvdGggcmVhZGFibGUgYW5kIHdyaXRhYmxlLlxuLy8gU2luY2UgSlMgZG9lc24ndCBoYXZlIG11bHRpcGxlIHByb3RvdHlwYWwgaW5oZXJpdGFuY2UsIHRoaXMgY2xhc3Ncbi8vIHByb3RvdHlwYWxseSBpbmhlcml0cyBmcm9tIFJlYWRhYmxlLCBhbmQgdGhlbiBwYXJhc2l0aWNhbGx5IGZyb21cbi8vIFdyaXRhYmxlLlxuXG4ndXNlIHN0cmljdCc7XG5cbi8qPHJlcGxhY2VtZW50PiovXG5cbnZhciBwbmEgPSByZXF1aXJlKCdwcm9jZXNzLW5leHRpY2stYXJncycpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgdmFyIGtleXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgIGtleXMucHVzaChrZXkpO1xuICB9cmV0dXJuIGtleXM7XG59O1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbm1vZHVsZS5leHBvcnRzID0gRHVwbGV4O1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIHV0aWwgPSBPYmplY3QuY3JlYXRlKHJlcXVpcmUoJ2NvcmUtdXRpbC1pcycpKTtcbnV0aWwuaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbnZhciBSZWFkYWJsZSA9IHJlcXVpcmUoJy4vX3N0cmVhbV9yZWFkYWJsZScpO1xudmFyIFdyaXRhYmxlID0gcmVxdWlyZSgnLi9fc3RyZWFtX3dyaXRhYmxlJyk7XG5cbnV0aWwuaW5oZXJpdHMoRHVwbGV4LCBSZWFkYWJsZSk7XG5cbntcbiAgLy8gYXZvaWQgc2NvcGUgY3JlZXAsIHRoZSBrZXlzIGFycmF5IGNhbiB0aGVuIGJlIGNvbGxlY3RlZFxuICB2YXIga2V5cyA9IG9iamVjdEtleXMoV3JpdGFibGUucHJvdG90eXBlKTtcbiAgZm9yICh2YXIgdiA9IDA7IHYgPCBrZXlzLmxlbmd0aDsgdisrKSB7XG4gICAgdmFyIG1ldGhvZCA9IGtleXNbdl07XG4gICAgaWYgKCFEdXBsZXgucHJvdG90eXBlW21ldGhvZF0pIER1cGxleC5wcm90b3R5cGVbbWV0aG9kXSA9IFdyaXRhYmxlLnByb3RvdHlwZVttZXRob2RdO1xuICB9XG59XG5cbmZ1bmN0aW9uIER1cGxleChvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBEdXBsZXgpKSByZXR1cm4gbmV3IER1cGxleChvcHRpb25zKTtcblxuICBSZWFkYWJsZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuICBXcml0YWJsZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMucmVhZGFibGUgPT09IGZhbHNlKSB0aGlzLnJlYWRhYmxlID0gZmFsc2U7XG5cbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy53cml0YWJsZSA9PT0gZmFsc2UpIHRoaXMud3JpdGFibGUgPSBmYWxzZTtcblxuICB0aGlzLmFsbG93SGFsZk9wZW4gPSB0cnVlO1xuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmFsbG93SGFsZk9wZW4gPT09IGZhbHNlKSB0aGlzLmFsbG93SGFsZk9wZW4gPSBmYWxzZTtcblxuICB0aGlzLm9uY2UoJ2VuZCcsIG9uZW5kKTtcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KER1cGxleC5wcm90b3R5cGUsICd3cml0YWJsZUhpZ2hXYXRlck1hcmsnLCB7XG4gIC8vIG1ha2luZyBpdCBleHBsaWNpdCB0aGlzIHByb3BlcnR5IGlzIG5vdCBlbnVtZXJhYmxlXG4gIC8vIGJlY2F1c2Ugb3RoZXJ3aXNlIHNvbWUgcHJvdG90eXBlIG1hbmlwdWxhdGlvbiBpblxuICAvLyB1c2VybGFuZCB3aWxsIGZhaWxcbiAgZW51bWVyYWJsZTogZmFsc2UsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcms7XG4gIH1cbn0pO1xuXG4vLyB0aGUgbm8taGFsZi1vcGVuIGVuZm9yY2VyXG5mdW5jdGlvbiBvbmVuZCgpIHtcbiAgLy8gaWYgd2UgYWxsb3cgaGFsZi1vcGVuIHN0YXRlLCBvciBpZiB0aGUgd3JpdGFibGUgc2lkZSBlbmRlZCxcbiAgLy8gdGhlbiB3ZSdyZSBvay5cbiAgaWYgKHRoaXMuYWxsb3dIYWxmT3BlbiB8fCB0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkKSByZXR1cm47XG5cbiAgLy8gbm8gbW9yZSBkYXRhIGNhbiBiZSB3cml0dGVuLlxuICAvLyBCdXQgYWxsb3cgbW9yZSB3cml0ZXMgdG8gaGFwcGVuIGluIHRoaXMgdGljay5cbiAgcG5hLm5leHRUaWNrKG9uRW5kTlQsIHRoaXMpO1xufVxuXG5mdW5jdGlvbiBvbkVuZE5UKHNlbGYpIHtcbiAgc2VsZi5lbmQoKTtcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KER1cGxleC5wcm90b3R5cGUsICdkZXN0cm95ZWQnLCB7XG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlID09PSB1bmRlZmluZWQgfHwgdGhpcy5fd3JpdGFibGVTdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCAmJiB0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZDtcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAvLyB3ZSBpZ25vcmUgdGhlIHZhbHVlIGlmIHRoZSBzdHJlYW1cbiAgICAvLyBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgeWV0XG4gICAgaWYgKHRoaXMuX3JlYWRhYmxlU3RhdGUgPT09IHVuZGVmaW5lZCB8fCB0aGlzLl93cml0YWJsZVN0YXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB0aGUgdXNlciBpcyBleHBsaWNpdGx5XG4gICAgLy8gbWFuYWdpbmcgZGVzdHJveWVkXG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQgPSB2YWx1ZTtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZCA9IHZhbHVlO1xuICB9XG59KTtcblxuRHVwbGV4LnByb3RvdHlwZS5fZGVzdHJveSA9IGZ1bmN0aW9uIChlcnIsIGNiKSB7XG4gIHRoaXMucHVzaChudWxsKTtcbiAgdGhpcy5lbmQoKTtcblxuICBwbmEubmV4dFRpY2soY2IsIGVycik7XG59OyIsCiAgICAiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cblxudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ3NhZmUtYnVmZmVyJykuQnVmZmVyO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbnZhciBpc0VuY29kaW5nID0gQnVmZmVyLmlzRW5jb2RpbmcgfHwgZnVuY3Rpb24gKGVuY29kaW5nKSB7XG4gIGVuY29kaW5nID0gJycgKyBlbmNvZGluZztcbiAgc3dpdGNoIChlbmNvZGluZyAmJiBlbmNvZGluZy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgY2FzZSAnaGV4JzpjYXNlICd1dGY4JzpjYXNlICd1dGYtOCc6Y2FzZSAnYXNjaWknOmNhc2UgJ2JpbmFyeSc6Y2FzZSAnYmFzZTY0JzpjYXNlICd1Y3MyJzpjYXNlICd1Y3MtMic6Y2FzZSAndXRmMTZsZSc6Y2FzZSAndXRmLTE2bGUnOmNhc2UgJ3Jhdyc6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG5mdW5jdGlvbiBfbm9ybWFsaXplRW5jb2RpbmcoZW5jKSB7XG4gIGlmICghZW5jKSByZXR1cm4gJ3V0ZjgnO1xuICB2YXIgcmV0cmllZDtcbiAgd2hpbGUgKHRydWUpIHtcbiAgICBzd2l0Y2ggKGVuYykge1xuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiAndXRmOCc7XG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gJ3V0ZjE2bGUnO1xuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiAnbGF0aW4xJztcbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gZW5jO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKHJldHJpZWQpIHJldHVybjsgLy8gdW5kZWZpbmVkXG4gICAgICAgIGVuYyA9ICgnJyArIGVuYykudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgcmV0cmllZCA9IHRydWU7XG4gICAgfVxuICB9XG59O1xuXG4vLyBEbyBub3QgY2FjaGUgYEJ1ZmZlci5pc0VuY29kaW5nYCB3aGVuIGNoZWNraW5nIGVuY29kaW5nIG5hbWVzIGFzIHNvbWVcbi8vIG1vZHVsZXMgbW9ua2V5LXBhdGNoIGl0IHRvIHN1cHBvcnQgYWRkaXRpb25hbCBlbmNvZGluZ3NcbmZ1bmN0aW9uIG5vcm1hbGl6ZUVuY29kaW5nKGVuYykge1xuICB2YXIgbmVuYyA9IF9ub3JtYWxpemVFbmNvZGluZyhlbmMpO1xuICBpZiAodHlwZW9mIG5lbmMgIT09ICdzdHJpbmcnICYmIChCdWZmZXIuaXNFbmNvZGluZyA9PT0gaXNFbmNvZGluZyB8fCAhaXNFbmNvZGluZyhlbmMpKSkgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jKTtcbiAgcmV0dXJuIG5lbmMgfHwgZW5jO1xufVxuXG4vLyBTdHJpbmdEZWNvZGVyIHByb3ZpZGVzIGFuIGludGVyZmFjZSBmb3IgZWZmaWNpZW50bHkgc3BsaXR0aW5nIGEgc2VyaWVzIG9mXG4vLyBidWZmZXJzIGludG8gYSBzZXJpZXMgb2YgSlMgc3RyaW5ncyB3aXRob3V0IGJyZWFraW5nIGFwYXJ0IG11bHRpLWJ5dGVcbi8vIGNoYXJhY3RlcnMuXG5leHBvcnRzLlN0cmluZ0RlY29kZXIgPSBTdHJpbmdEZWNvZGVyO1xuZnVuY3Rpb24gU3RyaW5nRGVjb2RlcihlbmNvZGluZykge1xuICB0aGlzLmVuY29kaW5nID0gbm9ybWFsaXplRW5jb2RpbmcoZW5jb2RpbmcpO1xuICB2YXIgbmI7XG4gIHN3aXRjaCAodGhpcy5lbmNvZGluZykge1xuICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgdGhpcy50ZXh0ID0gdXRmMTZUZXh0O1xuICAgICAgdGhpcy5lbmQgPSB1dGYxNkVuZDtcbiAgICAgIG5iID0gNDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgdGhpcy5maWxsTGFzdCA9IHV0ZjhGaWxsTGFzdDtcbiAgICAgIG5iID0gNDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICB0aGlzLnRleHQgPSBiYXNlNjRUZXh0O1xuICAgICAgdGhpcy5lbmQgPSBiYXNlNjRFbmQ7XG4gICAgICBuYiA9IDM7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhpcy53cml0ZSA9IHNpbXBsZVdyaXRlO1xuICAgICAgdGhpcy5lbmQgPSBzaW1wbGVFbmQ7XG4gICAgICByZXR1cm47XG4gIH1cbiAgdGhpcy5sYXN0TmVlZCA9IDA7XG4gIHRoaXMubGFzdFRvdGFsID0gMDtcbiAgdGhpcy5sYXN0Q2hhciA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShuYik7XG59XG5cblN0cmluZ0RlY29kZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKGJ1Zikge1xuICBpZiAoYnVmLmxlbmd0aCA9PT0gMCkgcmV0dXJuICcnO1xuICB2YXIgcjtcbiAgdmFyIGk7XG4gIGlmICh0aGlzLmxhc3ROZWVkKSB7XG4gICAgciA9IHRoaXMuZmlsbExhc3QoYnVmKTtcbiAgICBpZiAociA9PT0gdW5kZWZpbmVkKSByZXR1cm4gJyc7XG4gICAgaSA9IHRoaXMubGFzdE5lZWQ7XG4gICAgdGhpcy5sYXN0TmVlZCA9IDA7XG4gIH0gZWxzZSB7XG4gICAgaSA9IDA7XG4gIH1cbiAgaWYgKGkgPCBidWYubGVuZ3RoKSByZXR1cm4gciA/IHIgKyB0aGlzLnRleHQoYnVmLCBpKSA6IHRoaXMudGV4dChidWYsIGkpO1xuICByZXR1cm4gciB8fCAnJztcbn07XG5cblN0cmluZ0RlY29kZXIucHJvdG90eXBlLmVuZCA9IHV0ZjhFbmQ7XG5cbi8vIFJldHVybnMgb25seSBjb21wbGV0ZSBjaGFyYWN0ZXJzIGluIGEgQnVmZmVyXG5TdHJpbmdEZWNvZGVyLnByb3RvdHlwZS50ZXh0ID0gdXRmOFRleHQ7XG5cbi8vIEF0dGVtcHRzIHRvIGNvbXBsZXRlIGEgcGFydGlhbCBub24tVVRGLTggY2hhcmFjdGVyIHVzaW5nIGJ5dGVzIGZyb20gYSBCdWZmZXJcblN0cmluZ0RlY29kZXIucHJvdG90eXBlLmZpbGxMYXN0ID0gZnVuY3Rpb24gKGJ1Zikge1xuICBpZiAodGhpcy5sYXN0TmVlZCA8PSBidWYubGVuZ3RoKSB7XG4gICAgYnVmLmNvcHkodGhpcy5sYXN0Q2hhciwgdGhpcy5sYXN0VG90YWwgLSB0aGlzLmxhc3ROZWVkLCAwLCB0aGlzLmxhc3ROZWVkKTtcbiAgICByZXR1cm4gdGhpcy5sYXN0Q2hhci50b1N0cmluZyh0aGlzLmVuY29kaW5nLCAwLCB0aGlzLmxhc3RUb3RhbCk7XG4gIH1cbiAgYnVmLmNvcHkodGhpcy5sYXN0Q2hhciwgdGhpcy5sYXN0VG90YWwgLSB0aGlzLmxhc3ROZWVkLCAwLCBidWYubGVuZ3RoKTtcbiAgdGhpcy5sYXN0TmVlZCAtPSBidWYubGVuZ3RoO1xufTtcblxuLy8gQ2hlY2tzIHRoZSB0eXBlIG9mIGEgVVRGLTggYnl0ZSwgd2hldGhlciBpdCdzIEFTQ0lJLCBhIGxlYWRpbmcgYnl0ZSwgb3IgYVxuLy8gY29udGludWF0aW9uIGJ5dGUuIElmIGFuIGludmFsaWQgYnl0ZSBpcyBkZXRlY3RlZCwgLTIgaXMgcmV0dXJuZWQuXG5mdW5jdGlvbiB1dGY4Q2hlY2tCeXRlKGJ5dGUpIHtcbiAgaWYgKGJ5dGUgPD0gMHg3RikgcmV0dXJuIDA7ZWxzZSBpZiAoYnl0ZSA+PiA1ID09PSAweDA2KSByZXR1cm4gMjtlbHNlIGlmIChieXRlID4+IDQgPT09IDB4MEUpIHJldHVybiAzO2Vsc2UgaWYgKGJ5dGUgPj4gMyA9PT0gMHgxRSkgcmV0dXJuIDQ7XG4gIHJldHVybiBieXRlID4+IDYgPT09IDB4MDIgPyAtMSA6IC0yO1xufVxuXG4vLyBDaGVja3MgYXQgbW9zdCAzIGJ5dGVzIGF0IHRoZSBlbmQgb2YgYSBCdWZmZXIgaW4gb3JkZXIgdG8gZGV0ZWN0IGFuXG4vLyBpbmNvbXBsZXRlIG11bHRpLWJ5dGUgVVRGLTggY2hhcmFjdGVyLiBUaGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzICgyLCAzLCBvciA0KVxuLy8gbmVlZGVkIHRvIGNvbXBsZXRlIHRoZSBVVEYtOCBjaGFyYWN0ZXIgKGlmIGFwcGxpY2FibGUpIGFyZSByZXR1cm5lZC5cbmZ1bmN0aW9uIHV0ZjhDaGVja0luY29tcGxldGUoc2VsZiwgYnVmLCBpKSB7XG4gIHZhciBqID0gYnVmLmxlbmd0aCAtIDE7XG4gIGlmIChqIDwgaSkgcmV0dXJuIDA7XG4gIHZhciBuYiA9IHV0ZjhDaGVja0J5dGUoYnVmW2pdKTtcbiAgaWYgKG5iID49IDApIHtcbiAgICBpZiAobmIgPiAwKSBzZWxmLmxhc3ROZWVkID0gbmIgLSAxO1xuICAgIHJldHVybiBuYjtcbiAgfVxuICBpZiAoLS1qIDwgaSB8fCBuYiA9PT0gLTIpIHJldHVybiAwO1xuICBuYiA9IHV0ZjhDaGVja0J5dGUoYnVmW2pdKTtcbiAgaWYgKG5iID49IDApIHtcbiAgICBpZiAobmIgPiAwKSBzZWxmLmxhc3ROZWVkID0gbmIgLSAyO1xuICAgIHJldHVybiBuYjtcbiAgfVxuICBpZiAoLS1qIDwgaSB8fCBuYiA9PT0gLTIpIHJldHVybiAwO1xuICBuYiA9IHV0ZjhDaGVja0J5dGUoYnVmW2pdKTtcbiAgaWYgKG5iID49IDApIHtcbiAgICBpZiAobmIgPiAwKSB7XG4gICAgICBpZiAobmIgPT09IDIpIG5iID0gMDtlbHNlIHNlbGYubGFzdE5lZWQgPSBuYiAtIDM7XG4gICAgfVxuICAgIHJldHVybiBuYjtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy8gVmFsaWRhdGVzIGFzIG1hbnkgY29udGludWF0aW9uIGJ5dGVzIGZvciBhIG11bHRpLWJ5dGUgVVRGLTggY2hhcmFjdGVyIGFzXG4vLyBuZWVkZWQgb3IgYXJlIGF2YWlsYWJsZS4gSWYgd2Ugc2VlIGEgbm9uLWNvbnRpbnVhdGlvbiBieXRlIHdoZXJlIHdlIGV4cGVjdFxuLy8gb25lLCB3ZSBcInJlcGxhY2VcIiB0aGUgdmFsaWRhdGVkIGNvbnRpbnVhdGlvbiBieXRlcyB3ZSd2ZSBzZWVuIHNvIGZhciB3aXRoXG4vLyBhIHNpbmdsZSBVVEYtOCByZXBsYWNlbWVudCBjaGFyYWN0ZXIgKCdcXHVmZmZkJyksIHRvIG1hdGNoIHY4J3MgVVRGLTggZGVjb2Rpbmdcbi8vIGJlaGF2aW9yLiBUaGUgY29udGludWF0aW9uIGJ5dGUgY2hlY2sgaXMgaW5jbHVkZWQgdGhyZWUgdGltZXMgaW4gdGhlIGNhc2Vcbi8vIHdoZXJlIGFsbCBvZiB0aGUgY29udGludWF0aW9uIGJ5dGVzIGZvciBhIGNoYXJhY3RlciBleGlzdCBpbiB0aGUgc2FtZSBidWZmZXIuXG4vLyBJdCBpcyBhbHNvIGRvbmUgdGhpcyB3YXkgYXMgYSBzbGlnaHQgcGVyZm9ybWFuY2UgaW5jcmVhc2UgaW5zdGVhZCBvZiB1c2luZyBhXG4vLyBsb29wLlxuZnVuY3Rpb24gdXRmOENoZWNrRXh0cmFCeXRlcyhzZWxmLCBidWYsIHApIHtcbiAgaWYgKChidWZbMF0gJiAweEMwKSAhPT0gMHg4MCkge1xuICAgIHNlbGYubGFzdE5lZWQgPSAwO1xuICAgIHJldHVybiAnXFx1ZmZmZCc7XG4gIH1cbiAgaWYgKHNlbGYubGFzdE5lZWQgPiAxICYmIGJ1Zi5sZW5ndGggPiAxKSB7XG4gICAgaWYgKChidWZbMV0gJiAweEMwKSAhPT0gMHg4MCkge1xuICAgICAgc2VsZi5sYXN0TmVlZCA9IDE7XG4gICAgICByZXR1cm4gJ1xcdWZmZmQnO1xuICAgIH1cbiAgICBpZiAoc2VsZi5sYXN0TmVlZCA+IDIgJiYgYnVmLmxlbmd0aCA+IDIpIHtcbiAgICAgIGlmICgoYnVmWzJdICYgMHhDMCkgIT09IDB4ODApIHtcbiAgICAgICAgc2VsZi5sYXN0TmVlZCA9IDI7XG4gICAgICAgIHJldHVybiAnXFx1ZmZmZCc7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIEF0dGVtcHRzIHRvIGNvbXBsZXRlIGEgbXVsdGktYnl0ZSBVVEYtOCBjaGFyYWN0ZXIgdXNpbmcgYnl0ZXMgZnJvbSBhIEJ1ZmZlci5cbmZ1bmN0aW9uIHV0ZjhGaWxsTGFzdChidWYpIHtcbiAgdmFyIHAgPSB0aGlzLmxhc3RUb3RhbCAtIHRoaXMubGFzdE5lZWQ7XG4gIHZhciByID0gdXRmOENoZWNrRXh0cmFCeXRlcyh0aGlzLCBidWYsIHApO1xuICBpZiAociAhPT0gdW5kZWZpbmVkKSByZXR1cm4gcjtcbiAgaWYgKHRoaXMubGFzdE5lZWQgPD0gYnVmLmxlbmd0aCkge1xuICAgIGJ1Zi5jb3B5KHRoaXMubGFzdENoYXIsIHAsIDAsIHRoaXMubGFzdE5lZWQpO1xuICAgIHJldHVybiB0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsIDAsIHRoaXMubGFzdFRvdGFsKTtcbiAgfVxuICBidWYuY29weSh0aGlzLmxhc3RDaGFyLCBwLCAwLCBidWYubGVuZ3RoKTtcbiAgdGhpcy5sYXN0TmVlZCAtPSBidWYubGVuZ3RoO1xufVxuXG4vLyBSZXR1cm5zIGFsbCBjb21wbGV0ZSBVVEYtOCBjaGFyYWN0ZXJzIGluIGEgQnVmZmVyLiBJZiB0aGUgQnVmZmVyIGVuZGVkIG9uIGFcbi8vIHBhcnRpYWwgY2hhcmFjdGVyLCB0aGUgY2hhcmFjdGVyJ3MgYnl0ZXMgYXJlIGJ1ZmZlcmVkIHVudGlsIHRoZSByZXF1aXJlZFxuLy8gbnVtYmVyIG9mIGJ5dGVzIGFyZSBhdmFpbGFibGUuXG5mdW5jdGlvbiB1dGY4VGV4dChidWYsIGkpIHtcbiAgdmFyIHRvdGFsID0gdXRmOENoZWNrSW5jb21wbGV0ZSh0aGlzLCBidWYsIGkpO1xuICBpZiAoIXRoaXMubGFzdE5lZWQpIHJldHVybiBidWYudG9TdHJpbmcoJ3V0ZjgnLCBpKTtcbiAgdGhpcy5sYXN0VG90YWwgPSB0b3RhbDtcbiAgdmFyIGVuZCA9IGJ1Zi5sZW5ndGggLSAodG90YWwgLSB0aGlzLmxhc3ROZWVkKTtcbiAgYnVmLmNvcHkodGhpcy5sYXN0Q2hhciwgMCwgZW5kKTtcbiAgcmV0dXJuIGJ1Zi50b1N0cmluZygndXRmOCcsIGksIGVuZCk7XG59XG5cbi8vIEZvciBVVEYtOCwgYSByZXBsYWNlbWVudCBjaGFyYWN0ZXIgaXMgYWRkZWQgd2hlbiBlbmRpbmcgb24gYSBwYXJ0aWFsXG4vLyBjaGFyYWN0ZXIuXG5mdW5jdGlvbiB1dGY4RW5kKGJ1Zikge1xuICB2YXIgciA9IGJ1ZiAmJiBidWYubGVuZ3RoID8gdGhpcy53cml0ZShidWYpIDogJyc7XG4gIGlmICh0aGlzLmxhc3ROZWVkKSByZXR1cm4gciArICdcXHVmZmZkJztcbiAgcmV0dXJuIHI7XG59XG5cbi8vIFVURi0xNkxFIHR5cGljYWxseSBuZWVkcyB0d28gYnl0ZXMgcGVyIGNoYXJhY3RlciwgYnV0IGV2ZW4gaWYgd2UgaGF2ZSBhbiBldmVuXG4vLyBudW1iZXIgb2YgYnl0ZXMgYXZhaWxhYmxlLCB3ZSBuZWVkIHRvIGNoZWNrIGlmIHdlIGVuZCBvbiBhIGxlYWRpbmcvaGlnaFxuLy8gc3Vycm9nYXRlLiBJbiB0aGF0IGNhc2UsIHdlIG5lZWQgdG8gd2FpdCBmb3IgdGhlIG5leHQgdHdvIGJ5dGVzIGluIG9yZGVyIHRvXG4vLyBkZWNvZGUgdGhlIGxhc3QgY2hhcmFjdGVyIHByb3Blcmx5LlxuZnVuY3Rpb24gdXRmMTZUZXh0KGJ1ZiwgaSkge1xuICBpZiAoKGJ1Zi5sZW5ndGggLSBpKSAlIDIgPT09IDApIHtcbiAgICB2YXIgciA9IGJ1Zi50b1N0cmluZygndXRmMTZsZScsIGkpO1xuICAgIGlmIChyKSB7XG4gICAgICB2YXIgYyA9IHIuY2hhckNvZGVBdChyLmxlbmd0aCAtIDEpO1xuICAgICAgaWYgKGMgPj0gMHhEODAwICYmIGMgPD0gMHhEQkZGKSB7XG4gICAgICAgIHRoaXMubGFzdE5lZWQgPSAyO1xuICAgICAgICB0aGlzLmxhc3RUb3RhbCA9IDQ7XG4gICAgICAgIHRoaXMubGFzdENoYXJbMF0gPSBidWZbYnVmLmxlbmd0aCAtIDJdO1xuICAgICAgICB0aGlzLmxhc3RDaGFyWzFdID0gYnVmW2J1Zi5sZW5ndGggLSAxXTtcbiAgICAgICAgcmV0dXJuIHIuc2xpY2UoMCwgLTEpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcjtcbiAgfVxuICB0aGlzLmxhc3ROZWVkID0gMTtcbiAgdGhpcy5sYXN0VG90YWwgPSAyO1xuICB0aGlzLmxhc3RDaGFyWzBdID0gYnVmW2J1Zi5sZW5ndGggLSAxXTtcbiAgcmV0dXJuIGJ1Zi50b1N0cmluZygndXRmMTZsZScsIGksIGJ1Zi5sZW5ndGggLSAxKTtcbn1cblxuLy8gRm9yIFVURi0xNkxFIHdlIGRvIG5vdCBleHBsaWNpdGx5IGFwcGVuZCBzcGVjaWFsIHJlcGxhY2VtZW50IGNoYXJhY3RlcnMgaWYgd2Vcbi8vIGVuZCBvbiBhIHBhcnRpYWwgY2hhcmFjdGVyLCB3ZSBzaW1wbHkgbGV0IHY4IGhhbmRsZSB0aGF0LlxuZnVuY3Rpb24gdXRmMTZFbmQoYnVmKSB7XG4gIHZhciByID0gYnVmICYmIGJ1Zi5sZW5ndGggPyB0aGlzLndyaXRlKGJ1ZikgOiAnJztcbiAgaWYgKHRoaXMubGFzdE5lZWQpIHtcbiAgICB2YXIgZW5kID0gdGhpcy5sYXN0VG90YWwgLSB0aGlzLmxhc3ROZWVkO1xuICAgIHJldHVybiByICsgdGhpcy5sYXN0Q2hhci50b1N0cmluZygndXRmMTZsZScsIDAsIGVuZCk7XG4gIH1cbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIGJhc2U2NFRleHQoYnVmLCBpKSB7XG4gIHZhciBuID0gKGJ1Zi5sZW5ndGggLSBpKSAlIDM7XG4gIGlmIChuID09PSAwKSByZXR1cm4gYnVmLnRvU3RyaW5nKCdiYXNlNjQnLCBpKTtcbiAgdGhpcy5sYXN0TmVlZCA9IDMgLSBuO1xuICB0aGlzLmxhc3RUb3RhbCA9IDM7XG4gIGlmIChuID09PSAxKSB7XG4gICAgdGhpcy5sYXN0Q2hhclswXSA9IGJ1ZltidWYubGVuZ3RoIC0gMV07XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5sYXN0Q2hhclswXSA9IGJ1ZltidWYubGVuZ3RoIC0gMl07XG4gICAgdGhpcy5sYXN0Q2hhclsxXSA9IGJ1ZltidWYubGVuZ3RoIC0gMV07XG4gIH1cbiAgcmV0dXJuIGJ1Zi50b1N0cmluZygnYmFzZTY0JywgaSwgYnVmLmxlbmd0aCAtIG4pO1xufVxuXG5mdW5jdGlvbiBiYXNlNjRFbmQoYnVmKSB7XG4gIHZhciByID0gYnVmICYmIGJ1Zi5sZW5ndGggPyB0aGlzLndyaXRlKGJ1ZikgOiAnJztcbiAgaWYgKHRoaXMubGFzdE5lZWQpIHJldHVybiByICsgdGhpcy5sYXN0Q2hhci50b1N0cmluZygnYmFzZTY0JywgMCwgMyAtIHRoaXMubGFzdE5lZWQpO1xuICByZXR1cm4gcjtcbn1cblxuLy8gUGFzcyBieXRlcyBvbiB0aHJvdWdoIGZvciBzaW5nbGUtYnl0ZSBlbmNvZGluZ3MgKGUuZy4gYXNjaWksIGxhdGluMSwgaGV4KVxuZnVuY3Rpb24gc2ltcGxlV3JpdGUoYnVmKSB7XG4gIHJldHVybiBidWYudG9TdHJpbmcodGhpcy5lbmNvZGluZyk7XG59XG5cbmZ1bmN0aW9uIHNpbXBsZUVuZChidWYpIHtcbiAgcmV0dXJuIGJ1ZiAmJiBidWYubGVuZ3RoID8gdGhpcy53cml0ZShidWYpIDogJyc7XG59IiwKICAgICIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xuXG52YXIgcG5hID0gcmVxdWlyZSgncHJvY2Vzcy1uZXh0aWNrLWFyZ3MnKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWRhYmxlO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCdpc2FycmF5Jyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBEdXBsZXg7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuUmVhZGFibGUuUmVhZGFibGVTdGF0ZSA9IFJlYWRhYmxlU3RhdGU7XG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgRUUgPSByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXI7XG5cbnZhciBFRWxpc3RlbmVyQ291bnQgPSBmdW5jdGlvbiAoZW1pdHRlciwgdHlwZSkge1xuICByZXR1cm4gZW1pdHRlci5saXN0ZW5lcnModHlwZSkubGVuZ3RoO1xufTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIFN0cmVhbSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvc3RyZWFtcy9zdHJlYW0nKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG4vKjxyZXBsYWNlbWVudD4qL1xuXG52YXIgQnVmZmVyID0gcmVxdWlyZSgnc2FmZS1idWZmZXInKS5CdWZmZXI7XG52YXIgT3VyVWludDhBcnJheSA9ICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbCA6IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogdHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnID8gc2VsZiA6IHt9KS5VaW50OEFycmF5IHx8IGZ1bmN0aW9uICgpIHt9O1xuZnVuY3Rpb24gX3VpbnQ4QXJyYXlUb0J1ZmZlcihjaHVuaykge1xuICByZXR1cm4gQnVmZmVyLmZyb20oY2h1bmspO1xufVxuZnVuY3Rpb24gX2lzVWludDhBcnJheShvYmopIHtcbiAgcmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihvYmopIHx8IG9iaiBpbnN0YW5jZW9mIE91clVpbnQ4QXJyYXk7XG59XG5cbi8qPC9yZXBsYWNlbWVudD4qL1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIHV0aWwgPSBPYmplY3QuY3JlYXRlKHJlcXVpcmUoJ2NvcmUtdXRpbC1pcycpKTtcbnV0aWwuaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgZGVidWdVdGlsID0gcmVxdWlyZSgndXRpbCcpO1xudmFyIGRlYnVnID0gdm9pZCAwO1xuaWYgKGRlYnVnVXRpbCAmJiBkZWJ1Z1V0aWwuZGVidWdsb2cpIHtcbiAgZGVidWcgPSBkZWJ1Z1V0aWwuZGVidWdsb2coJ3N0cmVhbScpO1xufSBlbHNlIHtcbiAgZGVidWcgPSBmdW5jdGlvbiAoKSB7fTtcbn1cbi8qPC9yZXBsYWNlbWVudD4qL1xuXG52YXIgQnVmZmVyTGlzdCA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvc3RyZWFtcy9CdWZmZXJMaXN0Jyk7XG52YXIgZGVzdHJveUltcGwgPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvZGVzdHJveScpO1xudmFyIFN0cmluZ0RlY29kZXI7XG5cbnV0aWwuaW5oZXJpdHMoUmVhZGFibGUsIFN0cmVhbSk7XG5cbnZhciBrUHJveHlFdmVudHMgPSBbJ2Vycm9yJywgJ2Nsb3NlJywgJ2Rlc3Ryb3knLCAncGF1c2UnLCAncmVzdW1lJ107XG5cbmZ1bmN0aW9uIHByZXBlbmRMaXN0ZW5lcihlbWl0dGVyLCBldmVudCwgZm4pIHtcbiAgLy8gU2FkbHkgdGhpcyBpcyBub3QgY2FjaGVhYmxlIGFzIHNvbWUgbGlicmFyaWVzIGJ1bmRsZSB0aGVpciBvd25cbiAgLy8gZXZlbnQgZW1pdHRlciBpbXBsZW1lbnRhdGlvbiB3aXRoIHRoZW0uXG4gIGlmICh0eXBlb2YgZW1pdHRlci5wcmVwZW5kTGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHJldHVybiBlbWl0dGVyLnByZXBlbmRMaXN0ZW5lcihldmVudCwgZm4pO1xuXG4gIC8vIFRoaXMgaXMgYSBoYWNrIHRvIG1ha2Ugc3VyZSB0aGF0IG91ciBlcnJvciBoYW5kbGVyIGlzIGF0dGFjaGVkIGJlZm9yZSBhbnlcbiAgLy8gdXNlcmxhbmQgb25lcy4gIE5FVkVSIERPIFRISVMuIFRoaXMgaXMgaGVyZSBvbmx5IGJlY2F1c2UgdGhpcyBjb2RlIG5lZWRzXG4gIC8vIHRvIGNvbnRpbnVlIHRvIHdvcmsgd2l0aCBvbGRlciB2ZXJzaW9ucyBvZiBOb2RlLmpzIHRoYXQgZG8gbm90IGluY2x1ZGVcbiAgLy8gdGhlIHByZXBlbmRMaXN0ZW5lcigpIG1ldGhvZC4gVGhlIGdvYWwgaXMgdG8gZXZlbnR1YWxseSByZW1vdmUgdGhpcyBoYWNrLlxuICBpZiAoIWVtaXR0ZXIuX2V2ZW50cyB8fCAhZW1pdHRlci5fZXZlbnRzW2V2ZW50XSkgZW1pdHRlci5vbihldmVudCwgZm4pO2Vsc2UgaWYgKGlzQXJyYXkoZW1pdHRlci5fZXZlbnRzW2V2ZW50XSkpIGVtaXR0ZXIuX2V2ZW50c1tldmVudF0udW5zaGlmdChmbik7ZWxzZSBlbWl0dGVyLl9ldmVudHNbZXZlbnRdID0gW2ZuLCBlbWl0dGVyLl9ldmVudHNbZXZlbnRdXTtcbn1cblxuZnVuY3Rpb24gUmVhZGFibGVTdGF0ZShvcHRpb25zLCBzdHJlYW0pIHtcbiAgRHVwbGV4ID0gRHVwbGV4IHx8IHJlcXVpcmUoJy4vX3N0cmVhbV9kdXBsZXgnKTtcblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAvLyBEdXBsZXggc3RyZWFtcyBhcmUgYm90aCByZWFkYWJsZSBhbmQgd3JpdGFibGUsIGJ1dCBzaGFyZVxuICAvLyB0aGUgc2FtZSBvcHRpb25zIG9iamVjdC5cbiAgLy8gSG93ZXZlciwgc29tZSBjYXNlcyByZXF1aXJlIHNldHRpbmcgb3B0aW9ucyB0byBkaWZmZXJlbnRcbiAgLy8gdmFsdWVzIGZvciB0aGUgcmVhZGFibGUgYW5kIHRoZSB3cml0YWJsZSBzaWRlcyBvZiB0aGUgZHVwbGV4IHN0cmVhbS5cbiAgLy8gVGhlc2Ugb3B0aW9ucyBjYW4gYmUgcHJvdmlkZWQgc2VwYXJhdGVseSBhcyByZWFkYWJsZVhYWCBhbmQgd3JpdGFibGVYWFguXG4gIHZhciBpc0R1cGxleCA9IHN0cmVhbSBpbnN0YW5jZW9mIER1cGxleDtcblxuICAvLyBvYmplY3Qgc3RyZWFtIGZsYWcuIFVzZWQgdG8gbWFrZSByZWFkKG4pIGlnbm9yZSBuIGFuZCB0b1xuICAvLyBtYWtlIGFsbCB0aGUgYnVmZmVyIG1lcmdpbmcgYW5kIGxlbmd0aCBjaGVja3MgZ28gYXdheVxuICB0aGlzLm9iamVjdE1vZGUgPSAhIW9wdGlvbnMub2JqZWN0TW9kZTtcblxuICBpZiAoaXNEdXBsZXgpIHRoaXMub2JqZWN0TW9kZSA9IHRoaXMub2JqZWN0TW9kZSB8fCAhIW9wdGlvbnMucmVhZGFibGVPYmplY3RNb2RlO1xuXG4gIC8vIHRoZSBwb2ludCBhdCB3aGljaCBpdCBzdG9wcyBjYWxsaW5nIF9yZWFkKCkgdG8gZmlsbCB0aGUgYnVmZmVyXG4gIC8vIE5vdGU6IDAgaXMgYSB2YWxpZCB2YWx1ZSwgbWVhbnMgXCJkb24ndCBjYWxsIF9yZWFkIHByZWVtcHRpdmVseSBldmVyXCJcbiAgdmFyIGh3bSA9IG9wdGlvbnMuaGlnaFdhdGVyTWFyaztcbiAgdmFyIHJlYWRhYmxlSHdtID0gb3B0aW9ucy5yZWFkYWJsZUhpZ2hXYXRlck1hcms7XG4gIHZhciBkZWZhdWx0SHdtID0gdGhpcy5vYmplY3RNb2RlID8gMTYgOiAxNiAqIDEwMjQ7XG5cbiAgaWYgKGh3bSB8fCBod20gPT09IDApIHRoaXMuaGlnaFdhdGVyTWFyayA9IGh3bTtlbHNlIGlmIChpc0R1cGxleCAmJiAocmVhZGFibGVId20gfHwgcmVhZGFibGVId20gPT09IDApKSB0aGlzLmhpZ2hXYXRlck1hcmsgPSByZWFkYWJsZUh3bTtlbHNlIHRoaXMuaGlnaFdhdGVyTWFyayA9IGRlZmF1bHRId207XG5cbiAgLy8gY2FzdCB0byBpbnRzLlxuICB0aGlzLmhpZ2hXYXRlck1hcmsgPSBNYXRoLmZsb29yKHRoaXMuaGlnaFdhdGVyTWFyayk7XG5cbiAgLy8gQSBsaW5rZWQgbGlzdCBpcyB1c2VkIHRvIHN0b3JlIGRhdGEgY2h1bmtzIGluc3RlYWQgb2YgYW4gYXJyYXkgYmVjYXVzZSB0aGVcbiAgLy8gbGlua2VkIGxpc3QgY2FuIHJlbW92ZSBlbGVtZW50cyBmcm9tIHRoZSBiZWdpbm5pbmcgZmFzdGVyIHRoYW5cbiAgLy8gYXJyYXkuc2hpZnQoKVxuICB0aGlzLmJ1ZmZlciA9IG5ldyBCdWZmZXJMaXN0KCk7XG4gIHRoaXMubGVuZ3RoID0gMDtcbiAgdGhpcy5waXBlcyA9IG51bGw7XG4gIHRoaXMucGlwZXNDb3VudCA9IDA7XG4gIHRoaXMuZmxvd2luZyA9IG51bGw7XG4gIHRoaXMuZW5kZWQgPSBmYWxzZTtcbiAgdGhpcy5lbmRFbWl0dGVkID0gZmFsc2U7XG4gIHRoaXMucmVhZGluZyA9IGZhbHNlO1xuXG4gIC8vIGEgZmxhZyB0byBiZSBhYmxlIHRvIHRlbGwgaWYgdGhlIGV2ZW50ICdyZWFkYWJsZScvJ2RhdGEnIGlzIGVtaXR0ZWRcbiAgLy8gaW1tZWRpYXRlbHksIG9yIG9uIGEgbGF0ZXIgdGljay4gIFdlIHNldCB0aGlzIHRvIHRydWUgYXQgZmlyc3QsIGJlY2F1c2VcbiAgLy8gYW55IGFjdGlvbnMgdGhhdCBzaG91bGRuJ3QgaGFwcGVuIHVudGlsIFwibGF0ZXJcIiBzaG91bGQgZ2VuZXJhbGx5IGFsc29cbiAgLy8gbm90IGhhcHBlbiBiZWZvcmUgdGhlIGZpcnN0IHJlYWQgY2FsbC5cbiAgdGhpcy5zeW5jID0gdHJ1ZTtcblxuICAvLyB3aGVuZXZlciB3ZSByZXR1cm4gbnVsbCwgdGhlbiB3ZSBzZXQgYSBmbGFnIHRvIHNheVxuICAvLyB0aGF0IHdlJ3JlIGF3YWl0aW5nIGEgJ3JlYWRhYmxlJyBldmVudCBlbWlzc2lvbi5cbiAgdGhpcy5uZWVkUmVhZGFibGUgPSBmYWxzZTtcbiAgdGhpcy5lbWl0dGVkUmVhZGFibGUgPSBmYWxzZTtcbiAgdGhpcy5yZWFkYWJsZUxpc3RlbmluZyA9IGZhbHNlO1xuICB0aGlzLnJlc3VtZVNjaGVkdWxlZCA9IGZhbHNlO1xuXG4gIC8vIGhhcyBpdCBiZWVuIGRlc3Ryb3llZFxuICB0aGlzLmRlc3Ryb3llZCA9IGZhbHNlO1xuXG4gIC8vIENyeXB0byBpcyBraW5kIG9mIG9sZCBhbmQgY3J1c3R5LiAgSGlzdG9yaWNhbGx5LCBpdHMgZGVmYXVsdCBzdHJpbmdcbiAgLy8gZW5jb2RpbmcgaXMgJ2JpbmFyeScgc28gd2UgaGF2ZSB0byBtYWtlIHRoaXMgY29uZmlndXJhYmxlLlxuICAvLyBFdmVyeXRoaW5nIGVsc2UgaW4gdGhlIHVuaXZlcnNlIHVzZXMgJ3V0ZjgnLCB0aG91Z2guXG4gIHRoaXMuZGVmYXVsdEVuY29kaW5nID0gb3B0aW9ucy5kZWZhdWx0RW5jb2RpbmcgfHwgJ3V0ZjgnO1xuXG4gIC8vIHRoZSBudW1iZXIgb2Ygd3JpdGVycyB0aGF0IGFyZSBhd2FpdGluZyBhIGRyYWluIGV2ZW50IGluIC5waXBlKClzXG4gIHRoaXMuYXdhaXREcmFpbiA9IDA7XG5cbiAgLy8gaWYgdHJ1ZSwgYSBtYXliZVJlYWRNb3JlIGhhcyBiZWVuIHNjaGVkdWxlZFxuICB0aGlzLnJlYWRpbmdNb3JlID0gZmFsc2U7XG5cbiAgdGhpcy5kZWNvZGVyID0gbnVsbDtcbiAgdGhpcy5lbmNvZGluZyA9IG51bGw7XG4gIGlmIChvcHRpb25zLmVuY29kaW5nKSB7XG4gICAgaWYgKCFTdHJpbmdEZWNvZGVyKSBTdHJpbmdEZWNvZGVyID0gcmVxdWlyZSgnc3RyaW5nX2RlY29kZXIvJykuU3RyaW5nRGVjb2RlcjtcbiAgICB0aGlzLmRlY29kZXIgPSBuZXcgU3RyaW5nRGVjb2RlcihvcHRpb25zLmVuY29kaW5nKTtcbiAgICB0aGlzLmVuY29kaW5nID0gb3B0aW9ucy5lbmNvZGluZztcbiAgfVxufVxuXG5mdW5jdGlvbiBSZWFkYWJsZShvcHRpb25zKSB7XG4gIER1cGxleCA9IER1cGxleCB8fCByZXF1aXJlKCcuL19zdHJlYW1fZHVwbGV4Jyk7XG5cbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlYWRhYmxlKSkgcmV0dXJuIG5ldyBSZWFkYWJsZShvcHRpb25zKTtcblxuICB0aGlzLl9yZWFkYWJsZVN0YXRlID0gbmV3IFJlYWRhYmxlU3RhdGUob3B0aW9ucywgdGhpcyk7XG5cbiAgLy8gbGVnYWN5XG4gIHRoaXMucmVhZGFibGUgPSB0cnVlO1xuXG4gIGlmIChvcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLnJlYWQgPT09ICdmdW5jdGlvbicpIHRoaXMuX3JlYWQgPSBvcHRpb25zLnJlYWQ7XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuZGVzdHJveSA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fZGVzdHJveSA9IG9wdGlvbnMuZGVzdHJveTtcbiAgfVxuXG4gIFN0cmVhbS5jYWxsKHRoaXMpO1xufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoUmVhZGFibGUucHJvdG90eXBlLCAnZGVzdHJveWVkJywge1xuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZDtcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAvLyB3ZSBpZ25vcmUgdGhlIHZhbHVlIGlmIHRoZSBzdHJlYW1cbiAgICAvLyBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgeWV0XG4gICAgaWYgKCF0aGlzLl9yZWFkYWJsZVN0YXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgdGhlIHVzZXIgaXMgZXhwbGljaXRseVxuICAgIC8vIG1hbmFnaW5nIGRlc3Ryb3llZFxuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkID0gdmFsdWU7XG4gIH1cbn0pO1xuXG5SZWFkYWJsZS5wcm90b3R5cGUuZGVzdHJveSA9IGRlc3Ryb3lJbXBsLmRlc3Ryb3k7XG5SZWFkYWJsZS5wcm90b3R5cGUuX3VuZGVzdHJveSA9IGRlc3Ryb3lJbXBsLnVuZGVzdHJveTtcblJlYWRhYmxlLnByb3RvdHlwZS5fZGVzdHJveSA9IGZ1bmN0aW9uIChlcnIsIGNiKSB7XG4gIHRoaXMucHVzaChudWxsKTtcbiAgY2IoZXJyKTtcbn07XG5cbi8vIE1hbnVhbGx5IHNob3ZlIHNvbWV0aGluZyBpbnRvIHRoZSByZWFkKCkgYnVmZmVyLlxuLy8gVGhpcyByZXR1cm5zIHRydWUgaWYgdGhlIGhpZ2hXYXRlck1hcmsgaGFzIG5vdCBiZWVuIGhpdCB5ZXQsXG4vLyBzaW1pbGFyIHRvIGhvdyBXcml0YWJsZS53cml0ZSgpIHJldHVybnMgdHJ1ZSBpZiB5b3Ugc2hvdWxkXG4vLyB3cml0ZSgpIHNvbWUgbW9yZS5cblJlYWRhYmxlLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZykge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICB2YXIgc2tpcENodW5rQ2hlY2s7XG5cbiAgaWYgKCFzdGF0ZS5vYmplY3RNb2RlKSB7XG4gICAgaWYgKHR5cGVvZiBjaHVuayA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gZW5jb2RpbmcgfHwgc3RhdGUuZGVmYXVsdEVuY29kaW5nO1xuICAgICAgaWYgKGVuY29kaW5nICE9PSBzdGF0ZS5lbmNvZGluZykge1xuICAgICAgICBjaHVuayA9IEJ1ZmZlci5mcm9tKGNodW5rLCBlbmNvZGluZyk7XG4gICAgICAgIGVuY29kaW5nID0gJyc7XG4gICAgICB9XG4gICAgICBza2lwQ2h1bmtDaGVjayA9IHRydWU7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHNraXBDaHVua0NoZWNrID0gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiByZWFkYWJsZUFkZENodW5rKHRoaXMsIGNodW5rLCBlbmNvZGluZywgZmFsc2UsIHNraXBDaHVua0NoZWNrKTtcbn07XG5cbi8vIFVuc2hpZnQgc2hvdWxkICphbHdheXMqIGJlIHNvbWV0aGluZyBkaXJlY3RseSBvdXQgb2YgcmVhZCgpXG5SZWFkYWJsZS5wcm90b3R5cGUudW5zaGlmdCA9IGZ1bmN0aW9uIChjaHVuaykge1xuICByZXR1cm4gcmVhZGFibGVBZGRDaHVuayh0aGlzLCBjaHVuaywgbnVsbCwgdHJ1ZSwgZmFsc2UpO1xufTtcblxuZnVuY3Rpb24gcmVhZGFibGVBZGRDaHVuayhzdHJlYW0sIGNodW5rLCBlbmNvZGluZywgYWRkVG9Gcm9udCwgc2tpcENodW5rQ2hlY2spIHtcbiAgdmFyIHN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlO1xuICBpZiAoY2h1bmsgPT09IG51bGwpIHtcbiAgICBzdGF0ZS5yZWFkaW5nID0gZmFsc2U7XG4gICAgb25Fb2ZDaHVuayhzdHJlYW0sIHN0YXRlKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgZXI7XG4gICAgaWYgKCFza2lwQ2h1bmtDaGVjaykgZXIgPSBjaHVua0ludmFsaWQoc3RhdGUsIGNodW5rKTtcbiAgICBpZiAoZXIpIHtcbiAgICAgIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVyKTtcbiAgICB9IGVsc2UgaWYgKHN0YXRlLm9iamVjdE1vZGUgfHwgY2h1bmsgJiYgY2h1bmsubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKHR5cGVvZiBjaHVuayAhPT0gJ3N0cmluZycgJiYgIXN0YXRlLm9iamVjdE1vZGUgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKGNodW5rKSAhPT0gQnVmZmVyLnByb3RvdHlwZSkge1xuICAgICAgICBjaHVuayA9IF91aW50OEFycmF5VG9CdWZmZXIoY2h1bmspO1xuICAgICAgfVxuXG4gICAgICBpZiAoYWRkVG9Gcm9udCkge1xuICAgICAgICBpZiAoc3RhdGUuZW5kRW1pdHRlZCkgc3RyZWFtLmVtaXQoJ2Vycm9yJywgbmV3IEVycm9yKCdzdHJlYW0udW5zaGlmdCgpIGFmdGVyIGVuZCBldmVudCcpKTtlbHNlIGFkZENodW5rKHN0cmVhbSwgc3RhdGUsIGNodW5rLCB0cnVlKTtcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUuZW5kZWQpIHtcbiAgICAgICAgc3RyZWFtLmVtaXQoJ2Vycm9yJywgbmV3IEVycm9yKCdzdHJlYW0ucHVzaCgpIGFmdGVyIEVPRicpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRlLnJlYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgaWYgKHN0YXRlLmRlY29kZXIgJiYgIWVuY29kaW5nKSB7XG4gICAgICAgICAgY2h1bmsgPSBzdGF0ZS5kZWNvZGVyLndyaXRlKGNodW5rKTtcbiAgICAgICAgICBpZiAoc3RhdGUub2JqZWN0TW9kZSB8fCBjaHVuay5sZW5ndGggIT09IDApIGFkZENodW5rKHN0cmVhbSwgc3RhdGUsIGNodW5rLCBmYWxzZSk7ZWxzZSBtYXliZVJlYWRNb3JlKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFkZENodW5rKHN0cmVhbSwgc3RhdGUsIGNodW5rLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFhZGRUb0Zyb250KSB7XG4gICAgICBzdGF0ZS5yZWFkaW5nID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5lZWRNb3JlRGF0YShzdGF0ZSk7XG59XG5cbmZ1bmN0aW9uIGFkZENodW5rKHN0cmVhbSwgc3RhdGUsIGNodW5rLCBhZGRUb0Zyb250KSB7XG4gIGlmIChzdGF0ZS5mbG93aW5nICYmIHN0YXRlLmxlbmd0aCA9PT0gMCAmJiAhc3RhdGUuc3luYykge1xuICAgIHN0cmVhbS5lbWl0KCdkYXRhJywgY2h1bmspO1xuICAgIHN0cmVhbS5yZWFkKDApO1xuICB9IGVsc2Uge1xuICAgIC8vIHVwZGF0ZSB0aGUgYnVmZmVyIGluZm8uXG4gICAgc3RhdGUubGVuZ3RoICs9IHN0YXRlLm9iamVjdE1vZGUgPyAxIDogY2h1bmsubGVuZ3RoO1xuICAgIGlmIChhZGRUb0Zyb250KSBzdGF0ZS5idWZmZXIudW5zaGlmdChjaHVuayk7ZWxzZSBzdGF0ZS5idWZmZXIucHVzaChjaHVuayk7XG5cbiAgICBpZiAoc3RhdGUubmVlZFJlYWRhYmxlKSBlbWl0UmVhZGFibGUoc3RyZWFtKTtcbiAgfVxuICBtYXliZVJlYWRNb3JlKHN0cmVhbSwgc3RhdGUpO1xufVxuXG5mdW5jdGlvbiBjaHVua0ludmFsaWQoc3RhdGUsIGNodW5rKSB7XG4gIHZhciBlcjtcbiAgaWYgKCFfaXNVaW50OEFycmF5KGNodW5rKSAmJiB0eXBlb2YgY2h1bmsgIT09ICdzdHJpbmcnICYmIGNodW5rICE9PSB1bmRlZmluZWQgJiYgIXN0YXRlLm9iamVjdE1vZGUpIHtcbiAgICBlciA9IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgbm9uLXN0cmluZy9idWZmZXIgY2h1bmsnKTtcbiAgfVxuICByZXR1cm4gZXI7XG59XG5cbi8vIGlmIGl0J3MgcGFzdCB0aGUgaGlnaCB3YXRlciBtYXJrLCB3ZSBjYW4gcHVzaCBpbiBzb21lIG1vcmUuXG4vLyBBbHNvLCBpZiB3ZSBoYXZlIG5vIGRhdGEgeWV0LCB3ZSBjYW4gc3RhbmQgc29tZVxuLy8gbW9yZSBieXRlcy4gIFRoaXMgaXMgdG8gd29yayBhcm91bmQgY2FzZXMgd2hlcmUgaHdtPTAsXG4vLyBzdWNoIGFzIHRoZSByZXBsLiAgQWxzbywgaWYgdGhlIHB1c2goKSB0cmlnZ2VyZWQgYVxuLy8gcmVhZGFibGUgZXZlbnQsIGFuZCB0aGUgdXNlciBjYWxsZWQgcmVhZChsYXJnZU51bWJlcikgc3VjaCB0aGF0XG4vLyBuZWVkUmVhZGFibGUgd2FzIHNldCwgdGhlbiB3ZSBvdWdodCB0byBwdXNoIG1vcmUsIHNvIHRoYXQgYW5vdGhlclxuLy8gJ3JlYWRhYmxlJyBldmVudCB3aWxsIGJlIHRyaWdnZXJlZC5cbmZ1bmN0aW9uIG5lZWRNb3JlRGF0YShzdGF0ZSkge1xuICByZXR1cm4gIXN0YXRlLmVuZGVkICYmIChzdGF0ZS5uZWVkUmVhZGFibGUgfHwgc3RhdGUubGVuZ3RoIDwgc3RhdGUuaGlnaFdhdGVyTWFyayB8fCBzdGF0ZS5sZW5ndGggPT09IDApO1xufVxuXG5SZWFkYWJsZS5wcm90b3R5cGUuaXNQYXVzZWQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcgPT09IGZhbHNlO1xufTtcblxuLy8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuXG5SZWFkYWJsZS5wcm90b3R5cGUuc2V0RW5jb2RpbmcgPSBmdW5jdGlvbiAoZW5jKSB7XG4gIGlmICghU3RyaW5nRGVjb2RlcikgU3RyaW5nRGVjb2RlciA9IHJlcXVpcmUoJ3N0cmluZ19kZWNvZGVyLycpLlN0cmluZ0RlY29kZXI7XG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2RlciA9IG5ldyBTdHJpbmdEZWNvZGVyKGVuYyk7XG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5jb2RpbmcgPSBlbmM7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gRG9uJ3QgcmFpc2UgdGhlIGh3bSA+IDhNQlxudmFyIE1BWF9IV00gPSAweDgwMDAwMDtcbmZ1bmN0aW9uIGNvbXB1dGVOZXdIaWdoV2F0ZXJNYXJrKG4pIHtcbiAgaWYgKG4gPj0gTUFYX0hXTSkge1xuICAgIG4gPSBNQVhfSFdNO1xuICB9IGVsc2Uge1xuICAgIC8vIEdldCB0aGUgbmV4dCBoaWdoZXN0IHBvd2VyIG9mIDIgdG8gcHJldmVudCBpbmNyZWFzaW5nIGh3bSBleGNlc3NpdmVseSBpblxuICAgIC8vIHRpbnkgYW1vdW50c1xuICAgIG4tLTtcbiAgICBuIHw9IG4gPj4+IDE7XG4gICAgbiB8PSBuID4+PiAyO1xuICAgIG4gfD0gbiA+Pj4gNDtcbiAgICBuIHw9IG4gPj4+IDg7XG4gICAgbiB8PSBuID4+PiAxNjtcbiAgICBuKys7XG4gIH1cbiAgcmV0dXJuIG47XG59XG5cbi8vIFRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gYmUgaW5saW5hYmxlLCBzbyBwbGVhc2UgdGFrZSBjYXJlIHdoZW4gbWFraW5nXG4vLyBjaGFuZ2VzIHRvIHRoZSBmdW5jdGlvbiBib2R5LlxuZnVuY3Rpb24gaG93TXVjaFRvUmVhZChuLCBzdGF0ZSkge1xuICBpZiAobiA8PSAwIHx8IHN0YXRlLmxlbmd0aCA9PT0gMCAmJiBzdGF0ZS5lbmRlZCkgcmV0dXJuIDA7XG4gIGlmIChzdGF0ZS5vYmplY3RNb2RlKSByZXR1cm4gMTtcbiAgaWYgKG4gIT09IG4pIHtcbiAgICAvLyBPbmx5IGZsb3cgb25lIGJ1ZmZlciBhdCBhIHRpbWVcbiAgICBpZiAoc3RhdGUuZmxvd2luZyAmJiBzdGF0ZS5sZW5ndGgpIHJldHVybiBzdGF0ZS5idWZmZXIuaGVhZC5kYXRhLmxlbmd0aDtlbHNlIHJldHVybiBzdGF0ZS5sZW5ndGg7XG4gIH1cbiAgLy8gSWYgd2UncmUgYXNraW5nIGZvciBtb3JlIHRoYW4gdGhlIGN1cnJlbnQgaHdtLCB0aGVuIHJhaXNlIHRoZSBod20uXG4gIGlmIChuID4gc3RhdGUuaGlnaFdhdGVyTWFyaykgc3RhdGUuaGlnaFdhdGVyTWFyayA9IGNvbXB1dGVOZXdIaWdoV2F0ZXJNYXJrKG4pO1xuICBpZiAobiA8PSBzdGF0ZS5sZW5ndGgpIHJldHVybiBuO1xuICAvLyBEb24ndCBoYXZlIGVub3VnaFxuICBpZiAoIXN0YXRlLmVuZGVkKSB7XG4gICAgc3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZTtcbiAgICByZXR1cm4gMDtcbiAgfVxuICByZXR1cm4gc3RhdGUubGVuZ3RoO1xufVxuXG4vLyB5b3UgY2FuIG92ZXJyaWRlIGVpdGhlciB0aGlzIG1ldGhvZCwgb3IgdGhlIGFzeW5jIF9yZWFkKG4pIGJlbG93LlxuUmVhZGFibGUucHJvdG90eXBlLnJlYWQgPSBmdW5jdGlvbiAobikge1xuICBkZWJ1ZygncmVhZCcsIG4pO1xuICBuID0gcGFyc2VJbnQobiwgMTApO1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICB2YXIgbk9yaWcgPSBuO1xuXG4gIGlmIChuICE9PSAwKSBzdGF0ZS5lbWl0dGVkUmVhZGFibGUgPSBmYWxzZTtcblxuICAvLyBpZiB3ZSdyZSBkb2luZyByZWFkKDApIHRvIHRyaWdnZXIgYSByZWFkYWJsZSBldmVudCwgYnV0IHdlXG4gIC8vIGFscmVhZHkgaGF2ZSBhIGJ1bmNoIG9mIGRhdGEgaW4gdGhlIGJ1ZmZlciwgdGhlbiBqdXN0IHRyaWdnZXJcbiAgLy8gdGhlICdyZWFkYWJsZScgZXZlbnQgYW5kIG1vdmUgb24uXG4gIGlmIChuID09PSAwICYmIHN0YXRlLm5lZWRSZWFkYWJsZSAmJiAoc3RhdGUubGVuZ3RoID49IHN0YXRlLmhpZ2hXYXRlck1hcmsgfHwgc3RhdGUuZW5kZWQpKSB7XG4gICAgZGVidWcoJ3JlYWQ6IGVtaXRSZWFkYWJsZScsIHN0YXRlLmxlbmd0aCwgc3RhdGUuZW5kZWQpO1xuICAgIGlmIChzdGF0ZS5sZW5ndGggPT09IDAgJiYgc3RhdGUuZW5kZWQpIGVuZFJlYWRhYmxlKHRoaXMpO2Vsc2UgZW1pdFJlYWRhYmxlKHRoaXMpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgbiA9IGhvd011Y2hUb1JlYWQobiwgc3RhdGUpO1xuXG4gIC8vIGlmIHdlJ3ZlIGVuZGVkLCBhbmQgd2UncmUgbm93IGNsZWFyLCB0aGVuIGZpbmlzaCBpdCB1cC5cbiAgaWYgKG4gPT09IDAgJiYgc3RhdGUuZW5kZWQpIHtcbiAgICBpZiAoc3RhdGUubGVuZ3RoID09PSAwKSBlbmRSZWFkYWJsZSh0aGlzKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIEFsbCB0aGUgYWN0dWFsIGNodW5rIGdlbmVyYXRpb24gbG9naWMgbmVlZHMgdG8gYmVcbiAgLy8gKmJlbG93KiB0aGUgY2FsbCB0byBfcmVhZC4gIFRoZSByZWFzb24gaXMgdGhhdCBpbiBjZXJ0YWluXG4gIC8vIHN5bnRoZXRpYyBzdHJlYW0gY2FzZXMsIHN1Y2ggYXMgcGFzc3Rocm91Z2ggc3RyZWFtcywgX3JlYWRcbiAgLy8gbWF5IGJlIGEgY29tcGxldGVseSBzeW5jaHJvbm91cyBvcGVyYXRpb24gd2hpY2ggbWF5IGNoYW5nZVxuICAvLyB0aGUgc3RhdGUgb2YgdGhlIHJlYWQgYnVmZmVyLCBwcm92aWRpbmcgZW5vdWdoIGRhdGEgd2hlblxuICAvLyBiZWZvcmUgdGhlcmUgd2FzICpub3QqIGVub3VnaC5cbiAgLy9cbiAgLy8gU28sIHRoZSBzdGVwcyBhcmU6XG4gIC8vIDEuIEZpZ3VyZSBvdXQgd2hhdCB0aGUgc3RhdGUgb2YgdGhpbmdzIHdpbGwgYmUgYWZ0ZXIgd2UgZG9cbiAgLy8gYSByZWFkIGZyb20gdGhlIGJ1ZmZlci5cbiAgLy9cbiAgLy8gMi4gSWYgdGhhdCByZXN1bHRpbmcgc3RhdGUgd2lsbCB0cmlnZ2VyIGEgX3JlYWQsIHRoZW4gY2FsbCBfcmVhZC5cbiAgLy8gTm90ZSB0aGF0IHRoaXMgbWF5IGJlIGFzeW5jaHJvbm91cywgb3Igc3luY2hyb25vdXMuICBZZXMsIGl0IGlzXG4gIC8vIGRlZXBseSB1Z2x5IHRvIHdyaXRlIEFQSXMgdGhpcyB3YXksIGJ1dCB0aGF0IHN0aWxsIGRvZXNuJ3QgbWVhblxuICAvLyB0aGF0IHRoZSBSZWFkYWJsZSBjbGFzcyBzaG91bGQgYmVoYXZlIGltcHJvcGVybHksIGFzIHN0cmVhbXMgYXJlXG4gIC8vIGRlc2lnbmVkIHRvIGJlIHN5bmMvYXN5bmMgYWdub3N0aWMuXG4gIC8vIFRha2Ugbm90ZSBpZiB0aGUgX3JlYWQgY2FsbCBpcyBzeW5jIG9yIGFzeW5jIChpZSwgaWYgdGhlIHJlYWQgY2FsbFxuICAvLyBoYXMgcmV0dXJuZWQgeWV0KSwgc28gdGhhdCB3ZSBrbm93IHdoZXRoZXIgb3Igbm90IGl0J3Mgc2FmZSB0byBlbWl0XG4gIC8vICdyZWFkYWJsZScgZXRjLlxuICAvL1xuICAvLyAzLiBBY3R1YWxseSBwdWxsIHRoZSByZXF1ZXN0ZWQgY2h1bmtzIG91dCBvZiB0aGUgYnVmZmVyIGFuZCByZXR1cm4uXG5cbiAgLy8gaWYgd2UgbmVlZCBhIHJlYWRhYmxlIGV2ZW50LCB0aGVuIHdlIG5lZWQgdG8gZG8gc29tZSByZWFkaW5nLlxuICB2YXIgZG9SZWFkID0gc3RhdGUubmVlZFJlYWRhYmxlO1xuICBkZWJ1ZygnbmVlZCByZWFkYWJsZScsIGRvUmVhZCk7XG5cbiAgLy8gaWYgd2UgY3VycmVudGx5IGhhdmUgbGVzcyB0aGFuIHRoZSBoaWdoV2F0ZXJNYXJrLCB0aGVuIGFsc28gcmVhZCBzb21lXG4gIGlmIChzdGF0ZS5sZW5ndGggPT09IDAgfHwgc3RhdGUubGVuZ3RoIC0gbiA8IHN0YXRlLmhpZ2hXYXRlck1hcmspIHtcbiAgICBkb1JlYWQgPSB0cnVlO1xuICAgIGRlYnVnKCdsZW5ndGggbGVzcyB0aGFuIHdhdGVybWFyaycsIGRvUmVhZCk7XG4gIH1cblxuICAvLyBob3dldmVyLCBpZiB3ZSd2ZSBlbmRlZCwgdGhlbiB0aGVyZSdzIG5vIHBvaW50LCBhbmQgaWYgd2UncmUgYWxyZWFkeVxuICAvLyByZWFkaW5nLCB0aGVuIGl0J3MgdW5uZWNlc3NhcnkuXG4gIGlmIChzdGF0ZS5lbmRlZCB8fCBzdGF0ZS5yZWFkaW5nKSB7XG4gICAgZG9SZWFkID0gZmFsc2U7XG4gICAgZGVidWcoJ3JlYWRpbmcgb3IgZW5kZWQnLCBkb1JlYWQpO1xuICB9IGVsc2UgaWYgKGRvUmVhZCkge1xuICAgIGRlYnVnKCdkbyByZWFkJyk7XG4gICAgc3RhdGUucmVhZGluZyA9IHRydWU7XG4gICAgc3RhdGUuc3luYyA9IHRydWU7XG4gICAgLy8gaWYgdGhlIGxlbmd0aCBpcyBjdXJyZW50bHkgemVybywgdGhlbiB3ZSAqbmVlZCogYSByZWFkYWJsZSBldmVudC5cbiAgICBpZiAoc3RhdGUubGVuZ3RoID09PSAwKSBzdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlO1xuICAgIC8vIGNhbGwgaW50ZXJuYWwgcmVhZCBtZXRob2RcbiAgICB0aGlzLl9yZWFkKHN0YXRlLmhpZ2hXYXRlck1hcmspO1xuICAgIHN0YXRlLnN5bmMgPSBmYWxzZTtcbiAgICAvLyBJZiBfcmVhZCBwdXNoZWQgZGF0YSBzeW5jaHJvbm91c2x5LCB0aGVuIGByZWFkaW5nYCB3aWxsIGJlIGZhbHNlLFxuICAgIC8vIGFuZCB3ZSBuZWVkIHRvIHJlLWV2YWx1YXRlIGhvdyBtdWNoIGRhdGEgd2UgY2FuIHJldHVybiB0byB0aGUgdXNlci5cbiAgICBpZiAoIXN0YXRlLnJlYWRpbmcpIG4gPSBob3dNdWNoVG9SZWFkKG5PcmlnLCBzdGF0ZSk7XG4gIH1cblxuICB2YXIgcmV0O1xuICBpZiAobiA+IDApIHJldCA9IGZyb21MaXN0KG4sIHN0YXRlKTtlbHNlIHJldCA9IG51bGw7XG5cbiAgaWYgKHJldCA9PT0gbnVsbCkge1xuICAgIHN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWU7XG4gICAgbiA9IDA7XG4gIH0gZWxzZSB7XG4gICAgc3RhdGUubGVuZ3RoIC09IG47XG4gIH1cblxuICBpZiAoc3RhdGUubGVuZ3RoID09PSAwKSB7XG4gICAgLy8gSWYgd2UgaGF2ZSBub3RoaW5nIGluIHRoZSBidWZmZXIsIHRoZW4gd2Ugd2FudCB0byBrbm93XG4gICAgLy8gYXMgc29vbiBhcyB3ZSAqZG8qIGdldCBzb21ldGhpbmcgaW50byB0aGUgYnVmZmVyLlxuICAgIGlmICghc3RhdGUuZW5kZWQpIHN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWU7XG5cbiAgICAvLyBJZiB3ZSB0cmllZCB0byByZWFkKCkgcGFzdCB0aGUgRU9GLCB0aGVuIGVtaXQgZW5kIG9uIHRoZSBuZXh0IHRpY2suXG4gICAgaWYgKG5PcmlnICE9PSBuICYmIHN0YXRlLmVuZGVkKSBlbmRSZWFkYWJsZSh0aGlzKTtcbiAgfVxuXG4gIGlmIChyZXQgIT09IG51bGwpIHRoaXMuZW1pdCgnZGF0YScsIHJldCk7XG5cbiAgcmV0dXJuIHJldDtcbn07XG5cbmZ1bmN0aW9uIG9uRW9mQ2h1bmsoc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoc3RhdGUuZW5kZWQpIHJldHVybjtcbiAgaWYgKHN0YXRlLmRlY29kZXIpIHtcbiAgICB2YXIgY2h1bmsgPSBzdGF0ZS5kZWNvZGVyLmVuZCgpO1xuICAgIGlmIChjaHVuayAmJiBjaHVuay5sZW5ndGgpIHtcbiAgICAgIHN0YXRlLmJ1ZmZlci5wdXNoKGNodW5rKTtcbiAgICAgIHN0YXRlLmxlbmd0aCArPSBzdGF0ZS5vYmplY3RNb2RlID8gMSA6IGNodW5rLmxlbmd0aDtcbiAgICB9XG4gIH1cbiAgc3RhdGUuZW5kZWQgPSB0cnVlO1xuXG4gIC8vIGVtaXQgJ3JlYWRhYmxlJyBub3cgdG8gbWFrZSBzdXJlIGl0IGdldHMgcGlja2VkIHVwLlxuICBlbWl0UmVhZGFibGUoc3RyZWFtKTtcbn1cblxuLy8gRG9uJ3QgZW1pdCByZWFkYWJsZSByaWdodCBhd2F5IGluIHN5bmMgbW9kZSwgYmVjYXVzZSB0aGlzIGNhbiB0cmlnZ2VyXG4vLyBhbm90aGVyIHJlYWQoKSBjYWxsID0+IHN0YWNrIG92ZXJmbG93LiAgVGhpcyB3YXksIGl0IG1pZ2h0IHRyaWdnZXJcbi8vIGEgbmV4dFRpY2sgcmVjdXJzaW9uIHdhcm5pbmcsIGJ1dCB0aGF0J3Mgbm90IHNvIGJhZC5cbmZ1bmN0aW9uIGVtaXRSZWFkYWJsZShzdHJlYW0pIHtcbiAgdmFyIHN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlO1xuICBzdGF0ZS5uZWVkUmVhZGFibGUgPSBmYWxzZTtcbiAgaWYgKCFzdGF0ZS5lbWl0dGVkUmVhZGFibGUpIHtcbiAgICBkZWJ1ZygnZW1pdFJlYWRhYmxlJywgc3RhdGUuZmxvd2luZyk7XG4gICAgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gdHJ1ZTtcbiAgICBpZiAoc3RhdGUuc3luYykgcG5hLm5leHRUaWNrKGVtaXRSZWFkYWJsZV8sIHN0cmVhbSk7ZWxzZSBlbWl0UmVhZGFibGVfKHN0cmVhbSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZW1pdFJlYWRhYmxlXyhzdHJlYW0pIHtcbiAgZGVidWcoJ2VtaXQgcmVhZGFibGUnKTtcbiAgc3RyZWFtLmVtaXQoJ3JlYWRhYmxlJyk7XG4gIGZsb3coc3RyZWFtKTtcbn1cblxuLy8gYXQgdGhpcyBwb2ludCwgdGhlIHVzZXIgaGFzIHByZXN1bWFibHkgc2VlbiB0aGUgJ3JlYWRhYmxlJyBldmVudCxcbi8vIGFuZCBjYWxsZWQgcmVhZCgpIHRvIGNvbnN1bWUgc29tZSBkYXRhLiAgdGhhdCBtYXkgaGF2ZSB0cmlnZ2VyZWRcbi8vIGluIHR1cm4gYW5vdGhlciBfcmVhZChuKSBjYWxsLCBpbiB3aGljaCBjYXNlIHJlYWRpbmcgPSB0cnVlIGlmXG4vLyBpdCdzIGluIHByb2dyZXNzLlxuLy8gSG93ZXZlciwgaWYgd2UncmUgbm90IGVuZGVkLCBvciByZWFkaW5nLCBhbmQgdGhlIGxlbmd0aCA8IGh3bSxcbi8vIHRoZW4gZ28gYWhlYWQgYW5kIHRyeSB0byByZWFkIHNvbWUgbW9yZSBwcmVlbXB0aXZlbHkuXG5mdW5jdGlvbiBtYXliZVJlYWRNb3JlKHN0cmVhbSwgc3RhdGUpIHtcbiAgaWYgKCFzdGF0ZS5yZWFkaW5nTW9yZSkge1xuICAgIHN0YXRlLnJlYWRpbmdNb3JlID0gdHJ1ZTtcbiAgICBwbmEubmV4dFRpY2sobWF5YmVSZWFkTW9yZV8sIHN0cmVhbSwgc3RhdGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1heWJlUmVhZE1vcmVfKHN0cmVhbSwgc3RhdGUpIHtcbiAgdmFyIGxlbiA9IHN0YXRlLmxlbmd0aDtcbiAgd2hpbGUgKCFzdGF0ZS5yZWFkaW5nICYmICFzdGF0ZS5mbG93aW5nICYmICFzdGF0ZS5lbmRlZCAmJiBzdGF0ZS5sZW5ndGggPCBzdGF0ZS5oaWdoV2F0ZXJNYXJrKSB7XG4gICAgZGVidWcoJ21heWJlUmVhZE1vcmUgcmVhZCAwJyk7XG4gICAgc3RyZWFtLnJlYWQoMCk7XG4gICAgaWYgKGxlbiA9PT0gc3RhdGUubGVuZ3RoKVxuICAgICAgLy8gZGlkbid0IGdldCBhbnkgZGF0YSwgc3RvcCBzcGlubmluZy5cbiAgICAgIGJyZWFrO2Vsc2UgbGVuID0gc3RhdGUubGVuZ3RoO1xuICB9XG4gIHN0YXRlLnJlYWRpbmdNb3JlID0gZmFsc2U7XG59XG5cbi8vIGFic3RyYWN0IG1ldGhvZC4gIHRvIGJlIG92ZXJyaWRkZW4gaW4gc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gY2xhc3Nlcy5cbi8vIGNhbGwgY2IoZXIsIGRhdGEpIHdoZXJlIGRhdGEgaXMgPD0gbiBpbiBsZW5ndGguXG4vLyBmb3IgdmlydHVhbCAobm9uLXN0cmluZywgbm9uLWJ1ZmZlcikgc3RyZWFtcywgXCJsZW5ndGhcIiBpcyBzb21ld2hhdFxuLy8gYXJiaXRyYXJ5LCBhbmQgcGVyaGFwcyBub3QgdmVyeSBtZWFuaW5nZnVsLlxuUmVhZGFibGUucHJvdG90eXBlLl9yZWFkID0gZnVuY3Rpb24gKG4pIHtcbiAgdGhpcy5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcignX3JlYWQoKSBpcyBub3QgaW1wbGVtZW50ZWQnKSk7XG59O1xuXG5SZWFkYWJsZS5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uIChkZXN0LCBwaXBlT3B0cykge1xuICB2YXIgc3JjID0gdGhpcztcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcblxuICBzd2l0Y2ggKHN0YXRlLnBpcGVzQ291bnQpIHtcbiAgICBjYXNlIDA6XG4gICAgICBzdGF0ZS5waXBlcyA9IGRlc3Q7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDE6XG4gICAgICBzdGF0ZS5waXBlcyA9IFtzdGF0ZS5waXBlcywgZGVzdF07XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgc3RhdGUucGlwZXMucHVzaChkZXN0KTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIHN0YXRlLnBpcGVzQ291bnQgKz0gMTtcbiAgZGVidWcoJ3BpcGUgY291bnQ9JWQgb3B0cz0laicsIHN0YXRlLnBpcGVzQ291bnQsIHBpcGVPcHRzKTtcblxuICB2YXIgZG9FbmQgPSAoIXBpcGVPcHRzIHx8IHBpcGVPcHRzLmVuZCAhPT0gZmFsc2UpICYmIGRlc3QgIT09IHByb2Nlc3Muc3Rkb3V0ICYmIGRlc3QgIT09IHByb2Nlc3Muc3RkZXJyO1xuXG4gIHZhciBlbmRGbiA9IGRvRW5kID8gb25lbmQgOiB1bnBpcGU7XG4gIGlmIChzdGF0ZS5lbmRFbWl0dGVkKSBwbmEubmV4dFRpY2soZW5kRm4pO2Vsc2Ugc3JjLm9uY2UoJ2VuZCcsIGVuZEZuKTtcblxuICBkZXN0Lm9uKCd1bnBpcGUnLCBvbnVucGlwZSk7XG4gIGZ1bmN0aW9uIG9udW5waXBlKHJlYWRhYmxlLCB1bnBpcGVJbmZvKSB7XG4gICAgZGVidWcoJ29udW5waXBlJyk7XG4gICAgaWYgKHJlYWRhYmxlID09PSBzcmMpIHtcbiAgICAgIGlmICh1bnBpcGVJbmZvICYmIHVucGlwZUluZm8uaGFzVW5waXBlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgdW5waXBlSW5mby5oYXNVbnBpcGVkID0gdHJ1ZTtcbiAgICAgICAgY2xlYW51cCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG9uZW5kKCkge1xuICAgIGRlYnVnKCdvbmVuZCcpO1xuICAgIGRlc3QuZW5kKCk7XG4gIH1cblxuICAvLyB3aGVuIHRoZSBkZXN0IGRyYWlucywgaXQgcmVkdWNlcyB0aGUgYXdhaXREcmFpbiBjb3VudGVyXG4gIC8vIG9uIHRoZSBzb3VyY2UuICBUaGlzIHdvdWxkIGJlIG1vcmUgZWxlZ2FudCB3aXRoIGEgLm9uY2UoKVxuICAvLyBoYW5kbGVyIGluIGZsb3coKSwgYnV0IGFkZGluZyBhbmQgcmVtb3ZpbmcgcmVwZWF0ZWRseSBpc1xuICAvLyB0b28gc2xvdy5cbiAgdmFyIG9uZHJhaW4gPSBwaXBlT25EcmFpbihzcmMpO1xuICBkZXN0Lm9uKCdkcmFpbicsIG9uZHJhaW4pO1xuXG4gIHZhciBjbGVhbmVkVXAgPSBmYWxzZTtcbiAgZnVuY3Rpb24gY2xlYW51cCgpIHtcbiAgICBkZWJ1ZygnY2xlYW51cCcpO1xuICAgIC8vIGNsZWFudXAgZXZlbnQgaGFuZGxlcnMgb25jZSB0aGUgcGlwZSBpcyBicm9rZW5cbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uY2xvc2UpO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2ZpbmlzaCcsIG9uZmluaXNoKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdkcmFpbicsIG9uZHJhaW4pO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgb25lcnJvcik7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcigndW5waXBlJywgb251bnBpcGUpO1xuICAgIHNyYy5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25lbmQpO1xuICAgIHNyYy5yZW1vdmVMaXN0ZW5lcignZW5kJywgdW5waXBlKTtcbiAgICBzcmMucmVtb3ZlTGlzdGVuZXIoJ2RhdGEnLCBvbmRhdGEpO1xuXG4gICAgY2xlYW5lZFVwID0gdHJ1ZTtcblxuICAgIC8vIGlmIHRoZSByZWFkZXIgaXMgd2FpdGluZyBmb3IgYSBkcmFpbiBldmVudCBmcm9tIHRoaXNcbiAgICAvLyBzcGVjaWZpYyB3cml0ZXIsIHRoZW4gaXQgd291bGQgY2F1c2UgaXQgdG8gbmV2ZXIgc3RhcnRcbiAgICAvLyBmbG93aW5nIGFnYWluLlxuICAgIC8vIFNvLCBpZiB0aGlzIGlzIGF3YWl0aW5nIGEgZHJhaW4sIHRoZW4gd2UganVzdCBjYWxsIGl0IG5vdy5cbiAgICAvLyBJZiB3ZSBkb24ndCBrbm93LCB0aGVuIGFzc3VtZSB0aGF0IHdlIGFyZSB3YWl0aW5nIGZvciBvbmUuXG4gICAgaWYgKHN0YXRlLmF3YWl0RHJhaW4gJiYgKCFkZXN0Ll93cml0YWJsZVN0YXRlIHx8IGRlc3QuX3dyaXRhYmxlU3RhdGUubmVlZERyYWluKSkgb25kcmFpbigpO1xuICB9XG5cbiAgLy8gSWYgdGhlIHVzZXIgcHVzaGVzIG1vcmUgZGF0YSB3aGlsZSB3ZSdyZSB3cml0aW5nIHRvIGRlc3QgdGhlbiB3ZSdsbCBlbmQgdXBcbiAgLy8gaW4gb25kYXRhIGFnYWluLiBIb3dldmVyLCB3ZSBvbmx5IHdhbnQgdG8gaW5jcmVhc2UgYXdhaXREcmFpbiBvbmNlIGJlY2F1c2VcbiAgLy8gZGVzdCB3aWxsIG9ubHkgZW1pdCBvbmUgJ2RyYWluJyBldmVudCBmb3IgdGhlIG11bHRpcGxlIHdyaXRlcy5cbiAgLy8gPT4gSW50cm9kdWNlIGEgZ3VhcmQgb24gaW5jcmVhc2luZyBhd2FpdERyYWluLlxuICB2YXIgaW5jcmVhc2VkQXdhaXREcmFpbiA9IGZhbHNlO1xuICBzcmMub24oJ2RhdGEnLCBvbmRhdGEpO1xuICBmdW5jdGlvbiBvbmRhdGEoY2h1bmspIHtcbiAgICBkZWJ1Zygnb25kYXRhJyk7XG4gICAgaW5jcmVhc2VkQXdhaXREcmFpbiA9IGZhbHNlO1xuICAgIHZhciByZXQgPSBkZXN0LndyaXRlKGNodW5rKTtcbiAgICBpZiAoZmFsc2UgPT09IHJldCAmJiAhaW5jcmVhc2VkQXdhaXREcmFpbikge1xuICAgICAgLy8gSWYgdGhlIHVzZXIgdW5waXBlZCBkdXJpbmcgYGRlc3Qud3JpdGUoKWAsIGl0IGlzIHBvc3NpYmxlXG4gICAgICAvLyB0byBnZXQgc3R1Y2sgaW4gYSBwZXJtYW5lbnRseSBwYXVzZWQgc3RhdGUgaWYgdGhhdCB3cml0ZVxuICAgICAgLy8gYWxzbyByZXR1cm5lZCBmYWxzZS5cbiAgICAgIC8vID0+IENoZWNrIHdoZXRoZXIgYGRlc3RgIGlzIHN0aWxsIGEgcGlwaW5nIGRlc3RpbmF0aW9uLlxuICAgICAgaWYgKChzdGF0ZS5waXBlc0NvdW50ID09PSAxICYmIHN0YXRlLnBpcGVzID09PSBkZXN0IHx8IHN0YXRlLnBpcGVzQ291bnQgPiAxICYmIGluZGV4T2Yoc3RhdGUucGlwZXMsIGRlc3QpICE9PSAtMSkgJiYgIWNsZWFuZWRVcCkge1xuICAgICAgICBkZWJ1ZygnZmFsc2Ugd3JpdGUgcmVzcG9uc2UsIHBhdXNlJywgc3RhdGUuYXdhaXREcmFpbik7XG4gICAgICAgIHN0YXRlLmF3YWl0RHJhaW4rKztcbiAgICAgICAgaW5jcmVhc2VkQXdhaXREcmFpbiA9IHRydWU7XG4gICAgICB9XG4gICAgICBzcmMucGF1c2UoKTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgZGVzdCBoYXMgYW4gZXJyb3IsIHRoZW4gc3RvcCBwaXBpbmcgaW50byBpdC5cbiAgLy8gaG93ZXZlciwgZG9uJ3Qgc3VwcHJlc3MgdGhlIHRocm93aW5nIGJlaGF2aW9yIGZvciB0aGlzLlxuICBmdW5jdGlvbiBvbmVycm9yKGVyKSB7XG4gICAgZGVidWcoJ29uZXJyb3InLCBlcik7XG4gICAgdW5waXBlKCk7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbmVycm9yKTtcbiAgICBpZiAoRUVsaXN0ZW5lckNvdW50KGRlc3QsICdlcnJvcicpID09PSAwKSBkZXN0LmVtaXQoJ2Vycm9yJywgZXIpO1xuICB9XG5cbiAgLy8gTWFrZSBzdXJlIG91ciBlcnJvciBoYW5kbGVyIGlzIGF0dGFjaGVkIGJlZm9yZSB1c2VybGFuZCBvbmVzLlxuICBwcmVwZW5kTGlzdGVuZXIoZGVzdCwgJ2Vycm9yJywgb25lcnJvcik7XG5cbiAgLy8gQm90aCBjbG9zZSBhbmQgZmluaXNoIHNob3VsZCB0cmlnZ2VyIHVucGlwZSwgYnV0IG9ubHkgb25jZS5cbiAgZnVuY3Rpb24gb25jbG9zZSgpIHtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdmaW5pc2gnLCBvbmZpbmlzaCk7XG4gICAgdW5waXBlKCk7XG4gIH1cbiAgZGVzdC5vbmNlKCdjbG9zZScsIG9uY2xvc2UpO1xuICBmdW5jdGlvbiBvbmZpbmlzaCgpIHtcbiAgICBkZWJ1Zygnb25maW5pc2gnKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uY2xvc2UpO1xuICAgIHVucGlwZSgpO1xuICB9XG4gIGRlc3Qub25jZSgnZmluaXNoJywgb25maW5pc2gpO1xuXG4gIGZ1bmN0aW9uIHVucGlwZSgpIHtcbiAgICBkZWJ1ZygndW5waXBlJyk7XG4gICAgc3JjLnVucGlwZShkZXN0KTtcbiAgfVxuXG4gIC8vIHRlbGwgdGhlIGRlc3QgdGhhdCBpdCdzIGJlaW5nIHBpcGVkIHRvXG4gIGRlc3QuZW1pdCgncGlwZScsIHNyYyk7XG5cbiAgLy8gc3RhcnQgdGhlIGZsb3cgaWYgaXQgaGFzbid0IGJlZW4gc3RhcnRlZCBhbHJlYWR5LlxuICBpZiAoIXN0YXRlLmZsb3dpbmcpIHtcbiAgICBkZWJ1ZygncGlwZSByZXN1bWUnKTtcbiAgICBzcmMucmVzdW1lKCk7XG4gIH1cblxuICByZXR1cm4gZGVzdDtcbn07XG5cbmZ1bmN0aW9uIHBpcGVPbkRyYWluKHNyYykge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzdGF0ZSA9IHNyYy5fcmVhZGFibGVTdGF0ZTtcbiAgICBkZWJ1ZygncGlwZU9uRHJhaW4nLCBzdGF0ZS5hd2FpdERyYWluKTtcbiAgICBpZiAoc3RhdGUuYXdhaXREcmFpbikgc3RhdGUuYXdhaXREcmFpbi0tO1xuICAgIGlmIChzdGF0ZS5hd2FpdERyYWluID09PSAwICYmIEVFbGlzdGVuZXJDb3VudChzcmMsICdkYXRhJykpIHtcbiAgICAgIHN0YXRlLmZsb3dpbmcgPSB0cnVlO1xuICAgICAgZmxvdyhzcmMpO1xuICAgIH1cbiAgfTtcbn1cblxuUmVhZGFibGUucHJvdG90eXBlLnVucGlwZSA9IGZ1bmN0aW9uIChkZXN0KSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gIHZhciB1bnBpcGVJbmZvID0geyBoYXNVbnBpcGVkOiBmYWxzZSB9O1xuXG4gIC8vIGlmIHdlJ3JlIG5vdCBwaXBpbmcgYW55d2hlcmUsIHRoZW4gZG8gbm90aGluZy5cbiAgaWYgKHN0YXRlLnBpcGVzQ291bnQgPT09IDApIHJldHVybiB0aGlzO1xuXG4gIC8vIGp1c3Qgb25lIGRlc3RpbmF0aW9uLiAgbW9zdCBjb21tb24gY2FzZS5cbiAgaWYgKHN0YXRlLnBpcGVzQ291bnQgPT09IDEpIHtcbiAgICAvLyBwYXNzZWQgaW4gb25lLCBidXQgaXQncyBub3QgdGhlIHJpZ2h0IG9uZS5cbiAgICBpZiAoZGVzdCAmJiBkZXN0ICE9PSBzdGF0ZS5waXBlcykgcmV0dXJuIHRoaXM7XG5cbiAgICBpZiAoIWRlc3QpIGRlc3QgPSBzdGF0ZS5waXBlcztcblxuICAgIC8vIGdvdCBhIG1hdGNoLlxuICAgIHN0YXRlLnBpcGVzID0gbnVsbDtcbiAgICBzdGF0ZS5waXBlc0NvdW50ID0gMDtcbiAgICBzdGF0ZS5mbG93aW5nID0gZmFsc2U7XG4gICAgaWYgKGRlc3QpIGRlc3QuZW1pdCgndW5waXBlJywgdGhpcywgdW5waXBlSW5mbyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBzbG93IGNhc2UuIG11bHRpcGxlIHBpcGUgZGVzdGluYXRpb25zLlxuXG4gIGlmICghZGVzdCkge1xuICAgIC8vIHJlbW92ZSBhbGwuXG4gICAgdmFyIGRlc3RzID0gc3RhdGUucGlwZXM7XG4gICAgdmFyIGxlbiA9IHN0YXRlLnBpcGVzQ291bnQ7XG4gICAgc3RhdGUucGlwZXMgPSBudWxsO1xuICAgIHN0YXRlLnBpcGVzQ291bnQgPSAwO1xuICAgIHN0YXRlLmZsb3dpbmcgPSBmYWxzZTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGRlc3RzW2ldLmVtaXQoJ3VucGlwZScsIHRoaXMsIHsgaGFzVW5waXBlZDogZmFsc2UgfSk7XG4gICAgfXJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gdHJ5IHRvIGZpbmQgdGhlIHJpZ2h0IG9uZS5cbiAgdmFyIGluZGV4ID0gaW5kZXhPZihzdGF0ZS5waXBlcywgZGVzdCk7XG4gIGlmIChpbmRleCA9PT0gLTEpIHJldHVybiB0aGlzO1xuXG4gIHN0YXRlLnBpcGVzLnNwbGljZShpbmRleCwgMSk7XG4gIHN0YXRlLnBpcGVzQ291bnQgLT0gMTtcbiAgaWYgKHN0YXRlLnBpcGVzQ291bnQgPT09IDEpIHN0YXRlLnBpcGVzID0gc3RhdGUucGlwZXNbMF07XG5cbiAgZGVzdC5lbWl0KCd1bnBpcGUnLCB0aGlzLCB1bnBpcGVJbmZvKTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8vIHNldCB1cCBkYXRhIGV2ZW50cyBpZiB0aGV5IGFyZSBhc2tlZCBmb3Jcbi8vIEVuc3VyZSByZWFkYWJsZSBsaXN0ZW5lcnMgZXZlbnR1YWxseSBnZXQgc29tZXRoaW5nXG5SZWFkYWJsZS5wcm90b3R5cGUub24gPSBmdW5jdGlvbiAoZXYsIGZuKSB7XG4gIHZhciByZXMgPSBTdHJlYW0ucHJvdG90eXBlLm9uLmNhbGwodGhpcywgZXYsIGZuKTtcblxuICBpZiAoZXYgPT09ICdkYXRhJykge1xuICAgIC8vIFN0YXJ0IGZsb3dpbmcgb24gbmV4dCB0aWNrIGlmIHN0cmVhbSBpc24ndCBleHBsaWNpdGx5IHBhdXNlZFxuICAgIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcgIT09IGZhbHNlKSB0aGlzLnJlc3VtZSgpO1xuICB9IGVsc2UgaWYgKGV2ID09PSAncmVhZGFibGUnKSB7XG4gICAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgICBpZiAoIXN0YXRlLmVuZEVtaXR0ZWQgJiYgIXN0YXRlLnJlYWRhYmxlTGlzdGVuaW5nKSB7XG4gICAgICBzdGF0ZS5yZWFkYWJsZUxpc3RlbmluZyA9IHN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWU7XG4gICAgICBzdGF0ZS5lbWl0dGVkUmVhZGFibGUgPSBmYWxzZTtcbiAgICAgIGlmICghc3RhdGUucmVhZGluZykge1xuICAgICAgICBwbmEubmV4dFRpY2soblJlYWRpbmdOZXh0VGljaywgdGhpcyk7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlLmxlbmd0aCkge1xuICAgICAgICBlbWl0UmVhZGFibGUodGhpcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlcztcbn07XG5SZWFkYWJsZS5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBSZWFkYWJsZS5wcm90b3R5cGUub247XG5cbmZ1bmN0aW9uIG5SZWFkaW5nTmV4dFRpY2soc2VsZikge1xuICBkZWJ1ZygncmVhZGFibGUgbmV4dHRpY2sgcmVhZCAwJyk7XG4gIHNlbGYucmVhZCgwKTtcbn1cblxuLy8gcGF1c2UoKSBhbmQgcmVzdW1lKCkgYXJlIHJlbW5hbnRzIG9mIHRoZSBsZWdhY3kgcmVhZGFibGUgc3RyZWFtIEFQSVxuLy8gSWYgdGhlIHVzZXIgdXNlcyB0aGVtLCB0aGVuIHN3aXRjaCBpbnRvIG9sZCBtb2RlLlxuUmVhZGFibGUucHJvdG90eXBlLnJlc3VtZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgaWYgKCFzdGF0ZS5mbG93aW5nKSB7XG4gICAgZGVidWcoJ3Jlc3VtZScpO1xuICAgIHN0YXRlLmZsb3dpbmcgPSB0cnVlO1xuICAgIHJlc3VtZSh0aGlzLCBzdGF0ZSk7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5mdW5jdGlvbiByZXN1bWUoc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoIXN0YXRlLnJlc3VtZVNjaGVkdWxlZCkge1xuICAgIHN0YXRlLnJlc3VtZVNjaGVkdWxlZCA9IHRydWU7XG4gICAgcG5hLm5leHRUaWNrKHJlc3VtZV8sIHN0cmVhbSwgc3RhdGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc3VtZV8oc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoIXN0YXRlLnJlYWRpbmcpIHtcbiAgICBkZWJ1ZygncmVzdW1lIHJlYWQgMCcpO1xuICAgIHN0cmVhbS5yZWFkKDApO1xuICB9XG5cbiAgc3RhdGUucmVzdW1lU2NoZWR1bGVkID0gZmFsc2U7XG4gIHN0YXRlLmF3YWl0RHJhaW4gPSAwO1xuICBzdHJlYW0uZW1pdCgncmVzdW1lJyk7XG4gIGZsb3coc3RyZWFtKTtcbiAgaWYgKHN0YXRlLmZsb3dpbmcgJiYgIXN0YXRlLnJlYWRpbmcpIHN0cmVhbS5yZWFkKDApO1xufVxuXG5SZWFkYWJsZS5wcm90b3R5cGUucGF1c2UgPSBmdW5jdGlvbiAoKSB7XG4gIGRlYnVnKCdjYWxsIHBhdXNlIGZsb3dpbmc9JWonLCB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcpO1xuICBpZiAoZmFsc2UgIT09IHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZykge1xuICAgIGRlYnVnKCdwYXVzZScpO1xuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyA9IGZhbHNlO1xuICAgIHRoaXMuZW1pdCgncGF1c2UnKTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn07XG5cbmZ1bmN0aW9uIGZsb3coc3RyZWFtKSB7XG4gIHZhciBzdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZTtcbiAgZGVidWcoJ2Zsb3cnLCBzdGF0ZS5mbG93aW5nKTtcbiAgd2hpbGUgKHN0YXRlLmZsb3dpbmcgJiYgc3RyZWFtLnJlYWQoKSAhPT0gbnVsbCkge31cbn1cblxuLy8gd3JhcCBhbiBvbGQtc3R5bGUgc3RyZWFtIGFzIHRoZSBhc3luYyBkYXRhIHNvdXJjZS5cbi8vIFRoaXMgaXMgKm5vdCogcGFydCBvZiB0aGUgcmVhZGFibGUgc3RyZWFtIGludGVyZmFjZS5cbi8vIEl0IGlzIGFuIHVnbHkgdW5mb3J0dW5hdGUgbWVzcyBvZiBoaXN0b3J5LlxuUmVhZGFibGUucHJvdG90eXBlLndyYXAgPSBmdW5jdGlvbiAoc3RyZWFtKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgdmFyIHBhdXNlZCA9IGZhbHNlO1xuXG4gIHN0cmVhbS5vbignZW5kJywgZnVuY3Rpb24gKCkge1xuICAgIGRlYnVnKCd3cmFwcGVkIGVuZCcpO1xuICAgIGlmIChzdGF0ZS5kZWNvZGVyICYmICFzdGF0ZS5lbmRlZCkge1xuICAgICAgdmFyIGNodW5rID0gc3RhdGUuZGVjb2Rlci5lbmQoKTtcbiAgICAgIGlmIChjaHVuayAmJiBjaHVuay5sZW5ndGgpIF90aGlzLnB1c2goY2h1bmspO1xuICAgIH1cblxuICAgIF90aGlzLnB1c2gobnVsbCk7XG4gIH0pO1xuXG4gIHN0cmVhbS5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykge1xuICAgIGRlYnVnKCd3cmFwcGVkIGRhdGEnKTtcbiAgICBpZiAoc3RhdGUuZGVjb2RlcikgY2h1bmsgPSBzdGF0ZS5kZWNvZGVyLndyaXRlKGNodW5rKTtcblxuICAgIC8vIGRvbid0IHNraXAgb3ZlciBmYWxzeSB2YWx1ZXMgaW4gb2JqZWN0TW9kZVxuICAgIGlmIChzdGF0ZS5vYmplY3RNb2RlICYmIChjaHVuayA9PT0gbnVsbCB8fCBjaHVuayA9PT0gdW5kZWZpbmVkKSkgcmV0dXJuO2Vsc2UgaWYgKCFzdGF0ZS5vYmplY3RNb2RlICYmICghY2h1bmsgfHwgIWNodW5rLmxlbmd0aCkpIHJldHVybjtcblxuICAgIHZhciByZXQgPSBfdGhpcy5wdXNoKGNodW5rKTtcbiAgICBpZiAoIXJldCkge1xuICAgICAgcGF1c2VkID0gdHJ1ZTtcbiAgICAgIHN0cmVhbS5wYXVzZSgpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gcHJveHkgYWxsIHRoZSBvdGhlciBtZXRob2RzLlxuICAvLyBpbXBvcnRhbnQgd2hlbiB3cmFwcGluZyBmaWx0ZXJzIGFuZCBkdXBsZXhlcy5cbiAgZm9yICh2YXIgaSBpbiBzdHJlYW0pIHtcbiAgICBpZiAodGhpc1tpXSA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiBzdHJlYW1baV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXNbaV0gPSBmdW5jdGlvbiAobWV0aG9kKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHN0cmVhbVttZXRob2RdLmFwcGx5KHN0cmVhbSwgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcbiAgICAgIH0oaSk7XG4gICAgfVxuICB9XG5cbiAgLy8gcHJveHkgY2VydGFpbiBpbXBvcnRhbnQgZXZlbnRzLlxuICBmb3IgKHZhciBuID0gMDsgbiA8IGtQcm94eUV2ZW50cy5sZW5ndGg7IG4rKykge1xuICAgIHN0cmVhbS5vbihrUHJveHlFdmVudHNbbl0sIHRoaXMuZW1pdC5iaW5kKHRoaXMsIGtQcm94eUV2ZW50c1tuXSkpO1xuICB9XG5cbiAgLy8gd2hlbiB3ZSB0cnkgdG8gY29uc3VtZSBzb21lIG1vcmUgYnl0ZXMsIHNpbXBseSB1bnBhdXNlIHRoZVxuICAvLyB1bmRlcmx5aW5nIHN0cmVhbS5cbiAgdGhpcy5fcmVhZCA9IGZ1bmN0aW9uIChuKSB7XG4gICAgZGVidWcoJ3dyYXBwZWQgX3JlYWQnLCBuKTtcbiAgICBpZiAocGF1c2VkKSB7XG4gICAgICBwYXVzZWQgPSBmYWxzZTtcbiAgICAgIHN0cmVhbS5yZXN1bWUoKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoUmVhZGFibGUucHJvdG90eXBlLCAncmVhZGFibGVIaWdoV2F0ZXJNYXJrJywge1xuICAvLyBtYWtpbmcgaXQgZXhwbGljaXQgdGhpcyBwcm9wZXJ0eSBpcyBub3QgZW51bWVyYWJsZVxuICAvLyBiZWNhdXNlIG90aGVyd2lzZSBzb21lIHByb3RvdHlwZSBtYW5pcHVsYXRpb24gaW5cbiAgLy8gdXNlcmxhbmQgd2lsbCBmYWlsXG4gIGVudW1lcmFibGU6IGZhbHNlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrO1xuICB9XG59KTtcblxuLy8gZXhwb3NlZCBmb3IgdGVzdGluZyBwdXJwb3NlcyBvbmx5LlxuUmVhZGFibGUuX2Zyb21MaXN0ID0gZnJvbUxpc3Q7XG5cbi8vIFBsdWNrIG9mZiBuIGJ5dGVzIGZyb20gYW4gYXJyYXkgb2YgYnVmZmVycy5cbi8vIExlbmd0aCBpcyB0aGUgY29tYmluZWQgbGVuZ3RocyBvZiBhbGwgdGhlIGJ1ZmZlcnMgaW4gdGhlIGxpc3QuXG4vLyBUaGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGJlIGlubGluYWJsZSwgc28gcGxlYXNlIHRha2UgY2FyZSB3aGVuIG1ha2luZ1xuLy8gY2hhbmdlcyB0byB0aGUgZnVuY3Rpb24gYm9keS5cbmZ1bmN0aW9uIGZyb21MaXN0KG4sIHN0YXRlKSB7XG4gIC8vIG5vdGhpbmcgYnVmZmVyZWRcbiAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG5cbiAgdmFyIHJldDtcbiAgaWYgKHN0YXRlLm9iamVjdE1vZGUpIHJldCA9IHN0YXRlLmJ1ZmZlci5zaGlmdCgpO2Vsc2UgaWYgKCFuIHx8IG4gPj0gc3RhdGUubGVuZ3RoKSB7XG4gICAgLy8gcmVhZCBpdCBhbGwsIHRydW5jYXRlIHRoZSBsaXN0XG4gICAgaWYgKHN0YXRlLmRlY29kZXIpIHJldCA9IHN0YXRlLmJ1ZmZlci5qb2luKCcnKTtlbHNlIGlmIChzdGF0ZS5idWZmZXIubGVuZ3RoID09PSAxKSByZXQgPSBzdGF0ZS5idWZmZXIuaGVhZC5kYXRhO2Vsc2UgcmV0ID0gc3RhdGUuYnVmZmVyLmNvbmNhdChzdGF0ZS5sZW5ndGgpO1xuICAgIHN0YXRlLmJ1ZmZlci5jbGVhcigpO1xuICB9IGVsc2Uge1xuICAgIC8vIHJlYWQgcGFydCBvZiBsaXN0XG4gICAgcmV0ID0gZnJvbUxpc3RQYXJ0aWFsKG4sIHN0YXRlLmJ1ZmZlciwgc3RhdGUuZGVjb2Rlcik7XG4gIH1cblxuICByZXR1cm4gcmV0O1xufVxuXG4vLyBFeHRyYWN0cyBvbmx5IGVub3VnaCBidWZmZXJlZCBkYXRhIHRvIHNhdGlzZnkgdGhlIGFtb3VudCByZXF1ZXN0ZWQuXG4vLyBUaGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGJlIGlubGluYWJsZSwgc28gcGxlYXNlIHRha2UgY2FyZSB3aGVuIG1ha2luZ1xuLy8gY2hhbmdlcyB0byB0aGUgZnVuY3Rpb24gYm9keS5cbmZ1bmN0aW9uIGZyb21MaXN0UGFydGlhbChuLCBsaXN0LCBoYXNTdHJpbmdzKSB7XG4gIHZhciByZXQ7XG4gIGlmIChuIDwgbGlzdC5oZWFkLmRhdGEubGVuZ3RoKSB7XG4gICAgLy8gc2xpY2UgaXMgdGhlIHNhbWUgZm9yIGJ1ZmZlcnMgYW5kIHN0cmluZ3NcbiAgICByZXQgPSBsaXN0LmhlYWQuZGF0YS5zbGljZSgwLCBuKTtcbiAgICBsaXN0LmhlYWQuZGF0YSA9IGxpc3QuaGVhZC5kYXRhLnNsaWNlKG4pO1xuICB9IGVsc2UgaWYgKG4gPT09IGxpc3QuaGVhZC5kYXRhLmxlbmd0aCkge1xuICAgIC8vIGZpcnN0IGNodW5rIGlzIGEgcGVyZmVjdCBtYXRjaFxuICAgIHJldCA9IGxpc3Quc2hpZnQoKTtcbiAgfSBlbHNlIHtcbiAgICAvLyByZXN1bHQgc3BhbnMgbW9yZSB0aGFuIG9uZSBidWZmZXJcbiAgICByZXQgPSBoYXNTdHJpbmdzID8gY29weUZyb21CdWZmZXJTdHJpbmcobiwgbGlzdCkgOiBjb3B5RnJvbUJ1ZmZlcihuLCBsaXN0KTtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG4vLyBDb3BpZXMgYSBzcGVjaWZpZWQgYW1vdW50IG9mIGNoYXJhY3RlcnMgZnJvbSB0aGUgbGlzdCBvZiBidWZmZXJlZCBkYXRhXG4vLyBjaHVua3MuXG4vLyBUaGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGJlIGlubGluYWJsZSwgc28gcGxlYXNlIHRha2UgY2FyZSB3aGVuIG1ha2luZ1xuLy8gY2hhbmdlcyB0byB0aGUgZnVuY3Rpb24gYm9keS5cbmZ1bmN0aW9uIGNvcHlGcm9tQnVmZmVyU3RyaW5nKG4sIGxpc3QpIHtcbiAgdmFyIHAgPSBsaXN0LmhlYWQ7XG4gIHZhciBjID0gMTtcbiAgdmFyIHJldCA9IHAuZGF0YTtcbiAgbiAtPSByZXQubGVuZ3RoO1xuICB3aGlsZSAocCA9IHAubmV4dCkge1xuICAgIHZhciBzdHIgPSBwLmRhdGE7XG4gICAgdmFyIG5iID0gbiA+IHN0ci5sZW5ndGggPyBzdHIubGVuZ3RoIDogbjtcbiAgICBpZiAobmIgPT09IHN0ci5sZW5ndGgpIHJldCArPSBzdHI7ZWxzZSByZXQgKz0gc3RyLnNsaWNlKDAsIG4pO1xuICAgIG4gLT0gbmI7XG4gICAgaWYgKG4gPT09IDApIHtcbiAgICAgIGlmIChuYiA9PT0gc3RyLmxlbmd0aCkge1xuICAgICAgICArK2M7XG4gICAgICAgIGlmIChwLm5leHQpIGxpc3QuaGVhZCA9IHAubmV4dDtlbHNlIGxpc3QuaGVhZCA9IGxpc3QudGFpbCA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsaXN0LmhlYWQgPSBwO1xuICAgICAgICBwLmRhdGEgPSBzdHIuc2xpY2UobmIpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICAgICsrYztcbiAgfVxuICBsaXN0Lmxlbmd0aCAtPSBjO1xuICByZXR1cm4gcmV0O1xufVxuXG4vLyBDb3BpZXMgYSBzcGVjaWZpZWQgYW1vdW50IG9mIGJ5dGVzIGZyb20gdGhlIGxpc3Qgb2YgYnVmZmVyZWQgZGF0YSBjaHVua3MuXG4vLyBUaGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGJlIGlubGluYWJsZSwgc28gcGxlYXNlIHRha2UgY2FyZSB3aGVuIG1ha2luZ1xuLy8gY2hhbmdlcyB0byB0aGUgZnVuY3Rpb24gYm9keS5cbmZ1bmN0aW9uIGNvcHlGcm9tQnVmZmVyKG4sIGxpc3QpIHtcbiAgdmFyIHJldCA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShuKTtcbiAgdmFyIHAgPSBsaXN0LmhlYWQ7XG4gIHZhciBjID0gMTtcbiAgcC5kYXRhLmNvcHkocmV0KTtcbiAgbiAtPSBwLmRhdGEubGVuZ3RoO1xuICB3aGlsZSAocCA9IHAubmV4dCkge1xuICAgIHZhciBidWYgPSBwLmRhdGE7XG4gICAgdmFyIG5iID0gbiA+IGJ1Zi5sZW5ndGggPyBidWYubGVuZ3RoIDogbjtcbiAgICBidWYuY29weShyZXQsIHJldC5sZW5ndGggLSBuLCAwLCBuYik7XG4gICAgbiAtPSBuYjtcbiAgICBpZiAobiA9PT0gMCkge1xuICAgICAgaWYgKG5iID09PSBidWYubGVuZ3RoKSB7XG4gICAgICAgICsrYztcbiAgICAgICAgaWYgKHAubmV4dCkgbGlzdC5oZWFkID0gcC5uZXh0O2Vsc2UgbGlzdC5oZWFkID0gbGlzdC50YWlsID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxpc3QuaGVhZCA9IHA7XG4gICAgICAgIHAuZGF0YSA9IGJ1Zi5zbGljZShuYik7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgKytjO1xuICB9XG4gIGxpc3QubGVuZ3RoIC09IGM7XG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIGVuZFJlYWRhYmxlKHN0cmVhbSkge1xuICB2YXIgc3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGU7XG5cbiAgLy8gSWYgd2UgZ2V0IGhlcmUgYmVmb3JlIGNvbnN1bWluZyBhbGwgdGhlIGJ5dGVzLCB0aGVuIHRoYXQgaXMgYVxuICAvLyBidWcgaW4gbm9kZS4gIFNob3VsZCBuZXZlciBoYXBwZW4uXG4gIGlmIChzdGF0ZS5sZW5ndGggPiAwKSB0aHJvdyBuZXcgRXJyb3IoJ1wiZW5kUmVhZGFibGUoKVwiIGNhbGxlZCBvbiBub24tZW1wdHkgc3RyZWFtJyk7XG5cbiAgaWYgKCFzdGF0ZS5lbmRFbWl0dGVkKSB7XG4gICAgc3RhdGUuZW5kZWQgPSB0cnVlO1xuICAgIHBuYS5uZXh0VGljayhlbmRSZWFkYWJsZU5ULCBzdGF0ZSwgc3RyZWFtKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBlbmRSZWFkYWJsZU5UKHN0YXRlLCBzdHJlYW0pIHtcbiAgLy8gQ2hlY2sgdGhhdCB3ZSBkaWRuJ3QgZ2V0IG9uZSBsYXN0IHVuc2hpZnQuXG4gIGlmICghc3RhdGUuZW5kRW1pdHRlZCAmJiBzdGF0ZS5sZW5ndGggPT09IDApIHtcbiAgICBzdGF0ZS5lbmRFbWl0dGVkID0gdHJ1ZTtcbiAgICBzdHJlYW0ucmVhZGFibGUgPSBmYWxzZTtcbiAgICBzdHJlYW0uZW1pdCgnZW5kJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5kZXhPZih4cywgeCkge1xuICBmb3IgKHZhciBpID0gMCwgbCA9IHhzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGlmICh4c1tpXSA9PT0geCkgcmV0dXJuIGk7XG4gIH1cbiAgcmV0dXJuIC0xO1xufSIsCiAgICAiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbi8vIGEgdHJhbnNmb3JtIHN0cmVhbSBpcyBhIHJlYWRhYmxlL3dyaXRhYmxlIHN0cmVhbSB3aGVyZSB5b3UgZG9cbi8vIHNvbWV0aGluZyB3aXRoIHRoZSBkYXRhLiAgU29tZXRpbWVzIGl0J3MgY2FsbGVkIGEgXCJmaWx0ZXJcIixcbi8vIGJ1dCB0aGF0J3Mgbm90IGEgZ3JlYXQgbmFtZSBmb3IgaXQsIHNpbmNlIHRoYXQgaW1wbGllcyBhIHRoaW5nIHdoZXJlXG4vLyBzb21lIGJpdHMgcGFzcyB0aHJvdWdoLCBhbmQgb3RoZXJzIGFyZSBzaW1wbHkgaWdub3JlZC4gIChUaGF0IHdvdWxkXG4vLyBiZSBhIHZhbGlkIGV4YW1wbGUgb2YgYSB0cmFuc2Zvcm0sIG9mIGNvdXJzZS4pXG4vL1xuLy8gV2hpbGUgdGhlIG91dHB1dCBpcyBjYXVzYWxseSByZWxhdGVkIHRvIHRoZSBpbnB1dCwgaXQncyBub3QgYVxuLy8gbmVjZXNzYXJpbHkgc3ltbWV0cmljIG9yIHN5bmNocm9ub3VzIHRyYW5zZm9ybWF0aW9uLiAgRm9yIGV4YW1wbGUsXG4vLyBhIHpsaWIgc3RyZWFtIG1pZ2h0IHRha2UgbXVsdGlwbGUgcGxhaW4tdGV4dCB3cml0ZXMoKSwgYW5kIHRoZW5cbi8vIGVtaXQgYSBzaW5nbGUgY29tcHJlc3NlZCBjaHVuayBzb21lIHRpbWUgaW4gdGhlIGZ1dHVyZS5cbi8vXG4vLyBIZXJlJ3MgaG93IHRoaXMgd29ya3M6XG4vL1xuLy8gVGhlIFRyYW5zZm9ybSBzdHJlYW0gaGFzIGFsbCB0aGUgYXNwZWN0cyBvZiB0aGUgcmVhZGFibGUgYW5kIHdyaXRhYmxlXG4vLyBzdHJlYW0gY2xhc3Nlcy4gIFdoZW4geW91IHdyaXRlKGNodW5rKSwgdGhhdCBjYWxscyBfd3JpdGUoY2h1bmssY2IpXG4vLyBpbnRlcm5hbGx5LCBhbmQgcmV0dXJucyBmYWxzZSBpZiB0aGVyZSdzIGEgbG90IG9mIHBlbmRpbmcgd3JpdGVzXG4vLyBidWZmZXJlZCB1cC4gIFdoZW4geW91IGNhbGwgcmVhZCgpLCB0aGF0IGNhbGxzIF9yZWFkKG4pIHVudGlsXG4vLyB0aGVyZSdzIGVub3VnaCBwZW5kaW5nIHJlYWRhYmxlIGRhdGEgYnVmZmVyZWQgdXAuXG4vL1xuLy8gSW4gYSB0cmFuc2Zvcm0gc3RyZWFtLCB0aGUgd3JpdHRlbiBkYXRhIGlzIHBsYWNlZCBpbiBhIGJ1ZmZlci4gIFdoZW5cbi8vIF9yZWFkKG4pIGlzIGNhbGxlZCwgaXQgdHJhbnNmb3JtcyB0aGUgcXVldWVkIHVwIGRhdGEsIGNhbGxpbmcgdGhlXG4vLyBidWZmZXJlZCBfd3JpdGUgY2IncyBhcyBpdCBjb25zdW1lcyBjaHVua3MuICBJZiBjb25zdW1pbmcgYSBzaW5nbGVcbi8vIHdyaXR0ZW4gY2h1bmsgd291bGQgcmVzdWx0IGluIG11bHRpcGxlIG91dHB1dCBjaHVua3MsIHRoZW4gdGhlIGZpcnN0XG4vLyBvdXRwdXR0ZWQgYml0IGNhbGxzIHRoZSByZWFkY2IsIGFuZCBzdWJzZXF1ZW50IGNodW5rcyBqdXN0IGdvIGludG9cbi8vIHRoZSByZWFkIGJ1ZmZlciwgYW5kIHdpbGwgY2F1c2UgaXQgdG8gZW1pdCAncmVhZGFibGUnIGlmIG5lY2Vzc2FyeS5cbi8vXG4vLyBUaGlzIHdheSwgYmFjay1wcmVzc3VyZSBpcyBhY3R1YWxseSBkZXRlcm1pbmVkIGJ5IHRoZSByZWFkaW5nIHNpZGUsXG4vLyBzaW5jZSBfcmVhZCBoYXMgdG8gYmUgY2FsbGVkIHRvIHN0YXJ0IHByb2Nlc3NpbmcgYSBuZXcgY2h1bmsuICBIb3dldmVyLFxuLy8gYSBwYXRob2xvZ2ljYWwgaW5mbGF0ZSB0eXBlIG9mIHRyYW5zZm9ybSBjYW4gY2F1c2UgZXhjZXNzaXZlIGJ1ZmZlcmluZ1xuLy8gaGVyZS4gIEZvciBleGFtcGxlLCBpbWFnaW5lIGEgc3RyZWFtIHdoZXJlIGV2ZXJ5IGJ5dGUgb2YgaW5wdXQgaXNcbi8vIGludGVycHJldGVkIGFzIGFuIGludGVnZXIgZnJvbSAwLTI1NSwgYW5kIHRoZW4gcmVzdWx0cyBpbiB0aGF0IG1hbnlcbi8vIGJ5dGVzIG9mIG91dHB1dC4gIFdyaXRpbmcgdGhlIDQgYnl0ZXMge2ZmLGZmLGZmLGZmfSB3b3VsZCByZXN1bHQgaW5cbi8vIDFrYiBvZiBkYXRhIGJlaW5nIG91dHB1dC4gIEluIHRoaXMgY2FzZSwgeW91IGNvdWxkIHdyaXRlIGEgdmVyeSBzbWFsbFxuLy8gYW1vdW50IG9mIGlucHV0LCBhbmQgZW5kIHVwIHdpdGggYSB2ZXJ5IGxhcmdlIGFtb3VudCBvZiBvdXRwdXQuICBJblxuLy8gc3VjaCBhIHBhdGhvbG9naWNhbCBpbmZsYXRpbmcgbWVjaGFuaXNtLCB0aGVyZSdkIGJlIG5vIHdheSB0byB0ZWxsXG4vLyB0aGUgc3lzdGVtIHRvIHN0b3AgZG9pbmcgdGhlIHRyYW5zZm9ybS4gIEEgc2luZ2xlIDRNQiB3cml0ZSBjb3VsZFxuLy8gY2F1c2UgdGhlIHN5c3RlbSB0byBydW4gb3V0IG9mIG1lbW9yeS5cbi8vXG4vLyBIb3dldmVyLCBldmVuIGluIHN1Y2ggYSBwYXRob2xvZ2ljYWwgY2FzZSwgb25seSBhIHNpbmdsZSB3cml0dGVuIGNodW5rXG4vLyB3b3VsZCBiZSBjb25zdW1lZCwgYW5kIHRoZW4gdGhlIHJlc3Qgd291bGQgd2FpdCAodW4tdHJhbnNmb3JtZWQpIHVudGlsXG4vLyB0aGUgcmVzdWx0cyBvZiB0aGUgcHJldmlvdXMgdHJhbnNmb3JtZWQgY2h1bmsgd2VyZSBjb25zdW1lZC5cblxuJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFRyYW5zZm9ybTtcblxudmFyIER1cGxleCA9IHJlcXVpcmUoJy4vX3N0cmVhbV9kdXBsZXgnKTtcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciB1dGlsID0gT2JqZWN0LmNyZWF0ZShyZXF1aXJlKCdjb3JlLXV0aWwtaXMnKSk7XG51dGlsLmluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG51dGlsLmluaGVyaXRzKFRyYW5zZm9ybSwgRHVwbGV4KTtcblxuZnVuY3Rpb24gYWZ0ZXJUcmFuc2Zvcm0oZXIsIGRhdGEpIHtcbiAgdmFyIHRzID0gdGhpcy5fdHJhbnNmb3JtU3RhdGU7XG4gIHRzLnRyYW5zZm9ybWluZyA9IGZhbHNlO1xuXG4gIHZhciBjYiA9IHRzLndyaXRlY2I7XG5cbiAgaWYgKCFjYikge1xuICAgIHJldHVybiB0aGlzLmVtaXQoJ2Vycm9yJywgbmV3IEVycm9yKCd3cml0ZSBjYWxsYmFjayBjYWxsZWQgbXVsdGlwbGUgdGltZXMnKSk7XG4gIH1cblxuICB0cy53cml0ZWNodW5rID0gbnVsbDtcbiAgdHMud3JpdGVjYiA9IG51bGw7XG5cbiAgaWYgKGRhdGEgIT0gbnVsbCkgLy8gc2luZ2xlIGVxdWFscyBjaGVjayBmb3IgYm90aCBgbnVsbGAgYW5kIGB1bmRlZmluZWRgXG4gICAgdGhpcy5wdXNoKGRhdGEpO1xuXG4gIGNiKGVyKTtcblxuICB2YXIgcnMgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICBycy5yZWFkaW5nID0gZmFsc2U7XG4gIGlmIChycy5uZWVkUmVhZGFibGUgfHwgcnMubGVuZ3RoIDwgcnMuaGlnaFdhdGVyTWFyaykge1xuICAgIHRoaXMuX3JlYWQocnMuaGlnaFdhdGVyTWFyayk7XG4gIH1cbn1cblxuZnVuY3Rpb24gVHJhbnNmb3JtKG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFRyYW5zZm9ybSkpIHJldHVybiBuZXcgVHJhbnNmb3JtKG9wdGlvbnMpO1xuXG4gIER1cGxleC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXG4gIHRoaXMuX3RyYW5zZm9ybVN0YXRlID0ge1xuICAgIGFmdGVyVHJhbnNmb3JtOiBhZnRlclRyYW5zZm9ybS5iaW5kKHRoaXMpLFxuICAgIG5lZWRUcmFuc2Zvcm06IGZhbHNlLFxuICAgIHRyYW5zZm9ybWluZzogZmFsc2UsXG4gICAgd3JpdGVjYjogbnVsbCxcbiAgICB3cml0ZWNodW5rOiBudWxsLFxuICAgIHdyaXRlZW5jb2Rpbmc6IG51bGxcbiAgfTtcblxuICAvLyBzdGFydCBvdXQgYXNraW5nIGZvciBhIHJlYWRhYmxlIGV2ZW50IG9uY2UgZGF0YSBpcyB0cmFuc2Zvcm1lZC5cbiAgdGhpcy5fcmVhZGFibGVTdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlO1xuXG4gIC8vIHdlIGhhdmUgaW1wbGVtZW50ZWQgdGhlIF9yZWFkIG1ldGhvZCwgYW5kIGRvbmUgdGhlIG90aGVyIHRoaW5nc1xuICAvLyB0aGF0IFJlYWRhYmxlIHdhbnRzIGJlZm9yZSB0aGUgZmlyc3QgX3JlYWQgY2FsbCwgc28gdW5zZXQgdGhlXG4gIC8vIHN5bmMgZ3VhcmQgZmxhZy5cbiAgdGhpcy5fcmVhZGFibGVTdGF0ZS5zeW5jID0gZmFsc2U7XG5cbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMudHJhbnNmb3JtID09PSAnZnVuY3Rpb24nKSB0aGlzLl90cmFuc2Zvcm0gPSBvcHRpb25zLnRyYW5zZm9ybTtcblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5mbHVzaCA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fZmx1c2ggPSBvcHRpb25zLmZsdXNoO1xuICB9XG5cbiAgLy8gV2hlbiB0aGUgd3JpdGFibGUgc2lkZSBmaW5pc2hlcywgdGhlbiBmbHVzaCBvdXQgYW55dGhpbmcgcmVtYWluaW5nLlxuICB0aGlzLm9uKCdwcmVmaW5pc2gnLCBwcmVmaW5pc2gpO1xufVxuXG5mdW5jdGlvbiBwcmVmaW5pc2goKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgaWYgKHR5cGVvZiB0aGlzLl9mbHVzaCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRoaXMuX2ZsdXNoKGZ1bmN0aW9uIChlciwgZGF0YSkge1xuICAgICAgZG9uZShfdGhpcywgZXIsIGRhdGEpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGRvbmUodGhpcywgbnVsbCwgbnVsbCk7XG4gIH1cbn1cblxuVHJhbnNmb3JtLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZykge1xuICB0aGlzLl90cmFuc2Zvcm1TdGF0ZS5uZWVkVHJhbnNmb3JtID0gZmFsc2U7XG4gIHJldHVybiBEdXBsZXgucHJvdG90eXBlLnB1c2guY2FsbCh0aGlzLCBjaHVuaywgZW5jb2RpbmcpO1xufTtcblxuLy8gVGhpcyBpcyB0aGUgcGFydCB3aGVyZSB5b3UgZG8gc3R1ZmYhXG4vLyBvdmVycmlkZSB0aGlzIGZ1bmN0aW9uIGluIGltcGxlbWVudGF0aW9uIGNsYXNzZXMuXG4vLyAnY2h1bmsnIGlzIGFuIGlucHV0IGNodW5rLlxuLy9cbi8vIENhbGwgYHB1c2gobmV3Q2h1bmspYCB0byBwYXNzIGFsb25nIHRyYW5zZm9ybWVkIG91dHB1dFxuLy8gdG8gdGhlIHJlYWRhYmxlIHNpZGUuICBZb3UgbWF5IGNhbGwgJ3B1c2gnIHplcm8gb3IgbW9yZSB0aW1lcy5cbi8vXG4vLyBDYWxsIGBjYihlcnIpYCB3aGVuIHlvdSBhcmUgZG9uZSB3aXRoIHRoaXMgY2h1bmsuICBJZiB5b3UgcGFzc1xuLy8gYW4gZXJyb3IsIHRoZW4gdGhhdCdsbCBwdXQgdGhlIGh1cnQgb24gdGhlIHdob2xlIG9wZXJhdGlvbi4gIElmIHlvdVxuLy8gbmV2ZXIgY2FsbCBjYigpLCB0aGVuIHlvdSdsbCBuZXZlciBnZXQgYW5vdGhlciBjaHVuay5cblRyYW5zZm9ybS5wcm90b3R5cGUuX3RyYW5zZm9ybSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIHRocm93IG5ldyBFcnJvcignX3RyYW5zZm9ybSgpIGlzIG5vdCBpbXBsZW1lbnRlZCcpO1xufTtcblxuVHJhbnNmb3JtLnByb3RvdHlwZS5fd3JpdGUgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICB2YXIgdHMgPSB0aGlzLl90cmFuc2Zvcm1TdGF0ZTtcbiAgdHMud3JpdGVjYiA9IGNiO1xuICB0cy53cml0ZWNodW5rID0gY2h1bms7XG4gIHRzLndyaXRlZW5jb2RpbmcgPSBlbmNvZGluZztcbiAgaWYgKCF0cy50cmFuc2Zvcm1pbmcpIHtcbiAgICB2YXIgcnMgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICAgIGlmICh0cy5uZWVkVHJhbnNmb3JtIHx8IHJzLm5lZWRSZWFkYWJsZSB8fCBycy5sZW5ndGggPCBycy5oaWdoV2F0ZXJNYXJrKSB0aGlzLl9yZWFkKHJzLmhpZ2hXYXRlck1hcmspO1xuICB9XG59O1xuXG4vLyBEb2Vzbid0IG1hdHRlciB3aGF0IHRoZSBhcmdzIGFyZSBoZXJlLlxuLy8gX3RyYW5zZm9ybSBkb2VzIGFsbCB0aGUgd29yay5cbi8vIFRoYXQgd2UgZ290IGhlcmUgbWVhbnMgdGhhdCB0aGUgcmVhZGFibGUgc2lkZSB3YW50cyBtb3JlIGRhdGEuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLl9yZWFkID0gZnVuY3Rpb24gKG4pIHtcbiAgdmFyIHRzID0gdGhpcy5fdHJhbnNmb3JtU3RhdGU7XG5cbiAgaWYgKHRzLndyaXRlY2h1bmsgIT09IG51bGwgJiYgdHMud3JpdGVjYiAmJiAhdHMudHJhbnNmb3JtaW5nKSB7XG4gICAgdHMudHJhbnNmb3JtaW5nID0gdHJ1ZTtcbiAgICB0aGlzLl90cmFuc2Zvcm0odHMud3JpdGVjaHVuaywgdHMud3JpdGVlbmNvZGluZywgdHMuYWZ0ZXJUcmFuc2Zvcm0pO1xuICB9IGVsc2Uge1xuICAgIC8vIG1hcmsgdGhhdCB3ZSBuZWVkIGEgdHJhbnNmb3JtLCBzbyB0aGF0IGFueSBkYXRhIHRoYXQgY29tZXMgaW5cbiAgICAvLyB3aWxsIGdldCBwcm9jZXNzZWQsIG5vdyB0aGF0IHdlJ3ZlIGFza2VkIGZvciBpdC5cbiAgICB0cy5uZWVkVHJhbnNmb3JtID0gdHJ1ZTtcbiAgfVxufTtcblxuVHJhbnNmb3JtLnByb3RvdHlwZS5fZGVzdHJveSA9IGZ1bmN0aW9uIChlcnIsIGNiKSB7XG4gIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gIER1cGxleC5wcm90b3R5cGUuX2Rlc3Ryb3kuY2FsbCh0aGlzLCBlcnIsIGZ1bmN0aW9uIChlcnIyKSB7XG4gICAgY2IoZXJyMik7XG4gICAgX3RoaXMyLmVtaXQoJ2Nsb3NlJyk7XG4gIH0pO1xufTtcblxuZnVuY3Rpb24gZG9uZShzdHJlYW0sIGVyLCBkYXRhKSB7XG4gIGlmIChlcikgcmV0dXJuIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVyKTtcblxuICBpZiAoZGF0YSAhPSBudWxsKSAvLyBzaW5nbGUgZXF1YWxzIGNoZWNrIGZvciBib3RoIGBudWxsYCBhbmQgYHVuZGVmaW5lZGBcbiAgICBzdHJlYW0ucHVzaChkYXRhKTtcblxuICAvLyBpZiB0aGVyZSdzIG5vdGhpbmcgaW4gdGhlIHdyaXRlIGJ1ZmZlciwgdGhlbiB0aGF0IG1lYW5zXG4gIC8vIHRoYXQgbm90aGluZyBtb3JlIHdpbGwgZXZlciBiZSBwcm92aWRlZFxuICBpZiAoc3RyZWFtLl93cml0YWJsZVN0YXRlLmxlbmd0aCkgdGhyb3cgbmV3IEVycm9yKCdDYWxsaW5nIHRyYW5zZm9ybSBkb25lIHdoZW4gd3MubGVuZ3RoICE9IDAnKTtcblxuICBpZiAoc3RyZWFtLl90cmFuc2Zvcm1TdGF0ZS50cmFuc2Zvcm1pbmcpIHRocm93IG5ldyBFcnJvcignQ2FsbGluZyB0cmFuc2Zvcm0gZG9uZSB3aGVuIHN0aWxsIHRyYW5zZm9ybWluZycpO1xuXG4gIHJldHVybiBzdHJlYW0ucHVzaChudWxsKTtcbn0iLAogICAgIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyBhIHBhc3N0aHJvdWdoIHN0cmVhbS5cbi8vIGJhc2ljYWxseSBqdXN0IHRoZSBtb3N0IG1pbmltYWwgc29ydCBvZiBUcmFuc2Zvcm0gc3RyZWFtLlxuLy8gRXZlcnkgd3JpdHRlbiBjaHVuayBnZXRzIG91dHB1dCBhcy1pcy5cblxuJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFBhc3NUaHJvdWdoO1xuXG52YXIgVHJhbnNmb3JtID0gcmVxdWlyZSgnLi9fc3RyZWFtX3RyYW5zZm9ybScpO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIHV0aWwgPSBPYmplY3QuY3JlYXRlKHJlcXVpcmUoJ2NvcmUtdXRpbC1pcycpKTtcbnV0aWwuaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbnV0aWwuaW5oZXJpdHMoUGFzc1Rocm91Z2gsIFRyYW5zZm9ybSk7XG5cbmZ1bmN0aW9uIFBhc3NUaHJvdWdoKG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFBhc3NUaHJvdWdoKSkgcmV0dXJuIG5ldyBQYXNzVGhyb3VnaChvcHRpb25zKTtcblxuICBUcmFuc2Zvcm0uY2FsbCh0aGlzLCBvcHRpb25zKTtcbn1cblxuUGFzc1Rocm91Z2gucHJvdG90eXBlLl90cmFuc2Zvcm0gPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICBjYihudWxsLCBjaHVuayk7XG59OyIsCiAgICAidmFyIFN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpO1xuaWYgKHByb2Nlc3MuZW52LlJFQURBQkxFX1NUUkVBTSA9PT0gJ2Rpc2FibGUnICYmIFN0cmVhbSkge1xuICBtb2R1bGUuZXhwb3J0cyA9IFN0cmVhbTtcbiAgZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gU3RyZWFtLlJlYWRhYmxlO1xuICBleHBvcnRzLlJlYWRhYmxlID0gU3RyZWFtLlJlYWRhYmxlO1xuICBleHBvcnRzLldyaXRhYmxlID0gU3RyZWFtLldyaXRhYmxlO1xuICBleHBvcnRzLkR1cGxleCA9IFN0cmVhbS5EdXBsZXg7XG4gIGV4cG9ydHMuVHJhbnNmb3JtID0gU3RyZWFtLlRyYW5zZm9ybTtcbiAgZXhwb3J0cy5QYXNzVGhyb3VnaCA9IFN0cmVhbS5QYXNzVGhyb3VnaDtcbiAgZXhwb3J0cy5TdHJlYW0gPSBTdHJlYW07XG59IGVsc2Uge1xuICBleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2xpYi9fc3RyZWFtX3JlYWRhYmxlLmpzJyk7XG4gIGV4cG9ydHMuU3RyZWFtID0gU3RyZWFtIHx8IGV4cG9ydHM7XG4gIGV4cG9ydHMuUmVhZGFibGUgPSBleHBvcnRzO1xuICBleHBvcnRzLldyaXRhYmxlID0gcmVxdWlyZSgnLi9saWIvX3N0cmVhbV93cml0YWJsZS5qcycpO1xuICBleHBvcnRzLkR1cGxleCA9IHJlcXVpcmUoJy4vbGliL19zdHJlYW1fZHVwbGV4LmpzJyk7XG4gIGV4cG9ydHMuVHJhbnNmb3JtID0gcmVxdWlyZSgnLi9saWIvX3N0cmVhbV90cmFuc2Zvcm0uanMnKTtcbiAgZXhwb3J0cy5QYXNzVGhyb3VnaCA9IHJlcXVpcmUoJy4vbGliL19zdHJlYW1fcGFzc3Rocm91Z2guanMnKTtcbn1cbiIsCiAgICAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL3JlYWRhYmxlJykuUGFzc1Rocm91Z2hcbiIsCiAgICAidmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG52YXIgUGFzc1Rocm91Z2ggPSByZXF1aXJlKCdyZWFkYWJsZS1zdHJlYW0vcGFzc3Rocm91Z2gnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFJlYWRhYmxlOiBSZWFkYWJsZSxcbiAgV3JpdGFibGU6IFdyaXRhYmxlXG59O1xuXG51dGlsLmluaGVyaXRzKFJlYWRhYmxlLCBQYXNzVGhyb3VnaCk7XG51dGlsLmluaGVyaXRzKFdyaXRhYmxlLCBQYXNzVGhyb3VnaCk7XG5cbi8vIFBhdGNoIHRoZSBnaXZlbiBtZXRob2Qgb2YgaW5zdGFuY2Ugc28gdGhhdCB0aGUgY2FsbGJhY2tcbi8vIGlzIGV4ZWN1dGVkIG9uY2UsIGJlZm9yZSB0aGUgYWN0dWFsIG1ldGhvZCBpcyBjYWxsZWQgdGhlXG4vLyBmaXJzdCB0aW1lLlxuZnVuY3Rpb24gYmVmb3JlRmlyc3RDYWxsKGluc3RhbmNlLCBtZXRob2QsIGNhbGxiYWNrKSB7XG4gIGluc3RhbmNlW21ldGhvZF0gPSBmdW5jdGlvbigpIHtcbiAgICBkZWxldGUgaW5zdGFuY2VbbWV0aG9kXTtcbiAgICBjYWxsYmFjay5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIHJldHVybiB0aGlzW21ldGhvZF0uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gUmVhZGFibGUoZm4sIG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlYWRhYmxlKSlcbiAgICByZXR1cm4gbmV3IFJlYWRhYmxlKGZuLCBvcHRpb25zKTtcblxuICBQYXNzVGhyb3VnaC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXG4gIGJlZm9yZUZpcnN0Q2FsbCh0aGlzLCAnX3JlYWQnLCBmdW5jdGlvbigpIHtcbiAgICB2YXIgc291cmNlID0gZm4uY2FsbCh0aGlzLCBvcHRpb25zKTtcbiAgICB2YXIgZW1pdCA9IHRoaXMuZW1pdC5iaW5kKHRoaXMsICdlcnJvcicpO1xuICAgIHNvdXJjZS5vbignZXJyb3InLCBlbWl0KTtcbiAgICBzb3VyY2UucGlwZSh0aGlzKTtcbiAgfSk7XG5cbiAgdGhpcy5lbWl0KCdyZWFkYWJsZScpO1xufVxuXG5mdW5jdGlvbiBXcml0YWJsZShmbiwgb3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgV3JpdGFibGUpKVxuICAgIHJldHVybiBuZXcgV3JpdGFibGUoZm4sIG9wdGlvbnMpO1xuXG4gIFBhc3NUaHJvdWdoLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cbiAgYmVmb3JlRmlyc3RDYWxsKHRoaXMsICdfd3JpdGUnLCBmdW5jdGlvbigpIHtcbiAgICB2YXIgZGVzdGluYXRpb24gPSBmbi5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuICAgIHZhciBlbWl0ID0gdGhpcy5lbWl0LmJpbmQodGhpcywgJ2Vycm9yJyk7XG4gICAgZGVzdGluYXRpb24ub24oJ2Vycm9yJywgZW1pdCk7XG4gICAgdGhpcy5waXBlKGRlc3RpbmF0aW9uKTtcbiAgfSk7XG5cbiAgdGhpcy5lbWl0KCd3cml0YWJsZScpO1xufVxuXG4iLAogICAgIi8qIVxuICogbm9ybWFsaXplLXBhdGggPGh0dHBzOi8vZ2l0aHViLmNvbS9qb25zY2hsaW5rZXJ0L25vcm1hbGl6ZS1wYXRoPlxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4LCBKb24gU2NobGlua2VydC5cbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHBhdGgsIHN0cmlwVHJhaWxpbmcpIHtcbiAgaWYgKHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2V4cGVjdGVkIHBhdGggdG8gYmUgYSBzdHJpbmcnKTtcbiAgfVxuXG4gIGlmIChwYXRoID09PSAnXFxcXCcgfHwgcGF0aCA9PT0gJy8nKSByZXR1cm4gJy8nO1xuXG4gIHZhciBsZW4gPSBwYXRoLmxlbmd0aDtcbiAgaWYgKGxlbiA8PSAxKSByZXR1cm4gcGF0aDtcblxuICAvLyBlbnN1cmUgdGhhdCB3aW4zMiBuYW1lc3BhY2VzIGhhcyB0d28gbGVhZGluZyBzbGFzaGVzLCBzbyB0aGF0IHRoZSBwYXRoIGlzXG4gIC8vIGhhbmRsZWQgcHJvcGVybHkgYnkgdGhlIHdpbjMyIHZlcnNpb24gb2YgcGF0aC5wYXJzZSgpIGFmdGVyIGJlaW5nIG5vcm1hbGl6ZWRcbiAgLy8gaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeS93aW5kb3dzL2Rlc2t0b3AvYWEzNjUyNDcodj12cy44NSkuYXNweCNuYW1lc3BhY2VzXG4gIHZhciBwcmVmaXggPSAnJztcbiAgaWYgKGxlbiA+IDQgJiYgcGF0aFszXSA9PT0gJ1xcXFwnKSB7XG4gICAgdmFyIGNoID0gcGF0aFsyXTtcbiAgICBpZiAoKGNoID09PSAnPycgfHwgY2ggPT09ICcuJykgJiYgcGF0aC5zbGljZSgwLCAyKSA9PT0gJ1xcXFxcXFxcJykge1xuICAgICAgcGF0aCA9IHBhdGguc2xpY2UoMik7XG4gICAgICBwcmVmaXggPSAnLy8nO1xuICAgIH1cbiAgfVxuXG4gIHZhciBzZWdzID0gcGF0aC5zcGxpdCgvWy9cXFxcXSsvKTtcbiAgaWYgKHN0cmlwVHJhaWxpbmcgIT09IGZhbHNlICYmIHNlZ3Nbc2Vncy5sZW5ndGggLSAxXSA9PT0gJycpIHtcbiAgICBzZWdzLnBvcCgpO1xuICB9XG4gIHJldHVybiBwcmVmaXggKyBzZWdzLmpvaW4oJy8nKTtcbn07XG4iLAogICAgIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgZmlyc3QgYXJndW1lbnQgaXQgcmVjZWl2ZXMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgQW55IHZhbHVlLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgYHZhbHVlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKlxuICogY29uc29sZS5sb2coXy5pZGVudGl0eShvYmplY3QpID09PSBvYmplY3QpO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBpZGVudGl0eSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaWRlbnRpdHk7XG4iLAogICAgIi8qKlxuICogQSBmYXN0ZXIgYWx0ZXJuYXRpdmUgdG8gYEZ1bmN0aW9uI2FwcGx5YCwgdGhpcyBmdW5jdGlvbiBpbnZva2VzIGBmdW5jYFxuICogd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgYHRoaXNBcmdgIGFuZCB0aGUgYXJndW1lbnRzIG9mIGBhcmdzYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaW52b2tlLlxuICogQHBhcmFtIHsqfSB0aGlzQXJnIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gKiBAcGFyYW0ge0FycmF5fSBhcmdzIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIGBmdW5jYCB3aXRoLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc3VsdCBvZiBgZnVuY2AuXG4gKi9cbmZ1bmN0aW9uIGFwcGx5KGZ1bmMsIHRoaXNBcmcsIGFyZ3MpIHtcbiAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgIGNhc2UgMDogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnKTtcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSk7XG4gICAgY2FzZSAyOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgfVxuICByZXR1cm4gZnVuYy5hcHBseSh0aGlzQXJnLCBhcmdzKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcHBseTtcbiIsCiAgICAidmFyIGFwcGx5ID0gcmVxdWlyZSgnLi9fYXBwbHknKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU1heCA9IE1hdGgubWF4O1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVJlc3RgIHdoaWNoIHRyYW5zZm9ybXMgdGhlIHJlc3QgYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIHJlc3QgYXJyYXkgdHJhbnNmb3JtLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG92ZXJSZXN0KGZ1bmMsIHN0YXJ0LCB0cmFuc2Zvcm0pIHtcbiAgc3RhcnQgPSBuYXRpdmVNYXgoc3RhcnQgPT09IHVuZGVmaW5lZCA/IChmdW5jLmxlbmd0aCAtIDEpIDogc3RhcnQsIDApO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IG5hdGl2ZU1heChhcmdzLmxlbmd0aCAtIHN0YXJ0LCAwKSxcbiAgICAgICAgYXJyYXkgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGFycmF5W2luZGV4XSA9IGFyZ3Nbc3RhcnQgKyBpbmRleF07XG4gICAgfVxuICAgIGluZGV4ID0gLTE7XG4gICAgdmFyIG90aGVyQXJncyA9IEFycmF5KHN0YXJ0ICsgMSk7XG4gICAgd2hpbGUgKCsraW5kZXggPCBzdGFydCkge1xuICAgICAgb3RoZXJBcmdzW2luZGV4XSA9IGFyZ3NbaW5kZXhdO1xuICAgIH1cbiAgICBvdGhlckFyZ3Nbc3RhcnRdID0gdHJhbnNmb3JtKGFycmF5KTtcbiAgICByZXR1cm4gYXBwbHkoZnVuYywgdGhpcywgb3RoZXJBcmdzKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvdmVyUmVzdDtcbiIsCiAgICAiLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGB2YWx1ZWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjQuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHJldHVybiBmcm9tIHRoZSBuZXcgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjb25zdGFudCBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdHMgPSBfLnRpbWVzKDIsIF8uY29uc3RhbnQoeyAnYSc6IDEgfSkpO1xuICpcbiAqIGNvbnNvbGUubG9nKG9iamVjdHMpO1xuICogLy8gPT4gW3sgJ2EnOiAxIH0sIHsgJ2EnOiAxIH1dXG4gKlxuICogY29uc29sZS5sb2cob2JqZWN0c1swXSA9PT0gb2JqZWN0c1sxXSk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGNvbnN0YW50KHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29uc3RhbnQ7XG4iLAogICAgIi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZ2xvYmFsYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsICYmIGdsb2JhbC5PYmplY3QgPT09IE9iamVjdCAmJiBnbG9iYWw7XG5cbm1vZHVsZS5leHBvcnRzID0gZnJlZUdsb2JhbDtcbiIsCiAgICAidmFyIGZyZWVHbG9iYWwgPSByZXF1aXJlKCcuL19mcmVlR2xvYmFsJyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgc2VsZmAuICovXG52YXIgZnJlZVNlbGYgPSB0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmICYmIHNlbGYuT2JqZWN0ID09PSBPYmplY3QgJiYgc2VsZjtcblxuLyoqIFVzZWQgYXMgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3QuICovXG52YXIgcm9vdCA9IGZyZWVHbG9iYWwgfHwgZnJlZVNlbGYgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblxubW9kdWxlLmV4cG9ydHMgPSByb290O1xuIiwKICAgICJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgU3ltYm9sID0gcm9vdC5TeW1ib2w7XG5cbm1vZHVsZS5leHBvcnRzID0gU3ltYm9sO1xuIiwKICAgICJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZVxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VHZXRUYWdgIHdoaWNoIGlnbm9yZXMgYFN5bWJvbC50b1N0cmluZ1RhZ2AgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHJhdyBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBnZXRSYXdUYWcodmFsdWUpIHtcbiAgdmFyIGlzT3duID0gaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgc3ltVG9TdHJpbmdUYWcpLFxuICAgICAgdGFnID0gdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuXG4gIHRyeSB7XG4gICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdW5kZWZpbmVkO1xuICAgIHZhciB1bm1hc2tlZCA9IHRydWU7XG4gIH0gY2F0Y2ggKGUpIHt9XG5cbiAgdmFyIHJlc3VsdCA9IG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xuICBpZiAodW5tYXNrZWQpIHtcbiAgICBpZiAoaXNPd24pIHtcbiAgICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHRhZztcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRSYXdUYWc7XG4iLAogICAgIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZVxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcgdXNpbmcgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gb2JqZWN0VG9TdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG9iamVjdFRvU3RyaW5nO1xuIiwKICAgICJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgZ2V0UmF3VGFnID0gcmVxdWlyZSgnLi9fZ2V0UmF3VGFnJyksXG4gICAgb2JqZWN0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19vYmplY3RUb1N0cmluZycpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbnVsbFRhZyA9ICdbb2JqZWN0IE51bGxdJyxcbiAgICB1bmRlZmluZWRUYWcgPSAnW29iamVjdCBVbmRlZmluZWRdJztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldFRhZ2Agd2l0aG91dCBmYWxsYmFja3MgZm9yIGJ1Z2d5IGVudmlyb25tZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0VGFnKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWRUYWcgOiBudWxsVGFnO1xuICB9XG4gIHJldHVybiAoc3ltVG9TdHJpbmdUYWcgJiYgc3ltVG9TdHJpbmdUYWcgaW4gT2JqZWN0KHZhbHVlKSlcbiAgICA/IGdldFJhd1RhZyh2YWx1ZSlcbiAgICA6IG9iamVjdFRvU3RyaW5nKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlR2V0VGFnO1xuIiwKICAgICIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHRoZVxuICogW2xhbmd1YWdlIHR5cGVdKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1lY21hc2NyaXB0LWxhbmd1YWdlLXR5cGVzKVxuICogb2YgYE9iamVjdGAuIChlLmcuIGFycmF5cywgZnVuY3Rpb25zLCBvYmplY3RzLCByZWdleGVzLCBgbmV3IE51bWJlcigwKWAsIGFuZCBgbmV3IFN0cmluZygnJylgKVxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0KHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChfLm5vb3ApO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgKHR5cGUgPT0gJ29iamVjdCcgfHwgdHlwZSA9PSAnZnVuY3Rpb24nKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc09iamVjdDtcbiIsCiAgICAidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0Jyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhc3luY1RhZyA9ICdbb2JqZWN0IEFzeW5jRnVuY3Rpb25dJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBnZW5UYWcgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nLFxuICAgIHByb3h5VGFnID0gJ1tvYmplY3QgUHJveHldJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYEZ1bmN0aW9uYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBmdW5jdGlvbiwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oXyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0Z1bmN0aW9uKC9hYmMvKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gVGhlIHVzZSBvZiBgT2JqZWN0I3RvU3RyaW5nYCBhdm9pZHMgaXNzdWVzIHdpdGggdGhlIGB0eXBlb2ZgIG9wZXJhdG9yXG4gIC8vIGluIFNhZmFyaSA5IHdoaWNoIHJldHVybnMgJ29iamVjdCcgZm9yIHR5cGVkIGFycmF5cyBhbmQgb3RoZXIgY29uc3RydWN0b3JzLlxuICB2YXIgdGFnID0gYmFzZUdldFRhZyh2YWx1ZSk7XG4gIHJldHVybiB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnIHx8IHRhZyA9PSBhc3luY1RhZyB8fCB0YWcgPT0gcHJveHlUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGdW5jdGlvbjtcbiIsCiAgICAidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBvdmVycmVhY2hpbmcgY29yZS1qcyBzaGltcy4gKi9cbnZhciBjb3JlSnNEYXRhID0gcm9vdFsnX19jb3JlLWpzX3NoYXJlZF9fJ107XG5cbm1vZHVsZS5leHBvcnRzID0gY29yZUpzRGF0YTtcbiIsCiAgICAidmFyIGNvcmVKc0RhdGEgPSByZXF1aXJlKCcuL19jb3JlSnNEYXRhJyk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBtZXRob2RzIG1hc3F1ZXJhZGluZyBhcyBuYXRpdmUuICovXG52YXIgbWFza1NyY0tleSA9IChmdW5jdGlvbigpIHtcbiAgdmFyIHVpZCA9IC9bXi5dKyQvLmV4ZWMoY29yZUpzRGF0YSAmJiBjb3JlSnNEYXRhLmtleXMgJiYgY29yZUpzRGF0YS5rZXlzLklFX1BST1RPIHx8ICcnKTtcbiAgcmV0dXJuIHVpZCA/ICgnU3ltYm9sKHNyYylfMS4nICsgdWlkKSA6ICcnO1xufSgpKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYGZ1bmNgIGhhcyBpdHMgc291cmNlIG1hc2tlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYGZ1bmNgIGlzIG1hc2tlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc01hc2tlZChmdW5jKSB7XG4gIHJldHVybiAhIW1hc2tTcmNLZXkgJiYgKG1hc2tTcmNLZXkgaW4gZnVuYyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNNYXNrZWQ7XG4iLAogICAgIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYGZ1bmNgIHRvIGl0cyBzb3VyY2UgY29kZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHNvdXJjZSBjb2RlLlxuICovXG5mdW5jdGlvbiB0b1NvdXJjZShmdW5jKSB7XG4gIGlmIChmdW5jICE9IG51bGwpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZ1bmNUb1N0cmluZy5jYWxsKGZ1bmMpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoZnVuYyArICcnKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICB9XG4gIHJldHVybiAnJztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b1NvdXJjZTtcbiIsCiAgICAidmFyIGlzRnVuY3Rpb24gPSByZXF1aXJlKCcuL2lzRnVuY3Rpb24nKSxcbiAgICBpc01hc2tlZCA9IHJlcXVpcmUoJy4vX2lzTWFza2VkJyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0JyksXG4gICAgdG9Tb3VyY2UgPSByZXF1aXJlKCcuL190b1NvdXJjZScpO1xuXG4vKipcbiAqIFVzZWQgdG8gbWF0Y2ggYFJlZ0V4cGBcbiAqIFtzeW50YXggY2hhcmFjdGVyc10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcGF0dGVybnMpLlxuICovXG52YXIgcmVSZWdFeHBDaGFyID0gL1tcXFxcXiQuKis/KClbXFxde318XS9nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaG9zdCBjb25zdHJ1Y3RvcnMgKFNhZmFyaSkuICovXG52YXIgcmVJc0hvc3RDdG9yID0gL15cXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXF0kLztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcbiAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBpZiBhIG1ldGhvZCBpcyBuYXRpdmUuICovXG52YXIgcmVJc05hdGl2ZSA9IFJlZ0V4cCgnXicgK1xuICBmdW5jVG9TdHJpbmcuY2FsbChoYXNPd25Qcm9wZXJ0eSkucmVwbGFjZShyZVJlZ0V4cENoYXIsICdcXFxcJCYnKVxuICAucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXFxcXCgpfCBmb3IgLis/KD89XFxcXFxcXSkvZywgJyQxLio/JykgKyAnJCdcbik7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNOYXRpdmVgIHdpdGhvdXQgYmFkIHNoaW0gY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbmF0aXZlIGZ1bmN0aW9uLFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzTmF0aXZlKHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpIHx8IGlzTWFza2VkKHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgcGF0dGVybiA9IGlzRnVuY3Rpb24odmFsdWUpID8gcmVJc05hdGl2ZSA6IHJlSXNIb3N0Q3RvcjtcbiAgcmV0dXJuIHBhdHRlcm4udGVzdCh0b1NvdXJjZSh2YWx1ZSkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc05hdGl2ZTtcbiIsCiAgICAiLyoqXG4gKiBHZXRzIHRoZSB2YWx1ZSBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZ2V0VmFsdWUob2JqZWN0LCBrZXkpIHtcbiAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0VmFsdWU7XG4iLAogICAgInZhciBiYXNlSXNOYXRpdmUgPSByZXF1aXJlKCcuL19iYXNlSXNOYXRpdmUnKSxcbiAgICBnZXRWYWx1ZSA9IHJlcXVpcmUoJy4vX2dldFZhbHVlJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgbmF0aXZlIGZ1bmN0aW9uIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIG1ldGhvZCB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZnVuY3Rpb24gaWYgaXQncyBuYXRpdmUsIGVsc2UgYHVuZGVmaW5lZGAuXG4gKi9cbmZ1bmN0aW9uIGdldE5hdGl2ZShvYmplY3QsIGtleSkge1xuICB2YXIgdmFsdWUgPSBnZXRWYWx1ZShvYmplY3QsIGtleSk7XG4gIHJldHVybiBiYXNlSXNOYXRpdmUodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0TmF0aXZlO1xuIiwKICAgICJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyk7XG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IChmdW5jdGlvbigpIHtcbiAgdHJ5IHtcbiAgICB2YXIgZnVuYyA9IGdldE5hdGl2ZShPYmplY3QsICdkZWZpbmVQcm9wZXJ0eScpO1xuICAgIGZ1bmMoe30sICcnLCB7fSk7XG4gICAgcmV0dXJuIGZ1bmM7XG4gIH0gY2F0Y2ggKGUpIHt9XG59KCkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmluZVByb3BlcnR5O1xuIiwKICAgICJ2YXIgY29uc3RhbnQgPSByZXF1aXJlKCcuL2NvbnN0YW50JyksXG4gICAgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19kZWZpbmVQcm9wZXJ0eScpLFxuICAgIGlkZW50aXR5ID0gcmVxdWlyZSgnLi9pZGVudGl0eScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBzZXRUb1N0cmluZ2Agd2l0aG91dCBzdXBwb3J0IGZvciBob3QgbG9vcCBzaG9ydGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3RyaW5nIFRoZSBgdG9TdHJpbmdgIHJlc3VsdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gKi9cbnZhciBiYXNlU2V0VG9TdHJpbmcgPSAhZGVmaW5lUHJvcGVydHkgPyBpZGVudGl0eSA6IGZ1bmN0aW9uKGZ1bmMsIHN0cmluZykge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZnVuYywgJ3RvU3RyaW5nJywge1xuICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICdlbnVtZXJhYmxlJzogZmFsc2UsXG4gICAgJ3ZhbHVlJzogY29uc3RhbnQoc3RyaW5nKSxcbiAgICAnd3JpdGFibGUnOiB0cnVlXG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlU2V0VG9TdHJpbmc7XG4iLAogICAgIi8qKiBVc2VkIHRvIGRldGVjdCBob3QgZnVuY3Rpb25zIGJ5IG51bWJlciBvZiBjYWxscyB3aXRoaW4gYSBzcGFuIG9mIG1pbGxpc2Vjb25kcy4gKi9cbnZhciBIT1RfQ09VTlQgPSA4MDAsXG4gICAgSE9UX1NQQU4gPSAxNjtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU5vdyA9IERhdGUubm93O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0J2xsIHNob3J0IG91dCBhbmQgaW52b2tlIGBpZGVudGl0eWAgaW5zdGVhZFxuICogb2YgYGZ1bmNgIHdoZW4gaXQncyBjYWxsZWQgYEhPVF9DT1VOVGAgb3IgbW9yZSB0aW1lcyBpbiBgSE9UX1NQQU5gXG4gKiBtaWxsaXNlY29uZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHJlc3RyaWN0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc2hvcnRhYmxlIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBzaG9ydE91dChmdW5jKSB7XG4gIHZhciBjb3VudCA9IDAsXG4gICAgICBsYXN0Q2FsbGVkID0gMDtcblxuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0YW1wID0gbmF0aXZlTm93KCksXG4gICAgICAgIHJlbWFpbmluZyA9IEhPVF9TUEFOIC0gKHN0YW1wIC0gbGFzdENhbGxlZCk7XG5cbiAgICBsYXN0Q2FsbGVkID0gc3RhbXA7XG4gICAgaWYgKHJlbWFpbmluZyA+IDApIHtcbiAgICAgIGlmICgrK2NvdW50ID49IEhPVF9DT1VOVCkge1xuICAgICAgICByZXR1cm4gYXJndW1lbnRzWzBdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb3VudCA9IDA7XG4gICAgfVxuICAgIHJldHVybiBmdW5jLmFwcGx5KHVuZGVmaW5lZCwgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzaG9ydE91dDtcbiIsCiAgICAidmFyIGJhc2VTZXRUb1N0cmluZyA9IHJlcXVpcmUoJy4vX2Jhc2VTZXRUb1N0cmluZycpLFxuICAgIHNob3J0T3V0ID0gcmVxdWlyZSgnLi9fc2hvcnRPdXQnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBgdG9TdHJpbmdgIG1ldGhvZCBvZiBgZnVuY2AgdG8gcmV0dXJuIGBzdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmcgVGhlIGB0b1N0cmluZ2AgcmVzdWx0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cbiAqL1xudmFyIHNldFRvU3RyaW5nID0gc2hvcnRPdXQoYmFzZVNldFRvU3RyaW5nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBzZXRUb1N0cmluZztcbiIsCiAgICAidmFyIGlkZW50aXR5ID0gcmVxdWlyZSgnLi9pZGVudGl0eScpLFxuICAgIG92ZXJSZXN0ID0gcmVxdWlyZSgnLi9fb3ZlclJlc3QnKSxcbiAgICBzZXRUb1N0cmluZyA9IHJlcXVpcmUoJy4vX3NldFRvU3RyaW5nJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucmVzdGAgd2hpY2ggZG9lc24ndCB2YWxpZGF0ZSBvciBjb2VyY2UgYXJndW1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD1mdW5jLmxlbmd0aC0xXSBUaGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHJlc3QgcGFyYW1ldGVyLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VSZXN0KGZ1bmMsIHN0YXJ0KSB7XG4gIHJldHVybiBzZXRUb1N0cmluZyhvdmVyUmVzdChmdW5jLCBzdGFydCwgaWRlbnRpdHkpLCBmdW5jICsgJycpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VSZXN0O1xuIiwKICAgICIvKipcbiAqIFBlcmZvcm1zIGFcbiAqIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBjb21wYXJpc29uIGJldHdlZW4gdHdvIHZhbHVlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmUgZXF1aXZhbGVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAqIHZhciBvdGhlciA9IHsgJ2EnOiAxIH07XG4gKlxuICogXy5lcShvYmplY3QsIG9iamVjdCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcShvYmplY3QsIG90aGVyKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5lcSgnYScsICdhJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcSgnYScsIE9iamVjdCgnYScpKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5lcShOYU4sIE5hTik7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGVxKHZhbHVlLCBvdGhlcikge1xuICByZXR1cm4gdmFsdWUgPT09IG90aGVyIHx8ICh2YWx1ZSAhPT0gdmFsdWUgJiYgb3RoZXIgIT09IG90aGVyKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlcTtcbiIsCiAgICAiLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGxlbmd0aC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgbG9vc2VseSBiYXNlZCBvblxuICogW2BUb0xlbmd0aGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXRvbGVuZ3RoKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGxlbmd0aCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzTGVuZ3RoKDMpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNMZW5ndGgoTnVtYmVyLk1JTl9WQUxVRSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNMZW5ndGgoSW5maW5pdHkpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzTGVuZ3RoKCczJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0xlbmd0aCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdudW1iZXInICYmXG4gICAgdmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8PSBNQVhfU0FGRV9JTlRFR0VSO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTGVuZ3RoO1xuIiwKICAgICJ2YXIgaXNGdW5jdGlvbiA9IHJlcXVpcmUoJy4vaXNGdW5jdGlvbicpLFxuICAgIGlzTGVuZ3RoID0gcmVxdWlyZSgnLi9pc0xlbmd0aCcpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UuIEEgdmFsdWUgaXMgY29uc2lkZXJlZCBhcnJheS1saWtlIGlmIGl0J3NcbiAqIG5vdCBhIGZ1bmN0aW9uIGFuZCBoYXMgYSBgdmFsdWUubGVuZ3RoYCB0aGF0J3MgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gb3JcbiAqIGVxdWFsIHRvIGAwYCBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUmAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKCdhYmMnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5TGlrZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmICFpc0Z1bmN0aW9uKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0FycmF5TGlrZTtcbiIsCiAgICAiLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlcy4gKi9cbnZhciByZUlzVWludCA9IC9eKD86MHxbMS05XVxcZCopJC87XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGluZGV4LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPU1BWF9TQUZFX0lOVEVHRVJdIFRoZSB1cHBlciBib3VuZHMgb2YgYSB2YWxpZCBpbmRleC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgaW5kZXgsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNJbmRleCh2YWx1ZSwgbGVuZ3RoKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICBsZW5ndGggPSBsZW5ndGggPT0gbnVsbCA/IE1BWF9TQUZFX0lOVEVHRVIgOiBsZW5ndGg7XG5cbiAgcmV0dXJuICEhbGVuZ3RoICYmXG4gICAgKHR5cGUgPT0gJ251bWJlcicgfHxcbiAgICAgICh0eXBlICE9ICdzeW1ib2wnICYmIHJlSXNVaW50LnRlc3QodmFsdWUpKSkgJiZcbiAgICAgICAgKHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPCBsZW5ndGgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzSW5kZXg7XG4iLAogICAgInZhciBlcSA9IHJlcXVpcmUoJy4vZXEnKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKSxcbiAgICBpc0luZGV4ID0gcmVxdWlyZSgnLi9faXNJbmRleCcpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpO1xuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gYXJndW1lbnRzIGFyZSBmcm9tIGFuIGl0ZXJhdGVlIGNhbGwuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHBvdGVudGlhbCBpdGVyYXRlZSB2YWx1ZSBhcmd1bWVudC5cbiAqIEBwYXJhbSB7Kn0gaW5kZXggVGhlIHBvdGVudGlhbCBpdGVyYXRlZSBpbmRleCBvciBrZXkgYXJndW1lbnQuXG4gKiBAcGFyYW0geyp9IG9iamVjdCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIG9iamVjdCBhcmd1bWVudC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXJndW1lbnRzIGFyZSBmcm9tIGFuIGl0ZXJhdGVlIGNhbGwsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0l0ZXJhdGVlQ2FsbCh2YWx1ZSwgaW5kZXgsIG9iamVjdCkge1xuICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHR5cGUgPSB0eXBlb2YgaW5kZXg7XG4gIGlmICh0eXBlID09ICdudW1iZXInXG4gICAgICAgID8gKGlzQXJyYXlMaWtlKG9iamVjdCkgJiYgaXNJbmRleChpbmRleCwgb2JqZWN0Lmxlbmd0aCkpXG4gICAgICAgIDogKHR5cGUgPT0gJ3N0cmluZycgJiYgaW5kZXggaW4gb2JqZWN0KVxuICAgICAgKSB7XG4gICAgcmV0dXJuIGVxKG9iamVjdFtpbmRleF0sIHZhbHVlKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNJdGVyYXRlZUNhbGw7XG4iLAogICAgIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udGltZXNgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kc1xuICogb3IgbWF4IGFycmF5IGxlbmd0aCBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gaW52b2tlIGBpdGVyYXRlZWAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiByZXN1bHRzLlxuICovXG5mdW5jdGlvbiBiYXNlVGltZXMobiwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShuKTtcblxuICB3aGlsZSAoKytpbmRleCA8IG4pIHtcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoaW5kZXgpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVRpbWVzO1xuIiwKICAgICIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLiBBIHZhbHVlIGlzIG9iamVjdC1saWtlIGlmIGl0J3Mgbm90IGBudWxsYFxuICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcIm9iamVjdFwiLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc09iamVjdExpa2U7XG4iLAogICAgInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXSc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNBcmd1bWVudHNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAqL1xuZnVuY3Rpb24gYmFzZUlzQXJndW1lbnRzKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IGFyZ3NUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzQXJndW1lbnRzO1xuIiwKICAgICJ2YXIgYmFzZUlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9fYmFzZUlzQXJndW1lbnRzJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBvYmplY3RQcm90by5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoZnVuY3Rpb24oKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FyZ3VtZW50cyhbMSwgMiwgM10pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQXJndW1lbnRzID0gYmFzZUlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID8gYmFzZUlzQXJndW1lbnRzIDogZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgJ2NhbGxlZScpICYmXG4gICAgIXByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwodmFsdWUsICdjYWxsZWUnKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcmd1bWVudHM7XG4iLAogICAgIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhbiBgQXJyYXlgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXkoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXkoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheSgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJyYXk7XG4iLAogICAgIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyBgZmFsc2VgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4xMy4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50aW1lcygyLCBfLnN0dWJGYWxzZSk7XG4gKiAvLyA9PiBbZmFsc2UsIGZhbHNlXVxuICovXG5mdW5jdGlvbiBzdHViRmFsc2UoKSB7XG4gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHViRmFsc2U7XG4iLAogICAgInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpLFxuICAgIHN0dWJGYWxzZSA9IHJlcXVpcmUoJy4vc3R1YkZhbHNlJyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgQnVmZmVyID0gbW9kdWxlRXhwb3J0cyA/IHJvb3QuQnVmZmVyIDogdW5kZWZpbmVkO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlSXNCdWZmZXIgPSBCdWZmZXIgPyBCdWZmZXIuaXNCdWZmZXIgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjMuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0J1ZmZlcihuZXcgQnVmZmVyKDIpKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQnVmZmVyKG5ldyBVaW50OEFycmF5KDIpKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0J1ZmZlciA9IG5hdGl2ZUlzQnVmZmVyIHx8IHN0dWJGYWxzZTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0J1ZmZlcjtcbiIsCiAgICAidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNMZW5ndGggPSByZXF1aXJlKCcuL2lzTGVuZ3RoJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJyxcbiAgICBhcnJheVRhZyA9ICdbb2JqZWN0IEFycmF5XScsXG4gICAgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxuICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJyxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcbiAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nO1xuXG52YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJyxcbiAgICBmbG9hdDMyVGFnID0gJ1tvYmplY3QgRmxvYXQzMkFycmF5XScsXG4gICAgZmxvYXQ2NFRhZyA9ICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nLFxuICAgIGludDhUYWcgPSAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICBpbnQxNlRhZyA9ICdbb2JqZWN0IEludDE2QXJyYXldJyxcbiAgICBpbnQzMlRhZyA9ICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICB1aW50OFRhZyA9ICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICB1aW50OENsYW1wZWRUYWcgPSAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nLFxuICAgIHVpbnQxNlRhZyA9ICdbb2JqZWN0IFVpbnQxNkFycmF5XScsXG4gICAgdWludDMyVGFnID0gJ1tvYmplY3QgVWludDMyQXJyYXldJztcblxuLyoqIFVzZWQgdG8gaWRlbnRpZnkgYHRvU3RyaW5nVGFnYCB2YWx1ZXMgb2YgdHlwZWQgYXJyYXlzLiAqL1xudmFyIHR5cGVkQXJyYXlUYWdzID0ge307XG50eXBlZEFycmF5VGFnc1tmbG9hdDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Zsb2F0NjRUYWddID1cbnR5cGVkQXJyYXlUYWdzW2ludDhUYWddID0gdHlwZWRBcnJheVRhZ3NbaW50MTZUYWddID1cbnR5cGVkQXJyYXlUYWdzW2ludDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQ4VGFnXSA9XG50eXBlZEFycmF5VGFnc1t1aW50OENsYW1wZWRUYWddID0gdHlwZWRBcnJheVRhZ3NbdWludDE2VGFnXSA9XG50eXBlZEFycmF5VGFnc1t1aW50MzJUYWddID0gdHJ1ZTtcbnR5cGVkQXJyYXlUYWdzW2FyZ3NUYWddID0gdHlwZWRBcnJheVRhZ3NbYXJyYXlUYWddID1cbnR5cGVkQXJyYXlUYWdzW2FycmF5QnVmZmVyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Jvb2xUYWddID1cbnR5cGVkQXJyYXlUYWdzW2RhdGFWaWV3VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2RhdGVUYWddID1cbnR5cGVkQXJyYXlUYWdzW2Vycm9yVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Z1bmNUYWddID1cbnR5cGVkQXJyYXlUYWdzW21hcFRhZ10gPSB0eXBlZEFycmF5VGFnc1tudW1iZXJUYWddID1cbnR5cGVkQXJyYXlUYWdzW29iamVjdFRhZ10gPSB0eXBlZEFycmF5VGFnc1tyZWdleHBUYWddID1cbnR5cGVkQXJyYXlUYWdzW3NldFRhZ10gPSB0eXBlZEFycmF5VGFnc1tzdHJpbmdUYWddID1cbnR5cGVkQXJyYXlUYWdzW3dlYWtNYXBUYWddID0gZmFsc2U7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNUeXBlZEFycmF5YCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc1R5cGVkQXJyYXkodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiZcbiAgICBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmICEhdHlwZWRBcnJheVRhZ3NbYmFzZUdldFRhZyh2YWx1ZSldO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc1R5cGVkQXJyYXk7XG4iLAogICAgIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5hcnlgIHdpdGhvdXQgc3VwcG9ydCBmb3Igc3RvcmluZyBtZXRhZGF0YS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2FwIGFyZ3VtZW50cyBmb3IuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VVbmFyeShmdW5jKSB7XG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBmdW5jKHZhbHVlKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVW5hcnk7XG4iLAogICAgInZhciBmcmVlR2xvYmFsID0gcmVxdWlyZSgnLi9fZnJlZUdsb2JhbCcpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgcHJvY2Vzc2AgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVQcm9jZXNzID0gbW9kdWxlRXhwb3J0cyAmJiBmcmVlR2xvYmFsLnByb2Nlc3M7XG5cbi8qKiBVc2VkIHRvIGFjY2VzcyBmYXN0ZXIgTm9kZS5qcyBoZWxwZXJzLiAqL1xudmFyIG5vZGVVdGlsID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIC8vIFVzZSBgdXRpbC50eXBlc2AgZm9yIE5vZGUuanMgMTArLlxuICAgIHZhciB0eXBlcyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlICYmIGZyZWVNb2R1bGUucmVxdWlyZSgndXRpbCcpLnR5cGVzO1xuXG4gICAgaWYgKHR5cGVzKSB7XG4gICAgICByZXR1cm4gdHlwZXM7XG4gICAgfVxuXG4gICAgLy8gTGVnYWN5IGBwcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKWAgZm9yIE5vZGUuanMgPCAxMC5cbiAgICByZXR1cm4gZnJlZVByb2Nlc3MgJiYgZnJlZVByb2Nlc3MuYmluZGluZyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nKCd1dGlsJyk7XG4gIH0gY2F0Y2ggKGUpIHt9XG59KCkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5vZGVVdGlsO1xuIiwKICAgICJ2YXIgYmFzZUlzVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vX2Jhc2VJc1R5cGVkQXJyYXknKSxcbiAgICBiYXNlVW5hcnkgPSByZXF1aXJlKCcuL19iYXNlVW5hcnknKSxcbiAgICBub2RlVXRpbCA9IHJlcXVpcmUoJy4vX25vZGVVdGlsJyk7XG5cbi8qIE5vZGUuanMgaGVscGVyIHJlZmVyZW5jZXMuICovXG52YXIgbm9kZUlzVHlwZWRBcnJheSA9IG5vZGVVdGlsICYmIG5vZGVVdGlsLmlzVHlwZWRBcnJheTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgdHlwZWQgYXJyYXkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzVHlwZWRBcnJheShuZXcgVWludDhBcnJheSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1R5cGVkQXJyYXkoW10pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzVHlwZWRBcnJheSA9IG5vZGVJc1R5cGVkQXJyYXkgPyBiYXNlVW5hcnkobm9kZUlzVHlwZWRBcnJheSkgOiBiYXNlSXNUeXBlZEFycmF5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzVHlwZWRBcnJheTtcbiIsCiAgICAidmFyIGJhc2VUaW1lcyA9IHJlcXVpcmUoJy4vX2Jhc2VUaW1lcycpLFxuICAgIGlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9pc0FyZ3VtZW50cycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0J1ZmZlciA9IHJlcXVpcmUoJy4vaXNCdWZmZXInKSxcbiAgICBpc0luZGV4ID0gcmVxdWlyZSgnLi9faXNJbmRleCcpLFxuICAgIGlzVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vaXNUeXBlZEFycmF5Jyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiB0aGUgYXJyYXktbGlrZSBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5oZXJpdGVkIFNwZWNpZnkgcmV0dXJuaW5nIGluaGVyaXRlZCBwcm9wZXJ0eSBuYW1lcy5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGFycmF5TGlrZUtleXModmFsdWUsIGluaGVyaXRlZCkge1xuICB2YXIgaXNBcnIgPSBpc0FycmF5KHZhbHVlKSxcbiAgICAgIGlzQXJnID0gIWlzQXJyICYmIGlzQXJndW1lbnRzKHZhbHVlKSxcbiAgICAgIGlzQnVmZiA9ICFpc0FyciAmJiAhaXNBcmcgJiYgaXNCdWZmZXIodmFsdWUpLFxuICAgICAgaXNUeXBlID0gIWlzQXJyICYmICFpc0FyZyAmJiAhaXNCdWZmICYmIGlzVHlwZWRBcnJheSh2YWx1ZSksXG4gICAgICBza2lwSW5kZXhlcyA9IGlzQXJyIHx8IGlzQXJnIHx8IGlzQnVmZiB8fCBpc1R5cGUsXG4gICAgICByZXN1bHQgPSBza2lwSW5kZXhlcyA/IGJhc2VUaW1lcyh2YWx1ZS5sZW5ndGgsIFN0cmluZykgOiBbXSxcbiAgICAgIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XG5cbiAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgaWYgKChpbmhlcml0ZWQgfHwgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwga2V5KSkgJiZcbiAgICAgICAgIShza2lwSW5kZXhlcyAmJiAoXG4gICAgICAgICAgIC8vIFNhZmFyaSA5IGhhcyBlbnVtZXJhYmxlIGBhcmd1bWVudHMubGVuZ3RoYCBpbiBzdHJpY3QgbW9kZS5cbiAgICAgICAgICAga2V5ID09ICdsZW5ndGgnIHx8XG4gICAgICAgICAgIC8vIE5vZGUuanMgMC4xMCBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiBidWZmZXJzLlxuICAgICAgICAgICAoaXNCdWZmICYmIChrZXkgPT0gJ29mZnNldCcgfHwga2V5ID09ICdwYXJlbnQnKSkgfHxcbiAgICAgICAgICAgLy8gUGhhbnRvbUpTIDIgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gdHlwZWQgYXJyYXlzLlxuICAgICAgICAgICAoaXNUeXBlICYmIChrZXkgPT0gJ2J1ZmZlcicgfHwga2V5ID09ICdieXRlTGVuZ3RoJyB8fCBrZXkgPT0gJ2J5dGVPZmZzZXQnKSkgfHxcbiAgICAgICAgICAgLy8gU2tpcCBpbmRleCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICBpc0luZGV4KGtleSwgbGVuZ3RoKVxuICAgICAgICApKSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUxpa2VLZXlzO1xuIiwKICAgICIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhIHByb3RvdHlwZSBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm90b3R5cGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNQcm90b3R5cGUodmFsdWUpIHtcbiAgdmFyIEN0b3IgPSB2YWx1ZSAmJiB2YWx1ZS5jb25zdHJ1Y3RvcixcbiAgICAgIHByb3RvID0gKHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3Rvci5wcm90b3R5cGUpIHx8IG9iamVjdFByb3RvO1xuXG4gIHJldHVybiB2YWx1ZSA9PT0gcHJvdG87XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNQcm90b3R5cGU7XG4iLAogICAgIi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlXG4gKiBbYE9iamVjdC5rZXlzYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXG4gKiBleGNlcHQgdGhhdCBpdCBpbmNsdWRlcyBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0aWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBuYXRpdmVLZXlzSW4ob2JqZWN0KSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgaWYgKG9iamVjdCAhPSBudWxsKSB7XG4gICAgZm9yICh2YXIga2V5IGluIE9iamVjdChvYmplY3QpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdGl2ZUtleXNJbjtcbiIsCiAgICAidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIGlzUHJvdG90eXBlID0gcmVxdWlyZSgnLi9faXNQcm90b3R5cGUnKSxcbiAgICBuYXRpdmVLZXlzSW4gPSByZXF1aXJlKCcuL19uYXRpdmVLZXlzSW4nKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzSW5gIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYmFzZUtleXNJbihvYmplY3QpIHtcbiAgaWYgKCFpc09iamVjdChvYmplY3QpKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUtleXNJbihvYmplY3QpO1xuICB9XG4gIHZhciBpc1Byb3RvID0gaXNQcm90b3R5cGUob2JqZWN0KSxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICBpZiAoIShrZXkgPT0gJ2NvbnN0cnVjdG9yJyAmJiAoaXNQcm90byB8fCAhaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpKSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlS2V5c0luO1xuIiwKICAgICJ2YXIgYXJyYXlMaWtlS2V5cyA9IHJlcXVpcmUoJy4vX2FycmF5TGlrZUtleXMnKSxcbiAgICBiYXNlS2V5c0luID0gcmVxdWlyZSgnLi9fYmFzZUtleXNJbicpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXG4gKlxuICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5rZXlzSW4obmV3IEZvbyk7XG4gKiAvLyA9PiBbJ2EnLCAnYicsICdjJ10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqL1xuZnVuY3Rpb24ga2V5c0luKG9iamVjdCkge1xuICByZXR1cm4gaXNBcnJheUxpa2Uob2JqZWN0KSA/IGFycmF5TGlrZUtleXMob2JqZWN0LCB0cnVlKSA6IGJhc2VLZXlzSW4ob2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBrZXlzSW47XG4iLAogICAgInZhciBiYXNlUmVzdCA9IHJlcXVpcmUoJy4vX2Jhc2VSZXN0JyksXG4gICAgZXEgPSByZXF1aXJlKCcuL2VxJyksXG4gICAgaXNJdGVyYXRlZUNhbGwgPSByZXF1aXJlKCcuL19pc0l0ZXJhdGVlQ2FsbCcpLFxuICAgIGtleXNJbiA9IHJlcXVpcmUoJy4va2V5c0luJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQXNzaWducyBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0aWVzIG9mIHNvdXJjZVxuICogb2JqZWN0cyB0byB0aGUgZGVzdGluYXRpb24gb2JqZWN0IGZvciBhbGwgZGVzdGluYXRpb24gcHJvcGVydGllcyB0aGF0XG4gKiByZXNvbHZlIHRvIGB1bmRlZmluZWRgLiBTb3VyY2Ugb2JqZWN0cyBhcmUgYXBwbGllZCBmcm9tIGxlZnQgdG8gcmlnaHQuXG4gKiBPbmNlIGEgcHJvcGVydHkgaXMgc2V0LCBhZGRpdGlvbmFsIHZhbHVlcyBvZiB0aGUgc2FtZSBwcm9wZXJ0eSBhcmUgaWdub3JlZC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAcGFyYW0gey4uLk9iamVjdH0gW3NvdXJjZXNdIFRoZSBzb3VyY2Ugb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKiBAc2VlIF8uZGVmYXVsdHNEZWVwXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uZGVmYXVsdHMoeyAnYSc6IDEgfSwgeyAnYic6IDIgfSwgeyAnYSc6IDMgfSk7XG4gKiAvLyA9PiB7ICdhJzogMSwgJ2InOiAyIH1cbiAqL1xudmFyIGRlZmF1bHRzID0gYmFzZVJlc3QoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2VzKSB7XG4gIG9iamVjdCA9IE9iamVjdChvYmplY3QpO1xuXG4gIHZhciBpbmRleCA9IC0xO1xuICB2YXIgbGVuZ3RoID0gc291cmNlcy5sZW5ndGg7XG4gIHZhciBndWFyZCA9IGxlbmd0aCA+IDIgPyBzb3VyY2VzWzJdIDogdW5kZWZpbmVkO1xuXG4gIGlmIChndWFyZCAmJiBpc0l0ZXJhdGVlQ2FsbChzb3VyY2VzWzBdLCBzb3VyY2VzWzFdLCBndWFyZCkpIHtcbiAgICBsZW5ndGggPSAxO1xuICB9XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgc291cmNlID0gc291cmNlc1tpbmRleF07XG4gICAgdmFyIHByb3BzID0ga2V5c0luKHNvdXJjZSk7XG4gICAgdmFyIHByb3BzSW5kZXggPSAtMTtcbiAgICB2YXIgcHJvcHNMZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cbiAgICB3aGlsZSAoKytwcm9wc0luZGV4IDwgcHJvcHNMZW5ndGgpIHtcbiAgICAgIHZhciBrZXkgPSBwcm9wc1twcm9wc0luZGV4XTtcbiAgICAgIHZhciB2YWx1ZSA9IG9iamVjdFtrZXldO1xuXG4gICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgIChlcSh2YWx1ZSwgb2JqZWN0UHJvdG9ba2V5XSkgJiYgIWhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpKSkge1xuICAgICAgICBvYmplY3Rba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvYmplY3Q7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBkZWZhdWx0cztcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbi8qXG4gIFRoaXMgZmlsZSBpcyBhIHJlZHVjZWQgYW5kIGFkYXB0ZWQgdmVyc2lvbiBvZiB0aGUgbWFpbiBsaWIvaW50ZXJuYWwvcGVyX2NvbnRleHQvcHJpbW9yZGlhbHMuanMgZmlsZSBkZWZpbmVkIGF0XG5cbiAgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvbWFzdGVyL2xpYi9pbnRlcm5hbC9wZXJfY29udGV4dC9wcmltb3JkaWFscy5qc1xuXG4gIERvbid0IHRyeSB0byByZXBsYWNlIHdpdGggdGhlIG9yaWdpbmFsIGZpbGUgYW5kIGtlZXAgaXQgdXAgdG8gZGF0ZSB3aXRoIHRoZSB1cHN0cmVhbSBmaWxlLlxuKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICBBcnJheUlzQXJyYXkoc2VsZikge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHNlbGYpXG4gIH0sXG4gIEFycmF5UHJvdG90eXBlSW5jbHVkZXMoc2VsZiwgZWwpIHtcbiAgICByZXR1cm4gc2VsZi5pbmNsdWRlcyhlbClcbiAgfSxcbiAgQXJyYXlQcm90b3R5cGVJbmRleE9mKHNlbGYsIGVsKSB7XG4gICAgcmV0dXJuIHNlbGYuaW5kZXhPZihlbClcbiAgfSxcbiAgQXJyYXlQcm90b3R5cGVKb2luKHNlbGYsIHNlcCkge1xuICAgIHJldHVybiBzZWxmLmpvaW4oc2VwKVxuICB9LFxuICBBcnJheVByb3RvdHlwZU1hcChzZWxmLCBmbikge1xuICAgIHJldHVybiBzZWxmLm1hcChmbilcbiAgfSxcbiAgQXJyYXlQcm90b3R5cGVQb3Aoc2VsZiwgZWwpIHtcbiAgICByZXR1cm4gc2VsZi5wb3AoZWwpXG4gIH0sXG4gIEFycmF5UHJvdG90eXBlUHVzaChzZWxmLCBlbCkge1xuICAgIHJldHVybiBzZWxmLnB1c2goZWwpXG4gIH0sXG4gIEFycmF5UHJvdG90eXBlU2xpY2Uoc2VsZiwgc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiBzZWxmLnNsaWNlKHN0YXJ0LCBlbmQpXG4gIH0sXG4gIEVycm9yLFxuICBGdW5jdGlvblByb3RvdHlwZUNhbGwoZm4sIHRoaXNBcmdzLCAuLi5hcmdzKSB7XG4gICAgcmV0dXJuIGZuLmNhbGwodGhpc0FyZ3MsIC4uLmFyZ3MpXG4gIH0sXG4gIEZ1bmN0aW9uUHJvdG90eXBlU3ltYm9sSGFzSW5zdGFuY2Uoc2VsZiwgaW5zdGFuY2UpIHtcbiAgICByZXR1cm4gRnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV0uY2FsbChzZWxmLCBpbnN0YW5jZSlcbiAgfSxcbiAgTWF0aEZsb29yOiBNYXRoLmZsb29yLFxuICBOdW1iZXIsXG4gIE51bWJlcklzSW50ZWdlcjogTnVtYmVyLmlzSW50ZWdlcixcbiAgTnVtYmVySXNOYU46IE51bWJlci5pc05hTixcbiAgTnVtYmVyTUFYX1NBRkVfSU5URUdFUjogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsXG4gIE51bWJlck1JTl9TQUZFX0lOVEVHRVI6IE51bWJlci5NSU5fU0FGRV9JTlRFR0VSLFxuICBOdW1iZXJQYXJzZUludDogTnVtYmVyLnBhcnNlSW50LFxuICBPYmplY3REZWZpbmVQcm9wZXJ0aWVzKHNlbGYsIHByb3BzKSB7XG4gICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHNlbGYsIHByb3BzKVxuICB9LFxuICBPYmplY3REZWZpbmVQcm9wZXJ0eShzZWxmLCBuYW1lLCBwcm9wKSB7XG4gICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzZWxmLCBuYW1lLCBwcm9wKVxuICB9LFxuICBPYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc2VsZiwgbmFtZSkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNlbGYsIG5hbWUpXG4gIH0sXG4gIE9iamVjdEtleXMob2JqKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iailcbiAgfSxcbiAgT2JqZWN0U2V0UHJvdG90eXBlT2YodGFyZ2V0LCBwcm90bykge1xuICAgIHJldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YodGFyZ2V0LCBwcm90bylcbiAgfSxcbiAgUHJvbWlzZSxcbiAgUHJvbWlzZVByb3RvdHlwZUNhdGNoKHNlbGYsIGZuKSB7XG4gICAgcmV0dXJuIHNlbGYuY2F0Y2goZm4pXG4gIH0sXG4gIFByb21pc2VQcm90b3R5cGVUaGVuKHNlbGYsIHRoZW5GbiwgY2F0Y2hGbikge1xuICAgIHJldHVybiBzZWxmLnRoZW4odGhlbkZuLCBjYXRjaEZuKVxuICB9LFxuICBQcm9taXNlUmVqZWN0KGVycikge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnIpXG4gIH0sXG4gIFByb21pc2VSZXNvbHZlKHZhbCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsKVxuICB9LFxuICBSZWZsZWN0QXBwbHk6IFJlZmxlY3QuYXBwbHksXG4gIFJlZ0V4cFByb3RvdHlwZVRlc3Qoc2VsZiwgdmFsdWUpIHtcbiAgICByZXR1cm4gc2VsZi50ZXN0KHZhbHVlKVxuICB9LFxuICBTYWZlU2V0OiBTZXQsXG4gIFN0cmluZyxcbiAgU3RyaW5nUHJvdG90eXBlU2xpY2Uoc2VsZiwgc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiBzZWxmLnNsaWNlKHN0YXJ0LCBlbmQpXG4gIH0sXG4gIFN0cmluZ1Byb3RvdHlwZVRvTG93ZXJDYXNlKHNlbGYpIHtcbiAgICByZXR1cm4gc2VsZi50b0xvd2VyQ2FzZSgpXG4gIH0sXG4gIFN0cmluZ1Byb3RvdHlwZVRvVXBwZXJDYXNlKHNlbGYpIHtcbiAgICByZXR1cm4gc2VsZi50b1VwcGVyQ2FzZSgpXG4gIH0sXG4gIFN0cmluZ1Byb3RvdHlwZVRyaW0oc2VsZikge1xuICAgIHJldHVybiBzZWxmLnRyaW0oKVxuICB9LFxuICBTeW1ib2wsXG4gIFN5bWJvbEZvcjogU3ltYm9sLmZvcixcbiAgU3ltYm9sQXN5bmNJdGVyYXRvcjogU3ltYm9sLmFzeW5jSXRlcmF0b3IsXG4gIFN5bWJvbEhhc0luc3RhbmNlOiBTeW1ib2wuaGFzSW5zdGFuY2UsXG4gIFN5bWJvbEl0ZXJhdG9yOiBTeW1ib2wuaXRlcmF0b3IsXG4gIFN5bWJvbERpc3Bvc2U6IFN5bWJvbC5kaXNwb3NlIHx8IFN5bWJvbCgnU3ltYm9sLmRpc3Bvc2UnKSxcbiAgU3ltYm9sQXN5bmNEaXNwb3NlOiBTeW1ib2wuYXN5bmNEaXNwb3NlIHx8IFN5bWJvbCgnU3ltYm9sLmFzeW5jRGlzcG9zZScpLFxuICBUeXBlZEFycmF5UHJvdG90eXBlU2V0KHNlbGYsIGJ1ZiwgbGVuKSB7XG4gICAgcmV0dXJuIHNlbGYuc2V0KGJ1ZiwgbGVuKVxuICB9LFxuICBCb29sZWFuOiBCb29sZWFuLFxuICBVaW50OEFycmF5XG59XG4iLAogICAgIi8qKlxuICogQGF1dGhvciBUb3J1IE5hZ2FzaGltYSA8aHR0cHM6Ly9naXRodWIuY29tL215c3RpY2F0ZWE+XG4gKiBAY29weXJpZ2h0IDIwMTUgVG9ydSBOYWdhc2hpbWEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBTZWUgTElDRU5TRSBmaWxlIGluIHJvb3QgZGlyZWN0b3J5IGZvciBmdWxsIGxpY2Vuc2UuXG4gKi9cbid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBQcml2YXRlRGF0YVxuICogQHByb3BlcnR5IHtFdmVudFRhcmdldH0gZXZlbnRUYXJnZXQgVGhlIGV2ZW50IHRhcmdldC5cbiAqIEBwcm9wZXJ0eSB7e3R5cGU6c3RyaW5nfX0gZXZlbnQgVGhlIG9yaWdpbmFsIGV2ZW50IG9iamVjdC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBldmVudFBoYXNlIFRoZSBjdXJyZW50IGV2ZW50IHBoYXNlLlxuICogQHByb3BlcnR5IHtFdmVudFRhcmdldHxudWxsfSBjdXJyZW50VGFyZ2V0IFRoZSBjdXJyZW50IGV2ZW50IHRhcmdldC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gY2FuY2VsZWQgVGhlIGZsYWcgdG8gcHJldmVudCBkZWZhdWx0LlxuICogQHByb3BlcnR5IHtib29sZWFufSBzdG9wcGVkIFRoZSBmbGFnIHRvIHN0b3AgcHJvcGFnYXRpb24uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGltbWVkaWF0ZVN0b3BwZWQgVGhlIGZsYWcgdG8gc3RvcCBwcm9wYWdhdGlvbiBpbW1lZGlhdGVseS5cbiAqIEBwcm9wZXJ0eSB7RnVuY3Rpb258bnVsbH0gcGFzc2l2ZUxpc3RlbmVyIFRoZSBsaXN0ZW5lciBpZiB0aGUgY3VycmVudCBsaXN0ZW5lciBpcyBwYXNzaXZlLiBPdGhlcndpc2UgdGhpcyBpcyBudWxsLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHRpbWVTdGFtcCBUaGUgdW5peCB0aW1lLlxuICogQHByaXZhdGVcbiAqL1xuXG4vKipcbiAqIFByaXZhdGUgZGF0YSBmb3IgZXZlbnQgd3JhcHBlcnMuXG4gKiBAdHlwZSB7V2Vha01hcDxFdmVudCwgUHJpdmF0ZURhdGE+fVxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgcHJpdmF0ZURhdGEgPSBuZXcgV2Vha01hcCgpO1xuXG4vKipcbiAqIENhY2hlIGZvciB3cmFwcGVyIGNsYXNzZXMuXG4gKiBAdHlwZSB7V2Vha01hcDxPYmplY3QsIEZ1bmN0aW9uPn1cbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IHdyYXBwZXJzID0gbmV3IFdlYWtNYXAoKTtcblxuLyoqXG4gKiBHZXQgcHJpdmF0ZSBkYXRhLlxuICogQHBhcmFtIHtFdmVudH0gZXZlbnQgVGhlIGV2ZW50IG9iamVjdCB0byBnZXQgcHJpdmF0ZSBkYXRhLlxuICogQHJldHVybnMge1ByaXZhdGVEYXRhfSBUaGUgcHJpdmF0ZSBkYXRhIG9mIHRoZSBldmVudC5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHBkKGV2ZW50KSB7XG4gICAgY29uc3QgcmV0diA9IHByaXZhdGVEYXRhLmdldChldmVudCk7XG4gICAgY29uc29sZS5hc3NlcnQoXG4gICAgICAgIHJldHYgIT0gbnVsbCxcbiAgICAgICAgXCIndGhpcycgaXMgZXhwZWN0ZWQgYW4gRXZlbnQgb2JqZWN0LCBidXQgZ290XCIsXG4gICAgICAgIGV2ZW50XG4gICAgKTtcbiAgICByZXR1cm4gcmV0dlxufVxuXG4vKipcbiAqIGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jc2V0LXRoZS1jYW5jZWxlZC1mbGFnXG4gKiBAcGFyYW0gZGF0YSB7UHJpdmF0ZURhdGF9IHByaXZhdGUgZGF0YS5cbiAqL1xuZnVuY3Rpb24gc2V0Q2FuY2VsRmxhZyhkYXRhKSB7XG4gICAgaWYgKGRhdGEucGFzc2l2ZUxpc3RlbmVyICE9IG51bGwpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdHlwZW9mIGNvbnNvbGUgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICAgICAgICAgIHR5cGVvZiBjb25zb2xlLmVycm9yID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgIFwiVW5hYmxlIHRvIHByZXZlbnREZWZhdWx0IGluc2lkZSBwYXNzaXZlIGV2ZW50IGxpc3RlbmVyIGludm9jYXRpb24uXCIsXG4gICAgICAgICAgICAgICAgZGF0YS5wYXNzaXZlTGlzdGVuZXJcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmICghZGF0YS5ldmVudC5jYW5jZWxhYmxlKSB7XG4gICAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGRhdGEuY2FuY2VsZWQgPSB0cnVlO1xuICAgIGlmICh0eXBlb2YgZGF0YS5ldmVudC5wcmV2ZW50RGVmYXVsdCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGRhdGEuZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2ludGVyZmFjZS1ldmVudFxuICogQHByaXZhdGVcbiAqL1xuLyoqXG4gKiBUaGUgZXZlbnQgd3JhcHBlci5cbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtFdmVudFRhcmdldH0gZXZlbnRUYXJnZXQgVGhlIGV2ZW50IHRhcmdldCBvZiB0aGlzIGRpc3BhdGNoaW5nLlxuICogQHBhcmFtIHtFdmVudHx7dHlwZTpzdHJpbmd9fSBldmVudCBUaGUgb3JpZ2luYWwgZXZlbnQgdG8gd3JhcC5cbiAqL1xuZnVuY3Rpb24gRXZlbnQoZXZlbnRUYXJnZXQsIGV2ZW50KSB7XG4gICAgcHJpdmF0ZURhdGEuc2V0KHRoaXMsIHtcbiAgICAgICAgZXZlbnRUYXJnZXQsXG4gICAgICAgIGV2ZW50LFxuICAgICAgICBldmVudFBoYXNlOiAyLFxuICAgICAgICBjdXJyZW50VGFyZ2V0OiBldmVudFRhcmdldCxcbiAgICAgICAgY2FuY2VsZWQ6IGZhbHNlLFxuICAgICAgICBzdG9wcGVkOiBmYWxzZSxcbiAgICAgICAgaW1tZWRpYXRlU3RvcHBlZDogZmFsc2UsXG4gICAgICAgIHBhc3NpdmVMaXN0ZW5lcjogbnVsbCxcbiAgICAgICAgdGltZVN0YW1wOiBldmVudC50aW1lU3RhbXAgfHwgRGF0ZS5ub3coKSxcbiAgICB9KTtcblxuICAgIC8vIGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI1VuZm9yZ2VhYmxlXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwiaXNUcnVzdGVkXCIsIHsgdmFsdWU6IGZhbHNlLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xuXG4gICAgLy8gRGVmaW5lIGFjY2Vzc29yc1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhldmVudCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGtleXNbaV07XG4gICAgICAgIGlmICghKGtleSBpbiB0aGlzKSkge1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIGtleSwgZGVmaW5lUmVkaXJlY3REZXNjcmlwdG9yKGtleSkpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBTaG91bGQgYmUgZW51bWVyYWJsZSwgYnV0IGNsYXNzIG1ldGhvZHMgYXJlIG5vdCBlbnVtZXJhYmxlLlxuRXZlbnQucHJvdG90eXBlID0ge1xuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoaXMgZXZlbnQuXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICBnZXQgdHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHBkKHRoaXMpLmV2ZW50LnR5cGVcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHRhcmdldCBvZiB0aGlzIGV2ZW50LlxuICAgICAqIEB0eXBlIHtFdmVudFRhcmdldH1cbiAgICAgKi9cbiAgICBnZXQgdGFyZ2V0KCkge1xuICAgICAgICByZXR1cm4gcGQodGhpcykuZXZlbnRUYXJnZXRcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHRhcmdldCBvZiB0aGlzIGV2ZW50LlxuICAgICAqIEB0eXBlIHtFdmVudFRhcmdldH1cbiAgICAgKi9cbiAgICBnZXQgY3VycmVudFRhcmdldCgpIHtcbiAgICAgICAgcmV0dXJuIHBkKHRoaXMpLmN1cnJlbnRUYXJnZXRcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMge0V2ZW50VGFyZ2V0W119IFRoZSBjb21wb3NlZCBwYXRoIG9mIHRoaXMgZXZlbnQuXG4gICAgICovXG4gICAgY29tcG9zZWRQYXRoKCkge1xuICAgICAgICBjb25zdCBjdXJyZW50VGFyZ2V0ID0gcGQodGhpcykuY3VycmVudFRhcmdldDtcbiAgICAgICAgaWYgKGN1cnJlbnRUYXJnZXQgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtjdXJyZW50VGFyZ2V0XVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb25zdGFudCBvZiBOT05FLlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgZ2V0IE5PTkUoKSB7XG4gICAgICAgIHJldHVybiAwXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnN0YW50IG9mIENBUFRVUklOR19QSEFTRS5cbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIGdldCBDQVBUVVJJTkdfUEhBU0UoKSB7XG4gICAgICAgIHJldHVybiAxXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnN0YW50IG9mIEFUX1RBUkdFVC5cbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIGdldCBBVF9UQVJHRVQoKSB7XG4gICAgICAgIHJldHVybiAyXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnN0YW50IG9mIEJVQkJMSU5HX1BIQVNFLlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgZ2V0IEJVQkJMSU5HX1BIQVNFKCkge1xuICAgICAgICByZXR1cm4gM1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGFyZ2V0IG9mIHRoaXMgZXZlbnQuXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBnZXQgZXZlbnRQaGFzZSgpIHtcbiAgICAgICAgcmV0dXJuIHBkKHRoaXMpLmV2ZW50UGhhc2VcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU3RvcCBldmVudCBidWJibGluZy5cbiAgICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICAgKi9cbiAgICBzdG9wUHJvcGFnYXRpb24oKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBwZCh0aGlzKTtcblxuICAgICAgICBkYXRhLnN0b3BwZWQgPSB0cnVlO1xuICAgICAgICBpZiAodHlwZW9mIGRhdGEuZXZlbnQuc3RvcFByb3BhZ2F0aW9uID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIGRhdGEuZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU3RvcCBldmVudCBidWJibGluZy5cbiAgICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICAgKi9cbiAgICBzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBwZCh0aGlzKTtcblxuICAgICAgICBkYXRhLnN0b3BwZWQgPSB0cnVlO1xuICAgICAgICBkYXRhLmltbWVkaWF0ZVN0b3BwZWQgPSB0cnVlO1xuICAgICAgICBpZiAodHlwZW9mIGRhdGEuZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIGRhdGEuZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGZsYWcgdG8gYmUgYnViYmxpbmcuXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgZ2V0IGJ1YmJsZXMoKSB7XG4gICAgICAgIHJldHVybiBCb29sZWFuKHBkKHRoaXMpLmV2ZW50LmJ1YmJsZXMpXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBmbGFnIHRvIGJlIGNhbmNlbGFibGUuXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgZ2V0IGNhbmNlbGFibGUoKSB7XG4gICAgICAgIHJldHVybiBCb29sZWFuKHBkKHRoaXMpLmV2ZW50LmNhbmNlbGFibGUpXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbmNlbCB0aGlzIGV2ZW50LlxuICAgICAqIEByZXR1cm5zIHt2b2lkfVxuICAgICAqL1xuICAgIHByZXZlbnREZWZhdWx0KCkge1xuICAgICAgICBzZXRDYW5jZWxGbGFnKHBkKHRoaXMpKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGZsYWcgdG8gaW5kaWNhdGUgY2FuY2VsbGF0aW9uIHN0YXRlLlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIGdldCBkZWZhdWx0UHJldmVudGVkKCkge1xuICAgICAgICByZXR1cm4gcGQodGhpcykuY2FuY2VsZWRcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGZsYWcgdG8gYmUgY29tcG9zZWQuXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgZ2V0IGNvbXBvc2VkKCkge1xuICAgICAgICByZXR1cm4gQm9vbGVhbihwZCh0aGlzKS5ldmVudC5jb21wb3NlZClcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHVuaXggdGltZSBvZiB0aGlzIGV2ZW50LlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgZ2V0IHRpbWVTdGFtcCgpIHtcbiAgICAgICAgcmV0dXJuIHBkKHRoaXMpLnRpbWVTdGFtcFxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGFyZ2V0IG9mIHRoaXMgZXZlbnQuXG4gICAgICogQHR5cGUge0V2ZW50VGFyZ2V0fVxuICAgICAqIEBkZXByZWNhdGVkXG4gICAgICovXG4gICAgZ2V0IHNyY0VsZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiBwZCh0aGlzKS5ldmVudFRhcmdldFxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZmxhZyB0byBzdG9wIGV2ZW50IGJ1YmJsaW5nLlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBkZXByZWNhdGVkXG4gICAgICovXG4gICAgZ2V0IGNhbmNlbEJ1YmJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHBkKHRoaXMpLnN0b3BwZWRcbiAgICB9LFxuICAgIHNldCBjYW5jZWxCdWJibGUodmFsdWUpIHtcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGF0YSA9IHBkKHRoaXMpO1xuXG4gICAgICAgIGRhdGEuc3RvcHBlZCA9IHRydWU7XG4gICAgICAgIGlmICh0eXBlb2YgZGF0YS5ldmVudC5jYW5jZWxCdWJibGUgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICBkYXRhLmV2ZW50LmNhbmNlbEJ1YmJsZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGZsYWcgdG8gaW5kaWNhdGUgY2FuY2VsbGF0aW9uIHN0YXRlLlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBkZXByZWNhdGVkXG4gICAgICovXG4gICAgZ2V0IHJldHVyblZhbHVlKCkge1xuICAgICAgICByZXR1cm4gIXBkKHRoaXMpLmNhbmNlbGVkXG4gICAgfSxcbiAgICBzZXQgcmV0dXJuVmFsdWUodmFsdWUpIHtcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgc2V0Q2FuY2VsRmxhZyhwZCh0aGlzKSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZSB0aGlzIGV2ZW50IG9iamVjdC4gQnV0IGRvIG5vdGhpbmcgdW5kZXIgZXZlbnQgZGlzcGF0Y2hpbmcuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgVGhlIGV2ZW50IHR5cGUuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbYnViYmxlcz1mYWxzZV0gVGhlIGZsYWcgdG8gYmUgcG9zc2libGUgdG8gYnViYmxlIHVwLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NhbmNlbGFibGU9ZmFsc2VdIFRoZSBmbGFnIHRvIGJlIHBvc3NpYmxlIHRvIGNhbmNlbC5cbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqL1xuICAgIGluaXRFdmVudCgpIHtcbiAgICAgICAgLy8gRG8gbm90aGluZy5cbiAgICB9LFxufTtcblxuLy8gYGNvbnN0cnVjdG9yYCBpcyBub3QgZW51bWVyYWJsZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShFdmVudC5wcm90b3R5cGUsIFwiY29uc3RydWN0b3JcIiwge1xuICAgIHZhbHVlOiBFdmVudCxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgd3JpdGFibGU6IHRydWUsXG59KTtcblxuLy8gRW5zdXJlIGBldmVudCBpbnN0YW5jZW9mIHdpbmRvdy5FdmVudGAgaXMgYHRydWVgLlxuaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5FdmVudCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihFdmVudC5wcm90b3R5cGUsIHdpbmRvdy5FdmVudC5wcm90b3R5cGUpO1xuXG4gICAgLy8gTWFrZSBhc3NvY2lhdGlvbiBmb3Igd3JhcHBlcnMuXG4gICAgd3JhcHBlcnMuc2V0KHdpbmRvdy5FdmVudC5wcm90b3R5cGUsIEV2ZW50KTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3IgdG8gcmVkaXJlY3QgYSBnaXZlbiBwcm9wZXJ0eS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgUHJvcGVydHkgbmFtZSB0byBkZWZpbmUgcHJvcGVydHkgZGVzY3JpcHRvci5cbiAqIEByZXR1cm5zIHtQcm9wZXJ0eURlc2NyaXB0b3J9IFRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9yIHRvIHJlZGlyZWN0IHRoZSBwcm9wZXJ0eS5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGRlZmluZVJlZGlyZWN0RGVzY3JpcHRvcihrZXkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgICByZXR1cm4gcGQodGhpcykuZXZlbnRba2V5XVxuICAgICAgICB9LFxuICAgICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgICAgIHBkKHRoaXMpLmV2ZW50W2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIH1cbn1cblxuLyoqXG4gKiBHZXQgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3IgdG8gY2FsbCBhIGdpdmVuIG1ldGhvZCBwcm9wZXJ0eS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgUHJvcGVydHkgbmFtZSB0byBkZWZpbmUgcHJvcGVydHkgZGVzY3JpcHRvci5cbiAqIEByZXR1cm5zIHtQcm9wZXJ0eURlc2NyaXB0b3J9IFRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9yIHRvIGNhbGwgdGhlIG1ldGhvZCBwcm9wZXJ0eS5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGRlZmluZUNhbGxEZXNjcmlwdG9yKGtleSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlKCkge1xuICAgICAgICAgICAgY29uc3QgZXZlbnQgPSBwZCh0aGlzKS5ldmVudDtcbiAgICAgICAgICAgIHJldHVybiBldmVudFtrZXldLmFwcGx5KGV2ZW50LCBhcmd1bWVudHMpXG4gICAgICAgIH0sXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICB9XG59XG5cbi8qKlxuICogRGVmaW5lIG5ldyB3cmFwcGVyIGNsYXNzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gQmFzZUV2ZW50IFRoZSBiYXNlIHdyYXBwZXIgY2xhc3MuXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvdG8gVGhlIHByb3RvdHlwZSBvZiB0aGUgb3JpZ2luYWwgZXZlbnQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFRoZSBkZWZpbmVkIHdyYXBwZXIgY2xhc3MuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBkZWZpbmVXcmFwcGVyKEJhc2VFdmVudCwgcHJvdG8pIHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMocHJvdG8pO1xuICAgIGlmIChrZXlzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gQmFzZUV2ZW50XG4gICAgfVxuXG4gICAgLyoqIEN1c3RvbUV2ZW50ICovXG4gICAgZnVuY3Rpb24gQ3VzdG9tRXZlbnQoZXZlbnRUYXJnZXQsIGV2ZW50KSB7XG4gICAgICAgIEJhc2VFdmVudC5jYWxsKHRoaXMsIGV2ZW50VGFyZ2V0LCBldmVudCk7XG4gICAgfVxuXG4gICAgQ3VzdG9tRXZlbnQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShCYXNlRXZlbnQucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBDdXN0b21FdmVudCwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9LFxuICAgIH0pO1xuXG4gICAgLy8gRGVmaW5lIGFjY2Vzc29ycy5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgaWYgKCEoa2V5IGluIEJhc2VFdmVudC5wcm90b3R5cGUpKSB7XG4gICAgICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwcm90bywga2V5KTtcbiAgICAgICAgICAgIGNvbnN0IGlzRnVuYyA9IHR5cGVvZiBkZXNjcmlwdG9yLnZhbHVlID09PSBcImZ1bmN0aW9uXCI7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoXG4gICAgICAgICAgICAgICAgQ3VzdG9tRXZlbnQucHJvdG90eXBlLFxuICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICBpc0Z1bmNcbiAgICAgICAgICAgICAgICAgICAgPyBkZWZpbmVDYWxsRGVzY3JpcHRvcihrZXkpXG4gICAgICAgICAgICAgICAgICAgIDogZGVmaW5lUmVkaXJlY3REZXNjcmlwdG9yKGtleSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gQ3VzdG9tRXZlbnRcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHdyYXBwZXIgY2xhc3Mgb2YgYSBnaXZlbiBwcm90b3R5cGUuXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvdG8gVGhlIHByb3RvdHlwZSBvZiB0aGUgb3JpZ2luYWwgZXZlbnQgdG8gZ2V0IGl0cyB3cmFwcGVyLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBUaGUgd3JhcHBlciBjbGFzcy5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGdldFdyYXBwZXIocHJvdG8pIHtcbiAgICBpZiAocHJvdG8gPT0gbnVsbCB8fCBwcm90byA9PT0gT2JqZWN0LnByb3RvdHlwZSkge1xuICAgICAgICByZXR1cm4gRXZlbnRcbiAgICB9XG5cbiAgICBsZXQgd3JhcHBlciA9IHdyYXBwZXJzLmdldChwcm90byk7XG4gICAgaWYgKHdyYXBwZXIgPT0gbnVsbCkge1xuICAgICAgICB3cmFwcGVyID0gZGVmaW5lV3JhcHBlcihnZXRXcmFwcGVyKE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90bykpLCBwcm90byk7XG4gICAgICAgIHdyYXBwZXJzLnNldChwcm90bywgd3JhcHBlcik7XG4gICAgfVxuICAgIHJldHVybiB3cmFwcGVyXG59XG5cbi8qKlxuICogV3JhcCBhIGdpdmVuIGV2ZW50IHRvIG1hbmFnZW1lbnQgYSBkaXNwYXRjaGluZy5cbiAqIEBwYXJhbSB7RXZlbnRUYXJnZXR9IGV2ZW50VGFyZ2V0IFRoZSBldmVudCB0YXJnZXQgb2YgdGhpcyBkaXNwYXRjaGluZy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBldmVudCBUaGUgZXZlbnQgdG8gd3JhcC5cbiAqIEByZXR1cm5zIHtFdmVudH0gVGhlIHdyYXBwZXIgaW5zdGFuY2UuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiB3cmFwRXZlbnQoZXZlbnRUYXJnZXQsIGV2ZW50KSB7XG4gICAgY29uc3QgV3JhcHBlciA9IGdldFdyYXBwZXIoT2JqZWN0LmdldFByb3RvdHlwZU9mKGV2ZW50KSk7XG4gICAgcmV0dXJuIG5ldyBXcmFwcGVyKGV2ZW50VGFyZ2V0LCBldmVudClcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGltbWVkaWF0ZVN0b3BwZWQgZmxhZyBvZiBhIGdpdmVuIGV2ZW50LlxuICogQHBhcmFtIHtFdmVudH0gZXZlbnQgVGhlIGV2ZW50IHRvIGdldC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBUaGUgZmxhZyB0byBzdG9wIHByb3BhZ2F0aW9uIGltbWVkaWF0ZWx5LlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaXNTdG9wcGVkKGV2ZW50KSB7XG4gICAgcmV0dXJuIHBkKGV2ZW50KS5pbW1lZGlhdGVTdG9wcGVkXG59XG5cbi8qKlxuICogU2V0IHRoZSBjdXJyZW50IGV2ZW50IHBoYXNlIG9mIGEgZ2l2ZW4gZXZlbnQuXG4gKiBAcGFyYW0ge0V2ZW50fSBldmVudCBUaGUgZXZlbnQgdG8gc2V0IGN1cnJlbnQgdGFyZ2V0LlxuICogQHBhcmFtIHtudW1iZXJ9IGV2ZW50UGhhc2UgTmV3IGV2ZW50IHBoYXNlLlxuICogQHJldHVybnMge3ZvaWR9XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzZXRFdmVudFBoYXNlKGV2ZW50LCBldmVudFBoYXNlKSB7XG4gICAgcGQoZXZlbnQpLmV2ZW50UGhhc2UgPSBldmVudFBoYXNlO1xufVxuXG4vKipcbiAqIFNldCB0aGUgY3VycmVudCB0YXJnZXQgb2YgYSBnaXZlbiBldmVudC5cbiAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IFRoZSBldmVudCB0byBzZXQgY3VycmVudCB0YXJnZXQuXG4gKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fG51bGx9IGN1cnJlbnRUYXJnZXQgTmV3IGN1cnJlbnQgdGFyZ2V0LlxuICogQHJldHVybnMge3ZvaWR9XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzZXRDdXJyZW50VGFyZ2V0KGV2ZW50LCBjdXJyZW50VGFyZ2V0KSB7XG4gICAgcGQoZXZlbnQpLmN1cnJlbnRUYXJnZXQgPSBjdXJyZW50VGFyZ2V0O1xufVxuXG4vKipcbiAqIFNldCBhIHBhc3NpdmUgbGlzdGVuZXIgb2YgYSBnaXZlbiBldmVudC5cbiAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IFRoZSBldmVudCB0byBzZXQgY3VycmVudCB0YXJnZXQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufG51bGx9IHBhc3NpdmVMaXN0ZW5lciBOZXcgcGFzc2l2ZSBsaXN0ZW5lci5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gc2V0UGFzc2l2ZUxpc3RlbmVyKGV2ZW50LCBwYXNzaXZlTGlzdGVuZXIpIHtcbiAgICBwZChldmVudCkucGFzc2l2ZUxpc3RlbmVyID0gcGFzc2l2ZUxpc3RlbmVyO1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IExpc3RlbmVyTm9kZVxuICogQHByb3BlcnR5IHtGdW5jdGlvbn0gbGlzdGVuZXJcbiAqIEBwcm9wZXJ0eSB7MXwyfDN9IGxpc3RlbmVyVHlwZVxuICogQHByb3BlcnR5IHtib29sZWFufSBwYXNzaXZlXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IG9uY2VcbiAqIEBwcm9wZXJ0eSB7TGlzdGVuZXJOb2RlfG51bGx9IG5leHRcbiAqIEBwcml2YXRlXG4gKi9cblxuLyoqXG4gKiBAdHlwZSB7V2Vha01hcDxvYmplY3QsIE1hcDxzdHJpbmcsIExpc3RlbmVyTm9kZT4+fVxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgbGlzdGVuZXJzTWFwID0gbmV3IFdlYWtNYXAoKTtcblxuLy8gTGlzdGVuZXIgdHlwZXNcbmNvbnN0IENBUFRVUkUgPSAxO1xuY29uc3QgQlVCQkxFID0gMjtcbmNvbnN0IEFUVFJJQlVURSA9IDM7XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciBhIGdpdmVuIHZhbHVlIGlzIGFuIG9iamVjdCBvciBub3QuXG4gKiBAcGFyYW0ge2FueX0geCBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSB2YWx1ZSBpcyBhbiBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHgpIHtcbiAgICByZXR1cm4geCAhPT0gbnVsbCAmJiB0eXBlb2YgeCA9PT0gXCJvYmplY3RcIiAvL2VzbGludC1kaXNhYmxlLWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXhcbn1cblxuLyoqXG4gKiBHZXQgbGlzdGVuZXJzLlxuICogQHBhcmFtIHtFdmVudFRhcmdldH0gZXZlbnRUYXJnZXQgVGhlIGV2ZW50IHRhcmdldCB0byBnZXQuXG4gKiBAcmV0dXJucyB7TWFwPHN0cmluZywgTGlzdGVuZXJOb2RlPn0gVGhlIGxpc3RlbmVycy5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGdldExpc3RlbmVycyhldmVudFRhcmdldCkge1xuICAgIGNvbnN0IGxpc3RlbmVycyA9IGxpc3RlbmVyc01hcC5nZXQoZXZlbnRUYXJnZXQpO1xuICAgIGlmIChsaXN0ZW5lcnMgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgXCIndGhpcycgaXMgZXhwZWN0ZWQgYW4gRXZlbnRUYXJnZXQgb2JqZWN0LCBidXQgZ290IGFub3RoZXIgdmFsdWUuXCJcbiAgICAgICAgKVxuICAgIH1cbiAgICByZXR1cm4gbGlzdGVuZXJzXG59XG5cbi8qKlxuICogR2V0IHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgZXZlbnQgYXR0cmlidXRlIG9mIGEgZ2l2ZW4gZXZlbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lIFRoZSBldmVudCBuYW1lIHRvIGdldCBwcm9wZXJ0eSBkZXNjcmlwdG9yLlxuICogQHJldHVybnMge1Byb3BlcnR5RGVzY3JpcHRvcn0gVGhlIHByb3BlcnR5IGRlc2NyaXB0b3IuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBkZWZpbmVFdmVudEF0dHJpYnV0ZURlc2NyaXB0b3IoZXZlbnROYW1lKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gZ2V0TGlzdGVuZXJzKHRoaXMpO1xuICAgICAgICAgICAgbGV0IG5vZGUgPSBsaXN0ZW5lcnMuZ2V0KGV2ZW50TmFtZSk7XG4gICAgICAgICAgICB3aGlsZSAobm9kZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGUubGlzdGVuZXJUeXBlID09PSBBVFRSSUJVVEUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUubGlzdGVuZXJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUubmV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgIH0sXG5cbiAgICAgICAgc2V0KGxpc3RlbmVyKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGxpc3RlbmVyICE9PSBcImZ1bmN0aW9uXCIgJiYgIWlzT2JqZWN0KGxpc3RlbmVyKSkge1xuICAgICAgICAgICAgICAgIGxpc3RlbmVyID0gbnVsbDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gZ2V0TGlzdGVuZXJzKHRoaXMpO1xuXG4gICAgICAgICAgICAvLyBUcmF2ZXJzZSB0byB0aGUgdGFpbCB3aGlsZSByZW1vdmluZyBvbGQgdmFsdWUuXG4gICAgICAgICAgICBsZXQgcHJldiA9IG51bGw7XG4gICAgICAgICAgICBsZXQgbm9kZSA9IGxpc3RlbmVycy5nZXQoZXZlbnROYW1lKTtcbiAgICAgICAgICAgIHdoaWxlIChub2RlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAobm9kZS5saXN0ZW5lclR5cGUgPT09IEFUVFJJQlVURSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBSZW1vdmUgb2xkIHZhbHVlLlxuICAgICAgICAgICAgICAgICAgICBpZiAocHJldiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJldi5uZXh0ID0gbm9kZS5uZXh0O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5vZGUubmV4dCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJzLnNldChldmVudE5hbWUsIG5vZGUubmV4dCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcnMuZGVsZXRlKGV2ZW50TmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwcmV2ID0gbm9kZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBub2RlID0gbm9kZS5uZXh0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBBZGQgbmV3IHZhbHVlLlxuICAgICAgICAgICAgaWYgKGxpc3RlbmVyICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Tm9kZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXIsXG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyVHlwZTogQVRUUklCVVRFLFxuICAgICAgICAgICAgICAgICAgICBwYXNzaXZlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgb25jZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIG5leHQ6IG51bGwsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBpZiAocHJldiA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcnMuc2V0KGV2ZW50TmFtZSwgbmV3Tm9kZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcHJldi5uZXh0ID0gbmV3Tm9kZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICB9XG59XG5cbi8qKlxuICogRGVmaW5lIGFuIGV2ZW50IGF0dHJpYnV0ZSAoZS5nLiBgZXZlbnRUYXJnZXQub25jbGlja2ApLlxuICogQHBhcmFtIHtPYmplY3R9IGV2ZW50VGFyZ2V0UHJvdG90eXBlIFRoZSBldmVudCB0YXJnZXQgcHJvdG90eXBlIHRvIGRlZmluZSBhbiBldmVudCBhdHRyYml0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWUgVGhlIGV2ZW50IG5hbWUgdG8gZGVmaW5lLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIGRlZmluZUV2ZW50QXR0cmlidXRlKGV2ZW50VGFyZ2V0UHJvdG90eXBlLCBldmVudE5hbWUpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoXG4gICAgICAgIGV2ZW50VGFyZ2V0UHJvdG90eXBlLFxuICAgICAgICBgb24ke2V2ZW50TmFtZX1gLFxuICAgICAgICBkZWZpbmVFdmVudEF0dHJpYnV0ZURlc2NyaXB0b3IoZXZlbnROYW1lKVxuICAgICk7XG59XG5cbi8qKlxuICogRGVmaW5lIGEgY3VzdG9tIEV2ZW50VGFyZ2V0IHdpdGggZXZlbnQgYXR0cmlidXRlcy5cbiAqIEBwYXJhbSB7c3RyaW5nW119IGV2ZW50TmFtZXMgRXZlbnQgbmFtZXMgZm9yIGV2ZW50IGF0dHJpYnV0ZXMuXG4gKiBAcmV0dXJucyB7RXZlbnRUYXJnZXR9IFRoZSBjdXN0b20gRXZlbnRUYXJnZXQuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBkZWZpbmVDdXN0b21FdmVudFRhcmdldChldmVudE5hbWVzKSB7XG4gICAgLyoqIEN1c3RvbUV2ZW50VGFyZ2V0ICovXG4gICAgZnVuY3Rpb24gQ3VzdG9tRXZlbnRUYXJnZXQoKSB7XG4gICAgICAgIEV2ZW50VGFyZ2V0LmNhbGwodGhpcyk7XG4gICAgfVxuXG4gICAgQ3VzdG9tRXZlbnRUYXJnZXQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudFRhcmdldC5wcm90b3R5cGUsIHtcbiAgICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgICAgIHZhbHVlOiBDdXN0b21FdmVudFRhcmdldCxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBldmVudE5hbWVzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGRlZmluZUV2ZW50QXR0cmlidXRlKEN1c3RvbUV2ZW50VGFyZ2V0LnByb3RvdHlwZSwgZXZlbnROYW1lc1tpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIEN1c3RvbUV2ZW50VGFyZ2V0XG59XG5cbi8qKlxuICogRXZlbnRUYXJnZXQuXG4gKlxuICogLSBUaGlzIGlzIGNvbnN0cnVjdG9yIGlmIG5vIGFyZ3VtZW50cy5cbiAqIC0gVGhpcyBpcyBhIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgYSBDdXN0b21FdmVudFRhcmdldCBjb25zdHJ1Y3RvciBpZiB0aGVyZSBhcmUgYXJndW1lbnRzLlxuICpcbiAqIEZvciBleGFtcGxlOlxuICpcbiAqICAgICBjbGFzcyBBIGV4dGVuZHMgRXZlbnRUYXJnZXQge31cbiAqICAgICBjbGFzcyBCIGV4dGVuZHMgRXZlbnRUYXJnZXQoXCJtZXNzYWdlXCIpIHt9XG4gKiAgICAgY2xhc3MgQyBleHRlbmRzIEV2ZW50VGFyZ2V0KFwibWVzc2FnZVwiLCBcImVycm9yXCIpIHt9XG4gKiAgICAgY2xhc3MgRCBleHRlbmRzIEV2ZW50VGFyZ2V0KFtcIm1lc3NhZ2VcIiwgXCJlcnJvclwiXSkge31cbiAqL1xuZnVuY3Rpb24gRXZlbnRUYXJnZXQoKSB7XG4gICAgLyplc2xpbnQtZGlzYWJsZSBjb25zaXN0ZW50LXJldHVybiAqL1xuICAgIGlmICh0aGlzIGluc3RhbmNlb2YgRXZlbnRUYXJnZXQpIHtcbiAgICAgICAgbGlzdGVuZXJzTWFwLnNldCh0aGlzLCBuZXcgTWFwKCkpO1xuICAgICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEgJiYgQXJyYXkuaXNBcnJheShhcmd1bWVudHNbMF0pKSB7XG4gICAgICAgIHJldHVybiBkZWZpbmVDdXN0b21FdmVudFRhcmdldChhcmd1bWVudHNbMF0pXG4gICAgfVxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCB0eXBlcyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIHR5cGVzW2ldID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWZpbmVDdXN0b21FdmVudFRhcmdldCh0eXBlcylcbiAgICB9XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKVxuICAgIC8qZXNsaW50LWVuYWJsZSBjb25zaXN0ZW50LXJldHVybiAqL1xufVxuXG4vLyBTaG91bGQgYmUgZW51bWVyYWJsZSwgYnV0IGNsYXNzIG1ldGhvZHMgYXJlIG5vdCBlbnVtZXJhYmxlLlxuRXZlbnRUYXJnZXQucHJvdG90eXBlID0ge1xuICAgIC8qKlxuICAgICAqIEFkZCBhIGdpdmVuIGxpc3RlbmVyIHRvIHRoaXMgZXZlbnQgdGFyZ2V0LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWUgVGhlIGV2ZW50IG5hbWUgdG8gYWRkLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyIFRoZSBsaXN0ZW5lciB0byBhZGQuXG4gICAgICogQHBhcmFtIHtib29sZWFufHtjYXB0dXJlPzpib29sZWFuLHBhc3NpdmU/OmJvb2xlYW4sb25jZT86Ym9vbGVhbn19IFtvcHRpb25zXSBUaGUgb3B0aW9ucyBmb3IgdGhpcyBsaXN0ZW5lci5cbiAgICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICAgKi9cbiAgICBhZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgbGlzdGVuZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKGxpc3RlbmVyID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgbGlzdGVuZXIgIT09IFwiZnVuY3Rpb25cIiAmJiAhaXNPYmplY3QobGlzdGVuZXIpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiJ2xpc3RlbmVyJyBzaG91bGQgYmUgYSBmdW5jdGlvbiBvciBhbiBvYmplY3QuXCIpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSBnZXRMaXN0ZW5lcnModGhpcyk7XG4gICAgICAgIGNvbnN0IG9wdGlvbnNJc09iaiA9IGlzT2JqZWN0KG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBjYXB0dXJlID0gb3B0aW9uc0lzT2JqXG4gICAgICAgICAgICA/IEJvb2xlYW4ob3B0aW9ucy5jYXB0dXJlKVxuICAgICAgICAgICAgOiBCb29sZWFuKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBsaXN0ZW5lclR5cGUgPSBjYXB0dXJlID8gQ0FQVFVSRSA6IEJVQkJMRTtcbiAgICAgICAgY29uc3QgbmV3Tm9kZSA9IHtcbiAgICAgICAgICAgIGxpc3RlbmVyLFxuICAgICAgICAgICAgbGlzdGVuZXJUeXBlLFxuICAgICAgICAgICAgcGFzc2l2ZTogb3B0aW9uc0lzT2JqICYmIEJvb2xlYW4ob3B0aW9ucy5wYXNzaXZlKSxcbiAgICAgICAgICAgIG9uY2U6IG9wdGlvbnNJc09iaiAmJiBCb29sZWFuKG9wdGlvbnMub25jZSksXG4gICAgICAgICAgICBuZXh0OiBudWxsLFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFNldCBpdCBhcyB0aGUgZmlyc3Qgbm9kZSBpZiB0aGUgZmlyc3Qgbm9kZSBpcyBudWxsLlxuICAgICAgICBsZXQgbm9kZSA9IGxpc3RlbmVycy5nZXQoZXZlbnROYW1lKTtcbiAgICAgICAgaWYgKG5vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbGlzdGVuZXJzLnNldChldmVudE5hbWUsIG5ld05vZGUpO1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICAvLyBUcmF2ZXJzZSB0byB0aGUgdGFpbCB3aGlsZSBjaGVja2luZyBkdXBsaWNhdGlvbi4uXG4gICAgICAgIGxldCBwcmV2ID0gbnVsbDtcbiAgICAgICAgd2hpbGUgKG5vZGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIG5vZGUubGlzdGVuZXIgPT09IGxpc3RlbmVyICYmXG4gICAgICAgICAgICAgICAgbm9kZS5saXN0ZW5lclR5cGUgPT09IGxpc3RlbmVyVHlwZVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgLy8gU2hvdWxkIGlnbm9yZSBkdXBsaWNhdGlvbi5cbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHByZXYgPSBub2RlO1xuICAgICAgICAgICAgbm9kZSA9IG5vZGUubmV4dDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFkZCBpdC5cbiAgICAgICAgcHJldi5uZXh0ID0gbmV3Tm9kZTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGEgZ2l2ZW4gbGlzdGVuZXIgZnJvbSB0aGlzIGV2ZW50IHRhcmdldC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lIFRoZSBldmVudCBuYW1lIHRvIHJlbW92ZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lciBUaGUgbGlzdGVuZXIgdG8gcmVtb3ZlLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbnx7Y2FwdHVyZT86Ym9vbGVhbixwYXNzaXZlPzpib29sZWFuLG9uY2U/OmJvb2xlYW59fSBbb3B0aW9uc10gVGhlIG9wdGlvbnMgZm9yIHRoaXMgbGlzdGVuZXIuXG4gICAgICogQHJldHVybnMge3ZvaWR9XG4gICAgICovXG4gICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGxpc3RlbmVyLCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChsaXN0ZW5lciA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxpc3RlbmVycyA9IGdldExpc3RlbmVycyh0aGlzKTtcbiAgICAgICAgY29uc3QgY2FwdHVyZSA9IGlzT2JqZWN0KG9wdGlvbnMpXG4gICAgICAgICAgICA/IEJvb2xlYW4ob3B0aW9ucy5jYXB0dXJlKVxuICAgICAgICAgICAgOiBCb29sZWFuKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBsaXN0ZW5lclR5cGUgPSBjYXB0dXJlID8gQ0FQVFVSRSA6IEJVQkJMRTtcblxuICAgICAgICBsZXQgcHJldiA9IG51bGw7XG4gICAgICAgIGxldCBub2RlID0gbGlzdGVuZXJzLmdldChldmVudE5hbWUpO1xuICAgICAgICB3aGlsZSAobm9kZSAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgbm9kZS5saXN0ZW5lciA9PT0gbGlzdGVuZXIgJiZcbiAgICAgICAgICAgICAgICBub2RlLmxpc3RlbmVyVHlwZSA9PT0gbGlzdGVuZXJUeXBlXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBpZiAocHJldiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBwcmV2Lm5leHQgPSBub2RlLm5leHQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChub2RlLm5leHQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJzLnNldChldmVudE5hbWUsIG5vZGUubmV4dCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJzLmRlbGV0ZShldmVudE5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHJldiA9IG5vZGU7XG4gICAgICAgICAgICBub2RlID0gbm9kZS5uZXh0O1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIERpc3BhdGNoIGEgZ2l2ZW4gZXZlbnQuXG4gICAgICogQHBhcmFtIHtFdmVudHx7dHlwZTpzdHJpbmd9fSBldmVudCBUaGUgZXZlbnQgdG8gZGlzcGF0Y2guXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IGBmYWxzZWAgaWYgY2FuY2VsZWQuXG4gICAgICovXG4gICAgZGlzcGF0Y2hFdmVudChldmVudCkge1xuICAgICAgICBpZiAoZXZlbnQgPT0gbnVsbCB8fCB0eXBlb2YgZXZlbnQudHlwZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJldmVudC50eXBlXCIgc2hvdWxkIGJlIGEgc3RyaW5nLicpXG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBsaXN0ZW5lcnMgYXJlbid0IHJlZ2lzdGVyZWQsIHRlcm1pbmF0ZS5cbiAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gZ2V0TGlzdGVuZXJzKHRoaXMpO1xuICAgICAgICBjb25zdCBldmVudE5hbWUgPSBldmVudC50eXBlO1xuICAgICAgICBsZXQgbm9kZSA9IGxpc3RlbmVycy5nZXQoZXZlbnROYW1lKTtcbiAgICAgICAgaWYgKG5vZGUgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNpbmNlIHdlIGNhbm5vdCByZXdyaXRlIHNldmVyYWwgcHJvcGVydGllcywgc28gd3JhcCBvYmplY3QuXG4gICAgICAgIGNvbnN0IHdyYXBwZWRFdmVudCA9IHdyYXBFdmVudCh0aGlzLCBldmVudCk7XG5cbiAgICAgICAgLy8gVGhpcyBkb2Vzbid0IHByb2Nlc3MgY2FwdHVyaW5nIHBoYXNlIGFuZCBidWJibGluZyBwaGFzZS5cbiAgICAgICAgLy8gVGhpcyBpc24ndCBwYXJ0aWNpcGF0aW5nIGluIGEgdHJlZS5cbiAgICAgICAgbGV0IHByZXYgPSBudWxsO1xuICAgICAgICB3aGlsZSAobm9kZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAvLyBSZW1vdmUgdGhpcyBsaXN0ZW5lciBpZiBpdCdzIG9uY2VcbiAgICAgICAgICAgIGlmIChub2RlLm9uY2UpIHtcbiAgICAgICAgICAgICAgICBpZiAocHJldiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBwcmV2Lm5leHQgPSBub2RlLm5leHQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChub2RlLm5leHQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJzLnNldChldmVudE5hbWUsIG5vZGUubmV4dCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJzLmRlbGV0ZShldmVudE5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcHJldiA9IG5vZGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIENhbGwgdGhpcyBsaXN0ZW5lclxuICAgICAgICAgICAgc2V0UGFzc2l2ZUxpc3RlbmVyKFxuICAgICAgICAgICAgICAgIHdyYXBwZWRFdmVudCxcbiAgICAgICAgICAgICAgICBub2RlLnBhc3NpdmUgPyBub2RlLmxpc3RlbmVyIDogbnVsbFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygbm9kZS5saXN0ZW5lciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5saXN0ZW5lci5jYWxsKHRoaXMsIHdyYXBwZWRFdmVudCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBjb25zb2xlICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgY29uc29sZS5lcnJvciA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICBub2RlLmxpc3RlbmVyVHlwZSAhPT0gQVRUUklCVVRFICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIG5vZGUubGlzdGVuZXIuaGFuZGxlRXZlbnQgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5saXN0ZW5lci5oYW5kbGVFdmVudCh3cmFwcGVkRXZlbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBCcmVhayBpZiBgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uYCB3YXMgY2FsbGVkLlxuICAgICAgICAgICAgaWYgKGlzU3RvcHBlZCh3cmFwcGVkRXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbm9kZSA9IG5vZGUubmV4dDtcbiAgICAgICAgfVxuICAgICAgICBzZXRQYXNzaXZlTGlzdGVuZXIod3JhcHBlZEV2ZW50LCBudWxsKTtcbiAgICAgICAgc2V0RXZlbnRQaGFzZSh3cmFwcGVkRXZlbnQsIDApO1xuICAgICAgICBzZXRDdXJyZW50VGFyZ2V0KHdyYXBwZWRFdmVudCwgbnVsbCk7XG5cbiAgICAgICAgcmV0dXJuICF3cmFwcGVkRXZlbnQuZGVmYXVsdFByZXZlbnRlZFxuICAgIH0sXG59O1xuXG4vLyBgY29uc3RydWN0b3JgIGlzIG5vdCBlbnVtZXJhYmxlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEV2ZW50VGFyZ2V0LnByb3RvdHlwZSwgXCJjb25zdHJ1Y3RvclwiLCB7XG4gICAgdmFsdWU6IEV2ZW50VGFyZ2V0LFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB3cml0YWJsZTogdHJ1ZSxcbn0pO1xuXG4vLyBFbnN1cmUgYGV2ZW50VGFyZ2V0IGluc3RhbmNlb2Ygd2luZG93LkV2ZW50VGFyZ2V0YCBpcyBgdHJ1ZWAuXG5pZiAoXG4gICAgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgIHR5cGVvZiB3aW5kb3cuRXZlbnRUYXJnZXQgIT09IFwidW5kZWZpbmVkXCJcbikge1xuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihFdmVudFRhcmdldC5wcm90b3R5cGUsIHdpbmRvdy5FdmVudFRhcmdldC5wcm90b3R5cGUpO1xufVxuXG5leHBvcnRzLmRlZmluZUV2ZW50QXR0cmlidXRlID0gZGVmaW5lRXZlbnRBdHRyaWJ1dGU7XG5leHBvcnRzLkV2ZW50VGFyZ2V0ID0gRXZlbnRUYXJnZXQ7XG5leHBvcnRzLmRlZmF1bHQgPSBFdmVudFRhcmdldDtcblxubW9kdWxlLmV4cG9ydHMgPSBFdmVudFRhcmdldFxubW9kdWxlLmV4cG9ydHMuRXZlbnRUYXJnZXQgPSBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBFdmVudFRhcmdldFxubW9kdWxlLmV4cG9ydHMuZGVmaW5lRXZlbnRBdHRyaWJ1dGUgPSBkZWZpbmVFdmVudEF0dHJpYnV0ZVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXZlbnQtdGFyZ2V0LXNoaW0uanMubWFwXG4iLAogICAgIi8qKlxuICogQGF1dGhvciBUb3J1IE5hZ2FzaGltYSA8aHR0cHM6Ly9naXRodWIuY29tL215c3RpY2F0ZWE+XG4gKiBTZWUgTElDRU5TRSBmaWxlIGluIHJvb3QgZGlyZWN0b3J5IGZvciBmdWxsIGxpY2Vuc2UuXG4gKi9cbid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxudmFyIGV2ZW50VGFyZ2V0U2hpbSA9IHJlcXVpcmUoJ2V2ZW50LXRhcmdldC1zaGltJyk7XG5cbi8qKlxuICogVGhlIHNpZ25hbCBjbGFzcy5cbiAqIEBzZWUgaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNhYm9ydHNpZ25hbFxuICovXG5jbGFzcyBBYm9ydFNpZ25hbCBleHRlbmRzIGV2ZW50VGFyZ2V0U2hpbS5FdmVudFRhcmdldCB7XG4gICAgLyoqXG4gICAgICogQWJvcnRTaWduYWwgY2Fubm90IGJlIGNvbnN0cnVjdGVkIGRpcmVjdGx5LlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQWJvcnRTaWduYWwgY2Fubm90IGJlIGNvbnN0cnVjdGVkIGRpcmVjdGx5XCIpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGlzIGBBYm9ydFNpZ25hbGAncyBgQWJvcnRDb250cm9sbGVyYCBoYXMgc2lnbmFsZWQgdG8gYWJvcnQsIGFuZCBgZmFsc2VgIG90aGVyd2lzZS5cbiAgICAgKi9cbiAgICBnZXQgYWJvcnRlZCgpIHtcbiAgICAgICAgY29uc3QgYWJvcnRlZCA9IGFib3J0ZWRGbGFncy5nZXQodGhpcyk7XG4gICAgICAgIGlmICh0eXBlb2YgYWJvcnRlZCAhPT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkICd0aGlzJyB0byBiZSBhbiAnQWJvcnRTaWduYWwnIG9iamVjdCwgYnV0IGdvdCAke3RoaXMgPT09IG51bGwgPyBcIm51bGxcIiA6IHR5cGVvZiB0aGlzfWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhYm9ydGVkO1xuICAgIH1cbn1cbmV2ZW50VGFyZ2V0U2hpbS5kZWZpbmVFdmVudEF0dHJpYnV0ZShBYm9ydFNpZ25hbC5wcm90b3R5cGUsIFwiYWJvcnRcIik7XG4vKipcbiAqIENyZWF0ZSBhbiBBYm9ydFNpZ25hbCBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUFib3J0U2lnbmFsKCkge1xuICAgIGNvbnN0IHNpZ25hbCA9IE9iamVjdC5jcmVhdGUoQWJvcnRTaWduYWwucHJvdG90eXBlKTtcbiAgICBldmVudFRhcmdldFNoaW0uRXZlbnRUYXJnZXQuY2FsbChzaWduYWwpO1xuICAgIGFib3J0ZWRGbGFncy5zZXQoc2lnbmFsLCBmYWxzZSk7XG4gICAgcmV0dXJuIHNpZ25hbDtcbn1cbi8qKlxuICogQWJvcnQgYSBnaXZlbiBzaWduYWwuXG4gKi9cbmZ1bmN0aW9uIGFib3J0U2lnbmFsKHNpZ25hbCkge1xuICAgIGlmIChhYm9ydGVkRmxhZ3MuZ2V0KHNpZ25hbCkgIT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYWJvcnRlZEZsYWdzLnNldChzaWduYWwsIHRydWUpO1xuICAgIHNpZ25hbC5kaXNwYXRjaEV2ZW50KHsgdHlwZTogXCJhYm9ydFwiIH0pO1xufVxuLyoqXG4gKiBBYm9ydGVkIGZsYWcgZm9yIGVhY2ggaW5zdGFuY2VzLlxuICovXG5jb25zdCBhYm9ydGVkRmxhZ3MgPSBuZXcgV2Vha01hcCgpO1xuLy8gUHJvcGVydGllcyBzaG91bGQgYmUgZW51bWVyYWJsZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEFib3J0U2lnbmFsLnByb3RvdHlwZSwge1xuICAgIGFib3J0ZWQ6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxufSk7XG4vLyBgdG9TdHJpbmcoKWAgc2hvdWxkIHJldHVybiBgXCJbb2JqZWN0IEFib3J0U2lnbmFsXVwiYFxuaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLnRvU3RyaW5nVGFnID09PSBcInN5bWJvbFwiKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFib3J0U2lnbmFsLnByb3RvdHlwZSwgU3ltYm9sLnRvU3RyaW5nVGFnLCB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IFwiQWJvcnRTaWduYWxcIixcbiAgICB9KTtcbn1cblxuLyoqXG4gKiBUaGUgQWJvcnRDb250cm9sbGVyLlxuICogQHNlZSBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2Fib3J0Y29udHJvbGxlclxuICovXG5jbGFzcyBBYm9ydENvbnRyb2xsZXIge1xuICAgIC8qKlxuICAgICAqIEluaXRpYWxpemUgdGhpcyBjb250cm9sbGVyLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzaWduYWxzLnNldCh0aGlzLCBjcmVhdGVBYm9ydFNpZ25hbCgpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgYEFib3J0U2lnbmFsYCBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoaXMgb2JqZWN0LlxuICAgICAqL1xuICAgIGdldCBzaWduYWwoKSB7XG4gICAgICAgIHJldHVybiBnZXRTaWduYWwodGhpcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFib3J0IGFuZCBzaWduYWwgdG8gYW55IG9ic2VydmVycyB0aGF0IHRoZSBhc3NvY2lhdGVkIGFjdGl2aXR5IGlzIHRvIGJlIGFib3J0ZWQuXG4gICAgICovXG4gICAgYWJvcnQoKSB7XG4gICAgICAgIGFib3J0U2lnbmFsKGdldFNpZ25hbCh0aGlzKSk7XG4gICAgfVxufVxuLyoqXG4gKiBBc3NvY2lhdGVkIHNpZ25hbHMuXG4gKi9cbmNvbnN0IHNpZ25hbHMgPSBuZXcgV2Vha01hcCgpO1xuLyoqXG4gKiBHZXQgdGhlIGFzc29jaWF0ZWQgc2lnbmFsIG9mIGEgZ2l2ZW4gY29udHJvbGxlci5cbiAqL1xuZnVuY3Rpb24gZ2V0U2lnbmFsKGNvbnRyb2xsZXIpIHtcbiAgICBjb25zdCBzaWduYWwgPSBzaWduYWxzLmdldChjb250cm9sbGVyKTtcbiAgICBpZiAoc2lnbmFsID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgJ3RoaXMnIHRvIGJlIGFuICdBYm9ydENvbnRyb2xsZXInIG9iamVjdCwgYnV0IGdvdCAke2NvbnRyb2xsZXIgPT09IG51bGwgPyBcIm51bGxcIiA6IHR5cGVvZiBjb250cm9sbGVyfWApO1xuICAgIH1cbiAgICByZXR1cm4gc2lnbmFsO1xufVxuLy8gUHJvcGVydGllcyBzaG91bGQgYmUgZW51bWVyYWJsZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEFib3J0Q29udHJvbGxlci5wcm90b3R5cGUsIHtcbiAgICBzaWduYWw6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuICAgIGFib3J0OiB7IGVudW1lcmFibGU6IHRydWUgfSxcbn0pO1xuaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLnRvU3RyaW5nVGFnID09PSBcInN5bWJvbFwiKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFib3J0Q29udHJvbGxlci5wcm90b3R5cGUsIFN5bWJvbC50b1N0cmluZ1RhZywge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlOiBcIkFib3J0Q29udHJvbGxlclwiLFxuICAgIH0pO1xufVxuXG5leHBvcnRzLkFib3J0Q29udHJvbGxlciA9IEFib3J0Q29udHJvbGxlcjtcbmV4cG9ydHMuQWJvcnRTaWduYWwgPSBBYm9ydFNpZ25hbDtcbmV4cG9ydHMuZGVmYXVsdCA9IEFib3J0Q29udHJvbGxlcjtcblxubW9kdWxlLmV4cG9ydHMgPSBBYm9ydENvbnRyb2xsZXJcbm1vZHVsZS5leHBvcnRzLkFib3J0Q29udHJvbGxlciA9IG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IEFib3J0Q29udHJvbGxlclxubW9kdWxlLmV4cG9ydHMuQWJvcnRTaWduYWwgPSBBYm9ydFNpZ25hbFxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YWJvcnQtY29udHJvbGxlci5qcy5tYXBcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGJ1ZmZlck1vZHVsZSA9IHJlcXVpcmUoJ2J1ZmZlcicpXG5jb25zdCB7IGtSZXNpc3RTdG9wUHJvcGFnYXRpb24sIFN5bWJvbERpc3Bvc2UgfSA9IHJlcXVpcmUoJy4vcHJpbW9yZGlhbHMnKVxuY29uc3QgQWJvcnRTaWduYWwgPSBnbG9iYWxUaGlzLkFib3J0U2lnbmFsIHx8IHJlcXVpcmUoJ2Fib3J0LWNvbnRyb2xsZXInKS5BYm9ydFNpZ25hbFxuY29uc3QgQWJvcnRDb250cm9sbGVyID0gZ2xvYmFsVGhpcy5BYm9ydENvbnRyb2xsZXIgfHwgcmVxdWlyZSgnYWJvcnQtY29udHJvbGxlcicpLkFib3J0Q29udHJvbGxlclxuY29uc3QgQXN5bmNGdW5jdGlvbiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihhc3luYyBmdW5jdGlvbiAoKSB7fSkuY29uc3RydWN0b3JcbmNvbnN0IEJsb2IgPSBnbG9iYWxUaGlzLkJsb2IgfHwgYnVmZmVyTW9kdWxlLkJsb2Jcbi8qIGVzbGludC1kaXNhYmxlIGluZGVudCAqL1xuY29uc3QgaXNCbG9iID1cbiAgdHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnXG4gICAgPyBmdW5jdGlvbiBpc0Jsb2IoYikge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW5kZW50XG4gICAgICAgIHJldHVybiBiIGluc3RhbmNlb2YgQmxvYlxuICAgICAgfVxuICAgIDogZnVuY3Rpb24gaXNCbG9iKGIpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4vKiBlc2xpbnQtZW5hYmxlIGluZGVudCAqL1xuXG5jb25zdCB2YWxpZGF0ZUFib3J0U2lnbmFsID0gKHNpZ25hbCwgbmFtZSkgPT4ge1xuICBpZiAoc2lnbmFsICE9PSB1bmRlZmluZWQgJiYgKHNpZ25hbCA9PT0gbnVsbCB8fCB0eXBlb2Ygc2lnbmFsICE9PSAnb2JqZWN0JyB8fCAhKCdhYm9ydGVkJyBpbiBzaWduYWwpKSkge1xuICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRShuYW1lLCAnQWJvcnRTaWduYWwnLCBzaWduYWwpXG4gIH1cbn1cbmNvbnN0IHZhbGlkYXRlRnVuY3Rpb24gPSAodmFsdWUsIG5hbWUpID0+IHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Z1bmN0aW9uJykgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKG5hbWUsICdGdW5jdGlvbicsIHZhbHVlKVxufVxuXG4vLyBUaGlzIGlzIGEgc2ltcGxpZmllZCB2ZXJzaW9uIG9mIEFnZ3JlZ2F0ZUVycm9yXG5jbGFzcyBBZ2dyZWdhdGVFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IoZXJyb3JzKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGVycm9ycykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIGlucHV0IHRvIGJlIGFuIEFycmF5LCBnb3QgJHt0eXBlb2YgZXJyb3JzfWApXG4gICAgfVxuICAgIGxldCBtZXNzYWdlID0gJydcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVycm9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgbWVzc2FnZSArPSBgICAgICR7ZXJyb3JzW2ldLnN0YWNrfVxcbmBcbiAgICB9XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICB0aGlzLm5hbWUgPSAnQWdncmVnYXRlRXJyb3InXG4gICAgdGhpcy5lcnJvcnMgPSBlcnJvcnNcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEFnZ3JlZ2F0ZUVycm9yLFxuICBrRW1wdHlPYmplY3Q6IE9iamVjdC5mcmVlemUoe30pLFxuICBvbmNlKGNhbGxiYWNrKSB7XG4gICAgbGV0IGNhbGxlZCA9IGZhbHNlXG4gICAgcmV0dXJuIGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICBpZiAoY2FsbGVkKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgY2FsbGVkID0gdHJ1ZVxuICAgICAgY2FsbGJhY2suYXBwbHkodGhpcywgYXJncylcbiAgICB9XG4gIH0sXG4gIGNyZWF0ZURlZmVycmVkUHJvbWlzZTogZnVuY3Rpb24gKCkge1xuICAgIGxldCByZXNvbHZlXG4gICAgbGV0IHJlamVjdFxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByb21pc2UvcGFyYW0tbmFtZXNcbiAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlcywgcmVqKSA9PiB7XG4gICAgICByZXNvbHZlID0gcmVzXG4gICAgICByZWplY3QgPSByZWpcbiAgICB9KVxuICAgIHJldHVybiB7XG4gICAgICBwcm9taXNlLFxuICAgICAgcmVzb2x2ZSxcbiAgICAgIHJlamVjdFxuICAgIH1cbiAgfSxcbiAgcHJvbWlzaWZ5KGZuKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGZuKChlcnIsIC4uLmFyZ3MpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJldHVybiByZWplY3QoZXJyKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNvbHZlKC4uLmFyZ3MpXG4gICAgICB9KVxuICAgIH0pXG4gIH0sXG4gIGRlYnVnbG9nKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7fVxuICB9LFxuICBmb3JtYXQoZm9ybWF0LCAuLi5hcmdzKSB7XG4gICAgLy8gU2ltcGxpZmllZCB2ZXJzaW9uIG9mIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvdXRpbC5odG1sI3V0aWxmb3JtYXRmb3JtYXQtYXJnc1xuICAgIHJldHVybiBmb3JtYXQucmVwbGFjZSgvJShbc2RpZmpdKS9nLCBmdW5jdGlvbiAoLi4uW191bnVzZWQsIHR5cGVdKSB7XG4gICAgICBjb25zdCByZXBsYWNlbWVudCA9IGFyZ3Muc2hpZnQoKVxuICAgICAgaWYgKHR5cGUgPT09ICdmJykge1xuICAgICAgICByZXR1cm4gcmVwbGFjZW1lbnQudG9GaXhlZCg2KVxuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnaicpIHtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHJlcGxhY2VtZW50KVxuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAncycgJiYgdHlwZW9mIHJlcGxhY2VtZW50ID09PSAnb2JqZWN0Jykge1xuICAgICAgICBjb25zdCBjdG9yID0gcmVwbGFjZW1lbnQuY29uc3RydWN0b3IgIT09IE9iamVjdCA/IHJlcGxhY2VtZW50LmNvbnN0cnVjdG9yLm5hbWUgOiAnJ1xuICAgICAgICByZXR1cm4gYCR7Y3Rvcn0ge31gLnRyaW0oKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHJlcGxhY2VtZW50LnRvU3RyaW5nKClcbiAgICAgIH1cbiAgICB9KVxuICB9LFxuICBpbnNwZWN0KHZhbHVlKSB7XG4gICAgLy8gVmFzdGx5IHNpbXBsaWZpZWQgdmVyc2lvbiBvZiBodHRwczovL25vZGVqcy5vcmcvYXBpL3V0aWwuaHRtbCN1dGlsaW5zcGVjdG9iamVjdC1vcHRpb25zXG4gICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgIGlmICh2YWx1ZS5pbmNsdWRlcyhcIidcIikpIHtcbiAgICAgICAgICBpZiAoIXZhbHVlLmluY2x1ZGVzKCdcIicpKSB7XG4gICAgICAgICAgICByZXR1cm4gYFwiJHt2YWx1ZX1cImBcbiAgICAgICAgICB9IGVsc2UgaWYgKCF2YWx1ZS5pbmNsdWRlcygnYCcpICYmICF2YWx1ZS5pbmNsdWRlcygnJHsnKSkge1xuICAgICAgICAgICAgcmV0dXJuIGBcXGAke3ZhbHVlfVxcYGBcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGAnJHt2YWx1ZX0nYFxuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgaWYgKGlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiAnTmFOJ1xuICAgICAgICB9IGVsc2UgaWYgKE9iamVjdC5pcyh2YWx1ZSwgLTApKSB7XG4gICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgIGNhc2UgJ2JpZ2ludCc6XG4gICAgICAgIHJldHVybiBgJHtTdHJpbmcodmFsdWUpfW5gXG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpXG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICByZXR1cm4gJ3t9J1xuICAgIH1cbiAgfSxcbiAgdHlwZXM6IHtcbiAgICBpc0FzeW5jRnVuY3Rpb24oZm4pIHtcbiAgICAgIHJldHVybiBmbiBpbnN0YW5jZW9mIEFzeW5jRnVuY3Rpb25cbiAgICB9LFxuICAgIGlzQXJyYXlCdWZmZXJWaWV3KGFycikge1xuICAgICAgcmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyhhcnIpXG4gICAgfVxuICB9LFxuICBpc0Jsb2IsXG4gIGRlcHJlY2F0ZShmbiwgbWVzc2FnZSkge1xuICAgIHJldHVybiBmblxuICB9LFxuICBhZGRBYm9ydExpc3RlbmVyOlxuICAgIHJlcXVpcmUoJ2V2ZW50cycpLmFkZEFib3J0TGlzdGVuZXIgfHxcbiAgICBmdW5jdGlvbiBhZGRBYm9ydExpc3RlbmVyKHNpZ25hbCwgbGlzdGVuZXIpIHtcbiAgICAgIGlmIChzaWduYWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoJ3NpZ25hbCcsICdBYm9ydFNpZ25hbCcsIHNpZ25hbClcbiAgICAgIH1cbiAgICAgIHZhbGlkYXRlQWJvcnRTaWduYWwoc2lnbmFsLCAnc2lnbmFsJylcbiAgICAgIHZhbGlkYXRlRnVuY3Rpb24obGlzdGVuZXIsICdsaXN0ZW5lcicpXG4gICAgICBsZXQgcmVtb3ZlRXZlbnRMaXN0ZW5lclxuICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGxpc3RlbmVyKCkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBsaXN0ZW5lciwge1xuICAgICAgICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAgICAgICBvbmNlOiB0cnVlLFxuICAgICAgICAgIFtrUmVzaXN0U3RvcFByb3BhZ2F0aW9uXTogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgICByZW1vdmVFdmVudExpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgICAgIHNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIGxpc3RlbmVyKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBfX3Byb3RvX186IG51bGwsXG4gICAgICAgIFtTeW1ib2xEaXNwb3NlXSgpIHtcbiAgICAgICAgICB2YXIgX3JlbW92ZUV2ZW50TGlzdGVuZXJcbiAgICAgICAgICA7KF9yZW1vdmVFdmVudExpc3RlbmVyID0gcmVtb3ZlRXZlbnRMaXN0ZW5lcikgPT09IG51bGwgfHwgX3JlbW92ZUV2ZW50TGlzdGVuZXIgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgICAgIDogX3JlbW92ZUV2ZW50TGlzdGVuZXIoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgQWJvcnRTaWduYWxBbnk6XG4gICAgQWJvcnRTaWduYWwuYW55IHx8XG4gICAgZnVuY3Rpb24gQWJvcnRTaWduYWxBbnkoc2lnbmFscykge1xuICAgICAgLy8gRmFzdCBwYXRoIGlmIHRoZXJlIGlzIG9ubHkgb25lIHNpZ25hbC5cbiAgICAgIGlmIChzaWduYWxzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gc2lnbmFsc1swXVxuICAgICAgfVxuICAgICAgY29uc3QgYWMgPSBuZXcgQWJvcnRDb250cm9sbGVyKClcbiAgICAgIGNvbnN0IGFib3J0ID0gKCkgPT4gYWMuYWJvcnQoKVxuICAgICAgc2lnbmFscy5mb3JFYWNoKChzaWduYWwpID0+IHtcbiAgICAgICAgdmFsaWRhdGVBYm9ydFNpZ25hbChzaWduYWwsICdzaWduYWxzJylcbiAgICAgICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnQsIHtcbiAgICAgICAgICBvbmNlOiB0cnVlXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgICAgYWMuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICdhYm9ydCcsXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBzaWduYWxzLmZvckVhY2goKHNpZ25hbCkgPT4gc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnQpKVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgb25jZTogdHJ1ZVxuICAgICAgICB9XG4gICAgICApXG4gICAgICByZXR1cm4gYWMuc2lnbmFsXG4gICAgfVxufVxubW9kdWxlLmV4cG9ydHMucHJvbWlzaWZ5LmN1c3RvbSA9IFN5bWJvbC5mb3IoJ25vZGVqcy51dGlsLnByb21pc2lmeS5jdXN0b20nKVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBmb3JtYXQsIGluc3BlY3QsIEFnZ3JlZ2F0ZUVycm9yOiBDdXN0b21BZ2dyZWdhdGVFcnJvciB9ID0gcmVxdWlyZSgnLi91dGlsJylcblxuLypcbiAgVGhpcyBmaWxlIGlzIGEgcmVkdWNlZCBhbmQgYWRhcHRlZCB2ZXJzaW9uIG9mIHRoZSBtYWluIGxpYi9pbnRlcm5hbC9lcnJvcnMuanMgZmlsZSBkZWZpbmVkIGF0XG5cbiAgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvbWFzdGVyL2xpYi9pbnRlcm5hbC9lcnJvcnMuanNcblxuICBEb24ndCB0cnkgdG8gcmVwbGFjZSB3aXRoIHRoZSBvcmlnaW5hbCBmaWxlIGFuZCBrZWVwIGl0IHVwIHRvIGRhdGUgKHN0YXJ0aW5nIGZyb20gRSguLi4pIGRlZmluaXRpb25zKVxuICB3aXRoIHRoZSB1cHN0cmVhbSBmaWxlLlxuKi9cblxuY29uc3QgQWdncmVnYXRlRXJyb3IgPSBnbG9iYWxUaGlzLkFnZ3JlZ2F0ZUVycm9yIHx8IEN1c3RvbUFnZ3JlZ2F0ZUVycm9yXG5jb25zdCBrSXNOb2RlRXJyb3IgPSBTeW1ib2woJ2tJc05vZGVFcnJvcicpXG5jb25zdCBrVHlwZXMgPSBbXG4gICdzdHJpbmcnLFxuICAnZnVuY3Rpb24nLFxuICAnbnVtYmVyJyxcbiAgJ29iamVjdCcsXG4gIC8vIEFjY2VwdCAnRnVuY3Rpb24nIGFuZCAnT2JqZWN0JyBhcyBhbHRlcm5hdGl2ZSB0byB0aGUgbG93ZXIgY2FzZWQgdmVyc2lvbi5cbiAgJ0Z1bmN0aW9uJyxcbiAgJ09iamVjdCcsXG4gICdib29sZWFuJyxcbiAgJ2JpZ2ludCcsXG4gICdzeW1ib2wnXG5dXG5jb25zdCBjbGFzc1JlZ0V4cCA9IC9eKFtBLVpdW2EtejAtOV0qKSskL1xuY29uc3Qgbm9kZUludGVybmFsUHJlZml4ID0gJ19fbm9kZV9pbnRlcm5hbF8nXG5jb25zdCBjb2RlcyA9IHt9XG5mdW5jdGlvbiBhc3NlcnQodmFsdWUsIG1lc3NhZ2UpIHtcbiAgaWYgKCF2YWx1ZSkge1xuICAgIHRocm93IG5ldyBjb2Rlcy5FUlJfSU5URVJOQUxfQVNTRVJUSU9OKG1lc3NhZ2UpXG4gIH1cbn1cblxuLy8gT25seSB1c2UgdGhpcyBmb3IgaW50ZWdlcnMhIERlY2ltYWwgbnVtYmVycyBkbyBub3Qgd29yayB3aXRoIHRoaXMgZnVuY3Rpb24uXG5mdW5jdGlvbiBhZGROdW1lcmljYWxTZXBhcmF0b3IodmFsKSB7XG4gIGxldCByZXMgPSAnJ1xuICBsZXQgaSA9IHZhbC5sZW5ndGhcbiAgY29uc3Qgc3RhcnQgPSB2YWxbMF0gPT09ICctJyA/IDEgOiAwXG4gIGZvciAoOyBpID49IHN0YXJ0ICsgNDsgaSAtPSAzKSB7XG4gICAgcmVzID0gYF8ke3ZhbC5zbGljZShpIC0gMywgaSl9JHtyZXN9YFxuICB9XG4gIHJldHVybiBgJHt2YWwuc2xpY2UoMCwgaSl9JHtyZXN9YFxufVxuZnVuY3Rpb24gZ2V0TWVzc2FnZShrZXksIG1zZywgYXJncykge1xuICBpZiAodHlwZW9mIG1zZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGFzc2VydChcbiAgICAgIG1zZy5sZW5ndGggPD0gYXJncy5sZW5ndGgsXG4gICAgICAvLyBEZWZhdWx0IG9wdGlvbnMgZG8gbm90IGNvdW50LlxuICAgICAgYENvZGU6ICR7a2V5fTsgVGhlIHByb3ZpZGVkIGFyZ3VtZW50cyBsZW5ndGggKCR7YXJncy5sZW5ndGh9KSBkb2VzIG5vdCBtYXRjaCB0aGUgcmVxdWlyZWQgb25lcyAoJHttc2cubGVuZ3RofSkuYFxuICAgIClcbiAgICByZXR1cm4gbXNnKC4uLmFyZ3MpXG4gIH1cbiAgY29uc3QgZXhwZWN0ZWRMZW5ndGggPSAobXNnLm1hdGNoKC8lW2RmaWpvT3NdL2cpIHx8IFtdKS5sZW5ndGhcbiAgYXNzZXJ0KFxuICAgIGV4cGVjdGVkTGVuZ3RoID09PSBhcmdzLmxlbmd0aCxcbiAgICBgQ29kZTogJHtrZXl9OyBUaGUgcHJvdmlkZWQgYXJndW1lbnRzIGxlbmd0aCAoJHthcmdzLmxlbmd0aH0pIGRvZXMgbm90IG1hdGNoIHRoZSByZXF1aXJlZCBvbmVzICgke2V4cGVjdGVkTGVuZ3RofSkuYFxuICApXG4gIGlmIChhcmdzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBtc2dcbiAgfVxuICByZXR1cm4gZm9ybWF0KG1zZywgLi4uYXJncylcbn1cbmZ1bmN0aW9uIEUoY29kZSwgbWVzc2FnZSwgQmFzZSkge1xuICBpZiAoIUJhc2UpIHtcbiAgICBCYXNlID0gRXJyb3JcbiAgfVxuICBjbGFzcyBOb2RlRXJyb3IgZXh0ZW5kcyBCYXNlIHtcbiAgICBjb25zdHJ1Y3RvciguLi5hcmdzKSB7XG4gICAgICBzdXBlcihnZXRNZXNzYWdlKGNvZGUsIG1lc3NhZ2UsIGFyZ3MpKVxuICAgIH1cbiAgICB0b1N0cmluZygpIHtcbiAgICAgIHJldHVybiBgJHt0aGlzLm5hbWV9IFske2NvZGV9XTogJHt0aGlzLm1lc3NhZ2V9YFxuICAgIH1cbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhOb2RlRXJyb3IucHJvdG90eXBlLCB7XG4gICAgbmFtZToge1xuICAgICAgdmFsdWU6IEJhc2UubmFtZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9LFxuICAgIHRvU3RyaW5nOiB7XG4gICAgICB2YWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMubmFtZX0gWyR7Y29kZX1dOiAke3RoaXMubWVzc2FnZX1gXG4gICAgICB9LFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH1cbiAgfSlcbiAgTm9kZUVycm9yLnByb3RvdHlwZS5jb2RlID0gY29kZVxuICBOb2RlRXJyb3IucHJvdG90eXBlW2tJc05vZGVFcnJvcl0gPSB0cnVlXG4gIGNvZGVzW2NvZGVdID0gTm9kZUVycm9yXG59XG5mdW5jdGlvbiBoaWRlU3RhY2tGcmFtZXMoZm4pIHtcbiAgLy8gV2UgcmVuYW1lIHRoZSBmdW5jdGlvbnMgdGhhdCB3aWxsIGJlIGhpZGRlbiB0byBjdXQgb2ZmIHRoZSBzdGFja3RyYWNlXG4gIC8vIGF0IHRoZSBvdXRlcm1vc3Qgb25lXG4gIGNvbnN0IGhpZGRlbiA9IG5vZGVJbnRlcm5hbFByZWZpeCArIGZuLm5hbWVcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZuLCAnbmFtZScsIHtcbiAgICB2YWx1ZTogaGlkZGVuXG4gIH0pXG4gIHJldHVybiBmblxufVxuZnVuY3Rpb24gYWdncmVnYXRlVHdvRXJyb3JzKGlubmVyRXJyb3IsIG91dGVyRXJyb3IpIHtcbiAgaWYgKGlubmVyRXJyb3IgJiYgb3V0ZXJFcnJvciAmJiBpbm5lckVycm9yICE9PSBvdXRlckVycm9yKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkob3V0ZXJFcnJvci5lcnJvcnMpKSB7XG4gICAgICAvLyBJZiBgb3V0ZXJFcnJvcmAgaXMgYWxyZWFkeSBhbiBgQWdncmVnYXRlRXJyb3JgLlxuICAgICAgb3V0ZXJFcnJvci5lcnJvcnMucHVzaChpbm5lckVycm9yKVxuICAgICAgcmV0dXJuIG91dGVyRXJyb3JcbiAgICB9XG4gICAgY29uc3QgZXJyID0gbmV3IEFnZ3JlZ2F0ZUVycm9yKFtvdXRlckVycm9yLCBpbm5lckVycm9yXSwgb3V0ZXJFcnJvci5tZXNzYWdlKVxuICAgIGVyci5jb2RlID0gb3V0ZXJFcnJvci5jb2RlXG4gICAgcmV0dXJuIGVyclxuICB9XG4gIHJldHVybiBpbm5lckVycm9yIHx8IG91dGVyRXJyb3Jcbn1cbmNsYXNzIEFib3J0RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2UgPSAnVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZCcsIG9wdGlvbnMgPSB1bmRlZmluZWQpIHtcbiAgICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IGNvZGVzLkVSUl9JTlZBTElEX0FSR19UWVBFKCdvcHRpb25zJywgJ09iamVjdCcsIG9wdGlvbnMpXG4gICAgfVxuICAgIHN1cGVyKG1lc3NhZ2UsIG9wdGlvbnMpXG4gICAgdGhpcy5jb2RlID0gJ0FCT1JUX0VSUidcbiAgICB0aGlzLm5hbWUgPSAnQWJvcnRFcnJvcidcbiAgfVxufVxuRSgnRVJSX0FTU0VSVElPTicsICclcycsIEVycm9yKVxuRShcbiAgJ0VSUl9JTlZBTElEX0FSR19UWVBFJyxcbiAgKG5hbWUsIGV4cGVjdGVkLCBhY3R1YWwpID0+IHtcbiAgICBhc3NlcnQodHlwZW9mIG5hbWUgPT09ICdzdHJpbmcnLCBcIiduYW1lJyBtdXN0IGJlIGEgc3RyaW5nXCIpXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGV4cGVjdGVkKSkge1xuICAgICAgZXhwZWN0ZWQgPSBbZXhwZWN0ZWRdXG4gICAgfVxuICAgIGxldCBtc2cgPSAnVGhlICdcbiAgICBpZiAobmFtZS5lbmRzV2l0aCgnIGFyZ3VtZW50JykpIHtcbiAgICAgIC8vIEZvciBjYXNlcyBsaWtlICdmaXJzdCBhcmd1bWVudCdcbiAgICAgIG1zZyArPSBgJHtuYW1lfSBgXG4gICAgfSBlbHNlIHtcbiAgICAgIG1zZyArPSBgXCIke25hbWV9XCIgJHtuYW1lLmluY2x1ZGVzKCcuJykgPyAncHJvcGVydHknIDogJ2FyZ3VtZW50J30gYFxuICAgIH1cbiAgICBtc2cgKz0gJ211c3QgYmUgJ1xuICAgIGNvbnN0IHR5cGVzID0gW11cbiAgICBjb25zdCBpbnN0YW5jZXMgPSBbXVxuICAgIGNvbnN0IG90aGVyID0gW11cbiAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIGV4cGVjdGVkKSB7XG4gICAgICBhc3NlcnQodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJywgJ0FsbCBleHBlY3RlZCBlbnRyaWVzIGhhdmUgdG8gYmUgb2YgdHlwZSBzdHJpbmcnKVxuICAgICAgaWYgKGtUeXBlcy5pbmNsdWRlcyh2YWx1ZSkpIHtcbiAgICAgICAgdHlwZXMucHVzaCh2YWx1ZS50b0xvd2VyQ2FzZSgpKVxuICAgICAgfSBlbHNlIGlmIChjbGFzc1JlZ0V4cC50ZXN0KHZhbHVlKSkge1xuICAgICAgICBpbnN0YW5jZXMucHVzaCh2YWx1ZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFzc2VydCh2YWx1ZSAhPT0gJ29iamVjdCcsICdUaGUgdmFsdWUgXCJvYmplY3RcIiBzaG91bGQgYmUgd3JpdHRlbiBhcyBcIk9iamVjdFwiJylcbiAgICAgICAgb3RoZXIucHVzaCh2YWx1ZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTcGVjaWFsIGhhbmRsZSBgb2JqZWN0YCBpbiBjYXNlIG90aGVyIGluc3RhbmNlcyBhcmUgYWxsb3dlZCB0byBvdXRsaW5lXG4gICAgLy8gdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gZWFjaCBvdGhlci5cbiAgICBpZiAoaW5zdGFuY2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHBvcyA9IHR5cGVzLmluZGV4T2YoJ29iamVjdCcpXG4gICAgICBpZiAocG9zICE9PSAtMSkge1xuICAgICAgICB0eXBlcy5zcGxpY2UodHlwZXMsIHBvcywgMSlcbiAgICAgICAgaW5zdGFuY2VzLnB1c2goJ09iamVjdCcpXG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlcy5sZW5ndGggPiAwKSB7XG4gICAgICBzd2l0Y2ggKHR5cGVzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbXNnICs9IGBvZiB0eXBlICR7dHlwZXNbMF19YFxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtc2cgKz0gYG9uZSBvZiB0eXBlICR7dHlwZXNbMF19IG9yICR7dHlwZXNbMV19YFxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICBjb25zdCBsYXN0ID0gdHlwZXMucG9wKClcbiAgICAgICAgICBtc2cgKz0gYG9uZSBvZiB0eXBlICR7dHlwZXMuam9pbignLCAnKX0sIG9yICR7bGFzdH1gXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChpbnN0YW5jZXMubGVuZ3RoID4gMCB8fCBvdGhlci5sZW5ndGggPiAwKSB7XG4gICAgICAgIG1zZyArPSAnIG9yICdcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGluc3RhbmNlcy5sZW5ndGggPiAwKSB7XG4gICAgICBzd2l0Y2ggKGluc3RhbmNlcy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1zZyArPSBgYW4gaW5zdGFuY2Ugb2YgJHtpbnN0YW5jZXNbMF19YFxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtc2cgKz0gYGFuIGluc3RhbmNlIG9mICR7aW5zdGFuY2VzWzBdfSBvciAke2luc3RhbmNlc1sxXX1gXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIGNvbnN0IGxhc3QgPSBpbnN0YW5jZXMucG9wKClcbiAgICAgICAgICBtc2cgKz0gYGFuIGluc3RhbmNlIG9mICR7aW5zdGFuY2VzLmpvaW4oJywgJyl9LCBvciAke2xhc3R9YFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAob3RoZXIubGVuZ3RoID4gMCkge1xuICAgICAgICBtc2cgKz0gJyBvciAnXG4gICAgICB9XG4gICAgfVxuICAgIHN3aXRjaCAob3RoZXIubGVuZ3RoKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIDE6XG4gICAgICAgIGlmIChvdGhlclswXS50b0xvd2VyQ2FzZSgpICE9PSBvdGhlclswXSkge1xuICAgICAgICAgIG1zZyArPSAnYW4gJ1xuICAgICAgICB9XG4gICAgICAgIG1zZyArPSBgJHtvdGhlclswXX1gXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIDI6XG4gICAgICAgIG1zZyArPSBgb25lIG9mICR7b3RoZXJbMF19IG9yICR7b3RoZXJbMV19YFxuICAgICAgICBicmVha1xuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBjb25zdCBsYXN0ID0gb3RoZXIucG9wKClcbiAgICAgICAgbXNnICs9IGBvbmUgb2YgJHtvdGhlci5qb2luKCcsICcpfSwgb3IgJHtsYXN0fWBcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGFjdHVhbCA9PSBudWxsKSB7XG4gICAgICBtc2cgKz0gYC4gUmVjZWl2ZWQgJHthY3R1YWx9YFxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGFjdHVhbCA9PT0gJ2Z1bmN0aW9uJyAmJiBhY3R1YWwubmFtZSkge1xuICAgICAgbXNnICs9IGAuIFJlY2VpdmVkIGZ1bmN0aW9uICR7YWN0dWFsLm5hbWV9YFxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGFjdHVhbCA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHZhciBfYWN0dWFsJGNvbnN0cnVjdG9yXG4gICAgICBpZiAoXG4gICAgICAgIChfYWN0dWFsJGNvbnN0cnVjdG9yID0gYWN0dWFsLmNvbnN0cnVjdG9yKSAhPT0gbnVsbCAmJlxuICAgICAgICBfYWN0dWFsJGNvbnN0cnVjdG9yICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgX2FjdHVhbCRjb25zdHJ1Y3Rvci5uYW1lXG4gICAgICApIHtcbiAgICAgICAgbXNnICs9IGAuIFJlY2VpdmVkIGFuIGluc3RhbmNlIG9mICR7YWN0dWFsLmNvbnN0cnVjdG9yLm5hbWV9YFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgaW5zcGVjdGVkID0gaW5zcGVjdChhY3R1YWwsIHtcbiAgICAgICAgICBkZXB0aDogLTFcbiAgICAgICAgfSlcbiAgICAgICAgbXNnICs9IGAuIFJlY2VpdmVkICR7aW5zcGVjdGVkfWBcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGluc3BlY3RlZCA9IGluc3BlY3QoYWN0dWFsLCB7XG4gICAgICAgIGNvbG9yczogZmFsc2VcbiAgICAgIH0pXG4gICAgICBpZiAoaW5zcGVjdGVkLmxlbmd0aCA+IDI1KSB7XG4gICAgICAgIGluc3BlY3RlZCA9IGAke2luc3BlY3RlZC5zbGljZSgwLCAyNSl9Li4uYFxuICAgICAgfVxuICAgICAgbXNnICs9IGAuIFJlY2VpdmVkIHR5cGUgJHt0eXBlb2YgYWN0dWFsfSAoJHtpbnNwZWN0ZWR9KWBcbiAgICB9XG4gICAgcmV0dXJuIG1zZ1xuICB9LFxuICBUeXBlRXJyb3JcbilcbkUoXG4gICdFUlJfSU5WQUxJRF9BUkdfVkFMVUUnLFxuICAobmFtZSwgdmFsdWUsIHJlYXNvbiA9ICdpcyBpbnZhbGlkJykgPT4ge1xuICAgIGxldCBpbnNwZWN0ZWQgPSBpbnNwZWN0KHZhbHVlKVxuICAgIGlmIChpbnNwZWN0ZWQubGVuZ3RoID4gMTI4KSB7XG4gICAgICBpbnNwZWN0ZWQgPSBpbnNwZWN0ZWQuc2xpY2UoMCwgMTI4KSArICcuLi4nXG4gICAgfVxuICAgIGNvbnN0IHR5cGUgPSBuYW1lLmluY2x1ZGVzKCcuJykgPyAncHJvcGVydHknIDogJ2FyZ3VtZW50J1xuICAgIHJldHVybiBgVGhlICR7dHlwZX0gJyR7bmFtZX0nICR7cmVhc29ufS4gUmVjZWl2ZWQgJHtpbnNwZWN0ZWR9YFxuICB9LFxuICBUeXBlRXJyb3JcbilcbkUoXG4gICdFUlJfSU5WQUxJRF9SRVRVUk5fVkFMVUUnLFxuICAoaW5wdXQsIG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgdmFyIF92YWx1ZSRjb25zdHJ1Y3RvclxuICAgIGNvbnN0IHR5cGUgPVxuICAgICAgdmFsdWUgIT09IG51bGwgJiZcbiAgICAgIHZhbHVlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIChfdmFsdWUkY29uc3RydWN0b3IgPSB2YWx1ZS5jb25zdHJ1Y3RvcikgIT09IG51bGwgJiZcbiAgICAgIF92YWx1ZSRjb25zdHJ1Y3RvciAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBfdmFsdWUkY29uc3RydWN0b3IubmFtZVxuICAgICAgICA/IGBpbnN0YW5jZSBvZiAke3ZhbHVlLmNvbnN0cnVjdG9yLm5hbWV9YFxuICAgICAgICA6IGB0eXBlICR7dHlwZW9mIHZhbHVlfWBcbiAgICByZXR1cm4gYEV4cGVjdGVkICR7aW5wdXR9IHRvIGJlIHJldHVybmVkIGZyb20gdGhlIFwiJHtuYW1lfVwiYCArIGAgZnVuY3Rpb24gYnV0IGdvdCAke3R5cGV9LmBcbiAgfSxcbiAgVHlwZUVycm9yXG4pXG5FKFxuICAnRVJSX01JU1NJTkdfQVJHUycsXG4gICguLi5hcmdzKSA9PiB7XG4gICAgYXNzZXJ0KGFyZ3MubGVuZ3RoID4gMCwgJ0F0IGxlYXN0IG9uZSBhcmcgbmVlZHMgdG8gYmUgc3BlY2lmaWVkJylcbiAgICBsZXQgbXNnXG4gICAgY29uc3QgbGVuID0gYXJncy5sZW5ndGhcbiAgICBhcmdzID0gKEFycmF5LmlzQXJyYXkoYXJncykgPyBhcmdzIDogW2FyZ3NdKS5tYXAoKGEpID0+IGBcIiR7YX1cImApLmpvaW4oJyBvciAnKVxuICAgIHN3aXRjaCAobGVuKSB7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIG1zZyArPSBgVGhlICR7YXJnc1swXX0gYXJndW1lbnRgXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIDI6XG4gICAgICAgIG1zZyArPSBgVGhlICR7YXJnc1swXX0gYW5kICR7YXJnc1sxXX0gYXJndW1lbnRzYFxuICAgICAgICBicmVha1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAge1xuICAgICAgICAgIGNvbnN0IGxhc3QgPSBhcmdzLnBvcCgpXG4gICAgICAgICAgbXNnICs9IGBUaGUgJHthcmdzLmpvaW4oJywgJyl9LCBhbmQgJHtsYXN0fSBhcmd1bWVudHNgXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICB9XG4gICAgcmV0dXJuIGAke21zZ30gbXVzdCBiZSBzcGVjaWZpZWRgXG4gIH0sXG4gIFR5cGVFcnJvclxuKVxuRShcbiAgJ0VSUl9PVVRfT0ZfUkFOR0UnLFxuICAoc3RyLCByYW5nZSwgaW5wdXQpID0+IHtcbiAgICBhc3NlcnQocmFuZ2UsICdNaXNzaW5nIFwicmFuZ2VcIiBhcmd1bWVudCcpXG4gICAgbGV0IHJlY2VpdmVkXG4gICAgaWYgKE51bWJlci5pc0ludGVnZXIoaW5wdXQpICYmIE1hdGguYWJzKGlucHV0KSA+IDIgKiogMzIpIHtcbiAgICAgIHJlY2VpdmVkID0gYWRkTnVtZXJpY2FsU2VwYXJhdG9yKFN0cmluZyhpbnB1dCkpXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09ICdiaWdpbnQnKSB7XG4gICAgICByZWNlaXZlZCA9IFN0cmluZyhpbnB1dClcbiAgICAgIGlmIChpbnB1dCA+IDJuICoqIDMybiB8fCBpbnB1dCA8IC0oMm4gKiogMzJuKSkge1xuICAgICAgICByZWNlaXZlZCA9IGFkZE51bWVyaWNhbFNlcGFyYXRvcihyZWNlaXZlZClcbiAgICAgIH1cbiAgICAgIHJlY2VpdmVkICs9ICduJ1xuICAgIH0gZWxzZSB7XG4gICAgICByZWNlaXZlZCA9IGluc3BlY3QoaW5wdXQpXG4gICAgfVxuICAgIHJldHVybiBgVGhlIHZhbHVlIG9mIFwiJHtzdHJ9XCIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlICR7cmFuZ2V9LiBSZWNlaXZlZCAke3JlY2VpdmVkfWBcbiAgfSxcbiAgUmFuZ2VFcnJvclxuKVxuRSgnRVJSX01VTFRJUExFX0NBTExCQUNLJywgJ0NhbGxiYWNrIGNhbGxlZCBtdWx0aXBsZSB0aW1lcycsIEVycm9yKVxuRSgnRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQnLCAnVGhlICVzIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQnLCBFcnJvcilcbkUoJ0VSUl9TVFJFQU1fQUxSRUFEWV9GSU5JU0hFRCcsICdDYW5ub3QgY2FsbCAlcyBhZnRlciBhIHN0cmVhbSB3YXMgZmluaXNoZWQnLCBFcnJvcilcbkUoJ0VSUl9TVFJFQU1fQ0FOTk9UX1BJUEUnLCAnQ2Fubm90IHBpcGUsIG5vdCByZWFkYWJsZScsIEVycm9yKVxuRSgnRVJSX1NUUkVBTV9ERVNUUk9ZRUQnLCAnQ2Fubm90IGNhbGwgJXMgYWZ0ZXIgYSBzdHJlYW0gd2FzIGRlc3Ryb3llZCcsIEVycm9yKVxuRSgnRVJSX1NUUkVBTV9OVUxMX1ZBTFVFUycsICdNYXkgbm90IHdyaXRlIG51bGwgdmFsdWVzIHRvIHN0cmVhbScsIFR5cGVFcnJvcilcbkUoJ0VSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFJywgJ1ByZW1hdHVyZSBjbG9zZScsIEVycm9yKVxuRSgnRVJSX1NUUkVBTV9QVVNIX0FGVEVSX0VPRicsICdzdHJlYW0ucHVzaCgpIGFmdGVyIEVPRicsIEVycm9yKVxuRSgnRVJSX1NUUkVBTV9VTlNISUZUX0FGVEVSX0VORF9FVkVOVCcsICdzdHJlYW0udW5zaGlmdCgpIGFmdGVyIGVuZCBldmVudCcsIEVycm9yKVxuRSgnRVJSX1NUUkVBTV9XUklURV9BRlRFUl9FTkQnLCAnd3JpdGUgYWZ0ZXIgZW5kJywgRXJyb3IpXG5FKCdFUlJfVU5LTk9XTl9FTkNPRElORycsICdVbmtub3duIGVuY29kaW5nOiAlcycsIFR5cGVFcnJvcilcbm1vZHVsZS5leHBvcnRzID0ge1xuICBBYm9ydEVycm9yLFxuICBhZ2dyZWdhdGVUd29FcnJvcnM6IGhpZGVTdGFja0ZyYW1lcyhhZ2dyZWdhdGVUd29FcnJvcnMpLFxuICBoaWRlU3RhY2tGcmFtZXMsXG4gIGNvZGVzXG59XG4iLAogICAgIi8qIGVzbGludCBqc2RvYy9yZXF1aXJlLWpzZG9jOiBcImVycm9yXCIgKi9cblxuJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHtcbiAgQXJyYXlJc0FycmF5LFxuICBBcnJheVByb3RvdHlwZUluY2x1ZGVzLFxuICBBcnJheVByb3RvdHlwZUpvaW4sXG4gIEFycmF5UHJvdG90eXBlTWFwLFxuICBOdW1iZXJJc0ludGVnZXIsXG4gIE51bWJlcklzTmFOLFxuICBOdW1iZXJNQVhfU0FGRV9JTlRFR0VSLFxuICBOdW1iZXJNSU5fU0FGRV9JTlRFR0VSLFxuICBOdW1iZXJQYXJzZUludCxcbiAgT2JqZWN0UHJvdG90eXBlSGFzT3duUHJvcGVydHksXG4gIFJlZ0V4cFByb3RvdHlwZUV4ZWMsXG4gIFN0cmluZyxcbiAgU3RyaW5nUHJvdG90eXBlVG9VcHBlckNhc2UsXG4gIFN0cmluZ1Byb3RvdHlwZVRyaW1cbn0gPSByZXF1aXJlKCcuLi9vdXJzL3ByaW1vcmRpYWxzJylcbmNvbnN0IHtcbiAgaGlkZVN0YWNrRnJhbWVzLFxuICBjb2RlczogeyBFUlJfU09DS0VUX0JBRF9QT1JULCBFUlJfSU5WQUxJRF9BUkdfVFlQRSwgRVJSX0lOVkFMSURfQVJHX1ZBTFVFLCBFUlJfT1VUX09GX1JBTkdFLCBFUlJfVU5LTk9XTl9TSUdOQUwgfVxufSA9IHJlcXVpcmUoJy4uL291cnMvZXJyb3JzJylcbmNvbnN0IHsgbm9ybWFsaXplRW5jb2RpbmcgfSA9IHJlcXVpcmUoJy4uL291cnMvdXRpbCcpXG5jb25zdCB7IGlzQXN5bmNGdW5jdGlvbiwgaXNBcnJheUJ1ZmZlclZpZXcgfSA9IHJlcXVpcmUoJy4uL291cnMvdXRpbCcpLnR5cGVzXG5jb25zdCBzaWduYWxzID0ge31cblxuLyoqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNJbnQzMih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT09ICh2YWx1ZSB8IDApXG59XG5cbi8qKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzVWludDMyKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gdmFsdWUgPj4+IDBcbn1cbmNvbnN0IG9jdGFsUmVnID0gL15bMC03XSskL1xuY29uc3QgbW9kZURlc2MgPSAnbXVzdCBiZSBhIDMyLWJpdCB1bnNpZ25lZCBpbnRlZ2VyIG9yIGFuIG9jdGFsIHN0cmluZydcblxuLyoqXG4gKiBQYXJzZSBhbmQgdmFsaWRhdGUgdmFsdWVzIHRoYXQgd2lsbCBiZSBjb252ZXJ0ZWQgaW50byBtb2RlX3QgKHRoZSBTXypcbiAqIGNvbnN0YW50cykuIE9ubHkgdmFsaWQgbnVtYmVycyBhbmQgb2N0YWwgc3RyaW5ncyBhcmUgYWxsb3dlZC4gVGhleSBjb3VsZCBiZVxuICogY29udmVydGVkIHRvIDMyLWJpdCB1bnNpZ25lZCBpbnRlZ2VycyBvciBub24tbmVnYXRpdmUgc2lnbmVkIGludGVnZXJzIGluIHRoZVxuICogQysrIGxhbmQsIGJ1dCBhbnkgdmFsdWUgaGlnaGVyIHRoYW4gMG83Nzcgd2lsbCByZXN1bHQgaW4gcGxhdGZvcm0tc3BlY2lmaWNcbiAqIGJlaGF2aW9ycy5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVmFsdWVzIHRvIGJlIHZhbGlkYXRlZFxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgTmFtZSBvZiB0aGUgYXJndW1lbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZGVmXSBJZiBzcGVjaWZpZWQsIHdpbGwgYmUgcmV0dXJuZWQgZm9yIGludmFsaWQgdmFsdWVzXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5mdW5jdGlvbiBwYXJzZUZpbGVNb2RlKHZhbHVlLCBuYW1lLCBkZWYpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICB2YWx1ZSA9IGRlZlxuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKFJlZ0V4cFByb3RvdHlwZUV4ZWMob2N0YWxSZWcsIHZhbHVlKSA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19WQUxVRShuYW1lLCB2YWx1ZSwgbW9kZURlc2MpXG4gICAgfVxuICAgIHZhbHVlID0gTnVtYmVyUGFyc2VJbnQodmFsdWUsIDgpXG4gIH1cbiAgdmFsaWRhdGVVaW50MzIodmFsdWUsIG5hbWUpXG4gIHJldHVybiB2YWx1ZVxufVxuXG4vKipcbiAqIEBjYWxsYmFjayB2YWxpZGF0ZUludGVnZXJcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge251bWJlcn0gW21pbl1cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbWF4XVxuICogQHJldHVybnMge2Fzc2VydHMgdmFsdWUgaXMgbnVtYmVyfVxuICovXG5cbi8qKiBAdHlwZSB7dmFsaWRhdGVJbnRlZ2VyfSAqL1xuY29uc3QgdmFsaWRhdGVJbnRlZ2VyID0gaGlkZVN0YWNrRnJhbWVzKCh2YWx1ZSwgbmFtZSwgbWluID0gTnVtYmVyTUlOX1NBRkVfSU5URUdFUiwgbWF4ID0gTnVtYmVyTUFYX1NBRkVfSU5URUdFUikgPT4ge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJykgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKG5hbWUsICdudW1iZXInLCB2YWx1ZSlcbiAgaWYgKCFOdW1iZXJJc0ludGVnZXIodmFsdWUpKSB0aHJvdyBuZXcgRVJSX09VVF9PRl9SQU5HRShuYW1lLCAnYW4gaW50ZWdlcicsIHZhbHVlKVxuICBpZiAodmFsdWUgPCBtaW4gfHwgdmFsdWUgPiBtYXgpIHRocm93IG5ldyBFUlJfT1VUX09GX1JBTkdFKG5hbWUsIGA+PSAke21pbn0gJiYgPD0gJHttYXh9YCwgdmFsdWUpXG59KVxuXG4vKipcbiAqIEBjYWxsYmFjayB2YWxpZGF0ZUludDMyXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHtudW1iZXJ9IFttaW5dXG4gKiBAcGFyYW0ge251bWJlcn0gW21heF1cbiAqIEByZXR1cm5zIHthc3NlcnRzIHZhbHVlIGlzIG51bWJlcn1cbiAqL1xuXG4vKiogQHR5cGUge3ZhbGlkYXRlSW50MzJ9ICovXG5jb25zdCB2YWxpZGF0ZUludDMyID0gaGlkZVN0YWNrRnJhbWVzKCh2YWx1ZSwgbmFtZSwgbWluID0gLTIxNDc0ODM2NDgsIG1heCA9IDIxNDc0ODM2NDcpID0+IHtcbiAgLy8gVGhlIGRlZmF1bHRzIGZvciBtaW4gYW5kIG1heCBjb3JyZXNwb25kIHRvIHRoZSBsaW1pdHMgb2YgMzItYml0IGludGVnZXJzLlxuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRShuYW1lLCAnbnVtYmVyJywgdmFsdWUpXG4gIH1cbiAgaWYgKCFOdW1iZXJJc0ludGVnZXIodmFsdWUpKSB7XG4gICAgdGhyb3cgbmV3IEVSUl9PVVRfT0ZfUkFOR0UobmFtZSwgJ2FuIGludGVnZXInLCB2YWx1ZSlcbiAgfVxuICBpZiAodmFsdWUgPCBtaW4gfHwgdmFsdWUgPiBtYXgpIHtcbiAgICB0aHJvdyBuZXcgRVJSX09VVF9PRl9SQU5HRShuYW1lLCBgPj0gJHttaW59ICYmIDw9ICR7bWF4fWAsIHZhbHVlKVxuICB9XG59KVxuXG4vKipcbiAqIEBjYWxsYmFjayB2YWxpZGF0ZVVpbnQzMlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7bnVtYmVyfGJvb2xlYW59IFtwb3NpdGl2ZT1mYWxzZV1cbiAqIEByZXR1cm5zIHthc3NlcnRzIHZhbHVlIGlzIG51bWJlcn1cbiAqL1xuXG4vKiogQHR5cGUge3ZhbGlkYXRlVWludDMyfSAqL1xuY29uc3QgdmFsaWRhdGVVaW50MzIgPSBoaWRlU3RhY2tGcmFtZXMoKHZhbHVlLCBuYW1lLCBwb3NpdGl2ZSA9IGZhbHNlKSA9PiB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKG5hbWUsICdudW1iZXInLCB2YWx1ZSlcbiAgfVxuICBpZiAoIU51bWJlcklzSW50ZWdlcih2YWx1ZSkpIHtcbiAgICB0aHJvdyBuZXcgRVJSX09VVF9PRl9SQU5HRShuYW1lLCAnYW4gaW50ZWdlcicsIHZhbHVlKVxuICB9XG4gIGNvbnN0IG1pbiA9IHBvc2l0aXZlID8gMSA6IDBcbiAgLy8gMiAqKiAzMiA9PT0gNDI5NDk2NzI5NlxuICBjb25zdCBtYXggPSA0Mjk0OTY3Mjk1XG4gIGlmICh2YWx1ZSA8IG1pbiB8fCB2YWx1ZSA+IG1heCkge1xuICAgIHRocm93IG5ldyBFUlJfT1VUX09GX1JBTkdFKG5hbWUsIGA+PSAke21pbn0gJiYgPD0gJHttYXh9YCwgdmFsdWUpXG4gIH1cbn0pXG5cbi8qKlxuICogQGNhbGxiYWNrIHZhbGlkYXRlU3RyaW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHJldHVybnMge2Fzc2VydHMgdmFsdWUgaXMgc3RyaW5nfVxuICovXG5cbi8qKiBAdHlwZSB7dmFsaWRhdGVTdHJpbmd9ICovXG5mdW5jdGlvbiB2YWxpZGF0ZVN0cmluZyh2YWx1ZSwgbmFtZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKG5hbWUsICdzdHJpbmcnLCB2YWx1ZSlcbn1cblxuLyoqXG4gKiBAY2FsbGJhY2sgdmFsaWRhdGVOdW1iZXJcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge251bWJlcn0gW21pbl1cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbWF4XVxuICogQHJldHVybnMge2Fzc2VydHMgdmFsdWUgaXMgbnVtYmVyfVxuICovXG5cbi8qKiBAdHlwZSB7dmFsaWRhdGVOdW1iZXJ9ICovXG5mdW5jdGlvbiB2YWxpZGF0ZU51bWJlcih2YWx1ZSwgbmFtZSwgbWluID0gdW5kZWZpbmVkLCBtYXgpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicpIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRShuYW1lLCAnbnVtYmVyJywgdmFsdWUpXG4gIGlmIChcbiAgICAobWluICE9IG51bGwgJiYgdmFsdWUgPCBtaW4pIHx8XG4gICAgKG1heCAhPSBudWxsICYmIHZhbHVlID4gbWF4KSB8fFxuICAgICgobWluICE9IG51bGwgfHwgbWF4ICE9IG51bGwpICYmIE51bWJlcklzTmFOKHZhbHVlKSlcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVSUl9PVVRfT0ZfUkFOR0UoXG4gICAgICBuYW1lLFxuICAgICAgYCR7bWluICE9IG51bGwgPyBgPj0gJHttaW59YCA6ICcnfSR7bWluICE9IG51bGwgJiYgbWF4ICE9IG51bGwgPyAnICYmICcgOiAnJ30ke21heCAhPSBudWxsID8gYDw9ICR7bWF4fWAgOiAnJ31gLFxuICAgICAgdmFsdWVcbiAgICApXG4gIH1cbn1cblxuLyoqXG4gKiBAY2FsbGJhY2sgdmFsaWRhdGVPbmVPZlxuICogQHRlbXBsYXRlIFRcbiAqIEBwYXJhbSB7VH0gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge1RbXX0gb25lT2ZcbiAqL1xuXG4vKiogQHR5cGUge3ZhbGlkYXRlT25lT2Z9ICovXG5jb25zdCB2YWxpZGF0ZU9uZU9mID0gaGlkZVN0YWNrRnJhbWVzKCh2YWx1ZSwgbmFtZSwgb25lT2YpID0+IHtcbiAgaWYgKCFBcnJheVByb3RvdHlwZUluY2x1ZGVzKG9uZU9mLCB2YWx1ZSkpIHtcbiAgICBjb25zdCBhbGxvd2VkID0gQXJyYXlQcm90b3R5cGVKb2luKFxuICAgICAgQXJyYXlQcm90b3R5cGVNYXAob25lT2YsICh2KSA9PiAodHlwZW9mIHYgPT09ICdzdHJpbmcnID8gYCcke3Z9J2AgOiBTdHJpbmcodikpKSxcbiAgICAgICcsICdcbiAgICApXG4gICAgY29uc3QgcmVhc29uID0gJ211c3QgYmUgb25lIG9mOiAnICsgYWxsb3dlZFxuICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVkFMVUUobmFtZSwgdmFsdWUsIHJlYXNvbilcbiAgfVxufSlcblxuLyoqXG4gKiBAY2FsbGJhY2sgdmFsaWRhdGVCb29sZWFuXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHJldHVybnMge2Fzc2VydHMgdmFsdWUgaXMgYm9vbGVhbn1cbiAqL1xuXG4vKiogQHR5cGUge3ZhbGlkYXRlQm9vbGVhbn0gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQm9vbGVhbih2YWx1ZSwgbmFtZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnYm9vbGVhbicpIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRShuYW1lLCAnYm9vbGVhbicsIHZhbHVlKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7YW55fSBvcHRpb25zXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKiBAcGFyYW0ge2Jvb2xlYW59IGRlZmF1bHRWYWx1ZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGdldE93blByb3BlcnR5VmFsdWVPckRlZmF1bHQob3B0aW9ucywga2V5LCBkZWZhdWx0VmFsdWUpIHtcbiAgcmV0dXJuIG9wdGlvbnMgPT0gbnVsbCB8fCAhT2JqZWN0UHJvdG90eXBlSGFzT3duUHJvcGVydHkob3B0aW9ucywga2V5KSA/IGRlZmF1bHRWYWx1ZSA6IG9wdGlvbnNba2V5XVxufVxuXG4vKipcbiAqIEBjYWxsYmFjayB2YWxpZGF0ZU9iamVjdFxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7e1xuICogICBhbGxvd0FycmF5PzogYm9vbGVhbixcbiAqICAgYWxsb3dGdW5jdGlvbj86IGJvb2xlYW4sXG4gKiAgIG51bGxhYmxlPzogYm9vbGVhblxuICogfX0gW29wdGlvbnNdXG4gKi9cblxuLyoqIEB0eXBlIHt2YWxpZGF0ZU9iamVjdH0gKi9cbmNvbnN0IHZhbGlkYXRlT2JqZWN0ID0gaGlkZVN0YWNrRnJhbWVzKCh2YWx1ZSwgbmFtZSwgb3B0aW9ucyA9IG51bGwpID0+IHtcbiAgY29uc3QgYWxsb3dBcnJheSA9IGdldE93blByb3BlcnR5VmFsdWVPckRlZmF1bHQob3B0aW9ucywgJ2FsbG93QXJyYXknLCBmYWxzZSlcbiAgY29uc3QgYWxsb3dGdW5jdGlvbiA9IGdldE93blByb3BlcnR5VmFsdWVPckRlZmF1bHQob3B0aW9ucywgJ2FsbG93RnVuY3Rpb24nLCBmYWxzZSlcbiAgY29uc3QgbnVsbGFibGUgPSBnZXRPd25Qcm9wZXJ0eVZhbHVlT3JEZWZhdWx0KG9wdGlvbnMsICdudWxsYWJsZScsIGZhbHNlKVxuICBpZiAoXG4gICAgKCFudWxsYWJsZSAmJiB2YWx1ZSA9PT0gbnVsbCkgfHxcbiAgICAoIWFsbG93QXJyYXkgJiYgQXJyYXlJc0FycmF5KHZhbHVlKSkgfHxcbiAgICAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyAmJiAoIWFsbG93RnVuY3Rpb24gfHwgdHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nKSlcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKG5hbWUsICdPYmplY3QnLCB2YWx1ZSlcbiAgfVxufSlcblxuLyoqXG4gKiBAY2FsbGJhY2sgdmFsaWRhdGVEaWN0aW9uYXJ5IC0gV2UgYXJlIHVzaW5nIHRoZSBXZWIgSURMIFN0YW5kYXJkIGRlZmluaXRpb25cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiBcImRpY3Rpb25hcnlcIiBoZXJlLCB3aGljaCBtZWFucyBhbnkgdmFsdWVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aG9zZSBUeXBlIGlzIGVpdGhlciBVbmRlZmluZWQsIE51bGwsIG9yXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0ICh3aGljaCBpbmNsdWRlcyBmdW5jdGlvbnMpLlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBzZWUgaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy1kaWN0aW9uYXJ5XG4gKiBAc2VlIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyN0YWJsZS10eXBlb2Ytb3BlcmF0b3ItcmVzdWx0c1xuICovXG5cbi8qKiBAdHlwZSB7dmFsaWRhdGVEaWN0aW9uYXJ5fSAqL1xuY29uc3QgdmFsaWRhdGVEaWN0aW9uYXJ5ID0gaGlkZVN0YWNrRnJhbWVzKCh2YWx1ZSwgbmFtZSkgPT4ge1xuICBpZiAodmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRShuYW1lLCAnYSBkaWN0aW9uYXJ5JywgdmFsdWUpXG4gIH1cbn0pXG5cbi8qKlxuICogQGNhbGxiYWNrIHZhbGlkYXRlQXJyYXlcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge251bWJlcn0gW21pbkxlbmd0aF1cbiAqIEByZXR1cm5zIHthc3NlcnRzIHZhbHVlIGlzIGFueVtdfVxuICovXG5cbi8qKiBAdHlwZSB7dmFsaWRhdGVBcnJheX0gKi9cbmNvbnN0IHZhbGlkYXRlQXJyYXkgPSBoaWRlU3RhY2tGcmFtZXMoKHZhbHVlLCBuYW1lLCBtaW5MZW5ndGggPSAwKSA9PiB7XG4gIGlmICghQXJyYXlJc0FycmF5KHZhbHVlKSkge1xuICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRShuYW1lLCAnQXJyYXknLCB2YWx1ZSlcbiAgfVxuICBpZiAodmFsdWUubGVuZ3RoIDwgbWluTGVuZ3RoKSB7XG4gICAgY29uc3QgcmVhc29uID0gYG11c3QgYmUgbG9uZ2VyIHRoYW4gJHttaW5MZW5ndGh9YFxuICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVkFMVUUobmFtZSwgdmFsdWUsIHJlYXNvbilcbiAgfVxufSlcblxuLyoqXG4gKiBAY2FsbGJhY2sgdmFsaWRhdGVTdHJpbmdBcnJheVxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEByZXR1cm5zIHthc3NlcnRzIHZhbHVlIGlzIHN0cmluZ1tdfVxuICovXG5cbi8qKiBAdHlwZSB7dmFsaWRhdGVTdHJpbmdBcnJheX0gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlU3RyaW5nQXJyYXkodmFsdWUsIG5hbWUpIHtcbiAgdmFsaWRhdGVBcnJheSh2YWx1ZSwgbmFtZSlcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgIHZhbGlkYXRlU3RyaW5nKHZhbHVlW2ldLCBgJHtuYW1lfVske2l9XWApXG4gIH1cbn1cblxuLyoqXG4gKiBAY2FsbGJhY2sgdmFsaWRhdGVCb29sZWFuQXJyYXlcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcmV0dXJucyB7YXNzZXJ0cyB2YWx1ZSBpcyBib29sZWFuW119XG4gKi9cblxuLyoqIEB0eXBlIHt2YWxpZGF0ZUJvb2xlYW5BcnJheX0gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQm9vbGVhbkFycmF5KHZhbHVlLCBuYW1lKSB7XG4gIHZhbGlkYXRlQXJyYXkodmFsdWUsIG5hbWUpXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICB2YWxpZGF0ZUJvb2xlYW4odmFsdWVbaV0sIGAke25hbWV9WyR7aX1dYClcbiAgfVxufVxuXG4vKipcbiAqIEBjYWxsYmFjayB2YWxpZGF0ZUFib3J0U2lnbmFsQXJyYXlcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcmV0dXJucyB7YXNzZXJ0cyB2YWx1ZSBpcyBBYm9ydFNpZ25hbFtdfVxuICovXG5cbi8qKiBAdHlwZSB7dmFsaWRhdGVBYm9ydFNpZ25hbEFycmF5fSAqL1xuZnVuY3Rpb24gdmFsaWRhdGVBYm9ydFNpZ25hbEFycmF5KHZhbHVlLCBuYW1lKSB7XG4gIHZhbGlkYXRlQXJyYXkodmFsdWUsIG5hbWUpXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBzaWduYWwgPSB2YWx1ZVtpXVxuICAgIGNvbnN0IGluZGV4ZWROYW1lID0gYCR7bmFtZX1bJHtpfV1gXG4gICAgaWYgKHNpZ25hbCA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoaW5kZXhlZE5hbWUsICdBYm9ydFNpZ25hbCcsIHNpZ25hbClcbiAgICB9XG4gICAgdmFsaWRhdGVBYm9ydFNpZ25hbChzaWduYWwsIGluZGV4ZWROYW1lKVxuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHsqfSBzaWduYWxcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbmFtZT0nc2lnbmFsJ11cbiAqIEByZXR1cm5zIHthc3NlcnRzIHNpZ25hbCBpcyBrZXlvZiBzaWduYWxzfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVNpZ25hbE5hbWUoc2lnbmFsLCBuYW1lID0gJ3NpZ25hbCcpIHtcbiAgdmFsaWRhdGVTdHJpbmcoc2lnbmFsLCBuYW1lKVxuICBpZiAoc2lnbmFsc1tzaWduYWxdID09PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoc2lnbmFsc1tTdHJpbmdQcm90b3R5cGVUb1VwcGVyQ2FzZShzaWduYWwpXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRVJSX1VOS05PV05fU0lHTkFMKHNpZ25hbCArICcgKHNpZ25hbHMgbXVzdCB1c2UgYWxsIGNhcGl0YWwgbGV0dGVycyknKVxuICAgIH1cbiAgICB0aHJvdyBuZXcgRVJSX1VOS05PV05fU0lHTkFMKHNpZ25hbClcbiAgfVxufVxuXG4vKipcbiAqIEBjYWxsYmFjayB2YWxpZGF0ZUJ1ZmZlclxuICogQHBhcmFtIHsqfSBidWZmZXJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbmFtZT0nYnVmZmVyJ11cbiAqIEByZXR1cm5zIHthc3NlcnRzIGJ1ZmZlciBpcyBBcnJheUJ1ZmZlclZpZXd9XG4gKi9cblxuLyoqIEB0eXBlIHt2YWxpZGF0ZUJ1ZmZlcn0gKi9cbmNvbnN0IHZhbGlkYXRlQnVmZmVyID0gaGlkZVN0YWNrRnJhbWVzKChidWZmZXIsIG5hbWUgPSAnYnVmZmVyJykgPT4ge1xuICBpZiAoIWlzQXJyYXlCdWZmZXJWaWV3KGJ1ZmZlcikpIHtcbiAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUobmFtZSwgWydCdWZmZXInLCAnVHlwZWRBcnJheScsICdEYXRhVmlldyddLCBidWZmZXIpXG4gIH1cbn0pXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGRhdGFcbiAqIEBwYXJhbSB7c3RyaW5nfSBlbmNvZGluZ1xuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUVuY29kaW5nKGRhdGEsIGVuY29kaW5nKSB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRFbmNvZGluZyA9IG5vcm1hbGl6ZUVuY29kaW5nKGVuY29kaW5nKVxuICBjb25zdCBsZW5ndGggPSBkYXRhLmxlbmd0aFxuICBpZiAobm9ybWFsaXplZEVuY29kaW5nID09PSAnaGV4JyAmJiBsZW5ndGggJSAyICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19WQUxVRSgnZW5jb2RpbmcnLCBlbmNvZGluZywgYGlzIGludmFsaWQgZm9yIGRhdGEgb2YgbGVuZ3RoICR7bGVuZ3RofWApXG4gIH1cbn1cblxuLyoqXG4gKiBDaGVjayB0aGF0IHRoZSBwb3J0IG51bWJlciBpcyBub3QgTmFOIHdoZW4gY29lcmNlZCB0byBhIG51bWJlcixcbiAqIGlzIGFuIGludGVnZXIgYW5kIHRoYXQgaXQgZmFsbHMgd2l0aGluIHRoZSBsZWdhbCByYW5nZSBvZiBwb3J0IG51bWJlcnMuXG4gKiBAcGFyYW0geyp9IHBvcnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbmFtZT0nUG9ydCddXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFthbGxvd1plcm89dHJ1ZV1cbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlUG9ydChwb3J0LCBuYW1lID0gJ1BvcnQnLCBhbGxvd1plcm8gPSB0cnVlKSB7XG4gIGlmIChcbiAgICAodHlwZW9mIHBvcnQgIT09ICdudW1iZXInICYmIHR5cGVvZiBwb3J0ICE9PSAnc3RyaW5nJykgfHxcbiAgICAodHlwZW9mIHBvcnQgPT09ICdzdHJpbmcnICYmIFN0cmluZ1Byb3RvdHlwZVRyaW0ocG9ydCkubGVuZ3RoID09PSAwKSB8fFxuICAgICtwb3J0ICE9PSArcG9ydCA+Pj4gMCB8fFxuICAgIHBvcnQgPiAweGZmZmYgfHxcbiAgICAocG9ydCA9PT0gMCAmJiAhYWxsb3daZXJvKVxuICApIHtcbiAgICB0aHJvdyBuZXcgRVJSX1NPQ0tFVF9CQURfUE9SVChuYW1lLCBwb3J0LCBhbGxvd1plcm8pXG4gIH1cbiAgcmV0dXJuIHBvcnQgfCAwXG59XG5cbi8qKlxuICogQGNhbGxiYWNrIHZhbGlkYXRlQWJvcnRTaWduYWxcbiAqIEBwYXJhbSB7Kn0gc2lnbmFsXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICovXG5cbi8qKiBAdHlwZSB7dmFsaWRhdGVBYm9ydFNpZ25hbH0gKi9cbmNvbnN0IHZhbGlkYXRlQWJvcnRTaWduYWwgPSBoaWRlU3RhY2tGcmFtZXMoKHNpZ25hbCwgbmFtZSkgPT4ge1xuICBpZiAoc2lnbmFsICE9PSB1bmRlZmluZWQgJiYgKHNpZ25hbCA9PT0gbnVsbCB8fCB0eXBlb2Ygc2lnbmFsICE9PSAnb2JqZWN0JyB8fCAhKCdhYm9ydGVkJyBpbiBzaWduYWwpKSkge1xuICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRShuYW1lLCAnQWJvcnRTaWduYWwnLCBzaWduYWwpXG4gIH1cbn0pXG5cbi8qKlxuICogQGNhbGxiYWNrIHZhbGlkYXRlRnVuY3Rpb25cbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcmV0dXJucyB7YXNzZXJ0cyB2YWx1ZSBpcyBGdW5jdGlvbn1cbiAqL1xuXG4vKiogQHR5cGUge3ZhbGlkYXRlRnVuY3Rpb259ICovXG5jb25zdCB2YWxpZGF0ZUZ1bmN0aW9uID0gaGlkZVN0YWNrRnJhbWVzKCh2YWx1ZSwgbmFtZSkgPT4ge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nKSB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUobmFtZSwgJ0Z1bmN0aW9uJywgdmFsdWUpXG59KVxuXG4vKipcbiAqIEBjYWxsYmFjayB2YWxpZGF0ZVBsYWluRnVuY3Rpb25cbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcmV0dXJucyB7YXNzZXJ0cyB2YWx1ZSBpcyBGdW5jdGlvbn1cbiAqL1xuXG4vKiogQHR5cGUge3ZhbGlkYXRlUGxhaW5GdW5jdGlvbn0gKi9cbmNvbnN0IHZhbGlkYXRlUGxhaW5GdW5jdGlvbiA9IGhpZGVTdGFja0ZyYW1lcygodmFsdWUsIG5hbWUpID0+IHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Z1bmN0aW9uJyB8fCBpc0FzeW5jRnVuY3Rpb24odmFsdWUpKSB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUobmFtZSwgJ0Z1bmN0aW9uJywgdmFsdWUpXG59KVxuXG4vKipcbiAqIEBjYWxsYmFjayB2YWxpZGF0ZVVuZGVmaW5lZFxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEByZXR1cm5zIHthc3NlcnRzIHZhbHVlIGlzIHVuZGVmaW5lZH1cbiAqL1xuXG4vKiogQHR5cGUge3ZhbGlkYXRlVW5kZWZpbmVkfSAqL1xuY29uc3QgdmFsaWRhdGVVbmRlZmluZWQgPSBoaWRlU3RhY2tGcmFtZXMoKHZhbHVlLCBuYW1lKSA9PiB7XG4gIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUobmFtZSwgJ3VuZGVmaW5lZCcsIHZhbHVlKVxufSlcblxuLyoqXG4gKiBAdGVtcGxhdGUgVFxuICogQHBhcmFtIHtUfSB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7VFtdfSB1bmlvblxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVVuaW9uKHZhbHVlLCBuYW1lLCB1bmlvbikge1xuICBpZiAoIUFycmF5UHJvdG90eXBlSW5jbHVkZXModW5pb24sIHZhbHVlKSkge1xuICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRShuYW1lLCBgKCcke0FycmF5UHJvdG90eXBlSm9pbih1bmlvbiwgJ3wnKX0nKWAsIHZhbHVlKVxuICB9XG59XG5cbi8qXG4gIFRoZSBydWxlcyBmb3IgdGhlIExpbmsgaGVhZGVyIGZpZWxkIGFyZSBkZXNjcmliZWQgaGVyZTpcbiAgaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzgyODguaHRtbCNzZWN0aW9uLTNcblxuICBUaGlzIHJlZ2V4IHZhbGlkYXRlcyBhbnkgc3RyaW5nIHN1cnJvdW5kZWQgYnkgYW5nbGUgYnJhY2tldHNcbiAgKG5vdCBuZWNlc3NhcmlseSBhIHZhbGlkIFVSSSByZWZlcmVuY2UpIGZvbGxvd2VkIGJ5IHplcm8gb3IgbW9yZVxuICBsaW5rLXBhcmFtcyBzZXBhcmF0ZWQgYnkgc2VtaWNvbG9ucy5cbiovXG5jb25zdCBsaW5rVmFsdWVSZWdFeHAgPSAvXig/OjxbXj5dKj4pKD86XFxzKjtcXHMqW147XCJcXHNdKyg/Oj0oXCIpP1teO1wiXFxzXSpcXDEpPykqJC9cblxuLyoqXG4gKiBAcGFyYW0ge2FueX0gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlTGlua0hlYWRlckZvcm1hdCh2YWx1ZSwgbmFtZSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJyB8fCAhUmVnRXhwUHJvdG90eXBlRXhlYyhsaW5rVmFsdWVSZWdFeHAsIHZhbHVlKSkge1xuICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVkFMVUUoXG4gICAgICBuYW1lLFxuICAgICAgdmFsdWUsXG4gICAgICAnbXVzdCBiZSBhbiBhcnJheSBvciBzdHJpbmcgb2YgZm9ybWF0IFwiPC9zdHlsZXMuY3NzPjsgcmVsPXByZWxvYWQ7IGFzPXN0eWxlXCInXG4gICAgKVxuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHthbnl9IGhpbnRzXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlTGlua0hlYWRlclZhbHVlKGhpbnRzKSB7XG4gIGlmICh0eXBlb2YgaGludHMgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFsaWRhdGVMaW5rSGVhZGVyRm9ybWF0KGhpbnRzLCAnaGludHMnKVxuICAgIHJldHVybiBoaW50c1xuICB9IGVsc2UgaWYgKEFycmF5SXNBcnJheShoaW50cykpIHtcbiAgICBjb25zdCBoaW50c0xlbmd0aCA9IGhpbnRzLmxlbmd0aFxuICAgIGxldCByZXN1bHQgPSAnJ1xuICAgIGlmIChoaW50c0xlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhpbnRzTGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGxpbmsgPSBoaW50c1tpXVxuICAgICAgdmFsaWRhdGVMaW5rSGVhZGVyRm9ybWF0KGxpbmssICdoaW50cycpXG4gICAgICByZXN1bHQgKz0gbGlua1xuICAgICAgaWYgKGkgIT09IGhpbnRzTGVuZ3RoIC0gMSkge1xuICAgICAgICByZXN1bHQgKz0gJywgJ1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cbiAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19WQUxVRShcbiAgICAnaGludHMnLFxuICAgIGhpbnRzLFxuICAgICdtdXN0IGJlIGFuIGFycmF5IG9yIHN0cmluZyBvZiBmb3JtYXQgXCI8L3N0eWxlcy5jc3M+OyByZWw9cHJlbG9hZDsgYXM9c3R5bGVcIidcbiAgKVxufVxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGlzSW50MzIsXG4gIGlzVWludDMyLFxuICBwYXJzZUZpbGVNb2RlLFxuICB2YWxpZGF0ZUFycmF5LFxuICB2YWxpZGF0ZVN0cmluZ0FycmF5LFxuICB2YWxpZGF0ZUJvb2xlYW5BcnJheSxcbiAgdmFsaWRhdGVBYm9ydFNpZ25hbEFycmF5LFxuICB2YWxpZGF0ZUJvb2xlYW4sXG4gIHZhbGlkYXRlQnVmZmVyLFxuICB2YWxpZGF0ZURpY3Rpb25hcnksXG4gIHZhbGlkYXRlRW5jb2RpbmcsXG4gIHZhbGlkYXRlRnVuY3Rpb24sXG4gIHZhbGlkYXRlSW50MzIsXG4gIHZhbGlkYXRlSW50ZWdlcixcbiAgdmFsaWRhdGVOdW1iZXIsXG4gIHZhbGlkYXRlT2JqZWN0LFxuICB2YWxpZGF0ZU9uZU9mLFxuICB2YWxpZGF0ZVBsYWluRnVuY3Rpb24sXG4gIHZhbGlkYXRlUG9ydCxcbiAgdmFsaWRhdGVTaWduYWxOYW1lLFxuICB2YWxpZGF0ZVN0cmluZyxcbiAgdmFsaWRhdGVVaW50MzIsXG4gIHZhbGlkYXRlVW5kZWZpbmVkLFxuICB2YWxpZGF0ZVVuaW9uLFxuICB2YWxpZGF0ZUFib3J0U2lnbmFsLFxuICB2YWxpZGF0ZUxpbmtIZWFkZXJWYWx1ZVxufVxuIiwKICAgICIvLyBmb3Igbm93IGp1c3QgZXhwb3NlIHRoZSBidWlsdGluIHByb2Nlc3MgZ2xvYmFsIGZyb20gbm9kZS5qc1xubW9kdWxlLmV4cG9ydHMgPSBnbG9iYWwucHJvY2VzcztcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgU3ltYm9sQXN5bmNJdGVyYXRvciwgU3ltYm9sSXRlcmF0b3IsIFN5bWJvbEZvciB9ID0gcmVxdWlyZSgnLi4vLi4vb3Vycy9wcmltb3JkaWFscycpXG5cbi8vIFdlIG5lZWQgdG8gdXNlIFN5bWJvbEZvciB0byBtYWtlIHRoZXNlIGdsb2JhbGx5IGF2YWlsYWJsZVxuLy8gZm9yIGludGVyb3B0IHdpdGggcmVhZGFibGUtc3RyZWFtLCBpLmUuIHJlYWRhYmxlLXN0cmVhbVxuLy8gYW5kIG5vZGUgY29yZSBuZWVkcyB0byBiZSBhYmxlIHRvIHJlYWQvd3JpdGUgcHJpdmF0ZSBzdGF0ZVxuLy8gZnJvbSBlYWNoIG90aGVyIGZvciBwcm9wZXIgaW50ZXJvcGVyYWJpbGl0eS5cbmNvbnN0IGtJc0Rlc3Ryb3llZCA9IFN5bWJvbEZvcignbm9kZWpzLnN0cmVhbS5kZXN0cm95ZWQnKVxuY29uc3Qga0lzRXJyb3JlZCA9IFN5bWJvbEZvcignbm9kZWpzLnN0cmVhbS5lcnJvcmVkJylcbmNvbnN0IGtJc1JlYWRhYmxlID0gU3ltYm9sRm9yKCdub2RlanMuc3RyZWFtLnJlYWRhYmxlJylcbmNvbnN0IGtJc1dyaXRhYmxlID0gU3ltYm9sRm9yKCdub2RlanMuc3RyZWFtLndyaXRhYmxlJylcbmNvbnN0IGtJc0Rpc3R1cmJlZCA9IFN5bWJvbEZvcignbm9kZWpzLnN0cmVhbS5kaXN0dXJiZWQnKVxuY29uc3Qga0lzQ2xvc2VkUHJvbWlzZSA9IFN5bWJvbEZvcignbm9kZWpzLndlYnN0cmVhbS5pc0Nsb3NlZFByb21pc2UnKVxuY29uc3Qga0NvbnRyb2xsZXJFcnJvckZ1bmN0aW9uID0gU3ltYm9sRm9yKCdub2RlanMud2Vic3RyZWFtLmNvbnRyb2xsZXJFcnJvckZ1bmN0aW9uJylcbmZ1bmN0aW9uIGlzUmVhZGFibGVOb2RlU3RyZWFtKG9iaiwgc3RyaWN0ID0gZmFsc2UpIHtcbiAgdmFyIF9vYmokX3JlYWRhYmxlU3RhdGVcbiAgcmV0dXJuICEhKFxuICAgIChcbiAgICAgIG9iaiAmJlxuICAgICAgdHlwZW9mIG9iai5waXBlID09PSAnZnVuY3Rpb24nICYmXG4gICAgICB0eXBlb2Ygb2JqLm9uID09PSAnZnVuY3Rpb24nICYmXG4gICAgICAoIXN0cmljdCB8fCAodHlwZW9mIG9iai5wYXVzZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2Ygb2JqLnJlc3VtZSA9PT0gJ2Z1bmN0aW9uJykpICYmXG4gICAgICAoIW9iai5fd3JpdGFibGVTdGF0ZSB8fFxuICAgICAgICAoKF9vYmokX3JlYWRhYmxlU3RhdGUgPSBvYmouX3JlYWRhYmxlU3RhdGUpID09PSBudWxsIHx8IF9vYmokX3JlYWRhYmxlU3RhdGUgPT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgOiBfb2JqJF9yZWFkYWJsZVN0YXRlLnJlYWRhYmxlKSAhPT0gZmFsc2UpICYmXG4gICAgICAvLyBEdXBsZXhcbiAgICAgICghb2JqLl93cml0YWJsZVN0YXRlIHx8IG9iai5fcmVhZGFibGVTdGF0ZSlcbiAgICApIC8vIFdyaXRhYmxlIGhhcyAucGlwZS5cbiAgKVxufVxuXG5mdW5jdGlvbiBpc1dyaXRhYmxlTm9kZVN0cmVhbShvYmopIHtcbiAgdmFyIF9vYmokX3dyaXRhYmxlU3RhdGVcbiAgcmV0dXJuICEhKFxuICAgIChcbiAgICAgIG9iaiAmJlxuICAgICAgdHlwZW9mIG9iai53cml0ZSA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgdHlwZW9mIG9iai5vbiA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgKCFvYmouX3JlYWRhYmxlU3RhdGUgfHxcbiAgICAgICAgKChfb2JqJF93cml0YWJsZVN0YXRlID0gb2JqLl93cml0YWJsZVN0YXRlKSA9PT0gbnVsbCB8fCBfb2JqJF93cml0YWJsZVN0YXRlID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICAgIDogX29iaiRfd3JpdGFibGVTdGF0ZS53cml0YWJsZSkgIT09IGZhbHNlKVxuICAgICkgLy8gRHVwbGV4XG4gIClcbn1cblxuZnVuY3Rpb24gaXNEdXBsZXhOb2RlU3RyZWFtKG9iaikge1xuICByZXR1cm4gISEoXG4gICAgb2JqICYmXG4gICAgdHlwZW9mIG9iai5waXBlID09PSAnZnVuY3Rpb24nICYmXG4gICAgb2JqLl9yZWFkYWJsZVN0YXRlICYmXG4gICAgdHlwZW9mIG9iai5vbiA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBvYmoud3JpdGUgPT09ICdmdW5jdGlvbidcbiAgKVxufVxuZnVuY3Rpb24gaXNOb2RlU3RyZWFtKG9iaikge1xuICByZXR1cm4gKFxuICAgIG9iaiAmJlxuICAgIChvYmouX3JlYWRhYmxlU3RhdGUgfHxcbiAgICAgIG9iai5fd3JpdGFibGVTdGF0ZSB8fFxuICAgICAgKHR5cGVvZiBvYmoud3JpdGUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIG9iai5vbiA9PT0gJ2Z1bmN0aW9uJykgfHxcbiAgICAgICh0eXBlb2Ygb2JqLnBpcGUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIG9iai5vbiA9PT0gJ2Z1bmN0aW9uJykpXG4gIClcbn1cbmZ1bmN0aW9uIGlzUmVhZGFibGVTdHJlYW0ob2JqKSB7XG4gIHJldHVybiAhIShcbiAgICBvYmogJiZcbiAgICAhaXNOb2RlU3RyZWFtKG9iaikgJiZcbiAgICB0eXBlb2Ygb2JqLnBpcGVUaHJvdWdoID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIG9iai5nZXRSZWFkZXIgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2Ygb2JqLmNhbmNlbCA9PT0gJ2Z1bmN0aW9uJ1xuICApXG59XG5mdW5jdGlvbiBpc1dyaXRhYmxlU3RyZWFtKG9iaikge1xuICByZXR1cm4gISEob2JqICYmICFpc05vZGVTdHJlYW0ob2JqKSAmJiB0eXBlb2Ygb2JqLmdldFdyaXRlciA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2Ygb2JqLmFib3J0ID09PSAnZnVuY3Rpb24nKVxufVxuZnVuY3Rpb24gaXNUcmFuc2Zvcm1TdHJlYW0ob2JqKSB7XG4gIHJldHVybiAhIShvYmogJiYgIWlzTm9kZVN0cmVhbShvYmopICYmIHR5cGVvZiBvYmoucmVhZGFibGUgPT09ICdvYmplY3QnICYmIHR5cGVvZiBvYmoud3JpdGFibGUgPT09ICdvYmplY3QnKVxufVxuZnVuY3Rpb24gaXNXZWJTdHJlYW0ob2JqKSB7XG4gIHJldHVybiBpc1JlYWRhYmxlU3RyZWFtKG9iaikgfHwgaXNXcml0YWJsZVN0cmVhbShvYmopIHx8IGlzVHJhbnNmb3JtU3RyZWFtKG9iailcbn1cbmZ1bmN0aW9uIGlzSXRlcmFibGUob2JqLCBpc0FzeW5jKSB7XG4gIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIGZhbHNlXG4gIGlmIChpc0FzeW5jID09PSB0cnVlKSByZXR1cm4gdHlwZW9mIG9ialtTeW1ib2xBc3luY0l0ZXJhdG9yXSA9PT0gJ2Z1bmN0aW9uJ1xuICBpZiAoaXNBc3luYyA9PT0gZmFsc2UpIHJldHVybiB0eXBlb2Ygb2JqW1N5bWJvbEl0ZXJhdG9yXSA9PT0gJ2Z1bmN0aW9uJ1xuICByZXR1cm4gdHlwZW9mIG9ialtTeW1ib2xBc3luY0l0ZXJhdG9yXSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2Ygb2JqW1N5bWJvbEl0ZXJhdG9yXSA9PT0gJ2Z1bmN0aW9uJ1xufVxuZnVuY3Rpb24gaXNEZXN0cm95ZWQoc3RyZWFtKSB7XG4gIGlmICghaXNOb2RlU3RyZWFtKHN0cmVhbSkpIHJldHVybiBudWxsXG4gIGNvbnN0IHdTdGF0ZSA9IHN0cmVhbS5fd3JpdGFibGVTdGF0ZVxuICBjb25zdCByU3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGVcbiAgY29uc3Qgc3RhdGUgPSB3U3RhdGUgfHwgclN0YXRlXG4gIHJldHVybiAhIShzdHJlYW0uZGVzdHJveWVkIHx8IHN0cmVhbVtrSXNEZXN0cm95ZWRdIHx8IChzdGF0ZSAhPT0gbnVsbCAmJiBzdGF0ZSAhPT0gdW5kZWZpbmVkICYmIHN0YXRlLmRlc3Ryb3llZCkpXG59XG5cbi8vIEhhdmUgYmVlbiBlbmQoKTpkLlxuZnVuY3Rpb24gaXNXcml0YWJsZUVuZGVkKHN0cmVhbSkge1xuICBpZiAoIWlzV3JpdGFibGVOb2RlU3RyZWFtKHN0cmVhbSkpIHJldHVybiBudWxsXG4gIGlmIChzdHJlYW0ud3JpdGFibGVFbmRlZCA9PT0gdHJ1ZSkgcmV0dXJuIHRydWVcbiAgY29uc3Qgd1N0YXRlID0gc3RyZWFtLl93cml0YWJsZVN0YXRlXG4gIGlmICh3U3RhdGUgIT09IG51bGwgJiYgd1N0YXRlICE9PSB1bmRlZmluZWQgJiYgd1N0YXRlLmVycm9yZWQpIHJldHVybiBmYWxzZVxuICBpZiAodHlwZW9mICh3U3RhdGUgPT09IG51bGwgfHwgd1N0YXRlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB3U3RhdGUuZW5kZWQpICE9PSAnYm9vbGVhbicpIHJldHVybiBudWxsXG4gIHJldHVybiB3U3RhdGUuZW5kZWRcbn1cblxuLy8gSGF2ZSBlbWl0dGVkICdmaW5pc2gnLlxuZnVuY3Rpb24gaXNXcml0YWJsZUZpbmlzaGVkKHN0cmVhbSwgc3RyaWN0KSB7XG4gIGlmICghaXNXcml0YWJsZU5vZGVTdHJlYW0oc3RyZWFtKSkgcmV0dXJuIG51bGxcbiAgaWYgKHN0cmVhbS53cml0YWJsZUZpbmlzaGVkID09PSB0cnVlKSByZXR1cm4gdHJ1ZVxuICBjb25zdCB3U3RhdGUgPSBzdHJlYW0uX3dyaXRhYmxlU3RhdGVcbiAgaWYgKHdTdGF0ZSAhPT0gbnVsbCAmJiB3U3RhdGUgIT09IHVuZGVmaW5lZCAmJiB3U3RhdGUuZXJyb3JlZCkgcmV0dXJuIGZhbHNlXG4gIGlmICh0eXBlb2YgKHdTdGF0ZSA9PT0gbnVsbCB8fCB3U3RhdGUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHdTdGF0ZS5maW5pc2hlZCkgIT09ICdib29sZWFuJykgcmV0dXJuIG51bGxcbiAgcmV0dXJuICEhKHdTdGF0ZS5maW5pc2hlZCB8fCAoc3RyaWN0ID09PSBmYWxzZSAmJiB3U3RhdGUuZW5kZWQgPT09IHRydWUgJiYgd1N0YXRlLmxlbmd0aCA9PT0gMCkpXG59XG5cbi8vIEhhdmUgYmVlbiBwdXNoKG51bGwpOmQuXG5mdW5jdGlvbiBpc1JlYWRhYmxlRW5kZWQoc3RyZWFtKSB7XG4gIGlmICghaXNSZWFkYWJsZU5vZGVTdHJlYW0oc3RyZWFtKSkgcmV0dXJuIG51bGxcbiAgaWYgKHN0cmVhbS5yZWFkYWJsZUVuZGVkID09PSB0cnVlKSByZXR1cm4gdHJ1ZVxuICBjb25zdCByU3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGVcbiAgaWYgKCFyU3RhdGUgfHwgclN0YXRlLmVycm9yZWQpIHJldHVybiBmYWxzZVxuICBpZiAodHlwZW9mIChyU3RhdGUgPT09IG51bGwgfHwgclN0YXRlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiByU3RhdGUuZW5kZWQpICE9PSAnYm9vbGVhbicpIHJldHVybiBudWxsXG4gIHJldHVybiByU3RhdGUuZW5kZWRcbn1cblxuLy8gSGF2ZSBlbWl0dGVkICdlbmQnLlxuZnVuY3Rpb24gaXNSZWFkYWJsZUZpbmlzaGVkKHN0cmVhbSwgc3RyaWN0KSB7XG4gIGlmICghaXNSZWFkYWJsZU5vZGVTdHJlYW0oc3RyZWFtKSkgcmV0dXJuIG51bGxcbiAgY29uc3QgclN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlXG4gIGlmIChyU3RhdGUgIT09IG51bGwgJiYgclN0YXRlICE9PSB1bmRlZmluZWQgJiYgclN0YXRlLmVycm9yZWQpIHJldHVybiBmYWxzZVxuICBpZiAodHlwZW9mIChyU3RhdGUgPT09IG51bGwgfHwgclN0YXRlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiByU3RhdGUuZW5kRW1pdHRlZCkgIT09ICdib29sZWFuJykgcmV0dXJuIG51bGxcbiAgcmV0dXJuICEhKHJTdGF0ZS5lbmRFbWl0dGVkIHx8IChzdHJpY3QgPT09IGZhbHNlICYmIHJTdGF0ZS5lbmRlZCA9PT0gdHJ1ZSAmJiByU3RhdGUubGVuZ3RoID09PSAwKSlcbn1cbmZ1bmN0aW9uIGlzUmVhZGFibGUoc3RyZWFtKSB7XG4gIGlmIChzdHJlYW0gJiYgc3RyZWFtW2tJc1JlYWRhYmxlXSAhPSBudWxsKSByZXR1cm4gc3RyZWFtW2tJc1JlYWRhYmxlXVxuICBpZiAodHlwZW9mIChzdHJlYW0gPT09IG51bGwgfHwgc3RyZWFtID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBzdHJlYW0ucmVhZGFibGUpICE9PSAnYm9vbGVhbicpIHJldHVybiBudWxsXG4gIGlmIChpc0Rlc3Ryb3llZChzdHJlYW0pKSByZXR1cm4gZmFsc2VcbiAgcmV0dXJuIGlzUmVhZGFibGVOb2RlU3RyZWFtKHN0cmVhbSkgJiYgc3RyZWFtLnJlYWRhYmxlICYmICFpc1JlYWRhYmxlRmluaXNoZWQoc3RyZWFtKVxufVxuZnVuY3Rpb24gaXNXcml0YWJsZShzdHJlYW0pIHtcbiAgaWYgKHN0cmVhbSAmJiBzdHJlYW1ba0lzV3JpdGFibGVdICE9IG51bGwpIHJldHVybiBzdHJlYW1ba0lzV3JpdGFibGVdXG4gIGlmICh0eXBlb2YgKHN0cmVhbSA9PT0gbnVsbCB8fCBzdHJlYW0gPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHN0cmVhbS53cml0YWJsZSkgIT09ICdib29sZWFuJykgcmV0dXJuIG51bGxcbiAgaWYgKGlzRGVzdHJveWVkKHN0cmVhbSkpIHJldHVybiBmYWxzZVxuICByZXR1cm4gaXNXcml0YWJsZU5vZGVTdHJlYW0oc3RyZWFtKSAmJiBzdHJlYW0ud3JpdGFibGUgJiYgIWlzV3JpdGFibGVFbmRlZChzdHJlYW0pXG59XG5mdW5jdGlvbiBpc0ZpbmlzaGVkKHN0cmVhbSwgb3B0cykge1xuICBpZiAoIWlzTm9kZVN0cmVhbShzdHJlYW0pKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuICBpZiAoaXNEZXN0cm95ZWQoc3RyZWFtKSkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgaWYgKChvcHRzID09PSBudWxsIHx8IG9wdHMgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IG9wdHMucmVhZGFibGUpICE9PSBmYWxzZSAmJiBpc1JlYWRhYmxlKHN0cmVhbSkpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICBpZiAoKG9wdHMgPT09IG51bGwgfHwgb3B0cyA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogb3B0cy53cml0YWJsZSkgIT09IGZhbHNlICYmIGlzV3JpdGFibGUoc3RyZWFtKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIHJldHVybiB0cnVlXG59XG5mdW5jdGlvbiBpc1dyaXRhYmxlRXJyb3JlZChzdHJlYW0pIHtcbiAgdmFyIF9zdHJlYW0kX3dyaXRhYmxlU3RhdCwgX3N0cmVhbSRfd3JpdGFibGVTdGF0MlxuICBpZiAoIWlzTm9kZVN0cmVhbShzdHJlYW0pKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuICBpZiAoc3RyZWFtLndyaXRhYmxlRXJyb3JlZCkge1xuICAgIHJldHVybiBzdHJlYW0ud3JpdGFibGVFcnJvcmVkXG4gIH1cbiAgcmV0dXJuIChfc3RyZWFtJF93cml0YWJsZVN0YXQgPVxuICAgIChfc3RyZWFtJF93cml0YWJsZVN0YXQyID0gc3RyZWFtLl93cml0YWJsZVN0YXRlKSA9PT0gbnVsbCB8fCBfc3RyZWFtJF93cml0YWJsZVN0YXQyID09PSB1bmRlZmluZWRcbiAgICAgID8gdW5kZWZpbmVkXG4gICAgICA6IF9zdHJlYW0kX3dyaXRhYmxlU3RhdDIuZXJyb3JlZCkgIT09IG51bGwgJiYgX3N0cmVhbSRfd3JpdGFibGVTdGF0ICE9PSB1bmRlZmluZWRcbiAgICA/IF9zdHJlYW0kX3dyaXRhYmxlU3RhdFxuICAgIDogbnVsbFxufVxuZnVuY3Rpb24gaXNSZWFkYWJsZUVycm9yZWQoc3RyZWFtKSB7XG4gIHZhciBfc3RyZWFtJF9yZWFkYWJsZVN0YXQsIF9zdHJlYW0kX3JlYWRhYmxlU3RhdDJcbiAgaWYgKCFpc05vZGVTdHJlYW0oc3RyZWFtKSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgaWYgKHN0cmVhbS5yZWFkYWJsZUVycm9yZWQpIHtcbiAgICByZXR1cm4gc3RyZWFtLnJlYWRhYmxlRXJyb3JlZFxuICB9XG4gIHJldHVybiAoX3N0cmVhbSRfcmVhZGFibGVTdGF0ID1cbiAgICAoX3N0cmVhbSRfcmVhZGFibGVTdGF0MiA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZSkgPT09IG51bGwgfHwgX3N0cmVhbSRfcmVhZGFibGVTdGF0MiA9PT0gdW5kZWZpbmVkXG4gICAgICA/IHVuZGVmaW5lZFxuICAgICAgOiBfc3RyZWFtJF9yZWFkYWJsZVN0YXQyLmVycm9yZWQpICE9PSBudWxsICYmIF9zdHJlYW0kX3JlYWRhYmxlU3RhdCAhPT0gdW5kZWZpbmVkXG4gICAgPyBfc3RyZWFtJF9yZWFkYWJsZVN0YXRcbiAgICA6IG51bGxcbn1cbmZ1bmN0aW9uIGlzQ2xvc2VkKHN0cmVhbSkge1xuICBpZiAoIWlzTm9kZVN0cmVhbShzdHJlYW0pKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuICBpZiAodHlwZW9mIHN0cmVhbS5jbG9zZWQgPT09ICdib29sZWFuJykge1xuICAgIHJldHVybiBzdHJlYW0uY2xvc2VkXG4gIH1cbiAgY29uc3Qgd1N0YXRlID0gc3RyZWFtLl93cml0YWJsZVN0YXRlXG4gIGNvbnN0IHJTdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZVxuICBpZiAoXG4gICAgdHlwZW9mICh3U3RhdGUgPT09IG51bGwgfHwgd1N0YXRlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB3U3RhdGUuY2xvc2VkKSA9PT0gJ2Jvb2xlYW4nIHx8XG4gICAgdHlwZW9mIChyU3RhdGUgPT09IG51bGwgfHwgclN0YXRlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiByU3RhdGUuY2xvc2VkKSA9PT0gJ2Jvb2xlYW4nXG4gICkge1xuICAgIHJldHVybiAoXG4gICAgICAod1N0YXRlID09PSBudWxsIHx8IHdTdGF0ZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogd1N0YXRlLmNsb3NlZCkgfHxcbiAgICAgIChyU3RhdGUgPT09IG51bGwgfHwgclN0YXRlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiByU3RhdGUuY2xvc2VkKVxuICAgIClcbiAgfVxuICBpZiAodHlwZW9mIHN0cmVhbS5fY2xvc2VkID09PSAnYm9vbGVhbicgJiYgaXNPdXRnb2luZ01lc3NhZ2Uoc3RyZWFtKSkge1xuICAgIHJldHVybiBzdHJlYW0uX2Nsb3NlZFxuICB9XG4gIHJldHVybiBudWxsXG59XG5mdW5jdGlvbiBpc091dGdvaW5nTWVzc2FnZShzdHJlYW0pIHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2Ygc3RyZWFtLl9jbG9zZWQgPT09ICdib29sZWFuJyAmJlxuICAgIHR5cGVvZiBzdHJlYW0uX2RlZmF1bHRLZWVwQWxpdmUgPT09ICdib29sZWFuJyAmJlxuICAgIHR5cGVvZiBzdHJlYW0uX3JlbW92ZWRDb25uZWN0aW9uID09PSAnYm9vbGVhbicgJiZcbiAgICB0eXBlb2Ygc3RyZWFtLl9yZW1vdmVkQ29udExlbiA9PT0gJ2Jvb2xlYW4nXG4gIClcbn1cbmZ1bmN0aW9uIGlzU2VydmVyUmVzcG9uc2Uoc3RyZWFtKSB7XG4gIHJldHVybiB0eXBlb2Ygc3RyZWFtLl9zZW50MTAwID09PSAnYm9vbGVhbicgJiYgaXNPdXRnb2luZ01lc3NhZ2Uoc3RyZWFtKVxufVxuZnVuY3Rpb24gaXNTZXJ2ZXJSZXF1ZXN0KHN0cmVhbSkge1xuICB2YXIgX3N0cmVhbSRyZXFcbiAgcmV0dXJuIChcbiAgICB0eXBlb2Ygc3RyZWFtLl9jb25zdW1pbmcgPT09ICdib29sZWFuJyAmJlxuICAgIHR5cGVvZiBzdHJlYW0uX2R1bXBlZCA9PT0gJ2Jvb2xlYW4nICYmXG4gICAgKChfc3RyZWFtJHJlcSA9IHN0cmVhbS5yZXEpID09PSBudWxsIHx8IF9zdHJlYW0kcmVxID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBfc3RyZWFtJHJlcS51cGdyYWRlT3JDb25uZWN0KSA9PT1cbiAgICAgIHVuZGVmaW5lZFxuICApXG59XG5mdW5jdGlvbiB3aWxsRW1pdENsb3NlKHN0cmVhbSkge1xuICBpZiAoIWlzTm9kZVN0cmVhbShzdHJlYW0pKSByZXR1cm4gbnVsbFxuICBjb25zdCB3U3RhdGUgPSBzdHJlYW0uX3dyaXRhYmxlU3RhdGVcbiAgY29uc3QgclN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlXG4gIGNvbnN0IHN0YXRlID0gd1N0YXRlIHx8IHJTdGF0ZVxuICByZXR1cm4gKFxuICAgICghc3RhdGUgJiYgaXNTZXJ2ZXJSZXNwb25zZShzdHJlYW0pKSB8fCAhIShzdGF0ZSAmJiBzdGF0ZS5hdXRvRGVzdHJveSAmJiBzdGF0ZS5lbWl0Q2xvc2UgJiYgc3RhdGUuY2xvc2VkID09PSBmYWxzZSlcbiAgKVxufVxuZnVuY3Rpb24gaXNEaXN0dXJiZWQoc3RyZWFtKSB7XG4gIHZhciBfc3RyZWFtJGtJc0Rpc3R1cmJlZFxuICByZXR1cm4gISEoXG4gICAgc3RyZWFtICYmXG4gICAgKChfc3RyZWFtJGtJc0Rpc3R1cmJlZCA9IHN0cmVhbVtrSXNEaXN0dXJiZWRdKSAhPT0gbnVsbCAmJiBfc3RyZWFtJGtJc0Rpc3R1cmJlZCAhPT0gdW5kZWZpbmVkXG4gICAgICA/IF9zdHJlYW0ka0lzRGlzdHVyYmVkXG4gICAgICA6IHN0cmVhbS5yZWFkYWJsZURpZFJlYWQgfHwgc3RyZWFtLnJlYWRhYmxlQWJvcnRlZClcbiAgKVxufVxuZnVuY3Rpb24gaXNFcnJvcmVkKHN0cmVhbSkge1xuICB2YXIgX3JlZixcbiAgICBfcmVmMixcbiAgICBfcmVmMyxcbiAgICBfcmVmNCxcbiAgICBfcmVmNSxcbiAgICBfc3RyZWFtJGtJc0Vycm9yZWQsXG4gICAgX3N0cmVhbSRfcmVhZGFibGVTdGF0MyxcbiAgICBfc3RyZWFtJF93cml0YWJsZVN0YXQzLFxuICAgIF9zdHJlYW0kX3JlYWRhYmxlU3RhdDQsXG4gICAgX3N0cmVhbSRfd3JpdGFibGVTdGF0NFxuICByZXR1cm4gISEoXG4gICAgc3RyZWFtICYmXG4gICAgKChfcmVmID1cbiAgICAgIChfcmVmMiA9XG4gICAgICAgIChfcmVmMyA9XG4gICAgICAgICAgKF9yZWY0ID1cbiAgICAgICAgICAgIChfcmVmNSA9XG4gICAgICAgICAgICAgIChfc3RyZWFtJGtJc0Vycm9yZWQgPSBzdHJlYW1ba0lzRXJyb3JlZF0pICE9PSBudWxsICYmIF9zdHJlYW0ka0lzRXJyb3JlZCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyBfc3RyZWFtJGtJc0Vycm9yZWRcbiAgICAgICAgICAgICAgICA6IHN0cmVhbS5yZWFkYWJsZUVycm9yZWQpICE9PSBudWxsICYmIF9yZWY1ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgPyBfcmVmNVxuICAgICAgICAgICAgICA6IHN0cmVhbS53cml0YWJsZUVycm9yZWQpICE9PSBudWxsICYmIF9yZWY0ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gX3JlZjRcbiAgICAgICAgICAgIDogKF9zdHJlYW0kX3JlYWRhYmxlU3RhdDMgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGUpID09PSBudWxsIHx8IF9zdHJlYW0kX3JlYWRhYmxlU3RhdDMgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgICAgIDogX3N0cmVhbSRfcmVhZGFibGVTdGF0My5lcnJvckVtaXR0ZWQpICE9PSBudWxsICYmIF9yZWYzICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IF9yZWYzXG4gICAgICAgICAgOiAoX3N0cmVhbSRfd3JpdGFibGVTdGF0MyA9IHN0cmVhbS5fd3JpdGFibGVTdGF0ZSkgPT09IG51bGwgfHwgX3N0cmVhbSRfd3JpdGFibGVTdGF0MyA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgICA6IF9zdHJlYW0kX3dyaXRhYmxlU3RhdDMuZXJyb3JFbWl0dGVkKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gX3JlZjJcbiAgICAgICAgOiAoX3N0cmVhbSRfcmVhZGFibGVTdGF0NCA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZSkgPT09IG51bGwgfHwgX3N0cmVhbSRfcmVhZGFibGVTdGF0NCA9PT0gdW5kZWZpbmVkXG4gICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgIDogX3N0cmVhbSRfcmVhZGFibGVTdGF0NC5lcnJvcmVkKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB1bmRlZmluZWRcbiAgICAgID8gX3JlZlxuICAgICAgOiAoX3N0cmVhbSRfd3JpdGFibGVTdGF0NCA9IHN0cmVhbS5fd3JpdGFibGVTdGF0ZSkgPT09IG51bGwgfHwgX3N0cmVhbSRfd3JpdGFibGVTdGF0NCA9PT0gdW5kZWZpbmVkXG4gICAgICA/IHVuZGVmaW5lZFxuICAgICAgOiBfc3RyZWFtJF93cml0YWJsZVN0YXQ0LmVycm9yZWQpXG4gIClcbn1cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc0Rlc3Ryb3llZCxcbiAga0lzRGVzdHJveWVkLFxuICBpc0Rpc3R1cmJlZCxcbiAga0lzRGlzdHVyYmVkLFxuICBpc0Vycm9yZWQsXG4gIGtJc0Vycm9yZWQsXG4gIGlzUmVhZGFibGUsXG4gIGtJc1JlYWRhYmxlLFxuICBrSXNDbG9zZWRQcm9taXNlLFxuICBrQ29udHJvbGxlckVycm9yRnVuY3Rpb24sXG4gIGtJc1dyaXRhYmxlLFxuICBpc0Nsb3NlZCxcbiAgaXNEdXBsZXhOb2RlU3RyZWFtLFxuICBpc0ZpbmlzaGVkLFxuICBpc0l0ZXJhYmxlLFxuICBpc1JlYWRhYmxlTm9kZVN0cmVhbSxcbiAgaXNSZWFkYWJsZVN0cmVhbSxcbiAgaXNSZWFkYWJsZUVuZGVkLFxuICBpc1JlYWRhYmxlRmluaXNoZWQsXG4gIGlzUmVhZGFibGVFcnJvcmVkLFxuICBpc05vZGVTdHJlYW0sXG4gIGlzV2ViU3RyZWFtLFxuICBpc1dyaXRhYmxlLFxuICBpc1dyaXRhYmxlTm9kZVN0cmVhbSxcbiAgaXNXcml0YWJsZVN0cmVhbSxcbiAgaXNXcml0YWJsZUVuZGVkLFxuICBpc1dyaXRhYmxlRmluaXNoZWQsXG4gIGlzV3JpdGFibGVFcnJvcmVkLFxuICBpc1NlcnZlclJlcXVlc3QsXG4gIGlzU2VydmVyUmVzcG9uc2UsXG4gIHdpbGxFbWl0Q2xvc2UsXG4gIGlzVHJhbnNmb3JtU3RyZWFtXG59XG4iLAogICAgIi8qIHJlcGxhY2VtZW50IHN0YXJ0ICovXG5cbmNvbnN0IHByb2Nlc3MgPSByZXF1aXJlKCdwcm9jZXNzLycpXG5cbi8qIHJlcGxhY2VtZW50IGVuZCAqL1xuLy8gUG9ydGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL21hZmludG9zaC9lbmQtb2Ytc3RyZWFtIHdpdGhcbi8vIHBlcm1pc3Npb24gZnJvbSB0aGUgYXV0aG9yLCBNYXRoaWFzIEJ1dXMgKEBtYWZpbnRvc2gpLlxuXG47KCd1c2Ugc3RyaWN0JylcbmNvbnN0IHsgQWJvcnRFcnJvciwgY29kZXMgfSA9IHJlcXVpcmUoJy4uLy4uL291cnMvZXJyb3JzJylcbmNvbnN0IHsgRVJSX0lOVkFMSURfQVJHX1RZUEUsIEVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFIH0gPSBjb2Rlc1xuY29uc3QgeyBrRW1wdHlPYmplY3QsIG9uY2UgfSA9IHJlcXVpcmUoJy4uLy4uL291cnMvdXRpbCcpXG5jb25zdCB7IHZhbGlkYXRlQWJvcnRTaWduYWwsIHZhbGlkYXRlRnVuY3Rpb24sIHZhbGlkYXRlT2JqZWN0LCB2YWxpZGF0ZUJvb2xlYW4gfSA9IHJlcXVpcmUoJy4uL3ZhbGlkYXRvcnMnKVxuY29uc3QgeyBQcm9taXNlLCBQcm9taXNlUHJvdG90eXBlVGhlbiwgU3ltYm9sRGlzcG9zZSB9ID0gcmVxdWlyZSgnLi4vLi4vb3Vycy9wcmltb3JkaWFscycpXG5jb25zdCB7XG4gIGlzQ2xvc2VkLFxuICBpc1JlYWRhYmxlLFxuICBpc1JlYWRhYmxlTm9kZVN0cmVhbSxcbiAgaXNSZWFkYWJsZVN0cmVhbSxcbiAgaXNSZWFkYWJsZUZpbmlzaGVkLFxuICBpc1JlYWRhYmxlRXJyb3JlZCxcbiAgaXNXcml0YWJsZSxcbiAgaXNXcml0YWJsZU5vZGVTdHJlYW0sXG4gIGlzV3JpdGFibGVTdHJlYW0sXG4gIGlzV3JpdGFibGVGaW5pc2hlZCxcbiAgaXNXcml0YWJsZUVycm9yZWQsXG4gIGlzTm9kZVN0cmVhbSxcbiAgd2lsbEVtaXRDbG9zZTogX3dpbGxFbWl0Q2xvc2UsXG4gIGtJc0Nsb3NlZFByb21pc2Vcbn0gPSByZXF1aXJlKCcuL3V0aWxzJylcbmxldCBhZGRBYm9ydExpc3RlbmVyXG5mdW5jdGlvbiBpc1JlcXVlc3Qoc3RyZWFtKSB7XG4gIHJldHVybiBzdHJlYW0uc2V0SGVhZGVyICYmIHR5cGVvZiBzdHJlYW0uYWJvcnQgPT09ICdmdW5jdGlvbidcbn1cbmNvbnN0IG5vcCA9ICgpID0+IHt9XG5mdW5jdGlvbiBlb3Moc3RyZWFtLCBvcHRpb25zLCBjYWxsYmFjaykge1xuICB2YXIgX29wdGlvbnMkcmVhZGFibGUsIF9vcHRpb25zJHdyaXRhYmxlXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgY2FsbGJhY2sgPSBvcHRpb25zXG4gICAgb3B0aW9ucyA9IGtFbXB0eU9iamVjdFxuICB9IGVsc2UgaWYgKG9wdGlvbnMgPT0gbnVsbCkge1xuICAgIG9wdGlvbnMgPSBrRW1wdHlPYmplY3RcbiAgfSBlbHNlIHtcbiAgICB2YWxpZGF0ZU9iamVjdChvcHRpb25zLCAnb3B0aW9ucycpXG4gIH1cbiAgdmFsaWRhdGVGdW5jdGlvbihjYWxsYmFjaywgJ2NhbGxiYWNrJylcbiAgdmFsaWRhdGVBYm9ydFNpZ25hbChvcHRpb25zLnNpZ25hbCwgJ29wdGlvbnMuc2lnbmFsJylcbiAgY2FsbGJhY2sgPSBvbmNlKGNhbGxiYWNrKVxuICBpZiAoaXNSZWFkYWJsZVN0cmVhbShzdHJlYW0pIHx8IGlzV3JpdGFibGVTdHJlYW0oc3RyZWFtKSkge1xuICAgIHJldHVybiBlb3NXZWIoc3RyZWFtLCBvcHRpb25zLCBjYWxsYmFjaylcbiAgfVxuICBpZiAoIWlzTm9kZVN0cmVhbShzdHJlYW0pKSB7XG4gICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKCdzdHJlYW0nLCBbJ1JlYWRhYmxlU3RyZWFtJywgJ1dyaXRhYmxlU3RyZWFtJywgJ1N0cmVhbSddLCBzdHJlYW0pXG4gIH1cbiAgY29uc3QgcmVhZGFibGUgPVxuICAgIChfb3B0aW9ucyRyZWFkYWJsZSA9IG9wdGlvbnMucmVhZGFibGUpICE9PSBudWxsICYmIF9vcHRpb25zJHJlYWRhYmxlICE9PSB1bmRlZmluZWRcbiAgICAgID8gX29wdGlvbnMkcmVhZGFibGVcbiAgICAgIDogaXNSZWFkYWJsZU5vZGVTdHJlYW0oc3RyZWFtKVxuICBjb25zdCB3cml0YWJsZSA9XG4gICAgKF9vcHRpb25zJHdyaXRhYmxlID0gb3B0aW9ucy53cml0YWJsZSkgIT09IG51bGwgJiYgX29wdGlvbnMkd3JpdGFibGUgIT09IHVuZGVmaW5lZFxuICAgICAgPyBfb3B0aW9ucyR3cml0YWJsZVxuICAgICAgOiBpc1dyaXRhYmxlTm9kZVN0cmVhbShzdHJlYW0pXG4gIGNvbnN0IHdTdGF0ZSA9IHN0cmVhbS5fd3JpdGFibGVTdGF0ZVxuICBjb25zdCByU3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGVcbiAgY29uc3Qgb25sZWdhY3lmaW5pc2ggPSAoKSA9PiB7XG4gICAgaWYgKCFzdHJlYW0ud3JpdGFibGUpIHtcbiAgICAgIG9uZmluaXNoKClcbiAgICB9XG4gIH1cblxuICAvLyBUT0RPIChyb25hZyk6IEltcHJvdmUgc29mdCBkZXRlY3Rpb24gdG8gaW5jbHVkZSBjb3JlIG1vZHVsZXMgYW5kXG4gIC8vIGNvbW1vbiBlY29zeXN0ZW0gbW9kdWxlcyB0aGF0IGRvIHByb3Blcmx5IGVtaXQgJ2Nsb3NlJyBidXQgZmFpbFxuICAvLyB0aGlzIGdlbmVyaWMgY2hlY2suXG4gIGxldCB3aWxsRW1pdENsb3NlID1cbiAgICBfd2lsbEVtaXRDbG9zZShzdHJlYW0pICYmIGlzUmVhZGFibGVOb2RlU3RyZWFtKHN0cmVhbSkgPT09IHJlYWRhYmxlICYmIGlzV3JpdGFibGVOb2RlU3RyZWFtKHN0cmVhbSkgPT09IHdyaXRhYmxlXG4gIGxldCB3cml0YWJsZUZpbmlzaGVkID0gaXNXcml0YWJsZUZpbmlzaGVkKHN0cmVhbSwgZmFsc2UpXG4gIGNvbnN0IG9uZmluaXNoID0gKCkgPT4ge1xuICAgIHdyaXRhYmxlRmluaXNoZWQgPSB0cnVlXG4gICAgLy8gU3RyZWFtIHNob3VsZCBub3QgYmUgZGVzdHJveWVkIGhlcmUuIElmIGl0IGlzIHRoYXRcbiAgICAvLyBtZWFucyB0aGF0IHVzZXIgc3BhY2UgaXMgZG9pbmcgc29tZXRoaW5nIGRpZmZlcmVudGx5IGFuZFxuICAgIC8vIHdlIGNhbm5vdCB0cnVzdCB3aWxsRW1pdENsb3NlLlxuICAgIGlmIChzdHJlYW0uZGVzdHJveWVkKSB7XG4gICAgICB3aWxsRW1pdENsb3NlID0gZmFsc2VcbiAgICB9XG4gICAgaWYgKHdpbGxFbWl0Q2xvc2UgJiYgKCFzdHJlYW0ucmVhZGFibGUgfHwgcmVhZGFibGUpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKCFyZWFkYWJsZSB8fCByZWFkYWJsZUZpbmlzaGVkKSB7XG4gICAgICBjYWxsYmFjay5jYWxsKHN0cmVhbSlcbiAgICB9XG4gIH1cbiAgbGV0IHJlYWRhYmxlRmluaXNoZWQgPSBpc1JlYWRhYmxlRmluaXNoZWQoc3RyZWFtLCBmYWxzZSlcbiAgY29uc3Qgb25lbmQgPSAoKSA9PiB7XG4gICAgcmVhZGFibGVGaW5pc2hlZCA9IHRydWVcbiAgICAvLyBTdHJlYW0gc2hvdWxkIG5vdCBiZSBkZXN0cm95ZWQgaGVyZS4gSWYgaXQgaXMgdGhhdFxuICAgIC8vIG1lYW5zIHRoYXQgdXNlciBzcGFjZSBpcyBkb2luZyBzb21ldGhpbmcgZGlmZmVyZW50bHkgYW5kXG4gICAgLy8gd2UgY2Fubm90IHRydXN0IHdpbGxFbWl0Q2xvc2UuXG4gICAgaWYgKHN0cmVhbS5kZXN0cm95ZWQpIHtcbiAgICAgIHdpbGxFbWl0Q2xvc2UgPSBmYWxzZVxuICAgIH1cbiAgICBpZiAod2lsbEVtaXRDbG9zZSAmJiAoIXN0cmVhbS53cml0YWJsZSB8fCB3cml0YWJsZSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoIXdyaXRhYmxlIHx8IHdyaXRhYmxlRmluaXNoZWQpIHtcbiAgICAgIGNhbGxiYWNrLmNhbGwoc3RyZWFtKVxuICAgIH1cbiAgfVxuICBjb25zdCBvbmVycm9yID0gKGVycikgPT4ge1xuICAgIGNhbGxiYWNrLmNhbGwoc3RyZWFtLCBlcnIpXG4gIH1cbiAgbGV0IGNsb3NlZCA9IGlzQ2xvc2VkKHN0cmVhbSlcbiAgY29uc3Qgb25jbG9zZSA9ICgpID0+IHtcbiAgICBjbG9zZWQgPSB0cnVlXG4gICAgY29uc3QgZXJyb3JlZCA9IGlzV3JpdGFibGVFcnJvcmVkKHN0cmVhbSkgfHwgaXNSZWFkYWJsZUVycm9yZWQoc3RyZWFtKVxuICAgIGlmIChlcnJvcmVkICYmIHR5cGVvZiBlcnJvcmVkICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjay5jYWxsKHN0cmVhbSwgZXJyb3JlZClcbiAgICB9XG4gICAgaWYgKHJlYWRhYmxlICYmICFyZWFkYWJsZUZpbmlzaGVkICYmIGlzUmVhZGFibGVOb2RlU3RyZWFtKHN0cmVhbSwgdHJ1ZSkpIHtcbiAgICAgIGlmICghaXNSZWFkYWJsZUZpbmlzaGVkKHN0cmVhbSwgZmFsc2UpKSByZXR1cm4gY2FsbGJhY2suY2FsbChzdHJlYW0sIG5ldyBFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRSgpKVxuICAgIH1cbiAgICBpZiAod3JpdGFibGUgJiYgIXdyaXRhYmxlRmluaXNoZWQpIHtcbiAgICAgIGlmICghaXNXcml0YWJsZUZpbmlzaGVkKHN0cmVhbSwgZmFsc2UpKSByZXR1cm4gY2FsbGJhY2suY2FsbChzdHJlYW0sIG5ldyBFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRSgpKVxuICAgIH1cbiAgICBjYWxsYmFjay5jYWxsKHN0cmVhbSlcbiAgfVxuICBjb25zdCBvbmNsb3NlZCA9ICgpID0+IHtcbiAgICBjbG9zZWQgPSB0cnVlXG4gICAgY29uc3QgZXJyb3JlZCA9IGlzV3JpdGFibGVFcnJvcmVkKHN0cmVhbSkgfHwgaXNSZWFkYWJsZUVycm9yZWQoc3RyZWFtKVxuICAgIGlmIChlcnJvcmVkICYmIHR5cGVvZiBlcnJvcmVkICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjay5jYWxsKHN0cmVhbSwgZXJyb3JlZClcbiAgICB9XG4gICAgY2FsbGJhY2suY2FsbChzdHJlYW0pXG4gIH1cbiAgY29uc3Qgb25yZXF1ZXN0ID0gKCkgPT4ge1xuICAgIHN0cmVhbS5yZXEub24oJ2ZpbmlzaCcsIG9uZmluaXNoKVxuICB9XG4gIGlmIChpc1JlcXVlc3Qoc3RyZWFtKSkge1xuICAgIHN0cmVhbS5vbignY29tcGxldGUnLCBvbmZpbmlzaClcbiAgICBpZiAoIXdpbGxFbWl0Q2xvc2UpIHtcbiAgICAgIHN0cmVhbS5vbignYWJvcnQnLCBvbmNsb3NlKVxuICAgIH1cbiAgICBpZiAoc3RyZWFtLnJlcSkge1xuICAgICAgb25yZXF1ZXN0KClcbiAgICB9IGVsc2Uge1xuICAgICAgc3RyZWFtLm9uKCdyZXF1ZXN0Jywgb25yZXF1ZXN0KVxuICAgIH1cbiAgfSBlbHNlIGlmICh3cml0YWJsZSAmJiAhd1N0YXRlKSB7XG4gICAgLy8gbGVnYWN5IHN0cmVhbXNcbiAgICBzdHJlYW0ub24oJ2VuZCcsIG9ubGVnYWN5ZmluaXNoKVxuICAgIHN0cmVhbS5vbignY2xvc2UnLCBvbmxlZ2FjeWZpbmlzaClcbiAgfVxuXG4gIC8vIE5vdCBhbGwgc3RyZWFtcyB3aWxsIGVtaXQgJ2Nsb3NlJyBhZnRlciAnYWJvcnRlZCcuXG4gIGlmICghd2lsbEVtaXRDbG9zZSAmJiB0eXBlb2Ygc3RyZWFtLmFib3J0ZWQgPT09ICdib29sZWFuJykge1xuICAgIHN0cmVhbS5vbignYWJvcnRlZCcsIG9uY2xvc2UpXG4gIH1cbiAgc3RyZWFtLm9uKCdlbmQnLCBvbmVuZClcbiAgc3RyZWFtLm9uKCdmaW5pc2gnLCBvbmZpbmlzaClcbiAgaWYgKG9wdGlvbnMuZXJyb3IgIT09IGZhbHNlKSB7XG4gICAgc3RyZWFtLm9uKCdlcnJvcicsIG9uZXJyb3IpXG4gIH1cbiAgc3RyZWFtLm9uKCdjbG9zZScsIG9uY2xvc2UpXG4gIGlmIChjbG9zZWQpIHtcbiAgICBwcm9jZXNzLm5leHRUaWNrKG9uY2xvc2UpXG4gIH0gZWxzZSBpZiAoXG4gICAgKHdTdGF0ZSAhPT0gbnVsbCAmJiB3U3RhdGUgIT09IHVuZGVmaW5lZCAmJiB3U3RhdGUuZXJyb3JFbWl0dGVkKSB8fFxuICAgIChyU3RhdGUgIT09IG51bGwgJiYgclN0YXRlICE9PSB1bmRlZmluZWQgJiYgclN0YXRlLmVycm9yRW1pdHRlZClcbiAgKSB7XG4gICAgaWYgKCF3aWxsRW1pdENsb3NlKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKG9uY2xvc2VkKVxuICAgIH1cbiAgfSBlbHNlIGlmIChcbiAgICAhcmVhZGFibGUgJiZcbiAgICAoIXdpbGxFbWl0Q2xvc2UgfHwgaXNSZWFkYWJsZShzdHJlYW0pKSAmJlxuICAgICh3cml0YWJsZUZpbmlzaGVkIHx8IGlzV3JpdGFibGUoc3RyZWFtKSA9PT0gZmFsc2UpXG4gICkge1xuICAgIHByb2Nlc3MubmV4dFRpY2sob25jbG9zZWQpXG4gIH0gZWxzZSBpZiAoXG4gICAgIXdyaXRhYmxlICYmXG4gICAgKCF3aWxsRW1pdENsb3NlIHx8IGlzV3JpdGFibGUoc3RyZWFtKSkgJiZcbiAgICAocmVhZGFibGVGaW5pc2hlZCB8fCBpc1JlYWRhYmxlKHN0cmVhbSkgPT09IGZhbHNlKVxuICApIHtcbiAgICBwcm9jZXNzLm5leHRUaWNrKG9uY2xvc2VkKVxuICB9IGVsc2UgaWYgKHJTdGF0ZSAmJiBzdHJlYW0ucmVxICYmIHN0cmVhbS5hYm9ydGVkKSB7XG4gICAgcHJvY2Vzcy5uZXh0VGljayhvbmNsb3NlZClcbiAgfVxuICBjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xuICAgIGNhbGxiYWNrID0gbm9wXG4gICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdhYm9ydGVkJywgb25jbG9zZSlcbiAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoJ2NvbXBsZXRlJywgb25maW5pc2gpXG4gICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdhYm9ydCcsIG9uY2xvc2UpXG4gICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdyZXF1ZXN0Jywgb25yZXF1ZXN0KVxuICAgIGlmIChzdHJlYW0ucmVxKSBzdHJlYW0ucmVxLnJlbW92ZUxpc3RlbmVyKCdmaW5pc2gnLCBvbmZpbmlzaClcbiAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIG9ubGVnYWN5ZmluaXNoKVxuICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBvbmxlZ2FjeWZpbmlzaClcbiAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoJ2ZpbmlzaCcsIG9uZmluaXNoKVxuICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25lbmQpXG4gICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uZXJyb3IpXG4gICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uY2xvc2UpXG4gIH1cbiAgaWYgKG9wdGlvbnMuc2lnbmFsICYmICFjbG9zZWQpIHtcbiAgICBjb25zdCBhYm9ydCA9ICgpID0+IHtcbiAgICAgIC8vIEtlZXAgaXQgYmVjYXVzZSBjbGVhbnVwIHJlbW92ZXMgaXQuXG4gICAgICBjb25zdCBlbmRDYWxsYmFjayA9IGNhbGxiYWNrXG4gICAgICBjbGVhbnVwKClcbiAgICAgIGVuZENhbGxiYWNrLmNhbGwoXG4gICAgICAgIHN0cmVhbSxcbiAgICAgICAgbmV3IEFib3J0RXJyb3IodW5kZWZpbmVkLCB7XG4gICAgICAgICAgY2F1c2U6IG9wdGlvbnMuc2lnbmFsLnJlYXNvblxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH1cbiAgICBpZiAob3B0aW9ucy5zaWduYWwuYWJvcnRlZCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhhYm9ydClcbiAgICB9IGVsc2Uge1xuICAgICAgYWRkQWJvcnRMaXN0ZW5lciA9IGFkZEFib3J0TGlzdGVuZXIgfHwgcmVxdWlyZSgnLi4vLi4vb3Vycy91dGlsJykuYWRkQWJvcnRMaXN0ZW5lclxuICAgICAgY29uc3QgZGlzcG9zYWJsZSA9IGFkZEFib3J0TGlzdGVuZXIob3B0aW9ucy5zaWduYWwsIGFib3J0KVxuICAgICAgY29uc3Qgb3JpZ2luYWxDYWxsYmFjayA9IGNhbGxiYWNrXG4gICAgICBjYWxsYmFjayA9IG9uY2UoKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgZGlzcG9zYWJsZVtTeW1ib2xEaXNwb3NlXSgpXG4gICAgICAgIG9yaWdpbmFsQ2FsbGJhY2suYXBwbHkoc3RyZWFtLCBhcmdzKVxuICAgICAgfSlcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNsZWFudXBcbn1cbmZ1bmN0aW9uIGVvc1dlYihzdHJlYW0sIG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gIGxldCBpc0Fib3J0ZWQgPSBmYWxzZVxuICBsZXQgYWJvcnQgPSBub3BcbiAgaWYgKG9wdGlvbnMuc2lnbmFsKSB7XG4gICAgYWJvcnQgPSAoKSA9PiB7XG4gICAgICBpc0Fib3J0ZWQgPSB0cnVlXG4gICAgICBjYWxsYmFjay5jYWxsKFxuICAgICAgICBzdHJlYW0sXG4gICAgICAgIG5ldyBBYm9ydEVycm9yKHVuZGVmaW5lZCwge1xuICAgICAgICAgIGNhdXNlOiBvcHRpb25zLnNpZ25hbC5yZWFzb25cbiAgICAgICAgfSlcbiAgICAgIClcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soYWJvcnQpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFkZEFib3J0TGlzdGVuZXIgPSBhZGRBYm9ydExpc3RlbmVyIHx8IHJlcXVpcmUoJy4uLy4uL291cnMvdXRpbCcpLmFkZEFib3J0TGlzdGVuZXJcbiAgICAgIGNvbnN0IGRpc3Bvc2FibGUgPSBhZGRBYm9ydExpc3RlbmVyKG9wdGlvbnMuc2lnbmFsLCBhYm9ydClcbiAgICAgIGNvbnN0IG9yaWdpbmFsQ2FsbGJhY2sgPSBjYWxsYmFja1xuICAgICAgY2FsbGJhY2sgPSBvbmNlKCguLi5hcmdzKSA9PiB7XG4gICAgICAgIGRpc3Bvc2FibGVbU3ltYm9sRGlzcG9zZV0oKVxuICAgICAgICBvcmlnaW5hbENhbGxiYWNrLmFwcGx5KHN0cmVhbSwgYXJncylcbiAgICAgIH0pXG4gICAgfVxuICB9XG4gIGNvbnN0IHJlc29sdmVyRm4gPSAoLi4uYXJncykgPT4ge1xuICAgIGlmICghaXNBYm9ydGVkKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IGNhbGxiYWNrLmFwcGx5KHN0cmVhbSwgYXJncykpXG4gICAgfVxuICB9XG4gIFByb21pc2VQcm90b3R5cGVUaGVuKHN0cmVhbVtrSXNDbG9zZWRQcm9taXNlXS5wcm9taXNlLCByZXNvbHZlckZuLCByZXNvbHZlckZuKVxuICByZXR1cm4gbm9wXG59XG5mdW5jdGlvbiBmaW5pc2hlZChzdHJlYW0sIG9wdHMpIHtcbiAgdmFyIF9vcHRzXG4gIGxldCBhdXRvQ2xlYW51cCA9IGZhbHNlXG4gIGlmIChvcHRzID09PSBudWxsKSB7XG4gICAgb3B0cyA9IGtFbXB0eU9iamVjdFxuICB9XG4gIGlmICgoX29wdHMgPSBvcHRzKSAhPT0gbnVsbCAmJiBfb3B0cyAhPT0gdW5kZWZpbmVkICYmIF9vcHRzLmNsZWFudXApIHtcbiAgICB2YWxpZGF0ZUJvb2xlYW4ob3B0cy5jbGVhbnVwLCAnY2xlYW51cCcpXG4gICAgYXV0b0NsZWFudXAgPSBvcHRzLmNsZWFudXBcbiAgfVxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IGNsZWFudXAgPSBlb3Moc3RyZWFtLCBvcHRzLCAoZXJyKSA9PiB7XG4gICAgICBpZiAoYXV0b0NsZWFudXApIHtcbiAgICAgICAgY2xlYW51cCgpXG4gICAgICB9XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHJlamVjdChlcnIpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNvbHZlKClcbiAgICAgIH1cbiAgICB9KVxuICB9KVxufVxubW9kdWxlLmV4cG9ydHMgPSBlb3Ncbm1vZHVsZS5leHBvcnRzLmZpbmlzaGVkID0gZmluaXNoZWRcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbi8qIHJlcGxhY2VtZW50IHN0YXJ0ICovXG5cbmNvbnN0IHByb2Nlc3MgPSByZXF1aXJlKCdwcm9jZXNzLycpXG5cbi8qIHJlcGxhY2VtZW50IGVuZCAqL1xuXG5jb25zdCB7XG4gIGFnZ3JlZ2F0ZVR3b0Vycm9ycyxcbiAgY29kZXM6IHsgRVJSX01VTFRJUExFX0NBTExCQUNLIH0sXG4gIEFib3J0RXJyb3Jcbn0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL2Vycm9ycycpXG5jb25zdCB7IFN5bWJvbCB9ID0gcmVxdWlyZSgnLi4vLi4vb3Vycy9wcmltb3JkaWFscycpXG5jb25zdCB7IGtJc0Rlc3Ryb3llZCwgaXNEZXN0cm95ZWQsIGlzRmluaXNoZWQsIGlzU2VydmVyUmVxdWVzdCB9ID0gcmVxdWlyZSgnLi91dGlscycpXG5jb25zdCBrRGVzdHJveSA9IFN5bWJvbCgna0Rlc3Ryb3knKVxuY29uc3Qga0NvbnN0cnVjdCA9IFN5bWJvbCgna0NvbnN0cnVjdCcpXG5mdW5jdGlvbiBjaGVja0Vycm9yKGVyciwgdywgcikge1xuICBpZiAoZXJyKSB7XG4gICAgLy8gQXZvaWQgVjggbGVhaywgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvMzQxMDMjaXNzdWVjb21tZW50LTY1MjAwMjM2NFxuICAgIGVyci5zdGFjayAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC1leHByZXNzaW9uc1xuXG4gICAgaWYgKHcgJiYgIXcuZXJyb3JlZCkge1xuICAgICAgdy5lcnJvcmVkID0gZXJyXG4gICAgfVxuICAgIGlmIChyICYmICFyLmVycm9yZWQpIHtcbiAgICAgIHIuZXJyb3JlZCA9IGVyclxuICAgIH1cbiAgfVxufVxuXG4vLyBCYWNrd2FyZHMgY29tcGF0LiBjYigpIGlzIHVuZG9jdW1lbnRlZCBhbmQgdW51c2VkIGluIGNvcmUgYnV0XG4vLyB1bmZvcnR1bmF0ZWx5IG1pZ2h0IGJlIHVzZWQgYnkgbW9kdWxlcy5cbmZ1bmN0aW9uIGRlc3Ryb3koZXJyLCBjYikge1xuICBjb25zdCByID0gdGhpcy5fcmVhZGFibGVTdGF0ZVxuICBjb25zdCB3ID0gdGhpcy5fd3JpdGFibGVTdGF0ZVxuICAvLyBXaXRoIGR1cGxleCBzdHJlYW1zIHdlIHVzZSB0aGUgd3JpdGFibGUgc2lkZSBmb3Igc3RhdGUuXG4gIGNvbnN0IHMgPSB3IHx8IHJcbiAgaWYgKCh3ICE9PSBudWxsICYmIHcgIT09IHVuZGVmaW5lZCAmJiB3LmRlc3Ryb3llZCkgfHwgKHIgIT09IG51bGwgJiYgciAhPT0gdW5kZWZpbmVkICYmIHIuZGVzdHJveWVkKSkge1xuICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNiKClcbiAgICB9XG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8vIFdlIHNldCBkZXN0cm95ZWQgdG8gdHJ1ZSBiZWZvcmUgZmlyaW5nIGVycm9yIGNhbGxiYWNrcyBpbiBvcmRlclxuICAvLyB0byBtYWtlIGl0IHJlLWVudHJhbmNlIHNhZmUgaW4gY2FzZSBkZXN0cm95KCkgaXMgY2FsbGVkIHdpdGhpbiBjYWxsYmFja3NcbiAgY2hlY2tFcnJvcihlcnIsIHcsIHIpXG4gIGlmICh3KSB7XG4gICAgdy5kZXN0cm95ZWQgPSB0cnVlXG4gIH1cbiAgaWYgKHIpIHtcbiAgICByLmRlc3Ryb3llZCA9IHRydWVcbiAgfVxuXG4gIC8vIElmIHN0aWxsIGNvbnN0cnVjdGluZyB0aGVuIGRlZmVyIGNhbGxpbmcgX2Rlc3Ryb3kuXG4gIGlmICghcy5jb25zdHJ1Y3RlZCkge1xuICAgIHRoaXMub25jZShrRGVzdHJveSwgZnVuY3Rpb24gKGVyKSB7XG4gICAgICBfZGVzdHJveSh0aGlzLCBhZ2dyZWdhdGVUd29FcnJvcnMoZXIsIGVyciksIGNiKVxuICAgIH0pXG4gIH0gZWxzZSB7XG4gICAgX2Rlc3Ryb3kodGhpcywgZXJyLCBjYilcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuZnVuY3Rpb24gX2Rlc3Ryb3koc2VsZiwgZXJyLCBjYikge1xuICBsZXQgY2FsbGVkID0gZmFsc2VcbiAgZnVuY3Rpb24gb25EZXN0cm95KGVycikge1xuICAgIGlmIChjYWxsZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjYWxsZWQgPSB0cnVlXG4gICAgY29uc3QgciA9IHNlbGYuX3JlYWRhYmxlU3RhdGVcbiAgICBjb25zdCB3ID0gc2VsZi5fd3JpdGFibGVTdGF0ZVxuICAgIGNoZWNrRXJyb3IoZXJyLCB3LCByKVxuICAgIGlmICh3KSB7XG4gICAgICB3LmNsb3NlZCA9IHRydWVcbiAgICB9XG4gICAgaWYgKHIpIHtcbiAgICAgIHIuY2xvc2VkID0gdHJ1ZVxuICAgIH1cbiAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjYihlcnIpXG4gICAgfVxuICAgIGlmIChlcnIpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZW1pdEVycm9yQ2xvc2VOVCwgc2VsZiwgZXJyKVxuICAgIH0gZWxzZSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGVtaXRDbG9zZU5ULCBzZWxmKVxuICAgIH1cbiAgfVxuICB0cnkge1xuICAgIHNlbGYuX2Rlc3Ryb3koZXJyIHx8IG51bGwsIG9uRGVzdHJveSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgb25EZXN0cm95KGVycilcbiAgfVxufVxuZnVuY3Rpb24gZW1pdEVycm9yQ2xvc2VOVChzZWxmLCBlcnIpIHtcbiAgZW1pdEVycm9yTlQoc2VsZiwgZXJyKVxuICBlbWl0Q2xvc2VOVChzZWxmKVxufVxuZnVuY3Rpb24gZW1pdENsb3NlTlQoc2VsZikge1xuICBjb25zdCByID0gc2VsZi5fcmVhZGFibGVTdGF0ZVxuICBjb25zdCB3ID0gc2VsZi5fd3JpdGFibGVTdGF0ZVxuICBpZiAodykge1xuICAgIHcuY2xvc2VFbWl0dGVkID0gdHJ1ZVxuICB9XG4gIGlmIChyKSB7XG4gICAgci5jbG9zZUVtaXR0ZWQgPSB0cnVlXG4gIH1cbiAgaWYgKCh3ICE9PSBudWxsICYmIHcgIT09IHVuZGVmaW5lZCAmJiB3LmVtaXRDbG9zZSkgfHwgKHIgIT09IG51bGwgJiYgciAhPT0gdW5kZWZpbmVkICYmIHIuZW1pdENsb3NlKSkge1xuICAgIHNlbGYuZW1pdCgnY2xvc2UnKVxuICB9XG59XG5mdW5jdGlvbiBlbWl0RXJyb3JOVChzZWxmLCBlcnIpIHtcbiAgY29uc3QgciA9IHNlbGYuX3JlYWRhYmxlU3RhdGVcbiAgY29uc3QgdyA9IHNlbGYuX3dyaXRhYmxlU3RhdGVcbiAgaWYgKCh3ICE9PSBudWxsICYmIHcgIT09IHVuZGVmaW5lZCAmJiB3LmVycm9yRW1pdHRlZCkgfHwgKHIgIT09IG51bGwgJiYgciAhPT0gdW5kZWZpbmVkICYmIHIuZXJyb3JFbWl0dGVkKSkge1xuICAgIHJldHVyblxuICB9XG4gIGlmICh3KSB7XG4gICAgdy5lcnJvckVtaXR0ZWQgPSB0cnVlXG4gIH1cbiAgaWYgKHIpIHtcbiAgICByLmVycm9yRW1pdHRlZCA9IHRydWVcbiAgfVxuICBzZWxmLmVtaXQoJ2Vycm9yJywgZXJyKVxufVxuZnVuY3Rpb24gdW5kZXN0cm95KCkge1xuICBjb25zdCByID0gdGhpcy5fcmVhZGFibGVTdGF0ZVxuICBjb25zdCB3ID0gdGhpcy5fd3JpdGFibGVTdGF0ZVxuICBpZiAocikge1xuICAgIHIuY29uc3RydWN0ZWQgPSB0cnVlXG4gICAgci5jbG9zZWQgPSBmYWxzZVxuICAgIHIuY2xvc2VFbWl0dGVkID0gZmFsc2VcbiAgICByLmRlc3Ryb3llZCA9IGZhbHNlXG4gICAgci5lcnJvcmVkID0gbnVsbFxuICAgIHIuZXJyb3JFbWl0dGVkID0gZmFsc2VcbiAgICByLnJlYWRpbmcgPSBmYWxzZVxuICAgIHIuZW5kZWQgPSByLnJlYWRhYmxlID09PSBmYWxzZVxuICAgIHIuZW5kRW1pdHRlZCA9IHIucmVhZGFibGUgPT09IGZhbHNlXG4gIH1cbiAgaWYgKHcpIHtcbiAgICB3LmNvbnN0cnVjdGVkID0gdHJ1ZVxuICAgIHcuZGVzdHJveWVkID0gZmFsc2VcbiAgICB3LmNsb3NlZCA9IGZhbHNlXG4gICAgdy5jbG9zZUVtaXR0ZWQgPSBmYWxzZVxuICAgIHcuZXJyb3JlZCA9IG51bGxcbiAgICB3LmVycm9yRW1pdHRlZCA9IGZhbHNlXG4gICAgdy5maW5hbENhbGxlZCA9IGZhbHNlXG4gICAgdy5wcmVmaW5pc2hlZCA9IGZhbHNlXG4gICAgdy5lbmRlZCA9IHcud3JpdGFibGUgPT09IGZhbHNlXG4gICAgdy5lbmRpbmcgPSB3LndyaXRhYmxlID09PSBmYWxzZVxuICAgIHcuZmluaXNoZWQgPSB3LndyaXRhYmxlID09PSBmYWxzZVxuICB9XG59XG5mdW5jdGlvbiBlcnJvck9yRGVzdHJveShzdHJlYW0sIGVyciwgc3luYykge1xuICAvLyBXZSBoYXZlIHRlc3RzIHRoYXQgcmVseSBvbiBlcnJvcnMgYmVpbmcgZW1pdHRlZFxuICAvLyBpbiB0aGUgc2FtZSB0aWNrLCBzbyBjaGFuZ2luZyB0aGlzIGlzIHNlbXZlciBtYWpvci5cbiAgLy8gRm9yIG5vdyB3aGVuIHlvdSBvcHQtaW4gdG8gYXV0b0Rlc3Ryb3kgd2UgYWxsb3dcbiAgLy8gdGhlIGVycm9yIHRvIGJlIGVtaXR0ZWQgbmV4dFRpY2suIEluIGEgZnV0dXJlXG4gIC8vIHNlbXZlciBtYWpvciB1cGRhdGUgd2Ugc2hvdWxkIGNoYW5nZSB0aGUgZGVmYXVsdCB0byB0aGlzLlxuXG4gIGNvbnN0IHIgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGVcbiAgY29uc3QgdyA9IHN0cmVhbS5fd3JpdGFibGVTdGF0ZVxuICBpZiAoKHcgIT09IG51bGwgJiYgdyAhPT0gdW5kZWZpbmVkICYmIHcuZGVzdHJveWVkKSB8fCAociAhPT0gbnVsbCAmJiByICE9PSB1bmRlZmluZWQgJiYgci5kZXN0cm95ZWQpKSB7XG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuICBpZiAoKHIgIT09IG51bGwgJiYgciAhPT0gdW5kZWZpbmVkICYmIHIuYXV0b0Rlc3Ryb3kpIHx8ICh3ICE9PSBudWxsICYmIHcgIT09IHVuZGVmaW5lZCAmJiB3LmF1dG9EZXN0cm95KSlcbiAgICBzdHJlYW0uZGVzdHJveShlcnIpXG4gIGVsc2UgaWYgKGVycikge1xuICAgIC8vIEF2b2lkIFY4IGxlYWssIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9wdWxsLzM0MTAzI2lzc3VlY29tbWVudC02NTIwMDIzNjRcbiAgICBlcnIuc3RhY2sgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcblxuICAgIGlmICh3ICYmICF3LmVycm9yZWQpIHtcbiAgICAgIHcuZXJyb3JlZCA9IGVyclxuICAgIH1cbiAgICBpZiAociAmJiAhci5lcnJvcmVkKSB7XG4gICAgICByLmVycm9yZWQgPSBlcnJcbiAgICB9XG4gICAgaWYgKHN5bmMpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZW1pdEVycm9yTlQsIHN0cmVhbSwgZXJyKVxuICAgIH0gZWxzZSB7XG4gICAgICBlbWl0RXJyb3JOVChzdHJlYW0sIGVycilcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGNvbnN0cnVjdChzdHJlYW0sIGNiKSB7XG4gIGlmICh0eXBlb2Ygc3RyZWFtLl9jb25zdHJ1Y3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm5cbiAgfVxuICBjb25zdCByID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlXG4gIGNvbnN0IHcgPSBzdHJlYW0uX3dyaXRhYmxlU3RhdGVcbiAgaWYgKHIpIHtcbiAgICByLmNvbnN0cnVjdGVkID0gZmFsc2VcbiAgfVxuICBpZiAodykge1xuICAgIHcuY29uc3RydWN0ZWQgPSBmYWxzZVxuICB9XG4gIHN0cmVhbS5vbmNlKGtDb25zdHJ1Y3QsIGNiKVxuICBpZiAoc3RyZWFtLmxpc3RlbmVyQ291bnQoa0NvbnN0cnVjdCkgPiAxKSB7XG4gICAgLy8gRHVwbGV4XG4gICAgcmV0dXJuXG4gIH1cbiAgcHJvY2Vzcy5uZXh0VGljayhjb25zdHJ1Y3ROVCwgc3RyZWFtKVxufVxuZnVuY3Rpb24gY29uc3RydWN0TlQoc3RyZWFtKSB7XG4gIGxldCBjYWxsZWQgPSBmYWxzZVxuICBmdW5jdGlvbiBvbkNvbnN0cnVjdChlcnIpIHtcbiAgICBpZiAoY2FsbGVkKSB7XG4gICAgICBlcnJvck9yRGVzdHJveShzdHJlYW0sIGVyciAhPT0gbnVsbCAmJiBlcnIgIT09IHVuZGVmaW5lZCA/IGVyciA6IG5ldyBFUlJfTVVMVElQTEVfQ0FMTEJBQ0soKSlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjYWxsZWQgPSB0cnVlXG4gICAgY29uc3QgciA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZVxuICAgIGNvbnN0IHcgPSBzdHJlYW0uX3dyaXRhYmxlU3RhdGVcbiAgICBjb25zdCBzID0gdyB8fCByXG4gICAgaWYgKHIpIHtcbiAgICAgIHIuY29uc3RydWN0ZWQgPSB0cnVlXG4gICAgfVxuICAgIGlmICh3KSB7XG4gICAgICB3LmNvbnN0cnVjdGVkID0gdHJ1ZVxuICAgIH1cbiAgICBpZiAocy5kZXN0cm95ZWQpIHtcbiAgICAgIHN0cmVhbS5lbWl0KGtEZXN0cm95LCBlcnIpXG4gICAgfSBlbHNlIGlmIChlcnIpIHtcbiAgICAgIGVycm9yT3JEZXN0cm95KHN0cmVhbSwgZXJyLCB0cnVlKVxuICAgIH0gZWxzZSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGVtaXRDb25zdHJ1Y3ROVCwgc3RyZWFtKVxuICAgIH1cbiAgfVxuICB0cnkge1xuICAgIHN0cmVhbS5fY29uc3RydWN0KChlcnIpID0+IHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2sob25Db25zdHJ1Y3QsIGVycilcbiAgICB9KVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBwcm9jZXNzLm5leHRUaWNrKG9uQ29uc3RydWN0LCBlcnIpXG4gIH1cbn1cbmZ1bmN0aW9uIGVtaXRDb25zdHJ1Y3ROVChzdHJlYW0pIHtcbiAgc3RyZWFtLmVtaXQoa0NvbnN0cnVjdClcbn1cbmZ1bmN0aW9uIGlzUmVxdWVzdChzdHJlYW0pIHtcbiAgcmV0dXJuIChzdHJlYW0gPT09IG51bGwgfHwgc3RyZWFtID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBzdHJlYW0uc2V0SGVhZGVyKSAmJiB0eXBlb2Ygc3RyZWFtLmFib3J0ID09PSAnZnVuY3Rpb24nXG59XG5mdW5jdGlvbiBlbWl0Q2xvc2VMZWdhY3koc3RyZWFtKSB7XG4gIHN0cmVhbS5lbWl0KCdjbG9zZScpXG59XG5mdW5jdGlvbiBlbWl0RXJyb3JDbG9zZUxlZ2FjeShzdHJlYW0sIGVycikge1xuICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcnIpXG4gIHByb2Nlc3MubmV4dFRpY2soZW1pdENsb3NlTGVnYWN5LCBzdHJlYW0pXG59XG5cbi8vIE5vcm1hbGl6ZSBkZXN0cm95IGZvciBsZWdhY3kuXG5mdW5jdGlvbiBkZXN0cm95ZXIoc3RyZWFtLCBlcnIpIHtcbiAgaWYgKCFzdHJlYW0gfHwgaXNEZXN0cm95ZWQoc3RyZWFtKSkge1xuICAgIHJldHVyblxuICB9XG4gIGlmICghZXJyICYmICFpc0ZpbmlzaGVkKHN0cmVhbSkpIHtcbiAgICBlcnIgPSBuZXcgQWJvcnRFcnJvcigpXG4gIH1cblxuICAvLyBUT0RPOiBSZW1vdmUgaXNSZXF1ZXN0IGJyYW5jaGVzLlxuICBpZiAoaXNTZXJ2ZXJSZXF1ZXN0KHN0cmVhbSkpIHtcbiAgICBzdHJlYW0uc29ja2V0ID0gbnVsbFxuICAgIHN0cmVhbS5kZXN0cm95KGVycilcbiAgfSBlbHNlIGlmIChpc1JlcXVlc3Qoc3RyZWFtKSkge1xuICAgIHN0cmVhbS5hYm9ydCgpXG4gIH0gZWxzZSBpZiAoaXNSZXF1ZXN0KHN0cmVhbS5yZXEpKSB7XG4gICAgc3RyZWFtLnJlcS5hYm9ydCgpXG4gIH0gZWxzZSBpZiAodHlwZW9mIHN0cmVhbS5kZXN0cm95ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgc3RyZWFtLmRlc3Ryb3koZXJyKVxuICB9IGVsc2UgaWYgKHR5cGVvZiBzdHJlYW0uY2xvc2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBUT0RPOiBEb24ndCBsb3NlIGVycj9cbiAgICBzdHJlYW0uY2xvc2UoKVxuICB9IGVsc2UgaWYgKGVycikge1xuICAgIHByb2Nlc3MubmV4dFRpY2soZW1pdEVycm9yQ2xvc2VMZWdhY3ksIHN0cmVhbSwgZXJyKVxuICB9IGVsc2Uge1xuICAgIHByb2Nlc3MubmV4dFRpY2soZW1pdENsb3NlTGVnYWN5LCBzdHJlYW0pXG4gIH1cbiAgaWYgKCFzdHJlYW0uZGVzdHJveWVkKSB7XG4gICAgc3RyZWFtW2tJc0Rlc3Ryb3llZF0gPSB0cnVlXG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0ge1xuICBjb25zdHJ1Y3QsXG4gIGRlc3Ryb3llcixcbiAgZGVzdHJveSxcbiAgdW5kZXN0cm95LFxuICBlcnJvck9yRGVzdHJveVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBBcnJheUlzQXJyYXksIE9iamVjdFNldFByb3RvdHlwZU9mIH0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL3ByaW1vcmRpYWxzJylcbmNvbnN0IHsgRXZlbnRFbWl0dGVyOiBFRSB9ID0gcmVxdWlyZSgnZXZlbnRzJylcbmZ1bmN0aW9uIFN0cmVhbShvcHRzKSB7XG4gIEVFLmNhbGwodGhpcywgb3B0cylcbn1cbk9iamVjdFNldFByb3RvdHlwZU9mKFN0cmVhbS5wcm90b3R5cGUsIEVFLnByb3RvdHlwZSlcbk9iamVjdFNldFByb3RvdHlwZU9mKFN0cmVhbSwgRUUpXG5TdHJlYW0ucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbiAoZGVzdCwgb3B0aW9ucykge1xuICBjb25zdCBzb3VyY2UgPSB0aGlzXG4gIGZ1bmN0aW9uIG9uZGF0YShjaHVuaykge1xuICAgIGlmIChkZXN0LndyaXRhYmxlICYmIGRlc3Qud3JpdGUoY2h1bmspID09PSBmYWxzZSAmJiBzb3VyY2UucGF1c2UpIHtcbiAgICAgIHNvdXJjZS5wYXVzZSgpXG4gICAgfVxuICB9XG4gIHNvdXJjZS5vbignZGF0YScsIG9uZGF0YSlcbiAgZnVuY3Rpb24gb25kcmFpbigpIHtcbiAgICBpZiAoc291cmNlLnJlYWRhYmxlICYmIHNvdXJjZS5yZXN1bWUpIHtcbiAgICAgIHNvdXJjZS5yZXN1bWUoKVxuICAgIH1cbiAgfVxuICBkZXN0Lm9uKCdkcmFpbicsIG9uZHJhaW4pXG5cbiAgLy8gSWYgdGhlICdlbmQnIG9wdGlvbiBpcyBub3Qgc3VwcGxpZWQsIGRlc3QuZW5kKCkgd2lsbCBiZSBjYWxsZWQgd2hlblxuICAvLyBzb3VyY2UgZ2V0cyB0aGUgJ2VuZCcgb3IgJ2Nsb3NlJyBldmVudHMuICBPbmx5IGRlc3QuZW5kKCkgb25jZS5cbiAgaWYgKCFkZXN0Ll9pc1N0ZGlvICYmICghb3B0aW9ucyB8fCBvcHRpb25zLmVuZCAhPT0gZmFsc2UpKSB7XG4gICAgc291cmNlLm9uKCdlbmQnLCBvbmVuZClcbiAgICBzb3VyY2Uub24oJ2Nsb3NlJywgb25jbG9zZSlcbiAgfVxuICBsZXQgZGlkT25FbmQgPSBmYWxzZVxuICBmdW5jdGlvbiBvbmVuZCgpIHtcbiAgICBpZiAoZGlkT25FbmQpIHJldHVyblxuICAgIGRpZE9uRW5kID0gdHJ1ZVxuICAgIGRlc3QuZW5kKClcbiAgfVxuICBmdW5jdGlvbiBvbmNsb3NlKCkge1xuICAgIGlmIChkaWRPbkVuZCkgcmV0dXJuXG4gICAgZGlkT25FbmQgPSB0cnVlXG4gICAgaWYgKHR5cGVvZiBkZXN0LmRlc3Ryb3kgPT09ICdmdW5jdGlvbicpIGRlc3QuZGVzdHJveSgpXG4gIH1cblxuICAvLyBEb24ndCBsZWF2ZSBkYW5nbGluZyBwaXBlcyB3aGVuIHRoZXJlIGFyZSBlcnJvcnMuXG4gIGZ1bmN0aW9uIG9uZXJyb3IoZXIpIHtcbiAgICBjbGVhbnVwKClcbiAgICBpZiAoRUUubGlzdGVuZXJDb3VudCh0aGlzLCAnZXJyb3InKSA9PT0gMCkge1xuICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIGVyKVxuICAgIH1cbiAgfVxuICBwcmVwZW5kTGlzdGVuZXIoc291cmNlLCAnZXJyb3InLCBvbmVycm9yKVxuICBwcmVwZW5kTGlzdGVuZXIoZGVzdCwgJ2Vycm9yJywgb25lcnJvcilcblxuICAvLyBSZW1vdmUgYWxsIHRoZSBldmVudCBsaXN0ZW5lcnMgdGhhdCB3ZXJlIGFkZGVkLlxuICBmdW5jdGlvbiBjbGVhbnVwKCkge1xuICAgIHNvdXJjZS5yZW1vdmVMaXN0ZW5lcignZGF0YScsIG9uZGF0YSlcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdkcmFpbicsIG9uZHJhaW4pXG4gICAgc291cmNlLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBvbmVuZClcbiAgICBzb3VyY2UucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgb25jbG9zZSlcbiAgICBzb3VyY2UucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgb25lcnJvcilcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uZXJyb3IpXG4gICAgc291cmNlLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBjbGVhbnVwKVxuICAgIHNvdXJjZS5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBjbGVhbnVwKVxuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgY2xlYW51cClcbiAgfVxuICBzb3VyY2Uub24oJ2VuZCcsIGNsZWFudXApXG4gIHNvdXJjZS5vbignY2xvc2UnLCBjbGVhbnVwKVxuICBkZXN0Lm9uKCdjbG9zZScsIGNsZWFudXApXG4gIGRlc3QuZW1pdCgncGlwZScsIHNvdXJjZSlcblxuICAvLyBBbGxvdyBmb3IgdW5peC1saWtlIHVzYWdlOiBBLnBpcGUoQikucGlwZShDKVxuICByZXR1cm4gZGVzdFxufVxuZnVuY3Rpb24gcHJlcGVuZExpc3RlbmVyKGVtaXR0ZXIsIGV2ZW50LCBmbikge1xuICAvLyBTYWRseSB0aGlzIGlzIG5vdCBjYWNoZWFibGUgYXMgc29tZSBsaWJyYXJpZXMgYnVuZGxlIHRoZWlyIG93blxuICAvLyBldmVudCBlbWl0dGVyIGltcGxlbWVudGF0aW9uIHdpdGggdGhlbS5cbiAgaWYgKHR5cGVvZiBlbWl0dGVyLnByZXBlbmRMaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIGVtaXR0ZXIucHJlcGVuZExpc3RlbmVyKGV2ZW50LCBmbilcblxuICAvLyBUaGlzIGlzIGEgaGFjayB0byBtYWtlIHN1cmUgdGhhdCBvdXIgZXJyb3IgaGFuZGxlciBpcyBhdHRhY2hlZCBiZWZvcmUgYW55XG4gIC8vIHVzZXJsYW5kIG9uZXMuICBORVZFUiBETyBUSElTLiBUaGlzIGlzIGhlcmUgb25seSBiZWNhdXNlIHRoaXMgY29kZSBuZWVkc1xuICAvLyB0byBjb250aW51ZSB0byB3b3JrIHdpdGggb2xkZXIgdmVyc2lvbnMgb2YgTm9kZS5qcyB0aGF0IGRvIG5vdCBpbmNsdWRlXG4gIC8vIHRoZSBwcmVwZW5kTGlzdGVuZXIoKSBtZXRob2QuIFRoZSBnb2FsIGlzIHRvIGV2ZW50dWFsbHkgcmVtb3ZlIHRoaXMgaGFjay5cbiAgaWYgKCFlbWl0dGVyLl9ldmVudHMgfHwgIWVtaXR0ZXIuX2V2ZW50c1tldmVudF0pIGVtaXR0ZXIub24oZXZlbnQsIGZuKVxuICBlbHNlIGlmIChBcnJheUlzQXJyYXkoZW1pdHRlci5fZXZlbnRzW2V2ZW50XSkpIGVtaXR0ZXIuX2V2ZW50c1tldmVudF0udW5zaGlmdChmbilcbiAgZWxzZSBlbWl0dGVyLl9ldmVudHNbZXZlbnRdID0gW2ZuLCBlbWl0dGVyLl9ldmVudHNbZXZlbnRdXVxufVxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFN0cmVhbSxcbiAgcHJlcGVuZExpc3RlbmVyXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IFN5bWJvbERpc3Bvc2UgfSA9IHJlcXVpcmUoJy4uLy4uL291cnMvcHJpbW9yZGlhbHMnKVxuY29uc3QgeyBBYm9ydEVycm9yLCBjb2RlcyB9ID0gcmVxdWlyZSgnLi4vLi4vb3Vycy9lcnJvcnMnKVxuY29uc3QgeyBpc05vZGVTdHJlYW0sIGlzV2ViU3RyZWFtLCBrQ29udHJvbGxlckVycm9yRnVuY3Rpb24gfSA9IHJlcXVpcmUoJy4vdXRpbHMnKVxuY29uc3QgZW9zID0gcmVxdWlyZSgnLi9lbmQtb2Ytc3RyZWFtJylcbmNvbnN0IHsgRVJSX0lOVkFMSURfQVJHX1RZUEUgfSA9IGNvZGVzXG5sZXQgYWRkQWJvcnRMaXN0ZW5lclxuXG4vLyBUaGlzIG1ldGhvZCBpcyBpbmxpbmVkIGhlcmUgZm9yIHJlYWRhYmxlLXN0cmVhbVxuLy8gSXQgYWxzbyBkb2VzIG5vdCBhbGxvdyBmb3Igc2lnbmFsIHRvIG5vdCBleGlzdCBvbiB0aGUgc3RyZWFtXG4vLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvcHVsbC8zNjA2MSNkaXNjdXNzaW9uX3I1MzM3MTgwMjlcbmNvbnN0IHZhbGlkYXRlQWJvcnRTaWduYWwgPSAoc2lnbmFsLCBuYW1lKSA9PiB7XG4gIGlmICh0eXBlb2Ygc2lnbmFsICE9PSAnb2JqZWN0JyB8fCAhKCdhYm9ydGVkJyBpbiBzaWduYWwpKSB7XG4gICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKG5hbWUsICdBYm9ydFNpZ25hbCcsIHNpZ25hbClcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMuYWRkQWJvcnRTaWduYWwgPSBmdW5jdGlvbiBhZGRBYm9ydFNpZ25hbChzaWduYWwsIHN0cmVhbSkge1xuICB2YWxpZGF0ZUFib3J0U2lnbmFsKHNpZ25hbCwgJ3NpZ25hbCcpXG4gIGlmICghaXNOb2RlU3RyZWFtKHN0cmVhbSkgJiYgIWlzV2ViU3RyZWFtKHN0cmVhbSkpIHtcbiAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoJ3N0cmVhbScsIFsnUmVhZGFibGVTdHJlYW0nLCAnV3JpdGFibGVTdHJlYW0nLCAnU3RyZWFtJ10sIHN0cmVhbSlcbiAgfVxuICByZXR1cm4gbW9kdWxlLmV4cG9ydHMuYWRkQWJvcnRTaWduYWxOb1ZhbGlkYXRlKHNpZ25hbCwgc3RyZWFtKVxufVxubW9kdWxlLmV4cG9ydHMuYWRkQWJvcnRTaWduYWxOb1ZhbGlkYXRlID0gZnVuY3Rpb24gKHNpZ25hbCwgc3RyZWFtKSB7XG4gIGlmICh0eXBlb2Ygc2lnbmFsICE9PSAnb2JqZWN0JyB8fCAhKCdhYm9ydGVkJyBpbiBzaWduYWwpKSB7XG4gICAgcmV0dXJuIHN0cmVhbVxuICB9XG4gIGNvbnN0IG9uQWJvcnQgPSBpc05vZGVTdHJlYW0oc3RyZWFtKVxuICAgID8gKCkgPT4ge1xuICAgICAgICBzdHJlYW0uZGVzdHJveShcbiAgICAgICAgICBuZXcgQWJvcnRFcnJvcih1bmRlZmluZWQsIHtcbiAgICAgICAgICAgIGNhdXNlOiBzaWduYWwucmVhc29uXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgfVxuICAgIDogKCkgPT4ge1xuICAgICAgICBzdHJlYW1ba0NvbnRyb2xsZXJFcnJvckZ1bmN0aW9uXShcbiAgICAgICAgICBuZXcgQWJvcnRFcnJvcih1bmRlZmluZWQsIHtcbiAgICAgICAgICAgIGNhdXNlOiBzaWduYWwucmVhc29uXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgfVxuICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcbiAgICBvbkFib3J0KClcbiAgfSBlbHNlIHtcbiAgICBhZGRBYm9ydExpc3RlbmVyID0gYWRkQWJvcnRMaXN0ZW5lciB8fCByZXF1aXJlKCcuLi8uLi9vdXJzL3V0aWwnKS5hZGRBYm9ydExpc3RlbmVyXG4gICAgY29uc3QgZGlzcG9zYWJsZSA9IGFkZEFib3J0TGlzdGVuZXIoc2lnbmFsLCBvbkFib3J0KVxuICAgIGVvcyhzdHJlYW0sIGRpc3Bvc2FibGVbU3ltYm9sRGlzcG9zZV0pXG4gIH1cbiAgcmV0dXJuIHN0cmVhbVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBTdHJpbmdQcm90b3R5cGVTbGljZSwgU3ltYm9sSXRlcmF0b3IsIFR5cGVkQXJyYXlQcm90b3R5cGVTZXQsIFVpbnQ4QXJyYXkgfSA9IHJlcXVpcmUoJy4uLy4uL291cnMvcHJpbW9yZGlhbHMnKVxuY29uc3QgeyBCdWZmZXIgfSA9IHJlcXVpcmUoJ2J1ZmZlcicpXG5jb25zdCB7IGluc3BlY3QgfSA9IHJlcXVpcmUoJy4uLy4uL291cnMvdXRpbCcpXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIEJ1ZmZlckxpc3Qge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmhlYWQgPSBudWxsXG4gICAgdGhpcy50YWlsID0gbnVsbFxuICAgIHRoaXMubGVuZ3RoID0gMFxuICB9XG4gIHB1c2godikge1xuICAgIGNvbnN0IGVudHJ5ID0ge1xuICAgICAgZGF0YTogdixcbiAgICAgIG5leHQ6IG51bGxcbiAgICB9XG4gICAgaWYgKHRoaXMubGVuZ3RoID4gMCkgdGhpcy50YWlsLm5leHQgPSBlbnRyeVxuICAgIGVsc2UgdGhpcy5oZWFkID0gZW50cnlcbiAgICB0aGlzLnRhaWwgPSBlbnRyeVxuICAgICsrdGhpcy5sZW5ndGhcbiAgfVxuICB1bnNoaWZ0KHYpIHtcbiAgICBjb25zdCBlbnRyeSA9IHtcbiAgICAgIGRhdGE6IHYsXG4gICAgICBuZXh0OiB0aGlzLmhlYWRcbiAgICB9XG4gICAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSB0aGlzLnRhaWwgPSBlbnRyeVxuICAgIHRoaXMuaGVhZCA9IGVudHJ5XG4gICAgKyt0aGlzLmxlbmd0aFxuICB9XG4gIHNoaWZ0KCkge1xuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuXG4gICAgY29uc3QgcmV0ID0gdGhpcy5oZWFkLmRhdGFcbiAgICBpZiAodGhpcy5sZW5ndGggPT09IDEpIHRoaXMuaGVhZCA9IHRoaXMudGFpbCA9IG51bGxcbiAgICBlbHNlIHRoaXMuaGVhZCA9IHRoaXMuaGVhZC5uZXh0XG4gICAgLS10aGlzLmxlbmd0aFxuICAgIHJldHVybiByZXRcbiAgfVxuICBjbGVhcigpIHtcbiAgICB0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBudWxsXG4gICAgdGhpcy5sZW5ndGggPSAwXG4gIH1cbiAgam9pbihzKSB7XG4gICAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSByZXR1cm4gJydcbiAgICBsZXQgcCA9IHRoaXMuaGVhZFxuICAgIGxldCByZXQgPSAnJyArIHAuZGF0YVxuICAgIHdoaWxlICgocCA9IHAubmV4dCkgIT09IG51bGwpIHJldCArPSBzICsgcC5kYXRhXG4gICAgcmV0dXJuIHJldFxuICB9XG4gIGNvbmNhdChuKSB7XG4gICAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSByZXR1cm4gQnVmZmVyLmFsbG9jKDApXG4gICAgY29uc3QgcmV0ID0gQnVmZmVyLmFsbG9jVW5zYWZlKG4gPj4+IDApXG4gICAgbGV0IHAgPSB0aGlzLmhlYWRcbiAgICBsZXQgaSA9IDBcbiAgICB3aGlsZSAocCkge1xuICAgICAgVHlwZWRBcnJheVByb3RvdHlwZVNldChyZXQsIHAuZGF0YSwgaSlcbiAgICAgIGkgKz0gcC5kYXRhLmxlbmd0aFxuICAgICAgcCA9IHAubmV4dFxuICAgIH1cbiAgICByZXR1cm4gcmV0XG4gIH1cblxuICAvLyBDb25zdW1lcyBhIHNwZWNpZmllZCBhbW91bnQgb2YgYnl0ZXMgb3IgY2hhcmFjdGVycyBmcm9tIHRoZSBidWZmZXJlZCBkYXRhLlxuICBjb25zdW1lKG4sIGhhc1N0cmluZ3MpIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5oZWFkLmRhdGFcbiAgICBpZiAobiA8IGRhdGEubGVuZ3RoKSB7XG4gICAgICAvLyBgc2xpY2VgIGlzIHRoZSBzYW1lIGZvciBidWZmZXJzIGFuZCBzdHJpbmdzLlxuICAgICAgY29uc3Qgc2xpY2UgPSBkYXRhLnNsaWNlKDAsIG4pXG4gICAgICB0aGlzLmhlYWQuZGF0YSA9IGRhdGEuc2xpY2UobilcbiAgICAgIHJldHVybiBzbGljZVxuICAgIH1cbiAgICBpZiAobiA9PT0gZGF0YS5sZW5ndGgpIHtcbiAgICAgIC8vIEZpcnN0IGNodW5rIGlzIGEgcGVyZmVjdCBtYXRjaC5cbiAgICAgIHJldHVybiB0aGlzLnNoaWZ0KClcbiAgICB9XG4gICAgLy8gUmVzdWx0IHNwYW5zIG1vcmUgdGhhbiBvbmUgYnVmZmVyLlxuICAgIHJldHVybiBoYXNTdHJpbmdzID8gdGhpcy5fZ2V0U3RyaW5nKG4pIDogdGhpcy5fZ2V0QnVmZmVyKG4pXG4gIH1cbiAgZmlyc3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGVhZC5kYXRhXG4gIH1cbiAgKltTeW1ib2xJdGVyYXRvcl0oKSB7XG4gICAgZm9yIChsZXQgcCA9IHRoaXMuaGVhZDsgcDsgcCA9IHAubmV4dCkge1xuICAgICAgeWllbGQgcC5kYXRhXG4gICAgfVxuICB9XG5cbiAgLy8gQ29uc3VtZXMgYSBzcGVjaWZpZWQgYW1vdW50IG9mIGNoYXJhY3RlcnMgZnJvbSB0aGUgYnVmZmVyZWQgZGF0YS5cbiAgX2dldFN0cmluZyhuKSB7XG4gICAgbGV0IHJldCA9ICcnXG4gICAgbGV0IHAgPSB0aGlzLmhlYWRcbiAgICBsZXQgYyA9IDBcbiAgICBkbyB7XG4gICAgICBjb25zdCBzdHIgPSBwLmRhdGFcbiAgICAgIGlmIChuID4gc3RyLmxlbmd0aCkge1xuICAgICAgICByZXQgKz0gc3RyXG4gICAgICAgIG4gLT0gc3RyLmxlbmd0aFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG4gPT09IHN0ci5sZW5ndGgpIHtcbiAgICAgICAgICByZXQgKz0gc3RyXG4gICAgICAgICAgKytjXG4gICAgICAgICAgaWYgKHAubmV4dCkgdGhpcy5oZWFkID0gcC5uZXh0XG4gICAgICAgICAgZWxzZSB0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBudWxsXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0ICs9IFN0cmluZ1Byb3RvdHlwZVNsaWNlKHN0ciwgMCwgbilcbiAgICAgICAgICB0aGlzLmhlYWQgPSBwXG4gICAgICAgICAgcC5kYXRhID0gU3RyaW5nUHJvdG90eXBlU2xpY2Uoc3RyLCBuKVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICArK2NcbiAgICB9IHdoaWxlICgocCA9IHAubmV4dCkgIT09IG51bGwpXG4gICAgdGhpcy5sZW5ndGggLT0gY1xuICAgIHJldHVybiByZXRcbiAgfVxuXG4gIC8vIENvbnN1bWVzIGEgc3BlY2lmaWVkIGFtb3VudCBvZiBieXRlcyBmcm9tIHRoZSBidWZmZXJlZCBkYXRhLlxuICBfZ2V0QnVmZmVyKG4pIHtcbiAgICBjb25zdCByZXQgPSBCdWZmZXIuYWxsb2NVbnNhZmUobilcbiAgICBjb25zdCByZXRMZW4gPSBuXG4gICAgbGV0IHAgPSB0aGlzLmhlYWRcbiAgICBsZXQgYyA9IDBcbiAgICBkbyB7XG4gICAgICBjb25zdCBidWYgPSBwLmRhdGFcbiAgICAgIGlmIChuID4gYnVmLmxlbmd0aCkge1xuICAgICAgICBUeXBlZEFycmF5UHJvdG90eXBlU2V0KHJldCwgYnVmLCByZXRMZW4gLSBuKVxuICAgICAgICBuIC09IGJ1Zi5sZW5ndGhcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChuID09PSBidWYubGVuZ3RoKSB7XG4gICAgICAgICAgVHlwZWRBcnJheVByb3RvdHlwZVNldChyZXQsIGJ1ZiwgcmV0TGVuIC0gbilcbiAgICAgICAgICArK2NcbiAgICAgICAgICBpZiAocC5uZXh0KSB0aGlzLmhlYWQgPSBwLm5leHRcbiAgICAgICAgICBlbHNlIHRoaXMuaGVhZCA9IHRoaXMudGFpbCA9IG51bGxcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBUeXBlZEFycmF5UHJvdG90eXBlU2V0KHJldCwgbmV3IFVpbnQ4QXJyYXkoYnVmLmJ1ZmZlciwgYnVmLmJ5dGVPZmZzZXQsIG4pLCByZXRMZW4gLSBuKVxuICAgICAgICAgIHRoaXMuaGVhZCA9IHBcbiAgICAgICAgICBwLmRhdGEgPSBidWYuc2xpY2UobilcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgKytjXG4gICAgfSB3aGlsZSAoKHAgPSBwLm5leHQpICE9PSBudWxsKVxuICAgIHRoaXMubGVuZ3RoIC09IGNcbiAgICByZXR1cm4gcmV0XG4gIH1cblxuICAvLyBNYWtlIHN1cmUgdGhlIGxpbmtlZCBsaXN0IG9ubHkgc2hvd3MgdGhlIG1pbmltYWwgbmVjZXNzYXJ5IGluZm9ybWF0aW9uLlxuICBbU3ltYm9sLmZvcignbm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20nKV0oXywgb3B0aW9ucykge1xuICAgIHJldHVybiBpbnNwZWN0KHRoaXMsIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAvLyBPbmx5IGluc3BlY3Qgb25lIGxldmVsLlxuICAgICAgZGVwdGg6IDAsXG4gICAgICAvLyBJdCBzaG91bGQgbm90IHJlY3Vyc2UuXG4gICAgICBjdXN0b21JbnNwZWN0OiBmYWxzZVxuICAgIH0pXG4gIH1cbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgTWF0aEZsb29yLCBOdW1iZXJJc0ludGVnZXIgfSA9IHJlcXVpcmUoJy4uLy4uL291cnMvcHJpbW9yZGlhbHMnKVxuY29uc3QgeyB2YWxpZGF0ZUludGVnZXIgfSA9IHJlcXVpcmUoJy4uL3ZhbGlkYXRvcnMnKVxuY29uc3QgeyBFUlJfSU5WQUxJRF9BUkdfVkFMVUUgfSA9IHJlcXVpcmUoJy4uLy4uL291cnMvZXJyb3JzJykuY29kZXNcbmxldCBkZWZhdWx0SGlnaFdhdGVyTWFya0J5dGVzID0gMTYgKiAxMDI0XG5sZXQgZGVmYXVsdEhpZ2hXYXRlck1hcmtPYmplY3RNb2RlID0gMTZcbmZ1bmN0aW9uIGhpZ2hXYXRlck1hcmtGcm9tKG9wdGlvbnMsIGlzRHVwbGV4LCBkdXBsZXhLZXkpIHtcbiAgcmV0dXJuIG9wdGlvbnMuaGlnaFdhdGVyTWFyayAhPSBudWxsID8gb3B0aW9ucy5oaWdoV2F0ZXJNYXJrIDogaXNEdXBsZXggPyBvcHRpb25zW2R1cGxleEtleV0gOiBudWxsXG59XG5mdW5jdGlvbiBnZXREZWZhdWx0SGlnaFdhdGVyTWFyayhvYmplY3RNb2RlKSB7XG4gIHJldHVybiBvYmplY3RNb2RlID8gZGVmYXVsdEhpZ2hXYXRlck1hcmtPYmplY3RNb2RlIDogZGVmYXVsdEhpZ2hXYXRlck1hcmtCeXRlc1xufVxuZnVuY3Rpb24gc2V0RGVmYXVsdEhpZ2hXYXRlck1hcmsob2JqZWN0TW9kZSwgdmFsdWUpIHtcbiAgdmFsaWRhdGVJbnRlZ2VyKHZhbHVlLCAndmFsdWUnLCAwKVxuICBpZiAob2JqZWN0TW9kZSkge1xuICAgIGRlZmF1bHRIaWdoV2F0ZXJNYXJrT2JqZWN0TW9kZSA9IHZhbHVlXG4gIH0gZWxzZSB7XG4gICAgZGVmYXVsdEhpZ2hXYXRlck1hcmtCeXRlcyA9IHZhbHVlXG4gIH1cbn1cbmZ1bmN0aW9uIGdldEhpZ2hXYXRlck1hcmsoc3RhdGUsIG9wdGlvbnMsIGR1cGxleEtleSwgaXNEdXBsZXgpIHtcbiAgY29uc3QgaHdtID0gaGlnaFdhdGVyTWFya0Zyb20ob3B0aW9ucywgaXNEdXBsZXgsIGR1cGxleEtleSlcbiAgaWYgKGh3bSAhPSBudWxsKSB7XG4gICAgaWYgKCFOdW1iZXJJc0ludGVnZXIoaHdtKSB8fCBod20gPCAwKSB7XG4gICAgICBjb25zdCBuYW1lID0gaXNEdXBsZXggPyBgb3B0aW9ucy4ke2R1cGxleEtleX1gIDogJ29wdGlvbnMuaGlnaFdhdGVyTWFyaydcbiAgICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVkFMVUUobmFtZSwgaHdtKVxuICAgIH1cbiAgICByZXR1cm4gTWF0aEZsb29yKGh3bSlcbiAgfVxuXG4gIC8vIERlZmF1bHQgdmFsdWVcbiAgcmV0dXJuIGdldERlZmF1bHRIaWdoV2F0ZXJNYXJrKHN0YXRlLm9iamVjdE1vZGUpXG59XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0SGlnaFdhdGVyTWFyayxcbiAgZ2V0RGVmYXVsdEhpZ2hXYXRlck1hcmssXG4gIHNldERlZmF1bHRIaWdoV2F0ZXJNYXJrXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG4vKiByZXBsYWNlbWVudCBzdGFydCAqL1xuXG5jb25zdCBwcm9jZXNzID0gcmVxdWlyZSgncHJvY2Vzcy8nKVxuXG4vKiByZXBsYWNlbWVudCBlbmQgKi9cblxuY29uc3QgeyBQcm9taXNlUHJvdG90eXBlVGhlbiwgU3ltYm9sQXN5bmNJdGVyYXRvciwgU3ltYm9sSXRlcmF0b3IgfSA9IHJlcXVpcmUoJy4uLy4uL291cnMvcHJpbW9yZGlhbHMnKVxuY29uc3QgeyBCdWZmZXIgfSA9IHJlcXVpcmUoJ2J1ZmZlcicpXG5jb25zdCB7IEVSUl9JTlZBTElEX0FSR19UWVBFLCBFUlJfU1RSRUFNX05VTExfVkFMVUVTIH0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL2Vycm9ycycpLmNvZGVzXG5mdW5jdGlvbiBmcm9tKFJlYWRhYmxlLCBpdGVyYWJsZSwgb3B0cykge1xuICBsZXQgaXRlcmF0b3JcbiAgaWYgKHR5cGVvZiBpdGVyYWJsZSA9PT0gJ3N0cmluZycgfHwgaXRlcmFibGUgaW5zdGFuY2VvZiBCdWZmZXIpIHtcbiAgICByZXR1cm4gbmV3IFJlYWRhYmxlKHtcbiAgICAgIG9iamVjdE1vZGU6IHRydWUsXG4gICAgICAuLi5vcHRzLFxuICAgICAgcmVhZCgpIHtcbiAgICAgICAgdGhpcy5wdXNoKGl0ZXJhYmxlKVxuICAgICAgICB0aGlzLnB1c2gobnVsbClcbiAgICAgIH1cbiAgICB9KVxuICB9XG4gIGxldCBpc0FzeW5jXG4gIGlmIChpdGVyYWJsZSAmJiBpdGVyYWJsZVtTeW1ib2xBc3luY0l0ZXJhdG9yXSkge1xuICAgIGlzQXN5bmMgPSB0cnVlXG4gICAgaXRlcmF0b3IgPSBpdGVyYWJsZVtTeW1ib2xBc3luY0l0ZXJhdG9yXSgpXG4gIH0gZWxzZSBpZiAoaXRlcmFibGUgJiYgaXRlcmFibGVbU3ltYm9sSXRlcmF0b3JdKSB7XG4gICAgaXNBc3luYyA9IGZhbHNlXG4gICAgaXRlcmF0b3IgPSBpdGVyYWJsZVtTeW1ib2xJdGVyYXRvcl0oKVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRSgnaXRlcmFibGUnLCBbJ0l0ZXJhYmxlJ10sIGl0ZXJhYmxlKVxuICB9XG4gIGNvbnN0IHJlYWRhYmxlID0gbmV3IFJlYWRhYmxlKHtcbiAgICBvYmplY3RNb2RlOiB0cnVlLFxuICAgIGhpZ2hXYXRlck1hcms6IDEsXG4gICAgLy8gVE9ETyhyb25hZyk6IFdoYXQgb3B0aW9ucyBzaG91bGQgYmUgYWxsb3dlZD9cbiAgICAuLi5vcHRzXG4gIH0pXG5cbiAgLy8gRmxhZyB0byBwcm90ZWN0IGFnYWluc3QgX3JlYWRcbiAgLy8gYmVpbmcgY2FsbGVkIGJlZm9yZSBsYXN0IGl0ZXJhdGlvbiBjb21wbGV0aW9uLlxuICBsZXQgcmVhZGluZyA9IGZhbHNlXG4gIHJlYWRhYmxlLl9yZWFkID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICghcmVhZGluZykge1xuICAgICAgcmVhZGluZyA9IHRydWVcbiAgICAgIG5leHQoKVxuICAgIH1cbiAgfVxuICByZWFkYWJsZS5fZGVzdHJveSA9IGZ1bmN0aW9uIChlcnJvciwgY2IpIHtcbiAgICBQcm9taXNlUHJvdG90eXBlVGhlbihcbiAgICAgIGNsb3NlKGVycm9yKSxcbiAgICAgICgpID0+IHByb2Nlc3MubmV4dFRpY2soY2IsIGVycm9yKSxcbiAgICAgIC8vIG5leHRUaWNrIGlzIGhlcmUgaW4gY2FzZSBjYiB0aHJvd3NcbiAgICAgIChlKSA9PiBwcm9jZXNzLm5leHRUaWNrKGNiLCBlIHx8IGVycm9yKVxuICAgIClcbiAgfVxuICBhc3luYyBmdW5jdGlvbiBjbG9zZShlcnJvcikge1xuICAgIGNvbnN0IGhhZEVycm9yID0gZXJyb3IgIT09IHVuZGVmaW5lZCAmJiBlcnJvciAhPT0gbnVsbFxuICAgIGNvbnN0IGhhc1Rocm93ID0gdHlwZW9mIGl0ZXJhdG9yLnRocm93ID09PSAnZnVuY3Rpb24nXG4gICAgaWYgKGhhZEVycm9yICYmIGhhc1Rocm93KSB7XG4gICAgICBjb25zdCB7IHZhbHVlLCBkb25lIH0gPSBhd2FpdCBpdGVyYXRvci50aHJvdyhlcnJvcilcbiAgICAgIGF3YWl0IHZhbHVlXG4gICAgICBpZiAoZG9uZSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHR5cGVvZiBpdGVyYXRvci5yZXR1cm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnN0IHsgdmFsdWUgfSA9IGF3YWl0IGl0ZXJhdG9yLnJldHVybigpXG4gICAgICBhd2FpdCB2YWx1ZVxuICAgIH1cbiAgfVxuICBhc3luYyBmdW5jdGlvbiBuZXh0KCkge1xuICAgIGZvciAoOzspIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgdmFsdWUsIGRvbmUgfSA9IGlzQXN5bmMgPyBhd2FpdCBpdGVyYXRvci5uZXh0KCkgOiBpdGVyYXRvci5uZXh0KClcbiAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICByZWFkYWJsZS5wdXNoKG51bGwpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgcmVzID0gdmFsdWUgJiYgdHlwZW9mIHZhbHVlLnRoZW4gPT09ICdmdW5jdGlvbicgPyBhd2FpdCB2YWx1ZSA6IHZhbHVlXG4gICAgICAgICAgaWYgKHJlcyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmVhZGluZyA9IGZhbHNlXG4gICAgICAgICAgICB0aHJvdyBuZXcgRVJSX1NUUkVBTV9OVUxMX1ZBTFVFUygpXG4gICAgICAgICAgfSBlbHNlIGlmIChyZWFkYWJsZS5wdXNoKHJlcykpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlYWRpbmcgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHJlYWRhYmxlLmRlc3Ryb3koZXJyKVxuICAgICAgfVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlYWRhYmxlXG59XG5tb2R1bGUuZXhwb3J0cyA9IGZyb21cbiIsCiAgICAiLyogcmVwbGFjZW1lbnQgc3RhcnQgKi9cblxuY29uc3QgcHJvY2VzcyA9IHJlcXVpcmUoJ3Byb2Nlc3MvJylcblxuLyogcmVwbGFjZW1lbnQgZW5kICovXG4vLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuOygndXNlIHN0cmljdCcpXG5jb25zdCB7XG4gIEFycmF5UHJvdG90eXBlSW5kZXhPZixcbiAgTnVtYmVySXNJbnRlZ2VyLFxuICBOdW1iZXJJc05hTixcbiAgTnVtYmVyUGFyc2VJbnQsXG4gIE9iamVjdERlZmluZVByb3BlcnRpZXMsXG4gIE9iamVjdEtleXMsXG4gIE9iamVjdFNldFByb3RvdHlwZU9mLFxuICBQcm9taXNlLFxuICBTYWZlU2V0LFxuICBTeW1ib2xBc3luY0Rpc3Bvc2UsXG4gIFN5bWJvbEFzeW5jSXRlcmF0b3IsXG4gIFN5bWJvbFxufSA9IHJlcXVpcmUoJy4uLy4uL291cnMvcHJpbW9yZGlhbHMnKVxubW9kdWxlLmV4cG9ydHMgPSBSZWFkYWJsZVxuUmVhZGFibGUuUmVhZGFibGVTdGF0ZSA9IFJlYWRhYmxlU3RhdGVcbmNvbnN0IHsgRXZlbnRFbWl0dGVyOiBFRSB9ID0gcmVxdWlyZSgnZXZlbnRzJylcbmNvbnN0IHsgU3RyZWFtLCBwcmVwZW5kTGlzdGVuZXIgfSA9IHJlcXVpcmUoJy4vbGVnYWN5JylcbmNvbnN0IHsgQnVmZmVyIH0gPSByZXF1aXJlKCdidWZmZXInKVxuY29uc3QgeyBhZGRBYm9ydFNpZ25hbCB9ID0gcmVxdWlyZSgnLi9hZGQtYWJvcnQtc2lnbmFsJylcbmNvbnN0IGVvcyA9IHJlcXVpcmUoJy4vZW5kLW9mLXN0cmVhbScpXG5sZXQgZGVidWcgPSByZXF1aXJlKCcuLi8uLi9vdXJzL3V0aWwnKS5kZWJ1Z2xvZygnc3RyZWFtJywgKGZuKSA9PiB7XG4gIGRlYnVnID0gZm5cbn0pXG5jb25zdCBCdWZmZXJMaXN0ID0gcmVxdWlyZSgnLi9idWZmZXJfbGlzdCcpXG5jb25zdCBkZXN0cm95SW1wbCA9IHJlcXVpcmUoJy4vZGVzdHJveScpXG5jb25zdCB7IGdldEhpZ2hXYXRlck1hcmssIGdldERlZmF1bHRIaWdoV2F0ZXJNYXJrIH0gPSByZXF1aXJlKCcuL3N0YXRlJylcbmNvbnN0IHtcbiAgYWdncmVnYXRlVHdvRXJyb3JzLFxuICBjb2Rlczoge1xuICAgIEVSUl9JTlZBTElEX0FSR19UWVBFLFxuICAgIEVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVELFxuICAgIEVSUl9PVVRfT0ZfUkFOR0UsXG4gICAgRVJSX1NUUkVBTV9QVVNIX0FGVEVSX0VPRixcbiAgICBFUlJfU1RSRUFNX1VOU0hJRlRfQUZURVJfRU5EX0VWRU5UXG4gIH0sXG4gIEFib3J0RXJyb3Jcbn0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL2Vycm9ycycpXG5jb25zdCB7IHZhbGlkYXRlT2JqZWN0IH0gPSByZXF1aXJlKCcuLi92YWxpZGF0b3JzJylcbmNvbnN0IGtQYXVzZWQgPSBTeW1ib2woJ2tQYXVzZWQnKVxuY29uc3QgeyBTdHJpbmdEZWNvZGVyIH0gPSByZXF1aXJlKCdzdHJpbmdfZGVjb2RlcicpXG5jb25zdCBmcm9tID0gcmVxdWlyZSgnLi9mcm9tJylcbk9iamVjdFNldFByb3RvdHlwZU9mKFJlYWRhYmxlLnByb3RvdHlwZSwgU3RyZWFtLnByb3RvdHlwZSlcbk9iamVjdFNldFByb3RvdHlwZU9mKFJlYWRhYmxlLCBTdHJlYW0pXG5jb25zdCBub3AgPSAoKSA9PiB7fVxuY29uc3QgeyBlcnJvck9yRGVzdHJveSB9ID0gZGVzdHJveUltcGxcbmNvbnN0IGtPYmplY3RNb2RlID0gMSA8PCAwXG5jb25zdCBrRW5kZWQgPSAxIDw8IDFcbmNvbnN0IGtFbmRFbWl0dGVkID0gMSA8PCAyXG5jb25zdCBrUmVhZGluZyA9IDEgPDwgM1xuY29uc3Qga0NvbnN0cnVjdGVkID0gMSA8PCA0XG5jb25zdCBrU3luYyA9IDEgPDwgNVxuY29uc3Qga05lZWRSZWFkYWJsZSA9IDEgPDwgNlxuY29uc3Qga0VtaXR0ZWRSZWFkYWJsZSA9IDEgPDwgN1xuY29uc3Qga1JlYWRhYmxlTGlzdGVuaW5nID0gMSA8PCA4XG5jb25zdCBrUmVzdW1lU2NoZWR1bGVkID0gMSA8PCA5XG5jb25zdCBrRXJyb3JFbWl0dGVkID0gMSA8PCAxMFxuY29uc3Qga0VtaXRDbG9zZSA9IDEgPDwgMTFcbmNvbnN0IGtBdXRvRGVzdHJveSA9IDEgPDwgMTJcbmNvbnN0IGtEZXN0cm95ZWQgPSAxIDw8IDEzXG5jb25zdCBrQ2xvc2VkID0gMSA8PCAxNFxuY29uc3Qga0Nsb3NlRW1pdHRlZCA9IDEgPDwgMTVcbmNvbnN0IGtNdWx0aUF3YWl0RHJhaW4gPSAxIDw8IDE2XG5jb25zdCBrUmVhZGluZ01vcmUgPSAxIDw8IDE3XG5jb25zdCBrRGF0YUVtaXR0ZWQgPSAxIDw8IDE4XG5cbi8vIFRPRE8oYmVuamFtaW5ncikgaXQgaXMgbGlrZWx5IHNsb3dlciB0byBkbyBpdCB0aGlzIHdheSB0aGFuIHdpdGggZnJlZSBmdW5jdGlvbnNcbmZ1bmN0aW9uIG1ha2VCaXRNYXBEZXNjcmlwdG9yKGJpdCkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiAodGhpcy5zdGF0ZSAmIGJpdCkgIT09IDBcbiAgICB9LFxuICAgIHNldCh2YWx1ZSkge1xuICAgICAgaWYgKHZhbHVlKSB0aGlzLnN0YXRlIHw9IGJpdFxuICAgICAgZWxzZSB0aGlzLnN0YXRlICY9IH5iaXRcbiAgICB9XG4gIH1cbn1cbk9iamVjdERlZmluZVByb3BlcnRpZXMoUmVhZGFibGVTdGF0ZS5wcm90b3R5cGUsIHtcbiAgb2JqZWN0TW9kZTogbWFrZUJpdE1hcERlc2NyaXB0b3Ioa09iamVjdE1vZGUpLFxuICBlbmRlZDogbWFrZUJpdE1hcERlc2NyaXB0b3Ioa0VuZGVkKSxcbiAgZW5kRW1pdHRlZDogbWFrZUJpdE1hcERlc2NyaXB0b3Ioa0VuZEVtaXR0ZWQpLFxuICByZWFkaW5nOiBtYWtlQml0TWFwRGVzY3JpcHRvcihrUmVhZGluZyksXG4gIC8vIFN0cmVhbSBpcyBzdGlsbCBiZWluZyBjb25zdHJ1Y3RlZCBhbmQgY2Fubm90IGJlXG4gIC8vIGRlc3Ryb3llZCB1bnRpbCBjb25zdHJ1Y3Rpb24gZmluaXNoZWQgb3IgZmFpbGVkLlxuICAvLyBBc3luYyBjb25zdHJ1Y3Rpb24gaXMgb3B0IGluLCB0aGVyZWZvcmUgd2Ugc3RhcnQgYXNcbiAgLy8gY29uc3RydWN0ZWQuXG4gIGNvbnN0cnVjdGVkOiBtYWtlQml0TWFwRGVzY3JpcHRvcihrQ29uc3RydWN0ZWQpLFxuICAvLyBBIGZsYWcgdG8gYmUgYWJsZSB0byB0ZWxsIGlmIHRoZSBldmVudCAncmVhZGFibGUnLydkYXRhJyBpcyBlbWl0dGVkXG4gIC8vIGltbWVkaWF0ZWx5LCBvciBvbiBhIGxhdGVyIHRpY2suICBXZSBzZXQgdGhpcyB0byB0cnVlIGF0IGZpcnN0LCBiZWNhdXNlXG4gIC8vIGFueSBhY3Rpb25zIHRoYXQgc2hvdWxkbid0IGhhcHBlbiB1bnRpbCBcImxhdGVyXCIgc2hvdWxkIGdlbmVyYWxseSBhbHNvXG4gIC8vIG5vdCBoYXBwZW4gYmVmb3JlIHRoZSBmaXJzdCByZWFkIGNhbGwuXG4gIHN5bmM6IG1ha2VCaXRNYXBEZXNjcmlwdG9yKGtTeW5jKSxcbiAgLy8gV2hlbmV2ZXIgd2UgcmV0dXJuIG51bGwsIHRoZW4gd2Ugc2V0IGEgZmxhZyB0byBzYXlcbiAgLy8gdGhhdCB3ZSdyZSBhd2FpdGluZyBhICdyZWFkYWJsZScgZXZlbnQgZW1pc3Npb24uXG4gIG5lZWRSZWFkYWJsZTogbWFrZUJpdE1hcERlc2NyaXB0b3Ioa05lZWRSZWFkYWJsZSksXG4gIGVtaXR0ZWRSZWFkYWJsZTogbWFrZUJpdE1hcERlc2NyaXB0b3Ioa0VtaXR0ZWRSZWFkYWJsZSksXG4gIHJlYWRhYmxlTGlzdGVuaW5nOiBtYWtlQml0TWFwRGVzY3JpcHRvcihrUmVhZGFibGVMaXN0ZW5pbmcpLFxuICByZXN1bWVTY2hlZHVsZWQ6IG1ha2VCaXRNYXBEZXNjcmlwdG9yKGtSZXN1bWVTY2hlZHVsZWQpLFxuICAvLyBUcnVlIGlmIHRoZSBlcnJvciB3YXMgYWxyZWFkeSBlbWl0dGVkIGFuZCBzaG91bGQgbm90IGJlIHRocm93biBhZ2Fpbi5cbiAgZXJyb3JFbWl0dGVkOiBtYWtlQml0TWFwRGVzY3JpcHRvcihrRXJyb3JFbWl0dGVkKSxcbiAgZW1pdENsb3NlOiBtYWtlQml0TWFwRGVzY3JpcHRvcihrRW1pdENsb3NlKSxcbiAgYXV0b0Rlc3Ryb3k6IG1ha2VCaXRNYXBEZXNjcmlwdG9yKGtBdXRvRGVzdHJveSksXG4gIC8vIEhhcyBpdCBiZWVuIGRlc3Ryb3llZC5cbiAgZGVzdHJveWVkOiBtYWtlQml0TWFwRGVzY3JpcHRvcihrRGVzdHJveWVkKSxcbiAgLy8gSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHN0cmVhbSBoYXMgZmluaXNoZWQgZGVzdHJveWluZy5cbiAgY2xvc2VkOiBtYWtlQml0TWFwRGVzY3JpcHRvcihrQ2xvc2VkKSxcbiAgLy8gVHJ1ZSBpZiBjbG9zZSBoYXMgYmVlbiBlbWl0dGVkIG9yIHdvdWxkIGhhdmUgYmVlbiBlbWl0dGVkXG4gIC8vIGRlcGVuZGluZyBvbiBlbWl0Q2xvc2UuXG4gIGNsb3NlRW1pdHRlZDogbWFrZUJpdE1hcERlc2NyaXB0b3Ioa0Nsb3NlRW1pdHRlZCksXG4gIG11bHRpQXdhaXREcmFpbjogbWFrZUJpdE1hcERlc2NyaXB0b3Ioa011bHRpQXdhaXREcmFpbiksXG4gIC8vIElmIHRydWUsIGEgbWF5YmVSZWFkTW9yZSBoYXMgYmVlbiBzY2hlZHVsZWQuXG4gIHJlYWRpbmdNb3JlOiBtYWtlQml0TWFwRGVzY3JpcHRvcihrUmVhZGluZ01vcmUpLFxuICBkYXRhRW1pdHRlZDogbWFrZUJpdE1hcERlc2NyaXB0b3Ioa0RhdGFFbWl0dGVkKVxufSlcbmZ1bmN0aW9uIFJlYWRhYmxlU3RhdGUob3B0aW9ucywgc3RyZWFtLCBpc0R1cGxleCkge1xuICAvLyBEdXBsZXggc3RyZWFtcyBhcmUgYm90aCByZWFkYWJsZSBhbmQgd3JpdGFibGUsIGJ1dCBzaGFyZVxuICAvLyB0aGUgc2FtZSBvcHRpb25zIG9iamVjdC5cbiAgLy8gSG93ZXZlciwgc29tZSBjYXNlcyByZXF1aXJlIHNldHRpbmcgb3B0aW9ucyB0byBkaWZmZXJlbnRcbiAgLy8gdmFsdWVzIGZvciB0aGUgcmVhZGFibGUgYW5kIHRoZSB3cml0YWJsZSBzaWRlcyBvZiB0aGUgZHVwbGV4IHN0cmVhbS5cbiAgLy8gVGhlc2Ugb3B0aW9ucyBjYW4gYmUgcHJvdmlkZWQgc2VwYXJhdGVseSBhcyByZWFkYWJsZVhYWCBhbmQgd3JpdGFibGVYWFguXG4gIGlmICh0eXBlb2YgaXNEdXBsZXggIT09ICdib29sZWFuJykgaXNEdXBsZXggPSBzdHJlYW0gaW5zdGFuY2VvZiByZXF1aXJlKCcuL2R1cGxleCcpXG5cbiAgLy8gQml0IG1hcCBmaWVsZCB0byBzdG9yZSBSZWFkYWJsZVN0YXRlIG1vcmUgZWZmY2llbnRseSB3aXRoIDEgYml0IHBlciBmaWVsZFxuICAvLyBpbnN0ZWFkIG9mIGEgVjggc2xvdCBwZXIgZmllbGQuXG4gIHRoaXMuc3RhdGUgPSBrRW1pdENsb3NlIHwga0F1dG9EZXN0cm95IHwga0NvbnN0cnVjdGVkIHwga1N5bmNcbiAgLy8gT2JqZWN0IHN0cmVhbSBmbGFnLiBVc2VkIHRvIG1ha2UgcmVhZChuKSBpZ25vcmUgbiBhbmQgdG9cbiAgLy8gbWFrZSBhbGwgdGhlIGJ1ZmZlciBtZXJnaW5nIGFuZCBsZW5ndGggY2hlY2tzIGdvIGF3YXkuXG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMub2JqZWN0TW9kZSkgdGhpcy5zdGF0ZSB8PSBrT2JqZWN0TW9kZVxuICBpZiAoaXNEdXBsZXggJiYgb3B0aW9ucyAmJiBvcHRpb25zLnJlYWRhYmxlT2JqZWN0TW9kZSkgdGhpcy5zdGF0ZSB8PSBrT2JqZWN0TW9kZVxuXG4gIC8vIFRoZSBwb2ludCBhdCB3aGljaCBpdCBzdG9wcyBjYWxsaW5nIF9yZWFkKCkgdG8gZmlsbCB0aGUgYnVmZmVyXG4gIC8vIE5vdGU6IDAgaXMgYSB2YWxpZCB2YWx1ZSwgbWVhbnMgXCJkb24ndCBjYWxsIF9yZWFkIHByZWVtcHRpdmVseSBldmVyXCJcbiAgdGhpcy5oaWdoV2F0ZXJNYXJrID0gb3B0aW9uc1xuICAgID8gZ2V0SGlnaFdhdGVyTWFyayh0aGlzLCBvcHRpb25zLCAncmVhZGFibGVIaWdoV2F0ZXJNYXJrJywgaXNEdXBsZXgpXG4gICAgOiBnZXREZWZhdWx0SGlnaFdhdGVyTWFyayhmYWxzZSlcblxuICAvLyBBIGxpbmtlZCBsaXN0IGlzIHVzZWQgdG8gc3RvcmUgZGF0YSBjaHVua3MgaW5zdGVhZCBvZiBhbiBhcnJheSBiZWNhdXNlIHRoZVxuICAvLyBsaW5rZWQgbGlzdCBjYW4gcmVtb3ZlIGVsZW1lbnRzIGZyb20gdGhlIGJlZ2lubmluZyBmYXN0ZXIgdGhhblxuICAvLyBhcnJheS5zaGlmdCgpLlxuICB0aGlzLmJ1ZmZlciA9IG5ldyBCdWZmZXJMaXN0KClcbiAgdGhpcy5sZW5ndGggPSAwXG4gIHRoaXMucGlwZXMgPSBbXVxuICB0aGlzLmZsb3dpbmcgPSBudWxsXG4gIHRoaXNba1BhdXNlZF0gPSBudWxsXG5cbiAgLy8gU2hvdWxkIGNsb3NlIGJlIGVtaXR0ZWQgb24gZGVzdHJveS4gRGVmYXVsdHMgdG8gdHJ1ZS5cbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5lbWl0Q2xvc2UgPT09IGZhbHNlKSB0aGlzLnN0YXRlICY9IH5rRW1pdENsb3NlXG5cbiAgLy8gU2hvdWxkIC5kZXN0cm95KCkgYmUgY2FsbGVkIGFmdGVyICdlbmQnIChhbmQgcG90ZW50aWFsbHkgJ2ZpbmlzaCcpLlxuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmF1dG9EZXN0cm95ID09PSBmYWxzZSkgdGhpcy5zdGF0ZSAmPSB+a0F1dG9EZXN0cm95XG5cbiAgLy8gSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHN0cmVhbSBoYXMgZXJyb3JlZC4gV2hlbiB0cnVlIG5vIGZ1cnRoZXJcbiAgLy8gX3JlYWQgY2FsbHMsICdkYXRhJyBvciAncmVhZGFibGUnIGV2ZW50cyBzaG91bGQgb2NjdXIuIFRoaXMgaXMgbmVlZGVkXG4gIC8vIHNpbmNlIHdoZW4gYXV0b0Rlc3Ryb3kgaXMgZGlzYWJsZWQgd2UgbmVlZCBhIHdheSB0byB0ZWxsIHdoZXRoZXIgdGhlXG4gIC8vIHN0cmVhbSBoYXMgZmFpbGVkLlxuICB0aGlzLmVycm9yZWQgPSBudWxsXG5cbiAgLy8gQ3J5cHRvIGlzIGtpbmQgb2Ygb2xkIGFuZCBjcnVzdHkuICBIaXN0b3JpY2FsbHksIGl0cyBkZWZhdWx0IHN0cmluZ1xuICAvLyBlbmNvZGluZyBpcyAnYmluYXJ5JyBzbyB3ZSBoYXZlIHRvIG1ha2UgdGhpcyBjb25maWd1cmFibGUuXG4gIC8vIEV2ZXJ5dGhpbmcgZWxzZSBpbiB0aGUgdW5pdmVyc2UgdXNlcyAndXRmOCcsIHRob3VnaC5cbiAgdGhpcy5kZWZhdWx0RW5jb2RpbmcgPSAob3B0aW9ucyAmJiBvcHRpb25zLmRlZmF1bHRFbmNvZGluZykgfHwgJ3V0ZjgnXG5cbiAgLy8gUmVmIHRoZSBwaXBlZCBkZXN0IHdoaWNoIHdlIG5lZWQgYSBkcmFpbiBldmVudCBvbiBpdFxuICAvLyB0eXBlOiBudWxsIHwgV3JpdGFibGUgfCBTZXQ8V3JpdGFibGU+LlxuICB0aGlzLmF3YWl0RHJhaW5Xcml0ZXJzID0gbnVsbFxuICB0aGlzLmRlY29kZXIgPSBudWxsXG4gIHRoaXMuZW5jb2RpbmcgPSBudWxsXG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZW5jb2RpbmcpIHtcbiAgICB0aGlzLmRlY29kZXIgPSBuZXcgU3RyaW5nRGVjb2RlcihvcHRpb25zLmVuY29kaW5nKVxuICAgIHRoaXMuZW5jb2RpbmcgPSBvcHRpb25zLmVuY29kaW5nXG4gIH1cbn1cbmZ1bmN0aW9uIFJlYWRhYmxlKG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlYWRhYmxlKSkgcmV0dXJuIG5ldyBSZWFkYWJsZShvcHRpb25zKVxuXG4gIC8vIENoZWNraW5nIGZvciBhIFN0cmVhbS5EdXBsZXggaW5zdGFuY2UgaXMgZmFzdGVyIGhlcmUgaW5zdGVhZCBvZiBpbnNpZGVcbiAgLy8gdGhlIFJlYWRhYmxlU3RhdGUgY29uc3RydWN0b3IsIGF0IGxlYXN0IHdpdGggVjggNi41LlxuICBjb25zdCBpc0R1cGxleCA9IHRoaXMgaW5zdGFuY2VvZiByZXF1aXJlKCcuL2R1cGxleCcpXG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUgPSBuZXcgUmVhZGFibGVTdGF0ZShvcHRpb25zLCB0aGlzLCBpc0R1cGxleClcbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMucmVhZCA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fcmVhZCA9IG9wdGlvbnMucmVhZFxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5kZXN0cm95ID09PSAnZnVuY3Rpb24nKSB0aGlzLl9kZXN0cm95ID0gb3B0aW9ucy5kZXN0cm95XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmNvbnN0cnVjdCA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fY29uc3RydWN0ID0gb3B0aW9ucy5jb25zdHJ1Y3RcbiAgICBpZiAob3B0aW9ucy5zaWduYWwgJiYgIWlzRHVwbGV4KSBhZGRBYm9ydFNpZ25hbChvcHRpb25zLnNpZ25hbCwgdGhpcylcbiAgfVxuICBTdHJlYW0uY2FsbCh0aGlzLCBvcHRpb25zKVxuICBkZXN0cm95SW1wbC5jb25zdHJ1Y3QodGhpcywgKCkgPT4ge1xuICAgIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlLm5lZWRSZWFkYWJsZSkge1xuICAgICAgbWF5YmVSZWFkTW9yZSh0aGlzLCB0aGlzLl9yZWFkYWJsZVN0YXRlKVxuICAgIH1cbiAgfSlcbn1cblJlYWRhYmxlLnByb3RvdHlwZS5kZXN0cm95ID0gZGVzdHJveUltcGwuZGVzdHJveVxuUmVhZGFibGUucHJvdG90eXBlLl91bmRlc3Ryb3kgPSBkZXN0cm95SW1wbC51bmRlc3Ryb3lcblJlYWRhYmxlLnByb3RvdHlwZS5fZGVzdHJveSA9IGZ1bmN0aW9uIChlcnIsIGNiKSB7XG4gIGNiKGVycilcbn1cblJlYWRhYmxlLnByb3RvdHlwZVtFRS5jYXB0dXJlUmVqZWN0aW9uU3ltYm9sXSA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgdGhpcy5kZXN0cm95KGVycilcbn1cblJlYWRhYmxlLnByb3RvdHlwZVtTeW1ib2xBc3luY0Rpc3Bvc2VdID0gZnVuY3Rpb24gKCkge1xuICBsZXQgZXJyb3JcbiAgaWYgKCF0aGlzLmRlc3Ryb3llZCkge1xuICAgIGVycm9yID0gdGhpcy5yZWFkYWJsZUVuZGVkID8gbnVsbCA6IG5ldyBBYm9ydEVycm9yKClcbiAgICB0aGlzLmRlc3Ryb3koZXJyb3IpXG4gIH1cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IGVvcyh0aGlzLCAoZXJyKSA9PiAoZXJyICYmIGVyciAhPT0gZXJyb3IgPyByZWplY3QoZXJyKSA6IHJlc29sdmUobnVsbCkpKSlcbn1cblxuLy8gTWFudWFsbHkgc2hvdmUgc29tZXRoaW5nIGludG8gdGhlIHJlYWQoKSBidWZmZXIuXG4vLyBUaGlzIHJldHVybnMgdHJ1ZSBpZiB0aGUgaGlnaFdhdGVyTWFyayBoYXMgbm90IGJlZW4gaGl0IHlldCxcbi8vIHNpbWlsYXIgdG8gaG93IFdyaXRhYmxlLndyaXRlKCkgcmV0dXJucyB0cnVlIGlmIHlvdSBzaG91bGRcbi8vIHdyaXRlKCkgc29tZSBtb3JlLlxuUmVhZGFibGUucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nKSB7XG4gIHJldHVybiByZWFkYWJsZUFkZENodW5rKHRoaXMsIGNodW5rLCBlbmNvZGluZywgZmFsc2UpXG59XG5cbi8vIFVuc2hpZnQgc2hvdWxkICphbHdheXMqIGJlIHNvbWV0aGluZyBkaXJlY3RseSBvdXQgb2YgcmVhZCgpLlxuUmVhZGFibGUucHJvdG90eXBlLnVuc2hpZnQgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nKSB7XG4gIHJldHVybiByZWFkYWJsZUFkZENodW5rKHRoaXMsIGNodW5rLCBlbmNvZGluZywgdHJ1ZSlcbn1cbmZ1bmN0aW9uIHJlYWRhYmxlQWRkQ2h1bmsoc3RyZWFtLCBjaHVuaywgZW5jb2RpbmcsIGFkZFRvRnJvbnQpIHtcbiAgZGVidWcoJ3JlYWRhYmxlQWRkQ2h1bmsnLCBjaHVuaylcbiAgY29uc3Qgc3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGVcbiAgbGV0IGVyclxuICBpZiAoKHN0YXRlLnN0YXRlICYga09iamVjdE1vZGUpID09PSAwKSB7XG4gICAgaWYgKHR5cGVvZiBjaHVuayA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gZW5jb2RpbmcgfHwgc3RhdGUuZGVmYXVsdEVuY29kaW5nXG4gICAgICBpZiAoc3RhdGUuZW5jb2RpbmcgIT09IGVuY29kaW5nKSB7XG4gICAgICAgIGlmIChhZGRUb0Zyb250ICYmIHN0YXRlLmVuY29kaW5nKSB7XG4gICAgICAgICAgLy8gV2hlbiB1bnNoaWZ0aW5nLCBpZiBzdGF0ZS5lbmNvZGluZyBpcyBzZXQsIHdlIGhhdmUgdG8gc2F2ZVxuICAgICAgICAgIC8vIHRoZSBzdHJpbmcgaW4gdGhlIEJ1ZmZlckxpc3Qgd2l0aCB0aGUgc3RhdGUgZW5jb2RpbmcuXG4gICAgICAgICAgY2h1bmsgPSBCdWZmZXIuZnJvbShjaHVuaywgZW5jb2RpbmcpLnRvU3RyaW5nKHN0YXRlLmVuY29kaW5nKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNodW5rID0gQnVmZmVyLmZyb20oY2h1bmssIGVuY29kaW5nKVxuICAgICAgICAgIGVuY29kaW5nID0gJydcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2h1bmsgaW5zdGFuY2VvZiBCdWZmZXIpIHtcbiAgICAgIGVuY29kaW5nID0gJydcbiAgICB9IGVsc2UgaWYgKFN0cmVhbS5faXNVaW50OEFycmF5KGNodW5rKSkge1xuICAgICAgY2h1bmsgPSBTdHJlYW0uX3VpbnQ4QXJyYXlUb0J1ZmZlcihjaHVuaylcbiAgICAgIGVuY29kaW5nID0gJydcbiAgICB9IGVsc2UgaWYgKGNodW5rICE9IG51bGwpIHtcbiAgICAgIGVyciA9IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRSgnY2h1bmsnLCBbJ3N0cmluZycsICdCdWZmZXInLCAnVWludDhBcnJheSddLCBjaHVuaylcbiAgICB9XG4gIH1cbiAgaWYgKGVycikge1xuICAgIGVycm9yT3JEZXN0cm95KHN0cmVhbSwgZXJyKVxuICB9IGVsc2UgaWYgKGNodW5rID09PSBudWxsKSB7XG4gICAgc3RhdGUuc3RhdGUgJj0gfmtSZWFkaW5nXG4gICAgb25Fb2ZDaHVuayhzdHJlYW0sIHN0YXRlKVxuICB9IGVsc2UgaWYgKChzdGF0ZS5zdGF0ZSAmIGtPYmplY3RNb2RlKSAhPT0gMCB8fCAoY2h1bmsgJiYgY2h1bmsubGVuZ3RoID4gMCkpIHtcbiAgICBpZiAoYWRkVG9Gcm9udCkge1xuICAgICAgaWYgKChzdGF0ZS5zdGF0ZSAmIGtFbmRFbWl0dGVkKSAhPT0gMCkgZXJyb3JPckRlc3Ryb3koc3RyZWFtLCBuZXcgRVJSX1NUUkVBTV9VTlNISUZUX0FGVEVSX0VORF9FVkVOVCgpKVxuICAgICAgZWxzZSBpZiAoc3RhdGUuZGVzdHJveWVkIHx8IHN0YXRlLmVycm9yZWQpIHJldHVybiBmYWxzZVxuICAgICAgZWxzZSBhZGRDaHVuayhzdHJlYW0sIHN0YXRlLCBjaHVuaywgdHJ1ZSlcbiAgICB9IGVsc2UgaWYgKHN0YXRlLmVuZGVkKSB7XG4gICAgICBlcnJvck9yRGVzdHJveShzdHJlYW0sIG5ldyBFUlJfU1RSRUFNX1BVU0hfQUZURVJfRU9GKCkpXG4gICAgfSBlbHNlIGlmIChzdGF0ZS5kZXN0cm95ZWQgfHwgc3RhdGUuZXJyb3JlZCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLnN0YXRlICY9IH5rUmVhZGluZ1xuICAgICAgaWYgKHN0YXRlLmRlY29kZXIgJiYgIWVuY29kaW5nKSB7XG4gICAgICAgIGNodW5rID0gc3RhdGUuZGVjb2Rlci53cml0ZShjaHVuaylcbiAgICAgICAgaWYgKHN0YXRlLm9iamVjdE1vZGUgfHwgY2h1bmsubGVuZ3RoICE9PSAwKSBhZGRDaHVuayhzdHJlYW0sIHN0YXRlLCBjaHVuaywgZmFsc2UpXG4gICAgICAgIGVsc2UgbWF5YmVSZWFkTW9yZShzdHJlYW0sIHN0YXRlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWRkQ2h1bmsoc3RyZWFtLCBzdGF0ZSwgY2h1bmssIGZhbHNlKVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmICghYWRkVG9Gcm9udCkge1xuICAgIHN0YXRlLnN0YXRlICY9IH5rUmVhZGluZ1xuICAgIG1heWJlUmVhZE1vcmUoc3RyZWFtLCBzdGF0ZSlcbiAgfVxuXG4gIC8vIFdlIGNhbiBwdXNoIG1vcmUgZGF0YSBpZiB3ZSBhcmUgYmVsb3cgdGhlIGhpZ2hXYXRlck1hcmsuXG4gIC8vIEFsc28sIGlmIHdlIGhhdmUgbm8gZGF0YSB5ZXQsIHdlIGNhbiBzdGFuZCBzb21lIG1vcmUgYnl0ZXMuXG4gIC8vIFRoaXMgaXMgdG8gd29yayBhcm91bmQgY2FzZXMgd2hlcmUgaHdtPTAsIHN1Y2ggYXMgdGhlIHJlcGwuXG4gIHJldHVybiAhc3RhdGUuZW5kZWQgJiYgKHN0YXRlLmxlbmd0aCA8IHN0YXRlLmhpZ2hXYXRlck1hcmsgfHwgc3RhdGUubGVuZ3RoID09PSAwKVxufVxuZnVuY3Rpb24gYWRkQ2h1bmsoc3RyZWFtLCBzdGF0ZSwgY2h1bmssIGFkZFRvRnJvbnQpIHtcbiAgaWYgKHN0YXRlLmZsb3dpbmcgJiYgc3RhdGUubGVuZ3RoID09PSAwICYmICFzdGF0ZS5zeW5jICYmIHN0cmVhbS5saXN0ZW5lckNvdW50KCdkYXRhJykgPiAwKSB7XG4gICAgLy8gVXNlIHRoZSBndWFyZCB0byBhdm9pZCBjcmVhdGluZyBgU2V0KClgIHJlcGVhdGVkbHlcbiAgICAvLyB3aGVuIHdlIGhhdmUgbXVsdGlwbGUgcGlwZXMuXG4gICAgaWYgKChzdGF0ZS5zdGF0ZSAmIGtNdWx0aUF3YWl0RHJhaW4pICE9PSAwKSB7XG4gICAgICBzdGF0ZS5hd2FpdERyYWluV3JpdGVycy5jbGVhcigpXG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLmF3YWl0RHJhaW5Xcml0ZXJzID0gbnVsbFxuICAgIH1cbiAgICBzdGF0ZS5kYXRhRW1pdHRlZCA9IHRydWVcbiAgICBzdHJlYW0uZW1pdCgnZGF0YScsIGNodW5rKVxuICB9IGVsc2Uge1xuICAgIC8vIFVwZGF0ZSB0aGUgYnVmZmVyIGluZm8uXG4gICAgc3RhdGUubGVuZ3RoICs9IHN0YXRlLm9iamVjdE1vZGUgPyAxIDogY2h1bmsubGVuZ3RoXG4gICAgaWYgKGFkZFRvRnJvbnQpIHN0YXRlLmJ1ZmZlci51bnNoaWZ0KGNodW5rKVxuICAgIGVsc2Ugc3RhdGUuYnVmZmVyLnB1c2goY2h1bmspXG4gICAgaWYgKChzdGF0ZS5zdGF0ZSAmIGtOZWVkUmVhZGFibGUpICE9PSAwKSBlbWl0UmVhZGFibGUoc3RyZWFtKVxuICB9XG4gIG1heWJlUmVhZE1vcmUoc3RyZWFtLCBzdGF0ZSlcbn1cblJlYWRhYmxlLnByb3RvdHlwZS5pc1BhdXNlZCA9IGZ1bmN0aW9uICgpIHtcbiAgY29uc3Qgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlXG4gIHJldHVybiBzdGF0ZVtrUGF1c2VkXSA9PT0gdHJ1ZSB8fCBzdGF0ZS5mbG93aW5nID09PSBmYWxzZVxufVxuXG4vLyBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eS5cblJlYWRhYmxlLnByb3RvdHlwZS5zZXRFbmNvZGluZyA9IGZ1bmN0aW9uIChlbmMpIHtcbiAgY29uc3QgZGVjb2RlciA9IG5ldyBTdHJpbmdEZWNvZGVyKGVuYylcbiAgdGhpcy5fcmVhZGFibGVTdGF0ZS5kZWNvZGVyID0gZGVjb2RlclxuICAvLyBJZiBzZXRFbmNvZGluZyhudWxsKSwgZGVjb2Rlci5lbmNvZGluZyBlcXVhbHMgdXRmOC5cbiAgdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmNvZGluZyA9IHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2Rlci5lbmNvZGluZ1xuICBjb25zdCBidWZmZXIgPSB0aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlclxuICAvLyBJdGVyYXRlIG92ZXIgY3VycmVudCBidWZmZXIgdG8gY29udmVydCBhbHJlYWR5IHN0b3JlZCBCdWZmZXJzOlxuICBsZXQgY29udGVudCA9ICcnXG4gIGZvciAoY29uc3QgZGF0YSBvZiBidWZmZXIpIHtcbiAgICBjb250ZW50ICs9IGRlY29kZXIud3JpdGUoZGF0YSlcbiAgfVxuICBidWZmZXIuY2xlYXIoKVxuICBpZiAoY29udGVudCAhPT0gJycpIGJ1ZmZlci5wdXNoKGNvbnRlbnQpXG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUubGVuZ3RoID0gY29udGVudC5sZW5ndGhcbiAgcmV0dXJuIHRoaXNcbn1cblxuLy8gRG9uJ3QgcmFpc2UgdGhlIGh3bSA+IDFHQi5cbmNvbnN0IE1BWF9IV00gPSAweDQwMDAwMDAwXG5mdW5jdGlvbiBjb21wdXRlTmV3SGlnaFdhdGVyTWFyayhuKSB7XG4gIGlmIChuID4gTUFYX0hXTSkge1xuICAgIHRocm93IG5ldyBFUlJfT1VUX09GX1JBTkdFKCdzaXplJywgJzw9IDFHaUInLCBuKVxuICB9IGVsc2Uge1xuICAgIC8vIEdldCB0aGUgbmV4dCBoaWdoZXN0IHBvd2VyIG9mIDIgdG8gcHJldmVudCBpbmNyZWFzaW5nIGh3bSBleGNlc3NpdmVseSBpblxuICAgIC8vIHRpbnkgYW1vdW50cy5cbiAgICBuLS1cbiAgICBuIHw9IG4gPj4+IDFcbiAgICBuIHw9IG4gPj4+IDJcbiAgICBuIHw9IG4gPj4+IDRcbiAgICBuIHw9IG4gPj4+IDhcbiAgICBuIHw9IG4gPj4+IDE2XG4gICAgbisrXG4gIH1cbiAgcmV0dXJuIG5cbn1cblxuLy8gVGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBiZSBpbmxpbmFibGUsIHNvIHBsZWFzZSB0YWtlIGNhcmUgd2hlbiBtYWtpbmdcbi8vIGNoYW5nZXMgdG8gdGhlIGZ1bmN0aW9uIGJvZHkuXG5mdW5jdGlvbiBob3dNdWNoVG9SZWFkKG4sIHN0YXRlKSB7XG4gIGlmIChuIDw9IDAgfHwgKHN0YXRlLmxlbmd0aCA9PT0gMCAmJiBzdGF0ZS5lbmRlZCkpIHJldHVybiAwXG4gIGlmICgoc3RhdGUuc3RhdGUgJiBrT2JqZWN0TW9kZSkgIT09IDApIHJldHVybiAxXG4gIGlmIChOdW1iZXJJc05hTihuKSkge1xuICAgIC8vIE9ubHkgZmxvdyBvbmUgYnVmZmVyIGF0IGEgdGltZS5cbiAgICBpZiAoc3RhdGUuZmxvd2luZyAmJiBzdGF0ZS5sZW5ndGgpIHJldHVybiBzdGF0ZS5idWZmZXIuZmlyc3QoKS5sZW5ndGhcbiAgICByZXR1cm4gc3RhdGUubGVuZ3RoXG4gIH1cbiAgaWYgKG4gPD0gc3RhdGUubGVuZ3RoKSByZXR1cm4gblxuICByZXR1cm4gc3RhdGUuZW5kZWQgPyBzdGF0ZS5sZW5ndGggOiAwXG59XG5cbi8vIFlvdSBjYW4gb3ZlcnJpZGUgZWl0aGVyIHRoaXMgbWV0aG9kLCBvciB0aGUgYXN5bmMgX3JlYWQobikgYmVsb3cuXG5SZWFkYWJsZS5wcm90b3R5cGUucmVhZCA9IGZ1bmN0aW9uIChuKSB7XG4gIGRlYnVnKCdyZWFkJywgbilcbiAgLy8gU2FtZSBhcyBwYXJzZUludCh1bmRlZmluZWQsIDEwKSwgaG93ZXZlciBWOCA3LjMgcGVyZm9ybWFuY2UgcmVncmVzc2VkXG4gIC8vIGluIHRoaXMgc2NlbmFyaW8sIHNvIHdlIGFyZSBkb2luZyBpdCBtYW51YWxseS5cbiAgaWYgKG4gPT09IHVuZGVmaW5lZCkge1xuICAgIG4gPSBOYU5cbiAgfSBlbHNlIGlmICghTnVtYmVySXNJbnRlZ2VyKG4pKSB7XG4gICAgbiA9IE51bWJlclBhcnNlSW50KG4sIDEwKVxuICB9XG4gIGNvbnN0IHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZVxuICBjb25zdCBuT3JpZyA9IG5cblxuICAvLyBJZiB3ZSdyZSBhc2tpbmcgZm9yIG1vcmUgdGhhbiB0aGUgY3VycmVudCBod20sIHRoZW4gcmFpc2UgdGhlIGh3bS5cbiAgaWYgKG4gPiBzdGF0ZS5oaWdoV2F0ZXJNYXJrKSBzdGF0ZS5oaWdoV2F0ZXJNYXJrID0gY29tcHV0ZU5ld0hpZ2hXYXRlck1hcmsobilcbiAgaWYgKG4gIT09IDApIHN0YXRlLnN0YXRlICY9IH5rRW1pdHRlZFJlYWRhYmxlXG5cbiAgLy8gSWYgd2UncmUgZG9pbmcgcmVhZCgwKSB0byB0cmlnZ2VyIGEgcmVhZGFibGUgZXZlbnQsIGJ1dCB3ZVxuICAvLyBhbHJlYWR5IGhhdmUgYSBidW5jaCBvZiBkYXRhIGluIHRoZSBidWZmZXIsIHRoZW4ganVzdCB0cmlnZ2VyXG4gIC8vIHRoZSAncmVhZGFibGUnIGV2ZW50IGFuZCBtb3ZlIG9uLlxuICBpZiAoXG4gICAgbiA9PT0gMCAmJlxuICAgIHN0YXRlLm5lZWRSZWFkYWJsZSAmJlxuICAgICgoc3RhdGUuaGlnaFdhdGVyTWFyayAhPT0gMCA/IHN0YXRlLmxlbmd0aCA+PSBzdGF0ZS5oaWdoV2F0ZXJNYXJrIDogc3RhdGUubGVuZ3RoID4gMCkgfHwgc3RhdGUuZW5kZWQpXG4gICkge1xuICAgIGRlYnVnKCdyZWFkOiBlbWl0UmVhZGFibGUnLCBzdGF0ZS5sZW5ndGgsIHN0YXRlLmVuZGVkKVxuICAgIGlmIChzdGF0ZS5sZW5ndGggPT09IDAgJiYgc3RhdGUuZW5kZWQpIGVuZFJlYWRhYmxlKHRoaXMpXG4gICAgZWxzZSBlbWl0UmVhZGFibGUodGhpcylcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIG4gPSBob3dNdWNoVG9SZWFkKG4sIHN0YXRlKVxuXG4gIC8vIElmIHdlJ3ZlIGVuZGVkLCBhbmQgd2UncmUgbm93IGNsZWFyLCB0aGVuIGZpbmlzaCBpdCB1cC5cbiAgaWYgKG4gPT09IDAgJiYgc3RhdGUuZW5kZWQpIHtcbiAgICBpZiAoc3RhdGUubGVuZ3RoID09PSAwKSBlbmRSZWFkYWJsZSh0aGlzKVxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvLyBBbGwgdGhlIGFjdHVhbCBjaHVuayBnZW5lcmF0aW9uIGxvZ2ljIG5lZWRzIHRvIGJlXG4gIC8vICpiZWxvdyogdGhlIGNhbGwgdG8gX3JlYWQuICBUaGUgcmVhc29uIGlzIHRoYXQgaW4gY2VydGFpblxuICAvLyBzeW50aGV0aWMgc3RyZWFtIGNhc2VzLCBzdWNoIGFzIHBhc3N0aHJvdWdoIHN0cmVhbXMsIF9yZWFkXG4gIC8vIG1heSBiZSBhIGNvbXBsZXRlbHkgc3luY2hyb25vdXMgb3BlcmF0aW9uIHdoaWNoIG1heSBjaGFuZ2VcbiAgLy8gdGhlIHN0YXRlIG9mIHRoZSByZWFkIGJ1ZmZlciwgcHJvdmlkaW5nIGVub3VnaCBkYXRhIHdoZW5cbiAgLy8gYmVmb3JlIHRoZXJlIHdhcyAqbm90KiBlbm91Z2guXG4gIC8vXG4gIC8vIFNvLCB0aGUgc3RlcHMgYXJlOlxuICAvLyAxLiBGaWd1cmUgb3V0IHdoYXQgdGhlIHN0YXRlIG9mIHRoaW5ncyB3aWxsIGJlIGFmdGVyIHdlIGRvXG4gIC8vIGEgcmVhZCBmcm9tIHRoZSBidWZmZXIuXG4gIC8vXG4gIC8vIDIuIElmIHRoYXQgcmVzdWx0aW5nIHN0YXRlIHdpbGwgdHJpZ2dlciBhIF9yZWFkLCB0aGVuIGNhbGwgX3JlYWQuXG4gIC8vIE5vdGUgdGhhdCB0aGlzIG1heSBiZSBhc3luY2hyb25vdXMsIG9yIHN5bmNocm9ub3VzLiAgWWVzLCBpdCBpc1xuICAvLyBkZWVwbHkgdWdseSB0byB3cml0ZSBBUElzIHRoaXMgd2F5LCBidXQgdGhhdCBzdGlsbCBkb2Vzbid0IG1lYW5cbiAgLy8gdGhhdCB0aGUgUmVhZGFibGUgY2xhc3Mgc2hvdWxkIGJlaGF2ZSBpbXByb3Blcmx5LCBhcyBzdHJlYW1zIGFyZVxuICAvLyBkZXNpZ25lZCB0byBiZSBzeW5jL2FzeW5jIGFnbm9zdGljLlxuICAvLyBUYWtlIG5vdGUgaWYgdGhlIF9yZWFkIGNhbGwgaXMgc3luYyBvciBhc3luYyAoaWUsIGlmIHRoZSByZWFkIGNhbGxcbiAgLy8gaGFzIHJldHVybmVkIHlldCksIHNvIHRoYXQgd2Uga25vdyB3aGV0aGVyIG9yIG5vdCBpdCdzIHNhZmUgdG8gZW1pdFxuICAvLyAncmVhZGFibGUnIGV0Yy5cbiAgLy9cbiAgLy8gMy4gQWN0dWFsbHkgcHVsbCB0aGUgcmVxdWVzdGVkIGNodW5rcyBvdXQgb2YgdGhlIGJ1ZmZlciBhbmQgcmV0dXJuLlxuXG4gIC8vIGlmIHdlIG5lZWQgYSByZWFkYWJsZSBldmVudCwgdGhlbiB3ZSBuZWVkIHRvIGRvIHNvbWUgcmVhZGluZy5cbiAgbGV0IGRvUmVhZCA9IChzdGF0ZS5zdGF0ZSAmIGtOZWVkUmVhZGFibGUpICE9PSAwXG4gIGRlYnVnKCduZWVkIHJlYWRhYmxlJywgZG9SZWFkKVxuXG4gIC8vIElmIHdlIGN1cnJlbnRseSBoYXZlIGxlc3MgdGhhbiB0aGUgaGlnaFdhdGVyTWFyaywgdGhlbiBhbHNvIHJlYWQgc29tZS5cbiAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCB8fCBzdGF0ZS5sZW5ndGggLSBuIDwgc3RhdGUuaGlnaFdhdGVyTWFyaykge1xuICAgIGRvUmVhZCA9IHRydWVcbiAgICBkZWJ1ZygnbGVuZ3RoIGxlc3MgdGhhbiB3YXRlcm1hcmsnLCBkb1JlYWQpXG4gIH1cblxuICAvLyBIb3dldmVyLCBpZiB3ZSd2ZSBlbmRlZCwgdGhlbiB0aGVyZSdzIG5vIHBvaW50LCBpZiB3ZSdyZSBhbHJlYWR5XG4gIC8vIHJlYWRpbmcsIHRoZW4gaXQncyB1bm5lY2Vzc2FyeSwgaWYgd2UncmUgY29uc3RydWN0aW5nIHdlIGhhdmUgdG8gd2FpdCxcbiAgLy8gYW5kIGlmIHdlJ3JlIGRlc3Ryb3llZCBvciBlcnJvcmVkLCB0aGVuIGl0J3Mgbm90IGFsbG93ZWQsXG4gIGlmIChzdGF0ZS5lbmRlZCB8fCBzdGF0ZS5yZWFkaW5nIHx8IHN0YXRlLmRlc3Ryb3llZCB8fCBzdGF0ZS5lcnJvcmVkIHx8ICFzdGF0ZS5jb25zdHJ1Y3RlZCkge1xuICAgIGRvUmVhZCA9IGZhbHNlXG4gICAgZGVidWcoJ3JlYWRpbmcsIGVuZGVkIG9yIGNvbnN0cnVjdGluZycsIGRvUmVhZClcbiAgfSBlbHNlIGlmIChkb1JlYWQpIHtcbiAgICBkZWJ1ZygnZG8gcmVhZCcpXG4gICAgc3RhdGUuc3RhdGUgfD0ga1JlYWRpbmcgfCBrU3luY1xuICAgIC8vIElmIHRoZSBsZW5ndGggaXMgY3VycmVudGx5IHplcm8sIHRoZW4gd2UgKm5lZWQqIGEgcmVhZGFibGUgZXZlbnQuXG4gICAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCkgc3RhdGUuc3RhdGUgfD0ga05lZWRSZWFkYWJsZVxuXG4gICAgLy8gQ2FsbCBpbnRlcm5hbCByZWFkIG1ldGhvZFxuICAgIHRyeSB7XG4gICAgICB0aGlzLl9yZWFkKHN0YXRlLmhpZ2hXYXRlck1hcmspXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJvck9yRGVzdHJveSh0aGlzLCBlcnIpXG4gICAgfVxuICAgIHN0YXRlLnN0YXRlICY9IH5rU3luY1xuXG4gICAgLy8gSWYgX3JlYWQgcHVzaGVkIGRhdGEgc3luY2hyb25vdXNseSwgdGhlbiBgcmVhZGluZ2Agd2lsbCBiZSBmYWxzZSxcbiAgICAvLyBhbmQgd2UgbmVlZCB0byByZS1ldmFsdWF0ZSBob3cgbXVjaCBkYXRhIHdlIGNhbiByZXR1cm4gdG8gdGhlIHVzZXIuXG4gICAgaWYgKCFzdGF0ZS5yZWFkaW5nKSBuID0gaG93TXVjaFRvUmVhZChuT3JpZywgc3RhdGUpXG4gIH1cbiAgbGV0IHJldFxuICBpZiAobiA+IDApIHJldCA9IGZyb21MaXN0KG4sIHN0YXRlKVxuICBlbHNlIHJldCA9IG51bGxcbiAgaWYgKHJldCA9PT0gbnVsbCkge1xuICAgIHN0YXRlLm5lZWRSZWFkYWJsZSA9IHN0YXRlLmxlbmd0aCA8PSBzdGF0ZS5oaWdoV2F0ZXJNYXJrXG4gICAgbiA9IDBcbiAgfSBlbHNlIHtcbiAgICBzdGF0ZS5sZW5ndGggLT0gblxuICAgIGlmIChzdGF0ZS5tdWx0aUF3YWl0RHJhaW4pIHtcbiAgICAgIHN0YXRlLmF3YWl0RHJhaW5Xcml0ZXJzLmNsZWFyKClcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUuYXdhaXREcmFpbldyaXRlcnMgPSBudWxsXG4gICAgfVxuICB9XG4gIGlmIChzdGF0ZS5sZW5ndGggPT09IDApIHtcbiAgICAvLyBJZiB3ZSBoYXZlIG5vdGhpbmcgaW4gdGhlIGJ1ZmZlciwgdGhlbiB3ZSB3YW50IHRvIGtub3dcbiAgICAvLyBhcyBzb29uIGFzIHdlICpkbyogZ2V0IHNvbWV0aGluZyBpbnRvIHRoZSBidWZmZXIuXG4gICAgaWYgKCFzdGF0ZS5lbmRlZCkgc3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZVxuXG4gICAgLy8gSWYgd2UgdHJpZWQgdG8gcmVhZCgpIHBhc3QgdGhlIEVPRiwgdGhlbiBlbWl0IGVuZCBvbiB0aGUgbmV4dCB0aWNrLlxuICAgIGlmIChuT3JpZyAhPT0gbiAmJiBzdGF0ZS5lbmRlZCkgZW5kUmVhZGFibGUodGhpcylcbiAgfVxuICBpZiAocmV0ICE9PSBudWxsICYmICFzdGF0ZS5lcnJvckVtaXR0ZWQgJiYgIXN0YXRlLmNsb3NlRW1pdHRlZCkge1xuICAgIHN0YXRlLmRhdGFFbWl0dGVkID0gdHJ1ZVxuICAgIHRoaXMuZW1pdCgnZGF0YScsIHJldClcbiAgfVxuICByZXR1cm4gcmV0XG59XG5mdW5jdGlvbiBvbkVvZkNodW5rKHN0cmVhbSwgc3RhdGUpIHtcbiAgZGVidWcoJ29uRW9mQ2h1bmsnKVxuICBpZiAoc3RhdGUuZW5kZWQpIHJldHVyblxuICBpZiAoc3RhdGUuZGVjb2Rlcikge1xuICAgIGNvbnN0IGNodW5rID0gc3RhdGUuZGVjb2Rlci5lbmQoKVxuICAgIGlmIChjaHVuayAmJiBjaHVuay5sZW5ndGgpIHtcbiAgICAgIHN0YXRlLmJ1ZmZlci5wdXNoKGNodW5rKVxuICAgICAgc3RhdGUubGVuZ3RoICs9IHN0YXRlLm9iamVjdE1vZGUgPyAxIDogY2h1bmsubGVuZ3RoXG4gICAgfVxuICB9XG4gIHN0YXRlLmVuZGVkID0gdHJ1ZVxuICBpZiAoc3RhdGUuc3luYykge1xuICAgIC8vIElmIHdlIGFyZSBzeW5jLCB3YWl0IHVudGlsIG5leHQgdGljayB0byBlbWl0IHRoZSBkYXRhLlxuICAgIC8vIE90aGVyd2lzZSB3ZSByaXNrIGVtaXR0aW5nIGRhdGEgaW4gdGhlIGZsb3coKVxuICAgIC8vIHRoZSByZWFkYWJsZSBjb2RlIHRyaWdnZXJzIGR1cmluZyBhIHJlYWQoKSBjYWxsLlxuICAgIGVtaXRSZWFkYWJsZShzdHJlYW0pXG4gIH0gZWxzZSB7XG4gICAgLy8gRW1pdCAncmVhZGFibGUnIG5vdyB0byBtYWtlIHN1cmUgaXQgZ2V0cyBwaWNrZWQgdXAuXG4gICAgc3RhdGUubmVlZFJlYWRhYmxlID0gZmFsc2VcbiAgICBzdGF0ZS5lbWl0dGVkUmVhZGFibGUgPSB0cnVlXG4gICAgLy8gV2UgaGF2ZSB0byBlbWl0IHJlYWRhYmxlIG5vdyB0aGF0IHdlIGFyZSBFT0YuIE1vZHVsZXNcbiAgICAvLyBpbiB0aGUgZWNvc3lzdGVtIChlLmcuIGRpY2VyKSByZWx5IG9uIHRoaXMgZXZlbnQgYmVpbmcgc3luYy5cbiAgICBlbWl0UmVhZGFibGVfKHN0cmVhbSlcbiAgfVxufVxuXG4vLyBEb24ndCBlbWl0IHJlYWRhYmxlIHJpZ2h0IGF3YXkgaW4gc3luYyBtb2RlLCBiZWNhdXNlIHRoaXMgY2FuIHRyaWdnZXJcbi8vIGFub3RoZXIgcmVhZCgpIGNhbGwgPT4gc3RhY2sgb3ZlcmZsb3cuICBUaGlzIHdheSwgaXQgbWlnaHQgdHJpZ2dlclxuLy8gYSBuZXh0VGljayByZWN1cnNpb24gd2FybmluZywgYnV0IHRoYXQncyBub3Qgc28gYmFkLlxuZnVuY3Rpb24gZW1pdFJlYWRhYmxlKHN0cmVhbSkge1xuICBjb25zdCBzdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZVxuICBkZWJ1ZygnZW1pdFJlYWRhYmxlJywgc3RhdGUubmVlZFJlYWRhYmxlLCBzdGF0ZS5lbWl0dGVkUmVhZGFibGUpXG4gIHN0YXRlLm5lZWRSZWFkYWJsZSA9IGZhbHNlXG4gIGlmICghc3RhdGUuZW1pdHRlZFJlYWRhYmxlKSB7XG4gICAgZGVidWcoJ2VtaXRSZWFkYWJsZScsIHN0YXRlLmZsb3dpbmcpXG4gICAgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gdHJ1ZVxuICAgIHByb2Nlc3MubmV4dFRpY2soZW1pdFJlYWRhYmxlXywgc3RyZWFtKVxuICB9XG59XG5mdW5jdGlvbiBlbWl0UmVhZGFibGVfKHN0cmVhbSkge1xuICBjb25zdCBzdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZVxuICBkZWJ1ZygnZW1pdFJlYWRhYmxlXycsIHN0YXRlLmRlc3Ryb3llZCwgc3RhdGUubGVuZ3RoLCBzdGF0ZS5lbmRlZClcbiAgaWYgKCFzdGF0ZS5kZXN0cm95ZWQgJiYgIXN0YXRlLmVycm9yZWQgJiYgKHN0YXRlLmxlbmd0aCB8fCBzdGF0ZS5lbmRlZCkpIHtcbiAgICBzdHJlYW0uZW1pdCgncmVhZGFibGUnKVxuICAgIHN0YXRlLmVtaXR0ZWRSZWFkYWJsZSA9IGZhbHNlXG4gIH1cblxuICAvLyBUaGUgc3RyZWFtIG5lZWRzIGFub3RoZXIgcmVhZGFibGUgZXZlbnQgaWY6XG4gIC8vIDEuIEl0IGlzIG5vdCBmbG93aW5nLCBhcyB0aGUgZmxvdyBtZWNoYW5pc20gd2lsbCB0YWtlXG4gIC8vICAgIGNhcmUgb2YgaXQuXG4gIC8vIDIuIEl0IGlzIG5vdCBlbmRlZC5cbiAgLy8gMy4gSXQgaXMgYmVsb3cgdGhlIGhpZ2hXYXRlck1hcmssIHNvIHdlIGNhbiBzY2hlZHVsZVxuICAvLyAgICBhbm90aGVyIHJlYWRhYmxlIGxhdGVyLlxuICBzdGF0ZS5uZWVkUmVhZGFibGUgPSAhc3RhdGUuZmxvd2luZyAmJiAhc3RhdGUuZW5kZWQgJiYgc3RhdGUubGVuZ3RoIDw9IHN0YXRlLmhpZ2hXYXRlck1hcmtcbiAgZmxvdyhzdHJlYW0pXG59XG5cbi8vIEF0IHRoaXMgcG9pbnQsIHRoZSB1c2VyIGhhcyBwcmVzdW1hYmx5IHNlZW4gdGhlICdyZWFkYWJsZScgZXZlbnQsXG4vLyBhbmQgY2FsbGVkIHJlYWQoKSB0byBjb25zdW1lIHNvbWUgZGF0YS4gIHRoYXQgbWF5IGhhdmUgdHJpZ2dlcmVkXG4vLyBpbiB0dXJuIGFub3RoZXIgX3JlYWQobikgY2FsbCwgaW4gd2hpY2ggY2FzZSByZWFkaW5nID0gdHJ1ZSBpZlxuLy8gaXQncyBpbiBwcm9ncmVzcy5cbi8vIEhvd2V2ZXIsIGlmIHdlJ3JlIG5vdCBlbmRlZCwgb3IgcmVhZGluZywgYW5kIHRoZSBsZW5ndGggPCBod20sXG4vLyB0aGVuIGdvIGFoZWFkIGFuZCB0cnkgdG8gcmVhZCBzb21lIG1vcmUgcHJlZW1wdGl2ZWx5LlxuZnVuY3Rpb24gbWF5YmVSZWFkTW9yZShzdHJlYW0sIHN0YXRlKSB7XG4gIGlmICghc3RhdGUucmVhZGluZ01vcmUgJiYgc3RhdGUuY29uc3RydWN0ZWQpIHtcbiAgICBzdGF0ZS5yZWFkaW5nTW9yZSA9IHRydWVcbiAgICBwcm9jZXNzLm5leHRUaWNrKG1heWJlUmVhZE1vcmVfLCBzdHJlYW0sIHN0YXRlKVxuICB9XG59XG5mdW5jdGlvbiBtYXliZVJlYWRNb3JlXyhzdHJlYW0sIHN0YXRlKSB7XG4gIC8vIEF0dGVtcHQgdG8gcmVhZCBtb3JlIGRhdGEgaWYgd2Ugc2hvdWxkLlxuICAvL1xuICAvLyBUaGUgY29uZGl0aW9ucyBmb3IgcmVhZGluZyBtb3JlIGRhdGEgYXJlIChvbmUgb2YpOlxuICAvLyAtIE5vdCBlbm91Z2ggZGF0YSBidWZmZXJlZCAoc3RhdGUubGVuZ3RoIDwgc3RhdGUuaGlnaFdhdGVyTWFyaykuIFRoZSBsb29wXG4gIC8vICAgaXMgcmVzcG9uc2libGUgZm9yIGZpbGxpbmcgdGhlIGJ1ZmZlciB3aXRoIGVub3VnaCBkYXRhIGlmIHN1Y2ggZGF0YVxuICAvLyAgIGlzIGF2YWlsYWJsZS4gSWYgaGlnaFdhdGVyTWFyayBpcyAwIGFuZCB3ZSBhcmUgbm90IGluIHRoZSBmbG93aW5nIG1vZGVcbiAgLy8gICB3ZSBzaG91bGQgX25vdF8gYXR0ZW1wdCB0byBidWZmZXIgYW55IGV4dHJhIGRhdGEuIFdlJ2xsIGdldCBtb3JlIGRhdGFcbiAgLy8gICB3aGVuIHRoZSBzdHJlYW0gY29uc3VtZXIgY2FsbHMgcmVhZCgpIGluc3RlYWQuXG4gIC8vIC0gTm8gZGF0YSBpbiB0aGUgYnVmZmVyLCBhbmQgdGhlIHN0cmVhbSBpcyBpbiBmbG93aW5nIG1vZGUuIEluIHRoaXMgbW9kZVxuICAvLyAgIHRoZSBsb29wIGJlbG93IGlzIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyByZWFkKCkgaXMgY2FsbGVkLiBGYWlsaW5nIHRvXG4gIC8vICAgY2FsbCByZWFkIGhlcmUgd291bGQgYWJvcnQgdGhlIGZsb3cgYW5kIHRoZXJlJ3Mgbm8gb3RoZXIgbWVjaGFuaXNtIGZvclxuICAvLyAgIGNvbnRpbnVpbmcgdGhlIGZsb3cgaWYgdGhlIHN0cmVhbSBjb25zdW1lciBoYXMganVzdCBzdWJzY3JpYmVkIHRvIHRoZVxuICAvLyAgICdkYXRhJyBldmVudC5cbiAgLy9cbiAgLy8gSW4gYWRkaXRpb24gdG8gdGhlIGFib3ZlIGNvbmRpdGlvbnMgdG8ga2VlcCByZWFkaW5nIGRhdGEsIHRoZSBmb2xsb3dpbmdcbiAgLy8gY29uZGl0aW9ucyBwcmV2ZW50IHRoZSBkYXRhIGZyb20gYmVpbmcgcmVhZDpcbiAgLy8gLSBUaGUgc3RyZWFtIGhhcyBlbmRlZCAoc3RhdGUuZW5kZWQpLlxuICAvLyAtIFRoZXJlIGlzIGFscmVhZHkgYSBwZW5kaW5nICdyZWFkJyBvcGVyYXRpb24gKHN0YXRlLnJlYWRpbmcpLiBUaGlzIGlzIGFcbiAgLy8gICBjYXNlIHdoZXJlIHRoZSBzdHJlYW0gaGFzIGNhbGxlZCB0aGUgaW1wbGVtZW50YXRpb24gZGVmaW5lZCBfcmVhZCgpXG4gIC8vICAgbWV0aG9kLCBidXQgdGhleSBhcmUgcHJvY2Vzc2luZyB0aGUgY2FsbCBhc3luY2hyb25vdXNseSBhbmQgaGF2ZSBfbm90X1xuICAvLyAgIGNhbGxlZCBwdXNoKCkgd2l0aCBuZXcgZGF0YS4gSW4gdGhpcyBjYXNlIHdlIHNraXAgcGVyZm9ybWluZyBtb3JlXG4gIC8vICAgcmVhZCgpcy4gVGhlIGV4ZWN1dGlvbiBlbmRzIGluIHRoaXMgbWV0aG9kIGFnYWluIGFmdGVyIHRoZSBfcmVhZCgpIGVuZHNcbiAgLy8gICB1cCBjYWxsaW5nIHB1c2goKSB3aXRoIG1vcmUgZGF0YS5cbiAgd2hpbGUgKFxuICAgICFzdGF0ZS5yZWFkaW5nICYmXG4gICAgIXN0YXRlLmVuZGVkICYmXG4gICAgKHN0YXRlLmxlbmd0aCA8IHN0YXRlLmhpZ2hXYXRlck1hcmsgfHwgKHN0YXRlLmZsb3dpbmcgJiYgc3RhdGUubGVuZ3RoID09PSAwKSlcbiAgKSB7XG4gICAgY29uc3QgbGVuID0gc3RhdGUubGVuZ3RoXG4gICAgZGVidWcoJ21heWJlUmVhZE1vcmUgcmVhZCAwJylcbiAgICBzdHJlYW0ucmVhZCgwKVxuICAgIGlmIChsZW4gPT09IHN0YXRlLmxlbmd0aClcbiAgICAgIC8vIERpZG4ndCBnZXQgYW55IGRhdGEsIHN0b3Agc3Bpbm5pbmcuXG4gICAgICBicmVha1xuICB9XG4gIHN0YXRlLnJlYWRpbmdNb3JlID0gZmFsc2Vcbn1cblxuLy8gQWJzdHJhY3QgbWV0aG9kLiAgdG8gYmUgb3ZlcnJpZGRlbiBpbiBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBjbGFzc2VzLlxuLy8gY2FsbCBjYihlciwgZGF0YSkgd2hlcmUgZGF0YSBpcyA8PSBuIGluIGxlbmd0aC5cbi8vIGZvciB2aXJ0dWFsIChub24tc3RyaW5nLCBub24tYnVmZmVyKSBzdHJlYW1zLCBcImxlbmd0aFwiIGlzIHNvbWV3aGF0XG4vLyBhcmJpdHJhcnksIGFuZCBwZXJoYXBzIG5vdCB2ZXJ5IG1lYW5pbmdmdWwuXG5SZWFkYWJsZS5wcm90b3R5cGUuX3JlYWQgPSBmdW5jdGlvbiAobikge1xuICB0aHJvdyBuZXcgRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQoJ19yZWFkKCknKVxufVxuUmVhZGFibGUucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbiAoZGVzdCwgcGlwZU9wdHMpIHtcbiAgY29uc3Qgc3JjID0gdGhpc1xuICBjb25zdCBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGVcbiAgaWYgKHN0YXRlLnBpcGVzLmxlbmd0aCA9PT0gMSkge1xuICAgIGlmICghc3RhdGUubXVsdGlBd2FpdERyYWluKSB7XG4gICAgICBzdGF0ZS5tdWx0aUF3YWl0RHJhaW4gPSB0cnVlXG4gICAgICBzdGF0ZS5hd2FpdERyYWluV3JpdGVycyA9IG5ldyBTYWZlU2V0KHN0YXRlLmF3YWl0RHJhaW5Xcml0ZXJzID8gW3N0YXRlLmF3YWl0RHJhaW5Xcml0ZXJzXSA6IFtdKVxuICAgIH1cbiAgfVxuICBzdGF0ZS5waXBlcy5wdXNoKGRlc3QpXG4gIGRlYnVnKCdwaXBlIGNvdW50PSVkIG9wdHM9JWonLCBzdGF0ZS5waXBlcy5sZW5ndGgsIHBpcGVPcHRzKVxuICBjb25zdCBkb0VuZCA9ICghcGlwZU9wdHMgfHwgcGlwZU9wdHMuZW5kICE9PSBmYWxzZSkgJiYgZGVzdCAhPT0gcHJvY2Vzcy5zdGRvdXQgJiYgZGVzdCAhPT0gcHJvY2Vzcy5zdGRlcnJcbiAgY29uc3QgZW5kRm4gPSBkb0VuZCA/IG9uZW5kIDogdW5waXBlXG4gIGlmIChzdGF0ZS5lbmRFbWl0dGVkKSBwcm9jZXNzLm5leHRUaWNrKGVuZEZuKVxuICBlbHNlIHNyYy5vbmNlKCdlbmQnLCBlbmRGbilcbiAgZGVzdC5vbigndW5waXBlJywgb251bnBpcGUpXG4gIGZ1bmN0aW9uIG9udW5waXBlKHJlYWRhYmxlLCB1bnBpcGVJbmZvKSB7XG4gICAgZGVidWcoJ29udW5waXBlJylcbiAgICBpZiAocmVhZGFibGUgPT09IHNyYykge1xuICAgICAgaWYgKHVucGlwZUluZm8gJiYgdW5waXBlSW5mby5oYXNVbnBpcGVkID09PSBmYWxzZSkge1xuICAgICAgICB1bnBpcGVJbmZvLmhhc1VucGlwZWQgPSB0cnVlXG4gICAgICAgIGNsZWFudXAoKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBvbmVuZCgpIHtcbiAgICBkZWJ1Zygnb25lbmQnKVxuICAgIGRlc3QuZW5kKClcbiAgfVxuICBsZXQgb25kcmFpblxuICBsZXQgY2xlYW5lZFVwID0gZmFsc2VcbiAgZnVuY3Rpb24gY2xlYW51cCgpIHtcbiAgICBkZWJ1ZygnY2xlYW51cCcpXG4gICAgLy8gQ2xlYW51cCBldmVudCBoYW5kbGVycyBvbmNlIHRoZSBwaXBlIGlzIGJyb2tlbi5cbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uY2xvc2UpXG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZmluaXNoJywgb25maW5pc2gpXG4gICAgaWYgKG9uZHJhaW4pIHtcbiAgICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2RyYWluJywgb25kcmFpbilcbiAgICB9XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbmVycm9yKVxuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ3VucGlwZScsIG9udW5waXBlKVxuICAgIHNyYy5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25lbmQpXG4gICAgc3JjLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCB1bnBpcGUpXG4gICAgc3JjLnJlbW92ZUxpc3RlbmVyKCdkYXRhJywgb25kYXRhKVxuICAgIGNsZWFuZWRVcCA9IHRydWVcblxuICAgIC8vIElmIHRoZSByZWFkZXIgaXMgd2FpdGluZyBmb3IgYSBkcmFpbiBldmVudCBmcm9tIHRoaXNcbiAgICAvLyBzcGVjaWZpYyB3cml0ZXIsIHRoZW4gaXQgd291bGQgY2F1c2UgaXQgdG8gbmV2ZXIgc3RhcnRcbiAgICAvLyBmbG93aW5nIGFnYWluLlxuICAgIC8vIFNvLCBpZiB0aGlzIGlzIGF3YWl0aW5nIGEgZHJhaW4sIHRoZW4gd2UganVzdCBjYWxsIGl0IG5vdy5cbiAgICAvLyBJZiB3ZSBkb24ndCBrbm93LCB0aGVuIGFzc3VtZSB0aGF0IHdlIGFyZSB3YWl0aW5nIGZvciBvbmUuXG4gICAgaWYgKG9uZHJhaW4gJiYgc3RhdGUuYXdhaXREcmFpbldyaXRlcnMgJiYgKCFkZXN0Ll93cml0YWJsZVN0YXRlIHx8IGRlc3QuX3dyaXRhYmxlU3RhdGUubmVlZERyYWluKSkgb25kcmFpbigpXG4gIH1cbiAgZnVuY3Rpb24gcGF1c2UoKSB7XG4gICAgLy8gSWYgdGhlIHVzZXIgdW5waXBlZCBkdXJpbmcgYGRlc3Qud3JpdGUoKWAsIGl0IGlzIHBvc3NpYmxlXG4gICAgLy8gdG8gZ2V0IHN0dWNrIGluIGEgcGVybWFuZW50bHkgcGF1c2VkIHN0YXRlIGlmIHRoYXQgd3JpdGVcbiAgICAvLyBhbHNvIHJldHVybmVkIGZhbHNlLlxuICAgIC8vID0+IENoZWNrIHdoZXRoZXIgYGRlc3RgIGlzIHN0aWxsIGEgcGlwaW5nIGRlc3RpbmF0aW9uLlxuICAgIGlmICghY2xlYW5lZFVwKSB7XG4gICAgICBpZiAoc3RhdGUucGlwZXMubGVuZ3RoID09PSAxICYmIHN0YXRlLnBpcGVzWzBdID09PSBkZXN0KSB7XG4gICAgICAgIGRlYnVnKCdmYWxzZSB3cml0ZSByZXNwb25zZSwgcGF1c2UnLCAwKVxuICAgICAgICBzdGF0ZS5hd2FpdERyYWluV3JpdGVycyA9IGRlc3RcbiAgICAgICAgc3RhdGUubXVsdGlBd2FpdERyYWluID0gZmFsc2VcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUucGlwZXMubGVuZ3RoID4gMSAmJiBzdGF0ZS5waXBlcy5pbmNsdWRlcyhkZXN0KSkge1xuICAgICAgICBkZWJ1ZygnZmFsc2Ugd3JpdGUgcmVzcG9uc2UsIHBhdXNlJywgc3RhdGUuYXdhaXREcmFpbldyaXRlcnMuc2l6ZSlcbiAgICAgICAgc3RhdGUuYXdhaXREcmFpbldyaXRlcnMuYWRkKGRlc3QpXG4gICAgICB9XG4gICAgICBzcmMucGF1c2UoKVxuICAgIH1cbiAgICBpZiAoIW9uZHJhaW4pIHtcbiAgICAgIC8vIFdoZW4gdGhlIGRlc3QgZHJhaW5zLCBpdCByZWR1Y2VzIHRoZSBhd2FpdERyYWluIGNvdW50ZXJcbiAgICAgIC8vIG9uIHRoZSBzb3VyY2UuICBUaGlzIHdvdWxkIGJlIG1vcmUgZWxlZ2FudCB3aXRoIGEgLm9uY2UoKVxuICAgICAgLy8gaGFuZGxlciBpbiBmbG93KCksIGJ1dCBhZGRpbmcgYW5kIHJlbW92aW5nIHJlcGVhdGVkbHkgaXNcbiAgICAgIC8vIHRvbyBzbG93LlxuICAgICAgb25kcmFpbiA9IHBpcGVPbkRyYWluKHNyYywgZGVzdClcbiAgICAgIGRlc3Qub24oJ2RyYWluJywgb25kcmFpbilcbiAgICB9XG4gIH1cbiAgc3JjLm9uKCdkYXRhJywgb25kYXRhKVxuICBmdW5jdGlvbiBvbmRhdGEoY2h1bmspIHtcbiAgICBkZWJ1Zygnb25kYXRhJylcbiAgICBjb25zdCByZXQgPSBkZXN0LndyaXRlKGNodW5rKVxuICAgIGRlYnVnKCdkZXN0LndyaXRlJywgcmV0KVxuICAgIGlmIChyZXQgPT09IGZhbHNlKSB7XG4gICAgICBwYXVzZSgpXG4gICAgfVxuICB9XG5cbiAgLy8gSWYgdGhlIGRlc3QgaGFzIGFuIGVycm9yLCB0aGVuIHN0b3AgcGlwaW5nIGludG8gaXQuXG4gIC8vIEhvd2V2ZXIsIGRvbid0IHN1cHByZXNzIHRoZSB0aHJvd2luZyBiZWhhdmlvciBmb3IgdGhpcy5cbiAgZnVuY3Rpb24gb25lcnJvcihlcikge1xuICAgIGRlYnVnKCdvbmVycm9yJywgZXIpXG4gICAgdW5waXBlKClcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uZXJyb3IpXG4gICAgaWYgKGRlc3QubGlzdGVuZXJDb3VudCgnZXJyb3InKSA9PT0gMCkge1xuICAgICAgY29uc3QgcyA9IGRlc3QuX3dyaXRhYmxlU3RhdGUgfHwgZGVzdC5fcmVhZGFibGVTdGF0ZVxuICAgICAgaWYgKHMgJiYgIXMuZXJyb3JFbWl0dGVkKSB7XG4gICAgICAgIC8vIFVzZXIgaW5jb3JyZWN0bHkgZW1pdHRlZCAnZXJyb3InIGRpcmVjdGx5IG9uIHRoZSBzdHJlYW0uXG4gICAgICAgIGVycm9yT3JEZXN0cm95KGRlc3QsIGVyKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVzdC5lbWl0KCdlcnJvcicsIGVyKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIE1ha2Ugc3VyZSBvdXIgZXJyb3IgaGFuZGxlciBpcyBhdHRhY2hlZCBiZWZvcmUgdXNlcmxhbmQgb25lcy5cbiAgcHJlcGVuZExpc3RlbmVyKGRlc3QsICdlcnJvcicsIG9uZXJyb3IpXG5cbiAgLy8gQm90aCBjbG9zZSBhbmQgZmluaXNoIHNob3VsZCB0cmlnZ2VyIHVucGlwZSwgYnV0IG9ubHkgb25jZS5cbiAgZnVuY3Rpb24gb25jbG9zZSgpIHtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdmaW5pc2gnLCBvbmZpbmlzaClcbiAgICB1bnBpcGUoKVxuICB9XG4gIGRlc3Qub25jZSgnY2xvc2UnLCBvbmNsb3NlKVxuICBmdW5jdGlvbiBvbmZpbmlzaCgpIHtcbiAgICBkZWJ1Zygnb25maW5pc2gnKVxuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgb25jbG9zZSlcbiAgICB1bnBpcGUoKVxuICB9XG4gIGRlc3Qub25jZSgnZmluaXNoJywgb25maW5pc2gpXG4gIGZ1bmN0aW9uIHVucGlwZSgpIHtcbiAgICBkZWJ1ZygndW5waXBlJylcbiAgICBzcmMudW5waXBlKGRlc3QpXG4gIH1cblxuICAvLyBUZWxsIHRoZSBkZXN0IHRoYXQgaXQncyBiZWluZyBwaXBlZCB0by5cbiAgZGVzdC5lbWl0KCdwaXBlJywgc3JjKVxuXG4gIC8vIFN0YXJ0IHRoZSBmbG93IGlmIGl0IGhhc24ndCBiZWVuIHN0YXJ0ZWQgYWxyZWFkeS5cblxuICBpZiAoZGVzdC53cml0YWJsZU5lZWREcmFpbiA9PT0gdHJ1ZSkge1xuICAgIHBhdXNlKClcbiAgfSBlbHNlIGlmICghc3RhdGUuZmxvd2luZykge1xuICAgIGRlYnVnKCdwaXBlIHJlc3VtZScpXG4gICAgc3JjLnJlc3VtZSgpXG4gIH1cbiAgcmV0dXJuIGRlc3Rcbn1cbmZ1bmN0aW9uIHBpcGVPbkRyYWluKHNyYywgZGVzdCkge1xuICByZXR1cm4gZnVuY3Rpb24gcGlwZU9uRHJhaW5GdW5jdGlvblJlc3VsdCgpIHtcbiAgICBjb25zdCBzdGF0ZSA9IHNyYy5fcmVhZGFibGVTdGF0ZVxuXG4gICAgLy8gYG9uZHJhaW5gIHdpbGwgY2FsbCBkaXJlY3RseSxcbiAgICAvLyBgdGhpc2AgbWF5YmUgbm90IGEgcmVmZXJlbmNlIHRvIGRlc3QsXG4gICAgLy8gc28gd2UgdXNlIHRoZSByZWFsIGRlc3QgaGVyZS5cbiAgICBpZiAoc3RhdGUuYXdhaXREcmFpbldyaXRlcnMgPT09IGRlc3QpIHtcbiAgICAgIGRlYnVnKCdwaXBlT25EcmFpbicsIDEpXG4gICAgICBzdGF0ZS5hd2FpdERyYWluV3JpdGVycyA9IG51bGxcbiAgICB9IGVsc2UgaWYgKHN0YXRlLm11bHRpQXdhaXREcmFpbikge1xuICAgICAgZGVidWcoJ3BpcGVPbkRyYWluJywgc3RhdGUuYXdhaXREcmFpbldyaXRlcnMuc2l6ZSlcbiAgICAgIHN0YXRlLmF3YWl0RHJhaW5Xcml0ZXJzLmRlbGV0ZShkZXN0KVxuICAgIH1cbiAgICBpZiAoKCFzdGF0ZS5hd2FpdERyYWluV3JpdGVycyB8fCBzdGF0ZS5hd2FpdERyYWluV3JpdGVycy5zaXplID09PSAwKSAmJiBzcmMubGlzdGVuZXJDb3VudCgnZGF0YScpKSB7XG4gICAgICBzcmMucmVzdW1lKClcbiAgICB9XG4gIH1cbn1cblJlYWRhYmxlLnByb3RvdHlwZS51bnBpcGUgPSBmdW5jdGlvbiAoZGVzdCkge1xuICBjb25zdCBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGVcbiAgY29uc3QgdW5waXBlSW5mbyA9IHtcbiAgICBoYXNVbnBpcGVkOiBmYWxzZVxuICB9XG5cbiAgLy8gSWYgd2UncmUgbm90IHBpcGluZyBhbnl3aGVyZSwgdGhlbiBkbyBub3RoaW5nLlxuICBpZiAoc3RhdGUucGlwZXMubGVuZ3RoID09PSAwKSByZXR1cm4gdGhpc1xuICBpZiAoIWRlc3QpIHtcbiAgICAvLyByZW1vdmUgYWxsLlxuICAgIGNvbnN0IGRlc3RzID0gc3RhdGUucGlwZXNcbiAgICBzdGF0ZS5waXBlcyA9IFtdXG4gICAgdGhpcy5wYXVzZSgpXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZXN0cy5sZW5ndGg7IGkrKylcbiAgICAgIGRlc3RzW2ldLmVtaXQoJ3VucGlwZScsIHRoaXMsIHtcbiAgICAgICAgaGFzVW5waXBlZDogZmFsc2VcbiAgICAgIH0pXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8vIFRyeSB0byBmaW5kIHRoZSByaWdodCBvbmUuXG4gIGNvbnN0IGluZGV4ID0gQXJyYXlQcm90b3R5cGVJbmRleE9mKHN0YXRlLnBpcGVzLCBkZXN0KVxuICBpZiAoaW5kZXggPT09IC0xKSByZXR1cm4gdGhpc1xuICBzdGF0ZS5waXBlcy5zcGxpY2UoaW5kZXgsIDEpXG4gIGlmIChzdGF0ZS5waXBlcy5sZW5ndGggPT09IDApIHRoaXMucGF1c2UoKVxuICBkZXN0LmVtaXQoJ3VucGlwZScsIHRoaXMsIHVucGlwZUluZm8pXG4gIHJldHVybiB0aGlzXG59XG5cbi8vIFNldCB1cCBkYXRhIGV2ZW50cyBpZiB0aGV5IGFyZSBhc2tlZCBmb3Jcbi8vIEVuc3VyZSByZWFkYWJsZSBsaXN0ZW5lcnMgZXZlbnR1YWxseSBnZXQgc29tZXRoaW5nLlxuUmVhZGFibGUucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gKGV2LCBmbikge1xuICBjb25zdCByZXMgPSBTdHJlYW0ucHJvdG90eXBlLm9uLmNhbGwodGhpcywgZXYsIGZuKVxuICBjb25zdCBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGVcbiAgaWYgKGV2ID09PSAnZGF0YScpIHtcbiAgICAvLyBVcGRhdGUgcmVhZGFibGVMaXN0ZW5pbmcgc28gdGhhdCByZXN1bWUoKSBtYXkgYmUgYSBuby1vcFxuICAgIC8vIGEgZmV3IGxpbmVzIGRvd24uIFRoaXMgaXMgbmVlZGVkIHRvIHN1cHBvcnQgb25jZSgncmVhZGFibGUnKS5cbiAgICBzdGF0ZS5yZWFkYWJsZUxpc3RlbmluZyA9IHRoaXMubGlzdGVuZXJDb3VudCgncmVhZGFibGUnKSA+IDBcblxuICAgIC8vIFRyeSBzdGFydCBmbG93aW5nIG9uIG5leHQgdGljayBpZiBzdHJlYW0gaXNuJ3QgZXhwbGljaXRseSBwYXVzZWQuXG4gICAgaWYgKHN0YXRlLmZsb3dpbmcgIT09IGZhbHNlKSB0aGlzLnJlc3VtZSgpXG4gIH0gZWxzZSBpZiAoZXYgPT09ICdyZWFkYWJsZScpIHtcbiAgICBpZiAoIXN0YXRlLmVuZEVtaXR0ZWQgJiYgIXN0YXRlLnJlYWRhYmxlTGlzdGVuaW5nKSB7XG4gICAgICBzdGF0ZS5yZWFkYWJsZUxpc3RlbmluZyA9IHN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWVcbiAgICAgIHN0YXRlLmZsb3dpbmcgPSBmYWxzZVxuICAgICAgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gZmFsc2VcbiAgICAgIGRlYnVnKCdvbiByZWFkYWJsZScsIHN0YXRlLmxlbmd0aCwgc3RhdGUucmVhZGluZylcbiAgICAgIGlmIChzdGF0ZS5sZW5ndGgpIHtcbiAgICAgICAgZW1pdFJlYWRhYmxlKHRoaXMpXG4gICAgICB9IGVsc2UgaWYgKCFzdGF0ZS5yZWFkaW5nKSB7XG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soblJlYWRpbmdOZXh0VGljaywgdGhpcylcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuUmVhZGFibGUucHJvdG90eXBlLmFkZExpc3RlbmVyID0gUmVhZGFibGUucHJvdG90eXBlLm9uXG5SZWFkYWJsZS5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPSBmdW5jdGlvbiAoZXYsIGZuKSB7XG4gIGNvbnN0IHJlcyA9IFN0cmVhbS5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIuY2FsbCh0aGlzLCBldiwgZm4pXG4gIGlmIChldiA9PT0gJ3JlYWRhYmxlJykge1xuICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUgaXMgc29tZW9uZSBzdGlsbCBsaXN0ZW5pbmcgdG9cbiAgICAvLyByZWFkYWJsZSBhbmQgcmVzZXQgdGhlIHN0YXRlLiBIb3dldmVyIHRoaXMgbmVlZHMgdG8gaGFwcGVuXG4gICAgLy8gYWZ0ZXIgcmVhZGFibGUgaGFzIGJlZW4gZW1pdHRlZCBidXQgYmVmb3JlIEkvTyAobmV4dFRpY2spIHRvXG4gICAgLy8gc3VwcG9ydCBvbmNlKCdyZWFkYWJsZScsIGZuKSBjeWNsZXMuIFRoaXMgbWVhbnMgdGhhdCBjYWxsaW5nXG4gICAgLy8gcmVzdW1lIHdpdGhpbiB0aGUgc2FtZSB0aWNrIHdpbGwgaGF2ZSBub1xuICAgIC8vIGVmZmVjdC5cbiAgICBwcm9jZXNzLm5leHRUaWNrKHVwZGF0ZVJlYWRhYmxlTGlzdGVuaW5nLCB0aGlzKVxuICB9XG4gIHJldHVybiByZXNcbn1cblJlYWRhYmxlLnByb3RvdHlwZS5vZmYgPSBSZWFkYWJsZS5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXJcblJlYWRhYmxlLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBmdW5jdGlvbiAoZXYpIHtcbiAgY29uc3QgcmVzID0gU3RyZWFtLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICBpZiAoZXYgPT09ICdyZWFkYWJsZScgfHwgZXYgPT09IHVuZGVmaW5lZCkge1xuICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUgaXMgc29tZW9uZSBzdGlsbCBsaXN0ZW5pbmcgdG9cbiAgICAvLyByZWFkYWJsZSBhbmQgcmVzZXQgdGhlIHN0YXRlLiBIb3dldmVyIHRoaXMgbmVlZHMgdG8gaGFwcGVuXG4gICAgLy8gYWZ0ZXIgcmVhZGFibGUgaGFzIGJlZW4gZW1pdHRlZCBidXQgYmVmb3JlIEkvTyAobmV4dFRpY2spIHRvXG4gICAgLy8gc3VwcG9ydCBvbmNlKCdyZWFkYWJsZScsIGZuKSBjeWNsZXMuIFRoaXMgbWVhbnMgdGhhdCBjYWxsaW5nXG4gICAgLy8gcmVzdW1lIHdpdGhpbiB0aGUgc2FtZSB0aWNrIHdpbGwgaGF2ZSBub1xuICAgIC8vIGVmZmVjdC5cbiAgICBwcm9jZXNzLm5leHRUaWNrKHVwZGF0ZVJlYWRhYmxlTGlzdGVuaW5nLCB0aGlzKVxuICB9XG4gIHJldHVybiByZXNcbn1cbmZ1bmN0aW9uIHVwZGF0ZVJlYWRhYmxlTGlzdGVuaW5nKHNlbGYpIHtcbiAgY29uc3Qgc3RhdGUgPSBzZWxmLl9yZWFkYWJsZVN0YXRlXG4gIHN0YXRlLnJlYWRhYmxlTGlzdGVuaW5nID0gc2VsZi5saXN0ZW5lckNvdW50KCdyZWFkYWJsZScpID4gMFxuICBpZiAoc3RhdGUucmVzdW1lU2NoZWR1bGVkICYmIHN0YXRlW2tQYXVzZWRdID09PSBmYWxzZSkge1xuICAgIC8vIEZsb3dpbmcgbmVlZHMgdG8gYmUgc2V0IHRvIHRydWUgbm93LCBvdGhlcndpc2VcbiAgICAvLyB0aGUgdXBjb21pbmcgcmVzdW1lIHdpbGwgbm90IGZsb3cuXG4gICAgc3RhdGUuZmxvd2luZyA9IHRydWVcblxuICAgIC8vIENydWRlIHdheSB0byBjaGVjayBpZiB3ZSBzaG91bGQgcmVzdW1lLlxuICB9IGVsc2UgaWYgKHNlbGYubGlzdGVuZXJDb3VudCgnZGF0YScpID4gMCkge1xuICAgIHNlbGYucmVzdW1lKClcbiAgfSBlbHNlIGlmICghc3RhdGUucmVhZGFibGVMaXN0ZW5pbmcpIHtcbiAgICBzdGF0ZS5mbG93aW5nID0gbnVsbFxuICB9XG59XG5mdW5jdGlvbiBuUmVhZGluZ05leHRUaWNrKHNlbGYpIHtcbiAgZGVidWcoJ3JlYWRhYmxlIG5leHR0aWNrIHJlYWQgMCcpXG4gIHNlbGYucmVhZCgwKVxufVxuXG4vLyBwYXVzZSgpIGFuZCByZXN1bWUoKSBhcmUgcmVtbmFudHMgb2YgdGhlIGxlZ2FjeSByZWFkYWJsZSBzdHJlYW0gQVBJXG4vLyBJZiB0aGUgdXNlciB1c2VzIHRoZW0sIHRoZW4gc3dpdGNoIGludG8gb2xkIG1vZGUuXG5SZWFkYWJsZS5wcm90b3R5cGUucmVzdW1lID0gZnVuY3Rpb24gKCkge1xuICBjb25zdCBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGVcbiAgaWYgKCFzdGF0ZS5mbG93aW5nKSB7XG4gICAgZGVidWcoJ3Jlc3VtZScpXG4gICAgLy8gV2UgZmxvdyBvbmx5IGlmIHRoZXJlIGlzIG5vIG9uZSBsaXN0ZW5pbmdcbiAgICAvLyBmb3IgcmVhZGFibGUsIGJ1dCB3ZSBzdGlsbCBoYXZlIHRvIGNhbGxcbiAgICAvLyByZXN1bWUoKS5cbiAgICBzdGF0ZS5mbG93aW5nID0gIXN0YXRlLnJlYWRhYmxlTGlzdGVuaW5nXG4gICAgcmVzdW1lKHRoaXMsIHN0YXRlKVxuICB9XG4gIHN0YXRlW2tQYXVzZWRdID0gZmFsc2VcbiAgcmV0dXJuIHRoaXNcbn1cbmZ1bmN0aW9uIHJlc3VtZShzdHJlYW0sIHN0YXRlKSB7XG4gIGlmICghc3RhdGUucmVzdW1lU2NoZWR1bGVkKSB7XG4gICAgc3RhdGUucmVzdW1lU2NoZWR1bGVkID0gdHJ1ZVxuICAgIHByb2Nlc3MubmV4dFRpY2socmVzdW1lXywgc3RyZWFtLCBzdGF0ZSlcbiAgfVxufVxuZnVuY3Rpb24gcmVzdW1lXyhzdHJlYW0sIHN0YXRlKSB7XG4gIGRlYnVnKCdyZXN1bWUnLCBzdGF0ZS5yZWFkaW5nKVxuICBpZiAoIXN0YXRlLnJlYWRpbmcpIHtcbiAgICBzdHJlYW0ucmVhZCgwKVxuICB9XG4gIHN0YXRlLnJlc3VtZVNjaGVkdWxlZCA9IGZhbHNlXG4gIHN0cmVhbS5lbWl0KCdyZXN1bWUnKVxuICBmbG93KHN0cmVhbSlcbiAgaWYgKHN0YXRlLmZsb3dpbmcgJiYgIXN0YXRlLnJlYWRpbmcpIHN0cmVhbS5yZWFkKDApXG59XG5SZWFkYWJsZS5wcm90b3R5cGUucGF1c2UgPSBmdW5jdGlvbiAoKSB7XG4gIGRlYnVnKCdjYWxsIHBhdXNlIGZsb3dpbmc9JWonLCB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcpXG4gIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcgIT09IGZhbHNlKSB7XG4gICAgZGVidWcoJ3BhdXNlJylcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcgPSBmYWxzZVxuICAgIHRoaXMuZW1pdCgncGF1c2UnKVxuICB9XG4gIHRoaXMuX3JlYWRhYmxlU3RhdGVba1BhdXNlZF0gPSB0cnVlXG4gIHJldHVybiB0aGlzXG59XG5mdW5jdGlvbiBmbG93KHN0cmVhbSkge1xuICBjb25zdCBzdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZVxuICBkZWJ1ZygnZmxvdycsIHN0YXRlLmZsb3dpbmcpXG4gIHdoaWxlIChzdGF0ZS5mbG93aW5nICYmIHN0cmVhbS5yZWFkKCkgIT09IG51bGwpO1xufVxuXG4vLyBXcmFwIGFuIG9sZC1zdHlsZSBzdHJlYW0gYXMgdGhlIGFzeW5jIGRhdGEgc291cmNlLlxuLy8gVGhpcyBpcyAqbm90KiBwYXJ0IG9mIHRoZSByZWFkYWJsZSBzdHJlYW0gaW50ZXJmYWNlLlxuLy8gSXQgaXMgYW4gdWdseSB1bmZvcnR1bmF0ZSBtZXNzIG9mIGhpc3RvcnkuXG5SZWFkYWJsZS5wcm90b3R5cGUud3JhcCA9IGZ1bmN0aW9uIChzdHJlYW0pIHtcbiAgbGV0IHBhdXNlZCA9IGZhbHNlXG5cbiAgLy8gVE9ETyAocm9uYWcpOiBTaG91bGQgdGhpcy5kZXN0cm95KGVycikgZW1pdFxuICAvLyAnZXJyb3InIG9uIHRoZSB3cmFwcGVkIHN0cmVhbT8gV291bGQgcmVxdWlyZVxuICAvLyBhIHN0YXRpYyBmYWN0b3J5IG1ldGhvZCwgZS5nLiBSZWFkYWJsZS53cmFwKHN0cmVhbSkuXG5cbiAgc3RyZWFtLm9uKCdkYXRhJywgKGNodW5rKSA9PiB7XG4gICAgaWYgKCF0aGlzLnB1c2goY2h1bmspICYmIHN0cmVhbS5wYXVzZSkge1xuICAgICAgcGF1c2VkID0gdHJ1ZVxuICAgICAgc3RyZWFtLnBhdXNlKClcbiAgICB9XG4gIH0pXG4gIHN0cmVhbS5vbignZW5kJywgKCkgPT4ge1xuICAgIHRoaXMucHVzaChudWxsKVxuICB9KVxuICBzdHJlYW0ub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgIGVycm9yT3JEZXN0cm95KHRoaXMsIGVycilcbiAgfSlcbiAgc3RyZWFtLm9uKCdjbG9zZScsICgpID0+IHtcbiAgICB0aGlzLmRlc3Ryb3koKVxuICB9KVxuICBzdHJlYW0ub24oJ2Rlc3Ryb3knLCAoKSA9PiB7XG4gICAgdGhpcy5kZXN0cm95KClcbiAgfSlcbiAgdGhpcy5fcmVhZCA9ICgpID0+IHtcbiAgICBpZiAocGF1c2VkICYmIHN0cmVhbS5yZXN1bWUpIHtcbiAgICAgIHBhdXNlZCA9IGZhbHNlXG4gICAgICBzdHJlYW0ucmVzdW1lKClcbiAgICB9XG4gIH1cblxuICAvLyBQcm94eSBhbGwgdGhlIG90aGVyIG1ldGhvZHMuIEltcG9ydGFudCB3aGVuIHdyYXBwaW5nIGZpbHRlcnMgYW5kIGR1cGxleGVzLlxuICBjb25zdCBzdHJlYW1LZXlzID0gT2JqZWN0S2V5cyhzdHJlYW0pXG4gIGZvciAobGV0IGogPSAxOyBqIDwgc3RyZWFtS2V5cy5sZW5ndGg7IGorKykge1xuICAgIGNvbnN0IGkgPSBzdHJlYW1LZXlzW2pdXG4gICAgaWYgKHRoaXNbaV0gPT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygc3RyZWFtW2ldID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzW2ldID0gc3RyZWFtW2ldLmJpbmQoc3RyZWFtKVxuICAgIH1cbiAgfVxuICByZXR1cm4gdGhpc1xufVxuUmVhZGFibGUucHJvdG90eXBlW1N5bWJvbEFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gc3RyZWFtVG9Bc3luY0l0ZXJhdG9yKHRoaXMpXG59XG5SZWFkYWJsZS5wcm90b3R5cGUuaXRlcmF0b3IgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFsaWRhdGVPYmplY3Qob3B0aW9ucywgJ29wdGlvbnMnKVxuICB9XG4gIHJldHVybiBzdHJlYW1Ub0FzeW5jSXRlcmF0b3IodGhpcywgb3B0aW9ucylcbn1cbmZ1bmN0aW9uIHN0cmVhbVRvQXN5bmNJdGVyYXRvcihzdHJlYW0sIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiBzdHJlYW0ucmVhZCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHN0cmVhbSA9IFJlYWRhYmxlLndyYXAoc3RyZWFtLCB7XG4gICAgICBvYmplY3RNb2RlOiB0cnVlXG4gICAgfSlcbiAgfVxuICBjb25zdCBpdGVyID0gY3JlYXRlQXN5bmNJdGVyYXRvcihzdHJlYW0sIG9wdGlvbnMpXG4gIGl0ZXIuc3RyZWFtID0gc3RyZWFtXG4gIHJldHVybiBpdGVyXG59XG5hc3luYyBmdW5jdGlvbiogY3JlYXRlQXN5bmNJdGVyYXRvcihzdHJlYW0sIG9wdGlvbnMpIHtcbiAgbGV0IGNhbGxiYWNrID0gbm9wXG4gIGZ1bmN0aW9uIG5leHQocmVzb2x2ZSkge1xuICAgIGlmICh0aGlzID09PSBzdHJlYW0pIHtcbiAgICAgIGNhbGxiYWNrKClcbiAgICAgIGNhbGxiYWNrID0gbm9wXG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbGxiYWNrID0gcmVzb2x2ZVxuICAgIH1cbiAgfVxuICBzdHJlYW0ub24oJ3JlYWRhYmxlJywgbmV4dClcbiAgbGV0IGVycm9yXG4gIGNvbnN0IGNsZWFudXAgPSBlb3MoXG4gICAgc3RyZWFtLFxuICAgIHtcbiAgICAgIHdyaXRhYmxlOiBmYWxzZVxuICAgIH0sXG4gICAgKGVycikgPT4ge1xuICAgICAgZXJyb3IgPSBlcnIgPyBhZ2dyZWdhdGVUd29FcnJvcnMoZXJyb3IsIGVycikgOiBudWxsXG4gICAgICBjYWxsYmFjaygpXG4gICAgICBjYWxsYmFjayA9IG5vcFxuICAgIH1cbiAgKVxuICB0cnkge1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCBjaHVuayA9IHN0cmVhbS5kZXN0cm95ZWQgPyBudWxsIDogc3RyZWFtLnJlYWQoKVxuICAgICAgaWYgKGNodW5rICE9PSBudWxsKSB7XG4gICAgICAgIHlpZWxkIGNodW5rXG4gICAgICB9IGVsc2UgaWYgKGVycm9yKSB7XG4gICAgICAgIHRocm93IGVycm9yXG4gICAgICB9IGVsc2UgaWYgKGVycm9yID09PSBudWxsKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UobmV4dClcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGVycm9yID0gYWdncmVnYXRlVHdvRXJyb3JzKGVycm9yLCBlcnIpXG4gICAgdGhyb3cgZXJyb3JcbiAgfSBmaW5hbGx5IHtcbiAgICBpZiAoXG4gICAgICAoZXJyb3IgfHwgKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogb3B0aW9ucy5kZXN0cm95T25SZXR1cm4pICE9PSBmYWxzZSkgJiZcbiAgICAgIChlcnJvciA9PT0gdW5kZWZpbmVkIHx8IHN0cmVhbS5fcmVhZGFibGVTdGF0ZS5hdXRvRGVzdHJveSlcbiAgICApIHtcbiAgICAgIGRlc3Ryb3lJbXBsLmRlc3Ryb3llcihzdHJlYW0sIG51bGwpXG4gICAgfSBlbHNlIHtcbiAgICAgIHN0cmVhbS5vZmYoJ3JlYWRhYmxlJywgbmV4dClcbiAgICAgIGNsZWFudXAoKVxuICAgIH1cbiAgfVxufVxuXG4vLyBNYWtpbmcgaXQgZXhwbGljaXQgdGhlc2UgcHJvcGVydGllcyBhcmUgbm90IGVudW1lcmFibGVcbi8vIGJlY2F1c2Ugb3RoZXJ3aXNlIHNvbWUgcHJvdG90eXBlIG1hbmlwdWxhdGlvbiBpblxuLy8gdXNlcmxhbmQgd2lsbCBmYWlsLlxuT2JqZWN0RGVmaW5lUHJvcGVydGllcyhSZWFkYWJsZS5wcm90b3R5cGUsIHtcbiAgcmVhZGFibGU6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZ2V0KCkge1xuICAgICAgY29uc3QgciA9IHRoaXMuX3JlYWRhYmxlU3RhdGVcbiAgICAgIC8vIHIucmVhZGFibGUgPT09IGZhbHNlIG1lYW5zIHRoYXQgdGhpcyBpcyBwYXJ0IG9mIGEgRHVwbGV4IHN0cmVhbVxuICAgICAgLy8gd2hlcmUgdGhlIHJlYWRhYmxlIHNpZGUgd2FzIGRpc2FibGVkIHVwb24gY29uc3RydWN0aW9uLlxuICAgICAgLy8gQ29tcGF0LiBUaGUgdXNlciBtaWdodCBtYW51YWxseSBkaXNhYmxlIHJlYWRhYmxlIHNpZGUgdGhyb3VnaFxuICAgICAgLy8gZGVwcmVjYXRlZCBzZXR0ZXIuXG4gICAgICByZXR1cm4gISFyICYmIHIucmVhZGFibGUgIT09IGZhbHNlICYmICFyLmRlc3Ryb3llZCAmJiAhci5lcnJvckVtaXR0ZWQgJiYgIXIuZW5kRW1pdHRlZFxuICAgIH0sXG4gICAgc2V0KHZhbCkge1xuICAgICAgLy8gQmFja3dhcmRzIGNvbXBhdC5cbiAgICAgIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlKSB7XG4gICAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUucmVhZGFibGUgPSAhIXZhbFxuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgcmVhZGFibGVEaWRSZWFkOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGF0YUVtaXR0ZWRcbiAgICB9XG4gIH0sXG4gIHJlYWRhYmxlQWJvcnRlZDoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiAhIShcbiAgICAgICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5yZWFkYWJsZSAhPT0gZmFsc2UgJiZcbiAgICAgICAgKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkIHx8IHRoaXMuX3JlYWRhYmxlU3RhdGUuZXJyb3JlZCkgJiZcbiAgICAgICAgIXRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZFxuICAgICAgKVxuICAgIH1cbiAgfSxcbiAgcmVhZGFibGVIaWdoV2F0ZXJNYXJrOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya1xuICAgIH1cbiAgfSxcbiAgcmVhZGFibGVCdWZmZXI6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZSAmJiB0aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlclxuICAgIH1cbiAgfSxcbiAgcmVhZGFibGVGbG93aW5nOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZ1xuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgICAgIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlKSB7XG4gICAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyA9IHN0YXRlXG4gICAgICB9XG4gICAgfVxuICB9LFxuICByZWFkYWJsZUxlbmd0aDoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5sZW5ndGhcbiAgICB9XG4gIH0sXG4gIHJlYWRhYmxlT2JqZWN0TW9kZToge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZSA/IHRoaXMuX3JlYWRhYmxlU3RhdGUub2JqZWN0TW9kZSA6IGZhbHNlXG4gICAgfVxuICB9LFxuICByZWFkYWJsZUVuY29kaW5nOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlID8gdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmNvZGluZyA6IG51bGxcbiAgICB9XG4gIH0sXG4gIGVycm9yZWQ6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUgPyB0aGlzLl9yZWFkYWJsZVN0YXRlLmVycm9yZWQgOiBudWxsXG4gICAgfVxuICB9LFxuICBjbG9zZWQ6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUgPyB0aGlzLl9yZWFkYWJsZVN0YXRlLmNsb3NlZCA6IGZhbHNlXG4gICAgfVxuICB9LFxuICBkZXN0cm95ZWQ6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUgPyB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCA6IGZhbHNlXG4gICAgfSxcbiAgICBzZXQodmFsdWUpIHtcbiAgICAgIC8vIFdlIGlnbm9yZSB0aGUgdmFsdWUgaWYgdGhlIHN0cmVhbVxuICAgICAgLy8gaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkIHlldC5cbiAgICAgIGlmICghdGhpcy5fcmVhZGFibGVTdGF0ZSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gQmFja3dhcmQgY29tcGF0aWJpbGl0eSwgdGhlIHVzZXIgaXMgZXhwbGljaXRseVxuICAgICAgLy8gbWFuYWdpbmcgZGVzdHJveWVkLlxuICAgICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQgPSB2YWx1ZVxuICAgIH1cbiAgfSxcbiAgcmVhZGFibGVFbmRlZDoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZSA/IHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCA6IGZhbHNlXG4gICAgfVxuICB9XG59KVxuT2JqZWN0RGVmaW5lUHJvcGVydGllcyhSZWFkYWJsZVN0YXRlLnByb3RvdHlwZSwge1xuICAvLyBMZWdhY3kgZ2V0dGVyIGZvciBgcGlwZXNDb3VudGAuXG4gIHBpcGVzQ291bnQ6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMucGlwZXMubGVuZ3RoXG4gICAgfVxuICB9LFxuICAvLyBMZWdhY3kgcHJvcGVydHkgZm9yIGBwYXVzZWRgLlxuICBwYXVzZWQ6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXNba1BhdXNlZF0gIT09IGZhbHNlXG4gICAgfSxcbiAgICBzZXQodmFsdWUpIHtcbiAgICAgIHRoaXNba1BhdXNlZF0gPSAhIXZhbHVlXG4gICAgfVxuICB9XG59KVxuXG4vLyBFeHBvc2VkIGZvciB0ZXN0aW5nIHB1cnBvc2VzIG9ubHkuXG5SZWFkYWJsZS5fZnJvbUxpc3QgPSBmcm9tTGlzdFxuXG4vLyBQbHVjayBvZmYgbiBieXRlcyBmcm9tIGFuIGFycmF5IG9mIGJ1ZmZlcnMuXG4vLyBMZW5ndGggaXMgdGhlIGNvbWJpbmVkIGxlbmd0aHMgb2YgYWxsIHRoZSBidWZmZXJzIGluIHRoZSBsaXN0LlxuLy8gVGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBiZSBpbmxpbmFibGUsIHNvIHBsZWFzZSB0YWtlIGNhcmUgd2hlbiBtYWtpbmdcbi8vIGNoYW5nZXMgdG8gdGhlIGZ1bmN0aW9uIGJvZHkuXG5mdW5jdGlvbiBmcm9tTGlzdChuLCBzdGF0ZSkge1xuICAvLyBub3RoaW5nIGJ1ZmZlcmVkLlxuICBpZiAoc3RhdGUubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbFxuICBsZXQgcmV0XG4gIGlmIChzdGF0ZS5vYmplY3RNb2RlKSByZXQgPSBzdGF0ZS5idWZmZXIuc2hpZnQoKVxuICBlbHNlIGlmICghbiB8fCBuID49IHN0YXRlLmxlbmd0aCkge1xuICAgIC8vIFJlYWQgaXQgYWxsLCB0cnVuY2F0ZSB0aGUgbGlzdC5cbiAgICBpZiAoc3RhdGUuZGVjb2RlcikgcmV0ID0gc3RhdGUuYnVmZmVyLmpvaW4oJycpXG4gICAgZWxzZSBpZiAoc3RhdGUuYnVmZmVyLmxlbmd0aCA9PT0gMSkgcmV0ID0gc3RhdGUuYnVmZmVyLmZpcnN0KClcbiAgICBlbHNlIHJldCA9IHN0YXRlLmJ1ZmZlci5jb25jYXQoc3RhdGUubGVuZ3RoKVxuICAgIHN0YXRlLmJ1ZmZlci5jbGVhcigpXG4gIH0gZWxzZSB7XG4gICAgLy8gcmVhZCBwYXJ0IG9mIGxpc3QuXG4gICAgcmV0ID0gc3RhdGUuYnVmZmVyLmNvbnN1bWUobiwgc3RhdGUuZGVjb2RlcilcbiAgfVxuICByZXR1cm4gcmV0XG59XG5mdW5jdGlvbiBlbmRSZWFkYWJsZShzdHJlYW0pIHtcbiAgY29uc3Qgc3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGVcbiAgZGVidWcoJ2VuZFJlYWRhYmxlJywgc3RhdGUuZW5kRW1pdHRlZClcbiAgaWYgKCFzdGF0ZS5lbmRFbWl0dGVkKSB7XG4gICAgc3RhdGUuZW5kZWQgPSB0cnVlXG4gICAgcHJvY2Vzcy5uZXh0VGljayhlbmRSZWFkYWJsZU5ULCBzdGF0ZSwgc3RyZWFtKVxuICB9XG59XG5mdW5jdGlvbiBlbmRSZWFkYWJsZU5UKHN0YXRlLCBzdHJlYW0pIHtcbiAgZGVidWcoJ2VuZFJlYWRhYmxlTlQnLCBzdGF0ZS5lbmRFbWl0dGVkLCBzdGF0ZS5sZW5ndGgpXG5cbiAgLy8gQ2hlY2sgdGhhdCB3ZSBkaWRuJ3QgZ2V0IG9uZSBsYXN0IHVuc2hpZnQuXG4gIGlmICghc3RhdGUuZXJyb3JlZCAmJiAhc3RhdGUuY2xvc2VFbWl0dGVkICYmICFzdGF0ZS5lbmRFbWl0dGVkICYmIHN0YXRlLmxlbmd0aCA9PT0gMCkge1xuICAgIHN0YXRlLmVuZEVtaXR0ZWQgPSB0cnVlXG4gICAgc3RyZWFtLmVtaXQoJ2VuZCcpXG4gICAgaWYgKHN0cmVhbS53cml0YWJsZSAmJiBzdHJlYW0uYWxsb3dIYWxmT3BlbiA9PT0gZmFsc2UpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZW5kV3JpdGFibGVOVCwgc3RyZWFtKVxuICAgIH0gZWxzZSBpZiAoc3RhdGUuYXV0b0Rlc3Ryb3kpIHtcbiAgICAgIC8vIEluIGNhc2Ugb2YgZHVwbGV4IHN0cmVhbXMgd2UgbmVlZCBhIHdheSB0byBkZXRlY3RcbiAgICAgIC8vIGlmIHRoZSB3cml0YWJsZSBzaWRlIGlzIHJlYWR5IGZvciBhdXRvRGVzdHJveSBhcyB3ZWxsLlxuICAgICAgY29uc3Qgd1N0YXRlID0gc3RyZWFtLl93cml0YWJsZVN0YXRlXG4gICAgICBjb25zdCBhdXRvRGVzdHJveSA9XG4gICAgICAgICF3U3RhdGUgfHxcbiAgICAgICAgKHdTdGF0ZS5hdXRvRGVzdHJveSAmJlxuICAgICAgICAgIC8vIFdlIGRvbid0IGV4cGVjdCB0aGUgd3JpdGFibGUgdG8gZXZlciAnZmluaXNoJ1xuICAgICAgICAgIC8vIGlmIHdyaXRhYmxlIGlzIGV4cGxpY2l0bHkgc2V0IHRvIGZhbHNlLlxuICAgICAgICAgICh3U3RhdGUuZmluaXNoZWQgfHwgd1N0YXRlLndyaXRhYmxlID09PSBmYWxzZSkpXG4gICAgICBpZiAoYXV0b0Rlc3Ryb3kpIHtcbiAgICAgICAgc3RyZWFtLmRlc3Ryb3koKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZW5kV3JpdGFibGVOVChzdHJlYW0pIHtcbiAgY29uc3Qgd3JpdGFibGUgPSBzdHJlYW0ud3JpdGFibGUgJiYgIXN0cmVhbS53cml0YWJsZUVuZGVkICYmICFzdHJlYW0uZGVzdHJveWVkXG4gIGlmICh3cml0YWJsZSkge1xuICAgIHN0cmVhbS5lbmQoKVxuICB9XG59XG5SZWFkYWJsZS5mcm9tID0gZnVuY3Rpb24gKGl0ZXJhYmxlLCBvcHRzKSB7XG4gIHJldHVybiBmcm9tKFJlYWRhYmxlLCBpdGVyYWJsZSwgb3B0cylcbn1cbmxldCB3ZWJTdHJlYW1zQWRhcHRlcnNcblxuLy8gTGF6eSB0byBhdm9pZCBjaXJjdWxhciByZWZlcmVuY2VzXG5mdW5jdGlvbiBsYXp5V2ViU3RyZWFtcygpIHtcbiAgaWYgKHdlYlN0cmVhbXNBZGFwdGVycyA9PT0gdW5kZWZpbmVkKSB3ZWJTdHJlYW1zQWRhcHRlcnMgPSB7fVxuICByZXR1cm4gd2ViU3RyZWFtc0FkYXB0ZXJzXG59XG5SZWFkYWJsZS5mcm9tV2ViID0gZnVuY3Rpb24gKHJlYWRhYmxlU3RyZWFtLCBvcHRpb25zKSB7XG4gIHJldHVybiBsYXp5V2ViU3RyZWFtcygpLm5ld1N0cmVhbVJlYWRhYmxlRnJvbVJlYWRhYmxlU3RyZWFtKHJlYWRhYmxlU3RyZWFtLCBvcHRpb25zKVxufVxuUmVhZGFibGUudG9XZWIgPSBmdW5jdGlvbiAoc3RyZWFtUmVhZGFibGUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGxhenlXZWJTdHJlYW1zKCkubmV3UmVhZGFibGVTdHJlYW1Gcm9tU3RyZWFtUmVhZGFibGUoc3RyZWFtUmVhZGFibGUsIG9wdGlvbnMpXG59XG5SZWFkYWJsZS53cmFwID0gZnVuY3Rpb24gKHNyYywgb3B0aW9ucykge1xuICB2YXIgX3JlZiwgX3NyYyRyZWFkYWJsZU9iamVjdE1vXG4gIHJldHVybiBuZXcgUmVhZGFibGUoe1xuICAgIG9iamVjdE1vZGU6XG4gICAgICAoX3JlZiA9XG4gICAgICAgIChfc3JjJHJlYWRhYmxlT2JqZWN0TW8gPSBzcmMucmVhZGFibGVPYmplY3RNb2RlKSAhPT0gbnVsbCAmJiBfc3JjJHJlYWRhYmxlT2JqZWN0TW8gIT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gX3NyYyRyZWFkYWJsZU9iamVjdE1vXG4gICAgICAgICAgOiBzcmMub2JqZWN0TW9kZSkgIT09IG51bGwgJiYgX3JlZiAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gX3JlZlxuICAgICAgICA6IHRydWUsXG4gICAgLi4ub3B0aW9ucyxcbiAgICBkZXN0cm95KGVyciwgY2FsbGJhY2spIHtcbiAgICAgIGRlc3Ryb3lJbXBsLmRlc3Ryb3llcihzcmMsIGVycilcbiAgICAgIGNhbGxiYWNrKGVycilcbiAgICB9XG4gIH0pLndyYXAoc3JjKVxufVxuIiwKICAgICIvKiByZXBsYWNlbWVudCBzdGFydCAqL1xuXG5jb25zdCBwcm9jZXNzID0gcmVxdWlyZSgncHJvY2Vzcy8nKVxuXG4vKiByZXBsYWNlbWVudCBlbmQgKi9cbi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyBBIGJpdCBzaW1wbGVyIHRoYW4gcmVhZGFibGUgc3RyZWFtcy5cbi8vIEltcGxlbWVudCBhbiBhc3luYyAuX3dyaXRlKGNodW5rLCBlbmNvZGluZywgY2IpLCBhbmQgaXQnbGwgaGFuZGxlIGFsbFxuLy8gdGhlIGRyYWluIGV2ZW50IGVtaXNzaW9uIGFuZCBidWZmZXJpbmcuXG5cbjsoJ3VzZSBzdHJpY3QnKVxuY29uc3Qge1xuICBBcnJheVByb3RvdHlwZVNsaWNlLFxuICBFcnJvcixcbiAgRnVuY3Rpb25Qcm90b3R5cGVTeW1ib2xIYXNJbnN0YW5jZSxcbiAgT2JqZWN0RGVmaW5lUHJvcGVydHksXG4gIE9iamVjdERlZmluZVByb3BlcnRpZXMsXG4gIE9iamVjdFNldFByb3RvdHlwZU9mLFxuICBTdHJpbmdQcm90b3R5cGVUb0xvd2VyQ2FzZSxcbiAgU3ltYm9sLFxuICBTeW1ib2xIYXNJbnN0YW5jZVxufSA9IHJlcXVpcmUoJy4uLy4uL291cnMvcHJpbW9yZGlhbHMnKVxubW9kdWxlLmV4cG9ydHMgPSBXcml0YWJsZVxuV3JpdGFibGUuV3JpdGFibGVTdGF0ZSA9IFdyaXRhYmxlU3RhdGVcbmNvbnN0IHsgRXZlbnRFbWl0dGVyOiBFRSB9ID0gcmVxdWlyZSgnZXZlbnRzJylcbmNvbnN0IFN0cmVhbSA9IHJlcXVpcmUoJy4vbGVnYWN5JykuU3RyZWFtXG5jb25zdCB7IEJ1ZmZlciB9ID0gcmVxdWlyZSgnYnVmZmVyJylcbmNvbnN0IGRlc3Ryb3lJbXBsID0gcmVxdWlyZSgnLi9kZXN0cm95JylcbmNvbnN0IHsgYWRkQWJvcnRTaWduYWwgfSA9IHJlcXVpcmUoJy4vYWRkLWFib3J0LXNpZ25hbCcpXG5jb25zdCB7IGdldEhpZ2hXYXRlck1hcmssIGdldERlZmF1bHRIaWdoV2F0ZXJNYXJrIH0gPSByZXF1aXJlKCcuL3N0YXRlJylcbmNvbnN0IHtcbiAgRVJSX0lOVkFMSURfQVJHX1RZUEUsXG4gIEVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVELFxuICBFUlJfTVVMVElQTEVfQ0FMTEJBQ0ssXG4gIEVSUl9TVFJFQU1fQ0FOTk9UX1BJUEUsXG4gIEVSUl9TVFJFQU1fREVTVFJPWUVELFxuICBFUlJfU1RSRUFNX0FMUkVBRFlfRklOSVNIRUQsXG4gIEVSUl9TVFJFQU1fTlVMTF9WQUxVRVMsXG4gIEVSUl9TVFJFQU1fV1JJVEVfQUZURVJfRU5ELFxuICBFUlJfVU5LTk9XTl9FTkNPRElOR1xufSA9IHJlcXVpcmUoJy4uLy4uL291cnMvZXJyb3JzJykuY29kZXNcbmNvbnN0IHsgZXJyb3JPckRlc3Ryb3kgfSA9IGRlc3Ryb3lJbXBsXG5PYmplY3RTZXRQcm90b3R5cGVPZihXcml0YWJsZS5wcm90b3R5cGUsIFN0cmVhbS5wcm90b3R5cGUpXG5PYmplY3RTZXRQcm90b3R5cGVPZihXcml0YWJsZSwgU3RyZWFtKVxuZnVuY3Rpb24gbm9wKCkge31cbmNvbnN0IGtPbkZpbmlzaGVkID0gU3ltYm9sKCdrT25GaW5pc2hlZCcpXG5mdW5jdGlvbiBXcml0YWJsZVN0YXRlKG9wdGlvbnMsIHN0cmVhbSwgaXNEdXBsZXgpIHtcbiAgLy8gRHVwbGV4IHN0cmVhbXMgYXJlIGJvdGggcmVhZGFibGUgYW5kIHdyaXRhYmxlLCBidXQgc2hhcmVcbiAgLy8gdGhlIHNhbWUgb3B0aW9ucyBvYmplY3QuXG4gIC8vIEhvd2V2ZXIsIHNvbWUgY2FzZXMgcmVxdWlyZSBzZXR0aW5nIG9wdGlvbnMgdG8gZGlmZmVyZW50XG4gIC8vIHZhbHVlcyBmb3IgdGhlIHJlYWRhYmxlIGFuZCB0aGUgd3JpdGFibGUgc2lkZXMgb2YgdGhlIGR1cGxleCBzdHJlYW0sXG4gIC8vIGUuZy4gb3B0aW9ucy5yZWFkYWJsZU9iamVjdE1vZGUgdnMuIG9wdGlvbnMud3JpdGFibGVPYmplY3RNb2RlLCBldGMuXG4gIGlmICh0eXBlb2YgaXNEdXBsZXggIT09ICdib29sZWFuJykgaXNEdXBsZXggPSBzdHJlYW0gaW5zdGFuY2VvZiByZXF1aXJlKCcuL2R1cGxleCcpXG5cbiAgLy8gT2JqZWN0IHN0cmVhbSBmbGFnIHRvIGluZGljYXRlIHdoZXRoZXIgb3Igbm90IHRoaXMgc3RyZWFtXG4gIC8vIGNvbnRhaW5zIGJ1ZmZlcnMgb3Igb2JqZWN0cy5cbiAgdGhpcy5vYmplY3RNb2RlID0gISEob3B0aW9ucyAmJiBvcHRpb25zLm9iamVjdE1vZGUpXG4gIGlmIChpc0R1cGxleCkgdGhpcy5vYmplY3RNb2RlID0gdGhpcy5vYmplY3RNb2RlIHx8ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy53cml0YWJsZU9iamVjdE1vZGUpXG5cbiAgLy8gVGhlIHBvaW50IGF0IHdoaWNoIHdyaXRlKCkgc3RhcnRzIHJldHVybmluZyBmYWxzZVxuICAvLyBOb3RlOiAwIGlzIGEgdmFsaWQgdmFsdWUsIG1lYW5zIHRoYXQgd2UgYWx3YXlzIHJldHVybiBmYWxzZSBpZlxuICAvLyB0aGUgZW50aXJlIGJ1ZmZlciBpcyBub3QgZmx1c2hlZCBpbW1lZGlhdGVseSBvbiB3cml0ZSgpLlxuICB0aGlzLmhpZ2hXYXRlck1hcmsgPSBvcHRpb25zXG4gICAgPyBnZXRIaWdoV2F0ZXJNYXJrKHRoaXMsIG9wdGlvbnMsICd3cml0YWJsZUhpZ2hXYXRlck1hcmsnLCBpc0R1cGxleClcbiAgICA6IGdldERlZmF1bHRIaWdoV2F0ZXJNYXJrKGZhbHNlKVxuXG4gIC8vIGlmIF9maW5hbCBoYXMgYmVlbiBjYWxsZWQuXG4gIHRoaXMuZmluYWxDYWxsZWQgPSBmYWxzZVxuXG4gIC8vIGRyYWluIGV2ZW50IGZsYWcuXG4gIHRoaXMubmVlZERyYWluID0gZmFsc2VcbiAgLy8gQXQgdGhlIHN0YXJ0IG9mIGNhbGxpbmcgZW5kKClcbiAgdGhpcy5lbmRpbmcgPSBmYWxzZVxuICAvLyBXaGVuIGVuZCgpIGhhcyBiZWVuIGNhbGxlZCwgYW5kIHJldHVybmVkLlxuICB0aGlzLmVuZGVkID0gZmFsc2VcbiAgLy8gV2hlbiAnZmluaXNoJyBpcyBlbWl0dGVkLlxuICB0aGlzLmZpbmlzaGVkID0gZmFsc2VcblxuICAvLyBIYXMgaXQgYmVlbiBkZXN0cm95ZWRcbiAgdGhpcy5kZXN0cm95ZWQgPSBmYWxzZVxuXG4gIC8vIFNob3VsZCB3ZSBkZWNvZGUgc3RyaW5ncyBpbnRvIGJ1ZmZlcnMgYmVmb3JlIHBhc3NpbmcgdG8gX3dyaXRlP1xuICAvLyB0aGlzIGlzIGhlcmUgc28gdGhhdCBzb21lIG5vZGUtY29yZSBzdHJlYW1zIGNhbiBvcHRpbWl6ZSBzdHJpbmdcbiAgLy8gaGFuZGxpbmcgYXQgYSBsb3dlciBsZXZlbC5cbiAgY29uc3Qgbm9EZWNvZGUgPSAhIShvcHRpb25zICYmIG9wdGlvbnMuZGVjb2RlU3RyaW5ncyA9PT0gZmFsc2UpXG4gIHRoaXMuZGVjb2RlU3RyaW5ncyA9ICFub0RlY29kZVxuXG4gIC8vIENyeXB0byBpcyBraW5kIG9mIG9sZCBhbmQgY3J1c3R5LiAgSGlzdG9yaWNhbGx5LCBpdHMgZGVmYXVsdCBzdHJpbmdcbiAgLy8gZW5jb2RpbmcgaXMgJ2JpbmFyeScgc28gd2UgaGF2ZSB0byBtYWtlIHRoaXMgY29uZmlndXJhYmxlLlxuICAvLyBFdmVyeXRoaW5nIGVsc2UgaW4gdGhlIHVuaXZlcnNlIHVzZXMgJ3V0ZjgnLCB0aG91Z2guXG4gIHRoaXMuZGVmYXVsdEVuY29kaW5nID0gKG9wdGlvbnMgJiYgb3B0aW9ucy5kZWZhdWx0RW5jb2RpbmcpIHx8ICd1dGY4J1xuXG4gIC8vIE5vdCBhbiBhY3R1YWwgYnVmZmVyIHdlIGtlZXAgdHJhY2sgb2YsIGJ1dCBhIG1lYXN1cmVtZW50XG4gIC8vIG9mIGhvdyBtdWNoIHdlJ3JlIHdhaXRpbmcgdG8gZ2V0IHB1c2hlZCB0byBzb21lIHVuZGVybHlpbmdcbiAgLy8gc29ja2V0IG9yIGZpbGUuXG4gIHRoaXMubGVuZ3RoID0gMFxuXG4gIC8vIEEgZmxhZyB0byBzZWUgd2hlbiB3ZSdyZSBpbiB0aGUgbWlkZGxlIG9mIGEgd3JpdGUuXG4gIHRoaXMud3JpdGluZyA9IGZhbHNlXG5cbiAgLy8gV2hlbiB0cnVlIGFsbCB3cml0ZXMgd2lsbCBiZSBidWZmZXJlZCB1bnRpbCAudW5jb3JrKCkgY2FsbC5cbiAgdGhpcy5jb3JrZWQgPSAwXG5cbiAgLy8gQSBmbGFnIHRvIGJlIGFibGUgdG8gdGVsbCBpZiB0aGUgb253cml0ZSBjYiBpcyBjYWxsZWQgaW1tZWRpYXRlbHksXG4gIC8vIG9yIG9uIGEgbGF0ZXIgdGljay4gIFdlIHNldCB0aGlzIHRvIHRydWUgYXQgZmlyc3QsIGJlY2F1c2UgYW55XG4gIC8vIGFjdGlvbnMgdGhhdCBzaG91bGRuJ3QgaGFwcGVuIHVudGlsIFwibGF0ZXJcIiBzaG91bGQgZ2VuZXJhbGx5IGFsc29cbiAgLy8gbm90IGhhcHBlbiBiZWZvcmUgdGhlIGZpcnN0IHdyaXRlIGNhbGwuXG4gIHRoaXMuc3luYyA9IHRydWVcblxuICAvLyBBIGZsYWcgdG8ga25vdyBpZiB3ZSdyZSBwcm9jZXNzaW5nIHByZXZpb3VzbHkgYnVmZmVyZWQgaXRlbXMsIHdoaWNoXG4gIC8vIG1heSBjYWxsIHRoZSBfd3JpdGUoKSBjYWxsYmFjayBpbiB0aGUgc2FtZSB0aWNrLCBzbyB0aGF0IHdlIGRvbid0XG4gIC8vIGVuZCB1cCBpbiBhbiBvdmVybGFwcGVkIG9ud3JpdGUgc2l0dWF0aW9uLlxuICB0aGlzLmJ1ZmZlclByb2Nlc3NpbmcgPSBmYWxzZVxuXG4gIC8vIFRoZSBjYWxsYmFjayB0aGF0J3MgcGFzc2VkIHRvIF93cml0ZShjaHVuaywgY2IpLlxuICB0aGlzLm9ud3JpdGUgPSBvbndyaXRlLmJpbmQodW5kZWZpbmVkLCBzdHJlYW0pXG5cbiAgLy8gVGhlIGNhbGxiYWNrIHRoYXQgdGhlIHVzZXIgc3VwcGxpZXMgdG8gd3JpdGUoY2h1bmssIGVuY29kaW5nLCBjYikuXG4gIHRoaXMud3JpdGVjYiA9IG51bGxcblxuICAvLyBUaGUgYW1vdW50IHRoYXQgaXMgYmVpbmcgd3JpdHRlbiB3aGVuIF93cml0ZSBpcyBjYWxsZWQuXG4gIHRoaXMud3JpdGVsZW4gPSAwXG5cbiAgLy8gU3RvcmFnZSBmb3IgZGF0YSBwYXNzZWQgdG8gdGhlIGFmdGVyV3JpdGUoKSBjYWxsYmFjayBpbiBjYXNlIG9mXG4gIC8vIHN5bmNocm9ub3VzIF93cml0ZSgpIGNvbXBsZXRpb24uXG4gIHRoaXMuYWZ0ZXJXcml0ZVRpY2tJbmZvID0gbnVsbFxuICByZXNldEJ1ZmZlcih0aGlzKVxuXG4gIC8vIE51bWJlciBvZiBwZW5kaW5nIHVzZXItc3VwcGxpZWQgd3JpdGUgY2FsbGJhY2tzXG4gIC8vIHRoaXMgbXVzdCBiZSAwIGJlZm9yZSAnZmluaXNoJyBjYW4gYmUgZW1pdHRlZC5cbiAgdGhpcy5wZW5kaW5nY2IgPSAwXG5cbiAgLy8gU3RyZWFtIGlzIHN0aWxsIGJlaW5nIGNvbnN0cnVjdGVkIGFuZCBjYW5ub3QgYmVcbiAgLy8gZGVzdHJveWVkIHVudGlsIGNvbnN0cnVjdGlvbiBmaW5pc2hlZCBvciBmYWlsZWQuXG4gIC8vIEFzeW5jIGNvbnN0cnVjdGlvbiBpcyBvcHQgaW4sIHRoZXJlZm9yZSB3ZSBzdGFydCBhc1xuICAvLyBjb25zdHJ1Y3RlZC5cbiAgdGhpcy5jb25zdHJ1Y3RlZCA9IHRydWVcblxuICAvLyBFbWl0IHByZWZpbmlzaCBpZiB0aGUgb25seSB0aGluZyB3ZSdyZSB3YWl0aW5nIGZvciBpcyBfd3JpdGUgY2JzXG4gIC8vIFRoaXMgaXMgcmVsZXZhbnQgZm9yIHN5bmNocm9ub3VzIFRyYW5zZm9ybSBzdHJlYW1zLlxuICB0aGlzLnByZWZpbmlzaGVkID0gZmFsc2VcblxuICAvLyBUcnVlIGlmIHRoZSBlcnJvciB3YXMgYWxyZWFkeSBlbWl0dGVkIGFuZCBzaG91bGQgbm90IGJlIHRocm93biBhZ2Fpbi5cbiAgdGhpcy5lcnJvckVtaXR0ZWQgPSBmYWxzZVxuXG4gIC8vIFNob3VsZCBjbG9zZSBiZSBlbWl0dGVkIG9uIGRlc3Ryb3kuIERlZmF1bHRzIHRvIHRydWUuXG4gIHRoaXMuZW1pdENsb3NlID0gIW9wdGlvbnMgfHwgb3B0aW9ucy5lbWl0Q2xvc2UgIT09IGZhbHNlXG5cbiAgLy8gU2hvdWxkIC5kZXN0cm95KCkgYmUgY2FsbGVkIGFmdGVyICdmaW5pc2gnIChhbmQgcG90ZW50aWFsbHkgJ2VuZCcpLlxuICB0aGlzLmF1dG9EZXN0cm95ID0gIW9wdGlvbnMgfHwgb3B0aW9ucy5hdXRvRGVzdHJveSAhPT0gZmFsc2VcblxuICAvLyBJbmRpY2F0ZXMgd2hldGhlciB0aGUgc3RyZWFtIGhhcyBlcnJvcmVkLiBXaGVuIHRydWUgYWxsIHdyaXRlKCkgY2FsbHNcbiAgLy8gc2hvdWxkIHJldHVybiBmYWxzZS4gVGhpcyBpcyBuZWVkZWQgc2luY2Ugd2hlbiBhdXRvRGVzdHJveVxuICAvLyBpcyBkaXNhYmxlZCB3ZSBuZWVkIGEgd2F5IHRvIHRlbGwgd2hldGhlciB0aGUgc3RyZWFtIGhhcyBmYWlsZWQuXG4gIHRoaXMuZXJyb3JlZCA9IG51bGxcblxuICAvLyBJbmRpY2F0ZXMgd2hldGhlciB0aGUgc3RyZWFtIGhhcyBmaW5pc2hlZCBkZXN0cm95aW5nLlxuICB0aGlzLmNsb3NlZCA9IGZhbHNlXG5cbiAgLy8gVHJ1ZSBpZiBjbG9zZSBoYXMgYmVlbiBlbWl0dGVkIG9yIHdvdWxkIGhhdmUgYmVlbiBlbWl0dGVkXG4gIC8vIGRlcGVuZGluZyBvbiBlbWl0Q2xvc2UuXG4gIHRoaXMuY2xvc2VFbWl0dGVkID0gZmFsc2VcbiAgdGhpc1trT25GaW5pc2hlZF0gPSBbXVxufVxuZnVuY3Rpb24gcmVzZXRCdWZmZXIoc3RhdGUpIHtcbiAgc3RhdGUuYnVmZmVyZWQgPSBbXVxuICBzdGF0ZS5idWZmZXJlZEluZGV4ID0gMFxuICBzdGF0ZS5hbGxCdWZmZXJzID0gdHJ1ZVxuICBzdGF0ZS5hbGxOb29wID0gdHJ1ZVxufVxuV3JpdGFibGVTdGF0ZS5wcm90b3R5cGUuZ2V0QnVmZmVyID0gZnVuY3Rpb24gZ2V0QnVmZmVyKCkge1xuICByZXR1cm4gQXJyYXlQcm90b3R5cGVTbGljZSh0aGlzLmJ1ZmZlcmVkLCB0aGlzLmJ1ZmZlcmVkSW5kZXgpXG59XG5PYmplY3REZWZpbmVQcm9wZXJ0eShXcml0YWJsZVN0YXRlLnByb3RvdHlwZSwgJ2J1ZmZlcmVkUmVxdWVzdENvdW50Jywge1xuICBfX3Byb3RvX186IG51bGwsXG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5idWZmZXJlZC5sZW5ndGggLSB0aGlzLmJ1ZmZlcmVkSW5kZXhcbiAgfVxufSlcbmZ1bmN0aW9uIFdyaXRhYmxlKG9wdGlvbnMpIHtcbiAgLy8gV3JpdGFibGUgY3RvciBpcyBhcHBsaWVkIHRvIER1cGxleGVzLCB0b28uXG4gIC8vIGByZWFsSGFzSW5zdGFuY2VgIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHVzaW5nIHBsYWluIGBpbnN0YW5jZW9mYFxuICAvLyB3b3VsZCByZXR1cm4gZmFsc2UsIGFzIG5vIGBfd3JpdGFibGVTdGF0ZWAgcHJvcGVydHkgaXMgYXR0YWNoZWQuXG5cbiAgLy8gVHJ5aW5nIHRvIHVzZSB0aGUgY3VzdG9tIGBpbnN0YW5jZW9mYCBmb3IgV3JpdGFibGUgaGVyZSB3aWxsIGFsc28gYnJlYWsgdGhlXG4gIC8vIE5vZGUuanMgTGF6eVRyYW5zZm9ybSBpbXBsZW1lbnRhdGlvbiwgd2hpY2ggaGFzIGEgbm9uLXRyaXZpYWwgZ2V0dGVyIGZvclxuICAvLyBgX3dyaXRhYmxlU3RhdGVgIHRoYXQgd291bGQgbGVhZCB0byBpbmZpbml0ZSByZWN1cnNpb24uXG5cbiAgLy8gQ2hlY2tpbmcgZm9yIGEgU3RyZWFtLkR1cGxleCBpbnN0YW5jZSBpcyBmYXN0ZXIgaGVyZSBpbnN0ZWFkIG9mIGluc2lkZVxuICAvLyB0aGUgV3JpdGFibGVTdGF0ZSBjb25zdHJ1Y3RvciwgYXQgbGVhc3Qgd2l0aCBWOCA2LjUuXG4gIGNvbnN0IGlzRHVwbGV4ID0gdGhpcyBpbnN0YW5jZW9mIHJlcXVpcmUoJy4vZHVwbGV4JylcbiAgaWYgKCFpc0R1cGxleCAmJiAhRnVuY3Rpb25Qcm90b3R5cGVTeW1ib2xIYXNJbnN0YW5jZShXcml0YWJsZSwgdGhpcykpIHJldHVybiBuZXcgV3JpdGFibGUob3B0aW9ucylcbiAgdGhpcy5fd3JpdGFibGVTdGF0ZSA9IG5ldyBXcml0YWJsZVN0YXRlKG9wdGlvbnMsIHRoaXMsIGlzRHVwbGV4KVxuICBpZiAob3B0aW9ucykge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy53cml0ZSA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fd3JpdGUgPSBvcHRpb25zLndyaXRlXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLndyaXRldiA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fd3JpdGV2ID0gb3B0aW9ucy53cml0ZXZcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuZGVzdHJveSA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fZGVzdHJveSA9IG9wdGlvbnMuZGVzdHJveVxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5maW5hbCA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fZmluYWwgPSBvcHRpb25zLmZpbmFsXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmNvbnN0cnVjdCA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fY29uc3RydWN0ID0gb3B0aW9ucy5jb25zdHJ1Y3RcbiAgICBpZiAob3B0aW9ucy5zaWduYWwpIGFkZEFib3J0U2lnbmFsKG9wdGlvbnMuc2lnbmFsLCB0aGlzKVxuICB9XG4gIFN0cmVhbS5jYWxsKHRoaXMsIG9wdGlvbnMpXG4gIGRlc3Ryb3lJbXBsLmNvbnN0cnVjdCh0aGlzLCAoKSA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLl93cml0YWJsZVN0YXRlXG4gICAgaWYgKCFzdGF0ZS53cml0aW5nKSB7XG4gICAgICBjbGVhckJ1ZmZlcih0aGlzLCBzdGF0ZSlcbiAgICB9XG4gICAgZmluaXNoTWF5YmUodGhpcywgc3RhdGUpXG4gIH0pXG59XG5PYmplY3REZWZpbmVQcm9wZXJ0eShXcml0YWJsZSwgU3ltYm9sSGFzSW5zdGFuY2UsIHtcbiAgX19wcm90b19fOiBudWxsLFxuICB2YWx1ZTogZnVuY3Rpb24gKG9iamVjdCkge1xuICAgIGlmIChGdW5jdGlvblByb3RvdHlwZVN5bWJvbEhhc0luc3RhbmNlKHRoaXMsIG9iamVjdCkpIHJldHVybiB0cnVlXG4gICAgaWYgKHRoaXMgIT09IFdyaXRhYmxlKSByZXR1cm4gZmFsc2VcbiAgICByZXR1cm4gb2JqZWN0ICYmIG9iamVjdC5fd3JpdGFibGVTdGF0ZSBpbnN0YW5jZW9mIFdyaXRhYmxlU3RhdGVcbiAgfVxufSlcblxuLy8gT3RoZXJ3aXNlIHBlb3BsZSBjYW4gcGlwZSBXcml0YWJsZSBzdHJlYW1zLCB3aGljaCBpcyBqdXN0IHdyb25nLlxuV3JpdGFibGUucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbiAoKSB7XG4gIGVycm9yT3JEZXN0cm95KHRoaXMsIG5ldyBFUlJfU1RSRUFNX0NBTk5PVF9QSVBFKCkpXG59XG5mdW5jdGlvbiBfd3JpdGUoc3RyZWFtLCBjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIGNvbnN0IHN0YXRlID0gc3RyZWFtLl93cml0YWJsZVN0YXRlXG4gIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYiA9IGVuY29kaW5nXG4gICAgZW5jb2RpbmcgPSBzdGF0ZS5kZWZhdWx0RW5jb2RpbmdcbiAgfSBlbHNlIHtcbiAgICBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9IHN0YXRlLmRlZmF1bHRFbmNvZGluZ1xuICAgIGVsc2UgaWYgKGVuY29kaW5nICE9PSAnYnVmZmVyJyAmJiAhQnVmZmVyLmlzRW5jb2RpbmcoZW5jb2RpbmcpKSB0aHJvdyBuZXcgRVJSX1VOS05PV05fRU5DT0RJTkcoZW5jb2RpbmcpXG4gICAgaWYgKHR5cGVvZiBjYiAhPT0gJ2Z1bmN0aW9uJykgY2IgPSBub3BcbiAgfVxuICBpZiAoY2h1bmsgPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRVJSX1NUUkVBTV9OVUxMX1ZBTFVFUygpXG4gIH0gZWxzZSBpZiAoIXN0YXRlLm9iamVjdE1vZGUpIHtcbiAgICBpZiAodHlwZW9mIGNodW5rID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKHN0YXRlLmRlY29kZVN0cmluZ3MgIT09IGZhbHNlKSB7XG4gICAgICAgIGNodW5rID0gQnVmZmVyLmZyb20oY2h1bmssIGVuY29kaW5nKVxuICAgICAgICBlbmNvZGluZyA9ICdidWZmZXInXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjaHVuayBpbnN0YW5jZW9mIEJ1ZmZlcikge1xuICAgICAgZW5jb2RpbmcgPSAnYnVmZmVyJ1xuICAgIH0gZWxzZSBpZiAoU3RyZWFtLl9pc1VpbnQ4QXJyYXkoY2h1bmspKSB7XG4gICAgICBjaHVuayA9IFN0cmVhbS5fdWludDhBcnJheVRvQnVmZmVyKGNodW5rKVxuICAgICAgZW5jb2RpbmcgPSAnYnVmZmVyJ1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoJ2NodW5rJywgWydzdHJpbmcnLCAnQnVmZmVyJywgJ1VpbnQ4QXJyYXknXSwgY2h1bmspXG4gICAgfVxuICB9XG4gIGxldCBlcnJcbiAgaWYgKHN0YXRlLmVuZGluZykge1xuICAgIGVyciA9IG5ldyBFUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORCgpXG4gIH0gZWxzZSBpZiAoc3RhdGUuZGVzdHJveWVkKSB7XG4gICAgZXJyID0gbmV3IEVSUl9TVFJFQU1fREVTVFJPWUVEKCd3cml0ZScpXG4gIH1cbiAgaWYgKGVycikge1xuICAgIHByb2Nlc3MubmV4dFRpY2soY2IsIGVycilcbiAgICBlcnJvck9yRGVzdHJveShzdHJlYW0sIGVyciwgdHJ1ZSlcbiAgICByZXR1cm4gZXJyXG4gIH1cbiAgc3RhdGUucGVuZGluZ2NiKytcbiAgcmV0dXJuIHdyaXRlT3JCdWZmZXIoc3RyZWFtLCBzdGF0ZSwgY2h1bmssIGVuY29kaW5nLCBjYilcbn1cbldyaXRhYmxlLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIHJldHVybiBfd3JpdGUodGhpcywgY2h1bmssIGVuY29kaW5nLCBjYikgPT09IHRydWVcbn1cbldyaXRhYmxlLnByb3RvdHlwZS5jb3JrID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLl93cml0YWJsZVN0YXRlLmNvcmtlZCsrXG59XG5Xcml0YWJsZS5wcm90b3R5cGUudW5jb3JrID0gZnVuY3Rpb24gKCkge1xuICBjb25zdCBzdGF0ZSA9IHRoaXMuX3dyaXRhYmxlU3RhdGVcbiAgaWYgKHN0YXRlLmNvcmtlZCkge1xuICAgIHN0YXRlLmNvcmtlZC0tXG4gICAgaWYgKCFzdGF0ZS53cml0aW5nKSBjbGVhckJ1ZmZlcih0aGlzLCBzdGF0ZSlcbiAgfVxufVxuV3JpdGFibGUucHJvdG90eXBlLnNldERlZmF1bHRFbmNvZGluZyA9IGZ1bmN0aW9uIHNldERlZmF1bHRFbmNvZGluZyhlbmNvZGluZykge1xuICAvLyBub2RlOjpQYXJzZUVuY29kaW5nKCkgcmVxdWlyZXMgbG93ZXIgY2FzZS5cbiAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZycpIGVuY29kaW5nID0gU3RyaW5nUHJvdG90eXBlVG9Mb3dlckNhc2UoZW5jb2RpbmcpXG4gIGlmICghQnVmZmVyLmlzRW5jb2RpbmcoZW5jb2RpbmcpKSB0aHJvdyBuZXcgRVJSX1VOS05PV05fRU5DT0RJTkcoZW5jb2RpbmcpXG4gIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVmYXVsdEVuY29kaW5nID0gZW5jb2RpbmdcbiAgcmV0dXJuIHRoaXNcbn1cblxuLy8gSWYgd2UncmUgYWxyZWFkeSB3cml0aW5nIHNvbWV0aGluZywgdGhlbiBqdXN0IHB1dCB0aGlzXG4vLyBpbiB0aGUgcXVldWUsIGFuZCB3YWl0IG91ciB0dXJuLiAgT3RoZXJ3aXNlLCBjYWxsIF93cml0ZVxuLy8gSWYgd2UgcmV0dXJuIGZhbHNlLCB0aGVuIHdlIG5lZWQgYSBkcmFpbiBldmVudCwgc28gc2V0IHRoYXQgZmxhZy5cbmZ1bmN0aW9uIHdyaXRlT3JCdWZmZXIoc3RyZWFtLCBzdGF0ZSwgY2h1bmssIGVuY29kaW5nLCBjYWxsYmFjaykge1xuICBjb25zdCBsZW4gPSBzdGF0ZS5vYmplY3RNb2RlID8gMSA6IGNodW5rLmxlbmd0aFxuICBzdGF0ZS5sZW5ndGggKz0gbGVuXG5cbiAgLy8gc3RyZWFtLl93cml0ZSByZXNldHMgc3RhdGUubGVuZ3RoXG4gIGNvbnN0IHJldCA9IHN0YXRlLmxlbmd0aCA8IHN0YXRlLmhpZ2hXYXRlck1hcmtcbiAgLy8gV2UgbXVzdCBlbnN1cmUgdGhhdCBwcmV2aW91cyBuZWVkRHJhaW4gd2lsbCBub3QgYmUgcmVzZXQgdG8gZmFsc2UuXG4gIGlmICghcmV0KSBzdGF0ZS5uZWVkRHJhaW4gPSB0cnVlXG4gIGlmIChzdGF0ZS53cml0aW5nIHx8IHN0YXRlLmNvcmtlZCB8fCBzdGF0ZS5lcnJvcmVkIHx8ICFzdGF0ZS5jb25zdHJ1Y3RlZCkge1xuICAgIHN0YXRlLmJ1ZmZlcmVkLnB1c2goe1xuICAgICAgY2h1bmssXG4gICAgICBlbmNvZGluZyxcbiAgICAgIGNhbGxiYWNrXG4gICAgfSlcbiAgICBpZiAoc3RhdGUuYWxsQnVmZmVycyAmJiBlbmNvZGluZyAhPT0gJ2J1ZmZlcicpIHtcbiAgICAgIHN0YXRlLmFsbEJ1ZmZlcnMgPSBmYWxzZVxuICAgIH1cbiAgICBpZiAoc3RhdGUuYWxsTm9vcCAmJiBjYWxsYmFjayAhPT0gbm9wKSB7XG4gICAgICBzdGF0ZS5hbGxOb29wID0gZmFsc2VcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgc3RhdGUud3JpdGVsZW4gPSBsZW5cbiAgICBzdGF0ZS53cml0ZWNiID0gY2FsbGJhY2tcbiAgICBzdGF0ZS53cml0aW5nID0gdHJ1ZVxuICAgIHN0YXRlLnN5bmMgPSB0cnVlXG4gICAgc3RyZWFtLl93cml0ZShjaHVuaywgZW5jb2RpbmcsIHN0YXRlLm9ud3JpdGUpXG4gICAgc3RhdGUuc3luYyA9IGZhbHNlXG4gIH1cblxuICAvLyBSZXR1cm4gZmFsc2UgaWYgZXJyb3JlZCBvciBkZXN0cm95ZWQgaW4gb3JkZXIgdG8gYnJlYWtcbiAgLy8gYW55IHN5bmNocm9ub3VzIHdoaWxlKHN0cmVhbS53cml0ZShkYXRhKSkgbG9vcHMuXG4gIHJldHVybiByZXQgJiYgIXN0YXRlLmVycm9yZWQgJiYgIXN0YXRlLmRlc3Ryb3llZFxufVxuZnVuY3Rpb24gZG9Xcml0ZShzdHJlYW0sIHN0YXRlLCB3cml0ZXYsIGxlbiwgY2h1bmssIGVuY29kaW5nLCBjYikge1xuICBzdGF0ZS53cml0ZWxlbiA9IGxlblxuICBzdGF0ZS53cml0ZWNiID0gY2JcbiAgc3RhdGUud3JpdGluZyA9IHRydWVcbiAgc3RhdGUuc3luYyA9IHRydWVcbiAgaWYgKHN0YXRlLmRlc3Ryb3llZCkgc3RhdGUub253cml0ZShuZXcgRVJSX1NUUkVBTV9ERVNUUk9ZRUQoJ3dyaXRlJykpXG4gIGVsc2UgaWYgKHdyaXRldikgc3RyZWFtLl93cml0ZXYoY2h1bmssIHN0YXRlLm9ud3JpdGUpXG4gIGVsc2Ugc3RyZWFtLl93cml0ZShjaHVuaywgZW5jb2RpbmcsIHN0YXRlLm9ud3JpdGUpXG4gIHN0YXRlLnN5bmMgPSBmYWxzZVxufVxuZnVuY3Rpb24gb253cml0ZUVycm9yKHN0cmVhbSwgc3RhdGUsIGVyLCBjYikge1xuICAtLXN0YXRlLnBlbmRpbmdjYlxuICBjYihlcilcbiAgLy8gRW5zdXJlIGNhbGxiYWNrcyBhcmUgaW52b2tlZCBldmVuIHdoZW4gYXV0b0Rlc3Ryb3kgaXNcbiAgLy8gbm90IGVuYWJsZWQuIFBhc3NpbmcgYGVyYCBoZXJlIGRvZXNuJ3QgbWFrZSBzZW5zZSBzaW5jZVxuICAvLyBpdCdzIHJlbGF0ZWQgdG8gb25lIHNwZWNpZmljIHdyaXRlLCBub3QgdG8gdGhlIGJ1ZmZlcmVkXG4gIC8vIHdyaXRlcy5cbiAgZXJyb3JCdWZmZXIoc3RhdGUpXG4gIC8vIFRoaXMgY2FuIGVtaXQgZXJyb3IsIGJ1dCBlcnJvciBtdXN0IGFsd2F5cyBmb2xsb3cgY2IuXG4gIGVycm9yT3JEZXN0cm95KHN0cmVhbSwgZXIpXG59XG5mdW5jdGlvbiBvbndyaXRlKHN0cmVhbSwgZXIpIHtcbiAgY29uc3Qgc3RhdGUgPSBzdHJlYW0uX3dyaXRhYmxlU3RhdGVcbiAgY29uc3Qgc3luYyA9IHN0YXRlLnN5bmNcbiAgY29uc3QgY2IgPSBzdGF0ZS53cml0ZWNiXG4gIGlmICh0eXBlb2YgY2IgIT09ICdmdW5jdGlvbicpIHtcbiAgICBlcnJvck9yRGVzdHJveShzdHJlYW0sIG5ldyBFUlJfTVVMVElQTEVfQ0FMTEJBQ0soKSlcbiAgICByZXR1cm5cbiAgfVxuICBzdGF0ZS53cml0aW5nID0gZmFsc2VcbiAgc3RhdGUud3JpdGVjYiA9IG51bGxcbiAgc3RhdGUubGVuZ3RoIC09IHN0YXRlLndyaXRlbGVuXG4gIHN0YXRlLndyaXRlbGVuID0gMFxuICBpZiAoZXIpIHtcbiAgICAvLyBBdm9pZCBWOCBsZWFrLCBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvcHVsbC8zNDEwMyNpc3N1ZWNvbW1lbnQtNjUyMDAyMzY0XG4gICAgZXIuc3RhY2sgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcblxuICAgIGlmICghc3RhdGUuZXJyb3JlZCkge1xuICAgICAgc3RhdGUuZXJyb3JlZCA9IGVyXG4gICAgfVxuXG4gICAgLy8gSW4gY2FzZSBvZiBkdXBsZXggc3RyZWFtcyB3ZSBuZWVkIHRvIG5vdGlmeSB0aGUgcmVhZGFibGUgc2lkZSBvZiB0aGVcbiAgICAvLyBlcnJvci5cbiAgICBpZiAoc3RyZWFtLl9yZWFkYWJsZVN0YXRlICYmICFzdHJlYW0uX3JlYWRhYmxlU3RhdGUuZXJyb3JlZCkge1xuICAgICAgc3RyZWFtLl9yZWFkYWJsZVN0YXRlLmVycm9yZWQgPSBlclxuICAgIH1cbiAgICBpZiAoc3luYykge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhvbndyaXRlRXJyb3IsIHN0cmVhbSwgc3RhdGUsIGVyLCBjYilcbiAgICB9IGVsc2Uge1xuICAgICAgb253cml0ZUVycm9yKHN0cmVhbSwgc3RhdGUsIGVyLCBjYilcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKHN0YXRlLmJ1ZmZlcmVkLmxlbmd0aCA+IHN0YXRlLmJ1ZmZlcmVkSW5kZXgpIHtcbiAgICAgIGNsZWFyQnVmZmVyKHN0cmVhbSwgc3RhdGUpXG4gICAgfVxuICAgIGlmIChzeW5jKSB7XG4gICAgICAvLyBJdCBpcyBhIGNvbW1vbiBjYXNlIHRoYXQgdGhlIGNhbGxiYWNrIHBhc3NlZCB0byAud3JpdGUoKSBpcyBhbHdheXNcbiAgICAgIC8vIHRoZSBzYW1lLiBJbiB0aGF0IGNhc2UsIHdlIGRvIG5vdCBzY2hlZHVsZSBhIG5ldyBuZXh0VGljaygpLCBidXRcbiAgICAgIC8vIHJhdGhlciBqdXN0IGluY3JlYXNlIGEgY291bnRlciwgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSBhbmQgYXZvaWRcbiAgICAgIC8vIG1lbW9yeSBhbGxvY2F0aW9ucy5cbiAgICAgIGlmIChzdGF0ZS5hZnRlcldyaXRlVGlja0luZm8gIT09IG51bGwgJiYgc3RhdGUuYWZ0ZXJXcml0ZVRpY2tJbmZvLmNiID09PSBjYikge1xuICAgICAgICBzdGF0ZS5hZnRlcldyaXRlVGlja0luZm8uY291bnQrK1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhdGUuYWZ0ZXJXcml0ZVRpY2tJbmZvID0ge1xuICAgICAgICAgIGNvdW50OiAxLFxuICAgICAgICAgIGNiLFxuICAgICAgICAgIHN0cmVhbSxcbiAgICAgICAgICBzdGF0ZVxuICAgICAgICB9XG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soYWZ0ZXJXcml0ZVRpY2ssIHN0YXRlLmFmdGVyV3JpdGVUaWNrSW5mbylcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYWZ0ZXJXcml0ZShzdHJlYW0sIHN0YXRlLCAxLCBjYilcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGFmdGVyV3JpdGVUaWNrKHsgc3RyZWFtLCBzdGF0ZSwgY291bnQsIGNiIH0pIHtcbiAgc3RhdGUuYWZ0ZXJXcml0ZVRpY2tJbmZvID0gbnVsbFxuICByZXR1cm4gYWZ0ZXJXcml0ZShzdHJlYW0sIHN0YXRlLCBjb3VudCwgY2IpXG59XG5mdW5jdGlvbiBhZnRlcldyaXRlKHN0cmVhbSwgc3RhdGUsIGNvdW50LCBjYikge1xuICBjb25zdCBuZWVkRHJhaW4gPSAhc3RhdGUuZW5kaW5nICYmICFzdHJlYW0uZGVzdHJveWVkICYmIHN0YXRlLmxlbmd0aCA9PT0gMCAmJiBzdGF0ZS5uZWVkRHJhaW5cbiAgaWYgKG5lZWREcmFpbikge1xuICAgIHN0YXRlLm5lZWREcmFpbiA9IGZhbHNlXG4gICAgc3RyZWFtLmVtaXQoJ2RyYWluJylcbiAgfVxuICB3aGlsZSAoY291bnQtLSA+IDApIHtcbiAgICBzdGF0ZS5wZW5kaW5nY2ItLVxuICAgIGNiKClcbiAgfVxuICBpZiAoc3RhdGUuZGVzdHJveWVkKSB7XG4gICAgZXJyb3JCdWZmZXIoc3RhdGUpXG4gIH1cbiAgZmluaXNoTWF5YmUoc3RyZWFtLCBzdGF0ZSlcbn1cblxuLy8gSWYgdGhlcmUncyBzb21ldGhpbmcgaW4gdGhlIGJ1ZmZlciB3YWl0aW5nLCB0aGVuIGludm9rZSBjYWxsYmFja3MuXG5mdW5jdGlvbiBlcnJvckJ1ZmZlcihzdGF0ZSkge1xuICBpZiAoc3RhdGUud3JpdGluZykge1xuICAgIHJldHVyblxuICB9XG4gIGZvciAobGV0IG4gPSBzdGF0ZS5idWZmZXJlZEluZGV4OyBuIDwgc3RhdGUuYnVmZmVyZWQubGVuZ3RoOyArK24pIHtcbiAgICB2YXIgX3N0YXRlJGVycm9yZWRcbiAgICBjb25zdCB7IGNodW5rLCBjYWxsYmFjayB9ID0gc3RhdGUuYnVmZmVyZWRbbl1cbiAgICBjb25zdCBsZW4gPSBzdGF0ZS5vYmplY3RNb2RlID8gMSA6IGNodW5rLmxlbmd0aFxuICAgIHN0YXRlLmxlbmd0aCAtPSBsZW5cbiAgICBjYWxsYmFjayhcbiAgICAgIChfc3RhdGUkZXJyb3JlZCA9IHN0YXRlLmVycm9yZWQpICE9PSBudWxsICYmIF9zdGF0ZSRlcnJvcmVkICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBfc3RhdGUkZXJyb3JlZFxuICAgICAgICA6IG5ldyBFUlJfU1RSRUFNX0RFU1RST1lFRCgnd3JpdGUnKVxuICAgIClcbiAgfVxuICBjb25zdCBvbmZpbmlzaENhbGxiYWNrcyA9IHN0YXRlW2tPbkZpbmlzaGVkXS5zcGxpY2UoMClcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBvbmZpbmlzaENhbGxiYWNrcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBfc3RhdGUkZXJyb3JlZDJcbiAgICBvbmZpbmlzaENhbGxiYWNrc1tpXShcbiAgICAgIChfc3RhdGUkZXJyb3JlZDIgPSBzdGF0ZS5lcnJvcmVkKSAhPT0gbnVsbCAmJiBfc3RhdGUkZXJyb3JlZDIgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IF9zdGF0ZSRlcnJvcmVkMlxuICAgICAgICA6IG5ldyBFUlJfU1RSRUFNX0RFU1RST1lFRCgnZW5kJylcbiAgICApXG4gIH1cbiAgcmVzZXRCdWZmZXIoc3RhdGUpXG59XG5cbi8vIElmIHRoZXJlJ3Mgc29tZXRoaW5nIGluIHRoZSBidWZmZXIgd2FpdGluZywgdGhlbiBwcm9jZXNzIGl0LlxuZnVuY3Rpb24gY2xlYXJCdWZmZXIoc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoc3RhdGUuY29ya2VkIHx8IHN0YXRlLmJ1ZmZlclByb2Nlc3NpbmcgfHwgc3RhdGUuZGVzdHJveWVkIHx8ICFzdGF0ZS5jb25zdHJ1Y3RlZCkge1xuICAgIHJldHVyblxuICB9XG4gIGNvbnN0IHsgYnVmZmVyZWQsIGJ1ZmZlcmVkSW5kZXgsIG9iamVjdE1vZGUgfSA9IHN0YXRlXG4gIGNvbnN0IGJ1ZmZlcmVkTGVuZ3RoID0gYnVmZmVyZWQubGVuZ3RoIC0gYnVmZmVyZWRJbmRleFxuICBpZiAoIWJ1ZmZlcmVkTGVuZ3RoKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgbGV0IGkgPSBidWZmZXJlZEluZGV4XG4gIHN0YXRlLmJ1ZmZlclByb2Nlc3NpbmcgPSB0cnVlXG4gIGlmIChidWZmZXJlZExlbmd0aCA+IDEgJiYgc3RyZWFtLl93cml0ZXYpIHtcbiAgICBzdGF0ZS5wZW5kaW5nY2IgLT0gYnVmZmVyZWRMZW5ndGggLSAxXG4gICAgY29uc3QgY2FsbGJhY2sgPSBzdGF0ZS5hbGxOb29wXG4gICAgICA/IG5vcFxuICAgICAgOiAoZXJyKSA9PiB7XG4gICAgICAgICAgZm9yIChsZXQgbiA9IGk7IG4gPCBidWZmZXJlZC5sZW5ndGg7ICsrbikge1xuICAgICAgICAgICAgYnVmZmVyZWRbbl0uY2FsbGJhY2soZXJyKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIC8vIE1ha2UgYSBjb3B5IG9mIGBidWZmZXJlZGAgaWYgaXQncyBnb2luZyB0byBiZSB1c2VkIGJ5IGBjYWxsYmFja2AgYWJvdmUsXG4gICAgLy8gc2luY2UgYGRvV3JpdGVgIHdpbGwgbXV0YXRlIHRoZSBhcnJheS5cbiAgICBjb25zdCBjaHVua3MgPSBzdGF0ZS5hbGxOb29wICYmIGkgPT09IDAgPyBidWZmZXJlZCA6IEFycmF5UHJvdG90eXBlU2xpY2UoYnVmZmVyZWQsIGkpXG4gICAgY2h1bmtzLmFsbEJ1ZmZlcnMgPSBzdGF0ZS5hbGxCdWZmZXJzXG4gICAgZG9Xcml0ZShzdHJlYW0sIHN0YXRlLCB0cnVlLCBzdGF0ZS5sZW5ndGgsIGNodW5rcywgJycsIGNhbGxiYWNrKVxuICAgIHJlc2V0QnVmZmVyKHN0YXRlKVxuICB9IGVsc2Uge1xuICAgIGRvIHtcbiAgICAgIGNvbnN0IHsgY2h1bmssIGVuY29kaW5nLCBjYWxsYmFjayB9ID0gYnVmZmVyZWRbaV1cbiAgICAgIGJ1ZmZlcmVkW2krK10gPSBudWxsXG4gICAgICBjb25zdCBsZW4gPSBvYmplY3RNb2RlID8gMSA6IGNodW5rLmxlbmd0aFxuICAgICAgZG9Xcml0ZShzdHJlYW0sIHN0YXRlLCBmYWxzZSwgbGVuLCBjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKVxuICAgIH0gd2hpbGUgKGkgPCBidWZmZXJlZC5sZW5ndGggJiYgIXN0YXRlLndyaXRpbmcpXG4gICAgaWYgKGkgPT09IGJ1ZmZlcmVkLmxlbmd0aCkge1xuICAgICAgcmVzZXRCdWZmZXIoc3RhdGUpXG4gICAgfSBlbHNlIGlmIChpID4gMjU2KSB7XG4gICAgICBidWZmZXJlZC5zcGxpY2UoMCwgaSlcbiAgICAgIHN0YXRlLmJ1ZmZlcmVkSW5kZXggPSAwXG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLmJ1ZmZlcmVkSW5kZXggPSBpXG4gICAgfVxuICB9XG4gIHN0YXRlLmJ1ZmZlclByb2Nlc3NpbmcgPSBmYWxzZVxufVxuV3JpdGFibGUucHJvdG90eXBlLl93cml0ZSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIGlmICh0aGlzLl93cml0ZXYpIHtcbiAgICB0aGlzLl93cml0ZXYoXG4gICAgICBbXG4gICAgICAgIHtcbiAgICAgICAgICBjaHVuayxcbiAgICAgICAgICBlbmNvZGluZ1xuICAgICAgICB9XG4gICAgICBdLFxuICAgICAgY2JcbiAgICApXG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVEKCdfd3JpdGUoKScpXG4gIH1cbn1cbldyaXRhYmxlLnByb3RvdHlwZS5fd3JpdGV2ID0gbnVsbFxuV3JpdGFibGUucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIGNvbnN0IHN0YXRlID0gdGhpcy5fd3JpdGFibGVTdGF0ZVxuICBpZiAodHlwZW9mIGNodW5rID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2IgPSBjaHVua1xuICAgIGNodW5rID0gbnVsbFxuICAgIGVuY29kaW5nID0gbnVsbFxuICB9IGVsc2UgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNiID0gZW5jb2RpbmdcbiAgICBlbmNvZGluZyA9IG51bGxcbiAgfVxuICBsZXQgZXJyXG4gIGlmIChjaHVuayAhPT0gbnVsbCAmJiBjaHVuayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgcmV0ID0gX3dyaXRlKHRoaXMsIGNodW5rLCBlbmNvZGluZylcbiAgICBpZiAocmV0IGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIGVyciA9IHJldFxuICAgIH1cbiAgfVxuXG4gIC8vIC5lbmQoKSBmdWxseSB1bmNvcmtzLlxuICBpZiAoc3RhdGUuY29ya2VkKSB7XG4gICAgc3RhdGUuY29ya2VkID0gMVxuICAgIHRoaXMudW5jb3JrKClcbiAgfVxuICBpZiAoZXJyKSB7XG4gICAgLy8gRG8gbm90aGluZy4uLlxuICB9IGVsc2UgaWYgKCFzdGF0ZS5lcnJvcmVkICYmICFzdGF0ZS5lbmRpbmcpIHtcbiAgICAvLyBUaGlzIGlzIGZvcmdpdmluZyBpbiB0ZXJtcyBvZiB1bm5lY2Vzc2FyeSBjYWxscyB0byBlbmQoKSBhbmQgY2FuIGhpZGVcbiAgICAvLyBsb2dpYyBlcnJvcnMuIEhvd2V2ZXIsIHVzdWFsbHkgc3VjaCBlcnJvcnMgYXJlIGhhcm1sZXNzIGFuZCBjYXVzaW5nIGFcbiAgICAvLyBoYXJkIGVycm9yIGNhbiBiZSBkaXNwcm9wb3J0aW9uYXRlbHkgZGVzdHJ1Y3RpdmUuIEl0IGlzIG5vdCBhbHdheXNcbiAgICAvLyB0cml2aWFsIGZvciB0aGUgdXNlciB0byBkZXRlcm1pbmUgd2hldGhlciBlbmQoKSBuZWVkcyB0byBiZSBjYWxsZWRcbiAgICAvLyBvciBub3QuXG5cbiAgICBzdGF0ZS5lbmRpbmcgPSB0cnVlXG4gICAgZmluaXNoTWF5YmUodGhpcywgc3RhdGUsIHRydWUpXG4gICAgc3RhdGUuZW5kZWQgPSB0cnVlXG4gIH0gZWxzZSBpZiAoc3RhdGUuZmluaXNoZWQpIHtcbiAgICBlcnIgPSBuZXcgRVJSX1NUUkVBTV9BTFJFQURZX0ZJTklTSEVEKCdlbmQnKVxuICB9IGVsc2UgaWYgKHN0YXRlLmRlc3Ryb3llZCkge1xuICAgIGVyciA9IG5ldyBFUlJfU1RSRUFNX0RFU1RST1lFRCgnZW5kJylcbiAgfVxuICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKGVyciB8fCBzdGF0ZS5maW5pc2hlZCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhjYiwgZXJyKVxuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZVtrT25GaW5pc2hlZF0ucHVzaChjYilcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cbmZ1bmN0aW9uIG5lZWRGaW5pc2goc3RhdGUpIHtcbiAgcmV0dXJuIChcbiAgICBzdGF0ZS5lbmRpbmcgJiZcbiAgICAhc3RhdGUuZGVzdHJveWVkICYmXG4gICAgc3RhdGUuY29uc3RydWN0ZWQgJiZcbiAgICBzdGF0ZS5sZW5ndGggPT09IDAgJiZcbiAgICAhc3RhdGUuZXJyb3JlZCAmJlxuICAgIHN0YXRlLmJ1ZmZlcmVkLmxlbmd0aCA9PT0gMCAmJlxuICAgICFzdGF0ZS5maW5pc2hlZCAmJlxuICAgICFzdGF0ZS53cml0aW5nICYmXG4gICAgIXN0YXRlLmVycm9yRW1pdHRlZCAmJlxuICAgICFzdGF0ZS5jbG9zZUVtaXR0ZWRcbiAgKVxufVxuZnVuY3Rpb24gY2FsbEZpbmFsKHN0cmVhbSwgc3RhdGUpIHtcbiAgbGV0IGNhbGxlZCA9IGZhbHNlXG4gIGZ1bmN0aW9uIG9uRmluaXNoKGVycikge1xuICAgIGlmIChjYWxsZWQpIHtcbiAgICAgIGVycm9yT3JEZXN0cm95KHN0cmVhbSwgZXJyICE9PSBudWxsICYmIGVyciAhPT0gdW5kZWZpbmVkID8gZXJyIDogRVJSX01VTFRJUExFX0NBTExCQUNLKCkpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY2FsbGVkID0gdHJ1ZVxuICAgIHN0YXRlLnBlbmRpbmdjYi0tXG4gICAgaWYgKGVycikge1xuICAgICAgY29uc3Qgb25maW5pc2hDYWxsYmFja3MgPSBzdGF0ZVtrT25GaW5pc2hlZF0uc3BsaWNlKDApXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9uZmluaXNoQ2FsbGJhY2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG9uZmluaXNoQ2FsbGJhY2tzW2ldKGVycilcbiAgICAgIH1cbiAgICAgIGVycm9yT3JEZXN0cm95KHN0cmVhbSwgZXJyLCBzdGF0ZS5zeW5jKVxuICAgIH0gZWxzZSBpZiAobmVlZEZpbmlzaChzdGF0ZSkpIHtcbiAgICAgIHN0YXRlLnByZWZpbmlzaGVkID0gdHJ1ZVxuICAgICAgc3RyZWFtLmVtaXQoJ3ByZWZpbmlzaCcpXG4gICAgICAvLyBCYWNrd2FyZHMgY29tcGF0LiBEb24ndCBjaGVjayBzdGF0ZS5zeW5jIGhlcmUuXG4gICAgICAvLyBTb21lIHN0cmVhbXMgYXNzdW1lICdmaW5pc2gnIHdpbGwgYmUgZW1pdHRlZFxuICAgICAgLy8gYXN5bmNocm9ub3VzbHkgcmVsYXRpdmUgdG8gX2ZpbmFsIGNhbGxiYWNrLlxuICAgICAgc3RhdGUucGVuZGluZ2NiKytcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZmluaXNoLCBzdHJlYW0sIHN0YXRlKVxuICAgIH1cbiAgfVxuICBzdGF0ZS5zeW5jID0gdHJ1ZVxuICBzdGF0ZS5wZW5kaW5nY2IrK1xuICB0cnkge1xuICAgIHN0cmVhbS5fZmluYWwob25GaW5pc2gpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIG9uRmluaXNoKGVycilcbiAgfVxuICBzdGF0ZS5zeW5jID0gZmFsc2Vcbn1cbmZ1bmN0aW9uIHByZWZpbmlzaChzdHJlYW0sIHN0YXRlKSB7XG4gIGlmICghc3RhdGUucHJlZmluaXNoZWQgJiYgIXN0YXRlLmZpbmFsQ2FsbGVkKSB7XG4gICAgaWYgKHR5cGVvZiBzdHJlYW0uX2ZpbmFsID09PSAnZnVuY3Rpb24nICYmICFzdGF0ZS5kZXN0cm95ZWQpIHtcbiAgICAgIHN0YXRlLmZpbmFsQ2FsbGVkID0gdHJ1ZVxuICAgICAgY2FsbEZpbmFsKHN0cmVhbSwgc3RhdGUpXG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLnByZWZpbmlzaGVkID0gdHJ1ZVxuICAgICAgc3RyZWFtLmVtaXQoJ3ByZWZpbmlzaCcpXG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBmaW5pc2hNYXliZShzdHJlYW0sIHN0YXRlLCBzeW5jKSB7XG4gIGlmIChuZWVkRmluaXNoKHN0YXRlKSkge1xuICAgIHByZWZpbmlzaChzdHJlYW0sIHN0YXRlKVxuICAgIGlmIChzdGF0ZS5wZW5kaW5nY2IgPT09IDApIHtcbiAgICAgIGlmIChzeW5jKSB7XG4gICAgICAgIHN0YXRlLnBlbmRpbmdjYisrXG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soXG4gICAgICAgICAgKHN0cmVhbSwgc3RhdGUpID0+IHtcbiAgICAgICAgICAgIGlmIChuZWVkRmluaXNoKHN0YXRlKSkge1xuICAgICAgICAgICAgICBmaW5pc2goc3RyZWFtLCBzdGF0ZSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHN0YXRlLnBlbmRpbmdjYi0tXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBzdHJlYW0sXG4gICAgICAgICAgc3RhdGVcbiAgICAgICAgKVxuICAgICAgfSBlbHNlIGlmIChuZWVkRmluaXNoKHN0YXRlKSkge1xuICAgICAgICBzdGF0ZS5wZW5kaW5nY2IrK1xuICAgICAgICBmaW5pc2goc3RyZWFtLCBzdGF0ZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGZpbmlzaChzdHJlYW0sIHN0YXRlKSB7XG4gIHN0YXRlLnBlbmRpbmdjYi0tXG4gIHN0YXRlLmZpbmlzaGVkID0gdHJ1ZVxuICBjb25zdCBvbmZpbmlzaENhbGxiYWNrcyA9IHN0YXRlW2tPbkZpbmlzaGVkXS5zcGxpY2UoMClcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBvbmZpbmlzaENhbGxiYWNrcy5sZW5ndGg7IGkrKykge1xuICAgIG9uZmluaXNoQ2FsbGJhY2tzW2ldKClcbiAgfVxuICBzdHJlYW0uZW1pdCgnZmluaXNoJylcbiAgaWYgKHN0YXRlLmF1dG9EZXN0cm95KSB7XG4gICAgLy8gSW4gY2FzZSBvZiBkdXBsZXggc3RyZWFtcyB3ZSBuZWVkIGEgd2F5IHRvIGRldGVjdFxuICAgIC8vIGlmIHRoZSByZWFkYWJsZSBzaWRlIGlzIHJlYWR5IGZvciBhdXRvRGVzdHJveSBhcyB3ZWxsLlxuICAgIGNvbnN0IHJTdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZVxuICAgIGNvbnN0IGF1dG9EZXN0cm95ID1cbiAgICAgICFyU3RhdGUgfHxcbiAgICAgIChyU3RhdGUuYXV0b0Rlc3Ryb3kgJiZcbiAgICAgICAgLy8gV2UgZG9uJ3QgZXhwZWN0IHRoZSByZWFkYWJsZSB0byBldmVyICdlbmQnXG4gICAgICAgIC8vIGlmIHJlYWRhYmxlIGlzIGV4cGxpY2l0bHkgc2V0IHRvIGZhbHNlLlxuICAgICAgICAoclN0YXRlLmVuZEVtaXR0ZWQgfHwgclN0YXRlLnJlYWRhYmxlID09PSBmYWxzZSkpXG4gICAgaWYgKGF1dG9EZXN0cm95KSB7XG4gICAgICBzdHJlYW0uZGVzdHJveSgpXG4gICAgfVxuICB9XG59XG5PYmplY3REZWZpbmVQcm9wZXJ0aWVzKFdyaXRhYmxlLnByb3RvdHlwZSwge1xuICBjbG9zZWQ6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUgPyB0aGlzLl93cml0YWJsZVN0YXRlLmNsb3NlZCA6IGZhbHNlXG4gICAgfVxuICB9LFxuICBkZXN0cm95ZWQ6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUgPyB0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZCA6IGZhbHNlXG4gICAgfSxcbiAgICBzZXQodmFsdWUpIHtcbiAgICAgIC8vIEJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHRoZSB1c2VyIGlzIGV4cGxpY2l0bHkgbWFuYWdpbmcgZGVzdHJveWVkLlxuICAgICAgaWYgKHRoaXMuX3dyaXRhYmxlU3RhdGUpIHtcbiAgICAgICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQgPSB2YWx1ZVxuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgd3JpdGFibGU6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZ2V0KCkge1xuICAgICAgY29uc3QgdyA9IHRoaXMuX3dyaXRhYmxlU3RhdGVcbiAgICAgIC8vIHcud3JpdGFibGUgPT09IGZhbHNlIG1lYW5zIHRoYXQgdGhpcyBpcyBwYXJ0IG9mIGEgRHVwbGV4IHN0cmVhbVxuICAgICAgLy8gd2hlcmUgdGhlIHdyaXRhYmxlIHNpZGUgd2FzIGRpc2FibGVkIHVwb24gY29uc3RydWN0aW9uLlxuICAgICAgLy8gQ29tcGF0LiBUaGUgdXNlciBtaWdodCBtYW51YWxseSBkaXNhYmxlIHdyaXRhYmxlIHNpZGUgdGhyb3VnaFxuICAgICAgLy8gZGVwcmVjYXRlZCBzZXR0ZXIuXG4gICAgICByZXR1cm4gISF3ICYmIHcud3JpdGFibGUgIT09IGZhbHNlICYmICF3LmRlc3Ryb3llZCAmJiAhdy5lcnJvcmVkICYmICF3LmVuZGluZyAmJiAhdy5lbmRlZFxuICAgIH0sXG4gICAgc2V0KHZhbCkge1xuICAgICAgLy8gQmFja3dhcmRzIGNvbXBhdGlibGUuXG4gICAgICBpZiAodGhpcy5fd3JpdGFibGVTdGF0ZSkge1xuICAgICAgICB0aGlzLl93cml0YWJsZVN0YXRlLndyaXRhYmxlID0gISF2YWxcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIHdyaXRhYmxlRmluaXNoZWQ6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUgPyB0aGlzLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkIDogZmFsc2VcbiAgICB9XG4gIH0sXG4gIHdyaXRhYmxlT2JqZWN0TW9kZToge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSA/IHRoaXMuX3dyaXRhYmxlU3RhdGUub2JqZWN0TW9kZSA6IGZhbHNlXG4gICAgfVxuICB9LFxuICB3cml0YWJsZUJ1ZmZlcjoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSAmJiB0aGlzLl93cml0YWJsZVN0YXRlLmdldEJ1ZmZlcigpXG4gICAgfVxuICB9LFxuICB3cml0YWJsZUVuZGVkOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl93cml0YWJsZVN0YXRlID8gdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRpbmcgOiBmYWxzZVxuICAgIH1cbiAgfSxcbiAgd3JpdGFibGVOZWVkRHJhaW46IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZ2V0KCkge1xuICAgICAgY29uc3Qgd1N0YXRlID0gdGhpcy5fd3JpdGFibGVTdGF0ZVxuICAgICAgaWYgKCF3U3RhdGUpIHJldHVybiBmYWxzZVxuICAgICAgcmV0dXJuICF3U3RhdGUuZGVzdHJveWVkICYmICF3U3RhdGUuZW5kaW5nICYmIHdTdGF0ZS5uZWVkRHJhaW5cbiAgICB9XG4gIH0sXG4gIHdyaXRhYmxlSGlnaFdhdGVyTWFyazoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSAmJiB0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcmtcbiAgICB9XG4gIH0sXG4gIHdyaXRhYmxlQ29ya2VkOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl93cml0YWJsZVN0YXRlID8gdGhpcy5fd3JpdGFibGVTdGF0ZS5jb3JrZWQgOiAwXG4gICAgfVxuICB9LFxuICB3cml0YWJsZUxlbmd0aDoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSAmJiB0aGlzLl93cml0YWJsZVN0YXRlLmxlbmd0aFxuICAgIH1cbiAgfSxcbiAgZXJyb3JlZDoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSA/IHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JlZCA6IG51bGxcbiAgICB9XG4gIH0sXG4gIHdyaXRhYmxlQWJvcnRlZDoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiAhIShcbiAgICAgICAgdGhpcy5fd3JpdGFibGVTdGF0ZS53cml0YWJsZSAhPT0gZmFsc2UgJiZcbiAgICAgICAgKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkIHx8IHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JlZCkgJiZcbiAgICAgICAgIXRoaXMuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWRcbiAgICAgIClcbiAgICB9XG4gIH1cbn0pXG5jb25zdCBkZXN0cm95ID0gZGVzdHJveUltcGwuZGVzdHJveVxuV3JpdGFibGUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoZXJyLCBjYikge1xuICBjb25zdCBzdGF0ZSA9IHRoaXMuX3dyaXRhYmxlU3RhdGVcblxuICAvLyBJbnZva2UgcGVuZGluZyBjYWxsYmFja3MuXG4gIGlmICghc3RhdGUuZGVzdHJveWVkICYmIChzdGF0ZS5idWZmZXJlZEluZGV4IDwgc3RhdGUuYnVmZmVyZWQubGVuZ3RoIHx8IHN0YXRlW2tPbkZpbmlzaGVkXS5sZW5ndGgpKSB7XG4gICAgcHJvY2Vzcy5uZXh0VGljayhlcnJvckJ1ZmZlciwgc3RhdGUpXG4gIH1cbiAgZGVzdHJveS5jYWxsKHRoaXMsIGVyciwgY2IpXG4gIHJldHVybiB0aGlzXG59XG5Xcml0YWJsZS5wcm90b3R5cGUuX3VuZGVzdHJveSA9IGRlc3Ryb3lJbXBsLnVuZGVzdHJveVxuV3JpdGFibGUucHJvdG90eXBlLl9kZXN0cm95ID0gZnVuY3Rpb24gKGVyciwgY2IpIHtcbiAgY2IoZXJyKVxufVxuV3JpdGFibGUucHJvdG90eXBlW0VFLmNhcHR1cmVSZWplY3Rpb25TeW1ib2xdID0gZnVuY3Rpb24gKGVycikge1xuICB0aGlzLmRlc3Ryb3koZXJyKVxufVxubGV0IHdlYlN0cmVhbXNBZGFwdGVyc1xuXG4vLyBMYXp5IHRvIGF2b2lkIGNpcmN1bGFyIHJlZmVyZW5jZXNcbmZ1bmN0aW9uIGxhenlXZWJTdHJlYW1zKCkge1xuICBpZiAod2ViU3RyZWFtc0FkYXB0ZXJzID09PSB1bmRlZmluZWQpIHdlYlN0cmVhbXNBZGFwdGVycyA9IHt9XG4gIHJldHVybiB3ZWJTdHJlYW1zQWRhcHRlcnNcbn1cbldyaXRhYmxlLmZyb21XZWIgPSBmdW5jdGlvbiAod3JpdGFibGVTdHJlYW0sIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGxhenlXZWJTdHJlYW1zKCkubmV3U3RyZWFtV3JpdGFibGVGcm9tV3JpdGFibGVTdHJlYW0od3JpdGFibGVTdHJlYW0sIG9wdGlvbnMpXG59XG5Xcml0YWJsZS50b1dlYiA9IGZ1bmN0aW9uIChzdHJlYW1Xcml0YWJsZSkge1xuICByZXR1cm4gbGF6eVdlYlN0cmVhbXMoKS5uZXdXcml0YWJsZVN0cmVhbUZyb21TdHJlYW1Xcml0YWJsZShzdHJlYW1Xcml0YWJsZSlcbn1cbiIsCiAgICAiLyogcmVwbGFjZW1lbnQgc3RhcnQgKi9cblxuY29uc3QgcHJvY2VzcyA9IHJlcXVpcmUoJ3Byb2Nlc3MvJylcblxuLyogcmVwbGFjZW1lbnQgZW5kICovXG5cbjsoJ3VzZSBzdHJpY3QnKVxuY29uc3QgYnVmZmVyTW9kdWxlID0gcmVxdWlyZSgnYnVmZmVyJylcbmNvbnN0IHtcbiAgaXNSZWFkYWJsZSxcbiAgaXNXcml0YWJsZSxcbiAgaXNJdGVyYWJsZSxcbiAgaXNOb2RlU3RyZWFtLFxuICBpc1JlYWRhYmxlTm9kZVN0cmVhbSxcbiAgaXNXcml0YWJsZU5vZGVTdHJlYW0sXG4gIGlzRHVwbGV4Tm9kZVN0cmVhbSxcbiAgaXNSZWFkYWJsZVN0cmVhbSxcbiAgaXNXcml0YWJsZVN0cmVhbVxufSA9IHJlcXVpcmUoJy4vdXRpbHMnKVxuY29uc3QgZW9zID0gcmVxdWlyZSgnLi9lbmQtb2Ytc3RyZWFtJylcbmNvbnN0IHtcbiAgQWJvcnRFcnJvcixcbiAgY29kZXM6IHsgRVJSX0lOVkFMSURfQVJHX1RZUEUsIEVSUl9JTlZBTElEX1JFVFVSTl9WQUxVRSB9XG59ID0gcmVxdWlyZSgnLi4vLi4vb3Vycy9lcnJvcnMnKVxuY29uc3QgeyBkZXN0cm95ZXIgfSA9IHJlcXVpcmUoJy4vZGVzdHJveScpXG5jb25zdCBEdXBsZXggPSByZXF1aXJlKCcuL2R1cGxleCcpXG5jb25zdCBSZWFkYWJsZSA9IHJlcXVpcmUoJy4vcmVhZGFibGUnKVxuY29uc3QgV3JpdGFibGUgPSByZXF1aXJlKCcuL3dyaXRhYmxlJylcbmNvbnN0IHsgY3JlYXRlRGVmZXJyZWRQcm9taXNlIH0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL3V0aWwnKVxuY29uc3QgZnJvbSA9IHJlcXVpcmUoJy4vZnJvbScpXG5jb25zdCBCbG9iID0gZ2xvYmFsVGhpcy5CbG9iIHx8IGJ1ZmZlck1vZHVsZS5CbG9iXG5jb25zdCBpc0Jsb2IgPVxuICB0eXBlb2YgQmxvYiAhPT0gJ3VuZGVmaW5lZCdcbiAgICA/IGZ1bmN0aW9uIGlzQmxvYihiKSB7XG4gICAgICAgIHJldHVybiBiIGluc3RhbmNlb2YgQmxvYlxuICAgICAgfVxuICAgIDogZnVuY3Rpb24gaXNCbG9iKGIpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG5jb25zdCBBYm9ydENvbnRyb2xsZXIgPSBnbG9iYWxUaGlzLkFib3J0Q29udHJvbGxlciB8fCByZXF1aXJlKCdhYm9ydC1jb250cm9sbGVyJykuQWJvcnRDb250cm9sbGVyXG5jb25zdCB7IEZ1bmN0aW9uUHJvdG90eXBlQ2FsbCB9ID0gcmVxdWlyZSgnLi4vLi4vb3Vycy9wcmltb3JkaWFscycpXG5cbi8vIFRoaXMgaXMgbmVlZGVkIGZvciBwcmUgbm9kZSAxNy5cbmNsYXNzIER1cGxleGlmeSBleHRlbmRzIER1cGxleCB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICBzdXBlcihvcHRpb25zKVxuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvMzQzODVcblxuICAgIGlmICgob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBvcHRpb25zLnJlYWRhYmxlKSA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUucmVhZGFibGUgPSBmYWxzZVxuICAgICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRlZCA9IHRydWVcbiAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCA9IHRydWVcbiAgICB9XG4gICAgaWYgKChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IG9wdGlvbnMud3JpdGFibGUpID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5fd3JpdGFibGVTdGF0ZS53cml0YWJsZSA9IGZhbHNlXG4gICAgICB0aGlzLl93cml0YWJsZVN0YXRlLmVuZGluZyA9IHRydWVcbiAgICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWQgPSB0cnVlXG4gICAgICB0aGlzLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkdXBsZXhpZnkoYm9keSwgbmFtZSkge1xuICBpZiAoaXNEdXBsZXhOb2RlU3RyZWFtKGJvZHkpKSB7XG4gICAgcmV0dXJuIGJvZHlcbiAgfVxuICBpZiAoaXNSZWFkYWJsZU5vZGVTdHJlYW0oYm9keSkpIHtcbiAgICByZXR1cm4gX2R1cGxleGlmeSh7XG4gICAgICByZWFkYWJsZTogYm9keVxuICAgIH0pXG4gIH1cbiAgaWYgKGlzV3JpdGFibGVOb2RlU3RyZWFtKGJvZHkpKSB7XG4gICAgcmV0dXJuIF9kdXBsZXhpZnkoe1xuICAgICAgd3JpdGFibGU6IGJvZHlcbiAgICB9KVxuICB9XG4gIGlmIChpc05vZGVTdHJlYW0oYm9keSkpIHtcbiAgICByZXR1cm4gX2R1cGxleGlmeSh7XG4gICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICByZWFkYWJsZTogZmFsc2VcbiAgICB9KVxuICB9XG4gIGlmIChpc1JlYWRhYmxlU3RyZWFtKGJvZHkpKSB7XG4gICAgcmV0dXJuIF9kdXBsZXhpZnkoe1xuICAgICAgcmVhZGFibGU6IFJlYWRhYmxlLmZyb21XZWIoYm9keSlcbiAgICB9KVxuICB9XG4gIGlmIChpc1dyaXRhYmxlU3RyZWFtKGJvZHkpKSB7XG4gICAgcmV0dXJuIF9kdXBsZXhpZnkoe1xuICAgICAgd3JpdGFibGU6IFdyaXRhYmxlLmZyb21XZWIoYm9keSlcbiAgICB9KVxuICB9XG4gIGlmICh0eXBlb2YgYm9keSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNvbnN0IHsgdmFsdWUsIHdyaXRlLCBmaW5hbCwgZGVzdHJveSB9ID0gZnJvbUFzeW5jR2VuKGJvZHkpXG4gICAgaWYgKGlzSXRlcmFibGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gZnJvbShEdXBsZXhpZnksIHZhbHVlLCB7XG4gICAgICAgIC8vIFRPRE8gKHJvbmFnKTogaGlnaFdhdGVyTWFyaz9cbiAgICAgICAgb2JqZWN0TW9kZTogdHJ1ZSxcbiAgICAgICAgd3JpdGUsXG4gICAgICAgIGZpbmFsLFxuICAgICAgICBkZXN0cm95XG4gICAgICB9KVxuICAgIH1cbiAgICBjb25zdCB0aGVuID0gdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHZhbHVlLnRoZW5cbiAgICBpZiAodHlwZW9mIHRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGxldCBkXG4gICAgICBjb25zdCBwcm9taXNlID0gRnVuY3Rpb25Qcm90b3R5cGVDYWxsKFxuICAgICAgICB0aGVuLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgKHZhbCkgPT4ge1xuICAgICAgICAgIGlmICh2YWwgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX1JFVFVSTl9WQUxVRSgnbnVsbHknLCAnYm9keScsIHZhbClcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICBkZXN0cm95ZXIoZCwgZXJyKVxuICAgICAgICB9XG4gICAgICApXG4gICAgICByZXR1cm4gKGQgPSBuZXcgRHVwbGV4aWZ5KHtcbiAgICAgICAgLy8gVE9ETyAocm9uYWcpOiBoaWdoV2F0ZXJNYXJrP1xuICAgICAgICBvYmplY3RNb2RlOiB0cnVlLFxuICAgICAgICByZWFkYWJsZTogZmFsc2UsXG4gICAgICAgIHdyaXRlLFxuICAgICAgICBmaW5hbChjYikge1xuICAgICAgICAgIGZpbmFsKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGF3YWl0IHByb21pc2VcbiAgICAgICAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhjYiwgbnVsbClcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGNiLCBlcnIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfSxcbiAgICAgICAgZGVzdHJveVxuICAgICAgfSkpXG4gICAgfVxuICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9SRVRVUk5fVkFMVUUoJ0l0ZXJhYmxlLCBBc3luY0l0ZXJhYmxlIG9yIEFzeW5jRnVuY3Rpb24nLCBuYW1lLCB2YWx1ZSlcbiAgfVxuICBpZiAoaXNCbG9iKGJvZHkpKSB7XG4gICAgcmV0dXJuIGR1cGxleGlmeShib2R5LmFycmF5QnVmZmVyKCkpXG4gIH1cbiAgaWYgKGlzSXRlcmFibGUoYm9keSkpIHtcbiAgICByZXR1cm4gZnJvbShEdXBsZXhpZnksIGJvZHksIHtcbiAgICAgIC8vIFRPRE8gKHJvbmFnKTogaGlnaFdhdGVyTWFyaz9cbiAgICAgIG9iamVjdE1vZGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogZmFsc2VcbiAgICB9KVxuICB9XG4gIGlmIChcbiAgICBpc1JlYWRhYmxlU3RyZWFtKGJvZHkgPT09IG51bGwgfHwgYm9keSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogYm9keS5yZWFkYWJsZSkgJiZcbiAgICBpc1dyaXRhYmxlU3RyZWFtKGJvZHkgPT09IG51bGwgfHwgYm9keSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogYm9keS53cml0YWJsZSlcbiAgKSB7XG4gICAgcmV0dXJuIER1cGxleGlmeS5mcm9tV2ViKGJvZHkpXG4gIH1cbiAgaWYgKFxuICAgIHR5cGVvZiAoYm9keSA9PT0gbnVsbCB8fCBib2R5ID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBib2R5LndyaXRhYmxlKSA9PT0gJ29iamVjdCcgfHxcbiAgICB0eXBlb2YgKGJvZHkgPT09IG51bGwgfHwgYm9keSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogYm9keS5yZWFkYWJsZSkgPT09ICdvYmplY3QnXG4gICkge1xuICAgIGNvbnN0IHJlYWRhYmxlID1cbiAgICAgIGJvZHkgIT09IG51bGwgJiYgYm9keSAhPT0gdW5kZWZpbmVkICYmIGJvZHkucmVhZGFibGVcbiAgICAgICAgPyBpc1JlYWRhYmxlTm9kZVN0cmVhbShib2R5ID09PSBudWxsIHx8IGJvZHkgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IGJvZHkucmVhZGFibGUpXG4gICAgICAgICAgPyBib2R5ID09PSBudWxsIHx8IGJvZHkgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgICAgIDogYm9keS5yZWFkYWJsZVxuICAgICAgICAgIDogZHVwbGV4aWZ5KGJvZHkucmVhZGFibGUpXG4gICAgICAgIDogdW5kZWZpbmVkXG4gICAgY29uc3Qgd3JpdGFibGUgPVxuICAgICAgYm9keSAhPT0gbnVsbCAmJiBib2R5ICE9PSB1bmRlZmluZWQgJiYgYm9keS53cml0YWJsZVxuICAgICAgICA/IGlzV3JpdGFibGVOb2RlU3RyZWFtKGJvZHkgPT09IG51bGwgfHwgYm9keSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogYm9keS53cml0YWJsZSlcbiAgICAgICAgICA/IGJvZHkgPT09IG51bGwgfHwgYm9keSA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICAgICAgOiBib2R5LndyaXRhYmxlXG4gICAgICAgICAgOiBkdXBsZXhpZnkoYm9keS53cml0YWJsZSlcbiAgICAgICAgOiB1bmRlZmluZWRcbiAgICByZXR1cm4gX2R1cGxleGlmeSh7XG4gICAgICByZWFkYWJsZSxcbiAgICAgIHdyaXRhYmxlXG4gICAgfSlcbiAgfVxuICBjb25zdCB0aGVuID0gYm9keSA9PT0gbnVsbCB8fCBib2R5ID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBib2R5LnRoZW5cbiAgaWYgKHR5cGVvZiB0aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgbGV0IGRcbiAgICBGdW5jdGlvblByb3RvdHlwZUNhbGwoXG4gICAgICB0aGVuLFxuICAgICAgYm9keSxcbiAgICAgICh2YWwpID0+IHtcbiAgICAgICAgaWYgKHZhbCAhPSBudWxsKSB7XG4gICAgICAgICAgZC5wdXNoKHZhbClcbiAgICAgICAgfVxuICAgICAgICBkLnB1c2gobnVsbClcbiAgICAgIH0sXG4gICAgICAoZXJyKSA9PiB7XG4gICAgICAgIGRlc3Ryb3llcihkLCBlcnIpXG4gICAgICB9XG4gICAgKVxuICAgIHJldHVybiAoZCA9IG5ldyBEdXBsZXhpZnkoe1xuICAgICAgb2JqZWN0TW9kZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIHJlYWQoKSB7fVxuICAgIH0pKVxuICB9XG4gIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRShcbiAgICBuYW1lLFxuICAgIFtcbiAgICAgICdCbG9iJyxcbiAgICAgICdSZWFkYWJsZVN0cmVhbScsXG4gICAgICAnV3JpdGFibGVTdHJlYW0nLFxuICAgICAgJ1N0cmVhbScsXG4gICAgICAnSXRlcmFibGUnLFxuICAgICAgJ0FzeW5jSXRlcmFibGUnLFxuICAgICAgJ0Z1bmN0aW9uJyxcbiAgICAgICd7IHJlYWRhYmxlLCB3cml0YWJsZSB9IHBhaXInLFxuICAgICAgJ1Byb21pc2UnXG4gICAgXSxcbiAgICBib2R5XG4gIClcbn1cbmZ1bmN0aW9uIGZyb21Bc3luY0dlbihmbikge1xuICBsZXQgeyBwcm9taXNlLCByZXNvbHZlIH0gPSBjcmVhdGVEZWZlcnJlZFByb21pc2UoKVxuICBjb25zdCBhYyA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuICBjb25zdCBzaWduYWwgPSBhYy5zaWduYWxcbiAgY29uc3QgdmFsdWUgPSBmbihcbiAgICAoYXN5bmMgZnVuY3Rpb24qICgpIHtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIGNvbnN0IF9wcm9taXNlID0gcHJvbWlzZVxuICAgICAgICBwcm9taXNlID0gbnVsbFxuICAgICAgICBjb25zdCB7IGNodW5rLCBkb25lLCBjYiB9ID0gYXdhaXQgX3Byb21pc2VcbiAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhjYilcbiAgICAgICAgaWYgKGRvbmUpIHJldHVyblxuICAgICAgICBpZiAoc2lnbmFsLmFib3J0ZWQpXG4gICAgICAgICAgdGhyb3cgbmV3IEFib3J0RXJyb3IodW5kZWZpbmVkLCB7XG4gICAgICAgICAgICBjYXVzZTogc2lnbmFsLnJlYXNvblxuICAgICAgICAgIH0pXG4gICAgICAgIDsoeyBwcm9taXNlLCByZXNvbHZlIH0gPSBjcmVhdGVEZWZlcnJlZFByb21pc2UoKSlcbiAgICAgICAgeWllbGQgY2h1bmtcbiAgICAgIH1cbiAgICB9KSgpLFxuICAgIHtcbiAgICAgIHNpZ25hbFxuICAgIH1cbiAgKVxuICByZXR1cm4ge1xuICAgIHZhbHVlLFxuICAgIHdyaXRlKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgICAgIGNvbnN0IF9yZXNvbHZlID0gcmVzb2x2ZVxuICAgICAgcmVzb2x2ZSA9IG51bGxcbiAgICAgIF9yZXNvbHZlKHtcbiAgICAgICAgY2h1bmssXG4gICAgICAgIGRvbmU6IGZhbHNlLFxuICAgICAgICBjYlxuICAgICAgfSlcbiAgICB9LFxuICAgIGZpbmFsKGNiKSB7XG4gICAgICBjb25zdCBfcmVzb2x2ZSA9IHJlc29sdmVcbiAgICAgIHJlc29sdmUgPSBudWxsXG4gICAgICBfcmVzb2x2ZSh7XG4gICAgICAgIGRvbmU6IHRydWUsXG4gICAgICAgIGNiXG4gICAgICB9KVxuICAgIH0sXG4gICAgZGVzdHJveShlcnIsIGNiKSB7XG4gICAgICBhYy5hYm9ydCgpXG4gICAgICBjYihlcnIpXG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBfZHVwbGV4aWZ5KHBhaXIpIHtcbiAgY29uc3QgciA9IHBhaXIucmVhZGFibGUgJiYgdHlwZW9mIHBhaXIucmVhZGFibGUucmVhZCAhPT0gJ2Z1bmN0aW9uJyA/IFJlYWRhYmxlLndyYXAocGFpci5yZWFkYWJsZSkgOiBwYWlyLnJlYWRhYmxlXG4gIGNvbnN0IHcgPSBwYWlyLndyaXRhYmxlXG4gIGxldCByZWFkYWJsZSA9ICEhaXNSZWFkYWJsZShyKVxuICBsZXQgd3JpdGFibGUgPSAhIWlzV3JpdGFibGUodylcbiAgbGV0IG9uZHJhaW5cbiAgbGV0IG9uZmluaXNoXG4gIGxldCBvbnJlYWRhYmxlXG4gIGxldCBvbmNsb3NlXG4gIGxldCBkXG4gIGZ1bmN0aW9uIG9uZmluaXNoZWQoZXJyKSB7XG4gICAgY29uc3QgY2IgPSBvbmNsb3NlXG4gICAgb25jbG9zZSA9IG51bGxcbiAgICBpZiAoY2IpIHtcbiAgICAgIGNiKGVycilcbiAgICB9IGVsc2UgaWYgKGVycikge1xuICAgICAgZC5kZXN0cm95KGVycilcbiAgICB9XG4gIH1cblxuICAvLyBUT0RPKHJvbmFnKTogQXZvaWQgZG91YmxlIGJ1ZmZlcmluZy5cbiAgLy8gSW1wbGVtZW50IFdyaXRhYmxlL1JlYWRhYmxlL0R1cGxleCB0cmFpdHMuXG4gIC8vIFNlZSwgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvMzM1MTUuXG4gIGQgPSBuZXcgRHVwbGV4aWZ5KHtcbiAgICAvLyBUT0RPIChyb25hZyk6IGhpZ2hXYXRlck1hcms/XG4gICAgcmVhZGFibGVPYmplY3RNb2RlOiAhIShyICE9PSBudWxsICYmIHIgIT09IHVuZGVmaW5lZCAmJiByLnJlYWRhYmxlT2JqZWN0TW9kZSksXG4gICAgd3JpdGFibGVPYmplY3RNb2RlOiAhISh3ICE9PSBudWxsICYmIHcgIT09IHVuZGVmaW5lZCAmJiB3LndyaXRhYmxlT2JqZWN0TW9kZSksXG4gICAgcmVhZGFibGUsXG4gICAgd3JpdGFibGVcbiAgfSlcbiAgaWYgKHdyaXRhYmxlKSB7XG4gICAgZW9zKHcsIChlcnIpID0+IHtcbiAgICAgIHdyaXRhYmxlID0gZmFsc2VcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgZGVzdHJveWVyKHIsIGVycilcbiAgICAgIH1cbiAgICAgIG9uZmluaXNoZWQoZXJyKVxuICAgIH0pXG4gICAgZC5fd3JpdGUgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYWxsYmFjaykge1xuICAgICAgaWYgKHcud3JpdGUoY2h1bmssIGVuY29kaW5nKSkge1xuICAgICAgICBjYWxsYmFjaygpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvbmRyYWluID0gY2FsbGJhY2tcbiAgICAgIH1cbiAgICB9XG4gICAgZC5fZmluYWwgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgIHcuZW5kKClcbiAgICAgIG9uZmluaXNoID0gY2FsbGJhY2tcbiAgICB9XG4gICAgdy5vbignZHJhaW4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAob25kcmFpbikge1xuICAgICAgICBjb25zdCBjYiA9IG9uZHJhaW5cbiAgICAgICAgb25kcmFpbiA9IG51bGxcbiAgICAgICAgY2IoKVxuICAgICAgfVxuICAgIH0pXG4gICAgdy5vbignZmluaXNoJywgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKG9uZmluaXNoKSB7XG4gICAgICAgIGNvbnN0IGNiID0gb25maW5pc2hcbiAgICAgICAgb25maW5pc2ggPSBudWxsXG4gICAgICAgIGNiKClcbiAgICAgIH1cbiAgICB9KVxuICB9XG4gIGlmIChyZWFkYWJsZSkge1xuICAgIGVvcyhyLCAoZXJyKSA9PiB7XG4gICAgICByZWFkYWJsZSA9IGZhbHNlXG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIGRlc3Ryb3llcihyLCBlcnIpXG4gICAgICB9XG4gICAgICBvbmZpbmlzaGVkKGVycilcbiAgICB9KVxuICAgIHIub24oJ3JlYWRhYmxlJywgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKG9ucmVhZGFibGUpIHtcbiAgICAgICAgY29uc3QgY2IgPSBvbnJlYWRhYmxlXG4gICAgICAgIG9ucmVhZGFibGUgPSBudWxsXG4gICAgICAgIGNiKClcbiAgICAgIH1cbiAgICB9KVxuICAgIHIub24oJ2VuZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGQucHVzaChudWxsKVxuICAgIH0pXG4gICAgZC5fcmVhZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIGNvbnN0IGJ1ZiA9IHIucmVhZCgpXG4gICAgICAgIGlmIChidWYgPT09IG51bGwpIHtcbiAgICAgICAgICBvbnJlYWRhYmxlID0gZC5fcmVhZFxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGlmICghZC5wdXNoKGJ1ZikpIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBkLl9kZXN0cm95ID0gZnVuY3Rpb24gKGVyciwgY2FsbGJhY2spIHtcbiAgICBpZiAoIWVyciAmJiBvbmNsb3NlICE9PSBudWxsKSB7XG4gICAgICBlcnIgPSBuZXcgQWJvcnRFcnJvcigpXG4gICAgfVxuICAgIG9ucmVhZGFibGUgPSBudWxsXG4gICAgb25kcmFpbiA9IG51bGxcbiAgICBvbmZpbmlzaCA9IG51bGxcbiAgICBpZiAob25jbG9zZSA9PT0gbnVsbCkge1xuICAgICAgY2FsbGJhY2soZXJyKVxuICAgIH0gZWxzZSB7XG4gICAgICBvbmNsb3NlID0gY2FsbGJhY2tcbiAgICAgIGRlc3Ryb3llcih3LCBlcnIpXG4gICAgICBkZXN0cm95ZXIociwgZXJyKVxuICAgIH1cbiAgfVxuICByZXR1cm4gZFxufVxuIiwKICAgICIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuLy8gYSBkdXBsZXggc3RyZWFtIGlzIGp1c3QgYSBzdHJlYW0gdGhhdCBpcyBib3RoIHJlYWRhYmxlIGFuZCB3cml0YWJsZS5cbi8vIFNpbmNlIEpTIGRvZXNuJ3QgaGF2ZSBtdWx0aXBsZSBwcm90b3R5cGUgaW5oZXJpdGFuY2UsIHRoaXMgY2xhc3Ncbi8vIHByb3RvdHlwaWNhbGx5IGluaGVyaXRzIGZyb20gUmVhZGFibGUsIGFuZCB0aGVuIHBhcmFzaXRpY2FsbHkgZnJvbVxuLy8gV3JpdGFibGUuXG5cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIE9iamVjdERlZmluZVByb3BlcnRpZXMsXG4gIE9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcixcbiAgT2JqZWN0S2V5cyxcbiAgT2JqZWN0U2V0UHJvdG90eXBlT2Zcbn0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL3ByaW1vcmRpYWxzJylcbm1vZHVsZS5leHBvcnRzID0gRHVwbGV4XG5jb25zdCBSZWFkYWJsZSA9IHJlcXVpcmUoJy4vcmVhZGFibGUnKVxuY29uc3QgV3JpdGFibGUgPSByZXF1aXJlKCcuL3dyaXRhYmxlJylcbk9iamVjdFNldFByb3RvdHlwZU9mKER1cGxleC5wcm90b3R5cGUsIFJlYWRhYmxlLnByb3RvdHlwZSlcbk9iamVjdFNldFByb3RvdHlwZU9mKER1cGxleCwgUmVhZGFibGUpXG57XG4gIGNvbnN0IGtleXMgPSBPYmplY3RLZXlzKFdyaXRhYmxlLnByb3RvdHlwZSlcbiAgLy8gQWxsb3cgdGhlIGtleXMgYXJyYXkgdG8gYmUgR0MnZWQuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IG1ldGhvZCA9IGtleXNbaV1cbiAgICBpZiAoIUR1cGxleC5wcm90b3R5cGVbbWV0aG9kXSkgRHVwbGV4LnByb3RvdHlwZVttZXRob2RdID0gV3JpdGFibGUucHJvdG90eXBlW21ldGhvZF1cbiAgfVxufVxuZnVuY3Rpb24gRHVwbGV4KG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIER1cGxleCkpIHJldHVybiBuZXcgRHVwbGV4KG9wdGlvbnMpXG4gIFJlYWRhYmxlLmNhbGwodGhpcywgb3B0aW9ucylcbiAgV3JpdGFibGUuY2FsbCh0aGlzLCBvcHRpb25zKVxuICBpZiAob3B0aW9ucykge1xuICAgIHRoaXMuYWxsb3dIYWxmT3BlbiA9IG9wdGlvbnMuYWxsb3dIYWxmT3BlbiAhPT0gZmFsc2VcbiAgICBpZiAob3B0aW9ucy5yZWFkYWJsZSA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUucmVhZGFibGUgPSBmYWxzZVxuICAgICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRlZCA9IHRydWVcbiAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCA9IHRydWVcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMud3JpdGFibGUgPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLl93cml0YWJsZVN0YXRlLndyaXRhYmxlID0gZmFsc2VcbiAgICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kaW5nID0gdHJ1ZVxuICAgICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZCA9IHRydWVcbiAgICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQgPSB0cnVlXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRoaXMuYWxsb3dIYWxmT3BlbiA9IHRydWVcbiAgfVxufVxuT2JqZWN0RGVmaW5lUHJvcGVydGllcyhEdXBsZXgucHJvdG90eXBlLCB7XG4gIHdyaXRhYmxlOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIC4uLk9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcihXcml0YWJsZS5wcm90b3R5cGUsICd3cml0YWJsZScpXG4gIH0sXG4gIHdyaXRhYmxlSGlnaFdhdGVyTWFyazoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAuLi5PYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoV3JpdGFibGUucHJvdG90eXBlLCAnd3JpdGFibGVIaWdoV2F0ZXJNYXJrJylcbiAgfSxcbiAgd3JpdGFibGVPYmplY3RNb2RlOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIC4uLk9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcihXcml0YWJsZS5wcm90b3R5cGUsICd3cml0YWJsZU9iamVjdE1vZGUnKVxuICB9LFxuICB3cml0YWJsZUJ1ZmZlcjoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAuLi5PYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoV3JpdGFibGUucHJvdG90eXBlLCAnd3JpdGFibGVCdWZmZXInKVxuICB9LFxuICB3cml0YWJsZUxlbmd0aDoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAuLi5PYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoV3JpdGFibGUucHJvdG90eXBlLCAnd3JpdGFibGVMZW5ndGgnKVxuICB9LFxuICB3cml0YWJsZUZpbmlzaGVkOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIC4uLk9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcihXcml0YWJsZS5wcm90b3R5cGUsICd3cml0YWJsZUZpbmlzaGVkJylcbiAgfSxcbiAgd3JpdGFibGVDb3JrZWQ6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgLi4uT2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFdyaXRhYmxlLnByb3RvdHlwZSwgJ3dyaXRhYmxlQ29ya2VkJylcbiAgfSxcbiAgd3JpdGFibGVFbmRlZDoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAuLi5PYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoV3JpdGFibGUucHJvdG90eXBlLCAnd3JpdGFibGVFbmRlZCcpXG4gIH0sXG4gIHdyaXRhYmxlTmVlZERyYWluOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIC4uLk9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcihXcml0YWJsZS5wcm90b3R5cGUsICd3cml0YWJsZU5lZWREcmFpbicpXG4gIH0sXG4gIGRlc3Ryb3llZDoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBnZXQoKSB7XG4gICAgICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZSA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuX3dyaXRhYmxlU3RhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCAmJiB0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZFxuICAgIH0sXG4gICAgc2V0KHZhbHVlKSB7XG4gICAgICAvLyBCYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB0aGUgdXNlciBpcyBleHBsaWNpdGx5XG4gICAgICAvLyBtYW5hZ2luZyBkZXN0cm95ZWQuXG4gICAgICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZSAmJiB0aGlzLl93cml0YWJsZVN0YXRlKSB7XG4gICAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkID0gdmFsdWVcbiAgICAgICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQgPSB2YWx1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbmxldCB3ZWJTdHJlYW1zQWRhcHRlcnNcblxuLy8gTGF6eSB0byBhdm9pZCBjaXJjdWxhciByZWZlcmVuY2VzXG5mdW5jdGlvbiBsYXp5V2ViU3RyZWFtcygpIHtcbiAgaWYgKHdlYlN0cmVhbXNBZGFwdGVycyA9PT0gdW5kZWZpbmVkKSB3ZWJTdHJlYW1zQWRhcHRlcnMgPSB7fVxuICByZXR1cm4gd2ViU3RyZWFtc0FkYXB0ZXJzXG59XG5EdXBsZXguZnJvbVdlYiA9IGZ1bmN0aW9uIChwYWlyLCBvcHRpb25zKSB7XG4gIHJldHVybiBsYXp5V2ViU3RyZWFtcygpLm5ld1N0cmVhbUR1cGxleEZyb21SZWFkYWJsZVdyaXRhYmxlUGFpcihwYWlyLCBvcHRpb25zKVxufVxuRHVwbGV4LnRvV2ViID0gZnVuY3Rpb24gKGR1cGxleCkge1xuICByZXR1cm4gbGF6eVdlYlN0cmVhbXMoKS5uZXdSZWFkYWJsZVdyaXRhYmxlUGFpckZyb21EdXBsZXgoZHVwbGV4KVxufVxubGV0IGR1cGxleGlmeVxuRHVwbGV4LmZyb20gPSBmdW5jdGlvbiAoYm9keSkge1xuICBpZiAoIWR1cGxleGlmeSkge1xuICAgIGR1cGxleGlmeSA9IHJlcXVpcmUoJy4vZHVwbGV4aWZ5JylcbiAgfVxuICByZXR1cm4gZHVwbGV4aWZ5KGJvZHksICdib2R5Jylcbn1cbiIsCiAgICAiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbi8vIGEgdHJhbnNmb3JtIHN0cmVhbSBpcyBhIHJlYWRhYmxlL3dyaXRhYmxlIHN0cmVhbSB3aGVyZSB5b3UgZG9cbi8vIHNvbWV0aGluZyB3aXRoIHRoZSBkYXRhLiAgU29tZXRpbWVzIGl0J3MgY2FsbGVkIGEgXCJmaWx0ZXJcIixcbi8vIGJ1dCB0aGF0J3Mgbm90IGEgZ3JlYXQgbmFtZSBmb3IgaXQsIHNpbmNlIHRoYXQgaW1wbGllcyBhIHRoaW5nIHdoZXJlXG4vLyBzb21lIGJpdHMgcGFzcyB0aHJvdWdoLCBhbmQgb3RoZXJzIGFyZSBzaW1wbHkgaWdub3JlZC4gIChUaGF0IHdvdWxkXG4vLyBiZSBhIHZhbGlkIGV4YW1wbGUgb2YgYSB0cmFuc2Zvcm0sIG9mIGNvdXJzZS4pXG4vL1xuLy8gV2hpbGUgdGhlIG91dHB1dCBpcyBjYXVzYWxseSByZWxhdGVkIHRvIHRoZSBpbnB1dCwgaXQncyBub3QgYVxuLy8gbmVjZXNzYXJpbHkgc3ltbWV0cmljIG9yIHN5bmNocm9ub3VzIHRyYW5zZm9ybWF0aW9uLiAgRm9yIGV4YW1wbGUsXG4vLyBhIHpsaWIgc3RyZWFtIG1pZ2h0IHRha2UgbXVsdGlwbGUgcGxhaW4tdGV4dCB3cml0ZXMoKSwgYW5kIHRoZW5cbi8vIGVtaXQgYSBzaW5nbGUgY29tcHJlc3NlZCBjaHVuayBzb21lIHRpbWUgaW4gdGhlIGZ1dHVyZS5cbi8vXG4vLyBIZXJlJ3MgaG93IHRoaXMgd29ya3M6XG4vL1xuLy8gVGhlIFRyYW5zZm9ybSBzdHJlYW0gaGFzIGFsbCB0aGUgYXNwZWN0cyBvZiB0aGUgcmVhZGFibGUgYW5kIHdyaXRhYmxlXG4vLyBzdHJlYW0gY2xhc3Nlcy4gIFdoZW4geW91IHdyaXRlKGNodW5rKSwgdGhhdCBjYWxscyBfd3JpdGUoY2h1bmssY2IpXG4vLyBpbnRlcm5hbGx5LCBhbmQgcmV0dXJucyBmYWxzZSBpZiB0aGVyZSdzIGEgbG90IG9mIHBlbmRpbmcgd3JpdGVzXG4vLyBidWZmZXJlZCB1cC4gIFdoZW4geW91IGNhbGwgcmVhZCgpLCB0aGF0IGNhbGxzIF9yZWFkKG4pIHVudGlsXG4vLyB0aGVyZSdzIGVub3VnaCBwZW5kaW5nIHJlYWRhYmxlIGRhdGEgYnVmZmVyZWQgdXAuXG4vL1xuLy8gSW4gYSB0cmFuc2Zvcm0gc3RyZWFtLCB0aGUgd3JpdHRlbiBkYXRhIGlzIHBsYWNlZCBpbiBhIGJ1ZmZlci4gIFdoZW5cbi8vIF9yZWFkKG4pIGlzIGNhbGxlZCwgaXQgdHJhbnNmb3JtcyB0aGUgcXVldWVkIHVwIGRhdGEsIGNhbGxpbmcgdGhlXG4vLyBidWZmZXJlZCBfd3JpdGUgY2IncyBhcyBpdCBjb25zdW1lcyBjaHVua3MuICBJZiBjb25zdW1pbmcgYSBzaW5nbGVcbi8vIHdyaXR0ZW4gY2h1bmsgd291bGQgcmVzdWx0IGluIG11bHRpcGxlIG91dHB1dCBjaHVua3MsIHRoZW4gdGhlIGZpcnN0XG4vLyBvdXRwdXR0ZWQgYml0IGNhbGxzIHRoZSByZWFkY2IsIGFuZCBzdWJzZXF1ZW50IGNodW5rcyBqdXN0IGdvIGludG9cbi8vIHRoZSByZWFkIGJ1ZmZlciwgYW5kIHdpbGwgY2F1c2UgaXQgdG8gZW1pdCAncmVhZGFibGUnIGlmIG5lY2Vzc2FyeS5cbi8vXG4vLyBUaGlzIHdheSwgYmFjay1wcmVzc3VyZSBpcyBhY3R1YWxseSBkZXRlcm1pbmVkIGJ5IHRoZSByZWFkaW5nIHNpZGUsXG4vLyBzaW5jZSBfcmVhZCBoYXMgdG8gYmUgY2FsbGVkIHRvIHN0YXJ0IHByb2Nlc3NpbmcgYSBuZXcgY2h1bmsuICBIb3dldmVyLFxuLy8gYSBwYXRob2xvZ2ljYWwgaW5mbGF0ZSB0eXBlIG9mIHRyYW5zZm9ybSBjYW4gY2F1c2UgZXhjZXNzaXZlIGJ1ZmZlcmluZ1xuLy8gaGVyZS4gIEZvciBleGFtcGxlLCBpbWFnaW5lIGEgc3RyZWFtIHdoZXJlIGV2ZXJ5IGJ5dGUgb2YgaW5wdXQgaXNcbi8vIGludGVycHJldGVkIGFzIGFuIGludGVnZXIgZnJvbSAwLTI1NSwgYW5kIHRoZW4gcmVzdWx0cyBpbiB0aGF0IG1hbnlcbi8vIGJ5dGVzIG9mIG91dHB1dC4gIFdyaXRpbmcgdGhlIDQgYnl0ZXMge2ZmLGZmLGZmLGZmfSB3b3VsZCByZXN1bHQgaW5cbi8vIDFrYiBvZiBkYXRhIGJlaW5nIG91dHB1dC4gIEluIHRoaXMgY2FzZSwgeW91IGNvdWxkIHdyaXRlIGEgdmVyeSBzbWFsbFxuLy8gYW1vdW50IG9mIGlucHV0LCBhbmQgZW5kIHVwIHdpdGggYSB2ZXJ5IGxhcmdlIGFtb3VudCBvZiBvdXRwdXQuICBJblxuLy8gc3VjaCBhIHBhdGhvbG9naWNhbCBpbmZsYXRpbmcgbWVjaGFuaXNtLCB0aGVyZSdkIGJlIG5vIHdheSB0byB0ZWxsXG4vLyB0aGUgc3lzdGVtIHRvIHN0b3AgZG9pbmcgdGhlIHRyYW5zZm9ybS4gIEEgc2luZ2xlIDRNQiB3cml0ZSBjb3VsZFxuLy8gY2F1c2UgdGhlIHN5c3RlbSB0byBydW4gb3V0IG9mIG1lbW9yeS5cbi8vXG4vLyBIb3dldmVyLCBldmVuIGluIHN1Y2ggYSBwYXRob2xvZ2ljYWwgY2FzZSwgb25seSBhIHNpbmdsZSB3cml0dGVuIGNodW5rXG4vLyB3b3VsZCBiZSBjb25zdW1lZCwgYW5kIHRoZW4gdGhlIHJlc3Qgd291bGQgd2FpdCAodW4tdHJhbnNmb3JtZWQpIHVudGlsXG4vLyB0aGUgcmVzdWx0cyBvZiB0aGUgcHJldmlvdXMgdHJhbnNmb3JtZWQgY2h1bmsgd2VyZSBjb25zdW1lZC5cblxuJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgT2JqZWN0U2V0UHJvdG90eXBlT2YsIFN5bWJvbCB9ID0gcmVxdWlyZSgnLi4vLi4vb3Vycy9wcmltb3JkaWFscycpXG5tb2R1bGUuZXhwb3J0cyA9IFRyYW5zZm9ybVxuY29uc3QgeyBFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCB9ID0gcmVxdWlyZSgnLi4vLi4vb3Vycy9lcnJvcnMnKS5jb2Rlc1xuY29uc3QgRHVwbGV4ID0gcmVxdWlyZSgnLi9kdXBsZXgnKVxuY29uc3QgeyBnZXRIaWdoV2F0ZXJNYXJrIH0gPSByZXF1aXJlKCcuL3N0YXRlJylcbk9iamVjdFNldFByb3RvdHlwZU9mKFRyYW5zZm9ybS5wcm90b3R5cGUsIER1cGxleC5wcm90b3R5cGUpXG5PYmplY3RTZXRQcm90b3R5cGVPZihUcmFuc2Zvcm0sIER1cGxleClcbmNvbnN0IGtDYWxsYmFjayA9IFN5bWJvbCgna0NhbGxiYWNrJylcbmZ1bmN0aW9uIFRyYW5zZm9ybShvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBUcmFuc2Zvcm0pKSByZXR1cm4gbmV3IFRyYW5zZm9ybShvcHRpb25zKVxuXG4gIC8vIFRPRE8gKHJvbmFnKTogVGhpcyBzaG91bGQgcHJlZmVyYWJseSBhbHdheXMgYmVcbiAgLy8gYXBwbGllZCBidXQgd291bGQgYmUgc2VtdmVyLW1ham9yLiBPciBldmVuIGJldHRlcjtcbiAgLy8gbWFrZSBUcmFuc2Zvcm0gYSBSZWFkYWJsZSB3aXRoIHRoZSBXcml0YWJsZSBpbnRlcmZhY2UuXG4gIGNvbnN0IHJlYWRhYmxlSGlnaFdhdGVyTWFyayA9IG9wdGlvbnMgPyBnZXRIaWdoV2F0ZXJNYXJrKHRoaXMsIG9wdGlvbnMsICdyZWFkYWJsZUhpZ2hXYXRlck1hcmsnLCB0cnVlKSA6IG51bGxcbiAgaWYgKHJlYWRhYmxlSGlnaFdhdGVyTWFyayA9PT0gMCkge1xuICAgIC8vIEEgRHVwbGV4IHdpbGwgYnVmZmVyIGJvdGggb24gdGhlIHdyaXRhYmxlIGFuZCByZWFkYWJsZSBzaWRlIHdoaWxlXG4gICAgLy8gYSBUcmFuc2Zvcm0ganVzdCB3YW50cyB0byBidWZmZXIgaHdtIG51bWJlciBvZiBlbGVtZW50cy4gVG8gYXZvaWRcbiAgICAvLyBidWZmZXJpbmcgdHdpY2Ugd2UgZGlzYWJsZSBidWZmZXJpbmcgb24gdGhlIHdyaXRhYmxlIHNpZGUuXG4gICAgb3B0aW9ucyA9IHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBoaWdoV2F0ZXJNYXJrOiBudWxsLFxuICAgICAgcmVhZGFibGVIaWdoV2F0ZXJNYXJrLFxuICAgICAgLy8gVE9ETyAocm9uYWcpOiAwIGlzIG5vdCBvcHRpbWFsIHNpbmNlIHdlIGhhdmVcbiAgICAgIC8vIGEgXCJidWdcIiB3aGVyZSB3ZSBjaGVjayBuZWVkRHJhaW4gYmVmb3JlIGNhbGxpbmcgX3dyaXRlIGFuZCBub3QgYWZ0ZXIuXG4gICAgICAvLyBSZWZzOiBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvcHVsbC8zMjg4N1xuICAgICAgLy8gUmVmczogaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvMzU5NDFcbiAgICAgIHdyaXRhYmxlSGlnaFdhdGVyTWFyazogb3B0aW9ucy53cml0YWJsZUhpZ2hXYXRlck1hcmsgfHwgMFxuICAgIH1cbiAgfVxuICBEdXBsZXguY2FsbCh0aGlzLCBvcHRpb25zKVxuXG4gIC8vIFdlIGhhdmUgaW1wbGVtZW50ZWQgdGhlIF9yZWFkIG1ldGhvZCwgYW5kIGRvbmUgdGhlIG90aGVyIHRoaW5nc1xuICAvLyB0aGF0IFJlYWRhYmxlIHdhbnRzIGJlZm9yZSB0aGUgZmlyc3QgX3JlYWQgY2FsbCwgc28gdW5zZXQgdGhlXG4gIC8vIHN5bmMgZ3VhcmQgZmxhZy5cbiAgdGhpcy5fcmVhZGFibGVTdGF0ZS5zeW5jID0gZmFsc2VcbiAgdGhpc1trQ2FsbGJhY2tdID0gbnVsbFxuICBpZiAob3B0aW9ucykge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy50cmFuc2Zvcm0gPT09ICdmdW5jdGlvbicpIHRoaXMuX3RyYW5zZm9ybSA9IG9wdGlvbnMudHJhbnNmb3JtXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmZsdXNoID09PSAnZnVuY3Rpb24nKSB0aGlzLl9mbHVzaCA9IG9wdGlvbnMuZmx1c2hcbiAgfVxuXG4gIC8vIFdoZW4gdGhlIHdyaXRhYmxlIHNpZGUgZmluaXNoZXMsIHRoZW4gZmx1c2ggb3V0IGFueXRoaW5nIHJlbWFpbmluZy5cbiAgLy8gQmFja3dhcmRzIGNvbXBhdC4gU29tZSBUcmFuc2Zvcm0gc3RyZWFtcyBpbmNvcnJlY3RseSBpbXBsZW1lbnQgX2ZpbmFsXG4gIC8vIGluc3RlYWQgb2Ygb3IgaW4gYWRkaXRpb24gdG8gX2ZsdXNoLiBCeSB1c2luZyAncHJlZmluaXNoJyBpbnN0ZWFkIG9mXG4gIC8vIGltcGxlbWVudGluZyBfZmluYWwgd2UgY29udGludWUgc3VwcG9ydGluZyB0aGlzIHVuZm9ydHVuYXRlIHVzZSBjYXNlLlxuICB0aGlzLm9uKCdwcmVmaW5pc2gnLCBwcmVmaW5pc2gpXG59XG5mdW5jdGlvbiBmaW5hbChjYikge1xuICBpZiAodHlwZW9mIHRoaXMuX2ZsdXNoID09PSAnZnVuY3Rpb24nICYmICF0aGlzLmRlc3Ryb3llZCkge1xuICAgIHRoaXMuX2ZsdXNoKChlciwgZGF0YSkgPT4ge1xuICAgICAgaWYgKGVyKSB7XG4gICAgICAgIGlmIChjYikge1xuICAgICAgICAgIGNiKGVyKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZGVzdHJveShlcilcbiAgICAgICAgfVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGlmIChkYXRhICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy5wdXNoKGRhdGEpXG4gICAgICB9XG4gICAgICB0aGlzLnB1c2gobnVsbClcbiAgICAgIGlmIChjYikge1xuICAgICAgICBjYigpXG4gICAgICB9XG4gICAgfSlcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnB1c2gobnVsbClcbiAgICBpZiAoY2IpIHtcbiAgICAgIGNiKClcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHByZWZpbmlzaCgpIHtcbiAgaWYgKHRoaXMuX2ZpbmFsICE9PSBmaW5hbCkge1xuICAgIGZpbmFsLmNhbGwodGhpcylcbiAgfVxufVxuVHJhbnNmb3JtLnByb3RvdHlwZS5fZmluYWwgPSBmaW5hbFxuVHJhbnNmb3JtLnByb3RvdHlwZS5fdHJhbnNmb3JtID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2FsbGJhY2spIHtcbiAgdGhyb3cgbmV3IEVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVEKCdfdHJhbnNmb3JtKCknKVxufVxuVHJhbnNmb3JtLnByb3RvdHlwZS5fd3JpdGUgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYWxsYmFjaykge1xuICBjb25zdCByU3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlXG4gIGNvbnN0IHdTdGF0ZSA9IHRoaXMuX3dyaXRhYmxlU3RhdGVcbiAgY29uc3QgbGVuZ3RoID0gclN0YXRlLmxlbmd0aFxuICB0aGlzLl90cmFuc2Zvcm0oY2h1bmssIGVuY29kaW5nLCAoZXJyLCB2YWwpID0+IHtcbiAgICBpZiAoZXJyKSB7XG4gICAgICBjYWxsYmFjayhlcnIpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKHZhbCAhPSBudWxsKSB7XG4gICAgICB0aGlzLnB1c2godmFsKVxuICAgIH1cbiAgICBpZiAoXG4gICAgICB3U3RhdGUuZW5kZWQgfHxcbiAgICAgIC8vIEJhY2t3YXJkcyBjb21wYXQuXG4gICAgICBsZW5ndGggPT09IHJTdGF0ZS5sZW5ndGggfHxcbiAgICAgIC8vIEJhY2t3YXJkcyBjb21wYXQuXG4gICAgICByU3RhdGUubGVuZ3RoIDwgclN0YXRlLmhpZ2hXYXRlck1hcmtcbiAgICApIHtcbiAgICAgIGNhbGxiYWNrKClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trQ2FsbGJhY2tdID0gY2FsbGJhY2tcbiAgICB9XG4gIH0pXG59XG5UcmFuc2Zvcm0ucHJvdG90eXBlLl9yZWFkID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpc1trQ2FsbGJhY2tdKSB7XG4gICAgY29uc3QgY2FsbGJhY2sgPSB0aGlzW2tDYWxsYmFja11cbiAgICB0aGlzW2tDYWxsYmFja10gPSBudWxsXG4gICAgY2FsbGJhY2soKVxuICB9XG59XG4iLAogICAgIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyBhIHBhc3N0aHJvdWdoIHN0cmVhbS5cbi8vIGJhc2ljYWxseSBqdXN0IHRoZSBtb3N0IG1pbmltYWwgc29ydCBvZiBUcmFuc2Zvcm0gc3RyZWFtLlxuLy8gRXZlcnkgd3JpdHRlbiBjaHVuayBnZXRzIG91dHB1dCBhcy1pcy5cblxuJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgT2JqZWN0U2V0UHJvdG90eXBlT2YgfSA9IHJlcXVpcmUoJy4uLy4uL291cnMvcHJpbW9yZGlhbHMnKVxubW9kdWxlLmV4cG9ydHMgPSBQYXNzVGhyb3VnaFxuY29uc3QgVHJhbnNmb3JtID0gcmVxdWlyZSgnLi90cmFuc2Zvcm0nKVxuT2JqZWN0U2V0UHJvdG90eXBlT2YoUGFzc1Rocm91Z2gucHJvdG90eXBlLCBUcmFuc2Zvcm0ucHJvdG90eXBlKVxuT2JqZWN0U2V0UHJvdG90eXBlT2YoUGFzc1Rocm91Z2gsIFRyYW5zZm9ybSlcbmZ1bmN0aW9uIFBhc3NUaHJvdWdoKG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFBhc3NUaHJvdWdoKSkgcmV0dXJuIG5ldyBQYXNzVGhyb3VnaChvcHRpb25zKVxuICBUcmFuc2Zvcm0uY2FsbCh0aGlzLCBvcHRpb25zKVxufVxuUGFzc1Rocm91Z2gucHJvdG90eXBlLl90cmFuc2Zvcm0gPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICBjYihudWxsLCBjaHVuaylcbn1cbiIsCiAgICAiLyogcmVwbGFjZW1lbnQgc3RhcnQgKi9cblxuY29uc3QgcHJvY2VzcyA9IHJlcXVpcmUoJ3Byb2Nlc3MvJylcblxuLyogcmVwbGFjZW1lbnQgZW5kICovXG4vLyBQb3J0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbWFmaW50b3NoL3B1bXAgd2l0aFxuLy8gcGVybWlzc2lvbiBmcm9tIHRoZSBhdXRob3IsIE1hdGhpYXMgQnV1cyAoQG1hZmludG9zaCkuXG5cbjsoJ3VzZSBzdHJpY3QnKVxuY29uc3QgeyBBcnJheUlzQXJyYXksIFByb21pc2UsIFN5bWJvbEFzeW5jSXRlcmF0b3IsIFN5bWJvbERpc3Bvc2UgfSA9IHJlcXVpcmUoJy4uLy4uL291cnMvcHJpbW9yZGlhbHMnKVxuY29uc3QgZW9zID0gcmVxdWlyZSgnLi9lbmQtb2Ytc3RyZWFtJylcbmNvbnN0IHsgb25jZSB9ID0gcmVxdWlyZSgnLi4vLi4vb3Vycy91dGlsJylcbmNvbnN0IGRlc3Ryb3lJbXBsID0gcmVxdWlyZSgnLi9kZXN0cm95JylcbmNvbnN0IER1cGxleCA9IHJlcXVpcmUoJy4vZHVwbGV4JylcbmNvbnN0IHtcbiAgYWdncmVnYXRlVHdvRXJyb3JzLFxuICBjb2Rlczoge1xuICAgIEVSUl9JTlZBTElEX0FSR19UWVBFLFxuICAgIEVSUl9JTlZBTElEX1JFVFVSTl9WQUxVRSxcbiAgICBFUlJfTUlTU0lOR19BUkdTLFxuICAgIEVSUl9TVFJFQU1fREVTVFJPWUVELFxuICAgIEVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFXG4gIH0sXG4gIEFib3J0RXJyb3Jcbn0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL2Vycm9ycycpXG5jb25zdCB7IHZhbGlkYXRlRnVuY3Rpb24sIHZhbGlkYXRlQWJvcnRTaWduYWwgfSA9IHJlcXVpcmUoJy4uL3ZhbGlkYXRvcnMnKVxuY29uc3Qge1xuICBpc0l0ZXJhYmxlLFxuICBpc1JlYWRhYmxlLFxuICBpc1JlYWRhYmxlTm9kZVN0cmVhbSxcbiAgaXNOb2RlU3RyZWFtLFxuICBpc1RyYW5zZm9ybVN0cmVhbSxcbiAgaXNXZWJTdHJlYW0sXG4gIGlzUmVhZGFibGVTdHJlYW0sXG4gIGlzUmVhZGFibGVGaW5pc2hlZFxufSA9IHJlcXVpcmUoJy4vdXRpbHMnKVxuY29uc3QgQWJvcnRDb250cm9sbGVyID0gZ2xvYmFsVGhpcy5BYm9ydENvbnRyb2xsZXIgfHwgcmVxdWlyZSgnYWJvcnQtY29udHJvbGxlcicpLkFib3J0Q29udHJvbGxlclxubGV0IFBhc3NUaHJvdWdoXG5sZXQgUmVhZGFibGVcbmxldCBhZGRBYm9ydExpc3RlbmVyXG5mdW5jdGlvbiBkZXN0cm95ZXIoc3RyZWFtLCByZWFkaW5nLCB3cml0aW5nKSB7XG4gIGxldCBmaW5pc2hlZCA9IGZhbHNlXG4gIHN0cmVhbS5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgZmluaXNoZWQgPSB0cnVlXG4gIH0pXG4gIGNvbnN0IGNsZWFudXAgPSBlb3MoXG4gICAgc3RyZWFtLFxuICAgIHtcbiAgICAgIHJlYWRhYmxlOiByZWFkaW5nLFxuICAgICAgd3JpdGFibGU6IHdyaXRpbmdcbiAgICB9LFxuICAgIChlcnIpID0+IHtcbiAgICAgIGZpbmlzaGVkID0gIWVyclxuICAgIH1cbiAgKVxuICByZXR1cm4ge1xuICAgIGRlc3Ryb3k6IChlcnIpID0+IHtcbiAgICAgIGlmIChmaW5pc2hlZCkgcmV0dXJuXG4gICAgICBmaW5pc2hlZCA9IHRydWVcbiAgICAgIGRlc3Ryb3lJbXBsLmRlc3Ryb3llcihzdHJlYW0sIGVyciB8fCBuZXcgRVJSX1NUUkVBTV9ERVNUUk9ZRUQoJ3BpcGUnKSlcbiAgICB9LFxuICAgIGNsZWFudXBcbiAgfVxufVxuZnVuY3Rpb24gcG9wQ2FsbGJhY2soc3RyZWFtcykge1xuICAvLyBTdHJlYW1zIHNob3VsZCBuZXZlciBiZSBhbiBlbXB0eSBhcnJheS4gSXQgc2hvdWxkIGFsd2F5cyBjb250YWluIGF0IGxlYXN0XG4gIC8vIGEgc2luZ2xlIHN0cmVhbS4gVGhlcmVmb3JlIG9wdGltaXplIGZvciB0aGUgYXZlcmFnZSBjYXNlIGluc3RlYWQgb2ZcbiAgLy8gY2hlY2tpbmcgZm9yIGxlbmd0aCA9PT0gMCBhcyB3ZWxsLlxuICB2YWxpZGF0ZUZ1bmN0aW9uKHN0cmVhbXNbc3RyZWFtcy5sZW5ndGggLSAxXSwgJ3N0cmVhbXNbc3RyZWFtLmxlbmd0aCAtIDFdJylcbiAgcmV0dXJuIHN0cmVhbXMucG9wKClcbn1cbmZ1bmN0aW9uIG1ha2VBc3luY0l0ZXJhYmxlKHZhbCkge1xuICBpZiAoaXNJdGVyYWJsZSh2YWwpKSB7XG4gICAgcmV0dXJuIHZhbFxuICB9IGVsc2UgaWYgKGlzUmVhZGFibGVOb2RlU3RyZWFtKHZhbCkpIHtcbiAgICAvLyBMZWdhY3kgc3RyZWFtcyBhcmUgbm90IEl0ZXJhYmxlLlxuICAgIHJldHVybiBmcm9tUmVhZGFibGUodmFsKVxuICB9XG4gIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRSgndmFsJywgWydSZWFkYWJsZScsICdJdGVyYWJsZScsICdBc3luY0l0ZXJhYmxlJ10sIHZhbClcbn1cbmFzeW5jIGZ1bmN0aW9uKiBmcm9tUmVhZGFibGUodmFsKSB7XG4gIGlmICghUmVhZGFibGUpIHtcbiAgICBSZWFkYWJsZSA9IHJlcXVpcmUoJy4vcmVhZGFibGUnKVxuICB9XG4gIHlpZWxkKiBSZWFkYWJsZS5wcm90b3R5cGVbU3ltYm9sQXN5bmNJdGVyYXRvcl0uY2FsbCh2YWwpXG59XG5hc3luYyBmdW5jdGlvbiBwdW1wVG9Ob2RlKGl0ZXJhYmxlLCB3cml0YWJsZSwgZmluaXNoLCB7IGVuZCB9KSB7XG4gIGxldCBlcnJvclxuICBsZXQgb25yZXNvbHZlID0gbnVsbFxuICBjb25zdCByZXN1bWUgPSAoZXJyKSA9PiB7XG4gICAgaWYgKGVycikge1xuICAgICAgZXJyb3IgPSBlcnJcbiAgICB9XG4gICAgaWYgKG9ucmVzb2x2ZSkge1xuICAgICAgY29uc3QgY2FsbGJhY2sgPSBvbnJlc29sdmVcbiAgICAgIG9ucmVzb2x2ZSA9IG51bGxcbiAgICAgIGNhbGxiYWNrKClcbiAgICB9XG4gIH1cbiAgY29uc3Qgd2FpdCA9ICgpID0+XG4gICAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9ucmVzb2x2ZSA9ICgpID0+IHtcbiAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzb2x2ZSgpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgd3JpdGFibGUub24oJ2RyYWluJywgcmVzdW1lKVxuICBjb25zdCBjbGVhbnVwID0gZW9zKFxuICAgIHdyaXRhYmxlLFxuICAgIHtcbiAgICAgIHJlYWRhYmxlOiBmYWxzZVxuICAgIH0sXG4gICAgcmVzdW1lXG4gIClcbiAgdHJ5IHtcbiAgICBpZiAod3JpdGFibGUud3JpdGFibGVOZWVkRHJhaW4pIHtcbiAgICAgIGF3YWl0IHdhaXQoKVxuICAgIH1cbiAgICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIGl0ZXJhYmxlKSB7XG4gICAgICBpZiAoIXdyaXRhYmxlLndyaXRlKGNodW5rKSkge1xuICAgICAgICBhd2FpdCB3YWl0KClcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGVuZCkge1xuICAgICAgd3JpdGFibGUuZW5kKClcbiAgICAgIGF3YWl0IHdhaXQoKVxuICAgIH1cbiAgICBmaW5pc2goKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBmaW5pc2goZXJyb3IgIT09IGVyciA/IGFnZ3JlZ2F0ZVR3b0Vycm9ycyhlcnJvciwgZXJyKSA6IGVycilcbiAgfSBmaW5hbGx5IHtcbiAgICBjbGVhbnVwKClcbiAgICB3cml0YWJsZS5vZmYoJ2RyYWluJywgcmVzdW1lKVxuICB9XG59XG5hc3luYyBmdW5jdGlvbiBwdW1wVG9XZWIocmVhZGFibGUsIHdyaXRhYmxlLCBmaW5pc2gsIHsgZW5kIH0pIHtcbiAgaWYgKGlzVHJhbnNmb3JtU3RyZWFtKHdyaXRhYmxlKSkge1xuICAgIHdyaXRhYmxlID0gd3JpdGFibGUud3JpdGFibGVcbiAgfVxuICAvLyBodHRwczovL3N0cmVhbXMuc3BlYy53aGF0d2cub3JnLyNleGFtcGxlLW1hbnVhbC13cml0ZS13aXRoLWJhY2twcmVzc3VyZVxuICBjb25zdCB3cml0ZXIgPSB3cml0YWJsZS5nZXRXcml0ZXIoKVxuICB0cnkge1xuICAgIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgcmVhZGFibGUpIHtcbiAgICAgIGF3YWl0IHdyaXRlci5yZWFkeVxuICAgICAgd3JpdGVyLndyaXRlKGNodW5rKS5jYXRjaCgoKSA9PiB7fSlcbiAgICB9XG4gICAgYXdhaXQgd3JpdGVyLnJlYWR5XG4gICAgaWYgKGVuZCkge1xuICAgICAgYXdhaXQgd3JpdGVyLmNsb3NlKClcbiAgICB9XG4gICAgZmluaXNoKClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHdyaXRlci5hYm9ydChlcnIpXG4gICAgICBmaW5pc2goZXJyKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZmluaXNoKGVycilcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHBpcGVsaW5lKC4uLnN0cmVhbXMpIHtcbiAgcmV0dXJuIHBpcGVsaW5lSW1wbChzdHJlYW1zLCBvbmNlKHBvcENhbGxiYWNrKHN0cmVhbXMpKSlcbn1cbmZ1bmN0aW9uIHBpcGVsaW5lSW1wbChzdHJlYW1zLCBjYWxsYmFjaywgb3B0cykge1xuICBpZiAoc3RyZWFtcy5sZW5ndGggPT09IDEgJiYgQXJyYXlJc0FycmF5KHN0cmVhbXNbMF0pKSB7XG4gICAgc3RyZWFtcyA9IHN0cmVhbXNbMF1cbiAgfVxuICBpZiAoc3RyZWFtcy5sZW5ndGggPCAyKSB7XG4gICAgdGhyb3cgbmV3IEVSUl9NSVNTSU5HX0FSR1MoJ3N0cmVhbXMnKVxuICB9XG4gIGNvbnN0IGFjID0gbmV3IEFib3J0Q29udHJvbGxlcigpXG4gIGNvbnN0IHNpZ25hbCA9IGFjLnNpZ25hbFxuICBjb25zdCBvdXRlclNpZ25hbCA9IG9wdHMgPT09IG51bGwgfHwgb3B0cyA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogb3B0cy5zaWduYWxcblxuICAvLyBOZWVkIHRvIGNsZWFudXAgZXZlbnQgbGlzdGVuZXJzIGlmIGxhc3Qgc3RyZWFtIGlzIHJlYWRhYmxlXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9pc3N1ZXMvMzU0NTJcbiAgY29uc3QgbGFzdFN0cmVhbUNsZWFudXAgPSBbXVxuICB2YWxpZGF0ZUFib3J0U2lnbmFsKG91dGVyU2lnbmFsLCAnb3B0aW9ucy5zaWduYWwnKVxuICBmdW5jdGlvbiBhYm9ydCgpIHtcbiAgICBmaW5pc2hJbXBsKG5ldyBBYm9ydEVycm9yKCkpXG4gIH1cbiAgYWRkQWJvcnRMaXN0ZW5lciA9IGFkZEFib3J0TGlzdGVuZXIgfHwgcmVxdWlyZSgnLi4vLi4vb3Vycy91dGlsJykuYWRkQWJvcnRMaXN0ZW5lclxuICBsZXQgZGlzcG9zYWJsZVxuICBpZiAob3V0ZXJTaWduYWwpIHtcbiAgICBkaXNwb3NhYmxlID0gYWRkQWJvcnRMaXN0ZW5lcihvdXRlclNpZ25hbCwgYWJvcnQpXG4gIH1cbiAgbGV0IGVycm9yXG4gIGxldCB2YWx1ZVxuICBjb25zdCBkZXN0cm95cyA9IFtdXG4gIGxldCBmaW5pc2hDb3VudCA9IDBcbiAgZnVuY3Rpb24gZmluaXNoKGVycikge1xuICAgIGZpbmlzaEltcGwoZXJyLCAtLWZpbmlzaENvdW50ID09PSAwKVxuICB9XG4gIGZ1bmN0aW9uIGZpbmlzaEltcGwoZXJyLCBmaW5hbCkge1xuICAgIHZhciBfZGlzcG9zYWJsZVxuICAgIGlmIChlcnIgJiYgKCFlcnJvciB8fCBlcnJvci5jb2RlID09PSAnRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UnKSkge1xuICAgICAgZXJyb3IgPSBlcnJcbiAgICB9XG4gICAgaWYgKCFlcnJvciAmJiAhZmluYWwpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB3aGlsZSAoZGVzdHJveXMubGVuZ3RoKSB7XG4gICAgICBkZXN0cm95cy5zaGlmdCgpKGVycm9yKVxuICAgIH1cbiAgICA7KF9kaXNwb3NhYmxlID0gZGlzcG9zYWJsZSkgPT09IG51bGwgfHwgX2Rpc3Bvc2FibGUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IF9kaXNwb3NhYmxlW1N5bWJvbERpc3Bvc2VdKClcbiAgICBhYy5hYm9ydCgpXG4gICAgaWYgKGZpbmFsKSB7XG4gICAgICBpZiAoIWVycm9yKSB7XG4gICAgICAgIGxhc3RTdHJlYW1DbGVhbnVwLmZvckVhY2goKGZuKSA9PiBmbigpKVxuICAgICAgfVxuICAgICAgcHJvY2Vzcy5uZXh0VGljayhjYWxsYmFjaywgZXJyb3IsIHZhbHVlKVxuICAgIH1cbiAgfVxuICBsZXQgcmV0XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyZWFtcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHN0cmVhbSA9IHN0cmVhbXNbaV1cbiAgICBjb25zdCByZWFkaW5nID0gaSA8IHN0cmVhbXMubGVuZ3RoIC0gMVxuICAgIGNvbnN0IHdyaXRpbmcgPSBpID4gMFxuICAgIGNvbnN0IGVuZCA9IHJlYWRpbmcgfHwgKG9wdHMgPT09IG51bGwgfHwgb3B0cyA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogb3B0cy5lbmQpICE9PSBmYWxzZVxuICAgIGNvbnN0IGlzTGFzdFN0cmVhbSA9IGkgPT09IHN0cmVhbXMubGVuZ3RoIC0gMVxuICAgIGlmIChpc05vZGVTdHJlYW0oc3RyZWFtKSkge1xuICAgICAgaWYgKGVuZCkge1xuICAgICAgICBjb25zdCB7IGRlc3Ryb3ksIGNsZWFudXAgfSA9IGRlc3Ryb3llcihzdHJlYW0sIHJlYWRpbmcsIHdyaXRpbmcpXG4gICAgICAgIGRlc3Ryb3lzLnB1c2goZGVzdHJveSlcbiAgICAgICAgaWYgKGlzUmVhZGFibGUoc3RyZWFtKSAmJiBpc0xhc3RTdHJlYW0pIHtcbiAgICAgICAgICBsYXN0U3RyZWFtQ2xlYW51cC5wdXNoKGNsZWFudXApXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQ2F0Y2ggc3RyZWFtIGVycm9ycyB0aGF0IG9jY3VyIGFmdGVyIHBpcGUvcHVtcCBoYXMgY29tcGxldGVkLlxuICAgICAgZnVuY3Rpb24gb25FcnJvcihlcnIpIHtcbiAgICAgICAgaWYgKGVyciAmJiBlcnIubmFtZSAhPT0gJ0Fib3J0RXJyb3InICYmIGVyci5jb2RlICE9PSAnRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UnKSB7XG4gICAgICAgICAgZmluaXNoKGVycilcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc3RyZWFtLm9uKCdlcnJvcicsIG9uRXJyb3IpXG4gICAgICBpZiAoaXNSZWFkYWJsZShzdHJlYW0pICYmIGlzTGFzdFN0cmVhbSkge1xuICAgICAgICBsYXN0U3RyZWFtQ2xlYW51cC5wdXNoKCgpID0+IHtcbiAgICAgICAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgb25FcnJvcilcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGkgPT09IDApIHtcbiAgICAgIGlmICh0eXBlb2Ygc3RyZWFtID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldCA9IHN0cmVhbSh7XG4gICAgICAgICAgc2lnbmFsXG4gICAgICAgIH0pXG4gICAgICAgIGlmICghaXNJdGVyYWJsZShyZXQpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX1JFVFVSTl9WQUxVRSgnSXRlcmFibGUsIEFzeW5jSXRlcmFibGUgb3IgU3RyZWFtJywgJ3NvdXJjZScsIHJldClcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc0l0ZXJhYmxlKHN0cmVhbSkgfHwgaXNSZWFkYWJsZU5vZGVTdHJlYW0oc3RyZWFtKSB8fCBpc1RyYW5zZm9ybVN0cmVhbShzdHJlYW0pKSB7XG4gICAgICAgIHJldCA9IHN0cmVhbVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0ID0gRHVwbGV4LmZyb20oc3RyZWFtKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIHN0cmVhbSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKGlzVHJhbnNmb3JtU3RyZWFtKHJldCkpIHtcbiAgICAgICAgdmFyIF9yZXRcbiAgICAgICAgcmV0ID0gbWFrZUFzeW5jSXRlcmFibGUoKF9yZXQgPSByZXQpID09PSBudWxsIHx8IF9yZXQgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IF9yZXQucmVhZGFibGUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXQgPSBtYWtlQXN5bmNJdGVyYWJsZShyZXQpXG4gICAgICB9XG4gICAgICByZXQgPSBzdHJlYW0ocmV0LCB7XG4gICAgICAgIHNpZ25hbFxuICAgICAgfSlcbiAgICAgIGlmIChyZWFkaW5nKSB7XG4gICAgICAgIGlmICghaXNJdGVyYWJsZShyZXQsIHRydWUpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX1JFVFVSTl9WQUxVRSgnQXN5bmNJdGVyYWJsZScsIGB0cmFuc2Zvcm1bJHtpIC0gMX1dYCwgcmV0KVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgX3JldDJcbiAgICAgICAgaWYgKCFQYXNzVGhyb3VnaCkge1xuICAgICAgICAgIFBhc3NUaHJvdWdoID0gcmVxdWlyZSgnLi9wYXNzdGhyb3VnaCcpXG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB0aGUgbGFzdCBhcmd1bWVudCB0byBwaXBlbGluZSBpcyBub3QgYSBzdHJlYW1cbiAgICAgICAgLy8gd2UgbXVzdCBjcmVhdGUgYSBwcm94eSBzdHJlYW0gc28gdGhhdCBwaXBlbGluZSguLi4pXG4gICAgICAgIC8vIGFsd2F5cyByZXR1cm5zIGEgc3RyZWFtIHdoaWNoIGNhbiBiZSBmdXJ0aGVyXG4gICAgICAgIC8vIGNvbXBvc2VkIHRocm91Z2ggYC5waXBlKHN0cmVhbSlgLlxuXG4gICAgICAgIGNvbnN0IHB0ID0gbmV3IFBhc3NUaHJvdWdoKHtcbiAgICAgICAgICBvYmplY3RNb2RlOiB0cnVlXG4gICAgICAgIH0pXG5cbiAgICAgICAgLy8gSGFuZGxlIFByb21pc2VzL0ErIHNwZWMsIGB0aGVuYCBjb3VsZCBiZSBhIGdldHRlciB0aGF0IHRocm93cyBvblxuICAgICAgICAvLyBzZWNvbmQgdXNlLlxuICAgICAgICBjb25zdCB0aGVuID0gKF9yZXQyID0gcmV0KSA9PT0gbnVsbCB8fCBfcmV0MiA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogX3JldDIudGhlblxuICAgICAgICBpZiAodHlwZW9mIHRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBmaW5pc2hDb3VudCsrXG4gICAgICAgICAgdGhlbi5jYWxsKFxuICAgICAgICAgICAgcmV0LFxuICAgICAgICAgICAgKHZhbCkgPT4ge1xuICAgICAgICAgICAgICB2YWx1ZSA9IHZhbFxuICAgICAgICAgICAgICBpZiAodmFsICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBwdC53cml0ZSh2YWwpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGVuZCkge1xuICAgICAgICAgICAgICAgIHB0LmVuZCgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhmaW5pc2gpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgICAgICBwdC5kZXN0cm95KGVycilcbiAgICAgICAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhmaW5pc2gsIGVycilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSBpZiAoaXNJdGVyYWJsZShyZXQsIHRydWUpKSB7XG4gICAgICAgICAgZmluaXNoQ291bnQrK1xuICAgICAgICAgIHB1bXBUb05vZGUocmV0LCBwdCwgZmluaXNoLCB7XG4gICAgICAgICAgICBlbmRcbiAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2UgaWYgKGlzUmVhZGFibGVTdHJlYW0ocmV0KSB8fCBpc1RyYW5zZm9ybVN0cmVhbShyZXQpKSB7XG4gICAgICAgICAgY29uc3QgdG9SZWFkID0gcmV0LnJlYWRhYmxlIHx8IHJldFxuICAgICAgICAgIGZpbmlzaENvdW50KytcbiAgICAgICAgICBwdW1wVG9Ob2RlKHRvUmVhZCwgcHQsIGZpbmlzaCwge1xuICAgICAgICAgICAgZW5kXG4gICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfUkVUVVJOX1ZBTFVFKCdBc3luY0l0ZXJhYmxlIG9yIFByb21pc2UnLCAnZGVzdGluYXRpb24nLCByZXQpXG4gICAgICAgIH1cbiAgICAgICAgcmV0ID0gcHRcbiAgICAgICAgY29uc3QgeyBkZXN0cm95LCBjbGVhbnVwIH0gPSBkZXN0cm95ZXIocmV0LCBmYWxzZSwgdHJ1ZSlcbiAgICAgICAgZGVzdHJveXMucHVzaChkZXN0cm95KVxuICAgICAgICBpZiAoaXNMYXN0U3RyZWFtKSB7XG4gICAgICAgICAgbGFzdFN0cmVhbUNsZWFudXAucHVzaChjbGVhbnVwKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc05vZGVTdHJlYW0oc3RyZWFtKSkge1xuICAgICAgaWYgKGlzUmVhZGFibGVOb2RlU3RyZWFtKHJldCkpIHtcbiAgICAgICAgZmluaXNoQ291bnQgKz0gMlxuICAgICAgICBjb25zdCBjbGVhbnVwID0gcGlwZShyZXQsIHN0cmVhbSwgZmluaXNoLCB7XG4gICAgICAgICAgZW5kXG4gICAgICAgIH0pXG4gICAgICAgIGlmIChpc1JlYWRhYmxlKHN0cmVhbSkgJiYgaXNMYXN0U3RyZWFtKSB7XG4gICAgICAgICAgbGFzdFN0cmVhbUNsZWFudXAucHVzaChjbGVhbnVwKVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGlzVHJhbnNmb3JtU3RyZWFtKHJldCkgfHwgaXNSZWFkYWJsZVN0cmVhbShyZXQpKSB7XG4gICAgICAgIGNvbnN0IHRvUmVhZCA9IHJldC5yZWFkYWJsZSB8fCByZXRcbiAgICAgICAgZmluaXNoQ291bnQrK1xuICAgICAgICBwdW1wVG9Ob2RlKHRvUmVhZCwgc3RyZWFtLCBmaW5pc2gsIHtcbiAgICAgICAgICBlbmRcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSBpZiAoaXNJdGVyYWJsZShyZXQpKSB7XG4gICAgICAgIGZpbmlzaENvdW50KytcbiAgICAgICAgcHVtcFRvTm9kZShyZXQsIHN0cmVhbSwgZmluaXNoLCB7XG4gICAgICAgICAgZW5kXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoXG4gICAgICAgICAgJ3ZhbCcsXG4gICAgICAgICAgWydSZWFkYWJsZScsICdJdGVyYWJsZScsICdBc3luY0l0ZXJhYmxlJywgJ1JlYWRhYmxlU3RyZWFtJywgJ1RyYW5zZm9ybVN0cmVhbSddLFxuICAgICAgICAgIHJldFxuICAgICAgICApXG4gICAgICB9XG4gICAgICByZXQgPSBzdHJlYW1cbiAgICB9IGVsc2UgaWYgKGlzV2ViU3RyZWFtKHN0cmVhbSkpIHtcbiAgICAgIGlmIChpc1JlYWRhYmxlTm9kZVN0cmVhbShyZXQpKSB7XG4gICAgICAgIGZpbmlzaENvdW50KytcbiAgICAgICAgcHVtcFRvV2ViKG1ha2VBc3luY0l0ZXJhYmxlKHJldCksIHN0cmVhbSwgZmluaXNoLCB7XG4gICAgICAgICAgZW5kXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2UgaWYgKGlzUmVhZGFibGVTdHJlYW0ocmV0KSB8fCBpc0l0ZXJhYmxlKHJldCkpIHtcbiAgICAgICAgZmluaXNoQ291bnQrK1xuICAgICAgICBwdW1wVG9XZWIocmV0LCBzdHJlYW0sIGZpbmlzaCwge1xuICAgICAgICAgIGVuZFxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIGlmIChpc1RyYW5zZm9ybVN0cmVhbShyZXQpKSB7XG4gICAgICAgIGZpbmlzaENvdW50KytcbiAgICAgICAgcHVtcFRvV2ViKHJldC5yZWFkYWJsZSwgc3RyZWFtLCBmaW5pc2gsIHtcbiAgICAgICAgICBlbmRcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRShcbiAgICAgICAgICAndmFsJyxcbiAgICAgICAgICBbJ1JlYWRhYmxlJywgJ0l0ZXJhYmxlJywgJ0FzeW5jSXRlcmFibGUnLCAnUmVhZGFibGVTdHJlYW0nLCAnVHJhbnNmb3JtU3RyZWFtJ10sXG4gICAgICAgICAgcmV0XG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIHJldCA9IHN0cmVhbVxuICAgIH0gZWxzZSB7XG4gICAgICByZXQgPSBEdXBsZXguZnJvbShzdHJlYW0pXG4gICAgfVxuICB9XG4gIGlmIChcbiAgICAoc2lnbmFsICE9PSBudWxsICYmIHNpZ25hbCAhPT0gdW5kZWZpbmVkICYmIHNpZ25hbC5hYm9ydGVkKSB8fFxuICAgIChvdXRlclNpZ25hbCAhPT0gbnVsbCAmJiBvdXRlclNpZ25hbCAhPT0gdW5kZWZpbmVkICYmIG91dGVyU2lnbmFsLmFib3J0ZWQpXG4gICkge1xuICAgIHByb2Nlc3MubmV4dFRpY2soYWJvcnQpXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuZnVuY3Rpb24gcGlwZShzcmMsIGRzdCwgZmluaXNoLCB7IGVuZCB9KSB7XG4gIGxldCBlbmRlZCA9IGZhbHNlXG4gIGRzdC5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgaWYgKCFlbmRlZCkge1xuICAgICAgLy8gRmluaXNoIGlmIHRoZSBkZXN0aW5hdGlvbiBjbG9zZXMgYmVmb3JlIHRoZSBzb3VyY2UgaGFzIGNvbXBsZXRlZC5cbiAgICAgIGZpbmlzaChuZXcgRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UoKSlcbiAgICB9XG4gIH0pXG4gIHNyYy5waXBlKGRzdCwge1xuICAgIGVuZDogZmFsc2VcbiAgfSkgLy8gSWYgZW5kIGlzIHRydWUgd2UgYWxyZWFkeSB3aWxsIGhhdmUgYSBsaXN0ZW5lciB0byBlbmQgZHN0LlxuXG4gIGlmIChlbmQpIHtcbiAgICAvLyBDb21wYXQuIEJlZm9yZSBub2RlIHYxMC4xMi4wIHN0ZGlvIHVzZWQgdG8gdGhyb3cgYW4gZXJyb3Igc29cbiAgICAvLyBwaXBlKCkgZGlkL2RvZXMgbm90IGVuZCgpIHN0ZGlvIGRlc3RpbmF0aW9ucy5cbiAgICAvLyBOb3cgdGhleSBhbGxvdyBpdCBidXQgXCJzZWNyZXRseVwiIGRvbid0IGNsb3NlIHRoZSB1bmRlcmx5aW5nIGZkLlxuXG4gICAgZnVuY3Rpb24gZW5kRm4oKSB7XG4gICAgICBlbmRlZCA9IHRydWVcbiAgICAgIGRzdC5lbmQoKVxuICAgIH1cbiAgICBpZiAoaXNSZWFkYWJsZUZpbmlzaGVkKHNyYykpIHtcbiAgICAgIC8vIEVuZCB0aGUgZGVzdGluYXRpb24gaWYgdGhlIHNvdXJjZSBoYXMgYWxyZWFkeSBlbmRlZC5cbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZW5kRm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHNyYy5vbmNlKCdlbmQnLCBlbmRGbilcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZmluaXNoKClcbiAgfVxuICBlb3MoXG4gICAgc3JjLFxuICAgIHtcbiAgICAgIHJlYWRhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IGZhbHNlXG4gICAgfSxcbiAgICAoZXJyKSA9PiB7XG4gICAgICBjb25zdCByU3RhdGUgPSBzcmMuX3JlYWRhYmxlU3RhdGVcbiAgICAgIGlmIChcbiAgICAgICAgZXJyICYmXG4gICAgICAgIGVyci5jb2RlID09PSAnRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UnICYmXG4gICAgICAgIHJTdGF0ZSAmJlxuICAgICAgICByU3RhdGUuZW5kZWQgJiZcbiAgICAgICAgIXJTdGF0ZS5lcnJvcmVkICYmXG4gICAgICAgICFyU3RhdGUuZXJyb3JFbWl0dGVkXG4gICAgICApIHtcbiAgICAgICAgLy8gU29tZSByZWFkYWJsZSBzdHJlYW1zIHdpbGwgZW1pdCAnY2xvc2UnIGJlZm9yZSAnZW5kJy4gSG93ZXZlciwgc2luY2VcbiAgICAgICAgLy8gdGhpcyBpcyBvbiB0aGUgcmVhZGFibGUgc2lkZSAnZW5kJyBzaG91bGQgc3RpbGwgYmUgZW1pdHRlZCBpZiB0aGVcbiAgICAgICAgLy8gc3RyZWFtIGhhcyBiZWVuIGVuZGVkIGFuZCBubyBlcnJvciBlbWl0dGVkLiBUaGlzIHNob3VsZCBiZSBhbGxvd2VkIGluXG4gICAgICAgIC8vIGZhdm9yIG9mIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiBTaW5jZSB0aGUgc3RyZWFtIGlzIHBpcGVkIHRvIGFcbiAgICAgICAgLy8gZGVzdGluYXRpb24gdGhpcyBzaG91bGQgbm90IHJlc3VsdCBpbiBhbnkgb2JzZXJ2YWJsZSBkaWZmZXJlbmNlLlxuICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGNoZWNrIGlmIHRoaXMgaXMgYSB3cml0YWJsZSBwcmVtYXR1cmUgY2xvc2Ugc2luY2VcbiAgICAgICAgLy8gZW9zIHdpbGwgb25seSBmYWlsIHdpdGggcHJlbWF0dXJlIGNsb3NlIG9uIHRoZSByZWFkaW5nIHNpZGUgZm9yXG4gICAgICAgIC8vIGR1cGxleCBzdHJlYW1zLlxuICAgICAgICBzcmMub25jZSgnZW5kJywgZmluaXNoKS5vbmNlKCdlcnJvcicsIGZpbmlzaClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpbmlzaChlcnIpXG4gICAgICB9XG4gICAgfVxuICApXG4gIHJldHVybiBlb3MoXG4gICAgZHN0LFxuICAgIHtcbiAgICAgIHJlYWRhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSxcbiAgICBmaW5pc2hcbiAgKVxufVxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHBpcGVsaW5lSW1wbCxcbiAgcGlwZWxpbmVcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgcGlwZWxpbmUgfSA9IHJlcXVpcmUoJy4vcGlwZWxpbmUnKVxuY29uc3QgRHVwbGV4ID0gcmVxdWlyZSgnLi9kdXBsZXgnKVxuY29uc3QgeyBkZXN0cm95ZXIgfSA9IHJlcXVpcmUoJy4vZGVzdHJveScpXG5jb25zdCB7XG4gIGlzTm9kZVN0cmVhbSxcbiAgaXNSZWFkYWJsZSxcbiAgaXNXcml0YWJsZSxcbiAgaXNXZWJTdHJlYW0sXG4gIGlzVHJhbnNmb3JtU3RyZWFtLFxuICBpc1dyaXRhYmxlU3RyZWFtLFxuICBpc1JlYWRhYmxlU3RyZWFtXG59ID0gcmVxdWlyZSgnLi91dGlscycpXG5jb25zdCB7XG4gIEFib3J0RXJyb3IsXG4gIGNvZGVzOiB7IEVSUl9JTlZBTElEX0FSR19WQUxVRSwgRVJSX01JU1NJTkdfQVJHUyB9XG59ID0gcmVxdWlyZSgnLi4vLi4vb3Vycy9lcnJvcnMnKVxuY29uc3QgZW9zID0gcmVxdWlyZSgnLi9lbmQtb2Ytc3RyZWFtJylcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY29tcG9zZSguLi5zdHJlYW1zKSB7XG4gIGlmIChzdHJlYW1zLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFUlJfTUlTU0lOR19BUkdTKCdzdHJlYW1zJylcbiAgfVxuICBpZiAoc3RyZWFtcy5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gRHVwbGV4LmZyb20oc3RyZWFtc1swXSlcbiAgfVxuICBjb25zdCBvcmdTdHJlYW1zID0gWy4uLnN0cmVhbXNdXG4gIGlmICh0eXBlb2Ygc3RyZWFtc1swXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHN0cmVhbXNbMF0gPSBEdXBsZXguZnJvbShzdHJlYW1zWzBdKVxuICB9XG4gIGlmICh0eXBlb2Ygc3RyZWFtc1tzdHJlYW1zLmxlbmd0aCAtIDFdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY29uc3QgaWR4ID0gc3RyZWFtcy5sZW5ndGggLSAxXG4gICAgc3RyZWFtc1tpZHhdID0gRHVwbGV4LmZyb20oc3RyZWFtc1tpZHhdKVxuICB9XG4gIGZvciAobGV0IG4gPSAwOyBuIDwgc3RyZWFtcy5sZW5ndGg7ICsrbikge1xuICAgIGlmICghaXNOb2RlU3RyZWFtKHN0cmVhbXNbbl0pICYmICFpc1dlYlN0cmVhbShzdHJlYW1zW25dKSkge1xuICAgICAgLy8gVE9ETyhyb25hZyk6IEFkZCBjaGVja3MgZm9yIG5vbiBzdHJlYW1zLlxuICAgICAgY29udGludWVcbiAgICB9XG4gICAgaWYgKFxuICAgICAgbiA8IHN0cmVhbXMubGVuZ3RoIC0gMSAmJlxuICAgICAgIShpc1JlYWRhYmxlKHN0cmVhbXNbbl0pIHx8IGlzUmVhZGFibGVTdHJlYW0oc3RyZWFtc1tuXSkgfHwgaXNUcmFuc2Zvcm1TdHJlYW0oc3RyZWFtc1tuXSkpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1ZBTFVFKGBzdHJlYW1zWyR7bn1dYCwgb3JnU3RyZWFtc1tuXSwgJ211c3QgYmUgcmVhZGFibGUnKVxuICAgIH1cbiAgICBpZiAobiA+IDAgJiYgIShpc1dyaXRhYmxlKHN0cmVhbXNbbl0pIHx8IGlzV3JpdGFibGVTdHJlYW0oc3RyZWFtc1tuXSkgfHwgaXNUcmFuc2Zvcm1TdHJlYW0oc3RyZWFtc1tuXSkpKSB7XG4gICAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1ZBTFVFKGBzdHJlYW1zWyR7bn1dYCwgb3JnU3RyZWFtc1tuXSwgJ211c3QgYmUgd3JpdGFibGUnKVxuICAgIH1cbiAgfVxuICBsZXQgb25kcmFpblxuICBsZXQgb25maW5pc2hcbiAgbGV0IG9ucmVhZGFibGVcbiAgbGV0IG9uY2xvc2VcbiAgbGV0IGRcbiAgZnVuY3Rpb24gb25maW5pc2hlZChlcnIpIHtcbiAgICBjb25zdCBjYiA9IG9uY2xvc2VcbiAgICBvbmNsb3NlID0gbnVsbFxuICAgIGlmIChjYikge1xuICAgICAgY2IoZXJyKVxuICAgIH0gZWxzZSBpZiAoZXJyKSB7XG4gICAgICBkLmRlc3Ryb3koZXJyKVxuICAgIH0gZWxzZSBpZiAoIXJlYWRhYmxlICYmICF3cml0YWJsZSkge1xuICAgICAgZC5kZXN0cm95KClcbiAgICB9XG4gIH1cbiAgY29uc3QgaGVhZCA9IHN0cmVhbXNbMF1cbiAgY29uc3QgdGFpbCA9IHBpcGVsaW5lKHN0cmVhbXMsIG9uZmluaXNoZWQpXG4gIGNvbnN0IHdyaXRhYmxlID0gISEoaXNXcml0YWJsZShoZWFkKSB8fCBpc1dyaXRhYmxlU3RyZWFtKGhlYWQpIHx8IGlzVHJhbnNmb3JtU3RyZWFtKGhlYWQpKVxuICBjb25zdCByZWFkYWJsZSA9ICEhKGlzUmVhZGFibGUodGFpbCkgfHwgaXNSZWFkYWJsZVN0cmVhbSh0YWlsKSB8fCBpc1RyYW5zZm9ybVN0cmVhbSh0YWlsKSlcblxuICAvLyBUT0RPKHJvbmFnKTogQXZvaWQgZG91YmxlIGJ1ZmZlcmluZy5cbiAgLy8gSW1wbGVtZW50IFdyaXRhYmxlL1JlYWRhYmxlL0R1cGxleCB0cmFpdHMuXG4gIC8vIFNlZSwgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvMzM1MTUuXG4gIGQgPSBuZXcgRHVwbGV4KHtcbiAgICAvLyBUT0RPIChyb25hZyk6IGhpZ2hXYXRlck1hcms/XG4gICAgd3JpdGFibGVPYmplY3RNb2RlOiAhIShoZWFkICE9PSBudWxsICYmIGhlYWQgIT09IHVuZGVmaW5lZCAmJiBoZWFkLndyaXRhYmxlT2JqZWN0TW9kZSksXG4gICAgcmVhZGFibGVPYmplY3RNb2RlOiAhISh0YWlsICE9PSBudWxsICYmIHRhaWwgIT09IHVuZGVmaW5lZCAmJiB0YWlsLnJlYWRhYmxlT2JqZWN0TW9kZSksXG4gICAgd3JpdGFibGUsXG4gICAgcmVhZGFibGVcbiAgfSlcbiAgaWYgKHdyaXRhYmxlKSB7XG4gICAgaWYgKGlzTm9kZVN0cmVhbShoZWFkKSkge1xuICAgICAgZC5fd3JpdGUgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYWxsYmFjaykge1xuICAgICAgICBpZiAoaGVhZC53cml0ZShjaHVuaywgZW5jb2RpbmcpKSB7XG4gICAgICAgICAgY2FsbGJhY2soKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9uZHJhaW4gPSBjYWxsYmFja1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBkLl9maW5hbCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICBoZWFkLmVuZCgpXG4gICAgICAgIG9uZmluaXNoID0gY2FsbGJhY2tcbiAgICAgIH1cbiAgICAgIGhlYWQub24oJ2RyYWluJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAob25kcmFpbikge1xuICAgICAgICAgIGNvbnN0IGNiID0gb25kcmFpblxuICAgICAgICAgIG9uZHJhaW4gPSBudWxsXG4gICAgICAgICAgY2IoKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0gZWxzZSBpZiAoaXNXZWJTdHJlYW0oaGVhZCkpIHtcbiAgICAgIGNvbnN0IHdyaXRhYmxlID0gaXNUcmFuc2Zvcm1TdHJlYW0oaGVhZCkgPyBoZWFkLndyaXRhYmxlIDogaGVhZFxuICAgICAgY29uc3Qgd3JpdGVyID0gd3JpdGFibGUuZ2V0V3JpdGVyKClcbiAgICAgIGQuX3dyaXRlID0gYXN5bmMgZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2FsbGJhY2spIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB3cml0ZXIucmVhZHlcbiAgICAgICAgICB3cml0ZXIud3JpdGUoY2h1bmspLmNhdGNoKCgpID0+IHt9KVxuICAgICAgICAgIGNhbGxiYWNrKClcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY2FsbGJhY2soZXJyKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBkLl9maW5hbCA9IGFzeW5jIGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHdyaXRlci5yZWFkeVxuICAgICAgICAgIHdyaXRlci5jbG9zZSgpLmNhdGNoKCgpID0+IHt9KVxuICAgICAgICAgIG9uZmluaXNoID0gY2FsbGJhY2tcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY2FsbGJhY2soZXJyKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHRvUmVhZCA9IGlzVHJhbnNmb3JtU3RyZWFtKHRhaWwpID8gdGFpbC5yZWFkYWJsZSA6IHRhaWxcbiAgICBlb3ModG9SZWFkLCAoKSA9PiB7XG4gICAgICBpZiAob25maW5pc2gpIHtcbiAgICAgICAgY29uc3QgY2IgPSBvbmZpbmlzaFxuICAgICAgICBvbmZpbmlzaCA9IG51bGxcbiAgICAgICAgY2IoKVxuICAgICAgfVxuICAgIH0pXG4gIH1cbiAgaWYgKHJlYWRhYmxlKSB7XG4gICAgaWYgKGlzTm9kZVN0cmVhbSh0YWlsKSkge1xuICAgICAgdGFpbC5vbigncmVhZGFibGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChvbnJlYWRhYmxlKSB7XG4gICAgICAgICAgY29uc3QgY2IgPSBvbnJlYWRhYmxlXG4gICAgICAgICAgb25yZWFkYWJsZSA9IG51bGxcbiAgICAgICAgICBjYigpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICB0YWlsLm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGQucHVzaChudWxsKVxuICAgICAgfSlcbiAgICAgIGQuX3JlYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgY29uc3QgYnVmID0gdGFpbC5yZWFkKClcbiAgICAgICAgICBpZiAoYnVmID09PSBudWxsKSB7XG4gICAgICAgICAgICBvbnJlYWRhYmxlID0gZC5fcmVhZFxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghZC5wdXNoKGJ1ZikpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNXZWJTdHJlYW0odGFpbCkpIHtcbiAgICAgIGNvbnN0IHJlYWRhYmxlID0gaXNUcmFuc2Zvcm1TdHJlYW0odGFpbCkgPyB0YWlsLnJlYWRhYmxlIDogdGFpbFxuICAgICAgY29uc3QgcmVhZGVyID0gcmVhZGFibGUuZ2V0UmVhZGVyKClcbiAgICAgIGQuX3JlYWQgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHsgdmFsdWUsIGRvbmUgfSA9IGF3YWl0IHJlYWRlci5yZWFkKClcbiAgICAgICAgICAgIGlmICghZC5wdXNoKHZhbHVlKSkge1xuICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICAgIGQucHVzaChudWxsKVxuICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBkLl9kZXN0cm95ID0gZnVuY3Rpb24gKGVyciwgY2FsbGJhY2spIHtcbiAgICBpZiAoIWVyciAmJiBvbmNsb3NlICE9PSBudWxsKSB7XG4gICAgICBlcnIgPSBuZXcgQWJvcnRFcnJvcigpXG4gICAgfVxuICAgIG9ucmVhZGFibGUgPSBudWxsXG4gICAgb25kcmFpbiA9IG51bGxcbiAgICBvbmZpbmlzaCA9IG51bGxcbiAgICBpZiAob25jbG9zZSA9PT0gbnVsbCkge1xuICAgICAgY2FsbGJhY2soZXJyKVxuICAgIH0gZWxzZSB7XG4gICAgICBvbmNsb3NlID0gY2FsbGJhY2tcbiAgICAgIGlmIChpc05vZGVTdHJlYW0odGFpbCkpIHtcbiAgICAgICAgZGVzdHJveWVyKHRhaWwsIGVycilcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IEFib3J0Q29udHJvbGxlciA9IGdsb2JhbFRoaXMuQWJvcnRDb250cm9sbGVyIHx8IHJlcXVpcmUoJ2Fib3J0LWNvbnRyb2xsZXInKS5BYm9ydENvbnRyb2xsZXJcbmNvbnN0IHtcbiAgY29kZXM6IHsgRVJSX0lOVkFMSURfQVJHX1ZBTFVFLCBFUlJfSU5WQUxJRF9BUkdfVFlQRSwgRVJSX01JU1NJTkdfQVJHUywgRVJSX09VVF9PRl9SQU5HRSB9LFxuICBBYm9ydEVycm9yXG59ID0gcmVxdWlyZSgnLi4vLi4vb3Vycy9lcnJvcnMnKVxuY29uc3QgeyB2YWxpZGF0ZUFib3J0U2lnbmFsLCB2YWxpZGF0ZUludGVnZXIsIHZhbGlkYXRlT2JqZWN0IH0gPSByZXF1aXJlKCcuLi92YWxpZGF0b3JzJylcbmNvbnN0IGtXZWFrSGFuZGxlciA9IHJlcXVpcmUoJy4uLy4uL291cnMvcHJpbW9yZGlhbHMnKS5TeW1ib2woJ2tXZWFrJylcbmNvbnN0IGtSZXNpc3RTdG9wUHJvcGFnYXRpb24gPSByZXF1aXJlKCcuLi8uLi9vdXJzL3ByaW1vcmRpYWxzJykuU3ltYm9sKCdrUmVzaXN0U3RvcFByb3BhZ2F0aW9uJylcbmNvbnN0IHsgZmluaXNoZWQgfSA9IHJlcXVpcmUoJy4vZW5kLW9mLXN0cmVhbScpXG5jb25zdCBzdGF0aWNDb21wb3NlID0gcmVxdWlyZSgnLi9jb21wb3NlJylcbmNvbnN0IHsgYWRkQWJvcnRTaWduYWxOb1ZhbGlkYXRlIH0gPSByZXF1aXJlKCcuL2FkZC1hYm9ydC1zaWduYWwnKVxuY29uc3QgeyBpc1dyaXRhYmxlLCBpc05vZGVTdHJlYW0gfSA9IHJlcXVpcmUoJy4vdXRpbHMnKVxuY29uc3QgeyBkZXByZWNhdGUgfSA9IHJlcXVpcmUoJy4uLy4uL291cnMvdXRpbCcpXG5jb25zdCB7XG4gIEFycmF5UHJvdG90eXBlUHVzaCxcbiAgQm9vbGVhbixcbiAgTWF0aEZsb29yLFxuICBOdW1iZXIsXG4gIE51bWJlcklzTmFOLFxuICBQcm9taXNlLFxuICBQcm9taXNlUmVqZWN0LFxuICBQcm9taXNlUmVzb2x2ZSxcbiAgUHJvbWlzZVByb3RvdHlwZVRoZW4sXG4gIFN5bWJvbFxufSA9IHJlcXVpcmUoJy4uLy4uL291cnMvcHJpbW9yZGlhbHMnKVxuY29uc3Qga0VtcHR5ID0gU3ltYm9sKCdrRW1wdHknKVxuY29uc3Qga0VvZiA9IFN5bWJvbCgna0VvZicpXG5mdW5jdGlvbiBjb21wb3NlKHN0cmVhbSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyAhPSBudWxsKSB7XG4gICAgdmFsaWRhdGVPYmplY3Qob3B0aW9ucywgJ29wdGlvbnMnKVxuICB9XG4gIGlmICgob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBvcHRpb25zLnNpZ25hbCkgIT0gbnVsbCkge1xuICAgIHZhbGlkYXRlQWJvcnRTaWduYWwob3B0aW9ucy5zaWduYWwsICdvcHRpb25zLnNpZ25hbCcpXG4gIH1cbiAgaWYgKGlzTm9kZVN0cmVhbShzdHJlYW0pICYmICFpc1dyaXRhYmxlKHN0cmVhbSkpIHtcbiAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1ZBTFVFKCdzdHJlYW0nLCBzdHJlYW0sICdtdXN0IGJlIHdyaXRhYmxlJylcbiAgfVxuICBjb25zdCBjb21wb3NlZFN0cmVhbSA9IHN0YXRpY0NvbXBvc2UodGhpcywgc3RyZWFtKVxuICBpZiAob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB1bmRlZmluZWQgJiYgb3B0aW9ucy5zaWduYWwpIHtcbiAgICAvLyBOb3QgdmFsaWRhdGluZyBhcyB3ZSBhbHJlYWR5IHZhbGlkYXRlZCBiZWZvcmVcbiAgICBhZGRBYm9ydFNpZ25hbE5vVmFsaWRhdGUob3B0aW9ucy5zaWduYWwsIGNvbXBvc2VkU3RyZWFtKVxuICB9XG4gIHJldHVybiBjb21wb3NlZFN0cmVhbVxufVxuZnVuY3Rpb24gbWFwKGZuLCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoJ2ZuJywgWydGdW5jdGlvbicsICdBc3luY0Z1bmN0aW9uJ10sIGZuKVxuICB9XG4gIGlmIChvcHRpb25zICE9IG51bGwpIHtcbiAgICB2YWxpZGF0ZU9iamVjdChvcHRpb25zLCAnb3B0aW9ucycpXG4gIH1cbiAgaWYgKChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IG9wdGlvbnMuc2lnbmFsKSAhPSBudWxsKSB7XG4gICAgdmFsaWRhdGVBYm9ydFNpZ25hbChvcHRpb25zLnNpZ25hbCwgJ29wdGlvbnMuc2lnbmFsJylcbiAgfVxuICBsZXQgY29uY3VycmVuY3kgPSAxXG4gIGlmICgob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBvcHRpb25zLmNvbmN1cnJlbmN5KSAhPSBudWxsKSB7XG4gICAgY29uY3VycmVuY3kgPSBNYXRoRmxvb3Iob3B0aW9ucy5jb25jdXJyZW5jeSlcbiAgfVxuICBsZXQgaGlnaFdhdGVyTWFyayA9IGNvbmN1cnJlbmN5IC0gMVxuICBpZiAoKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogb3B0aW9ucy5oaWdoV2F0ZXJNYXJrKSAhPSBudWxsKSB7XG4gICAgaGlnaFdhdGVyTWFyayA9IE1hdGhGbG9vcihvcHRpb25zLmhpZ2hXYXRlck1hcmspXG4gIH1cbiAgdmFsaWRhdGVJbnRlZ2VyKGNvbmN1cnJlbmN5LCAnb3B0aW9ucy5jb25jdXJyZW5jeScsIDEpXG4gIHZhbGlkYXRlSW50ZWdlcihoaWdoV2F0ZXJNYXJrLCAnb3B0aW9ucy5oaWdoV2F0ZXJNYXJrJywgMClcbiAgaGlnaFdhdGVyTWFyayArPSBjb25jdXJyZW5jeVxuICByZXR1cm4gYXN5bmMgZnVuY3Rpb24qIG1hcCgpIHtcbiAgICBjb25zdCBzaWduYWwgPSByZXF1aXJlKCcuLi8uLi9vdXJzL3V0aWwnKS5BYm9ydFNpZ25hbEFueShcbiAgICAgIFtvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IG9wdGlvbnMuc2lnbmFsXS5maWx0ZXIoQm9vbGVhbilcbiAgICApXG4gICAgY29uc3Qgc3RyZWFtID0gdGhpc1xuICAgIGNvbnN0IHF1ZXVlID0gW11cbiAgICBjb25zdCBzaWduYWxPcHQgPSB7XG4gICAgICBzaWduYWxcbiAgICB9XG4gICAgbGV0IG5leHRcbiAgICBsZXQgcmVzdW1lXG4gICAgbGV0IGRvbmUgPSBmYWxzZVxuICAgIGxldCBjbnQgPSAwXG4gICAgZnVuY3Rpb24gb25DYXRjaCgpIHtcbiAgICAgIGRvbmUgPSB0cnVlXG4gICAgICBhZnRlckl0ZW1Qcm9jZXNzZWQoKVxuICAgIH1cbiAgICBmdW5jdGlvbiBhZnRlckl0ZW1Qcm9jZXNzZWQoKSB7XG4gICAgICBjbnQgLT0gMVxuICAgICAgbWF5YmVSZXN1bWUoKVxuICAgIH1cbiAgICBmdW5jdGlvbiBtYXliZVJlc3VtZSgpIHtcbiAgICAgIGlmIChyZXN1bWUgJiYgIWRvbmUgJiYgY250IDwgY29uY3VycmVuY3kgJiYgcXVldWUubGVuZ3RoIDwgaGlnaFdhdGVyTWFyaykge1xuICAgICAgICByZXN1bWUoKVxuICAgICAgICByZXN1bWUgPSBudWxsXG4gICAgICB9XG4gICAgfVxuICAgIGFzeW5jIGZ1bmN0aW9uIHB1bXAoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBmb3IgYXdhaXQgKGxldCB2YWwgb2Ygc3RyZWFtKSB7XG4gICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBBYm9ydEVycm9yKClcbiAgICAgICAgICB9XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHZhbCA9IGZuKHZhbCwgc2lnbmFsT3B0KVxuICAgICAgICAgICAgaWYgKHZhbCA9PT0ga0VtcHR5KSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YWwgPSBQcm9taXNlUmVzb2x2ZSh2YWwpXG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICB2YWwgPSBQcm9taXNlUmVqZWN0KGVycilcbiAgICAgICAgICB9XG4gICAgICAgICAgY250ICs9IDFcbiAgICAgICAgICBQcm9taXNlUHJvdG90eXBlVGhlbih2YWwsIGFmdGVySXRlbVByb2Nlc3NlZCwgb25DYXRjaClcbiAgICAgICAgICBxdWV1ZS5wdXNoKHZhbClcbiAgICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgbmV4dCgpXG4gICAgICAgICAgICBuZXh0ID0gbnVsbFxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWRvbmUgJiYgKHF1ZXVlLmxlbmd0aCA+PSBoaWdoV2F0ZXJNYXJrIHx8IGNudCA+PSBjb25jdXJyZW5jeSkpIHtcbiAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICAgIHJlc3VtZSA9IHJlc29sdmVcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlLnB1c2goa0VvZilcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zdCB2YWwgPSBQcm9taXNlUmVqZWN0KGVycilcbiAgICAgICAgUHJvbWlzZVByb3RvdHlwZVRoZW4odmFsLCBhZnRlckl0ZW1Qcm9jZXNzZWQsIG9uQ2F0Y2gpXG4gICAgICAgIHF1ZXVlLnB1c2godmFsKVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgZG9uZSA9IHRydWVcbiAgICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgICBuZXh0KClcbiAgICAgICAgICBuZXh0ID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHB1bXAoKVxuICAgIHRyeSB7XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB3aGlsZSAocXVldWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IHZhbCA9IGF3YWl0IHF1ZXVlWzBdXG4gICAgICAgICAgaWYgKHZhbCA9PT0ga0VvZikge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzaWduYWwuYWJvcnRlZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEFib3J0RXJyb3IoKVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodmFsICE9PSBrRW1wdHkpIHtcbiAgICAgICAgICAgIHlpZWxkIHZhbFxuICAgICAgICAgIH1cbiAgICAgICAgICBxdWV1ZS5zaGlmdCgpXG4gICAgICAgICAgbWF5YmVSZXN1bWUoKVxuICAgICAgICB9XG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgbmV4dCA9IHJlc29sdmVcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgZG9uZSA9IHRydWVcbiAgICAgIGlmIChyZXN1bWUpIHtcbiAgICAgICAgcmVzdW1lKClcbiAgICAgICAgcmVzdW1lID0gbnVsbFxuICAgICAgfVxuICAgIH1cbiAgfS5jYWxsKHRoaXMpXG59XG5mdW5jdGlvbiBhc0luZGV4ZWRQYWlycyhvcHRpb25zID0gdW5kZWZpbmVkKSB7XG4gIGlmIChvcHRpb25zICE9IG51bGwpIHtcbiAgICB2YWxpZGF0ZU9iamVjdChvcHRpb25zLCAnb3B0aW9ucycpXG4gIH1cbiAgaWYgKChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IG9wdGlvbnMuc2lnbmFsKSAhPSBudWxsKSB7XG4gICAgdmFsaWRhdGVBYm9ydFNpZ25hbChvcHRpb25zLnNpZ25hbCwgJ29wdGlvbnMuc2lnbmFsJylcbiAgfVxuICByZXR1cm4gYXN5bmMgZnVuY3Rpb24qIGFzSW5kZXhlZFBhaXJzKCkge1xuICAgIGxldCBpbmRleCA9IDBcbiAgICBmb3IgYXdhaXQgKGNvbnN0IHZhbCBvZiB0aGlzKSB7XG4gICAgICB2YXIgX29wdGlvbnMkc2lnbmFsXG4gICAgICBpZiAoXG4gICAgICAgIG9wdGlvbnMgIT09IG51bGwgJiZcbiAgICAgICAgb3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIChfb3B0aW9ucyRzaWduYWwgPSBvcHRpb25zLnNpZ25hbCkgIT09IG51bGwgJiZcbiAgICAgICAgX29wdGlvbnMkc2lnbmFsICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgX29wdGlvbnMkc2lnbmFsLmFib3J0ZWRcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgQWJvcnRFcnJvcih7XG4gICAgICAgICAgY2F1c2U6IG9wdGlvbnMuc2lnbmFsLnJlYXNvblxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgeWllbGQgW2luZGV4KyssIHZhbF1cbiAgICB9XG4gIH0uY2FsbCh0aGlzKVxufVxuYXN5bmMgZnVuY3Rpb24gc29tZShmbiwgb3B0aW9ucyA9IHVuZGVmaW5lZCkge1xuICBmb3IgYXdhaXQgKGNvbnN0IHVudXNlZCBvZiBmaWx0ZXIuY2FsbCh0aGlzLCBmbiwgb3B0aW9ucykpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuYXN5bmMgZnVuY3Rpb24gZXZlcnkoZm4sIG9wdGlvbnMgPSB1bmRlZmluZWQpIHtcbiAgaWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRSgnZm4nLCBbJ0Z1bmN0aW9uJywgJ0FzeW5jRnVuY3Rpb24nXSwgZm4pXG4gIH1cbiAgLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRGVfTW9yZ2FuJTI3c19sYXdzXG4gIHJldHVybiAhKGF3YWl0IHNvbWUuY2FsbChcbiAgICB0aGlzLFxuICAgIGFzeW5jICguLi5hcmdzKSA9PiB7XG4gICAgICByZXR1cm4gIShhd2FpdCBmbiguLi5hcmdzKSlcbiAgICB9LFxuICAgIG9wdGlvbnNcbiAgKSlcbn1cbmFzeW5jIGZ1bmN0aW9uIGZpbmQoZm4sIG9wdGlvbnMpIHtcbiAgZm9yIGF3YWl0IChjb25zdCByZXN1bHQgb2YgZmlsdGVyLmNhbGwodGhpcywgZm4sIG9wdGlvbnMpKSB7XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG4gIHJldHVybiB1bmRlZmluZWRcbn1cbmFzeW5jIGZ1bmN0aW9uIGZvckVhY2goZm4sIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRSgnZm4nLCBbJ0Z1bmN0aW9uJywgJ0FzeW5jRnVuY3Rpb24nXSwgZm4pXG4gIH1cbiAgYXN5bmMgZnVuY3Rpb24gZm9yRWFjaEZuKHZhbHVlLCBvcHRpb25zKSB7XG4gICAgYXdhaXQgZm4odmFsdWUsIG9wdGlvbnMpXG4gICAgcmV0dXJuIGtFbXB0eVxuICB9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBmb3IgYXdhaXQgKGNvbnN0IHVudXNlZCBvZiBtYXAuY2FsbCh0aGlzLCBmb3JFYWNoRm4sIG9wdGlvbnMpKTtcbn1cbmZ1bmN0aW9uIGZpbHRlcihmbiwgb3B0aW9ucykge1xuICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKCdmbicsIFsnRnVuY3Rpb24nLCAnQXN5bmNGdW5jdGlvbiddLCBmbilcbiAgfVxuICBhc3luYyBmdW5jdGlvbiBmaWx0ZXJGbih2YWx1ZSwgb3B0aW9ucykge1xuICAgIGlmIChhd2FpdCBmbih2YWx1ZSwgb3B0aW9ucykpIHtcbiAgICAgIHJldHVybiB2YWx1ZVxuICAgIH1cbiAgICByZXR1cm4ga0VtcHR5XG4gIH1cbiAgcmV0dXJuIG1hcC5jYWxsKHRoaXMsIGZpbHRlckZuLCBvcHRpb25zKVxufVxuXG4vLyBTcGVjaWZpYyB0byBwcm92aWRlIGJldHRlciBlcnJvciB0byByZWR1Y2Ugc2luY2UgdGhlIGFyZ3VtZW50IGlzIG9ubHlcbi8vIG1pc3NpbmcgaWYgdGhlIHN0cmVhbSBoYXMgbm8gaXRlbXMgaW4gaXQgLSBidXQgdGhlIGNvZGUgaXMgc3RpbGwgYXBwcm9wcmlhdGVcbmNsYXNzIFJlZHVjZUF3YXJlRXJyTWlzc2luZ0FyZ3MgZXh0ZW5kcyBFUlJfTUlTU0lOR19BUkdTIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoJ3JlZHVjZScpXG4gICAgdGhpcy5tZXNzYWdlID0gJ1JlZHVjZSBvZiBhbiBlbXB0eSBzdHJlYW0gcmVxdWlyZXMgYW4gaW5pdGlhbCB2YWx1ZSdcbiAgfVxufVxuYXN5bmMgZnVuY3Rpb24gcmVkdWNlKHJlZHVjZXIsIGluaXRpYWxWYWx1ZSwgb3B0aW9ucykge1xuICB2YXIgX29wdGlvbnMkc2lnbmFsMlxuICBpZiAodHlwZW9mIHJlZHVjZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoJ3JlZHVjZXInLCBbJ0Z1bmN0aW9uJywgJ0FzeW5jRnVuY3Rpb24nXSwgcmVkdWNlcilcbiAgfVxuICBpZiAob3B0aW9ucyAhPSBudWxsKSB7XG4gICAgdmFsaWRhdGVPYmplY3Qob3B0aW9ucywgJ29wdGlvbnMnKVxuICB9XG4gIGlmICgob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBvcHRpb25zLnNpZ25hbCkgIT0gbnVsbCkge1xuICAgIHZhbGlkYXRlQWJvcnRTaWduYWwob3B0aW9ucy5zaWduYWwsICdvcHRpb25zLnNpZ25hbCcpXG4gIH1cbiAgbGV0IGhhc0luaXRpYWxWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxXG4gIGlmIChcbiAgICBvcHRpb25zICE9PSBudWxsICYmXG4gICAgb3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmXG4gICAgKF9vcHRpb25zJHNpZ25hbDIgPSBvcHRpb25zLnNpZ25hbCkgIT09IG51bGwgJiZcbiAgICBfb3B0aW9ucyRzaWduYWwyICE9PSB1bmRlZmluZWQgJiZcbiAgICBfb3B0aW9ucyRzaWduYWwyLmFib3J0ZWRcbiAgKSB7XG4gICAgY29uc3QgZXJyID0gbmV3IEFib3J0RXJyb3IodW5kZWZpbmVkLCB7XG4gICAgICBjYXVzZTogb3B0aW9ucy5zaWduYWwucmVhc29uXG4gICAgfSlcbiAgICB0aGlzLm9uY2UoJ2Vycm9yJywgKCkgPT4ge30pIC8vIFRoZSBlcnJvciBpcyBhbHJlYWR5IHByb3BhZ2F0ZWRcbiAgICBhd2FpdCBmaW5pc2hlZCh0aGlzLmRlc3Ryb3koZXJyKSlcbiAgICB0aHJvdyBlcnJcbiAgfVxuICBjb25zdCBhYyA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuICBjb25zdCBzaWduYWwgPSBhYy5zaWduYWxcbiAgaWYgKG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbnMuc2lnbmFsKSB7XG4gICAgY29uc3Qgb3B0cyA9IHtcbiAgICAgIG9uY2U6IHRydWUsXG4gICAgICBba1dlYWtIYW5kbGVyXTogdGhpcyxcbiAgICAgIFtrUmVzaXN0U3RvcFByb3BhZ2F0aW9uXTogdHJ1ZVxuICAgIH1cbiAgICBvcHRpb25zLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsICgpID0+IGFjLmFib3J0KCksIG9wdHMpXG4gIH1cbiAgbGV0IGdvdEFueUl0ZW1Gcm9tU3RyZWFtID0gZmFsc2VcbiAgdHJ5IHtcbiAgICBmb3IgYXdhaXQgKGNvbnN0IHZhbHVlIG9mIHRoaXMpIHtcbiAgICAgIHZhciBfb3B0aW9ucyRzaWduYWwzXG4gICAgICBnb3RBbnlJdGVtRnJvbVN0cmVhbSA9IHRydWVcbiAgICAgIGlmIChcbiAgICAgICAgb3B0aW9ucyAhPT0gbnVsbCAmJlxuICAgICAgICBvcHRpb25zICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgKF9vcHRpb25zJHNpZ25hbDMgPSBvcHRpb25zLnNpZ25hbCkgIT09IG51bGwgJiZcbiAgICAgICAgX29wdGlvbnMkc2lnbmFsMyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIF9vcHRpb25zJHNpZ25hbDMuYWJvcnRlZFxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBBYm9ydEVycm9yKClcbiAgICAgIH1cbiAgICAgIGlmICghaGFzSW5pdGlhbFZhbHVlKSB7XG4gICAgICAgIGluaXRpYWxWYWx1ZSA9IHZhbHVlXG4gICAgICAgIGhhc0luaXRpYWxWYWx1ZSA9IHRydWVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGluaXRpYWxWYWx1ZSA9IGF3YWl0IHJlZHVjZXIoaW5pdGlhbFZhbHVlLCB2YWx1ZSwge1xuICAgICAgICAgIHNpZ25hbFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWdvdEFueUl0ZW1Gcm9tU3RyZWFtICYmICFoYXNJbml0aWFsVmFsdWUpIHtcbiAgICAgIHRocm93IG5ldyBSZWR1Y2VBd2FyZUVyck1pc3NpbmdBcmdzKClcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgYWMuYWJvcnQoKVxuICB9XG4gIHJldHVybiBpbml0aWFsVmFsdWVcbn1cbmFzeW5jIGZ1bmN0aW9uIHRvQXJyYXkob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyAhPSBudWxsKSB7XG4gICAgdmFsaWRhdGVPYmplY3Qob3B0aW9ucywgJ29wdGlvbnMnKVxuICB9XG4gIGlmICgob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBvcHRpb25zLnNpZ25hbCkgIT0gbnVsbCkge1xuICAgIHZhbGlkYXRlQWJvcnRTaWduYWwob3B0aW9ucy5zaWduYWwsICdvcHRpb25zLnNpZ25hbCcpXG4gIH1cbiAgY29uc3QgcmVzdWx0ID0gW11cbiAgZm9yIGF3YWl0IChjb25zdCB2YWwgb2YgdGhpcykge1xuICAgIHZhciBfb3B0aW9ucyRzaWduYWw0XG4gICAgaWYgKFxuICAgICAgb3B0aW9ucyAhPT0gbnVsbCAmJlxuICAgICAgb3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAoX29wdGlvbnMkc2lnbmFsNCA9IG9wdGlvbnMuc2lnbmFsKSAhPT0gbnVsbCAmJlxuICAgICAgX29wdGlvbnMkc2lnbmFsNCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBfb3B0aW9ucyRzaWduYWw0LmFib3J0ZWRcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBBYm9ydEVycm9yKHVuZGVmaW5lZCwge1xuICAgICAgICBjYXVzZTogb3B0aW9ucy5zaWduYWwucmVhc29uXG4gICAgICB9KVxuICAgIH1cbiAgICBBcnJheVByb3RvdHlwZVB1c2gocmVzdWx0LCB2YWwpXG4gIH1cbiAgcmV0dXJuIHJlc3VsdFxufVxuZnVuY3Rpb24gZmxhdE1hcChmbiwgb3B0aW9ucykge1xuICBjb25zdCB2YWx1ZXMgPSBtYXAuY2FsbCh0aGlzLCBmbiwgb3B0aW9ucylcbiAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uKiBmbGF0TWFwKCkge1xuICAgIGZvciBhd2FpdCAoY29uc3QgdmFsIG9mIHZhbHVlcykge1xuICAgICAgeWllbGQqIHZhbFxuICAgIH1cbiAgfS5jYWxsKHRoaXMpXG59XG5mdW5jdGlvbiB0b0ludGVnZXJPckluZmluaXR5KG51bWJlcikge1xuICAvLyBXZSBjb2VyY2UgaGVyZSB0byBhbGlnbiB3aXRoIHRoZSBzcGVjXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWl0ZXJhdG9yLWhlbHBlcnMvaXNzdWVzLzE2OVxuICBudW1iZXIgPSBOdW1iZXIobnVtYmVyKVxuICBpZiAoTnVtYmVySXNOYU4obnVtYmVyKSkge1xuICAgIHJldHVybiAwXG4gIH1cbiAgaWYgKG51bWJlciA8IDApIHtcbiAgICB0aHJvdyBuZXcgRVJSX09VVF9PRl9SQU5HRSgnbnVtYmVyJywgJz49IDAnLCBudW1iZXIpXG4gIH1cbiAgcmV0dXJuIG51bWJlclxufVxuZnVuY3Rpb24gZHJvcChudW1iZXIsIG9wdGlvbnMgPSB1bmRlZmluZWQpIHtcbiAgaWYgKG9wdGlvbnMgIT0gbnVsbCkge1xuICAgIHZhbGlkYXRlT2JqZWN0KG9wdGlvbnMsICdvcHRpb25zJylcbiAgfVxuICBpZiAoKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogb3B0aW9ucy5zaWduYWwpICE9IG51bGwpIHtcbiAgICB2YWxpZGF0ZUFib3J0U2lnbmFsKG9wdGlvbnMuc2lnbmFsLCAnb3B0aW9ucy5zaWduYWwnKVxuICB9XG4gIG51bWJlciA9IHRvSW50ZWdlck9ySW5maW5pdHkobnVtYmVyKVxuICByZXR1cm4gYXN5bmMgZnVuY3Rpb24qIGRyb3AoKSB7XG4gICAgdmFyIF9vcHRpb25zJHNpZ25hbDVcbiAgICBpZiAoXG4gICAgICBvcHRpb25zICE9PSBudWxsICYmXG4gICAgICBvcHRpb25zICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIChfb3B0aW9ucyRzaWduYWw1ID0gb3B0aW9ucy5zaWduYWwpICE9PSBudWxsICYmXG4gICAgICBfb3B0aW9ucyRzaWduYWw1ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIF9vcHRpb25zJHNpZ25hbDUuYWJvcnRlZFxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEFib3J0RXJyb3IoKVxuICAgIH1cbiAgICBmb3IgYXdhaXQgKGNvbnN0IHZhbCBvZiB0aGlzKSB7XG4gICAgICB2YXIgX29wdGlvbnMkc2lnbmFsNlxuICAgICAgaWYgKFxuICAgICAgICBvcHRpb25zICE9PSBudWxsICYmXG4gICAgICAgIG9wdGlvbnMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAoX29wdGlvbnMkc2lnbmFsNiA9IG9wdGlvbnMuc2lnbmFsKSAhPT0gbnVsbCAmJlxuICAgICAgICBfb3B0aW9ucyRzaWduYWw2ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgX29wdGlvbnMkc2lnbmFsNi5hYm9ydGVkXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEFib3J0RXJyb3IoKVxuICAgICAgfVxuICAgICAgaWYgKG51bWJlci0tIDw9IDApIHtcbiAgICAgICAgeWllbGQgdmFsXG4gICAgICB9XG4gICAgfVxuICB9LmNhbGwodGhpcylcbn1cbmZ1bmN0aW9uIHRha2UobnVtYmVyLCBvcHRpb25zID0gdW5kZWZpbmVkKSB7XG4gIGlmIChvcHRpb25zICE9IG51bGwpIHtcbiAgICB2YWxpZGF0ZU9iamVjdChvcHRpb25zLCAnb3B0aW9ucycpXG4gIH1cbiAgaWYgKChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IG9wdGlvbnMuc2lnbmFsKSAhPSBudWxsKSB7XG4gICAgdmFsaWRhdGVBYm9ydFNpZ25hbChvcHRpb25zLnNpZ25hbCwgJ29wdGlvbnMuc2lnbmFsJylcbiAgfVxuICBudW1iZXIgPSB0b0ludGVnZXJPckluZmluaXR5KG51bWJlcilcbiAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uKiB0YWtlKCkge1xuICAgIHZhciBfb3B0aW9ucyRzaWduYWw3XG4gICAgaWYgKFxuICAgICAgb3B0aW9ucyAhPT0gbnVsbCAmJlxuICAgICAgb3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAoX29wdGlvbnMkc2lnbmFsNyA9IG9wdGlvbnMuc2lnbmFsKSAhPT0gbnVsbCAmJlxuICAgICAgX29wdGlvbnMkc2lnbmFsNyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBfb3B0aW9ucyRzaWduYWw3LmFib3J0ZWRcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBBYm9ydEVycm9yKClcbiAgICB9XG4gICAgZm9yIGF3YWl0IChjb25zdCB2YWwgb2YgdGhpcykge1xuICAgICAgdmFyIF9vcHRpb25zJHNpZ25hbDhcbiAgICAgIGlmIChcbiAgICAgICAgb3B0aW9ucyAhPT0gbnVsbCAmJlxuICAgICAgICBvcHRpb25zICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgKF9vcHRpb25zJHNpZ25hbDggPSBvcHRpb25zLnNpZ25hbCkgIT09IG51bGwgJiZcbiAgICAgICAgX29wdGlvbnMkc2lnbmFsOCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIF9vcHRpb25zJHNpZ25hbDguYWJvcnRlZFxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBBYm9ydEVycm9yKClcbiAgICAgIH1cbiAgICAgIGlmIChudW1iZXItLSA+IDApIHtcbiAgICAgICAgeWllbGQgdmFsXG4gICAgICB9XG5cbiAgICAgIC8vIERvbid0IGdldCBhbm90aGVyIGl0ZW0gZnJvbSBpdGVyYXRvciBpbiBjYXNlIHdlIHJlYWNoZWQgdGhlIGVuZFxuICAgICAgaWYgKG51bWJlciA8PSAwKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cbiAgfS5jYWxsKHRoaXMpXG59XG5tb2R1bGUuZXhwb3J0cy5zdHJlYW1SZXR1cm5pbmdPcGVyYXRvcnMgPSB7XG4gIGFzSW5kZXhlZFBhaXJzOiBkZXByZWNhdGUoYXNJbmRleGVkUGFpcnMsICdyZWFkYWJsZS5hc0luZGV4ZWRQYWlycyB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbi4nKSxcbiAgZHJvcCxcbiAgZmlsdGVyLFxuICBmbGF0TWFwLFxuICBtYXAsXG4gIHRha2UsXG4gIGNvbXBvc2Vcbn1cbm1vZHVsZS5leHBvcnRzLnByb21pc2VSZXR1cm5pbmdPcGVyYXRvcnMgPSB7XG4gIGV2ZXJ5LFxuICBmb3JFYWNoLFxuICByZWR1Y2UsXG4gIHRvQXJyYXksXG4gIHNvbWUsXG4gIGZpbmRcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgQXJyYXlQcm90b3R5cGVQb3AsIFByb21pc2UgfSA9IHJlcXVpcmUoJy4uL291cnMvcHJpbW9yZGlhbHMnKVxuY29uc3QgeyBpc0l0ZXJhYmxlLCBpc05vZGVTdHJlYW0sIGlzV2ViU3RyZWFtIH0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbC9zdHJlYW1zL3V0aWxzJylcbmNvbnN0IHsgcGlwZWxpbmVJbXBsOiBwbCB9ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWwvc3RyZWFtcy9waXBlbGluZScpXG5jb25zdCB7IGZpbmlzaGVkIH0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbC9zdHJlYW1zL2VuZC1vZi1zdHJlYW0nKVxucmVxdWlyZSgnLi4vLi4vbGliL3N0cmVhbS5qcycpXG5mdW5jdGlvbiBwaXBlbGluZSguLi5zdHJlYW1zKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgbGV0IHNpZ25hbFxuICAgIGxldCBlbmRcbiAgICBjb25zdCBsYXN0QXJnID0gc3RyZWFtc1tzdHJlYW1zLmxlbmd0aCAtIDFdXG4gICAgaWYgKFxuICAgICAgbGFzdEFyZyAmJlxuICAgICAgdHlwZW9mIGxhc3RBcmcgPT09ICdvYmplY3QnICYmXG4gICAgICAhaXNOb2RlU3RyZWFtKGxhc3RBcmcpICYmXG4gICAgICAhaXNJdGVyYWJsZShsYXN0QXJnKSAmJlxuICAgICAgIWlzV2ViU3RyZWFtKGxhc3RBcmcpXG4gICAgKSB7XG4gICAgICBjb25zdCBvcHRpb25zID0gQXJyYXlQcm90b3R5cGVQb3Aoc3RyZWFtcylcbiAgICAgIHNpZ25hbCA9IG9wdGlvbnMuc2lnbmFsXG4gICAgICBlbmQgPSBvcHRpb25zLmVuZFxuICAgIH1cbiAgICBwbChcbiAgICAgIHN0cmVhbXMsXG4gICAgICAoZXJyLCB2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgcmVqZWN0KGVycilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNvbHZlKHZhbHVlKVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBzaWduYWwsXG4gICAgICAgIGVuZFxuICAgICAgfVxuICAgIClcbiAgfSlcbn1cbm1vZHVsZS5leHBvcnRzID0ge1xuICBmaW5pc2hlZCxcbiAgcGlwZWxpbmVcbn1cbiIsCiAgICAiLyogcmVwbGFjZW1lbnQgc3RhcnQgKi9cblxuY29uc3QgeyBCdWZmZXIgfSA9IHJlcXVpcmUoJ2J1ZmZlcicpXG5cbi8qIHJlcGxhY2VtZW50IGVuZCAqL1xuLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbjsoJ3VzZSBzdHJpY3QnKVxuY29uc3QgeyBPYmplY3REZWZpbmVQcm9wZXJ0eSwgT2JqZWN0S2V5cywgUmVmbGVjdEFwcGx5IH0gPSByZXF1aXJlKCcuL291cnMvcHJpbW9yZGlhbHMnKVxuY29uc3Qge1xuICBwcm9taXNpZnk6IHsgY3VzdG9tOiBjdXN0b21Qcm9taXNpZnkgfVxufSA9IHJlcXVpcmUoJy4vb3Vycy91dGlsJylcbmNvbnN0IHsgc3RyZWFtUmV0dXJuaW5nT3BlcmF0b3JzLCBwcm9taXNlUmV0dXJuaW5nT3BlcmF0b3JzIH0gPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvb3BlcmF0b3JzJylcbmNvbnN0IHtcbiAgY29kZXM6IHsgRVJSX0lMTEVHQUxfQ09OU1RSVUNUT1IgfVxufSA9IHJlcXVpcmUoJy4vb3Vycy9lcnJvcnMnKVxuY29uc3QgY29tcG9zZSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvc3RyZWFtcy9jb21wb3NlJylcbmNvbnN0IHsgc2V0RGVmYXVsdEhpZ2hXYXRlck1hcmssIGdldERlZmF1bHRIaWdoV2F0ZXJNYXJrIH0gPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvc3RhdGUnKVxuY29uc3QgeyBwaXBlbGluZSB9ID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL3BpcGVsaW5lJylcbmNvbnN0IHsgZGVzdHJveWVyIH0gPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvZGVzdHJveScpXG5jb25zdCBlb3MgPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvZW5kLW9mLXN0cmVhbScpXG5jb25zdCBpbnRlcm5hbEJ1ZmZlciA9IHt9XG5jb25zdCBwcm9taXNlcyA9IHJlcXVpcmUoJy4vc3RyZWFtL3Byb21pc2VzJylcbmNvbnN0IHV0aWxzID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL3V0aWxzJylcbmNvbnN0IFN0cmVhbSA9IChtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvc3RyZWFtcy9sZWdhY3knKS5TdHJlYW0pXG5TdHJlYW0uaXNEZXN0cm95ZWQgPSB1dGlscy5pc0Rlc3Ryb3llZFxuU3RyZWFtLmlzRGlzdHVyYmVkID0gdXRpbHMuaXNEaXN0dXJiZWRcblN0cmVhbS5pc0Vycm9yZWQgPSB1dGlscy5pc0Vycm9yZWRcblN0cmVhbS5pc1JlYWRhYmxlID0gdXRpbHMuaXNSZWFkYWJsZVxuU3RyZWFtLmlzV3JpdGFibGUgPSB1dGlscy5pc1dyaXRhYmxlXG5TdHJlYW0uUmVhZGFibGUgPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvcmVhZGFibGUnKVxuZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0S2V5cyhzdHJlYW1SZXR1cm5pbmdPcGVyYXRvcnMpKSB7XG4gIGNvbnN0IG9wID0gc3RyZWFtUmV0dXJuaW5nT3BlcmF0b3JzW2tleV1cbiAgZnVuY3Rpb24gZm4oLi4uYXJncykge1xuICAgIGlmIChuZXcudGFyZ2V0KSB7XG4gICAgICB0aHJvdyBFUlJfSUxMRUdBTF9DT05TVFJVQ1RPUigpXG4gICAgfVxuICAgIHJldHVybiBTdHJlYW0uUmVhZGFibGUuZnJvbShSZWZsZWN0QXBwbHkob3AsIHRoaXMsIGFyZ3MpKVxuICB9XG4gIE9iamVjdERlZmluZVByb3BlcnR5KGZuLCAnbmFtZScsIHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgdmFsdWU6IG9wLm5hbWVcbiAgfSlcbiAgT2JqZWN0RGVmaW5lUHJvcGVydHkoZm4sICdsZW5ndGgnLCB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIHZhbHVlOiBvcC5sZW5ndGhcbiAgfSlcbiAgT2JqZWN0RGVmaW5lUHJvcGVydHkoU3RyZWFtLlJlYWRhYmxlLnByb3RvdHlwZSwga2V5LCB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIHZhbHVlOiBmbixcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgd3JpdGFibGU6IHRydWVcbiAgfSlcbn1cbmZvciAoY29uc3Qga2V5IG9mIE9iamVjdEtleXMocHJvbWlzZVJldHVybmluZ09wZXJhdG9ycykpIHtcbiAgY29uc3Qgb3AgPSBwcm9taXNlUmV0dXJuaW5nT3BlcmF0b3JzW2tleV1cbiAgZnVuY3Rpb24gZm4oLi4uYXJncykge1xuICAgIGlmIChuZXcudGFyZ2V0KSB7XG4gICAgICB0aHJvdyBFUlJfSUxMRUdBTF9DT05TVFJVQ1RPUigpXG4gICAgfVxuICAgIHJldHVybiBSZWZsZWN0QXBwbHkob3AsIHRoaXMsIGFyZ3MpXG4gIH1cbiAgT2JqZWN0RGVmaW5lUHJvcGVydHkoZm4sICduYW1lJywge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICB2YWx1ZTogb3AubmFtZVxuICB9KVxuICBPYmplY3REZWZpbmVQcm9wZXJ0eShmbiwgJ2xlbmd0aCcsIHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgdmFsdWU6IG9wLmxlbmd0aFxuICB9KVxuICBPYmplY3REZWZpbmVQcm9wZXJ0eShTdHJlYW0uUmVhZGFibGUucHJvdG90eXBlLCBrZXksIHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgdmFsdWU6IGZuLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB3cml0YWJsZTogdHJ1ZVxuICB9KVxufVxuU3RyZWFtLldyaXRhYmxlID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL3dyaXRhYmxlJylcblN0cmVhbS5EdXBsZXggPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvZHVwbGV4JylcblN0cmVhbS5UcmFuc2Zvcm0gPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvdHJhbnNmb3JtJylcblN0cmVhbS5QYXNzVGhyb3VnaCA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvc3RyZWFtcy9wYXNzdGhyb3VnaCcpXG5TdHJlYW0ucGlwZWxpbmUgPSBwaXBlbGluZVxuY29uc3QgeyBhZGRBYm9ydFNpZ25hbCB9ID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL2FkZC1hYm9ydC1zaWduYWwnKVxuU3RyZWFtLmFkZEFib3J0U2lnbmFsID0gYWRkQWJvcnRTaWduYWxcblN0cmVhbS5maW5pc2hlZCA9IGVvc1xuU3RyZWFtLmRlc3Ryb3kgPSBkZXN0cm95ZXJcblN0cmVhbS5jb21wb3NlID0gY29tcG9zZVxuU3RyZWFtLnNldERlZmF1bHRIaWdoV2F0ZXJNYXJrID0gc2V0RGVmYXVsdEhpZ2hXYXRlck1hcmtcblN0cmVhbS5nZXREZWZhdWx0SGlnaFdhdGVyTWFyayA9IGdldERlZmF1bHRIaWdoV2F0ZXJNYXJrXG5PYmplY3REZWZpbmVQcm9wZXJ0eShTdHJlYW0sICdwcm9taXNlcycsIHtcbiAgX19wcm90b19fOiBudWxsLFxuICBjb25maWd1cmFibGU6IHRydWUsXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldCgpIHtcbiAgICByZXR1cm4gcHJvbWlzZXNcbiAgfVxufSlcbk9iamVjdERlZmluZVByb3BlcnR5KHBpcGVsaW5lLCBjdXN0b21Qcm9taXNpZnksIHtcbiAgX19wcm90b19fOiBudWxsLFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQoKSB7XG4gICAgcmV0dXJuIHByb21pc2VzLnBpcGVsaW5lXG4gIH1cbn0pXG5PYmplY3REZWZpbmVQcm9wZXJ0eShlb3MsIGN1c3RvbVByb21pc2lmeSwge1xuICBfX3Byb3RvX186IG51bGwsXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldCgpIHtcbiAgICByZXR1cm4gcHJvbWlzZXMuZmluaXNoZWRcbiAgfVxufSlcblxuLy8gQmFja3dhcmRzLWNvbXBhdCB3aXRoIG5vZGUgMC40LnhcblN0cmVhbS5TdHJlYW0gPSBTdHJlYW1cblN0cmVhbS5faXNVaW50OEFycmF5ID0gZnVuY3Rpb24gaXNVaW50OEFycmF5KHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXlcbn1cblN0cmVhbS5fdWludDhBcnJheVRvQnVmZmVyID0gZnVuY3Rpb24gX3VpbnQ4QXJyYXlUb0J1ZmZlcihjaHVuaykge1xuICByZXR1cm4gQnVmZmVyLmZyb20oY2h1bmsuYnVmZmVyLCBjaHVuay5ieXRlT2Zmc2V0LCBjaHVuay5ieXRlTGVuZ3RoKVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJylcbmlmIChTdHJlYW0gJiYgcHJvY2Vzcy5lbnYuUkVBREFCTEVfU1RSRUFNID09PSAnZGlzYWJsZScpIHtcbiAgY29uc3QgcHJvbWlzZXMgPSBTdHJlYW0ucHJvbWlzZXNcblxuICAvLyBFeHBsaWNpdCBleHBvcnQgbmFtaW5nIGlzIG5lZWRlZCBmb3IgRVNNXG4gIG1vZHVsZS5leHBvcnRzLl91aW50OEFycmF5VG9CdWZmZXIgPSBTdHJlYW0uX3VpbnQ4QXJyYXlUb0J1ZmZlclxuICBtb2R1bGUuZXhwb3J0cy5faXNVaW50OEFycmF5ID0gU3RyZWFtLl9pc1VpbnQ4QXJyYXlcbiAgbW9kdWxlLmV4cG9ydHMuaXNEaXN0dXJiZWQgPSBTdHJlYW0uaXNEaXN0dXJiZWRcbiAgbW9kdWxlLmV4cG9ydHMuaXNFcnJvcmVkID0gU3RyZWFtLmlzRXJyb3JlZFxuICBtb2R1bGUuZXhwb3J0cy5pc1JlYWRhYmxlID0gU3RyZWFtLmlzUmVhZGFibGVcbiAgbW9kdWxlLmV4cG9ydHMuUmVhZGFibGUgPSBTdHJlYW0uUmVhZGFibGVcbiAgbW9kdWxlLmV4cG9ydHMuV3JpdGFibGUgPSBTdHJlYW0uV3JpdGFibGVcbiAgbW9kdWxlLmV4cG9ydHMuRHVwbGV4ID0gU3RyZWFtLkR1cGxleFxuICBtb2R1bGUuZXhwb3J0cy5UcmFuc2Zvcm0gPSBTdHJlYW0uVHJhbnNmb3JtXG4gIG1vZHVsZS5leHBvcnRzLlBhc3NUaHJvdWdoID0gU3RyZWFtLlBhc3NUaHJvdWdoXG4gIG1vZHVsZS5leHBvcnRzLmFkZEFib3J0U2lnbmFsID0gU3RyZWFtLmFkZEFib3J0U2lnbmFsXG4gIG1vZHVsZS5leHBvcnRzLmZpbmlzaGVkID0gU3RyZWFtLmZpbmlzaGVkXG4gIG1vZHVsZS5leHBvcnRzLmRlc3Ryb3kgPSBTdHJlYW0uZGVzdHJveVxuICBtb2R1bGUuZXhwb3J0cy5waXBlbGluZSA9IFN0cmVhbS5waXBlbGluZVxuICBtb2R1bGUuZXhwb3J0cy5jb21wb3NlID0gU3RyZWFtLmNvbXBvc2VcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0cmVhbSwgJ3Byb21pc2VzJywge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiBwcm9taXNlc1xuICAgIH1cbiAgfSlcbiAgbW9kdWxlLmV4cG9ydHMuU3RyZWFtID0gU3RyZWFtLlN0cmVhbVxufSBlbHNlIHtcbiAgY29uc3QgQ3VzdG9tU3RyZWFtID0gcmVxdWlyZSgnLi4vc3RyZWFtJylcbiAgY29uc3QgcHJvbWlzZXMgPSByZXF1aXJlKCcuLi9zdHJlYW0vcHJvbWlzZXMnKVxuICBjb25zdCBvcmlnaW5hbERlc3Ryb3kgPSBDdXN0b21TdHJlYW0uUmVhZGFibGUuZGVzdHJveVxuICBtb2R1bGUuZXhwb3J0cyA9IEN1c3RvbVN0cmVhbS5SZWFkYWJsZVxuXG4gIC8vIEV4cGxpY2l0IGV4cG9ydCBuYW1pbmcgaXMgbmVlZGVkIGZvciBFU01cbiAgbW9kdWxlLmV4cG9ydHMuX3VpbnQ4QXJyYXlUb0J1ZmZlciA9IEN1c3RvbVN0cmVhbS5fdWludDhBcnJheVRvQnVmZmVyXG4gIG1vZHVsZS5leHBvcnRzLl9pc1VpbnQ4QXJyYXkgPSBDdXN0b21TdHJlYW0uX2lzVWludDhBcnJheVxuICBtb2R1bGUuZXhwb3J0cy5pc0Rpc3R1cmJlZCA9IEN1c3RvbVN0cmVhbS5pc0Rpc3R1cmJlZFxuICBtb2R1bGUuZXhwb3J0cy5pc0Vycm9yZWQgPSBDdXN0b21TdHJlYW0uaXNFcnJvcmVkXG4gIG1vZHVsZS5leHBvcnRzLmlzUmVhZGFibGUgPSBDdXN0b21TdHJlYW0uaXNSZWFkYWJsZVxuICBtb2R1bGUuZXhwb3J0cy5SZWFkYWJsZSA9IEN1c3RvbVN0cmVhbS5SZWFkYWJsZVxuICBtb2R1bGUuZXhwb3J0cy5Xcml0YWJsZSA9IEN1c3RvbVN0cmVhbS5Xcml0YWJsZVxuICBtb2R1bGUuZXhwb3J0cy5EdXBsZXggPSBDdXN0b21TdHJlYW0uRHVwbGV4XG4gIG1vZHVsZS5leHBvcnRzLlRyYW5zZm9ybSA9IEN1c3RvbVN0cmVhbS5UcmFuc2Zvcm1cbiAgbW9kdWxlLmV4cG9ydHMuUGFzc1Rocm91Z2ggPSBDdXN0b21TdHJlYW0uUGFzc1Rocm91Z2hcbiAgbW9kdWxlLmV4cG9ydHMuYWRkQWJvcnRTaWduYWwgPSBDdXN0b21TdHJlYW0uYWRkQWJvcnRTaWduYWxcbiAgbW9kdWxlLmV4cG9ydHMuZmluaXNoZWQgPSBDdXN0b21TdHJlYW0uZmluaXNoZWRcbiAgbW9kdWxlLmV4cG9ydHMuZGVzdHJveSA9IEN1c3RvbVN0cmVhbS5kZXN0cm95XG4gIG1vZHVsZS5leHBvcnRzLmRlc3Ryb3kgPSBvcmlnaW5hbERlc3Ryb3lcbiAgbW9kdWxlLmV4cG9ydHMucGlwZWxpbmUgPSBDdXN0b21TdHJlYW0ucGlwZWxpbmVcbiAgbW9kdWxlLmV4cG9ydHMuY29tcG9zZSA9IEN1c3RvbVN0cmVhbS5jb21wb3NlXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDdXN0b21TdHJlYW0sICdwcm9taXNlcycsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gcHJvbWlzZXNcbiAgICB9XG4gIH0pXG4gIG1vZHVsZS5leHBvcnRzLlN0cmVhbSA9IEN1c3RvbVN0cmVhbS5TdHJlYW1cbn1cblxuLy8gQWxsb3cgZGVmYXVsdCBpbXBvcnRpbmdcbm1vZHVsZS5leHBvcnRzLmRlZmF1bHQgPSBtb2R1bGUuZXhwb3J0c1xuIiwKICAgICIvKipcbiAqIEFwcGVuZHMgdGhlIGVsZW1lbnRzIG9mIGB2YWx1ZXNgIHRvIGBhcnJheWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHZhbHVlcyB0byBhcHBlbmQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlQdXNoKGFycmF5LCB2YWx1ZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSB2YWx1ZXMubGVuZ3RoLFxuICAgICAgb2Zmc2V0ID0gYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgYXJyYXlbb2Zmc2V0ICsgaW5kZXhdID0gdmFsdWVzW2luZGV4XTtcbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlQdXNoO1xuIiwKICAgICJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzcHJlYWRhYmxlU3ltYm9sID0gU3ltYm9sID8gU3ltYm9sLmlzQ29uY2F0U3ByZWFkYWJsZSA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIGZsYXR0ZW5hYmxlIGBhcmd1bWVudHNgIG9iamVjdCBvciBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBmbGF0dGVuYWJsZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0ZsYXR0ZW5hYmxlKHZhbHVlKSB7XG4gIHJldHVybiBpc0FycmF5KHZhbHVlKSB8fCBpc0FyZ3VtZW50cyh2YWx1ZSkgfHxcbiAgICAhIShzcHJlYWRhYmxlU3ltYm9sICYmIHZhbHVlICYmIHZhbHVlW3NwcmVhZGFibGVTeW1ib2xdKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0ZsYXR0ZW5hYmxlO1xuIiwKICAgICJ2YXIgYXJyYXlQdXNoID0gcmVxdWlyZSgnLi9fYXJyYXlQdXNoJyksXG4gICAgaXNGbGF0dGVuYWJsZSA9IHJlcXVpcmUoJy4vX2lzRmxhdHRlbmFibGUnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mbGF0dGVuYCB3aXRoIHN1cHBvcnQgZm9yIHJlc3RyaWN0aW5nIGZsYXR0ZW5pbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmbGF0dGVuLlxuICogQHBhcmFtIHtudW1iZXJ9IGRlcHRoIFRoZSBtYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3ByZWRpY2F0ZT1pc0ZsYXR0ZW5hYmxlXSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNTdHJpY3RdIFJlc3RyaWN0IHRvIHZhbHVlcyB0aGF0IHBhc3MgYHByZWRpY2F0ZWAgY2hlY2tzLlxuICogQHBhcmFtIHtBcnJheX0gW3Jlc3VsdD1bXV0gVGhlIGluaXRpYWwgcmVzdWx0IHZhbHVlLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmxhdHRlbmVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBiYXNlRmxhdHRlbihhcnJheSwgZGVwdGgsIHByZWRpY2F0ZSwgaXNTdHJpY3QsIHJlc3VsdCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBwcmVkaWNhdGUgfHwgKHByZWRpY2F0ZSA9IGlzRmxhdHRlbmFibGUpO1xuICByZXN1bHQgfHwgKHJlc3VsdCA9IFtdKTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICBpZiAoZGVwdGggPiAwICYmIHByZWRpY2F0ZSh2YWx1ZSkpIHtcbiAgICAgIGlmIChkZXB0aCA+IDEpIHtcbiAgICAgICAgLy8gUmVjdXJzaXZlbHkgZmxhdHRlbiBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICAgICAgYmFzZUZsYXR0ZW4odmFsdWUsIGRlcHRoIC0gMSwgcHJlZGljYXRlLCBpc1N0cmljdCwgcmVzdWx0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFycmF5UHVzaChyZXN1bHQsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFpc1N0cmljdCkge1xuICAgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGhdID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUZsYXR0ZW47XG4iLAogICAgInZhciBiYXNlRmxhdHRlbiA9IHJlcXVpcmUoJy4vX2Jhc2VGbGF0dGVuJyk7XG5cbi8qKlxuICogRmxhdHRlbnMgYGFycmF5YCBhIHNpbmdsZSBsZXZlbCBkZWVwLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGZsYXR0ZW4uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmbGF0dGVuZWQgYXJyYXkuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uZmxhdHRlbihbMSwgWzIsIFszLCBbNF1dLCA1XV0pO1xuICogLy8gPT4gWzEsIDIsIFszLCBbNF1dLCA1XVxuICovXG5mdW5jdGlvbiBmbGF0dGVuKGFycmF5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgcmV0dXJuIGxlbmd0aCA/IGJhc2VGbGF0dGVuKGFycmF5LCAxKSA6IFtdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZsYXR0ZW47XG4iLAogICAgInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIG5hdGl2ZUNyZWF0ZSA9IGdldE5hdGl2ZShPYmplY3QsICdjcmVhdGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBuYXRpdmVDcmVhdGU7XG4iLAogICAgInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBoYXNoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIEhhc2hcbiAqL1xuZnVuY3Rpb24gaGFzaENsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gbmF0aXZlQ3JlYXRlID8gbmF0aXZlQ3JlYXRlKG51bGwpIDoge307XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaENsZWFyO1xuIiwKICAgICIvKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBoYXNoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge09iamVjdH0gaGFzaCBUaGUgaGFzaCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzaERlbGV0ZShrZXkpIHtcbiAgdmFyIHJlc3VsdCA9IHRoaXMuaGFzKGtleSkgJiYgZGVsZXRlIHRoaXMuX19kYXRhX19ba2V5XTtcbiAgdGhpcy5zaXplIC09IHJlc3VsdCA/IDEgOiAwO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hEZWxldGU7XG4iLAogICAgInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEdldHMgdGhlIGhhc2ggdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gaGFzaEdldChrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICBpZiAobmF0aXZlQ3JlYXRlKSB7XG4gICAgdmFyIHJlc3VsdCA9IGRhdGFba2V5XTtcbiAgICByZXR1cm4gcmVzdWx0ID09PSBIQVNIX1VOREVGSU5FRCA/IHVuZGVmaW5lZCA6IHJlc3VsdDtcbiAgfVxuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpID8gZGF0YVtrZXldIDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hHZXQ7XG4iLAogICAgInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBoYXNoIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBoYXNoSGFzKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIHJldHVybiBuYXRpdmVDcmVhdGUgPyAoZGF0YVtrZXldICE9PSB1bmRlZmluZWQpIDogaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hIYXM7XG4iLAogICAgInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKipcbiAqIFNldHMgdGhlIGhhc2ggYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBoYXNoIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBoYXNoU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICB0aGlzLnNpemUgKz0gdGhpcy5oYXMoa2V5KSA/IDAgOiAxO1xuICBkYXRhW2tleV0gPSAobmF0aXZlQ3JlYXRlICYmIHZhbHVlID09PSB1bmRlZmluZWQpID8gSEFTSF9VTkRFRklORUQgOiB2YWx1ZTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaFNldDtcbiIsCiAgICAidmFyIGhhc2hDbGVhciA9IHJlcXVpcmUoJy4vX2hhc2hDbGVhcicpLFxuICAgIGhhc2hEZWxldGUgPSByZXF1aXJlKCcuL19oYXNoRGVsZXRlJyksXG4gICAgaGFzaEdldCA9IHJlcXVpcmUoJy4vX2hhc2hHZXQnKSxcbiAgICBoYXNoSGFzID0gcmVxdWlyZSgnLi9faGFzaEhhcycpLFxuICAgIGhhc2hTZXQgPSByZXF1aXJlKCcuL19oYXNoU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGhhc2ggb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBIYXNoKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYEhhc2hgLlxuSGFzaC5wcm90b3R5cGUuY2xlYXIgPSBoYXNoQ2xlYXI7XG5IYXNoLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBoYXNoRGVsZXRlO1xuSGFzaC5wcm90b3R5cGUuZ2V0ID0gaGFzaEdldDtcbkhhc2gucHJvdG90eXBlLmhhcyA9IGhhc2hIYXM7XG5IYXNoLnByb3RvdHlwZS5zZXQgPSBoYXNoU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEhhc2g7XG4iLAogICAgIi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgbGlzdCBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBbXTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVDbGVhcjtcbiIsCiAgICAidmFyIGVxID0gcmVxdWlyZSgnLi9lcScpO1xuXG4vKipcbiAqIEdldHMgdGhlIGluZGV4IGF0IHdoaWNoIHRoZSBga2V5YCBpcyBmb3VuZCBpbiBgYXJyYXlgIG9mIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IGtleSBUaGUga2V5IHRvIHNlYXJjaCBmb3IuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICovXG5mdW5jdGlvbiBhc3NvY0luZGV4T2YoYXJyYXksIGtleSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICBpZiAoZXEoYXJyYXlbbGVuZ3RoXVswXSwga2V5KSkge1xuICAgICAgcmV0dXJuIGxlbmd0aDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFzc29jSW5kZXhPZjtcbiIsCiAgICAidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgYXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3BsaWNlID0gYXJyYXlQcm90by5zcGxpY2U7XG5cbi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGxpc3QgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZURlbGV0ZShrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBsYXN0SW5kZXggPSBkYXRhLmxlbmd0aCAtIDE7XG4gIGlmIChpbmRleCA9PSBsYXN0SW5kZXgpIHtcbiAgICBkYXRhLnBvcCgpO1xuICB9IGVsc2Uge1xuICAgIHNwbGljZS5jYWxsKGRhdGEsIGluZGV4LCAxKTtcbiAgfVxuICAtLXRoaXMuc2l6ZTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlRGVsZXRlO1xuIiwKICAgICJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUdldChrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICByZXR1cm4gaW5kZXggPCAwID8gdW5kZWZpbmVkIDogZGF0YVtpbmRleF1bMV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlR2V0O1xuIiwKICAgICJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVIYXMoa2V5KSB7XG4gIHJldHVybiBhc3NvY0luZGV4T2YodGhpcy5fX2RhdGFfXywga2V5KSA+IC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZUhhcztcbiIsCiAgICAidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKipcbiAqIFNldHMgdGhlIGxpc3QgY2FjaGUgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGxpc3QgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZVNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgaWYgKGluZGV4IDwgMCkge1xuICAgICsrdGhpcy5zaXplO1xuICAgIGRhdGEucHVzaChba2V5LCB2YWx1ZV0pO1xuICB9IGVsc2Uge1xuICAgIGRhdGFbaW5kZXhdWzFdID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlU2V0O1xuIiwKICAgICJ2YXIgbGlzdENhY2hlQ2xlYXIgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVDbGVhcicpLFxuICAgIGxpc3RDYWNoZURlbGV0ZSA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZURlbGV0ZScpLFxuICAgIGxpc3RDYWNoZUdldCA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZUdldCcpLFxuICAgIGxpc3RDYWNoZUhhcyA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZUhhcycpLFxuICAgIGxpc3RDYWNoZVNldCA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZVNldCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gbGlzdCBjYWNoZSBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIExpc3RDYWNoZShlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBMaXN0Q2FjaGVgLlxuTGlzdENhY2hlLnByb3RvdHlwZS5jbGVhciA9IGxpc3RDYWNoZUNsZWFyO1xuTGlzdENhY2hlLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBsaXN0Q2FjaGVEZWxldGU7XG5MaXN0Q2FjaGUucHJvdG90eXBlLmdldCA9IGxpc3RDYWNoZUdldDtcbkxpc3RDYWNoZS5wcm90b3R5cGUuaGFzID0gbGlzdENhY2hlSGFzO1xuTGlzdENhY2hlLnByb3RvdHlwZS5zZXQgPSBsaXN0Q2FjaGVTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gTGlzdENhY2hlO1xuIiwKICAgICJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIE1hcCA9IGdldE5hdGl2ZShyb290LCAnTWFwJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gTWFwO1xuIiwKICAgICJ2YXIgSGFzaCA9IHJlcXVpcmUoJy4vX0hhc2gnKSxcbiAgICBMaXN0Q2FjaGUgPSByZXF1aXJlKCcuL19MaXN0Q2FjaGUnKSxcbiAgICBNYXAgPSByZXF1aXJlKCcuL19NYXAnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVDbGVhcigpIHtcbiAgdGhpcy5zaXplID0gMDtcbiAgdGhpcy5fX2RhdGFfXyA9IHtcbiAgICAnaGFzaCc6IG5ldyBIYXNoLFxuICAgICdtYXAnOiBuZXcgKE1hcCB8fCBMaXN0Q2FjaGUpLFxuICAgICdzdHJpbmcnOiBuZXcgSGFzaFxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlQ2xlYXI7XG4iLAogICAgIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUgZm9yIHVzZSBhcyB1bmlxdWUgb2JqZWN0IGtleS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0tleWFibGUodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiAodHlwZSA9PSAnc3RyaW5nJyB8fCB0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicpXG4gICAgPyAodmFsdWUgIT09ICdfX3Byb3RvX18nKVxuICAgIDogKHZhbHVlID09PSBudWxsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0tleWFibGU7XG4iLAogICAgInZhciBpc0tleWFibGUgPSByZXF1aXJlKCcuL19pc0tleWFibGUnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBkYXRhIGZvciBgbWFwYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG1hcCBUaGUgbWFwIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUgcmVmZXJlbmNlIGtleS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtYXAgZGF0YS5cbiAqL1xuZnVuY3Rpb24gZ2V0TWFwRGF0YShtYXAsIGtleSkge1xuICB2YXIgZGF0YSA9IG1hcC5fX2RhdGFfXztcbiAgcmV0dXJuIGlzS2V5YWJsZShrZXkpXG4gICAgPyBkYXRhW3R5cGVvZiBrZXkgPT0gJ3N0cmluZycgPyAnc3RyaW5nJyA6ICdoYXNoJ11cbiAgICA6IGRhdGEubWFwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldE1hcERhdGE7XG4iLAogICAgInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSlbJ2RlbGV0ZSddKGtleSk7XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZURlbGV0ZTtcbiIsCiAgICAidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgbWFwIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUdldChrZXkpIHtcbiAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KS5nZXQoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZUdldDtcbiIsCiAgICAidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgbWFwIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVIYXMoa2V5KSB7XG4gIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleSkuaGFzKGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVIYXM7XG4iLAogICAgInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIFNldHMgdGhlIG1hcCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBtYXAgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSksXG4gICAgICBzaXplID0gZGF0YS5zaXplO1xuXG4gIGRhdGEuc2V0KGtleSwgdmFsdWUpO1xuICB0aGlzLnNpemUgKz0gZGF0YS5zaXplID09IHNpemUgPyAwIDogMTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVTZXQ7XG4iLAogICAgInZhciBtYXBDYWNoZUNsZWFyID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVDbGVhcicpLFxuICAgIG1hcENhY2hlRGVsZXRlID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVEZWxldGUnKSxcbiAgICBtYXBDYWNoZUdldCA9IHJlcXVpcmUoJy4vX21hcENhY2hlR2V0JyksXG4gICAgbWFwQ2FjaGVIYXMgPSByZXF1aXJlKCcuL19tYXBDYWNoZUhhcycpLFxuICAgIG1hcENhY2hlU2V0ID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbWFwIGNhY2hlIG9iamVjdCB0byBzdG9yZSBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIE1hcENhY2hlKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYE1hcENhY2hlYC5cbk1hcENhY2hlLnByb3RvdHlwZS5jbGVhciA9IG1hcENhY2hlQ2xlYXI7XG5NYXBDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gbWFwQ2FjaGVEZWxldGU7XG5NYXBDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbWFwQ2FjaGVHZXQ7XG5NYXBDYWNoZS5wcm90b3R5cGUuaGFzID0gbWFwQ2FjaGVIYXM7XG5NYXBDYWNoZS5wcm90b3R5cGUuc2V0ID0gbWFwQ2FjaGVTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gTWFwQ2FjaGU7XG4iLAogICAgIi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuLyoqXG4gKiBBZGRzIGB2YWx1ZWAgdG8gdGhlIGFycmF5IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBhZGRcbiAqIEBtZW1iZXJPZiBTZXRDYWNoZVxuICogQGFsaWFzIHB1c2hcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNhY2hlLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIHNldENhY2hlQWRkKHZhbHVlKSB7XG4gIHRoaXMuX19kYXRhX18uc2V0KHZhbHVlLCBIQVNIX1VOREVGSU5FRCk7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldENhY2hlQWRkO1xuIiwKICAgICIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGluIHRoZSBhcnJheSBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgU2V0Q2FjaGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHNldENhY2hlSGFzKHZhbHVlKSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmhhcyh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0Q2FjaGVIYXM7XG4iLAogICAgInZhciBNYXBDYWNoZSA9IHJlcXVpcmUoJy4vX01hcENhY2hlJyksXG4gICAgc2V0Q2FjaGVBZGQgPSByZXF1aXJlKCcuL19zZXRDYWNoZUFkZCcpLFxuICAgIHNldENhY2hlSGFzID0gcmVxdWlyZSgnLi9fc2V0Q2FjaGVIYXMnKTtcblxuLyoqXG4gKlxuICogQ3JlYXRlcyBhbiBhcnJheSBjYWNoZSBvYmplY3QgdG8gc3RvcmUgdW5pcXVlIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbdmFsdWVzXSBUaGUgdmFsdWVzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBTZXRDYWNoZSh2YWx1ZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSB2YWx1ZXMgPT0gbnVsbCA/IDAgOiB2YWx1ZXMubGVuZ3RoO1xuXG4gIHRoaXMuX19kYXRhX18gPSBuZXcgTWFwQ2FjaGU7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdGhpcy5hZGQodmFsdWVzW2luZGV4XSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYFNldENhY2hlYC5cblNldENhY2hlLnByb3RvdHlwZS5hZGQgPSBTZXRDYWNoZS5wcm90b3R5cGUucHVzaCA9IHNldENhY2hlQWRkO1xuU2V0Q2FjaGUucHJvdG90eXBlLmhhcyA9IHNldENhY2hlSGFzO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNldENhY2hlO1xuIiwKICAgICIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZpbmRJbmRleGAgYW5kIGBfLmZpbmRMYXN0SW5kZXhgIHdpdGhvdXRcbiAqIHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0ge251bWJlcn0gZnJvbUluZGV4IFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUZpbmRJbmRleChhcnJheSwgcHJlZGljYXRlLCBmcm9tSW5kZXgsIGZyb21SaWdodCkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgaW5kZXggPSBmcm9tSW5kZXggKyAoZnJvbVJpZ2h0ID8gMSA6IC0xKTtcblxuICB3aGlsZSAoKGZyb21SaWdodCA/IGluZGV4LS0gOiArK2luZGV4IDwgbGVuZ3RoKSkge1xuICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlRmluZEluZGV4O1xuIiwKICAgICIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTmFOYCB3aXRob3V0IHN1cHBvcnQgZm9yIG51bWJlciBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGBOYU5gLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc05hTih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IHZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc05hTjtcbiIsCiAgICAiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uaW5kZXhPZmAgd2hpY2ggcGVyZm9ybXMgc3RyaWN0IGVxdWFsaXR5XG4gKiBjb21wYXJpc29ucyBvZiB2YWx1ZXMsIGkuZS4gYD09PWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gc3RyaWN0SW5kZXhPZihhcnJheSwgdmFsdWUsIGZyb21JbmRleCkge1xuICB2YXIgaW5kZXggPSBmcm9tSW5kZXggLSAxLFxuICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKGFycmF5W2luZGV4XSA9PT0gdmFsdWUpIHtcbiAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0cmljdEluZGV4T2Y7XG4iLAogICAgInZhciBiYXNlRmluZEluZGV4ID0gcmVxdWlyZSgnLi9fYmFzZUZpbmRJbmRleCcpLFxuICAgIGJhc2VJc05hTiA9IHJlcXVpcmUoJy4vX2Jhc2VJc05hTicpLFxuICAgIHN0cmljdEluZGV4T2YgPSByZXF1aXJlKCcuL19zdHJpY3RJbmRleE9mJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaW5kZXhPZmAgd2l0aG91dCBgZnJvbUluZGV4YCBib3VuZHMgY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcGFyYW0ge251bWJlcn0gZnJvbUluZGV4IFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJbmRleE9mKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4KSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gdmFsdWVcbiAgICA/IHN0cmljdEluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpXG4gICAgOiBiYXNlRmluZEluZGV4KGFycmF5LCBiYXNlSXNOYU4sIGZyb21JbmRleCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUluZGV4T2Y7XG4iLAogICAgInZhciBiYXNlSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Jhc2VJbmRleE9mJyk7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmluY2x1ZGVzYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAqIHNwZWNpZnlpbmcgYW4gaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IHRhcmdldCBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdGFyZ2V0YCBpcyBmb3VuZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBhcnJheUluY2x1ZGVzKGFycmF5LCB2YWx1ZSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gIHJldHVybiAhIWxlbmd0aCAmJiBiYXNlSW5kZXhPZihhcnJheSwgdmFsdWUsIDApID4gLTE7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlJbmNsdWRlcztcbiIsCiAgICAiLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2UgYGFycmF5SW5jbHVkZXNgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYSBjb21wYXJhdG9yLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSB0YXJnZXQgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjb21wYXJhdG9yIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHRhcmdldGAgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlJbmNsdWRlc1dpdGgoYXJyYXksIHZhbHVlLCBjb21wYXJhdG9yKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBpZiAoY29tcGFyYXRvcih2YWx1ZSwgYXJyYXlbaW5kZXhdKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUluY2x1ZGVzV2l0aDtcbiIsCiAgICAiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubWFwYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWVcbiAqIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5TWFwKGFycmF5LCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheU1hcDtcbiIsCiAgICAiLyoqXG4gKiBDaGVja3MgaWYgYSBgY2FjaGVgIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBjYWNoZSBUaGUgY2FjaGUgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gY2FjaGVIYXMoY2FjaGUsIGtleSkge1xuICByZXR1cm4gY2FjaGUuaGFzKGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2FjaGVIYXM7XG4iLAogICAgInZhciBTZXRDYWNoZSA9IHJlcXVpcmUoJy4vX1NldENhY2hlJyksXG4gICAgYXJyYXlJbmNsdWRlcyA9IHJlcXVpcmUoJy4vX2FycmF5SW5jbHVkZXMnKSxcbiAgICBhcnJheUluY2x1ZGVzV2l0aCA9IHJlcXVpcmUoJy4vX2FycmF5SW5jbHVkZXNXaXRoJyksXG4gICAgYXJyYXlNYXAgPSByZXF1aXJlKCcuL19hcnJheU1hcCcpLFxuICAgIGJhc2VVbmFyeSA9IHJlcXVpcmUoJy4vX2Jhc2VVbmFyeScpLFxuICAgIGNhY2hlSGFzID0gcmVxdWlyZSgnLi9fY2FjaGVIYXMnKTtcblxuLyoqIFVzZWQgYXMgdGhlIHNpemUgdG8gZW5hYmxlIGxhcmdlIGFycmF5IG9wdGltaXphdGlvbnMuICovXG52YXIgTEFSR0VfQVJSQVlfU0laRSA9IDIwMDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBtZXRob2RzIGxpa2UgYF8uZGlmZmVyZW5jZWAgd2l0aG91dCBzdXBwb3J0XG4gKiBmb3IgZXhjbHVkaW5nIG11bHRpcGxlIGFycmF5cyBvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIGV4Y2x1ZGUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWVdIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmF0b3JdIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBmaWx0ZXJlZCB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VEaWZmZXJlbmNlKGFycmF5LCB2YWx1ZXMsIGl0ZXJhdGVlLCBjb21wYXJhdG9yKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgaW5jbHVkZXMgPSBhcnJheUluY2x1ZGVzLFxuICAgICAgaXNDb21tb24gPSB0cnVlLFxuICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gW10sXG4gICAgICB2YWx1ZXNMZW5ndGggPSB2YWx1ZXMubGVuZ3RoO1xuXG4gIGlmICghbGVuZ3RoKSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBpZiAoaXRlcmF0ZWUpIHtcbiAgICB2YWx1ZXMgPSBhcnJheU1hcCh2YWx1ZXMsIGJhc2VVbmFyeShpdGVyYXRlZSkpO1xuICB9XG4gIGlmIChjb21wYXJhdG9yKSB7XG4gICAgaW5jbHVkZXMgPSBhcnJheUluY2x1ZGVzV2l0aDtcbiAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICB9XG4gIGVsc2UgaWYgKHZhbHVlcy5sZW5ndGggPj0gTEFSR0VfQVJSQVlfU0laRSkge1xuICAgIGluY2x1ZGVzID0gY2FjaGVIYXM7XG4gICAgaXNDb21tb24gPSBmYWxzZTtcbiAgICB2YWx1ZXMgPSBuZXcgU2V0Q2FjaGUodmFsdWVzKTtcbiAgfVxuICBvdXRlcjpcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF0sXG4gICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUgPT0gbnVsbCA/IHZhbHVlIDogaXRlcmF0ZWUodmFsdWUpO1xuXG4gICAgdmFsdWUgPSAoY29tcGFyYXRvciB8fCB2YWx1ZSAhPT0gMCkgPyB2YWx1ZSA6IDA7XG4gICAgaWYgKGlzQ29tbW9uICYmIGNvbXB1dGVkID09PSBjb21wdXRlZCkge1xuICAgICAgdmFyIHZhbHVlc0luZGV4ID0gdmFsdWVzTGVuZ3RoO1xuICAgICAgd2hpbGUgKHZhbHVlc0luZGV4LS0pIHtcbiAgICAgICAgaWYgKHZhbHVlc1t2YWx1ZXNJbmRleF0gPT09IGNvbXB1dGVkKSB7XG4gICAgICAgICAgY29udGludWUgb3V0ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIWluY2x1ZGVzKHZhbHVlcywgY29tcHV0ZWQsIGNvbXBhcmF0b3IpKSB7XG4gICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZURpZmZlcmVuY2U7XG4iLAogICAgInZhciBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uaXNBcnJheUxpa2VgIGV4Y2VwdCB0aGF0IGl0IGFsc28gY2hlY2tzIGlmIGB2YWx1ZWBcbiAqIGlzIGFuIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheS1saWtlIG9iamVjdCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlT2JqZWN0KGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXlMaWtlT2JqZWN0KF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5TGlrZU9iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBpc0FycmF5TGlrZSh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcnJheUxpa2VPYmplY3Q7XG4iLAogICAgInZhciBiYXNlRGlmZmVyZW5jZSA9IHJlcXVpcmUoJy4vX2Jhc2VEaWZmZXJlbmNlJyksXG4gICAgYmFzZUZsYXR0ZW4gPSByZXF1aXJlKCcuL19iYXNlRmxhdHRlbicpLFxuICAgIGJhc2VSZXN0ID0gcmVxdWlyZSgnLi9fYmFzZVJlc3QnKSxcbiAgICBpc0FycmF5TGlrZU9iamVjdCA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2VPYmplY3QnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIGBhcnJheWAgdmFsdWVzIG5vdCBpbmNsdWRlZCBpbiB0aGUgb3RoZXIgZ2l2ZW4gYXJyYXlzXG4gKiB1c2luZyBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLiBUaGUgb3JkZXIgYW5kIHJlZmVyZW5jZXMgb2YgcmVzdWx0IHZhbHVlcyBhcmVcbiAqIGRldGVybWluZWQgYnkgdGhlIGZpcnN0IGFycmF5LlxuICpcbiAqICoqTm90ZToqKiBVbmxpa2UgYF8ucHVsbEFsbGAsIHRoaXMgbWV0aG9kIHJldHVybnMgYSBuZXcgYXJyYXkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Li4uQXJyYXl9IFt2YWx1ZXNdIFRoZSB2YWx1ZXMgdG8gZXhjbHVkZS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGZpbHRlcmVkIHZhbHVlcy5cbiAqIEBzZWUgXy53aXRob3V0LCBfLnhvclxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmRpZmZlcmVuY2UoWzIsIDFdLCBbMiwgM10pO1xuICogLy8gPT4gWzFdXG4gKi9cbnZhciBkaWZmZXJlbmNlID0gYmFzZVJlc3QoZnVuY3Rpb24oYXJyYXksIHZhbHVlcykge1xuICByZXR1cm4gaXNBcnJheUxpa2VPYmplY3QoYXJyYXkpXG4gICAgPyBiYXNlRGlmZmVyZW5jZShhcnJheSwgYmFzZUZsYXR0ZW4odmFsdWVzLCAxLCBpc0FycmF5TGlrZU9iamVjdCwgdHJ1ZSkpXG4gICAgOiBbXTtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRpZmZlcmVuY2U7XG4iLAogICAgInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgU2V0ID0gZ2V0TmF0aXZlKHJvb3QsICdTZXQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTZXQ7XG4iLAogICAgIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyBgdW5kZWZpbmVkYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDIuMy4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRpbWVzKDIsIF8ubm9vcCk7XG4gKiAvLyA9PiBbdW5kZWZpbmVkLCB1bmRlZmluZWRdXG4gKi9cbmZ1bmN0aW9uIG5vb3AoKSB7XG4gIC8vIE5vIG9wZXJhdGlvbiBwZXJmb3JtZWQuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbm9vcDtcbiIsCiAgICAiLyoqXG4gKiBDb252ZXJ0cyBgc2V0YCB0byBhbiBhcnJheSBvZiBpdHMgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc2V0IFRoZSBzZXQgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBzZXRUb0FycmF5KHNldCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KHNldC5zaXplKTtcblxuICBzZXQuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJlc3VsdFsrK2luZGV4XSA9IHZhbHVlO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXRUb0FycmF5O1xuIiwKICAgICJ2YXIgU2V0ID0gcmVxdWlyZSgnLi9fU2V0JyksXG4gICAgbm9vcCA9IHJlcXVpcmUoJy4vbm9vcCcpLFxuICAgIHNldFRvQXJyYXkgPSByZXF1aXJlKCcuL19zZXRUb0FycmF5Jyk7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIElORklOSVRZID0gMSAvIDA7XG5cbi8qKlxuICogQ3JlYXRlcyBhIHNldCBvYmplY3Qgb2YgYHZhbHVlc2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIGFkZCB0byB0aGUgc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IHNldC5cbiAqL1xudmFyIGNyZWF0ZVNldCA9ICEoU2V0ICYmICgxIC8gc2V0VG9BcnJheShuZXcgU2V0KFssLTBdKSlbMV0pID09IElORklOSVRZKSA/IG5vb3AgOiBmdW5jdGlvbih2YWx1ZXMpIHtcbiAgcmV0dXJuIG5ldyBTZXQodmFsdWVzKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlU2V0O1xuIiwKICAgICJ2YXIgU2V0Q2FjaGUgPSByZXF1aXJlKCcuL19TZXRDYWNoZScpLFxuICAgIGFycmF5SW5jbHVkZXMgPSByZXF1aXJlKCcuL19hcnJheUluY2x1ZGVzJyksXG4gICAgYXJyYXlJbmNsdWRlc1dpdGggPSByZXF1aXJlKCcuL19hcnJheUluY2x1ZGVzV2l0aCcpLFxuICAgIGNhY2hlSGFzID0gcmVxdWlyZSgnLi9fY2FjaGVIYXMnKSxcbiAgICBjcmVhdGVTZXQgPSByZXF1aXJlKCcuL19jcmVhdGVTZXQnKSxcbiAgICBzZXRUb0FycmF5ID0gcmVxdWlyZSgnLi9fc2V0VG9BcnJheScpO1xuXG4vKiogVXNlZCBhcyB0aGUgc2l6ZSB0byBlbmFibGUgbGFyZ2UgYXJyYXkgb3B0aW1pemF0aW9ucy4gKi9cbnZhciBMQVJHRV9BUlJBWV9TSVpFID0gMjAwO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVuaXFCeWAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY29tcGFyYXRvcl0gVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGR1cGxpY2F0ZSBmcmVlIGFycmF5LlxuICovXG5mdW5jdGlvbiBiYXNlVW5pcShhcnJheSwgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBpbmNsdWRlcyA9IGFycmF5SW5jbHVkZXMsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICBpc0NvbW1vbiA9IHRydWUsXG4gICAgICByZXN1bHQgPSBbXSxcbiAgICAgIHNlZW4gPSByZXN1bHQ7XG5cbiAgaWYgKGNvbXBhcmF0b3IpIHtcbiAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICAgIGluY2x1ZGVzID0gYXJyYXlJbmNsdWRlc1dpdGg7XG4gIH1cbiAgZWxzZSBpZiAobGVuZ3RoID49IExBUkdFX0FSUkFZX1NJWkUpIHtcbiAgICB2YXIgc2V0ID0gaXRlcmF0ZWUgPyBudWxsIDogY3JlYXRlU2V0KGFycmF5KTtcbiAgICBpZiAoc2V0KSB7XG4gICAgICByZXR1cm4gc2V0VG9BcnJheShzZXQpO1xuICAgIH1cbiAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICAgIGluY2x1ZGVzID0gY2FjaGVIYXM7XG4gICAgc2VlbiA9IG5ldyBTZXRDYWNoZTtcbiAgfVxuICBlbHNlIHtcbiAgICBzZWVuID0gaXRlcmF0ZWUgPyBbXSA6IHJlc3VsdDtcbiAgfVxuICBvdXRlcjpcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF0sXG4gICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUgPyBpdGVyYXRlZSh2YWx1ZSkgOiB2YWx1ZTtcblxuICAgIHZhbHVlID0gKGNvbXBhcmF0b3IgfHwgdmFsdWUgIT09IDApID8gdmFsdWUgOiAwO1xuICAgIGlmIChpc0NvbW1vbiAmJiBjb21wdXRlZCA9PT0gY29tcHV0ZWQpIHtcbiAgICAgIHZhciBzZWVuSW5kZXggPSBzZWVuLmxlbmd0aDtcbiAgICAgIHdoaWxlIChzZWVuSW5kZXgtLSkge1xuICAgICAgICBpZiAoc2VlbltzZWVuSW5kZXhdID09PSBjb21wdXRlZCkge1xuICAgICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaXRlcmF0ZWUpIHtcbiAgICAgICAgc2Vlbi5wdXNoKGNvbXB1dGVkKTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIWluY2x1ZGVzKHNlZW4sIGNvbXB1dGVkLCBjb21wYXJhdG9yKSkge1xuICAgICAgaWYgKHNlZW4gIT09IHJlc3VsdCkge1xuICAgICAgICBzZWVuLnB1c2goY29tcHV0ZWQpO1xuICAgICAgfVxuICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VVbmlxO1xuIiwKICAgICJ2YXIgYmFzZUZsYXR0ZW4gPSByZXF1aXJlKCcuL19iYXNlRmxhdHRlbicpLFxuICAgIGJhc2VSZXN0ID0gcmVxdWlyZSgnLi9fYmFzZVJlc3QnKSxcbiAgICBiYXNlVW5pcSA9IHJlcXVpcmUoJy4vX2Jhc2VVbmlxJyksXG4gICAgaXNBcnJheUxpa2VPYmplY3QgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlT2JqZWN0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB1bmlxdWUgdmFsdWVzLCBpbiBvcmRlciwgZnJvbSBhbGwgZ2l2ZW4gYXJyYXlzIHVzaW5nXG4gKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHsuLi5BcnJheX0gW2FycmF5c10gVGhlIGFycmF5cyB0byBpbnNwZWN0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgY29tYmluZWQgdmFsdWVzLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnVuaW9uKFsyXSwgWzEsIDJdKTtcbiAqIC8vID0+IFsyLCAxXVxuICovXG52YXIgdW5pb24gPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheXMpIHtcbiAgcmV0dXJuIGJhc2VVbmlxKGJhc2VGbGF0dGVuKGFycmF5cywgMSwgaXNBcnJheUxpa2VPYmplY3QsIHRydWUpKTtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVuaW9uO1xuIiwKICAgICIvKipcbiAqIENyZWF0ZXMgYSB1bmFyeSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggaXRzIGFyZ3VtZW50IHRyYW5zZm9ybWVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNmb3JtIFRoZSBhcmd1bWVudCB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlckFyZyhmdW5jLCB0cmFuc2Zvcm0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiBmdW5jKHRyYW5zZm9ybShhcmcpKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvdmVyQXJnO1xuIiwKICAgICJ2YXIgb3ZlckFyZyA9IHJlcXVpcmUoJy4vX292ZXJBcmcnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgZ2V0UHJvdG90eXBlID0gb3ZlckFyZyhPYmplY3QuZ2V0UHJvdG90eXBlT2YsIE9iamVjdCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0UHJvdG90eXBlO1xuIiwKICAgICJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBnZXRQcm90b3R5cGUgPSByZXF1aXJlKCcuL19nZXRQcm90b3R5cGUnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XSc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGUsXG4gICAgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKiogVXNlZCB0byBpbmZlciB0aGUgYE9iamVjdGAgY29uc3RydWN0b3IuICovXG52YXIgb2JqZWN0Q3RvclN0cmluZyA9IGZ1bmNUb1N0cmluZy5jYWxsKE9iamVjdCk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIHRoYXQgaXMsIGFuIG9iamVjdCBjcmVhdGVkIGJ5IHRoZVxuICogYE9iamVjdGAgY29uc3RydWN0b3Igb3Igb25lIHdpdGggYSBgW1tQcm90b3R5cGVdXWAgb2YgYG51bGxgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC44LjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcGxhaW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqIH1cbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QobmV3IEZvbyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoeyAneCc6IDAsICd5JzogMCB9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoT2JqZWN0LmNyZWF0ZShudWxsKSk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdExpa2UodmFsdWUpIHx8IGJhc2VHZXRUYWcodmFsdWUpICE9IG9iamVjdFRhZykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgcHJvdG8gPSBnZXRQcm90b3R5cGUodmFsdWUpO1xuICBpZiAocHJvdG8gPT09IG51bGwpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICB2YXIgQ3RvciA9IGhhc093blByb3BlcnR5LmNhbGwocHJvdG8sICdjb25zdHJ1Y3RvcicpICYmIHByb3RvLmNvbnN0cnVjdG9yO1xuICByZXR1cm4gdHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yIGluc3RhbmNlb2YgQ3RvciAmJlxuICAgIGZ1bmNUb1N0cmluZy5jYWxsKEN0b3IpID09IG9iamVjdEN0b3JTdHJpbmc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNQbGFpbk9iamVjdDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmFzc2VydFZhbGlkUGF0dGVybiA9IHZvaWQgMDtcbmNvbnN0IE1BWF9QQVRURVJOX0xFTkdUSCA9IDEwMjQgKiA2NDtcbmNvbnN0IGFzc2VydFZhbGlkUGF0dGVybiA9IChwYXR0ZXJuKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBwYXR0ZXJuICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnZhbGlkIHBhdHRlcm4nKTtcbiAgICB9XG4gICAgaWYgKHBhdHRlcm4ubGVuZ3RoID4gTUFYX1BBVFRFUk5fTEVOR1RIKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3BhdHRlcm4gaXMgdG9vIGxvbmcnKTtcbiAgICB9XG59O1xuZXhwb3J0cy5hc3NlcnRWYWxpZFBhdHRlcm4gPSBhc3NlcnRWYWxpZFBhdHRlcm47XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hc3NlcnQtdmFsaWQtcGF0dGVybi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gdHJhbnNsYXRlIHRoZSB2YXJpb3VzIHBvc2l4IGNoYXJhY3RlciBjbGFzc2VzIGludG8gdW5pY29kZSBwcm9wZXJ0aWVzXG4vLyB0aGlzIHdvcmtzIGFjcm9zcyBhbGwgdW5pY29kZSBsb2NhbGVzXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnBhcnNlQ2xhc3MgPSB2b2lkIDA7XG4vLyB7IDxwb3NpeCBjbGFzcz46IFs8dHJhbnNsYXRpb24+LCAvdSBmbGFnIHJlcXVpcmVkLCBuZWdhdGVkXVxuY29uc3QgcG9zaXhDbGFzc2VzID0ge1xuICAgICdbOmFsbnVtOl0nOiBbJ1xcXFxwe0x9XFxcXHB7Tmx9XFxcXHB7TmR9JywgdHJ1ZV0sXG4gICAgJ1s6YWxwaGE6XSc6IFsnXFxcXHB7TH1cXFxccHtObH0nLCB0cnVlXSxcbiAgICAnWzphc2NpaTpdJzogWydcXFxceCcgKyAnMDAtXFxcXHgnICsgJzdmJywgZmFsc2VdLFxuICAgICdbOmJsYW5rOl0nOiBbJ1xcXFxwe1pzfVxcXFx0JywgdHJ1ZV0sXG4gICAgJ1s6Y250cmw6XSc6IFsnXFxcXHB7Q2N9JywgdHJ1ZV0sXG4gICAgJ1s6ZGlnaXQ6XSc6IFsnXFxcXHB7TmR9JywgdHJ1ZV0sXG4gICAgJ1s6Z3JhcGg6XSc6IFsnXFxcXHB7Wn1cXFxccHtDfScsIHRydWUsIHRydWVdLFxuICAgICdbOmxvd2VyOl0nOiBbJ1xcXFxwe0xsfScsIHRydWVdLFxuICAgICdbOnByaW50Ol0nOiBbJ1xcXFxwe0N9JywgdHJ1ZV0sXG4gICAgJ1s6cHVuY3Q6XSc6IFsnXFxcXHB7UH0nLCB0cnVlXSxcbiAgICAnWzpzcGFjZTpdJzogWydcXFxccHtafVxcXFx0XFxcXHJcXFxcblxcXFx2XFxcXGYnLCB0cnVlXSxcbiAgICAnWzp1cHBlcjpdJzogWydcXFxccHtMdX0nLCB0cnVlXSxcbiAgICAnWzp3b3JkOl0nOiBbJ1xcXFxwe0x9XFxcXHB7Tmx9XFxcXHB7TmR9XFxcXHB7UGN9JywgdHJ1ZV0sXG4gICAgJ1s6eGRpZ2l0Ol0nOiBbJ0EtRmEtZjAtOScsIGZhbHNlXSxcbn07XG4vLyBvbmx5IG5lZWQgdG8gZXNjYXBlIGEgZmV3IHRoaW5ncyBpbnNpZGUgb2YgYnJhY2UgZXhwcmVzc2lvbnNcbi8vIGVzY2FwZXM6IFsgXFwgXSAtXG5jb25zdCBicmFjZUVzY2FwZSA9IChzKSA9PiBzLnJlcGxhY2UoL1tbXFxdXFxcXC1dL2csICdcXFxcJCYnKTtcbi8vIGVzY2FwZSBhbGwgcmVnZXhwIG1hZ2ljIGNoYXJhY3RlcnNcbmNvbnN0IHJlZ2V4cEVzY2FwZSA9IChzKSA9PiBzLnJlcGxhY2UoL1stW1xcXXt9KCkqKz8uLFxcXFxeJHwjXFxzXS9nLCAnXFxcXCQmJyk7XG4vLyBldmVyeXRoaW5nIGhhcyBhbHJlYWR5IGJlZW4gZXNjYXBlZCwgd2UganVzdCBoYXZlIHRvIGpvaW5cbmNvbnN0IHJhbmdlc1RvU3RyaW5nID0gKHJhbmdlcykgPT4gcmFuZ2VzLmpvaW4oJycpO1xuLy8gdGFrZXMgYSBnbG9iIHN0cmluZyBhdCBhIHBvc2l4IGJyYWNlIGV4cHJlc3Npb24sIGFuZCByZXR1cm5zXG4vLyBhbiBlcXVpdmFsZW50IHJlZ3VsYXIgZXhwcmVzc2lvbiBzb3VyY2UsIGFuZCBib29sZWFuIGluZGljYXRpbmdcbi8vIHdoZXRoZXIgdGhlIC91IGZsYWcgbmVlZHMgdG8gYmUgYXBwbGllZCwgYW5kIHRoZSBudW1iZXIgb2YgY2hhcnNcbi8vIGNvbnN1bWVkIHRvIHBhcnNlIHRoZSBjaGFyYWN0ZXIgY2xhc3MuXG4vLyBUaGlzIGFsc28gcmVtb3ZlcyBvdXQgb2Ygb3JkZXIgcmFuZ2VzLCBhbmQgcmV0dXJucyAoJC4pIGlmIHRoZVxuLy8gZW50aXJlIGNsYXNzIGp1c3Qgbm8gZ29vZC5cbmNvbnN0IHBhcnNlQ2xhc3MgPSAoZ2xvYiwgcG9zaXRpb24pID0+IHtcbiAgICBjb25zdCBwb3MgPSBwb3NpdGlvbjtcbiAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICBpZiAoZ2xvYi5jaGFyQXQocG9zKSAhPT0gJ1snKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignbm90IGluIGEgYnJhY2UgZXhwcmVzc2lvbicpO1xuICAgIH1cbiAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgIGNvbnN0IHJhbmdlcyA9IFtdO1xuICAgIGNvbnN0IG5lZ3MgPSBbXTtcbiAgICBsZXQgaSA9IHBvcyArIDE7XG4gICAgbGV0IHNhd1N0YXJ0ID0gZmFsc2U7XG4gICAgbGV0IHVmbGFnID0gZmFsc2U7XG4gICAgbGV0IGVzY2FwaW5nID0gZmFsc2U7XG4gICAgbGV0IG5lZ2F0ZSA9IGZhbHNlO1xuICAgIGxldCBlbmRQb3MgPSBwb3M7XG4gICAgbGV0IHJhbmdlU3RhcnQgPSAnJztcbiAgICBXSElMRTogd2hpbGUgKGkgPCBnbG9iLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBjID0gZ2xvYi5jaGFyQXQoaSk7XG4gICAgICAgIGlmICgoYyA9PT0gJyEnIHx8IGMgPT09ICdeJykgJiYgaSA9PT0gcG9zICsgMSkge1xuICAgICAgICAgICAgbmVnYXRlID0gdHJ1ZTtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjID09PSAnXScgJiYgc2F3U3RhcnQgJiYgIWVzY2FwaW5nKSB7XG4gICAgICAgICAgICBlbmRQb3MgPSBpICsgMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHNhd1N0YXJ0ID0gdHJ1ZTtcbiAgICAgICAgaWYgKGMgPT09ICdcXFxcJykge1xuICAgICAgICAgICAgaWYgKCFlc2NhcGluZykge1xuICAgICAgICAgICAgICAgIGVzY2FwaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBlc2NhcGVkIFxcIGNoYXIsIGZhbGwgdGhyb3VnaCBhbmQgdHJlYXQgbGlrZSBub3JtYWwgY2hhclxuICAgICAgICB9XG4gICAgICAgIGlmIChjID09PSAnWycgJiYgIWVzY2FwaW5nKSB7XG4gICAgICAgICAgICAvLyBlaXRoZXIgYSBwb3NpeCBjbGFzcywgYSBjb2xsYXRpb24gZXF1aXZhbGVudCwgb3IganVzdCBhIFtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2NscywgW3VuaXAsIHUsIG5lZ11dIG9mIE9iamVjdC5lbnRyaWVzKHBvc2l4Q2xhc3NlcykpIHtcbiAgICAgICAgICAgICAgICBpZiAoZ2xvYi5zdGFydHNXaXRoKGNscywgaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaW52YWxpZCwgW2EtW10gaXMgZmluZSwgYnV0IG5vdCBbYS1bOmFscGhhXV1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHJhbmdlU3RhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbJyQuJywgZmFsc2UsIGdsb2IubGVuZ3RoIC0gcG9zLCB0cnVlXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpICs9IGNscy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZWcpXG4gICAgICAgICAgICAgICAgICAgICAgICBuZWdzLnB1c2godW5pcCk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlcy5wdXNoKHVuaXApO1xuICAgICAgICAgICAgICAgICAgICB1ZmxhZyA9IHVmbGFnIHx8IHU7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIFdISUxFO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBub3cgaXQncyBqdXN0IGEgbm9ybWFsIGNoYXJhY3RlciwgZWZmZWN0aXZlbHlcbiAgICAgICAgZXNjYXBpbmcgPSBmYWxzZTtcbiAgICAgICAgaWYgKHJhbmdlU3RhcnQpIHtcbiAgICAgICAgICAgIC8vIHRocm93IHRoaXMgcmFuZ2UgYXdheSBpZiBpdCdzIG5vdCB2YWxpZCwgYnV0IG90aGVyc1xuICAgICAgICAgICAgLy8gY2FuIHN0aWxsIG1hdGNoLlxuICAgICAgICAgICAgaWYgKGMgPiByYW5nZVN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgcmFuZ2VzLnB1c2goYnJhY2VFc2NhcGUocmFuZ2VTdGFydCkgKyAnLScgKyBicmFjZUVzY2FwZShjKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjID09PSByYW5nZVN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgcmFuZ2VzLnB1c2goYnJhY2VFc2NhcGUoYykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmFuZ2VTdGFydCA9ICcnO1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbm93IG1pZ2h0IGJlIHRoZSBzdGFydCBvZiBhIHJhbmdlLlxuICAgICAgICAvLyBjYW4gYmUgZWl0aGVyIGMtZCBvciBjLV0gb3IgYzxtb3JlLi4uPl0gb3IgY10gYXQgdGhpcyBwb2ludFxuICAgICAgICBpZiAoZ2xvYi5zdGFydHNXaXRoKCctXScsIGkgKyAxKSkge1xuICAgICAgICAgICAgcmFuZ2VzLnB1c2goYnJhY2VFc2NhcGUoYyArICctJykpO1xuICAgICAgICAgICAgaSArPSAyO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGdsb2Iuc3RhcnRzV2l0aCgnLScsIGkgKyAxKSkge1xuICAgICAgICAgICAgcmFuZ2VTdGFydCA9IGM7XG4gICAgICAgICAgICBpICs9IDI7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBub3QgdGhlIHN0YXJ0IG9mIGEgcmFuZ2UsIGp1c3QgYSBzaW5nbGUgY2hhcmFjdGVyXG4gICAgICAgIHJhbmdlcy5wdXNoKGJyYWNlRXNjYXBlKGMpKTtcbiAgICAgICAgaSsrO1xuICAgIH1cbiAgICBpZiAoZW5kUG9zIDwgaSkge1xuICAgICAgICAvLyBkaWRuJ3Qgc2VlIHRoZSBlbmQgb2YgdGhlIGNsYXNzLCBub3QgYSB2YWxpZCBjbGFzcyxcbiAgICAgICAgLy8gYnV0IG1pZ2h0IHN0aWxsIGJlIHZhbGlkIGFzIGEgbGl0ZXJhbCBtYXRjaC5cbiAgICAgICAgcmV0dXJuIFsnJywgZmFsc2UsIDAsIGZhbHNlXTtcbiAgICB9XG4gICAgLy8gaWYgd2UgZ290IG5vIHJhbmdlcyBhbmQgbm8gbmVnYXRlcywgdGhlbiB3ZSBoYXZlIGEgcmFuZ2UgdGhhdFxuICAgIC8vIGNhbm5vdCBwb3NzaWJseSBtYXRjaCBhbnl0aGluZywgYW5kIHRoYXQgcG9pc29ucyB0aGUgd2hvbGUgZ2xvYlxuICAgIGlmICghcmFuZ2VzLmxlbmd0aCAmJiAhbmVncy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIFsnJC4nLCBmYWxzZSwgZ2xvYi5sZW5ndGggLSBwb3MsIHRydWVdO1xuICAgIH1cbiAgICAvLyBpZiB3ZSBnb3Qgb25lIHBvc2l0aXZlIHJhbmdlLCBhbmQgaXQncyBhIHNpbmdsZSBjaGFyYWN0ZXIsIHRoZW4gdGhhdCdzXG4gICAgLy8gbm90IGFjdHVhbGx5IGEgbWFnaWMgcGF0dGVybiwgaXQncyBqdXN0IHRoYXQgb25lIGxpdGVyYWwgY2hhcmFjdGVyLlxuICAgIC8vIHdlIHNob3VsZCBub3QgdHJlYXQgdGhhdCBhcyBcIm1hZ2ljXCIsIHdlIHNob3VsZCBqdXN0IHJldHVybiB0aGUgbGl0ZXJhbFxuICAgIC8vIGNoYXJhY3Rlci4gW19dIGlzIGEgcGVyZmVjdGx5IHZhbGlkIHdheSB0byBlc2NhcGUgZ2xvYiBtYWdpYyBjaGFycy5cbiAgICBpZiAobmVncy5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgcmFuZ2VzLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICAvXlxcXFw/LiQvLnRlc3QocmFuZ2VzWzBdKSAmJlxuICAgICAgICAhbmVnYXRlKSB7XG4gICAgICAgIGNvbnN0IHIgPSByYW5nZXNbMF0ubGVuZ3RoID09PSAyID8gcmFuZ2VzWzBdLnNsaWNlKC0xKSA6IHJhbmdlc1swXTtcbiAgICAgICAgcmV0dXJuIFtyZWdleHBFc2NhcGUociksIGZhbHNlLCBlbmRQb3MgLSBwb3MsIGZhbHNlXTtcbiAgICB9XG4gICAgY29uc3Qgc3JhbmdlcyA9ICdbJyArIChuZWdhdGUgPyAnXicgOiAnJykgKyByYW5nZXNUb1N0cmluZyhyYW5nZXMpICsgJ10nO1xuICAgIGNvbnN0IHNuZWdzID0gJ1snICsgKG5lZ2F0ZSA/ICcnIDogJ14nKSArIHJhbmdlc1RvU3RyaW5nKG5lZ3MpICsgJ10nO1xuICAgIGNvbnN0IGNvbWIgPSByYW5nZXMubGVuZ3RoICYmIG5lZ3MubGVuZ3RoXG4gICAgICAgID8gJygnICsgc3JhbmdlcyArICd8JyArIHNuZWdzICsgJyknXG4gICAgICAgIDogcmFuZ2VzLmxlbmd0aFxuICAgICAgICAgICAgPyBzcmFuZ2VzXG4gICAgICAgICAgICA6IHNuZWdzO1xuICAgIHJldHVybiBbY29tYiwgdWZsYWcsIGVuZFBvcyAtIHBvcywgdHJ1ZV07XG59O1xuZXhwb3J0cy5wYXJzZUNsYXNzID0gcGFyc2VDbGFzcztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJyYWNlLWV4cHJlc3Npb25zLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnVuZXNjYXBlID0gdm9pZCAwO1xuLyoqXG4gKiBVbi1lc2NhcGUgYSBzdHJpbmcgdGhhdCBoYXMgYmVlbiBlc2NhcGVkIHdpdGgge0BsaW5rIGVzY2FwZX0uXG4gKlxuICogSWYgdGhlIHtAbGluayB3aW5kb3dzUGF0aHNOb0VzY2FwZX0gb3B0aW9uIGlzIHVzZWQsIHRoZW4gc3F1YXJlLWJyYWNlXG4gKiBlc2NhcGVzIGFyZSByZW1vdmVkLCBidXQgbm90IGJhY2tzbGFzaCBlc2NhcGVzLiAgRm9yIGV4YW1wbGUsIGl0IHdpbGwgdHVyblxuICogdGhlIHN0cmluZyBgJ1sqXSdgIGludG8gYCpgLCBidXQgaXQgd2lsbCBub3QgdHVybiBgJ1xcXFwqJ2AgaW50byBgJyonYCxcbiAqIGJlY3Vhc2UgYFxcYCBpcyBhIHBhdGggc2VwYXJhdG9yIGluIGB3aW5kb3dzUGF0aHNOb0VzY2FwZWAgbW9kZS5cbiAqXG4gKiBXaGVuIGB3aW5kb3dzUGF0aHNOb0VzY2FwZWAgaXMgbm90IHNldCwgdGhlbiBib3RoIGJyYWNlIGVzY2FwZXMgYW5kXG4gKiBiYWNrc2xhc2ggZXNjYXBlcyBhcmUgcmVtb3ZlZC5cbiAqXG4gKiBTbGFzaGVzIChhbmQgYmFja3NsYXNoZXMgaW4gYHdpbmRvd3NQYXRoc05vRXNjYXBlYCBtb2RlKSBjYW5ub3QgYmUgZXNjYXBlZFxuICogb3IgdW5lc2NhcGVkLlxuICovXG5jb25zdCB1bmVzY2FwZSA9IChzLCB7IHdpbmRvd3NQYXRoc05vRXNjYXBlID0gZmFsc2UsIH0gPSB7fSkgPT4ge1xuICAgIHJldHVybiB3aW5kb3dzUGF0aHNOb0VzY2FwZVxuICAgICAgICA/IHMucmVwbGFjZSgvXFxbKFteXFwvXFxcXF0pXFxdL2csICckMScpXG4gICAgICAgIDogcy5yZXBsYWNlKC8oKD8hXFxcXCkufF4pXFxbKFteXFwvXFxcXF0pXFxdL2csICckMSQyJykucmVwbGFjZSgvXFxcXChbXlxcL10pL2csICckMScpO1xufTtcbmV4cG9ydHMudW5lc2NhcGUgPSB1bmVzY2FwZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVuZXNjYXBlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBwYXJzZSBhIHNpbmdsZSBwYXRoIHBvcnRpb25cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQVNUID0gdm9pZCAwO1xuY29uc3QgYnJhY2VfZXhwcmVzc2lvbnNfanNfMSA9IHJlcXVpcmUoXCIuL2JyYWNlLWV4cHJlc3Npb25zLmpzXCIpO1xuY29uc3QgdW5lc2NhcGVfanNfMSA9IHJlcXVpcmUoXCIuL3VuZXNjYXBlLmpzXCIpO1xuY29uc3QgdHlwZXMgPSBuZXcgU2V0KFsnIScsICc/JywgJysnLCAnKicsICdAJ10pO1xuY29uc3QgaXNFeHRnbG9iVHlwZSA9IChjKSA9PiB0eXBlcy5oYXMoYyk7XG4vLyBQYXR0ZXJucyB0aGF0IGdldCBwcmVwZW5kZWQgdG8gYmluZCB0byB0aGUgc3RhcnQgb2YgZWl0aGVyIHRoZVxuLy8gZW50aXJlIHN0cmluZywgb3IganVzdCBhIHNpbmdsZSBwYXRoIHBvcnRpb24sIHRvIHByZXZlbnQgZG90c1xuLy8gYW5kL29yIHRyYXZlcnNhbCBwYXR0ZXJucywgd2hlbiBuZWVkZWQuXG4vLyBFeHRzIGRvbid0IG5lZWQgdGhlIF4gb3IgLyBiaXQsIGJlY2F1c2UgdGhlIHJvb3QgYmluZHMgdGhhdCBhbHJlYWR5LlxuY29uc3Qgc3RhcnROb1RyYXZlcnNhbCA9ICcoPyEoPzpefC8pXFxcXC5cXFxcLj8oPzokfC8pKSc7XG5jb25zdCBzdGFydE5vRG90ID0gJyg/IVxcXFwuKSc7XG4vLyBjaGFyYWN0ZXJzIHRoYXQgaW5kaWNhdGUgYSBzdGFydCBvZiBwYXR0ZXJuIG5lZWRzIHRoZSBcIm5vIGRvdHNcIiBiaXQsXG4vLyBiZWNhdXNlIGEgZG90ICptaWdodCogYmUgbWF0Y2hlZC4gKCBpcyBub3QgaW4gdGhlIGxpc3QsIGJlY2F1c2UgaW5cbi8vIHRoZSBjYXNlIG9mIGEgY2hpbGQgZXh0Z2xvYiwgaXQgd2lsbCBoYW5kbGUgdGhlIHByZXZlbnRpb24gaXRzZWxmLlxuY29uc3QgYWRkUGF0dGVyblN0YXJ0ID0gbmV3IFNldChbJ1snLCAnLiddKTtcbi8vIGNhc2VzIHdoZXJlIHRyYXZlcnNhbCBpcyBBLU9LLCBubyBkb3QgcHJldmVudGlvbiBuZWVkZWRcbmNvbnN0IGp1c3REb3RzID0gbmV3IFNldChbJy4uJywgJy4nXSk7XG5jb25zdCByZVNwZWNpYWxzID0gbmV3IFNldCgnKCkuKnt9Kz9bXV4kXFxcXCEnKTtcbmNvbnN0IHJlZ0V4cEVzY2FwZSA9IChzKSA9PiBzLnJlcGxhY2UoL1stW1xcXXt9KCkqKz8uLFxcXFxeJHwjXFxzXS9nLCAnXFxcXCQmJyk7XG4vLyBhbnkgc2luZ2xlIHRoaW5nIG90aGVyIHRoYW4gL1xuY29uc3QgcW1hcmsgPSAnW14vXSc7XG4vLyAqID0+IGFueSBudW1iZXIgb2YgY2hhcmFjdGVyc1xuY29uc3Qgc3RhciA9IHFtYXJrICsgJyo/Jztcbi8vIHVzZSArIHdoZW4gd2UgbmVlZCB0byBlbnN1cmUgdGhhdCAqc29tZXRoaW5nKiBtYXRjaGVzLCBiZWNhdXNlIHRoZSAqIGlzXG4vLyB0aGUgb25seSB0aGluZyBpbiB0aGUgcGF0aCBwb3J0aW9uLlxuY29uc3Qgc3Rhck5vRW1wdHkgPSBxbWFyayArICcrPyc7XG4vLyByZW1vdmUgdGhlIFxcIGNoYXJzIHRoYXQgd2UgYWRkZWQgaWYgd2UgZW5kIHVwIGRvaW5nIGEgbm9ubWFnaWMgY29tcGFyZVxuLy8gY29uc3QgZGVzbGFzaCA9IChzOiBzdHJpbmcpID0+IHMucmVwbGFjZSgvXFxcXCguKS9nLCAnJDEnKVxuY2xhc3MgQVNUIHtcbiAgICB0eXBlO1xuICAgICNyb290O1xuICAgICNoYXNNYWdpYztcbiAgICAjdWZsYWcgPSBmYWxzZTtcbiAgICAjcGFydHMgPSBbXTtcbiAgICAjcGFyZW50O1xuICAgICNwYXJlbnRJbmRleDtcbiAgICAjbmVncztcbiAgICAjZmlsbGVkTmVncyA9IGZhbHNlO1xuICAgICNvcHRpb25zO1xuICAgICN0b1N0cmluZztcbiAgICAvLyBzZXQgdG8gdHJ1ZSBpZiBpdCdzIGFuIGV4dGdsb2Igd2l0aCBubyBjaGlsZHJlblxuICAgIC8vICh3aGljaCByZWFsbHkgbWVhbnMgb25lIGNoaWxkIG9mICcnKVxuICAgICNlbXB0eUV4dCA9IGZhbHNlO1xuICAgIGNvbnN0cnVjdG9yKHR5cGUsIHBhcmVudCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgIC8vIGV4dGdsb2JzIGFyZSBpbmhlcmVudGx5IG1hZ2ljYWxcbiAgICAgICAgaWYgKHR5cGUpXG4gICAgICAgICAgICB0aGlzLiNoYXNNYWdpYyA9IHRydWU7XG4gICAgICAgIHRoaXMuI3BhcmVudCA9IHBhcmVudDtcbiAgICAgICAgdGhpcy4jcm9vdCA9IHRoaXMuI3BhcmVudCA/IHRoaXMuI3BhcmVudC4jcm9vdCA6IHRoaXM7XG4gICAgICAgIHRoaXMuI29wdGlvbnMgPSB0aGlzLiNyb290ID09PSB0aGlzID8gb3B0aW9ucyA6IHRoaXMuI3Jvb3QuI29wdGlvbnM7XG4gICAgICAgIHRoaXMuI25lZ3MgPSB0aGlzLiNyb290ID09PSB0aGlzID8gW10gOiB0aGlzLiNyb290LiNuZWdzO1xuICAgICAgICBpZiAodHlwZSA9PT0gJyEnICYmICF0aGlzLiNyb290LiNmaWxsZWROZWdzKVxuICAgICAgICAgICAgdGhpcy4jbmVncy5wdXNoKHRoaXMpO1xuICAgICAgICB0aGlzLiNwYXJlbnRJbmRleCA9IHRoaXMuI3BhcmVudCA/IHRoaXMuI3BhcmVudC4jcGFydHMubGVuZ3RoIDogMDtcbiAgICB9XG4gICAgZ2V0IGhhc01hZ2ljKCkge1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgaWYgKHRoaXMuI2hhc01hZ2ljICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy4jaGFzTWFnaWM7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIGZvciAoY29uc3QgcCBvZiB0aGlzLiNwYXJ0cykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBwID09PSAnc3RyaW5nJylcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGlmIChwLnR5cGUgfHwgcC5oYXNNYWdpYylcbiAgICAgICAgICAgICAgICByZXR1cm4gKHRoaXMuI2hhc01hZ2ljID0gdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbm90ZTogd2lsbCBiZSB1bmRlZmluZWQgdW50aWwgd2UgZ2VuZXJhdGUgdGhlIHJlZ2V4cCBzcmMgYW5kIGZpbmQgb3V0XG4gICAgICAgIHJldHVybiB0aGlzLiNoYXNNYWdpYztcbiAgICB9XG4gICAgLy8gcmVjb25zdHJ1Y3RzIHRoZSBwYXR0ZXJuXG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIGlmICh0aGlzLiN0b1N0cmluZyAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuI3RvU3RyaW5nO1xuICAgICAgICBpZiAoIXRoaXMudHlwZSkge1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLiN0b1N0cmluZyA9IHRoaXMuI3BhcnRzLm1hcChwID0+IFN0cmluZyhwKSkuam9pbignJykpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLiN0b1N0cmluZyA9XG4gICAgICAgICAgICAgICAgdGhpcy50eXBlICsgJygnICsgdGhpcy4jcGFydHMubWFwKHAgPT4gU3RyaW5nKHApKS5qb2luKCd8JykgKyAnKScpO1xuICAgICAgICB9XG4gICAgfVxuICAgICNmaWxsTmVncygpIHtcbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIGlmICh0aGlzICE9PSB0aGlzLiNyb290KVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzaG91bGQgb25seSBjYWxsIG9uIHJvb3QnKTtcbiAgICAgICAgaWYgKHRoaXMuI2ZpbGxlZE5lZ3MpXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgLy8gY2FsbCB0b1N0cmluZygpIG9uY2UgdG8gZmlsbCB0aGlzIG91dFxuICAgICAgICB0aGlzLnRvU3RyaW5nKCk7XG4gICAgICAgIHRoaXMuI2ZpbGxlZE5lZ3MgPSB0cnVlO1xuICAgICAgICBsZXQgbjtcbiAgICAgICAgd2hpbGUgKChuID0gdGhpcy4jbmVncy5wb3AoKSkpIHtcbiAgICAgICAgICAgIGlmIChuLnR5cGUgIT09ICchJylcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIC8vIHdhbGsgdXAgdGhlIHRyZWUsIGFwcGVuZGluZyBldmVydGhpbmcgdGhhdCBjb21lcyBBRlRFUiBwYXJlbnRJbmRleFxuICAgICAgICAgICAgbGV0IHAgPSBuO1xuICAgICAgICAgICAgbGV0IHBwID0gcC4jcGFyZW50O1xuICAgICAgICAgICAgd2hpbGUgKHBwKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IHAuI3BhcmVudEluZGV4ICsgMTsgIXBwLnR5cGUgJiYgaSA8IHBwLiNwYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHBhcnQgb2Ygbi4jcGFydHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwYXJ0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc3RyaW5nIHBhcnQgaW4gZXh0Z2xvYiBBU1Q/PycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnQuY29weUluKHBwLiNwYXJ0c1tpXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcCA9IHBwO1xuICAgICAgICAgICAgICAgIHBwID0gcC4jcGFyZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBwdXNoKC4uLnBhcnRzKSB7XG4gICAgICAgIGZvciAoY29uc3QgcCBvZiBwYXJ0cykge1xuICAgICAgICAgICAgaWYgKHAgPT09ICcnKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICBpZiAodHlwZW9mIHAgIT09ICdzdHJpbmcnICYmICEocCBpbnN0YW5jZW9mIEFTVCAmJiBwLiNwYXJlbnQgPT09IHRoaXMpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHBhcnQ6ICcgKyBwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICB0aGlzLiNwYXJ0cy5wdXNoKHApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRvSlNPTigpIHtcbiAgICAgICAgY29uc3QgcmV0ID0gdGhpcy50eXBlID09PSBudWxsXG4gICAgICAgICAgICA/IHRoaXMuI3BhcnRzLnNsaWNlKCkubWFwKHAgPT4gKHR5cGVvZiBwID09PSAnc3RyaW5nJyA/IHAgOiBwLnRvSlNPTigpKSlcbiAgICAgICAgICAgIDogW3RoaXMudHlwZSwgLi4udGhpcy4jcGFydHMubWFwKHAgPT4gcC50b0pTT04oKSldO1xuICAgICAgICBpZiAodGhpcy5pc1N0YXJ0KCkgJiYgIXRoaXMudHlwZSlcbiAgICAgICAgICAgIHJldC51bnNoaWZ0KFtdKTtcbiAgICAgICAgaWYgKHRoaXMuaXNFbmQoKSAmJlxuICAgICAgICAgICAgKHRoaXMgPT09IHRoaXMuI3Jvb3QgfHxcbiAgICAgICAgICAgICAgICAodGhpcy4jcm9vdC4jZmlsbGVkTmVncyAmJiB0aGlzLiNwYXJlbnQ/LnR5cGUgPT09ICchJykpKSB7XG4gICAgICAgICAgICByZXQucHVzaCh7fSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gICAgaXNTdGFydCgpIHtcbiAgICAgICAgaWYgKHRoaXMuI3Jvb3QgPT09IHRoaXMpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgLy8gaWYgKHRoaXMudHlwZSkgcmV0dXJuICEhdGhpcy4jcGFyZW50Py5pc1N0YXJ0KClcbiAgICAgICAgaWYgKCF0aGlzLiNwYXJlbnQ/LmlzU3RhcnQoKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuI3BhcmVudEluZGV4ID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIC8vIGlmIGV2ZXJ5dGhpbmcgQUhFQUQgb2YgdGhpcyBpcyBhIG5lZ2F0aW9uLCB0aGVuIGl0J3Mgc3RpbGwgdGhlIFwic3RhcnRcIlxuICAgICAgICBjb25zdCBwID0gdGhpcy4jcGFyZW50O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuI3BhcmVudEluZGV4OyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHBwID0gcC4jcGFydHNbaV07XG4gICAgICAgICAgICBpZiAoIShwcCBpbnN0YW5jZW9mIEFTVCAmJiBwcC50eXBlID09PSAnIScpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpc0VuZCgpIHtcbiAgICAgICAgaWYgKHRoaXMuI3Jvb3QgPT09IHRoaXMpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMuI3BhcmVudD8udHlwZSA9PT0gJyEnKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmICghdGhpcy4jcGFyZW50Py5pc0VuZCgpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoIXRoaXMudHlwZSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiNwYXJlbnQ/LmlzRW5kKCk7XG4gICAgICAgIC8vIGlmIG5vdCByb290LCBpdCdsbCBhbHdheXMgaGF2ZSBhIHBhcmVudFxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgY29uc3QgcGwgPSB0aGlzLiNwYXJlbnQgPyB0aGlzLiNwYXJlbnQuI3BhcnRzLmxlbmd0aCA6IDA7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIHJldHVybiB0aGlzLiNwYXJlbnRJbmRleCA9PT0gcGwgLSAxO1xuICAgIH1cbiAgICBjb3B5SW4ocGFydCkge1xuICAgICAgICBpZiAodHlwZW9mIHBhcnQgPT09ICdzdHJpbmcnKVxuICAgICAgICAgICAgdGhpcy5wdXNoKHBhcnQpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzLnB1c2gocGFydC5jbG9uZSh0aGlzKSk7XG4gICAgfVxuICAgIGNsb25lKHBhcmVudCkge1xuICAgICAgICBjb25zdCBjID0gbmV3IEFTVCh0aGlzLnR5cGUsIHBhcmVudCk7XG4gICAgICAgIGZvciAoY29uc3QgcCBvZiB0aGlzLiNwYXJ0cykge1xuICAgICAgICAgICAgYy5jb3B5SW4ocCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGM7XG4gICAgfVxuICAgIHN0YXRpYyAjcGFyc2VBU1Qoc3RyLCBhc3QsIHBvcywgb3B0KSB7XG4gICAgICAgIGxldCBlc2NhcGluZyA9IGZhbHNlO1xuICAgICAgICBsZXQgaW5CcmFjZSA9IGZhbHNlO1xuICAgICAgICBsZXQgYnJhY2VTdGFydCA9IC0xO1xuICAgICAgICBsZXQgYnJhY2VOZWcgPSBmYWxzZTtcbiAgICAgICAgaWYgKGFzdC50eXBlID09PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBvdXRzaWRlIG9mIGEgZXh0Z2xvYiwgYXBwZW5kIHVudGlsIHdlIGZpbmQgYSBzdGFydFxuICAgICAgICAgICAgbGV0IGkgPSBwb3M7XG4gICAgICAgICAgICBsZXQgYWNjID0gJyc7XG4gICAgICAgICAgICB3aGlsZSAoaSA8IHN0ci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjID0gc3RyLmNoYXJBdChpKyspO1xuICAgICAgICAgICAgICAgIC8vIHN0aWxsIGFjY3VtdWxhdGUgZXNjYXBlcyBhdCB0aGlzIHBvaW50LCBidXQgd2UgZG8gaWdub3JlXG4gICAgICAgICAgICAgICAgLy8gc3RhcnRzIHRoYXQgYXJlIGVzY2FwZWRcbiAgICAgICAgICAgICAgICBpZiAoZXNjYXBpbmcgfHwgYyA9PT0gJ1xcXFwnKSB7XG4gICAgICAgICAgICAgICAgICAgIGVzY2FwaW5nID0gIWVzY2FwaW5nO1xuICAgICAgICAgICAgICAgICAgICBhY2MgKz0gYztcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpbkJyYWNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpID09PSBicmFjZVN0YXJ0ICsgMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT09ICdeJyB8fCBjID09PSAnIScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmFjZU5lZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYyA9PT0gJ10nICYmICEoaSA9PT0gYnJhY2VTdGFydCArIDIgJiYgYnJhY2VOZWcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbkJyYWNlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYWNjICs9IGM7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjID09PSAnWycpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5CcmFjZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyYWNlU3RhcnQgPSBpO1xuICAgICAgICAgICAgICAgICAgICBicmFjZU5lZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBhY2MgKz0gYztcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghb3B0Lm5vZXh0ICYmIGlzRXh0Z2xvYlR5cGUoYykgJiYgc3RyLmNoYXJBdChpKSA9PT0gJygnKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzdC5wdXNoKGFjYyk7XG4gICAgICAgICAgICAgICAgICAgIGFjYyA9ICcnO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBleHQgPSBuZXcgQVNUKGMsIGFzdCk7XG4gICAgICAgICAgICAgICAgICAgIGkgPSBBU1QuI3BhcnNlQVNUKHN0ciwgZXh0LCBpLCBvcHQpO1xuICAgICAgICAgICAgICAgICAgICBhc3QucHVzaChleHQpO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYWNjICs9IGM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhc3QucHVzaChhY2MpO1xuICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gc29tZSBraW5kIG9mIGV4dGdsb2IsIHBvcyBpcyBhdCB0aGUgKFxuICAgICAgICAvLyBmaW5kIHRoZSBuZXh0IHwgb3IgKVxuICAgICAgICBsZXQgaSA9IHBvcyArIDE7XG4gICAgICAgIGxldCBwYXJ0ID0gbmV3IEFTVChudWxsLCBhc3QpO1xuICAgICAgICBjb25zdCBwYXJ0cyA9IFtdO1xuICAgICAgICBsZXQgYWNjID0gJyc7XG4gICAgICAgIHdoaWxlIChpIDwgc3RyLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgYyA9IHN0ci5jaGFyQXQoaSsrKTtcbiAgICAgICAgICAgIC8vIHN0aWxsIGFjY3VtdWxhdGUgZXNjYXBlcyBhdCB0aGlzIHBvaW50LCBidXQgd2UgZG8gaWdub3JlXG4gICAgICAgICAgICAvLyBzdGFydHMgdGhhdCBhcmUgZXNjYXBlZFxuICAgICAgICAgICAgaWYgKGVzY2FwaW5nIHx8IGMgPT09ICdcXFxcJykge1xuICAgICAgICAgICAgICAgIGVzY2FwaW5nID0gIWVzY2FwaW5nO1xuICAgICAgICAgICAgICAgIGFjYyArPSBjO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGluQnJhY2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoaSA9PT0gYnJhY2VTdGFydCArIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT09ICdeJyB8fCBjID09PSAnIScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyYWNlTmVnID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjID09PSAnXScgJiYgIShpID09PSBicmFjZVN0YXJ0ICsgMiAmJiBicmFjZU5lZykpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5CcmFjZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhY2MgKz0gYztcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGMgPT09ICdbJykge1xuICAgICAgICAgICAgICAgIGluQnJhY2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyYWNlU3RhcnQgPSBpO1xuICAgICAgICAgICAgICAgIGJyYWNlTmVnID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgYWNjICs9IGM7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNFeHRnbG9iVHlwZShjKSAmJiBzdHIuY2hhckF0KGkpID09PSAnKCcpIHtcbiAgICAgICAgICAgICAgICBwYXJ0LnB1c2goYWNjKTtcbiAgICAgICAgICAgICAgICBhY2MgPSAnJztcbiAgICAgICAgICAgICAgICBjb25zdCBleHQgPSBuZXcgQVNUKGMsIHBhcnQpO1xuICAgICAgICAgICAgICAgIHBhcnQucHVzaChleHQpO1xuICAgICAgICAgICAgICAgIGkgPSBBU1QuI3BhcnNlQVNUKHN0ciwgZXh0LCBpLCBvcHQpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGMgPT09ICd8Jykge1xuICAgICAgICAgICAgICAgIHBhcnQucHVzaChhY2MpO1xuICAgICAgICAgICAgICAgIGFjYyA9ICcnO1xuICAgICAgICAgICAgICAgIHBhcnRzLnB1c2gocGFydCk7XG4gICAgICAgICAgICAgICAgcGFydCA9IG5ldyBBU1QobnVsbCwgYXN0KTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjID09PSAnKScpIHtcbiAgICAgICAgICAgICAgICBpZiAoYWNjID09PSAnJyAmJiBhc3QuI3BhcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBhc3QuI2VtcHR5RXh0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcGFydC5wdXNoKGFjYyk7XG4gICAgICAgICAgICAgICAgYWNjID0gJyc7XG4gICAgICAgICAgICAgICAgYXN0LnB1c2goLi4ucGFydHMsIHBhcnQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWNjICs9IGM7XG4gICAgICAgIH1cbiAgICAgICAgLy8gdW5maW5pc2hlZCBleHRnbG9iXG4gICAgICAgIC8vIGlmIHdlIGdvdCBoZXJlLCBpdCB3YXMgYSBtYWxmb3JtZWQgZXh0Z2xvYiEgbm90IGFuIGV4dGdsb2IsIGJ1dFxuICAgICAgICAvLyBtYXliZSBzb21ldGhpbmcgZWxzZSBpbiB0aGVyZS5cbiAgICAgICAgYXN0LnR5cGUgPSBudWxsO1xuICAgICAgICBhc3QuI2hhc01hZ2ljID0gdW5kZWZpbmVkO1xuICAgICAgICBhc3QuI3BhcnRzID0gW3N0ci5zdWJzdHJpbmcocG9zIC0gMSldO1xuICAgICAgICByZXR1cm4gaTtcbiAgICB9XG4gICAgc3RhdGljIGZyb21HbG9iKHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCBhc3QgPSBuZXcgQVNUKG51bGwsIHVuZGVmaW5lZCwgb3B0aW9ucyk7XG4gICAgICAgIEFTVC4jcGFyc2VBU1QocGF0dGVybiwgYXN0LCAwLCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIGFzdDtcbiAgICB9XG4gICAgLy8gcmV0dXJucyB0aGUgcmVndWxhciBleHByZXNzaW9uIGlmIHRoZXJlJ3MgbWFnaWMsIG9yIHRoZSB1bmVzY2FwZWRcbiAgICAvLyBzdHJpbmcgaWYgbm90LlxuICAgIHRvTU1QYXR0ZXJuKCkge1xuICAgICAgICAvLyBzaG91bGQgb25seSBiZSBjYWxsZWQgb24gcm9vdFxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgaWYgKHRoaXMgIT09IHRoaXMuI3Jvb3QpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy4jcm9vdC50b01NUGF0dGVybigpO1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICBjb25zdCBnbG9iID0gdGhpcy50b1N0cmluZygpO1xuICAgICAgICBjb25zdCBbcmUsIGJvZHksIGhhc01hZ2ljLCB1ZmxhZ10gPSB0aGlzLnRvUmVnRXhwU291cmNlKCk7XG4gICAgICAgIC8vIGlmIHdlJ3JlIGluIG5vY2FzZSBtb2RlLCBhbmQgbm90IG5vY2FzZU1hZ2ljT25seSwgdGhlbiB3ZSBkb1xuICAgICAgICAvLyBzdGlsbCBuZWVkIGEgcmVndWxhciBleHByZXNzaW9uIGlmIHdlIGhhdmUgdG8gY2FzZS1pbnNlbnNpdGl2ZWx5XG4gICAgICAgIC8vIG1hdGNoIGNhcGl0YWwvbG93ZXJjYXNlIGNoYXJhY3RlcnMuXG4gICAgICAgIGNvbnN0IGFueU1hZ2ljID0gaGFzTWFnaWMgfHxcbiAgICAgICAgICAgIHRoaXMuI2hhc01hZ2ljIHx8XG4gICAgICAgICAgICAodGhpcy4jb3B0aW9ucy5ub2Nhc2UgJiZcbiAgICAgICAgICAgICAgICAhdGhpcy4jb3B0aW9ucy5ub2Nhc2VNYWdpY09ubHkgJiZcbiAgICAgICAgICAgICAgICBnbG9iLnRvVXBwZXJDYXNlKCkgIT09IGdsb2IudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIGlmICghYW55TWFnaWMpIHtcbiAgICAgICAgICAgIHJldHVybiBib2R5O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZsYWdzID0gKHRoaXMuI29wdGlvbnMubm9jYXNlID8gJ2knIDogJycpICsgKHVmbGFnID8gJ3UnIDogJycpO1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgUmVnRXhwKGBeJHtyZX0kYCwgZmxhZ3MpLCB7XG4gICAgICAgICAgICBfc3JjOiByZSxcbiAgICAgICAgICAgIF9nbG9iOiBnbG9iLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNvcHRpb25zO1xuICAgIH1cbiAgICAvLyByZXR1cm5zIHRoZSBzdHJpbmcgbWF0Y2gsIHRoZSByZWdleHAgc291cmNlLCB3aGV0aGVyIHRoZXJlJ3MgbWFnaWNcbiAgICAvLyBpbiB0aGUgcmVnZXhwIChzbyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBpcyByZXF1aXJlZCkgYW5kIHdoZXRoZXIgb3JcbiAgICAvLyBub3QgdGhlIHVmbGFnIGlzIG5lZWRlZCBmb3IgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiAoZm9yIHBvc2l4IGNsYXNzZXMpXG4gICAgLy8gVE9ETzogaW5zdGVhZCBvZiBpbmplY3RpbmcgdGhlIHN0YXJ0L2VuZCBhdCB0aGlzIHBvaW50LCBqdXN0IHJldHVyblxuICAgIC8vIHRoZSBCT0RZIG9mIHRoZSByZWdleHAsIGFsb25nIHdpdGggdGhlIHN0YXJ0L2VuZCBwb3J0aW9ucyBzdWl0YWJsZVxuICAgIC8vIGZvciBiaW5kaW5nIHRoZSBzdGFydC9lbmQgaW4gZWl0aGVyIGEgam9pbmVkIGZ1bGwtcGF0aCBtYWtlUmUgY29udGV4dFxuICAgIC8vICh3aGVyZSB3ZSBiaW5kIHRvIChefC8pLCBvciBhIHN0YW5kYWxvbmUgbWF0Y2hQYXJ0IGNvbnRleHQgKHdoZXJlXG4gICAgLy8gd2UgYmluZCB0byBeLCBhbmQgbm90IC8pLiAgT3RoZXJ3aXNlIHNsYXNoZXMgZ2V0IGR1cGVkIVxuICAgIC8vXG4gICAgLy8gSW4gcGFydC1tYXRjaGluZyBtb2RlLCB0aGUgc3RhcnQgaXM6XG4gICAgLy8gLSBpZiBub3QgaXNTdGFydDogbm90aGluZ1xuICAgIC8vIC0gaWYgdHJhdmVyc2FsIHBvc3NpYmxlLCBidXQgbm90IGFsbG93ZWQ6IF4oPyFcXC5cXC4/JClcbiAgICAvLyAtIGlmIGRvdHMgYWxsb3dlZCBvciBub3QgcG9zc2libGU6IF5cbiAgICAvLyAtIGlmIGRvdHMgcG9zc2libGUgYW5kIG5vdCBhbGxvd2VkOiBeKD8hXFwuKVxuICAgIC8vIGVuZCBpczpcbiAgICAvLyAtIGlmIG5vdCBpc0VuZCgpOiBub3RoaW5nXG4gICAgLy8gLSBlbHNlOiAkXG4gICAgLy9cbiAgICAvLyBJbiBmdWxsLXBhdGggbWF0Y2hpbmcgbW9kZSwgd2UgcHV0IHRoZSBzbGFzaCBhdCB0aGUgU1RBUlQgb2YgdGhlXG4gICAgLy8gcGF0dGVybiwgc28gc3RhcnQgaXM6XG4gICAgLy8gLSBpZiBmaXJzdCBwYXR0ZXJuOiBzYW1lIGFzIHBhcnQtbWF0Y2hpbmcgbW9kZVxuICAgIC8vIC0gaWYgbm90IGlzU3RhcnQoKTogbm90aGluZ1xuICAgIC8vIC0gaWYgdHJhdmVyc2FsIHBvc3NpYmxlLCBidXQgbm90IGFsbG93ZWQ6IC8oPyFcXC5cXC4/KD86JHwvKSlcbiAgICAvLyAtIGlmIGRvdHMgYWxsb3dlZCBvciBub3QgcG9zc2libGU6IC9cbiAgICAvLyAtIGlmIGRvdHMgcG9zc2libGUgYW5kIG5vdCBhbGxvd2VkOiAvKD8hXFwuKVxuICAgIC8vIGVuZCBpczpcbiAgICAvLyAtIGlmIGxhc3QgcGF0dGVybiwgc2FtZSBhcyBwYXJ0LW1hdGNoaW5nIG1vZGVcbiAgICAvLyAtIGVsc2Ugbm90aGluZ1xuICAgIC8vXG4gICAgLy8gQWx3YXlzIHB1dCB0aGUgKD86JHwvKSBvbiBuZWdhdGVkIHRhaWxzLCB0aG91Z2gsIGJlY2F1c2UgdGhhdCBoYXMgdG8gYmVcbiAgICAvLyB0aGVyZSB0byBiaW5kIHRoZSBlbmQgb2YgdGhlIG5lZ2F0ZWQgcGF0dGVybiBwb3J0aW9uLCBhbmQgaXQncyBlYXNpZXIgdG9cbiAgICAvLyBqdXN0IHN0aWNrIGl0IGluIG5vdyByYXRoZXIgdGhhbiB0cnkgdG8gaW5qZWN0IGl0IGxhdGVyIGluIHRoZSBtaWRkbGUgb2ZcbiAgICAvLyB0aGUgcGF0dGVybi5cbiAgICAvL1xuICAgIC8vIFdlIGNhbiBqdXN0IGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgZW5kLCBhbmQgbGVhdmUgaXQgdXAgdG8gdGhlIGNhbGxlclxuICAgIC8vIHRvIGtub3cgd2hldGhlciBpdCdzIGdvaW5nIHRvIGJlIHVzZWQgam9pbmVkIG9yIGluIHBhcnRzLlxuICAgIC8vIEFuZCwgaWYgdGhlIHN0YXJ0IGlzIGFkanVzdGVkIHNsaWdodGx5LCBjYW4gZG8gdGhlIHNhbWUgdGhlcmU6XG4gICAgLy8gLSBpZiBub3QgaXNTdGFydDogbm90aGluZ1xuICAgIC8vIC0gaWYgdHJhdmVyc2FsIHBvc3NpYmxlLCBidXQgbm90IGFsbG93ZWQ6ICg/Oi98XikoPyFcXC5cXC4/JClcbiAgICAvLyAtIGlmIGRvdHMgYWxsb3dlZCBvciBub3QgcG9zc2libGU6ICg/Oi98XilcbiAgICAvLyAtIGlmIGRvdHMgcG9zc2libGUgYW5kIG5vdCBhbGxvd2VkOiAoPzovfF4pKD8hXFwuKVxuICAgIC8vXG4gICAgLy8gQnV0IGl0J3MgYmV0dGVyIHRvIGhhdmUgYSBzaW1wbGVyIGJpbmRpbmcgd2l0aG91dCBhIGNvbmRpdGlvbmFsLCBmb3JcbiAgICAvLyBwZXJmb3JtYW5jZSwgc28gcHJvYmFibHkgYmV0dGVyIHRvIHJldHVybiBib3RoIHN0YXJ0IG9wdGlvbnMuXG4gICAgLy9cbiAgICAvLyBUaGVuIHRoZSBjYWxsZXIganVzdCBpZ25vcmVzIHRoZSBlbmQgaWYgaXQncyBub3QgdGhlIGZpcnN0IHBhdHRlcm4sXG4gICAgLy8gYW5kIHRoZSBzdGFydCBhbHdheXMgZ2V0cyBhcHBsaWVkLlxuICAgIC8vXG4gICAgLy8gQnV0IHRoYXQncyBhbHdheXMgZ29pbmcgdG8gYmUgJCBpZiBpdCdzIHRoZSBlbmRpbmcgcGF0dGVybiwgb3Igbm90aGluZyxcbiAgICAvLyBzbyB0aGUgY2FsbGVyIGNhbiBqdXN0IGF0dGFjaCAkIGF0IHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4gd2hlbiBidWlsZGluZy5cbiAgICAvL1xuICAgIC8vIFNvIHRoZSB0b2RvIGlzOlxuICAgIC8vIC0gYmV0dGVyIGRldGVjdCB3aGF0IGtpbmQgb2Ygc3RhcnQgaXMgbmVlZGVkXG4gICAgLy8gLSByZXR1cm4gYm90aCBmbGF2b3JzIG9mIHN0YXJ0aW5nIHBhdHRlcm5cbiAgICAvLyAtIGF0dGFjaCAkIGF0IHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4gd2hlbiBjcmVhdGluZyB0aGUgYWN0dWFsIFJlZ0V4cFxuICAgIC8vXG4gICAgLy8gQWgsIGJ1dCB3YWl0LCBubywgdGhhdCBhbGwgb25seSBhcHBsaWVzIHRvIHRoZSByb290IHdoZW4gdGhlIGZpcnN0IHBhdHRlcm5cbiAgICAvLyBpcyBub3QgYW4gZXh0Z2xvYi4gSWYgdGhlIGZpcnN0IHBhdHRlcm4gSVMgYW4gZXh0Z2xvYiwgdGhlbiB3ZSBuZWVkIGFsbFxuICAgIC8vIHRoYXQgZG90IHByZXZlbnRpb24gYml6IHRvIGxpdmUgaW4gdGhlIGV4dGdsb2IgcG9ydGlvbnMsIGJlY2F1c2UgZWdcbiAgICAvLyArKCp8LngqKSBjYW4gbWF0Y2ggLnh5IGJ1dCBub3QgLnl4LlxuICAgIC8vXG4gICAgLy8gU28sIHJldHVybiB0aGUgdHdvIGZsYXZvcnMgaWYgaXQncyAjcm9vdCBhbmQgdGhlIGZpcnN0IGNoaWxkIGlzIG5vdCBhblxuICAgIC8vIEFTVCwgb3RoZXJ3aXNlIGxlYXZlIGl0IHRvIHRoZSBjaGlsZCBBU1QgdG8gaGFuZGxlIGl0LCBhbmQgdGhlcmUsXG4gICAgLy8gdXNlIHRoZSAoPzpefC8pIHN0eWxlIG9mIHN0YXJ0IGJpbmRpbmcuXG4gICAgLy9cbiAgICAvLyBFdmVuIHNpbXBsaWZpZWQgZnVydGhlcjpcbiAgICAvLyAtIFNpbmNlIHRoZSBzdGFydCBmb3IgYSBqb2luIGlzIGVnIC8oPyFcXC4pIGFuZCB0aGUgc3RhcnQgZm9yIGEgcGFydFxuICAgIC8vIGlzIF4oPyFcXC4pLCB3ZSBjYW4ganVzdCBwcmVwZW5kICg/IVxcLikgdG8gdGhlIHBhdHRlcm4gKGVpdGhlciByb290XG4gICAgLy8gb3Igc3RhcnQgb3Igd2hhdGV2ZXIpIGFuZCBwcmVwZW5kIF4gb3IgLyBhdCB0aGUgUmVnZXhwIGNvbnN0cnVjdGlvbi5cbiAgICB0b1JlZ0V4cFNvdXJjZShhbGxvd0RvdCkge1xuICAgICAgICBjb25zdCBkb3QgPSBhbGxvd0RvdCA/PyAhIXRoaXMuI29wdGlvbnMuZG90O1xuICAgICAgICBpZiAodGhpcy4jcm9vdCA9PT0gdGhpcylcbiAgICAgICAgICAgIHRoaXMuI2ZpbGxOZWdzKCk7XG4gICAgICAgIGlmICghdGhpcy50eXBlKSB7XG4gICAgICAgICAgICBjb25zdCBub0VtcHR5ID0gdGhpcy5pc1N0YXJ0KCkgJiYgdGhpcy5pc0VuZCgpO1xuICAgICAgICAgICAgY29uc3Qgc3JjID0gdGhpcy4jcGFydHNcbiAgICAgICAgICAgICAgICAubWFwKHAgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IFtyZSwgXywgaGFzTWFnaWMsIHVmbGFnXSA9IHR5cGVvZiBwID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgICA/IEFTVC4jcGFyc2VHbG9iKHAsIHRoaXMuI2hhc01hZ2ljLCBub0VtcHR5KVxuICAgICAgICAgICAgICAgICAgICA6IHAudG9SZWdFeHBTb3VyY2UoYWxsb3dEb3QpO1xuICAgICAgICAgICAgICAgIHRoaXMuI2hhc01hZ2ljID0gdGhpcy4jaGFzTWFnaWMgfHwgaGFzTWFnaWM7XG4gICAgICAgICAgICAgICAgdGhpcy4jdWZsYWcgPSB0aGlzLiN1ZmxhZyB8fCB1ZmxhZztcbiAgICAgICAgICAgICAgICByZXR1cm4gcmU7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5qb2luKCcnKTtcbiAgICAgICAgICAgIGxldCBzdGFydCA9ICcnO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNTdGFydCgpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLiNwYXJ0c1swXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBpcyB0aGUgc3RyaW5nIHRoYXQgd2lsbCBtYXRjaCB0aGUgc3RhcnQgb2YgdGhlIHBhdHRlcm4sXG4gICAgICAgICAgICAgICAgICAgIC8vIHNvIHdlIG5lZWQgdG8gcHJvdGVjdCBhZ2FpbnN0IGRvdHMgYW5kIHN1Y2guXG4gICAgICAgICAgICAgICAgICAgIC8vICcuJyBhbmQgJy4uJyBjYW5ub3QgbWF0Y2ggdW5sZXNzIHRoZSBwYXR0ZXJuIGlzIHRoYXQgZXhhY3RseSxcbiAgICAgICAgICAgICAgICAgICAgLy8gZXZlbiBpZiBpdCBzdGFydHMgd2l0aCAuIG9yIGRvdDp0cnVlIGlzIHNldC5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZG90VHJhdkFsbG93ZWQgPSB0aGlzLiNwYXJ0cy5sZW5ndGggPT09IDEgJiYganVzdERvdHMuaGFzKHRoaXMuI3BhcnRzWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFkb3RUcmF2QWxsb3dlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXBzID0gYWRkUGF0dGVyblN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgd2UgaGF2ZSBhIHBvc3NpYmlsaXR5IG9mIG1hdGNoaW5nIC4gb3IgLi4sXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmQgcHJldmVudCB0aGF0LlxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmVlZE5vVHJhdiA9IFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZG90cyBhcmUgYWxsb3dlZCwgYW5kIHRoZSBwYXR0ZXJuIHN0YXJ0cyB3aXRoIFsgb3IgLlxuICAgICAgICAgICAgICAgICAgICAgICAgKGRvdCAmJiBhcHMuaGFzKHNyYy5jaGFyQXQoMCkpKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBwYXR0ZXJuIHN0YXJ0cyB3aXRoIFxcLiwgYW5kIHRoZW4gWyBvciAuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNyYy5zdGFydHNXaXRoKCdcXFxcLicpICYmIGFwcy5oYXMoc3JjLmNoYXJBdCgyKSkpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHBhdHRlcm4gc3RhcnRzIHdpdGggXFwuXFwuLCBhbmQgdGhlbiBbIG9yIC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3JjLnN0YXJ0c1dpdGgoJ1xcXFwuXFxcXC4nKSAmJiBhcHMuaGFzKHNyYy5jaGFyQXQoNCkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vIG5lZWQgdG8gcHJldmVudCBkb3RzIGlmIGl0IGNhbid0IG1hdGNoIGEgZG90LCBvciBpZiBhXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzdWItcGF0dGVybiB3aWxsIGJlIHByZXZlbnRpbmcgaXQgYW55d2F5LlxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmVlZE5vRG90ID0gIWRvdCAmJiAhYWxsb3dEb3QgJiYgYXBzLmhhcyhzcmMuY2hhckF0KDApKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gbmVlZE5vVHJhdiA/IHN0YXJ0Tm9UcmF2ZXJzYWwgOiBuZWVkTm9Eb3QgPyBzdGFydE5vRG90IDogJyc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBhcHBlbmQgdGhlIFwiZW5kIG9mIHBhdGggcG9ydGlvblwiIHBhdHRlcm4gdG8gbmVnYXRpb24gdGFpbHNcbiAgICAgICAgICAgIGxldCBlbmQgPSAnJztcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRW5kKCkgJiZcbiAgICAgICAgICAgICAgICB0aGlzLiNyb290LiNmaWxsZWROZWdzICYmXG4gICAgICAgICAgICAgICAgdGhpcy4jcGFyZW50Py50eXBlID09PSAnIScpIHtcbiAgICAgICAgICAgICAgICBlbmQgPSAnKD86JHxcXFxcLyknO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZmluYWwgPSBzdGFydCArIHNyYyArIGVuZDtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgZmluYWwsXG4gICAgICAgICAgICAgICAgKDAsIHVuZXNjYXBlX2pzXzEudW5lc2NhcGUpKHNyYyksXG4gICAgICAgICAgICAgICAgKHRoaXMuI2hhc01hZ2ljID0gISF0aGlzLiNoYXNNYWdpYyksXG4gICAgICAgICAgICAgICAgdGhpcy4jdWZsYWcsXG4gICAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICAgIC8vIFdlIG5lZWQgdG8gY2FsY3VsYXRlIHRoZSBib2R5ICp0d2ljZSogaWYgaXQncyBhIHJlcGVhdCBwYXR0ZXJuXG4gICAgICAgIC8vIGF0IHRoZSBzdGFydCwgb25jZSBpbiBub2RvdCBtb2RlLCB0aGVuIGFnYWluIGluIGRvdCBtb2RlLCBzbyBhXG4gICAgICAgIC8vIHBhdHRlcm4gbGlrZSAqKD8pIGNhbiBtYXRjaCAneC55J1xuICAgICAgICBjb25zdCByZXBlYXRlZCA9IHRoaXMudHlwZSA9PT0gJyonIHx8IHRoaXMudHlwZSA9PT0gJysnO1xuICAgICAgICAvLyBzb21lIGtpbmQgb2YgZXh0Z2xvYlxuICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMudHlwZSA9PT0gJyEnID8gJyg/Oig/ISg/OicgOiAnKD86JztcbiAgICAgICAgbGV0IGJvZHkgPSB0aGlzLiNwYXJ0c1RvUmVnRXhwKGRvdCk7XG4gICAgICAgIGlmICh0aGlzLmlzU3RhcnQoKSAmJiB0aGlzLmlzRW5kKCkgJiYgIWJvZHkgJiYgdGhpcy50eXBlICE9PSAnIScpIHtcbiAgICAgICAgICAgIC8vIGludmFsaWQgZXh0Z2xvYiwgaGFzIHRvIGF0IGxlYXN0IGJlICpzb21ldGhpbmcqIHByZXNlbnQsIGlmIGl0J3NcbiAgICAgICAgICAgIC8vIHRoZSBlbnRpcmUgcGF0aCBwb3J0aW9uLlxuICAgICAgICAgICAgY29uc3QgcyA9IHRoaXMudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIHRoaXMuI3BhcnRzID0gW3NdO1xuICAgICAgICAgICAgdGhpcy50eXBlID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuI2hhc01hZ2ljID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgcmV0dXJuIFtzLCAoMCwgdW5lc2NhcGVfanNfMS51bmVzY2FwZSkodGhpcy50b1N0cmluZygpKSwgZmFsc2UsIGZhbHNlXTtcbiAgICAgICAgfVxuICAgICAgICAvLyBYWFggYWJzdHJhY3Qgb3V0IHRoaXMgbWFwIG1ldGhvZFxuICAgICAgICBsZXQgYm9keURvdEFsbG93ZWQgPSAhcmVwZWF0ZWQgfHwgYWxsb3dEb3QgfHwgZG90IHx8ICFzdGFydE5vRG90XG4gICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICA6IHRoaXMuI3BhcnRzVG9SZWdFeHAodHJ1ZSk7XG4gICAgICAgIGlmIChib2R5RG90QWxsb3dlZCA9PT0gYm9keSkge1xuICAgICAgICAgICAgYm9keURvdEFsbG93ZWQgPSAnJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoYm9keURvdEFsbG93ZWQpIHtcbiAgICAgICAgICAgIGJvZHkgPSBgKD86JHtib2R5fSkoPzoke2JvZHlEb3RBbGxvd2VkfSkqP2A7XG4gICAgICAgIH1cbiAgICAgICAgLy8gYW4gZW1wdHkgISgpIGlzIGV4YWN0bHkgZXF1aXZhbGVudCB0byBhIHN0YXJOb0VtcHR5XG4gICAgICAgIGxldCBmaW5hbCA9ICcnO1xuICAgICAgICBpZiAodGhpcy50eXBlID09PSAnIScgJiYgdGhpcy4jZW1wdHlFeHQpIHtcbiAgICAgICAgICAgIGZpbmFsID0gKHRoaXMuaXNTdGFydCgpICYmICFkb3QgPyBzdGFydE5vRG90IDogJycpICsgc3Rhck5vRW1wdHk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBjbG9zZSA9IHRoaXMudHlwZSA9PT0gJyEnXG4gICAgICAgICAgICAgICAgPyAvLyAhKCkgbXVzdCBtYXRjaCBzb21ldGhpbmcsYnV0ICEoeCkgY2FuIG1hdGNoICcnXG4gICAgICAgICAgICAgICAgICAgICcpKScgK1xuICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMuaXNTdGFydCgpICYmICFkb3QgJiYgIWFsbG93RG90ID8gc3RhcnROb0RvdCA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFyICtcbiAgICAgICAgICAgICAgICAgICAgICAgICcpJ1xuICAgICAgICAgICAgICAgIDogdGhpcy50eXBlID09PSAnQCdcbiAgICAgICAgICAgICAgICAgICAgPyAnKSdcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLnR5cGUgPT09ICc/J1xuICAgICAgICAgICAgICAgICAgICAgICAgPyAnKT8nXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMudHlwZSA9PT0gJysnICYmIGJvZHlEb3RBbGxvd2VkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnKSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMudHlwZSA9PT0gJyonICYmIGJvZHlEb3RBbGxvd2VkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gYCk/YFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGApJHt0aGlzLnR5cGV9YDtcbiAgICAgICAgICAgIGZpbmFsID0gc3RhcnQgKyBib2R5ICsgY2xvc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIGZpbmFsLFxuICAgICAgICAgICAgKDAsIHVuZXNjYXBlX2pzXzEudW5lc2NhcGUpKGJvZHkpLFxuICAgICAgICAgICAgKHRoaXMuI2hhc01hZ2ljID0gISF0aGlzLiNoYXNNYWdpYyksXG4gICAgICAgICAgICB0aGlzLiN1ZmxhZyxcbiAgICAgICAgXTtcbiAgICB9XG4gICAgI3BhcnRzVG9SZWdFeHAoZG90KSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNwYXJ0c1xuICAgICAgICAgICAgLm1hcChwID0+IHtcbiAgICAgICAgICAgIC8vIGV4dGdsb2IgQVNUcyBzaG91bGQgb25seSBjb250YWluIHBhcmVudCBBU1RzXG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgICAgIGlmICh0eXBlb2YgcCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N0cmluZyB0eXBlIGluIGV4dGdsb2IgYXN0Pz8nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICAvLyBjYW4gaWdub3JlIGhhc01hZ2ljLCBiZWNhdXNlIGV4dGdsb2JzIGFyZSBhbHJlYWR5IGFsd2F5cyBtYWdpY1xuICAgICAgICAgICAgY29uc3QgW3JlLCBfLCBfaGFzTWFnaWMsIHVmbGFnXSA9IHAudG9SZWdFeHBTb3VyY2UoZG90KTtcbiAgICAgICAgICAgIHRoaXMuI3VmbGFnID0gdGhpcy4jdWZsYWcgfHwgdWZsYWc7XG4gICAgICAgICAgICByZXR1cm4gcmU7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAuZmlsdGVyKHAgPT4gISh0aGlzLmlzU3RhcnQoKSAmJiB0aGlzLmlzRW5kKCkpIHx8ICEhcClcbiAgICAgICAgICAgIC5qb2luKCd8Jyk7XG4gICAgfVxuICAgIHN0YXRpYyAjcGFyc2VHbG9iKGdsb2IsIGhhc01hZ2ljLCBub0VtcHR5ID0gZmFsc2UpIHtcbiAgICAgICAgbGV0IGVzY2FwaW5nID0gZmFsc2U7XG4gICAgICAgIGxldCByZSA9ICcnO1xuICAgICAgICBsZXQgdWZsYWcgPSBmYWxzZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBnbG9iLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gZ2xvYi5jaGFyQXQoaSk7XG4gICAgICAgICAgICBpZiAoZXNjYXBpbmcpIHtcbiAgICAgICAgICAgICAgICBlc2NhcGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJlICs9IChyZVNwZWNpYWxzLmhhcyhjKSA/ICdcXFxcJyA6ICcnKSArIGM7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYyA9PT0gJ1xcXFwnKSB7XG4gICAgICAgICAgICAgICAgaWYgKGkgPT09IGdsb2IubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZSArPSAnXFxcXFxcXFwnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZXNjYXBpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjID09PSAnWycpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBbc3JjLCBuZWVkVWZsYWcsIGNvbnN1bWVkLCBtYWdpY10gPSAoMCwgYnJhY2VfZXhwcmVzc2lvbnNfanNfMS5wYXJzZUNsYXNzKShnbG9iLCBpKTtcbiAgICAgICAgICAgICAgICBpZiAoY29uc3VtZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmUgKz0gc3JjO1xuICAgICAgICAgICAgICAgICAgICB1ZmxhZyA9IHVmbGFnIHx8IG5lZWRVZmxhZztcbiAgICAgICAgICAgICAgICAgICAgaSArPSBjb25zdW1lZCAtIDE7XG4gICAgICAgICAgICAgICAgICAgIGhhc01hZ2ljID0gaGFzTWFnaWMgfHwgbWFnaWM7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjID09PSAnKicpIHtcbiAgICAgICAgICAgICAgICBpZiAobm9FbXB0eSAmJiBnbG9iID09PSAnKicpXG4gICAgICAgICAgICAgICAgICAgIHJlICs9IHN0YXJOb0VtcHR5O1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgcmUgKz0gc3RhcjtcbiAgICAgICAgICAgICAgICBoYXNNYWdpYyA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYyA9PT0gJz8nKSB7XG4gICAgICAgICAgICAgICAgcmUgKz0gcW1hcms7XG4gICAgICAgICAgICAgICAgaGFzTWFnaWMgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmUgKz0gcmVnRXhwRXNjYXBlKGMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbcmUsICgwLCB1bmVzY2FwZV9qc18xLnVuZXNjYXBlKShnbG9iKSwgISFoYXNNYWdpYywgdWZsYWddO1xuICAgIH1cbn1cbmV4cG9ydHMuQVNUID0gQVNUO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXN0LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmVzY2FwZSA9IHZvaWQgMDtcbi8qKlxuICogRXNjYXBlIGFsbCBtYWdpYyBjaGFyYWN0ZXJzIGluIGEgZ2xvYiBwYXR0ZXJuLlxuICpcbiAqIElmIHRoZSB7QGxpbmsgd2luZG93c1BhdGhzTm9Fc2NhcGUgfCBHbG9iT3B0aW9ucy53aW5kb3dzUGF0aHNOb0VzY2FwZX1cbiAqIG9wdGlvbiBpcyB1c2VkLCB0aGVuIGNoYXJhY3RlcnMgYXJlIGVzY2FwZWQgYnkgd3JhcHBpbmcgaW4gYFtdYCwgYmVjYXVzZVxuICogYSBtYWdpYyBjaGFyYWN0ZXIgd3JhcHBlZCBpbiBhIGNoYXJhY3RlciBjbGFzcyBjYW4gb25seSBiZSBzYXRpc2ZpZWQgYnlcbiAqIHRoYXQgZXhhY3QgY2hhcmFjdGVyLiAgSW4gdGhpcyBtb2RlLCBgXFxgIGlzIF9ub3RfIGVzY2FwZWQsIGJlY2F1c2UgaXQgaXNcbiAqIG5vdCBpbnRlcnByZXRlZCBhcyBhIG1hZ2ljIGNoYXJhY3RlciwgYnV0IGluc3RlYWQgYXMgYSBwYXRoIHNlcGFyYXRvci5cbiAqL1xuY29uc3QgZXNjYXBlID0gKHMsIHsgd2luZG93c1BhdGhzTm9Fc2NhcGUgPSBmYWxzZSwgfSA9IHt9KSA9PiB7XG4gICAgLy8gZG9uJ3QgbmVlZCB0byBlc2NhcGUgK0AhIGJlY2F1c2Ugd2UgZXNjYXBlIHRoZSBwYXJlbnNcbiAgICAvLyB0aGF0IG1ha2UgdGhvc2UgbWFnaWMsIGFuZCBlc2NhcGluZyAhIGFzIFshXSBpc24ndCB2YWxpZCxcbiAgICAvLyBiZWNhdXNlIFshXV0gaXMgYSB2YWxpZCBnbG9iIGNsYXNzIG1lYW5pbmcgbm90ICddJy5cbiAgICByZXR1cm4gd2luZG93c1BhdGhzTm9Fc2NhcGVcbiAgICAgICAgPyBzLnJlcGxhY2UoL1s/KigpW1xcXV0vZywgJ1skJl0nKVxuICAgICAgICA6IHMucmVwbGFjZSgvWz8qKClbXFxdXFxcXF0vZywgJ1xcXFwkJicpO1xufTtcbmV4cG9ydHMuZXNjYXBlID0gZXNjYXBlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXNjYXBlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnVuZXNjYXBlID0gZXhwb3J0cy5lc2NhcGUgPSBleHBvcnRzLkFTVCA9IGV4cG9ydHMuTWluaW1hdGNoID0gZXhwb3J0cy5tYXRjaCA9IGV4cG9ydHMubWFrZVJlID0gZXhwb3J0cy5icmFjZUV4cGFuZCA9IGV4cG9ydHMuZGVmYXVsdHMgPSBleHBvcnRzLmZpbHRlciA9IGV4cG9ydHMuR0xPQlNUQVIgPSBleHBvcnRzLnNlcCA9IGV4cG9ydHMubWluaW1hdGNoID0gdm9pZCAwO1xuY29uc3QgYnJhY2VfZXhwYW5zaW9uXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImJyYWNlLWV4cGFuc2lvblwiKSk7XG5jb25zdCBhc3NlcnRfdmFsaWRfcGF0dGVybl9qc18xID0gcmVxdWlyZShcIi4vYXNzZXJ0LXZhbGlkLXBhdHRlcm4uanNcIik7XG5jb25zdCBhc3RfanNfMSA9IHJlcXVpcmUoXCIuL2FzdC5qc1wiKTtcbmNvbnN0IGVzY2FwZV9qc18xID0gcmVxdWlyZShcIi4vZXNjYXBlLmpzXCIpO1xuY29uc3QgdW5lc2NhcGVfanNfMSA9IHJlcXVpcmUoXCIuL3VuZXNjYXBlLmpzXCIpO1xuY29uc3QgbWluaW1hdGNoID0gKHAsIHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkgPT4ge1xuICAgICgwLCBhc3NlcnRfdmFsaWRfcGF0dGVybl9qc18xLmFzc2VydFZhbGlkUGF0dGVybikocGF0dGVybik7XG4gICAgLy8gc2hvcnRjdXQ6IGNvbW1lbnRzIG1hdGNoIG5vdGhpbmcuXG4gICAgaWYgKCFvcHRpb25zLm5vY29tbWVudCAmJiBwYXR0ZXJuLmNoYXJBdCgwKSA9PT0gJyMnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBNaW5pbWF0Y2gocGF0dGVybiwgb3B0aW9ucykubWF0Y2gocCk7XG59O1xuZXhwb3J0cy5taW5pbWF0Y2ggPSBtaW5pbWF0Y2g7XG4vLyBPcHRpbWl6ZWQgY2hlY2tpbmcgZm9yIHRoZSBtb3N0IGNvbW1vbiBnbG9iIHBhdHRlcm5zLlxuY29uc3Qgc3RhckRvdEV4dFJFID0gL15cXCorKFteK0AhP1xcKlxcW1xcKF0qKSQvO1xuY29uc3Qgc3RhckRvdEV4dFRlc3QgPSAoZXh0KSA9PiAoZikgPT4gIWYuc3RhcnRzV2l0aCgnLicpICYmIGYuZW5kc1dpdGgoZXh0KTtcbmNvbnN0IHN0YXJEb3RFeHRUZXN0RG90ID0gKGV4dCkgPT4gKGYpID0+IGYuZW5kc1dpdGgoZXh0KTtcbmNvbnN0IHN0YXJEb3RFeHRUZXN0Tm9jYXNlID0gKGV4dCkgPT4ge1xuICAgIGV4dCA9IGV4dC50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiAoZikgPT4gIWYuc3RhcnRzV2l0aCgnLicpICYmIGYudG9Mb3dlckNhc2UoKS5lbmRzV2l0aChleHQpO1xufTtcbmNvbnN0IHN0YXJEb3RFeHRUZXN0Tm9jYXNlRG90ID0gKGV4dCkgPT4ge1xuICAgIGV4dCA9IGV4dC50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiAoZikgPT4gZi50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKGV4dCk7XG59O1xuY29uc3Qgc3RhckRvdFN0YXJSRSA9IC9eXFwqK1xcLlxcKiskLztcbmNvbnN0IHN0YXJEb3RTdGFyVGVzdCA9IChmKSA9PiAhZi5zdGFydHNXaXRoKCcuJykgJiYgZi5pbmNsdWRlcygnLicpO1xuY29uc3Qgc3RhckRvdFN0YXJUZXN0RG90ID0gKGYpID0+IGYgIT09ICcuJyAmJiBmICE9PSAnLi4nICYmIGYuaW5jbHVkZXMoJy4nKTtcbmNvbnN0IGRvdFN0YXJSRSA9IC9eXFwuXFwqKyQvO1xuY29uc3QgZG90U3RhclRlc3QgPSAoZikgPT4gZiAhPT0gJy4nICYmIGYgIT09ICcuLicgJiYgZi5zdGFydHNXaXRoKCcuJyk7XG5jb25zdCBzdGFyUkUgPSAvXlxcKiskLztcbmNvbnN0IHN0YXJUZXN0ID0gKGYpID0+IGYubGVuZ3RoICE9PSAwICYmICFmLnN0YXJ0c1dpdGgoJy4nKTtcbmNvbnN0IHN0YXJUZXN0RG90ID0gKGYpID0+IGYubGVuZ3RoICE9PSAwICYmIGYgIT09ICcuJyAmJiBmICE9PSAnLi4nO1xuY29uc3QgcW1hcmtzUkUgPSAvXlxcPysoW14rQCE/XFwqXFxbXFwoXSopPyQvO1xuY29uc3QgcW1hcmtzVGVzdE5vY2FzZSA9IChbJDAsIGV4dCA9ICcnXSkgPT4ge1xuICAgIGNvbnN0IG5vZXh0ID0gcW1hcmtzVGVzdE5vRXh0KFskMF0pO1xuICAgIGlmICghZXh0KVxuICAgICAgICByZXR1cm4gbm9leHQ7XG4gICAgZXh0ID0gZXh0LnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuIChmKSA9PiBub2V4dChmKSAmJiBmLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoZXh0KTtcbn07XG5jb25zdCBxbWFya3NUZXN0Tm9jYXNlRG90ID0gKFskMCwgZXh0ID0gJyddKSA9PiB7XG4gICAgY29uc3Qgbm9leHQgPSBxbWFya3NUZXN0Tm9FeHREb3QoWyQwXSk7XG4gICAgaWYgKCFleHQpXG4gICAgICAgIHJldHVybiBub2V4dDtcbiAgICBleHQgPSBleHQudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gKGYpID0+IG5vZXh0KGYpICYmIGYudG9Mb3dlckNhc2UoKS5lbmRzV2l0aChleHQpO1xufTtcbmNvbnN0IHFtYXJrc1Rlc3REb3QgPSAoWyQwLCBleHQgPSAnJ10pID0+IHtcbiAgICBjb25zdCBub2V4dCA9IHFtYXJrc1Rlc3ROb0V4dERvdChbJDBdKTtcbiAgICByZXR1cm4gIWV4dCA/IG5vZXh0IDogKGYpID0+IG5vZXh0KGYpICYmIGYuZW5kc1dpdGgoZXh0KTtcbn07XG5jb25zdCBxbWFya3NUZXN0ID0gKFskMCwgZXh0ID0gJyddKSA9PiB7XG4gICAgY29uc3Qgbm9leHQgPSBxbWFya3NUZXN0Tm9FeHQoWyQwXSk7XG4gICAgcmV0dXJuICFleHQgPyBub2V4dCA6IChmKSA9PiBub2V4dChmKSAmJiBmLmVuZHNXaXRoKGV4dCk7XG59O1xuY29uc3QgcW1hcmtzVGVzdE5vRXh0ID0gKFskMF0pID0+IHtcbiAgICBjb25zdCBsZW4gPSAkMC5sZW5ndGg7XG4gICAgcmV0dXJuIChmKSA9PiBmLmxlbmd0aCA9PT0gbGVuICYmICFmLnN0YXJ0c1dpdGgoJy4nKTtcbn07XG5jb25zdCBxbWFya3NUZXN0Tm9FeHREb3QgPSAoWyQwXSkgPT4ge1xuICAgIGNvbnN0IGxlbiA9ICQwLmxlbmd0aDtcbiAgICByZXR1cm4gKGYpID0+IGYubGVuZ3RoID09PSBsZW4gJiYgZiAhPT0gJy4nICYmIGYgIT09ICcuLic7XG59O1xuLyogYzggaWdub3JlIHN0YXJ0ICovXG5jb25zdCBkZWZhdWx0UGxhdGZvcm0gPSAodHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmIHByb2Nlc3NcbiAgICA/ICh0eXBlb2YgcHJvY2Vzcy5lbnYgPT09ICdvYmplY3QnICYmXG4gICAgICAgIHByb2Nlc3MuZW52ICYmXG4gICAgICAgIHByb2Nlc3MuZW52Ll9fTUlOSU1BVENIX1RFU1RJTkdfUExBVEZPUk1fXykgfHxcbiAgICAgICAgcHJvY2Vzcy5wbGF0Zm9ybVxuICAgIDogJ3Bvc2l4Jyk7XG5jb25zdCBwYXRoID0ge1xuICAgIHdpbjMyOiB7IHNlcDogJ1xcXFwnIH0sXG4gICAgcG9zaXg6IHsgc2VwOiAnLycgfSxcbn07XG4vKiBjOCBpZ25vcmUgc3RvcCAqL1xuZXhwb3J0cy5zZXAgPSBkZWZhdWx0UGxhdGZvcm0gPT09ICd3aW4zMicgPyBwYXRoLndpbjMyLnNlcCA6IHBhdGgucG9zaXguc2VwO1xuZXhwb3J0cy5taW5pbWF0Y2guc2VwID0gZXhwb3J0cy5zZXA7XG5leHBvcnRzLkdMT0JTVEFSID0gU3ltYm9sKCdnbG9ic3RhciAqKicpO1xuZXhwb3J0cy5taW5pbWF0Y2guR0xPQlNUQVIgPSBleHBvcnRzLkdMT0JTVEFSO1xuLy8gYW55IHNpbmdsZSB0aGluZyBvdGhlciB0aGFuIC9cbi8vIGRvbid0IG5lZWQgdG8gZXNjYXBlIC8gd2hlbiB1c2luZyBuZXcgUmVnRXhwKClcbmNvbnN0IHFtYXJrID0gJ1teL10nO1xuLy8gKiA9PiBhbnkgbnVtYmVyIG9mIGNoYXJhY3RlcnNcbmNvbnN0IHN0YXIgPSBxbWFyayArICcqPyc7XG4vLyAqKiB3aGVuIGRvdHMgYXJlIGFsbG93ZWQuICBBbnl0aGluZyBnb2VzLCBleGNlcHQgLi4gYW5kIC5cbi8vIG5vdCAoXiBvciAvIGZvbGxvd2VkIGJ5IG9uZSBvciB0d28gZG90cyBmb2xsb3dlZCBieSAkIG9yIC8pLFxuLy8gZm9sbG93ZWQgYnkgYW55dGhpbmcsIGFueSBudW1iZXIgb2YgdGltZXMuXG5jb25zdCB0d29TdGFyRG90ID0gJyg/Oig/ISg/OlxcXFwvfF4pKD86XFxcXC57MSwyfSkoJHxcXFxcLykpLikqPyc7XG4vLyBub3QgYSBeIG9yIC8gZm9sbG93ZWQgYnkgYSBkb3QsXG4vLyBmb2xsb3dlZCBieSBhbnl0aGluZywgYW55IG51bWJlciBvZiB0aW1lcy5cbmNvbnN0IHR3b1N0YXJOb0RvdCA9ICcoPzooPyEoPzpcXFxcL3xeKVxcXFwuKS4pKj8nO1xuY29uc3QgZmlsdGVyID0gKHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkgPT4gKHApID0+ICgwLCBleHBvcnRzLm1pbmltYXRjaCkocCwgcGF0dGVybiwgb3B0aW9ucyk7XG5leHBvcnRzLmZpbHRlciA9IGZpbHRlcjtcbmV4cG9ydHMubWluaW1hdGNoLmZpbHRlciA9IGV4cG9ydHMuZmlsdGVyO1xuY29uc3QgZXh0ID0gKGEsIGIgPSB7fSkgPT4gT2JqZWN0LmFzc2lnbih7fSwgYSwgYik7XG5jb25zdCBkZWZhdWx0cyA9IChkZWYpID0+IHtcbiAgICBpZiAoIWRlZiB8fCB0eXBlb2YgZGVmICE9PSAnb2JqZWN0JyB8fCAhT2JqZWN0LmtleXMoZGVmKS5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMubWluaW1hdGNoO1xuICAgIH1cbiAgICBjb25zdCBvcmlnID0gZXhwb3J0cy5taW5pbWF0Y2g7XG4gICAgY29uc3QgbSA9IChwLCBwYXR0ZXJuLCBvcHRpb25zID0ge30pID0+IG9yaWcocCwgcGF0dGVybiwgZXh0KGRlZiwgb3B0aW9ucykpO1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKG0sIHtcbiAgICAgICAgTWluaW1hdGNoOiBjbGFzcyBNaW5pbWF0Y2ggZXh0ZW5kcyBvcmlnLk1pbmltYXRjaCB7XG4gICAgICAgICAgICBjb25zdHJ1Y3RvcihwYXR0ZXJuLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgICAgICAgICBzdXBlcihwYXR0ZXJuLCBleHQoZGVmLCBvcHRpb25zKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdGF0aWMgZGVmYXVsdHMob3B0aW9ucykge1xuICAgICAgICAgICAgICAgIHJldHVybiBvcmlnLmRlZmF1bHRzKGV4dChkZWYsIG9wdGlvbnMpKS5NaW5pbWF0Y2g7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIEFTVDogY2xhc3MgQVNUIGV4dGVuZHMgb3JpZy5BU1Qge1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICBjb25zdHJ1Y3Rvcih0eXBlLCBwYXJlbnQsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICAgICAgICAgIHN1cGVyKHR5cGUsIHBhcmVudCwgZXh0KGRlZiwgb3B0aW9ucykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgICAgIHN0YXRpYyBmcm9tR2xvYihwYXR0ZXJuLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZy5BU1QuZnJvbUdsb2IocGF0dGVybiwgZXh0KGRlZiwgb3B0aW9ucykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB1bmVzY2FwZTogKHMsIG9wdGlvbnMgPSB7fSkgPT4gb3JpZy51bmVzY2FwZShzLCBleHQoZGVmLCBvcHRpb25zKSksXG4gICAgICAgIGVzY2FwZTogKHMsIG9wdGlvbnMgPSB7fSkgPT4gb3JpZy5lc2NhcGUocywgZXh0KGRlZiwgb3B0aW9ucykpLFxuICAgICAgICBmaWx0ZXI6IChwYXR0ZXJuLCBvcHRpb25zID0ge30pID0+IG9yaWcuZmlsdGVyKHBhdHRlcm4sIGV4dChkZWYsIG9wdGlvbnMpKSxcbiAgICAgICAgZGVmYXVsdHM6IChvcHRpb25zKSA9PiBvcmlnLmRlZmF1bHRzKGV4dChkZWYsIG9wdGlvbnMpKSxcbiAgICAgICAgbWFrZVJlOiAocGF0dGVybiwgb3B0aW9ucyA9IHt9KSA9PiBvcmlnLm1ha2VSZShwYXR0ZXJuLCBleHQoZGVmLCBvcHRpb25zKSksXG4gICAgICAgIGJyYWNlRXhwYW5kOiAocGF0dGVybiwgb3B0aW9ucyA9IHt9KSA9PiBvcmlnLmJyYWNlRXhwYW5kKHBhdHRlcm4sIGV4dChkZWYsIG9wdGlvbnMpKSxcbiAgICAgICAgbWF0Y2g6IChsaXN0LCBwYXR0ZXJuLCBvcHRpb25zID0ge30pID0+IG9yaWcubWF0Y2gobGlzdCwgcGF0dGVybiwgZXh0KGRlZiwgb3B0aW9ucykpLFxuICAgICAgICBzZXA6IG9yaWcuc2VwLFxuICAgICAgICBHTE9CU1RBUjogZXhwb3J0cy5HTE9CU1RBUixcbiAgICB9KTtcbn07XG5leHBvcnRzLmRlZmF1bHRzID0gZGVmYXVsdHM7XG5leHBvcnRzLm1pbmltYXRjaC5kZWZhdWx0cyA9IGV4cG9ydHMuZGVmYXVsdHM7XG4vLyBCcmFjZSBleHBhbnNpb246XG4vLyBhe2IsY31kIC0+IGFiZCBhY2Rcbi8vIGF7Yix9YyAtPiBhYmMgYWNcbi8vIGF7MC4uM31kIC0+IGEwZCBhMWQgYTJkIGEzZFxuLy8gYXtiLGN7ZCxlfWZ9ZyAtPiBhYmcgYWNkZmcgYWNlZmdcbi8vIGF7YixjfWR7ZSxmfWcgLT4gYWJkZWcgYWNkZWcgYWJkZWcgYWJkZmdcbi8vXG4vLyBJbnZhbGlkIHNldHMgYXJlIG5vdCBleHBhbmRlZC5cbi8vIGF7Mi4ufWIgLT4gYXsyLi59YlxuLy8gYXtifWMgLT4gYXtifWNcbmNvbnN0IGJyYWNlRXhwYW5kID0gKHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkgPT4ge1xuICAgICgwLCBhc3NlcnRfdmFsaWRfcGF0dGVybl9qc18xLmFzc2VydFZhbGlkUGF0dGVybikocGF0dGVybik7XG4gICAgLy8gVGhhbmtzIHRvIFlldGluZyBMaSA8aHR0cHM6Ly9naXRodWIuY29tL3lldGluZ2xpPiBmb3JcbiAgICAvLyBpbXByb3ZpbmcgdGhpcyByZWdleHAgdG8gYXZvaWQgYSBSZURPUyB2dWxuZXJhYmlsaXR5LlxuICAgIGlmIChvcHRpb25zLm5vYnJhY2UgfHwgIS9cXHsoPzooPyFcXHspLikqXFx9Ly50ZXN0KHBhdHRlcm4pKSB7XG4gICAgICAgIC8vIHNob3J0Y3V0LiBubyBuZWVkIHRvIGV4cGFuZC5cbiAgICAgICAgcmV0dXJuIFtwYXR0ZXJuXTtcbiAgICB9XG4gICAgcmV0dXJuICgwLCBicmFjZV9leHBhbnNpb25fMS5kZWZhdWx0KShwYXR0ZXJuKTtcbn07XG5leHBvcnRzLmJyYWNlRXhwYW5kID0gYnJhY2VFeHBhbmQ7XG5leHBvcnRzLm1pbmltYXRjaC5icmFjZUV4cGFuZCA9IGV4cG9ydHMuYnJhY2VFeHBhbmQ7XG4vLyBwYXJzZSBhIGNvbXBvbmVudCBvZiB0aGUgZXhwYW5kZWQgc2V0LlxuLy8gQXQgdGhpcyBwb2ludCwgbm8gcGF0dGVybiBtYXkgY29udGFpbiBcIi9cIiBpbiBpdFxuLy8gc28gd2UncmUgZ29pbmcgdG8gcmV0dXJuIGEgMmQgYXJyYXksIHdoZXJlIGVhY2ggZW50cnkgaXMgdGhlIGZ1bGxcbi8vIHBhdHRlcm4sIHNwbGl0IG9uICcvJywgYW5kIHRoZW4gdHVybmVkIGludG8gYSByZWd1bGFyIGV4cHJlc3Npb24uXG4vLyBBIHJlZ2V4cCBpcyBtYWRlIGF0IHRoZSBlbmQgd2hpY2ggam9pbnMgZWFjaCBhcnJheSB3aXRoIGFuXG4vLyBlc2NhcGVkIC8sIGFuZCBhbm90aGVyIGZ1bGwgb25lIHdoaWNoIGpvaW5zIGVhY2ggcmVnZXhwIHdpdGggfC5cbi8vXG4vLyBGb2xsb3dpbmcgdGhlIGxlYWQgb2YgQmFzaCA0LjEsIG5vdGUgdGhhdCBcIioqXCIgb25seSBoYXMgc3BlY2lhbCBtZWFuaW5nXG4vLyB3aGVuIGl0IGlzIHRoZSAqb25seSogdGhpbmcgaW4gYSBwYXRoIHBvcnRpb24uICBPdGhlcndpc2UsIGFueSBzZXJpZXNcbi8vIG9mICogaXMgZXF1aXZhbGVudCB0byBhIHNpbmdsZSAqLiAgR2xvYnN0YXIgYmVoYXZpb3IgaXMgZW5hYmxlZCBieVxuLy8gZGVmYXVsdCwgYW5kIGNhbiBiZSBkaXNhYmxlZCBieSBzZXR0aW5nIG9wdGlvbnMubm9nbG9ic3Rhci5cbmNvbnN0IG1ha2VSZSA9IChwYXR0ZXJuLCBvcHRpb25zID0ge30pID0+IG5ldyBNaW5pbWF0Y2gocGF0dGVybiwgb3B0aW9ucykubWFrZVJlKCk7XG5leHBvcnRzLm1ha2VSZSA9IG1ha2VSZTtcbmV4cG9ydHMubWluaW1hdGNoLm1ha2VSZSA9IGV4cG9ydHMubWFrZVJlO1xuY29uc3QgbWF0Y2ggPSAobGlzdCwgcGF0dGVybiwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgY29uc3QgbW0gPSBuZXcgTWluaW1hdGNoKHBhdHRlcm4sIG9wdGlvbnMpO1xuICAgIGxpc3QgPSBsaXN0LmZpbHRlcihmID0+IG1tLm1hdGNoKGYpKTtcbiAgICBpZiAobW0ub3B0aW9ucy5ub251bGwgJiYgIWxpc3QubGVuZ3RoKSB7XG4gICAgICAgIGxpc3QucHVzaChwYXR0ZXJuKTtcbiAgICB9XG4gICAgcmV0dXJuIGxpc3Q7XG59O1xuZXhwb3J0cy5tYXRjaCA9IG1hdGNoO1xuZXhwb3J0cy5taW5pbWF0Y2gubWF0Y2ggPSBleHBvcnRzLm1hdGNoO1xuLy8gcmVwbGFjZSBzdHVmZiBsaWtlIFxcKiB3aXRoICpcbmNvbnN0IGdsb2JNYWdpYyA9IC9bPypdfFsrQCFdXFwoLio/XFwpfFxcW3xcXF0vO1xuY29uc3QgcmVnRXhwRXNjYXBlID0gKHMpID0+IHMucmVwbGFjZSgvWy1bXFxde30oKSorPy4sXFxcXF4kfCNcXHNdL2csICdcXFxcJCYnKTtcbmNsYXNzIE1pbmltYXRjaCB7XG4gICAgb3B0aW9ucztcbiAgICBzZXQ7XG4gICAgcGF0dGVybjtcbiAgICB3aW5kb3dzUGF0aHNOb0VzY2FwZTtcbiAgICBub25lZ2F0ZTtcbiAgICBuZWdhdGU7XG4gICAgY29tbWVudDtcbiAgICBlbXB0eTtcbiAgICBwcmVzZXJ2ZU11bHRpcGxlU2xhc2hlcztcbiAgICBwYXJ0aWFsO1xuICAgIGdsb2JTZXQ7XG4gICAgZ2xvYlBhcnRzO1xuICAgIG5vY2FzZTtcbiAgICBpc1dpbmRvd3M7XG4gICAgcGxhdGZvcm07XG4gICAgd2luZG93c05vTWFnaWNSb290O1xuICAgIHJlZ2V4cDtcbiAgICBjb25zdHJ1Y3RvcihwYXR0ZXJuLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgKDAsIGFzc2VydF92YWxpZF9wYXR0ZXJuX2pzXzEuYXNzZXJ0VmFsaWRQYXR0ZXJuKShwYXR0ZXJuKTtcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgIHRoaXMucGF0dGVybiA9IHBhdHRlcm47XG4gICAgICAgIHRoaXMucGxhdGZvcm0gPSBvcHRpb25zLnBsYXRmb3JtIHx8IGRlZmF1bHRQbGF0Zm9ybTtcbiAgICAgICAgdGhpcy5pc1dpbmRvd3MgPSB0aGlzLnBsYXRmb3JtID09PSAnd2luMzInO1xuICAgICAgICB0aGlzLndpbmRvd3NQYXRoc05vRXNjYXBlID1cbiAgICAgICAgICAgICEhb3B0aW9ucy53aW5kb3dzUGF0aHNOb0VzY2FwZSB8fCBvcHRpb25zLmFsbG93V2luZG93c0VzY2FwZSA9PT0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLndpbmRvd3NQYXRoc05vRXNjYXBlKSB7XG4gICAgICAgICAgICB0aGlzLnBhdHRlcm4gPSB0aGlzLnBhdHRlcm4ucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJlc2VydmVNdWx0aXBsZVNsYXNoZXMgPSAhIW9wdGlvbnMucHJlc2VydmVNdWx0aXBsZVNsYXNoZXM7XG4gICAgICAgIHRoaXMucmVnZXhwID0gbnVsbDtcbiAgICAgICAgdGhpcy5uZWdhdGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5ub25lZ2F0ZSA9ICEhb3B0aW9ucy5ub25lZ2F0ZTtcbiAgICAgICAgdGhpcy5jb21tZW50ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZW1wdHkgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5wYXJ0aWFsID0gISFvcHRpb25zLnBhcnRpYWw7XG4gICAgICAgIHRoaXMubm9jYXNlID0gISF0aGlzLm9wdGlvbnMubm9jYXNlO1xuICAgICAgICB0aGlzLndpbmRvd3NOb01hZ2ljUm9vdCA9XG4gICAgICAgICAgICBvcHRpb25zLndpbmRvd3NOb01hZ2ljUm9vdCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyBvcHRpb25zLndpbmRvd3NOb01hZ2ljUm9vdFxuICAgICAgICAgICAgICAgIDogISEodGhpcy5pc1dpbmRvd3MgJiYgdGhpcy5ub2Nhc2UpO1xuICAgICAgICB0aGlzLmdsb2JTZXQgPSBbXTtcbiAgICAgICAgdGhpcy5nbG9iUGFydHMgPSBbXTtcbiAgICAgICAgdGhpcy5zZXQgPSBbXTtcbiAgICAgICAgLy8gbWFrZSB0aGUgc2V0IG9mIHJlZ2V4cHMgZXRjLlxuICAgICAgICB0aGlzLm1ha2UoKTtcbiAgICB9XG4gICAgaGFzTWFnaWMoKSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMubWFnaWNhbEJyYWNlcyAmJiB0aGlzLnNldC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgdGhpcy5zZXQpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcGFydCBvZiBwYXR0ZXJuKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwYXJ0ICE9PSAnc3RyaW5nJylcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBkZWJ1ZyguLi5fKSB7IH1cbiAgICBtYWtlKCkge1xuICAgICAgICBjb25zdCBwYXR0ZXJuID0gdGhpcy5wYXR0ZXJuO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgICAvLyBlbXB0eSBwYXR0ZXJucyBhbmQgY29tbWVudHMgbWF0Y2ggbm90aGluZy5cbiAgICAgICAgaWYgKCFvcHRpb25zLm5vY29tbWVudCAmJiBwYXR0ZXJuLmNoYXJBdCgwKSA9PT0gJyMnKSB7XG4gICAgICAgICAgICB0aGlzLmNvbW1lbnQgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghcGF0dGVybikge1xuICAgICAgICAgICAgdGhpcy5lbXB0eSA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gc3RlcCAxOiBmaWd1cmUgb3V0IG5lZ2F0aW9uLCBldGMuXG4gICAgICAgIHRoaXMucGFyc2VOZWdhdGUoKTtcbiAgICAgICAgLy8gc3RlcCAyOiBleHBhbmQgYnJhY2VzXG4gICAgICAgIHRoaXMuZ2xvYlNldCA9IFsuLi5uZXcgU2V0KHRoaXMuYnJhY2VFeHBhbmQoKSldO1xuICAgICAgICBpZiAob3B0aW9ucy5kZWJ1Zykge1xuICAgICAgICAgICAgdGhpcy5kZWJ1ZyA9ICguLi5hcmdzKSA9PiBjb25zb2xlLmVycm9yKC4uLmFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGVidWcodGhpcy5wYXR0ZXJuLCB0aGlzLmdsb2JTZXQpO1xuICAgICAgICAvLyBzdGVwIDM6IG5vdyB3ZSBoYXZlIGEgc2V0LCBzbyB0dXJuIGVhY2ggb25lIGludG8gYSBzZXJpZXMgb2ZcbiAgICAgICAgLy8gcGF0aC1wb3J0aW9uIG1hdGNoaW5nIHBhdHRlcm5zLlxuICAgICAgICAvLyBUaGVzZSB3aWxsIGJlIHJlZ2V4cHMsIGV4Y2VwdCBpbiB0aGUgY2FzZSBvZiBcIioqXCIsIHdoaWNoIGlzXG4gICAgICAgIC8vIHNldCB0byB0aGUgR0xPQlNUQVIgb2JqZWN0IGZvciBnbG9ic3RhciBiZWhhdmlvcixcbiAgICAgICAgLy8gYW5kIHdpbGwgbm90IGNvbnRhaW4gYW55IC8gY2hhcmFjdGVyc1xuICAgICAgICAvL1xuICAgICAgICAvLyBGaXJzdCwgd2UgcHJlcHJvY2VzcyB0byBtYWtlIHRoZSBnbG9iIHBhdHRlcm4gc2V0cyBhIGJpdCBzaW1wbGVyXG4gICAgICAgIC8vIGFuZCBkZWR1cGVkLiAgVGhlcmUgYXJlIHNvbWUgcGVyZi1raWxsaW5nIHBhdHRlcm5zIHRoYXQgY2FuIGNhdXNlXG4gICAgICAgIC8vIHByb2JsZW1zIHdpdGggYSBnbG9iIHdhbGssIGJ1dCB3ZSBjYW4gc2ltcGxpZnkgdGhlbSBkb3duIGEgYml0LlxuICAgICAgICBjb25zdCByYXdHbG9iUGFydHMgPSB0aGlzLmdsb2JTZXQubWFwKHMgPT4gdGhpcy5zbGFzaFNwbGl0KHMpKTtcbiAgICAgICAgdGhpcy5nbG9iUGFydHMgPSB0aGlzLnByZXByb2Nlc3MocmF3R2xvYlBhcnRzKTtcbiAgICAgICAgdGhpcy5kZWJ1Zyh0aGlzLnBhdHRlcm4sIHRoaXMuZ2xvYlBhcnRzKTtcbiAgICAgICAgLy8gZ2xvYiAtLT4gcmVnZXhwc1xuICAgICAgICBsZXQgc2V0ID0gdGhpcy5nbG9iUGFydHMubWFwKChzLCBfLCBfXykgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNXaW5kb3dzICYmIHRoaXMud2luZG93c05vTWFnaWNSb290KSB7XG4gICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgaXQncyBhIGRyaXZlIG9yIHVuYyBwYXRoLlxuICAgICAgICAgICAgICAgIGNvbnN0IGlzVU5DID0gc1swXSA9PT0gJycgJiZcbiAgICAgICAgICAgICAgICAgICAgc1sxXSA9PT0gJycgJiZcbiAgICAgICAgICAgICAgICAgICAgKHNbMl0gPT09ICc/JyB8fCAhZ2xvYk1hZ2ljLnRlc3Qoc1syXSkpICYmXG4gICAgICAgICAgICAgICAgICAgICFnbG9iTWFnaWMudGVzdChzWzNdKTtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0RyaXZlID0gL15bYS16XTovaS50ZXN0KHNbMF0pO1xuICAgICAgICAgICAgICAgIGlmIChpc1VOQykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWy4uLnMuc2xpY2UoMCwgNCksIC4uLnMuc2xpY2UoNCkubWFwKHNzID0+IHRoaXMucGFyc2Uoc3MpKV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzRHJpdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtzWzBdLCAuLi5zLnNsaWNlKDEpLm1hcChzcyA9PiB0aGlzLnBhcnNlKHNzKSldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzLm1hcChzcyA9PiB0aGlzLnBhcnNlKHNzKSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRlYnVnKHRoaXMucGF0dGVybiwgc2V0KTtcbiAgICAgICAgLy8gZmlsdGVyIG91dCBldmVyeXRoaW5nIHRoYXQgZGlkbid0IGNvbXBpbGUgcHJvcGVybHkuXG4gICAgICAgIHRoaXMuc2V0ID0gc2V0LmZpbHRlcihzID0+IHMuaW5kZXhPZihmYWxzZSkgPT09IC0xKTtcbiAgICAgICAgLy8gZG8gbm90IHRyZWF0IHRoZSA/IGluIFVOQyBwYXRocyBhcyBtYWdpY1xuICAgICAgICBpZiAodGhpcy5pc1dpbmRvd3MpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zZXQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwID0gdGhpcy5zZXRbaV07XG4gICAgICAgICAgICAgICAgaWYgKHBbMF0gPT09ICcnICYmXG4gICAgICAgICAgICAgICAgICAgIHBbMV0gPT09ICcnICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2xvYlBhcnRzW2ldWzJdID09PSAnPycgJiZcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHBbM10gPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAgICAgICAgIC9eW2Etel06JC9pLnRlc3QocFszXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcFsyXSA9ICc/JztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kZWJ1Zyh0aGlzLnBhdHRlcm4sIHRoaXMuc2V0KTtcbiAgICB9XG4gICAgLy8gdmFyaW91cyB0cmFuc2Zvcm1zIHRvIGVxdWl2YWxlbnQgcGF0dGVybiBzZXRzIHRoYXQgYXJlXG4gICAgLy8gZmFzdGVyIHRvIHByb2Nlc3MgaW4gYSBmaWxlc3lzdGVtIHdhbGsuICBUaGUgZ29hbCBpcyB0b1xuICAgIC8vIGVsaW1pbmF0ZSB3aGF0IHdlIGNhbiwgYW5kIHB1c2ggYWxsICoqIHBhdHRlcm5zIGFzIGZhclxuICAgIC8vIHRvIHRoZSByaWdodCBhcyBwb3NzaWJsZSwgZXZlbiBpZiBpdCBpbmNyZWFzZXMgdGhlIG51bWJlclxuICAgIC8vIG9mIHBhdHRlcm5zIHRoYXQgd2UgaGF2ZSB0byBwcm9jZXNzLlxuICAgIHByZXByb2Nlc3MoZ2xvYlBhcnRzKSB7XG4gICAgICAgIC8vIGlmIHdlJ3JlIG5vdCBpbiBnbG9ic3RhciBtb2RlLCB0aGVuIHR1cm4gYWxsICoqIGludG8gKlxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLm5vZ2xvYnN0YXIpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZ2xvYlBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBnbG9iUGFydHNbaV0ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGdsb2JQYXJ0c1tpXVtqXSA9PT0gJyoqJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYlBhcnRzW2ldW2pdID0gJyonO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgb3B0aW1pemF0aW9uTGV2ZWwgPSAxIH0gPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGlmIChvcHRpbWl6YXRpb25MZXZlbCA+PSAyKSB7XG4gICAgICAgICAgICAvLyBhZ2dyZXNzaXZlIG9wdGltaXphdGlvbiBmb3IgdGhlIHB1cnBvc2Ugb2YgZnMgd2Fsa2luZ1xuICAgICAgICAgICAgZ2xvYlBhcnRzID0gdGhpcy5maXJzdFBoYXNlUHJlUHJvY2VzcyhnbG9iUGFydHMpO1xuICAgICAgICAgICAgZ2xvYlBhcnRzID0gdGhpcy5zZWNvbmRQaGFzZVByZVByb2Nlc3MoZ2xvYlBhcnRzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChvcHRpbWl6YXRpb25MZXZlbCA+PSAxKSB7XG4gICAgICAgICAgICAvLyBqdXN0IGJhc2ljIG9wdGltaXphdGlvbnMgdG8gcmVtb3ZlIHNvbWUgLi4gcGFydHNcbiAgICAgICAgICAgIGdsb2JQYXJ0cyA9IHRoaXMubGV2ZWxPbmVPcHRpbWl6ZShnbG9iUGFydHMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8ganVzdCBjb2xsYXBzZSBtdWx0aXBsZSAqKiBwb3J0aW9ucyBpbnRvIG9uZVxuICAgICAgICAgICAgZ2xvYlBhcnRzID0gdGhpcy5hZGphc2NlbnRHbG9ic3Rhck9wdGltaXplKGdsb2JQYXJ0cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdsb2JQYXJ0cztcbiAgICB9XG4gICAgLy8ganVzdCBnZXQgcmlkIG9mIGFkamFzY2VudCAqKiBwb3J0aW9uc1xuICAgIGFkamFzY2VudEdsb2JzdGFyT3B0aW1pemUoZ2xvYlBhcnRzKSB7XG4gICAgICAgIHJldHVybiBnbG9iUGFydHMubWFwKHBhcnRzID0+IHtcbiAgICAgICAgICAgIGxldCBncyA9IC0xO1xuICAgICAgICAgICAgd2hpbGUgKC0xICE9PSAoZ3MgPSBwYXJ0cy5pbmRleE9mKCcqKicsIGdzICsgMSkpKSB7XG4gICAgICAgICAgICAgICAgbGV0IGkgPSBncztcbiAgICAgICAgICAgICAgICB3aGlsZSAocGFydHNbaSArIDFdID09PSAnKionKSB7XG4gICAgICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGkgIT09IGdzKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcnRzLnNwbGljZShncywgaSAtIGdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcGFydHM7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBnZXQgcmlkIG9mIGFkamFzY2VudCAqKiBhbmQgcmVzb2x2ZSAuLiBwb3J0aW9uc1xuICAgIGxldmVsT25lT3B0aW1pemUoZ2xvYlBhcnRzKSB7XG4gICAgICAgIHJldHVybiBnbG9iUGFydHMubWFwKHBhcnRzID0+IHtcbiAgICAgICAgICAgIHBhcnRzID0gcGFydHMucmVkdWNlKChzZXQsIHBhcnQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2ID0gc2V0W3NldC5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICBpZiAocGFydCA9PT0gJyoqJyAmJiBwcmV2ID09PSAnKionKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwYXJ0ID09PSAnLi4nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcmV2ICYmIHByZXYgIT09ICcuLicgJiYgcHJldiAhPT0gJy4nICYmIHByZXYgIT09ICcqKicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldC5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2V0LnB1c2gocGFydCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNldDtcbiAgICAgICAgICAgIH0sIFtdKTtcbiAgICAgICAgICAgIHJldHVybiBwYXJ0cy5sZW5ndGggPT09IDAgPyBbJyddIDogcGFydHM7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBsZXZlbFR3b0ZpbGVPcHRpbWl6ZShwYXJ0cykge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocGFydHMpKSB7XG4gICAgICAgICAgICBwYXJ0cyA9IHRoaXMuc2xhc2hTcGxpdChwYXJ0cyk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGRpZFNvbWV0aGluZyA9IGZhbHNlO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICBkaWRTb21ldGhpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vIDxwcmU+LzxlPi88cmVzdD4gLT4gPHByZT4vPHJlc3Q+XG4gICAgICAgICAgICBpZiAoIXRoaXMucHJlc2VydmVNdWx0aXBsZVNsYXNoZXMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHBhcnRzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwID0gcGFydHNbaV07XG4gICAgICAgICAgICAgICAgICAgIC8vIGRvbid0IHNxdWVlemUgb3V0IFVOQyBwYXR0ZXJuc1xuICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PT0gMSAmJiBwID09PSAnJyAmJiBwYXJ0c1swXSA9PT0gJycpXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHAgPT09ICcuJyB8fCBwID09PSAnJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlkU29tZXRoaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGktLTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocGFydHNbMF0gPT09ICcuJyAmJlxuICAgICAgICAgICAgICAgICAgICBwYXJ0cy5sZW5ndGggPT09IDIgJiZcbiAgICAgICAgICAgICAgICAgICAgKHBhcnRzWzFdID09PSAnLicgfHwgcGFydHNbMV0gPT09ICcnKSkge1xuICAgICAgICAgICAgICAgICAgICBkaWRTb21ldGhpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBwYXJ0cy5wb3AoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyA8cHJlPi88cD4vLi4vPHJlc3Q+IC0+IDxwcmU+LzxyZXN0PlxuICAgICAgICAgICAgbGV0IGRkID0gMDtcbiAgICAgICAgICAgIHdoaWxlICgtMSAhPT0gKGRkID0gcGFydHMuaW5kZXhPZignLi4nLCBkZCArIDEpKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHAgPSBwYXJ0c1tkZCAtIDFdO1xuICAgICAgICAgICAgICAgIGlmIChwICYmIHAgIT09ICcuJyAmJiBwICE9PSAnLi4nICYmIHAgIT09ICcqKicpIHtcbiAgICAgICAgICAgICAgICAgICAgZGlkU29tZXRoaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcGFydHMuc3BsaWNlKGRkIC0gMSwgMik7XG4gICAgICAgICAgICAgICAgICAgIGRkIC09IDI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IHdoaWxlIChkaWRTb21ldGhpbmcpO1xuICAgICAgICByZXR1cm4gcGFydHMubGVuZ3RoID09PSAwID8gWycnXSA6IHBhcnRzO1xuICAgIH1cbiAgICAvLyBGaXJzdCBwaGFzZTogc2luZ2xlLXBhdHRlcm4gcHJvY2Vzc2luZ1xuICAgIC8vIDxwcmU+IGlzIDEgb3IgbW9yZSBwb3J0aW9uc1xuICAgIC8vIDxyZXN0PiBpcyAxIG9yIG1vcmUgcG9ydGlvbnNcbiAgICAvLyA8cD4gaXMgYW55IHBvcnRpb24gb3RoZXIgdGhhbiAuLCAuLiwgJycsIG9yICoqXG4gICAgLy8gPGU+IGlzIC4gb3IgJydcbiAgICAvL1xuICAgIC8vICoqLy4uIGlzICpicnV0YWwqIGZvciBmaWxlc3lzdGVtIHdhbGtpbmcgcGVyZm9ybWFuY2UsIGJlY2F1c2VcbiAgICAvLyBpdCBlZmZlY3RpdmVseSByZXNldHMgdGhlIHJlY3Vyc2l2ZSB3YWxrIGVhY2ggdGltZSBpdCBvY2N1cnMsXG4gICAgLy8gYW5kICoqIGNhbm5vdCBiZSByZWR1Y2VkIG91dCBieSBhIC4uIHBhdHRlcm4gcGFydCBsaWtlIGEgcmVnZXhwXG4gICAgLy8gb3IgbW9zdCBzdHJpbmdzIChvdGhlciB0aGFuIC4uLCAuLCBhbmQgJycpIGNhbiBiZS5cbiAgICAvL1xuICAgIC8vIDxwcmU+LyoqLy4uLzxwPi88cD4vPHJlc3Q+IC0+IHs8cHJlPi8uLi88cD4vPHA+LzxyZXN0Piw8cHJlPi8qKi88cD4vPHA+LzxyZXN0Pn1cbiAgICAvLyA8cHJlPi88ZT4vPHJlc3Q+IC0+IDxwcmU+LzxyZXN0PlxuICAgIC8vIDxwcmU+LzxwPi8uLi88cmVzdD4gLT4gPHByZT4vPHJlc3Q+XG4gICAgLy8gKiovKiovPHJlc3Q+IC0+ICoqLzxyZXN0PlxuICAgIC8vXG4gICAgLy8gKiovKi88cmVzdD4gLT4gKi8qKi88cmVzdD4gPD09IG5vdCB2YWxpZCBiZWNhdXNlICoqIGRvZXNuJ3QgZm9sbG93XG4gICAgLy8gdGhpcyBXT1VMRCBiZSBhbGxvd2VkIGlmICoqIGRpZCBmb2xsb3cgc3ltbGlua3MsIG9yICogZGlkbid0XG4gICAgZmlyc3RQaGFzZVByZVByb2Nlc3MoZ2xvYlBhcnRzKSB7XG4gICAgICAgIGxldCBkaWRTb21ldGhpbmcgPSBmYWxzZTtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgZGlkU29tZXRoaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAvLyA8cHJlPi8qKi8uLi88cD4vPHA+LzxyZXN0PiAtPiB7PHByZT4vLi4vPHA+LzxwPi88cmVzdD4sPHByZT4vKiovPHA+LzxwPi88cmVzdD59XG4gICAgICAgICAgICBmb3IgKGxldCBwYXJ0cyBvZiBnbG9iUGFydHMpIHtcbiAgICAgICAgICAgICAgICBsZXQgZ3MgPSAtMTtcbiAgICAgICAgICAgICAgICB3aGlsZSAoLTEgIT09IChncyA9IHBhcnRzLmluZGV4T2YoJyoqJywgZ3MgKyAxKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGdzcyA9IGdzO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAocGFydHNbZ3NzICsgMV0gPT09ICcqKicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIDxwcmU+LyoqLyoqLzxyZXN0PiAtPiA8cHJlPi8qKi88cmVzdD5cbiAgICAgICAgICAgICAgICAgICAgICAgIGdzcysrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIGVnLCBpZiBncyBpcyAyIGFuZCBnc3MgaXMgNCwgdGhhdCBtZWFucyB3ZSBoYXZlIDMgKipcbiAgICAgICAgICAgICAgICAgICAgLy8gcGFydHMsIGFuZCBjYW4gcmVtb3ZlIDIgb2YgdGhlbS5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGdzcyA+IGdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0cy5zcGxpY2UoZ3MgKyAxLCBnc3MgLSBncyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbGV0IG5leHQgPSBwYXJ0c1tncyArIDFdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwID0gcGFydHNbZ3MgKyAyXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcDIgPSBwYXJ0c1tncyArIDNdO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCAhPT0gJy4uJylcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXAgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHAgPT09ICcuJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgcCA9PT0gJy4uJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgIXAyIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBwMiA9PT0gJy4nIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBwMiA9PT0gJy4uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZGlkU29tZXRoaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgLy8gZWRpdCBwYXJ0cyBpbiBwbGFjZSwgYW5kIHB1c2ggdGhlIG5ldyBvbmVcbiAgICAgICAgICAgICAgICAgICAgcGFydHMuc3BsaWNlKGdzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RoZXIgPSBwYXJ0cy5zbGljZSgwKTtcbiAgICAgICAgICAgICAgICAgICAgb3RoZXJbZ3NdID0gJyoqJztcbiAgICAgICAgICAgICAgICAgICAgZ2xvYlBhcnRzLnB1c2gob3RoZXIpO1xuICAgICAgICAgICAgICAgICAgICBncy0tO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyA8cHJlPi88ZT4vPHJlc3Q+IC0+IDxwcmU+LzxyZXN0PlxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5wcmVzZXJ2ZU11bHRpcGxlU2xhc2hlcykge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHBhcnRzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcCA9IHBhcnRzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZG9uJ3Qgc3F1ZWV6ZSBvdXQgVU5DIHBhdHRlcm5zXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PT0gMSAmJiBwID09PSAnJyAmJiBwYXJ0c1swXSA9PT0gJycpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocCA9PT0gJy4nIHx8IHAgPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlkU29tZXRoaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaS0tO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJ0c1swXSA9PT0gJy4nICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0cy5sZW5ndGggPT09IDIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIChwYXJ0c1sxXSA9PT0gJy4nIHx8IHBhcnRzWzFdID09PSAnJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpZFNvbWV0aGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0cy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyA8cHJlPi88cD4vLi4vPHJlc3Q+IC0+IDxwcmU+LzxyZXN0PlxuICAgICAgICAgICAgICAgIGxldCBkZCA9IDA7XG4gICAgICAgICAgICAgICAgd2hpbGUgKC0xICE9PSAoZGQgPSBwYXJ0cy5pbmRleE9mKCcuLicsIGRkICsgMSkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHAgPSBwYXJ0c1tkZCAtIDFdO1xuICAgICAgICAgICAgICAgICAgICBpZiAocCAmJiBwICE9PSAnLicgJiYgcCAhPT0gJy4uJyAmJiBwICE9PSAnKionKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaWRTb21ldGhpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmVlZERvdCA9IGRkID09PSAxICYmIHBhcnRzW2RkICsgMV0gPT09ICcqKic7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzcGxpbiA9IG5lZWREb3QgPyBbJy4nXSA6IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFydHMuc3BsaWNlKGRkIC0gMSwgMiwgLi4uc3BsaW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0cy5wdXNoKCcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRkIC09IDI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gd2hpbGUgKGRpZFNvbWV0aGluZyk7XG4gICAgICAgIHJldHVybiBnbG9iUGFydHM7XG4gICAgfVxuICAgIC8vIHNlY29uZCBwaGFzZTogbXVsdGktcGF0dGVybiBkZWR1cGVzXG4gICAgLy8gezxwcmU+LyovPHJlc3Q+LDxwcmU+LzxwPi88cmVzdD59IC0+IDxwcmU+LyovPHJlc3Q+XG4gICAgLy8gezxwcmU+LzxyZXN0Piw8cHJlPi88cmVzdD59IC0+IDxwcmU+LzxyZXN0PlxuICAgIC8vIHs8cHJlPi8qKi88cmVzdD4sPHByZT4vPHJlc3Q+fSAtPiA8cHJlPi8qKi88cmVzdD5cbiAgICAvL1xuICAgIC8vIHs8cHJlPi8qKi88cmVzdD4sPHByZT4vKiovPHA+LzxyZXN0Pn0gLT4gPHByZT4vKiovPHJlc3Q+XG4gICAgLy8gXi0tIG5vdCB2YWxpZCBiZWNhdXNlICoqIGRvZW5zJ3QgZm9sbG93IHN5bWxpbmtzXG4gICAgc2Vjb25kUGhhc2VQcmVQcm9jZXNzKGdsb2JQYXJ0cykge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGdsb2JQYXJ0cy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IGdsb2JQYXJ0cy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoZWQgPSB0aGlzLnBhcnRzTWF0Y2goZ2xvYlBhcnRzW2ldLCBnbG9iUGFydHNbal0sICF0aGlzLnByZXNlcnZlTXVsdGlwbGVTbGFzaGVzKTtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2hlZCkge1xuICAgICAgICAgICAgICAgICAgICBnbG9iUGFydHNbaV0gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgZ2xvYlBhcnRzW2pdID0gbWF0Y2hlZDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBnbG9iUGFydHMuZmlsdGVyKGdzID0+IGdzLmxlbmd0aCk7XG4gICAgfVxuICAgIHBhcnRzTWF0Y2goYSwgYiwgZW1wdHlHU01hdGNoID0gZmFsc2UpIHtcbiAgICAgICAgbGV0IGFpID0gMDtcbiAgICAgICAgbGV0IGJpID0gMDtcbiAgICAgICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgICAgICBsZXQgd2hpY2ggPSAnJztcbiAgICAgICAgd2hpbGUgKGFpIDwgYS5sZW5ndGggJiYgYmkgPCBiLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKGFbYWldID09PSBiW2JpXSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHdoaWNoID09PSAnYicgPyBiW2JpXSA6IGFbYWldKTtcbiAgICAgICAgICAgICAgICBhaSsrO1xuICAgICAgICAgICAgICAgIGJpKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChlbXB0eUdTTWF0Y2ggJiYgYVthaV0gPT09ICcqKicgJiYgYltiaV0gPT09IGFbYWkgKyAxXSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGFbYWldKTtcbiAgICAgICAgICAgICAgICBhaSsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZW1wdHlHU01hdGNoICYmIGJbYmldID09PSAnKionICYmIGFbYWldID09PSBiW2JpICsgMV0pIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChiW2JpXSk7XG4gICAgICAgICAgICAgICAgYmkrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGFbYWldID09PSAnKicgJiZcbiAgICAgICAgICAgICAgICBiW2JpXSAmJlxuICAgICAgICAgICAgICAgICh0aGlzLm9wdGlvbnMuZG90IHx8ICFiW2JpXS5zdGFydHNXaXRoKCcuJykpICYmXG4gICAgICAgICAgICAgICAgYltiaV0gIT09ICcqKicpIHtcbiAgICAgICAgICAgICAgICBpZiAod2hpY2ggPT09ICdiJylcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIHdoaWNoID0gJ2EnO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGFbYWldKTtcbiAgICAgICAgICAgICAgICBhaSsrO1xuICAgICAgICAgICAgICAgIGJpKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChiW2JpXSA9PT0gJyonICYmXG4gICAgICAgICAgICAgICAgYVthaV0gJiZcbiAgICAgICAgICAgICAgICAodGhpcy5vcHRpb25zLmRvdCB8fCAhYVthaV0uc3RhcnRzV2l0aCgnLicpKSAmJlxuICAgICAgICAgICAgICAgIGFbYWldICE9PSAnKionKSB7XG4gICAgICAgICAgICAgICAgaWYgKHdoaWNoID09PSAnYScpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB3aGljaCA9ICdiJztcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChiW2JpXSk7XG4gICAgICAgICAgICAgICAgYWkrKztcbiAgICAgICAgICAgICAgICBiaSsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHdlIGZhbGwgb3V0IG9mIHRoZSBsb29wLCBpdCBtZWFucyB0aGV5IHR3byBhcmUgaWRlbnRpY2FsXG4gICAgICAgIC8vIGFzIGxvbmcgYXMgdGhlaXIgbGVuZ3RocyBtYXRjaFxuICAgICAgICByZXR1cm4gYS5sZW5ndGggPT09IGIubGVuZ3RoICYmIHJlc3VsdDtcbiAgICB9XG4gICAgcGFyc2VOZWdhdGUoKSB7XG4gICAgICAgIGlmICh0aGlzLm5vbmVnYXRlKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBwYXR0ZXJuID0gdGhpcy5wYXR0ZXJuO1xuICAgICAgICBsZXQgbmVnYXRlID0gZmFsc2U7XG4gICAgICAgIGxldCBuZWdhdGVPZmZzZXQgPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdHRlcm4ubGVuZ3RoICYmIHBhdHRlcm4uY2hhckF0KGkpID09PSAnISc7IGkrKykge1xuICAgICAgICAgICAgbmVnYXRlID0gIW5lZ2F0ZTtcbiAgICAgICAgICAgIG5lZ2F0ZU9mZnNldCsrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuZWdhdGVPZmZzZXQpXG4gICAgICAgICAgICB0aGlzLnBhdHRlcm4gPSBwYXR0ZXJuLnNsaWNlKG5lZ2F0ZU9mZnNldCk7XG4gICAgICAgIHRoaXMubmVnYXRlID0gbmVnYXRlO1xuICAgIH1cbiAgICAvLyBzZXQgcGFydGlhbCB0byB0cnVlIHRvIHRlc3QgaWYsIGZvciBleGFtcGxlLFxuICAgIC8vIFwiL2EvYlwiIG1hdGNoZXMgdGhlIHN0YXJ0IG9mIFwiLyovYi8qL2RcIlxuICAgIC8vIFBhcnRpYWwgbWVhbnMsIGlmIHlvdSBydW4gb3V0IG9mIGZpbGUgYmVmb3JlIHlvdSBydW5cbiAgICAvLyBvdXQgb2YgcGF0dGVybiwgdGhlbiB0aGF0J3MgZmluZSwgYXMgbG9uZyBhcyBhbGxcbiAgICAvLyB0aGUgcGFydHMgbWF0Y2guXG4gICAgbWF0Y2hPbmUoZmlsZSwgcGF0dGVybiwgcGFydGlhbCA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIC8vIFVOQyBwYXRocyBsaWtlIC8vPy9YOi8uLi4gY2FuIG1hdGNoIFg6Ly4uLiBhbmQgdmljZSB2ZXJzYVxuICAgICAgICAvLyBEcml2ZSBsZXR0ZXJzIGluIGFic29sdXRlIGRyaXZlIG9yIHVuYyBwYXRocyBhcmUgYWx3YXlzIGNvbXBhcmVkXG4gICAgICAgIC8vIGNhc2UtaW5zZW5zaXRpdmVseS5cbiAgICAgICAgaWYgKHRoaXMuaXNXaW5kb3dzKSB7XG4gICAgICAgICAgICBjb25zdCBmaWxlRHJpdmUgPSB0eXBlb2YgZmlsZVswXSA9PT0gJ3N0cmluZycgJiYgL15bYS16XTokL2kudGVzdChmaWxlWzBdKTtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVVTkMgPSAhZmlsZURyaXZlICYmXG4gICAgICAgICAgICAgICAgZmlsZVswXSA9PT0gJycgJiZcbiAgICAgICAgICAgICAgICBmaWxlWzFdID09PSAnJyAmJlxuICAgICAgICAgICAgICAgIGZpbGVbMl0gPT09ICc/JyAmJlxuICAgICAgICAgICAgICAgIC9eW2Etel06JC9pLnRlc3QoZmlsZVszXSk7XG4gICAgICAgICAgICBjb25zdCBwYXR0ZXJuRHJpdmUgPSB0eXBlb2YgcGF0dGVyblswXSA9PT0gJ3N0cmluZycgJiYgL15bYS16XTokL2kudGVzdChwYXR0ZXJuWzBdKTtcbiAgICAgICAgICAgIGNvbnN0IHBhdHRlcm5VTkMgPSAhcGF0dGVybkRyaXZlICYmXG4gICAgICAgICAgICAgICAgcGF0dGVyblswXSA9PT0gJycgJiZcbiAgICAgICAgICAgICAgICBwYXR0ZXJuWzFdID09PSAnJyAmJlxuICAgICAgICAgICAgICAgIHBhdHRlcm5bMl0gPT09ICc/JyAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiBwYXR0ZXJuWzNdID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgICAgIC9eW2Etel06JC9pLnRlc3QocGF0dGVyblszXSk7XG4gICAgICAgICAgICBjb25zdCBmZGkgPSBmaWxlVU5DID8gMyA6IGZpbGVEcml2ZSA/IDAgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjb25zdCBwZGkgPSBwYXR0ZXJuVU5DID8gMyA6IHBhdHRlcm5Ecml2ZSA/IDAgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGZkaSA9PT0gJ251bWJlcicgJiYgdHlwZW9mIHBkaSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBbZmQsIHBkXSA9IFtmaWxlW2ZkaV0sIHBhdHRlcm5bcGRpXV07XG4gICAgICAgICAgICAgICAgaWYgKGZkLnRvTG93ZXJDYXNlKCkgPT09IHBkLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcGF0dGVybltwZGldID0gZmQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwZGkgPiBmZGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm4gPSBwYXR0ZXJuLnNsaWNlKHBkaSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZmRpID4gcGRpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlID0gZmlsZS5zbGljZShmZGkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIHJlc29sdmUgYW5kIHJlZHVjZSAuIGFuZCAuLiBwb3J0aW9ucyBpbiB0aGUgZmlsZSBhcyB3ZWxsLlxuICAgICAgICAvLyBkb250JyBuZWVkIHRvIGRvIHRoZSBzZWNvbmQgcGhhc2UsIGJlY2F1c2UgaXQncyBvbmx5IG9uZSBzdHJpbmdbXVxuICAgICAgICBjb25zdCB7IG9wdGltaXphdGlvbkxldmVsID0gMSB9ID0gdGhpcy5vcHRpb25zO1xuICAgICAgICBpZiAob3B0aW1pemF0aW9uTGV2ZWwgPj0gMikge1xuICAgICAgICAgICAgZmlsZSA9IHRoaXMubGV2ZWxUd29GaWxlT3B0aW1pemUoZmlsZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kZWJ1ZygnbWF0Y2hPbmUnLCB0aGlzLCB7IGZpbGUsIHBhdHRlcm4gfSk7XG4gICAgICAgIHRoaXMuZGVidWcoJ21hdGNoT25lJywgZmlsZS5sZW5ndGgsIHBhdHRlcm4ubGVuZ3RoKTtcbiAgICAgICAgZm9yICh2YXIgZmkgPSAwLCBwaSA9IDAsIGZsID0gZmlsZS5sZW5ndGgsIHBsID0gcGF0dGVybi5sZW5ndGg7IGZpIDwgZmwgJiYgcGkgPCBwbDsgZmkrKywgcGkrKykge1xuICAgICAgICAgICAgdGhpcy5kZWJ1ZygnbWF0Y2hPbmUgbG9vcCcpO1xuICAgICAgICAgICAgdmFyIHAgPSBwYXR0ZXJuW3BpXTtcbiAgICAgICAgICAgIHZhciBmID0gZmlsZVtmaV07XG4gICAgICAgICAgICB0aGlzLmRlYnVnKHBhdHRlcm4sIHAsIGYpO1xuICAgICAgICAgICAgLy8gc2hvdWxkIGJlIGltcG9zc2libGUuXG4gICAgICAgICAgICAvLyBzb21lIGludmFsaWQgcmVnZXhwIHN0dWZmIGluIHRoZSBzZXQuXG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgICAgIGlmIChwID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICBpZiAocCA9PT0gZXhwb3J0cy5HTE9CU1RBUikge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVidWcoJ0dMT0JTVEFSJywgW3BhdHRlcm4sIHAsIGZdKTtcbiAgICAgICAgICAgICAgICAvLyBcIioqXCJcbiAgICAgICAgICAgICAgICAvLyBhLyoqL2IvKiovYyB3b3VsZCBtYXRjaCB0aGUgZm9sbG93aW5nOlxuICAgICAgICAgICAgICAgIC8vIGEvYi94L3kvei9jXG4gICAgICAgICAgICAgICAgLy8gYS94L3kvei9iL2NcbiAgICAgICAgICAgICAgICAvLyBhL2IveC9iL3gvY1xuICAgICAgICAgICAgICAgIC8vIGEvYi9jXG4gICAgICAgICAgICAgICAgLy8gVG8gZG8gdGhpcywgdGFrZSB0aGUgcmVzdCBvZiB0aGUgcGF0dGVybiBhZnRlclxuICAgICAgICAgICAgICAgIC8vIHRoZSAqKiwgYW5kIHNlZSBpZiBpdCB3b3VsZCBtYXRjaCB0aGUgZmlsZSByZW1haW5kZXIuXG4gICAgICAgICAgICAgICAgLy8gSWYgc28sIHJldHVybiBzdWNjZXNzLlxuICAgICAgICAgICAgICAgIC8vIElmIG5vdCwgdGhlICoqIFwic3dhbGxvd3NcIiBhIHNlZ21lbnQsIGFuZCB0cnkgYWdhaW4uXG4gICAgICAgICAgICAgICAgLy8gVGhpcyBpcyByZWN1cnNpdmVseSBhd2Z1bC5cbiAgICAgICAgICAgICAgICAvL1xuICAgICAgICAgICAgICAgIC8vIGEvKiovYi8qKi9jIG1hdGNoaW5nIGEvYi94L3kvei9jXG4gICAgICAgICAgICAgICAgLy8gLSBhIG1hdGNoZXMgYVxuICAgICAgICAgICAgICAgIC8vIC0gZG91Ymxlc3RhclxuICAgICAgICAgICAgICAgIC8vICAgLSBtYXRjaE9uZShiL3gveS96L2MsIGIvKiovYylcbiAgICAgICAgICAgICAgICAvLyAgICAgLSBiIG1hdGNoZXMgYlxuICAgICAgICAgICAgICAgIC8vICAgICAtIGRvdWJsZXN0YXJcbiAgICAgICAgICAgICAgICAvLyAgICAgICAtIG1hdGNoT25lKHgveS96L2MsIGMpIC0+IG5vXG4gICAgICAgICAgICAgICAgLy8gICAgICAgLSBtYXRjaE9uZSh5L3ovYywgYykgLT4gbm9cbiAgICAgICAgICAgICAgICAvLyAgICAgICAtIG1hdGNoT25lKHovYywgYykgLT4gbm9cbiAgICAgICAgICAgICAgICAvLyAgICAgICAtIG1hdGNoT25lKGMsIGMpIHllcywgaGl0XG4gICAgICAgICAgICAgICAgdmFyIGZyID0gZmk7XG4gICAgICAgICAgICAgICAgdmFyIHByID0gcGkgKyAxO1xuICAgICAgICAgICAgICAgIGlmIChwciA9PT0gcGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWJ1ZygnKiogYXQgdGhlIGVuZCcpO1xuICAgICAgICAgICAgICAgICAgICAvLyBhICoqIGF0IHRoZSBlbmQgd2lsbCBqdXN0IHN3YWxsb3cgdGhlIHJlc3QuXG4gICAgICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgZm91bmQgYSBtYXRjaC5cbiAgICAgICAgICAgICAgICAgICAgLy8gaG93ZXZlciwgaXQgd2lsbCBub3Qgc3dhbGxvdyAvLngsIHVubGVzc1xuICAgICAgICAgICAgICAgICAgICAvLyBvcHRpb25zLmRvdCBpcyBzZXQuXG4gICAgICAgICAgICAgICAgICAgIC8vIC4gYW5kIC4uIGFyZSAqbmV2ZXIqIG1hdGNoZWQgYnkgKiosIGZvciBleHBsb3NpdmVseVxuICAgICAgICAgICAgICAgICAgICAvLyBleHBvbmVudGlhbCByZWFzb25zLlxuICAgICAgICAgICAgICAgICAgICBmb3IgKDsgZmkgPCBmbDsgZmkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpbGVbZmldID09PSAnLicgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlW2ZpXSA9PT0gJy4uJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICghb3B0aW9ucy5kb3QgJiYgZmlsZVtmaV0uY2hhckF0KDApID09PSAnLicpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gb2ssIGxldCdzIHNlZSBpZiB3ZSBjYW4gc3dhbGxvdyB3aGF0ZXZlciB3ZSBjYW4uXG4gICAgICAgICAgICAgICAgd2hpbGUgKGZyIDwgZmwpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHN3YWxsb3dlZSA9IGZpbGVbZnJdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRlYnVnKCdcXG5nbG9ic3RhciB3aGlsZScsIGZpbGUsIGZyLCBwYXR0ZXJuLCBwciwgc3dhbGxvd2VlKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gWFhYIHJlbW92ZSB0aGlzIHNsaWNlLiAgSnVzdCBwYXNzIHRoZSBzdGFydCBpbmRleC5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2hPbmUoZmlsZS5zbGljZShmciksIHBhdHRlcm4uc2xpY2UocHIpLCBwYXJ0aWFsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWJ1ZygnZ2xvYnN0YXIgZm91bmQgbWF0Y2ghJywgZnIsIGZsLCBzd2FsbG93ZWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm91bmQgYSBtYXRjaC5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FuJ3Qgc3dhbGxvdyBcIi5cIiBvciBcIi4uXCIgZXZlci5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbiBvbmx5IHN3YWxsb3cgXCIuZm9vXCIgd2hlbiBleHBsaWNpdGx5IGFza2VkLlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN3YWxsb3dlZSA9PT0gJy4nIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dhbGxvd2VlID09PSAnLi4nIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCFvcHRpb25zLmRvdCAmJiBzd2FsbG93ZWUuY2hhckF0KDApID09PSAnLicpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWJ1ZygnZG90IGRldGVjdGVkIScsIGZpbGUsIGZyLCBwYXR0ZXJuLCBwcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAqKiBzd2FsbG93cyBhIHNlZ21lbnQsIGFuZCBjb250aW51ZS5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVidWcoJ2dsb2JzdGFyIHN3YWxsb3cgYSBzZWdtZW50LCBhbmQgY29udGludWUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyKys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gbm8gbWF0Y2ggd2FzIGZvdW5kLlxuICAgICAgICAgICAgICAgIC8vIEhvd2V2ZXIsIGluIHBhcnRpYWwgbW9kZSwgd2UgY2FuJ3Qgc2F5IHRoaXMgaXMgbmVjZXNzYXJpbHkgb3Zlci5cbiAgICAgICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgICAgICAgICBpZiAocGFydGlhbCkge1xuICAgICAgICAgICAgICAgICAgICAvLyByYW4gb3V0IG9mIGZpbGVcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWJ1ZygnXFxuPj4+IG5vIG1hdGNoLCBwYXJ0aWFsPycsIGZpbGUsIGZyLCBwYXR0ZXJuLCBwcik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmciA9PT0gZmwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gc29tZXRoaW5nIG90aGVyIHRoYW4gKipcbiAgICAgICAgICAgIC8vIG5vbi1tYWdpYyBwYXR0ZXJucyBqdXN0IGhhdmUgdG8gbWF0Y2ggZXhhY3RseVxuICAgICAgICAgICAgLy8gcGF0dGVybnMgd2l0aCBtYWdpYyBoYXZlIGJlZW4gdHVybmVkIGludG8gcmVnZXhwcy5cbiAgICAgICAgICAgIGxldCBoaXQ7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHAgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgaGl0ID0gZiA9PT0gcDtcbiAgICAgICAgICAgICAgICB0aGlzLmRlYnVnKCdzdHJpbmcgbWF0Y2gnLCBwLCBmLCBoaXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaGl0ID0gcC50ZXN0KGYpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGVidWcoJ3BhdHRlcm4gbWF0Y2gnLCBwLCBmLCBoaXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFoaXQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIE5vdGU6IGVuZGluZyBpbiAvIG1lYW5zIHRoYXQgd2UnbGwgZ2V0IGEgZmluYWwgXCJcIlxuICAgICAgICAvLyBhdCB0aGUgZW5kIG9mIHRoZSBwYXR0ZXJuLiAgVGhpcyBjYW4gb25seSBtYXRjaCBhXG4gICAgICAgIC8vIGNvcnJlc3BvbmRpbmcgXCJcIiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLlxuICAgICAgICAvLyBJZiB0aGUgZmlsZSBlbmRzIGluIC8sIHRoZW4gaXQgY2FuIG9ubHkgbWF0Y2ggYVxuICAgICAgICAvLyBhIHBhdHRlcm4gdGhhdCBlbmRzIGluIC8sIHVubGVzcyB0aGUgcGF0dGVybiBqdXN0XG4gICAgICAgIC8vIGRvZXNuJ3QgaGF2ZSBhbnkgbW9yZSBmb3IgaXQuIEJ1dCwgYS9iLyBzaG91bGQgKm5vdCpcbiAgICAgICAgLy8gbWF0Y2ggXCJhL2IvKlwiLCBldmVuIHRob3VnaCBcIlwiIG1hdGNoZXMgYWdhaW5zdCB0aGVcbiAgICAgICAgLy8gW14vXSo/IHBhdHRlcm4sIGV4Y2VwdCBpbiBwYXJ0aWFsIG1vZGUsIHdoZXJlIGl0IG1pZ2h0XG4gICAgICAgIC8vIHNpbXBseSBub3QgYmUgcmVhY2hlZCB5ZXQuXG4gICAgICAgIC8vIEhvd2V2ZXIsIGEvYi8gc2hvdWxkIHN0aWxsIHNhdGlzZnkgYS8qXG4gICAgICAgIC8vIG5vdyBlaXRoZXIgd2UgZmVsbCBvZmYgdGhlIGVuZCBvZiB0aGUgcGF0dGVybiwgb3Igd2UncmUgZG9uZS5cbiAgICAgICAgaWYgKGZpID09PSBmbCAmJiBwaSA9PT0gcGwpIHtcbiAgICAgICAgICAgIC8vIHJhbiBvdXQgb2YgcGF0dGVybiBhbmQgZmlsZW5hbWUgYXQgdGhlIHNhbWUgdGltZS5cbiAgICAgICAgICAgIC8vIGFuIGV4YWN0IGhpdCFcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGZpID09PSBmbCkge1xuICAgICAgICAgICAgLy8gcmFuIG91dCBvZiBmaWxlLCBidXQgc3RpbGwgaGFkIHBhdHRlcm4gbGVmdC5cbiAgICAgICAgICAgIC8vIHRoaXMgaXMgb2sgaWYgd2UncmUgZG9pbmcgdGhlIG1hdGNoIGFzIHBhcnQgb2ZcbiAgICAgICAgICAgIC8vIGEgZ2xvYiBmcyB0cmF2ZXJzYWwuXG4gICAgICAgICAgICByZXR1cm4gcGFydGlhbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwaSA9PT0gcGwpIHtcbiAgICAgICAgICAgIC8vIHJhbiBvdXQgb2YgcGF0dGVybiwgc3RpbGwgaGF2ZSBmaWxlIGxlZnQuXG4gICAgICAgICAgICAvLyB0aGlzIGlzIG9ubHkgYWNjZXB0YWJsZSBpZiB3ZSdyZSBvbiB0aGUgdmVyeSBsYXN0XG4gICAgICAgICAgICAvLyBlbXB0eSBzZWdtZW50IG9mIGEgZmlsZSB3aXRoIGEgdHJhaWxpbmcgc2xhc2guXG4gICAgICAgICAgICAvLyBhLyogc2hvdWxkIG1hdGNoIGEvYi9cbiAgICAgICAgICAgIHJldHVybiBmaSA9PT0gZmwgLSAxICYmIGZpbGVbZmldID09PSAnJztcbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gc2hvdWxkIGJlIHVucmVhY2hhYmxlLlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd3dGY/Jyk7XG4gICAgICAgIH1cbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICB9XG4gICAgYnJhY2VFeHBhbmQoKSB7XG4gICAgICAgIHJldHVybiAoMCwgZXhwb3J0cy5icmFjZUV4cGFuZCkodGhpcy5wYXR0ZXJuLCB0aGlzLm9wdGlvbnMpO1xuICAgIH1cbiAgICBwYXJzZShwYXR0ZXJuKSB7XG4gICAgICAgICgwLCBhc3NlcnRfdmFsaWRfcGF0dGVybl9qc18xLmFzc2VydFZhbGlkUGF0dGVybikocGF0dGVybik7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIC8vIHNob3J0Y3V0c1xuICAgICAgICBpZiAocGF0dGVybiA9PT0gJyoqJylcbiAgICAgICAgICAgIHJldHVybiBleHBvcnRzLkdMT0JTVEFSO1xuICAgICAgICBpZiAocGF0dGVybiA9PT0gJycpXG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIC8vIGZhciBhbmQgYXdheSwgdGhlIG1vc3QgY29tbW9uIGdsb2IgcGF0dGVybiBwYXJ0cyBhcmVcbiAgICAgICAgLy8gKiwgKi4qLCBhbmQgKi48ZXh0PiAgQWRkIGEgZmFzdCBjaGVjayBtZXRob2QgZm9yIHRob3NlLlxuICAgICAgICBsZXQgbTtcbiAgICAgICAgbGV0IGZhc3RUZXN0ID0gbnVsbDtcbiAgICAgICAgaWYgKChtID0gcGF0dGVybi5tYXRjaChzdGFyUkUpKSkge1xuICAgICAgICAgICAgZmFzdFRlc3QgPSBvcHRpb25zLmRvdCA/IHN0YXJUZXN0RG90IDogc3RhclRlc3Q7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoKG0gPSBwYXR0ZXJuLm1hdGNoKHN0YXJEb3RFeHRSRSkpKSB7XG4gICAgICAgICAgICBmYXN0VGVzdCA9IChvcHRpb25zLm5vY2FzZVxuICAgICAgICAgICAgICAgID8gb3B0aW9ucy5kb3RcbiAgICAgICAgICAgICAgICAgICAgPyBzdGFyRG90RXh0VGVzdE5vY2FzZURvdFxuICAgICAgICAgICAgICAgICAgICA6IHN0YXJEb3RFeHRUZXN0Tm9jYXNlXG4gICAgICAgICAgICAgICAgOiBvcHRpb25zLmRvdFxuICAgICAgICAgICAgICAgICAgICA/IHN0YXJEb3RFeHRUZXN0RG90XG4gICAgICAgICAgICAgICAgICAgIDogc3RhckRvdEV4dFRlc3QpKG1bMV0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKChtID0gcGF0dGVybi5tYXRjaChxbWFya3NSRSkpKSB7XG4gICAgICAgICAgICBmYXN0VGVzdCA9IChvcHRpb25zLm5vY2FzZVxuICAgICAgICAgICAgICAgID8gb3B0aW9ucy5kb3RcbiAgICAgICAgICAgICAgICAgICAgPyBxbWFya3NUZXN0Tm9jYXNlRG90XG4gICAgICAgICAgICAgICAgICAgIDogcW1hcmtzVGVzdE5vY2FzZVxuICAgICAgICAgICAgICAgIDogb3B0aW9ucy5kb3RcbiAgICAgICAgICAgICAgICAgICAgPyBxbWFya3NUZXN0RG90XG4gICAgICAgICAgICAgICAgICAgIDogcW1hcmtzVGVzdCkobSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoKG0gPSBwYXR0ZXJuLm1hdGNoKHN0YXJEb3RTdGFyUkUpKSkge1xuICAgICAgICAgICAgZmFzdFRlc3QgPSBvcHRpb25zLmRvdCA/IHN0YXJEb3RTdGFyVGVzdERvdCA6IHN0YXJEb3RTdGFyVGVzdDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICgobSA9IHBhdHRlcm4ubWF0Y2goZG90U3RhclJFKSkpIHtcbiAgICAgICAgICAgIGZhc3RUZXN0ID0gZG90U3RhclRlc3Q7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmUgPSBhc3RfanNfMS5BU1QuZnJvbUdsb2IocGF0dGVybiwgdGhpcy5vcHRpb25zKS50b01NUGF0dGVybigpO1xuICAgICAgICBpZiAoZmFzdFRlc3QgJiYgdHlwZW9mIHJlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgLy8gQXZvaWRzIG92ZXJyaWRpbmcgaW4gZnJvemVuIGVudmlyb25tZW50c1xuICAgICAgICAgICAgUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eShyZSwgJ3Rlc3QnLCB7IHZhbHVlOiBmYXN0VGVzdCB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmU7XG4gICAgfVxuICAgIG1ha2VSZSgpIHtcbiAgICAgICAgaWYgKHRoaXMucmVnZXhwIHx8IHRoaXMucmVnZXhwID09PSBmYWxzZSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlZ2V4cDtcbiAgICAgICAgLy8gYXQgdGhpcyBwb2ludCwgdGhpcy5zZXQgaXMgYSAyZCBhcnJheSBvZiBwYXJ0aWFsXG4gICAgICAgIC8vIHBhdHRlcm4gc3RyaW5ncywgb3IgXCIqKlwiLlxuICAgICAgICAvL1xuICAgICAgICAvLyBJdCdzIGJldHRlciB0byB1c2UgLm1hdGNoKCkuICBUaGlzIGZ1bmN0aW9uIHNob3VsZG4ndFxuICAgICAgICAvLyBiZSB1c2VkLCByZWFsbHksIGJ1dCBpdCdzIHByZXR0eSBjb252ZW5pZW50IHNvbWV0aW1lcyxcbiAgICAgICAgLy8gd2hlbiB5b3UganVzdCB3YW50IHRvIHdvcmsgd2l0aCBhIHJlZ2V4LlxuICAgICAgICBjb25zdCBzZXQgPSB0aGlzLnNldDtcbiAgICAgICAgaWYgKCFzZXQubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnJlZ2V4cCA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVnZXhwO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGNvbnN0IHR3b1N0YXIgPSBvcHRpb25zLm5vZ2xvYnN0YXJcbiAgICAgICAgICAgID8gc3RhclxuICAgICAgICAgICAgOiBvcHRpb25zLmRvdFxuICAgICAgICAgICAgICAgID8gdHdvU3RhckRvdFxuICAgICAgICAgICAgICAgIDogdHdvU3Rhck5vRG90O1xuICAgICAgICBjb25zdCBmbGFncyA9IG5ldyBTZXQob3B0aW9ucy5ub2Nhc2UgPyBbJ2knXSA6IFtdKTtcbiAgICAgICAgLy8gcmVnZXhwaWZ5IG5vbi1nbG9ic3RhciBwYXR0ZXJuc1xuICAgICAgICAvLyBpZiAqKiBpcyBvbmx5IGl0ZW0sIHRoZW4gd2UganVzdCBkbyBvbmUgdHdvU3RhclxuICAgICAgICAvLyBpZiAqKiBpcyBmaXJzdCwgYW5kIHRoZXJlIGFyZSBtb3JlLCBwcmVwZW5kIChcXC98dHdvU3RhclxcLyk/IHRvIG5leHRcbiAgICAgICAgLy8gaWYgKiogaXMgbGFzdCwgYXBwZW5kIChcXC90d29TdGFyfCkgdG8gcHJldmlvdXNcbiAgICAgICAgLy8gaWYgKiogaXMgaW4gdGhlIG1pZGRsZSwgYXBwZW5kIChcXC98XFwvdHdvU3RhclxcLykgdG8gcHJldmlvdXNcbiAgICAgICAgLy8gdGhlbiBmaWx0ZXIgb3V0IEdMT0JTVEFSIHN5bWJvbHNcbiAgICAgICAgbGV0IHJlID0gc2V0XG4gICAgICAgICAgICAubWFwKHBhdHRlcm4gPT4ge1xuICAgICAgICAgICAgY29uc3QgcHAgPSBwYXR0ZXJuLm1hcChwID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGYgb2YgcC5mbGFncy5zcGxpdCgnJykpXG4gICAgICAgICAgICAgICAgICAgICAgICBmbGFncy5hZGQoZik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2YgcCA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgICAgPyByZWdFeHBFc2NhcGUocClcbiAgICAgICAgICAgICAgICAgICAgOiBwID09PSBleHBvcnRzLkdMT0JTVEFSXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGV4cG9ydHMuR0xPQlNUQVJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogcC5fc3JjO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwcC5mb3JFYWNoKChwLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IHBwW2kgKyAxXTtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2ID0gcHBbaSAtIDFdO1xuICAgICAgICAgICAgICAgIGlmIChwICE9PSBleHBvcnRzLkdMT0JTVEFSIHx8IHByZXYgPT09IGV4cG9ydHMuR0xPQlNUQVIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocHJldiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0ICE9PSB1bmRlZmluZWQgJiYgbmV4dCAhPT0gZXhwb3J0cy5HTE9CU1RBUikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHBbaSArIDFdID0gJyg/OlxcXFwvfCcgKyB0d29TdGFyICsgJ1xcXFwvKT8nICsgbmV4dDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBwW2ldID0gdHdvU3RhcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChuZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcHBbaSAtIDFdID0gcHJldiArICcoPzpcXFxcL3wnICsgdHdvU3RhciArICcpPyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5leHQgIT09IGV4cG9ydHMuR0xPQlNUQVIpIHtcbiAgICAgICAgICAgICAgICAgICAgcHBbaSAtIDFdID0gcHJldiArICcoPzpcXFxcL3xcXFxcLycgKyB0d29TdGFyICsgJ1xcXFwvKScgKyBuZXh0O1xuICAgICAgICAgICAgICAgICAgICBwcFtpICsgMV0gPSBleHBvcnRzLkdMT0JTVEFSO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHBwLmZpbHRlcihwID0+IHAgIT09IGV4cG9ydHMuR0xPQlNUQVIpLmpvaW4oJy8nKTtcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC5qb2luKCd8Jyk7XG4gICAgICAgIC8vIG5lZWQgdG8gd3JhcCBpbiBwYXJlbnMgaWYgd2UgaGFkIG1vcmUgdGhhbiBvbmUgdGhpbmcgd2l0aCB8LFxuICAgICAgICAvLyBvdGhlcndpc2Ugb25seSB0aGUgZmlyc3Qgd2lsbCBiZSBhbmNob3JlZCB0byBeIGFuZCB0aGUgbGFzdCB0byAkXG4gICAgICAgIGNvbnN0IFtvcGVuLCBjbG9zZV0gPSBzZXQubGVuZ3RoID4gMSA/IFsnKD86JywgJyknXSA6IFsnJywgJyddO1xuICAgICAgICAvLyBtdXN0IG1hdGNoIGVudGlyZSBwYXR0ZXJuXG4gICAgICAgIC8vIGVuZGluZyBpbiBhICogb3IgKiogd2lsbCBtYWtlIGl0IGxlc3Mgc3RyaWN0LlxuICAgICAgICByZSA9ICdeJyArIG9wZW4gKyByZSArIGNsb3NlICsgJyQnO1xuICAgICAgICAvLyBjYW4gbWF0Y2ggYW55dGhpbmcsIGFzIGxvbmcgYXMgaXQncyBub3QgdGhpcy5cbiAgICAgICAgaWYgKHRoaXMubmVnYXRlKVxuICAgICAgICAgICAgcmUgPSAnXig/IScgKyByZSArICcpLiskJztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMucmVnZXhwID0gbmV3IFJlZ0V4cChyZSwgWy4uLmZsYWdzXS5qb2luKCcnKSk7XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXgpIHtcbiAgICAgICAgICAgIC8vIHNob3VsZCBiZSBpbXBvc3NpYmxlXG4gICAgICAgICAgICB0aGlzLnJlZ2V4cCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIHJldHVybiB0aGlzLnJlZ2V4cDtcbiAgICB9XG4gICAgc2xhc2hTcGxpdChwKSB7XG4gICAgICAgIC8vIGlmIHAgc3RhcnRzIHdpdGggLy8gb24gd2luZG93cywgd2UgcHJlc2VydmUgdGhhdFxuICAgICAgICAvLyBzbyB0aGF0IFVOQyBwYXRocyBhcmVuJ3QgYnJva2VuLiAgT3RoZXJ3aXNlLCBhbnkgbnVtYmVyIG9mXG4gICAgICAgIC8vIC8gY2hhcmFjdGVycyBhcmUgY29hbGVzY2VkIGludG8gb25lLCB1bmxlc3NcbiAgICAgICAgLy8gcHJlc2VydmVNdWx0aXBsZVNsYXNoZXMgaXMgc2V0IHRvIHRydWUuXG4gICAgICAgIGlmICh0aGlzLnByZXNlcnZlTXVsdGlwbGVTbGFzaGVzKSB7XG4gICAgICAgICAgICByZXR1cm4gcC5zcGxpdCgnLycpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuaXNXaW5kb3dzICYmIC9eXFwvXFwvW15cXC9dKy8udGVzdChwKSkge1xuICAgICAgICAgICAgLy8gYWRkIGFuIGV4dHJhICcnIGZvciB0aGUgb25lIHdlIGxvc2VcbiAgICAgICAgICAgIHJldHVybiBbJycsIC4uLnAuc3BsaXQoL1xcLysvKV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gcC5zcGxpdCgvXFwvKy8pO1xuICAgICAgICB9XG4gICAgfVxuICAgIG1hdGNoKGYsIHBhcnRpYWwgPSB0aGlzLnBhcnRpYWwpIHtcbiAgICAgICAgdGhpcy5kZWJ1ZygnbWF0Y2gnLCBmLCB0aGlzLnBhdHRlcm4pO1xuICAgICAgICAvLyBzaG9ydC1jaXJjdWl0IGluIHRoZSBjYXNlIG9mIGJ1c3RlZCB0aGluZ3MuXG4gICAgICAgIC8vIGNvbW1lbnRzLCBldGMuXG4gICAgICAgIGlmICh0aGlzLmNvbW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5lbXB0eSkge1xuICAgICAgICAgICAgcmV0dXJuIGYgPT09ICcnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmID09PSAnLycgJiYgcGFydGlhbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgLy8gd2luZG93czogbmVlZCB0byB1c2UgLywgbm90IFxcXG4gICAgICAgIGlmICh0aGlzLmlzV2luZG93cykge1xuICAgICAgICAgICAgZiA9IGYuc3BsaXQoJ1xcXFwnKS5qb2luKCcvJyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gdHJlYXQgdGhlIHRlc3QgcGF0aCBhcyBhIHNldCBvZiBwYXRocGFydHMuXG4gICAgICAgIGNvbnN0IGZmID0gdGhpcy5zbGFzaFNwbGl0KGYpO1xuICAgICAgICB0aGlzLmRlYnVnKHRoaXMucGF0dGVybiwgJ3NwbGl0JywgZmYpO1xuICAgICAgICAvLyBqdXN0IE9ORSBvZiB0aGUgcGF0dGVybiBzZXRzIGluIHRoaXMuc2V0IG5lZWRzIHRvIG1hdGNoXG4gICAgICAgIC8vIGluIG9yZGVyIGZvciBpdCB0byBiZSB2YWxpZC4gIElmIG5lZ2F0aW5nLCB0aGVuIGp1c3Qgb25lXG4gICAgICAgIC8vIG1hdGNoIG1lYW5zIHRoYXQgd2UgaGF2ZSBmYWlsZWQuXG4gICAgICAgIC8vIEVpdGhlciB3YXksIHJldHVybiBvbiB0aGUgZmlyc3QgaGl0LlxuICAgICAgICBjb25zdCBzZXQgPSB0aGlzLnNldDtcbiAgICAgICAgdGhpcy5kZWJ1Zyh0aGlzLnBhdHRlcm4sICdzZXQnLCBzZXQpO1xuICAgICAgICAvLyBGaW5kIHRoZSBiYXNlbmFtZSBvZiB0aGUgcGF0aCBieSBsb29raW5nIGZvciB0aGUgbGFzdCBub24tZW1wdHkgc2VnbWVudFxuICAgICAgICBsZXQgZmlsZW5hbWUgPSBmZltmZi5sZW5ndGggLSAxXTtcbiAgICAgICAgaWYgKCFmaWxlbmFtZSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IGZmLmxlbmd0aCAtIDI7ICFmaWxlbmFtZSAmJiBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gZmZbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZXQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHBhdHRlcm4gPSBzZXRbaV07XG4gICAgICAgICAgICBsZXQgZmlsZSA9IGZmO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMubWF0Y2hCYXNlICYmIHBhdHRlcm4ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgZmlsZSA9IFtmaWxlbmFtZV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBoaXQgPSB0aGlzLm1hdGNoT25lKGZpbGUsIHBhdHRlcm4sIHBhcnRpYWwpO1xuICAgICAgICAgICAgaWYgKGhpdCkge1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmZsaXBOZWdhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAhdGhpcy5uZWdhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gZGlkbid0IGdldCBhbnkgaGl0cy4gIHRoaXMgaXMgc3VjY2VzcyBpZiBpdCdzIGEgbmVnYXRpdmVcbiAgICAgICAgLy8gcGF0dGVybiwgZmFpbHVyZSBvdGhlcndpc2UuXG4gICAgICAgIGlmIChvcHRpb25zLmZsaXBOZWdhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5uZWdhdGU7XG4gICAgfVxuICAgIHN0YXRpYyBkZWZhdWx0cyhkZWYpIHtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMubWluaW1hdGNoLmRlZmF1bHRzKGRlZikuTWluaW1hdGNoO1xuICAgIH1cbn1cbmV4cG9ydHMuTWluaW1hdGNoID0gTWluaW1hdGNoO1xuLyogYzggaWdub3JlIHN0YXJ0ICovXG52YXIgYXN0X2pzXzIgPSByZXF1aXJlKFwiLi9hc3QuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJBU1RcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFzdF9qc18yLkFTVDsgfSB9KTtcbnZhciBlc2NhcGVfanNfMiA9IHJlcXVpcmUoXCIuL2VzY2FwZS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImVzY2FwZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZXNjYXBlX2pzXzIuZXNjYXBlOyB9IH0pO1xudmFyIHVuZXNjYXBlX2pzXzIgPSByZXF1aXJlKFwiLi91bmVzY2FwZS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInVuZXNjYXBlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB1bmVzY2FwZV9qc18yLnVuZXNjYXBlOyB9IH0pO1xuLyogYzggaWdub3JlIHN0b3AgKi9cbmV4cG9ydHMubWluaW1hdGNoLkFTVCA9IGFzdF9qc18xLkFTVDtcbmV4cG9ydHMubWluaW1hdGNoLk1pbmltYXRjaCA9IE1pbmltYXRjaDtcbmV4cG9ydHMubWluaW1hdGNoLmVzY2FwZSA9IGVzY2FwZV9qc18xLmVzY2FwZTtcbmV4cG9ydHMubWluaW1hdGNoLnVuZXNjYXBlID0gdW5lc2NhcGVfanNfMS51bmVzY2FwZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKipcbiAqIEBtb2R1bGUgTFJVQ2FjaGVcbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5MUlVDYWNoZSA9IHZvaWQgMDtcbmNvbnN0IHBlcmYgPSB0eXBlb2YgcGVyZm9ybWFuY2UgPT09ICdvYmplY3QnICYmXG4gICAgcGVyZm9ybWFuY2UgJiZcbiAgICB0eXBlb2YgcGVyZm9ybWFuY2Uubm93ID09PSAnZnVuY3Rpb24nXG4gICAgPyBwZXJmb3JtYW5jZVxuICAgIDogRGF0ZTtcbmNvbnN0IHdhcm5lZCA9IG5ldyBTZXQoKTtcbi8qIGM4IGlnbm9yZSBzdGFydCAqL1xuY29uc3QgUFJPQ0VTUyA9ICh0eXBlb2YgcHJvY2VzcyA9PT0gJ29iamVjdCcgJiYgISFwcm9jZXNzID8gcHJvY2VzcyA6IHt9KTtcbi8qIGM4IGlnbm9yZSBzdGFydCAqL1xuY29uc3QgZW1pdFdhcm5pbmcgPSAobXNnLCB0eXBlLCBjb2RlLCBmbikgPT4ge1xuICAgIHR5cGVvZiBQUk9DRVNTLmVtaXRXYXJuaW5nID09PSAnZnVuY3Rpb24nXG4gICAgICAgID8gUFJPQ0VTUy5lbWl0V2FybmluZyhtc2csIHR5cGUsIGNvZGUsIGZuKVxuICAgICAgICA6IGNvbnNvbGUuZXJyb3IoYFske2NvZGV9XSAke3R5cGV9OiAke21zZ31gKTtcbn07XG5sZXQgQUMgPSBnbG9iYWxUaGlzLkFib3J0Q29udHJvbGxlcjtcbmxldCBBUyA9IGdsb2JhbFRoaXMuQWJvcnRTaWduYWw7XG4vKiBjOCBpZ25vcmUgc3RhcnQgKi9cbmlmICh0eXBlb2YgQUMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgLy9AdHMtaWdub3JlXG4gICAgQVMgPSBjbGFzcyBBYm9ydFNpZ25hbCB7XG4gICAgICAgIG9uYWJvcnQ7XG4gICAgICAgIF9vbmFib3J0ID0gW107XG4gICAgICAgIHJlYXNvbjtcbiAgICAgICAgYWJvcnRlZCA9IGZhbHNlO1xuICAgICAgICBhZGRFdmVudExpc3RlbmVyKF8sIGZuKSB7XG4gICAgICAgICAgICB0aGlzLl9vbmFib3J0LnB1c2goZm4pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICAvL0B0cy1pZ25vcmVcbiAgICBBQyA9IGNsYXNzIEFib3J0Q29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgd2FybkFDUG9seWZpbGwoKTtcbiAgICAgICAgfVxuICAgICAgICBzaWduYWwgPSBuZXcgQVMoKTtcbiAgICAgICAgYWJvcnQocmVhc29uKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zaWduYWwuYWJvcnRlZClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAvL0B0cy1pZ25vcmVcbiAgICAgICAgICAgIHRoaXMuc2lnbmFsLnJlYXNvbiA9IHJlYXNvbjtcbiAgICAgICAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgICAgICAgdGhpcy5zaWduYWwuYWJvcnRlZCA9IHRydWU7XG4gICAgICAgICAgICAvL0B0cy1pZ25vcmVcbiAgICAgICAgICAgIGZvciAoY29uc3QgZm4gb2YgdGhpcy5zaWduYWwuX29uYWJvcnQpIHtcbiAgICAgICAgICAgICAgICBmbihyZWFzb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zaWduYWwub25hYm9ydD8uKHJlYXNvbik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGxldCBwcmludEFDUG9seWZpbGxXYXJuaW5nID0gUFJPQ0VTUy5lbnY/LkxSVV9DQUNIRV9JR05PUkVfQUNfV0FSTklORyAhPT0gJzEnO1xuICAgIGNvbnN0IHdhcm5BQ1BvbHlmaWxsID0gKCkgPT4ge1xuICAgICAgICBpZiAoIXByaW50QUNQb2x5ZmlsbFdhcm5pbmcpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHByaW50QUNQb2x5ZmlsbFdhcm5pbmcgPSBmYWxzZTtcbiAgICAgICAgZW1pdFdhcm5pbmcoJ0Fib3J0Q29udHJvbGxlciBpcyBub3QgZGVmaW5lZC4gSWYgdXNpbmcgbHJ1LWNhY2hlIGluICcgK1xuICAgICAgICAgICAgJ25vZGUgMTQsIGxvYWQgYW4gQWJvcnRDb250cm9sbGVyIHBvbHlmaWxsIGZyb20gdGhlICcgK1xuICAgICAgICAgICAgJ2Bub2RlLWFib3J0LWNvbnRyb2xsZXJgIHBhY2thZ2UuIEEgbWluaW1hbCBwb2x5ZmlsbCBpcyAnICtcbiAgICAgICAgICAgICdwcm92aWRlZCBmb3IgdXNlIGJ5IExSVUNhY2hlLmZldGNoKCksIGJ1dCBpdCBzaG91bGQgbm90IGJlICcgK1xuICAgICAgICAgICAgJ3JlbGllZCB1cG9uIGluIG90aGVyIGNvbnRleHRzIChlZywgcGFzc2luZyBpdCB0byBvdGhlciBBUElzIHRoYXQgJyArXG4gICAgICAgICAgICAndXNlIEFib3J0Q29udHJvbGxlci9BYm9ydFNpZ25hbCBtaWdodCBoYXZlIHVuZGVzaXJhYmxlIGVmZmVjdHMpLiAnICtcbiAgICAgICAgICAgICdZb3UgbWF5IGRpc2FibGUgdGhpcyB3aXRoIExSVV9DQUNIRV9JR05PUkVfQUNfV0FSTklORz0xIGluIHRoZSBlbnYuJywgJ05PX0FCT1JUX0NPTlRST0xMRVInLCAnRU5PVFNVUCcsIHdhcm5BQ1BvbHlmaWxsKTtcbiAgICB9O1xufVxuLyogYzggaWdub3JlIHN0b3AgKi9cbmNvbnN0IHNob3VsZFdhcm4gPSAoY29kZSkgPT4gIXdhcm5lZC5oYXMoY29kZSk7XG5jb25zdCBUWVBFID0gU3ltYm9sKCd0eXBlJyk7XG5jb25zdCBpc1Bvc0ludCA9IChuKSA9PiBuICYmIG4gPT09IE1hdGguZmxvb3IobikgJiYgbiA+IDAgJiYgaXNGaW5pdGUobik7XG4vKiBjOCBpZ25vcmUgc3RhcnQgKi9cbi8vIFRoaXMgaXMgYSBsaXR0bGUgYml0IHJpZGljdWxvdXMsIHRiaC5cbi8vIFRoZSBtYXhpbXVtIGFycmF5IGxlbmd0aCBpcyAyXjMyLTEgb3IgdGhlcmVhYm91dHMgb24gbW9zdCBKUyBpbXBscy5cbi8vIEFuZCB3ZWxsIGJlZm9yZSB0aGF0IHBvaW50LCB5b3UncmUgY2FjaGluZyB0aGUgZW50aXJlIHdvcmxkLCBJIG1lYW4sXG4vLyB0aGF0J3MgfjMyR0Igb2YganVzdCBpbnRlZ2VycyBmb3IgdGhlIG5leHQvcHJldiBsaW5rcywgcGx1cyB3aGF0ZXZlclxuLy8gZWxzZSB0byBob2xkIHRoYXQgbWFueSBrZXlzIGFuZCB2YWx1ZXMuICBKdXN0IGZpbGxpbmcgdGhlIG1lbW9yeSB3aXRoXG4vLyB6ZXJvZXMgYXQgaW5pdCB0aW1lIGlzIGJydXRhbCB3aGVuIHlvdSBnZXQgdGhhdCBiaWcuXG4vLyBCdXQgd2h5IG5vdCBiZSBjb21wbGV0ZT9cbi8vIE1heWJlIGluIHRoZSBmdXR1cmUsIHRoZXNlIGxpbWl0cyB3aWxsIGhhdmUgZXhwYW5kZWQuXG5jb25zdCBnZXRVaW50QXJyYXkgPSAobWF4KSA9PiAhaXNQb3NJbnQobWF4KVxuICAgID8gbnVsbFxuICAgIDogbWF4IDw9IE1hdGgucG93KDIsIDgpXG4gICAgICAgID8gVWludDhBcnJheVxuICAgICAgICA6IG1heCA8PSBNYXRoLnBvdygyLCAxNilcbiAgICAgICAgICAgID8gVWludDE2QXJyYXlcbiAgICAgICAgICAgIDogbWF4IDw9IE1hdGgucG93KDIsIDMyKVxuICAgICAgICAgICAgICAgID8gVWludDMyQXJyYXlcbiAgICAgICAgICAgICAgICA6IG1heCA8PSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUlxuICAgICAgICAgICAgICAgICAgICA/IFplcm9BcnJheVxuICAgICAgICAgICAgICAgICAgICA6IG51bGw7XG4vKiBjOCBpZ25vcmUgc3RvcCAqL1xuY2xhc3MgWmVyb0FycmF5IGV4dGVuZHMgQXJyYXkge1xuICAgIGNvbnN0cnVjdG9yKHNpemUpIHtcbiAgICAgICAgc3VwZXIoc2l6ZSk7XG4gICAgICAgIHRoaXMuZmlsbCgwKTtcbiAgICB9XG59XG5jbGFzcyBTdGFjayB7XG4gICAgaGVhcDtcbiAgICBsZW5ndGg7XG4gICAgLy8gcHJpdmF0ZSBjb25zdHJ1Y3RvclxuICAgIHN0YXRpYyAjY29uc3RydWN0aW5nID0gZmFsc2U7XG4gICAgc3RhdGljIGNyZWF0ZShtYXgpIHtcbiAgICAgICAgY29uc3QgSGVhcENscyA9IGdldFVpbnRBcnJheShtYXgpO1xuICAgICAgICBpZiAoIUhlYXBDbHMpXG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIFN0YWNrLiNjb25zdHJ1Y3RpbmcgPSB0cnVlO1xuICAgICAgICBjb25zdCBzID0gbmV3IFN0YWNrKG1heCwgSGVhcENscyk7XG4gICAgICAgIFN0YWNrLiNjb25zdHJ1Y3RpbmcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHM7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKG1heCwgSGVhcENscykge1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgaWYgKCFTdGFjay4jY29uc3RydWN0aW5nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnN0YW50aWF0ZSBTdGFjayB1c2luZyBTdGFjay5jcmVhdGUobiknKTtcbiAgICAgICAgfVxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICB0aGlzLmhlYXAgPSBuZXcgSGVhcENscyhtYXgpO1xuICAgICAgICB0aGlzLmxlbmd0aCA9IDA7XG4gICAgfVxuICAgIHB1c2gobikge1xuICAgICAgICB0aGlzLmhlYXBbdGhpcy5sZW5ndGgrK10gPSBuO1xuICAgIH1cbiAgICBwb3AoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhlYXBbLS10aGlzLmxlbmd0aF07XG4gICAgfVxufVxuLyoqXG4gKiBEZWZhdWx0IGV4cG9ydCwgdGhlIHRoaW5nIHlvdSdyZSB1c2luZyB0aGlzIG1vZHVsZSB0byBnZXQuXG4gKlxuICogVGhlIGBLYCBhbmQgYFZgIHR5cGVzIGRlZmluZSB0aGUga2V5IGFuZCB2YWx1ZSB0eXBlcywgcmVzcGVjdGl2ZWx5LiBUaGVcbiAqIG9wdGlvbmFsIGBGQ2AgdHlwZSBkZWZpbmVzIHRoZSB0eXBlIG9mIHRoZSBgY29udGV4dGAgb2JqZWN0IHBhc3NlZCB0b1xuICogYGNhY2hlLmZldGNoKClgIGFuZCBgY2FjaGUubWVtbygpYC5cbiAqXG4gKiBLZXlzIGFuZCB2YWx1ZXMgKiptdXN0IG5vdCoqIGJlIGBudWxsYCBvciBgdW5kZWZpbmVkYC5cbiAqXG4gKiBBbGwgcHJvcGVydGllcyBmcm9tIHRoZSBvcHRpb25zIG9iamVjdCAod2l0aCB0aGUgZXhjZXB0aW9uIG9mIGBtYXhgLFxuICogYG1heFNpemVgLCBgZmV0Y2hNZXRob2RgLCBgbWVtb01ldGhvZGAsIGBkaXNwb3NlYCBhbmQgYGRpc3Bvc2VBZnRlcmApIGFyZVxuICogYWRkZWQgYXMgbm9ybWFsIHB1YmxpYyBtZW1iZXJzLiAoVGhlIGxpc3RlZCBvcHRpb25zIGFyZSByZWFkLW9ubHkgZ2V0dGVycy4pXG4gKlxuICogQ2hhbmdpbmcgYW55IG9mIHRoZXNlIHdpbGwgYWx0ZXIgdGhlIGRlZmF1bHRzIGZvciBzdWJzZXF1ZW50IG1ldGhvZCBjYWxscy5cbiAqL1xuY2xhc3MgTFJVQ2FjaGUge1xuICAgIC8vIG9wdGlvbnMgdGhhdCBjYW5ub3QgYmUgY2hhbmdlZCB3aXRob3V0IGRpc2FzdGVyXG4gICAgI21heDtcbiAgICAjbWF4U2l6ZTtcbiAgICAjZGlzcG9zZTtcbiAgICAjZGlzcG9zZUFmdGVyO1xuICAgICNmZXRjaE1ldGhvZDtcbiAgICAjbWVtb01ldGhvZDtcbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UudHRsfVxuICAgICAqL1xuICAgIHR0bDtcbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UudHRsUmVzb2x1dGlvbn1cbiAgICAgKi9cbiAgICB0dGxSZXNvbHV0aW9uO1xuICAgIC8qKlxuICAgICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS50dGxBdXRvcHVyZ2V9XG4gICAgICovXG4gICAgdHRsQXV0b3B1cmdlO1xuICAgIC8qKlxuICAgICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS51cGRhdGVBZ2VPbkdldH1cbiAgICAgKi9cbiAgICB1cGRhdGVBZ2VPbkdldDtcbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UudXBkYXRlQWdlT25IYXN9XG4gICAgICovXG4gICAgdXBkYXRlQWdlT25IYXM7XG4gICAgLyoqXG4gICAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLmFsbG93U3RhbGV9XG4gICAgICovXG4gICAgYWxsb3dTdGFsZTtcbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2Uubm9EaXNwb3NlT25TZXR9XG4gICAgICovXG4gICAgbm9EaXNwb3NlT25TZXQ7XG4gICAgLyoqXG4gICAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLm5vVXBkYXRlVFRMfVxuICAgICAqL1xuICAgIG5vVXBkYXRlVFRMO1xuICAgIC8qKlxuICAgICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5tYXhFbnRyeVNpemV9XG4gICAgICovXG4gICAgbWF4RW50cnlTaXplO1xuICAgIC8qKlxuICAgICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5zaXplQ2FsY3VsYXRpb259XG4gICAgICovXG4gICAgc2l6ZUNhbGN1bGF0aW9uO1xuICAgIC8qKlxuICAgICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5ub0RlbGV0ZU9uRmV0Y2hSZWplY3Rpb259XG4gICAgICovXG4gICAgbm9EZWxldGVPbkZldGNoUmVqZWN0aW9uO1xuICAgIC8qKlxuICAgICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5ub0RlbGV0ZU9uU3RhbGVHZXR9XG4gICAgICovXG4gICAgbm9EZWxldGVPblN0YWxlR2V0O1xuICAgIC8qKlxuICAgICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5hbGxvd1N0YWxlT25GZXRjaEFib3J0fVxuICAgICAqL1xuICAgIGFsbG93U3RhbGVPbkZldGNoQWJvcnQ7XG4gICAgLyoqXG4gICAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLmFsbG93U3RhbGVPbkZldGNoUmVqZWN0aW9ufVxuICAgICAqL1xuICAgIGFsbG93U3RhbGVPbkZldGNoUmVqZWN0aW9uO1xuICAgIC8qKlxuICAgICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5pZ25vcmVGZXRjaEFib3J0fVxuICAgICAqL1xuICAgIGlnbm9yZUZldGNoQWJvcnQ7XG4gICAgLy8gY29tcHV0ZWQgcHJvcGVydGllc1xuICAgICNzaXplO1xuICAgICNjYWxjdWxhdGVkU2l6ZTtcbiAgICAja2V5TWFwO1xuICAgICNrZXlMaXN0O1xuICAgICN2YWxMaXN0O1xuICAgICNuZXh0O1xuICAgICNwcmV2O1xuICAgICNoZWFkO1xuICAgICN0YWlsO1xuICAgICNmcmVlO1xuICAgICNkaXNwb3NlZDtcbiAgICAjc2l6ZXM7XG4gICAgI3N0YXJ0cztcbiAgICAjdHRscztcbiAgICAjaGFzRGlzcG9zZTtcbiAgICAjaGFzRmV0Y2hNZXRob2Q7XG4gICAgI2hhc0Rpc3Bvc2VBZnRlcjtcbiAgICAvKipcbiAgICAgKiBEbyBub3QgY2FsbCB0aGlzIG1ldGhvZCB1bmxlc3MgeW91IG5lZWQgdG8gaW5zcGVjdCB0aGVcbiAgICAgKiBpbm5lciB3b3JraW5ncyBvZiB0aGUgY2FjaGUuICBJZiBhbnl0aGluZyByZXR1cm5lZCBieSB0aGlzXG4gICAgICogb2JqZWN0IGlzIG1vZGlmaWVkIGluIGFueSB3YXksIHN0cmFuZ2UgYnJlYWthZ2UgbWF5IG9jY3VyLlxuICAgICAqXG4gICAgICogVGhlc2UgZmllbGRzIGFyZSBwcml2YXRlIGZvciBhIHJlYXNvbiFcbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHN0YXRpYyB1bnNhZmVFeHBvc2VJbnRlcm5hbHMoYykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLy8gcHJvcGVydGllc1xuICAgICAgICAgICAgc3RhcnRzOiBjLiNzdGFydHMsXG4gICAgICAgICAgICB0dGxzOiBjLiN0dGxzLFxuICAgICAgICAgICAgc2l6ZXM6IGMuI3NpemVzLFxuICAgICAgICAgICAga2V5TWFwOiBjLiNrZXlNYXAsXG4gICAgICAgICAgICBrZXlMaXN0OiBjLiNrZXlMaXN0LFxuICAgICAgICAgICAgdmFsTGlzdDogYy4jdmFsTGlzdCxcbiAgICAgICAgICAgIG5leHQ6IGMuI25leHQsXG4gICAgICAgICAgICBwcmV2OiBjLiNwcmV2LFxuICAgICAgICAgICAgZ2V0IGhlYWQoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGMuI2hlYWQ7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0IHRhaWwoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGMuI3RhaWw7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZnJlZTogYy4jZnJlZSxcbiAgICAgICAgICAgIC8vIG1ldGhvZHNcbiAgICAgICAgICAgIGlzQmFja2dyb3VuZEZldGNoOiAocCkgPT4gYy4jaXNCYWNrZ3JvdW5kRmV0Y2gocCksXG4gICAgICAgICAgICBiYWNrZ3JvdW5kRmV0Y2g6IChrLCBpbmRleCwgb3B0aW9ucywgY29udGV4dCkgPT4gYy4jYmFja2dyb3VuZEZldGNoKGssIGluZGV4LCBvcHRpb25zLCBjb250ZXh0KSxcbiAgICAgICAgICAgIG1vdmVUb1RhaWw6IChpbmRleCkgPT4gYy4jbW92ZVRvVGFpbChpbmRleCksXG4gICAgICAgICAgICBpbmRleGVzOiAob3B0aW9ucykgPT4gYy4jaW5kZXhlcyhvcHRpb25zKSxcbiAgICAgICAgICAgIHJpbmRleGVzOiAob3B0aW9ucykgPT4gYy4jcmluZGV4ZXMob3B0aW9ucyksXG4gICAgICAgICAgICBpc1N0YWxlOiAoaW5kZXgpID0+IGMuI2lzU3RhbGUoaW5kZXgpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICAvLyBQcm90ZWN0ZWQgcmVhZC1vbmx5IG1lbWJlcnNcbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UubWF4fSAocmVhZC1vbmx5KVxuICAgICAqL1xuICAgIGdldCBtYXgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNtYXg7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5tYXhTaXplfSAocmVhZC1vbmx5KVxuICAgICAqL1xuICAgIGdldCBtYXhTaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jbWF4U2l6ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIHRvdGFsIGNvbXB1dGVkIHNpemUgb2YgaXRlbXMgaW4gdGhlIGNhY2hlIChyZWFkLW9ubHkpXG4gICAgICovXG4gICAgZ2V0IGNhbGN1bGF0ZWRTaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jY2FsY3VsYXRlZFNpemU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2YgaXRlbXMgc3RvcmVkIGluIHRoZSBjYWNoZSAocmVhZC1vbmx5KVxuICAgICAqL1xuICAgIGdldCBzaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jc2l6ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLmZldGNoTWV0aG9kfSAocmVhZC1vbmx5KVxuICAgICAqL1xuICAgIGdldCBmZXRjaE1ldGhvZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2ZldGNoTWV0aG9kO1xuICAgIH1cbiAgICBnZXQgbWVtb01ldGhvZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI21lbW9NZXRob2Q7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5kaXNwb3NlfSAocmVhZC1vbmx5KVxuICAgICAqL1xuICAgIGdldCBkaXNwb3NlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jZGlzcG9zZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLmRpc3Bvc2VBZnRlcn0gKHJlYWQtb25seSlcbiAgICAgKi9cbiAgICBnZXQgZGlzcG9zZUFmdGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jZGlzcG9zZUFmdGVyO1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHsgbWF4ID0gMCwgdHRsLCB0dGxSZXNvbHV0aW9uID0gMSwgdHRsQXV0b3B1cmdlLCB1cGRhdGVBZ2VPbkdldCwgdXBkYXRlQWdlT25IYXMsIGFsbG93U3RhbGUsIGRpc3Bvc2UsIGRpc3Bvc2VBZnRlciwgbm9EaXNwb3NlT25TZXQsIG5vVXBkYXRlVFRMLCBtYXhTaXplID0gMCwgbWF4RW50cnlTaXplID0gMCwgc2l6ZUNhbGN1bGF0aW9uLCBmZXRjaE1ldGhvZCwgbWVtb01ldGhvZCwgbm9EZWxldGVPbkZldGNoUmVqZWN0aW9uLCBub0RlbGV0ZU9uU3RhbGVHZXQsIGFsbG93U3RhbGVPbkZldGNoUmVqZWN0aW9uLCBhbGxvd1N0YWxlT25GZXRjaEFib3J0LCBpZ25vcmVGZXRjaEFib3J0LCB9ID0gb3B0aW9ucztcbiAgICAgICAgaWYgKG1heCAhPT0gMCAmJiAhaXNQb3NJbnQobWF4KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbWF4IG9wdGlvbiBtdXN0IGJlIGEgbm9ubmVnYXRpdmUgaW50ZWdlcicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IFVpbnRBcnJheSA9IG1heCA/IGdldFVpbnRBcnJheShtYXgpIDogQXJyYXk7XG4gICAgICAgIGlmICghVWludEFycmF5KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgbWF4IHZhbHVlOiAnICsgbWF4KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiNtYXggPSBtYXg7XG4gICAgICAgIHRoaXMuI21heFNpemUgPSBtYXhTaXplO1xuICAgICAgICB0aGlzLm1heEVudHJ5U2l6ZSA9IG1heEVudHJ5U2l6ZSB8fCB0aGlzLiNtYXhTaXplO1xuICAgICAgICB0aGlzLnNpemVDYWxjdWxhdGlvbiA9IHNpemVDYWxjdWxhdGlvbjtcbiAgICAgICAgaWYgKHRoaXMuc2l6ZUNhbGN1bGF0aW9uKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuI21heFNpemUgJiYgIXRoaXMubWF4RW50cnlTaXplKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignY2Fubm90IHNldCBzaXplQ2FsY3VsYXRpb24gd2l0aG91dCBzZXR0aW5nIG1heFNpemUgb3IgbWF4RW50cnlTaXplJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2l6ZUNhbGN1bGF0aW9uICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc2l6ZUNhbGN1bGF0aW9uIHNldCB0byBub24tZnVuY3Rpb24nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobWVtb01ldGhvZCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICB0eXBlb2YgbWVtb01ldGhvZCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbWVtb01ldGhvZCBtdXN0IGJlIGEgZnVuY3Rpb24gaWYgZGVmaW5lZCcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuI21lbW9NZXRob2QgPSBtZW1vTWV0aG9kO1xuICAgICAgICBpZiAoZmV0Y2hNZXRob2QgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgdHlwZW9mIGZldGNoTWV0aG9kICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdmZXRjaE1ldGhvZCBtdXN0IGJlIGEgZnVuY3Rpb24gaWYgc3BlY2lmaWVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4jZmV0Y2hNZXRob2QgPSBmZXRjaE1ldGhvZDtcbiAgICAgICAgdGhpcy4jaGFzRmV0Y2hNZXRob2QgPSAhIWZldGNoTWV0aG9kO1xuICAgICAgICB0aGlzLiNrZXlNYXAgPSBuZXcgTWFwKCk7XG4gICAgICAgIHRoaXMuI2tleUxpc3QgPSBuZXcgQXJyYXkobWF4KS5maWxsKHVuZGVmaW5lZCk7XG4gICAgICAgIHRoaXMuI3ZhbExpc3QgPSBuZXcgQXJyYXkobWF4KS5maWxsKHVuZGVmaW5lZCk7XG4gICAgICAgIHRoaXMuI25leHQgPSBuZXcgVWludEFycmF5KG1heCk7XG4gICAgICAgIHRoaXMuI3ByZXYgPSBuZXcgVWludEFycmF5KG1heCk7XG4gICAgICAgIHRoaXMuI2hlYWQgPSAwO1xuICAgICAgICB0aGlzLiN0YWlsID0gMDtcbiAgICAgICAgdGhpcy4jZnJlZSA9IFN0YWNrLmNyZWF0ZShtYXgpO1xuICAgICAgICB0aGlzLiNzaXplID0gMDtcbiAgICAgICAgdGhpcy4jY2FsY3VsYXRlZFNpemUgPSAwO1xuICAgICAgICBpZiAodHlwZW9mIGRpc3Bvc2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRoaXMuI2Rpc3Bvc2UgPSBkaXNwb3NlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgZGlzcG9zZUFmdGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aGlzLiNkaXNwb3NlQWZ0ZXIgPSBkaXNwb3NlQWZ0ZXI7XG4gICAgICAgICAgICB0aGlzLiNkaXNwb3NlZCA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy4jZGlzcG9zZUFmdGVyID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy4jZGlzcG9zZWQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4jaGFzRGlzcG9zZSA9ICEhdGhpcy4jZGlzcG9zZTtcbiAgICAgICAgdGhpcy4jaGFzRGlzcG9zZUFmdGVyID0gISF0aGlzLiNkaXNwb3NlQWZ0ZXI7XG4gICAgICAgIHRoaXMubm9EaXNwb3NlT25TZXQgPSAhIW5vRGlzcG9zZU9uU2V0O1xuICAgICAgICB0aGlzLm5vVXBkYXRlVFRMID0gISFub1VwZGF0ZVRUTDtcbiAgICAgICAgdGhpcy5ub0RlbGV0ZU9uRmV0Y2hSZWplY3Rpb24gPSAhIW5vRGVsZXRlT25GZXRjaFJlamVjdGlvbjtcbiAgICAgICAgdGhpcy5hbGxvd1N0YWxlT25GZXRjaFJlamVjdGlvbiA9ICEhYWxsb3dTdGFsZU9uRmV0Y2hSZWplY3Rpb247XG4gICAgICAgIHRoaXMuYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydCA9ICEhYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydDtcbiAgICAgICAgdGhpcy5pZ25vcmVGZXRjaEFib3J0ID0gISFpZ25vcmVGZXRjaEFib3J0O1xuICAgICAgICAvLyBOQjogbWF4RW50cnlTaXplIGlzIHNldCB0byBtYXhTaXplIGlmIGl0J3Mgc2V0XG4gICAgICAgIGlmICh0aGlzLm1heEVudHJ5U2l6ZSAhPT0gMCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuI21heFNpemUgIT09IDApIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzUG9zSW50KHRoaXMuI21heFNpemUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ21heFNpemUgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgaWYgc3BlY2lmaWVkJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpc1Bvc0ludCh0aGlzLm1heEVudHJ5U2l6ZSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdtYXhFbnRyeVNpemUgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgaWYgc3BlY2lmaWVkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLiNpbml0aWFsaXplU2l6ZVRyYWNraW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hbGxvd1N0YWxlID0gISFhbGxvd1N0YWxlO1xuICAgICAgICB0aGlzLm5vRGVsZXRlT25TdGFsZUdldCA9ICEhbm9EZWxldGVPblN0YWxlR2V0O1xuICAgICAgICB0aGlzLnVwZGF0ZUFnZU9uR2V0ID0gISF1cGRhdGVBZ2VPbkdldDtcbiAgICAgICAgdGhpcy51cGRhdGVBZ2VPbkhhcyA9ICEhdXBkYXRlQWdlT25IYXM7XG4gICAgICAgIHRoaXMudHRsUmVzb2x1dGlvbiA9XG4gICAgICAgICAgICBpc1Bvc0ludCh0dGxSZXNvbHV0aW9uKSB8fCB0dGxSZXNvbHV0aW9uID09PSAwXG4gICAgICAgICAgICAgICAgPyB0dGxSZXNvbHV0aW9uXG4gICAgICAgICAgICAgICAgOiAxO1xuICAgICAgICB0aGlzLnR0bEF1dG9wdXJnZSA9ICEhdHRsQXV0b3B1cmdlO1xuICAgICAgICB0aGlzLnR0bCA9IHR0bCB8fCAwO1xuICAgICAgICBpZiAodGhpcy50dGwpIHtcbiAgICAgICAgICAgIGlmICghaXNQb3NJbnQodGhpcy50dGwpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndHRsIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIGlmIHNwZWNpZmllZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy4jaW5pdGlhbGl6ZVRUTFRyYWNraW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZG8gbm90IGFsbG93IGNvbXBsZXRlbHkgdW5ib3VuZGVkIGNhY2hlc1xuICAgICAgICBpZiAodGhpcy4jbWF4ID09PSAwICYmIHRoaXMudHRsID09PSAwICYmIHRoaXMuI21heFNpemUgPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0F0IGxlYXN0IG9uZSBvZiBtYXgsIG1heFNpemUsIG9yIHR0bCBpcyByZXF1aXJlZCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy50dGxBdXRvcHVyZ2UgJiYgIXRoaXMuI21heCAmJiAhdGhpcy4jbWF4U2l6ZSkge1xuICAgICAgICAgICAgY29uc3QgY29kZSA9ICdMUlVfQ0FDSEVfVU5CT1VOREVEJztcbiAgICAgICAgICAgIGlmIChzaG91bGRXYXJuKGNvZGUpKSB7XG4gICAgICAgICAgICAgICAgd2FybmVkLmFkZChjb2RlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBtc2cgPSAnVFRMIGNhY2hpbmcgd2l0aG91dCB0dGxBdXRvcHVyZ2UsIG1heCwgb3IgbWF4U2l6ZSBjYW4gJyArXG4gICAgICAgICAgICAgICAgICAgICdyZXN1bHQgaW4gdW5ib3VuZGVkIG1lbW9yeSBjb25zdW1wdGlvbi4nO1xuICAgICAgICAgICAgICAgIGVtaXRXYXJuaW5nKG1zZywgJ1VuYm91bmRlZENhY2hlV2FybmluZycsIGNvZGUsIExSVUNhY2hlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBtcyBsZWZ0IGluIHRoZSBpdGVtJ3MgVFRMLiBJZiBpdGVtIGlzIG5vdCBpbiBjYWNoZSxcbiAgICAgKiByZXR1cm5zIGAwYC4gUmV0dXJucyBgSW5maW5pdHlgIGlmIGl0ZW0gaXMgaW4gY2FjaGUgd2l0aG91dCBhIGRlZmluZWQgVFRMLlxuICAgICAqL1xuICAgIGdldFJlbWFpbmluZ1RUTChrZXkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2tleU1hcC5oYXMoa2V5KSA/IEluZmluaXR5IDogMDtcbiAgICB9XG4gICAgI2luaXRpYWxpemVUVExUcmFja2luZygpIHtcbiAgICAgICAgY29uc3QgdHRscyA9IG5ldyBaZXJvQXJyYXkodGhpcy4jbWF4KTtcbiAgICAgICAgY29uc3Qgc3RhcnRzID0gbmV3IFplcm9BcnJheSh0aGlzLiNtYXgpO1xuICAgICAgICB0aGlzLiN0dGxzID0gdHRscztcbiAgICAgICAgdGhpcy4jc3RhcnRzID0gc3RhcnRzO1xuICAgICAgICB0aGlzLiNzZXRJdGVtVFRMID0gKGluZGV4LCB0dGwsIHN0YXJ0ID0gcGVyZi5ub3coKSkgPT4ge1xuICAgICAgICAgICAgc3RhcnRzW2luZGV4XSA9IHR0bCAhPT0gMCA/IHN0YXJ0IDogMDtcbiAgICAgICAgICAgIHR0bHNbaW5kZXhdID0gdHRsO1xuICAgICAgICAgICAgaWYgKHR0bCAhPT0gMCAmJiB0aGlzLnR0bEF1dG9wdXJnZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuI2lzU3RhbGUoaW5kZXgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiNkZWxldGUodGhpcy4ja2V5TGlzdFtpbmRleF0sICdleHBpcmUnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIHR0bCArIDEpO1xuICAgICAgICAgICAgICAgIC8vIHVucmVmKCkgbm90IHN1cHBvcnRlZCBvbiBhbGwgcGxhdGZvcm1zXG4gICAgICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICAgICAgaWYgKHQudW5yZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgdC51bnJlZigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLiN1cGRhdGVJdGVtQWdlID0gaW5kZXggPT4ge1xuICAgICAgICAgICAgc3RhcnRzW2luZGV4XSA9IHR0bHNbaW5kZXhdICE9PSAwID8gcGVyZi5ub3coKSA6IDA7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuI3N0YXR1c1RUTCA9IChzdGF0dXMsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAodHRsc1tpbmRleF0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0dGwgPSB0dGxzW2luZGV4XTtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydCA9IHN0YXJ0c1tpbmRleF07XG4gICAgICAgICAgICAgICAgLyogYzggaWdub3JlIG5leHQgKi9cbiAgICAgICAgICAgICAgICBpZiAoIXR0bCB8fCAhc3RhcnQpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBzdGF0dXMudHRsID0gdHRsO1xuICAgICAgICAgICAgICAgIHN0YXR1cy5zdGFydCA9IHN0YXJ0O1xuICAgICAgICAgICAgICAgIHN0YXR1cy5ub3cgPSBjYWNoZWROb3cgfHwgZ2V0Tm93KCk7XG4gICAgICAgICAgICAgICAgY29uc3QgYWdlID0gc3RhdHVzLm5vdyAtIHN0YXJ0O1xuICAgICAgICAgICAgICAgIHN0YXR1cy5yZW1haW5pbmdUVEwgPSB0dGwgLSBhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIC8vIGRlYm91bmNlIGNhbGxzIHRvIHBlcmYubm93KCkgdG8gMXMgc28gd2UncmUgbm90IGhpdHRpbmdcbiAgICAgICAgLy8gdGhhdCBjb3N0bHkgY2FsbCByZXBlYXRlZGx5LlxuICAgICAgICBsZXQgY2FjaGVkTm93ID0gMDtcbiAgICAgICAgY29uc3QgZ2V0Tm93ID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbiA9IHBlcmYubm93KCk7XG4gICAgICAgICAgICBpZiAodGhpcy50dGxSZXNvbHV0aW9uID4gMCkge1xuICAgICAgICAgICAgICAgIGNhY2hlZE5vdyA9IG47XG4gICAgICAgICAgICAgICAgY29uc3QgdCA9IHNldFRpbWVvdXQoKCkgPT4gKGNhY2hlZE5vdyA9IDApLCB0aGlzLnR0bFJlc29sdXRpb24pO1xuICAgICAgICAgICAgICAgIC8vIG5vdCBhdmFpbGFibGUgb24gYWxsIHBsYXRmb3Jtc1xuICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICAgICAgICAgIGlmICh0LnVucmVmKSB7XG4gICAgICAgICAgICAgICAgICAgIHQudW5yZWYoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmdldFJlbWFpbmluZ1RUTCA9IGtleSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuI2tleU1hcC5nZXQoa2V5KTtcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB0dGwgPSB0dGxzW2luZGV4XTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gc3RhcnRzW2luZGV4XTtcbiAgICAgICAgICAgIGlmICghdHRsIHx8ICFzdGFydCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBJbmZpbml0eTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGFnZSA9IChjYWNoZWROb3cgfHwgZ2V0Tm93KCkpIC0gc3RhcnQ7XG4gICAgICAgICAgICByZXR1cm4gdHRsIC0gYWdlO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLiNpc1N0YWxlID0gaW5kZXggPT4ge1xuICAgICAgICAgICAgY29uc3QgcyA9IHN0YXJ0c1tpbmRleF07XG4gICAgICAgICAgICBjb25zdCB0ID0gdHRsc1tpbmRleF07XG4gICAgICAgICAgICByZXR1cm4gISF0ICYmICEhcyAmJiAoY2FjaGVkTm93IHx8IGdldE5vdygpKSAtIHMgPiB0O1xuICAgICAgICB9O1xuICAgIH1cbiAgICAvLyBjb25kaXRpb25hbGx5IHNldCBwcml2YXRlIG1ldGhvZHMgcmVsYXRlZCB0byBUVExcbiAgICAjdXBkYXRlSXRlbUFnZSA9ICgpID0+IHsgfTtcbiAgICAjc3RhdHVzVFRMID0gKCkgPT4geyB9O1xuICAgICNzZXRJdGVtVFRMID0gKCkgPT4geyB9O1xuICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgI2lzU3RhbGUgPSAoKSA9PiBmYWxzZTtcbiAgICAjaW5pdGlhbGl6ZVNpemVUcmFja2luZygpIHtcbiAgICAgICAgY29uc3Qgc2l6ZXMgPSBuZXcgWmVyb0FycmF5KHRoaXMuI21heCk7XG4gICAgICAgIHRoaXMuI2NhbGN1bGF0ZWRTaXplID0gMDtcbiAgICAgICAgdGhpcy4jc2l6ZXMgPSBzaXplcztcbiAgICAgICAgdGhpcy4jcmVtb3ZlSXRlbVNpemUgPSBpbmRleCA9PiB7XG4gICAgICAgICAgICB0aGlzLiNjYWxjdWxhdGVkU2l6ZSAtPSBzaXplc1tpbmRleF07XG4gICAgICAgICAgICBzaXplc1tpbmRleF0gPSAwO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLiNyZXF1aXJlU2l6ZSA9IChrLCB2LCBzaXplLCBzaXplQ2FsY3VsYXRpb24pID0+IHtcbiAgICAgICAgICAgIC8vIHByb3Zpc2lvbmFsbHkgYWNjZXB0IGJhY2tncm91bmQgZmV0Y2hlcy5cbiAgICAgICAgICAgIC8vIGFjdHVhbCB2YWx1ZSBzaXplIHdpbGwgYmUgY2hlY2tlZCB3aGVuIHRoZXkgcmV0dXJuLlxuICAgICAgICAgICAgaWYgKHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHYpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWlzUG9zSW50KHNpemUpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNpemVDYWxjdWxhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNpemVDYWxjdWxhdGlvbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc2l6ZUNhbGN1bGF0aW9uIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHNpemUgPSBzaXplQ2FsY3VsYXRpb24odiwgayk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNQb3NJbnQoc2l6ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3NpemVDYWxjdWxhdGlvbiByZXR1cm4gaW52YWxpZCAoZXhwZWN0IHBvc2l0aXZlIGludGVnZXIpJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludmFsaWQgc2l6ZSB2YWx1ZSAobXVzdCBiZSBwb3NpdGl2ZSBpbnRlZ2VyKS4gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnV2hlbiBtYXhTaXplIG9yIG1heEVudHJ5U2l6ZSBpcyB1c2VkLCBzaXplQ2FsY3VsYXRpb24gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnb3Igc2l6ZSBtdXN0IGJlIHNldC4nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc2l6ZTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy4jYWRkSXRlbVNpemUgPSAoaW5kZXgsIHNpemUsIHN0YXR1cykgPT4ge1xuICAgICAgICAgICAgc2l6ZXNbaW5kZXhdID0gc2l6ZTtcbiAgICAgICAgICAgIGlmICh0aGlzLiNtYXhTaXplKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWF4U2l6ZSA9IHRoaXMuI21heFNpemUgLSBzaXplc1tpbmRleF07XG4gICAgICAgICAgICAgICAgd2hpbGUgKHRoaXMuI2NhbGN1bGF0ZWRTaXplID4gbWF4U2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiNldmljdCh0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLiNjYWxjdWxhdGVkU2l6ZSArPSBzaXplc1tpbmRleF07XG4gICAgICAgICAgICBpZiAoc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgc3RhdHVzLmVudHJ5U2l6ZSA9IHNpemU7XG4gICAgICAgICAgICAgICAgc3RhdHVzLnRvdGFsQ2FsY3VsYXRlZFNpemUgPSB0aGlzLiNjYWxjdWxhdGVkU2l6ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgI3JlbW92ZUl0ZW1TaXplID0gX2kgPT4geyB9O1xuICAgICNhZGRJdGVtU2l6ZSA9IChfaSwgX3MsIF9zdCkgPT4geyB9O1xuICAgICNyZXF1aXJlU2l6ZSA9IChfaywgX3YsIHNpemUsIHNpemVDYWxjdWxhdGlvbikgPT4ge1xuICAgICAgICBpZiAoc2l6ZSB8fCBzaXplQ2FsY3VsYXRpb24pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2Nhbm5vdCBzZXQgc2l6ZSB3aXRob3V0IHNldHRpbmcgbWF4U2l6ZSBvciBtYXhFbnRyeVNpemUgb24gY2FjaGUnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMDtcbiAgICB9O1xuICAgICojaW5kZXhlcyh7IGFsbG93U3RhbGUgPSB0aGlzLmFsbG93U3RhbGUgfSA9IHt9KSB7XG4gICAgICAgIGlmICh0aGlzLiNzaXplKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gdGhpcy4jdGFpbDsgdHJ1ZTspIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuI2lzVmFsaWRJbmRleChpKSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGFsbG93U3RhbGUgfHwgIXRoaXMuI2lzU3RhbGUoaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGkgPT09IHRoaXMuI2hlYWQpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpID0gdGhpcy4jcHJldltpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgKiNyaW5kZXhlcyh7IGFsbG93U3RhbGUgPSB0aGlzLmFsbG93U3RhbGUgfSA9IHt9KSB7XG4gICAgICAgIGlmICh0aGlzLiNzaXplKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gdGhpcy4jaGVhZDsgdHJ1ZTspIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuI2lzVmFsaWRJbmRleChpKSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGFsbG93U3RhbGUgfHwgIXRoaXMuI2lzU3RhbGUoaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGkgPT09IHRoaXMuI3RhaWwpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpID0gdGhpcy4jbmV4dFtpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgI2lzVmFsaWRJbmRleChpbmRleCkge1xuICAgICAgICByZXR1cm4gKGluZGV4ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIHRoaXMuI2tleU1hcC5nZXQodGhpcy4ja2V5TGlzdFtpbmRleF0pID09PSBpbmRleCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiBhIGdlbmVyYXRvciB5aWVsZGluZyBgW2tleSwgdmFsdWVdYCBwYWlycyxcbiAgICAgKiBpbiBvcmRlciBmcm9tIG1vc3QgcmVjZW50bHkgdXNlZCB0byBsZWFzdCByZWNlbnRseSB1c2VkLlxuICAgICAqL1xuICAgICplbnRyaWVzKCkge1xuICAgICAgICBmb3IgKGNvbnN0IGkgb2YgdGhpcy4jaW5kZXhlcygpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy4jdmFsTGlzdFtpXSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgdGhpcy4ja2V5TGlzdFtpXSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgIXRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHRoaXMuI3ZhbExpc3RbaV0pKSB7XG4gICAgICAgICAgICAgICAgeWllbGQgW3RoaXMuI2tleUxpc3RbaV0sIHRoaXMuI3ZhbExpc3RbaV1dO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEludmVyc2Ugb3JkZXIgdmVyc2lvbiBvZiB7QGxpbmsgTFJVQ2FjaGUuZW50cmllc31cbiAgICAgKlxuICAgICAqIFJldHVybiBhIGdlbmVyYXRvciB5aWVsZGluZyBgW2tleSwgdmFsdWVdYCBwYWlycyxcbiAgICAgKiBpbiBvcmRlciBmcm9tIGxlYXN0IHJlY2VudGx5IHVzZWQgdG8gbW9zdCByZWNlbnRseSB1c2VkLlxuICAgICAqL1xuICAgICpyZW50cmllcygpIHtcbiAgICAgICAgZm9yIChjb25zdCBpIG9mIHRoaXMuI3JpbmRleGVzKCkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLiN2YWxMaXN0W2ldICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICB0aGlzLiNrZXlMaXN0W2ldICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAhdGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2godGhpcy4jdmFsTGlzdFtpXSkpIHtcbiAgICAgICAgICAgICAgICB5aWVsZCBbdGhpcy4ja2V5TGlzdFtpXSwgdGhpcy4jdmFsTGlzdFtpXV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIGEgZ2VuZXJhdG9yIHlpZWxkaW5nIHRoZSBrZXlzIGluIHRoZSBjYWNoZSxcbiAgICAgKiBpbiBvcmRlciBmcm9tIG1vc3QgcmVjZW50bHkgdXNlZCB0byBsZWFzdCByZWNlbnRseSB1c2VkLlxuICAgICAqL1xuICAgICprZXlzKCkge1xuICAgICAgICBmb3IgKGNvbnN0IGkgb2YgdGhpcy4jaW5kZXhlcygpKSB7XG4gICAgICAgICAgICBjb25zdCBrID0gdGhpcy4ja2V5TGlzdFtpXTtcbiAgICAgICAgICAgIGlmIChrICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAhdGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2godGhpcy4jdmFsTGlzdFtpXSkpIHtcbiAgICAgICAgICAgICAgICB5aWVsZCBrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEludmVyc2Ugb3JkZXIgdmVyc2lvbiBvZiB7QGxpbmsgTFJVQ2FjaGUua2V5c31cbiAgICAgKlxuICAgICAqIFJldHVybiBhIGdlbmVyYXRvciB5aWVsZGluZyB0aGUga2V5cyBpbiB0aGUgY2FjaGUsXG4gICAgICogaW4gb3JkZXIgZnJvbSBsZWFzdCByZWNlbnRseSB1c2VkIHRvIG1vc3QgcmVjZW50bHkgdXNlZC5cbiAgICAgKi9cbiAgICAqcmtleXMoKSB7XG4gICAgICAgIGZvciAoY29uc3QgaSBvZiB0aGlzLiNyaW5kZXhlcygpKSB7XG4gICAgICAgICAgICBjb25zdCBrID0gdGhpcy4ja2V5TGlzdFtpXTtcbiAgICAgICAgICAgIGlmIChrICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAhdGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2godGhpcy4jdmFsTGlzdFtpXSkpIHtcbiAgICAgICAgICAgICAgICB5aWVsZCBrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiBhIGdlbmVyYXRvciB5aWVsZGluZyB0aGUgdmFsdWVzIGluIHRoZSBjYWNoZSxcbiAgICAgKiBpbiBvcmRlciBmcm9tIG1vc3QgcmVjZW50bHkgdXNlZCB0byBsZWFzdCByZWNlbnRseSB1c2VkLlxuICAgICAqL1xuICAgICp2YWx1ZXMoKSB7XG4gICAgICAgIGZvciAoY29uc3QgaSBvZiB0aGlzLiNpbmRleGVzKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHYgPSB0aGlzLiN2YWxMaXN0W2ldO1xuICAgICAgICAgICAgaWYgKHYgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICF0aGlzLiNpc0JhY2tncm91bmRGZXRjaCh0aGlzLiN2YWxMaXN0W2ldKSkge1xuICAgICAgICAgICAgICAgIHlpZWxkIHRoaXMuI3ZhbExpc3RbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogSW52ZXJzZSBvcmRlciB2ZXJzaW9uIG9mIHtAbGluayBMUlVDYWNoZS52YWx1ZXN9XG4gICAgICpcbiAgICAgKiBSZXR1cm4gYSBnZW5lcmF0b3IgeWllbGRpbmcgdGhlIHZhbHVlcyBpbiB0aGUgY2FjaGUsXG4gICAgICogaW4gb3JkZXIgZnJvbSBsZWFzdCByZWNlbnRseSB1c2VkIHRvIG1vc3QgcmVjZW50bHkgdXNlZC5cbiAgICAgKi9cbiAgICAqcnZhbHVlcygpIHtcbiAgICAgICAgZm9yIChjb25zdCBpIG9mIHRoaXMuI3JpbmRleGVzKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHYgPSB0aGlzLiN2YWxMaXN0W2ldO1xuICAgICAgICAgICAgaWYgKHYgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICF0aGlzLiNpc0JhY2tncm91bmRGZXRjaCh0aGlzLiN2YWxMaXN0W2ldKSkge1xuICAgICAgICAgICAgICAgIHlpZWxkIHRoaXMuI3ZhbExpc3RbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogSXRlcmF0aW5nIG92ZXIgdGhlIGNhY2hlIGl0c2VsZiB5aWVsZHMgdGhlIHNhbWUgcmVzdWx0cyBhc1xuICAgICAqIHtAbGluayBMUlVDYWNoZS5lbnRyaWVzfVxuICAgICAqL1xuICAgIFtTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnRyaWVzKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEEgU3RyaW5nIHZhbHVlIHRoYXQgaXMgdXNlZCBpbiB0aGUgY3JlYXRpb24gb2YgdGhlIGRlZmF1bHQgc3RyaW5nXG4gICAgICogZGVzY3JpcHRpb24gb2YgYW4gb2JqZWN0LiBDYWxsZWQgYnkgdGhlIGJ1aWx0LWluIG1ldGhvZFxuICAgICAqIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYC5cbiAgICAgKi9cbiAgICBbU3ltYm9sLnRvU3RyaW5nVGFnXSA9ICdMUlVDYWNoZSc7XG4gICAgLyoqXG4gICAgICogRmluZCBhIHZhbHVlIGZvciB3aGljaCB0aGUgc3VwcGxpZWQgZm4gbWV0aG9kIHJldHVybnMgYSB0cnV0aHkgdmFsdWUsXG4gICAgICogc2ltaWxhciB0byBgQXJyYXkuZmluZCgpYC4gZm4gaXMgY2FsbGVkIGFzIGBmbih2YWx1ZSwga2V5LCBjYWNoZSlgLlxuICAgICAqL1xuICAgIGZpbmQoZm4sIGdldE9wdGlvbnMgPSB7fSkge1xuICAgICAgICBmb3IgKGNvbnN0IGkgb2YgdGhpcy4jaW5kZXhlcygpKSB7XG4gICAgICAgICAgICBjb25zdCB2ID0gdGhpcy4jdmFsTGlzdFtpXTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2godilcbiAgICAgICAgICAgICAgICA/IHYuX19zdGFsZVdoaWxlRmV0Y2hpbmdcbiAgICAgICAgICAgICAgICA6IHY7XG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGlmIChmbih2YWx1ZSwgdGhpcy4ja2V5TGlzdFtpXSwgdGhpcykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXQodGhpcy4ja2V5TGlzdFtpXSwgZ2V0T3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2FsbCB0aGUgc3VwcGxpZWQgZnVuY3Rpb24gb24gZWFjaCBpdGVtIGluIHRoZSBjYWNoZSwgaW4gb3JkZXIgZnJvbSBtb3N0XG4gICAgICogcmVjZW50bHkgdXNlZCB0byBsZWFzdCByZWNlbnRseSB1c2VkLlxuICAgICAqXG4gICAgICogYGZuYCBpcyBjYWxsZWQgYXMgYGZuKHZhbHVlLCBrZXksIGNhY2hlKWAuXG4gICAgICpcbiAgICAgKiBJZiBgdGhpc3BgIGlzIHByb3ZpZGVkLCBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBpbiB0aGUgYHRoaXNgLWNvbnRleHQgb2ZcbiAgICAgKiB0aGUgcHJvdmlkZWQgb2JqZWN0LCBvciB0aGUgY2FjaGUgaWYgbm8gYHRoaXNwYCBvYmplY3QgaXMgcHJvdmlkZWQuXG4gICAgICpcbiAgICAgKiBEb2VzIG5vdCB1cGRhdGUgYWdlIG9yIHJlY2VudHkgb2YgdXNlLCBvciBpdGVyYXRlIG92ZXIgc3RhbGUgdmFsdWVzLlxuICAgICAqL1xuICAgIGZvckVhY2goZm4sIHRoaXNwID0gdGhpcykge1xuICAgICAgICBmb3IgKGNvbnN0IGkgb2YgdGhpcy4jaW5kZXhlcygpKSB7XG4gICAgICAgICAgICBjb25zdCB2ID0gdGhpcy4jdmFsTGlzdFtpXTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2godilcbiAgICAgICAgICAgICAgICA/IHYuX19zdGFsZVdoaWxlRmV0Y2hpbmdcbiAgICAgICAgICAgICAgICA6IHY7XG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGZuLmNhbGwodGhpc3AsIHZhbHVlLCB0aGlzLiNrZXlMaXN0W2ldLCB0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyB7QGxpbmsgTFJVQ2FjaGUuZm9yRWFjaH0gYnV0IGl0ZW1zIGFyZSBpdGVyYXRlZCBvdmVyIGluXG4gICAgICogcmV2ZXJzZSBvcmRlci4gIChpZSwgbGVzcyByZWNlbnRseSB1c2VkIGl0ZW1zIGFyZSBpdGVyYXRlZCBvdmVyIGZpcnN0LilcbiAgICAgKi9cbiAgICByZm9yRWFjaChmbiwgdGhpc3AgPSB0aGlzKSB7XG4gICAgICAgIGZvciAoY29uc3QgaSBvZiB0aGlzLiNyaW5kZXhlcygpKSB7XG4gICAgICAgICAgICBjb25zdCB2ID0gdGhpcy4jdmFsTGlzdFtpXTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2godilcbiAgICAgICAgICAgICAgICA/IHYuX19zdGFsZVdoaWxlRmV0Y2hpbmdcbiAgICAgICAgICAgICAgICA6IHY7XG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGZuLmNhbGwodGhpc3AsIHZhbHVlLCB0aGlzLiNrZXlMaXN0W2ldLCB0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWxldGUgYW55IHN0YWxlIGVudHJpZXMuIFJldHVybnMgdHJ1ZSBpZiBhbnl0aGluZyB3YXMgcmVtb3ZlZCxcbiAgICAgKiBmYWxzZSBvdGhlcndpc2UuXG4gICAgICovXG4gICAgcHVyZ2VTdGFsZSgpIHtcbiAgICAgICAgbGV0IGRlbGV0ZWQgPSBmYWxzZTtcbiAgICAgICAgZm9yIChjb25zdCBpIG9mIHRoaXMuI3JpbmRleGVzKHsgYWxsb3dTdGFsZTogdHJ1ZSB9KSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuI2lzU3RhbGUoaSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiNkZWxldGUodGhpcy4ja2V5TGlzdFtpXSwgJ2V4cGlyZScpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWxldGVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGV4dGVuZGVkIGluZm8gYWJvdXQgYSBnaXZlbiBlbnRyeSwgdG8gZ2V0IGl0cyB2YWx1ZSwgc2l6ZSwgYW5kXG4gICAgICogVFRMIGluZm8gc2ltdWx0YW5lb3VzbHkuIFJldHVybnMgYHVuZGVmaW5lZGAgaWYgdGhlIGtleSBpcyBub3QgcHJlc2VudC5cbiAgICAgKlxuICAgICAqIFVubGlrZSB7QGxpbmsgTFJVQ2FjaGUjZHVtcH0sIHdoaWNoIGlzIGRlc2lnbmVkIHRvIGJlIHBvcnRhYmxlIGFuZCBzdXJ2aXZlXG4gICAgICogc2VyaWFsaXphdGlvbiwgdGhlIGBzdGFydGAgdmFsdWUgaXMgYWx3YXlzIHRoZSBjdXJyZW50IHRpbWVzdGFtcCwgYW5kIHRoZVxuICAgICAqIGB0dGxgIGlzIGEgY2FsY3VsYXRlZCByZW1haW5pbmcgdGltZSB0byBsaXZlIChuZWdhdGl2ZSBpZiBleHBpcmVkKS5cbiAgICAgKlxuICAgICAqIEFsd2F5cyByZXR1cm5zIHN0YWxlIHZhbHVlcywgaWYgdGhlaXIgaW5mbyBpcyBmb3VuZCBpbiB0aGUgY2FjaGUsIHNvIGJlXG4gICAgICogc3VyZSB0byBjaGVjayBmb3IgZXhwaXJhdGlvbnMgKGllLCBhIG5lZ2F0aXZlIHtAbGluayBMUlVDYWNoZS5FbnRyeSN0dGx9KVxuICAgICAqIGlmIHJlbGV2YW50LlxuICAgICAqL1xuICAgIGluZm8oa2V5KSB7XG4gICAgICAgIGNvbnN0IGkgPSB0aGlzLiNrZXlNYXAuZ2V0KGtleSk7XG4gICAgICAgIGlmIChpID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCB2ID0gdGhpcy4jdmFsTGlzdFtpXTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLiNpc0JhY2tncm91bmRGZXRjaCh2KVxuICAgICAgICAgICAgPyB2Ll9fc3RhbGVXaGlsZUZldGNoaW5nXG4gICAgICAgICAgICA6IHY7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgZW50cnkgPSB7IHZhbHVlIH07XG4gICAgICAgIGlmICh0aGlzLiN0dGxzICYmIHRoaXMuI3N0YXJ0cykge1xuICAgICAgICAgICAgY29uc3QgdHRsID0gdGhpcy4jdHRsc1tpXTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy4jc3RhcnRzW2ldO1xuICAgICAgICAgICAgaWYgKHR0bCAmJiBzdGFydCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlbWFpbiA9IHR0bCAtIChwZXJmLm5vdygpIC0gc3RhcnQpO1xuICAgICAgICAgICAgICAgIGVudHJ5LnR0bCA9IHJlbWFpbjtcbiAgICAgICAgICAgICAgICBlbnRyeS5zdGFydCA9IERhdGUubm93KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuI3NpemVzKSB7XG4gICAgICAgICAgICBlbnRyeS5zaXplID0gdGhpcy4jc2l6ZXNbaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVudHJ5O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYW4gYXJyYXkgb2YgW2tleSwge0BsaW5rIExSVUNhY2hlLkVudHJ5fV0gdHVwbGVzIHdoaWNoIGNhbiBiZVxuICAgICAqIHBhc3NlZCB0byB7QGxpbmsgTFJMVUNhY2hlI2xvYWR9LlxuICAgICAqXG4gICAgICogVGhlIGBzdGFydGAgZmllbGRzIGFyZSBjYWxjdWxhdGVkIHJlbGF0aXZlIHRvIGEgcG9ydGFibGUgYERhdGUubm93KClgXG4gICAgICogdGltZXN0YW1wLCBldmVuIGlmIGBwZXJmb3JtYW5jZS5ub3coKWAgaXMgYXZhaWxhYmxlLlxuICAgICAqXG4gICAgICogU3RhbGUgZW50cmllcyBhcmUgYWx3YXlzIGluY2x1ZGVkIGluIHRoZSBgZHVtcGAsIGV2ZW4gaWZcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UuYWxsb3dTdGFsZX0gaXMgZmFsc2UuXG4gICAgICpcbiAgICAgKiBOb3RlOiB0aGlzIHJldHVybnMgYW4gYWN0dWFsIGFycmF5LCBub3QgYSBnZW5lcmF0b3IsIHNvIGl0IGNhbiBiZSBtb3JlXG4gICAgICogZWFzaWx5IHBhc3NlZCBhcm91bmQuXG4gICAgICovXG4gICAgZHVtcCgpIHtcbiAgICAgICAgY29uc3QgYXJyID0gW107XG4gICAgICAgIGZvciAoY29uc3QgaSBvZiB0aGlzLiNpbmRleGVzKHsgYWxsb3dTdGFsZTogdHJ1ZSB9KSkge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gdGhpcy4ja2V5TGlzdFtpXTtcbiAgICAgICAgICAgIGNvbnN0IHYgPSB0aGlzLiN2YWxMaXN0W2ldO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLiNpc0JhY2tncm91bmRGZXRjaCh2KVxuICAgICAgICAgICAgICAgID8gdi5fX3N0YWxlV2hpbGVGZXRjaGluZ1xuICAgICAgICAgICAgICAgIDogdjtcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IGtleSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgY29uc3QgZW50cnkgPSB7IHZhbHVlIH07XG4gICAgICAgICAgICBpZiAodGhpcy4jdHRscyAmJiB0aGlzLiNzdGFydHMpIHtcbiAgICAgICAgICAgICAgICBlbnRyeS50dGwgPSB0aGlzLiN0dGxzW2ldO1xuICAgICAgICAgICAgICAgIC8vIGFsd2F5cyBkdW1wIHRoZSBzdGFydCByZWxhdGl2ZSB0byBhIHBvcnRhYmxlIHRpbWVzdGFtcFxuICAgICAgICAgICAgICAgIC8vIGl0J3Mgb2sgZm9yIHRoaXMgdG8gYmUgYSBiaXQgc2xvdywgaXQncyBhIHJhcmUgb3BlcmF0aW9uLlxuICAgICAgICAgICAgICAgIGNvbnN0IGFnZSA9IHBlcmYubm93KCkgLSB0aGlzLiNzdGFydHNbaV07XG4gICAgICAgICAgICAgICAgZW50cnkuc3RhcnQgPSBNYXRoLmZsb29yKERhdGUubm93KCkgLSBhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuI3NpemVzKSB7XG4gICAgICAgICAgICAgICAgZW50cnkuc2l6ZSA9IHRoaXMuI3NpemVzW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXJyLnVuc2hpZnQoW2tleSwgZW50cnldKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXJyO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXNldCB0aGUgY2FjaGUgYW5kIGxvYWQgaW4gdGhlIGl0ZW1zIGluIGVudHJpZXMgaW4gdGhlIG9yZGVyIGxpc3RlZC5cbiAgICAgKlxuICAgICAqIFRoZSBzaGFwZSBvZiB0aGUgcmVzdWx0aW5nIGNhY2hlIG1heSBiZSBkaWZmZXJlbnQgaWYgdGhlIHNhbWUgb3B0aW9ucyBhcmVcbiAgICAgKiBub3QgdXNlZCBpbiBib3RoIGNhY2hlcy5cbiAgICAgKlxuICAgICAqIFRoZSBgc3RhcnRgIGZpZWxkcyBhcmUgYXNzdW1lZCB0byBiZSBjYWxjdWxhdGVkIHJlbGF0aXZlIHRvIGEgcG9ydGFibGVcbiAgICAgKiBgRGF0ZS5ub3coKWAgdGltZXN0YW1wLCBldmVuIGlmIGBwZXJmb3JtYW5jZS5ub3coKWAgaXMgYXZhaWxhYmxlLlxuICAgICAqL1xuICAgIGxvYWQoYXJyKSB7XG4gICAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCBlbnRyeV0gb2YgYXJyKSB7XG4gICAgICAgICAgICBpZiAoZW50cnkuc3RhcnQpIHtcbiAgICAgICAgICAgICAgICAvLyBlbnRyeS5zdGFydCBpcyBhIHBvcnRhYmxlIHRpbWVzdGFtcCwgYnV0IHdlIG1heSBiZSB1c2luZ1xuICAgICAgICAgICAgICAgIC8vIG5vZGUncyBwZXJmb3JtYW5jZS5ub3coKSwgc28gY2FsY3VsYXRlIHRoZSBvZmZzZXQsIHNvIHRoYXRcbiAgICAgICAgICAgICAgICAvLyB3ZSBnZXQgdGhlIGludGVuZGVkIHJlbWFpbmluZyBUVEwsIG5vIG1hdHRlciBob3cgbG9uZyBpdCdzXG4gICAgICAgICAgICAgICAgLy8gYmVlbiBvbiBpY2UuXG4gICAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgICAvLyBpdCdzIG9rIGZvciB0aGlzIHRvIGJlIGEgYml0IHNsb3csIGl0J3MgYSByYXJlIG9wZXJhdGlvbi5cbiAgICAgICAgICAgICAgICBjb25zdCBhZ2UgPSBEYXRlLm5vdygpIC0gZW50cnkuc3RhcnQ7XG4gICAgICAgICAgICAgICAgZW50cnkuc3RhcnQgPSBwZXJmLm5vdygpIC0gYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZXQoa2V5LCBlbnRyeS52YWx1ZSwgZW50cnkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZCBhIHZhbHVlIHRvIHRoZSBjYWNoZS5cbiAgICAgKlxuICAgICAqIE5vdGU6IGlmIGB1bmRlZmluZWRgIGlzIHNwZWNpZmllZCBhcyBhIHZhbHVlLCB0aGlzIGlzIGFuIGFsaWFzIGZvclxuICAgICAqIHtAbGluayBMUlVDYWNoZSNkZWxldGV9XG4gICAgICpcbiAgICAgKiBGaWVsZHMgb24gdGhlIHtAbGluayBMUlVDYWNoZS5TZXRPcHRpb25zfSBvcHRpb25zIHBhcmFtIHdpbGwgb3ZlcnJpZGVcbiAgICAgKiB0aGVpciBjb3JyZXNwb25kaW5nIHZhbHVlcyBpbiB0aGUgY29uc3RydWN0b3Igb3B0aW9ucyBmb3IgdGhlIHNjb3BlXG4gICAgICogb2YgdGhpcyBzaW5nbGUgYHNldCgpYCBvcGVyYXRpb24uXG4gICAgICpcbiAgICAgKiBJZiBgc3RhcnRgIGlzIHByb3ZpZGVkLCB0aGVuIHRoYXQgd2lsbCBzZXQgdGhlIGVmZmVjdGl2ZSBzdGFydFxuICAgICAqIHRpbWUgZm9yIHRoZSBUVEwgY2FsY3VsYXRpb24uIE5vdGUgdGhhdCB0aGlzIG11c3QgYmUgYSBwcmV2aW91c1xuICAgICAqIHZhbHVlIG9mIGBwZXJmb3JtYW5jZS5ub3coKWAgaWYgc3VwcG9ydGVkLCBvciBhIHByZXZpb3VzIHZhbHVlIG9mXG4gICAgICogYERhdGUubm93KClgIGlmIG5vdC5cbiAgICAgKlxuICAgICAqIE9wdGlvbnMgb2JqZWN0IG1heSBhbHNvIGluY2x1ZGUgYHNpemVgLCB3aGljaCB3aWxsIHByZXZlbnRcbiAgICAgKiBjYWxsaW5nIHRoZSBgc2l6ZUNhbGN1bGF0aW9uYCBmdW5jdGlvbiBhbmQganVzdCB1c2UgdGhlIHNwZWNpZmllZFxuICAgICAqIG51bWJlciBpZiBpdCBpcyBhIHBvc2l0aXZlIGludGVnZXIsIGFuZCBgbm9EaXNwb3NlT25TZXRgIHdoaWNoXG4gICAgICogd2lsbCBwcmV2ZW50IGNhbGxpbmcgYSBgZGlzcG9zZWAgZnVuY3Rpb24gaW4gdGhlIGNhc2Ugb2ZcbiAgICAgKiBvdmVyd3JpdGVzLlxuICAgICAqXG4gICAgICogSWYgdGhlIGBzaXplYCAob3IgcmV0dXJuIHZhbHVlIG9mIGBzaXplQ2FsY3VsYXRpb25gKSBmb3IgYSBnaXZlblxuICAgICAqIGVudHJ5IGlzIGdyZWF0ZXIgdGhhbiBgbWF4RW50cnlTaXplYCwgdGhlbiB0aGUgaXRlbSB3aWxsIG5vdCBiZVxuICAgICAqIGFkZGVkIHRvIHRoZSBjYWNoZS5cbiAgICAgKlxuICAgICAqIFdpbGwgdXBkYXRlIHRoZSByZWNlbmN5IG9mIHRoZSBlbnRyeS5cbiAgICAgKlxuICAgICAqIElmIHRoZSB2YWx1ZSBpcyBgdW5kZWZpbmVkYCwgdGhlbiB0aGlzIGlzIGFuIGFsaWFzIGZvclxuICAgICAqIGBjYWNoZS5kZWxldGUoa2V5KWAuIGB1bmRlZmluZWRgIGlzIG5ldmVyIHN0b3JlZCBpbiB0aGUgY2FjaGUuXG4gICAgICovXG4gICAgc2V0KGssIHYsIHNldE9wdGlvbnMgPSB7fSkge1xuICAgICAgICBpZiAodiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmRlbGV0ZShrKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgdHRsID0gdGhpcy50dGwsIHN0YXJ0LCBub0Rpc3Bvc2VPblNldCA9IHRoaXMubm9EaXNwb3NlT25TZXQsIHNpemVDYWxjdWxhdGlvbiA9IHRoaXMuc2l6ZUNhbGN1bGF0aW9uLCBzdGF0dXMsIH0gPSBzZXRPcHRpb25zO1xuICAgICAgICBsZXQgeyBub1VwZGF0ZVRUTCA9IHRoaXMubm9VcGRhdGVUVEwgfSA9IHNldE9wdGlvbnM7XG4gICAgICAgIGNvbnN0IHNpemUgPSB0aGlzLiNyZXF1aXJlU2l6ZShrLCB2LCBzZXRPcHRpb25zLnNpemUgfHwgMCwgc2l6ZUNhbGN1bGF0aW9uKTtcbiAgICAgICAgLy8gaWYgdGhlIGl0ZW0gZG9lc24ndCBmaXQsIGRvbid0IGRvIGFueXRoaW5nXG4gICAgICAgIC8vIE5COiBtYXhFbnRyeVNpemUgc2V0IHRvIG1heFNpemUgYnkgZGVmYXVsdFxuICAgICAgICBpZiAodGhpcy5tYXhFbnRyeVNpemUgJiYgc2l6ZSA+IHRoaXMubWF4RW50cnlTaXplKSB7XG4gICAgICAgICAgICBpZiAoc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgc3RhdHVzLnNldCA9ICdtaXNzJztcbiAgICAgICAgICAgICAgICBzdGF0dXMubWF4RW50cnlTaXplRXhjZWVkZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaGF2ZSB0byBkZWxldGUsIGluIGNhc2Ugc29tZXRoaW5nIGlzIHRoZXJlIGFscmVhZHkuXG4gICAgICAgICAgICB0aGlzLiNkZWxldGUoaywgJ3NldCcpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGluZGV4ID0gdGhpcy4jc2l6ZSA9PT0gMCA/IHVuZGVmaW5lZCA6IHRoaXMuI2tleU1hcC5nZXQoayk7XG4gICAgICAgIGlmIChpbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyBhZGRpdGlvblxuICAgICAgICAgICAgaW5kZXggPSAodGhpcy4jc2l6ZSA9PT0gMFxuICAgICAgICAgICAgICAgID8gdGhpcy4jdGFpbFxuICAgICAgICAgICAgICAgIDogdGhpcy4jZnJlZS5sZW5ndGggIT09IDBcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLiNmcmVlLnBvcCgpXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy4jc2l6ZSA9PT0gdGhpcy4jbWF4XG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuI2V2aWN0KGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLiNzaXplKTtcbiAgICAgICAgICAgIHRoaXMuI2tleUxpc3RbaW5kZXhdID0gaztcbiAgICAgICAgICAgIHRoaXMuI3ZhbExpc3RbaW5kZXhdID0gdjtcbiAgICAgICAgICAgIHRoaXMuI2tleU1hcC5zZXQoaywgaW5kZXgpO1xuICAgICAgICAgICAgdGhpcy4jbmV4dFt0aGlzLiN0YWlsXSA9IGluZGV4O1xuICAgICAgICAgICAgdGhpcy4jcHJldltpbmRleF0gPSB0aGlzLiN0YWlsO1xuICAgICAgICAgICAgdGhpcy4jdGFpbCA9IGluZGV4O1xuICAgICAgICAgICAgdGhpcy4jc2l6ZSsrO1xuICAgICAgICAgICAgdGhpcy4jYWRkSXRlbVNpemUoaW5kZXgsIHNpemUsIHN0YXR1cyk7XG4gICAgICAgICAgICBpZiAoc3RhdHVzKVxuICAgICAgICAgICAgICAgIHN0YXR1cy5zZXQgPSAnYWRkJztcbiAgICAgICAgICAgIG5vVXBkYXRlVFRMID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyB1cGRhdGVcbiAgICAgICAgICAgIHRoaXMuI21vdmVUb1RhaWwoaW5kZXgpO1xuICAgICAgICAgICAgY29uc3Qgb2xkVmFsID0gdGhpcy4jdmFsTGlzdFtpbmRleF07XG4gICAgICAgICAgICBpZiAodiAhPT0gb2xkVmFsKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuI2hhc0ZldGNoTWV0aG9kICYmIHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKG9sZFZhbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgb2xkVmFsLl9fYWJvcnRDb250cm9sbGVyLmFib3J0KG5ldyBFcnJvcigncmVwbGFjZWQnKSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgX19zdGFsZVdoaWxlRmV0Y2hpbmc6IHMgfSA9IG9sZFZhbDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHMgIT09IHVuZGVmaW5lZCAmJiAhbm9EaXNwb3NlT25TZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLiNoYXNEaXNwb3NlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jZGlzcG9zZT8uKHMsIGssICdzZXQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLiNoYXNEaXNwb3NlQWZ0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiNkaXNwb3NlZD8ucHVzaChbcywgaywgJ3NldCddKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICghbm9EaXNwb3NlT25TZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuI2hhc0Rpc3Bvc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuI2Rpc3Bvc2U/LihvbGRWYWwsIGssICdzZXQnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy4jaGFzRGlzcG9zZUFmdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiNkaXNwb3NlZD8ucHVzaChbb2xkVmFsLCBrLCAnc2V0J10pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuI3JlbW92ZUl0ZW1TaXplKGluZGV4KTtcbiAgICAgICAgICAgICAgICB0aGlzLiNhZGRJdGVtU2l6ZShpbmRleCwgc2l6ZSwgc3RhdHVzKTtcbiAgICAgICAgICAgICAgICB0aGlzLiN2YWxMaXN0W2luZGV4XSA9IHY7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuc2V0ID0gJ3JlcGxhY2UnO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvbGRWYWx1ZSA9IG9sZFZhbCAmJiB0aGlzLiNpc0JhY2tncm91bmRGZXRjaChvbGRWYWwpXG4gICAgICAgICAgICAgICAgICAgICAgICA/IG9sZFZhbC5fX3N0YWxlV2hpbGVGZXRjaGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBvbGRWYWw7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvbGRWYWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLm9sZFZhbHVlID0gb2xkVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgc3RhdHVzLnNldCA9ICd1cGRhdGUnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0dGwgIT09IDAgJiYgIXRoaXMuI3R0bHMpIHtcbiAgICAgICAgICAgIHRoaXMuI2luaXRpYWxpemVUVExUcmFja2luZygpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLiN0dGxzKSB7XG4gICAgICAgICAgICBpZiAoIW5vVXBkYXRlVFRMKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jc2V0SXRlbVRUTChpbmRleCwgdHRsLCBzdGFydCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3RhdHVzKVxuICAgICAgICAgICAgICAgIHRoaXMuI3N0YXR1c1RUTChzdGF0dXMsIGluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW5vRGlzcG9zZU9uU2V0ICYmIHRoaXMuI2hhc0Rpc3Bvc2VBZnRlciAmJiB0aGlzLiNkaXNwb3NlZCkge1xuICAgICAgICAgICAgY29uc3QgZHQgPSB0aGlzLiNkaXNwb3NlZDtcbiAgICAgICAgICAgIGxldCB0YXNrO1xuICAgICAgICAgICAgd2hpbGUgKCh0YXNrID0gZHQ/LnNoaWZ0KCkpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jZGlzcG9zZUFmdGVyPy4oLi4udGFzayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEV2aWN0IHRoZSBsZWFzdCByZWNlbnRseSB1c2VkIGl0ZW0sIHJldHVybmluZyBpdHMgdmFsdWUgb3JcbiAgICAgKiBgdW5kZWZpbmVkYCBpZiBjYWNoZSBpcyBlbXB0eS5cbiAgICAgKi9cbiAgICBwb3AoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB3aGlsZSAodGhpcy4jc2l6ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbCA9IHRoaXMuI3ZhbExpc3RbdGhpcy4jaGVhZF07XG4gICAgICAgICAgICAgICAgdGhpcy4jZXZpY3QodHJ1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHZhbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbC5fX3N0YWxlV2hpbGVGZXRjaGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbC5fX3N0YWxlV2hpbGVGZXRjaGluZztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIGlmICh0aGlzLiNoYXNEaXNwb3NlQWZ0ZXIgJiYgdGhpcy4jZGlzcG9zZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkdCA9IHRoaXMuI2Rpc3Bvc2VkO1xuICAgICAgICAgICAgICAgIGxldCB0YXNrO1xuICAgICAgICAgICAgICAgIHdoaWxlICgodGFzayA9IGR0Py5zaGlmdCgpKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiNkaXNwb3NlQWZ0ZXI/LiguLi50YXNrKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgI2V2aWN0KGZyZWUpIHtcbiAgICAgICAgY29uc3QgaGVhZCA9IHRoaXMuI2hlYWQ7XG4gICAgICAgIGNvbnN0IGsgPSB0aGlzLiNrZXlMaXN0W2hlYWRdO1xuICAgICAgICBjb25zdCB2ID0gdGhpcy4jdmFsTGlzdFtoZWFkXTtcbiAgICAgICAgaWYgKHRoaXMuI2hhc0ZldGNoTWV0aG9kICYmIHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHYpKSB7XG4gICAgICAgICAgICB2Ll9fYWJvcnRDb250cm9sbGVyLmFib3J0KG5ldyBFcnJvcignZXZpY3RlZCcpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLiNoYXNEaXNwb3NlIHx8IHRoaXMuI2hhc0Rpc3Bvc2VBZnRlcikge1xuICAgICAgICAgICAgaWYgKHRoaXMuI2hhc0Rpc3Bvc2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiNkaXNwb3NlPy4odiwgaywgJ2V2aWN0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy4jaGFzRGlzcG9zZUFmdGVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jZGlzcG9zZWQ/LnB1c2goW3YsIGssICdldmljdCddKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLiNyZW1vdmVJdGVtU2l6ZShoZWFkKTtcbiAgICAgICAgLy8gaWYgd2UgYXJlbid0IGFib3V0IHRvIHVzZSB0aGUgaW5kZXgsIHRoZW4gbnVsbCB0aGVzZSBvdXRcbiAgICAgICAgaWYgKGZyZWUpIHtcbiAgICAgICAgICAgIHRoaXMuI2tleUxpc3RbaGVhZF0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLiN2YWxMaXN0W2hlYWRdID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy4jZnJlZS5wdXNoKGhlYWQpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLiNzaXplID09PSAxKSB7XG4gICAgICAgICAgICB0aGlzLiNoZWFkID0gdGhpcy4jdGFpbCA9IDA7XG4gICAgICAgICAgICB0aGlzLiNmcmVlLmxlbmd0aCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLiNoZWFkID0gdGhpcy4jbmV4dFtoZWFkXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiNrZXlNYXAuZGVsZXRlKGspO1xuICAgICAgICB0aGlzLiNzaXplLS07XG4gICAgICAgIHJldHVybiBoZWFkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiBhIGtleSBpcyBpbiB0aGUgY2FjaGUsIHdpdGhvdXQgdXBkYXRpbmcgdGhlIHJlY2VuY3kgb2YgdXNlLlxuICAgICAqIFdpbGwgcmV0dXJuIGZhbHNlIGlmIHRoZSBpdGVtIGlzIHN0YWxlLCBldmVuIHRob3VnaCBpdCBpcyB0ZWNobmljYWxseVxuICAgICAqIGluIHRoZSBjYWNoZS5cbiAgICAgKlxuICAgICAqIENoZWNrIGlmIGEga2V5IGlzIGluIHRoZSBjYWNoZSwgd2l0aG91dCB1cGRhdGluZyB0aGUgcmVjZW5jeSBvZlxuICAgICAqIHVzZS4gQWdlIGlzIHVwZGF0ZWQgaWYge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLnVwZGF0ZUFnZU9uSGFzfSBpcyBzZXRcbiAgICAgKiB0byBgdHJ1ZWAgaW4gZWl0aGVyIHRoZSBvcHRpb25zIG9yIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICAgKlxuICAgICAqIFdpbGwgcmV0dXJuIGBmYWxzZWAgaWYgdGhlIGl0ZW0gaXMgc3RhbGUsIGV2ZW4gdGhvdWdoIGl0IGlzIHRlY2huaWNhbGx5IGluXG4gICAgICogdGhlIGNhY2hlLiBUaGUgZGlmZmVyZW5jZSBjYW4gYmUgZGV0ZXJtaW5lZCAoaWYgaXQgbWF0dGVycykgYnkgdXNpbmcgYVxuICAgICAqIGBzdGF0dXNgIGFyZ3VtZW50LCBhbmQgaW5zcGVjdGluZyB0aGUgYGhhc2AgZmllbGQuXG4gICAgICpcbiAgICAgKiBXaWxsIG5vdCB1cGRhdGUgaXRlbSBhZ2UgdW5sZXNzXG4gICAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLnVwZGF0ZUFnZU9uSGFzfSBpcyBzZXQuXG4gICAgICovXG4gICAgaGFzKGssIGhhc09wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCB7IHVwZGF0ZUFnZU9uSGFzID0gdGhpcy51cGRhdGVBZ2VPbkhhcywgc3RhdHVzIH0gPSBoYXNPcHRpb25zO1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuI2tleU1hcC5nZXQoayk7XG4gICAgICAgIGlmIChpbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCB2ID0gdGhpcy4jdmFsTGlzdFtpbmRleF07XG4gICAgICAgICAgICBpZiAodGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2godikgJiZcbiAgICAgICAgICAgICAgICB2Ll9fc3RhbGVXaGlsZUZldGNoaW5nID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuI2lzU3RhbGUoaW5kZXgpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHVwZGF0ZUFnZU9uSGFzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI3VwZGF0ZUl0ZW1BZ2UoaW5kZXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5oYXMgPSAnaGl0JztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jc3RhdHVzVFRMKHN0YXR1cywgaW5kZXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHN0YXR1cykge1xuICAgICAgICAgICAgICAgIHN0YXR1cy5oYXMgPSAnc3RhbGUnO1xuICAgICAgICAgICAgICAgIHRoaXMuI3N0YXR1c1RUTChzdGF0dXMsIGluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzdGF0dXMpIHtcbiAgICAgICAgICAgIHN0YXR1cy5oYXMgPSAnbWlzcyc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBMaWtlIHtAbGluayBMUlVDYWNoZSNnZXR9IGJ1dCBkb2Vzbid0IHVwZGF0ZSByZWNlbmN5IG9yIGRlbGV0ZSBzdGFsZVxuICAgICAqIGl0ZW1zLlxuICAgICAqXG4gICAgICogUmV0dXJucyBgdW5kZWZpbmVkYCBpZiB0aGUgaXRlbSBpcyBzdGFsZSwgdW5sZXNzXG4gICAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLmFsbG93U3RhbGV9IGlzIHNldC5cbiAgICAgKi9cbiAgICBwZWVrKGssIHBlZWtPcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgeyBhbGxvd1N0YWxlID0gdGhpcy5hbGxvd1N0YWxlIH0gPSBwZWVrT3B0aW9ucztcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLiNrZXlNYXAuZ2V0KGspO1xuICAgICAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgKCFhbGxvd1N0YWxlICYmIHRoaXMuI2lzU3RhbGUoaW5kZXgpKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHYgPSB0aGlzLiN2YWxMaXN0W2luZGV4XTtcbiAgICAgICAgLy8gZWl0aGVyIHN0YWxlIGFuZCBhbGxvd2VkLCBvciBmb3JjaW5nIGEgcmVmcmVzaCBvZiBub24tc3RhbGUgdmFsdWVcbiAgICAgICAgcmV0dXJuIHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHYpID8gdi5fX3N0YWxlV2hpbGVGZXRjaGluZyA6IHY7XG4gICAgfVxuICAgICNiYWNrZ3JvdW5kRmV0Y2goaywgaW5kZXgsIG9wdGlvbnMsIGNvbnRleHQpIHtcbiAgICAgICAgY29uc3QgdiA9IGluZGV4ID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB0aGlzLiN2YWxMaXN0W2luZGV4XTtcbiAgICAgICAgaWYgKHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHYpKSB7XG4gICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhYyA9IG5ldyBBQygpO1xuICAgICAgICBjb25zdCB7IHNpZ25hbCB9ID0gb3B0aW9ucztcbiAgICAgICAgLy8gd2hlbi9pZiBvdXIgQUMgc2lnbmFscywgdGhlbiBzdG9wIGxpc3RlbmluZyB0byB0aGVpcnMuXG4gICAgICAgIHNpZ25hbD8uYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCAoKSA9PiBhYy5hYm9ydChzaWduYWwucmVhc29uKSwge1xuICAgICAgICAgICAgc2lnbmFsOiBhYy5zaWduYWwsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBmZXRjaE9wdHMgPSB7XG4gICAgICAgICAgICBzaWduYWw6IGFjLnNpZ25hbCxcbiAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBjYiA9ICh2LCB1cGRhdGVDYWNoZSA9IGZhbHNlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IGFib3J0ZWQgfSA9IGFjLnNpZ25hbDtcbiAgICAgICAgICAgIGNvbnN0IGlnbm9yZUFib3J0ID0gb3B0aW9ucy5pZ25vcmVGZXRjaEFib3J0ICYmIHYgIT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnN0YXR1cykge1xuICAgICAgICAgICAgICAgIGlmIChhYm9ydGVkICYmICF1cGRhdGVDYWNoZSkge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnN0YXR1cy5mZXRjaEFib3J0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnN0YXR1cy5mZXRjaEVycm9yID0gYWMuc2lnbmFsLnJlYXNvbjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlnbm9yZUFib3J0KVxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5zdGF0dXMuZmV0Y2hBYm9ydElnbm9yZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5zdGF0dXMuZmV0Y2hSZXNvbHZlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFib3J0ZWQgJiYgIWlnbm9yZUFib3J0ICYmICF1cGRhdGVDYWNoZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmZXRjaEZhaWwoYWMuc2lnbmFsLnJlYXNvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBlaXRoZXIgd2UgZGlkbid0IGFib3J0LCBhbmQgYXJlIHN0aWxsIGhlcmUsIG9yIHdlIGRpZCwgYW5kIGlnbm9yZWRcbiAgICAgICAgICAgIGNvbnN0IGJmID0gcDtcbiAgICAgICAgICAgIGlmICh0aGlzLiN2YWxMaXN0W2luZGV4XSA9PT0gcCkge1xuICAgICAgICAgICAgICAgIGlmICh2ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJmLl9fc3RhbGVXaGlsZUZldGNoaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiN2YWxMaXN0W2luZGV4XSA9IGJmLl9fc3RhbGVXaGlsZUZldGNoaW5nO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jZGVsZXRlKGssICdmZXRjaCcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5zdGF0dXMpXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnN0YXR1cy5mZXRjaFVwZGF0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldChrLCB2LCBmZXRjaE9wdHMub3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGViID0gKGVyKSA9PiB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5zdGF0dXMpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLnN0YXR1cy5mZXRjaFJlamVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBvcHRpb25zLnN0YXR1cy5mZXRjaEVycm9yID0gZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmV0Y2hGYWlsKGVyKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZmV0Y2hGYWlsID0gKGVyKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IGFib3J0ZWQgfSA9IGFjLnNpZ25hbDtcbiAgICAgICAgICAgIGNvbnN0IGFsbG93U3RhbGVBYm9ydGVkID0gYWJvcnRlZCAmJiBvcHRpb25zLmFsbG93U3RhbGVPbkZldGNoQWJvcnQ7XG4gICAgICAgICAgICBjb25zdCBhbGxvd1N0YWxlID0gYWxsb3dTdGFsZUFib3J0ZWQgfHwgb3B0aW9ucy5hbGxvd1N0YWxlT25GZXRjaFJlamVjdGlvbjtcbiAgICAgICAgICAgIGNvbnN0IG5vRGVsZXRlID0gYWxsb3dTdGFsZSB8fCBvcHRpb25zLm5vRGVsZXRlT25GZXRjaFJlamVjdGlvbjtcbiAgICAgICAgICAgIGNvbnN0IGJmID0gcDtcbiAgICAgICAgICAgIGlmICh0aGlzLiN2YWxMaXN0W2luZGV4XSA9PT0gcCkge1xuICAgICAgICAgICAgICAgIC8vIGlmIHdlIGFsbG93IHN0YWxlIG9uIGZldGNoIHJlamVjdGlvbnMsIHRoZW4gd2UgbmVlZCB0byBlbnN1cmUgdGhhdFxuICAgICAgICAgICAgICAgIC8vIHRoZSBzdGFsZSB2YWx1ZSBpcyBub3QgcmVtb3ZlZCBmcm9tIHRoZSBjYWNoZSB3aGVuIHRoZSBmZXRjaCBmYWlscy5cbiAgICAgICAgICAgICAgICBjb25zdCBkZWwgPSAhbm9EZWxldGUgfHwgYmYuX19zdGFsZVdoaWxlRmV0Y2hpbmcgPT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBpZiAoZGVsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI2RlbGV0ZShrLCAnZmV0Y2gnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIWFsbG93U3RhbGVBYm9ydGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHN0aWxsIHJlcGxhY2UgdGhlICpwcm9taXNlKiB3aXRoIHRoZSBzdGFsZSB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgLy8gc2luY2Ugd2UgYXJlIGRvbmUgd2l0aCB0aGUgcHJvbWlzZSBhdCB0aGlzIHBvaW50LlxuICAgICAgICAgICAgICAgICAgICAvLyBsZWF2ZSBpdCB1bnRvdWNoZWQgaWYgd2UncmUgc3RpbGwgd2FpdGluZyBmb3IgYW5cbiAgICAgICAgICAgICAgICAgICAgLy8gYWJvcnRlZCBiYWNrZ3JvdW5kIGZldGNoIHRoYXQgaGFzbid0IHlldCByZXR1cm5lZC5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jdmFsTGlzdFtpbmRleF0gPSBiZi5fX3N0YWxlV2hpbGVGZXRjaGluZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYWxsb3dTdGFsZSkge1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnN0YXR1cyAmJiBiZi5fX3N0YWxlV2hpbGVGZXRjaGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuc3RhdHVzLnJldHVybmVkU3RhbGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYmYuX19zdGFsZVdoaWxlRmV0Y2hpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChiZi5fX3JldHVybmVkID09PSBiZikge1xuICAgICAgICAgICAgICAgIHRocm93IGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBwY2FsbCA9IChyZXMsIHJlaikgPT4ge1xuICAgICAgICAgICAgY29uc3QgZm1wID0gdGhpcy4jZmV0Y2hNZXRob2Q/LihrLCB2LCBmZXRjaE9wdHMpO1xuICAgICAgICAgICAgaWYgKGZtcCAmJiBmbXAgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgZm1wLnRoZW4odiA9PiByZXModiA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogdiksIHJlaik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBpZ25vcmVkLCB3ZSBnbyB1bnRpbCB3ZSBmaW5pc2gsIHJlZ2FyZGxlc3MuXG4gICAgICAgICAgICAvLyBkZWZlciBjaGVjayB1bnRpbCB3ZSBhcmUgYWN0dWFsbHkgYWJvcnRpbmcsXG4gICAgICAgICAgICAvLyBzbyBmZXRjaE1ldGhvZCBjYW4gb3ZlcnJpZGUuXG4gICAgICAgICAgICBhYy5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zLmlnbm9yZUZldGNoQWJvcnQgfHxcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5hbGxvd1N0YWxlT25GZXRjaEFib3J0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcyh1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAvLyB3aGVuIGl0IGV2ZW50dWFsbHkgcmVzb2x2ZXMsIHVwZGF0ZSB0aGUgY2FjaGUuXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmFsbG93U3RhbGVPbkZldGNoQWJvcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcyA9IHYgPT4gY2IodiwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKG9wdGlvbnMuc3RhdHVzKVxuICAgICAgICAgICAgb3B0aW9ucy5zdGF0dXMuZmV0Y2hEaXNwYXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgcCA9IG5ldyBQcm9taXNlKHBjYWxsKS50aGVuKGNiLCBlYik7XG4gICAgICAgIGNvbnN0IGJmID0gT2JqZWN0LmFzc2lnbihwLCB7XG4gICAgICAgICAgICBfX2Fib3J0Q29udHJvbGxlcjogYWMsXG4gICAgICAgICAgICBfX3N0YWxlV2hpbGVGZXRjaGluZzogdixcbiAgICAgICAgICAgIF9fcmV0dXJuZWQ6IHVuZGVmaW5lZCxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChpbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyBpbnRlcm5hbCwgZG9uJ3QgZXhwb3NlIHN0YXR1cy5cbiAgICAgICAgICAgIHRoaXMuc2V0KGssIGJmLCB7IC4uLmZldGNoT3B0cy5vcHRpb25zLCBzdGF0dXM6IHVuZGVmaW5lZCB9KTtcbiAgICAgICAgICAgIGluZGV4ID0gdGhpcy4ja2V5TWFwLmdldChrKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuI3ZhbExpc3RbaW5kZXhdID0gYmY7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJmO1xuICAgIH1cbiAgICAjaXNCYWNrZ3JvdW5kRmV0Y2gocCkge1xuICAgICAgICBpZiAoIXRoaXMuI2hhc0ZldGNoTWV0aG9kKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb25zdCBiID0gcDtcbiAgICAgICAgcmV0dXJuICghIWIgJiZcbiAgICAgICAgICAgIGIgaW5zdGFuY2VvZiBQcm9taXNlICYmXG4gICAgICAgICAgICBiLmhhc093blByb3BlcnR5KCdfX3N0YWxlV2hpbGVGZXRjaGluZycpICYmXG4gICAgICAgICAgICBiLl9fYWJvcnRDb250cm9sbGVyIGluc3RhbmNlb2YgQUMpO1xuICAgIH1cbiAgICBhc3luYyBmZXRjaChrLCBmZXRjaE9wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCB7IFxuICAgICAgICAvLyBnZXQgb3B0aW9uc1xuICAgICAgICBhbGxvd1N0YWxlID0gdGhpcy5hbGxvd1N0YWxlLCB1cGRhdGVBZ2VPbkdldCA9IHRoaXMudXBkYXRlQWdlT25HZXQsIG5vRGVsZXRlT25TdGFsZUdldCA9IHRoaXMubm9EZWxldGVPblN0YWxlR2V0LCBcbiAgICAgICAgLy8gc2V0IG9wdGlvbnNcbiAgICAgICAgdHRsID0gdGhpcy50dGwsIG5vRGlzcG9zZU9uU2V0ID0gdGhpcy5ub0Rpc3Bvc2VPblNldCwgc2l6ZSA9IDAsIHNpemVDYWxjdWxhdGlvbiA9IHRoaXMuc2l6ZUNhbGN1bGF0aW9uLCBub1VwZGF0ZVRUTCA9IHRoaXMubm9VcGRhdGVUVEwsIFxuICAgICAgICAvLyBmZXRjaCBleGNsdXNpdmUgb3B0aW9uc1xuICAgICAgICBub0RlbGV0ZU9uRmV0Y2hSZWplY3Rpb24gPSB0aGlzLm5vRGVsZXRlT25GZXRjaFJlamVjdGlvbiwgYWxsb3dTdGFsZU9uRmV0Y2hSZWplY3Rpb24gPSB0aGlzLmFsbG93U3RhbGVPbkZldGNoUmVqZWN0aW9uLCBpZ25vcmVGZXRjaEFib3J0ID0gdGhpcy5pZ25vcmVGZXRjaEFib3J0LCBhbGxvd1N0YWxlT25GZXRjaEFib3J0ID0gdGhpcy5hbGxvd1N0YWxlT25GZXRjaEFib3J0LCBjb250ZXh0LCBmb3JjZVJlZnJlc2ggPSBmYWxzZSwgc3RhdHVzLCBzaWduYWwsIH0gPSBmZXRjaE9wdGlvbnM7XG4gICAgICAgIGlmICghdGhpcy4jaGFzRmV0Y2hNZXRob2QpIHtcbiAgICAgICAgICAgIGlmIChzdGF0dXMpXG4gICAgICAgICAgICAgICAgc3RhdHVzLmZldGNoID0gJ2dldCc7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXQoaywge1xuICAgICAgICAgICAgICAgIGFsbG93U3RhbGUsXG4gICAgICAgICAgICAgICAgdXBkYXRlQWdlT25HZXQsXG4gICAgICAgICAgICAgICAgbm9EZWxldGVPblN0YWxlR2V0LFxuICAgICAgICAgICAgICAgIHN0YXR1cyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBhbGxvd1N0YWxlLFxuICAgICAgICAgICAgdXBkYXRlQWdlT25HZXQsXG4gICAgICAgICAgICBub0RlbGV0ZU9uU3RhbGVHZXQsXG4gICAgICAgICAgICB0dGwsXG4gICAgICAgICAgICBub0Rpc3Bvc2VPblNldCxcbiAgICAgICAgICAgIHNpemUsXG4gICAgICAgICAgICBzaXplQ2FsY3VsYXRpb24sXG4gICAgICAgICAgICBub1VwZGF0ZVRUTCxcbiAgICAgICAgICAgIG5vRGVsZXRlT25GZXRjaFJlamVjdGlvbixcbiAgICAgICAgICAgIGFsbG93U3RhbGVPbkZldGNoUmVqZWN0aW9uLFxuICAgICAgICAgICAgYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydCxcbiAgICAgICAgICAgIGlnbm9yZUZldGNoQWJvcnQsXG4gICAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgICBzaWduYWwsXG4gICAgICAgIH07XG4gICAgICAgIGxldCBpbmRleCA9IHRoaXMuI2tleU1hcC5nZXQoayk7XG4gICAgICAgIGlmIChpbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoc3RhdHVzKVxuICAgICAgICAgICAgICAgIHN0YXR1cy5mZXRjaCA9ICdtaXNzJztcbiAgICAgICAgICAgIGNvbnN0IHAgPSB0aGlzLiNiYWNrZ3JvdW5kRmV0Y2goaywgaW5kZXgsIG9wdGlvbnMsIGNvbnRleHQpO1xuICAgICAgICAgICAgcmV0dXJuIChwLl9fcmV0dXJuZWQgPSBwKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIGluIGNhY2hlLCBtYXliZSBhbHJlYWR5IGZldGNoaW5nXG4gICAgICAgICAgICBjb25zdCB2ID0gdGhpcy4jdmFsTGlzdFtpbmRleF07XG4gICAgICAgICAgICBpZiAodGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2godikpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFsZSA9IGFsbG93U3RhbGUgJiYgdi5fX3N0YWxlV2hpbGVGZXRjaGluZyAhPT0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGlmIChzdGF0dXMpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmZldGNoID0gJ2luZmxpZ2h0JztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWxlKVxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLnJldHVybmVkU3RhbGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gc3RhbGUgPyB2Ll9fc3RhbGVXaGlsZUZldGNoaW5nIDogKHYuX19yZXR1cm5lZCA9IHYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgd2UgZm9yY2UgYSByZWZyZXNoLCB0aGF0IG1lYW5zIGRvIE5PVCBzZXJ2ZSB0aGUgY2FjaGVkIHZhbHVlLFxuICAgICAgICAgICAgLy8gdW5sZXNzIHdlIGFyZSBhbHJlYWR5IGluIHRoZSBwcm9jZXNzIG9mIHJlZnJlc2hpbmcgdGhlIGNhY2hlLlxuICAgICAgICAgICAgY29uc3QgaXNTdGFsZSA9IHRoaXMuI2lzU3RhbGUoaW5kZXgpO1xuICAgICAgICAgICAgaWYgKCFmb3JjZVJlZnJlc2ggJiYgIWlzU3RhbGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdHVzKVxuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZmV0Y2ggPSAnaGl0JztcbiAgICAgICAgICAgICAgICB0aGlzLiNtb3ZlVG9UYWlsKGluZGV4KTtcbiAgICAgICAgICAgICAgICBpZiAodXBkYXRlQWdlT25HZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jdXBkYXRlSXRlbUFnZShpbmRleCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzdGF0dXMpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI3N0YXR1c1RUTChzdGF0dXMsIGluZGV4KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIG9rLCBpdCBpcyBzdGFsZSBvciBhIGZvcmNlZCByZWZyZXNoLCBhbmQgbm90IGFscmVhZHkgZmV0Y2hpbmcuXG4gICAgICAgICAgICAvLyByZWZyZXNoIHRoZSBjYWNoZS5cbiAgICAgICAgICAgIGNvbnN0IHAgPSB0aGlzLiNiYWNrZ3JvdW5kRmV0Y2goaywgaW5kZXgsIG9wdGlvbnMsIGNvbnRleHQpO1xuICAgICAgICAgICAgY29uc3QgaGFzU3RhbGUgPSBwLl9fc3RhbGVXaGlsZUZldGNoaW5nICE9PSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjb25zdCBzdGFsZVZhbCA9IGhhc1N0YWxlICYmIGFsbG93U3RhbGU7XG4gICAgICAgICAgICBpZiAoc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgc3RhdHVzLmZldGNoID0gaXNTdGFsZSA/ICdzdGFsZScgOiAncmVmcmVzaCc7XG4gICAgICAgICAgICAgICAgaWYgKHN0YWxlVmFsICYmIGlzU3RhbGUpXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5yZXR1cm5lZFN0YWxlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzdGFsZVZhbCA/IHAuX19zdGFsZVdoaWxlRmV0Y2hpbmcgOiAocC5fX3JldHVybmVkID0gcCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgZm9yY2VGZXRjaChrLCBmZXRjaE9wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCB2ID0gYXdhaXQgdGhpcy5mZXRjaChrLCBmZXRjaE9wdGlvbnMpO1xuICAgICAgICBpZiAodiA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdmZXRjaCgpIHJldHVybmVkIHVuZGVmaW5lZCcpO1xuICAgICAgICByZXR1cm4gdjtcbiAgICB9XG4gICAgbWVtbyhrLCBtZW1vT3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IG1lbW9NZXRob2QgPSB0aGlzLiNtZW1vTWV0aG9kO1xuICAgICAgICBpZiAoIW1lbW9NZXRob2QpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbm8gbWVtb01ldGhvZCBwcm92aWRlZCB0byBjb25zdHJ1Y3RvcicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgY29udGV4dCwgZm9yY2VSZWZyZXNoLCAuLi5vcHRpb25zIH0gPSBtZW1vT3B0aW9ucztcbiAgICAgICAgY29uc3QgdiA9IHRoaXMuZ2V0KGssIG9wdGlvbnMpO1xuICAgICAgICBpZiAoIWZvcmNlUmVmcmVzaCAmJiB2ICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgY29uc3QgdnYgPSBtZW1vTWV0aG9kKGssIHYsIHtcbiAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zZXQoaywgdnYsIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gdnY7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiBhIHZhbHVlIGZyb20gdGhlIGNhY2hlLiBXaWxsIHVwZGF0ZSB0aGUgcmVjZW5jeSBvZiB0aGUgY2FjaGVcbiAgICAgKiBlbnRyeSBmb3VuZC5cbiAgICAgKlxuICAgICAqIElmIHRoZSBrZXkgaXMgbm90IGZvdW5kLCBnZXQoKSB3aWxsIHJldHVybiBgdW5kZWZpbmVkYC5cbiAgICAgKi9cbiAgICBnZXQoaywgZ2V0T3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHsgYWxsb3dTdGFsZSA9IHRoaXMuYWxsb3dTdGFsZSwgdXBkYXRlQWdlT25HZXQgPSB0aGlzLnVwZGF0ZUFnZU9uR2V0LCBub0RlbGV0ZU9uU3RhbGVHZXQgPSB0aGlzLm5vRGVsZXRlT25TdGFsZUdldCwgc3RhdHVzLCB9ID0gZ2V0T3B0aW9ucztcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLiNrZXlNYXAuZ2V0KGspO1xuICAgICAgICBpZiAoaW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLiN2YWxMaXN0W2luZGV4XTtcbiAgICAgICAgICAgIGNvbnN0IGZldGNoaW5nID0gdGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2godmFsdWUpO1xuICAgICAgICAgICAgaWYgKHN0YXR1cylcbiAgICAgICAgICAgICAgICB0aGlzLiNzdGF0dXNUVEwoc3RhdHVzLCBpbmRleCk7XG4gICAgICAgICAgICBpZiAodGhpcy4jaXNTdGFsZShpbmRleCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdHVzKVxuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZ2V0ID0gJ3N0YWxlJztcbiAgICAgICAgICAgICAgICAvLyBkZWxldGUgb25seSBpZiBub3QgYW4gaW4tZmxpZ2h0IGJhY2tncm91bmQgZmV0Y2hcbiAgICAgICAgICAgICAgICBpZiAoIWZldGNoaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghbm9EZWxldGVPblN0YWxlR2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiNkZWxldGUoaywgJ2V4cGlyZScpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgJiYgYWxsb3dTdGFsZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cy5yZXR1cm5lZFN0YWxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFsbG93U3RhbGUgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93U3RhbGUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLl9fc3RhbGVXaGlsZUZldGNoaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cy5yZXR1cm5lZFN0YWxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWxsb3dTdGFsZSA/IHZhbHVlLl9fc3RhbGVXaGlsZUZldGNoaW5nIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChzdGF0dXMpXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5nZXQgPSAnaGl0JztcbiAgICAgICAgICAgICAgICAvLyBpZiB3ZSdyZSBjdXJyZW50bHkgZmV0Y2hpbmcgaXQsIHdlIGRvbid0IGFjdHVhbGx5IGhhdmUgaXQgeWV0XG4gICAgICAgICAgICAgICAgLy8gaXQncyBub3Qgc3RhbGUsIHdoaWNoIG1lYW5zIHRoaXMgaXNuJ3QgYSBzdGFsZVdoaWxlUmVmZXRjaGluZy5cbiAgICAgICAgICAgICAgICAvLyBJZiBpdCdzIG5vdCBzdGFsZSwgYW5kIGZldGNoaW5nLCBBTkQgaGFzIGEgX19zdGFsZVdoaWxlRmV0Y2hpbmdcbiAgICAgICAgICAgICAgICAvLyB2YWx1ZSwgdGhlbiB0aGF0IG1lYW5zIHRoZSB1c2VyIGZldGNoZWQgd2l0aCB7Zm9yY2VSZWZyZXNoOnRydWV9LFxuICAgICAgICAgICAgICAgIC8vIHNvIGl0J3Mgc2FmZSB0byByZXR1cm4gdGhhdCB2YWx1ZS5cbiAgICAgICAgICAgICAgICBpZiAoZmV0Y2hpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLl9fc3RhbGVXaGlsZUZldGNoaW5nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLiNtb3ZlVG9UYWlsKGluZGV4KTtcbiAgICAgICAgICAgICAgICBpZiAodXBkYXRlQWdlT25HZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jdXBkYXRlSXRlbUFnZShpbmRleCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzdGF0dXMpIHtcbiAgICAgICAgICAgIHN0YXR1cy5nZXQgPSAnbWlzcyc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgI2Nvbm5lY3QocCwgbikge1xuICAgICAgICB0aGlzLiNwcmV2W25dID0gcDtcbiAgICAgICAgdGhpcy4jbmV4dFtwXSA9IG47XG4gICAgfVxuICAgICNtb3ZlVG9UYWlsKGluZGV4KSB7XG4gICAgICAgIC8vIGlmIHRhaWwgYWxyZWFkeSwgbm90aGluZyB0byBkb1xuICAgICAgICAvLyBpZiBoZWFkLCBtb3ZlIGhlYWQgdG8gbmV4dFtpbmRleF1cbiAgICAgICAgLy8gZWxzZVxuICAgICAgICAvLyAgIG1vdmUgbmV4dFtwcmV2W2luZGV4XV0gdG8gbmV4dFtpbmRleF0gKGhlYWQgaGFzIG5vIHByZXYpXG4gICAgICAgIC8vICAgbW92ZSBwcmV2W25leHRbaW5kZXhdXSB0byBwcmV2W2luZGV4XVxuICAgICAgICAvLyBwcmV2W2luZGV4XSA9IHRhaWxcbiAgICAgICAgLy8gbmV4dFt0YWlsXSA9IGluZGV4XG4gICAgICAgIC8vIHRhaWwgPSBpbmRleFxuICAgICAgICBpZiAoaW5kZXggIT09IHRoaXMuI3RhaWwpIHtcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gdGhpcy4jaGVhZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuI2hlYWQgPSB0aGlzLiNuZXh0W2luZGV4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuI2Nvbm5lY3QodGhpcy4jcHJldltpbmRleF0sIHRoaXMuI25leHRbaW5kZXhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuI2Nvbm5lY3QodGhpcy4jdGFpbCwgaW5kZXgpO1xuICAgICAgICAgICAgdGhpcy4jdGFpbCA9IGluZGV4O1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlbGV0ZXMgYSBrZXkgb3V0IG9mIHRoZSBjYWNoZS5cbiAgICAgKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUga2V5IHdhcyBkZWxldGVkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAgICovXG4gICAgZGVsZXRlKGspIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2RlbGV0ZShrLCAnZGVsZXRlJyk7XG4gICAgfVxuICAgICNkZWxldGUoaywgcmVhc29uKSB7XG4gICAgICAgIGxldCBkZWxldGVkID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLiNzaXplICE9PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuI2tleU1hcC5nZXQoayk7XG4gICAgICAgICAgICBpZiAoaW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLiNzaXplID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI2NsZWFyKHJlYXNvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiNyZW1vdmVJdGVtU2l6ZShpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHYgPSB0aGlzLiN2YWxMaXN0W2luZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHYpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2Ll9fYWJvcnRDb250cm9sbGVyLmFib3J0KG5ldyBFcnJvcignZGVsZXRlZCcpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLiNoYXNEaXNwb3NlIHx8IHRoaXMuI2hhc0Rpc3Bvc2VBZnRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuI2hhc0Rpc3Bvc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiNkaXNwb3NlPy4odiwgaywgcmVhc29uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLiNoYXNEaXNwb3NlQWZ0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiNkaXNwb3NlZD8ucHVzaChbdiwgaywgcmVhc29uXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy4ja2V5TWFwLmRlbGV0ZShrKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4ja2V5TGlzdFtpbmRleF0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI3ZhbExpc3RbaW5kZXhdID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IHRoaXMuI3RhaWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuI3RhaWwgPSB0aGlzLiNwcmV2W2luZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpbmRleCA9PT0gdGhpcy4jaGVhZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jaGVhZCA9IHRoaXMuI25leHRbaW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGkgPSB0aGlzLiNwcmV2W2luZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuI25leHRbcGldID0gdGhpcy4jbmV4dFtpbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuaSA9IHRoaXMuI25leHRbaW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jcHJldltuaV0gPSB0aGlzLiNwcmV2W2luZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLiNzaXplLS07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI2ZyZWUucHVzaChpbmRleCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLiNoYXNEaXNwb3NlQWZ0ZXIgJiYgdGhpcy4jZGlzcG9zZWQ/Lmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgZHQgPSB0aGlzLiNkaXNwb3NlZDtcbiAgICAgICAgICAgIGxldCB0YXNrO1xuICAgICAgICAgICAgd2hpbGUgKCh0YXNrID0gZHQ/LnNoaWZ0KCkpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jZGlzcG9zZUFmdGVyPy4oLi4udGFzayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlbGV0ZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENsZWFyIHRoZSBjYWNoZSBlbnRpcmVseSwgdGhyb3dpbmcgYXdheSBhbGwgdmFsdWVzLlxuICAgICAqL1xuICAgIGNsZWFyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jY2xlYXIoJ2RlbGV0ZScpO1xuICAgIH1cbiAgICAjY2xlYXIocmVhc29uKSB7XG4gICAgICAgIGZvciAoY29uc3QgaW5kZXggb2YgdGhpcy4jcmluZGV4ZXMoeyBhbGxvd1N0YWxlOiB0cnVlIH0pKSB7XG4gICAgICAgICAgICBjb25zdCB2ID0gdGhpcy4jdmFsTGlzdFtpbmRleF07XG4gICAgICAgICAgICBpZiAodGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2godikpIHtcbiAgICAgICAgICAgICAgICB2Ll9fYWJvcnRDb250cm9sbGVyLmFib3J0KG5ldyBFcnJvcignZGVsZXRlZCcpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGsgPSB0aGlzLiNrZXlMaXN0W2luZGV4XTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy4jaGFzRGlzcG9zZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiNkaXNwb3NlPy4odiwgaywgcmVhc29uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuI2hhc0Rpc3Bvc2VBZnRlcikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiNkaXNwb3NlZD8ucHVzaChbdiwgaywgcmVhc29uXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuI2tleU1hcC5jbGVhcigpO1xuICAgICAgICB0aGlzLiN2YWxMaXN0LmZpbGwodW5kZWZpbmVkKTtcbiAgICAgICAgdGhpcy4ja2V5TGlzdC5maWxsKHVuZGVmaW5lZCk7XG4gICAgICAgIGlmICh0aGlzLiN0dGxzICYmIHRoaXMuI3N0YXJ0cykge1xuICAgICAgICAgICAgdGhpcy4jdHRscy5maWxsKDApO1xuICAgICAgICAgICAgdGhpcy4jc3RhcnRzLmZpbGwoMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuI3NpemVzKSB7XG4gICAgICAgICAgICB0aGlzLiNzaXplcy5maWxsKDApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuI2hlYWQgPSAwO1xuICAgICAgICB0aGlzLiN0YWlsID0gMDtcbiAgICAgICAgdGhpcy4jZnJlZS5sZW5ndGggPSAwO1xuICAgICAgICB0aGlzLiNjYWxjdWxhdGVkU2l6ZSA9IDA7XG4gICAgICAgIHRoaXMuI3NpemUgPSAwO1xuICAgICAgICBpZiAodGhpcy4jaGFzRGlzcG9zZUFmdGVyICYmIHRoaXMuI2Rpc3Bvc2VkKSB7XG4gICAgICAgICAgICBjb25zdCBkdCA9IHRoaXMuI2Rpc3Bvc2VkO1xuICAgICAgICAgICAgbGV0IHRhc2s7XG4gICAgICAgICAgICB3aGlsZSAoKHRhc2sgPSBkdD8uc2hpZnQoKSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiNkaXNwb3NlQWZ0ZXI/LiguLi50YXNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuTFJVQ2FjaGUgPSBMUlVDYWNoZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk1pbmlwYXNzID0gZXhwb3J0cy5pc1dyaXRhYmxlID0gZXhwb3J0cy5pc1JlYWRhYmxlID0gZXhwb3J0cy5pc1N0cmVhbSA9IHZvaWQgMDtcbmNvbnN0IHByb2MgPSB0eXBlb2YgcHJvY2VzcyA9PT0gJ29iamVjdCcgJiYgcHJvY2Vzc1xuICAgID8gcHJvY2Vzc1xuICAgIDoge1xuICAgICAgICBzdGRvdXQ6IG51bGwsXG4gICAgICAgIHN0ZGVycjogbnVsbCxcbiAgICB9O1xuY29uc3Qgbm9kZV9ldmVudHNfMSA9IHJlcXVpcmUoXCJub2RlOmV2ZW50c1wiKTtcbmNvbnN0IG5vZGVfc3RyZWFtXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIm5vZGU6c3RyZWFtXCIpKTtcbmNvbnN0IG5vZGVfc3RyaW5nX2RlY29kZXJfMSA9IHJlcXVpcmUoXCJub2RlOnN0cmluZ19kZWNvZGVyXCIpO1xuLyoqXG4gKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgYXJndW1lbnQgaXMgYSBNaW5pcGFzcyBzdHJlYW0sIE5vZGUgc3RyZWFtLCBvciBzb21ldGhpbmdcbiAqIGVsc2UgdGhhdCBNaW5pcGFzcyBjYW4gaW50ZXJhY3Qgd2l0aC5cbiAqL1xuY29uc3QgaXNTdHJlYW0gPSAocykgPT4gISFzICYmXG4gICAgdHlwZW9mIHMgPT09ICdvYmplY3QnICYmXG4gICAgKHMgaW5zdGFuY2VvZiBNaW5pcGFzcyB8fFxuICAgICAgICBzIGluc3RhbmNlb2Ygbm9kZV9zdHJlYW1fMS5kZWZhdWx0IHx8XG4gICAgICAgICgwLCBleHBvcnRzLmlzUmVhZGFibGUpKHMpIHx8XG4gICAgICAgICgwLCBleHBvcnRzLmlzV3JpdGFibGUpKHMpKTtcbmV4cG9ydHMuaXNTdHJlYW0gPSBpc1N0cmVhbTtcbi8qKlxuICogUmV0dXJuIHRydWUgaWYgdGhlIGFyZ3VtZW50IGlzIGEgdmFsaWQge0BsaW5rIE1pbmlwYXNzLlJlYWRhYmxlfVxuICovXG5jb25zdCBpc1JlYWRhYmxlID0gKHMpID0+ICEhcyAmJlxuICAgIHR5cGVvZiBzID09PSAnb2JqZWN0JyAmJlxuICAgIHMgaW5zdGFuY2VvZiBub2RlX2V2ZW50c18xLkV2ZW50RW1pdHRlciAmJlxuICAgIHR5cGVvZiBzLnBpcGUgPT09ICdmdW5jdGlvbicgJiZcbiAgICAvLyBub2RlIGNvcmUgV3JpdGFibGUgc3RyZWFtcyBoYXZlIGEgcGlwZSgpIG1ldGhvZCwgYnV0IGl0IHRocm93c1xuICAgIHMucGlwZSAhPT0gbm9kZV9zdHJlYW1fMS5kZWZhdWx0LldyaXRhYmxlLnByb3RvdHlwZS5waXBlO1xuZXhwb3J0cy5pc1JlYWRhYmxlID0gaXNSZWFkYWJsZTtcbi8qKlxuICogUmV0dXJuIHRydWUgaWYgdGhlIGFyZ3VtZW50IGlzIGEgdmFsaWQge0BsaW5rIE1pbmlwYXNzLldyaXRhYmxlfVxuICovXG5jb25zdCBpc1dyaXRhYmxlID0gKHMpID0+ICEhcyAmJlxuICAgIHR5cGVvZiBzID09PSAnb2JqZWN0JyAmJlxuICAgIHMgaW5zdGFuY2VvZiBub2RlX2V2ZW50c18xLkV2ZW50RW1pdHRlciAmJlxuICAgIHR5cGVvZiBzLndyaXRlID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIHMuZW5kID09PSAnZnVuY3Rpb24nO1xuZXhwb3J0cy5pc1dyaXRhYmxlID0gaXNXcml0YWJsZTtcbmNvbnN0IEVPRiA9IFN5bWJvbCgnRU9GJyk7XG5jb25zdCBNQVlCRV9FTUlUX0VORCA9IFN5bWJvbCgnbWF5YmVFbWl0RW5kJyk7XG5jb25zdCBFTUlUVEVEX0VORCA9IFN5bWJvbCgnZW1pdHRlZEVuZCcpO1xuY29uc3QgRU1JVFRJTkdfRU5EID0gU3ltYm9sKCdlbWl0dGluZ0VuZCcpO1xuY29uc3QgRU1JVFRFRF9FUlJPUiA9IFN5bWJvbCgnZW1pdHRlZEVycm9yJyk7XG5jb25zdCBDTE9TRUQgPSBTeW1ib2woJ2Nsb3NlZCcpO1xuY29uc3QgUkVBRCA9IFN5bWJvbCgncmVhZCcpO1xuY29uc3QgRkxVU0ggPSBTeW1ib2woJ2ZsdXNoJyk7XG5jb25zdCBGTFVTSENIVU5LID0gU3ltYm9sKCdmbHVzaENodW5rJyk7XG5jb25zdCBFTkNPRElORyA9IFN5bWJvbCgnZW5jb2RpbmcnKTtcbmNvbnN0IERFQ09ERVIgPSBTeW1ib2woJ2RlY29kZXInKTtcbmNvbnN0IEZMT1dJTkcgPSBTeW1ib2woJ2Zsb3dpbmcnKTtcbmNvbnN0IFBBVVNFRCA9IFN5bWJvbCgncGF1c2VkJyk7XG5jb25zdCBSRVNVTUUgPSBTeW1ib2woJ3Jlc3VtZScpO1xuY29uc3QgQlVGRkVSID0gU3ltYm9sKCdidWZmZXInKTtcbmNvbnN0IFBJUEVTID0gU3ltYm9sKCdwaXBlcycpO1xuY29uc3QgQlVGRkVSTEVOR1RIID0gU3ltYm9sKCdidWZmZXJMZW5ndGgnKTtcbmNvbnN0IEJVRkZFUlBVU0ggPSBTeW1ib2woJ2J1ZmZlclB1c2gnKTtcbmNvbnN0IEJVRkZFUlNISUZUID0gU3ltYm9sKCdidWZmZXJTaGlmdCcpO1xuY29uc3QgT0JKRUNUTU9ERSA9IFN5bWJvbCgnb2JqZWN0TW9kZScpO1xuLy8gaW50ZXJuYWwgZXZlbnQgd2hlbiBzdHJlYW0gaXMgZGVzdHJveWVkXG5jb25zdCBERVNUUk9ZRUQgPSBTeW1ib2woJ2Rlc3Ryb3llZCcpO1xuLy8gaW50ZXJuYWwgZXZlbnQgd2hlbiBzdHJlYW0gaGFzIGFuIGVycm9yXG5jb25zdCBFUlJPUiA9IFN5bWJvbCgnZXJyb3InKTtcbmNvbnN0IEVNSVREQVRBID0gU3ltYm9sKCdlbWl0RGF0YScpO1xuY29uc3QgRU1JVEVORCA9IFN5bWJvbCgnZW1pdEVuZCcpO1xuY29uc3QgRU1JVEVORDIgPSBTeW1ib2woJ2VtaXRFbmQyJyk7XG5jb25zdCBBU1lOQyA9IFN5bWJvbCgnYXN5bmMnKTtcbmNvbnN0IEFCT1JUID0gU3ltYm9sKCdhYm9ydCcpO1xuY29uc3QgQUJPUlRFRCA9IFN5bWJvbCgnYWJvcnRlZCcpO1xuY29uc3QgU0lHTkFMID0gU3ltYm9sKCdzaWduYWwnKTtcbmNvbnN0IERBVEFMSVNURU5FUlMgPSBTeW1ib2woJ2RhdGFMaXN0ZW5lcnMnKTtcbmNvbnN0IERJU0NBUkRFRCA9IFN5bWJvbCgnZGlzY2FyZGVkJyk7XG5jb25zdCBkZWZlciA9IChmbikgPT4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmbik7XG5jb25zdCBub2RlZmVyID0gKGZuKSA9PiBmbigpO1xuY29uc3QgaXNFbmRpc2ggPSAoZXYpID0+IGV2ID09PSAnZW5kJyB8fCBldiA9PT0gJ2ZpbmlzaCcgfHwgZXYgPT09ICdwcmVmaW5pc2gnO1xuY29uc3QgaXNBcnJheUJ1ZmZlckxpa2UgPSAoYikgPT4gYiBpbnN0YW5jZW9mIEFycmF5QnVmZmVyIHx8XG4gICAgKCEhYiAmJlxuICAgICAgICB0eXBlb2YgYiA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgYi5jb25zdHJ1Y3RvciAmJlxuICAgICAgICBiLmNvbnN0cnVjdG9yLm5hbWUgPT09ICdBcnJheUJ1ZmZlcicgJiZcbiAgICAgICAgYi5ieXRlTGVuZ3RoID49IDApO1xuY29uc3QgaXNBcnJheUJ1ZmZlclZpZXcgPSAoYikgPT4gIUJ1ZmZlci5pc0J1ZmZlcihiKSAmJiBBcnJheUJ1ZmZlci5pc1ZpZXcoYik7XG4vKipcbiAqIEludGVybmFsIGNsYXNzIHJlcHJlc2VudGluZyBhIHBpcGUgdG8gYSBkZXN0aW5hdGlvbiBzdHJlYW0uXG4gKlxuICogQGludGVybmFsXG4gKi9cbmNsYXNzIFBpcGUge1xuICAgIHNyYztcbiAgICBkZXN0O1xuICAgIG9wdHM7XG4gICAgb25kcmFpbjtcbiAgICBjb25zdHJ1Y3RvcihzcmMsIGRlc3QsIG9wdHMpIHtcbiAgICAgICAgdGhpcy5zcmMgPSBzcmM7XG4gICAgICAgIHRoaXMuZGVzdCA9IGRlc3Q7XG4gICAgICAgIHRoaXMub3B0cyA9IG9wdHM7XG4gICAgICAgIHRoaXMub25kcmFpbiA9ICgpID0+IHNyY1tSRVNVTUVdKCk7XG4gICAgICAgIHRoaXMuZGVzdC5vbignZHJhaW4nLCB0aGlzLm9uZHJhaW4pO1xuICAgIH1cbiAgICB1bnBpcGUoKSB7XG4gICAgICAgIHRoaXMuZGVzdC5yZW1vdmVMaXN0ZW5lcignZHJhaW4nLCB0aGlzLm9uZHJhaW4pO1xuICAgIH1cbiAgICAvLyBvbmx5IGhlcmUgZm9yIHRoZSBwcm90b3R5cGVcbiAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICBwcm94eUVycm9ycyhfZXIpIHsgfVxuICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgZW5kKCkge1xuICAgICAgICB0aGlzLnVucGlwZSgpO1xuICAgICAgICBpZiAodGhpcy5vcHRzLmVuZClcbiAgICAgICAgICAgIHRoaXMuZGVzdC5lbmQoKTtcbiAgICB9XG59XG4vKipcbiAqIEludGVybmFsIGNsYXNzIHJlcHJlc2VudGluZyBhIHBpcGUgdG8gYSBkZXN0aW5hdGlvbiBzdHJlYW0gd2hlcmVcbiAqIGVycm9ycyBhcmUgcHJveGllZC5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuY2xhc3MgUGlwZVByb3h5RXJyb3JzIGV4dGVuZHMgUGlwZSB7XG4gICAgdW5waXBlKCkge1xuICAgICAgICB0aGlzLnNyYy5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCB0aGlzLnByb3h5RXJyb3JzKTtcbiAgICAgICAgc3VwZXIudW5waXBlKCk7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKHNyYywgZGVzdCwgb3B0cykge1xuICAgICAgICBzdXBlcihzcmMsIGRlc3QsIG9wdHMpO1xuICAgICAgICB0aGlzLnByb3h5RXJyb3JzID0gZXIgPT4gZGVzdC5lbWl0KCdlcnJvcicsIGVyKTtcbiAgICAgICAgc3JjLm9uKCdlcnJvcicsIHRoaXMucHJveHlFcnJvcnMpO1xuICAgIH1cbn1cbmNvbnN0IGlzT2JqZWN0TW9kZU9wdGlvbnMgPSAobykgPT4gISFvLm9iamVjdE1vZGU7XG5jb25zdCBpc0VuY29kaW5nT3B0aW9ucyA9IChvKSA9PiAhby5vYmplY3RNb2RlICYmICEhby5lbmNvZGluZyAmJiBvLmVuY29kaW5nICE9PSAnYnVmZmVyJztcbi8qKlxuICogTWFpbiBleHBvcnQsIHRoZSBNaW5pcGFzcyBjbGFzc1xuICpcbiAqIGBSVHlwZWAgaXMgdGhlIHR5cGUgb2YgZGF0YSBlbWl0dGVkLCBkZWZhdWx0cyB0byBCdWZmZXJcbiAqXG4gKiBgV1R5cGVgIGlzIHRoZSB0eXBlIG9mIGRhdGEgdG8gYmUgd3JpdHRlbiwgaWYgUlR5cGUgaXMgYnVmZmVyIG9yIHN0cmluZyxcbiAqIHRoZW4gYW55IHtAbGluayBNaW5pcGFzcy5Db250aWd1b3VzRGF0YX0gaXMgYWxsb3dlZC5cbiAqXG4gKiBgRXZlbnRzYCBpcyB0aGUgc2V0IG9mIGV2ZW50IGhhbmRsZXIgc2lnbmF0dXJlcyB0aGF0IHRoaXMgb2JqZWN0XG4gKiB3aWxsIGVtaXQsIHNlZSB7QGxpbmsgTWluaXBhc3MuRXZlbnRzfVxuICovXG5jbGFzcyBNaW5pcGFzcyBleHRlbmRzIG5vZGVfZXZlbnRzXzEuRXZlbnRFbWl0dGVyIHtcbiAgICBbRkxPV0lOR10gPSBmYWxzZTtcbiAgICBbUEFVU0VEXSA9IGZhbHNlO1xuICAgIFtQSVBFU10gPSBbXTtcbiAgICBbQlVGRkVSXSA9IFtdO1xuICAgIFtPQkpFQ1RNT0RFXTtcbiAgICBbRU5DT0RJTkddO1xuICAgIFtBU1lOQ107XG4gICAgW0RFQ09ERVJdO1xuICAgIFtFT0ZdID0gZmFsc2U7XG4gICAgW0VNSVRURURfRU5EXSA9IGZhbHNlO1xuICAgIFtFTUlUVElOR19FTkRdID0gZmFsc2U7XG4gICAgW0NMT1NFRF0gPSBmYWxzZTtcbiAgICBbRU1JVFRFRF9FUlJPUl0gPSBudWxsO1xuICAgIFtCVUZGRVJMRU5HVEhdID0gMDtcbiAgICBbREVTVFJPWUVEXSA9IGZhbHNlO1xuICAgIFtTSUdOQUxdO1xuICAgIFtBQk9SVEVEXSA9IGZhbHNlO1xuICAgIFtEQVRBTElTVEVORVJTXSA9IDA7XG4gICAgW0RJU0NBUkRFRF0gPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiB0cnVlIGlmIHRoZSBzdHJlYW0gY2FuIGJlIHdyaXR0ZW5cbiAgICAgKi9cbiAgICB3cml0YWJsZSA9IHRydWU7XG4gICAgLyoqXG4gICAgICogdHJ1ZSBpZiB0aGUgc3RyZWFtIGNhbiBiZSByZWFkXG4gICAgICovXG4gICAgcmVhZGFibGUgPSB0cnVlO1xuICAgIC8qKlxuICAgICAqIElmIGBSVHlwZWAgaXMgQnVmZmVyLCB0aGVuIG9wdGlvbnMgZG8gbm90IG5lZWQgdG8gYmUgcHJvdmlkZWQuXG4gICAgICogT3RoZXJ3aXNlLCBhbiBvcHRpb25zIG9iamVjdCBtdXN0IGJlIHByb3ZpZGVkIHRvIHNwZWNpZnkgZWl0aGVyXG4gICAgICoge0BsaW5rIE1pbmlwYXNzLlNoYXJlZE9wdGlvbnMub2JqZWN0TW9kZX0gb3JcbiAgICAgKiB7QGxpbmsgTWluaXBhc3MuU2hhcmVkT3B0aW9ucy5lbmNvZGluZ30sIGFzIGFwcHJvcHJpYXRlLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IChhcmdzWzBdIHx8XG4gICAgICAgICAgICB7fSk7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIGlmIChvcHRpb25zLm9iamVjdE1vZGUgJiYgdHlwZW9mIG9wdGlvbnMuZW5jb2RpbmcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFbmNvZGluZyBhbmQgb2JqZWN0TW9kZSBtYXkgbm90IGJlIHVzZWQgdG9nZXRoZXInKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNPYmplY3RNb2RlT3B0aW9ucyhvcHRpb25zKSkge1xuICAgICAgICAgICAgdGhpc1tPQkpFQ1RNT0RFXSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzW0VOQ09ESU5HXSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNFbmNvZGluZ09wdGlvbnMob3B0aW9ucykpIHtcbiAgICAgICAgICAgIHRoaXNbRU5DT0RJTkddID0gb3B0aW9ucy5lbmNvZGluZztcbiAgICAgICAgICAgIHRoaXNbT0JKRUNUTU9ERV0gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXNbT0JKRUNUTU9ERV0gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXNbRU5DT0RJTkddID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzW0FTWU5DXSA9ICEhb3B0aW9ucy5hc3luYztcbiAgICAgICAgdGhpc1tERUNPREVSXSA9IHRoaXNbRU5DT0RJTkddXG4gICAgICAgICAgICA/IG5ldyBub2RlX3N0cmluZ19kZWNvZGVyXzEuU3RyaW5nRGVjb2Rlcih0aGlzW0VOQ09ESU5HXSlcbiAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgLy9AdHMtaWdub3JlIC0gcHJpdmF0ZSBvcHRpb24gZm9yIGRlYnVnZ2luZyBhbmQgdGVzdGluZ1xuICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmRlYnVnRXhwb3NlQnVmZmVyID09PSB0cnVlKSB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2J1ZmZlcicsIHsgZ2V0OiAoKSA9PiB0aGlzW0JVRkZFUl0gfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy9AdHMtaWdub3JlIC0gcHJpdmF0ZSBvcHRpb24gZm9yIGRlYnVnZ2luZyBhbmQgdGVzdGluZ1xuICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmRlYnVnRXhwb3NlUGlwZXMgPT09IHRydWUpIHtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAncGlwZXMnLCB7IGdldDogKCkgPT4gdGhpc1tQSVBFU10gfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBzaWduYWwgfSA9IG9wdGlvbnM7XG4gICAgICAgIGlmIChzaWduYWwpIHtcbiAgICAgICAgICAgIHRoaXNbU0lHTkFMXSA9IHNpZ25hbDtcbiAgICAgICAgICAgIGlmIChzaWduYWwuYWJvcnRlZCkge1xuICAgICAgICAgICAgICAgIHRoaXNbQUJPUlRdKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCAoKSA9PiB0aGlzW0FCT1JUXSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgYW1vdW50IG9mIGRhdGEgc3RvcmVkIGluIHRoZSBidWZmZXIgd2FpdGluZyB0byBiZSByZWFkLlxuICAgICAqXG4gICAgICogRm9yIEJ1ZmZlciBzdHJpbmdzLCB0aGlzIHdpbGwgYmUgdGhlIHRvdGFsIGJ5dGUgbGVuZ3RoLlxuICAgICAqIEZvciBzdHJpbmcgZW5jb2Rpbmcgc3RyZWFtcywgdGhpcyB3aWxsIGJlIHRoZSBzdHJpbmcgY2hhcmFjdGVyIGxlbmd0aCxcbiAgICAgKiBhY2NvcmRpbmcgdG8gSmF2YVNjcmlwdCdzIGBzdHJpbmcubGVuZ3RoYCBsb2dpYy5cbiAgICAgKiBGb3Igb2JqZWN0TW9kZSBzdHJlYW1zLCB0aGlzIGlzIGEgY291bnQgb2YgdGhlIGl0ZW1zIHdhaXRpbmcgdG8gYmVcbiAgICAgKiBlbWl0dGVkLlxuICAgICAqL1xuICAgIGdldCBidWZmZXJMZW5ndGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzW0JVRkZFUkxFTkdUSF07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBgQnVmZmVyRW5jb2RpbmdgIGN1cnJlbnRseSBpbiB1c2UsIG9yIGBudWxsYFxuICAgICAqL1xuICAgIGdldCBlbmNvZGluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbRU5DT0RJTkddO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCAtIFRoaXMgaXMgYSByZWFkIG9ubHkgcHJvcGVydHlcbiAgICAgKi9cbiAgICBzZXQgZW5jb2RpbmcoX2VuYykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VuY29kaW5nIG11c3QgYmUgc2V0IGF0IGluc3RhbnRpYXRpb24gdGltZScpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCAtIEVuY29kaW5nIG1heSBvbmx5IGJlIHNldCBhdCBpbnN0YW50aWF0aW9uIHRpbWVcbiAgICAgKi9cbiAgICBzZXRFbmNvZGluZyhfZW5jKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRW5jb2RpbmcgbXVzdCBiZSBzZXQgYXQgaW5zdGFudGlhdGlvbiB0aW1lJyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRydWUgaWYgdGhpcyBpcyBhbiBvYmplY3RNb2RlIHN0cmVhbVxuICAgICAqL1xuICAgIGdldCBvYmplY3RNb2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpc1tPQkpFQ1RNT0RFXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgLSBUaGlzIGlzIGEgcmVhZC1vbmx5IHByb3BlcnR5XG4gICAgICovXG4gICAgc2V0IG9iamVjdE1vZGUoX29tKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignb2JqZWN0TW9kZSBtdXN0IGJlIHNldCBhdCBpbnN0YW50aWF0aW9uIHRpbWUnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogdHJ1ZSBpZiB0aGlzIGlzIGFuIGFzeW5jIHN0cmVhbVxuICAgICAqL1xuICAgIGdldCBbJ2FzeW5jJ10oKSB7XG4gICAgICAgIHJldHVybiB0aGlzW0FTWU5DXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0IHRvIHRydWUgdG8gbWFrZSB0aGlzIHN0cmVhbSBhc3luYy5cbiAgICAgKlxuICAgICAqIE9uY2Ugc2V0LCBpdCBjYW5ub3QgYmUgdW5zZXQsIGFzIHRoaXMgd291bGQgcG90ZW50aWFsbHkgY2F1c2UgaW5jb3JyZWN0XG4gICAgICogYmVoYXZpb3IuICBJZSwgYSBzeW5jIHN0cmVhbSBjYW4gYmUgbWFkZSBhc3luYywgYnV0IGFuIGFzeW5jIHN0cmVhbVxuICAgICAqIGNhbm5vdCBiZSBzYWZlbHkgbWFkZSBzeW5jLlxuICAgICAqL1xuICAgIHNldCBbJ2FzeW5jJ10oYSkge1xuICAgICAgICB0aGlzW0FTWU5DXSA9IHRoaXNbQVNZTkNdIHx8ICEhYTtcbiAgICB9XG4gICAgLy8gZHJvcCBldmVyeXRoaW5nIGFuZCBnZXQgb3V0IG9mIHRoZSBmbG93IGNvbXBsZXRlbHlcbiAgICBbQUJPUlRdKCkge1xuICAgICAgICB0aGlzW0FCT1JURURdID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5lbWl0KCdhYm9ydCcsIHRoaXNbU0lHTkFMXT8ucmVhc29uKTtcbiAgICAgICAgdGhpcy5kZXN0cm95KHRoaXNbU0lHTkFMXT8ucmVhc29uKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVHJ1ZSBpZiB0aGUgc3RyZWFtIGhhcyBiZWVuIGFib3J0ZWQuXG4gICAgICovXG4gICAgZ2V0IGFib3J0ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzW0FCT1JURURdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBOby1vcCBzZXR0ZXIuIFN0cmVhbSBhYm9ydGVkIHN0YXR1cyBpcyBzZXQgdmlhIHRoZSBBYm9ydFNpZ25hbCBwcm92aWRlZFxuICAgICAqIGluIHRoZSBjb25zdHJ1Y3RvciBvcHRpb25zLlxuICAgICAqL1xuICAgIHNldCBhYm9ydGVkKF8pIHsgfVxuICAgIHdyaXRlKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgICAgICAgaWYgKHRoaXNbQUJPUlRFRF0pXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzW0VPRl0pXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3dyaXRlIGFmdGVyIGVuZCcpO1xuICAgICAgICBpZiAodGhpc1tERVNUUk9ZRURdKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgT2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoJ0Nhbm5vdCBjYWxsIHdyaXRlIGFmdGVyIGEgc3RyZWFtIHdhcyBkZXN0cm95ZWQnKSwgeyBjb2RlOiAnRVJSX1NUUkVBTV9ERVNUUk9ZRUQnIH0pKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNiID0gZW5jb2Rpbmc7XG4gICAgICAgICAgICBlbmNvZGluZyA9ICd1dGY4JztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWVuY29kaW5nKVxuICAgICAgICAgICAgZW5jb2RpbmcgPSAndXRmOCc7XG4gICAgICAgIGNvbnN0IGZuID0gdGhpc1tBU1lOQ10gPyBkZWZlciA6IG5vZGVmZXI7XG4gICAgICAgIC8vIGNvbnZlcnQgYXJyYXkgYnVmZmVycyBhbmQgdHlwZWQgYXJyYXkgdmlld3MgaW50byBidWZmZXJzXG4gICAgICAgIC8vIGF0IHNvbWUgcG9pbnQgaW4gdGhlIGZ1dHVyZSwgd2UgbWF5IHdhbnQgdG8gZG8gdGhlIG9wcG9zaXRlIVxuICAgICAgICAvLyBsZWF2ZSBzdHJpbmdzIGFuZCBidWZmZXJzIGFzLWlzXG4gICAgICAgIC8vIGFueXRoaW5nIGlzIG9ubHkgYWxsb3dlZCBpZiBpbiBvYmplY3QgbW9kZSwgc28gdGhyb3dcbiAgICAgICAgaWYgKCF0aGlzW09CSkVDVE1PREVdICYmICFCdWZmZXIuaXNCdWZmZXIoY2h1bmspKSB7XG4gICAgICAgICAgICBpZiAoaXNBcnJheUJ1ZmZlclZpZXcoY2h1bmspKSB7XG4gICAgICAgICAgICAgICAgLy9AdHMtaWdub3JlIC0gc2luZnVsIHVuc2FmZSB0eXBlIGNoYW5naW5nXG4gICAgICAgICAgICAgICAgY2h1bmsgPSBCdWZmZXIuZnJvbShjaHVuay5idWZmZXIsIGNodW5rLmJ5dGVPZmZzZXQsIGNodW5rLmJ5dGVMZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaXNBcnJheUJ1ZmZlckxpa2UoY2h1bmspKSB7XG4gICAgICAgICAgICAgICAgLy9AdHMtaWdub3JlIC0gc2luZnVsIHVuc2FmZSB0eXBlIGNoYW5naW5nXG4gICAgICAgICAgICAgICAgY2h1bmsgPSBCdWZmZXIuZnJvbShjaHVuayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgY2h1bmsgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb24tY29udGlndW91cyBkYXRhIHdyaXR0ZW4gdG8gbm9uLW9iamVjdE1vZGUgc3RyZWFtJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gaGFuZGxlIG9iamVjdCBtb2RlIHVwIGZyb250LCBzaW5jZSBpdCdzIHNpbXBsZXJcbiAgICAgICAgLy8gdGhpcyB5aWVsZHMgYmV0dGVyIHBlcmZvcm1hbmNlLCBmZXdlciBjaGVja3MgbGF0ZXIuXG4gICAgICAgIGlmICh0aGlzW09CSkVDVE1PREVdKSB7XG4gICAgICAgICAgICAvLyBtYXliZSBpbXBvc3NpYmxlP1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICBpZiAodGhpc1tGTE9XSU5HXSAmJiB0aGlzW0JVRkZFUkxFTkdUSF0gIT09IDApXG4gICAgICAgICAgICAgICAgdGhpc1tGTFVTSF0odHJ1ZSk7XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgaWYgKHRoaXNbRkxPV0lOR10pXG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdkYXRhJywgY2h1bmspO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRoaXNbQlVGRkVSUFVTSF0oY2h1bmspO1xuICAgICAgICAgICAgaWYgKHRoaXNbQlVGRkVSTEVOR1RIXSAhPT0gMClcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ3JlYWRhYmxlJyk7XG4gICAgICAgICAgICBpZiAoY2IpXG4gICAgICAgICAgICAgICAgZm4oY2IpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXNbRkxPV0lOR107XG4gICAgICAgIH1cbiAgICAgICAgLy8gYXQgdGhpcyBwb2ludCB0aGUgY2h1bmsgaXMgYSBidWZmZXIgb3Igc3RyaW5nXG4gICAgICAgIC8vIGRvbid0IGJ1ZmZlciBpdCB1cCBvciBzZW5kIGl0IHRvIHRoZSBkZWNvZGVyXG4gICAgICAgIGlmICghY2h1bmsubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAodGhpc1tCVUZGRVJMRU5HVEhdICE9PSAwKVxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgncmVhZGFibGUnKTtcbiAgICAgICAgICAgIGlmIChjYilcbiAgICAgICAgICAgICAgICBmbihjYik7XG4gICAgICAgICAgICByZXR1cm4gdGhpc1tGTE9XSU5HXTtcbiAgICAgICAgfVxuICAgICAgICAvLyBmYXN0LXBhdGggd3JpdGluZyBzdHJpbmdzIG9mIHNhbWUgZW5jb2RpbmcgdG8gYSBzdHJlYW0gd2l0aFxuICAgICAgICAvLyBhbiBlbXB0eSBidWZmZXIsIHNraXBwaW5nIHRoZSBidWZmZXIvZGVjb2RlciBkYW5jZVxuICAgICAgICBpZiAodHlwZW9mIGNodW5rID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgLy8gdW5sZXNzIGl0IGlzIGEgc3RyaW5nIGFscmVhZHkgcmVhZHkgZm9yIHVzIHRvIHVzZVxuICAgICAgICAgICAgIShlbmNvZGluZyA9PT0gdGhpc1tFTkNPRElOR10gJiYgIXRoaXNbREVDT0RFUl0/Lmxhc3ROZWVkKSkge1xuICAgICAgICAgICAgLy9AdHMtaWdub3JlIC0gc2luZnVsIHVuc2FmZSB0eXBlIGNoYW5nZVxuICAgICAgICAgICAgY2h1bmsgPSBCdWZmZXIuZnJvbShjaHVuaywgZW5jb2RpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoY2h1bmspICYmIHRoaXNbRU5DT0RJTkddKSB7XG4gICAgICAgICAgICAvL0B0cy1pZ25vcmUgLSBzaW5mdWwgdW5zYWZlIHR5cGUgY2hhbmdlXG4gICAgICAgICAgICBjaHVuayA9IHRoaXNbREVDT0RFUl0ud3JpdGUoY2h1bmspO1xuICAgICAgICB9XG4gICAgICAgIC8vIE5vdGU6IGZsdXNoaW5nIENBTiBwb3RlbnRpYWxseSBzd2l0Y2ggdXMgaW50byBub3QtZmxvd2luZyBtb2RlXG4gICAgICAgIGlmICh0aGlzW0ZMT1dJTkddICYmIHRoaXNbQlVGRkVSTEVOR1RIXSAhPT0gMClcbiAgICAgICAgICAgIHRoaXNbRkxVU0hdKHRydWUpO1xuICAgICAgICBpZiAodGhpc1tGTE9XSU5HXSlcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZGF0YScsIGNodW5rKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpc1tCVUZGRVJQVVNIXShjaHVuayk7XG4gICAgICAgIGlmICh0aGlzW0JVRkZFUkxFTkdUSF0gIT09IDApXG4gICAgICAgICAgICB0aGlzLmVtaXQoJ3JlYWRhYmxlJyk7XG4gICAgICAgIGlmIChjYilcbiAgICAgICAgICAgIGZuKGNiKTtcbiAgICAgICAgcmV0dXJuIHRoaXNbRkxPV0lOR107XG4gICAgfVxuICAgIC8qKlxuICAgICAqIExvdy1sZXZlbCBleHBsaWNpdCByZWFkIG1ldGhvZC5cbiAgICAgKlxuICAgICAqIEluIG9iamVjdE1vZGUsIHRoZSBhcmd1bWVudCBpcyBpZ25vcmVkLCBhbmQgb25lIGl0ZW0gaXMgcmV0dXJuZWQgaWZcbiAgICAgKiBhdmFpbGFibGUuXG4gICAgICpcbiAgICAgKiBgbmAgaXMgdGhlIG51bWJlciBvZiBieXRlcyAob3IgaW4gdGhlIGNhc2Ugb2YgZW5jb2Rpbmcgc3RyZWFtcyxcbiAgICAgKiBjaGFyYWN0ZXJzKSB0byBjb25zdW1lLiBJZiBgbmAgaXMgbm90IHByb3ZpZGVkLCB0aGVuIHRoZSBlbnRpcmUgYnVmZmVyXG4gICAgICogaXMgcmV0dXJuZWQsIG9yIGBudWxsYCBpcyByZXR1cm5lZCBpZiBubyBkYXRhIGlzIGF2YWlsYWJsZS5cbiAgICAgKlxuICAgICAqIElmIGBuYCBpcyBncmVhdGVyIHRoYXQgdGhlIGFtb3VudCBvZiBkYXRhIGluIHRoZSBpbnRlcm5hbCBidWZmZXIsXG4gICAgICogdGhlbiBgbnVsbGAgaXMgcmV0dXJuZWQuXG4gICAgICovXG4gICAgcmVhZChuKSB7XG4gICAgICAgIGlmICh0aGlzW0RFU1RST1lFRF0pXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgdGhpc1tESVNDQVJERURdID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzW0JVRkZFUkxFTkdUSF0gPT09IDAgfHxcbiAgICAgICAgICAgIG4gPT09IDAgfHxcbiAgICAgICAgICAgIChuICYmIG4gPiB0aGlzW0JVRkZFUkxFTkdUSF0pKSB7XG4gICAgICAgICAgICB0aGlzW01BWUJFX0VNSVRfRU5EXSgpO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXNbT0JKRUNUTU9ERV0pXG4gICAgICAgICAgICBuID0gbnVsbDtcbiAgICAgICAgaWYgKHRoaXNbQlVGRkVSXS5sZW5ndGggPiAxICYmICF0aGlzW09CSkVDVE1PREVdKSB7XG4gICAgICAgICAgICAvLyBub3Qgb2JqZWN0IG1vZGUsIHNvIGlmIHdlIGhhdmUgYW4gZW5jb2RpbmcsIHRoZW4gUlR5cGUgaXMgc3RyaW5nXG4gICAgICAgICAgICAvLyBvdGhlcndpc2UsIG11c3QgYmUgQnVmZmVyXG4gICAgICAgICAgICB0aGlzW0JVRkZFUl0gPSBbXG4gICAgICAgICAgICAgICAgKHRoaXNbRU5DT0RJTkddXG4gICAgICAgICAgICAgICAgICAgID8gdGhpc1tCVUZGRVJdLmpvaW4oJycpXG4gICAgICAgICAgICAgICAgICAgIDogQnVmZmVyLmNvbmNhdCh0aGlzW0JVRkZFUl0sIHRoaXNbQlVGRkVSTEVOR1RIXSkpLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXQgPSB0aGlzW1JFQURdKG4gfHwgbnVsbCwgdGhpc1tCVUZGRVJdWzBdKTtcbiAgICAgICAgdGhpc1tNQVlCRV9FTUlUX0VORF0oKTtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gICAgW1JFQURdKG4sIGNodW5rKSB7XG4gICAgICAgIGlmICh0aGlzW09CSkVDVE1PREVdKVxuICAgICAgICAgICAgdGhpc1tCVUZGRVJTSElGVF0oKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBjID0gY2h1bms7XG4gICAgICAgICAgICBpZiAobiA9PT0gYy5sZW5ndGggfHwgbiA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICB0aGlzW0JVRkZFUlNISUZUXSgpO1xuICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIGMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgdGhpc1tCVUZGRVJdWzBdID0gYy5zbGljZShuKTtcbiAgICAgICAgICAgICAgICBjaHVuayA9IGMuc2xpY2UoMCwgbik7XG4gICAgICAgICAgICAgICAgdGhpc1tCVUZGRVJMRU5HVEhdIC09IG47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzW0JVRkZFUl1bMF0gPSBjLnN1YmFycmF5KG4pO1xuICAgICAgICAgICAgICAgIGNodW5rID0gYy5zdWJhcnJheSgwLCBuKTtcbiAgICAgICAgICAgICAgICB0aGlzW0JVRkZFUkxFTkdUSF0gLT0gbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVtaXQoJ2RhdGEnLCBjaHVuayk7XG4gICAgICAgIGlmICghdGhpc1tCVUZGRVJdLmxlbmd0aCAmJiAhdGhpc1tFT0ZdKVxuICAgICAgICAgICAgdGhpcy5lbWl0KCdkcmFpbicpO1xuICAgICAgICByZXR1cm4gY2h1bms7XG4gICAgfVxuICAgIGVuZChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2h1bmsgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNiID0gY2h1bms7XG4gICAgICAgICAgICBjaHVuayA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYiA9IGVuY29kaW5nO1xuICAgICAgICAgICAgZW5jb2RpbmcgPSAndXRmOCc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNodW5rICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB0aGlzLndyaXRlKGNodW5rLCBlbmNvZGluZyk7XG4gICAgICAgIGlmIChjYilcbiAgICAgICAgICAgIHRoaXMub25jZSgnZW5kJywgY2IpO1xuICAgICAgICB0aGlzW0VPRl0gPSB0cnVlO1xuICAgICAgICB0aGlzLndyaXRhYmxlID0gZmFsc2U7XG4gICAgICAgIC8vIGlmIHdlIGhhdmVuJ3Qgd3JpdHRlbiBhbnl0aGluZywgdGhlbiBnbyBhaGVhZCBhbmQgZW1pdCxcbiAgICAgICAgLy8gZXZlbiBpZiB3ZSdyZSBub3QgcmVhZGluZy5cbiAgICAgICAgLy8gd2UnbGwgcmUtZW1pdCBpZiBhIG5ldyAnZW5kJyBsaXN0ZW5lciBpcyBhZGRlZCBhbnl3YXkuXG4gICAgICAgIC8vIFRoaXMgbWFrZXMgTVAgbW9yZSBzdWl0YWJsZSB0byB3cml0ZS1vbmx5IHVzZSBjYXNlcy5cbiAgICAgICAgaWYgKHRoaXNbRkxPV0lOR10gfHwgIXRoaXNbUEFVU0VEXSlcbiAgICAgICAgICAgIHRoaXNbTUFZQkVfRU1JVF9FTkRdKCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvLyBkb24ndCBsZXQgdGhlIGludGVybmFsIHJlc3VtZSBiZSBvdmVyd3JpdHRlblxuICAgIFtSRVNVTUVdKCkge1xuICAgICAgICBpZiAodGhpc1tERVNUUk9ZRURdKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAoIXRoaXNbREFUQUxJU1RFTkVSU10gJiYgIXRoaXNbUElQRVNdLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpc1tESVNDQVJERURdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzW1BBVVNFRF0gPSBmYWxzZTtcbiAgICAgICAgdGhpc1tGTE9XSU5HXSA9IHRydWU7XG4gICAgICAgIHRoaXMuZW1pdCgncmVzdW1lJyk7XG4gICAgICAgIGlmICh0aGlzW0JVRkZFUl0ubGVuZ3RoKVxuICAgICAgICAgICAgdGhpc1tGTFVTSF0oKTtcbiAgICAgICAgZWxzZSBpZiAodGhpc1tFT0ZdKVxuICAgICAgICAgICAgdGhpc1tNQVlCRV9FTUlUX0VORF0oKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5lbWl0KCdkcmFpbicpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXN1bWUgdGhlIHN0cmVhbSBpZiBpdCBpcyBjdXJyZW50bHkgaW4gYSBwYXVzZWQgc3RhdGVcbiAgICAgKlxuICAgICAqIElmIGNhbGxlZCB3aGVuIHRoZXJlIGFyZSBubyBwaXBlIGRlc3RpbmF0aW9ucyBvciBgZGF0YWAgZXZlbnQgbGlzdGVuZXJzLFxuICAgICAqIHRoaXMgd2lsbCBwbGFjZSB0aGUgc3RyZWFtIGluIGEgXCJkaXNjYXJkZWRcIiBzdGF0ZSwgd2hlcmUgYWxsIGRhdGEgd2lsbFxuICAgICAqIGJlIHRocm93biBhd2F5LiBUaGUgZGlzY2FyZGVkIHN0YXRlIGlzIHJlbW92ZWQgaWYgYSBwaXBlIGRlc3RpbmF0aW9uIG9yXG4gICAgICogZGF0YSBoYW5kbGVyIGlzIGFkZGVkLCBpZiBwYXVzZSgpIGlzIGNhbGxlZCwgb3IgaWYgYW55IHN5bmNocm9ub3VzIG9yXG4gICAgICogYXN5bmNocm9ub3VzIGl0ZXJhdGlvbiBpcyBzdGFydGVkLlxuICAgICAqL1xuICAgIHJlc3VtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbUkVTVU1FXSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQYXVzZSB0aGUgc3RyZWFtXG4gICAgICovXG4gICAgcGF1c2UoKSB7XG4gICAgICAgIHRoaXNbRkxPV0lOR10gPSBmYWxzZTtcbiAgICAgICAgdGhpc1tQQVVTRURdID0gdHJ1ZTtcbiAgICAgICAgdGhpc1tESVNDQVJERURdID0gZmFsc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHRydWUgaWYgdGhlIHN0cmVhbSBoYXMgYmVlbiBmb3JjaWJseSBkZXN0cm95ZWRcbiAgICAgKi9cbiAgICBnZXQgZGVzdHJveWVkKCkge1xuICAgICAgICByZXR1cm4gdGhpc1tERVNUUk9ZRURdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiB0cnVlIGlmIHRoZSBzdHJlYW0gaXMgY3VycmVudGx5IGluIGEgZmxvd2luZyBzdGF0ZSwgbWVhbmluZyB0aGF0XG4gICAgICogYW55IHdyaXRlcyB3aWxsIGJlIGltbWVkaWF0ZWx5IGVtaXR0ZWQuXG4gICAgICovXG4gICAgZ2V0IGZsb3dpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzW0ZMT1dJTkddO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiB0cnVlIGlmIHRoZSBzdHJlYW0gaXMgY3VycmVudGx5IGluIGEgcGF1c2VkIHN0YXRlXG4gICAgICovXG4gICAgZ2V0IHBhdXNlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbUEFVU0VEXTtcbiAgICB9XG4gICAgW0JVRkZFUlBVU0hdKGNodW5rKSB7XG4gICAgICAgIGlmICh0aGlzW09CSkVDVE1PREVdKVxuICAgICAgICAgICAgdGhpc1tCVUZGRVJMRU5HVEhdICs9IDE7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXNbQlVGRkVSTEVOR1RIXSArPSBjaHVuay5sZW5ndGg7XG4gICAgICAgIHRoaXNbQlVGRkVSXS5wdXNoKGNodW5rKTtcbiAgICB9XG4gICAgW0JVRkZFUlNISUZUXSgpIHtcbiAgICAgICAgaWYgKHRoaXNbT0JKRUNUTU9ERV0pXG4gICAgICAgICAgICB0aGlzW0JVRkZFUkxFTkdUSF0gLT0gMTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpc1tCVUZGRVJMRU5HVEhdIC09IHRoaXNbQlVGRkVSXVswXS5sZW5ndGg7XG4gICAgICAgIHJldHVybiB0aGlzW0JVRkZFUl0uc2hpZnQoKTtcbiAgICB9XG4gICAgW0ZMVVNIXShub0RyYWluID0gZmFsc2UpIHtcbiAgICAgICAgZG8geyB9IHdoaWxlICh0aGlzW0ZMVVNIQ0hVTktdKHRoaXNbQlVGRkVSU0hJRlRdKCkpICYmXG4gICAgICAgICAgICB0aGlzW0JVRkZFUl0ubGVuZ3RoKTtcbiAgICAgICAgaWYgKCFub0RyYWluICYmICF0aGlzW0JVRkZFUl0ubGVuZ3RoICYmICF0aGlzW0VPRl0pXG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2RyYWluJyk7XG4gICAgfVxuICAgIFtGTFVTSENIVU5LXShjaHVuaykge1xuICAgICAgICB0aGlzLmVtaXQoJ2RhdGEnLCBjaHVuayk7XG4gICAgICAgIHJldHVybiB0aGlzW0ZMT1dJTkddO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQaXBlIGFsbCBkYXRhIGVtaXR0ZWQgYnkgdGhpcyBzdHJlYW0gaW50byB0aGUgZGVzdGluYXRpb24gcHJvdmlkZWQuXG4gICAgICpcbiAgICAgKiBUcmlnZ2VycyB0aGUgZmxvdyBvZiBkYXRhLlxuICAgICAqL1xuICAgIHBpcGUoZGVzdCwgb3B0cykge1xuICAgICAgICBpZiAodGhpc1tERVNUUk9ZRURdKVxuICAgICAgICAgICAgcmV0dXJuIGRlc3Q7XG4gICAgICAgIHRoaXNbRElTQ0FSREVEXSA9IGZhbHNlO1xuICAgICAgICBjb25zdCBlbmRlZCA9IHRoaXNbRU1JVFRFRF9FTkRdO1xuICAgICAgICBvcHRzID0gb3B0cyB8fCB7fTtcbiAgICAgICAgaWYgKGRlc3QgPT09IHByb2Muc3Rkb3V0IHx8IGRlc3QgPT09IHByb2Muc3RkZXJyKVxuICAgICAgICAgICAgb3B0cy5lbmQgPSBmYWxzZTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgb3B0cy5lbmQgPSBvcHRzLmVuZCAhPT0gZmFsc2U7XG4gICAgICAgIG9wdHMucHJveHlFcnJvcnMgPSAhIW9wdHMucHJveHlFcnJvcnM7XG4gICAgICAgIC8vIHBpcGluZyBhbiBlbmRlZCBzdHJlYW0gZW5kcyBpbW1lZGlhdGVseVxuICAgICAgICBpZiAoZW5kZWQpIHtcbiAgICAgICAgICAgIGlmIChvcHRzLmVuZClcbiAgICAgICAgICAgICAgICBkZXN0LmVuZCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gXCJhc1wiIGhlcmUganVzdCBpZ25vcmVzIHRoZSBXVHlwZSwgd2hpY2ggcGlwZXMgZG9uJ3QgY2FyZSBhYm91dCxcbiAgICAgICAgICAgIC8vIHNpbmNlIHRoZXkncmUgb25seSBjb25zdW1pbmcgZnJvbSB1cywgYW5kIHdyaXRpbmcgdG8gdGhlIGRlc3RcbiAgICAgICAgICAgIHRoaXNbUElQRVNdLnB1c2goIW9wdHMucHJveHlFcnJvcnNcbiAgICAgICAgICAgICAgICA/IG5ldyBQaXBlKHRoaXMsIGRlc3QsIG9wdHMpXG4gICAgICAgICAgICAgICAgOiBuZXcgUGlwZVByb3h5RXJyb3JzKHRoaXMsIGRlc3QsIG9wdHMpKTtcbiAgICAgICAgICAgIGlmICh0aGlzW0FTWU5DXSlcbiAgICAgICAgICAgICAgICBkZWZlcigoKSA9PiB0aGlzW1JFU1VNRV0oKSk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhpc1tSRVNVTUVdKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlc3Q7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEZ1bGx5IHVuaG9vayBhIHBpcGVkIGRlc3RpbmF0aW9uIHN0cmVhbS5cbiAgICAgKlxuICAgICAqIElmIHRoZSBkZXN0aW5hdGlvbiBzdHJlYW0gd2FzIHRoZSBvbmx5IGNvbnN1bWVyIG9mIHRoaXMgc3RyZWFtIChpZSxcbiAgICAgKiB0aGVyZSBhcmUgbm8gb3RoZXIgcGlwZWQgZGVzdGluYXRpb25zIG9yIGAnZGF0YSdgIGV2ZW50IGxpc3RlbmVycylcbiAgICAgKiB0aGVuIHRoZSBmbG93IG9mIGRhdGEgd2lsbCBzdG9wIHVudGlsIHRoZXJlIGlzIGFub3RoZXIgY29uc3VtZXIgb3JcbiAgICAgKiB7QGxpbmsgTWluaXBhc3MjcmVzdW1lfSBpcyBleHBsaWNpdGx5IGNhbGxlZC5cbiAgICAgKi9cbiAgICB1bnBpcGUoZGVzdCkge1xuICAgICAgICBjb25zdCBwID0gdGhpc1tQSVBFU10uZmluZChwID0+IHAuZGVzdCA9PT0gZGVzdCk7XG4gICAgICAgIGlmIChwKSB7XG4gICAgICAgICAgICBpZiAodGhpc1tQSVBFU10ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXNbRkxPV0lOR10gJiYgdGhpc1tEQVRBTElTVEVORVJTXSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzW0ZMT1dJTkddID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXNbUElQRVNdID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhpc1tQSVBFU10uc3BsaWNlKHRoaXNbUElQRVNdLmluZGV4T2YocCksIDEpO1xuICAgICAgICAgICAgcC51bnBpcGUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBBbGlhcyBmb3Ige0BsaW5rIE1pbmlwYXNzI29ufVxuICAgICAqL1xuICAgIGFkZExpc3RlbmVyKGV2LCBoYW5kbGVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9uKGV2LCBoYW5kbGVyKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTW9zdGx5IGlkZW50aWNhbCB0byBgRXZlbnRFbWl0dGVyLm9uYCwgd2l0aCB0aGUgZm9sbG93aW5nXG4gICAgICogYmVoYXZpb3IgZGlmZmVyZW5jZXMgdG8gcHJldmVudCBkYXRhIGxvc3MgYW5kIHVubmVjZXNzYXJ5IGhhbmdzOlxuICAgICAqXG4gICAgICogLSBBZGRpbmcgYSAnZGF0YScgZXZlbnQgaGFuZGxlciB3aWxsIHRyaWdnZXIgdGhlIGZsb3cgb2YgZGF0YVxuICAgICAqXG4gICAgICogLSBBZGRpbmcgYSAncmVhZGFibGUnIGV2ZW50IGhhbmRsZXIgd2hlbiB0aGVyZSBpcyBkYXRhIHdhaXRpbmcgdG8gYmUgcmVhZFxuICAgICAqICAgd2lsbCBjYXVzZSAncmVhZGFibGUnIHRvIGJlIGVtaXR0ZWQgaW1tZWRpYXRlbHkuXG4gICAgICpcbiAgICAgKiAtIEFkZGluZyBhbiAnZW5kaXNoJyBldmVudCBoYW5kbGVyICgnZW5kJywgJ2ZpbmlzaCcsIGV0Yy4pIHdoaWNoIGhhc1xuICAgICAqICAgYWxyZWFkeSBwYXNzZWQgd2lsbCBjYXVzZSB0aGUgZXZlbnQgdG8gYmUgZW1pdHRlZCBpbW1lZGlhdGVseSBhbmQgYWxsXG4gICAgICogICBoYW5kbGVycyByZW1vdmVkLlxuICAgICAqXG4gICAgICogLSBBZGRpbmcgYW4gJ2Vycm9yJyBldmVudCBoYW5kbGVyIGFmdGVyIGFuIGVycm9yIGhhcyBiZWVuIGVtaXR0ZWQgd2lsbFxuICAgICAqICAgY2F1c2UgdGhlIGV2ZW50IHRvIGJlIHJlLWVtaXR0ZWQgaW1tZWRpYXRlbHkgd2l0aCB0aGUgZXJyb3IgcHJldmlvdXNseVxuICAgICAqICAgcmFpc2VkLlxuICAgICAqL1xuICAgIG9uKGV2LCBoYW5kbGVyKSB7XG4gICAgICAgIGNvbnN0IHJldCA9IHN1cGVyLm9uKGV2LCBoYW5kbGVyKTtcbiAgICAgICAgaWYgKGV2ID09PSAnZGF0YScpIHtcbiAgICAgICAgICAgIHRoaXNbRElTQ0FSREVEXSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpc1tEQVRBTElTVEVORVJTXSsrO1xuICAgICAgICAgICAgaWYgKCF0aGlzW1BJUEVTXS5sZW5ndGggJiYgIXRoaXNbRkxPV0lOR10pIHtcbiAgICAgICAgICAgICAgICB0aGlzW1JFU1VNRV0oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChldiA9PT0gJ3JlYWRhYmxlJyAmJiB0aGlzW0JVRkZFUkxFTkdUSF0gIT09IDApIHtcbiAgICAgICAgICAgIHN1cGVyLmVtaXQoJ3JlYWRhYmxlJyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNFbmRpc2goZXYpICYmIHRoaXNbRU1JVFRFRF9FTkRdKSB7XG4gICAgICAgICAgICBzdXBlci5lbWl0KGV2KTtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKGV2KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChldiA9PT0gJ2Vycm9yJyAmJiB0aGlzW0VNSVRURURfRVJST1JdKSB7XG4gICAgICAgICAgICBjb25zdCBoID0gaGFuZGxlcjtcbiAgICAgICAgICAgIGlmICh0aGlzW0FTWU5DXSlcbiAgICAgICAgICAgICAgICBkZWZlcigoKSA9PiBoLmNhbGwodGhpcywgdGhpc1tFTUlUVEVEX0VSUk9SXSkpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGguY2FsbCh0aGlzLCB0aGlzW0VNSVRURURfRVJST1JdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBbGlhcyBmb3Ige0BsaW5rIE1pbmlwYXNzI29mZn1cbiAgICAgKi9cbiAgICByZW1vdmVMaXN0ZW5lcihldiwgaGFuZGxlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5vZmYoZXYsIGhhbmRsZXIpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBNb3N0bHkgaWRlbnRpY2FsIHRvIGBFdmVudEVtaXR0ZXIub2ZmYFxuICAgICAqXG4gICAgICogSWYgYSAnZGF0YScgZXZlbnQgaGFuZGxlciBpcyByZW1vdmVkLCBhbmQgaXQgd2FzIHRoZSBsYXN0IGNvbnN1bWVyXG4gICAgICogKGllLCB0aGVyZSBhcmUgbm8gcGlwZSBkZXN0aW5hdGlvbnMgb3Igb3RoZXIgJ2RhdGEnIGV2ZW50IGxpc3RlbmVycyksXG4gICAgICogdGhlbiB0aGUgZmxvdyBvZiBkYXRhIHdpbGwgc3RvcCB1bnRpbCB0aGVyZSBpcyBhbm90aGVyIGNvbnN1bWVyIG9yXG4gICAgICoge0BsaW5rIE1pbmlwYXNzI3Jlc3VtZX0gaXMgZXhwbGljaXRseSBjYWxsZWQuXG4gICAgICovXG4gICAgb2ZmKGV2LCBoYW5kbGVyKSB7XG4gICAgICAgIGNvbnN0IHJldCA9IHN1cGVyLm9mZihldiwgaGFuZGxlcik7XG4gICAgICAgIC8vIGlmIHdlIHByZXZpb3VzbHkgaGFkIGxpc3RlbmVycywgYW5kIG5vdyB3ZSBkb24ndCwgYW5kIHdlIGRvbid0XG4gICAgICAgIC8vIGhhdmUgYW55IHBpcGVzLCB0aGVuIHN0b3AgdGhlIGZsb3csIHVubGVzcyBpdCdzIGJlZW4gZXhwbGljaXRseVxuICAgICAgICAvLyBwdXQgaW4gYSBkaXNjYXJkZWQgZmxvd2luZyBzdGF0ZSB2aWEgc3RyZWFtLnJlc3VtZSgpLlxuICAgICAgICBpZiAoZXYgPT09ICdkYXRhJykge1xuICAgICAgICAgICAgdGhpc1tEQVRBTElTVEVORVJTXSA9IHRoaXMubGlzdGVuZXJzKCdkYXRhJykubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKHRoaXNbREFUQUxJU1RFTkVSU10gPT09IDAgJiZcbiAgICAgICAgICAgICAgICAhdGhpc1tESVNDQVJERURdICYmXG4gICAgICAgICAgICAgICAgIXRoaXNbUElQRVNdLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXNbRkxPV0lOR10gPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBNb3N0bHkgaWRlbnRpY2FsIHRvIGBFdmVudEVtaXR0ZXIucmVtb3ZlQWxsTGlzdGVuZXJzYFxuICAgICAqXG4gICAgICogSWYgYWxsICdkYXRhJyBldmVudCBoYW5kbGVycyBhcmUgcmVtb3ZlZCwgYW5kIHRoZXkgd2VyZSB0aGUgbGFzdCBjb25zdW1lclxuICAgICAqIChpZSwgdGhlcmUgYXJlIG5vIHBpcGUgZGVzdGluYXRpb25zKSwgdGhlbiB0aGUgZmxvdyBvZiBkYXRhIHdpbGwgc3RvcFxuICAgICAqIHVudGlsIHRoZXJlIGlzIGFub3RoZXIgY29uc3VtZXIgb3Ige0BsaW5rIE1pbmlwYXNzI3Jlc3VtZX0gaXMgZXhwbGljaXRseVxuICAgICAqIGNhbGxlZC5cbiAgICAgKi9cbiAgICByZW1vdmVBbGxMaXN0ZW5lcnMoZXYpIHtcbiAgICAgICAgY29uc3QgcmV0ID0gc3VwZXIucmVtb3ZlQWxsTGlzdGVuZXJzKGV2KTtcbiAgICAgICAgaWYgKGV2ID09PSAnZGF0YScgfHwgZXYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpc1tEQVRBTElTVEVORVJTXSA9IDA7XG4gICAgICAgICAgICBpZiAoIXRoaXNbRElTQ0FSREVEXSAmJiAhdGhpc1tQSVBFU10ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpc1tGTE9XSU5HXSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHRydWUgaWYgdGhlICdlbmQnIGV2ZW50IGhhcyBiZWVuIGVtaXR0ZWRcbiAgICAgKi9cbiAgICBnZXQgZW1pdHRlZEVuZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbRU1JVFRFRF9FTkRdO1xuICAgIH1cbiAgICBbTUFZQkVfRU1JVF9FTkRdKCkge1xuICAgICAgICBpZiAoIXRoaXNbRU1JVFRJTkdfRU5EXSAmJlxuICAgICAgICAgICAgIXRoaXNbRU1JVFRFRF9FTkRdICYmXG4gICAgICAgICAgICAhdGhpc1tERVNUUk9ZRURdICYmXG4gICAgICAgICAgICB0aGlzW0JVRkZFUl0ubGVuZ3RoID09PSAwICYmXG4gICAgICAgICAgICB0aGlzW0VPRl0pIHtcbiAgICAgICAgICAgIHRoaXNbRU1JVFRJTkdfRU5EXSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2VuZCcpO1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdwcmVmaW5pc2gnKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZmluaXNoJyk7XG4gICAgICAgICAgICBpZiAodGhpc1tDTE9TRURdKVxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnY2xvc2UnKTtcbiAgICAgICAgICAgIHRoaXNbRU1JVFRJTkdfRU5EXSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1vc3RseSBpZGVudGljYWwgdG8gYEV2ZW50RW1pdHRlci5lbWl0YCwgd2l0aCB0aGUgZm9sbG93aW5nXG4gICAgICogYmVoYXZpb3IgZGlmZmVyZW5jZXMgdG8gcHJldmVudCBkYXRhIGxvc3MgYW5kIHVubmVjZXNzYXJ5IGhhbmdzOlxuICAgICAqXG4gICAgICogSWYgdGhlIHN0cmVhbSBoYXMgYmVlbiBkZXN0cm95ZWQsIGFuZCB0aGUgZXZlbnQgaXMgc29tZXRoaW5nIG90aGVyXG4gICAgICogdGhhbiAnY2xvc2UnIG9yICdlcnJvcicsIHRoZW4gYGZhbHNlYCBpcyByZXR1cm5lZCBhbmQgbm8gaGFuZGxlcnNcbiAgICAgKiBhcmUgY2FsbGVkLlxuICAgICAqXG4gICAgICogSWYgdGhlIGV2ZW50IGlzICdlbmQnLCBhbmQgaGFzIGFscmVhZHkgYmVlbiBlbWl0dGVkLCB0aGVuIHRoZSBldmVudFxuICAgICAqIGlzIGlnbm9yZWQuIElmIHRoZSBzdHJlYW0gaXMgaW4gYSBwYXVzZWQgb3Igbm9uLWZsb3dpbmcgc3RhdGUsIHRoZW5cbiAgICAgKiB0aGUgZXZlbnQgd2lsbCBiZSBkZWZlcnJlZCB1bnRpbCBkYXRhIGZsb3cgcmVzdW1lcy4gSWYgdGhlIHN0cmVhbSBpc1xuICAgICAqIGFzeW5jLCB0aGVuIGhhbmRsZXJzIHdpbGwgYmUgY2FsbGVkIG9uIHRoZSBuZXh0IHRpY2sgcmF0aGVyIHRoYW5cbiAgICAgKiBpbW1lZGlhdGVseS5cbiAgICAgKlxuICAgICAqIElmIHRoZSBldmVudCBpcyAnY2xvc2UnLCBhbmQgJ2VuZCcgaGFzIG5vdCB5ZXQgYmVlbiBlbWl0dGVkLCB0aGVuXG4gICAgICogdGhlIGV2ZW50IHdpbGwgYmUgZGVmZXJyZWQgdW50aWwgYWZ0ZXIgJ2VuZCcgaXMgZW1pdHRlZC5cbiAgICAgKlxuICAgICAqIElmIHRoZSBldmVudCBpcyAnZXJyb3InLCBhbmQgYW4gQWJvcnRTaWduYWwgd2FzIHByb3ZpZGVkIGZvciB0aGUgc3RyZWFtLFxuICAgICAqIGFuZCB0aGVyZSBhcmUgbm8gbGlzdGVuZXJzLCB0aGVuIHRoZSBldmVudCBpcyBpZ25vcmVkLCBtYXRjaGluZyB0aGVcbiAgICAgKiBiZWhhdmlvciBvZiBub2RlIGNvcmUgc3RyZWFtcyBpbiB0aGUgcHJlc2Vuc2Ugb2YgYW4gQWJvcnRTaWduYWwuXG4gICAgICpcbiAgICAgKiBJZiB0aGUgZXZlbnQgaXMgJ2ZpbmlzaCcgb3IgJ3ByZWZpbmlzaCcsIHRoZW4gYWxsIGxpc3RlbmVycyB3aWxsIGJlXG4gICAgICogcmVtb3ZlZCBhZnRlciBlbWl0dGluZyB0aGUgZXZlbnQsIHRvIHByZXZlbnQgZG91YmxlLWZpcmluZy5cbiAgICAgKi9cbiAgICBlbWl0KGV2LCAuLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhcmdzWzBdO1xuICAgICAgICAvLyBlcnJvciBhbmQgY2xvc2UgYXJlIG9ubHkgZXZlbnRzIGFsbG93ZWQgYWZ0ZXIgY2FsbGluZyBkZXN0cm95KClcbiAgICAgICAgaWYgKGV2ICE9PSAnZXJyb3InICYmXG4gICAgICAgICAgICBldiAhPT0gJ2Nsb3NlJyAmJlxuICAgICAgICAgICAgZXYgIT09IERFU1RST1lFRCAmJlxuICAgICAgICAgICAgdGhpc1tERVNUUk9ZRURdKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXYgPT09ICdkYXRhJykge1xuICAgICAgICAgICAgcmV0dXJuICF0aGlzW09CSkVDVE1PREVdICYmICFkYXRhXG4gICAgICAgICAgICAgICAgPyBmYWxzZVxuICAgICAgICAgICAgICAgIDogdGhpc1tBU1lOQ11cbiAgICAgICAgICAgICAgICAgICAgPyAoZGVmZXIoKCkgPT4gdGhpc1tFTUlUREFUQV0oZGF0YSkpLCB0cnVlKVxuICAgICAgICAgICAgICAgICAgICA6IHRoaXNbRU1JVERBVEFdKGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGV2ID09PSAnZW5kJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXNbRU1JVEVORF0oKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChldiA9PT0gJ2Nsb3NlJykge1xuICAgICAgICAgICAgdGhpc1tDTE9TRURdID0gdHJ1ZTtcbiAgICAgICAgICAgIC8vIGRvbid0IGVtaXQgY2xvc2UgYmVmb3JlICdlbmQnIGFuZCAnZmluaXNoJ1xuICAgICAgICAgICAgaWYgKCF0aGlzW0VNSVRURURfRU5EXSAmJiAhdGhpc1tERVNUUk9ZRURdKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IHJldCA9IHN1cGVyLmVtaXQoJ2Nsb3NlJyk7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygnY2xvc2UnKTtcbiAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXYgPT09ICdlcnJvcicpIHtcbiAgICAgICAgICAgIHRoaXNbRU1JVFRFRF9FUlJPUl0gPSBkYXRhO1xuICAgICAgICAgICAgc3VwZXIuZW1pdChFUlJPUiwgZGF0YSk7XG4gICAgICAgICAgICBjb25zdCByZXQgPSAhdGhpc1tTSUdOQUxdIHx8IHRoaXMubGlzdGVuZXJzKCdlcnJvcicpLmxlbmd0aFxuICAgICAgICAgICAgICAgID8gc3VwZXIuZW1pdCgnZXJyb3InLCBkYXRhKVxuICAgICAgICAgICAgICAgIDogZmFsc2U7XG4gICAgICAgICAgICB0aGlzW01BWUJFX0VNSVRfRU5EXSgpO1xuICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChldiA9PT0gJ3Jlc3VtZScpIHtcbiAgICAgICAgICAgIGNvbnN0IHJldCA9IHN1cGVyLmVtaXQoJ3Jlc3VtZScpO1xuICAgICAgICAgICAgdGhpc1tNQVlCRV9FTUlUX0VORF0oKTtcbiAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXYgPT09ICdmaW5pc2gnIHx8IGV2ID09PSAncHJlZmluaXNoJykge1xuICAgICAgICAgICAgY29uc3QgcmV0ID0gc3VwZXIuZW1pdChldik7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhldik7XG4gICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICB9XG4gICAgICAgIC8vIFNvbWUgb3RoZXIgdW5rbm93biBldmVudFxuICAgICAgICBjb25zdCByZXQgPSBzdXBlci5lbWl0KGV2LCAuLi5hcmdzKTtcbiAgICAgICAgdGhpc1tNQVlCRV9FTUlUX0VORF0oKTtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gICAgW0VNSVREQVRBXShkYXRhKSB7XG4gICAgICAgIGZvciAoY29uc3QgcCBvZiB0aGlzW1BJUEVTXSkge1xuICAgICAgICAgICAgaWYgKHAuZGVzdC53cml0ZShkYXRhKSA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgdGhpcy5wYXVzZSgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJldCA9IHRoaXNbRElTQ0FSREVEXSA/IGZhbHNlIDogc3VwZXIuZW1pdCgnZGF0YScsIGRhdGEpO1xuICAgICAgICB0aGlzW01BWUJFX0VNSVRfRU5EXSgpO1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cbiAgICBbRU1JVEVORF0oKSB7XG4gICAgICAgIGlmICh0aGlzW0VNSVRURURfRU5EXSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgdGhpc1tFTUlUVEVEX0VORF0gPSB0cnVlO1xuICAgICAgICB0aGlzLnJlYWRhYmxlID0gZmFsc2U7XG4gICAgICAgIHJldHVybiB0aGlzW0FTWU5DXVxuICAgICAgICAgICAgPyAoZGVmZXIoKCkgPT4gdGhpc1tFTUlURU5EMl0oKSksIHRydWUpXG4gICAgICAgICAgICA6IHRoaXNbRU1JVEVORDJdKCk7XG4gICAgfVxuICAgIFtFTUlURU5EMl0oKSB7XG4gICAgICAgIGlmICh0aGlzW0RFQ09ERVJdKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gdGhpc1tERUNPREVSXS5lbmQoKTtcbiAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBwIG9mIHRoaXNbUElQRVNdKSB7XG4gICAgICAgICAgICAgICAgICAgIHAuZGVzdC53cml0ZShkYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzW0RJU0NBUkRFRF0pXG4gICAgICAgICAgICAgICAgICAgIHN1cGVyLmVtaXQoJ2RhdGEnLCBkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IHAgb2YgdGhpc1tQSVBFU10pIHtcbiAgICAgICAgICAgIHAuZW5kKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmV0ID0gc3VwZXIuZW1pdCgnZW5kJyk7XG4gICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCdlbmQnKTtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGFuIGFycmF5IG9mIGFsbCBlbWl0dGVkIGRhdGEgb25jZVxuICAgICAqIHRoZSBzdHJlYW0gZW5kcy5cbiAgICAgKi9cbiAgICBhc3luYyBjb2xsZWN0KCkge1xuICAgICAgICBjb25zdCBidWYgPSBPYmplY3QuYXNzaWduKFtdLCB7XG4gICAgICAgICAgICBkYXRhTGVuZ3RoOiAwLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCF0aGlzW09CSkVDVE1PREVdKVxuICAgICAgICAgICAgYnVmLmRhdGFMZW5ndGggPSAwO1xuICAgICAgICAvLyBzZXQgdGhlIHByb21pc2UgZmlyc3QsIGluIGNhc2UgYW4gZXJyb3IgaXMgcmFpc2VkXG4gICAgICAgIC8vIGJ5IHRyaWdnZXJpbmcgdGhlIGZsb3cgaGVyZS5cbiAgICAgICAgY29uc3QgcCA9IHRoaXMucHJvbWlzZSgpO1xuICAgICAgICB0aGlzLm9uKCdkYXRhJywgYyA9PiB7XG4gICAgICAgICAgICBidWYucHVzaChjKTtcbiAgICAgICAgICAgIGlmICghdGhpc1tPQkpFQ1RNT0RFXSlcbiAgICAgICAgICAgICAgICBidWYuZGF0YUxlbmd0aCArPSBjLmxlbmd0aDtcbiAgICAgICAgfSk7XG4gICAgICAgIGF3YWl0IHA7XG4gICAgICAgIHJldHVybiBidWY7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiBhIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgY29uY2F0ZW5hdGlvbiBvZiBhbGwgZW1pdHRlZCBkYXRhXG4gICAgICogb25jZSB0aGUgc3RyZWFtIGVuZHMuXG4gICAgICpcbiAgICAgKiBOb3QgYWxsb3dlZCBvbiBvYmplY3RNb2RlIHN0cmVhbXMuXG4gICAgICovXG4gICAgYXN5bmMgY29uY2F0KCkge1xuICAgICAgICBpZiAodGhpc1tPQkpFQ1RNT0RFXSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjYW5ub3QgY29uY2F0IGluIG9iamVjdE1vZGUnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBidWYgPSBhd2FpdCB0aGlzLmNvbGxlY3QoKTtcbiAgICAgICAgcmV0dXJuICh0aGlzW0VOQ09ESU5HXVxuICAgICAgICAgICAgPyBidWYuam9pbignJylcbiAgICAgICAgICAgIDogQnVmZmVyLmNvbmNhdChidWYsIGJ1Zi5kYXRhTGVuZ3RoKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiBhIHZvaWQgUHJvbWlzZSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIHN0cmVhbSBlbmRzLlxuICAgICAqL1xuICAgIGFzeW5jIHByb21pc2UoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uKERFU1RST1lFRCwgKCkgPT4gcmVqZWN0KG5ldyBFcnJvcignc3RyZWFtIGRlc3Ryb3llZCcpKSk7XG4gICAgICAgICAgICB0aGlzLm9uKCdlcnJvcicsIGVyID0+IHJlamVjdChlcikpO1xuICAgICAgICAgICAgdGhpcy5vbignZW5kJywgKCkgPT4gcmVzb2x2ZSgpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFzeW5jaHJvbm91cyBgZm9yIGF3YWl0IG9mYCBpdGVyYXRpb24uXG4gICAgICpcbiAgICAgKiBUaGlzIHdpbGwgY29udGludWUgZW1pdHRpbmcgYWxsIGNodW5rcyB1bnRpbCB0aGUgc3RyZWFtIHRlcm1pbmF0ZXMuXG4gICAgICovXG4gICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpIHtcbiAgICAgICAgLy8gc2V0IHRoaXMgdXAgZnJvbnQsIGluIGNhc2UgdGhlIGNvbnN1bWVyIGRvZXNuJ3QgY2FsbCBuZXh0KClcbiAgICAgICAgLy8gcmlnaHQgYXdheS5cbiAgICAgICAgdGhpc1tESVNDQVJERURdID0gZmFsc2U7XG4gICAgICAgIGxldCBzdG9wcGVkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IHN0b3AgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnBhdXNlKCk7XG4gICAgICAgICAgICBzdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbmV4dCA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChzdG9wcGVkKVxuICAgICAgICAgICAgICAgIHJldHVybiBzdG9wKCk7XG4gICAgICAgICAgICBjb25zdCByZXMgPSB0aGlzLnJlYWQoKTtcbiAgICAgICAgICAgIGlmIChyZXMgIT09IG51bGwpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IGRvbmU6IGZhbHNlLCB2YWx1ZTogcmVzIH0pO1xuICAgICAgICAgICAgaWYgKHRoaXNbRU9GXSlcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RvcCgpO1xuICAgICAgICAgICAgbGV0IHJlc29sdmU7XG4gICAgICAgICAgICBsZXQgcmVqZWN0O1xuICAgICAgICAgICAgY29uc3Qgb25lcnIgPSAoZXIpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9mZignZGF0YScsIG9uZGF0YSk7XG4gICAgICAgICAgICAgICAgdGhpcy5vZmYoJ2VuZCcsIG9uZW5kKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9mZihERVNUUk9ZRUQsIG9uZGVzdHJveSk7XG4gICAgICAgICAgICAgICAgc3RvcCgpO1xuICAgICAgICAgICAgICAgIHJlamVjdChlcik7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3Qgb25kYXRhID0gKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vZmYoJ2Vycm9yJywgb25lcnIpO1xuICAgICAgICAgICAgICAgIHRoaXMub2ZmKCdlbmQnLCBvbmVuZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5vZmYoREVTVFJPWUVELCBvbmRlc3Ryb3kpO1xuICAgICAgICAgICAgICAgIHRoaXMucGF1c2UoKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHsgdmFsdWUsIGRvbmU6ICEhdGhpc1tFT0ZdIH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IG9uZW5kID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub2ZmKCdlcnJvcicsIG9uZXJyKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9mZignZGF0YScsIG9uZGF0YSk7XG4gICAgICAgICAgICAgICAgdGhpcy5vZmYoREVTVFJPWUVELCBvbmRlc3Ryb3kpO1xuICAgICAgICAgICAgICAgIHN0b3AoKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBvbmRlc3Ryb3kgPSAoKSA9PiBvbmVycihuZXcgRXJyb3IoJ3N0cmVhbSBkZXN0cm95ZWQnKSk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlcywgcmVqKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVqZWN0ID0gcmVqO1xuICAgICAgICAgICAgICAgIHJlc29sdmUgPSByZXM7XG4gICAgICAgICAgICAgICAgdGhpcy5vbmNlKERFU1RST1lFRCwgb25kZXN0cm95KTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uY2UoJ2Vycm9yJywgb25lcnIpO1xuICAgICAgICAgICAgICAgIHRoaXMub25jZSgnZW5kJywgb25lbmQpO1xuICAgICAgICAgICAgICAgIHRoaXMub25jZSgnZGF0YScsIG9uZGF0YSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5leHQsXG4gICAgICAgICAgICB0aHJvdzogc3RvcCxcbiAgICAgICAgICAgIHJldHVybjogc3RvcCxcbiAgICAgICAgICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTeW5jaHJvbm91cyBgZm9yIG9mYCBpdGVyYXRpb24uXG4gICAgICpcbiAgICAgKiBUaGUgaXRlcmF0aW9uIHdpbGwgdGVybWluYXRlIHdoZW4gdGhlIGludGVybmFsIGJ1ZmZlciBydW5zIG91dCwgZXZlblxuICAgICAqIGlmIHRoZSBzdHJlYW0gaGFzIG5vdCB5ZXQgdGVybWluYXRlZC5cbiAgICAgKi9cbiAgICBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICAgICAgLy8gc2V0IHRoaXMgdXAgZnJvbnQsIGluIGNhc2UgdGhlIGNvbnN1bWVyIGRvZXNuJ3QgY2FsbCBuZXh0KClcbiAgICAgICAgLy8gcmlnaHQgYXdheS5cbiAgICAgICAgdGhpc1tESVNDQVJERURdID0gZmFsc2U7XG4gICAgICAgIGxldCBzdG9wcGVkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IHN0b3AgPSAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnBhdXNlKCk7XG4gICAgICAgICAgICB0aGlzLm9mZihFUlJPUiwgc3RvcCk7XG4gICAgICAgICAgICB0aGlzLm9mZihERVNUUk9ZRUQsIHN0b3ApO1xuICAgICAgICAgICAgdGhpcy5vZmYoJ2VuZCcsIHN0b3ApO1xuICAgICAgICAgICAgc3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogdW5kZWZpbmVkIH07XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IG5leHQgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoc3RvcHBlZClcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RvcCgpO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnJlYWQoKTtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IHN0b3AoKSA6IHsgZG9uZTogZmFsc2UsIHZhbHVlIH07XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMub25jZSgnZW5kJywgc3RvcCk7XG4gICAgICAgIHRoaXMub25jZShFUlJPUiwgc3RvcCk7XG4gICAgICAgIHRoaXMub25jZShERVNUUk9ZRUQsIHN0b3ApO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmV4dCxcbiAgICAgICAgICAgIHRocm93OiBzdG9wLFxuICAgICAgICAgICAgcmV0dXJuOiBzdG9wLFxuICAgICAgICAgICAgW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZXN0cm95IGEgc3RyZWFtLCBwcmV2ZW50aW5nIGl0IGZyb20gYmVpbmcgdXNlZCBmb3IgYW55IGZ1cnRoZXIgcHVycG9zZS5cbiAgICAgKlxuICAgICAqIElmIHRoZSBzdHJlYW0gaGFzIGEgYGNsb3NlKClgIG1ldGhvZCwgdGhlbiBpdCB3aWxsIGJlIGNhbGxlZCBvblxuICAgICAqIGRlc3RydWN0aW9uLlxuICAgICAqXG4gICAgICogQWZ0ZXIgZGVzdHJ1Y3Rpb24sIGFueSBhdHRlbXB0IHRvIHdyaXRlIGRhdGEsIHJlYWQgZGF0YSwgb3IgZW1pdCBtb3N0XG4gICAgICogZXZlbnRzIHdpbGwgYmUgaWdub3JlZC5cbiAgICAgKlxuICAgICAqIElmIGFuIGVycm9yIGFyZ3VtZW50IGlzIHByb3ZpZGVkLCB0aGVuIGl0IHdpbGwgYmUgZW1pdHRlZCBpbiBhblxuICAgICAqICdlcnJvcicgZXZlbnQuXG4gICAgICovXG4gICAgZGVzdHJveShlcikge1xuICAgICAgICBpZiAodGhpc1tERVNUUk9ZRURdKSB7XG4gICAgICAgICAgICBpZiAoZXIpXG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIGVyKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoREVTVFJPWUVEKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHRoaXNbREVTVFJPWUVEXSA9IHRydWU7XG4gICAgICAgIHRoaXNbRElTQ0FSREVEXSA9IHRydWU7XG4gICAgICAgIC8vIHRocm93IGF3YXkgYWxsIGJ1ZmZlcmVkIGRhdGEsIGl0J3MgbmV2ZXIgY29taW5nIG91dFxuICAgICAgICB0aGlzW0JVRkZFUl0ubGVuZ3RoID0gMDtcbiAgICAgICAgdGhpc1tCVUZGRVJMRU5HVEhdID0gMDtcbiAgICAgICAgY29uc3Qgd2MgPSB0aGlzO1xuICAgICAgICBpZiAodHlwZW9mIHdjLmNsb3NlID09PSAnZnVuY3Rpb24nICYmICF0aGlzW0NMT1NFRF0pXG4gICAgICAgICAgICB3Yy5jbG9zZSgpO1xuICAgICAgICBpZiAoZXIpXG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXIpO1xuICAgICAgICAvLyBpZiBubyBlcnJvciB0byBlbWl0LCBzdGlsbCByZWplY3QgcGVuZGluZyBwcm9taXNlc1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzLmVtaXQoREVTVFJPWUVEKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFsaWFzIGZvciB7QGxpbmsgaXNTdHJlYW19XG4gICAgICpcbiAgICAgKiBGb3JtZXIgZXhwb3J0IGxvY2F0aW9uLCBtYWludGFpbmVkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS5cbiAgICAgKlxuICAgICAqIEBkZXByZWNhdGVkXG4gICAgICovXG4gICAgc3RhdGljIGdldCBpc1N0cmVhbSgpIHtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMuaXNTdHJlYW07XG4gICAgfVxufVxuZXhwb3J0cy5NaW5pcGFzcyA9IE1pbmlwYXNzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5QYXRoU2N1cnJ5ID0gZXhwb3J0cy5QYXRoID0gZXhwb3J0cy5QYXRoU2N1cnJ5RGFyd2luID0gZXhwb3J0cy5QYXRoU2N1cnJ5UG9zaXggPSBleHBvcnRzLlBhdGhTY3VycnlXaW4zMiA9IGV4cG9ydHMuUGF0aFNjdXJyeUJhc2UgPSBleHBvcnRzLlBhdGhQb3NpeCA9IGV4cG9ydHMuUGF0aFdpbjMyID0gZXhwb3J0cy5QYXRoQmFzZSA9IGV4cG9ydHMuQ2hpbGRyZW5DYWNoZSA9IGV4cG9ydHMuUmVzb2x2ZUNhY2hlID0gdm9pZCAwO1xuY29uc3QgbHJ1X2NhY2hlXzEgPSByZXF1aXJlKFwibHJ1LWNhY2hlXCIpO1xuY29uc3Qgbm9kZV9wYXRoXzEgPSByZXF1aXJlKFwibm9kZTpwYXRoXCIpO1xuY29uc3Qgbm9kZV91cmxfMSA9IHJlcXVpcmUoXCJub2RlOnVybFwiKTtcbmNvbnN0IGZzXzEgPSByZXF1aXJlKFwiZnNcIik7XG5jb25zdCBhY3R1YWxGUyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwibm9kZTpmc1wiKSk7XG5jb25zdCByZWFscGF0aFN5bmMgPSBmc18xLnJlYWxwYXRoU3luYy5uYXRpdmU7XG4vLyBUT0RPOiB0ZXN0IHBlcmYgb2YgZnMvcHJvbWlzZXMgcmVhbHBhdGggdnMgcmVhbHBhdGhDQixcbi8vIHNpbmNlIHRoZSBwcm9taXNlcyBvbmUgdXNlcyByZWFscGF0aC5uYXRpdmVcbmNvbnN0IHByb21pc2VzXzEgPSByZXF1aXJlKFwibm9kZTpmcy9wcm9taXNlc1wiKTtcbmNvbnN0IG1pbmlwYXNzXzEgPSByZXF1aXJlKFwibWluaXBhc3NcIik7XG5jb25zdCBkZWZhdWx0RlMgPSB7XG4gICAgbHN0YXRTeW5jOiBmc18xLmxzdGF0U3luYyxcbiAgICByZWFkZGlyOiBmc18xLnJlYWRkaXIsXG4gICAgcmVhZGRpclN5bmM6IGZzXzEucmVhZGRpclN5bmMsXG4gICAgcmVhZGxpbmtTeW5jOiBmc18xLnJlYWRsaW5rU3luYyxcbiAgICByZWFscGF0aFN5bmMsXG4gICAgcHJvbWlzZXM6IHtcbiAgICAgICAgbHN0YXQ6IHByb21pc2VzXzEubHN0YXQsXG4gICAgICAgIHJlYWRkaXI6IHByb21pc2VzXzEucmVhZGRpcixcbiAgICAgICAgcmVhZGxpbms6IHByb21pc2VzXzEucmVhZGxpbmssXG4gICAgICAgIHJlYWxwYXRoOiBwcm9taXNlc18xLnJlYWxwYXRoLFxuICAgIH0sXG59O1xuLy8gaWYgdGhleSBqdXN0IGdhdmUgdXMgcmVxdWlyZSgnZnMnKSB0aGVuIHVzZSBvdXIgZGVmYXVsdFxuY29uc3QgZnNGcm9tT3B0aW9uID0gKGZzT3B0aW9uKSA9PiAhZnNPcHRpb24gfHwgZnNPcHRpb24gPT09IGRlZmF1bHRGUyB8fCBmc09wdGlvbiA9PT0gYWN0dWFsRlMgP1xuICAgIGRlZmF1bHRGU1xuICAgIDoge1xuICAgICAgICAuLi5kZWZhdWx0RlMsXG4gICAgICAgIC4uLmZzT3B0aW9uLFxuICAgICAgICBwcm9taXNlczoge1xuICAgICAgICAgICAgLi4uZGVmYXVsdEZTLnByb21pc2VzLFxuICAgICAgICAgICAgLi4uKGZzT3B0aW9uLnByb21pc2VzIHx8IHt9KSxcbiAgICAgICAgfSxcbiAgICB9O1xuLy8gdHVybiBzb21ldGhpbmcgbGlrZSAvLz8vYzovIGludG8gYzpcXFxuY29uc3QgdW5jRHJpdmVSZWdleHAgPSAvXlxcXFxcXFxcXFw/XFxcXChbYS16XTopXFxcXD8kL2k7XG5jb25zdCB1bmNUb0RyaXZlID0gKHJvb3RQYXRoKSA9PiByb290UGF0aC5yZXBsYWNlKC9cXC8vZywgJ1xcXFwnKS5yZXBsYWNlKHVuY0RyaXZlUmVnZXhwLCAnJDFcXFxcJyk7XG4vLyB3aW5kb3dzIHBhdGhzIGFyZSBzZXBhcmF0ZWQgYnkgZWl0aGVyIC8gb3IgXFxcbmNvbnN0IGVpdGhlclNlcCA9IC9bXFxcXFxcL10vO1xuY29uc3QgVU5LTk9XTiA9IDA7IC8vIG1heSBub3QgZXZlbiBleGlzdCwgZm9yIGFsbCB3ZSBrbm93XG5jb25zdCBJRklGTyA9IDBiMDAwMTtcbmNvbnN0IElGQ0hSID0gMGIwMDEwO1xuY29uc3QgSUZESVIgPSAwYjAxMDA7XG5jb25zdCBJRkJMSyA9IDBiMDExMDtcbmNvbnN0IElGUkVHID0gMGIxMDAwO1xuY29uc3QgSUZMTksgPSAwYjEwMTA7XG5jb25zdCBJRlNPQ0sgPSAwYjExMDA7XG5jb25zdCBJRk1UID0gMGIxMTExO1xuLy8gbWFzayB0byB1bnNldCBsb3cgNCBiaXRzXG5jb25zdCBJRk1UX1VOS05PV04gPSB+SUZNVDtcbi8vIHNldCBhZnRlciBzdWNjZXNzZnVsbHkgY2FsbGluZyByZWFkZGlyKCkgYW5kIGdldHRpbmcgZW50cmllcy5cbmNvbnN0IFJFQURESVJfQ0FMTEVEID0gMGIwMDAwXzAwMDFfMDAwMDtcbi8vIHNldCBhZnRlciBhIHN1Y2Nlc3NmdWwgbHN0YXQoKVxuY29uc3QgTFNUQVRfQ0FMTEVEID0gMGIwMDAwXzAwMTBfMDAwMDtcbi8vIHNldCBpZiBhbiBlbnRyeSAob3Igb25lIG9mIGl0cyBwYXJlbnRzKSBpcyBkZWZpbml0ZWx5IG5vdCBhIGRpclxuY29uc3QgRU5PVERJUiA9IDBiMDAwMF8wMTAwXzAwMDA7XG4vLyBzZXQgaWYgYW4gZW50cnkgKG9yIG9uZSBvZiBpdHMgcGFyZW50cykgZG9lcyBub3QgZXhpc3Rcbi8vIChjYW4gYWxzbyBiZSBzZXQgb24gbHN0YXQgZXJyb3JzIGxpa2UgRUFDQ0VTIG9yIEVOQU1FVE9PTE9ORylcbmNvbnN0IEVOT0VOVCA9IDBiMDAwMF8xMDAwXzAwMDA7XG4vLyBjYW5ub3QgaGF2ZSBjaGlsZCBlbnRyaWVzIC0tIGFsc28gdmVyaWZ5ICZJRk1UIGlzIGVpdGhlciBJRkRJUiBvciBJRkxOS1xuLy8gc2V0IGlmIHdlIGZhaWwgdG8gcmVhZGxpbmtcbmNvbnN0IEVOT1JFQURMSU5LID0gMGIwMDAxXzAwMDBfMDAwMDtcbi8vIHNldCBpZiB3ZSBrbm93IHJlYWxwYXRoKCkgd2lsbCBmYWlsXG5jb25zdCBFTk9SRUFMUEFUSCA9IDBiMDAxMF8wMDAwXzAwMDA7XG5jb25zdCBFTk9DSElMRCA9IEVOT1RESVIgfCBFTk9FTlQgfCBFTk9SRUFMUEFUSDtcbmNvbnN0IFRZUEVNQVNLID0gMGIwMDExXzExMTFfMTExMTtcbmNvbnN0IGVudFRvVHlwZSA9IChzKSA9PiBzLmlzRmlsZSgpID8gSUZSRUdcbiAgICA6IHMuaXNEaXJlY3RvcnkoKSA/IElGRElSXG4gICAgICAgIDogcy5pc1N5bWJvbGljTGluaygpID8gSUZMTktcbiAgICAgICAgICAgIDogcy5pc0NoYXJhY3RlckRldmljZSgpID8gSUZDSFJcbiAgICAgICAgICAgICAgICA6IHMuaXNCbG9ja0RldmljZSgpID8gSUZCTEtcbiAgICAgICAgICAgICAgICAgICAgOiBzLmlzU29ja2V0KCkgPyBJRlNPQ0tcbiAgICAgICAgICAgICAgICAgICAgICAgIDogcy5pc0ZJRk8oKSA/IElGSUZPXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBVTktOT1dOO1xuLy8gbm9ybWFsaXplIHVuaWNvZGUgcGF0aCBuYW1lc1xuY29uc3Qgbm9ybWFsaXplQ2FjaGUgPSBuZXcgTWFwKCk7XG5jb25zdCBub3JtYWxpemUgPSAocykgPT4ge1xuICAgIGNvbnN0IGMgPSBub3JtYWxpemVDYWNoZS5nZXQocyk7XG4gICAgaWYgKGMpXG4gICAgICAgIHJldHVybiBjO1xuICAgIGNvbnN0IG4gPSBzLm5vcm1hbGl6ZSgnTkZLRCcpO1xuICAgIG5vcm1hbGl6ZUNhY2hlLnNldChzLCBuKTtcbiAgICByZXR1cm4gbjtcbn07XG5jb25zdCBub3JtYWxpemVOb2Nhc2VDYWNoZSA9IG5ldyBNYXAoKTtcbmNvbnN0IG5vcm1hbGl6ZU5vY2FzZSA9IChzKSA9PiB7XG4gICAgY29uc3QgYyA9IG5vcm1hbGl6ZU5vY2FzZUNhY2hlLmdldChzKTtcbiAgICBpZiAoYylcbiAgICAgICAgcmV0dXJuIGM7XG4gICAgY29uc3QgbiA9IG5vcm1hbGl6ZShzLnRvTG93ZXJDYXNlKCkpO1xuICAgIG5vcm1hbGl6ZU5vY2FzZUNhY2hlLnNldChzLCBuKTtcbiAgICByZXR1cm4gbjtcbn07XG4vKipcbiAqIEFuIExSVUNhY2hlIGZvciBzdG9yaW5nIHJlc29sdmVkIHBhdGggc3RyaW5ncyBvciBQYXRoIG9iamVjdHMuXG4gKiBAaW50ZXJuYWxcbiAqL1xuY2xhc3MgUmVzb2x2ZUNhY2hlIGV4dGVuZHMgbHJ1X2NhY2hlXzEuTFJVQ2FjaGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcih7IG1heDogMjU2IH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuUmVzb2x2ZUNhY2hlID0gUmVzb2x2ZUNhY2hlO1xuLy8gSW4gb3JkZXIgdG8gcHJldmVudCBibG93aW5nIG91dCB0aGUganMgaGVhcCBieSBhbGxvY2F0aW5nIGh1bmRyZWRzIG9mXG4vLyB0aG91c2FuZHMgb2YgUGF0aCBlbnRyaWVzIHdoZW4gd2Fsa2luZyBleHRyZW1lbHkgbGFyZ2UgdHJlZXMsIHRoZSBcImNoaWxkcmVuXCJcbi8vIGluIHRoaXMgdHJlZSBhcmUgcmVwcmVzZW50ZWQgYnkgc3RvcmluZyBhbiBhcnJheSBvZiBQYXRoIGVudHJpZXMgaW4gYW5cbi8vIExSVUNhY2hlLCBpbmRleGVkIGJ5IHRoZSBwYXJlbnQuICBBdCBhbnkgdGltZSwgUGF0aC5jaGlsZHJlbigpIG1heSByZXR1cm4gYW5cbi8vIGVtcHR5IGFycmF5LCBpbmRpY2F0aW5nIHRoYXQgaXQgZG9lc24ndCBrbm93IGFib3V0IGFueSBvZiBpdHMgY2hpbGRyZW4sIGFuZFxuLy8gdGh1cyBoYXMgdG8gcmVidWlsZCB0aGF0IGNhY2hlLiAgVGhpcyBpcyBmaW5lLCBpdCBqdXN0IG1lYW5zIHRoYXQgd2UgZG9uJ3Rcbi8vIGJlbmVmaXQgYXMgbXVjaCBmcm9tIGhhdmluZyB0aGUgY2FjaGVkIGVudHJpZXMsIGJ1dCBodWdlIGRpcmVjdG9yeSB3YWxrc1xuLy8gZG9uJ3QgYmxvdyBvdXQgdGhlIHN0YWNrLCBhbmQgc21hbGxlciBvbmVzIGFyZSBzdGlsbCBhcyBmYXN0IGFzIHBvc3NpYmxlLlxuLy9cbi8vSXQgZG9lcyBpbXBvc2Ugc29tZSBjb21wbGV4aXR5IHdoZW4gYnVpbGRpbmcgdXAgdGhlIHJlYWRkaXIgZGF0YSwgYmVjYXVzZSB3ZVxuLy9uZWVkIHRvIHBhc3MgYSByZWZlcmVuY2UgdG8gdGhlIGNoaWxkcmVuIGFycmF5IHRoYXQgd2Ugc3RhcnRlZCB3aXRoLlxuLyoqXG4gKiBhbiBMUlVDYWNoZSBmb3Igc3RvcmluZyBjaGlsZCBlbnRyaWVzLlxuICogQGludGVybmFsXG4gKi9cbmNsYXNzIENoaWxkcmVuQ2FjaGUgZXh0ZW5kcyBscnVfY2FjaGVfMS5MUlVDYWNoZSB7XG4gICAgY29uc3RydWN0b3IobWF4U2l6ZSA9IDE2ICogMTAyNCkge1xuICAgICAgICBzdXBlcih7XG4gICAgICAgICAgICBtYXhTaXplLFxuICAgICAgICAgICAgLy8gcGFyZW50ICsgY2hpbGRyZW5cbiAgICAgICAgICAgIHNpemVDYWxjdWxhdGlvbjogYSA9PiBhLmxlbmd0aCArIDEsXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuQ2hpbGRyZW5DYWNoZSA9IENoaWxkcmVuQ2FjaGU7XG5jb25zdCBzZXRBc0N3ZCA9IFN5bWJvbCgnUGF0aFNjdXJyeSBzZXRBc0N3ZCcpO1xuLyoqXG4gKiBQYXRoIG9iamVjdHMgYXJlIHNvcnQgb2YgbGlrZSBhIHN1cGVyLXBvd2VyZWRcbiAqIHtAbGluayBodHRwczovL25vZGVqcy5vcmcvZG9jcy9sYXRlc3QvYXBpL2ZzLmh0bWwjY2xhc3MtZnNkaXJlbnQgZnMuRGlyZW50fVxuICpcbiAqIEVhY2ggb25lIHJlcHJlc2VudHMgYSBzaW5nbGUgZmlsZXN5c3RlbSBlbnRyeSBvbiBkaXNrLCB3aGljaCBtYXkgb3IgbWF5IG5vdFxuICogZXhpc3QuIEl0IGluY2x1ZGVzIG1ldGhvZHMgZm9yIHJlYWRpbmcgdmFyaW91cyB0eXBlcyBvZiBpbmZvcm1hdGlvbiB2aWFcbiAqIGxzdGF0LCByZWFkbGluaywgYW5kIHJlYWRkaXIsIGFuZCBjYWNoZXMgYWxsIGluZm9ybWF0aW9uIHRvIHRoZSBncmVhdGVzdFxuICogZGVncmVlIHBvc3NpYmxlLlxuICpcbiAqIE5vdGUgdGhhdCBmcyBvcGVyYXRpb25zIHRoYXQgd291bGQgbm9ybWFsbHkgdGhyb3cgd2lsbCBpbnN0ZWFkIHJldHVybiBhblxuICogXCJlbXB0eVwiIHZhbHVlLiBUaGlzIGlzIGluIG9yZGVyIHRvIHByZXZlbnQgZXhjZXNzaXZlIG92ZXJoZWFkIGZyb20gZXJyb3JcbiAqIHN0YWNrIHRyYWNlcy5cbiAqL1xuY2xhc3MgUGF0aEJhc2Uge1xuICAgIC8qKlxuICAgICAqIHRoZSBiYXNlbmFtZSBvZiB0aGlzIHBhdGhcbiAgICAgKlxuICAgICAqICoqSW1wb3J0YW50Kio6ICphbHdheXMqIHRlc3QgdGhlIHBhdGggbmFtZSBhZ2FpbnN0IGFueSB0ZXN0IHN0cmluZ1xuICAgICAqIHVzaW5ndGhlIHtAbGluayBpc05hbWVkfSBtZXRob2QsIGFuZCBub3QgYnkgZGlyZWN0bHkgY29tcGFyaW5nIHRoaXNcbiAgICAgKiBzdHJpbmcuIE90aGVyd2lzZSwgdW5pY29kZSBwYXRoIHN0cmluZ3MgdGhhdCB0aGUgc3lzdGVtIHNlZXMgYXMgaWRlbnRpY2FsXG4gICAgICogd2lsbCBub3QgYmUgcHJvcGVybHkgdHJlYXRlZCBhcyB0aGUgc2FtZSBwYXRoLCBsZWFkaW5nIHRvIGluY29ycmVjdFxuICAgICAqIGJlaGF2aW9yIGFuZCBwb3NzaWJsZSBzZWN1cml0eSBpc3N1ZXMuXG4gICAgICovXG4gICAgbmFtZTtcbiAgICAvKipcbiAgICAgKiB0aGUgUGF0aCBlbnRyeSBjb3JyZXNwb25kaW5nIHRvIHRoZSBwYXRoIHJvb3QuXG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICByb290O1xuICAgIC8qKlxuICAgICAqIEFsbCByb290cyBmb3VuZCB3aXRoaW4gdGhlIGN1cnJlbnQgUGF0aFNjdXJyeSBmYW1pbHlcbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHJvb3RzO1xuICAgIC8qKlxuICAgICAqIGEgcmVmZXJlbmNlIHRvIHRoZSBwYXJlbnQgcGF0aCwgb3IgdW5kZWZpbmVkIGluIHRoZSBjYXNlIG9mIHJvb3QgZW50cmllc1xuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcGFyZW50O1xuICAgIC8qKlxuICAgICAqIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHBhdGhzIGFyZSBjb21wYXJlZCBjYXNlLWluc2Vuc2l0aXZlbHlcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBub2Nhc2U7XG4gICAgLyoqXG4gICAgICogYm9vbGVhbiBpbmRpY2F0aW5nIHRoYXQgdGhpcyBwYXRoIGlzIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5XG4gICAgICogb2YgdGhlIFBhdGhTY3VycnkgY29sbGVjdGlvbiB0aGF0IGNvbnRhaW5zIGl0LlxuICAgICAqL1xuICAgIGlzQ1dEID0gZmFsc2U7XG4gICAgLy8gcG90ZW50aWFsIGRlZmF1bHQgZnMgb3ZlcnJpZGVcbiAgICAjZnM7XG4gICAgLy8gU3RhdHMgZmllbGRzXG4gICAgI2RldjtcbiAgICBnZXQgZGV2KCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jZGV2O1xuICAgIH1cbiAgICAjbW9kZTtcbiAgICBnZXQgbW9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI21vZGU7XG4gICAgfVxuICAgICNubGluaztcbiAgICBnZXQgbmxpbmsoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNubGluaztcbiAgICB9XG4gICAgI3VpZDtcbiAgICBnZXQgdWlkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jdWlkO1xuICAgIH1cbiAgICAjZ2lkO1xuICAgIGdldCBnaWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNnaWQ7XG4gICAgfVxuICAgICNyZGV2O1xuICAgIGdldCByZGV2KCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcmRldjtcbiAgICB9XG4gICAgI2Jsa3NpemU7XG4gICAgZ2V0IGJsa3NpemUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNibGtzaXplO1xuICAgIH1cbiAgICAjaW5vO1xuICAgIGdldCBpbm8oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNpbm87XG4gICAgfVxuICAgICNzaXplO1xuICAgIGdldCBzaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jc2l6ZTtcbiAgICB9XG4gICAgI2Jsb2NrcztcbiAgICBnZXQgYmxvY2tzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jYmxvY2tzO1xuICAgIH1cbiAgICAjYXRpbWVNcztcbiAgICBnZXQgYXRpbWVNcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2F0aW1lTXM7XG4gICAgfVxuICAgICNtdGltZU1zO1xuICAgIGdldCBtdGltZU1zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jbXRpbWVNcztcbiAgICB9XG4gICAgI2N0aW1lTXM7XG4gICAgZ2V0IGN0aW1lTXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNjdGltZU1zO1xuICAgIH1cbiAgICAjYmlydGh0aW1lTXM7XG4gICAgZ2V0IGJpcnRodGltZU1zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jYmlydGh0aW1lTXM7XG4gICAgfVxuICAgICNhdGltZTtcbiAgICBnZXQgYXRpbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNhdGltZTtcbiAgICB9XG4gICAgI210aW1lO1xuICAgIGdldCBtdGltZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI210aW1lO1xuICAgIH1cbiAgICAjY3RpbWU7XG4gICAgZ2V0IGN0aW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jY3RpbWU7XG4gICAgfVxuICAgICNiaXJ0aHRpbWU7XG4gICAgZ2V0IGJpcnRodGltZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2JpcnRodGltZTtcbiAgICB9XG4gICAgI21hdGNoTmFtZTtcbiAgICAjZGVwdGg7XG4gICAgI2Z1bGxwYXRoO1xuICAgICNmdWxscGF0aFBvc2l4O1xuICAgICNyZWxhdGl2ZTtcbiAgICAjcmVsYXRpdmVQb3NpeDtcbiAgICAjdHlwZTtcbiAgICAjY2hpbGRyZW47XG4gICAgI2xpbmtUYXJnZXQ7XG4gICAgI3JlYWxwYXRoO1xuICAgIC8qKlxuICAgICAqIFRoaXMgcHJvcGVydHkgaXMgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgRGlyZW50IGNsYXNzIGFzIG9mXG4gICAgICogTm9kZSB2MjAsIHdoZXJlIERpcmVudFsncGFyZW50UGF0aCddIHJlZmVycyB0byB0aGUgcGF0aCBvZiB0aGVcbiAgICAgKiBkaXJlY3RvcnkgdGhhdCB3YXMgcGFzc2VkIHRvIHJlYWRkaXIuIEZvciByb290IGVudHJpZXMsIGl0J3MgdGhlIHBhdGhcbiAgICAgKiB0byB0aGUgZW50cnkgaXRzZWxmLlxuICAgICAqL1xuICAgIGdldCBwYXJlbnRQYXRoKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMucGFyZW50IHx8IHRoaXMpLmZ1bGxwYXRoKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlcHJlY2F0ZWQgYWxpYXMgZm9yIERpcmVudFsncGFyZW50UGF0aCddIFNvbWV3aGF0IGNvdW50ZXJpbnR1aXRpdmVseSxcbiAgICAgKiB0aGlzIHByb3BlcnR5IHJlZmVycyB0byB0aGUgKnBhcmVudCogcGF0aCwgbm90IHRoZSBwYXRoIG9iamVjdCBpdHNlbGYuXG4gICAgICovXG4gICAgZ2V0IHBhdGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudFBhdGg7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERvIG5vdCBjcmVhdGUgbmV3IFBhdGggb2JqZWN0cyBkaXJlY3RseS4gIFRoZXkgc2hvdWxkIGFsd2F5cyBiZSBhY2Nlc3NlZFxuICAgICAqIHZpYSB0aGUgUGF0aFNjdXJyeSBjbGFzcyBvciBvdGhlciBtZXRob2RzIG9uIHRoZSBQYXRoIGNsYXNzLlxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgY29uc3RydWN0b3IobmFtZSwgdHlwZSA9IFVOS05PV04sIHJvb3QsIHJvb3RzLCBub2Nhc2UsIGNoaWxkcmVuLCBvcHRzKSB7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMuI21hdGNoTmFtZSA9IG5vY2FzZSA/IG5vcm1hbGl6ZU5vY2FzZShuYW1lKSA6IG5vcm1hbGl6ZShuYW1lKTtcbiAgICAgICAgdGhpcy4jdHlwZSA9IHR5cGUgJiBUWVBFTUFTSztcbiAgICAgICAgdGhpcy5ub2Nhc2UgPSBub2Nhc2U7XG4gICAgICAgIHRoaXMucm9vdHMgPSByb290cztcbiAgICAgICAgdGhpcy5yb290ID0gcm9vdCB8fCB0aGlzO1xuICAgICAgICB0aGlzLiNjaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgICAgICB0aGlzLiNmdWxscGF0aCA9IG9wdHMuZnVsbHBhdGg7XG4gICAgICAgIHRoaXMuI3JlbGF0aXZlID0gb3B0cy5yZWxhdGl2ZTtcbiAgICAgICAgdGhpcy4jcmVsYXRpdmVQb3NpeCA9IG9wdHMucmVsYXRpdmVQb3NpeDtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBvcHRzLnBhcmVudDtcbiAgICAgICAgaWYgKHRoaXMucGFyZW50KSB7XG4gICAgICAgICAgICB0aGlzLiNmcyA9IHRoaXMucGFyZW50LiNmcztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuI2ZzID0gZnNGcm9tT3B0aW9uKG9wdHMuZnMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGRlcHRoIG9mIHRoZSBQYXRoIG9iamVjdCBmcm9tIGl0cyByb290LlxuICAgICAqXG4gICAgICogRm9yIGV4YW1wbGUsIGEgcGF0aCBhdCBgL2Zvby9iYXJgIHdvdWxkIGhhdmUgYSBkZXB0aCBvZiAyLlxuICAgICAqL1xuICAgIGRlcHRoKCkge1xuICAgICAgICBpZiAodGhpcy4jZGVwdGggIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiNkZXB0aDtcbiAgICAgICAgaWYgKCF0aGlzLnBhcmVudClcbiAgICAgICAgICAgIHJldHVybiAodGhpcy4jZGVwdGggPSAwKTtcbiAgICAgICAgcmV0dXJuICh0aGlzLiNkZXB0aCA9IHRoaXMucGFyZW50LmRlcHRoKCkgKyAxKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgY2hpbGRyZW5DYWNoZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2NoaWxkcmVuO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIFBhdGggb2JqZWN0IHJlZmVyZW5jZWQgYnkgdGhlIHN0cmluZyBwYXRoLCByZXNvbHZlZCBmcm9tIHRoaXMgUGF0aFxuICAgICAqL1xuICAgIHJlc29sdmUocGF0aCkge1xuICAgICAgICBpZiAoIXBhdGgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJvb3RQYXRoID0gdGhpcy5nZXRSb290U3RyaW5nKHBhdGgpO1xuICAgICAgICBjb25zdCBkaXIgPSBwYXRoLnN1YnN0cmluZyhyb290UGF0aC5sZW5ndGgpO1xuICAgICAgICBjb25zdCBkaXJQYXJ0cyA9IGRpci5zcGxpdCh0aGlzLnNwbGl0U2VwKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcm9vdFBhdGggP1xuICAgICAgICAgICAgdGhpcy5nZXRSb290KHJvb3RQYXRoKS4jcmVzb2x2ZVBhcnRzKGRpclBhcnRzKVxuICAgICAgICAgICAgOiB0aGlzLiNyZXNvbHZlUGFydHMoZGlyUGFydHMpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICAjcmVzb2x2ZVBhcnRzKGRpclBhcnRzKSB7XG4gICAgICAgIGxldCBwID0gdGhpcztcbiAgICAgICAgZm9yIChjb25zdCBwYXJ0IG9mIGRpclBhcnRzKSB7XG4gICAgICAgICAgICBwID0gcC5jaGlsZChwYXJ0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY2FjaGVkIGNoaWxkcmVuIFBhdGggb2JqZWN0cywgaWYgc3RpbGwgYXZhaWxhYmxlLiAgSWYgdGhleVxuICAgICAqIGhhdmUgZmFsbGVuIG91dCBvZiB0aGUgY2FjaGUsIHRoZW4gcmV0dXJucyBhbiBlbXB0eSBhcnJheSwgYW5kIHJlc2V0cyB0aGVcbiAgICAgKiBSRUFERElSX0NBTExFRCBiaXQsIHNvIHRoYXQgZnV0dXJlIGNhbGxzIHRvIHJlYWRkaXIoKSB3aWxsIHJlcXVpcmUgYW4gZnNcbiAgICAgKiBsb29rdXAuXG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBjaGlsZHJlbigpIHtcbiAgICAgICAgY29uc3QgY2FjaGVkID0gdGhpcy4jY2hpbGRyZW4uZ2V0KHRoaXMpO1xuICAgICAgICBpZiAoY2FjaGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gT2JqZWN0LmFzc2lnbihbXSwgeyBwcm92aXNpb25hbDogMCB9KTtcbiAgICAgICAgdGhpcy4jY2hpbGRyZW4uc2V0KHRoaXMsIGNoaWxkcmVuKTtcbiAgICAgICAgdGhpcy4jdHlwZSAmPSB+UkVBRERJUl9DQUxMRUQ7XG4gICAgICAgIHJldHVybiBjaGlsZHJlbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVzb2x2ZXMgYSBwYXRoIHBvcnRpb24gYW5kIHJldHVybnMgb3IgY3JlYXRlcyB0aGUgY2hpbGQgUGF0aC5cbiAgICAgKlxuICAgICAqIFJldHVybnMgYHRoaXNgIGlmIHBhdGhQYXJ0IGlzIGAnJ2Agb3IgYCcuJ2AsIG9yIGBwYXJlbnRgIGlmIHBhdGhQYXJ0IGlzXG4gICAgICogYCcuLidgLlxuICAgICAqXG4gICAgICogVGhpcyBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS4gIElmIGBwYXRoUGFydGAgY29udGFpbnMgYW55IHBhdGhcbiAgICAgKiBzZXBhcmF0b3JzLCBpdCB3aWxsIGxlYWQgdG8gdW5zYWZlIHVuZGVmaW5lZCBiZWhhdmlvci5cbiAgICAgKlxuICAgICAqIFVzZSBgUGF0aC5yZXNvbHZlKClgIGluc3RlYWQuXG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBjaGlsZChwYXRoUGFydCwgb3B0cykge1xuICAgICAgICBpZiAocGF0aFBhcnQgPT09ICcnIHx8IHBhdGhQYXJ0ID09PSAnLicpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXRoUGFydCA9PT0gJy4uJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50IHx8IHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZmluZCB0aGUgY2hpbGRcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuKCk7XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLm5vY2FzZSA/IG5vcm1hbGl6ZU5vY2FzZShwYXRoUGFydCkgOiBub3JtYWxpemUocGF0aFBhcnQpO1xuICAgICAgICBmb3IgKGNvbnN0IHAgb2YgY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGlmIChwLiNtYXRjaE5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBkaWRuJ3QgZmluZCBpdCwgY3JlYXRlIHByb3Zpc2lvbmFsIGNoaWxkLCBzaW5jZSBpdCBtaWdodCBub3RcbiAgICAgICAgLy8gYWN0dWFsbHkgZXhpc3QuICBJZiB3ZSBrbm93IHRoZSBwYXJlbnQgaXNuJ3QgYSBkaXIsIHRoZW5cbiAgICAgICAgLy8gaW4gZmFjdCBpdCBDQU4nVCBleGlzdC5cbiAgICAgICAgY29uc3QgcyA9IHRoaXMucGFyZW50ID8gdGhpcy5zZXAgOiAnJztcbiAgICAgICAgY29uc3QgZnVsbHBhdGggPSB0aGlzLiNmdWxscGF0aCA/IHRoaXMuI2Z1bGxwYXRoICsgcyArIHBhdGhQYXJ0IDogdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBwY2hpbGQgPSB0aGlzLm5ld0NoaWxkKHBhdGhQYXJ0LCBVTktOT1dOLCB7XG4gICAgICAgICAgICAuLi5vcHRzLFxuICAgICAgICAgICAgcGFyZW50OiB0aGlzLFxuICAgICAgICAgICAgZnVsbHBhdGgsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIXRoaXMuY2FuUmVhZGRpcigpKSB7XG4gICAgICAgICAgICBwY2hpbGQuI3R5cGUgfD0gRU5PRU5UO1xuICAgICAgICB9XG4gICAgICAgIC8vIGRvbid0IGhhdmUgdG8gdXBkYXRlIHByb3Zpc2lvbmFsLCBiZWNhdXNlIGlmIHdlIGhhdmUgcmVhbCBjaGlsZHJlbixcbiAgICAgICAgLy8gdGhlbiBwcm92aXNpb25hbCBpcyBzZXQgdG8gY2hpbGRyZW4ubGVuZ3RoLCBvdGhlcndpc2UgYSBsb3dlciBudW1iZXJcbiAgICAgICAgY2hpbGRyZW4ucHVzaChwY2hpbGQpO1xuICAgICAgICByZXR1cm4gcGNoaWxkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgcmVsYXRpdmUgcGF0aCBmcm9tIHRoZSBjd2QuIElmIGl0IGRvZXMgbm90IHNoYXJlIGFuIGFuY2VzdG9yIHdpdGhcbiAgICAgKiB0aGUgY3dkLCB0aGVuIHRoaXMgZW5kcyB1cCBiZWluZyBlcXVpdmFsZW50IHRvIHRoZSBmdWxscGF0aCgpXG4gICAgICovXG4gICAgcmVsYXRpdmUoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzQ1dEKVxuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICBpZiAodGhpcy4jcmVsYXRpdmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuI3JlbGF0aXZlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLm5hbWU7XG4gICAgICAgIGNvbnN0IHAgPSB0aGlzLnBhcmVudDtcbiAgICAgICAgaWYgKCFwKSB7XG4gICAgICAgICAgICByZXR1cm4gKHRoaXMuI3JlbGF0aXZlID0gdGhpcy5uYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwdiA9IHAucmVsYXRpdmUoKTtcbiAgICAgICAgcmV0dXJuIHB2ICsgKCFwdiB8fCAhcC5wYXJlbnQgPyAnJyA6IHRoaXMuc2VwKSArIG5hbWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSByZWxhdGl2ZSBwYXRoIGZyb20gdGhlIGN3ZCwgdXNpbmcgLyBhcyB0aGUgcGF0aCBzZXBhcmF0b3IuXG4gICAgICogSWYgaXQgZG9lcyBub3Qgc2hhcmUgYW4gYW5jZXN0b3Igd2l0aFxuICAgICAqIHRoZSBjd2QsIHRoZW4gdGhpcyBlbmRzIHVwIGJlaW5nIGVxdWl2YWxlbnQgdG8gdGhlIGZ1bGxwYXRoUG9zaXgoKVxuICAgICAqIE9uIHBvc2l4IHN5c3RlbXMsIHRoaXMgaXMgaWRlbnRpY2FsIHRvIHJlbGF0aXZlKCkuXG4gICAgICovXG4gICAgcmVsYXRpdmVQb3NpeCgpIHtcbiAgICAgICAgaWYgKHRoaXMuc2VwID09PSAnLycpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZWxhdGl2ZSgpO1xuICAgICAgICBpZiAodGhpcy5pc0NXRClcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgaWYgKHRoaXMuI3JlbGF0aXZlUG9zaXggIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiNyZWxhdGl2ZVBvc2l4O1xuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5uYW1lO1xuICAgICAgICBjb25zdCBwID0gdGhpcy5wYXJlbnQ7XG4gICAgICAgIGlmICghcCkge1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLiNyZWxhdGl2ZVBvc2l4ID0gdGhpcy5mdWxscGF0aFBvc2l4KCkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHB2ID0gcC5yZWxhdGl2ZVBvc2l4KCk7XG4gICAgICAgIHJldHVybiBwdiArICghcHYgfHwgIXAucGFyZW50ID8gJycgOiAnLycpICsgbmFtZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGZ1bGx5IHJlc29sdmVkIHBhdGggc3RyaW5nIGZvciB0aGlzIFBhdGggZW50cnlcbiAgICAgKi9cbiAgICBmdWxscGF0aCgpIHtcbiAgICAgICAgaWYgKHRoaXMuI2Z1bGxwYXRoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiNmdWxscGF0aDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5uYW1lO1xuICAgICAgICBjb25zdCBwID0gdGhpcy5wYXJlbnQ7XG4gICAgICAgIGlmICghcCkge1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLiNmdWxscGF0aCA9IHRoaXMubmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHYgPSBwLmZ1bGxwYXRoKCk7XG4gICAgICAgIGNvbnN0IGZwID0gcHYgKyAoIXAucGFyZW50ID8gJycgOiB0aGlzLnNlcCkgKyBuYW1lO1xuICAgICAgICByZXR1cm4gKHRoaXMuI2Z1bGxwYXRoID0gZnApO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBPbiBwbGF0Zm9ybXMgb3RoZXIgdGhhbiB3aW5kb3dzLCB0aGlzIGlzIGlkZW50aWNhbCB0byBmdWxscGF0aC5cbiAgICAgKlxuICAgICAqIE9uIHdpbmRvd3MsIHRoaXMgaXMgb3ZlcnJpZGRlbiB0byByZXR1cm4gdGhlIGZvcndhcmQtc2xhc2ggZm9ybSBvZiB0aGVcbiAgICAgKiBmdWxsIFVOQyBwYXRoLlxuICAgICAqL1xuICAgIGZ1bGxwYXRoUG9zaXgoKSB7XG4gICAgICAgIGlmICh0aGlzLiNmdWxscGF0aFBvc2l4ICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy4jZnVsbHBhdGhQb3NpeDtcbiAgICAgICAgaWYgKHRoaXMuc2VwID09PSAnLycpXG4gICAgICAgICAgICByZXR1cm4gKHRoaXMuI2Z1bGxwYXRoUG9zaXggPSB0aGlzLmZ1bGxwYXRoKCkpO1xuICAgICAgICBpZiAoIXRoaXMucGFyZW50KSB7XG4gICAgICAgICAgICBjb25zdCBwID0gdGhpcy5mdWxscGF0aCgpLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbiAgICAgICAgICAgIGlmICgvXlthLXpdOlxcLy9pLnRlc3QocCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKHRoaXMuI2Z1bGxwYXRoUG9zaXggPSBgLy8/LyR7cH1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAodGhpcy4jZnVsbHBhdGhQb3NpeCA9IHApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHAgPSB0aGlzLnBhcmVudDtcbiAgICAgICAgY29uc3QgcGZwcCA9IHAuZnVsbHBhdGhQb3NpeCgpO1xuICAgICAgICBjb25zdCBmcHAgPSBwZnBwICsgKCFwZnBwIHx8ICFwLnBhcmVudCA/ICcnIDogJy8nKSArIHRoaXMubmFtZTtcbiAgICAgICAgcmV0dXJuICh0aGlzLiNmdWxscGF0aFBvc2l4ID0gZnBwKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSXMgdGhlIFBhdGggb2YgYW4gdW5rbm93biB0eXBlP1xuICAgICAqXG4gICAgICogTm90ZSB0aGF0IHdlIG1pZ2h0IGtub3cgKnNvbWV0aGluZyogYWJvdXQgaXQgaWYgdGhlcmUgaGFzIGJlZW4gYSBwcmV2aW91c1xuICAgICAqIGZpbGVzeXN0ZW0gb3BlcmF0aW9uLCBmb3IgZXhhbXBsZSB0aGF0IGl0IGRvZXMgbm90IGV4aXN0LCBvciBpcyBub3QgYVxuICAgICAqIGxpbmssIG9yIHdoZXRoZXIgaXQgaGFzIGNoaWxkIGVudHJpZXMuXG4gICAgICovXG4gICAgaXNVbmtub3duKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuI3R5cGUgJiBJRk1UKSA9PT0gVU5LTk9XTjtcbiAgICB9XG4gICAgaXNUeXBlKHR5cGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbYGlzJHt0eXBlfWBdKCk7XG4gICAgfVxuICAgIGdldFR5cGUoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5pc1Vua25vd24oKSA/ICdVbmtub3duJ1xuICAgICAgICAgICAgOiB0aGlzLmlzRGlyZWN0b3J5KCkgPyAnRGlyZWN0b3J5J1xuICAgICAgICAgICAgICAgIDogdGhpcy5pc0ZpbGUoKSA/ICdGaWxlJ1xuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuaXNTeW1ib2xpY0xpbmsoKSA/ICdTeW1ib2xpY0xpbmsnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuaXNGSUZPKCkgPyAnRklGTydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuaXNDaGFyYWN0ZXJEZXZpY2UoKSA/ICdDaGFyYWN0ZXJEZXZpY2UnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5pc0Jsb2NrRGV2aWNlKCkgPyAnQmxvY2tEZXZpY2UnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IC8qIGM4IGlnbm9yZSBzdGFydCAqLyB0aGlzLmlzU29ja2V0KCkgPyAnU29ja2V0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ1Vua25vd24nKTtcbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICB9XG4gICAgLyoqXG4gICAgICogSXMgdGhlIFBhdGggYSByZWd1bGFyIGZpbGU/XG4gICAgICovXG4gICAgaXNGaWxlKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuI3R5cGUgJiBJRk1UKSA9PT0gSUZSRUc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElzIHRoZSBQYXRoIGEgZGlyZWN0b3J5P1xuICAgICAqL1xuICAgIGlzRGlyZWN0b3J5KCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuI3R5cGUgJiBJRk1UKSA9PT0gSUZESVI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElzIHRoZSBwYXRoIGEgY2hhcmFjdGVyIGRldmljZT9cbiAgICAgKi9cbiAgICBpc0NoYXJhY3RlckRldmljZSgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLiN0eXBlICYgSUZNVCkgPT09IElGQ0hSO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJcyB0aGUgcGF0aCBhIGJsb2NrIGRldmljZT9cbiAgICAgKi9cbiAgICBpc0Jsb2NrRGV2aWNlKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuI3R5cGUgJiBJRk1UKSA9PT0gSUZCTEs7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElzIHRoZSBwYXRoIGEgRklGTyBwaXBlP1xuICAgICAqL1xuICAgIGlzRklGTygpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLiN0eXBlICYgSUZNVCkgPT09IElGSUZPO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJcyB0aGUgcGF0aCBhIHNvY2tldD9cbiAgICAgKi9cbiAgICBpc1NvY2tldCgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLiN0eXBlICYgSUZNVCkgPT09IElGU09DSztcbiAgICB9XG4gICAgLyoqXG4gICAgICogSXMgdGhlIHBhdGggYSBzeW1ib2xpYyBsaW5rP1xuICAgICAqL1xuICAgIGlzU3ltYm9saWNMaW5rKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuI3R5cGUgJiBJRkxOSykgPT09IElGTE5LO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIGVudHJ5IGlmIGl0IGhhcyBiZWVuIHN1YmplY3Qgb2YgYSBzdWNjZXNzZnVsIGxzdGF0LCBvclxuICAgICAqIHVuZGVmaW5lZCBvdGhlcndpc2UuXG4gICAgICpcbiAgICAgKiBEb2VzIG5vdCByZWFkIHRoZSBmaWxlc3lzdGVtLCBzbyBhbiB1bmRlZmluZWQgcmVzdWx0ICpjb3VsZCogc2ltcGx5XG4gICAgICogbWVhbiB0aGF0IHdlIGhhdmVuJ3QgY2FsbGVkIGxzdGF0IG9uIGl0LlxuICAgICAqL1xuICAgIGxzdGF0Q2FjaGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jdHlwZSAmIExTVEFUX0NBTExFRCA/IHRoaXMgOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgY2FjaGVkIGxpbmsgdGFyZ2V0IGlmIHRoZSBlbnRyeSBoYXMgYmVlbiB0aGUgc3ViamVjdCBvZiBhXG4gICAgICogc3VjY2Vzc2Z1bCByZWFkbGluaywgb3IgdW5kZWZpbmVkIG90aGVyd2lzZS5cbiAgICAgKlxuICAgICAqIERvZXMgbm90IHJlYWQgdGhlIGZpbGVzeXN0ZW0sIHNvIGFuIHVuZGVmaW5lZCByZXN1bHQgKmNvdWxkKiBqdXN0IG1lYW4gd2VcbiAgICAgKiBkb24ndCBoYXZlIGFueSBjYWNoZWQgZGF0YS4gT25seSB1c2UgaXQgaWYgeW91IGFyZSB2ZXJ5IHN1cmUgdGhhdCBhXG4gICAgICogcmVhZGxpbmsoKSBoYXMgYmVlbiBjYWxsZWQgYXQgc29tZSBwb2ludC5cbiAgICAgKi9cbiAgICByZWFkbGlua0NhY2hlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2xpbmtUYXJnZXQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGNhY2hlZCByZWFscGF0aCB0YXJnZXQgaWYgdGhlIGVudHJ5IGhhcyBiZWVuIHRoZSBzdWJqZWN0XG4gICAgICogb2YgYSBzdWNjZXNzZnVsIHJlYWxwYXRoLCBvciB1bmRlZmluZWQgb3RoZXJ3aXNlLlxuICAgICAqXG4gICAgICogRG9lcyBub3QgcmVhZCB0aGUgZmlsZXN5c3RlbSwgc28gYW4gdW5kZWZpbmVkIHJlc3VsdCAqY291bGQqIGp1c3QgbWVhbiB3ZVxuICAgICAqIGRvbid0IGhhdmUgYW55IGNhY2hlZCBkYXRhLiBPbmx5IHVzZSBpdCBpZiB5b3UgYXJlIHZlcnkgc3VyZSB0aGF0IGFcbiAgICAgKiByZWFscGF0aCgpIGhhcyBiZWVuIGNhbGxlZCBhdCBzb21lIHBvaW50LlxuICAgICAqL1xuICAgIHJlYWxwYXRoQ2FjaGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcmVhbHBhdGg7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGNhY2hlZCBjaGlsZCBQYXRoIGVudHJpZXMgYXJyYXkgaWYgdGhlIGVudHJ5IGhhcyBiZWVuIHRoZVxuICAgICAqIHN1YmplY3Qgb2YgYSBzdWNjZXNzZnVsIHJlYWRkaXIoKSwgb3IgW10gb3RoZXJ3aXNlLlxuICAgICAqXG4gICAgICogRG9lcyBub3QgcmVhZCB0aGUgZmlsZXN5c3RlbSwgc28gYW4gZW1wdHkgYXJyYXkgKmNvdWxkKiBqdXN0IG1lYW4gd2VcbiAgICAgKiBkb24ndCBoYXZlIGFueSBjYWNoZWQgZGF0YS4gT25seSB1c2UgaXQgaWYgeW91IGFyZSB2ZXJ5IHN1cmUgdGhhdCBhXG4gICAgICogcmVhZGRpcigpIGhhcyBiZWVuIGNhbGxlZCByZWNlbnRseSBlbm91Z2ggdG8gc3RpbGwgYmUgdmFsaWQuXG4gICAgICovXG4gICAgcmVhZGRpckNhY2hlZCgpIHtcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuKCk7XG4gICAgICAgIHJldHVybiBjaGlsZHJlbi5zbGljZSgwLCBjaGlsZHJlbi5wcm92aXNpb25hbCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiB0cnVlIGlmIGl0J3Mgd29ydGggdHJ5aW5nIHRvIHJlYWRsaW5rLiAgSWUsIHdlIGRvbid0ICh5ZXQpIGhhdmVcbiAgICAgKiBhbnkgaW5kaWNhdGlvbiB0aGF0IHJlYWRsaW5rIHdpbGwgZGVmaW5pdGVseSBmYWlsLlxuICAgICAqXG4gICAgICogUmV0dXJucyBmYWxzZSBpZiB0aGUgcGF0aCBpcyBrbm93biB0byBub3QgYmUgYSBzeW1saW5rLCBpZiBhIHByZXZpb3VzXG4gICAgICogcmVhZGxpbmsgZmFpbGVkLCBvciBpZiB0aGUgZW50cnkgZG9lcyBub3QgZXhpc3QuXG4gICAgICovXG4gICAgY2FuUmVhZGxpbmsoKSB7XG4gICAgICAgIGlmICh0aGlzLiNsaW5rVGFyZ2V0KVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmICghdGhpcy5wYXJlbnQpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIC8vIGNhc2VzIHdoZXJlIGl0IGNhbm5vdCBwb3NzaWJseSBzdWNjZWVkXG4gICAgICAgIGNvbnN0IGlmbXQgPSB0aGlzLiN0eXBlICYgSUZNVDtcbiAgICAgICAgcmV0dXJuICEoKGlmbXQgIT09IFVOS05PV04gJiYgaWZtdCAhPT0gSUZMTkspIHx8XG4gICAgICAgICAgICB0aGlzLiN0eXBlICYgRU5PUkVBRExJTksgfHxcbiAgICAgICAgICAgIHRoaXMuI3R5cGUgJiBFTk9FTlQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiByZWFkZGlyIGhhcyBwcmV2aW91c2x5IGJlZW4gc3VjY2Vzc2Z1bGx5IGNhbGxlZCBvbiB0aGlzXG4gICAgICogcGF0aCwgaW5kaWNhdGluZyB0aGF0IGNhY2hlZFJlYWRkaXIoKSBpcyBsaWtlbHkgdmFsaWQuXG4gICAgICovXG4gICAgY2FsbGVkUmVhZGRpcigpIHtcbiAgICAgICAgcmV0dXJuICEhKHRoaXMuI3R5cGUgJiBSRUFERElSX0NBTExFRCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcGF0aCBpcyBrbm93biB0byBub3QgZXhpc3QuIFRoYXQgaXMsIGEgcHJldmlvdXMgbHN0YXRcbiAgICAgKiBvciByZWFkZGlyIGZhaWxlZCB0byB2ZXJpZnkgaXRzIGV4aXN0ZW5jZSB3aGVuIHRoYXQgd291bGQgaGF2ZSBiZWVuXG4gICAgICogZXhwZWN0ZWQsIG9yIGEgcGFyZW50IGVudHJ5IHdhcyBtYXJrZWQgZWl0aGVyIGVub2VudCBvciBlbm90ZGlyLlxuICAgICAqL1xuICAgIGlzRU5PRU5UKCkge1xuICAgICAgICByZXR1cm4gISEodGhpcy4jdHlwZSAmIEVOT0VOVCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSBwYXRoIGlzIGEgbWF0Y2ggZm9yIHRoZSBnaXZlbiBwYXRoIG5hbWUuICBUaGlzIGhhbmRsZXNcbiAgICAgKiBjYXNlIHNlbnNpdGl2aXR5IGFuZCB1bmljb2RlIG5vcm1hbGl6YXRpb24uXG4gICAgICpcbiAgICAgKiBOb3RlOiBldmVuIG9uIGNhc2Utc2Vuc2l0aXZlIHN5c3RlbXMsIGl0IGlzICoqbm90Kiogc2FmZSB0byB0ZXN0IHRoZVxuICAgICAqIGVxdWFsaXR5IG9mIHRoZSBgLm5hbWVgIHByb3BlcnR5IHRvIGRldGVybWluZSB3aGV0aGVyIGEgZ2l2ZW4gcGF0aG5hbWVcbiAgICAgKiBtYXRjaGVzLCBkdWUgdG8gdW5pY29kZSBub3JtYWxpemF0aW9uIG1pc21hdGNoZXMuXG4gICAgICpcbiAgICAgKiBBbHdheXMgdXNlIHRoaXMgbWV0aG9kIGluc3RlYWQgb2YgdGVzdGluZyB0aGUgYHBhdGgubmFtZWAgcHJvcGVydHlcbiAgICAgKiBkaXJlY3RseS5cbiAgICAgKi9cbiAgICBpc05hbWVkKG4pIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLm5vY2FzZSA/XG4gICAgICAgICAgICB0aGlzLiNtYXRjaE5hbWUgPT09IG5vcm1hbGl6ZShuKVxuICAgICAgICAgICAgOiB0aGlzLiNtYXRjaE5hbWUgPT09IG5vcm1hbGl6ZU5vY2FzZShuKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBQYXRoIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHRoZSB0YXJnZXQgb2YgYSBzeW1ib2xpYyBsaW5rLlxuICAgICAqXG4gICAgICogSWYgdGhlIFBhdGggaXMgbm90IGEgc3ltYm9saWMgbGluaywgb3IgaWYgdGhlIHJlYWRsaW5rIGNhbGwgZmFpbHMgZm9yIGFueVxuICAgICAqIHJlYXNvbiwgYHVuZGVmaW5lZGAgaXMgcmV0dXJuZWQuXG4gICAgICpcbiAgICAgKiBSZXN1bHQgaXMgY2FjaGVkLCBhbmQgdGh1cyBtYXkgYmUgb3V0ZGF0ZWQgaWYgdGhlIGZpbGVzeXN0ZW0gaXMgbXV0YXRlZC5cbiAgICAgKi9cbiAgICBhc3luYyByZWFkbGluaygpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy4jbGlua1RhcmdldDtcbiAgICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuY2FuUmVhZGxpbmsoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgLy8gYWxyZWFkeSBjb3ZlcmVkIGJ5IHRoZSBjYW5SZWFkbGluayB0ZXN0LCBoZXJlIGZvciB0cyBncnVtcGxlc1xuICAgICAgICBpZiAoIXRoaXMucGFyZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZWFkID0gYXdhaXQgdGhpcy4jZnMucHJvbWlzZXMucmVhZGxpbmsodGhpcy5mdWxscGF0aCgpKTtcbiAgICAgICAgICAgIGNvbnN0IGxpbmtUYXJnZXQgPSAoYXdhaXQgdGhpcy5wYXJlbnQucmVhbHBhdGgoKSk/LnJlc29sdmUocmVhZCk7XG4gICAgICAgICAgICBpZiAobGlua1RhcmdldCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAodGhpcy4jbGlua1RhcmdldCA9IGxpbmtUYXJnZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcikge1xuICAgICAgICAgICAgdGhpcy4jcmVhZGxpbmtGYWlsKGVyLmNvZGUpO1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBTeW5jaHJvbm91cyB7QGxpbmsgUGF0aEJhc2UucmVhZGxpbmt9XG4gICAgICovXG4gICAgcmVhZGxpbmtTeW5jKCkge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLiNsaW5rVGFyZ2V0O1xuICAgICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5jYW5SZWFkbGluaygpKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICAvLyBhbHJlYWR5IGNvdmVyZWQgYnkgdGhlIGNhblJlYWRsaW5rIHRlc3QsIGhlcmUgZm9yIHRzIGdydW1wbGVzXG4gICAgICAgIGlmICghdGhpcy5wYXJlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlYWQgPSB0aGlzLiNmcy5yZWFkbGlua1N5bmModGhpcy5mdWxscGF0aCgpKTtcbiAgICAgICAgICAgIGNvbnN0IGxpbmtUYXJnZXQgPSB0aGlzLnBhcmVudC5yZWFscGF0aFN5bmMoKT8ucmVzb2x2ZShyZWFkKTtcbiAgICAgICAgICAgIGlmIChsaW5rVGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICh0aGlzLiNsaW5rVGFyZ2V0ID0gbGlua1RhcmdldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVyKSB7XG4gICAgICAgICAgICB0aGlzLiNyZWFkbGlua0ZhaWwoZXIuY29kZSk7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuICAgICNyZWFkZGlyU3VjY2VzcyhjaGlsZHJlbikge1xuICAgICAgICAvLyBzdWNjZWVkZWQsIG1hcmsgcmVhZGRpciBjYWxsZWQgYml0XG4gICAgICAgIHRoaXMuI3R5cGUgfD0gUkVBRERJUl9DQUxMRUQ7XG4gICAgICAgIC8vIG1hcmsgYWxsIHJlbWFpbmluZyBwcm92aXNpb25hbCBjaGlsZHJlbiBhcyBFTk9FTlRcbiAgICAgICAgZm9yIChsZXQgcCA9IGNoaWxkcmVuLnByb3Zpc2lvbmFsOyBwIDwgY2hpbGRyZW4ubGVuZ3RoOyBwKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBjaGlsZHJlbltwXTtcbiAgICAgICAgICAgIGlmIChjKVxuICAgICAgICAgICAgICAgIGMuI21hcmtFTk9FTlQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAjbWFya0VOT0VOVCgpIHtcbiAgICAgICAgLy8gbWFyayBhcyBVTktOT1dOIGFuZCBFTk9FTlRcbiAgICAgICAgaWYgKHRoaXMuI3R5cGUgJiBFTk9FTlQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuI3R5cGUgPSAodGhpcy4jdHlwZSB8IEVOT0VOVCkgJiBJRk1UX1VOS05PV047XG4gICAgICAgIHRoaXMuI21hcmtDaGlsZHJlbkVOT0VOVCgpO1xuICAgIH1cbiAgICAjbWFya0NoaWxkcmVuRU5PRU5UKCkge1xuICAgICAgICAvLyBhbGwgY2hpbGRyZW4gYXJlIHByb3Zpc2lvbmFsIGFuZCBkbyBub3QgZXhpc3RcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuKCk7XG4gICAgICAgIGNoaWxkcmVuLnByb3Zpc2lvbmFsID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBwIG9mIGNoaWxkcmVuKSB7XG4gICAgICAgICAgICBwLiNtYXJrRU5PRU5UKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgI21hcmtFTk9SRUFMUEFUSCgpIHtcbiAgICAgICAgdGhpcy4jdHlwZSB8PSBFTk9SRUFMUEFUSDtcbiAgICAgICAgdGhpcy4jbWFya0VOT1RESVIoKTtcbiAgICB9XG4gICAgLy8gc2F2ZSB0aGUgaW5mb3JtYXRpb24gd2hlbiB3ZSBrbm93IHRoZSBlbnRyeSBpcyBub3QgYSBkaXJcbiAgICAjbWFya0VOT1RESVIoKSB7XG4gICAgICAgIC8vIGVudHJ5IGlzIG5vdCBhIGRpcmVjdG9yeSwgc28gYW55IGNoaWxkcmVuIGNhbid0IGV4aXN0LlxuICAgICAgICAvLyB0aGlzICpzaG91bGQqIGJlIGltcG9zc2libGUsIHNpbmNlIGFueSBjaGlsZHJlbiBjcmVhdGVkXG4gICAgICAgIC8vIGFmdGVyIGl0J3MgYmVlbiBtYXJrZWQgRU5PVERJUiBzaG91bGQgYmUgbWFya2VkIEVOT0VOVCxcbiAgICAgICAgLy8gc28gaXQgd29uJ3QgZXZlbiBnZXQgdG8gdGhpcyBwb2ludC5cbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIGlmICh0aGlzLiN0eXBlICYgRU5PVERJUilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgbGV0IHQgPSB0aGlzLiN0eXBlO1xuICAgICAgICAvLyB0aGlzIGNvdWxkIGhhcHBlbiBpZiB3ZSBzdGF0IGEgZGlyLCB0aGVuIGRlbGV0ZSBpdCxcbiAgICAgICAgLy8gdGhlbiB0cnkgdG8gcmVhZCBpdCBvciBvbmUgb2YgaXRzIGNoaWxkcmVuLlxuICAgICAgICBpZiAoKHQgJiBJRk1UKSA9PT0gSUZESVIpXG4gICAgICAgICAgICB0ICY9IElGTVRfVU5LTk9XTjtcbiAgICAgICAgdGhpcy4jdHlwZSA9IHQgfCBFTk9URElSO1xuICAgICAgICB0aGlzLiNtYXJrQ2hpbGRyZW5FTk9FTlQoKTtcbiAgICB9XG4gICAgI3JlYWRkaXJGYWlsKGNvZGUgPSAnJykge1xuICAgICAgICAvLyBtYXJrRU5PVERJUiBhbmQgbWFya0VOT0VOVCBhbHNvIHNldCBwcm92aXNpb25hbD0wXG4gICAgICAgIGlmIChjb2RlID09PSAnRU5PVERJUicgfHwgY29kZSA9PT0gJ0VQRVJNJykge1xuICAgICAgICAgICAgdGhpcy4jbWFya0VOT1RESVIoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICAgICAgdGhpcy4jbWFya0VOT0VOVCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbigpLnByb3Zpc2lvbmFsID0gMDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAjbHN0YXRGYWlsKGNvZGUgPSAnJykge1xuICAgICAgICAvLyBXaW5kb3dzIGp1c3QgcmFpc2VzIEVOT0VOVCBpbiB0aGlzIGNhc2UsIGRpc2FibGUgZm9yIHdpbiBDSVxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgaWYgKGNvZGUgPT09ICdFTk9URElSJykge1xuICAgICAgICAgICAgLy8gYWxyZWFkeSBrbm93IGl0IGhhcyBhIHBhcmVudCBieSB0aGlzIHBvaW50XG4gICAgICAgICAgICBjb25zdCBwID0gdGhpcy5wYXJlbnQ7XG4gICAgICAgICAgICBwLiNtYXJrRU5PVERJUigpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgdGhpcy4jbWFya0VOT0VOVCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgICNyZWFkbGlua0ZhaWwoY29kZSA9ICcnKSB7XG4gICAgICAgIGxldCB0ZXIgPSB0aGlzLiN0eXBlO1xuICAgICAgICB0ZXIgfD0gRU5PUkVBRExJTks7XG4gICAgICAgIGlmIChjb2RlID09PSAnRU5PRU5UJylcbiAgICAgICAgICAgIHRlciB8PSBFTk9FTlQ7XG4gICAgICAgIC8vIHdpbmRvd3MgZ2V0cyBhIHdlaXJkIGVycm9yIHdoZW4geW91IHRyeSB0byByZWFkbGluayBhIGZpbGVcbiAgICAgICAgaWYgKGNvZGUgPT09ICdFSU5WQUwnIHx8IGNvZGUgPT09ICdVTktOT1dOJykge1xuICAgICAgICAgICAgLy8gZXhpc3RzLCBidXQgbm90IGEgc3ltbGluaywgd2UgZG9uJ3Qga25vdyBXSEFUIGl0IGlzLCBzbyByZW1vdmVcbiAgICAgICAgICAgIC8vIGFsbCBJRk1UIGJpdHMuXG4gICAgICAgICAgICB0ZXIgJj0gSUZNVF9VTktOT1dOO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuI3R5cGUgPSB0ZXI7XG4gICAgICAgIC8vIHdpbmRvd3MganVzdCBnZXRzIEVOT0VOVCBpbiB0aGlzIGNhc2UuICBXZSBkbyBjb3ZlciB0aGUgY2FzZSxcbiAgICAgICAgLy8ganVzdCBkaXNhYmxlZCBiZWNhdXNlIGl0J3MgaW1wb3NzaWJsZSBvbiBXaW5kb3dzIENJXG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICBpZiAoY29kZSA9PT0gJ0VOT1RESVInICYmIHRoaXMucGFyZW50KSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudC4jbWFya0VOT1RESVIoKTtcbiAgICAgICAgfVxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgIH1cbiAgICAjcmVhZGRpckFkZENoaWxkKGUsIGMpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLiNyZWFkZGlyTWF5YmVQcm9tb3RlQ2hpbGQoZSwgYykgfHxcbiAgICAgICAgICAgIHRoaXMuI3JlYWRkaXJBZGROZXdDaGlsZChlLCBjKSk7XG4gICAgfVxuICAgICNyZWFkZGlyQWRkTmV3Q2hpbGQoZSwgYykge1xuICAgICAgICAvLyBhbGxvYyBuZXcgZW50cnkgYXQgaGVhZCwgc28gaXQncyBuZXZlciBwcm92aXNpb25hbFxuICAgICAgICBjb25zdCB0eXBlID0gZW50VG9UeXBlKGUpO1xuICAgICAgICBjb25zdCBjaGlsZCA9IHRoaXMubmV3Q2hpbGQoZS5uYW1lLCB0eXBlLCB7IHBhcmVudDogdGhpcyB9KTtcbiAgICAgICAgY29uc3QgaWZtdCA9IGNoaWxkLiN0eXBlICYgSUZNVDtcbiAgICAgICAgaWYgKGlmbXQgIT09IElGRElSICYmIGlmbXQgIT09IElGTE5LICYmIGlmbXQgIT09IFVOS05PV04pIHtcbiAgICAgICAgICAgIGNoaWxkLiN0eXBlIHw9IEVOT1RESVI7XG4gICAgICAgIH1cbiAgICAgICAgYy51bnNoaWZ0KGNoaWxkKTtcbiAgICAgICAgYy5wcm92aXNpb25hbCsrO1xuICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgfVxuICAgICNyZWFkZGlyTWF5YmVQcm9tb3RlQ2hpbGQoZSwgYykge1xuICAgICAgICBmb3IgKGxldCBwID0gYy5wcm92aXNpb25hbDsgcCA8IGMubGVuZ3RoOyBwKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHBjaGlsZCA9IGNbcF07XG4gICAgICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5ub2Nhc2UgPyBub3JtYWxpemVOb2Nhc2UoZS5uYW1lKSA6IG5vcm1hbGl6ZShlLm5hbWUpO1xuICAgICAgICAgICAgaWYgKG5hbWUgIT09IHBjaGlsZC4jbWF0Y2hOYW1lKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy4jcmVhZGRpclByb21vdGVDaGlsZChlLCBwY2hpbGQsIHAsIGMpO1xuICAgICAgICB9XG4gICAgfVxuICAgICNyZWFkZGlyUHJvbW90ZUNoaWxkKGUsIHAsIGluZGV4LCBjKSB7XG4gICAgICAgIGNvbnN0IHYgPSBwLm5hbWU7XG4gICAgICAgIC8vIHJldGFpbiBhbnkgb3RoZXIgZmxhZ3MsIGJ1dCBzZXQgaWZtdCBmcm9tIGRpcmVudFxuICAgICAgICBwLiN0eXBlID0gKHAuI3R5cGUgJiBJRk1UX1VOS05PV04pIHwgZW50VG9UeXBlKGUpO1xuICAgICAgICAvLyBjYXNlIHNlbnNpdGl2aXR5IGZpeGluZyB3aGVuIHdlIGxlYXJuIHRoZSB0cnVlIG5hbWUuXG4gICAgICAgIGlmICh2ICE9PSBlLm5hbWUpXG4gICAgICAgICAgICBwLm5hbWUgPSBlLm5hbWU7XG4gICAgICAgIC8vIGp1c3QgYWR2YW5jZSBwcm92aXNpb25hbCBpbmRleCAocG90ZW50aWFsbHkgb2ZmIHRoZSBsaXN0KSxcbiAgICAgICAgLy8gb3RoZXJ3aXNlIHdlIGhhdmUgdG8gc3BsaWNlL3BvcCBpdCBvdXQgYW5kIHJlLWluc2VydCBhdCBoZWFkXG4gICAgICAgIGlmIChpbmRleCAhPT0gYy5wcm92aXNpb25hbCkge1xuICAgICAgICAgICAgaWYgKGluZGV4ID09PSBjLmxlbmd0aCAtIDEpXG4gICAgICAgICAgICAgICAgYy5wb3AoKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBjLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICBjLnVuc2hpZnQocCk7XG4gICAgICAgIH1cbiAgICAgICAgYy5wcm92aXNpb25hbCsrO1xuICAgICAgICByZXR1cm4gcDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2FsbCBsc3RhdCgpIG9uIHRoaXMgUGF0aCwgYW5kIHVwZGF0ZSBhbGwga25vd24gaW5mb3JtYXRpb24gdGhhdCBjYW4gYmVcbiAgICAgKiBkZXRlcm1pbmVkLlxuICAgICAqXG4gICAgICogTm90ZSB0aGF0IHVubGlrZSBgZnMubHN0YXQoKWAsIHRoZSByZXR1cm5lZCB2YWx1ZSBkb2VzIG5vdCBjb250YWluIHNvbWVcbiAgICAgKiBpbmZvcm1hdGlvbiwgc3VjaCBhcyBgbW9kZWAsIGBkZXZgLCBgbmxpbmtgLCBhbmQgYGlub2AuICBJZiB0aGF0XG4gICAgICogaW5mb3JtYXRpb24gaXMgcmVxdWlyZWQsIHlvdSB3aWxsIG5lZWQgdG8gY2FsbCBgZnMubHN0YXRgIHlvdXJzZWxmLlxuICAgICAqXG4gICAgICogSWYgdGhlIFBhdGggcmVmZXJzIHRvIGEgbm9uZXhpc3RlbnQgZmlsZSwgb3IgaWYgdGhlIGxzdGF0IGNhbGwgZmFpbHMgZm9yXG4gICAgICogYW55IHJlYXNvbiwgYHVuZGVmaW5lZGAgaXMgcmV0dXJuZWQuICBPdGhlcndpc2UgdGhlIHVwZGF0ZWQgUGF0aCBvYmplY3QgaXNcbiAgICAgKiByZXR1cm5lZC5cbiAgICAgKlxuICAgICAqIFJlc3VsdHMgYXJlIGNhY2hlZCwgYW5kIHRodXMgbWF5IGJlIG91dCBvZiBkYXRlIGlmIHRoZSBmaWxlc3lzdGVtIGlzXG4gICAgICogbXV0YXRlZC5cbiAgICAgKi9cbiAgICBhc3luYyBsc3RhdCgpIHtcbiAgICAgICAgaWYgKCh0aGlzLiN0eXBlICYgRU5PRU5UKSA9PT0gMCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB0aGlzLiNhcHBseVN0YXQoYXdhaXQgdGhpcy4jZnMucHJvbWlzZXMubHN0YXQodGhpcy5mdWxscGF0aCgpKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiNsc3RhdEZhaWwoZXIuY29kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogc3luY2hyb25vdXMge0BsaW5rIFBhdGhCYXNlLmxzdGF0fVxuICAgICAqL1xuICAgIGxzdGF0U3luYygpIHtcbiAgICAgICAgaWYgKCh0aGlzLiN0eXBlICYgRU5PRU5UKSA9PT0gMCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB0aGlzLiNhcHBseVN0YXQodGhpcy4jZnMubHN0YXRTeW5jKHRoaXMuZnVsbHBhdGgoKSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jbHN0YXRGYWlsKGVyLmNvZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgICNhcHBseVN0YXQoc3QpIHtcbiAgICAgICAgY29uc3QgeyBhdGltZSwgYXRpbWVNcywgYmlydGh0aW1lLCBiaXJ0aHRpbWVNcywgYmxrc2l6ZSwgYmxvY2tzLCBjdGltZSwgY3RpbWVNcywgZGV2LCBnaWQsIGlubywgbW9kZSwgbXRpbWUsIG10aW1lTXMsIG5saW5rLCByZGV2LCBzaXplLCB1aWQsIH0gPSBzdDtcbiAgICAgICAgdGhpcy4jYXRpbWUgPSBhdGltZTtcbiAgICAgICAgdGhpcy4jYXRpbWVNcyA9IGF0aW1lTXM7XG4gICAgICAgIHRoaXMuI2JpcnRodGltZSA9IGJpcnRodGltZTtcbiAgICAgICAgdGhpcy4jYmlydGh0aW1lTXMgPSBiaXJ0aHRpbWVNcztcbiAgICAgICAgdGhpcy4jYmxrc2l6ZSA9IGJsa3NpemU7XG4gICAgICAgIHRoaXMuI2Jsb2NrcyA9IGJsb2NrcztcbiAgICAgICAgdGhpcy4jY3RpbWUgPSBjdGltZTtcbiAgICAgICAgdGhpcy4jY3RpbWVNcyA9IGN0aW1lTXM7XG4gICAgICAgIHRoaXMuI2RldiA9IGRldjtcbiAgICAgICAgdGhpcy4jZ2lkID0gZ2lkO1xuICAgICAgICB0aGlzLiNpbm8gPSBpbm87XG4gICAgICAgIHRoaXMuI21vZGUgPSBtb2RlO1xuICAgICAgICB0aGlzLiNtdGltZSA9IG10aW1lO1xuICAgICAgICB0aGlzLiNtdGltZU1zID0gbXRpbWVNcztcbiAgICAgICAgdGhpcy4jbmxpbmsgPSBubGluaztcbiAgICAgICAgdGhpcy4jcmRldiA9IHJkZXY7XG4gICAgICAgIHRoaXMuI3NpemUgPSBzaXplO1xuICAgICAgICB0aGlzLiN1aWQgPSB1aWQ7XG4gICAgICAgIGNvbnN0IGlmbXQgPSBlbnRUb1R5cGUoc3QpO1xuICAgICAgICAvLyByZXRhaW4gYW55IG90aGVyIGZsYWdzLCBidXQgc2V0IHRoZSBpZm10XG4gICAgICAgIHRoaXMuI3R5cGUgPSAodGhpcy4jdHlwZSAmIElGTVRfVU5LTk9XTikgfCBpZm10IHwgTFNUQVRfQ0FMTEVEO1xuICAgICAgICBpZiAoaWZtdCAhPT0gVU5LTk9XTiAmJiBpZm10ICE9PSBJRkRJUiAmJiBpZm10ICE9PSBJRkxOSykge1xuICAgICAgICAgICAgdGhpcy4jdHlwZSB8PSBFTk9URElSO1xuICAgICAgICB9XG4gICAgfVxuICAgICNvblJlYWRkaXJDQiA9IFtdO1xuICAgICNyZWFkZGlyQ0JJbkZsaWdodCA9IGZhbHNlO1xuICAgICNjYWxsT25SZWFkZGlyQ0IoY2hpbGRyZW4pIHtcbiAgICAgICAgdGhpcy4jcmVhZGRpckNCSW5GbGlnaHQgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgY2JzID0gdGhpcy4jb25SZWFkZGlyQ0Iuc2xpY2UoKTtcbiAgICAgICAgdGhpcy4jb25SZWFkZGlyQ0IubGVuZ3RoID0gMDtcbiAgICAgICAgY2JzLmZvckVhY2goY2IgPT4gY2IobnVsbCwgY2hpbGRyZW4pKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3RhbmRhcmQgbm9kZS1zdHlsZSBjYWxsYmFjayBpbnRlcmZhY2UgdG8gZ2V0IGxpc3Qgb2YgZGlyZWN0b3J5IGVudHJpZXMuXG4gICAgICpcbiAgICAgKiBJZiB0aGUgUGF0aCBjYW5ub3Qgb3IgZG9lcyBub3QgY29udGFpbiBhbnkgY2hpbGRyZW4sIHRoZW4gYW4gZW1wdHkgYXJyYXlcbiAgICAgKiBpcyByZXR1cm5lZC5cbiAgICAgKlxuICAgICAqIFJlc3VsdHMgYXJlIGNhY2hlZCwgYW5kIHRodXMgbWF5IGJlIG91dCBvZiBkYXRlIGlmIHRoZSBmaWxlc3lzdGVtIGlzXG4gICAgICogbXV0YXRlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjYiBUaGUgY2FsbGJhY2sgY2FsbGVkIHdpdGggKGVyLCBlbnRyaWVzKS4gIE5vdGUgdGhhdCB0aGUgYGVyYFxuICAgICAqIHBhcmFtIGlzIHNvbWV3aGF0IGV4dHJhbmVvdXMsIGFzIGFsbCByZWFkZGlyKCkgZXJyb3JzIGFyZSBoYW5kbGVkIGFuZFxuICAgICAqIHNpbXBseSByZXN1bHQgaW4gYW4gZW1wdHkgc2V0IG9mIGVudHJpZXMgYmVpbmcgcmV0dXJuZWQuXG4gICAgICogQHBhcmFtIGFsbG93WmFsZ28gQm9vbGVhbiBpbmRpY2F0aW5nIHRoYXQgaW1tZWRpYXRlbHkga25vd24gcmVzdWx0cyBzaG91bGRcbiAgICAgKiAqbm90KiBiZSBkZWZlcnJlZCB3aXRoIGBxdWV1ZU1pY3JvdGFza2AuIERlZmF1bHRzIHRvIGBmYWxzZWAuIFJlbGVhc2VcbiAgICAgKiB6YWxnbyBhdCB5b3VyIHBlcmlsLCB0aGUgZGFyayBwb255IGxvcmQgaXMgZGV2aW91cyBhbmQgdW5mb3JnaXZpbmcuXG4gICAgICovXG4gICAgcmVhZGRpckNCKGNiLCBhbGxvd1phbGdvID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNhblJlYWRkaXIoKSkge1xuICAgICAgICAgICAgaWYgKGFsbG93WmFsZ28pXG4gICAgICAgICAgICAgICAgY2IobnVsbCwgW10pO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGNiKG51bGwsIFtdKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuKCk7XG4gICAgICAgIGlmICh0aGlzLmNhbGxlZFJlYWRkaXIoKSkge1xuICAgICAgICAgICAgY29uc3QgYyA9IGNoaWxkcmVuLnNsaWNlKDAsIGNoaWxkcmVuLnByb3Zpc2lvbmFsKTtcbiAgICAgICAgICAgIGlmIChhbGxvd1phbGdvKVxuICAgICAgICAgICAgICAgIGNiKG51bGwsIGMpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGNiKG51bGwsIGMpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHphbGdvIGF0IHRoaXMgcG9pbnQuXG4gICAgICAgIHRoaXMuI29uUmVhZGRpckNCLnB1c2goY2IpO1xuICAgICAgICBpZiAodGhpcy4jcmVhZGRpckNCSW5GbGlnaHQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiNyZWFkZGlyQ0JJbkZsaWdodCA9IHRydWU7XG4gICAgICAgIC8vIGVsc2UgcmVhZCB0aGUgZGlyZWN0b3J5LCBmaWxsIHVwIGNoaWxkcmVuXG4gICAgICAgIC8vIGRlLXByb3Zpc2lvbmFsaXplIGFueSBwcm92aXNpb25hbCBjaGlsZHJlbi5cbiAgICAgICAgY29uc3QgZnVsbHBhdGggPSB0aGlzLmZ1bGxwYXRoKCk7XG4gICAgICAgIHRoaXMuI2ZzLnJlYWRkaXIoZnVsbHBhdGgsIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9LCAoZXIsIGVudHJpZXMpID0+IHtcbiAgICAgICAgICAgIGlmIChlcikge1xuICAgICAgICAgICAgICAgIHRoaXMuI3JlYWRkaXJGYWlsKGVyLmNvZGUpO1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuLnByb3Zpc2lvbmFsID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGlmIHdlIGRpZG4ndCBnZXQgYW4gZXJyb3IsIHdlIGFsd2F5cyBnZXQgZW50cmllcy5cbiAgICAgICAgICAgICAgICAvL0B0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGUgb2YgZW50cmllcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiNyZWFkZGlyQWRkQ2hpbGQoZSwgY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLiNyZWFkZGlyU3VjY2VzcyhjaGlsZHJlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLiNjYWxsT25SZWFkZGlyQ0IoY2hpbGRyZW4uc2xpY2UoMCwgY2hpbGRyZW4ucHJvdmlzaW9uYWwpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgICNhc3luY1JlYWRkaXJJbkZsaWdodDtcbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYW4gYXJyYXkgb2Yga25vd24gY2hpbGQgZW50cmllcy5cbiAgICAgKlxuICAgICAqIElmIHRoZSBQYXRoIGNhbm5vdCBvciBkb2VzIG5vdCBjb250YWluIGFueSBjaGlsZHJlbiwgdGhlbiBhbiBlbXB0eSBhcnJheVxuICAgICAqIGlzIHJldHVybmVkLlxuICAgICAqXG4gICAgICogUmVzdWx0cyBhcmUgY2FjaGVkLCBhbmQgdGh1cyBtYXkgYmUgb3V0IG9mIGRhdGUgaWYgdGhlIGZpbGVzeXN0ZW0gaXNcbiAgICAgKiBtdXRhdGVkLlxuICAgICAqL1xuICAgIGFzeW5jIHJlYWRkaXIoKSB7XG4gICAgICAgIGlmICghdGhpcy5jYW5SZWFkZGlyKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW4oKTtcbiAgICAgICAgaWYgKHRoaXMuY2FsbGVkUmVhZGRpcigpKSB7XG4gICAgICAgICAgICByZXR1cm4gY2hpbGRyZW4uc2xpY2UoMCwgY2hpbGRyZW4ucHJvdmlzaW9uYWwpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGVsc2UgcmVhZCB0aGUgZGlyZWN0b3J5LCBmaWxsIHVwIGNoaWxkcmVuXG4gICAgICAgIC8vIGRlLXByb3Zpc2lvbmFsaXplIGFueSBwcm92aXNpb25hbCBjaGlsZHJlbi5cbiAgICAgICAgY29uc3QgZnVsbHBhdGggPSB0aGlzLmZ1bGxwYXRoKCk7XG4gICAgICAgIGlmICh0aGlzLiNhc3luY1JlYWRkaXJJbkZsaWdodCkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy4jYXN5bmNSZWFkZGlySW5GbGlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgICAgIGxldCByZXNvbHZlID0gKCkgPT4geyB9O1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgICAgIHRoaXMuI2FzeW5jUmVhZGRpckluRmxpZ2h0ID0gbmV3IFByb21pc2UocmVzID0+IChyZXNvbHZlID0gcmVzKSk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZSBvZiBhd2FpdCB0aGlzLiNmcy5wcm9taXNlcy5yZWFkZGlyKGZ1bGxwYXRoLCB7XG4gICAgICAgICAgICAgICAgICAgIHdpdGhGaWxlVHlwZXM6IHRydWUsXG4gICAgICAgICAgICAgICAgfSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jcmVhZGRpckFkZENoaWxkKGUsIGNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy4jcmVhZGRpclN1Y2Nlc3MoY2hpbGRyZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jcmVhZGRpckZhaWwoZXIuY29kZSk7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW4ucHJvdmlzaW9uYWwgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy4jYXN5bmNSZWFkZGlySW5GbGlnaHQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuLnNsaWNlKDAsIGNoaWxkcmVuLnByb3Zpc2lvbmFsKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogc3luY2hyb25vdXMge0BsaW5rIFBhdGhCYXNlLnJlYWRkaXJ9XG4gICAgICovXG4gICAgcmVhZGRpclN5bmMoKSB7XG4gICAgICAgIGlmICghdGhpcy5jYW5SZWFkZGlyKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW4oKTtcbiAgICAgICAgaWYgKHRoaXMuY2FsbGVkUmVhZGRpcigpKSB7XG4gICAgICAgICAgICByZXR1cm4gY2hpbGRyZW4uc2xpY2UoMCwgY2hpbGRyZW4ucHJvdmlzaW9uYWwpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGVsc2UgcmVhZCB0aGUgZGlyZWN0b3J5LCBmaWxsIHVwIGNoaWxkcmVuXG4gICAgICAgIC8vIGRlLXByb3Zpc2lvbmFsaXplIGFueSBwcm92aXNpb25hbCBjaGlsZHJlbi5cbiAgICAgICAgY29uc3QgZnVsbHBhdGggPSB0aGlzLmZ1bGxwYXRoKCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGUgb2YgdGhpcy4jZnMucmVhZGRpclN5bmMoZnVsbHBhdGgsIHtcbiAgICAgICAgICAgICAgICB3aXRoRmlsZVR5cGVzOiB0cnVlLFxuICAgICAgICAgICAgfSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiNyZWFkZGlyQWRkQ2hpbGQoZSwgY2hpbGRyZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy4jcmVhZGRpclN1Y2Nlc3MoY2hpbGRyZW4pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcikge1xuICAgICAgICAgICAgdGhpcy4jcmVhZGRpckZhaWwoZXIuY29kZSk7XG4gICAgICAgICAgICBjaGlsZHJlbi5wcm92aXNpb25hbCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuLnNsaWNlKDAsIGNoaWxkcmVuLnByb3Zpc2lvbmFsKTtcbiAgICB9XG4gICAgY2FuUmVhZGRpcigpIHtcbiAgICAgICAgaWYgKHRoaXMuI3R5cGUgJiBFTk9DSElMRClcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgY29uc3QgaWZtdCA9IElGTVQgJiB0aGlzLiN0eXBlO1xuICAgICAgICAvLyB3ZSBhbHdheXMgc2V0IEVOT1RESVIgd2hlbiBzZXR0aW5nIElGTVQsIHNvIHNob3VsZCBiZSBpbXBvc3NpYmxlXG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICBpZiAoIShpZm10ID09PSBVTktOT1dOIHx8IGlmbXQgPT09IElGRElSIHx8IGlmbXQgPT09IElGTE5LKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBzaG91bGRXYWxrKGRpcnMsIHdhbGtGaWx0ZXIpIHtcbiAgICAgICAgcmV0dXJuICgodGhpcy4jdHlwZSAmIElGRElSKSA9PT0gSUZESVIgJiZcbiAgICAgICAgICAgICEodGhpcy4jdHlwZSAmIEVOT0NISUxEKSAmJlxuICAgICAgICAgICAgIWRpcnMuaGFzKHRoaXMpICYmXG4gICAgICAgICAgICAoIXdhbGtGaWx0ZXIgfHwgd2Fsa0ZpbHRlcih0aGlzKSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIFBhdGggb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gcGF0aCBhcyByZXNvbHZlZFxuICAgICAqIGJ5IHJlYWxwYXRoKDMpLlxuICAgICAqXG4gICAgICogSWYgdGhlIHJlYWxwYXRoIGNhbGwgZmFpbHMgZm9yIGFueSByZWFzb24sIGB1bmRlZmluZWRgIGlzIHJldHVybmVkLlxuICAgICAqXG4gICAgICogUmVzdWx0IGlzIGNhY2hlZCwgYW5kIHRodXMgbWF5IGJlIG91dGRhdGVkIGlmIHRoZSBmaWxlc3lzdGVtIGlzIG11dGF0ZWQuXG4gICAgICogT24gc3VjY2VzcywgcmV0dXJucyBhIFBhdGggb2JqZWN0LlxuICAgICAqL1xuICAgIGFzeW5jIHJlYWxwYXRoKCkge1xuICAgICAgICBpZiAodGhpcy4jcmVhbHBhdGgpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy4jcmVhbHBhdGg7XG4gICAgICAgIGlmICgoRU5PUkVBTFBBVEggfCBFTk9SRUFETElOSyB8IEVOT0VOVCkgJiB0aGlzLiN0eXBlKVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJwID0gYXdhaXQgdGhpcy4jZnMucHJvbWlzZXMucmVhbHBhdGgodGhpcy5mdWxscGF0aCgpKTtcbiAgICAgICAgICAgIHJldHVybiAodGhpcy4jcmVhbHBhdGggPSB0aGlzLnJlc29sdmUocnApKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoXykge1xuICAgICAgICAgICAgdGhpcy4jbWFya0VOT1JFQUxQQVRIKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogU3luY2hyb25vdXMge0BsaW5rIHJlYWxwYXRofVxuICAgICAqL1xuICAgIHJlYWxwYXRoU3luYygpIHtcbiAgICAgICAgaWYgKHRoaXMuI3JlYWxwYXRoKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuI3JlYWxwYXRoO1xuICAgICAgICBpZiAoKEVOT1JFQUxQQVRIIHwgRU5PUkVBRExJTksgfCBFTk9FTlQpICYgdGhpcy4jdHlwZSlcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBycCA9IHRoaXMuI2ZzLnJlYWxwYXRoU3luYyh0aGlzLmZ1bGxwYXRoKCkpO1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLiNyZWFscGF0aCA9IHRoaXMucmVzb2x2ZShycCkpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChfKSB7XG4gICAgICAgICAgICB0aGlzLiNtYXJrRU5PUkVBTFBBVEgoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBtZXRob2QgdG8gbWFyayB0aGlzIFBhdGggb2JqZWN0IGFzIHRoZSBzY3VycnkgY3dkLFxuICAgICAqIGNhbGxlZCBieSB7QGxpbmsgUGF0aFNjdXJyeSNjaGRpcn1cbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIFtzZXRBc0N3ZF0ob2xkQ3dkKSB7XG4gICAgICAgIGlmIChvbGRDd2QgPT09IHRoaXMpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIG9sZEN3ZC5pc0NXRCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzQ1dEID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgY2hhbmdlZCA9IG5ldyBTZXQoW10pO1xuICAgICAgICBsZXQgcnAgPSBbXTtcbiAgICAgICAgbGV0IHAgPSB0aGlzO1xuICAgICAgICB3aGlsZSAocCAmJiBwLnBhcmVudCkge1xuICAgICAgICAgICAgY2hhbmdlZC5hZGQocCk7XG4gICAgICAgICAgICBwLiNyZWxhdGl2ZSA9IHJwLmpvaW4odGhpcy5zZXApO1xuICAgICAgICAgICAgcC4jcmVsYXRpdmVQb3NpeCA9IHJwLmpvaW4oJy8nKTtcbiAgICAgICAgICAgIHAgPSBwLnBhcmVudDtcbiAgICAgICAgICAgIHJwLnB1c2goJy4uJyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbm93IHVuLW1lbW9pemUgcGFyZW50cyBvZiBvbGQgY3dkXG4gICAgICAgIHAgPSBvbGRDd2Q7XG4gICAgICAgIHdoaWxlIChwICYmIHAucGFyZW50ICYmICFjaGFuZ2VkLmhhcyhwKSkge1xuICAgICAgICAgICAgcC4jcmVsYXRpdmUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBwLiNyZWxhdGl2ZVBvc2l4ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgcCA9IHAucGFyZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5QYXRoQmFzZSA9IFBhdGhCYXNlO1xuLyoqXG4gKiBQYXRoIGNsYXNzIHVzZWQgb24gd2luMzIgc3lzdGVtc1xuICpcbiAqIFVzZXMgYCdcXFxcJ2AgYXMgdGhlIHBhdGggc2VwYXJhdG9yIGZvciByZXR1cm5lZCBwYXRocywgZWl0aGVyIGAnXFxcXCdgIG9yIGAnLydgXG4gKiBhcyB0aGUgcGF0aCBzZXBhcmF0b3IgZm9yIHBhcnNpbmcgcGF0aHMuXG4gKi9cbmNsYXNzIFBhdGhXaW4zMiBleHRlbmRzIFBhdGhCYXNlIHtcbiAgICAvKipcbiAgICAgKiBTZXBhcmF0b3IgZm9yIGdlbmVyYXRpbmcgcGF0aCBzdHJpbmdzLlxuICAgICAqL1xuICAgIHNlcCA9ICdcXFxcJztcbiAgICAvKipcbiAgICAgKiBTZXBhcmF0b3IgZm9yIHBhcnNpbmcgcGF0aCBzdHJpbmdzLlxuICAgICAqL1xuICAgIHNwbGl0U2VwID0gZWl0aGVyU2VwO1xuICAgIC8qKlxuICAgICAqIERvIG5vdCBjcmVhdGUgbmV3IFBhdGggb2JqZWN0cyBkaXJlY3RseS4gIFRoZXkgc2hvdWxkIGFsd2F5cyBiZSBhY2Nlc3NlZFxuICAgICAqIHZpYSB0aGUgUGF0aFNjdXJyeSBjbGFzcyBvciBvdGhlciBtZXRob2RzIG9uIHRoZSBQYXRoIGNsYXNzLlxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgY29uc3RydWN0b3IobmFtZSwgdHlwZSA9IFVOS05PV04sIHJvb3QsIHJvb3RzLCBub2Nhc2UsIGNoaWxkcmVuLCBvcHRzKSB7XG4gICAgICAgIHN1cGVyKG5hbWUsIHR5cGUsIHJvb3QsIHJvb3RzLCBub2Nhc2UsIGNoaWxkcmVuLCBvcHRzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgbmV3Q2hpbGQobmFtZSwgdHlwZSA9IFVOS05PV04sIG9wdHMgPSB7fSkge1xuICAgICAgICByZXR1cm4gbmV3IFBhdGhXaW4zMihuYW1lLCB0eXBlLCB0aGlzLnJvb3QsIHRoaXMucm9vdHMsIHRoaXMubm9jYXNlLCB0aGlzLmNoaWxkcmVuQ2FjaGUoKSwgb3B0cyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIGdldFJvb3RTdHJpbmcocGF0aCkge1xuICAgICAgICByZXR1cm4gbm9kZV9wYXRoXzEud2luMzIucGFyc2UocGF0aCkucm9vdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgZ2V0Um9vdChyb290UGF0aCkge1xuICAgICAgICByb290UGF0aCA9IHVuY1RvRHJpdmUocm9vdFBhdGgudG9VcHBlckNhc2UoKSk7XG4gICAgICAgIGlmIChyb290UGF0aCA9PT0gdGhpcy5yb290Lm5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJvb3Q7XG4gICAgICAgIH1cbiAgICAgICAgLy8gb2ssIG5vdCB0aGF0IG9uZSwgY2hlY2sgaWYgaXQgbWF0Y2hlcyBhbm90aGVyIHdlIGtub3cgYWJvdXRcbiAgICAgICAgZm9yIChjb25zdCBbY29tcGFyZSwgcm9vdF0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5yb290cykpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNhbWVSb290KHJvb3RQYXRoLCBjb21wYXJlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAodGhpcy5yb290c1tyb290UGF0aF0gPSByb290KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBvdGhlcndpc2UsIGhhdmUgdG8gY3JlYXRlIGEgbmV3IG9uZS5cbiAgICAgICAgcmV0dXJuICh0aGlzLnJvb3RzW3Jvb3RQYXRoXSA9IG5ldyBQYXRoU2N1cnJ5V2luMzIocm9vdFBhdGgsIHRoaXMpLnJvb3QpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBzYW1lUm9vdChyb290UGF0aCwgY29tcGFyZSA9IHRoaXMucm9vdC5uYW1lKSB7XG4gICAgICAgIC8vIHdpbmRvd3MgY2FuIChyYXJlbHkpIGhhdmUgY2FzZS1zZW5zaXRpdmUgZmlsZXN5c3RlbSwgYnV0XG4gICAgICAgIC8vIFVOQyBhbmQgZHJpdmUgbGV0dGVycyBhcmUgYWx3YXlzIGNhc2UtaW5zZW5zaXRpdmUsIGFuZCBjYW5vbmljYWxseVxuICAgICAgICAvLyByZXByZXNlbnRlZCB1cHBlcmNhc2UuXG4gICAgICAgIHJvb3RQYXRoID0gcm9vdFBhdGhcbiAgICAgICAgICAgIC50b1VwcGVyQ2FzZSgpXG4gICAgICAgICAgICAucmVwbGFjZSgvXFwvL2csICdcXFxcJylcbiAgICAgICAgICAgIC5yZXBsYWNlKHVuY0RyaXZlUmVnZXhwLCAnJDFcXFxcJyk7XG4gICAgICAgIHJldHVybiByb290UGF0aCA9PT0gY29tcGFyZTtcbiAgICB9XG59XG5leHBvcnRzLlBhdGhXaW4zMiA9IFBhdGhXaW4zMjtcbi8qKlxuICogUGF0aCBjbGFzcyB1c2VkIG9uIGFsbCBwb3NpeCBzeXN0ZW1zLlxuICpcbiAqIFVzZXMgYCcvJ2AgYXMgdGhlIHBhdGggc2VwYXJhdG9yLlxuICovXG5jbGFzcyBQYXRoUG9zaXggZXh0ZW5kcyBQYXRoQmFzZSB7XG4gICAgLyoqXG4gICAgICogc2VwYXJhdG9yIGZvciBwYXJzaW5nIHBhdGggc3RyaW5nc1xuICAgICAqL1xuICAgIHNwbGl0U2VwID0gJy8nO1xuICAgIC8qKlxuICAgICAqIHNlcGFyYXRvciBmb3IgZ2VuZXJhdGluZyBwYXRoIHN0cmluZ3NcbiAgICAgKi9cbiAgICBzZXAgPSAnLyc7XG4gICAgLyoqXG4gICAgICogRG8gbm90IGNyZWF0ZSBuZXcgUGF0aCBvYmplY3RzIGRpcmVjdGx5LiAgVGhleSBzaG91bGQgYWx3YXlzIGJlIGFjY2Vzc2VkXG4gICAgICogdmlhIHRoZSBQYXRoU2N1cnJ5IGNsYXNzIG9yIG90aGVyIG1ldGhvZHMgb24gdGhlIFBhdGggY2xhc3MuXG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihuYW1lLCB0eXBlID0gVU5LTk9XTiwgcm9vdCwgcm9vdHMsIG5vY2FzZSwgY2hpbGRyZW4sIG9wdHMpIHtcbiAgICAgICAgc3VwZXIobmFtZSwgdHlwZSwgcm9vdCwgcm9vdHMsIG5vY2FzZSwgY2hpbGRyZW4sIG9wdHMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBnZXRSb290U3RyaW5nKHBhdGgpIHtcbiAgICAgICAgcmV0dXJuIHBhdGguc3RhcnRzV2l0aCgnLycpID8gJy8nIDogJyc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIGdldFJvb3QoX3Jvb3RQYXRoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJvb3Q7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIG5ld0NoaWxkKG5hbWUsIHR5cGUgPSBVTktOT1dOLCBvcHRzID0ge30pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQYXRoUG9zaXgobmFtZSwgdHlwZSwgdGhpcy5yb290LCB0aGlzLnJvb3RzLCB0aGlzLm5vY2FzZSwgdGhpcy5jaGlsZHJlbkNhY2hlKCksIG9wdHMpO1xuICAgIH1cbn1cbmV4cG9ydHMuUGF0aFBvc2l4ID0gUGF0aFBvc2l4O1xuLyoqXG4gKiBUaGUgYmFzZSBjbGFzcyBmb3IgYWxsIFBhdGhTY3VycnkgY2xhc3NlcywgcHJvdmlkaW5nIHRoZSBpbnRlcmZhY2UgZm9yIHBhdGhcbiAqIHJlc29sdXRpb24gYW5kIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucy5cbiAqXG4gKiBUeXBpY2FsbHksIHlvdSBzaG91bGQgKm5vdCogaW5zdGFudGlhdGUgdGhpcyBjbGFzcyBkaXJlY3RseSwgYnV0IHJhdGhlciBvbmVcbiAqIG9mIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBjbGFzc2VzLCBvciB0aGUgZXhwb3J0ZWQge0BsaW5rIFBhdGhTY3Vycnl9IHdoaWNoXG4gKiBkZWZhdWx0cyB0byB0aGUgY3VycmVudCBwbGF0Zm9ybS5cbiAqL1xuY2xhc3MgUGF0aFNjdXJyeUJhc2Uge1xuICAgIC8qKlxuICAgICAqIFRoZSByb290IFBhdGggZW50cnkgZm9yIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IG9mIHRoaXMgU2N1cnJ5XG4gICAgICovXG4gICAgcm9vdDtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyaW5nIHBhdGggZm9yIHRoZSByb290IG9mIHRoaXMgU2N1cnJ5J3MgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeVxuICAgICAqL1xuICAgIHJvb3RQYXRoO1xuICAgIC8qKlxuICAgICAqIEEgY29sbGVjdGlvbiBvZiBhbGwgcm9vdHMgZW5jb3VudGVyZWQsIHJlZmVyZW5jZWQgYnkgcm9vdFBhdGhcbiAgICAgKi9cbiAgICByb290cztcbiAgICAvKipcbiAgICAgKiBUaGUgUGF0aCBlbnRyeSBjb3JyZXNwb25kaW5nIHRvIHRoaXMgUGF0aFNjdXJyeSdzIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuXG4gICAgICovXG4gICAgY3dkO1xuICAgICNyZXNvbHZlQ2FjaGU7XG4gICAgI3Jlc29sdmVQb3NpeENhY2hlO1xuICAgICNjaGlsZHJlbjtcbiAgICAvKipcbiAgICAgKiBQZXJmb3JtIHBhdGggY29tcGFyaXNvbnMgY2FzZS1pbnNlbnNpdGl2ZWx5LlxuICAgICAqXG4gICAgICogRGVmYXVsdHMgdHJ1ZSBvbiBEYXJ3aW4gYW5kIFdpbmRvd3Mgc3lzdGVtcywgZmFsc2UgZWxzZXdoZXJlLlxuICAgICAqL1xuICAgIG5vY2FzZTtcbiAgICAjZnM7XG4gICAgLyoqXG4gICAgICogVGhpcyBjbGFzcyBzaG91bGQgbm90IGJlIGluc3RhbnRpYXRlZCBkaXJlY3RseS5cbiAgICAgKlxuICAgICAqIFVzZSBQYXRoU2N1cnJ5V2luMzIsIFBhdGhTY3VycnlEYXJ3aW4sIFBhdGhTY3VycnlQb3NpeCwgb3IgUGF0aFNjdXJyeVxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoY3dkID0gcHJvY2Vzcy5jd2QoKSwgcGF0aEltcGwsIHNlcCwgeyBub2Nhc2UsIGNoaWxkcmVuQ2FjaGVTaXplID0gMTYgKiAxMDI0LCBmcyA9IGRlZmF1bHRGUywgfSA9IHt9KSB7XG4gICAgICAgIHRoaXMuI2ZzID0gZnNGcm9tT3B0aW9uKGZzKTtcbiAgICAgICAgaWYgKGN3ZCBpbnN0YW5jZW9mIFVSTCB8fCBjd2Quc3RhcnRzV2l0aCgnZmlsZTovLycpKSB7XG4gICAgICAgICAgICBjd2QgPSAoMCwgbm9kZV91cmxfMS5maWxlVVJMVG9QYXRoKShjd2QpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHJlc29sdmUgYW5kIHNwbGl0IHJvb3QsIGFuZCB0aGVuIGFkZCB0byB0aGUgc3RvcmUuXG4gICAgICAgIC8vIHRoaXMgaXMgdGhlIG9ubHkgdGltZSB3ZSBjYWxsIHBhdGgucmVzb2x2ZSgpXG4gICAgICAgIGNvbnN0IGN3ZFBhdGggPSBwYXRoSW1wbC5yZXNvbHZlKGN3ZCk7XG4gICAgICAgIHRoaXMucm9vdHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICB0aGlzLnJvb3RQYXRoID0gdGhpcy5wYXJzZVJvb3RQYXRoKGN3ZFBhdGgpO1xuICAgICAgICB0aGlzLiNyZXNvbHZlQ2FjaGUgPSBuZXcgUmVzb2x2ZUNhY2hlKCk7XG4gICAgICAgIHRoaXMuI3Jlc29sdmVQb3NpeENhY2hlID0gbmV3IFJlc29sdmVDYWNoZSgpO1xuICAgICAgICB0aGlzLiNjaGlsZHJlbiA9IG5ldyBDaGlsZHJlbkNhY2hlKGNoaWxkcmVuQ2FjaGVTaXplKTtcbiAgICAgICAgY29uc3Qgc3BsaXQgPSBjd2RQYXRoLnN1YnN0cmluZyh0aGlzLnJvb3RQYXRoLmxlbmd0aCkuc3BsaXQoc2VwKTtcbiAgICAgICAgLy8gcmVzb2x2ZSgnLycpIGxlYXZlcyAnJywgc3BsaXRzIHRvIFsnJ10sIHdlIGRvbid0IHdhbnQgdGhhdC5cbiAgICAgICAgaWYgKHNwbGl0Lmxlbmd0aCA9PT0gMSAmJiAhc3BsaXRbMF0pIHtcbiAgICAgICAgICAgIHNwbGl0LnBvcCgpO1xuICAgICAgICB9XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICBpZiAobm9jYXNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ211c3QgcHJvdmlkZSBub2Nhc2Ugc2V0dGluZyB0byBQYXRoU2N1cnJ5QmFzZSBjdG9yJyk7XG4gICAgICAgIH1cbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgdGhpcy5ub2Nhc2UgPSBub2Nhc2U7XG4gICAgICAgIHRoaXMucm9vdCA9IHRoaXMubmV3Um9vdCh0aGlzLiNmcyk7XG4gICAgICAgIHRoaXMucm9vdHNbdGhpcy5yb290UGF0aF0gPSB0aGlzLnJvb3Q7XG4gICAgICAgIGxldCBwcmV2ID0gdGhpcy5yb290O1xuICAgICAgICBsZXQgbGVuID0gc3BsaXQubGVuZ3RoIC0gMTtcbiAgICAgICAgY29uc3Qgam9pblNlcCA9IHBhdGhJbXBsLnNlcDtcbiAgICAgICAgbGV0IGFicyA9IHRoaXMucm9vdFBhdGg7XG4gICAgICAgIGxldCBzYXdGaXJzdCA9IGZhbHNlO1xuICAgICAgICBmb3IgKGNvbnN0IHBhcnQgb2Ygc3BsaXQpIHtcbiAgICAgICAgICAgIGNvbnN0IGwgPSBsZW4tLTtcbiAgICAgICAgICAgIHByZXYgPSBwcmV2LmNoaWxkKHBhcnQsIHtcbiAgICAgICAgICAgICAgICByZWxhdGl2ZTogbmV3IEFycmF5KGwpLmZpbGwoJy4uJykuam9pbihqb2luU2VwKSxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBvc2l4OiBuZXcgQXJyYXkobCkuZmlsbCgnLi4nKS5qb2luKCcvJyksXG4gICAgICAgICAgICAgICAgZnVsbHBhdGg6IChhYnMgKz0gKHNhd0ZpcnN0ID8gJycgOiBqb2luU2VwKSArIHBhcnQpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzYXdGaXJzdCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jd2QgPSBwcmV2O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGRlcHRoIG9mIGEgcHJvdmlkZWQgcGF0aCwgc3RyaW5nLCBvciB0aGUgY3dkXG4gICAgICovXG4gICAgZGVwdGgocGF0aCA9IHRoaXMuY3dkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgcGF0aCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHBhdGggPSB0aGlzLmN3ZC5yZXNvbHZlKHBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXRoLmRlcHRoKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgY2FjaGUgb2YgY2hpbGQgZW50cmllcy4gIEV4cG9zZWQgc28gc3ViY2xhc3NlcyBjYW4gY3JlYXRlXG4gICAgICogY2hpbGQgUGF0aCBvYmplY3RzIGluIGEgcGxhdGZvcm0tc3BlY2lmaWMgd2F5LlxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgY2hpbGRyZW5DYWNoZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2NoaWxkcmVuO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXNvbHZlIG9uZSBvciBtb3JlIHBhdGggc3RyaW5ncyB0byBhIHJlc29sdmVkIHN0cmluZ1xuICAgICAqXG4gICAgICogU2FtZSBpbnRlcmZhY2UgYXMgcmVxdWlyZSgncGF0aCcpLnJlc29sdmUuXG4gICAgICpcbiAgICAgKiBNdWNoIGZhc3RlciB0aGFuIHBhdGgucmVzb2x2ZSgpIHdoZW4gY2FsbGVkIG11bHRpcGxlIHRpbWVzIGZvciB0aGUgc2FtZVxuICAgICAqIHBhdGgsIGJlY2F1c2UgdGhlIHJlc29sdmVkIFBhdGggb2JqZWN0cyBhcmUgY2FjaGVkLiAgTXVjaCBzbG93ZXJcbiAgICAgKiBvdGhlcndpc2UuXG4gICAgICovXG4gICAgcmVzb2x2ZSguLi5wYXRocykge1xuICAgICAgICAvLyBmaXJzdCBmaWd1cmUgb3V0IHRoZSBtaW5pbXVtIG51bWJlciBvZiBwYXRocyB3ZSBoYXZlIHRvIHRlc3RcbiAgICAgICAgLy8gd2UgYWx3YXlzIHN0YXJ0IGF0IGN3ZCwgYnV0IGFueSBhYnNvbHV0ZXMgd2lsbCBidW1wIHRoZSBzdGFydFxuICAgICAgICBsZXQgciA9ICcnO1xuICAgICAgICBmb3IgKGxldCBpID0gcGF0aHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IHAgPSBwYXRoc1tpXTtcbiAgICAgICAgICAgIGlmICghcCB8fCBwID09PSAnLicpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICByID0gciA/IGAke3B9LyR7cn1gIDogcDtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzQWJzb2x1dGUocCkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjYWNoZWQgPSB0aGlzLiNyZXNvbHZlQ2FjaGUuZ2V0KHIpO1xuICAgICAgICBpZiAoY2FjaGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5jd2QucmVzb2x2ZShyKS5mdWxscGF0aCgpO1xuICAgICAgICB0aGlzLiNyZXNvbHZlQ2FjaGUuc2V0KHIsIHJlc3VsdCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlc29sdmUgb25lIG9yIG1vcmUgcGF0aCBzdHJpbmdzIHRvIGEgcmVzb2x2ZWQgc3RyaW5nLCByZXR1cm5pbmdcbiAgICAgKiB0aGUgcG9zaXggcGF0aC4gIElkZW50aWNhbCB0byAucmVzb2x2ZSgpIG9uIHBvc2l4IHN5c3RlbXMsIGJ1dCBvblxuICAgICAqIHdpbmRvd3Mgd2lsbCByZXR1cm4gYSBmb3J3YXJkLXNsYXNoIHNlcGFyYXRlZCBVTkMgcGF0aC5cbiAgICAgKlxuICAgICAqIFNhbWUgaW50ZXJmYWNlIGFzIHJlcXVpcmUoJ3BhdGgnKS5yZXNvbHZlLlxuICAgICAqXG4gICAgICogTXVjaCBmYXN0ZXIgdGhhbiBwYXRoLnJlc29sdmUoKSB3aGVuIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBmb3IgdGhlIHNhbWVcbiAgICAgKiBwYXRoLCBiZWNhdXNlIHRoZSByZXNvbHZlZCBQYXRoIG9iamVjdHMgYXJlIGNhY2hlZC4gIE11Y2ggc2xvd2VyXG4gICAgICogb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIHJlc29sdmVQb3NpeCguLi5wYXRocykge1xuICAgICAgICAvLyBmaXJzdCBmaWd1cmUgb3V0IHRoZSBtaW5pbXVtIG51bWJlciBvZiBwYXRocyB3ZSBoYXZlIHRvIHRlc3RcbiAgICAgICAgLy8gd2UgYWx3YXlzIHN0YXJ0IGF0IGN3ZCwgYnV0IGFueSBhYnNvbHV0ZXMgd2lsbCBidW1wIHRoZSBzdGFydFxuICAgICAgICBsZXQgciA9ICcnO1xuICAgICAgICBmb3IgKGxldCBpID0gcGF0aHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IHAgPSBwYXRoc1tpXTtcbiAgICAgICAgICAgIGlmICghcCB8fCBwID09PSAnLicpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICByID0gciA/IGAke3B9LyR7cn1gIDogcDtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzQWJzb2x1dGUocCkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjYWNoZWQgPSB0aGlzLiNyZXNvbHZlUG9zaXhDYWNoZS5nZXQocik7XG4gICAgICAgIGlmIChjYWNoZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmN3ZC5yZXNvbHZlKHIpLmZ1bGxwYXRoUG9zaXgoKTtcbiAgICAgICAgdGhpcy4jcmVzb2x2ZVBvc2l4Q2FjaGUuc2V0KHIsIHJlc3VsdCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIGZpbmQgdGhlIHJlbGF0aXZlIHBhdGggZnJvbSB0aGUgY3dkIHRvIHRoZSBzdXBwbGllZCBwYXRoIHN0cmluZyBvciBlbnRyeVxuICAgICAqL1xuICAgIHJlbGF0aXZlKGVudHJ5ID0gdGhpcy5jd2QpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVudHJ5LnJlbGF0aXZlKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIGZpbmQgdGhlIHJlbGF0aXZlIHBhdGggZnJvbSB0aGUgY3dkIHRvIHRoZSBzdXBwbGllZCBwYXRoIHN0cmluZyBvclxuICAgICAqIGVudHJ5LCB1c2luZyAvIGFzIHRoZSBwYXRoIGRlbGltaXRlciwgZXZlbiBvbiBXaW5kb3dzLlxuICAgICAqL1xuICAgIHJlbGF0aXZlUG9zaXgoZW50cnkgPSB0aGlzLmN3ZCkge1xuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZC5yZXNvbHZlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW50cnkucmVsYXRpdmVQb3NpeCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIGJhc2VuYW1lIGZvciB0aGUgcHJvdmlkZWQgc3RyaW5nIG9yIFBhdGggb2JqZWN0XG4gICAgICovXG4gICAgYmFzZW5hbWUoZW50cnkgPSB0aGlzLmN3ZCkge1xuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZC5yZXNvbHZlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW50cnkubmFtZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBkaXJuYW1lIGZvciB0aGUgcHJvdmlkZWQgc3RyaW5nIG9yIFBhdGggb2JqZWN0XG4gICAgICovXG4gICAgZGlybmFtZShlbnRyeSA9IHRoaXMuY3dkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoZW50cnkucGFyZW50IHx8IGVudHJ5KS5mdWxscGF0aCgpO1xuICAgIH1cbiAgICBhc3luYyByZWFkZGlyKGVudHJ5ID0gdGhpcy5jd2QsIG9wdHMgPSB7XG4gICAgICAgIHdpdGhGaWxlVHlwZXM6IHRydWUsXG4gICAgfSkge1xuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZC5yZXNvbHZlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghKGVudHJ5IGluc3RhbmNlb2YgUGF0aEJhc2UpKSB7XG4gICAgICAgICAgICBvcHRzID0gZW50cnk7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgd2l0aEZpbGVUeXBlcyB9ID0gb3B0cztcbiAgICAgICAgaWYgKCFlbnRyeS5jYW5SZWFkZGlyKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHAgPSBhd2FpdCBlbnRyeS5yZWFkZGlyKCk7XG4gICAgICAgICAgICByZXR1cm4gd2l0aEZpbGVUeXBlcyA/IHAgOiBwLm1hcChlID0+IGUubmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVhZGRpclN5bmMoZW50cnkgPSB0aGlzLmN3ZCwgb3B0cyA9IHtcbiAgICAgICAgd2l0aEZpbGVUeXBlczogdHJ1ZSxcbiAgICB9KSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCEoZW50cnkgaW5zdGFuY2VvZiBQYXRoQmFzZSkpIHtcbiAgICAgICAgICAgIG9wdHMgPSBlbnRyeTtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2Q7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyB3aXRoRmlsZVR5cGVzID0gdHJ1ZSB9ID0gb3B0cztcbiAgICAgICAgaWYgKCFlbnRyeS5jYW5SZWFkZGlyKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh3aXRoRmlsZVR5cGVzKSB7XG4gICAgICAgICAgICByZXR1cm4gZW50cnkucmVhZGRpclN5bmMoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBlbnRyeS5yZWFkZGlyU3luYygpLm1hcChlID0+IGUubmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2FsbCBsc3RhdCgpIG9uIHRoZSBzdHJpbmcgb3IgUGF0aCBvYmplY3QsIGFuZCB1cGRhdGUgYWxsIGtub3duXG4gICAgICogaW5mb3JtYXRpb24gdGhhdCBjYW4gYmUgZGV0ZXJtaW5lZC5cbiAgICAgKlxuICAgICAqIE5vdGUgdGhhdCB1bmxpa2UgYGZzLmxzdGF0KClgLCB0aGUgcmV0dXJuZWQgdmFsdWUgZG9lcyBub3QgY29udGFpbiBzb21lXG4gICAgICogaW5mb3JtYXRpb24sIHN1Y2ggYXMgYG1vZGVgLCBgZGV2YCwgYG5saW5rYCwgYW5kIGBpbm9gLiAgSWYgdGhhdFxuICAgICAqIGluZm9ybWF0aW9uIGlzIHJlcXVpcmVkLCB5b3Ugd2lsbCBuZWVkIHRvIGNhbGwgYGZzLmxzdGF0YCB5b3Vyc2VsZi5cbiAgICAgKlxuICAgICAqIElmIHRoZSBQYXRoIHJlZmVycyB0byBhIG5vbmV4aXN0ZW50IGZpbGUsIG9yIGlmIHRoZSBsc3RhdCBjYWxsIGZhaWxzIGZvclxuICAgICAqIGFueSByZWFzb24sIGB1bmRlZmluZWRgIGlzIHJldHVybmVkLiAgT3RoZXJ3aXNlIHRoZSB1cGRhdGVkIFBhdGggb2JqZWN0IGlzXG4gICAgICogcmV0dXJuZWQuXG4gICAgICpcbiAgICAgKiBSZXN1bHRzIGFyZSBjYWNoZWQsIGFuZCB0aHVzIG1heSBiZSBvdXQgb2YgZGF0ZSBpZiB0aGUgZmlsZXN5c3RlbSBpc1xuICAgICAqIG11dGF0ZWQuXG4gICAgICovXG4gICAgYXN5bmMgbHN0YXQoZW50cnkgPSB0aGlzLmN3ZCkge1xuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZC5yZXNvbHZlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW50cnkubHN0YXQoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogc3luY2hyb25vdXMge0BsaW5rIFBhdGhTY3VycnlCYXNlLmxzdGF0fVxuICAgICAqL1xuICAgIGxzdGF0U3luYyhlbnRyeSA9IHRoaXMuY3dkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbnRyeS5sc3RhdFN5bmMoKTtcbiAgICB9XG4gICAgYXN5bmMgcmVhZGxpbmsoZW50cnkgPSB0aGlzLmN3ZCwgeyB3aXRoRmlsZVR5cGVzIH0gPSB7XG4gICAgICAgIHdpdGhGaWxlVHlwZXM6IGZhbHNlLFxuICAgIH0pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIShlbnRyeSBpbnN0YW5jZW9mIFBhdGhCYXNlKSkge1xuICAgICAgICAgICAgd2l0aEZpbGVUeXBlcyA9IGVudHJ5LndpdGhGaWxlVHlwZXM7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGUgPSBhd2FpdCBlbnRyeS5yZWFkbGluaygpO1xuICAgICAgICByZXR1cm4gd2l0aEZpbGVUeXBlcyA/IGUgOiBlPy5mdWxscGF0aCgpO1xuICAgIH1cbiAgICByZWFkbGlua1N5bmMoZW50cnkgPSB0aGlzLmN3ZCwgeyB3aXRoRmlsZVR5cGVzIH0gPSB7XG4gICAgICAgIHdpdGhGaWxlVHlwZXM6IGZhbHNlLFxuICAgIH0pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIShlbnRyeSBpbnN0YW5jZW9mIFBhdGhCYXNlKSkge1xuICAgICAgICAgICAgd2l0aEZpbGVUeXBlcyA9IGVudHJ5LndpdGhGaWxlVHlwZXM7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGUgPSBlbnRyeS5yZWFkbGlua1N5bmMoKTtcbiAgICAgICAgcmV0dXJuIHdpdGhGaWxlVHlwZXMgPyBlIDogZT8uZnVsbHBhdGgoKTtcbiAgICB9XG4gICAgYXN5bmMgcmVhbHBhdGgoZW50cnkgPSB0aGlzLmN3ZCwgeyB3aXRoRmlsZVR5cGVzIH0gPSB7XG4gICAgICAgIHdpdGhGaWxlVHlwZXM6IGZhbHNlLFxuICAgIH0pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIShlbnRyeSBpbnN0YW5jZW9mIFBhdGhCYXNlKSkge1xuICAgICAgICAgICAgd2l0aEZpbGVUeXBlcyA9IGVudHJ5LndpdGhGaWxlVHlwZXM7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGUgPSBhd2FpdCBlbnRyeS5yZWFscGF0aCgpO1xuICAgICAgICByZXR1cm4gd2l0aEZpbGVUeXBlcyA/IGUgOiBlPy5mdWxscGF0aCgpO1xuICAgIH1cbiAgICByZWFscGF0aFN5bmMoZW50cnkgPSB0aGlzLmN3ZCwgeyB3aXRoRmlsZVR5cGVzIH0gPSB7XG4gICAgICAgIHdpdGhGaWxlVHlwZXM6IGZhbHNlLFxuICAgIH0pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIShlbnRyeSBpbnN0YW5jZW9mIFBhdGhCYXNlKSkge1xuICAgICAgICAgICAgd2l0aEZpbGVUeXBlcyA9IGVudHJ5LndpdGhGaWxlVHlwZXM7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGUgPSBlbnRyeS5yZWFscGF0aFN5bmMoKTtcbiAgICAgICAgcmV0dXJuIHdpdGhGaWxlVHlwZXMgPyBlIDogZT8uZnVsbHBhdGgoKTtcbiAgICB9XG4gICAgYXN5bmMgd2FsayhlbnRyeSA9IHRoaXMuY3dkLCBvcHRzID0ge30pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIShlbnRyeSBpbnN0YW5jZW9mIFBhdGhCYXNlKSkge1xuICAgICAgICAgICAgb3B0cyA9IGVudHJ5O1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHdpdGhGaWxlVHlwZXMgPSB0cnVlLCBmb2xsb3cgPSBmYWxzZSwgZmlsdGVyLCB3YWxrRmlsdGVyLCB9ID0gb3B0cztcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IFtdO1xuICAgICAgICBpZiAoIWZpbHRlciB8fCBmaWx0ZXIoZW50cnkpKSB7XG4gICAgICAgICAgICByZXN1bHRzLnB1c2god2l0aEZpbGVUeXBlcyA/IGVudHJ5IDogZW50cnkuZnVsbHBhdGgoKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGlycyA9IG5ldyBTZXQoKTtcbiAgICAgICAgY29uc3Qgd2FsayA9IChkaXIsIGNiKSA9PiB7XG4gICAgICAgICAgICBkaXJzLmFkZChkaXIpO1xuICAgICAgICAgICAgZGlyLnJlYWRkaXJDQigoZXIsIGVudHJpZXMpID0+IHtcbiAgICAgICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgICAgICAgICBpZiAoZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNiKGVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgICAgICAgICBsZXQgbGVuID0gZW50cmllcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgaWYgKCFsZW4pXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYigpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgtLWxlbiA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBlIG9mIGVudHJpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmaWx0ZXIgfHwgZmlsdGVyKGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2god2l0aEZpbGVUeXBlcyA/IGUgOiBlLmZ1bGxwYXRoKCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChmb2xsb3cgJiYgZS5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlLnJlYWxwYXRoKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbihyID0+IChyPy5pc1Vua25vd24oKSA/IHIubHN0YXQoKSA6IHIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKHIgPT4gcj8uc2hvdWxkV2FsayhkaXJzLCB3YWxrRmlsdGVyKSA/IHdhbGsociwgbmV4dCkgOiBuZXh0KCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUuc2hvdWxkV2FsayhkaXJzLCB3YWxrRmlsdGVyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbGsoZSwgbmV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB0cnVlKTsgLy8gemFsZ29vb29vb29cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBlbnRyeTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXMsIHJlaikgPT4ge1xuICAgICAgICAgICAgd2FsayhzdGFydCwgZXIgPT4ge1xuICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICAgICAgICAgIGlmIChlcilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlaihlcik7XG4gICAgICAgICAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgICAgICAgICByZXMocmVzdWx0cyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHdhbGtTeW5jKGVudHJ5ID0gdGhpcy5jd2QsIG9wdHMgPSB7fSkge1xuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZC5yZXNvbHZlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghKGVudHJ5IGluc3RhbmNlb2YgUGF0aEJhc2UpKSB7XG4gICAgICAgICAgICBvcHRzID0gZW50cnk7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgd2l0aEZpbGVUeXBlcyA9IHRydWUsIGZvbGxvdyA9IGZhbHNlLCBmaWx0ZXIsIHdhbGtGaWx0ZXIsIH0gPSBvcHRzO1xuICAgICAgICBjb25zdCByZXN1bHRzID0gW107XG4gICAgICAgIGlmICghZmlsdGVyIHx8IGZpbHRlcihlbnRyeSkpIHtcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaCh3aXRoRmlsZVR5cGVzID8gZW50cnkgOiBlbnRyeS5mdWxscGF0aCgpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkaXJzID0gbmV3IFNldChbZW50cnldKTtcbiAgICAgICAgZm9yIChjb25zdCBkaXIgb2YgZGlycykge1xuICAgICAgICAgICAgY29uc3QgZW50cmllcyA9IGRpci5yZWFkZGlyU3luYygpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBlIG9mIGVudHJpZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWZpbHRlciB8fCBmaWx0ZXIoZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHdpdGhGaWxlVHlwZXMgPyBlIDogZS5mdWxscGF0aCgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IHIgPSBlO1xuICAgICAgICAgICAgICAgIGlmIChlLmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoZm9sbG93ICYmIChyID0gZS5yZWFscGF0aFN5bmMoKSkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyLmlzVW5rbm93bigpKVxuICAgICAgICAgICAgICAgICAgICAgICAgci5sc3RhdFN5bmMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHIuc2hvdWxkV2FsayhkaXJzLCB3YWxrRmlsdGVyKSkge1xuICAgICAgICAgICAgICAgICAgICBkaXJzLmFkZChyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN1cHBvcnQgZm9yIGBmb3IgYXdhaXRgXG4gICAgICpcbiAgICAgKiBBbGlhcyBmb3Ige0BsaW5rIFBhdGhTY3VycnlCYXNlLml0ZXJhdGV9XG4gICAgICpcbiAgICAgKiBOb3RlOiBBcyBvZiBOb2RlIDE5LCB0aGlzIGlzIHZlcnkgc2xvdywgY29tcGFyZWQgdG8gb3RoZXIgbWV0aG9kcyBvZlxuICAgICAqIHdhbGtpbmcuICBDb25zaWRlciB1c2luZyB7QGxpbmsgUGF0aFNjdXJyeUJhc2Uuc3RyZWFtfSBpZiBtZW1vcnkgb3ZlcmhlYWRcbiAgICAgKiBhbmQgYmFja3ByZXNzdXJlIGFyZSBjb25jZXJucywgb3Ige0BsaW5rIFBhdGhTY3VycnlCYXNlLndhbGt9IGlmIG5vdC5cbiAgICAgKi9cbiAgICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pdGVyYXRlKCk7XG4gICAgfVxuICAgIGl0ZXJhdGUoZW50cnkgPSB0aGlzLmN3ZCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIC8vIGl0ZXJhdGluZyBhc3luYyBvdmVyIHRoZSBzdHJlYW0gaXMgc2lnbmlmaWNhbnRseSBtb3JlIHBlcmZvcm1hbnQsXG4gICAgICAgIC8vIGVzcGVjaWFsbHkgaW4gdGhlIHdhcm0tY2FjaGUgc2NlbmFyaW8sIGJlY2F1c2UgaXQgYnVmZmVycyB1cCBkaXJlY3RvcnlcbiAgICAgICAgLy8gZW50cmllcyBpbiB0aGUgYmFja2dyb3VuZCBpbnN0ZWFkIG9mIHdhaXRpbmcgZm9yIGEgeWllbGQgZm9yIGVhY2ggb25lLlxuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZC5yZXNvbHZlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghKGVudHJ5IGluc3RhbmNlb2YgUGF0aEJhc2UpKSB7XG4gICAgICAgICAgICBvcHRpb25zID0gZW50cnk7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnN0cmVhbShlbnRyeSwgb3B0aW9ucylbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEl0ZXJhdGluZyBvdmVyIGEgUGF0aFNjdXJyeSBwZXJmb3JtcyBhIHN5bmNocm9ub3VzIHdhbGsuXG4gICAgICpcbiAgICAgKiBBbGlhcyBmb3Ige0BsaW5rIFBhdGhTY3VycnlCYXNlLml0ZXJhdGVTeW5jfVxuICAgICAqL1xuICAgIFtTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pdGVyYXRlU3luYygpO1xuICAgIH1cbiAgICAqaXRlcmF0ZVN5bmMoZW50cnkgPSB0aGlzLmN3ZCwgb3B0cyA9IHt9KSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCEoZW50cnkgaW5zdGFuY2VvZiBQYXRoQmFzZSkpIHtcbiAgICAgICAgICAgIG9wdHMgPSBlbnRyeTtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2Q7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyB3aXRoRmlsZVR5cGVzID0gdHJ1ZSwgZm9sbG93ID0gZmFsc2UsIGZpbHRlciwgd2Fsa0ZpbHRlciwgfSA9IG9wdHM7XG4gICAgICAgIGlmICghZmlsdGVyIHx8IGZpbHRlcihlbnRyeSkpIHtcbiAgICAgICAgICAgIHlpZWxkIHdpdGhGaWxlVHlwZXMgPyBlbnRyeSA6IGVudHJ5LmZ1bGxwYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGlycyA9IG5ldyBTZXQoW2VudHJ5XSk7XG4gICAgICAgIGZvciAoY29uc3QgZGlyIG9mIGRpcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGVudHJpZXMgPSBkaXIucmVhZGRpclN5bmMoKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFmaWx0ZXIgfHwgZmlsdGVyKGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIHdpdGhGaWxlVHlwZXMgPyBlIDogZS5mdWxscGF0aCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgciA9IGU7XG4gICAgICAgICAgICAgICAgaWYgKGUuaXNTeW1ib2xpY0xpbmsoKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIShmb2xsb3cgJiYgKHIgPSBlLnJlYWxwYXRoU3luYygpKSkpXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHIuaXNVbmtub3duKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICByLmxzdGF0U3luYygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoci5zaG91bGRXYWxrKGRpcnMsIHdhbGtGaWx0ZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRpcnMuYWRkKHIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBzdHJlYW0oZW50cnkgPSB0aGlzLmN3ZCwgb3B0cyA9IHt9KSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCEoZW50cnkgaW5zdGFuY2VvZiBQYXRoQmFzZSkpIHtcbiAgICAgICAgICAgIG9wdHMgPSBlbnRyeTtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2Q7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyB3aXRoRmlsZVR5cGVzID0gdHJ1ZSwgZm9sbG93ID0gZmFsc2UsIGZpbHRlciwgd2Fsa0ZpbHRlciwgfSA9IG9wdHM7XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBuZXcgbWluaXBhc3NfMS5NaW5pcGFzcyh7IG9iamVjdE1vZGU6IHRydWUgfSk7XG4gICAgICAgIGlmICghZmlsdGVyIHx8IGZpbHRlcihlbnRyeSkpIHtcbiAgICAgICAgICAgIHJlc3VsdHMud3JpdGUod2l0aEZpbGVUeXBlcyA/IGVudHJ5IDogZW50cnkuZnVsbHBhdGgoKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGlycyA9IG5ldyBTZXQoKTtcbiAgICAgICAgY29uc3QgcXVldWUgPSBbZW50cnldO1xuICAgICAgICBsZXQgcHJvY2Vzc2luZyA9IDA7XG4gICAgICAgIGNvbnN0IHByb2Nlc3MgPSAoKSA9PiB7XG4gICAgICAgICAgICBsZXQgcGF1c2VkID0gZmFsc2U7XG4gICAgICAgICAgICB3aGlsZSAoIXBhdXNlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpciA9IHF1ZXVlLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgaWYgKCFkaXIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb2Nlc3NpbmcgPT09IDApXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzLmVuZCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHByb2Nlc3NpbmcrKztcbiAgICAgICAgICAgICAgICBkaXJzLmFkZChkaXIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9uUmVhZGRpciA9IChlciwgZW50cmllcywgZGlkUmVhbHBhdGhzID0gZmFsc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICAgICAgICAgIGlmIChlcilcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRzLmVtaXQoJ2Vycm9yJywgZXIpO1xuICAgICAgICAgICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgICAgICAgICBpZiAoZm9sbG93ICYmICFkaWRSZWFscGF0aHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb21pc2VzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGUgb2YgZW50cmllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaChlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVhbHBhdGgoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oKHIpID0+IHI/LmlzVW5rbm93bigpID8gci5sc3RhdCgpIDogcikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9taXNlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbigoKSA9PiBvblJlYWRkaXIobnVsbCwgZW50cmllcywgdHJ1ZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGUgb2YgZW50cmllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUgJiYgKCFmaWx0ZXIgfHwgZmlsdGVyKGUpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVzdWx0cy53cml0ZSh3aXRoRmlsZVR5cGVzID8gZSA6IGUuZnVsbHBhdGgoKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF1c2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2luZy0tO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGUgb2YgZW50cmllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgciA9IGUucmVhbHBhdGhDYWNoZWQoKSB8fCBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIuc2hvdWxkV2FsayhkaXJzLCB3YWxrRmlsdGVyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXVlLnB1c2gocik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhdXNlZCAmJiAhcmVzdWx0cy5mbG93aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzLm9uY2UoJ2RyYWluJywgcHJvY2Vzcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIXN5bmMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgLy8gemFsZ28gY29udGFpbm1lbnRcbiAgICAgICAgICAgICAgICBsZXQgc3luYyA9IHRydWU7XG4gICAgICAgICAgICAgICAgZGlyLnJlYWRkaXJDQihvblJlYWRkaXIsIHRydWUpO1xuICAgICAgICAgICAgICAgIHN5bmMgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcHJvY2VzcygpO1xuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG4gICAgc3RyZWFtU3luYyhlbnRyeSA9IHRoaXMuY3dkLCBvcHRzID0ge30pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIShlbnRyeSBpbnN0YW5jZW9mIFBhdGhCYXNlKSkge1xuICAgICAgICAgICAgb3B0cyA9IGVudHJ5O1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHdpdGhGaWxlVHlwZXMgPSB0cnVlLCBmb2xsb3cgPSBmYWxzZSwgZmlsdGVyLCB3YWxrRmlsdGVyLCB9ID0gb3B0cztcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IG5ldyBtaW5pcGFzc18xLk1pbmlwYXNzKHsgb2JqZWN0TW9kZTogdHJ1ZSB9KTtcbiAgICAgICAgY29uc3QgZGlycyA9IG5ldyBTZXQoKTtcbiAgICAgICAgaWYgKCFmaWx0ZXIgfHwgZmlsdGVyKGVudHJ5KSkge1xuICAgICAgICAgICAgcmVzdWx0cy53cml0ZSh3aXRoRmlsZVR5cGVzID8gZW50cnkgOiBlbnRyeS5mdWxscGF0aCgpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBxdWV1ZSA9IFtlbnRyeV07XG4gICAgICAgIGxldCBwcm9jZXNzaW5nID0gMDtcbiAgICAgICAgY29uc3QgcHJvY2VzcyA9ICgpID0+IHtcbiAgICAgICAgICAgIGxldCBwYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHdoaWxlICghcGF1c2VkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGlyID0gcXVldWUuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICBpZiAoIWRpcikge1xuICAgICAgICAgICAgICAgICAgICBpZiAocHJvY2Vzc2luZyA9PT0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMuZW5kKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcHJvY2Vzc2luZysrO1xuICAgICAgICAgICAgICAgIGRpcnMuYWRkKGRpcik7XG4gICAgICAgICAgICAgICAgY29uc3QgZW50cmllcyA9IGRpci5yZWFkZGlyU3luYygpO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZmlsdGVyIHx8IGZpbHRlcihlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHRzLndyaXRlKHdpdGhGaWxlVHlwZXMgPyBlIDogZS5mdWxscGF0aCgpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdXNlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcHJvY2Vzc2luZy0tO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCByID0gZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUuaXNTeW1ib2xpY0xpbmsoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoZm9sbG93ICYmIChyID0gZS5yZWFscGF0aFN5bmMoKSkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIuaXNVbmtub3duKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgci5sc3RhdFN5bmMoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoci5zaG91bGRXYWxrKGRpcnMsIHdhbGtGaWx0ZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBxdWV1ZS5wdXNoKHIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBhdXNlZCAmJiAhcmVzdWx0cy5mbG93aW5nKVxuICAgICAgICAgICAgICAgIHJlc3VsdHMub25jZSgnZHJhaW4nLCBwcm9jZXNzKTtcbiAgICAgICAgfTtcbiAgICAgICAgcHJvY2VzcygpO1xuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG4gICAgY2hkaXIocGF0aCA9IHRoaXMuY3dkKSB7XG4gICAgICAgIGNvbnN0IG9sZEN3ZCA9IHRoaXMuY3dkO1xuICAgICAgICB0aGlzLmN3ZCA9IHR5cGVvZiBwYXRoID09PSAnc3RyaW5nJyA/IHRoaXMuY3dkLnJlc29sdmUocGF0aCkgOiBwYXRoO1xuICAgICAgICB0aGlzLmN3ZFtzZXRBc0N3ZF0ob2xkQ3dkKTtcbiAgICB9XG59XG5leHBvcnRzLlBhdGhTY3VycnlCYXNlID0gUGF0aFNjdXJyeUJhc2U7XG4vKipcbiAqIFdpbmRvd3MgaW1wbGVtZW50YXRpb24gb2Yge0BsaW5rIFBhdGhTY3VycnlCYXNlfVxuICpcbiAqIERlZmF1bHRzIHRvIGNhc2UgaW5zZW5zaXR2ZSwgdXNlcyBgJ1xcXFwnYCB0byBnZW5lcmF0ZSBwYXRoIHN0cmluZ3MuICBVc2VzXG4gKiB7QGxpbmsgUGF0aFdpbjMyfSBmb3IgUGF0aCBvYmplY3RzLlxuICovXG5jbGFzcyBQYXRoU2N1cnJ5V2luMzIgZXh0ZW5kcyBQYXRoU2N1cnJ5QmFzZSB7XG4gICAgLyoqXG4gICAgICogc2VwYXJhdG9yIGZvciBnZW5lcmF0aW5nIHBhdGggc3RyaW5nc1xuICAgICAqL1xuICAgIHNlcCA9ICdcXFxcJztcbiAgICBjb25zdHJ1Y3Rvcihjd2QgPSBwcm9jZXNzLmN3ZCgpLCBvcHRzID0ge30pIHtcbiAgICAgICAgY29uc3QgeyBub2Nhc2UgPSB0cnVlIH0gPSBvcHRzO1xuICAgICAgICBzdXBlcihjd2QsIG5vZGVfcGF0aF8xLndpbjMyLCAnXFxcXCcsIHsgLi4ub3B0cywgbm9jYXNlIH0pO1xuICAgICAgICB0aGlzLm5vY2FzZSA9IG5vY2FzZTtcbiAgICAgICAgZm9yIChsZXQgcCA9IHRoaXMuY3dkOyBwOyBwID0gcC5wYXJlbnQpIHtcbiAgICAgICAgICAgIHAubm9jYXNlID0gdGhpcy5ub2Nhc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcGFyc2VSb290UGF0aChkaXIpIHtcbiAgICAgICAgLy8gaWYgdGhlIHBhdGggc3RhcnRzIHdpdGggYSBzaW5nbGUgc2VwYXJhdG9yLCBpdCdzIG5vdCBhIFVOQywgYW5kIHdlJ2xsXG4gICAgICAgIC8vIGp1c3QgZ2V0IHNlcGFyYXRvciBhcyB0aGUgcm9vdCwgYW5kIGRyaXZlRnJvbVVOQyB3aWxsIHJldHVybiBcXFxuICAgICAgICAvLyBJbiB0aGF0IGNhc2UsIG1vdW50IFxcIG9uIHRoZSByb290IGZyb20gdGhlIGN3ZC5cbiAgICAgICAgcmV0dXJuIG5vZGVfcGF0aF8xLndpbjMyLnBhcnNlKGRpcikucm9vdC50b1VwcGVyQ2FzZSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBuZXdSb290KGZzKSB7XG4gICAgICAgIHJldHVybiBuZXcgUGF0aFdpbjMyKHRoaXMucm9vdFBhdGgsIElGRElSLCB1bmRlZmluZWQsIHRoaXMucm9vdHMsIHRoaXMubm9jYXNlLCB0aGlzLmNoaWxkcmVuQ2FjaGUoKSwgeyBmcyB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHByb3ZpZGVkIHBhdGggc3RyaW5nIGlzIGFuIGFic29sdXRlIHBhdGhcbiAgICAgKi9cbiAgICBpc0Fic29sdXRlKHApIHtcbiAgICAgICAgcmV0dXJuIChwLnN0YXJ0c1dpdGgoJy8nKSB8fCBwLnN0YXJ0c1dpdGgoJ1xcXFwnKSB8fCAvXlthLXpdOihcXC98XFxcXCkvaS50ZXN0KHApKTtcbiAgICB9XG59XG5leHBvcnRzLlBhdGhTY3VycnlXaW4zMiA9IFBhdGhTY3VycnlXaW4zMjtcbi8qKlxuICoge0BsaW5rIFBhdGhTY3VycnlCYXNlfSBpbXBsZW1lbnRhdGlvbiBmb3IgYWxsIHBvc2l4IHN5c3RlbXMgb3RoZXIgdGhhbiBEYXJ3aW4uXG4gKlxuICogRGVmYXVsdHMgdG8gY2FzZS1zZW5zaXRpdmUgbWF0Y2hpbmcsIHVzZXMgYCcvJ2AgdG8gZ2VuZXJhdGUgcGF0aCBzdHJpbmdzLlxuICpcbiAqIFVzZXMge0BsaW5rIFBhdGhQb3NpeH0gZm9yIFBhdGggb2JqZWN0cy5cbiAqL1xuY2xhc3MgUGF0aFNjdXJyeVBvc2l4IGV4dGVuZHMgUGF0aFNjdXJyeUJhc2Uge1xuICAgIC8qKlxuICAgICAqIHNlcGFyYXRvciBmb3IgZ2VuZXJhdGluZyBwYXRoIHN0cmluZ3NcbiAgICAgKi9cbiAgICBzZXAgPSAnLyc7XG4gICAgY29uc3RydWN0b3IoY3dkID0gcHJvY2Vzcy5jd2QoKSwgb3B0cyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHsgbm9jYXNlID0gZmFsc2UgfSA9IG9wdHM7XG4gICAgICAgIHN1cGVyKGN3ZCwgbm9kZV9wYXRoXzEucG9zaXgsICcvJywgeyAuLi5vcHRzLCBub2Nhc2UgfSk7XG4gICAgICAgIHRoaXMubm9jYXNlID0gbm9jYXNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwYXJzZVJvb3RQYXRoKF9kaXIpIHtcbiAgICAgICAgcmV0dXJuICcvJztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgbmV3Um9vdChmcykge1xuICAgICAgICByZXR1cm4gbmV3IFBhdGhQb3NpeCh0aGlzLnJvb3RQYXRoLCBJRkRJUiwgdW5kZWZpbmVkLCB0aGlzLnJvb3RzLCB0aGlzLm5vY2FzZSwgdGhpcy5jaGlsZHJlbkNhY2hlKCksIHsgZnMgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSBwcm92aWRlZCBwYXRoIHN0cmluZyBpcyBhbiBhYnNvbHV0ZSBwYXRoXG4gICAgICovXG4gICAgaXNBYnNvbHV0ZShwKSB7XG4gICAgICAgIHJldHVybiBwLnN0YXJ0c1dpdGgoJy8nKTtcbiAgICB9XG59XG5leHBvcnRzLlBhdGhTY3VycnlQb3NpeCA9IFBhdGhTY3VycnlQb3NpeDtcbi8qKlxuICoge0BsaW5rIFBhdGhTY3VycnlCYXNlfSBpbXBsZW1lbnRhdGlvbiBmb3IgRGFyd2luIChtYWNPUykgc3lzdGVtcy5cbiAqXG4gKiBEZWZhdWx0cyB0byBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoaW5nLCB1c2VzIGAnLydgIGZvciBnZW5lcmF0aW5nIHBhdGhcbiAqIHN0cmluZ3MuXG4gKlxuICogVXNlcyB7QGxpbmsgUGF0aFBvc2l4fSBmb3IgUGF0aCBvYmplY3RzLlxuICovXG5jbGFzcyBQYXRoU2N1cnJ5RGFyd2luIGV4dGVuZHMgUGF0aFNjdXJyeVBvc2l4IHtcbiAgICBjb25zdHJ1Y3Rvcihjd2QgPSBwcm9jZXNzLmN3ZCgpLCBvcHRzID0ge30pIHtcbiAgICAgICAgY29uc3QgeyBub2Nhc2UgPSB0cnVlIH0gPSBvcHRzO1xuICAgICAgICBzdXBlcihjd2QsIHsgLi4ub3B0cywgbm9jYXNlIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuUGF0aFNjdXJyeURhcndpbiA9IFBhdGhTY3VycnlEYXJ3aW47XG4vKipcbiAqIERlZmF1bHQge0BsaW5rIFBhdGhCYXNlfSBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIGN1cnJlbnQgcGxhdGZvcm0uXG4gKlxuICoge0BsaW5rIFBhdGhXaW4zMn0gb24gV2luZG93cyBzeXN0ZW1zLCB7QGxpbmsgUGF0aFBvc2l4fSBvbiBhbGwgb3RoZXJzLlxuICovXG5leHBvcnRzLlBhdGggPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInID8gUGF0aFdpbjMyIDogUGF0aFBvc2l4O1xuLyoqXG4gKiBEZWZhdWx0IHtAbGluayBQYXRoU2N1cnJ5QmFzZX0gaW1wbGVtZW50YXRpb24gZm9yIHRoZSBjdXJyZW50IHBsYXRmb3JtLlxuICpcbiAqIHtAbGluayBQYXRoU2N1cnJ5V2luMzJ9IG9uIFdpbmRvd3Mgc3lzdGVtcywge0BsaW5rIFBhdGhTY3VycnlEYXJ3aW59IG9uXG4gKiBEYXJ3aW4gKG1hY09TKSBzeXN0ZW1zLCB7QGxpbmsgUGF0aFNjdXJyeVBvc2l4fSBvbiBhbGwgb3RoZXJzLlxuICovXG5leHBvcnRzLlBhdGhTY3VycnkgPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInID8gUGF0aFNjdXJyeVdpbjMyXG4gICAgOiBwcm9jZXNzLnBsYXRmb3JtID09PSAnZGFyd2luJyA/IFBhdGhTY3VycnlEYXJ3aW5cbiAgICAgICAgOiBQYXRoU2N1cnJ5UG9zaXg7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gdGhpcyBpcyBqdXN0IGEgdmVyeSBsaWdodCB3cmFwcGVyIGFyb3VuZCAyIGFycmF5cyB3aXRoIGFuIG9mZnNldCBpbmRleFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5QYXR0ZXJuID0gdm9pZCAwO1xuY29uc3QgbWluaW1hdGNoXzEgPSByZXF1aXJlKFwibWluaW1hdGNoXCIpO1xuY29uc3QgaXNQYXR0ZXJuTGlzdCA9IChwbCkgPT4gcGwubGVuZ3RoID49IDE7XG5jb25zdCBpc0dsb2JMaXN0ID0gKGdsKSA9PiBnbC5sZW5ndGggPj0gMTtcbi8qKlxuICogQW4gaW1tdXRhYmxlLWlzaCB2aWV3IG9uIGFuIGFycmF5IG9mIGdsb2IgcGFydHMgYW5kIHRoZWlyIHBhcnNlZFxuICogcmVzdWx0c1xuICovXG5jbGFzcyBQYXR0ZXJuIHtcbiAgICAjcGF0dGVybkxpc3Q7XG4gICAgI2dsb2JMaXN0O1xuICAgICNpbmRleDtcbiAgICBsZW5ndGg7XG4gICAgI3BsYXRmb3JtO1xuICAgICNyZXN0O1xuICAgICNnbG9iU3RyaW5nO1xuICAgICNpc0RyaXZlO1xuICAgICNpc1VOQztcbiAgICAjaXNBYnNvbHV0ZTtcbiAgICAjZm9sbG93R2xvYnN0YXIgPSB0cnVlO1xuICAgIGNvbnN0cnVjdG9yKHBhdHRlcm5MaXN0LCBnbG9iTGlzdCwgaW5kZXgsIHBsYXRmb3JtKSB7XG4gICAgICAgIGlmICghaXNQYXR0ZXJuTGlzdChwYXR0ZXJuTGlzdCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2VtcHR5IHBhdHRlcm4gbGlzdCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNHbG9iTGlzdChnbG9iTGlzdCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2VtcHR5IGdsb2IgbGlzdCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChnbG9iTGlzdC5sZW5ndGggIT09IHBhdHRlcm5MaXN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbWlzbWF0Y2hlZCBwYXR0ZXJuIGxpc3QgYW5kIGdsb2IgbGlzdCBsZW5ndGhzJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sZW5ndGggPSBwYXR0ZXJuTGlzdC5sZW5ndGg7XG4gICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2luZGV4IG91dCBvZiByYW5nZScpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuI3BhdHRlcm5MaXN0ID0gcGF0dGVybkxpc3Q7XG4gICAgICAgIHRoaXMuI2dsb2JMaXN0ID0gZ2xvYkxpc3Q7XG4gICAgICAgIHRoaXMuI2luZGV4ID0gaW5kZXg7XG4gICAgICAgIHRoaXMuI3BsYXRmb3JtID0gcGxhdGZvcm07XG4gICAgICAgIC8vIG5vcm1hbGl6ZSByb290IGVudHJpZXMgb2YgYWJzb2x1dGUgcGF0dGVybnMgb24gaW5pdGlhbCBjcmVhdGlvbi5cbiAgICAgICAgaWYgKHRoaXMuI2luZGV4ID09PSAwKSB7XG4gICAgICAgICAgICAvLyBjOiA9PiBbJ2M6LyddXG4gICAgICAgICAgICAvLyBDOi8gPT4gWydDOi8nXVxuICAgICAgICAgICAgLy8gQzoveCA9PiBbJ0M6LycsICd4J11cbiAgICAgICAgICAgIC8vIC8vaG9zdC9zaGFyZSA9PiBbJy8vaG9zdC9zaGFyZS8nXVxuICAgICAgICAgICAgLy8gLy9ob3N0L3NoYXJlLyA9PiBbJy8vaG9zdC9zaGFyZS8nXVxuICAgICAgICAgICAgLy8gLy9ob3N0L3NoYXJlL3ggPT4gWycvL2hvc3Qvc2hhcmUvJywgJ3gnXVxuICAgICAgICAgICAgLy8gL2V0YyA9PiBbJy8nLCAnZXRjJ11cbiAgICAgICAgICAgIC8vIC8gPT4gWycvJ11cbiAgICAgICAgICAgIGlmICh0aGlzLmlzVU5DKCkpIHtcbiAgICAgICAgICAgICAgICAvLyAnJyAvICcnIC8gJ2hvc3QnIC8gJ3NoYXJlJ1xuICAgICAgICAgICAgICAgIGNvbnN0IFtwMCwgcDEsIHAyLCBwMywgLi4ucHJlc3RdID0gdGhpcy4jcGF0dGVybkxpc3Q7XG4gICAgICAgICAgICAgICAgY29uc3QgW2cwLCBnMSwgZzIsIGczLCAuLi5ncmVzdF0gPSB0aGlzLiNnbG9iTGlzdDtcbiAgICAgICAgICAgICAgICBpZiAocHJlc3RbMF0gPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGVuZHMgaW4gL1xuICAgICAgICAgICAgICAgICAgICBwcmVzdC5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICBncmVzdC5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBwID0gW3AwLCBwMSwgcDIsIHAzLCAnJ10uam9pbignLycpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGcgPSBbZzAsIGcxLCBnMiwgZzMsICcnXS5qb2luKCcvJyk7XG4gICAgICAgICAgICAgICAgdGhpcy4jcGF0dGVybkxpc3QgPSBbcCwgLi4ucHJlc3RdO1xuICAgICAgICAgICAgICAgIHRoaXMuI2dsb2JMaXN0ID0gW2csIC4uLmdyZXN0XTtcbiAgICAgICAgICAgICAgICB0aGlzLmxlbmd0aCA9IHRoaXMuI3BhdHRlcm5MaXN0Lmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuaXNEcml2ZSgpIHx8IHRoaXMuaXNBYnNvbHV0ZSgpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgW3AxLCAuLi5wcmVzdF0gPSB0aGlzLiNwYXR0ZXJuTGlzdDtcbiAgICAgICAgICAgICAgICBjb25zdCBbZzEsIC4uLmdyZXN0XSA9IHRoaXMuI2dsb2JMaXN0O1xuICAgICAgICAgICAgICAgIGlmIChwcmVzdFswXSA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZW5kcyBpbiAvXG4gICAgICAgICAgICAgICAgICAgIHByZXN0LnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgIGdyZXN0LnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHAgPSBwMSArICcvJztcbiAgICAgICAgICAgICAgICBjb25zdCBnID0gZzEgKyAnLyc7XG4gICAgICAgICAgICAgICAgdGhpcy4jcGF0dGVybkxpc3QgPSBbcCwgLi4ucHJlc3RdO1xuICAgICAgICAgICAgICAgIHRoaXMuI2dsb2JMaXN0ID0gW2csIC4uLmdyZXN0XTtcbiAgICAgICAgICAgICAgICB0aGlzLmxlbmd0aCA9IHRoaXMuI3BhdHRlcm5MaXN0Lmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgZmlyc3QgZW50cnkgaW4gdGhlIHBhcnNlZCBsaXN0IG9mIHBhdHRlcm5zXG4gICAgICovXG4gICAgcGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3BhdHRlcm5MaXN0W3RoaXMuI2luZGV4XTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogdHJ1ZSBvZiBpZiBwYXR0ZXJuKCkgcmV0dXJucyBhIHN0cmluZ1xuICAgICAqL1xuICAgIGlzU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHRoaXMuI3BhdHRlcm5MaXN0W3RoaXMuI2luZGV4XSA9PT0gJ3N0cmluZyc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHRydWUgb2YgaWYgcGF0dGVybigpIHJldHVybnMgR0xPQlNUQVJcbiAgICAgKi9cbiAgICBpc0dsb2JzdGFyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcGF0dGVybkxpc3RbdGhpcy4jaW5kZXhdID09PSBtaW5pbWF0Y2hfMS5HTE9CU1RBUjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogdHJ1ZSBpZiBwYXR0ZXJuKCkgcmV0dXJucyBhIHJlZ2V4cFxuICAgICAqL1xuICAgIGlzUmVnRXhwKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcGF0dGVybkxpc3RbdGhpcy4jaW5kZXhdIGluc3RhbmNlb2YgUmVnRXhwO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgLy1qb2luZWQgc2V0IG9mIGdsb2IgcGFydHMgdGhhdCBtYWtlIHVwIHRoaXMgcGF0dGVyblxuICAgICAqL1xuICAgIGdsb2JTdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy4jZ2xvYlN0cmluZyA9XG4gICAgICAgICAgICB0aGlzLiNnbG9iU3RyaW5nIHx8XG4gICAgICAgICAgICAgICAgKHRoaXMuI2luZGV4ID09PSAwID9cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0Fic29sdXRlKCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jZ2xvYkxpc3RbMF0gKyB0aGlzLiNnbG9iTGlzdC5zbGljZSgxKS5qb2luKCcvJylcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy4jZ2xvYkxpc3Quam9pbignLycpXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy4jZ2xvYkxpc3Quc2xpY2UodGhpcy4jaW5kZXgpLmpvaW4oJy8nKSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiB0cnVlIGlmIHRoZXJlIGFyZSBtb3JlIHBhdHRlcm4gcGFydHMgYWZ0ZXIgdGhpcyBvbmVcbiAgICAgKi9cbiAgICBoYXNNb3JlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sZW5ndGggPiB0aGlzLiNpbmRleCArIDE7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSByZXN0IG9mIHRoZSBwYXR0ZXJuIGFmdGVyIHRoaXMgcGFydCwgb3IgbnVsbCBpZiB0aGlzIGlzIHRoZSBlbmRcbiAgICAgKi9cbiAgICByZXN0KCkge1xuICAgICAgICBpZiAodGhpcy4jcmVzdCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuI3Jlc3Q7XG4gICAgICAgIGlmICghdGhpcy5oYXNNb3JlKCkpXG4gICAgICAgICAgICByZXR1cm4gKHRoaXMuI3Jlc3QgPSBudWxsKTtcbiAgICAgICAgdGhpcy4jcmVzdCA9IG5ldyBQYXR0ZXJuKHRoaXMuI3BhdHRlcm5MaXN0LCB0aGlzLiNnbG9iTGlzdCwgdGhpcy4jaW5kZXggKyAxLCB0aGlzLiNwbGF0Zm9ybSk7XG4gICAgICAgIHRoaXMuI3Jlc3QuI2lzQWJzb2x1dGUgPSB0aGlzLiNpc0Fic29sdXRlO1xuICAgICAgICB0aGlzLiNyZXN0LiNpc1VOQyA9IHRoaXMuI2lzVU5DO1xuICAgICAgICB0aGlzLiNyZXN0LiNpc0RyaXZlID0gdGhpcy4jaXNEcml2ZTtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3Jlc3Q7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHRydWUgaWYgdGhlIHBhdHRlcm4gcmVwcmVzZW50cyBhIC8vdW5jL3BhdGgvIG9uIHdpbmRvd3NcbiAgICAgKi9cbiAgICBpc1VOQygpIHtcbiAgICAgICAgY29uc3QgcGwgPSB0aGlzLiNwYXR0ZXJuTGlzdDtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2lzVU5DICE9PSB1bmRlZmluZWQgP1xuICAgICAgICAgICAgdGhpcy4jaXNVTkNcbiAgICAgICAgICAgIDogKHRoaXMuI2lzVU5DID1cbiAgICAgICAgICAgICAgICB0aGlzLiNwbGF0Zm9ybSA9PT0gJ3dpbjMyJyAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLiNpbmRleCA9PT0gMCAmJlxuICAgICAgICAgICAgICAgICAgICBwbFswXSA9PT0gJycgJiZcbiAgICAgICAgICAgICAgICAgICAgcGxbMV0gPT09ICcnICYmXG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBwbFsyXSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgICAgICAgICAgISFwbFsyXSAmJlxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgcGxbM10gPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAgICAgICAgICEhcGxbM10pO1xuICAgIH1cbiAgICAvLyBwYXR0ZXJuIGxpa2UgQzovLi4uXG4gICAgLy8gc3BsaXQgPSBbJ0M6JywgLi4uXVxuICAgIC8vIFhYWDogd291bGQgYmUgbmljZSB0byBoYW5kbGUgcGF0dGVybnMgbGlrZSBgYzoqYCB0byB0ZXN0IHRoZSBjd2RcbiAgICAvLyBpbiBjOiBmb3IgKiwgYnV0IEkgZG9uJ3Qga25vdyBvZiBhIHdheSB0byBldmVuIGZpZ3VyZSBvdXQgd2hhdCB0aGF0XG4gICAgLy8gY3dkIGlzIHdpdGhvdXQgYWN0dWFsbHkgY2hkaXInaW5nIGludG8gaXQ/XG4gICAgLyoqXG4gICAgICogVHJ1ZSBpZiB0aGUgcGF0dGVybiBzdGFydHMgd2l0aCBhIGRyaXZlIGxldHRlciBvbiBXaW5kb3dzXG4gICAgICovXG4gICAgaXNEcml2ZSgpIHtcbiAgICAgICAgY29uc3QgcGwgPSB0aGlzLiNwYXR0ZXJuTGlzdDtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2lzRHJpdmUgIT09IHVuZGVmaW5lZCA/XG4gICAgICAgICAgICB0aGlzLiNpc0RyaXZlXG4gICAgICAgICAgICA6ICh0aGlzLiNpc0RyaXZlID1cbiAgICAgICAgICAgICAgICB0aGlzLiNwbGF0Zm9ybSA9PT0gJ3dpbjMyJyAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLiNpbmRleCA9PT0gMCAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxlbmd0aCA+IDEgJiZcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHBsWzBdID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgICAgICAgICAvXlthLXpdOiQvaS50ZXN0KHBsWzBdKSk7XG4gICAgfVxuICAgIC8vIHBhdHRlcm4gPSAnLycgb3IgJy8uLi4nIG9yICcveC8uLi4nXG4gICAgLy8gc3BsaXQgPSBbJycsICcnXSBvciBbJycsIC4uLl0gb3IgWycnLCAneCcsIC4uLl1cbiAgICAvLyBEcml2ZSBhbmQgVU5DIGJvdGggY29uc2lkZXJlZCBhYnNvbHV0ZSBvbiB3aW5kb3dzXG4gICAgLyoqXG4gICAgICogVHJ1ZSBpZiB0aGUgcGF0dGVybiBpcyByb290ZWQgb24gYW4gYWJzb2x1dGUgcGF0aFxuICAgICAqL1xuICAgIGlzQWJzb2x1dGUoKSB7XG4gICAgICAgIGNvbnN0IHBsID0gdGhpcy4jcGF0dGVybkxpc3Q7XG4gICAgICAgIHJldHVybiB0aGlzLiNpc0Fic29sdXRlICE9PSB1bmRlZmluZWQgP1xuICAgICAgICAgICAgdGhpcy4jaXNBYnNvbHV0ZVxuICAgICAgICAgICAgOiAodGhpcy4jaXNBYnNvbHV0ZSA9XG4gICAgICAgICAgICAgICAgKHBsWzBdID09PSAnJyAmJiBwbC5sZW5ndGggPiAxKSB8fFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzRHJpdmUoKSB8fFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzVU5DKCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBjb25zdW1lIHRoZSByb290IG9mIHRoZSBwYXR0ZXJuLCBhbmQgcmV0dXJuIGl0XG4gICAgICovXG4gICAgcm9vdCgpIHtcbiAgICAgICAgY29uc3QgcCA9IHRoaXMuI3BhdHRlcm5MaXN0WzBdO1xuICAgICAgICByZXR1cm4gKHR5cGVvZiBwID09PSAnc3RyaW5nJyAmJiB0aGlzLmlzQWJzb2x1dGUoKSAmJiB0aGlzLiNpbmRleCA9PT0gMCkgP1xuICAgICAgICAgICAgcFxuICAgICAgICAgICAgOiAnJztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2hlY2sgdG8gc2VlIGlmIHRoZSBjdXJyZW50IGdsb2JzdGFyIHBhdHRlcm4gaXMgYWxsb3dlZCB0byBmb2xsb3dcbiAgICAgKiBhIHN5bWJvbGljIGxpbmsuXG4gICAgICovXG4gICAgY2hlY2tGb2xsb3dHbG9ic3RhcigpIHtcbiAgICAgICAgcmV0dXJuICEodGhpcy4jaW5kZXggPT09IDAgfHxcbiAgICAgICAgICAgICF0aGlzLmlzR2xvYnN0YXIoKSB8fFxuICAgICAgICAgICAgIXRoaXMuI2ZvbGxvd0dsb2JzdGFyKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTWFyayB0aGF0IHRoZSBjdXJyZW50IGdsb2JzdGFyIHBhdHRlcm4gaXMgZm9sbG93aW5nIGEgc3ltYm9saWMgbGlua1xuICAgICAqL1xuICAgIG1hcmtGb2xsb3dHbG9ic3RhcigpIHtcbiAgICAgICAgaWYgKHRoaXMuI2luZGV4ID09PSAwIHx8ICF0aGlzLmlzR2xvYnN0YXIoKSB8fCAhdGhpcy4jZm9sbG93R2xvYnN0YXIpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHRoaXMuI2ZvbGxvd0dsb2JzdGFyID0gZmFsc2U7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cbmV4cG9ydHMuUGF0dGVybiA9IFBhdHRlcm47XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wYXR0ZXJuLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBnaXZlIGl0IGEgcGF0dGVybiwgYW5kIGl0J2xsIGJlIGFibGUgdG8gdGVsbCB5b3UgaWZcbi8vIGEgZ2l2ZW4gcGF0aCBzaG91bGQgYmUgaWdub3JlZC5cbi8vIElnbm9yaW5nIGEgcGF0aCBpZ25vcmVzIGl0cyBjaGlsZHJlbiBpZiB0aGUgcGF0dGVybiBlbmRzIGluIC8qKlxuLy8gSWdub3JlcyBhcmUgYWx3YXlzIHBhcnNlZCBpbiBkb3Q6dHJ1ZSBtb2RlXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLklnbm9yZSA9IHZvaWQgMDtcbmNvbnN0IG1pbmltYXRjaF8xID0gcmVxdWlyZShcIm1pbmltYXRjaFwiKTtcbmNvbnN0IHBhdHRlcm5fanNfMSA9IHJlcXVpcmUoXCIuL3BhdHRlcm4uanNcIik7XG5jb25zdCBkZWZhdWx0UGxhdGZvcm0gPSAodHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmXG4gICAgcHJvY2VzcyAmJlxuICAgIHR5cGVvZiBwcm9jZXNzLnBsYXRmb3JtID09PSAnc3RyaW5nJykgP1xuICAgIHByb2Nlc3MucGxhdGZvcm1cbiAgICA6ICdsaW51eCc7XG4vKipcbiAqIENsYXNzIHVzZWQgdG8gcHJvY2VzcyBpZ25vcmVkIHBhdHRlcm5zXG4gKi9cbmNsYXNzIElnbm9yZSB7XG4gICAgcmVsYXRpdmU7XG4gICAgcmVsYXRpdmVDaGlsZHJlbjtcbiAgICBhYnNvbHV0ZTtcbiAgICBhYnNvbHV0ZUNoaWxkcmVuO1xuICAgIHBsYXRmb3JtO1xuICAgIG1tb3B0cztcbiAgICBjb25zdHJ1Y3RvcihpZ25vcmVkLCB7IG5vYnJhY2UsIG5vY2FzZSwgbm9leHQsIG5vZ2xvYnN0YXIsIHBsYXRmb3JtID0gZGVmYXVsdFBsYXRmb3JtLCB9KSB7XG4gICAgICAgIHRoaXMucmVsYXRpdmUgPSBbXTtcbiAgICAgICAgdGhpcy5hYnNvbHV0ZSA9IFtdO1xuICAgICAgICB0aGlzLnJlbGF0aXZlQ2hpbGRyZW4gPSBbXTtcbiAgICAgICAgdGhpcy5hYnNvbHV0ZUNoaWxkcmVuID0gW107XG4gICAgICAgIHRoaXMucGxhdGZvcm0gPSBwbGF0Zm9ybTtcbiAgICAgICAgdGhpcy5tbW9wdHMgPSB7XG4gICAgICAgICAgICBkb3Q6IHRydWUsXG4gICAgICAgICAgICBub2JyYWNlLFxuICAgICAgICAgICAgbm9jYXNlLFxuICAgICAgICAgICAgbm9leHQsXG4gICAgICAgICAgICBub2dsb2JzdGFyLFxuICAgICAgICAgICAgb3B0aW1pemF0aW9uTGV2ZWw6IDIsXG4gICAgICAgICAgICBwbGF0Zm9ybSxcbiAgICAgICAgICAgIG5vY29tbWVudDogdHJ1ZSxcbiAgICAgICAgICAgIG5vbmVnYXRlOiB0cnVlLFxuICAgICAgICB9O1xuICAgICAgICBmb3IgKGNvbnN0IGlnbiBvZiBpZ25vcmVkKVxuICAgICAgICAgICAgdGhpcy5hZGQoaWduKTtcbiAgICB9XG4gICAgYWRkKGlnbikge1xuICAgICAgICAvLyB0aGlzIGlzIGEgbGl0dGxlIHdlaXJkLCBidXQgaXQgZ2l2ZXMgdXMgYSBjbGVhbiBzZXQgb2Ygb3B0aW1pemVkXG4gICAgICAgIC8vIG1pbmltYXRjaCBtYXRjaGVycywgd2l0aG91dCBnZXR0aW5nIHRyaXBwZWQgdXAgaWYgb25lIG9mIHRoZW1cbiAgICAgICAgLy8gZW5kcyBpbiAvKiogaW5zaWRlIGEgYnJhY2Ugc2VjdGlvbiwgYW5kIGl0J3Mgb25seSBpbmVmZmljaWVudCBhdFxuICAgICAgICAvLyB0aGUgc3RhcnQgb2YgdGhlIHdhbGssIG5vdCBhbG9uZyBpdC5cbiAgICAgICAgLy8gSXQnZCBiZSBuaWNlIGlmIHRoZSBQYXR0ZXJuIGNsYXNzIGp1c3QgaGFkIGEgLnRlc3QoKSBtZXRob2QsIGJ1dFxuICAgICAgICAvLyBoYW5kbGluZyBnbG9ic3RhcnMgaXMgYSBiaXQgb2YgYSBwaXRhLCBhbmQgdGhhdCBjb2RlIGFscmVhZHkgbGl2ZXNcbiAgICAgICAgLy8gaW4gbWluaW1hdGNoIGFueXdheS5cbiAgICAgICAgLy8gQW5vdGhlciB3YXkgd291bGQgYmUgaWYgbWF5YmUgTWluaW1hdGNoIGNvdWxkIHRha2UgaXRzIHNldC9nbG9iUGFydHNcbiAgICAgICAgLy8gYXMgYW4gb3B0aW9uLCBhbmQgdGhlbiB3ZSBjb3VsZCBhdCBsZWFzdCBqdXN0IHVzZSBQYXR0ZXJuIHRvIHRlc3RcbiAgICAgICAgLy8gZm9yIGFic29sdXRlLW5lc3MuXG4gICAgICAgIC8vIFlldCBhbm90aGVyIHdheSwgTWluaW1hdGNoIGNvdWxkIHRha2UgYW4gYXJyYXkgb2YgZ2xvYiBzdHJpbmdzLCBhbmRcbiAgICAgICAgLy8gYSBjd2Qgb3B0aW9uLCBhbmQgZG8gdGhlIHJpZ2h0IHRoaW5nLlxuICAgICAgICBjb25zdCBtbSA9IG5ldyBtaW5pbWF0Y2hfMS5NaW5pbWF0Y2goaWduLCB0aGlzLm1tb3B0cyk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW0uc2V0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBtbS5zZXRbaV07XG4gICAgICAgICAgICBjb25zdCBnbG9iUGFydHMgPSBtbS5nbG9iUGFydHNbaV07XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgICAgIGlmICghcGFyc2VkIHx8ICFnbG9iUGFydHMpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcGF0dGVybiBvYmplY3QnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHN0cmlwIG9mZiBsZWFkaW5nIC4vIHBvcnRpb25zXG4gICAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vaXNhYWNzL25vZGUtZ2xvYi9pc3N1ZXMvNTcwXG4gICAgICAgICAgICB3aGlsZSAocGFyc2VkWzBdID09PSAnLicgJiYgZ2xvYlBhcnRzWzBdID09PSAnLicpIHtcbiAgICAgICAgICAgICAgICBwYXJzZWQuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICBnbG9iUGFydHMuc2hpZnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICBjb25zdCBwID0gbmV3IHBhdHRlcm5fanNfMS5QYXR0ZXJuKHBhcnNlZCwgZ2xvYlBhcnRzLCAwLCB0aGlzLnBsYXRmb3JtKTtcbiAgICAgICAgICAgIGNvbnN0IG0gPSBuZXcgbWluaW1hdGNoXzEuTWluaW1hdGNoKHAuZ2xvYlN0cmluZygpLCB0aGlzLm1tb3B0cyk7XG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGdsb2JQYXJ0c1tnbG9iUGFydHMubGVuZ3RoIC0gMV0gPT09ICcqKic7XG4gICAgICAgICAgICBjb25zdCBhYnNvbHV0ZSA9IHAuaXNBYnNvbHV0ZSgpO1xuICAgICAgICAgICAgaWYgKGFic29sdXRlKVxuICAgICAgICAgICAgICAgIHRoaXMuYWJzb2x1dGUucHVzaChtKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aGlzLnJlbGF0aXZlLnB1c2gobSk7XG4gICAgICAgICAgICBpZiAoY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBpZiAoYWJzb2x1dGUpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWJzb2x1dGVDaGlsZHJlbi5wdXNoKG0pO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWxhdGl2ZUNoaWxkcmVuLnB1c2gobSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWdub3JlZChwKSB7XG4gICAgICAgIGNvbnN0IGZ1bGxwYXRoID0gcC5mdWxscGF0aCgpO1xuICAgICAgICBjb25zdCBmdWxscGF0aHMgPSBgJHtmdWxscGF0aH0vYDtcbiAgICAgICAgY29uc3QgcmVsYXRpdmUgPSBwLnJlbGF0aXZlKCkgfHwgJy4nO1xuICAgICAgICBjb25zdCByZWxhdGl2ZXMgPSBgJHtyZWxhdGl2ZX0vYDtcbiAgICAgICAgZm9yIChjb25zdCBtIG9mIHRoaXMucmVsYXRpdmUpIHtcbiAgICAgICAgICAgIGlmIChtLm1hdGNoKHJlbGF0aXZlKSB8fCBtLm1hdGNoKHJlbGF0aXZlcykpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBtIG9mIHRoaXMuYWJzb2x1dGUpIHtcbiAgICAgICAgICAgIGlmIChtLm1hdGNoKGZ1bGxwYXRoKSB8fCBtLm1hdGNoKGZ1bGxwYXRocykpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjaGlsZHJlbklnbm9yZWQocCkge1xuICAgICAgICBjb25zdCBmdWxscGF0aCA9IHAuZnVsbHBhdGgoKSArICcvJztcbiAgICAgICAgY29uc3QgcmVsYXRpdmUgPSAocC5yZWxhdGl2ZSgpIHx8ICcuJykgKyAnLyc7XG4gICAgICAgIGZvciAoY29uc3QgbSBvZiB0aGlzLnJlbGF0aXZlQ2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGlmIChtLm1hdGNoKHJlbGF0aXZlKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IG0gb2YgdGhpcy5hYnNvbHV0ZUNoaWxkcmVuKSB7XG4gICAgICAgICAgICBpZiAobS5tYXRjaChmdWxscGF0aCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbmV4cG9ydHMuSWdub3JlID0gSWdub3JlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aWdub3JlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBzeW5jaHJvbm91cyB1dGlsaXR5IGZvciBmaWx0ZXJpbmcgZW50cmllcyBhbmQgY2FsY3VsYXRpbmcgc3Vid2Fsa3Ncbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUHJvY2Vzc29yID0gZXhwb3J0cy5TdWJXYWxrcyA9IGV4cG9ydHMuTWF0Y2hSZWNvcmQgPSBleHBvcnRzLkhhc1dhbGtlZENhY2hlID0gdm9pZCAwO1xuY29uc3QgbWluaW1hdGNoXzEgPSByZXF1aXJlKFwibWluaW1hdGNoXCIpO1xuLyoqXG4gKiBBIGNhY2hlIG9mIHdoaWNoIHBhdHRlcm5zIGhhdmUgYmVlbiBwcm9jZXNzZWQgZm9yIGEgZ2l2ZW4gUGF0aFxuICovXG5jbGFzcyBIYXNXYWxrZWRDYWNoZSB7XG4gICAgc3RvcmU7XG4gICAgY29uc3RydWN0b3Ioc3RvcmUgPSBuZXcgTWFwKCkpIHtcbiAgICAgICAgdGhpcy5zdG9yZSA9IHN0b3JlO1xuICAgIH1cbiAgICBjb3B5KCkge1xuICAgICAgICByZXR1cm4gbmV3IEhhc1dhbGtlZENhY2hlKG5ldyBNYXAodGhpcy5zdG9yZSkpO1xuICAgIH1cbiAgICBoYXNXYWxrZWQodGFyZ2V0LCBwYXR0ZXJuKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0b3JlLmdldCh0YXJnZXQuZnVsbHBhdGgoKSk/LmhhcyhwYXR0ZXJuLmdsb2JTdHJpbmcoKSk7XG4gICAgfVxuICAgIHN0b3JlV2Fsa2VkKHRhcmdldCwgcGF0dGVybikge1xuICAgICAgICBjb25zdCBmdWxscGF0aCA9IHRhcmdldC5mdWxscGF0aCgpO1xuICAgICAgICBjb25zdCBjYWNoZWQgPSB0aGlzLnN0b3JlLmdldChmdWxscGF0aCk7XG4gICAgICAgIGlmIChjYWNoZWQpXG4gICAgICAgICAgICBjYWNoZWQuYWRkKHBhdHRlcm4uZ2xvYlN0cmluZygpKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5zdG9yZS5zZXQoZnVsbHBhdGgsIG5ldyBTZXQoW3BhdHRlcm4uZ2xvYlN0cmluZygpXSkpO1xuICAgIH1cbn1cbmV4cG9ydHMuSGFzV2Fsa2VkQ2FjaGUgPSBIYXNXYWxrZWRDYWNoZTtcbi8qKlxuICogQSByZWNvcmQgb2Ygd2hpY2ggcGF0aHMgaGF2ZSBiZWVuIG1hdGNoZWQgaW4gYSBnaXZlbiB3YWxrIHN0ZXAsXG4gKiBhbmQgd2hldGhlciB0aGV5IG9ubHkgYXJlIGNvbnNpZGVyZWQgYSBtYXRjaCBpZiB0aGV5IGFyZSBhIGRpcmVjdG9yeSxcbiAqIGFuZCB3aGV0aGVyIHRoZWlyIGFic29sdXRlIG9yIHJlbGF0aXZlIHBhdGggc2hvdWxkIGJlIHJldHVybmVkLlxuICovXG5jbGFzcyBNYXRjaFJlY29yZCB7XG4gICAgc3RvcmUgPSBuZXcgTWFwKCk7XG4gICAgYWRkKHRhcmdldCwgYWJzb2x1dGUsIGlmRGlyKSB7XG4gICAgICAgIGNvbnN0IG4gPSAoYWJzb2x1dGUgPyAyIDogMCkgfCAoaWZEaXIgPyAxIDogMCk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLnN0b3JlLmdldCh0YXJnZXQpO1xuICAgICAgICB0aGlzLnN0b3JlLnNldCh0YXJnZXQsIGN1cnJlbnQgPT09IHVuZGVmaW5lZCA/IG4gOiBuICYgY3VycmVudCk7XG4gICAgfVxuICAgIC8vIG1hdGNoLCBhYnNvbHV0ZSwgaWZkaXJcbiAgICBlbnRyaWVzKCkge1xuICAgICAgICByZXR1cm4gWy4uLnRoaXMuc3RvcmUuZW50cmllcygpXS5tYXAoKFtwYXRoLCBuXSkgPT4gW1xuICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgICEhKG4gJiAyKSxcbiAgICAgICAgICAgICEhKG4gJiAxKSxcbiAgICAgICAgXSk7XG4gICAgfVxufVxuZXhwb3J0cy5NYXRjaFJlY29yZCA9IE1hdGNoUmVjb3JkO1xuLyoqXG4gKiBBIGNvbGxlY3Rpb24gb2YgcGF0dGVybnMgdGhhdCBtdXN0IGJlIHByb2Nlc3NlZCBpbiBhIHN1YnNlcXVlbnQgc3RlcFxuICogZm9yIGEgZ2l2ZW4gcGF0aC5cbiAqL1xuY2xhc3MgU3ViV2Fsa3Mge1xuICAgIHN0b3JlID0gbmV3IE1hcCgpO1xuICAgIGFkZCh0YXJnZXQsIHBhdHRlcm4pIHtcbiAgICAgICAgaWYgKCF0YXJnZXQuY2FuUmVhZGRpcigpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3VicyA9IHRoaXMuc3RvcmUuZ2V0KHRhcmdldCk7XG4gICAgICAgIGlmIChzdWJzKSB7XG4gICAgICAgICAgICBpZiAoIXN1YnMuZmluZChwID0+IHAuZ2xvYlN0cmluZygpID09PSBwYXR0ZXJuLmdsb2JTdHJpbmcoKSkpIHtcbiAgICAgICAgICAgICAgICBzdWJzLnB1c2gocGF0dGVybik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5zdG9yZS5zZXQodGFyZ2V0LCBbcGF0dGVybl0pO1xuICAgIH1cbiAgICBnZXQodGFyZ2V0KSB7XG4gICAgICAgIGNvbnN0IHN1YnMgPSB0aGlzLnN0b3JlLmdldCh0YXJnZXQpO1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgaWYgKCFzdWJzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2F0dGVtcHRpbmcgdG8gd2FsayB1bmtub3duIHBhdGgnKTtcbiAgICAgICAgfVxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICByZXR1cm4gc3VicztcbiAgICB9XG4gICAgZW50cmllcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMua2V5cygpLm1hcChrID0+IFtrLCB0aGlzLnN0b3JlLmdldChrKV0pO1xuICAgIH1cbiAgICBrZXlzKCkge1xuICAgICAgICByZXR1cm4gWy4uLnRoaXMuc3RvcmUua2V5cygpXS5maWx0ZXIodCA9PiB0LmNhblJlYWRkaXIoKSk7XG4gICAgfVxufVxuZXhwb3J0cy5TdWJXYWxrcyA9IFN1YldhbGtzO1xuLyoqXG4gKiBUaGUgY2xhc3MgdGhhdCBwcm9jZXNzZXMgcGF0dGVybnMgZm9yIGEgZ2l2ZW4gcGF0aC5cbiAqXG4gKiBIYW5kbGVzIGNoaWxkIGVudHJ5IGZpbHRlcmluZywgYW5kIGRldGVybWluaW5nIHdoZXRoZXIgYSBwYXRoJ3NcbiAqIGRpcmVjdG9yeSBjb250ZW50cyBtdXN0IGJlIHJlYWQuXG4gKi9cbmNsYXNzIFByb2Nlc3NvciB7XG4gICAgaGFzV2Fsa2VkQ2FjaGU7XG4gICAgbWF0Y2hlcyA9IG5ldyBNYXRjaFJlY29yZCgpO1xuICAgIHN1YndhbGtzID0gbmV3IFN1YldhbGtzKCk7XG4gICAgcGF0dGVybnM7XG4gICAgZm9sbG93O1xuICAgIGRvdDtcbiAgICBvcHRzO1xuICAgIGNvbnN0cnVjdG9yKG9wdHMsIGhhc1dhbGtlZENhY2hlKSB7XG4gICAgICAgIHRoaXMub3B0cyA9IG9wdHM7XG4gICAgICAgIHRoaXMuZm9sbG93ID0gISFvcHRzLmZvbGxvdztcbiAgICAgICAgdGhpcy5kb3QgPSAhIW9wdHMuZG90O1xuICAgICAgICB0aGlzLmhhc1dhbGtlZENhY2hlID1cbiAgICAgICAgICAgIGhhc1dhbGtlZENhY2hlID8gaGFzV2Fsa2VkQ2FjaGUuY29weSgpIDogbmV3IEhhc1dhbGtlZENhY2hlKCk7XG4gICAgfVxuICAgIHByb2Nlc3NQYXR0ZXJucyh0YXJnZXQsIHBhdHRlcm5zKSB7XG4gICAgICAgIHRoaXMucGF0dGVybnMgPSBwYXR0ZXJucztcbiAgICAgICAgY29uc3QgcHJvY2Vzc2luZ1NldCA9IHBhdHRlcm5zLm1hcChwID0+IFt0YXJnZXQsIHBdKTtcbiAgICAgICAgLy8gbWFwIG9mIHBhdGhzIHRvIHRoZSBtYWdpYy1zdGFydGluZyBzdWJ3YWxrcyB0aGV5IG5lZWQgdG8gd2Fsa1xuICAgICAgICAvLyBmaXJzdCBpdGVtIGluIHBhdHRlcm5zIGlzIHRoZSBmaWx0ZXJcbiAgICAgICAgZm9yIChsZXQgW3QsIHBhdHRlcm5dIG9mIHByb2Nlc3NpbmdTZXQpIHtcbiAgICAgICAgICAgIHRoaXMuaGFzV2Fsa2VkQ2FjaGUuc3RvcmVXYWxrZWQodCwgcGF0dGVybik7XG4gICAgICAgICAgICBjb25zdCByb290ID0gcGF0dGVybi5yb290KCk7XG4gICAgICAgICAgICBjb25zdCBhYnNvbHV0ZSA9IHBhdHRlcm4uaXNBYnNvbHV0ZSgpICYmIHRoaXMub3B0cy5hYnNvbHV0ZSAhPT0gZmFsc2U7XG4gICAgICAgICAgICAvLyBzdGFydCBhYnNvbHV0ZSBwYXR0ZXJucyBhdCByb290XG4gICAgICAgICAgICBpZiAocm9vdCkge1xuICAgICAgICAgICAgICAgIHQgPSB0LnJlc29sdmUocm9vdCA9PT0gJy8nICYmIHRoaXMub3B0cy5yb290ICE9PSB1bmRlZmluZWQgP1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdHMucm9vdFxuICAgICAgICAgICAgICAgICAgICA6IHJvb3QpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3QgPSBwYXR0ZXJuLnJlc3QoKTtcbiAgICAgICAgICAgICAgICBpZiAoIXJlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRjaGVzLmFkZCh0LCB0cnVlLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcGF0dGVybiA9IHJlc3Q7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHQuaXNFTk9FTlQoKSlcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGxldCBwO1xuICAgICAgICAgICAgbGV0IHJlc3Q7XG4gICAgICAgICAgICBsZXQgY2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICAgICAgd2hpbGUgKHR5cGVvZiAocCA9IHBhdHRlcm4ucGF0dGVybigpKSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgICAgICAocmVzdCA9IHBhdHRlcm4ucmVzdCgpKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGMgPSB0LnJlc29sdmUocCk7XG4gICAgICAgICAgICAgICAgdCA9IGM7XG4gICAgICAgICAgICAgICAgcGF0dGVybiA9IHJlc3Q7XG4gICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwID0gcGF0dGVybi5wYXR0ZXJuKCk7XG4gICAgICAgICAgICByZXN0ID0gcGF0dGVybi5yZXN0KCk7XG4gICAgICAgICAgICBpZiAoY2hhbmdlZCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmhhc1dhbGtlZENhY2hlLmhhc1dhbGtlZCh0LCBwYXR0ZXJuKSlcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgdGhpcy5oYXNXYWxrZWRDYWNoZS5zdG9yZVdhbGtlZCh0LCBwYXR0ZXJuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIG5vdyB3ZSBoYXZlIGVpdGhlciBhIGZpbmFsIHN0cmluZyBmb3IgYSBrbm93biBlbnRyeSxcbiAgICAgICAgICAgIC8vIG1vcmUgc3RyaW5ncyBmb3IgYW4gdW5rbm93biBlbnRyeSxcbiAgICAgICAgICAgIC8vIG9yIGEgcGF0dGVybiBzdGFydGluZyB3aXRoIG1hZ2ljLCBtb3VudGVkIG9uIHQuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHAgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgLy8gbXVzdCBub3QgYmUgZmluYWwgZW50cnksIG90aGVyd2lzZSB3ZSB3b3VsZCBoYXZlXG4gICAgICAgICAgICAgICAgLy8gY29uY2F0ZW5hdGVkIGl0IGVhcmxpZXIuXG4gICAgICAgICAgICAgICAgY29uc3QgaWZEaXIgPSBwID09PSAnLi4nIHx8IHAgPT09ICcnIHx8IHAgPT09ICcuJztcbiAgICAgICAgICAgICAgICB0aGlzLm1hdGNoZXMuYWRkKHQucmVzb2x2ZShwKSwgYWJzb2x1dGUsIGlmRGlyKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHAgPT09IG1pbmltYXRjaF8xLkdMT0JTVEFSKSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgbm8gcmVzdCwgbWF0Y2ggYW5kIHN1YndhbGsgcGF0dGVyblxuICAgICAgICAgICAgICAgIC8vIGlmIHJlc3QsIHByb2Nlc3MgcmVzdCBhbmQgc3Vid2FsayBwYXR0ZXJuXG4gICAgICAgICAgICAgICAgLy8gaWYgaXQncyBhIHN5bWxpbmssIGJ1dCB3ZSBkaWRuJ3QgZ2V0IGhlcmUgYnkgd2F5IG9mIGFcbiAgICAgICAgICAgICAgICAvLyBnbG9ic3RhciBtYXRjaCAobWVhbmluZyBpdCdzIHRoZSBmaXJzdCB0aW1lIFRISVMgZ2xvYnN0YXJcbiAgICAgICAgICAgICAgICAvLyBoYXMgdHJhdmVyc2VkIGEgc3ltbGluayksIHRoZW4gd2UgZm9sbG93IGl0LiBPdGhlcndpc2UsIHN0b3AuXG4gICAgICAgICAgICAgICAgaWYgKCF0LmlzU3ltYm9saWNMaW5rKCkgfHxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2xsb3cgfHxcbiAgICAgICAgICAgICAgICAgICAgcGF0dGVybi5jaGVja0ZvbGxvd0dsb2JzdGFyKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJ3YWxrcy5hZGQodCwgcGF0dGVybik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHJwID0gcmVzdD8ucGF0dGVybigpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJyZXN0ID0gcmVzdD8ucmVzdCgpO1xuICAgICAgICAgICAgICAgIGlmICghcmVzdCB8fCAoKHJwID09PSAnJyB8fCBycCA9PT0gJy4nKSAmJiAhcnJlc3QpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIG9ubHkgSEFTIHRvIGJlIGEgZGlyIGlmIGl0IGVuZHMgaW4gKiovIG9yICoqLy5cbiAgICAgICAgICAgICAgICAgICAgLy8gYnV0IGVuZGluZyBpbiAqKiB3aWxsIG1hdGNoIGZpbGVzIGFzIHdlbGwuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2hlcy5hZGQodCwgYWJzb2x1dGUsIHJwID09PSAnJyB8fCBycCA9PT0gJy4nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChycCA9PT0gJy4uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyB3b3VsZCBtZWFuIHlvdSdyZSBtYXRjaGluZyAqKi8uLiBhdCB0aGUgZnMgcm9vdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCBubyB0aGFua3MsIEknbSBub3QgZ29ubmEgdGVzdCB0aGF0IHNwZWNpZmljIGNhc2UuXG4gICAgICAgICAgICAgICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRwID0gdC5wYXJlbnQgfHwgdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJyZXN0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2hlcy5hZGQodHAsIGFic29sdXRlLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCF0aGlzLmhhc1dhbGtlZENhY2hlLmhhc1dhbGtlZCh0cCwgcnJlc3QpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJ3YWxrcy5hZGQodHAsIHJyZXN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHAgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN1YndhbGtzLmFkZCh0LCBwYXR0ZXJuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgc3Vid2Fsa1RhcmdldHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN1YndhbGtzLmtleXMoKTtcbiAgICB9XG4gICAgY2hpbGQoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvY2Vzc29yKHRoaXMub3B0cywgdGhpcy5oYXNXYWxrZWRDYWNoZSk7XG4gICAgfVxuICAgIC8vIHJldHVybiBhIG5ldyBQcm9jZXNzb3IgY29udGFpbmluZyB0aGUgc3Vid2Fsa3MgZm9yIGVhY2hcbiAgICAvLyBjaGlsZCBlbnRyeSwgYW5kIGEgc2V0IG9mIG1hdGNoZXMsIGFuZFxuICAgIC8vIGEgaGFzV2Fsa2VkQ2FjaGUgdGhhdCdzIGEgY29weSBvZiB0aGlzIG9uZVxuICAgIC8vIHRoZW4gd2UncmUgZ29pbmcgdG8gY2FsbFxuICAgIGZpbHRlckVudHJpZXMocGFyZW50LCBlbnRyaWVzKSB7XG4gICAgICAgIGNvbnN0IHBhdHRlcm5zID0gdGhpcy5zdWJ3YWxrcy5nZXQocGFyZW50KTtcbiAgICAgICAgLy8gcHV0IG1hdGNoZXMgYW5kIGVudHJ5IHdhbGtzIGludG8gdGhlIHJlc3VsdHMgcHJvY2Vzc29yXG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSB0aGlzLmNoaWxkKCk7XG4gICAgICAgIGZvciAoY29uc3QgZSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgcGF0dGVybnMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhYnNvbHV0ZSA9IHBhdHRlcm4uaXNBYnNvbHV0ZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHAgPSBwYXR0ZXJuLnBhdHRlcm4oKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN0ID0gcGF0dGVybi5yZXN0KCk7XG4gICAgICAgICAgICAgICAgaWYgKHAgPT09IG1pbmltYXRjaF8xLkdMT0JTVEFSKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMudGVzdEdsb2JzdGFyKGUsIHBhdHRlcm4sIHJlc3QsIGFic29sdXRlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAocCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnRlc3RSZWdFeHAoZSwgcCwgcmVzdCwgYWJzb2x1dGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy50ZXN0U3RyaW5nKGUsIHAsIHJlc3QsIGFic29sdXRlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuICAgIHRlc3RHbG9ic3RhcihlLCBwYXR0ZXJuLCByZXN0LCBhYnNvbHV0ZSkge1xuICAgICAgICBpZiAodGhpcy5kb3QgfHwgIWUubmFtZS5zdGFydHNXaXRoKCcuJykpIHtcbiAgICAgICAgICAgIGlmICghcGF0dGVybi5oYXNNb3JlKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1hdGNoZXMuYWRkKGUsIGFic29sdXRlLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5jYW5SZWFkZGlyKCkpIHtcbiAgICAgICAgICAgICAgICAvLyBpZiB3ZSdyZSBpbiBmb2xsb3cgbW9kZSBvciBpdCdzIG5vdCBhIHN5bWxpbmssIGp1c3Qga2VlcFxuICAgICAgICAgICAgICAgIC8vIHRlc3RpbmcgdGhlIHNhbWUgcGF0dGVybi4gSWYgdGhlcmUncyBtb3JlIGFmdGVyIHRoZSBnbG9ic3RhcixcbiAgICAgICAgICAgICAgICAvLyB0aGVuIHRoaXMgc3ltbGluayBjb25zdW1lcyB0aGUgZ2xvYnN0YXIuIElmIG5vdCwgdGhlbiB3ZSBjYW5cbiAgICAgICAgICAgICAgICAvLyBmb2xsb3cgYXQgbW9zdCBPTkUgc3ltbGluayBhbG9uZyB0aGUgd2F5LCBzbyB3ZSBtYXJrIGl0LCB3aGljaFxuICAgICAgICAgICAgICAgIC8vIGFsc28gY2hlY2tzIHRvIGVuc3VyZSB0aGF0IGl0IHdhc24ndCBhbHJlYWR5IG1hcmtlZC5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5mb2xsb3cgfHwgIWUuaXNTeW1ib2xpY0xpbmsoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN1YndhbGtzLmFkZChlLCBwYXR0ZXJuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZS5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN0ICYmIHBhdHRlcm4uY2hlY2tGb2xsb3dHbG9ic3RhcigpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1YndhbGtzLmFkZChlLCByZXN0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChwYXR0ZXJuLm1hcmtGb2xsb3dHbG9ic3RhcigpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1YndhbGtzLmFkZChlLCBwYXR0ZXJuKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBpZiB0aGUgTkVYVCB0aGluZyBtYXRjaGVzIHRoaXMgZW50cnksIHRoZW4gYWxzbyBhZGRcbiAgICAgICAgLy8gdGhlIHJlc3QuXG4gICAgICAgIGlmIChyZXN0KSB7XG4gICAgICAgICAgICBjb25zdCBycCA9IHJlc3QucGF0dGVybigpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBycCA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgICAgICAvLyBkb3RzIGFuZCBlbXB0eSB3ZXJlIGhhbmRsZWQgYWxyZWFkeVxuICAgICAgICAgICAgICAgIHJwICE9PSAnLi4nICYmXG4gICAgICAgICAgICAgICAgcnAgIT09ICcnICYmXG4gICAgICAgICAgICAgICAgcnAgIT09ICcuJykge1xuICAgICAgICAgICAgICAgIHRoaXMudGVzdFN0cmluZyhlLCBycCwgcmVzdC5yZXN0KCksIGFic29sdXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHJwID09PSAnLi4nKSB7XG4gICAgICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICAgICAgY29uc3QgZXAgPSBlLnBhcmVudCB8fCBlO1xuICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICAgICAgdGhpcy5zdWJ3YWxrcy5hZGQoZXAsIHJlc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAocnAgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRlc3RSZWdFeHAoZSwgcnAsIHJlc3QucmVzdCgpLCBhYnNvbHV0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGVzdFJlZ0V4cChlLCBwLCByZXN0LCBhYnNvbHV0ZSkge1xuICAgICAgICBpZiAoIXAudGVzdChlLm5hbWUpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAoIXJlc3QpIHtcbiAgICAgICAgICAgIHRoaXMubWF0Y2hlcy5hZGQoZSwgYWJzb2x1dGUsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3Vid2Fsa3MuYWRkKGUsIHJlc3QpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRlc3RTdHJpbmcoZSwgcCwgcmVzdCwgYWJzb2x1dGUpIHtcbiAgICAgICAgLy8gc2hvdWxkIG5ldmVyIGhhcHBlbj9cbiAgICAgICAgaWYgKCFlLmlzTmFtZWQocCkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmICghcmVzdCkge1xuICAgICAgICAgICAgdGhpcy5tYXRjaGVzLmFkZChlLCBhYnNvbHV0ZSwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zdWJ3YWxrcy5hZGQoZSwgcmVzdCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLlByb2Nlc3NvciA9IFByb2Nlc3Nvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXByb2Nlc3Nvci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5HbG9iU3RyZWFtID0gZXhwb3J0cy5HbG9iV2Fsa2VyID0gZXhwb3J0cy5HbG9iVXRpbCA9IHZvaWQgMDtcbi8qKlxuICogU2luZ2xlLXVzZSB1dGlsaXR5IGNsYXNzZXMgdG8gcHJvdmlkZSBmdW5jdGlvbmFsaXR5IHRvIHRoZSB7QGxpbmsgR2xvYn1cbiAqIG1ldGhvZHMuXG4gKlxuICogQG1vZHVsZVxuICovXG5jb25zdCBtaW5pcGFzc18xID0gcmVxdWlyZShcIm1pbmlwYXNzXCIpO1xuY29uc3QgaWdub3JlX2pzXzEgPSByZXF1aXJlKFwiLi9pZ25vcmUuanNcIik7XG5jb25zdCBwcm9jZXNzb3JfanNfMSA9IHJlcXVpcmUoXCIuL3Byb2Nlc3Nvci5qc1wiKTtcbmNvbnN0IG1ha2VJZ25vcmUgPSAoaWdub3JlLCBvcHRzKSA9PiB0eXBlb2YgaWdub3JlID09PSAnc3RyaW5nJyA/IG5ldyBpZ25vcmVfanNfMS5JZ25vcmUoW2lnbm9yZV0sIG9wdHMpXG4gICAgOiBBcnJheS5pc0FycmF5KGlnbm9yZSkgPyBuZXcgaWdub3JlX2pzXzEuSWdub3JlKGlnbm9yZSwgb3B0cylcbiAgICAgICAgOiBpZ25vcmU7XG4vKipcbiAqIGJhc2ljIHdhbGtpbmcgdXRpbGl0aWVzIHRoYXQgYWxsIHRoZSBnbG9iIHdhbGtlciB0eXBlcyB1c2VcbiAqL1xuY2xhc3MgR2xvYlV0aWwge1xuICAgIHBhdGg7XG4gICAgcGF0dGVybnM7XG4gICAgb3B0cztcbiAgICBzZWVuID0gbmV3IFNldCgpO1xuICAgIHBhdXNlZCA9IGZhbHNlO1xuICAgIGFib3J0ZWQgPSBmYWxzZTtcbiAgICAjb25SZXN1bWUgPSBbXTtcbiAgICAjaWdub3JlO1xuICAgICNzZXA7XG4gICAgc2lnbmFsO1xuICAgIG1heERlcHRoO1xuICAgIGluY2x1ZGVDaGlsZE1hdGNoZXM7XG4gICAgY29uc3RydWN0b3IocGF0dGVybnMsIHBhdGgsIG9wdHMpIHtcbiAgICAgICAgdGhpcy5wYXR0ZXJucyA9IHBhdHRlcm5zO1xuICAgICAgICB0aGlzLnBhdGggPSBwYXRoO1xuICAgICAgICB0aGlzLm9wdHMgPSBvcHRzO1xuICAgICAgICB0aGlzLiNzZXAgPSAhb3B0cy5wb3NpeCAmJiBvcHRzLnBsYXRmb3JtID09PSAnd2luMzInID8gJ1xcXFwnIDogJy8nO1xuICAgICAgICB0aGlzLmluY2x1ZGVDaGlsZE1hdGNoZXMgPSBvcHRzLmluY2x1ZGVDaGlsZE1hdGNoZXMgIT09IGZhbHNlO1xuICAgICAgICBpZiAob3B0cy5pZ25vcmUgfHwgIXRoaXMuaW5jbHVkZUNoaWxkTWF0Y2hlcykge1xuICAgICAgICAgICAgdGhpcy4jaWdub3JlID0gbWFrZUlnbm9yZShvcHRzLmlnbm9yZSA/PyBbXSwgb3B0cyk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaW5jbHVkZUNoaWxkTWF0Y2hlcyAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiB0aGlzLiNpZ25vcmUuYWRkICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbSA9ICdjYW5ub3QgaWdub3JlIGNoaWxkIG1hdGNoZXMsIGlnbm9yZSBsYWNrcyBhZGQoKSBtZXRob2QuJztcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWdub3JlLCBhbHdheXMgc2V0IHdpdGggbWF4RGVwdGgsIGJ1dCBpdCdzIG9wdGlvbmFsIG9uIHRoZVxuICAgICAgICAvLyBHbG9iT3B0aW9ucyB0eXBlXG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICB0aGlzLm1heERlcHRoID0gb3B0cy5tYXhEZXB0aCB8fCBJbmZpbml0eTtcbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgaWYgKG9wdHMuc2lnbmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNpZ25hbCA9IG9wdHMuc2lnbmFsO1xuICAgICAgICAgICAgdGhpcy5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy4jb25SZXN1bWUubGVuZ3RoID0gMDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgICNpZ25vcmVkKHBhdGgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2Vlbi5oYXMocGF0aCkgfHwgISF0aGlzLiNpZ25vcmU/Lmlnbm9yZWQ/LihwYXRoKTtcbiAgICB9XG4gICAgI2NoaWxkcmVuSWdub3JlZChwYXRoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuI2lnbm9yZT8uY2hpbGRyZW5JZ25vcmVkPy4ocGF0aCk7XG4gICAgfVxuICAgIC8vIGJhY2twcmVzc3VyZSBtZWNoYW5pc21cbiAgICBwYXVzZSgpIHtcbiAgICAgICAgdGhpcy5wYXVzZWQgPSB0cnVlO1xuICAgIH1cbiAgICByZXN1bWUoKSB7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICBpZiAodGhpcy5zaWduYWw/LmFib3J0ZWQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIHRoaXMucGF1c2VkID0gZmFsc2U7XG4gICAgICAgIGxldCBmbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgd2hpbGUgKCF0aGlzLnBhdXNlZCAmJiAoZm4gPSB0aGlzLiNvblJlc3VtZS5zaGlmdCgpKSkge1xuICAgICAgICAgICAgZm4oKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBvblJlc3VtZShmbikge1xuICAgICAgICBpZiAodGhpcy5zaWduYWw/LmFib3J0ZWQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICBpZiAoIXRoaXMucGF1c2VkKSB7XG4gICAgICAgICAgICBmbigpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgICAgIHRoaXMuI29uUmVzdW1lLnB1c2goZm4pO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIGRvIHRoZSByZXF1aXNpdGUgcmVhbHBhdGgvc3RhdCBjaGVja2luZywgYW5kIHJldHVybiB0aGUgcGF0aFxuICAgIC8vIHRvIGFkZCBvciB1bmRlZmluZWQgdG8gZmlsdGVyIGl0IG91dC5cbiAgICBhc3luYyBtYXRjaENoZWNrKGUsIGlmRGlyKSB7XG4gICAgICAgIGlmIChpZkRpciAmJiB0aGlzLm9wdHMubm9kaXIpXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICBsZXQgcnBjO1xuICAgICAgICBpZiAodGhpcy5vcHRzLnJlYWxwYXRoKSB7XG4gICAgICAgICAgICBycGMgPSBlLnJlYWxwYXRoQ2FjaGVkKCkgfHwgKGF3YWl0IGUucmVhbHBhdGgoKSk7XG4gICAgICAgICAgICBpZiAoIXJwYylcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgZSA9IHJwYztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZWVkU3RhdCA9IGUuaXNVbmtub3duKCkgfHwgdGhpcy5vcHRzLnN0YXQ7XG4gICAgICAgIGNvbnN0IHMgPSBuZWVkU3RhdCA/IGF3YWl0IGUubHN0YXQoKSA6IGU7XG4gICAgICAgIGlmICh0aGlzLm9wdHMuZm9sbG93ICYmIHRoaXMub3B0cy5ub2RpciAmJiBzPy5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBhd2FpdCBzLnJlYWxwYXRoKCk7XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgICAgIGlmICh0YXJnZXQgJiYgKHRhcmdldC5pc1Vua25vd24oKSB8fCB0aGlzLm9wdHMuc3RhdCkpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0YXJnZXQubHN0YXQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubWF0Y2hDaGVja1Rlc3QocywgaWZEaXIpO1xuICAgIH1cbiAgICBtYXRjaENoZWNrVGVzdChlLCBpZkRpcikge1xuICAgICAgICByZXR1cm4gKGUgJiZcbiAgICAgICAgICAgICh0aGlzLm1heERlcHRoID09PSBJbmZpbml0eSB8fCBlLmRlcHRoKCkgPD0gdGhpcy5tYXhEZXB0aCkgJiZcbiAgICAgICAgICAgICghaWZEaXIgfHwgZS5jYW5SZWFkZGlyKCkpICYmXG4gICAgICAgICAgICAoIXRoaXMub3B0cy5ub2RpciB8fCAhZS5pc0RpcmVjdG9yeSgpKSAmJlxuICAgICAgICAgICAgKCF0aGlzLm9wdHMubm9kaXIgfHxcbiAgICAgICAgICAgICAgICAhdGhpcy5vcHRzLmZvbGxvdyB8fFxuICAgICAgICAgICAgICAgICFlLmlzU3ltYm9saWNMaW5rKCkgfHxcbiAgICAgICAgICAgICAgICAhZS5yZWFscGF0aENhY2hlZCgpPy5pc0RpcmVjdG9yeSgpKSAmJlxuICAgICAgICAgICAgIXRoaXMuI2lnbm9yZWQoZSkpID9cbiAgICAgICAgICAgIGVcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICBtYXRjaENoZWNrU3luYyhlLCBpZkRpcikge1xuICAgICAgICBpZiAoaWZEaXIgJiYgdGhpcy5vcHRzLm5vZGlyKVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IHJwYztcbiAgICAgICAgaWYgKHRoaXMub3B0cy5yZWFscGF0aCkge1xuICAgICAgICAgICAgcnBjID0gZS5yZWFscGF0aENhY2hlZCgpIHx8IGUucmVhbHBhdGhTeW5jKCk7XG4gICAgICAgICAgICBpZiAoIXJwYylcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgZSA9IHJwYztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZWVkU3RhdCA9IGUuaXNVbmtub3duKCkgfHwgdGhpcy5vcHRzLnN0YXQ7XG4gICAgICAgIGNvbnN0IHMgPSBuZWVkU3RhdCA/IGUubHN0YXRTeW5jKCkgOiBlO1xuICAgICAgICBpZiAodGhpcy5vcHRzLmZvbGxvdyAmJiB0aGlzLm9wdHMubm9kaXIgJiYgcz8uaXNTeW1ib2xpY0xpbmsoKSkge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gcy5yZWFscGF0aFN5bmMoKTtcbiAgICAgICAgICAgIGlmICh0YXJnZXQgJiYgKHRhcmdldD8uaXNVbmtub3duKCkgfHwgdGhpcy5vcHRzLnN0YXQpKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0LmxzdGF0U3luYygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLm1hdGNoQ2hlY2tUZXN0KHMsIGlmRGlyKTtcbiAgICB9XG4gICAgbWF0Y2hGaW5pc2goZSwgYWJzb2x1dGUpIHtcbiAgICAgICAgaWYgKHRoaXMuI2lnbm9yZWQoZSkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIC8vIHdlIGtub3cgd2UgaGF2ZSBhbiBpZ25vcmUgaWYgdGhpcyBpcyBmYWxzZSwgYnV0IFRTIGRvZXNuJ3RcbiAgICAgICAgaWYgKCF0aGlzLmluY2x1ZGVDaGlsZE1hdGNoZXMgJiYgdGhpcy4jaWdub3JlPy5hZGQpIHtcbiAgICAgICAgICAgIGNvbnN0IGlnbiA9IGAke2UucmVsYXRpdmVQb3NpeCgpfS8qKmA7XG4gICAgICAgICAgICB0aGlzLiNpZ25vcmUuYWRkKGlnbik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWJzID0gdGhpcy5vcHRzLmFic29sdXRlID09PSB1bmRlZmluZWQgPyBhYnNvbHV0ZSA6IHRoaXMub3B0cy5hYnNvbHV0ZTtcbiAgICAgICAgdGhpcy5zZWVuLmFkZChlKTtcbiAgICAgICAgY29uc3QgbWFyayA9IHRoaXMub3B0cy5tYXJrICYmIGUuaXNEaXJlY3RvcnkoKSA/IHRoaXMuI3NlcCA6ICcnO1xuICAgICAgICAvLyBvaywgd2UgaGF2ZSB3aGF0IHdlIG5lZWQhXG4gICAgICAgIGlmICh0aGlzLm9wdHMud2l0aEZpbGVUeXBlcykge1xuICAgICAgICAgICAgdGhpcy5tYXRjaEVtaXQoZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYWJzKSB7XG4gICAgICAgICAgICBjb25zdCBhYnMgPSB0aGlzLm9wdHMucG9zaXggPyBlLmZ1bGxwYXRoUG9zaXgoKSA6IGUuZnVsbHBhdGgoKTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2hFbWl0KGFicyArIG1hcmspO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcmVsID0gdGhpcy5vcHRzLnBvc2l4ID8gZS5yZWxhdGl2ZVBvc2l4KCkgOiBlLnJlbGF0aXZlKCk7XG4gICAgICAgICAgICBjb25zdCBwcmUgPSB0aGlzLm9wdHMuZG90UmVsYXRpdmUgJiYgIXJlbC5zdGFydHNXaXRoKCcuLicgKyB0aGlzLiNzZXApID9cbiAgICAgICAgICAgICAgICAnLicgKyB0aGlzLiNzZXBcbiAgICAgICAgICAgICAgICA6ICcnO1xuICAgICAgICAgICAgdGhpcy5tYXRjaEVtaXQoIXJlbCA/ICcuJyArIG1hcmsgOiBwcmUgKyByZWwgKyBtYXJrKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBtYXRjaChlLCBhYnNvbHV0ZSwgaWZEaXIpIHtcbiAgICAgICAgY29uc3QgcCA9IGF3YWl0IHRoaXMubWF0Y2hDaGVjayhlLCBpZkRpcik7XG4gICAgICAgIGlmIChwKVxuICAgICAgICAgICAgdGhpcy5tYXRjaEZpbmlzaChwLCBhYnNvbHV0ZSk7XG4gICAgfVxuICAgIG1hdGNoU3luYyhlLCBhYnNvbHV0ZSwgaWZEaXIpIHtcbiAgICAgICAgY29uc3QgcCA9IHRoaXMubWF0Y2hDaGVja1N5bmMoZSwgaWZEaXIpO1xuICAgICAgICBpZiAocClcbiAgICAgICAgICAgIHRoaXMubWF0Y2hGaW5pc2gocCwgYWJzb2x1dGUpO1xuICAgIH1cbiAgICB3YWxrQ0IodGFyZ2V0LCBwYXR0ZXJucywgY2IpIHtcbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIGlmICh0aGlzLnNpZ25hbD8uYWJvcnRlZClcbiAgICAgICAgICAgIGNiKCk7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIHRoaXMud2Fsa0NCMih0YXJnZXQsIHBhdHRlcm5zLCBuZXcgcHJvY2Vzc29yX2pzXzEuUHJvY2Vzc29yKHRoaXMub3B0cyksIGNiKTtcbiAgICB9XG4gICAgd2Fsa0NCMih0YXJnZXQsIHBhdHRlcm5zLCBwcm9jZXNzb3IsIGNiKSB7XG4gICAgICAgIGlmICh0aGlzLiNjaGlsZHJlbklnbm9yZWQodGFyZ2V0KSlcbiAgICAgICAgICAgIHJldHVybiBjYigpO1xuICAgICAgICBpZiAodGhpcy5zaWduYWw/LmFib3J0ZWQpXG4gICAgICAgICAgICBjYigpO1xuICAgICAgICBpZiAodGhpcy5wYXVzZWQpIHtcbiAgICAgICAgICAgIHRoaXMub25SZXN1bWUoKCkgPT4gdGhpcy53YWxrQ0IyKHRhcmdldCwgcGF0dGVybnMsIHByb2Nlc3NvciwgY2IpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBwcm9jZXNzb3IucHJvY2Vzc1BhdHRlcm5zKHRhcmdldCwgcGF0dGVybnMpO1xuICAgICAgICAvLyBkb25lIHByb2Nlc3NpbmcuICBhbGwgb2YgdGhlIGFib3ZlIGlzIHN5bmMsIGNhbiBiZSBhYnN0cmFjdGVkIG91dC5cbiAgICAgICAgLy8gc3Vid2Fsa3MgaXMgYSBtYXAgb2YgcGF0aHMgdG8gdGhlIGVudHJ5IGZpbHRlcnMgdGhleSBuZWVkXG4gICAgICAgIC8vIG1hdGNoZXMgaXMgYSBtYXAgb2YgcGF0aHMgdG8gW2Fic29sdXRlLCBpZkRpcl0gdHVwbGVzLlxuICAgICAgICBsZXQgdGFza3MgPSAxO1xuICAgICAgICBjb25zdCBuZXh0ID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKC0tdGFza3MgPT09IDApXG4gICAgICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgfTtcbiAgICAgICAgZm9yIChjb25zdCBbbSwgYWJzb2x1dGUsIGlmRGlyXSBvZiBwcm9jZXNzb3IubWF0Y2hlcy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLiNpZ25vcmVkKG0pKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgdGFza3MrKztcbiAgICAgICAgICAgIHRoaXMubWF0Y2gobSwgYWJzb2x1dGUsIGlmRGlyKS50aGVuKCgpID0+IG5leHQoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCB0IG9mIHByb2Nlc3Nvci5zdWJ3YWxrVGFyZ2V0cygpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5tYXhEZXB0aCAhPT0gSW5maW5pdHkgJiYgdC5kZXB0aCgpID49IHRoaXMubWF4RGVwdGgpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhc2tzKys7XG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbkNhY2hlZCA9IHQucmVhZGRpckNhY2hlZCgpO1xuICAgICAgICAgICAgaWYgKHQuY2FsbGVkUmVhZGRpcigpKVxuICAgICAgICAgICAgICAgIHRoaXMud2Fsa0NCMyh0LCBjaGlsZHJlbkNhY2hlZCwgcHJvY2Vzc29yLCBuZXh0KTtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHQucmVhZGRpckNCKChfLCBlbnRyaWVzKSA9PiB0aGlzLndhbGtDQjModCwgZW50cmllcywgcHJvY2Vzc29yLCBuZXh0KSwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbmV4dCgpO1xuICAgIH1cbiAgICB3YWxrQ0IzKHRhcmdldCwgZW50cmllcywgcHJvY2Vzc29yLCBjYikge1xuICAgICAgICBwcm9jZXNzb3IgPSBwcm9jZXNzb3IuZmlsdGVyRW50cmllcyh0YXJnZXQsIGVudHJpZXMpO1xuICAgICAgICBsZXQgdGFza3MgPSAxO1xuICAgICAgICBjb25zdCBuZXh0ID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKC0tdGFza3MgPT09IDApXG4gICAgICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgfTtcbiAgICAgICAgZm9yIChjb25zdCBbbSwgYWJzb2x1dGUsIGlmRGlyXSBvZiBwcm9jZXNzb3IubWF0Y2hlcy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLiNpZ25vcmVkKG0pKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgdGFza3MrKztcbiAgICAgICAgICAgIHRoaXMubWF0Y2gobSwgYWJzb2x1dGUsIGlmRGlyKS50aGVuKCgpID0+IG5leHQoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBbdGFyZ2V0LCBwYXR0ZXJuc10gb2YgcHJvY2Vzc29yLnN1YndhbGtzLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgdGFza3MrKztcbiAgICAgICAgICAgIHRoaXMud2Fsa0NCMih0YXJnZXQsIHBhdHRlcm5zLCBwcm9jZXNzb3IuY2hpbGQoKSwgbmV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgbmV4dCgpO1xuICAgIH1cbiAgICB3YWxrQ0JTeW5jKHRhcmdldCwgcGF0dGVybnMsIGNiKSB7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICBpZiAodGhpcy5zaWduYWw/LmFib3J0ZWQpXG4gICAgICAgICAgICBjYigpO1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICB0aGlzLndhbGtDQjJTeW5jKHRhcmdldCwgcGF0dGVybnMsIG5ldyBwcm9jZXNzb3JfanNfMS5Qcm9jZXNzb3IodGhpcy5vcHRzKSwgY2IpO1xuICAgIH1cbiAgICB3YWxrQ0IyU3luYyh0YXJnZXQsIHBhdHRlcm5zLCBwcm9jZXNzb3IsIGNiKSB7XG4gICAgICAgIGlmICh0aGlzLiNjaGlsZHJlbklnbm9yZWQodGFyZ2V0KSlcbiAgICAgICAgICAgIHJldHVybiBjYigpO1xuICAgICAgICBpZiAodGhpcy5zaWduYWw/LmFib3J0ZWQpXG4gICAgICAgICAgICBjYigpO1xuICAgICAgICBpZiAodGhpcy5wYXVzZWQpIHtcbiAgICAgICAgICAgIHRoaXMub25SZXN1bWUoKCkgPT4gdGhpcy53YWxrQ0IyU3luYyh0YXJnZXQsIHBhdHRlcm5zLCBwcm9jZXNzb3IsIGNiKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcHJvY2Vzc29yLnByb2Nlc3NQYXR0ZXJucyh0YXJnZXQsIHBhdHRlcm5zKTtcbiAgICAgICAgLy8gZG9uZSBwcm9jZXNzaW5nLiAgYWxsIG9mIHRoZSBhYm92ZSBpcyBzeW5jLCBjYW4gYmUgYWJzdHJhY3RlZCBvdXQuXG4gICAgICAgIC8vIHN1YndhbGtzIGlzIGEgbWFwIG9mIHBhdGhzIHRvIHRoZSBlbnRyeSBmaWx0ZXJzIHRoZXkgbmVlZFxuICAgICAgICAvLyBtYXRjaGVzIGlzIGEgbWFwIG9mIHBhdGhzIHRvIFthYnNvbHV0ZSwgaWZEaXJdIHR1cGxlcy5cbiAgICAgICAgbGV0IHRhc2tzID0gMTtcbiAgICAgICAgY29uc3QgbmV4dCA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmICgtLXRhc2tzID09PSAwKVxuICAgICAgICAgICAgICAgIGNiKCk7XG4gICAgICAgIH07XG4gICAgICAgIGZvciAoY29uc3QgW20sIGFic29sdXRlLCBpZkRpcl0gb2YgcHJvY2Vzc29yLm1hdGNoZXMuZW50cmllcygpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy4jaWdub3JlZChtKSlcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2hTeW5jKG0sIGFic29sdXRlLCBpZkRpcik7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCB0IG9mIHByb2Nlc3Nvci5zdWJ3YWxrVGFyZ2V0cygpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5tYXhEZXB0aCAhPT0gSW5maW5pdHkgJiYgdC5kZXB0aCgpID49IHRoaXMubWF4RGVwdGgpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhc2tzKys7XG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHQucmVhZGRpclN5bmMoKTtcbiAgICAgICAgICAgIHRoaXMud2Fsa0NCM1N5bmModCwgY2hpbGRyZW4sIHByb2Nlc3NvciwgbmV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgbmV4dCgpO1xuICAgIH1cbiAgICB3YWxrQ0IzU3luYyh0YXJnZXQsIGVudHJpZXMsIHByb2Nlc3NvciwgY2IpIHtcbiAgICAgICAgcHJvY2Vzc29yID0gcHJvY2Vzc29yLmZpbHRlckVudHJpZXModGFyZ2V0LCBlbnRyaWVzKTtcbiAgICAgICAgbGV0IHRhc2tzID0gMTtcbiAgICAgICAgY29uc3QgbmV4dCA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmICgtLXRhc2tzID09PSAwKVxuICAgICAgICAgICAgICAgIGNiKCk7XG4gICAgICAgIH07XG4gICAgICAgIGZvciAoY29uc3QgW20sIGFic29sdXRlLCBpZkRpcl0gb2YgcHJvY2Vzc29yLm1hdGNoZXMuZW50cmllcygpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy4jaWdub3JlZChtKSlcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2hTeW5jKG0sIGFic29sdXRlLCBpZkRpcik7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBbdGFyZ2V0LCBwYXR0ZXJuc10gb2YgcHJvY2Vzc29yLnN1YndhbGtzLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgdGFza3MrKztcbiAgICAgICAgICAgIHRoaXMud2Fsa0NCMlN5bmModGFyZ2V0LCBwYXR0ZXJucywgcHJvY2Vzc29yLmNoaWxkKCksIG5leHQpO1xuICAgICAgICB9XG4gICAgICAgIG5leHQoKTtcbiAgICB9XG59XG5leHBvcnRzLkdsb2JVdGlsID0gR2xvYlV0aWw7XG5jbGFzcyBHbG9iV2Fsa2VyIGV4dGVuZHMgR2xvYlV0aWwge1xuICAgIG1hdGNoZXMgPSBuZXcgU2V0KCk7XG4gICAgY29uc3RydWN0b3IocGF0dGVybnMsIHBhdGgsIG9wdHMpIHtcbiAgICAgICAgc3VwZXIocGF0dGVybnMsIHBhdGgsIG9wdHMpO1xuICAgIH1cbiAgICBtYXRjaEVtaXQoZSkge1xuICAgICAgICB0aGlzLm1hdGNoZXMuYWRkKGUpO1xuICAgIH1cbiAgICBhc3luYyB3YWxrKCkge1xuICAgICAgICBpZiAodGhpcy5zaWduYWw/LmFib3J0ZWQpXG4gICAgICAgICAgICB0aHJvdyB0aGlzLnNpZ25hbC5yZWFzb247XG4gICAgICAgIGlmICh0aGlzLnBhdGguaXNVbmtub3duKCkpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucGF0aC5sc3RhdCgpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXMsIHJlaikgPT4ge1xuICAgICAgICAgICAgdGhpcy53YWxrQ0IodGhpcy5wYXRoLCB0aGlzLnBhdHRlcm5zLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2lnbmFsPy5hYm9ydGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlaih0aGlzLnNpZ25hbC5yZWFzb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzKHRoaXMubWF0Y2hlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5tYXRjaGVzO1xuICAgIH1cbiAgICB3YWxrU3luYygpIHtcbiAgICAgICAgaWYgKHRoaXMuc2lnbmFsPy5hYm9ydGVkKVxuICAgICAgICAgICAgdGhyb3cgdGhpcy5zaWduYWwucmVhc29uO1xuICAgICAgICBpZiAodGhpcy5wYXRoLmlzVW5rbm93bigpKSB7XG4gICAgICAgICAgICB0aGlzLnBhdGgubHN0YXRTeW5jKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbm90aGluZyBmb3IgdGhlIGNhbGxiYWNrIHRvIGRvLCBiZWNhdXNlIHRoaXMgbmV2ZXIgcGF1c2VzXG4gICAgICAgIHRoaXMud2Fsa0NCU3luYyh0aGlzLnBhdGgsIHRoaXMucGF0dGVybnMsICgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNpZ25hbD8uYWJvcnRlZClcbiAgICAgICAgICAgICAgICB0aHJvdyB0aGlzLnNpZ25hbC5yZWFzb247XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5tYXRjaGVzO1xuICAgIH1cbn1cbmV4cG9ydHMuR2xvYldhbGtlciA9IEdsb2JXYWxrZXI7XG5jbGFzcyBHbG9iU3RyZWFtIGV4dGVuZHMgR2xvYlV0aWwge1xuICAgIHJlc3VsdHM7XG4gICAgY29uc3RydWN0b3IocGF0dGVybnMsIHBhdGgsIG9wdHMpIHtcbiAgICAgICAgc3VwZXIocGF0dGVybnMsIHBhdGgsIG9wdHMpO1xuICAgICAgICB0aGlzLnJlc3VsdHMgPSBuZXcgbWluaXBhc3NfMS5NaW5pcGFzcyh7XG4gICAgICAgICAgICBzaWduYWw6IHRoaXMuc2lnbmFsLFxuICAgICAgICAgICAgb2JqZWN0TW9kZTogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucmVzdWx0cy5vbignZHJhaW4nLCAoKSA9PiB0aGlzLnJlc3VtZSgpKTtcbiAgICAgICAgdGhpcy5yZXN1bHRzLm9uKCdyZXN1bWUnLCAoKSA9PiB0aGlzLnJlc3VtZSgpKTtcbiAgICB9XG4gICAgbWF0Y2hFbWl0KGUpIHtcbiAgICAgICAgdGhpcy5yZXN1bHRzLndyaXRlKGUpO1xuICAgICAgICBpZiAoIXRoaXMucmVzdWx0cy5mbG93aW5nKVxuICAgICAgICAgICAgdGhpcy5wYXVzZSgpO1xuICAgIH1cbiAgICBzdHJlYW0oKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMucGF0aDtcbiAgICAgICAgaWYgKHRhcmdldC5pc1Vua25vd24oKSkge1xuICAgICAgICAgICAgdGFyZ2V0LmxzdGF0KCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy53YWxrQ0IodGFyZ2V0LCB0aGlzLnBhdHRlcm5zLCAoKSA9PiB0aGlzLnJlc3VsdHMuZW5kKCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLndhbGtDQih0YXJnZXQsIHRoaXMucGF0dGVybnMsICgpID0+IHRoaXMucmVzdWx0cy5lbmQoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMucmVzdWx0cztcbiAgICB9XG4gICAgc3RyZWFtU3luYygpIHtcbiAgICAgICAgaWYgKHRoaXMucGF0aC5pc1Vua25vd24oKSkge1xuICAgICAgICAgICAgdGhpcy5wYXRoLmxzdGF0U3luYygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMud2Fsa0NCU3luYyh0aGlzLnBhdGgsIHRoaXMucGF0dGVybnMsICgpID0+IHRoaXMucmVzdWx0cy5lbmQoKSk7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc3VsdHM7XG4gICAgfVxufVxuZXhwb3J0cy5HbG9iU3RyZWFtID0gR2xvYlN0cmVhbTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXdhbGtlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5HbG9iID0gdm9pZCAwO1xuY29uc3QgbWluaW1hdGNoXzEgPSByZXF1aXJlKFwibWluaW1hdGNoXCIpO1xuY29uc3Qgbm9kZV91cmxfMSA9IHJlcXVpcmUoXCJub2RlOnVybFwiKTtcbmNvbnN0IHBhdGhfc2N1cnJ5XzEgPSByZXF1aXJlKFwicGF0aC1zY3VycnlcIik7XG5jb25zdCBwYXR0ZXJuX2pzXzEgPSByZXF1aXJlKFwiLi9wYXR0ZXJuLmpzXCIpO1xuY29uc3Qgd2Fsa2VyX2pzXzEgPSByZXF1aXJlKFwiLi93YWxrZXIuanNcIik7XG4vLyBpZiBubyBwcm9jZXNzIGdsb2JhbCwganVzdCBjYWxsIGl0IGxpbnV4LlxuLy8gc28gd2UgZGVmYXVsdCB0byBjYXNlLXNlbnNpdGl2ZSwgLyBzZXBhcmF0b3JzXG5jb25zdCBkZWZhdWx0UGxhdGZvcm0gPSAodHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmXG4gICAgcHJvY2VzcyAmJlxuICAgIHR5cGVvZiBwcm9jZXNzLnBsYXRmb3JtID09PSAnc3RyaW5nJykgP1xuICAgIHByb2Nlc3MucGxhdGZvcm1cbiAgICA6ICdsaW51eCc7XG4vKipcbiAqIEFuIG9iamVjdCB0aGF0IGNhbiBwZXJmb3JtIGdsb2IgcGF0dGVybiB0cmF2ZXJzYWxzLlxuICovXG5jbGFzcyBHbG9iIHtcbiAgICBhYnNvbHV0ZTtcbiAgICBjd2Q7XG4gICAgcm9vdDtcbiAgICBkb3Q7XG4gICAgZG90UmVsYXRpdmU7XG4gICAgZm9sbG93O1xuICAgIGlnbm9yZTtcbiAgICBtYWdpY2FsQnJhY2VzO1xuICAgIG1hcms7XG4gICAgbWF0Y2hCYXNlO1xuICAgIG1heERlcHRoO1xuICAgIG5vYnJhY2U7XG4gICAgbm9jYXNlO1xuICAgIG5vZGlyO1xuICAgIG5vZXh0O1xuICAgIG5vZ2xvYnN0YXI7XG4gICAgcGF0dGVybjtcbiAgICBwbGF0Zm9ybTtcbiAgICByZWFscGF0aDtcbiAgICBzY3Vycnk7XG4gICAgc3RhdDtcbiAgICBzaWduYWw7XG4gICAgd2luZG93c1BhdGhzTm9Fc2NhcGU7XG4gICAgd2l0aEZpbGVUeXBlcztcbiAgICBpbmNsdWRlQ2hpbGRNYXRjaGVzO1xuICAgIC8qKlxuICAgICAqIFRoZSBvcHRpb25zIHByb3ZpZGVkIHRvIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICAgKi9cbiAgICBvcHRzO1xuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHBhcnNlZCBpbW11dGFibGUge0BsaW5rIFBhdHRlcm59IG9iamVjdHMuXG4gICAgICovXG4gICAgcGF0dGVybnM7XG4gICAgLyoqXG4gICAgICogQWxsIG9wdGlvbnMgYXJlIHN0b3JlZCBhcyBwcm9wZXJ0aWVzIG9uIHRoZSBgR2xvYmAgb2JqZWN0LlxuICAgICAqXG4gICAgICogU2VlIHtAbGluayBHbG9iT3B0aW9uc30gZm9yIGZ1bGwgb3B0aW9ucyBkZXNjcmlwdGlvbnMuXG4gICAgICpcbiAgICAgKiBOb3RlIHRoYXQgYSBwcmV2aW91cyBgR2xvYmAgb2JqZWN0IGNhbiBiZSBwYXNzZWQgYXMgdGhlXG4gICAgICogYEdsb2JPcHRpb25zYCB0byBhbm90aGVyIGBHbG9iYCBpbnN0YW50aWF0aW9uIHRvIHJlLXVzZSBzZXR0aW5nc1xuICAgICAqIGFuZCBjYWNoZXMgd2l0aCBhIG5ldyBwYXR0ZXJuLlxuICAgICAqXG4gICAgICogVHJhdmVyc2FsIGZ1bmN0aW9ucyBjYW4gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIHRvIHJ1biB0aGUgd2Fsa1xuICAgICAqIGFnYWluLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHBhdHRlcm4sIG9wdHMpIHtcbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIGlmICghb3B0cylcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2dsb2Igb3B0aW9ucyByZXF1aXJlZCcpO1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICB0aGlzLndpdGhGaWxlVHlwZXMgPSAhIW9wdHMud2l0aEZpbGVUeXBlcztcbiAgICAgICAgdGhpcy5zaWduYWwgPSBvcHRzLnNpZ25hbDtcbiAgICAgICAgdGhpcy5mb2xsb3cgPSAhIW9wdHMuZm9sbG93O1xuICAgICAgICB0aGlzLmRvdCA9ICEhb3B0cy5kb3Q7XG4gICAgICAgIHRoaXMuZG90UmVsYXRpdmUgPSAhIW9wdHMuZG90UmVsYXRpdmU7XG4gICAgICAgIHRoaXMubm9kaXIgPSAhIW9wdHMubm9kaXI7XG4gICAgICAgIHRoaXMubWFyayA9ICEhb3B0cy5tYXJrO1xuICAgICAgICBpZiAoIW9wdHMuY3dkKSB7XG4gICAgICAgICAgICB0aGlzLmN3ZCA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG9wdHMuY3dkIGluc3RhbmNlb2YgVVJMIHx8IG9wdHMuY3dkLnN0YXJ0c1dpdGgoJ2ZpbGU6Ly8nKSkge1xuICAgICAgICAgICAgb3B0cy5jd2QgPSAoMCwgbm9kZV91cmxfMS5maWxlVVJMVG9QYXRoKShvcHRzLmN3ZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jd2QgPSBvcHRzLmN3ZCB8fCAnJztcbiAgICAgICAgdGhpcy5yb290ID0gb3B0cy5yb290O1xuICAgICAgICB0aGlzLm1hZ2ljYWxCcmFjZXMgPSAhIW9wdHMubWFnaWNhbEJyYWNlcztcbiAgICAgICAgdGhpcy5ub2JyYWNlID0gISFvcHRzLm5vYnJhY2U7XG4gICAgICAgIHRoaXMubm9leHQgPSAhIW9wdHMubm9leHQ7XG4gICAgICAgIHRoaXMucmVhbHBhdGggPSAhIW9wdHMucmVhbHBhdGg7XG4gICAgICAgIHRoaXMuYWJzb2x1dGUgPSBvcHRzLmFic29sdXRlO1xuICAgICAgICB0aGlzLmluY2x1ZGVDaGlsZE1hdGNoZXMgPSBvcHRzLmluY2x1ZGVDaGlsZE1hdGNoZXMgIT09IGZhbHNlO1xuICAgICAgICB0aGlzLm5vZ2xvYnN0YXIgPSAhIW9wdHMubm9nbG9ic3RhcjtcbiAgICAgICAgdGhpcy5tYXRjaEJhc2UgPSAhIW9wdHMubWF0Y2hCYXNlO1xuICAgICAgICB0aGlzLm1heERlcHRoID1cbiAgICAgICAgICAgIHR5cGVvZiBvcHRzLm1heERlcHRoID09PSAnbnVtYmVyJyA/IG9wdHMubWF4RGVwdGggOiBJbmZpbml0eTtcbiAgICAgICAgdGhpcy5zdGF0ID0gISFvcHRzLnN0YXQ7XG4gICAgICAgIHRoaXMuaWdub3JlID0gb3B0cy5pZ25vcmU7XG4gICAgICAgIGlmICh0aGlzLndpdGhGaWxlVHlwZXMgJiYgdGhpcy5hYnNvbHV0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Nhbm5vdCBzZXQgYWJzb2x1dGUgYW5kIHdpdGhGaWxlVHlwZXM6dHJ1ZScpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgcGF0dGVybiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHBhdHRlcm4gPSBbcGF0dGVybl07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy53aW5kb3dzUGF0aHNOb0VzY2FwZSA9XG4gICAgICAgICAgICAhIW9wdHMud2luZG93c1BhdGhzTm9Fc2NhcGUgfHxcbiAgICAgICAgICAgICAgICBvcHRzLmFsbG93V2luZG93c0VzY2FwZSA9PT1cbiAgICAgICAgICAgICAgICAgICAgZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLndpbmRvd3NQYXRoc05vRXNjYXBlKSB7XG4gICAgICAgICAgICBwYXR0ZXJuID0gcGF0dGVybi5tYXAocCA9PiBwLnJlcGxhY2UoL1xcXFwvZywgJy8nKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubWF0Y2hCYXNlKSB7XG4gICAgICAgICAgICBpZiAob3B0cy5ub2dsb2JzdGFyKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYmFzZSBtYXRjaGluZyByZXF1aXJlcyBnbG9ic3RhcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGF0dGVybiA9IHBhdHRlcm4ubWFwKHAgPT4gKHAuaW5jbHVkZXMoJy8nKSA/IHAgOiBgLi8qKi8ke3B9YCkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGF0dGVybiA9IHBhdHRlcm47XG4gICAgICAgIHRoaXMucGxhdGZvcm0gPSBvcHRzLnBsYXRmb3JtIHx8IGRlZmF1bHRQbGF0Zm9ybTtcbiAgICAgICAgdGhpcy5vcHRzID0geyAuLi5vcHRzLCBwbGF0Zm9ybTogdGhpcy5wbGF0Zm9ybSB9O1xuICAgICAgICBpZiAob3B0cy5zY3VycnkpIHtcbiAgICAgICAgICAgIHRoaXMuc2N1cnJ5ID0gb3B0cy5zY3Vycnk7XG4gICAgICAgICAgICBpZiAob3B0cy5ub2Nhc2UgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgIG9wdHMubm9jYXNlICE9PSBvcHRzLnNjdXJyeS5ub2Nhc2UpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vY2FzZSBvcHRpb24gY29udHJhZGljdHMgcHJvdmlkZWQgc2N1cnJ5IG9wdGlvbicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgU2N1cnJ5ID0gb3B0cy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyA/IHBhdGhfc2N1cnJ5XzEuUGF0aFNjdXJyeVdpbjMyXG4gICAgICAgICAgICAgICAgOiBvcHRzLnBsYXRmb3JtID09PSAnZGFyd2luJyA/IHBhdGhfc2N1cnJ5XzEuUGF0aFNjdXJyeURhcndpblxuICAgICAgICAgICAgICAgICAgICA6IG9wdHMucGxhdGZvcm0gPyBwYXRoX3NjdXJyeV8xLlBhdGhTY3VycnlQb3NpeFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBwYXRoX3NjdXJyeV8xLlBhdGhTY3Vycnk7XG4gICAgICAgICAgICB0aGlzLnNjdXJyeSA9IG5ldyBTY3VycnkodGhpcy5jd2QsIHtcbiAgICAgICAgICAgICAgICBub2Nhc2U6IG9wdHMubm9jYXNlLFxuICAgICAgICAgICAgICAgIGZzOiBvcHRzLmZzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ub2Nhc2UgPSB0aGlzLnNjdXJyeS5ub2Nhc2U7XG4gICAgICAgIC8vIElmIHlvdSBkbyBub2Nhc2U6dHJ1ZSBvbiBhIGNhc2Utc2Vuc2l0aXZlIGZpbGUgc3lzdGVtLCB0aGVuXG4gICAgICAgIC8vIHdlIG5lZWQgdG8gdXNlIHJlZ2V4cHMgaW5zdGVhZCBvZiBzdHJpbmdzIGZvciBub24tbWFnaWNcbiAgICAgICAgLy8gcGF0aCBwb3J0aW9ucywgYmVjYXVzZSBzdGF0dGluZyBgYUJjYCB3b24ndCByZXR1cm4gcmVzdWx0c1xuICAgICAgICAvLyBmb3IgdGhlIGZpbGUgYEFiQ2AgZm9yIGV4YW1wbGUuXG4gICAgICAgIGNvbnN0IG5vY2FzZU1hZ2ljT25seSA9IHRoaXMucGxhdGZvcm0gPT09ICdkYXJ3aW4nIHx8IHRoaXMucGxhdGZvcm0gPT09ICd3aW4zMic7XG4gICAgICAgIGNvbnN0IG1tbyA9IHtcbiAgICAgICAgICAgIC8vIGRlZmF1bHQgbm9jYXNlIGJhc2VkIG9uIHBsYXRmb3JtXG4gICAgICAgICAgICAuLi5vcHRzLFxuICAgICAgICAgICAgZG90OiB0aGlzLmRvdCxcbiAgICAgICAgICAgIG1hdGNoQmFzZTogdGhpcy5tYXRjaEJhc2UsXG4gICAgICAgICAgICBub2JyYWNlOiB0aGlzLm5vYnJhY2UsXG4gICAgICAgICAgICBub2Nhc2U6IHRoaXMubm9jYXNlLFxuICAgICAgICAgICAgbm9jYXNlTWFnaWNPbmx5LFxuICAgICAgICAgICAgbm9jb21tZW50OiB0cnVlLFxuICAgICAgICAgICAgbm9leHQ6IHRoaXMubm9leHQsXG4gICAgICAgICAgICBub25lZ2F0ZTogdHJ1ZSxcbiAgICAgICAgICAgIG9wdGltaXphdGlvbkxldmVsOiAyLFxuICAgICAgICAgICAgcGxhdGZvcm06IHRoaXMucGxhdGZvcm0sXG4gICAgICAgICAgICB3aW5kb3dzUGF0aHNOb0VzY2FwZTogdGhpcy53aW5kb3dzUGF0aHNOb0VzY2FwZSxcbiAgICAgICAgICAgIGRlYnVnOiAhIXRoaXMub3B0cy5kZWJ1ZyxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbW1zID0gdGhpcy5wYXR0ZXJuLm1hcChwID0+IG5ldyBtaW5pbWF0Y2hfMS5NaW5pbWF0Y2gocCwgbW1vKSk7XG4gICAgICAgIGNvbnN0IFttYXRjaFNldCwgZ2xvYlBhcnRzXSA9IG1tcy5yZWR1Y2UoKHNldCwgbSkgPT4ge1xuICAgICAgICAgICAgc2V0WzBdLnB1c2goLi4ubS5zZXQpO1xuICAgICAgICAgICAgc2V0WzFdLnB1c2goLi4ubS5nbG9iUGFydHMpO1xuICAgICAgICAgICAgcmV0dXJuIHNldDtcbiAgICAgICAgfSwgW1tdLCBbXV0pO1xuICAgICAgICB0aGlzLnBhdHRlcm5zID0gbWF0Y2hTZXQubWFwKChzZXQsIGkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGcgPSBnbG9iUGFydHNbaV07XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgICAgIGlmICghZylcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcGF0dGVybiBvYmplY3QnKTtcbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICByZXR1cm4gbmV3IHBhdHRlcm5fanNfMS5QYXR0ZXJuKHNldCwgZywgMCwgdGhpcy5wbGF0Zm9ybSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYyB3YWxrKCkge1xuICAgICAgICAvLyBXYWxrZXJzIGFsd2F5cyByZXR1cm4gYXJyYXkgb2YgUGF0aCBvYmplY3RzLCBzbyB3ZSBqdXN0IGhhdmUgdG9cbiAgICAgICAgLy8gY29lcmNlIHRoZW0gaW50byB0aGUgcmlnaHQgc2hhcGUuICBJdCB3aWxsIGhhdmUgYWxyZWFkeSBjYWxsZWRcbiAgICAgICAgLy8gcmVhbHBhdGgoKSBpZiB0aGUgb3B0aW9uIHdhcyBzZXQgdG8gZG8gc28sIHNvIHdlIGtub3cgdGhhdCdzIGNhY2hlZC5cbiAgICAgICAgLy8gc3RhcnQgb3V0IGtub3dpbmcgdGhlIGN3ZCwgYXQgbGVhc3RcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIC4uLihhd2FpdCBuZXcgd2Fsa2VyX2pzXzEuR2xvYldhbGtlcih0aGlzLnBhdHRlcm5zLCB0aGlzLnNjdXJyeS5jd2QsIHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLm9wdHMsXG4gICAgICAgICAgICAgICAgbWF4RGVwdGg6IHRoaXMubWF4RGVwdGggIT09IEluZmluaXR5ID9cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXhEZXB0aCArIHRoaXMuc2N1cnJ5LmN3ZC5kZXB0aCgpXG4gICAgICAgICAgICAgICAgICAgIDogSW5maW5pdHksXG4gICAgICAgICAgICAgICAgcGxhdGZvcm06IHRoaXMucGxhdGZvcm0sXG4gICAgICAgICAgICAgICAgbm9jYXNlOiB0aGlzLm5vY2FzZSxcbiAgICAgICAgICAgICAgICBpbmNsdWRlQ2hpbGRNYXRjaGVzOiB0aGlzLmluY2x1ZGVDaGlsZE1hdGNoZXMsXG4gICAgICAgICAgICB9KS53YWxrKCkpLFxuICAgICAgICBdO1xuICAgIH1cbiAgICB3YWxrU3luYygpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIC4uLm5ldyB3YWxrZXJfanNfMS5HbG9iV2Fsa2VyKHRoaXMucGF0dGVybnMsIHRoaXMuc2N1cnJ5LmN3ZCwge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMub3B0cyxcbiAgICAgICAgICAgICAgICBtYXhEZXB0aDogdGhpcy5tYXhEZXB0aCAhPT0gSW5maW5pdHkgP1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1heERlcHRoICsgdGhpcy5zY3VycnkuY3dkLmRlcHRoKClcbiAgICAgICAgICAgICAgICAgICAgOiBJbmZpbml0eSxcbiAgICAgICAgICAgICAgICBwbGF0Zm9ybTogdGhpcy5wbGF0Zm9ybSxcbiAgICAgICAgICAgICAgICBub2Nhc2U6IHRoaXMubm9jYXNlLFxuICAgICAgICAgICAgICAgIGluY2x1ZGVDaGlsZE1hdGNoZXM6IHRoaXMuaW5jbHVkZUNoaWxkTWF0Y2hlcyxcbiAgICAgICAgICAgIH0pLndhbGtTeW5jKCksXG4gICAgICAgIF07XG4gICAgfVxuICAgIHN0cmVhbSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyB3YWxrZXJfanNfMS5HbG9iU3RyZWFtKHRoaXMucGF0dGVybnMsIHRoaXMuc2N1cnJ5LmN3ZCwge1xuICAgICAgICAgICAgLi4udGhpcy5vcHRzLFxuICAgICAgICAgICAgbWF4RGVwdGg6IHRoaXMubWF4RGVwdGggIT09IEluZmluaXR5ID9cbiAgICAgICAgICAgICAgICB0aGlzLm1heERlcHRoICsgdGhpcy5zY3VycnkuY3dkLmRlcHRoKClcbiAgICAgICAgICAgICAgICA6IEluZmluaXR5LFxuICAgICAgICAgICAgcGxhdGZvcm06IHRoaXMucGxhdGZvcm0sXG4gICAgICAgICAgICBub2Nhc2U6IHRoaXMubm9jYXNlLFxuICAgICAgICAgICAgaW5jbHVkZUNoaWxkTWF0Y2hlczogdGhpcy5pbmNsdWRlQ2hpbGRNYXRjaGVzLFxuICAgICAgICB9KS5zdHJlYW0oKTtcbiAgICB9XG4gICAgc3RyZWFtU3luYygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyB3YWxrZXJfanNfMS5HbG9iU3RyZWFtKHRoaXMucGF0dGVybnMsIHRoaXMuc2N1cnJ5LmN3ZCwge1xuICAgICAgICAgICAgLi4udGhpcy5vcHRzLFxuICAgICAgICAgICAgbWF4RGVwdGg6IHRoaXMubWF4RGVwdGggIT09IEluZmluaXR5ID9cbiAgICAgICAgICAgICAgICB0aGlzLm1heERlcHRoICsgdGhpcy5zY3VycnkuY3dkLmRlcHRoKClcbiAgICAgICAgICAgICAgICA6IEluZmluaXR5LFxuICAgICAgICAgICAgcGxhdGZvcm06IHRoaXMucGxhdGZvcm0sXG4gICAgICAgICAgICBub2Nhc2U6IHRoaXMubm9jYXNlLFxuICAgICAgICAgICAgaW5jbHVkZUNoaWxkTWF0Y2hlczogdGhpcy5pbmNsdWRlQ2hpbGRNYXRjaGVzLFxuICAgICAgICB9KS5zdHJlYW1TeW5jKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlZmF1bHQgc3luYyBpdGVyYXRpb24gZnVuY3Rpb24uIFJldHVybnMgYSBHZW5lcmF0b3IgdGhhdFxuICAgICAqIGl0ZXJhdGVzIG92ZXIgdGhlIHJlc3VsdHMuXG4gICAgICovXG4gICAgaXRlcmF0ZVN5bmMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0cmVhbVN5bmMoKVtTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgfVxuICAgIFtTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pdGVyYXRlU3luYygpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWZhdWx0IGFzeW5jIGl0ZXJhdGlvbiBmdW5jdGlvbi4gUmV0dXJucyBhbiBBc3luY0dlbmVyYXRvciB0aGF0XG4gICAgICogaXRlcmF0ZXMgb3ZlciB0aGUgcmVzdWx0cy5cbiAgICAgKi9cbiAgICBpdGVyYXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdHJlYW0oKVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKTtcbiAgICB9XG4gICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlcmF0ZSgpO1xuICAgIH1cbn1cbmV4cG9ydHMuR2xvYiA9IEdsb2I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1nbG9iLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmhhc01hZ2ljID0gdm9pZCAwO1xuY29uc3QgbWluaW1hdGNoXzEgPSByZXF1aXJlKFwibWluaW1hdGNoXCIpO1xuLyoqXG4gKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgcGF0dGVybnMgcHJvdmlkZWQgY29udGFpbiBhbnkgbWFnaWMgZ2xvYiBjaGFyYWN0ZXJzLFxuICogZ2l2ZW4gdGhlIG9wdGlvbnMgcHJvdmlkZWQuXG4gKlxuICogQnJhY2UgZXhwYW5zaW9uIGlzIG5vdCBjb25zaWRlcmVkIFwibWFnaWNcIiB1bmxlc3MgdGhlIGBtYWdpY2FsQnJhY2VzYCBvcHRpb25cbiAqIGlzIHNldCwgYXMgYnJhY2UgZXhwYW5zaW9uIGp1c3QgdHVybnMgb25lIHN0cmluZyBpbnRvIGFuIGFycmF5IG9mIHN0cmluZ3MuXG4gKiBTbyBhIHBhdHRlcm4gbGlrZSBgJ3h7YSxifXknYCB3b3VsZCByZXR1cm4gYGZhbHNlYCwgYmVjYXVzZSBgJ3hheSdgIGFuZFxuICogYCd4YnknYCBib3RoIGRvIG5vdCBjb250YWluIGFueSBtYWdpYyBnbG9iIGNoYXJhY3RlcnMsIGFuZCBpdCdzIHRyZWF0ZWQgdGhlXG4gKiBzYW1lIGFzIGlmIHlvdSBoYWQgY2FsbGVkIGl0IG9uIGBbJ3hheScsICd4YnknXWAuIFdoZW4gYG1hZ2ljYWxCcmFjZXM6dHJ1ZWBcbiAqIGlzIGluIHRoZSBvcHRpb25zLCBicmFjZSBleHBhbnNpb24gX2lzXyB0cmVhdGVkIGFzIGEgcGF0dGVybiBoYXZpbmcgbWFnaWMuXG4gKi9cbmNvbnN0IGhhc01hZ2ljID0gKHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkgPT4ge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShwYXR0ZXJuKSkge1xuICAgICAgICBwYXR0ZXJuID0gW3BhdHRlcm5dO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHAgb2YgcGF0dGVybikge1xuICAgICAgICBpZiAobmV3IG1pbmltYXRjaF8xLk1pbmltYXRjaChwLCBvcHRpb25zKS5oYXNNYWdpYygpKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5leHBvcnRzLmhhc01hZ2ljID0gaGFzTWFnaWM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1oYXMtbWFnaWMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2xvYiA9IGV4cG9ydHMuc3luYyA9IGV4cG9ydHMuaXRlcmF0ZSA9IGV4cG9ydHMuaXRlcmF0ZVN5bmMgPSBleHBvcnRzLnN0cmVhbSA9IGV4cG9ydHMuc3RyZWFtU3luYyA9IGV4cG9ydHMuSWdub3JlID0gZXhwb3J0cy5oYXNNYWdpYyA9IGV4cG9ydHMuR2xvYiA9IGV4cG9ydHMudW5lc2NhcGUgPSBleHBvcnRzLmVzY2FwZSA9IHZvaWQgMDtcbmV4cG9ydHMuZ2xvYlN0cmVhbVN5bmMgPSBnbG9iU3RyZWFtU3luYztcbmV4cG9ydHMuZ2xvYlN0cmVhbSA9IGdsb2JTdHJlYW07XG5leHBvcnRzLmdsb2JTeW5jID0gZ2xvYlN5bmM7XG5leHBvcnRzLmdsb2JJdGVyYXRlU3luYyA9IGdsb2JJdGVyYXRlU3luYztcbmV4cG9ydHMuZ2xvYkl0ZXJhdGUgPSBnbG9iSXRlcmF0ZTtcbmNvbnN0IG1pbmltYXRjaF8xID0gcmVxdWlyZShcIm1pbmltYXRjaFwiKTtcbmNvbnN0IGdsb2JfanNfMSA9IHJlcXVpcmUoXCIuL2dsb2IuanNcIik7XG5jb25zdCBoYXNfbWFnaWNfanNfMSA9IHJlcXVpcmUoXCIuL2hhcy1tYWdpYy5qc1wiKTtcbnZhciBtaW5pbWF0Y2hfMiA9IHJlcXVpcmUoXCJtaW5pbWF0Y2hcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJlc2NhcGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1pbmltYXRjaF8yLmVzY2FwZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInVuZXNjYXBlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBtaW5pbWF0Y2hfMi51bmVzY2FwZTsgfSB9KTtcbnZhciBnbG9iX2pzXzIgPSByZXF1aXJlKFwiLi9nbG9iLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiR2xvYlwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZ2xvYl9qc18yLkdsb2I7IH0gfSk7XG52YXIgaGFzX21hZ2ljX2pzXzIgPSByZXF1aXJlKFwiLi9oYXMtbWFnaWMuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJoYXNNYWdpY1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gaGFzX21hZ2ljX2pzXzIuaGFzTWFnaWM7IH0gfSk7XG52YXIgaWdub3JlX2pzXzEgPSByZXF1aXJlKFwiLi9pZ25vcmUuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJJZ25vcmVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGlnbm9yZV9qc18xLklnbm9yZTsgfSB9KTtcbmZ1bmN0aW9uIGdsb2JTdHJlYW1TeW5jKHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiBuZXcgZ2xvYl9qc18xLkdsb2IocGF0dGVybiwgb3B0aW9ucykuc3RyZWFtU3luYygpO1xufVxuZnVuY3Rpb24gZ2xvYlN0cmVhbShwYXR0ZXJuLCBvcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gbmV3IGdsb2JfanNfMS5HbG9iKHBhdHRlcm4sIG9wdGlvbnMpLnN0cmVhbSgpO1xufVxuZnVuY3Rpb24gZ2xvYlN5bmMocGF0dGVybiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgcmV0dXJuIG5ldyBnbG9iX2pzXzEuR2xvYihwYXR0ZXJuLCBvcHRpb25zKS53YWxrU3luYygpO1xufVxuYXN5bmMgZnVuY3Rpb24gZ2xvYl8ocGF0dGVybiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgcmV0dXJuIG5ldyBnbG9iX2pzXzEuR2xvYihwYXR0ZXJuLCBvcHRpb25zKS53YWxrKCk7XG59XG5mdW5jdGlvbiBnbG9iSXRlcmF0ZVN5bmMocGF0dGVybiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgcmV0dXJuIG5ldyBnbG9iX2pzXzEuR2xvYihwYXR0ZXJuLCBvcHRpb25zKS5pdGVyYXRlU3luYygpO1xufVxuZnVuY3Rpb24gZ2xvYkl0ZXJhdGUocGF0dGVybiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgcmV0dXJuIG5ldyBnbG9iX2pzXzEuR2xvYihwYXR0ZXJuLCBvcHRpb25zKS5pdGVyYXRlKCk7XG59XG4vLyBhbGlhc2VzOiBnbG9iLnN5bmMuc3RyZWFtKCkgZ2xvYi5zdHJlYW0uc3luYygpIGdsb2Iuc3luYygpIGV0Y1xuZXhwb3J0cy5zdHJlYW1TeW5jID0gZ2xvYlN0cmVhbVN5bmM7XG5leHBvcnRzLnN0cmVhbSA9IE9iamVjdC5hc3NpZ24oZ2xvYlN0cmVhbSwgeyBzeW5jOiBnbG9iU3RyZWFtU3luYyB9KTtcbmV4cG9ydHMuaXRlcmF0ZVN5bmMgPSBnbG9iSXRlcmF0ZVN5bmM7XG5leHBvcnRzLml0ZXJhdGUgPSBPYmplY3QuYXNzaWduKGdsb2JJdGVyYXRlLCB7XG4gICAgc3luYzogZ2xvYkl0ZXJhdGVTeW5jLFxufSk7XG5leHBvcnRzLnN5bmMgPSBPYmplY3QuYXNzaWduKGdsb2JTeW5jLCB7XG4gICAgc3RyZWFtOiBnbG9iU3RyZWFtU3luYyxcbiAgICBpdGVyYXRlOiBnbG9iSXRlcmF0ZVN5bmMsXG59KTtcbmV4cG9ydHMuZ2xvYiA9IE9iamVjdC5hc3NpZ24oZ2xvYl8sIHtcbiAgICBnbG9iOiBnbG9iXyxcbiAgICBnbG9iU3luYyxcbiAgICBzeW5jOiBleHBvcnRzLnN5bmMsXG4gICAgZ2xvYlN0cmVhbSxcbiAgICBzdHJlYW06IGV4cG9ydHMuc3RyZWFtLFxuICAgIGdsb2JTdHJlYW1TeW5jLFxuICAgIHN0cmVhbVN5bmM6IGV4cG9ydHMuc3RyZWFtU3luYyxcbiAgICBnbG9iSXRlcmF0ZSxcbiAgICBpdGVyYXRlOiBleHBvcnRzLml0ZXJhdGUsXG4gICAgZ2xvYkl0ZXJhdGVTeW5jLFxuICAgIGl0ZXJhdGVTeW5jOiBleHBvcnRzLml0ZXJhdGVTeW5jLFxuICAgIEdsb2I6IGdsb2JfanNfMS5HbG9iLFxuICAgIGhhc01hZ2ljOiBoYXNfbWFnaWNfanNfMS5oYXNNYWdpYyxcbiAgICBlc2NhcGU6IG1pbmltYXRjaF8xLmVzY2FwZSxcbiAgICB1bmVzY2FwZTogbWluaW1hdGNoXzEudW5lc2NhcGUsXG59KTtcbmV4cG9ydHMuZ2xvYi5nbG9iID0gZXhwb3J0cy5nbG9iO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICIvKipcbiAqIGFyY2hpdmVyLXV0aWxzXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTQgQ2hyaXMgVGFsa2luZ3RvbiwgY29udHJpYnV0b3JzLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cHM6Ly9naXRodWIuY29tL2FyY2hpdmVyanMvbm9kZS1hcmNoaXZlci9ibG9iL21hc3Rlci9MSUNFTlNFLU1JVFxuICovXG52YXIgZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpO1xudmFyIHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG5cbnZhciBmbGF0dGVuID0gcmVxdWlyZSgnbG9kYXNoL2ZsYXR0ZW4nKTtcbnZhciBkaWZmZXJlbmNlID0gcmVxdWlyZSgnbG9kYXNoL2RpZmZlcmVuY2UnKTtcbnZhciB1bmlvbiA9IHJlcXVpcmUoJ2xvZGFzaC91bmlvbicpO1xudmFyIGlzUGxhaW5PYmplY3QgPSByZXF1aXJlKCdsb2Rhc2gvaXNQbGFpbk9iamVjdCcpO1xuXG52YXIgZ2xvYiA9IHJlcXVpcmUoJ2dsb2InKTtcblxudmFyIGZpbGUgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xuXG52YXIgcGF0aFNlcGFyYXRvclJlID0gL1tcXC9cXFxcXS9nO1xuXG4vLyBQcm9jZXNzIHNwZWNpZmllZCB3aWxkY2FyZCBnbG9iIHBhdHRlcm5zIG9yIGZpbGVuYW1lcyBhZ2FpbnN0IGFcbi8vIGNhbGxiYWNrLCBleGNsdWRpbmcgYW5kIHVuaXF1aW5nIGZpbGVzIGluIHRoZSByZXN1bHQgc2V0LlxudmFyIHByb2Nlc3NQYXR0ZXJucyA9IGZ1bmN0aW9uKHBhdHRlcm5zLCBmbikge1xuICAvLyBGaWxlcGF0aHMgdG8gcmV0dXJuLlxuICB2YXIgcmVzdWx0ID0gW107XG4gIC8vIEl0ZXJhdGUgb3ZlciBmbGF0dGVuZWQgcGF0dGVybnMgYXJyYXkuXG4gIGZsYXR0ZW4ocGF0dGVybnMpLmZvckVhY2goZnVuY3Rpb24ocGF0dGVybikge1xuICAgIC8vIElmIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaXMgISBpdCBzaG91bGQgYmUgb21pdHRlZFxuICAgIHZhciBleGNsdXNpb24gPSBwYXR0ZXJuLmluZGV4T2YoJyEnKSA9PT0gMDtcbiAgICAvLyBJZiB0aGUgcGF0dGVybiBpcyBhbiBleGNsdXNpb24sIHJlbW92ZSB0aGUgIVxuICAgIGlmIChleGNsdXNpb24pIHsgcGF0dGVybiA9IHBhdHRlcm4uc2xpY2UoMSk7IH1cbiAgICAvLyBGaW5kIGFsbCBtYXRjaGluZyBmaWxlcyBmb3IgdGhpcyBwYXR0ZXJuLlxuICAgIHZhciBtYXRjaGVzID0gZm4ocGF0dGVybik7XG4gICAgaWYgKGV4Y2x1c2lvbikge1xuICAgICAgLy8gSWYgYW4gZXhjbHVzaW9uLCByZW1vdmUgbWF0Y2hpbmcgZmlsZXMuXG4gICAgICByZXN1bHQgPSBkaWZmZXJlbmNlKHJlc3VsdCwgbWF0Y2hlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE90aGVyd2lzZSBhZGQgbWF0Y2hpbmcgZmlsZXMuXG4gICAgICByZXN1bHQgPSB1bmlvbihyZXN1bHQsIG1hdGNoZXMpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG4vLyBUcnVlIGlmIHRoZSBmaWxlIHBhdGggZXhpc3RzLlxuZmlsZS5leGlzdHMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGZpbGVwYXRoID0gcGF0aC5qb2luLmFwcGx5KHBhdGgsIGFyZ3VtZW50cyk7XG4gIHJldHVybiBmcy5leGlzdHNTeW5jKGZpbGVwYXRoKTtcbn07XG5cbi8vIFJldHVybiBhbiBhcnJheSBvZiBhbGwgZmlsZSBwYXRocyB0aGF0IG1hdGNoIHRoZSBnaXZlbiB3aWxkY2FyZCBwYXR0ZXJucy5cbmZpbGUuZXhwYW5kID0gZnVuY3Rpb24oLi4uYXJncykge1xuICAvLyBJZiB0aGUgZmlyc3QgYXJndW1lbnQgaXMgYW4gb3B0aW9ucyBvYmplY3QsIHNhdmUgdGhvc2Ugb3B0aW9ucyB0byBwYXNzXG4gIC8vIGludG8gdGhlIEZpbGUucHJvdG90eXBlLmdsb2Iuc3luYyBtZXRob2QuXG4gIHZhciBvcHRpb25zID0gaXNQbGFpbk9iamVjdChhcmdzWzBdKSA/IGFyZ3Muc2hpZnQoKSA6IHt9O1xuICAvLyBVc2UgdGhlIGZpcnN0IGFyZ3VtZW50IGlmIGl0J3MgYW4gQXJyYXksIG90aGVyd2lzZSBjb252ZXJ0IHRoZSBhcmd1bWVudHNcbiAgLy8gb2JqZWN0IHRvIGFuIGFycmF5IGFuZCB1c2UgdGhhdC5cbiAgdmFyIHBhdHRlcm5zID0gQXJyYXkuaXNBcnJheShhcmdzWzBdKSA/IGFyZ3NbMF0gOiBhcmdzO1xuICAvLyBSZXR1cm4gZW1wdHkgc2V0IGlmIHRoZXJlIGFyZSBubyBwYXR0ZXJucyBvciBmaWxlcGF0aHMuXG4gIGlmIChwYXR0ZXJucy5sZW5ndGggPT09IDApIHsgcmV0dXJuIFtdOyB9XG4gIC8vIFJldHVybiBhbGwgbWF0Y2hpbmcgZmlsZXBhdGhzLlxuICB2YXIgbWF0Y2hlcyA9IHByb2Nlc3NQYXR0ZXJucyhwYXR0ZXJucywgZnVuY3Rpb24ocGF0dGVybikge1xuICAgIC8vIEZpbmQgYWxsIG1hdGNoaW5nIGZpbGVzIGZvciB0aGlzIHBhdHRlcm4uXG4gICAgcmV0dXJuIGdsb2Iuc3luYyhwYXR0ZXJuLCBvcHRpb25zKTtcbiAgfSk7XG4gIC8vIEZpbHRlciByZXN1bHQgc2V0P1xuICBpZiAob3B0aW9ucy5maWx0ZXIpIHtcbiAgICBtYXRjaGVzID0gbWF0Y2hlcy5maWx0ZXIoZnVuY3Rpb24oZmlsZXBhdGgpIHtcbiAgICAgIGZpbGVwYXRoID0gcGF0aC5qb2luKG9wdGlvbnMuY3dkIHx8ICcnLCBmaWxlcGF0aCk7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuZmlsdGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmV0dXJuIG9wdGlvbnMuZmlsdGVyKGZpbGVwYXRoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZmlsZSBpcyBvZiB0aGUgcmlnaHQgdHlwZSBhbmQgZXhpc3RzLCB0aGlzIHNob3VsZCB3b3JrLlxuICAgICAgICAgIHJldHVybiBmcy5zdGF0U3luYyhmaWxlcGF0aClbb3B0aW9ucy5maWx0ZXJdKCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2goZSkge1xuICAgICAgICAvLyBPdGhlcndpc2UsIGl0J3MgcHJvYmFibHkgbm90IHRoZSByaWdodCB0eXBlLlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG1hdGNoZXM7XG59O1xuXG4vLyBCdWlsZCBhIG11bHRpIHRhc2sgXCJmaWxlc1wiIG9iamVjdCBkeW5hbWljYWxseS5cbmZpbGUuZXhwYW5kTWFwcGluZyA9IGZ1bmN0aW9uKHBhdHRlcm5zLCBkZXN0QmFzZSwgb3B0aW9ucykge1xuICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7XG4gICAgcmVuYW1lOiBmdW5jdGlvbihkZXN0QmFzZSwgZGVzdFBhdGgpIHtcbiAgICAgIHJldHVybiBwYXRoLmpvaW4oZGVzdEJhc2UgfHwgJycsIGRlc3RQYXRoKTtcbiAgICB9XG4gIH0sIG9wdGlvbnMpO1xuICB2YXIgZmlsZXMgPSBbXTtcbiAgdmFyIGZpbGVCeURlc3QgPSB7fTtcbiAgLy8gRmluZCBhbGwgZmlsZXMgbWF0Y2hpbmcgcGF0dGVybiwgdXNpbmcgcGFzc2VkLWluIG9wdGlvbnMuXG4gIGZpbGUuZXhwYW5kKG9wdGlvbnMsIHBhdHRlcm5zKS5mb3JFYWNoKGZ1bmN0aW9uKHNyYykge1xuICAgIHZhciBkZXN0UGF0aCA9IHNyYztcbiAgICAvLyBGbGF0dGVuP1xuICAgIGlmIChvcHRpb25zLmZsYXR0ZW4pIHtcbiAgICAgIGRlc3RQYXRoID0gcGF0aC5iYXNlbmFtZShkZXN0UGF0aCk7XG4gICAgfVxuICAgIC8vIENoYW5nZSB0aGUgZXh0ZW5zaW9uP1xuICAgIGlmIChvcHRpb25zLmV4dCkge1xuICAgICAgZGVzdFBhdGggPSBkZXN0UGF0aC5yZXBsYWNlKC8oXFwuW15cXC9dKik/JC8sIG9wdGlvbnMuZXh0KTtcbiAgICB9XG4gICAgLy8gR2VuZXJhdGUgZGVzdGluYXRpb24gZmlsZW5hbWUuXG4gICAgdmFyIGRlc3QgPSBvcHRpb25zLnJlbmFtZShkZXN0QmFzZSwgZGVzdFBhdGgsIG9wdGlvbnMpO1xuICAgIC8vIFByZXBlbmQgY3dkIHRvIHNyYyBwYXRoIGlmIG5lY2Vzc2FyeS5cbiAgICBpZiAob3B0aW9ucy5jd2QpIHsgc3JjID0gcGF0aC5qb2luKG9wdGlvbnMuY3dkLCBzcmMpOyB9XG4gICAgLy8gTm9ybWFsaXplIGZpbGVwYXRocyB0byBiZSB1bml4LXN0eWxlLlxuICAgIGRlc3QgPSBkZXN0LnJlcGxhY2UocGF0aFNlcGFyYXRvclJlLCAnLycpO1xuICAgIHNyYyA9IHNyYy5yZXBsYWNlKHBhdGhTZXBhcmF0b3JSZSwgJy8nKTtcbiAgICAvLyBNYXAgY29ycmVjdCBzcmMgcGF0aCB0byBkZXN0IHBhdGguXG4gICAgaWYgKGZpbGVCeURlc3RbZGVzdF0pIHtcbiAgICAgIC8vIElmIGRlc3QgYWxyZWFkeSBleGlzdHMsIHB1c2ggdGhpcyBzcmMgb250byB0aGF0IGRlc3QncyBzcmMgYXJyYXkuXG4gICAgICBmaWxlQnlEZXN0W2Rlc3RdLnNyYy5wdXNoKHNyYyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE90aGVyd2lzZSBjcmVhdGUgYSBuZXcgc3JjLWRlc3QgZmlsZSBtYXBwaW5nIG9iamVjdC5cbiAgICAgIGZpbGVzLnB1c2goe1xuICAgICAgICBzcmM6IFtzcmNdLFxuICAgICAgICBkZXN0OiBkZXN0LFxuICAgICAgfSk7XG4gICAgICAvLyBBbmQgc3RvcmUgYSByZWZlcmVuY2UgZm9yIGxhdGVyIHVzZS5cbiAgICAgIGZpbGVCeURlc3RbZGVzdF0gPSBmaWxlc1tmaWxlcy5sZW5ndGggLSAxXTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gZmlsZXM7XG59O1xuXG4vLyByZXVzaW5nIGJpdHMgb2YgZ3J1bnQncyBtdWx0aS10YXNrIHNvdXJjZSBub3JtYWxpemF0aW9uXG5maWxlLm5vcm1hbGl6ZUZpbGVzQXJyYXkgPSBmdW5jdGlvbihkYXRhKSB7XG4gIHZhciBmaWxlcyA9IFtdO1xuXG4gIGRhdGEuZm9yRWFjaChmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgcHJvcDtcbiAgICBpZiAoJ3NyYycgaW4gb2JqIHx8ICdkZXN0JyBpbiBvYmopIHtcbiAgICAgIGZpbGVzLnB1c2gob2JqKTtcbiAgICB9XG4gIH0pO1xuXG4gIGlmIChmaWxlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBmaWxlcyA9IF8oZmlsZXMpLmNoYWluKCkuZm9yRWFjaChmdW5jdGlvbihvYmopIHtcbiAgICBpZiAoISgnc3JjJyBpbiBvYmopIHx8ICFvYmouc3JjKSB7IHJldHVybjsgfVxuICAgIC8vIE5vcm1hbGl6ZSAuc3JjIHByb3BlcnRpZXMgdG8gZmxhdHRlbmVkIGFycmF5LlxuICAgIGlmIChBcnJheS5pc0FycmF5KG9iai5zcmMpKSB7XG4gICAgICBvYmouc3JjID0gZmxhdHRlbihvYmouc3JjKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqLnNyYyA9IFtvYmouc3JjXTtcbiAgICB9XG4gIH0pLm1hcChmdW5jdGlvbihvYmopIHtcbiAgICAvLyBCdWlsZCBvcHRpb25zIG9iamVjdCwgcmVtb3ZpbmcgdW53YW50ZWQgcHJvcGVydGllcy5cbiAgICB2YXIgZXhwYW5kT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG9iaik7XG4gICAgZGVsZXRlIGV4cGFuZE9wdGlvbnMuc3JjO1xuICAgIGRlbGV0ZSBleHBhbmRPcHRpb25zLmRlc3Q7XG5cbiAgICAvLyBFeHBhbmQgZmlsZSBtYXBwaW5ncy5cbiAgICBpZiAob2JqLmV4cGFuZCkge1xuICAgICAgcmV0dXJuIGZpbGUuZXhwYW5kTWFwcGluZyhvYmouc3JjLCBvYmouZGVzdCwgZXhwYW5kT3B0aW9ucykubWFwKGZ1bmN0aW9uKG1hcE9iaikge1xuICAgICAgICAvLyBDb3B5IG9iaiBwcm9wZXJ0aWVzIHRvIHJlc3VsdC5cbiAgICAgICAgdmFyIHJlc3VsdCA9IE9iamVjdC5hc3NpZ24oe30sIG9iaik7XG4gICAgICAgIC8vIE1ha2UgYSBjbG9uZSBvZiB0aGUgb3JpZyBvYmogYXZhaWxhYmxlLlxuICAgICAgICByZXN1bHQub3JpZyA9IE9iamVjdC5hc3NpZ24oe30sIG9iaik7XG4gICAgICAgIC8vIFNldCAuc3JjIGFuZCAuZGVzdCwgcHJvY2Vzc2luZyBib3RoIGFzIHRlbXBsYXRlcy5cbiAgICAgICAgcmVzdWx0LnNyYyA9IG1hcE9iai5zcmM7XG4gICAgICAgIHJlc3VsdC5kZXN0ID0gbWFwT2JqLmRlc3Q7XG4gICAgICAgIC8vIFJlbW92ZSB1bndhbnRlZCBwcm9wZXJ0aWVzLlxuICAgICAgICBbJ2V4cGFuZCcsICdjd2QnLCAnZmxhdHRlbicsICdyZW5hbWUnLCAnZXh0J10uZm9yRWFjaChmdW5jdGlvbihwcm9wKSB7XG4gICAgICAgICAgZGVsZXRlIHJlc3VsdFtwcm9wXTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBDb3B5IG9iaiBwcm9wZXJ0aWVzIHRvIHJlc3VsdCwgYWRkaW5nIGFuIC5vcmlnIHByb3BlcnR5LlxuICAgIHZhciByZXN1bHQgPSBPYmplY3QuYXNzaWduKHt9LCBvYmopO1xuICAgIC8vIE1ha2UgYSBjbG9uZSBvZiB0aGUgb3JpZyBvYmogYXZhaWxhYmxlLlxuICAgIHJlc3VsdC5vcmlnID0gT2JqZWN0LmFzc2lnbih7fSwgb2JqKTtcblxuICAgIGlmICgnc3JjJyBpbiByZXN1bHQpIHtcbiAgICAgIC8vIEV4cG9zZSBhbiBleHBhbmQtb24tZGVtYW5kIGdldHRlciBtZXRob2QgYXMgLnNyYy5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXN1bHQsICdzcmMnLCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGdldDogZnVuY3Rpb24gZm4oKSB7XG4gICAgICAgICAgdmFyIHNyYztcbiAgICAgICAgICBpZiAoISgncmVzdWx0JyBpbiBmbikpIHtcbiAgICAgICAgICAgIHNyYyA9IG9iai5zcmM7XG4gICAgICAgICAgICAvLyBJZiBzcmMgaXMgYW4gYXJyYXksIGZsYXR0ZW4gaXQuIE90aGVyd2lzZSwgbWFrZSBpdCBpbnRvIGFuIGFycmF5LlxuICAgICAgICAgICAgc3JjID0gQXJyYXkuaXNBcnJheShzcmMpID8gZmxhdHRlbihzcmMpIDogW3NyY107XG4gICAgICAgICAgICAvLyBFeHBhbmQgc3JjIGZpbGVzLCBtZW1vaXppbmcgcmVzdWx0LlxuICAgICAgICAgICAgZm4ucmVzdWx0ID0gZmlsZS5leHBhbmQoZXhwYW5kT3B0aW9ucywgc3JjKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZuLnJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKCdkZXN0JyBpbiByZXN1bHQpIHtcbiAgICAgIHJlc3VsdC5kZXN0ID0gb2JqLmRlc3Q7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSkuZmxhdHRlbigpLnZhbHVlKCk7XG5cbiAgcmV0dXJuIGZpbGVzO1xufTtcbiIsCiAgICAiLyoqXG4gKiBhcmNoaXZlci11dGlsc1xuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNSBDaHJpcyBUYWxraW5ndG9uLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cHM6Ly9naXRodWIuY29tL2FyY2hpdmVyanMvYXJjaGl2ZXItdXRpbHMvYmxvYi9tYXN0ZXIvTElDRU5TRVxuICovXG52YXIgZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpO1xudmFyIHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG52YXIgaXNTdHJlYW0gPSByZXF1aXJlKCdpcy1zdHJlYW0nKTtcbnZhciBsYXp5c3RyZWFtID0gcmVxdWlyZSgnbGF6eXN0cmVhbScpO1xudmFyIG5vcm1hbGl6ZVBhdGggPSByZXF1aXJlKCdub3JtYWxpemUtcGF0aCcpO1xudmFyIGRlZmF1bHRzID0gcmVxdWlyZSgnbG9kYXNoL2RlZmF1bHRzJyk7XG5cbnZhciBTdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0nKS5TdHJlYW07XG52YXIgUGFzc1Rocm91Z2ggPSByZXF1aXJlKCdyZWFkYWJsZS1zdHJlYW0nKS5QYXNzVGhyb3VnaDtcblxudmFyIHV0aWxzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcbnV0aWxzLmZpbGUgPSByZXF1aXJlKCcuL2ZpbGUuanMnKTtcblxudXRpbHMuY29sbGVjdFN0cmVhbSA9IGZ1bmN0aW9uKHNvdXJjZSwgY2FsbGJhY2spIHtcbiAgdmFyIGNvbGxlY3Rpb24gPSBbXTtcbiAgdmFyIHNpemUgPSAwO1xuXG4gIHNvdXJjZS5vbignZXJyb3InLCBjYWxsYmFjayk7XG5cbiAgc291cmNlLm9uKCdkYXRhJywgZnVuY3Rpb24oY2h1bmspIHtcbiAgICBjb2xsZWN0aW9uLnB1c2goY2h1bmspO1xuICAgIHNpemUgKz0gY2h1bmsubGVuZ3RoO1xuICB9KTtcblxuICBzb3VyY2Uub24oJ2VuZCcsIGZ1bmN0aW9uKCkge1xuICAgIHZhciBidWYgPSBCdWZmZXIuYWxsb2Moc2l6ZSk7XG4gICAgdmFyIG9mZnNldCA9IDA7XG5cbiAgICBjb2xsZWN0aW9uLmZvckVhY2goZnVuY3Rpb24oZGF0YSkge1xuICAgICAgZGF0YS5jb3B5KGJ1Ziwgb2Zmc2V0KTtcbiAgICAgIG9mZnNldCArPSBkYXRhLmxlbmd0aDtcbiAgICB9KTtcblxuICAgIGNhbGxiYWNrKG51bGwsIGJ1Zik7XG4gIH0pO1xufTtcblxudXRpbHMuZGF0ZWlmeSA9IGZ1bmN0aW9uKGRhdGVpc2gpIHtcbiAgZGF0ZWlzaCA9IGRhdGVpc2ggfHwgbmV3IERhdGUoKTtcblxuICBpZiAoZGF0ZWlzaCBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICBkYXRlaXNoID0gZGF0ZWlzaDtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZGF0ZWlzaCA9PT0gJ3N0cmluZycpIHtcbiAgICBkYXRlaXNoID0gbmV3IERhdGUoZGF0ZWlzaCk7XG4gIH0gZWxzZSB7XG4gICAgZGF0ZWlzaCA9IG5ldyBEYXRlKCk7XG4gIH1cblxuICByZXR1cm4gZGF0ZWlzaDtcbn07XG5cbi8vIHRoaXMgaXMgc2xpZ2h0bHkgZGlmZmVyZW50IGZyb20gbG9kYXNoIHZlcnNpb25cbnV0aWxzLmRlZmF1bHRzID0gZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2UsIGd1YXJkKSB7XG4gIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICBhcmdzWzBdID0gYXJnc1swXSB8fCB7fTtcblxuICByZXR1cm4gZGVmYXVsdHMoLi4uYXJncyk7XG59O1xuXG51dGlscy5pc1N0cmVhbSA9IGZ1bmN0aW9uKHNvdXJjZSkge1xuICByZXR1cm4gaXNTdHJlYW0oc291cmNlKTtcbn07XG5cbnV0aWxzLmxhenlSZWFkU3RyZWFtID0gZnVuY3Rpb24oZmlsZXBhdGgpIHtcbiAgcmV0dXJuIG5ldyBsYXp5c3RyZWFtLlJlYWRhYmxlKGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBmcy5jcmVhdGVSZWFkU3RyZWFtKGZpbGVwYXRoKTtcbiAgfSk7XG59O1xuXG51dGlscy5ub3JtYWxpemVJbnB1dFNvdXJjZSA9IGZ1bmN0aW9uKHNvdXJjZSkge1xuICBpZiAoc291cmNlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5hbGxvYygwKTtcbiAgfSBlbHNlIGlmICh0eXBlb2Ygc291cmNlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShzb3VyY2UpO1xuICB9IGVsc2UgaWYgKHV0aWxzLmlzU3RyZWFtKHNvdXJjZSkpIHtcbiAgICAvLyBBbHdheXMgcGlwZSB0aHJvdWdoIGEgUGFzc1Rocm91Z2ggc3RyZWFtIHRvIGd1YXJhbnRlZSBwYXVzaW5nIHRoZSBzdHJlYW0gaWYgaXQncyBhbHJlYWR5IGZsb3dpbmcsXG4gICAgLy8gc2luY2UgaXQgd2lsbCBvbmx5IGJlIHByb2Nlc3NlZCBpbiBhIChkaXN0YW50KSBmdXR1cmUgaXRlcmF0aW9uIG9mIHRoZSBldmVudCBsb29wLCBhbmQgd2lsbCBsb3NlXG4gICAgLy8gZGF0YSBpZiBhbHJlYWR5IGZsb3dpbmcgbm93LlxuICAgIHJldHVybiBzb3VyY2UucGlwZShuZXcgUGFzc1Rocm91Z2goKSk7XG4gIH1cblxuICByZXR1cm4gc291cmNlO1xufTtcblxudXRpbHMuc2FuaXRpemVQYXRoID0gZnVuY3Rpb24oZmlsZXBhdGgpIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZVBhdGgoZmlsZXBhdGgsIGZhbHNlKS5yZXBsYWNlKC9eXFx3KzovLCAnJykucmVwbGFjZSgvXihcXC5cXC5cXC98XFwvKSsvLCAnJyk7XG59O1xuXG51dGlscy50cmFpbGluZ1NsYXNoSXQgPSBmdW5jdGlvbihzdHIpIHtcbiAgcmV0dXJuIHN0ci5zbGljZSgtMSkgIT09ICcvJyA/IHN0ciArICcvJyA6IHN0cjtcbn07XG5cbnV0aWxzLnVuaXhpZnlQYXRoID0gZnVuY3Rpb24oZmlsZXBhdGgpIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZVBhdGgoZmlsZXBhdGgsIGZhbHNlKS5yZXBsYWNlKC9eXFx3KzovLCAnJyk7XG59O1xuXG51dGlscy53YWxrZGlyID0gZnVuY3Rpb24oZGlycGF0aCwgYmFzZSwgY2FsbGJhY2spIHtcbiAgdmFyIHJlc3VsdHMgPSBbXTtcblxuICBpZiAodHlwZW9mIGJhc2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYWxsYmFjayA9IGJhc2U7XG4gICAgYmFzZSA9IGRpcnBhdGg7XG4gIH1cblxuICBmcy5yZWFkZGlyKGRpcnBhdGgsIGZ1bmN0aW9uKGVyciwgbGlzdCkge1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgZmlsZTtcbiAgICB2YXIgZmlsZXBhdGg7XG5cbiAgICBpZiAoZXJyKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICB9XG5cbiAgICAoZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIGZpbGUgPSBsaXN0W2krK107XG5cbiAgICAgIGlmICghZmlsZSkge1xuICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCwgcmVzdWx0cyk7XG4gICAgICB9XG5cbiAgICAgIGZpbGVwYXRoID0gcGF0aC5qb2luKGRpcnBhdGgsIGZpbGUpO1xuXG4gICAgICBmcy5zdGF0KGZpbGVwYXRoLCBmdW5jdGlvbihlcnIsIHN0YXRzKSB7XG4gICAgICAgIHJlc3VsdHMucHVzaCh7XG4gICAgICAgICAgcGF0aDogZmlsZXBhdGgsXG4gICAgICAgICAgcmVsYXRpdmU6IHBhdGgucmVsYXRpdmUoYmFzZSwgZmlsZXBhdGgpLnJlcGxhY2UoL1xcXFwvZywgJy8nKSxcbiAgICAgICAgICBzdGF0czogc3RhdHNcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHN0YXRzICYmIHN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgICB1dGlscy53YWxrZGlyKGZpbGVwYXRoLCBiYXNlLCBmdW5jdGlvbihlcnIsIHJlcykge1xuXHQgICAgaWYoZXJyKXtcblx0ICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG5cdCAgICB9XG5cbiAgICAgICAgICAgIHJlcy5mb3JFYWNoKGZ1bmN0aW9uKGRpckVudHJ5KSB7XG4gICAgICAgICAgICAgIHJlc3VsdHMucHVzaChkaXJFbnRyeSk7XG4gICAgICAgICAgICB9KTtcblx0XHQgIFxuICAgICAgICAgICAgbmV4dCgpOyAgXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KSgpO1xuICB9KTtcbn07XG4iLAogICAgIi8qKlxuICogQXJjaGl2ZXIgQ29yZVxuICpcbiAqIEBpZ25vcmVcbiAqIEBsaWNlbnNlIFtNSVRde0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hcmNoaXZlcmpzL25vZGUtYXJjaGl2ZXIvYmxvYi9tYXN0ZXIvTElDRU5TRX1cbiAqIEBjb3B5cmlnaHQgKGMpIDIwMTItMjAxNCBDaHJpcyBUYWxraW5ndG9uLCBjb250cmlidXRvcnMuXG4gKi9cblxudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG5cbmNvbnN0IEVSUk9SX0NPREVTID0ge1xuICAnQUJPUlRFRCc6ICdhcmNoaXZlIHdhcyBhYm9ydGVkJyxcbiAgJ0RJUkVDVE9SWURJUlBBVEhSRVFVSVJFRCc6ICdkaXJldG9yeSBkaXJwYXRoIGFyZ3VtZW50IG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIHZhbHVlJyxcbiAgJ0RJUkVDVE9SWUZVTkNUSU9OSU5WQUxJRERBVEEnOiAnaW52YWxpZCBkYXRhIHJldHVybmVkIGJ5IGRpcmVjdG9yeSBjdXN0b20gZGF0YSBmdW5jdGlvbicsXG4gICdFTlRSWU5BTUVSRVFVSVJFRCc6ICdlbnRyeSBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIHZhbHVlJyxcbiAgJ0ZJTEVGSUxFUEFUSFJFUVVJUkVEJzogJ2ZpbGUgZmlsZXBhdGggYXJndW1lbnQgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcgdmFsdWUnLFxuICAnRklOQUxJWklORyc6ICdhcmNoaXZlIGFscmVhZHkgZmluYWxpemluZycsXG4gICdRVUVVRUNMT1NFRCc6ICdxdWV1ZSBjbG9zZWQnLFxuICAnTk9FTkRNRVRIT0QnOiAnbm8gc3VpdGFibGUgZmluYWxpemUvZW5kIG1ldGhvZCBkZWZpbmVkIGJ5IG1vZHVsZScsXG4gICdESVJFQ1RPUllOT1RTVVBQT1JURUQnOiAnc3VwcG9ydCBmb3IgZGlyZWN0b3J5IGVudHJpZXMgbm90IGRlZmluZWQgYnkgbW9kdWxlJyxcbiAgJ0ZPUk1BVFNFVCc6ICdhcmNoaXZlIGZvcm1hdCBhbHJlYWR5IHNldCcsXG4gICdJTlBVVFNURUFNQlVGRkVSUkVRVUlSRUQnOiAnaW5wdXQgc291cmNlIG11c3QgYmUgdmFsaWQgU3RyZWFtIG9yIEJ1ZmZlciBpbnN0YW5jZScsXG4gICdNT0RVTEVTRVQnOiAnbW9kdWxlIGFscmVhZHkgc2V0JyxcbiAgJ1NZTUxJTktOT1RTVVBQT1JURUQnOiAnc3VwcG9ydCBmb3Igc3ltbGluayBlbnRyaWVzIG5vdCBkZWZpbmVkIGJ5IG1vZHVsZScsXG4gICdTWU1MSU5LRklMRVBBVEhSRVFVSVJFRCc6ICdzeW1saW5rIGZpbGVwYXRoIGFyZ3VtZW50IG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIHZhbHVlJyxcbiAgJ1NZTUxJTktUQVJHRVRSRVFVSVJFRCc6ICdzeW1saW5rIHRhcmdldCBhcmd1bWVudCBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyB2YWx1ZScsXG4gICdFTlRSWU5PVFNVUFBPUlRFRCc6ICdlbnRyeSBub3Qgc3VwcG9ydGVkJ1xufTtcblxuZnVuY3Rpb24gQXJjaGl2ZXJFcnJvcihjb2RlLCBkYXRhKSB7XG4gIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuICAvL3RoaXMubmFtZSA9IHRoaXMuY29uc3RydWN0b3IubmFtZTtcbiAgdGhpcy5tZXNzYWdlID0gRVJST1JfQ09ERVNbY29kZV0gfHwgY29kZTtcbiAgdGhpcy5jb2RlID0gY29kZTtcbiAgdGhpcy5kYXRhID0gZGF0YTtcbn1cblxudXRpbC5pbmhlcml0cyhBcmNoaXZlckVycm9yLCBFcnJvcik7XG5cbmV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IEFyY2hpdmVyRXJyb3I7IiwKICAgICIvKipcbiAqIEFyY2hpdmVyIENvcmVcbiAqXG4gKiBAaWdub3JlXG4gKiBAbGljZW5zZSBbTUlUXXtAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXJjaGl2ZXJqcy9ub2RlLWFyY2hpdmVyL2Jsb2IvbWFzdGVyL0xJQ0VOU0V9XG4gKiBAY29weXJpZ2h0IChjKSAyMDEyLTIwMTQgQ2hyaXMgVGFsa2luZ3RvbiwgY29udHJpYnV0b3JzLlxuICovXG52YXIgZnMgPSByZXF1aXJlKCdmcycpO1xudmFyIGdsb2IgPSByZXF1aXJlKCdyZWFkZGlyLWdsb2InKTtcbnZhciBhc3luYyA9IHJlcXVpcmUoJ2FzeW5jJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcbnZhciB1dGlsID0gcmVxdWlyZSgnYXJjaGl2ZXItdXRpbHMnKTtcblxudmFyIGluaGVyaXRzID0gcmVxdWlyZSgndXRpbCcpLmluaGVyaXRzO1xudmFyIEFyY2hpdmVyRXJyb3IgPSByZXF1aXJlKCcuL2Vycm9yJyk7XG52YXIgVHJhbnNmb3JtID0gcmVxdWlyZSgncmVhZGFibGUtc3RyZWFtJykuVHJhbnNmb3JtO1xuXG52YXIgd2luMzIgPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInO1xuXG4vKipcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtTdHJpbmd9IGZvcm1hdCBUaGUgYXJjaGl2ZSBmb3JtYXQgdG8gdXNlLlxuICogQHBhcmFtIHsoQ29yZU9wdGlvbnN8VHJhbnNmb3JtT3B0aW9ucyl9IG9wdGlvbnMgU2VlIGFsc28ge0BsaW5rIFppcE9wdGlvbnN9IGFuZCB7QGxpbmsgVGFyT3B0aW9uc30uXG4gKi9cbnZhciBBcmNoaXZlciA9IGZ1bmN0aW9uKGZvcm1hdCwgb3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQXJjaGl2ZXIpKSB7XG4gICAgcmV0dXJuIG5ldyBBcmNoaXZlcihmb3JtYXQsIG9wdGlvbnMpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBmb3JtYXQgIT09ICdzdHJpbmcnKSB7XG4gICAgb3B0aW9ucyA9IGZvcm1hdDtcbiAgICBmb3JtYXQgPSAnemlwJztcbiAgfVxuXG4gIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMgPSB1dGlsLmRlZmF1bHRzKG9wdGlvbnMsIHtcbiAgICBoaWdoV2F0ZXJNYXJrOiAxMDI0ICogMTAyNCxcbiAgICBzdGF0Q29uY3VycmVuY3k6IDRcbiAgfSk7XG5cbiAgVHJhbnNmb3JtLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cbiAgdGhpcy5fZm9ybWF0ID0gZmFsc2U7XG4gIHRoaXMuX21vZHVsZSA9IGZhbHNlO1xuICB0aGlzLl9wZW5kaW5nID0gMDtcbiAgdGhpcy5fcG9pbnRlciA9IDA7XG5cbiAgdGhpcy5fZW50cmllc0NvdW50ID0gMDtcbiAgdGhpcy5fZW50cmllc1Byb2Nlc3NlZENvdW50ID0gMDtcbiAgdGhpcy5fZnNFbnRyaWVzVG90YWxCeXRlcyA9IDA7XG4gIHRoaXMuX2ZzRW50cmllc1Byb2Nlc3NlZEJ5dGVzID0gMDtcblxuICB0aGlzLl9xdWV1ZSA9IGFzeW5jLnF1ZXVlKHRoaXMuX29uUXVldWVUYXNrLmJpbmQodGhpcyksIDEpO1xuICB0aGlzLl9xdWV1ZS5kcmFpbih0aGlzLl9vblF1ZXVlRHJhaW4uYmluZCh0aGlzKSk7XG5cbiAgdGhpcy5fc3RhdFF1ZXVlID0gYXN5bmMucXVldWUodGhpcy5fb25TdGF0UXVldWVUYXNrLmJpbmQodGhpcyksIG9wdGlvbnMuc3RhdENvbmN1cnJlbmN5KTtcbiAgdGhpcy5fc3RhdFF1ZXVlLmRyYWluKHRoaXMuX29uUXVldWVEcmFpbi5iaW5kKHRoaXMpKTtcblxuICB0aGlzLl9zdGF0ZSA9IHtcbiAgICBhYm9ydGVkOiBmYWxzZSxcbiAgICBmaW5hbGl6ZTogZmFsc2UsXG4gICAgZmluYWxpemluZzogZmFsc2UsXG4gICAgZmluYWxpemVkOiBmYWxzZSxcbiAgICBtb2R1bGVQaXBlZDogZmFsc2VcbiAgfTtcblxuICB0aGlzLl9zdHJlYW1zID0gW107XG59O1xuXG5pbmhlcml0cyhBcmNoaXZlciwgVHJhbnNmb3JtKTtcblxuLyoqXG4gKiBJbnRlcm5hbCBsb2dpYyBmb3IgYGFib3J0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB2b2lkXG4gKi9cbkFyY2hpdmVyLnByb3RvdHlwZS5fYWJvcnQgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fc3RhdGUuYWJvcnRlZCA9IHRydWU7XG4gIHRoaXMuX3F1ZXVlLmtpbGwoKTtcbiAgdGhpcy5fc3RhdFF1ZXVlLmtpbGwoKTtcblxuICBpZiAodGhpcy5fcXVldWUuaWRsZSgpKSB7XG4gICAgdGhpcy5fc2h1dGRvd24oKTtcbiAgfVxufTtcblxuLyoqXG4gKiBJbnRlcm5hbCBoZWxwZXIgZm9yIGFwcGVuZGluZyBmaWxlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtICB7U3RyaW5nfSBmaWxlcGF0aCBUaGUgc291cmNlIGZpbGVwYXRoLlxuICogQHBhcmFtICB7RW50cnlEYXRhfSBkYXRhIFRoZSBlbnRyeSBkYXRhLlxuICogQHJldHVybiB2b2lkXG4gKi9cbkFyY2hpdmVyLnByb3RvdHlwZS5fYXBwZW5kID0gZnVuY3Rpb24oZmlsZXBhdGgsIGRhdGEpIHtcbiAgZGF0YSA9IGRhdGEgfHwge307XG5cbiAgdmFyIHRhc2sgPSB7XG4gICAgc291cmNlOiBudWxsLFxuICAgIGZpbGVwYXRoOiBmaWxlcGF0aFxuICB9O1xuXG4gIGlmICghZGF0YS5uYW1lKSB7XG4gICAgZGF0YS5uYW1lID0gZmlsZXBhdGg7XG4gIH1cblxuICBkYXRhLnNvdXJjZVBhdGggPSBmaWxlcGF0aDtcbiAgdGFzay5kYXRhID0gZGF0YTtcbiAgdGhpcy5fZW50cmllc0NvdW50Kys7XG5cbiAgaWYgKGRhdGEuc3RhdHMgJiYgZGF0YS5zdGF0cyBpbnN0YW5jZW9mIGZzLlN0YXRzKSB7XG4gICAgdGFzayA9IHRoaXMuX3VwZGF0ZVF1ZXVlVGFza1dpdGhTdGF0cyh0YXNrLCBkYXRhLnN0YXRzKTtcbiAgICBpZiAodGFzaykge1xuICAgICAgaWYgKGRhdGEuc3RhdHMuc2l6ZSkge1xuICAgICAgICB0aGlzLl9mc0VudHJpZXNUb3RhbEJ5dGVzICs9IGRhdGEuc3RhdHMuc2l6ZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fcXVldWUucHVzaCh0YXNrKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fc3RhdFF1ZXVlLnB1c2godGFzayk7XG4gIH1cbn07XG5cbi8qKlxuICogSW50ZXJuYWwgbG9naWMgZm9yIGBmaW5hbGl6ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4gdm9pZFxuICovXG5BcmNoaXZlci5wcm90b3R5cGUuX2ZpbmFsaXplID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLl9zdGF0ZS5maW5hbGl6aW5nIHx8IHRoaXMuX3N0YXRlLmZpbmFsaXplZCB8fCB0aGlzLl9zdGF0ZS5hYm9ydGVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdGhpcy5fc3RhdGUuZmluYWxpemluZyA9IHRydWU7XG5cbiAgdGhpcy5fbW9kdWxlRmluYWxpemUoKTtcblxuICB0aGlzLl9zdGF0ZS5maW5hbGl6aW5nID0gZmFsc2U7XG4gIHRoaXMuX3N0YXRlLmZpbmFsaXplZCA9IHRydWU7XG59O1xuXG4vKipcbiAqIENoZWNrcyB0aGUgdmFyaW91cyBzdGF0ZSB2YXJpYWJsZXMgdG8gZGV0ZXJtaW5lIGlmIHdlIGNhbiBgZmluYWxpemVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICovXG5BcmNoaXZlci5wcm90b3R5cGUuX21heWJlRmluYWxpemUgPSBmdW5jdGlvbigpIHtcbiAgaWYgKHRoaXMuX3N0YXRlLmZpbmFsaXppbmcgfHwgdGhpcy5fc3RhdGUuZmluYWxpemVkIHx8IHRoaXMuX3N0YXRlLmFib3J0ZWQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAodGhpcy5fc3RhdGUuZmluYWxpemUgJiYgdGhpcy5fcGVuZGluZyA9PT0gMCAmJiB0aGlzLl9xdWV1ZS5pZGxlKCkgJiYgdGhpcy5fc3RhdFF1ZXVlLmlkbGUoKSkge1xuICAgIHRoaXMuX2ZpbmFsaXplKCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIEFwcGVuZHMgYW4gZW50cnkgdG8gdGhlIG1vZHVsZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGZpcmVzICBBcmNoaXZlciNlbnRyeVxuICogQHBhcmFtICB7KEJ1ZmZlcnxTdHJlYW0pfSBzb3VyY2VcbiAqIEBwYXJhbSAge0VudHJ5RGF0YX0gZGF0YVxuICogQHBhcmFtICB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHZvaWRcbiAqL1xuQXJjaGl2ZXIucHJvdG90eXBlLl9tb2R1bGVBcHBlbmQgPSBmdW5jdGlvbihzb3VyY2UsIGRhdGEsIGNhbGxiYWNrKSB7XG4gIGlmICh0aGlzLl9zdGF0ZS5hYm9ydGVkKSB7XG4gICAgY2FsbGJhY2soKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aGlzLl9tb2R1bGUuYXBwZW5kKHNvdXJjZSwgZGF0YSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgdGhpcy5fdGFzayA9IG51bGw7XG5cbiAgICBpZiAodGhpcy5fc3RhdGUuYWJvcnRlZCkge1xuICAgICAgdGhpcy5fc2h1dGRvd24oKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZXJyKSB7XG4gICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgICAgIHNldEltbWVkaWF0ZShjYWxsYmFjayk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiB0aGUgZW50cnkncyBpbnB1dCBoYXMgYmVlbiBwcm9jZXNzZWQgYW5kIGFwcGVuZGVkIHRvIHRoZSBhcmNoaXZlLlxuICAgICAqXG4gICAgICogQGV2ZW50IEFyY2hpdmVyI2VudHJ5XG4gICAgICogQHR5cGUge0VudHJ5RGF0YX1cbiAgICAgKi9cbiAgICB0aGlzLmVtaXQoJ2VudHJ5JywgZGF0YSk7XG4gICAgdGhpcy5fZW50cmllc1Byb2Nlc3NlZENvdW50Kys7XG5cbiAgICBpZiAoZGF0YS5zdGF0cyAmJiBkYXRhLnN0YXRzLnNpemUpIHtcbiAgICAgIHRoaXMuX2ZzRW50cmllc1Byb2Nlc3NlZEJ5dGVzICs9IGRhdGEuc3RhdHMuc2l6ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZXZlbnQgQXJjaGl2ZXIjcHJvZ3Jlc3NcbiAgICAgKiBAdHlwZSB7UHJvZ3Jlc3NEYXRhfVxuICAgICAqL1xuICAgIHRoaXMuZW1pdCgncHJvZ3Jlc3MnLCB7XG4gICAgICBlbnRyaWVzOiB7XG4gICAgICAgIHRvdGFsOiB0aGlzLl9lbnRyaWVzQ291bnQsXG4gICAgICAgIHByb2Nlc3NlZDogdGhpcy5fZW50cmllc1Byb2Nlc3NlZENvdW50XG4gICAgICB9LFxuICAgICAgZnM6IHtcbiAgICAgICAgdG90YWxCeXRlczogdGhpcy5fZnNFbnRyaWVzVG90YWxCeXRlcyxcbiAgICAgICAgcHJvY2Vzc2VkQnl0ZXM6IHRoaXMuX2ZzRW50cmllc1Byb2Nlc3NlZEJ5dGVzXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBzZXRJbW1lZGlhdGUoY2FsbGJhY2spO1xuICB9LmJpbmQodGhpcykpO1xufTtcblxuLyoqXG4gKiBGaW5hbGl6ZXMgdGhlIG1vZHVsZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB2b2lkXG4gKi9cbkFyY2hpdmVyLnByb3RvdHlwZS5fbW9kdWxlRmluYWxpemUgPSBmdW5jdGlvbigpIHtcbiAgaWYgKHR5cGVvZiB0aGlzLl9tb2R1bGUuZmluYWxpemUgPT09ICdmdW5jdGlvbicpIHtcbiAgICB0aGlzLl9tb2R1bGUuZmluYWxpemUoKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5fbW9kdWxlLmVuZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRoaXMuX21vZHVsZS5lbmQoKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmVtaXQoJ2Vycm9yJywgbmV3IEFyY2hpdmVyRXJyb3IoJ05PRU5ETUVUSE9EJykpO1xuICB9XG59O1xuXG4vKipcbiAqIFBpcGVzIHRoZSBtb2R1bGUgdG8gb3VyIGludGVybmFsIHN0cmVhbSB3aXRoIGVycm9yIGJ1YmJsaW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHZvaWRcbiAqL1xuQXJjaGl2ZXIucHJvdG90eXBlLl9tb2R1bGVQaXBlID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX21vZHVsZS5vbignZXJyb3InLCB0aGlzLl9vbk1vZHVsZUVycm9yLmJpbmQodGhpcykpO1xuICB0aGlzLl9tb2R1bGUucGlwZSh0aGlzKTtcbiAgdGhpcy5fc3RhdGUubW9kdWxlUGlwZWQgPSB0cnVlO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIHRoZSBjdXJyZW50IG1vZHVsZSBzdXBwb3J0cyBhIGRlZmluZWQgZmVhdHVyZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtICB7U3RyaW5nfSBrZXlcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKi9cbkFyY2hpdmVyLnByb3RvdHlwZS5fbW9kdWxlU3VwcG9ydHMgPSBmdW5jdGlvbihrZXkpIHtcbiAgaWYgKCF0aGlzLl9tb2R1bGUuc3VwcG9ydHMgfHwgIXRoaXMuX21vZHVsZS5zdXBwb3J0c1trZXldKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuX21vZHVsZS5zdXBwb3J0c1trZXldO1xufTtcblxuLyoqXG4gKiBVbnBpcGVzIHRoZSBtb2R1bGUgZnJvbSBvdXIgaW50ZXJuYWwgc3RyZWFtLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHZvaWRcbiAqL1xuQXJjaGl2ZXIucHJvdG90eXBlLl9tb2R1bGVVbnBpcGUgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fbW9kdWxlLnVucGlwZSh0aGlzKTtcbiAgdGhpcy5fc3RhdGUubW9kdWxlUGlwZWQgPSBmYWxzZTtcbn07XG5cbi8qKlxuICogTm9ybWFsaXplcyBlbnRyeSBkYXRhIHdpdGggZmFsbGJhY2tzIGZvciBrZXkgcHJvcGVydGllcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtICB7T2JqZWN0fSBkYXRhXG4gKiBAcGFyYW0gIHtmcy5TdGF0c30gc3RhdHNcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuQXJjaGl2ZXIucHJvdG90eXBlLl9ub3JtYWxpemVFbnRyeURhdGEgPSBmdW5jdGlvbihkYXRhLCBzdGF0cykge1xuICBkYXRhID0gdXRpbC5kZWZhdWx0cyhkYXRhLCB7XG4gICAgdHlwZTogJ2ZpbGUnLFxuICAgIG5hbWU6IG51bGwsXG4gICAgZGF0ZTogbnVsbCxcbiAgICBtb2RlOiBudWxsLFxuICAgIHByZWZpeDogbnVsbCxcbiAgICBzb3VyY2VQYXRoOiBudWxsLFxuICAgIHN0YXRzOiBmYWxzZVxuICB9KTtcblxuICBpZiAoc3RhdHMgJiYgZGF0YS5zdGF0cyA9PT0gZmFsc2UpIHtcbiAgICBkYXRhLnN0YXRzID0gc3RhdHM7XG4gIH1cblxuICB2YXIgaXNEaXIgPSBkYXRhLnR5cGUgPT09ICdkaXJlY3RvcnknO1xuXG4gIGlmIChkYXRhLm5hbWUpIHtcbiAgICBpZiAodHlwZW9mIGRhdGEucHJlZml4ID09PSAnc3RyaW5nJyAmJiAnJyAhPT0gZGF0YS5wcmVmaXgpIHtcbiAgICAgIGRhdGEubmFtZSA9IGRhdGEucHJlZml4ICsgJy8nICsgZGF0YS5uYW1lO1xuICAgICAgZGF0YS5wcmVmaXggPSBudWxsO1xuICAgIH1cblxuICAgIGRhdGEubmFtZSA9IHV0aWwuc2FuaXRpemVQYXRoKGRhdGEubmFtZSk7XG5cbiAgICBpZiAoZGF0YS50eXBlICE9PSAnc3ltbGluaycgJiYgZGF0YS5uYW1lLnNsaWNlKC0xKSA9PT0gJy8nKSB7XG4gICAgICBpc0RpciA9IHRydWU7XG4gICAgICBkYXRhLnR5cGUgPSAnZGlyZWN0b3J5JztcbiAgICB9IGVsc2UgaWYgKGlzRGlyKSB7XG4gICAgICBkYXRhLm5hbWUgKz0gJy8nO1xuICAgIH1cbiAgfVxuXG4gIC8vIDUxMSA9PT0gMDc3NzsgNDkzID09PSAwNzU1OyA0MzggPT09IDA2NjY7IDQyMCA9PT0gMDY0NFxuICBpZiAodHlwZW9mIGRhdGEubW9kZSA9PT0gJ251bWJlcicpIHtcbiAgICBpZiAod2luMzIpIHtcbiAgICAgIGRhdGEubW9kZSAmPSA1MTE7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGEubW9kZSAmPSA0MDk1XG4gICAgfVxuICB9IGVsc2UgaWYgKGRhdGEuc3RhdHMgJiYgZGF0YS5tb2RlID09PSBudWxsKSB7XG4gICAgaWYgKHdpbjMyKSB7XG4gICAgICBkYXRhLm1vZGUgPSBkYXRhLnN0YXRzLm1vZGUgJiA1MTE7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGEubW9kZSA9IGRhdGEuc3RhdHMubW9kZSAmIDQwOTU7XG4gICAgfVxuXG4gICAgLy8gc3RhdCBpc24ndCByZWxpYWJsZSBvbiB3aW5kb3dzOyBmb3JjZSAwNzU1IGZvciBkaXJcbiAgICBpZiAod2luMzIgJiYgaXNEaXIpIHtcbiAgICAgIGRhdGEubW9kZSA9IDQ5MztcbiAgICB9XG4gIH0gZWxzZSBpZiAoZGF0YS5tb2RlID09PSBudWxsKSB7XG4gICAgZGF0YS5tb2RlID0gaXNEaXIgPyA0OTMgOiA0MjA7XG4gIH1cblxuICBpZiAoZGF0YS5zdGF0cyAmJiBkYXRhLmRhdGUgPT09IG51bGwpIHtcbiAgICBkYXRhLmRhdGUgPSBkYXRhLnN0YXRzLm10aW1lO1xuICB9IGVsc2Uge1xuICAgIGRhdGEuZGF0ZSA9IHV0aWwuZGF0ZWlmeShkYXRhLmRhdGUpO1xuICB9XG5cbiAgcmV0dXJuIGRhdGE7XG59O1xuXG4vKipcbiAqIEVycm9yIGxpc3RlbmVyIHRoYXQgcmUtZW1pdHMgZXJyb3Igb24gdG8gb3VyIGludGVybmFsIHN0cmVhbS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtICB7RXJyb3J9IGVyclxuICogQHJldHVybiB2b2lkXG4gKi9cbkFyY2hpdmVyLnByb3RvdHlwZS5fb25Nb2R1bGVFcnJvciA9IGZ1bmN0aW9uKGVycikge1xuICAvKipcbiAgICogQGV2ZW50IEFyY2hpdmVyI2Vycm9yXG4gICAqIEB0eXBlIHtFcnJvckRhdGF9XG4gICAqL1xuICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHRoZSB2YXJpb3VzIHN0YXRlIHZhcmlhYmxlcyBhZnRlciBxdWV1ZSBoYXMgZHJhaW5lZCB0byBkZXRlcm1pbmUgaWZcbiAqIHdlIG5lZWQgdG8gYGZpbmFsaXplYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB2b2lkXG4gKi9cbkFyY2hpdmVyLnByb3RvdHlwZS5fb25RdWV1ZURyYWluID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLl9zdGF0ZS5maW5hbGl6aW5nIHx8IHRoaXMuX3N0YXRlLmZpbmFsaXplZCB8fCB0aGlzLl9zdGF0ZS5hYm9ydGVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHRoaXMuX3N0YXRlLmZpbmFsaXplICYmIHRoaXMuX3BlbmRpbmcgPT09IDAgJiYgdGhpcy5fcXVldWUuaWRsZSgpICYmIHRoaXMuX3N0YXRRdWV1ZS5pZGxlKCkpIHtcbiAgICB0aGlzLl9maW5hbGl6ZSgpO1xuICB9XG59O1xuXG4vKipcbiAqIEFwcGVuZHMgZWFjaCBxdWV1ZSB0YXNrIHRvIHRoZSBtb2R1bGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSAge09iamVjdH0gdGFza1xuICogQHBhcmFtICB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHZvaWRcbiAqL1xuQXJjaGl2ZXIucHJvdG90eXBlLl9vblF1ZXVlVGFzayA9IGZ1bmN0aW9uKHRhc2ssIGNhbGxiYWNrKSB7XG4gIHZhciBmdWxsQ2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgaWYodGFzay5kYXRhLmNhbGxiYWNrKSB7XG4gICAgICB0YXNrLmRhdGEuY2FsbGJhY2soKTtcbiAgICB9XG4gICAgY2FsbGJhY2soKTtcbiAgfVxuXG4gIGlmICh0aGlzLl9zdGF0ZS5maW5hbGl6aW5nIHx8IHRoaXMuX3N0YXRlLmZpbmFsaXplZCB8fCB0aGlzLl9zdGF0ZS5hYm9ydGVkKSB7XG4gICAgZnVsbENhbGxiYWNrKCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdGhpcy5fdGFzayA9IHRhc2s7XG4gIHRoaXMuX21vZHVsZUFwcGVuZCh0YXNrLnNvdXJjZSwgdGFzay5kYXRhLCBmdWxsQ2FsbGJhY2spO1xufTtcblxuLyoqXG4gKiBQZXJmb3JtcyBhIGZpbGUgc3RhdCBhbmQgcmVpbmplY3RzIHRoZSB0YXNrIGJhY2sgaW50byB0aGUgcXVldWUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSAge09iamVjdH0gdGFza1xuICogQHBhcmFtICB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHZvaWRcbiAqL1xuQXJjaGl2ZXIucHJvdG90eXBlLl9vblN0YXRRdWV1ZVRhc2sgPSBmdW5jdGlvbih0YXNrLCBjYWxsYmFjaykge1xuICBpZiAodGhpcy5fc3RhdGUuZmluYWxpemluZyB8fCB0aGlzLl9zdGF0ZS5maW5hbGl6ZWQgfHwgdGhpcy5fc3RhdGUuYWJvcnRlZCkge1xuICAgIGNhbGxiYWNrKCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZnMubHN0YXQodGFzay5maWxlcGF0aCwgZnVuY3Rpb24oZXJyLCBzdGF0cykge1xuICAgIGlmICh0aGlzLl9zdGF0ZS5hYm9ydGVkKSB7XG4gICAgICBzZXRJbW1lZGlhdGUoY2FsbGJhY2spO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChlcnIpIHtcbiAgICAgIHRoaXMuX2VudHJpZXNDb3VudC0tO1xuXG4gICAgICAvKipcbiAgICAgICAqIEBldmVudCBBcmNoaXZlciN3YXJuaW5nXG4gICAgICAgKiBAdHlwZSB7RXJyb3JEYXRhfVxuICAgICAgICovXG4gICAgICB0aGlzLmVtaXQoJ3dhcm5pbmcnLCBlcnIpO1xuICAgICAgc2V0SW1tZWRpYXRlKGNhbGxiYWNrKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0YXNrID0gdGhpcy5fdXBkYXRlUXVldWVUYXNrV2l0aFN0YXRzKHRhc2ssIHN0YXRzKTtcblxuICAgIGlmICh0YXNrKSB7XG4gICAgICBpZiAoc3RhdHMuc2l6ZSkge1xuICAgICAgICB0aGlzLl9mc0VudHJpZXNUb3RhbEJ5dGVzICs9IHN0YXRzLnNpemU7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3F1ZXVlLnB1c2godGFzayk7XG4gICAgfVxuXG4gICAgc2V0SW1tZWRpYXRlKGNhbGxiYWNrKTtcbiAgfS5iaW5kKHRoaXMpKTtcbn07XG5cbi8qKlxuICogVW5waXBlcyB0aGUgbW9kdWxlIGFuZCBlbmRzIG91ciBpbnRlcm5hbCBzdHJlYW0uXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4gdm9pZFxuICovXG5BcmNoaXZlci5wcm90b3R5cGUuX3NodXRkb3duID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX21vZHVsZVVucGlwZSgpO1xuICB0aGlzLmVuZCgpO1xufTtcblxuLyoqXG4gKiBUcmFja3MgdGhlIGJ5dGVzIGVtaXR0ZWQgYnkgb3VyIGludGVybmFsIHN0cmVhbS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtICB7QnVmZmVyfSBjaHVua1xuICogQHBhcmFtICB7U3RyaW5nfSBlbmNvZGluZ1xuICogQHBhcmFtICB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHZvaWRcbiAqL1xuQXJjaGl2ZXIucHJvdG90eXBlLl90cmFuc2Zvcm0gPSBmdW5jdGlvbihjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gIGlmIChjaHVuaykge1xuICAgIHRoaXMuX3BvaW50ZXIgKz0gY2h1bmsubGVuZ3RoO1xuICB9XG5cbiAgY2FsbGJhY2sobnVsbCwgY2h1bmspO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIGFuZCBub3JtYWxpemVzIGEgcXVldWUgdGFzayB1c2luZyBzdGF0cyBkYXRhLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gIHtPYmplY3R9IHRhc2tcbiAqIEBwYXJhbSAge2ZzLlN0YXRzfSBzdGF0c1xuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5BcmNoaXZlci5wcm90b3R5cGUuX3VwZGF0ZVF1ZXVlVGFza1dpdGhTdGF0cyA9IGZ1bmN0aW9uKHRhc2ssIHN0YXRzKSB7XG4gIGlmIChzdGF0cy5pc0ZpbGUoKSkge1xuICAgIHRhc2suZGF0YS50eXBlID0gJ2ZpbGUnO1xuICAgIHRhc2suZGF0YS5zb3VyY2VUeXBlID0gJ3N0cmVhbSc7XG4gICAgdGFzay5zb3VyY2UgPSB1dGlsLmxhenlSZWFkU3RyZWFtKHRhc2suZmlsZXBhdGgpO1xuICB9IGVsc2UgaWYgKHN0YXRzLmlzRGlyZWN0b3J5KCkgJiYgdGhpcy5fbW9kdWxlU3VwcG9ydHMoJ2RpcmVjdG9yeScpKSB7XG4gICAgdGFzay5kYXRhLm5hbWUgPSB1dGlsLnRyYWlsaW5nU2xhc2hJdCh0YXNrLmRhdGEubmFtZSk7XG4gICAgdGFzay5kYXRhLnR5cGUgPSAnZGlyZWN0b3J5JztcbiAgICB0YXNrLmRhdGEuc291cmNlUGF0aCA9IHV0aWwudHJhaWxpbmdTbGFzaEl0KHRhc2suZmlsZXBhdGgpO1xuICAgIHRhc2suZGF0YS5zb3VyY2VUeXBlID0gJ2J1ZmZlcic7XG4gICAgdGFzay5zb3VyY2UgPSBCdWZmZXIuY29uY2F0KFtdKTtcbiAgfSBlbHNlIGlmIChzdGF0cy5pc1N5bWJvbGljTGluaygpICYmIHRoaXMuX21vZHVsZVN1cHBvcnRzKCdzeW1saW5rJykpIHtcbiAgICB2YXIgbGlua1BhdGggPSBmcy5yZWFkbGlua1N5bmModGFzay5maWxlcGF0aCk7XG4gICAgdmFyIGRpck5hbWUgPSBwYXRoLmRpcm5hbWUodGFzay5maWxlcGF0aCk7XG4gICAgdGFzay5kYXRhLnR5cGUgPSAnc3ltbGluayc7XG4gICAgdGFzay5kYXRhLmxpbmtuYW1lID0gcGF0aC5yZWxhdGl2ZShkaXJOYW1lLCBwYXRoLnJlc29sdmUoZGlyTmFtZSwgbGlua1BhdGgpKTtcbiAgICB0YXNrLmRhdGEuc291cmNlVHlwZSA9ICdidWZmZXInO1xuICAgIHRhc2suc291cmNlID0gQnVmZmVyLmNvbmNhdChbXSk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIHRoaXMuZW1pdCgnd2FybmluZycsIG5ldyBBcmNoaXZlckVycm9yKCdESVJFQ1RPUllOT1RTVVBQT1JURUQnLCB0YXNrLmRhdGEpKTtcbiAgICB9IGVsc2UgaWYgKHN0YXRzLmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICAgIHRoaXMuZW1pdCgnd2FybmluZycsIG5ldyBBcmNoaXZlckVycm9yKCdTWU1MSU5LTk9UU1VQUE9SVEVEJywgdGFzay5kYXRhKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZW1pdCgnd2FybmluZycsIG5ldyBBcmNoaXZlckVycm9yKCdFTlRSWU5PVFNVUFBPUlRFRCcsIHRhc2suZGF0YSkpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdGFzay5kYXRhID0gdGhpcy5fbm9ybWFsaXplRW50cnlEYXRhKHRhc2suZGF0YSwgc3RhdHMpO1xuXG4gIHJldHVybiB0YXNrO1xufTtcblxuLyoqXG4gKiBBYm9ydHMgdGhlIGFyY2hpdmluZyBwcm9jZXNzLCB0YWtpbmcgYSBiZXN0LWVmZm9ydCBhcHByb2FjaCwgYnk6XG4gKlxuICogLSByZW1vdmluZyBhbnkgcGVuZGluZyBxdWV1ZSB0YXNrc1xuICogLSBhbGxvd2luZyBhbnkgYWN0aXZlIHF1ZXVlIHdvcmtlcnMgdG8gZmluaXNoXG4gKiAtIGRldGFjaGluZyBpbnRlcm5hbCBtb2R1bGUgcGlwZXNcbiAqIC0gZW5kaW5nIGJvdGggc2lkZXMgb2YgdGhlIFRyYW5zZm9ybSBzdHJlYW1cbiAqXG4gKiBJdCB3aWxsIE5PVCBkcmFpbiBhbnkgcmVtYWluaW5nIHNvdXJjZXMuXG4gKlxuICogQHJldHVybiB7dGhpc31cbiAqL1xuQXJjaGl2ZXIucHJvdG90eXBlLmFib3J0ID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLl9zdGF0ZS5hYm9ydGVkIHx8IHRoaXMuX3N0YXRlLmZpbmFsaXplZCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdGhpcy5fYWJvcnQoKTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwZW5kcyBhbiBpbnB1dCBzb3VyY2UgKHRleHQgc3RyaW5nLCBidWZmZXIsIG9yIHN0cmVhbSkgdG8gdGhlIGluc3RhbmNlLlxuICpcbiAqIFdoZW4gdGhlIGluc3RhbmNlIGhhcyByZWNlaXZlZCwgcHJvY2Vzc2VkLCBhbmQgZW1pdHRlZCB0aGUgaW5wdXQsIHRoZSBgZW50cnlgXG4gKiBldmVudCBpcyBmaXJlZC5cbiAqXG4gKiBAZmlyZXMgIEFyY2hpdmVyI2VudHJ5XG4gKiBAcGFyYW0gIHsoQnVmZmVyfFN0cmVhbXxTdHJpbmcpfSBzb3VyY2UgVGhlIGlucHV0IHNvdXJjZS5cbiAqIEBwYXJhbSAge0VudHJ5RGF0YX0gZGF0YSBTZWUgYWxzbyB7QGxpbmsgWmlwRW50cnlEYXRhfSBhbmQge0BsaW5rIFRhckVudHJ5RGF0YX0uXG4gKiBAcmV0dXJuIHt0aGlzfVxuICovXG5BcmNoaXZlci5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24oc291cmNlLCBkYXRhKSB7XG4gIGlmICh0aGlzLl9zdGF0ZS5maW5hbGl6ZSB8fCB0aGlzLl9zdGF0ZS5hYm9ydGVkKSB7XG4gICAgdGhpcy5lbWl0KCdlcnJvcicsIG5ldyBBcmNoaXZlckVycm9yKCdRVUVVRUNMT1NFRCcpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGRhdGEgPSB0aGlzLl9ub3JtYWxpemVFbnRyeURhdGEoZGF0YSk7XG5cbiAgaWYgKHR5cGVvZiBkYXRhLm5hbWUgIT09ICdzdHJpbmcnIHx8IGRhdGEubmFtZS5sZW5ndGggPT09IDApIHtcbiAgICB0aGlzLmVtaXQoJ2Vycm9yJywgbmV3IEFyY2hpdmVyRXJyb3IoJ0VOVFJZTkFNRVJFUVVJUkVEJykpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgaWYgKGRhdGEudHlwZSA9PT0gJ2RpcmVjdG9yeScgJiYgIXRoaXMuX21vZHVsZVN1cHBvcnRzKCdkaXJlY3RvcnknKSkge1xuICAgIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgQXJjaGl2ZXJFcnJvcignRElSRUNUT1JZTk9UU1VQUE9SVEVEJywgeyBuYW1lOiBkYXRhLm5hbWUgfSkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc291cmNlID0gdXRpbC5ub3JtYWxpemVJbnB1dFNvdXJjZShzb3VyY2UpO1xuXG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoc291cmNlKSkge1xuICAgIGRhdGEuc291cmNlVHlwZSA9ICdidWZmZXInO1xuICB9IGVsc2UgaWYgKHV0aWwuaXNTdHJlYW0oc291cmNlKSkge1xuICAgIGRhdGEuc291cmNlVHlwZSA9ICdzdHJlYW0nO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgQXJjaGl2ZXJFcnJvcignSU5QVVRTVEVBTUJVRkZFUlJFUVVJUkVEJywgeyBuYW1lOiBkYXRhLm5hbWUgfSkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdGhpcy5fZW50cmllc0NvdW50Kys7XG4gIHRoaXMuX3F1ZXVlLnB1c2goe1xuICAgIGRhdGE6IGRhdGEsXG4gICAgc291cmNlOiBzb3VyY2VcbiAgfSk7XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEFwcGVuZHMgYSBkaXJlY3RvcnkgYW5kIGl0cyBmaWxlcywgcmVjdXJzaXZlbHksIGdpdmVuIGl0cyBkaXJwYXRoLlxuICpcbiAqIEBwYXJhbSAge1N0cmluZ30gZGlycGF0aCBUaGUgc291cmNlIGRpcmVjdG9yeSBwYXRoLlxuICogQHBhcmFtICB7U3RyaW5nfSBkZXN0cGF0aCBUaGUgZGVzdGluYXRpb24gcGF0aCB3aXRoaW4gdGhlIGFyY2hpdmUuXG4gKiBAcGFyYW0gIHsoRW50cnlEYXRhfEZ1bmN0aW9uKX0gZGF0YSBTZWUgYWxzbyBbWmlwRW50cnlEYXRhXXtAbGluayBaaXBFbnRyeURhdGF9IGFuZFxuICogW1RhckVudHJ5RGF0YV17QGxpbmsgVGFyRW50cnlEYXRhfS5cbiAqIEByZXR1cm4ge3RoaXN9XG4gKi9cbkFyY2hpdmVyLnByb3RvdHlwZS5kaXJlY3RvcnkgPSBmdW5jdGlvbihkaXJwYXRoLCBkZXN0cGF0aCwgZGF0YSkge1xuICBpZiAodGhpcy5fc3RhdGUuZmluYWxpemUgfHwgdGhpcy5fc3RhdGUuYWJvcnRlZCkge1xuICAgIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgQXJjaGl2ZXJFcnJvcignUVVFVUVDTE9TRUQnKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBpZiAodHlwZW9mIGRpcnBhdGggIT09ICdzdHJpbmcnIHx8IGRpcnBhdGgubGVuZ3RoID09PSAwKSB7XG4gICAgdGhpcy5lbWl0KCdlcnJvcicsIG5ldyBBcmNoaXZlckVycm9yKCdESVJFQ1RPUllESVJQQVRIUkVRVUlSRUQnKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB0aGlzLl9wZW5kaW5nKys7XG5cbiAgaWYgKGRlc3RwYXRoID09PSBmYWxzZSkge1xuICAgIGRlc3RwYXRoID0gJyc7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGRlc3RwYXRoICE9PSAnc3RyaW5nJyl7XG4gICAgZGVzdHBhdGggPSBkaXJwYXRoO1xuICB9XG5cbiAgdmFyIGRhdGFGdW5jdGlvbiA9IGZhbHNlO1xuICBpZiAodHlwZW9mIGRhdGEgPT09ICdmdW5jdGlvbicpIHtcbiAgICBkYXRhRnVuY3Rpb24gPSBkYXRhO1xuICAgIGRhdGEgPSB7fTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcpIHtcbiAgICBkYXRhID0ge307XG4gIH1cblxuICB2YXIgZ2xvYk9wdGlvbnMgPSB7XG4gICAgc3RhdDogdHJ1ZSxcbiAgICBkb3Q6IHRydWVcbiAgfTtcblxuICBmdW5jdGlvbiBvbkdsb2JFbmQoKSB7XG4gICAgdGhpcy5fcGVuZGluZy0tO1xuICAgIHRoaXMuX21heWJlRmluYWxpemUoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uR2xvYkVycm9yKGVycikge1xuICAgIHRoaXMuZW1pdCgnZXJyb3InLCBlcnIpO1xuICB9XG5cbiAgZnVuY3Rpb24gb25HbG9iTWF0Y2gobWF0Y2gpe1xuICAgIGdsb2JiZXIucGF1c2UoKTtcblxuICAgIHZhciBpZ25vcmVNYXRjaCA9IGZhbHNlO1xuICAgIHZhciBlbnRyeURhdGEgPSBPYmplY3QuYXNzaWduKHt9LCBkYXRhKTtcbiAgICBlbnRyeURhdGEubmFtZSA9IG1hdGNoLnJlbGF0aXZlO1xuICAgIGVudHJ5RGF0YS5wcmVmaXggPSBkZXN0cGF0aDtcbiAgICBlbnRyeURhdGEuc3RhdHMgPSBtYXRjaC5zdGF0O1xuICAgIGVudHJ5RGF0YS5jYWxsYmFjayA9IGdsb2JiZXIucmVzdW1lLmJpbmQoZ2xvYmJlcik7XG5cbiAgICB0cnkge1xuICAgICAgaWYgKGRhdGFGdW5jdGlvbikge1xuICAgICAgICBlbnRyeURhdGEgPSBkYXRhRnVuY3Rpb24oZW50cnlEYXRhKTtcblxuICAgICAgICBpZiAoZW50cnlEYXRhID09PSBmYWxzZSkge1xuICAgICAgICAgIGlnbm9yZU1hdGNoID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZW50cnlEYXRhICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgIHRocm93IG5ldyBBcmNoaXZlckVycm9yKCdESVJFQ1RPUllGVU5DVElPTklOVkFMSUREQVRBJywgeyBkaXJwYXRoOiBkaXJwYXRoIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaChlKSB7XG4gICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGlnbm9yZU1hdGNoKSB7XG4gICAgICBnbG9iYmVyLnJlc3VtZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2FwcGVuZChtYXRjaC5hYnNvbHV0ZSwgZW50cnlEYXRhKTtcbiAgfVxuXG4gIHZhciBnbG9iYmVyID0gZ2xvYihkaXJwYXRoLCBnbG9iT3B0aW9ucyk7XG4gIGdsb2JiZXIub24oJ2Vycm9yJywgb25HbG9iRXJyb3IuYmluZCh0aGlzKSk7XG4gIGdsb2JiZXIub24oJ21hdGNoJywgb25HbG9iTWF0Y2guYmluZCh0aGlzKSk7XG4gIGdsb2JiZXIub24oJ2VuZCcsIG9uR2xvYkVuZC5iaW5kKHRoaXMpKTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwZW5kcyBhIGZpbGUgZ2l2ZW4gaXRzIGZpbGVwYXRoIHVzaW5nIGFcbiAqIFtsYXp5c3RyZWFtXXtAbGluayBodHRwczovL2dpdGh1Yi5jb20vanBvbW1lcmVuaW5nL25vZGUtbGF6eXN0cmVhbX0gd3JhcHBlciB0b1xuICogcHJldmVudCBpc3N1ZXMgd2l0aCBvcGVuIGZpbGUgbGltaXRzLlxuICpcbiAqIFdoZW4gdGhlIGluc3RhbmNlIGhhcyByZWNlaXZlZCwgcHJvY2Vzc2VkLCBhbmQgZW1pdHRlZCB0aGUgZmlsZSwgdGhlIGBlbnRyeWBcbiAqIGV2ZW50IGlzIGZpcmVkLlxuICpcbiAqIEBwYXJhbSAge1N0cmluZ30gZmlsZXBhdGggVGhlIHNvdXJjZSBmaWxlcGF0aC5cbiAqIEBwYXJhbSAge0VudHJ5RGF0YX0gZGF0YSBTZWUgYWxzbyBbWmlwRW50cnlEYXRhXXtAbGluayBaaXBFbnRyeURhdGF9IGFuZFxuICogW1RhckVudHJ5RGF0YV17QGxpbmsgVGFyRW50cnlEYXRhfS5cbiAqIEByZXR1cm4ge3RoaXN9XG4gKi9cbkFyY2hpdmVyLnByb3RvdHlwZS5maWxlID0gZnVuY3Rpb24oZmlsZXBhdGgsIGRhdGEpIHtcbiAgaWYgKHRoaXMuX3N0YXRlLmZpbmFsaXplIHx8IHRoaXMuX3N0YXRlLmFib3J0ZWQpIHtcbiAgICB0aGlzLmVtaXQoJ2Vycm9yJywgbmV3IEFyY2hpdmVyRXJyb3IoJ1FVRVVFQ0xPU0VEJykpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBmaWxlcGF0aCAhPT0gJ3N0cmluZycgfHwgZmlsZXBhdGgubGVuZ3RoID09PSAwKSB7XG4gICAgdGhpcy5lbWl0KCdlcnJvcicsIG5ldyBBcmNoaXZlckVycm9yKCdGSUxFRklMRVBBVEhSRVFVSVJFRCcpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHRoaXMuX2FwcGVuZChmaWxlcGF0aCwgZGF0YSk7XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEFwcGVuZHMgbXVsdGlwbGUgZmlsZXMgdGhhdCBtYXRjaCBhIGdsb2IgcGF0dGVybi5cbiAqXG4gKiBAcGFyYW0gIHtTdHJpbmd9IHBhdHRlcm4gVGhlIFtnbG9iIHBhdHRlcm5de0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9pc2FhY3MvbWluaW1hdGNofSB0byBtYXRjaC5cbiAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9ucyBTZWUgW25vZGUtcmVhZGRpci1nbG9iXXtAbGluayBodHRwczovL2dpdGh1Yi5jb20veXFubi9ub2RlLXJlYWRkaXItZ2xvYiNvcHRpb25zfS5cbiAqIEBwYXJhbSAge0VudHJ5RGF0YX0gZGF0YSBTZWUgYWxzbyBbWmlwRW50cnlEYXRhXXtAbGluayBaaXBFbnRyeURhdGF9IGFuZFxuICogW1RhckVudHJ5RGF0YV17QGxpbmsgVGFyRW50cnlEYXRhfS5cbiAqIEByZXR1cm4ge3RoaXN9XG4gKi9cbkFyY2hpdmVyLnByb3RvdHlwZS5nbG9iID0gZnVuY3Rpb24ocGF0dGVybiwgb3B0aW9ucywgZGF0YSkge1xuICB0aGlzLl9wZW5kaW5nKys7XG5cbiAgb3B0aW9ucyA9IHV0aWwuZGVmYXVsdHMob3B0aW9ucywge1xuICAgIHN0YXQ6IHRydWUsXG4gICAgcGF0dGVybjogcGF0dGVyblxuICB9KTtcblxuICBmdW5jdGlvbiBvbkdsb2JFbmQoKSB7XG4gICAgdGhpcy5fcGVuZGluZy0tO1xuICAgIHRoaXMuX21heWJlRmluYWxpemUoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uR2xvYkVycm9yKGVycikge1xuICAgIHRoaXMuZW1pdCgnZXJyb3InLCBlcnIpO1xuICB9XG5cbiAgZnVuY3Rpb24gb25HbG9iTWF0Y2gobWF0Y2gpe1xuICAgIGdsb2JiZXIucGF1c2UoKTtcbiAgICB2YXIgZW50cnlEYXRhID0gT2JqZWN0LmFzc2lnbih7fSwgZGF0YSk7XG4gICAgZW50cnlEYXRhLmNhbGxiYWNrID0gZ2xvYmJlci5yZXN1bWUuYmluZChnbG9iYmVyKTtcbiAgICBlbnRyeURhdGEuc3RhdHMgPSBtYXRjaC5zdGF0O1xuICAgIGVudHJ5RGF0YS5uYW1lID0gbWF0Y2gucmVsYXRpdmU7XG5cbiAgICB0aGlzLl9hcHBlbmQobWF0Y2guYWJzb2x1dGUsIGVudHJ5RGF0YSk7XG4gIH1cblxuICB2YXIgZ2xvYmJlciA9IGdsb2Iob3B0aW9ucy5jd2QgfHwgJy4nLCBvcHRpb25zKTtcbiAgZ2xvYmJlci5vbignZXJyb3InLCBvbkdsb2JFcnJvci5iaW5kKHRoaXMpKTtcbiAgZ2xvYmJlci5vbignbWF0Y2gnLCBvbkdsb2JNYXRjaC5iaW5kKHRoaXMpKTtcbiAgZ2xvYmJlci5vbignZW5kJywgb25HbG9iRW5kLmJpbmQodGhpcykpO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBGaW5hbGl6ZXMgdGhlIGluc3RhbmNlIGFuZCBwcmV2ZW50cyBmdXJ0aGVyIGFwcGVuZGluZyB0byB0aGUgYXJjaGl2ZVxuICogc3RydWN0dXJlIChxdWV1ZSB3aWxsIGNvbnRpbnVlIHRpbCBkcmFpbmVkKS5cbiAqXG4gKiBUaGUgYGVuZGAsIGBjbG9zZWAgb3IgYGZpbmlzaGAgZXZlbnRzIG9uIHRoZSBkZXN0aW5hdGlvbiBzdHJlYW0gbWF5IGZpcmVcbiAqIHJpZ2h0IGFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2Qgc28geW91IHNob3VsZCBzZXQgbGlzdGVuZXJzIGJlZm9yZWhhbmQgdG9cbiAqIHByb3Blcmx5IGRldGVjdCBzdHJlYW0gY29tcGxldGlvbi5cbiAqXG4gKiBAcmV0dXJuIHtQcm9taXNlfVxuICovXG5BcmNoaXZlci5wcm90b3R5cGUuZmluYWxpemUgPSBmdW5jdGlvbigpIHtcbiAgaWYgKHRoaXMuX3N0YXRlLmFib3J0ZWQpIHtcbiAgICB2YXIgYWJvcnRlZEVycm9yID0gbmV3IEFyY2hpdmVyRXJyb3IoJ0FCT1JURUQnKTtcbiAgICB0aGlzLmVtaXQoJ2Vycm9yJywgYWJvcnRlZEVycm9yKTtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoYWJvcnRlZEVycm9yKTtcbiAgfVxuXG4gIGlmICh0aGlzLl9zdGF0ZS5maW5hbGl6ZSkge1xuICAgIHZhciBmaW5hbGl6aW5nRXJyb3IgPSBuZXcgQXJjaGl2ZXJFcnJvcignRklOQUxJWklORycpO1xuICAgIHRoaXMuZW1pdCgnZXJyb3InLCBmaW5hbGl6aW5nRXJyb3IpO1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChmaW5hbGl6aW5nRXJyb3IpO1xuICB9XG5cbiAgdGhpcy5fc3RhdGUuZmluYWxpemUgPSB0cnVlO1xuXG4gIGlmICh0aGlzLl9wZW5kaW5nID09PSAwICYmIHRoaXMuX3F1ZXVlLmlkbGUoKSAmJiB0aGlzLl9zdGF0UXVldWUuaWRsZSgpKSB7XG4gICAgdGhpcy5fZmluYWxpemUoKTtcbiAgfVxuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgdmFyIGVycm9yZWQ7XG5cbiAgICBzZWxmLl9tb2R1bGUub24oJ2VuZCcsIGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKCFlcnJvcmVkKSB7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgc2VsZi5fbW9kdWxlLm9uKCdlcnJvcicsIGZ1bmN0aW9uKGVycikge1xuICAgICAgZXJyb3JlZCA9IHRydWU7XG4gICAgICByZWplY3QoZXJyKTtcbiAgICB9KVxuICB9KVxufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBtb2R1bGUgZm9ybWF0IG5hbWUgdXNlZCBmb3IgYXJjaGl2aW5nLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBmb3JtYXQgVGhlIG5hbWUgb2YgdGhlIGZvcm1hdC5cbiAqIEByZXR1cm4ge3RoaXN9XG4gKi9cbkFyY2hpdmVyLnByb3RvdHlwZS5zZXRGb3JtYXQgPSBmdW5jdGlvbihmb3JtYXQpIHtcbiAgaWYgKHRoaXMuX2Zvcm1hdCkge1xuICAgIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgQXJjaGl2ZXJFcnJvcignRk9STUFUU0VUJykpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdGhpcy5fZm9ybWF0ID0gZm9ybWF0O1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBtb2R1bGUgdXNlZCBmb3IgYXJjaGl2aW5nLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IG1vZHVsZSBUaGUgZnVuY3Rpb24gZm9yIGFyY2hpdmVyIHRvIGludGVyYWN0IHdpdGguXG4gKiBAcmV0dXJuIHt0aGlzfVxuICovXG5BcmNoaXZlci5wcm90b3R5cGUuc2V0TW9kdWxlID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gIGlmICh0aGlzLl9zdGF0ZS5hYm9ydGVkKSB7XG4gICAgdGhpcy5lbWl0KCdlcnJvcicsIG5ldyBBcmNoaXZlckVycm9yKCdBQk9SVEVEJykpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgaWYgKHRoaXMuX3N0YXRlLm1vZHVsZSkge1xuICAgIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgQXJjaGl2ZXJFcnJvcignTU9EVUxFU0VUJykpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdGhpcy5fbW9kdWxlID0gbW9kdWxlO1xuICB0aGlzLl9tb2R1bGVQaXBlKCk7XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEFwcGVuZHMgYSBzeW1saW5rIHRvIHRoZSBpbnN0YW5jZS5cbiAqXG4gKiBUaGlzIGRvZXMgTk9UIGludGVyYWN0IHdpdGggZmlsZXN5c3RlbSBhbmQgaXMgdXNlZCBmb3IgcHJvZ3JhbW1hdGljYWxseSBjcmVhdGluZyBzeW1saW5rcy5cbiAqXG4gKiBAcGFyYW0gIHtTdHJpbmd9IGZpbGVwYXRoIFRoZSBzeW1saW5rIHBhdGggKHdpdGhpbiBhcmNoaXZlKS5cbiAqIEBwYXJhbSAge1N0cmluZ30gdGFyZ2V0IFRoZSB0YXJnZXQgcGF0aCAod2l0aGluIGFyY2hpdmUpLlxuICogQHBhcmFtICB7TnVtYmVyfSBtb2RlIFNldHMgdGhlIGVudHJ5IHBlcm1pc3Npb25zLlxuICogQHJldHVybiB7dGhpc31cbiAqL1xuQXJjaGl2ZXIucHJvdG90eXBlLnN5bWxpbmsgPSBmdW5jdGlvbihmaWxlcGF0aCwgdGFyZ2V0LCBtb2RlKSB7XG4gIGlmICh0aGlzLl9zdGF0ZS5maW5hbGl6ZSB8fCB0aGlzLl9zdGF0ZS5hYm9ydGVkKSB7XG4gICAgdGhpcy5lbWl0KCdlcnJvcicsIG5ldyBBcmNoaXZlckVycm9yKCdRVUVVRUNMT1NFRCcpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGlmICh0eXBlb2YgZmlsZXBhdGggIT09ICdzdHJpbmcnIHx8IGZpbGVwYXRoLmxlbmd0aCA9PT0gMCkge1xuICAgIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgQXJjaGl2ZXJFcnJvcignU1lNTElOS0ZJTEVQQVRIUkVRVUlSRUQnKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBpZiAodHlwZW9mIHRhcmdldCAhPT0gJ3N0cmluZycgfHwgdGFyZ2V0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgQXJjaGl2ZXJFcnJvcignU1lNTElOS1RBUkdFVFJFUVVJUkVEJywgeyBmaWxlcGF0aDogZmlsZXBhdGggfSkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgaWYgKCF0aGlzLl9tb2R1bGVTdXBwb3J0cygnc3ltbGluaycpKSB7XG4gICAgdGhpcy5lbWl0KCdlcnJvcicsIG5ldyBBcmNoaXZlckVycm9yKCdTWU1MSU5LTk9UU1VQUE9SVEVEJywgeyBmaWxlcGF0aDogZmlsZXBhdGggfSkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdmFyIGRhdGEgPSB7fTtcbiAgZGF0YS50eXBlID0gJ3N5bWxpbmsnO1xuICBkYXRhLm5hbWUgPSBmaWxlcGF0aC5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG4gIGRhdGEubGlua25hbWUgPSB0YXJnZXQucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuICBkYXRhLnNvdXJjZVR5cGUgPSAnYnVmZmVyJztcblxuICBpZiAodHlwZW9mIG1vZGUgPT09IFwibnVtYmVyXCIpIHtcbiAgICBkYXRhLm1vZGUgPSBtb2RlO1xuICB9XG5cbiAgdGhpcy5fZW50cmllc0NvdW50Kys7XG4gIHRoaXMuX3F1ZXVlLnB1c2goe1xuICAgIGRhdGE6IGRhdGEsXG4gICAgc291cmNlOiBCdWZmZXIuY29uY2F0KFtdKVxuICB9KTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY3VycmVudCBsZW5ndGggKGluIGJ5dGVzKSB0aGF0IGhhcyBiZWVuIGVtaXR0ZWQuXG4gKlxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG5BcmNoaXZlci5wcm90b3R5cGUucG9pbnRlciA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5fcG9pbnRlcjtcbn07XG5cbi8qKlxuICogTWlkZGxld2FyZS1saWtlIGhlbHBlciB0aGF0IGhhcyB5ZXQgdG8gYmUgZnVsbHkgaW1wbGVtZW50ZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBwbHVnaW5cbiAqIEByZXR1cm4ge3RoaXN9XG4gKi9cbkFyY2hpdmVyLnByb3RvdHlwZS51c2UgPSBmdW5jdGlvbihwbHVnaW4pIHtcbiAgdGhpcy5fc3RyZWFtcy5wdXNoKHBsdWdpbik7XG4gIHJldHVybiB0aGlzO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBBcmNoaXZlcjtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBDb3JlT3B0aW9uc1xuICogQGdsb2JhbFxuICogQHByb3BlcnR5IHtOdW1iZXJ9IFtzdGF0Q29uY3VycmVuY3k9NF0gU2V0cyB0aGUgbnVtYmVyIG9mIHdvcmtlcnMgdXNlZCB0b1xuICogcHJvY2VzcyB0aGUgaW50ZXJuYWwgZnMgc3RhdCBxdWV1ZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFRyYW5zZm9ybU9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gW2FsbG93SGFsZk9wZW49dHJ1ZV0gSWYgc2V0IHRvIGZhbHNlLCB0aGVuIHRoZSBzdHJlYW1cbiAqIHdpbGwgYXV0b21hdGljYWxseSBlbmQgdGhlIHJlYWRhYmxlIHNpZGUgd2hlbiB0aGUgd3JpdGFibGUgc2lkZSBlbmRzIGFuZCB2aWNlXG4gKiB2ZXJzYS5cbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gW3JlYWRhYmxlT2JqZWN0TW9kZT1mYWxzZV0gU2V0cyBvYmplY3RNb2RlIGZvciByZWFkYWJsZVxuICogc2lkZSBvZiB0aGUgc3RyZWFtLiBIYXMgbm8gZWZmZWN0IGlmIG9iamVjdE1vZGUgaXMgdHJ1ZS5cbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gW3dyaXRhYmxlT2JqZWN0TW9kZT1mYWxzZV0gU2V0cyBvYmplY3RNb2RlIGZvciB3cml0YWJsZVxuICogc2lkZSBvZiB0aGUgc3RyZWFtLiBIYXMgbm8gZWZmZWN0IGlmIG9iamVjdE1vZGUgaXMgdHJ1ZS5cbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gW2RlY29kZVN0cmluZ3M9dHJ1ZV0gV2hldGhlciBvciBub3QgdG8gZGVjb2RlIHN0cmluZ3NcbiAqIGludG8gQnVmZmVycyBiZWZvcmUgcGFzc2luZyB0aGVtIHRvIF93cml0ZSgpLiBgV3JpdGFibGVgXG4gKiBAcHJvcGVydHkge1N0cmluZ30gW2VuY29kaW5nPU5VTExdIElmIHNwZWNpZmllZCwgdGhlbiBidWZmZXJzIHdpbGwgYmUgZGVjb2RlZFxuICogdG8gc3RyaW5ncyB1c2luZyB0aGUgc3BlY2lmaWVkIGVuY29kaW5nLiBgUmVhZGFibGVgXG4gKiBAcHJvcGVydHkge051bWJlcn0gW2hpZ2hXYXRlck1hcms9MTZrYl0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIHN0b3JlXG4gKiBpbiB0aGUgaW50ZXJuYWwgYnVmZmVyIGJlZm9yZSBjZWFzaW5nIHRvIHJlYWQgZnJvbSB0aGUgdW5kZXJseWluZyByZXNvdXJjZS5cbiAqIGBSZWFkYWJsZWAgYFdyaXRhYmxlYFxuICogQHByb3BlcnR5IHtCb29sZWFufSBbb2JqZWN0TW9kZT1mYWxzZV0gV2hldGhlciB0aGlzIHN0cmVhbSBzaG91bGQgYmVoYXZlIGFzIGFcbiAqIHN0cmVhbSBvZiBvYmplY3RzLiBNZWFuaW5nIHRoYXQgc3RyZWFtLnJlYWQobikgcmV0dXJucyBhIHNpbmdsZSB2YWx1ZSBpbnN0ZWFkXG4gKiBvZiBhIEJ1ZmZlciBvZiBzaXplIG4uIGBSZWFkYWJsZWAgYFdyaXRhYmxlYFxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gRW50cnlEYXRhXG4gKiBAcHJvcGVydHkge1N0cmluZ30gbmFtZSBTZXRzIHRoZSBlbnRyeSBuYW1lIGluY2x1ZGluZyBpbnRlcm5hbCBwYXRoLlxuICogQHByb3BlcnR5IHsoU3RyaW5nfERhdGUpfSBbZGF0ZT1OT1coKV0gU2V0cyB0aGUgZW50cnkgZGF0ZS5cbiAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBbbW9kZT1EOjA3NTUvRjowNjQ0XSBTZXRzIHRoZSBlbnRyeSBwZXJtaXNzaW9ucy5cbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBbcHJlZml4XSBTZXRzIGEgcGF0aCBwcmVmaXggZm9yIHRoZSBlbnRyeSBuYW1lLiBVc2VmdWxcbiAqIHdoZW4gd29ya2luZyB3aXRoIG1ldGhvZHMgbGlrZSBgZGlyZWN0b3J5YCBvciBgZ2xvYmAuXG4gKiBAcHJvcGVydHkge2ZzLlN0YXRzfSBbc3RhdHNdIFNldHMgdGhlIGZzIHN0YXQgZGF0YSBmb3IgdGhpcyBlbnRyeSBhbGxvd2luZ1xuICogZm9yIHJlZHVjdGlvbiBvZiBmcyBzdGF0IGNhbGxzIHdoZW4gc3RhdCBkYXRhIGlzIGFscmVhZHkga25vd24uXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBFcnJvckRhdGFcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIG9mIHRoZSBlcnJvci5cbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBjb2RlIFRoZSBlcnJvciBjb2RlIGFzc2lnbmVkIHRvIHRoaXMgZXJyb3IuXG4gKiBAcHJvcGVydHkge1N0cmluZ30gZGF0YSBBZGRpdGlvbmFsIGRhdGEgcHJvdmlkZWQgZm9yIHJlcG9ydGluZyBvciBkZWJ1Z2dpbmcgKHdoZXJlIGF2YWlsYWJsZSkuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBQcm9ncmVzc0RhdGFcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBlbnRyaWVzXG4gKiBAcHJvcGVydHkge051bWJlcn0gZW50cmllcy50b3RhbCBOdW1iZXIgb2YgZW50cmllcyB0aGF0IGhhdmUgYmVlbiBhcHBlbmRlZC5cbiAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBlbnRyaWVzLnByb2Nlc3NlZCBOdW1iZXIgb2YgZW50cmllcyB0aGF0IGhhdmUgYmVlbiBwcm9jZXNzZWQuXG4gKiBAcHJvcGVydHkge09iamVjdH0gZnNcbiAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBmcy50b3RhbEJ5dGVzIE51bWJlciBvZiBieXRlcyB0aGF0IGhhdmUgYmVlbiBhcHBlbmRlZC4gQ2FsY3VsYXRlZCBhc3luY2hyb25vdXNseSBhbmQgbWlnaHQgbm90IGJlIGFjY3VyYXRlOiBpdCBncm93dGggd2hpbGUgZW50cmllcyBhcmUgYWRkZWQuIChiYXNlZCBvbiBmcy5TdGF0cylcbiAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBmcy5wcm9jZXNzZWRCeXRlcyBOdW1iZXIgb2YgYnl0ZXMgdGhhdCBoYXZlIGJlZW4gcHJvY2Vzc2VkLiAoYmFzZWQgb24gZnMuU3RhdHMpXG4gKi9cbiIsCiAgICAiLyoqXG4gKiBub2RlLWNvbXByZXNzLWNvbW1vbnNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQgQ2hyaXMgVGFsa2luZ3RvbiwgY29udHJpYnV0b3JzLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cHM6Ly9naXRodWIuY29tL2FyY2hpdmVyanMvbm9kZS1jb21wcmVzcy1jb21tb25zL2Jsb2IvbWFzdGVyL0xJQ0VOU0UtTUlUXG4gKi9cbnZhciBBcmNoaXZlRW50cnkgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge307XG5cbkFyY2hpdmVFbnRyeS5wcm90b3R5cGUuZ2V0TmFtZSA9IGZ1bmN0aW9uKCkge307XG5cbkFyY2hpdmVFbnRyeS5wcm90b3R5cGUuZ2V0U2l6ZSA9IGZ1bmN0aW9uKCkge307XG5cbkFyY2hpdmVFbnRyeS5wcm90b3R5cGUuZ2V0TGFzdE1vZGlmaWVkRGF0ZSA9IGZ1bmN0aW9uKCkge307XG5cbkFyY2hpdmVFbnRyeS5wcm90b3R5cGUuaXNEaXJlY3RvcnkgPSBmdW5jdGlvbigpIHt9OyIsCiAgICAiLyoqXG4gKiBub2RlLWNvbXByZXNzLWNvbW1vbnNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQgQ2hyaXMgVGFsa2luZ3RvbiwgY29udHJpYnV0b3JzLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cHM6Ly9naXRodWIuY29tL2FyY2hpdmVyanMvbm9kZS1jb21wcmVzcy1jb21tb25zL2Jsb2IvbWFzdGVyL0xJQ0VOU0UtTUlUXG4gKi9cbnZhciB1dGlsID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcblxudXRpbC5kYXRlVG9Eb3MgPSBmdW5jdGlvbihkLCBmb3JjZUxvY2FsVGltZSkge1xuICBmb3JjZUxvY2FsVGltZSA9IGZvcmNlTG9jYWxUaW1lIHx8IGZhbHNlO1xuXG4gIHZhciB5ZWFyID0gZm9yY2VMb2NhbFRpbWUgPyBkLmdldEZ1bGxZZWFyKCkgOiBkLmdldFVUQ0Z1bGxZZWFyKCk7XG5cbiAgaWYgKHllYXIgPCAxOTgwKSB7XG4gICAgcmV0dXJuIDIxNjI2ODg7IC8vIDE5ODAtMS0xIDAwOjAwOjAwXG4gIH0gZWxzZSBpZiAoeWVhciA+PSAyMDQ0KSB7XG4gICAgcmV0dXJuIDIxNDExNzU2Nzc7IC8vIDIwNDMtMTItMzEgMjM6NTk6NThcbiAgfVxuXG4gIHZhciB2YWwgPSB7XG4gICAgeWVhcjogeWVhcixcbiAgICBtb250aDogZm9yY2VMb2NhbFRpbWUgPyBkLmdldE1vbnRoKCkgOiBkLmdldFVUQ01vbnRoKCksXG4gICAgZGF0ZTogZm9yY2VMb2NhbFRpbWUgPyBkLmdldERhdGUoKSA6IGQuZ2V0VVRDRGF0ZSgpLFxuICAgIGhvdXJzOiBmb3JjZUxvY2FsVGltZSA/IGQuZ2V0SG91cnMoKSA6IGQuZ2V0VVRDSG91cnMoKSxcbiAgICBtaW51dGVzOiBmb3JjZUxvY2FsVGltZSA/IGQuZ2V0TWludXRlcygpIDogZC5nZXRVVENNaW51dGVzKCksXG4gICAgc2Vjb25kczogZm9yY2VMb2NhbFRpbWUgPyBkLmdldFNlY29uZHMoKSA6IGQuZ2V0VVRDU2Vjb25kcygpXG4gIH07XG5cbiAgcmV0dXJuICgodmFsLnllYXIgLSAxOTgwKSA8PCAyNSkgfCAoKHZhbC5tb250aCArIDEpIDw8IDIxKSB8ICh2YWwuZGF0ZSA8PCAxNikgfFxuICAgICh2YWwuaG91cnMgPDwgMTEpIHwgKHZhbC5taW51dGVzIDw8IDUpIHwgKHZhbC5zZWNvbmRzIC8gMik7XG59O1xuXG51dGlsLmRvc1RvRGF0ZSA9IGZ1bmN0aW9uKGRvcykge1xuICByZXR1cm4gbmV3IERhdGUoKChkb3MgPj4gMjUpICYgMHg3ZikgKyAxOTgwLCAoKGRvcyA+PiAyMSkgJiAweDBmKSAtIDEsIChkb3MgPj4gMTYpICYgMHgxZiwgKGRvcyA+PiAxMSkgJiAweDFmLCAoZG9zID4+IDUpICYgMHgzZiwgKGRvcyAmIDB4MWYpIDw8IDEpO1xufTtcblxudXRpbC5mcm9tRG9zVGltZSA9IGZ1bmN0aW9uKGJ1Zikge1xuICByZXR1cm4gdXRpbC5kb3NUb0RhdGUoYnVmLnJlYWRVSW50MzJMRSgwKSk7XG59O1xuXG51dGlsLmdldEVpZ2h0Qnl0ZXMgPSBmdW5jdGlvbih2KSB7XG4gIHZhciBidWYgPSBCdWZmZXIuYWxsb2MoOCk7XG4gIGJ1Zi53cml0ZVVJbnQzMkxFKHYgJSAweDAxMDAwMDAwMDAsIDApO1xuICBidWYud3JpdGVVSW50MzJMRSgodiAvIDB4MDEwMDAwMDAwMCkgfCAwLCA0KTtcblxuICByZXR1cm4gYnVmO1xufTtcblxudXRpbC5nZXRTaG9ydEJ5dGVzID0gZnVuY3Rpb24odikge1xuICB2YXIgYnVmID0gQnVmZmVyLmFsbG9jKDIpO1xuICBidWYud3JpdGVVSW50MTZMRSgodiAmIDB4RkZGRikgPj4+IDAsIDApO1xuXG4gIHJldHVybiBidWY7XG59O1xuXG51dGlsLmdldFNob3J0Qnl0ZXNWYWx1ZSA9IGZ1bmN0aW9uKGJ1Ziwgb2Zmc2V0KSB7XG4gIHJldHVybiBidWYucmVhZFVJbnQxNkxFKG9mZnNldCk7XG59O1xuXG51dGlsLmdldExvbmdCeXRlcyA9IGZ1bmN0aW9uKHYpIHtcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvYyg0KTtcbiAgYnVmLndyaXRlVUludDMyTEUoKHYgJiAweEZGRkZGRkZGKSA+Pj4gMCwgMCk7XG5cbiAgcmV0dXJuIGJ1Zjtcbn07XG5cbnV0aWwuZ2V0TG9uZ0J5dGVzVmFsdWUgPSBmdW5jdGlvbihidWYsIG9mZnNldCkge1xuICByZXR1cm4gYnVmLnJlYWRVSW50MzJMRShvZmZzZXQpO1xufTtcblxudXRpbC50b0Rvc1RpbWUgPSBmdW5jdGlvbihkKSB7XG4gIHJldHVybiB1dGlsLmdldExvbmdCeXRlcyh1dGlsLmRhdGVUb0RvcyhkKSk7XG59OyIsCiAgICAiLyoqXG4gKiBub2RlLWNvbXByZXNzLWNvbW1vbnNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQgQ2hyaXMgVGFsa2luZ3RvbiwgY29udHJpYnV0b3JzLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cHM6Ly9naXRodWIuY29tL2FyY2hpdmVyanMvbm9kZS1jb21wcmVzcy1jb21tb25zL2Jsb2IvbWFzdGVyL0xJQ0VOU0UtTUlUXG4gKi9cbnZhciB6aXBVdGlsID0gcmVxdWlyZSgnLi91dGlsJyk7XG5cbnZhciBEQVRBX0RFU0NSSVBUT1JfRkxBRyA9IDEgPDwgMztcbnZhciBFTkNSWVBUSU9OX0ZMQUcgPSAxIDw8IDA7XG52YXIgTlVNQkVSX09GX1NIQU5OT05fRkFOT19UUkVFU19GTEFHID0gMSA8PCAyO1xudmFyIFNMSURJTkdfRElDVElPTkFSWV9TSVpFX0ZMQUcgPSAxIDw8IDE7XG52YXIgU1RST05HX0VOQ1JZUFRJT05fRkxBRyA9IDEgPDwgNjtcbnZhciBVRlQ4X05BTUVTX0ZMQUcgPSAxIDw8IDExO1xuXG52YXIgR2VuZXJhbFB1cnBvc2VCaXQgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgR2VuZXJhbFB1cnBvc2VCaXQpKSB7XG4gICAgcmV0dXJuIG5ldyBHZW5lcmFsUHVycG9zZUJpdCgpO1xuICB9XG5cbiAgdGhpcy5kZXNjcmlwdG9yID0gZmFsc2U7XG4gIHRoaXMuZW5jcnlwdGlvbiA9IGZhbHNlO1xuICB0aGlzLnV0ZjggPSBmYWxzZTtcbiAgdGhpcy5udW1iZXJPZlNoYW5ub25GYW5vVHJlZXMgPSAwO1xuICB0aGlzLnN0cm9uZ0VuY3J5cHRpb24gPSBmYWxzZTtcbiAgdGhpcy5zbGlkaW5nRGljdGlvbmFyeVNpemUgPSAwO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuR2VuZXJhbFB1cnBvc2VCaXQucHJvdG90eXBlLmVuY29kZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gemlwVXRpbC5nZXRTaG9ydEJ5dGVzKFxuICAgICh0aGlzLmRlc2NyaXB0b3IgPyBEQVRBX0RFU0NSSVBUT1JfRkxBRyA6IDApIHxcbiAgICAodGhpcy51dGY4ID8gVUZUOF9OQU1FU19GTEFHIDogMCkgfFxuICAgICh0aGlzLmVuY3J5cHRpb24gPyBFTkNSWVBUSU9OX0ZMQUcgOiAwKSB8XG4gICAgKHRoaXMuc3Ryb25nRW5jcnlwdGlvbiA/IFNUUk9OR19FTkNSWVBUSU9OX0ZMQUcgOiAwKVxuICApO1xufTtcblxuR2VuZXJhbFB1cnBvc2VCaXQucHJvdG90eXBlLnBhcnNlID0gZnVuY3Rpb24oYnVmLCBvZmZzZXQpIHtcbiAgdmFyIGZsYWcgPSB6aXBVdGlsLmdldFNob3J0Qnl0ZXNWYWx1ZShidWYsIG9mZnNldCk7XG4gIHZhciBnYnAgPSBuZXcgR2VuZXJhbFB1cnBvc2VCaXQoKTtcblxuICBnYnAudXNlRGF0YURlc2NyaXB0b3IoKGZsYWcgJiBEQVRBX0RFU0NSSVBUT1JfRkxBRykgIT09IDApO1xuICBnYnAudXNlVVRGOEZvck5hbWVzKChmbGFnICYgVUZUOF9OQU1FU19GTEFHKSAhPT0gMCk7XG4gIGdicC51c2VTdHJvbmdFbmNyeXB0aW9uKChmbGFnICYgU1RST05HX0VOQ1JZUFRJT05fRkxBRykgIT09IDApO1xuICBnYnAudXNlRW5jcnlwdGlvbigoZmxhZyAmIEVOQ1JZUFRJT05fRkxBRykgIT09IDApO1xuICBnYnAuc2V0U2xpZGluZ0RpY3Rpb25hcnlTaXplKChmbGFnICYgU0xJRElOR19ESUNUSU9OQVJZX1NJWkVfRkxBRykgIT09IDAgPyA4MTkyIDogNDA5Nik7XG4gIGdicC5zZXROdW1iZXJPZlNoYW5ub25GYW5vVHJlZXMoKGZsYWcgJiBOVU1CRVJfT0ZfU0hBTk5PTl9GQU5PX1RSRUVTX0ZMQUcpICE9PSAwID8gMyA6IDIpO1xuXG4gIHJldHVybiBnYnA7XG59O1xuXG5HZW5lcmFsUHVycG9zZUJpdC5wcm90b3R5cGUuc2V0TnVtYmVyT2ZTaGFubm9uRmFub1RyZWVzID0gZnVuY3Rpb24obikge1xuICB0aGlzLm51bWJlck9mU2hhbm5vbkZhbm9UcmVlcyA9IG47XG59O1xuXG5HZW5lcmFsUHVycG9zZUJpdC5wcm90b3R5cGUuZ2V0TnVtYmVyT2ZTaGFubm9uRmFub1RyZWVzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLm51bWJlck9mU2hhbm5vbkZhbm9UcmVlcztcbn07XG5cbkdlbmVyYWxQdXJwb3NlQml0LnByb3RvdHlwZS5zZXRTbGlkaW5nRGljdGlvbmFyeVNpemUgPSBmdW5jdGlvbihuKSB7XG4gIHRoaXMuc2xpZGluZ0RpY3Rpb25hcnlTaXplID0gbjtcbn07XG5cbkdlbmVyYWxQdXJwb3NlQml0LnByb3RvdHlwZS5nZXRTbGlkaW5nRGljdGlvbmFyeVNpemUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2xpZGluZ0RpY3Rpb25hcnlTaXplO1xufTtcblxuR2VuZXJhbFB1cnBvc2VCaXQucHJvdG90eXBlLnVzZURhdGFEZXNjcmlwdG9yID0gZnVuY3Rpb24oYikge1xuICB0aGlzLmRlc2NyaXB0b3IgPSBiO1xufTtcblxuR2VuZXJhbFB1cnBvc2VCaXQucHJvdG90eXBlLnVzZXNEYXRhRGVzY3JpcHRvciA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5kZXNjcmlwdG9yO1xufTtcblxuR2VuZXJhbFB1cnBvc2VCaXQucHJvdG90eXBlLnVzZUVuY3J5cHRpb24gPSBmdW5jdGlvbihiKSB7XG4gIHRoaXMuZW5jcnlwdGlvbiA9IGI7XG59O1xuXG5HZW5lcmFsUHVycG9zZUJpdC5wcm90b3R5cGUudXNlc0VuY3J5cHRpb24gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZW5jcnlwdGlvbjtcbn07XG5cbkdlbmVyYWxQdXJwb3NlQml0LnByb3RvdHlwZS51c2VTdHJvbmdFbmNyeXB0aW9uID0gZnVuY3Rpb24oYikge1xuICB0aGlzLnN0cm9uZ0VuY3J5cHRpb24gPSBiO1xufTtcblxuR2VuZXJhbFB1cnBvc2VCaXQucHJvdG90eXBlLnVzZXNTdHJvbmdFbmNyeXB0aW9uID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnN0cm9uZ0VuY3J5cHRpb247XG59O1xuXG5HZW5lcmFsUHVycG9zZUJpdC5wcm90b3R5cGUudXNlVVRGOEZvck5hbWVzID0gZnVuY3Rpb24oYikge1xuICB0aGlzLnV0ZjggPSBiO1xufTtcblxuR2VuZXJhbFB1cnBvc2VCaXQucHJvdG90eXBlLnVzZXNVVEY4Rm9yTmFtZXMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMudXRmODtcbn07IiwKICAgICIvKipcbiAqIG5vZGUtY29tcHJlc3MtY29tbW9uc1xuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNCBDaHJpcyBUYWxraW5ndG9uLCBjb250cmlidXRvcnMuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBodHRwczovL2dpdGh1Yi5jb20vYXJjaGl2ZXJqcy9ub2RlLWNvbXByZXNzLWNvbW1vbnMvYmxvYi9tYXN0ZXIvTElDRU5TRS1NSVRcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgLyoqXG4gICAgICogQml0cyB1c2VkIGZvciBwZXJtaXNzaW9ucyAoYW5kIHN0aWNreSBiaXQpXG4gICAgICovXG4gICAgUEVSTV9NQVNLOiA0MDk1LCAvLyAwNzc3N1xuXG4gICAgLyoqXG4gICAgICogQml0cyB1c2VkIHRvIGluZGljYXRlIHRoZSBmaWxlc3lzdGVtIG9iamVjdCB0eXBlLlxuICAgICAqL1xuICAgIEZJTEVfVFlQRV9GTEFHOiA2MTQ0MCwgLy8gMDE3MDAwMFxuXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHN5bWJvbGljIGxpbmtzLlxuICAgICAqL1xuICAgIExJTktfRkxBRzogNDA5NjAsIC8vIDAxMjAwMDBcblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyBwbGFpbiBmaWxlcy5cbiAgICAgKi9cbiAgICBGSUxFX0ZMQUc6IDMyNzY4LCAvLyAwMTAwMDAwXG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgZGlyZWN0b3JpZXMuXG4gICAgICovXG4gICAgRElSX0ZMQUc6IDE2Mzg0LCAvLyAwNDAwMDBcblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBzb21ld2hhdCBhcmJpdHJhcnkgY2hvaWNlcyB0aGF0IGFyZSBxdWl0ZSBjb21tb24gZm9yIHNoYXJlZFxuICAgIC8vIGluc3RhbGxhdGlvbnNcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgLyoqXG4gICAgICogRGVmYXVsdCBwZXJtaXNzaW9ucyBmb3Igc3ltYm9saWMgbGlua3MuXG4gICAgICovXG4gICAgREVGQVVMVF9MSU5LX1BFUk06IDUxMSwgLy8gMDc3N1xuXG4gICAgLyoqXG4gICAgICogRGVmYXVsdCBwZXJtaXNzaW9ucyBmb3IgZGlyZWN0b3JpZXMuXG4gICAgICovXG4gICAgREVGQVVMVF9ESVJfUEVSTTogNDkzLCAvLyAwNzU1XG5cbiAgICAvKipcbiAgICAgKiBEZWZhdWx0IHBlcm1pc3Npb25zIGZvciBwbGFpbiBmaWxlcy5cbiAgICAgKi9cbiAgICBERUZBVUxUX0ZJTEVfUEVSTTogNDIwIC8vIDA2NDRcbn07IiwKICAgICIvKipcbiAqIG5vZGUtY29tcHJlc3MtY29tbW9uc1xuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNCBDaHJpcyBUYWxraW5ndG9uLCBjb250cmlidXRvcnMuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBodHRwczovL2dpdGh1Yi5jb20vYXJjaGl2ZXJqcy9ub2RlLWNvbXByZXNzLWNvbW1vbnMvYmxvYi9tYXN0ZXIvTElDRU5TRS1NSVRcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFdPUkQ6IDQsXG4gIERXT1JEOiA4LFxuICBFTVBUWTogQnVmZmVyLmFsbG9jKDApLFxuXG4gIFNIT1JUOiAyLFxuICBTSE9SVF9NQVNLOiAweGZmZmYsXG4gIFNIT1JUX1NISUZUOiAxNixcbiAgU0hPUlRfWkVSTzogQnVmZmVyLmZyb20oQXJyYXkoMikpLFxuICBMT05HOiA0LFxuICBMT05HX1pFUk86IEJ1ZmZlci5mcm9tKEFycmF5KDQpKSxcblxuICBNSU5fVkVSU0lPTl9JTklUSUFMOiAxMCxcbiAgTUlOX1ZFUlNJT05fREFUQV9ERVNDUklQVE9SOiAyMCxcbiAgTUlOX1ZFUlNJT05fWklQNjQ6IDQ1LFxuICBWRVJTSU9OX01BREVCWTogNDUsXG5cbiAgTUVUSE9EX1NUT1JFRDogMCxcbiAgTUVUSE9EX0RFRkxBVEVEOiA4LFxuXG4gIFBMQVRGT1JNX1VOSVg6IDMsXG4gIFBMQVRGT1JNX0ZBVDogMCxcblxuICBTSUdfTEZIOiAweDA0MDM0YjUwLFxuICBTSUdfREQ6IDB4MDgwNzRiNTAsXG4gIFNJR19DRkg6IDB4MDIwMTRiNTAsXG4gIFNJR19FT0NEOiAweDA2MDU0YjUwLFxuICBTSUdfWklQNjRfRU9DRDogMHgwNjA2NEI1MCxcbiAgU0lHX1pJUDY0X0VPQ0RfTE9DOiAweDA3MDY0QjUwLFxuXG4gIFpJUDY0X01BR0lDX1NIT1JUOiAweGZmZmYsXG4gIFpJUDY0X01BR0lDOiAweGZmZmZmZmZmLFxuICBaSVA2NF9FWFRSQV9JRDogMHgwMDAxLFxuXG4gIFpMSUJfTk9fQ09NUFJFU1NJT046IDAsXG4gIFpMSUJfQkVTVF9TUEVFRDogMSxcbiAgWkxJQl9CRVNUX0NPTVBSRVNTSU9OOiA5LFxuICBaTElCX0RFRkFVTFRfQ09NUFJFU1NJT046IC0xLFxuXG4gIE1PREVfTUFTSzogMHhGRkYsXG4gIERFRkFVTFRfRklMRV9NT0RFOiAzMzE4OCwgLy8gMDEwNjQ0ID0gLXJ3LXItLXItLSA9IFNfSUZSRUcgfCBTX0lSVVNSIHwgU19JV1VTUiB8IFNfSVJHUlAgfCBTX0lST1RIXG4gIERFRkFVTFRfRElSX01PREU6IDE2ODc3LCAgLy8gMDQwNzU1ID0gZHJ3eHIteHIteCA9IFNfSUZESVIgfCBTX0lSV1hVIHwgU19JUkdSUCB8IFNfSVhHUlAgfCBTX0lST1RIIHwgU19JWE9USFxuXG4gIEVYVF9GSUxFX0FUVFJfRElSOiAxMTA2MDUxMDg4LCAgLy8gMDEwMTczMjAwMDIwID0gZHJ3eHIteHIteCA9ICgoKFNfSUZESVIgfCAwNzU1KSA8PCAxNikgfCBTX0RPU19EKVxuICBFWFRfRklMRV9BVFRSX0ZJTEU6IDIxNzUwMDg4MDAsIC8vIDAyMDE1MTAwMDA0MCA9IC1ydy1yLS1yLS0gPSAoKChTX0lGUkVHIHwgMDY0NCkgPDwgMTYpIHwgU19ET1NfQSkgPj4+IDBcblxuICAvLyBVbml4IGZpbGUgdHlwZXNcbiAgU19JRk1UOiA2MTQ0MCwgICAvLyAwMTcwMDAwIHR5cGUgb2YgZmlsZSBtYXNrXG4gIFNfSUZJRk86IDQwOTYsICAgLy8gMDEwMDAwIG5hbWVkIHBpcGUgKGZpZm8pXG4gIFNfSUZDSFI6IDgxOTIsICAgLy8gMDIwMDAwIGNoYXJhY3RlciBzcGVjaWFsXG4gIFNfSUZESVI6IDE2Mzg0LCAgLy8gMDQwMDAwIGRpcmVjdG9yeVxuICBTX0lGQkxLOiAyNDU3NiwgIC8vIDA2MDAwMCBibG9jayBzcGVjaWFsXG4gIFNfSUZSRUc6IDMyNzY4LCAgLy8gMDEwMDAwMCByZWd1bGFyXG4gIFNfSUZMTks6IDQwOTYwLCAgLy8gMDEyMDAwMCBzeW1ib2xpYyBsaW5rXG4gIFNfSUZTT0NLOiA0OTE1MiwgLy8gMDE0MDAwMCBzb2NrZXRcblxuICAvLyBET1MgZmlsZSB0eXBlIGZsYWdzXG4gIFNfRE9TX0E6IDMyLCAvLyAwNDAgQXJjaGl2ZVxuICBTX0RPU19EOiAxNiwgLy8gMDIwIERpcmVjdG9yeVxuICBTX0RPU19WOiA4LCAgLy8gMDEwIFZvbHVtZVxuICBTX0RPU19TOiA0LCAgLy8gMDQgU3lzdGVtXG4gIFNfRE9TX0g6IDIsICAvLyAwMiBIaWRkZW5cbiAgU19ET1NfUjogMSAgIC8vIDAxIFJlYWQgT25seVxufTtcbiIsCiAgICAiLyoqXG4gKiBub2RlLWNvbXByZXNzLWNvbW1vbnNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQgQ2hyaXMgVGFsa2luZ3RvbiwgY29udHJpYnV0b3JzLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cHM6Ly9naXRodWIuY29tL2FyY2hpdmVyanMvbm9kZS1jb21wcmVzcy1jb21tb25zL2Jsb2IvbWFzdGVyL0xJQ0VOU0UtTUlUXG4gKi9cbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ3V0aWwnKS5pbmhlcml0cztcbnZhciBub3JtYWxpemVQYXRoID0gcmVxdWlyZSgnbm9ybWFsaXplLXBhdGgnKTtcblxudmFyIEFyY2hpdmVFbnRyeSA9IHJlcXVpcmUoJy4uL2FyY2hpdmUtZW50cnknKTtcbnZhciBHZW5lcmFsUHVycG9zZUJpdCA9IHJlcXVpcmUoJy4vZ2VuZXJhbC1wdXJwb3NlLWJpdCcpO1xudmFyIFVuaXhTdGF0ID0gcmVxdWlyZSgnLi91bml4LXN0YXQnKTtcblxudmFyIGNvbnN0YW50cyA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJyk7XG52YXIgemlwVXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xuXG52YXIgWmlwQXJjaGl2ZUVudHJ5ID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihuYW1lKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBaaXBBcmNoaXZlRW50cnkpKSB7XG4gICAgcmV0dXJuIG5ldyBaaXBBcmNoaXZlRW50cnkobmFtZSk7XG4gIH1cblxuICBBcmNoaXZlRW50cnkuY2FsbCh0aGlzKTtcblxuICB0aGlzLnBsYXRmb3JtID0gY29uc3RhbnRzLlBMQVRGT1JNX0ZBVDtcbiAgdGhpcy5tZXRob2QgPSAtMTtcblxuICB0aGlzLm5hbWUgPSBudWxsO1xuICB0aGlzLnNpemUgPSAwO1xuICB0aGlzLmNzaXplID0gMDtcbiAgdGhpcy5ncGIgPSBuZXcgR2VuZXJhbFB1cnBvc2VCaXQoKTtcbiAgdGhpcy5jcmMgPSAwO1xuICB0aGlzLnRpbWUgPSAtMTtcblxuICB0aGlzLm1pbnZlciA9IGNvbnN0YW50cy5NSU5fVkVSU0lPTl9JTklUSUFMO1xuICB0aGlzLm1vZGUgPSAtMTtcbiAgdGhpcy5leHRyYSA9IG51bGw7XG4gIHRoaXMuZXhhdHRyID0gMDtcbiAgdGhpcy5pbmF0dHIgPSAwO1xuICB0aGlzLmNvbW1lbnQgPSBudWxsO1xuXG4gIGlmIChuYW1lKSB7XG4gICAgdGhpcy5zZXROYW1lKG5hbWUpO1xuICB9XG59O1xuXG5pbmhlcml0cyhaaXBBcmNoaXZlRW50cnksIEFyY2hpdmVFbnRyeSk7XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZXh0cmEgZmllbGRzIHJlbGF0ZWQgdG8gdGhlIGVudHJ5LlxuICpcbiAqIEByZXR1cm5zIHtCdWZmZXJ9XG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuZ2V0Q2VudHJhbERpcmVjdG9yeUV4dHJhID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmdldEV4dHJhKCk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGNvbW1lbnQgc2V0IGZvciB0aGUgZW50cnkuXG4gKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5nZXRDb21tZW50ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmNvbW1lbnQgIT09IG51bGwgPyB0aGlzLmNvbW1lbnQgOiAnJztcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY29tcHJlc3NlZCBzaXplIG9mIHRoZSBlbnRyeS5cbiAqXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLmdldENvbXByZXNzZWRTaXplID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmNzaXplO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBDUkMzMiBkaWdlc3QgZm9yIHRoZSBlbnRyeS5cbiAqXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLmdldENyYyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5jcmM7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGV4dGVybmFsIGZpbGUgYXR0cmlidXRlcyBmb3IgdGhlIGVudHJ5LlxuICpcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuZ2V0RXh0ZXJuYWxBdHRyaWJ1dGVzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmV4YXR0cjtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZXh0cmEgZmllbGRzIHJlbGF0ZWQgdG8gdGhlIGVudHJ5LlxuICpcbiAqIEByZXR1cm5zIHtCdWZmZXJ9XG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuZ2V0RXh0cmEgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZXh0cmEgIT09IG51bGwgPyB0aGlzLmV4dHJhIDogY29uc3RhbnRzLkVNUFRZO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBnZW5lcmFsIHB1cnBvc2UgYml0cyByZWxhdGVkIHRvIHRoZSBlbnRyeS5cbiAqXG4gKiBAcmV0dXJucyB7R2VuZXJhbFB1cnBvc2VCaXR9XG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuZ2V0R2VuZXJhbFB1cnBvc2VCaXQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZ3BiO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBpbnRlcm5hbCBmaWxlIGF0dHJpYnV0ZXMgZm9yIHRoZSBlbnRyeS5cbiAqXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLmdldEludGVybmFsQXR0cmlidXRlcyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5pbmF0dHI7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGxhc3QgbW9kaWZpZWQgZGF0ZSBvZiB0aGUgZW50cnkuXG4gKlxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5nZXRMYXN0TW9kaWZpZWREYXRlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmdldFRpbWUoKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZXh0cmEgZmllbGRzIHJlbGF0ZWQgdG8gdGhlIGVudHJ5LlxuICpcbiAqIEByZXR1cm5zIHtCdWZmZXJ9XG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuZ2V0TG9jYWxGaWxlRGF0YUV4dHJhID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmdldEV4dHJhKCk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGNvbXByZXNzaW9uIG1ldGhvZCB1c2VkIG9uIHRoZSBlbnRyeS5cbiAqXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLmdldE1ldGhvZCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5tZXRob2Q7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGZpbGVuYW1lIG9mIHRoZSBlbnRyeS5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLmdldE5hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMubmFtZTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgcGxhdGZvcm0gb24gd2hpY2ggdGhlIGVudHJ5IHdhcyBtYWRlLlxuICpcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuZ2V0UGxhdGZvcm0gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMucGxhdGZvcm07XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIGVudHJ5LlxuICpcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuZ2V0U2l6ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zaXplO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgZGF0ZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBsYXN0IG1vZGlmaWVkIGRhdGUgb2YgdGhlIGVudHJ5LlxuICpcbiAqIEByZXR1cm5zIHtudW1iZXJ8RGF0ZX1cbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5nZXRUaW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnRpbWUgIT09IC0xID8gemlwVXRpbC5kb3NUb0RhdGUodGhpcy50aW1lKSA6IC0xO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBET1MgdGltZXN0YW1wIGZvciB0aGUgZW50cnkuXG4gKlxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5nZXRUaW1lRG9zID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnRpbWUgIT09IC0xID8gdGhpcy50aW1lIDogMDtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgVU5JWCBmaWxlIHBlcm1pc3Npb25zIGZvciB0aGUgZW50cnkuXG4gKlxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5nZXRVbml4TW9kZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5wbGF0Zm9ybSAhPT0gY29uc3RhbnRzLlBMQVRGT1JNX1VOSVggPyAwIDogKCh0aGlzLmdldEV4dGVybmFsQXR0cmlidXRlcygpID4+IGNvbnN0YW50cy5TSE9SVF9TSElGVCkgJiBjb25zdGFudHMuU0hPUlRfTUFTSyk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHZlcnNpb24gb2YgWklQIG5lZWRlZCB0byBleHRyYWN0IHRoZSBlbnRyeS5cbiAqXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLmdldFZlcnNpb25OZWVkZWRUb0V4dHJhY3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMubWludmVyO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBjb21tZW50IG9mIHRoZSBlbnRyeS5cbiAqXG4gKiBAcGFyYW0gY29tbWVudFxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLnNldENvbW1lbnQgPSBmdW5jdGlvbihjb21tZW50KSB7XG4gIGlmIChCdWZmZXIuYnl0ZUxlbmd0aChjb21tZW50KSAhPT0gY29tbWVudC5sZW5ndGgpIHtcbiAgICB0aGlzLmdldEdlbmVyYWxQdXJwb3NlQml0KCkudXNlVVRGOEZvck5hbWVzKHRydWUpO1xuICB9XG5cbiAgdGhpcy5jb21tZW50ID0gY29tbWVudDtcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgY29tcHJlc3NlZCBzaXplIG9mIHRoZSBlbnRyeS5cbiAqXG4gKiBAcGFyYW0gc2l6ZVxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLnNldENvbXByZXNzZWRTaXplID0gZnVuY3Rpb24oc2l6ZSkge1xuICBpZiAoc2l6ZSA8IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgZW50cnkgY29tcHJlc3NlZCBzaXplJyk7XG4gIH1cblxuICB0aGlzLmNzaXplID0gc2l6ZTtcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgY2hlY2tzdW0gb2YgdGhlIGVudHJ5LlxuICpcbiAqIEBwYXJhbSBjcmNcbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5zZXRDcmMgPSBmdW5jdGlvbihjcmMpIHtcbiAgaWYgKGNyYyA8IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgZW50cnkgY3JjMzInKTtcbiAgfVxuXG4gIHRoaXMuY3JjID0gY3JjO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBleHRlcm5hbCBmaWxlIGF0dHJpYnV0ZXMgb2YgdGhlIGVudHJ5LlxuICpcbiAqIEBwYXJhbSBhdHRyXG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuc2V0RXh0ZXJuYWxBdHRyaWJ1dGVzID0gZnVuY3Rpb24oYXR0cikge1xuICB0aGlzLmV4YXR0ciA9IGF0dHIgPj4+IDA7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGV4dHJhIGZpZWxkcyByZWxhdGVkIHRvIHRoZSBlbnRyeS5cbiAqXG4gKiBAcGFyYW0gZXh0cmFcbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5zZXRFeHRyYSA9IGZ1bmN0aW9uKGV4dHJhKSB7XG4gIHRoaXMuZXh0cmEgPSBleHRyYTtcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgZ2VuZXJhbCBwdXJwb3NlIGJpdHMgcmVsYXRlZCB0byB0aGUgZW50cnkuXG4gKlxuICogQHBhcmFtIGdwYlxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLnNldEdlbmVyYWxQdXJwb3NlQml0ID0gZnVuY3Rpb24oZ3BiKSB7XG4gIGlmICghKGdwYiBpbnN0YW5jZW9mIEdlbmVyYWxQdXJwb3NlQml0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBlbnRyeSBHZW5lcmFsUHVycG9zZUJpdCcpO1xuICB9XG5cbiAgdGhpcy5ncGIgPSBncGI7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGludGVybmFsIGZpbGUgYXR0cmlidXRlcyBvZiB0aGUgZW50cnkuXG4gKlxuICogQHBhcmFtIGF0dHJcbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5zZXRJbnRlcm5hbEF0dHJpYnV0ZXMgPSBmdW5jdGlvbihhdHRyKSB7XG4gIHRoaXMuaW5hdHRyID0gYXR0cjtcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgY29tcHJlc3Npb24gbWV0aG9kIG9mIHRoZSBlbnRyeS5cbiAqXG4gKiBAcGFyYW0gbWV0aG9kXG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuc2V0TWV0aG9kID0gZnVuY3Rpb24obWV0aG9kKSB7XG4gIGlmIChtZXRob2QgPCAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGVudHJ5IGNvbXByZXNzaW9uIG1ldGhvZCcpO1xuICB9XG5cbiAgdGhpcy5tZXRob2QgPSBtZXRob2Q7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIG5hbWUgb2YgdGhlIGVudHJ5LlxuICpcbiAqIEBwYXJhbSBuYW1lXG4gKiBAcGFyYW0gcHJlcGVuZFNsYXNoXG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuc2V0TmFtZSA9IGZ1bmN0aW9uKG5hbWUsIHByZXBlbmRTbGFzaCA9IGZhbHNlKSB7XG4gIG5hbWUgPSBub3JtYWxpemVQYXRoKG5hbWUsIGZhbHNlKVxuICAgIC5yZXBsYWNlKC9eXFx3KzovLCAnJylcbiAgICAucmVwbGFjZSgvXihcXC5cXC5cXC98XFwvKSsvLCAnJyk7XG5cbiAgaWYgKHByZXBlbmRTbGFzaCkge1xuICAgIG5hbWUgPSBgLyR7bmFtZX1gO1xuICB9XG5cbiAgaWYgKEJ1ZmZlci5ieXRlTGVuZ3RoKG5hbWUpICE9PSBuYW1lLmxlbmd0aCkge1xuICAgIHRoaXMuZ2V0R2VuZXJhbFB1cnBvc2VCaXQoKS51c2VVVEY4Rm9yTmFtZXModHJ1ZSk7XG4gIH1cblxuICB0aGlzLm5hbWUgPSBuYW1lO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBwbGF0Zm9ybSBvbiB3aGljaCB0aGUgZW50cnkgd2FzIG1hZGUuXG4gKlxuICogQHBhcmFtIHBsYXRmb3JtXG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuc2V0UGxhdGZvcm0gPSBmdW5jdGlvbihwbGF0Zm9ybSkge1xuICB0aGlzLnBsYXRmb3JtID0gcGxhdGZvcm07XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIHNpemUgb2YgdGhlIGVudHJ5LlxuICpcbiAqIEBwYXJhbSBzaXplXG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuc2V0U2l6ZSA9IGZ1bmN0aW9uKHNpemUpIHtcbiAgaWYgKHNpemUgPCAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGVudHJ5IHNpemUnKTtcbiAgfVxuXG4gIHRoaXMuc2l6ZSA9IHNpemU7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIHRpbWUgb2YgdGhlIGVudHJ5LlxuICpcbiAqIEBwYXJhbSB0aW1lXG4gKiBAcGFyYW0gZm9yY2VMb2NhbFRpbWVcbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5zZXRUaW1lID0gZnVuY3Rpb24odGltZSwgZm9yY2VMb2NhbFRpbWUpIHtcbiAgaWYgKCEodGltZSBpbnN0YW5jZW9mIERhdGUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGVudHJ5IHRpbWUnKTtcbiAgfVxuXG4gIHRoaXMudGltZSA9IHppcFV0aWwuZGF0ZVRvRG9zKHRpbWUsIGZvcmNlTG9jYWxUaW1lKTtcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgVU5JWCBmaWxlIHBlcm1pc3Npb25zIGZvciB0aGUgZW50cnkuXG4gKlxuICogQHBhcmFtIG1vZGVcbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5zZXRVbml4TW9kZSA9IGZ1bmN0aW9uKG1vZGUpIHtcbiAgbW9kZSB8PSB0aGlzLmlzRGlyZWN0b3J5KCkgPyBjb25zdGFudHMuU19JRkRJUiA6IGNvbnN0YW50cy5TX0lGUkVHO1xuXG4gIHZhciBleHRhdHRyID0gMDtcbiAgZXh0YXR0ciB8PSAobW9kZSA8PCBjb25zdGFudHMuU0hPUlRfU0hJRlQpIHwgKHRoaXMuaXNEaXJlY3RvcnkoKSA/IGNvbnN0YW50cy5TX0RPU19EIDogY29uc3RhbnRzLlNfRE9TX0EpO1xuXG4gIHRoaXMuc2V0RXh0ZXJuYWxBdHRyaWJ1dGVzKGV4dGF0dHIpO1xuICB0aGlzLm1vZGUgPSBtb2RlICYgY29uc3RhbnRzLk1PREVfTUFTSztcbiAgdGhpcy5wbGF0Zm9ybSA9IGNvbnN0YW50cy5QTEFURk9STV9VTklYO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSB2ZXJzaW9uIG9mIFpJUCBuZWVkZWQgdG8gZXh0cmFjdCB0aGlzIGVudHJ5LlxuICpcbiAqIEBwYXJhbSBtaW52ZXJcbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5zZXRWZXJzaW9uTmVlZGVkVG9FeHRyYWN0ID0gZnVuY3Rpb24obWludmVyKSB7XG4gIHRoaXMubWludmVyID0gbWludmVyO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBlbnRyeSByZXByZXNlbnRzIGEgZGlyZWN0b3J5LlxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLmlzRGlyZWN0b3J5ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmdldE5hbWUoKS5zbGljZSgtMSkgPT09ICcvJztcbn07XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoaXMgZW50cnkgcmVwcmVzZW50cyBhIHVuaXggc3ltbGluayxcbiAqIGluIHdoaWNoIGNhc2UgdGhlIGVudHJ5J3MgY29udGVudCBjb250YWlucyB0aGUgdGFyZ2V0IHBhdGhcbiAqIGZvciB0aGUgc3ltbGluay5cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5pc1VuaXhTeW1saW5rID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAodGhpcy5nZXRVbml4TW9kZSgpICYgVW5peFN0YXQuRklMRV9UWVBFX0ZMQUcpID09PSBVbml4U3RhdC5MSU5LX0ZMQUc7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGVudHJ5IGlzIHVzaW5nIHRoZSBaSVA2NCBleHRlbnNpb24gb2YgWklQLlxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLmlzWmlwNjQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuY3NpemUgPiBjb25zdGFudHMuWklQNjRfTUFHSUMgfHwgdGhpcy5zaXplID4gY29uc3RhbnRzLlpJUDY0X01BR0lDO1xufTtcbiIsCiAgICAiLyoqXG4gKiBub2RlLWNvbXByZXNzLWNvbW1vbnNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQgQ2hyaXMgVGFsa2luZ3RvbiwgY29udHJpYnV0b3JzLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cHM6Ly9naXRodWIuY29tL2FyY2hpdmVyanMvbm9kZS1jb21wcmVzcy1jb21tb25zL2Jsb2IvbWFzdGVyL0xJQ0VOU0UtTUlUXG4gKi9cbnZhciBTdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0nKS5TdHJlYW07XG52YXIgUGFzc1Rocm91Z2ggPSByZXF1aXJlKCdyZWFkYWJsZS1zdHJlYW0nKS5QYXNzVGhyb3VnaDtcbnZhciBpc1N0cmVhbSA9IHJlcXVpcmUoJ2lzLXN0cmVhbScpO1xuXG52YXIgdXRpbCA9IG1vZHVsZS5leHBvcnRzID0ge307XG5cbnV0aWwubm9ybWFsaXplSW5wdXRTb3VyY2UgPSBmdW5jdGlvbihzb3VyY2UpIHtcbiAgaWYgKHNvdXJjZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBCdWZmZXIuYWxsb2MoMCk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHNvdXJjZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oc291cmNlKTtcbiAgfSBlbHNlIGlmIChpc1N0cmVhbShzb3VyY2UpICYmICFzb3VyY2UuX3JlYWRhYmxlU3RhdGUpIHtcbiAgICB2YXIgbm9ybWFsaXplZCA9IG5ldyBQYXNzVGhyb3VnaCgpO1xuICAgIHNvdXJjZS5waXBlKG5vcm1hbGl6ZWQpO1xuXG4gICAgcmV0dXJuIG5vcm1hbGl6ZWQ7XG4gIH1cblxuICByZXR1cm4gc291cmNlO1xufTsiLAogICAgIi8qKlxuICogbm9kZS1jb21wcmVzcy1jb21tb25zXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE0IENocmlzIFRhbGtpbmd0b24sIGNvbnRyaWJ1dG9ycy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hcmNoaXZlcmpzL25vZGUtY29tcHJlc3MtY29tbW9ucy9ibG9iL21hc3Rlci9MSUNFTlNFLU1JVFxuICovXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCd1dGlsJykuaW5oZXJpdHM7XG52YXIgaXNTdHJlYW0gPSByZXF1aXJlKCdpcy1zdHJlYW0nKTtcbnZhciBUcmFuc2Zvcm0gPSByZXF1aXJlKCdyZWFkYWJsZS1zdHJlYW0nKS5UcmFuc2Zvcm07XG5cbnZhciBBcmNoaXZlRW50cnkgPSByZXF1aXJlKCcuL2FyY2hpdmUtZW50cnknKTtcbnZhciB1dGlsID0gcmVxdWlyZSgnLi4vdXRpbCcpO1xuXG52YXIgQXJjaGl2ZU91dHB1dFN0cmVhbSA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQXJjaGl2ZU91dHB1dFN0cmVhbSkpIHtcbiAgICByZXR1cm4gbmV3IEFyY2hpdmVPdXRwdXRTdHJlYW0ob3B0aW9ucyk7XG4gIH1cblxuICBUcmFuc2Zvcm0uY2FsbCh0aGlzLCBvcHRpb25zKTtcblxuICB0aGlzLm9mZnNldCA9IDA7XG4gIHRoaXMuX2FyY2hpdmUgPSB7XG4gICAgZmluaXNoOiBmYWxzZSxcbiAgICBmaW5pc2hlZDogZmFsc2UsXG4gICAgcHJvY2Vzc2luZzogZmFsc2VcbiAgfTtcbn07XG5cbmluaGVyaXRzKEFyY2hpdmVPdXRwdXRTdHJlYW0sIFRyYW5zZm9ybSk7XG5cbkFyY2hpdmVPdXRwdXRTdHJlYW0ucHJvdG90eXBlLl9hcHBlbmRCdWZmZXIgPSBmdW5jdGlvbih6YWUsIHNvdXJjZSwgY2FsbGJhY2spIHtcbiAgLy8gc2NhZmZvbGQgb25seVxufTtcblxuQXJjaGl2ZU91dHB1dFN0cmVhbS5wcm90b3R5cGUuX2FwcGVuZFN0cmVhbSA9IGZ1bmN0aW9uKHphZSwgc291cmNlLCBjYWxsYmFjaykge1xuICAvLyBzY2FmZm9sZCBvbmx5XG59O1xuXG5BcmNoaXZlT3V0cHV0U3RyZWFtLnByb3RvdHlwZS5fZW1pdEVycm9yQ2FsbGJhY2sgPSBmdW5jdGlvbihlcnIpIHtcbiAgaWYgKGVycikge1xuICAgIHRoaXMuZW1pdCgnZXJyb3InLCBlcnIpO1xuICB9XG59O1xuXG5BcmNoaXZlT3V0cHV0U3RyZWFtLnByb3RvdHlwZS5fZmluaXNoID0gZnVuY3Rpb24oYWUpIHtcbiAgLy8gc2NhZmZvbGQgb25seVxufTtcblxuQXJjaGl2ZU91dHB1dFN0cmVhbS5wcm90b3R5cGUuX25vcm1hbGl6ZUVudHJ5ID0gZnVuY3Rpb24oYWUpIHtcbiAgLy8gc2NhZmZvbGQgb25seVxufTtcblxuQXJjaGl2ZU91dHB1dFN0cmVhbS5wcm90b3R5cGUuX3RyYW5zZm9ybSA9IGZ1bmN0aW9uKGNodW5rLCBlbmNvZGluZywgY2FsbGJhY2spIHtcbiAgY2FsbGJhY2sobnVsbCwgY2h1bmspO1xufTtcblxuQXJjaGl2ZU91dHB1dFN0cmVhbS5wcm90b3R5cGUuZW50cnkgPSBmdW5jdGlvbihhZSwgc291cmNlLCBjYWxsYmFjaykge1xuICBzb3VyY2UgPSBzb3VyY2UgfHwgbnVsbDtcblxuICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgY2FsbGJhY2sgPSB0aGlzLl9lbWl0RXJyb3JDYWxsYmFjay5iaW5kKHRoaXMpO1xuICB9XG5cbiAgaWYgKCEoYWUgaW5zdGFuY2VvZiBBcmNoaXZlRW50cnkpKSB7XG4gICAgY2FsbGJhY2sobmV3IEVycm9yKCdub3QgYSB2YWxpZCBpbnN0YW5jZSBvZiBBcmNoaXZlRW50cnknKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHRoaXMuX2FyY2hpdmUuZmluaXNoIHx8IHRoaXMuX2FyY2hpdmUuZmluaXNoZWQpIHtcbiAgICBjYWxsYmFjayhuZXcgRXJyb3IoJ3VuYWNjZXB0YWJsZSBlbnRyeSBhZnRlciBmaW5pc2gnKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHRoaXMuX2FyY2hpdmUucHJvY2Vzc2luZykge1xuICAgIGNhbGxiYWNrKG5ldyBFcnJvcignYWxyZWFkeSBwcm9jZXNzaW5nIGFuIGVudHJ5JykpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRoaXMuX2FyY2hpdmUucHJvY2Vzc2luZyA9IHRydWU7XG4gIHRoaXMuX25vcm1hbGl6ZUVudHJ5KGFlKTtcbiAgdGhpcy5fZW50cnkgPSBhZTtcblxuICBzb3VyY2UgPSB1dGlsLm5vcm1hbGl6ZUlucHV0U291cmNlKHNvdXJjZSk7XG5cbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihzb3VyY2UpKSB7XG4gICAgdGhpcy5fYXBwZW5kQnVmZmVyKGFlLCBzb3VyY2UsIGNhbGxiYWNrKTtcbiAgfSBlbHNlIGlmIChpc1N0cmVhbShzb3VyY2UpKSB7XG4gICAgdGhpcy5fYXBwZW5kU3RyZWFtKGFlLCBzb3VyY2UsIGNhbGxiYWNrKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLl9hcmNoaXZlLnByb2Nlc3NpbmcgPSBmYWxzZTtcbiAgICBjYWxsYmFjayhuZXcgRXJyb3IoJ2lucHV0IHNvdXJjZSBtdXN0IGJlIHZhbGlkIFN0cmVhbSBvciBCdWZmZXIgaW5zdGFuY2UnKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5BcmNoaXZlT3V0cHV0U3RyZWFtLnByb3RvdHlwZS5maW5pc2ggPSBmdW5jdGlvbigpIHtcbiAgaWYgKHRoaXMuX2FyY2hpdmUucHJvY2Vzc2luZykge1xuICAgIHRoaXMuX2FyY2hpdmUuZmluaXNoID0gdHJ1ZTtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aGlzLl9maW5pc2goKTtcbn07XG5cbkFyY2hpdmVPdXRwdXRTdHJlYW0ucHJvdG90eXBlLmdldEJ5dGVzV3JpdHRlbiA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5vZmZzZXQ7XG59O1xuXG5BcmNoaXZlT3V0cHV0U3RyZWFtLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKGNodW5rLCBjYikge1xuICBpZiAoY2h1bmspIHtcbiAgICB0aGlzLm9mZnNldCArPSBjaHVuay5sZW5ndGg7XG4gIH1cblxuICByZXR1cm4gVHJhbnNmb3JtLnByb3RvdHlwZS53cml0ZS5jYWxsKHRoaXMsIGNodW5rLCBjYik7XG59OyIsCiAgICAiLyohIGNyYzMyLmpzIChDKSAyMDE0LXByZXNlbnQgU2hlZXRKUyAtLSBodHRwOi8vc2hlZXRqcy5jb20gKi9cbi8qIHZpbTogc2V0IHRzPTI6ICovXG4vKmV4cG9ydGVkIENSQzMyICovXG52YXIgQ1JDMzI7XG4oZnVuY3Rpb24gKGZhY3RvcnkpIHtcblx0Lypqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG5cdC8qZXNsaW50LWRpc2FibGUgKi9cblx0aWYodHlwZW9mIERPX05PVF9FWFBPUlRfQ1JDID09PSAndW5kZWZpbmVkJykge1xuXHRcdGlmKCdvYmplY3QnID09PSB0eXBlb2YgZXhwb3J0cykge1xuXHRcdFx0ZmFjdG9yeShleHBvcnRzKTtcblx0XHR9IGVsc2UgaWYgKCdmdW5jdGlvbicgPT09IHR5cGVvZiBkZWZpbmUgJiYgZGVmaW5lLmFtZCkge1xuXHRcdFx0ZGVmaW5lKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0dmFyIG1vZHVsZSA9IHt9O1xuXHRcdFx0XHRmYWN0b3J5KG1vZHVsZSk7XG5cdFx0XHRcdHJldHVybiBtb2R1bGU7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZmFjdG9yeShDUkMzMiA9IHt9KTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0ZmFjdG9yeShDUkMzMiA9IHt9KTtcblx0fVxuXHQvKmVzbGludC1lbmFibGUgKi9cblx0Lypqc2hpbnQgaWdub3JlOmVuZCAqL1xufShmdW5jdGlvbihDUkMzMikge1xuQ1JDMzIudmVyc2lvbiA9ICcxLjIuMic7XG4vKmdsb2JhbCBJbnQzMkFycmF5ICovXG5mdW5jdGlvbiBzaWduZWRfY3JjX3RhYmxlKCkge1xuXHR2YXIgYyA9IDAsIHRhYmxlID0gbmV3IEFycmF5KDI1Nik7XG5cblx0Zm9yKHZhciBuID0wOyBuICE9IDI1NjsgKytuKXtcblx0XHRjID0gbjtcblx0XHRjID0gKChjJjEpID8gKC0zMDY2NzQ5MTIgXiAoYyA+Pj4gMSkpIDogKGMgPj4+IDEpKTtcblx0XHRjID0gKChjJjEpID8gKC0zMDY2NzQ5MTIgXiAoYyA+Pj4gMSkpIDogKGMgPj4+IDEpKTtcblx0XHRjID0gKChjJjEpID8gKC0zMDY2NzQ5MTIgXiAoYyA+Pj4gMSkpIDogKGMgPj4+IDEpKTtcblx0XHRjID0gKChjJjEpID8gKC0zMDY2NzQ5MTIgXiAoYyA+Pj4gMSkpIDogKGMgPj4+IDEpKTtcblx0XHRjID0gKChjJjEpID8gKC0zMDY2NzQ5MTIgXiAoYyA+Pj4gMSkpIDogKGMgPj4+IDEpKTtcblx0XHRjID0gKChjJjEpID8gKC0zMDY2NzQ5MTIgXiAoYyA+Pj4gMSkpIDogKGMgPj4+IDEpKTtcblx0XHRjID0gKChjJjEpID8gKC0zMDY2NzQ5MTIgXiAoYyA+Pj4gMSkpIDogKGMgPj4+IDEpKTtcblx0XHRjID0gKChjJjEpID8gKC0zMDY2NzQ5MTIgXiAoYyA+Pj4gMSkpIDogKGMgPj4+IDEpKTtcblx0XHR0YWJsZVtuXSA9IGM7XG5cdH1cblxuXHRyZXR1cm4gdHlwZW9mIEludDMyQXJyYXkgIT09ICd1bmRlZmluZWQnID8gbmV3IEludDMyQXJyYXkodGFibGUpIDogdGFibGU7XG59XG5cbnZhciBUMCA9IHNpZ25lZF9jcmNfdGFibGUoKTtcbmZ1bmN0aW9uIHNsaWNlX2J5XzE2X3RhYmxlcyhUKSB7XG5cdHZhciBjID0gMCwgdiA9IDAsIG4gPSAwLCB0YWJsZSA9IHR5cGVvZiBJbnQzMkFycmF5ICE9PSAndW5kZWZpbmVkJyA/IG5ldyBJbnQzMkFycmF5KDQwOTYpIDogbmV3IEFycmF5KDQwOTYpIDtcblxuXHRmb3IobiA9IDA7IG4gIT0gMjU2OyArK24pIHRhYmxlW25dID0gVFtuXTtcblx0Zm9yKG4gPSAwOyBuICE9IDI1NjsgKytuKSB7XG5cdFx0diA9IFRbbl07XG5cdFx0Zm9yKGMgPSAyNTYgKyBuOyBjIDwgNDA5NjsgYyArPSAyNTYpIHYgPSB0YWJsZVtjXSA9ICh2ID4+PiA4KSBeIFRbdiAmIDB4RkZdO1xuXHR9XG5cdHZhciBvdXQgPSBbXTtcblx0Zm9yKG4gPSAxOyBuICE9IDE2OyArK24pIG91dFtuIC0gMV0gPSB0eXBlb2YgSW50MzJBcnJheSAhPT0gJ3VuZGVmaW5lZCcgPyB0YWJsZS5zdWJhcnJheShuICogMjU2LCBuICogMjU2ICsgMjU2KSA6IHRhYmxlLnNsaWNlKG4gKiAyNTYsIG4gKiAyNTYgKyAyNTYpO1xuXHRyZXR1cm4gb3V0O1xufVxudmFyIFRUID0gc2xpY2VfYnlfMTZfdGFibGVzKFQwKTtcbnZhciBUMSA9IFRUWzBdLCAgVDIgPSBUVFsxXSwgIFQzID0gVFRbMl0sICBUNCA9IFRUWzNdLCAgVDUgPSBUVFs0XTtcbnZhciBUNiA9IFRUWzVdLCAgVDcgPSBUVFs2XSwgIFQ4ID0gVFRbN10sICBUOSA9IFRUWzhdLCAgVGEgPSBUVFs5XTtcbnZhciBUYiA9IFRUWzEwXSwgVGMgPSBUVFsxMV0sIFRkID0gVFRbMTJdLCBUZSA9IFRUWzEzXSwgVGYgPSBUVFsxNF07XG5mdW5jdGlvbiBjcmMzMl9ic3RyKGJzdHIsIHNlZWQpIHtcblx0dmFyIEMgPSBzZWVkIF4gLTE7XG5cdGZvcih2YXIgaSA9IDAsIEwgPSBic3RyLmxlbmd0aDsgaSA8IEw7KSBDID0gKEM+Pj44KSBeIFQwWyhDXmJzdHIuY2hhckNvZGVBdChpKyspKSYweEZGXTtcblx0cmV0dXJuIH5DO1xufVxuXG5mdW5jdGlvbiBjcmMzMl9idWYoQiwgc2VlZCkge1xuXHR2YXIgQyA9IHNlZWQgXiAtMSwgTCA9IEIubGVuZ3RoIC0gMTUsIGkgPSAwO1xuXHRmb3IoOyBpIDwgTDspIEMgPVxuXHRcdFRmW0JbaSsrXSBeIChDICYgMjU1KV0gXlxuXHRcdFRlW0JbaSsrXSBeICgoQyA+PiA4KSAmIDI1NSldIF5cblx0XHRUZFtCW2krK10gXiAoKEMgPj4gMTYpICYgMjU1KV0gXlxuXHRcdFRjW0JbaSsrXSBeIChDID4+PiAyNCldIF5cblx0XHRUYltCW2krK11dIF4gVGFbQltpKytdXSBeIFQ5W0JbaSsrXV0gXiBUOFtCW2krK11dIF5cblx0XHRUN1tCW2krK11dIF4gVDZbQltpKytdXSBeIFQ1W0JbaSsrXV0gXiBUNFtCW2krK11dIF5cblx0XHRUM1tCW2krK11dIF4gVDJbQltpKytdXSBeIFQxW0JbaSsrXV0gXiBUMFtCW2krK11dO1xuXHRMICs9IDE1O1xuXHR3aGlsZShpIDwgTCkgQyA9IChDPj4+OCkgXiBUMFsoQ15CW2krK10pJjB4RkZdO1xuXHRyZXR1cm4gfkM7XG59XG5cbmZ1bmN0aW9uIGNyYzMyX3N0cihzdHIsIHNlZWQpIHtcblx0dmFyIEMgPSBzZWVkIF4gLTE7XG5cdGZvcih2YXIgaSA9IDAsIEwgPSBzdHIubGVuZ3RoLCBjID0gMCwgZCA9IDA7IGkgPCBMOykge1xuXHRcdGMgPSBzdHIuY2hhckNvZGVBdChpKyspO1xuXHRcdGlmKGMgPCAweDgwKSB7XG5cdFx0XHRDID0gKEM+Pj44KSBeIFQwWyhDXmMpJjB4RkZdO1xuXHRcdH0gZWxzZSBpZihjIDwgMHg4MDApIHtcblx0XHRcdEMgPSAoQz4+PjgpIF4gVDBbKEMgXiAoMTkyfCgoYz4+NikmMzEpKSkmMHhGRl07XG5cdFx0XHRDID0gKEM+Pj44KSBeIFQwWyhDIF4gKDEyOHwoYyY2MykpKSYweEZGXTtcblx0XHR9IGVsc2UgaWYoYyA+PSAweEQ4MDAgJiYgYyA8IDB4RTAwMCkge1xuXHRcdFx0YyA9IChjJjEwMjMpKzY0OyBkID0gc3RyLmNoYXJDb2RlQXQoaSsrKSYxMDIzO1xuXHRcdFx0QyA9IChDPj4+OCkgXiBUMFsoQyBeICgyNDB8KChjPj44KSY3KSkpJjB4RkZdO1xuXHRcdFx0QyA9IChDPj4+OCkgXiBUMFsoQyBeICgxMjh8KChjPj4yKSY2MykpKSYweEZGXTtcblx0XHRcdEMgPSAoQz4+PjgpIF4gVDBbKEMgXiAoMTI4fCgoZD4+NikmMTUpfCgoYyYzKTw8NCkpKSYweEZGXTtcblx0XHRcdEMgPSAoQz4+PjgpIF4gVDBbKEMgXiAoMTI4fChkJjYzKSkpJjB4RkZdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRDID0gKEM+Pj44KSBeIFQwWyhDIF4gKDIyNHwoKGM+PjEyKSYxNSkpKSYweEZGXTtcblx0XHRcdEMgPSAoQz4+PjgpIF4gVDBbKEMgXiAoMTI4fCgoYz4+NikmNjMpKSkmMHhGRl07XG5cdFx0XHRDID0gKEM+Pj44KSBeIFQwWyhDIF4gKDEyOHwoYyY2MykpKSYweEZGXTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIH5DO1xufVxuQ1JDMzIudGFibGUgPSBUMDtcbi8vICRGbG93SWdub3JlXG5DUkMzMi5ic3RyID0gY3JjMzJfYnN0cjtcbi8vICRGbG93SWdub3JlXG5DUkMzMi5idWYgPSBjcmMzMl9idWY7XG4vLyAkRmxvd0lnbm9yZVxuQ1JDMzIuc3RyID0gY3JjMzJfc3RyO1xufSkpO1xuIiwKICAgICIvKipcbiAqIG5vZGUtY3JjMzItc3RyZWFtXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE0IENocmlzIFRhbGtpbmd0b24sIGNvbnRyaWJ1dG9ycy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hcmNoaXZlcmpzL25vZGUtY3JjMzItc3RyZWFtL2Jsb2IvbWFzdGVyL0xJQ0VOU0UtTUlUXG4gKi9cblxuICd1c2Ugc3RyaWN0JztcblxuY29uc3Qge1RyYW5zZm9ybX0gPSByZXF1aXJlKCdyZWFkYWJsZS1zdHJlYW0nKTtcblxuY29uc3QgY3JjMzIgPSByZXF1aXJlKCdjcmMtMzInKTtcblxuY2xhc3MgQ1JDMzJTdHJlYW0gZXh0ZW5kcyBUcmFuc2Zvcm0ge1xuICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgc3VwZXIob3B0aW9ucyk7XG4gICAgdGhpcy5jaGVja3N1bSA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSg0KTtcbiAgICB0aGlzLmNoZWNrc3VtLndyaXRlSW50MzJCRSgwLCAwKTtcblxuICAgIHRoaXMucmF3U2l6ZSA9IDA7XG4gIH1cblxuICBfdHJhbnNmb3JtKGNodW5rLCBlbmNvZGluZywgY2FsbGJhY2spIHtcbiAgICBpZiAoY2h1bmspIHtcbiAgICAgIHRoaXMuY2hlY2tzdW0gPSBjcmMzMi5idWYoY2h1bmssIHRoaXMuY2hlY2tzdW0pID4+PiAwO1xuICAgICAgdGhpcy5yYXdTaXplICs9IGNodW5rLmxlbmd0aDtcbiAgICB9XG5cbiAgICBjYWxsYmFjayhudWxsLCBjaHVuayk7XG4gIH1cblxuICBkaWdlc3QoZW5jb2RpbmcpIHtcbiAgICBjb25zdCBjaGVja3N1bSA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSg0KTtcbiAgICBjaGVja3N1bS53cml0ZVVJbnQzMkJFKHRoaXMuY2hlY2tzdW0gPj4+IDAsIDApO1xuICAgIHJldHVybiBlbmNvZGluZyA/IGNoZWNrc3VtLnRvU3RyaW5nKGVuY29kaW5nKSA6IGNoZWNrc3VtO1xuICB9XG5cbiAgaGV4KCkge1xuICAgIHJldHVybiB0aGlzLmRpZ2VzdCgnaGV4JykudG9VcHBlckNhc2UoKTtcbiAgfVxuXG4gIHNpemUoKSB7XG4gICAgcmV0dXJuIHRoaXMucmF3U2l6ZTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IENSQzMyU3RyZWFtO1xuIiwKICAgICIvKipcbiAqIG5vZGUtY3JjMzItc3RyZWFtXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE0IENocmlzIFRhbGtpbmd0b24sIGNvbnRyaWJ1dG9ycy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hcmNoaXZlcmpzL25vZGUtY3JjMzItc3RyZWFtL2Jsb2IvbWFzdGVyL0xJQ0VOU0UtTUlUXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCB7RGVmbGF0ZVJhd30gPSByZXF1aXJlKCd6bGliJyk7XG5cbmNvbnN0IGNyYzMyID0gcmVxdWlyZSgnY3JjLTMyJyk7XG5cbmNsYXNzIERlZmxhdGVDUkMzMlN0cmVhbSBleHRlbmRzIERlZmxhdGVSYXcge1xuICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgc3VwZXIob3B0aW9ucyk7XG5cbiAgICB0aGlzLmNoZWNrc3VtID0gQnVmZmVyLmFsbG9jVW5zYWZlKDQpO1xuICAgIHRoaXMuY2hlY2tzdW0ud3JpdGVJbnQzMkJFKDAsIDApO1xuXG4gICAgdGhpcy5yYXdTaXplID0gMDtcbiAgICB0aGlzLmNvbXByZXNzZWRTaXplID0gMDtcbiAgfVxuXG4gIHB1c2goY2h1bmssIGVuY29kaW5nKSB7XG4gICAgaWYgKGNodW5rKSB7XG4gICAgICB0aGlzLmNvbXByZXNzZWRTaXplICs9IGNodW5rLmxlbmd0aDtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VwZXIucHVzaChjaHVuaywgZW5jb2RpbmcpO1xuICB9XG5cbiAgX3RyYW5zZm9ybShjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gICAgaWYgKGNodW5rKSB7XG4gICAgICB0aGlzLmNoZWNrc3VtID0gY3JjMzIuYnVmKGNodW5rLCB0aGlzLmNoZWNrc3VtKSA+Pj4gMDtcbiAgICAgIHRoaXMucmF3U2l6ZSArPSBjaHVuay5sZW5ndGg7XG4gICAgfVxuXG4gICAgc3VwZXIuX3RyYW5zZm9ybShjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKVxuICB9XG5cbiAgZGlnZXN0KGVuY29kaW5nKSB7XG4gICAgY29uc3QgY2hlY2tzdW0gPSBCdWZmZXIuYWxsb2NVbnNhZmUoNCk7XG4gICAgY2hlY2tzdW0ud3JpdGVVSW50MzJCRSh0aGlzLmNoZWNrc3VtID4+PiAwLCAwKTtcbiAgICByZXR1cm4gZW5jb2RpbmcgPyBjaGVja3N1bS50b1N0cmluZyhlbmNvZGluZykgOiBjaGVja3N1bTtcbiAgfVxuXG4gIGhleCgpIHtcbiAgICByZXR1cm4gdGhpcy5kaWdlc3QoJ2hleCcpLnRvVXBwZXJDYXNlKCk7XG4gIH1cblxuICBzaXplKGNvbXByZXNzZWQgPSBmYWxzZSkge1xuICAgIGlmIChjb21wcmVzc2VkKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb21wcmVzc2VkU2l6ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMucmF3U2l6ZTtcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBEZWZsYXRlQ1JDMzJTdHJlYW07XG4iLAogICAgIi8qKlxuICogbm9kZS1jcmMzMi1zdHJlYW1cbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQgQ2hyaXMgVGFsa2luZ3RvbiwgY29udHJpYnV0b3JzLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cHM6Ly9naXRodWIuY29tL2FyY2hpdmVyanMvbm9kZS1jcmMzMi1zdHJlYW0vYmxvYi9tYXN0ZXIvTElDRU5TRS1NSVRcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBDUkMzMlN0cmVhbTogcmVxdWlyZSgnLi9jcmMzMi1zdHJlYW0nKSxcbiAgRGVmbGF0ZUNSQzMyU3RyZWFtOiByZXF1aXJlKCcuL2RlZmxhdGUtY3JjMzItc3RyZWFtJylcbn1cbiIsCiAgICAiLyoqXG4gKiBub2RlLWNvbXByZXNzLWNvbW1vbnNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQgQ2hyaXMgVGFsa2luZ3RvbiwgY29udHJpYnV0b3JzLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cHM6Ly9naXRodWIuY29tL2FyY2hpdmVyanMvbm9kZS1jb21wcmVzcy1jb21tb25zL2Jsb2IvbWFzdGVyL0xJQ0VOU0UtTUlUXG4gKi9cbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ3V0aWwnKS5pbmhlcml0cztcbnZhciBjcmMzMiA9IHJlcXVpcmUoJ2NyYy0zMicpO1xudmFyIHtDUkMzMlN0cmVhbX0gPSByZXF1aXJlKCdjcmMzMi1zdHJlYW0nKTtcbnZhciB7RGVmbGF0ZUNSQzMyU3RyZWFtfSA9IHJlcXVpcmUoJ2NyYzMyLXN0cmVhbScpO1xuXG52YXIgQXJjaGl2ZU91dHB1dFN0cmVhbSA9IHJlcXVpcmUoJy4uL2FyY2hpdmUtb3V0cHV0LXN0cmVhbScpO1xudmFyIFppcEFyY2hpdmVFbnRyeSA9IHJlcXVpcmUoJy4vemlwLWFyY2hpdmUtZW50cnknKTtcbnZhciBHZW5lcmFsUHVycG9zZUJpdCA9IHJlcXVpcmUoJy4vZ2VuZXJhbC1wdXJwb3NlLWJpdCcpO1xuXG52YXIgY29uc3RhbnRzID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKTtcbnZhciB1dGlsID0gcmVxdWlyZSgnLi4vLi4vdXRpbCcpO1xudmFyIHppcFV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcblxudmFyIFppcEFyY2hpdmVPdXRwdXRTdHJlYW0gPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFppcEFyY2hpdmVPdXRwdXRTdHJlYW0pKSB7XG4gICAgcmV0dXJuIG5ldyBaaXBBcmNoaXZlT3V0cHV0U3RyZWFtKG9wdGlvbnMpO1xuICB9XG5cbiAgb3B0aW9ucyA9IHRoaXMub3B0aW9ucyA9IHRoaXMuX2RlZmF1bHRzKG9wdGlvbnMpO1xuXG4gIEFyY2hpdmVPdXRwdXRTdHJlYW0uY2FsbCh0aGlzLCBvcHRpb25zKTtcblxuICB0aGlzLl9lbnRyeSA9IG51bGw7XG4gIHRoaXMuX2VudHJpZXMgPSBbXTtcbiAgdGhpcy5fYXJjaGl2ZSA9IHtcbiAgICBjZW50cmFsTGVuZ3RoOiAwLFxuICAgIGNlbnRyYWxPZmZzZXQ6IDAsXG4gICAgY29tbWVudDogJycsXG4gICAgZmluaXNoOiBmYWxzZSxcbiAgICBmaW5pc2hlZDogZmFsc2UsXG4gICAgcHJvY2Vzc2luZzogZmFsc2UsXG4gICAgZm9yY2VaaXA2NDogb3B0aW9ucy5mb3JjZVppcDY0LFxuICAgIGZvcmNlTG9jYWxUaW1lOiBvcHRpb25zLmZvcmNlTG9jYWxUaW1lXG4gIH07XG59O1xuXG5pbmhlcml0cyhaaXBBcmNoaXZlT3V0cHV0U3RyZWFtLCBBcmNoaXZlT3V0cHV0U3RyZWFtKTtcblxuWmlwQXJjaGl2ZU91dHB1dFN0cmVhbS5wcm90b3R5cGUuX2FmdGVyQXBwZW5kID0gZnVuY3Rpb24oYWUpIHtcbiAgdGhpcy5fZW50cmllcy5wdXNoKGFlKTtcblxuICBpZiAoYWUuZ2V0R2VuZXJhbFB1cnBvc2VCaXQoKS51c2VzRGF0YURlc2NyaXB0b3IoKSkge1xuICAgIHRoaXMuX3dyaXRlRGF0YURlc2NyaXB0b3IoYWUpO1xuICB9XG5cbiAgdGhpcy5fYXJjaGl2ZS5wcm9jZXNzaW5nID0gZmFsc2U7XG4gIHRoaXMuX2VudHJ5ID0gbnVsbDtcblxuICBpZiAodGhpcy5fYXJjaGl2ZS5maW5pc2ggJiYgIXRoaXMuX2FyY2hpdmUuZmluaXNoZWQpIHtcbiAgICB0aGlzLl9maW5pc2goKTtcbiAgfVxufTtcblxuWmlwQXJjaGl2ZU91dHB1dFN0cmVhbS5wcm90b3R5cGUuX2FwcGVuZEJ1ZmZlciA9IGZ1bmN0aW9uKGFlLCBzb3VyY2UsIGNhbGxiYWNrKSB7XG4gIGlmIChzb3VyY2UubGVuZ3RoID09PSAwKSB7XG4gICAgYWUuc2V0TWV0aG9kKGNvbnN0YW50cy5NRVRIT0RfU1RPUkVEKTtcbiAgfVxuXG4gIHZhciBtZXRob2QgPSBhZS5nZXRNZXRob2QoKTtcblxuICBpZiAobWV0aG9kID09PSBjb25zdGFudHMuTUVUSE9EX1NUT1JFRCkge1xuICAgIGFlLnNldFNpemUoc291cmNlLmxlbmd0aCk7XG4gICAgYWUuc2V0Q29tcHJlc3NlZFNpemUoc291cmNlLmxlbmd0aCk7XG4gICAgYWUuc2V0Q3JjKGNyYzMyLmJ1Zihzb3VyY2UpID4+PiAwKTtcbiAgfVxuXG4gIHRoaXMuX3dyaXRlTG9jYWxGaWxlSGVhZGVyKGFlKTtcblxuICBpZiAobWV0aG9kID09PSBjb25zdGFudHMuTUVUSE9EX1NUT1JFRCkge1xuICAgIHRoaXMud3JpdGUoc291cmNlKTtcbiAgICB0aGlzLl9hZnRlckFwcGVuZChhZSk7XG4gICAgY2FsbGJhY2sobnVsbCwgYWUpO1xuICAgIHJldHVybjtcbiAgfSBlbHNlIGlmIChtZXRob2QgPT09IGNvbnN0YW50cy5NRVRIT0RfREVGTEFURUQpIHtcbiAgICB0aGlzLl9zbWFydFN0cmVhbShhZSwgY2FsbGJhY2spLmVuZChzb3VyY2UpO1xuICAgIHJldHVybjtcbiAgfSBlbHNlIHtcbiAgICBjYWxsYmFjayhuZXcgRXJyb3IoJ2NvbXByZXNzaW9uIG1ldGhvZCAnICsgbWV0aG9kICsgJyBub3QgaW1wbGVtZW50ZWQnKSk7XG4gICAgcmV0dXJuO1xuICB9XG59O1xuXG5aaXBBcmNoaXZlT3V0cHV0U3RyZWFtLnByb3RvdHlwZS5fYXBwZW5kU3RyZWFtID0gZnVuY3Rpb24oYWUsIHNvdXJjZSwgY2FsbGJhY2spIHtcbiAgYWUuZ2V0R2VuZXJhbFB1cnBvc2VCaXQoKS51c2VEYXRhRGVzY3JpcHRvcih0cnVlKTtcbiAgYWUuc2V0VmVyc2lvbk5lZWRlZFRvRXh0cmFjdChjb25zdGFudHMuTUlOX1ZFUlNJT05fREFUQV9ERVNDUklQVE9SKTtcblxuICB0aGlzLl93cml0ZUxvY2FsRmlsZUhlYWRlcihhZSk7XG5cbiAgdmFyIHNtYXJ0ID0gdGhpcy5fc21hcnRTdHJlYW0oYWUsIGNhbGxiYWNrKTtcbiAgc291cmNlLm9uY2UoJ2Vycm9yJywgZnVuY3Rpb24oZXJyKSB7XG4gICAgc21hcnQuZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgIHNtYXJ0LmVuZCgpO1xuICB9KVxuICBzb3VyY2UucGlwZShzbWFydCk7XG59O1xuXG5aaXBBcmNoaXZlT3V0cHV0U3RyZWFtLnByb3RvdHlwZS5fZGVmYXVsdHMgPSBmdW5jdGlvbihvKSB7XG4gIGlmICh0eXBlb2YgbyAhPT0gJ29iamVjdCcpIHtcbiAgICBvID0ge307XG4gIH1cblxuICBpZiAodHlwZW9mIG8uemxpYiAhPT0gJ29iamVjdCcpIHtcbiAgICBvLnpsaWIgPSB7fTtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygby56bGliLmxldmVsICE9PSAnbnVtYmVyJykge1xuICAgIG8uemxpYi5sZXZlbCA9IGNvbnN0YW50cy5aTElCX0JFU1RfU1BFRUQ7XG4gIH1cblxuICBvLmZvcmNlWmlwNjQgPSAhIW8uZm9yY2VaaXA2NDtcbiAgby5mb3JjZUxvY2FsVGltZSA9ICEhby5mb3JjZUxvY2FsVGltZTtcblxuICByZXR1cm4gbztcbn07XG5cblppcEFyY2hpdmVPdXRwdXRTdHJlYW0ucHJvdG90eXBlLl9maW5pc2ggPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fYXJjaGl2ZS5jZW50cmFsT2Zmc2V0ID0gdGhpcy5vZmZzZXQ7XG5cbiAgdGhpcy5fZW50cmllcy5mb3JFYWNoKGZ1bmN0aW9uKGFlKSB7XG4gICAgdGhpcy5fd3JpdGVDZW50cmFsRmlsZUhlYWRlcihhZSk7XG4gIH0uYmluZCh0aGlzKSk7XG5cbiAgdGhpcy5fYXJjaGl2ZS5jZW50cmFsTGVuZ3RoID0gdGhpcy5vZmZzZXQgLSB0aGlzLl9hcmNoaXZlLmNlbnRyYWxPZmZzZXQ7XG5cbiAgaWYgKHRoaXMuaXNaaXA2NCgpKSB7XG4gICAgdGhpcy5fd3JpdGVDZW50cmFsRGlyZWN0b3J5WmlwNjQoKTtcbiAgfVxuXG4gIHRoaXMuX3dyaXRlQ2VudHJhbERpcmVjdG9yeUVuZCgpO1xuXG4gIHRoaXMuX2FyY2hpdmUucHJvY2Vzc2luZyA9IGZhbHNlO1xuICB0aGlzLl9hcmNoaXZlLmZpbmlzaCA9IHRydWU7XG4gIHRoaXMuX2FyY2hpdmUuZmluaXNoZWQgPSB0cnVlO1xuICB0aGlzLmVuZCgpO1xufTtcblxuWmlwQXJjaGl2ZU91dHB1dFN0cmVhbS5wcm90b3R5cGUuX25vcm1hbGl6ZUVudHJ5ID0gZnVuY3Rpb24oYWUpIHtcbiAgaWYgKGFlLmdldE1ldGhvZCgpID09PSAtMSkge1xuICAgIGFlLnNldE1ldGhvZChjb25zdGFudHMuTUVUSE9EX0RFRkxBVEVEKTtcbiAgfVxuXG4gIGlmIChhZS5nZXRNZXRob2QoKSA9PT0gY29uc3RhbnRzLk1FVEhPRF9ERUZMQVRFRCkge1xuICAgIGFlLmdldEdlbmVyYWxQdXJwb3NlQml0KCkudXNlRGF0YURlc2NyaXB0b3IodHJ1ZSk7XG4gICAgYWUuc2V0VmVyc2lvbk5lZWRlZFRvRXh0cmFjdChjb25zdGFudHMuTUlOX1ZFUlNJT05fREFUQV9ERVNDUklQVE9SKTtcbiAgfVxuXG4gIGlmIChhZS5nZXRUaW1lKCkgPT09IC0xKSB7XG4gICAgYWUuc2V0VGltZShuZXcgRGF0ZSgpLCB0aGlzLl9hcmNoaXZlLmZvcmNlTG9jYWxUaW1lKTtcbiAgfVxuXG4gIGFlLl9vZmZzZXRzID0ge1xuICAgIGZpbGU6IDAsXG4gICAgZGF0YTogMCxcbiAgICBjb250ZW50czogMCxcbiAgfTtcbn07XG5cblppcEFyY2hpdmVPdXRwdXRTdHJlYW0ucHJvdG90eXBlLl9zbWFydFN0cmVhbSA9IGZ1bmN0aW9uKGFlLCBjYWxsYmFjaykge1xuICB2YXIgZGVmbGF0ZSA9IGFlLmdldE1ldGhvZCgpID09PSBjb25zdGFudHMuTUVUSE9EX0RFRkxBVEVEO1xuICB2YXIgcHJvY2VzcyA9IGRlZmxhdGUgPyBuZXcgRGVmbGF0ZUNSQzMyU3RyZWFtKHRoaXMub3B0aW9ucy56bGliKSA6IG5ldyBDUkMzMlN0cmVhbSgpO1xuICB2YXIgZXJyb3IgPSBudWxsO1xuXG4gIGZ1bmN0aW9uIGhhbmRsZVN0dWZmKCkge1xuICAgIHZhciBkaWdlc3QgPSBwcm9jZXNzLmRpZ2VzdCgpLnJlYWRVSW50MzJCRSgwKTtcbiAgICBhZS5zZXRDcmMoZGlnZXN0KTtcbiAgICBhZS5zZXRTaXplKHByb2Nlc3Muc2l6ZSgpKTtcbiAgICBhZS5zZXRDb21wcmVzc2VkU2l6ZShwcm9jZXNzLnNpemUodHJ1ZSkpO1xuICAgIHRoaXMuX2FmdGVyQXBwZW5kKGFlKTtcbiAgICBjYWxsYmFjayhlcnJvciwgYWUpO1xuICB9XG5cbiAgcHJvY2Vzcy5vbmNlKCdlbmQnLCBoYW5kbGVTdHVmZi5iaW5kKHRoaXMpKTtcbiAgcHJvY2Vzcy5vbmNlKCdlcnJvcicsIGZ1bmN0aW9uKGVycikge1xuICAgIGVycm9yID0gZXJyO1xuICB9KTtcblxuICBwcm9jZXNzLnBpcGUodGhpcywgeyBlbmQ6IGZhbHNlIH0pO1xuXG4gIHJldHVybiBwcm9jZXNzO1xufTtcblxuWmlwQXJjaGl2ZU91dHB1dFN0cmVhbS5wcm90b3R5cGUuX3dyaXRlQ2VudHJhbERpcmVjdG9yeUVuZCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcmVjb3JkcyA9IHRoaXMuX2VudHJpZXMubGVuZ3RoO1xuICB2YXIgc2l6ZSA9IHRoaXMuX2FyY2hpdmUuY2VudHJhbExlbmd0aDtcbiAgdmFyIG9mZnNldCA9IHRoaXMuX2FyY2hpdmUuY2VudHJhbE9mZnNldDtcblxuICBpZiAodGhpcy5pc1ppcDY0KCkpIHtcbiAgICByZWNvcmRzID0gY29uc3RhbnRzLlpJUDY0X01BR0lDX1NIT1JUO1xuICAgIHNpemUgPSBjb25zdGFudHMuWklQNjRfTUFHSUM7XG4gICAgb2Zmc2V0ID0gY29uc3RhbnRzLlpJUDY0X01BR0lDO1xuICB9XG5cbiAgLy8gc2lnbmF0dXJlXG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRMb25nQnl0ZXMoY29uc3RhbnRzLlNJR19FT0NEKSk7XG5cbiAgLy8gZGlzayBudW1iZXJzXG4gIHRoaXMud3JpdGUoY29uc3RhbnRzLlNIT1JUX1pFUk8pO1xuICB0aGlzLndyaXRlKGNvbnN0YW50cy5TSE9SVF9aRVJPKTtcblxuICAvLyBudW1iZXIgb2YgZW50cmllc1xuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0U2hvcnRCeXRlcyhyZWNvcmRzKSk7XG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRTaG9ydEJ5dGVzKHJlY29yZHMpKTtcblxuICAvLyBsZW5ndGggYW5kIGxvY2F0aW9uIG9mIENEXG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRMb25nQnl0ZXMoc2l6ZSkpO1xuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0TG9uZ0J5dGVzKG9mZnNldCkpO1xuXG4gIC8vIGFyY2hpdmUgY29tbWVudFxuICB2YXIgY29tbWVudCA9IHRoaXMuZ2V0Q29tbWVudCgpO1xuICB2YXIgY29tbWVudExlbmd0aCA9IEJ1ZmZlci5ieXRlTGVuZ3RoKGNvbW1lbnQpO1xuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0U2hvcnRCeXRlcyhjb21tZW50TGVuZ3RoKSk7XG4gIHRoaXMud3JpdGUoY29tbWVudCk7XG59O1xuXG5aaXBBcmNoaXZlT3V0cHV0U3RyZWFtLnByb3RvdHlwZS5fd3JpdGVDZW50cmFsRGlyZWN0b3J5WmlwNjQgPSBmdW5jdGlvbigpIHtcbiAgLy8gc2lnbmF0dXJlXG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRMb25nQnl0ZXMoY29uc3RhbnRzLlNJR19aSVA2NF9FT0NEKSk7XG5cbiAgLy8gc2l6ZSBvZiB0aGUgWklQNjQgRU9DRCByZWNvcmRcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldEVpZ2h0Qnl0ZXMoNDQpKTtcblxuICAvLyB2ZXJzaW9uIG1hZGUgYnlcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldFNob3J0Qnl0ZXMoY29uc3RhbnRzLk1JTl9WRVJTSU9OX1pJUDY0KSk7XG5cbiAgLy8gdmVyc2lvbiB0byBleHRyYWN0XG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRTaG9ydEJ5dGVzKGNvbnN0YW50cy5NSU5fVkVSU0lPTl9aSVA2NCkpO1xuXG4gIC8vIGRpc2sgbnVtYmVyc1xuICB0aGlzLndyaXRlKGNvbnN0YW50cy5MT05HX1pFUk8pO1xuICB0aGlzLndyaXRlKGNvbnN0YW50cy5MT05HX1pFUk8pO1xuXG4gIC8vIG51bWJlciBvZiBlbnRyaWVzXG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRFaWdodEJ5dGVzKHRoaXMuX2VudHJpZXMubGVuZ3RoKSk7XG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRFaWdodEJ5dGVzKHRoaXMuX2VudHJpZXMubGVuZ3RoKSk7XG5cbiAgLy8gbGVuZ3RoIGFuZCBsb2NhdGlvbiBvZiBDRFxuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0RWlnaHRCeXRlcyh0aGlzLl9hcmNoaXZlLmNlbnRyYWxMZW5ndGgpKTtcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldEVpZ2h0Qnl0ZXModGhpcy5fYXJjaGl2ZS5jZW50cmFsT2Zmc2V0KSk7XG5cbiAgLy8gZXh0ZW5zaWJsZSBkYXRhIHNlY3RvclxuICAvLyBub3QgaW1wbGVtZW50ZWQgYXQgdGhpcyB0aW1lXG5cbiAgLy8gZW5kIG9mIGNlbnRyYWwgZGlyZWN0b3J5IGxvY2F0b3JcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldExvbmdCeXRlcyhjb25zdGFudHMuU0lHX1pJUDY0X0VPQ0RfTE9DKSk7XG5cbiAgLy8gZGlzayBudW1iZXIgaG9sZGluZyB0aGUgWklQNjQgRU9DRCByZWNvcmRcbiAgdGhpcy53cml0ZShjb25zdGFudHMuTE9OR19aRVJPKTtcblxuICAvLyByZWxhdGl2ZSBvZmZzZXQgb2YgdGhlIFpJUDY0IEVPQ0QgcmVjb3JkXG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRFaWdodEJ5dGVzKHRoaXMuX2FyY2hpdmUuY2VudHJhbE9mZnNldCArIHRoaXMuX2FyY2hpdmUuY2VudHJhbExlbmd0aCkpO1xuXG4gIC8vIHRvdGFsIG51bWJlciBvZiBkaXNrc1xuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0TG9uZ0J5dGVzKDEpKTtcbn07XG5cblppcEFyY2hpdmVPdXRwdXRTdHJlYW0ucHJvdG90eXBlLl93cml0ZUNlbnRyYWxGaWxlSGVhZGVyID0gZnVuY3Rpb24oYWUpIHtcbiAgdmFyIGdwYiA9IGFlLmdldEdlbmVyYWxQdXJwb3NlQml0KCk7XG4gIHZhciBtZXRob2QgPSBhZS5nZXRNZXRob2QoKTtcbiAgdmFyIGZpbGVPZmZzZXQgPSBhZS5fb2Zmc2V0cy5maWxlO1xuXG4gIHZhciBzaXplID0gYWUuZ2V0U2l6ZSgpO1xuICB2YXIgY29tcHJlc3NlZFNpemUgPSBhZS5nZXRDb21wcmVzc2VkU2l6ZSgpO1xuXG4gIGlmIChhZS5pc1ppcDY0KCkgfHwgZmlsZU9mZnNldCA+IGNvbnN0YW50cy5aSVA2NF9NQUdJQykge1xuICAgIHNpemUgPSBjb25zdGFudHMuWklQNjRfTUFHSUM7XG4gICAgY29tcHJlc3NlZFNpemUgPSBjb25zdGFudHMuWklQNjRfTUFHSUM7XG4gICAgZmlsZU9mZnNldCA9IGNvbnN0YW50cy5aSVA2NF9NQUdJQztcblxuICAgIGFlLnNldFZlcnNpb25OZWVkZWRUb0V4dHJhY3QoY29uc3RhbnRzLk1JTl9WRVJTSU9OX1pJUDY0KTtcblxuICAgIHZhciBleHRyYUJ1ZiA9IEJ1ZmZlci5jb25jYXQoW1xuICAgICAgemlwVXRpbC5nZXRTaG9ydEJ5dGVzKGNvbnN0YW50cy5aSVA2NF9FWFRSQV9JRCksXG4gICAgICB6aXBVdGlsLmdldFNob3J0Qnl0ZXMoMjQpLFxuICAgICAgemlwVXRpbC5nZXRFaWdodEJ5dGVzKGFlLmdldFNpemUoKSksXG4gICAgICB6aXBVdGlsLmdldEVpZ2h0Qnl0ZXMoYWUuZ2V0Q29tcHJlc3NlZFNpemUoKSksXG4gICAgICB6aXBVdGlsLmdldEVpZ2h0Qnl0ZXMoYWUuX29mZnNldHMuZmlsZSlcbiAgICBdLCAyOCk7XG5cbiAgICBhZS5zZXRFeHRyYShleHRyYUJ1Zik7XG4gIH1cblxuICAvLyBzaWduYXR1cmVcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldExvbmdCeXRlcyhjb25zdGFudHMuU0lHX0NGSCkpO1xuXG4gIC8vIHZlcnNpb24gbWFkZSBieVxuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0U2hvcnRCeXRlcygoYWUuZ2V0UGxhdGZvcm0oKSA8PCA4KSB8IGNvbnN0YW50cy5WRVJTSU9OX01BREVCWSkpO1xuXG4gIC8vIHZlcnNpb24gdG8gZXh0cmFjdCBhbmQgZ2VuZXJhbCBiaXQgZmxhZ1xuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0U2hvcnRCeXRlcyhhZS5nZXRWZXJzaW9uTmVlZGVkVG9FeHRyYWN0KCkpKTtcbiAgdGhpcy53cml0ZShncGIuZW5jb2RlKCkpO1xuXG4gIC8vIGNvbXByZXNzaW9uIG1ldGhvZFxuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0U2hvcnRCeXRlcyhtZXRob2QpKTtcblxuICAvLyBkYXRldGltZVxuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0TG9uZ0J5dGVzKGFlLmdldFRpbWVEb3MoKSkpO1xuXG4gIC8vIGNyYzMyIGNoZWNrc3VtXG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRMb25nQnl0ZXMoYWUuZ2V0Q3JjKCkpKTtcblxuICAvLyBzaXplc1xuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0TG9uZ0J5dGVzKGNvbXByZXNzZWRTaXplKSk7XG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRMb25nQnl0ZXMoc2l6ZSkpO1xuXG4gIHZhciBuYW1lID0gYWUuZ2V0TmFtZSgpO1xuICB2YXIgY29tbWVudCA9IGFlLmdldENvbW1lbnQoKTtcbiAgdmFyIGV4dHJhID0gYWUuZ2V0Q2VudHJhbERpcmVjdG9yeUV4dHJhKCk7XG5cbiAgaWYgKGdwYi51c2VzVVRGOEZvck5hbWVzKCkpIHtcbiAgICBuYW1lID0gQnVmZmVyLmZyb20obmFtZSk7XG4gICAgY29tbWVudCA9IEJ1ZmZlci5mcm9tKGNvbW1lbnQpO1xuICB9XG5cbiAgLy8gbmFtZSBsZW5ndGhcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldFNob3J0Qnl0ZXMobmFtZS5sZW5ndGgpKTtcblxuICAvLyBleHRyYSBsZW5ndGhcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldFNob3J0Qnl0ZXMoZXh0cmEubGVuZ3RoKSk7XG5cbiAgLy8gY29tbWVudHMgbGVuZ3RoXG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRTaG9ydEJ5dGVzKGNvbW1lbnQubGVuZ3RoKSk7XG5cbiAgLy8gZGlzayBudW1iZXIgc3RhcnRcbiAgdGhpcy53cml0ZShjb25zdGFudHMuU0hPUlRfWkVSTyk7XG5cbiAgLy8gaW50ZXJuYWwgYXR0cmlidXRlc1xuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0U2hvcnRCeXRlcyhhZS5nZXRJbnRlcm5hbEF0dHJpYnV0ZXMoKSkpO1xuXG4gIC8vIGV4dGVybmFsIGF0dHJpYnV0ZXNcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldExvbmdCeXRlcyhhZS5nZXRFeHRlcm5hbEF0dHJpYnV0ZXMoKSkpO1xuXG4gIC8vIHJlbGF0aXZlIG9mZnNldCBvZiBMRkhcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldExvbmdCeXRlcyhmaWxlT2Zmc2V0KSk7XG5cbiAgLy8gbmFtZVxuICB0aGlzLndyaXRlKG5hbWUpO1xuXG4gIC8vIGV4dHJhXG4gIHRoaXMud3JpdGUoZXh0cmEpO1xuXG4gIC8vIGNvbW1lbnRcbiAgdGhpcy53cml0ZShjb21tZW50KTtcbn07XG5cblppcEFyY2hpdmVPdXRwdXRTdHJlYW0ucHJvdG90eXBlLl93cml0ZURhdGFEZXNjcmlwdG9yID0gZnVuY3Rpb24oYWUpIHtcbiAgLy8gc2lnbmF0dXJlXG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRMb25nQnl0ZXMoY29uc3RhbnRzLlNJR19ERCkpO1xuXG4gIC8vIGNyYzMyIGNoZWNrc3VtXG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRMb25nQnl0ZXMoYWUuZ2V0Q3JjKCkpKTtcblxuICAvLyBzaXplc1xuICBpZiAoYWUuaXNaaXA2NCgpKSB7XG4gICAgdGhpcy53cml0ZSh6aXBVdGlsLmdldEVpZ2h0Qnl0ZXMoYWUuZ2V0Q29tcHJlc3NlZFNpemUoKSkpO1xuICAgIHRoaXMud3JpdGUoemlwVXRpbC5nZXRFaWdodEJ5dGVzKGFlLmdldFNpemUoKSkpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMud3JpdGUoemlwVXRpbC5nZXRMb25nQnl0ZXMoYWUuZ2V0Q29tcHJlc3NlZFNpemUoKSkpO1xuICAgIHRoaXMud3JpdGUoemlwVXRpbC5nZXRMb25nQnl0ZXMoYWUuZ2V0U2l6ZSgpKSk7XG4gIH1cbn07XG5cblppcEFyY2hpdmVPdXRwdXRTdHJlYW0ucHJvdG90eXBlLl93cml0ZUxvY2FsRmlsZUhlYWRlciA9IGZ1bmN0aW9uKGFlKSB7XG4gIHZhciBncGIgPSBhZS5nZXRHZW5lcmFsUHVycG9zZUJpdCgpO1xuICB2YXIgbWV0aG9kID0gYWUuZ2V0TWV0aG9kKCk7XG4gIHZhciBuYW1lID0gYWUuZ2V0TmFtZSgpO1xuICB2YXIgZXh0cmEgPSBhZS5nZXRMb2NhbEZpbGVEYXRhRXh0cmEoKTtcblxuICBpZiAoYWUuaXNaaXA2NCgpKSB7XG4gICAgZ3BiLnVzZURhdGFEZXNjcmlwdG9yKHRydWUpO1xuICAgIGFlLnNldFZlcnNpb25OZWVkZWRUb0V4dHJhY3QoY29uc3RhbnRzLk1JTl9WRVJTSU9OX1pJUDY0KTtcbiAgfVxuXG4gIGlmIChncGIudXNlc1VURjhGb3JOYW1lcygpKSB7XG4gICAgbmFtZSA9IEJ1ZmZlci5mcm9tKG5hbWUpO1xuICB9XG5cbiAgYWUuX29mZnNldHMuZmlsZSA9IHRoaXMub2Zmc2V0O1xuXG4gIC8vIHNpZ25hdHVyZVxuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0TG9uZ0J5dGVzKGNvbnN0YW50cy5TSUdfTEZIKSk7XG5cbiAgLy8gdmVyc2lvbiB0byBleHRyYWN0IGFuZCBnZW5lcmFsIGJpdCBmbGFnXG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRTaG9ydEJ5dGVzKGFlLmdldFZlcnNpb25OZWVkZWRUb0V4dHJhY3QoKSkpO1xuICB0aGlzLndyaXRlKGdwYi5lbmNvZGUoKSk7XG5cbiAgLy8gY29tcHJlc3Npb24gbWV0aG9kXG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRTaG9ydEJ5dGVzKG1ldGhvZCkpO1xuXG4gIC8vIGRhdGV0aW1lXG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRMb25nQnl0ZXMoYWUuZ2V0VGltZURvcygpKSk7XG5cbiAgYWUuX29mZnNldHMuZGF0YSA9IHRoaXMub2Zmc2V0O1xuXG4gIC8vIGNyYzMyIGNoZWNrc3VtIGFuZCBzaXplc1xuICBpZiAoZ3BiLnVzZXNEYXRhRGVzY3JpcHRvcigpKSB7XG4gICAgdGhpcy53cml0ZShjb25zdGFudHMuTE9OR19aRVJPKTtcbiAgICB0aGlzLndyaXRlKGNvbnN0YW50cy5MT05HX1pFUk8pO1xuICAgIHRoaXMud3JpdGUoY29uc3RhbnRzLkxPTkdfWkVSTyk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy53cml0ZSh6aXBVdGlsLmdldExvbmdCeXRlcyhhZS5nZXRDcmMoKSkpO1xuICAgIHRoaXMud3JpdGUoemlwVXRpbC5nZXRMb25nQnl0ZXMoYWUuZ2V0Q29tcHJlc3NlZFNpemUoKSkpO1xuICAgIHRoaXMud3JpdGUoemlwVXRpbC5nZXRMb25nQnl0ZXMoYWUuZ2V0U2l6ZSgpKSk7XG4gIH1cblxuICAvLyBuYW1lIGxlbmd0aFxuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0U2hvcnRCeXRlcyhuYW1lLmxlbmd0aCkpO1xuXG4gIC8vIGV4dHJhIGxlbmd0aFxuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0U2hvcnRCeXRlcyhleHRyYS5sZW5ndGgpKTtcblxuICAvLyBuYW1lXG4gIHRoaXMud3JpdGUobmFtZSk7XG5cbiAgLy8gZXh0cmFcbiAgdGhpcy53cml0ZShleHRyYSk7XG5cbiAgYWUuX29mZnNldHMuY29udGVudHMgPSB0aGlzLm9mZnNldDtcbn07XG5cblppcEFyY2hpdmVPdXRwdXRTdHJlYW0ucHJvdG90eXBlLmdldENvbW1lbnQgPSBmdW5jdGlvbihjb21tZW50KSB7XG4gIHJldHVybiB0aGlzLl9hcmNoaXZlLmNvbW1lbnQgIT09IG51bGwgPyB0aGlzLl9hcmNoaXZlLmNvbW1lbnQgOiAnJztcbn07XG5cblppcEFyY2hpdmVPdXRwdXRTdHJlYW0ucHJvdG90eXBlLmlzWmlwNjQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuX2FyY2hpdmUuZm9yY2VaaXA2NCB8fCB0aGlzLl9lbnRyaWVzLmxlbmd0aCA+IGNvbnN0YW50cy5aSVA2NF9NQUdJQ19TSE9SVCB8fCB0aGlzLl9hcmNoaXZlLmNlbnRyYWxMZW5ndGggPiBjb25zdGFudHMuWklQNjRfTUFHSUMgfHwgdGhpcy5fYXJjaGl2ZS5jZW50cmFsT2Zmc2V0ID4gY29uc3RhbnRzLlpJUDY0X01BR0lDO1xufTtcblxuWmlwQXJjaGl2ZU91dHB1dFN0cmVhbS5wcm90b3R5cGUuc2V0Q29tbWVudCA9IGZ1bmN0aW9uKGNvbW1lbnQpIHtcbiAgdGhpcy5fYXJjaGl2ZS5jb21tZW50ID0gY29tbWVudDtcbn07XG4iLAogICAgIi8qKlxuICogbm9kZS1jb21wcmVzcy1jb21tb25zXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE0IENocmlzIFRhbGtpbmd0b24sIGNvbnRyaWJ1dG9ycy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hcmNoaXZlcmpzL25vZGUtY29tcHJlc3MtY29tbW9ucy9ibG9iL21hc3Rlci9MSUNFTlNFLU1JVFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQXJjaGl2ZUVudHJ5OiByZXF1aXJlKCcuL2FyY2hpdmVycy9hcmNoaXZlLWVudHJ5JyksXG4gIFppcEFyY2hpdmVFbnRyeTogcmVxdWlyZSgnLi9hcmNoaXZlcnMvemlwL3ppcC1hcmNoaXZlLWVudHJ5JyksXG4gIEFyY2hpdmVPdXRwdXRTdHJlYW06IHJlcXVpcmUoJy4vYXJjaGl2ZXJzL2FyY2hpdmUtb3V0cHV0LXN0cmVhbScpLFxuICBaaXBBcmNoaXZlT3V0cHV0U3RyZWFtOiByZXF1aXJlKCcuL2FyY2hpdmVycy96aXAvemlwLWFyY2hpdmUtb3V0cHV0LXN0cmVhbScpXG59OyIsCiAgICAiLyoqXG4gKiBaaXBTdHJlYW1cbiAqXG4gKiBAaWdub3JlXG4gKiBAbGljZW5zZSBbTUlUXXtAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXJjaGl2ZXJqcy9ub2RlLXppcC1zdHJlYW0vYmxvYi9tYXN0ZXIvTElDRU5TRX1cbiAqIEBjb3B5cmlnaHQgKGMpIDIwMTQgQ2hyaXMgVGFsa2luZ3RvbiwgY29udHJpYnV0b3JzLlxuICovXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCd1dGlsJykuaW5oZXJpdHM7XG5cbnZhciBaaXBBcmNoaXZlT3V0cHV0U3RyZWFtID0gcmVxdWlyZSgnY29tcHJlc3MtY29tbW9ucycpLlppcEFyY2hpdmVPdXRwdXRTdHJlYW07XG52YXIgWmlwQXJjaGl2ZUVudHJ5ID0gcmVxdWlyZSgnY29tcHJlc3MtY29tbW9ucycpLlppcEFyY2hpdmVFbnRyeTtcblxudmFyIHV0aWwgPSByZXF1aXJlKCdhcmNoaXZlci11dGlscycpO1xuXG4vKipcbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgZXh0ZXJuYWw6WmlwQXJjaGl2ZU91dHB1dFN0cmVhbVxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLmNvbW1lbnRdIFNldHMgdGhlIHppcCBhcmNoaXZlIGNvbW1lbnQuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLmZvcmNlTG9jYWxUaW1lPWZhbHNlXSBGb3JjZXMgdGhlIGFyY2hpdmUgdG8gY29udGFpbiBsb2NhbCBmaWxlIHRpbWVzIGluc3RlYWQgb2YgVVRDLlxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5mb3JjZVppcDY0PWZhbHNlXSBGb3JjZXMgdGhlIGFyY2hpdmUgdG8gY29udGFpbiBaSVA2NCBoZWFkZXJzLlxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5zdG9yZT1mYWxzZV0gU2V0cyB0aGUgY29tcHJlc3Npb24gbWV0aG9kIHRvIFNUT1JFLlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLnpsaWJdIFBhc3NlZCB0byBbemxpYl17QGxpbmsgaHR0cHM6Ly9ub2RlanMub3JnL2FwaS96bGliLmh0bWwjemxpYl9jbGFzc19vcHRpb25zfVxuICogdG8gY29udHJvbCBjb21wcmVzc2lvbi5cbiAqL1xudmFyIFppcFN0cmVhbSA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgWmlwU3RyZWFtKSkge1xuICAgIHJldHVybiBuZXcgWmlwU3RyZWFtKG9wdGlvbnMpO1xuICB9XG5cbiAgb3B0aW9ucyA9IHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIG9wdGlvbnMuemxpYiA9IG9wdGlvbnMuemxpYiB8fCB7fTtcblxuICBaaXBBcmNoaXZlT3V0cHV0U3RyZWFtLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cbiAgaWYgKHR5cGVvZiBvcHRpb25zLmxldmVsID09PSAnbnVtYmVyJyAmJiBvcHRpb25zLmxldmVsID49IDApIHtcbiAgICBvcHRpb25zLnpsaWIubGV2ZWwgPSBvcHRpb25zLmxldmVsO1xuICAgIGRlbGV0ZSBvcHRpb25zLmxldmVsO1xuICB9XG5cbiAgaWYgKCFvcHRpb25zLmZvcmNlWmlwNjQgJiYgdHlwZW9mIG9wdGlvbnMuemxpYi5sZXZlbCA9PT0gJ251bWJlcicgJiYgb3B0aW9ucy56bGliLmxldmVsID09PSAwKSB7XG4gICAgb3B0aW9ucy5zdG9yZSA9IHRydWU7XG4gIH1cblxuICBvcHRpb25zLm5hbWVQcmVwZW5kU2xhc2ggPSBvcHRpb25zLm5hbWVQcmVwZW5kU2xhc2ggfHwgZmFsc2U7XG5cbiAgaWYgKG9wdGlvbnMuY29tbWVudCAmJiBvcHRpb25zLmNvbW1lbnQubGVuZ3RoID4gMCkge1xuICAgIHRoaXMuc2V0Q29tbWVudChvcHRpb25zLmNvbW1lbnQpO1xuICB9XG59O1xuXG5pbmhlcml0cyhaaXBTdHJlYW0sIFppcEFyY2hpdmVPdXRwdXRTdHJlYW0pO1xuXG4vKipcbiAqIE5vcm1hbGl6ZXMgZW50cnkgZGF0YSB3aXRoIGZhbGxiYWNrcyBmb3Iga2V5IHByb3BlcnRpZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSAge09iamVjdH0gZGF0YVxuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5aaXBTdHJlYW0ucHJvdG90eXBlLl9ub3JtYWxpemVGaWxlRGF0YSA9IGZ1bmN0aW9uKGRhdGEpIHtcbiAgZGF0YSA9IHV0aWwuZGVmYXVsdHMoZGF0YSwge1xuICAgIHR5cGU6ICdmaWxlJyxcbiAgICBuYW1lOiBudWxsLFxuICAgIG5hbWVQcmVwZW5kU2xhc2g6IHRoaXMub3B0aW9ucy5uYW1lUHJlcGVuZFNsYXNoLFxuICAgIGxpbmtuYW1lOiBudWxsLFxuICAgIGRhdGU6IG51bGwsXG4gICAgbW9kZTogbnVsbCxcbiAgICBzdG9yZTogdGhpcy5vcHRpb25zLnN0b3JlLFxuICAgIGNvbW1lbnQ6ICcnXG4gIH0pO1xuXG4gIHZhciBpc0RpciA9IGRhdGEudHlwZSA9PT0gJ2RpcmVjdG9yeSc7XG4gIHZhciBpc1N5bWxpbmsgPSBkYXRhLnR5cGUgPT09ICdzeW1saW5rJztcblxuICBpZiAoZGF0YS5uYW1lKSB7XG4gICAgZGF0YS5uYW1lID0gdXRpbC5zYW5pdGl6ZVBhdGgoZGF0YS5uYW1lKTtcblxuICAgIGlmICghaXNTeW1saW5rICYmIGRhdGEubmFtZS5zbGljZSgtMSkgPT09ICcvJykge1xuICAgICAgaXNEaXIgPSB0cnVlO1xuICAgICAgZGF0YS50eXBlID0gJ2RpcmVjdG9yeSc7XG4gICAgfSBlbHNlIGlmIChpc0Rpcikge1xuICAgICAgZGF0YS5uYW1lICs9ICcvJztcbiAgICB9XG4gIH1cblxuICBpZiAoaXNEaXIgfHwgaXNTeW1saW5rKSB7XG4gICAgZGF0YS5zdG9yZSA9IHRydWU7XG4gIH1cblxuICBkYXRhLmRhdGUgPSB1dGlsLmRhdGVpZnkoZGF0YS5kYXRlKTtcblxuICByZXR1cm4gZGF0YTtcbn07XG5cbi8qKlxuICogQXBwZW5kcyBhbiBlbnRyeSBnaXZlbiBhbiBpbnB1dCBzb3VyY2UgKHRleHQgc3RyaW5nLCBidWZmZXIsIG9yIHN0cmVhbSkuXG4gKlxuICogQHBhcmFtICB7KEJ1ZmZlcnxTdHJlYW18U3RyaW5nKX0gc291cmNlIFRoZSBpbnB1dCBzb3VyY2UuXG4gKiBAcGFyYW0gIHtPYmplY3R9IGRhdGFcbiAqIEBwYXJhbSAge1N0cmluZ30gZGF0YS5uYW1lIFNldHMgdGhlIGVudHJ5IG5hbWUgaW5jbHVkaW5nIGludGVybmFsIHBhdGguXG4gKiBAcGFyYW0gIHtTdHJpbmd9IFtkYXRhLmNvbW1lbnRdIFNldHMgdGhlIGVudHJ5IGNvbW1lbnQuXG4gKiBAcGFyYW0gIHsoU3RyaW5nfERhdGUpfSBbZGF0YS5kYXRlPU5PVygpXSBTZXRzIHRoZSBlbnRyeSBkYXRlLlxuICogQHBhcmFtICB7TnVtYmVyfSBbZGF0YS5tb2RlPUQ6MDc1NS9GOjA2NDRdIFNldHMgdGhlIGVudHJ5IHBlcm1pc3Npb25zLlxuICogQHBhcmFtICB7Qm9vbGVhbn0gW2RhdGEuc3RvcmU9b3B0aW9ucy5zdG9yZV0gU2V0cyB0aGUgY29tcHJlc3Npb24gbWV0aG9kIHRvIFNUT1JFLlxuICogQHBhcmFtICB7U3RyaW5nfSBbZGF0YS50eXBlPWZpbGVdIFNldHMgdGhlIGVudHJ5IHR5cGUuIERlZmF1bHRzIHRvIGBkaXJlY3RvcnlgXG4gKiBpZiBuYW1lIGVuZHMgd2l0aCB0cmFpbGluZyBzbGFzaC5cbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB0aGlzXG4gKi9cblppcFN0cmVhbS5wcm90b3R5cGUuZW50cnkgPSBmdW5jdGlvbihzb3VyY2UsIGRhdGEsIGNhbGxiYWNrKSB7XG4gIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICBjYWxsYmFjayA9IHRoaXMuX2VtaXRFcnJvckNhbGxiYWNrLmJpbmQodGhpcyk7XG4gIH1cblxuICBkYXRhID0gdGhpcy5fbm9ybWFsaXplRmlsZURhdGEoZGF0YSk7XG5cbiAgaWYgKGRhdGEudHlwZSAhPT0gJ2ZpbGUnICYmIGRhdGEudHlwZSAhPT0gJ2RpcmVjdG9yeScgJiYgZGF0YS50eXBlICE9PSAnc3ltbGluaycpIHtcbiAgICBjYWxsYmFjayhuZXcgRXJyb3IoZGF0YS50eXBlICsgJyBlbnRyaWVzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkJykpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh0eXBlb2YgZGF0YS5uYW1lICE9PSAnc3RyaW5nJyB8fCBkYXRhLm5hbWUubGVuZ3RoID09PSAwKSB7XG4gICAgY2FsbGJhY2sobmV3IEVycm9yKCdlbnRyeSBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIHZhbHVlJykpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChkYXRhLnR5cGUgPT09ICdzeW1saW5rJyAmJiB0eXBlb2YgZGF0YS5saW5rbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICBjYWxsYmFjayhuZXcgRXJyb3IoJ2VudHJ5IGxpbmtuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIHZhbHVlIHdoZW4gdHlwZSBlcXVhbHMgc3ltbGluaycpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZW50cnkgPSBuZXcgWmlwQXJjaGl2ZUVudHJ5KGRhdGEubmFtZSk7XG4gIGVudHJ5LnNldFRpbWUoZGF0YS5kYXRlLCB0aGlzLm9wdGlvbnMuZm9yY2VMb2NhbFRpbWUpO1xuXG4gIGlmIChkYXRhLm5hbWVQcmVwZW5kU2xhc2gpIHtcbiAgICBlbnRyeS5zZXROYW1lKGRhdGEubmFtZSwgdHJ1ZSk7XG4gIH1cblxuICBpZiAoZGF0YS5zdG9yZSkge1xuICAgIGVudHJ5LnNldE1ldGhvZCgwKTtcbiAgfVxuXG4gIGlmIChkYXRhLmNvbW1lbnQubGVuZ3RoID4gMCkge1xuICAgIGVudHJ5LnNldENvbW1lbnQoZGF0YS5jb21tZW50KTtcbiAgfVxuXG4gIGlmIChkYXRhLnR5cGUgPT09ICdzeW1saW5rJyAmJiB0eXBlb2YgZGF0YS5tb2RlICE9PSAnbnVtYmVyJykge1xuICAgIGRhdGEubW9kZSA9IDQwOTYwOyAvLyAwMTIwMDAwXG4gIH1cblxuICBpZiAodHlwZW9mIGRhdGEubW9kZSA9PT0gJ251bWJlcicpIHtcbiAgICBpZiAoZGF0YS50eXBlID09PSAnc3ltbGluaycpIHtcbiAgICAgIGRhdGEubW9kZSB8PSA0MDk2MDtcbiAgICB9XG5cbiAgICBlbnRyeS5zZXRVbml4TW9kZShkYXRhLm1vZGUpO1xuICB9XG5cbiAgaWYgKGRhdGEudHlwZSA9PT0gJ3N5bWxpbmsnICYmIHR5cGVvZiBkYXRhLmxpbmtuYW1lID09PSAnc3RyaW5nJykge1xuICAgIHNvdXJjZSA9IEJ1ZmZlci5mcm9tKGRhdGEubGlua25hbWUpO1xuICB9XG5cbiAgcmV0dXJuIFppcEFyY2hpdmVPdXRwdXRTdHJlYW0ucHJvdG90eXBlLmVudHJ5LmNhbGwodGhpcywgZW50cnksIHNvdXJjZSwgY2FsbGJhY2spO1xufTtcblxuLyoqXG4gKiBGaW5hbGl6ZXMgdGhlIGluc3RhbmNlIGFuZCBwcmV2ZW50cyBmdXJ0aGVyIGFwcGVuZGluZyB0byB0aGUgYXJjaGl2ZVxuICogc3RydWN0dXJlIChxdWV1ZSB3aWxsIGNvbnRpbnVlIHRpbCBkcmFpbmVkKS5cbiAqXG4gKiBAcmV0dXJuIHZvaWRcbiAqL1xuWmlwU3RyZWFtLnByb3RvdHlwZS5maW5hbGl6ZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLmZpbmlzaCgpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjdXJyZW50IG51bWJlciBvZiBieXRlcyB3cml0dGVuIHRvIHRoaXMgc3RyZWFtLlxuICogQGZ1bmN0aW9uIFppcFN0cmVhbSNnZXRCeXRlc1dyaXR0ZW5cbiAqIEByZXR1cm5zIHtOdW1iZXJ9XG4gKi9cblxuLyoqXG4gKiBDb21wcmVzcyBDb21tb25zIFppcEFyY2hpdmVPdXRwdXRTdHJlYW1cbiAqIEBleHRlcm5hbCBaaXBBcmNoaXZlT3V0cHV0U3RyZWFtXG4gKiBAc2VlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXJjaGl2ZXJqcy9ub2RlLWNvbXByZXNzLWNvbW1vbnN9XG4gKi9cbiIsCiAgICAiLyoqXG4gKiBaSVAgRm9ybWF0IFBsdWdpblxuICpcbiAqIEBtb2R1bGUgcGx1Z2lucy96aXBcbiAqIEBsaWNlbnNlIFtNSVRde0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hcmNoaXZlcmpzL25vZGUtYXJjaGl2ZXIvYmxvYi9tYXN0ZXIvTElDRU5TRX1cbiAqIEBjb3B5cmlnaHQgKGMpIDIwMTItMjAxNCBDaHJpcyBUYWxraW5ndG9uLCBjb250cmlidXRvcnMuXG4gKi9cbnZhciBlbmdpbmUgPSByZXF1aXJlKCd6aXAtc3RyZWFtJyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJ2FyY2hpdmVyLXV0aWxzJyk7XG5cbi8qKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge1ppcE9wdGlvbnN9IFtvcHRpb25zXVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLmNvbW1lbnRdIFNldHMgdGhlIHppcCBhcmNoaXZlIGNvbW1lbnQuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLmZvcmNlTG9jYWxUaW1lPWZhbHNlXSBGb3JjZXMgdGhlIGFyY2hpdmUgdG8gY29udGFpbiBsb2NhbCBmaWxlIHRpbWVzIGluc3RlYWQgb2YgVVRDLlxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5mb3JjZVppcDY0PWZhbHNlXSBGb3JjZXMgdGhlIGFyY2hpdmUgdG8gY29udGFpbiBaSVA2NCBoZWFkZXJzLlxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5uYW1lUHJlcGVuZFNsYXNoPWZhbHNlXSBQcmVwZW5kcyBhIGZvcndhcmQgc2xhc2ggdG8gYXJjaGl2ZSBmaWxlIHBhdGhzLlxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5zdG9yZT1mYWxzZV0gU2V0cyB0aGUgY29tcHJlc3Npb24gbWV0aG9kIHRvIFNUT1JFLlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLnpsaWJdIFBhc3NlZCB0byBbemxpYl17QGxpbmsgaHR0cHM6Ly9ub2RlanMub3JnL2FwaS96bGliLmh0bWwjemxpYl9jbGFzc19vcHRpb25zfVxuICovXG52YXIgWmlwID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgWmlwKSkge1xuICAgIHJldHVybiBuZXcgWmlwKG9wdGlvbnMpO1xuICB9XG5cbiAgb3B0aW9ucyA9IHRoaXMub3B0aW9ucyA9IHV0aWwuZGVmYXVsdHMob3B0aW9ucywge1xuICAgIGNvbW1lbnQ6ICcnLFxuICAgIGZvcmNlVVRDOiBmYWxzZSxcbiAgICBuYW1lUHJlcGVuZFNsYXNoOiBmYWxzZSxcbiAgICBzdG9yZTogZmFsc2VcbiAgfSk7XG5cbiAgdGhpcy5zdXBwb3J0cyA9IHtcbiAgICBkaXJlY3Rvcnk6IHRydWUsXG4gICAgc3ltbGluazogdHJ1ZVxuICB9O1xuXG4gIHRoaXMuZW5naW5lID0gbmV3IGVuZ2luZShvcHRpb25zKTtcbn07XG5cbi8qKlxuICogQHBhcmFtICB7KEJ1ZmZlcnxTdHJlYW0pfSBzb3VyY2VcbiAqIEBwYXJhbSAge1ppcEVudHJ5RGF0YX0gZGF0YVxuICogQHBhcmFtICB7U3RyaW5nfSBkYXRhLm5hbWUgU2V0cyB0aGUgZW50cnkgbmFtZSBpbmNsdWRpbmcgaW50ZXJuYWwgcGF0aC5cbiAqIEBwYXJhbSAgeyhTdHJpbmd8RGF0ZSl9IFtkYXRhLmRhdGU9Tk9XKCldIFNldHMgdGhlIGVudHJ5IGRhdGUuXG4gKiBAcGFyYW0gIHtOdW1iZXJ9IFtkYXRhLm1vZGU9RDowNzU1L0Y6MDY0NF0gU2V0cyB0aGUgZW50cnkgcGVybWlzc2lvbnMuXG4gKiBAcGFyYW0gIHtTdHJpbmd9IFtkYXRhLnByZWZpeF0gU2V0cyBhIHBhdGggcHJlZml4IGZvciB0aGUgZW50cnkgbmFtZS4gVXNlZnVsXG4gKiB3aGVuIHdvcmtpbmcgd2l0aCBtZXRob2RzIGxpa2UgYGRpcmVjdG9yeWAgb3IgYGdsb2JgLlxuICogQHBhcmFtICB7ZnMuU3RhdHN9IFtkYXRhLnN0YXRzXSBTZXRzIHRoZSBmcyBzdGF0IGRhdGEgZm9yIHRoaXMgZW50cnkgYWxsb3dpbmdcbiAqIGZvciByZWR1Y3Rpb24gb2YgZnMgc3RhdCBjYWxscyB3aGVuIHN0YXQgZGF0YSBpcyBhbHJlYWR5IGtub3duLlxuICogQHBhcmFtICB7Qm9vbGVhbn0gW2RhdGEuc3RvcmU9WmlwT3B0aW9ucy5zdG9yZV0gU2V0cyB0aGUgY29tcHJlc3Npb24gbWV0aG9kIHRvIFNUT1JFLlxuICogQHBhcmFtICB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHZvaWRcbiAqL1xuWmlwLnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbihzb3VyY2UsIGRhdGEsIGNhbGxiYWNrKSB7XG4gIHRoaXMuZW5naW5lLmVudHJ5KHNvdXJjZSwgZGF0YSwgY2FsbGJhY2spO1xufTtcblxuLyoqXG4gKiBAcmV0dXJuIHZvaWRcbiAqL1xuWmlwLnByb3RvdHlwZS5maW5hbGl6ZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLmVuZ2luZS5maW5hbGl6ZSgpO1xufTtcblxuLyoqXG4gKiBAcmV0dXJuIHRoaXMuZW5naW5lXG4gKi9cblppcC5wcm90b3R5cGUub24gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZW5naW5lLm9uLmFwcGx5KHRoaXMuZW5naW5lLCBhcmd1bWVudHMpO1xufTtcblxuLyoqXG4gKiBAcmV0dXJuIHRoaXMuZW5naW5lXG4gKi9cblppcC5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5lbmdpbmUucGlwZS5hcHBseSh0aGlzLmVuZ2luZSwgYXJndW1lbnRzKTtcbn07XG5cbi8qKlxuICogQHJldHVybiB0aGlzLmVuZ2luZVxuICovXG5aaXAucHJvdG90eXBlLnVucGlwZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5lbmdpbmUudW5waXBlLmFwcGx5KHRoaXMuZW5naW5lLCBhcmd1bWVudHMpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBaaXA7XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gWmlwT3B0aW9uc1xuICogQGdsb2JhbFxuICogQHByb3BlcnR5IHtTdHJpbmd9IFtjb21tZW50XSBTZXRzIHRoZSB6aXAgYXJjaGl2ZSBjb21tZW50LlxuICogQHByb3BlcnR5IHtCb29sZWFufSBbZm9yY2VMb2NhbFRpbWU9ZmFsc2VdIEZvcmNlcyB0aGUgYXJjaGl2ZSB0byBjb250YWluIGxvY2FsIGZpbGUgdGltZXMgaW5zdGVhZCBvZiBVVEMuXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IFtmb3JjZVppcDY0PWZhbHNlXSBGb3JjZXMgdGhlIGFyY2hpdmUgdG8gY29udGFpbiBaSVA2NCBoZWFkZXJzLlxuICogQHBycHBlcnR5IHtCb29sZWFufSBbbmFtZVByZXBlbmRTbGFzaD1mYWxzZV0gUHJlcGVuZHMgYSBmb3J3YXJkIHNsYXNoIHRvIGFyY2hpdmUgZmlsZSBwYXRocy5cbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gW3N0b3JlPWZhbHNlXSBTZXRzIHRoZSBjb21wcmVzc2lvbiBtZXRob2QgdG8gU1RPUkUuXG4gKiBAcHJvcGVydHkge09iamVjdH0gW3psaWJdIFBhc3NlZCB0byBbemxpYl17QGxpbmsgaHR0cHM6Ly9ub2RlanMub3JnL2FwaS96bGliLmh0bWwjemxpYl9jbGFzc19vcHRpb25zfVxuICogdG8gY29udHJvbCBjb21wcmVzc2lvbi5cbiAqIEBwcm9wZXJ0eSB7Kn0gWypdIFNlZSBbemlwLXN0cmVhbV17QGxpbmsgaHR0cHM6Ly9hcmNoaXZlcmpzLmNvbS96aXAtc3RyZWFtL1ppcFN0cmVhbS5odG1sfSBkb2N1bWVudGF0aW9uIGZvciBjdXJyZW50IGxpc3Qgb2YgcHJvcGVydGllcy5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFppcEVudHJ5RGF0YVxuICogQGdsb2JhbFxuICogQHByb3BlcnR5IHtTdHJpbmd9IG5hbWUgU2V0cyB0aGUgZW50cnkgbmFtZSBpbmNsdWRpbmcgaW50ZXJuYWwgcGF0aC5cbiAqIEBwcm9wZXJ0eSB7KFN0cmluZ3xEYXRlKX0gW2RhdGU9Tk9XKCldIFNldHMgdGhlIGVudHJ5IGRhdGUuXG4gKiBAcHJvcGVydHkge051bWJlcn0gW21vZGU9RDowNzU1L0Y6MDY0NF0gU2V0cyB0aGUgZW50cnkgcGVybWlzc2lvbnMuXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IFtuYW1lUHJlcGVuZFNsYXNoPVppcE9wdGlvbnMubmFtZVByZXBlbmRTbGFzaF0gUHJlcGVuZHMgYSBmb3J3YXJkIHNsYXNoIHRvIGFyY2hpdmUgZmlsZSBwYXRocy5cbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBbcHJlZml4XSBTZXRzIGEgcGF0aCBwcmVmaXggZm9yIHRoZSBlbnRyeSBuYW1lLiBVc2VmdWxcbiAqIHdoZW4gd29ya2luZyB3aXRoIG1ldGhvZHMgbGlrZSBgZGlyZWN0b3J5YCBvciBgZ2xvYmAuXG4gKiBAcHJvcGVydHkge2ZzLlN0YXRzfSBbc3RhdHNdIFNldHMgdGhlIGZzIHN0YXQgZGF0YSBmb3IgdGhpcyBlbnRyeSBhbGxvd2luZ1xuICogZm9yIHJlZHVjdGlvbiBvZiBmcyBzdGF0IGNhbGxzIHdoZW4gc3RhdCBkYXRhIGlzIGFscmVhZHkga25vd24uXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IFtzdG9yZT1aaXBPcHRpb25zLnN0b3JlXSBTZXRzIHRoZSBjb21wcmVzc2lvbiBtZXRob2QgdG8gU1RPUkUuXG4gKi9cblxuLyoqXG4gKiBaaXBTdHJlYW0gTW9kdWxlXG4gKiBAZXh0ZXJuYWwgWmlwU3RyZWFtXG4gKiBAc2VlIHtAbGluayBodHRwczovL3d3dy5hcmNoaXZlcmpzLmNvbS96aXAtc3RyZWFtL1ppcFN0cmVhbS5odG1sfVxuICovXG4iLAogICAgIm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIHF1ZXVlTWljcm90YXNrID09PSAnZnVuY3Rpb24nID8gcXVldWVNaWNyb3Rhc2sgOiAoZm4pID0+IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZm4pXG4iLAogICAgIm1vZHVsZS5leHBvcnRzID0gKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgcHJvY2Vzcy5uZXh0VGljayA9PT0gJ2Z1bmN0aW9uJylcbiAgPyBwcm9jZXNzLm5leHRUaWNrLmJpbmQocHJvY2VzcylcbiAgOiByZXF1aXJlKCcuL3F1ZXVlLW1pY3JvdGFzaycpXG4iLAogICAgIm1vZHVsZS5leHBvcnRzID0gY2xhc3MgRml4ZWRGSUZPIHtcbiAgY29uc3RydWN0b3IgKGh3bSkge1xuICAgIGlmICghKGh3bSA+IDApIHx8ICgoaHdtIC0gMSkgJiBod20pICE9PSAwKSB0aHJvdyBuZXcgRXJyb3IoJ01heCBzaXplIGZvciBhIEZpeGVkRklGTyBzaG91bGQgYmUgYSBwb3dlciBvZiB0d28nKVxuICAgIHRoaXMuYnVmZmVyID0gbmV3IEFycmF5KGh3bSlcbiAgICB0aGlzLm1hc2sgPSBod20gLSAxXG4gICAgdGhpcy50b3AgPSAwXG4gICAgdGhpcy5idG0gPSAwXG4gICAgdGhpcy5uZXh0ID0gbnVsbFxuICB9XG5cbiAgY2xlYXIgKCkge1xuICAgIHRoaXMudG9wID0gdGhpcy5idG0gPSAwXG4gICAgdGhpcy5uZXh0ID0gbnVsbFxuICAgIHRoaXMuYnVmZmVyLmZpbGwodW5kZWZpbmVkKVxuICB9XG5cbiAgcHVzaCAoZGF0YSkge1xuICAgIGlmICh0aGlzLmJ1ZmZlclt0aGlzLnRvcF0gIT09IHVuZGVmaW5lZCkgcmV0dXJuIGZhbHNlXG4gICAgdGhpcy5idWZmZXJbdGhpcy50b3BdID0gZGF0YVxuICAgIHRoaXMudG9wID0gKHRoaXMudG9wICsgMSkgJiB0aGlzLm1hc2tcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgc2hpZnQgKCkge1xuICAgIGNvbnN0IGxhc3QgPSB0aGlzLmJ1ZmZlclt0aGlzLmJ0bV1cbiAgICBpZiAobGFzdCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkXG4gICAgdGhpcy5idWZmZXJbdGhpcy5idG1dID0gdW5kZWZpbmVkXG4gICAgdGhpcy5idG0gPSAodGhpcy5idG0gKyAxKSAmIHRoaXMubWFza1xuICAgIHJldHVybiBsYXN0XG4gIH1cblxuICBwZWVrICgpIHtcbiAgICByZXR1cm4gdGhpcy5idWZmZXJbdGhpcy5idG1dXG4gIH1cblxuICBpc0VtcHR5ICgpIHtcbiAgICByZXR1cm4gdGhpcy5idWZmZXJbdGhpcy5idG1dID09PSB1bmRlZmluZWRcbiAgfVxufVxuIiwKICAgICJjb25zdCBGaXhlZEZJRk8gPSByZXF1aXJlKCcuL2ZpeGVkLXNpemUnKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIEZhc3RGSUZPIHtcbiAgY29uc3RydWN0b3IgKGh3bSkge1xuICAgIHRoaXMuaHdtID0gaHdtIHx8IDE2XG4gICAgdGhpcy5oZWFkID0gbmV3IEZpeGVkRklGTyh0aGlzLmh3bSlcbiAgICB0aGlzLnRhaWwgPSB0aGlzLmhlYWRcbiAgICB0aGlzLmxlbmd0aCA9IDBcbiAgfVxuXG4gIGNsZWFyICgpIHtcbiAgICB0aGlzLmhlYWQgPSB0aGlzLnRhaWxcbiAgICB0aGlzLmhlYWQuY2xlYXIoKVxuICAgIHRoaXMubGVuZ3RoID0gMFxuICB9XG5cbiAgcHVzaCAodmFsKSB7XG4gICAgdGhpcy5sZW5ndGgrK1xuICAgIGlmICghdGhpcy5oZWFkLnB1c2godmFsKSkge1xuICAgICAgY29uc3QgcHJldiA9IHRoaXMuaGVhZFxuICAgICAgdGhpcy5oZWFkID0gcHJldi5uZXh0ID0gbmV3IEZpeGVkRklGTygyICogdGhpcy5oZWFkLmJ1ZmZlci5sZW5ndGgpXG4gICAgICB0aGlzLmhlYWQucHVzaCh2YWwpXG4gICAgfVxuICB9XG5cbiAgc2hpZnQgKCkge1xuICAgIGlmICh0aGlzLmxlbmd0aCAhPT0gMCkgdGhpcy5sZW5ndGgtLVxuICAgIGNvbnN0IHZhbCA9IHRoaXMudGFpbC5zaGlmdCgpXG4gICAgaWYgKHZhbCA9PT0gdW5kZWZpbmVkICYmIHRoaXMudGFpbC5uZXh0KSB7XG4gICAgICBjb25zdCBuZXh0ID0gdGhpcy50YWlsLm5leHRcbiAgICAgIHRoaXMudGFpbC5uZXh0ID0gbnVsbFxuICAgICAgdGhpcy50YWlsID0gbmV4dFxuICAgICAgcmV0dXJuIHRoaXMudGFpbC5zaGlmdCgpXG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbFxuICB9XG5cbiAgcGVlayAoKSB7XG4gICAgY29uc3QgdmFsID0gdGhpcy50YWlsLnBlZWsoKVxuICAgIGlmICh2YWwgPT09IHVuZGVmaW5lZCAmJiB0aGlzLnRhaWwubmV4dCkgcmV0dXJuIHRoaXMudGFpbC5uZXh0LnBlZWsoKVxuICAgIHJldHVybiB2YWxcbiAgfVxuXG4gIGlzRW1wdHkgKCkge1xuICAgIHJldHVybiB0aGlzLmxlbmd0aCA9PT0gMFxuICB9XG59XG4iLAogICAgIm1vZHVsZS5leHBvcnRzID0gY2xhc3MgUGFzc1Rocm91Z2hEZWNvZGVyIHtcbiAgY29uc3RydWN0b3IgKGVuY29kaW5nKSB7XG4gICAgdGhpcy5lbmNvZGluZyA9IGVuY29kaW5nXG4gIH1cblxuICBnZXQgcmVtYWluaW5nICgpIHtcbiAgICByZXR1cm4gMFxuICB9XG5cbiAgZGVjb2RlICh0YWlsKSB7XG4gICAgcmV0dXJuIHRhaWwudG9TdHJpbmcodGhpcy5lbmNvZGluZylcbiAgfVxuXG4gIGZsdXNoICgpIHtcbiAgICByZXR1cm4gJydcbiAgfVxufVxuIiwKICAgICIvKipcbiAqIGh0dHBzOi8vZW5jb2Rpbmcuc3BlYy53aGF0d2cub3JnLyN1dGYtOC1kZWNvZGVyXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gY2xhc3MgVVRGOERlY29kZXIge1xuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgdGhpcy5jb2RlUG9pbnQgPSAwXG4gICAgdGhpcy5ieXRlc1NlZW4gPSAwXG4gICAgdGhpcy5ieXRlc05lZWRlZCA9IDBcbiAgICB0aGlzLmxvd2VyQm91bmRhcnkgPSAweDgwXG4gICAgdGhpcy51cHBlckJvdW5kYXJ5ID0gMHhiZlxuICB9XG5cbiAgZ2V0IHJlbWFpbmluZyAoKSB7XG4gICAgcmV0dXJuIHRoaXMuYnl0ZXNTZWVuXG4gIH1cblxuICBkZWNvZGUgKGRhdGEpIHtcbiAgICAvLyBJZiB3ZSBoYXZlIGEgZmFzdCBwYXRoLCBqdXN0IHNuaWZmIGlmIHRoZSBsYXN0IHBhcnQgaXMgYSBib3VuZGFyeVxuICAgIGlmICh0aGlzLmJ5dGVzTmVlZGVkID09PSAwKSB7XG4gICAgICBsZXQgaXNCb3VuZGFyeSA9IHRydWVcblxuICAgICAgZm9yIChsZXQgaSA9IE1hdGgubWF4KDAsIGRhdGEuYnl0ZUxlbmd0aCAtIDQpLCBuID0gZGF0YS5ieXRlTGVuZ3RoOyBpIDwgbiAmJiBpc0JvdW5kYXJ5OyBpKyspIHtcbiAgICAgICAgaXNCb3VuZGFyeSA9IGRhdGFbaV0gPD0gMHg3ZlxuICAgICAgfVxuXG4gICAgICBpZiAoaXNCb3VuZGFyeSkgcmV0dXJuIGRhdGEudG9TdHJpbmcoKVxuICAgIH1cblxuICAgIGxldCByZXN1bHQgPSAnJ1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIG4gPSBkYXRhLmJ5dGVMZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgIGNvbnN0IGJ5dGUgPSBkYXRhW2ldXG5cbiAgICAgIGlmICh0aGlzLmJ5dGVzTmVlZGVkID09PSAwKSB7XG4gICAgICAgIGlmIChieXRlIDw9IDB4N2YpIHtcbiAgICAgICAgICByZXN1bHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShieXRlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuYnl0ZXNTZWVuID0gMVxuXG4gICAgICAgICAgaWYgKGJ5dGUgPj0gMHhjMiAmJiBieXRlIDw9IDB4ZGYpIHtcbiAgICAgICAgICAgIHRoaXMuYnl0ZXNOZWVkZWQgPSAyXG4gICAgICAgICAgICB0aGlzLmNvZGVQb2ludCA9IGJ5dGUgJiAweDFmXG4gICAgICAgICAgfSBlbHNlIGlmIChieXRlID49IDB4ZTAgJiYgYnl0ZSA8PSAweGVmKSB7XG4gICAgICAgICAgICBpZiAoYnl0ZSA9PT0gMHhlMCkgdGhpcy5sb3dlckJvdW5kYXJ5ID0gMHhhMFxuICAgICAgICAgICAgZWxzZSBpZiAoYnl0ZSA9PT0gMHhlZCkgdGhpcy51cHBlckJvdW5kYXJ5ID0gMHg5ZlxuICAgICAgICAgICAgdGhpcy5ieXRlc05lZWRlZCA9IDNcbiAgICAgICAgICAgIHRoaXMuY29kZVBvaW50ID0gYnl0ZSAmIDB4ZlxuICAgICAgICAgIH0gZWxzZSBpZiAoYnl0ZSA+PSAweGYwICYmIGJ5dGUgPD0gMHhmNCkge1xuICAgICAgICAgICAgaWYgKGJ5dGUgPT09IDB4ZjApIHRoaXMubG93ZXJCb3VuZGFyeSA9IDB4OTBcbiAgICAgICAgICAgIGlmIChieXRlID09PSAweGY0KSB0aGlzLnVwcGVyQm91bmRhcnkgPSAweDhmXG4gICAgICAgICAgICB0aGlzLmJ5dGVzTmVlZGVkID0gNFxuICAgICAgICAgICAgdGhpcy5jb2RlUG9pbnQgPSBieXRlICYgMHg3XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSAnXFx1ZmZmZCdcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBpZiAoYnl0ZSA8IHRoaXMubG93ZXJCb3VuZGFyeSB8fCBieXRlID4gdGhpcy51cHBlckJvdW5kYXJ5KSB7XG4gICAgICAgIHRoaXMuY29kZVBvaW50ID0gMFxuICAgICAgICB0aGlzLmJ5dGVzTmVlZGVkID0gMFxuICAgICAgICB0aGlzLmJ5dGVzU2VlbiA9IDBcbiAgICAgICAgdGhpcy5sb3dlckJvdW5kYXJ5ID0gMHg4MFxuICAgICAgICB0aGlzLnVwcGVyQm91bmRhcnkgPSAweGJmXG5cbiAgICAgICAgcmVzdWx0ICs9ICdcXHVmZmZkJ1xuXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIHRoaXMubG93ZXJCb3VuZGFyeSA9IDB4ODBcbiAgICAgIHRoaXMudXBwZXJCb3VuZGFyeSA9IDB4YmZcblxuICAgICAgdGhpcy5jb2RlUG9pbnQgPSAodGhpcy5jb2RlUG9pbnQgPDwgNikgfCAoYnl0ZSAmIDB4M2YpXG4gICAgICB0aGlzLmJ5dGVzU2VlbisrXG5cbiAgICAgIGlmICh0aGlzLmJ5dGVzU2VlbiAhPT0gdGhpcy5ieXRlc05lZWRlZCkgY29udGludWVcblxuICAgICAgcmVzdWx0ICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KHRoaXMuY29kZVBvaW50KVxuXG4gICAgICB0aGlzLmNvZGVQb2ludCA9IDBcbiAgICAgIHRoaXMuYnl0ZXNOZWVkZWQgPSAwXG4gICAgICB0aGlzLmJ5dGVzU2VlbiA9IDBcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICBmbHVzaCAoKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5ieXRlc05lZWRlZCA+IDAgPyAnXFx1ZmZmZCcgOiAnJ1xuXG4gICAgdGhpcy5jb2RlUG9pbnQgPSAwXG4gICAgdGhpcy5ieXRlc05lZWRlZCA9IDBcbiAgICB0aGlzLmJ5dGVzU2VlbiA9IDBcbiAgICB0aGlzLmxvd2VyQm91bmRhcnkgPSAweDgwXG4gICAgdGhpcy51cHBlckJvdW5kYXJ5ID0gMHhiZlxuXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG59XG4iLAogICAgImNvbnN0IFBhc3NUaHJvdWdoRGVjb2RlciA9IHJlcXVpcmUoJy4vbGliL3Bhc3MtdGhyb3VnaC1kZWNvZGVyJylcbmNvbnN0IFVURjhEZWNvZGVyID0gcmVxdWlyZSgnLi9saWIvdXRmOC1kZWNvZGVyJylcblxubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBUZXh0RGVjb2RlciB7XG4gIGNvbnN0cnVjdG9yIChlbmNvZGluZyA9ICd1dGY4Jykge1xuICAgIHRoaXMuZW5jb2RpbmcgPSBub3JtYWxpemVFbmNvZGluZyhlbmNvZGluZylcblxuICAgIHN3aXRjaCAodGhpcy5lbmNvZGluZykge1xuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICAgIHRoaXMuZGVjb2RlciA9IG5ldyBVVEY4RGVjb2RlcigpXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgZW5jb2Rpbmc6ICcgKyB0aGlzLmVuY29kaW5nKVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5kZWNvZGVyID0gbmV3IFBhc3NUaHJvdWdoRGVjb2Rlcih0aGlzLmVuY29kaW5nKVxuICAgIH1cbiAgfVxuXG4gIGdldCByZW1haW5pbmcgKCkge1xuICAgIHJldHVybiB0aGlzLmRlY29kZXIucmVtYWluaW5nXG4gIH1cblxuICBwdXNoIChkYXRhKSB7XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykgcmV0dXJuIGRhdGFcbiAgICByZXR1cm4gdGhpcy5kZWNvZGVyLmRlY29kZShkYXRhKVxuICB9XG5cbiAgLy8gRm9yIE5vZGUuanMgY29tcGF0aWJpbGl0eVxuICB3cml0ZSAoZGF0YSkge1xuICAgIHJldHVybiB0aGlzLnB1c2goZGF0YSlcbiAgfVxuXG4gIGVuZCAoZGF0YSkge1xuICAgIGxldCByZXN1bHQgPSAnJ1xuICAgIGlmIChkYXRhKSByZXN1bHQgPSB0aGlzLnB1c2goZGF0YSlcbiAgICByZXN1bHQgKz0gdGhpcy5kZWNvZGVyLmZsdXNoKClcbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplRW5jb2RpbmcgKGVuY29kaW5nKSB7XG4gIGVuY29kaW5nID0gZW5jb2RpbmcudG9Mb3dlckNhc2UoKVxuXG4gIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICBjYXNlICd1dGY4JzpcbiAgICBjYXNlICd1dGYtOCc6XG4gICAgICByZXR1cm4gJ3V0ZjgnXG4gICAgY2FzZSAndWNzMic6XG4gICAgY2FzZSAndWNzLTInOlxuICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgIHJldHVybiAndXRmMTZsZSdcbiAgICBjYXNlICdsYXRpbjEnOlxuICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICByZXR1cm4gJ2xhdGluMSdcbiAgICBjYXNlICdiYXNlNjQnOlxuICAgIGNhc2UgJ2FzY2lpJzpcbiAgICBjYXNlICdoZXgnOlxuICAgICAgcmV0dXJuIGVuY29kaW5nXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICB9XG59O1xuIiwKICAgICJjb25zdCB7IEV2ZW50RW1pdHRlciB9ID0gcmVxdWlyZSgnZXZlbnRzJylcbmNvbnN0IFNUUkVBTV9ERVNUUk9ZRUQgPSBuZXcgRXJyb3IoJ1N0cmVhbSB3YXMgZGVzdHJveWVkJylcbmNvbnN0IFBSRU1BVFVSRV9DTE9TRSA9IG5ldyBFcnJvcignUHJlbWF0dXJlIGNsb3NlJylcblxuY29uc3QgcXVldWVUaWNrID0gcmVxdWlyZSgncXVldWUtdGljaycpXG5jb25zdCBGSUZPID0gcmVxdWlyZSgnZmFzdC1maWZvJylcbmNvbnN0IFRleHREZWNvZGVyID0gcmVxdWlyZSgndGV4dC1kZWNvZGVyJylcblxuLyogZXNsaW50LWRpc2FibGUgbm8tbXVsdGktc3BhY2VzICovXG5cbi8vIDI5IGJpdHMgdXNlZCB0b3RhbCAoNCBmcm9tIHNoYXJlZCwgMTQgZnJvbSByZWFkLCBhbmQgMTEgZnJvbSB3cml0ZSlcbmNvbnN0IE1BWCA9ICgoMSA8PCAyOSkgLSAxKVxuXG4vLyBTaGFyZWQgc3RhdGVcbmNvbnN0IE9QRU5JTkcgICAgICAgPSAwYjAwMDFcbmNvbnN0IFBSRURFU1RST1lJTkcgPSAwYjAwMTBcbmNvbnN0IERFU1RST1lJTkcgICAgPSAwYjAxMDBcbmNvbnN0IERFU1RST1lFRCAgICAgPSAwYjEwMDBcblxuY29uc3QgTk9UX09QRU5JTkcgPSBNQVggXiBPUEVOSU5HXG5jb25zdCBOT1RfUFJFREVTVFJPWUlORyA9IE1BWCBeIFBSRURFU1RST1lJTkdcblxuLy8gUmVhZCBzdGF0ZSAoNCBiaXQgb2Zmc2V0IGZyb20gc2hhcmVkIHN0YXRlKVxuY29uc3QgUkVBRF9BQ1RJVkUgICAgICAgICAgID0gMGIwMDAwMDAwMDAwMDAwMSA8PCA0XG5jb25zdCBSRUFEX1VQREFUSU5HICAgICAgICAgPSAwYjAwMDAwMDAwMDAwMDEwIDw8IDRcbmNvbnN0IFJFQURfUFJJTUFSWSAgICAgICAgICA9IDBiMDAwMDAwMDAwMDAxMDAgPDwgNFxuY29uc3QgUkVBRF9RVUVVRUQgICAgICAgICAgID0gMGIwMDAwMDAwMDAwMTAwMCA8PCA0XG5jb25zdCBSRUFEX1JFU1VNRUQgICAgICAgICAgPSAwYjAwMDAwMDAwMDEwMDAwIDw8IDRcbmNvbnN0IFJFQURfUElQRV9EUkFJTkVEICAgICA9IDBiMDAwMDAwMDAxMDAwMDAgPDwgNFxuY29uc3QgUkVBRF9FTkRJTkcgICAgICAgICAgID0gMGIwMDAwMDAwMTAwMDAwMCA8PCA0XG5jb25zdCBSRUFEX0VNSVRfREFUQSAgICAgICAgPSAwYjAwMDAwMDEwMDAwMDAwIDw8IDRcbmNvbnN0IFJFQURfRU1JVF9SRUFEQUJMRSAgICA9IDBiMDAwMDAxMDAwMDAwMDAgPDwgNFxuY29uc3QgUkVBRF9FTUlUVEVEX1JFQURBQkxFID0gMGIwMDAwMTAwMDAwMDAwMCA8PCA0XG5jb25zdCBSRUFEX0RPTkUgICAgICAgICAgICAgPSAwYjAwMDEwMDAwMDAwMDAwIDw8IDRcbmNvbnN0IFJFQURfTkVYVF9USUNLICAgICAgICA9IDBiMDAxMDAwMDAwMDAwMDAgPDwgNFxuY29uc3QgUkVBRF9ORUVEU19QVVNIICAgICAgID0gMGIwMTAwMDAwMDAwMDAwMCA8PCA0XG5jb25zdCBSRUFEX1JFQURfQUhFQUQgICAgICAgPSAwYjEwMDAwMDAwMDAwMDAwIDw8IDRcblxuLy8gQ29tYmluZWQgcmVhZCBzdGF0ZVxuY29uc3QgUkVBRF9GTE9XSU5HID0gUkVBRF9SRVNVTUVEIHwgUkVBRF9QSVBFX0RSQUlORURcbmNvbnN0IFJFQURfQUNUSVZFX0FORF9ORUVEU19QVVNIID0gUkVBRF9BQ1RJVkUgfCBSRUFEX05FRURTX1BVU0hcbmNvbnN0IFJFQURfUFJJTUFSWV9BTkRfQUNUSVZFID0gUkVBRF9QUklNQVJZIHwgUkVBRF9BQ1RJVkVcbmNvbnN0IFJFQURfRU1JVF9SRUFEQUJMRV9BTkRfUVVFVUVEID0gUkVBRF9FTUlUX1JFQURBQkxFIHwgUkVBRF9RVUVVRURcbmNvbnN0IFJFQURfUkVTVU1FRF9SRUFEX0FIRUFEID0gUkVBRF9SRVNVTUVEIHwgUkVBRF9SRUFEX0FIRUFEXG5cbmNvbnN0IFJFQURfTk9UX0FDVElWRSAgICAgICAgICAgICA9IE1BWCBeIFJFQURfQUNUSVZFXG5jb25zdCBSRUFEX05PTl9QUklNQVJZICAgICAgICAgICAgPSBNQVggXiBSRUFEX1BSSU1BUllcbmNvbnN0IFJFQURfTk9OX1BSSU1BUllfQU5EX1BVU0hFRCA9IE1BWCBeIChSRUFEX1BSSU1BUlkgfCBSRUFEX05FRURTX1BVU0gpXG5jb25zdCBSRUFEX1BVU0hFRCAgICAgICAgICAgICAgICAgPSBNQVggXiBSRUFEX05FRURTX1BVU0hcbmNvbnN0IFJFQURfUEFVU0VEICAgICAgICAgICAgICAgICA9IE1BWCBeIFJFQURfUkVTVU1FRFxuY29uc3QgUkVBRF9OT1RfUVVFVUVEICAgICAgICAgICAgID0gTUFYIF4gKFJFQURfUVVFVUVEIHwgUkVBRF9FTUlUVEVEX1JFQURBQkxFKVxuY29uc3QgUkVBRF9OT1RfRU5ESU5HICAgICAgICAgICAgID0gTUFYIF4gUkVBRF9FTkRJTkdcbmNvbnN0IFJFQURfUElQRV9OT1RfRFJBSU5FRCAgICAgICA9IE1BWCBeIFJFQURfRkxPV0lOR1xuY29uc3QgUkVBRF9OT1RfTkVYVF9USUNLICAgICAgICAgID0gTUFYIF4gUkVBRF9ORVhUX1RJQ0tcbmNvbnN0IFJFQURfTk9UX1VQREFUSU5HICAgICAgICAgICA9IE1BWCBeIFJFQURfVVBEQVRJTkdcbmNvbnN0IFJFQURfTk9fUkVBRF9BSEVBRCAgICAgICAgICA9IE1BWCBeIFJFQURfUkVBRF9BSEVBRFxuY29uc3QgUkVBRF9QQVVTRURfTk9fUkVBRF9BSEVBRCAgID0gTUFYIF4gUkVBRF9SRVNVTUVEX1JFQURfQUhFQURcblxuLy8gV3JpdGUgc3RhdGUgKDE4IGJpdCBvZmZzZXQsIDQgYml0IG9mZnNldCBmcm9tIHNoYXJlZCBzdGF0ZSBhbmQgMTQgZnJvbSByZWFkIHN0YXRlKVxuY29uc3QgV1JJVEVfQUNUSVZFICAgICA9IDBiMDAwMDAwMDAwMDEgPDwgMThcbmNvbnN0IFdSSVRFX1VQREFUSU5HICAgPSAwYjAwMDAwMDAwMDEwIDw8IDE4XG5jb25zdCBXUklURV9QUklNQVJZICAgID0gMGIwMDAwMDAwMDEwMCA8PCAxOFxuY29uc3QgV1JJVEVfUVVFVUVEICAgICA9IDBiMDAwMDAwMDEwMDAgPDwgMThcbmNvbnN0IFdSSVRFX1VORFJBSU5FRCAgPSAwYjAwMDAwMDEwMDAwIDw8IDE4XG5jb25zdCBXUklURV9ET05FICAgICAgID0gMGIwMDAwMDEwMDAwMCA8PCAxOFxuY29uc3QgV1JJVEVfRU1JVF9EUkFJTiA9IDBiMDAwMDEwMDAwMDAgPDwgMThcbmNvbnN0IFdSSVRFX05FWFRfVElDSyAgPSAwYjAwMDEwMDAwMDAwIDw8IDE4XG5jb25zdCBXUklURV9XUklUSU5HICAgID0gMGIwMDEwMDAwMDAwMCA8PCAxOFxuY29uc3QgV1JJVEVfRklOSVNISU5HICA9IDBiMDEwMDAwMDAwMDAgPDwgMThcbmNvbnN0IFdSSVRFX0NPUktFRCAgICAgPSAwYjEwMDAwMDAwMDAwIDw8IDE4XG5cbmNvbnN0IFdSSVRFX05PVF9BQ1RJVkUgICAgPSBNQVggXiAoV1JJVEVfQUNUSVZFIHwgV1JJVEVfV1JJVElORylcbmNvbnN0IFdSSVRFX05PTl9QUklNQVJZICAgPSBNQVggXiBXUklURV9QUklNQVJZXG5jb25zdCBXUklURV9OT1RfRklOSVNISU5HID0gTUFYIF4gV1JJVEVfRklOSVNISU5HXG5jb25zdCBXUklURV9EUkFJTkVEICAgICAgID0gTUFYIF4gV1JJVEVfVU5EUkFJTkVEXG5jb25zdCBXUklURV9OT1RfUVVFVUVEICAgID0gTUFYIF4gV1JJVEVfUVVFVUVEXG5jb25zdCBXUklURV9OT1RfTkVYVF9USUNLID0gTUFYIF4gV1JJVEVfTkVYVF9USUNLXG5jb25zdCBXUklURV9OT1RfVVBEQVRJTkcgID0gTUFYIF4gV1JJVEVfVVBEQVRJTkdcbmNvbnN0IFdSSVRFX05PVF9DT1JLRUQgICAgPSBNQVggXiBXUklURV9DT1JLRURcblxuLy8gQ29tYmluZWQgc2hhcmVkIHN0YXRlXG5jb25zdCBBQ1RJVkUgPSBSRUFEX0FDVElWRSB8IFdSSVRFX0FDVElWRVxuY29uc3QgTk9UX0FDVElWRSA9IE1BWCBeIEFDVElWRVxuY29uc3QgRE9ORSA9IFJFQURfRE9ORSB8IFdSSVRFX0RPTkVcbmNvbnN0IERFU1RST1lfU1RBVFVTID0gREVTVFJPWUlORyB8IERFU1RST1lFRCB8IFBSRURFU1RST1lJTkdcbmNvbnN0IE9QRU5fU1RBVFVTID0gREVTVFJPWV9TVEFUVVMgfCBPUEVOSU5HXG5jb25zdCBBVVRPX0RFU1RST1kgPSBERVNUUk9ZX1NUQVRVUyB8IERPTkVcbmNvbnN0IE5PTl9QUklNQVJZID0gV1JJVEVfTk9OX1BSSU1BUlkgJiBSRUFEX05PTl9QUklNQVJZXG5jb25zdCBBQ1RJVkVfT1JfVElDS0lORyA9IFdSSVRFX05FWFRfVElDSyB8IFJFQURfTkVYVF9USUNLXG5jb25zdCBUSUNLSU5HID0gQUNUSVZFX09SX1RJQ0tJTkcgJiBOT1RfQUNUSVZFXG5jb25zdCBJU19PUEVOSU5HID0gT1BFTl9TVEFUVVMgfCBUSUNLSU5HXG5cbi8vIENvbWJpbmVkIHNoYXJlZCBzdGF0ZSBhbmQgcmVhZCBzdGF0ZVxuY29uc3QgUkVBRF9QUklNQVJZX1NUQVRVUyA9IE9QRU5fU1RBVFVTIHwgUkVBRF9FTkRJTkcgfCBSRUFEX0RPTkVcbmNvbnN0IFJFQURfU1RBVFVTID0gT1BFTl9TVEFUVVMgfCBSRUFEX0RPTkUgfCBSRUFEX1FVRVVFRFxuY29uc3QgUkVBRF9FTkRJTkdfU1RBVFVTID0gT1BFTl9TVEFUVVMgfCBSRUFEX0VORElORyB8IFJFQURfUVVFVUVEXG5jb25zdCBSRUFEX1JFQURBQkxFX1NUQVRVUyA9IE9QRU5fU1RBVFVTIHwgUkVBRF9FTUlUX1JFQURBQkxFIHwgUkVBRF9RVUVVRUQgfCBSRUFEX0VNSVRURURfUkVBREFCTEVcbmNvbnN0IFNIT1VMRF9OT1RfUkVBRCA9IE9QRU5fU1RBVFVTIHwgUkVBRF9BQ1RJVkUgfCBSRUFEX0VORElORyB8IFJFQURfRE9ORSB8IFJFQURfTkVFRFNfUFVTSCB8IFJFQURfUkVBRF9BSEVBRFxuY29uc3QgUkVBRF9CQUNLUFJFU1NVUkVfU1RBVFVTID0gREVTVFJPWV9TVEFUVVMgfCBSRUFEX0VORElORyB8IFJFQURfRE9ORVxuY29uc3QgUkVBRF9VUERBVEVfU1lOQ19TVEFUVVMgPSBSRUFEX1VQREFUSU5HIHwgT1BFTl9TVEFUVVMgfCBSRUFEX05FWFRfVElDSyB8IFJFQURfUFJJTUFSWVxuXG4vLyBDb21iaW5lZCB3cml0ZSBzdGF0ZVxuY29uc3QgV1JJVEVfUFJJTUFSWV9TVEFUVVMgPSBPUEVOX1NUQVRVUyB8IFdSSVRFX0ZJTklTSElORyB8IFdSSVRFX0RPTkVcbmNvbnN0IFdSSVRFX1FVRVVFRF9BTkRfVU5EUkFJTkVEID0gV1JJVEVfUVVFVUVEIHwgV1JJVEVfVU5EUkFJTkVEXG5jb25zdCBXUklURV9RVUVVRURfQU5EX0FDVElWRSA9IFdSSVRFX1FVRVVFRCB8IFdSSVRFX0FDVElWRVxuY29uc3QgV1JJVEVfRFJBSU5fU1RBVFVTID0gV1JJVEVfUVVFVUVEIHwgV1JJVEVfVU5EUkFJTkVEIHwgT1BFTl9TVEFUVVMgfCBXUklURV9BQ1RJVkVcbmNvbnN0IFdSSVRFX1NUQVRVUyA9IE9QRU5fU1RBVFVTIHwgV1JJVEVfQUNUSVZFIHwgV1JJVEVfUVVFVUVEIHwgV1JJVEVfQ09SS0VEXG5jb25zdCBXUklURV9QUklNQVJZX0FORF9BQ1RJVkUgPSBXUklURV9QUklNQVJZIHwgV1JJVEVfQUNUSVZFXG5jb25zdCBXUklURV9BQ1RJVkVfQU5EX1dSSVRJTkcgPSBXUklURV9BQ1RJVkUgfCBXUklURV9XUklUSU5HXG5jb25zdCBXUklURV9GSU5JU0hJTkdfU1RBVFVTID0gT1BFTl9TVEFUVVMgfCBXUklURV9GSU5JU0hJTkcgfCBXUklURV9RVUVVRURfQU5EX0FDVElWRSB8IFdSSVRFX0RPTkVcbmNvbnN0IFdSSVRFX0JBQ0tQUkVTU1VSRV9TVEFUVVMgPSBXUklURV9VTkRSQUlORUQgfCBERVNUUk9ZX1NUQVRVUyB8IFdSSVRFX0ZJTklTSElORyB8IFdSSVRFX0RPTkVcbmNvbnN0IFdSSVRFX1VQREFURV9TWU5DX1NUQVRVUyA9IFdSSVRFX1VQREFUSU5HIHwgT1BFTl9TVEFUVVMgfCBXUklURV9ORVhUX1RJQ0sgfCBXUklURV9QUklNQVJZXG5cbmNvbnN0IGFzeW5jSXRlcmF0b3IgPSBTeW1ib2wuYXN5bmNJdGVyYXRvciB8fCBTeW1ib2woJ2FzeW5jSXRlcmF0b3InKVxuXG5jbGFzcyBXcml0YWJsZVN0YXRlIHtcbiAgY29uc3RydWN0b3IgKHN0cmVhbSwgeyBoaWdoV2F0ZXJNYXJrID0gMTYzODQsIG1hcCA9IG51bGwsIG1hcFdyaXRhYmxlLCBieXRlTGVuZ3RoLCBieXRlTGVuZ3RoV3JpdGFibGUgfSA9IHt9KSB7XG4gICAgdGhpcy5zdHJlYW0gPSBzdHJlYW1cbiAgICB0aGlzLnF1ZXVlID0gbmV3IEZJRk8oKVxuICAgIHRoaXMuaGlnaFdhdGVyTWFyayA9IGhpZ2hXYXRlck1hcmtcbiAgICB0aGlzLmJ1ZmZlcmVkID0gMFxuICAgIHRoaXMuZXJyb3IgPSBudWxsXG4gICAgdGhpcy5waXBlbGluZSA9IG51bGxcbiAgICB0aGlzLmRyYWlucyA9IG51bGwgLy8gaWYgd2UgYWRkIG1vcmUgc2VsZG9tbHkgdXNlZCBoZWxwZXJzIHdlIG1pZ2h0IHRoZW0gaW50byBhIHN1Ym9iamVjdCBzbyBpdHMgYSBzaW5nbGUgcHRyXG4gICAgdGhpcy5ieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aFdyaXRhYmxlIHx8IGJ5dGVMZW5ndGggfHwgZGVmYXVsdEJ5dGVMZW5ndGhcbiAgICB0aGlzLm1hcCA9IG1hcFdyaXRhYmxlIHx8IG1hcFxuICAgIHRoaXMuYWZ0ZXJXcml0ZSA9IGFmdGVyV3JpdGUuYmluZCh0aGlzKVxuICAgIHRoaXMuYWZ0ZXJVcGRhdGVOZXh0VGljayA9IHVwZGF0ZVdyaXRlTlQuYmluZCh0aGlzKVxuICB9XG5cbiAgZ2V0IGVuZGVkICgpIHtcbiAgICByZXR1cm4gKHRoaXMuc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFdSSVRFX0RPTkUpICE9PSAwXG4gIH1cblxuICBwdXNoIChkYXRhKSB7XG4gICAgaWYgKHRoaXMubWFwICE9PSBudWxsKSBkYXRhID0gdGhpcy5tYXAoZGF0YSlcblxuICAgIHRoaXMuYnVmZmVyZWQgKz0gdGhpcy5ieXRlTGVuZ3RoKGRhdGEpXG4gICAgdGhpcy5xdWV1ZS5wdXNoKGRhdGEpXG5cbiAgICBpZiAodGhpcy5idWZmZXJlZCA8IHRoaXMuaGlnaFdhdGVyTWFyaykge1xuICAgICAgdGhpcy5zdHJlYW0uX2R1cGxleFN0YXRlIHw9IFdSSVRFX1FVRVVFRFxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICB0aGlzLnN0cmVhbS5fZHVwbGV4U3RhdGUgfD0gV1JJVEVfUVVFVUVEX0FORF9VTkRSQUlORURcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHNoaWZ0ICgpIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5xdWV1ZS5zaGlmdCgpXG5cbiAgICB0aGlzLmJ1ZmZlcmVkIC09IHRoaXMuYnl0ZUxlbmd0aChkYXRhKVxuICAgIGlmICh0aGlzLmJ1ZmZlcmVkID09PSAwKSB0aGlzLnN0cmVhbS5fZHVwbGV4U3RhdGUgJj0gV1JJVEVfTk9UX1FVRVVFRFxuXG4gICAgcmV0dXJuIGRhdGFcbiAgfVxuXG4gIGVuZCAoZGF0YSkge1xuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5zdHJlYW0ub25jZSgnZmluaXNoJywgZGF0YSlcbiAgICBlbHNlIGlmIChkYXRhICE9PSB1bmRlZmluZWQgJiYgZGF0YSAhPT0gbnVsbCkgdGhpcy5wdXNoKGRhdGEpXG4gICAgdGhpcy5zdHJlYW0uX2R1cGxleFN0YXRlID0gKHRoaXMuc3RyZWFtLl9kdXBsZXhTdGF0ZSB8IFdSSVRFX0ZJTklTSElORykgJiBXUklURV9OT05fUFJJTUFSWVxuICB9XG5cbiAgYXV0b0JhdGNoIChkYXRhLCBjYikge1xuICAgIGNvbnN0IGJ1ZmZlciA9IFtdXG4gICAgY29uc3Qgc3RyZWFtID0gdGhpcy5zdHJlYW1cblxuICAgIGJ1ZmZlci5wdXNoKGRhdGEpXG4gICAgd2hpbGUgKChzdHJlYW0uX2R1cGxleFN0YXRlICYgV1JJVEVfU1RBVFVTKSA9PT0gV1JJVEVfUVVFVUVEX0FORF9BQ1RJVkUpIHtcbiAgICAgIGJ1ZmZlci5wdXNoKHN0cmVhbS5fd3JpdGFibGVTdGF0ZS5zaGlmdCgpKVxuICAgIH1cblxuICAgIGlmICgoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIE9QRU5fU1RBVFVTKSAhPT0gMCkgcmV0dXJuIGNiKG51bGwpXG4gICAgc3RyZWFtLl93cml0ZXYoYnVmZmVyLCBjYilcbiAgfVxuXG4gIHVwZGF0ZSAoKSB7XG4gICAgY29uc3Qgc3RyZWFtID0gdGhpcy5zdHJlYW1cblxuICAgIHN0cmVhbS5fZHVwbGV4U3RhdGUgfD0gV1JJVEVfVVBEQVRJTkdcblxuICAgIGRvIHtcbiAgICAgIHdoaWxlICgoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFdSSVRFX1NUQVRVUykgPT09IFdSSVRFX1FVRVVFRCkge1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5zaGlmdCgpXG4gICAgICAgIHN0cmVhbS5fZHVwbGV4U3RhdGUgfD0gV1JJVEVfQUNUSVZFX0FORF9XUklUSU5HXG4gICAgICAgIHN0cmVhbS5fd3JpdGUoZGF0YSwgdGhpcy5hZnRlcldyaXRlKVxuICAgICAgfVxuXG4gICAgICBpZiAoKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBXUklURV9QUklNQVJZX0FORF9BQ1RJVkUpID09PSAwKSB0aGlzLnVwZGF0ZU5vblByaW1hcnkoKVxuICAgIH0gd2hpbGUgKHRoaXMuY29udGludWVVcGRhdGUoKSA9PT0gdHJ1ZSlcblxuICAgIHN0cmVhbS5fZHVwbGV4U3RhdGUgJj0gV1JJVEVfTk9UX1VQREFUSU5HXG4gIH1cblxuICB1cGRhdGVOb25QcmltYXJ5ICgpIHtcbiAgICBjb25zdCBzdHJlYW0gPSB0aGlzLnN0cmVhbVxuXG4gICAgaWYgKChzdHJlYW0uX2R1cGxleFN0YXRlICYgV1JJVEVfRklOSVNISU5HX1NUQVRVUykgPT09IFdSSVRFX0ZJTklTSElORykge1xuICAgICAgc3RyZWFtLl9kdXBsZXhTdGF0ZSA9IChzdHJlYW0uX2R1cGxleFN0YXRlIHwgV1JJVEVfQUNUSVZFKSAmIFdSSVRFX05PVF9GSU5JU0hJTkdcbiAgICAgIHN0cmVhbS5fZmluYWwoYWZ0ZXJGaW5hbC5iaW5kKHRoaXMpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKChzdHJlYW0uX2R1cGxleFN0YXRlICYgREVTVFJPWV9TVEFUVVMpID09PSBERVNUUk9ZSU5HKSB7XG4gICAgICBpZiAoKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBBQ1RJVkVfT1JfVElDS0lORykgPT09IDApIHtcbiAgICAgICAgc3RyZWFtLl9kdXBsZXhTdGF0ZSB8PSBBQ1RJVkVcbiAgICAgICAgc3RyZWFtLl9kZXN0cm95KGFmdGVyRGVzdHJveS5iaW5kKHRoaXMpKVxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKChzdHJlYW0uX2R1cGxleFN0YXRlICYgSVNfT1BFTklORykgPT09IE9QRU5JTkcpIHtcbiAgICAgIHN0cmVhbS5fZHVwbGV4U3RhdGUgPSAoc3RyZWFtLl9kdXBsZXhTdGF0ZSB8IEFDVElWRSkgJiBOT1RfT1BFTklOR1xuICAgICAgc3RyZWFtLl9vcGVuKGFmdGVyT3Blbi5iaW5kKHRoaXMpKVxuICAgIH1cbiAgfVxuXG4gIGNvbnRpbnVlVXBkYXRlICgpIHtcbiAgICBpZiAoKHRoaXMuc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFdSSVRFX05FWFRfVElDSykgPT09IDApIHJldHVybiBmYWxzZVxuICAgIHRoaXMuc3RyZWFtLl9kdXBsZXhTdGF0ZSAmPSBXUklURV9OT1RfTkVYVF9USUNLXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIHVwZGF0ZUNhbGxiYWNrICgpIHtcbiAgICBpZiAoKHRoaXMuc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFdSSVRFX1VQREFURV9TWU5DX1NUQVRVUykgPT09IFdSSVRFX1BSSU1BUlkpIHRoaXMudXBkYXRlKClcbiAgICBlbHNlIHRoaXMudXBkYXRlTmV4dFRpY2soKVxuICB9XG5cbiAgdXBkYXRlTmV4dFRpY2sgKCkge1xuICAgIGlmICgodGhpcy5zdHJlYW0uX2R1cGxleFN0YXRlICYgV1JJVEVfTkVYVF9USUNLKSAhPT0gMCkgcmV0dXJuXG4gICAgdGhpcy5zdHJlYW0uX2R1cGxleFN0YXRlIHw9IFdSSVRFX05FWFRfVElDS1xuICAgIGlmICgodGhpcy5zdHJlYW0uX2R1cGxleFN0YXRlICYgV1JJVEVfVVBEQVRJTkcpID09PSAwKSBxdWV1ZVRpY2sodGhpcy5hZnRlclVwZGF0ZU5leHRUaWNrKVxuICB9XG59XG5cbmNsYXNzIFJlYWRhYmxlU3RhdGUge1xuICBjb25zdHJ1Y3RvciAoc3RyZWFtLCB7IGhpZ2hXYXRlck1hcmsgPSAxNjM4NCwgbWFwID0gbnVsbCwgbWFwUmVhZGFibGUsIGJ5dGVMZW5ndGgsIGJ5dGVMZW5ndGhSZWFkYWJsZSB9ID0ge30pIHtcbiAgICB0aGlzLnN0cmVhbSA9IHN0cmVhbVxuICAgIHRoaXMucXVldWUgPSBuZXcgRklGTygpXG4gICAgdGhpcy5oaWdoV2F0ZXJNYXJrID0gaGlnaFdhdGVyTWFyayA9PT0gMCA/IDEgOiBoaWdoV2F0ZXJNYXJrXG4gICAgdGhpcy5idWZmZXJlZCA9IDBcbiAgICB0aGlzLnJlYWRBaGVhZCA9IGhpZ2hXYXRlck1hcmsgPiAwXG4gICAgdGhpcy5lcnJvciA9IG51bGxcbiAgICB0aGlzLnBpcGVsaW5lID0gbnVsbFxuICAgIHRoaXMuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGhSZWFkYWJsZSB8fCBieXRlTGVuZ3RoIHx8IGRlZmF1bHRCeXRlTGVuZ3RoXG4gICAgdGhpcy5tYXAgPSBtYXBSZWFkYWJsZSB8fCBtYXBcbiAgICB0aGlzLnBpcGVUbyA9IG51bGxcbiAgICB0aGlzLmFmdGVyUmVhZCA9IGFmdGVyUmVhZC5iaW5kKHRoaXMpXG4gICAgdGhpcy5hZnRlclVwZGF0ZU5leHRUaWNrID0gdXBkYXRlUmVhZE5ULmJpbmQodGhpcylcbiAgfVxuXG4gIGdldCBlbmRlZCAoKSB7XG4gICAgcmV0dXJuICh0aGlzLnN0cmVhbS5fZHVwbGV4U3RhdGUgJiBSRUFEX0RPTkUpICE9PSAwXG4gIH1cblxuICBwaXBlIChwaXBlVG8sIGNiKSB7XG4gICAgaWYgKHRoaXMucGlwZVRvICE9PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoJ0NhbiBvbmx5IHBpcGUgdG8gb25lIGRlc3RpbmF0aW9uJylcbiAgICBpZiAodHlwZW9mIGNiICE9PSAnZnVuY3Rpb24nKSBjYiA9IG51bGxcblxuICAgIHRoaXMuc3RyZWFtLl9kdXBsZXhTdGF0ZSB8PSBSRUFEX1BJUEVfRFJBSU5FRFxuICAgIHRoaXMucGlwZVRvID0gcGlwZVRvXG4gICAgdGhpcy5waXBlbGluZSA9IG5ldyBQaXBlbGluZSh0aGlzLnN0cmVhbSwgcGlwZVRvLCBjYilcblxuICAgIGlmIChjYikgdGhpcy5zdHJlYW0ub24oJ2Vycm9yJywgbm9vcCkgLy8gV2UgYWxyZWFkeSBlcnJvciBoYW5kbGUgdGhpcyBzbyBzdXByZXNzIGNyYXNoZXNcblxuICAgIGlmIChpc1N0cmVhbXgocGlwZVRvKSkge1xuICAgICAgcGlwZVRvLl93cml0YWJsZVN0YXRlLnBpcGVsaW5lID0gdGhpcy5waXBlbGluZVxuICAgICAgaWYgKGNiKSBwaXBlVG8ub24oJ2Vycm9yJywgbm9vcCkgLy8gV2UgYWxyZWFkeSBlcnJvciBoYW5kbGUgdGhpcyBzbyBzdXByZXNzIGNyYXNoZXNcbiAgICAgIHBpcGVUby5vbignZmluaXNoJywgdGhpcy5waXBlbGluZS5maW5pc2hlZC5iaW5kKHRoaXMucGlwZWxpbmUpKSAvLyBUT0RPOiBqdXN0IGNhbGwgZmluaXNoZWQgZnJvbSBwaXBlVG8gaXRzZWxmXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG9uZXJyb3IgPSB0aGlzLnBpcGVsaW5lLmRvbmUuYmluZCh0aGlzLnBpcGVsaW5lLCBwaXBlVG8pXG4gICAgICBjb25zdCBvbmNsb3NlID0gdGhpcy5waXBlbGluZS5kb25lLmJpbmQodGhpcy5waXBlbGluZSwgcGlwZVRvLCBudWxsKSAvLyBvbmNsb3NlIGhhcyBhIHdlaXJkIGJvb2wgYXJnXG4gICAgICBwaXBlVG8ub24oJ2Vycm9yJywgb25lcnJvcilcbiAgICAgIHBpcGVUby5vbignY2xvc2UnLCBvbmNsb3NlKVxuICAgICAgcGlwZVRvLm9uKCdmaW5pc2gnLCB0aGlzLnBpcGVsaW5lLmZpbmlzaGVkLmJpbmQodGhpcy5waXBlbGluZSkpXG4gICAgfVxuXG4gICAgcGlwZVRvLm9uKCdkcmFpbicsIGFmdGVyRHJhaW4uYmluZCh0aGlzKSlcbiAgICB0aGlzLnN0cmVhbS5lbWl0KCdwaXBpbmcnLCBwaXBlVG8pXG4gICAgcGlwZVRvLmVtaXQoJ3BpcGUnLCB0aGlzLnN0cmVhbSlcbiAgfVxuXG4gIHB1c2ggKGRhdGEpIHtcbiAgICBjb25zdCBzdHJlYW0gPSB0aGlzLnN0cmVhbVxuXG4gICAgaWYgKGRhdGEgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuaGlnaFdhdGVyTWFyayA9IDBcbiAgICAgIHN0cmVhbS5fZHVwbGV4U3RhdGUgPSAoc3RyZWFtLl9kdXBsZXhTdGF0ZSB8IFJFQURfRU5ESU5HKSAmIFJFQURfTk9OX1BSSU1BUllfQU5EX1BVU0hFRFxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgaWYgKHRoaXMubWFwICE9PSBudWxsKSB7XG4gICAgICBkYXRhID0gdGhpcy5tYXAoZGF0YSlcbiAgICAgIGlmIChkYXRhID09PSBudWxsKSB7XG4gICAgICAgIHN0cmVhbS5fZHVwbGV4U3RhdGUgJj0gUkVBRF9QVVNIRURcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVmZmVyZWQgPCB0aGlzLmhpZ2hXYXRlck1hcmtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmJ1ZmZlcmVkICs9IHRoaXMuYnl0ZUxlbmd0aChkYXRhKVxuICAgIHRoaXMucXVldWUucHVzaChkYXRhKVxuXG4gICAgc3RyZWFtLl9kdXBsZXhTdGF0ZSA9IChzdHJlYW0uX2R1cGxleFN0YXRlIHwgUkVBRF9RVUVVRUQpICYgUkVBRF9QVVNIRURcblxuICAgIHJldHVybiB0aGlzLmJ1ZmZlcmVkIDwgdGhpcy5oaWdoV2F0ZXJNYXJrXG4gIH1cblxuICBzaGlmdCAoKSB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMucXVldWUuc2hpZnQoKVxuXG4gICAgdGhpcy5idWZmZXJlZCAtPSB0aGlzLmJ5dGVMZW5ndGgoZGF0YSlcbiAgICBpZiAodGhpcy5idWZmZXJlZCA9PT0gMCkgdGhpcy5zdHJlYW0uX2R1cGxleFN0YXRlICY9IFJFQURfTk9UX1FVRVVFRFxuICAgIHJldHVybiBkYXRhXG4gIH1cblxuICB1bnNoaWZ0IChkYXRhKSB7XG4gICAgY29uc3QgcGVuZGluZyA9IFt0aGlzLm1hcCAhPT0gbnVsbCA/IHRoaXMubWFwKGRhdGEpIDogZGF0YV1cbiAgICB3aGlsZSAodGhpcy5idWZmZXJlZCA+IDApIHBlbmRpbmcucHVzaCh0aGlzLnNoaWZ0KCkpXG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBlbmRpbmcubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICBjb25zdCBkYXRhID0gcGVuZGluZ1tpXVxuICAgICAgdGhpcy5idWZmZXJlZCArPSB0aGlzLmJ5dGVMZW5ndGgoZGF0YSlcbiAgICAgIHRoaXMucXVldWUucHVzaChkYXRhKVxuICAgIH1cblxuICAgIHRoaXMucHVzaChwZW5kaW5nW3BlbmRpbmcubGVuZ3RoIC0gMV0pXG4gIH1cblxuICByZWFkICgpIHtcbiAgICBjb25zdCBzdHJlYW0gPSB0aGlzLnN0cmVhbVxuXG4gICAgaWYgKChzdHJlYW0uX2R1cGxleFN0YXRlICYgUkVBRF9TVEFUVVMpID09PSBSRUFEX1FVRVVFRCkge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuc2hpZnQoKVxuICAgICAgaWYgKHRoaXMucGlwZVRvICE9PSBudWxsICYmIHRoaXMucGlwZVRvLndyaXRlKGRhdGEpID09PSBmYWxzZSkgc3RyZWFtLl9kdXBsZXhTdGF0ZSAmPSBSRUFEX1BJUEVfTk9UX0RSQUlORURcbiAgICAgIGlmICgoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFJFQURfRU1JVF9EQVRBKSAhPT0gMCkgc3RyZWFtLmVtaXQoJ2RhdGEnLCBkYXRhKVxuICAgICAgcmV0dXJuIGRhdGFcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZWFkQWhlYWQgPT09IGZhbHNlKSB7XG4gICAgICBzdHJlYW0uX2R1cGxleFN0YXRlIHw9IFJFQURfUkVBRF9BSEVBRFxuICAgICAgdGhpcy51cGRhdGVOZXh0VGljaygpXG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGRyYWluICgpIHtcbiAgICBjb25zdCBzdHJlYW0gPSB0aGlzLnN0cmVhbVxuXG4gICAgd2hpbGUgKChzdHJlYW0uX2R1cGxleFN0YXRlICYgUkVBRF9TVEFUVVMpID09PSBSRUFEX1FVRVVFRCAmJiAoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFJFQURfRkxPV0lORykgIT09IDApIHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLnNoaWZ0KClcbiAgICAgIGlmICh0aGlzLnBpcGVUbyAhPT0gbnVsbCAmJiB0aGlzLnBpcGVUby53cml0ZShkYXRhKSA9PT0gZmFsc2UpIHN0cmVhbS5fZHVwbGV4U3RhdGUgJj0gUkVBRF9QSVBFX05PVF9EUkFJTkVEXG4gICAgICBpZiAoKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBSRUFEX0VNSVRfREFUQSkgIT09IDApIHN0cmVhbS5lbWl0KCdkYXRhJywgZGF0YSlcbiAgICB9XG4gIH1cblxuICB1cGRhdGUgKCkge1xuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuc3RyZWFtXG5cbiAgICBzdHJlYW0uX2R1cGxleFN0YXRlIHw9IFJFQURfVVBEQVRJTkdcblxuICAgIGRvIHtcbiAgICAgIHRoaXMuZHJhaW4oKVxuXG4gICAgICB3aGlsZSAodGhpcy5idWZmZXJlZCA8IHRoaXMuaGlnaFdhdGVyTWFyayAmJiAoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFNIT1VMRF9OT1RfUkVBRCkgPT09IFJFQURfUkVBRF9BSEVBRCkge1xuICAgICAgICBzdHJlYW0uX2R1cGxleFN0YXRlIHw9IFJFQURfQUNUSVZFX0FORF9ORUVEU19QVVNIXG4gICAgICAgIHN0cmVhbS5fcmVhZCh0aGlzLmFmdGVyUmVhZClcbiAgICAgICAgdGhpcy5kcmFpbigpXG4gICAgICB9XG5cbiAgICAgIGlmICgoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFJFQURfUkVBREFCTEVfU1RBVFVTKSA9PT0gUkVBRF9FTUlUX1JFQURBQkxFX0FORF9RVUVVRUQpIHtcbiAgICAgICAgc3RyZWFtLl9kdXBsZXhTdGF0ZSB8PSBSRUFEX0VNSVRURURfUkVBREFCTEVcbiAgICAgICAgc3RyZWFtLmVtaXQoJ3JlYWRhYmxlJylcbiAgICAgIH1cblxuICAgICAgaWYgKChzdHJlYW0uX2R1cGxleFN0YXRlICYgUkVBRF9QUklNQVJZX0FORF9BQ1RJVkUpID09PSAwKSB0aGlzLnVwZGF0ZU5vblByaW1hcnkoKVxuICAgIH0gd2hpbGUgKHRoaXMuY29udGludWVVcGRhdGUoKSA9PT0gdHJ1ZSlcblxuICAgIHN0cmVhbS5fZHVwbGV4U3RhdGUgJj0gUkVBRF9OT1RfVVBEQVRJTkdcbiAgfVxuXG4gIHVwZGF0ZU5vblByaW1hcnkgKCkge1xuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuc3RyZWFtXG5cbiAgICBpZiAoKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBSRUFEX0VORElOR19TVEFUVVMpID09PSBSRUFEX0VORElORykge1xuICAgICAgc3RyZWFtLl9kdXBsZXhTdGF0ZSA9IChzdHJlYW0uX2R1cGxleFN0YXRlIHwgUkVBRF9ET05FKSAmIFJFQURfTk9UX0VORElOR1xuICAgICAgc3RyZWFtLmVtaXQoJ2VuZCcpXG4gICAgICBpZiAoKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBBVVRPX0RFU1RST1kpID09PSBET05FKSBzdHJlYW0uX2R1cGxleFN0YXRlIHw9IERFU1RST1lJTkdcbiAgICAgIGlmICh0aGlzLnBpcGVUbyAhPT0gbnVsbCkgdGhpcy5waXBlVG8uZW5kKClcbiAgICB9XG5cbiAgICBpZiAoKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBERVNUUk9ZX1NUQVRVUykgPT09IERFU1RST1lJTkcpIHtcbiAgICAgIGlmICgoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIEFDVElWRV9PUl9USUNLSU5HKSA9PT0gMCkge1xuICAgICAgICBzdHJlYW0uX2R1cGxleFN0YXRlIHw9IEFDVElWRVxuICAgICAgICBzdHJlYW0uX2Rlc3Ryb3koYWZ0ZXJEZXN0cm95LmJpbmQodGhpcykpXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBJU19PUEVOSU5HKSA9PT0gT1BFTklORykge1xuICAgICAgc3RyZWFtLl9kdXBsZXhTdGF0ZSA9IChzdHJlYW0uX2R1cGxleFN0YXRlIHwgQUNUSVZFKSAmIE5PVF9PUEVOSU5HXG4gICAgICBzdHJlYW0uX29wZW4oYWZ0ZXJPcGVuLmJpbmQodGhpcykpXG4gICAgfVxuICB9XG5cbiAgY29udGludWVVcGRhdGUgKCkge1xuICAgIGlmICgodGhpcy5zdHJlYW0uX2R1cGxleFN0YXRlICYgUkVBRF9ORVhUX1RJQ0spID09PSAwKSByZXR1cm4gZmFsc2VcbiAgICB0aGlzLnN0cmVhbS5fZHVwbGV4U3RhdGUgJj0gUkVBRF9OT1RfTkVYVF9USUNLXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIHVwZGF0ZUNhbGxiYWNrICgpIHtcbiAgICBpZiAoKHRoaXMuc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFJFQURfVVBEQVRFX1NZTkNfU1RBVFVTKSA9PT0gUkVBRF9QUklNQVJZKSB0aGlzLnVwZGF0ZSgpXG4gICAgZWxzZSB0aGlzLnVwZGF0ZU5leHRUaWNrKClcbiAgfVxuXG4gIHVwZGF0ZU5leHRUaWNrICgpIHtcbiAgICBpZiAoKHRoaXMuc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFJFQURfTkVYVF9USUNLKSAhPT0gMCkgcmV0dXJuXG4gICAgdGhpcy5zdHJlYW0uX2R1cGxleFN0YXRlIHw9IFJFQURfTkVYVF9USUNLXG4gICAgaWYgKCh0aGlzLnN0cmVhbS5fZHVwbGV4U3RhdGUgJiBSRUFEX1VQREFUSU5HKSA9PT0gMCkgcXVldWVUaWNrKHRoaXMuYWZ0ZXJVcGRhdGVOZXh0VGljaylcbiAgfVxufVxuXG5jbGFzcyBUcmFuc2Zvcm1TdGF0ZSB7XG4gIGNvbnN0cnVjdG9yIChzdHJlYW0pIHtcbiAgICB0aGlzLmRhdGEgPSBudWxsXG4gICAgdGhpcy5hZnRlclRyYW5zZm9ybSA9IGFmdGVyVHJhbnNmb3JtLmJpbmQoc3RyZWFtKVxuICAgIHRoaXMuYWZ0ZXJGaW5hbCA9IG51bGxcbiAgfVxufVxuXG5jbGFzcyBQaXBlbGluZSB7XG4gIGNvbnN0cnVjdG9yIChzcmMsIGRzdCwgY2IpIHtcbiAgICB0aGlzLmZyb20gPSBzcmNcbiAgICB0aGlzLnRvID0gZHN0XG4gICAgdGhpcy5hZnRlclBpcGUgPSBjYlxuICAgIHRoaXMuZXJyb3IgPSBudWxsXG4gICAgdGhpcy5waXBlVG9GaW5pc2hlZCA9IGZhbHNlXG4gIH1cblxuICBmaW5pc2hlZCAoKSB7XG4gICAgdGhpcy5waXBlVG9GaW5pc2hlZCA9IHRydWVcbiAgfVxuXG4gIGRvbmUgKHN0cmVhbSwgZXJyKSB7XG4gICAgaWYgKGVycikgdGhpcy5lcnJvciA9IGVyclxuXG4gICAgaWYgKHN0cmVhbSA9PT0gdGhpcy50bykge1xuICAgICAgdGhpcy50byA9IG51bGxcblxuICAgICAgaWYgKHRoaXMuZnJvbSAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoKHRoaXMuZnJvbS5fZHVwbGV4U3RhdGUgJiBSRUFEX0RPTkUpID09PSAwIHx8ICF0aGlzLnBpcGVUb0ZpbmlzaGVkKSB7XG4gICAgICAgICAgdGhpcy5mcm9tLmRlc3Ryb3kodGhpcy5lcnJvciB8fCBuZXcgRXJyb3IoJ1dyaXRhYmxlIHN0cmVhbSBjbG9zZWQgcHJlbWF0dXJlbHknKSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3RyZWFtID09PSB0aGlzLmZyb20pIHtcbiAgICAgIHRoaXMuZnJvbSA9IG51bGxcblxuICAgICAgaWYgKHRoaXMudG8gIT09IG51bGwpIHtcbiAgICAgICAgaWYgKChzdHJlYW0uX2R1cGxleFN0YXRlICYgUkVBRF9ET05FKSA9PT0gMCkge1xuICAgICAgICAgIHRoaXMudG8uZGVzdHJveSh0aGlzLmVycm9yIHx8IG5ldyBFcnJvcignUmVhZGFibGUgc3RyZWFtIGNsb3NlZCBiZWZvcmUgZW5kaW5nJykpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYWZ0ZXJQaXBlICE9PSBudWxsKSB0aGlzLmFmdGVyUGlwZSh0aGlzLmVycm9yKVxuICAgIHRoaXMudG8gPSB0aGlzLmZyb20gPSB0aGlzLmFmdGVyUGlwZSA9IG51bGxcbiAgfVxufVxuXG5mdW5jdGlvbiBhZnRlckRyYWluICgpIHtcbiAgdGhpcy5zdHJlYW0uX2R1cGxleFN0YXRlIHw9IFJFQURfUElQRV9EUkFJTkVEXG4gIHRoaXMudXBkYXRlQ2FsbGJhY2soKVxufVxuXG5mdW5jdGlvbiBhZnRlckZpbmFsIChlcnIpIHtcbiAgY29uc3Qgc3RyZWFtID0gdGhpcy5zdHJlYW1cbiAgaWYgKGVycikgc3RyZWFtLmRlc3Ryb3koZXJyKVxuICBpZiAoKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBERVNUUk9ZX1NUQVRVUykgPT09IDApIHtcbiAgICBzdHJlYW0uX2R1cGxleFN0YXRlIHw9IFdSSVRFX0RPTkVcbiAgICBzdHJlYW0uZW1pdCgnZmluaXNoJylcbiAgfVxuICBpZiAoKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBBVVRPX0RFU1RST1kpID09PSBET05FKSB7XG4gICAgc3RyZWFtLl9kdXBsZXhTdGF0ZSB8PSBERVNUUk9ZSU5HXG4gIH1cblxuICBzdHJlYW0uX2R1cGxleFN0YXRlICY9IFdSSVRFX05PVF9BQ1RJVkVcblxuICAvLyBubyBuZWVkIHRvIHdhaXQgdGhlIGV4dHJhIHRpY2sgaGVyZSwgc28gd2Ugc2hvcnQgY2lyY3VpdCB0aGF0XG4gIGlmICgoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFdSSVRFX1VQREFUSU5HKSA9PT0gMCkgdGhpcy51cGRhdGUoKVxuICBlbHNlIHRoaXMudXBkYXRlTmV4dFRpY2soKVxufVxuXG5mdW5jdGlvbiBhZnRlckRlc3Ryb3kgKGVycikge1xuICBjb25zdCBzdHJlYW0gPSB0aGlzLnN0cmVhbVxuXG4gIGlmICghZXJyICYmIHRoaXMuZXJyb3IgIT09IFNUUkVBTV9ERVNUUk9ZRUQpIGVyciA9IHRoaXMuZXJyb3JcbiAgaWYgKGVycikgc3RyZWFtLmVtaXQoJ2Vycm9yJywgZXJyKVxuICBzdHJlYW0uX2R1cGxleFN0YXRlIHw9IERFU1RST1lFRFxuICBzdHJlYW0uZW1pdCgnY2xvc2UnKVxuXG4gIGNvbnN0IHJzID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlXG4gIGNvbnN0IHdzID0gc3RyZWFtLl93cml0YWJsZVN0YXRlXG5cbiAgaWYgKHJzICE9PSBudWxsICYmIHJzLnBpcGVsaW5lICE9PSBudWxsKSBycy5waXBlbGluZS5kb25lKHN0cmVhbSwgZXJyKVxuXG4gIGlmICh3cyAhPT0gbnVsbCkge1xuICAgIHdoaWxlICh3cy5kcmFpbnMgIT09IG51bGwgJiYgd3MuZHJhaW5zLmxlbmd0aCA+IDApIHdzLmRyYWlucy5zaGlmdCgpLnJlc29sdmUoZmFsc2UpXG4gICAgaWYgKHdzLnBpcGVsaW5lICE9PSBudWxsKSB3cy5waXBlbGluZS5kb25lKHN0cmVhbSwgZXJyKVxuICB9XG59XG5cbmZ1bmN0aW9uIGFmdGVyV3JpdGUgKGVycikge1xuICBjb25zdCBzdHJlYW0gPSB0aGlzLnN0cmVhbVxuXG4gIGlmIChlcnIpIHN0cmVhbS5kZXN0cm95KGVycilcbiAgc3RyZWFtLl9kdXBsZXhTdGF0ZSAmPSBXUklURV9OT1RfQUNUSVZFXG5cbiAgaWYgKHRoaXMuZHJhaW5zICE9PSBudWxsKSB0aWNrRHJhaW5zKHRoaXMuZHJhaW5zKVxuXG4gIGlmICgoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFdSSVRFX0RSQUlOX1NUQVRVUykgPT09IFdSSVRFX1VORFJBSU5FRCkge1xuICAgIHN0cmVhbS5fZHVwbGV4U3RhdGUgJj0gV1JJVEVfRFJBSU5FRFxuICAgIGlmICgoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFdSSVRFX0VNSVRfRFJBSU4pID09PSBXUklURV9FTUlUX0RSQUlOKSB7XG4gICAgICBzdHJlYW0uZW1pdCgnZHJhaW4nKVxuICAgIH1cbiAgfVxuXG4gIHRoaXMudXBkYXRlQ2FsbGJhY2soKVxufVxuXG5mdW5jdGlvbiBhZnRlclJlYWQgKGVycikge1xuICBpZiAoZXJyKSB0aGlzLnN0cmVhbS5kZXN0cm95KGVycilcbiAgdGhpcy5zdHJlYW0uX2R1cGxleFN0YXRlICY9IFJFQURfTk9UX0FDVElWRVxuICBpZiAodGhpcy5yZWFkQWhlYWQgPT09IGZhbHNlICYmICh0aGlzLnN0cmVhbS5fZHVwbGV4U3RhdGUgJiBSRUFEX1JFU1VNRUQpID09PSAwKSB0aGlzLnN0cmVhbS5fZHVwbGV4U3RhdGUgJj0gUkVBRF9OT19SRUFEX0FIRUFEXG4gIHRoaXMudXBkYXRlQ2FsbGJhY2soKVxufVxuXG5mdW5jdGlvbiB1cGRhdGVSZWFkTlQgKCkge1xuICBpZiAoKHRoaXMuc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFJFQURfVVBEQVRJTkcpID09PSAwKSB7XG4gICAgdGhpcy5zdHJlYW0uX2R1cGxleFN0YXRlICY9IFJFQURfTk9UX05FWFRfVElDS1xuICAgIHRoaXMudXBkYXRlKClcbiAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVXcml0ZU5UICgpIHtcbiAgaWYgKCh0aGlzLnN0cmVhbS5fZHVwbGV4U3RhdGUgJiBXUklURV9VUERBVElORykgPT09IDApIHtcbiAgICB0aGlzLnN0cmVhbS5fZHVwbGV4U3RhdGUgJj0gV1JJVEVfTk9UX05FWFRfVElDS1xuICAgIHRoaXMudXBkYXRlKClcbiAgfVxufVxuXG5mdW5jdGlvbiB0aWNrRHJhaW5zIChkcmFpbnMpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkcmFpbnMubGVuZ3RoOyBpKyspIHtcbiAgICAvLyBkcmFpbnMud3JpdGVzIGFyZSBtb25vdG9uaWMsIHNvIGlmIG9uZSBpcyAwIGl0cyBhbHdheXMgdGhlIGZpcnN0IG9uZVxuICAgIGlmICgtLWRyYWluc1tpXS53cml0ZXMgPT09IDApIHtcbiAgICAgIGRyYWlucy5zaGlmdCgpLnJlc29sdmUodHJ1ZSlcbiAgICAgIGktLVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhZnRlck9wZW4gKGVycikge1xuICBjb25zdCBzdHJlYW0gPSB0aGlzLnN0cmVhbVxuXG4gIGlmIChlcnIpIHN0cmVhbS5kZXN0cm95KGVycilcblxuICBpZiAoKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBERVNUUk9ZSU5HKSA9PT0gMCkge1xuICAgIGlmICgoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFJFQURfUFJJTUFSWV9TVEFUVVMpID09PSAwKSBzdHJlYW0uX2R1cGxleFN0YXRlIHw9IFJFQURfUFJJTUFSWVxuICAgIGlmICgoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFdSSVRFX1BSSU1BUllfU1RBVFVTKSA9PT0gMCkgc3RyZWFtLl9kdXBsZXhTdGF0ZSB8PSBXUklURV9QUklNQVJZXG4gICAgc3RyZWFtLmVtaXQoJ29wZW4nKVxuICB9XG5cbiAgc3RyZWFtLl9kdXBsZXhTdGF0ZSAmPSBOT1RfQUNUSVZFXG5cbiAgaWYgKHN0cmVhbS5fd3JpdGFibGVTdGF0ZSAhPT0gbnVsbCkge1xuICAgIHN0cmVhbS5fd3JpdGFibGVTdGF0ZS51cGRhdGVDYWxsYmFjaygpXG4gIH1cblxuICBpZiAoc3RyZWFtLl9yZWFkYWJsZVN0YXRlICE9PSBudWxsKSB7XG4gICAgc3RyZWFtLl9yZWFkYWJsZVN0YXRlLnVwZGF0ZUNhbGxiYWNrKClcbiAgfVxufVxuXG5mdW5jdGlvbiBhZnRlclRyYW5zZm9ybSAoZXJyLCBkYXRhKSB7XG4gIGlmIChkYXRhICE9PSB1bmRlZmluZWQgJiYgZGF0YSAhPT0gbnVsbCkgdGhpcy5wdXNoKGRhdGEpXG4gIHRoaXMuX3dyaXRhYmxlU3RhdGUuYWZ0ZXJXcml0ZShlcnIpXG59XG5cbmZ1bmN0aW9uIG5ld0xpc3RlbmVyIChuYW1lKSB7XG4gIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlICE9PSBudWxsKSB7XG4gICAgaWYgKG5hbWUgPT09ICdkYXRhJykge1xuICAgICAgdGhpcy5fZHVwbGV4U3RhdGUgfD0gKFJFQURfRU1JVF9EQVRBIHwgUkVBRF9SRVNVTUVEX1JFQURfQUhFQUQpXG4gICAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLnVwZGF0ZU5leHRUaWNrKClcbiAgICB9XG4gICAgaWYgKG5hbWUgPT09ICdyZWFkYWJsZScpIHtcbiAgICAgIHRoaXMuX2R1cGxleFN0YXRlIHw9IFJFQURfRU1JVF9SRUFEQUJMRVxuICAgICAgdGhpcy5fcmVhZGFibGVTdGF0ZS51cGRhdGVOZXh0VGljaygpXG4gICAgfVxuICB9XG5cbiAgaWYgKHRoaXMuX3dyaXRhYmxlU3RhdGUgIT09IG51bGwpIHtcbiAgICBpZiAobmFtZSA9PT0gJ2RyYWluJykge1xuICAgICAgdGhpcy5fZHVwbGV4U3RhdGUgfD0gV1JJVEVfRU1JVF9EUkFJTlxuICAgICAgdGhpcy5fd3JpdGFibGVTdGF0ZS51cGRhdGVOZXh0VGljaygpXG4gICAgfVxuICB9XG59XG5cbmNsYXNzIFN0cmVhbSBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gIGNvbnN0cnVjdG9yIChvcHRzKSB7XG4gICAgc3VwZXIoKVxuXG4gICAgdGhpcy5fZHVwbGV4U3RhdGUgPSAwXG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZSA9IG51bGxcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlID0gbnVsbFxuXG4gICAgaWYgKG9wdHMpIHtcbiAgICAgIGlmIChvcHRzLm9wZW4pIHRoaXMuX29wZW4gPSBvcHRzLm9wZW5cbiAgICAgIGlmIChvcHRzLmRlc3Ryb3kpIHRoaXMuX2Rlc3Ryb3kgPSBvcHRzLmRlc3Ryb3lcbiAgICAgIGlmIChvcHRzLnByZWRlc3Ryb3kpIHRoaXMuX3ByZWRlc3Ryb3kgPSBvcHRzLnByZWRlc3Ryb3lcbiAgICAgIGlmIChvcHRzLnNpZ25hbCkge1xuICAgICAgICBvcHRzLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0LmJpbmQodGhpcykpXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5vbignbmV3TGlzdGVuZXInLCBuZXdMaXN0ZW5lcilcbiAgfVxuXG4gIF9vcGVuIChjYikge1xuICAgIGNiKG51bGwpXG4gIH1cblxuICBfZGVzdHJveSAoY2IpIHtcbiAgICBjYihudWxsKVxuICB9XG5cbiAgX3ByZWRlc3Ryb3kgKCkge1xuICAgIC8vIGRvZXMgbm90aGluZ1xuICB9XG5cbiAgZ2V0IHJlYWRhYmxlICgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZSAhPT0gbnVsbCA/IHRydWUgOiB1bmRlZmluZWRcbiAgfVxuXG4gIGdldCB3cml0YWJsZSAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUgIT09IG51bGwgPyB0cnVlIDogdW5kZWZpbmVkXG4gIH1cblxuICBnZXQgZGVzdHJveWVkICgpIHtcbiAgICByZXR1cm4gKHRoaXMuX2R1cGxleFN0YXRlICYgREVTVFJPWUVEKSAhPT0gMFxuICB9XG5cbiAgZ2V0IGRlc3Ryb3lpbmcgKCkge1xuICAgIHJldHVybiAodGhpcy5fZHVwbGV4U3RhdGUgJiBERVNUUk9ZX1NUQVRVUykgIT09IDBcbiAgfVxuXG4gIGRlc3Ryb3kgKGVycikge1xuICAgIGlmICgodGhpcy5fZHVwbGV4U3RhdGUgJiBERVNUUk9ZX1NUQVRVUykgPT09IDApIHtcbiAgICAgIGlmICghZXJyKSBlcnIgPSBTVFJFQU1fREVTVFJPWUVEXG4gICAgICB0aGlzLl9kdXBsZXhTdGF0ZSA9ICh0aGlzLl9kdXBsZXhTdGF0ZSB8IERFU1RST1lJTkcpICYgTk9OX1BSSU1BUllcblxuICAgICAgaWYgKHRoaXMuX3JlYWRhYmxlU3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrID0gMFxuICAgICAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmVycm9yID0gZXJyXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fd3JpdGFibGVTdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcmsgPSAwXG4gICAgICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3IgPSBlcnJcbiAgICAgIH1cblxuICAgICAgdGhpcy5fZHVwbGV4U3RhdGUgfD0gUFJFREVTVFJPWUlOR1xuICAgICAgdGhpcy5fcHJlZGVzdHJveSgpXG4gICAgICB0aGlzLl9kdXBsZXhTdGF0ZSAmPSBOT1RfUFJFREVTVFJPWUlOR1xuXG4gICAgICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZSAhPT0gbnVsbCkgdGhpcy5fcmVhZGFibGVTdGF0ZS51cGRhdGVOZXh0VGljaygpXG4gICAgICBpZiAodGhpcy5fd3JpdGFibGVTdGF0ZSAhPT0gbnVsbCkgdGhpcy5fd3JpdGFibGVTdGF0ZS51cGRhdGVOZXh0VGljaygpXG4gICAgfVxuICB9XG59XG5cbmNsYXNzIFJlYWRhYmxlIGV4dGVuZHMgU3RyZWFtIHtcbiAgY29uc3RydWN0b3IgKG9wdHMpIHtcbiAgICBzdXBlcihvcHRzKVxuXG4gICAgdGhpcy5fZHVwbGV4U3RhdGUgfD0gT1BFTklORyB8IFdSSVRFX0RPTkUgfCBSRUFEX1JFQURfQUhFQURcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlID0gbmV3IFJlYWRhYmxlU3RhdGUodGhpcywgb3B0cylcblxuICAgIGlmIChvcHRzKSB7XG4gICAgICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZS5yZWFkQWhlYWQgPT09IGZhbHNlKSB0aGlzLl9kdXBsZXhTdGF0ZSAmPSBSRUFEX05PX1JFQURfQUhFQURcbiAgICAgIGlmIChvcHRzLnJlYWQpIHRoaXMuX3JlYWQgPSBvcHRzLnJlYWRcbiAgICAgIGlmIChvcHRzLmVhZ2VyT3BlbikgdGhpcy5fcmVhZGFibGVTdGF0ZS51cGRhdGVOZXh0VGljaygpXG4gICAgICBpZiAob3B0cy5lbmNvZGluZykgdGhpcy5zZXRFbmNvZGluZyhvcHRzLmVuY29kaW5nKVxuICAgIH1cbiAgfVxuXG4gIHNldEVuY29kaW5nIChlbmNvZGluZykge1xuICAgIGNvbnN0IGRlYyA9IG5ldyBUZXh0RGVjb2RlcihlbmNvZGluZylcbiAgICBjb25zdCBtYXAgPSB0aGlzLl9yZWFkYWJsZVN0YXRlLm1hcCB8fCBlY2hvXG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5tYXAgPSBtYXBPclNraXBcbiAgICByZXR1cm4gdGhpc1xuXG4gICAgZnVuY3Rpb24gbWFwT3JTa2lwIChkYXRhKSB7XG4gICAgICBjb25zdCBuZXh0ID0gZGVjLnB1c2goZGF0YSlcbiAgICAgIHJldHVybiBuZXh0ID09PSAnJyAmJiAoZGF0YS5ieXRlTGVuZ3RoICE9PSAwIHx8IGRlYy5yZW1haW5pbmcgPiAwKSA/IG51bGwgOiBtYXAobmV4dClcbiAgICB9XG4gIH1cblxuICBfcmVhZCAoY2IpIHtcbiAgICBjYihudWxsKVxuICB9XG5cbiAgcGlwZSAoZGVzdCwgY2IpIHtcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLnVwZGF0ZU5leHRUaWNrKClcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLnBpcGUoZGVzdCwgY2IpXG4gICAgcmV0dXJuIGRlc3RcbiAgfVxuXG4gIHJlYWQgKCkge1xuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUudXBkYXRlTmV4dFRpY2soKVxuICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLnJlYWQoKVxuICB9XG5cbiAgcHVzaCAoZGF0YSkge1xuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUudXBkYXRlTmV4dFRpY2soKVxuICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLnB1c2goZGF0YSlcbiAgfVxuXG4gIHVuc2hpZnQgKGRhdGEpIHtcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLnVwZGF0ZU5leHRUaWNrKClcbiAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS51bnNoaWZ0KGRhdGEpXG4gIH1cblxuICByZXN1bWUgKCkge1xuICAgIHRoaXMuX2R1cGxleFN0YXRlIHw9IFJFQURfUkVTVU1FRF9SRUFEX0FIRUFEXG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS51cGRhdGVOZXh0VGljaygpXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIHBhdXNlICgpIHtcbiAgICB0aGlzLl9kdXBsZXhTdGF0ZSAmPSAodGhpcy5fcmVhZGFibGVTdGF0ZS5yZWFkQWhlYWQgPT09IGZhbHNlID8gUkVBRF9QQVVTRURfTk9fUkVBRF9BSEVBRCA6IFJFQURfUEFVU0VEKVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBzdGF0aWMgX2Zyb21Bc3luY0l0ZXJhdG9yIChpdGUsIG9wdHMpIHtcbiAgICBsZXQgZGVzdHJveVxuXG4gICAgY29uc3QgcnMgPSBuZXcgUmVhZGFibGUoe1xuICAgICAgLi4ub3B0cyxcbiAgICAgIHJlYWQgKGNiKSB7XG4gICAgICAgIGl0ZS5uZXh0KCkudGhlbihwdXNoKS50aGVuKGNiLmJpbmQobnVsbCwgbnVsbCkpLmNhdGNoKGNiKVxuICAgICAgfSxcbiAgICAgIHByZWRlc3Ryb3kgKCkge1xuICAgICAgICBkZXN0cm95ID0gaXRlLnJldHVybigpXG4gICAgICB9LFxuICAgICAgZGVzdHJveSAoY2IpIHtcbiAgICAgICAgaWYgKCFkZXN0cm95KSByZXR1cm4gY2IobnVsbClcbiAgICAgICAgZGVzdHJveS50aGVuKGNiLmJpbmQobnVsbCwgbnVsbCkpLmNhdGNoKGNiKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICByZXR1cm4gcnNcblxuICAgIGZ1bmN0aW9uIHB1c2ggKGRhdGEpIHtcbiAgICAgIGlmIChkYXRhLmRvbmUpIHJzLnB1c2gobnVsbClcbiAgICAgIGVsc2UgcnMucHVzaChkYXRhLnZhbHVlKVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBmcm9tIChkYXRhLCBvcHRzKSB7XG4gICAgaWYgKGlzUmVhZFN0cmVhbXgoZGF0YSkpIHJldHVybiBkYXRhXG4gICAgaWYgKGRhdGFbYXN5bmNJdGVyYXRvcl0pIHJldHVybiB0aGlzLl9mcm9tQXN5bmNJdGVyYXRvcihkYXRhW2FzeW5jSXRlcmF0b3JdKCksIG9wdHMpXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGRhdGEpKSBkYXRhID0gZGF0YSA9PT0gdW5kZWZpbmVkID8gW10gOiBbZGF0YV1cblxuICAgIGxldCBpID0gMFxuICAgIHJldHVybiBuZXcgUmVhZGFibGUoe1xuICAgICAgLi4ub3B0cyxcbiAgICAgIHJlYWQgKGNiKSB7XG4gICAgICAgIHRoaXMucHVzaChpID09PSBkYXRhLmxlbmd0aCA/IG51bGwgOiBkYXRhW2krK10pXG4gICAgICAgIGNiKG51bGwpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHN0YXRpYyBpc0JhY2twcmVzc3VyZWQgKHJzKSB7XG4gICAgcmV0dXJuIChycy5fZHVwbGV4U3RhdGUgJiBSRUFEX0JBQ0tQUkVTU1VSRV9TVEFUVVMpICE9PSAwIHx8IHJzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlcmVkID49IHJzLl9yZWFkYWJsZVN0YXRlLmhpZ2hXYXRlck1hcmtcbiAgfVxuXG4gIHN0YXRpYyBpc1BhdXNlZCAocnMpIHtcbiAgICByZXR1cm4gKHJzLl9kdXBsZXhTdGF0ZSAmIFJFQURfUkVTVU1FRCkgPT09IDBcbiAgfVxuXG4gIFthc3luY0l0ZXJhdG9yXSAoKSB7XG4gICAgY29uc3Qgc3RyZWFtID0gdGhpc1xuXG4gICAgbGV0IGVycm9yID0gbnVsbFxuICAgIGxldCBwcm9taXNlUmVzb2x2ZSA9IG51bGxcbiAgICBsZXQgcHJvbWlzZVJlamVjdCA9IG51bGxcblxuICAgIHRoaXMub24oJ2Vycm9yJywgKGVycikgPT4geyBlcnJvciA9IGVyciB9KVxuICAgIHRoaXMub24oJ3JlYWRhYmxlJywgb25yZWFkYWJsZSlcbiAgICB0aGlzLm9uKCdjbG9zZScsIG9uY2xvc2UpXG5cbiAgICByZXR1cm4ge1xuICAgICAgW2FzeW5jSXRlcmF0b3JdICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNcbiAgICAgIH0sXG4gICAgICBuZXh0ICgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICBwcm9taXNlUmVzb2x2ZSA9IHJlc29sdmVcbiAgICAgICAgICBwcm9taXNlUmVqZWN0ID0gcmVqZWN0XG4gICAgICAgICAgY29uc3QgZGF0YSA9IHN0cmVhbS5yZWFkKClcbiAgICAgICAgICBpZiAoZGF0YSAhPT0gbnVsbCkgb25kYXRhKGRhdGEpXG4gICAgICAgICAgZWxzZSBpZiAoKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBERVNUUk9ZRUQpICE9PSAwKSBvbmRhdGEobnVsbClcbiAgICAgICAgfSlcbiAgICAgIH0sXG4gICAgICByZXR1cm4gKCkge1xuICAgICAgICByZXR1cm4gZGVzdHJveShudWxsKVxuICAgICAgfSxcbiAgICAgIHRocm93IChlcnIpIHtcbiAgICAgICAgcmV0dXJuIGRlc3Ryb3koZXJyKVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9ucmVhZGFibGUgKCkge1xuICAgICAgaWYgKHByb21pc2VSZXNvbHZlICE9PSBudWxsKSBvbmRhdGEoc3RyZWFtLnJlYWQoKSlcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvbmNsb3NlICgpIHtcbiAgICAgIGlmIChwcm9taXNlUmVzb2x2ZSAhPT0gbnVsbCkgb25kYXRhKG51bGwpXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25kYXRhIChkYXRhKSB7XG4gICAgICBpZiAocHJvbWlzZVJlamVjdCA9PT0gbnVsbCkgcmV0dXJuXG4gICAgICBpZiAoZXJyb3IpIHByb21pc2VSZWplY3QoZXJyb3IpXG4gICAgICBlbHNlIGlmIChkYXRhID09PSBudWxsICYmIChzdHJlYW0uX2R1cGxleFN0YXRlICYgUkVBRF9ET05FKSA9PT0gMCkgcHJvbWlzZVJlamVjdChTVFJFQU1fREVTVFJPWUVEKVxuICAgICAgZWxzZSBwcm9taXNlUmVzb2x2ZSh7IHZhbHVlOiBkYXRhLCBkb25lOiBkYXRhID09PSBudWxsIH0pXG4gICAgICBwcm9taXNlUmVqZWN0ID0gcHJvbWlzZVJlc29sdmUgPSBudWxsXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVzdHJveSAoZXJyKSB7XG4gICAgICBzdHJlYW0uZGVzdHJveShlcnIpXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBpZiAoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIERFU1RST1lFRCkgcmV0dXJuIHJlc29sdmUoeyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH0pXG4gICAgICAgIHN0cmVhbS5vbmNlKCdjbG9zZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoZXJyKSByZWplY3QoZXJyKVxuICAgICAgICAgIGVsc2UgcmVzb2x2ZSh7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfSlcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfVxuICB9XG59XG5cbmNsYXNzIFdyaXRhYmxlIGV4dGVuZHMgU3RyZWFtIHtcbiAgY29uc3RydWN0b3IgKG9wdHMpIHtcbiAgICBzdXBlcihvcHRzKVxuXG4gICAgdGhpcy5fZHVwbGV4U3RhdGUgfD0gT1BFTklORyB8IFJFQURfRE9ORVxuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUgPSBuZXcgV3JpdGFibGVTdGF0ZSh0aGlzLCBvcHRzKVxuXG4gICAgaWYgKG9wdHMpIHtcbiAgICAgIGlmIChvcHRzLndyaXRldikgdGhpcy5fd3JpdGV2ID0gb3B0cy53cml0ZXZcbiAgICAgIGlmIChvcHRzLndyaXRlKSB0aGlzLl93cml0ZSA9IG9wdHMud3JpdGVcbiAgICAgIGlmIChvcHRzLmZpbmFsKSB0aGlzLl9maW5hbCA9IG9wdHMuZmluYWxcbiAgICAgIGlmIChvcHRzLmVhZ2VyT3BlbikgdGhpcy5fd3JpdGFibGVTdGF0ZS51cGRhdGVOZXh0VGljaygpXG4gICAgfVxuICB9XG5cbiAgY29yayAoKSB7XG4gICAgdGhpcy5fZHVwbGV4U3RhdGUgfD0gV1JJVEVfQ09SS0VEXG4gIH1cblxuICB1bmNvcmsgKCkge1xuICAgIHRoaXMuX2R1cGxleFN0YXRlICY9IFdSSVRFX05PVF9DT1JLRURcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLnVwZGF0ZU5leHRUaWNrKClcbiAgfVxuXG4gIF93cml0ZXYgKGJhdGNoLCBjYikge1xuICAgIGNiKG51bGwpXG4gIH1cblxuICBfd3JpdGUgKGRhdGEsIGNiKSB7XG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5hdXRvQmF0Y2goZGF0YSwgY2IpXG4gIH1cblxuICBfZmluYWwgKGNiKSB7XG4gICAgY2IobnVsbClcbiAgfVxuXG4gIHN0YXRpYyBpc0JhY2twcmVzc3VyZWQgKHdzKSB7XG4gICAgcmV0dXJuICh3cy5fZHVwbGV4U3RhdGUgJiBXUklURV9CQUNLUFJFU1NVUkVfU1RBVFVTKSAhPT0gMFxuICB9XG5cbiAgc3RhdGljIGRyYWluZWQgKHdzKSB7XG4gICAgaWYgKHdzLmRlc3Ryb3llZCkgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSlcbiAgICBjb25zdCBzdGF0ZSA9IHdzLl93cml0YWJsZVN0YXRlXG4gICAgY29uc3QgcGVuZGluZyA9IChpc1dyaXRldih3cykgPyBNYXRoLm1pbigxLCBzdGF0ZS5xdWV1ZS5sZW5ndGgpIDogc3RhdGUucXVldWUubGVuZ3RoKVxuICAgIGNvbnN0IHdyaXRlcyA9IHBlbmRpbmcgKyAoKHdzLl9kdXBsZXhTdGF0ZSAmIFdSSVRFX1dSSVRJTkcpID8gMSA6IDApXG4gICAgaWYgKHdyaXRlcyA9PT0gMCkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKVxuICAgIGlmIChzdGF0ZS5kcmFpbnMgPT09IG51bGwpIHN0YXRlLmRyYWlucyA9IFtdXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBzdGF0ZS5kcmFpbnMucHVzaCh7IHdyaXRlcywgcmVzb2x2ZSB9KVxuICAgIH0pXG4gIH1cblxuICB3cml0ZSAoZGF0YSkge1xuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUudXBkYXRlTmV4dFRpY2soKVxuICAgIHJldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLnB1c2goZGF0YSlcbiAgfVxuXG4gIGVuZCAoZGF0YSkge1xuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUudXBkYXRlTmV4dFRpY2soKVxuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kKGRhdGEpXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxufVxuXG5jbGFzcyBEdXBsZXggZXh0ZW5kcyBSZWFkYWJsZSB7IC8vIGFuZCBXcml0YWJsZVxuICBjb25zdHJ1Y3RvciAob3B0cykge1xuICAgIHN1cGVyKG9wdHMpXG5cbiAgICB0aGlzLl9kdXBsZXhTdGF0ZSA9IE9QRU5JTkcgfCAodGhpcy5fZHVwbGV4U3RhdGUgJiBSRUFEX1JFQURfQUhFQUQpXG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZSA9IG5ldyBXcml0YWJsZVN0YXRlKHRoaXMsIG9wdHMpXG5cbiAgICBpZiAob3B0cykge1xuICAgICAgaWYgKG9wdHMud3JpdGV2KSB0aGlzLl93cml0ZXYgPSBvcHRzLndyaXRldlxuICAgICAgaWYgKG9wdHMud3JpdGUpIHRoaXMuX3dyaXRlID0gb3B0cy53cml0ZVxuICAgICAgaWYgKG9wdHMuZmluYWwpIHRoaXMuX2ZpbmFsID0gb3B0cy5maW5hbFxuICAgIH1cbiAgfVxuXG4gIGNvcmsgKCkge1xuICAgIHRoaXMuX2R1cGxleFN0YXRlIHw9IFdSSVRFX0NPUktFRFxuICB9XG5cbiAgdW5jb3JrICgpIHtcbiAgICB0aGlzLl9kdXBsZXhTdGF0ZSAmPSBXUklURV9OT1RfQ09SS0VEXG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS51cGRhdGVOZXh0VGljaygpXG4gIH1cblxuICBfd3JpdGV2IChiYXRjaCwgY2IpIHtcbiAgICBjYihudWxsKVxuICB9XG5cbiAgX3dyaXRlIChkYXRhLCBjYikge1xuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuYXV0b0JhdGNoKGRhdGEsIGNiKVxuICB9XG5cbiAgX2ZpbmFsIChjYikge1xuICAgIGNiKG51bGwpXG4gIH1cblxuICB3cml0ZSAoZGF0YSkge1xuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUudXBkYXRlTmV4dFRpY2soKVxuICAgIHJldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLnB1c2goZGF0YSlcbiAgfVxuXG4gIGVuZCAoZGF0YSkge1xuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUudXBkYXRlTmV4dFRpY2soKVxuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kKGRhdGEpXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxufVxuXG5jbGFzcyBUcmFuc2Zvcm0gZXh0ZW5kcyBEdXBsZXgge1xuICBjb25zdHJ1Y3RvciAob3B0cykge1xuICAgIHN1cGVyKG9wdHMpXG4gICAgdGhpcy5fdHJhbnNmb3JtU3RhdGUgPSBuZXcgVHJhbnNmb3JtU3RhdGUodGhpcylcblxuICAgIGlmIChvcHRzKSB7XG4gICAgICBpZiAob3B0cy50cmFuc2Zvcm0pIHRoaXMuX3RyYW5zZm9ybSA9IG9wdHMudHJhbnNmb3JtXG4gICAgICBpZiAob3B0cy5mbHVzaCkgdGhpcy5fZmx1c2ggPSBvcHRzLmZsdXNoXG4gICAgfVxuICB9XG5cbiAgX3dyaXRlIChkYXRhLCBjYikge1xuICAgIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlcmVkID49IHRoaXMuX3JlYWRhYmxlU3RhdGUuaGlnaFdhdGVyTWFyaykge1xuICAgICAgdGhpcy5fdHJhbnNmb3JtU3RhdGUuZGF0YSA9IGRhdGFcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fdHJhbnNmb3JtKGRhdGEsIHRoaXMuX3RyYW5zZm9ybVN0YXRlLmFmdGVyVHJhbnNmb3JtKVxuICAgIH1cbiAgfVxuXG4gIF9yZWFkIChjYikge1xuICAgIGlmICh0aGlzLl90cmFuc2Zvcm1TdGF0ZS5kYXRhICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5fdHJhbnNmb3JtU3RhdGUuZGF0YVxuICAgICAgdGhpcy5fdHJhbnNmb3JtU3RhdGUuZGF0YSA9IG51bGxcbiAgICAgIGNiKG51bGwpXG4gICAgICB0aGlzLl90cmFuc2Zvcm0oZGF0YSwgdGhpcy5fdHJhbnNmb3JtU3RhdGUuYWZ0ZXJUcmFuc2Zvcm0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGNiKG51bGwpXG4gICAgfVxuICB9XG5cbiAgZGVzdHJveSAoZXJyKSB7XG4gICAgc3VwZXIuZGVzdHJveShlcnIpXG4gICAgaWYgKHRoaXMuX3RyYW5zZm9ybVN0YXRlLmRhdGEgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuX3RyYW5zZm9ybVN0YXRlLmRhdGEgPSBudWxsXG4gICAgICB0aGlzLl90cmFuc2Zvcm1TdGF0ZS5hZnRlclRyYW5zZm9ybSgpXG4gICAgfVxuICB9XG5cbiAgX3RyYW5zZm9ybSAoZGF0YSwgY2IpIHtcbiAgICBjYihudWxsLCBkYXRhKVxuICB9XG5cbiAgX2ZsdXNoIChjYikge1xuICAgIGNiKG51bGwpXG4gIH1cblxuICBfZmluYWwgKGNiKSB7XG4gICAgdGhpcy5fdHJhbnNmb3JtU3RhdGUuYWZ0ZXJGaW5hbCA9IGNiXG4gICAgdGhpcy5fZmx1c2godHJhbnNmb3JtQWZ0ZXJGbHVzaC5iaW5kKHRoaXMpKVxuICB9XG59XG5cbmNsYXNzIFBhc3NUaHJvdWdoIGV4dGVuZHMgVHJhbnNmb3JtIHt9XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybUFmdGVyRmx1c2ggKGVyciwgZGF0YSkge1xuICBjb25zdCBjYiA9IHRoaXMuX3RyYW5zZm9ybVN0YXRlLmFmdGVyRmluYWxcbiAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgaWYgKGRhdGEgIT09IG51bGwgJiYgZGF0YSAhPT0gdW5kZWZpbmVkKSB0aGlzLnB1c2goZGF0YSlcbiAgdGhpcy5wdXNoKG51bGwpXG4gIGNiKG51bGwpXG59XG5cbmZ1bmN0aW9uIHBpcGVsaW5lUHJvbWlzZSAoLi4uc3RyZWFtcykge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHJldHVybiBwaXBlbGluZSguLi5zdHJlYW1zLCAoZXJyKSA9PiB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gcmVqZWN0KGVycilcbiAgICAgIHJlc29sdmUoKVxuICAgIH0pXG4gIH0pXG59XG5cbmZ1bmN0aW9uIHBpcGVsaW5lIChzdHJlYW0sIC4uLnN0cmVhbXMpIHtcbiAgY29uc3QgYWxsID0gQXJyYXkuaXNBcnJheShzdHJlYW0pID8gWy4uLnN0cmVhbSwgLi4uc3RyZWFtc10gOiBbc3RyZWFtLCAuLi5zdHJlYW1zXVxuICBjb25zdCBkb25lID0gKGFsbC5sZW5ndGggJiYgdHlwZW9mIGFsbFthbGwubGVuZ3RoIC0gMV0gPT09ICdmdW5jdGlvbicpID8gYWxsLnBvcCgpIDogbnVsbFxuXG4gIGlmIChhbGwubGVuZ3RoIDwgMikgdGhyb3cgbmV3IEVycm9yKCdQaXBlbGluZSByZXF1aXJlcyBhdCBsZWFzdCAyIHN0cmVhbXMnKVxuXG4gIGxldCBzcmMgPSBhbGxbMF1cbiAgbGV0IGRlc3QgPSBudWxsXG4gIGxldCBlcnJvciA9IG51bGxcblxuICBmb3IgKGxldCBpID0gMTsgaSA8IGFsbC5sZW5ndGg7IGkrKykge1xuICAgIGRlc3QgPSBhbGxbaV1cblxuICAgIGlmIChpc1N0cmVhbXgoc3JjKSkge1xuICAgICAgc3JjLnBpcGUoZGVzdCwgb25lcnJvcilcbiAgICB9IGVsc2Uge1xuICAgICAgZXJyb3JIYW5kbGUoc3JjLCB0cnVlLCBpID4gMSwgb25lcnJvcilcbiAgICAgIHNyYy5waXBlKGRlc3QpXG4gICAgfVxuXG4gICAgc3JjID0gZGVzdFxuICB9XG5cbiAgaWYgKGRvbmUpIHtcbiAgICBsZXQgZmluID0gZmFsc2VcblxuICAgIGNvbnN0IGF1dG9EZXN0cm95ID0gaXNTdHJlYW14KGRlc3QpIHx8ICEhKGRlc3QuX3dyaXRhYmxlU3RhdGUgJiYgZGVzdC5fd3JpdGFibGVTdGF0ZS5hdXRvRGVzdHJveSlcblxuICAgIGRlc3Qub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgaWYgKGVycm9yID09PSBudWxsKSBlcnJvciA9IGVyclxuICAgIH0pXG5cbiAgICBkZXN0Lm9uKCdmaW5pc2gnLCAoKSA9PiB7XG4gICAgICBmaW4gPSB0cnVlXG4gICAgICBpZiAoIWF1dG9EZXN0cm95KSBkb25lKGVycm9yKVxuICAgIH0pXG5cbiAgICBpZiAoYXV0b0Rlc3Ryb3kpIHtcbiAgICAgIGRlc3Qub24oJ2Nsb3NlJywgKCkgPT4gZG9uZShlcnJvciB8fCAoZmluID8gbnVsbCA6IFBSRU1BVFVSRV9DTE9TRSkpKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkZXN0XG5cbiAgZnVuY3Rpb24gZXJyb3JIYW5kbGUgKHMsIHJkLCB3ciwgb25lcnJvcikge1xuICAgIHMub24oJ2Vycm9yJywgb25lcnJvcilcbiAgICBzLm9uKCdjbG9zZScsIG9uY2xvc2UpXG5cbiAgICBmdW5jdGlvbiBvbmNsb3NlICgpIHtcbiAgICAgIGlmIChyZCAmJiBzLl9yZWFkYWJsZVN0YXRlICYmICFzLl9yZWFkYWJsZVN0YXRlLmVuZGVkKSByZXR1cm4gb25lcnJvcihQUkVNQVRVUkVfQ0xPU0UpXG4gICAgICBpZiAod3IgJiYgcy5fd3JpdGFibGVTdGF0ZSAmJiAhcy5fd3JpdGFibGVTdGF0ZS5lbmRlZCkgcmV0dXJuIG9uZXJyb3IoUFJFTUFUVVJFX0NMT1NFKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG9uZXJyb3IgKGVycikge1xuICAgIGlmICghZXJyIHx8IGVycm9yKSByZXR1cm5cbiAgICBlcnJvciA9IGVyclxuXG4gICAgZm9yIChjb25zdCBzIG9mIGFsbCkge1xuICAgICAgcy5kZXN0cm95KGVycilcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZWNobyAocykge1xuICByZXR1cm4gc1xufVxuXG5mdW5jdGlvbiBpc1N0cmVhbSAoc3RyZWFtKSB7XG4gIHJldHVybiAhIXN0cmVhbS5fcmVhZGFibGVTdGF0ZSB8fCAhIXN0cmVhbS5fd3JpdGFibGVTdGF0ZVxufVxuXG5mdW5jdGlvbiBpc1N0cmVhbXggKHN0cmVhbSkge1xuICByZXR1cm4gdHlwZW9mIHN0cmVhbS5fZHVwbGV4U3RhdGUgPT09ICdudW1iZXInICYmIGlzU3RyZWFtKHN0cmVhbSlcbn1cblxuZnVuY3Rpb24gaXNFbmRlZCAoc3RyZWFtKSB7XG4gIHJldHVybiAhIXN0cmVhbS5fcmVhZGFibGVTdGF0ZSAmJiBzdHJlYW0uX3JlYWRhYmxlU3RhdGUuZW5kZWRcbn1cblxuZnVuY3Rpb24gaXNGaW5pc2hlZCAoc3RyZWFtKSB7XG4gIHJldHVybiAhIXN0cmVhbS5fd3JpdGFibGVTdGF0ZSAmJiBzdHJlYW0uX3dyaXRhYmxlU3RhdGUuZW5kZWRcbn1cblxuZnVuY3Rpb24gZ2V0U3RyZWFtRXJyb3IgKHN0cmVhbSwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IGVyciA9IChzdHJlYW0uX3JlYWRhYmxlU3RhdGUgJiYgc3RyZWFtLl9yZWFkYWJsZVN0YXRlLmVycm9yKSB8fCAoc3RyZWFtLl93cml0YWJsZVN0YXRlICYmIHN0cmVhbS5fd3JpdGFibGVTdGF0ZS5lcnJvcilcblxuICAvLyBhdm9pZCBpbXBsaWNpdCBlcnJvcnMgYnkgZGVmYXVsdFxuICByZXR1cm4gKCFvcHRzLmFsbCAmJiBlcnIgPT09IFNUUkVBTV9ERVNUUk9ZRUQpID8gbnVsbCA6IGVyclxufVxuXG5mdW5jdGlvbiBpc1JlYWRTdHJlYW14IChzdHJlYW0pIHtcbiAgcmV0dXJuIGlzU3RyZWFteChzdHJlYW0pICYmIHN0cmVhbS5yZWFkYWJsZVxufVxuXG5mdW5jdGlvbiBpc1R5cGVkQXJyYXkgKGRhdGEpIHtcbiAgcmV0dXJuIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyAmJiBkYXRhICE9PSBudWxsICYmIHR5cGVvZiBkYXRhLmJ5dGVMZW5ndGggPT09ICdudW1iZXInXG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRCeXRlTGVuZ3RoIChkYXRhKSB7XG4gIHJldHVybiBpc1R5cGVkQXJyYXkoZGF0YSkgPyBkYXRhLmJ5dGVMZW5ndGggOiAxMDI0XG59XG5cbmZ1bmN0aW9uIG5vb3AgKCkge31cblxuZnVuY3Rpb24gYWJvcnQgKCkge1xuICB0aGlzLmRlc3Ryb3kobmV3IEVycm9yKCdTdHJlYW0gYWJvcnRlZC4nKSlcbn1cblxuZnVuY3Rpb24gaXNXcml0ZXYgKHMpIHtcbiAgcmV0dXJuIHMuX3dyaXRldiAhPT0gV3JpdGFibGUucHJvdG90eXBlLl93cml0ZXYgJiYgcy5fd3JpdGV2ICE9PSBEdXBsZXgucHJvdG90eXBlLl93cml0ZXZcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHBpcGVsaW5lLFxuICBwaXBlbGluZVByb21pc2UsXG4gIGlzU3RyZWFtLFxuICBpc1N0cmVhbXgsXG4gIGlzRW5kZWQsXG4gIGlzRmluaXNoZWQsXG4gIGdldFN0cmVhbUVycm9yLFxuICBTdHJlYW0sXG4gIFdyaXRhYmxlLFxuICBSZWFkYWJsZSxcbiAgRHVwbGV4LFxuICBUcmFuc2Zvcm0sXG4gIC8vIEV4cG9ydCBQYXNzVGhyb3VnaCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIE5vZGUuanMgY29yZSdzIHN0cmVhbSBtb2R1bGVcbiAgUGFzc1Rocm91Z2hcbn1cbiIsCiAgICAiZnVuY3Rpb24gaXNCdWZmZXIgKHZhbHVlKSB7XG4gIHJldHVybiBCdWZmZXIuaXNCdWZmZXIodmFsdWUpIHx8IHZhbHVlIGluc3RhbmNlb2YgVWludDhBcnJheVxufVxuXG5mdW5jdGlvbiBpc0VuY29kaW5nIChlbmNvZGluZykge1xuICByZXR1cm4gQnVmZmVyLmlzRW5jb2RpbmcoZW5jb2RpbmcpXG59XG5cbmZ1bmN0aW9uIGFsbG9jIChzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICByZXR1cm4gQnVmZmVyLmFsbG9jKHNpemUsIGZpbGwsIGVuY29kaW5nKVxufVxuXG5mdW5jdGlvbiBhbGxvY1Vuc2FmZSAoc2l6ZSkge1xuICByZXR1cm4gQnVmZmVyLmFsbG9jVW5zYWZlKHNpemUpXG59XG5cbmZ1bmN0aW9uIGFsbG9jVW5zYWZlU2xvdyAoc2l6ZSkge1xuICByZXR1cm4gQnVmZmVyLmFsbG9jVW5zYWZlU2xvdyhzaXplKVxufVxuXG5mdW5jdGlvbiBieXRlTGVuZ3RoIChzdHJpbmcsIGVuY29kaW5nKSB7XG4gIHJldHVybiBCdWZmZXIuYnl0ZUxlbmd0aChzdHJpbmcsIGVuY29kaW5nKVxufVxuXG5mdW5jdGlvbiBjb21wYXJlIChhLCBiKSB7XG4gIHJldHVybiBCdWZmZXIuY29tcGFyZShhLCBiKVxufVxuXG5mdW5jdGlvbiBjb25jYXQgKGJ1ZmZlcnMsIHRvdGFsTGVuZ3RoKSB7XG4gIHJldHVybiBCdWZmZXIuY29uY2F0KGJ1ZmZlcnMsIHRvdGFsTGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBjb3B5IChzb3VyY2UsIHRhcmdldCwgdGFyZ2V0U3RhcnQsIHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIHRvQnVmZmVyKHNvdXJjZSkuY29weSh0YXJnZXQsIHRhcmdldFN0YXJ0LCBzdGFydCwgZW5kKVxufVxuXG5mdW5jdGlvbiBlcXVhbHMgKGEsIGIpIHtcbiAgcmV0dXJuIHRvQnVmZmVyKGEpLmVxdWFscyhiKVxufVxuXG5mdW5jdGlvbiBmaWxsIChidWZmZXIsIHZhbHVlLCBvZmZzZXQsIGVuZCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIHRvQnVmZmVyKGJ1ZmZlcikuZmlsbCh2YWx1ZSwgb2Zmc2V0LCBlbmQsIGVuY29kaW5nKVxufVxuXG5mdW5jdGlvbiBmcm9tICh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBCdWZmZXIuZnJvbSh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBpbmNsdWRlcyAoYnVmZmVyLCB2YWx1ZSwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIHRvQnVmZmVyKGJ1ZmZlcikuaW5jbHVkZXModmFsdWUsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKVxufVxuXG5mdW5jdGlvbiBpbmRleE9mIChidWZmZXIsIHZhbHVlLCBieWZlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gdG9CdWZmZXIoYnVmZmVyKS5pbmRleE9mKHZhbHVlLCBieWZlT2Zmc2V0LCBlbmNvZGluZylcbn1cblxuZnVuY3Rpb24gbGFzdEluZGV4T2YgKGJ1ZmZlciwgdmFsdWUsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiB0b0J1ZmZlcihidWZmZXIpLmxhc3RJbmRleE9mKHZhbHVlLCBieXRlT2Zmc2V0LCBlbmNvZGluZylcbn1cblxuZnVuY3Rpb24gc3dhcDE2IChidWZmZXIpIHtcbiAgcmV0dXJuIHRvQnVmZmVyKGJ1ZmZlcikuc3dhcDE2KClcbn1cblxuZnVuY3Rpb24gc3dhcDMyIChidWZmZXIpIHtcbiAgcmV0dXJuIHRvQnVmZmVyKGJ1ZmZlcikuc3dhcDMyKClcbn1cblxuZnVuY3Rpb24gc3dhcDY0IChidWZmZXIpIHtcbiAgcmV0dXJuIHRvQnVmZmVyKGJ1ZmZlcikuc3dhcDY0KClcbn1cblxuZnVuY3Rpb24gdG9CdWZmZXIgKGJ1ZmZlcikge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKGJ1ZmZlcikpIHJldHVybiBidWZmZXJcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKGJ1ZmZlci5idWZmZXIsIGJ1ZmZlci5ieXRlT2Zmc2V0LCBidWZmZXIuYnl0ZUxlbmd0aClcbn1cblxuZnVuY3Rpb24gdG9TdHJpbmcgKGJ1ZmZlciwgZW5jb2RpbmcsIHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIHRvQnVmZmVyKGJ1ZmZlcikudG9TdHJpbmcoZW5jb2RpbmcsIHN0YXJ0LCBlbmQpXG59XG5cbmZ1bmN0aW9uIHdyaXRlIChidWZmZXIsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgsIGVuY29kaW5nKSB7XG4gIHJldHVybiB0b0J1ZmZlcihidWZmZXIpLndyaXRlKHN0cmluZywgb2Zmc2V0LCBsZW5ndGgsIGVuY29kaW5nKVxufVxuXG5mdW5jdGlvbiB3cml0ZURvdWJsZUxFIChidWZmZXIsIHZhbHVlLCBvZmZzZXQpIHtcbiAgcmV0dXJuIHRvQnVmZmVyKGJ1ZmZlcikud3JpdGVEb3VibGVMRSh2YWx1ZSwgb2Zmc2V0KVxufVxuXG5mdW5jdGlvbiB3cml0ZUZsb2F0TEUgKGJ1ZmZlciwgdmFsdWUsIG9mZnNldCkge1xuICByZXR1cm4gdG9CdWZmZXIoYnVmZmVyKS53cml0ZUZsb2F0TEUodmFsdWUsIG9mZnNldClcbn1cblxuZnVuY3Rpb24gd3JpdGVVSW50MzJMRSAoYnVmZmVyLCB2YWx1ZSwgb2Zmc2V0KSB7XG4gIHJldHVybiB0b0J1ZmZlcihidWZmZXIpLndyaXRlVUludDMyTEUodmFsdWUsIG9mZnNldClcbn1cblxuZnVuY3Rpb24gd3JpdGVJbnQzMkxFIChidWZmZXIsIHZhbHVlLCBvZmZzZXQpIHtcbiAgcmV0dXJuIHRvQnVmZmVyKGJ1ZmZlcikud3JpdGVJbnQzMkxFKHZhbHVlLCBvZmZzZXQpXG59XG5cbmZ1bmN0aW9uIHJlYWREb3VibGVMRSAoYnVmZmVyLCBvZmZzZXQpIHtcbiAgcmV0dXJuIHRvQnVmZmVyKGJ1ZmZlcikucmVhZERvdWJsZUxFKG9mZnNldClcbn1cblxuZnVuY3Rpb24gcmVhZEZsb2F0TEUgKGJ1ZmZlciwgb2Zmc2V0KSB7XG4gIHJldHVybiB0b0J1ZmZlcihidWZmZXIpLnJlYWRGbG9hdExFKG9mZnNldClcbn1cblxuZnVuY3Rpb24gcmVhZFVJbnQzMkxFIChidWZmZXIsIG9mZnNldCkge1xuICByZXR1cm4gdG9CdWZmZXIoYnVmZmVyKS5yZWFkVUludDMyTEUob2Zmc2V0KVxufVxuXG5mdW5jdGlvbiByZWFkSW50MzJMRSAoYnVmZmVyLCBvZmZzZXQpIHtcbiAgcmV0dXJuIHRvQnVmZmVyKGJ1ZmZlcikucmVhZEludDMyTEUob2Zmc2V0KVxufVxuXG5mdW5jdGlvbiB3cml0ZURvdWJsZUJFIChidWZmZXIsIHZhbHVlLCBvZmZzZXQpIHtcbiAgcmV0dXJuIHRvQnVmZmVyKGJ1ZmZlcikud3JpdGVEb3VibGVCRSh2YWx1ZSwgb2Zmc2V0KVxufVxuXG5mdW5jdGlvbiB3cml0ZUZsb2F0QkUgKGJ1ZmZlciwgdmFsdWUsIG9mZnNldCkge1xuICByZXR1cm4gdG9CdWZmZXIoYnVmZmVyKS53cml0ZUZsb2F0QkUodmFsdWUsIG9mZnNldClcbn1cblxuZnVuY3Rpb24gd3JpdGVVSW50MzJCRSAoYnVmZmVyLCB2YWx1ZSwgb2Zmc2V0KSB7XG4gIHJldHVybiB0b0J1ZmZlcihidWZmZXIpLndyaXRlVUludDMyQkUodmFsdWUsIG9mZnNldClcbn1cblxuZnVuY3Rpb24gd3JpdGVJbnQzMkJFIChidWZmZXIsIHZhbHVlLCBvZmZzZXQpIHtcbiAgcmV0dXJuIHRvQnVmZmVyKGJ1ZmZlcikud3JpdGVJbnQzMkJFKHZhbHVlLCBvZmZzZXQpXG59XG5cbmZ1bmN0aW9uIHJlYWREb3VibGVCRSAoYnVmZmVyLCBvZmZzZXQpIHtcbiAgcmV0dXJuIHRvQnVmZmVyKGJ1ZmZlcikucmVhZERvdWJsZUJFKG9mZnNldClcbn1cblxuZnVuY3Rpb24gcmVhZEZsb2F0QkUgKGJ1ZmZlciwgb2Zmc2V0KSB7XG4gIHJldHVybiB0b0J1ZmZlcihidWZmZXIpLnJlYWRGbG9hdEJFKG9mZnNldClcbn1cblxuZnVuY3Rpb24gcmVhZFVJbnQzMkJFIChidWZmZXIsIG9mZnNldCkge1xuICByZXR1cm4gdG9CdWZmZXIoYnVmZmVyKS5yZWFkVUludDMyQkUob2Zmc2V0KVxufVxuXG5mdW5jdGlvbiByZWFkSW50MzJCRSAoYnVmZmVyLCBvZmZzZXQpIHtcbiAgcmV0dXJuIHRvQnVmZmVyKGJ1ZmZlcikucmVhZEludDMyQkUob2Zmc2V0KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXNCdWZmZXIsXG4gIGlzRW5jb2RpbmcsXG4gIGFsbG9jLFxuICBhbGxvY1Vuc2FmZSxcbiAgYWxsb2NVbnNhZmVTbG93LFxuICBieXRlTGVuZ3RoLFxuICBjb21wYXJlLFxuICBjb25jYXQsXG4gIGNvcHksXG4gIGVxdWFscyxcbiAgZmlsbCxcbiAgZnJvbSxcbiAgaW5jbHVkZXMsXG4gIGluZGV4T2YsXG4gIGxhc3RJbmRleE9mLFxuICBzd2FwMTYsXG4gIHN3YXAzMixcbiAgc3dhcDY0LFxuICB0b0J1ZmZlcixcbiAgdG9TdHJpbmcsXG4gIHdyaXRlLFxuICB3cml0ZURvdWJsZUxFLFxuICB3cml0ZUZsb2F0TEUsXG4gIHdyaXRlVUludDMyTEUsXG4gIHdyaXRlSW50MzJMRSxcbiAgcmVhZERvdWJsZUxFLFxuICByZWFkRmxvYXRMRSxcbiAgcmVhZFVJbnQzMkxFLFxuICByZWFkSW50MzJMRSxcbiAgd3JpdGVEb3VibGVCRSxcbiAgd3JpdGVGbG9hdEJFLFxuICB3cml0ZVVJbnQzMkJFLFxuICB3cml0ZUludDMyQkUsXG4gIHJlYWREb3VibGVCRSxcbiAgcmVhZEZsb2F0QkUsXG4gIHJlYWRVSW50MzJCRSxcbiAgcmVhZEludDMyQkVcblxufVxuIiwKICAgICJjb25zdCBiNGEgPSByZXF1aXJlKCdiNGEnKVxuXG5jb25zdCBaRVJPUyA9ICcwMDAwMDAwMDAwMDAwMDAwMDAwJ1xuY29uc3QgU0VWRU5TID0gJzc3Nzc3Nzc3Nzc3Nzc3Nzc3NzcnXG5jb25zdCBaRVJPX09GRlNFVCA9ICcwJy5jaGFyQ29kZUF0KDApXG5jb25zdCBVU1RBUl9NQUdJQyA9IGI0YS5mcm9tKFsweDc1LCAweDczLCAweDc0LCAweDYxLCAweDcyLCAweDAwXSkgLy8gdXN0YXJcXHgwMFxuY29uc3QgVVNUQVJfVkVSID0gYjRhLmZyb20oW1pFUk9fT0ZGU0VULCBaRVJPX09GRlNFVF0pXG5jb25zdCBHTlVfTUFHSUMgPSBiNGEuZnJvbShbMHg3NSwgMHg3MywgMHg3NCwgMHg2MSwgMHg3MiwgMHgyMF0pIC8vIHVzdGFyXFx4MjBcbmNvbnN0IEdOVV9WRVIgPSBiNGEuZnJvbShbMHgyMCwgMHgwMF0pXG5jb25zdCBNQVNLID0gMG83Nzc3XG5jb25zdCBNQUdJQ19PRkZTRVQgPSAyNTdcbmNvbnN0IFZFUlNJT05fT0ZGU0VUID0gMjYzXG5cbmV4cG9ydHMuZGVjb2RlTG9uZ1BhdGggPSBmdW5jdGlvbiBkZWNvZGVMb25nUGF0aCAoYnVmLCBlbmNvZGluZykge1xuICByZXR1cm4gZGVjb2RlU3RyKGJ1ZiwgMCwgYnVmLmxlbmd0aCwgZW5jb2RpbmcpXG59XG5cbmV4cG9ydHMuZW5jb2RlUGF4ID0gZnVuY3Rpb24gZW5jb2RlUGF4IChvcHRzKSB7IC8vIFRPRE86IGVuY29kZSBtb3JlIHN0dWZmIGluIHBheFxuICBsZXQgcmVzdWx0ID0gJydcbiAgaWYgKG9wdHMubmFtZSkgcmVzdWx0ICs9IGFkZExlbmd0aCgnIHBhdGg9JyArIG9wdHMubmFtZSArICdcXG4nKVxuICBpZiAob3B0cy5saW5rbmFtZSkgcmVzdWx0ICs9IGFkZExlbmd0aCgnIGxpbmtwYXRoPScgKyBvcHRzLmxpbmtuYW1lICsgJ1xcbicpXG4gIGNvbnN0IHBheCA9IG9wdHMucGF4XG4gIGlmIChwYXgpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBwYXgpIHtcbiAgICAgIHJlc3VsdCArPSBhZGRMZW5ndGgoJyAnICsga2V5ICsgJz0nICsgcGF4W2tleV0gKyAnXFxuJylcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGI0YS5mcm9tKHJlc3VsdClcbn1cblxuZXhwb3J0cy5kZWNvZGVQYXggPSBmdW5jdGlvbiBkZWNvZGVQYXggKGJ1Zikge1xuICBjb25zdCByZXN1bHQgPSB7fVxuXG4gIHdoaWxlIChidWYubGVuZ3RoKSB7XG4gICAgbGV0IGkgPSAwXG4gICAgd2hpbGUgKGkgPCBidWYubGVuZ3RoICYmIGJ1ZltpXSAhPT0gMzIpIGkrK1xuICAgIGNvbnN0IGxlbiA9IHBhcnNlSW50KGI0YS50b1N0cmluZyhidWYuc3ViYXJyYXkoMCwgaSkpLCAxMClcbiAgICBpZiAoIWxlbikgcmV0dXJuIHJlc3VsdFxuXG4gICAgY29uc3QgYiA9IGI0YS50b1N0cmluZyhidWYuc3ViYXJyYXkoaSArIDEsIGxlbiAtIDEpKVxuICAgIGNvbnN0IGtleUluZGV4ID0gYi5pbmRleE9mKCc9JylcbiAgICBpZiAoa2V5SW5kZXggPT09IC0xKSByZXR1cm4gcmVzdWx0XG4gICAgcmVzdWx0W2Iuc2xpY2UoMCwga2V5SW5kZXgpXSA9IGIuc2xpY2Uoa2V5SW5kZXggKyAxKVxuXG4gICAgYnVmID0gYnVmLnN1YmFycmF5KGxlbilcbiAgfVxuXG4gIHJldHVybiByZXN1bHRcbn1cblxuZXhwb3J0cy5lbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUgKG9wdHMpIHtcbiAgY29uc3QgYnVmID0gYjRhLmFsbG9jKDUxMilcbiAgbGV0IG5hbWUgPSBvcHRzLm5hbWVcbiAgbGV0IHByZWZpeCA9ICcnXG5cbiAgaWYgKG9wdHMudHlwZWZsYWcgPT09IDUgJiYgbmFtZVtuYW1lLmxlbmd0aCAtIDFdICE9PSAnLycpIG5hbWUgKz0gJy8nXG4gIGlmIChiNGEuYnl0ZUxlbmd0aChuYW1lKSAhPT0gbmFtZS5sZW5ndGgpIHJldHVybiBudWxsIC8vIHV0Zi04XG5cbiAgd2hpbGUgKGI0YS5ieXRlTGVuZ3RoKG5hbWUpID4gMTAwKSB7XG4gICAgY29uc3QgaSA9IG5hbWUuaW5kZXhPZignLycpXG4gICAgaWYgKGkgPT09IC0xKSByZXR1cm4gbnVsbFxuICAgIHByZWZpeCArPSBwcmVmaXggPyAnLycgKyBuYW1lLnNsaWNlKDAsIGkpIDogbmFtZS5zbGljZSgwLCBpKVxuICAgIG5hbWUgPSBuYW1lLnNsaWNlKGkgKyAxKVxuICB9XG5cbiAgaWYgKGI0YS5ieXRlTGVuZ3RoKG5hbWUpID4gMTAwIHx8IGI0YS5ieXRlTGVuZ3RoKHByZWZpeCkgPiAxNTUpIHJldHVybiBudWxsXG4gIGlmIChvcHRzLmxpbmtuYW1lICYmIGI0YS5ieXRlTGVuZ3RoKG9wdHMubGlua25hbWUpID4gMTAwKSByZXR1cm4gbnVsbFxuXG4gIGI0YS53cml0ZShidWYsIG5hbWUpXG4gIGI0YS53cml0ZShidWYsIGVuY29kZU9jdChvcHRzLm1vZGUgJiBNQVNLLCA2KSwgMTAwKVxuICBiNGEud3JpdGUoYnVmLCBlbmNvZGVPY3Qob3B0cy51aWQsIDYpLCAxMDgpXG4gIGI0YS53cml0ZShidWYsIGVuY29kZU9jdChvcHRzLmdpZCwgNiksIDExNilcbiAgZW5jb2RlU2l6ZShvcHRzLnNpemUsIGJ1ZiwgMTI0KVxuICBiNGEud3JpdGUoYnVmLCBlbmNvZGVPY3QoKG9wdHMubXRpbWUuZ2V0VGltZSgpIC8gMTAwMCkgfCAwLCAxMSksIDEzNilcblxuICBidWZbMTU2XSA9IFpFUk9fT0ZGU0VUICsgdG9UeXBlZmxhZyhvcHRzLnR5cGUpXG5cbiAgaWYgKG9wdHMubGlua25hbWUpIGI0YS53cml0ZShidWYsIG9wdHMubGlua25hbWUsIDE1NylcblxuICBiNGEuY29weShVU1RBUl9NQUdJQywgYnVmLCBNQUdJQ19PRkZTRVQpXG4gIGI0YS5jb3B5KFVTVEFSX1ZFUiwgYnVmLCBWRVJTSU9OX09GRlNFVClcbiAgaWYgKG9wdHMudW5hbWUpIGI0YS53cml0ZShidWYsIG9wdHMudW5hbWUsIDI2NSlcbiAgaWYgKG9wdHMuZ25hbWUpIGI0YS53cml0ZShidWYsIG9wdHMuZ25hbWUsIDI5NylcbiAgYjRhLndyaXRlKGJ1ZiwgZW5jb2RlT2N0KG9wdHMuZGV2bWFqb3IgfHwgMCwgNiksIDMyOSlcbiAgYjRhLndyaXRlKGJ1ZiwgZW5jb2RlT2N0KG9wdHMuZGV2bWlub3IgfHwgMCwgNiksIDMzNylcblxuICBpZiAocHJlZml4KSBiNGEud3JpdGUoYnVmLCBwcmVmaXgsIDM0NSlcblxuICBiNGEud3JpdGUoYnVmLCBlbmNvZGVPY3QoY2tzdW0oYnVmKSwgNiksIDE0OClcblxuICByZXR1cm4gYnVmXG59XG5cbmV4cG9ydHMuZGVjb2RlID0gZnVuY3Rpb24gZGVjb2RlIChidWYsIGZpbGVuYW1lRW5jb2RpbmcsIGFsbG93VW5rbm93bkZvcm1hdCkge1xuICBsZXQgdHlwZWZsYWcgPSBidWZbMTU2XSA9PT0gMCA/IDAgOiBidWZbMTU2XSAtIFpFUk9fT0ZGU0VUXG5cbiAgbGV0IG5hbWUgPSBkZWNvZGVTdHIoYnVmLCAwLCAxMDAsIGZpbGVuYW1lRW5jb2RpbmcpXG4gIGNvbnN0IG1vZGUgPSBkZWNvZGVPY3QoYnVmLCAxMDAsIDgpXG4gIGNvbnN0IHVpZCA9IGRlY29kZU9jdChidWYsIDEwOCwgOClcbiAgY29uc3QgZ2lkID0gZGVjb2RlT2N0KGJ1ZiwgMTE2LCA4KVxuICBjb25zdCBzaXplID0gZGVjb2RlT2N0KGJ1ZiwgMTI0LCAxMilcbiAgY29uc3QgbXRpbWUgPSBkZWNvZGVPY3QoYnVmLCAxMzYsIDEyKVxuICBjb25zdCB0eXBlID0gdG9UeXBlKHR5cGVmbGFnKVxuICBjb25zdCBsaW5rbmFtZSA9IGJ1ZlsxNTddID09PSAwID8gbnVsbCA6IGRlY29kZVN0cihidWYsIDE1NywgMTAwLCBmaWxlbmFtZUVuY29kaW5nKVxuICBjb25zdCB1bmFtZSA9IGRlY29kZVN0cihidWYsIDI2NSwgMzIpXG4gIGNvbnN0IGduYW1lID0gZGVjb2RlU3RyKGJ1ZiwgMjk3LCAzMilcbiAgY29uc3QgZGV2bWFqb3IgPSBkZWNvZGVPY3QoYnVmLCAzMjksIDgpXG4gIGNvbnN0IGRldm1pbm9yID0gZGVjb2RlT2N0KGJ1ZiwgMzM3LCA4KVxuXG4gIGNvbnN0IGMgPSBja3N1bShidWYpXG5cbiAgLy8gY2hlY2tzdW0gaXMgc3RpbGwgaW5pdGlhbCB2YWx1ZSBpZiBoZWFkZXIgd2FzIG51bGwuXG4gIGlmIChjID09PSA4ICogMzIpIHJldHVybiBudWxsXG5cbiAgLy8gdmFsaWQgY2hlY2tzdW1cbiAgaWYgKGMgIT09IGRlY29kZU9jdChidWYsIDE0OCwgOCkpIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB0YXIgaGVhZGVyLiBNYXliZSB0aGUgdGFyIGlzIGNvcnJ1cHRlZCBvciBpdCBuZWVkcyB0byBiZSBndW56aXBwZWQ/JylcblxuICBpZiAoaXNVU1RBUihidWYpKSB7XG4gICAgLy8gdXN0YXIgKHBvc2l4KSBmb3JtYXQuXG4gICAgLy8gcHJlcGVuZCBwcmVmaXgsIGlmIHByZXNlbnQuXG4gICAgaWYgKGJ1ZlszNDVdKSBuYW1lID0gZGVjb2RlU3RyKGJ1ZiwgMzQ1LCAxNTUsIGZpbGVuYW1lRW5jb2RpbmcpICsgJy8nICsgbmFtZVxuICB9IGVsc2UgaWYgKGlzR05VKGJ1ZikpIHtcbiAgICAvLyAnZ251Jy8nb2xkZ251JyBmb3JtYXQuIFNpbWlsYXIgdG8gdXN0YXIsIGJ1dCBoYXMgc3VwcG9ydCBmb3IgaW5jcmVtZW50YWwgYW5kXG4gICAgLy8gbXVsdGktdm9sdW1lIHRhcmJhbGxzLlxuICB9IGVsc2Uge1xuICAgIGlmICghYWxsb3dVbmtub3duRm9ybWF0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdGFyIGhlYWRlcjogdW5rbm93biBmb3JtYXQuJylcbiAgICB9XG4gIH1cblxuICAvLyB0byBzdXBwb3J0IG9sZCB0YXIgdmVyc2lvbnMgdGhhdCB1c2UgdHJhaWxpbmcgLyB0byBpbmRpY2F0ZSBkaXJzXG4gIGlmICh0eXBlZmxhZyA9PT0gMCAmJiBuYW1lICYmIG5hbWVbbmFtZS5sZW5ndGggLSAxXSA9PT0gJy8nKSB0eXBlZmxhZyA9IDVcblxuICByZXR1cm4ge1xuICAgIG5hbWUsXG4gICAgbW9kZSxcbiAgICB1aWQsXG4gICAgZ2lkLFxuICAgIHNpemUsXG4gICAgbXRpbWU6IG5ldyBEYXRlKDEwMDAgKiBtdGltZSksXG4gICAgdHlwZSxcbiAgICBsaW5rbmFtZSxcbiAgICB1bmFtZSxcbiAgICBnbmFtZSxcbiAgICBkZXZtYWpvcixcbiAgICBkZXZtaW5vcixcbiAgICBwYXg6IG51bGxcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1VTVEFSIChidWYpIHtcbiAgcmV0dXJuIGI0YS5lcXVhbHMoVVNUQVJfTUFHSUMsIGJ1Zi5zdWJhcnJheShNQUdJQ19PRkZTRVQsIE1BR0lDX09GRlNFVCArIDYpKVxufVxuXG5mdW5jdGlvbiBpc0dOVSAoYnVmKSB7XG4gIHJldHVybiBiNGEuZXF1YWxzKEdOVV9NQUdJQywgYnVmLnN1YmFycmF5KE1BR0lDX09GRlNFVCwgTUFHSUNfT0ZGU0VUICsgNikpICYmXG4gICAgYjRhLmVxdWFscyhHTlVfVkVSLCBidWYuc3ViYXJyYXkoVkVSU0lPTl9PRkZTRVQsIFZFUlNJT05fT0ZGU0VUICsgMikpXG59XG5cbmZ1bmN0aW9uIGNsYW1wIChpbmRleCwgbGVuLCBkZWZhdWx0VmFsdWUpIHtcbiAgaWYgKHR5cGVvZiBpbmRleCAhPT0gJ251bWJlcicpIHJldHVybiBkZWZhdWx0VmFsdWVcbiAgaW5kZXggPSB+fmluZGV4IC8vIENvZXJjZSB0byBpbnRlZ2VyLlxuICBpZiAoaW5kZXggPj0gbGVuKSByZXR1cm4gbGVuXG4gIGlmIChpbmRleCA+PSAwKSByZXR1cm4gaW5kZXhcbiAgaW5kZXggKz0gbGVuXG4gIGlmIChpbmRleCA+PSAwKSByZXR1cm4gaW5kZXhcbiAgcmV0dXJuIDBcbn1cblxuZnVuY3Rpb24gdG9UeXBlIChmbGFnKSB7XG4gIHN3aXRjaCAoZmxhZykge1xuICAgIGNhc2UgMDpcbiAgICAgIHJldHVybiAnZmlsZSdcbiAgICBjYXNlIDE6XG4gICAgICByZXR1cm4gJ2xpbmsnXG4gICAgY2FzZSAyOlxuICAgICAgcmV0dXJuICdzeW1saW5rJ1xuICAgIGNhc2UgMzpcbiAgICAgIHJldHVybiAnY2hhcmFjdGVyLWRldmljZSdcbiAgICBjYXNlIDQ6XG4gICAgICByZXR1cm4gJ2Jsb2NrLWRldmljZSdcbiAgICBjYXNlIDU6XG4gICAgICByZXR1cm4gJ2RpcmVjdG9yeSdcbiAgICBjYXNlIDY6XG4gICAgICByZXR1cm4gJ2ZpZm8nXG4gICAgY2FzZSA3OlxuICAgICAgcmV0dXJuICdjb250aWd1b3VzLWZpbGUnXG4gICAgY2FzZSA3MjpcbiAgICAgIHJldHVybiAncGF4LWhlYWRlcidcbiAgICBjYXNlIDU1OlxuICAgICAgcmV0dXJuICdwYXgtZ2xvYmFsLWhlYWRlcidcbiAgICBjYXNlIDI3OlxuICAgICAgcmV0dXJuICdnbnUtbG9uZy1saW5rLXBhdGgnXG4gICAgY2FzZSAyODpcbiAgICBjYXNlIDMwOlxuICAgICAgcmV0dXJuICdnbnUtbG9uZy1wYXRoJ1xuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuZnVuY3Rpb24gdG9UeXBlZmxhZyAoZmxhZykge1xuICBzd2l0Y2ggKGZsYWcpIHtcbiAgICBjYXNlICdmaWxlJzpcbiAgICAgIHJldHVybiAwXG4gICAgY2FzZSAnbGluayc6XG4gICAgICByZXR1cm4gMVxuICAgIGNhc2UgJ3N5bWxpbmsnOlxuICAgICAgcmV0dXJuIDJcbiAgICBjYXNlICdjaGFyYWN0ZXItZGV2aWNlJzpcbiAgICAgIHJldHVybiAzXG4gICAgY2FzZSAnYmxvY2stZGV2aWNlJzpcbiAgICAgIHJldHVybiA0XG4gICAgY2FzZSAnZGlyZWN0b3J5JzpcbiAgICAgIHJldHVybiA1XG4gICAgY2FzZSAnZmlmbyc6XG4gICAgICByZXR1cm4gNlxuICAgIGNhc2UgJ2NvbnRpZ3VvdXMtZmlsZSc6XG4gICAgICByZXR1cm4gN1xuICAgIGNhc2UgJ3BheC1oZWFkZXInOlxuICAgICAgcmV0dXJuIDcyXG4gIH1cblxuICByZXR1cm4gMFxufVxuXG5mdW5jdGlvbiBpbmRleE9mIChibG9jaywgbnVtLCBvZmZzZXQsIGVuZCkge1xuICBmb3IgKDsgb2Zmc2V0IDwgZW5kOyBvZmZzZXQrKykge1xuICAgIGlmIChibG9ja1tvZmZzZXRdID09PSBudW0pIHJldHVybiBvZmZzZXRcbiAgfVxuICByZXR1cm4gZW5kXG59XG5cbmZ1bmN0aW9uIGNrc3VtIChibG9jaykge1xuICBsZXQgc3VtID0gOCAqIDMyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMTQ4OyBpKyspIHN1bSArPSBibG9ja1tpXVxuICBmb3IgKGxldCBqID0gMTU2OyBqIDwgNTEyOyBqKyspIHN1bSArPSBibG9ja1tqXVxuICByZXR1cm4gc3VtXG59XG5cbmZ1bmN0aW9uIGVuY29kZU9jdCAodmFsLCBuKSB7XG4gIHZhbCA9IHZhbC50b1N0cmluZyg4KVxuICBpZiAodmFsLmxlbmd0aCA+IG4pIHJldHVybiBTRVZFTlMuc2xpY2UoMCwgbikgKyAnICdcbiAgcmV0dXJuIFpFUk9TLnNsaWNlKDAsIG4gLSB2YWwubGVuZ3RoKSArIHZhbCArICcgJ1xufVxuXG5mdW5jdGlvbiBlbmNvZGVTaXplQmluIChudW0sIGJ1Ziwgb2ZmKSB7XG4gIGJ1ZltvZmZdID0gMHg4MFxuICBmb3IgKGxldCBpID0gMTE7IGkgPiAwOyBpLS0pIHtcbiAgICBidWZbb2ZmICsgaV0gPSBudW0gJiAweGZmXG4gICAgbnVtID0gTWF0aC5mbG9vcihudW0gLyAweDEwMClcbiAgfVxufVxuXG5mdW5jdGlvbiBlbmNvZGVTaXplIChudW0sIGJ1Ziwgb2ZmKSB7XG4gIGlmIChudW0udG9TdHJpbmcoOCkubGVuZ3RoID4gMTEpIHtcbiAgICBlbmNvZGVTaXplQmluKG51bSwgYnVmLCBvZmYpXG4gIH0gZWxzZSB7XG4gICAgYjRhLndyaXRlKGJ1ZiwgZW5jb2RlT2N0KG51bSwgMTEpLCBvZmYpXG4gIH1cbn1cblxuLyogQ29waWVkIGZyb20gdGhlIG5vZGUtdGFyIHJlcG8gYW5kIG1vZGlmaWVkIHRvIG1lZXRcbiAqIHRhci1zdHJlYW0gY29kaW5nIHN0YW5kYXJkLlxuICpcbiAqIFNvdXJjZTogaHR0cHM6Ly9naXRodWIuY29tL25wbS9ub2RlLXRhci9ibG9iLzUxYjY2MjdhMWYzNTdkMmViNDMzZTczNzhlNWYwNWU4M2I3YWE2Y2QvbGliL2hlYWRlci5qcyNMMzQ5XG4gKi9cbmZ1bmN0aW9uIHBhcnNlMjU2IChidWYpIHtcbiAgLy8gZmlyc3QgYnl0ZSBNVVNUIGJlIGVpdGhlciA4MCBvciBGRlxuICAvLyA4MCBmb3IgcG9zaXRpdmUsIEZGIGZvciAyJ3MgY29tcFxuICBsZXQgcG9zaXRpdmVcbiAgaWYgKGJ1ZlswXSA9PT0gMHg4MCkgcG9zaXRpdmUgPSB0cnVlXG4gIGVsc2UgaWYgKGJ1ZlswXSA9PT0gMHhGRikgcG9zaXRpdmUgPSBmYWxzZVxuICBlbHNlIHJldHVybiBudWxsXG5cbiAgLy8gYnVpbGQgdXAgYSBiYXNlLTI1NiB0dXBsZSBmcm9tIHRoZSBsZWFzdCBzaWcgdG8gdGhlIGhpZ2hlc3RcbiAgY29uc3QgdHVwbGUgPSBbXVxuICBsZXQgaVxuICBmb3IgKGkgPSBidWYubGVuZ3RoIC0gMTsgaSA+IDA7IGktLSkge1xuICAgIGNvbnN0IGJ5dGUgPSBidWZbaV1cbiAgICBpZiAocG9zaXRpdmUpIHR1cGxlLnB1c2goYnl0ZSlcbiAgICBlbHNlIHR1cGxlLnB1c2goMHhGRiAtIGJ5dGUpXG4gIH1cblxuICBsZXQgc3VtID0gMFxuICBjb25zdCBsID0gdHVwbGUubGVuZ3RoXG4gIGZvciAoaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICBzdW0gKz0gdHVwbGVbaV0gKiBNYXRoLnBvdygyNTYsIGkpXG4gIH1cblxuICByZXR1cm4gcG9zaXRpdmUgPyBzdW0gOiAtMSAqIHN1bVxufVxuXG5mdW5jdGlvbiBkZWNvZGVPY3QgKHZhbCwgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgdmFsID0gdmFsLnN1YmFycmF5KG9mZnNldCwgb2Zmc2V0ICsgbGVuZ3RoKVxuICBvZmZzZXQgPSAwXG5cbiAgLy8gSWYgcHJlZml4ZWQgd2l0aCAweDgwIHRoZW4gcGFyc2UgYXMgYSBiYXNlLTI1NiBpbnRlZ2VyXG4gIGlmICh2YWxbb2Zmc2V0XSAmIDB4ODApIHtcbiAgICByZXR1cm4gcGFyc2UyNTYodmFsKVxuICB9IGVsc2Uge1xuICAgIC8vIE9sZGVyIHZlcnNpb25zIG9mIHRhciBjYW4gcHJlZml4IHdpdGggc3BhY2VzXG4gICAgd2hpbGUgKG9mZnNldCA8IHZhbC5sZW5ndGggJiYgdmFsW29mZnNldF0gPT09IDMyKSBvZmZzZXQrK1xuICAgIGNvbnN0IGVuZCA9IGNsYW1wKGluZGV4T2YodmFsLCAzMiwgb2Zmc2V0LCB2YWwubGVuZ3RoKSwgdmFsLmxlbmd0aCwgdmFsLmxlbmd0aClcbiAgICB3aGlsZSAob2Zmc2V0IDwgZW5kICYmIHZhbFtvZmZzZXRdID09PSAwKSBvZmZzZXQrK1xuICAgIGlmIChlbmQgPT09IG9mZnNldCkgcmV0dXJuIDBcbiAgICByZXR1cm4gcGFyc2VJbnQoYjRhLnRvU3RyaW5nKHZhbC5zdWJhcnJheShvZmZzZXQsIGVuZCkpLCA4KVxuICB9XG59XG5cbmZ1bmN0aW9uIGRlY29kZVN0ciAodmFsLCBvZmZzZXQsIGxlbmd0aCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGI0YS50b1N0cmluZyh2YWwuc3ViYXJyYXkob2Zmc2V0LCBpbmRleE9mKHZhbCwgMCwgb2Zmc2V0LCBvZmZzZXQgKyBsZW5ndGgpKSwgZW5jb2RpbmcpXG59XG5cbmZ1bmN0aW9uIGFkZExlbmd0aCAoc3RyKSB7XG4gIGNvbnN0IGxlbiA9IGI0YS5ieXRlTGVuZ3RoKHN0cilcbiAgbGV0IGRpZ2l0cyA9IE1hdGguZmxvb3IoTWF0aC5sb2cobGVuKSAvIE1hdGgubG9nKDEwKSkgKyAxXG4gIGlmIChsZW4gKyBkaWdpdHMgPj0gTWF0aC5wb3coMTAsIGRpZ2l0cykpIGRpZ2l0cysrXG5cbiAgcmV0dXJuIChsZW4gKyBkaWdpdHMpICsgc3RyXG59XG4iLAogICAgImNvbnN0IHsgV3JpdGFibGUsIFJlYWRhYmxlLCBnZXRTdHJlYW1FcnJvciB9ID0gcmVxdWlyZSgnc3RyZWFteCcpXG5jb25zdCBGSUZPID0gcmVxdWlyZSgnZmFzdC1maWZvJylcbmNvbnN0IGI0YSA9IHJlcXVpcmUoJ2I0YScpXG5jb25zdCBoZWFkZXJzID0gcmVxdWlyZSgnLi9oZWFkZXJzJylcblxuY29uc3QgRU1QVFkgPSBiNGEuYWxsb2MoMClcblxuY2xhc3MgQnVmZmVyTGlzdCB7XG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICB0aGlzLmJ1ZmZlcmVkID0gMFxuICAgIHRoaXMuc2hpZnRlZCA9IDBcbiAgICB0aGlzLnF1ZXVlID0gbmV3IEZJRk8oKVxuXG4gICAgdGhpcy5fb2Zmc2V0ID0gMFxuICB9XG5cbiAgcHVzaCAoYnVmZmVyKSB7XG4gICAgdGhpcy5idWZmZXJlZCArPSBidWZmZXIuYnl0ZUxlbmd0aFxuICAgIHRoaXMucXVldWUucHVzaChidWZmZXIpXG4gIH1cblxuICBzaGlmdEZpcnN0IChzaXplKSB7XG4gICAgcmV0dXJuIHRoaXMuX2J1ZmZlcmVkID09PSAwID8gbnVsbCA6IHRoaXMuX25leHQoc2l6ZSlcbiAgfVxuXG4gIHNoaWZ0IChzaXplKSB7XG4gICAgaWYgKHNpemUgPiB0aGlzLmJ1ZmZlcmVkKSByZXR1cm4gbnVsbFxuICAgIGlmIChzaXplID09PSAwKSByZXR1cm4gRU1QVFlcblxuICAgIGxldCBjaHVuayA9IHRoaXMuX25leHQoc2l6ZSlcblxuICAgIGlmIChzaXplID09PSBjaHVuay5ieXRlTGVuZ3RoKSByZXR1cm4gY2h1bmsgLy8gbGlrZWx5IGNhc2VcblxuICAgIGNvbnN0IGNodW5rcyA9IFtjaHVua11cblxuICAgIHdoaWxlICgoc2l6ZSAtPSBjaHVuay5ieXRlTGVuZ3RoKSA+IDApIHtcbiAgICAgIGNodW5rID0gdGhpcy5fbmV4dChzaXplKVxuICAgICAgY2h1bmtzLnB1c2goY2h1bmspXG4gICAgfVxuXG4gICAgcmV0dXJuIGI0YS5jb25jYXQoY2h1bmtzKVxuICB9XG5cbiAgX25leHQgKHNpemUpIHtcbiAgICBjb25zdCBidWYgPSB0aGlzLnF1ZXVlLnBlZWsoKVxuICAgIGNvbnN0IHJlbSA9IGJ1Zi5ieXRlTGVuZ3RoIC0gdGhpcy5fb2Zmc2V0XG5cbiAgICBpZiAoc2l6ZSA+PSByZW0pIHtcbiAgICAgIGNvbnN0IHN1YiA9IHRoaXMuX29mZnNldCA/IGJ1Zi5zdWJhcnJheSh0aGlzLl9vZmZzZXQsIGJ1Zi5ieXRlTGVuZ3RoKSA6IGJ1ZlxuICAgICAgdGhpcy5xdWV1ZS5zaGlmdCgpXG4gICAgICB0aGlzLl9vZmZzZXQgPSAwXG4gICAgICB0aGlzLmJ1ZmZlcmVkIC09IHJlbVxuICAgICAgdGhpcy5zaGlmdGVkICs9IHJlbVxuICAgICAgcmV0dXJuIHN1YlxuICAgIH1cblxuICAgIHRoaXMuYnVmZmVyZWQgLT0gc2l6ZVxuICAgIHRoaXMuc2hpZnRlZCArPSBzaXplXG5cbiAgICByZXR1cm4gYnVmLnN1YmFycmF5KHRoaXMuX29mZnNldCwgKHRoaXMuX29mZnNldCArPSBzaXplKSlcbiAgfVxufVxuXG5jbGFzcyBTb3VyY2UgZXh0ZW5kcyBSZWFkYWJsZSB7XG4gIGNvbnN0cnVjdG9yIChzZWxmLCBoZWFkZXIsIG9mZnNldCkge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXMuaGVhZGVyID0gaGVhZGVyXG4gICAgdGhpcy5vZmZzZXQgPSBvZmZzZXRcblxuICAgIHRoaXMuX3BhcmVudCA9IHNlbGZcbiAgfVxuXG4gIF9yZWFkIChjYikge1xuICAgIGlmICh0aGlzLmhlYWRlci5zaXplID09PSAwKSB7XG4gICAgICB0aGlzLnB1c2gobnVsbClcbiAgICB9XG4gICAgaWYgKHRoaXMuX3BhcmVudC5fc3RyZWFtID09PSB0aGlzKSB7XG4gICAgICB0aGlzLl9wYXJlbnQuX3VwZGF0ZSgpXG4gICAgfVxuICAgIGNiKG51bGwpXG4gIH1cblxuICBfcHJlZGVzdHJveSAoKSB7XG4gICAgdGhpcy5fcGFyZW50LmRlc3Ryb3koZ2V0U3RyZWFtRXJyb3IodGhpcykpXG4gIH1cblxuICBfZGV0YWNoICgpIHtcbiAgICBpZiAodGhpcy5fcGFyZW50Ll9zdHJlYW0gPT09IHRoaXMpIHtcbiAgICAgIHRoaXMuX3BhcmVudC5fc3RyZWFtID0gbnVsbFxuICAgICAgdGhpcy5fcGFyZW50Ll9taXNzaW5nID0gb3ZlcmZsb3codGhpcy5oZWFkZXIuc2l6ZSlcbiAgICAgIHRoaXMuX3BhcmVudC5fdXBkYXRlKClcbiAgICB9XG4gIH1cblxuICBfZGVzdHJveSAoY2IpIHtcbiAgICB0aGlzLl9kZXRhY2goKVxuICAgIGNiKG51bGwpXG4gIH1cbn1cblxuY2xhc3MgRXh0cmFjdCBleHRlbmRzIFdyaXRhYmxlIHtcbiAgY29uc3RydWN0b3IgKG9wdHMpIHtcbiAgICBzdXBlcihvcHRzKVxuXG4gICAgaWYgKCFvcHRzKSBvcHRzID0ge31cblxuICAgIHRoaXMuX2J1ZmZlciA9IG5ldyBCdWZmZXJMaXN0KClcbiAgICB0aGlzLl9vZmZzZXQgPSAwXG4gICAgdGhpcy5faGVhZGVyID0gbnVsbFxuICAgIHRoaXMuX3N0cmVhbSA9IG51bGxcbiAgICB0aGlzLl9taXNzaW5nID0gMFxuICAgIHRoaXMuX2xvbmdIZWFkZXIgPSBmYWxzZVxuICAgIHRoaXMuX2NhbGxiYWNrID0gbm9vcFxuICAgIHRoaXMuX2xvY2tlZCA9IGZhbHNlXG4gICAgdGhpcy5fZmluaXNoZWQgPSBmYWxzZVxuICAgIHRoaXMuX3BheCA9IG51bGxcbiAgICB0aGlzLl9wYXhHbG9iYWwgPSBudWxsXG4gICAgdGhpcy5fZ251TG9uZ1BhdGggPSBudWxsXG4gICAgdGhpcy5fZ251TG9uZ0xpbmtQYXRoID0gbnVsbFxuICAgIHRoaXMuX2ZpbGVuYW1lRW5jb2RpbmcgPSBvcHRzLmZpbGVuYW1lRW5jb2RpbmcgfHwgJ3V0Zi04J1xuICAgIHRoaXMuX2FsbG93VW5rbm93bkZvcm1hdCA9ICEhb3B0cy5hbGxvd1Vua25vd25Gb3JtYXRcbiAgICB0aGlzLl91bmxvY2tCb3VuZCA9IHRoaXMuX3VubG9jay5iaW5kKHRoaXMpXG4gIH1cblxuICBfdW5sb2NrIChlcnIpIHtcbiAgICB0aGlzLl9sb2NrZWQgPSBmYWxzZVxuXG4gICAgaWYgKGVycikge1xuICAgICAgdGhpcy5kZXN0cm95KGVycilcbiAgICAgIHRoaXMuX2NvbnRpbnVlV3JpdGUoZXJyKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5fdXBkYXRlKClcbiAgfVxuXG4gIF9jb25zdW1lSGVhZGVyICgpIHtcbiAgICBpZiAodGhpcy5fbG9ja2VkKSByZXR1cm4gZmFsc2VcblxuICAgIHRoaXMuX29mZnNldCA9IHRoaXMuX2J1ZmZlci5zaGlmdGVkXG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5faGVhZGVyID0gaGVhZGVycy5kZWNvZGUodGhpcy5fYnVmZmVyLnNoaWZ0KDUxMiksIHRoaXMuX2ZpbGVuYW1lRW5jb2RpbmcsIHRoaXMuX2FsbG93VW5rbm93bkZvcm1hdClcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuX2NvbnRpbnVlV3JpdGUoZXJyKVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9oZWFkZXIpIHJldHVybiB0cnVlXG5cbiAgICBzd2l0Y2ggKHRoaXMuX2hlYWRlci50eXBlKSB7XG4gICAgICBjYXNlICdnbnUtbG9uZy1wYXRoJzpcbiAgICAgIGNhc2UgJ2dudS1sb25nLWxpbmstcGF0aCc6XG4gICAgICBjYXNlICdwYXgtZ2xvYmFsLWhlYWRlcic6XG4gICAgICBjYXNlICdwYXgtaGVhZGVyJzpcbiAgICAgICAgdGhpcy5fbG9uZ0hlYWRlciA9IHRydWVcbiAgICAgICAgdGhpcy5fbWlzc2luZyA9IHRoaXMuX2hlYWRlci5zaXplXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgdGhpcy5fbG9ja2VkID0gdHJ1ZVxuICAgIHRoaXMuX2FwcGx5TG9uZ0hlYWRlcnMoKVxuXG4gICAgaWYgKHRoaXMuX2hlYWRlci5zaXplID09PSAwIHx8IHRoaXMuX2hlYWRlci50eXBlID09PSAnZGlyZWN0b3J5Jykge1xuICAgICAgdGhpcy5lbWl0KCdlbnRyeScsIHRoaXMuX2hlYWRlciwgdGhpcy5fY3JlYXRlU3RyZWFtKCksIHRoaXMuX3VubG9ja0JvdW5kKVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICB0aGlzLl9zdHJlYW0gPSB0aGlzLl9jcmVhdGVTdHJlYW0oKVxuICAgIHRoaXMuX21pc3NpbmcgPSB0aGlzLl9oZWFkZXIuc2l6ZVxuXG4gICAgdGhpcy5lbWl0KCdlbnRyeScsIHRoaXMuX2hlYWRlciwgdGhpcy5fc3RyZWFtLCB0aGlzLl91bmxvY2tCb3VuZClcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgX2FwcGx5TG9uZ0hlYWRlcnMgKCkge1xuICAgIGlmICh0aGlzLl9nbnVMb25nUGF0aCkge1xuICAgICAgdGhpcy5faGVhZGVyLm5hbWUgPSB0aGlzLl9nbnVMb25nUGF0aFxuICAgICAgdGhpcy5fZ251TG9uZ1BhdGggPSBudWxsXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2dudUxvbmdMaW5rUGF0aCkge1xuICAgICAgdGhpcy5faGVhZGVyLmxpbmtuYW1lID0gdGhpcy5fZ251TG9uZ0xpbmtQYXRoXG4gICAgICB0aGlzLl9nbnVMb25nTGlua1BhdGggPSBudWxsXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3BheCkge1xuICAgICAgaWYgKHRoaXMuX3BheC5wYXRoKSB0aGlzLl9oZWFkZXIubmFtZSA9IHRoaXMuX3BheC5wYXRoXG4gICAgICBpZiAodGhpcy5fcGF4LmxpbmtwYXRoKSB0aGlzLl9oZWFkZXIubGlua25hbWUgPSB0aGlzLl9wYXgubGlua3BhdGhcbiAgICAgIGlmICh0aGlzLl9wYXguc2l6ZSkgdGhpcy5faGVhZGVyLnNpemUgPSBwYXJzZUludCh0aGlzLl9wYXguc2l6ZSwgMTApXG4gICAgICB0aGlzLl9oZWFkZXIucGF4ID0gdGhpcy5fcGF4XG4gICAgICB0aGlzLl9wYXggPSBudWxsXG4gICAgfVxuICB9XG5cbiAgX2RlY29kZUxvbmdIZWFkZXIgKGJ1Zikge1xuICAgIHN3aXRjaCAodGhpcy5faGVhZGVyLnR5cGUpIHtcbiAgICAgIGNhc2UgJ2dudS1sb25nLXBhdGgnOlxuICAgICAgICB0aGlzLl9nbnVMb25nUGF0aCA9IGhlYWRlcnMuZGVjb2RlTG9uZ1BhdGgoYnVmLCB0aGlzLl9maWxlbmFtZUVuY29kaW5nKVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnZ251LWxvbmctbGluay1wYXRoJzpcbiAgICAgICAgdGhpcy5fZ251TG9uZ0xpbmtQYXRoID0gaGVhZGVycy5kZWNvZGVMb25nUGF0aChidWYsIHRoaXMuX2ZpbGVuYW1lRW5jb2RpbmcpXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdwYXgtZ2xvYmFsLWhlYWRlcic6XG4gICAgICAgIHRoaXMuX3BheEdsb2JhbCA9IGhlYWRlcnMuZGVjb2RlUGF4KGJ1ZilcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ3BheC1oZWFkZXInOlxuICAgICAgICB0aGlzLl9wYXggPSB0aGlzLl9wYXhHbG9iYWwgPT09IG51bGxcbiAgICAgICAgICA/IGhlYWRlcnMuZGVjb2RlUGF4KGJ1ZilcbiAgICAgICAgICA6IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX3BheEdsb2JhbCwgaGVhZGVycy5kZWNvZGVQYXgoYnVmKSlcbiAgICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBfY29uc3VtZUxvbmdIZWFkZXIgKCkge1xuICAgIHRoaXMuX2xvbmdIZWFkZXIgPSBmYWxzZVxuICAgIHRoaXMuX21pc3NpbmcgPSBvdmVyZmxvdyh0aGlzLl9oZWFkZXIuc2l6ZSlcblxuICAgIGNvbnN0IGJ1ZiA9IHRoaXMuX2J1ZmZlci5zaGlmdCh0aGlzLl9oZWFkZXIuc2l6ZSlcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLl9kZWNvZGVMb25nSGVhZGVyKGJ1ZilcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuX2NvbnRpbnVlV3JpdGUoZXJyKVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIF9jb25zdW1lU3RyZWFtICgpIHtcbiAgICBjb25zdCBidWYgPSB0aGlzLl9idWZmZXIuc2hpZnRGaXJzdCh0aGlzLl9taXNzaW5nKVxuICAgIGlmIChidWYgPT09IG51bGwpIHJldHVybiBmYWxzZVxuXG4gICAgdGhpcy5fbWlzc2luZyAtPSBidWYuYnl0ZUxlbmd0aFxuICAgIGNvbnN0IGRyYWluZWQgPSB0aGlzLl9zdHJlYW0ucHVzaChidWYpXG5cbiAgICBpZiAodGhpcy5fbWlzc2luZyA9PT0gMCkge1xuICAgICAgdGhpcy5fc3RyZWFtLnB1c2gobnVsbClcbiAgICAgIGlmIChkcmFpbmVkKSB0aGlzLl9zdHJlYW0uX2RldGFjaCgpXG4gICAgICByZXR1cm4gZHJhaW5lZCAmJiB0aGlzLl9sb2NrZWQgPT09IGZhbHNlXG4gICAgfVxuXG4gICAgcmV0dXJuIGRyYWluZWRcbiAgfVxuXG4gIF9jcmVhdGVTdHJlYW0gKCkge1xuICAgIHJldHVybiBuZXcgU291cmNlKHRoaXMsIHRoaXMuX2hlYWRlciwgdGhpcy5fb2Zmc2V0KVxuICB9XG5cbiAgX3VwZGF0ZSAoKSB7XG4gICAgd2hpbGUgKHRoaXMuX2J1ZmZlci5idWZmZXJlZCA+IDAgJiYgIXRoaXMuZGVzdHJveWluZykge1xuICAgICAgaWYgKHRoaXMuX21pc3NpbmcgPiAwKSB7XG4gICAgICAgIGlmICh0aGlzLl9zdHJlYW0gIT09IG51bGwpIHtcbiAgICAgICAgICBpZiAodGhpcy5fY29uc3VtZVN0cmVhbSgpID09PSBmYWxzZSkgcmV0dXJuXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9sb25nSGVhZGVyID09PSB0cnVlKSB7XG4gICAgICAgICAgaWYgKHRoaXMuX21pc3NpbmcgPiB0aGlzLl9idWZmZXIuYnVmZmVyZWQpIGJyZWFrXG4gICAgICAgICAgaWYgKHRoaXMuX2NvbnN1bWVMb25nSGVhZGVyKCkgPT09IGZhbHNlKSByZXR1cm4gZmFsc2VcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaWdub3JlID0gdGhpcy5fYnVmZmVyLnNoaWZ0Rmlyc3QodGhpcy5fbWlzc2luZylcbiAgICAgICAgaWYgKGlnbm9yZSAhPT0gbnVsbCkgdGhpcy5fbWlzc2luZyAtPSBpZ25vcmUuYnl0ZUxlbmd0aFxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fYnVmZmVyLmJ1ZmZlcmVkIDwgNTEyKSBicmVha1xuICAgICAgaWYgKHRoaXMuX3N0cmVhbSAhPT0gbnVsbCB8fCB0aGlzLl9jb25zdW1lSGVhZGVyKCkgPT09IGZhbHNlKSByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9jb250aW51ZVdyaXRlKG51bGwpXG4gIH1cblxuICBfY29udGludWVXcml0ZSAoZXJyKSB7XG4gICAgY29uc3QgY2IgPSB0aGlzLl9jYWxsYmFja1xuICAgIHRoaXMuX2NhbGxiYWNrID0gbm9vcFxuICAgIGNiKGVycilcbiAgfVxuXG4gIF93cml0ZSAoZGF0YSwgY2IpIHtcbiAgICB0aGlzLl9jYWxsYmFjayA9IGNiXG4gICAgdGhpcy5fYnVmZmVyLnB1c2goZGF0YSlcbiAgICB0aGlzLl91cGRhdGUoKVxuICB9XG5cbiAgX2ZpbmFsIChjYikge1xuICAgIHRoaXMuX2ZpbmlzaGVkID0gdGhpcy5fbWlzc2luZyA9PT0gMCAmJiB0aGlzLl9idWZmZXIuYnVmZmVyZWQgPT09IDBcbiAgICBjYih0aGlzLl9maW5pc2hlZCA/IG51bGwgOiBuZXcgRXJyb3IoJ1VuZXhwZWN0ZWQgZW5kIG9mIGRhdGEnKSlcbiAgfVxuXG4gIF9wcmVkZXN0cm95ICgpIHtcbiAgICB0aGlzLl9jb250aW51ZVdyaXRlKG51bGwpXG4gIH1cblxuICBfZGVzdHJveSAoY2IpIHtcbiAgICBpZiAodGhpcy5fc3RyZWFtKSB0aGlzLl9zdHJlYW0uZGVzdHJveShnZXRTdHJlYW1FcnJvcih0aGlzKSlcbiAgICBjYihudWxsKVxuICB9XG5cbiAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSAoKSB7XG4gICAgbGV0IGVycm9yID0gbnVsbFxuXG4gICAgbGV0IHByb21pc2VSZXNvbHZlID0gbnVsbFxuICAgIGxldCBwcm9taXNlUmVqZWN0ID0gbnVsbFxuXG4gICAgbGV0IGVudHJ5U3RyZWFtID0gbnVsbFxuICAgIGxldCBlbnRyeUNhbGxiYWNrID0gbnVsbFxuXG4gICAgY29uc3QgZXh0cmFjdCA9IHRoaXNcblxuICAgIHRoaXMub24oJ2VudHJ5Jywgb25lbnRyeSlcbiAgICB0aGlzLm9uKCdlcnJvcicsIChlcnIpID0+IHsgZXJyb3IgPSBlcnIgfSlcbiAgICB0aGlzLm9uKCdjbG9zZScsIG9uY2xvc2UpXG5cbiAgICByZXR1cm4ge1xuICAgICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzXG4gICAgICB9LFxuICAgICAgbmV4dCAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShvbm5leHQpXG4gICAgICB9LFxuICAgICAgcmV0dXJuICgpIHtcbiAgICAgICAgcmV0dXJuIGRlc3Ryb3kobnVsbClcbiAgICAgIH0sXG4gICAgICB0aHJvdyAoZXJyKSB7XG4gICAgICAgIHJldHVybiBkZXN0cm95KGVycilcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb25zdW1lQ2FsbGJhY2sgKGVycikge1xuICAgICAgaWYgKCFlbnRyeUNhbGxiYWNrKSByZXR1cm5cbiAgICAgIGNvbnN0IGNiID0gZW50cnlDYWxsYmFja1xuICAgICAgZW50cnlDYWxsYmFjayA9IG51bGxcbiAgICAgIGNiKGVycilcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvbm5leHQgKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoZXJyb3IpXG4gICAgICB9XG5cbiAgICAgIGlmIChlbnRyeVN0cmVhbSkge1xuICAgICAgICByZXNvbHZlKHsgdmFsdWU6IGVudHJ5U3RyZWFtLCBkb25lOiBmYWxzZSB9KVxuICAgICAgICBlbnRyeVN0cmVhbSA9IG51bGxcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHByb21pc2VSZXNvbHZlID0gcmVzb2x2ZVxuICAgICAgcHJvbWlzZVJlamVjdCA9IHJlamVjdFxuXG4gICAgICBjb25zdW1lQ2FsbGJhY2sobnVsbClcblxuICAgICAgaWYgKGV4dHJhY3QuX2ZpbmlzaGVkICYmIHByb21pc2VSZXNvbHZlKSB7XG4gICAgICAgIHByb21pc2VSZXNvbHZlKHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9KVxuICAgICAgICBwcm9taXNlUmVzb2x2ZSA9IHByb21pc2VSZWplY3QgPSBudWxsXG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25lbnRyeSAoaGVhZGVyLCBzdHJlYW0sIGNhbGxiYWNrKSB7XG4gICAgICBlbnRyeUNhbGxiYWNrID0gY2FsbGJhY2tcbiAgICAgIHN0cmVhbS5vbignZXJyb3InLCBub29wKSAvLyBubyB3YXkgYXJvdW5kIHRoaXMgZHVlIHRvIHRpY2sgc2lsbHluZXNzXG5cbiAgICAgIGlmIChwcm9taXNlUmVzb2x2ZSkge1xuICAgICAgICBwcm9taXNlUmVzb2x2ZSh7IHZhbHVlOiBzdHJlYW0sIGRvbmU6IGZhbHNlIH0pXG4gICAgICAgIHByb21pc2VSZXNvbHZlID0gcHJvbWlzZVJlamVjdCA9IG51bGxcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVudHJ5U3RyZWFtID0gc3RyZWFtXG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25jbG9zZSAoKSB7XG4gICAgICBjb25zdW1lQ2FsbGJhY2soZXJyb3IpXG4gICAgICBpZiAoIXByb21pc2VSZXNvbHZlKSByZXR1cm5cbiAgICAgIGlmIChlcnJvcikgcHJvbWlzZVJlamVjdChlcnJvcilcbiAgICAgIGVsc2UgcHJvbWlzZVJlc29sdmUoeyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH0pXG4gICAgICBwcm9taXNlUmVzb2x2ZSA9IHByb21pc2VSZWplY3QgPSBudWxsXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVzdHJveSAoZXJyKSB7XG4gICAgICBleHRyYWN0LmRlc3Ryb3koZXJyKVxuICAgICAgY29uc3VtZUNhbGxiYWNrKGVycilcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGlmIChleHRyYWN0LmRlc3Ryb3llZCkgcmV0dXJuIHJlc29sdmUoeyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH0pXG4gICAgICAgIGV4dHJhY3Qub25jZSgnY2xvc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKGVycikgcmVqZWN0KGVycilcbiAgICAgICAgICBlbHNlIHJlc29sdmUoeyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH0pXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGV4dHJhY3QgKG9wdHMpIHtcbiAgcmV0dXJuIG5ldyBFeHRyYWN0KG9wdHMpXG59XG5cbmZ1bmN0aW9uIG5vb3AgKCkge31cblxuZnVuY3Rpb24gb3ZlcmZsb3cgKHNpemUpIHtcbiAgc2l6ZSAmPSA1MTFcbiAgcmV0dXJuIHNpemUgJiYgNTEyIC0gc2l6ZVxufVxuIiwKICAgICJjb25zdCBjb25zdGFudHMgPSB7IC8vIGp1c3QgZm9yIGVudnMgd2l0aG91dCBmc1xuICBTX0lGTVQ6IDYxNDQwLFxuICBTX0lGRElSOiAxNjM4NCxcbiAgU19JRkNIUjogODE5MixcbiAgU19JRkJMSzogMjQ1NzYsXG4gIFNfSUZJRk86IDQwOTYsXG4gIFNfSUZMTks6IDQwOTYwXG59XG5cbnRyeSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnZnMnKS5jb25zdGFudHMgfHwgY29uc3RhbnRzXG59IGNhdGNoIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBjb25zdGFudHNcbn1cbiIsCiAgICAiY29uc3QgeyBSZWFkYWJsZSwgV3JpdGFibGUsIGdldFN0cmVhbUVycm9yIH0gPSByZXF1aXJlKCdzdHJlYW14JylcbmNvbnN0IGI0YSA9IHJlcXVpcmUoJ2I0YScpXG5cbmNvbnN0IGNvbnN0YW50cyA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IGhlYWRlcnMgPSByZXF1aXJlKCcuL2hlYWRlcnMnKVxuXG5jb25zdCBETU9ERSA9IDBvNzU1XG5jb25zdCBGTU9ERSA9IDBvNjQ0XG5cbmNvbnN0IEVORF9PRl9UQVIgPSBiNGEuYWxsb2MoMTAyNClcblxuY2xhc3MgU2luayBleHRlbmRzIFdyaXRhYmxlIHtcbiAgY29uc3RydWN0b3IgKHBhY2ssIGhlYWRlciwgY2FsbGJhY2spIHtcbiAgICBzdXBlcih7IG1hcFdyaXRhYmxlLCBlYWdlck9wZW46IHRydWUgfSlcblxuICAgIHRoaXMud3JpdHRlbiA9IDBcbiAgICB0aGlzLmhlYWRlciA9IGhlYWRlclxuXG4gICAgdGhpcy5fY2FsbGJhY2sgPSBjYWxsYmFja1xuICAgIHRoaXMuX2xpbmtuYW1lID0gbnVsbFxuICAgIHRoaXMuX2lzTGlua25hbWUgPSBoZWFkZXIudHlwZSA9PT0gJ3N5bWxpbmsnICYmICFoZWFkZXIubGlua25hbWVcbiAgICB0aGlzLl9pc1ZvaWQgPSBoZWFkZXIudHlwZSAhPT0gJ2ZpbGUnICYmIGhlYWRlci50eXBlICE9PSAnY29udGlndW91cy1maWxlJ1xuICAgIHRoaXMuX2ZpbmlzaGVkID0gZmFsc2VcbiAgICB0aGlzLl9wYWNrID0gcGFja1xuICAgIHRoaXMuX29wZW5DYWxsYmFjayA9IG51bGxcblxuICAgIGlmICh0aGlzLl9wYWNrLl9zdHJlYW0gPT09IG51bGwpIHRoaXMuX3BhY2suX3N0cmVhbSA9IHRoaXNcbiAgICBlbHNlIHRoaXMuX3BhY2suX3BlbmRpbmcucHVzaCh0aGlzKVxuICB9XG5cbiAgX29wZW4gKGNiKSB7XG4gICAgdGhpcy5fb3BlbkNhbGxiYWNrID0gY2JcbiAgICBpZiAodGhpcy5fcGFjay5fc3RyZWFtID09PSB0aGlzKSB0aGlzLl9jb250aW51ZU9wZW4oKVxuICB9XG5cbiAgX2NvbnRpbnVlUGFjayAoZXJyKSB7XG4gICAgaWYgKHRoaXMuX2NhbGxiYWNrID09PSBudWxsKSByZXR1cm5cblxuICAgIGNvbnN0IGNhbGxiYWNrID0gdGhpcy5fY2FsbGJhY2tcbiAgICB0aGlzLl9jYWxsYmFjayA9IG51bGxcblxuICAgIGNhbGxiYWNrKGVycilcbiAgfVxuXG4gIF9jb250aW51ZU9wZW4gKCkge1xuICAgIGlmICh0aGlzLl9wYWNrLl9zdHJlYW0gPT09IG51bGwpIHRoaXMuX3BhY2suX3N0cmVhbSA9IHRoaXNcblxuICAgIGNvbnN0IGNiID0gdGhpcy5fb3BlbkNhbGxiYWNrXG4gICAgdGhpcy5fb3BlbkNhbGxiYWNrID0gbnVsbFxuICAgIGlmIChjYiA9PT0gbnVsbCkgcmV0dXJuXG5cbiAgICBpZiAodGhpcy5fcGFjay5kZXN0cm95aW5nKSByZXR1cm4gY2IobmV3IEVycm9yKCdwYWNrIHN0cmVhbSBkZXN0cm95ZWQnKSlcbiAgICBpZiAodGhpcy5fcGFjay5fZmluYWxpemVkKSByZXR1cm4gY2IobmV3IEVycm9yKCdwYWNrIHN0cmVhbSBpcyBhbHJlYWR5IGZpbmFsaXplZCcpKVxuXG4gICAgdGhpcy5fcGFjay5fc3RyZWFtID0gdGhpc1xuXG4gICAgaWYgKCF0aGlzLl9pc0xpbmtuYW1lKSB7XG4gICAgICB0aGlzLl9wYWNrLl9lbmNvZGUodGhpcy5oZWFkZXIpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2lzVm9pZCkge1xuICAgICAgdGhpcy5fZmluaXNoKClcbiAgICAgIHRoaXMuX2NvbnRpbnVlUGFjayhudWxsKVxuICAgIH1cblxuICAgIGNiKG51bGwpXG4gIH1cblxuICBfd3JpdGUgKGRhdGEsIGNiKSB7XG4gICAgaWYgKHRoaXMuX2lzTGlua25hbWUpIHtcbiAgICAgIHRoaXMuX2xpbmtuYW1lID0gdGhpcy5fbGlua25hbWUgPyBiNGEuY29uY2F0KFt0aGlzLl9saW5rbmFtZSwgZGF0YV0pIDogZGF0YVxuICAgICAgcmV0dXJuIGNiKG51bGwpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2lzVm9pZCkge1xuICAgICAgaWYgKGRhdGEuYnl0ZUxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIGNiKG5ldyBFcnJvcignTm8gYm9keSBhbGxvd2VkIGZvciB0aGlzIGVudHJ5JykpXG4gICAgICB9XG4gICAgICByZXR1cm4gY2IoKVxuICAgIH1cblxuICAgIHRoaXMud3JpdHRlbiArPSBkYXRhLmJ5dGVMZW5ndGhcbiAgICBpZiAodGhpcy5fcGFjay5wdXNoKGRhdGEpKSByZXR1cm4gY2IoKVxuICAgIHRoaXMuX3BhY2suX2RyYWluID0gY2JcbiAgfVxuXG4gIF9maW5pc2ggKCkge1xuICAgIGlmICh0aGlzLl9maW5pc2hlZCkgcmV0dXJuXG4gICAgdGhpcy5fZmluaXNoZWQgPSB0cnVlXG5cbiAgICBpZiAodGhpcy5faXNMaW5rbmFtZSkge1xuICAgICAgdGhpcy5oZWFkZXIubGlua25hbWUgPSB0aGlzLl9saW5rbmFtZSA/IGI0YS50b1N0cmluZyh0aGlzLl9saW5rbmFtZSwgJ3V0Zi04JykgOiAnJ1xuICAgICAgdGhpcy5fcGFjay5fZW5jb2RlKHRoaXMuaGVhZGVyKVxuICAgIH1cblxuICAgIG92ZXJmbG93KHRoaXMuX3BhY2ssIHRoaXMuaGVhZGVyLnNpemUpXG5cbiAgICB0aGlzLl9wYWNrLl9kb25lKHRoaXMpXG4gIH1cblxuICBfZmluYWwgKGNiKSB7XG4gICAgaWYgKHRoaXMud3JpdHRlbiAhPT0gdGhpcy5oZWFkZXIuc2l6ZSkgeyAvLyBjb3JydXB0aW5nIHRhclxuICAgICAgcmV0dXJuIGNiKG5ldyBFcnJvcignU2l6ZSBtaXNtYXRjaCcpKVxuICAgIH1cblxuICAgIHRoaXMuX2ZpbmlzaCgpXG4gICAgY2IobnVsbClcbiAgfVxuXG4gIF9nZXRFcnJvciAoKSB7XG4gICAgcmV0dXJuIGdldFN0cmVhbUVycm9yKHRoaXMpIHx8IG5ldyBFcnJvcigndGFyIGVudHJ5IGRlc3Ryb3llZCcpXG4gIH1cblxuICBfcHJlZGVzdHJveSAoKSB7XG4gICAgdGhpcy5fcGFjay5kZXN0cm95KHRoaXMuX2dldEVycm9yKCkpXG4gIH1cblxuICBfZGVzdHJveSAoY2IpIHtcbiAgICB0aGlzLl9wYWNrLl9kb25lKHRoaXMpXG5cbiAgICB0aGlzLl9jb250aW51ZVBhY2sodGhpcy5fZmluaXNoZWQgPyBudWxsIDogdGhpcy5fZ2V0RXJyb3IoKSlcblxuICAgIGNiKClcbiAgfVxufVxuXG5jbGFzcyBQYWNrIGV4dGVuZHMgUmVhZGFibGUge1xuICBjb25zdHJ1Y3RvciAob3B0cykge1xuICAgIHN1cGVyKG9wdHMpXG4gICAgdGhpcy5fZHJhaW4gPSBub29wXG4gICAgdGhpcy5fZmluYWxpemVkID0gZmFsc2VcbiAgICB0aGlzLl9maW5hbGl6aW5nID0gZmFsc2VcbiAgICB0aGlzLl9wZW5kaW5nID0gW11cbiAgICB0aGlzLl9zdHJlYW0gPSBudWxsXG4gIH1cblxuICBlbnRyeSAoaGVhZGVyLCBidWZmZXIsIGNhbGxiYWNrKSB7XG4gICAgaWYgKHRoaXMuX2ZpbmFsaXplZCB8fCB0aGlzLmRlc3Ryb3lpbmcpIHRocm93IG5ldyBFcnJvcignYWxyZWFkeSBmaW5hbGl6ZWQgb3IgZGVzdHJveWVkJylcblxuICAgIGlmICh0eXBlb2YgYnVmZmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjYWxsYmFjayA9IGJ1ZmZlclxuICAgICAgYnVmZmVyID0gbnVsbFxuICAgIH1cblxuICAgIGlmICghY2FsbGJhY2spIGNhbGxiYWNrID0gbm9vcFxuXG4gICAgaWYgKCFoZWFkZXIuc2l6ZSB8fCBoZWFkZXIudHlwZSA9PT0gJ3N5bWxpbmsnKSBoZWFkZXIuc2l6ZSA9IDBcbiAgICBpZiAoIWhlYWRlci50eXBlKSBoZWFkZXIudHlwZSA9IG1vZGVUb1R5cGUoaGVhZGVyLm1vZGUpXG4gICAgaWYgKCFoZWFkZXIubW9kZSkgaGVhZGVyLm1vZGUgPSBoZWFkZXIudHlwZSA9PT0gJ2RpcmVjdG9yeScgPyBETU9ERSA6IEZNT0RFXG4gICAgaWYgKCFoZWFkZXIudWlkKSBoZWFkZXIudWlkID0gMFxuICAgIGlmICghaGVhZGVyLmdpZCkgaGVhZGVyLmdpZCA9IDBcbiAgICBpZiAoIWhlYWRlci5tdGltZSkgaGVhZGVyLm10aW1lID0gbmV3IERhdGUoKVxuXG4gICAgaWYgKHR5cGVvZiBidWZmZXIgPT09ICdzdHJpbmcnKSBidWZmZXIgPSBiNGEuZnJvbShidWZmZXIpXG5cbiAgICBjb25zdCBzaW5rID0gbmV3IFNpbmsodGhpcywgaGVhZGVyLCBjYWxsYmFjaylcblxuICAgIGlmIChiNGEuaXNCdWZmZXIoYnVmZmVyKSkge1xuICAgICAgaGVhZGVyLnNpemUgPSBidWZmZXIuYnl0ZUxlbmd0aFxuICAgICAgc2luay53cml0ZShidWZmZXIpXG4gICAgICBzaW5rLmVuZCgpXG4gICAgICByZXR1cm4gc2lua1xuICAgIH1cblxuICAgIGlmIChzaW5rLl9pc1ZvaWQpIHtcbiAgICAgIHJldHVybiBzaW5rXG4gICAgfVxuXG4gICAgcmV0dXJuIHNpbmtcbiAgfVxuXG4gIGZpbmFsaXplICgpIHtcbiAgICBpZiAodGhpcy5fc3RyZWFtIHx8IHRoaXMuX3BlbmRpbmcubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5fZmluYWxpemluZyA9IHRydWVcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICh0aGlzLl9maW5hbGl6ZWQpIHJldHVyblxuICAgIHRoaXMuX2ZpbmFsaXplZCA9IHRydWVcblxuICAgIHRoaXMucHVzaChFTkRfT0ZfVEFSKVxuICAgIHRoaXMucHVzaChudWxsKVxuICB9XG5cbiAgX2RvbmUgKHN0cmVhbSkge1xuICAgIGlmIChzdHJlYW0gIT09IHRoaXMuX3N0cmVhbSkgcmV0dXJuXG5cbiAgICB0aGlzLl9zdHJlYW0gPSBudWxsXG5cbiAgICBpZiAodGhpcy5fZmluYWxpemluZykgdGhpcy5maW5hbGl6ZSgpXG4gICAgaWYgKHRoaXMuX3BlbmRpbmcubGVuZ3RoKSB0aGlzLl9wZW5kaW5nLnNoaWZ0KCkuX2NvbnRpbnVlT3BlbigpXG4gIH1cblxuICBfZW5jb2RlIChoZWFkZXIpIHtcbiAgICBpZiAoIWhlYWRlci5wYXgpIHtcbiAgICAgIGNvbnN0IGJ1ZiA9IGhlYWRlcnMuZW5jb2RlKGhlYWRlcilcbiAgICAgIGlmIChidWYpIHtcbiAgICAgICAgdGhpcy5wdXNoKGJ1ZilcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX2VuY29kZVBheChoZWFkZXIpXG4gIH1cblxuICBfZW5jb2RlUGF4IChoZWFkZXIpIHtcbiAgICBjb25zdCBwYXhIZWFkZXIgPSBoZWFkZXJzLmVuY29kZVBheCh7XG4gICAgICBuYW1lOiBoZWFkZXIubmFtZSxcbiAgICAgIGxpbmtuYW1lOiBoZWFkZXIubGlua25hbWUsXG4gICAgICBwYXg6IGhlYWRlci5wYXhcbiAgICB9KVxuXG4gICAgY29uc3QgbmV3SGVhZGVyID0ge1xuICAgICAgbmFtZTogJ1BheEhlYWRlcicsXG4gICAgICBtb2RlOiBoZWFkZXIubW9kZSxcbiAgICAgIHVpZDogaGVhZGVyLnVpZCxcbiAgICAgIGdpZDogaGVhZGVyLmdpZCxcbiAgICAgIHNpemU6IHBheEhlYWRlci5ieXRlTGVuZ3RoLFxuICAgICAgbXRpbWU6IGhlYWRlci5tdGltZSxcbiAgICAgIHR5cGU6ICdwYXgtaGVhZGVyJyxcbiAgICAgIGxpbmtuYW1lOiBoZWFkZXIubGlua25hbWUgJiYgJ1BheEhlYWRlcicsXG4gICAgICB1bmFtZTogaGVhZGVyLnVuYW1lLFxuICAgICAgZ25hbWU6IGhlYWRlci5nbmFtZSxcbiAgICAgIGRldm1ham9yOiBoZWFkZXIuZGV2bWFqb3IsXG4gICAgICBkZXZtaW5vcjogaGVhZGVyLmRldm1pbm9yXG4gICAgfVxuXG4gICAgdGhpcy5wdXNoKGhlYWRlcnMuZW5jb2RlKG5ld0hlYWRlcikpXG4gICAgdGhpcy5wdXNoKHBheEhlYWRlcilcbiAgICBvdmVyZmxvdyh0aGlzLCBwYXhIZWFkZXIuYnl0ZUxlbmd0aClcblxuICAgIG5ld0hlYWRlci5zaXplID0gaGVhZGVyLnNpemVcbiAgICBuZXdIZWFkZXIudHlwZSA9IGhlYWRlci50eXBlXG4gICAgdGhpcy5wdXNoKGhlYWRlcnMuZW5jb2RlKG5ld0hlYWRlcikpXG4gIH1cblxuICBfZG9EcmFpbiAoKSB7XG4gICAgY29uc3QgZHJhaW4gPSB0aGlzLl9kcmFpblxuICAgIHRoaXMuX2RyYWluID0gbm9vcFxuICAgIGRyYWluKClcbiAgfVxuXG4gIF9wcmVkZXN0cm95ICgpIHtcbiAgICBjb25zdCBlcnIgPSBnZXRTdHJlYW1FcnJvcih0aGlzKVxuXG4gICAgaWYgKHRoaXMuX3N0cmVhbSkgdGhpcy5fc3RyZWFtLmRlc3Ryb3koZXJyKVxuXG4gICAgd2hpbGUgKHRoaXMuX3BlbmRpbmcubGVuZ3RoKSB7XG4gICAgICBjb25zdCBzdHJlYW0gPSB0aGlzLl9wZW5kaW5nLnNoaWZ0KClcbiAgICAgIHN0cmVhbS5kZXN0cm95KGVycilcbiAgICAgIHN0cmVhbS5fY29udGludWVPcGVuKClcbiAgICB9XG5cbiAgICB0aGlzLl9kb0RyYWluKClcbiAgfVxuXG4gIF9yZWFkIChjYikge1xuICAgIHRoaXMuX2RvRHJhaW4oKVxuICAgIGNiKClcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHBhY2sgKG9wdHMpIHtcbiAgcmV0dXJuIG5ldyBQYWNrKG9wdHMpXG59XG5cbmZ1bmN0aW9uIG1vZGVUb1R5cGUgKG1vZGUpIHtcbiAgc3dpdGNoIChtb2RlICYgY29uc3RhbnRzLlNfSUZNVCkge1xuICAgIGNhc2UgY29uc3RhbnRzLlNfSUZCTEs6IHJldHVybiAnYmxvY2stZGV2aWNlJ1xuICAgIGNhc2UgY29uc3RhbnRzLlNfSUZDSFI6IHJldHVybiAnY2hhcmFjdGVyLWRldmljZSdcbiAgICBjYXNlIGNvbnN0YW50cy5TX0lGRElSOiByZXR1cm4gJ2RpcmVjdG9yeSdcbiAgICBjYXNlIGNvbnN0YW50cy5TX0lGSUZPOiByZXR1cm4gJ2ZpZm8nXG4gICAgY2FzZSBjb25zdGFudHMuU19JRkxOSzogcmV0dXJuICdzeW1saW5rJ1xuICB9XG5cbiAgcmV0dXJuICdmaWxlJ1xufVxuXG5mdW5jdGlvbiBub29wICgpIHt9XG5cbmZ1bmN0aW9uIG92ZXJmbG93IChzZWxmLCBzaXplKSB7XG4gIHNpemUgJj0gNTExXG4gIGlmIChzaXplKSBzZWxmLnB1c2goRU5EX09GX1RBUi5zdWJhcnJheSgwLCA1MTIgLSBzaXplKSlcbn1cblxuZnVuY3Rpb24gbWFwV3JpdGFibGUgKGJ1Zikge1xuICByZXR1cm4gYjRhLmlzQnVmZmVyKGJ1ZikgPyBidWYgOiBiNGEuZnJvbShidWYpXG59XG4iLAogICAgImV4cG9ydHMuZXh0cmFjdCA9IHJlcXVpcmUoJy4vZXh0cmFjdCcpXG5leHBvcnRzLnBhY2sgPSByZXF1aXJlKCcuL3BhY2snKVxuIiwKICAgICIvKipcbiAqIFRBUiBGb3JtYXQgUGx1Z2luXG4gKlxuICogQG1vZHVsZSBwbHVnaW5zL3RhclxuICogQGxpY2Vuc2UgW01JVF17QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FyY2hpdmVyanMvbm9kZS1hcmNoaXZlci9ibG9iL21hc3Rlci9MSUNFTlNFfVxuICogQGNvcHlyaWdodCAoYykgMjAxMi0yMDE0IENocmlzIFRhbGtpbmd0b24sIGNvbnRyaWJ1dG9ycy5cbiAqL1xudmFyIHpsaWIgPSByZXF1aXJlKCd6bGliJyk7XG5cbnZhciBlbmdpbmUgPSByZXF1aXJlKCd0YXItc3RyZWFtJyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJ2FyY2hpdmVyLXV0aWxzJyk7XG5cbi8qKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge1Rhck9wdGlvbnN9IG9wdGlvbnNcbiAqL1xudmFyIFRhciA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFRhcikpIHtcbiAgICByZXR1cm4gbmV3IFRhcihvcHRpb25zKTtcbiAgfVxuXG4gIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMgPSB1dGlsLmRlZmF1bHRzKG9wdGlvbnMsIHtcbiAgICBnemlwOiBmYWxzZVxuICB9KTtcblxuICBpZiAodHlwZW9mIG9wdGlvbnMuZ3ppcE9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgb3B0aW9ucy5nemlwT3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgdGhpcy5zdXBwb3J0cyA9IHtcbiAgICBkaXJlY3Rvcnk6IHRydWUsXG4gICAgc3ltbGluazogdHJ1ZVxuICB9O1xuXG4gIHRoaXMuZW5naW5lID0gZW5naW5lLnBhY2sob3B0aW9ucyk7XG4gIHRoaXMuY29tcHJlc3NvciA9IGZhbHNlO1xuXG4gIGlmIChvcHRpb25zLmd6aXApIHtcbiAgICB0aGlzLmNvbXByZXNzb3IgPSB6bGliLmNyZWF0ZUd6aXAob3B0aW9ucy5nemlwT3B0aW9ucyk7XG4gICAgdGhpcy5jb21wcmVzc29yLm9uKCdlcnJvcicsIHRoaXMuX29uQ29tcHJlc3NvckVycm9yLmJpbmQodGhpcykpO1xuICB9XG59O1xuXG4vKipcbiAqIFtfb25Db21wcmVzc29yRXJyb3IgZGVzY3JpcHRpb25dXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSAge0Vycm9yfSBlcnJcbiAqIEByZXR1cm4gdm9pZFxuICovXG5UYXIucHJvdG90eXBlLl9vbkNvbXByZXNzb3JFcnJvciA9IGZ1bmN0aW9uKGVycikge1xuICB0aGlzLmVuZ2luZS5lbWl0KCdlcnJvcicsIGVycik7XG59O1xuXG4vKipcbiAqIFthcHBlbmQgZGVzY3JpcHRpb25dXG4gKlxuICogQHBhcmFtICB7KEJ1ZmZlcnxTdHJlYW0pfSBzb3VyY2VcbiAqIEBwYXJhbSAge1RhckVudHJ5RGF0YX0gZGF0YVxuICogQHBhcmFtICB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHZvaWRcbiAqL1xuVGFyLnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbihzb3VyY2UsIGRhdGEsIGNhbGxiYWNrKSB7XG4gIHZhciBzZWxmID0gdGhpcztcblxuICBkYXRhLm10aW1lID0gZGF0YS5kYXRlO1xuXG4gIGZ1bmN0aW9uIGFwcGVuZChlcnIsIHNvdXJjZUJ1ZmZlcikge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2VsZi5lbmdpbmUuZW50cnkoZGF0YSwgc291cmNlQnVmZmVyLCBmdW5jdGlvbihlcnIpIHtcbiAgICAgIGNhbGxiYWNrKGVyciwgZGF0YSk7XG4gICAgfSk7XG4gIH1cblxuICBpZiAoZGF0YS5zb3VyY2VUeXBlID09PSAnYnVmZmVyJykge1xuICAgIGFwcGVuZChudWxsLCBzb3VyY2UpO1xuICB9IGVsc2UgaWYgKGRhdGEuc291cmNlVHlwZSA9PT0gJ3N0cmVhbScgJiYgZGF0YS5zdGF0cykge1xuICAgIGRhdGEuc2l6ZSA9IGRhdGEuc3RhdHMuc2l6ZTtcblxuICAgIHZhciBlbnRyeSA9IHNlbGYuZW5naW5lLmVudHJ5KGRhdGEsIGZ1bmN0aW9uKGVycikge1xuICAgICAgY2FsbGJhY2soZXJyLCBkYXRhKTtcbiAgICB9KTtcblxuICAgIHNvdXJjZS5waXBlKGVudHJ5KTtcbiAgfSBlbHNlIGlmIChkYXRhLnNvdXJjZVR5cGUgPT09ICdzdHJlYW0nKSB7XG4gICAgdXRpbC5jb2xsZWN0U3RyZWFtKHNvdXJjZSwgYXBwZW5kKTtcbiAgfVxufTtcblxuLyoqXG4gKiBbZmluYWxpemUgZGVzY3JpcHRpb25dXG4gKlxuICogQHJldHVybiB2b2lkXG4gKi9cblRhci5wcm90b3R5cGUuZmluYWxpemUgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5lbmdpbmUuZmluYWxpemUoKTtcbn07XG5cbi8qKlxuICogW29uIGRlc2NyaXB0aW9uXVxuICpcbiAqIEByZXR1cm4gdGhpcy5lbmdpbmVcbiAqL1xuVGFyLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5lbmdpbmUub24uYXBwbHkodGhpcy5lbmdpbmUsIGFyZ3VtZW50cyk7XG59O1xuXG4vKipcbiAqIFtwaXBlIGRlc2NyaXB0aW9uXVxuICpcbiAqIEBwYXJhbSAge1N0cmluZ30gZGVzdGluYXRpb25cbiAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9uc1xuICogQHJldHVybiB0aGlzLmVuZ2luZVxuICovXG5UYXIucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbihkZXN0aW5hdGlvbiwgb3B0aW9ucykge1xuICBpZiAodGhpcy5jb21wcmVzc29yKSB7XG4gICAgcmV0dXJuIHRoaXMuZW5naW5lLnBpcGUuYXBwbHkodGhpcy5lbmdpbmUsIFt0aGlzLmNvbXByZXNzb3JdKS5waXBlKGRlc3RpbmF0aW9uLCBvcHRpb25zKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdGhpcy5lbmdpbmUucGlwZS5hcHBseSh0aGlzLmVuZ2luZSwgYXJndW1lbnRzKTtcbiAgfVxufTtcblxuLyoqXG4gKiBbdW5waXBlIGRlc2NyaXB0aW9uXVxuICpcbiAqIEByZXR1cm4gdGhpcy5lbmdpbmVcbiAqL1xuVGFyLnByb3RvdHlwZS51bnBpcGUgPSBmdW5jdGlvbigpIHtcbiAgaWYgKHRoaXMuY29tcHJlc3Nvcikge1xuICAgIHJldHVybiB0aGlzLmNvbXByZXNzb3IudW5waXBlLmFwcGx5KHRoaXMuY29tcHJlc3NvciwgYXJndW1lbnRzKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdGhpcy5lbmdpbmUudW5waXBlLmFwcGx5KHRoaXMuZW5naW5lLCBhcmd1bWVudHMpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFRhcjtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBUYXJPcHRpb25zXG4gKiBAZ2xvYmFsXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IFtnemlwPWZhbHNlXSBDb21wcmVzcyB0aGUgdGFyIGFyY2hpdmUgdXNpbmcgZ3ppcC5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbZ3ppcE9wdGlvbnNdIFBhc3NlZCB0byBbemxpYl17QGxpbmsgaHR0cHM6Ly9ub2RlanMub3JnL2FwaS96bGliLmh0bWwjemxpYl9jbGFzc19vcHRpb25zfVxuICogdG8gY29udHJvbCBjb21wcmVzc2lvbi5cbiAqIEBwcm9wZXJ0eSB7Kn0gWypdIFNlZSBbdGFyLXN0cmVhbV17QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL21hZmludG9zaC90YXItc3RyZWFtfSBkb2N1bWVudGF0aW9uIGZvciBhZGRpdGlvbmFsIHByb3BlcnRpZXMuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBUYXJFbnRyeURhdGFcbiAqIEBnbG9iYWxcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBuYW1lIFNldHMgdGhlIGVudHJ5IG5hbWUgaW5jbHVkaW5nIGludGVybmFsIHBhdGguXG4gKiBAcHJvcGVydHkgeyhTdHJpbmd8RGF0ZSl9IFtkYXRlPU5PVygpXSBTZXRzIHRoZSBlbnRyeSBkYXRlLlxuICogQHByb3BlcnR5IHtOdW1iZXJ9IFttb2RlPUQ6MDc1NS9GOjA2NDRdIFNldHMgdGhlIGVudHJ5IHBlcm1pc3Npb25zLlxuICogQHByb3BlcnR5IHtTdHJpbmd9IFtwcmVmaXhdIFNldHMgYSBwYXRoIHByZWZpeCBmb3IgdGhlIGVudHJ5IG5hbWUuIFVzZWZ1bFxuICogd2hlbiB3b3JraW5nIHdpdGggbWV0aG9kcyBsaWtlIGBkaXJlY3RvcnlgIG9yIGBnbG9iYC5cbiAqIEBwcm9wZXJ0eSB7ZnMuU3RhdHN9IFtzdGF0c10gU2V0cyB0aGUgZnMgc3RhdCBkYXRhIGZvciB0aGlzIGVudHJ5IGFsbG93aW5nXG4gKiBmb3IgcmVkdWN0aW9uIG9mIGZzIHN0YXQgY2FsbHMgd2hlbiBzdGF0IGRhdGEgaXMgYWxyZWFkeSBrbm93bi5cbiAqL1xuXG4vKipcbiAqIFRhclN0cmVhbSBNb2R1bGVcbiAqIEBleHRlcm5hbCBUYXJTdHJlYW1cbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9tYWZpbnRvc2gvdGFyLXN0cmVhbX1cbiAqL1xuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIGdldERlZmF1bHRFeHBvcnRGcm9tQ2pzICh4KSB7XG5cdHJldHVybiB4ICYmIHguX19lc01vZHVsZSAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoeCwgJ2RlZmF1bHQnKSA/IHhbJ2RlZmF1bHQnXSA6IHg7XG59XG5cbmNvbnN0IENSQ19UQUJMRSA9IG5ldyBJbnQzMkFycmF5KFtcbiAgMCxcbiAgMTk5Njk1OTg5NCxcbiAgMzk5MzkxOTc4OCxcbiAgMjU2NzUyNDc5NCxcbiAgMTI0NjM0MTM3LFxuICAxODg2MDU3NjE1LFxuICAzOTE1NjIxNjg1LFxuICAyNjU3MzkyMDM1LFxuICAyNDkyNjgyNzQsXG4gIDIwNDQ1MDgzMjQsXG4gIDM3NzIxMTUyMzAsXG4gIDI1NDcxNzc4NjQsXG4gIDE2Mjk0MTk5NSxcbiAgMjEyNTU2MTAyMSxcbiAgMzg4NzYwNzA0NyxcbiAgMjQyODQ0NDA0OSxcbiAgNDk4NTM2NTQ4LFxuICAxNzg5OTI3NjY2LFxuICA0MDg5MDE2NjQ4LFxuICAyMjI3MDYxMjE0LFxuICA0NTA1NDg4NjEsXG4gIDE4NDMyNTg2MDMsXG4gIDQxMDc1ODA3NTMsXG4gIDIyMTE2Nzc2MzksXG4gIDMyNTg4Mzk5MCxcbiAgMTY4NDc3NzE1MixcbiAgNDI1MTEyMjA0MixcbiAgMjMyMTkyNjYzNixcbiAgMzM1NjMzNDg3LFxuICAxNjYxMzY1NDY1LFxuICA0MTk1MzAyNzU1LFxuICAyMzY2MTE1MzE3LFxuICA5OTcwNzMwOTYsXG4gIDEyODE5NTM4ODYsXG4gIDM1Nzk4NTUzMzIsXG4gIDI3MjQ2ODgyNDIsXG4gIDEwMDY4ODgxNDUsXG4gIDEyNTg2MDc2ODcsXG4gIDM1MjQxMDE2MjksXG4gIDI3Njg5NDI0NDMsXG4gIDkwMTA5NzcyMixcbiAgMTExOTAwMDY4NCxcbiAgMzY4NjUxNzIwNixcbiAgMjg5ODA2NTcyOCxcbiAgODUzMDQ0NDUxLFxuICAxMTcyMjY2MTAxLFxuICAzNzA1MDE1NzU5LFxuICAyODgyNjE2NjY1LFxuICA2NTE3Njc5ODAsXG4gIDEzNzM1MDM1NDYsXG4gIDMzNjk1NTQzMDQsXG4gIDMyMTgxMDQ1OTgsXG4gIDU2NTUwNzI1MyxcbiAgMTQ1NDYyMTczMSxcbiAgMzQ4NTExMTcwNSxcbiAgMzA5OTQzNjMwMyxcbiAgNjcxMjY2OTc0LFxuICAxNTk0MTk4MDI0LFxuICAzMzIyNzMwOTMwLFxuICAyOTcwMzQ3ODEyLFxuICA3OTU4MzU1MjcsXG4gIDE0ODMyMzAyMjUsXG4gIDMyNDQzNjcyNzUsXG4gIDMwNjAxNDk1NjUsXG4gIDE5OTQxNDYxOTIsXG4gIDMxMTU4NTM0LFxuICAyNTYzOTA3NzcyLFxuICA0MDIzNzE3OTMwLFxuICAxOTA3NDU5NDY1LFxuICAxMTI2MzcyMTUsXG4gIDI2ODAxNTMyNTMsXG4gIDM5MDQ0MjcwNTksXG4gIDIwMTM3NzYyOTAsXG4gIDI1MTcyMjAzNixcbiAgMjUxNzIxNTM3NCxcbiAgMzc3NTgzMDA0MCxcbiAgMjEzNzY1Njc2MyxcbiAgMTQxMzc2ODEzLFxuICAyNDM5Mjc3NzE5LFxuICAzODY1MjcxMjk3LFxuICAxODAyMTk1NDQ0LFxuICA0NzY4NjQ4NjYsXG4gIDIyMzgwMDEzNjgsXG4gIDQwNjY1MDg4NzgsXG4gIDE4MTIzNzA5MjUsXG4gIDQ1MzA5MjczMSxcbiAgMjE4MTYyNTAyNSxcbiAgNDExMTQ1MTIyMyxcbiAgMTcwNjA4ODkwMixcbiAgMzE0MDQyNzA0LFxuICAyMzQ0NTMyMjAyLFxuICA0MjQwMDE3NTMyLFxuICAxNjU4NjU4MjcxLFxuICAzNjY2MTk5NzcsXG4gIDIzNjI2NzAzMjMsXG4gIDQyMjQ5OTQ0MDUsXG4gIDEzMDM1MzU5NjAsXG4gIDk4NDk2MTQ4NixcbiAgMjc0NzAwNzA5MixcbiAgMzU2OTAzNzUzOCxcbiAgMTI1NjE3MDgxNyxcbiAgMTAzNzYwNDMxMSxcbiAgMjc2NTIxMDczMyxcbiAgMzU1NDA3OTk5NSxcbiAgMTEzMTAxNDUwNixcbiAgODc5Njc5OTk2LFxuICAyOTA5MjQzNDYyLFxuICAzNjYzNzcxODU2LFxuICAxMTQxMTI0NDY3LFxuICA4NTU4NDIyNzcsXG4gIDI4NTI4MDE2MzEsXG4gIDM3MDg2NDg2NDksXG4gIDEzNDI1MzM5NDgsXG4gIDY1NDQ1OTMwNixcbiAgMzE4ODM5NjA0OCxcbiAgMzM3MzAxNTE3NCxcbiAgMTQ2NjQ3OTkwOSxcbiAgNTQ0MTc5NjM1LFxuICAzMTEwNTIzOTEzLFxuICAzNDYyNTIyMDE1LFxuICAxNTkxNjcxMDU0LFxuICA3MDIxMzg3NzYsXG4gIDI5NjY0NjA0NTAsXG4gIDMzNTI3OTk0MTIsXG4gIDE1MDQ5MTg4MDcsXG4gIDc4MzU1MTg3MyxcbiAgMzA4MjY0MDQ0MyxcbiAgMzIzMzQ0Mjk4OSxcbiAgMzk4ODI5MjM4NCxcbiAgMjU5NjI1NDY0NixcbiAgNjIzMTcwNjgsXG4gIDE5NTc4MTA4NDIsXG4gIDM5Mzk4NDU5NDUsXG4gIDI2NDc4MTYxMTEsXG4gIDgxNDcwOTk3LFxuICAxOTQzODAzNTIzLFxuICAzODE0OTE4OTMwLFxuICAyNDg5NTk2ODA0LFxuICAyMjUyNzQ0MzAsXG4gIDIwNTM3OTAzNzYsXG4gIDM4MjYxNzU3NTUsXG4gIDI0NjY5MDYwMTMsXG4gIDE2NzgxNjc0MyxcbiAgMjA5NzY1MTM3NyxcbiAgNDAyNzU1MjU4MCxcbiAgMjI2NTQ5MDM4NixcbiAgNTAzNDQ0MDcyLFxuICAxNzYyMDUwODE0LFxuICA0MTUwNDE3MjQ1LFxuICAyMTU0MTI5MzU1LFxuICA0MjY1MjIyMjUsXG4gIDE4NTI1MDc4NzksXG4gIDQyNzUzMTM1MjYsXG4gIDIzMTIzMTc5MjAsXG4gIDI4Mjc1MzYyNixcbiAgMTc0MjU1NTg1MixcbiAgNDE4OTcwODE0MyxcbiAgMjM5NDg3Nzk0NSxcbiAgMzk3OTE3NzYzLFxuICAxNjIyMTgzNjM3LFxuICAzNjA0MzkwODg4LFxuICAyNzE0ODY2NTU4LFxuICA5NTM3Mjk3MzIsXG4gIDEzNDAwNzY2MjYsXG4gIDM1MTg3MTk5ODUsXG4gIDI3OTczNjA5OTksXG4gIDEwNjg4MjgzODEsXG4gIDEyMTk2Mzg4NTksXG4gIDM2MjQ3NDE4NTAsXG4gIDI5MzY2NzUxNDgsXG4gIDkwNjE4NTQ2MixcbiAgMTA5MDgxMjUxMixcbiAgMzc0NzY3MjAwMyxcbiAgMjgyNTM3OTY2OSxcbiAgODI5MzI5MTM1LFxuICAxMTgxMzM1MTYxLFxuICAzNDEyMTc3ODA0LFxuICAzMTYwODM0ODQyLFxuICA2MjgwODU0MDgsXG4gIDEzODI2MDUzNjYsXG4gIDM0MjMzNjkxMDksXG4gIDMxMzgwNzg0NjcsXG4gIDU3MDU2MjIzMyxcbiAgMTQyNjQwMDgxNSxcbiAgMzMxNzMxNjU0MixcbiAgMjk5ODczMzYwOCxcbiAgNzMzMjM5OTU0LFxuICAxNTU1MjYxOTU2LFxuICAzMjY4OTM1NTkxLFxuICAzMDUwMzYwNjI1LFxuICA3NTI0NTk0MDMsXG4gIDE1NDEzMjAyMjEsXG4gIDI2MDcwNzE5MjAsXG4gIDM5NjU5NzMwMzAsXG4gIDE5Njk5MjI5NzIsXG4gIDQwNzM1NDk4LFxuICAyNjE3ODM3MjI1LFxuICAzOTQzNTc3MTUxLFxuICAxOTEzMDg3ODc3LFxuICA4MzkwODM3MSxcbiAgMjUxMjM0MTYzNCxcbiAgMzgwMzc0MDY5MixcbiAgMjA3NTIwODYyMixcbiAgMjEzMjYxMTEyLFxuICAyNDYzMjcyNjAzLFxuICAzODU1OTkwMjg1LFxuICAyMDk0ODU0MDcxLFxuICAxOTg5NTg4ODEsXG4gIDIyNjIwMjkwMTIsXG4gIDQwNTcyNjA2MTAsXG4gIDE3NTkzNTk5OTIsXG4gIDUzNDQxNDE5MCxcbiAgMjE3NjcxODU0MSxcbiAgNDEzOTMyOTExNSxcbiAgMTg3MzgzNjAwMSxcbiAgNDE0NjY0NTY3LFxuICAyMjgyMjQ4OTM0LFxuICA0Mjc5MjAwMzY4LFxuICAxNzExNjg0NTU0LFxuICAyODUyODExMTYsXG4gIDI0MDU4MDE3MjcsXG4gIDQxNjcyMTY3NDUsXG4gIDE2MzQ0Njc3OTUsXG4gIDM3NjIyOTcwMSxcbiAgMjY4NTA2Nzg5NixcbiAgMzYwODAwNzQwNixcbiAgMTMwODkxODYxMixcbiAgOTU2NTQzOTM4LFxuICAyODA4NTU1MTA1LFxuICAzNDk1OTU4MjYzLFxuICAxMjMxNjM2MzAxLFxuICAxMDQ3NDI3MDM1LFxuICAyOTMyOTU5ODE4LFxuICAzNjU0NzAzODM2LFxuICAxMDg4MzU5MjcwLFxuICA5MzY5MThlMyxcbiAgMjg0NzcxNDg5OSxcbiAgMzczNjgzNzgyOSxcbiAgMTIwMjkwMDg2MyxcbiAgODE3MjMzODk3LFxuICAzMTgzMzQyMTA4LFxuICAzNDAxMjM3MTMwLFxuICAxNDA0Mjc3NTUyLFxuICA2MTU4MTgxNTAsXG4gIDMxMzQyMDc0OTMsXG4gIDM0NTM0MjEyMDMsXG4gIDE0MjM4NTc0NDksXG4gIDYwMTQ1MDQzMSxcbiAgMzAwOTgzNzYxNCxcbiAgMzI5NDcxMDQ1NixcbiAgMTU2NzEwMzc0NixcbiAgNzExOTI4NzI0LFxuICAzMDIwNjY4NDcxLFxuICAzMjcyMzgwMDY1LFxuICAxNTEwMzM0MjM1LFxuICA3NTUxNjcxMTdcbl0pO1xuZnVuY3Rpb24gZW5zdXJlQnVmZmVyKGlucHV0KSB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoaW5wdXQpKSB7XG4gICAgcmV0dXJuIGlucHV0O1xuICB9XG4gIGlmICh0eXBlb2YgaW5wdXQgPT09IFwibnVtYmVyXCIpIHtcbiAgICByZXR1cm4gQnVmZmVyLmFsbG9jKGlucHV0KTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oaW5wdXQpO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihcImlucHV0IG11c3QgYmUgYnVmZmVyLCBudW1iZXIsIG9yIHN0cmluZywgcmVjZWl2ZWQgXCIgKyB0eXBlb2YgaW5wdXQpO1xuICB9XG59XG5mdW5jdGlvbiBidWZmZXJpemVJbnQobnVtKSB7XG4gIGNvbnN0IHRtcCA9IGVuc3VyZUJ1ZmZlcig0KTtcbiAgdG1wLndyaXRlSW50MzJCRShudW0sIDApO1xuICByZXR1cm4gdG1wO1xufVxuZnVuY3Rpb24gX2NyYzMyKGJ1ZiwgcHJldmlvdXMpIHtcbiAgYnVmID0gZW5zdXJlQnVmZmVyKGJ1Zik7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIocHJldmlvdXMpKSB7XG4gICAgcHJldmlvdXMgPSBwcmV2aW91cy5yZWFkVUludDMyQkUoMCk7XG4gIH1cbiAgbGV0IGNyYyA9IH5+cHJldmlvdXMgXiAtMTtcbiAgZm9yICh2YXIgbiA9IDA7IG4gPCBidWYubGVuZ3RoOyBuKyspIHtcbiAgICBjcmMgPSBDUkNfVEFCTEVbKGNyYyBeIGJ1ZltuXSkgJiAyNTVdIF4gY3JjID4+PiA4O1xuICB9XG4gIHJldHVybiBjcmMgXiAtMTtcbn1cbmZ1bmN0aW9uIGNyYzMyKCkge1xuICByZXR1cm4gYnVmZmVyaXplSW50KF9jcmMzMi5hcHBseShudWxsLCBhcmd1bWVudHMpKTtcbn1cbmNyYzMyLnNpZ25lZCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gX2NyYzMyLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG59O1xuY3JjMzIudW5zaWduZWQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIF9jcmMzMi5hcHBseShudWxsLCBhcmd1bWVudHMpID4+PiAwO1xufTtcbnZhciBidWZmZXJDcmMzMiA9IGNyYzMyO1xuXG5jb25zdCBpbmRleCA9IC8qQF9fUFVSRV9fKi9nZXREZWZhdWx0RXhwb3J0RnJvbUNqcyhidWZmZXJDcmMzMik7XG5cbm1vZHVsZS5leHBvcnRzID0gaW5kZXg7XG4iLAogICAgIi8qKlxuICogSlNPTiBGb3JtYXQgUGx1Z2luXG4gKlxuICogQG1vZHVsZSBwbHVnaW5zL2pzb25cbiAqIEBsaWNlbnNlIFtNSVRde0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hcmNoaXZlcmpzL25vZGUtYXJjaGl2ZXIvYmxvYi9tYXN0ZXIvTElDRU5TRX1cbiAqIEBjb3B5cmlnaHQgKGMpIDIwMTItMjAxNCBDaHJpcyBUYWxraW5ndG9uLCBjb250cmlidXRvcnMuXG4gKi9cbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ3V0aWwnKS5pbmhlcml0cztcbnZhciBUcmFuc2Zvcm0gPSByZXF1aXJlKCdyZWFkYWJsZS1zdHJlYW0nKS5UcmFuc2Zvcm07XG5cbnZhciBjcmMzMiA9IHJlcXVpcmUoJ2J1ZmZlci1jcmMzMicpO1xudmFyIHV0aWwgPSByZXF1aXJlKCdhcmNoaXZlci11dGlscycpO1xuXG4vKipcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHsoSnNvbk9wdGlvbnN8VHJhbnNmb3JtT3B0aW9ucyl9IG9wdGlvbnNcbiAqL1xudmFyIEpzb24gPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBKc29uKSkge1xuICAgIHJldHVybiBuZXcgSnNvbihvcHRpb25zKTtcbiAgfVxuXG4gIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMgPSB1dGlsLmRlZmF1bHRzKG9wdGlvbnMsIHt9KTtcblxuICBUcmFuc2Zvcm0uY2FsbCh0aGlzLCBvcHRpb25zKTtcblxuICB0aGlzLnN1cHBvcnRzID0ge1xuICAgIGRpcmVjdG9yeTogdHJ1ZSxcbiAgICBzeW1saW5rOiB0cnVlXG4gIH07XG5cbiAgdGhpcy5maWxlcyA9IFtdO1xufTtcblxuaW5oZXJpdHMoSnNvbiwgVHJhbnNmb3JtKTtcblxuLyoqXG4gKiBbX3RyYW5zZm9ybSBkZXNjcmlwdGlvbl1cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtICB7QnVmZmVyfSAgIGNodW5rXG4gKiBAcGFyYW0gIHtTdHJpbmd9ICAgZW5jb2RpbmdcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB2b2lkXG4gKi9cbkpzb24ucHJvdG90eXBlLl90cmFuc2Zvcm0gPSBmdW5jdGlvbihjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gIGNhbGxiYWNrKG51bGwsIGNodW5rKTtcbn07XG5cbi8qKlxuICogW193cml0ZVN0cmluZ2lmaWVkIGRlc2NyaXB0aW9uXVxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHZvaWRcbiAqL1xuSnNvbi5wcm90b3R5cGUuX3dyaXRlU3RyaW5naWZpZWQgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGZpbGVTdHJpbmcgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmZpbGVzKTtcbiAgdGhpcy53cml0ZShmaWxlU3RyaW5nKTtcbn07XG5cbi8qKlxuICogW2FwcGVuZCBkZXNjcmlwdGlvbl1cbiAqXG4gKiBAcGFyYW0gIHsoQnVmZmVyfFN0cmVhbSl9ICAgc291cmNlXG4gKiBAcGFyYW0gIHtFbnRyeURhdGF9ICAgZGF0YVxuICogQHBhcmFtICB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHZvaWRcbiAqL1xuSnNvbi5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24oc291cmNlLCBkYXRhLCBjYWxsYmFjaykge1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgZGF0YS5jcmMzMiA9IDA7XG5cbiAgZnVuY3Rpb24gb25lbmQoZXJyLCBzb3VyY2VCdWZmZXIpIHtcbiAgICBpZiAoZXJyKSB7XG4gICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRhdGEuc2l6ZSA9IHNvdXJjZUJ1ZmZlci5sZW5ndGggfHwgMDtcbiAgICBkYXRhLmNyYzMyID0gY3JjMzIudW5zaWduZWQoc291cmNlQnVmZmVyKTtcblxuICAgIHNlbGYuZmlsZXMucHVzaChkYXRhKTtcblxuICAgIGNhbGxiYWNrKG51bGwsIGRhdGEpO1xuICB9XG5cbiAgaWYgKGRhdGEuc291cmNlVHlwZSA9PT0gJ2J1ZmZlcicpIHtcbiAgICBvbmVuZChudWxsLCBzb3VyY2UpO1xuICB9IGVsc2UgaWYgKGRhdGEuc291cmNlVHlwZSA9PT0gJ3N0cmVhbScpIHtcbiAgICB1dGlsLmNvbGxlY3RTdHJlYW0oc291cmNlLCBvbmVuZCk7XG4gIH1cbn07XG5cbi8qKlxuICogW2ZpbmFsaXplIGRlc2NyaXB0aW9uXVxuICpcbiAqIEByZXR1cm4gdm9pZFxuICovXG5Kc29uLnByb3RvdHlwZS5maW5hbGl6ZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl93cml0ZVN0cmluZ2lmaWVkKCk7XG4gIHRoaXMuZW5kKCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEpzb247XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gSnNvbk9wdGlvbnNcbiAqIEBnbG9iYWxcbiAqL1xuIiwKICAgICIvKipcbiAqIEFyY2hpdmVyIFZlbmRpbmdcbiAqXG4gKiBAaWdub3JlXG4gKiBAbGljZW5zZSBbTUlUXXtAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXJjaGl2ZXJqcy9ub2RlLWFyY2hpdmVyL2Jsb2IvbWFzdGVyL0xJQ0VOU0V9XG4gKiBAY29weXJpZ2h0IChjKSAyMDEyLTIwMTQgQ2hyaXMgVGFsa2luZ3RvbiwgY29udHJpYnV0b3JzLlxuICovXG52YXIgQXJjaGl2ZXIgPSByZXF1aXJlKCcuL2xpYi9jb3JlJyk7XG5cbnZhciBmb3JtYXRzID0ge307XG5cbi8qKlxuICogRGlzcGVuc2VzIGEgbmV3IEFyY2hpdmVyIGluc3RhbmNlLlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtICB7U3RyaW5nfSBmb3JtYXQgVGhlIGFyY2hpdmUgZm9ybWF0IHRvIHVzZS5cbiAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9ucyBTZWUgW0FyY2hpdmVyXXtAbGluayBBcmNoaXZlcn1cbiAqIEByZXR1cm4ge0FyY2hpdmVyfVxuICovXG52YXIgdmVuZGluZyA9IGZ1bmN0aW9uKGZvcm1hdCwgb3B0aW9ucykge1xuICByZXR1cm4gdmVuZGluZy5jcmVhdGUoZm9ybWF0LCBvcHRpb25zKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBBcmNoaXZlciBpbnN0YW5jZS5cbiAqXG4gKiBAcGFyYW0gIHtTdHJpbmd9IGZvcm1hdCBUaGUgYXJjaGl2ZSBmb3JtYXQgdG8gdXNlLlxuICogQHBhcmFtICB7T2JqZWN0fSBvcHRpb25zIFNlZSBbQXJjaGl2ZXJde0BsaW5rIEFyY2hpdmVyfVxuICogQHJldHVybiB7QXJjaGl2ZXJ9XG4gKi9cbnZlbmRpbmcuY3JlYXRlID0gZnVuY3Rpb24oZm9ybWF0LCBvcHRpb25zKSB7XG4gIGlmIChmb3JtYXRzW2Zvcm1hdF0pIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBuZXcgQXJjaGl2ZXIoZm9ybWF0LCBvcHRpb25zKTtcbiAgICBpbnN0YW5jZS5zZXRGb3JtYXQoZm9ybWF0KTtcbiAgICBpbnN0YW5jZS5zZXRNb2R1bGUobmV3IGZvcm1hdHNbZm9ybWF0XShvcHRpb25zKSk7XG5cbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjcmVhdGUoJyArIGZvcm1hdCArICcpOiBmb3JtYXQgbm90IHJlZ2lzdGVyZWQnKTtcbiAgfVxufTtcblxuLyoqXG4gKiBSZWdpc3RlcnMgYSBmb3JtYXQgZm9yIHVzZSB3aXRoIGFyY2hpdmVyLlxuICpcbiAqIEBwYXJhbSAge1N0cmluZ30gZm9ybWF0IFRoZSBuYW1lIG9mIHRoZSBmb3JtYXQuXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gbW9kdWxlIFRoZSBmdW5jdGlvbiBmb3IgYXJjaGl2ZXIgdG8gaW50ZXJhY3Qgd2l0aC5cbiAqIEByZXR1cm4gdm9pZFxuICovXG52ZW5kaW5nLnJlZ2lzdGVyRm9ybWF0ID0gZnVuY3Rpb24oZm9ybWF0LCBtb2R1bGUpIHtcbiAgaWYgKGZvcm1hdHNbZm9ybWF0XSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncmVnaXN0ZXIoJyArIGZvcm1hdCArICcpOiBmb3JtYXQgYWxyZWFkeSByZWdpc3RlcmVkJyk7XG4gIH1cblxuICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBFcnJvcigncmVnaXN0ZXIoJyArIGZvcm1hdCArICcpOiBmb3JtYXQgbW9kdWxlIGludmFsaWQnKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgbW9kdWxlLnByb3RvdHlwZS5hcHBlbmQgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIG1vZHVsZS5wcm90b3R5cGUuZmluYWxpemUgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlZ2lzdGVyKCcgKyBmb3JtYXQgKyAnKTogZm9ybWF0IG1vZHVsZSBtaXNzaW5nIG1ldGhvZHMnKTtcbiAgfVxuXG4gIGZvcm1hdHNbZm9ybWF0XSA9IG1vZHVsZTtcbn07XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIGZvcm1hdCBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQuXG4gKiBcbiAqIEBwYXJhbSB7U3RyaW5nfSBmb3JtYXQgdGhlIG5hbWUgb2YgdGhlIGZvcm1hdC5cbiAqIEByZXR1cm4gYm9vbGVhblxuICovXG52ZW5kaW5nLmlzUmVnaXN0ZXJlZEZvcm1hdCA9IGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgaWYgKGZvcm1hdHNbZm9ybWF0XSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIFxuICByZXR1cm4gZmFsc2U7XG59O1xuXG52ZW5kaW5nLnJlZ2lzdGVyRm9ybWF0KCd6aXAnLCByZXF1aXJlKCcuL2xpYi9wbHVnaW5zL3ppcCcpKTtcbnZlbmRpbmcucmVnaXN0ZXJGb3JtYXQoJ3RhcicsIHJlcXVpcmUoJy4vbGliL3BsdWdpbnMvdGFyJykpO1xudmVuZGluZy5yZWdpc3RlckZvcm1hdCgnanNvbicsIHJlcXVpcmUoJy4vbGliL3BsdWdpbnMvanNvbicpKTtcblxubW9kdWxlLmV4cG9ydHMgPSB2ZW5kaW5nOyIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jcmVhdGVaaXBVcGxvYWRTdHJlYW0gPSBleHBvcnRzLlppcFVwbG9hZFN0cmVhbSA9IGV4cG9ydHMuREVGQVVMVF9DT01QUkVTU0lPTl9MRVZFTCA9IHZvaWQgMDtcbmNvbnN0IHN0cmVhbSA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwic3RyZWFtXCIpKTtcbmNvbnN0IHByb21pc2VzXzEgPSByZXF1aXJlKFwiZnMvcHJvbWlzZXNcIik7XG5jb25zdCBhcmNoaXZlciA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiYXJjaGl2ZXJcIikpO1xuY29uc3QgY29yZSA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiQGFjdGlvbnMvY29yZVwiKSk7XG5jb25zdCBjb25maWdfMSA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvY29uZmlnXCIpO1xuZXhwb3J0cy5ERUZBVUxUX0NPTVBSRVNTSU9OX0xFVkVMID0gNjtcbi8vIEN1c3RvbSBzdHJlYW0gdHJhbnNmb3JtZXIgc28gd2UgY2FuIHNldCB0aGUgaGlnaFdhdGVyTWFyayBwcm9wZXJ0eVxuLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9pc3N1ZXMvODg1NVxuY2xhc3MgWmlwVXBsb2FkU3RyZWFtIGV4dGVuZHMgc3RyZWFtLlRyYW5zZm9ybSB7XG4gICAgY29uc3RydWN0b3IoYnVmZmVyU2l6ZSkge1xuICAgICAgICBzdXBlcih7XG4gICAgICAgICAgICBoaWdoV2F0ZXJNYXJrOiBidWZmZXJTaXplXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIF90cmFuc2Zvcm0oY2h1bmssIGVuYywgY2IpIHtcbiAgICAgICAgY2IobnVsbCwgY2h1bmspO1xuICAgIH1cbn1cbmV4cG9ydHMuWmlwVXBsb2FkU3RyZWFtID0gWmlwVXBsb2FkU3RyZWFtO1xuZnVuY3Rpb24gY3JlYXRlWmlwVXBsb2FkU3RyZWFtKHVwbG9hZFNwZWNpZmljYXRpb24sIGNvbXByZXNzaW9uTGV2ZWwgPSBleHBvcnRzLkRFRkFVTFRfQ09NUFJFU1NJT05fTEVWRUwpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb3JlLmRlYnVnKGBDcmVhdGluZyBBcnRpZmFjdCBhcmNoaXZlIHdpdGggY29tcHJlc3Npb25MZXZlbDogJHtjb21wcmVzc2lvbkxldmVsfWApO1xuICAgICAgICBjb25zdCB6aXAgPSBhcmNoaXZlci5jcmVhdGUoJ3ppcCcsIHtcbiAgICAgICAgICAgIGhpZ2hXYXRlck1hcms6ICgwLCBjb25maWdfMS5nZXRVcGxvYWRDaHVua1NpemUpKCksXG4gICAgICAgICAgICB6bGliOiB7IGxldmVsOiBjb21wcmVzc2lvbkxldmVsIH1cbiAgICAgICAgfSk7XG4gICAgICAgIC8vIHJlZ2lzdGVyIGNhbGxiYWNrcyBmb3IgdmFyaW91cyBldmVudHMgZHVyaW5nIHRoZSB6aXAgbGlmZWN5Y2xlXG4gICAgICAgIHppcC5vbignZXJyb3InLCB6aXBFcnJvckNhbGxiYWNrKTtcbiAgICAgICAgemlwLm9uKCd3YXJuaW5nJywgemlwV2FybmluZ0NhbGxiYWNrKTtcbiAgICAgICAgemlwLm9uKCdmaW5pc2gnLCB6aXBGaW5pc2hDYWxsYmFjayk7XG4gICAgICAgIHppcC5vbignZW5kJywgemlwRW5kQ2FsbGJhY2spO1xuICAgICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgdXBsb2FkU3BlY2lmaWNhdGlvbikge1xuICAgICAgICAgICAgaWYgKGZpbGUuc291cmNlUGF0aCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHN5bWxpbmsgYW5kIHJlc29sdmUgdGhlIHNvdXJjZSBwYXRoXG4gICAgICAgICAgICAgICAgbGV0IHNvdXJjZVBhdGggPSBmaWxlLnNvdXJjZVBhdGg7XG4gICAgICAgICAgICAgICAgaWYgKGZpbGUuc3RhdHMuaXNTeW1ib2xpY0xpbmsoKSkge1xuICAgICAgICAgICAgICAgICAgICBzb3VyY2VQYXRoID0geWllbGQgKDAsIHByb21pc2VzXzEucmVhbHBhdGgpKGZpbGUuc291cmNlUGF0aCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUgZmlsZSB0byB0aGUgemlwXG4gICAgICAgICAgICAgICAgemlwLmZpbGUoc291cmNlUGF0aCwge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBmaWxlLmRlc3RpbmF0aW9uUGF0aFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gQWRkIGEgZGlyZWN0b3J5IHRvIHRoZSB6aXBcbiAgICAgICAgICAgICAgICB6aXAuYXBwZW5kKCcnLCB7IG5hbWU6IGZpbGUuZGVzdGluYXRpb25QYXRoIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJ1ZmZlclNpemUgPSAoMCwgY29uZmlnXzEuZ2V0VXBsb2FkQ2h1bmtTaXplKSgpO1xuICAgICAgICBjb25zdCB6aXBVcGxvYWRTdHJlYW0gPSBuZXcgWmlwVXBsb2FkU3RyZWFtKGJ1ZmZlclNpemUpO1xuICAgICAgICBjb3JlLmRlYnVnKGBaaXAgd3JpdGUgaGlnaCB3YXRlcm1hcmsgdmFsdWUgJHt6aXBVcGxvYWRTdHJlYW0ud3JpdGFibGVIaWdoV2F0ZXJNYXJrfWApO1xuICAgICAgICBjb3JlLmRlYnVnKGBaaXAgcmVhZCBoaWdoIHdhdGVybWFyayB2YWx1ZSAke3ppcFVwbG9hZFN0cmVhbS5yZWFkYWJsZUhpZ2hXYXRlck1hcmt9YCk7XG4gICAgICAgIHppcC5waXBlKHppcFVwbG9hZFN0cmVhbSk7XG4gICAgICAgIHppcC5maW5hbGl6ZSgpO1xuICAgICAgICByZXR1cm4gemlwVXBsb2FkU3RyZWFtO1xuICAgIH0pO1xufVxuZXhwb3J0cy5jcmVhdGVaaXBVcGxvYWRTdHJlYW0gPSBjcmVhdGVaaXBVcGxvYWRTdHJlYW07XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuY29uc3QgemlwRXJyb3JDYWxsYmFjayA9IChlcnJvcikgPT4ge1xuICAgIGNvcmUuZXJyb3IoJ0FuIGVycm9yIGhhcyBvY2N1cnJlZCB3aGlsZSBjcmVhdGluZyB0aGUgemlwIGZpbGUgZm9yIHVwbG9hZCcpO1xuICAgIGNvcmUuaW5mbyhlcnJvcik7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdBbiBlcnJvciBoYXMgb2NjdXJyZWQgZHVyaW5nIHppcCBjcmVhdGlvbiBmb3IgdGhlIGFydGlmYWN0Jyk7XG59O1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmNvbnN0IHppcFdhcm5pbmdDYWxsYmFjayA9IChlcnJvcikgPT4ge1xuICAgIGlmIChlcnJvci5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICBjb3JlLndhcm5pbmcoJ0VOT0VOVCB3YXJuaW5nIGR1cmluZyBhcnRpZmFjdCB6aXAgY3JlYXRpb24uIE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnknKTtcbiAgICAgICAgY29yZS5pbmZvKGVycm9yKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvcmUud2FybmluZyhgQSBub24tYmxvY2tpbmcgd2FybmluZyBoYXMgb2NjdXJyZWQgZHVyaW5nIGFydGlmYWN0IHppcCBjcmVhdGlvbjogJHtlcnJvci5jb2RlfWApO1xuICAgICAgICBjb3JlLmluZm8oZXJyb3IpO1xuICAgIH1cbn07XG5jb25zdCB6aXBGaW5pc2hDYWxsYmFjayA9ICgpID0+IHtcbiAgICBjb3JlLmRlYnVnKCdaaXAgc3RyZWFtIGZvciB1cGxvYWQgaGFzIGZpbmlzaGVkLicpO1xufTtcbmNvbnN0IHppcEVuZENhbGxiYWNrID0gKCkgPT4ge1xuICAgIGNvcmUuZGVidWcoJ1ppcCBzdHJlYW0gZm9yIHVwbG9hZCBoYXMgZW5kZWQuJyk7XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9emlwLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy51cGxvYWRBcnRpZmFjdCA9IHZvaWQgMDtcbmNvbnN0IGNvcmUgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIkBhY3Rpb25zL2NvcmVcIikpO1xuY29uc3QgcmV0ZW50aW9uXzEgPSByZXF1aXJlKFwiLi9yZXRlbnRpb25cIik7XG5jb25zdCBwYXRoX2FuZF9hcnRpZmFjdF9uYW1lX3ZhbGlkYXRpb25fMSA9IHJlcXVpcmUoXCIuL3BhdGgtYW5kLWFydGlmYWN0LW5hbWUtdmFsaWRhdGlvblwiKTtcbmNvbnN0IGFydGlmYWN0X3R3aXJwX2NsaWVudF8xID0gcmVxdWlyZShcIi4uL3NoYXJlZC9hcnRpZmFjdC10d2lycC1jbGllbnRcIik7XG5jb25zdCB1cGxvYWRfemlwX3NwZWNpZmljYXRpb25fMSA9IHJlcXVpcmUoXCIuL3VwbG9hZC16aXAtc3BlY2lmaWNhdGlvblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvdXRpbFwiKTtcbmNvbnN0IGJsb2JfdXBsb2FkXzEgPSByZXF1aXJlKFwiLi9ibG9iLXVwbG9hZFwiKTtcbmNvbnN0IHppcF8xID0gcmVxdWlyZShcIi4vemlwXCIpO1xuY29uc3QgZ2VuZXJhdGVkXzEgPSByZXF1aXJlKFwiLi4vLi4vZ2VuZXJhdGVkXCIpO1xuY29uc3QgZXJyb3JzXzEgPSByZXF1aXJlKFwiLi4vc2hhcmVkL2Vycm9yc1wiKTtcbmZ1bmN0aW9uIHVwbG9hZEFydGlmYWN0KG5hbWUsIGZpbGVzLCByb290RGlyZWN0b3J5LCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgKDAsIHBhdGhfYW5kX2FydGlmYWN0X25hbWVfdmFsaWRhdGlvbl8xLnZhbGlkYXRlQXJ0aWZhY3ROYW1lKShuYW1lKTtcbiAgICAgICAgKDAsIHVwbG9hZF96aXBfc3BlY2lmaWNhdGlvbl8xLnZhbGlkYXRlUm9vdERpcmVjdG9yeSkocm9vdERpcmVjdG9yeSk7XG4gICAgICAgIGNvbnN0IHppcFNwZWNpZmljYXRpb24gPSAoMCwgdXBsb2FkX3ppcF9zcGVjaWZpY2F0aW9uXzEuZ2V0VXBsb2FkWmlwU3BlY2lmaWNhdGlvbikoZmlsZXMsIHJvb3REaXJlY3RvcnkpO1xuICAgICAgICBpZiAoemlwU3BlY2lmaWNhdGlvbi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBlcnJvcnNfMS5GaWxlc05vdEZvdW5kRXJyb3IoemlwU3BlY2lmaWNhdGlvbi5mbGF0TWFwKHMgPT4gKHMuc291cmNlUGF0aCA/IFtzLnNvdXJjZVBhdGhdIDogW10pKSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZ2V0IHRoZSBJRHMgbmVlZGVkIGZvciB0aGUgYXJ0aWZhY3QgY3JlYXRpb25cbiAgICAgICAgY29uc3QgYmFja2VuZElkcyA9ICgwLCB1dGlsXzEuZ2V0QmFja2VuZElkc0Zyb21Ub2tlbikoKTtcbiAgICAgICAgLy8gY3JlYXRlIHRoZSBhcnRpZmFjdCBjbGllbnRcbiAgICAgICAgY29uc3QgYXJ0aWZhY3RDbGllbnQgPSAoMCwgYXJ0aWZhY3RfdHdpcnBfY2xpZW50XzEuaW50ZXJuYWxBcnRpZmFjdFR3aXJwQ2xpZW50KSgpO1xuICAgICAgICAvLyBjcmVhdGUgdGhlIGFydGlmYWN0XG4gICAgICAgIGNvbnN0IGNyZWF0ZUFydGlmYWN0UmVxID0ge1xuICAgICAgICAgICAgd29ya2Zsb3dSdW5CYWNrZW5kSWQ6IGJhY2tlbmRJZHMud29ya2Zsb3dSdW5CYWNrZW5kSWQsXG4gICAgICAgICAgICB3b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZDogYmFja2VuZElkcy53b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZCxcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICB2ZXJzaW9uOiA0XG4gICAgICAgIH07XG4gICAgICAgIC8vIGlmIHRoZXJlIGlzIGEgcmV0ZW50aW9uIHBlcmlvZCwgYWRkIGl0IHRvIHRoZSByZXF1ZXN0XG4gICAgICAgIGNvbnN0IGV4cGlyZXNBdCA9ICgwLCByZXRlbnRpb25fMS5nZXRFeHBpcmF0aW9uKShvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMucmV0ZW50aW9uRGF5cyk7XG4gICAgICAgIGlmIChleHBpcmVzQXQpIHtcbiAgICAgICAgICAgIGNyZWF0ZUFydGlmYWN0UmVxLmV4cGlyZXNBdCA9IGV4cGlyZXNBdDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjcmVhdGVBcnRpZmFjdFJlc3AgPSB5aWVsZCBhcnRpZmFjdENsaWVudC5DcmVhdGVBcnRpZmFjdChjcmVhdGVBcnRpZmFjdFJlcSk7XG4gICAgICAgIGlmICghY3JlYXRlQXJ0aWZhY3RSZXNwLm9rKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuSW52YWxpZFJlc3BvbnNlRXJyb3IoJ0NyZWF0ZUFydGlmYWN0OiByZXNwb25zZSBmcm9tIGJhY2tlbmQgd2FzIG5vdCBvaycpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHppcFVwbG9hZFN0cmVhbSA9IHlpZWxkICgwLCB6aXBfMS5jcmVhdGVaaXBVcGxvYWRTdHJlYW0pKHppcFNwZWNpZmljYXRpb24sIG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5jb21wcmVzc2lvbkxldmVsKTtcbiAgICAgICAgLy8gVXBsb2FkIHppcCB0byBibG9iIHN0b3JhZ2VcbiAgICAgICAgY29uc3QgdXBsb2FkUmVzdWx0ID0geWllbGQgKDAsIGJsb2JfdXBsb2FkXzEudXBsb2FkWmlwVG9CbG9iU3RvcmFnZSkoY3JlYXRlQXJ0aWZhY3RSZXNwLnNpZ25lZFVwbG9hZFVybCwgemlwVXBsb2FkU3RyZWFtKTtcbiAgICAgICAgLy8gZmluYWxpemUgdGhlIGFydGlmYWN0XG4gICAgICAgIGNvbnN0IGZpbmFsaXplQXJ0aWZhY3RSZXEgPSB7XG4gICAgICAgICAgICB3b3JrZmxvd1J1bkJhY2tlbmRJZDogYmFja2VuZElkcy53b3JrZmxvd1J1bkJhY2tlbmRJZCxcbiAgICAgICAgICAgIHdvcmtmbG93Sm9iUnVuQmFja2VuZElkOiBiYWNrZW5kSWRzLndvcmtmbG93Sm9iUnVuQmFja2VuZElkLFxuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIHNpemU6IHVwbG9hZFJlc3VsdC51cGxvYWRTaXplID8gdXBsb2FkUmVzdWx0LnVwbG9hZFNpemUudG9TdHJpbmcoKSA6ICcwJ1xuICAgICAgICB9O1xuICAgICAgICBpZiAodXBsb2FkUmVzdWx0LnNoYTI1Nkhhc2gpIHtcbiAgICAgICAgICAgIGZpbmFsaXplQXJ0aWZhY3RSZXEuaGFzaCA9IGdlbmVyYXRlZF8xLlN0cmluZ1ZhbHVlLmNyZWF0ZSh7XG4gICAgICAgICAgICAgICAgdmFsdWU6IGBzaGEyNTY6JHt1cGxvYWRSZXN1bHQuc2hhMjU2SGFzaH1gXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb3JlLmluZm8oYEZpbmFsaXppbmcgYXJ0aWZhY3QgdXBsb2FkYCk7XG4gICAgICAgIGNvbnN0IGZpbmFsaXplQXJ0aWZhY3RSZXNwID0geWllbGQgYXJ0aWZhY3RDbGllbnQuRmluYWxpemVBcnRpZmFjdChmaW5hbGl6ZUFydGlmYWN0UmVxKTtcbiAgICAgICAgaWYgKCFmaW5hbGl6ZUFydGlmYWN0UmVzcC5vaykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGVycm9yc18xLkludmFsaWRSZXNwb25zZUVycm9yKCdGaW5hbGl6ZUFydGlmYWN0OiByZXNwb25zZSBmcm9tIGJhY2tlbmQgd2FzIG5vdCBvaycpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFydGlmYWN0SWQgPSBCaWdJbnQoZmluYWxpemVBcnRpZmFjdFJlc3AuYXJ0aWZhY3RJZCk7XG4gICAgICAgIGNvcmUuaW5mbyhgQXJ0aWZhY3QgJHtuYW1lfS56aXAgc3VjY2Vzc2Z1bGx5IGZpbmFsaXplZC4gQXJ0aWZhY3QgSUQgJHthcnRpZmFjdElkfWApO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2l6ZTogdXBsb2FkUmVzdWx0LnVwbG9hZFNpemUsXG4gICAgICAgICAgICBpZDogTnVtYmVyKGFydGlmYWN0SWQpXG4gICAgICAgIH07XG4gICAgfSk7XG59XG5leHBvcnRzLnVwbG9hZEFydGlmYWN0ID0gdXBsb2FkQXJ0aWZhY3Q7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11cGxvYWQtYXJ0aWZhY3QuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQ29udGV4dCA9IHZvaWQgMDtcbmNvbnN0IGZzXzEgPSByZXF1aXJlKFwiZnNcIik7XG5jb25zdCBvc18xID0gcmVxdWlyZShcIm9zXCIpO1xuY2xhc3MgQ29udGV4dCB7XG4gICAgLyoqXG4gICAgICogSHlkcmF0ZSB0aGUgY29udGV4dCBmcm9tIHRoZSBlbnZpcm9ubWVudFxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYztcbiAgICAgICAgdGhpcy5wYXlsb2FkID0ge307XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5HSVRIVUJfRVZFTlRfUEFUSCkge1xuICAgICAgICAgICAgaWYgKGZzXzEuZXhpc3RzU3luYyhwcm9jZXNzLmVudi5HSVRIVUJfRVZFTlRfUEFUSCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBheWxvYWQgPSBKU09OLnBhcnNlKGZzXzEucmVhZEZpbGVTeW5jKHByb2Nlc3MuZW52LkdJVEhVQl9FVkVOVF9QQVRILCB7IGVuY29kaW5nOiAndXRmOCcgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IHByb2Nlc3MuZW52LkdJVEhVQl9FVkVOVF9QQVRIO1xuICAgICAgICAgICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGBHSVRIVUJfRVZFTlRfUEFUSCAke3BhdGh9IGRvZXMgbm90IGV4aXN0JHtvc18xLkVPTH1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmV2ZW50TmFtZSA9IHByb2Nlc3MuZW52LkdJVEhVQl9FVkVOVF9OQU1FO1xuICAgICAgICB0aGlzLnNoYSA9IHByb2Nlc3MuZW52LkdJVEhVQl9TSEE7XG4gICAgICAgIHRoaXMucmVmID0gcHJvY2Vzcy5lbnYuR0lUSFVCX1JFRjtcbiAgICAgICAgdGhpcy53b3JrZmxvdyA9IHByb2Nlc3MuZW52LkdJVEhVQl9XT1JLRkxPVztcbiAgICAgICAgdGhpcy5hY3Rpb24gPSBwcm9jZXNzLmVudi5HSVRIVUJfQUNUSU9OO1xuICAgICAgICB0aGlzLmFjdG9yID0gcHJvY2Vzcy5lbnYuR0lUSFVCX0FDVE9SO1xuICAgICAgICB0aGlzLmpvYiA9IHByb2Nlc3MuZW52LkdJVEhVQl9KT0I7XG4gICAgICAgIHRoaXMucnVuTnVtYmVyID0gcGFyc2VJbnQocHJvY2Vzcy5lbnYuR0lUSFVCX1JVTl9OVU1CRVIsIDEwKTtcbiAgICAgICAgdGhpcy5ydW5JZCA9IHBhcnNlSW50KHByb2Nlc3MuZW52LkdJVEhVQl9SVU5fSUQsIDEwKTtcbiAgICAgICAgdGhpcy5hcGlVcmwgPSAoX2EgPSBwcm9jZXNzLmVudi5HSVRIVUJfQVBJX1VSTCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogYGh0dHBzOi8vYXBpLmdpdGh1Yi5jb21gO1xuICAgICAgICB0aGlzLnNlcnZlclVybCA9IChfYiA9IHByb2Nlc3MuZW52LkdJVEhVQl9TRVJWRVJfVVJMKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBgaHR0cHM6Ly9naXRodWIuY29tYDtcbiAgICAgICAgdGhpcy5ncmFwaHFsVXJsID0gKF9jID0gcHJvY2Vzcy5lbnYuR0lUSFVCX0dSQVBIUUxfVVJMKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiBgaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9ncmFwaHFsYDtcbiAgICB9XG4gICAgZ2V0IGlzc3VlKCkge1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gdGhpcy5wYXlsb2FkO1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCB0aGlzLnJlcG8pLCB7IG51bWJlcjogKHBheWxvYWQuaXNzdWUgfHwgcGF5bG9hZC5wdWxsX3JlcXVlc3QgfHwgcGF5bG9hZCkubnVtYmVyIH0pO1xuICAgIH1cbiAgICBnZXQgcmVwbygpIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52LkdJVEhVQl9SRVBPU0lUT1JZKSB7XG4gICAgICAgICAgICBjb25zdCBbb3duZXIsIHJlcG9dID0gcHJvY2Vzcy5lbnYuR0lUSFVCX1JFUE9TSVRPUlkuc3BsaXQoJy8nKTtcbiAgICAgICAgICAgIHJldHVybiB7IG93bmVyLCByZXBvIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucGF5bG9hZC5yZXBvc2l0b3J5KSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG93bmVyOiB0aGlzLnBheWxvYWQucmVwb3NpdG9yeS5vd25lci5sb2dpbixcbiAgICAgICAgICAgICAgICByZXBvOiB0aGlzLnBheWxvYWQucmVwb3NpdG9yeS5uYW1lXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImNvbnRleHQucmVwbyByZXF1aXJlcyBhIEdJVEhVQl9SRVBPU0lUT1JZIGVudmlyb25tZW50IHZhcmlhYmxlIGxpa2UgJ293bmVyL3JlcG8nXCIpO1xuICAgIH1cbn1cbmV4cG9ydHMuQ29udGV4dCA9IENvbnRleHQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb250ZXh0LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfSk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRBcGlCYXNlVXJsID0gZXhwb3J0cy5nZXRQcm94eUFnZW50ID0gZXhwb3J0cy5nZXRBdXRoU3RyaW5nID0gdm9pZCAwO1xuY29uc3QgaHR0cENsaWVudCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiQGFjdGlvbnMvaHR0cC1jbGllbnRcIikpO1xuZnVuY3Rpb24gZ2V0QXV0aFN0cmluZyh0b2tlbiwgb3B0aW9ucykge1xuICAgIGlmICghdG9rZW4gJiYgIW9wdGlvbnMuYXV0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlciB0b2tlbiBvciBvcHRzLmF1dGggaXMgcmVxdWlyZWQnKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodG9rZW4gJiYgb3B0aW9ucy5hdXRoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUGFyYW1ldGVycyB0b2tlbiBhbmQgb3B0cy5hdXRoIG1heSBub3QgYm90aCBiZSBzcGVjaWZpZWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiBvcHRpb25zLmF1dGggPT09ICdzdHJpbmcnID8gb3B0aW9ucy5hdXRoIDogYHRva2VuICR7dG9rZW59YDtcbn1cbmV4cG9ydHMuZ2V0QXV0aFN0cmluZyA9IGdldEF1dGhTdHJpbmc7XG5mdW5jdGlvbiBnZXRQcm94eUFnZW50KGRlc3RpbmF0aW9uVXJsKSB7XG4gICAgY29uc3QgaGMgPSBuZXcgaHR0cENsaWVudC5IdHRwQ2xpZW50KCk7XG4gICAgcmV0dXJuIGhjLmdldEFnZW50KGRlc3RpbmF0aW9uVXJsKTtcbn1cbmV4cG9ydHMuZ2V0UHJveHlBZ2VudCA9IGdldFByb3h5QWdlbnQ7XG5mdW5jdGlvbiBnZXRBcGlCYXNlVXJsKCkge1xuICAgIHJldHVybiBwcm9jZXNzLmVudlsnR0lUSFVCX0FQSV9VUkwnXSB8fCAnaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbSc7XG59XG5leHBvcnRzLmdldEFwaUJhc2VVcmwgPSBnZXRBcGlCYXNlVXJsO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbHMuanMubWFwIiwKICAgICIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmZ1bmN0aW9uIGdldFVzZXJBZ2VudCgpIHtcbiAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgPT09IFwib2JqZWN0XCIgJiYgXCJ1c2VyQWdlbnRcIiBpbiBuYXZpZ2F0b3IpIHtcbiAgICByZXR1cm4gbmF2aWdhdG9yLnVzZXJBZ2VudDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgcHJvY2VzcyA9PT0gXCJvYmplY3RcIiAmJiBwcm9jZXNzLnZlcnNpb24gIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBgTm9kZS5qcy8ke3Byb2Nlc3MudmVyc2lvbi5zdWJzdHIoMSl9ICgke3Byb2Nlc3MucGxhdGZvcm19OyAke3Byb2Nlc3MuYXJjaH0pYDtcbiAgfVxuXG4gIHJldHVybiBcIjxlbnZpcm9ubWVudCB1bmRldGVjdGFibGU+XCI7XG59XG5cbmV4cG9ydHMuZ2V0VXNlckFnZW50ID0gZ2V0VXNlckFnZW50O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXG4iLAogICAgIm1vZHVsZS5leHBvcnRzID0gcmVnaXN0ZXI7XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyKHN0YXRlLCBuYW1lLCBtZXRob2QsIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiBtZXRob2QgIT09IFwiZnVuY3Rpb25cIikge1xuICAgIHRocm93IG5ldyBFcnJvcihcIm1ldGhvZCBmb3IgYmVmb3JlIGhvb2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICB9XG5cbiAgaWYgKCFvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkobmFtZSkpIHtcbiAgICByZXR1cm4gbmFtZS5yZXZlcnNlKCkucmVkdWNlKGZ1bmN0aW9uIChjYWxsYmFjaywgbmFtZSkge1xuICAgICAgcmV0dXJuIHJlZ2lzdGVyLmJpbmQobnVsbCwgc3RhdGUsIG5hbWUsIGNhbGxiYWNrLCBvcHRpb25zKTtcbiAgICB9LCBtZXRob2QpKCk7XG4gIH1cblxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFzdGF0ZS5yZWdpc3RyeVtuYW1lXSkge1xuICAgICAgcmV0dXJuIG1ldGhvZChvcHRpb25zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGUucmVnaXN0cnlbbmFtZV0ucmVkdWNlKGZ1bmN0aW9uIChtZXRob2QsIHJlZ2lzdGVyZWQpIHtcbiAgICAgIHJldHVybiByZWdpc3RlcmVkLmhvb2suYmluZChudWxsLCBtZXRob2QsIG9wdGlvbnMpO1xuICAgIH0sIG1ldGhvZCkoKTtcbiAgfSk7XG59XG4iLAogICAgIm1vZHVsZS5leHBvcnRzID0gYWRkSG9vaztcblxuZnVuY3Rpb24gYWRkSG9vayhzdGF0ZSwga2luZCwgbmFtZSwgaG9vaykge1xuICB2YXIgb3JpZyA9IGhvb2s7XG4gIGlmICghc3RhdGUucmVnaXN0cnlbbmFtZV0pIHtcbiAgICBzdGF0ZS5yZWdpc3RyeVtuYW1lXSA9IFtdO1xuICB9XG5cbiAgaWYgKGtpbmQgPT09IFwiYmVmb3JlXCIpIHtcbiAgICBob29rID0gZnVuY3Rpb24gKG1ldGhvZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgICAgIC50aGVuKG9yaWcuYmluZChudWxsLCBvcHRpb25zKSlcbiAgICAgICAgLnRoZW4obWV0aG9kLmJpbmQobnVsbCwgb3B0aW9ucykpO1xuICAgIH07XG4gIH1cblxuICBpZiAoa2luZCA9PT0gXCJhZnRlclwiKSB7XG4gICAgaG9vayA9IGZ1bmN0aW9uIChtZXRob2QsIG9wdGlvbnMpIHtcbiAgICAgIHZhciByZXN1bHQ7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICAgICAgLnRoZW4obWV0aG9kLmJpbmQobnVsbCwgb3B0aW9ucykpXG4gICAgICAgIC50aGVuKGZ1bmN0aW9uIChyZXN1bHRfKSB7XG4gICAgICAgICAgcmVzdWx0ID0gcmVzdWx0XztcbiAgICAgICAgICByZXR1cm4gb3JpZyhyZXN1bHQsIG9wdGlvbnMpO1xuICAgICAgICB9KVxuICAgICAgICAudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgfVxuXG4gIGlmIChraW5kID09PSBcImVycm9yXCIpIHtcbiAgICBob29rID0gZnVuY3Rpb24gKG1ldGhvZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgICAgIC50aGVuKG1ldGhvZC5iaW5kKG51bGwsIG9wdGlvbnMpKVxuICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIG9yaWcoZXJyb3IsIG9wdGlvbnMpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGUucmVnaXN0cnlbbmFtZV0ucHVzaCh7XG4gICAgaG9vazogaG9vayxcbiAgICBvcmlnOiBvcmlnLFxuICB9KTtcbn1cbiIsCiAgICAibW9kdWxlLmV4cG9ydHMgPSByZW1vdmVIb29rO1xuXG5mdW5jdGlvbiByZW1vdmVIb29rKHN0YXRlLCBuYW1lLCBtZXRob2QpIHtcbiAgaWYgKCFzdGF0ZS5yZWdpc3RyeVtuYW1lXSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBpbmRleCA9IHN0YXRlLnJlZ2lzdHJ5W25hbWVdXG4gICAgLm1hcChmdW5jdGlvbiAocmVnaXN0ZXJlZCkge1xuICAgICAgcmV0dXJuIHJlZ2lzdGVyZWQub3JpZztcbiAgICB9KVxuICAgIC5pbmRleE9mKG1ldGhvZCk7XG5cbiAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRlLnJlZ2lzdHJ5W25hbWVdLnNwbGljZShpbmRleCwgMSk7XG59XG4iLAogICAgInZhciByZWdpc3RlciA9IHJlcXVpcmUoXCIuL2xpYi9yZWdpc3RlclwiKTtcbnZhciBhZGRIb29rID0gcmVxdWlyZShcIi4vbGliL2FkZFwiKTtcbnZhciByZW1vdmVIb29rID0gcmVxdWlyZShcIi4vbGliL3JlbW92ZVwiKTtcblxuLy8gYmluZCB3aXRoIGFycmF5IG9mIGFyZ3VtZW50czogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzIxNzkyOTEzXG52YXIgYmluZCA9IEZ1bmN0aW9uLmJpbmQ7XG52YXIgYmluZGFibGUgPSBiaW5kLmJpbmQoYmluZCk7XG5cbmZ1bmN0aW9uIGJpbmRBcGkoaG9vaywgc3RhdGUsIG5hbWUpIHtcbiAgdmFyIHJlbW92ZUhvb2tSZWYgPSBiaW5kYWJsZShyZW1vdmVIb29rLCBudWxsKS5hcHBseShcbiAgICBudWxsLFxuICAgIG5hbWUgPyBbc3RhdGUsIG5hbWVdIDogW3N0YXRlXVxuICApO1xuICBob29rLmFwaSA9IHsgcmVtb3ZlOiByZW1vdmVIb29rUmVmIH07XG4gIGhvb2sucmVtb3ZlID0gcmVtb3ZlSG9va1JlZjtcbiAgW1wiYmVmb3JlXCIsIFwiZXJyb3JcIiwgXCJhZnRlclwiLCBcIndyYXBcIl0uZm9yRWFjaChmdW5jdGlvbiAoa2luZCkge1xuICAgIHZhciBhcmdzID0gbmFtZSA/IFtzdGF0ZSwga2luZCwgbmFtZV0gOiBbc3RhdGUsIGtpbmRdO1xuICAgIGhvb2tba2luZF0gPSBob29rLmFwaVtraW5kXSA9IGJpbmRhYmxlKGFkZEhvb2ssIG51bGwpLmFwcGx5KG51bGwsIGFyZ3MpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gSG9va1Npbmd1bGFyKCkge1xuICB2YXIgc2luZ3VsYXJIb29rTmFtZSA9IFwiaFwiO1xuICB2YXIgc2luZ3VsYXJIb29rU3RhdGUgPSB7XG4gICAgcmVnaXN0cnk6IHt9LFxuICB9O1xuICB2YXIgc2luZ3VsYXJIb29rID0gcmVnaXN0ZXIuYmluZChudWxsLCBzaW5ndWxhckhvb2tTdGF0ZSwgc2luZ3VsYXJIb29rTmFtZSk7XG4gIGJpbmRBcGkoc2luZ3VsYXJIb29rLCBzaW5ndWxhckhvb2tTdGF0ZSwgc2luZ3VsYXJIb29rTmFtZSk7XG4gIHJldHVybiBzaW5ndWxhckhvb2s7XG59XG5cbmZ1bmN0aW9uIEhvb2tDb2xsZWN0aW9uKCkge1xuICB2YXIgc3RhdGUgPSB7XG4gICAgcmVnaXN0cnk6IHt9LFxuICB9O1xuXG4gIHZhciBob29rID0gcmVnaXN0ZXIuYmluZChudWxsLCBzdGF0ZSk7XG4gIGJpbmRBcGkoaG9vaywgc3RhdGUpO1xuXG4gIHJldHVybiBob29rO1xufVxuXG52YXIgY29sbGVjdGlvbkhvb2tEZXByZWNhdGlvbk1lc3NhZ2VEaXNwbGF5ZWQgPSBmYWxzZTtcbmZ1bmN0aW9uIEhvb2soKSB7XG4gIGlmICghY29sbGVjdGlvbkhvb2tEZXByZWNhdGlvbk1lc3NhZ2VEaXNwbGF5ZWQpIHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICAnW2JlZm9yZS1hZnRlci1ob29rXTogXCJIb29rKClcIiByZXB1cnBvc2luZyB3YXJuaW5nLCB1c2UgXCJIb29rLkNvbGxlY3Rpb24oKVwiLiBSZWFkIG1vcmU6IGh0dHBzOi8vZ2l0LmlvL3VwZ3JhZGUtYmVmb3JlLWFmdGVyLWhvb2stdG8tMS40J1xuICAgICk7XG4gICAgY29sbGVjdGlvbkhvb2tEZXByZWNhdGlvbk1lc3NhZ2VEaXNwbGF5ZWQgPSB0cnVlO1xuICB9XG4gIHJldHVybiBIb29rQ29sbGVjdGlvbigpO1xufVxuXG5Ib29rLlNpbmd1bGFyID0gSG9va1Npbmd1bGFyLmJpbmQoKTtcbkhvb2suQ29sbGVjdGlvbiA9IEhvb2tDb2xsZWN0aW9uLmJpbmQoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBIb29rO1xuLy8gZXhwb3NlIGNvbnN0cnVjdG9ycyBhcyBhIG5hbWVkIHByb3BlcnR5IGZvciBUeXBlU2NyaXB0XG5tb2R1bGUuZXhwb3J0cy5Ib29rID0gSG9vaztcbm1vZHVsZS5leHBvcnRzLlNpbmd1bGFyID0gSG9vay5TaW5ndWxhcjtcbm1vZHVsZS5leHBvcnRzLkNvbGxlY3Rpb24gPSBIb29rLkNvbGxlY3Rpb247XG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuLyohXG4gKiBpcy1wbGFpbi1vYmplY3QgPGh0dHBzOi8vZ2l0aHViLmNvbS9qb25zY2hsaW5rZXJ0L2lzLXBsYWluLW9iamVjdD5cbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxNywgSm9uIFNjaGxpbmtlcnQuXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKi9cblxuZnVuY3Rpb24gaXNPYmplY3Qobykge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pID09PSAnW29iamVjdCBPYmplY3RdJztcbn1cblxuZnVuY3Rpb24gaXNQbGFpbk9iamVjdChvKSB7XG4gIHZhciBjdG9yLHByb3Q7XG5cbiAgaWYgKGlzT2JqZWN0KG8pID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuXG4gIC8vIElmIGhhcyBtb2RpZmllZCBjb25zdHJ1Y3RvclxuICBjdG9yID0gby5jb25zdHJ1Y3RvcjtcbiAgaWYgKGN0b3IgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHRydWU7XG5cbiAgLy8gSWYgaGFzIG1vZGlmaWVkIHByb3RvdHlwZVxuICBwcm90ID0gY3Rvci5wcm90b3R5cGU7XG4gIGlmIChpc09iamVjdChwcm90KSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcblxuICAvLyBJZiBjb25zdHJ1Y3RvciBkb2VzIG5vdCBoYXZlIGFuIE9iamVjdC1zcGVjaWZpYyBtZXRob2RcbiAgaWYgKHByb3QuaGFzT3duUHJvcGVydHkoJ2lzUHJvdG90eXBlT2YnKSA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBNb3N0IGxpa2VseSBhIHBsYWluIE9iamVjdFxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0cy5pc1BsYWluT2JqZWN0ID0gaXNQbGFpbk9iamVjdDtcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG52YXIgaXNQbGFpbk9iamVjdCA9IHJlcXVpcmUoJ2lzLXBsYWluLW9iamVjdCcpO1xudmFyIHVuaXZlcnNhbFVzZXJBZ2VudCA9IHJlcXVpcmUoJ3VuaXZlcnNhbC11c2VyLWFnZW50Jyk7XG5cbmZ1bmN0aW9uIGxvd2VyY2FzZUtleXMob2JqZWN0KSB7XG4gIGlmICghb2JqZWN0KSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCkucmVkdWNlKChuZXdPYmosIGtleSkgPT4ge1xuICAgIG5ld09ialtrZXkudG9Mb3dlckNhc2UoKV0gPSBvYmplY3Rba2V5XTtcbiAgICByZXR1cm4gbmV3T2JqO1xuICB9LCB7fSk7XG59XG5cbmZ1bmN0aW9uIG1lcmdlRGVlcChkZWZhdWx0cywgb3B0aW9ucykge1xuICBjb25zdCByZXN1bHQgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0cyk7XG4gIE9iamVjdC5rZXlzKG9wdGlvbnMpLmZvckVhY2goa2V5ID0+IHtcbiAgICBpZiAoaXNQbGFpbk9iamVjdC5pc1BsYWluT2JqZWN0KG9wdGlvbnNba2V5XSkpIHtcbiAgICAgIGlmICghKGtleSBpbiBkZWZhdWx0cykpIE9iamVjdC5hc3NpZ24ocmVzdWx0LCB7XG4gICAgICAgIFtrZXldOiBvcHRpb25zW2tleV1cbiAgICAgIH0pO2Vsc2UgcmVzdWx0W2tleV0gPSBtZXJnZURlZXAoZGVmYXVsdHNba2V5XSwgb3B0aW9uc1trZXldKTtcbiAgICB9IGVsc2Uge1xuICAgICAgT2JqZWN0LmFzc2lnbihyZXN1bHQsIHtcbiAgICAgICAgW2tleV06IG9wdGlvbnNba2V5XVxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlVW5kZWZpbmVkUHJvcGVydGllcyhvYmopIHtcbiAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKG9ialtrZXldID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGRlbGV0ZSBvYmpba2V5XTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2JqO1xufVxuXG5mdW5jdGlvbiBtZXJnZShkZWZhdWx0cywgcm91dGUsIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiByb3V0ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgIGxldCBbbWV0aG9kLCB1cmxdID0gcm91dGUuc3BsaXQoXCIgXCIpO1xuICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHVybCA/IHtcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybFxuICAgIH0gOiB7XG4gICAgICB1cmw6IG1ldGhvZFxuICAgIH0sIG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCByb3V0ZSk7XG4gIH0gLy8gbG93ZXJjYXNlIGhlYWRlciBuYW1lcyBiZWZvcmUgbWVyZ2luZyB3aXRoIGRlZmF1bHRzIHRvIGF2b2lkIGR1cGxpY2F0ZXNcblxuXG4gIG9wdGlvbnMuaGVhZGVycyA9IGxvd2VyY2FzZUtleXMob3B0aW9ucy5oZWFkZXJzKTsgLy8gcmVtb3ZlIHByb3BlcnRpZXMgd2l0aCB1bmRlZmluZWQgdmFsdWVzIGJlZm9yZSBtZXJnaW5nXG5cbiAgcmVtb3ZlVW5kZWZpbmVkUHJvcGVydGllcyhvcHRpb25zKTtcbiAgcmVtb3ZlVW5kZWZpbmVkUHJvcGVydGllcyhvcHRpb25zLmhlYWRlcnMpO1xuICBjb25zdCBtZXJnZWRPcHRpb25zID0gbWVyZ2VEZWVwKGRlZmF1bHRzIHx8IHt9LCBvcHRpb25zKTsgLy8gbWVkaWFUeXBlLnByZXZpZXdzIGFycmF5cyBhcmUgbWVyZ2VkLCBpbnN0ZWFkIG9mIG92ZXJ3cml0dGVuXG5cbiAgaWYgKGRlZmF1bHRzICYmIGRlZmF1bHRzLm1lZGlhVHlwZS5wcmV2aWV3cy5sZW5ndGgpIHtcbiAgICBtZXJnZWRPcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cyA9IGRlZmF1bHRzLm1lZGlhVHlwZS5wcmV2aWV3cy5maWx0ZXIocHJldmlldyA9PiAhbWVyZ2VkT3B0aW9ucy5tZWRpYVR5cGUucHJldmlld3MuaW5jbHVkZXMocHJldmlldykpLmNvbmNhdChtZXJnZWRPcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cyk7XG4gIH1cblxuICBtZXJnZWRPcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cyA9IG1lcmdlZE9wdGlvbnMubWVkaWFUeXBlLnByZXZpZXdzLm1hcChwcmV2aWV3ID0+IHByZXZpZXcucmVwbGFjZSgvLXByZXZpZXcvLCBcIlwiKSk7XG4gIHJldHVybiBtZXJnZWRPcHRpb25zO1xufVxuXG5mdW5jdGlvbiBhZGRRdWVyeVBhcmFtZXRlcnModXJsLCBwYXJhbWV0ZXJzKSB7XG4gIGNvbnN0IHNlcGFyYXRvciA9IC9cXD8vLnRlc3QodXJsKSA/IFwiJlwiIDogXCI/XCI7XG4gIGNvbnN0IG5hbWVzID0gT2JqZWN0LmtleXMocGFyYW1ldGVycyk7XG5cbiAgaWYgKG5hbWVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB1cmw7XG4gIH1cblxuICByZXR1cm4gdXJsICsgc2VwYXJhdG9yICsgbmFtZXMubWFwKG5hbWUgPT4ge1xuICAgIGlmIChuYW1lID09PSBcInFcIikge1xuICAgICAgcmV0dXJuIFwicT1cIiArIHBhcmFtZXRlcnMucS5zcGxpdChcIitcIikubWFwKGVuY29kZVVSSUNvbXBvbmVudCkuam9pbihcIitcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGAke25hbWV9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtZXRlcnNbbmFtZV0pfWA7XG4gIH0pLmpvaW4oXCImXCIpO1xufVxuXG5jb25zdCB1cmxWYXJpYWJsZVJlZ2V4ID0gL1xce1tefV0rXFx9L2c7XG5cbmZ1bmN0aW9uIHJlbW92ZU5vbkNoYXJzKHZhcmlhYmxlTmFtZSkge1xuICByZXR1cm4gdmFyaWFibGVOYW1lLnJlcGxhY2UoL15cXFcrfFxcVyskL2csIFwiXCIpLnNwbGl0KC8sLyk7XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RVcmxWYXJpYWJsZU5hbWVzKHVybCkge1xuICBjb25zdCBtYXRjaGVzID0gdXJsLm1hdGNoKHVybFZhcmlhYmxlUmVnZXgpO1xuXG4gIGlmICghbWF0Y2hlcykge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHJldHVybiBtYXRjaGVzLm1hcChyZW1vdmVOb25DaGFycykucmVkdWNlKChhLCBiKSA9PiBhLmNvbmNhdChiKSwgW10pO1xufVxuXG5mdW5jdGlvbiBvbWl0KG9iamVjdCwga2V5c1RvT21pdCkge1xuICByZXR1cm4gT2JqZWN0LmtleXMob2JqZWN0KS5maWx0ZXIob3B0aW9uID0+ICFrZXlzVG9PbWl0LmluY2x1ZGVzKG9wdGlvbikpLnJlZHVjZSgob2JqLCBrZXkpID0+IHtcbiAgICBvYmpba2V5XSA9IG9iamVjdFtrZXldO1xuICAgIHJldHVybiBvYmo7XG4gIH0sIHt9KTtcbn1cblxuLy8gQmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL2JyYW1zdGVpbi91cmwtdGVtcGxhdGUsIGxpY2Vuc2VkIHVuZGVyIEJTRFxuLy8gVE9ETzogY3JlYXRlIHNlcGFyYXRlIHBhY2thZ2UuXG4vL1xuLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTQsIEJyYW0gU3RlaW5cbi8vIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbi8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uc1xuLy8gYXJlIG1ldDpcbi8vICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuLy8gICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbi8vICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodFxuLy8gICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGVcbi8vICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuLy8gIDMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0c1xuLy8gICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIFwiQVMgSVNcIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRFxuLy8gV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PXG4vLyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsXG4vLyBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORyxcbi8vIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsXG4vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZXG4vLyBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElOR1xuLy8gTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLFxuLy8gRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cblxuLyogaXN0YW5idWwgaWdub3JlIGZpbGUgKi9cbmZ1bmN0aW9uIGVuY29kZVJlc2VydmVkKHN0cikge1xuICByZXR1cm4gc3RyLnNwbGl0KC8oJVswLTlBLUZhLWZdezJ9KS9nKS5tYXAoZnVuY3Rpb24gKHBhcnQpIHtcbiAgICBpZiAoIS8lWzAtOUEtRmEtZl0vLnRlc3QocGFydCkpIHtcbiAgICAgIHBhcnQgPSBlbmNvZGVVUkkocGFydCkucmVwbGFjZSgvJTVCL2csIFwiW1wiKS5yZXBsYWNlKC8lNUQvZywgXCJdXCIpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJ0O1xuICB9KS5qb2luKFwiXCIpO1xufVxuXG5mdW5jdGlvbiBlbmNvZGVVbnJlc2VydmVkKHN0cikge1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHN0cikucmVwbGFjZSgvWyEnKCkqXS9nLCBmdW5jdGlvbiAoYykge1xuICAgIHJldHVybiBcIiVcIiArIGMuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGVuY29kZVZhbHVlKG9wZXJhdG9yLCB2YWx1ZSwga2V5KSB7XG4gIHZhbHVlID0gb3BlcmF0b3IgPT09IFwiK1wiIHx8IG9wZXJhdG9yID09PSBcIiNcIiA/IGVuY29kZVJlc2VydmVkKHZhbHVlKSA6IGVuY29kZVVucmVzZXJ2ZWQodmFsdWUpO1xuXG4gIGlmIChrZXkpIHtcbiAgICByZXR1cm4gZW5jb2RlVW5yZXNlcnZlZChrZXkpICsgXCI9XCIgKyB2YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNEZWZpbmVkKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsO1xufVxuXG5mdW5jdGlvbiBpc0tleU9wZXJhdG9yKG9wZXJhdG9yKSB7XG4gIHJldHVybiBvcGVyYXRvciA9PT0gXCI7XCIgfHwgb3BlcmF0b3IgPT09IFwiJlwiIHx8IG9wZXJhdG9yID09PSBcIj9cIjtcbn1cblxuZnVuY3Rpb24gZ2V0VmFsdWVzKGNvbnRleHQsIG9wZXJhdG9yLCBrZXksIG1vZGlmaWVyKSB7XG4gIHZhciB2YWx1ZSA9IGNvbnRleHRba2V5XSxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIGlmIChpc0RlZmluZWQodmFsdWUpICYmIHZhbHVlICE9PSBcIlwiKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgdmFsdWUgPSB2YWx1ZS50b1N0cmluZygpO1xuXG4gICAgICBpZiAobW9kaWZpZXIgJiYgbW9kaWZpZXIgIT09IFwiKlwiKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUuc3Vic3RyaW5nKDAsIHBhcnNlSW50KG1vZGlmaWVyLCAxMCkpO1xuICAgICAgfVxuXG4gICAgICByZXN1bHQucHVzaChlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWUsIGlzS2V5T3BlcmF0b3Iob3BlcmF0b3IpID8ga2V5IDogXCJcIikpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAobW9kaWZpZXIgPT09IFwiKlwiKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgIHZhbHVlLmZpbHRlcihpc0RlZmluZWQpLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaChlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWUsIGlzS2V5T3BlcmF0b3Iob3BlcmF0b3IpID8ga2V5IDogXCJcIikpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIE9iamVjdC5rZXlzKHZhbHVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICBpZiAoaXNEZWZpbmVkKHZhbHVlW2tdKSkge1xuICAgICAgICAgICAgICByZXN1bHQucHVzaChlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWVba10sIGspKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdG1wID0gW107XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgdmFsdWUuZmlsdGVyKGlzRGVmaW5lZCkuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRtcC5wdXNoKGVuY29kZVZhbHVlKG9wZXJhdG9yLCB2YWx1ZSkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIE9iamVjdC5rZXlzKHZhbHVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICBpZiAoaXNEZWZpbmVkKHZhbHVlW2tdKSkge1xuICAgICAgICAgICAgICB0bXAucHVzaChlbmNvZGVVbnJlc2VydmVkKGspKTtcbiAgICAgICAgICAgICAgdG1wLnB1c2goZW5jb2RlVmFsdWUob3BlcmF0b3IsIHZhbHVlW2tdLnRvU3RyaW5nKCkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0tleU9wZXJhdG9yKG9wZXJhdG9yKSkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKGVuY29kZVVucmVzZXJ2ZWQoa2V5KSArIFwiPVwiICsgdG1wLmpvaW4oXCIsXCIpKTtcbiAgICAgICAgfSBlbHNlIGlmICh0bXAubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2godG1wLmpvaW4oXCIsXCIpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAob3BlcmF0b3IgPT09IFwiO1wiKSB7XG4gICAgICBpZiAoaXNEZWZpbmVkKHZhbHVlKSkge1xuICAgICAgICByZXN1bHQucHVzaChlbmNvZGVVbnJlc2VydmVkKGtleSkpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFwiXCIgJiYgKG9wZXJhdG9yID09PSBcIiZcIiB8fCBvcGVyYXRvciA9PT0gXCI/XCIpKSB7XG4gICAgICByZXN1bHQucHVzaChlbmNvZGVVbnJlc2VydmVkKGtleSkgKyBcIj1cIik7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gXCJcIikge1xuICAgICAgcmVzdWx0LnB1c2goXCJcIik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gcGFyc2VVcmwodGVtcGxhdGUpIHtcbiAgcmV0dXJuIHtcbiAgICBleHBhbmQ6IGV4cGFuZC5iaW5kKG51bGwsIHRlbXBsYXRlKVxuICB9O1xufVxuXG5mdW5jdGlvbiBleHBhbmQodGVtcGxhdGUsIGNvbnRleHQpIHtcbiAgdmFyIG9wZXJhdG9ycyA9IFtcIitcIiwgXCIjXCIsIFwiLlwiLCBcIi9cIiwgXCI7XCIsIFwiP1wiLCBcIiZcIl07XG4gIHJldHVybiB0ZW1wbGF0ZS5yZXBsYWNlKC9cXHsoW15cXHtcXH1dKylcXH18KFteXFx7XFx9XSspL2csIGZ1bmN0aW9uIChfLCBleHByZXNzaW9uLCBsaXRlcmFsKSB7XG4gICAgaWYgKGV4cHJlc3Npb24pIHtcbiAgICAgIGxldCBvcGVyYXRvciA9IFwiXCI7XG4gICAgICBjb25zdCB2YWx1ZXMgPSBbXTtcblxuICAgICAgaWYgKG9wZXJhdG9ycy5pbmRleE9mKGV4cHJlc3Npb24uY2hhckF0KDApKSAhPT0gLTEpIHtcbiAgICAgICAgb3BlcmF0b3IgPSBleHByZXNzaW9uLmNoYXJBdCgwKTtcbiAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb24uc3Vic3RyKDEpO1xuICAgICAgfVxuXG4gICAgICBleHByZXNzaW9uLnNwbGl0KC8sL2cpLmZvckVhY2goZnVuY3Rpb24gKHZhcmlhYmxlKSB7XG4gICAgICAgIHZhciB0bXAgPSAvKFteOlxcKl0qKSg/OjooXFxkKyl8KFxcKikpPy8uZXhlYyh2YXJpYWJsZSk7XG4gICAgICAgIHZhbHVlcy5wdXNoKGdldFZhbHVlcyhjb250ZXh0LCBvcGVyYXRvciwgdG1wWzFdLCB0bXBbMl0gfHwgdG1wWzNdKSk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKG9wZXJhdG9yICYmIG9wZXJhdG9yICE9PSBcIitcIikge1xuICAgICAgICB2YXIgc2VwYXJhdG9yID0gXCIsXCI7XG5cbiAgICAgICAgaWYgKG9wZXJhdG9yID09PSBcIj9cIikge1xuICAgICAgICAgIHNlcGFyYXRvciA9IFwiJlwiO1xuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdG9yICE9PSBcIiNcIikge1xuICAgICAgICAgIHNlcGFyYXRvciA9IG9wZXJhdG9yO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICh2YWx1ZXMubGVuZ3RoICE9PSAwID8gb3BlcmF0b3IgOiBcIlwiKSArIHZhbHVlcy5qb2luKHNlcGFyYXRvcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdmFsdWVzLmpvaW4oXCIsXCIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZW5jb2RlUmVzZXJ2ZWQobGl0ZXJhbCk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gcGFyc2Uob3B0aW9ucykge1xuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jbWV0aG9kc1xuICBsZXQgbWV0aG9kID0gb3B0aW9ucy5tZXRob2QudG9VcHBlckNhc2UoKTsgLy8gcmVwbGFjZSA6dmFybmFtZSB3aXRoIHt2YXJuYW1lfSB0byBtYWtlIGl0IFJGQyA2NTcwIGNvbXBhdGlibGVcblxuICBsZXQgdXJsID0gKG9wdGlvbnMudXJsIHx8IFwiL1wiKS5yZXBsYWNlKC86KFthLXpdXFx3KykvZywgXCJ7JDF9XCIpO1xuICBsZXQgaGVhZGVycyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuaGVhZGVycyk7XG4gIGxldCBib2R5O1xuICBsZXQgcGFyYW1ldGVycyA9IG9taXQob3B0aW9ucywgW1wibWV0aG9kXCIsIFwiYmFzZVVybFwiLCBcInVybFwiLCBcImhlYWRlcnNcIiwgXCJyZXF1ZXN0XCIsIFwibWVkaWFUeXBlXCJdKTsgLy8gZXh0cmFjdCB2YXJpYWJsZSBuYW1lcyBmcm9tIFVSTCB0byBjYWxjdWxhdGUgcmVtYWluaW5nIHZhcmlhYmxlcyBsYXRlclxuXG4gIGNvbnN0IHVybFZhcmlhYmxlTmFtZXMgPSBleHRyYWN0VXJsVmFyaWFibGVOYW1lcyh1cmwpO1xuICB1cmwgPSBwYXJzZVVybCh1cmwpLmV4cGFuZChwYXJhbWV0ZXJzKTtcblxuICBpZiAoIS9eaHR0cC8udGVzdCh1cmwpKSB7XG4gICAgdXJsID0gb3B0aW9ucy5iYXNlVXJsICsgdXJsO1xuICB9XG5cbiAgY29uc3Qgb21pdHRlZFBhcmFtZXRlcnMgPSBPYmplY3Qua2V5cyhvcHRpb25zKS5maWx0ZXIob3B0aW9uID0+IHVybFZhcmlhYmxlTmFtZXMuaW5jbHVkZXMob3B0aW9uKSkuY29uY2F0KFwiYmFzZVVybFwiKTtcbiAgY29uc3QgcmVtYWluaW5nUGFyYW1ldGVycyA9IG9taXQocGFyYW1ldGVycywgb21pdHRlZFBhcmFtZXRlcnMpO1xuICBjb25zdCBpc0JpbmFyeVJlcXVlc3QgPSAvYXBwbGljYXRpb25cXC9vY3RldC1zdHJlYW0vaS50ZXN0KGhlYWRlcnMuYWNjZXB0KTtcblxuICBpZiAoIWlzQmluYXJ5UmVxdWVzdCkge1xuICAgIGlmIChvcHRpb25zLm1lZGlhVHlwZS5mb3JtYXQpIHtcbiAgICAgIC8vIGUuZy4gYXBwbGljYXRpb24vdm5kLmdpdGh1Yi52Mytqc29uID0+IGFwcGxpY2F0aW9uL3ZuZC5naXRodWIudjMucmF3XG4gICAgICBoZWFkZXJzLmFjY2VwdCA9IGhlYWRlcnMuYWNjZXB0LnNwbGl0KC8sLykubWFwKHByZXZpZXcgPT4gcHJldmlldy5yZXBsYWNlKC9hcHBsaWNhdGlvblxcL3ZuZChcXC5cXHcrKShcXC52Myk/KFxcLlxcdyspPyhcXCtqc29uKT8kLywgYGFwcGxpY2F0aW9uL3ZuZCQxJDIuJHtvcHRpb25zLm1lZGlhVHlwZS5mb3JtYXR9YCkpLmpvaW4oXCIsXCIpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHByZXZpZXdzRnJvbUFjY2VwdEhlYWRlciA9IGhlYWRlcnMuYWNjZXB0Lm1hdGNoKC9bXFx3LV0rKD89LXByZXZpZXcpL2cpIHx8IFtdO1xuICAgICAgaGVhZGVycy5hY2NlcHQgPSBwcmV2aWV3c0Zyb21BY2NlcHRIZWFkZXIuY29uY2F0KG9wdGlvbnMubWVkaWFUeXBlLnByZXZpZXdzKS5tYXAocHJldmlldyA9PiB7XG4gICAgICAgIGNvbnN0IGZvcm1hdCA9IG9wdGlvbnMubWVkaWFUeXBlLmZvcm1hdCA/IGAuJHtvcHRpb25zLm1lZGlhVHlwZS5mb3JtYXR9YCA6IFwiK2pzb25cIjtcbiAgICAgICAgcmV0dXJuIGBhcHBsaWNhdGlvbi92bmQuZ2l0aHViLiR7cHJldmlld30tcHJldmlldyR7Zm9ybWF0fWA7XG4gICAgICB9KS5qb2luKFwiLFwiKTtcbiAgICB9XG4gIH0gLy8gZm9yIEdFVC9IRUFEIHJlcXVlc3RzLCBzZXQgVVJMIHF1ZXJ5IHBhcmFtZXRlcnMgZnJvbSByZW1haW5pbmcgcGFyYW1ldGVyc1xuICAvLyBmb3IgUEFUQ0gvUE9TVC9QVVQvREVMRVRFIHJlcXVlc3RzLCBzZXQgcmVxdWVzdCBib2R5IGZyb20gcmVtYWluaW5nIHBhcmFtZXRlcnNcblxuXG4gIGlmIChbXCJHRVRcIiwgXCJIRUFEXCJdLmluY2x1ZGVzKG1ldGhvZCkpIHtcbiAgICB1cmwgPSBhZGRRdWVyeVBhcmFtZXRlcnModXJsLCByZW1haW5pbmdQYXJhbWV0ZXJzKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoXCJkYXRhXCIgaW4gcmVtYWluaW5nUGFyYW1ldGVycykge1xuICAgICAgYm9keSA9IHJlbWFpbmluZ1BhcmFtZXRlcnMuZGF0YTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKE9iamVjdC5rZXlzKHJlbWFpbmluZ1BhcmFtZXRlcnMpLmxlbmd0aCkge1xuICAgICAgICBib2R5ID0gcmVtYWluaW5nUGFyYW1ldGVycztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhlYWRlcnNbXCJjb250ZW50LWxlbmd0aFwiXSA9IDA7XG4gICAgICB9XG4gICAgfVxuICB9IC8vIGRlZmF1bHQgY29udGVudC10eXBlIGZvciBKU09OIGlmIGJvZHkgaXMgc2V0XG5cblxuICBpZiAoIWhlYWRlcnNbXCJjb250ZW50LXR5cGVcIl0gJiYgdHlwZW9mIGJvZHkgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBoZWFkZXJzW1wiY29udGVudC10eXBlXCJdID0gXCJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04XCI7XG4gIH0gLy8gR2l0SHViIGV4cGVjdHMgJ2NvbnRlbnQtbGVuZ3RoOiAwJyBoZWFkZXIgZm9yIFBVVC9QQVRDSCByZXF1ZXN0cyB3aXRob3V0IGJvZHkuXG4gIC8vIGZldGNoIGRvZXMgbm90IGFsbG93IHRvIHNldCBgY29udGVudC1sZW5ndGhgIGhlYWRlciwgYnV0IHdlIGNhbiBzZXQgYm9keSB0byBhbiBlbXB0eSBzdHJpbmdcblxuXG4gIGlmIChbXCJQQVRDSFwiLCBcIlBVVFwiXS5pbmNsdWRlcyhtZXRob2QpICYmIHR5cGVvZiBib2R5ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgYm9keSA9IFwiXCI7XG4gIH0gLy8gT25seSByZXR1cm4gYm9keS9yZXF1ZXN0IGtleXMgaWYgcHJlc2VudFxuXG5cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe1xuICAgIG1ldGhvZCxcbiAgICB1cmwsXG4gICAgaGVhZGVyc1xuICB9LCB0eXBlb2YgYm9keSAhPT0gXCJ1bmRlZmluZWRcIiA/IHtcbiAgICBib2R5XG4gIH0gOiBudWxsLCBvcHRpb25zLnJlcXVlc3QgPyB7XG4gICAgcmVxdWVzdDogb3B0aW9ucy5yZXF1ZXN0XG4gIH0gOiBudWxsKTtcbn1cblxuZnVuY3Rpb24gZW5kcG9pbnRXaXRoRGVmYXVsdHMoZGVmYXVsdHMsIHJvdXRlLCBvcHRpb25zKSB7XG4gIHJldHVybiBwYXJzZShtZXJnZShkZWZhdWx0cywgcm91dGUsIG9wdGlvbnMpKTtcbn1cblxuZnVuY3Rpb24gd2l0aERlZmF1bHRzKG9sZERlZmF1bHRzLCBuZXdEZWZhdWx0cykge1xuICBjb25zdCBERUZBVUxUUyA9IG1lcmdlKG9sZERlZmF1bHRzLCBuZXdEZWZhdWx0cyk7XG4gIGNvbnN0IGVuZHBvaW50ID0gZW5kcG9pbnRXaXRoRGVmYXVsdHMuYmluZChudWxsLCBERUZBVUxUUyk7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKGVuZHBvaW50LCB7XG4gICAgREVGQVVMVFMsXG4gICAgZGVmYXVsdHM6IHdpdGhEZWZhdWx0cy5iaW5kKG51bGwsIERFRkFVTFRTKSxcbiAgICBtZXJnZTogbWVyZ2UuYmluZChudWxsLCBERUZBVUxUUyksXG4gICAgcGFyc2VcbiAgfSk7XG59XG5cbmNvbnN0IFZFUlNJT04gPSBcIjYuMC4xMlwiO1xuXG5jb25zdCB1c2VyQWdlbnQgPSBgb2N0b2tpdC1lbmRwb2ludC5qcy8ke1ZFUlNJT059ICR7dW5pdmVyc2FsVXNlckFnZW50LmdldFVzZXJBZ2VudCgpfWA7IC8vIERFRkFVTFRTIGhhcyBhbGwgcHJvcGVydGllcyBzZXQgdGhhdCBFbmRwb2ludE9wdGlvbnMgaGFzLCBleGNlcHQgdXJsLlxuLy8gU28gd2UgdXNlIFJlcXVlc3RQYXJhbWV0ZXJzIGFuZCBhZGQgbWV0aG9kIGFzIGFkZGl0aW9uYWwgcmVxdWlyZWQgcHJvcGVydHkuXG5cbmNvbnN0IERFRkFVTFRTID0ge1xuICBtZXRob2Q6IFwiR0VUXCIsXG4gIGJhc2VVcmw6IFwiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbVwiLFxuICBoZWFkZXJzOiB7XG4gICAgYWNjZXB0OiBcImFwcGxpY2F0aW9uL3ZuZC5naXRodWIudjMranNvblwiLFxuICAgIFwidXNlci1hZ2VudFwiOiB1c2VyQWdlbnRcbiAgfSxcbiAgbWVkaWFUeXBlOiB7XG4gICAgZm9ybWF0OiBcIlwiLFxuICAgIHByZXZpZXdzOiBbXVxuICB9XG59O1xuXG5jb25zdCBlbmRwb2ludCA9IHdpdGhEZWZhdWx0cyhudWxsLCBERUZBVUxUUyk7XG5cbmV4cG9ydHMuZW5kcG9pbnQgPSBlbmRwb2ludDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcblxudmFyIGNvbnZlcnNpb25zID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IGNvbnZlcnNpb25zO1xuXG5mdW5jdGlvbiBzaWduKHgpIHtcbiAgICByZXR1cm4geCA8IDAgPyAtMSA6IDE7XG59XG5cbmZ1bmN0aW9uIGV2ZW5Sb3VuZCh4KSB7XG4gICAgLy8gUm91bmQgeCB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyLCBjaG9vc2luZyB0aGUgZXZlbiBpbnRlZ2VyIGlmIGl0IGxpZXMgaGFsZndheSBiZXR3ZWVuIHR3by5cbiAgICBpZiAoKHggJSAxKSA9PT0gMC41ICYmICh4ICYgMSkgPT09IDApIHsgLy8gW2V2ZW4gbnVtYmVyXS41OyByb3VuZCBkb3duIChpLmUuIGZsb29yKVxuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcih4KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gTWF0aC5yb3VuZCh4KTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU51bWJlckNvbnZlcnNpb24oYml0TGVuZ3RoLCB0eXBlT3B0cykge1xuICAgIGlmICghdHlwZU9wdHMudW5zaWduZWQpIHtcbiAgICAgICAgLS1iaXRMZW5ndGg7XG4gICAgfVxuICAgIGNvbnN0IGxvd2VyQm91bmQgPSB0eXBlT3B0cy51bnNpZ25lZCA/IDAgOiAtTWF0aC5wb3coMiwgYml0TGVuZ3RoKTtcbiAgICBjb25zdCB1cHBlckJvdW5kID0gTWF0aC5wb3coMiwgYml0TGVuZ3RoKSAtIDE7XG5cbiAgICBjb25zdCBtb2R1bG9WYWwgPSB0eXBlT3B0cy5tb2R1bG9CaXRMZW5ndGggPyBNYXRoLnBvdygyLCB0eXBlT3B0cy5tb2R1bG9CaXRMZW5ndGgpIDogTWF0aC5wb3coMiwgYml0TGVuZ3RoKTtcbiAgICBjb25zdCBtb2R1bG9Cb3VuZCA9IHR5cGVPcHRzLm1vZHVsb0JpdExlbmd0aCA/IE1hdGgucG93KDIsIHR5cGVPcHRzLm1vZHVsb0JpdExlbmd0aCAtIDEpIDogTWF0aC5wb3coMiwgYml0TGVuZ3RoIC0gMSk7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24oViwgb3B0cykge1xuICAgICAgICBpZiAoIW9wdHMpIG9wdHMgPSB7fTtcblxuICAgICAgICBsZXQgeCA9ICtWO1xuXG4gICAgICAgIGlmIChvcHRzLmVuZm9yY2VSYW5nZSkge1xuICAgICAgICAgICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoeCkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgaXMgbm90IGEgZmluaXRlIG51bWJlclwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgeCA9IHNpZ24oeCkgKiBNYXRoLmZsb29yKE1hdGguYWJzKHgpKTtcbiAgICAgICAgICAgIGlmICh4IDwgbG93ZXJCb3VuZCB8fCB4ID4gdXBwZXJCb3VuZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCBpcyBub3QgaW4gYnl0ZSByYW5nZVwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzTmFOKHgpICYmIG9wdHMuY2xhbXApIHtcbiAgICAgICAgICAgIHggPSBldmVuUm91bmQoeCk7XG5cbiAgICAgICAgICAgIGlmICh4IDwgbG93ZXJCb3VuZCkgeCA9IGxvd2VyQm91bmQ7XG4gICAgICAgICAgICBpZiAoeCA+IHVwcGVyQm91bmQpIHggPSB1cHBlckJvdW5kO1xuICAgICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIU51bWJlci5pc0Zpbml0ZSh4KSB8fCB4ID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHggPSBzaWduKHgpICogTWF0aC5mbG9vcihNYXRoLmFicyh4KSk7XG4gICAgICAgIHggPSB4ICUgbW9kdWxvVmFsO1xuXG4gICAgICAgIGlmICghdHlwZU9wdHMudW5zaWduZWQgJiYgeCA+PSBtb2R1bG9Cb3VuZCkge1xuICAgICAgICAgICAgcmV0dXJuIHggLSBtb2R1bG9WYWw7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZU9wdHMudW5zaWduZWQpIHtcbiAgICAgICAgICAgIGlmICh4IDwgMCkge1xuICAgICAgICAgICAgICB4ICs9IG1vZHVsb1ZhbDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoeCA9PT0gLTApIHsgLy8gZG9uJ3QgcmV0dXJuIG5lZ2F0aXZlIHplcm9cbiAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4geDtcbiAgICB9XG59XG5cbmNvbnZlcnNpb25zW1widm9pZFwiXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufTtcblxuY29udmVyc2lvbnNbXCJib29sZWFuXCJdID0gZnVuY3Rpb24gKHZhbCkge1xuICAgIHJldHVybiAhIXZhbDtcbn07XG5cbmNvbnZlcnNpb25zW1wiYnl0ZVwiXSA9IGNyZWF0ZU51bWJlckNvbnZlcnNpb24oOCwgeyB1bnNpZ25lZDogZmFsc2UgfSk7XG5jb252ZXJzaW9uc1tcIm9jdGV0XCJdID0gY3JlYXRlTnVtYmVyQ29udmVyc2lvbig4LCB7IHVuc2lnbmVkOiB0cnVlIH0pO1xuXG5jb252ZXJzaW9uc1tcInNob3J0XCJdID0gY3JlYXRlTnVtYmVyQ29udmVyc2lvbigxNiwgeyB1bnNpZ25lZDogZmFsc2UgfSk7XG5jb252ZXJzaW9uc1tcInVuc2lnbmVkIHNob3J0XCJdID0gY3JlYXRlTnVtYmVyQ29udmVyc2lvbigxNiwgeyB1bnNpZ25lZDogdHJ1ZSB9KTtcblxuY29udmVyc2lvbnNbXCJsb25nXCJdID0gY3JlYXRlTnVtYmVyQ29udmVyc2lvbigzMiwgeyB1bnNpZ25lZDogZmFsc2UgfSk7XG5jb252ZXJzaW9uc1tcInVuc2lnbmVkIGxvbmdcIl0gPSBjcmVhdGVOdW1iZXJDb252ZXJzaW9uKDMyLCB7IHVuc2lnbmVkOiB0cnVlIH0pO1xuXG5jb252ZXJzaW9uc1tcImxvbmcgbG9uZ1wiXSA9IGNyZWF0ZU51bWJlckNvbnZlcnNpb24oMzIsIHsgdW5zaWduZWQ6IGZhbHNlLCBtb2R1bG9CaXRMZW5ndGg6IDY0IH0pO1xuY29udmVyc2lvbnNbXCJ1bnNpZ25lZCBsb25nIGxvbmdcIl0gPSBjcmVhdGVOdW1iZXJDb252ZXJzaW9uKDMyLCB7IHVuc2lnbmVkOiB0cnVlLCBtb2R1bG9CaXRMZW5ndGg6IDY0IH0pO1xuXG5jb252ZXJzaW9uc1tcImRvdWJsZVwiXSA9IGZ1bmN0aW9uIChWKSB7XG4gICAgY29uc3QgeCA9ICtWO1xuXG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoeCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50IGlzIG5vdCBhIGZpbml0ZSBmbG9hdGluZy1wb2ludCB2YWx1ZVwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4geDtcbn07XG5cbmNvbnZlcnNpb25zW1widW5yZXN0cmljdGVkIGRvdWJsZVwiXSA9IGZ1bmN0aW9uIChWKSB7XG4gICAgY29uc3QgeCA9ICtWO1xuXG4gICAgaWYgKGlzTmFOKHgpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCBpcyBOYU5cIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHg7XG59O1xuXG4vLyBub3QgcXVpdGUgdmFsaWQsIGJ1dCBnb29kIGVub3VnaCBmb3IgSlNcbmNvbnZlcnNpb25zW1wiZmxvYXRcIl0gPSBjb252ZXJzaW9uc1tcImRvdWJsZVwiXTtcbmNvbnZlcnNpb25zW1widW5yZXN0cmljdGVkIGZsb2F0XCJdID0gY29udmVyc2lvbnNbXCJ1bnJlc3RyaWN0ZWQgZG91YmxlXCJdO1xuXG5jb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXSA9IGZ1bmN0aW9uIChWLCBvcHRzKSB7XG4gICAgaWYgKCFvcHRzKSBvcHRzID0ge307XG5cbiAgICBpZiAob3B0cy50cmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIFYgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIFN0cmluZyhWKTtcbn07XG5cbmNvbnZlcnNpb25zW1wiQnl0ZVN0cmluZ1wiXSA9IGZ1bmN0aW9uIChWLCBvcHRzKSB7XG4gICAgY29uc3QgeCA9IFN0cmluZyhWKTtcbiAgICBsZXQgYyA9IHVuZGVmaW5lZDtcbiAgICBmb3IgKGxldCBpID0gMDsgKGMgPSB4LmNvZGVQb2ludEF0KGkpKSAhPT0gdW5kZWZpbmVkOyArK2kpIHtcbiAgICAgICAgaWYgKGMgPiAyNTUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCBpcyBub3QgYSB2YWxpZCBieXRlc3RyaW5nXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHg7XG59O1xuXG5jb252ZXJzaW9uc1tcIlVTVlN0cmluZ1wiXSA9IGZ1bmN0aW9uIChWKSB7XG4gICAgY29uc3QgUyA9IFN0cmluZyhWKTtcbiAgICBjb25zdCBuID0gUy5sZW5ndGg7XG4gICAgY29uc3QgVSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIGNvbnN0IGMgPSBTLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGlmIChjIDwgMHhEODAwIHx8IGMgPiAweERGRkYpIHtcbiAgICAgICAgICAgIFUucHVzaChTdHJpbmcuZnJvbUNvZGVQb2ludChjKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoMHhEQzAwIDw9IGMgJiYgYyA8PSAweERGRkYpIHtcbiAgICAgICAgICAgIFUucHVzaChTdHJpbmcuZnJvbUNvZGVQb2ludCgweEZGRkQpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChpID09PSBuIC0gMSkge1xuICAgICAgICAgICAgICAgIFUucHVzaChTdHJpbmcuZnJvbUNvZGVQb2ludCgweEZGRkQpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZCA9IFMuY2hhckNvZGVBdChpICsgMSk7XG4gICAgICAgICAgICAgICAgaWYgKDB4REMwMCA8PSBkICYmIGQgPD0gMHhERkZGKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGEgPSBjICYgMHgzRkY7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGIgPSBkICYgMHgzRkY7XG4gICAgICAgICAgICAgICAgICAgIFUucHVzaChTdHJpbmcuZnJvbUNvZGVQb2ludCgoMiA8PCAxNSkgKyAoMiA8PCA5KSAqIGEgKyBiKSk7XG4gICAgICAgICAgICAgICAgICAgICsraTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBVLnB1c2goU3RyaW5nLmZyb21Db2RlUG9pbnQoMHhGRkZEKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFUuam9pbignJyk7XG59O1xuXG5jb252ZXJzaW9uc1tcIkRhdGVcIl0gPSBmdW5jdGlvbiAoViwgb3B0cykge1xuICAgIGlmICghKFYgaW5zdGFuY2VvZiBEYXRlKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgaXMgbm90IGEgRGF0ZSBvYmplY3RcIik7XG4gICAgfVxuICAgIGlmIChpc05hTihWKSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJldHVybiBWO1xufTtcblxuY29udmVyc2lvbnNbXCJSZWdFeHBcIl0gPSBmdW5jdGlvbiAoViwgb3B0cykge1xuICAgIGlmICghKFYgaW5zdGFuY2VvZiBSZWdFeHApKSB7XG4gICAgICAgIFYgPSBuZXcgUmVnRXhwKFYpO1xuICAgIH1cblxuICAgIHJldHVybiBWO1xufTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzLm1peGluID0gZnVuY3Rpb24gbWl4aW4odGFyZ2V0LCBzb3VyY2UpIHtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHNvdXJjZSk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleXNbaV0sIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXlzW2ldKSk7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzLndyYXBwZXJTeW1ib2wgPSBTeW1ib2woXCJ3cmFwcGVyXCIpO1xubW9kdWxlLmV4cG9ydHMuaW1wbFN5bWJvbCA9IFN5bWJvbChcImltcGxcIik7XG5cbm1vZHVsZS5leHBvcnRzLndyYXBwZXJGb3JJbXBsID0gZnVuY3Rpb24gKGltcGwpIHtcbiAgcmV0dXJuIGltcGxbbW9kdWxlLmV4cG9ydHMud3JhcHBlclN5bWJvbF07XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5pbXBsRm9yV3JhcHBlciA9IGZ1bmN0aW9uICh3cmFwcGVyKSB7XG4gIHJldHVybiB3cmFwcGVyW21vZHVsZS5leHBvcnRzLmltcGxTeW1ib2xdO1xufTtcblxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcblxudmFyIHB1bnljb2RlID0gcmVxdWlyZShcInB1bnljb2RlXCIpO1xudmFyIG1hcHBpbmdUYWJsZSA9IHJlcXVpcmUoXCIuL2xpYi9tYXBwaW5nVGFibGUuanNvblwiKTtcblxudmFyIFBST0NFU1NJTkdfT1BUSU9OUyA9IHtcbiAgVFJBTlNJVElPTkFMOiAwLFxuICBOT05UUkFOU0lUSU9OQUw6IDFcbn07XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZShzdHIpIHsgLy8gZml4IGJ1ZyBpbiB2OFxuICByZXR1cm4gc3RyLnNwbGl0KCdcXHUwMDAwJykubWFwKGZ1bmN0aW9uIChzKSB7IHJldHVybiBzLm5vcm1hbGl6ZSgnTkZDJyk7IH0pLmpvaW4oJ1xcdTAwMDAnKTtcbn1cblxuZnVuY3Rpb24gZmluZFN0YXR1cyh2YWwpIHtcbiAgdmFyIHN0YXJ0ID0gMDtcbiAgdmFyIGVuZCA9IG1hcHBpbmdUYWJsZS5sZW5ndGggLSAxO1xuXG4gIHdoaWxlIChzdGFydCA8PSBlbmQpIHtcbiAgICB2YXIgbWlkID0gTWF0aC5mbG9vcigoc3RhcnQgKyBlbmQpIC8gMik7XG5cbiAgICB2YXIgdGFyZ2V0ID0gbWFwcGluZ1RhYmxlW21pZF07XG4gICAgaWYgKHRhcmdldFswXVswXSA8PSB2YWwgJiYgdGFyZ2V0WzBdWzFdID49IHZhbCkge1xuICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9IGVsc2UgaWYgKHRhcmdldFswXVswXSA+IHZhbCkge1xuICAgICAgZW5kID0gbWlkIC0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhcnQgPSBtaWQgKyAxO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG52YXIgcmVnZXhBc3RyYWxTeW1ib2xzID0gL1tcXHVEODAwLVxcdURCRkZdW1xcdURDMDAtXFx1REZGRl0vZztcblxuZnVuY3Rpb24gY291bnRTeW1ib2xzKHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nXG4gICAgLy8gcmVwbGFjZSBldmVyeSBzdXJyb2dhdGUgcGFpciB3aXRoIGEgQk1QIHN5bWJvbFxuICAgIC5yZXBsYWNlKHJlZ2V4QXN0cmFsU3ltYm9scywgJ18nKVxuICAgIC8vIHRoZW4gZ2V0IHRoZSBsZW5ndGhcbiAgICAubGVuZ3RoO1xufVxuXG5mdW5jdGlvbiBtYXBDaGFycyhkb21haW5fbmFtZSwgdXNlU1REMywgcHJvY2Vzc2luZ19vcHRpb24pIHtcbiAgdmFyIGhhc0Vycm9yID0gZmFsc2U7XG4gIHZhciBwcm9jZXNzZWQgPSBcIlwiO1xuXG4gIHZhciBsZW4gPSBjb3VudFN5bWJvbHMoZG9tYWluX25hbWUpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgdmFyIGNvZGVQb2ludCA9IGRvbWFpbl9uYW1lLmNvZGVQb2ludEF0KGkpO1xuICAgIHZhciBzdGF0dXMgPSBmaW5kU3RhdHVzKGNvZGVQb2ludCk7XG5cbiAgICBzd2l0Y2ggKHN0YXR1c1sxXSkge1xuICAgICAgY2FzZSBcImRpc2FsbG93ZWRcIjpcbiAgICAgICAgaGFzRXJyb3IgPSB0cnVlO1xuICAgICAgICBwcm9jZXNzZWQgKz0gU3RyaW5nLmZyb21Db2RlUG9pbnQoY29kZVBvaW50KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiaWdub3JlZFwiOlxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJtYXBwZWRcIjpcbiAgICAgICAgcHJvY2Vzc2VkICs9IFN0cmluZy5mcm9tQ29kZVBvaW50LmFwcGx5KFN0cmluZywgc3RhdHVzWzJdKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiZGV2aWF0aW9uXCI6XG4gICAgICAgIGlmIChwcm9jZXNzaW5nX29wdGlvbiA9PT0gUFJPQ0VTU0lOR19PUFRJT05TLlRSQU5TSVRJT05BTCkge1xuICAgICAgICAgIHByb2Nlc3NlZCArPSBTdHJpbmcuZnJvbUNvZGVQb2ludC5hcHBseShTdHJpbmcsIHN0YXR1c1syXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJvY2Vzc2VkICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KGNvZGVQb2ludCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwidmFsaWRcIjpcbiAgICAgICAgcHJvY2Vzc2VkICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KGNvZGVQb2ludCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIjpcbiAgICAgICAgaWYgKHVzZVNURDMpIHtcbiAgICAgICAgICBoYXNFcnJvciA9IHRydWU7XG4gICAgICAgICAgcHJvY2Vzc2VkICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KGNvZGVQb2ludCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJvY2Vzc2VkICs9IFN0cmluZy5mcm9tQ29kZVBvaW50LmFwcGx5KFN0cmluZywgc3RhdHVzWzJdKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJkaXNhbGxvd2VkX1NURDNfdmFsaWRcIjpcbiAgICAgICAgaWYgKHVzZVNURDMpIHtcbiAgICAgICAgICBoYXNFcnJvciA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBwcm9jZXNzZWQgKz0gU3RyaW5nLmZyb21Db2RlUG9pbnQoY29kZVBvaW50KTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzdHJpbmc6IHByb2Nlc3NlZCxcbiAgICBlcnJvcjogaGFzRXJyb3JcbiAgfTtcbn1cblxudmFyIGNvbWJpbmluZ01hcmtzUmVnZXggPSAvW1xcdTAzMDAtXFx1MDM2RlxcdTA0ODMtXFx1MDQ4OVxcdTA1OTEtXFx1MDVCRFxcdTA1QkZcXHUwNUMxXFx1MDVDMlxcdTA1QzRcXHUwNUM1XFx1MDVDN1xcdTA2MTAtXFx1MDYxQVxcdTA2NEItXFx1MDY1RlxcdTA2NzBcXHUwNkQ2LVxcdTA2RENcXHUwNkRGLVxcdTA2RTRcXHUwNkU3XFx1MDZFOFxcdTA2RUEtXFx1MDZFRFxcdTA3MTFcXHUwNzMwLVxcdTA3NEFcXHUwN0E2LVxcdTA3QjBcXHUwN0VCLVxcdTA3RjNcXHUwODE2LVxcdTA4MTlcXHUwODFCLVxcdTA4MjNcXHUwODI1LVxcdTA4MjdcXHUwODI5LVxcdTA4MkRcXHUwODU5LVxcdTA4NUJcXHUwOEU0LVxcdTA5MDNcXHUwOTNBLVxcdTA5M0NcXHUwOTNFLVxcdTA5NEZcXHUwOTUxLVxcdTA5NTdcXHUwOTYyXFx1MDk2M1xcdTA5ODEtXFx1MDk4M1xcdTA5QkNcXHUwOUJFLVxcdTA5QzRcXHUwOUM3XFx1MDlDOFxcdTA5Q0ItXFx1MDlDRFxcdTA5RDdcXHUwOUUyXFx1MDlFM1xcdTBBMDEtXFx1MEEwM1xcdTBBM0NcXHUwQTNFLVxcdTBBNDJcXHUwQTQ3XFx1MEE0OFxcdTBBNEItXFx1MEE0RFxcdTBBNTFcXHUwQTcwXFx1MEE3MVxcdTBBNzVcXHUwQTgxLVxcdTBBODNcXHUwQUJDXFx1MEFCRS1cXHUwQUM1XFx1MEFDNy1cXHUwQUM5XFx1MEFDQi1cXHUwQUNEXFx1MEFFMlxcdTBBRTNcXHUwQjAxLVxcdTBCMDNcXHUwQjNDXFx1MEIzRS1cXHUwQjQ0XFx1MEI0N1xcdTBCNDhcXHUwQjRCLVxcdTBCNERcXHUwQjU2XFx1MEI1N1xcdTBCNjJcXHUwQjYzXFx1MEI4MlxcdTBCQkUtXFx1MEJDMlxcdTBCQzYtXFx1MEJDOFxcdTBCQ0EtXFx1MEJDRFxcdTBCRDdcXHUwQzAwLVxcdTBDMDNcXHUwQzNFLVxcdTBDNDRcXHUwQzQ2LVxcdTBDNDhcXHUwQzRBLVxcdTBDNERcXHUwQzU1XFx1MEM1NlxcdTBDNjJcXHUwQzYzXFx1MEM4MS1cXHUwQzgzXFx1MENCQ1xcdTBDQkUtXFx1MENDNFxcdTBDQzYtXFx1MENDOFxcdTBDQ0EtXFx1MENDRFxcdTBDRDVcXHUwQ0Q2XFx1MENFMlxcdTBDRTNcXHUwRDAxLVxcdTBEMDNcXHUwRDNFLVxcdTBENDRcXHUwRDQ2LVxcdTBENDhcXHUwRDRBLVxcdTBENERcXHUwRDU3XFx1MEQ2MlxcdTBENjNcXHUwRDgyXFx1MEQ4M1xcdTBEQ0FcXHUwRENGLVxcdTBERDRcXHUwREQ2XFx1MEREOC1cXHUwRERGXFx1MERGMlxcdTBERjNcXHUwRTMxXFx1MEUzNC1cXHUwRTNBXFx1MEU0Ny1cXHUwRTRFXFx1MEVCMVxcdTBFQjQtXFx1MEVCOVxcdTBFQkJcXHUwRUJDXFx1MEVDOC1cXHUwRUNEXFx1MEYxOFxcdTBGMTlcXHUwRjM1XFx1MEYzN1xcdTBGMzlcXHUwRjNFXFx1MEYzRlxcdTBGNzEtXFx1MEY4NFxcdTBGODZcXHUwRjg3XFx1MEY4RC1cXHUwRjk3XFx1MEY5OS1cXHUwRkJDXFx1MEZDNlxcdTEwMkItXFx1MTAzRVxcdTEwNTYtXFx1MTA1OVxcdTEwNUUtXFx1MTA2MFxcdTEwNjItXFx1MTA2NFxcdTEwNjctXFx1MTA2RFxcdTEwNzEtXFx1MTA3NFxcdTEwODItXFx1MTA4RFxcdTEwOEZcXHUxMDlBLVxcdTEwOURcXHUxMzVELVxcdTEzNUZcXHUxNzEyLVxcdTE3MTRcXHUxNzMyLVxcdTE3MzRcXHUxNzUyXFx1MTc1M1xcdTE3NzJcXHUxNzczXFx1MTdCNC1cXHUxN0QzXFx1MTdERFxcdTE4MEItXFx1MTgwRFxcdTE4QTlcXHUxOTIwLVxcdTE5MkJcXHUxOTMwLVxcdTE5M0JcXHUxOUIwLVxcdTE5QzBcXHUxOUM4XFx1MTlDOVxcdTFBMTctXFx1MUExQlxcdTFBNTUtXFx1MUE1RVxcdTFBNjAtXFx1MUE3Q1xcdTFBN0ZcXHUxQUIwLVxcdTFBQkVcXHUxQjAwLVxcdTFCMDRcXHUxQjM0LVxcdTFCNDRcXHUxQjZCLVxcdTFCNzNcXHUxQjgwLVxcdTFCODJcXHUxQkExLVxcdTFCQURcXHUxQkU2LVxcdTFCRjNcXHUxQzI0LVxcdTFDMzdcXHUxQ0QwLVxcdTFDRDJcXHUxQ0Q0LVxcdTFDRThcXHUxQ0VEXFx1MUNGMi1cXHUxQ0Y0XFx1MUNGOFxcdTFDRjlcXHUxREMwLVxcdTFERjVcXHUxREZDLVxcdTFERkZcXHUyMEQwLVxcdTIwRjBcXHUyQ0VGLVxcdTJDRjFcXHUyRDdGXFx1MkRFMC1cXHUyREZGXFx1MzAyQS1cXHUzMDJGXFx1MzA5OVxcdTMwOUFcXHVBNjZGLVxcdUE2NzJcXHVBNjc0LVxcdUE2N0RcXHVBNjlGXFx1QTZGMFxcdUE2RjFcXHVBODAyXFx1QTgwNlxcdUE4MEJcXHVBODIzLVxcdUE4MjdcXHVBODgwXFx1QTg4MVxcdUE4QjQtXFx1QThDNFxcdUE4RTAtXFx1QThGMVxcdUE5MjYtXFx1QTkyRFxcdUE5NDctXFx1QTk1M1xcdUE5ODAtXFx1QTk4M1xcdUE5QjMtXFx1QTlDMFxcdUE5RTVcXHVBQTI5LVxcdUFBMzZcXHVBQTQzXFx1QUE0Q1xcdUFBNERcXHVBQTdCLVxcdUFBN0RcXHVBQUIwXFx1QUFCMi1cXHVBQUI0XFx1QUFCN1xcdUFBQjhcXHVBQUJFXFx1QUFCRlxcdUFBQzFcXHVBQUVCLVxcdUFBRUZcXHVBQUY1XFx1QUFGNlxcdUFCRTMtXFx1QUJFQVxcdUFCRUNcXHVBQkVEXFx1RkIxRVxcdUZFMDAtXFx1RkUwRlxcdUZFMjAtXFx1RkUyRF18XFx1RDgwMFtcXHVEREZEXFx1REVFMFxcdURGNzYtXFx1REY3QV18XFx1RDgwMltcXHVERTAxLVxcdURFMDNcXHVERTA1XFx1REUwNlxcdURFMEMtXFx1REUwRlxcdURFMzgtXFx1REUzQVxcdURFM0ZcXHVERUU1XFx1REVFNl18XFx1RDgwNFtcXHVEQzAwLVxcdURDMDJcXHVEQzM4LVxcdURDNDZcXHVEQzdGLVxcdURDODJcXHVEQ0IwLVxcdURDQkFcXHVERDAwLVxcdUREMDJcXHVERDI3LVxcdUREMzRcXHVERDczXFx1REQ4MC1cXHVERDgyXFx1RERCMy1cXHVEREMwXFx1REUyQy1cXHVERTM3XFx1REVERi1cXHVERUVBXFx1REYwMS1cXHVERjAzXFx1REYzQ1xcdURGM0UtXFx1REY0NFxcdURGNDdcXHVERjQ4XFx1REY0Qi1cXHVERjREXFx1REY1N1xcdURGNjJcXHVERjYzXFx1REY2Ni1cXHVERjZDXFx1REY3MC1cXHVERjc0XXxcXHVEODA1W1xcdURDQjAtXFx1RENDM1xcdUREQUYtXFx1RERCNVxcdUREQjgtXFx1RERDMFxcdURFMzAtXFx1REU0MFxcdURFQUItXFx1REVCN118XFx1RDgxQVtcXHVERUYwLVxcdURFRjRcXHVERjMwLVxcdURGMzZdfFxcdUQ4MUJbXFx1REY1MS1cXHVERjdFXFx1REY4Ri1cXHVERjkyXXxcXHVEODJGW1xcdURDOURcXHVEQzlFXXxcXHVEODM0W1xcdURENjUtXFx1REQ2OVxcdURENkQtXFx1REQ3MlxcdUREN0ItXFx1REQ4MlxcdUREODUtXFx1REQ4QlxcdUREQUEtXFx1RERBRFxcdURFNDItXFx1REU0NF18XFx1RDgzQVtcXHVEQ0QwLVxcdURDRDZdfFxcdURCNDBbXFx1REQwMC1cXHVEREVGXS87XG5cbmZ1bmN0aW9uIHZhbGlkYXRlTGFiZWwobGFiZWwsIHByb2Nlc3Npbmdfb3B0aW9uKSB7XG4gIGlmIChsYWJlbC5zdWJzdHIoMCwgNCkgPT09IFwieG4tLVwiKSB7XG4gICAgbGFiZWwgPSBwdW55Y29kZS50b1VuaWNvZGUobGFiZWwpO1xuICAgIHByb2Nlc3Npbmdfb3B0aW9uID0gUFJPQ0VTU0lOR19PUFRJT05TLk5PTlRSQU5TSVRJT05BTDtcbiAgfVxuXG4gIHZhciBlcnJvciA9IGZhbHNlO1xuXG4gIGlmIChub3JtYWxpemUobGFiZWwpICE9PSBsYWJlbCB8fFxuICAgICAgKGxhYmVsWzNdID09PSBcIi1cIiAmJiBsYWJlbFs0XSA9PT0gXCItXCIpIHx8XG4gICAgICBsYWJlbFswXSA9PT0gXCItXCIgfHwgbGFiZWxbbGFiZWwubGVuZ3RoIC0gMV0gPT09IFwiLVwiIHx8XG4gICAgICBsYWJlbC5pbmRleE9mKFwiLlwiKSAhPT0gLTEgfHxcbiAgICAgIGxhYmVsLnNlYXJjaChjb21iaW5pbmdNYXJrc1JlZ2V4KSA9PT0gMCkge1xuICAgIGVycm9yID0gdHJ1ZTtcbiAgfVxuXG4gIHZhciBsZW4gPSBjb3VudFN5bWJvbHMobGFiZWwpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgdmFyIHN0YXR1cyA9IGZpbmRTdGF0dXMobGFiZWwuY29kZVBvaW50QXQoaSkpO1xuICAgIGlmICgocHJvY2Vzc2luZyA9PT0gUFJPQ0VTU0lOR19PUFRJT05TLlRSQU5TSVRJT05BTCAmJiBzdGF0dXNbMV0gIT09IFwidmFsaWRcIikgfHxcbiAgICAgICAgKHByb2Nlc3NpbmcgPT09IFBST0NFU1NJTkdfT1BUSU9OUy5OT05UUkFOU0lUSU9OQUwgJiZcbiAgICAgICAgIHN0YXR1c1sxXSAhPT0gXCJ2YWxpZFwiICYmIHN0YXR1c1sxXSAhPT0gXCJkZXZpYXRpb25cIikpIHtcbiAgICAgIGVycm9yID0gdHJ1ZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbGFiZWw6IGxhYmVsLFxuICAgIGVycm9yOiBlcnJvclxuICB9O1xufVxuXG5mdW5jdGlvbiBwcm9jZXNzaW5nKGRvbWFpbl9uYW1lLCB1c2VTVEQzLCBwcm9jZXNzaW5nX29wdGlvbikge1xuICB2YXIgcmVzdWx0ID0gbWFwQ2hhcnMoZG9tYWluX25hbWUsIHVzZVNURDMsIHByb2Nlc3Npbmdfb3B0aW9uKTtcbiAgcmVzdWx0LnN0cmluZyA9IG5vcm1hbGl6ZShyZXN1bHQuc3RyaW5nKTtcblxuICB2YXIgbGFiZWxzID0gcmVzdWx0LnN0cmluZy5zcGxpdChcIi5cIik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGFiZWxzLmxlbmd0aDsgKytpKSB7XG4gICAgdHJ5IHtcbiAgICAgIHZhciB2YWxpZGF0aW9uID0gdmFsaWRhdGVMYWJlbChsYWJlbHNbaV0pO1xuICAgICAgbGFiZWxzW2ldID0gdmFsaWRhdGlvbi5sYWJlbDtcbiAgICAgIHJlc3VsdC5lcnJvciA9IHJlc3VsdC5lcnJvciB8fCB2YWxpZGF0aW9uLmVycm9yO1xuICAgIH0gY2F0Y2goZSkge1xuICAgICAgcmVzdWx0LmVycm9yID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHN0cmluZzogbGFiZWxzLmpvaW4oXCIuXCIpLFxuICAgIGVycm9yOiByZXN1bHQuZXJyb3JcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMudG9BU0NJSSA9IGZ1bmN0aW9uKGRvbWFpbl9uYW1lLCB1c2VTVEQzLCBwcm9jZXNzaW5nX29wdGlvbiwgdmVyaWZ5RG5zTGVuZ3RoKSB7XG4gIHZhciByZXN1bHQgPSBwcm9jZXNzaW5nKGRvbWFpbl9uYW1lLCB1c2VTVEQzLCBwcm9jZXNzaW5nX29wdGlvbik7XG4gIHZhciBsYWJlbHMgPSByZXN1bHQuc3RyaW5nLnNwbGl0KFwiLlwiKTtcbiAgbGFiZWxzID0gbGFiZWxzLm1hcChmdW5jdGlvbihsKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBwdW55Y29kZS50b0FTQ0lJKGwpO1xuICAgIH0gY2F0Y2goZSkge1xuICAgICAgcmVzdWx0LmVycm9yID0gdHJ1ZTtcbiAgICAgIHJldHVybiBsO1xuICAgIH1cbiAgfSk7XG5cbiAgaWYgKHZlcmlmeURuc0xlbmd0aCkge1xuICAgIHZhciB0b3RhbCA9IGxhYmVscy5zbGljZSgwLCBsYWJlbHMubGVuZ3RoIC0gMSkuam9pbihcIi5cIikubGVuZ3RoO1xuICAgIGlmICh0b3RhbC5sZW5ndGggPiAyNTMgfHwgdG90YWwubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXN1bHQuZXJyb3IgPSB0cnVlO1xuICAgIH1cblxuICAgIGZvciAodmFyIGk9MDsgaSA8IGxhYmVscy5sZW5ndGg7ICsraSkge1xuICAgICAgaWYgKGxhYmVscy5sZW5ndGggPiA2MyB8fCBsYWJlbHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJlc3VsdC5lcnJvciA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChyZXN1bHQuZXJyb3IpIHJldHVybiBudWxsO1xuICByZXR1cm4gbGFiZWxzLmpvaW4oXCIuXCIpO1xufTtcblxubW9kdWxlLmV4cG9ydHMudG9Vbmljb2RlID0gZnVuY3Rpb24oZG9tYWluX25hbWUsIHVzZVNURDMpIHtcbiAgdmFyIHJlc3VsdCA9IHByb2Nlc3NpbmcoZG9tYWluX25hbWUsIHVzZVNURDMsIFBST0NFU1NJTkdfT1BUSU9OUy5OT05UUkFOU0lUSU9OQUwpO1xuXG4gIHJldHVybiB7XG4gICAgZG9tYWluOiByZXN1bHQuc3RyaW5nLFxuICAgIGVycm9yOiByZXN1bHQuZXJyb3JcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzLlBST0NFU1NJTkdfT1BUSU9OUyA9IFBST0NFU1NJTkdfT1BUSU9OUztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XHJcbmNvbnN0IHB1bnljb2RlID0gcmVxdWlyZShcInB1bnljb2RlXCIpO1xyXG5jb25zdCB0cjQ2ID0gcmVxdWlyZShcInRyNDZcIik7XHJcblxyXG5jb25zdCBzcGVjaWFsU2NoZW1lcyA9IHtcclxuICBmdHA6IDIxLFxyXG4gIGZpbGU6IG51bGwsXHJcbiAgZ29waGVyOiA3MCxcclxuICBodHRwOiA4MCxcclxuICBodHRwczogNDQzLFxyXG4gIHdzOiA4MCxcclxuICB3c3M6IDQ0M1xyXG59O1xyXG5cclxuY29uc3QgZmFpbHVyZSA9IFN5bWJvbChcImZhaWx1cmVcIik7XHJcblxyXG5mdW5jdGlvbiBjb3VudFN5bWJvbHMoc3RyKSB7XHJcbiAgcmV0dXJuIHB1bnljb2RlLnVjczIuZGVjb2RlKHN0cikubGVuZ3RoO1xyXG59XHJcblxyXG5mdW5jdGlvbiBhdChpbnB1dCwgaWR4KSB7XHJcbiAgY29uc3QgYyA9IGlucHV0W2lkeF07XHJcbiAgcmV0dXJuIGlzTmFOKGMpID8gdW5kZWZpbmVkIDogU3RyaW5nLmZyb21Db2RlUG9pbnQoYyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzQVNDSUlEaWdpdChjKSB7XHJcbiAgcmV0dXJuIGMgPj0gMHgzMCAmJiBjIDw9IDB4Mzk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzQVNDSUlBbHBoYShjKSB7XHJcbiAgcmV0dXJuIChjID49IDB4NDEgJiYgYyA8PSAweDVBKSB8fCAoYyA+PSAweDYxICYmIGMgPD0gMHg3QSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzQVNDSUlBbHBoYW51bWVyaWMoYykge1xyXG4gIHJldHVybiBpc0FTQ0lJQWxwaGEoYykgfHwgaXNBU0NJSURpZ2l0KGMpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0FTQ0lJSGV4KGMpIHtcclxuICByZXR1cm4gaXNBU0NJSURpZ2l0KGMpIHx8IChjID49IDB4NDEgJiYgYyA8PSAweDQ2KSB8fCAoYyA+PSAweDYxICYmIGMgPD0gMHg2Nik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzU2luZ2xlRG90KGJ1ZmZlcikge1xyXG4gIHJldHVybiBidWZmZXIgPT09IFwiLlwiIHx8IGJ1ZmZlci50b0xvd2VyQ2FzZSgpID09PSBcIiUyZVwiO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0RvdWJsZURvdChidWZmZXIpIHtcclxuICBidWZmZXIgPSBidWZmZXIudG9Mb3dlckNhc2UoKTtcclxuICByZXR1cm4gYnVmZmVyID09PSBcIi4uXCIgfHwgYnVmZmVyID09PSBcIiUyZS5cIiB8fCBidWZmZXIgPT09IFwiLiUyZVwiIHx8IGJ1ZmZlciA9PT0gXCIlMmUlMmVcIjtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNXaW5kb3dzRHJpdmVMZXR0ZXJDb2RlUG9pbnRzKGNwMSwgY3AyKSB7XHJcbiAgcmV0dXJuIGlzQVNDSUlBbHBoYShjcDEpICYmIChjcDIgPT09IDU4IHx8IGNwMiA9PT0gMTI0KTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNXaW5kb3dzRHJpdmVMZXR0ZXJTdHJpbmcoc3RyaW5nKSB7XHJcbiAgcmV0dXJuIHN0cmluZy5sZW5ndGggPT09IDIgJiYgaXNBU0NJSUFscGhhKHN0cmluZy5jb2RlUG9pbnRBdCgwKSkgJiYgKHN0cmluZ1sxXSA9PT0gXCI6XCIgfHwgc3RyaW5nWzFdID09PSBcInxcIik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzTm9ybWFsaXplZFdpbmRvd3NEcml2ZUxldHRlclN0cmluZyhzdHJpbmcpIHtcclxuICByZXR1cm4gc3RyaW5nLmxlbmd0aCA9PT0gMiAmJiBpc0FTQ0lJQWxwaGEoc3RyaW5nLmNvZGVQb2ludEF0KDApKSAmJiBzdHJpbmdbMV0gPT09IFwiOlwiO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjb250YWluc0ZvcmJpZGRlbkhvc3RDb2RlUG9pbnQoc3RyaW5nKSB7XHJcbiAgcmV0dXJuIHN0cmluZy5zZWFyY2goL1xcdTAwMDB8XFx1MDAwOXxcXHUwMDBBfFxcdTAwMER8XFx1MDAyMHwjfCV8XFwvfDp8XFw/fEB8XFxbfFxcXFx8XFxdLykgIT09IC0xO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjb250YWluc0ZvcmJpZGRlbkhvc3RDb2RlUG9pbnRFeGNsdWRpbmdQZXJjZW50KHN0cmluZykge1xyXG4gIHJldHVybiBzdHJpbmcuc2VhcmNoKC9cXHUwMDAwfFxcdTAwMDl8XFx1MDAwQXxcXHUwMDBEfFxcdTAwMjB8I3xcXC98OnxcXD98QHxcXFt8XFxcXHxcXF0vKSAhPT0gLTE7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzU3BlY2lhbFNjaGVtZShzY2hlbWUpIHtcclxuICByZXR1cm4gc3BlY2lhbFNjaGVtZXNbc2NoZW1lXSAhPT0gdW5kZWZpbmVkO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc1NwZWNpYWwodXJsKSB7XHJcbiAgcmV0dXJuIGlzU3BlY2lhbFNjaGVtZSh1cmwuc2NoZW1lKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZGVmYXVsdFBvcnQoc2NoZW1lKSB7XHJcbiAgcmV0dXJuIHNwZWNpYWxTY2hlbWVzW3NjaGVtZV07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHBlcmNlbnRFbmNvZGUoYykge1xyXG4gIGxldCBoZXggPSBjLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xyXG4gIGlmIChoZXgubGVuZ3RoID09PSAxKSB7XHJcbiAgICBoZXggPSBcIjBcIiArIGhleDtcclxuICB9XHJcblxyXG4gIHJldHVybiBcIiVcIiArIGhleDtcclxufVxyXG5cclxuZnVuY3Rpb24gdXRmOFBlcmNlbnRFbmNvZGUoYykge1xyXG4gIGNvbnN0IGJ1ZiA9IG5ldyBCdWZmZXIoYyk7XHJcblxyXG4gIGxldCBzdHIgPSBcIlwiO1xyXG5cclxuICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1Zi5sZW5ndGg7ICsraSkge1xyXG4gICAgc3RyICs9IHBlcmNlbnRFbmNvZGUoYnVmW2ldKTtcclxuICB9XHJcblxyXG4gIHJldHVybiBzdHI7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHV0ZjhQZXJjZW50RGVjb2RlKHN0cikge1xyXG4gIGNvbnN0IGlucHV0ID0gbmV3IEJ1ZmZlcihzdHIpO1xyXG4gIGNvbnN0IG91dHB1dCA9IFtdO1xyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXQubGVuZ3RoOyArK2kpIHtcclxuICAgIGlmIChpbnB1dFtpXSAhPT0gMzcpIHtcclxuICAgICAgb3V0cHV0LnB1c2goaW5wdXRbaV0pO1xyXG4gICAgfSBlbHNlIGlmIChpbnB1dFtpXSA9PT0gMzcgJiYgaXNBU0NJSUhleChpbnB1dFtpICsgMV0pICYmIGlzQVNDSUlIZXgoaW5wdXRbaSArIDJdKSkge1xyXG4gICAgICBvdXRwdXQucHVzaChwYXJzZUludChpbnB1dC5zbGljZShpICsgMSwgaSArIDMpLnRvU3RyaW5nKCksIDE2KSk7XHJcbiAgICAgIGkgKz0gMjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG91dHB1dC5wdXNoKGlucHV0W2ldKTtcclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIG5ldyBCdWZmZXIob3V0cHV0KS50b1N0cmluZygpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0MwQ29udHJvbFBlcmNlbnRFbmNvZGUoYykge1xyXG4gIHJldHVybiBjIDw9IDB4MUYgfHwgYyA+IDB4N0U7XHJcbn1cclxuXHJcbmNvbnN0IGV4dHJhUGF0aFBlcmNlbnRFbmNvZGVTZXQgPSBuZXcgU2V0KFszMiwgMzQsIDM1LCA2MCwgNjIsIDYzLCA5NiwgMTIzLCAxMjVdKTtcclxuZnVuY3Rpb24gaXNQYXRoUGVyY2VudEVuY29kZShjKSB7XHJcbiAgcmV0dXJuIGlzQzBDb250cm9sUGVyY2VudEVuY29kZShjKSB8fCBleHRyYVBhdGhQZXJjZW50RW5jb2RlU2V0LmhhcyhjKTtcclxufVxyXG5cclxuY29uc3QgZXh0cmFVc2VyaW5mb1BlcmNlbnRFbmNvZGVTZXQgPVxyXG4gIG5ldyBTZXQoWzQ3LCA1OCwgNTksIDYxLCA2NCwgOTEsIDkyLCA5MywgOTQsIDEyNF0pO1xyXG5mdW5jdGlvbiBpc1VzZXJpbmZvUGVyY2VudEVuY29kZShjKSB7XHJcbiAgcmV0dXJuIGlzUGF0aFBlcmNlbnRFbmNvZGUoYykgfHwgZXh0cmFVc2VyaW5mb1BlcmNlbnRFbmNvZGVTZXQuaGFzKGMpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwZXJjZW50RW5jb2RlQ2hhcihjLCBlbmNvZGVTZXRQcmVkaWNhdGUpIHtcclxuICBjb25zdCBjU3RyID0gU3RyaW5nLmZyb21Db2RlUG9pbnQoYyk7XHJcblxyXG4gIGlmIChlbmNvZGVTZXRQcmVkaWNhdGUoYykpIHtcclxuICAgIHJldHVybiB1dGY4UGVyY2VudEVuY29kZShjU3RyKTtcclxuICB9XHJcblxyXG4gIHJldHVybiBjU3RyO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwYXJzZUlQdjROdW1iZXIoaW5wdXQpIHtcclxuICBsZXQgUiA9IDEwO1xyXG5cclxuICBpZiAoaW5wdXQubGVuZ3RoID49IDIgJiYgaW5wdXQuY2hhckF0KDApID09PSBcIjBcIiAmJiBpbnB1dC5jaGFyQXQoMSkudG9Mb3dlckNhc2UoKSA9PT0gXCJ4XCIpIHtcclxuICAgIGlucHV0ID0gaW5wdXQuc3Vic3RyaW5nKDIpO1xyXG4gICAgUiA9IDE2O1xyXG4gIH0gZWxzZSBpZiAoaW5wdXQubGVuZ3RoID49IDIgJiYgaW5wdXQuY2hhckF0KDApID09PSBcIjBcIikge1xyXG4gICAgaW5wdXQgPSBpbnB1dC5zdWJzdHJpbmcoMSk7XHJcbiAgICBSID0gODtcclxuICB9XHJcblxyXG4gIGlmIChpbnB1dCA9PT0gXCJcIikge1xyXG4gICAgcmV0dXJuIDA7XHJcbiAgfVxyXG5cclxuICBjb25zdCByZWdleCA9IFIgPT09IDEwID8gL1teMC05XS8gOiAoUiA9PT0gMTYgPyAvW14wLTlBLUZhLWZdLyA6IC9bXjAtN10vKTtcclxuICBpZiAocmVnZXgudGVzdChpbnB1dCkpIHtcclxuICAgIHJldHVybiBmYWlsdXJlO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHBhcnNlSW50KGlucHV0LCBSKTtcclxufVxyXG5cclxuZnVuY3Rpb24gcGFyc2VJUHY0KGlucHV0KSB7XHJcbiAgY29uc3QgcGFydHMgPSBpbnB1dC5zcGxpdChcIi5cIik7XHJcbiAgaWYgKHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdID09PSBcIlwiKSB7XHJcbiAgICBpZiAocGFydHMubGVuZ3RoID4gMSkge1xyXG4gICAgICBwYXJ0cy5wb3AoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlmIChwYXJ0cy5sZW5ndGggPiA0KSB7XHJcbiAgICByZXR1cm4gaW5wdXQ7XHJcbiAgfVxyXG5cclxuICBjb25zdCBudW1iZXJzID0gW107XHJcbiAgZm9yIChjb25zdCBwYXJ0IG9mIHBhcnRzKSB7XHJcbiAgICBpZiAocGFydCA9PT0gXCJcIikge1xyXG4gICAgICByZXR1cm4gaW5wdXQ7XHJcbiAgICB9XHJcbiAgICBjb25zdCBuID0gcGFyc2VJUHY0TnVtYmVyKHBhcnQpO1xyXG4gICAgaWYgKG4gPT09IGZhaWx1cmUpIHtcclxuICAgICAgcmV0dXJuIGlucHV0O1xyXG4gICAgfVxyXG5cclxuICAgIG51bWJlcnMucHVzaChuKTtcclxuICB9XHJcblxyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtYmVycy5sZW5ndGggLSAxOyArK2kpIHtcclxuICAgIGlmIChudW1iZXJzW2ldID4gMjU1KSB7XHJcbiAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgfVxyXG4gIH1cclxuICBpZiAobnVtYmVyc1tudW1iZXJzLmxlbmd0aCAtIDFdID49IE1hdGgucG93KDI1NiwgNSAtIG51bWJlcnMubGVuZ3RoKSkge1xyXG4gICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgfVxyXG5cclxuICBsZXQgaXB2NCA9IG51bWJlcnMucG9wKCk7XHJcbiAgbGV0IGNvdW50ZXIgPSAwO1xyXG5cclxuICBmb3IgKGNvbnN0IG4gb2YgbnVtYmVycykge1xyXG4gICAgaXB2NCArPSBuICogTWF0aC5wb3coMjU2LCAzIC0gY291bnRlcik7XHJcbiAgICArK2NvdW50ZXI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gaXB2NDtcclxufVxyXG5cclxuZnVuY3Rpb24gc2VyaWFsaXplSVB2NChhZGRyZXNzKSB7XHJcbiAgbGV0IG91dHB1dCA9IFwiXCI7XHJcbiAgbGV0IG4gPSBhZGRyZXNzO1xyXG5cclxuICBmb3IgKGxldCBpID0gMTsgaSA8PSA0OyArK2kpIHtcclxuICAgIG91dHB1dCA9IFN0cmluZyhuICUgMjU2KSArIG91dHB1dDtcclxuICAgIGlmIChpICE9PSA0KSB7XHJcbiAgICAgIG91dHB1dCA9IFwiLlwiICsgb3V0cHV0O1xyXG4gICAgfVxyXG4gICAgbiA9IE1hdGguZmxvb3IobiAvIDI1Nik7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gb3V0cHV0O1xyXG59XHJcblxyXG5mdW5jdGlvbiBwYXJzZUlQdjYoaW5wdXQpIHtcclxuICBjb25zdCBhZGRyZXNzID0gWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdO1xyXG4gIGxldCBwaWVjZUluZGV4ID0gMDtcclxuICBsZXQgY29tcHJlc3MgPSBudWxsO1xyXG4gIGxldCBwb2ludGVyID0gMDtcclxuXHJcbiAgaW5wdXQgPSBwdW55Y29kZS51Y3MyLmRlY29kZShpbnB1dCk7XHJcblxyXG4gIGlmIChpbnB1dFtwb2ludGVyXSA9PT0gNTgpIHtcclxuICAgIGlmIChpbnB1dFtwb2ludGVyICsgMV0gIT09IDU4KSB7XHJcbiAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgfVxyXG5cclxuICAgIHBvaW50ZXIgKz0gMjtcclxuICAgICsrcGllY2VJbmRleDtcclxuICAgIGNvbXByZXNzID0gcGllY2VJbmRleDtcclxuICB9XHJcblxyXG4gIHdoaWxlIChwb2ludGVyIDwgaW5wdXQubGVuZ3RoKSB7XHJcbiAgICBpZiAocGllY2VJbmRleCA9PT0gOCkge1xyXG4gICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaW5wdXRbcG9pbnRlcl0gPT09IDU4KSB7XHJcbiAgICAgIGlmIChjb21wcmVzcyAhPT0gbnVsbCkge1xyXG4gICAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgICB9XHJcbiAgICAgICsrcG9pbnRlcjtcclxuICAgICAgKytwaWVjZUluZGV4O1xyXG4gICAgICBjb21wcmVzcyA9IHBpZWNlSW5kZXg7XHJcbiAgICAgIGNvbnRpbnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCB2YWx1ZSA9IDA7XHJcbiAgICBsZXQgbGVuZ3RoID0gMDtcclxuXHJcbiAgICB3aGlsZSAobGVuZ3RoIDwgNCAmJiBpc0FTQ0lJSGV4KGlucHV0W3BvaW50ZXJdKSkge1xyXG4gICAgICB2YWx1ZSA9IHZhbHVlICogMHgxMCArIHBhcnNlSW50KGF0KGlucHV0LCBwb2ludGVyKSwgMTYpO1xyXG4gICAgICArK3BvaW50ZXI7XHJcbiAgICAgICsrbGVuZ3RoO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpbnB1dFtwb2ludGVyXSA9PT0gNDYpIHtcclxuICAgICAgaWYgKGxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBwb2ludGVyIC09IGxlbmd0aDtcclxuXHJcbiAgICAgIGlmIChwaWVjZUluZGV4ID4gNikge1xyXG4gICAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgbnVtYmVyc1NlZW4gPSAwO1xyXG5cclxuICAgICAgd2hpbGUgKGlucHV0W3BvaW50ZXJdICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBsZXQgaXB2NFBpZWNlID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYgKG51bWJlcnNTZWVuID4gMCkge1xyXG4gICAgICAgICAgaWYgKGlucHV0W3BvaW50ZXJdID09PSA0NiAmJiBudW1iZXJzU2VlbiA8IDQpIHtcclxuICAgICAgICAgICAgKytwb2ludGVyO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWlzQVNDSUlEaWdpdChpbnB1dFtwb2ludGVyXSkpIHtcclxuICAgICAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgd2hpbGUgKGlzQVNDSUlEaWdpdChpbnB1dFtwb2ludGVyXSkpIHtcclxuICAgICAgICAgIGNvbnN0IG51bWJlciA9IHBhcnNlSW50KGF0KGlucHV0LCBwb2ludGVyKSk7XHJcbiAgICAgICAgICBpZiAoaXB2NFBpZWNlID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlwdjRQaWVjZSA9IG51bWJlcjtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoaXB2NFBpZWNlID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaXB2NFBpZWNlID0gaXB2NFBpZWNlICogMTAgKyBudW1iZXI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoaXB2NFBpZWNlID4gMjU1KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgKytwb2ludGVyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYWRkcmVzc1twaWVjZUluZGV4XSA9IGFkZHJlc3NbcGllY2VJbmRleF0gKiAweDEwMCArIGlwdjRQaWVjZTtcclxuXHJcbiAgICAgICAgKytudW1iZXJzU2VlbjtcclxuXHJcbiAgICAgICAgaWYgKG51bWJlcnNTZWVuID09PSAyIHx8IG51bWJlcnNTZWVuID09PSA0KSB7XHJcbiAgICAgICAgICArK3BpZWNlSW5kZXg7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAobnVtYmVyc1NlZW4gIT09IDQpIHtcclxuICAgICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgYnJlYWs7XHJcbiAgICB9IGVsc2UgaWYgKGlucHV0W3BvaW50ZXJdID09PSA1OCkge1xyXG4gICAgICArK3BvaW50ZXI7XHJcbiAgICAgIGlmIChpbnB1dFtwb2ludGVyXSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoaW5wdXRbcG9pbnRlcl0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRyZXNzW3BpZWNlSW5kZXhdID0gdmFsdWU7XHJcbiAgICArK3BpZWNlSW5kZXg7XHJcbiAgfVxyXG5cclxuICBpZiAoY29tcHJlc3MgIT09IG51bGwpIHtcclxuICAgIGxldCBzd2FwcyA9IHBpZWNlSW5kZXggLSBjb21wcmVzcztcclxuICAgIHBpZWNlSW5kZXggPSA3O1xyXG4gICAgd2hpbGUgKHBpZWNlSW5kZXggIT09IDAgJiYgc3dhcHMgPiAwKSB7XHJcbiAgICAgIGNvbnN0IHRlbXAgPSBhZGRyZXNzW2NvbXByZXNzICsgc3dhcHMgLSAxXTtcclxuICAgICAgYWRkcmVzc1tjb21wcmVzcyArIHN3YXBzIC0gMV0gPSBhZGRyZXNzW3BpZWNlSW5kZXhdO1xyXG4gICAgICBhZGRyZXNzW3BpZWNlSW5kZXhdID0gdGVtcDtcclxuICAgICAgLS1waWVjZUluZGV4O1xyXG4gICAgICAtLXN3YXBzO1xyXG4gICAgfVxyXG4gIH0gZWxzZSBpZiAoY29tcHJlc3MgPT09IG51bGwgJiYgcGllY2VJbmRleCAhPT0gOCkge1xyXG4gICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gYWRkcmVzcztcclxufVxyXG5cclxuZnVuY3Rpb24gc2VyaWFsaXplSVB2NihhZGRyZXNzKSB7XHJcbiAgbGV0IG91dHB1dCA9IFwiXCI7XHJcbiAgY29uc3Qgc2VxUmVzdWx0ID0gZmluZExvbmdlc3RaZXJvU2VxdWVuY2UoYWRkcmVzcyk7XHJcbiAgY29uc3QgY29tcHJlc3MgPSBzZXFSZXN1bHQuaWR4O1xyXG4gIGxldCBpZ25vcmUwID0gZmFsc2U7XHJcblxyXG4gIGZvciAobGV0IHBpZWNlSW5kZXggPSAwOyBwaWVjZUluZGV4IDw9IDc7ICsrcGllY2VJbmRleCkge1xyXG4gICAgaWYgKGlnbm9yZTAgJiYgYWRkcmVzc1twaWVjZUluZGV4XSA9PT0gMCkge1xyXG4gICAgICBjb250aW51ZTtcclxuICAgIH0gZWxzZSBpZiAoaWdub3JlMCkge1xyXG4gICAgICBpZ25vcmUwID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbXByZXNzID09PSBwaWVjZUluZGV4KSB7XHJcbiAgICAgIGNvbnN0IHNlcGFyYXRvciA9IHBpZWNlSW5kZXggPT09IDAgPyBcIjo6XCIgOiBcIjpcIjtcclxuICAgICAgb3V0cHV0ICs9IHNlcGFyYXRvcjtcclxuICAgICAgaWdub3JlMCA9IHRydWU7XHJcbiAgICAgIGNvbnRpbnVlO1xyXG4gICAgfVxyXG5cclxuICAgIG91dHB1dCArPSBhZGRyZXNzW3BpZWNlSW5kZXhdLnRvU3RyaW5nKDE2KTtcclxuXHJcbiAgICBpZiAocGllY2VJbmRleCAhPT0gNykge1xyXG4gICAgICBvdXRwdXQgKz0gXCI6XCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gb3V0cHV0O1xyXG59XHJcblxyXG5mdW5jdGlvbiBwYXJzZUhvc3QoaW5wdXQsIGlzU3BlY2lhbEFyZykge1xyXG4gIGlmIChpbnB1dFswXSA9PT0gXCJbXCIpIHtcclxuICAgIGlmIChpbnB1dFtpbnB1dC5sZW5ndGggLSAxXSAhPT0gXCJdXCIpIHtcclxuICAgICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHBhcnNlSVB2NihpbnB1dC5zdWJzdHJpbmcoMSwgaW5wdXQubGVuZ3RoIC0gMSkpO1xyXG4gIH1cclxuXHJcbiAgaWYgKCFpc1NwZWNpYWxBcmcpIHtcclxuICAgIHJldHVybiBwYXJzZU9wYXF1ZUhvc3QoaW5wdXQpO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgZG9tYWluID0gdXRmOFBlcmNlbnREZWNvZGUoaW5wdXQpO1xyXG4gIGNvbnN0IGFzY2lpRG9tYWluID0gdHI0Ni50b0FTQ0lJKGRvbWFpbiwgZmFsc2UsIHRyNDYuUFJPQ0VTU0lOR19PUFRJT05TLk5PTlRSQU5TSVRJT05BTCwgZmFsc2UpO1xyXG4gIGlmIChhc2NpaURvbWFpbiA9PT0gbnVsbCkge1xyXG4gICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgfVxyXG5cclxuICBpZiAoY29udGFpbnNGb3JiaWRkZW5Ib3N0Q29kZVBvaW50KGFzY2lpRG9tYWluKSkge1xyXG4gICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgfVxyXG5cclxuICBjb25zdCBpcHY0SG9zdCA9IHBhcnNlSVB2NChhc2NpaURvbWFpbik7XHJcbiAgaWYgKHR5cGVvZiBpcHY0SG9zdCA9PT0gXCJudW1iZXJcIiB8fCBpcHY0SG9zdCA9PT0gZmFpbHVyZSkge1xyXG4gICAgcmV0dXJuIGlwdjRIb3N0O1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGFzY2lpRG9tYWluO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwYXJzZU9wYXF1ZUhvc3QoaW5wdXQpIHtcclxuICBpZiAoY29udGFpbnNGb3JiaWRkZW5Ib3N0Q29kZVBvaW50RXhjbHVkaW5nUGVyY2VudChpbnB1dCkpIHtcclxuICAgIHJldHVybiBmYWlsdXJlO1xyXG4gIH1cclxuXHJcbiAgbGV0IG91dHB1dCA9IFwiXCI7XHJcbiAgY29uc3QgZGVjb2RlZCA9IHB1bnljb2RlLnVjczIuZGVjb2RlKGlucHV0KTtcclxuICBmb3IgKGxldCBpID0gMDsgaSA8IGRlY29kZWQubGVuZ3RoOyArK2kpIHtcclxuICAgIG91dHB1dCArPSBwZXJjZW50RW5jb2RlQ2hhcihkZWNvZGVkW2ldLCBpc0MwQ29udHJvbFBlcmNlbnRFbmNvZGUpO1xyXG4gIH1cclxuICByZXR1cm4gb3V0cHV0O1xyXG59XHJcblxyXG5mdW5jdGlvbiBmaW5kTG9uZ2VzdFplcm9TZXF1ZW5jZShhcnIpIHtcclxuICBsZXQgbWF4SWR4ID0gbnVsbDtcclxuICBsZXQgbWF4TGVuID0gMTsgLy8gb25seSBmaW5kIGVsZW1lbnRzID4gMVxyXG4gIGxldCBjdXJyU3RhcnQgPSBudWxsO1xyXG4gIGxldCBjdXJyTGVuID0gMDtcclxuXHJcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyArK2kpIHtcclxuICAgIGlmIChhcnJbaV0gIT09IDApIHtcclxuICAgICAgaWYgKGN1cnJMZW4gPiBtYXhMZW4pIHtcclxuICAgICAgICBtYXhJZHggPSBjdXJyU3RhcnQ7XHJcbiAgICAgICAgbWF4TGVuID0gY3VyckxlbjtcclxuICAgICAgfVxyXG5cclxuICAgICAgY3VyclN0YXJ0ID0gbnVsbDtcclxuICAgICAgY3VyckxlbiA9IDA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoY3VyclN0YXJ0ID09PSBudWxsKSB7XHJcbiAgICAgICAgY3VyclN0YXJ0ID0gaTtcclxuICAgICAgfVxyXG4gICAgICArK2N1cnJMZW47XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBpZiB0cmFpbGluZyB6ZXJvc1xyXG4gIGlmIChjdXJyTGVuID4gbWF4TGVuKSB7XHJcbiAgICBtYXhJZHggPSBjdXJyU3RhcnQ7XHJcbiAgICBtYXhMZW4gPSBjdXJyTGVuO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIGlkeDogbWF4SWR4LFxyXG4gICAgbGVuOiBtYXhMZW5cclxuICB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBzZXJpYWxpemVIb3N0KGhvc3QpIHtcclxuICBpZiAodHlwZW9mIGhvc3QgPT09IFwibnVtYmVyXCIpIHtcclxuICAgIHJldHVybiBzZXJpYWxpemVJUHY0KGhvc3QpO1xyXG4gIH1cclxuXHJcbiAgLy8gSVB2NiBzZXJpYWxpemVyXHJcbiAgaWYgKGhvc3QgaW5zdGFuY2VvZiBBcnJheSkge1xyXG4gICAgcmV0dXJuIFwiW1wiICsgc2VyaWFsaXplSVB2Nihob3N0KSArIFwiXVwiO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGhvc3Q7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHRyaW1Db250cm9sQ2hhcnModXJsKSB7XHJcbiAgcmV0dXJuIHVybC5yZXBsYWNlKC9eW1xcdTAwMDAtXFx1MDAxRlxcdTAwMjBdK3xbXFx1MDAwMC1cXHUwMDFGXFx1MDAyMF0rJC9nLCBcIlwiKTtcclxufVxyXG5cclxuZnVuY3Rpb24gdHJpbVRhYkFuZE5ld2xpbmUodXJsKSB7XHJcbiAgcmV0dXJuIHVybC5yZXBsYWNlKC9cXHUwMDA5fFxcdTAwMEF8XFx1MDAwRC9nLCBcIlwiKTtcclxufVxyXG5cclxuZnVuY3Rpb24gc2hvcnRlblBhdGgodXJsKSB7XHJcbiAgY29uc3QgcGF0aCA9IHVybC5wYXRoO1xyXG4gIGlmIChwYXRoLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuICBpZiAodXJsLnNjaGVtZSA9PT0gXCJmaWxlXCIgJiYgcGF0aC5sZW5ndGggPT09IDEgJiYgaXNOb3JtYWxpemVkV2luZG93c0RyaXZlTGV0dGVyKHBhdGhbMF0pKSB7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBwYXRoLnBvcCgpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpbmNsdWRlc0NyZWRlbnRpYWxzKHVybCkge1xyXG4gIHJldHVybiB1cmwudXNlcm5hbWUgIT09IFwiXCIgfHwgdXJsLnBhc3N3b3JkICE9PSBcIlwiO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjYW5ub3RIYXZlQVVzZXJuYW1lUGFzc3dvcmRQb3J0KHVybCkge1xyXG4gIHJldHVybiB1cmwuaG9zdCA9PT0gbnVsbCB8fCB1cmwuaG9zdCA9PT0gXCJcIiB8fCB1cmwuY2Fubm90QmVBQmFzZVVSTCB8fCB1cmwuc2NoZW1lID09PSBcImZpbGVcIjtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNOb3JtYWxpemVkV2luZG93c0RyaXZlTGV0dGVyKHN0cmluZykge1xyXG4gIHJldHVybiAvXltBLVphLXpdOiQvLnRlc3Qoc3RyaW5nKTtcclxufVxyXG5cclxuZnVuY3Rpb24gVVJMU3RhdGVNYWNoaW5lKGlucHV0LCBiYXNlLCBlbmNvZGluZ092ZXJyaWRlLCB1cmwsIHN0YXRlT3ZlcnJpZGUpIHtcclxuICB0aGlzLnBvaW50ZXIgPSAwO1xyXG4gIHRoaXMuaW5wdXQgPSBpbnB1dDtcclxuICB0aGlzLmJhc2UgPSBiYXNlIHx8IG51bGw7XHJcbiAgdGhpcy5lbmNvZGluZ092ZXJyaWRlID0gZW5jb2RpbmdPdmVycmlkZSB8fCBcInV0Zi04XCI7XHJcbiAgdGhpcy5zdGF0ZU92ZXJyaWRlID0gc3RhdGVPdmVycmlkZTtcclxuICB0aGlzLnVybCA9IHVybDtcclxuICB0aGlzLmZhaWx1cmUgPSBmYWxzZTtcclxuICB0aGlzLnBhcnNlRXJyb3IgPSBmYWxzZTtcclxuXHJcbiAgaWYgKCF0aGlzLnVybCkge1xyXG4gICAgdGhpcy51cmwgPSB7XHJcbiAgICAgIHNjaGVtZTogXCJcIixcclxuICAgICAgdXNlcm5hbWU6IFwiXCIsXHJcbiAgICAgIHBhc3N3b3JkOiBcIlwiLFxyXG4gICAgICBob3N0OiBudWxsLFxyXG4gICAgICBwb3J0OiBudWxsLFxyXG4gICAgICBwYXRoOiBbXSxcclxuICAgICAgcXVlcnk6IG51bGwsXHJcbiAgICAgIGZyYWdtZW50OiBudWxsLFxyXG5cclxuICAgICAgY2Fubm90QmVBQmFzZVVSTDogZmFsc2VcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgcmVzID0gdHJpbUNvbnRyb2xDaGFycyh0aGlzLmlucHV0KTtcclxuICAgIGlmIChyZXMgIT09IHRoaXMuaW5wdXQpIHtcclxuICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHRoaXMuaW5wdXQgPSByZXM7XHJcbiAgfVxyXG5cclxuICBjb25zdCByZXMgPSB0cmltVGFiQW5kTmV3bGluZSh0aGlzLmlucHV0KTtcclxuICBpZiAocmVzICE9PSB0aGlzLmlucHV0KSB7XHJcbiAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gIH1cclxuICB0aGlzLmlucHV0ID0gcmVzO1xyXG5cclxuICB0aGlzLnN0YXRlID0gc3RhdGVPdmVycmlkZSB8fCBcInNjaGVtZSBzdGFydFwiO1xyXG5cclxuICB0aGlzLmJ1ZmZlciA9IFwiXCI7XHJcbiAgdGhpcy5hdEZsYWcgPSBmYWxzZTtcclxuICB0aGlzLmFyckZsYWcgPSBmYWxzZTtcclxuICB0aGlzLnBhc3N3b3JkVG9rZW5TZWVuRmxhZyA9IGZhbHNlO1xyXG5cclxuICB0aGlzLmlucHV0ID0gcHVueWNvZGUudWNzMi5kZWNvZGUodGhpcy5pbnB1dCk7XHJcblxyXG4gIGZvciAoOyB0aGlzLnBvaW50ZXIgPD0gdGhpcy5pbnB1dC5sZW5ndGg7ICsrdGhpcy5wb2ludGVyKSB7XHJcbiAgICBjb25zdCBjID0gdGhpcy5pbnB1dFt0aGlzLnBvaW50ZXJdO1xyXG4gICAgY29uc3QgY1N0ciA9IGlzTmFOKGMpID8gdW5kZWZpbmVkIDogU3RyaW5nLmZyb21Db2RlUG9pbnQoYyk7XHJcblxyXG4gICAgLy8gZXhlYyBzdGF0ZSBtYWNoaW5lXHJcbiAgICBjb25zdCByZXQgPSB0aGlzW1wicGFyc2UgXCIgKyB0aGlzLnN0YXRlXShjLCBjU3RyKTtcclxuICAgIGlmICghcmV0KSB7XHJcbiAgICAgIGJyZWFrOyAvLyB0ZXJtaW5hdGUgYWxnb3JpdGhtXHJcbiAgICB9IGVsc2UgaWYgKHJldCA9PT0gZmFpbHVyZSkge1xyXG4gICAgICB0aGlzLmZhaWx1cmUgPSB0cnVlO1xyXG4gICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBzY2hlbWUgc3RhcnRcIl0gPSBmdW5jdGlvbiBwYXJzZVNjaGVtZVN0YXJ0KGMsIGNTdHIpIHtcclxuICBpZiAoaXNBU0NJSUFscGhhKGMpKSB7XHJcbiAgICB0aGlzLmJ1ZmZlciArPSBjU3RyLnRvTG93ZXJDYXNlKCk7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJzY2hlbWVcIjtcclxuICB9IGVsc2UgaWYgKCF0aGlzLnN0YXRlT3ZlcnJpZGUpIHtcclxuICAgIHRoaXMuc3RhdGUgPSBcIm5vIHNjaGVtZVwiO1xyXG4gICAgLS10aGlzLnBvaW50ZXI7XHJcbiAgfSBlbHNlIHtcclxuICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICByZXR1cm4gZmFpbHVyZTtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIHNjaGVtZVwiXSA9IGZ1bmN0aW9uIHBhcnNlU2NoZW1lKGMsIGNTdHIpIHtcclxuICBpZiAoaXNBU0NJSUFscGhhbnVtZXJpYyhjKSB8fCBjID09PSA0MyB8fCBjID09PSA0NSB8fCBjID09PSA0Nikge1xyXG4gICAgdGhpcy5idWZmZXIgKz0gY1N0ci50b0xvd2VyQ2FzZSgpO1xyXG4gIH0gZWxzZSBpZiAoYyA9PT0gNTgpIHtcclxuICAgIGlmICh0aGlzLnN0YXRlT3ZlcnJpZGUpIHtcclxuICAgICAgaWYgKGlzU3BlY2lhbCh0aGlzLnVybCkgJiYgIWlzU3BlY2lhbFNjaGVtZSh0aGlzLmJ1ZmZlcikpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghaXNTcGVjaWFsKHRoaXMudXJsKSAmJiBpc1NwZWNpYWxTY2hlbWUodGhpcy5idWZmZXIpKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoKGluY2x1ZGVzQ3JlZGVudGlhbHModGhpcy51cmwpIHx8IHRoaXMudXJsLnBvcnQgIT09IG51bGwpICYmIHRoaXMuYnVmZmVyID09PSBcImZpbGVcIikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMudXJsLnNjaGVtZSA9PT0gXCJmaWxlXCIgJiYgKHRoaXMudXJsLmhvc3QgPT09IFwiXCIgfHwgdGhpcy51cmwuaG9zdCA9PT0gbnVsbCkpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMudXJsLnNjaGVtZSA9IHRoaXMuYnVmZmVyO1xyXG4gICAgdGhpcy5idWZmZXIgPSBcIlwiO1xyXG4gICAgaWYgKHRoaXMuc3RhdGVPdmVycmlkZSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy51cmwuc2NoZW1lID09PSBcImZpbGVcIikge1xyXG4gICAgICBpZiAodGhpcy5pbnB1dFt0aGlzLnBvaW50ZXIgKyAxXSAhPT0gNDcgfHwgdGhpcy5pbnB1dFt0aGlzLnBvaW50ZXIgKyAyXSAhPT0gNDcpIHtcclxuICAgICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcImZpbGVcIjtcclxuICAgIH0gZWxzZSBpZiAoaXNTcGVjaWFsKHRoaXMudXJsKSAmJiB0aGlzLmJhc2UgIT09IG51bGwgJiYgdGhpcy5iYXNlLnNjaGVtZSA9PT0gdGhpcy51cmwuc2NoZW1lKSB7XHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcInNwZWNpYWwgcmVsYXRpdmUgb3IgYXV0aG9yaXR5XCI7XHJcbiAgICB9IGVsc2UgaWYgKGlzU3BlY2lhbCh0aGlzLnVybCkpIHtcclxuICAgICAgdGhpcy5zdGF0ZSA9IFwic3BlY2lhbCBhdXRob3JpdHkgc2xhc2hlc1wiO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmlucHV0W3RoaXMucG9pbnRlciArIDFdID09PSA0Nykge1xyXG4gICAgICB0aGlzLnN0YXRlID0gXCJwYXRoIG9yIGF1dGhvcml0eVwiO1xyXG4gICAgICArK3RoaXMucG9pbnRlcjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudXJsLmNhbm5vdEJlQUJhc2VVUkwgPSB0cnVlO1xyXG4gICAgICB0aGlzLnVybC5wYXRoLnB1c2goXCJcIik7XHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcImNhbm5vdC1iZS1hLWJhc2UtVVJMIHBhdGhcIjtcclxuICAgIH1cclxuICB9IGVsc2UgaWYgKCF0aGlzLnN0YXRlT3ZlcnJpZGUpIHtcclxuICAgIHRoaXMuYnVmZmVyID0gXCJcIjtcclxuICAgIHRoaXMuc3RhdGUgPSBcIm5vIHNjaGVtZVwiO1xyXG4gICAgdGhpcy5wb2ludGVyID0gLTE7XHJcbiAgfSBlbHNlIHtcclxuICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICByZXR1cm4gZmFpbHVyZTtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIG5vIHNjaGVtZVwiXSA9IGZ1bmN0aW9uIHBhcnNlTm9TY2hlbWUoYykge1xyXG4gIGlmICh0aGlzLmJhc2UgPT09IG51bGwgfHwgKHRoaXMuYmFzZS5jYW5ub3RCZUFCYXNlVVJMICYmIGMgIT09IDM1KSkge1xyXG4gICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgfSBlbHNlIGlmICh0aGlzLmJhc2UuY2Fubm90QmVBQmFzZVVSTCAmJiBjID09PSAzNSkge1xyXG4gICAgdGhpcy51cmwuc2NoZW1lID0gdGhpcy5iYXNlLnNjaGVtZTtcclxuICAgIHRoaXMudXJsLnBhdGggPSB0aGlzLmJhc2UucGF0aC5zbGljZSgpO1xyXG4gICAgdGhpcy51cmwucXVlcnkgPSB0aGlzLmJhc2UucXVlcnk7XHJcbiAgICB0aGlzLnVybC5mcmFnbWVudCA9IFwiXCI7XHJcbiAgICB0aGlzLnVybC5jYW5ub3RCZUFCYXNlVVJMID0gdHJ1ZTtcclxuICAgIHRoaXMuc3RhdGUgPSBcImZyYWdtZW50XCI7XHJcbiAgfSBlbHNlIGlmICh0aGlzLmJhc2Uuc2NoZW1lID09PSBcImZpbGVcIikge1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwiZmlsZVwiO1xyXG4gICAgLS10aGlzLnBvaW50ZXI7XHJcbiAgfSBlbHNlIHtcclxuICAgIHRoaXMuc3RhdGUgPSBcInJlbGF0aXZlXCI7XHJcbiAgICAtLXRoaXMucG9pbnRlcjtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIHNwZWNpYWwgcmVsYXRpdmUgb3IgYXV0aG9yaXR5XCJdID0gZnVuY3Rpb24gcGFyc2VTcGVjaWFsUmVsYXRpdmVPckF1dGhvcml0eShjKSB7XHJcbiAgaWYgKGMgPT09IDQ3ICYmIHRoaXMuaW5wdXRbdGhpcy5wb2ludGVyICsgMV0gPT09IDQ3KSB7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJzcGVjaWFsIGF1dGhvcml0eSBpZ25vcmUgc2xhc2hlc1wiO1xyXG4gICAgKyt0aGlzLnBvaW50ZXI7XHJcbiAgfSBlbHNlIHtcclxuICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJyZWxhdGl2ZVwiO1xyXG4gICAgLS10aGlzLnBvaW50ZXI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBwYXRoIG9yIGF1dGhvcml0eVwiXSA9IGZ1bmN0aW9uIHBhcnNlUGF0aE9yQXV0aG9yaXR5KGMpIHtcclxuICBpZiAoYyA9PT0gNDcpIHtcclxuICAgIHRoaXMuc3RhdGUgPSBcImF1dGhvcml0eVwiO1xyXG4gIH0gZWxzZSB7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJwYXRoXCI7XHJcbiAgICAtLXRoaXMucG9pbnRlcjtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIHJlbGF0aXZlXCJdID0gZnVuY3Rpb24gcGFyc2VSZWxhdGl2ZShjKSB7XHJcbiAgdGhpcy51cmwuc2NoZW1lID0gdGhpcy5iYXNlLnNjaGVtZTtcclxuICBpZiAoaXNOYU4oYykpIHtcclxuICAgIHRoaXMudXJsLnVzZXJuYW1lID0gdGhpcy5iYXNlLnVzZXJuYW1lO1xyXG4gICAgdGhpcy51cmwucGFzc3dvcmQgPSB0aGlzLmJhc2UucGFzc3dvcmQ7XHJcbiAgICB0aGlzLnVybC5ob3N0ID0gdGhpcy5iYXNlLmhvc3Q7XHJcbiAgICB0aGlzLnVybC5wb3J0ID0gdGhpcy5iYXNlLnBvcnQ7XHJcbiAgICB0aGlzLnVybC5wYXRoID0gdGhpcy5iYXNlLnBhdGguc2xpY2UoKTtcclxuICAgIHRoaXMudXJsLnF1ZXJ5ID0gdGhpcy5iYXNlLnF1ZXJ5O1xyXG4gIH0gZWxzZSBpZiAoYyA9PT0gNDcpIHtcclxuICAgIHRoaXMuc3RhdGUgPSBcInJlbGF0aXZlIHNsYXNoXCI7XHJcbiAgfSBlbHNlIGlmIChjID09PSA2Mykge1xyXG4gICAgdGhpcy51cmwudXNlcm5hbWUgPSB0aGlzLmJhc2UudXNlcm5hbWU7XHJcbiAgICB0aGlzLnVybC5wYXNzd29yZCA9IHRoaXMuYmFzZS5wYXNzd29yZDtcclxuICAgIHRoaXMudXJsLmhvc3QgPSB0aGlzLmJhc2UuaG9zdDtcclxuICAgIHRoaXMudXJsLnBvcnQgPSB0aGlzLmJhc2UucG9ydDtcclxuICAgIHRoaXMudXJsLnBhdGggPSB0aGlzLmJhc2UucGF0aC5zbGljZSgpO1xyXG4gICAgdGhpcy51cmwucXVlcnkgPSBcIlwiO1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwicXVlcnlcIjtcclxuICB9IGVsc2UgaWYgKGMgPT09IDM1KSB7XHJcbiAgICB0aGlzLnVybC51c2VybmFtZSA9IHRoaXMuYmFzZS51c2VybmFtZTtcclxuICAgIHRoaXMudXJsLnBhc3N3b3JkID0gdGhpcy5iYXNlLnBhc3N3b3JkO1xyXG4gICAgdGhpcy51cmwuaG9zdCA9IHRoaXMuYmFzZS5ob3N0O1xyXG4gICAgdGhpcy51cmwucG9ydCA9IHRoaXMuYmFzZS5wb3J0O1xyXG4gICAgdGhpcy51cmwucGF0aCA9IHRoaXMuYmFzZS5wYXRoLnNsaWNlKCk7XHJcbiAgICB0aGlzLnVybC5xdWVyeSA9IHRoaXMuYmFzZS5xdWVyeTtcclxuICAgIHRoaXMudXJsLmZyYWdtZW50ID0gXCJcIjtcclxuICAgIHRoaXMuc3RhdGUgPSBcImZyYWdtZW50XCI7XHJcbiAgfSBlbHNlIGlmIChpc1NwZWNpYWwodGhpcy51cmwpICYmIGMgPT09IDkyKSB7XHJcbiAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwicmVsYXRpdmUgc2xhc2hcIjtcclxuICB9IGVsc2Uge1xyXG4gICAgdGhpcy51cmwudXNlcm5hbWUgPSB0aGlzLmJhc2UudXNlcm5hbWU7XHJcbiAgICB0aGlzLnVybC5wYXNzd29yZCA9IHRoaXMuYmFzZS5wYXNzd29yZDtcclxuICAgIHRoaXMudXJsLmhvc3QgPSB0aGlzLmJhc2UuaG9zdDtcclxuICAgIHRoaXMudXJsLnBvcnQgPSB0aGlzLmJhc2UucG9ydDtcclxuICAgIHRoaXMudXJsLnBhdGggPSB0aGlzLmJhc2UucGF0aC5zbGljZSgwLCB0aGlzLmJhc2UucGF0aC5sZW5ndGggLSAxKTtcclxuXHJcbiAgICB0aGlzLnN0YXRlID0gXCJwYXRoXCI7XHJcbiAgICAtLXRoaXMucG9pbnRlcjtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIHJlbGF0aXZlIHNsYXNoXCJdID0gZnVuY3Rpb24gcGFyc2VSZWxhdGl2ZVNsYXNoKGMpIHtcclxuICBpZiAoaXNTcGVjaWFsKHRoaXMudXJsKSAmJiAoYyA9PT0gNDcgfHwgYyA9PT0gOTIpKSB7XHJcbiAgICBpZiAoYyA9PT0gOTIpIHtcclxuICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHRoaXMuc3RhdGUgPSBcInNwZWNpYWwgYXV0aG9yaXR5IGlnbm9yZSBzbGFzaGVzXCI7XHJcbiAgfSBlbHNlIGlmIChjID09PSA0Nykge1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwiYXV0aG9yaXR5XCI7XHJcbiAgfSBlbHNlIHtcclxuICAgIHRoaXMudXJsLnVzZXJuYW1lID0gdGhpcy5iYXNlLnVzZXJuYW1lO1xyXG4gICAgdGhpcy51cmwucGFzc3dvcmQgPSB0aGlzLmJhc2UucGFzc3dvcmQ7XHJcbiAgICB0aGlzLnVybC5ob3N0ID0gdGhpcy5iYXNlLmhvc3Q7XHJcbiAgICB0aGlzLnVybC5wb3J0ID0gdGhpcy5iYXNlLnBvcnQ7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJwYXRoXCI7XHJcbiAgICAtLXRoaXMucG9pbnRlcjtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIHNwZWNpYWwgYXV0aG9yaXR5IHNsYXNoZXNcIl0gPSBmdW5jdGlvbiBwYXJzZVNwZWNpYWxBdXRob3JpdHlTbGFzaGVzKGMpIHtcclxuICBpZiAoYyA9PT0gNDcgJiYgdGhpcy5pbnB1dFt0aGlzLnBvaW50ZXIgKyAxXSA9PT0gNDcpIHtcclxuICAgIHRoaXMuc3RhdGUgPSBcInNwZWNpYWwgYXV0aG9yaXR5IGlnbm9yZSBzbGFzaGVzXCI7XHJcbiAgICArK3RoaXMucG9pbnRlcjtcclxuICB9IGVsc2Uge1xyXG4gICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgIHRoaXMuc3RhdGUgPSBcInNwZWNpYWwgYXV0aG9yaXR5IGlnbm9yZSBzbGFzaGVzXCI7XHJcbiAgICAtLXRoaXMucG9pbnRlcjtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIHNwZWNpYWwgYXV0aG9yaXR5IGlnbm9yZSBzbGFzaGVzXCJdID0gZnVuY3Rpb24gcGFyc2VTcGVjaWFsQXV0aG9yaXR5SWdub3JlU2xhc2hlcyhjKSB7XHJcbiAgaWYgKGMgIT09IDQ3ICYmIGMgIT09IDkyKSB7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJhdXRob3JpdHlcIjtcclxuICAgIC0tdGhpcy5wb2ludGVyO1xyXG4gIH0gZWxzZSB7XHJcbiAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5VUkxTdGF0ZU1hY2hpbmUucHJvdG90eXBlW1wicGFyc2UgYXV0aG9yaXR5XCJdID0gZnVuY3Rpb24gcGFyc2VBdXRob3JpdHkoYywgY1N0cikge1xyXG4gIGlmIChjID09PSA2NCkge1xyXG4gICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLmF0RmxhZykge1xyXG4gICAgICB0aGlzLmJ1ZmZlciA9IFwiJTQwXCIgKyB0aGlzLmJ1ZmZlcjtcclxuICAgIH1cclxuICAgIHRoaXMuYXRGbGFnID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBjYXJlZnVsLCB0aGlzIGlzIGJhc2VkIG9uIGJ1ZmZlciBhbmQgaGFzIGl0cyBvd24gcG9pbnRlciAodGhpcy5wb2ludGVyICE9IHBvaW50ZXIpIGFuZCBpbm5lciBjaGFyc1xyXG4gICAgY29uc3QgbGVuID0gY291bnRTeW1ib2xzKHRoaXMuYnVmZmVyKTtcclxuICAgIGZvciAobGV0IHBvaW50ZXIgPSAwOyBwb2ludGVyIDwgbGVuOyArK3BvaW50ZXIpIHtcclxuICAgICAgY29uc3QgY29kZVBvaW50ID0gdGhpcy5idWZmZXIuY29kZVBvaW50QXQocG9pbnRlcik7XHJcblxyXG4gICAgICBpZiAoY29kZVBvaW50ID09PSA1OCAmJiAhdGhpcy5wYXNzd29yZFRva2VuU2VlbkZsYWcpIHtcclxuICAgICAgICB0aGlzLnBhc3N3b3JkVG9rZW5TZWVuRmxhZyA9IHRydWU7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgZW5jb2RlZENvZGVQb2ludHMgPSBwZXJjZW50RW5jb2RlQ2hhcihjb2RlUG9pbnQsIGlzVXNlcmluZm9QZXJjZW50RW5jb2RlKTtcclxuICAgICAgaWYgKHRoaXMucGFzc3dvcmRUb2tlblNlZW5GbGFnKSB7XHJcbiAgICAgICAgdGhpcy51cmwucGFzc3dvcmQgKz0gZW5jb2RlZENvZGVQb2ludHM7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy51cmwudXNlcm5hbWUgKz0gZW5jb2RlZENvZGVQb2ludHM7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuYnVmZmVyID0gXCJcIjtcclxuICB9IGVsc2UgaWYgKGlzTmFOKGMpIHx8IGMgPT09IDQ3IHx8IGMgPT09IDYzIHx8IGMgPT09IDM1IHx8XHJcbiAgICAgICAgICAgICAoaXNTcGVjaWFsKHRoaXMudXJsKSAmJiBjID09PSA5MikpIHtcclxuICAgIGlmICh0aGlzLmF0RmxhZyAmJiB0aGlzLmJ1ZmZlciA9PT0gXCJcIikge1xyXG4gICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgIH1cclxuICAgIHRoaXMucG9pbnRlciAtPSBjb3VudFN5bWJvbHModGhpcy5idWZmZXIpICsgMTtcclxuICAgIHRoaXMuYnVmZmVyID0gXCJcIjtcclxuICAgIHRoaXMuc3RhdGUgPSBcImhvc3RcIjtcclxuICB9IGVsc2Uge1xyXG4gICAgdGhpcy5idWZmZXIgKz0gY1N0cjtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIGhvc3RuYW1lXCJdID1cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIGhvc3RcIl0gPSBmdW5jdGlvbiBwYXJzZUhvc3ROYW1lKGMsIGNTdHIpIHtcclxuICBpZiAodGhpcy5zdGF0ZU92ZXJyaWRlICYmIHRoaXMudXJsLnNjaGVtZSA9PT0gXCJmaWxlXCIpIHtcclxuICAgIC0tdGhpcy5wb2ludGVyO1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwiZmlsZSBob3N0XCI7XHJcbiAgfSBlbHNlIGlmIChjID09PSA1OCAmJiAhdGhpcy5hcnJGbGFnKSB7XHJcbiAgICBpZiAodGhpcy5idWZmZXIgPT09IFwiXCIpIHtcclxuICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaG9zdCA9IHBhcnNlSG9zdCh0aGlzLmJ1ZmZlciwgaXNTcGVjaWFsKHRoaXMudXJsKSk7XHJcbiAgICBpZiAoaG9zdCA9PT0gZmFpbHVyZSkge1xyXG4gICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVybC5ob3N0ID0gaG9zdDtcclxuICAgIHRoaXMuYnVmZmVyID0gXCJcIjtcclxuICAgIHRoaXMuc3RhdGUgPSBcInBvcnRcIjtcclxuICAgIGlmICh0aGlzLnN0YXRlT3ZlcnJpZGUgPT09IFwiaG9zdG5hbWVcIikge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfSBlbHNlIGlmIChpc05hTihjKSB8fCBjID09PSA0NyB8fCBjID09PSA2MyB8fCBjID09PSAzNSB8fFxyXG4gICAgICAgICAgICAgKGlzU3BlY2lhbCh0aGlzLnVybCkgJiYgYyA9PT0gOTIpKSB7XHJcbiAgICAtLXRoaXMucG9pbnRlcjtcclxuICAgIGlmIChpc1NwZWNpYWwodGhpcy51cmwpICYmIHRoaXMuYnVmZmVyID09PSBcIlwiKSB7XHJcbiAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnN0YXRlT3ZlcnJpZGUgJiYgdGhpcy5idWZmZXIgPT09IFwiXCIgJiZcclxuICAgICAgICAgICAgICAgKGluY2x1ZGVzQ3JlZGVudGlhbHModGhpcy51cmwpIHx8IHRoaXMudXJsLnBvcnQgIT09IG51bGwpKSB7XHJcbiAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBob3N0ID0gcGFyc2VIb3N0KHRoaXMuYnVmZmVyLCBpc1NwZWNpYWwodGhpcy51cmwpKTtcclxuICAgIGlmIChob3N0ID09PSBmYWlsdXJlKSB7XHJcbiAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudXJsLmhvc3QgPSBob3N0O1xyXG4gICAgdGhpcy5idWZmZXIgPSBcIlwiO1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwicGF0aCBzdGFydFwiO1xyXG4gICAgaWYgKHRoaXMuc3RhdGVPdmVycmlkZSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfSBlbHNlIHtcclxuICAgIGlmIChjID09PSA5MSkge1xyXG4gICAgICB0aGlzLmFyckZsYWcgPSB0cnVlO1xyXG4gICAgfSBlbHNlIGlmIChjID09PSA5Mykge1xyXG4gICAgICB0aGlzLmFyckZsYWcgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHRoaXMuYnVmZmVyICs9IGNTdHI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBwb3J0XCJdID0gZnVuY3Rpb24gcGFyc2VQb3J0KGMsIGNTdHIpIHtcclxuICBpZiAoaXNBU0NJSURpZ2l0KGMpKSB7XHJcbiAgICB0aGlzLmJ1ZmZlciArPSBjU3RyO1xyXG4gIH0gZWxzZSBpZiAoaXNOYU4oYykgfHwgYyA9PT0gNDcgfHwgYyA9PT0gNjMgfHwgYyA9PT0gMzUgfHxcclxuICAgICAgICAgICAgIChpc1NwZWNpYWwodGhpcy51cmwpICYmIGMgPT09IDkyKSB8fFxyXG4gICAgICAgICAgICAgdGhpcy5zdGF0ZU92ZXJyaWRlKSB7XHJcbiAgICBpZiAodGhpcy5idWZmZXIgIT09IFwiXCIpIHtcclxuICAgICAgY29uc3QgcG9ydCA9IHBhcnNlSW50KHRoaXMuYnVmZmVyKTtcclxuICAgICAgaWYgKHBvcnQgPiBNYXRoLnBvdygyLCAxNikgLSAxKSB7XHJcbiAgICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnVybC5wb3J0ID0gcG9ydCA9PT0gZGVmYXVsdFBvcnQodGhpcy51cmwuc2NoZW1lKSA/IG51bGwgOiBwb3J0O1xyXG4gICAgICB0aGlzLmJ1ZmZlciA9IFwiXCI7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zdGF0ZU92ZXJyaWRlKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHRoaXMuc3RhdGUgPSBcInBhdGggc3RhcnRcIjtcclxuICAgIC0tdGhpcy5wb2ludGVyO1xyXG4gIH0gZWxzZSB7XHJcbiAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcbmNvbnN0IGZpbGVPdGhlcndpc2VDb2RlUG9pbnRzID0gbmV3IFNldChbNDcsIDkyLCA2MywgMzVdKTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBmaWxlXCJdID0gZnVuY3Rpb24gcGFyc2VGaWxlKGMpIHtcclxuICB0aGlzLnVybC5zY2hlbWUgPSBcImZpbGVcIjtcclxuXHJcbiAgaWYgKGMgPT09IDQ3IHx8IGMgPT09IDkyKSB7XHJcbiAgICBpZiAoYyA9PT0gOTIpIHtcclxuICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHRoaXMuc3RhdGUgPSBcImZpbGUgc2xhc2hcIjtcclxuICB9IGVsc2UgaWYgKHRoaXMuYmFzZSAhPT0gbnVsbCAmJiB0aGlzLmJhc2Uuc2NoZW1lID09PSBcImZpbGVcIikge1xyXG4gICAgaWYgKGlzTmFOKGMpKSB7XHJcbiAgICAgIHRoaXMudXJsLmhvc3QgPSB0aGlzLmJhc2UuaG9zdDtcclxuICAgICAgdGhpcy51cmwucGF0aCA9IHRoaXMuYmFzZS5wYXRoLnNsaWNlKCk7XHJcbiAgICAgIHRoaXMudXJsLnF1ZXJ5ID0gdGhpcy5iYXNlLnF1ZXJ5O1xyXG4gICAgfSBlbHNlIGlmIChjID09PSA2Mykge1xyXG4gICAgICB0aGlzLnVybC5ob3N0ID0gdGhpcy5iYXNlLmhvc3Q7XHJcbiAgICAgIHRoaXMudXJsLnBhdGggPSB0aGlzLmJhc2UucGF0aC5zbGljZSgpO1xyXG4gICAgICB0aGlzLnVybC5xdWVyeSA9IFwiXCI7XHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcInF1ZXJ5XCI7XHJcbiAgICB9IGVsc2UgaWYgKGMgPT09IDM1KSB7XHJcbiAgICAgIHRoaXMudXJsLmhvc3QgPSB0aGlzLmJhc2UuaG9zdDtcclxuICAgICAgdGhpcy51cmwucGF0aCA9IHRoaXMuYmFzZS5wYXRoLnNsaWNlKCk7XHJcbiAgICAgIHRoaXMudXJsLnF1ZXJ5ID0gdGhpcy5iYXNlLnF1ZXJ5O1xyXG4gICAgICB0aGlzLnVybC5mcmFnbWVudCA9IFwiXCI7XHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcImZyYWdtZW50XCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5pbnB1dC5sZW5ndGggLSB0aGlzLnBvaW50ZXIgLSAxID09PSAwIHx8IC8vIHJlbWFpbmluZyBjb25zaXN0cyBvZiAwIGNvZGUgcG9pbnRzXHJcbiAgICAgICAgICAhaXNXaW5kb3dzRHJpdmVMZXR0ZXJDb2RlUG9pbnRzKGMsIHRoaXMuaW5wdXRbdGhpcy5wb2ludGVyICsgMV0pIHx8XHJcbiAgICAgICAgICAodGhpcy5pbnB1dC5sZW5ndGggLSB0aGlzLnBvaW50ZXIgLSAxID49IDIgJiYgLy8gcmVtYWluaW5nIGhhcyBhdCBsZWFzdCAyIGNvZGUgcG9pbnRzXHJcbiAgICAgICAgICAgIWZpbGVPdGhlcndpc2VDb2RlUG9pbnRzLmhhcyh0aGlzLmlucHV0W3RoaXMucG9pbnRlciArIDJdKSkpIHtcclxuICAgICAgICB0aGlzLnVybC5ob3N0ID0gdGhpcy5iYXNlLmhvc3Q7XHJcbiAgICAgICAgdGhpcy51cmwucGF0aCA9IHRoaXMuYmFzZS5wYXRoLnNsaWNlKCk7XHJcbiAgICAgICAgc2hvcnRlblBhdGgodGhpcy51cmwpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcInBhdGhcIjtcclxuICAgICAgLS10aGlzLnBvaW50ZXI7XHJcbiAgICB9XHJcbiAgfSBlbHNlIHtcclxuICAgIHRoaXMuc3RhdGUgPSBcInBhdGhcIjtcclxuICAgIC0tdGhpcy5wb2ludGVyO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5VUkxTdGF0ZU1hY2hpbmUucHJvdG90eXBlW1wicGFyc2UgZmlsZSBzbGFzaFwiXSA9IGZ1bmN0aW9uIHBhcnNlRmlsZVNsYXNoKGMpIHtcclxuICBpZiAoYyA9PT0gNDcgfHwgYyA9PT0gOTIpIHtcclxuICAgIGlmIChjID09PSA5Mikge1xyXG4gICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zdGF0ZSA9IFwiZmlsZSBob3N0XCI7XHJcbiAgfSBlbHNlIHtcclxuICAgIGlmICh0aGlzLmJhc2UgIT09IG51bGwgJiYgdGhpcy5iYXNlLnNjaGVtZSA9PT0gXCJmaWxlXCIpIHtcclxuICAgICAgaWYgKGlzTm9ybWFsaXplZFdpbmRvd3NEcml2ZUxldHRlclN0cmluZyh0aGlzLmJhc2UucGF0aFswXSkpIHtcclxuICAgICAgICB0aGlzLnVybC5wYXRoLnB1c2godGhpcy5iYXNlLnBhdGhbMF0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMudXJsLmhvc3QgPSB0aGlzLmJhc2UuaG9zdDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5zdGF0ZSA9IFwicGF0aFwiO1xyXG4gICAgLS10aGlzLnBvaW50ZXI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBmaWxlIGhvc3RcIl0gPSBmdW5jdGlvbiBwYXJzZUZpbGVIb3N0KGMsIGNTdHIpIHtcclxuICBpZiAoaXNOYU4oYykgfHwgYyA9PT0gNDcgfHwgYyA9PT0gOTIgfHwgYyA9PT0gNjMgfHwgYyA9PT0gMzUpIHtcclxuICAgIC0tdGhpcy5wb2ludGVyO1xyXG4gICAgaWYgKCF0aGlzLnN0YXRlT3ZlcnJpZGUgJiYgaXNXaW5kb3dzRHJpdmVMZXR0ZXJTdHJpbmcodGhpcy5idWZmZXIpKSB7XHJcbiAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcInBhdGhcIjtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5idWZmZXIgPT09IFwiXCIpIHtcclxuICAgICAgdGhpcy51cmwuaG9zdCA9IFwiXCI7XHJcbiAgICAgIGlmICh0aGlzLnN0YXRlT3ZlcnJpZGUpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zdGF0ZSA9IFwicGF0aCBzdGFydFwiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IGhvc3QgPSBwYXJzZUhvc3QodGhpcy5idWZmZXIsIGlzU3BlY2lhbCh0aGlzLnVybCkpO1xyXG4gICAgICBpZiAoaG9zdCA9PT0gZmFpbHVyZSkge1xyXG4gICAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChob3N0ID09PSBcImxvY2FsaG9zdFwiKSB7XHJcbiAgICAgICAgaG9zdCA9IFwiXCI7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy51cmwuaG9zdCA9IGhvc3Q7XHJcblxyXG4gICAgICBpZiAodGhpcy5zdGF0ZU92ZXJyaWRlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmJ1ZmZlciA9IFwiXCI7XHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcInBhdGggc3RhcnRcIjtcclxuICAgIH1cclxuICB9IGVsc2Uge1xyXG4gICAgdGhpcy5idWZmZXIgKz0gY1N0cjtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIHBhdGggc3RhcnRcIl0gPSBmdW5jdGlvbiBwYXJzZVBhdGhTdGFydChjKSB7XHJcbiAgaWYgKGlzU3BlY2lhbCh0aGlzLnVybCkpIHtcclxuICAgIGlmIChjID09PSA5Mikge1xyXG4gICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zdGF0ZSA9IFwicGF0aFwiO1xyXG5cclxuICAgIGlmIChjICE9PSA0NyAmJiBjICE9PSA5Mikge1xyXG4gICAgICAtLXRoaXMucG9pbnRlcjtcclxuICAgIH1cclxuICB9IGVsc2UgaWYgKCF0aGlzLnN0YXRlT3ZlcnJpZGUgJiYgYyA9PT0gNjMpIHtcclxuICAgIHRoaXMudXJsLnF1ZXJ5ID0gXCJcIjtcclxuICAgIHRoaXMuc3RhdGUgPSBcInF1ZXJ5XCI7XHJcbiAgfSBlbHNlIGlmICghdGhpcy5zdGF0ZU92ZXJyaWRlICYmIGMgPT09IDM1KSB7XHJcbiAgICB0aGlzLnVybC5mcmFnbWVudCA9IFwiXCI7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJmcmFnbWVudFwiO1xyXG4gIH0gZWxzZSBpZiAoYyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJwYXRoXCI7XHJcbiAgICBpZiAoYyAhPT0gNDcpIHtcclxuICAgICAgLS10aGlzLnBvaW50ZXI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBwYXRoXCJdID0gZnVuY3Rpb24gcGFyc2VQYXRoKGMpIHtcclxuICBpZiAoaXNOYU4oYykgfHwgYyA9PT0gNDcgfHwgKGlzU3BlY2lhbCh0aGlzLnVybCkgJiYgYyA9PT0gOTIpIHx8XHJcbiAgICAgICghdGhpcy5zdGF0ZU92ZXJyaWRlICYmIChjID09PSA2MyB8fCBjID09PSAzNSkpKSB7XHJcbiAgICBpZiAoaXNTcGVjaWFsKHRoaXMudXJsKSAmJiBjID09PSA5Mikge1xyXG4gICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpc0RvdWJsZURvdCh0aGlzLmJ1ZmZlcikpIHtcclxuICAgICAgc2hvcnRlblBhdGgodGhpcy51cmwpO1xyXG4gICAgICBpZiAoYyAhPT0gNDcgJiYgIShpc1NwZWNpYWwodGhpcy51cmwpICYmIGMgPT09IDkyKSkge1xyXG4gICAgICAgIHRoaXMudXJsLnBhdGgucHVzaChcIlwiKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChpc1NpbmdsZURvdCh0aGlzLmJ1ZmZlcikgJiYgYyAhPT0gNDcgJiZcclxuICAgICAgICAgICAgICAgIShpc1NwZWNpYWwodGhpcy51cmwpICYmIGMgPT09IDkyKSkge1xyXG4gICAgICB0aGlzLnVybC5wYXRoLnB1c2goXCJcIik7XHJcbiAgICB9IGVsc2UgaWYgKCFpc1NpbmdsZURvdCh0aGlzLmJ1ZmZlcikpIHtcclxuICAgICAgaWYgKHRoaXMudXJsLnNjaGVtZSA9PT0gXCJmaWxlXCIgJiYgdGhpcy51cmwucGF0aC5sZW5ndGggPT09IDAgJiYgaXNXaW5kb3dzRHJpdmVMZXR0ZXJTdHJpbmcodGhpcy5idWZmZXIpKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudXJsLmhvc3QgIT09IFwiXCIgJiYgdGhpcy51cmwuaG9zdCAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMudXJsLmhvc3QgPSBcIlwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmJ1ZmZlciA9IHRoaXMuYnVmZmVyWzBdICsgXCI6XCI7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy51cmwucGF0aC5wdXNoKHRoaXMuYnVmZmVyKTtcclxuICAgIH1cclxuICAgIHRoaXMuYnVmZmVyID0gXCJcIjtcclxuICAgIGlmICh0aGlzLnVybC5zY2hlbWUgPT09IFwiZmlsZVwiICYmIChjID09PSB1bmRlZmluZWQgfHwgYyA9PT0gNjMgfHwgYyA9PT0gMzUpKSB7XHJcbiAgICAgIHdoaWxlICh0aGlzLnVybC5wYXRoLmxlbmd0aCA+IDEgJiYgdGhpcy51cmwucGF0aFswXSA9PT0gXCJcIikge1xyXG4gICAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICAgICAgdGhpcy51cmwucGF0aC5zaGlmdCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoYyA9PT0gNjMpIHtcclxuICAgICAgdGhpcy51cmwucXVlcnkgPSBcIlwiO1xyXG4gICAgICB0aGlzLnN0YXRlID0gXCJxdWVyeVwiO1xyXG4gICAgfVxyXG4gICAgaWYgKGMgPT09IDM1KSB7XHJcbiAgICAgIHRoaXMudXJsLmZyYWdtZW50ID0gXCJcIjtcclxuICAgICAgdGhpcy5zdGF0ZSA9IFwiZnJhZ21lbnRcIjtcclxuICAgIH1cclxuICB9IGVsc2Uge1xyXG4gICAgLy8gVE9ETzogSWYgYyBpcyBub3QgYSBVUkwgY29kZSBwb2ludCBhbmQgbm90IFwiJVwiLCBwYXJzZSBlcnJvci5cclxuXHJcbiAgICBpZiAoYyA9PT0gMzcgJiZcclxuICAgICAgKCFpc0FTQ0lJSGV4KHRoaXMuaW5wdXRbdGhpcy5wb2ludGVyICsgMV0pIHx8XHJcbiAgICAgICAgIWlzQVNDSUlIZXgodGhpcy5pbnB1dFt0aGlzLnBvaW50ZXIgKyAyXSkpKSB7XHJcbiAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5idWZmZXIgKz0gcGVyY2VudEVuY29kZUNoYXIoYywgaXNQYXRoUGVyY2VudEVuY29kZSk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBjYW5ub3QtYmUtYS1iYXNlLVVSTCBwYXRoXCJdID0gZnVuY3Rpb24gcGFyc2VDYW5ub3RCZUFCYXNlVVJMUGF0aChjKSB7XHJcbiAgaWYgKGMgPT09IDYzKSB7XHJcbiAgICB0aGlzLnVybC5xdWVyeSA9IFwiXCI7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJxdWVyeVwiO1xyXG4gIH0gZWxzZSBpZiAoYyA9PT0gMzUpIHtcclxuICAgIHRoaXMudXJsLmZyYWdtZW50ID0gXCJcIjtcclxuICAgIHRoaXMuc3RhdGUgPSBcImZyYWdtZW50XCI7XHJcbiAgfSBlbHNlIHtcclxuICAgIC8vIFRPRE86IEFkZDogbm90IGEgVVJMIGNvZGUgcG9pbnRcclxuICAgIGlmICghaXNOYU4oYykgJiYgYyAhPT0gMzcpIHtcclxuICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoYyA9PT0gMzcgJiZcclxuICAgICAgICAoIWlzQVNDSUlIZXgodGhpcy5pbnB1dFt0aGlzLnBvaW50ZXIgKyAxXSkgfHxcclxuICAgICAgICAgIWlzQVNDSUlIZXgodGhpcy5pbnB1dFt0aGlzLnBvaW50ZXIgKyAyXSkpKSB7XHJcbiAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFpc05hTihjKSkge1xyXG4gICAgICB0aGlzLnVybC5wYXRoWzBdID0gdGhpcy51cmwucGF0aFswXSArIHBlcmNlbnRFbmNvZGVDaGFyKGMsIGlzQzBDb250cm9sUGVyY2VudEVuY29kZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBxdWVyeVwiXSA9IGZ1bmN0aW9uIHBhcnNlUXVlcnkoYywgY1N0cikge1xyXG4gIGlmIChpc05hTihjKSB8fCAoIXRoaXMuc3RhdGVPdmVycmlkZSAmJiBjID09PSAzNSkpIHtcclxuICAgIGlmICghaXNTcGVjaWFsKHRoaXMudXJsKSB8fCB0aGlzLnVybC5zY2hlbWUgPT09IFwid3NcIiB8fCB0aGlzLnVybC5zY2hlbWUgPT09IFwid3NzXCIpIHtcclxuICAgICAgdGhpcy5lbmNvZGluZ092ZXJyaWRlID0gXCJ1dGYtOFwiO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBCdWZmZXIodGhpcy5idWZmZXIpOyAvLyBUT0RPOiBVc2UgZW5jb2Rpbmcgb3ZlcnJpZGUgaW5zdGVhZFxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWZmZXIubGVuZ3RoOyArK2kpIHtcclxuICAgICAgaWYgKGJ1ZmZlcltpXSA8IDB4MjEgfHwgYnVmZmVyW2ldID4gMHg3RSB8fCBidWZmZXJbaV0gPT09IDB4MjIgfHwgYnVmZmVyW2ldID09PSAweDIzIHx8XHJcbiAgICAgICAgICBidWZmZXJbaV0gPT09IDB4M0MgfHwgYnVmZmVyW2ldID09PSAweDNFKSB7XHJcbiAgICAgICAgdGhpcy51cmwucXVlcnkgKz0gcGVyY2VudEVuY29kZShidWZmZXJbaV0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMudXJsLnF1ZXJ5ICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KGJ1ZmZlcltpXSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmJ1ZmZlciA9IFwiXCI7XHJcbiAgICBpZiAoYyA9PT0gMzUpIHtcclxuICAgICAgdGhpcy51cmwuZnJhZ21lbnQgPSBcIlwiO1xyXG4gICAgICB0aGlzLnN0YXRlID0gXCJmcmFnbWVudFwiO1xyXG4gICAgfVxyXG4gIH0gZWxzZSB7XHJcbiAgICAvLyBUT0RPOiBJZiBjIGlzIG5vdCBhIFVSTCBjb2RlIHBvaW50IGFuZCBub3QgXCIlXCIsIHBhcnNlIGVycm9yLlxyXG4gICAgaWYgKGMgPT09IDM3ICYmXHJcbiAgICAgICghaXNBU0NJSUhleCh0aGlzLmlucHV0W3RoaXMucG9pbnRlciArIDFdKSB8fFxyXG4gICAgICAgICFpc0FTQ0lJSGV4KHRoaXMuaW5wdXRbdGhpcy5wb2ludGVyICsgMl0pKSkge1xyXG4gICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYnVmZmVyICs9IGNTdHI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBmcmFnbWVudFwiXSA9IGZ1bmN0aW9uIHBhcnNlRnJhZ21lbnQoYykge1xyXG4gIGlmIChpc05hTihjKSkgeyAvLyBkbyBub3RoaW5nXHJcbiAgfSBlbHNlIGlmIChjID09PSAweDApIHtcclxuICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgfSBlbHNlIHtcclxuICAgIC8vIFRPRE86IElmIGMgaXMgbm90IGEgVVJMIGNvZGUgcG9pbnQgYW5kIG5vdCBcIiVcIiwgcGFyc2UgZXJyb3IuXHJcbiAgICBpZiAoYyA9PT0gMzcgJiZcclxuICAgICAgKCFpc0FTQ0lJSGV4KHRoaXMuaW5wdXRbdGhpcy5wb2ludGVyICsgMV0pIHx8XHJcbiAgICAgICAgIWlzQVNDSUlIZXgodGhpcy5pbnB1dFt0aGlzLnBvaW50ZXIgKyAyXSkpKSB7XHJcbiAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy51cmwuZnJhZ21lbnQgKz0gcGVyY2VudEVuY29kZUNoYXIoYywgaXNDMENvbnRyb2xQZXJjZW50RW5jb2RlKTtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuZnVuY3Rpb24gc2VyaWFsaXplVVJMKHVybCwgZXhjbHVkZUZyYWdtZW50KSB7XHJcbiAgbGV0IG91dHB1dCA9IHVybC5zY2hlbWUgKyBcIjpcIjtcclxuICBpZiAodXJsLmhvc3QgIT09IG51bGwpIHtcclxuICAgIG91dHB1dCArPSBcIi8vXCI7XHJcblxyXG4gICAgaWYgKHVybC51c2VybmFtZSAhPT0gXCJcIiB8fCB1cmwucGFzc3dvcmQgIT09IFwiXCIpIHtcclxuICAgICAgb3V0cHV0ICs9IHVybC51c2VybmFtZTtcclxuICAgICAgaWYgKHVybC5wYXNzd29yZCAhPT0gXCJcIikge1xyXG4gICAgICAgIG91dHB1dCArPSBcIjpcIiArIHVybC5wYXNzd29yZDtcclxuICAgICAgfVxyXG4gICAgICBvdXRwdXQgKz0gXCJAXCI7XHJcbiAgICB9XHJcblxyXG4gICAgb3V0cHV0ICs9IHNlcmlhbGl6ZUhvc3QodXJsLmhvc3QpO1xyXG5cclxuICAgIGlmICh1cmwucG9ydCAhPT0gbnVsbCkge1xyXG4gICAgICBvdXRwdXQgKz0gXCI6XCIgKyB1cmwucG9ydDtcclxuICAgIH1cclxuICB9IGVsc2UgaWYgKHVybC5ob3N0ID09PSBudWxsICYmIHVybC5zY2hlbWUgPT09IFwiZmlsZVwiKSB7XHJcbiAgICBvdXRwdXQgKz0gXCIvL1wiO1xyXG4gIH1cclxuXHJcbiAgaWYgKHVybC5jYW5ub3RCZUFCYXNlVVJMKSB7XHJcbiAgICBvdXRwdXQgKz0gdXJsLnBhdGhbMF07XHJcbiAgfSBlbHNlIHtcclxuICAgIGZvciAoY29uc3Qgc3RyaW5nIG9mIHVybC5wYXRoKSB7XHJcbiAgICAgIG91dHB1dCArPSBcIi9cIiArIHN0cmluZztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlmICh1cmwucXVlcnkgIT09IG51bGwpIHtcclxuICAgIG91dHB1dCArPSBcIj9cIiArIHVybC5xdWVyeTtcclxuICB9XHJcblxyXG4gIGlmICghZXhjbHVkZUZyYWdtZW50ICYmIHVybC5mcmFnbWVudCAhPT0gbnVsbCkge1xyXG4gICAgb3V0cHV0ICs9IFwiI1wiICsgdXJsLmZyYWdtZW50O1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIG91dHB1dDtcclxufVxyXG5cclxuZnVuY3Rpb24gc2VyaWFsaXplT3JpZ2luKHR1cGxlKSB7XHJcbiAgbGV0IHJlc3VsdCA9IHR1cGxlLnNjaGVtZSArIFwiOi8vXCI7XHJcbiAgcmVzdWx0ICs9IHNlcmlhbGl6ZUhvc3QodHVwbGUuaG9zdCk7XHJcblxyXG4gIGlmICh0dXBsZS5wb3J0ICE9PSBudWxsKSB7XHJcbiAgICByZXN1bHQgKz0gXCI6XCIgKyB0dXBsZS5wb3J0O1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMuc2VyaWFsaXplVVJMID0gc2VyaWFsaXplVVJMO1xyXG5cclxubW9kdWxlLmV4cG9ydHMuc2VyaWFsaXplVVJMT3JpZ2luID0gZnVuY3Rpb24gKHVybCkge1xyXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC11cmwtb3JpZ2luXHJcbiAgc3dpdGNoICh1cmwuc2NoZW1lKSB7XHJcbiAgICBjYXNlIFwiYmxvYlwiOlxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHJldHVybiBtb2R1bGUuZXhwb3J0cy5zZXJpYWxpemVVUkxPcmlnaW4obW9kdWxlLmV4cG9ydHMucGFyc2VVUkwodXJsLnBhdGhbMF0pKTtcclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIC8vIHNlcmlhbGl6aW5nIGFuIG9wYXF1ZSBvcmlnaW4gcmV0dXJucyBcIm51bGxcIlxyXG4gICAgICAgIHJldHVybiBcIm51bGxcIjtcclxuICAgICAgfVxyXG4gICAgY2FzZSBcImZ0cFwiOlxyXG4gICAgY2FzZSBcImdvcGhlclwiOlxyXG4gICAgY2FzZSBcImh0dHBcIjpcclxuICAgIGNhc2UgXCJodHRwc1wiOlxyXG4gICAgY2FzZSBcIndzXCI6XHJcbiAgICBjYXNlIFwid3NzXCI6XHJcbiAgICAgIHJldHVybiBzZXJpYWxpemVPcmlnaW4oe1xyXG4gICAgICAgIHNjaGVtZTogdXJsLnNjaGVtZSxcclxuICAgICAgICBob3N0OiB1cmwuaG9zdCxcclxuICAgICAgICBwb3J0OiB1cmwucG9ydFxyXG4gICAgICB9KTtcclxuICAgIGNhc2UgXCJmaWxlXCI6XHJcbiAgICAgIC8vIHNwZWMgc2F5cyBcImV4ZXJjaXNlIHRvIHRoZSByZWFkZXJcIiwgY2hyb21lIHNheXMgXCJmaWxlOi8vXCJcclxuICAgICAgcmV0dXJuIFwiZmlsZTovL1wiO1xyXG4gICAgZGVmYXVsdDpcclxuICAgICAgLy8gc2VyaWFsaXppbmcgYW4gb3BhcXVlIG9yaWdpbiByZXR1cm5zIFwibnVsbFwiXHJcbiAgICAgIHJldHVybiBcIm51bGxcIjtcclxuICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5iYXNpY1VSTFBhcnNlID0gZnVuY3Rpb24gKGlucHV0LCBvcHRpb25zKSB7XHJcbiAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgb3B0aW9ucyA9IHt9O1xyXG4gIH1cclxuXHJcbiAgY29uc3QgdXNtID0gbmV3IFVSTFN0YXRlTWFjaGluZShpbnB1dCwgb3B0aW9ucy5iYXNlVVJMLCBvcHRpb25zLmVuY29kaW5nT3ZlcnJpZGUsIG9wdGlvbnMudXJsLCBvcHRpb25zLnN0YXRlT3ZlcnJpZGUpO1xyXG4gIGlmICh1c20uZmFpbHVyZSkge1xyXG4gICAgcmV0dXJuIFwiZmFpbHVyZVwiO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHVzbS51cmw7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5zZXRUaGVVc2VybmFtZSA9IGZ1bmN0aW9uICh1cmwsIHVzZXJuYW1lKSB7XHJcbiAgdXJsLnVzZXJuYW1lID0gXCJcIjtcclxuICBjb25zdCBkZWNvZGVkID0gcHVueWNvZGUudWNzMi5kZWNvZGUodXNlcm5hbWUpO1xyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGVjb2RlZC5sZW5ndGg7ICsraSkge1xyXG4gICAgdXJsLnVzZXJuYW1lICs9IHBlcmNlbnRFbmNvZGVDaGFyKGRlY29kZWRbaV0sIGlzVXNlcmluZm9QZXJjZW50RW5jb2RlKTtcclxuICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5zZXRUaGVQYXNzd29yZCA9IGZ1bmN0aW9uICh1cmwsIHBhc3N3b3JkKSB7XHJcbiAgdXJsLnBhc3N3b3JkID0gXCJcIjtcclxuICBjb25zdCBkZWNvZGVkID0gcHVueWNvZGUudWNzMi5kZWNvZGUocGFzc3dvcmQpO1xyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGVjb2RlZC5sZW5ndGg7ICsraSkge1xyXG4gICAgdXJsLnBhc3N3b3JkICs9IHBlcmNlbnRFbmNvZGVDaGFyKGRlY29kZWRbaV0sIGlzVXNlcmluZm9QZXJjZW50RW5jb2RlKTtcclxuICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5zZXJpYWxpemVIb3N0ID0gc2VyaWFsaXplSG9zdDtcclxuXHJcbm1vZHVsZS5leHBvcnRzLmNhbm5vdEhhdmVBVXNlcm5hbWVQYXNzd29yZFBvcnQgPSBjYW5ub3RIYXZlQVVzZXJuYW1lUGFzc3dvcmRQb3J0O1xyXG5cclxubW9kdWxlLmV4cG9ydHMuc2VyaWFsaXplSW50ZWdlciA9IGZ1bmN0aW9uIChpbnRlZ2VyKSB7XHJcbiAgcmV0dXJuIFN0cmluZyhpbnRlZ2VyKTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzLnBhcnNlVVJMID0gZnVuY3Rpb24gKGlucHV0LCBvcHRpb25zKSB7XHJcbiAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgb3B0aW9ucyA9IHt9O1xyXG4gIH1cclxuXHJcbiAgLy8gV2UgZG9uJ3QgaGFuZGxlIGJsb2JzLCBzbyB0aGlzIGp1c3QgZGVsZWdhdGVzOlxyXG4gIHJldHVybiBtb2R1bGUuZXhwb3J0cy5iYXNpY1VSTFBhcnNlKGlucHV0LCB7IGJhc2VVUkw6IG9wdGlvbnMuYmFzZVVSTCwgZW5jb2RpbmdPdmVycmlkZTogb3B0aW9ucy5lbmNvZGluZ092ZXJyaWRlIH0pO1xyXG59O1xyXG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuY29uc3QgdXNtID0gcmVxdWlyZShcIi4vdXJsLXN0YXRlLW1hY2hpbmVcIik7XG5cbmV4cG9ydHMuaW1wbGVtZW50YXRpb24gPSBjbGFzcyBVUkxJbXBsIHtcbiAgY29uc3RydWN0b3IoY29uc3RydWN0b3JBcmdzKSB7XG4gICAgY29uc3QgdXJsID0gY29uc3RydWN0b3JBcmdzWzBdO1xuICAgIGNvbnN0IGJhc2UgPSBjb25zdHJ1Y3RvckFyZ3NbMV07XG5cbiAgICBsZXQgcGFyc2VkQmFzZSA9IG51bGw7XG4gICAgaWYgKGJhc2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFyc2VkQmFzZSA9IHVzbS5iYXNpY1VSTFBhcnNlKGJhc2UpO1xuICAgICAgaWYgKHBhcnNlZEJhc2UgPT09IFwiZmFpbHVyZVwiKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGJhc2UgVVJMXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHBhcnNlZFVSTCA9IHVzbS5iYXNpY1VSTFBhcnNlKHVybCwgeyBiYXNlVVJMOiBwYXJzZWRCYXNlIH0pO1xuICAgIGlmIChwYXJzZWRVUkwgPT09IFwiZmFpbHVyZVwiKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBVUkxcIik7XG4gICAgfVxuXG4gICAgdGhpcy5fdXJsID0gcGFyc2VkVVJMO1xuXG4gICAgLy8gVE9ETzogcXVlcnkgc3R1ZmZcbiAgfVxuXG4gIGdldCBocmVmKCkge1xuICAgIHJldHVybiB1c20uc2VyaWFsaXplVVJMKHRoaXMuX3VybCk7XG4gIH1cblxuICBzZXQgaHJlZih2KSB7XG4gICAgY29uc3QgcGFyc2VkVVJMID0gdXNtLmJhc2ljVVJMUGFyc2Uodik7XG4gICAgaWYgKHBhcnNlZFVSTCA9PT0gXCJmYWlsdXJlXCIpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIFVSTFwiKTtcbiAgICB9XG5cbiAgICB0aGlzLl91cmwgPSBwYXJzZWRVUkw7XG4gIH1cblxuICBnZXQgb3JpZ2luKCkge1xuICAgIHJldHVybiB1c20uc2VyaWFsaXplVVJMT3JpZ2luKHRoaXMuX3VybCk7XG4gIH1cblxuICBnZXQgcHJvdG9jb2woKSB7XG4gICAgcmV0dXJuIHRoaXMuX3VybC5zY2hlbWUgKyBcIjpcIjtcbiAgfVxuXG4gIHNldCBwcm90b2NvbCh2KSB7XG4gICAgdXNtLmJhc2ljVVJMUGFyc2UodiArIFwiOlwiLCB7IHVybDogdGhpcy5fdXJsLCBzdGF0ZU92ZXJyaWRlOiBcInNjaGVtZSBzdGFydFwiIH0pO1xuICB9XG5cbiAgZ2V0IHVzZXJuYW1lKCkge1xuICAgIHJldHVybiB0aGlzLl91cmwudXNlcm5hbWU7XG4gIH1cblxuICBzZXQgdXNlcm5hbWUodikge1xuICAgIGlmICh1c20uY2Fubm90SGF2ZUFVc2VybmFtZVBhc3N3b3JkUG9ydCh0aGlzLl91cmwpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdXNtLnNldFRoZVVzZXJuYW1lKHRoaXMuX3VybCwgdik7XG4gIH1cblxuICBnZXQgcGFzc3dvcmQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3VybC5wYXNzd29yZDtcbiAgfVxuXG4gIHNldCBwYXNzd29yZCh2KSB7XG4gICAgaWYgKHVzbS5jYW5ub3RIYXZlQVVzZXJuYW1lUGFzc3dvcmRQb3J0KHRoaXMuX3VybCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB1c20uc2V0VGhlUGFzc3dvcmQodGhpcy5fdXJsLCB2KTtcbiAgfVxuXG4gIGdldCBob3N0KCkge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuX3VybDtcblxuICAgIGlmICh1cmwuaG9zdCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgaWYgKHVybC5wb3J0ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gdXNtLnNlcmlhbGl6ZUhvc3QodXJsLmhvc3QpO1xuICAgIH1cblxuICAgIHJldHVybiB1c20uc2VyaWFsaXplSG9zdCh1cmwuaG9zdCkgKyBcIjpcIiArIHVzbS5zZXJpYWxpemVJbnRlZ2VyKHVybC5wb3J0KTtcbiAgfVxuXG4gIHNldCBob3N0KHYpIHtcbiAgICBpZiAodGhpcy5fdXJsLmNhbm5vdEJlQUJhc2VVUkwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB1c20uYmFzaWNVUkxQYXJzZSh2LCB7IHVybDogdGhpcy5fdXJsLCBzdGF0ZU92ZXJyaWRlOiBcImhvc3RcIiB9KTtcbiAgfVxuXG4gIGdldCBob3N0bmFtZSgpIHtcbiAgICBpZiAodGhpcy5fdXJsLmhvc3QgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHJldHVybiB1c20uc2VyaWFsaXplSG9zdCh0aGlzLl91cmwuaG9zdCk7XG4gIH1cblxuICBzZXQgaG9zdG5hbWUodikge1xuICAgIGlmICh0aGlzLl91cmwuY2Fubm90QmVBQmFzZVVSTCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHVzbS5iYXNpY1VSTFBhcnNlKHYsIHsgdXJsOiB0aGlzLl91cmwsIHN0YXRlT3ZlcnJpZGU6IFwiaG9zdG5hbWVcIiB9KTtcbiAgfVxuXG4gIGdldCBwb3J0KCkge1xuICAgIGlmICh0aGlzLl91cmwucG9ydCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVzbS5zZXJpYWxpemVJbnRlZ2VyKHRoaXMuX3VybC5wb3J0KTtcbiAgfVxuXG4gIHNldCBwb3J0KHYpIHtcbiAgICBpZiAodXNtLmNhbm5vdEhhdmVBVXNlcm5hbWVQYXNzd29yZFBvcnQodGhpcy5fdXJsKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh2ID09PSBcIlwiKSB7XG4gICAgICB0aGlzLl91cmwucG9ydCA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVzbS5iYXNpY1VSTFBhcnNlKHYsIHsgdXJsOiB0aGlzLl91cmwsIHN0YXRlT3ZlcnJpZGU6IFwicG9ydFwiIH0pO1xuICAgIH1cbiAgfVxuXG4gIGdldCBwYXRobmFtZSgpIHtcbiAgICBpZiAodGhpcy5fdXJsLmNhbm5vdEJlQUJhc2VVUkwpIHtcbiAgICAgIHJldHVybiB0aGlzLl91cmwucGF0aFswXTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fdXJsLnBhdGgubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICByZXR1cm4gXCIvXCIgKyB0aGlzLl91cmwucGF0aC5qb2luKFwiL1wiKTtcbiAgfVxuXG4gIHNldCBwYXRobmFtZSh2KSB7XG4gICAgaWYgKHRoaXMuX3VybC5jYW5ub3RCZUFCYXNlVVJMKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fdXJsLnBhdGggPSBbXTtcbiAgICB1c20uYmFzaWNVUkxQYXJzZSh2LCB7IHVybDogdGhpcy5fdXJsLCBzdGF0ZU92ZXJyaWRlOiBcInBhdGggc3RhcnRcIiB9KTtcbiAgfVxuXG4gIGdldCBzZWFyY2goKSB7XG4gICAgaWYgKHRoaXMuX3VybC5xdWVyeSA9PT0gbnVsbCB8fCB0aGlzLl91cmwucXVlcnkgPT09IFwiXCIpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHJldHVybiBcIj9cIiArIHRoaXMuX3VybC5xdWVyeTtcbiAgfVxuXG4gIHNldCBzZWFyY2godikge1xuICAgIC8vIFRPRE86IHF1ZXJ5IHN0dWZmXG5cbiAgICBjb25zdCB1cmwgPSB0aGlzLl91cmw7XG5cbiAgICBpZiAodiA9PT0gXCJcIikge1xuICAgICAgdXJsLnF1ZXJ5ID0gbnVsbDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpbnB1dCA9IHZbMF0gPT09IFwiP1wiID8gdi5zdWJzdHJpbmcoMSkgOiB2O1xuICAgIHVybC5xdWVyeSA9IFwiXCI7XG4gICAgdXNtLmJhc2ljVVJMUGFyc2UoaW5wdXQsIHsgdXJsLCBzdGF0ZU92ZXJyaWRlOiBcInF1ZXJ5XCIgfSk7XG4gIH1cblxuICBnZXQgaGFzaCgpIHtcbiAgICBpZiAodGhpcy5fdXJsLmZyYWdtZW50ID09PSBudWxsIHx8IHRoaXMuX3VybC5mcmFnbWVudCA9PT0gXCJcIikge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIFwiI1wiICsgdGhpcy5fdXJsLmZyYWdtZW50O1xuICB9XG5cbiAgc2V0IGhhc2godikge1xuICAgIGlmICh2ID09PSBcIlwiKSB7XG4gICAgICB0aGlzLl91cmwuZnJhZ21lbnQgPSBudWxsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGlucHV0ID0gdlswXSA9PT0gXCIjXCIgPyB2LnN1YnN0cmluZygxKSA6IHY7XG4gICAgdGhpcy5fdXJsLmZyYWdtZW50ID0gXCJcIjtcbiAgICB1c20uYmFzaWNVUkxQYXJzZShpbnB1dCwgeyB1cmw6IHRoaXMuX3VybCwgc3RhdGVPdmVycmlkZTogXCJmcmFnbWVudFwiIH0pO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB0aGlzLmhyZWY7XG4gIH1cbn07XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLy9VUkwtaW1wbC5qc1wiKTtcblxuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIFVSTCh1cmwpIHtcbiAgaWYgKCF0aGlzIHx8IHRoaXNbaW1wbF0gfHwgISh0aGlzIGluc3RhbmNlb2YgVVJMKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gY29uc3RydWN0ICdVUkwnOiBQbGVhc2UgdXNlIHRoZSAnbmV3JyBvcGVyYXRvciwgdGhpcyBET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi5cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ1VSTCc6IDEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAyOyArK2kpIHtcbiAgICBhcmdzW2ldID0gYXJndW1lbnRzW2ldO1xuICB9XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcIlVTVlN0cmluZ1wiXShhcmdzWzBdKTtcbiAgaWYgKGFyZ3NbMV0gIT09IHVuZGVmaW5lZCkge1xuICBhcmdzWzFdID0gY29udmVyc2lvbnNbXCJVU1ZTdHJpbmdcIl0oYXJnc1sxXSk7XG4gIH1cblxuICBtb2R1bGUuZXhwb3J0cy5zZXR1cCh0aGlzLCBhcmdzKTtcbn1cblxuVVJMLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04oKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAwOyArK2kpIHtcbiAgICBhcmdzW2ldID0gYXJndW1lbnRzW2ldO1xuICB9XG4gIHJldHVybiB0aGlzW2ltcGxdLnRvSlNPTi5hcHBseSh0aGlzW2ltcGxdLCBhcmdzKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVVJMLnByb3RvdHlwZSwgXCJocmVmXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmhyZWY7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiVVNWU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0uaHJlZiA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblVSTC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIHJldHVybiB0aGlzLmhyZWY7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVVJMLnByb3RvdHlwZSwgXCJvcmlnaW5cIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ub3JpZ2luO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVVJMLnByb3RvdHlwZSwgXCJwcm90b2NvbFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5wcm90b2NvbDtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJVU1ZTdHJpbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS5wcm90b2NvbCA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShVUkwucHJvdG90eXBlLCBcInVzZXJuYW1lXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnVzZXJuYW1lO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIlVTVlN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLnVzZXJuYW1lID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFVSTC5wcm90b3R5cGUsIFwicGFzc3dvcmRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ucGFzc3dvcmQ7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiVVNWU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0ucGFzc3dvcmQgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVVJMLnByb3RvdHlwZSwgXCJob3N0XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmhvc3Q7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiVVNWU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0uaG9zdCA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShVUkwucHJvdG90eXBlLCBcImhvc3RuYW1lXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmhvc3RuYW1lO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIlVTVlN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLmhvc3RuYW1lID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFVSTC5wcm90b3R5cGUsIFwicG9ydFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5wb3J0O1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIlVTVlN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLnBvcnQgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVVJMLnByb3RvdHlwZSwgXCJwYXRobmFtZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5wYXRobmFtZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJVU1ZTdHJpbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS5wYXRobmFtZSA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShVUkwucHJvdG90eXBlLCBcInNlYXJjaFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5zZWFyY2g7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiVVNWU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0uc2VhcmNoID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFVSTC5wcm90b3R5cGUsIFwiaGFzaFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5oYXNoO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIlVTVlN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLmhhc2ggPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpcyhvYmopIHtcbiAgICByZXR1cm4gISFvYmogJiYgb2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbjtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShVUkwucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IFVSTCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IFVSTDogVVJMIH0sXG4gICAgV29ya2VyOiB7IFVSTDogVVJMIH1cbiAgfVxufTtcblxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5VUkwgPSByZXF1aXJlKFwiLi9VUkxcIikuaW50ZXJmYWNlO1xuZXhwb3J0cy5zZXJpYWxpemVVUkwgPSByZXF1aXJlKFwiLi91cmwtc3RhdGUtbWFjaGluZVwiKS5zZXJpYWxpemVVUkw7XG5leHBvcnRzLnNlcmlhbGl6ZVVSTE9yaWdpbiA9IHJlcXVpcmUoXCIuL3VybC1zdGF0ZS1tYWNoaW5lXCIpLnNlcmlhbGl6ZVVSTE9yaWdpbjtcbmV4cG9ydHMuYmFzaWNVUkxQYXJzZSA9IHJlcXVpcmUoXCIuL3VybC1zdGF0ZS1tYWNoaW5lXCIpLmJhc2ljVVJMUGFyc2U7XG5leHBvcnRzLnNldFRoZVVzZXJuYW1lID0gcmVxdWlyZShcIi4vdXJsLXN0YXRlLW1hY2hpbmVcIikuc2V0VGhlVXNlcm5hbWU7XG5leHBvcnRzLnNldFRoZVBhc3N3b3JkID0gcmVxdWlyZShcIi4vdXJsLXN0YXRlLW1hY2hpbmVcIikuc2V0VGhlUGFzc3dvcmQ7XG5leHBvcnRzLnNlcmlhbGl6ZUhvc3QgPSByZXF1aXJlKFwiLi91cmwtc3RhdGUtbWFjaGluZVwiKS5zZXJpYWxpemVIb3N0O1xuZXhwb3J0cy5zZXJpYWxpemVJbnRlZ2VyID0gcmVxdWlyZShcIi4vdXJsLXN0YXRlLW1hY2hpbmVcIikuc2VyaWFsaXplSW50ZWdlcjtcbmV4cG9ydHMucGFyc2VVUkwgPSByZXF1aXJlKFwiLi91cmwtc3RhdGUtbWFjaGluZVwiKS5wYXJzZVVSTDtcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5mdW5jdGlvbiBfaW50ZXJvcERlZmF1bHQgKGV4KSB7IHJldHVybiAoZXggJiYgKHR5cGVvZiBleCA9PT0gJ29iamVjdCcpICYmICdkZWZhdWx0JyBpbiBleCkgPyBleFsnZGVmYXVsdCddIDogZXg7IH1cblxudmFyIFN0cmVhbSA9IF9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKCdzdHJlYW0nKSk7XG52YXIgaHR0cCA9IF9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKCdodHRwJykpO1xudmFyIFVybCA9IF9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKCd1cmwnKSk7XG52YXIgd2hhdHdnVXJsID0gX2ludGVyb3BEZWZhdWx0KHJlcXVpcmUoJ3doYXR3Zy11cmwnKSk7XG52YXIgaHR0cHMgPSBfaW50ZXJvcERlZmF1bHQocmVxdWlyZSgnaHR0cHMnKSk7XG52YXIgemxpYiA9IF9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKCd6bGliJykpO1xuXG4vLyBCYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vdG1wdmFyL2pzZG9tL2Jsb2IvYWE4NWIyYWJmMDc3NjZmZjdiZjVjMWY2ZGFhZmIzNzI2ZjJmMmRiNS9saWIvanNkb20vbGl2aW5nL2Jsb2IuanNcblxuLy8gZml4IGZvciBcIlJlYWRhYmxlXCIgaXNuJ3QgYSBuYW1lZCBleHBvcnQgaXNzdWVcbmNvbnN0IFJlYWRhYmxlID0gU3RyZWFtLlJlYWRhYmxlO1xuXG5jb25zdCBCVUZGRVIgPSBTeW1ib2woJ2J1ZmZlcicpO1xuY29uc3QgVFlQRSA9IFN5bWJvbCgndHlwZScpO1xuXG5jbGFzcyBCbG9iIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpc1tUWVBFXSA9ICcnO1xuXG5cdFx0Y29uc3QgYmxvYlBhcnRzID0gYXJndW1lbnRzWzBdO1xuXHRcdGNvbnN0IG9wdGlvbnMgPSBhcmd1bWVudHNbMV07XG5cblx0XHRjb25zdCBidWZmZXJzID0gW107XG5cdFx0bGV0IHNpemUgPSAwO1xuXG5cdFx0aWYgKGJsb2JQYXJ0cykge1xuXHRcdFx0Y29uc3QgYSA9IGJsb2JQYXJ0cztcblx0XHRcdGNvbnN0IGxlbmd0aCA9IE51bWJlcihhLmxlbmd0aCk7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGNvbnN0IGVsZW1lbnQgPSBhW2ldO1xuXHRcdFx0XHRsZXQgYnVmZmVyO1xuXHRcdFx0XHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEJ1ZmZlcikge1xuXHRcdFx0XHRcdGJ1ZmZlciA9IGVsZW1lbnQ7XG5cdFx0XHRcdH0gZWxzZSBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KGVsZW1lbnQpKSB7XG5cdFx0XHRcdFx0YnVmZmVyID0gQnVmZmVyLmZyb20oZWxlbWVudC5idWZmZXIsIGVsZW1lbnQuYnl0ZU9mZnNldCwgZWxlbWVudC5ieXRlTGVuZ3RoKTtcblx0XHRcdFx0fSBlbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcblx0XHRcdFx0XHRidWZmZXIgPSBCdWZmZXIuZnJvbShlbGVtZW50KTtcblx0XHRcdFx0fSBlbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgQmxvYikge1xuXHRcdFx0XHRcdGJ1ZmZlciA9IGVsZW1lbnRbQlVGRkVSXTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRidWZmZXIgPSBCdWZmZXIuZnJvbSh0eXBlb2YgZWxlbWVudCA9PT0gJ3N0cmluZycgPyBlbGVtZW50IDogU3RyaW5nKGVsZW1lbnQpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRzaXplICs9IGJ1ZmZlci5sZW5ndGg7XG5cdFx0XHRcdGJ1ZmZlcnMucHVzaChidWZmZXIpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXNbQlVGRkVSXSA9IEJ1ZmZlci5jb25jYXQoYnVmZmVycyk7XG5cblx0XHRsZXQgdHlwZSA9IG9wdGlvbnMgJiYgb3B0aW9ucy50eXBlICE9PSB1bmRlZmluZWQgJiYgU3RyaW5nKG9wdGlvbnMudHlwZSkudG9Mb3dlckNhc2UoKTtcblx0XHRpZiAodHlwZSAmJiAhL1teXFx1MDAyMC1cXHUwMDdFXS8udGVzdCh0eXBlKSkge1xuXHRcdFx0dGhpc1tUWVBFXSA9IHR5cGU7XG5cdFx0fVxuXHR9XG5cdGdldCBzaXplKCkge1xuXHRcdHJldHVybiB0aGlzW0JVRkZFUl0ubGVuZ3RoO1xuXHR9XG5cdGdldCB0eXBlKCkge1xuXHRcdHJldHVybiB0aGlzW1RZUEVdO1xuXHR9XG5cdHRleHQoKSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzW0JVRkZFUl0udG9TdHJpbmcoKSk7XG5cdH1cblx0YXJyYXlCdWZmZXIoKSB7XG5cdFx0Y29uc3QgYnVmID0gdGhpc1tCVUZGRVJdO1xuXHRcdGNvbnN0IGFiID0gYnVmLmJ1ZmZlci5zbGljZShidWYuYnl0ZU9mZnNldCwgYnVmLmJ5dGVPZmZzZXQgKyBidWYuYnl0ZUxlbmd0aCk7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShhYik7XG5cdH1cblx0c3RyZWFtKCkge1xuXHRcdGNvbnN0IHJlYWRhYmxlID0gbmV3IFJlYWRhYmxlKCk7XG5cdFx0cmVhZGFibGUuX3JlYWQgPSBmdW5jdGlvbiAoKSB7fTtcblx0XHRyZWFkYWJsZS5wdXNoKHRoaXNbQlVGRkVSXSk7XG5cdFx0cmVhZGFibGUucHVzaChudWxsKTtcblx0XHRyZXR1cm4gcmVhZGFibGU7XG5cdH1cblx0dG9TdHJpbmcoKSB7XG5cdFx0cmV0dXJuICdbb2JqZWN0IEJsb2JdJztcblx0fVxuXHRzbGljZSgpIHtcblx0XHRjb25zdCBzaXplID0gdGhpcy5zaXplO1xuXG5cdFx0Y29uc3Qgc3RhcnQgPSBhcmd1bWVudHNbMF07XG5cdFx0Y29uc3QgZW5kID0gYXJndW1lbnRzWzFdO1xuXHRcdGxldCByZWxhdGl2ZVN0YXJ0LCByZWxhdGl2ZUVuZDtcblx0XHRpZiAoc3RhcnQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmVsYXRpdmVTdGFydCA9IDA7XG5cdFx0fSBlbHNlIGlmIChzdGFydCA8IDApIHtcblx0XHRcdHJlbGF0aXZlU3RhcnQgPSBNYXRoLm1heChzaXplICsgc3RhcnQsIDApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZWxhdGl2ZVN0YXJ0ID0gTWF0aC5taW4oc3RhcnQsIHNpemUpO1xuXHRcdH1cblx0XHRpZiAoZW5kID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJlbGF0aXZlRW5kID0gc2l6ZTtcblx0XHR9IGVsc2UgaWYgKGVuZCA8IDApIHtcblx0XHRcdHJlbGF0aXZlRW5kID0gTWF0aC5tYXgoc2l6ZSArIGVuZCwgMCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJlbGF0aXZlRW5kID0gTWF0aC5taW4oZW5kLCBzaXplKTtcblx0XHR9XG5cdFx0Y29uc3Qgc3BhbiA9IE1hdGgubWF4KHJlbGF0aXZlRW5kIC0gcmVsYXRpdmVTdGFydCwgMCk7XG5cblx0XHRjb25zdCBidWZmZXIgPSB0aGlzW0JVRkZFUl07XG5cdFx0Y29uc3Qgc2xpY2VkQnVmZmVyID0gYnVmZmVyLnNsaWNlKHJlbGF0aXZlU3RhcnQsIHJlbGF0aXZlU3RhcnQgKyBzcGFuKTtcblx0XHRjb25zdCBibG9iID0gbmV3IEJsb2IoW10sIHsgdHlwZTogYXJndW1lbnRzWzJdIH0pO1xuXHRcdGJsb2JbQlVGRkVSXSA9IHNsaWNlZEJ1ZmZlcjtcblx0XHRyZXR1cm4gYmxvYjtcblx0fVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbG9iLnByb3RvdHlwZSwge1xuXHRzaXplOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0dHlwZTogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG5cdHNsaWNlOiB7IGVudW1lcmFibGU6IHRydWUgfVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShCbG9iLnByb3RvdHlwZSwgU3ltYm9sLnRvU3RyaW5nVGFnLCB7XG5cdHZhbHVlOiAnQmxvYicsXG5cdHdyaXRhYmxlOiBmYWxzZSxcblx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbi8qKlxuICogZmV0Y2gtZXJyb3IuanNcbiAqXG4gKiBGZXRjaEVycm9yIGludGVyZmFjZSBmb3Igb3BlcmF0aW9uYWwgZXJyb3JzXG4gKi9cblxuLyoqXG4gKiBDcmVhdGUgRmV0Y2hFcnJvciBpbnN0YW5jZVxuICpcbiAqIEBwYXJhbSAgIFN0cmluZyAgICAgIG1lc3NhZ2UgICAgICBFcnJvciBtZXNzYWdlIGZvciBodW1hblxuICogQHBhcmFtICAgU3RyaW5nICAgICAgdHlwZSAgICAgICAgIEVycm9yIHR5cGUgZm9yIG1hY2hpbmVcbiAqIEBwYXJhbSAgIFN0cmluZyAgICAgIHN5c3RlbUVycm9yICBGb3IgTm9kZS5qcyBzeXN0ZW0gZXJyb3JcbiAqIEByZXR1cm4gIEZldGNoRXJyb3JcbiAqL1xuZnVuY3Rpb24gRmV0Y2hFcnJvcihtZXNzYWdlLCB0eXBlLCBzeXN0ZW1FcnJvcikge1xuICBFcnJvci5jYWxsKHRoaXMsIG1lc3NhZ2UpO1xuXG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gIHRoaXMudHlwZSA9IHR5cGU7XG5cbiAgLy8gd2hlbiBlcnIudHlwZSBpcyBgc3lzdGVtYCwgZXJyLmNvZGUgY29udGFpbnMgc3lzdGVtIGVycm9yIGNvZGVcbiAgaWYgKHN5c3RlbUVycm9yKSB7XG4gICAgdGhpcy5jb2RlID0gdGhpcy5lcnJubyA9IHN5c3RlbUVycm9yLmNvZGU7XG4gIH1cblxuICAvLyBoaWRlIGN1c3RvbSBlcnJvciBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGZyb20gZW5kLXVzZXJzXG4gIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xufVxuXG5GZXRjaEVycm9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTtcbkZldGNoRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRmV0Y2hFcnJvcjtcbkZldGNoRXJyb3IucHJvdG90eXBlLm5hbWUgPSAnRmV0Y2hFcnJvcic7XG5cbmxldCBjb252ZXJ0O1xudHJ5IHtcblx0Y29udmVydCA9IHJlcXVpcmUoJ2VuY29kaW5nJykuY29udmVydDtcbn0gY2F0Y2ggKGUpIHt9XG5cbmNvbnN0IElOVEVSTkFMUyA9IFN5bWJvbCgnQm9keSBpbnRlcm5hbHMnKTtcblxuLy8gZml4IGFuIGlzc3VlIHdoZXJlIFwiUGFzc1Rocm91Z2hcIiBpc24ndCBhIG5hbWVkIGV4cG9ydCBmb3Igbm9kZSA8MTBcbmNvbnN0IFBhc3NUaHJvdWdoID0gU3RyZWFtLlBhc3NUaHJvdWdoO1xuXG4vKipcbiAqIEJvZHkgbWl4aW5cbiAqXG4gKiBSZWY6IGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNib2R5XG4gKlxuICogQHBhcmFtICAgU3RyZWFtICBib2R5ICBSZWFkYWJsZSBzdHJlYW1cbiAqIEBwYXJhbSAgIE9iamVjdCAgb3B0cyAgUmVzcG9uc2Ugb3B0aW9uc1xuICogQHJldHVybiAgVm9pZFxuICovXG5mdW5jdGlvbiBCb2R5KGJvZHkpIHtcblx0dmFyIF90aGlzID0gdGhpcztcblxuXHR2YXIgX3JlZiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge30sXG5cdCAgICBfcmVmJHNpemUgPSBfcmVmLnNpemU7XG5cblx0bGV0IHNpemUgPSBfcmVmJHNpemUgPT09IHVuZGVmaW5lZCA/IDAgOiBfcmVmJHNpemU7XG5cdHZhciBfcmVmJHRpbWVvdXQgPSBfcmVmLnRpbWVvdXQ7XG5cdGxldCB0aW1lb3V0ID0gX3JlZiR0aW1lb3V0ID09PSB1bmRlZmluZWQgPyAwIDogX3JlZiR0aW1lb3V0O1xuXG5cdGlmIChib2R5ID09IG51bGwpIHtcblx0XHQvLyBib2R5IGlzIHVuZGVmaW5lZCBvciBudWxsXG5cdFx0Ym9keSA9IG51bGw7XG5cdH0gZWxzZSBpZiAoaXNVUkxTZWFyY2hQYXJhbXMoYm9keSkpIHtcblx0XHQvLyBib2R5IGlzIGEgVVJMU2VhcmNoUGFyYW1zXG5cdFx0Ym9keSA9IEJ1ZmZlci5mcm9tKGJvZHkudG9TdHJpbmcoKSk7XG5cdH0gZWxzZSBpZiAoaXNCbG9iKGJvZHkpKSA7IGVsc2UgaWYgKEJ1ZmZlci5pc0J1ZmZlcihib2R5KSkgOyBlbHNlIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYm9keSkgPT09ICdbb2JqZWN0IEFycmF5QnVmZmVyXScpIHtcblx0XHQvLyBib2R5IGlzIEFycmF5QnVmZmVyXG5cdFx0Ym9keSA9IEJ1ZmZlci5mcm9tKGJvZHkpO1xuXHR9IGVsc2UgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhib2R5KSkge1xuXHRcdC8vIGJvZHkgaXMgQXJyYXlCdWZmZXJWaWV3XG5cdFx0Ym9keSA9IEJ1ZmZlci5mcm9tKGJvZHkuYnVmZmVyLCBib2R5LmJ5dGVPZmZzZXQsIGJvZHkuYnl0ZUxlbmd0aCk7XG5cdH0gZWxzZSBpZiAoYm9keSBpbnN0YW5jZW9mIFN0cmVhbSkgOyBlbHNlIHtcblx0XHQvLyBub25lIG9mIHRoZSBhYm92ZVxuXHRcdC8vIGNvZXJjZSB0byBzdHJpbmcgdGhlbiBidWZmZXJcblx0XHRib2R5ID0gQnVmZmVyLmZyb20oU3RyaW5nKGJvZHkpKTtcblx0fVxuXHR0aGlzW0lOVEVSTkFMU10gPSB7XG5cdFx0Ym9keSxcblx0XHRkaXN0dXJiZWQ6IGZhbHNlLFxuXHRcdGVycm9yOiBudWxsXG5cdH07XG5cdHRoaXMuc2l6ZSA9IHNpemU7XG5cdHRoaXMudGltZW91dCA9IHRpbWVvdXQ7XG5cblx0aWYgKGJvZHkgaW5zdGFuY2VvZiBTdHJlYW0pIHtcblx0XHRib2R5Lm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpIHtcblx0XHRcdGNvbnN0IGVycm9yID0gZXJyLm5hbWUgPT09ICdBYm9ydEVycm9yJyA/IGVyciA6IG5ldyBGZXRjaEVycm9yKGBJbnZhbGlkIHJlc3BvbnNlIGJvZHkgd2hpbGUgdHJ5aW5nIHRvIGZldGNoICR7X3RoaXMudXJsfTogJHtlcnIubWVzc2FnZX1gLCAnc3lzdGVtJywgZXJyKTtcblx0XHRcdF90aGlzW0lOVEVSTkFMU10uZXJyb3IgPSBlcnJvcjtcblx0XHR9KTtcblx0fVxufVxuXG5Cb2R5LnByb3RvdHlwZSA9IHtcblx0Z2V0IGJvZHkoKSB7XG5cdFx0cmV0dXJuIHRoaXNbSU5URVJOQUxTXS5ib2R5O1xuXHR9LFxuXG5cdGdldCBib2R5VXNlZCgpIHtcblx0XHRyZXR1cm4gdGhpc1tJTlRFUk5BTFNdLmRpc3R1cmJlZDtcblx0fSxcblxuXHQvKipcbiAgKiBEZWNvZGUgcmVzcG9uc2UgYXMgQXJyYXlCdWZmZXJcbiAgKlxuICAqIEByZXR1cm4gIFByb21pc2VcbiAgKi9cblx0YXJyYXlCdWZmZXIoKSB7XG5cdFx0cmV0dXJuIGNvbnN1bWVCb2R5LmNhbGwodGhpcykudGhlbihmdW5jdGlvbiAoYnVmKSB7XG5cdFx0XHRyZXR1cm4gYnVmLmJ1ZmZlci5zbGljZShidWYuYnl0ZU9mZnNldCwgYnVmLmJ5dGVPZmZzZXQgKyBidWYuYnl0ZUxlbmd0aCk7XG5cdFx0fSk7XG5cdH0sXG5cblx0LyoqXG4gICogUmV0dXJuIHJhdyByZXNwb25zZSBhcyBCbG9iXG4gICpcbiAgKiBAcmV0dXJuIFByb21pc2VcbiAgKi9cblx0YmxvYigpIHtcblx0XHRsZXQgY3QgPSB0aGlzLmhlYWRlcnMgJiYgdGhpcy5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJykgfHwgJyc7XG5cdFx0cmV0dXJuIGNvbnN1bWVCb2R5LmNhbGwodGhpcykudGhlbihmdW5jdGlvbiAoYnVmKSB7XG5cdFx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbihcblx0XHRcdC8vIFByZXZlbnQgY29weWluZ1xuXHRcdFx0bmV3IEJsb2IoW10sIHtcblx0XHRcdFx0dHlwZTogY3QudG9Mb3dlckNhc2UoKVxuXHRcdFx0fSksIHtcblx0XHRcdFx0W0JVRkZFUl06IGJ1ZlxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH0sXG5cblx0LyoqXG4gICogRGVjb2RlIHJlc3BvbnNlIGFzIGpzb25cbiAgKlxuICAqIEByZXR1cm4gIFByb21pc2VcbiAgKi9cblx0anNvbigpIHtcblx0XHR2YXIgX3RoaXMyID0gdGhpcztcblxuXHRcdHJldHVybiBjb25zdW1lQm9keS5jYWxsKHRoaXMpLnRoZW4oZnVuY3Rpb24gKGJ1ZmZlcikge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cmV0dXJuIEpTT04ucGFyc2UoYnVmZmVyLnRvU3RyaW5nKCkpO1xuXHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdHJldHVybiBCb2R5LlByb21pc2UucmVqZWN0KG5ldyBGZXRjaEVycm9yKGBpbnZhbGlkIGpzb24gcmVzcG9uc2UgYm9keSBhdCAke190aGlzMi51cmx9IHJlYXNvbjogJHtlcnIubWVzc2FnZX1gLCAnaW52YWxpZC1qc29uJykpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9LFxuXG5cdC8qKlxuICAqIERlY29kZSByZXNwb25zZSBhcyB0ZXh0XG4gICpcbiAgKiBAcmV0dXJuICBQcm9taXNlXG4gICovXG5cdHRleHQoKSB7XG5cdFx0cmV0dXJuIGNvbnN1bWVCb2R5LmNhbGwodGhpcykudGhlbihmdW5jdGlvbiAoYnVmZmVyKSB7XG5cdFx0XHRyZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7XG5cdFx0fSk7XG5cdH0sXG5cblx0LyoqXG4gICogRGVjb2RlIHJlc3BvbnNlIGFzIGJ1ZmZlciAobm9uLXNwZWMgYXBpKVxuICAqXG4gICogQHJldHVybiAgUHJvbWlzZVxuICAqL1xuXHRidWZmZXIoKSB7XG5cdFx0cmV0dXJuIGNvbnN1bWVCb2R5LmNhbGwodGhpcyk7XG5cdH0sXG5cblx0LyoqXG4gICogRGVjb2RlIHJlc3BvbnNlIGFzIHRleHQsIHdoaWxlIGF1dG9tYXRpY2FsbHkgZGV0ZWN0aW5nIHRoZSBlbmNvZGluZyBhbmRcbiAgKiB0cnlpbmcgdG8gZGVjb2RlIHRvIFVURi04IChub24tc3BlYyBhcGkpXG4gICpcbiAgKiBAcmV0dXJuICBQcm9taXNlXG4gICovXG5cdHRleHRDb252ZXJ0ZWQoKSB7XG5cdFx0dmFyIF90aGlzMyA9IHRoaXM7XG5cblx0XHRyZXR1cm4gY29uc3VtZUJvZHkuY2FsbCh0aGlzKS50aGVuKGZ1bmN0aW9uIChidWZmZXIpIHtcblx0XHRcdHJldHVybiBjb252ZXJ0Qm9keShidWZmZXIsIF90aGlzMy5oZWFkZXJzKTtcblx0XHR9KTtcblx0fVxufTtcblxuLy8gSW4gYnJvd3NlcnMsIGFsbCBwcm9wZXJ0aWVzIGFyZSBlbnVtZXJhYmxlLlxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQm9keS5wcm90b3R5cGUsIHtcblx0Ym9keTogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG5cdGJvZHlVc2VkOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0YXJyYXlCdWZmZXI6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHRibG9iOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0anNvbjogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG5cdHRleHQ6IHsgZW51bWVyYWJsZTogdHJ1ZSB9XG59KTtcblxuQm9keS5taXhJbiA9IGZ1bmN0aW9uIChwcm90bykge1xuXHRmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoQm9keS5wcm90b3R5cGUpKSB7XG5cdFx0Ly8gaXN0YW5idWwgaWdub3JlIGVsc2U6IGZ1dHVyZSBwcm9vZlxuXHRcdGlmICghKG5hbWUgaW4gcHJvdG8pKSB7XG5cdFx0XHRjb25zdCBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihCb2R5LnByb3RvdHlwZSwgbmFtZSk7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG8sIG5hbWUsIGRlc2MpO1xuXHRcdH1cblx0fVxufTtcblxuLyoqXG4gKiBDb25zdW1lIGFuZCBjb252ZXJ0IGFuIGVudGlyZSBCb2R5IHRvIGEgQnVmZmVyLlxuICpcbiAqIFJlZjogaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtYm9keS1jb25zdW1lLWJvZHlcbiAqXG4gKiBAcmV0dXJuICBQcm9taXNlXG4gKi9cbmZ1bmN0aW9uIGNvbnN1bWVCb2R5KCkge1xuXHR2YXIgX3RoaXM0ID0gdGhpcztcblxuXHRpZiAodGhpc1tJTlRFUk5BTFNdLmRpc3R1cmJlZCkge1xuXHRcdHJldHVybiBCb2R5LlByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoYGJvZHkgdXNlZCBhbHJlYWR5IGZvcjogJHt0aGlzLnVybH1gKSk7XG5cdH1cblxuXHR0aGlzW0lOVEVSTkFMU10uZGlzdHVyYmVkID0gdHJ1ZTtcblxuXHRpZiAodGhpc1tJTlRFUk5BTFNdLmVycm9yKSB7XG5cdFx0cmV0dXJuIEJvZHkuUHJvbWlzZS5yZWplY3QodGhpc1tJTlRFUk5BTFNdLmVycm9yKTtcblx0fVxuXG5cdGxldCBib2R5ID0gdGhpcy5ib2R5O1xuXG5cdC8vIGJvZHkgaXMgbnVsbFxuXHRpZiAoYm9keSA9PT0gbnVsbCkge1xuXHRcdHJldHVybiBCb2R5LlByb21pc2UucmVzb2x2ZShCdWZmZXIuYWxsb2MoMCkpO1xuXHR9XG5cblx0Ly8gYm9keSBpcyBibG9iXG5cdGlmIChpc0Jsb2IoYm9keSkpIHtcblx0XHRib2R5ID0gYm9keS5zdHJlYW0oKTtcblx0fVxuXG5cdC8vIGJvZHkgaXMgYnVmZmVyXG5cdGlmIChCdWZmZXIuaXNCdWZmZXIoYm9keSkpIHtcblx0XHRyZXR1cm4gQm9keS5Qcm9taXNlLnJlc29sdmUoYm9keSk7XG5cdH1cblxuXHQvLyBpc3RhbmJ1bCBpZ25vcmUgaWY6IHNob3VsZCBuZXZlciBoYXBwZW5cblx0aWYgKCEoYm9keSBpbnN0YW5jZW9mIFN0cmVhbSkpIHtcblx0XHRyZXR1cm4gQm9keS5Qcm9taXNlLnJlc29sdmUoQnVmZmVyLmFsbG9jKDApKTtcblx0fVxuXG5cdC8vIGJvZHkgaXMgc3RyZWFtXG5cdC8vIGdldCByZWFkeSB0byBhY3R1YWxseSBjb25zdW1lIHRoZSBib2R5XG5cdGxldCBhY2N1bSA9IFtdO1xuXHRsZXQgYWNjdW1CeXRlcyA9IDA7XG5cdGxldCBhYm9ydCA9IGZhbHNlO1xuXG5cdHJldHVybiBuZXcgQm9keS5Qcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcblx0XHRsZXQgcmVzVGltZW91dDtcblxuXHRcdC8vIGFsbG93IHRpbWVvdXQgb24gc2xvdyByZXNwb25zZSBib2R5XG5cdFx0aWYgKF90aGlzNC50aW1lb3V0KSB7XG5cdFx0XHRyZXNUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdGFib3J0ID0gdHJ1ZTtcblx0XHRcdFx0cmVqZWN0KG5ldyBGZXRjaEVycm9yKGBSZXNwb25zZSB0aW1lb3V0IHdoaWxlIHRyeWluZyB0byBmZXRjaCAke190aGlzNC51cmx9IChvdmVyICR7X3RoaXM0LnRpbWVvdXR9bXMpYCwgJ2JvZHktdGltZW91dCcpKTtcblx0XHRcdH0sIF90aGlzNC50aW1lb3V0KTtcblx0XHR9XG5cblx0XHQvLyBoYW5kbGUgc3RyZWFtIGVycm9yc1xuXHRcdGJvZHkub24oJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xuXHRcdFx0aWYgKGVyci5uYW1lID09PSAnQWJvcnRFcnJvcicpIHtcblx0XHRcdFx0Ly8gaWYgdGhlIHJlcXVlc3Qgd2FzIGFib3J0ZWQsIHJlamVjdCB3aXRoIHRoaXMgRXJyb3Jcblx0XHRcdFx0YWJvcnQgPSB0cnVlO1xuXHRcdFx0XHRyZWplY3QoZXJyKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIG90aGVyIGVycm9ycywgc3VjaCBhcyBpbmNvcnJlY3QgY29udGVudC1lbmNvZGluZ1xuXHRcdFx0XHRyZWplY3QobmV3IEZldGNoRXJyb3IoYEludmFsaWQgcmVzcG9uc2UgYm9keSB3aGlsZSB0cnlpbmcgdG8gZmV0Y2ggJHtfdGhpczQudXJsfTogJHtlcnIubWVzc2FnZX1gLCAnc3lzdGVtJywgZXJyKSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRib2R5Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7XG5cdFx0XHRpZiAoYWJvcnQgfHwgY2h1bmsgPT09IG51bGwpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoX3RoaXM0LnNpemUgJiYgYWNjdW1CeXRlcyArIGNodW5rLmxlbmd0aCA+IF90aGlzNC5zaXplKSB7XG5cdFx0XHRcdGFib3J0ID0gdHJ1ZTtcblx0XHRcdFx0cmVqZWN0KG5ldyBGZXRjaEVycm9yKGBjb250ZW50IHNpemUgYXQgJHtfdGhpczQudXJsfSBvdmVyIGxpbWl0OiAke190aGlzNC5zaXplfWAsICdtYXgtc2l6ZScpKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRhY2N1bUJ5dGVzICs9IGNodW5rLmxlbmd0aDtcblx0XHRcdGFjY3VtLnB1c2goY2h1bmspO1xuXHRcdH0pO1xuXG5cdFx0Ym9keS5vbignZW5kJywgZnVuY3Rpb24gKCkge1xuXHRcdFx0aWYgKGFib3J0KSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Y2xlYXJUaW1lb3V0KHJlc1RpbWVvdXQpO1xuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRyZXNvbHZlKEJ1ZmZlci5jb25jYXQoYWNjdW0sIGFjY3VtQnl0ZXMpKTtcblx0XHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0XHQvLyBoYW5kbGUgc3RyZWFtcyB0aGF0IGhhdmUgYWNjdW11bGF0ZWQgdG9vIG11Y2ggZGF0YSAoaXNzdWUgIzQxNClcblx0XHRcdFx0cmVqZWN0KG5ldyBGZXRjaEVycm9yKGBDb3VsZCBub3QgY3JlYXRlIEJ1ZmZlciBmcm9tIHJlc3BvbnNlIGJvZHkgZm9yICR7X3RoaXM0LnVybH06ICR7ZXJyLm1lc3NhZ2V9YCwgJ3N5c3RlbScsIGVycikpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBEZXRlY3QgYnVmZmVyIGVuY29kaW5nIGFuZCBjb252ZXJ0IHRvIHRhcmdldCBlbmNvZGluZ1xuICogcmVmOiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDExL1dELWh0bWw1LTIwMTEwMTEzL3BhcnNpbmcuaHRtbCNkZXRlcm1pbmluZy10aGUtY2hhcmFjdGVyLWVuY29kaW5nXG4gKlxuICogQHBhcmFtICAgQnVmZmVyICBidWZmZXIgICAgSW5jb21pbmcgYnVmZmVyXG4gKiBAcGFyYW0gICBTdHJpbmcgIGVuY29kaW5nICBUYXJnZXQgZW5jb2RpbmdcbiAqIEByZXR1cm4gIFN0cmluZ1xuICovXG5mdW5jdGlvbiBjb252ZXJ0Qm9keShidWZmZXIsIGhlYWRlcnMpIHtcblx0aWYgKHR5cGVvZiBjb252ZXJ0ICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdUaGUgcGFja2FnZSBgZW5jb2RpbmdgIG11c3QgYmUgaW5zdGFsbGVkIHRvIHVzZSB0aGUgdGV4dENvbnZlcnRlZCgpIGZ1bmN0aW9uJyk7XG5cdH1cblxuXHRjb25zdCBjdCA9IGhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKTtcblx0bGV0IGNoYXJzZXQgPSAndXRmLTgnO1xuXHRsZXQgcmVzLCBzdHI7XG5cblx0Ly8gaGVhZGVyXG5cdGlmIChjdCkge1xuXHRcdHJlcyA9IC9jaGFyc2V0PShbXjtdKikvaS5leGVjKGN0KTtcblx0fVxuXG5cdC8vIG5vIGNoYXJzZXQgaW4gY29udGVudCB0eXBlLCBwZWVrIGF0IHJlc3BvbnNlIGJvZHkgZm9yIGF0IG1vc3QgMTAyNCBieXRlc1xuXHRzdHIgPSBidWZmZXIuc2xpY2UoMCwgMTAyNCkudG9TdHJpbmcoKTtcblxuXHQvLyBodG1sNVxuXHRpZiAoIXJlcyAmJiBzdHIpIHtcblx0XHRyZXMgPSAvPG1ldGEuKz9jaGFyc2V0PShbJ1wiXSkoLis/KVxcMS9pLmV4ZWMoc3RyKTtcblx0fVxuXG5cdC8vIGh0bWw0XG5cdGlmICghcmVzICYmIHN0cikge1xuXHRcdHJlcyA9IC88bWV0YVtcXHNdKz9odHRwLWVxdWl2PShbJ1wiXSljb250ZW50LXR5cGVcXDFbXFxzXSs/Y29udGVudD0oWydcIl0pKC4rPylcXDIvaS5leGVjKHN0cik7XG5cdFx0aWYgKCFyZXMpIHtcblx0XHRcdHJlcyA9IC88bWV0YVtcXHNdKz9jb250ZW50PShbJ1wiXSkoLis/KVxcMVtcXHNdKz9odHRwLWVxdWl2PShbJ1wiXSljb250ZW50LXR5cGVcXDMvaS5leGVjKHN0cik7XG5cdFx0XHRpZiAocmVzKSB7XG5cdFx0XHRcdHJlcy5wb3AoKTsgLy8gZHJvcCBsYXN0IHF1b3RlXG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHJlcykge1xuXHRcdFx0cmVzID0gL2NoYXJzZXQ9KC4qKS9pLmV4ZWMocmVzLnBvcCgpKTtcblx0XHR9XG5cdH1cblxuXHQvLyB4bWxcblx0aWYgKCFyZXMgJiYgc3RyKSB7XG5cdFx0cmVzID0gLzxcXD94bWwuKz9lbmNvZGluZz0oWydcIl0pKC4rPylcXDEvaS5leGVjKHN0cik7XG5cdH1cblxuXHQvLyBmb3VuZCBjaGFyc2V0XG5cdGlmIChyZXMpIHtcblx0XHRjaGFyc2V0ID0gcmVzLnBvcCgpO1xuXG5cdFx0Ly8gcHJldmVudCBkZWNvZGUgaXNzdWVzIHdoZW4gc2l0ZXMgdXNlIGluY29ycmVjdCBlbmNvZGluZ1xuXHRcdC8vIHJlZjogaHR0cHM6Ly9oc2l2b25lbi5maS9lbmNvZGluZy1tZW51L1xuXHRcdGlmIChjaGFyc2V0ID09PSAnZ2IyMzEyJyB8fCBjaGFyc2V0ID09PSAnZ2JrJykge1xuXHRcdFx0Y2hhcnNldCA9ICdnYjE4MDMwJztcblx0XHR9XG5cdH1cblxuXHQvLyB0dXJuIHJhdyBidWZmZXJzIGludG8gYSBzaW5nbGUgdXRmLTggYnVmZmVyXG5cdHJldHVybiBjb252ZXJ0KGJ1ZmZlciwgJ1VURi04JywgY2hhcnNldCkudG9TdHJpbmcoKTtcbn1cblxuLyoqXG4gKiBEZXRlY3QgYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0XG4gKiByZWY6IGh0dHBzOi8vZ2l0aHViLmNvbS9iaXRpbm4vbm9kZS1mZXRjaC9pc3N1ZXMvMjk2I2lzc3VlY29tbWVudC0zMDc1OTgxNDNcbiAqXG4gKiBAcGFyYW0gICBPYmplY3QgIG9iaiAgICAgT2JqZWN0IHRvIGRldGVjdCBieSB0eXBlIG9yIGJyYW5kXG4gKiBAcmV0dXJuICBTdHJpbmdcbiAqL1xuZnVuY3Rpb24gaXNVUkxTZWFyY2hQYXJhbXMob2JqKSB7XG5cdC8vIER1Y2stdHlwaW5nIGFzIGEgbmVjZXNzYXJ5IGNvbmRpdGlvbi5cblx0aWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnIHx8IHR5cGVvZiBvYmouYXBwZW5kICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBvYmouZGVsZXRlICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBvYmouZ2V0ICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBvYmouZ2V0QWxsICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBvYmouaGFzICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBvYmouc2V0ICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Ly8gQnJhbmQtY2hlY2tpbmcgYW5kIG1vcmUgZHVjay10eXBpbmcgYXMgb3B0aW9uYWwgY29uZGl0aW9uLlxuXHRyZXR1cm4gb2JqLmNvbnN0cnVjdG9yLm5hbWUgPT09ICdVUkxTZWFyY2hQYXJhbXMnIHx8IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBVUkxTZWFyY2hQYXJhbXNdJyB8fCB0eXBlb2Ygb2JqLnNvcnQgPT09ICdmdW5jdGlvbic7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYG9iamAgaXMgYSBXM0MgYEJsb2JgIG9iamVjdCAod2hpY2ggYEZpbGVgIGluaGVyaXRzIGZyb20pXG4gKiBAcGFyYW0gIHsqfSBvYmpcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzQmxvYihvYmopIHtcblx0cmV0dXJuIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHR5cGVvZiBvYmouYXJyYXlCdWZmZXIgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIG9iai50eXBlID09PSAnc3RyaW5nJyAmJiB0eXBlb2Ygb2JqLnN0cmVhbSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2Ygb2JqLmNvbnN0cnVjdG9yID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBvYmouY29uc3RydWN0b3IubmFtZSA9PT0gJ3N0cmluZycgJiYgL14oQmxvYnxGaWxlKSQvLnRlc3Qob2JqLmNvbnN0cnVjdG9yLm5hbWUpICYmIC9eKEJsb2J8RmlsZSkkLy50ZXN0KG9ialtTeW1ib2wudG9TdHJpbmdUYWddKTtcbn1cblxuLyoqXG4gKiBDbG9uZSBib2R5IGdpdmVuIFJlcy9SZXEgaW5zdGFuY2VcbiAqXG4gKiBAcGFyYW0gICBNaXhlZCAgaW5zdGFuY2UgIFJlc3BvbnNlIG9yIFJlcXVlc3QgaW5zdGFuY2VcbiAqIEByZXR1cm4gIE1peGVkXG4gKi9cbmZ1bmN0aW9uIGNsb25lKGluc3RhbmNlKSB7XG5cdGxldCBwMSwgcDI7XG5cdGxldCBib2R5ID0gaW5zdGFuY2UuYm9keTtcblxuXHQvLyBkb24ndCBhbGxvdyBjbG9uaW5nIGEgdXNlZCBib2R5XG5cdGlmIChpbnN0YW5jZS5ib2R5VXNlZCkge1xuXHRcdHRocm93IG5ldyBFcnJvcignY2Fubm90IGNsb25lIGJvZHkgYWZ0ZXIgaXQgaXMgdXNlZCcpO1xuXHR9XG5cblx0Ly8gY2hlY2sgdGhhdCBib2R5IGlzIGEgc3RyZWFtIGFuZCBub3QgZm9ybS1kYXRhIG9iamVjdFxuXHQvLyBub3RlOiB3ZSBjYW4ndCBjbG9uZSB0aGUgZm9ybS1kYXRhIG9iamVjdCB3aXRob3V0IGhhdmluZyBpdCBhcyBhIGRlcGVuZGVuY3lcblx0aWYgKGJvZHkgaW5zdGFuY2VvZiBTdHJlYW0gJiYgdHlwZW9mIGJvZHkuZ2V0Qm91bmRhcnkgIT09ICdmdW5jdGlvbicpIHtcblx0XHQvLyB0ZWUgaW5zdGFuY2UgYm9keVxuXHRcdHAxID0gbmV3IFBhc3NUaHJvdWdoKCk7XG5cdFx0cDIgPSBuZXcgUGFzc1Rocm91Z2goKTtcblx0XHRib2R5LnBpcGUocDEpO1xuXHRcdGJvZHkucGlwZShwMik7XG5cdFx0Ly8gc2V0IGluc3RhbmNlIGJvZHkgdG8gdGVlZCBib2R5IGFuZCByZXR1cm4gdGhlIG90aGVyIHRlZWQgYm9keVxuXHRcdGluc3RhbmNlW0lOVEVSTkFMU10uYm9keSA9IHAxO1xuXHRcdGJvZHkgPSBwMjtcblx0fVxuXG5cdHJldHVybiBib2R5O1xufVxuXG4vKipcbiAqIFBlcmZvcm1zIHRoZSBvcGVyYXRpb24gXCJleHRyYWN0IGEgYENvbnRlbnQtVHlwZWAgdmFsdWUgZnJvbSB8b2JqZWN0fFwiIGFzXG4gKiBzcGVjaWZpZWQgaW4gdGhlIHNwZWNpZmljYXRpb246XG4gKiBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1ib2R5aW5pdC1leHRyYWN0XG4gKlxuICogVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgaW5zdGFuY2UuYm9keSBpcyBwcmVzZW50LlxuICpcbiAqIEBwYXJhbSAgIE1peGVkICBpbnN0YW5jZSAgQW55IG9wdGlvbnMuYm9keSBpbnB1dFxuICovXG5mdW5jdGlvbiBleHRyYWN0Q29udGVudFR5cGUoYm9keSkge1xuXHRpZiAoYm9keSA9PT0gbnVsbCkge1xuXHRcdC8vIGJvZHkgaXMgbnVsbFxuXHRcdHJldHVybiBudWxsO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJykge1xuXHRcdC8vIGJvZHkgaXMgc3RyaW5nXG5cdFx0cmV0dXJuICd0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLTgnO1xuXHR9IGVsc2UgaWYgKGlzVVJMU2VhcmNoUGFyYW1zKGJvZHkpKSB7XG5cdFx0Ly8gYm9keSBpcyBhIFVSTFNlYXJjaFBhcmFtc1xuXHRcdHJldHVybiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLTgnO1xuXHR9IGVsc2UgaWYgKGlzQmxvYihib2R5KSkge1xuXHRcdC8vIGJvZHkgaXMgYmxvYlxuXHRcdHJldHVybiBib2R5LnR5cGUgfHwgbnVsbDtcblx0fSBlbHNlIGlmIChCdWZmZXIuaXNCdWZmZXIoYm9keSkpIHtcblx0XHQvLyBib2R5IGlzIGJ1ZmZlclxuXHRcdHJldHVybiBudWxsO1xuXHR9IGVsc2UgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChib2R5KSA9PT0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJykge1xuXHRcdC8vIGJvZHkgaXMgQXJyYXlCdWZmZXJcblx0XHRyZXR1cm4gbnVsbDtcblx0fSBlbHNlIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcoYm9keSkpIHtcblx0XHQvLyBib2R5IGlzIEFycmF5QnVmZmVyVmlld1xuXHRcdHJldHVybiBudWxsO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBib2R5LmdldEJvdW5kYXJ5ID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0Ly8gZGV0ZWN0IGZvcm0gZGF0YSBpbnB1dCBmcm9tIGZvcm0tZGF0YSBtb2R1bGVcblx0XHRyZXR1cm4gYG11bHRpcGFydC9mb3JtLWRhdGE7Ym91bmRhcnk9JHtib2R5LmdldEJvdW5kYXJ5KCl9YDtcblx0fSBlbHNlIGlmIChib2R5IGluc3RhbmNlb2YgU3RyZWFtKSB7XG5cdFx0Ly8gYm9keSBpcyBzdHJlYW1cblx0XHQvLyBjYW4ndCByZWFsbHkgZG8gbXVjaCBhYm91dCB0aGlzXG5cdFx0cmV0dXJuIG51bGw7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gQm9keSBjb25zdHJ1Y3RvciBkZWZhdWx0cyBvdGhlciB0aGluZ3MgdG8gc3RyaW5nXG5cdFx0cmV0dXJuICd0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLTgnO1xuXHR9XG59XG5cbi8qKlxuICogVGhlIEZldGNoIFN0YW5kYXJkIHRyZWF0cyB0aGlzIGFzIGlmIFwidG90YWwgYnl0ZXNcIiBpcyBhIHByb3BlcnR5IG9uIHRoZSBib2R5LlxuICogRm9yIHVzLCB3ZSBoYXZlIHRvIGV4cGxpY2l0bHkgZ2V0IGl0IHdpdGggYSBmdW5jdGlvbi5cbiAqXG4gKiByZWY6IGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWJvZHktdG90YWwtYnl0ZXNcbiAqXG4gKiBAcGFyYW0gICBCb2R5ICAgIGluc3RhbmNlICAgSW5zdGFuY2Ugb2YgQm9keVxuICogQHJldHVybiAgTnVtYmVyPyAgICAgICAgICAgIE51bWJlciBvZiBieXRlcywgb3IgbnVsbCBpZiBub3QgcG9zc2libGVcbiAqL1xuZnVuY3Rpb24gZ2V0VG90YWxCeXRlcyhpbnN0YW5jZSkge1xuXHRjb25zdCBib2R5ID0gaW5zdGFuY2UuYm9keTtcblxuXG5cdGlmIChib2R5ID09PSBudWxsKSB7XG5cdFx0Ly8gYm9keSBpcyBudWxsXG5cdFx0cmV0dXJuIDA7XG5cdH0gZWxzZSBpZiAoaXNCbG9iKGJvZHkpKSB7XG5cdFx0cmV0dXJuIGJvZHkuc2l6ZTtcblx0fSBlbHNlIGlmIChCdWZmZXIuaXNCdWZmZXIoYm9keSkpIHtcblx0XHQvLyBib2R5IGlzIGJ1ZmZlclxuXHRcdHJldHVybiBib2R5Lmxlbmd0aDtcblx0fSBlbHNlIGlmIChib2R5ICYmIHR5cGVvZiBib2R5LmdldExlbmd0aFN5bmMgPT09ICdmdW5jdGlvbicpIHtcblx0XHQvLyBkZXRlY3QgZm9ybSBkYXRhIGlucHV0IGZyb20gZm9ybS1kYXRhIG1vZHVsZVxuXHRcdGlmIChib2R5Ll9sZW5ndGhSZXRyaWV2ZXJzICYmIGJvZHkuX2xlbmd0aFJldHJpZXZlcnMubGVuZ3RoID09IDAgfHwgLy8gMS54XG5cdFx0Ym9keS5oYXNLbm93bkxlbmd0aCAmJiBib2R5Lmhhc0tub3duTGVuZ3RoKCkpIHtcblx0XHRcdC8vIDIueFxuXHRcdFx0cmV0dXJuIGJvZHkuZ2V0TGVuZ3RoU3luYygpO1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fSBlbHNlIHtcblx0XHQvLyBib2R5IGlzIHN0cmVhbVxuXHRcdHJldHVybiBudWxsO1xuXHR9XG59XG5cbi8qKlxuICogV3JpdGUgYSBCb2R5IHRvIGEgTm9kZS5qcyBXcml0YWJsZVN0cmVhbSAoZS5nLiBodHRwLlJlcXVlc3QpIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gICBCb2R5ICAgIGluc3RhbmNlICAgSW5zdGFuY2Ugb2YgQm9keVxuICogQHJldHVybiAgVm9pZFxuICovXG5mdW5jdGlvbiB3cml0ZVRvU3RyZWFtKGRlc3QsIGluc3RhbmNlKSB7XG5cdGNvbnN0IGJvZHkgPSBpbnN0YW5jZS5ib2R5O1xuXG5cblx0aWYgKGJvZHkgPT09IG51bGwpIHtcblx0XHQvLyBib2R5IGlzIG51bGxcblx0XHRkZXN0LmVuZCgpO1xuXHR9IGVsc2UgaWYgKGlzQmxvYihib2R5KSkge1xuXHRcdGJvZHkuc3RyZWFtKCkucGlwZShkZXN0KTtcblx0fSBlbHNlIGlmIChCdWZmZXIuaXNCdWZmZXIoYm9keSkpIHtcblx0XHQvLyBib2R5IGlzIGJ1ZmZlclxuXHRcdGRlc3Qud3JpdGUoYm9keSk7XG5cdFx0ZGVzdC5lbmQoKTtcblx0fSBlbHNlIHtcblx0XHQvLyBib2R5IGlzIHN0cmVhbVxuXHRcdGJvZHkucGlwZShkZXN0KTtcblx0fVxufVxuXG4vLyBleHBvc2UgUHJvbWlzZVxuQm9keS5Qcm9taXNlID0gZ2xvYmFsLlByb21pc2U7XG5cbi8qKlxuICogaGVhZGVycy5qc1xuICpcbiAqIEhlYWRlcnMgY2xhc3Mgb2ZmZXJzIGNvbnZlbmllbnQgaGVscGVyc1xuICovXG5cbmNvbnN0IGludmFsaWRUb2tlblJlZ2V4ID0gL1teXFxeX2BhLXpBLVpcXC0wLTkhIyQlJicqKy58fl0vO1xuY29uc3QgaW52YWxpZEhlYWRlckNoYXJSZWdleCA9IC9bXlxcdFxceDIwLVxceDdlXFx4ODAtXFx4ZmZdLztcblxuZnVuY3Rpb24gdmFsaWRhdGVOYW1lKG5hbWUpIHtcblx0bmFtZSA9IGAke25hbWV9YDtcblx0aWYgKGludmFsaWRUb2tlblJlZ2V4LnRlc3QobmFtZSkgfHwgbmFtZSA9PT0gJycpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKGAke25hbWV9IGlzIG5vdCBhIGxlZ2FsIEhUVFAgaGVhZGVyIG5hbWVgKTtcblx0fVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVZhbHVlKHZhbHVlKSB7XG5cdHZhbHVlID0gYCR7dmFsdWV9YDtcblx0aWYgKGludmFsaWRIZWFkZXJDaGFyUmVnZXgudGVzdCh2YWx1ZSkpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKGAke3ZhbHVlfSBpcyBub3QgYSBsZWdhbCBIVFRQIGhlYWRlciB2YWx1ZWApO1xuXHR9XG59XG5cbi8qKlxuICogRmluZCB0aGUga2V5IGluIHRoZSBtYXAgb2JqZWN0IGdpdmVuIGEgaGVhZGVyIG5hbWUuXG4gKlxuICogUmV0dXJucyB1bmRlZmluZWQgaWYgbm90IGZvdW5kLlxuICpcbiAqIEBwYXJhbSAgIFN0cmluZyAgbmFtZSAgSGVhZGVyIG5hbWVcbiAqIEByZXR1cm4gIFN0cmluZ3xVbmRlZmluZWRcbiAqL1xuZnVuY3Rpb24gZmluZChtYXAsIG5hbWUpIHtcblx0bmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcblx0Zm9yIChjb25zdCBrZXkgaW4gbWFwKSB7XG5cdFx0aWYgKGtleS50b0xvd2VyQ2FzZSgpID09PSBuYW1lKSB7XG5cdFx0XHRyZXR1cm4ga2V5O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5jb25zdCBNQVAgPSBTeW1ib2woJ21hcCcpO1xuY2xhc3MgSGVhZGVycyB7XG5cdC8qKlxuICAqIEhlYWRlcnMgY2xhc3NcbiAgKlxuICAqIEBwYXJhbSAgIE9iamVjdCAgaGVhZGVycyAgUmVzcG9uc2UgaGVhZGVyc1xuICAqIEByZXR1cm4gIFZvaWRcbiAgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0bGV0IGluaXQgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZDtcblxuXHRcdHRoaXNbTUFQXSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cblx0XHRpZiAoaW5pdCBpbnN0YW5jZW9mIEhlYWRlcnMpIHtcblx0XHRcdGNvbnN0IHJhd0hlYWRlcnMgPSBpbml0LnJhdygpO1xuXHRcdFx0Y29uc3QgaGVhZGVyTmFtZXMgPSBPYmplY3Qua2V5cyhyYXdIZWFkZXJzKTtcblxuXHRcdFx0Zm9yIChjb25zdCBoZWFkZXJOYW1lIG9mIGhlYWRlck5hbWVzKSB7XG5cdFx0XHRcdGZvciAoY29uc3QgdmFsdWUgb2YgcmF3SGVhZGVyc1toZWFkZXJOYW1lXSkge1xuXHRcdFx0XHRcdHRoaXMuYXBwZW5kKGhlYWRlck5hbWUsIHZhbHVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gV2UgZG9uJ3Qgd29ycnkgYWJvdXQgY29udmVydGluZyBwcm9wIHRvIEJ5dGVTdHJpbmcgaGVyZSBhcyBhcHBlbmQoKVxuXHRcdC8vIHdpbGwgaGFuZGxlIGl0LlxuXHRcdGlmIChpbml0ID09IG51bGwpIDsgZWxzZSBpZiAodHlwZW9mIGluaXQgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRjb25zdCBtZXRob2QgPSBpbml0W1N5bWJvbC5pdGVyYXRvcl07XG5cdFx0XHRpZiAobWV0aG9kICE9IG51bGwpIHtcblx0XHRcdFx0aWYgKHR5cGVvZiBtZXRob2QgIT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdIZWFkZXIgcGFpcnMgbXVzdCBiZSBpdGVyYWJsZScpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gc2VxdWVuY2U8c2VxdWVuY2U8Qnl0ZVN0cmluZz4+XG5cdFx0XHRcdC8vIE5vdGU6IHBlciBzcGVjIHdlIGhhdmUgdG8gZmlyc3QgZXhoYXVzdCB0aGUgbGlzdHMgdGhlbiBwcm9jZXNzIHRoZW1cblx0XHRcdFx0Y29uc3QgcGFpcnMgPSBbXTtcblx0XHRcdFx0Zm9yIChjb25zdCBwYWlyIG9mIGluaXQpIHtcblx0XHRcdFx0XHRpZiAodHlwZW9mIHBhaXIgIT09ICdvYmplY3QnIHx8IHR5cGVvZiBwYWlyW1N5bWJvbC5pdGVyYXRvcl0gIT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0VhY2ggaGVhZGVyIHBhaXIgbXVzdCBiZSBpdGVyYWJsZScpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRwYWlycy5wdXNoKEFycmF5LmZyb20ocGFpcikpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Zm9yIChjb25zdCBwYWlyIG9mIHBhaXJzKSB7XG5cdFx0XHRcdFx0aWYgKHBhaXIubGVuZ3RoICE9PSAyKSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFYWNoIGhlYWRlciBwYWlyIG11c3QgYmUgYSBuYW1lL3ZhbHVlIHR1cGxlJyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRoaXMuYXBwZW5kKHBhaXJbMF0sIHBhaXJbMV0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyByZWNvcmQ8Qnl0ZVN0cmluZywgQnl0ZVN0cmluZz5cblx0XHRcdFx0Zm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoaW5pdCkpIHtcblx0XHRcdFx0XHRjb25zdCB2YWx1ZSA9IGluaXRba2V5XTtcblx0XHRcdFx0XHR0aGlzLmFwcGVuZChrZXksIHZhbHVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdQcm92aWRlZCBpbml0aWFsaXplciBtdXN0IGJlIGFuIG9iamVjdCcpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuICAqIFJldHVybiBjb21iaW5lZCBoZWFkZXIgdmFsdWUgZ2l2ZW4gbmFtZVxuICAqXG4gICogQHBhcmFtICAgU3RyaW5nICBuYW1lICBIZWFkZXIgbmFtZVxuICAqIEByZXR1cm4gIE1peGVkXG4gICovXG5cdGdldChuYW1lKSB7XG5cdFx0bmFtZSA9IGAke25hbWV9YDtcblx0XHR2YWxpZGF0ZU5hbWUobmFtZSk7XG5cdFx0Y29uc3Qga2V5ID0gZmluZCh0aGlzW01BUF0sIG5hbWUpO1xuXHRcdGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXNbTUFQXVtrZXldLmpvaW4oJywgJyk7XG5cdH1cblxuXHQvKipcbiAgKiBJdGVyYXRlIG92ZXIgYWxsIGhlYWRlcnNcbiAgKlxuICAqIEBwYXJhbSAgIEZ1bmN0aW9uICBjYWxsYmFjayAgRXhlY3V0ZWQgZm9yIGVhY2ggaXRlbSB3aXRoIHBhcmFtZXRlcnMgKHZhbHVlLCBuYW1lLCB0aGlzQXJnKVxuICAqIEBwYXJhbSAgIEJvb2xlYW4gICB0aGlzQXJnICAgYHRoaXNgIGNvbnRleHQgZm9yIGNhbGxiYWNrIGZ1bmN0aW9uXG4gICogQHJldHVybiAgVm9pZFxuICAqL1xuXHRmb3JFYWNoKGNhbGxiYWNrKSB7XG5cdFx0bGV0IHRoaXNBcmcgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcblxuXHRcdGxldCBwYWlycyA9IGdldEhlYWRlcnModGhpcyk7XG5cdFx0bGV0IGkgPSAwO1xuXHRcdHdoaWxlIChpIDwgcGFpcnMubGVuZ3RoKSB7XG5cdFx0XHR2YXIgX3BhaXJzJGkgPSBwYWlyc1tpXTtcblx0XHRcdGNvbnN0IG5hbWUgPSBfcGFpcnMkaVswXSxcblx0XHRcdCAgICAgIHZhbHVlID0gX3BhaXJzJGlbMV07XG5cblx0XHRcdGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdmFsdWUsIG5hbWUsIHRoaXMpO1xuXHRcdFx0cGFpcnMgPSBnZXRIZWFkZXJzKHRoaXMpO1xuXHRcdFx0aSsrO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuICAqIE92ZXJ3cml0ZSBoZWFkZXIgdmFsdWVzIGdpdmVuIG5hbWVcbiAgKlxuICAqIEBwYXJhbSAgIFN0cmluZyAgbmFtZSAgIEhlYWRlciBuYW1lXG4gICogQHBhcmFtICAgU3RyaW5nICB2YWx1ZSAgSGVhZGVyIHZhbHVlXG4gICogQHJldHVybiAgVm9pZFxuICAqL1xuXHRzZXQobmFtZSwgdmFsdWUpIHtcblx0XHRuYW1lID0gYCR7bmFtZX1gO1xuXHRcdHZhbHVlID0gYCR7dmFsdWV9YDtcblx0XHR2YWxpZGF0ZU5hbWUobmFtZSk7XG5cdFx0dmFsaWRhdGVWYWx1ZSh2YWx1ZSk7XG5cdFx0Y29uc3Qga2V5ID0gZmluZCh0aGlzW01BUF0sIG5hbWUpO1xuXHRcdHRoaXNbTUFQXVtrZXkgIT09IHVuZGVmaW5lZCA/IGtleSA6IG5hbWVdID0gW3ZhbHVlXTtcblx0fVxuXG5cdC8qKlxuICAqIEFwcGVuZCBhIHZhbHVlIG9udG8gZXhpc3RpbmcgaGVhZGVyXG4gICpcbiAgKiBAcGFyYW0gICBTdHJpbmcgIG5hbWUgICBIZWFkZXIgbmFtZVxuICAqIEBwYXJhbSAgIFN0cmluZyAgdmFsdWUgIEhlYWRlciB2YWx1ZVxuICAqIEByZXR1cm4gIFZvaWRcbiAgKi9cblx0YXBwZW5kKG5hbWUsIHZhbHVlKSB7XG5cdFx0bmFtZSA9IGAke25hbWV9YDtcblx0XHR2YWx1ZSA9IGAke3ZhbHVlfWA7XG5cdFx0dmFsaWRhdGVOYW1lKG5hbWUpO1xuXHRcdHZhbGlkYXRlVmFsdWUodmFsdWUpO1xuXHRcdGNvbnN0IGtleSA9IGZpbmQodGhpc1tNQVBdLCBuYW1lKTtcblx0XHRpZiAoa2V5ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXNbTUFQXVtrZXldLnB1c2godmFsdWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzW01BUF1bbmFtZV0gPSBbdmFsdWVdO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuICAqIENoZWNrIGZvciBoZWFkZXIgbmFtZSBleGlzdGVuY2VcbiAgKlxuICAqIEBwYXJhbSAgIFN0cmluZyAgIG5hbWUgIEhlYWRlciBuYW1lXG4gICogQHJldHVybiAgQm9vbGVhblxuICAqL1xuXHRoYXMobmFtZSkge1xuXHRcdG5hbWUgPSBgJHtuYW1lfWA7XG5cdFx0dmFsaWRhdGVOYW1lKG5hbWUpO1xuXHRcdHJldHVybiBmaW5kKHRoaXNbTUFQXSwgbmFtZSkgIT09IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuICAqIERlbGV0ZSBhbGwgaGVhZGVyIHZhbHVlcyBnaXZlbiBuYW1lXG4gICpcbiAgKiBAcGFyYW0gICBTdHJpbmcgIG5hbWUgIEhlYWRlciBuYW1lXG4gICogQHJldHVybiAgVm9pZFxuICAqL1xuXHRkZWxldGUobmFtZSkge1xuXHRcdG5hbWUgPSBgJHtuYW1lfWA7XG5cdFx0dmFsaWRhdGVOYW1lKG5hbWUpO1xuXHRcdGNvbnN0IGtleSA9IGZpbmQodGhpc1tNQVBdLCBuYW1lKTtcblx0XHRpZiAoa2V5ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGRlbGV0ZSB0aGlzW01BUF1ba2V5XTtcblx0XHR9XG5cdH1cblxuXHQvKipcbiAgKiBSZXR1cm4gcmF3IGhlYWRlcnMgKG5vbi1zcGVjIGFwaSlcbiAgKlxuICAqIEByZXR1cm4gIE9iamVjdFxuICAqL1xuXHRyYXcoKSB7XG5cdFx0cmV0dXJuIHRoaXNbTUFQXTtcblx0fVxuXG5cdC8qKlxuICAqIEdldCBhbiBpdGVyYXRvciBvbiBrZXlzLlxuICAqXG4gICogQHJldHVybiAgSXRlcmF0b3JcbiAgKi9cblx0a2V5cygpIHtcblx0XHRyZXR1cm4gY3JlYXRlSGVhZGVyc0l0ZXJhdG9yKHRoaXMsICdrZXknKTtcblx0fVxuXG5cdC8qKlxuICAqIEdldCBhbiBpdGVyYXRvciBvbiB2YWx1ZXMuXG4gICpcbiAgKiBAcmV0dXJuICBJdGVyYXRvclxuICAqL1xuXHR2YWx1ZXMoKSB7XG5cdFx0cmV0dXJuIGNyZWF0ZUhlYWRlcnNJdGVyYXRvcih0aGlzLCAndmFsdWUnKTtcblx0fVxuXG5cdC8qKlxuICAqIEdldCBhbiBpdGVyYXRvciBvbiBlbnRyaWVzLlxuICAqXG4gICogVGhpcyBpcyB0aGUgZGVmYXVsdCBpdGVyYXRvciBvZiB0aGUgSGVhZGVycyBvYmplY3QuXG4gICpcbiAgKiBAcmV0dXJuICBJdGVyYXRvclxuICAqL1xuXHRbU3ltYm9sLml0ZXJhdG9yXSgpIHtcblx0XHRyZXR1cm4gY3JlYXRlSGVhZGVyc0l0ZXJhdG9yKHRoaXMsICdrZXkrdmFsdWUnKTtcblx0fVxufVxuSGVhZGVycy5wcm90b3R5cGUuZW50cmllcyA9IEhlYWRlcnMucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIZWFkZXJzLnByb3RvdHlwZSwgU3ltYm9sLnRvU3RyaW5nVGFnLCB7XG5cdHZhbHVlOiAnSGVhZGVycycsXG5cdHdyaXRhYmxlOiBmYWxzZSxcblx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEhlYWRlcnMucHJvdG90eXBlLCB7XG5cdGdldDogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG5cdGZvckVhY2g6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHRzZXQ6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHRhcHBlbmQ6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHRoYXM6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHRkZWxldGU6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHRrZXlzOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0dmFsdWVzOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0ZW50cmllczogeyBlbnVtZXJhYmxlOiB0cnVlIH1cbn0pO1xuXG5mdW5jdGlvbiBnZXRIZWFkZXJzKGhlYWRlcnMpIHtcblx0bGV0IGtpbmQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICdrZXkrdmFsdWUnO1xuXG5cdGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhoZWFkZXJzW01BUF0pLnNvcnQoKTtcblx0cmV0dXJuIGtleXMubWFwKGtpbmQgPT09ICdrZXknID8gZnVuY3Rpb24gKGspIHtcblx0XHRyZXR1cm4gay50b0xvd2VyQ2FzZSgpO1xuXHR9IDoga2luZCA9PT0gJ3ZhbHVlJyA/IGZ1bmN0aW9uIChrKSB7XG5cdFx0cmV0dXJuIGhlYWRlcnNbTUFQXVtrXS5qb2luKCcsICcpO1xuXHR9IDogZnVuY3Rpb24gKGspIHtcblx0XHRyZXR1cm4gW2sudG9Mb3dlckNhc2UoKSwgaGVhZGVyc1tNQVBdW2tdLmpvaW4oJywgJyldO1xuXHR9KTtcbn1cblxuY29uc3QgSU5URVJOQUwgPSBTeW1ib2woJ2ludGVybmFsJyk7XG5cbmZ1bmN0aW9uIGNyZWF0ZUhlYWRlcnNJdGVyYXRvcih0YXJnZXQsIGtpbmQpIHtcblx0Y29uc3QgaXRlcmF0b3IgPSBPYmplY3QuY3JlYXRlKEhlYWRlcnNJdGVyYXRvclByb3RvdHlwZSk7XG5cdGl0ZXJhdG9yW0lOVEVSTkFMXSA9IHtcblx0XHR0YXJnZXQsXG5cdFx0a2luZCxcblx0XHRpbmRleDogMFxuXHR9O1xuXHRyZXR1cm4gaXRlcmF0b3I7XG59XG5cbmNvbnN0IEhlYWRlcnNJdGVyYXRvclByb3RvdHlwZSA9IE9iamVjdC5zZXRQcm90b3R5cGVPZih7XG5cdG5leHQoKSB7XG5cdFx0Ly8gaXN0YW5idWwgaWdub3JlIGlmXG5cdFx0aWYgKCF0aGlzIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKSAhPT0gSGVhZGVyc0l0ZXJhdG9yUHJvdG90eXBlKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdWYWx1ZSBvZiBgdGhpc2AgaXMgbm90IGEgSGVhZGVyc0l0ZXJhdG9yJyk7XG5cdFx0fVxuXG5cdFx0dmFyIF9JTlRFUk5BTCA9IHRoaXNbSU5URVJOQUxdO1xuXHRcdGNvbnN0IHRhcmdldCA9IF9JTlRFUk5BTC50YXJnZXQsXG5cdFx0ICAgICAga2luZCA9IF9JTlRFUk5BTC5raW5kLFxuXHRcdCAgICAgIGluZGV4ID0gX0lOVEVSTkFMLmluZGV4O1xuXG5cdFx0Y29uc3QgdmFsdWVzID0gZ2V0SGVhZGVycyh0YXJnZXQsIGtpbmQpO1xuXHRcdGNvbnN0IGxlbiA9IHZhbHVlcy5sZW5ndGg7XG5cdFx0aWYgKGluZGV4ID49IGxlbikge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0dmFsdWU6IHVuZGVmaW5lZCxcblx0XHRcdFx0ZG9uZTogdHJ1ZVxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHR0aGlzW0lOVEVSTkFMXS5pbmRleCA9IGluZGV4ICsgMTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHR2YWx1ZTogdmFsdWVzW2luZGV4XSxcblx0XHRcdGRvbmU6IGZhbHNlXG5cdFx0fTtcblx0fVxufSwgT2JqZWN0LmdldFByb3RvdHlwZU9mKE9iamVjdC5nZXRQcm90b3R5cGVPZihbXVtTeW1ib2wuaXRlcmF0b3JdKCkpKSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIZWFkZXJzSXRlcmF0b3JQcm90b3R5cGUsIFN5bWJvbC50b1N0cmluZ1RhZywge1xuXHR2YWx1ZTogJ0hlYWRlcnNJdGVyYXRvcicsXG5cdHdyaXRhYmxlOiBmYWxzZSxcblx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbi8qKlxuICogRXhwb3J0IHRoZSBIZWFkZXJzIG9iamVjdCBpbiBhIGZvcm0gdGhhdCBOb2RlLmpzIGNhbiBjb25zdW1lLlxuICpcbiAqIEBwYXJhbSAgIEhlYWRlcnMgIGhlYWRlcnNcbiAqIEByZXR1cm4gIE9iamVjdFxuICovXG5mdW5jdGlvbiBleHBvcnROb2RlQ29tcGF0aWJsZUhlYWRlcnMoaGVhZGVycykge1xuXHRjb25zdCBvYmogPSBPYmplY3QuYXNzaWduKHsgX19wcm90b19fOiBudWxsIH0sIGhlYWRlcnNbTUFQXSk7XG5cblx0Ly8gaHR0cC5yZXF1ZXN0KCkgb25seSBzdXBwb3J0cyBzdHJpbmcgYXMgSG9zdCBoZWFkZXIuIFRoaXMgaGFjayBtYWtlc1xuXHQvLyBzcGVjaWZ5aW5nIGN1c3RvbSBIb3N0IGhlYWRlciBwb3NzaWJsZS5cblx0Y29uc3QgaG9zdEhlYWRlcktleSA9IGZpbmQoaGVhZGVyc1tNQVBdLCAnSG9zdCcpO1xuXHRpZiAoaG9zdEhlYWRlcktleSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0b2JqW2hvc3RIZWFkZXJLZXldID0gb2JqW2hvc3RIZWFkZXJLZXldWzBdO1xuXHR9XG5cblx0cmV0dXJuIG9iajtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBIZWFkZXJzIG9iamVjdCBmcm9tIGFuIG9iamVjdCBvZiBoZWFkZXJzLCBpZ25vcmluZyB0aG9zZSB0aGF0IGRvXG4gKiBub3QgY29uZm9ybSB0byBIVFRQIGdyYW1tYXIgcHJvZHVjdGlvbnMuXG4gKlxuICogQHBhcmFtICAgT2JqZWN0ICBvYmogIE9iamVjdCBvZiBoZWFkZXJzXG4gKiBAcmV0dXJuICBIZWFkZXJzXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUhlYWRlcnNMZW5pZW50KG9iaikge1xuXHRjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKTtcblx0Zm9yIChjb25zdCBuYW1lIG9mIE9iamVjdC5rZXlzKG9iaikpIHtcblx0XHRpZiAoaW52YWxpZFRva2VuUmVnZXgudGVzdChuYW1lKSkge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXHRcdGlmIChBcnJheS5pc0FycmF5KG9ialtuYW1lXSkpIHtcblx0XHRcdGZvciAoY29uc3QgdmFsIG9mIG9ialtuYW1lXSkge1xuXHRcdFx0XHRpZiAoaW52YWxpZEhlYWRlckNoYXJSZWdleC50ZXN0KHZhbCkpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoaGVhZGVyc1tNQVBdW25hbWVdID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRoZWFkZXJzW01BUF1bbmFtZV0gPSBbdmFsXTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRoZWFkZXJzW01BUF1bbmFtZV0ucHVzaCh2YWwpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICghaW52YWxpZEhlYWRlckNoYXJSZWdleC50ZXN0KG9ialtuYW1lXSkpIHtcblx0XHRcdGhlYWRlcnNbTUFQXVtuYW1lXSA9IFtvYmpbbmFtZV1dO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gaGVhZGVycztcbn1cblxuY29uc3QgSU5URVJOQUxTJDEgPSBTeW1ib2woJ1Jlc3BvbnNlIGludGVybmFscycpO1xuXG4vLyBmaXggYW4gaXNzdWUgd2hlcmUgXCJTVEFUVVNfQ09ERVNcIiBhcmVuJ3QgYSBuYW1lZCBleHBvcnQgZm9yIG5vZGUgPDEwXG5jb25zdCBTVEFUVVNfQ09ERVMgPSBodHRwLlNUQVRVU19DT0RFUztcblxuLyoqXG4gKiBSZXNwb25zZSBjbGFzc1xuICpcbiAqIEBwYXJhbSAgIFN0cmVhbSAgYm9keSAgUmVhZGFibGUgc3RyZWFtXG4gKiBAcGFyYW0gICBPYmplY3QgIG9wdHMgIFJlc3BvbnNlIG9wdGlvbnNcbiAqIEByZXR1cm4gIFZvaWRcbiAqL1xuY2xhc3MgUmVzcG9uc2Uge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRsZXQgYm9keSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogbnVsbDtcblx0XHRsZXQgb3B0cyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cblx0XHRCb2R5LmNhbGwodGhpcywgYm9keSwgb3B0cyk7XG5cblx0XHRjb25zdCBzdGF0dXMgPSBvcHRzLnN0YXR1cyB8fCAyMDA7XG5cdFx0Y29uc3QgaGVhZGVycyA9IG5ldyBIZWFkZXJzKG9wdHMuaGVhZGVycyk7XG5cblx0XHRpZiAoYm9keSAhPSBudWxsICYmICFoZWFkZXJzLmhhcygnQ29udGVudC1UeXBlJykpIHtcblx0XHRcdGNvbnN0IGNvbnRlbnRUeXBlID0gZXh0cmFjdENvbnRlbnRUeXBlKGJvZHkpO1xuXHRcdFx0aWYgKGNvbnRlbnRUeXBlKSB7XG5cdFx0XHRcdGhlYWRlcnMuYXBwZW5kKCdDb250ZW50LVR5cGUnLCBjb250ZW50VHlwZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpc1tJTlRFUk5BTFMkMV0gPSB7XG5cdFx0XHR1cmw6IG9wdHMudXJsLFxuXHRcdFx0c3RhdHVzLFxuXHRcdFx0c3RhdHVzVGV4dDogb3B0cy5zdGF0dXNUZXh0IHx8IFNUQVRVU19DT0RFU1tzdGF0dXNdLFxuXHRcdFx0aGVhZGVycyxcblx0XHRcdGNvdW50ZXI6IG9wdHMuY291bnRlclxuXHRcdH07XG5cdH1cblxuXHRnZXQgdXJsKCkge1xuXHRcdHJldHVybiB0aGlzW0lOVEVSTkFMUyQxXS51cmwgfHwgJyc7XG5cdH1cblxuXHRnZXQgc3RhdHVzKCkge1xuXHRcdHJldHVybiB0aGlzW0lOVEVSTkFMUyQxXS5zdGF0dXM7XG5cdH1cblxuXHQvKipcbiAgKiBDb252ZW5pZW5jZSBwcm9wZXJ0eSByZXByZXNlbnRpbmcgaWYgdGhlIHJlcXVlc3QgZW5kZWQgbm9ybWFsbHlcbiAgKi9cblx0Z2V0IG9rKCkge1xuXHRcdHJldHVybiB0aGlzW0lOVEVSTkFMUyQxXS5zdGF0dXMgPj0gMjAwICYmIHRoaXNbSU5URVJOQUxTJDFdLnN0YXR1cyA8IDMwMDtcblx0fVxuXG5cdGdldCByZWRpcmVjdGVkKCkge1xuXHRcdHJldHVybiB0aGlzW0lOVEVSTkFMUyQxXS5jb3VudGVyID4gMDtcblx0fVxuXG5cdGdldCBzdGF0dXNUZXh0KCkge1xuXHRcdHJldHVybiB0aGlzW0lOVEVSTkFMUyQxXS5zdGF0dXNUZXh0O1xuXHR9XG5cblx0Z2V0IGhlYWRlcnMoKSB7XG5cdFx0cmV0dXJuIHRoaXNbSU5URVJOQUxTJDFdLmhlYWRlcnM7XG5cdH1cblxuXHQvKipcbiAgKiBDbG9uZSB0aGlzIHJlc3BvbnNlXG4gICpcbiAgKiBAcmV0dXJuICBSZXNwb25zZVxuICAqL1xuXHRjbG9uZSgpIHtcblx0XHRyZXR1cm4gbmV3IFJlc3BvbnNlKGNsb25lKHRoaXMpLCB7XG5cdFx0XHR1cmw6IHRoaXMudXJsLFxuXHRcdFx0c3RhdHVzOiB0aGlzLnN0YXR1cyxcblx0XHRcdHN0YXR1c1RleHQ6IHRoaXMuc3RhdHVzVGV4dCxcblx0XHRcdGhlYWRlcnM6IHRoaXMuaGVhZGVycyxcblx0XHRcdG9rOiB0aGlzLm9rLFxuXHRcdFx0cmVkaXJlY3RlZDogdGhpcy5yZWRpcmVjdGVkXG5cdFx0fSk7XG5cdH1cbn1cblxuQm9keS5taXhJbihSZXNwb25zZS5wcm90b3R5cGUpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhSZXNwb25zZS5wcm90b3R5cGUsIHtcblx0dXJsOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0c3RhdHVzOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0b2s6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHRyZWRpcmVjdGVkOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0c3RhdHVzVGV4dDogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG5cdGhlYWRlcnM6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHRjbG9uZTogeyBlbnVtZXJhYmxlOiB0cnVlIH1cbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoUmVzcG9uc2UucHJvdG90eXBlLCBTeW1ib2wudG9TdHJpbmdUYWcsIHtcblx0dmFsdWU6ICdSZXNwb25zZScsXG5cdHdyaXRhYmxlOiBmYWxzZSxcblx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbmNvbnN0IElOVEVSTkFMUyQyID0gU3ltYm9sKCdSZXF1ZXN0IGludGVybmFscycpO1xuY29uc3QgVVJMID0gVXJsLlVSTCB8fCB3aGF0d2dVcmwuVVJMO1xuXG4vLyBmaXggYW4gaXNzdWUgd2hlcmUgXCJmb3JtYXRcIiwgXCJwYXJzZVwiIGFyZW4ndCBhIG5hbWVkIGV4cG9ydCBmb3Igbm9kZSA8MTBcbmNvbnN0IHBhcnNlX3VybCA9IFVybC5wYXJzZTtcbmNvbnN0IGZvcm1hdF91cmwgPSBVcmwuZm9ybWF0O1xuXG4vKipcbiAqIFdyYXBwZXIgYXJvdW5kIGBuZXcgVVJMYCB0byBoYW5kbGUgYXJiaXRyYXJ5IFVSTHNcbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9IHVybFN0clxuICogQHJldHVybiB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gcGFyc2VVUkwodXJsU3RyKSB7XG5cdC8qXG4gXHRDaGVjayB3aGV0aGVyIHRoZSBVUkwgaXMgYWJzb2x1dGUgb3Igbm90XG4gXHRcdFNjaGVtZTogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi0zLjFcbiBcdEFic29sdXRlIFVSTDogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi00LjNcbiAqL1xuXHRpZiAoL15bYS16QS1aXVthLXpBLVpcXGQrXFwtLl0qOi8uZXhlYyh1cmxTdHIpKSB7XG5cdFx0dXJsU3RyID0gbmV3IFVSTCh1cmxTdHIpLnRvU3RyaW5nKCk7XG5cdH1cblxuXHQvLyBGYWxsYmFjayB0byBvbGQgaW1wbGVtZW50YXRpb24gZm9yIGFyYml0cmFyeSBVUkxzXG5cdHJldHVybiBwYXJzZV91cmwodXJsU3RyKTtcbn1cblxuY29uc3Qgc3RyZWFtRGVzdHJ1Y3Rpb25TdXBwb3J0ZWQgPSAnZGVzdHJveScgaW4gU3RyZWFtLlJlYWRhYmxlLnByb3RvdHlwZTtcblxuLyoqXG4gKiBDaGVjayBpZiBhIHZhbHVlIGlzIGFuIGluc3RhbmNlIG9mIFJlcXVlc3QuXG4gKlxuICogQHBhcmFtICAgTWl4ZWQgICBpbnB1dFxuICogQHJldHVybiAgQm9vbGVhblxuICovXG5mdW5jdGlvbiBpc1JlcXVlc3QoaW5wdXQpIHtcblx0cmV0dXJuIHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIGlucHV0W0lOVEVSTkFMUyQyXSA9PT0gJ29iamVjdCc7XG59XG5cbmZ1bmN0aW9uIGlzQWJvcnRTaWduYWwoc2lnbmFsKSB7XG5cdGNvbnN0IHByb3RvID0gc2lnbmFsICYmIHR5cGVvZiBzaWduYWwgPT09ICdvYmplY3QnICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZihzaWduYWwpO1xuXHRyZXR1cm4gISEocHJvdG8gJiYgcHJvdG8uY29uc3RydWN0b3IubmFtZSA9PT0gJ0Fib3J0U2lnbmFsJyk7XG59XG5cbi8qKlxuICogUmVxdWVzdCBjbGFzc1xuICpcbiAqIEBwYXJhbSAgIE1peGVkICAgaW5wdXQgIFVybCBvciBSZXF1ZXN0IGluc3RhbmNlXG4gKiBAcGFyYW0gICBPYmplY3QgIGluaXQgICBDdXN0b20gb3B0aW9uc1xuICogQHJldHVybiAgVm9pZFxuICovXG5jbGFzcyBSZXF1ZXN0IHtcblx0Y29uc3RydWN0b3IoaW5wdXQpIHtcblx0XHRsZXQgaW5pdCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cblx0XHRsZXQgcGFyc2VkVVJMO1xuXG5cdFx0Ly8gbm9ybWFsaXplIGlucHV0XG5cdFx0aWYgKCFpc1JlcXVlc3QoaW5wdXQpKSB7XG5cdFx0XHRpZiAoaW5wdXQgJiYgaW5wdXQuaHJlZikge1xuXHRcdFx0XHQvLyBpbiBvcmRlciB0byBzdXBwb3J0IE5vZGUuanMnIFVybCBvYmplY3RzOyB0aG91Z2ggV0hBVFdHJ3MgVVJMIG9iamVjdHNcblx0XHRcdFx0Ly8gd2lsbCBmYWxsIGludG8gdGhpcyBicmFuY2ggYWxzbyAoc2luY2UgdGhlaXIgYHRvU3RyaW5nKClgIHdpbGwgcmV0dXJuXG5cdFx0XHRcdC8vIGBocmVmYCBwcm9wZXJ0eSBhbnl3YXkpXG5cdFx0XHRcdHBhcnNlZFVSTCA9IHBhcnNlVVJMKGlucHV0LmhyZWYpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gY29lcmNlIGlucHV0IHRvIGEgc3RyaW5nIGJlZm9yZSBhdHRlbXB0aW5nIHRvIHBhcnNlXG5cdFx0XHRcdHBhcnNlZFVSTCA9IHBhcnNlVVJMKGAke2lucHV0fWApO1xuXHRcdFx0fVxuXHRcdFx0aW5wdXQgPSB7fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cGFyc2VkVVJMID0gcGFyc2VVUkwoaW5wdXQudXJsKTtcblx0XHR9XG5cblx0XHRsZXQgbWV0aG9kID0gaW5pdC5tZXRob2QgfHwgaW5wdXQubWV0aG9kIHx8ICdHRVQnO1xuXHRcdG1ldGhvZCA9IG1ldGhvZC50b1VwcGVyQ2FzZSgpO1xuXG5cdFx0aWYgKChpbml0LmJvZHkgIT0gbnVsbCB8fCBpc1JlcXVlc3QoaW5wdXQpICYmIGlucHV0LmJvZHkgIT09IG51bGwpICYmIChtZXRob2QgPT09ICdHRVQnIHx8IG1ldGhvZCA9PT0gJ0hFQUQnKSkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignUmVxdWVzdCB3aXRoIEdFVC9IRUFEIG1ldGhvZCBjYW5ub3QgaGF2ZSBib2R5Jyk7XG5cdFx0fVxuXG5cdFx0bGV0IGlucHV0Qm9keSA9IGluaXQuYm9keSAhPSBudWxsID8gaW5pdC5ib2R5IDogaXNSZXF1ZXN0KGlucHV0KSAmJiBpbnB1dC5ib2R5ICE9PSBudWxsID8gY2xvbmUoaW5wdXQpIDogbnVsbDtcblxuXHRcdEJvZHkuY2FsbCh0aGlzLCBpbnB1dEJvZHksIHtcblx0XHRcdHRpbWVvdXQ6IGluaXQudGltZW91dCB8fCBpbnB1dC50aW1lb3V0IHx8IDAsXG5cdFx0XHRzaXplOiBpbml0LnNpemUgfHwgaW5wdXQuc2l6ZSB8fCAwXG5cdFx0fSk7XG5cblx0XHRjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoaW5pdC5oZWFkZXJzIHx8IGlucHV0LmhlYWRlcnMgfHwge30pO1xuXG5cdFx0aWYgKGlucHV0Qm9keSAhPSBudWxsICYmICFoZWFkZXJzLmhhcygnQ29udGVudC1UeXBlJykpIHtcblx0XHRcdGNvbnN0IGNvbnRlbnRUeXBlID0gZXh0cmFjdENvbnRlbnRUeXBlKGlucHV0Qm9keSk7XG5cdFx0XHRpZiAoY29udGVudFR5cGUpIHtcblx0XHRcdFx0aGVhZGVycy5hcHBlbmQoJ0NvbnRlbnQtVHlwZScsIGNvbnRlbnRUeXBlKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRsZXQgc2lnbmFsID0gaXNSZXF1ZXN0KGlucHV0KSA/IGlucHV0LnNpZ25hbCA6IG51bGw7XG5cdFx0aWYgKCdzaWduYWwnIGluIGluaXQpIHNpZ25hbCA9IGluaXQuc2lnbmFsO1xuXG5cdFx0aWYgKHNpZ25hbCAhPSBudWxsICYmICFpc0Fib3J0U2lnbmFsKHNpZ25hbCkpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIHNpZ25hbCB0byBiZSBhbiBpbnN0YW5jZW9mIEFib3J0U2lnbmFsJyk7XG5cdFx0fVxuXG5cdFx0dGhpc1tJTlRFUk5BTFMkMl0gPSB7XG5cdFx0XHRtZXRob2QsXG5cdFx0XHRyZWRpcmVjdDogaW5pdC5yZWRpcmVjdCB8fCBpbnB1dC5yZWRpcmVjdCB8fCAnZm9sbG93Jyxcblx0XHRcdGhlYWRlcnMsXG5cdFx0XHRwYXJzZWRVUkwsXG5cdFx0XHRzaWduYWxcblx0XHR9O1xuXG5cdFx0Ly8gbm9kZS1mZXRjaC1vbmx5IG9wdGlvbnNcblx0XHR0aGlzLmZvbGxvdyA9IGluaXQuZm9sbG93ICE9PSB1bmRlZmluZWQgPyBpbml0LmZvbGxvdyA6IGlucHV0LmZvbGxvdyAhPT0gdW5kZWZpbmVkID8gaW5wdXQuZm9sbG93IDogMjA7XG5cdFx0dGhpcy5jb21wcmVzcyA9IGluaXQuY29tcHJlc3MgIT09IHVuZGVmaW5lZCA/IGluaXQuY29tcHJlc3MgOiBpbnB1dC5jb21wcmVzcyAhPT0gdW5kZWZpbmVkID8gaW5wdXQuY29tcHJlc3MgOiB0cnVlO1xuXHRcdHRoaXMuY291bnRlciA9IGluaXQuY291bnRlciB8fCBpbnB1dC5jb3VudGVyIHx8IDA7XG5cdFx0dGhpcy5hZ2VudCA9IGluaXQuYWdlbnQgfHwgaW5wdXQuYWdlbnQ7XG5cdH1cblxuXHRnZXQgbWV0aG9kKCkge1xuXHRcdHJldHVybiB0aGlzW0lOVEVSTkFMUyQyXS5tZXRob2Q7XG5cdH1cblxuXHRnZXQgdXJsKCkge1xuXHRcdHJldHVybiBmb3JtYXRfdXJsKHRoaXNbSU5URVJOQUxTJDJdLnBhcnNlZFVSTCk7XG5cdH1cblxuXHRnZXQgaGVhZGVycygpIHtcblx0XHRyZXR1cm4gdGhpc1tJTlRFUk5BTFMkMl0uaGVhZGVycztcblx0fVxuXG5cdGdldCByZWRpcmVjdCgpIHtcblx0XHRyZXR1cm4gdGhpc1tJTlRFUk5BTFMkMl0ucmVkaXJlY3Q7XG5cdH1cblxuXHRnZXQgc2lnbmFsKCkge1xuXHRcdHJldHVybiB0aGlzW0lOVEVSTkFMUyQyXS5zaWduYWw7XG5cdH1cblxuXHQvKipcbiAgKiBDbG9uZSB0aGlzIHJlcXVlc3RcbiAgKlxuICAqIEByZXR1cm4gIFJlcXVlc3RcbiAgKi9cblx0Y2xvbmUoKSB7XG5cdFx0cmV0dXJuIG5ldyBSZXF1ZXN0KHRoaXMpO1xuXHR9XG59XG5cbkJvZHkubWl4SW4oUmVxdWVzdC5wcm90b3R5cGUpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoUmVxdWVzdC5wcm90b3R5cGUsIFN5bWJvbC50b1N0cmluZ1RhZywge1xuXHR2YWx1ZTogJ1JlcXVlc3QnLFxuXHR3cml0YWJsZTogZmFsc2UsXG5cdGVudW1lcmFibGU6IGZhbHNlLFxuXHRjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhSZXF1ZXN0LnByb3RvdHlwZSwge1xuXHRtZXRob2Q6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHR1cmw6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHRoZWFkZXJzOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0cmVkaXJlY3Q6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHRjbG9uZTogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG5cdHNpZ25hbDogeyBlbnVtZXJhYmxlOiB0cnVlIH1cbn0pO1xuXG4vKipcbiAqIENvbnZlcnQgYSBSZXF1ZXN0IHRvIE5vZGUuanMgaHR0cCByZXF1ZXN0IG9wdGlvbnMuXG4gKlxuICogQHBhcmFtICAgUmVxdWVzdCAgQSBSZXF1ZXN0IGluc3RhbmNlXG4gKiBAcmV0dXJuICBPYmplY3QgICBUaGUgb3B0aW9ucyBvYmplY3QgdG8gYmUgcGFzc2VkIHRvIGh0dHAucmVxdWVzdFxuICovXG5mdW5jdGlvbiBnZXROb2RlUmVxdWVzdE9wdGlvbnMocmVxdWVzdCkge1xuXHRjb25zdCBwYXJzZWRVUkwgPSByZXF1ZXN0W0lOVEVSTkFMUyQyXS5wYXJzZWRVUkw7XG5cdGNvbnN0IGhlYWRlcnMgPSBuZXcgSGVhZGVycyhyZXF1ZXN0W0lOVEVSTkFMUyQyXS5oZWFkZXJzKTtcblxuXHQvLyBmZXRjaCBzdGVwIDEuM1xuXHRpZiAoIWhlYWRlcnMuaGFzKCdBY2NlcHQnKSkge1xuXHRcdGhlYWRlcnMuc2V0KCdBY2NlcHQnLCAnKi8qJyk7XG5cdH1cblxuXHQvLyBCYXNpYyBmZXRjaFxuXHRpZiAoIXBhcnNlZFVSTC5wcm90b2NvbCB8fCAhcGFyc2VkVVJMLmhvc3RuYW1lKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignT25seSBhYnNvbHV0ZSBVUkxzIGFyZSBzdXBwb3J0ZWQnKTtcblx0fVxuXG5cdGlmICghL15odHRwcz86JC8udGVzdChwYXJzZWRVUkwucHJvdG9jb2wpKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignT25seSBIVFRQKFMpIHByb3RvY29scyBhcmUgc3VwcG9ydGVkJyk7XG5cdH1cblxuXHRpZiAocmVxdWVzdC5zaWduYWwgJiYgcmVxdWVzdC5ib2R5IGluc3RhbmNlb2YgU3RyZWFtLlJlYWRhYmxlICYmICFzdHJlYW1EZXN0cnVjdGlvblN1cHBvcnRlZCkge1xuXHRcdHRocm93IG5ldyBFcnJvcignQ2FuY2VsbGF0aW9uIG9mIHN0cmVhbWVkIHJlcXVlc3RzIHdpdGggQWJvcnRTaWduYWwgaXMgbm90IHN1cHBvcnRlZCBpbiBub2RlIDwgOCcpO1xuXHR9XG5cblx0Ly8gSFRUUC1uZXR3b3JrLW9yLWNhY2hlIGZldGNoIHN0ZXBzIDIuNC0yLjdcblx0bGV0IGNvbnRlbnRMZW5ndGhWYWx1ZSA9IG51bGw7XG5cdGlmIChyZXF1ZXN0LmJvZHkgPT0gbnVsbCAmJiAvXihQT1NUfFBVVCkkL2kudGVzdChyZXF1ZXN0Lm1ldGhvZCkpIHtcblx0XHRjb250ZW50TGVuZ3RoVmFsdWUgPSAnMCc7XG5cdH1cblx0aWYgKHJlcXVlc3QuYm9keSAhPSBudWxsKSB7XG5cdFx0Y29uc3QgdG90YWxCeXRlcyA9IGdldFRvdGFsQnl0ZXMocmVxdWVzdCk7XG5cdFx0aWYgKHR5cGVvZiB0b3RhbEJ5dGVzID09PSAnbnVtYmVyJykge1xuXHRcdFx0Y29udGVudExlbmd0aFZhbHVlID0gU3RyaW5nKHRvdGFsQnl0ZXMpO1xuXHRcdH1cblx0fVxuXHRpZiAoY29udGVudExlbmd0aFZhbHVlKSB7XG5cdFx0aGVhZGVycy5zZXQoJ0NvbnRlbnQtTGVuZ3RoJywgY29udGVudExlbmd0aFZhbHVlKTtcblx0fVxuXG5cdC8vIEhUVFAtbmV0d29yay1vci1jYWNoZSBmZXRjaCBzdGVwIDIuMTFcblx0aWYgKCFoZWFkZXJzLmhhcygnVXNlci1BZ2VudCcpKSB7XG5cdFx0aGVhZGVycy5zZXQoJ1VzZXItQWdlbnQnLCAnbm9kZS1mZXRjaC8xLjAgKCtodHRwczovL2dpdGh1Yi5jb20vYml0aW5uL25vZGUtZmV0Y2gpJyk7XG5cdH1cblxuXHQvLyBIVFRQLW5ldHdvcmstb3ItY2FjaGUgZmV0Y2ggc3RlcCAyLjE1XG5cdGlmIChyZXF1ZXN0LmNvbXByZXNzICYmICFoZWFkZXJzLmhhcygnQWNjZXB0LUVuY29kaW5nJykpIHtcblx0XHRoZWFkZXJzLnNldCgnQWNjZXB0LUVuY29kaW5nJywgJ2d6aXAsZGVmbGF0ZScpO1xuXHR9XG5cblx0bGV0IGFnZW50ID0gcmVxdWVzdC5hZ2VudDtcblx0aWYgKHR5cGVvZiBhZ2VudCA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdGFnZW50ID0gYWdlbnQocGFyc2VkVVJMKTtcblx0fVxuXG5cdC8vIEhUVFAtbmV0d29yayBmZXRjaCBzdGVwIDQuMlxuXHQvLyBjaHVua2VkIGVuY29kaW5nIGlzIGhhbmRsZWQgYnkgTm9kZS5qc1xuXG5cdHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBwYXJzZWRVUkwsIHtcblx0XHRtZXRob2Q6IHJlcXVlc3QubWV0aG9kLFxuXHRcdGhlYWRlcnM6IGV4cG9ydE5vZGVDb21wYXRpYmxlSGVhZGVycyhoZWFkZXJzKSxcblx0XHRhZ2VudFxuXHR9KTtcbn1cblxuLyoqXG4gKiBhYm9ydC1lcnJvci5qc1xuICpcbiAqIEFib3J0RXJyb3IgaW50ZXJmYWNlIGZvciBjYW5jZWxsZWQgcmVxdWVzdHNcbiAqL1xuXG4vKipcbiAqIENyZWF0ZSBBYm9ydEVycm9yIGluc3RhbmNlXG4gKlxuICogQHBhcmFtICAgU3RyaW5nICAgICAgbWVzc2FnZSAgICAgIEVycm9yIG1lc3NhZ2UgZm9yIGh1bWFuXG4gKiBAcmV0dXJuICBBYm9ydEVycm9yXG4gKi9cbmZ1bmN0aW9uIEFib3J0RXJyb3IobWVzc2FnZSkge1xuICBFcnJvci5jYWxsKHRoaXMsIG1lc3NhZ2UpO1xuXG4gIHRoaXMudHlwZSA9ICdhYm9ydGVkJztcbiAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcblxuICAvLyBoaWRlIGN1c3RvbSBlcnJvciBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGZyb20gZW5kLXVzZXJzXG4gIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xufVxuXG5BYm9ydEVycm9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTtcbkFib3J0RXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQWJvcnRFcnJvcjtcbkFib3J0RXJyb3IucHJvdG90eXBlLm5hbWUgPSAnQWJvcnRFcnJvcic7XG5cbmNvbnN0IFVSTCQxID0gVXJsLlVSTCB8fCB3aGF0d2dVcmwuVVJMO1xuXG4vLyBmaXggYW4gaXNzdWUgd2hlcmUgXCJQYXNzVGhyb3VnaFwiLCBcInJlc29sdmVcIiBhcmVuJ3QgYSBuYW1lZCBleHBvcnQgZm9yIG5vZGUgPDEwXG5jb25zdCBQYXNzVGhyb3VnaCQxID0gU3RyZWFtLlBhc3NUaHJvdWdoO1xuXG5jb25zdCBpc0RvbWFpbk9yU3ViZG9tYWluID0gZnVuY3Rpb24gaXNEb21haW5PclN1YmRvbWFpbihkZXN0aW5hdGlvbiwgb3JpZ2luYWwpIHtcblx0Y29uc3Qgb3JpZyA9IG5ldyBVUkwkMShvcmlnaW5hbCkuaG9zdG5hbWU7XG5cdGNvbnN0IGRlc3QgPSBuZXcgVVJMJDEoZGVzdGluYXRpb24pLmhvc3RuYW1lO1xuXG5cdHJldHVybiBvcmlnID09PSBkZXN0IHx8IG9yaWdbb3JpZy5sZW5ndGggLSBkZXN0Lmxlbmd0aCAtIDFdID09PSAnLicgJiYgb3JpZy5lbmRzV2l0aChkZXN0KTtcbn07XG5cbi8qKlxuICogaXNTYW1lUHJvdG9jb2wgcmVwb3J0cyB3aGV0aGVyIHRoZSB0d28gcHJvdmlkZWQgVVJMcyB1c2UgdGhlIHNhbWUgcHJvdG9jb2wuXG4gKlxuICogQm90aCBkb21haW5zIG11c3QgYWxyZWFkeSBiZSBpbiBjYW5vbmljYWwgZm9ybS5cbiAqIEBwYXJhbSB7c3RyaW5nfFVSTH0gb3JpZ2luYWxcbiAqIEBwYXJhbSB7c3RyaW5nfFVSTH0gZGVzdGluYXRpb25cbiAqL1xuY29uc3QgaXNTYW1lUHJvdG9jb2wgPSBmdW5jdGlvbiBpc1NhbWVQcm90b2NvbChkZXN0aW5hdGlvbiwgb3JpZ2luYWwpIHtcblx0Y29uc3Qgb3JpZyA9IG5ldyBVUkwkMShvcmlnaW5hbCkucHJvdG9jb2w7XG5cdGNvbnN0IGRlc3QgPSBuZXcgVVJMJDEoZGVzdGluYXRpb24pLnByb3RvY29sO1xuXG5cdHJldHVybiBvcmlnID09PSBkZXN0O1xufTtcblxuLyoqXG4gKiBGZXRjaCBmdW5jdGlvblxuICpcbiAqIEBwYXJhbSAgIE1peGVkICAgIHVybCAgIEFic29sdXRlIHVybCBvciBSZXF1ZXN0IGluc3RhbmNlXG4gKiBAcGFyYW0gICBPYmplY3QgICBvcHRzICBGZXRjaCBvcHRpb25zXG4gKiBAcmV0dXJuICBQcm9taXNlXG4gKi9cbmZ1bmN0aW9uIGZldGNoKHVybCwgb3B0cykge1xuXG5cdC8vIGFsbG93IGN1c3RvbSBwcm9taXNlXG5cdGlmICghZmV0Y2guUHJvbWlzZSkge1xuXHRcdHRocm93IG5ldyBFcnJvcignbmF0aXZlIHByb21pc2UgbWlzc2luZywgc2V0IGZldGNoLlByb21pc2UgdG8geW91ciBmYXZvcml0ZSBhbHRlcm5hdGl2ZScpO1xuXHR9XG5cblx0Qm9keS5Qcm9taXNlID0gZmV0Y2guUHJvbWlzZTtcblxuXHQvLyB3cmFwIGh0dHAucmVxdWVzdCBpbnRvIGZldGNoXG5cdHJldHVybiBuZXcgZmV0Y2guUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdFx0Ly8gYnVpbGQgcmVxdWVzdCBvYmplY3Rcblx0XHRjb25zdCByZXF1ZXN0ID0gbmV3IFJlcXVlc3QodXJsLCBvcHRzKTtcblx0XHRjb25zdCBvcHRpb25zID0gZ2V0Tm9kZVJlcXVlc3RPcHRpb25zKHJlcXVlc3QpO1xuXG5cdFx0Y29uc3Qgc2VuZCA9IChvcHRpb25zLnByb3RvY29sID09PSAnaHR0cHM6JyA/IGh0dHBzIDogaHR0cCkucmVxdWVzdDtcblx0XHRjb25zdCBzaWduYWwgPSByZXF1ZXN0LnNpZ25hbDtcblxuXHRcdGxldCByZXNwb25zZSA9IG51bGw7XG5cblx0XHRjb25zdCBhYm9ydCA9IGZ1bmN0aW9uIGFib3J0KCkge1xuXHRcdFx0bGV0IGVycm9yID0gbmV3IEFib3J0RXJyb3IoJ1RoZSB1c2VyIGFib3J0ZWQgYSByZXF1ZXN0LicpO1xuXHRcdFx0cmVqZWN0KGVycm9yKTtcblx0XHRcdGlmIChyZXF1ZXN0LmJvZHkgJiYgcmVxdWVzdC5ib2R5IGluc3RhbmNlb2YgU3RyZWFtLlJlYWRhYmxlKSB7XG5cdFx0XHRcdGRlc3Ryb3lTdHJlYW0ocmVxdWVzdC5ib2R5LCBlcnJvcik7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIXJlc3BvbnNlIHx8ICFyZXNwb25zZS5ib2R5KSByZXR1cm47XG5cdFx0XHRyZXNwb25zZS5ib2R5LmVtaXQoJ2Vycm9yJywgZXJyb3IpO1xuXHRcdH07XG5cblx0XHRpZiAoc2lnbmFsICYmIHNpZ25hbC5hYm9ydGVkKSB7XG5cdFx0XHRhYm9ydCgpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGFib3J0QW5kRmluYWxpemUgPSBmdW5jdGlvbiBhYm9ydEFuZEZpbmFsaXplKCkge1xuXHRcdFx0YWJvcnQoKTtcblx0XHRcdGZpbmFsaXplKCk7XG5cdFx0fTtcblxuXHRcdC8vIHNlbmQgcmVxdWVzdFxuXHRcdGNvbnN0IHJlcSA9IHNlbmQob3B0aW9ucyk7XG5cdFx0bGV0IHJlcVRpbWVvdXQ7XG5cblx0XHRpZiAoc2lnbmFsKSB7XG5cdFx0XHRzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydEFuZEZpbmFsaXplKTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBmaW5hbGl6ZSgpIHtcblx0XHRcdHJlcS5hYm9ydCgpO1xuXHRcdFx0aWYgKHNpZ25hbCkgc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnRBbmRGaW5hbGl6ZSk7XG5cdFx0XHRjbGVhclRpbWVvdXQocmVxVGltZW91dCk7XG5cdFx0fVxuXG5cdFx0aWYgKHJlcXVlc3QudGltZW91dCkge1xuXHRcdFx0cmVxLm9uY2UoJ3NvY2tldCcsIGZ1bmN0aW9uIChzb2NrZXQpIHtcblx0XHRcdFx0cmVxVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdHJlamVjdChuZXcgRmV0Y2hFcnJvcihgbmV0d29yayB0aW1lb3V0IGF0OiAke3JlcXVlc3QudXJsfWAsICdyZXF1ZXN0LXRpbWVvdXQnKSk7XG5cdFx0XHRcdFx0ZmluYWxpemUoKTtcblx0XHRcdFx0fSwgcmVxdWVzdC50aW1lb3V0KTtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHJlcS5vbignZXJyb3InLCBmdW5jdGlvbiAoZXJyKSB7XG5cdFx0XHRyZWplY3QobmV3IEZldGNoRXJyb3IoYHJlcXVlc3QgdG8gJHtyZXF1ZXN0LnVybH0gZmFpbGVkLCByZWFzb246ICR7ZXJyLm1lc3NhZ2V9YCwgJ3N5c3RlbScsIGVycikpO1xuXG5cdFx0XHRpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UuYm9keSkge1xuXHRcdFx0XHRkZXN0cm95U3RyZWFtKHJlc3BvbnNlLmJvZHksIGVycik7XG5cdFx0XHR9XG5cblx0XHRcdGZpbmFsaXplKCk7XG5cdFx0fSk7XG5cblx0XHRmaXhSZXNwb25zZUNodW5rZWRUcmFuc2ZlckJhZEVuZGluZyhyZXEsIGZ1bmN0aW9uIChlcnIpIHtcblx0XHRcdGlmIChzaWduYWwgJiYgc2lnbmFsLmFib3J0ZWQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UuYm9keSkge1xuXHRcdFx0XHRkZXN0cm95U3RyZWFtKHJlc3BvbnNlLmJvZHksIGVycik7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHQvKiBjOCBpZ25vcmUgbmV4dCAxOCAqL1xuXHRcdGlmIChwYXJzZUludChwcm9jZXNzLnZlcnNpb24uc3Vic3RyaW5nKDEpKSA8IDE0KSB7XG5cdFx0XHQvLyBCZWZvcmUgTm9kZS5qcyAxNCwgcGlwZWxpbmUoKSBkb2VzIG5vdCBmdWxseSBzdXBwb3J0IGFzeW5jIGl0ZXJhdG9ycyBhbmQgZG9lcyBub3QgYWx3YXlzXG5cdFx0XHQvLyBwcm9wZXJseSBoYW5kbGUgd2hlbiB0aGUgc29ja2V0IGNsb3NlL2VuZCBldmVudHMgYXJlIG91dCBvZiBvcmRlci5cblx0XHRcdHJlcS5vbignc29ja2V0JywgZnVuY3Rpb24gKHMpIHtcblx0XHRcdFx0cy5hZGRMaXN0ZW5lcignY2xvc2UnLCBmdW5jdGlvbiAoaGFkRXJyb3IpIHtcblx0XHRcdFx0XHQvLyBpZiBhIGRhdGEgbGlzdGVuZXIgaXMgc3RpbGwgcHJlc2VudCB3ZSBkaWRuJ3QgZW5kIGNsZWFubHlcblx0XHRcdFx0XHRjb25zdCBoYXNEYXRhTGlzdGVuZXIgPSBzLmxpc3RlbmVyQ291bnQoJ2RhdGEnKSA+IDA7XG5cblx0XHRcdFx0XHQvLyBpZiBlbmQgaGFwcGVuZWQgYmVmb3JlIGNsb3NlIGJ1dCB0aGUgc29ja2V0IGRpZG4ndCBlbWl0IGFuIGVycm9yLCBkbyBpdCBub3dcblx0XHRcdFx0XHRpZiAocmVzcG9uc2UgJiYgaGFzRGF0YUxpc3RlbmVyICYmICFoYWRFcnJvciAmJiAhKHNpZ25hbCAmJiBzaWduYWwuYWJvcnRlZCkpIHtcblx0XHRcdFx0XHRcdGNvbnN0IGVyciA9IG5ldyBFcnJvcignUHJlbWF0dXJlIGNsb3NlJyk7XG5cdFx0XHRcdFx0XHRlcnIuY29kZSA9ICdFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRSc7XG5cdFx0XHRcdFx0XHRyZXNwb25zZS5ib2R5LmVtaXQoJ2Vycm9yJywgZXJyKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0cmVxLm9uKCdyZXNwb25zZScsIGZ1bmN0aW9uIChyZXMpIHtcblx0XHRcdGNsZWFyVGltZW91dChyZXFUaW1lb3V0KTtcblxuXHRcdFx0Y29uc3QgaGVhZGVycyA9IGNyZWF0ZUhlYWRlcnNMZW5pZW50KHJlcy5oZWFkZXJzKTtcblxuXHRcdFx0Ly8gSFRUUCBmZXRjaCBzdGVwIDVcblx0XHRcdGlmIChmZXRjaC5pc1JlZGlyZWN0KHJlcy5zdGF0dXNDb2RlKSkge1xuXHRcdFx0XHQvLyBIVFRQIGZldGNoIHN0ZXAgNS4yXG5cdFx0XHRcdGNvbnN0IGxvY2F0aW9uID0gaGVhZGVycy5nZXQoJ0xvY2F0aW9uJyk7XG5cblx0XHRcdFx0Ly8gSFRUUCBmZXRjaCBzdGVwIDUuM1xuXHRcdFx0XHRsZXQgbG9jYXRpb25VUkwgPSBudWxsO1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGxvY2F0aW9uVVJMID0gbG9jYXRpb24gPT09IG51bGwgPyBudWxsIDogbmV3IFVSTCQxKGxvY2F0aW9uLCByZXF1ZXN0LnVybCkudG9TdHJpbmcoKTtcblx0XHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdFx0Ly8gZXJyb3IgaGVyZSBjYW4gb25seSBiZSBpbnZhbGlkIFVSTCBpbiBMb2NhdGlvbjogaGVhZGVyXG5cdFx0XHRcdFx0Ly8gZG8gbm90IHRocm93IHdoZW4gb3B0aW9ucy5yZWRpcmVjdCA9PSBtYW51YWxcblx0XHRcdFx0XHQvLyBsZXQgdGhlIHVzZXIgZXh0cmFjdCB0aGUgZXJyb3JuZW91cyByZWRpcmVjdCBVUkxcblx0XHRcdFx0XHRpZiAocmVxdWVzdC5yZWRpcmVjdCAhPT0gJ21hbnVhbCcpIHtcblx0XHRcdFx0XHRcdHJlamVjdChuZXcgRmV0Y2hFcnJvcihgdXJpIHJlcXVlc3RlZCByZXNwb25kcyB3aXRoIGFuIGludmFsaWQgcmVkaXJlY3QgVVJMOiAke2xvY2F0aW9ufWAsICdpbnZhbGlkLXJlZGlyZWN0JykpO1xuXHRcdFx0XHRcdFx0ZmluYWxpemUoKTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBIVFRQIGZldGNoIHN0ZXAgNS41XG5cdFx0XHRcdHN3aXRjaCAocmVxdWVzdC5yZWRpcmVjdCkge1xuXHRcdFx0XHRcdGNhc2UgJ2Vycm9yJzpcblx0XHRcdFx0XHRcdHJlamVjdChuZXcgRmV0Y2hFcnJvcihgdXJpIHJlcXVlc3RlZCByZXNwb25kcyB3aXRoIGEgcmVkaXJlY3QsIHJlZGlyZWN0IG1vZGUgaXMgc2V0IHRvIGVycm9yOiAke3JlcXVlc3QudXJsfWAsICduby1yZWRpcmVjdCcpKTtcblx0XHRcdFx0XHRcdGZpbmFsaXplKCk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0Y2FzZSAnbWFudWFsJzpcblx0XHRcdFx0XHRcdC8vIG5vZGUtZmV0Y2gtc3BlY2lmaWMgc3RlcDogbWFrZSBtYW51YWwgcmVkaXJlY3QgYSBiaXQgZWFzaWVyIHRvIHVzZSBieSBzZXR0aW5nIHRoZSBMb2NhdGlvbiBoZWFkZXIgdmFsdWUgdG8gdGhlIHJlc29sdmVkIFVSTC5cblx0XHRcdFx0XHRcdGlmIChsb2NhdGlvblVSTCAhPT0gbnVsbCkge1xuXHRcdFx0XHRcdFx0XHQvLyBoYW5kbGUgY29ycnVwdGVkIGhlYWRlclxuXHRcdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRcdGhlYWRlcnMuc2V0KCdMb2NhdGlvbicsIGxvY2F0aW9uVVJMKTtcblx0XHRcdFx0XHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gaXN0YW5idWwgaWdub3JlIG5leHQ6IG5vZGVqcyBzZXJ2ZXIgcHJldmVudCBpbnZhbGlkIHJlc3BvbnNlIGhlYWRlcnMsIHdlIGNhbid0IHRlc3QgdGhpcyB0aHJvdWdoIG5vcm1hbCByZXF1ZXN0XG5cdFx0XHRcdFx0XHRcdFx0cmVqZWN0KGVycik7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ2ZvbGxvdyc6XG5cdFx0XHRcdFx0XHQvLyBIVFRQLXJlZGlyZWN0IGZldGNoIHN0ZXAgMlxuXHRcdFx0XHRcdFx0aWYgKGxvY2F0aW9uVVJMID09PSBudWxsKSB7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBIVFRQLXJlZGlyZWN0IGZldGNoIHN0ZXAgNVxuXHRcdFx0XHRcdFx0aWYgKHJlcXVlc3QuY291bnRlciA+PSByZXF1ZXN0LmZvbGxvdykge1xuXHRcdFx0XHRcdFx0XHRyZWplY3QobmV3IEZldGNoRXJyb3IoYG1heGltdW0gcmVkaXJlY3QgcmVhY2hlZCBhdDogJHtyZXF1ZXN0LnVybH1gLCAnbWF4LXJlZGlyZWN0JykpO1xuXHRcdFx0XHRcdFx0XHRmaW5hbGl6ZSgpO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIEhUVFAtcmVkaXJlY3QgZmV0Y2ggc3RlcCA2IChjb3VudGVyIGluY3JlbWVudClcblx0XHRcdFx0XHRcdC8vIENyZWF0ZSBhIG5ldyBSZXF1ZXN0IG9iamVjdC5cblx0XHRcdFx0XHRcdGNvbnN0IHJlcXVlc3RPcHRzID0ge1xuXHRcdFx0XHRcdFx0XHRoZWFkZXJzOiBuZXcgSGVhZGVycyhyZXF1ZXN0LmhlYWRlcnMpLFxuXHRcdFx0XHRcdFx0XHRmb2xsb3c6IHJlcXVlc3QuZm9sbG93LFxuXHRcdFx0XHRcdFx0XHRjb3VudGVyOiByZXF1ZXN0LmNvdW50ZXIgKyAxLFxuXHRcdFx0XHRcdFx0XHRhZ2VudDogcmVxdWVzdC5hZ2VudCxcblx0XHRcdFx0XHRcdFx0Y29tcHJlc3M6IHJlcXVlc3QuY29tcHJlc3MsXG5cdFx0XHRcdFx0XHRcdG1ldGhvZDogcmVxdWVzdC5tZXRob2QsXG5cdFx0XHRcdFx0XHRcdGJvZHk6IHJlcXVlc3QuYm9keSxcblx0XHRcdFx0XHRcdFx0c2lnbmFsOiByZXF1ZXN0LnNpZ25hbCxcblx0XHRcdFx0XHRcdFx0dGltZW91dDogcmVxdWVzdC50aW1lb3V0LFxuXHRcdFx0XHRcdFx0XHRzaXplOiByZXF1ZXN0LnNpemVcblx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRcdGlmICghaXNEb21haW5PclN1YmRvbWFpbihyZXF1ZXN0LnVybCwgbG9jYXRpb25VUkwpIHx8ICFpc1NhbWVQcm90b2NvbChyZXF1ZXN0LnVybCwgbG9jYXRpb25VUkwpKSB7XG5cdFx0XHRcdFx0XHRcdGZvciAoY29uc3QgbmFtZSBvZiBbJ2F1dGhvcml6YXRpb24nLCAnd3d3LWF1dGhlbnRpY2F0ZScsICdjb29raWUnLCAnY29va2llMiddKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmVxdWVzdE9wdHMuaGVhZGVycy5kZWxldGUobmFtZSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gSFRUUC1yZWRpcmVjdCBmZXRjaCBzdGVwIDlcblx0XHRcdFx0XHRcdGlmIChyZXMuc3RhdHVzQ29kZSAhPT0gMzAzICYmIHJlcXVlc3QuYm9keSAmJiBnZXRUb3RhbEJ5dGVzKHJlcXVlc3QpID09PSBudWxsKSB7XG5cdFx0XHRcdFx0XHRcdHJlamVjdChuZXcgRmV0Y2hFcnJvcignQ2Fubm90IGZvbGxvdyByZWRpcmVjdCB3aXRoIGJvZHkgYmVpbmcgYSByZWFkYWJsZSBzdHJlYW0nLCAndW5zdXBwb3J0ZWQtcmVkaXJlY3QnKSk7XG5cdFx0XHRcdFx0XHRcdGZpbmFsaXplKCk7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gSFRUUC1yZWRpcmVjdCBmZXRjaCBzdGVwIDExXG5cdFx0XHRcdFx0XHRpZiAocmVzLnN0YXR1c0NvZGUgPT09IDMwMyB8fCAocmVzLnN0YXR1c0NvZGUgPT09IDMwMSB8fCByZXMuc3RhdHVzQ29kZSA9PT0gMzAyKSAmJiByZXF1ZXN0Lm1ldGhvZCA9PT0gJ1BPU1QnKSB7XG5cdFx0XHRcdFx0XHRcdHJlcXVlc3RPcHRzLm1ldGhvZCA9ICdHRVQnO1xuXHRcdFx0XHRcdFx0XHRyZXF1ZXN0T3B0cy5ib2R5ID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0XHRyZXF1ZXN0T3B0cy5oZWFkZXJzLmRlbGV0ZSgnY29udGVudC1sZW5ndGgnKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gSFRUUC1yZWRpcmVjdCBmZXRjaCBzdGVwIDE1XG5cdFx0XHRcdFx0XHRyZXNvbHZlKGZldGNoKG5ldyBSZXF1ZXN0KGxvY2F0aW9uVVJMLCByZXF1ZXN0T3B0cykpKTtcblx0XHRcdFx0XHRcdGZpbmFsaXplKCk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gcHJlcGFyZSByZXNwb25zZVxuXHRcdFx0cmVzLm9uY2UoJ2VuZCcsIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0aWYgKHNpZ25hbCkgc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnRBbmRGaW5hbGl6ZSk7XG5cdFx0XHR9KTtcblx0XHRcdGxldCBib2R5ID0gcmVzLnBpcGUobmV3IFBhc3NUaHJvdWdoJDEoKSk7XG5cblx0XHRcdGNvbnN0IHJlc3BvbnNlX29wdGlvbnMgPSB7XG5cdFx0XHRcdHVybDogcmVxdWVzdC51cmwsXG5cdFx0XHRcdHN0YXR1czogcmVzLnN0YXR1c0NvZGUsXG5cdFx0XHRcdHN0YXR1c1RleHQ6IHJlcy5zdGF0dXNNZXNzYWdlLFxuXHRcdFx0XHRoZWFkZXJzOiBoZWFkZXJzLFxuXHRcdFx0XHRzaXplOiByZXF1ZXN0LnNpemUsXG5cdFx0XHRcdHRpbWVvdXQ6IHJlcXVlc3QudGltZW91dCxcblx0XHRcdFx0Y291bnRlcjogcmVxdWVzdC5jb3VudGVyXG5cdFx0XHR9O1xuXG5cdFx0XHQvLyBIVFRQLW5ldHdvcmsgZmV0Y2ggc3RlcCAxMi4xLjEuM1xuXHRcdFx0Y29uc3QgY29kaW5ncyA9IGhlYWRlcnMuZ2V0KCdDb250ZW50LUVuY29kaW5nJyk7XG5cblx0XHRcdC8vIEhUVFAtbmV0d29yayBmZXRjaCBzdGVwIDEyLjEuMS40OiBoYW5kbGUgY29udGVudCBjb2RpbmdzXG5cblx0XHRcdC8vIGluIGZvbGxvd2luZyBzY2VuYXJpb3Mgd2UgaWdub3JlIGNvbXByZXNzaW9uIHN1cHBvcnRcblx0XHRcdC8vIDEuIGNvbXByZXNzaW9uIHN1cHBvcnQgaXMgZGlzYWJsZWRcblx0XHRcdC8vIDIuIEhFQUQgcmVxdWVzdFxuXHRcdFx0Ly8gMy4gbm8gQ29udGVudC1FbmNvZGluZyBoZWFkZXJcblx0XHRcdC8vIDQuIG5vIGNvbnRlbnQgcmVzcG9uc2UgKDIwNClcblx0XHRcdC8vIDUuIGNvbnRlbnQgbm90IG1vZGlmaWVkIHJlc3BvbnNlICgzMDQpXG5cdFx0XHRpZiAoIXJlcXVlc3QuY29tcHJlc3MgfHwgcmVxdWVzdC5tZXRob2QgPT09ICdIRUFEJyB8fCBjb2RpbmdzID09PSBudWxsIHx8IHJlcy5zdGF0dXNDb2RlID09PSAyMDQgfHwgcmVzLnN0YXR1c0NvZGUgPT09IDMwNCkge1xuXHRcdFx0XHRyZXNwb25zZSA9IG5ldyBSZXNwb25zZShib2R5LCByZXNwb25zZV9vcHRpb25zKTtcblx0XHRcdFx0cmVzb2x2ZShyZXNwb25zZSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gRm9yIE5vZGUgdjYrXG5cdFx0XHQvLyBCZSBsZXNzIHN0cmljdCB3aGVuIGRlY29kaW5nIGNvbXByZXNzZWQgcmVzcG9uc2VzLCBzaW5jZSBzb21ldGltZXNcblx0XHRcdC8vIHNlcnZlcnMgc2VuZCBzbGlnaHRseSBpbnZhbGlkIHJlc3BvbnNlcyB0aGF0IGFyZSBzdGlsbCBhY2NlcHRlZFxuXHRcdFx0Ly8gYnkgY29tbW9uIGJyb3dzZXJzLlxuXHRcdFx0Ly8gQWx3YXlzIHVzaW5nIFpfU1lOQ19GTFVTSCBpcyB3aGF0IGNVUkwgZG9lcy5cblx0XHRcdGNvbnN0IHpsaWJPcHRpb25zID0ge1xuXHRcdFx0XHRmbHVzaDogemxpYi5aX1NZTkNfRkxVU0gsXG5cdFx0XHRcdGZpbmlzaEZsdXNoOiB6bGliLlpfU1lOQ19GTFVTSFxuXHRcdFx0fTtcblxuXHRcdFx0Ly8gZm9yIGd6aXBcblx0XHRcdGlmIChjb2RpbmdzID09ICdnemlwJyB8fCBjb2RpbmdzID09ICd4LWd6aXAnKSB7XG5cdFx0XHRcdGJvZHkgPSBib2R5LnBpcGUoemxpYi5jcmVhdGVHdW56aXAoemxpYk9wdGlvbnMpKTtcblx0XHRcdFx0cmVzcG9uc2UgPSBuZXcgUmVzcG9uc2UoYm9keSwgcmVzcG9uc2Vfb3B0aW9ucyk7XG5cdFx0XHRcdHJlc29sdmUocmVzcG9uc2UpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIGZvciBkZWZsYXRlXG5cdFx0XHRpZiAoY29kaW5ncyA9PSAnZGVmbGF0ZScgfHwgY29kaW5ncyA9PSAneC1kZWZsYXRlJykge1xuXHRcdFx0XHQvLyBoYW5kbGUgdGhlIGluZmFtb3VzIHJhdyBkZWZsYXRlIHJlc3BvbnNlIGZyb20gb2xkIHNlcnZlcnNcblx0XHRcdFx0Ly8gYSBoYWNrIGZvciBvbGQgSUlTIGFuZCBBcGFjaGUgc2VydmVyc1xuXHRcdFx0XHRjb25zdCByYXcgPSByZXMucGlwZShuZXcgUGFzc1Rocm91Z2gkMSgpKTtcblx0XHRcdFx0cmF3Lm9uY2UoJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHtcblx0XHRcdFx0XHQvLyBzZWUgaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8zNzUxOTgyOFxuXHRcdFx0XHRcdGlmICgoY2h1bmtbMF0gJiAweDBGKSA9PT0gMHgwOCkge1xuXHRcdFx0XHRcdFx0Ym9keSA9IGJvZHkucGlwZSh6bGliLmNyZWF0ZUluZmxhdGUoKSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGJvZHkgPSBib2R5LnBpcGUoemxpYi5jcmVhdGVJbmZsYXRlUmF3KCkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXNwb25zZSA9IG5ldyBSZXNwb25zZShib2R5LCByZXNwb25zZV9vcHRpb25zKTtcblx0XHRcdFx0XHRyZXNvbHZlKHJlc3BvbnNlKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHJhdy5vbignZW5kJywgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdC8vIHNvbWUgb2xkIElJUyBzZXJ2ZXJzIHJldHVybiB6ZXJvLWxlbmd0aCBPSyBkZWZsYXRlIHJlc3BvbnNlcywgc28gJ2RhdGEnIGlzIG5ldmVyIGVtaXR0ZWQuXG5cdFx0XHRcdFx0aWYgKCFyZXNwb25zZSkge1xuXHRcdFx0XHRcdFx0cmVzcG9uc2UgPSBuZXcgUmVzcG9uc2UoYm9keSwgcmVzcG9uc2Vfb3B0aW9ucyk7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKHJlc3BvbnNlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIGZvciBiclxuXHRcdFx0aWYgKGNvZGluZ3MgPT0gJ2JyJyAmJiB0eXBlb2YgemxpYi5jcmVhdGVCcm90bGlEZWNvbXByZXNzID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdGJvZHkgPSBib2R5LnBpcGUoemxpYi5jcmVhdGVCcm90bGlEZWNvbXByZXNzKCkpO1xuXHRcdFx0XHRyZXNwb25zZSA9IG5ldyBSZXNwb25zZShib2R5LCByZXNwb25zZV9vcHRpb25zKTtcblx0XHRcdFx0cmVzb2x2ZShyZXNwb25zZSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gb3RoZXJ3aXNlLCB1c2UgcmVzcG9uc2UgYXMtaXNcblx0XHRcdHJlc3BvbnNlID0gbmV3IFJlc3BvbnNlKGJvZHksIHJlc3BvbnNlX29wdGlvbnMpO1xuXHRcdFx0cmVzb2x2ZShyZXNwb25zZSk7XG5cdFx0fSk7XG5cblx0XHR3cml0ZVRvU3RyZWFtKHJlcSwgcmVxdWVzdCk7XG5cdH0pO1xufVxuZnVuY3Rpb24gZml4UmVzcG9uc2VDaHVua2VkVHJhbnNmZXJCYWRFbmRpbmcocmVxdWVzdCwgZXJyb3JDYWxsYmFjaykge1xuXHRsZXQgc29ja2V0O1xuXG5cdHJlcXVlc3Qub24oJ3NvY2tldCcsIGZ1bmN0aW9uIChzKSB7XG5cdFx0c29ja2V0ID0gcztcblx0fSk7XG5cblx0cmVxdWVzdC5vbigncmVzcG9uc2UnLCBmdW5jdGlvbiAocmVzcG9uc2UpIHtcblx0XHRjb25zdCBoZWFkZXJzID0gcmVzcG9uc2UuaGVhZGVycztcblxuXHRcdGlmIChoZWFkZXJzWyd0cmFuc2Zlci1lbmNvZGluZyddID09PSAnY2h1bmtlZCcgJiYgIWhlYWRlcnNbJ2NvbnRlbnQtbGVuZ3RoJ10pIHtcblx0XHRcdHJlc3BvbnNlLm9uY2UoJ2Nsb3NlJywgZnVuY3Rpb24gKGhhZEVycm9yKSB7XG5cdFx0XHRcdC8vIHRlc3RzIGZvciBzb2NrZXQgcHJlc2VuY2UsIGFzIGluIHNvbWUgc2l0dWF0aW9ucyB0aGVcblx0XHRcdFx0Ly8gdGhlICdzb2NrZXQnIGV2ZW50IGlzIG5vdCB0cmlnZ2VyZWQgZm9yIHRoZSByZXF1ZXN0XG5cdFx0XHRcdC8vIChoYXBwZW5zIGluIGRlbm8pLCBhdm9pZHMgYFR5cGVFcnJvcmBcblx0XHRcdFx0Ly8gaWYgYSBkYXRhIGxpc3RlbmVyIGlzIHN0aWxsIHByZXNlbnQgd2UgZGlkbid0IGVuZCBjbGVhbmx5XG5cdFx0XHRcdGNvbnN0IGhhc0RhdGFMaXN0ZW5lciA9IHNvY2tldCAmJiBzb2NrZXQubGlzdGVuZXJDb3VudCgnZGF0YScpID4gMDtcblxuXHRcdFx0XHRpZiAoaGFzRGF0YUxpc3RlbmVyICYmICFoYWRFcnJvcikge1xuXHRcdFx0XHRcdGNvbnN0IGVyciA9IG5ldyBFcnJvcignUHJlbWF0dXJlIGNsb3NlJyk7XG5cdFx0XHRcdFx0ZXJyLmNvZGUgPSAnRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UnO1xuXHRcdFx0XHRcdGVycm9yQ2FsbGJhY2soZXJyKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KTtcbn1cblxuZnVuY3Rpb24gZGVzdHJveVN0cmVhbShzdHJlYW0sIGVycikge1xuXHRpZiAoc3RyZWFtLmRlc3Ryb3kpIHtcblx0XHRzdHJlYW0uZGVzdHJveShlcnIpO1xuXHR9IGVsc2Uge1xuXHRcdC8vIG5vZGUgPCA4XG5cdFx0c3RyZWFtLmVtaXQoJ2Vycm9yJywgZXJyKTtcblx0XHRzdHJlYW0uZW5kKCk7XG5cdH1cbn1cblxuLyoqXG4gKiBSZWRpcmVjdCBjb2RlIG1hdGNoaW5nXG4gKlxuICogQHBhcmFtICAgTnVtYmVyICAgY29kZSAgU3RhdHVzIGNvZGVcbiAqIEByZXR1cm4gIEJvb2xlYW5cbiAqL1xuZmV0Y2guaXNSZWRpcmVjdCA9IGZ1bmN0aW9uIChjb2RlKSB7XG5cdHJldHVybiBjb2RlID09PSAzMDEgfHwgY29kZSA9PT0gMzAyIHx8IGNvZGUgPT09IDMwMyB8fCBjb2RlID09PSAzMDcgfHwgY29kZSA9PT0gMzA4O1xufTtcblxuLy8gZXhwb3NlIFByb21pc2VcbmZldGNoLlByb21pc2UgPSBnbG9iYWwuUHJvbWlzZTtcblxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmV0Y2g7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlZmF1bHQgPSBleHBvcnRzO1xuZXhwb3J0cy5IZWFkZXJzID0gSGVhZGVycztcbmV4cG9ydHMuUmVxdWVzdCA9IFJlcXVlc3Q7XG5leHBvcnRzLlJlc3BvbnNlID0gUmVzcG9uc2U7XG5leHBvcnRzLkZldGNoRXJyb3IgPSBGZXRjaEVycm9yO1xuZXhwb3J0cy5BYm9ydEVycm9yID0gQWJvcnRFcnJvcjtcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jbGFzcyBEZXByZWNhdGlvbiBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpOyAvLyBNYWludGFpbnMgcHJvcGVyIHN0YWNrIHRyYWNlIChvbmx5IGF2YWlsYWJsZSBvbiBWOClcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cbiAgICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuICAgIH1cblxuICAgIHRoaXMubmFtZSA9ICdEZXByZWNhdGlvbic7XG4gIH1cblxufVxuXG5leHBvcnRzLkRlcHJlY2F0aW9uID0gRGVwcmVjYXRpb247XG4iLAogICAgIi8vIFJldHVybnMgYSB3cmFwcGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHdyYXBwZWQgY2FsbGJhY2tcbi8vIFRoZSB3cmFwcGVyIGZ1bmN0aW9uIHNob3VsZCBkbyBzb21lIHN0dWZmLCBhbmQgcmV0dXJuIGFcbi8vIHByZXN1bWFibHkgZGlmZmVyZW50IGNhbGxiYWNrIGZ1bmN0aW9uLlxuLy8gVGhpcyBtYWtlcyBzdXJlIHRoYXQgb3duIHByb3BlcnRpZXMgYXJlIHJldGFpbmVkLCBzbyB0aGF0XG4vLyBkZWNvcmF0aW9ucyBhbmQgc3VjaCBhcmUgbm90IGxvc3QgYWxvbmcgdGhlIHdheS5cbm1vZHVsZS5leHBvcnRzID0gd3JhcHB5XG5mdW5jdGlvbiB3cmFwcHkgKGZuLCBjYikge1xuICBpZiAoZm4gJiYgY2IpIHJldHVybiB3cmFwcHkoZm4pKGNiKVxuXG4gIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbmVlZCB3cmFwcGVyIGZ1bmN0aW9uJylcblxuICBPYmplY3Qua2V5cyhmbikuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgIHdyYXBwZXJba10gPSBmbltrXVxuICB9KVxuXG4gIHJldHVybiB3cmFwcGVyXG5cbiAgZnVuY3Rpb24gd3JhcHBlcigpIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXVxuICAgIH1cbiAgICB2YXIgcmV0ID0gZm4uYXBwbHkodGhpcywgYXJncylcbiAgICB2YXIgY2IgPSBhcmdzW2FyZ3MubGVuZ3RoLTFdXG4gICAgaWYgKHR5cGVvZiByZXQgPT09ICdmdW5jdGlvbicgJiYgcmV0ICE9PSBjYikge1xuICAgICAgT2JqZWN0LmtleXMoY2IpLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgICAgICAgcmV0W2tdID0gY2Jba11cbiAgICAgIH0pXG4gICAgfVxuICAgIHJldHVybiByZXRcbiAgfVxufVxuIiwKICAgICJ2YXIgd3JhcHB5ID0gcmVxdWlyZSgnd3JhcHB5Jylcbm1vZHVsZS5leHBvcnRzID0gd3JhcHB5KG9uY2UpXG5tb2R1bGUuZXhwb3J0cy5zdHJpY3QgPSB3cmFwcHkob25jZVN0cmljdClcblxub25jZS5wcm90byA9IG9uY2UoZnVuY3Rpb24gKCkge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRnVuY3Rpb24ucHJvdG90eXBlLCAnb25jZScsIHtcbiAgICB2YWx1ZTogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIG9uY2UodGhpcylcbiAgICB9LFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KVxuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGdW5jdGlvbi5wcm90b3R5cGUsICdvbmNlU3RyaWN0Jywge1xuICAgIHZhbHVlOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gb25jZVN0cmljdCh0aGlzKVxuICAgIH0sXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pXG59KVxuXG5mdW5jdGlvbiBvbmNlIChmbikge1xuICB2YXIgZiA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoZi5jYWxsZWQpIHJldHVybiBmLnZhbHVlXG4gICAgZi5jYWxsZWQgPSB0cnVlXG4gICAgcmV0dXJuIGYudmFsdWUgPSBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gIH1cbiAgZi5jYWxsZWQgPSBmYWxzZVxuICByZXR1cm4gZlxufVxuXG5mdW5jdGlvbiBvbmNlU3RyaWN0IChmbikge1xuICB2YXIgZiA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoZi5jYWxsZWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZi5vbmNlRXJyb3IpXG4gICAgZi5jYWxsZWQgPSB0cnVlXG4gICAgcmV0dXJuIGYudmFsdWUgPSBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gIH1cbiAgdmFyIG5hbWUgPSBmbi5uYW1lIHx8ICdGdW5jdGlvbiB3cmFwcGVkIHdpdGggYG9uY2VgJ1xuICBmLm9uY2VFcnJvciA9IG5hbWUgKyBcIiBzaG91bGRuJ3QgYmUgY2FsbGVkIG1vcmUgdGhhbiBvbmNlXCJcbiAgZi5jYWxsZWQgPSBmYWxzZVxuICByZXR1cm4gZlxufVxuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wRGVmYXVsdCAoZXgpIHsgcmV0dXJuIChleCAmJiAodHlwZW9mIGV4ID09PSAnb2JqZWN0JykgJiYgJ2RlZmF1bHQnIGluIGV4KSA/IGV4WydkZWZhdWx0J10gOiBleDsgfVxuXG52YXIgZGVwcmVjYXRpb24gPSByZXF1aXJlKCdkZXByZWNhdGlvbicpO1xudmFyIG9uY2UgPSBfaW50ZXJvcERlZmF1bHQocmVxdWlyZSgnb25jZScpKTtcblxuY29uc3QgbG9nT25jZUNvZGUgPSBvbmNlKGRlcHJlY2F0aW9uID0+IGNvbnNvbGUud2FybihkZXByZWNhdGlvbikpO1xuY29uc3QgbG9nT25jZUhlYWRlcnMgPSBvbmNlKGRlcHJlY2F0aW9uID0+IGNvbnNvbGUud2FybihkZXByZWNhdGlvbikpO1xuLyoqXG4gKiBFcnJvciB3aXRoIGV4dHJhIHByb3BlcnRpZXMgdG8gaGVscCB3aXRoIGRlYnVnZ2luZ1xuICovXG5cbmNsYXNzIFJlcXVlc3RFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZSwgc3RhdHVzQ29kZSwgb3B0aW9ucykge1xuICAgIHN1cGVyKG1lc3NhZ2UpOyAvLyBNYWludGFpbnMgcHJvcGVyIHN0YWNrIHRyYWNlIChvbmx5IGF2YWlsYWJsZSBvbiBWOClcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cbiAgICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuICAgIH1cblxuICAgIHRoaXMubmFtZSA9IFwiSHR0cEVycm9yXCI7XG4gICAgdGhpcy5zdGF0dXMgPSBzdGF0dXNDb2RlO1xuICAgIGxldCBoZWFkZXJzO1xuXG4gICAgaWYgKFwiaGVhZGVyc1wiIGluIG9wdGlvbnMgJiYgdHlwZW9mIG9wdGlvbnMuaGVhZGVycyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgaGVhZGVycyA9IG9wdGlvbnMuaGVhZGVycztcbiAgICB9XG5cbiAgICBpZiAoXCJyZXNwb25zZVwiIGluIG9wdGlvbnMpIHtcbiAgICAgIHRoaXMucmVzcG9uc2UgPSBvcHRpb25zLnJlc3BvbnNlO1xuICAgICAgaGVhZGVycyA9IG9wdGlvbnMucmVzcG9uc2UuaGVhZGVycztcbiAgICB9IC8vIHJlZGFjdCByZXF1ZXN0IGNyZWRlbnRpYWxzIHdpdGhvdXQgbXV0YXRpbmcgb3JpZ2luYWwgcmVxdWVzdCBvcHRpb25zXG5cblxuICAgIGNvbnN0IHJlcXVlc3RDb3B5ID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5yZXF1ZXN0KTtcblxuICAgIGlmIChvcHRpb25zLnJlcXVlc3QuaGVhZGVycy5hdXRob3JpemF0aW9uKSB7XG4gICAgICByZXF1ZXN0Q29weS5oZWFkZXJzID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5yZXF1ZXN0LmhlYWRlcnMsIHtcbiAgICAgICAgYXV0aG9yaXphdGlvbjogb3B0aW9ucy5yZXF1ZXN0LmhlYWRlcnMuYXV0aG9yaXphdGlvbi5yZXBsYWNlKC8gLiokLywgXCIgW1JFREFDVEVEXVwiKVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVxdWVzdENvcHkudXJsID0gcmVxdWVzdENvcHkudXJsIC8vIGNsaWVudF9pZCAmIGNsaWVudF9zZWNyZXQgY2FuIGJlIHBhc3NlZCBhcyBVUkwgcXVlcnkgcGFyYW1ldGVycyB0byBpbmNyZWFzZSByYXRlIGxpbWl0XG4gICAgLy8gc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmdpdGh1Yi5jb20vdjMvI2luY3JlYXNpbmctdGhlLXVuYXV0aGVudGljYXRlZC1yYXRlLWxpbWl0LWZvci1vYXV0aC1hcHBsaWNhdGlvbnNcbiAgICAucmVwbGFjZSgvXFxiY2xpZW50X3NlY3JldD1cXHcrL2csIFwiY2xpZW50X3NlY3JldD1bUkVEQUNURURdXCIpIC8vIE9BdXRoIHRva2VucyBjYW4gYmUgcGFzc2VkIGFzIFVSTCBxdWVyeSBwYXJhbWV0ZXJzLCBhbHRob3VnaCBpdCBpcyBub3QgcmVjb21tZW5kZWRcbiAgICAvLyBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuZ2l0aHViLmNvbS92My8jb2F1dGgyLXRva2VuLXNlbnQtaW4tYS1oZWFkZXJcbiAgICAucmVwbGFjZSgvXFxiYWNjZXNzX3Rva2VuPVxcdysvZywgXCJhY2Nlc3NfdG9rZW49W1JFREFDVEVEXVwiKTtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0Q29weTsgLy8gZGVwcmVjYXRpb25zXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJjb2RlXCIsIHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgbG9nT25jZUNvZGUobmV3IGRlcHJlY2F0aW9uLkRlcHJlY2F0aW9uKFwiW0BvY3Rva2l0L3JlcXVlc3QtZXJyb3JdIGBlcnJvci5jb2RlYCBpcyBkZXByZWNhdGVkLCB1c2UgYGVycm9yLnN0YXR1c2AuXCIpKTtcbiAgICAgICAgcmV0dXJuIHN0YXR1c0NvZGU7XG4gICAgICB9XG5cbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJoZWFkZXJzXCIsIHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgbG9nT25jZUhlYWRlcnMobmV3IGRlcHJlY2F0aW9uLkRlcHJlY2F0aW9uKFwiW0BvY3Rva2l0L3JlcXVlc3QtZXJyb3JdIGBlcnJvci5oZWFkZXJzYCBpcyBkZXByZWNhdGVkLCB1c2UgYGVycm9yLnJlc3BvbnNlLmhlYWRlcnNgLlwiKSk7XG4gICAgICAgIHJldHVybiBoZWFkZXJzIHx8IHt9O1xuICAgICAgfVxuXG4gICAgfSk7XG4gIH1cblxufVxuXG5leHBvcnRzLlJlcXVlc3RFcnJvciA9IFJlcXVlc3RFcnJvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wRGVmYXVsdCAoZXgpIHsgcmV0dXJuIChleCAmJiAodHlwZW9mIGV4ID09PSAnb2JqZWN0JykgJiYgJ2RlZmF1bHQnIGluIGV4KSA/IGV4WydkZWZhdWx0J10gOiBleDsgfVxuXG52YXIgZW5kcG9pbnQgPSByZXF1aXJlKCdAb2N0b2tpdC9lbmRwb2ludCcpO1xudmFyIHVuaXZlcnNhbFVzZXJBZ2VudCA9IHJlcXVpcmUoJ3VuaXZlcnNhbC11c2VyLWFnZW50Jyk7XG52YXIgaXNQbGFpbk9iamVjdCA9IHJlcXVpcmUoJ2lzLXBsYWluLW9iamVjdCcpO1xudmFyIG5vZGVGZXRjaCA9IF9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKCdub2RlLWZldGNoJykpO1xudmFyIHJlcXVlc3RFcnJvciA9IHJlcXVpcmUoJ0BvY3Rva2l0L3JlcXVlc3QtZXJyb3InKTtcblxuY29uc3QgVkVSU0lPTiA9IFwiNS42LjNcIjtcblxuZnVuY3Rpb24gZ2V0QnVmZmVyUmVzcG9uc2UocmVzcG9uc2UpIHtcbiAgcmV0dXJuIHJlc3BvbnNlLmFycmF5QnVmZmVyKCk7XG59XG5cbmZ1bmN0aW9uIGZldGNoV3JhcHBlcihyZXF1ZXN0T3B0aW9ucykge1xuICBjb25zdCBsb2cgPSByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0ICYmIHJlcXVlc3RPcHRpb25zLnJlcXVlc3QubG9nID8gcmVxdWVzdE9wdGlvbnMucmVxdWVzdC5sb2cgOiBjb25zb2xlO1xuXG4gIGlmIChpc1BsYWluT2JqZWN0LmlzUGxhaW5PYmplY3QocmVxdWVzdE9wdGlvbnMuYm9keSkgfHwgQXJyYXkuaXNBcnJheShyZXF1ZXN0T3B0aW9ucy5ib2R5KSkge1xuICAgIHJlcXVlc3RPcHRpb25zLmJvZHkgPSBKU09OLnN0cmluZ2lmeShyZXF1ZXN0T3B0aW9ucy5ib2R5KTtcbiAgfVxuXG4gIGxldCBoZWFkZXJzID0ge307XG4gIGxldCBzdGF0dXM7XG4gIGxldCB1cmw7XG4gIGNvbnN0IGZldGNoID0gcmVxdWVzdE9wdGlvbnMucmVxdWVzdCAmJiByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0LmZldGNoIHx8IG5vZGVGZXRjaDtcbiAgcmV0dXJuIGZldGNoKHJlcXVlc3RPcHRpb25zLnVybCwgT2JqZWN0LmFzc2lnbih7XG4gICAgbWV0aG9kOiByZXF1ZXN0T3B0aW9ucy5tZXRob2QsXG4gICAgYm9keTogcmVxdWVzdE9wdGlvbnMuYm9keSxcbiAgICBoZWFkZXJzOiByZXF1ZXN0T3B0aW9ucy5oZWFkZXJzLFxuICAgIHJlZGlyZWN0OiByZXF1ZXN0T3B0aW9ucy5yZWRpcmVjdFxuICB9LCAvLyBgcmVxdWVzdE9wdGlvbnMucmVxdWVzdC5hZ2VudGAgdHlwZSBpcyBpbmNvbXBhdGlibGVcbiAgLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9vY3Rva2l0L3R5cGVzLnRzL3B1bGwvMjY0XG4gIHJlcXVlc3RPcHRpb25zLnJlcXVlc3QpKS50aGVuKGFzeW5jIHJlc3BvbnNlID0+IHtcbiAgICB1cmwgPSByZXNwb25zZS51cmw7XG4gICAgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuXG4gICAgZm9yIChjb25zdCBrZXlBbmRWYWx1ZSBvZiByZXNwb25zZS5oZWFkZXJzKSB7XG4gICAgICBoZWFkZXJzW2tleUFuZFZhbHVlWzBdXSA9IGtleUFuZFZhbHVlWzFdO1xuICAgIH1cblxuICAgIGlmIChcImRlcHJlY2F0aW9uXCIgaW4gaGVhZGVycykge1xuICAgICAgY29uc3QgbWF0Y2hlcyA9IGhlYWRlcnMubGluayAmJiBoZWFkZXJzLmxpbmsubWF0Y2goLzwoW14+XSspPjsgcmVsPVwiZGVwcmVjYXRpb25cIi8pO1xuICAgICAgY29uc3QgZGVwcmVjYXRpb25MaW5rID0gbWF0Y2hlcyAmJiBtYXRjaGVzLnBvcCgpO1xuICAgICAgbG9nLndhcm4oYFtAb2N0b2tpdC9yZXF1ZXN0XSBcIiR7cmVxdWVzdE9wdGlvbnMubWV0aG9kfSAke3JlcXVlc3RPcHRpb25zLnVybH1cIiBpcyBkZXByZWNhdGVkLiBJdCBpcyBzY2hlZHVsZWQgdG8gYmUgcmVtb3ZlZCBvbiAke2hlYWRlcnMuc3Vuc2V0fSR7ZGVwcmVjYXRpb25MaW5rID8gYC4gU2VlICR7ZGVwcmVjYXRpb25MaW5rfWAgOiBcIlwifWApO1xuICAgIH1cblxuICAgIGlmIChzdGF0dXMgPT09IDIwNCB8fCBzdGF0dXMgPT09IDIwNSkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gR2l0SHViIEFQSSByZXR1cm5zIDIwMCBmb3IgSEVBRCByZXF1ZXN0c1xuXG5cbiAgICBpZiAocmVxdWVzdE9wdGlvbnMubWV0aG9kID09PSBcIkhFQURcIikge1xuICAgICAgaWYgKHN0YXR1cyA8IDQwMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyByZXF1ZXN0RXJyb3IuUmVxdWVzdEVycm9yKHJlc3BvbnNlLnN0YXR1c1RleHQsIHN0YXR1cywge1xuICAgICAgICByZXNwb25zZToge1xuICAgICAgICAgIHVybCxcbiAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICBkYXRhOiB1bmRlZmluZWRcbiAgICAgICAgfSxcbiAgICAgICAgcmVxdWVzdDogcmVxdWVzdE9wdGlvbnNcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChzdGF0dXMgPT09IDMwNCkge1xuICAgICAgdGhyb3cgbmV3IHJlcXVlc3RFcnJvci5SZXF1ZXN0RXJyb3IoXCJOb3QgbW9kaWZpZWRcIiwgc3RhdHVzLCB7XG4gICAgICAgIHJlc3BvbnNlOiB7XG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIHN0YXR1cyxcbiAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgIGRhdGE6IGF3YWl0IGdldFJlc3BvbnNlRGF0YShyZXNwb25zZSlcbiAgICAgICAgfSxcbiAgICAgICAgcmVxdWVzdDogcmVxdWVzdE9wdGlvbnNcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChzdGF0dXMgPj0gNDAwKSB7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ2V0UmVzcG9uc2VEYXRhKHJlc3BvbnNlKTtcbiAgICAgIGNvbnN0IGVycm9yID0gbmV3IHJlcXVlc3RFcnJvci5SZXF1ZXN0RXJyb3IodG9FcnJvck1lc3NhZ2UoZGF0YSksIHN0YXR1cywge1xuICAgICAgICByZXNwb25zZToge1xuICAgICAgICAgIHVybCxcbiAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICBkYXRhXG4gICAgICAgIH0sXG4gICAgICAgIHJlcXVlc3Q6IHJlcXVlc3RPcHRpb25zXG4gICAgICB9KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cblxuICAgIHJldHVybiBnZXRSZXNwb25zZURhdGEocmVzcG9uc2UpO1xuICB9KS50aGVuKGRhdGEgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXMsXG4gICAgICB1cmwsXG4gICAgICBoZWFkZXJzLFxuICAgICAgZGF0YVxuICAgIH07XG4gIH0pLmNhdGNoKGVycm9yID0+IHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiByZXF1ZXN0RXJyb3IuUmVxdWVzdEVycm9yKSB0aHJvdyBlcnJvcjtcbiAgICB0aHJvdyBuZXcgcmVxdWVzdEVycm9yLlJlcXVlc3RFcnJvcihlcnJvci5tZXNzYWdlLCA1MDAsIHtcbiAgICAgIHJlcXVlc3Q6IHJlcXVlc3RPcHRpb25zXG4gICAgfSk7XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRSZXNwb25zZURhdGEocmVzcG9uc2UpIHtcbiAgY29uc3QgY29udGVudFR5cGUgPSByZXNwb25zZS5oZWFkZXJzLmdldChcImNvbnRlbnQtdHlwZVwiKTtcblxuICBpZiAoL2FwcGxpY2F0aW9uXFwvanNvbi8udGVzdChjb250ZW50VHlwZSkpIHtcbiAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpO1xuICB9XG5cbiAgaWYgKCFjb250ZW50VHlwZSB8fCAvXnRleHRcXC98Y2hhcnNldD11dGYtOCQvLnRlc3QoY29udGVudFR5cGUpKSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLnRleHQoKTtcbiAgfVxuXG4gIHJldHVybiBnZXRCdWZmZXJSZXNwb25zZShyZXNwb25zZSk7XG59XG5cbmZ1bmN0aW9uIHRvRXJyb3JNZXNzYWdlKGRhdGEpIHtcbiAgaWYgKHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiKSByZXR1cm4gZGF0YTsgLy8gaXN0YW5idWwgaWdub3JlIGVsc2UgLSBqdXN0IGluIGNhc2VcblxuICBpZiAoXCJtZXNzYWdlXCIgaW4gZGF0YSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEuZXJyb3JzKSkge1xuICAgICAgcmV0dXJuIGAke2RhdGEubWVzc2FnZX06ICR7ZGF0YS5lcnJvcnMubWFwKEpTT04uc3RyaW5naWZ5KS5qb2luKFwiLCBcIil9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YS5tZXNzYWdlO1xuICB9IC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0IC0ganVzdCBpbiBjYXNlXG5cblxuICByZXR1cm4gYFVua25vd24gZXJyb3I6ICR7SlNPTi5zdHJpbmdpZnkoZGF0YSl9YDtcbn1cblxuZnVuY3Rpb24gd2l0aERlZmF1bHRzKG9sZEVuZHBvaW50LCBuZXdEZWZhdWx0cykge1xuICBjb25zdCBlbmRwb2ludCA9IG9sZEVuZHBvaW50LmRlZmF1bHRzKG5ld0RlZmF1bHRzKTtcblxuICBjb25zdCBuZXdBcGkgPSBmdW5jdGlvbiAocm91dGUsIHBhcmFtZXRlcnMpIHtcbiAgICBjb25zdCBlbmRwb2ludE9wdGlvbnMgPSBlbmRwb2ludC5tZXJnZShyb3V0ZSwgcGFyYW1ldGVycyk7XG5cbiAgICBpZiAoIWVuZHBvaW50T3B0aW9ucy5yZXF1ZXN0IHx8ICFlbmRwb2ludE9wdGlvbnMucmVxdWVzdC5ob29rKSB7XG4gICAgICByZXR1cm4gZmV0Y2hXcmFwcGVyKGVuZHBvaW50LnBhcnNlKGVuZHBvaW50T3B0aW9ucykpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3QgPSAocm91dGUsIHBhcmFtZXRlcnMpID0+IHtcbiAgICAgIHJldHVybiBmZXRjaFdyYXBwZXIoZW5kcG9pbnQucGFyc2UoZW5kcG9pbnQubWVyZ2Uocm91dGUsIHBhcmFtZXRlcnMpKSk7XG4gICAgfTtcblxuICAgIE9iamVjdC5hc3NpZ24ocmVxdWVzdCwge1xuICAgICAgZW5kcG9pbnQsXG4gICAgICBkZWZhdWx0czogd2l0aERlZmF1bHRzLmJpbmQobnVsbCwgZW5kcG9pbnQpXG4gICAgfSk7XG4gICAgcmV0dXJuIGVuZHBvaW50T3B0aW9ucy5yZXF1ZXN0Lmhvb2socmVxdWVzdCwgZW5kcG9pbnRPcHRpb25zKTtcbiAgfTtcblxuICByZXR1cm4gT2JqZWN0LmFzc2lnbihuZXdBcGksIHtcbiAgICBlbmRwb2ludCxcbiAgICBkZWZhdWx0czogd2l0aERlZmF1bHRzLmJpbmQobnVsbCwgZW5kcG9pbnQpXG4gIH0pO1xufVxuXG5jb25zdCByZXF1ZXN0ID0gd2l0aERlZmF1bHRzKGVuZHBvaW50LmVuZHBvaW50LCB7XG4gIGhlYWRlcnM6IHtcbiAgICBcInVzZXItYWdlbnRcIjogYG9jdG9raXQtcmVxdWVzdC5qcy8ke1ZFUlNJT059ICR7dW5pdmVyc2FsVXNlckFnZW50LmdldFVzZXJBZ2VudCgpfWBcbiAgfVxufSk7XG5cbmV4cG9ydHMucmVxdWVzdCA9IHJlcXVlc3Q7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG52YXIgcmVxdWVzdCA9IHJlcXVpcmUoJ0BvY3Rva2l0L3JlcXVlc3QnKTtcbnZhciB1bml2ZXJzYWxVc2VyQWdlbnQgPSByZXF1aXJlKCd1bml2ZXJzYWwtdXNlci1hZ2VudCcpO1xuXG5jb25zdCBWRVJTSU9OID0gXCI0LjguMFwiO1xuXG5mdW5jdGlvbiBfYnVpbGRNZXNzYWdlRm9yUmVzcG9uc2VFcnJvcnMoZGF0YSkge1xuICByZXR1cm4gYFJlcXVlc3QgZmFpbGVkIGR1ZSB0byBmb2xsb3dpbmcgcmVzcG9uc2UgZXJyb3JzOlxcbmAgKyBkYXRhLmVycm9ycy5tYXAoZSA9PiBgIC0gJHtlLm1lc3NhZ2V9YCkuam9pbihcIlxcblwiKTtcbn1cblxuY2xhc3MgR3JhcGhxbFJlc3BvbnNlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHJlcXVlc3QsIGhlYWRlcnMsIHJlc3BvbnNlKSB7XG4gICAgc3VwZXIoX2J1aWxkTWVzc2FnZUZvclJlc3BvbnNlRXJyb3JzKHJlc3BvbnNlKSk7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICB0aGlzLmhlYWRlcnMgPSBoZWFkZXJzO1xuICAgIHRoaXMucmVzcG9uc2UgPSByZXNwb25zZTtcbiAgICB0aGlzLm5hbWUgPSBcIkdyYXBocWxSZXNwb25zZUVycm9yXCI7IC8vIEV4cG9zZSB0aGUgZXJyb3JzIGFuZCByZXNwb25zZSBkYXRhIGluIHRoZWlyIHNob3J0aGFuZCBwcm9wZXJ0aWVzLlxuXG4gICAgdGhpcy5lcnJvcnMgPSByZXNwb25zZS5lcnJvcnM7XG4gICAgdGhpcy5kYXRhID0gcmVzcG9uc2UuZGF0YTsgLy8gTWFpbnRhaW5zIHByb3BlciBzdGFjayB0cmFjZSAob25seSBhdmFpbGFibGUgb24gVjgpXG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXG4gICAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgICB9XG4gIH1cblxufVxuXG5jb25zdCBOT05fVkFSSUFCTEVfT1BUSU9OUyA9IFtcIm1ldGhvZFwiLCBcImJhc2VVcmxcIiwgXCJ1cmxcIiwgXCJoZWFkZXJzXCIsIFwicmVxdWVzdFwiLCBcInF1ZXJ5XCIsIFwibWVkaWFUeXBlXCJdO1xuY29uc3QgRk9SQklEREVOX1ZBUklBQkxFX09QVElPTlMgPSBbXCJxdWVyeVwiLCBcIm1ldGhvZFwiLCBcInVybFwiXTtcbmNvbnN0IEdIRVNfVjNfU1VGRklYX1JFR0VYID0gL1xcL2FwaVxcL3YzXFwvPyQvO1xuZnVuY3Rpb24gZ3JhcGhxbChyZXF1ZXN0LCBxdWVyeSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucykge1xuICAgIGlmICh0eXBlb2YgcXVlcnkgPT09IFwic3RyaW5nXCIgJiYgXCJxdWVyeVwiIGluIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYFtAb2N0b2tpdC9ncmFwaHFsXSBcInF1ZXJ5XCIgY2Fubm90IGJlIHVzZWQgYXMgdmFyaWFibGUgbmFtZWApKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvcHRpb25zKSB7XG4gICAgICBpZiAoIUZPUkJJRERFTl9WQVJJQUJMRV9PUFRJT05TLmluY2x1ZGVzKGtleSkpIGNvbnRpbnVlO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihgW0BvY3Rva2l0L2dyYXBocWxdIFwiJHtrZXl9XCIgY2Fubm90IGJlIHVzZWQgYXMgdmFyaWFibGUgbmFtZWApKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBwYXJzZWRPcHRpb25zID0gdHlwZW9mIHF1ZXJ5ID09PSBcInN0cmluZ1wiID8gT2JqZWN0LmFzc2lnbih7XG4gICAgcXVlcnlcbiAgfSwgb3B0aW9ucykgOiBxdWVyeTtcbiAgY29uc3QgcmVxdWVzdE9wdGlvbnMgPSBPYmplY3Qua2V5cyhwYXJzZWRPcHRpb25zKS5yZWR1Y2UoKHJlc3VsdCwga2V5KSA9PiB7XG4gICAgaWYgKE5PTl9WQVJJQUJMRV9PUFRJT05TLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gcGFyc2VkT3B0aW9uc1trZXldO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBpZiAoIXJlc3VsdC52YXJpYWJsZXMpIHtcbiAgICAgIHJlc3VsdC52YXJpYWJsZXMgPSB7fTtcbiAgICB9XG5cbiAgICByZXN1bHQudmFyaWFibGVzW2tleV0gPSBwYXJzZWRPcHRpb25zW2tleV07XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSwge30pOyAvLyB3b3JrYXJvdW5kIGZvciBHaXRIdWIgRW50ZXJwcmlzZSBiYXNlVXJsIHNldCB3aXRoIC9hcGkvdjMgc3VmZml4XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9vY3Rva2l0L2F1dGgtYXBwLmpzL2lzc3Vlcy8xMTEjaXNzdWVjb21tZW50LTY1NzYxMDQ1MVxuXG4gIGNvbnN0IGJhc2VVcmwgPSBwYXJzZWRPcHRpb25zLmJhc2VVcmwgfHwgcmVxdWVzdC5lbmRwb2ludC5ERUZBVUxUUy5iYXNlVXJsO1xuXG4gIGlmIChHSEVTX1YzX1NVRkZJWF9SRUdFWC50ZXN0KGJhc2VVcmwpKSB7XG4gICAgcmVxdWVzdE9wdGlvbnMudXJsID0gYmFzZVVybC5yZXBsYWNlKEdIRVNfVjNfU1VGRklYX1JFR0VYLCBcIi9hcGkvZ3JhcGhxbFwiKTtcbiAgfVxuXG4gIHJldHVybiByZXF1ZXN0KHJlcXVlc3RPcHRpb25zKS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICBpZiAocmVzcG9uc2UuZGF0YS5lcnJvcnMpIHtcbiAgICAgIGNvbnN0IGhlYWRlcnMgPSB7fTtcblxuICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocmVzcG9uc2UuaGVhZGVycykpIHtcbiAgICAgICAgaGVhZGVyc1trZXldID0gcmVzcG9uc2UuaGVhZGVyc1trZXldO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgR3JhcGhxbFJlc3BvbnNlRXJyb3IocmVxdWVzdE9wdGlvbnMsIGhlYWRlcnMsIHJlc3BvbnNlLmRhdGEpO1xuICAgIH1cblxuICAgIHJldHVybiByZXNwb25zZS5kYXRhLmRhdGE7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB3aXRoRGVmYXVsdHMocmVxdWVzdCQxLCBuZXdEZWZhdWx0cykge1xuICBjb25zdCBuZXdSZXF1ZXN0ID0gcmVxdWVzdCQxLmRlZmF1bHRzKG5ld0RlZmF1bHRzKTtcblxuICBjb25zdCBuZXdBcGkgPSAocXVlcnksIG9wdGlvbnMpID0+IHtcbiAgICByZXR1cm4gZ3JhcGhxbChuZXdSZXF1ZXN0LCBxdWVyeSwgb3B0aW9ucyk7XG4gIH07XG5cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24obmV3QXBpLCB7XG4gICAgZGVmYXVsdHM6IHdpdGhEZWZhdWx0cy5iaW5kKG51bGwsIG5ld1JlcXVlc3QpLFxuICAgIGVuZHBvaW50OiByZXF1ZXN0LnJlcXVlc3QuZW5kcG9pbnRcbiAgfSk7XG59XG5cbmNvbnN0IGdyYXBocWwkMSA9IHdpdGhEZWZhdWx0cyhyZXF1ZXN0LnJlcXVlc3QsIHtcbiAgaGVhZGVyczoge1xuICAgIFwidXNlci1hZ2VudFwiOiBgb2N0b2tpdC1ncmFwaHFsLmpzLyR7VkVSU0lPTn0gJHt1bml2ZXJzYWxVc2VyQWdlbnQuZ2V0VXNlckFnZW50KCl9YFxuICB9LFxuICBtZXRob2Q6IFwiUE9TVFwiLFxuICB1cmw6IFwiL2dyYXBocWxcIlxufSk7XG5mdW5jdGlvbiB3aXRoQ3VzdG9tUmVxdWVzdChjdXN0b21SZXF1ZXN0KSB7XG4gIHJldHVybiB3aXRoRGVmYXVsdHMoY3VzdG9tUmVxdWVzdCwge1xuICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgdXJsOiBcIi9ncmFwaHFsXCJcbiAgfSk7XG59XG5cbmV4cG9ydHMuR3JhcGhxbFJlc3BvbnNlRXJyb3IgPSBHcmFwaHFsUmVzcG9uc2VFcnJvcjtcbmV4cG9ydHMuZ3JhcGhxbCA9IGdyYXBocWwkMTtcbmV4cG9ydHMud2l0aEN1c3RvbVJlcXVlc3QgPSB3aXRoQ3VzdG9tUmVxdWVzdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmNvbnN0IFJFR0VYX0lTX0lOU1RBTExBVElPTl9MRUdBQ1kgPSAvXnYxXFwuLztcbmNvbnN0IFJFR0VYX0lTX0lOU1RBTExBVElPTiA9IC9eZ2hzXy87XG5jb25zdCBSRUdFWF9JU19VU0VSX1RPX1NFUlZFUiA9IC9eZ2h1Xy87XG5hc3luYyBmdW5jdGlvbiBhdXRoKHRva2VuKSB7XG4gIGNvbnN0IGlzQXBwID0gdG9rZW4uc3BsaXQoL1xcLi8pLmxlbmd0aCA9PT0gMztcbiAgY29uc3QgaXNJbnN0YWxsYXRpb24gPSBSRUdFWF9JU19JTlNUQUxMQVRJT05fTEVHQUNZLnRlc3QodG9rZW4pIHx8IFJFR0VYX0lTX0lOU1RBTExBVElPTi50ZXN0KHRva2VuKTtcbiAgY29uc3QgaXNVc2VyVG9TZXJ2ZXIgPSBSRUdFWF9JU19VU0VSX1RPX1NFUlZFUi50ZXN0KHRva2VuKTtcbiAgY29uc3QgdG9rZW5UeXBlID0gaXNBcHAgPyBcImFwcFwiIDogaXNJbnN0YWxsYXRpb24gPyBcImluc3RhbGxhdGlvblwiIDogaXNVc2VyVG9TZXJ2ZXIgPyBcInVzZXItdG8tc2VydmVyXCIgOiBcIm9hdXRoXCI7XG4gIHJldHVybiB7XG4gICAgdHlwZTogXCJ0b2tlblwiLFxuICAgIHRva2VuOiB0b2tlbixcbiAgICB0b2tlblR5cGVcbiAgfTtcbn1cblxuLyoqXG4gKiBQcmVmaXggdG9rZW4gZm9yIHVzYWdlIGluIHRoZSBBdXRob3JpemF0aW9uIGhlYWRlclxuICpcbiAqIEBwYXJhbSB0b2tlbiBPQXV0aCB0b2tlbiBvciBKU09OIFdlYiBUb2tlblxuICovXG5mdW5jdGlvbiB3aXRoQXV0aG9yaXphdGlvblByZWZpeCh0b2tlbikge1xuICBpZiAodG9rZW4uc3BsaXQoL1xcLi8pLmxlbmd0aCA9PT0gMykge1xuICAgIHJldHVybiBgYmVhcmVyICR7dG9rZW59YDtcbiAgfVxuXG4gIHJldHVybiBgdG9rZW4gJHt0b2tlbn1gO1xufVxuXG5hc3luYyBmdW5jdGlvbiBob29rKHRva2VuLCByZXF1ZXN0LCByb3V0ZSwgcGFyYW1ldGVycykge1xuICBjb25zdCBlbmRwb2ludCA9IHJlcXVlc3QuZW5kcG9pbnQubWVyZ2Uocm91dGUsIHBhcmFtZXRlcnMpO1xuICBlbmRwb2ludC5oZWFkZXJzLmF1dGhvcml6YXRpb24gPSB3aXRoQXV0aG9yaXphdGlvblByZWZpeCh0b2tlbik7XG4gIHJldHVybiByZXF1ZXN0KGVuZHBvaW50KTtcbn1cblxuY29uc3QgY3JlYXRlVG9rZW5BdXRoID0gZnVuY3Rpb24gY3JlYXRlVG9rZW5BdXRoKHRva2VuKSB7XG4gIGlmICghdG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJbQG9jdG9raXQvYXV0aC10b2tlbl0gTm8gdG9rZW4gcGFzc2VkIHRvIGNyZWF0ZVRva2VuQXV0aFwiKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdG9rZW4gIT09IFwic3RyaW5nXCIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJbQG9jdG9raXQvYXV0aC10b2tlbl0gVG9rZW4gcGFzc2VkIHRvIGNyZWF0ZVRva2VuQXV0aCBpcyBub3QgYSBzdHJpbmdcIik7XG4gIH1cblxuICB0b2tlbiA9IHRva2VuLnJlcGxhY2UoL14odG9rZW58YmVhcmVyKSArL2ksIFwiXCIpO1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihhdXRoLmJpbmQobnVsbCwgdG9rZW4pLCB7XG4gICAgaG9vazogaG9vay5iaW5kKG51bGwsIHRva2VuKVxuICB9KTtcbn07XG5cbmV4cG9ydHMuY3JlYXRlVG9rZW5BdXRoID0gY3JlYXRlVG9rZW5BdXRoO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxudmFyIHVuaXZlcnNhbFVzZXJBZ2VudCA9IHJlcXVpcmUoJ3VuaXZlcnNhbC11c2VyLWFnZW50Jyk7XG52YXIgYmVmb3JlQWZ0ZXJIb29rID0gcmVxdWlyZSgnYmVmb3JlLWFmdGVyLWhvb2snKTtcbnZhciByZXF1ZXN0ID0gcmVxdWlyZSgnQG9jdG9raXQvcmVxdWVzdCcpO1xudmFyIGdyYXBocWwgPSByZXF1aXJlKCdAb2N0b2tpdC9ncmFwaHFsJyk7XG52YXIgYXV0aFRva2VuID0gcmVxdWlyZSgnQG9jdG9raXQvYXV0aC10b2tlbicpO1xuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7XG4gIGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9O1xuICB2YXIgdGFyZ2V0ID0ge307XG4gIHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTtcbiAgdmFyIGtleSwgaTtcblxuICBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGtleSA9IHNvdXJjZUtleXNbaV07XG4gICAgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTtcbiAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHtcbiAgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307XG5cbiAgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpO1xuXG4gIHZhciBrZXksIGk7XG5cbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldO1xuICAgICAgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTtcbiAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7XG4gICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbmNvbnN0IFZFUlNJT04gPSBcIjMuNi4wXCI7XG5cbmNvbnN0IF9leGNsdWRlZCA9IFtcImF1dGhTdHJhdGVneVwiXTtcbmNsYXNzIE9jdG9raXQge1xuICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCBob29rID0gbmV3IGJlZm9yZUFmdGVySG9vay5Db2xsZWN0aW9uKCk7XG4gICAgY29uc3QgcmVxdWVzdERlZmF1bHRzID0ge1xuICAgICAgYmFzZVVybDogcmVxdWVzdC5yZXF1ZXN0LmVuZHBvaW50LkRFRkFVTFRTLmJhc2VVcmwsXG4gICAgICBoZWFkZXJzOiB7fSxcbiAgICAgIHJlcXVlc3Q6IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMucmVxdWVzdCwge1xuICAgICAgICAvLyBAdHMtaWdub3JlIGludGVybmFsIHVzYWdlIG9ubHksIG5vIG5lZWQgdG8gdHlwZVxuICAgICAgICBob29rOiBob29rLmJpbmQobnVsbCwgXCJyZXF1ZXN0XCIpXG4gICAgICB9KSxcbiAgICAgIG1lZGlhVHlwZToge1xuICAgICAgICBwcmV2aWV3czogW10sXG4gICAgICAgIGZvcm1hdDogXCJcIlxuICAgICAgfVxuICAgIH07IC8vIHByZXBlbmQgZGVmYXVsdCB1c2VyIGFnZW50IHdpdGggYG9wdGlvbnMudXNlckFnZW50YCBpZiBzZXRcblxuICAgIHJlcXVlc3REZWZhdWx0cy5oZWFkZXJzW1widXNlci1hZ2VudFwiXSA9IFtvcHRpb25zLnVzZXJBZ2VudCwgYG9jdG9raXQtY29yZS5qcy8ke1ZFUlNJT059ICR7dW5pdmVyc2FsVXNlckFnZW50LmdldFVzZXJBZ2VudCgpfWBdLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKTtcblxuICAgIGlmIChvcHRpb25zLmJhc2VVcmwpIHtcbiAgICAgIHJlcXVlc3REZWZhdWx0cy5iYXNlVXJsID0gb3B0aW9ucy5iYXNlVXJsO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnByZXZpZXdzKSB7XG4gICAgICByZXF1ZXN0RGVmYXVsdHMubWVkaWFUeXBlLnByZXZpZXdzID0gb3B0aW9ucy5wcmV2aWV3cztcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy50aW1lWm9uZSkge1xuICAgICAgcmVxdWVzdERlZmF1bHRzLmhlYWRlcnNbXCJ0aW1lLXpvbmVcIl0gPSBvcHRpb25zLnRpbWVab25lO1xuICAgIH1cblxuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3QucmVxdWVzdC5kZWZhdWx0cyhyZXF1ZXN0RGVmYXVsdHMpO1xuICAgIHRoaXMuZ3JhcGhxbCA9IGdyYXBocWwud2l0aEN1c3RvbVJlcXVlc3QodGhpcy5yZXF1ZXN0KS5kZWZhdWx0cyhyZXF1ZXN0RGVmYXVsdHMpO1xuICAgIHRoaXMubG9nID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICBkZWJ1ZzogKCkgPT4ge30sXG4gICAgICBpbmZvOiAoKSA9PiB7fSxcbiAgICAgIHdhcm46IGNvbnNvbGUud2Fybi5iaW5kKGNvbnNvbGUpLFxuICAgICAgZXJyb3I6IGNvbnNvbGUuZXJyb3IuYmluZChjb25zb2xlKVxuICAgIH0sIG9wdGlvbnMubG9nKTtcbiAgICB0aGlzLmhvb2sgPSBob29rOyAvLyAoMSkgSWYgbmVpdGhlciBgb3B0aW9ucy5hdXRoU3RyYXRlZ3lgIG5vciBgb3B0aW9ucy5hdXRoYCBhcmUgc2V0LCB0aGUgYG9jdG9raXRgIGluc3RhbmNlXG4gICAgLy8gICAgIGlzIHVuYXV0aGVudGljYXRlZC4gVGhlIGB0aGlzLmF1dGgoKWAgbWV0aG9kIGlzIGEgbm8tb3AgYW5kIG5vIHJlcXVlc3QgaG9vayBpcyByZWdpc3RlcmVkLlxuICAgIC8vICgyKSBJZiBvbmx5IGBvcHRpb25zLmF1dGhgIGlzIHNldCwgdXNlIHRoZSBkZWZhdWx0IHRva2VuIGF1dGhlbnRpY2F0aW9uIHN0cmF0ZWd5LlxuICAgIC8vICgzKSBJZiBgb3B0aW9ucy5hdXRoU3RyYXRlZ3lgIGlzIHNldCB0aGVuIHVzZSBpdCBhbmQgcGFzcyBpbiBgb3B0aW9ucy5hdXRoYC4gQWx3YXlzIHBhc3Mgb3duIHJlcXVlc3QgYXMgbWFueSBzdHJhdGVnaWVzIGFjY2VwdCBhIGN1c3RvbSByZXF1ZXN0IGluc3RhbmNlLlxuICAgIC8vIFRPRE86IHR5cGUgYG9wdGlvbnMuYXV0aGAgYmFzZWQgb24gYG9wdGlvbnMuYXV0aFN0cmF0ZWd5YC5cblxuICAgIGlmICghb3B0aW9ucy5hdXRoU3RyYXRlZ3kpIHtcbiAgICAgIGlmICghb3B0aW9ucy5hdXRoKSB7XG4gICAgICAgIC8vICgxKVxuICAgICAgICB0aGlzLmF1dGggPSBhc3luYyAoKSA9PiAoe1xuICAgICAgICAgIHR5cGU6IFwidW5hdXRoZW50aWNhdGVkXCJcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyAoMilcbiAgICAgICAgY29uc3QgYXV0aCA9IGF1dGhUb2tlbi5jcmVhdGVUb2tlbkF1dGgob3B0aW9ucy5hdXRoKTsgLy8gQHRzLWlnbm9yZSAgwq9cXF8o44OEKV8vwq9cblxuICAgICAgICBob29rLndyYXAoXCJyZXF1ZXN0XCIsIGF1dGguaG9vayk7XG4gICAgICAgIHRoaXMuYXV0aCA9IGF1dGg7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgYXV0aFN0cmF0ZWd5XG4gICAgICB9ID0gb3B0aW9ucyxcbiAgICAgICAgICAgIG90aGVyT3B0aW9ucyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhvcHRpb25zLCBfZXhjbHVkZWQpO1xuXG4gICAgICBjb25zdCBhdXRoID0gYXV0aFN0cmF0ZWd5KE9iamVjdC5hc3NpZ24oe1xuICAgICAgICByZXF1ZXN0OiB0aGlzLnJlcXVlc3QsXG4gICAgICAgIGxvZzogdGhpcy5sb2csXG4gICAgICAgIC8vIHdlIHBhc3MgdGhlIGN1cnJlbnQgb2N0b2tpdCBpbnN0YW5jZSBhcyB3ZWxsIGFzIGl0cyBjb25zdHJ1Y3RvciBvcHRpb25zXG4gICAgICAgIC8vIHRvIGFsbG93IGZvciBhdXRoZW50aWNhdGlvbiBzdHJhdGVnaWVzIHRoYXQgcmV0dXJuIGEgbmV3IG9jdG9raXQgaW5zdGFuY2VcbiAgICAgICAgLy8gdGhhdCBzaGFyZXMgdGhlIHNhbWUgaW50ZXJuYWwgc3RhdGUgYXMgdGhlIGN1cnJlbnQgb25lLiBUaGUgb3JpZ2luYWxcbiAgICAgICAgLy8gcmVxdWlyZW1lbnQgZm9yIHRoaXMgd2FzIHRoZSBcImV2ZW50LW9jdG9raXRcIiBhdXRoZW50aWNhdGlvbiBzdHJhdGVneVxuICAgICAgICAvLyBvZiBodHRwczovL2dpdGh1Yi5jb20vcHJvYm90L29jdG9raXQtYXV0aC1wcm9ib3QuXG4gICAgICAgIG9jdG9raXQ6IHRoaXMsXG4gICAgICAgIG9jdG9raXRPcHRpb25zOiBvdGhlck9wdGlvbnNcbiAgICAgIH0sIG9wdGlvbnMuYXV0aCkpOyAvLyBAdHMtaWdub3JlICDCr1xcXyjjg4QpXy/Cr1xuXG4gICAgICBob29rLndyYXAoXCJyZXF1ZXN0XCIsIGF1dGguaG9vayk7XG4gICAgICB0aGlzLmF1dGggPSBhdXRoO1xuICAgIH0gLy8gYXBwbHkgcGx1Z2luc1xuICAgIC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8xNjM0NTE3MlxuXG5cbiAgICBjb25zdCBjbGFzc0NvbnN0cnVjdG9yID0gdGhpcy5jb25zdHJ1Y3RvcjtcbiAgICBjbGFzc0NvbnN0cnVjdG9yLnBsdWdpbnMuZm9yRWFjaChwbHVnaW4gPT4ge1xuICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBwbHVnaW4odGhpcywgb3B0aW9ucykpO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRzKGRlZmF1bHRzKSB7XG4gICAgY29uc3QgT2N0b2tpdFdpdGhEZWZhdWx0cyA9IGNsYXNzIGV4dGVuZHMgdGhpcyB7XG4gICAgICBjb25zdHJ1Y3RvciguLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBhcmdzWzBdIHx8IHt9O1xuXG4gICAgICAgIGlmICh0eXBlb2YgZGVmYXVsdHMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIHN1cGVyKGRlZmF1bHRzKG9wdGlvbnMpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBzdXBlcihPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0cywgb3B0aW9ucywgb3B0aW9ucy51c2VyQWdlbnQgJiYgZGVmYXVsdHMudXNlckFnZW50ID8ge1xuICAgICAgICAgIHVzZXJBZ2VudDogYCR7b3B0aW9ucy51c2VyQWdlbnR9ICR7ZGVmYXVsdHMudXNlckFnZW50fWBcbiAgICAgICAgfSA6IG51bGwpKTtcbiAgICAgIH1cblxuICAgIH07XG4gICAgcmV0dXJuIE9jdG9raXRXaXRoRGVmYXVsdHM7XG4gIH1cbiAgLyoqXG4gICAqIEF0dGFjaCBhIHBsdWdpbiAob3IgbWFueSkgdG8geW91ciBPY3Rva2l0IGluc3RhbmNlLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBjb25zdCBBUEkgPSBPY3Rva2l0LnBsdWdpbihwbHVnaW4xLCBwbHVnaW4yLCBwbHVnaW4zLCAuLi4pXG4gICAqL1xuXG5cbiAgc3RhdGljIHBsdWdpbiguLi5uZXdQbHVnaW5zKSB7XG4gICAgdmFyIF9hO1xuXG4gICAgY29uc3QgY3VycmVudFBsdWdpbnMgPSB0aGlzLnBsdWdpbnM7XG4gICAgY29uc3QgTmV3T2N0b2tpdCA9IChfYSA9IGNsYXNzIGV4dGVuZHMgdGhpcyB7fSwgX2EucGx1Z2lucyA9IGN1cnJlbnRQbHVnaW5zLmNvbmNhdChuZXdQbHVnaW5zLmZpbHRlcihwbHVnaW4gPT4gIWN1cnJlbnRQbHVnaW5zLmluY2x1ZGVzKHBsdWdpbikpKSwgX2EpO1xuICAgIHJldHVybiBOZXdPY3Rva2l0O1xuICB9XG5cbn1cbk9jdG9raXQuVkVSU0lPTiA9IFZFUlNJT047XG5PY3Rva2l0LnBsdWdpbnMgPSBbXTtcblxuZXhwb3J0cy5PY3Rva2l0ID0gT2N0b2tpdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkge1xuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG5cbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTtcblxuICAgIGlmIChlbnVtZXJhYmxlT25seSkge1xuICAgICAgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7XG4gIH1cblxuICByZXR1cm4ga2V5cztcbn1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZDIodGFyZ2V0KSB7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307XG5cbiAgICBpZiAoaSAlIDIpIHtcbiAgICAgIG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gb2JqO1xufVxuXG5jb25zdCBFbmRwb2ludHMgPSB7XG4gIGFjdGlvbnM6IHtcbiAgICBhZGRDdXN0b21MYWJlbHNUb1NlbGZIb3N0ZWRSdW5uZXJGb3JPcmc6IFtcIlBPU1QgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVsc1wiXSxcbiAgICBhZGRDdXN0b21MYWJlbHNUb1NlbGZIb3N0ZWRSdW5uZXJGb3JSZXBvOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCJdLFxuICAgIGFkZFNlbGVjdGVkUmVwb1RvT3JnU2VjcmV0OiBbXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiXSxcbiAgICBhcHByb3ZlV29ya2Zsb3dSdW46IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hcHByb3ZlXCJdLFxuICAgIGNhbmNlbFdvcmtmbG93UnVuOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vY2FuY2VsXCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlRW52aXJvbm1lbnRTZWNyZXQ6IFtcIlBVVCAvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBjcmVhdGVPclVwZGF0ZU9yZ1NlY3JldDogW1wiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlUmVwb1NlY3JldDogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBjcmVhdGVSZWdpc3RyYXRpb25Ub2tlbkZvck9yZzogW1wiUE9TVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMvcmVnaXN0cmF0aW9uLXRva2VuXCJdLFxuICAgIGNyZWF0ZVJlZ2lzdHJhdGlvblRva2VuRm9yUmVwbzogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3JlZ2lzdHJhdGlvbi10b2tlblwiXSxcbiAgICBjcmVhdGVSZW1vdmVUb2tlbkZvck9yZzogW1wiUE9TVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMvcmVtb3ZlLXRva2VuXCJdLFxuICAgIGNyZWF0ZVJlbW92ZVRva2VuRm9yUmVwbzogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3JlbW92ZS10b2tlblwiXSxcbiAgICBjcmVhdGVXb3JrZmxvd0Rpc3BhdGNoOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L2Rpc3BhdGNoZXNcIl0sXG4gICAgZGVsZXRlQWN0aW9uc0NhY2hlQnlJZDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2NhY2hlcy97Y2FjaGVfaWR9XCJdLFxuICAgIGRlbGV0ZUFjdGlvbnNDYWNoZUJ5S2V5OiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvY2FjaGVzez9rZXkscmVmfVwiXSxcbiAgICBkZWxldGVBcnRpZmFjdDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2FydGlmYWN0cy97YXJ0aWZhY3RfaWR9XCJdLFxuICAgIGRlbGV0ZUVudmlyb25tZW50U2VjcmV0OiBbXCJERUxFVEUgL3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH0vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZGVsZXRlT3JnU2VjcmV0OiBbXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZGVsZXRlUmVwb1NlY3JldDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBkZWxldGVTZWxmSG9zdGVkUnVubmVyRnJvbU9yZzogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfVwiXSxcbiAgICBkZWxldGVTZWxmSG9zdGVkUnVubmVyRnJvbVJlcG86IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9XCJdLFxuICAgIGRlbGV0ZVdvcmtmbG93UnVuOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfVwiXSxcbiAgICBkZWxldGVXb3JrZmxvd1J1bkxvZ3M6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2xvZ3NcIl0sXG4gICAgZGlzYWJsZVNlbGVjdGVkUmVwb3NpdG9yeUdpdGh1YkFjdGlvbnNPcmdhbml6YXRpb246IFtcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIl0sXG4gICAgZGlzYWJsZVdvcmtmbG93OiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvd29ya2Zsb3dzL3t3b3JrZmxvd19pZH0vZGlzYWJsZVwiXSxcbiAgICBkb3dubG9hZEFydGlmYWN0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvYXJ0aWZhY3RzL3thcnRpZmFjdF9pZH0ve2FyY2hpdmVfZm9ybWF0fVwiXSxcbiAgICBkb3dubG9hZEpvYkxvZ3NGb3JXb3JrZmxvd1J1bjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2pvYnMve2pvYl9pZH0vbG9nc1wiXSxcbiAgICBkb3dubG9hZFdvcmtmbG93UnVuQXR0ZW1wdExvZ3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2F0dGVtcHRzL3thdHRlbXB0X251bWJlcn0vbG9nc1wiXSxcbiAgICBkb3dubG9hZFdvcmtmbG93UnVuTG9nczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vbG9nc1wiXSxcbiAgICBlbmFibGVTZWxlY3RlZFJlcG9zaXRvcnlHaXRodWJBY3Rpb25zT3JnYW5pemF0aW9uOiBbXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCJdLFxuICAgIGVuYWJsZVdvcmtmbG93OiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvd29ya2Zsb3dzL3t3b3JrZmxvd19pZH0vZW5hYmxlXCJdLFxuICAgIGdldEFjdGlvbnNDYWNoZUxpc3Q6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9jYWNoZXNcIl0sXG4gICAgZ2V0QWN0aW9uc0NhY2hlVXNhZ2U6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9jYWNoZS91c2FnZVwiXSxcbiAgICBnZXRBY3Rpb25zQ2FjaGVVc2FnZUJ5UmVwb0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvY2FjaGUvdXNhZ2UtYnktcmVwb3NpdG9yeVwiXSxcbiAgICBnZXRBY3Rpb25zQ2FjaGVVc2FnZUZvckVudGVycHJpc2U6IFtcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2FjdGlvbnMvY2FjaGUvdXNhZ2VcIl0sXG4gICAgZ2V0QWN0aW9uc0NhY2hlVXNhZ2VGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2NhY2hlL3VzYWdlXCJdLFxuICAgIGdldEFsbG93ZWRBY3Rpb25zT3JnYW5pemF0aW9uOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9zZWxlY3RlZC1hY3Rpb25zXCJdLFxuICAgIGdldEFsbG93ZWRBY3Rpb25zUmVwb3NpdG9yeTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zL3NlbGVjdGVkLWFjdGlvbnNcIl0sXG4gICAgZ2V0QXJ0aWZhY3Q6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9hcnRpZmFjdHMve2FydGlmYWN0X2lkfVwiXSxcbiAgICBnZXRFbnZpcm9ubWVudFB1YmxpY0tleTogW1wiR0VUIC9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vc2VjcmV0cy9wdWJsaWMta2V5XCJdLFxuICAgIGdldEVudmlyb25tZW50U2VjcmV0OiBbXCJHRVQgL3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH0vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZ2V0R2l0aHViQWN0aW9uc0RlZmF1bHRXb3JrZmxvd1Blcm1pc3Npb25zRW50ZXJwcmlzZTogW1wiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vYWN0aW9ucy9wZXJtaXNzaW9ucy93b3JrZmxvd1wiXSxcbiAgICBnZXRHaXRodWJBY3Rpb25zRGVmYXVsdFdvcmtmbG93UGVybWlzc2lvbnNPcmdhbml6YXRpb246IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3dvcmtmbG93XCJdLFxuICAgIGdldEdpdGh1YkFjdGlvbnNEZWZhdWx0V29ya2Zsb3dQZXJtaXNzaW9uc1JlcG9zaXRvcnk6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9ucy93b3JrZmxvd1wiXSxcbiAgICBnZXRHaXRodWJBY3Rpb25zUGVybWlzc2lvbnNPcmdhbml6YXRpb246IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zXCJdLFxuICAgIGdldEdpdGh1YkFjdGlvbnNQZXJtaXNzaW9uc1JlcG9zaXRvcnk6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9uc1wiXSxcbiAgICBnZXRKb2JGb3JXb3JrZmxvd1J1bjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2pvYnMve2pvYl9pZH1cIl0sXG4gICAgZ2V0T3JnUHVibGljS2V5OiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3B1YmxpYy1rZXlcIl0sXG4gICAgZ2V0T3JnU2VjcmV0OiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZ2V0UGVuZGluZ0RlcGxveW1lbnRzRm9yUnVuOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9wZW5kaW5nX2RlcGxveW1lbnRzXCJdLFxuICAgIGdldFJlcG9QZXJtaXNzaW9uczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zXCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJhY3Rpb25zXCIsIFwiZ2V0R2l0aHViQWN0aW9uc1Blcm1pc3Npb25zUmVwb3NpdG9yeVwiXVxuICAgIH1dLFxuICAgIGdldFJlcG9QdWJsaWNLZXk6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9zZWNyZXRzL3B1YmxpYy1rZXlcIl0sXG4gICAgZ2V0UmVwb1NlY3JldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBnZXRSZXZpZXdzRm9yUnVuOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hcHByb3ZhbHNcIl0sXG4gICAgZ2V0U2VsZkhvc3RlZFJ1bm5lckZvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfVwiXSxcbiAgICBnZXRTZWxmSG9zdGVkUnVubmVyRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH1cIl0sXG4gICAgZ2V0V29ya2Zsb3c6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3Mve3dvcmtmbG93X2lkfVwiXSxcbiAgICBnZXRXb3JrZmxvd0FjY2Vzc1RvUmVwb3NpdG9yeTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zL2FjY2Vzc1wiXSxcbiAgICBnZXRXb3JrZmxvd1J1bjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH1cIl0sXG4gICAgZ2V0V29ya2Zsb3dSdW5BdHRlbXB0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hdHRlbXB0cy97YXR0ZW1wdF9udW1iZXJ9XCJdLFxuICAgIGdldFdvcmtmbG93UnVuVXNhZ2U6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L3RpbWluZ1wiXSxcbiAgICBnZXRXb3JrZmxvd1VzYWdlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvd29ya2Zsb3dzL3t3b3JrZmxvd19pZH0vdGltaW5nXCJdLFxuICAgIGxpc3RBcnRpZmFjdHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvYXJ0aWZhY3RzXCJdLFxuICAgIGxpc3RFbnZpcm9ubWVudFNlY3JldHM6IFtcIkdFVCAvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHNcIl0sXG4gICAgbGlzdEpvYnNGb3JXb3JrZmxvd1J1bjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vam9ic1wiXSxcbiAgICBsaXN0Sm9ic0ZvcldvcmtmbG93UnVuQXR0ZW1wdDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXR0ZW1wdHMve2F0dGVtcHRfbnVtYmVyfS9qb2JzXCJdLFxuICAgIGxpc3RMYWJlbHNGb3JTZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVsc1wiXSxcbiAgICBsaXN0TGFiZWxzRm9yU2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVsc1wiXSxcbiAgICBsaXN0T3JnU2VjcmV0czogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0c1wiXSxcbiAgICBsaXN0UmVwb1NlY3JldHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9zZWNyZXRzXCJdLFxuICAgIGxpc3RSZXBvV29ya2Zsb3dzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvd29ya2Zsb3dzXCJdLFxuICAgIGxpc3RSdW5uZXJBcHBsaWNhdGlvbnNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMvZG93bmxvYWRzXCJdLFxuICAgIGxpc3RSdW5uZXJBcHBsaWNhdGlvbnNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy9kb3dubG9hZHNcIl0sXG4gICAgbGlzdFNlbGVjdGVkUmVwb3NGb3JPcmdTZWNyZXQ6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIl0sXG4gICAgbGlzdFNlbGVjdGVkUmVwb3NpdG9yaWVzRW5hYmxlZEdpdGh1YkFjdGlvbnNPcmdhbml6YXRpb246IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3JlcG9zaXRvcmllc1wiXSxcbiAgICBsaXN0U2VsZkhvc3RlZFJ1bm5lcnNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnNcIl0sXG4gICAgbGlzdFNlbGZIb3N0ZWRSdW5uZXJzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnNcIl0sXG4gICAgbGlzdFdvcmtmbG93UnVuQXJ0aWZhY3RzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hcnRpZmFjdHNcIl0sXG4gICAgbGlzdFdvcmtmbG93UnVuczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L3J1bnNcIl0sXG4gICAgbGlzdFdvcmtmbG93UnVuc0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zXCJdLFxuICAgIHJlUnVuSm9iRm9yV29ya2Zsb3dSdW46IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvam9icy97am9iX2lkfS9yZXJ1blwiXSxcbiAgICByZVJ1bldvcmtmbG93OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vcmVydW5cIl0sXG4gICAgcmVSdW5Xb3JrZmxvd0ZhaWxlZEpvYnM6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9yZXJ1bi1mYWlsZWQtam9ic1wiXSxcbiAgICByZW1vdmVBbGxDdXN0b21MYWJlbHNGcm9tU2VsZkhvc3RlZFJ1bm5lckZvck9yZzogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIl0sXG4gICAgcmVtb3ZlQWxsQ3VzdG9tTGFiZWxzRnJvbVNlbGZIb3N0ZWRSdW5uZXJGb3JSZXBvOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIl0sXG4gICAgcmVtb3ZlQ3VzdG9tTGFiZWxGcm9tU2VsZkhvc3RlZFJ1bm5lckZvck9yZzogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHMve25hbWV9XCJdLFxuICAgIHJlbW92ZUN1c3RvbUxhYmVsRnJvbVNlbGZIb3N0ZWRSdW5uZXJGb3JSZXBvOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHMve25hbWV9XCJdLFxuICAgIHJlbW92ZVNlbGVjdGVkUmVwb0Zyb21PcmdTZWNyZXQ6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCJdLFxuICAgIHJldmlld1BlbmRpbmdEZXBsb3ltZW50c0ZvclJ1bjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L3BlbmRpbmdfZGVwbG95bWVudHNcIl0sXG4gICAgc2V0QWxsb3dlZEFjdGlvbnNPcmdhbml6YXRpb246IFtcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3NlbGVjdGVkLWFjdGlvbnNcIl0sXG4gICAgc2V0QWxsb3dlZEFjdGlvbnNSZXBvc2l0b3J5OiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnMvc2VsZWN0ZWQtYWN0aW9uc1wiXSxcbiAgICBzZXRDdXN0b21MYWJlbHNGb3JTZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVsc1wiXSxcbiAgICBzZXRDdXN0b21MYWJlbHNGb3JTZWxmSG9zdGVkUnVubmVyRm9yUmVwbzogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCJdLFxuICAgIHNldEdpdGh1YkFjdGlvbnNEZWZhdWx0V29ya2Zsb3dQZXJtaXNzaW9uc0VudGVycHJpc2U6IFtcIlBVVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2FjdGlvbnMvcGVybWlzc2lvbnMvd29ya2Zsb3dcIl0sXG4gICAgc2V0R2l0aHViQWN0aW9uc0RlZmF1bHRXb3JrZmxvd1Blcm1pc3Npb25zT3JnYW5pemF0aW9uOiBbXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy93b3JrZmxvd1wiXSxcbiAgICBzZXRHaXRodWJBY3Rpb25zRGVmYXVsdFdvcmtmbG93UGVybWlzc2lvbnNSZXBvc2l0b3J5OiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnMvd29ya2Zsb3dcIl0sXG4gICAgc2V0R2l0aHViQWN0aW9uc1Blcm1pc3Npb25zT3JnYW5pemF0aW9uOiBbXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9uc1wiXSxcbiAgICBzZXRHaXRodWJBY3Rpb25zUGVybWlzc2lvbnNSZXBvc2l0b3J5OiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnNcIl0sXG4gICAgc2V0U2VsZWN0ZWRSZXBvc0Zvck9yZ1NlY3JldDogW1wiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiXSxcbiAgICBzZXRTZWxlY3RlZFJlcG9zaXRvcmllc0VuYWJsZWRHaXRodWJBY3Rpb25zT3JnYW5pemF0aW9uOiBbXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9yZXBvc2l0b3JpZXNcIl0sXG4gICAgc2V0V29ya2Zsb3dBY2Nlc3NUb1JlcG9zaXRvcnk6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9ucy9hY2Nlc3NcIl1cbiAgfSxcbiAgYWN0aXZpdHk6IHtcbiAgICBjaGVja1JlcG9Jc1N0YXJyZWRCeUF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvc3RhcnJlZC97b3duZXJ9L3tyZXBvfVwiXSxcbiAgICBkZWxldGVSZXBvU3Vic2NyaXB0aW9uOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmlwdGlvblwiXSxcbiAgICBkZWxldGVUaHJlYWRTdWJzY3JpcHRpb246IFtcIkRFTEVURSAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9L3N1YnNjcmlwdGlvblwiXSxcbiAgICBnZXRGZWVkczogW1wiR0VUIC9mZWVkc1wiXSxcbiAgICBnZXRSZXBvU3Vic2NyaXB0aW9uOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmlwdGlvblwiXSxcbiAgICBnZXRUaHJlYWQ6IFtcIkdFVCAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9XCJdLFxuICAgIGdldFRocmVhZFN1YnNjcmlwdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL25vdGlmaWNhdGlvbnMvdGhyZWFkcy97dGhyZWFkX2lkfS9zdWJzY3JpcHRpb25cIl0sXG4gICAgbGlzdEV2ZW50c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzXCJdLFxuICAgIGxpc3ROb3RpZmljYXRpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvbm90aWZpY2F0aW9uc1wiXSxcbiAgICBsaXN0T3JnRXZlbnRzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ldmVudHMvb3Jncy97b3JnfVwiXSxcbiAgICBsaXN0UHVibGljRXZlbnRzOiBbXCJHRVQgL2V2ZW50c1wiXSxcbiAgICBsaXN0UHVibGljRXZlbnRzRm9yUmVwb05ldHdvcms6IFtcIkdFVCAvbmV0d29ya3Mve293bmVyfS97cmVwb30vZXZlbnRzXCJdLFxuICAgIGxpc3RQdWJsaWNFdmVudHNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzL3B1YmxpY1wiXSxcbiAgICBsaXN0UHVibGljT3JnRXZlbnRzOiBbXCJHRVQgL29yZ3Mve29yZ30vZXZlbnRzXCJdLFxuICAgIGxpc3RSZWNlaXZlZEV2ZW50c0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9yZWNlaXZlZF9ldmVudHNcIl0sXG4gICAgbGlzdFJlY2VpdmVkUHVibGljRXZlbnRzRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3JlY2VpdmVkX2V2ZW50cy9wdWJsaWNcIl0sXG4gICAgbGlzdFJlcG9FdmVudHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZXZlbnRzXCJdLFxuICAgIGxpc3RSZXBvTm90aWZpY2F0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L25vdGlmaWNhdGlvbnNcIl0sXG4gICAgbGlzdFJlcG9zU3RhcnJlZEJ5QXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9zdGFycmVkXCJdLFxuICAgIGxpc3RSZXBvc1N0YXJyZWRCeVVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zdGFycmVkXCJdLFxuICAgIGxpc3RSZXBvc1dhdGNoZWRCeVVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zdWJzY3JpcHRpb25zXCJdLFxuICAgIGxpc3RTdGFyZ2F6ZXJzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGFyZ2F6ZXJzXCJdLFxuICAgIGxpc3RXYXRjaGVkUmVwb3NGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3N1YnNjcmlwdGlvbnNcIl0sXG4gICAgbGlzdFdhdGNoZXJzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdWJzY3JpYmVyc1wiXSxcbiAgICBtYXJrTm90aWZpY2F0aW9uc0FzUmVhZDogW1wiUFVUIC9ub3RpZmljYXRpb25zXCJdLFxuICAgIG1hcmtSZXBvTm90aWZpY2F0aW9uc0FzUmVhZDogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ub3RpZmljYXRpb25zXCJdLFxuICAgIG1hcmtUaHJlYWRBc1JlYWQ6IFtcIlBBVENIIC9ub3RpZmljYXRpb25zL3RocmVhZHMve3RocmVhZF9pZH1cIl0sXG4gICAgc2V0UmVwb1N1YnNjcmlwdGlvbjogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdWJzY3JpcHRpb25cIl0sXG4gICAgc2V0VGhyZWFkU3Vic2NyaXB0aW9uOiBbXCJQVVQgL25vdGlmaWNhdGlvbnMvdGhyZWFkcy97dGhyZWFkX2lkfS9zdWJzY3JpcHRpb25cIl0sXG4gICAgc3RhclJlcG9Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUFVUIC91c2VyL3N0YXJyZWQve293bmVyfS97cmVwb31cIl0sXG4gICAgdW5zdGFyUmVwb0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvc3RhcnJlZC97b3duZXJ9L3tyZXBvfVwiXVxuICB9LFxuICBhcHBzOiB7XG4gICAgYWRkUmVwb1RvSW5zdGFsbGF0aW9uOiBbXCJQVVQgL3VzZXIvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJhcHBzXCIsIFwiYWRkUmVwb1RvSW5zdGFsbGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXJcIl1cbiAgICB9XSxcbiAgICBhZGRSZXBvVG9JbnN0YWxsYXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUFVUIC91c2VyL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiXSxcbiAgICBjaGVja1Rva2VuOiBbXCJQT1NUIC9hcHBsaWNhdGlvbnMve2NsaWVudF9pZH0vdG9rZW5cIl0sXG4gICAgY3JlYXRlRnJvbU1hbmlmZXN0OiBbXCJQT1NUIC9hcHAtbWFuaWZlc3RzL3tjb2RlfS9jb252ZXJzaW9uc1wiXSxcbiAgICBjcmVhdGVJbnN0YWxsYXRpb25BY2Nlc3NUb2tlbjogW1wiUE9TVCAvYXBwL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vYWNjZXNzX3Rva2Vuc1wiXSxcbiAgICBkZWxldGVBdXRob3JpemF0aW9uOiBbXCJERUxFVEUgL2FwcGxpY2F0aW9ucy97Y2xpZW50X2lkfS9ncmFudFwiXSxcbiAgICBkZWxldGVJbnN0YWxsYXRpb246IFtcIkRFTEVURSAvYXBwL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH1cIl0sXG4gICAgZGVsZXRlVG9rZW46IFtcIkRFTEVURSAvYXBwbGljYXRpb25zL3tjbGllbnRfaWR9L3Rva2VuXCJdLFxuICAgIGdldEF1dGhlbnRpY2F0ZWQ6IFtcIkdFVCAvYXBwXCJdLFxuICAgIGdldEJ5U2x1ZzogW1wiR0VUIC9hcHBzL3thcHBfc2x1Z31cIl0sXG4gICAgZ2V0SW5zdGFsbGF0aW9uOiBbXCJHRVQgL2FwcC9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9XCJdLFxuICAgIGdldE9yZ0luc3RhbGxhdGlvbjogW1wiR0VUIC9vcmdzL3tvcmd9L2luc3RhbGxhdGlvblwiXSxcbiAgICBnZXRSZXBvSW5zdGFsbGF0aW9uOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2luc3RhbGxhdGlvblwiXSxcbiAgICBnZXRTdWJzY3JpcHRpb25QbGFuRm9yQWNjb3VudDogW1wiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL2FjY291bnRzL3thY2NvdW50X2lkfVwiXSxcbiAgICBnZXRTdWJzY3JpcHRpb25QbGFuRm9yQWNjb3VudFN0dWJiZWQ6IFtcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9zdHViYmVkL2FjY291bnRzL3thY2NvdW50X2lkfVwiXSxcbiAgICBnZXRVc2VySW5zdGFsbGF0aW9uOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vaW5zdGFsbGF0aW9uXCJdLFxuICAgIGdldFdlYmhvb2tDb25maWdGb3JBcHA6IFtcIkdFVCAvYXBwL2hvb2svY29uZmlnXCJdLFxuICAgIGdldFdlYmhvb2tEZWxpdmVyeTogW1wiR0VUIC9hcHAvaG9vay9kZWxpdmVyaWVzL3tkZWxpdmVyeV9pZH1cIl0sXG4gICAgbGlzdEFjY291bnRzRm9yUGxhbjogW1wiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3BsYW5zL3twbGFuX2lkfS9hY2NvdW50c1wiXSxcbiAgICBsaXN0QWNjb3VudHNGb3JQbGFuU3R1YmJlZDogW1wiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3N0dWJiZWQvcGxhbnMve3BsYW5faWR9L2FjY291bnRzXCJdLFxuICAgIGxpc3RJbnN0YWxsYXRpb25SZXBvc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIl0sXG4gICAgbGlzdEluc3RhbGxhdGlvbnM6IFtcIkdFVCAvYXBwL2luc3RhbGxhdGlvbnNcIl0sXG4gICAgbGlzdEluc3RhbGxhdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2luc3RhbGxhdGlvbnNcIl0sXG4gICAgbGlzdFBsYW5zOiBbXCJHRVQgL21hcmtldHBsYWNlX2xpc3RpbmcvcGxhbnNcIl0sXG4gICAgbGlzdFBsYW5zU3R1YmJlZDogW1wiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3N0dWJiZWQvcGxhbnNcIl0sXG4gICAgbGlzdFJlcG9zQWNjZXNzaWJsZVRvSW5zdGFsbGF0aW9uOiBbXCJHRVQgL2luc3RhbGxhdGlvbi9yZXBvc2l0b3JpZXNcIl0sXG4gICAgbGlzdFN1YnNjcmlwdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL21hcmtldHBsYWNlX3B1cmNoYXNlc1wiXSxcbiAgICBsaXN0U3Vic2NyaXB0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyU3R1YmJlZDogW1wiR0VUIC91c2VyL21hcmtldHBsYWNlX3B1cmNoYXNlcy9zdHViYmVkXCJdLFxuICAgIGxpc3RXZWJob29rRGVsaXZlcmllczogW1wiR0VUIC9hcHAvaG9vay9kZWxpdmVyaWVzXCJdLFxuICAgIHJlZGVsaXZlcldlYmhvb2tEZWxpdmVyeTogW1wiUE9TVCAvYXBwL2hvb2svZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9L2F0dGVtcHRzXCJdLFxuICAgIHJlbW92ZVJlcG9Gcm9tSW5zdGFsbGF0aW9uOiBbXCJERUxFVEUgL3VzZXIvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJhcHBzXCIsIFwicmVtb3ZlUmVwb0Zyb21JbnN0YWxsYXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlclwiXVxuICAgIH1dLFxuICAgIHJlbW92ZVJlcG9Gcm9tSW5zdGFsbGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIl0sXG4gICAgcmVzZXRUb2tlbjogW1wiUEFUQ0ggL2FwcGxpY2F0aW9ucy97Y2xpZW50X2lkfS90b2tlblwiXSxcbiAgICByZXZva2VJbnN0YWxsYXRpb25BY2Nlc3NUb2tlbjogW1wiREVMRVRFIC9pbnN0YWxsYXRpb24vdG9rZW5cIl0sXG4gICAgc2NvcGVUb2tlbjogW1wiUE9TVCAvYXBwbGljYXRpb25zL3tjbGllbnRfaWR9L3Rva2VuL3Njb3BlZFwiXSxcbiAgICBzdXNwZW5kSW5zdGFsbGF0aW9uOiBbXCJQVVQgL2FwcC9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3N1c3BlbmRlZFwiXSxcbiAgICB1bnN1c3BlbmRJbnN0YWxsYXRpb246IFtcIkRFTEVURSAvYXBwL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vc3VzcGVuZGVkXCJdLFxuICAgIHVwZGF0ZVdlYmhvb2tDb25maWdGb3JBcHA6IFtcIlBBVENIIC9hcHAvaG9vay9jb25maWdcIl1cbiAgfSxcbiAgYmlsbGluZzoge1xuICAgIGdldEdpdGh1YkFjdGlvbnNCaWxsaW5nT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vc2V0dGluZ3MvYmlsbGluZy9hY3Rpb25zXCJdLFxuICAgIGdldEdpdGh1YkFjdGlvbnNCaWxsaW5nVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NldHRpbmdzL2JpbGxpbmcvYWN0aW9uc1wiXSxcbiAgICBnZXRHaXRodWJBZHZhbmNlZFNlY3VyaXR5QmlsbGluZ0doZTogW1wiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vc2V0dGluZ3MvYmlsbGluZy9hZHZhbmNlZC1zZWN1cml0eVwiXSxcbiAgICBnZXRHaXRodWJBZHZhbmNlZFNlY3VyaXR5QmlsbGluZ09yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL2JpbGxpbmcvYWR2YW5jZWQtc2VjdXJpdHlcIl0sXG4gICAgZ2V0R2l0aHViUGFja2FnZXNCaWxsaW5nT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vc2V0dGluZ3MvYmlsbGluZy9wYWNrYWdlc1wiXSxcbiAgICBnZXRHaXRodWJQYWNrYWdlc0JpbGxpbmdVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc2V0dGluZ3MvYmlsbGluZy9wYWNrYWdlc1wiXSxcbiAgICBnZXRTaGFyZWRTdG9yYWdlQmlsbGluZ09yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL2JpbGxpbmcvc2hhcmVkLXN0b3JhZ2VcIl0sXG4gICAgZ2V0U2hhcmVkU3RvcmFnZUJpbGxpbmdVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc2V0dGluZ3MvYmlsbGluZy9zaGFyZWQtc3RvcmFnZVwiXVxuICB9LFxuICBjaGVja3M6IHtcbiAgICBjcmVhdGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXJ1bnNcIl0sXG4gICAgY3JlYXRlU3VpdGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXN1aXRlc1wiXSxcbiAgICBnZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stcnVucy97Y2hlY2tfcnVuX2lkfVwiXSxcbiAgICBnZXRTdWl0ZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1zdWl0ZXMve2NoZWNrX3N1aXRlX2lkfVwiXSxcbiAgICBsaXN0QW5ub3RhdGlvbnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stcnVucy97Y2hlY2tfcnVuX2lkfS9hbm5vdGF0aW9uc1wiXSxcbiAgICBsaXN0Rm9yUmVmOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vY2hlY2stcnVuc1wiXSxcbiAgICBsaXN0Rm9yU3VpdGU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stc3VpdGVzL3tjaGVja19zdWl0ZV9pZH0vY2hlY2stcnVuc1wiXSxcbiAgICBsaXN0U3VpdGVzRm9yUmVmOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vY2hlY2stc3VpdGVzXCJdLFxuICAgIHJlcmVxdWVzdFJ1bjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stcnVucy97Y2hlY2tfcnVuX2lkfS9yZXJlcXVlc3RcIl0sXG4gICAgcmVyZXF1ZXN0U3VpdGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXN1aXRlcy97Y2hlY2tfc3VpdGVfaWR9L3JlcmVxdWVzdFwiXSxcbiAgICBzZXRTdWl0ZXNQcmVmZXJlbmNlczogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXN1aXRlcy9wcmVmZXJlbmNlc1wiXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1ydW5zL3tjaGVja19ydW5faWR9XCJdXG4gIH0sXG4gIGNvZGVTY2FubmluZzoge1xuICAgIGRlbGV0ZUFuYWx5c2lzOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYW5hbHlzZXMve2FuYWx5c2lzX2lkfXs/Y29uZmlybV9kZWxldGV9XCJdLFxuICAgIGdldEFsZXJ0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9XCIsIHt9LCB7XG4gICAgICByZW5hbWVkUGFyYW1ldGVyczoge1xuICAgICAgICBhbGVydF9pZDogXCJhbGVydF9udW1iZXJcIlxuICAgICAgfVxuICAgIH1dLFxuICAgIGdldEFuYWx5c2lzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYW5hbHlzZXMve2FuYWx5c2lzX2lkfVwiXSxcbiAgICBnZXRTYXJpZjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL3Nhcmlmcy97c2FyaWZfaWR9XCJdLFxuICAgIGxpc3RBbGVydEluc3RhbmNlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9pbnN0YW5jZXNcIl0sXG4gICAgbGlzdEFsZXJ0c0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2NvZGUtc2Nhbm5pbmcvYWxlcnRzXCJdLFxuICAgIGxpc3RBbGVydHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzXCJdLFxuICAgIGxpc3RBbGVydHNJbnN0YW5jZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn0vaW5zdGFuY2VzXCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJjb2RlU2Nhbm5pbmdcIiwgXCJsaXN0QWxlcnRJbnN0YW5jZXNcIl1cbiAgICB9XSxcbiAgICBsaXN0UmVjZW50QW5hbHlzZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbmFseXNlc1wiXSxcbiAgICB1cGRhdGVBbGVydDogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9XCJdLFxuICAgIHVwbG9hZFNhcmlmOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL3Nhcmlmc1wiXVxuICB9LFxuICBjb2Rlc09mQ29uZHVjdDoge1xuICAgIGdldEFsbENvZGVzT2ZDb25kdWN0OiBbXCJHRVQgL2NvZGVzX29mX2NvbmR1Y3RcIl0sXG4gICAgZ2V0Q29uZHVjdENvZGU6IFtcIkdFVCAvY29kZXNfb2ZfY29uZHVjdC97a2V5fVwiXVxuICB9LFxuICBjb2Rlc3BhY2VzOiB7XG4gICAgYWRkUmVwb3NpdG9yeUZvclNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQVVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiXSxcbiAgICBjb2Rlc3BhY2VNYWNoaW5lc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9L21hY2hpbmVzXCJdLFxuICAgIGNyZWF0ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL2NvZGVzcGFjZXNcIl0sXG4gICAgY3JlYXRlT3JVcGRhdGVSZXBvU2VjcmV0OiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlU2VjcmV0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBVVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBjcmVhdGVXaXRoUHJGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb2Rlc3BhY2VzXCJdLFxuICAgIGNyZWF0ZVdpdGhSZXBvRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXNcIl0sXG4gICAgZGVsZXRlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX1cIl0sXG4gICAgZGVsZXRlRnJvbU9yZ2FuaXphdGlvbjogW1wiREVMRVRFIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfS9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX1cIl0sXG4gICAgZGVsZXRlUmVwb1NlY3JldDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBkZWxldGVTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiREVMRVRFIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGV4cG9ydEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfS9leHBvcnRzXCJdLFxuICAgIGdldEV4cG9ydERldGFpbHNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfS9leHBvcnRzL3tleHBvcnRfaWR9XCJdLFxuICAgIGdldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9XCJdLFxuICAgIGdldFB1YmxpY0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3B1YmxpYy1rZXlcIl0sXG4gICAgZ2V0UmVwb1B1YmxpY0tleTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL3NlY3JldHMvcHVibGljLWtleVwiXSxcbiAgICBnZXRSZXBvU2VjcmV0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGdldFNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgbGlzdERldmNvbnRhaW5lcnNJblJlcG9zaXRvcnlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL2RldmNvbnRhaW5lcnNcIl0sXG4gICAgbGlzdEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvY29kZXNwYWNlc1wiXSxcbiAgICBsaXN0SW5Pcmdhbml6YXRpb246IFtcIkdFVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzXCIsIHt9LCB7XG4gICAgICByZW5hbWVkUGFyYW1ldGVyczoge1xuICAgICAgICBvcmdfaWQ6IFwib3JnXCJcbiAgICAgIH1cbiAgICB9XSxcbiAgICBsaXN0SW5SZXBvc2l0b3J5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlc1wiXSxcbiAgICBsaXN0UmVwb1NlY3JldHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9zZWNyZXRzXCJdLFxuICAgIGxpc3RSZXBvc2l0b3JpZXNGb3JTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiXSxcbiAgICBsaXN0U2VjcmV0c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzXCJdLFxuICAgIHJlbW92ZVJlcG9zaXRvcnlGb3JTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiREVMRVRFIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIl0sXG4gICAgcmVwb01hY2hpbmVzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9tYWNoaW5lc1wiXSxcbiAgICBzZXRSZXBvc2l0b3JpZXNGb3JTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUFVUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiXSxcbiAgICBzdGFydEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfS9zdGFydFwiXSxcbiAgICBzdG9wRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9L3N0b3BcIl0sXG4gICAgc3RvcEluT3JnYW5pemF0aW9uOiBbXCJQT1NUIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfS9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vc3RvcFwiXSxcbiAgICB1cGRhdGVGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUEFUQ0ggL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9XCJdXG4gIH0sXG4gIGRlcGVuZGFib3Q6IHtcbiAgICBhZGRTZWxlY3RlZFJlcG9Ub09yZ1NlY3JldDogW1wiUFVUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIl0sXG4gICAgY3JlYXRlT3JVcGRhdGVPcmdTZWNyZXQ6IFtcIlBVVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBjcmVhdGVPclVwZGF0ZVJlcG9TZWNyZXQ6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZGVsZXRlT3JnU2VjcmV0OiBbXCJERUxFVEUgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZGVsZXRlUmVwb1NlY3JldDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBnZXRPcmdQdWJsaWNLZXk6IFtcIkdFVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMvcHVibGljLWtleVwiXSxcbiAgICBnZXRPcmdTZWNyZXQ6IFtcIkdFVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBnZXRSZXBvUHVibGljS2V5OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3Qvc2VjcmV0cy9wdWJsaWMta2V5XCJdLFxuICAgIGdldFJlcG9TZWNyZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgbGlzdE9yZ1NlY3JldHM6IFtcIkdFVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHNcIl0sXG4gICAgbGlzdFJlcG9TZWNyZXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3Qvc2VjcmV0c1wiXSxcbiAgICBsaXN0U2VsZWN0ZWRSZXBvc0Zvck9yZ1NlY3JldDogW1wiR0VUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiXSxcbiAgICByZW1vdmVTZWxlY3RlZFJlcG9Gcm9tT3JnU2VjcmV0OiBbXCJERUxFVEUgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiXSxcbiAgICBzZXRTZWxlY3RlZFJlcG9zRm9yT3JnU2VjcmV0OiBbXCJQVVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCJdXG4gIH0sXG4gIGRlcGVuZGVuY3lHcmFwaDoge1xuICAgIGNyZWF0ZVJlcG9zaXRvcnlTbmFwc2hvdDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kZW5jeS1ncmFwaC9zbmFwc2hvdHNcIl0sXG4gICAgZGlmZlJhbmdlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGVuY3ktZ3JhcGgvY29tcGFyZS97YmFzZWhlYWR9XCJdXG4gIH0sXG4gIGVtb2ppczoge1xuICAgIGdldDogW1wiR0VUIC9lbW9qaXNcIl1cbiAgfSxcbiAgZW50ZXJwcmlzZUFkbWluOiB7XG4gICAgYWRkQ3VzdG9tTGFiZWxzVG9TZWxmSG9zdGVkUnVubmVyRm9yRW50ZXJwcmlzZTogW1wiUE9TVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIl0sXG4gICAgZGlzYWJsZVNlbGVjdGVkT3JnYW5pemF0aW9uR2l0aHViQWN0aW9uc0VudGVycHJpc2U6IFtcIkRFTEVURSAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2FjdGlvbnMvcGVybWlzc2lvbnMvb3JnYW5pemF0aW9ucy97b3JnX2lkfVwiXSxcbiAgICBlbmFibGVTZWxlY3RlZE9yZ2FuaXphdGlvbkdpdGh1YkFjdGlvbnNFbnRlcnByaXNlOiBbXCJQVVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9hY3Rpb25zL3Blcm1pc3Npb25zL29yZ2FuaXphdGlvbnMve29yZ19pZH1cIl0sXG4gICAgZ2V0QWxsb3dlZEFjdGlvbnNFbnRlcnByaXNlOiBbXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9hY3Rpb25zL3Blcm1pc3Npb25zL3NlbGVjdGVkLWFjdGlvbnNcIl0sXG4gICAgZ2V0R2l0aHViQWN0aW9uc1Blcm1pc3Npb25zRW50ZXJwcmlzZTogW1wiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vYWN0aW9ucy9wZXJtaXNzaW9uc1wiXSxcbiAgICBnZXRTZXJ2ZXJTdGF0aXN0aWNzOiBbXCJHRVQgL2VudGVycHJpc2UtaW5zdGFsbGF0aW9uL3tlbnRlcnByaXNlX29yX29yZ30vc2VydmVyLXN0YXRpc3RpY3NcIl0sXG4gICAgbGlzdExhYmVsc0ZvclNlbGZIb3N0ZWRSdW5uZXJGb3JFbnRlcnByaXNlOiBbXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCJdLFxuICAgIGxpc3RTZWxlY3RlZE9yZ2FuaXphdGlvbnNFbmFibGVkR2l0aHViQWN0aW9uc0VudGVycHJpc2U6IFtcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2FjdGlvbnMvcGVybWlzc2lvbnMvb3JnYW5pemF0aW9uc1wiXSxcbiAgICByZW1vdmVBbGxDdXN0b21MYWJlbHNGcm9tU2VsZkhvc3RlZFJ1bm5lckZvckVudGVycHJpc2U6IFtcIkRFTEVURSAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIl0sXG4gICAgcmVtb3ZlQ3VzdG9tTGFiZWxGcm9tU2VsZkhvc3RlZFJ1bm5lckZvckVudGVycHJpc2U6IFtcIkRFTEVURSAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHMve25hbWV9XCJdLFxuICAgIHNldEFsbG93ZWRBY3Rpb25zRW50ZXJwcmlzZTogW1wiUFVUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vYWN0aW9ucy9wZXJtaXNzaW9ucy9zZWxlY3RlZC1hY3Rpb25zXCJdLFxuICAgIHNldEN1c3RvbUxhYmVsc0ZvclNlbGZIb3N0ZWRSdW5uZXJGb3JFbnRlcnByaXNlOiBbXCJQVVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCJdLFxuICAgIHNldEdpdGh1YkFjdGlvbnNQZXJtaXNzaW9uc0VudGVycHJpc2U6IFtcIlBVVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2FjdGlvbnMvcGVybWlzc2lvbnNcIl0sXG4gICAgc2V0U2VsZWN0ZWRPcmdhbml6YXRpb25zRW5hYmxlZEdpdGh1YkFjdGlvbnNFbnRlcnByaXNlOiBbXCJQVVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9hY3Rpb25zL3Blcm1pc3Npb25zL29yZ2FuaXphdGlvbnNcIl1cbiAgfSxcbiAgZ2lzdHM6IHtcbiAgICBjaGVja0lzU3RhcnJlZDogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH0vc3RhclwiXSxcbiAgICBjcmVhdGU6IFtcIlBPU1QgL2dpc3RzXCJdLFxuICAgIGNyZWF0ZUNvbW1lbnQ6IFtcIlBPU1QgL2dpc3RzL3tnaXN0X2lkfS9jb21tZW50c1wiXSxcbiAgICBkZWxldGU6IFtcIkRFTEVURSAvZ2lzdHMve2dpc3RfaWR9XCJdLFxuICAgIGRlbGV0ZUNvbW1lbnQ6IFtcIkRFTEVURSAvZ2lzdHMve2dpc3RfaWR9L2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBmb3JrOiBbXCJQT1NUIC9naXN0cy97Z2lzdF9pZH0vZm9ya3NcIl0sXG4gICAgZ2V0OiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfVwiXSxcbiAgICBnZXRDb21tZW50OiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfS9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgZ2V0UmV2aXNpb246IFtcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L3tzaGF9XCJdLFxuICAgIGxpc3Q6IFtcIkdFVCAvZ2lzdHNcIl0sXG4gICAgbGlzdENvbW1lbnRzOiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfS9jb21tZW50c1wiXSxcbiAgICBsaXN0Q29tbWl0czogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH0vY29tbWl0c1wiXSxcbiAgICBsaXN0Rm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2dpc3RzXCJdLFxuICAgIGxpc3RGb3JrczogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH0vZm9ya3NcIl0sXG4gICAgbGlzdFB1YmxpYzogW1wiR0VUIC9naXN0cy9wdWJsaWNcIl0sXG4gICAgbGlzdFN0YXJyZWQ6IFtcIkdFVCAvZ2lzdHMvc3RhcnJlZFwiXSxcbiAgICBzdGFyOiBbXCJQVVQgL2dpc3RzL3tnaXN0X2lkfS9zdGFyXCJdLFxuICAgIHVuc3RhcjogW1wiREVMRVRFIC9naXN0cy97Z2lzdF9pZH0vc3RhclwiXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9naXN0cy97Z2lzdF9pZH1cIl0sXG4gICAgdXBkYXRlQ29tbWVudDogW1wiUEFUQ0ggL2dpc3RzL3tnaXN0X2lkfS9jb21tZW50cy97Y29tbWVudF9pZH1cIl1cbiAgfSxcbiAgZ2l0OiB7XG4gICAgY3JlYXRlQmxvYjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L2Jsb2JzXCJdLFxuICAgIGNyZWF0ZUNvbW1pdDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L2NvbW1pdHNcIl0sXG4gICAgY3JlYXRlUmVmOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvcmVmc1wiXSxcbiAgICBjcmVhdGVUYWc6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC90YWdzXCJdLFxuICAgIGNyZWF0ZVRyZWU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC90cmVlc1wiXSxcbiAgICBkZWxldGVSZWY6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3JlZnMve3JlZn1cIl0sXG4gICAgZ2V0QmxvYjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvYmxvYnMve2ZpbGVfc2hhfVwiXSxcbiAgICBnZXRDb21taXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L2NvbW1pdHMve2NvbW1pdF9zaGF9XCJdLFxuICAgIGdldFJlZjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvcmVmL3tyZWZ9XCJdLFxuICAgIGdldFRhZzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvdGFncy97dGFnX3NoYX1cIl0sXG4gICAgZ2V0VHJlZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvdHJlZXMve3RyZWVfc2hhfVwiXSxcbiAgICBsaXN0TWF0Y2hpbmdSZWZzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9tYXRjaGluZy1yZWZzL3tyZWZ9XCJdLFxuICAgIHVwZGF0ZVJlZjogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9yZWZzL3tyZWZ9XCJdXG4gIH0sXG4gIGdpdGlnbm9yZToge1xuICAgIGdldEFsbFRlbXBsYXRlczogW1wiR0VUIC9naXRpZ25vcmUvdGVtcGxhdGVzXCJdLFxuICAgIGdldFRlbXBsYXRlOiBbXCJHRVQgL2dpdGlnbm9yZS90ZW1wbGF0ZXMve25hbWV9XCJdXG4gIH0sXG4gIGludGVyYWN0aW9uczoge1xuICAgIGdldFJlc3RyaWN0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIGdldFJlc3RyaWN0aW9uc0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICBnZXRSZXN0cmljdGlvbnNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICBnZXRSZXN0cmljdGlvbnNGb3JZb3VyUHVibGljUmVwb3M6IFtcIkdFVCAvdXNlci9pbnRlcmFjdGlvbi1saW1pdHNcIiwge30sIHtcbiAgICAgIHJlbmFtZWQ6IFtcImludGVyYWN0aW9uc1wiLCBcImdldFJlc3RyaWN0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdXG4gICAgfV0sXG4gICAgcmVtb3ZlUmVzdHJpY3Rpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgcmVtb3ZlUmVzdHJpY3Rpb25zRm9yT3JnOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIHJlbW92ZVJlc3RyaWN0aW9uc0ZvclJlcG86IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIHJlbW92ZVJlc3RyaWN0aW9uc0ZvcllvdXJQdWJsaWNSZXBvczogW1wiREVMRVRFIC91c2VyL2ludGVyYWN0aW9uLWxpbWl0c1wiLCB7fSwge1xuICAgICAgcmVuYW1lZDogW1wiaW50ZXJhY3Rpb25zXCIsIFwicmVtb3ZlUmVzdHJpY3Rpb25zRm9yQXV0aGVudGljYXRlZFVzZXJcIl1cbiAgICB9XSxcbiAgICBzZXRSZXN0cmljdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUFVUIC91c2VyL2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICBzZXRSZXN0cmljdGlvbnNGb3JPcmc6IFtcIlBVVCAvb3Jncy97b3JnfS9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgc2V0UmVzdHJpY3Rpb25zRm9yUmVwbzogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgc2V0UmVzdHJpY3Rpb25zRm9yWW91clB1YmxpY1JlcG9zOiBbXCJQVVQgL3VzZXIvaW50ZXJhY3Rpb24tbGltaXRzXCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJpbnRlcmFjdGlvbnNcIiwgXCJzZXRSZXN0cmljdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlclwiXVxuICAgIH1dXG4gIH0sXG4gIGlzc3Vlczoge1xuICAgIGFkZEFzc2lnbmVlczogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2Fzc2lnbmVlc1wiXSxcbiAgICBhZGRMYWJlbHM6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sYWJlbHNcIl0sXG4gICAgY2hlY2tVc2VyQ2FuQmVBc3NpZ25lZDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hc3NpZ25lZXMve2Fzc2lnbmVlfVwiXSxcbiAgICBjcmVhdGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlc1wiXSxcbiAgICBjcmVhdGVDb21tZW50OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vY29tbWVudHNcIl0sXG4gICAgY3JlYXRlTGFiZWw6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhYmVsc1wiXSxcbiAgICBjcmVhdGVNaWxlc3RvbmU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXNcIl0sXG4gICAgZGVsZXRlQ29tbWVudDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIGRlbGV0ZUxhYmVsOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhYmVscy97bmFtZX1cIl0sXG4gICAgZGVsZXRlTWlsZXN0b25lOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXMve21pbGVzdG9uZV9udW1iZXJ9XCJdLFxuICAgIGdldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn1cIl0sXG4gICAgZ2V0Q29tbWVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIGdldEV2ZW50OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9ldmVudHMve2V2ZW50X2lkfVwiXSxcbiAgICBnZXRMYWJlbDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sYWJlbHMve25hbWV9XCJdLFxuICAgIGdldE1pbGVzdG9uZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzL3ttaWxlc3RvbmVfbnVtYmVyfVwiXSxcbiAgICBsaXN0OiBbXCJHRVQgL2lzc3Vlc1wiXSxcbiAgICBsaXN0QXNzaWduZWVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Fzc2lnbmVlc1wiXSxcbiAgICBsaXN0Q29tbWVudHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2NvbW1lbnRzXCJdLFxuICAgIGxpc3RDb21tZW50c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzXCJdLFxuICAgIGxpc3RFdmVudHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2V2ZW50c1wiXSxcbiAgICBsaXN0RXZlbnRzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvZXZlbnRzXCJdLFxuICAgIGxpc3RFdmVudHNGb3JUaW1lbGluZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vdGltZWxpbmVcIl0sXG4gICAgbGlzdEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvaXNzdWVzXCJdLFxuICAgIGxpc3RGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9pc3N1ZXNcIl0sXG4gICAgbGlzdEZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzXCJdLFxuICAgIGxpc3RMYWJlbHNGb3JNaWxlc3RvbmU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lcy97bWlsZXN0b25lX251bWJlcn0vbGFiZWxzXCJdLFxuICAgIGxpc3RMYWJlbHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhYmVsc1wiXSxcbiAgICBsaXN0TGFiZWxzT25Jc3N1ZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbGFiZWxzXCJdLFxuICAgIGxpc3RNaWxlc3RvbmVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXNcIl0sXG4gICAgbG9jazogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbG9ja1wiXSxcbiAgICByZW1vdmVBbGxMYWJlbHM6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xhYmVsc1wiXSxcbiAgICByZW1vdmVBc3NpZ25lZXM6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2Fzc2lnbmVlc1wiXSxcbiAgICByZW1vdmVMYWJlbDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbGFiZWxzL3tuYW1lfVwiXSxcbiAgICBzZXRMYWJlbHM6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xhYmVsc1wiXSxcbiAgICB1bmxvY2s6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xvY2tcIl0sXG4gICAgdXBkYXRlOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9XCJdLFxuICAgIHVwZGF0ZUNvbW1lbnQ6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIHVwZGF0ZUxhYmVsOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vbGFiZWxzL3tuYW1lfVwiXSxcbiAgICB1cGRhdGVNaWxlc3RvbmU6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzL3ttaWxlc3RvbmVfbnVtYmVyfVwiXVxuICB9LFxuICBsaWNlbnNlczoge1xuICAgIGdldDogW1wiR0VUIC9saWNlbnNlcy97bGljZW5zZX1cIl0sXG4gICAgZ2V0QWxsQ29tbW9ubHlVc2VkOiBbXCJHRVQgL2xpY2Vuc2VzXCJdLFxuICAgIGdldEZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbGljZW5zZVwiXVxuICB9LFxuICBtYXJrZG93bjoge1xuICAgIHJlbmRlcjogW1wiUE9TVCAvbWFya2Rvd25cIl0sXG4gICAgcmVuZGVyUmF3OiBbXCJQT1NUIC9tYXJrZG93bi9yYXdcIiwge1xuICAgICAgaGVhZGVyczoge1xuICAgICAgICBcImNvbnRlbnQtdHlwZVwiOiBcInRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLThcIlxuICAgICAgfVxuICAgIH1dXG4gIH0sXG4gIG1ldGE6IHtcbiAgICBnZXQ6IFtcIkdFVCAvbWV0YVwiXSxcbiAgICBnZXRPY3RvY2F0OiBbXCJHRVQgL29jdG9jYXRcIl0sXG4gICAgZ2V0WmVuOiBbXCJHRVQgL3plblwiXSxcbiAgICByb290OiBbXCJHRVQgL1wiXVxuICB9LFxuICBtaWdyYXRpb25zOiB7XG4gICAgY2FuY2VsSW1wb3J0OiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ltcG9ydFwiXSxcbiAgICBkZWxldGVBcmNoaXZlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L2FyY2hpdmVcIl0sXG4gICAgZGVsZXRlQXJjaGl2ZUZvck9yZzogW1wiREVMRVRFIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vYXJjaGl2ZVwiXSxcbiAgICBkb3dubG9hZEFyY2hpdmVGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L2FyY2hpdmVcIl0sXG4gICAgZ2V0QXJjaGl2ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9hcmNoaXZlXCJdLFxuICAgIGdldENvbW1pdEF1dGhvcnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaW1wb3J0L2F1dGhvcnNcIl0sXG4gICAgZ2V0SW1wb3J0U3RhdHVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ltcG9ydFwiXSxcbiAgICBnZXRMYXJnZUZpbGVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ltcG9ydC9sYXJnZV9maWxlc1wiXSxcbiAgICBnZXRTdGF0dXNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH1cIl0sXG4gICAgZ2V0U3RhdHVzRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfVwiXSxcbiAgICBsaXN0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9taWdyYXRpb25zXCJdLFxuICAgIGxpc3RGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9taWdyYXRpb25zXCJdLFxuICAgIGxpc3RSZXBvc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIl0sXG4gICAgbGlzdFJlcG9zRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIl0sXG4gICAgbGlzdFJlcG9zRm9yVXNlcjogW1wiR0VUIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJtaWdyYXRpb25zXCIsIFwibGlzdFJlcG9zRm9yQXV0aGVudGljYXRlZFVzZXJcIl1cbiAgICB9XSxcbiAgICBtYXBDb21taXRBdXRob3I6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbXBvcnQvYXV0aG9ycy97YXV0aG9yX2lkfVwiXSxcbiAgICBzZXRMZnNQcmVmZXJlbmNlOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaW1wb3J0L2xmc1wiXSxcbiAgICBzdGFydEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL21pZ3JhdGlvbnNcIl0sXG4gICAgc3RhcnRGb3JPcmc6IFtcIlBPU1QgL29yZ3Mve29yZ30vbWlncmF0aW9uc1wiXSxcbiAgICBzdGFydEltcG9ydDogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbXBvcnRcIl0sXG4gICAgdW5sb2NrUmVwb0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9yZXBvcy97cmVwb19uYW1lfS9sb2NrXCJdLFxuICAgIHVubG9ja1JlcG9Gb3JPcmc6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L3JlcG9zL3tyZXBvX25hbWV9L2xvY2tcIl0sXG4gICAgdXBkYXRlSW1wb3J0OiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaW1wb3J0XCJdXG4gIH0sXG4gIG9yZ3M6IHtcbiAgICBibG9ja1VzZXI6IFtcIlBVVCAvb3Jncy97b3JnfS9ibG9ja3Mve3VzZXJuYW1lfVwiXSxcbiAgICBjYW5jZWxJbnZpdGF0aW9uOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9XCJdLFxuICAgIGNoZWNrQmxvY2tlZFVzZXI6IFtcIkdFVCAvb3Jncy97b3JnfS9ibG9ja3Mve3VzZXJuYW1lfVwiXSxcbiAgICBjaGVja01lbWJlcnNoaXBGb3JVc2VyOiBbXCJHRVQgL29yZ3Mve29yZ30vbWVtYmVycy97dXNlcm5hbWV9XCJdLFxuICAgIGNoZWNrUHVibGljTWVtYmVyc2hpcEZvclVzZXI6IFtcIkdFVCAvb3Jncy97b3JnfS9wdWJsaWNfbWVtYmVycy97dXNlcm5hbWV9XCJdLFxuICAgIGNvbnZlcnRNZW1iZXJUb091dHNpZGVDb2xsYWJvcmF0b3I6IFtcIlBVVCAvb3Jncy97b3JnfS9vdXRzaWRlX2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiXSxcbiAgICBjcmVhdGVJbnZpdGF0aW9uOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2ludml0YXRpb25zXCJdLFxuICAgIGNyZWF0ZVdlYmhvb2s6IFtcIlBPU1QgL29yZ3Mve29yZ30vaG9va3NcIl0sXG4gICAgZGVsZXRlV2ViaG9vazogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfVwiXSxcbiAgICBnZXQ6IFtcIkdFVCAvb3Jncy97b3JnfVwiXSxcbiAgICBnZXRNZW1iZXJzaGlwRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9tZW1iZXJzaGlwcy9vcmdzL3tvcmd9XCJdLFxuICAgIGdldE1lbWJlcnNoaXBGb3JVc2VyOiBbXCJHRVQgL29yZ3Mve29yZ30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiXSxcbiAgICBnZXRXZWJob29rOiBbXCJHRVQgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9XCJdLFxuICAgIGdldFdlYmhvb2tDb25maWdGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH0vY29uZmlnXCJdLFxuICAgIGdldFdlYmhvb2tEZWxpdmVyeTogW1wiR0VUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzL3tkZWxpdmVyeV9pZH1cIl0sXG4gICAgbGlzdDogW1wiR0VUIC9vcmdhbml6YXRpb25zXCJdLFxuICAgIGxpc3RBcHBJbnN0YWxsYXRpb25zOiBbXCJHRVQgL29yZ3Mve29yZ30vaW5zdGFsbGF0aW9uc1wiXSxcbiAgICBsaXN0QmxvY2tlZFVzZXJzOiBbXCJHRVQgL29yZ3Mve29yZ30vYmxvY2tzXCJdLFxuICAgIGxpc3RDdXN0b21Sb2xlczogW1wiR0VUIC9vcmdhbml6YXRpb25zL3tvcmdhbml6YXRpb25faWR9L2N1c3RvbV9yb2xlc1wiXSxcbiAgICBsaXN0RmFpbGVkSW52aXRhdGlvbnM6IFtcIkdFVCAvb3Jncy97b3JnfS9mYWlsZWRfaW52aXRhdGlvbnNcIl0sXG4gICAgbGlzdEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvb3Jnc1wiXSxcbiAgICBsaXN0Rm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L29yZ3NcIl0sXG4gICAgbGlzdEludml0YXRpb25UZWFtczogW1wiR0VUIC9vcmdzL3tvcmd9L2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfS90ZWFtc1wiXSxcbiAgICBsaXN0TWVtYmVyczogW1wiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnNcIl0sXG4gICAgbGlzdE1lbWJlcnNoaXBzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9tZW1iZXJzaGlwcy9vcmdzXCJdLFxuICAgIGxpc3RPdXRzaWRlQ29sbGFib3JhdG9yczogW1wiR0VUIC9vcmdzL3tvcmd9L291dHNpZGVfY29sbGFib3JhdG9yc1wiXSxcbiAgICBsaXN0UGVuZGluZ0ludml0YXRpb25zOiBbXCJHRVQgL29yZ3Mve29yZ30vaW52aXRhdGlvbnNcIl0sXG4gICAgbGlzdFB1YmxpY01lbWJlcnM6IFtcIkdFVCAvb3Jncy97b3JnfS9wdWJsaWNfbWVtYmVyc1wiXSxcbiAgICBsaXN0V2ViaG9va0RlbGl2ZXJpZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllc1wiXSxcbiAgICBsaXN0V2ViaG9va3M6IFtcIkdFVCAvb3Jncy97b3JnfS9ob29rc1wiXSxcbiAgICBwaW5nV2ViaG9vazogW1wiUE9TVCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH0vcGluZ3NcIl0sXG4gICAgcmVkZWxpdmVyV2ViaG9va0RlbGl2ZXJ5OiBbXCJQT1NUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzL3tkZWxpdmVyeV9pZH0vYXR0ZW1wdHNcIl0sXG4gICAgcmVtb3ZlTWVtYmVyOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vbWVtYmVycy97dXNlcm5hbWV9XCJdLFxuICAgIHJlbW92ZU1lbWJlcnNoaXBGb3JVc2VyOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiXSxcbiAgICByZW1vdmVPdXRzaWRlQ29sbGFib3JhdG9yOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vb3V0c2lkZV9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX1cIl0sXG4gICAgcmVtb3ZlUHVibGljTWVtYmVyc2hpcEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vcHVibGljX21lbWJlcnMve3VzZXJuYW1lfVwiXSxcbiAgICBzZXRNZW1iZXJzaGlwRm9yVXNlcjogW1wiUFVUIC9vcmdzL3tvcmd9L21lbWJlcnNoaXBzL3t1c2VybmFtZX1cIl0sXG4gICAgc2V0UHVibGljTWVtYmVyc2hpcEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQVVQgL29yZ3Mve29yZ30vcHVibGljX21lbWJlcnMve3VzZXJuYW1lfVwiXSxcbiAgICB1bmJsb2NrVXNlcjogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2Jsb2Nrcy97dXNlcm5hbWV9XCJdLFxuICAgIHVwZGF0ZTogW1wiUEFUQ0ggL29yZ3Mve29yZ31cIl0sXG4gICAgdXBkYXRlTWVtYmVyc2hpcEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQQVRDSCAvdXNlci9tZW1iZXJzaGlwcy9vcmdzL3tvcmd9XCJdLFxuICAgIHVwZGF0ZVdlYmhvb2s6IFtcIlBBVENIIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfVwiXSxcbiAgICB1cGRhdGVXZWJob29rQ29uZmlnRm9yT3JnOiBbXCJQQVRDSCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH0vY29uZmlnXCJdXG4gIH0sXG4gIHBhY2thZ2VzOiB7XG4gICAgZGVsZXRlUGFja2FnZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX1cIl0sXG4gICAgZGVsZXRlUGFja2FnZUZvck9yZzogW1wiREVMRVRFIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9XCJdLFxuICAgIGRlbGV0ZVBhY2thZ2VGb3JVc2VyOiBbXCJERUxFVEUgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX1cIl0sXG4gICAgZGVsZXRlUGFja2FnZVZlcnNpb25Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiREVMRVRFIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9XCJdLFxuICAgIGRlbGV0ZVBhY2thZ2VWZXJzaW9uRm9yT3JnOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH1cIl0sXG4gICAgZGVsZXRlUGFja2FnZVZlcnNpb25Gb3JVc2VyOiBbXCJERUxFVEUgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH1cIl0sXG4gICAgZ2V0QWxsUGFja2FnZVZlcnNpb25zRm9yQVBhY2thZ2VPd25lZEJ5QW5Pcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiLCB7fSwge1xuICAgICAgcmVuYW1lZDogW1wicGFja2FnZXNcIiwgXCJnZXRBbGxQYWNrYWdlVmVyc2lvbnNGb3JQYWNrYWdlT3duZWRCeU9yZ1wiXVxuICAgIH1dLFxuICAgIGdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvckFQYWNrYWdlT3duZWRCeVRoZUF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIiwge30sIHtcbiAgICAgIHJlbmFtZWQ6IFtcInBhY2thZ2VzXCIsIFwiZ2V0QWxsUGFja2FnZVZlcnNpb25zRm9yUGFja2FnZU93bmVkQnlBdXRoZW50aWNhdGVkVXNlclwiXVxuICAgIH1dLFxuICAgIGdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvclBhY2thZ2VPd25lZEJ5QXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiXSxcbiAgICBnZXRBbGxQYWNrYWdlVmVyc2lvbnNGb3JQYWNrYWdlT3duZWRCeU9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zXCJdLFxuICAgIGdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvclBhY2thZ2VPd25lZEJ5VXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zXCJdLFxuICAgIGdldFBhY2thZ2VGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9XCJdLFxuICAgIGdldFBhY2thZ2VGb3JPcmdhbml6YXRpb246IFtcIkdFVCAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfVwiXSxcbiAgICBnZXRQYWNrYWdlRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9XCJdLFxuICAgIGdldFBhY2thZ2VWZXJzaW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfVwiXSxcbiAgICBnZXRQYWNrYWdlVmVyc2lvbkZvck9yZ2FuaXphdGlvbjogW1wiR0VUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9XCJdLFxuICAgIGdldFBhY2thZ2VWZXJzaW9uRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9XCJdLFxuICAgIGxpc3RQYWNrYWdlc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvcGFja2FnZXNcIl0sXG4gICAgbGlzdFBhY2thZ2VzRm9yT3JnYW5pemF0aW9uOiBbXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXNcIl0sXG4gICAgbGlzdFBhY2thZ2VzRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzXCJdLFxuICAgIHJlc3RvcmVQYWNrYWdlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vcmVzdG9yZXs/dG9rZW59XCJdLFxuICAgIHJlc3RvcmVQYWNrYWdlRm9yT3JnOiBbXCJQT1NUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3Jlc3RvcmV7P3Rva2VufVwiXSxcbiAgICByZXN0b3JlUGFja2FnZUZvclVzZXI6IFtcIlBPU1QgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vcmVzdG9yZXs/dG9rZW59XCJdLFxuICAgIHJlc3RvcmVQYWNrYWdlVmVyc2lvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9L3Jlc3RvcmVcIl0sXG4gICAgcmVzdG9yZVBhY2thZ2VWZXJzaW9uRm9yT3JnOiBbXCJQT1NUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9L3Jlc3RvcmVcIl0sXG4gICAgcmVzdG9yZVBhY2thZ2VWZXJzaW9uRm9yVXNlcjogW1wiUE9TVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfS9yZXN0b3JlXCJdXG4gIH0sXG4gIHByb2plY3RzOiB7XG4gICAgYWRkQ29sbGFib3JhdG9yOiBbXCJQVVQgL3Byb2plY3RzL3twcm9qZWN0X2lkfS9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX1cIl0sXG4gICAgY3JlYXRlQ2FyZDogW1wiUE9TVCAvcHJvamVjdHMvY29sdW1ucy97Y29sdW1uX2lkfS9jYXJkc1wiXSxcbiAgICBjcmVhdGVDb2x1bW46IFtcIlBPU1QgL3Byb2plY3RzL3twcm9qZWN0X2lkfS9jb2x1bW5zXCJdLFxuICAgIGNyZWF0ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL3Byb2plY3RzXCJdLFxuICAgIGNyZWF0ZUZvck9yZzogW1wiUE9TVCAvb3Jncy97b3JnfS9wcm9qZWN0c1wiXSxcbiAgICBjcmVhdGVGb3JSZXBvOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wcm9qZWN0c1wiXSxcbiAgICBkZWxldGU6IFtcIkRFTEVURSAvcHJvamVjdHMve3Byb2plY3RfaWR9XCJdLFxuICAgIGRlbGV0ZUNhcmQ6IFtcIkRFTEVURSAvcHJvamVjdHMvY29sdW1ucy9jYXJkcy97Y2FyZF9pZH1cIl0sXG4gICAgZGVsZXRlQ29sdW1uOiBbXCJERUxFVEUgL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH1cIl0sXG4gICAgZ2V0OiBbXCJHRVQgL3Byb2plY3RzL3twcm9qZWN0X2lkfVwiXSxcbiAgICBnZXRDYXJkOiBbXCJHRVQgL3Byb2plY3RzL2NvbHVtbnMvY2FyZHMve2NhcmRfaWR9XCJdLFxuICAgIGdldENvbHVtbjogW1wiR0VUIC9wcm9qZWN0cy9jb2x1bW5zL3tjb2x1bW5faWR9XCJdLFxuICAgIGdldFBlcm1pc3Npb25Gb3JVc2VyOiBbXCJHRVQgL3Byb2plY3RzL3twcm9qZWN0X2lkfS9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX0vcGVybWlzc2lvblwiXSxcbiAgICBsaXN0Q2FyZHM6IFtcIkdFVCAvcHJvamVjdHMvY29sdW1ucy97Y29sdW1uX2lkfS9jYXJkc1wiXSxcbiAgICBsaXN0Q29sbGFib3JhdG9yczogW1wiR0VUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sbGFib3JhdG9yc1wiXSxcbiAgICBsaXN0Q29sdW1uczogW1wiR0VUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sdW1uc1wiXSxcbiAgICBsaXN0Rm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vcHJvamVjdHNcIl0sXG4gICAgbGlzdEZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJvamVjdHNcIl0sXG4gICAgbGlzdEZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wcm9qZWN0c1wiXSxcbiAgICBtb3ZlQ2FyZDogW1wiUE9TVCAvcHJvamVjdHMvY29sdW1ucy9jYXJkcy97Y2FyZF9pZH0vbW92ZXNcIl0sXG4gICAgbW92ZUNvbHVtbjogW1wiUE9TVCAvcHJvamVjdHMvY29sdW1ucy97Y29sdW1uX2lkfS9tb3Zlc1wiXSxcbiAgICByZW1vdmVDb2xsYWJvcmF0b3I6IFtcIkRFTEVURSAvcHJvamVjdHMve3Byb2plY3RfaWR9L2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9wcm9qZWN0cy97cHJvamVjdF9pZH1cIl0sXG4gICAgdXBkYXRlQ2FyZDogW1wiUEFUQ0ggL3Byb2plY3RzL2NvbHVtbnMvY2FyZHMve2NhcmRfaWR9XCJdLFxuICAgIHVwZGF0ZUNvbHVtbjogW1wiUEFUQ0ggL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH1cIl1cbiAgfSxcbiAgcHVsbHM6IHtcbiAgICBjaGVja0lmTWVyZ2VkOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vbWVyZ2VcIl0sXG4gICAgY3JlYXRlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxsc1wiXSxcbiAgICBjcmVhdGVSZXBseUZvclJldmlld0NvbW1lbnQ6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfaWR9L3JlcGxpZXNcIl0sXG4gICAgY3JlYXRlUmV2aWV3OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3NcIl0sXG4gICAgY3JlYXRlUmV2aWV3Q29tbWVudDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb21tZW50c1wiXSxcbiAgICBkZWxldGVQZW5kaW5nUmV2aWV3OiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfVwiXSxcbiAgICBkZWxldGVSZXZpZXdDb21tZW50OiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBkaXNtaXNzUmV2aWV3OiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfS9kaXNtaXNzYWxzXCJdLFxuICAgIGdldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9XCJdLFxuICAgIGdldFJldmlldzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH1cIl0sXG4gICAgZ2V0UmV2aWV3Q29tbWVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgbGlzdDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxsc1wiXSxcbiAgICBsaXN0Q29tbWVudHNGb3JSZXZpZXc6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzL3tyZXZpZXdfaWR9L2NvbW1lbnRzXCJdLFxuICAgIGxpc3RDb21taXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vY29tbWl0c1wiXSxcbiAgICBsaXN0RmlsZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9maWxlc1wiXSxcbiAgICBsaXN0UmVxdWVzdGVkUmV2aWV3ZXJzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmVxdWVzdGVkX3Jldmlld2Vyc1wiXSxcbiAgICBsaXN0UmV2aWV3Q29tbWVudHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb21tZW50c1wiXSxcbiAgICBsaXN0UmV2aWV3Q29tbWVudHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzXCJdLFxuICAgIGxpc3RSZXZpZXdzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3c1wiXSxcbiAgICBtZXJnZTogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L21lcmdlXCJdLFxuICAgIHJlbW92ZVJlcXVlc3RlZFJldmlld2VyczogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3JlcXVlc3RlZF9yZXZpZXdlcnNcIl0sXG4gICAgcmVxdWVzdFJldmlld2VyczogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXF1ZXN0ZWRfcmV2aWV3ZXJzXCJdLFxuICAgIHN1Ym1pdFJldmlldzogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzL3tyZXZpZXdfaWR9L2V2ZW50c1wiXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9XCJdLFxuICAgIHVwZGF0ZUJyYW5jaDogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3VwZGF0ZS1icmFuY2hcIl0sXG4gICAgdXBkYXRlUmV2aWV3OiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfVwiXSxcbiAgICB1cGRhdGVSZXZpZXdDb21tZW50OiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9XCJdXG4gIH0sXG4gIHJhdGVMaW1pdDoge1xuICAgIGdldDogW1wiR0VUIC9yYXRlX2xpbWl0XCJdXG4gIH0sXG4gIHJlYWN0aW9uczoge1xuICAgIGNyZWF0ZUZvckNvbW1pdENvbW1lbnQ6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIl0sXG4gICAgY3JlYXRlRm9ySXNzdWU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9yZWFjdGlvbnNcIl0sXG4gICAgY3JlYXRlRm9ySXNzdWVDb21tZW50OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiXSxcbiAgICBjcmVhdGVGb3JQdWxsUmVxdWVzdFJldmlld0NvbW1lbnQ6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIl0sXG4gICAgY3JlYXRlRm9yUmVsZWFzZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9L3JlYWN0aW9uc1wiXSxcbiAgICBjcmVhdGVGb3JUZWFtRGlzY3Vzc2lvbkNvbW1lbnRJbk9yZzogW1wiUE9TVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn0vcmVhY3Rpb25zXCJdLFxuICAgIGNyZWF0ZUZvclRlYW1EaXNjdXNzaW9uSW5Pcmc6IFtcIlBPU1QgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9yZWFjdGlvbnNcIl0sXG4gICAgZGVsZXRlRm9yQ29tbWl0Q29tbWVudDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zL3tyZWFjdGlvbl9pZH1cIl0sXG4gICAgZGVsZXRlRm9ySXNzdWU6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCJdLFxuICAgIGRlbGV0ZUZvcklzc3VlQ29tbWVudDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCJdLFxuICAgIGRlbGV0ZUZvclB1bGxSZXF1ZXN0Q29tbWVudDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zL3tyZWFjdGlvbl9pZH1cIl0sXG4gICAgZGVsZXRlRm9yUmVsZWFzZTogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vcmVhY3Rpb25zL3tyZWFjdGlvbl9pZH1cIl0sXG4gICAgZGVsZXRlRm9yVGVhbURpc2N1c3Npb246IFtcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCJdLFxuICAgIGRlbGV0ZUZvclRlYW1EaXNjdXNzaW9uQ29tbWVudDogW1wiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfbnVtYmVyfS9yZWFjdGlvbnMve3JlYWN0aW9uX2lkfVwiXSxcbiAgICBsaXN0Rm9yQ29tbWl0Q29tbWVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zXCJdLFxuICAgIGxpc3RGb3JJc3N1ZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vcmVhY3Rpb25zXCJdLFxuICAgIGxpc3RGb3JJc3N1ZUNvbW1lbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIl0sXG4gICAgbGlzdEZvclB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zXCJdLFxuICAgIGxpc3RGb3JSZWxlYXNlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfS9yZWFjdGlvbnNcIl0sXG4gICAgbGlzdEZvclRlYW1EaXNjdXNzaW9uQ29tbWVudEluT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9L3JlYWN0aW9uc1wiXSxcbiAgICBsaXN0Rm9yVGVhbURpc2N1c3Npb25Jbk9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vcmVhY3Rpb25zXCJdXG4gIH0sXG4gIHJlcG9zOiB7XG4gICAgYWNjZXB0SW52aXRhdGlvbjogW1wiUEFUQ0ggL3VzZXIvcmVwb3NpdG9yeV9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIiwge30sIHtcbiAgICAgIHJlbmFtZWQ6IFtcInJlcG9zXCIsIFwiYWNjZXB0SW52aXRhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdXG4gICAgfV0sXG4gICAgYWNjZXB0SW52aXRhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQQVRDSCAvdXNlci9yZXBvc2l0b3J5X2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfVwiXSxcbiAgICBhZGRBcHBBY2Nlc3NSZXN0cmljdGlvbnM6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL2FwcHNcIiwge30sIHtcbiAgICAgIG1hcFRvRGF0YTogXCJhcHBzXCJcbiAgICB9XSxcbiAgICBhZGRDb2xsYWJvcmF0b3I6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29sbGFib3JhdG9ycy97dXNlcm5hbWV9XCJdLFxuICAgIGFkZFN0YXR1c0NoZWNrQ29udGV4dHM6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrcy9jb250ZXh0c1wiLCB7fSwge1xuICAgICAgbWFwVG9EYXRhOiBcImNvbnRleHRzXCJcbiAgICB9XSxcbiAgICBhZGRUZWFtQWNjZXNzUmVzdHJpY3Rpb25zOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy90ZWFtc1wiLCB7fSwge1xuICAgICAgbWFwVG9EYXRhOiBcInRlYW1zXCJcbiAgICB9XSxcbiAgICBhZGRVc2VyQWNjZXNzUmVzdHJpY3Rpb25zOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy91c2Vyc1wiLCB7fSwge1xuICAgICAgbWFwVG9EYXRhOiBcInVzZXJzXCJcbiAgICB9XSxcbiAgICBjaGVja0NvbGxhYm9yYXRvcjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX1cIl0sXG4gICAgY2hlY2tWdWxuZXJhYmlsaXR5QWxlcnRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Z1bG5lcmFiaWxpdHktYWxlcnRzXCJdLFxuICAgIGNvZGVvd25lcnNFcnJvcnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZW93bmVycy9lcnJvcnNcIl0sXG4gICAgY29tcGFyZUNvbW1pdHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tcGFyZS97YmFzZX0uLi57aGVhZH1cIl0sXG4gICAgY29tcGFyZUNvbW1pdHNXaXRoQmFzZWhlYWQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tcGFyZS97YmFzZWhlYWR9XCJdLFxuICAgIGNyZWF0ZUF1dG9saW5rOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hdXRvbGlua3NcIl0sXG4gICAgY3JlYXRlQ29tbWl0Q29tbWVudDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97Y29tbWl0X3NoYX0vY29tbWVudHNcIl0sXG4gICAgY3JlYXRlQ29tbWl0U2lnbmF0dXJlUHJvdGVjdGlvbjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zaWduYXR1cmVzXCJdLFxuICAgIGNyZWF0ZUNvbW1pdFN0YXR1czogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3RhdHVzZXMve3NoYX1cIl0sXG4gICAgY3JlYXRlRGVwbG95S2V5OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9rZXlzXCJdLFxuICAgIGNyZWF0ZURlcGxveW1lbnQ6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGxveW1lbnRzXCJdLFxuICAgIGNyZWF0ZURlcGxveW1lbnRTdGF0dXM6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGxveW1lbnRzL3tkZXBsb3ltZW50X2lkfS9zdGF0dXNlc1wiXSxcbiAgICBjcmVhdGVEaXNwYXRjaEV2ZW50OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kaXNwYXRjaGVzXCJdLFxuICAgIGNyZWF0ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL3JlcG9zXCJdLFxuICAgIGNyZWF0ZUZvcms6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ZvcmtzXCJdLFxuICAgIGNyZWF0ZUluT3JnOiBbXCJQT1NUIC9vcmdzL3tvcmd9L3JlcG9zXCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlRW52aXJvbm1lbnQ6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfVwiXSxcbiAgICBjcmVhdGVPclVwZGF0ZUZpbGVDb250ZW50czogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb250ZW50cy97cGF0aH1cIl0sXG4gICAgY3JlYXRlUGFnZXNTaXRlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlc1wiXSxcbiAgICBjcmVhdGVSZWxlYXNlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlc1wiXSxcbiAgICBjcmVhdGVUYWdQcm90ZWN0aW9uOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YWdzL3Byb3RlY3Rpb25cIl0sXG4gICAgY3JlYXRlVXNpbmdUZW1wbGF0ZTogW1wiUE9TVCAvcmVwb3Mve3RlbXBsYXRlX293bmVyfS97dGVtcGxhdGVfcmVwb30vZ2VuZXJhdGVcIl0sXG4gICAgY3JlYXRlV2ViaG9vazogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3NcIl0sXG4gICAgZGVjbGluZUludml0YXRpb246IFtcIkRFTEVURSAvdXNlci9yZXBvc2l0b3J5X2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfVwiLCB7fSwge1xuICAgICAgcmVuYW1lZDogW1wicmVwb3NcIiwgXCJkZWNsaW5lSW52aXRhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdXG4gICAgfV0sXG4gICAgZGVjbGluZUludml0YXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiREVMRVRFIC91c2VyL3JlcG9zaXRvcnlfaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9XCJdLFxuICAgIGRlbGV0ZTogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfVwiXSxcbiAgICBkZWxldGVBY2Nlc3NSZXN0cmljdGlvbnM6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnNcIl0sXG4gICAgZGVsZXRlQWRtaW5CcmFuY2hQcm90ZWN0aW9uOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vZW5mb3JjZV9hZG1pbnNcIl0sXG4gICAgZGVsZXRlQW5FbnZpcm9ubWVudDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9XCJdLFxuICAgIGRlbGV0ZUF1dG9saW5rOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9saW5rcy97YXV0b2xpbmtfaWR9XCJdLFxuICAgIGRlbGV0ZUJyYW5jaFByb3RlY3Rpb246IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvblwiXSxcbiAgICBkZWxldGVDb21taXRDb21tZW50OiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBkZWxldGVDb21taXRTaWduYXR1cmVQcm90ZWN0aW9uOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc2lnbmF0dXJlc1wiXSxcbiAgICBkZWxldGVEZXBsb3lLZXk6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30va2V5cy97a2V5X2lkfVwiXSxcbiAgICBkZWxldGVEZXBsb3ltZW50OiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGxveW1lbnRzL3tkZXBsb3ltZW50X2lkfVwiXSxcbiAgICBkZWxldGVGaWxlOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbnRlbnRzL3twYXRofVwiXSxcbiAgICBkZWxldGVJbnZpdGF0aW9uOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfVwiXSxcbiAgICBkZWxldGVQYWdlc1NpdGU6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXNcIl0sXG4gICAgZGVsZXRlUHVsbFJlcXVlc3RSZXZpZXdQcm90ZWN0aW9uOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfcHVsbF9yZXF1ZXN0X3Jldmlld3NcIl0sXG4gICAgZGVsZXRlUmVsZWFzZTogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH1cIl0sXG4gICAgZGVsZXRlUmVsZWFzZUFzc2V0OiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL2Fzc2V0cy97YXNzZXRfaWR9XCJdLFxuICAgIGRlbGV0ZVRhZ1Byb3RlY3Rpb246IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vdGFncy9wcm90ZWN0aW9uL3t0YWdfcHJvdGVjdGlvbl9pZH1cIl0sXG4gICAgZGVsZXRlV2ViaG9vazogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgZGlzYWJsZUF1dG9tYXRlZFNlY3VyaXR5Rml4ZXM6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYXV0b21hdGVkLXNlY3VyaXR5LWZpeGVzXCJdLFxuICAgIGRpc2FibGVMZnNGb3JSZXBvOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xmc1wiXSxcbiAgICBkaXNhYmxlVnVsbmVyYWJpbGl0eUFsZXJ0czogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS92dWxuZXJhYmlsaXR5LWFsZXJ0c1wiXSxcbiAgICBkb3dubG9hZEFyY2hpdmU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vemlwYmFsbC97cmVmfVwiLCB7fSwge1xuICAgICAgcmVuYW1lZDogW1wicmVwb3NcIiwgXCJkb3dubG9hZFppcGJhbGxBcmNoaXZlXCJdXG4gICAgfV0sXG4gICAgZG93bmxvYWRUYXJiYWxsQXJjaGl2ZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YXJiYWxsL3tyZWZ9XCJdLFxuICAgIGRvd25sb2FkWmlwYmFsbEFyY2hpdmU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vemlwYmFsbC97cmVmfVwiXSxcbiAgICBlbmFibGVBdXRvbWF0ZWRTZWN1cml0eUZpeGVzOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9tYXRlZC1zZWN1cml0eS1maXhlc1wiXSxcbiAgICBlbmFibGVMZnNGb3JSZXBvOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xmc1wiXSxcbiAgICBlbmFibGVWdWxuZXJhYmlsaXR5QWxlcnRzOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Z1bG5lcmFiaWxpdHktYWxlcnRzXCJdLFxuICAgIGdlbmVyYXRlUmVsZWFzZU5vdGVzOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy9nZW5lcmF0ZS1ub3Rlc1wiXSxcbiAgICBnZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb31cIl0sXG4gICAgZ2V0QWNjZXNzUmVzdHJpY3Rpb25zOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zXCJdLFxuICAgIGdldEFkbWluQnJhbmNoUHJvdGVjdGlvbjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL2VuZm9yY2VfYWRtaW5zXCJdLFxuICAgIGdldEFsbEVudmlyb25tZW50czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHNcIl0sXG4gICAgZ2V0QWxsU3RhdHVzQ2hlY2tDb250ZXh0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3MvY29udGV4dHNcIl0sXG4gICAgZ2V0QWxsVG9waWNzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RvcGljc1wiXSxcbiAgICBnZXRBcHBzV2l0aEFjY2Vzc1RvUHJvdGVjdGVkQnJhbmNoOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL2FwcHNcIl0sXG4gICAgZ2V0QXV0b2xpbms6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXV0b2xpbmtzL3thdXRvbGlua19pZH1cIl0sXG4gICAgZ2V0QnJhbmNoOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9XCJdLFxuICAgIGdldEJyYW5jaFByb3RlY3Rpb246IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvblwiXSxcbiAgICBnZXRDbG9uZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdHJhZmZpYy9jbG9uZXNcIl0sXG4gICAgZ2V0Q29kZUZyZXF1ZW5jeVN0YXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXRzL2NvZGVfZnJlcXVlbmN5XCJdLFxuICAgIGdldENvbGxhYm9yYXRvclBlcm1pc3Npb25MZXZlbDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX0vcGVybWlzc2lvblwiXSxcbiAgICBnZXRDb21iaW5lZFN0YXR1c0ZvclJlZjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L3N0YXR1c1wiXSxcbiAgICBnZXRDb21taXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfVwiXSxcbiAgICBnZXRDb21taXRBY3Rpdml0eVN0YXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXRzL2NvbW1pdF9hY3Rpdml0eVwiXSxcbiAgICBnZXRDb21taXRDb21tZW50OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBnZXRDb21taXRTaWduYXR1cmVQcm90ZWN0aW9uOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc2lnbmF0dXJlc1wiXSxcbiAgICBnZXRDb21tdW5pdHlQcm9maWxlTWV0cmljczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tdW5pdHkvcHJvZmlsZVwiXSxcbiAgICBnZXRDb250ZW50OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbnRlbnRzL3twYXRofVwiXSxcbiAgICBnZXRDb250cmlidXRvcnNTdGF0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGF0cy9jb250cmlidXRvcnNcIl0sXG4gICAgZ2V0RGVwbG95S2V5OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2tleXMve2tleV9pZH1cIl0sXG4gICAgZ2V0RGVwbG95bWVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50cy97ZGVwbG95bWVudF9pZH1cIl0sXG4gICAgZ2V0RGVwbG95bWVudFN0YXR1czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50cy97ZGVwbG95bWVudF9pZH0vc3RhdHVzZXMve3N0YXR1c19pZH1cIl0sXG4gICAgZ2V0RW52aXJvbm1lbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfVwiXSxcbiAgICBnZXRMYXRlc3RQYWdlc0J1aWxkOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2J1aWxkcy9sYXRlc3RcIl0sXG4gICAgZ2V0TGF0ZXN0UmVsZWFzZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy9sYXRlc3RcIl0sXG4gICAgZ2V0UGFnZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXNcIl0sXG4gICAgZ2V0UGFnZXNCdWlsZDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9idWlsZHMve2J1aWxkX2lkfVwiXSxcbiAgICBnZXRQYWdlc0hlYWx0aENoZWNrOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2hlYWx0aFwiXSxcbiAgICBnZXRQYXJ0aWNpcGF0aW9uU3RhdHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3RhdHMvcGFydGljaXBhdGlvblwiXSxcbiAgICBnZXRQdWxsUmVxdWVzdFJldmlld1Byb3RlY3Rpb246IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9wdWxsX3JlcXVlc3RfcmV2aWV3c1wiXSxcbiAgICBnZXRQdW5jaENhcmRTdGF0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGF0cy9wdW5jaF9jYXJkXCJdLFxuICAgIGdldFJlYWRtZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWFkbWVcIl0sXG4gICAgZ2V0UmVhZG1lSW5EaXJlY3Rvcnk6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVhZG1lL3tkaXJ9XCJdLFxuICAgIGdldFJlbGVhc2U6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9XCJdLFxuICAgIGdldFJlbGVhc2VBc3NldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy9hc3NldHMve2Fzc2V0X2lkfVwiXSxcbiAgICBnZXRSZWxlYXNlQnlUYWc6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMvdGFncy97dGFnfVwiXSxcbiAgICBnZXRTdGF0dXNDaGVja3NQcm90ZWN0aW9uOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrc1wiXSxcbiAgICBnZXRUZWFtc1dpdGhBY2Nlc3NUb1Byb3RlY3RlZEJyYW5jaDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy90ZWFtc1wiXSxcbiAgICBnZXRUb3BQYXRoczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90cmFmZmljL3BvcHVsYXIvcGF0aHNcIl0sXG4gICAgZ2V0VG9wUmVmZXJyZXJzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RyYWZmaWMvcG9wdWxhci9yZWZlcnJlcnNcIl0sXG4gICAgZ2V0VXNlcnNXaXRoQWNjZXNzVG9Qcm90ZWN0ZWRCcmFuY2g6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdXNlcnNcIl0sXG4gICAgZ2V0Vmlld3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdHJhZmZpYy92aWV3c1wiXSxcbiAgICBnZXRXZWJob29rOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfVwiXSxcbiAgICBnZXRXZWJob29rQ29uZmlnRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vY29uZmlnXCJdLFxuICAgIGdldFdlYmhvb2tEZWxpdmVyeTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9XCJdLFxuICAgIGxpc3RBdXRvbGlua3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXV0b2xpbmtzXCJdLFxuICAgIGxpc3RCcmFuY2hlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlc1wiXSxcbiAgICBsaXN0QnJhbmNoZXNGb3JIZWFkQ29tbWl0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve2NvbW1pdF9zaGF9L2JyYW5jaGVzLXdoZXJlLWhlYWRcIl0sXG4gICAgbGlzdENvbGxhYm9yYXRvcnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29sbGFib3JhdG9yc1wiXSxcbiAgICBsaXN0Q29tbWVudHNGb3JDb21taXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97Y29tbWl0X3NoYX0vY29tbWVudHNcIl0sXG4gICAgbGlzdENvbW1pdENvbW1lbnRzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50c1wiXSxcbiAgICBsaXN0Q29tbWl0U3RhdHVzZXNGb3JSZWY6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfS9zdGF0dXNlc1wiXSxcbiAgICBsaXN0Q29tbWl0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzXCJdLFxuICAgIGxpc3RDb250cmlidXRvcnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29udHJpYnV0b3JzXCJdLFxuICAgIGxpc3REZXBsb3lLZXlzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2tleXNcIl0sXG4gICAgbGlzdERlcGxveW1lbnRTdGF0dXNlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50cy97ZGVwbG95bWVudF9pZH0vc3RhdHVzZXNcIl0sXG4gICAgbGlzdERlcGxveW1lbnRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGxveW1lbnRzXCJdLFxuICAgIGxpc3RGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3JlcG9zXCJdLFxuICAgIGxpc3RGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9yZXBvc1wiXSxcbiAgICBsaXN0Rm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3JlcG9zXCJdLFxuICAgIGxpc3RGb3JrczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9mb3Jrc1wiXSxcbiAgICBsaXN0SW52aXRhdGlvbnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaW52aXRhdGlvbnNcIl0sXG4gICAgbGlzdEludml0YXRpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9yZXBvc2l0b3J5X2ludml0YXRpb25zXCJdLFxuICAgIGxpc3RMYW5ndWFnZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbGFuZ3VhZ2VzXCJdLFxuICAgIGxpc3RQYWdlc0J1aWxkczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9idWlsZHNcIl0sXG4gICAgbGlzdFB1YmxpYzogW1wiR0VUIC9yZXBvc2l0b3JpZXNcIl0sXG4gICAgbGlzdFB1bGxSZXF1ZXN0c0Fzc29jaWF0ZWRXaXRoQ29tbWl0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve2NvbW1pdF9zaGF9L3B1bGxzXCJdLFxuICAgIGxpc3RSZWxlYXNlQXNzZXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfS9hc3NldHNcIl0sXG4gICAgbGlzdFJlbGVhc2VzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzXCJdLFxuICAgIGxpc3RUYWdQcm90ZWN0aW9uOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RhZ3MvcHJvdGVjdGlvblwiXSxcbiAgICBsaXN0VGFnczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YWdzXCJdLFxuICAgIGxpc3RUZWFtczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90ZWFtc1wiXSxcbiAgICBsaXN0V2ViaG9va0RlbGl2ZXJpZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXNcIl0sXG4gICAgbGlzdFdlYmhvb2tzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzXCJdLFxuICAgIG1lcmdlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9tZXJnZXNcIl0sXG4gICAgbWVyZ2VVcHN0cmVhbTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWVyZ2UtdXBzdHJlYW1cIl0sXG4gICAgcGluZ1dlYmhvb2s6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS9waW5nc1wiXSxcbiAgICByZWRlbGl2ZXJXZWJob29rRGVsaXZlcnk6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzL3tkZWxpdmVyeV9pZH0vYXR0ZW1wdHNcIl0sXG4gICAgcmVtb3ZlQXBwQWNjZXNzUmVzdHJpY3Rpb25zOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL2FwcHNcIiwge30sIHtcbiAgICAgIG1hcFRvRGF0YTogXCJhcHBzXCJcbiAgICB9XSxcbiAgICByZW1vdmVDb2xsYWJvcmF0b3I6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vY29sbGFib3JhdG9ycy97dXNlcm5hbWV9XCJdLFxuICAgIHJlbW92ZVN0YXR1c0NoZWNrQ29udGV4dHM6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zdGF0dXNfY2hlY2tzL2NvbnRleHRzXCIsIHt9LCB7XG4gICAgICBtYXBUb0RhdGE6IFwiY29udGV4dHNcIlxuICAgIH1dLFxuICAgIHJlbW92ZVN0YXR1c0NoZWNrUHJvdGVjdGlvbjogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3NcIl0sXG4gICAgcmVtb3ZlVGVhbUFjY2Vzc1Jlc3RyaWN0aW9uczogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy90ZWFtc1wiLCB7fSwge1xuICAgICAgbWFwVG9EYXRhOiBcInRlYW1zXCJcbiAgICB9XSxcbiAgICByZW1vdmVVc2VyQWNjZXNzUmVzdHJpY3Rpb25zOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL3VzZXJzXCIsIHt9LCB7XG4gICAgICBtYXBUb0RhdGE6IFwidXNlcnNcIlxuICAgIH1dLFxuICAgIHJlbmFtZUJyYW5jaDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcmVuYW1lXCJdLFxuICAgIHJlcGxhY2VBbGxUb3BpY3M6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vdG9waWNzXCJdLFxuICAgIHJlcXVlc3RQYWdlc0J1aWxkOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9idWlsZHNcIl0sXG4gICAgc2V0QWRtaW5CcmFuY2hQcm90ZWN0aW9uOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL2VuZm9yY2VfYWRtaW5zXCJdLFxuICAgIHNldEFwcEFjY2Vzc1Jlc3RyaWN0aW9uczogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy9hcHBzXCIsIHt9LCB7XG4gICAgICBtYXBUb0RhdGE6IFwiYXBwc1wiXG4gICAgfV0sXG4gICAgc2V0U3RhdHVzQ2hlY2tDb250ZXh0czogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3MvY29udGV4dHNcIiwge30sIHtcbiAgICAgIG1hcFRvRGF0YTogXCJjb250ZXh0c1wiXG4gICAgfV0sXG4gICAgc2V0VGVhbUFjY2Vzc1Jlc3RyaWN0aW9uczogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy90ZWFtc1wiLCB7fSwge1xuICAgICAgbWFwVG9EYXRhOiBcInRlYW1zXCJcbiAgICB9XSxcbiAgICBzZXRVc2VyQWNjZXNzUmVzdHJpY3Rpb25zOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL3VzZXJzXCIsIHt9LCB7XG4gICAgICBtYXBUb0RhdGE6IFwidXNlcnNcIlxuICAgIH1dLFxuICAgIHRlc3RQdXNoV2ViaG9vazogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L3Rlc3RzXCJdLFxuICAgIHRyYW5zZmVyOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90cmFuc2ZlclwiXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfVwiXSxcbiAgICB1cGRhdGVCcmFuY2hQcm90ZWN0aW9uOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb25cIl0sXG4gICAgdXBkYXRlQ29tbWl0Q29tbWVudDogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICB1cGRhdGVJbmZvcm1hdGlvbkFib3V0UGFnZXNTaXRlOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzXCJdLFxuICAgIHVwZGF0ZUludml0YXRpb246IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIl0sXG4gICAgdXBkYXRlUHVsbFJlcXVlc3RSZXZpZXdQcm90ZWN0aW9uOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9wdWxsX3JlcXVlc3RfcmV2aWV3c1wiXSxcbiAgICB1cGRhdGVSZWxlYXNlOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9XCJdLFxuICAgIHVwZGF0ZVJlbGVhc2VBc3NldDogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL2Fzc2V0cy97YXNzZXRfaWR9XCJdLFxuICAgIHVwZGF0ZVN0YXR1c0NoZWNrUG90ZWN0aW9uOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zdGF0dXNfY2hlY2tzXCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJyZXBvc1wiLCBcInVwZGF0ZVN0YXR1c0NoZWNrUHJvdGVjdGlvblwiXVxuICAgIH1dLFxuICAgIHVwZGF0ZVN0YXR1c0NoZWNrUHJvdGVjdGlvbjogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrc1wiXSxcbiAgICB1cGRhdGVXZWJob29rOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9XCJdLFxuICAgIHVwZGF0ZVdlYmhvb2tDb25maWdGb3JSZXBvOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L2NvbmZpZ1wiXSxcbiAgICB1cGxvYWRSZWxlYXNlQXNzZXQ6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfS9hc3NldHN7P25hbWUsbGFiZWx9XCIsIHtcbiAgICAgIGJhc2VVcmw6IFwiaHR0cHM6Ly91cGxvYWRzLmdpdGh1Yi5jb21cIlxuICAgIH1dXG4gIH0sXG4gIHNlYXJjaDoge1xuICAgIGNvZGU6IFtcIkdFVCAvc2VhcmNoL2NvZGVcIl0sXG4gICAgY29tbWl0czogW1wiR0VUIC9zZWFyY2gvY29tbWl0c1wiXSxcbiAgICBpc3N1ZXNBbmRQdWxsUmVxdWVzdHM6IFtcIkdFVCAvc2VhcmNoL2lzc3Vlc1wiXSxcbiAgICBsYWJlbHM6IFtcIkdFVCAvc2VhcmNoL2xhYmVsc1wiXSxcbiAgICByZXBvczogW1wiR0VUIC9zZWFyY2gvcmVwb3NpdG9yaWVzXCJdLFxuICAgIHRvcGljczogW1wiR0VUIC9zZWFyY2gvdG9waWNzXCJdLFxuICAgIHVzZXJzOiBbXCJHRVQgL3NlYXJjaC91c2Vyc1wiXVxuICB9LFxuICBzZWNyZXRTY2FubmluZzoge1xuICAgIGdldEFsZXJ0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3JldC1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn1cIl0sXG4gICAgbGlzdEFsZXJ0c0ZvckVudGVycHJpc2U6IFtcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L3NlY3JldC1zY2FubmluZy9hbGVydHNcIl0sXG4gICAgbGlzdEFsZXJ0c0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3NlY3JldC1zY2FubmluZy9hbGVydHNcIl0sXG4gICAgbGlzdEFsZXJ0c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0c1wiXSxcbiAgICBsaXN0TG9jYXRpb25zRm9yQWxlcnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9sb2NhdGlvbnNcIl0sXG4gICAgdXBkYXRlQWxlcnQ6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9XCJdXG4gIH0sXG4gIHRlYW1zOiB7XG4gICAgYWRkT3JVcGRhdGVNZW1iZXJzaGlwRm9yVXNlckluT3JnOiBbXCJQVVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiXSxcbiAgICBhZGRPclVwZGF0ZVByb2plY3RQZXJtaXNzaW9uc0luT3JnOiBbXCJQVVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcHJvamVjdHMve3Byb2plY3RfaWR9XCJdLFxuICAgIGFkZE9yVXBkYXRlUmVwb1Blcm1pc3Npb25zSW5Pcmc6IFtcIlBVVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9yZXBvcy97b3duZXJ9L3tyZXBvfVwiXSxcbiAgICBjaGVja1Blcm1pc3Npb25zRm9yUHJvamVjdEluT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcHJvamVjdHMve3Byb2plY3RfaWR9XCJdLFxuICAgIGNoZWNrUGVybWlzc2lvbnNGb3JSZXBvSW5Pcmc6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9yZXBvcy97b3duZXJ9L3tyZXBvfVwiXSxcbiAgICBjcmVhdGU6IFtcIlBPU1QgL29yZ3Mve29yZ30vdGVhbXNcIl0sXG4gICAgY3JlYXRlRGlzY3Vzc2lvbkNvbW1lbnRJbk9yZzogW1wiUE9TVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzXCJdLFxuICAgIGNyZWF0ZURpc2N1c3Npb25Jbk9yZzogW1wiUE9TVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9uc1wiXSxcbiAgICBkZWxldGVEaXNjdXNzaW9uQ29tbWVudEluT3JnOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9XCJdLFxuICAgIGRlbGV0ZURpc2N1c3Npb25Jbk9yZzogW1wiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn1cIl0sXG4gICAgZGVsZXRlSW5Pcmc6IFtcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfVwiXSxcbiAgICBnZXRCeU5hbWU6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfVwiXSxcbiAgICBnZXREaXNjdXNzaW9uQ29tbWVudEluT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9XCJdLFxuICAgIGdldERpc2N1c3Npb25Jbk9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn1cIl0sXG4gICAgZ2V0TWVtYmVyc2hpcEZvclVzZXJJbk9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L21lbWJlcnNoaXBzL3t1c2VybmFtZX1cIl0sXG4gICAgbGlzdDogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zXCJdLFxuICAgIGxpc3RDaGlsZEluT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vdGVhbXNcIl0sXG4gICAgbGlzdERpc2N1c3Npb25Db21tZW50c0luT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50c1wiXSxcbiAgICBsaXN0RGlzY3Vzc2lvbnNJbk9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zXCJdLFxuICAgIGxpc3RGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3RlYW1zXCJdLFxuICAgIGxpc3RNZW1iZXJzSW5Pcmc6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9tZW1iZXJzXCJdLFxuICAgIGxpc3RQZW5kaW5nSW52aXRhdGlvbnNJbk9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2ludml0YXRpb25zXCJdLFxuICAgIGxpc3RQcm9qZWN0c0luT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcHJvamVjdHNcIl0sXG4gICAgbGlzdFJlcG9zSW5Pcmc6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9yZXBvc1wiXSxcbiAgICByZW1vdmVNZW1iZXJzaGlwRm9yVXNlckluT3JnOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiXSxcbiAgICByZW1vdmVQcm9qZWN0SW5Pcmc6IFtcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9wcm9qZWN0cy97cHJvamVjdF9pZH1cIl0sXG4gICAgcmVtb3ZlUmVwb0luT3JnOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcmVwb3Mve293bmVyfS97cmVwb31cIl0sXG4gICAgdXBkYXRlRGlzY3Vzc2lvbkNvbW1lbnRJbk9yZzogW1wiUEFUQ0ggL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9XCJdLFxuICAgIHVwZGF0ZURpc2N1c3Npb25Jbk9yZzogW1wiUEFUQ0ggL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfVwiXSxcbiAgICB1cGRhdGVJbk9yZzogW1wiUEFUQ0ggL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z31cIl1cbiAgfSxcbiAgdXNlcnM6IHtcbiAgICBhZGRFbWFpbEZvckF1dGhlbnRpY2F0ZWQ6IFtcIlBPU1QgL3VzZXIvZW1haWxzXCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImFkZEVtYWlsRm9yQXV0aGVudGljYXRlZFVzZXJcIl1cbiAgICB9XSxcbiAgICBhZGRFbWFpbEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL2VtYWlsc1wiXSxcbiAgICBibG9jazogW1wiUFVUIC91c2VyL2Jsb2Nrcy97dXNlcm5hbWV9XCJdLFxuICAgIGNoZWNrQmxvY2tlZDogW1wiR0VUIC91c2VyL2Jsb2Nrcy97dXNlcm5hbWV9XCJdLFxuICAgIGNoZWNrRm9sbG93aW5nRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2ZvbGxvd2luZy97dGFyZ2V0X3VzZXJ9XCJdLFxuICAgIGNoZWNrUGVyc29uSXNGb2xsb3dlZEJ5QXV0aGVudGljYXRlZDogW1wiR0VUIC91c2VyL2ZvbGxvd2luZy97dXNlcm5hbWV9XCJdLFxuICAgIGNyZWF0ZUdwZ0tleUZvckF1dGhlbnRpY2F0ZWQ6IFtcIlBPU1QgL3VzZXIvZ3BnX2tleXNcIiwge30sIHtcbiAgICAgIHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiY3JlYXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl1cbiAgICB9XSxcbiAgICBjcmVhdGVHcGdLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9ncGdfa2V5c1wiXSxcbiAgICBjcmVhdGVQdWJsaWNTc2hLZXlGb3JBdXRoZW50aWNhdGVkOiBbXCJQT1NUIC91c2VyL2tleXNcIiwge30sIHtcbiAgICAgIHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiY3JlYXRlUHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl1cbiAgICB9XSxcbiAgICBjcmVhdGVQdWJsaWNTc2hLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9rZXlzXCJdLFxuICAgIGRlbGV0ZUVtYWlsRm9yQXV0aGVudGljYXRlZDogW1wiREVMRVRFIC91c2VyL2VtYWlsc1wiLCB7fSwge1xuICAgICAgcmVuYW1lZDogW1widXNlcnNcIiwgXCJkZWxldGVFbWFpbEZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdXG4gICAgfV0sXG4gICAgZGVsZXRlRW1haWxGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiREVMRVRFIC91c2VyL2VtYWlsc1wiXSxcbiAgICBkZWxldGVHcGdLZXlGb3JBdXRoZW50aWNhdGVkOiBbXCJERUxFVEUgL3VzZXIvZ3BnX2tleXMve2dwZ19rZXlfaWR9XCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImRlbGV0ZUdwZ0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdXG4gICAgfV0sXG4gICAgZGVsZXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9ncGdfa2V5cy97Z3BnX2tleV9pZH1cIl0sXG4gICAgZGVsZXRlUHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZDogW1wiREVMRVRFIC91c2VyL2tleXMve2tleV9pZH1cIiwge30sIHtcbiAgICAgIHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiZGVsZXRlUHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl1cbiAgICB9XSxcbiAgICBkZWxldGVQdWJsaWNTc2hLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiREVMRVRFIC91c2VyL2tleXMve2tleV9pZH1cIl0sXG4gICAgZm9sbG93OiBbXCJQVVQgL3VzZXIvZm9sbG93aW5nL3t1c2VybmFtZX1cIl0sXG4gICAgZ2V0QXV0aGVudGljYXRlZDogW1wiR0VUIC91c2VyXCJdLFxuICAgIGdldEJ5VXNlcm5hbWU6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfVwiXSxcbiAgICBnZXRDb250ZXh0Rm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2hvdmVyY2FyZFwiXSxcbiAgICBnZXRHcGdLZXlGb3JBdXRoZW50aWNhdGVkOiBbXCJHRVQgL3VzZXIvZ3BnX2tleXMve2dwZ19rZXlfaWR9XCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImdldEdwZ0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdXG4gICAgfV0sXG4gICAgZ2V0R3BnS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9ncGdfa2V5cy97Z3BnX2tleV9pZH1cIl0sXG4gICAgZ2V0UHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZDogW1wiR0VUIC91c2VyL2tleXMve2tleV9pZH1cIiwge30sIHtcbiAgICAgIHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiZ2V0UHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl1cbiAgICB9XSxcbiAgICBnZXRQdWJsaWNTc2hLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2tleXMve2tleV9pZH1cIl0sXG4gICAgbGlzdDogW1wiR0VUIC91c2Vyc1wiXSxcbiAgICBsaXN0QmxvY2tlZEJ5QXV0aGVudGljYXRlZDogW1wiR0VUIC91c2VyL2Jsb2Nrc1wiLCB7fSwge1xuICAgICAgcmVuYW1lZDogW1widXNlcnNcIiwgXCJsaXN0QmxvY2tlZEJ5QXV0aGVudGljYXRlZFVzZXJcIl1cbiAgICB9XSxcbiAgICBsaXN0QmxvY2tlZEJ5QXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9ibG9ja3NcIl0sXG4gICAgbGlzdEVtYWlsc0ZvckF1dGhlbnRpY2F0ZWQ6IFtcIkdFVCAvdXNlci9lbWFpbHNcIiwge30sIHtcbiAgICAgIHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwibGlzdEVtYWlsc0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdXG4gICAgfV0sXG4gICAgbGlzdEVtYWlsc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvZW1haWxzXCJdLFxuICAgIGxpc3RGb2xsb3dlZEJ5QXV0aGVudGljYXRlZDogW1wiR0VUIC91c2VyL2ZvbGxvd2luZ1wiLCB7fSwge1xuICAgICAgcmVuYW1lZDogW1widXNlcnNcIiwgXCJsaXN0Rm9sbG93ZWRCeUF1dGhlbnRpY2F0ZWRVc2VyXCJdXG4gICAgfV0sXG4gICAgbGlzdEZvbGxvd2VkQnlBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2ZvbGxvd2luZ1wiXSxcbiAgICBsaXN0Rm9sbG93ZXJzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9mb2xsb3dlcnNcIl0sXG4gICAgbGlzdEZvbGxvd2Vyc0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9mb2xsb3dlcnNcIl0sXG4gICAgbGlzdEZvbGxvd2luZ0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9mb2xsb3dpbmdcIl0sXG4gICAgbGlzdEdwZ0tleXNGb3JBdXRoZW50aWNhdGVkOiBbXCJHRVQgL3VzZXIvZ3BnX2tleXNcIiwge30sIHtcbiAgICAgIHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwibGlzdEdwZ0tleXNGb3JBdXRoZW50aWNhdGVkVXNlclwiXVxuICAgIH1dLFxuICAgIGxpc3RHcGdLZXlzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9ncGdfa2V5c1wiXSxcbiAgICBsaXN0R3BnS2V5c0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ncGdfa2V5c1wiXSxcbiAgICBsaXN0UHVibGljRW1haWxzRm9yQXV0aGVudGljYXRlZDogW1wiR0VUIC91c2VyL3B1YmxpY19lbWFpbHNcIiwge30sIHtcbiAgICAgIHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwibGlzdFB1YmxpY0VtYWlsc0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdXG4gICAgfV0sXG4gICAgbGlzdFB1YmxpY0VtYWlsc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvcHVibGljX2VtYWlsc1wiXSxcbiAgICBsaXN0UHVibGljS2V5c0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9rZXlzXCJdLFxuICAgIGxpc3RQdWJsaWNTc2hLZXlzRm9yQXV0aGVudGljYXRlZDogW1wiR0VUIC91c2VyL2tleXNcIiwge30sIHtcbiAgICAgIHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwibGlzdFB1YmxpY1NzaEtleXNGb3JBdXRoZW50aWNhdGVkVXNlclwiXVxuICAgIH1dLFxuICAgIGxpc3RQdWJsaWNTc2hLZXlzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9rZXlzXCJdLFxuICAgIHNldFByaW1hcnlFbWFpbFZpc2liaWxpdHlGb3JBdXRoZW50aWNhdGVkOiBbXCJQQVRDSCAvdXNlci9lbWFpbC92aXNpYmlsaXR5XCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcInNldFByaW1hcnlFbWFpbFZpc2liaWxpdHlGb3JBdXRoZW50aWNhdGVkVXNlclwiXVxuICAgIH1dLFxuICAgIHNldFByaW1hcnlFbWFpbFZpc2liaWxpdHlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUEFUQ0ggL3VzZXIvZW1haWwvdmlzaWJpbGl0eVwiXSxcbiAgICB1bmJsb2NrOiBbXCJERUxFVEUgL3VzZXIvYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgdW5mb2xsb3c6IFtcIkRFTEVURSAvdXNlci9mb2xsb3dpbmcve3VzZXJuYW1lfVwiXSxcbiAgICB1cGRhdGVBdXRoZW50aWNhdGVkOiBbXCJQQVRDSCAvdXNlclwiXVxuICB9XG59O1xuXG5jb25zdCBWRVJTSU9OID0gXCI1LjE2LjJcIjtcblxuZnVuY3Rpb24gZW5kcG9pbnRzVG9NZXRob2RzKG9jdG9raXQsIGVuZHBvaW50c01hcCkge1xuICBjb25zdCBuZXdNZXRob2RzID0ge307XG5cbiAgZm9yIChjb25zdCBbc2NvcGUsIGVuZHBvaW50c10gb2YgT2JqZWN0LmVudHJpZXMoZW5kcG9pbnRzTWFwKSkge1xuICAgIGZvciAoY29uc3QgW21ldGhvZE5hbWUsIGVuZHBvaW50XSBvZiBPYmplY3QuZW50cmllcyhlbmRwb2ludHMpKSB7XG4gICAgICBjb25zdCBbcm91dGUsIGRlZmF1bHRzLCBkZWNvcmF0aW9uc10gPSBlbmRwb2ludDtcbiAgICAgIGNvbnN0IFttZXRob2QsIHVybF0gPSByb3V0ZS5zcGxpdCgvIC8pO1xuICAgICAgY29uc3QgZW5kcG9pbnREZWZhdWx0cyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgICBtZXRob2QsXG4gICAgICAgIHVybFxuICAgICAgfSwgZGVmYXVsdHMpO1xuXG4gICAgICBpZiAoIW5ld01ldGhvZHNbc2NvcGVdKSB7XG4gICAgICAgIG5ld01ldGhvZHNbc2NvcGVdID0ge307XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNjb3BlTWV0aG9kcyA9IG5ld01ldGhvZHNbc2NvcGVdO1xuXG4gICAgICBpZiAoZGVjb3JhdGlvbnMpIHtcbiAgICAgICAgc2NvcGVNZXRob2RzW21ldGhvZE5hbWVdID0gZGVjb3JhdGUob2N0b2tpdCwgc2NvcGUsIG1ldGhvZE5hbWUsIGVuZHBvaW50RGVmYXVsdHMsIGRlY29yYXRpb25zKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHNjb3BlTWV0aG9kc1ttZXRob2ROYW1lXSA9IG9jdG9raXQucmVxdWVzdC5kZWZhdWx0cyhlbmRwb2ludERlZmF1bHRzKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3TWV0aG9kcztcbn1cblxuZnVuY3Rpb24gZGVjb3JhdGUob2N0b2tpdCwgc2NvcGUsIG1ldGhvZE5hbWUsIGRlZmF1bHRzLCBkZWNvcmF0aW9ucykge1xuICBjb25zdCByZXF1ZXN0V2l0aERlZmF1bHRzID0gb2N0b2tpdC5yZXF1ZXN0LmRlZmF1bHRzKGRlZmF1bHRzKTtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblxuICBmdW5jdGlvbiB3aXRoRGVjb3JhdGlvbnMoLi4uYXJncykge1xuICAgIC8vIEB0cy1pZ25vcmUgaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy8yNTQ4OFxuICAgIGxldCBvcHRpb25zID0gcmVxdWVzdFdpdGhEZWZhdWx0cy5lbmRwb2ludC5tZXJnZSguLi5hcmdzKTsgLy8gVGhlcmUgYXJlIGN1cnJlbnRseSBubyBvdGhlciBkZWNvcmF0aW9ucyB0aGFuIGAubWFwVG9EYXRhYFxuXG4gICAgaWYgKGRlY29yYXRpb25zLm1hcFRvRGF0YSkge1xuICAgICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMsIHtcbiAgICAgICAgZGF0YTogb3B0aW9uc1tkZWNvcmF0aW9ucy5tYXBUb0RhdGFdLFxuICAgICAgICBbZGVjb3JhdGlvbnMubWFwVG9EYXRhXTogdW5kZWZpbmVkXG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXF1ZXN0V2l0aERlZmF1bHRzKG9wdGlvbnMpO1xuICAgIH1cblxuICAgIGlmIChkZWNvcmF0aW9ucy5yZW5hbWVkKSB7XG4gICAgICBjb25zdCBbbmV3U2NvcGUsIG5ld01ldGhvZE5hbWVdID0gZGVjb3JhdGlvbnMucmVuYW1lZDtcbiAgICAgIG9jdG9raXQubG9nLndhcm4oYG9jdG9raXQuJHtzY29wZX0uJHttZXRob2ROYW1lfSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gb2N0b2tpdC4ke25ld1Njb3BlfS4ke25ld01ldGhvZE5hbWV9KClgKTtcbiAgICB9XG5cbiAgICBpZiAoZGVjb3JhdGlvbnMuZGVwcmVjYXRlZCkge1xuICAgICAgb2N0b2tpdC5sb2cud2FybihkZWNvcmF0aW9ucy5kZXByZWNhdGVkKTtcbiAgICB9XG5cbiAgICBpZiAoZGVjb3JhdGlvbnMucmVuYW1lZFBhcmFtZXRlcnMpIHtcbiAgICAgIC8vIEB0cy1pZ25vcmUgaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy8yNTQ4OFxuICAgICAgY29uc3Qgb3B0aW9ucyA9IHJlcXVlc3RXaXRoRGVmYXVsdHMuZW5kcG9pbnQubWVyZ2UoLi4uYXJncyk7XG5cbiAgICAgIGZvciAoY29uc3QgW25hbWUsIGFsaWFzXSBvZiBPYmplY3QuZW50cmllcyhkZWNvcmF0aW9ucy5yZW5hbWVkUGFyYW1ldGVycykpIHtcbiAgICAgICAgaWYgKG5hbWUgaW4gb3B0aW9ucykge1xuICAgICAgICAgIG9jdG9raXQubG9nLndhcm4oYFwiJHtuYW1lfVwiIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkIGZvciBcIm9jdG9raXQuJHtzY29wZX0uJHttZXRob2ROYW1lfSgpXCIuIFVzZSBcIiR7YWxpYXN9XCIgaW5zdGVhZGApO1xuXG4gICAgICAgICAgaWYgKCEoYWxpYXMgaW4gb3B0aW9ucykpIHtcbiAgICAgICAgICAgIG9wdGlvbnNbYWxpYXNdID0gb3B0aW9uc1tuYW1lXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkZWxldGUgb3B0aW9uc1tuYW1lXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVxdWVzdFdpdGhEZWZhdWx0cyhvcHRpb25zKTtcbiAgICB9IC8vIEB0cy1pZ25vcmUgaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy8yNTQ4OFxuXG5cbiAgICByZXR1cm4gcmVxdWVzdFdpdGhEZWZhdWx0cyguLi5hcmdzKTtcbiAgfVxuXG4gIHJldHVybiBPYmplY3QuYXNzaWduKHdpdGhEZWNvcmF0aW9ucywgcmVxdWVzdFdpdGhEZWZhdWx0cyk7XG59XG5cbmZ1bmN0aW9uIHJlc3RFbmRwb2ludE1ldGhvZHMob2N0b2tpdCkge1xuICBjb25zdCBhcGkgPSBlbmRwb2ludHNUb01ldGhvZHMob2N0b2tpdCwgRW5kcG9pbnRzKTtcbiAgcmV0dXJuIHtcbiAgICByZXN0OiBhcGlcbiAgfTtcbn1cbnJlc3RFbmRwb2ludE1ldGhvZHMuVkVSU0lPTiA9IFZFUlNJT047XG5mdW5jdGlvbiBsZWdhY3lSZXN0RW5kcG9pbnRNZXRob2RzKG9jdG9raXQpIHtcbiAgY29uc3QgYXBpID0gZW5kcG9pbnRzVG9NZXRob2RzKG9jdG9raXQsIEVuZHBvaW50cyk7XG4gIHJldHVybiBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgYXBpKSwge30sIHtcbiAgICByZXN0OiBhcGlcbiAgfSk7XG59XG5sZWdhY3lSZXN0RW5kcG9pbnRNZXRob2RzLlZFUlNJT04gPSBWRVJTSU9OO1xuXG5leHBvcnRzLmxlZ2FjeVJlc3RFbmRwb2ludE1ldGhvZHMgPSBsZWdhY3lSZXN0RW5kcG9pbnRNZXRob2RzO1xuZXhwb3J0cy5yZXN0RW5kcG9pbnRNZXRob2RzID0gcmVzdEVuZHBvaW50TWV0aG9kcztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmNvbnN0IFZFUlNJT04gPSBcIjIuMjEuM1wiO1xuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7XG4gICAgZW51bWVyYWJsZU9ubHkgJiYgKHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTtcbiAgICB9KSksIGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTtcbiAgfVxuXG4gIHJldHVybiBrZXlzO1xufVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkMih0YXJnZXQpIHtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc291cmNlID0gbnVsbCAhPSBhcmd1bWVudHNbaV0gPyBhcmd1bWVudHNbaV0gOiB7fTtcbiAgICBpICUgMiA/IG93bktleXMoT2JqZWN0KHNvdXJjZSksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pO1xuICAgIH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpIDogb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gb2JqO1xufVxuXG4vKipcbiAqIFNvbWUg4oCcbGlzdOKAnSByZXNwb25zZSB0aGF0IGNhbiBiZSBwYWdpbmF0ZWQgaGF2ZSBhIGRpZmZlcmVudCByZXNwb25zZSBzdHJ1Y3R1cmVcbiAqXG4gKiBUaGV5IGhhdmUgYSBgdG90YWxfY291bnRgIGtleSBpbiB0aGUgcmVzcG9uc2UgKHNlYXJjaCBhbHNvIGhhcyBgaW5jb21wbGV0ZV9yZXN1bHRzYCxcbiAqIC9pbnN0YWxsYXRpb24vcmVwb3NpdG9yaWVzIGFsc28gaGFzIGByZXBvc2l0b3J5X3NlbGVjdGlvbmApLCBhcyB3ZWxsIGFzIGEga2V5IHdpdGhcbiAqIHRoZSBsaXN0IG9mIHRoZSBpdGVtcyB3aGljaCBuYW1lIHZhcmllcyBmcm9tIGVuZHBvaW50IHRvIGVuZHBvaW50LlxuICpcbiAqIE9jdG9raXQgbm9ybWFsaXplcyB0aGVzZSByZXNwb25zZXMgc28gdGhhdCBwYWdpbmF0ZWQgcmVzdWx0cyBhcmUgYWx3YXlzIHJldHVybmVkIGZvbGxvd2luZ1xuICogdGhlIHNhbWUgc3RydWN0dXJlLiBPbmUgY2hhbGxlbmdlIGlzIHRoYXQgaWYgdGhlIGxpc3QgcmVzcG9uc2UgaGFzIG9ubHkgb25lIHBhZ2UsIG5vIExpbmtcbiAqIGhlYWRlciBpcyBwcm92aWRlZCwgc28gdGhpcyBoZWFkZXIgYWxvbmUgaXMgbm90IHN1ZmZpY2llbnQgdG8gY2hlY2sgd2V0aGVyIGEgcmVzcG9uc2UgaXNcbiAqIHBhZ2luYXRlZCBvciBub3QuXG4gKlxuICogV2UgY2hlY2sgaWYgYSBcInRvdGFsX2NvdW50XCIga2V5IGlzIHByZXNlbnQgaW4gdGhlIHJlc3BvbnNlIGRhdGEsIGJ1dCBhbHNvIG1ha2Ugc3VyZSB0aGF0XG4gKiBhIFwidXJsXCIgcHJvcGVydHkgaXMgbm90LCBhcyB0aGUgXCJHZXQgdGhlIGNvbWJpbmVkIHN0YXR1cyBmb3IgYSBzcGVjaWZpYyByZWZcIiBlbmRwb2ludCB3b3VsZFxuICogb3RoZXJ3aXNlIG1hdGNoOiBodHRwczovL2RldmVsb3Blci5naXRodWIuY29tL3YzL3JlcG9zL3N0YXR1c2VzLyNnZXQtdGhlLWNvbWJpbmVkLXN0YXR1cy1mb3ItYS1zcGVjaWZpYy1yZWZcbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplUGFnaW5hdGVkTGlzdFJlc3BvbnNlKHJlc3BvbnNlKSB7XG4gIC8vIGVuZHBvaW50cyBjYW4gcmVzcG9uZCB3aXRoIDIwNCBpZiByZXBvc2l0b3J5IGlzIGVtcHR5XG4gIGlmICghcmVzcG9uc2UuZGF0YSkge1xuICAgIHJldHVybiBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgcmVzcG9uc2UpLCB7fSwge1xuICAgICAgZGF0YTogW11cbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IHJlc3BvbnNlTmVlZHNOb3JtYWxpemF0aW9uID0gXCJ0b3RhbF9jb3VudFwiIGluIHJlc3BvbnNlLmRhdGEgJiYgIShcInVybFwiIGluIHJlc3BvbnNlLmRhdGEpO1xuICBpZiAoIXJlc3BvbnNlTmVlZHNOb3JtYWxpemF0aW9uKSByZXR1cm4gcmVzcG9uc2U7IC8vIGtlZXAgdGhlIGFkZGl0aW9uYWwgcHJvcGVydGllcyBpbnRhY3QgYXMgdGhlcmUgaXMgY3VycmVudGx5IG5vIG90aGVyIHdheVxuICAvLyB0byByZXRyaWV2ZSB0aGUgc2FtZSBpbmZvcm1hdGlvbi5cblxuICBjb25zdCBpbmNvbXBsZXRlUmVzdWx0cyA9IHJlc3BvbnNlLmRhdGEuaW5jb21wbGV0ZV9yZXN1bHRzO1xuICBjb25zdCByZXBvc2l0b3J5U2VsZWN0aW9uID0gcmVzcG9uc2UuZGF0YS5yZXBvc2l0b3J5X3NlbGVjdGlvbjtcbiAgY29uc3QgdG90YWxDb3VudCA9IHJlc3BvbnNlLmRhdGEudG90YWxfY291bnQ7XG4gIGRlbGV0ZSByZXNwb25zZS5kYXRhLmluY29tcGxldGVfcmVzdWx0cztcbiAgZGVsZXRlIHJlc3BvbnNlLmRhdGEucmVwb3NpdG9yeV9zZWxlY3Rpb247XG4gIGRlbGV0ZSByZXNwb25zZS5kYXRhLnRvdGFsX2NvdW50O1xuICBjb25zdCBuYW1lc3BhY2VLZXkgPSBPYmplY3Qua2V5cyhyZXNwb25zZS5kYXRhKVswXTtcbiAgY29uc3QgZGF0YSA9IHJlc3BvbnNlLmRhdGFbbmFtZXNwYWNlS2V5XTtcbiAgcmVzcG9uc2UuZGF0YSA9IGRhdGE7XG5cbiAgaWYgKHR5cGVvZiBpbmNvbXBsZXRlUmVzdWx0cyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJlc3BvbnNlLmRhdGEuaW5jb21wbGV0ZV9yZXN1bHRzID0gaW5jb21wbGV0ZVJlc3VsdHM7XG4gIH1cblxuICBpZiAodHlwZW9mIHJlcG9zaXRvcnlTZWxlY3Rpb24gIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXNwb25zZS5kYXRhLnJlcG9zaXRvcnlfc2VsZWN0aW9uID0gcmVwb3NpdG9yeVNlbGVjdGlvbjtcbiAgfVxuXG4gIHJlc3BvbnNlLmRhdGEudG90YWxfY291bnQgPSB0b3RhbENvdW50O1xuICByZXR1cm4gcmVzcG9uc2U7XG59XG5cbmZ1bmN0aW9uIGl0ZXJhdG9yKG9jdG9raXQsIHJvdXRlLCBwYXJhbWV0ZXJzKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSB0eXBlb2Ygcm91dGUgPT09IFwiZnVuY3Rpb25cIiA/IHJvdXRlLmVuZHBvaW50KHBhcmFtZXRlcnMpIDogb2N0b2tpdC5yZXF1ZXN0LmVuZHBvaW50KHJvdXRlLCBwYXJhbWV0ZXJzKTtcbiAgY29uc3QgcmVxdWVzdE1ldGhvZCA9IHR5cGVvZiByb3V0ZSA9PT0gXCJmdW5jdGlvblwiID8gcm91dGUgOiBvY3Rva2l0LnJlcXVlc3Q7XG4gIGNvbnN0IG1ldGhvZCA9IG9wdGlvbnMubWV0aG9kO1xuICBjb25zdCBoZWFkZXJzID0gb3B0aW9ucy5oZWFkZXJzO1xuICBsZXQgdXJsID0gb3B0aW9ucy51cmw7XG4gIHJldHVybiB7XG4gICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTogKCkgPT4gKHtcbiAgICAgIGFzeW5jIG5leHQoKSB7XG4gICAgICAgIGlmICghdXJsKSByZXR1cm4ge1xuICAgICAgICAgIGRvbmU6IHRydWVcbiAgICAgICAgfTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdE1ldGhvZCh7XG4gICAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICBoZWFkZXJzXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFJlc3BvbnNlID0gbm9ybWFsaXplUGFnaW5hdGVkTGlzdFJlc3BvbnNlKHJlc3BvbnNlKTsgLy8gYHJlc3BvbnNlLmhlYWRlcnMubGlua2AgZm9ybWF0OlxuICAgICAgICAgIC8vICc8aHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS91c2Vycy9hc2VlbWsvZm9sbG93ZXJzP3BhZ2U9Mj47IHJlbD1cIm5leHRcIiwgPGh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vdXNlcnMvYXNlZW1rL2ZvbGxvd2Vycz9wYWdlPTI+OyByZWw9XCJsYXN0XCInXG4gICAgICAgICAgLy8gc2V0cyBgdXJsYCB0byB1bmRlZmluZWQgaWYgXCJuZXh0XCIgVVJMIGlzIG5vdCBwcmVzZW50IG9yIGBsaW5rYCBoZWFkZXIgaXMgbm90IHNldFxuXG4gICAgICAgICAgdXJsID0gKChub3JtYWxpemVkUmVzcG9uc2UuaGVhZGVycy5saW5rIHx8IFwiXCIpLm1hdGNoKC88KFtePl0rKT47XFxzKnJlbD1cIm5leHRcIi8pIHx8IFtdKVsxXTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IG5vcm1hbGl6ZWRSZXNwb25zZVxuICAgICAgICAgIH07XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgaWYgKGVycm9yLnN0YXR1cyAhPT0gNDA5KSB0aHJvdyBlcnJvcjtcbiAgICAgICAgICB1cmwgPSBcIlwiO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICBzdGF0dXM6IDIwMCxcbiAgICAgICAgICAgICAgaGVhZGVyczoge30sXG4gICAgICAgICAgICAgIGRhdGE6IFtdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgfSlcbiAgfTtcbn1cblxuZnVuY3Rpb24gcGFnaW5hdGUob2N0b2tpdCwgcm91dGUsIHBhcmFtZXRlcnMsIG1hcEZuKSB7XG4gIGlmICh0eXBlb2YgcGFyYW1ldGVycyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgbWFwRm4gPSBwYXJhbWV0ZXJzO1xuICAgIHBhcmFtZXRlcnMgPSB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gZ2F0aGVyKG9jdG9raXQsIFtdLCBpdGVyYXRvcihvY3Rva2l0LCByb3V0ZSwgcGFyYW1ldGVycylbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCksIG1hcEZuKTtcbn1cblxuZnVuY3Rpb24gZ2F0aGVyKG9jdG9raXQsIHJlc3VsdHMsIGl0ZXJhdG9yLCBtYXBGbikge1xuICByZXR1cm4gaXRlcmF0b3IubmV4dCgpLnRoZW4ocmVzdWx0ID0+IHtcbiAgICBpZiAocmVzdWx0LmRvbmUpIHtcbiAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cblxuICAgIGxldCBlYXJseUV4aXQgPSBmYWxzZTtcblxuICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICBlYXJseUV4aXQgPSB0cnVlO1xuICAgIH1cblxuICAgIHJlc3VsdHMgPSByZXN1bHRzLmNvbmNhdChtYXBGbiA/IG1hcEZuKHJlc3VsdC52YWx1ZSwgZG9uZSkgOiByZXN1bHQudmFsdWUuZGF0YSk7XG5cbiAgICBpZiAoZWFybHlFeGl0KSB7XG4gICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG5cbiAgICByZXR1cm4gZ2F0aGVyKG9jdG9raXQsIHJlc3VsdHMsIGl0ZXJhdG9yLCBtYXBGbik7XG4gIH0pO1xufVxuXG5jb25zdCBjb21wb3NlUGFnaW5hdGVSZXN0ID0gT2JqZWN0LmFzc2lnbihwYWdpbmF0ZSwge1xuICBpdGVyYXRvclxufSk7XG5cbmNvbnN0IHBhZ2luYXRpbmdFbmRwb2ludHMgPSBbXCJHRVQgL2FwcC9ob29rL2RlbGl2ZXJpZXNcIiwgXCJHRVQgL2FwcC9pbnN0YWxsYXRpb25zXCIsIFwiR0VUIC9hcHBsaWNhdGlvbnMvZ3JhbnRzXCIsIFwiR0VUIC9hdXRob3JpemF0aW9uc1wiLCBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2FjdGlvbnMvcGVybWlzc2lvbnMvb3JnYW5pemF0aW9uc1wiLCBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2FjdGlvbnMvcnVubmVyLWdyb3Vwc1wiLCBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2FjdGlvbnMvcnVubmVyLWdyb3Vwcy97cnVubmVyX2dyb3VwX2lkfS9vcmdhbml6YXRpb25zXCIsIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vYWN0aW9ucy9ydW5uZXItZ3JvdXBzL3tydW5uZXJfZ3JvdXBfaWR9L3J1bm5lcnNcIiwgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9hY3Rpb25zL3J1bm5lcnNcIiwgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9hdWRpdC1sb2dcIiwgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzXCIsIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vc2V0dGluZ3MvYmlsbGluZy9hZHZhbmNlZC1zZWN1cml0eVwiLCBcIkdFVCAvZXZlbnRzXCIsIFwiR0VUIC9naXN0c1wiLCBcIkdFVCAvZ2lzdHMvcHVibGljXCIsIFwiR0VUIC9naXN0cy9zdGFycmVkXCIsIFwiR0VUIC9naXN0cy97Z2lzdF9pZH0vY29tbWVudHNcIiwgXCJHRVQgL2dpc3RzL3tnaXN0X2lkfS9jb21taXRzXCIsIFwiR0VUIC9naXN0cy97Z2lzdF9pZH0vZm9ya3NcIiwgXCJHRVQgL2luc3RhbGxhdGlvbi9yZXBvc2l0b3JpZXNcIiwgXCJHRVQgL2lzc3Vlc1wiLCBcIkdFVCAvbGljZW5zZXNcIiwgXCJHRVQgL21hcmtldHBsYWNlX2xpc3RpbmcvcGxhbnNcIiwgXCJHRVQgL21hcmtldHBsYWNlX2xpc3RpbmcvcGxhbnMve3BsYW5faWR9L2FjY291bnRzXCIsIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3N0dWJiZWQvcGxhbnNcIiwgXCJHRVQgL21hcmtldHBsYWNlX2xpc3Rpbmcvc3R1YmJlZC9wbGFucy97cGxhbl9pZH0vYWNjb3VudHNcIiwgXCJHRVQgL25ldHdvcmtzL3tvd25lcn0ve3JlcG99L2V2ZW50c1wiLCBcIkdFVCAvbm90aWZpY2F0aW9uc1wiLCBcIkdFVCAvb3JnYW5pemF0aW9uc1wiLCBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2NhY2hlL3VzYWdlLWJ5LXJlcG9zaXRvcnlcIiwgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9yZXBvc2l0b3JpZXNcIiwgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXItZ3JvdXBzXCIsIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVyLWdyb3Vwcy97cnVubmVyX2dyb3VwX2lkfS9yZXBvc2l0b3JpZXNcIiwgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXItZ3JvdXBzL3tydW5uZXJfZ3JvdXBfaWR9L3J1bm5lcnNcIiwgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzXCIsIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0c1wiLCBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIiwgXCJHRVQgL29yZ3Mve29yZ30vYXVkaXQtbG9nXCIsIFwiR0VUIC9vcmdzL3tvcmd9L2Jsb2Nrc1wiLCBcIkdFVCAvb3Jncy97b3JnfS9jb2RlLXNjYW5uaW5nL2FsZXJ0c1wiLCBcIkdFVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzXCIsIFwiR0VUIC9vcmdzL3tvcmd9L2NyZWRlbnRpYWwtYXV0aG9yaXphdGlvbnNcIiwgXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzXCIsIFwiR0VUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiLCBcIkdFVCAvb3Jncy97b3JnfS9ldmVudHNcIiwgXCJHRVQgL29yZ3Mve29yZ30vZXh0ZXJuYWwtZ3JvdXBzXCIsIFwiR0VUIC9vcmdzL3tvcmd9L2ZhaWxlZF9pbnZpdGF0aW9uc1wiLCBcIkdFVCAvb3Jncy97b3JnfS9ob29rc1wiLCBcIkdFVCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllc1wiLCBcIkdFVCAvb3Jncy97b3JnfS9pbnN0YWxsYXRpb25zXCIsIFwiR0VUIC9vcmdzL3tvcmd9L2ludml0YXRpb25zXCIsIFwiR0VUIC9vcmdzL3tvcmd9L2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfS90ZWFtc1wiLCBcIkdFVCAvb3Jncy97b3JnfS9pc3N1ZXNcIiwgXCJHRVQgL29yZ3Mve29yZ30vbWVtYmVyc1wiLCBcIkdFVCAvb3Jncy97b3JnfS9taWdyYXRpb25zXCIsIFwiR0VUIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCIsIFwiR0VUIC9vcmdzL3tvcmd9L291dHNpZGVfY29sbGFib3JhdG9yc1wiLCBcIkdFVCAvb3Jncy97b3JnfS9wYWNrYWdlc1wiLCBcIkdFVCAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiLCBcIkdFVCAvb3Jncy97b3JnfS9wcm9qZWN0c1wiLCBcIkdFVCAvb3Jncy97b3JnfS9wdWJsaWNfbWVtYmVyc1wiLCBcIkdFVCAvb3Jncy97b3JnfS9yZXBvc1wiLCBcIkdFVCAvb3Jncy97b3JnfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzXCIsIFwiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL2JpbGxpbmcvYWR2YW5jZWQtc2VjdXJpdHlcIiwgXCJHRVQgL29yZ3Mve29yZ30vdGVhbS1zeW5jL2dyb3Vwc1wiLCBcIkdFVCAvb3Jncy97b3JnfS90ZWFtc1wiLCBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9uc1wiLCBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzXCIsIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfbnVtYmVyfS9yZWFjdGlvbnNcIiwgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9yZWFjdGlvbnNcIiwgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vaW52aXRhdGlvbnNcIiwgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vbWVtYmVyc1wiLCBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9wcm9qZWN0c1wiLCBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9yZXBvc1wiLCBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS90ZWFtc1wiLCBcIkdFVCAvcHJvamVjdHMvY29sdW1ucy97Y29sdW1uX2lkfS9jYXJkc1wiLCBcIkdFVCAvcHJvamVjdHMve3Byb2plY3RfaWR9L2NvbGxhYm9yYXRvcnNcIiwgXCJHRVQgL3Byb2plY3RzL3twcm9qZWN0X2lkfS9jb2x1bW5zXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2FydGlmYWN0c1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9jYWNoZXNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVyc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXJ0aWZhY3RzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXR0ZW1wdHMve2F0dGVtcHRfbnVtYmVyfS9qb2JzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vam9ic1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9zZWNyZXRzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93c1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3Mve3dvcmtmbG93X2lkfS9ydW5zXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hc3NpZ25lZXNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1ydW5zL3tjaGVja19ydW5faWR9L2Fubm90YXRpb25zXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1zdWl0ZXMve2NoZWNrX3N1aXRlX2lkfS9jaGVjay1ydW5zXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0c1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn0vaW5zdGFuY2VzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FuYWx5c2VzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL2RldmNvbnRhaW5lcnNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvc2VjcmV0c1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29sbGFib3JhdG9yc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve2NvbW1pdF9zaGF9L2NvbW1lbnRzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tjb21taXRfc2hhfS9wdWxsc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfS9jaGVjay1ydW5zXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L2NoZWNrLXN1aXRlc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfS9zdGF0dXNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vc3RhdHVzZXNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbnRyaWJ1dG9yc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9zZWNyZXRzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50c1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHMve2RlcGxveW1lbnRfaWR9L3N0YXR1c2VzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2V2ZW50c1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZm9ya3NcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9tYXRjaGluZy1yZWZzL3tyZWZ9XCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludml0YXRpb25zXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50c1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9ldmVudHNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9jb21tZW50c1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2V2ZW50c1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xhYmVsc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L3JlYWN0aW9uc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L3RpbWVsaW5lXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9rZXlzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sYWJlbHNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXMve21pbGVzdG9uZV9udW1iZXJ9L2xhYmVsc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbm90aWZpY2F0aW9uc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXMvYnVpbGRzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wcm9qZWN0c1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2NvbW1lbnRzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2NvbW1pdHNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vZmlsZXNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmVxdWVzdGVkX3Jldmlld2Vyc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH0vY29tbWVudHNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vYXNzZXRzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vcmVhY3Rpb25zXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9L2xvY2F0aW9uc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3RhcmdhemVyc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3Vic2NyaWJlcnNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RhZ3NcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RlYW1zXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90b3BpY3NcIiwgXCJHRVQgL3JlcG9zaXRvcmllc1wiLCBcIkdFVCAvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHNcIiwgXCJHRVQgL3NlYXJjaC9jb2RlXCIsIFwiR0VUIC9zZWFyY2gvY29tbWl0c1wiLCBcIkdFVCAvc2VhcmNoL2lzc3Vlc1wiLCBcIkdFVCAvc2VhcmNoL2xhYmVsc1wiLCBcIkdFVCAvc2VhcmNoL3JlcG9zaXRvcmllc1wiLCBcIkdFVCAvc2VhcmNoL3RvcGljc1wiLCBcIkdFVCAvc2VhcmNoL3VzZXJzXCIsIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vZGlzY3Vzc2lvbnNcIiwgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzXCIsIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9L3JlYWN0aW9uc1wiLCBcIkdFVCAvdGVhbXMve3RlYW1faWR9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vcmVhY3Rpb25zXCIsIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vaW52aXRhdGlvbnNcIiwgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9tZW1iZXJzXCIsIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vcHJvamVjdHNcIiwgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9yZXBvc1wiLCBcIkdFVCAvdGVhbXMve3RlYW1faWR9L3RlYW1zXCIsIFwiR0VUIC91c2VyL2Jsb2Nrc1wiLCBcIkdFVCAvdXNlci9jb2Rlc3BhY2VzXCIsIFwiR0VUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0c1wiLCBcIkdFVCAvdXNlci9lbWFpbHNcIiwgXCJHRVQgL3VzZXIvZm9sbG93ZXJzXCIsIFwiR0VUIC91c2VyL2ZvbGxvd2luZ1wiLCBcIkdFVCAvdXNlci9ncGdfa2V5c1wiLCBcIkdFVCAvdXNlci9pbnN0YWxsYXRpb25zXCIsIFwiR0VUIC91c2VyL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCIsIFwiR0VUIC91c2VyL2lzc3Vlc1wiLCBcIkdFVCAvdXNlci9rZXlzXCIsIFwiR0VUIC91c2VyL21hcmtldHBsYWNlX3B1cmNoYXNlc1wiLCBcIkdFVCAvdXNlci9tYXJrZXRwbGFjZV9wdXJjaGFzZXMvc3R1YmJlZFwiLCBcIkdFVCAvdXNlci9tZW1iZXJzaGlwcy9vcmdzXCIsIFwiR0VUIC91c2VyL21pZ3JhdGlvbnNcIiwgXCJHRVQgL3VzZXIvbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIiwgXCJHRVQgL3VzZXIvb3Jnc1wiLCBcIkdFVCAvdXNlci9wYWNrYWdlc1wiLCBcIkdFVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiLCBcIkdFVCAvdXNlci9wdWJsaWNfZW1haWxzXCIsIFwiR0VUIC91c2VyL3JlcG9zXCIsIFwiR0VUIC91c2VyL3JlcG9zaXRvcnlfaW52aXRhdGlvbnNcIiwgXCJHRVQgL3VzZXIvc3RhcnJlZFwiLCBcIkdFVCAvdXNlci9zdWJzY3JpcHRpb25zXCIsIFwiR0VUIC91c2VyL3RlYW1zXCIsIFwiR0VUIC91c2Vyc1wiLCBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ldmVudHNcIiwgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzL29yZ3Mve29yZ31cIiwgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzL3B1YmxpY1wiLCBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9mb2xsb3dlcnNcIiwgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZm9sbG93aW5nXCIsIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2dpc3RzXCIsIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2dwZ19rZXlzXCIsIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2tleXNcIiwgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vb3Jnc1wiLCBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlc1wiLCBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wcm9qZWN0c1wiLCBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9yZWNlaXZlZF9ldmVudHNcIiwgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcmVjZWl2ZWRfZXZlbnRzL3B1YmxpY1wiLCBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9yZXBvc1wiLCBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zdGFycmVkXCIsIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3N1YnNjcmlwdGlvbnNcIl07XG5cbmZ1bmN0aW9uIGlzUGFnaW5hdGluZ0VuZHBvaW50KGFyZykge1xuICBpZiAodHlwZW9mIGFyZyA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiBwYWdpbmF0aW5nRW5kcG9pbnRzLmluY2x1ZGVzKGFyZyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIG9jdG9raXQgT2N0b2tpdCBpbnN0YW5jZVxuICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBwYXNzZWQgdG8gT2N0b2tpdCBjb25zdHJ1Y3RvclxuICovXG5cbmZ1bmN0aW9uIHBhZ2luYXRlUmVzdChvY3Rva2l0KSB7XG4gIHJldHVybiB7XG4gICAgcGFnaW5hdGU6IE9iamVjdC5hc3NpZ24ocGFnaW5hdGUuYmluZChudWxsLCBvY3Rva2l0KSwge1xuICAgICAgaXRlcmF0b3I6IGl0ZXJhdG9yLmJpbmQobnVsbCwgb2N0b2tpdClcbiAgICB9KVxuICB9O1xufVxucGFnaW5hdGVSZXN0LlZFUlNJT04gPSBWRVJTSU9OO1xuXG5leHBvcnRzLmNvbXBvc2VQYWdpbmF0ZVJlc3QgPSBjb21wb3NlUGFnaW5hdGVSZXN0O1xuZXhwb3J0cy5pc1BhZ2luYXRpbmdFbmRwb2ludCA9IGlzUGFnaW5hdGluZ0VuZHBvaW50O1xuZXhwb3J0cy5wYWdpbmF0ZVJlc3QgPSBwYWdpbmF0ZVJlc3Q7XG5leHBvcnRzLnBhZ2luYXRpbmdFbmRwb2ludHMgPSBwYWdpbmF0aW5nRW5kcG9pbnRzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH0pO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0T2N0b2tpdE9wdGlvbnMgPSBleHBvcnRzLkdpdEh1YiA9IGV4cG9ydHMuZGVmYXVsdHMgPSBleHBvcnRzLmNvbnRleHQgPSB2b2lkIDA7XG5jb25zdCBDb250ZXh0ID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL2NvbnRleHRcIikpO1xuY29uc3QgVXRpbHMgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIi4vaW50ZXJuYWwvdXRpbHNcIikpO1xuLy8gb2N0b2tpdCArIHBsdWdpbnNcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCJAb2N0b2tpdC9jb3JlXCIpO1xuY29uc3QgcGx1Z2luX3Jlc3RfZW5kcG9pbnRfbWV0aG9kc18xID0gcmVxdWlyZShcIkBvY3Rva2l0L3BsdWdpbi1yZXN0LWVuZHBvaW50LW1ldGhvZHNcIik7XG5jb25zdCBwbHVnaW5fcGFnaW5hdGVfcmVzdF8xID0gcmVxdWlyZShcIkBvY3Rva2l0L3BsdWdpbi1wYWdpbmF0ZS1yZXN0XCIpO1xuZXhwb3J0cy5jb250ZXh0ID0gbmV3IENvbnRleHQuQ29udGV4dCgpO1xuY29uc3QgYmFzZVVybCA9IFV0aWxzLmdldEFwaUJhc2VVcmwoKTtcbmV4cG9ydHMuZGVmYXVsdHMgPSB7XG4gICAgYmFzZVVybCxcbiAgICByZXF1ZXN0OiB7XG4gICAgICAgIGFnZW50OiBVdGlscy5nZXRQcm94eUFnZW50KGJhc2VVcmwpXG4gICAgfVxufTtcbmV4cG9ydHMuR2l0SHViID0gY29yZV8xLk9jdG9raXQucGx1Z2luKHBsdWdpbl9yZXN0X2VuZHBvaW50X21ldGhvZHNfMS5yZXN0RW5kcG9pbnRNZXRob2RzLCBwbHVnaW5fcGFnaW5hdGVfcmVzdF8xLnBhZ2luYXRlUmVzdCkuZGVmYXVsdHMoZXhwb3J0cy5kZWZhdWx0cyk7XG4vKipcbiAqIENvbnZpZW5jZSBmdW5jdGlvbiB0byBjb3JyZWN0bHkgZm9ybWF0IE9jdG9raXQgT3B0aW9ucyB0byBwYXNzIGludG8gdGhlIGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSAgICAgdG9rZW4gICAgdGhlIHJlcG8gUEFUIG9yIEdJVEhVQl9UT0tFTlxuICogQHBhcmFtICAgICBvcHRpb25zICBvdGhlciBvcHRpb25zIHRvIHNldFxuICovXG5mdW5jdGlvbiBnZXRPY3Rva2l0T3B0aW9ucyh0b2tlbiwgb3B0aW9ucykge1xuICAgIGNvbnN0IG9wdHMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zIHx8IHt9KTsgLy8gU2hhbGxvdyBjbG9uZSAtIGRvbid0IG11dGF0ZSB0aGUgb2JqZWN0IHByb3ZpZGVkIGJ5IHRoZSBjYWxsZXJcbiAgICAvLyBBdXRoXG4gICAgY29uc3QgYXV0aCA9IFV0aWxzLmdldEF1dGhTdHJpbmcodG9rZW4sIG9wdHMpO1xuICAgIGlmIChhdXRoKSB7XG4gICAgICAgIG9wdHMuYXV0aCA9IGF1dGg7XG4gICAgfVxuICAgIHJldHVybiBvcHRzO1xufVxuZXhwb3J0cy5nZXRPY3Rva2l0T3B0aW9ucyA9IGdldE9jdG9raXRPcHRpb25zO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbHMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9KTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldE9jdG9raXQgPSBleHBvcnRzLmNvbnRleHQgPSB2b2lkIDA7XG5jb25zdCBDb250ZXh0ID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL2NvbnRleHRcIikpO1xuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoXCIuL3V0aWxzXCIpO1xuZXhwb3J0cy5jb250ZXh0ID0gbmV3IENvbnRleHQuQ29udGV4dCgpO1xuLyoqXG4gKiBSZXR1cm5zIGEgaHlkcmF0ZWQgb2N0b2tpdCByZWFkeSB0byB1c2UgZm9yIEdpdEh1YiBBY3Rpb25zXG4gKlxuICogQHBhcmFtICAgICB0b2tlbiAgICB0aGUgcmVwbyBQQVQgb3IgR0lUSFVCX1RPS0VOXG4gKiBAcGFyYW0gICAgIG9wdGlvbnMgIG90aGVyIG9wdGlvbnMgdG8gc2V0XG4gKi9cbmZ1bmN0aW9uIGdldE9jdG9raXQodG9rZW4sIG9wdGlvbnMsIC4uLmFkZGl0aW9uYWxQbHVnaW5zKSB7XG4gICAgY29uc3QgR2l0SHViV2l0aFBsdWdpbnMgPSB1dGlsc18xLkdpdEh1Yi5wbHVnaW4oLi4uYWRkaXRpb25hbFBsdWdpbnMpO1xuICAgIHJldHVybiBuZXcgR2l0SHViV2l0aFBsdWdpbnModXRpbHNfMS5nZXRPY3Rva2l0T3B0aW9ucyh0b2tlbiwgb3B0aW9ucykpO1xufVxuZXhwb3J0cy5nZXRPY3Rva2l0ID0gZ2V0T2N0b2tpdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdpdGh1Yi5qcy5tYXAiLAogICAgIm1vZHVsZS5leHBvcnRzID0gVHJhdmVyc2U7XG5mdW5jdGlvbiBUcmF2ZXJzZSAob2JqKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFRyYXZlcnNlKSkgcmV0dXJuIG5ldyBUcmF2ZXJzZShvYmopO1xuICAgIHRoaXMudmFsdWUgPSBvYmo7XG59XG5cblRyYXZlcnNlLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAocHMpIHtcbiAgICB2YXIgbm9kZSA9IHRoaXMudmFsdWU7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcy5sZW5ndGg7IGkgKyspIHtcbiAgICAgICAgdmFyIGtleSA9IHBzW2ldO1xuICAgICAgICBpZiAoIU9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5vZGUsIGtleSkpIHtcbiAgICAgICAgICAgIG5vZGUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBub2RlID0gbm9kZVtrZXldO1xuICAgIH1cbiAgICByZXR1cm4gbm9kZTtcbn07XG5cblRyYXZlcnNlLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAocHMsIHZhbHVlKSB7XG4gICAgdmFyIG5vZGUgPSB0aGlzLnZhbHVlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHMubGVuZ3RoIC0gMTsgaSArKykge1xuICAgICAgICB2YXIga2V5ID0gcHNbaV07XG4gICAgICAgIGlmICghT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobm9kZSwga2V5KSkgbm9kZVtrZXldID0ge307XG4gICAgICAgIG5vZGUgPSBub2RlW2tleV07XG4gICAgfVxuICAgIG5vZGVbcHNbaV1dID0gdmFsdWU7XG4gICAgcmV0dXJuIHZhbHVlO1xufTtcblxuVHJhdmVyc2UucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uIChjYikge1xuICAgIHJldHVybiB3YWxrKHRoaXMudmFsdWUsIGNiLCB0cnVlKTtcbn07XG5cblRyYXZlcnNlLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgdGhpcy52YWx1ZSA9IHdhbGsodGhpcy52YWx1ZSwgY2IsIGZhbHNlKTtcbiAgICByZXR1cm4gdGhpcy52YWx1ZTtcbn07XG5cblRyYXZlcnNlLnByb3RvdHlwZS5yZWR1Y2UgPSBmdW5jdGlvbiAoY2IsIGluaXQpIHtcbiAgICB2YXIgc2tpcCA9IGFyZ3VtZW50cy5sZW5ndGggPT09IDE7XG4gICAgdmFyIGFjYyA9IHNraXAgPyB0aGlzLnZhbHVlIDogaW5pdDtcbiAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzUm9vdCB8fCAhc2tpcCkge1xuICAgICAgICAgICAgYWNjID0gY2IuY2FsbCh0aGlzLCBhY2MsIHgpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGFjYztcbn07XG5cblRyYXZlcnNlLnByb3RvdHlwZS5kZWVwRXF1YWwgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgJ2RlZXBFcXVhbCByZXF1aXJlcyBleGFjdGx5IG9uZSBvYmplY3QgdG8gY29tcGFyZSBhZ2FpbnN0J1xuICAgICAgICApO1xuICAgIH1cbiAgICBcbiAgICB2YXIgZXF1YWwgPSB0cnVlO1xuICAgIHZhciBub2RlID0gb2JqO1xuICAgIFxuICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbiAoeSkge1xuICAgICAgICB2YXIgbm90RXF1YWwgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXF1YWwgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vdGhpcy5zdG9wKCk7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9KS5iaW5kKHRoaXMpO1xuICAgICAgICBcbiAgICAgICAgLy9pZiAobm9kZSA9PT0gdW5kZWZpbmVkIHx8IG5vZGUgPT09IG51bGwpIHJldHVybiBub3RFcXVhbCgpO1xuICAgICAgICBcbiAgICAgICAgaWYgKCF0aGlzLmlzUm9vdCkge1xuICAgICAgICAvKlxuICAgICAgICAgICAgaWYgKCFPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChub2RlLCB0aGlzLmtleSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbm90RXF1YWwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKi9cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygbm9kZSAhPT0gJ29iamVjdCcpIHJldHVybiBub3RFcXVhbCgpO1xuICAgICAgICAgICAgbm9kZSA9IG5vZGVbdGhpcy5rZXldO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICB2YXIgeCA9IG5vZGU7XG4gICAgICAgIFxuICAgICAgICB0aGlzLnBvc3QoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbm9kZSA9IHg7XG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgdmFyIHRvUyA9IGZ1bmN0aW9uIChvKSB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pO1xuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHRoaXMuY2lyY3VsYXIpIHtcbiAgICAgICAgICAgIGlmIChUcmF2ZXJzZShvYmopLmdldCh0aGlzLmNpcmN1bGFyLnBhdGgpICE9PSB4KSBub3RFcXVhbCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiB4ICE9PSB0eXBlb2YgeSkge1xuICAgICAgICAgICAgbm90RXF1YWwoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh4ID09PSBudWxsIHx8IHkgPT09IG51bGwgfHwgeCA9PT0gdW5kZWZpbmVkIHx8IHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKHggIT09IHkpIG5vdEVxdWFsKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoeC5fX3Byb3RvX18gIT09IHkuX19wcm90b19fKSB7XG4gICAgICAgICAgICBub3RFcXVhbCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHggPT09IHkpIHtcbiAgICAgICAgICAgIC8vIG5vcFxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiB4ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBpZiAoeCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICAgICAgICAgIC8vIGJvdGggcmVnZXhwcyBvbiBhY2NvdW50IG9mIHRoZSBfX3Byb3RvX18gY2hlY2tcbiAgICAgICAgICAgICAgICBpZiAoeC50b1N0cmluZygpICE9IHkudG9TdHJpbmcoKSkgbm90RXF1YWwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHggIT09IHkpIG5vdEVxdWFsKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHggPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBpZiAodG9TKHkpID09PSAnW29iamVjdCBBcmd1bWVudHNdJ1xuICAgICAgICAgICAgfHwgdG9TKHgpID09PSAnW29iamVjdCBBcmd1bWVudHNdJykge1xuICAgICAgICAgICAgICAgIGlmICh0b1MoeCkgIT09IHRvUyh5KSkge1xuICAgICAgICAgICAgICAgICAgICBub3RFcXVhbCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHggaW5zdGFuY2VvZiBEYXRlIHx8IHkgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCEoeCBpbnN0YW5jZW9mIERhdGUpIHx8ICEoeSBpbnN0YW5jZW9mIERhdGUpXG4gICAgICAgICAgICAgICAgfHwgeC5nZXRUaW1lKCkgIT09IHkuZ2V0VGltZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vdEVxdWFsKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIGt4ID0gT2JqZWN0LmtleXMoeCk7XG4gICAgICAgICAgICAgICAgdmFyIGt5ID0gT2JqZWN0LmtleXMoeSk7XG4gICAgICAgICAgICAgICAgaWYgKGt4Lmxlbmd0aCAhPT0ga3kubGVuZ3RoKSByZXR1cm4gbm90RXF1YWwoKTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGt4Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBrID0ga3hbaV07XG4gICAgICAgICAgICAgICAgICAgIGlmICghT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwoeSwgaykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdEVxdWFsKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBcbiAgICByZXR1cm4gZXF1YWw7XG59O1xuXG5UcmF2ZXJzZS5wcm90b3R5cGUucGF0aHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGFjYyA9IFtdO1xuICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbiAoeCkge1xuICAgICAgICBhY2MucHVzaCh0aGlzLnBhdGgpOyBcbiAgICB9KTtcbiAgICByZXR1cm4gYWNjO1xufTtcblxuVHJhdmVyc2UucHJvdG90eXBlLm5vZGVzID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBhY2MgPSBbXTtcbiAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgYWNjLnB1c2godGhpcy5ub2RlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gYWNjO1xufTtcblxuVHJhdmVyc2UucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwYXJlbnRzID0gW10sIG5vZGVzID0gW107XG4gICAgXG4gICAgcmV0dXJuIChmdW5jdGlvbiBjbG9uZSAoc3JjKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHBhcmVudHNbaV0gPT09IHNyYykge1xuICAgICAgICAgICAgICAgIHJldHVybiBub2Rlc1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiBzcmMgPT09ICdvYmplY3QnICYmIHNyYyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIGRzdCA9IGNvcHkoc3JjKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcGFyZW50cy5wdXNoKHNyYyk7XG4gICAgICAgICAgICBub2Rlcy5wdXNoKGRzdCk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHNyYykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgZHN0W2tleV0gPSBjbG9uZShzcmNba2V5XSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcGFyZW50cy5wb3AoKTtcbiAgICAgICAgICAgIG5vZGVzLnBvcCgpO1xuICAgICAgICAgICAgcmV0dXJuIGRzdDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBzcmM7XG4gICAgICAgIH1cbiAgICB9KSh0aGlzLnZhbHVlKTtcbn07XG5cbmZ1bmN0aW9uIHdhbGsgKHJvb3QsIGNiLCBpbW11dGFibGUpIHtcbiAgICB2YXIgcGF0aCA9IFtdO1xuICAgIHZhciBwYXJlbnRzID0gW107XG4gICAgdmFyIGFsaXZlID0gdHJ1ZTtcbiAgICBcbiAgICByZXR1cm4gKGZ1bmN0aW9uIHdhbGtlciAobm9kZV8pIHtcbiAgICAgICAgdmFyIG5vZGUgPSBpbW11dGFibGUgPyBjb3B5KG5vZGVfKSA6IG5vZGVfO1xuICAgICAgICB2YXIgbW9kaWZpZXJzID0ge307XG4gICAgICAgIFxuICAgICAgICB2YXIgc3RhdGUgPSB7XG4gICAgICAgICAgICBub2RlIDogbm9kZSxcbiAgICAgICAgICAgIG5vZGVfIDogbm9kZV8sXG4gICAgICAgICAgICBwYXRoIDogW10uY29uY2F0KHBhdGgpLFxuICAgICAgICAgICAgcGFyZW50IDogcGFyZW50cy5zbGljZSgtMSlbMF0sXG4gICAgICAgICAgICBrZXkgOiBwYXRoLnNsaWNlKC0xKVswXSxcbiAgICAgICAgICAgIGlzUm9vdCA6IHBhdGgubGVuZ3RoID09PSAwLFxuICAgICAgICAgICAgbGV2ZWwgOiBwYXRoLmxlbmd0aCxcbiAgICAgICAgICAgIGNpcmN1bGFyIDogbnVsbCxcbiAgICAgICAgICAgIHVwZGF0ZSA6IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFzdGF0ZS5pc1Jvb3QpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUucGFyZW50Lm5vZGVbc3RhdGUua2V5XSA9IHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHN0YXRlLm5vZGUgPSB4O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdkZWxldGUnIDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBzdGF0ZS5wYXJlbnQubm9kZVtzdGF0ZS5rZXldO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlbW92ZSA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzdGF0ZS5wYXJlbnQubm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUucGFyZW50Lm5vZGUuc3BsaWNlKHN0YXRlLmtleSwgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgc3RhdGUucGFyZW50Lm5vZGVbc3RhdGUua2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmVmb3JlIDogZnVuY3Rpb24gKGYpIHsgbW9kaWZpZXJzLmJlZm9yZSA9IGYgfSxcbiAgICAgICAgICAgIGFmdGVyIDogZnVuY3Rpb24gKGYpIHsgbW9kaWZpZXJzLmFmdGVyID0gZiB9LFxuICAgICAgICAgICAgcHJlIDogZnVuY3Rpb24gKGYpIHsgbW9kaWZpZXJzLnByZSA9IGYgfSxcbiAgICAgICAgICAgIHBvc3QgOiBmdW5jdGlvbiAoZikgeyBtb2RpZmllcnMucG9zdCA9IGYgfSxcbiAgICAgICAgICAgIHN0b3AgOiBmdW5jdGlvbiAoKSB7IGFsaXZlID0gZmFsc2UgfVxuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgaWYgKCFhbGl2ZSkgcmV0dXJuIHN0YXRlO1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiBub2RlID09PSAnb2JqZWN0JyAmJiBub2RlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzdGF0ZS5pc0xlYWYgPSBPYmplY3Qua2V5cyhub2RlKS5sZW5ndGggPT0gMDtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJlbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudHNbaV0ubm9kZV8gPT09IG5vZGVfKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmNpcmN1bGFyID0gcGFyZW50c1tpXTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc3RhdGUuaXNMZWFmID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgc3RhdGUubm90TGVhZiA9ICFzdGF0ZS5pc0xlYWY7XG4gICAgICAgIHN0YXRlLm5vdFJvb3QgPSAhc3RhdGUuaXNSb290O1xuICAgICAgICBcbiAgICAgICAgLy8gdXNlIHJldHVybiB2YWx1ZXMgdG8gdXBkYXRlIGlmIGRlZmluZWRcbiAgICAgICAgdmFyIHJldCA9IGNiLmNhbGwoc3RhdGUsIHN0YXRlLm5vZGUpO1xuICAgICAgICBpZiAocmV0ICE9PSB1bmRlZmluZWQgJiYgc3RhdGUudXBkYXRlKSBzdGF0ZS51cGRhdGUocmV0KTtcbiAgICAgICAgaWYgKG1vZGlmaWVycy5iZWZvcmUpIG1vZGlmaWVycy5iZWZvcmUuY2FsbChzdGF0ZSwgc3RhdGUubm9kZSk7XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHN0YXRlLm5vZGUgPT0gJ29iamVjdCdcbiAgICAgICAgJiYgc3RhdGUubm9kZSAhPT0gbnVsbCAmJiAhc3RhdGUuY2lyY3VsYXIpIHtcbiAgICAgICAgICAgIHBhcmVudHMucHVzaChzdGF0ZSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoc3RhdGUubm9kZSk7XG4gICAgICAgICAgICBrZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSwgaSkge1xuICAgICAgICAgICAgICAgIHBhdGgucHVzaChrZXkpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGlmIChtb2RpZmllcnMucHJlKSBtb2RpZmllcnMucHJlLmNhbGwoc3RhdGUsIHN0YXRlLm5vZGVba2V5XSwga2V5KTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSB3YWxrZXIoc3RhdGUubm9kZVtrZXldKTtcbiAgICAgICAgICAgICAgICBpZiAoaW1tdXRhYmxlICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHN0YXRlLm5vZGUsIGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUubm9kZVtrZXldID0gY2hpbGQubm9kZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgY2hpbGQuaXNMYXN0ID0gaSA9PSBrZXlzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgY2hpbGQuaXNGaXJzdCA9IGkgPT0gMDtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBpZiAobW9kaWZpZXJzLnBvc3QpIG1vZGlmaWVycy5wb3N0LmNhbGwoc3RhdGUsIGNoaWxkKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBwYXRoLnBvcCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwYXJlbnRzLnBvcCgpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBpZiAobW9kaWZpZXJzLmFmdGVyKSBtb2RpZmllcnMuYWZ0ZXIuY2FsbChzdGF0ZSwgc3RhdGUubm9kZSk7XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgfSkocm9vdCkubm9kZTtcbn1cblxuT2JqZWN0LmtleXMoVHJhdmVyc2UucHJvdG90eXBlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICBUcmF2ZXJzZVtrZXldID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICB2YXIgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgdmFyIHQgPSBUcmF2ZXJzZShvYmopO1xuICAgICAgICByZXR1cm4gdFtrZXldLmFwcGx5KHQsIGFyZ3MpO1xuICAgIH07XG59KTtcblxuZnVuY3Rpb24gY29weSAoc3JjKSB7XG4gICAgaWYgKHR5cGVvZiBzcmMgPT09ICdvYmplY3QnICYmIHNyYyAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgZHN0O1xuICAgICAgICBcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc3JjKSkge1xuICAgICAgICAgICAgZHN0ID0gW107XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc3JjIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgICAgZHN0ID0gbmV3IERhdGUoc3JjKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzcmMgaW5zdGFuY2VvZiBCb29sZWFuKSB7XG4gICAgICAgICAgICBkc3QgPSBuZXcgQm9vbGVhbihzcmMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNyYyBpbnN0YW5jZW9mIE51bWJlcikge1xuICAgICAgICAgICAgZHN0ID0gbmV3IE51bWJlcihzcmMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNyYyBpbnN0YW5jZW9mIFN0cmluZykge1xuICAgICAgICAgICAgZHN0ID0gbmV3IFN0cmluZyhzcmMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZHN0ID0gT2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2Yoc3JjKSk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIE9iamVjdC5rZXlzKHNyYykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBkc3Rba2V5XSA9IHNyY1trZXldO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGRzdDtcbiAgICB9XG4gICAgZWxzZSByZXR1cm4gc3JjO1xufVxuIiwKICAgICJ2YXIgVHJhdmVyc2UgPSByZXF1aXJlKCd0cmF2ZXJzZScpO1xudmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50cycpLkV2ZW50RW1pdHRlcjtcblxubW9kdWxlLmV4cG9ydHMgPSBDaGFpbnNhdztcbmZ1bmN0aW9uIENoYWluc2F3IChidWlsZGVyKSB7XG4gICAgdmFyIHNhdyA9IENoYWluc2F3LnNhdyhidWlsZGVyLCB7fSk7XG4gICAgdmFyIHIgPSBidWlsZGVyLmNhbGwoc2F3LmhhbmRsZXJzLCBzYXcpO1xuICAgIGlmIChyICE9PSB1bmRlZmluZWQpIHNhdy5oYW5kbGVycyA9IHI7XG4gICAgc2F3LnJlY29yZCgpO1xuICAgIHJldHVybiBzYXcuY2hhaW4oKTtcbn07XG5cbkNoYWluc2F3LmxpZ2h0ID0gZnVuY3Rpb24gQ2hhaW5zYXdMaWdodCAoYnVpbGRlcikge1xuICAgIHZhciBzYXcgPSBDaGFpbnNhdy5zYXcoYnVpbGRlciwge30pO1xuICAgIHZhciByID0gYnVpbGRlci5jYWxsKHNhdy5oYW5kbGVycywgc2F3KTtcbiAgICBpZiAociAhPT0gdW5kZWZpbmVkKSBzYXcuaGFuZGxlcnMgPSByO1xuICAgIHJldHVybiBzYXcuY2hhaW4oKTtcbn07XG5cbkNoYWluc2F3LnNhdyA9IGZ1bmN0aW9uIChidWlsZGVyLCBoYW5kbGVycykge1xuICAgIHZhciBzYXcgPSBuZXcgRXZlbnRFbWl0dGVyO1xuICAgIHNhdy5oYW5kbGVycyA9IGhhbmRsZXJzO1xuICAgIHNhdy5hY3Rpb25zID0gW107XG5cbiAgICBzYXcuY2hhaW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBjaCA9IFRyYXZlcnNlKHNhdy5oYW5kbGVycykubWFwKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1Jvb3QpIHJldHVybiBub2RlO1xuICAgICAgICAgICAgdmFyIHBzID0gdGhpcy5wYXRoO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIG5vZGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHNhdy5hY3Rpb25zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCA6IHBzLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA6IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHNhdy5lbWl0KCdiZWdpbicpO1xuICAgICAgICAgICAgc2F3Lm5leHQoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGNoO1xuICAgIH07XG5cbiAgICBzYXcucG9wID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gc2F3LmFjdGlvbnMuc2hpZnQoKTtcbiAgICB9O1xuXG4gICAgc2F3Lm5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhY3Rpb24gPSBzYXcucG9wKCk7XG5cbiAgICAgICAgaWYgKCFhY3Rpb24pIHtcbiAgICAgICAgICAgIHNhdy5lbWl0KCdlbmQnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghYWN0aW9uLnRyYXApIHtcbiAgICAgICAgICAgIHZhciBub2RlID0gc2F3LmhhbmRsZXJzO1xuICAgICAgICAgICAgYWN0aW9uLnBhdGguZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IG5vZGUgPSBub2RlW2tleV0gfSk7XG4gICAgICAgICAgICBub2RlLmFwcGx5KHNhdy5oYW5kbGVycywgYWN0aW9uLmFyZ3MpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHNhdy5uZXN0ID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICB2YXIgYXV0b25leHQgPSB0cnVlO1xuXG4gICAgICAgIGlmICh0eXBlb2YgY2IgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgdmFyIGF1dG9uZXh0ID0gY2I7XG4gICAgICAgICAgICBjYiA9IGFyZ3Muc2hpZnQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzID0gQ2hhaW5zYXcuc2F3KGJ1aWxkZXIsIHt9KTtcbiAgICAgICAgdmFyIHIgPSBidWlsZGVyLmNhbGwocy5oYW5kbGVycywgcyk7XG5cbiAgICAgICAgaWYgKHIgIT09IHVuZGVmaW5lZCkgcy5oYW5kbGVycyA9IHI7XG5cbiAgICAgICAgLy8gSWYgd2UgYXJlIHJlY29yZGluZy4uLlxuICAgICAgICBpZiAoXCJ1bmRlZmluZWRcIiAhPT0gdHlwZW9mIHNhdy5zdGVwKSB7XG4gICAgICAgICAgICAvLyAuLi4gb3VyIGNoaWxkcmVuIHNob3VsZCwgdG9vXG4gICAgICAgICAgICBzLnJlY29yZCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2IuYXBwbHkocy5jaGFpbigpLCBhcmdzKTtcbiAgICAgICAgaWYgKGF1dG9uZXh0ICE9PSBmYWxzZSkgcy5vbignZW5kJywgc2F3Lm5leHQpO1xuICAgIH07XG5cbiAgICBzYXcucmVjb3JkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB1cGdyYWRlQ2hhaW5zYXcoc2F3KTtcbiAgICB9O1xuXG4gICAgWyd0cmFwJywgJ2Rvd24nLCAnanVtcCddLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCkge1xuICAgICAgICBzYXdbbWV0aG9kXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRvIHVzZSB0aGUgdHJhcCwgZG93biBhbmQganVtcCBmZWF0dXJlcywgcGxlYXNlIFwiK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY2FsbCByZWNvcmQoKSBmaXJzdCB0byBzdGFydCByZWNvcmRpbmcgYWN0aW9ucy5cIik7XG4gICAgICAgIH07XG4gICAgfSk7XG5cbiAgICByZXR1cm4gc2F3O1xufTtcblxuZnVuY3Rpb24gdXBncmFkZUNoYWluc2F3KHNhdykge1xuICAgIHNhdy5zdGVwID0gMDtcblxuICAgIC8vIG92ZXJyaWRlIHBvcFxuICAgIHNhdy5wb3AgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBzYXcuYWN0aW9uc1tzYXcuc3RlcCsrXTtcbiAgICB9O1xuXG4gICAgc2F3LnRyYXAgPSBmdW5jdGlvbiAobmFtZSwgY2IpIHtcbiAgICAgICAgdmFyIHBzID0gQXJyYXkuaXNBcnJheShuYW1lKSA/IG5hbWUgOiBbbmFtZV07XG4gICAgICAgIHNhdy5hY3Rpb25zLnB1c2goe1xuICAgICAgICAgICAgcGF0aCA6IHBzLFxuICAgICAgICAgICAgc3RlcCA6IHNhdy5zdGVwLFxuICAgICAgICAgICAgY2IgOiBjYixcbiAgICAgICAgICAgIHRyYXAgOiB0cnVlXG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBzYXcuZG93biA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIHZhciBwcyA9IChBcnJheS5pc0FycmF5KG5hbWUpID8gbmFtZSA6IFtuYW1lXSkuam9pbignLycpO1xuICAgICAgICB2YXIgaSA9IHNhdy5hY3Rpb25zLnNsaWNlKHNhdy5zdGVwKS5tYXAoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIGlmICh4LnRyYXAgJiYgeC5zdGVwIDw9IHNhdy5zdGVwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm4geC5wYXRoLmpvaW4oJy8nKSA9PSBwcztcbiAgICAgICAgfSkuaW5kZXhPZih0cnVlKTtcblxuICAgICAgICBpZiAoaSA+PSAwKSBzYXcuc3RlcCArPSBpO1xuICAgICAgICBlbHNlIHNhdy5zdGVwID0gc2F3LmFjdGlvbnMubGVuZ3RoO1xuXG4gICAgICAgIHZhciBhY3QgPSBzYXcuYWN0aW9uc1tzYXcuc3RlcCAtIDFdO1xuICAgICAgICBpZiAoYWN0ICYmIGFjdC50cmFwKSB7XG4gICAgICAgICAgICAvLyBJdCdzIGEgdHJhcCFcbiAgICAgICAgICAgIHNhdy5zdGVwID0gYWN0LnN0ZXA7XG4gICAgICAgICAgICBhY3QuY2IoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHNhdy5uZXh0KCk7XG4gICAgfTtcblxuICAgIHNhdy5qdW1wID0gZnVuY3Rpb24gKHN0ZXApIHtcbiAgICAgICAgc2F3LnN0ZXAgPSBzdGVwO1xuICAgICAgICBzYXcubmV4dCgpO1xuICAgIH07XG59O1xuIiwKICAgICJtb2R1bGUuZXhwb3J0cyA9IEJ1ZmZlcnM7XG5cbmZ1bmN0aW9uIEJ1ZmZlcnMgKGJ1ZnMpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQnVmZmVycykpIHJldHVybiBuZXcgQnVmZmVycyhidWZzKTtcbiAgICB0aGlzLmJ1ZmZlcnMgPSBidWZzIHx8IFtdO1xuICAgIHRoaXMubGVuZ3RoID0gdGhpcy5idWZmZXJzLnJlZHVjZShmdW5jdGlvbiAoc2l6ZSwgYnVmKSB7XG4gICAgICAgIHJldHVybiBzaXplICsgYnVmLmxlbmd0aFxuICAgIH0sIDApO1xufVxuXG5CdWZmZXJzLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKGFyZ3VtZW50c1tpXSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RyaWVkIHRvIHB1c2ggYSBub24tYnVmZmVyJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGJ1ZiA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgdGhpcy5idWZmZXJzLnB1c2goYnVmKTtcbiAgICAgICAgdGhpcy5sZW5ndGggKz0gYnVmLmxlbmd0aDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubGVuZ3RoO1xufTtcblxuQnVmZmVycy5wcm90b3R5cGUudW5zaGlmdCA9IGZ1bmN0aW9uICgpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihhcmd1bWVudHNbaV0pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUcmllZCB0byB1bnNoaWZ0IGEgbm9uLWJ1ZmZlcicpO1xuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBidWYgPSBhcmd1bWVudHNbaV07XG4gICAgICAgIHRoaXMuYnVmZmVycy51bnNoaWZ0KGJ1Zik7XG4gICAgICAgIHRoaXMubGVuZ3RoICs9IGJ1Zi5sZW5ndGg7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmxlbmd0aDtcbn07XG5cbkJ1ZmZlcnMucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiAoZHN0LCBkU3RhcnQsIHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gdGhpcy5zbGljZShzdGFydCwgZW5kKS5jb3B5KGRzdCwgZFN0YXJ0LCAwLCBlbmQgLSBzdGFydCk7XG59O1xuXG5CdWZmZXJzLnByb3RvdHlwZS5zcGxpY2UgPSBmdW5jdGlvbiAoaSwgaG93TWFueSkge1xuICAgIHZhciBidWZmZXJzID0gdGhpcy5idWZmZXJzO1xuICAgIHZhciBpbmRleCA9IGkgPj0gMCA/IGkgOiB0aGlzLmxlbmd0aCAtIGk7XG4gICAgdmFyIHJlcHMgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMik7XG4gICAgXG4gICAgaWYgKGhvd01hbnkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBob3dNYW55ID0gdGhpcy5sZW5ndGggLSBpbmRleDtcbiAgICB9XG4gICAgZWxzZSBpZiAoaG93TWFueSA+IHRoaXMubGVuZ3RoIC0gaW5kZXgpIHtcbiAgICAgICAgaG93TWFueSA9IHRoaXMubGVuZ3RoIC0gaW5kZXg7XG4gICAgfVxuICAgIFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVwcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB0aGlzLmxlbmd0aCArPSByZXBzW2ldLmxlbmd0aDtcbiAgICB9XG4gICAgXG4gICAgdmFyIHJlbW92ZWQgPSBuZXcgQnVmZmVycygpO1xuICAgIHZhciBieXRlcyA9IDA7XG4gICAgXG4gICAgdmFyIHN0YXJ0Qnl0ZXMgPSAwO1xuICAgIGZvciAoXG4gICAgICAgIHZhciBpaSA9IDA7XG4gICAgICAgIGlpIDwgYnVmZmVycy5sZW5ndGggJiYgc3RhcnRCeXRlcyArIGJ1ZmZlcnNbaWldLmxlbmd0aCA8IGluZGV4O1xuICAgICAgICBpaSArK1xuICAgICkgeyBzdGFydEJ5dGVzICs9IGJ1ZmZlcnNbaWldLmxlbmd0aCB9XG4gICAgXG4gICAgaWYgKGluZGV4IC0gc3RhcnRCeXRlcyA+IDApIHtcbiAgICAgICAgdmFyIHN0YXJ0ID0gaW5kZXggLSBzdGFydEJ5dGVzO1xuICAgICAgICBcbiAgICAgICAgaWYgKHN0YXJ0ICsgaG93TWFueSA8IGJ1ZmZlcnNbaWldLmxlbmd0aCkge1xuICAgICAgICAgICAgcmVtb3ZlZC5wdXNoKGJ1ZmZlcnNbaWldLnNsaWNlKHN0YXJ0LCBzdGFydCArIGhvd01hbnkpKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIG9yaWcgPSBidWZmZXJzW2lpXTtcbiAgICAgICAgICAgIC8vdmFyIGJ1ZiA9IG5ldyBCdWZmZXIob3JpZy5sZW5ndGggLSBob3dNYW55KTtcbiAgICAgICAgICAgIHZhciBidWYwID0gbmV3IEJ1ZmZlcihzdGFydCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YXJ0OyBpKyspIHtcbiAgICAgICAgICAgICAgICBidWYwW2ldID0gb3JpZ1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIGJ1ZjEgPSBuZXcgQnVmZmVyKG9yaWcubGVuZ3RoIC0gc3RhcnQgLSBob3dNYW55KTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSBzdGFydCArIGhvd01hbnk7IGkgPCBvcmlnLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgYnVmMVsgaSAtIGhvd01hbnkgLSBzdGFydCBdID0gb3JpZ1tpXVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAocmVwcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlcHNfID0gcmVwcy5zbGljZSgpO1xuICAgICAgICAgICAgICAgIHJlcHNfLnVuc2hpZnQoYnVmMCk7XG4gICAgICAgICAgICAgICAgcmVwc18ucHVzaChidWYxKTtcbiAgICAgICAgICAgICAgICBidWZmZXJzLnNwbGljZS5hcHBseShidWZmZXJzLCBbIGlpLCAxIF0uY29uY2F0KHJlcHNfKSk7XG4gICAgICAgICAgICAgICAgaWkgKz0gcmVwc18ubGVuZ3RoO1xuICAgICAgICAgICAgICAgIHJlcHMgPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGJ1ZmZlcnMuc3BsaWNlKGlpLCAxLCBidWYwLCBidWYxKTtcbiAgICAgICAgICAgICAgICAvL2J1ZmZlcnNbaWldID0gYnVmO1xuICAgICAgICAgICAgICAgIGlpICs9IDI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZW1vdmVkLnB1c2goYnVmZmVyc1tpaV0uc2xpY2Uoc3RhcnQpKTtcbiAgICAgICAgICAgIGJ1ZmZlcnNbaWldID0gYnVmZmVyc1tpaV0uc2xpY2UoMCwgc3RhcnQpO1xuICAgICAgICAgICAgaWkgKys7XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgaWYgKHJlcHMubGVuZ3RoID4gMCkge1xuICAgICAgICBidWZmZXJzLnNwbGljZS5hcHBseShidWZmZXJzLCBbIGlpLCAwIF0uY29uY2F0KHJlcHMpKTtcbiAgICAgICAgaWkgKz0gcmVwcy5sZW5ndGg7XG4gICAgfVxuICAgIFxuICAgIHdoaWxlIChyZW1vdmVkLmxlbmd0aCA8IGhvd01hbnkpIHtcbiAgICAgICAgdmFyIGJ1ZiA9IGJ1ZmZlcnNbaWldO1xuICAgICAgICB2YXIgbGVuID0gYnVmLmxlbmd0aDtcbiAgICAgICAgdmFyIHRha2UgPSBNYXRoLm1pbihsZW4sIGhvd01hbnkgLSByZW1vdmVkLmxlbmd0aCk7XG4gICAgICAgIFxuICAgICAgICBpZiAodGFrZSA9PT0gbGVuKSB7XG4gICAgICAgICAgICByZW1vdmVkLnB1c2goYnVmKTtcbiAgICAgICAgICAgIGJ1ZmZlcnMuc3BsaWNlKGlpLCAxKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlbW92ZWQucHVzaChidWYuc2xpY2UoMCwgdGFrZSkpO1xuICAgICAgICAgICAgYnVmZmVyc1tpaV0gPSBidWZmZXJzW2lpXS5zbGljZSh0YWtlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBcbiAgICB0aGlzLmxlbmd0aCAtPSByZW1vdmVkLmxlbmd0aDtcbiAgICBcbiAgICByZXR1cm4gcmVtb3ZlZDtcbn07XG4gXG5CdWZmZXJzLnByb3RvdHlwZS5zbGljZSA9IGZ1bmN0aW9uIChpLCBqKSB7XG4gICAgdmFyIGJ1ZmZlcnMgPSB0aGlzLmJ1ZmZlcnM7XG4gICAgaWYgKGogPT09IHVuZGVmaW5lZCkgaiA9IHRoaXMubGVuZ3RoO1xuICAgIGlmIChpID09PSB1bmRlZmluZWQpIGkgPSAwO1xuICAgIFxuICAgIGlmIChqID4gdGhpcy5sZW5ndGgpIGogPSB0aGlzLmxlbmd0aDtcbiAgICBcbiAgICB2YXIgc3RhcnRCeXRlcyA9IDA7XG4gICAgZm9yIChcbiAgICAgICAgdmFyIHNpID0gMDtcbiAgICAgICAgc2kgPCBidWZmZXJzLmxlbmd0aCAmJiBzdGFydEJ5dGVzICsgYnVmZmVyc1tzaV0ubGVuZ3RoIDw9IGk7XG4gICAgICAgIHNpICsrXG4gICAgKSB7IHN0YXJ0Qnl0ZXMgKz0gYnVmZmVyc1tzaV0ubGVuZ3RoIH1cbiAgICBcbiAgICB2YXIgdGFyZ2V0ID0gbmV3IEJ1ZmZlcihqIC0gaSk7XG4gICAgXG4gICAgdmFyIHRpID0gMDtcbiAgICBmb3IgKHZhciBpaSA9IHNpOyB0aSA8IGogLSBpICYmIGlpIDwgYnVmZmVycy5sZW5ndGg7IGlpKyspIHtcbiAgICAgICAgdmFyIGxlbiA9IGJ1ZmZlcnNbaWldLmxlbmd0aDtcbiAgICAgICAgXG4gICAgICAgIHZhciBzdGFydCA9IHRpID09PSAwID8gaSAtIHN0YXJ0Qnl0ZXMgOiAwO1xuICAgICAgICB2YXIgZW5kID0gdGkgKyBsZW4gPj0gaiAtIGlcbiAgICAgICAgICAgID8gTWF0aC5taW4oc3RhcnQgKyAoaiAtIGkpIC0gdGksIGxlbilcbiAgICAgICAgICAgIDogbGVuXG4gICAgICAgIDtcbiAgICAgICAgXG4gICAgICAgIGJ1ZmZlcnNbaWldLmNvcHkodGFyZ2V0LCB0aSwgc3RhcnQsIGVuZCk7XG4gICAgICAgIHRpICs9IGVuZCAtIHN0YXJ0O1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gdGFyZ2V0O1xufTtcblxuQnVmZmVycy5wcm90b3R5cGUucG9zID0gZnVuY3Rpb24gKGkpIHtcbiAgICBpZiAoaSA8IDAgfHwgaSA+PSB0aGlzLmxlbmd0aCkgdGhyb3cgbmV3IEVycm9yKCdvb2InKTtcbiAgICB2YXIgbCA9IGksIGJpID0gMCwgYnUgPSBudWxsO1xuICAgIGZvciAoOzspIHtcbiAgICAgICAgYnUgPSB0aGlzLmJ1ZmZlcnNbYmldO1xuICAgICAgICBpZiAobCA8IGJ1Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHtidWY6IGJpLCBvZmZzZXQ6IGx9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbCAtPSBidS5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgYmkrKztcbiAgICB9XG59O1xuXG5CdWZmZXJzLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiBnZXQgKGkpIHtcbiAgICB2YXIgcG9zID0gdGhpcy5wb3MoaSk7XG5cbiAgICByZXR1cm4gdGhpcy5idWZmZXJzW3Bvcy5idWZdLmdldChwb3Mub2Zmc2V0KTtcbn07XG5cbkJ1ZmZlcnMucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIHNldCAoaSwgYikge1xuICAgIHZhciBwb3MgPSB0aGlzLnBvcyhpKTtcblxuICAgIHJldHVybiB0aGlzLmJ1ZmZlcnNbcG9zLmJ1Zl0uc2V0KHBvcy5vZmZzZXQsIGIpO1xufTtcblxuQnVmZmVycy5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uIChuZWVkbGUsIG9mZnNldCkge1xuICAgIGlmIChcInN0cmluZ1wiID09PSB0eXBlb2YgbmVlZGxlKSB7XG4gICAgICAgIG5lZWRsZSA9IG5ldyBCdWZmZXIobmVlZGxlKTtcbiAgICB9IGVsc2UgaWYgKG5lZWRsZSBpbnN0YW5jZW9mIEJ1ZmZlcikge1xuICAgICAgICAvLyBhbHJlYWR5IGEgYnVmZmVyXG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHR5cGUgZm9yIGEgc2VhcmNoIHN0cmluZycpO1xuICAgIH1cblxuICAgIGlmICghbmVlZGxlLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICB2YXIgaSA9IDAsIGogPSAwLCBtYXRjaCA9IDAsIG1zdGFydCwgcG9zID0gMDtcblxuICAgIC8vIHN0YXJ0IHNlYXJjaCBmcm9tIGEgcGFydGljdWxhciBwb2ludCBpbiB0aGUgdmlydHVhbCBidWZmZXJcbiAgICBpZiAob2Zmc2V0KSB7XG4gICAgICAgIHZhciBwID0gdGhpcy5wb3Mob2Zmc2V0KTtcbiAgICAgICAgaSA9IHAuYnVmO1xuICAgICAgICBqID0gcC5vZmZzZXQ7XG4gICAgICAgIHBvcyA9IG9mZnNldDtcbiAgICB9XG5cbiAgICAvLyBmb3IgZWFjaCBjaGFyYWN0ZXIgaW4gdmlydHVhbCBidWZmZXJcbiAgICBmb3IgKDs7KSB7XG4gICAgICAgIHdoaWxlIChqID49IHRoaXMuYnVmZmVyc1tpXS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGogPSAwO1xuICAgICAgICAgICAgaSsrO1xuXG4gICAgICAgICAgICBpZiAoaSA+PSB0aGlzLmJ1ZmZlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgLy8gc2VhcmNoIHN0cmluZyBub3QgZm91bmRcbiAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY2hhciA9IHRoaXMuYnVmZmVyc1tpXVtqXTtcblxuICAgICAgICBpZiAoY2hhciA9PSBuZWVkbGVbbWF0Y2hdKSB7XG4gICAgICAgICAgICAvLyBrZWVwIHRyYWNrIHdoZXJlIG1hdGNoIHN0YXJ0ZWRcbiAgICAgICAgICAgIGlmIChtYXRjaCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgbXN0YXJ0ID0ge1xuICAgICAgICAgICAgICAgICAgICBpOiBpLFxuICAgICAgICAgICAgICAgICAgICBqOiBqLFxuICAgICAgICAgICAgICAgICAgICBwb3M6IHBvc1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBtYXRjaCsrO1xuICAgICAgICAgICAgaWYgKG1hdGNoID09IG5lZWRsZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAvLyBmdWxsIG1hdGNoXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1zdGFydC5wb3M7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAobWF0Y2ggIT0gMCkge1xuICAgICAgICAgICAgLy8gYSBwYXJ0aWFsIG1hdGNoIGVuZGVkLCBnbyBiYWNrIHRvIG1hdGNoIHN0YXJ0aW5nIHBvc2l0aW9uXG4gICAgICAgICAgICAvLyB0aGlzIHdpbGwgY29udGludWUgdGhlIHNlYXJjaCBhdCB0aGUgbmV4dCBjaGFyYWN0ZXJcbiAgICAgICAgICAgIGkgPSBtc3RhcnQuaTtcbiAgICAgICAgICAgIGogPSBtc3RhcnQuajtcbiAgICAgICAgICAgIHBvcyA9IG1zdGFydC5wb3M7XG4gICAgICAgICAgICBtYXRjaCA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBqKys7XG4gICAgICAgIHBvcysrO1xuICAgIH1cbn07XG5cbkJ1ZmZlcnMucHJvdG90eXBlLnRvQnVmZmVyID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuc2xpY2UoKTtcbn1cblxuQnVmZmVycy5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbihlbmNvZGluZywgc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiB0aGlzLnNsaWNlKHN0YXJ0LCBlbmQpLnRvU3RyaW5nKGVuY29kaW5nKTtcbn1cbiIsCiAgICAibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc3RvcmUpIHtcbiAgICBmdW5jdGlvbiBnZXRzZXQgKG5hbWUsIHZhbHVlKSB7XG4gICAgICAgIHZhciBub2RlID0gdmFycy5zdG9yZTtcbiAgICAgICAgdmFyIGtleXMgPSBuYW1lLnNwbGl0KCcuJyk7XG4gICAgICAgIGtleXMuc2xpY2UoMCwtMSkuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgICAgICAgICAgaWYgKG5vZGVba10gPT09IHVuZGVmaW5lZCkgbm9kZVtrXSA9IHt9O1xuICAgICAgICAgICAgbm9kZSA9IG5vZGVba11cbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzW2tleXMubGVuZ3RoIC0gMV07XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBub2RlW2tleV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbm9kZVtrZXldID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgdmFyIHZhcnMgPSB7XG4gICAgICAgIGdldCA6IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0c2V0KG5hbWUpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQgOiBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRzZXQobmFtZSwgdmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBzdG9yZSA6IHN0b3JlIHx8IHt9LFxuICAgIH07XG4gICAgcmV0dXJuIHZhcnM7XG59O1xuIiwKICAgICJ2YXIgQ2hhaW5zYXcgPSByZXF1aXJlKCdjaGFpbnNhdycpO1xudmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50cycpLkV2ZW50RW1pdHRlcjtcbnZhciBCdWZmZXJzID0gcmVxdWlyZSgnYnVmZmVycycpO1xudmFyIFZhcnMgPSByZXF1aXJlKCcuL2xpYi92YXJzLmpzJyk7XG52YXIgU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJykuU3RyZWFtO1xuXG5leHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYnVmT3JFbSwgZXZlbnROYW1lKSB7XG4gICAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihidWZPckVtKSkge1xuICAgICAgICByZXR1cm4gZXhwb3J0cy5wYXJzZShidWZPckVtKTtcbiAgICB9XG4gICAgXG4gICAgdmFyIHMgPSBleHBvcnRzLnN0cmVhbSgpO1xuICAgIGlmIChidWZPckVtICYmIGJ1Zk9yRW0ucGlwZSkge1xuICAgICAgICBidWZPckVtLnBpcGUocyk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGJ1Zk9yRW0pIHtcbiAgICAgICAgYnVmT3JFbS5vbihldmVudE5hbWUgfHwgJ2RhdGEnLCBmdW5jdGlvbiAoYnVmKSB7XG4gICAgICAgICAgICBzLndyaXRlKGJ1Zik7XG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgYnVmT3JFbS5vbignZW5kJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcy5lbmQoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBzO1xufTtcblxuZXhwb3J0cy5zdHJlYW0gPSBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICBpZiAoaW5wdXQpIHJldHVybiBleHBvcnRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgXG4gICAgdmFyIHBlbmRpbmcgPSBudWxsO1xuICAgIGZ1bmN0aW9uIGdldEJ5dGVzIChieXRlcywgY2IsIHNraXApIHtcbiAgICAgICAgcGVuZGluZyA9IHtcbiAgICAgICAgICAgIGJ5dGVzIDogYnl0ZXMsXG4gICAgICAgICAgICBza2lwIDogc2tpcCxcbiAgICAgICAgICAgIGNiIDogZnVuY3Rpb24gKGJ1Zikge1xuICAgICAgICAgICAgICAgIHBlbmRpbmcgPSBudWxsO1xuICAgICAgICAgICAgICAgIGNiKGJ1Zik7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBkaXNwYXRjaCgpO1xuICAgIH1cbiAgICBcbiAgICB2YXIgb2Zmc2V0ID0gbnVsbDtcbiAgICBmdW5jdGlvbiBkaXNwYXRjaCAoKSB7XG4gICAgICAgIGlmICghcGVuZGluZykge1xuICAgICAgICAgICAgaWYgKGNhdWdodEVuZCkgZG9uZSA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBwZW5kaW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBwZW5kaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgYnl0ZXMgPSBvZmZzZXQgKyBwZW5kaW5nLmJ5dGVzO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAoYnVmZmVycy5sZW5ndGggPj0gYnl0ZXMpIHtcbiAgICAgICAgICAgICAgICB2YXIgYnVmO1xuICAgICAgICAgICAgICAgIGlmIChvZmZzZXQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBidWYgPSBidWZmZXJzLnNwbGljZSgwLCBieXRlcyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcGVuZGluZy5za2lwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBidWYgPSBidWYuc2xpY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwZW5kaW5nLnNraXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiA9IGJ1ZmZlcnMuc2xpY2Uob2Zmc2V0LCBieXRlcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gYnl0ZXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGlmIChwZW5kaW5nLnNraXApIHtcbiAgICAgICAgICAgICAgICAgICAgcGVuZGluZy5jYigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcGVuZGluZy5jYihidWYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBmdW5jdGlvbiBidWlsZGVyIChzYXcpIHtcbiAgICAgICAgZnVuY3Rpb24gbmV4dCAoKSB7IGlmICghZG9uZSkgc2F3Lm5leHQoKSB9XG4gICAgICAgIFxuICAgICAgICB2YXIgc2VsZiA9IHdvcmRzKGZ1bmN0aW9uIChieXRlcywgY2IpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICAgICAgICAgIGdldEJ5dGVzKGJ5dGVzLCBmdW5jdGlvbiAoYnVmKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhcnMuc2V0KG5hbWUsIGNiKGJ1ZikpO1xuICAgICAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIHNlbGYudGFwID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgICAgICAgICBzYXcubmVzdChjYiwgdmFycy5zdG9yZSk7XG4gICAgICAgIH07XG4gICAgICAgIFxuICAgICAgICBzZWxmLmludG8gPSBmdW5jdGlvbiAoa2V5LCBjYikge1xuICAgICAgICAgICAgaWYgKCF2YXJzLmdldChrZXkpKSB2YXJzLnNldChrZXksIHt9KTtcbiAgICAgICAgICAgIHZhciBwYXJlbnQgPSB2YXJzO1xuICAgICAgICAgICAgdmFycyA9IFZhcnMocGFyZW50LmdldChrZXkpKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgc2F3Lm5lc3QoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgdGhpcy50YXAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXJzID0gcGFyZW50O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgdmFycy5zdG9yZSk7XG4gICAgICAgIH07XG4gICAgICAgIFxuICAgICAgICBzZWxmLmZsdXNoID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFycy5zdG9yZSA9IHt9O1xuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgc2VsZi5sb29wID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgICAgICAgICB2YXIgZW5kID0gZmFsc2U7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHNhdy5uZXN0KGZhbHNlLCBmdW5jdGlvbiBsb29wICgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhcnMgPSB2YXJzLnN0b3JlO1xuICAgICAgICAgICAgICAgIGNiLmNhbGwodGhpcywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBlbmQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgICAgfSwgdmFycy5zdG9yZSk7XG4gICAgICAgICAgICAgICAgdGhpcy50YXAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZW5kKSBzYXcubmV4dCgpXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgbG9vcC5jYWxsKHRoaXMpXG4gICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgIH0sIHZhcnMuc3RvcmUpO1xuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgc2VsZi5idWZmZXIgPSBmdW5jdGlvbiAobmFtZSwgYnl0ZXMpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgYnl0ZXMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgYnl0ZXMgPSB2YXJzLmdldChieXRlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGdldEJ5dGVzKGJ5dGVzLCBmdW5jdGlvbiAoYnVmKSB7XG4gICAgICAgICAgICAgICAgdmFycy5zZXQobmFtZSwgYnVmKTtcbiAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgXG4gICAgICAgIHNlbGYuc2tpcCA9IGZ1bmN0aW9uIChieXRlcykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBieXRlcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBieXRlcyA9IHZhcnMuZ2V0KGJ5dGVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgZ2V0Qnl0ZXMoYnl0ZXMsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgXG4gICAgICAgIHNlbGYuc2NhbiA9IGZ1bmN0aW9uIGZpbmQgKG5hbWUsIHNlYXJjaCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBzZWFyY2ggPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgc2VhcmNoID0gbmV3IEJ1ZmZlcihzZWFyY2gpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihzZWFyY2gpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzZWFyY2ggbXVzdCBiZSBhIEJ1ZmZlciBvciBhIHN0cmluZycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgdGFrZW4gPSAwO1xuICAgICAgICAgICAgcGVuZGluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgcG9zID0gYnVmZmVycy5pbmRleE9mKHNlYXJjaCwgb2Zmc2V0ICsgdGFrZW4pO1xuICAgICAgICAgICAgICAgIHZhciBpID0gcG9zLW9mZnNldC10YWtlbjtcbiAgICAgICAgICAgICAgICBpZiAocG9zICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBwZW5kaW5nID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9mZnNldCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJzLnNldChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcnMuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyB0YWtlbiArIGkpXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IHRha2VuICsgaSArIHNlYXJjaC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJzLnNldChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcnMuc2xpY2UoMCwgdGFrZW4gKyBpKVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcnMuc3BsaWNlKDAsIHRha2VuICsgaSArIHNlYXJjaC5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2goKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpID0gTWF0aC5tYXgoYnVmZmVycy5sZW5ndGggLSBzZWFyY2gubGVuZ3RoIC0gb2Zmc2V0IC0gdGFrZW4sIDApO1xuXHRcdFx0XHR9XG4gICAgICAgICAgICAgICAgdGFrZW4gKz0gaTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBkaXNwYXRjaCgpO1xuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgc2VsZi5wZWVrID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgICAgICAgICBvZmZzZXQgPSAwO1xuICAgICAgICAgICAgc2F3Lm5lc3QoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGNiLmNhbGwodGhpcywgdmFycy5zdG9yZSk7XG4gICAgICAgICAgICAgICAgdGhpcy50YXAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBudWxsO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIFxuICAgIHZhciBzdHJlYW0gPSBDaGFpbnNhdy5saWdodChidWlsZGVyKTtcbiAgICBzdHJlYW0ud3JpdGFibGUgPSB0cnVlO1xuICAgIFxuICAgIHZhciBidWZmZXJzID0gQnVmZmVycygpO1xuICAgIFxuICAgIHN0cmVhbS53cml0ZSA9IGZ1bmN0aW9uIChidWYpIHtcbiAgICAgICAgYnVmZmVycy5wdXNoKGJ1Zik7XG4gICAgICAgIGRpc3BhdGNoKCk7XG4gICAgfTtcbiAgICBcbiAgICB2YXIgdmFycyA9IFZhcnMoKTtcbiAgICBcbiAgICB2YXIgZG9uZSA9IGZhbHNlLCBjYXVnaHRFbmQgPSBmYWxzZTtcbiAgICBzdHJlYW0uZW5kID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBjYXVnaHRFbmQgPSB0cnVlO1xuICAgIH07XG4gICAgXG4gICAgc3RyZWFtLnBpcGUgPSBTdHJlYW0ucHJvdG90eXBlLnBpcGU7XG4gICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSkuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICBzdHJlYW1bbmFtZV0gPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlW25hbWVdO1xuICAgIH0pO1xuICAgIFxuICAgIHJldHVybiBzdHJlYW07XG59O1xuXG5leHBvcnRzLnBhcnNlID0gZnVuY3Rpb24gcGFyc2UgKGJ1ZmZlcikge1xuICAgIHZhciBzZWxmID0gd29yZHMoZnVuY3Rpb24gKGJ5dGVzLCBjYikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgICAgIGlmIChvZmZzZXQgKyBieXRlcyA8PSBidWZmZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGJ1ZiA9IGJ1ZmZlci5zbGljZShvZmZzZXQsIG9mZnNldCArIGJ5dGVzKTtcbiAgICAgICAgICAgICAgICBvZmZzZXQgKz0gYnl0ZXM7XG4gICAgICAgICAgICAgICAgdmFycy5zZXQobmFtZSwgY2IoYnVmKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXJzLnNldChuYW1lLCBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzZWxmO1xuICAgICAgICB9O1xuICAgIH0pO1xuICAgIFxuICAgIHZhciBvZmZzZXQgPSAwO1xuICAgIHZhciB2YXJzID0gVmFycygpO1xuICAgIHNlbGYudmFycyA9IHZhcnMuc3RvcmU7XG4gICAgXG4gICAgc2VsZi50YXAgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICAgICAgY2IuY2FsbChzZWxmLCB2YXJzLnN0b3JlKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBcbiAgICBzZWxmLmludG8gPSBmdW5jdGlvbiAoa2V5LCBjYikge1xuICAgICAgICBpZiAoIXZhcnMuZ2V0KGtleSkpIHtcbiAgICAgICAgICAgIHZhcnMuc2V0KGtleSwge30pO1xuICAgICAgICB9XG4gICAgICAgIHZhciBwYXJlbnQgPSB2YXJzO1xuICAgICAgICB2YXJzID0gVmFycyhwYXJlbnQuZ2V0KGtleSkpO1xuICAgICAgICBjYi5jYWxsKHNlbGYsIHZhcnMuc3RvcmUpO1xuICAgICAgICB2YXJzID0gcGFyZW50O1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIFxuICAgIHNlbGYubG9vcCA9IGZ1bmN0aW9uIChjYikge1xuICAgICAgICB2YXIgZW5kID0gZmFsc2U7XG4gICAgICAgIHZhciBlbmRlciA9IGZ1bmN0aW9uICgpIHsgZW5kID0gdHJ1ZSB9O1xuICAgICAgICB3aGlsZSAoZW5kID09PSBmYWxzZSkge1xuICAgICAgICAgICAgY2IuY2FsbChzZWxmLCBlbmRlciwgdmFycy5zdG9yZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBcbiAgICBzZWxmLmJ1ZmZlciA9IGZ1bmN0aW9uIChuYW1lLCBzaXplKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2l6ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHNpemUgPSB2YXJzLmdldChzaXplKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgYnVmID0gYnVmZmVyLnNsaWNlKG9mZnNldCwgTWF0aC5taW4oYnVmZmVyLmxlbmd0aCwgb2Zmc2V0ICsgc2l6ZSkpO1xuICAgICAgICBvZmZzZXQgKz0gc2l6ZTtcbiAgICAgICAgdmFycy5zZXQobmFtZSwgYnVmKTtcbiAgICAgICAgXG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgXG4gICAgc2VsZi5za2lwID0gZnVuY3Rpb24gKGJ5dGVzKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYnl0ZXMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBieXRlcyA9IHZhcnMuZ2V0KGJ5dGVzKTtcbiAgICAgICAgfVxuICAgICAgICBvZmZzZXQgKz0gYnl0ZXM7XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIFxuICAgIHNlbGYuc2NhbiA9IGZ1bmN0aW9uIChuYW1lLCBzZWFyY2gpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZWFyY2ggPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBzZWFyY2ggPSBuZXcgQnVmZmVyKHNlYXJjaCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihzZWFyY2gpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NlYXJjaCBtdXN0IGJlIGEgQnVmZmVyIG9yIGEgc3RyaW5nJyk7XG4gICAgICAgIH1cbiAgICAgICAgdmFycy5zZXQobmFtZSwgbnVsbCk7XG4gICAgICAgIFxuICAgICAgICAvLyBzaW1wbGUgYnV0IHNsb3cgc3RyaW5nIHNlYXJjaFxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSArIG9mZnNldCA8PSBidWZmZXIubGVuZ3RoIC0gc2VhcmNoLmxlbmd0aCArIDE7IGkrKykge1xuICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgICB2YXIgaiA9IDA7XG4gICAgICAgICAgICAgICAgaiA8IHNlYXJjaC5sZW5ndGggJiYgYnVmZmVyW29mZnNldCtpK2pdID09PSBzZWFyY2hbal07XG4gICAgICAgICAgICAgICAgaisrXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGogPT09IHNlYXJjaC5sZW5ndGgpIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICB2YXJzLnNldChuYW1lLCBidWZmZXIuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBpKSk7XG4gICAgICAgIG9mZnNldCArPSBpICsgc2VhcmNoLmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBcbiAgICBzZWxmLnBlZWsgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICAgICAgdmFyIHdhcyA9IG9mZnNldDtcbiAgICAgICAgY2IuY2FsbChzZWxmLCB2YXJzLnN0b3JlKTtcbiAgICAgICAgb2Zmc2V0ID0gd2FzO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIFxuICAgIHNlbGYuZmx1c2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhcnMuc3RvcmUgPSB7fTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBcbiAgICBzZWxmLmVvZiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG9mZnNldCA+PSBidWZmZXIubGVuZ3RoO1xuICAgIH07XG4gICAgXG4gICAgcmV0dXJuIHNlbGY7XG59O1xuXG4vLyBjb252ZXJ0IGJ5dGUgc3RyaW5ncyB0byB1bnNpZ25lZCBsaXR0bGUgZW5kaWFuIG51bWJlcnNcbmZ1bmN0aW9uIGRlY29kZUxFdSAoYnl0ZXMpIHtcbiAgICB2YXIgYWNjID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGFjYyArPSBNYXRoLnBvdygyNTYsaSkgKiBieXRlc1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbn1cblxuLy8gY29udmVydCBieXRlIHN0cmluZ3MgdG8gdW5zaWduZWQgYmlnIGVuZGlhbiBudW1iZXJzXG5mdW5jdGlvbiBkZWNvZGVCRXUgKGJ5dGVzKSB7XG4gICAgdmFyIGFjYyA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBhY2MgKz0gTWF0aC5wb3coMjU2LCBieXRlcy5sZW5ndGggLSBpIC0gMSkgKiBieXRlc1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbn1cblxuLy8gY29udmVydCBieXRlIHN0cmluZ3MgdG8gc2lnbmVkIGJpZyBlbmRpYW4gbnVtYmVyc1xuZnVuY3Rpb24gZGVjb2RlQkVzIChieXRlcykge1xuICAgIHZhciB2YWwgPSBkZWNvZGVCRXUoYnl0ZXMpO1xuICAgIGlmICgoYnl0ZXNbMF0gJiAweDgwKSA9PSAweDgwKSB7XG4gICAgICAgIHZhbCAtPSBNYXRoLnBvdygyNTYsIGJ5dGVzLmxlbmd0aCk7XG4gICAgfVxuICAgIHJldHVybiB2YWw7XG59XG5cbi8vIGNvbnZlcnQgYnl0ZSBzdHJpbmdzIHRvIHNpZ25lZCBsaXR0bGUgZW5kaWFuIG51bWJlcnNcbmZ1bmN0aW9uIGRlY29kZUxFcyAoYnl0ZXMpIHtcbiAgICB2YXIgdmFsID0gZGVjb2RlTEV1KGJ5dGVzKTtcbiAgICBpZiAoKGJ5dGVzW2J5dGVzLmxlbmd0aCAtIDFdICYgMHg4MCkgPT0gMHg4MCkge1xuICAgICAgICB2YWwgLT0gTWF0aC5wb3coMjU2LCBieXRlcy5sZW5ndGgpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsO1xufVxuXG5mdW5jdGlvbiB3b3JkcyAoZGVjb2RlKSB7XG4gICAgdmFyIHNlbGYgPSB7fTtcbiAgICBcbiAgICBbIDEsIDIsIDQsIDggXS5mb3JFYWNoKGZ1bmN0aW9uIChieXRlcykge1xuICAgICAgICB2YXIgYml0cyA9IGJ5dGVzICogODtcbiAgICAgICAgXG4gICAgICAgIHNlbGZbJ3dvcmQnICsgYml0cyArICdsZSddXG4gICAgICAgID0gc2VsZlsnd29yZCcgKyBiaXRzICsgJ2x1J11cbiAgICAgICAgPSBkZWNvZGUoYnl0ZXMsIGRlY29kZUxFdSk7XG4gICAgICAgIFxuICAgICAgICBzZWxmWyd3b3JkJyArIGJpdHMgKyAnbHMnXVxuICAgICAgICA9IGRlY29kZShieXRlcywgZGVjb2RlTEVzKTtcbiAgICAgICAgXG4gICAgICAgIHNlbGZbJ3dvcmQnICsgYml0cyArICdiZSddXG4gICAgICAgID0gc2VsZlsnd29yZCcgKyBiaXRzICsgJ2J1J11cbiAgICAgICAgPSBkZWNvZGUoYnl0ZXMsIGRlY29kZUJFdSk7XG4gICAgICAgIFxuICAgICAgICBzZWxmWyd3b3JkJyArIGJpdHMgKyAnYnMnXVxuICAgICAgICA9IGRlY29kZShieXRlcywgZGVjb2RlQkVzKTtcbiAgICB9KTtcbiAgICBcbiAgICAvLyB3b3JkOGJlKG4pID09IHdvcmQ4bGUobikgZm9yIGFsbCBuXG4gICAgc2VsZi53b3JkOCA9IHNlbGYud29yZDh1ID0gc2VsZi53b3JkOGJlO1xuICAgIHNlbGYud29yZDhzID0gc2VsZi53b3JkOGJzO1xuICAgIFxuICAgIHJldHVybiBzZWxmO1xufVxuIiwKICAgICJ2YXIgVHJhbnNmb3JtID0gcmVxdWlyZSgnc3RyZWFtJykuVHJhbnNmb3JtO1xudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG5cbmZ1bmN0aW9uIE1hdGNoZXJTdHJlYW0ocGF0dGVybkRlc2MsIG1hdGNoRm4pIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgTWF0Y2hlclN0cmVhbSkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBNYXRjaGVyU3RyZWFtKCk7XG4gICAgfVxuXG4gICAgVHJhbnNmb3JtLmNhbGwodGhpcyk7XG5cbiAgICB2YXIgcCA9IHR5cGVvZiBwYXR0ZXJuRGVzYyA9PT0gJ29iamVjdCcgPyBwYXR0ZXJuRGVzYy5wYXR0ZXJuIDogcGF0dGVybkRlc2M7XG5cbiAgICB0aGlzLnBhdHRlcm4gPSBCdWZmZXIuaXNCdWZmZXIocCkgPyBwIDogQnVmZmVyLmZyb20ocCk7XG4gICAgdGhpcy5yZXF1aXJlZExlbmd0aCA9IHRoaXMucGF0dGVybi5sZW5ndGg7XG4gICAgaWYgKHBhdHRlcm5EZXNjLnJlcXVpcmVkRXh0cmFTaXplKSB0aGlzLnJlcXVpcmVkTGVuZ3RoICs9IHBhdHRlcm5EZXNjLnJlcXVpcmVkRXh0cmFTaXplO1xuXG4gICAgdGhpcy5kYXRhID0gbmV3IEJ1ZmZlcignJyk7XG4gICAgdGhpcy5ieXRlc1NvRmFyID0gMDtcblxuICAgIHRoaXMubWF0Y2hGbiA9IG1hdGNoRm47XG59XG5cbnV0aWwuaW5oZXJpdHMoTWF0Y2hlclN0cmVhbSwgVHJhbnNmb3JtKTtcblxuTWF0Y2hlclN0cmVhbS5wcm90b3R5cGUuY2hlY2tEYXRhQ2h1bmsgPSBmdW5jdGlvbiAoaWdub3JlTWF0Y2haZXJvKSB7XG4gICAgdmFyIGVub3VnaERhdGEgPSB0aGlzLmRhdGEubGVuZ3RoID49IHRoaXMucmVxdWlyZWRMZW5ndGg7IC8vIHN0cmljdCBtb3JlIHRoYW4gP1xuICAgIGlmICghZW5vdWdoRGF0YSkgeyByZXR1cm47IH1cblxuICAgIHZhciBtYXRjaEluZGV4ID0gdGhpcy5kYXRhLmluZGV4T2YodGhpcy5wYXR0ZXJuLCBpZ25vcmVNYXRjaFplcm8gPyAxIDogMCk7XG4gICAgaWYgKG1hdGNoSW5kZXggPj0gMCAmJiBtYXRjaEluZGV4ICsgdGhpcy5yZXF1aXJlZExlbmd0aCA+IHRoaXMuZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgaWYgKG1hdGNoSW5kZXggPiAwKSB7XG4gICAgICAgICAgICB2YXIgcGFja2V0ID0gdGhpcy5kYXRhLnNsaWNlKDAsIG1hdGNoSW5kZXgpO1xuICAgICAgICAgICAgdGhpcy5wdXNoKHBhY2tldCk7XG4gICAgICAgICAgICB0aGlzLmJ5dGVzU29GYXIgKz0gbWF0Y2hJbmRleDtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHRoaXMuZGF0YS5zbGljZShtYXRjaEluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG1hdGNoSW5kZXggPT09IC0xKSB7XG4gICAgICAgIHZhciBwYWNrZXRMZW4gPSB0aGlzLmRhdGEubGVuZ3RoIC0gdGhpcy5yZXF1aXJlZExlbmd0aCArIDE7XG5cbiAgICAgICAgdmFyIHBhY2tldCA9IHRoaXMuZGF0YS5zbGljZSgwLCBwYWNrZXRMZW4pO1xuICAgICAgICB0aGlzLnB1c2gocGFja2V0KTtcbiAgICAgICAgdGhpcy5ieXRlc1NvRmFyICs9IHBhY2tldExlbjtcbiAgICAgICAgdGhpcy5kYXRhID0gdGhpcy5kYXRhLnNsaWNlKHBhY2tldExlbik7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBmb3VuZCBtYXRjaFxuICAgIGlmIChtYXRjaEluZGV4ID4gMCkge1xuICAgICAgICB2YXIgcGFja2V0ID0gdGhpcy5kYXRhLnNsaWNlKDAsIG1hdGNoSW5kZXgpO1xuICAgICAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGEuc2xpY2UobWF0Y2hJbmRleCk7XG4gICAgICAgIHRoaXMucHVzaChwYWNrZXQpO1xuICAgICAgICB0aGlzLmJ5dGVzU29GYXIgKz0gbWF0Y2hJbmRleDtcbiAgICB9XG5cbiAgICB2YXIgZmluaXNoZWQgPSB0aGlzLm1hdGNoRm4gPyB0aGlzLm1hdGNoRm4odGhpcy5kYXRhLCB0aGlzLmJ5dGVzU29GYXIpIDogdHJ1ZTtcbiAgICBpZiAoZmluaXNoZWQpIHtcbiAgICAgICAgdGhpcy5kYXRhID0gbmV3IEJ1ZmZlcignJyk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuTWF0Y2hlclN0cmVhbS5wcm90b3R5cGUuX3RyYW5zZm9ybSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gICAgdGhpcy5kYXRhID0gQnVmZmVyLmNvbmNhdChbdGhpcy5kYXRhLCBjaHVua10pO1xuXG4gICAgdmFyIGZpcnN0SXRlcmF0aW9uID0gdHJ1ZTtcbiAgICB3aGlsZSAodGhpcy5jaGVja0RhdGFDaHVuayghZmlyc3RJdGVyYXRpb24pKSB7XG4gICAgICAgIGZpcnN0SXRlcmF0aW9uID0gZmFsc2U7XG4gICAgfVxuXG4gICAgY2IoKTtcbn1cblxuTWF0Y2hlclN0cmVhbS5wcm90b3R5cGUuX2ZsdXNoID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgaWYgKHRoaXMuZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHZhciBmaXJzdEl0ZXJhdGlvbiA9IHRydWU7XG4gICAgICAgIHdoaWxlICh0aGlzLmNoZWNrRGF0YUNodW5rKCFmaXJzdEl0ZXJhdGlvbikpIHtcbiAgICAgICAgICAgIGZpcnN0SXRlcmF0aW9uID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5wdXNoKHRoaXMuZGF0YSk7XG4gICAgICAgIHRoaXMuZGF0YSA9IG51bGw7XG4gICAgfVxuXG4gICAgY2IoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBNYXRjaGVyU3RyZWFtOyIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgc3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJyk7XG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCd1dGlsJykuaW5oZXJpdHM7XG5cbmZ1bmN0aW9uIEVudHJ5KCkge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBFbnRyeSkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBFbnRyeSgpO1xuICAgIH1cblxuICAgIHN0cmVhbS5QYXNzVGhyb3VnaC5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5wYXRoID0gbnVsbDtcbiAgICB0aGlzLnR5cGUgPSBudWxsO1xuICAgIHRoaXMuaXNEaXJlY3RvcnkgPSBmYWxzZTtcbn1cblxuaW5oZXJpdHMoRW50cnksIHN0cmVhbS5QYXNzVGhyb3VnaCk7XG5cbkVudHJ5LnByb3RvdHlwZS5hdXRvZHJhaW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMucGlwZShuZXcgc3RyZWFtLlRyYW5zZm9ybSh7IHRyYW5zZm9ybTogZnVuY3Rpb24gKGQsIGUsIGNiKSB7IGNiKCk7IH0gfSkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEVudHJ5OyIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYmluYXJ5ID0gcmVxdWlyZSgnYmluYXJ5Jyk7XG52YXIgc3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbnZhciB6bGliID0gcmVxdWlyZSgnemxpYicpO1xudmFyIE1hdGNoZXJTdHJlYW0gPSByZXF1aXJlKCcuL21hdGNoZXItc3RyZWFtJyk7XG52YXIgRW50cnkgPSByZXF1aXJlKCcuL2VudHJ5Jyk7XG5cbmNvbnN0IHN0YXRlcyA9IHtcbiAgICBTVFJFQU1fU1RBUlQ6ICAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgU1RBUlQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLFxuICAgIExPQ0FMX0ZJTEVfSEVBREVSOiAgICAgICAgICAgICAgICAgICAgMixcbiAgICBMT0NBTF9GSUxFX0hFQURFUl9TVUZGSVg6ICAgICAgICAgICAgIDMsXG4gICAgRklMRV9EQVRBOiAgICAgICAgICAgICAgICAgICAgICAgICAgICA0LFxuICAgIEZJTEVfREFUQV9FTkQ6ICAgICAgICAgICAgICAgICAgICAgICAgNSxcbiAgICBEQVRBX0RFU0NSSVBUT1I6ICAgICAgICAgICAgICAgICAgICAgIDYsXG4gICAgQ0VOVFJBTF9ESVJFQ1RPUllfRklMRV9IRUFERVI6ICAgICAgICA3LFxuICAgIENFTlRSQUxfRElSRUNUT1JZX0ZJTEVfSEVBREVSX1NVRkZJWDogOCxcbiAgICBDRElSNjRfRU5EOiAgICAgICAgICAgICAgICAgICAgICAgICAgIDksXG4gICAgQ0RJUjY0X0VORF9EQVRBX1NFQ1RPUjogICAgICAgICAgICAgICAxMCxcbiAgICBDRElSNjRfTE9DQVRPUjogICAgICAgICAgICAgICAgICAgICAgIDExLFxuICAgIENFTlRSQUxfRElSRUNUT1JZX0VORDogICAgICAgICAgICAgICAgMTIsXG4gICAgQ0VOVFJBTF9ESVJFQ1RPUllfRU5EX0NPTU1FTlQ6ICAgICAgICAxMyxcbiAgICBUUkFJTElOR19KVU5LOiAgICAgICAgICAgICAgICAgICAgICAgIDE0LFxuXG4gICAgRVJST1I6IDk5XG59XG5cbmNvbnN0IEZPVVJfR0lHUyA9IDQyOTQ5NjcyOTY7XG5cbmNvbnN0IFNJR19MT0NBTF9GSUxFX0hFQURFUiAgPSAweDA0MDM0YjUwO1xuY29uc3QgU0lHX0RBVEFfREVTQ1JJUFRPUiAgICA9IDB4MDgwNzRiNTA7XG5jb25zdCBTSUdfQ0RJUl9SRUNPUkQgICAgICAgID0gMHgwMjAxNGI1MDtcbmNvbnN0IFNJR19DRElSNjRfUkVDT1JEX0VORCAgPSAweDA2MDY0YjUwO1xuY29uc3QgU0lHX0NESVI2NF9MT0NBVE9SX0VORCA9IDB4MDcwNjRiNTA7XG5jb25zdCBTSUdfQ0RJUl9SRUNPUkRfRU5EICAgID0gMHgwNjA1NGI1MDtcblxuZnVuY3Rpb24gVW56aXBTdHJlYW0ob3B0aW9ucykge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBVbnppcFN0cmVhbSkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBVbnppcFN0cmVhbShvcHRpb25zKTtcbiAgICB9XG5cbiAgICBzdHJlYW0uVHJhbnNmb3JtLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIHRoaXMuZGF0YSA9IG5ldyBCdWZmZXIoJycpO1xuICAgIHRoaXMuc3RhdGUgPSBzdGF0ZXMuU1RSRUFNX1NUQVJUO1xuICAgIHRoaXMuc2tpcHBlZEJ5dGVzID0gMDtcbiAgICB0aGlzLnBhcnNlZEVudGl0eSA9IG51bGw7XG4gICAgdGhpcy5vdXRTdHJlYW1JbmZvID0ge307XG59XG5cbnV0aWwuaW5oZXJpdHMoVW56aXBTdHJlYW0sIHN0cmVhbS5UcmFuc2Zvcm0pO1xuXG5VbnppcFN0cmVhbS5wcm90b3R5cGUucHJvY2Vzc0RhdGFDaHVuayA9IGZ1bmN0aW9uIChjaHVuaykge1xuICAgIHZhciByZXF1aXJlZExlbmd0aDtcblxuICAgIHN3aXRjaCAodGhpcy5zdGF0ZSkge1xuICAgICAgICBjYXNlIHN0YXRlcy5TVFJFQU1fU1RBUlQ6XG4gICAgICAgIGNhc2Ugc3RhdGVzLlNUQVJUOlxuICAgICAgICAgICAgcmVxdWlyZWRMZW5ndGggPSA0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Ugc3RhdGVzLkxPQ0FMX0ZJTEVfSEVBREVSOlxuICAgICAgICAgICAgcmVxdWlyZWRMZW5ndGggPSAyNjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIHN0YXRlcy5MT0NBTF9GSUxFX0hFQURFUl9TVUZGSVg6XG4gICAgICAgICAgICByZXF1aXJlZExlbmd0aCA9IHRoaXMucGFyc2VkRW50aXR5LmZpbGVOYW1lTGVuZ3RoICsgdGhpcy5wYXJzZWRFbnRpdHkuZXh0cmFGaWVsZExlbmd0aDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIHN0YXRlcy5EQVRBX0RFU0NSSVBUT1I6XG4gICAgICAgICAgICByZXF1aXJlZExlbmd0aCA9IDEyO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Ugc3RhdGVzLkNFTlRSQUxfRElSRUNUT1JZX0ZJTEVfSEVBREVSOlxuICAgICAgICAgICAgcmVxdWlyZWRMZW5ndGggPSA0MjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIHN0YXRlcy5DRU5UUkFMX0RJUkVDVE9SWV9GSUxFX0hFQURFUl9TVUZGSVg6XG4gICAgICAgICAgICByZXF1aXJlZExlbmd0aCA9IHRoaXMucGFyc2VkRW50aXR5LmZpbGVOYW1lTGVuZ3RoICsgdGhpcy5wYXJzZWRFbnRpdHkuZXh0cmFGaWVsZExlbmd0aCArIHRoaXMucGFyc2VkRW50aXR5LmZpbGVDb21tZW50TGVuZ3RoO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Ugc3RhdGVzLkNESVI2NF9FTkQ6XG4gICAgICAgICAgICByZXF1aXJlZExlbmd0aCA9IDUyO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Ugc3RhdGVzLkNESVI2NF9FTkRfREFUQV9TRUNUT1I6XG4gICAgICAgICAgICByZXF1aXJlZExlbmd0aCA9IHRoaXMucGFyc2VkRW50aXR5LmNlbnRyYWxEaXJlY3RvcnlSZWNvcmRTaXplIC0gNDQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBzdGF0ZXMuQ0RJUjY0X0xPQ0FUT1I6XG4gICAgICAgICAgICByZXF1aXJlZExlbmd0aCA9IDE2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Ugc3RhdGVzLkNFTlRSQUxfRElSRUNUT1JZX0VORDpcbiAgICAgICAgICAgIHJlcXVpcmVkTGVuZ3RoID0gMTg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBzdGF0ZXMuQ0VOVFJBTF9ESVJFQ1RPUllfRU5EX0NPTU1FTlQ6XG4gICAgICAgICAgICByZXF1aXJlZExlbmd0aCA9IHRoaXMucGFyc2VkRW50aXR5LmNvbW1lbnRMZW5ndGg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBzdGF0ZXMuRklMRV9EQVRBOlxuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIGNhc2Ugc3RhdGVzLkZJTEVfREFUQV9FTkQ6XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgY2FzZSBzdGF0ZXMuVFJBSUxJTkdfSlVOSzpcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZGVidWcpIGNvbnNvbGUubG9nKFwiZm91bmRcIiwgY2h1bmsubGVuZ3RoLCBcImJ5dGVzIG9mIFRSQUlMSU5HX0pVTktcIik7XG4gICAgICAgICAgICByZXR1cm4gY2h1bmsubGVuZ3RoO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGNodW5rLmxlbmd0aDtcbiAgICB9XG5cbiAgICB2YXIgY2h1bmtMZW5ndGggPSBjaHVuay5sZW5ndGg7XG4gICAgaWYgKGNodW5rTGVuZ3RoIDwgcmVxdWlyZWRMZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgc3dpdGNoICh0aGlzLnN0YXRlKSB7XG4gICAgICAgIGNhc2Ugc3RhdGVzLlNUUkVBTV9TVEFSVDpcbiAgICAgICAgY2FzZSBzdGF0ZXMuU1RBUlQ6XG4gICAgICAgICAgICB2YXIgc2lnbmF0dXJlID0gY2h1bmsucmVhZFVJbnQzMkxFKDApO1xuICAgICAgICAgICAgc3dpdGNoIChzaWduYXR1cmUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFNJR19MT0NBTF9GSUxFX0hFQURFUjpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlcy5MT0NBTF9GSUxFX0hFQURFUjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBTSUdfQ0RJUl9SRUNPUkQ6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZXMuQ0VOVFJBTF9ESVJFQ1RPUllfRklMRV9IRUFERVI7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgU0lHX0NESVI2NF9SRUNPUkRfRU5EOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGVzLkNESVI2NF9FTkQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgU0lHX0NESVI2NF9MT0NBVE9SX0VORDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlcy5DRElSNjRfTE9DQVRPUjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBTSUdfQ0RJUl9SRUNPUkRfRU5EOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGVzLkNFTlRSQUxfRElSRUNUT1JZX0VORDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlzU3RyZWFtU3RhcnQgPSB0aGlzLnN0YXRlID09PSBzdGF0ZXMuU1RSRUFNX1NUQVJUO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzU3RyZWFtU3RhcnQgJiYgKHNpZ25hdHVyZSAmIDB4ZmZmZikgIT09IDB4NGI1MCAmJiB0aGlzLnNraXBwZWRCeXRlcyA8IDI2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSdsbCBhbGxvdyBhIHBhZGRpbmcgb2YgbWF4IDI4IGJ5dGVzXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVtYWluaW5nID0gc2lnbmF0dXJlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRvU2tpcCA9IDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IDQgJiYgcmVtYWluaW5nICE9PSAwOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1haW5pbmcgPSByZW1haW5pbmcgPj4+IDg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChyZW1haW5pbmcgJiAweGZmKSA9PT0gMHg1MCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b1NraXAgPSBpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNraXBwZWRCeXRlcyArPSB0b1NraXA7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmRlYnVnKSBjb25zb2xlLmxvZygnU2tpcHBlZCcsIHRoaXMuc2tpcHBlZEJ5dGVzLCAnYnl0ZXMnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0b1NraXA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlcy5FUlJPUjtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVyck1zZyA9IGlzU3RyZWFtU3RhcnQgPyBcIk5vdCBhIHZhbGlkIHppcCBmaWxlXCIgOiBcIkludmFsaWQgc2lnbmF0dXJlIGluIHppcCBmaWxlXCI7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZGVidWcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaWcgPSBjaHVuay5yZWFkVUludDMyTEUoMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXNTdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkgeyBhc1N0cmluZyA9IGNodW5rLnNsaWNlKDAsIDQpLnRvU3RyaW5nKCk7IH0gY2F0Y2ggKGUpIHt9XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIlVuZXhwZWN0ZWQgc2lnbmF0dXJlIGluIHppcCBmaWxlOiAweFwiICsgc2lnLnRvU3RyaW5nKDE2KSwgJ1wiJyArIGFzU3RyaW5nICsgJ1wiLCBza2lwcGVkJywgdGhpcy5za2lwcGVkQnl0ZXMsICdieXRlcycpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdChcImVycm9yXCIsIG5ldyBFcnJvcihlcnJNc2cpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNodW5rLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2tpcHBlZEJ5dGVzID0gMDtcbiAgICAgICAgICAgIHJldHVybiByZXF1aXJlZExlbmd0aDtcblxuICAgICAgICBjYXNlIHN0YXRlcy5MT0NBTF9GSUxFX0hFQURFUjpcbiAgICAgICAgICAgIHRoaXMucGFyc2VkRW50aXR5ID0gdGhpcy5fcmVhZEZpbGUoY2h1bmspO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlcy5MT0NBTF9GSUxFX0hFQURFUl9TVUZGSVg7XG5cbiAgICAgICAgICAgIHJldHVybiByZXF1aXJlZExlbmd0aDtcblxuICAgICAgICBjYXNlIHN0YXRlcy5MT0NBTF9GSUxFX0hFQURFUl9TVUZGSVg6XG4gICAgICAgICAgICB2YXIgZW50cnkgPSBuZXcgRW50cnkoKTtcbiAgICAgICAgICAgIHZhciBpc1V0ZjggPSAodGhpcy5wYXJzZWRFbnRpdHkuZmxhZ3MgJiAweDgwMCkgIT09IDA7XG4gICAgICAgICAgICBlbnRyeS5wYXRoID0gdGhpcy5fZGVjb2RlU3RyaW5nKGNodW5rLnNsaWNlKDAsIHRoaXMucGFyc2VkRW50aXR5LmZpbGVOYW1lTGVuZ3RoKSwgaXNVdGY4KTtcbiAgICAgICAgICAgIHZhciBleHRyYURhdGFCdWZmZXIgPSBjaHVuay5zbGljZSh0aGlzLnBhcnNlZEVudGl0eS5maWxlTmFtZUxlbmd0aCwgdGhpcy5wYXJzZWRFbnRpdHkuZmlsZU5hbWVMZW5ndGggKyB0aGlzLnBhcnNlZEVudGl0eS5leHRyYUZpZWxkTGVuZ3RoKTtcbiAgICAgICAgICAgIHZhciBleHRyYSA9IHRoaXMuX3JlYWRFeHRyYUZpZWxkcyhleHRyYURhdGFCdWZmZXIpO1xuICAgICAgICAgICAgaWYgKGV4dHJhICYmIGV4dHJhLnBhcnNlZCkge1xuICAgICAgICAgICAgICAgIGlmIChleHRyYS5wYXJzZWQucGF0aCAmJiAhaXNVdGY4KSB7XG4gICAgICAgICAgICAgICAgICAgIGVudHJ5LnBhdGggPSBleHRyYS5wYXJzZWQucGF0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKE51bWJlci5pc0Zpbml0ZShleHRyYS5wYXJzZWQudW5jb21wcmVzc2VkU2l6ZSkgJiYgdGhpcy5wYXJzZWRFbnRpdHkudW5jb21wcmVzc2VkU2l6ZSA9PT0gRk9VUl9HSUdTLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJzZWRFbnRpdHkudW5jb21wcmVzc2VkU2l6ZSA9IGV4dHJhLnBhcnNlZC51bmNvbXByZXNzZWRTaXplO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoTnVtYmVyLmlzRmluaXRlKGV4dHJhLnBhcnNlZC5jb21wcmVzc2VkU2l6ZSkgJiYgdGhpcy5wYXJzZWRFbnRpdHkuY29tcHJlc3NlZFNpemUgPT09IEZPVVJfR0lHUy0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFyc2VkRW50aXR5LmNvbXByZXNzZWRTaXplID0gZXh0cmEucGFyc2VkLmNvbXByZXNzZWRTaXplO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucGFyc2VkRW50aXR5LmV4dHJhID0gZXh0cmEucGFyc2VkIHx8IHt9O1xuXG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmRlYnVnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVidWdPYmogPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLnBhcnNlZEVudGl0eSwge1xuICAgICAgICAgICAgICAgICAgICBwYXRoOiBlbnRyeS5wYXRoLFxuICAgICAgICAgICAgICAgICAgICBmbGFnczogJzB4JyArIHRoaXMucGFyc2VkRW50aXR5LmZsYWdzLnRvU3RyaW5nKDE2KSxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFGaWVsZHM6IGV4dHJhICYmIGV4dHJhLmRlYnVnXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJkZWNvZGVkIExPQ0FMX0ZJTEVfSEVBREVSOlwiLCBKU09OLnN0cmluZ2lmeShkZWJ1Z09iaiwgbnVsbCwgMikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fcHJlcGFyZU91dFN0cmVhbSh0aGlzLnBhcnNlZEVudGl0eSwgZW50cnkpO1xuXG4gICAgICAgICAgICB0aGlzLmVtaXQoXCJlbnRyeVwiLCBlbnRyeSk7XG5cbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZXMuRklMRV9EQVRBO1xuXG4gICAgICAgICAgICByZXR1cm4gcmVxdWlyZWRMZW5ndGg7XG5cbiAgICAgICAgY2FzZSBzdGF0ZXMuQ0VOVFJBTF9ESVJFQ1RPUllfRklMRV9IRUFERVI6XG4gICAgICAgICAgICB0aGlzLnBhcnNlZEVudGl0eSA9IHRoaXMuX3JlYWRDZW50cmFsRGlyZWN0b3J5RW50cnkoY2h1bmspO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlcy5DRU5UUkFMX0RJUkVDVE9SWV9GSUxFX0hFQURFUl9TVUZGSVg7XG5cbiAgICAgICAgICAgIHJldHVybiByZXF1aXJlZExlbmd0aDtcblxuICAgICAgICBjYXNlIHN0YXRlcy5DRU5UUkFMX0RJUkVDVE9SWV9GSUxFX0hFQURFUl9TVUZGSVg6XG4gICAgICAgICAgICAvLyBnb3QgZmlsZSBuYW1lIGluIGNodW5rWzAuLl1cbiAgICAgICAgICAgIHZhciBpc1V0ZjggPSAodGhpcy5wYXJzZWRFbnRpdHkuZmxhZ3MgJiAweDgwMCkgIT09IDA7XG4gICAgICAgICAgICB2YXIgcGF0aCA9IHRoaXMuX2RlY29kZVN0cmluZyhjaHVuay5zbGljZSgwLCB0aGlzLnBhcnNlZEVudGl0eS5maWxlTmFtZUxlbmd0aCksIGlzVXRmOCk7XG4gICAgICAgICAgICB2YXIgZXh0cmFEYXRhQnVmZmVyID0gY2h1bmsuc2xpY2UodGhpcy5wYXJzZWRFbnRpdHkuZmlsZU5hbWVMZW5ndGgsIHRoaXMucGFyc2VkRW50aXR5LmZpbGVOYW1lTGVuZ3RoICsgdGhpcy5wYXJzZWRFbnRpdHkuZXh0cmFGaWVsZExlbmd0aCk7XG4gICAgICAgICAgICB2YXIgZXh0cmEgPSB0aGlzLl9yZWFkRXh0cmFGaWVsZHMoZXh0cmFEYXRhQnVmZmVyKTtcbiAgICAgICAgICAgIGlmIChleHRyYSAmJiBleHRyYS5wYXJzZWQgJiYgZXh0cmEucGFyc2VkLnBhdGggJiYgIWlzVXRmOCkge1xuICAgICAgICAgICAgICAgIHBhdGggPSBleHRyYS5wYXJzZWQucGF0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucGFyc2VkRW50aXR5LmV4dHJhID0gZXh0cmEucGFyc2VkO1xuXG4gICAgICAgICAgICB2YXIgaXNVbml4ID0gKCh0aGlzLnBhcnNlZEVudGl0eS52ZXJzaW9uTWFkZUJ5ICYgMHhmZjAwKSA+PiA4KSA9PT0gMztcbiAgICAgICAgICAgIHZhciB1bml4QXR0cnMsIGlzU3ltbGluaztcbiAgICAgICAgICAgIGlmIChpc1VuaXgpIHtcbiAgICAgICAgICAgICAgICB1bml4QXR0cnMgPSB0aGlzLnBhcnNlZEVudGl0eS5leHRlcm5hbEZpbGVBdHRyaWJ1dGVzID4+PiAxNjtcbiAgICAgICAgICAgICAgICB2YXIgZmlsZVR5cGUgPSB1bml4QXR0cnMgPj4+IDEyO1xuICAgICAgICAgICAgICAgIGlzU3ltbGluayA9IChmaWxlVHlwZSAmIDBvMTIpID09PSAwbzEyOyAvLyBfX1NfSUZMTktcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZGVidWcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkZWJ1Z09iaiA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMucGFyc2VkRW50aXR5LCB7XG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IHBhdGgsXG4gICAgICAgICAgICAgICAgICAgIGZsYWdzOiAnMHgnICsgdGhpcy5wYXJzZWRFbnRpdHkuZmxhZ3MudG9TdHJpbmcoMTYpLFxuICAgICAgICAgICAgICAgICAgICB1bml4QXR0cnM6IHVuaXhBdHRycyAmJiAnMCcgKyB1bml4QXR0cnMudG9TdHJpbmcoOCksXG4gICAgICAgICAgICAgICAgICAgIGlzU3ltbGluazogaXNTeW1saW5rLFxuICAgICAgICAgICAgICAgICAgICBleHRyYUZpZWxkczogZXh0cmEuZGVidWcsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJkZWNvZGVkIENFTlRSQUxfRElSRUNUT1JZX0ZJTEVfSEVBREVSOlwiLCBKU09OLnN0cmluZ2lmeShkZWJ1Z09iaiwgbnVsbCwgMikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlcy5TVEFSVDtcblxuICAgICAgICAgICAgcmV0dXJuIHJlcXVpcmVkTGVuZ3RoO1xuXG4gICAgICAgIGNhc2Ugc3RhdGVzLkNESVI2NF9FTkQ6XG4gICAgICAgICAgICB0aGlzLnBhcnNlZEVudGl0eSA9IHRoaXMuX3JlYWRFbmRPZkNlbnRyYWxEaXJlY3Rvcnk2NChjaHVuayk7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmRlYnVnKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJkZWNvZGVkIENESVI2NF9FTkRfUkVDT1JEOlwiLCB0aGlzLnBhcnNlZEVudGl0eSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGVzLkNESVI2NF9FTkRfREFUQV9TRUNUT1I7XG5cbiAgICAgICAgICAgIHJldHVybiByZXF1aXJlZExlbmd0aDtcblxuICAgICAgICBjYXNlIHN0YXRlcy5DRElSNjRfRU5EX0RBVEFfU0VDVE9SOlxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlcy5TVEFSVDtcblxuICAgICAgICAgICAgcmV0dXJuIHJlcXVpcmVkTGVuZ3RoO1xuXG4gICAgICAgIGNhc2Ugc3RhdGVzLkNESVI2NF9MT0NBVE9SOlxuICAgICAgICAgICAgLy8gaWdub3JlLCBub3RoaW5nIGludGVyZXN0aW5nXG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGVzLlNUQVJUO1xuXG4gICAgICAgICAgICByZXR1cm4gcmVxdWlyZWRMZW5ndGg7XG5cbiAgICAgICAgY2FzZSBzdGF0ZXMuQ0VOVFJBTF9ESVJFQ1RPUllfRU5EOlxuICAgICAgICAgICAgdGhpcy5wYXJzZWRFbnRpdHkgPSB0aGlzLl9yZWFkRW5kT2ZDZW50cmFsRGlyZWN0b3J5KGNodW5rKTtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZGVidWcpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImRlY29kZWQgQ0VOVFJBTF9ESVJFQ1RPUllfRU5EOlwiLCB0aGlzLnBhcnNlZEVudGl0eSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGVzLkNFTlRSQUxfRElSRUNUT1JZX0VORF9DT01NRU5UO1xuXG4gICAgICAgICAgICByZXR1cm4gcmVxdWlyZWRMZW5ndGg7XG5cbiAgICAgICAgY2FzZSBzdGF0ZXMuQ0VOVFJBTF9ESVJFQ1RPUllfRU5EX0NPTU1FTlQ6XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmRlYnVnKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJkZWNvZGVkIENFTlRSQUxfRElSRUNUT1JZX0VORF9DT01NRU5UOlwiLCBjaHVuay5zbGljZSgwLCByZXF1aXJlZExlbmd0aCkudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGVzLlRSQUlMSU5HX0pVTks7XG5cbiAgICAgICAgICAgIHJldHVybiByZXF1aXJlZExlbmd0aDtcblxuICAgICAgICBjYXNlIHN0YXRlcy5FUlJPUjpcbiAgICAgICAgICAgIHJldHVybiBjaHVuay5sZW5ndGg7IC8vIGRpc2NhcmRcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJkaWRuJ3QgaGFuZGxlIHN0YXRlICNcIiwgdGhpcy5zdGF0ZSwgXCJkaXNjYXJkaW5nXCIpO1xuICAgICAgICAgICAgcmV0dXJuIGNodW5rLmxlbmd0aDtcbiAgICB9XG59XG5cblVuemlwU3RyZWFtLnByb3RvdHlwZS5fcHJlcGFyZU91dFN0cmVhbSA9IGZ1bmN0aW9uICh2YXJzLCBlbnRyeSkge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHZhciBpc0RpcmVjdG9yeSA9IHZhcnMudW5jb21wcmVzc2VkU2l6ZSA9PT0gMCAmJiAvW1xcL1xcXFxdJC8udGVzdChlbnRyeS5wYXRoKTtcbiAgICAvLyBwcm90ZWN0IGFnYWluc3QgbWFsaWNpb3VzIHppcCBmaWxlcyB3aGljaCB3YW50IHRvIGV4dHJhY3QgdG8gcGFyZW50IGRpcnNcbiAgICBlbnRyeS5wYXRoID0gZW50cnkucGF0aC5yZXBsYWNlKC8oPzw9XnxbL1xcXFxdKylbLl1bLl0rKD89Wy9cXFxcXSt8JCkvZywgXCIuXCIpO1xuICAgIGVudHJ5LnR5cGUgPSBpc0RpcmVjdG9yeSA/ICdEaXJlY3RvcnknIDogJ0ZpbGUnO1xuICAgIGVudHJ5LmlzRGlyZWN0b3J5ID0gaXNEaXJlY3Rvcnk7XG5cbiAgICB2YXIgZmlsZVNpemVLbm93biA9ICEodmFycy5mbGFncyAmIDB4MDgpO1xuICAgIGlmIChmaWxlU2l6ZUtub3duKSB7XG4gICAgICAgIGVudHJ5LnNpemUgPSB2YXJzLnVuY29tcHJlc3NlZFNpemU7XG4gICAgfVxuXG4gICAgdmFyIGlzVmVyc2lvblN1cHBvcnRlZCA9IHZhcnMudmVyc2lvbnNOZWVkZWRUb0V4dHJhY3QgPD0gNDU7XG5cbiAgICB0aGlzLm91dFN0cmVhbUluZm8gPSB7XG4gICAgICAgIHN0cmVhbTogbnVsbCxcbiAgICAgICAgbGltaXQ6IGZpbGVTaXplS25vd24gPyB2YXJzLmNvbXByZXNzZWRTaXplIDogLTEsXG4gICAgICAgIHdyaXR0ZW46IDBcbiAgICB9O1xuXG4gICAgaWYgKCFmaWxlU2l6ZUtub3duKSB7XG4gICAgICAgIHZhciBwYXR0ZXJuID0gbmV3IEJ1ZmZlcig0KTtcbiAgICAgICAgcGF0dGVybi53cml0ZVVJbnQzMkxFKFNJR19EQVRBX0RFU0NSSVBUT1IsIDApO1xuICAgICAgICB2YXIgemlwNjRNb2RlID0gdmFycy5leHRyYS56aXA2NE1vZGU7XG4gICAgICAgIHZhciBleHRyYVNpemUgPSB6aXA2NE1vZGUgPyAyMCA6IDEyO1xuICAgICAgICB2YXIgc2VhcmNoUGF0dGVybiA9IHtcbiAgICAgICAgICAgIHBhdHRlcm46IHBhdHRlcm4sXG4gICAgICAgICAgICByZXF1aXJlZEV4dHJhU2l6ZTogZXh0cmFTaXplXG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbWF0Y2hlclN0cmVhbSA9IG5ldyBNYXRjaGVyU3RyZWFtKHNlYXJjaFBhdHRlcm4sIGZ1bmN0aW9uIChtYXRjaGVkQ2h1bmssIHNpemVTb0Zhcikge1xuICAgICAgICAgICAgdmFyIHZhcnMgPSBzZWxmLl9yZWFkRGF0YURlc2NyaXB0b3IobWF0Y2hlZENodW5rLCB6aXA2NE1vZGUpO1xuXG4gICAgICAgICAgICB2YXIgY29tcHJlc3NlZFNpemVNYXRjaGVzID0gdmFycy5jb21wcmVzc2VkU2l6ZSA9PT0gc2l6ZVNvRmFyO1xuICAgICAgICAgICAgLy8gbGV0J3MgYWxzbyBkZWFsIHdpdGggYXJjaGl2ZXMgd2l0aCA0R2lCKyBmaWxlcyB3aXRob3V0IHppcDY0XG4gICAgICAgICAgICBpZiAoIXppcDY0TW9kZSAmJiAhY29tcHJlc3NlZFNpemVNYXRjaGVzICYmIHNpemVTb0ZhciA+PSBGT1VSX0dJR1MpIHtcbiAgICAgICAgICAgICAgICB2YXIgb3ZlcmZsb3duID0gc2l6ZVNvRmFyIC0gRk9VUl9HSUdTO1xuICAgICAgICAgICAgICAgIHdoaWxlIChvdmVyZmxvd24gPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICBjb21wcmVzc2VkU2l6ZU1hdGNoZXMgPSB2YXJzLmNvbXByZXNzZWRTaXplID09PSBvdmVyZmxvd247XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21wcmVzc2VkU2l6ZU1hdGNoZXMpIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBvdmVyZmxvd24gLT0gRk9VUl9HSUdTO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghY29tcHJlc3NlZFNpemVNYXRjaGVzKSB7IHJldHVybjsgfVxuXG4gICAgICAgICAgICBzZWxmLnN0YXRlID0gc3RhdGVzLkZJTEVfREFUQV9FTkQ7XG4gICAgICAgICAgICB2YXIgc2xpY2VPZmZzZXQgPSB6aXA2NE1vZGUgPyAyNCA6IDE2O1xuICAgICAgICAgICAgaWYgKHNlbGYuZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5kYXRhID0gQnVmZmVyLmNvbmNhdChbbWF0Y2hlZENodW5rLnNsaWNlKHNsaWNlT2Zmc2V0KSwgc2VsZi5kYXRhXSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNlbGYuZGF0YSA9IG1hdGNoZWRDaHVuay5zbGljZShzbGljZU9mZnNldCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5vdXRTdHJlYW1JbmZvLnN0cmVhbSA9IG1hdGNoZXJTdHJlYW07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vdXRTdHJlYW1JbmZvLnN0cmVhbSA9IG5ldyBzdHJlYW0uUGFzc1Rocm91Z2goKTtcbiAgICB9XG5cbiAgICB2YXIgaXNFbmNyeXB0ZWQgPSAodmFycy5mbGFncyAmIDB4MDEpIHx8ICh2YXJzLmZsYWdzICYgMHg0MCk7XG4gICAgaWYgKGlzRW5jcnlwdGVkIHx8ICFpc1ZlcnNpb25TdXBwb3J0ZWQpIHtcbiAgICAgICAgdmFyIG1lc3NhZ2UgPSBpc0VuY3J5cHRlZCA/IFwiRW5jcnlwdGVkIGZpbGVzIGFyZSBub3Qgc3VwcG9ydGVkIVwiXG4gICAgICAgICAgICA6IChcIlppcCB2ZXJzaW9uIFwiICsgTWF0aC5mbG9vcih2YXJzLnZlcnNpb25zTmVlZGVkVG9FeHRyYWN0IC8gMTApICsgXCIuXCIgKyB2YXJzLnZlcnNpb25zTmVlZGVkVG9FeHRyYWN0ICUgMTAgKyBcIiBpcyBub3Qgc3VwcG9ydGVkXCIpO1xuXG4gICAgICAgIGVudHJ5LnNraXAgPSB0cnVlO1xuICAgICAgICBzZXRJbW1lZGlhdGUoKCkgPT4ge1xuICAgICAgICAgICAgc2VsZi5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcihtZXNzYWdlKSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIHRyeSB0byBza2lwIG92ZXIgdGhpcyBlbnRyeVxuICAgICAgICB0aGlzLm91dFN0cmVhbUluZm8uc3RyZWFtLnBpcGUobmV3IEVudHJ5KCkuYXV0b2RyYWluKCkpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGlzQ29tcHJlc3NlZCA9IHZhcnMuY29tcHJlc3Npb25NZXRob2QgPiAwO1xuICAgIGlmIChpc0NvbXByZXNzZWQpIHtcbiAgICAgICAgdmFyIGluZmxhdGVyID0gemxpYi5jcmVhdGVJbmZsYXRlUmF3KCk7XG4gICAgICAgIGluZmxhdGVyLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIHNlbGYuc3RhdGUgPSBzdGF0ZXMuRVJST1I7XG4gICAgICAgICAgICBzZWxmLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMub3V0U3RyZWFtSW5mby5zdHJlYW0ucGlwZShpbmZsYXRlcikucGlwZShlbnRyeSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vdXRTdHJlYW1JbmZvLnN0cmVhbS5waXBlKGVudHJ5KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fZHJhaW5BbGxFbnRyaWVzKSB7XG4gICAgICAgIGVudHJ5LmF1dG9kcmFpbigpO1xuICAgIH1cbn1cblxuVW56aXBTdHJlYW0ucHJvdG90eXBlLl9yZWFkRmlsZSA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgdmFyIHZhcnMgPSBiaW5hcnkucGFyc2UoZGF0YSlcbiAgICAgICAgLndvcmQxNmx1KCd2ZXJzaW9uc05lZWRlZFRvRXh0cmFjdCcpXG4gICAgICAgIC53b3JkMTZsdSgnZmxhZ3MnKVxuICAgICAgICAud29yZDE2bHUoJ2NvbXByZXNzaW9uTWV0aG9kJylcbiAgICAgICAgLndvcmQxNmx1KCdsYXN0TW9kaWZpZWRUaW1lJylcbiAgICAgICAgLndvcmQxNmx1KCdsYXN0TW9kaWZpZWREYXRlJylcbiAgICAgICAgLndvcmQzMmx1KCdjcmMzMicpXG4gICAgICAgIC53b3JkMzJsdSgnY29tcHJlc3NlZFNpemUnKVxuICAgICAgICAud29yZDMybHUoJ3VuY29tcHJlc3NlZFNpemUnKVxuICAgICAgICAud29yZDE2bHUoJ2ZpbGVOYW1lTGVuZ3RoJylcbiAgICAgICAgLndvcmQxNmx1KCdleHRyYUZpZWxkTGVuZ3RoJylcbiAgICAgICAgLnZhcnM7XG5cbiAgICByZXR1cm4gdmFycztcbn1cblxuVW56aXBTdHJlYW0ucHJvdG90eXBlLl9yZWFkRXh0cmFGaWVsZHMgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgIHZhciBleHRyYSA9IHt9O1xuICAgIHZhciByZXN1bHQgPSB7IHBhcnNlZDogZXh0cmEgfTtcbiAgICBpZiAodGhpcy5vcHRpb25zLmRlYnVnKSB7XG4gICAgICAgIHJlc3VsdC5kZWJ1ZyA9IFtdO1xuICAgIH1cbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHdoaWxlIChpbmRleCA8IGRhdGEubGVuZ3RoKSB7XG4gICAgICAgIHZhciB2YXJzID0gYmluYXJ5LnBhcnNlKGRhdGEpXG4gICAgICAgICAgICAuc2tpcChpbmRleClcbiAgICAgICAgICAgIC53b3JkMTZsdSgnZXh0cmFJZCcpXG4gICAgICAgICAgICAud29yZDE2bHUoJ2V4dHJhU2l6ZScpXG4gICAgICAgICAgICAudmFycztcblxuICAgICAgICBpbmRleCArPSA0O1xuXG4gICAgICAgIHZhciBmaWVsZFR5cGUgPSB1bmRlZmluZWQ7XG4gICAgICAgIHN3aXRjaCAodmFycy5leHRyYUlkKSB7XG4gICAgICAgICAgICBjYXNlIDB4MDAwMTpcbiAgICAgICAgICAgICAgICBmaWVsZFR5cGUgPSBcIlppcDY0IGV4dGVuZGVkIGluZm9ybWF0aW9uIGV4dHJhIGZpZWxkXCI7XG4gICAgICAgICAgICAgICAgdmFyIHo2NHZhcnMgPSBiaW5hcnkucGFyc2UoZGF0YS5zbGljZShpbmRleCwgaW5kZXgrdmFycy5leHRyYVNpemUpKVxuICAgICAgICAgICAgICAgICAgICAud29yZDY0bHUoJ3VuY29tcHJlc3NlZFNpemUnKVxuICAgICAgICAgICAgICAgICAgICAud29yZDY0bHUoJ2NvbXByZXNzZWRTaXplJylcbiAgICAgICAgICAgICAgICAgICAgLndvcmQ2NGx1KCdvZmZzZXRUb0xvY2FsSGVhZGVyJylcbiAgICAgICAgICAgICAgICAgICAgLndvcmQzMmx1KCdkaXNrU3RhcnROdW1iZXInKVxuICAgICAgICAgICAgICAgICAgICAudmFycztcbiAgICAgICAgICAgICAgICBpZiAoejY0dmFycy51bmNvbXByZXNzZWRTaXplICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4dHJhLnVuY29tcHJlc3NlZFNpemUgPSB6NjR2YXJzLnVuY29tcHJlc3NlZFNpemU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh6NjR2YXJzLmNvbXByZXNzZWRTaXplICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4dHJhLmNvbXByZXNzZWRTaXplID0gejY0dmFycy5jb21wcmVzc2VkU2l6ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZXh0cmEuemlwNjRNb2RlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMHgwMDBhOlxuICAgICAgICAgICAgICAgIGZpZWxkVHlwZSA9IFwiTlRGUyBleHRyYSBmaWVsZFwiO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAweDU0NTU6XG4gICAgICAgICAgICAgICAgZmllbGRUeXBlID0gXCJleHRlbmRlZCB0aW1lc3RhbXBcIjtcbiAgICAgICAgICAgICAgICB2YXIgdGltZXN0YW1wRmllbGRzID0gZGF0YS5yZWFkVUludDgoaW5kZXgpO1xuICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSAxO1xuICAgICAgICAgICAgICAgIGlmICh2YXJzLmV4dHJhU2l6ZSA+PSBvZmZzZXQgKyA0ICYmIHRpbWVzdGFtcEZpZWxkcyAmIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgZXh0cmEubXRpbWUgPSBuZXcgRGF0ZShkYXRhLnJlYWRVSW50MzJMRShpbmRleCArIG9mZnNldCkgKiAxMDAwKTtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh2YXJzLmV4dHJhU2l6ZSA+PSBvZmZzZXQgKyA0ICYmIHRpbWVzdGFtcEZpZWxkcyAmIDIpIHtcbiAgICAgICAgICAgICAgICAgICAgZXh0cmEuYXRpbWUgPSBuZXcgRGF0ZShkYXRhLnJlYWRVSW50MzJMRShpbmRleCArIG9mZnNldCkgKiAxMDAwKTtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh2YXJzLmV4dHJhU2l6ZSA+PSBvZmZzZXQgKyA0ICYmIHRpbWVzdGFtcEZpZWxkcyAmIDQpIHtcbiAgICAgICAgICAgICAgICAgICAgZXh0cmEuY3RpbWUgPSBuZXcgRGF0ZShkYXRhLnJlYWRVSW50MzJMRShpbmRleCArIG9mZnNldCkgKiAxMDAwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDB4NzA3NTpcbiAgICAgICAgICAgICAgICBmaWVsZFR5cGUgPSBcIkluZm8tWklQIFVuaWNvZGUgUGF0aCBFeHRyYSBGaWVsZFwiO1xuICAgICAgICAgICAgICAgIHZhciBmaWVsZFZlciA9IGRhdGEucmVhZFVJbnQ4KGluZGV4KTtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGRWZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IDE7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IHNob3VsZCBiZSBjaGVja2luZyB0aGlzIGFnYWluc3Qgb3VyIHBhdGggYnVmZmVyXG4gICAgICAgICAgICAgICAgICAgIHZhciBuYW1lQ3JjMzIgPSBkYXRhLnJlYWRVSW50MzJMRShpbmRleCArIG9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSA0O1xuICAgICAgICAgICAgICAgICAgICB2YXIgcGF0aEJ1ZmZlciA9IGRhdGEuc2xpY2UoaW5kZXggKyBvZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICBleHRyYS5wYXRoID0gcGF0aEJ1ZmZlci50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMHgwMDBkOlxuICAgICAgICAgICAgY2FzZSAweDU4NTU6XG4gICAgICAgICAgICAgICAgZmllbGRUeXBlID0gdmFycy5leHRyYUlkID09PSAweDAwMGQgPyBcIlBLV0FSRSBVbml4XCIgOiBcIkluZm8tWklQIFVOSVggKHR5cGUgMSlcIjtcbiAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gMDtcbiAgICAgICAgICAgICAgICBpZiAodmFycy5leHRyYVNpemUgPj0gOCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYXRpbWUgPSBuZXcgRGF0ZShkYXRhLnJlYWRVSW50MzJMRShpbmRleCArIG9mZnNldCkgKiAxMDAwKTtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDQ7XG4gICAgICAgICAgICAgICAgICAgIHZhciBtdGltZSA9IG5ldyBEYXRlKGRhdGEucmVhZFVJbnQzMkxFKGluZGV4ICsgb2Zmc2V0KSAqIDEwMDApO1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gNDtcbiAgICAgICAgICAgICAgICAgICAgZXh0cmEuYXRpbWUgPSBhdGltZTtcbiAgICAgICAgICAgICAgICAgICAgZXh0cmEubXRpbWUgPSBtdGltZTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodmFycy5leHRyYVNpemUgPj0gMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1aWQgPSBkYXRhLnJlYWRVSW50MTZMRShpbmRleCArIG9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnaWQgPSBkYXRhLnJlYWRVSW50MTZMRShpbmRleCArIG9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhLnVpZCA9IHVpZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhLmdpZCA9IGdpZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMHg3ODU1OlxuICAgICAgICAgICAgICAgIGZpZWxkVHlwZSA9IFwiSW5mby1aSVAgVU5JWCAodHlwZSAyKVwiO1xuICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSAwO1xuICAgICAgICAgICAgICAgIGlmICh2YXJzLmV4dHJhU2l6ZSA+PSA0KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB1aWQgPSBkYXRhLnJlYWRVSW50MTZMRShpbmRleCArIG9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSAyO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZ2lkID0gZGF0YS5yZWFkVUludDE2TEUoaW5kZXggKyBvZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gMjtcbiAgICAgICAgICAgICAgICAgICAgZXh0cmEudWlkID0gdWlkO1xuICAgICAgICAgICAgICAgICAgICBleHRyYS5naWQgPSBnaWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAweDc4NzU6XG4gICAgICAgICAgICAgICAgZmllbGRUeXBlID0gXCJJbmZvLVpJUCBOZXcgVW5peFwiO1xuICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSAwO1xuICAgICAgICAgICAgICAgIHZhciBleHRyYVZlciA9IGRhdGEucmVhZFVJbnQ4KGluZGV4KTtcbiAgICAgICAgICAgICAgICBvZmZzZXQgKz0gMTtcbiAgICAgICAgICAgICAgICBpZiAoZXh0cmFWZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHVpZFNpemUgPSBkYXRhLnJlYWRVSW50OChpbmRleCArIG9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSAxO1xuICAgICAgICAgICAgICAgICAgICBpZiAodWlkU2l6ZSA8PSA2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYS51aWQgPSBkYXRhLnJlYWRVSW50TEUoaW5kZXggKyBvZmZzZXQsIHVpZFNpemUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSB1aWRTaXplO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBnaWRTaXplID0gZGF0YS5yZWFkVUludDgoaW5kZXggKyBvZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGdpZFNpemUgPD0gNikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEuZ2lkID0gZGF0YS5yZWFkVUludExFKGluZGV4ICsgb2Zmc2V0LCBnaWRTaXplKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMHg3NTZlOlxuICAgICAgICAgICAgICAgIGZpZWxkVHlwZSA9IFwiQVNpIFVuaXhcIjtcbiAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gMDtcbiAgICAgICAgICAgICAgICBpZiAodmFycy5leHRyYVNpemUgPj0gMTQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNyYyA9IGRhdGEucmVhZFVJbnQzMkxFKGluZGV4ICsgb2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDQ7XG4gICAgICAgICAgICAgICAgICAgIHZhciBtb2RlID0gZGF0YS5yZWFkVUludDE2TEUoaW5kZXggKyBvZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gMjtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNpemRldiA9IGRhdGEucmVhZFVJbnQzMkxFKGluZGV4ICsgb2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDQ7XG4gICAgICAgICAgICAgICAgICAgIHZhciB1aWQgPSBkYXRhLnJlYWRVSW50MTZMRShpbmRleCArIG9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSAyO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZ2lkID0gZGF0YS5yZWFkVUludDE2TEUoaW5kZXggKyBvZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gMjtcbiAgICAgICAgICAgICAgICAgICAgZXh0cmEubW9kZSA9IG1vZGU7XG4gICAgICAgICAgICAgICAgICAgIGV4dHJhLnVpZCA9IHVpZDtcbiAgICAgICAgICAgICAgICAgICAgZXh0cmEuZ2lkID0gZ2lkO1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFycy5leHRyYVNpemUgPiAxNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gaW5kZXggKyBvZmZzZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kID0gaW5kZXggKyB2YXJzLmV4dHJhU2l6ZSAtIDE0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN5bWxpbmtOYW1lID0gdGhpcy5fZGVjb2RlU3RyaW5nKGRhdGEuc2xpY2Uoc3RhcnQsIGVuZCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEuc3ltbGluayA9IHN5bWxpbmtOYW1lO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5kZWJ1Zykge1xuICAgICAgICAgICAgcmVzdWx0LmRlYnVnLnB1c2goe1xuICAgICAgICAgICAgICAgIGV4dHJhSWQ6ICcweCcgKyB2YXJzLmV4dHJhSWQudG9TdHJpbmcoMTYpLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBmaWVsZFR5cGUsXG4gICAgICAgICAgICAgICAgZGF0YTogZGF0YS5zbGljZShpbmRleCwgaW5kZXggKyB2YXJzLmV4dHJhU2l6ZSkuaW5zcGVjdCgpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGluZGV4ICs9IHZhcnMuZXh0cmFTaXplO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cblVuemlwU3RyZWFtLnByb3RvdHlwZS5fcmVhZERhdGFEZXNjcmlwdG9yID0gZnVuY3Rpb24gKGRhdGEsIHppcDY0TW9kZSkge1xuICAgIGlmICh6aXA2NE1vZGUpIHtcbiAgICAgICAgdmFyIHZhcnMgPSBiaW5hcnkucGFyc2UoZGF0YSlcbiAgICAgICAgICAgIC53b3JkMzJsdSgnZGF0YURlc2NyaXB0b3JTaWduYXR1cmUnKVxuICAgICAgICAgICAgLndvcmQzMmx1KCdjcmMzMicpXG4gICAgICAgICAgICAud29yZDY0bHUoJ2NvbXByZXNzZWRTaXplJylcbiAgICAgICAgICAgIC53b3JkNjRsdSgndW5jb21wcmVzc2VkU2l6ZScpXG4gICAgICAgICAgICAudmFycztcblxuICAgICAgICByZXR1cm4gdmFycztcbiAgICB9XG5cbiAgICB2YXIgdmFycyA9IGJpbmFyeS5wYXJzZShkYXRhKVxuICAgICAgICAud29yZDMybHUoJ2RhdGFEZXNjcmlwdG9yU2lnbmF0dXJlJylcbiAgICAgICAgLndvcmQzMmx1KCdjcmMzMicpXG4gICAgICAgIC53b3JkMzJsdSgnY29tcHJlc3NlZFNpemUnKVxuICAgICAgICAud29yZDMybHUoJ3VuY29tcHJlc3NlZFNpemUnKVxuICAgICAgICAudmFycztcblxuICAgIHJldHVybiB2YXJzO1xufVxuXG5VbnppcFN0cmVhbS5wcm90b3R5cGUuX3JlYWRDZW50cmFsRGlyZWN0b3J5RW50cnkgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgIHZhciB2YXJzID0gYmluYXJ5LnBhcnNlKGRhdGEpXG4gICAgICAgIC53b3JkMTZsdSgndmVyc2lvbk1hZGVCeScpXG4gICAgICAgIC53b3JkMTZsdSgndmVyc2lvbnNOZWVkZWRUb0V4dHJhY3QnKVxuICAgICAgICAud29yZDE2bHUoJ2ZsYWdzJylcbiAgICAgICAgLndvcmQxNmx1KCdjb21wcmVzc2lvbk1ldGhvZCcpXG4gICAgICAgIC53b3JkMTZsdSgnbGFzdE1vZGlmaWVkVGltZScpXG4gICAgICAgIC53b3JkMTZsdSgnbGFzdE1vZGlmaWVkRGF0ZScpXG4gICAgICAgIC53b3JkMzJsdSgnY3JjMzInKVxuICAgICAgICAud29yZDMybHUoJ2NvbXByZXNzZWRTaXplJylcbiAgICAgICAgLndvcmQzMmx1KCd1bmNvbXByZXNzZWRTaXplJylcbiAgICAgICAgLndvcmQxNmx1KCdmaWxlTmFtZUxlbmd0aCcpXG4gICAgICAgIC53b3JkMTZsdSgnZXh0cmFGaWVsZExlbmd0aCcpXG4gICAgICAgIC53b3JkMTZsdSgnZmlsZUNvbW1lbnRMZW5ndGgnKVxuICAgICAgICAud29yZDE2bHUoJ2Rpc2tOdW1iZXInKVxuICAgICAgICAud29yZDE2bHUoJ2ludGVybmFsRmlsZUF0dHJpYnV0ZXMnKVxuICAgICAgICAud29yZDMybHUoJ2V4dGVybmFsRmlsZUF0dHJpYnV0ZXMnKVxuICAgICAgICAud29yZDMybHUoJ29mZnNldFRvTG9jYWxGaWxlSGVhZGVyJylcbiAgICAgICAgLnZhcnM7XG5cbiAgICByZXR1cm4gdmFycztcbn1cblxuVW56aXBTdHJlYW0ucHJvdG90eXBlLl9yZWFkRW5kT2ZDZW50cmFsRGlyZWN0b3J5NjQgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgIHZhciB2YXJzID0gYmluYXJ5LnBhcnNlKGRhdGEpXG4gICAgICAgIC53b3JkNjRsdSgnY2VudHJhbERpcmVjdG9yeVJlY29yZFNpemUnKVxuICAgICAgICAud29yZDE2bHUoJ3ZlcnNpb25NYWRlQnknKVxuICAgICAgICAud29yZDE2bHUoJ3ZlcnNpb25zTmVlZGVkVG9FeHRyYWN0JylcbiAgICAgICAgLndvcmQzMmx1KCdkaXNrTnVtYmVyJylcbiAgICAgICAgLndvcmQzMmx1KCdkaXNrTnVtYmVyV2l0aENlbnRyYWxEaXJlY3RvcnlTdGFydCcpXG4gICAgICAgIC53b3JkNjRsdSgnY2VudHJhbERpcmVjdG9yeUVudHJpZXMnKVxuICAgICAgICAud29yZDY0bHUoJ3RvdGFsQ2VudHJhbERpcmVjdG9yeUVudHJpZXMnKVxuICAgICAgICAud29yZDY0bHUoJ3NpemVPZkNlbnRyYWxEaXJlY3RvcnknKVxuICAgICAgICAud29yZDY0bHUoJ29mZnNldFRvU3RhcnRPZkNlbnRyYWxEaXJlY3RvcnknKVxuICAgICAgICAudmFycztcblxuICAgIHJldHVybiB2YXJzO1xufVxuXG5VbnppcFN0cmVhbS5wcm90b3R5cGUuX3JlYWRFbmRPZkNlbnRyYWxEaXJlY3RvcnkgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgIHZhciB2YXJzID0gYmluYXJ5LnBhcnNlKGRhdGEpXG4gICAgICAgIC53b3JkMTZsdSgnZGlza051bWJlcicpXG4gICAgICAgIC53b3JkMTZsdSgnZGlza1N0YXJ0JylcbiAgICAgICAgLndvcmQxNmx1KCdjZW50cmFsRGlyZWN0b3J5RW50cmllcycpXG4gICAgICAgIC53b3JkMTZsdSgndG90YWxDZW50cmFsRGlyZWN0b3J5RW50cmllcycpXG4gICAgICAgIC53b3JkMzJsdSgnc2l6ZU9mQ2VudHJhbERpcmVjdG9yeScpXG4gICAgICAgIC53b3JkMzJsdSgnb2Zmc2V0VG9TdGFydE9mQ2VudHJhbERpcmVjdG9yeScpXG4gICAgICAgIC53b3JkMTZsdSgnY29tbWVudExlbmd0aCcpXG4gICAgICAgIC52YXJzO1xuXG4gICAgcmV0dXJuIHZhcnM7XG59XG5cbmNvbnN0IGNwNDM3ID0gJ1xcdTAwMDDimLrimLvimaXimabimaPimaDigKLil5jil4vil5nimYLimYDimarimavimLzilrril4TihpXigLzCtsKn4pas4oao4oaR4oaT4oaS4oaQ4oif4oaU4pay4pa8ICFcIiMkJSZcXCcoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX7ijILDh8O8w6nDosOkw6DDpcOnw6rDq8Oow6/DrsOsw4TDhcOJw6bDhsO0w7bDssO7w7nDv8OWw5zCosKjwqXigqfGksOhw63Ds8O6w7HDkcKqwrrCv+KMkMKswr3CvMKhwqvCu+KWkeKWkuKWk+KUguKUpOKVoeKVouKVluKVleKVo+KVkeKVl+KVneKVnOKVm+KUkOKUlOKUtOKUrOKUnOKUgOKUvOKVnuKVn+KVmuKVlOKVqeKVpuKVoOKVkOKVrOKVp+KVqOKVpOKVpeKVmeKVmOKVkuKVk+KVq+KVquKUmOKUjOKWiOKWhOKWjOKWkOKWgM6xw5/Ok8+AzqPPg8K1z4TOps6YzqnOtOKIns+GzrXiiKniiaHCseKJpeKJpOKMoOKMocO34omIwrDiiJnCt+KImuKBv8Ky4pagICc7XG5cblVuemlwU3RyZWFtLnByb3RvdHlwZS5fZGVjb2RlU3RyaW5nID0gZnVuY3Rpb24gKGJ1ZmZlciwgaXNVdGY4KSB7XG4gICAgaWYgKGlzVXRmOCkge1xuICAgICAgICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCd1dGY4Jyk7XG4gICAgfVxuICAgIC8vIGFsbG93IHBhc3NpbmcgY3VzdG9tIGRlY29kZXJcbiAgICBpZiAodGhpcy5vcHRpb25zLmRlY29kZVN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmRlY29kZVN0cmluZyhidWZmZXIpO1xuICAgIH1cbiAgICBsZXQgcmVzdWx0ID0gXCJcIjtcbiAgICBmb3IgKHZhciBpPTA7IGk8YnVmZmVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlc3VsdCArPSBjcDQzN1tidWZmZXJbaV1dO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5VbnppcFN0cmVhbS5wcm90b3R5cGUuX3BhcnNlT3JPdXRwdXQgPSBmdW5jdGlvbiAoZW5jb2RpbmcsIGNiKSB7XG4gICAgdmFyIGNvbnN1bWU7XG4gICAgd2hpbGUgKChjb25zdW1lID0gdGhpcy5wcm9jZXNzRGF0YUNodW5rKHRoaXMuZGF0YSkpID4gMCkge1xuICAgICAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGEuc2xpY2UoY29uc3VtZSk7XG4gICAgICAgIGlmICh0aGlzLmRhdGEubGVuZ3RoID09PSAwKSBicmVhaztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zdGF0ZSA9PT0gc3RhdGVzLkZJTEVfREFUQSkge1xuICAgICAgICBpZiAodGhpcy5vdXRTdHJlYW1JbmZvLmxpbWl0ID49IDApIHtcbiAgICAgICAgICAgIHZhciByZW1haW5pbmcgPSB0aGlzLm91dFN0cmVhbUluZm8ubGltaXQgLSB0aGlzLm91dFN0cmVhbUluZm8ud3JpdHRlbjtcbiAgICAgICAgICAgIHZhciBwYWNrZXQ7XG4gICAgICAgICAgICBpZiAocmVtYWluaW5nIDwgdGhpcy5kYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHBhY2tldCA9IHRoaXMuZGF0YS5zbGljZSgwLCByZW1haW5pbmcpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IHRoaXMuZGF0YS5zbGljZShyZW1haW5pbmcpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwYWNrZXQgPSB0aGlzLmRhdGE7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gbmV3IEJ1ZmZlcignJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMub3V0U3RyZWFtSW5mby53cml0dGVuICs9IHBhY2tldC5sZW5ndGg7XG4gICAgICAgICAgICBpZiAodGhpcy5vdXRTdHJlYW1JbmZvLmxpbWl0ID09PSB0aGlzLm91dFN0cmVhbUluZm8ud3JpdHRlbikge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZXMuU1RBUlQ7XG5cbiAgICAgICAgICAgICAgICB0aGlzLm91dFN0cmVhbUluZm8uc3RyZWFtLmVuZChwYWNrZXQsIGVuY29kaW5nLCBjYik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMub3V0U3RyZWFtSW5mby5zdHJlYW0ud3JpdGUocGFja2V0LCBlbmNvZGluZywgY2IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHBhY2tldCA9IHRoaXMuZGF0YTtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IG5ldyBCdWZmZXIoJycpO1xuXG4gICAgICAgICAgICB0aGlzLm91dFN0cmVhbUluZm8ud3JpdHRlbiArPSBwYWNrZXQubGVuZ3RoO1xuICAgICAgICAgICAgdmFyIG91dHB1dFN0cmVhbSA9IHRoaXMub3V0U3RyZWFtSW5mby5zdHJlYW07XG4gICAgICAgICAgICBvdXRwdXRTdHJlYW0ud3JpdGUocGFja2V0LCBlbmNvZGluZywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXRlID09PSBzdGF0ZXMuRklMRV9EQVRBX0VORCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGVzLlNUQVJUO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3V0cHV0U3RyZWFtLmVuZChjYik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNiKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyB3ZSd2ZSB3cml0dGVuIHRvIHRoZSBvdXRwdXQgc3RyZWFtLCBsZXR0aW5nIHRoYXQgd3JpdGUgZGVhbCB3aXRoIHRoZSBjYWxsYmFja1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY2IoKTtcbn1cblxuVW56aXBTdHJlYW0ucHJvdG90eXBlLmRyYWluQWxsID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuX2RyYWluQWxsRW50cmllcyA9IHRydWU7XG59XG5cblVuemlwU3RyZWFtLnByb3RvdHlwZS5fdHJhbnNmb3JtID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgaWYgKHNlbGYuZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHNlbGYuZGF0YSA9IEJ1ZmZlci5jb25jYXQoW3NlbGYuZGF0YSwgY2h1bmtdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBzZWxmLmRhdGEgPSBjaHVuaztcbiAgICB9XG5cbiAgICB2YXIgc3RhcnREYXRhTGVuZ3RoID0gc2VsZi5kYXRhLmxlbmd0aDtcbiAgICB2YXIgZG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHNlbGYuZGF0YS5sZW5ndGggPiAwICYmIHNlbGYuZGF0YS5sZW5ndGggPCBzdGFydERhdGFMZW5ndGgpIHtcbiAgICAgICAgICAgIHN0YXJ0RGF0YUxlbmd0aCA9IHNlbGYuZGF0YS5sZW5ndGg7XG4gICAgICAgICAgICBzZWxmLl9wYXJzZU9yT3V0cHV0KGVuY29kaW5nLCBkb25lKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjYigpO1xuICAgIH07XG4gICAgc2VsZi5fcGFyc2VPck91dHB1dChlbmNvZGluZywgZG9uZSk7XG59XG5cblVuemlwU3RyZWFtLnByb3RvdHlwZS5fZmx1c2ggPSBmdW5jdGlvbiAoY2IpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgaWYgKHNlbGYuZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHNlbGYuX3BhcnNlT3JPdXRwdXQoJ2J1ZmZlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChzZWxmLmRhdGEubGVuZ3RoID4gMCkgcmV0dXJuIHNldEltbWVkaWF0ZShmdW5jdGlvbiAoKSB7IHNlbGYuX2ZsdXNoKGNiKTsgfSk7XG4gICAgICAgICAgICBjYigpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHNlbGYuc3RhdGUgPT09IHN0YXRlcy5GSUxFX0RBVEEpIHtcbiAgICAgICAgLy8gdWggb2gsIHNvbWV0aGluZyB3ZW50IHdyb25nXG4gICAgICAgIHJldHVybiBjYihuZXcgRXJyb3IoXCJTdHJlYW0gZmluaXNoZWQgaW4gYW4gaW52YWxpZCBzdGF0ZSwgdW5jb21wcmVzc2lvbiBmYWlsZWRcIikpO1xuICAgIH1cblxuICAgIHNldEltbWVkaWF0ZShjYik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVW56aXBTdHJlYW07XG4iLAogICAgInZhciBUcmFuc2Zvcm0gPSByZXF1aXJlKCdzdHJlYW0nKS5UcmFuc2Zvcm07XG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbnZhciBVbnppcFN0cmVhbSA9IHJlcXVpcmUoJy4vdW56aXAtc3RyZWFtJyk7XG5cbmZ1bmN0aW9uIFBhcnNlclN0cmVhbShvcHRzKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFBhcnNlclN0cmVhbSkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQYXJzZXJTdHJlYW0ob3B0cyk7XG4gICAgfVxuXG4gICAgdmFyIHRyYW5zZm9ybU9wdHMgPSBvcHRzIHx8IHt9O1xuICAgIFRyYW5zZm9ybS5jYWxsKHRoaXMsIHsgcmVhZGFibGVPYmplY3RNb2RlOiB0cnVlIH0pO1xuXG4gICAgdGhpcy5vcHRzID0gb3B0cyB8fCB7fTtcbiAgICB0aGlzLnVuemlwU3RyZWFtID0gbmV3IFVuemlwU3RyZWFtKHRoaXMub3B0cyk7XG5cbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy51bnppcFN0cmVhbS5vbignZW50cnknLCBmdW5jdGlvbihlbnRyeSkge1xuICAgICAgICBzZWxmLnB1c2goZW50cnkpO1xuICAgIH0pO1xuICAgIHRoaXMudW56aXBTdHJlYW0ub24oJ2Vycm9yJywgZnVuY3Rpb24oZXJyb3IpIHtcbiAgICAgICAgc2VsZi5lbWl0KCdlcnJvcicsIGVycm9yKTtcbiAgICB9KTtcbn1cblxudXRpbC5pbmhlcml0cyhQYXJzZXJTdHJlYW0sIFRyYW5zZm9ybSk7XG5cblBhcnNlclN0cmVhbS5wcm90b3R5cGUuX3RyYW5zZm9ybSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gICAgdGhpcy51bnppcFN0cmVhbS53cml0ZShjaHVuaywgZW5jb2RpbmcsIGNiKTtcbn1cblxuUGFyc2VyU3RyZWFtLnByb3RvdHlwZS5fZmx1c2ggPSBmdW5jdGlvbiAoY2IpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy51bnppcFN0cmVhbS5lbmQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24oKSB7IHNlbGYuZW1pdCgnY2xvc2UnKTsgfSk7XG4gICAgICAgIGNiKCk7XG4gICAgfSk7XG59XG5cblBhcnNlclN0cmVhbS5wcm90b3R5cGUub24gPSBmdW5jdGlvbihldmVudE5hbWUsIGZuKSB7XG4gICAgaWYgKGV2ZW50TmFtZSA9PT0gJ2VudHJ5Jykge1xuICAgICAgICByZXR1cm4gVHJhbnNmb3JtLnByb3RvdHlwZS5vbi5jYWxsKHRoaXMsICdkYXRhJywgZm4pO1xuICAgIH1cbiAgICByZXR1cm4gVHJhbnNmb3JtLnByb3RvdHlwZS5vbi5jYWxsKHRoaXMsIGV2ZW50TmFtZSwgZm4pO1xufVxuXG5QYXJzZXJTdHJlYW0ucHJvdG90eXBlLmRyYWluQWxsID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMudW56aXBTdHJlYW0uZHJhaW5BbGwoKTtcbiAgICByZXR1cm4gdGhpcy5waXBlKG5ldyBUcmFuc2Zvcm0oeyBvYmplY3RNb2RlOiB0cnVlLCB0cmFuc2Zvcm06IGZ1bmN0aW9uIChkLCBlLCBjYikgeyBjYigpOyB9IH0pKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBQYXJzZXJTdHJlYW07XG4iLAogICAgInZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xudmFyIGZzID0gcmVxdWlyZSgnZnMnKTtcbnZhciBfMDc3NyA9IHBhcnNlSW50KCcwNzc3JywgOCk7XG5cbm1vZHVsZS5leHBvcnRzID0gbWtkaXJQLm1rZGlycCA9IG1rZGlyUC5ta2RpclAgPSBta2RpclA7XG5cbmZ1bmN0aW9uIG1rZGlyUCAocCwgb3B0cywgZiwgbWFkZSkge1xuICAgIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBmID0gb3B0cztcbiAgICAgICAgb3B0cyA9IHt9O1xuICAgIH1cbiAgICBlbHNlIGlmICghb3B0cyB8fCB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgb3B0cyA9IHsgbW9kZTogb3B0cyB9O1xuICAgIH1cbiAgICBcbiAgICB2YXIgbW9kZSA9IG9wdHMubW9kZTtcbiAgICB2YXIgeGZzID0gb3B0cy5mcyB8fCBmcztcbiAgICBcbiAgICBpZiAobW9kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG1vZGUgPSBfMDc3N1xuICAgIH1cbiAgICBpZiAoIW1hZGUpIG1hZGUgPSBudWxsO1xuICAgIFxuICAgIHZhciBjYiA9IGYgfHwgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gZnVuY3Rpb24gKCkge307XG4gICAgcCA9IHBhdGgucmVzb2x2ZShwKTtcbiAgICBcbiAgICB4ZnMubWtkaXIocCwgbW9kZSwgZnVuY3Rpb24gKGVyKSB7XG4gICAgICAgIGlmICghZXIpIHtcbiAgICAgICAgICAgIG1hZGUgPSBtYWRlIHx8IHA7XG4gICAgICAgICAgICByZXR1cm4gY2IobnVsbCwgbWFkZSk7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChlci5jb2RlKSB7XG4gICAgICAgICAgICBjYXNlICdFTk9FTlQnOlxuICAgICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgICAgIGlmIChwYXRoLmRpcm5hbWUocCkgPT09IHApIHJldHVybiBjYihlcik7XG4gICAgICAgICAgICAgICAgbWtkaXJQKHBhdGguZGlybmFtZShwKSwgb3B0cywgZnVuY3Rpb24gKGVyLCBtYWRlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXIpIGNiKGVyLCBtYWRlKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBta2RpclAocCwgb3B0cywgY2IsIG1hZGUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBJbiB0aGUgY2FzZSBvZiBhbnkgb3RoZXIgZXJyb3IsIGp1c3Qgc2VlIGlmIHRoZXJlJ3MgYSBkaXJcbiAgICAgICAgICAgIC8vIHRoZXJlIGFscmVhZHkuICBJZiBzbywgdGhlbiBob29yYXkhICBJZiBub3QsIHRoZW4gc29tZXRoaW5nXG4gICAgICAgICAgICAvLyBpcyBib3JrZWQuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHhmcy5zdGF0KHAsIGZ1bmN0aW9uIChlcjIsIHN0YXQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlIHN0YXQgZmFpbHMsIHRoZW4gdGhhdCdzIHN1cGVyIHdlaXJkLlxuICAgICAgICAgICAgICAgICAgICAvLyBsZXQgdGhlIG9yaWdpbmFsIGVycm9yIGJlIHRoZSBmYWlsdXJlIHJlYXNvbi5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGVyMiB8fCAhc3RhdC5pc0RpcmVjdG9yeSgpKSBjYihlciwgbWFkZSlcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBjYihudWxsLCBtYWRlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG5ta2RpclAuc3luYyA9IGZ1bmN0aW9uIHN5bmMgKHAsIG9wdHMsIG1hZGUpIHtcbiAgICBpZiAoIW9wdHMgfHwgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIG9wdHMgPSB7IG1vZGU6IG9wdHMgfTtcbiAgICB9XG4gICAgXG4gICAgdmFyIG1vZGUgPSBvcHRzLm1vZGU7XG4gICAgdmFyIHhmcyA9IG9wdHMuZnMgfHwgZnM7XG4gICAgXG4gICAgaWYgKG1vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBtb2RlID0gXzA3NzdcbiAgICB9XG4gICAgaWYgKCFtYWRlKSBtYWRlID0gbnVsbDtcblxuICAgIHAgPSBwYXRoLnJlc29sdmUocCk7XG5cbiAgICB0cnkge1xuICAgICAgICB4ZnMubWtkaXJTeW5jKHAsIG1vZGUpO1xuICAgICAgICBtYWRlID0gbWFkZSB8fCBwO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyMCkge1xuICAgICAgICBzd2l0Y2ggKGVycjAuY29kZSkge1xuICAgICAgICAgICAgY2FzZSAnRU5PRU5UJyA6XG4gICAgICAgICAgICAgICAgbWFkZSA9IHN5bmMocGF0aC5kaXJuYW1lKHApLCBvcHRzLCBtYWRlKTtcbiAgICAgICAgICAgICAgICBzeW5jKHAsIG9wdHMsIG1hZGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBJbiB0aGUgY2FzZSBvZiBhbnkgb3RoZXIgZXJyb3IsIGp1c3Qgc2VlIGlmIHRoZXJlJ3MgYSBkaXJcbiAgICAgICAgICAgIC8vIHRoZXJlIGFscmVhZHkuICBJZiBzbywgdGhlbiBob29yYXkhICBJZiBub3QsIHRoZW4gc29tZXRoaW5nXG4gICAgICAgICAgICAvLyBpcyBib3JrZWQuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHZhciBzdGF0O1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXQgPSB4ZnMuc3RhdFN5bmMocCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIxKSAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVycjA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgICAgIGlmICghc3RhdC5pc0RpcmVjdG9yeSgpKSB0aHJvdyBlcnIwO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hZGU7XG59O1xuIiwKICAgICJ2YXIgZnMgPSByZXF1aXJlKCdmcycpO1xudmFyIHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbnZhciBta2RpcnAgPSByZXF1aXJlKCdta2RpcnAnKTtcbnZhciBUcmFuc2Zvcm0gPSByZXF1aXJlKCdzdHJlYW0nKS5UcmFuc2Zvcm07XG52YXIgVW56aXBTdHJlYW0gPSByZXF1aXJlKCcuL3VuemlwLXN0cmVhbScpO1xuXG5mdW5jdGlvbiBFeHRyYWN0IChvcHRzKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEV4dHJhY3QpKVxuICAgIHJldHVybiBuZXcgRXh0cmFjdChvcHRzKTtcblxuICAgIFRyYW5zZm9ybS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5vcHRzID0gb3B0cyB8fCB7fTtcbiAgICB0aGlzLnVuemlwU3RyZWFtID0gbmV3IFVuemlwU3RyZWFtKHRoaXMub3B0cyk7XG4gICAgdGhpcy51bmZpbmlzaGVkRW50cmllcyA9IDA7XG4gICAgdGhpcy5hZnRlckZsdXNoV2FpdCA9IGZhbHNlO1xuICAgIHRoaXMuY3JlYXRlZERpcmVjdG9yaWVzID0ge307XG5cbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy51bnppcFN0cmVhbS5vbignZW50cnknLCB0aGlzLl9wcm9jZXNzRW50cnkuYmluZCh0aGlzKSk7XG4gICAgdGhpcy51bnppcFN0cmVhbS5vbignZXJyb3InLCBmdW5jdGlvbihlcnJvcikge1xuICAgICAgICBzZWxmLmVtaXQoJ2Vycm9yJywgZXJyb3IpO1xuICAgIH0pO1xufVxuXG51dGlsLmluaGVyaXRzKEV4dHJhY3QsIFRyYW5zZm9ybSk7XG5cbkV4dHJhY3QucHJvdG90eXBlLl90cmFuc2Zvcm0gPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICAgIHRoaXMudW56aXBTdHJlYW0ud3JpdGUoY2h1bmssIGVuY29kaW5nLCBjYik7XG59XG5cbkV4dHJhY3QucHJvdG90eXBlLl9mbHVzaCA9IGZ1bmN0aW9uIChjYikge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHZhciBhbGxEb25lID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24oKSB7IHNlbGYuZW1pdCgnY2xvc2UnKTsgfSk7XG4gICAgICAgIGNiKCk7XG4gICAgfVxuXG4gICAgdGhpcy51bnppcFN0cmVhbS5lbmQoZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmIChzZWxmLnVuZmluaXNoZWRFbnRyaWVzID4gMCkge1xuICAgICAgICAgICAgc2VsZi5hZnRlckZsdXNoV2FpdCA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gc2VsZi5vbignYXdhaXQtZmluaXNoZWQnLCBhbGxEb25lKTtcbiAgICAgICAgfVxuICAgICAgICBhbGxEb25lKCk7XG4gICAgfSk7XG59XG5cbkV4dHJhY3QucHJvdG90eXBlLl9wcm9jZXNzRW50cnkgPSBmdW5jdGlvbiAoZW50cnkpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIGRlc3RQYXRoID0gcGF0aC5qb2luKHRoaXMub3B0cy5wYXRoLCBlbnRyeS5wYXRoKTtcbiAgICB2YXIgZGlyZWN0b3J5ID0gZW50cnkuaXNEaXJlY3RvcnkgPyBkZXN0UGF0aCA6IHBhdGguZGlybmFtZShkZXN0UGF0aCk7XG5cbiAgICB0aGlzLnVuZmluaXNoZWRFbnRyaWVzKys7XG5cbiAgICB2YXIgd3JpdGVGaWxlRm4gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHBpcGVkU3RyZWFtID0gZnMuY3JlYXRlV3JpdGVTdHJlYW0oZGVzdFBhdGgpO1xuXG4gICAgICAgIHBpcGVkU3RyZWFtLm9uKCdjbG9zZScsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgc2VsZi51bmZpbmlzaGVkRW50cmllcy0tO1xuICAgICAgICAgICAgc2VsZi5fbm90aWZ5QXdhaXRlcigpO1xuICAgICAgICB9KTtcbiAgICAgICAgcGlwZWRTdHJlYW0ub24oJ2Vycm9yJywgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICBzZWxmLmVtaXQoJ2Vycm9yJywgZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICAgICAgZW50cnkucGlwZShwaXBlZFN0cmVhbSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY3JlYXRlZERpcmVjdG9yaWVzW2RpcmVjdG9yeV0gfHwgZGlyZWN0b3J5ID09PSAnLicpIHtcbiAgICAgICAgcmV0dXJuIHdyaXRlRmlsZUZuKCk7XG4gICAgfVxuXG4gICAgLy8gRklYTUU6IGNhbGxzIHRvIG1rZGlycCBjYW4gc3RpbGwgYmUgZHVwbGljYXRlZFxuICAgIG1rZGlycChkaXJlY3RvcnksIGZ1bmN0aW9uKGVycikge1xuICAgICAgICBpZiAoZXJyKSByZXR1cm4gc2VsZi5lbWl0KCdlcnJvcicsIGVycik7XG5cbiAgICAgICAgc2VsZi5jcmVhdGVkRGlyZWN0b3JpZXNbZGlyZWN0b3J5XSA9IHRydWU7XG5cbiAgICAgICAgaWYgKGVudHJ5LmlzRGlyZWN0b3J5KSB7XG4gICAgICAgICAgICBzZWxmLnVuZmluaXNoZWRFbnRyaWVzLS07XG4gICAgICAgICAgICBzZWxmLl9ub3RpZnlBd2FpdGVyKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB3cml0ZUZpbGVGbigpO1xuICAgIH0pO1xufVxuXG5FeHRyYWN0LnByb3RvdHlwZS5fbm90aWZ5QXdhaXRlciA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLmFmdGVyRmx1c2hXYWl0ICYmIHRoaXMudW5maW5pc2hlZEVudHJpZXMgPT09IDApIHtcbiAgICAgICAgdGhpcy5lbWl0KCdhd2FpdC1maW5pc2hlZCcpO1xuICAgICAgICB0aGlzLmFmdGVyRmx1c2hXYWl0ID0gZmFsc2U7XG4gICAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEV4dHJhY3Q7IiwKICAgICIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuUGFyc2UgPSByZXF1aXJlKCcuL2xpYi9wYXJzZXItc3RyZWFtJyk7XG5leHBvcnRzLkV4dHJhY3QgPSByZXF1aXJlKCcuL2xpYi9leHRyYWN0Jyk7IiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRvd25sb2FkQXJ0aWZhY3RJbnRlcm5hbCA9IGV4cG9ydHMuZG93bmxvYWRBcnRpZmFjdFB1YmxpYyA9IGV4cG9ydHMuc3RyZWFtRXh0cmFjdEV4dGVybmFsID0gdm9pZCAwO1xuY29uc3QgcHJvbWlzZXNfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiZnMvcHJvbWlzZXNcIikpO1xuY29uc3QgZ2l0aHViID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJAYWN0aW9ucy9naXRodWJcIikpO1xuY29uc3QgY29yZSA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiQGFjdGlvbnMvY29yZVwiKSk7XG5jb25zdCBodHRwQ2xpZW50ID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJAYWN0aW9ucy9odHRwLWNsaWVudFwiKSk7XG5jb25zdCB1bnppcF9zdHJlYW1fMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwidW56aXAtc3RyZWFtXCIpKTtcbmNvbnN0IHVzZXJfYWdlbnRfMSA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvdXNlci1hZ2VudFwiKTtcbmNvbnN0IGNvbmZpZ18xID0gcmVxdWlyZShcIi4uL3NoYXJlZC9jb25maWdcIik7XG5jb25zdCBhcnRpZmFjdF90d2lycF9jbGllbnRfMSA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvYXJ0aWZhY3QtdHdpcnAtY2xpZW50XCIpO1xuY29uc3QgZ2VuZXJhdGVkXzEgPSByZXF1aXJlKFwiLi4vLi4vZ2VuZXJhdGVkXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uL3NoYXJlZC91dGlsXCIpO1xuY29uc3QgZXJyb3JzXzEgPSByZXF1aXJlKFwiLi4vc2hhcmVkL2Vycm9yc1wiKTtcbmNvbnN0IHNjcnViUXVlcnlQYXJhbWV0ZXJzID0gKHVybCkgPT4ge1xuICAgIGNvbnN0IHBhcnNlZCA9IG5ldyBVUkwodXJsKTtcbiAgICBwYXJzZWQuc2VhcmNoID0gJyc7XG4gICAgcmV0dXJuIHBhcnNlZC50b1N0cmluZygpO1xufTtcbmZ1bmN0aW9uIGV4aXN0cyhwYXRoKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHlpZWxkIHByb21pc2VzXzEuZGVmYXVsdC5hY2Nlc3MocGF0aCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChlcnJvci5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59XG5mdW5jdGlvbiBzdHJlYW1FeHRyYWN0KHVybCwgZGlyZWN0b3J5KSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgbGV0IHJldHJ5Q291bnQgPSAwO1xuICAgICAgICB3aGlsZSAocmV0cnlDb3VudCA8IDUpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgeWllbGQgc3RyZWFtRXh0cmFjdEV4dGVybmFsKHVybCwgZGlyZWN0b3J5KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICByZXRyeUNvdW50Kys7XG4gICAgICAgICAgICAgICAgY29yZS5kZWJ1ZyhgRmFpbGVkIHRvIGRvd25sb2FkIGFydGlmYWN0IGFmdGVyICR7cmV0cnlDb3VudH0gcmV0cmllcyBkdWUgdG8gJHtlcnJvci5tZXNzYWdlfS4gUmV0cnlpbmcgaW4gNSBzZWNvbmRzLi4uYCk7XG4gICAgICAgICAgICAgICAgLy8gd2FpdCA1IHNlY29uZHMgYmVmb3JlIHJldHJ5aW5nXG4gICAgICAgICAgICAgICAgeWllbGQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDUwMDApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFydGlmYWN0IGRvd25sb2FkIGZhaWxlZCBhZnRlciAke3JldHJ5Q291bnR9IHJldHJpZXMuYCk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBzdHJlYW1FeHRyYWN0RXh0ZXJuYWwodXJsLCBkaXJlY3RvcnkpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBjbGllbnQgPSBuZXcgaHR0cENsaWVudC5IdHRwQ2xpZW50KCgwLCB1c2VyX2FnZW50XzEuZ2V0VXNlckFnZW50U3RyaW5nKSgpKTtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSB5aWVsZCBjbGllbnQuZ2V0KHVybCk7XG4gICAgICAgIGlmIChyZXNwb25zZS5tZXNzYWdlLnN0YXR1c0NvZGUgIT09IDIwMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIEhUVFAgcmVzcG9uc2UgZnJvbSBibG9iIHN0b3JhZ2U6ICR7cmVzcG9uc2UubWVzc2FnZS5zdGF0dXNDb2RlfSAke3Jlc3BvbnNlLm1lc3NhZ2Uuc3RhdHVzTWVzc2FnZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0aW1lb3V0ID0gMzAgKiAxMDAwOyAvLyAzMCBzZWNvbmRzXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0aW1lckZuID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlLm1lc3NhZ2UuZGVzdHJveShuZXcgRXJyb3IoYEJsb2Igc3RvcmFnZSBjaHVuayBkaWQgbm90IHJlc3BvbmQgaW4gJHt0aW1lb3V0fW1zYCkpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCh0aW1lckZuLCB0aW1lb3V0KTtcbiAgICAgICAgICAgIHJlc3BvbnNlLm1lc3NhZ2VcbiAgICAgICAgICAgICAgICAub24oJ2RhdGEnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGltZXIucmVmcmVzaCgpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAub24oJ2Vycm9yJywgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgY29yZS5kZWJ1ZyhgcmVzcG9uc2UubWVzc2FnZTogQXJ0aWZhY3QgZG93bmxvYWQgZmFpbGVkOiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAucGlwZSh1bnppcF9zdHJlYW1fMS5kZWZhdWx0LkV4dHJhY3QoeyBwYXRoOiBkaXJlY3RvcnkgfSkpXG4gICAgICAgICAgICAgICAgLm9uKCdjbG9zZScsICgpID0+IHtcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLm9uKCdlcnJvcicsIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5leHBvcnRzLnN0cmVhbUV4dHJhY3RFeHRlcm5hbCA9IHN0cmVhbUV4dHJhY3RFeHRlcm5hbDtcbmZ1bmN0aW9uIGRvd25sb2FkQXJ0aWZhY3RQdWJsaWMoYXJ0aWZhY3RJZCwgcmVwb3NpdG9yeU93bmVyLCByZXBvc2l0b3J5TmFtZSwgdG9rZW4sIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBkb3dubG9hZFBhdGggPSB5aWVsZCByZXNvbHZlT3JDcmVhdGVEaXJlY3Rvcnkob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnBhdGgpO1xuICAgICAgICBjb25zdCBhcGkgPSBnaXRodWIuZ2V0T2N0b2tpdCh0b2tlbik7XG4gICAgICAgIGNvcmUuaW5mbyhgRG93bmxvYWRpbmcgYXJ0aWZhY3QgJyR7YXJ0aWZhY3RJZH0nIGZyb20gJyR7cmVwb3NpdG9yeU93bmVyfS8ke3JlcG9zaXRvcnlOYW1lfSdgKTtcbiAgICAgICAgY29uc3QgeyBoZWFkZXJzLCBzdGF0dXMgfSA9IHlpZWxkIGFwaS5yZXN0LmFjdGlvbnMuZG93bmxvYWRBcnRpZmFjdCh7XG4gICAgICAgICAgICBvd25lcjogcmVwb3NpdG9yeU93bmVyLFxuICAgICAgICAgICAgcmVwbzogcmVwb3NpdG9yeU5hbWUsXG4gICAgICAgICAgICBhcnRpZmFjdF9pZDogYXJ0aWZhY3RJZCxcbiAgICAgICAgICAgIGFyY2hpdmVfZm9ybWF0OiAnemlwJyxcbiAgICAgICAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgICAgICAgICByZWRpcmVjdDogJ21hbnVhbCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChzdGF0dXMgIT09IDMwMikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gZG93bmxvYWQgYXJ0aWZhY3QuIFVuZXhwZWN0ZWQgc3RhdHVzOiAke3N0YXR1c31gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IGxvY2F0aW9uIH0gPSBoZWFkZXJzO1xuICAgICAgICBpZiAoIWxvY2F0aW9uKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byByZWRpcmVjdCB0byBhcnRpZmFjdCBkb3dubG9hZCB1cmxgKTtcbiAgICAgICAgfVxuICAgICAgICBjb3JlLmluZm8oYFJlZGlyZWN0aW5nIHRvIGJsb2IgZG93bmxvYWQgdXJsOiAke3NjcnViUXVlcnlQYXJhbWV0ZXJzKGxvY2F0aW9uKX1gKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvcmUuaW5mbyhgU3RhcnRpbmcgZG93bmxvYWQgb2YgYXJ0aWZhY3QgdG86ICR7ZG93bmxvYWRQYXRofWApO1xuICAgICAgICAgICAgeWllbGQgc3RyZWFtRXh0cmFjdChsb2NhdGlvbiwgZG93bmxvYWRQYXRoKTtcbiAgICAgICAgICAgIGNvcmUuaW5mbyhgQXJ0aWZhY3QgZG93bmxvYWQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5gKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGRvd25sb2FkIGFuZCBleHRyYWN0IGFydGlmYWN0OiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgZG93bmxvYWRQYXRoIH07XG4gICAgfSk7XG59XG5leHBvcnRzLmRvd25sb2FkQXJ0aWZhY3RQdWJsaWMgPSBkb3dubG9hZEFydGlmYWN0UHVibGljO1xuZnVuY3Rpb24gZG93bmxvYWRBcnRpZmFjdEludGVybmFsKGFydGlmYWN0SWQsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBkb3dubG9hZFBhdGggPSB5aWVsZCByZXNvbHZlT3JDcmVhdGVEaXJlY3Rvcnkob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnBhdGgpO1xuICAgICAgICBjb25zdCBhcnRpZmFjdENsaWVudCA9ICgwLCBhcnRpZmFjdF90d2lycF9jbGllbnRfMS5pbnRlcm5hbEFydGlmYWN0VHdpcnBDbGllbnQpKCk7XG4gICAgICAgIGNvbnN0IHsgd29ya2Zsb3dSdW5CYWNrZW5kSWQsIHdvcmtmbG93Sm9iUnVuQmFja2VuZElkIH0gPSAoMCwgdXRpbF8xLmdldEJhY2tlbmRJZHNGcm9tVG9rZW4pKCk7XG4gICAgICAgIGNvbnN0IGxpc3RSZXEgPSB7XG4gICAgICAgICAgICB3b3JrZmxvd1J1bkJhY2tlbmRJZCxcbiAgICAgICAgICAgIHdvcmtmbG93Sm9iUnVuQmFja2VuZElkLFxuICAgICAgICAgICAgaWRGaWx0ZXI6IGdlbmVyYXRlZF8xLkludDY0VmFsdWUuY3JlYXRlKHsgdmFsdWU6IGFydGlmYWN0SWQudG9TdHJpbmcoKSB9KVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB7IGFydGlmYWN0cyB9ID0geWllbGQgYXJ0aWZhY3RDbGllbnQuTGlzdEFydGlmYWN0cyhsaXN0UmVxKTtcbiAgICAgICAgaWYgKGFydGlmYWN0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBlcnJvcnNfMS5BcnRpZmFjdE5vdEZvdW5kRXJyb3IoYE5vIGFydGlmYWN0cyBmb3VuZCBmb3IgSUQ6ICR7YXJ0aWZhY3RJZH1cXG5BcmUgeW91IHRyeWluZyB0byBkb3dubG9hZCBmcm9tIGEgZGlmZmVyZW50IHJ1bj8gVHJ5IHNwZWNpZnlpbmcgYSBnaXRodWItdG9rZW4gd2l0aCBcXGBhY3Rpb25zOnJlYWRcXGAgc2NvcGUuYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFydGlmYWN0cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBjb3JlLndhcm5pbmcoJ011bHRpcGxlIGFydGlmYWN0cyBmb3VuZCwgZGVmYXVsdGluZyB0byBmaXJzdC4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzaWduZWRSZXEgPSB7XG4gICAgICAgICAgICB3b3JrZmxvd1J1bkJhY2tlbmRJZDogYXJ0aWZhY3RzWzBdLndvcmtmbG93UnVuQmFja2VuZElkLFxuICAgICAgICAgICAgd29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQ6IGFydGlmYWN0c1swXS53b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZCxcbiAgICAgICAgICAgIG5hbWU6IGFydGlmYWN0c1swXS5uYW1lXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHsgc2lnbmVkVXJsIH0gPSB5aWVsZCBhcnRpZmFjdENsaWVudC5HZXRTaWduZWRBcnRpZmFjdFVSTChzaWduZWRSZXEpO1xuICAgICAgICBjb3JlLmluZm8oYFJlZGlyZWN0aW5nIHRvIGJsb2IgZG93bmxvYWQgdXJsOiAke3NjcnViUXVlcnlQYXJhbWV0ZXJzKHNpZ25lZFVybCl9YCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb3JlLmluZm8oYFN0YXJ0aW5nIGRvd25sb2FkIG9mIGFydGlmYWN0IHRvOiAke2Rvd25sb2FkUGF0aH1gKTtcbiAgICAgICAgICAgIHlpZWxkIHN0cmVhbUV4dHJhY3Qoc2lnbmVkVXJsLCBkb3dubG9hZFBhdGgpO1xuICAgICAgICAgICAgY29yZS5pbmZvKGBBcnRpZmFjdCBkb3dubG9hZCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LmApO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gZG93bmxvYWQgYW5kIGV4dHJhY3QgYXJ0aWZhY3Q6ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBkb3dubG9hZFBhdGggfTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZG93bmxvYWRBcnRpZmFjdEludGVybmFsID0gZG93bmxvYWRBcnRpZmFjdEludGVybmFsO1xuZnVuY3Rpb24gcmVzb2x2ZU9yQ3JlYXRlRGlyZWN0b3J5KGRvd25sb2FkUGF0aCA9ICgwLCBjb25maWdfMS5nZXRHaXRIdWJXb3Jrc3BhY2VEaXIpKCkpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBpZiAoISh5aWVsZCBleGlzdHMoZG93bmxvYWRQYXRoKSkpIHtcbiAgICAgICAgICAgIGNvcmUuZGVidWcoYEFydGlmYWN0IGRlc3RpbmF0aW9uIGZvbGRlciBkb2VzIG5vdCBleGlzdCwgY3JlYXRpbmc6ICR7ZG93bmxvYWRQYXRofWApO1xuICAgICAgICAgICAgeWllbGQgcHJvbWlzZXNfMS5kZWZhdWx0Lm1rZGlyKGRvd25sb2FkUGF0aCwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb3JlLmRlYnVnKGBBcnRpZmFjdCBkZXN0aW5hdGlvbiBmb2xkZXIgYWxyZWFkeSBleGlzdHM6ICR7ZG93bmxvYWRQYXRofWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkb3dubG9hZFBhdGg7XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kb3dubG9hZC1hcnRpZmFjdC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldFJldHJ5T3B0aW9ucyA9IHZvaWQgMDtcbmNvbnN0IGNvcmUgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIkBhY3Rpb25zL2NvcmVcIikpO1xuLy8gRGVmYXVsdHMgZm9yIGZldGNoaW5nIGFydGlmYWN0c1xuY29uc3QgZGVmYXVsdE1heFJldHJ5TnVtYmVyID0gNTtcbmNvbnN0IGRlZmF1bHRFeGVtcHRTdGF0dXNDb2RlcyA9IFs0MDAsIDQwMSwgNDAzLCA0MDQsIDQyMl07IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9vY3Rva2l0L3BsdWdpbi1yZXRyeS5qcy9ibG9iLzlhMjQ0Mzc0NmMzNTBiM2JlZWRlYzM1Y2YyNmUxOTdlYTMxOGEyNjEvc3JjL2luZGV4LnRzI0wxNFxuZnVuY3Rpb24gZ2V0UmV0cnlPcHRpb25zKGRlZmF1bHRPcHRpb25zLCByZXRyaWVzID0gZGVmYXVsdE1heFJldHJ5TnVtYmVyLCBleGVtcHRTdGF0dXNDb2RlcyA9IGRlZmF1bHRFeGVtcHRTdGF0dXNDb2Rlcykge1xuICAgIHZhciBfYTtcbiAgICBpZiAocmV0cmllcyA8PSAwKSB7XG4gICAgICAgIHJldHVybiBbeyBlbmFibGVkOiBmYWxzZSB9LCBkZWZhdWx0T3B0aW9ucy5yZXF1ZXN0XTtcbiAgICB9XG4gICAgY29uc3QgcmV0cnlPcHRpb25zID0ge1xuICAgICAgICBlbmFibGVkOiB0cnVlXG4gICAgfTtcbiAgICBpZiAoZXhlbXB0U3RhdHVzQ29kZXMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXRyeU9wdGlvbnMuZG9Ob3RSZXRyeSA9IGV4ZW1wdFN0YXR1c0NvZGVzO1xuICAgIH1cbiAgICAvLyBUaGUgR2l0SHViIHR5cGUgaGFzIHNvbWUgZGVmYXVsdHMgZm9yIGBvcHRpb25zLnJlcXVlc3RgXG4gICAgLy8gc2VlOiBodHRwczovL2dpdGh1Yi5jb20vYWN0aW9ucy90b29sa2l0L2Jsb2IvNGZiYzVjOTQxYTU3MjQ5YjE5NTYyMDE1ZWRiZDcyYWRkMTRiZTkzZC9wYWNrYWdlcy9naXRodWIvc3JjL3V0aWxzLnRzI0wxNVxuICAgIC8vIFdlIHBhc3MgdGhlc2UgaW4gaGVyZSBzbyB0aGV5IGFyZSBub3Qgb3ZlcnJpZGRlbi5cbiAgICBjb25zdCByZXF1ZXN0T3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdE9wdGlvbnMucmVxdWVzdCksIHsgcmV0cmllcyB9KTtcbiAgICBjb3JlLmRlYnVnKGBHaXRIdWIgY2xpZW50IGNvbmZpZ3VyZWQgd2l0aDogKHJldHJpZXM6ICR7cmVxdWVzdE9wdGlvbnMucmV0cmllc30sIHJldHJ5LWV4ZW1wdC1zdGF0dXMtY29kZTogJHsoX2EgPSByZXRyeU9wdGlvbnMuZG9Ob3RSZXRyeSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJ29jdG9raXQgZGVmYXVsdDogWzQwMCwgNDAxLCA0MDMsIDQwNCwgNDIyXSd9KWApO1xuICAgIHJldHVybiBbcmV0cnlPcHRpb25zLCByZXF1ZXN0T3B0aW9uc107XG59XG5leHBvcnRzLmdldFJldHJ5T3B0aW9ucyA9IGdldFJldHJ5T3B0aW9ucztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJldHJ5LW9wdGlvbnMuanMubWFwIiwKICAgICIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmNvbnN0IFZFUlNJT04gPSBcIjEuMC40XCI7XG5cbi8qKlxuICogQHBhcmFtIG9jdG9raXQgT2N0b2tpdCBpbnN0YW5jZVxuICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBwYXNzZWQgdG8gT2N0b2tpdCBjb25zdHJ1Y3RvclxuICovXG5cbmZ1bmN0aW9uIHJlcXVlc3RMb2cob2N0b2tpdCkge1xuICBvY3Rva2l0Lmhvb2sud3JhcChcInJlcXVlc3RcIiwgKHJlcXVlc3QsIG9wdGlvbnMpID0+IHtcbiAgICBvY3Rva2l0LmxvZy5kZWJ1ZyhcInJlcXVlc3RcIiwgb3B0aW9ucyk7XG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zID0gb2N0b2tpdC5yZXF1ZXN0LmVuZHBvaW50LnBhcnNlKG9wdGlvbnMpO1xuICAgIGNvbnN0IHBhdGggPSByZXF1ZXN0T3B0aW9ucy51cmwucmVwbGFjZShvcHRpb25zLmJhc2VVcmwsIFwiXCIpO1xuICAgIHJldHVybiByZXF1ZXN0KG9wdGlvbnMpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgb2N0b2tpdC5sb2cuaW5mbyhgJHtyZXF1ZXN0T3B0aW9ucy5tZXRob2R9ICR7cGF0aH0gLSAke3Jlc3BvbnNlLnN0YXR1c30gaW4gJHtEYXRlLm5vdygpIC0gc3RhcnR9bXNgKTtcbiAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9KS5jYXRjaChlcnJvciA9PiB7XG4gICAgICBvY3Rva2l0LmxvZy5pbmZvKGAke3JlcXVlc3RPcHRpb25zLm1ldGhvZH0gJHtwYXRofSAtICR7ZXJyb3Iuc3RhdHVzfSBpbiAke0RhdGUubm93KCkgLSBzdGFydH1tc2ApO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSk7XG4gIH0pO1xufVxucmVxdWVzdExvZy5WRVJTSU9OID0gVkVSU0lPTjtcblxuZXhwb3J0cy5yZXF1ZXN0TG9nID0gcmVxdWVzdExvZztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxuIiwKICAgICIvKipcbiAgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIEJvdHRsZW5lY2sgbGlicmFyeSAoTUlUKSwgY29tcGlsZWQgdG8gRVMyMDE3LCBhbmQgd2l0aG91dCBDbHVzdGVyaW5nIHN1cHBvcnQuXG4gICogaHR0cHM6Ly9naXRodWIuY29tL1NHcm9uZGluL2JvdHRsZW5lY2tcbiAgKi9cbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG5cdHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpIDpcblx0dHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKGZhY3RvcnkpIDpcblx0KGdsb2JhbC5Cb3R0bGVuZWNrID0gZmFjdG9yeSgpKTtcbn0odGhpcywgKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cdHZhciBjb21tb25qc0dsb2JhbCA9IHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbFRoaXMgOiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsIDogdHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnID8gc2VsZiA6IHt9O1xuXG5cdGZ1bmN0aW9uIGdldENqc0V4cG9ydEZyb21OYW1lc3BhY2UgKG4pIHtcblx0XHRyZXR1cm4gbiAmJiBuWydkZWZhdWx0J10gfHwgbjtcblx0fVxuXG5cdHZhciBsb2FkID0gZnVuY3Rpb24ocmVjZWl2ZWQsIGRlZmF1bHRzLCBvbnRvID0ge30pIHtcblx0ICB2YXIgaywgcmVmLCB2O1xuXHQgIGZvciAoayBpbiBkZWZhdWx0cykge1xuXHQgICAgdiA9IGRlZmF1bHRzW2tdO1xuXHQgICAgb250b1trXSA9IChyZWYgPSByZWNlaXZlZFtrXSkgIT0gbnVsbCA/IHJlZiA6IHY7XG5cdCAgfVxuXHQgIHJldHVybiBvbnRvO1xuXHR9O1xuXG5cdHZhciBvdmVyd3JpdGUgPSBmdW5jdGlvbihyZWNlaXZlZCwgZGVmYXVsdHMsIG9udG8gPSB7fSkge1xuXHQgIHZhciBrLCB2O1xuXHQgIGZvciAoayBpbiByZWNlaXZlZCkge1xuXHQgICAgdiA9IHJlY2VpdmVkW2tdO1xuXHQgICAgaWYgKGRlZmF1bHRzW2tdICE9PSB2b2lkIDApIHtcblx0ICAgICAgb250b1trXSA9IHY7XG5cdCAgICB9XG5cdCAgfVxuXHQgIHJldHVybiBvbnRvO1xuXHR9O1xuXG5cdHZhciBwYXJzZXIgPSB7XG5cdFx0bG9hZDogbG9hZCxcblx0XHRvdmVyd3JpdGU6IG92ZXJ3cml0ZVxuXHR9O1xuXG5cdHZhciBETExpc3Q7XG5cblx0RExMaXN0ID0gY2xhc3MgRExMaXN0IHtcblx0ICBjb25zdHJ1Y3RvcihpbmNyLCBkZWNyKSB7XG5cdCAgICB0aGlzLmluY3IgPSBpbmNyO1xuXHQgICAgdGhpcy5kZWNyID0gZGVjcjtcblx0ICAgIHRoaXMuX2ZpcnN0ID0gbnVsbDtcblx0ICAgIHRoaXMuX2xhc3QgPSBudWxsO1xuXHQgICAgdGhpcy5sZW5ndGggPSAwO1xuXHQgIH1cblxuXHQgIHB1c2godmFsdWUpIHtcblx0ICAgIHZhciBub2RlO1xuXHQgICAgdGhpcy5sZW5ndGgrKztcblx0ICAgIGlmICh0eXBlb2YgdGhpcy5pbmNyID09PSBcImZ1bmN0aW9uXCIpIHtcblx0ICAgICAgdGhpcy5pbmNyKCk7XG5cdCAgICB9XG5cdCAgICBub2RlID0ge1xuXHQgICAgICB2YWx1ZSxcblx0ICAgICAgcHJldjogdGhpcy5fbGFzdCxcblx0ICAgICAgbmV4dDogbnVsbFxuXHQgICAgfTtcblx0ICAgIGlmICh0aGlzLl9sYXN0ICE9IG51bGwpIHtcblx0ICAgICAgdGhpcy5fbGFzdC5uZXh0ID0gbm9kZTtcblx0ICAgICAgdGhpcy5fbGFzdCA9IG5vZGU7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICB0aGlzLl9maXJzdCA9IHRoaXMuX2xhc3QgPSBub2RlO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIHZvaWQgMDtcblx0ICB9XG5cblx0ICBzaGlmdCgpIHtcblx0ICAgIHZhciB2YWx1ZTtcblx0ICAgIGlmICh0aGlzLl9maXJzdCA9PSBudWxsKSB7XG5cdCAgICAgIHJldHVybjtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIHRoaXMubGVuZ3RoLS07XG5cdCAgICAgIGlmICh0eXBlb2YgdGhpcy5kZWNyID09PSBcImZ1bmN0aW9uXCIpIHtcblx0ICAgICAgICB0aGlzLmRlY3IoKTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgICAgdmFsdWUgPSB0aGlzLl9maXJzdC52YWx1ZTtcblx0ICAgIGlmICgodGhpcy5fZmlyc3QgPSB0aGlzLl9maXJzdC5uZXh0KSAhPSBudWxsKSB7XG5cdCAgICAgIHRoaXMuX2ZpcnN0LnByZXYgPSBudWxsO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgdGhpcy5fbGFzdCA9IG51bGw7XG5cdCAgICB9XG5cdCAgICByZXR1cm4gdmFsdWU7XG5cdCAgfVxuXG5cdCAgZmlyc3QoKSB7XG5cdCAgICBpZiAodGhpcy5fZmlyc3QgIT0gbnVsbCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fZmlyc3QudmFsdWU7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgZ2V0QXJyYXkoKSB7XG5cdCAgICB2YXIgbm9kZSwgcmVmLCByZXN1bHRzO1xuXHQgICAgbm9kZSA9IHRoaXMuX2ZpcnN0O1xuXHQgICAgcmVzdWx0cyA9IFtdO1xuXHQgICAgd2hpbGUgKG5vZGUgIT0gbnVsbCkge1xuXHQgICAgICByZXN1bHRzLnB1c2goKHJlZiA9IG5vZGUsIG5vZGUgPSBub2RlLm5leHQsIHJlZi52YWx1ZSkpO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIHJlc3VsdHM7XG5cdCAgfVxuXG5cdCAgZm9yRWFjaFNoaWZ0KGNiKSB7XG5cdCAgICB2YXIgbm9kZTtcblx0ICAgIG5vZGUgPSB0aGlzLnNoaWZ0KCk7XG5cdCAgICB3aGlsZSAobm9kZSAhPSBudWxsKSB7XG5cdCAgICAgIChjYihub2RlKSwgbm9kZSA9IHRoaXMuc2hpZnQoKSk7XG5cdCAgICB9XG5cdCAgICByZXR1cm4gdm9pZCAwO1xuXHQgIH1cblxuXHQgIGRlYnVnKCkge1xuXHQgICAgdmFyIG5vZGUsIHJlZiwgcmVmMSwgcmVmMiwgcmVzdWx0cztcblx0ICAgIG5vZGUgPSB0aGlzLl9maXJzdDtcblx0ICAgIHJlc3VsdHMgPSBbXTtcblx0ICAgIHdoaWxlIChub2RlICE9IG51bGwpIHtcblx0ICAgICAgcmVzdWx0cy5wdXNoKChyZWYgPSBub2RlLCBub2RlID0gbm9kZS5uZXh0LCB7XG5cdCAgICAgICAgdmFsdWU6IHJlZi52YWx1ZSxcblx0ICAgICAgICBwcmV2OiAocmVmMSA9IHJlZi5wcmV2KSAhPSBudWxsID8gcmVmMS52YWx1ZSA6IHZvaWQgMCxcblx0ICAgICAgICBuZXh0OiAocmVmMiA9IHJlZi5uZXh0KSAhPSBudWxsID8gcmVmMi52YWx1ZSA6IHZvaWQgMFxuXHQgICAgICB9KSk7XG5cdCAgICB9XG5cdCAgICByZXR1cm4gcmVzdWx0cztcblx0ICB9XG5cblx0fTtcblxuXHR2YXIgRExMaXN0XzEgPSBETExpc3Q7XG5cblx0dmFyIEV2ZW50cztcblxuXHRFdmVudHMgPSBjbGFzcyBFdmVudHMge1xuXHQgIGNvbnN0cnVjdG9yKGluc3RhbmNlKSB7XG5cdCAgICB0aGlzLmluc3RhbmNlID0gaW5zdGFuY2U7XG5cdCAgICB0aGlzLl9ldmVudHMgPSB7fTtcblx0ICAgIGlmICgodGhpcy5pbnN0YW5jZS5vbiAhPSBudWxsKSB8fCAodGhpcy5pbnN0YW5jZS5vbmNlICE9IG51bGwpIHx8ICh0aGlzLmluc3RhbmNlLnJlbW92ZUFsbExpc3RlbmVycyAhPSBudWxsKSkge1xuXHQgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBbiBFbWl0dGVyIGFscmVhZHkgZXhpc3RzIGZvciB0aGlzIG9iamVjdFwiKTtcblx0ICAgIH1cblx0ICAgIHRoaXMuaW5zdGFuY2Uub24gPSAobmFtZSwgY2IpID0+IHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX2FkZExpc3RlbmVyKG5hbWUsIFwibWFueVwiLCBjYik7XG5cdCAgICB9O1xuXHQgICAgdGhpcy5pbnN0YW5jZS5vbmNlID0gKG5hbWUsIGNiKSA9PiB7XG5cdCAgICAgIHJldHVybiB0aGlzLl9hZGRMaXN0ZW5lcihuYW1lLCBcIm9uY2VcIiwgY2IpO1xuXHQgICAgfTtcblx0ICAgIHRoaXMuaW5zdGFuY2UucmVtb3ZlQWxsTGlzdGVuZXJzID0gKG5hbWUgPSBudWxsKSA9PiB7XG5cdCAgICAgIGlmIChuYW1lICE9IG51bGwpIHtcblx0ICAgICAgICByZXR1cm4gZGVsZXRlIHRoaXMuX2V2ZW50c1tuYW1lXTtcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnRzID0ge307XG5cdCAgICAgIH1cblx0ICAgIH07XG5cdCAgfVxuXG5cdCAgX2FkZExpc3RlbmVyKG5hbWUsIHN0YXR1cywgY2IpIHtcblx0ICAgIHZhciBiYXNlO1xuXHQgICAgaWYgKChiYXNlID0gdGhpcy5fZXZlbnRzKVtuYW1lXSA9PSBudWxsKSB7XG5cdCAgICAgIGJhc2VbbmFtZV0gPSBbXTtcblx0ICAgIH1cblx0ICAgIHRoaXMuX2V2ZW50c1tuYW1lXS5wdXNoKHtjYiwgc3RhdHVzfSk7XG5cdCAgICByZXR1cm4gdGhpcy5pbnN0YW5jZTtcblx0ICB9XG5cblx0ICBsaXN0ZW5lckNvdW50KG5hbWUpIHtcblx0ICAgIGlmICh0aGlzLl9ldmVudHNbbmFtZV0gIT0gbnVsbCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fZXZlbnRzW25hbWVdLmxlbmd0aDtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIHJldHVybiAwO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIGFzeW5jIHRyaWdnZXIobmFtZSwgLi4uYXJncykge1xuXHQgICAgdmFyIGUsIHByb21pc2VzO1xuXHQgICAgdHJ5IHtcblx0ICAgICAgaWYgKG5hbWUgIT09IFwiZGVidWdcIikge1xuXHQgICAgICAgIHRoaXMudHJpZ2dlcihcImRlYnVnXCIsIGBFdmVudCB0cmlnZ2VyZWQ6ICR7bmFtZX1gLCBhcmdzKTtcblx0ICAgICAgfVxuXHQgICAgICBpZiAodGhpcy5fZXZlbnRzW25hbWVdID09IG51bGwpIHtcblx0ICAgICAgICByZXR1cm47XG5cdCAgICAgIH1cblx0ICAgICAgdGhpcy5fZXZlbnRzW25hbWVdID0gdGhpcy5fZXZlbnRzW25hbWVdLmZpbHRlcihmdW5jdGlvbihsaXN0ZW5lcikge1xuXHQgICAgICAgIHJldHVybiBsaXN0ZW5lci5zdGF0dXMgIT09IFwibm9uZVwiO1xuXHQgICAgICB9KTtcblx0ICAgICAgcHJvbWlzZXMgPSB0aGlzLl9ldmVudHNbbmFtZV0ubWFwKGFzeW5jKGxpc3RlbmVyKSA9PiB7XG5cdCAgICAgICAgdmFyIGUsIHJldHVybmVkO1xuXHQgICAgICAgIGlmIChsaXN0ZW5lci5zdGF0dXMgPT09IFwibm9uZVwiKSB7XG5cdCAgICAgICAgICByZXR1cm47XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmIChsaXN0ZW5lci5zdGF0dXMgPT09IFwib25jZVwiKSB7XG5cdCAgICAgICAgICBsaXN0ZW5lci5zdGF0dXMgPSBcIm5vbmVcIjtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdHJ5IHtcblx0ICAgICAgICAgIHJldHVybmVkID0gdHlwZW9mIGxpc3RlbmVyLmNiID09PSBcImZ1bmN0aW9uXCIgPyBsaXN0ZW5lci5jYiguLi5hcmdzKSA6IHZvaWQgMDtcblx0ICAgICAgICAgIGlmICh0eXBlb2YgKHJldHVybmVkICE9IG51bGwgPyByZXR1cm5lZC50aGVuIDogdm9pZCAwKSA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdCAgICAgICAgICAgIHJldHVybiAoYXdhaXQgcmV0dXJuZWQpO1xuXHQgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHJldHVybmVkO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG5cdCAgICAgICAgICBlID0gZXJyb3I7XG5cdCAgICAgICAgICB7XG5cdCAgICAgICAgICAgIHRoaXMudHJpZ2dlcihcImVycm9yXCIsIGUpO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgICAgcmV0dXJuIG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICB9KTtcblx0ICAgICAgcmV0dXJuICgoYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpKSkuZmluZChmdW5jdGlvbih4KSB7XG5cdCAgICAgICAgcmV0dXJuIHggIT0gbnVsbDtcblx0ICAgICAgfSk7XG5cdCAgICB9IGNhdGNoIChlcnJvcikge1xuXHQgICAgICBlID0gZXJyb3I7XG5cdCAgICAgIHtcblx0ICAgICAgICB0aGlzLnRyaWdnZXIoXCJlcnJvclwiLCBlKTtcblx0ICAgICAgfVxuXHQgICAgICByZXR1cm4gbnVsbDtcblx0ICAgIH1cblx0ICB9XG5cblx0fTtcblxuXHR2YXIgRXZlbnRzXzEgPSBFdmVudHM7XG5cblx0dmFyIERMTGlzdCQxLCBFdmVudHMkMSwgUXVldWVzO1xuXG5cdERMTGlzdCQxID0gRExMaXN0XzE7XG5cblx0RXZlbnRzJDEgPSBFdmVudHNfMTtcblxuXHRRdWV1ZXMgPSBjbGFzcyBRdWV1ZXMge1xuXHQgIGNvbnN0cnVjdG9yKG51bV9wcmlvcml0aWVzKSB7XG5cdCAgICB2YXIgaTtcblx0ICAgIHRoaXMuRXZlbnRzID0gbmV3IEV2ZW50cyQxKHRoaXMpO1xuXHQgICAgdGhpcy5fbGVuZ3RoID0gMDtcblx0ICAgIHRoaXMuX2xpc3RzID0gKGZ1bmN0aW9uKCkge1xuXHQgICAgICB2YXIgaiwgcmVmLCByZXN1bHRzO1xuXHQgICAgICByZXN1bHRzID0gW107XG5cdCAgICAgIGZvciAoaSA9IGogPSAxLCByZWYgPSBudW1fcHJpb3JpdGllczsgKDEgPD0gcmVmID8gaiA8PSByZWYgOiBqID49IHJlZik7IGkgPSAxIDw9IHJlZiA/ICsraiA6IC0taikge1xuXHQgICAgICAgIHJlc3VsdHMucHVzaChuZXcgRExMaXN0JDEoKCgpID0+IHtcblx0ICAgICAgICAgIHJldHVybiB0aGlzLmluY3IoKTtcblx0ICAgICAgICB9KSwgKCgpID0+IHtcblx0ICAgICAgICAgIHJldHVybiB0aGlzLmRlY3IoKTtcblx0ICAgICAgICB9KSkpO1xuXHQgICAgICB9XG5cdCAgICAgIHJldHVybiByZXN1bHRzO1xuXHQgICAgfSkuY2FsbCh0aGlzKTtcblx0ICB9XG5cblx0ICBpbmNyKCkge1xuXHQgICAgaWYgKHRoaXMuX2xlbmd0aCsrID09PSAwKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLkV2ZW50cy50cmlnZ2VyKFwibGVmdHplcm9cIik7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgZGVjcigpIHtcblx0ICAgIGlmICgtLXRoaXMuX2xlbmd0aCA9PT0gMCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5FdmVudHMudHJpZ2dlcihcInplcm9cIik7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgcHVzaChqb2IpIHtcblx0ICAgIHJldHVybiB0aGlzLl9saXN0c1tqb2Iub3B0aW9ucy5wcmlvcml0eV0ucHVzaChqb2IpO1xuXHQgIH1cblxuXHQgIHF1ZXVlZChwcmlvcml0eSkge1xuXHQgICAgaWYgKHByaW9yaXR5ICE9IG51bGwpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX2xpc3RzW3ByaW9yaXR5XS5sZW5ndGg7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICByZXR1cm4gdGhpcy5fbGVuZ3RoO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIHNoaWZ0QWxsKGZuKSB7XG5cdCAgICByZXR1cm4gdGhpcy5fbGlzdHMuZm9yRWFjaChmdW5jdGlvbihsaXN0KSB7XG5cdCAgICAgIHJldHVybiBsaXN0LmZvckVhY2hTaGlmdChmbik7XG5cdCAgICB9KTtcblx0ICB9XG5cblx0ICBnZXRGaXJzdChhcnIgPSB0aGlzLl9saXN0cykge1xuXHQgICAgdmFyIGosIGxlbiwgbGlzdDtcblx0ICAgIGZvciAoaiA9IDAsIGxlbiA9IGFyci5sZW5ndGg7IGogPCBsZW47IGorKykge1xuXHQgICAgICBsaXN0ID0gYXJyW2pdO1xuXHQgICAgICBpZiAobGlzdC5sZW5ndGggPiAwKSB7XG5cdCAgICAgICAgcmV0dXJuIGxpc3Q7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICAgIHJldHVybiBbXTtcblx0ICB9XG5cblx0ICBzaGlmdExhc3RGcm9tKHByaW9yaXR5KSB7XG5cdCAgICByZXR1cm4gdGhpcy5nZXRGaXJzdCh0aGlzLl9saXN0cy5zbGljZShwcmlvcml0eSkucmV2ZXJzZSgpKS5zaGlmdCgpO1xuXHQgIH1cblxuXHR9O1xuXG5cdHZhciBRdWV1ZXNfMSA9IFF1ZXVlcztcblxuXHR2YXIgQm90dGxlbmVja0Vycm9yO1xuXG5cdEJvdHRsZW5lY2tFcnJvciA9IGNsYXNzIEJvdHRsZW5lY2tFcnJvciBleHRlbmRzIEVycm9yIHt9O1xuXG5cdHZhciBCb3R0bGVuZWNrRXJyb3JfMSA9IEJvdHRsZW5lY2tFcnJvcjtcblxuXHR2YXIgQm90dGxlbmVja0Vycm9yJDEsIERFRkFVTFRfUFJJT1JJVFksIEpvYiwgTlVNX1BSSU9SSVRJRVMsIHBhcnNlciQxO1xuXG5cdE5VTV9QUklPUklUSUVTID0gMTA7XG5cblx0REVGQVVMVF9QUklPUklUWSA9IDU7XG5cblx0cGFyc2VyJDEgPSBwYXJzZXI7XG5cblx0Qm90dGxlbmVja0Vycm9yJDEgPSBCb3R0bGVuZWNrRXJyb3JfMTtcblxuXHRKb2IgPSBjbGFzcyBKb2Ige1xuXHQgIGNvbnN0cnVjdG9yKHRhc2ssIGFyZ3MsIG9wdGlvbnMsIGpvYkRlZmF1bHRzLCByZWplY3RPbkRyb3AsIEV2ZW50cywgX3N0YXRlcywgUHJvbWlzZSkge1xuXHQgICAgdGhpcy50YXNrID0gdGFzaztcblx0ICAgIHRoaXMuYXJncyA9IGFyZ3M7XG5cdCAgICB0aGlzLnJlamVjdE9uRHJvcCA9IHJlamVjdE9uRHJvcDtcblx0ICAgIHRoaXMuRXZlbnRzID0gRXZlbnRzO1xuXHQgICAgdGhpcy5fc3RhdGVzID0gX3N0YXRlcztcblx0ICAgIHRoaXMuUHJvbWlzZSA9IFByb21pc2U7XG5cdCAgICB0aGlzLm9wdGlvbnMgPSBwYXJzZXIkMS5sb2FkKG9wdGlvbnMsIGpvYkRlZmF1bHRzKTtcblx0ICAgIHRoaXMub3B0aW9ucy5wcmlvcml0eSA9IHRoaXMuX3Nhbml0aXplUHJpb3JpdHkodGhpcy5vcHRpb25zLnByaW9yaXR5KTtcblx0ICAgIGlmICh0aGlzLm9wdGlvbnMuaWQgPT09IGpvYkRlZmF1bHRzLmlkKSB7XG5cdCAgICAgIHRoaXMub3B0aW9ucy5pZCA9IGAke3RoaXMub3B0aW9ucy5pZH0tJHt0aGlzLl9yYW5kb21JbmRleCgpfWA7XG5cdCAgICB9XG5cdCAgICB0aGlzLnByb21pc2UgPSBuZXcgdGhpcy5Qcm9taXNlKChfcmVzb2x2ZSwgX3JlamVjdCkgPT4ge1xuXHQgICAgICB0aGlzLl9yZXNvbHZlID0gX3Jlc29sdmU7XG5cdCAgICAgIHRoaXMuX3JlamVjdCA9IF9yZWplY3Q7XG5cdCAgICB9KTtcblx0ICAgIHRoaXMucmV0cnlDb3VudCA9IDA7XG5cdCAgfVxuXG5cdCAgX3Nhbml0aXplUHJpb3JpdHkocHJpb3JpdHkpIHtcblx0ICAgIHZhciBzUHJvcGVydHk7XG5cdCAgICBzUHJvcGVydHkgPSB+fnByaW9yaXR5ICE9PSBwcmlvcml0eSA/IERFRkFVTFRfUFJJT1JJVFkgOiBwcmlvcml0eTtcblx0ICAgIGlmIChzUHJvcGVydHkgPCAwKSB7XG5cdCAgICAgIHJldHVybiAwO1xuXHQgICAgfSBlbHNlIGlmIChzUHJvcGVydHkgPiBOVU1fUFJJT1JJVElFUyAtIDEpIHtcblx0ICAgICAgcmV0dXJuIE5VTV9QUklPUklUSUVTIC0gMTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIHJldHVybiBzUHJvcGVydHk7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgX3JhbmRvbUluZGV4KCkge1xuXHQgICAgcmV0dXJuIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIpO1xuXHQgIH1cblxuXHQgIGRvRHJvcCh7ZXJyb3IsIG1lc3NhZ2UgPSBcIlRoaXMgam9iIGhhcyBiZWVuIGRyb3BwZWQgYnkgQm90dGxlbmVja1wifSA9IHt9KSB7XG5cdCAgICBpZiAodGhpcy5fc3RhdGVzLnJlbW92ZSh0aGlzLm9wdGlvbnMuaWQpKSB7XG5cdCAgICAgIGlmICh0aGlzLnJlamVjdE9uRHJvcCkge1xuXHQgICAgICAgIHRoaXMuX3JlamVjdChlcnJvciAhPSBudWxsID8gZXJyb3IgOiBuZXcgQm90dGxlbmVja0Vycm9yJDEobWVzc2FnZSkpO1xuXHQgICAgICB9XG5cdCAgICAgIHRoaXMuRXZlbnRzLnRyaWdnZXIoXCJkcm9wcGVkXCIsIHthcmdzOiB0aGlzLmFyZ3MsIG9wdGlvbnM6IHRoaXMub3B0aW9ucywgdGFzazogdGhpcy50YXNrLCBwcm9taXNlOiB0aGlzLnByb21pc2V9KTtcblx0ICAgICAgcmV0dXJuIHRydWU7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICByZXR1cm4gZmFsc2U7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgX2Fzc2VydFN0YXR1cyhleHBlY3RlZCkge1xuXHQgICAgdmFyIHN0YXR1cztcblx0ICAgIHN0YXR1cyA9IHRoaXMuX3N0YXRlcy5qb2JTdGF0dXModGhpcy5vcHRpb25zLmlkKTtcblx0ICAgIGlmICghKHN0YXR1cyA9PT0gZXhwZWN0ZWQgfHwgKGV4cGVjdGVkID09PSBcIkRPTkVcIiAmJiBzdGF0dXMgPT09IG51bGwpKSkge1xuXHQgICAgICB0aHJvdyBuZXcgQm90dGxlbmVja0Vycm9yJDEoYEludmFsaWQgam9iIHN0YXR1cyAke3N0YXR1c30sIGV4cGVjdGVkICR7ZXhwZWN0ZWR9LiBQbGVhc2Ugb3BlbiBhbiBpc3N1ZSBhdCBodHRwczovL2dpdGh1Yi5jb20vU0dyb25kaW4vYm90dGxlbmVjay9pc3N1ZXNgKTtcblx0ICAgIH1cblx0ICB9XG5cblx0ICBkb1JlY2VpdmUoKSB7XG5cdCAgICB0aGlzLl9zdGF0ZXMuc3RhcnQodGhpcy5vcHRpb25zLmlkKTtcblx0ICAgIHJldHVybiB0aGlzLkV2ZW50cy50cmlnZ2VyKFwicmVjZWl2ZWRcIiwge2FyZ3M6IHRoaXMuYXJncywgb3B0aW9uczogdGhpcy5vcHRpb25zfSk7XG5cdCAgfVxuXG5cdCAgZG9RdWV1ZShyZWFjaGVkSFdNLCBibG9ja2VkKSB7XG5cdCAgICB0aGlzLl9hc3NlcnRTdGF0dXMoXCJSRUNFSVZFRFwiKTtcblx0ICAgIHRoaXMuX3N0YXRlcy5uZXh0KHRoaXMub3B0aW9ucy5pZCk7XG5cdCAgICByZXR1cm4gdGhpcy5FdmVudHMudHJpZ2dlcihcInF1ZXVlZFwiLCB7YXJnczogdGhpcy5hcmdzLCBvcHRpb25zOiB0aGlzLm9wdGlvbnMsIHJlYWNoZWRIV00sIGJsb2NrZWR9KTtcblx0ICB9XG5cblx0ICBkb1J1bigpIHtcblx0ICAgIGlmICh0aGlzLnJldHJ5Q291bnQgPT09IDApIHtcblx0ICAgICAgdGhpcy5fYXNzZXJ0U3RhdHVzKFwiUVVFVUVEXCIpO1xuXHQgICAgICB0aGlzLl9zdGF0ZXMubmV4dCh0aGlzLm9wdGlvbnMuaWQpO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgdGhpcy5fYXNzZXJ0U3RhdHVzKFwiRVhFQ1VUSU5HXCIpO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIHRoaXMuRXZlbnRzLnRyaWdnZXIoXCJzY2hlZHVsZWRcIiwge2FyZ3M6IHRoaXMuYXJncywgb3B0aW9uczogdGhpcy5vcHRpb25zfSk7XG5cdCAgfVxuXG5cdCAgYXN5bmMgZG9FeGVjdXRlKGNoYWluZWQsIGNsZWFyR2xvYmFsU3RhdGUsIHJ1biwgZnJlZSkge1xuXHQgICAgdmFyIGVycm9yLCBldmVudEluZm8sIHBhc3NlZDtcblx0ICAgIGlmICh0aGlzLnJldHJ5Q291bnQgPT09IDApIHtcblx0ICAgICAgdGhpcy5fYXNzZXJ0U3RhdHVzKFwiUlVOTklOR1wiKTtcblx0ICAgICAgdGhpcy5fc3RhdGVzLm5leHQodGhpcy5vcHRpb25zLmlkKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIHRoaXMuX2Fzc2VydFN0YXR1cyhcIkVYRUNVVElOR1wiKTtcblx0ICAgIH1cblx0ICAgIGV2ZW50SW5mbyA9IHthcmdzOiB0aGlzLmFyZ3MsIG9wdGlvbnM6IHRoaXMub3B0aW9ucywgcmV0cnlDb3VudDogdGhpcy5yZXRyeUNvdW50fTtcblx0ICAgIHRoaXMuRXZlbnRzLnRyaWdnZXIoXCJleGVjdXRpbmdcIiwgZXZlbnRJbmZvKTtcblx0ICAgIHRyeSB7XG5cdCAgICAgIHBhc3NlZCA9IChhd2FpdCAoY2hhaW5lZCAhPSBudWxsID8gY2hhaW5lZC5zY2hlZHVsZSh0aGlzLm9wdGlvbnMsIHRoaXMudGFzaywgLi4udGhpcy5hcmdzKSA6IHRoaXMudGFzayguLi50aGlzLmFyZ3MpKSk7XG5cdCAgICAgIGlmIChjbGVhckdsb2JhbFN0YXRlKCkpIHtcblx0ICAgICAgICB0aGlzLmRvRG9uZShldmVudEluZm8pO1xuXHQgICAgICAgIGF3YWl0IGZyZWUodGhpcy5vcHRpb25zLCBldmVudEluZm8pO1xuXHQgICAgICAgIHRoaXMuX2Fzc2VydFN0YXR1cyhcIkRPTkVcIik7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc29sdmUocGFzc2VkKTtcblx0ICAgICAgfVxuXHQgICAgfSBjYXRjaCAoZXJyb3IxKSB7XG5cdCAgICAgIGVycm9yID0gZXJyb3IxO1xuXHQgICAgICByZXR1cm4gdGhpcy5fb25GYWlsdXJlKGVycm9yLCBldmVudEluZm8sIGNsZWFyR2xvYmFsU3RhdGUsIHJ1biwgZnJlZSk7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgZG9FeHBpcmUoY2xlYXJHbG9iYWxTdGF0ZSwgcnVuLCBmcmVlKSB7XG5cdCAgICB2YXIgZXJyb3IsIGV2ZW50SW5mbztcblx0ICAgIGlmICh0aGlzLl9zdGF0ZXMuam9iU3RhdHVzKHRoaXMub3B0aW9ucy5pZCA9PT0gXCJSVU5OSU5HXCIpKSB7XG5cdCAgICAgIHRoaXMuX3N0YXRlcy5uZXh0KHRoaXMub3B0aW9ucy5pZCk7XG5cdCAgICB9XG5cdCAgICB0aGlzLl9hc3NlcnRTdGF0dXMoXCJFWEVDVVRJTkdcIik7XG5cdCAgICBldmVudEluZm8gPSB7YXJnczogdGhpcy5hcmdzLCBvcHRpb25zOiB0aGlzLm9wdGlvbnMsIHJldHJ5Q291bnQ6IHRoaXMucmV0cnlDb3VudH07XG5cdCAgICBlcnJvciA9IG5ldyBCb3R0bGVuZWNrRXJyb3IkMShgVGhpcyBqb2IgdGltZWQgb3V0IGFmdGVyICR7dGhpcy5vcHRpb25zLmV4cGlyYXRpb259IG1zLmApO1xuXHQgICAgcmV0dXJuIHRoaXMuX29uRmFpbHVyZShlcnJvciwgZXZlbnRJbmZvLCBjbGVhckdsb2JhbFN0YXRlLCBydW4sIGZyZWUpO1xuXHQgIH1cblxuXHQgIGFzeW5jIF9vbkZhaWx1cmUoZXJyb3IsIGV2ZW50SW5mbywgY2xlYXJHbG9iYWxTdGF0ZSwgcnVuLCBmcmVlKSB7XG5cdCAgICB2YXIgcmV0cnksIHJldHJ5QWZ0ZXI7XG5cdCAgICBpZiAoY2xlYXJHbG9iYWxTdGF0ZSgpKSB7XG5cdCAgICAgIHJldHJ5ID0gKGF3YWl0IHRoaXMuRXZlbnRzLnRyaWdnZXIoXCJmYWlsZWRcIiwgZXJyb3IsIGV2ZW50SW5mbykpO1xuXHQgICAgICBpZiAocmV0cnkgIT0gbnVsbCkge1xuXHQgICAgICAgIHJldHJ5QWZ0ZXIgPSB+fnJldHJ5O1xuXHQgICAgICAgIHRoaXMuRXZlbnRzLnRyaWdnZXIoXCJyZXRyeVwiLCBgUmV0cnlpbmcgJHt0aGlzLm9wdGlvbnMuaWR9IGFmdGVyICR7cmV0cnlBZnRlcn0gbXNgLCBldmVudEluZm8pO1xuXHQgICAgICAgIHRoaXMucmV0cnlDb3VudCsrO1xuXHQgICAgICAgIHJldHVybiBydW4ocmV0cnlBZnRlcik7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgdGhpcy5kb0RvbmUoZXZlbnRJbmZvKTtcblx0ICAgICAgICBhd2FpdCBmcmVlKHRoaXMub3B0aW9ucywgZXZlbnRJbmZvKTtcblx0ICAgICAgICB0aGlzLl9hc3NlcnRTdGF0dXMoXCJET05FXCIpO1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9yZWplY3QoZXJyb3IpO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgZG9Eb25lKGV2ZW50SW5mbykge1xuXHQgICAgdGhpcy5fYXNzZXJ0U3RhdHVzKFwiRVhFQ1VUSU5HXCIpO1xuXHQgICAgdGhpcy5fc3RhdGVzLm5leHQodGhpcy5vcHRpb25zLmlkKTtcblx0ICAgIHJldHVybiB0aGlzLkV2ZW50cy50cmlnZ2VyKFwiZG9uZVwiLCBldmVudEluZm8pO1xuXHQgIH1cblxuXHR9O1xuXG5cdHZhciBKb2JfMSA9IEpvYjtcblxuXHR2YXIgQm90dGxlbmVja0Vycm9yJDIsIExvY2FsRGF0YXN0b3JlLCBwYXJzZXIkMjtcblxuXHRwYXJzZXIkMiA9IHBhcnNlcjtcblxuXHRCb3R0bGVuZWNrRXJyb3IkMiA9IEJvdHRsZW5lY2tFcnJvcl8xO1xuXG5cdExvY2FsRGF0YXN0b3JlID0gY2xhc3MgTG9jYWxEYXRhc3RvcmUge1xuXHQgIGNvbnN0cnVjdG9yKGluc3RhbmNlLCBzdG9yZU9wdGlvbnMsIHN0b3JlSW5zdGFuY2VPcHRpb25zKSB7XG5cdCAgICB0aGlzLmluc3RhbmNlID0gaW5zdGFuY2U7XG5cdCAgICB0aGlzLnN0b3JlT3B0aW9ucyA9IHN0b3JlT3B0aW9ucztcblx0ICAgIHRoaXMuY2xpZW50SWQgPSB0aGlzLmluc3RhbmNlLl9yYW5kb21JbmRleCgpO1xuXHQgICAgcGFyc2VyJDIubG9hZChzdG9yZUluc3RhbmNlT3B0aW9ucywgc3RvcmVJbnN0YW5jZU9wdGlvbnMsIHRoaXMpO1xuXHQgICAgdGhpcy5fbmV4dFJlcXVlc3QgPSB0aGlzLl9sYXN0UmVzZXJ2b2lyUmVmcmVzaCA9IHRoaXMuX2xhc3RSZXNlcnZvaXJJbmNyZWFzZSA9IERhdGUubm93KCk7XG5cdCAgICB0aGlzLl9ydW5uaW5nID0gMDtcblx0ICAgIHRoaXMuX2RvbmUgPSAwO1xuXHQgICAgdGhpcy5fdW5ibG9ja1RpbWUgPSAwO1xuXHQgICAgdGhpcy5yZWFkeSA9IHRoaXMuUHJvbWlzZS5yZXNvbHZlKCk7XG5cdCAgICB0aGlzLmNsaWVudHMgPSB7fTtcblx0ICAgIHRoaXMuX3N0YXJ0SGVhcnRiZWF0KCk7XG5cdCAgfVxuXG5cdCAgX3N0YXJ0SGVhcnRiZWF0KCkge1xuXHQgICAgdmFyIGJhc2U7XG5cdCAgICBpZiAoKHRoaXMuaGVhcnRiZWF0ID09IG51bGwpICYmICgoKHRoaXMuc3RvcmVPcHRpb25zLnJlc2Vydm9pclJlZnJlc2hJbnRlcnZhbCAhPSBudWxsKSAmJiAodGhpcy5zdG9yZU9wdGlvbnMucmVzZXJ2b2lyUmVmcmVzaEFtb3VudCAhPSBudWxsKSkgfHwgKCh0aGlzLnN0b3JlT3B0aW9ucy5yZXNlcnZvaXJJbmNyZWFzZUludGVydmFsICE9IG51bGwpICYmICh0aGlzLnN0b3JlT3B0aW9ucy5yZXNlcnZvaXJJbmNyZWFzZUFtb3VudCAhPSBudWxsKSkpKSB7XG5cdCAgICAgIHJldHVybiB0eXBlb2YgKGJhc2UgPSAodGhpcy5oZWFydGJlYXQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG5cdCAgICAgICAgdmFyIGFtb3VudCwgaW5jciwgbWF4aW11bSwgbm93LCByZXNlcnZvaXI7XG5cdCAgICAgICAgbm93ID0gRGF0ZS5ub3coKTtcblx0ICAgICAgICBpZiAoKHRoaXMuc3RvcmVPcHRpb25zLnJlc2Vydm9pclJlZnJlc2hJbnRlcnZhbCAhPSBudWxsKSAmJiBub3cgPj0gdGhpcy5fbGFzdFJlc2Vydm9pclJlZnJlc2ggKyB0aGlzLnN0b3JlT3B0aW9ucy5yZXNlcnZvaXJSZWZyZXNoSW50ZXJ2YWwpIHtcblx0ICAgICAgICAgIHRoaXMuX2xhc3RSZXNlcnZvaXJSZWZyZXNoID0gbm93O1xuXHQgICAgICAgICAgdGhpcy5zdG9yZU9wdGlvbnMucmVzZXJ2b2lyID0gdGhpcy5zdG9yZU9wdGlvbnMucmVzZXJ2b2lyUmVmcmVzaEFtb3VudDtcblx0ICAgICAgICAgIHRoaXMuaW5zdGFuY2UuX2RyYWluQWxsKHRoaXMuY29tcHV0ZUNhcGFjaXR5KCkpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoKHRoaXMuc3RvcmVPcHRpb25zLnJlc2Vydm9pckluY3JlYXNlSW50ZXJ2YWwgIT0gbnVsbCkgJiYgbm93ID49IHRoaXMuX2xhc3RSZXNlcnZvaXJJbmNyZWFzZSArIHRoaXMuc3RvcmVPcHRpb25zLnJlc2Vydm9pckluY3JlYXNlSW50ZXJ2YWwpIHtcblx0ICAgICAgICAgICh7XG5cdCAgICAgICAgICAgIHJlc2Vydm9pckluY3JlYXNlQW1vdW50OiBhbW91bnQsXG5cdCAgICAgICAgICAgIHJlc2Vydm9pckluY3JlYXNlTWF4aW11bTogbWF4aW11bSxcblx0ICAgICAgICAgICAgcmVzZXJ2b2lyXG5cdCAgICAgICAgICB9ID0gdGhpcy5zdG9yZU9wdGlvbnMpO1xuXHQgICAgICAgICAgdGhpcy5fbGFzdFJlc2Vydm9pckluY3JlYXNlID0gbm93O1xuXHQgICAgICAgICAgaW5jciA9IG1heGltdW0gIT0gbnVsbCA/IE1hdGgubWluKGFtb3VudCwgbWF4aW11bSAtIHJlc2Vydm9pcikgOiBhbW91bnQ7XG5cdCAgICAgICAgICBpZiAoaW5jciA+IDApIHtcblx0ICAgICAgICAgICAgdGhpcy5zdG9yZU9wdGlvbnMucmVzZXJ2b2lyICs9IGluY3I7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLmluc3RhbmNlLl9kcmFpbkFsbCh0aGlzLmNvbXB1dGVDYXBhY2l0eSgpKTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgIH0sIHRoaXMuaGVhcnRiZWF0SW50ZXJ2YWwpKSkudW5yZWYgPT09IFwiZnVuY3Rpb25cIiA/IGJhc2UudW5yZWYoKSA6IHZvaWQgMDtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIHJldHVybiBjbGVhckludGVydmFsKHRoaXMuaGVhcnRiZWF0KTtcblx0ICAgIH1cblx0ICB9XG5cblx0ICBhc3luYyBfX3B1Ymxpc2hfXyhtZXNzYWdlKSB7XG5cdCAgICBhd2FpdCB0aGlzLnlpZWxkTG9vcCgpO1xuXHQgICAgcmV0dXJuIHRoaXMuaW5zdGFuY2UuRXZlbnRzLnRyaWdnZXIoXCJtZXNzYWdlXCIsIG1lc3NhZ2UudG9TdHJpbmcoKSk7XG5cdCAgfVxuXG5cdCAgYXN5bmMgX19kaXNjb25uZWN0X18oZmx1c2gpIHtcblx0ICAgIGF3YWl0IHRoaXMueWllbGRMb29wKCk7XG5cdCAgICBjbGVhckludGVydmFsKHRoaXMuaGVhcnRiZWF0KTtcblx0ICAgIHJldHVybiB0aGlzLlByb21pc2UucmVzb2x2ZSgpO1xuXHQgIH1cblxuXHQgIHlpZWxkTG9vcCh0ID0gMCkge1xuXHQgICAgcmV0dXJuIG5ldyB0aGlzLlByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdCAgICAgIHJldHVybiBzZXRUaW1lb3V0KHJlc29sdmUsIHQpO1xuXHQgICAgfSk7XG5cdCAgfVxuXG5cdCAgY29tcHV0ZVBlbmFsdHkoKSB7XG5cdCAgICB2YXIgcmVmO1xuXHQgICAgcmV0dXJuIChyZWYgPSB0aGlzLnN0b3JlT3B0aW9ucy5wZW5hbHR5KSAhPSBudWxsID8gcmVmIDogKDE1ICogdGhpcy5zdG9yZU9wdGlvbnMubWluVGltZSkgfHwgNTAwMDtcblx0ICB9XG5cblx0ICBhc3luYyBfX3VwZGF0ZVNldHRpbmdzX18ob3B0aW9ucykge1xuXHQgICAgYXdhaXQgdGhpcy55aWVsZExvb3AoKTtcblx0ICAgIHBhcnNlciQyLm92ZXJ3cml0ZShvcHRpb25zLCBvcHRpb25zLCB0aGlzLnN0b3JlT3B0aW9ucyk7XG5cdCAgICB0aGlzLl9zdGFydEhlYXJ0YmVhdCgpO1xuXHQgICAgdGhpcy5pbnN0YW5jZS5fZHJhaW5BbGwodGhpcy5jb21wdXRlQ2FwYWNpdHkoKSk7XG5cdCAgICByZXR1cm4gdHJ1ZTtcblx0ICB9XG5cblx0ICBhc3luYyBfX3J1bm5pbmdfXygpIHtcblx0ICAgIGF3YWl0IHRoaXMueWllbGRMb29wKCk7XG5cdCAgICByZXR1cm4gdGhpcy5fcnVubmluZztcblx0ICB9XG5cblx0ICBhc3luYyBfX3F1ZXVlZF9fKCkge1xuXHQgICAgYXdhaXQgdGhpcy55aWVsZExvb3AoKTtcblx0ICAgIHJldHVybiB0aGlzLmluc3RhbmNlLnF1ZXVlZCgpO1xuXHQgIH1cblxuXHQgIGFzeW5jIF9fZG9uZV9fKCkge1xuXHQgICAgYXdhaXQgdGhpcy55aWVsZExvb3AoKTtcblx0ICAgIHJldHVybiB0aGlzLl9kb25lO1xuXHQgIH1cblxuXHQgIGFzeW5jIF9fZ3JvdXBDaGVja19fKHRpbWUpIHtcblx0ICAgIGF3YWl0IHRoaXMueWllbGRMb29wKCk7XG5cdCAgICByZXR1cm4gKHRoaXMuX25leHRSZXF1ZXN0ICsgdGhpcy50aW1lb3V0KSA8IHRpbWU7XG5cdCAgfVxuXG5cdCAgY29tcHV0ZUNhcGFjaXR5KCkge1xuXHQgICAgdmFyIG1heENvbmN1cnJlbnQsIHJlc2Vydm9pcjtcblx0ICAgICh7bWF4Q29uY3VycmVudCwgcmVzZXJ2b2lyfSA9IHRoaXMuc3RvcmVPcHRpb25zKTtcblx0ICAgIGlmICgobWF4Q29uY3VycmVudCAhPSBudWxsKSAmJiAocmVzZXJ2b2lyICE9IG51bGwpKSB7XG5cdCAgICAgIHJldHVybiBNYXRoLm1pbihtYXhDb25jdXJyZW50IC0gdGhpcy5fcnVubmluZywgcmVzZXJ2b2lyKTtcblx0ICAgIH0gZWxzZSBpZiAobWF4Q29uY3VycmVudCAhPSBudWxsKSB7XG5cdCAgICAgIHJldHVybiBtYXhDb25jdXJyZW50IC0gdGhpcy5fcnVubmluZztcblx0ICAgIH0gZWxzZSBpZiAocmVzZXJ2b2lyICE9IG51bGwpIHtcblx0ICAgICAgcmV0dXJuIHJlc2Vydm9pcjtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIHJldHVybiBudWxsO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIGNvbmRpdGlvbnNDaGVjayh3ZWlnaHQpIHtcblx0ICAgIHZhciBjYXBhY2l0eTtcblx0ICAgIGNhcGFjaXR5ID0gdGhpcy5jb21wdXRlQ2FwYWNpdHkoKTtcblx0ICAgIHJldHVybiAoY2FwYWNpdHkgPT0gbnVsbCkgfHwgd2VpZ2h0IDw9IGNhcGFjaXR5O1xuXHQgIH1cblxuXHQgIGFzeW5jIF9faW5jcmVtZW50UmVzZXJ2b2lyX18oaW5jcikge1xuXHQgICAgdmFyIHJlc2Vydm9pcjtcblx0ICAgIGF3YWl0IHRoaXMueWllbGRMb29wKCk7XG5cdCAgICByZXNlcnZvaXIgPSB0aGlzLnN0b3JlT3B0aW9ucy5yZXNlcnZvaXIgKz0gaW5jcjtcblx0ICAgIHRoaXMuaW5zdGFuY2UuX2RyYWluQWxsKHRoaXMuY29tcHV0ZUNhcGFjaXR5KCkpO1xuXHQgICAgcmV0dXJuIHJlc2Vydm9pcjtcblx0ICB9XG5cblx0ICBhc3luYyBfX2N1cnJlbnRSZXNlcnZvaXJfXygpIHtcblx0ICAgIGF3YWl0IHRoaXMueWllbGRMb29wKCk7XG5cdCAgICByZXR1cm4gdGhpcy5zdG9yZU9wdGlvbnMucmVzZXJ2b2lyO1xuXHQgIH1cblxuXHQgIGlzQmxvY2tlZChub3cpIHtcblx0ICAgIHJldHVybiB0aGlzLl91bmJsb2NrVGltZSA+PSBub3c7XG5cdCAgfVxuXG5cdCAgY2hlY2sod2VpZ2h0LCBub3cpIHtcblx0ICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbnNDaGVjayh3ZWlnaHQpICYmICh0aGlzLl9uZXh0UmVxdWVzdCAtIG5vdykgPD0gMDtcblx0ICB9XG5cblx0ICBhc3luYyBfX2NoZWNrX18od2VpZ2h0KSB7XG5cdCAgICB2YXIgbm93O1xuXHQgICAgYXdhaXQgdGhpcy55aWVsZExvb3AoKTtcblx0ICAgIG5vdyA9IERhdGUubm93KCk7XG5cdCAgICByZXR1cm4gdGhpcy5jaGVjayh3ZWlnaHQsIG5vdyk7XG5cdCAgfVxuXG5cdCAgYXN5bmMgX19yZWdpc3Rlcl9fKGluZGV4LCB3ZWlnaHQsIGV4cGlyYXRpb24pIHtcblx0ICAgIHZhciBub3csIHdhaXQ7XG5cdCAgICBhd2FpdCB0aGlzLnlpZWxkTG9vcCgpO1xuXHQgICAgbm93ID0gRGF0ZS5ub3coKTtcblx0ICAgIGlmICh0aGlzLmNvbmRpdGlvbnNDaGVjayh3ZWlnaHQpKSB7XG5cdCAgICAgIHRoaXMuX3J1bm5pbmcgKz0gd2VpZ2h0O1xuXHQgICAgICBpZiAodGhpcy5zdG9yZU9wdGlvbnMucmVzZXJ2b2lyICE9IG51bGwpIHtcblx0ICAgICAgICB0aGlzLnN0b3JlT3B0aW9ucy5yZXNlcnZvaXIgLT0gd2VpZ2h0O1xuXHQgICAgICB9XG5cdCAgICAgIHdhaXQgPSBNYXRoLm1heCh0aGlzLl9uZXh0UmVxdWVzdCAtIG5vdywgMCk7XG5cdCAgICAgIHRoaXMuX25leHRSZXF1ZXN0ID0gbm93ICsgd2FpdCArIHRoaXMuc3RvcmVPcHRpb25zLm1pblRpbWU7XG5cdCAgICAgIHJldHVybiB7XG5cdCAgICAgICAgc3VjY2VzczogdHJ1ZSxcblx0ICAgICAgICB3YWl0LFxuXHQgICAgICAgIHJlc2Vydm9pcjogdGhpcy5zdG9yZU9wdGlvbnMucmVzZXJ2b2lyXG5cdCAgICAgIH07XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICByZXR1cm4ge1xuXHQgICAgICAgIHN1Y2Nlc3M6IGZhbHNlXG5cdCAgICAgIH07XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgc3RyYXRlZ3lJc0Jsb2NrKCkge1xuXHQgICAgcmV0dXJuIHRoaXMuc3RvcmVPcHRpb25zLnN0cmF0ZWd5ID09PSAzO1xuXHQgIH1cblxuXHQgIGFzeW5jIF9fc3VibWl0X18ocXVldWVMZW5ndGgsIHdlaWdodCkge1xuXHQgICAgdmFyIGJsb2NrZWQsIG5vdywgcmVhY2hlZEhXTTtcblx0ICAgIGF3YWl0IHRoaXMueWllbGRMb29wKCk7XG5cdCAgICBpZiAoKHRoaXMuc3RvcmVPcHRpb25zLm1heENvbmN1cnJlbnQgIT0gbnVsbCkgJiYgd2VpZ2h0ID4gdGhpcy5zdG9yZU9wdGlvbnMubWF4Q29uY3VycmVudCkge1xuXHQgICAgICB0aHJvdyBuZXcgQm90dGxlbmVja0Vycm9yJDIoYEltcG9zc2libGUgdG8gYWRkIGEgam9iIGhhdmluZyBhIHdlaWdodCBvZiAke3dlaWdodH0gdG8gYSBsaW1pdGVyIGhhdmluZyBhIG1heENvbmN1cnJlbnQgc2V0dGluZyBvZiAke3RoaXMuc3RvcmVPcHRpb25zLm1heENvbmN1cnJlbnR9YCk7XG5cdCAgICB9XG5cdCAgICBub3cgPSBEYXRlLm5vdygpO1xuXHQgICAgcmVhY2hlZEhXTSA9ICh0aGlzLnN0b3JlT3B0aW9ucy5oaWdoV2F0ZXIgIT0gbnVsbCkgJiYgcXVldWVMZW5ndGggPT09IHRoaXMuc3RvcmVPcHRpb25zLmhpZ2hXYXRlciAmJiAhdGhpcy5jaGVjayh3ZWlnaHQsIG5vdyk7XG5cdCAgICBibG9ja2VkID0gdGhpcy5zdHJhdGVneUlzQmxvY2soKSAmJiAocmVhY2hlZEhXTSB8fCB0aGlzLmlzQmxvY2tlZChub3cpKTtcblx0ICAgIGlmIChibG9ja2VkKSB7XG5cdCAgICAgIHRoaXMuX3VuYmxvY2tUaW1lID0gbm93ICsgdGhpcy5jb21wdXRlUGVuYWx0eSgpO1xuXHQgICAgICB0aGlzLl9uZXh0UmVxdWVzdCA9IHRoaXMuX3VuYmxvY2tUaW1lICsgdGhpcy5zdG9yZU9wdGlvbnMubWluVGltZTtcblx0ICAgICAgdGhpcy5pbnN0YW5jZS5fZHJvcEFsbFF1ZXVlZCgpO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIHtcblx0ICAgICAgcmVhY2hlZEhXTSxcblx0ICAgICAgYmxvY2tlZCxcblx0ICAgICAgc3RyYXRlZ3k6IHRoaXMuc3RvcmVPcHRpb25zLnN0cmF0ZWd5XG5cdCAgICB9O1xuXHQgIH1cblxuXHQgIGFzeW5jIF9fZnJlZV9fKGluZGV4LCB3ZWlnaHQpIHtcblx0ICAgIGF3YWl0IHRoaXMueWllbGRMb29wKCk7XG5cdCAgICB0aGlzLl9ydW5uaW5nIC09IHdlaWdodDtcblx0ICAgIHRoaXMuX2RvbmUgKz0gd2VpZ2h0O1xuXHQgICAgdGhpcy5pbnN0YW5jZS5fZHJhaW5BbGwodGhpcy5jb21wdXRlQ2FwYWNpdHkoKSk7XG5cdCAgICByZXR1cm4ge1xuXHQgICAgICBydW5uaW5nOiB0aGlzLl9ydW5uaW5nXG5cdCAgICB9O1xuXHQgIH1cblxuXHR9O1xuXG5cdHZhciBMb2NhbERhdGFzdG9yZV8xID0gTG9jYWxEYXRhc3RvcmU7XG5cblx0dmFyIEJvdHRsZW5lY2tFcnJvciQzLCBTdGF0ZXM7XG5cblx0Qm90dGxlbmVja0Vycm9yJDMgPSBCb3R0bGVuZWNrRXJyb3JfMTtcblxuXHRTdGF0ZXMgPSBjbGFzcyBTdGF0ZXMge1xuXHQgIGNvbnN0cnVjdG9yKHN0YXR1czEpIHtcblx0ICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzMTtcblx0ICAgIHRoaXMuX2pvYnMgPSB7fTtcblx0ICAgIHRoaXMuY291bnRzID0gdGhpcy5zdGF0dXMubWFwKGZ1bmN0aW9uKCkge1xuXHQgICAgICByZXR1cm4gMDtcblx0ICAgIH0pO1xuXHQgIH1cblxuXHQgIG5leHQoaWQpIHtcblx0ICAgIHZhciBjdXJyZW50LCBuZXh0O1xuXHQgICAgY3VycmVudCA9IHRoaXMuX2pvYnNbaWRdO1xuXHQgICAgbmV4dCA9IGN1cnJlbnQgKyAxO1xuXHQgICAgaWYgKChjdXJyZW50ICE9IG51bGwpICYmIG5leHQgPCB0aGlzLnN0YXR1cy5sZW5ndGgpIHtcblx0ICAgICAgdGhpcy5jb3VudHNbY3VycmVudF0tLTtcblx0ICAgICAgdGhpcy5jb3VudHNbbmV4dF0rKztcblx0ICAgICAgcmV0dXJuIHRoaXMuX2pvYnNbaWRdKys7XG5cdCAgICB9IGVsc2UgaWYgKGN1cnJlbnQgIT0gbnVsbCkge1xuXHQgICAgICB0aGlzLmNvdW50c1tjdXJyZW50XS0tO1xuXHQgICAgICByZXR1cm4gZGVsZXRlIHRoaXMuX2pvYnNbaWRdO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIHN0YXJ0KGlkKSB7XG5cdCAgICB2YXIgaW5pdGlhbDtcblx0ICAgIGluaXRpYWwgPSAwO1xuXHQgICAgdGhpcy5fam9ic1tpZF0gPSBpbml0aWFsO1xuXHQgICAgcmV0dXJuIHRoaXMuY291bnRzW2luaXRpYWxdKys7XG5cdCAgfVxuXG5cdCAgcmVtb3ZlKGlkKSB7XG5cdCAgICB2YXIgY3VycmVudDtcblx0ICAgIGN1cnJlbnQgPSB0aGlzLl9qb2JzW2lkXTtcblx0ICAgIGlmIChjdXJyZW50ICE9IG51bGwpIHtcblx0ICAgICAgdGhpcy5jb3VudHNbY3VycmVudF0tLTtcblx0ICAgICAgZGVsZXRlIHRoaXMuX2pvYnNbaWRdO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIGN1cnJlbnQgIT0gbnVsbDtcblx0ICB9XG5cblx0ICBqb2JTdGF0dXMoaWQpIHtcblx0ICAgIHZhciByZWY7XG5cdCAgICByZXR1cm4gKHJlZiA9IHRoaXMuc3RhdHVzW3RoaXMuX2pvYnNbaWRdXSkgIT0gbnVsbCA/IHJlZiA6IG51bGw7XG5cdCAgfVxuXG5cdCAgc3RhdHVzSm9icyhzdGF0dXMpIHtcblx0ICAgIHZhciBrLCBwb3MsIHJlZiwgcmVzdWx0cywgdjtcblx0ICAgIGlmIChzdGF0dXMgIT0gbnVsbCkge1xuXHQgICAgICBwb3MgPSB0aGlzLnN0YXR1cy5pbmRleE9mKHN0YXR1cyk7XG5cdCAgICAgIGlmIChwb3MgPCAwKSB7XG5cdCAgICAgICAgdGhyb3cgbmV3IEJvdHRsZW5lY2tFcnJvciQzKGBzdGF0dXMgbXVzdCBiZSBvbmUgb2YgJHt0aGlzLnN0YXR1cy5qb2luKCcsICcpfWApO1xuXHQgICAgICB9XG5cdCAgICAgIHJlZiA9IHRoaXMuX2pvYnM7XG5cdCAgICAgIHJlc3VsdHMgPSBbXTtcblx0ICAgICAgZm9yIChrIGluIHJlZikge1xuXHQgICAgICAgIHYgPSByZWZba107XG5cdCAgICAgICAgaWYgKHYgPT09IHBvcykge1xuXHQgICAgICAgICAgcmVzdWx0cy5wdXNoKGspO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgICByZXR1cm4gcmVzdWx0cztcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLl9qb2JzKTtcblx0ICAgIH1cblx0ICB9XG5cblx0ICBzdGF0dXNDb3VudHMoKSB7XG5cdCAgICByZXR1cm4gdGhpcy5jb3VudHMucmVkdWNlKCgoYWNjLCB2LCBpKSA9PiB7XG5cdCAgICAgIGFjY1t0aGlzLnN0YXR1c1tpXV0gPSB2O1xuXHQgICAgICByZXR1cm4gYWNjO1xuXHQgICAgfSksIHt9KTtcblx0ICB9XG5cblx0fTtcblxuXHR2YXIgU3RhdGVzXzEgPSBTdGF0ZXM7XG5cblx0dmFyIERMTGlzdCQyLCBTeW5jO1xuXG5cdERMTGlzdCQyID0gRExMaXN0XzE7XG5cblx0U3luYyA9IGNsYXNzIFN5bmMge1xuXHQgIGNvbnN0cnVjdG9yKG5hbWUsIFByb21pc2UpIHtcblx0ICAgIHRoaXMuc2NoZWR1bGUgPSB0aGlzLnNjaGVkdWxlLmJpbmQodGhpcyk7XG5cdCAgICB0aGlzLm5hbWUgPSBuYW1lO1xuXHQgICAgdGhpcy5Qcm9taXNlID0gUHJvbWlzZTtcblx0ICAgIHRoaXMuX3J1bm5pbmcgPSAwO1xuXHQgICAgdGhpcy5fcXVldWUgPSBuZXcgRExMaXN0JDIoKTtcblx0ICB9XG5cblx0ICBpc0VtcHR5KCkge1xuXHQgICAgcmV0dXJuIHRoaXMuX3F1ZXVlLmxlbmd0aCA9PT0gMDtcblx0ICB9XG5cblx0ICBhc3luYyBfdHJ5VG9SdW4oKSB7XG5cdCAgICB2YXIgYXJncywgY2IsIGVycm9yLCByZWplY3QsIHJlc29sdmUsIHJldHVybmVkLCB0YXNrO1xuXHQgICAgaWYgKCh0aGlzLl9ydW5uaW5nIDwgMSkgJiYgdGhpcy5fcXVldWUubGVuZ3RoID4gMCkge1xuXHQgICAgICB0aGlzLl9ydW5uaW5nKys7XG5cdCAgICAgICh7dGFzaywgYXJncywgcmVzb2x2ZSwgcmVqZWN0fSA9IHRoaXMuX3F1ZXVlLnNoaWZ0KCkpO1xuXHQgICAgICBjYiA9IChhd2FpdCAoYXN5bmMgZnVuY3Rpb24oKSB7XG5cdCAgICAgICAgdHJ5IHtcblx0ICAgICAgICAgIHJldHVybmVkID0gKGF3YWl0IHRhc2soLi4uYXJncykpO1xuXHQgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShyZXR1cm5lZCk7XG5cdCAgICAgICAgICB9O1xuXHQgICAgICAgIH0gY2F0Y2ggKGVycm9yMSkge1xuXHQgICAgICAgICAgZXJyb3IgPSBlcnJvcjE7XG5cdCAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG5cdCAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyb3IpO1xuXHQgICAgICAgICAgfTtcblx0ICAgICAgICB9XG5cdCAgICAgIH0pKCkpO1xuXHQgICAgICB0aGlzLl9ydW5uaW5nLS07XG5cdCAgICAgIHRoaXMuX3RyeVRvUnVuKCk7XG5cdCAgICAgIHJldHVybiBjYigpO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIHNjaGVkdWxlKHRhc2ssIC4uLmFyZ3MpIHtcblx0ICAgIHZhciBwcm9taXNlLCByZWplY3QsIHJlc29sdmU7XG5cdCAgICByZXNvbHZlID0gcmVqZWN0ID0gbnVsbDtcblx0ICAgIHByb21pc2UgPSBuZXcgdGhpcy5Qcm9taXNlKGZ1bmN0aW9uKF9yZXNvbHZlLCBfcmVqZWN0KSB7XG5cdCAgICAgIHJlc29sdmUgPSBfcmVzb2x2ZTtcblx0ICAgICAgcmV0dXJuIHJlamVjdCA9IF9yZWplY3Q7XG5cdCAgICB9KTtcblx0ICAgIHRoaXMuX3F1ZXVlLnB1c2goe3Rhc2ssIGFyZ3MsIHJlc29sdmUsIHJlamVjdH0pO1xuXHQgICAgdGhpcy5fdHJ5VG9SdW4oKTtcblx0ICAgIHJldHVybiBwcm9taXNlO1xuXHQgIH1cblxuXHR9O1xuXG5cdHZhciBTeW5jXzEgPSBTeW5jO1xuXG5cdHZhciB2ZXJzaW9uID0gXCIyLjE5LjVcIjtcblx0dmFyIHZlcnNpb24kMSA9IHtcblx0XHR2ZXJzaW9uOiB2ZXJzaW9uXG5cdH07XG5cblx0dmFyIHZlcnNpb24kMiA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcblx0XHR2ZXJzaW9uOiB2ZXJzaW9uLFxuXHRcdGRlZmF1bHQ6IHZlcnNpb24kMVxuXHR9KTtcblxuXHR2YXIgcmVxdWlyZSQkMiA9ICgpID0+IGNvbnNvbGUubG9nKCdZb3UgbXVzdCBpbXBvcnQgdGhlIGZ1bGwgdmVyc2lvbiBvZiBCb3R0bGVuZWNrIGluIG9yZGVyIHRvIHVzZSB0aGlzIGZlYXR1cmUuJyk7XG5cblx0dmFyIHJlcXVpcmUkJDMgPSAoKSA9PiBjb25zb2xlLmxvZygnWW91IG11c3QgaW1wb3J0IHRoZSBmdWxsIHZlcnNpb24gb2YgQm90dGxlbmVjayBpbiBvcmRlciB0byB1c2UgdGhpcyBmZWF0dXJlLicpO1xuXG5cdHZhciByZXF1aXJlJCQ0ID0gKCkgPT4gY29uc29sZS5sb2coJ1lvdSBtdXN0IGltcG9ydCB0aGUgZnVsbCB2ZXJzaW9uIG9mIEJvdHRsZW5lY2sgaW4gb3JkZXIgdG8gdXNlIHRoaXMgZmVhdHVyZS4nKTtcblxuXHR2YXIgRXZlbnRzJDIsIEdyb3VwLCBJT1JlZGlzQ29ubmVjdGlvbiQxLCBSZWRpc0Nvbm5lY3Rpb24kMSwgU2NyaXB0cyQxLCBwYXJzZXIkMztcblxuXHRwYXJzZXIkMyA9IHBhcnNlcjtcblxuXHRFdmVudHMkMiA9IEV2ZW50c18xO1xuXG5cdFJlZGlzQ29ubmVjdGlvbiQxID0gcmVxdWlyZSQkMjtcblxuXHRJT1JlZGlzQ29ubmVjdGlvbiQxID0gcmVxdWlyZSQkMztcblxuXHRTY3JpcHRzJDEgPSByZXF1aXJlJCQ0O1xuXG5cdEdyb3VwID0gKGZ1bmN0aW9uKCkge1xuXHQgIGNsYXNzIEdyb3VwIHtcblx0ICAgIGNvbnN0cnVjdG9yKGxpbWl0ZXJPcHRpb25zID0ge30pIHtcblx0ICAgICAgdGhpcy5kZWxldGVLZXkgPSB0aGlzLmRlbGV0ZUtleS5iaW5kKHRoaXMpO1xuXHQgICAgICB0aGlzLmxpbWl0ZXJPcHRpb25zID0gbGltaXRlck9wdGlvbnM7XG5cdCAgICAgIHBhcnNlciQzLmxvYWQodGhpcy5saW1pdGVyT3B0aW9ucywgdGhpcy5kZWZhdWx0cywgdGhpcyk7XG5cdCAgICAgIHRoaXMuRXZlbnRzID0gbmV3IEV2ZW50cyQyKHRoaXMpO1xuXHQgICAgICB0aGlzLmluc3RhbmNlcyA9IHt9O1xuXHQgICAgICB0aGlzLkJvdHRsZW5lY2sgPSBCb3R0bGVuZWNrXzE7XG5cdCAgICAgIHRoaXMuX3N0YXJ0QXV0b0NsZWFudXAoKTtcblx0ICAgICAgdGhpcy5zaGFyZWRDb25uZWN0aW9uID0gdGhpcy5jb25uZWN0aW9uICE9IG51bGw7XG5cdCAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb24gPT0gbnVsbCkge1xuXHQgICAgICAgIGlmICh0aGlzLmxpbWl0ZXJPcHRpb25zLmRhdGFzdG9yZSA9PT0gXCJyZWRpc1wiKSB7XG5cdCAgICAgICAgICB0aGlzLmNvbm5lY3Rpb24gPSBuZXcgUmVkaXNDb25uZWN0aW9uJDEoT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5saW1pdGVyT3B0aW9ucywge0V2ZW50czogdGhpcy5FdmVudHN9KSk7XG5cdCAgICAgICAgfSBlbHNlIGlmICh0aGlzLmxpbWl0ZXJPcHRpb25zLmRhdGFzdG9yZSA9PT0gXCJpb3JlZGlzXCIpIHtcblx0ICAgICAgICAgIHRoaXMuY29ubmVjdGlvbiA9IG5ldyBJT1JlZGlzQ29ubmVjdGlvbiQxKE9iamVjdC5hc3NpZ24oe30sIHRoaXMubGltaXRlck9wdGlvbnMsIHtFdmVudHM6IHRoaXMuRXZlbnRzfSkpO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfVxuXG5cdCAgICBrZXkoa2V5ID0gXCJcIikge1xuXHQgICAgICB2YXIgcmVmO1xuXHQgICAgICByZXR1cm4gKHJlZiA9IHRoaXMuaW5zdGFuY2VzW2tleV0pICE9IG51bGwgPyByZWYgOiAoKCkgPT4ge1xuXHQgICAgICAgIHZhciBsaW1pdGVyO1xuXHQgICAgICAgIGxpbWl0ZXIgPSB0aGlzLmluc3RhbmNlc1trZXldID0gbmV3IHRoaXMuQm90dGxlbmVjayhPYmplY3QuYXNzaWduKHRoaXMubGltaXRlck9wdGlvbnMsIHtcblx0ICAgICAgICAgIGlkOiBgJHt0aGlzLmlkfS0ke2tleX1gLFxuXHQgICAgICAgICAgdGltZW91dDogdGhpcy50aW1lb3V0LFxuXHQgICAgICAgICAgY29ubmVjdGlvbjogdGhpcy5jb25uZWN0aW9uXG5cdCAgICAgICAgfSkpO1xuXHQgICAgICAgIHRoaXMuRXZlbnRzLnRyaWdnZXIoXCJjcmVhdGVkXCIsIGxpbWl0ZXIsIGtleSk7XG5cdCAgICAgICAgcmV0dXJuIGxpbWl0ZXI7XG5cdCAgICAgIH0pKCk7XG5cdCAgICB9XG5cblx0ICAgIGFzeW5jIGRlbGV0ZUtleShrZXkgPSBcIlwiKSB7XG5cdCAgICAgIHZhciBkZWxldGVkLCBpbnN0YW5jZTtcblx0ICAgICAgaW5zdGFuY2UgPSB0aGlzLmluc3RhbmNlc1trZXldO1xuXHQgICAgICBpZiAodGhpcy5jb25uZWN0aW9uKSB7XG5cdCAgICAgICAgZGVsZXRlZCA9IChhd2FpdCB0aGlzLmNvbm5lY3Rpb24uX19ydW5Db21tYW5kX18oWydkZWwnLCAuLi5TY3JpcHRzJDEuYWxsS2V5cyhgJHt0aGlzLmlkfS0ke2tleX1gKV0pKTtcblx0ICAgICAgfVxuXHQgICAgICBpZiAoaW5zdGFuY2UgIT0gbnVsbCkge1xuXHQgICAgICAgIGRlbGV0ZSB0aGlzLmluc3RhbmNlc1trZXldO1xuXHQgICAgICAgIGF3YWl0IGluc3RhbmNlLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgfVxuXHQgICAgICByZXR1cm4gKGluc3RhbmNlICE9IG51bGwpIHx8IGRlbGV0ZWQgPiAwO1xuXHQgICAgfVxuXG5cdCAgICBsaW1pdGVycygpIHtcblx0ICAgICAgdmFyIGssIHJlZiwgcmVzdWx0cywgdjtcblx0ICAgICAgcmVmID0gdGhpcy5pbnN0YW5jZXM7XG5cdCAgICAgIHJlc3VsdHMgPSBbXTtcblx0ICAgICAgZm9yIChrIGluIHJlZikge1xuXHQgICAgICAgIHYgPSByZWZba107XG5cdCAgICAgICAgcmVzdWx0cy5wdXNoKHtcblx0ICAgICAgICAgIGtleTogayxcblx0ICAgICAgICAgIGxpbWl0ZXI6IHZcblx0ICAgICAgICB9KTtcblx0ICAgICAgfVxuXHQgICAgICByZXR1cm4gcmVzdWx0cztcblx0ICAgIH1cblxuXHQgICAga2V5cygpIHtcblx0ICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuaW5zdGFuY2VzKTtcblx0ICAgIH1cblxuXHQgICAgYXN5bmMgY2x1c3RlcktleXMoKSB7XG5cdCAgICAgIHZhciBjdXJzb3IsIGVuZCwgZm91bmQsIGksIGssIGtleXMsIGxlbiwgbmV4dCwgc3RhcnQ7XG5cdCAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb24gPT0gbnVsbCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLlByb21pc2UucmVzb2x2ZSh0aGlzLmtleXMoKSk7XG5cdCAgICAgIH1cblx0ICAgICAga2V5cyA9IFtdO1xuXHQgICAgICBjdXJzb3IgPSBudWxsO1xuXHQgICAgICBzdGFydCA9IGBiXyR7dGhpcy5pZH0tYC5sZW5ndGg7XG5cdCAgICAgIGVuZCA9IFwiX3NldHRpbmdzXCIubGVuZ3RoO1xuXHQgICAgICB3aGlsZSAoY3Vyc29yICE9PSAwKSB7XG5cdCAgICAgICAgW25leHQsIGZvdW5kXSA9IChhd2FpdCB0aGlzLmNvbm5lY3Rpb24uX19ydW5Db21tYW5kX18oW1wic2NhblwiLCBjdXJzb3IgIT0gbnVsbCA/IGN1cnNvciA6IDAsIFwibWF0Y2hcIiwgYGJfJHt0aGlzLmlkfS0qX3NldHRpbmdzYCwgXCJjb3VudFwiLCAxMDAwMF0pKTtcblx0ICAgICAgICBjdXJzb3IgPSB+fm5leHQ7XG5cdCAgICAgICAgZm9yIChpID0gMCwgbGVuID0gZm91bmQubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcblx0ICAgICAgICAgIGsgPSBmb3VuZFtpXTtcblx0ICAgICAgICAgIGtleXMucHVzaChrLnNsaWNlKHN0YXJ0LCAtZW5kKSk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICAgIHJldHVybiBrZXlzO1xuXHQgICAgfVxuXG5cdCAgICBfc3RhcnRBdXRvQ2xlYW51cCgpIHtcblx0ICAgICAgdmFyIGJhc2U7XG5cdCAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbCk7XG5cdCAgICAgIHJldHVybiB0eXBlb2YgKGJhc2UgPSAodGhpcy5pbnRlcnZhbCA9IHNldEludGVydmFsKGFzeW5jKCkgPT4ge1xuXHQgICAgICAgIHZhciBlLCBrLCByZWYsIHJlc3VsdHMsIHRpbWUsIHY7XG5cdCAgICAgICAgdGltZSA9IERhdGUubm93KCk7XG5cdCAgICAgICAgcmVmID0gdGhpcy5pbnN0YW5jZXM7XG5cdCAgICAgICAgcmVzdWx0cyA9IFtdO1xuXHQgICAgICAgIGZvciAoayBpbiByZWYpIHtcblx0ICAgICAgICAgIHYgPSByZWZba107XG5cdCAgICAgICAgICB0cnkge1xuXHQgICAgICAgICAgICBpZiAoKGF3YWl0IHYuX3N0b3JlLl9fZ3JvdXBDaGVja19fKHRpbWUpKSkge1xuXHQgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh0aGlzLmRlbGV0ZUtleShrKSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHZvaWQgMCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG5cdCAgICAgICAgICAgIGUgPSBlcnJvcjtcblx0ICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHYuRXZlbnRzLnRyaWdnZXIoXCJlcnJvclwiLCBlKSk7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiByZXN1bHRzO1xuXHQgICAgICB9LCB0aGlzLnRpbWVvdXQgLyAyKSkpLnVucmVmID09PSBcImZ1bmN0aW9uXCIgPyBiYXNlLnVucmVmKCkgOiB2b2lkIDA7XG5cdCAgICB9XG5cblx0ICAgIHVwZGF0ZVNldHRpbmdzKG9wdGlvbnMgPSB7fSkge1xuXHQgICAgICBwYXJzZXIkMy5vdmVyd3JpdGUob3B0aW9ucywgdGhpcy5kZWZhdWx0cywgdGhpcyk7XG5cdCAgICAgIHBhcnNlciQzLm92ZXJ3cml0ZShvcHRpb25zLCBvcHRpb25zLCB0aGlzLmxpbWl0ZXJPcHRpb25zKTtcblx0ICAgICAgaWYgKG9wdGlvbnMudGltZW91dCAhPSBudWxsKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXJ0QXV0b0NsZWFudXAoKTtcblx0ICAgICAgfVxuXHQgICAgfVxuXG5cdCAgICBkaXNjb25uZWN0KGZsdXNoID0gdHJ1ZSkge1xuXHQgICAgICB2YXIgcmVmO1xuXHQgICAgICBpZiAoIXRoaXMuc2hhcmVkQ29ubmVjdGlvbikge1xuXHQgICAgICAgIHJldHVybiAocmVmID0gdGhpcy5jb25uZWN0aW9uKSAhPSBudWxsID8gcmVmLmRpc2Nvbm5lY3QoZmx1c2gpIDogdm9pZCAwO1xuXHQgICAgICB9XG5cdCAgICB9XG5cblx0ICB9XG5cdCAgR3JvdXAucHJvdG90eXBlLmRlZmF1bHRzID0ge1xuXHQgICAgdGltZW91dDogMTAwMCAqIDYwICogNSxcblx0ICAgIGNvbm5lY3Rpb246IG51bGwsXG5cdCAgICBQcm9taXNlOiBQcm9taXNlLFxuXHQgICAgaWQ6IFwiZ3JvdXAta2V5XCJcblx0ICB9O1xuXG5cdCAgcmV0dXJuIEdyb3VwO1xuXG5cdH0pLmNhbGwoY29tbW9uanNHbG9iYWwpO1xuXG5cdHZhciBHcm91cF8xID0gR3JvdXA7XG5cblx0dmFyIEJhdGNoZXIsIEV2ZW50cyQzLCBwYXJzZXIkNDtcblxuXHRwYXJzZXIkNCA9IHBhcnNlcjtcblxuXHRFdmVudHMkMyA9IEV2ZW50c18xO1xuXG5cdEJhdGNoZXIgPSAoZnVuY3Rpb24oKSB7XG5cdCAgY2xhc3MgQmF0Y2hlciB7XG5cdCAgICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcblx0ICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcblx0ICAgICAgcGFyc2VyJDQubG9hZCh0aGlzLm9wdGlvbnMsIHRoaXMuZGVmYXVsdHMsIHRoaXMpO1xuXHQgICAgICB0aGlzLkV2ZW50cyA9IG5ldyBFdmVudHMkMyh0aGlzKTtcblx0ICAgICAgdGhpcy5fYXJyID0gW107XG5cdCAgICAgIHRoaXMuX3Jlc2V0UHJvbWlzZSgpO1xuXHQgICAgICB0aGlzLl9sYXN0Rmx1c2ggPSBEYXRlLm5vdygpO1xuXHQgICAgfVxuXG5cdCAgICBfcmVzZXRQcm9taXNlKCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fcHJvbWlzZSA9IG5ldyB0aGlzLlByb21pc2UoKHJlcywgcmVqKSA9PiB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc29sdmUgPSByZXM7XG5cdCAgICAgIH0pO1xuXHQgICAgfVxuXG5cdCAgICBfZmx1c2goKSB7XG5cdCAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KTtcblx0ICAgICAgdGhpcy5fbGFzdEZsdXNoID0gRGF0ZS5ub3coKTtcblx0ICAgICAgdGhpcy5fcmVzb2x2ZSgpO1xuXHQgICAgICB0aGlzLkV2ZW50cy50cmlnZ2VyKFwiYmF0Y2hcIiwgdGhpcy5fYXJyKTtcblx0ICAgICAgdGhpcy5fYXJyID0gW107XG5cdCAgICAgIHJldHVybiB0aGlzLl9yZXNldFByb21pc2UoKTtcblx0ICAgIH1cblxuXHQgICAgYWRkKGRhdGEpIHtcblx0ICAgICAgdmFyIHJldDtcblx0ICAgICAgdGhpcy5fYXJyLnB1c2goZGF0YSk7XG5cdCAgICAgIHJldCA9IHRoaXMuX3Byb21pc2U7XG5cdCAgICAgIGlmICh0aGlzLl9hcnIubGVuZ3RoID09PSB0aGlzLm1heFNpemUpIHtcblx0ICAgICAgICB0aGlzLl9mbHVzaCgpO1xuXHQgICAgICB9IGVsc2UgaWYgKCh0aGlzLm1heFRpbWUgIT0gbnVsbCkgJiYgdGhpcy5fYXJyLmxlbmd0aCA9PT0gMSkge1xuXHQgICAgICAgIHRoaXMuX3RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcblx0ICAgICAgICAgIHJldHVybiB0aGlzLl9mbHVzaCgpO1xuXHQgICAgICAgIH0sIHRoaXMubWF4VGltZSk7XG5cdCAgICAgIH1cblx0ICAgICAgcmV0dXJuIHJldDtcblx0ICAgIH1cblxuXHQgIH1cblx0ICBCYXRjaGVyLnByb3RvdHlwZS5kZWZhdWx0cyA9IHtcblx0ICAgIG1heFRpbWU6IG51bGwsXG5cdCAgICBtYXhTaXplOiBudWxsLFxuXHQgICAgUHJvbWlzZTogUHJvbWlzZVxuXHQgIH07XG5cblx0ICByZXR1cm4gQmF0Y2hlcjtcblxuXHR9KS5jYWxsKGNvbW1vbmpzR2xvYmFsKTtcblxuXHR2YXIgQmF0Y2hlcl8xID0gQmF0Y2hlcjtcblxuXHR2YXIgcmVxdWlyZSQkNCQxID0gKCkgPT4gY29uc29sZS5sb2coJ1lvdSBtdXN0IGltcG9ydCB0aGUgZnVsbCB2ZXJzaW9uIG9mIEJvdHRsZW5lY2sgaW4gb3JkZXIgdG8gdXNlIHRoaXMgZmVhdHVyZS4nKTtcblxuXHR2YXIgcmVxdWlyZSQkOCA9IGdldENqc0V4cG9ydEZyb21OYW1lc3BhY2UodmVyc2lvbiQyKTtcblxuXHR2YXIgQm90dGxlbmVjaywgREVGQVVMVF9QUklPUklUWSQxLCBFdmVudHMkNCwgSm9iJDEsIExvY2FsRGF0YXN0b3JlJDEsIE5VTV9QUklPUklUSUVTJDEsIFF1ZXVlcyQxLCBSZWRpc0RhdGFzdG9yZSQxLCBTdGF0ZXMkMSwgU3luYyQxLCBwYXJzZXIkNSxcblx0ICBzcGxpY2UgPSBbXS5zcGxpY2U7XG5cblx0TlVNX1BSSU9SSVRJRVMkMSA9IDEwO1xuXG5cdERFRkFVTFRfUFJJT1JJVFkkMSA9IDU7XG5cblx0cGFyc2VyJDUgPSBwYXJzZXI7XG5cblx0UXVldWVzJDEgPSBRdWV1ZXNfMTtcblxuXHRKb2IkMSA9IEpvYl8xO1xuXG5cdExvY2FsRGF0YXN0b3JlJDEgPSBMb2NhbERhdGFzdG9yZV8xO1xuXG5cdFJlZGlzRGF0YXN0b3JlJDEgPSByZXF1aXJlJCQ0JDE7XG5cblx0RXZlbnRzJDQgPSBFdmVudHNfMTtcblxuXHRTdGF0ZXMkMSA9IFN0YXRlc18xO1xuXG5cdFN5bmMkMSA9IFN5bmNfMTtcblxuXHRCb3R0bGVuZWNrID0gKGZ1bmN0aW9uKCkge1xuXHQgIGNsYXNzIEJvdHRsZW5lY2sge1xuXHQgICAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9LCAuLi5pbnZhbGlkKSB7XG5cdCAgICAgIHZhciBzdG9yZUluc3RhbmNlT3B0aW9ucywgc3RvcmVPcHRpb25zO1xuXHQgICAgICB0aGlzLl9hZGRUb1F1ZXVlID0gdGhpcy5fYWRkVG9RdWV1ZS5iaW5kKHRoaXMpO1xuXHQgICAgICB0aGlzLl92YWxpZGF0ZU9wdGlvbnMob3B0aW9ucywgaW52YWxpZCk7XG5cdCAgICAgIHBhcnNlciQ1LmxvYWQob3B0aW9ucywgdGhpcy5pbnN0YW5jZURlZmF1bHRzLCB0aGlzKTtcblx0ICAgICAgdGhpcy5fcXVldWVzID0gbmV3IFF1ZXVlcyQxKE5VTV9QUklPUklUSUVTJDEpO1xuXHQgICAgICB0aGlzLl9zY2hlZHVsZWQgPSB7fTtcblx0ICAgICAgdGhpcy5fc3RhdGVzID0gbmV3IFN0YXRlcyQxKFtcIlJFQ0VJVkVEXCIsIFwiUVVFVUVEXCIsIFwiUlVOTklOR1wiLCBcIkVYRUNVVElOR1wiXS5jb25jYXQodGhpcy50cmFja0RvbmVTdGF0dXMgPyBbXCJET05FXCJdIDogW10pKTtcblx0ICAgICAgdGhpcy5fbGltaXRlciA9IG51bGw7XG5cdCAgICAgIHRoaXMuRXZlbnRzID0gbmV3IEV2ZW50cyQ0KHRoaXMpO1xuXHQgICAgICB0aGlzLl9zdWJtaXRMb2NrID0gbmV3IFN5bmMkMShcInN1Ym1pdFwiLCB0aGlzLlByb21pc2UpO1xuXHQgICAgICB0aGlzLl9yZWdpc3RlckxvY2sgPSBuZXcgU3luYyQxKFwicmVnaXN0ZXJcIiwgdGhpcy5Qcm9taXNlKTtcblx0ICAgICAgc3RvcmVPcHRpb25zID0gcGFyc2VyJDUubG9hZChvcHRpb25zLCB0aGlzLnN0b3JlRGVmYXVsdHMsIHt9KTtcblx0ICAgICAgdGhpcy5fc3RvcmUgPSAoZnVuY3Rpb24oKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuZGF0YXN0b3JlID09PSBcInJlZGlzXCIgfHwgdGhpcy5kYXRhc3RvcmUgPT09IFwiaW9yZWRpc1wiIHx8ICh0aGlzLmNvbm5lY3Rpb24gIT0gbnVsbCkpIHtcblx0ICAgICAgICAgIHN0b3JlSW5zdGFuY2VPcHRpb25zID0gcGFyc2VyJDUubG9hZChvcHRpb25zLCB0aGlzLnJlZGlzU3RvcmVEZWZhdWx0cywge30pO1xuXHQgICAgICAgICAgcmV0dXJuIG5ldyBSZWRpc0RhdGFzdG9yZSQxKHRoaXMsIHN0b3JlT3B0aW9ucywgc3RvcmVJbnN0YW5jZU9wdGlvbnMpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kYXRhc3RvcmUgPT09IFwibG9jYWxcIikge1xuXHQgICAgICAgICAgc3RvcmVJbnN0YW5jZU9wdGlvbnMgPSBwYXJzZXIkNS5sb2FkKG9wdGlvbnMsIHRoaXMubG9jYWxTdG9yZURlZmF1bHRzLCB7fSk7XG5cdCAgICAgICAgICByZXR1cm4gbmV3IExvY2FsRGF0YXN0b3JlJDEodGhpcywgc3RvcmVPcHRpb25zLCBzdG9yZUluc3RhbmNlT3B0aW9ucyk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIHRocm93IG5ldyBCb3R0bGVuZWNrLnByb3RvdHlwZS5Cb3R0bGVuZWNrRXJyb3IoYEludmFsaWQgZGF0YXN0b3JlIHR5cGU6ICR7dGhpcy5kYXRhc3RvcmV9YCk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9KS5jYWxsKHRoaXMpO1xuXHQgICAgICB0aGlzLl9xdWV1ZXMub24oXCJsZWZ0emVyb1wiLCAoKSA9PiB7XG5cdCAgICAgICAgdmFyIHJlZjtcblx0ICAgICAgICByZXR1cm4gKHJlZiA9IHRoaXMuX3N0b3JlLmhlYXJ0YmVhdCkgIT0gbnVsbCA/IHR5cGVvZiByZWYucmVmID09PSBcImZ1bmN0aW9uXCIgPyByZWYucmVmKCkgOiB2b2lkIDAgOiB2b2lkIDA7XG5cdCAgICAgIH0pO1xuXHQgICAgICB0aGlzLl9xdWV1ZXMub24oXCJ6ZXJvXCIsICgpID0+IHtcblx0ICAgICAgICB2YXIgcmVmO1xuXHQgICAgICAgIHJldHVybiAocmVmID0gdGhpcy5fc3RvcmUuaGVhcnRiZWF0KSAhPSBudWxsID8gdHlwZW9mIHJlZi51bnJlZiA9PT0gXCJmdW5jdGlvblwiID8gcmVmLnVucmVmKCkgOiB2b2lkIDAgOiB2b2lkIDA7XG5cdCAgICAgIH0pO1xuXHQgICAgfVxuXG5cdCAgICBfdmFsaWRhdGVPcHRpb25zKG9wdGlvbnMsIGludmFsaWQpIHtcblx0ICAgICAgaWYgKCEoKG9wdGlvbnMgIT0gbnVsbCkgJiYgdHlwZW9mIG9wdGlvbnMgPT09IFwib2JqZWN0XCIgJiYgaW52YWxpZC5sZW5ndGggPT09IDApKSB7XG5cdCAgICAgICAgdGhyb3cgbmV3IEJvdHRsZW5lY2sucHJvdG90eXBlLkJvdHRsZW5lY2tFcnJvcihcIkJvdHRsZW5lY2sgdjIgdGFrZXMgYSBzaW5nbGUgb2JqZWN0IGFyZ3VtZW50LiBSZWZlciB0byBodHRwczovL2dpdGh1Yi5jb20vU0dyb25kaW4vYm90dGxlbmVjayN1cGdyYWRpbmctdG8tdjIgaWYgeW91J3JlIHVwZ3JhZGluZyBmcm9tIEJvdHRsZW5lY2sgdjEuXCIpO1xuXHQgICAgICB9XG5cdCAgICB9XG5cblx0ICAgIHJlYWR5KCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fc3RvcmUucmVhZHk7XG5cdCAgICB9XG5cblx0ICAgIGNsaWVudHMoKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLl9zdG9yZS5jbGllbnRzO1xuXHQgICAgfVxuXG5cdCAgICBjaGFubmVsKCkge1xuXHQgICAgICByZXR1cm4gYGJfJHt0aGlzLmlkfWA7XG5cdCAgICB9XG5cblx0ICAgIGNoYW5uZWxfY2xpZW50KCkge1xuXHQgICAgICByZXR1cm4gYGJfJHt0aGlzLmlkfV8ke3RoaXMuX3N0b3JlLmNsaWVudElkfWA7XG5cdCAgICB9XG5cblx0ICAgIHB1Ymxpc2gobWVzc2FnZSkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fc3RvcmUuX19wdWJsaXNoX18obWVzc2FnZSk7XG5cdCAgICB9XG5cblx0ICAgIGRpc2Nvbm5lY3QoZmx1c2ggPSB0cnVlKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLl9zdG9yZS5fX2Rpc2Nvbm5lY3RfXyhmbHVzaCk7XG5cdCAgICB9XG5cblx0ICAgIGNoYWluKF9saW1pdGVyKSB7XG5cdCAgICAgIHRoaXMuX2xpbWl0ZXIgPSBfbGltaXRlcjtcblx0ICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9XG5cblx0ICAgIHF1ZXVlZChwcmlvcml0eSkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fcXVldWVzLnF1ZXVlZChwcmlvcml0eSk7XG5cdCAgICB9XG5cblx0ICAgIGNsdXN0ZXJRdWV1ZWQoKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLl9zdG9yZS5fX3F1ZXVlZF9fKCk7XG5cdCAgICB9XG5cblx0ICAgIGVtcHR5KCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5xdWV1ZWQoKSA9PT0gMCAmJiB0aGlzLl9zdWJtaXRMb2NrLmlzRW1wdHkoKTtcblx0ICAgIH1cblxuXHQgICAgcnVubmluZygpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX3N0b3JlLl9fcnVubmluZ19fKCk7XG5cdCAgICB9XG5cblx0ICAgIGRvbmUoKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLl9zdG9yZS5fX2RvbmVfXygpO1xuXHQgICAgfVxuXG5cdCAgICBqb2JTdGF0dXMoaWQpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlcy5qb2JTdGF0dXMoaWQpO1xuXHQgICAgfVxuXG5cdCAgICBqb2JzKHN0YXR1cykge1xuXHQgICAgICByZXR1cm4gdGhpcy5fc3RhdGVzLnN0YXR1c0pvYnMoc3RhdHVzKTtcblx0ICAgIH1cblxuXHQgICAgY291bnRzKCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fc3RhdGVzLnN0YXR1c0NvdW50cygpO1xuXHQgICAgfVxuXG5cdCAgICBfcmFuZG9tSW5kZXgoKSB7XG5cdCAgICAgIHJldHVybiBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyKTtcblx0ICAgIH1cblxuXHQgICAgY2hlY2sod2VpZ2h0ID0gMSkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fc3RvcmUuX19jaGVja19fKHdlaWdodCk7XG5cdCAgICB9XG5cblx0ICAgIF9jbGVhckdsb2JhbFN0YXRlKGluZGV4KSB7XG5cdCAgICAgIGlmICh0aGlzLl9zY2hlZHVsZWRbaW5kZXhdICE9IG51bGwpIHtcblx0ICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fc2NoZWR1bGVkW2luZGV4XS5leHBpcmF0aW9uKTtcblx0ICAgICAgICBkZWxldGUgdGhpcy5fc2NoZWR1bGVkW2luZGV4XTtcblx0ICAgICAgICByZXR1cm4gdHJ1ZTtcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICByZXR1cm4gZmFsc2U7XG5cdCAgICAgIH1cblx0ICAgIH1cblxuXHQgICAgYXN5bmMgX2ZyZWUoaW5kZXgsIGpvYiwgb3B0aW9ucywgZXZlbnRJbmZvKSB7XG5cdCAgICAgIHZhciBlLCBydW5uaW5nO1xuXHQgICAgICB0cnkge1xuXHQgICAgICAgICh7cnVubmluZ30gPSAoYXdhaXQgdGhpcy5fc3RvcmUuX19mcmVlX18oaW5kZXgsIG9wdGlvbnMud2VpZ2h0KSkpO1xuXHQgICAgICAgIHRoaXMuRXZlbnRzLnRyaWdnZXIoXCJkZWJ1Z1wiLCBgRnJlZWQgJHtvcHRpb25zLmlkfWAsIGV2ZW50SW5mbyk7XG5cdCAgICAgICAgaWYgKHJ1bm5pbmcgPT09IDAgJiYgdGhpcy5lbXB0eSgpKSB7XG5cdCAgICAgICAgICByZXR1cm4gdGhpcy5FdmVudHMudHJpZ2dlcihcImlkbGVcIik7XG5cdCAgICAgICAgfVxuXHQgICAgICB9IGNhdGNoIChlcnJvcjEpIHtcblx0ICAgICAgICBlID0gZXJyb3IxO1xuXHQgICAgICAgIHJldHVybiB0aGlzLkV2ZW50cy50cmlnZ2VyKFwiZXJyb3JcIiwgZSk7XG5cdCAgICAgIH1cblx0ICAgIH1cblxuXHQgICAgX3J1bihpbmRleCwgam9iLCB3YWl0KSB7XG5cdCAgICAgIHZhciBjbGVhckdsb2JhbFN0YXRlLCBmcmVlLCBydW47XG5cdCAgICAgIGpvYi5kb1J1bigpO1xuXHQgICAgICBjbGVhckdsb2JhbFN0YXRlID0gdGhpcy5fY2xlYXJHbG9iYWxTdGF0ZS5iaW5kKHRoaXMsIGluZGV4KTtcblx0ICAgICAgcnVuID0gdGhpcy5fcnVuLmJpbmQodGhpcywgaW5kZXgsIGpvYik7XG5cdCAgICAgIGZyZWUgPSB0aGlzLl9mcmVlLmJpbmQodGhpcywgaW5kZXgsIGpvYik7XG5cdCAgICAgIHJldHVybiB0aGlzLl9zY2hlZHVsZWRbaW5kZXhdID0ge1xuXHQgICAgICAgIHRpbWVvdXQ6IHNldFRpbWVvdXQoKCkgPT4ge1xuXHQgICAgICAgICAgcmV0dXJuIGpvYi5kb0V4ZWN1dGUodGhpcy5fbGltaXRlciwgY2xlYXJHbG9iYWxTdGF0ZSwgcnVuLCBmcmVlKTtcblx0ICAgICAgICB9LCB3YWl0KSxcblx0ICAgICAgICBleHBpcmF0aW9uOiBqb2Iub3B0aW9ucy5leHBpcmF0aW9uICE9IG51bGwgPyBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuXHQgICAgICAgICAgcmV0dXJuIGpvYi5kb0V4cGlyZShjbGVhckdsb2JhbFN0YXRlLCBydW4sIGZyZWUpO1xuXHQgICAgICAgIH0sIHdhaXQgKyBqb2Iub3B0aW9ucy5leHBpcmF0aW9uKSA6IHZvaWQgMCxcblx0ICAgICAgICBqb2I6IGpvYlxuXHQgICAgICB9O1xuXHQgICAgfVxuXG5cdCAgICBfZHJhaW5PbmUoY2FwYWNpdHkpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX3JlZ2lzdGVyTG9jay5zY2hlZHVsZSgoKSA9PiB7XG5cdCAgICAgICAgdmFyIGFyZ3MsIGluZGV4LCBuZXh0LCBvcHRpb25zLCBxdWV1ZTtcblx0ICAgICAgICBpZiAodGhpcy5xdWV1ZWQoKSA9PT0gMCkge1xuXHQgICAgICAgICAgcmV0dXJuIHRoaXMuUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBxdWV1ZSA9IHRoaXMuX3F1ZXVlcy5nZXRGaXJzdCgpO1xuXHQgICAgICAgICh7b3B0aW9ucywgYXJnc30gPSBuZXh0ID0gcXVldWUuZmlyc3QoKSk7XG5cdCAgICAgICAgaWYgKChjYXBhY2l0eSAhPSBudWxsKSAmJiBvcHRpb25zLndlaWdodCA+IGNhcGFjaXR5KSB7XG5cdCAgICAgICAgICByZXR1cm4gdGhpcy5Qcm9taXNlLnJlc29sdmUobnVsbCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuRXZlbnRzLnRyaWdnZXIoXCJkZWJ1Z1wiLCBgRHJhaW5pbmcgJHtvcHRpb25zLmlkfWAsIHthcmdzLCBvcHRpb25zfSk7XG5cdCAgICAgICAgaW5kZXggPSB0aGlzLl9yYW5kb21JbmRleCgpO1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9zdG9yZS5fX3JlZ2lzdGVyX18oaW5kZXgsIG9wdGlvbnMud2VpZ2h0LCBvcHRpb25zLmV4cGlyYXRpb24pLnRoZW4oKHtzdWNjZXNzLCB3YWl0LCByZXNlcnZvaXJ9KSA9PiB7XG5cdCAgICAgICAgICB2YXIgZW1wdHk7XG5cdCAgICAgICAgICB0aGlzLkV2ZW50cy50cmlnZ2VyKFwiZGVidWdcIiwgYERyYWluZWQgJHtvcHRpb25zLmlkfWAsIHtzdWNjZXNzLCBhcmdzLCBvcHRpb25zfSk7XG5cdCAgICAgICAgICBpZiAoc3VjY2Vzcykge1xuXHQgICAgICAgICAgICBxdWV1ZS5zaGlmdCgpO1xuXHQgICAgICAgICAgICBlbXB0eSA9IHRoaXMuZW1wdHkoKTtcblx0ICAgICAgICAgICAgaWYgKGVtcHR5KSB7XG5cdCAgICAgICAgICAgICAgdGhpcy5FdmVudHMudHJpZ2dlcihcImVtcHR5XCIpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGlmIChyZXNlcnZvaXIgPT09IDApIHtcblx0ICAgICAgICAgICAgICB0aGlzLkV2ZW50cy50cmlnZ2VyKFwiZGVwbGV0ZWRcIiwgZW1wdHkpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX3J1bihpbmRleCwgbmV4dCwgd2FpdCk7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLlByb21pc2UucmVzb2x2ZShvcHRpb25zLndlaWdodCk7XG5cdCAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5Qcm9taXNlLnJlc29sdmUobnVsbCk7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfSk7XG5cdCAgICAgIH0pO1xuXHQgICAgfVxuXG5cdCAgICBfZHJhaW5BbGwoY2FwYWNpdHksIHRvdGFsID0gMCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fZHJhaW5PbmUoY2FwYWNpdHkpLnRoZW4oKGRyYWluZWQpID0+IHtcblx0ICAgICAgICB2YXIgbmV3Q2FwYWNpdHk7XG5cdCAgICAgICAgaWYgKGRyYWluZWQgIT0gbnVsbCkge1xuXHQgICAgICAgICAgbmV3Q2FwYWNpdHkgPSBjYXBhY2l0eSAhPSBudWxsID8gY2FwYWNpdHkgLSBkcmFpbmVkIDogY2FwYWNpdHk7XG5cdCAgICAgICAgICByZXR1cm4gdGhpcy5fZHJhaW5BbGwobmV3Q2FwYWNpdHksIHRvdGFsICsgZHJhaW5lZCk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIHJldHVybiB0aGlzLlByb21pc2UucmVzb2x2ZSh0b3RhbCk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuXHQgICAgICAgIHJldHVybiB0aGlzLkV2ZW50cy50cmlnZ2VyKFwiZXJyb3JcIiwgZSk7XG5cdCAgICAgIH0pO1xuXHQgICAgfVxuXG5cdCAgICBfZHJvcEFsbFF1ZXVlZChtZXNzYWdlKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLl9xdWV1ZXMuc2hpZnRBbGwoZnVuY3Rpb24oam9iKSB7XG5cdCAgICAgICAgcmV0dXJuIGpvYi5kb0Ryb3Aoe21lc3NhZ2V9KTtcblx0ICAgICAgfSk7XG5cdCAgICB9XG5cblx0ICAgIHN0b3Aob3B0aW9ucyA9IHt9KSB7XG5cdCAgICAgIHZhciBkb25lLCB3YWl0Rm9yRXhlY3V0aW5nO1xuXHQgICAgICBvcHRpb25zID0gcGFyc2VyJDUubG9hZChvcHRpb25zLCB0aGlzLnN0b3BEZWZhdWx0cyk7XG5cdCAgICAgIHdhaXRGb3JFeGVjdXRpbmcgPSAoYXQpID0+IHtcblx0ICAgICAgICB2YXIgZmluaXNoZWQ7XG5cdCAgICAgICAgZmluaXNoZWQgPSAoKSA9PiB7XG5cdCAgICAgICAgICB2YXIgY291bnRzO1xuXHQgICAgICAgICAgY291bnRzID0gdGhpcy5fc3RhdGVzLmNvdW50cztcblx0ICAgICAgICAgIHJldHVybiAoY291bnRzWzBdICsgY291bnRzWzFdICsgY291bnRzWzJdICsgY291bnRzWzNdKSA9PT0gYXQ7XG5cdCAgICAgICAgfTtcblx0ICAgICAgICByZXR1cm4gbmV3IHRoaXMuUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdCAgICAgICAgICBpZiAoZmluaXNoZWQoKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuXHQgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMub24oXCJkb25lXCIsICgpID0+IHtcblx0ICAgICAgICAgICAgICBpZiAoZmluaXNoZWQoKSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoXCJkb25lXCIpO1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcblx0ICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH0pO1xuXHQgICAgICB9O1xuXHQgICAgICBkb25lID0gb3B0aW9ucy5kcm9wV2FpdGluZ0pvYnMgPyAodGhpcy5fcnVuID0gZnVuY3Rpb24oaW5kZXgsIG5leHQpIHtcblx0ICAgICAgICByZXR1cm4gbmV4dC5kb0Ryb3Aoe1xuXHQgICAgICAgICAgbWVzc2FnZTogb3B0aW9ucy5kcm9wRXJyb3JNZXNzYWdlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgIH0sIHRoaXMuX2RyYWluT25lID0gKCkgPT4ge1xuXHQgICAgICAgIHJldHVybiB0aGlzLlByb21pc2UucmVzb2x2ZShudWxsKTtcblx0ICAgICAgfSwgdGhpcy5fcmVnaXN0ZXJMb2NrLnNjaGVkdWxlKCgpID0+IHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fc3VibWl0TG9jay5zY2hlZHVsZSgoKSA9PiB7XG5cdCAgICAgICAgICB2YXIgaywgcmVmLCB2O1xuXHQgICAgICAgICAgcmVmID0gdGhpcy5fc2NoZWR1bGVkO1xuXHQgICAgICAgICAgZm9yIChrIGluIHJlZikge1xuXHQgICAgICAgICAgICB2ID0gcmVmW2tdO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5qb2JTdGF0dXModi5qb2Iub3B0aW9ucy5pZCkgPT09IFwiUlVOTklOR1wiKSB7XG5cdCAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHYudGltZW91dCk7XG5cdCAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHYuZXhwaXJhdGlvbik7XG5cdCAgICAgICAgICAgICAgdi5qb2IuZG9Ecm9wKHtcblx0ICAgICAgICAgICAgICAgIG1lc3NhZ2U6IG9wdGlvbnMuZHJvcEVycm9yTWVzc2FnZVxuXHQgICAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgICB0aGlzLl9kcm9wQWxsUXVldWVkKG9wdGlvbnMuZHJvcEVycm9yTWVzc2FnZSk7XG5cdCAgICAgICAgICByZXR1cm4gd2FpdEZvckV4ZWN1dGluZygwKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgfSkpIDogdGhpcy5zY2hlZHVsZSh7XG5cdCAgICAgICAgcHJpb3JpdHk6IE5VTV9QUklPUklUSUVTJDEgLSAxLFxuXHQgICAgICAgIHdlaWdodDogMFxuXHQgICAgICB9LCAoKSA9PiB7XG5cdCAgICAgICAgcmV0dXJuIHdhaXRGb3JFeGVjdXRpbmcoMSk7XG5cdCAgICAgIH0pO1xuXHQgICAgICB0aGlzLl9yZWNlaXZlID0gZnVuY3Rpb24oam9iKSB7XG5cdCAgICAgICAgcmV0dXJuIGpvYi5fcmVqZWN0KG5ldyBCb3R0bGVuZWNrLnByb3RvdHlwZS5Cb3R0bGVuZWNrRXJyb3Iob3B0aW9ucy5lbnF1ZXVlRXJyb3JNZXNzYWdlKSk7XG5cdCAgICAgIH07XG5cdCAgICAgIHRoaXMuc3RvcCA9ICgpID0+IHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5Qcm9taXNlLnJlamVjdChuZXcgQm90dGxlbmVjay5wcm90b3R5cGUuQm90dGxlbmVja0Vycm9yKFwic3RvcCgpIGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkXCIpKTtcblx0ICAgICAgfTtcblx0ICAgICAgcmV0dXJuIGRvbmU7XG5cdCAgICB9XG5cblx0ICAgIGFzeW5jIF9hZGRUb1F1ZXVlKGpvYikge1xuXHQgICAgICB2YXIgYXJncywgYmxvY2tlZCwgZXJyb3IsIG9wdGlvbnMsIHJlYWNoZWRIV00sIHNoaWZ0ZWQsIHN0cmF0ZWd5O1xuXHQgICAgICAoe2FyZ3MsIG9wdGlvbnN9ID0gam9iKTtcblx0ICAgICAgdHJ5IHtcblx0ICAgICAgICAoe3JlYWNoZWRIV00sIGJsb2NrZWQsIHN0cmF0ZWd5fSA9IChhd2FpdCB0aGlzLl9zdG9yZS5fX3N1Ym1pdF9fKHRoaXMucXVldWVkKCksIG9wdGlvbnMud2VpZ2h0KSkpO1xuXHQgICAgICB9IGNhdGNoIChlcnJvcjEpIHtcblx0ICAgICAgICBlcnJvciA9IGVycm9yMTtcblx0ICAgICAgICB0aGlzLkV2ZW50cy50cmlnZ2VyKFwiZGVidWdcIiwgYENvdWxkIG5vdCBxdWV1ZSAke29wdGlvbnMuaWR9YCwge2FyZ3MsIG9wdGlvbnMsIGVycm9yfSk7XG5cdCAgICAgICAgam9iLmRvRHJvcCh7ZXJyb3J9KTtcblx0ICAgICAgICByZXR1cm4gZmFsc2U7XG5cdCAgICAgIH1cblx0ICAgICAgaWYgKGJsb2NrZWQpIHtcblx0ICAgICAgICBqb2IuZG9Ecm9wKCk7XG5cdCAgICAgICAgcmV0dXJuIHRydWU7XG5cdCAgICAgIH0gZWxzZSBpZiAocmVhY2hlZEhXTSkge1xuXHQgICAgICAgIHNoaWZ0ZWQgPSBzdHJhdGVneSA9PT0gQm90dGxlbmVjay5wcm90b3R5cGUuc3RyYXRlZ3kuTEVBSyA/IHRoaXMuX3F1ZXVlcy5zaGlmdExhc3RGcm9tKG9wdGlvbnMucHJpb3JpdHkpIDogc3RyYXRlZ3kgPT09IEJvdHRsZW5lY2sucHJvdG90eXBlLnN0cmF0ZWd5Lk9WRVJGTE9XX1BSSU9SSVRZID8gdGhpcy5fcXVldWVzLnNoaWZ0TGFzdEZyb20ob3B0aW9ucy5wcmlvcml0eSArIDEpIDogc3RyYXRlZ3kgPT09IEJvdHRsZW5lY2sucHJvdG90eXBlLnN0cmF0ZWd5Lk9WRVJGTE9XID8gam9iIDogdm9pZCAwO1xuXHQgICAgICAgIGlmIChzaGlmdGVkICE9IG51bGwpIHtcblx0ICAgICAgICAgIHNoaWZ0ZWQuZG9Ecm9wKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmICgoc2hpZnRlZCA9PSBudWxsKSB8fCBzdHJhdGVneSA9PT0gQm90dGxlbmVjay5wcm90b3R5cGUuc3RyYXRlZ3kuT1ZFUkZMT1cpIHtcblx0ICAgICAgICAgIGlmIChzaGlmdGVkID09IG51bGwpIHtcblx0ICAgICAgICAgICAgam9iLmRvRHJvcCgpO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgICAgcmV0dXJuIHJlYWNoZWRIV007XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICAgIGpvYi5kb1F1ZXVlKHJlYWNoZWRIV00sIGJsb2NrZWQpO1xuXHQgICAgICB0aGlzLl9xdWV1ZXMucHVzaChqb2IpO1xuXHQgICAgICBhd2FpdCB0aGlzLl9kcmFpbkFsbCgpO1xuXHQgICAgICByZXR1cm4gcmVhY2hlZEhXTTtcblx0ICAgIH1cblxuXHQgICAgX3JlY2VpdmUoam9iKSB7XG5cdCAgICAgIGlmICh0aGlzLl9zdGF0ZXMuam9iU3RhdHVzKGpvYi5vcHRpb25zLmlkKSAhPSBudWxsKSB7XG5cdCAgICAgICAgam9iLl9yZWplY3QobmV3IEJvdHRsZW5lY2sucHJvdG90eXBlLkJvdHRsZW5lY2tFcnJvcihgQSBqb2Igd2l0aCB0aGUgc2FtZSBpZCBhbHJlYWR5IGV4aXN0cyAoaWQ9JHtqb2Iub3B0aW9ucy5pZH0pYCkpO1xuXHQgICAgICAgIHJldHVybiBmYWxzZTtcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICBqb2IuZG9SZWNlaXZlKCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3N1Ym1pdExvY2suc2NoZWR1bGUodGhpcy5fYWRkVG9RdWV1ZSwgam9iKTtcblx0ICAgICAgfVxuXHQgICAgfVxuXG5cdCAgICBzdWJtaXQoLi4uYXJncykge1xuXHQgICAgICB2YXIgY2IsIGZuLCBqb2IsIG9wdGlvbnMsIHJlZiwgcmVmMSwgdGFzaztcblx0ICAgICAgaWYgKHR5cGVvZiBhcmdzWzBdID09PSBcImZ1bmN0aW9uXCIpIHtcblx0ICAgICAgICByZWYgPSBhcmdzLCBbZm4sIC4uLmFyZ3NdID0gcmVmLCBbY2JdID0gc3BsaWNlLmNhbGwoYXJncywgLTEpO1xuXHQgICAgICAgIG9wdGlvbnMgPSBwYXJzZXIkNS5sb2FkKHt9LCB0aGlzLmpvYkRlZmF1bHRzKTtcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICByZWYxID0gYXJncywgW29wdGlvbnMsIGZuLCAuLi5hcmdzXSA9IHJlZjEsIFtjYl0gPSBzcGxpY2UuY2FsbChhcmdzLCAtMSk7XG5cdCAgICAgICAgb3B0aW9ucyA9IHBhcnNlciQ1LmxvYWQob3B0aW9ucywgdGhpcy5qb2JEZWZhdWx0cyk7XG5cdCAgICAgIH1cblx0ICAgICAgdGFzayA9ICguLi5hcmdzKSA9PiB7XG5cdCAgICAgICAgcmV0dXJuIG5ldyB0aGlzLlByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdCAgICAgICAgICByZXR1cm4gZm4oLi4uYXJncywgZnVuY3Rpb24oLi4uYXJncykge1xuXHQgICAgICAgICAgICByZXR1cm4gKGFyZ3NbMF0gIT0gbnVsbCA/IHJlamVjdCA6IHJlc29sdmUpKGFyZ3MpO1xuXHQgICAgICAgICAgfSk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgIH07XG5cdCAgICAgIGpvYiA9IG5ldyBKb2IkMSh0YXNrLCBhcmdzLCBvcHRpb25zLCB0aGlzLmpvYkRlZmF1bHRzLCB0aGlzLnJlamVjdE9uRHJvcCwgdGhpcy5FdmVudHMsIHRoaXMuX3N0YXRlcywgdGhpcy5Qcm9taXNlKTtcblx0ICAgICAgam9iLnByb21pc2UudGhlbihmdW5jdGlvbihhcmdzKSB7XG5cdCAgICAgICAgcmV0dXJuIHR5cGVvZiBjYiA9PT0gXCJmdW5jdGlvblwiID8gY2IoLi4uYXJncykgOiB2b2lkIDA7XG5cdCAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGFyZ3MpIHtcblx0ICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhcmdzKSkge1xuXHQgICAgICAgICAgcmV0dXJuIHR5cGVvZiBjYiA9PT0gXCJmdW5jdGlvblwiID8gY2IoLi4uYXJncykgOiB2b2lkIDA7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIHJldHVybiB0eXBlb2YgY2IgPT09IFwiZnVuY3Rpb25cIiA/IGNiKGFyZ3MpIDogdm9pZCAwO1xuXHQgICAgICAgIH1cblx0ICAgICAgfSk7XG5cdCAgICAgIHJldHVybiB0aGlzLl9yZWNlaXZlKGpvYik7XG5cdCAgICB9XG5cblx0ICAgIHNjaGVkdWxlKC4uLmFyZ3MpIHtcblx0ICAgICAgdmFyIGpvYiwgb3B0aW9ucywgdGFzaztcblx0ICAgICAgaWYgKHR5cGVvZiBhcmdzWzBdID09PSBcImZ1bmN0aW9uXCIpIHtcblx0ICAgICAgICBbdGFzaywgLi4uYXJnc10gPSBhcmdzO1xuXHQgICAgICAgIG9wdGlvbnMgPSB7fTtcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICBbb3B0aW9ucywgdGFzaywgLi4uYXJnc10gPSBhcmdzO1xuXHQgICAgICB9XG5cdCAgICAgIGpvYiA9IG5ldyBKb2IkMSh0YXNrLCBhcmdzLCBvcHRpb25zLCB0aGlzLmpvYkRlZmF1bHRzLCB0aGlzLnJlamVjdE9uRHJvcCwgdGhpcy5FdmVudHMsIHRoaXMuX3N0YXRlcywgdGhpcy5Qcm9taXNlKTtcblx0ICAgICAgdGhpcy5fcmVjZWl2ZShqb2IpO1xuXHQgICAgICByZXR1cm4gam9iLnByb21pc2U7XG5cdCAgICB9XG5cblx0ICAgIHdyYXAoZm4pIHtcblx0ICAgICAgdmFyIHNjaGVkdWxlLCB3cmFwcGVkO1xuXHQgICAgICBzY2hlZHVsZSA9IHRoaXMuc2NoZWR1bGUuYmluZCh0aGlzKTtcblx0ICAgICAgd3JhcHBlZCA9IGZ1bmN0aW9uKC4uLmFyZ3MpIHtcblx0ICAgICAgICByZXR1cm4gc2NoZWR1bGUoZm4uYmluZCh0aGlzKSwgLi4uYXJncyk7XG5cdCAgICAgIH07XG5cdCAgICAgIHdyYXBwZWQud2l0aE9wdGlvbnMgPSBmdW5jdGlvbihvcHRpb25zLCAuLi5hcmdzKSB7XG5cdCAgICAgICAgcmV0dXJuIHNjaGVkdWxlKG9wdGlvbnMsIGZuLCAuLi5hcmdzKTtcblx0ICAgICAgfTtcblx0ICAgICAgcmV0dXJuIHdyYXBwZWQ7XG5cdCAgICB9XG5cblx0ICAgIGFzeW5jIHVwZGF0ZVNldHRpbmdzKG9wdGlvbnMgPSB7fSkge1xuXHQgICAgICBhd2FpdCB0aGlzLl9zdG9yZS5fX3VwZGF0ZVNldHRpbmdzX18ocGFyc2VyJDUub3ZlcndyaXRlKG9wdGlvbnMsIHRoaXMuc3RvcmVEZWZhdWx0cykpO1xuXHQgICAgICBwYXJzZXIkNS5vdmVyd3JpdGUob3B0aW9ucywgdGhpcy5pbnN0YW5jZURlZmF1bHRzLCB0aGlzKTtcblx0ICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9XG5cblx0ICAgIGN1cnJlbnRSZXNlcnZvaXIoKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLl9zdG9yZS5fX2N1cnJlbnRSZXNlcnZvaXJfXygpO1xuXHQgICAgfVxuXG5cdCAgICBpbmNyZW1lbnRSZXNlcnZvaXIoaW5jciA9IDApIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX3N0b3JlLl9faW5jcmVtZW50UmVzZXJ2b2lyX18oaW5jcik7XG5cdCAgICB9XG5cblx0ICB9XG5cdCAgQm90dGxlbmVjay5kZWZhdWx0ID0gQm90dGxlbmVjaztcblxuXHQgIEJvdHRsZW5lY2suRXZlbnRzID0gRXZlbnRzJDQ7XG5cblx0ICBCb3R0bGVuZWNrLnZlcnNpb24gPSBCb3R0bGVuZWNrLnByb3RvdHlwZS52ZXJzaW9uID0gcmVxdWlyZSQkOC52ZXJzaW9uO1xuXG5cdCAgQm90dGxlbmVjay5zdHJhdGVneSA9IEJvdHRsZW5lY2sucHJvdG90eXBlLnN0cmF0ZWd5ID0ge1xuXHQgICAgTEVBSzogMSxcblx0ICAgIE9WRVJGTE9XOiAyLFxuXHQgICAgT1ZFUkZMT1dfUFJJT1JJVFk6IDQsXG5cdCAgICBCTE9DSzogM1xuXHQgIH07XG5cblx0ICBCb3R0bGVuZWNrLkJvdHRsZW5lY2tFcnJvciA9IEJvdHRsZW5lY2sucHJvdG90eXBlLkJvdHRsZW5lY2tFcnJvciA9IEJvdHRsZW5lY2tFcnJvcl8xO1xuXG5cdCAgQm90dGxlbmVjay5Hcm91cCA9IEJvdHRsZW5lY2sucHJvdG90eXBlLkdyb3VwID0gR3JvdXBfMTtcblxuXHQgIEJvdHRsZW5lY2suUmVkaXNDb25uZWN0aW9uID0gQm90dGxlbmVjay5wcm90b3R5cGUuUmVkaXNDb25uZWN0aW9uID0gcmVxdWlyZSQkMjtcblxuXHQgIEJvdHRsZW5lY2suSU9SZWRpc0Nvbm5lY3Rpb24gPSBCb3R0bGVuZWNrLnByb3RvdHlwZS5JT1JlZGlzQ29ubmVjdGlvbiA9IHJlcXVpcmUkJDM7XG5cblx0ICBCb3R0bGVuZWNrLkJhdGNoZXIgPSBCb3R0bGVuZWNrLnByb3RvdHlwZS5CYXRjaGVyID0gQmF0Y2hlcl8xO1xuXG5cdCAgQm90dGxlbmVjay5wcm90b3R5cGUuam9iRGVmYXVsdHMgPSB7XG5cdCAgICBwcmlvcml0eTogREVGQVVMVF9QUklPUklUWSQxLFxuXHQgICAgd2VpZ2h0OiAxLFxuXHQgICAgZXhwaXJhdGlvbjogbnVsbCxcblx0ICAgIGlkOiBcIjxuby1pZD5cIlxuXHQgIH07XG5cblx0ICBCb3R0bGVuZWNrLnByb3RvdHlwZS5zdG9yZURlZmF1bHRzID0ge1xuXHQgICAgbWF4Q29uY3VycmVudDogbnVsbCxcblx0ICAgIG1pblRpbWU6IDAsXG5cdCAgICBoaWdoV2F0ZXI6IG51bGwsXG5cdCAgICBzdHJhdGVneTogQm90dGxlbmVjay5wcm90b3R5cGUuc3RyYXRlZ3kuTEVBSyxcblx0ICAgIHBlbmFsdHk6IG51bGwsXG5cdCAgICByZXNlcnZvaXI6IG51bGwsXG5cdCAgICByZXNlcnZvaXJSZWZyZXNoSW50ZXJ2YWw6IG51bGwsXG5cdCAgICByZXNlcnZvaXJSZWZyZXNoQW1vdW50OiBudWxsLFxuXHQgICAgcmVzZXJ2b2lySW5jcmVhc2VJbnRlcnZhbDogbnVsbCxcblx0ICAgIHJlc2Vydm9pckluY3JlYXNlQW1vdW50OiBudWxsLFxuXHQgICAgcmVzZXJ2b2lySW5jcmVhc2VNYXhpbXVtOiBudWxsXG5cdCAgfTtcblxuXHQgIEJvdHRsZW5lY2sucHJvdG90eXBlLmxvY2FsU3RvcmVEZWZhdWx0cyA9IHtcblx0ICAgIFByb21pc2U6IFByb21pc2UsXG5cdCAgICB0aW1lb3V0OiBudWxsLFxuXHQgICAgaGVhcnRiZWF0SW50ZXJ2YWw6IDI1MFxuXHQgIH07XG5cblx0ICBCb3R0bGVuZWNrLnByb3RvdHlwZS5yZWRpc1N0b3JlRGVmYXVsdHMgPSB7XG5cdCAgICBQcm9taXNlOiBQcm9taXNlLFxuXHQgICAgdGltZW91dDogbnVsbCxcblx0ICAgIGhlYXJ0YmVhdEludGVydmFsOiA1MDAwLFxuXHQgICAgY2xpZW50VGltZW91dDogMTAwMDAsXG5cdCAgICBSZWRpczogbnVsbCxcblx0ICAgIGNsaWVudE9wdGlvbnM6IHt9LFxuXHQgICAgY2x1c3Rlck5vZGVzOiBudWxsLFxuXHQgICAgY2xlYXJEYXRhc3RvcmU6IGZhbHNlLFxuXHQgICAgY29ubmVjdGlvbjogbnVsbFxuXHQgIH07XG5cblx0ICBCb3R0bGVuZWNrLnByb3RvdHlwZS5pbnN0YW5jZURlZmF1bHRzID0ge1xuXHQgICAgZGF0YXN0b3JlOiBcImxvY2FsXCIsXG5cdCAgICBjb25uZWN0aW9uOiBudWxsLFxuXHQgICAgaWQ6IFwiPG5vLWlkPlwiLFxuXHQgICAgcmVqZWN0T25Ecm9wOiB0cnVlLFxuXHQgICAgdHJhY2tEb25lU3RhdHVzOiBmYWxzZSxcblx0ICAgIFByb21pc2U6IFByb21pc2Vcblx0ICB9O1xuXG5cdCAgQm90dGxlbmVjay5wcm90b3R5cGUuc3RvcERlZmF1bHRzID0ge1xuXHQgICAgZW5xdWV1ZUVycm9yTWVzc2FnZTogXCJUaGlzIGxpbWl0ZXIgaGFzIGJlZW4gc3RvcHBlZCBhbmQgY2Fubm90IGFjY2VwdCBuZXcgam9icy5cIixcblx0ICAgIGRyb3BXYWl0aW5nSm9iczogdHJ1ZSxcblx0ICAgIGRyb3BFcnJvck1lc3NhZ2U6IFwiVGhpcyBsaW1pdGVyIGhhcyBiZWVuIHN0b3BwZWQuXCJcblx0ICB9O1xuXG5cdCAgcmV0dXJuIEJvdHRsZW5lY2s7XG5cblx0fSkuY2FsbChjb21tb25qc0dsb2JhbCk7XG5cblx0dmFyIEJvdHRsZW5lY2tfMSA9IEJvdHRsZW5lY2s7XG5cblx0dmFyIGxpYiA9IEJvdHRsZW5lY2tfMTtcblxuXHRyZXR1cm4gbGliO1xuXG59KSkpO1xuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wRGVmYXVsdCAoZXgpIHsgcmV0dXJuIChleCAmJiAodHlwZW9mIGV4ID09PSAnb2JqZWN0JykgJiYgJ2RlZmF1bHQnIGluIGV4KSA/IGV4WydkZWZhdWx0J10gOiBleDsgfVxuXG52YXIgQm90dGxlbmVjayA9IF9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKCdib3R0bGVuZWNrL2xpZ2h0JykpO1xuXG4vLyBAdHMtaWdub3JlXG5hc3luYyBmdW5jdGlvbiBlcnJvclJlcXVlc3Qob2N0b2tpdCwgc3RhdGUsIGVycm9yLCBvcHRpb25zKSB7XG4gIGlmICghZXJyb3IucmVxdWVzdCB8fCAhZXJyb3IucmVxdWVzdC5yZXF1ZXN0KSB7XG4gICAgLy8gYWRkcmVzcyBodHRwczovL2dpdGh1Yi5jb20vb2N0b2tpdC9wbHVnaW4tcmV0cnkuanMvaXNzdWVzLzhcbiAgICB0aHJvdyBlcnJvcjtcbiAgfSAvLyByZXRyeSBhbGwgPj0gNDAwICYmIG5vdCBkb05vdFJldHJ5XG5cblxuICBpZiAoZXJyb3Iuc3RhdHVzID49IDQwMCAmJiAhc3RhdGUuZG9Ob3RSZXRyeS5pbmNsdWRlcyhlcnJvci5zdGF0dXMpKSB7XG4gICAgY29uc3QgcmV0cmllcyA9IG9wdGlvbnMucmVxdWVzdC5yZXRyaWVzICE9IG51bGwgPyBvcHRpb25zLnJlcXVlc3QucmV0cmllcyA6IHN0YXRlLnJldHJpZXM7XG4gICAgY29uc3QgcmV0cnlBZnRlciA9IE1hdGgucG93KChvcHRpb25zLnJlcXVlc3QucmV0cnlDb3VudCB8fCAwKSArIDEsIDIpO1xuICAgIHRocm93IG9jdG9raXQucmV0cnkucmV0cnlSZXF1ZXN0KGVycm9yLCByZXRyaWVzLCByZXRyeUFmdGVyKTtcbiAgfSAvLyBNYXliZSBldmVudHVhbGx5IHRoZXJlIHdpbGwgYmUgbW9yZSBjYXNlcyBoZXJlXG5cblxuICB0aHJvdyBlcnJvcjtcbn1cblxuLy8gQHRzLWlnbm9yZVxuXG5hc3luYyBmdW5jdGlvbiB3cmFwUmVxdWVzdChzdGF0ZSwgcmVxdWVzdCwgb3B0aW9ucykge1xuICBjb25zdCBsaW1pdGVyID0gbmV3IEJvdHRsZW5lY2soKTsgLy8gQHRzLWlnbm9yZVxuXG4gIGxpbWl0ZXIub24oXCJmYWlsZWRcIiwgZnVuY3Rpb24gKGVycm9yLCBpbmZvKSB7XG4gICAgY29uc3QgbWF4UmV0cmllcyA9IH5+ZXJyb3IucmVxdWVzdC5yZXF1ZXN0LnJldHJpZXM7XG4gICAgY29uc3QgYWZ0ZXIgPSB+fmVycm9yLnJlcXVlc3QucmVxdWVzdC5yZXRyeUFmdGVyO1xuICAgIG9wdGlvbnMucmVxdWVzdC5yZXRyeUNvdW50ID0gaW5mby5yZXRyeUNvdW50ICsgMTtcblxuICAgIGlmIChtYXhSZXRyaWVzID4gaW5mby5yZXRyeUNvdW50KSB7XG4gICAgICAvLyBSZXR1cm5pbmcgYSBudW1iZXIgaW5zdHJ1Y3RzIHRoZSBsaW1pdGVyIHRvIHJldHJ5XG4gICAgICAvLyB0aGUgcmVxdWVzdCBhZnRlciB0aGF0IG51bWJlciBvZiBtaWxsaXNlY29uZHMgaGF2ZSBwYXNzZWRcbiAgICAgIHJldHVybiBhZnRlciAqIHN0YXRlLnJldHJ5QWZ0ZXJCYXNlVmFsdWU7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGxpbWl0ZXIuc2NoZWR1bGUocmVxdWVzdCwgb3B0aW9ucyk7XG59XG5cbmNvbnN0IFZFUlNJT04gPSBcIjMuMC45XCI7XG5mdW5jdGlvbiByZXRyeShvY3Rva2l0LCBvY3Rva2l0T3B0aW9ucykge1xuICBjb25zdCBzdGF0ZSA9IE9iamVjdC5hc3NpZ24oe1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgcmV0cnlBZnRlckJhc2VWYWx1ZTogMTAwMCxcbiAgICBkb05vdFJldHJ5OiBbNDAwLCA0MDEsIDQwMywgNDA0LCA0MjJdLFxuICAgIHJldHJpZXM6IDNcbiAgfSwgb2N0b2tpdE9wdGlvbnMucmV0cnkpO1xuXG4gIGlmIChzdGF0ZS5lbmFibGVkKSB7XG4gICAgb2N0b2tpdC5ob29rLmVycm9yKFwicmVxdWVzdFwiLCBlcnJvclJlcXVlc3QuYmluZChudWxsLCBvY3Rva2l0LCBzdGF0ZSkpO1xuICAgIG9jdG9raXQuaG9vay53cmFwKFwicmVxdWVzdFwiLCB3cmFwUmVxdWVzdC5iaW5kKG51bGwsIHN0YXRlKSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHJldHJ5OiB7XG4gICAgICByZXRyeVJlcXVlc3Q6IChlcnJvciwgcmV0cmllcywgcmV0cnlBZnRlcikgPT4ge1xuICAgICAgICBlcnJvci5yZXF1ZXN0LnJlcXVlc3QgPSBPYmplY3QuYXNzaWduKHt9LCBlcnJvci5yZXF1ZXN0LnJlcXVlc3QsIHtcbiAgICAgICAgICByZXRyaWVzOiByZXRyaWVzLFxuICAgICAgICAgIHJldHJ5QWZ0ZXI6IHJldHJ5QWZ0ZXJcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5yZXRyeS5WRVJTSU9OID0gVkVSU0lPTjtcblxuZXhwb3J0cy5WRVJTSU9OID0gVkVSU0lPTjtcbmV4cG9ydHMucmV0cnkgPSByZXRyeTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldEFydGlmYWN0SW50ZXJuYWwgPSBleHBvcnRzLmdldEFydGlmYWN0UHVibGljID0gdm9pZCAwO1xuY29uc3QgZ2l0aHViXzEgPSByZXF1aXJlKFwiQGFjdGlvbnMvZ2l0aHViXCIpO1xuY29uc3QgcGx1Z2luX3JldHJ5XzEgPSByZXF1aXJlKFwiQG9jdG9raXQvcGx1Z2luLXJldHJ5XCIpO1xuY29uc3QgY29yZSA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiQGFjdGlvbnMvY29yZVwiKSk7XG5jb25zdCB1dGlsc18xID0gcmVxdWlyZShcIkBhY3Rpb25zL2dpdGh1Yi9saWIvdXRpbHNcIik7XG5jb25zdCByZXRyeV9vcHRpb25zXzEgPSByZXF1aXJlKFwiLi9yZXRyeS1vcHRpb25zXCIpO1xuY29uc3QgcGx1Z2luX3JlcXVlc3RfbG9nXzEgPSByZXF1aXJlKFwiQG9jdG9raXQvcGx1Z2luLXJlcXVlc3QtbG9nXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uL3NoYXJlZC91dGlsXCIpO1xuY29uc3QgdXNlcl9hZ2VudF8xID0gcmVxdWlyZShcIi4uL3NoYXJlZC91c2VyLWFnZW50XCIpO1xuY29uc3QgYXJ0aWZhY3RfdHdpcnBfY2xpZW50XzEgPSByZXF1aXJlKFwiLi4vc2hhcmVkL2FydGlmYWN0LXR3aXJwLWNsaWVudFwiKTtcbmNvbnN0IGdlbmVyYXRlZF8xID0gcmVxdWlyZShcIi4uLy4uL2dlbmVyYXRlZFwiKTtcbmNvbnN0IGVycm9yc18xID0gcmVxdWlyZShcIi4uL3NoYXJlZC9lcnJvcnNcIik7XG5mdW5jdGlvbiBnZXRBcnRpZmFjdFB1YmxpYyhhcnRpZmFjdE5hbWUsIHdvcmtmbG93UnVuSWQsIHJlcG9zaXRvcnlPd25lciwgcmVwb3NpdG9yeU5hbWUsIHRva2VuKSB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IFtyZXRyeU9wdHMsIHJlcXVlc3RPcHRzXSA9ICgwLCByZXRyeV9vcHRpb25zXzEuZ2V0UmV0cnlPcHRpb25zKSh1dGlsc18xLmRlZmF1bHRzKTtcbiAgICAgICAgY29uc3Qgb3B0cyA9IHtcbiAgICAgICAgICAgIGxvZzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgdXNlckFnZW50OiAoMCwgdXNlcl9hZ2VudF8xLmdldFVzZXJBZ2VudFN0cmluZykoKSxcbiAgICAgICAgICAgIHByZXZpZXdzOiB1bmRlZmluZWQsXG4gICAgICAgICAgICByZXRyeTogcmV0cnlPcHRzLFxuICAgICAgICAgICAgcmVxdWVzdDogcmVxdWVzdE9wdHNcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZ2l0aHViID0gKDAsIGdpdGh1Yl8xLmdldE9jdG9raXQpKHRva2VuLCBvcHRzLCBwbHVnaW5fcmV0cnlfMS5yZXRyeSwgcGx1Z2luX3JlcXVlc3RfbG9nXzEucmVxdWVzdExvZyk7XG4gICAgICAgIGNvbnN0IGdldEFydGlmYWN0UmVzcCA9IHlpZWxkIGdpdGh1Yi5yZXF1ZXN0KCdHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hcnRpZmFjdHN7P25hbWV9Jywge1xuICAgICAgICAgICAgb3duZXI6IHJlcG9zaXRvcnlPd25lcixcbiAgICAgICAgICAgIHJlcG86IHJlcG9zaXRvcnlOYW1lLFxuICAgICAgICAgICAgcnVuX2lkOiB3b3JrZmxvd1J1bklkLFxuICAgICAgICAgICAgbmFtZTogYXJ0aWZhY3ROYW1lXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoZ2V0QXJ0aWZhY3RSZXNwLnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuSW52YWxpZFJlc3BvbnNlRXJyb3IoYEludmFsaWQgcmVzcG9uc2UgZnJvbSBHaXRIdWIgQVBJOiAke2dldEFydGlmYWN0UmVzcC5zdGF0dXN9ICgkeyhfYSA9IGdldEFydGlmYWN0UmVzcCA9PT0gbnVsbCB8fCBnZXRBcnRpZmFjdFJlc3AgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGdldEFydGlmYWN0UmVzcC5oZWFkZXJzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2FbJ3gtZ2l0aHViLXJlcXVlc3QtaWQnXX0pYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGdldEFydGlmYWN0UmVzcC5kYXRhLmFydGlmYWN0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBlcnJvcnNfMS5BcnRpZmFjdE5vdEZvdW5kRXJyb3IoYEFydGlmYWN0IG5vdCBmb3VuZCBmb3IgbmFtZTogJHthcnRpZmFjdE5hbWV9XG4gICAgICAgIFBsZWFzZSBlbnN1cmUgdGhhdCB5b3VyIGFydGlmYWN0IGlzIG5vdCBleHBpcmVkIGFuZCB0aGUgYXJ0aWZhY3Qgd2FzIHVwbG9hZGVkIHVzaW5nIGEgY29tcGF0aWJsZSB2ZXJzaW9uIG9mIHRvb2xraXQvdXBsb2FkLWFydGlmYWN0LlxuICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgdmlzaXQgdGhlIEdpdEh1YiBBcnRpZmFjdHMgRkFROiBodHRwczovL2dpdGh1Yi5jb20vYWN0aW9ucy90b29sa2l0L2Jsb2IvbWFpbi9wYWNrYWdlcy9hcnRpZmFjdC9kb2NzL2ZhcS5tZGApO1xuICAgICAgICB9XG4gICAgICAgIGxldCBhcnRpZmFjdCA9IGdldEFydGlmYWN0UmVzcC5kYXRhLmFydGlmYWN0c1swXTtcbiAgICAgICAgaWYgKGdldEFydGlmYWN0UmVzcC5kYXRhLmFydGlmYWN0cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBhcnRpZmFjdCA9IGdldEFydGlmYWN0UmVzcC5kYXRhLmFydGlmYWN0cy5zb3J0KChhLCBiKSA9PiBiLmlkIC0gYS5pZClbMF07XG4gICAgICAgICAgICBjb3JlLmRlYnVnKGBNb3JlIHRoYW4gb25lIGFydGlmYWN0IGZvdW5kIGZvciBhIHNpbmdsZSBuYW1lLCByZXR1cm5pbmcgbmV3ZXN0IChpZDogJHthcnRpZmFjdC5pZH0pYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFydGlmYWN0OiB7XG4gICAgICAgICAgICAgICAgbmFtZTogYXJ0aWZhY3QubmFtZSxcbiAgICAgICAgICAgICAgICBpZDogYXJ0aWZhY3QuaWQsXG4gICAgICAgICAgICAgICAgc2l6ZTogYXJ0aWZhY3Quc2l6ZV9pbl9ieXRlcyxcbiAgICAgICAgICAgICAgICBjcmVhdGVkQXQ6IGFydGlmYWN0LmNyZWF0ZWRfYXQgPyBuZXcgRGF0ZShhcnRpZmFjdC5jcmVhdGVkX2F0KSA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0pO1xufVxuZXhwb3J0cy5nZXRBcnRpZmFjdFB1YmxpYyA9IGdldEFydGlmYWN0UHVibGljO1xuZnVuY3Rpb24gZ2V0QXJ0aWZhY3RJbnRlcm5hbChhcnRpZmFjdE5hbWUpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBhcnRpZmFjdENsaWVudCA9ICgwLCBhcnRpZmFjdF90d2lycF9jbGllbnRfMS5pbnRlcm5hbEFydGlmYWN0VHdpcnBDbGllbnQpKCk7XG4gICAgICAgIGNvbnN0IHsgd29ya2Zsb3dSdW5CYWNrZW5kSWQsIHdvcmtmbG93Sm9iUnVuQmFja2VuZElkIH0gPSAoMCwgdXRpbF8xLmdldEJhY2tlbmRJZHNGcm9tVG9rZW4pKCk7XG4gICAgICAgIGNvbnN0IHJlcSA9IHtcbiAgICAgICAgICAgIHdvcmtmbG93UnVuQmFja2VuZElkLFxuICAgICAgICAgICAgd29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQsXG4gICAgICAgICAgICBuYW1lRmlsdGVyOiBnZW5lcmF0ZWRfMS5TdHJpbmdWYWx1ZS5jcmVhdGUoeyB2YWx1ZTogYXJ0aWZhY3ROYW1lIH0pXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHJlcyA9IHlpZWxkIGFydGlmYWN0Q2xpZW50Lkxpc3RBcnRpZmFjdHMocmVxKTtcbiAgICAgICAgaWYgKHJlcy5hcnRpZmFjdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuQXJ0aWZhY3ROb3RGb3VuZEVycm9yKGBBcnRpZmFjdCBub3QgZm91bmQgZm9yIG5hbWU6ICR7YXJ0aWZhY3ROYW1lfVxuICAgICAgICBQbGVhc2UgZW5zdXJlIHRoYXQgeW91ciBhcnRpZmFjdCBpcyBub3QgZXhwaXJlZCBhbmQgdGhlIGFydGlmYWN0IHdhcyB1cGxvYWRlZCB1c2luZyBhIGNvbXBhdGlibGUgdmVyc2lvbiBvZiB0b29sa2l0L3VwbG9hZC1hcnRpZmFjdC5cbiAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHZpc2l0IHRoZSBHaXRIdWIgQXJ0aWZhY3RzIEZBUTogaHR0cHM6Ly9naXRodWIuY29tL2FjdGlvbnMvdG9vbGtpdC9ibG9iL21haW4vcGFja2FnZXMvYXJ0aWZhY3QvZG9jcy9mYXEubWRgKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgYXJ0aWZhY3QgPSByZXMuYXJ0aWZhY3RzWzBdO1xuICAgICAgICBpZiAocmVzLmFydGlmYWN0cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBhcnRpZmFjdCA9IHJlcy5hcnRpZmFjdHMuc29ydCgoYSwgYikgPT4gTnVtYmVyKGIuZGF0YWJhc2VJZCkgLSBOdW1iZXIoYS5kYXRhYmFzZUlkKSlbMF07XG4gICAgICAgICAgICBjb3JlLmRlYnVnKGBNb3JlIHRoYW4gb25lIGFydGlmYWN0IGZvdW5kIGZvciBhIHNpbmdsZSBuYW1lLCByZXR1cm5pbmcgbmV3ZXN0IChpZDogJHthcnRpZmFjdC5kYXRhYmFzZUlkfSlgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYXJ0aWZhY3Q6IHtcbiAgICAgICAgICAgICAgICBuYW1lOiBhcnRpZmFjdC5uYW1lLFxuICAgICAgICAgICAgICAgIGlkOiBOdW1iZXIoYXJ0aWZhY3QuZGF0YWJhc2VJZCksXG4gICAgICAgICAgICAgICAgc2l6ZTogTnVtYmVyKGFydGlmYWN0LnNpemUpLFxuICAgICAgICAgICAgICAgIGNyZWF0ZWRBdDogYXJ0aWZhY3QuY3JlYXRlZEF0XG4gICAgICAgICAgICAgICAgICAgID8gZ2VuZXJhdGVkXzEuVGltZXN0YW1wLnRvRGF0ZShhcnRpZmFjdC5jcmVhdGVkQXQpXG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfSk7XG59XG5leHBvcnRzLmdldEFydGlmYWN0SW50ZXJuYWwgPSBnZXRBcnRpZmFjdEludGVybmFsO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Z2V0LWFydGlmYWN0LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZGVsZXRlQXJ0aWZhY3RJbnRlcm5hbCA9IGV4cG9ydHMuZGVsZXRlQXJ0aWZhY3RQdWJsaWMgPSB2b2lkIDA7XG5jb25zdCBjb3JlXzEgPSByZXF1aXJlKFwiQGFjdGlvbnMvY29yZVwiKTtcbmNvbnN0IGdpdGh1Yl8xID0gcmVxdWlyZShcIkBhY3Rpb25zL2dpdGh1YlwiKTtcbmNvbnN0IHVzZXJfYWdlbnRfMSA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvdXNlci1hZ2VudFwiKTtcbmNvbnN0IHJldHJ5X29wdGlvbnNfMSA9IHJlcXVpcmUoXCIuLi9maW5kL3JldHJ5LW9wdGlvbnNcIik7XG5jb25zdCB1dGlsc18xID0gcmVxdWlyZShcIkBhY3Rpb25zL2dpdGh1Yi9saWIvdXRpbHNcIik7XG5jb25zdCBwbHVnaW5fcmVxdWVzdF9sb2dfMSA9IHJlcXVpcmUoXCJAb2N0b2tpdC9wbHVnaW4tcmVxdWVzdC1sb2dcIik7XG5jb25zdCBwbHVnaW5fcmV0cnlfMSA9IHJlcXVpcmUoXCJAb2N0b2tpdC9wbHVnaW4tcmV0cnlcIik7XG5jb25zdCBhcnRpZmFjdF90d2lycF9jbGllbnRfMSA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvYXJ0aWZhY3QtdHdpcnAtY2xpZW50XCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uL3NoYXJlZC91dGlsXCIpO1xuY29uc3QgZ2VuZXJhdGVkXzEgPSByZXF1aXJlKFwiLi4vLi4vZ2VuZXJhdGVkXCIpO1xuY29uc3QgZ2V0X2FydGlmYWN0XzEgPSByZXF1aXJlKFwiLi4vZmluZC9nZXQtYXJ0aWZhY3RcIik7XG5jb25zdCBlcnJvcnNfMSA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvZXJyb3JzXCIpO1xuZnVuY3Rpb24gZGVsZXRlQXJ0aWZhY3RQdWJsaWMoYXJ0aWZhY3ROYW1lLCB3b3JrZmxvd1J1bklkLCByZXBvc2l0b3J5T3duZXIsIHJlcG9zaXRvcnlOYW1lLCB0b2tlbikge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBbcmV0cnlPcHRzLCByZXF1ZXN0T3B0c10gPSAoMCwgcmV0cnlfb3B0aW9uc18xLmdldFJldHJ5T3B0aW9ucykodXRpbHNfMS5kZWZhdWx0cyk7XG4gICAgICAgIGNvbnN0IG9wdHMgPSB7XG4gICAgICAgICAgICBsb2c6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHVzZXJBZ2VudDogKDAsIHVzZXJfYWdlbnRfMS5nZXRVc2VyQWdlbnRTdHJpbmcpKCksXG4gICAgICAgICAgICBwcmV2aWV3czogdW5kZWZpbmVkLFxuICAgICAgICAgICAgcmV0cnk6IHJldHJ5T3B0cyxcbiAgICAgICAgICAgIHJlcXVlc3Q6IHJlcXVlc3RPcHRzXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGdpdGh1YiA9ICgwLCBnaXRodWJfMS5nZXRPY3Rva2l0KSh0b2tlbiwgb3B0cywgcGx1Z2luX3JldHJ5XzEucmV0cnksIHBsdWdpbl9yZXF1ZXN0X2xvZ18xLnJlcXVlc3RMb2cpO1xuICAgICAgICBjb25zdCBnZXRBcnRpZmFjdFJlc3AgPSB5aWVsZCAoMCwgZ2V0X2FydGlmYWN0XzEuZ2V0QXJ0aWZhY3RQdWJsaWMpKGFydGlmYWN0TmFtZSwgd29ya2Zsb3dSdW5JZCwgcmVwb3NpdG9yeU93bmVyLCByZXBvc2l0b3J5TmFtZSwgdG9rZW4pO1xuICAgICAgICBjb25zdCBkZWxldGVBcnRpZmFjdFJlc3AgPSB5aWVsZCBnaXRodWIucmVzdC5hY3Rpb25zLmRlbGV0ZUFydGlmYWN0KHtcbiAgICAgICAgICAgIG93bmVyOiByZXBvc2l0b3J5T3duZXIsXG4gICAgICAgICAgICByZXBvOiByZXBvc2l0b3J5TmFtZSxcbiAgICAgICAgICAgIGFydGlmYWN0X2lkOiBnZXRBcnRpZmFjdFJlc3AuYXJ0aWZhY3QuaWRcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChkZWxldGVBcnRpZmFjdFJlc3Auc3RhdHVzICE9PSAyMDQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBlcnJvcnNfMS5JbnZhbGlkUmVzcG9uc2VFcnJvcihgSW52YWxpZCByZXNwb25zZSBmcm9tIEdpdEh1YiBBUEk6ICR7ZGVsZXRlQXJ0aWZhY3RSZXNwLnN0YXR1c30gKCR7KF9hID0gZGVsZXRlQXJ0aWZhY3RSZXNwID09PSBudWxsIHx8IGRlbGV0ZUFydGlmYWN0UmVzcCA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGVsZXRlQXJ0aWZhY3RSZXNwLmhlYWRlcnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVsneC1naXRodWItcmVxdWVzdC1pZCddfSlgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQ6IGdldEFydGlmYWN0UmVzcC5hcnRpZmFjdC5pZFxuICAgICAgICB9O1xuICAgIH0pO1xufVxuZXhwb3J0cy5kZWxldGVBcnRpZmFjdFB1YmxpYyA9IGRlbGV0ZUFydGlmYWN0UHVibGljO1xuZnVuY3Rpb24gZGVsZXRlQXJ0aWZhY3RJbnRlcm5hbChhcnRpZmFjdE5hbWUpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBhcnRpZmFjdENsaWVudCA9ICgwLCBhcnRpZmFjdF90d2lycF9jbGllbnRfMS5pbnRlcm5hbEFydGlmYWN0VHdpcnBDbGllbnQpKCk7XG4gICAgICAgIGNvbnN0IHsgd29ya2Zsb3dSdW5CYWNrZW5kSWQsIHdvcmtmbG93Sm9iUnVuQmFja2VuZElkIH0gPSAoMCwgdXRpbF8xLmdldEJhY2tlbmRJZHNGcm9tVG9rZW4pKCk7XG4gICAgICAgIGNvbnN0IGxpc3RSZXEgPSB7XG4gICAgICAgICAgICB3b3JrZmxvd1J1bkJhY2tlbmRJZCxcbiAgICAgICAgICAgIHdvcmtmbG93Sm9iUnVuQmFja2VuZElkLFxuICAgICAgICAgICAgbmFtZUZpbHRlcjogZ2VuZXJhdGVkXzEuU3RyaW5nVmFsdWUuY3JlYXRlKHsgdmFsdWU6IGFydGlmYWN0TmFtZSB9KVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBsaXN0UmVzID0geWllbGQgYXJ0aWZhY3RDbGllbnQuTGlzdEFydGlmYWN0cyhsaXN0UmVxKTtcbiAgICAgICAgaWYgKGxpc3RSZXMuYXJ0aWZhY3RzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGVycm9yc18xLkFydGlmYWN0Tm90Rm91bmRFcnJvcihgQXJ0aWZhY3Qgbm90IGZvdW5kIGZvciBuYW1lOiAke2FydGlmYWN0TmFtZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgYXJ0aWZhY3QgPSBsaXN0UmVzLmFydGlmYWN0c1swXTtcbiAgICAgICAgaWYgKGxpc3RSZXMuYXJ0aWZhY3RzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIGFydGlmYWN0ID0gbGlzdFJlcy5hcnRpZmFjdHMuc29ydCgoYSwgYikgPT4gTnVtYmVyKGIuZGF0YWJhc2VJZCkgLSBOdW1iZXIoYS5kYXRhYmFzZUlkKSlbMF07XG4gICAgICAgICAgICAoMCwgY29yZV8xLmRlYnVnKShgTW9yZSB0aGFuIG9uZSBhcnRpZmFjdCBmb3VuZCBmb3IgYSBzaW5nbGUgbmFtZSwgcmV0dXJuaW5nIG5ld2VzdCAoaWQ6ICR7YXJ0aWZhY3QuZGF0YWJhc2VJZH0pYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVxID0ge1xuICAgICAgICAgICAgd29ya2Zsb3dSdW5CYWNrZW5kSWQ6IGFydGlmYWN0LndvcmtmbG93UnVuQmFja2VuZElkLFxuICAgICAgICAgICAgd29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQ6IGFydGlmYWN0LndvcmtmbG93Sm9iUnVuQmFja2VuZElkLFxuICAgICAgICAgICAgbmFtZTogYXJ0aWZhY3QubmFtZVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZXMgPSB5aWVsZCBhcnRpZmFjdENsaWVudC5EZWxldGVBcnRpZmFjdChyZXEpO1xuICAgICAgICAoMCwgY29yZV8xLmluZm8pKGBBcnRpZmFjdCAnJHthcnRpZmFjdE5hbWV9JyAoSUQ6ICR7cmVzLmFydGlmYWN0SWR9KSBkZWxldGVkYCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpZDogTnVtYmVyKHJlcy5hcnRpZmFjdElkKVxuICAgICAgICB9O1xuICAgIH0pO1xufVxuZXhwb3J0cy5kZWxldGVBcnRpZmFjdEludGVybmFsID0gZGVsZXRlQXJ0aWZhY3RJbnRlcm5hbDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlbGV0ZS1hcnRpZmFjdC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmxpc3RBcnRpZmFjdHNJbnRlcm5hbCA9IGV4cG9ydHMubGlzdEFydGlmYWN0c1B1YmxpYyA9IHZvaWQgMDtcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCJAYWN0aW9ucy9jb3JlXCIpO1xuY29uc3QgZ2l0aHViXzEgPSByZXF1aXJlKFwiQGFjdGlvbnMvZ2l0aHViXCIpO1xuY29uc3QgdXNlcl9hZ2VudF8xID0gcmVxdWlyZShcIi4uL3NoYXJlZC91c2VyLWFnZW50XCIpO1xuY29uc3QgcmV0cnlfb3B0aW9uc18xID0gcmVxdWlyZShcIi4vcmV0cnktb3B0aW9uc1wiKTtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiQGFjdGlvbnMvZ2l0aHViL2xpYi91dGlsc1wiKTtcbmNvbnN0IHBsdWdpbl9yZXF1ZXN0X2xvZ18xID0gcmVxdWlyZShcIkBvY3Rva2l0L3BsdWdpbi1yZXF1ZXN0LWxvZ1wiKTtcbmNvbnN0IHBsdWdpbl9yZXRyeV8xID0gcmVxdWlyZShcIkBvY3Rva2l0L3BsdWdpbi1yZXRyeVwiKTtcbmNvbnN0IGFydGlmYWN0X3R3aXJwX2NsaWVudF8xID0gcmVxdWlyZShcIi4uL3NoYXJlZC9hcnRpZmFjdC10d2lycC1jbGllbnRcIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vc2hhcmVkL3V0aWxcIik7XG5jb25zdCBnZW5lcmF0ZWRfMSA9IHJlcXVpcmUoXCIuLi8uLi9nZW5lcmF0ZWRcIik7XG4vLyBMaW1pdGluZyB0byAxMDAwIGZvciBwZXJmIHJlYXNvbnNcbmNvbnN0IG1heGltdW1BcnRpZmFjdENvdW50ID0gMTAwMDtcbmNvbnN0IHBhZ2luYXRpb25Db3VudCA9IDEwMDtcbmNvbnN0IG1heE51bWJlck9mUGFnZXMgPSBtYXhpbXVtQXJ0aWZhY3RDb3VudCAvIHBhZ2luYXRpb25Db3VudDtcbmZ1bmN0aW9uIGxpc3RBcnRpZmFjdHNQdWJsaWMod29ya2Zsb3dSdW5JZCwgcmVwb3NpdG9yeU93bmVyLCByZXBvc2l0b3J5TmFtZSwgdG9rZW4sIGxhdGVzdCA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgKDAsIGNvcmVfMS5pbmZvKShgRmV0Y2hpbmcgYXJ0aWZhY3QgbGlzdCBmb3Igd29ya2Zsb3cgcnVuICR7d29ya2Zsb3dSdW5JZH0gaW4gcmVwb3NpdG9yeSAke3JlcG9zaXRvcnlPd25lcn0vJHtyZXBvc2l0b3J5TmFtZX1gKTtcbiAgICAgICAgbGV0IGFydGlmYWN0cyA9IFtdO1xuICAgICAgICBjb25zdCBbcmV0cnlPcHRzLCByZXF1ZXN0T3B0c10gPSAoMCwgcmV0cnlfb3B0aW9uc18xLmdldFJldHJ5T3B0aW9ucykodXRpbHNfMS5kZWZhdWx0cyk7XG4gICAgICAgIGNvbnN0IG9wdHMgPSB7XG4gICAgICAgICAgICBsb2c6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHVzZXJBZ2VudDogKDAsIHVzZXJfYWdlbnRfMS5nZXRVc2VyQWdlbnRTdHJpbmcpKCksXG4gICAgICAgICAgICBwcmV2aWV3czogdW5kZWZpbmVkLFxuICAgICAgICAgICAgcmV0cnk6IHJldHJ5T3B0cyxcbiAgICAgICAgICAgIHJlcXVlc3Q6IHJlcXVlc3RPcHRzXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGdpdGh1YiA9ICgwLCBnaXRodWJfMS5nZXRPY3Rva2l0KSh0b2tlbiwgb3B0cywgcGx1Z2luX3JldHJ5XzEucmV0cnksIHBsdWdpbl9yZXF1ZXN0X2xvZ18xLnJlcXVlc3RMb2cpO1xuICAgICAgICBsZXQgY3VycmVudFBhZ2VOdW1iZXIgPSAxO1xuICAgICAgICBjb25zdCB7IGRhdGE6IGxpc3RBcnRpZmFjdFJlc3BvbnNlIH0gPSB5aWVsZCBnaXRodWIucmVzdC5hY3Rpb25zLmxpc3RXb3JrZmxvd1J1bkFydGlmYWN0cyh7XG4gICAgICAgICAgICBvd25lcjogcmVwb3NpdG9yeU93bmVyLFxuICAgICAgICAgICAgcmVwbzogcmVwb3NpdG9yeU5hbWUsXG4gICAgICAgICAgICBydW5faWQ6IHdvcmtmbG93UnVuSWQsXG4gICAgICAgICAgICBwZXJfcGFnZTogcGFnaW5hdGlvbkNvdW50LFxuICAgICAgICAgICAgcGFnZTogY3VycmVudFBhZ2VOdW1iZXJcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCBudW1iZXJPZlBhZ2VzID0gTWF0aC5jZWlsKGxpc3RBcnRpZmFjdFJlc3BvbnNlLnRvdGFsX2NvdW50IC8gcGFnaW5hdGlvbkNvdW50KTtcbiAgICAgICAgY29uc3QgdG90YWxBcnRpZmFjdENvdW50ID0gbGlzdEFydGlmYWN0UmVzcG9uc2UudG90YWxfY291bnQ7XG4gICAgICAgIGlmICh0b3RhbEFydGlmYWN0Q291bnQgPiBtYXhpbXVtQXJ0aWZhY3RDb3VudCkge1xuICAgICAgICAgICAgKDAsIGNvcmVfMS53YXJuaW5nKShgV29ya2Zsb3cgcnVuICR7d29ya2Zsb3dSdW5JZH0gaGFzIG1vcmUgdGhhbiAxMDAwIGFydGlmYWN0cy4gUmVzdWx0cyB3aWxsIGJlIGluY29tcGxldGUgYXMgb25seSB0aGUgZmlyc3QgJHttYXhpbXVtQXJ0aWZhY3RDb3VudH0gYXJ0aWZhY3RzIHdpbGwgYmUgcmV0dXJuZWRgKTtcbiAgICAgICAgICAgIG51bWJlck9mUGFnZXMgPSBtYXhOdW1iZXJPZlBhZ2VzO1xuICAgICAgICB9XG4gICAgICAgIC8vIEl0ZXJhdGUgb3ZlciB0aGUgZmlyc3QgcGFnZVxuICAgICAgICBmb3IgKGNvbnN0IGFydGlmYWN0IG9mIGxpc3RBcnRpZmFjdFJlc3BvbnNlLmFydGlmYWN0cykge1xuICAgICAgICAgICAgYXJ0aWZhY3RzLnB1c2goe1xuICAgICAgICAgICAgICAgIG5hbWU6IGFydGlmYWN0Lm5hbWUsXG4gICAgICAgICAgICAgICAgaWQ6IGFydGlmYWN0LmlkLFxuICAgICAgICAgICAgICAgIHNpemU6IGFydGlmYWN0LnNpemVfaW5fYnl0ZXMsXG4gICAgICAgICAgICAgICAgY3JlYXRlZEF0OiBhcnRpZmFjdC5jcmVhdGVkX2F0ID8gbmV3IERhdGUoYXJ0aWZhY3QuY3JlYXRlZF9hdCkgOiB1bmRlZmluZWRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIEl0ZXJhdGUgb3ZlciBhbnkgcmVtYWluaW5nIHBhZ2VzXG4gICAgICAgIGZvciAoY3VycmVudFBhZ2VOdW1iZXI7IGN1cnJlbnRQYWdlTnVtYmVyIDwgbnVtYmVyT2ZQYWdlczsgY3VycmVudFBhZ2VOdW1iZXIrKykge1xuICAgICAgICAgICAgY3VycmVudFBhZ2VOdW1iZXIrKztcbiAgICAgICAgICAgICgwLCBjb3JlXzEuZGVidWcpKGBGZXRjaGluZyBwYWdlICR7Y3VycmVudFBhZ2VOdW1iZXJ9IG9mIGFydGlmYWN0IGxpc3RgKTtcbiAgICAgICAgICAgIGNvbnN0IHsgZGF0YTogbGlzdEFydGlmYWN0UmVzcG9uc2UgfSA9IHlpZWxkIGdpdGh1Yi5yZXN0LmFjdGlvbnMubGlzdFdvcmtmbG93UnVuQXJ0aWZhY3RzKHtcbiAgICAgICAgICAgICAgICBvd25lcjogcmVwb3NpdG9yeU93bmVyLFxuICAgICAgICAgICAgICAgIHJlcG86IHJlcG9zaXRvcnlOYW1lLFxuICAgICAgICAgICAgICAgIHJ1bl9pZDogd29ya2Zsb3dSdW5JZCxcbiAgICAgICAgICAgICAgICBwZXJfcGFnZTogcGFnaW5hdGlvbkNvdW50LFxuICAgICAgICAgICAgICAgIHBhZ2U6IGN1cnJlbnRQYWdlTnVtYmVyXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgYXJ0aWZhY3Qgb2YgbGlzdEFydGlmYWN0UmVzcG9uc2UuYXJ0aWZhY3RzKSB7XG4gICAgICAgICAgICAgICAgYXJ0aWZhY3RzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBhcnRpZmFjdC5uYW1lLFxuICAgICAgICAgICAgICAgICAgICBpZDogYXJ0aWZhY3QuaWQsXG4gICAgICAgICAgICAgICAgICAgIHNpemU6IGFydGlmYWN0LnNpemVfaW5fYnl0ZXMsXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZWRBdDogYXJ0aWZhY3QuY3JlYXRlZF9hdFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBuZXcgRGF0ZShhcnRpZmFjdC5jcmVhdGVkX2F0KVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobGF0ZXN0KSB7XG4gICAgICAgICAgICBhcnRpZmFjdHMgPSBmaWx0ZXJMYXRlc3QoYXJ0aWZhY3RzKTtcbiAgICAgICAgfVxuICAgICAgICAoMCwgY29yZV8xLmluZm8pKGBGb3VuZCAke2FydGlmYWN0cy5sZW5ndGh9IGFydGlmYWN0KHMpYCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhcnRpZmFjdHNcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cbmV4cG9ydHMubGlzdEFydGlmYWN0c1B1YmxpYyA9IGxpc3RBcnRpZmFjdHNQdWJsaWM7XG5mdW5jdGlvbiBsaXN0QXJ0aWZhY3RzSW50ZXJuYWwobGF0ZXN0ID0gZmFsc2UpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBhcnRpZmFjdENsaWVudCA9ICgwLCBhcnRpZmFjdF90d2lycF9jbGllbnRfMS5pbnRlcm5hbEFydGlmYWN0VHdpcnBDbGllbnQpKCk7XG4gICAgICAgIGNvbnN0IHsgd29ya2Zsb3dSdW5CYWNrZW5kSWQsIHdvcmtmbG93Sm9iUnVuQmFja2VuZElkIH0gPSAoMCwgdXRpbF8xLmdldEJhY2tlbmRJZHNGcm9tVG9rZW4pKCk7XG4gICAgICAgIGNvbnN0IHJlcSA9IHtcbiAgICAgICAgICAgIHdvcmtmbG93UnVuQmFja2VuZElkLFxuICAgICAgICAgICAgd29ya2Zsb3dKb2JSdW5CYWNrZW5kSWRcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmVzID0geWllbGQgYXJ0aWZhY3RDbGllbnQuTGlzdEFydGlmYWN0cyhyZXEpO1xuICAgICAgICBsZXQgYXJ0aWZhY3RzID0gcmVzLmFydGlmYWN0cy5tYXAoYXJ0aWZhY3QgPT4gKHtcbiAgICAgICAgICAgIG5hbWU6IGFydGlmYWN0Lm5hbWUsXG4gICAgICAgICAgICBpZDogTnVtYmVyKGFydGlmYWN0LmRhdGFiYXNlSWQpLFxuICAgICAgICAgICAgc2l6ZTogTnVtYmVyKGFydGlmYWN0LnNpemUpLFxuICAgICAgICAgICAgY3JlYXRlZEF0OiBhcnRpZmFjdC5jcmVhdGVkQXRcbiAgICAgICAgICAgICAgICA/IGdlbmVyYXRlZF8xLlRpbWVzdGFtcC50b0RhdGUoYXJ0aWZhY3QuY3JlYXRlZEF0KVxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgIH0pKTtcbiAgICAgICAgaWYgKGxhdGVzdCkge1xuICAgICAgICAgICAgYXJ0aWZhY3RzID0gZmlsdGVyTGF0ZXN0KGFydGlmYWN0cyk7XG4gICAgICAgIH1cbiAgICAgICAgKDAsIGNvcmVfMS5pbmZvKShgRm91bmQgJHthcnRpZmFjdHMubGVuZ3RofSBhcnRpZmFjdChzKWApO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYXJ0aWZhY3RzXG4gICAgICAgIH07XG4gICAgfSk7XG59XG5leHBvcnRzLmxpc3RBcnRpZmFjdHNJbnRlcm5hbCA9IGxpc3RBcnRpZmFjdHNJbnRlcm5hbDtcbi8qKlxuICogRmlsdGVycyBhIGxpc3Qgb2YgYXJ0aWZhY3RzIHRvIG9ubHkgaW5jbHVkZSB0aGUgbGF0ZXN0IGFydGlmYWN0IGZvciBlYWNoIG5hbWVcbiAqIEBwYXJhbSBhcnRpZmFjdHMgVGhlIGFydGlmYWN0cyB0byBmaWx0ZXJcbiAqIEByZXR1cm5zIFRoZSBmaWx0ZXJlZCBsaXN0IG9mIGFydGlmYWN0c1xuICovXG5mdW5jdGlvbiBmaWx0ZXJMYXRlc3QoYXJ0aWZhY3RzKSB7XG4gICAgYXJ0aWZhY3RzLnNvcnQoKGEsIGIpID0+IGIuaWQgLSBhLmlkKTtcbiAgICBjb25zdCBsYXRlc3RBcnRpZmFjdHMgPSBbXTtcbiAgICBjb25zdCBzZWVuQXJ0aWZhY3ROYW1lcyA9IG5ldyBTZXQoKTtcbiAgICBmb3IgKGNvbnN0IGFydGlmYWN0IG9mIGFydGlmYWN0cykge1xuICAgICAgICBpZiAoIXNlZW5BcnRpZmFjdE5hbWVzLmhhcyhhcnRpZmFjdC5uYW1lKSkge1xuICAgICAgICAgICAgbGF0ZXN0QXJ0aWZhY3RzLnB1c2goYXJ0aWZhY3QpO1xuICAgICAgICAgICAgc2VlbkFydGlmYWN0TmFtZXMuYWRkKGFydGlmYWN0Lm5hbWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBsYXRlc3RBcnRpZmFjdHM7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1saXN0LWFydGlmYWN0cy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG52YXIgX19yZXN0ID0gKHRoaXMgJiYgdGhpcy5fX3Jlc3QpIHx8IGZ1bmN0aW9uIChzLCBlKSB7XG4gICAgdmFyIHQgPSB7fTtcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcbiAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XG4gICAgICAgIH1cbiAgICByZXR1cm4gdDtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkRlZmF1bHRBcnRpZmFjdENsaWVudCA9IHZvaWQgMDtcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCJAYWN0aW9ucy9jb3JlXCIpO1xuY29uc3QgY29uZmlnXzEgPSByZXF1aXJlKFwiLi9zaGFyZWQvY29uZmlnXCIpO1xuY29uc3QgdXBsb2FkX2FydGlmYWN0XzEgPSByZXF1aXJlKFwiLi91cGxvYWQvdXBsb2FkLWFydGlmYWN0XCIpO1xuY29uc3QgZG93bmxvYWRfYXJ0aWZhY3RfMSA9IHJlcXVpcmUoXCIuL2Rvd25sb2FkL2Rvd25sb2FkLWFydGlmYWN0XCIpO1xuY29uc3QgZGVsZXRlX2FydGlmYWN0XzEgPSByZXF1aXJlKFwiLi9kZWxldGUvZGVsZXRlLWFydGlmYWN0XCIpO1xuY29uc3QgZ2V0X2FydGlmYWN0XzEgPSByZXF1aXJlKFwiLi9maW5kL2dldC1hcnRpZmFjdFwiKTtcbmNvbnN0IGxpc3RfYXJ0aWZhY3RzXzEgPSByZXF1aXJlKFwiLi9maW5kL2xpc3QtYXJ0aWZhY3RzXCIpO1xuY29uc3QgZXJyb3JzXzEgPSByZXF1aXJlKFwiLi9zaGFyZWQvZXJyb3JzXCIpO1xuLyoqXG4gKiBUaGUgZGVmYXVsdCBhcnRpZmFjdCBjbGllbnQgdGhhdCBpcyB1c2VkIGJ5IHRoZSBhcnRpZmFjdCBhY3Rpb24ocykuXG4gKi9cbmNsYXNzIERlZmF1bHRBcnRpZmFjdENsaWVudCB7XG4gICAgdXBsb2FkQXJ0aWZhY3QobmFtZSwgZmlsZXMsIHJvb3REaXJlY3RvcnksIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKCgwLCBjb25maWdfMS5pc0doZXMpKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGVycm9yc18xLkdIRVNOb3RTdXBwb3J0ZWRFcnJvcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gKDAsIHVwbG9hZF9hcnRpZmFjdF8xLnVwbG9hZEFydGlmYWN0KShuYW1lLCBmaWxlcywgcm9vdERpcmVjdG9yeSwgb3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAoMCwgY29yZV8xLndhcm5pbmcpKGBBcnRpZmFjdCB1cGxvYWQgZmFpbGVkIHdpdGggZXJyb3I6ICR7ZXJyb3J9LlxuXG5FcnJvcnMgY2FuIGJlIHRlbXBvcmFyeSwgc28gcGxlYXNlIHRyeSBhZ2FpbiBhbmQgb3B0aW9uYWxseSBydW4gdGhlIGFjdGlvbiB3aXRoIGRlYnVnIG1vZGUgZW5hYmxlZCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cblxuSWYgdGhlIGVycm9yIHBlcnNpc3RzLCBwbGVhc2UgY2hlY2sgd2hldGhlciBBY3Rpb25zIGlzIG9wZXJhdGluZyBub3JtYWxseSBhdCBbaHR0cHM6Ly9naXRodWJzdGF0dXMuY29tXShodHRwczovL3d3dy5naXRodWJzdGF0dXMuY29tKS5gKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGRvd25sb2FkQXJ0aWZhY3QoYXJ0aWZhY3RJZCwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAoKDAsIGNvbmZpZ18xLmlzR2hlcykoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuR0hFU05vdFN1cHBvcnRlZEVycm9yKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuZmluZEJ5KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgZmluZEJ5OiB7IHJlcG9zaXRvcnlPd25lciwgcmVwb3NpdG9yeU5hbWUsIHRva2VuIH0gfSA9IG9wdGlvbnMsIGRvd25sb2FkT3B0aW9ucyA9IF9fcmVzdChvcHRpb25zLCBbXCJmaW5kQnlcIl0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIGRvd25sb2FkX2FydGlmYWN0XzEuZG93bmxvYWRBcnRpZmFjdFB1YmxpYykoYXJ0aWZhY3RJZCwgcmVwb3NpdG9yeU93bmVyLCByZXBvc2l0b3J5TmFtZSwgdG9rZW4sIGRvd25sb2FkT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAoMCwgZG93bmxvYWRfYXJ0aWZhY3RfMS5kb3dubG9hZEFydGlmYWN0SW50ZXJuYWwpKGFydGlmYWN0SWQsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgKDAsIGNvcmVfMS53YXJuaW5nKShgRG93bmxvYWQgQXJ0aWZhY3QgZmFpbGVkIHdpdGggZXJyb3I6ICR7ZXJyb3J9LlxuXG5FcnJvcnMgY2FuIGJlIHRlbXBvcmFyeSwgc28gcGxlYXNlIHRyeSBhZ2FpbiBhbmQgb3B0aW9uYWxseSBydW4gdGhlIGFjdGlvbiB3aXRoIGRlYnVnIG1vZGUgZW5hYmxlZCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cblxuSWYgdGhlIGVycm9yIHBlcnNpc3RzLCBwbGVhc2UgY2hlY2sgd2hldGhlciBBY3Rpb25zIGFuZCBBUEkgcmVxdWVzdHMgYXJlIG9wZXJhdGluZyBub3JtYWxseSBhdCBbaHR0cHM6Ly9naXRodWJzdGF0dXMuY29tXShodHRwczovL3d3dy5naXRodWJzdGF0dXMuY29tKS5gKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGxpc3RBcnRpZmFjdHMob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAoKDAsIGNvbmZpZ18xLmlzR2hlcykoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuR0hFU05vdFN1cHBvcnRlZEVycm9yKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuZmluZEJ5KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgZmluZEJ5OiB7IHdvcmtmbG93UnVuSWQsIHJlcG9zaXRvcnlPd25lciwgcmVwb3NpdG9yeU5hbWUsIHRva2VuIH0gfSA9IG9wdGlvbnM7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgbGlzdF9hcnRpZmFjdHNfMS5saXN0QXJ0aWZhY3RzUHVibGljKSh3b3JrZmxvd1J1bklkLCByZXBvc2l0b3J5T3duZXIsIHJlcG9zaXRvcnlOYW1lLCB0b2tlbiwgb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmxhdGVzdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAoMCwgbGlzdF9hcnRpZmFjdHNfMS5saXN0QXJ0aWZhY3RzSW50ZXJuYWwpKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5sYXRlc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgKDAsIGNvcmVfMS53YXJuaW5nKShgTGlzdGluZyBBcnRpZmFjdHMgZmFpbGVkIHdpdGggZXJyb3I6ICR7ZXJyb3J9LlxuXG5FcnJvcnMgY2FuIGJlIHRlbXBvcmFyeSwgc28gcGxlYXNlIHRyeSBhZ2FpbiBhbmQgb3B0aW9uYWxseSBydW4gdGhlIGFjdGlvbiB3aXRoIGRlYnVnIG1vZGUgZW5hYmxlZCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cblxuSWYgdGhlIGVycm9yIHBlcnNpc3RzLCBwbGVhc2UgY2hlY2sgd2hldGhlciBBY3Rpb25zIGFuZCBBUEkgcmVxdWVzdHMgYXJlIG9wZXJhdGluZyBub3JtYWxseSBhdCBbaHR0cHM6Ly9naXRodWJzdGF0dXMuY29tXShodHRwczovL3d3dy5naXRodWJzdGF0dXMuY29tKS5gKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGdldEFydGlmYWN0KGFydGlmYWN0TmFtZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAoKDAsIGNvbmZpZ18xLmlzR2hlcykoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuR0hFU05vdFN1cHBvcnRlZEVycm9yKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuZmluZEJ5KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgZmluZEJ5OiB7IHdvcmtmbG93UnVuSWQsIHJlcG9zaXRvcnlPd25lciwgcmVwb3NpdG9yeU5hbWUsIHRva2VuIH0gfSA9IG9wdGlvbnM7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgZ2V0X2FydGlmYWN0XzEuZ2V0QXJ0aWZhY3RQdWJsaWMpKGFydGlmYWN0TmFtZSwgd29ya2Zsb3dSdW5JZCwgcmVwb3NpdG9yeU93bmVyLCByZXBvc2l0b3J5TmFtZSwgdG9rZW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gKDAsIGdldF9hcnRpZmFjdF8xLmdldEFydGlmYWN0SW50ZXJuYWwpKGFydGlmYWN0TmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAoMCwgY29yZV8xLndhcm5pbmcpKGBHZXQgQXJ0aWZhY3QgZmFpbGVkIHdpdGggZXJyb3I6ICR7ZXJyb3J9LlxuXG5FcnJvcnMgY2FuIGJlIHRlbXBvcmFyeSwgc28gcGxlYXNlIHRyeSBhZ2FpbiBhbmQgb3B0aW9uYWxseSBydW4gdGhlIGFjdGlvbiB3aXRoIGRlYnVnIG1vZGUgZW5hYmxlZCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cblxuSWYgdGhlIGVycm9yIHBlcnNpc3RzLCBwbGVhc2UgY2hlY2sgd2hldGhlciBBY3Rpb25zIGFuZCBBUEkgcmVxdWVzdHMgYXJlIG9wZXJhdGluZyBub3JtYWxseSBhdCBbaHR0cHM6Ly9naXRodWJzdGF0dXMuY29tXShodHRwczovL3d3dy5naXRodWJzdGF0dXMuY29tKS5gKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGRlbGV0ZUFydGlmYWN0KGFydGlmYWN0TmFtZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAoKDAsIGNvbmZpZ18xLmlzR2hlcykoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuR0hFU05vdFN1cHBvcnRlZEVycm9yKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuZmluZEJ5KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgZmluZEJ5OiB7IHJlcG9zaXRvcnlPd25lciwgcmVwb3NpdG9yeU5hbWUsIHdvcmtmbG93UnVuSWQsIHRva2VuIH0gfSA9IG9wdGlvbnM7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgZGVsZXRlX2FydGlmYWN0XzEuZGVsZXRlQXJ0aWZhY3RQdWJsaWMpKGFydGlmYWN0TmFtZSwgd29ya2Zsb3dSdW5JZCwgcmVwb3NpdG9yeU93bmVyLCByZXBvc2l0b3J5TmFtZSwgdG9rZW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gKDAsIGRlbGV0ZV9hcnRpZmFjdF8xLmRlbGV0ZUFydGlmYWN0SW50ZXJuYWwpKGFydGlmYWN0TmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAoMCwgY29yZV8xLndhcm5pbmcpKGBEZWxldGUgQXJ0aWZhY3QgZmFpbGVkIHdpdGggZXJyb3I6ICR7ZXJyb3J9LlxuXG5FcnJvcnMgY2FuIGJlIHRlbXBvcmFyeSwgc28gcGxlYXNlIHRyeSBhZ2FpbiBhbmQgb3B0aW9uYWxseSBydW4gdGhlIGFjdGlvbiB3aXRoIGRlYnVnIG1vZGUgZW5hYmxlZCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cblxuSWYgdGhlIGVycm9yIHBlcnNpc3RzLCBwbGVhc2UgY2hlY2sgd2hldGhlciBBY3Rpb25zIGFuZCBBUEkgcmVxdWVzdHMgYXJlIG9wZXJhdGluZyBub3JtYWxseSBhdCBbaHR0cHM6Ly9naXRodWJzdGF0dXMuY29tXShodHRwczovL3d3dy5naXRodWJzdGF0dXMuY29tKS5gKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0cy5EZWZhdWx0QXJ0aWZhY3RDbGllbnQgPSBEZWZhdWx0QXJ0aWZhY3RDbGllbnQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jbGllbnQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWludGVyZmFjZXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19leHBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2V4cG9ydFN0YXIpIHx8IGZ1bmN0aW9uKG0sIGV4cG9ydHMpIHtcbiAgICBmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGV4cG9ydHMsIHApKSBfX2NyZWF0ZUJpbmRpbmcoZXhwb3J0cywgbSwgcCk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY2xpZW50XzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9jbGllbnRcIik7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vaW50ZXJuYWwvc2hhcmVkL2ludGVyZmFjZXNcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2ludGVybmFsL3NoYXJlZC9lcnJvcnNcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2ludGVybmFsL2NsaWVudFwiKSwgZXhwb3J0cyk7XG5jb25zdCBjbGllbnQgPSBuZXcgY2xpZW50XzEuRGVmYXVsdEFydGlmYWN0Q2xpZW50KCk7XG5leHBvcnRzLmRlZmF1bHQgPSBjbGllbnQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hcnRpZmFjdC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Db250ZXh0ID0gdm9pZCAwO1xuY29uc3QgZnNfMSA9IHJlcXVpcmUoXCJmc1wiKTtcbmNvbnN0IG9zXzEgPSByZXF1aXJlKFwib3NcIik7XG5jbGFzcyBDb250ZXh0IHtcbiAgICAvKipcbiAgICAgKiBIeWRyYXRlIHRoZSBjb250ZXh0IGZyb20gdGhlIGVudmlyb25tZW50XG4gICAgICovXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jO1xuICAgICAgICB0aGlzLnBheWxvYWQgPSB7fTtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52LkdJVEhVQl9FVkVOVF9QQVRIKSB7XG4gICAgICAgICAgICBpZiAoKDAsIGZzXzEuZXhpc3RzU3luYykocHJvY2Vzcy5lbnYuR0lUSFVCX0VWRU5UX1BBVEgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYXlsb2FkID0gSlNPTi5wYXJzZSgoMCwgZnNfMS5yZWFkRmlsZVN5bmMpKHByb2Nlc3MuZW52LkdJVEhVQl9FVkVOVF9QQVRILCB7IGVuY29kaW5nOiAndXRmOCcgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IHByb2Nlc3MuZW52LkdJVEhVQl9FVkVOVF9QQVRIO1xuICAgICAgICAgICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGBHSVRIVUJfRVZFTlRfUEFUSCAke3BhdGh9IGRvZXMgbm90IGV4aXN0JHtvc18xLkVPTH1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmV2ZW50TmFtZSA9IHByb2Nlc3MuZW52LkdJVEhVQl9FVkVOVF9OQU1FO1xuICAgICAgICB0aGlzLnNoYSA9IHByb2Nlc3MuZW52LkdJVEhVQl9TSEE7XG4gICAgICAgIHRoaXMucmVmID0gcHJvY2Vzcy5lbnYuR0lUSFVCX1JFRjtcbiAgICAgICAgdGhpcy53b3JrZmxvdyA9IHByb2Nlc3MuZW52LkdJVEhVQl9XT1JLRkxPVztcbiAgICAgICAgdGhpcy5hY3Rpb24gPSBwcm9jZXNzLmVudi5HSVRIVUJfQUNUSU9OO1xuICAgICAgICB0aGlzLmFjdG9yID0gcHJvY2Vzcy5lbnYuR0lUSFVCX0FDVE9SO1xuICAgICAgICB0aGlzLmpvYiA9IHByb2Nlc3MuZW52LkdJVEhVQl9KT0I7XG4gICAgICAgIHRoaXMucnVuTnVtYmVyID0gcGFyc2VJbnQocHJvY2Vzcy5lbnYuR0lUSFVCX1JVTl9OVU1CRVIsIDEwKTtcbiAgICAgICAgdGhpcy5ydW5JZCA9IHBhcnNlSW50KHByb2Nlc3MuZW52LkdJVEhVQl9SVU5fSUQsIDEwKTtcbiAgICAgICAgdGhpcy5hcGlVcmwgPSAoX2EgPSBwcm9jZXNzLmVudi5HSVRIVUJfQVBJX1VSTCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogYGh0dHBzOi8vYXBpLmdpdGh1Yi5jb21gO1xuICAgICAgICB0aGlzLnNlcnZlclVybCA9IChfYiA9IHByb2Nlc3MuZW52LkdJVEhVQl9TRVJWRVJfVVJMKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBgaHR0cHM6Ly9naXRodWIuY29tYDtcbiAgICAgICAgdGhpcy5ncmFwaHFsVXJsID1cbiAgICAgICAgICAgIChfYyA9IHByb2Nlc3MuZW52LkdJVEhVQl9HUkFQSFFMX1VSTCkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogYGh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vZ3JhcGhxbGA7XG4gICAgfVxuICAgIGdldCBpc3N1ZSgpIHtcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IHRoaXMucGF5bG9hZDtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5yZXBvKSwgeyBudW1iZXI6IChwYXlsb2FkLmlzc3VlIHx8IHBheWxvYWQucHVsbF9yZXF1ZXN0IHx8IHBheWxvYWQpLm51bWJlciB9KTtcbiAgICB9XG4gICAgZ2V0IHJlcG8oKSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5HSVRIVUJfUkVQT1NJVE9SWSkge1xuICAgICAgICAgICAgY29uc3QgW293bmVyLCByZXBvXSA9IHByb2Nlc3MuZW52LkdJVEhVQl9SRVBPU0lUT1JZLnNwbGl0KCcvJyk7XG4gICAgICAgICAgICByZXR1cm4geyBvd25lciwgcmVwbyB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnBheWxvYWQucmVwb3NpdG9yeSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBvd25lcjogdGhpcy5wYXlsb2FkLnJlcG9zaXRvcnkub3duZXIubG9naW4sXG4gICAgICAgICAgICAgICAgcmVwbzogdGhpcy5wYXlsb2FkLnJlcG9zaXRvcnkubmFtZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJjb250ZXh0LnJlcG8gcmVxdWlyZXMgYSBHSVRIVUJfUkVQT1NJVE9SWSBlbnZpcm9ubWVudCB2YXJpYWJsZSBsaWtlICdvd25lci9yZXBvJ1wiKTtcbiAgICB9XG59XG5leHBvcnRzLkNvbnRleHQgPSBDb250ZXh0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29udGV4dC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0QXBpQmFzZVVybCA9IGV4cG9ydHMuZ2V0UHJveHlGZXRjaCA9IGV4cG9ydHMuZ2V0UHJveHlBZ2VudERpc3BhdGNoZXIgPSBleHBvcnRzLmdldFByb3h5QWdlbnQgPSBleHBvcnRzLmdldEF1dGhTdHJpbmcgPSB2b2lkIDA7XG5jb25zdCBodHRwQ2xpZW50ID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJAYWN0aW9ucy9odHRwLWNsaWVudFwiKSk7XG5jb25zdCB1bmRpY2lfMSA9IHJlcXVpcmUoXCJ1bmRpY2lcIik7XG5mdW5jdGlvbiBnZXRBdXRoU3RyaW5nKHRva2VuLCBvcHRpb25zKSB7XG4gICAgaWYgKCF0b2tlbiAmJiAhb3B0aW9ucy5hdXRoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUGFyYW1ldGVyIHRva2VuIG9yIG9wdHMuYXV0aCBpcyByZXF1aXJlZCcpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0b2tlbiAmJiBvcHRpb25zLmF1dGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJhbWV0ZXJzIHRva2VuIGFuZCBvcHRzLmF1dGggbWF5IG5vdCBib3RoIGJlIHNwZWNpZmllZCcpO1xuICAgIH1cbiAgICByZXR1cm4gdHlwZW9mIG9wdGlvbnMuYXV0aCA9PT0gJ3N0cmluZycgPyBvcHRpb25zLmF1dGggOiBgdG9rZW4gJHt0b2tlbn1gO1xufVxuZXhwb3J0cy5nZXRBdXRoU3RyaW5nID0gZ2V0QXV0aFN0cmluZztcbmZ1bmN0aW9uIGdldFByb3h5QWdlbnQoZGVzdGluYXRpb25VcmwpIHtcbiAgICBjb25zdCBoYyA9IG5ldyBodHRwQ2xpZW50Lkh0dHBDbGllbnQoKTtcbiAgICByZXR1cm4gaGMuZ2V0QWdlbnQoZGVzdGluYXRpb25VcmwpO1xufVxuZXhwb3J0cy5nZXRQcm94eUFnZW50ID0gZ2V0UHJveHlBZ2VudDtcbmZ1bmN0aW9uIGdldFByb3h5QWdlbnREaXNwYXRjaGVyKGRlc3RpbmF0aW9uVXJsKSB7XG4gICAgY29uc3QgaGMgPSBuZXcgaHR0cENsaWVudC5IdHRwQ2xpZW50KCk7XG4gICAgcmV0dXJuIGhjLmdldEFnZW50RGlzcGF0Y2hlcihkZXN0aW5hdGlvblVybCk7XG59XG5leHBvcnRzLmdldFByb3h5QWdlbnREaXNwYXRjaGVyID0gZ2V0UHJveHlBZ2VudERpc3BhdGNoZXI7XG5mdW5jdGlvbiBnZXRQcm94eUZldGNoKGRlc3RpbmF0aW9uVXJsKSB7XG4gICAgY29uc3QgaHR0cERpc3BhdGNoZXIgPSBnZXRQcm94eUFnZW50RGlzcGF0Y2hlcihkZXN0aW5hdGlvblVybCk7XG4gICAgY29uc3QgcHJveHlGZXRjaCA9ICh1cmwsIG9wdHMpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgcmV0dXJuICgwLCB1bmRpY2lfMS5mZXRjaCkodXJsLCBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdHMpLCB7IGRpc3BhdGNoZXI6IGh0dHBEaXNwYXRjaGVyIH0pKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcHJveHlGZXRjaDtcbn1cbmV4cG9ydHMuZ2V0UHJveHlGZXRjaCA9IGdldFByb3h5RmV0Y2g7XG5mdW5jdGlvbiBnZXRBcGlCYXNlVXJsKCkge1xuICAgIHJldHVybiBwcm9jZXNzLmVudlsnR0lUSFVCX0FQSV9VUkwnXSB8fCAnaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbSc7XG59XG5leHBvcnRzLmdldEFwaUJhc2VVcmwgPSBnZXRBcGlCYXNlVXJsO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbHMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wRGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgX19nZXRPd25Qcm9wTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcztcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fZXhwb3J0ID0gKHRhcmdldCwgYWxsKSA9PiB7XG4gIGZvciAodmFyIG5hbWUgaW4gYWxsKVxuICAgIF9fZGVmUHJvcCh0YXJnZXQsIG5hbWUsIHsgZ2V0OiBhbGxbbmFtZV0sIGVudW1lcmFibGU6IHRydWUgfSk7XG59O1xudmFyIF9fY29weVByb3BzID0gKHRvLCBmcm9tLCBleGNlcHQsIGRlc2MpID0+IHtcbiAgaWYgKGZyb20gJiYgdHlwZW9mIGZyb20gPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGZyb20gPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGZvciAobGV0IGtleSBvZiBfX2dldE93blByb3BOYW1lcyhmcm9tKSlcbiAgICAgIGlmICghX19oYXNPd25Qcm9wLmNhbGwodG8sIGtleSkgJiYga2V5ICE9PSBleGNlcHQpXG4gICAgICAgIF9fZGVmUHJvcCh0bywga2V5LCB7IGdldDogKCkgPT4gZnJvbVtrZXldLCBlbnVtZXJhYmxlOiAhKGRlc2MgPSBfX2dldE93blByb3BEZXNjKGZyb20sIGtleSkpIHx8IGRlc2MuZW51bWVyYWJsZSB9KTtcbiAgfVxuICByZXR1cm4gdG87XG59O1xudmFyIF9fdG9Db21tb25KUyA9IChtb2QpID0+IF9fY29weVByb3BzKF9fZGVmUHJvcCh7fSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSksIG1vZCk7XG5cbi8vIHBrZy9kaXN0LXNyYy9pbmRleC5qc1xudmFyIGRpc3Rfc3JjX2V4cG9ydHMgPSB7fTtcbl9fZXhwb3J0KGRpc3Rfc3JjX2V4cG9ydHMsIHtcbiAgZW5kcG9pbnQ6ICgpID0+IGVuZHBvaW50XG59KTtcbm1vZHVsZS5leHBvcnRzID0gX190b0NvbW1vbkpTKGRpc3Rfc3JjX2V4cG9ydHMpO1xuXG4vLyBwa2cvZGlzdC1zcmMvZGVmYXVsdHMuanNcbnZhciBpbXBvcnRfdW5pdmVyc2FsX3VzZXJfYWdlbnQgPSByZXF1aXJlKFwidW5pdmVyc2FsLXVzZXItYWdlbnRcIik7XG5cbi8vIHBrZy9kaXN0LXNyYy92ZXJzaW9uLmpzXG52YXIgVkVSU0lPTiA9IFwiOS4wLjVcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL2RlZmF1bHRzLmpzXG52YXIgdXNlckFnZW50ID0gYG9jdG9raXQtZW5kcG9pbnQuanMvJHtWRVJTSU9OfSAkeygwLCBpbXBvcnRfdW5pdmVyc2FsX3VzZXJfYWdlbnQuZ2V0VXNlckFnZW50KSgpfWA7XG52YXIgREVGQVVMVFMgPSB7XG4gIG1ldGhvZDogXCJHRVRcIixcbiAgYmFzZVVybDogXCJodHRwczovL2FwaS5naXRodWIuY29tXCIsXG4gIGhlYWRlcnM6IHtcbiAgICBhY2NlcHQ6IFwiYXBwbGljYXRpb24vdm5kLmdpdGh1Yi52Mytqc29uXCIsXG4gICAgXCJ1c2VyLWFnZW50XCI6IHVzZXJBZ2VudFxuICB9LFxuICBtZWRpYVR5cGU6IHtcbiAgICBmb3JtYXQ6IFwiXCJcbiAgfVxufTtcblxuLy8gcGtnL2Rpc3Qtc3JjL3V0aWwvbG93ZXJjYXNlLWtleXMuanNcbmZ1bmN0aW9uIGxvd2VyY2FzZUtleXMob2JqZWN0KSB7XG4gIGlmICghb2JqZWN0KSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmplY3QpLnJlZHVjZSgobmV3T2JqLCBrZXkpID0+IHtcbiAgICBuZXdPYmpba2V5LnRvTG93ZXJDYXNlKCldID0gb2JqZWN0W2tleV07XG4gICAgcmV0dXJuIG5ld09iajtcbiAgfSwge30pO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC9pcy1wbGFpbi1vYmplY3QuanNcbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fCB2YWx1ZSA9PT0gbnVsbClcbiAgICByZXR1cm4gZmFsc2U7XG4gIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpICE9PSBcIltvYmplY3QgT2JqZWN0XVwiKVxuICAgIHJldHVybiBmYWxzZTtcbiAgY29uc3QgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpO1xuICBpZiAocHJvdG8gPT09IG51bGwpXG4gICAgcmV0dXJuIHRydWU7XG4gIGNvbnN0IEN0b3IgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocHJvdG8sIFwiY29uc3RydWN0b3JcIikgJiYgcHJvdG8uY29uc3RydWN0b3I7XG4gIHJldHVybiB0eXBlb2YgQ3RvciA9PT0gXCJmdW5jdGlvblwiICYmIEN0b3IgaW5zdGFuY2VvZiBDdG9yICYmIEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsKEN0b3IpID09PSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbCh2YWx1ZSk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy91dGlsL21lcmdlLWRlZXAuanNcbmZ1bmN0aW9uIG1lcmdlRGVlcChkZWZhdWx0cywgb3B0aW9ucykge1xuICBjb25zdCByZXN1bHQgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0cyk7XG4gIE9iamVjdC5rZXlzKG9wdGlvbnMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgIGlmIChpc1BsYWluT2JqZWN0KG9wdGlvbnNba2V5XSkpIHtcbiAgICAgIGlmICghKGtleSBpbiBkZWZhdWx0cykpXG4gICAgICAgIE9iamVjdC5hc3NpZ24ocmVzdWx0LCB7IFtrZXldOiBvcHRpb25zW2tleV0gfSk7XG4gICAgICBlbHNlXG4gICAgICAgIHJlc3VsdFtrZXldID0gbWVyZ2VEZWVwKGRlZmF1bHRzW2tleV0sIG9wdGlvbnNba2V5XSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIE9iamVjdC5hc3NpZ24ocmVzdWx0LCB7IFtrZXldOiBvcHRpb25zW2tleV0gfSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3V0aWwvcmVtb3ZlLXVuZGVmaW5lZC1wcm9wZXJ0aWVzLmpzXG5mdW5jdGlvbiByZW1vdmVVbmRlZmluZWRQcm9wZXJ0aWVzKG9iaikge1xuICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICBpZiAob2JqW2tleV0gPT09IHZvaWQgMCkge1xuICAgICAgZGVsZXRlIG9ialtrZXldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb2JqO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvbWVyZ2UuanNcbmZ1bmN0aW9uIG1lcmdlKGRlZmF1bHRzLCByb3V0ZSwgb3B0aW9ucykge1xuICBpZiAodHlwZW9mIHJvdXRlID09PSBcInN0cmluZ1wiKSB7XG4gICAgbGV0IFttZXRob2QsIHVybF0gPSByb3V0ZS5zcGxpdChcIiBcIik7XG4gICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24odXJsID8geyBtZXRob2QsIHVybCB9IDogeyB1cmw6IG1ldGhvZCB9LCBvcHRpb25zKTtcbiAgfSBlbHNlIHtcbiAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgcm91dGUpO1xuICB9XG4gIG9wdGlvbnMuaGVhZGVycyA9IGxvd2VyY2FzZUtleXMob3B0aW9ucy5oZWFkZXJzKTtcbiAgcmVtb3ZlVW5kZWZpbmVkUHJvcGVydGllcyhvcHRpb25zKTtcbiAgcmVtb3ZlVW5kZWZpbmVkUHJvcGVydGllcyhvcHRpb25zLmhlYWRlcnMpO1xuICBjb25zdCBtZXJnZWRPcHRpb25zID0gbWVyZ2VEZWVwKGRlZmF1bHRzIHx8IHt9LCBvcHRpb25zKTtcbiAgaWYgKG9wdGlvbnMudXJsID09PSBcIi9ncmFwaHFsXCIpIHtcbiAgICBpZiAoZGVmYXVsdHMgJiYgZGVmYXVsdHMubWVkaWFUeXBlLnByZXZpZXdzPy5sZW5ndGgpIHtcbiAgICAgIG1lcmdlZE9wdGlvbnMubWVkaWFUeXBlLnByZXZpZXdzID0gZGVmYXVsdHMubWVkaWFUeXBlLnByZXZpZXdzLmZpbHRlcihcbiAgICAgICAgKHByZXZpZXcpID0+ICFtZXJnZWRPcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cy5pbmNsdWRlcyhwcmV2aWV3KVxuICAgICAgKS5jb25jYXQobWVyZ2VkT3B0aW9ucy5tZWRpYVR5cGUucHJldmlld3MpO1xuICAgIH1cbiAgICBtZXJnZWRPcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cyA9IChtZXJnZWRPcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cyB8fCBbXSkubWFwKChwcmV2aWV3KSA9PiBwcmV2aWV3LnJlcGxhY2UoLy1wcmV2aWV3LywgXCJcIikpO1xuICB9XG4gIHJldHVybiBtZXJnZWRPcHRpb25zO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC9hZGQtcXVlcnktcGFyYW1ldGVycy5qc1xuZnVuY3Rpb24gYWRkUXVlcnlQYXJhbWV0ZXJzKHVybCwgcGFyYW1ldGVycykge1xuICBjb25zdCBzZXBhcmF0b3IgPSAvXFw/Ly50ZXN0KHVybCkgPyBcIiZcIiA6IFwiP1wiO1xuICBjb25zdCBuYW1lcyA9IE9iamVjdC5rZXlzKHBhcmFtZXRlcnMpO1xuICBpZiAobmFtZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuICByZXR1cm4gdXJsICsgc2VwYXJhdG9yICsgbmFtZXMubWFwKChuYW1lKSA9PiB7XG4gICAgaWYgKG5hbWUgPT09IFwicVwiKSB7XG4gICAgICByZXR1cm4gXCJxPVwiICsgcGFyYW1ldGVycy5xLnNwbGl0KFwiK1wiKS5tYXAoZW5jb2RlVVJJQ29tcG9uZW50KS5qb2luKFwiK1wiKTtcbiAgICB9XG4gICAgcmV0dXJuIGAke25hbWV9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtZXRlcnNbbmFtZV0pfWA7XG4gIH0pLmpvaW4oXCImXCIpO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC9leHRyYWN0LXVybC12YXJpYWJsZS1uYW1lcy5qc1xudmFyIHVybFZhcmlhYmxlUmVnZXggPSAvXFx7W159XStcXH0vZztcbmZ1bmN0aW9uIHJlbW92ZU5vbkNoYXJzKHZhcmlhYmxlTmFtZSkge1xuICByZXR1cm4gdmFyaWFibGVOYW1lLnJlcGxhY2UoL15cXFcrfFxcVyskL2csIFwiXCIpLnNwbGl0KC8sLyk7XG59XG5mdW5jdGlvbiBleHRyYWN0VXJsVmFyaWFibGVOYW1lcyh1cmwpIHtcbiAgY29uc3QgbWF0Y2hlcyA9IHVybC5tYXRjaCh1cmxWYXJpYWJsZVJlZ2V4KTtcbiAgaWYgKCFtYXRjaGVzKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHJldHVybiBtYXRjaGVzLm1hcChyZW1vdmVOb25DaGFycykucmVkdWNlKChhLCBiKSA9PiBhLmNvbmNhdChiKSwgW10pO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC9vbWl0LmpzXG5mdW5jdGlvbiBvbWl0KG9iamVjdCwga2V5c1RvT21pdCkge1xuICBjb25zdCByZXN1bHQgPSB7IF9fcHJvdG9fXzogbnVsbCB9O1xuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhvYmplY3QpKSB7XG4gICAgaWYgKGtleXNUb09taXQuaW5kZXhPZihrZXkpID09PSAtMSkge1xuICAgICAgcmVzdWx0W2tleV0gPSBvYmplY3Rba2V5XTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3V0aWwvdXJsLXRlbXBsYXRlLmpzXG5mdW5jdGlvbiBlbmNvZGVSZXNlcnZlZChzdHIpIHtcbiAgcmV0dXJuIHN0ci5zcGxpdCgvKCVbMC05QS1GYS1mXXsyfSkvZykubWFwKGZ1bmN0aW9uKHBhcnQpIHtcbiAgICBpZiAoIS8lWzAtOUEtRmEtZl0vLnRlc3QocGFydCkpIHtcbiAgICAgIHBhcnQgPSBlbmNvZGVVUkkocGFydCkucmVwbGFjZSgvJTVCL2csIFwiW1wiKS5yZXBsYWNlKC8lNUQvZywgXCJdXCIpO1xuICAgIH1cbiAgICByZXR1cm4gcGFydDtcbiAgfSkuam9pbihcIlwiKTtcbn1cbmZ1bmN0aW9uIGVuY29kZVVucmVzZXJ2ZWQoc3RyKSB7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3RyKS5yZXBsYWNlKC9bIScoKSpdL2csIGZ1bmN0aW9uKGMpIHtcbiAgICByZXR1cm4gXCIlXCIgKyBjLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7XG4gIH0pO1xufVxuZnVuY3Rpb24gZW5jb2RlVmFsdWUob3BlcmF0b3IsIHZhbHVlLCBrZXkpIHtcbiAgdmFsdWUgPSBvcGVyYXRvciA9PT0gXCIrXCIgfHwgb3BlcmF0b3IgPT09IFwiI1wiID8gZW5jb2RlUmVzZXJ2ZWQodmFsdWUpIDogZW5jb2RlVW5yZXNlcnZlZCh2YWx1ZSk7XG4gIGlmIChrZXkpIHtcbiAgICByZXR1cm4gZW5jb2RlVW5yZXNlcnZlZChrZXkpICsgXCI9XCIgKyB2YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cbmZ1bmN0aW9uIGlzRGVmaW5lZCh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IHZvaWQgMCAmJiB2YWx1ZSAhPT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzS2V5T3BlcmF0b3Iob3BlcmF0b3IpIHtcbiAgcmV0dXJuIG9wZXJhdG9yID09PSBcIjtcIiB8fCBvcGVyYXRvciA9PT0gXCImXCIgfHwgb3BlcmF0b3IgPT09IFwiP1wiO1xufVxuZnVuY3Rpb24gZ2V0VmFsdWVzKGNvbnRleHQsIG9wZXJhdG9yLCBrZXksIG1vZGlmaWVyKSB7XG4gIHZhciB2YWx1ZSA9IGNvbnRleHRba2V5XSwgcmVzdWx0ID0gW107XG4gIGlmIChpc0RlZmluZWQodmFsdWUpICYmIHZhbHVlICE9PSBcIlwiKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgdmFsdWUgPSB2YWx1ZS50b1N0cmluZygpO1xuICAgICAgaWYgKG1vZGlmaWVyICYmIG1vZGlmaWVyICE9PSBcIipcIikge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZygwLCBwYXJzZUludChtb2RpZmllciwgMTApKTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICBlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWUsIGlzS2V5T3BlcmF0b3Iob3BlcmF0b3IpID8ga2V5IDogXCJcIilcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChtb2RpZmllciA9PT0gXCIqXCIpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgdmFsdWUuZmlsdGVyKGlzRGVmaW5lZCkuZm9yRWFjaChmdW5jdGlvbih2YWx1ZTIpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICAgICAgICBlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWUyLCBpc0tleU9wZXJhdG9yKG9wZXJhdG9yKSA/IGtleSA6IFwiXCIpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIE9iamVjdC5rZXlzKHZhbHVlKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHtcbiAgICAgICAgICAgIGlmIChpc0RlZmluZWQodmFsdWVba10pKSB7XG4gICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGVuY29kZVZhbHVlKG9wZXJhdG9yLCB2YWx1ZVtrXSwgaykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB0bXAgPSBbXTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgdmFsdWUuZmlsdGVyKGlzRGVmaW5lZCkuZm9yRWFjaChmdW5jdGlvbih2YWx1ZTIpIHtcbiAgICAgICAgICAgIHRtcC5wdXNoKGVuY29kZVZhbHVlKG9wZXJhdG9yLCB2YWx1ZTIpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBPYmplY3Qua2V5cyh2YWx1ZSkuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgICAgICAgICBpZiAoaXNEZWZpbmVkKHZhbHVlW2tdKSkge1xuICAgICAgICAgICAgICB0bXAucHVzaChlbmNvZGVVbnJlc2VydmVkKGspKTtcbiAgICAgICAgICAgICAgdG1wLnB1c2goZW5jb2RlVmFsdWUob3BlcmF0b3IsIHZhbHVlW2tdLnRvU3RyaW5nKCkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNLZXlPcGVyYXRvcihvcGVyYXRvcikpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChlbmNvZGVVbnJlc2VydmVkKGtleSkgKyBcIj1cIiArIHRtcC5qb2luKFwiLFwiKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodG1wLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKHRtcC5qb2luKFwiLFwiKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKG9wZXJhdG9yID09PSBcIjtcIikge1xuICAgICAgaWYgKGlzRGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goZW5jb2RlVW5yZXNlcnZlZChrZXkpKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBcIlwiICYmIChvcGVyYXRvciA9PT0gXCImXCIgfHwgb3BlcmF0b3IgPT09IFwiP1wiKSkge1xuICAgICAgcmVzdWx0LnB1c2goZW5jb2RlVW5yZXNlcnZlZChrZXkpICsgXCI9XCIpO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFwiXCIpIHtcbiAgICAgIHJlc3VsdC5wdXNoKFwiXCIpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gcGFyc2VVcmwodGVtcGxhdGUpIHtcbiAgcmV0dXJuIHtcbiAgICBleHBhbmQ6IGV4cGFuZC5iaW5kKG51bGwsIHRlbXBsYXRlKVxuICB9O1xufVxuZnVuY3Rpb24gZXhwYW5kKHRlbXBsYXRlLCBjb250ZXh0KSB7XG4gIHZhciBvcGVyYXRvcnMgPSBbXCIrXCIsIFwiI1wiLCBcIi5cIiwgXCIvXCIsIFwiO1wiLCBcIj9cIiwgXCImXCJdO1xuICB0ZW1wbGF0ZSA9IHRlbXBsYXRlLnJlcGxhY2UoXG4gICAgL1xceyhbXlxce1xcfV0rKVxcfXwoW15cXHtcXH1dKykvZyxcbiAgICBmdW5jdGlvbihfLCBleHByZXNzaW9uLCBsaXRlcmFsKSB7XG4gICAgICBpZiAoZXhwcmVzc2lvbikge1xuICAgICAgICBsZXQgb3BlcmF0b3IgPSBcIlwiO1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBbXTtcbiAgICAgICAgaWYgKG9wZXJhdG9ycy5pbmRleE9mKGV4cHJlc3Npb24uY2hhckF0KDApKSAhPT0gLTEpIHtcbiAgICAgICAgICBvcGVyYXRvciA9IGV4cHJlc3Npb24uY2hhckF0KDApO1xuICAgICAgICAgIGV4cHJlc3Npb24gPSBleHByZXNzaW9uLnN1YnN0cigxKTtcbiAgICAgICAgfVxuICAgICAgICBleHByZXNzaW9uLnNwbGl0KC8sL2cpLmZvckVhY2goZnVuY3Rpb24odmFyaWFibGUpIHtcbiAgICAgICAgICB2YXIgdG1wID0gLyhbXjpcXCpdKikoPzo6KFxcZCspfChcXCopKT8vLmV4ZWModmFyaWFibGUpO1xuICAgICAgICAgIHZhbHVlcy5wdXNoKGdldFZhbHVlcyhjb250ZXh0LCBvcGVyYXRvciwgdG1wWzFdLCB0bXBbMl0gfHwgdG1wWzNdKSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAob3BlcmF0b3IgJiYgb3BlcmF0b3IgIT09IFwiK1wiKSB7XG4gICAgICAgICAgdmFyIHNlcGFyYXRvciA9IFwiLFwiO1xuICAgICAgICAgIGlmIChvcGVyYXRvciA9PT0gXCI/XCIpIHtcbiAgICAgICAgICAgIHNlcGFyYXRvciA9IFwiJlwiO1xuICAgICAgICAgIH0gZWxzZSBpZiAob3BlcmF0b3IgIT09IFwiI1wiKSB7XG4gICAgICAgICAgICBzZXBhcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuICh2YWx1ZXMubGVuZ3RoICE9PSAwID8gb3BlcmF0b3IgOiBcIlwiKSArIHZhbHVlcy5qb2luKHNlcGFyYXRvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlcy5qb2luKFwiLFwiKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGVuY29kZVJlc2VydmVkKGxpdGVyYWwpO1xuICAgICAgfVxuICAgIH1cbiAgKTtcbiAgaWYgKHRlbXBsYXRlID09PSBcIi9cIikge1xuICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdGVtcGxhdGUucmVwbGFjZSgvXFwvJC8sIFwiXCIpO1xuICB9XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9wYXJzZS5qc1xuZnVuY3Rpb24gcGFyc2Uob3B0aW9ucykge1xuICBsZXQgbWV0aG9kID0gb3B0aW9ucy5tZXRob2QudG9VcHBlckNhc2UoKTtcbiAgbGV0IHVybCA9IChvcHRpb25zLnVybCB8fCBcIi9cIikucmVwbGFjZSgvOihbYS16XVxcdyspL2csIFwieyQxfVwiKTtcbiAgbGV0IGhlYWRlcnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmhlYWRlcnMpO1xuICBsZXQgYm9keTtcbiAgbGV0IHBhcmFtZXRlcnMgPSBvbWl0KG9wdGlvbnMsIFtcbiAgICBcIm1ldGhvZFwiLFxuICAgIFwiYmFzZVVybFwiLFxuICAgIFwidXJsXCIsXG4gICAgXCJoZWFkZXJzXCIsXG4gICAgXCJyZXF1ZXN0XCIsXG4gICAgXCJtZWRpYVR5cGVcIlxuICBdKTtcbiAgY29uc3QgdXJsVmFyaWFibGVOYW1lcyA9IGV4dHJhY3RVcmxWYXJpYWJsZU5hbWVzKHVybCk7XG4gIHVybCA9IHBhcnNlVXJsKHVybCkuZXhwYW5kKHBhcmFtZXRlcnMpO1xuICBpZiAoIS9eaHR0cC8udGVzdCh1cmwpKSB7XG4gICAgdXJsID0gb3B0aW9ucy5iYXNlVXJsICsgdXJsO1xuICB9XG4gIGNvbnN0IG9taXR0ZWRQYXJhbWV0ZXJzID0gT2JqZWN0LmtleXMob3B0aW9ucykuZmlsdGVyKChvcHRpb24pID0+IHVybFZhcmlhYmxlTmFtZXMuaW5jbHVkZXMob3B0aW9uKSkuY29uY2F0KFwiYmFzZVVybFwiKTtcbiAgY29uc3QgcmVtYWluaW5nUGFyYW1ldGVycyA9IG9taXQocGFyYW1ldGVycywgb21pdHRlZFBhcmFtZXRlcnMpO1xuICBjb25zdCBpc0JpbmFyeVJlcXVlc3QgPSAvYXBwbGljYXRpb25cXC9vY3RldC1zdHJlYW0vaS50ZXN0KGhlYWRlcnMuYWNjZXB0KTtcbiAgaWYgKCFpc0JpbmFyeVJlcXVlc3QpIHtcbiAgICBpZiAob3B0aW9ucy5tZWRpYVR5cGUuZm9ybWF0KSB7XG4gICAgICBoZWFkZXJzLmFjY2VwdCA9IGhlYWRlcnMuYWNjZXB0LnNwbGl0KC8sLykubWFwKFxuICAgICAgICAoZm9ybWF0KSA9PiBmb3JtYXQucmVwbGFjZShcbiAgICAgICAgICAvYXBwbGljYXRpb25cXC92bmQoXFwuXFx3KykoXFwudjMpPyhcXC5cXHcrKT8oXFwranNvbik/JC8sXG4gICAgICAgICAgYGFwcGxpY2F0aW9uL3ZuZCQxJDIuJHtvcHRpb25zLm1lZGlhVHlwZS5mb3JtYXR9YFxuICAgICAgICApXG4gICAgICApLmpvaW4oXCIsXCIpO1xuICAgIH1cbiAgICBpZiAodXJsLmVuZHNXaXRoKFwiL2dyYXBocWxcIikpIHtcbiAgICAgIGlmIChvcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cz8ubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHByZXZpZXdzRnJvbUFjY2VwdEhlYWRlciA9IGhlYWRlcnMuYWNjZXB0Lm1hdGNoKC9bXFx3LV0rKD89LXByZXZpZXcpL2cpIHx8IFtdO1xuICAgICAgICBoZWFkZXJzLmFjY2VwdCA9IHByZXZpZXdzRnJvbUFjY2VwdEhlYWRlci5jb25jYXQob3B0aW9ucy5tZWRpYVR5cGUucHJldmlld3MpLm1hcCgocHJldmlldykgPT4ge1xuICAgICAgICAgIGNvbnN0IGZvcm1hdCA9IG9wdGlvbnMubWVkaWFUeXBlLmZvcm1hdCA/IGAuJHtvcHRpb25zLm1lZGlhVHlwZS5mb3JtYXR9YCA6IFwiK2pzb25cIjtcbiAgICAgICAgICByZXR1cm4gYGFwcGxpY2F0aW9uL3ZuZC5naXRodWIuJHtwcmV2aWV3fS1wcmV2aWV3JHtmb3JtYXR9YDtcbiAgICAgICAgfSkuam9pbihcIixcIik7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChbXCJHRVRcIiwgXCJIRUFEXCJdLmluY2x1ZGVzKG1ldGhvZCkpIHtcbiAgICB1cmwgPSBhZGRRdWVyeVBhcmFtZXRlcnModXJsLCByZW1haW5pbmdQYXJhbWV0ZXJzKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoXCJkYXRhXCIgaW4gcmVtYWluaW5nUGFyYW1ldGVycykge1xuICAgICAgYm9keSA9IHJlbWFpbmluZ1BhcmFtZXRlcnMuZGF0YTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKE9iamVjdC5rZXlzKHJlbWFpbmluZ1BhcmFtZXRlcnMpLmxlbmd0aCkge1xuICAgICAgICBib2R5ID0gcmVtYWluaW5nUGFyYW1ldGVycztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKCFoZWFkZXJzW1wiY29udGVudC10eXBlXCJdICYmIHR5cGVvZiBib2R5ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgaGVhZGVyc1tcImNvbnRlbnQtdHlwZVwiXSA9IFwiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOFwiO1xuICB9XG4gIGlmIChbXCJQQVRDSFwiLCBcIlBVVFwiXS5pbmNsdWRlcyhtZXRob2QpICYmIHR5cGVvZiBib2R5ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgYm9keSA9IFwiXCI7XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oXG4gICAgeyBtZXRob2QsIHVybCwgaGVhZGVycyB9LFxuICAgIHR5cGVvZiBib2R5ICE9PSBcInVuZGVmaW5lZFwiID8geyBib2R5IH0gOiBudWxsLFxuICAgIG9wdGlvbnMucmVxdWVzdCA/IHsgcmVxdWVzdDogb3B0aW9ucy5yZXF1ZXN0IH0gOiBudWxsXG4gICk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9lbmRwb2ludC13aXRoLWRlZmF1bHRzLmpzXG5mdW5jdGlvbiBlbmRwb2ludFdpdGhEZWZhdWx0cyhkZWZhdWx0cywgcm91dGUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHBhcnNlKG1lcmdlKGRlZmF1bHRzLCByb3V0ZSwgb3B0aW9ucykpO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvd2l0aC1kZWZhdWx0cy5qc1xuZnVuY3Rpb24gd2l0aERlZmF1bHRzKG9sZERlZmF1bHRzLCBuZXdEZWZhdWx0cykge1xuICBjb25zdCBERUZBVUxUUzIgPSBtZXJnZShvbGREZWZhdWx0cywgbmV3RGVmYXVsdHMpO1xuICBjb25zdCBlbmRwb2ludDIgPSBlbmRwb2ludFdpdGhEZWZhdWx0cy5iaW5kKG51bGwsIERFRkFVTFRTMik7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKGVuZHBvaW50Miwge1xuICAgIERFRkFVTFRTOiBERUZBVUxUUzIsXG4gICAgZGVmYXVsdHM6IHdpdGhEZWZhdWx0cy5iaW5kKG51bGwsIERFRkFVTFRTMiksXG4gICAgbWVyZ2U6IG1lcmdlLmJpbmQobnVsbCwgREVGQVVMVFMyKSxcbiAgICBwYXJzZVxuICB9KTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG52YXIgZW5kcG9pbnQgPSB3aXRoRGVmYXVsdHMobnVsbCwgREVGQVVMVFMpO1xuLy8gQW5ub3RhdGUgdGhlIENvbW1vbkpTIGV4cG9ydCBuYW1lcyBmb3IgRVNNIGltcG9ydCBpbiBub2RlOlxuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gIGVuZHBvaW50XG59KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGUgPSBPYmplY3QuY3JlYXRlO1xudmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BEZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBfX2dldE93blByb3BOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO1xudmFyIF9fZ2V0UHJvdG9PZiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fZXhwb3J0ID0gKHRhcmdldCwgYWxsKSA9PiB7XG4gIGZvciAodmFyIG5hbWUgaW4gYWxsKVxuICAgIF9fZGVmUHJvcCh0YXJnZXQsIG5hbWUsIHsgZ2V0OiBhbGxbbmFtZV0sIGVudW1lcmFibGU6IHRydWUgfSk7XG59O1xudmFyIF9fY29weVByb3BzID0gKHRvLCBmcm9tLCBleGNlcHQsIGRlc2MpID0+IHtcbiAgaWYgKGZyb20gJiYgdHlwZW9mIGZyb20gPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGZyb20gPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGZvciAobGV0IGtleSBvZiBfX2dldE93blByb3BOYW1lcyhmcm9tKSlcbiAgICAgIGlmICghX19oYXNPd25Qcm9wLmNhbGwodG8sIGtleSkgJiYga2V5ICE9PSBleGNlcHQpXG4gICAgICAgIF9fZGVmUHJvcCh0bywga2V5LCB7IGdldDogKCkgPT4gZnJvbVtrZXldLCBlbnVtZXJhYmxlOiAhKGRlc2MgPSBfX2dldE93blByb3BEZXNjKGZyb20sIGtleSkpIHx8IGRlc2MuZW51bWVyYWJsZSB9KTtcbiAgfVxuICByZXR1cm4gdG87XG59O1xudmFyIF9fdG9FU00gPSAobW9kLCBpc05vZGVNb2RlLCB0YXJnZXQpID0+ICh0YXJnZXQgPSBtb2QgIT0gbnVsbCA/IF9fY3JlYXRlKF9fZ2V0UHJvdG9PZihtb2QpKSA6IHt9LCBfX2NvcHlQcm9wcyhcbiAgLy8gSWYgdGhlIGltcG9ydGVyIGlzIGluIG5vZGUgY29tcGF0aWJpbGl0eSBtb2RlIG9yIHRoaXMgaXMgbm90IGFuIEVTTVxuICAvLyBmaWxlIHRoYXQgaGFzIGJlZW4gY29udmVydGVkIHRvIGEgQ29tbW9uSlMgZmlsZSB1c2luZyBhIEJhYmVsLVxuICAvLyBjb21wYXRpYmxlIHRyYW5zZm9ybSAoaS5lLiBcIl9fZXNNb2R1bGVcIiBoYXMgbm90IGJlZW4gc2V0KSwgdGhlbiBzZXRcbiAgLy8gXCJkZWZhdWx0XCIgdG8gdGhlIENvbW1vbkpTIFwibW9kdWxlLmV4cG9ydHNcIiBmb3Igbm9kZSBjb21wYXRpYmlsaXR5LlxuICBpc05vZGVNb2RlIHx8ICFtb2QgfHwgIW1vZC5fX2VzTW9kdWxlID8gX19kZWZQcm9wKHRhcmdldCwgXCJkZWZhdWx0XCIsIHsgdmFsdWU6IG1vZCwgZW51bWVyYWJsZTogdHJ1ZSB9KSA6IHRhcmdldCxcbiAgbW9kXG4pKTtcbnZhciBfX3RvQ29tbW9uSlMgPSAobW9kKSA9PiBfX2NvcHlQcm9wcyhfX2RlZlByb3Aoe30sIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pLCBtb2QpO1xuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbnZhciBkaXN0X3NyY19leHBvcnRzID0ge307XG5fX2V4cG9ydChkaXN0X3NyY19leHBvcnRzLCB7XG4gIFJlcXVlc3RFcnJvcjogKCkgPT4gUmVxdWVzdEVycm9yXG59KTtcbm1vZHVsZS5leHBvcnRzID0gX190b0NvbW1vbkpTKGRpc3Rfc3JjX2V4cG9ydHMpO1xudmFyIGltcG9ydF9kZXByZWNhdGlvbiA9IHJlcXVpcmUoXCJkZXByZWNhdGlvblwiKTtcbnZhciBpbXBvcnRfb25jZSA9IF9fdG9FU00ocmVxdWlyZShcIm9uY2VcIikpO1xudmFyIGxvZ09uY2VDb2RlID0gKDAsIGltcG9ydF9vbmNlLmRlZmF1bHQpKChkZXByZWNhdGlvbikgPT4gY29uc29sZS53YXJuKGRlcHJlY2F0aW9uKSk7XG52YXIgbG9nT25jZUhlYWRlcnMgPSAoMCwgaW1wb3J0X29uY2UuZGVmYXVsdCkoKGRlcHJlY2F0aW9uKSA9PiBjb25zb2xlLndhcm4oZGVwcmVjYXRpb24pKTtcbnZhciBSZXF1ZXN0RXJyb3IgPSBjbGFzcyBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZSwgc3RhdHVzQ29kZSwgb3B0aW9ucykge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gICAgfVxuICAgIHRoaXMubmFtZSA9IFwiSHR0cEVycm9yXCI7XG4gICAgdGhpcy5zdGF0dXMgPSBzdGF0dXNDb2RlO1xuICAgIGxldCBoZWFkZXJzO1xuICAgIGlmIChcImhlYWRlcnNcIiBpbiBvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLmhlYWRlcnMgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGhlYWRlcnMgPSBvcHRpb25zLmhlYWRlcnM7XG4gICAgfVxuICAgIGlmIChcInJlc3BvbnNlXCIgaW4gb3B0aW9ucykge1xuICAgICAgdGhpcy5yZXNwb25zZSA9IG9wdGlvbnMucmVzcG9uc2U7XG4gICAgICBoZWFkZXJzID0gb3B0aW9ucy5yZXNwb25zZS5oZWFkZXJzO1xuICAgIH1cbiAgICBjb25zdCByZXF1ZXN0Q29weSA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMucmVxdWVzdCk7XG4gICAgaWYgKG9wdGlvbnMucmVxdWVzdC5oZWFkZXJzLmF1dGhvcml6YXRpb24pIHtcbiAgICAgIHJlcXVlc3RDb3B5LmhlYWRlcnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLnJlcXVlc3QuaGVhZGVycywge1xuICAgICAgICBhdXRob3JpemF0aW9uOiBvcHRpb25zLnJlcXVlc3QuaGVhZGVycy5hdXRob3JpemF0aW9uLnJlcGxhY2UoXG4gICAgICAgICAgLyAuKiQvLFxuICAgICAgICAgIFwiIFtSRURBQ1RFRF1cIlxuICAgICAgICApXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmVxdWVzdENvcHkudXJsID0gcmVxdWVzdENvcHkudXJsLnJlcGxhY2UoL1xcYmNsaWVudF9zZWNyZXQ9XFx3Ky9nLCBcImNsaWVudF9zZWNyZXQ9W1JFREFDVEVEXVwiKS5yZXBsYWNlKC9cXGJhY2Nlc3NfdG9rZW49XFx3Ky9nLCBcImFjY2Vzc190b2tlbj1bUkVEQUNURURdXCIpO1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3RDb3B5O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImNvZGVcIiwge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBsb2dPbmNlQ29kZShcbiAgICAgICAgICBuZXcgaW1wb3J0X2RlcHJlY2F0aW9uLkRlcHJlY2F0aW9uKFxuICAgICAgICAgICAgXCJbQG9jdG9raXQvcmVxdWVzdC1lcnJvcl0gYGVycm9yLmNvZGVgIGlzIGRlcHJlY2F0ZWQsIHVzZSBgZXJyb3Iuc3RhdHVzYC5cIlxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHN0YXR1c0NvZGU7XG4gICAgICB9XG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwiaGVhZGVyc1wiLCB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGxvZ09uY2VIZWFkZXJzKFxuICAgICAgICAgIG5ldyBpbXBvcnRfZGVwcmVjYXRpb24uRGVwcmVjYXRpb24oXG4gICAgICAgICAgICBcIltAb2N0b2tpdC9yZXF1ZXN0LWVycm9yXSBgZXJyb3IuaGVhZGVyc2AgaXMgZGVwcmVjYXRlZCwgdXNlIGBlcnJvci5yZXNwb25zZS5oZWFkZXJzYC5cIlxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGhlYWRlcnMgfHwge307XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn07XG4vLyBBbm5vdGF0ZSB0aGUgQ29tbW9uSlMgZXhwb3J0IG5hbWVzIGZvciBFU00gaW1wb3J0IGluIG5vZGU6XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgUmVxdWVzdEVycm9yXG59KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIF9fZ2V0T3duUHJvcE5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XG52YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX2V4cG9ydCA9ICh0YXJnZXQsIGFsbCkgPT4ge1xuICBmb3IgKHZhciBuYW1lIGluIGFsbClcbiAgICBfX2RlZlByb3AodGFyZ2V0LCBuYW1lLCB7IGdldDogYWxsW25hbWVdLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xufTtcbnZhciBfX2NvcHlQcm9wcyA9ICh0bywgZnJvbSwgZXhjZXB0LCBkZXNjKSA9PiB7XG4gIGlmIChmcm9tICYmIHR5cGVvZiBmcm9tID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBmcm9tID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBmb3IgKGxldCBrZXkgb2YgX19nZXRPd25Qcm9wTmFtZXMoZnJvbSkpXG4gICAgICBpZiAoIV9faGFzT3duUHJvcC5jYWxsKHRvLCBrZXkpICYmIGtleSAhPT0gZXhjZXB0KVxuICAgICAgICBfX2RlZlByb3AodG8sIGtleSwgeyBnZXQ6ICgpID0+IGZyb21ba2V5XSwgZW51bWVyYWJsZTogIShkZXNjID0gX19nZXRPd25Qcm9wRGVzYyhmcm9tLCBrZXkpKSB8fCBkZXNjLmVudW1lcmFibGUgfSk7XG4gIH1cbiAgcmV0dXJuIHRvO1xufTtcbnZhciBfX3RvQ29tbW9uSlMgPSAobW9kKSA9PiBfX2NvcHlQcm9wcyhfX2RlZlByb3Aoe30sIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pLCBtb2QpO1xuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbnZhciBkaXN0X3NyY19leHBvcnRzID0ge307XG5fX2V4cG9ydChkaXN0X3NyY19leHBvcnRzLCB7XG4gIHJlcXVlc3Q6ICgpID0+IHJlcXVlc3Rcbn0pO1xubW9kdWxlLmV4cG9ydHMgPSBfX3RvQ29tbW9uSlMoZGlzdF9zcmNfZXhwb3J0cyk7XG52YXIgaW1wb3J0X2VuZHBvaW50ID0gcmVxdWlyZShcIkBvY3Rva2l0L2VuZHBvaW50XCIpO1xudmFyIGltcG9ydF91bml2ZXJzYWxfdXNlcl9hZ2VudCA9IHJlcXVpcmUoXCJ1bml2ZXJzYWwtdXNlci1hZ2VudFwiKTtcblxuLy8gcGtnL2Rpc3Qtc3JjL3ZlcnNpb24uanNcbnZhciBWRVJTSU9OID0gXCI4LjQuMFwiO1xuXG4vLyBwa2cvZGlzdC1zcmMvaXMtcGxhaW4tb2JqZWN0LmpzXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgfHwgdmFsdWUgPT09IG51bGwpXG4gICAgcmV0dXJuIGZhbHNlO1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSAhPT0gXCJbb2JqZWN0IE9iamVjdF1cIilcbiAgICByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKTtcbiAgaWYgKHByb3RvID09PSBudWxsKVxuICAgIHJldHVybiB0cnVlO1xuICBjb25zdCBDdG9yID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3RvLCBcImNvbnN0cnVjdG9yXCIpICYmIHByb3RvLmNvbnN0cnVjdG9yO1xuICByZXR1cm4gdHlwZW9mIEN0b3IgPT09IFwiZnVuY3Rpb25cIiAmJiBDdG9yIGluc3RhbmNlb2YgQ3RvciAmJiBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbChDdG9yKSA9PT0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGwodmFsdWUpO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvZmV0Y2gtd3JhcHBlci5qc1xudmFyIGltcG9ydF9yZXF1ZXN0X2Vycm9yID0gcmVxdWlyZShcIkBvY3Rva2l0L3JlcXVlc3QtZXJyb3JcIik7XG5cbi8vIHBrZy9kaXN0LXNyYy9nZXQtYnVmZmVyLXJlc3BvbnNlLmpzXG5mdW5jdGlvbiBnZXRCdWZmZXJSZXNwb25zZShyZXNwb25zZSkge1xuICByZXR1cm4gcmVzcG9uc2UuYXJyYXlCdWZmZXIoKTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2ZldGNoLXdyYXBwZXIuanNcbmZ1bmN0aW9uIGZldGNoV3JhcHBlcihyZXF1ZXN0T3B0aW9ucykge1xuICB2YXIgX2EsIF9iLCBfYywgX2Q7XG4gIGNvbnN0IGxvZyA9IHJlcXVlc3RPcHRpb25zLnJlcXVlc3QgJiYgcmVxdWVzdE9wdGlvbnMucmVxdWVzdC5sb2cgPyByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0LmxvZyA6IGNvbnNvbGU7XG4gIGNvbnN0IHBhcnNlU3VjY2Vzc1Jlc3BvbnNlQm9keSA9ICgoX2EgPSByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0KSA9PSBudWxsID8gdm9pZCAwIDogX2EucGFyc2VTdWNjZXNzUmVzcG9uc2VCb2R5KSAhPT0gZmFsc2U7XG4gIGlmIChpc1BsYWluT2JqZWN0KHJlcXVlc3RPcHRpb25zLmJvZHkpIHx8IEFycmF5LmlzQXJyYXkocmVxdWVzdE9wdGlvbnMuYm9keSkpIHtcbiAgICByZXF1ZXN0T3B0aW9ucy5ib2R5ID0gSlNPTi5zdHJpbmdpZnkocmVxdWVzdE9wdGlvbnMuYm9keSk7XG4gIH1cbiAgbGV0IGhlYWRlcnMgPSB7fTtcbiAgbGV0IHN0YXR1cztcbiAgbGV0IHVybDtcbiAgbGV0IHsgZmV0Y2ggfSA9IGdsb2JhbFRoaXM7XG4gIGlmICgoX2IgPSByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0KSA9PSBudWxsID8gdm9pZCAwIDogX2IuZmV0Y2gpIHtcbiAgICBmZXRjaCA9IHJlcXVlc3RPcHRpb25zLnJlcXVlc3QuZmV0Y2g7XG4gIH1cbiAgaWYgKCFmZXRjaCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiZmV0Y2ggaXMgbm90IHNldC4gUGxlYXNlIHBhc3MgYSBmZXRjaCBpbXBsZW1lbnRhdGlvbiBhcyBuZXcgT2N0b2tpdCh7IHJlcXVlc3Q6IHsgZmV0Y2ggfX0pLiBMZWFybiBtb3JlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9vY3Rva2l0L29jdG9raXQuanMvI2ZldGNoLW1pc3NpbmdcIlxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGZldGNoKHJlcXVlc3RPcHRpb25zLnVybCwge1xuICAgIG1ldGhvZDogcmVxdWVzdE9wdGlvbnMubWV0aG9kLFxuICAgIGJvZHk6IHJlcXVlc3RPcHRpb25zLmJvZHksXG4gICAgcmVkaXJlY3Q6IChfYyA9IHJlcXVlc3RPcHRpb25zLnJlcXVlc3QpID09IG51bGwgPyB2b2lkIDAgOiBfYy5yZWRpcmVjdCxcbiAgICBoZWFkZXJzOiByZXF1ZXN0T3B0aW9ucy5oZWFkZXJzLFxuICAgIHNpZ25hbDogKF9kID0gcmVxdWVzdE9wdGlvbnMucmVxdWVzdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9kLnNpZ25hbCxcbiAgICAvLyBkdXBsZXggbXVzdCBiZSBzZXQgaWYgcmVxdWVzdC5ib2R5IGlzIFJlYWRhYmxlU3RyZWFtIG9yIEFzeW5jIEl0ZXJhYmxlcy5cbiAgICAvLyBTZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1yZXF1ZXN0aW5pdC1kdXBsZXguXG4gICAgLi4ucmVxdWVzdE9wdGlvbnMuYm9keSAmJiB7IGR1cGxleDogXCJoYWxmXCIgfVxuICB9KS50aGVuKGFzeW5jIChyZXNwb25zZSkgPT4ge1xuICAgIHVybCA9IHJlc3BvbnNlLnVybDtcbiAgICBzdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgZm9yIChjb25zdCBrZXlBbmRWYWx1ZSBvZiByZXNwb25zZS5oZWFkZXJzKSB7XG4gICAgICBoZWFkZXJzW2tleUFuZFZhbHVlWzBdXSA9IGtleUFuZFZhbHVlWzFdO1xuICAgIH1cbiAgICBpZiAoXCJkZXByZWNhdGlvblwiIGluIGhlYWRlcnMpIHtcbiAgICAgIGNvbnN0IG1hdGNoZXMgPSBoZWFkZXJzLmxpbmsgJiYgaGVhZGVycy5saW5rLm1hdGNoKC88KFtePl0rKT47IHJlbD1cImRlcHJlY2F0aW9uXCIvKTtcbiAgICAgIGNvbnN0IGRlcHJlY2F0aW9uTGluayA9IG1hdGNoZXMgJiYgbWF0Y2hlcy5wb3AoKTtcbiAgICAgIGxvZy53YXJuKFxuICAgICAgICBgW0BvY3Rva2l0L3JlcXVlc3RdIFwiJHtyZXF1ZXN0T3B0aW9ucy5tZXRob2R9ICR7cmVxdWVzdE9wdGlvbnMudXJsfVwiIGlzIGRlcHJlY2F0ZWQuIEl0IGlzIHNjaGVkdWxlZCB0byBiZSByZW1vdmVkIG9uICR7aGVhZGVycy5zdW5zZXR9JHtkZXByZWNhdGlvbkxpbmsgPyBgLiBTZWUgJHtkZXByZWNhdGlvbkxpbmt9YCA6IFwiXCJ9YFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHN0YXR1cyA9PT0gMjA0IHx8IHN0YXR1cyA9PT0gMjA1KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChyZXF1ZXN0T3B0aW9ucy5tZXRob2QgPT09IFwiSEVBRFwiKSB7XG4gICAgICBpZiAoc3RhdHVzIDwgNDAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBpbXBvcnRfcmVxdWVzdF9lcnJvci5SZXF1ZXN0RXJyb3IocmVzcG9uc2Uuc3RhdHVzVGV4dCwgc3RhdHVzLCB7XG4gICAgICAgIHJlc3BvbnNlOiB7XG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIHN0YXR1cyxcbiAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgIGRhdGE6IHZvaWQgMFxuICAgICAgICB9LFxuICAgICAgICByZXF1ZXN0OiByZXF1ZXN0T3B0aW9uc1xuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChzdGF0dXMgPT09IDMwNCkge1xuICAgICAgdGhyb3cgbmV3IGltcG9ydF9yZXF1ZXN0X2Vycm9yLlJlcXVlc3RFcnJvcihcIk5vdCBtb2RpZmllZFwiLCBzdGF0dXMsIHtcbiAgICAgICAgcmVzcG9uc2U6IHtcbiAgICAgICAgICB1cmwsXG4gICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgZGF0YTogYXdhaXQgZ2V0UmVzcG9uc2VEYXRhKHJlc3BvbnNlKVxuICAgICAgICB9LFxuICAgICAgICByZXF1ZXN0OiByZXF1ZXN0T3B0aW9uc1xuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChzdGF0dXMgPj0gNDAwKSB7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ2V0UmVzcG9uc2VEYXRhKHJlc3BvbnNlKTtcbiAgICAgIGNvbnN0IGVycm9yID0gbmV3IGltcG9ydF9yZXF1ZXN0X2Vycm9yLlJlcXVlc3RFcnJvcih0b0Vycm9yTWVzc2FnZShkYXRhKSwgc3RhdHVzLCB7XG4gICAgICAgIHJlc3BvbnNlOiB7XG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIHN0YXR1cyxcbiAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgIGRhdGFcbiAgICAgICAgfSxcbiAgICAgICAgcmVxdWVzdDogcmVxdWVzdE9wdGlvbnNcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICAgIHJldHVybiBwYXJzZVN1Y2Nlc3NSZXNwb25zZUJvZHkgPyBhd2FpdCBnZXRSZXNwb25zZURhdGEocmVzcG9uc2UpIDogcmVzcG9uc2UuYm9keTtcbiAgfSkudGhlbigoZGF0YSkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXMsXG4gICAgICB1cmwsXG4gICAgICBoZWFkZXJzLFxuICAgICAgZGF0YVxuICAgIH07XG4gIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIGltcG9ydF9yZXF1ZXN0X2Vycm9yLlJlcXVlc3RFcnJvcilcbiAgICAgIHRocm93IGVycm9yO1xuICAgIGVsc2UgaWYgKGVycm9yLm5hbWUgPT09IFwiQWJvcnRFcnJvclwiKVxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgbGV0IG1lc3NhZ2UgPSBlcnJvci5tZXNzYWdlO1xuICAgIGlmIChlcnJvci5uYW1lID09PSBcIlR5cGVFcnJvclwiICYmIFwiY2F1c2VcIiBpbiBlcnJvcikge1xuICAgICAgaWYgKGVycm9yLmNhdXNlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgbWVzc2FnZSA9IGVycm9yLmNhdXNlLm1lc3NhZ2U7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBlcnJvci5jYXVzZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBtZXNzYWdlID0gZXJyb3IuY2F1c2U7XG4gICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyBpbXBvcnRfcmVxdWVzdF9lcnJvci5SZXF1ZXN0RXJyb3IobWVzc2FnZSwgNTAwLCB7XG4gICAgICByZXF1ZXN0OiByZXF1ZXN0T3B0aW9uc1xuICAgIH0pO1xuICB9KTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGdldFJlc3BvbnNlRGF0YShyZXNwb25zZSkge1xuICBjb25zdCBjb250ZW50VHlwZSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFwiY29udGVudC10eXBlXCIpO1xuICBpZiAoL2FwcGxpY2F0aW9uXFwvanNvbi8udGVzdChjb250ZW50VHlwZSkpIHtcbiAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpLmNhdGNoKCgpID0+IHJlc3BvbnNlLnRleHQoKSkuY2F0Y2goKCkgPT4gXCJcIik7XG4gIH1cbiAgaWYgKCFjb250ZW50VHlwZSB8fCAvXnRleHRcXC98Y2hhcnNldD11dGYtOCQvLnRlc3QoY29udGVudFR5cGUpKSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLnRleHQoKTtcbiAgfVxuICByZXR1cm4gZ2V0QnVmZmVyUmVzcG9uc2UocmVzcG9uc2UpO1xufVxuZnVuY3Rpb24gdG9FcnJvck1lc3NhZ2UoZGF0YSkge1xuICBpZiAodHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIpXG4gICAgcmV0dXJuIGRhdGE7XG4gIGxldCBzdWZmaXg7XG4gIGlmIChcImRvY3VtZW50YXRpb25fdXJsXCIgaW4gZGF0YSkge1xuICAgIHN1ZmZpeCA9IGAgLSAke2RhdGEuZG9jdW1lbnRhdGlvbl91cmx9YDtcbiAgfSBlbHNlIHtcbiAgICBzdWZmaXggPSBcIlwiO1xuICB9XG4gIGlmIChcIm1lc3NhZ2VcIiBpbiBkYXRhKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YS5lcnJvcnMpKSB7XG4gICAgICByZXR1cm4gYCR7ZGF0YS5tZXNzYWdlfTogJHtkYXRhLmVycm9ycy5tYXAoSlNPTi5zdHJpbmdpZnkpLmpvaW4oXCIsIFwiKX0ke3N1ZmZpeH1gO1xuICAgIH1cbiAgICByZXR1cm4gYCR7ZGF0YS5tZXNzYWdlfSR7c3VmZml4fWA7XG4gIH1cbiAgcmV0dXJuIGBVbmtub3duIGVycm9yOiAke0pTT04uc3RyaW5naWZ5KGRhdGEpfWA7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy93aXRoLWRlZmF1bHRzLmpzXG5mdW5jdGlvbiB3aXRoRGVmYXVsdHMob2xkRW5kcG9pbnQsIG5ld0RlZmF1bHRzKSB7XG4gIGNvbnN0IGVuZHBvaW50MiA9IG9sZEVuZHBvaW50LmRlZmF1bHRzKG5ld0RlZmF1bHRzKTtcbiAgY29uc3QgbmV3QXBpID0gZnVuY3Rpb24ocm91dGUsIHBhcmFtZXRlcnMpIHtcbiAgICBjb25zdCBlbmRwb2ludE9wdGlvbnMgPSBlbmRwb2ludDIubWVyZ2Uocm91dGUsIHBhcmFtZXRlcnMpO1xuICAgIGlmICghZW5kcG9pbnRPcHRpb25zLnJlcXVlc3QgfHwgIWVuZHBvaW50T3B0aW9ucy5yZXF1ZXN0Lmhvb2spIHtcbiAgICAgIHJldHVybiBmZXRjaFdyYXBwZXIoZW5kcG9pbnQyLnBhcnNlKGVuZHBvaW50T3B0aW9ucykpO1xuICAgIH1cbiAgICBjb25zdCByZXF1ZXN0MiA9IChyb3V0ZTIsIHBhcmFtZXRlcnMyKSA9PiB7XG4gICAgICByZXR1cm4gZmV0Y2hXcmFwcGVyKFxuICAgICAgICBlbmRwb2ludDIucGFyc2UoZW5kcG9pbnQyLm1lcmdlKHJvdXRlMiwgcGFyYW1ldGVyczIpKVxuICAgICAgKTtcbiAgICB9O1xuICAgIE9iamVjdC5hc3NpZ24ocmVxdWVzdDIsIHtcbiAgICAgIGVuZHBvaW50OiBlbmRwb2ludDIsXG4gICAgICBkZWZhdWx0czogd2l0aERlZmF1bHRzLmJpbmQobnVsbCwgZW5kcG9pbnQyKVxuICAgIH0pO1xuICAgIHJldHVybiBlbmRwb2ludE9wdGlvbnMucmVxdWVzdC5ob29rKHJlcXVlc3QyLCBlbmRwb2ludE9wdGlvbnMpO1xuICB9O1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihuZXdBcGksIHtcbiAgICBlbmRwb2ludDogZW5kcG9pbnQyLFxuICAgIGRlZmF1bHRzOiB3aXRoRGVmYXVsdHMuYmluZChudWxsLCBlbmRwb2ludDIpXG4gIH0pO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbnZhciByZXF1ZXN0ID0gd2l0aERlZmF1bHRzKGltcG9ydF9lbmRwb2ludC5lbmRwb2ludCwge1xuICBoZWFkZXJzOiB7XG4gICAgXCJ1c2VyLWFnZW50XCI6IGBvY3Rva2l0LXJlcXVlc3QuanMvJHtWRVJTSU9OfSAkeygwLCBpbXBvcnRfdW5pdmVyc2FsX3VzZXJfYWdlbnQuZ2V0VXNlckFnZW50KSgpfWBcbiAgfVxufSk7XG4vLyBBbm5vdGF0ZSB0aGUgQ29tbW9uSlMgZXhwb3J0IG5hbWVzIGZvciBFU00gaW1wb3J0IGluIG5vZGU6XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgcmVxdWVzdFxufSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BEZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBfX2dldE93blByb3BOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO1xudmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19leHBvcnQgPSAodGFyZ2V0LCBhbGwpID0+IHtcbiAgZm9yICh2YXIgbmFtZSBpbiBhbGwpXG4gICAgX19kZWZQcm9wKHRhcmdldCwgbmFtZSwgeyBnZXQ6IGFsbFtuYW1lXSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcbn07XG52YXIgX19jb3B5UHJvcHMgPSAodG8sIGZyb20sIGV4Y2VwdCwgZGVzYykgPT4ge1xuICBpZiAoZnJvbSAmJiB0eXBlb2YgZnJvbSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgZnJvbSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgZm9yIChsZXQga2V5IG9mIF9fZ2V0T3duUHJvcE5hbWVzKGZyb20pKVxuICAgICAgaWYgKCFfX2hhc093blByb3AuY2FsbCh0bywga2V5KSAmJiBrZXkgIT09IGV4Y2VwdClcbiAgICAgICAgX19kZWZQcm9wKHRvLCBrZXksIHsgZ2V0OiAoKSA9PiBmcm9tW2tleV0sIGVudW1lcmFibGU6ICEoZGVzYyA9IF9fZ2V0T3duUHJvcERlc2MoZnJvbSwga2V5KSkgfHwgZGVzYy5lbnVtZXJhYmxlIH0pO1xuICB9XG4gIHJldHVybiB0bztcbn07XG52YXIgX190b0NvbW1vbkpTID0gKG1vZCkgPT4gX19jb3B5UHJvcHMoX19kZWZQcm9wKHt9LCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KSwgbW9kKTtcblxuLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG52YXIgZGlzdF9zcmNfZXhwb3J0cyA9IHt9O1xuX19leHBvcnQoZGlzdF9zcmNfZXhwb3J0cywge1xuICBHcmFwaHFsUmVzcG9uc2VFcnJvcjogKCkgPT4gR3JhcGhxbFJlc3BvbnNlRXJyb3IsXG4gIGdyYXBocWw6ICgpID0+IGdyYXBocWwyLFxuICB3aXRoQ3VzdG9tUmVxdWVzdDogKCkgPT4gd2l0aEN1c3RvbVJlcXVlc3Rcbn0pO1xubW9kdWxlLmV4cG9ydHMgPSBfX3RvQ29tbW9uSlMoZGlzdF9zcmNfZXhwb3J0cyk7XG52YXIgaW1wb3J0X3JlcXVlc3QzID0gcmVxdWlyZShcIkBvY3Rva2l0L3JlcXVlc3RcIik7XG52YXIgaW1wb3J0X3VuaXZlcnNhbF91c2VyX2FnZW50ID0gcmVxdWlyZShcInVuaXZlcnNhbC11c2VyLWFnZW50XCIpO1xuXG4vLyBwa2cvZGlzdC1zcmMvdmVyc2lvbi5qc1xudmFyIFZFUlNJT04gPSBcIjcuMS4wXCI7XG5cbi8vIHBrZy9kaXN0LXNyYy93aXRoLWRlZmF1bHRzLmpzXG52YXIgaW1wb3J0X3JlcXVlc3QyID0gcmVxdWlyZShcIkBvY3Rva2l0L3JlcXVlc3RcIik7XG5cbi8vIHBrZy9kaXN0LXNyYy9ncmFwaHFsLmpzXG52YXIgaW1wb3J0X3JlcXVlc3QgPSByZXF1aXJlKFwiQG9jdG9raXQvcmVxdWVzdFwiKTtcblxuLy8gcGtnL2Rpc3Qtc3JjL2Vycm9yLmpzXG5mdW5jdGlvbiBfYnVpbGRNZXNzYWdlRm9yUmVzcG9uc2VFcnJvcnMoZGF0YSkge1xuICByZXR1cm4gYFJlcXVlc3QgZmFpbGVkIGR1ZSB0byBmb2xsb3dpbmcgcmVzcG9uc2UgZXJyb3JzOlxuYCArIGRhdGEuZXJyb3JzLm1hcCgoZSkgPT4gYCAtICR7ZS5tZXNzYWdlfWApLmpvaW4oXCJcXG5cIik7XG59XG52YXIgR3JhcGhxbFJlc3BvbnNlRXJyb3IgPSBjbGFzcyBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IocmVxdWVzdDIsIGhlYWRlcnMsIHJlc3BvbnNlKSB7XG4gICAgc3VwZXIoX2J1aWxkTWVzc2FnZUZvclJlc3BvbnNlRXJyb3JzKHJlc3BvbnNlKSk7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDI7XG4gICAgdGhpcy5oZWFkZXJzID0gaGVhZGVycztcbiAgICB0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gICAgdGhpcy5uYW1lID0gXCJHcmFwaHFsUmVzcG9uc2VFcnJvclwiO1xuICAgIHRoaXMuZXJyb3JzID0gcmVzcG9uc2UuZXJyb3JzO1xuICAgIHRoaXMuZGF0YSA9IHJlc3BvbnNlLmRhdGE7XG4gICAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgICB9XG4gIH1cbn07XG5cbi8vIHBrZy9kaXN0LXNyYy9ncmFwaHFsLmpzXG52YXIgTk9OX1ZBUklBQkxFX09QVElPTlMgPSBbXG4gIFwibWV0aG9kXCIsXG4gIFwiYmFzZVVybFwiLFxuICBcInVybFwiLFxuICBcImhlYWRlcnNcIixcbiAgXCJyZXF1ZXN0XCIsXG4gIFwicXVlcnlcIixcbiAgXCJtZWRpYVR5cGVcIlxuXTtcbnZhciBGT1JCSURERU5fVkFSSUFCTEVfT1BUSU9OUyA9IFtcInF1ZXJ5XCIsIFwibWV0aG9kXCIsIFwidXJsXCJdO1xudmFyIEdIRVNfVjNfU1VGRklYX1JFR0VYID0gL1xcL2FwaVxcL3YzXFwvPyQvO1xuZnVuY3Rpb24gZ3JhcGhxbChyZXF1ZXN0MiwgcXVlcnksIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIHF1ZXJ5ID09PSBcInN0cmluZ1wiICYmIFwicXVlcnlcIiBpbiBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXG4gICAgICAgIG5ldyBFcnJvcihgW0BvY3Rva2l0L2dyYXBocWxdIFwicXVlcnlcIiBjYW5ub3QgYmUgdXNlZCBhcyB2YXJpYWJsZSBuYW1lYClcbiAgICAgICk7XG4gICAgfVxuICAgIGZvciAoY29uc3Qga2V5IGluIG9wdGlvbnMpIHtcbiAgICAgIGlmICghRk9SQklEREVOX1ZBUklBQkxFX09QVElPTlMuaW5jbHVkZXMoa2V5KSlcbiAgICAgICAgY29udGludWU7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXG4gICAgICAgIG5ldyBFcnJvcihcbiAgICAgICAgICBgW0BvY3Rva2l0L2dyYXBocWxdIFwiJHtrZXl9XCIgY2Fubm90IGJlIHVzZWQgYXMgdmFyaWFibGUgbmFtZWBcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgcGFyc2VkT3B0aW9ucyA9IHR5cGVvZiBxdWVyeSA9PT0gXCJzdHJpbmdcIiA/IE9iamVjdC5hc3NpZ24oeyBxdWVyeSB9LCBvcHRpb25zKSA6IHF1ZXJ5O1xuICBjb25zdCByZXF1ZXN0T3B0aW9ucyA9IE9iamVjdC5rZXlzKFxuICAgIHBhcnNlZE9wdGlvbnNcbiAgKS5yZWR1Y2UoKHJlc3VsdCwga2V5KSA9PiB7XG4gICAgaWYgKE5PTl9WQVJJQUJMRV9PUFRJT05TLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gcGFyc2VkT3B0aW9uc1trZXldO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgaWYgKCFyZXN1bHQudmFyaWFibGVzKSB7XG4gICAgICByZXN1bHQudmFyaWFibGVzID0ge307XG4gICAgfVxuICAgIHJlc3VsdC52YXJpYWJsZXNba2V5XSA9IHBhcnNlZE9wdGlvbnNba2V5XTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9LCB7fSk7XG4gIGNvbnN0IGJhc2VVcmwgPSBwYXJzZWRPcHRpb25zLmJhc2VVcmwgfHwgcmVxdWVzdDIuZW5kcG9pbnQuREVGQVVMVFMuYmFzZVVybDtcbiAgaWYgKEdIRVNfVjNfU1VGRklYX1JFR0VYLnRlc3QoYmFzZVVybCkpIHtcbiAgICByZXF1ZXN0T3B0aW9ucy51cmwgPSBiYXNlVXJsLnJlcGxhY2UoR0hFU19WM19TVUZGSVhfUkVHRVgsIFwiL2FwaS9ncmFwaHFsXCIpO1xuICB9XG4gIHJldHVybiByZXF1ZXN0MihyZXF1ZXN0T3B0aW9ucykudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICBpZiAocmVzcG9uc2UuZGF0YS5lcnJvcnMpIHtcbiAgICAgIGNvbnN0IGhlYWRlcnMgPSB7fTtcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHJlc3BvbnNlLmhlYWRlcnMpKSB7XG4gICAgICAgIGhlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnNba2V5XTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBHcmFwaHFsUmVzcG9uc2VFcnJvcihcbiAgICAgICAgcmVxdWVzdE9wdGlvbnMsXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIHJlc3BvbnNlLmRhdGFcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiByZXNwb25zZS5kYXRhLmRhdGE7XG4gIH0pO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvd2l0aC1kZWZhdWx0cy5qc1xuZnVuY3Rpb24gd2l0aERlZmF1bHRzKHJlcXVlc3QyLCBuZXdEZWZhdWx0cykge1xuICBjb25zdCBuZXdSZXF1ZXN0ID0gcmVxdWVzdDIuZGVmYXVsdHMobmV3RGVmYXVsdHMpO1xuICBjb25zdCBuZXdBcGkgPSAocXVlcnksIG9wdGlvbnMpID0+IHtcbiAgICByZXR1cm4gZ3JhcGhxbChuZXdSZXF1ZXN0LCBxdWVyeSwgb3B0aW9ucyk7XG4gIH07XG4gIHJldHVybiBPYmplY3QuYXNzaWduKG5ld0FwaSwge1xuICAgIGRlZmF1bHRzOiB3aXRoRGVmYXVsdHMuYmluZChudWxsLCBuZXdSZXF1ZXN0KSxcbiAgICBlbmRwb2ludDogbmV3UmVxdWVzdC5lbmRwb2ludFxuICB9KTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG52YXIgZ3JhcGhxbDIgPSB3aXRoRGVmYXVsdHMoaW1wb3J0X3JlcXVlc3QzLnJlcXVlc3QsIHtcbiAgaGVhZGVyczoge1xuICAgIFwidXNlci1hZ2VudFwiOiBgb2N0b2tpdC1ncmFwaHFsLmpzLyR7VkVSU0lPTn0gJHsoMCwgaW1wb3J0X3VuaXZlcnNhbF91c2VyX2FnZW50LmdldFVzZXJBZ2VudCkoKX1gXG4gIH0sXG4gIG1ldGhvZDogXCJQT1NUXCIsXG4gIHVybDogXCIvZ3JhcGhxbFwiXG59KTtcbmZ1bmN0aW9uIHdpdGhDdXN0b21SZXF1ZXN0KGN1c3RvbVJlcXVlc3QpIHtcbiAgcmV0dXJuIHdpdGhEZWZhdWx0cyhjdXN0b21SZXF1ZXN0LCB7XG4gICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICB1cmw6IFwiL2dyYXBocWxcIlxuICB9KTtcbn1cbi8vIEFubm90YXRlIHRoZSBDb21tb25KUyBleHBvcnQgbmFtZXMgZm9yIEVTTSBpbXBvcnQgaW4gbm9kZTpcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICBHcmFwaHFsUmVzcG9uc2VFcnJvcixcbiAgZ3JhcGhxbCxcbiAgd2l0aEN1c3RvbVJlcXVlc3Rcbn0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wRGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgX19nZXRPd25Qcm9wTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcztcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fZXhwb3J0ID0gKHRhcmdldCwgYWxsKSA9PiB7XG4gIGZvciAodmFyIG5hbWUgaW4gYWxsKVxuICAgIF9fZGVmUHJvcCh0YXJnZXQsIG5hbWUsIHsgZ2V0OiBhbGxbbmFtZV0sIGVudW1lcmFibGU6IHRydWUgfSk7XG59O1xudmFyIF9fY29weVByb3BzID0gKHRvLCBmcm9tLCBleGNlcHQsIGRlc2MpID0+IHtcbiAgaWYgKGZyb20gJiYgdHlwZW9mIGZyb20gPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGZyb20gPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGZvciAobGV0IGtleSBvZiBfX2dldE93blByb3BOYW1lcyhmcm9tKSlcbiAgICAgIGlmICghX19oYXNPd25Qcm9wLmNhbGwodG8sIGtleSkgJiYga2V5ICE9PSBleGNlcHQpXG4gICAgICAgIF9fZGVmUHJvcCh0bywga2V5LCB7IGdldDogKCkgPT4gZnJvbVtrZXldLCBlbnVtZXJhYmxlOiAhKGRlc2MgPSBfX2dldE93blByb3BEZXNjKGZyb20sIGtleSkpIHx8IGRlc2MuZW51bWVyYWJsZSB9KTtcbiAgfVxuICByZXR1cm4gdG87XG59O1xudmFyIF9fdG9Db21tb25KUyA9IChtb2QpID0+IF9fY29weVByb3BzKF9fZGVmUHJvcCh7fSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSksIG1vZCk7XG5cbi8vIHBrZy9kaXN0LXNyYy9pbmRleC5qc1xudmFyIGRpc3Rfc3JjX2V4cG9ydHMgPSB7fTtcbl9fZXhwb3J0KGRpc3Rfc3JjX2V4cG9ydHMsIHtcbiAgY3JlYXRlVG9rZW5BdXRoOiAoKSA9PiBjcmVhdGVUb2tlbkF1dGhcbn0pO1xubW9kdWxlLmV4cG9ydHMgPSBfX3RvQ29tbW9uSlMoZGlzdF9zcmNfZXhwb3J0cyk7XG5cbi8vIHBrZy9kaXN0LXNyYy9hdXRoLmpzXG52YXIgUkVHRVhfSVNfSU5TVEFMTEFUSU9OX0xFR0FDWSA9IC9edjFcXC4vO1xudmFyIFJFR0VYX0lTX0lOU1RBTExBVElPTiA9IC9eZ2hzXy87XG52YXIgUkVHRVhfSVNfVVNFUl9UT19TRVJWRVIgPSAvXmdodV8vO1xuYXN5bmMgZnVuY3Rpb24gYXV0aCh0b2tlbikge1xuICBjb25zdCBpc0FwcCA9IHRva2VuLnNwbGl0KC9cXC4vKS5sZW5ndGggPT09IDM7XG4gIGNvbnN0IGlzSW5zdGFsbGF0aW9uID0gUkVHRVhfSVNfSU5TVEFMTEFUSU9OX0xFR0FDWS50ZXN0KHRva2VuKSB8fCBSRUdFWF9JU19JTlNUQUxMQVRJT04udGVzdCh0b2tlbik7XG4gIGNvbnN0IGlzVXNlclRvU2VydmVyID0gUkVHRVhfSVNfVVNFUl9UT19TRVJWRVIudGVzdCh0b2tlbik7XG4gIGNvbnN0IHRva2VuVHlwZSA9IGlzQXBwID8gXCJhcHBcIiA6IGlzSW5zdGFsbGF0aW9uID8gXCJpbnN0YWxsYXRpb25cIiA6IGlzVXNlclRvU2VydmVyID8gXCJ1c2VyLXRvLXNlcnZlclwiIDogXCJvYXV0aFwiO1xuICByZXR1cm4ge1xuICAgIHR5cGU6IFwidG9rZW5cIixcbiAgICB0b2tlbixcbiAgICB0b2tlblR5cGVcbiAgfTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3dpdGgtYXV0aG9yaXphdGlvbi1wcmVmaXguanNcbmZ1bmN0aW9uIHdpdGhBdXRob3JpemF0aW9uUHJlZml4KHRva2VuKSB7XG4gIGlmICh0b2tlbi5zcGxpdCgvXFwuLykubGVuZ3RoID09PSAzKSB7XG4gICAgcmV0dXJuIGBiZWFyZXIgJHt0b2tlbn1gO1xuICB9XG4gIHJldHVybiBgdG9rZW4gJHt0b2tlbn1gO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvaG9vay5qc1xuYXN5bmMgZnVuY3Rpb24gaG9vayh0b2tlbiwgcmVxdWVzdCwgcm91dGUsIHBhcmFtZXRlcnMpIHtcbiAgY29uc3QgZW5kcG9pbnQgPSByZXF1ZXN0LmVuZHBvaW50Lm1lcmdlKFxuICAgIHJvdXRlLFxuICAgIHBhcmFtZXRlcnNcbiAgKTtcbiAgZW5kcG9pbnQuaGVhZGVycy5hdXRob3JpemF0aW9uID0gd2l0aEF1dGhvcml6YXRpb25QcmVmaXgodG9rZW4pO1xuICByZXR1cm4gcmVxdWVzdChlbmRwb2ludCk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9pbmRleC5qc1xudmFyIGNyZWF0ZVRva2VuQXV0aCA9IGZ1bmN0aW9uIGNyZWF0ZVRva2VuQXV0aDIodG9rZW4pIHtcbiAgaWYgKCF0b2tlbikge1xuICAgIHRocm93IG5ldyBFcnJvcihcIltAb2N0b2tpdC9hdXRoLXRva2VuXSBObyB0b2tlbiBwYXNzZWQgdG8gY3JlYXRlVG9rZW5BdXRoXCIpO1xuICB9XG4gIGlmICh0eXBlb2YgdG9rZW4gIT09IFwic3RyaW5nXCIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcIltAb2N0b2tpdC9hdXRoLXRva2VuXSBUb2tlbiBwYXNzZWQgdG8gY3JlYXRlVG9rZW5BdXRoIGlzIG5vdCBhIHN0cmluZ1wiXG4gICAgKTtcbiAgfVxuICB0b2tlbiA9IHRva2VuLnJlcGxhY2UoL14odG9rZW58YmVhcmVyKSArL2ksIFwiXCIpO1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihhdXRoLmJpbmQobnVsbCwgdG9rZW4pLCB7XG4gICAgaG9vazogaG9vay5iaW5kKG51bGwsIHRva2VuKVxuICB9KTtcbn07XG4vLyBBbm5vdGF0ZSB0aGUgQ29tbW9uSlMgZXhwb3J0IG5hbWVzIGZvciBFU00gaW1wb3J0IGluIG5vZGU6XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgY3JlYXRlVG9rZW5BdXRoXG59KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIF9fZ2V0T3duUHJvcE5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XG52YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX2V4cG9ydCA9ICh0YXJnZXQsIGFsbCkgPT4ge1xuICBmb3IgKHZhciBuYW1lIGluIGFsbClcbiAgICBfX2RlZlByb3AodGFyZ2V0LCBuYW1lLCB7IGdldDogYWxsW25hbWVdLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xufTtcbnZhciBfX2NvcHlQcm9wcyA9ICh0bywgZnJvbSwgZXhjZXB0LCBkZXNjKSA9PiB7XG4gIGlmIChmcm9tICYmIHR5cGVvZiBmcm9tID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBmcm9tID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBmb3IgKGxldCBrZXkgb2YgX19nZXRPd25Qcm9wTmFtZXMoZnJvbSkpXG4gICAgICBpZiAoIV9faGFzT3duUHJvcC5jYWxsKHRvLCBrZXkpICYmIGtleSAhPT0gZXhjZXB0KVxuICAgICAgICBfX2RlZlByb3AodG8sIGtleSwgeyBnZXQ6ICgpID0+IGZyb21ba2V5XSwgZW51bWVyYWJsZTogIShkZXNjID0gX19nZXRPd25Qcm9wRGVzYyhmcm9tLCBrZXkpKSB8fCBkZXNjLmVudW1lcmFibGUgfSk7XG4gIH1cbiAgcmV0dXJuIHRvO1xufTtcbnZhciBfX3RvQ29tbW9uSlMgPSAobW9kKSA9PiBfX2NvcHlQcm9wcyhfX2RlZlByb3Aoe30sIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pLCBtb2QpO1xuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbnZhciBkaXN0X3NyY19leHBvcnRzID0ge307XG5fX2V4cG9ydChkaXN0X3NyY19leHBvcnRzLCB7XG4gIE9jdG9raXQ6ICgpID0+IE9jdG9raXRcbn0pO1xubW9kdWxlLmV4cG9ydHMgPSBfX3RvQ29tbW9uSlMoZGlzdF9zcmNfZXhwb3J0cyk7XG52YXIgaW1wb3J0X3VuaXZlcnNhbF91c2VyX2FnZW50ID0gcmVxdWlyZShcInVuaXZlcnNhbC11c2VyLWFnZW50XCIpO1xudmFyIGltcG9ydF9iZWZvcmVfYWZ0ZXJfaG9vayA9IHJlcXVpcmUoXCJiZWZvcmUtYWZ0ZXItaG9va1wiKTtcbnZhciBpbXBvcnRfcmVxdWVzdCA9IHJlcXVpcmUoXCJAb2N0b2tpdC9yZXF1ZXN0XCIpO1xudmFyIGltcG9ydF9ncmFwaHFsID0gcmVxdWlyZShcIkBvY3Rva2l0L2dyYXBocWxcIik7XG52YXIgaW1wb3J0X2F1dGhfdG9rZW4gPSByZXF1aXJlKFwiQG9jdG9raXQvYXV0aC10b2tlblwiKTtcblxuLy8gcGtnL2Rpc3Qtc3JjL3ZlcnNpb24uanNcbnZhciBWRVJTSU9OID0gXCI1LjIuMFwiO1xuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbnZhciBub29wID0gKCkgPT4ge1xufTtcbnZhciBjb25zb2xlV2FybiA9IGNvbnNvbGUud2Fybi5iaW5kKGNvbnNvbGUpO1xudmFyIGNvbnNvbGVFcnJvciA9IGNvbnNvbGUuZXJyb3IuYmluZChjb25zb2xlKTtcbnZhciB1c2VyQWdlbnRUcmFpbCA9IGBvY3Rva2l0LWNvcmUuanMvJHtWRVJTSU9OfSAkeygwLCBpbXBvcnRfdW5pdmVyc2FsX3VzZXJfYWdlbnQuZ2V0VXNlckFnZW50KSgpfWA7XG52YXIgT2N0b2tpdCA9IGNsYXNzIHtcbiAgc3RhdGljIHtcbiAgICB0aGlzLlZFUlNJT04gPSBWRVJTSU9OO1xuICB9XG4gIHN0YXRpYyBkZWZhdWx0cyhkZWZhdWx0cykge1xuICAgIGNvbnN0IE9jdG9raXRXaXRoRGVmYXVsdHMgPSBjbGFzcyBleHRlbmRzIHRoaXMge1xuICAgICAgY29uc3RydWN0b3IoLi4uYXJncykge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gYXJnc1swXSB8fCB7fTtcbiAgICAgICAgaWYgKHR5cGVvZiBkZWZhdWx0cyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgc3VwZXIoZGVmYXVsdHMob3B0aW9ucykpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzdXBlcihcbiAgICAgICAgICBPYmplY3QuYXNzaWduKFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgICBkZWZhdWx0cyxcbiAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICBvcHRpb25zLnVzZXJBZ2VudCAmJiBkZWZhdWx0cy51c2VyQWdlbnQgPyB7XG4gICAgICAgICAgICAgIHVzZXJBZ2VudDogYCR7b3B0aW9ucy51c2VyQWdlbnR9ICR7ZGVmYXVsdHMudXNlckFnZW50fWBcbiAgICAgICAgICAgIH0gOiBudWxsXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIE9jdG9raXRXaXRoRGVmYXVsdHM7XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLnBsdWdpbnMgPSBbXTtcbiAgfVxuICAvKipcbiAgICogQXR0YWNoIGEgcGx1Z2luIChvciBtYW55KSB0byB5b3VyIE9jdG9raXQgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGNvbnN0IEFQSSA9IE9jdG9raXQucGx1Z2luKHBsdWdpbjEsIHBsdWdpbjIsIHBsdWdpbjMsIC4uLilcbiAgICovXG4gIHN0YXRpYyBwbHVnaW4oLi4ubmV3UGx1Z2lucykge1xuICAgIGNvbnN0IGN1cnJlbnRQbHVnaW5zID0gdGhpcy5wbHVnaW5zO1xuICAgIGNvbnN0IE5ld09jdG9raXQgPSBjbGFzcyBleHRlbmRzIHRoaXMge1xuICAgICAgc3RhdGljIHtcbiAgICAgICAgdGhpcy5wbHVnaW5zID0gY3VycmVudFBsdWdpbnMuY29uY2F0KFxuICAgICAgICAgIG5ld1BsdWdpbnMuZmlsdGVyKChwbHVnaW4pID0+ICFjdXJyZW50UGx1Z2lucy5pbmNsdWRlcyhwbHVnaW4pKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIE5ld09jdG9raXQ7XG4gIH1cbiAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgaG9vayA9IG5ldyBpbXBvcnRfYmVmb3JlX2FmdGVyX2hvb2suQ29sbGVjdGlvbigpO1xuICAgIGNvbnN0IHJlcXVlc3REZWZhdWx0cyA9IHtcbiAgICAgIGJhc2VVcmw6IGltcG9ydF9yZXF1ZXN0LnJlcXVlc3QuZW5kcG9pbnQuREVGQVVMVFMuYmFzZVVybCxcbiAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgcmVxdWVzdDogT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5yZXF1ZXN0LCB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmUgaW50ZXJuYWwgdXNhZ2Ugb25seSwgbm8gbmVlZCB0byB0eXBlXG4gICAgICAgIGhvb2s6IGhvb2suYmluZChudWxsLCBcInJlcXVlc3RcIilcbiAgICAgIH0pLFxuICAgICAgbWVkaWFUeXBlOiB7XG4gICAgICAgIHByZXZpZXdzOiBbXSxcbiAgICAgICAgZm9ybWF0OiBcIlwiXG4gICAgICB9XG4gICAgfTtcbiAgICByZXF1ZXN0RGVmYXVsdHMuaGVhZGVyc1tcInVzZXItYWdlbnRcIl0gPSBvcHRpb25zLnVzZXJBZ2VudCA/IGAke29wdGlvbnMudXNlckFnZW50fSAke3VzZXJBZ2VudFRyYWlsfWAgOiB1c2VyQWdlbnRUcmFpbDtcbiAgICBpZiAob3B0aW9ucy5iYXNlVXJsKSB7XG4gICAgICByZXF1ZXN0RGVmYXVsdHMuYmFzZVVybCA9IG9wdGlvbnMuYmFzZVVybDtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMucHJldmlld3MpIHtcbiAgICAgIHJlcXVlc3REZWZhdWx0cy5tZWRpYVR5cGUucHJldmlld3MgPSBvcHRpb25zLnByZXZpZXdzO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy50aW1lWm9uZSkge1xuICAgICAgcmVxdWVzdERlZmF1bHRzLmhlYWRlcnNbXCJ0aW1lLXpvbmVcIl0gPSBvcHRpb25zLnRpbWVab25lO1xuICAgIH1cbiAgICB0aGlzLnJlcXVlc3QgPSBpbXBvcnRfcmVxdWVzdC5yZXF1ZXN0LmRlZmF1bHRzKHJlcXVlc3REZWZhdWx0cyk7XG4gICAgdGhpcy5ncmFwaHFsID0gKDAsIGltcG9ydF9ncmFwaHFsLndpdGhDdXN0b21SZXF1ZXN0KSh0aGlzLnJlcXVlc3QpLmRlZmF1bHRzKHJlcXVlc3REZWZhdWx0cyk7XG4gICAgdGhpcy5sb2cgPSBPYmplY3QuYXNzaWduKFxuICAgICAge1xuICAgICAgICBkZWJ1Zzogbm9vcCxcbiAgICAgICAgaW5mbzogbm9vcCxcbiAgICAgICAgd2FybjogY29uc29sZVdhcm4sXG4gICAgICAgIGVycm9yOiBjb25zb2xlRXJyb3JcbiAgICAgIH0sXG4gICAgICBvcHRpb25zLmxvZ1xuICAgICk7XG4gICAgdGhpcy5ob29rID0gaG9vaztcbiAgICBpZiAoIW9wdGlvbnMuYXV0aFN0cmF0ZWd5KSB7XG4gICAgICBpZiAoIW9wdGlvbnMuYXV0aCkge1xuICAgICAgICB0aGlzLmF1dGggPSBhc3luYyAoKSA9PiAoe1xuICAgICAgICAgIHR5cGU6IFwidW5hdXRoZW50aWNhdGVkXCJcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBhdXRoID0gKDAsIGltcG9ydF9hdXRoX3Rva2VuLmNyZWF0ZVRva2VuQXV0aCkob3B0aW9ucy5hdXRoKTtcbiAgICAgICAgaG9vay53cmFwKFwicmVxdWVzdFwiLCBhdXRoLmhvb2spO1xuICAgICAgICB0aGlzLmF1dGggPSBhdXRoO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB7IGF1dGhTdHJhdGVneSwgLi4ub3RoZXJPcHRpb25zIH0gPSBvcHRpb25zO1xuICAgICAgY29uc3QgYXV0aCA9IGF1dGhTdHJhdGVneShcbiAgICAgICAgT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICB7XG4gICAgICAgICAgICByZXF1ZXN0OiB0aGlzLnJlcXVlc3QsXG4gICAgICAgICAgICBsb2c6IHRoaXMubG9nLFxuICAgICAgICAgICAgLy8gd2UgcGFzcyB0aGUgY3VycmVudCBvY3Rva2l0IGluc3RhbmNlIGFzIHdlbGwgYXMgaXRzIGNvbnN0cnVjdG9yIG9wdGlvbnNcbiAgICAgICAgICAgIC8vIHRvIGFsbG93IGZvciBhdXRoZW50aWNhdGlvbiBzdHJhdGVnaWVzIHRoYXQgcmV0dXJuIGEgbmV3IG9jdG9raXQgaW5zdGFuY2VcbiAgICAgICAgICAgIC8vIHRoYXQgc2hhcmVzIHRoZSBzYW1lIGludGVybmFsIHN0YXRlIGFzIHRoZSBjdXJyZW50IG9uZS4gVGhlIG9yaWdpbmFsXG4gICAgICAgICAgICAvLyByZXF1aXJlbWVudCBmb3IgdGhpcyB3YXMgdGhlIFwiZXZlbnQtb2N0b2tpdFwiIGF1dGhlbnRpY2F0aW9uIHN0cmF0ZWd5XG4gICAgICAgICAgICAvLyBvZiBodHRwczovL2dpdGh1Yi5jb20vcHJvYm90L29jdG9raXQtYXV0aC1wcm9ib3QuXG4gICAgICAgICAgICBvY3Rva2l0OiB0aGlzLFxuICAgICAgICAgICAgb2N0b2tpdE9wdGlvbnM6IG90aGVyT3B0aW9uc1xuICAgICAgICAgIH0sXG4gICAgICAgICAgb3B0aW9ucy5hdXRoXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICBob29rLndyYXAoXCJyZXF1ZXN0XCIsIGF1dGguaG9vayk7XG4gICAgICB0aGlzLmF1dGggPSBhdXRoO1xuICAgIH1cbiAgICBjb25zdCBjbGFzc0NvbnN0cnVjdG9yID0gdGhpcy5jb25zdHJ1Y3RvcjtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNsYXNzQ29uc3RydWN0b3IucGx1Z2lucy5sZW5ndGg7ICsraSkge1xuICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBjbGFzc0NvbnN0cnVjdG9yLnBsdWdpbnNbaV0odGhpcywgb3B0aW9ucykpO1xuICAgIH1cbiAgfVxufTtcbi8vIEFubm90YXRlIHRoZSBDb21tb25KUyBleHBvcnQgbmFtZXMgZm9yIEVTTSBpbXBvcnQgaW4gbm9kZTpcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICBPY3Rva2l0XG59KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIF9fZ2V0T3duUHJvcE5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XG52YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX2V4cG9ydCA9ICh0YXJnZXQsIGFsbCkgPT4ge1xuICBmb3IgKHZhciBuYW1lIGluIGFsbClcbiAgICBfX2RlZlByb3AodGFyZ2V0LCBuYW1lLCB7IGdldDogYWxsW25hbWVdLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xufTtcbnZhciBfX2NvcHlQcm9wcyA9ICh0bywgZnJvbSwgZXhjZXB0LCBkZXNjKSA9PiB7XG4gIGlmIChmcm9tICYmIHR5cGVvZiBmcm9tID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBmcm9tID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBmb3IgKGxldCBrZXkgb2YgX19nZXRPd25Qcm9wTmFtZXMoZnJvbSkpXG4gICAgICBpZiAoIV9faGFzT3duUHJvcC5jYWxsKHRvLCBrZXkpICYmIGtleSAhPT0gZXhjZXB0KVxuICAgICAgICBfX2RlZlByb3AodG8sIGtleSwgeyBnZXQ6ICgpID0+IGZyb21ba2V5XSwgZW51bWVyYWJsZTogIShkZXNjID0gX19nZXRPd25Qcm9wRGVzYyhmcm9tLCBrZXkpKSB8fCBkZXNjLmVudW1lcmFibGUgfSk7XG4gIH1cbiAgcmV0dXJuIHRvO1xufTtcbnZhciBfX3RvQ29tbW9uSlMgPSAobW9kKSA9PiBfX2NvcHlQcm9wcyhfX2RlZlByb3Aoe30sIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pLCBtb2QpO1xuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbnZhciBkaXN0X3NyY19leHBvcnRzID0ge307XG5fX2V4cG9ydChkaXN0X3NyY19leHBvcnRzLCB7XG4gIGxlZ2FjeVJlc3RFbmRwb2ludE1ldGhvZHM6ICgpID0+IGxlZ2FjeVJlc3RFbmRwb2ludE1ldGhvZHMsXG4gIHJlc3RFbmRwb2ludE1ldGhvZHM6ICgpID0+IHJlc3RFbmRwb2ludE1ldGhvZHNcbn0pO1xubW9kdWxlLmV4cG9ydHMgPSBfX3RvQ29tbW9uSlMoZGlzdF9zcmNfZXhwb3J0cyk7XG5cbi8vIHBrZy9kaXN0LXNyYy92ZXJzaW9uLmpzXG52YXIgVkVSU0lPTiA9IFwiMTAuNC4xXCI7XG5cbi8vIHBrZy9kaXN0LXNyYy9nZW5lcmF0ZWQvZW5kcG9pbnRzLmpzXG52YXIgRW5kcG9pbnRzID0ge1xuICBhY3Rpb25zOiB7XG4gICAgYWRkQ3VzdG9tTGFiZWxzVG9TZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVsc1wiXG4gICAgXSxcbiAgICBhZGRDdXN0b21MYWJlbHNUb1NlbGZIb3N0ZWRSdW5uZXJGb3JSZXBvOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIlxuICAgIF0sXG4gICAgYWRkU2VsZWN0ZWRSZXBvVG9PcmdTZWNyZXQ6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIlxuICAgIF0sXG4gICAgYWRkU2VsZWN0ZWRSZXBvVG9PcmdWYXJpYWJsZTogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIlxuICAgIF0sXG4gICAgYXBwcm92ZVdvcmtmbG93UnVuOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hcHByb3ZlXCJcbiAgICBdLFxuICAgIGNhbmNlbFdvcmtmbG93UnVuOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9jYW5jZWxcIlxuICAgIF0sXG4gICAgY3JlYXRlRW52aXJvbm1lbnRWYXJpYWJsZTogW1xuICAgICAgXCJQT1NUIC9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vdmFyaWFibGVzXCJcbiAgICBdLFxuICAgIGNyZWF0ZU9yVXBkYXRlRW52aXJvbm1lbnRTZWNyZXQ6IFtcbiAgICAgIFwiUFVUIC9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vc2VjcmV0cy97c2VjcmV0X25hbWV9XCJcbiAgICBdLFxuICAgIGNyZWF0ZU9yVXBkYXRlT3JnU2VjcmV0OiBbXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgY3JlYXRlT3JVcGRhdGVSZXBvU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIlxuICAgIF0sXG4gICAgY3JlYXRlT3JnVmFyaWFibGU6IFtcIlBPU1QgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXNcIl0sXG4gICAgY3JlYXRlUmVnaXN0cmF0aW9uVG9rZW5Gb3JPcmc6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMvcmVnaXN0cmF0aW9uLXRva2VuXCJcbiAgICBdLFxuICAgIGNyZWF0ZVJlZ2lzdHJhdGlvblRva2VuRm9yUmVwbzogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMvcmVnaXN0cmF0aW9uLXRva2VuXCJcbiAgICBdLFxuICAgIGNyZWF0ZVJlbW92ZVRva2VuRm9yT3JnOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy9yZW1vdmUtdG9rZW5cIl0sXG4gICAgY3JlYXRlUmVtb3ZlVG9rZW5Gb3JSZXBvOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy9yZW1vdmUtdG9rZW5cIlxuICAgIF0sXG4gICAgY3JlYXRlUmVwb1ZhcmlhYmxlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3ZhcmlhYmxlc1wiXSxcbiAgICBjcmVhdGVXb3JrZmxvd0Rpc3BhdGNoOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvd29ya2Zsb3dzL3t3b3JrZmxvd19pZH0vZGlzcGF0Y2hlc1wiXG4gICAgXSxcbiAgICBkZWxldGVBY3Rpb25zQ2FjaGVCeUlkOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9jYWNoZXMve2NhY2hlX2lkfVwiXG4gICAgXSxcbiAgICBkZWxldGVBY3Rpb25zQ2FjaGVCeUtleTogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvY2FjaGVzez9rZXkscmVmfVwiXG4gICAgXSxcbiAgICBkZWxldGVBcnRpZmFjdDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvYXJ0aWZhY3RzL3thcnRpZmFjdF9pZH1cIlxuICAgIF0sXG4gICAgZGVsZXRlRW52aXJvbm1lbnRTZWNyZXQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vc2VjcmV0cy97c2VjcmV0X25hbWV9XCJcbiAgICBdLFxuICAgIGRlbGV0ZUVudmlyb25tZW50VmFyaWFibGU6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vdmFyaWFibGVzL3tuYW1lfVwiXG4gICAgXSxcbiAgICBkZWxldGVPcmdTZWNyZXQ6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBkZWxldGVPcmdWYXJpYWJsZTogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2FjdGlvbnMvdmFyaWFibGVzL3tuYW1lfVwiXSxcbiAgICBkZWxldGVSZXBvU2VjcmV0OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIlxuICAgIF0sXG4gICAgZGVsZXRlUmVwb1ZhcmlhYmxlOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCJcbiAgICBdLFxuICAgIGRlbGV0ZVNlbGZIb3N0ZWRSdW5uZXJGcm9tT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH1cIlxuICAgIF0sXG4gICAgZGVsZXRlU2VsZkhvc3RlZFJ1bm5lckZyb21SZXBvOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZVdvcmtmbG93UnVuOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfVwiXSxcbiAgICBkZWxldGVXb3JrZmxvd1J1bkxvZ3M6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vbG9nc1wiXG4gICAgXSxcbiAgICBkaXNhYmxlU2VsZWN0ZWRSZXBvc2l0b3J5R2l0aHViQWN0aW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCJcbiAgICBdLFxuICAgIGRpc2FibGVXb3JrZmxvdzogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvd29ya2Zsb3dzL3t3b3JrZmxvd19pZH0vZGlzYWJsZVwiXG4gICAgXSxcbiAgICBkb3dubG9hZEFydGlmYWN0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9hcnRpZmFjdHMve2FydGlmYWN0X2lkfS97YXJjaGl2ZV9mb3JtYXR9XCJcbiAgICBdLFxuICAgIGRvd25sb2FkSm9iTG9nc0ZvcldvcmtmbG93UnVuOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9qb2JzL3tqb2JfaWR9L2xvZ3NcIlxuICAgIF0sXG4gICAgZG93bmxvYWRXb3JrZmxvd1J1bkF0dGVtcHRMb2dzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2F0dGVtcHRzL3thdHRlbXB0X251bWJlcn0vbG9nc1wiXG4gICAgXSxcbiAgICBkb3dubG9hZFdvcmtmbG93UnVuTG9nczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9sb2dzXCJcbiAgICBdLFxuICAgIGVuYWJsZVNlbGVjdGVkUmVwb3NpdG9yeUdpdGh1YkFjdGlvbnNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiXG4gICAgXSxcbiAgICBlbmFibGVXb3JrZmxvdzogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvd29ya2Zsb3dzL3t3b3JrZmxvd19pZH0vZW5hYmxlXCJcbiAgICBdLFxuICAgIGZvcmNlQ2FuY2VsV29ya2Zsb3dSdW46IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2ZvcmNlLWNhbmNlbFwiXG4gICAgXSxcbiAgICBnZW5lcmF0ZVJ1bm5lckppdGNvbmZpZ0Zvck9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy9nZW5lcmF0ZS1qaXRjb25maWdcIlxuICAgIF0sXG4gICAgZ2VuZXJhdGVSdW5uZXJKaXRjb25maWdGb3JSZXBvOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy9nZW5lcmF0ZS1qaXRjb25maWdcIlxuICAgIF0sXG4gICAgZ2V0QWN0aW9uc0NhY2hlTGlzdDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2NhY2hlc1wiXSxcbiAgICBnZXRBY3Rpb25zQ2FjaGVVc2FnZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2NhY2hlL3VzYWdlXCJdLFxuICAgIGdldEFjdGlvbnNDYWNoZVVzYWdlQnlSZXBvRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2NhY2hlL3VzYWdlLWJ5LXJlcG9zaXRvcnlcIlxuICAgIF0sXG4gICAgZ2V0QWN0aW9uc0NhY2hlVXNhZ2VGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2NhY2hlL3VzYWdlXCJdLFxuICAgIGdldEFsbG93ZWRBY3Rpb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3NlbGVjdGVkLWFjdGlvbnNcIlxuICAgIF0sXG4gICAgZ2V0QWxsb3dlZEFjdGlvbnNSZXBvc2l0b3J5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9ucy9zZWxlY3RlZC1hY3Rpb25zXCJcbiAgICBdLFxuICAgIGdldEFydGlmYWN0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvYXJ0aWZhY3RzL3thcnRpZmFjdF9pZH1cIl0sXG4gICAgZ2V0Q3VzdG9tT2lkY1N1YkNsYWltRm9yUmVwbzogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvb2lkYy9jdXN0b21pemF0aW9uL3N1YlwiXG4gICAgXSxcbiAgICBnZXRFbnZpcm9ubWVudFB1YmxpY0tleTogW1xuICAgICAgXCJHRVQgL3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH0vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9zZWNyZXRzL3B1YmxpYy1rZXlcIlxuICAgIF0sXG4gICAgZ2V0RW52aXJvbm1lbnRTZWNyZXQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vc2VjcmV0cy97c2VjcmV0X25hbWV9XCJcbiAgICBdLFxuICAgIGdldEVudmlyb25tZW50VmFyaWFibGU6IFtcbiAgICAgIFwiR0VUIC9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vdmFyaWFibGVzL3tuYW1lfVwiXG4gICAgXSxcbiAgICBnZXRHaXRodWJBY3Rpb25zRGVmYXVsdFdvcmtmbG93UGVybWlzc2lvbnNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvd29ya2Zsb3dcIlxuICAgIF0sXG4gICAgZ2V0R2l0aHViQWN0aW9uc0RlZmF1bHRXb3JrZmxvd1Blcm1pc3Npb25zUmVwb3NpdG9yeTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnMvd29ya2Zsb3dcIlxuICAgIF0sXG4gICAgZ2V0R2l0aHViQWN0aW9uc1Blcm1pc3Npb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zXCJcbiAgICBdLFxuICAgIGdldEdpdGh1YkFjdGlvbnNQZXJtaXNzaW9uc1JlcG9zaXRvcnk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zXCJcbiAgICBdLFxuICAgIGdldEpvYkZvcldvcmtmbG93UnVuOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvam9icy97am9iX2lkfVwiXSxcbiAgICBnZXRPcmdQdWJsaWNLZXk6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMvcHVibGljLWtleVwiXSxcbiAgICBnZXRPcmdTZWNyZXQ6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBnZXRPcmdWYXJpYWJsZTogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvdmFyaWFibGVzL3tuYW1lfVwiXSxcbiAgICBnZXRQZW5kaW5nRGVwbG95bWVudHNGb3JSdW46IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vcGVuZGluZ19kZXBsb3ltZW50c1wiXG4gICAgXSxcbiAgICBnZXRSZXBvUGVybWlzc2lvbnM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiYWN0aW9uc1wiLCBcImdldEdpdGh1YkFjdGlvbnNQZXJtaXNzaW9uc1JlcG9zaXRvcnlcIl0gfVxuICAgIF0sXG4gICAgZ2V0UmVwb1B1YmxpY0tleTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3NlY3JldHMvcHVibGljLWtleVwiXSxcbiAgICBnZXRSZXBvU2VjcmV0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGdldFJlcG9WYXJpYWJsZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX1cIl0sXG4gICAgZ2V0UmV2aWV3c0ZvclJ1bjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hcHByb3ZhbHNcIlxuICAgIF0sXG4gICAgZ2V0U2VsZkhvc3RlZFJ1bm5lckZvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfVwiXSxcbiAgICBnZXRTZWxmSG9zdGVkUnVubmVyRm9yUmVwbzogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfVwiXG4gICAgXSxcbiAgICBnZXRXb3JrZmxvdzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9XCJdLFxuICAgIGdldFdvcmtmbG93QWNjZXNzVG9SZXBvc2l0b3J5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9ucy9hY2Nlc3NcIlxuICAgIF0sXG4gICAgZ2V0V29ya2Zsb3dSdW46IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9XCJdLFxuICAgIGdldFdvcmtmbG93UnVuQXR0ZW1wdDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hdHRlbXB0cy97YXR0ZW1wdF9udW1iZXJ9XCJcbiAgICBdLFxuICAgIGdldFdvcmtmbG93UnVuVXNhZ2U6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vdGltaW5nXCJcbiAgICBdLFxuICAgIGdldFdvcmtmbG93VXNhZ2U6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L3RpbWluZ1wiXG4gICAgXSxcbiAgICBsaXN0QXJ0aWZhY3RzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2FydGlmYWN0c1wiXSxcbiAgICBsaXN0RW52aXJvbm1lbnRTZWNyZXRzOiBbXG4gICAgICBcIkdFVCAvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHNcIlxuICAgIF0sXG4gICAgbGlzdEVudmlyb25tZW50VmFyaWFibGVzOiBbXG4gICAgICBcIkdFVCAvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3ZhcmlhYmxlc1wiXG4gICAgXSxcbiAgICBsaXN0Sm9ic0ZvcldvcmtmbG93UnVuOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2pvYnNcIlxuICAgIF0sXG4gICAgbGlzdEpvYnNGb3JXb3JrZmxvd1J1bkF0dGVtcHQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXR0ZW1wdHMve2F0dGVtcHRfbnVtYmVyfS9qb2JzXCJcbiAgICBdLFxuICAgIGxpc3RMYWJlbHNGb3JTZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCJcbiAgICBdLFxuICAgIGxpc3RMYWJlbHNGb3JTZWxmSG9zdGVkUnVubmVyRm9yUmVwbzogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIlxuICAgIF0sXG4gICAgbGlzdE9yZ1NlY3JldHM6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHNcIl0sXG4gICAgbGlzdE9yZ1ZhcmlhYmxlczogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvdmFyaWFibGVzXCJdLFxuICAgIGxpc3RSZXBvT3JnYW5pemF0aW9uU2VjcmV0czogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvb3JnYW5pemF0aW9uLXNlY3JldHNcIlxuICAgIF0sXG4gICAgbGlzdFJlcG9Pcmdhbml6YXRpb25WYXJpYWJsZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL29yZ2FuaXphdGlvbi12YXJpYWJsZXNcIlxuICAgIF0sXG4gICAgbGlzdFJlcG9TZWNyZXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvc2VjcmV0c1wiXSxcbiAgICBsaXN0UmVwb1ZhcmlhYmxlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3ZhcmlhYmxlc1wiXSxcbiAgICBsaXN0UmVwb1dvcmtmbG93czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93c1wiXSxcbiAgICBsaXN0UnVubmVyQXBwbGljYXRpb25zRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL2Rvd25sb2Fkc1wiXSxcbiAgICBsaXN0UnVubmVyQXBwbGljYXRpb25zRm9yUmVwbzogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy9kb3dubG9hZHNcIlxuICAgIF0sXG4gICAgbGlzdFNlbGVjdGVkUmVwb3NGb3JPcmdTZWNyZXQ6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiXG4gICAgXSxcbiAgICBsaXN0U2VsZWN0ZWRSZXBvc0Zvck9yZ1ZhcmlhYmxlOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX0vcmVwb3NpdG9yaWVzXCJcbiAgICBdLFxuICAgIGxpc3RTZWxlY3RlZFJlcG9zaXRvcmllc0VuYWJsZWRHaXRodWJBY3Rpb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3JlcG9zaXRvcmllc1wiXG4gICAgXSxcbiAgICBsaXN0U2VsZkhvc3RlZFJ1bm5lcnNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnNcIl0sXG4gICAgbGlzdFNlbGZIb3N0ZWRSdW5uZXJzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnNcIl0sXG4gICAgbGlzdFdvcmtmbG93UnVuQXJ0aWZhY3RzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2FydGlmYWN0c1wiXG4gICAgXSxcbiAgICBsaXN0V29ya2Zsb3dSdW5zOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3Mve3dvcmtmbG93X2lkfS9ydW5zXCJcbiAgICBdLFxuICAgIGxpc3RXb3JrZmxvd1J1bnNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVuc1wiXSxcbiAgICByZVJ1bkpvYkZvcldvcmtmbG93UnVuOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvam9icy97am9iX2lkfS9yZXJ1blwiXG4gICAgXSxcbiAgICByZVJ1bldvcmtmbG93OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vcmVydW5cIl0sXG4gICAgcmVSdW5Xb3JrZmxvd0ZhaWxlZEpvYnM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L3JlcnVuLWZhaWxlZC1qb2JzXCJcbiAgICBdLFxuICAgIHJlbW92ZUFsbEN1c3RvbUxhYmVsc0Zyb21TZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCJcbiAgICBdLFxuICAgIHJlbW92ZUFsbEN1c3RvbUxhYmVsc0Zyb21TZWxmSG9zdGVkUnVubmVyRm9yUmVwbzogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIlxuICAgIF0sXG4gICAgcmVtb3ZlQ3VzdG9tTGFiZWxGcm9tU2VsZkhvc3RlZFJ1bm5lckZvck9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVscy97bmFtZX1cIlxuICAgIF0sXG4gICAgcmVtb3ZlQ3VzdG9tTGFiZWxGcm9tU2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzL3tuYW1lfVwiXG4gICAgXSxcbiAgICByZW1vdmVTZWxlY3RlZFJlcG9Gcm9tT3JnU2VjcmV0OiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCJcbiAgICBdLFxuICAgIHJlbW92ZVNlbGVjdGVkUmVwb0Zyb21PcmdWYXJpYWJsZTogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIlxuICAgIF0sXG4gICAgcmV2aWV3Q3VzdG9tR2F0ZXNGb3JSdW46IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2RlcGxveW1lbnRfcHJvdGVjdGlvbl9ydWxlXCJcbiAgICBdLFxuICAgIHJldmlld1BlbmRpbmdEZXBsb3ltZW50c0ZvclJ1bjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vcGVuZGluZ19kZXBsb3ltZW50c1wiXG4gICAgXSxcbiAgICBzZXRBbGxvd2VkQWN0aW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9zZWxlY3RlZC1hY3Rpb25zXCJcbiAgICBdLFxuICAgIHNldEFsbG93ZWRBY3Rpb25zUmVwb3NpdG9yeTogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnMvc2VsZWN0ZWQtYWN0aW9uc1wiXG4gICAgXSxcbiAgICBzZXRDdXN0b21MYWJlbHNGb3JTZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCJcbiAgICBdLFxuICAgIHNldEN1c3RvbUxhYmVsc0ZvclNlbGZIb3N0ZWRSdW5uZXJGb3JSZXBvOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVsc1wiXG4gICAgXSxcbiAgICBzZXRDdXN0b21PaWRjU3ViQ2xhaW1Gb3JSZXBvOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9vaWRjL2N1c3RvbWl6YXRpb24vc3ViXCJcbiAgICBdLFxuICAgIHNldEdpdGh1YkFjdGlvbnNEZWZhdWx0V29ya2Zsb3dQZXJtaXNzaW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy93b3JrZmxvd1wiXG4gICAgXSxcbiAgICBzZXRHaXRodWJBY3Rpb25zRGVmYXVsdFdvcmtmbG93UGVybWlzc2lvbnNSZXBvc2l0b3J5OiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9ucy93b3JrZmxvd1wiXG4gICAgXSxcbiAgICBzZXRHaXRodWJBY3Rpb25zUGVybWlzc2lvbnNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnNcIlxuICAgIF0sXG4gICAgc2V0R2l0aHViQWN0aW9uc1Blcm1pc3Npb25zUmVwb3NpdG9yeTogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnNcIlxuICAgIF0sXG4gICAgc2V0U2VsZWN0ZWRSZXBvc0Zvck9yZ1NlY3JldDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCJcbiAgICBdLFxuICAgIHNldFNlbGVjdGVkUmVwb3NGb3JPcmdWYXJpYWJsZTogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9L3JlcG9zaXRvcmllc1wiXG4gICAgXSxcbiAgICBzZXRTZWxlY3RlZFJlcG9zaXRvcmllc0VuYWJsZWRHaXRodWJBY3Rpb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3JlcG9zaXRvcmllc1wiXG4gICAgXSxcbiAgICBzZXRXb3JrZmxvd0FjY2Vzc1RvUmVwb3NpdG9yeTogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnMvYWNjZXNzXCJcbiAgICBdLFxuICAgIHVwZGF0ZUVudmlyb25tZW50VmFyaWFibGU6IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH0vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS92YXJpYWJsZXMve25hbWV9XCJcbiAgICBdLFxuICAgIHVwZGF0ZU9yZ1ZhcmlhYmxlOiBbXCJQQVRDSCAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX1cIl0sXG4gICAgdXBkYXRlUmVwb1ZhcmlhYmxlOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX1cIlxuICAgIF1cbiAgfSxcbiAgYWN0aXZpdHk6IHtcbiAgICBjaGVja1JlcG9Jc1N0YXJyZWRCeUF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvc3RhcnJlZC97b3duZXJ9L3tyZXBvfVwiXSxcbiAgICBkZWxldGVSZXBvU3Vic2NyaXB0aW9uOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmlwdGlvblwiXSxcbiAgICBkZWxldGVUaHJlYWRTdWJzY3JpcHRpb246IFtcbiAgICAgIFwiREVMRVRFIC9ub3RpZmljYXRpb25zL3RocmVhZHMve3RocmVhZF9pZH0vc3Vic2NyaXB0aW9uXCJcbiAgICBdLFxuICAgIGdldEZlZWRzOiBbXCJHRVQgL2ZlZWRzXCJdLFxuICAgIGdldFJlcG9TdWJzY3JpcHRpb246IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3Vic2NyaXB0aW9uXCJdLFxuICAgIGdldFRocmVhZDogW1wiR0VUIC9ub3RpZmljYXRpb25zL3RocmVhZHMve3RocmVhZF9pZH1cIl0sXG4gICAgZ2V0VGhyZWFkU3Vic2NyaXB0aW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC9ub3RpZmljYXRpb25zL3RocmVhZHMve3RocmVhZF9pZH0vc3Vic2NyaXB0aW9uXCJcbiAgICBdLFxuICAgIGxpc3RFdmVudHNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2V2ZW50c1wiXSxcbiAgICBsaXN0Tm90aWZpY2F0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL25vdGlmaWNhdGlvbnNcIl0sXG4gICAgbGlzdE9yZ0V2ZW50c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ldmVudHMvb3Jncy97b3JnfVwiXG4gICAgXSxcbiAgICBsaXN0UHVibGljRXZlbnRzOiBbXCJHRVQgL2V2ZW50c1wiXSxcbiAgICBsaXN0UHVibGljRXZlbnRzRm9yUmVwb05ldHdvcms6IFtcIkdFVCAvbmV0d29ya3Mve293bmVyfS97cmVwb30vZXZlbnRzXCJdLFxuICAgIGxpc3RQdWJsaWNFdmVudHNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzL3B1YmxpY1wiXSxcbiAgICBsaXN0UHVibGljT3JnRXZlbnRzOiBbXCJHRVQgL29yZ3Mve29yZ30vZXZlbnRzXCJdLFxuICAgIGxpc3RSZWNlaXZlZEV2ZW50c0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9yZWNlaXZlZF9ldmVudHNcIl0sXG4gICAgbGlzdFJlY2VpdmVkUHVibGljRXZlbnRzRm9yVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcmVjZWl2ZWRfZXZlbnRzL3B1YmxpY1wiXG4gICAgXSxcbiAgICBsaXN0UmVwb0V2ZW50czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ldmVudHNcIl0sXG4gICAgbGlzdFJlcG9Ob3RpZmljYXRpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ub3RpZmljYXRpb25zXCJcbiAgICBdLFxuICAgIGxpc3RSZXBvc1N0YXJyZWRCeUF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvc3RhcnJlZFwiXSxcbiAgICBsaXN0UmVwb3NTdGFycmVkQnlVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc3RhcnJlZFwiXSxcbiAgICBsaXN0UmVwb3NXYXRjaGVkQnlVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc3Vic2NyaXB0aW9uc1wiXSxcbiAgICBsaXN0U3RhcmdhemVyc0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3RhcmdhemVyc1wiXSxcbiAgICBsaXN0V2F0Y2hlZFJlcG9zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9zdWJzY3JpcHRpb25zXCJdLFxuICAgIGxpc3RXYXRjaGVyc0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3Vic2NyaWJlcnNcIl0sXG4gICAgbWFya05vdGlmaWNhdGlvbnNBc1JlYWQ6IFtcIlBVVCAvbm90aWZpY2F0aW9uc1wiXSxcbiAgICBtYXJrUmVwb05vdGlmaWNhdGlvbnNBc1JlYWQ6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vbm90aWZpY2F0aW9uc1wiXSxcbiAgICBtYXJrVGhyZWFkQXNEb25lOiBbXCJERUxFVEUgL25vdGlmaWNhdGlvbnMvdGhyZWFkcy97dGhyZWFkX2lkfVwiXSxcbiAgICBtYXJrVGhyZWFkQXNSZWFkOiBbXCJQQVRDSCAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9XCJdLFxuICAgIHNldFJlcG9TdWJzY3JpcHRpb246IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3Vic2NyaXB0aW9uXCJdLFxuICAgIHNldFRocmVhZFN1YnNjcmlwdGlvbjogW1xuICAgICAgXCJQVVQgL25vdGlmaWNhdGlvbnMvdGhyZWFkcy97dGhyZWFkX2lkfS9zdWJzY3JpcHRpb25cIlxuICAgIF0sXG4gICAgc3RhclJlcG9Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUFVUIC91c2VyL3N0YXJyZWQve293bmVyfS97cmVwb31cIl0sXG4gICAgdW5zdGFyUmVwb0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvc3RhcnJlZC97b3duZXJ9L3tyZXBvfVwiXVxuICB9LFxuICBhcHBzOiB7XG4gICAgYWRkUmVwb1RvSW5zdGFsbGF0aW9uOiBbXG4gICAgICBcIlBVVCAvdXNlci9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJhcHBzXCIsIFwiYWRkUmVwb1RvSW5zdGFsbGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfVxuICAgIF0sXG4gICAgYWRkUmVwb1RvSW5zdGFsbGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUFVUIC91c2VyL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiXG4gICAgXSxcbiAgICBjaGVja1Rva2VuOiBbXCJQT1NUIC9hcHBsaWNhdGlvbnMve2NsaWVudF9pZH0vdG9rZW5cIl0sXG4gICAgY3JlYXRlRnJvbU1hbmlmZXN0OiBbXCJQT1NUIC9hcHAtbWFuaWZlc3RzL3tjb2RlfS9jb252ZXJzaW9uc1wiXSxcbiAgICBjcmVhdGVJbnN0YWxsYXRpb25BY2Nlc3NUb2tlbjogW1xuICAgICAgXCJQT1NUIC9hcHAvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9hY2Nlc3NfdG9rZW5zXCJcbiAgICBdLFxuICAgIGRlbGV0ZUF1dGhvcml6YXRpb246IFtcIkRFTEVURSAvYXBwbGljYXRpb25zL3tjbGllbnRfaWR9L2dyYW50XCJdLFxuICAgIGRlbGV0ZUluc3RhbGxhdGlvbjogW1wiREVMRVRFIC9hcHAvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfVwiXSxcbiAgICBkZWxldGVUb2tlbjogW1wiREVMRVRFIC9hcHBsaWNhdGlvbnMve2NsaWVudF9pZH0vdG9rZW5cIl0sXG4gICAgZ2V0QXV0aGVudGljYXRlZDogW1wiR0VUIC9hcHBcIl0sXG4gICAgZ2V0QnlTbHVnOiBbXCJHRVQgL2FwcHMve2FwcF9zbHVnfVwiXSxcbiAgICBnZXRJbnN0YWxsYXRpb246IFtcIkdFVCAvYXBwL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH1cIl0sXG4gICAgZ2V0T3JnSW5zdGFsbGF0aW9uOiBbXCJHRVQgL29yZ3Mve29yZ30vaW5zdGFsbGF0aW9uXCJdLFxuICAgIGdldFJlcG9JbnN0YWxsYXRpb246IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaW5zdGFsbGF0aW9uXCJdLFxuICAgIGdldFN1YnNjcmlwdGlvblBsYW5Gb3JBY2NvdW50OiBbXG4gICAgICBcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9hY2NvdW50cy97YWNjb3VudF9pZH1cIlxuICAgIF0sXG4gICAgZ2V0U3Vic2NyaXB0aW9uUGxhbkZvckFjY291bnRTdHViYmVkOiBbXG4gICAgICBcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9zdHViYmVkL2FjY291bnRzL3thY2NvdW50X2lkfVwiXG4gICAgXSxcbiAgICBnZXRVc2VySW5zdGFsbGF0aW9uOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vaW5zdGFsbGF0aW9uXCJdLFxuICAgIGdldFdlYmhvb2tDb25maWdGb3JBcHA6IFtcIkdFVCAvYXBwL2hvb2svY29uZmlnXCJdLFxuICAgIGdldFdlYmhvb2tEZWxpdmVyeTogW1wiR0VUIC9hcHAvaG9vay9kZWxpdmVyaWVzL3tkZWxpdmVyeV9pZH1cIl0sXG4gICAgbGlzdEFjY291bnRzRm9yUGxhbjogW1wiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3BsYW5zL3twbGFuX2lkfS9hY2NvdW50c1wiXSxcbiAgICBsaXN0QWNjb3VudHNGb3JQbGFuU3R1YmJlZDogW1xuICAgICAgXCJHRVQgL21hcmtldHBsYWNlX2xpc3Rpbmcvc3R1YmJlZC9wbGFucy97cGxhbl9pZH0vYWNjb3VudHNcIlxuICAgIF0sXG4gICAgbGlzdEluc3RhbGxhdGlvblJlcG9zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCJcbiAgICBdLFxuICAgIGxpc3RJbnN0YWxsYXRpb25SZXF1ZXN0c0ZvckF1dGhlbnRpY2F0ZWRBcHA6IFtcbiAgICAgIFwiR0VUIC9hcHAvaW5zdGFsbGF0aW9uLXJlcXVlc3RzXCJcbiAgICBdLFxuICAgIGxpc3RJbnN0YWxsYXRpb25zOiBbXCJHRVQgL2FwcC9pbnN0YWxsYXRpb25zXCJdLFxuICAgIGxpc3RJbnN0YWxsYXRpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9pbnN0YWxsYXRpb25zXCJdLFxuICAgIGxpc3RQbGFuczogW1wiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3BsYW5zXCJdLFxuICAgIGxpc3RQbGFuc1N0dWJiZWQ6IFtcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9zdHViYmVkL3BsYW5zXCJdLFxuICAgIGxpc3RSZXBvc0FjY2Vzc2libGVUb0luc3RhbGxhdGlvbjogW1wiR0VUIC9pbnN0YWxsYXRpb24vcmVwb3NpdG9yaWVzXCJdLFxuICAgIGxpc3RTdWJzY3JpcHRpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9tYXJrZXRwbGFjZV9wdXJjaGFzZXNcIl0sXG4gICAgbGlzdFN1YnNjcmlwdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlclN0dWJiZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL21hcmtldHBsYWNlX3B1cmNoYXNlcy9zdHViYmVkXCJcbiAgICBdLFxuICAgIGxpc3RXZWJob29rRGVsaXZlcmllczogW1wiR0VUIC9hcHAvaG9vay9kZWxpdmVyaWVzXCJdLFxuICAgIHJlZGVsaXZlcldlYmhvb2tEZWxpdmVyeTogW1xuICAgICAgXCJQT1NUIC9hcHAvaG9vay9kZWxpdmVyaWVzL3tkZWxpdmVyeV9pZH0vYXR0ZW1wdHNcIlxuICAgIF0sXG4gICAgcmVtb3ZlUmVwb0Zyb21JbnN0YWxsYXRpb246IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcImFwcHNcIiwgXCJyZW1vdmVSZXBvRnJvbUluc3RhbGxhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIHJlbW92ZVJlcG9Gcm9tSW5zdGFsbGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiXG4gICAgXSxcbiAgICByZXNldFRva2VuOiBbXCJQQVRDSCAvYXBwbGljYXRpb25zL3tjbGllbnRfaWR9L3Rva2VuXCJdLFxuICAgIHJldm9rZUluc3RhbGxhdGlvbkFjY2Vzc1Rva2VuOiBbXCJERUxFVEUgL2luc3RhbGxhdGlvbi90b2tlblwiXSxcbiAgICBzY29wZVRva2VuOiBbXCJQT1NUIC9hcHBsaWNhdGlvbnMve2NsaWVudF9pZH0vdG9rZW4vc2NvcGVkXCJdLFxuICAgIHN1c3BlbmRJbnN0YWxsYXRpb246IFtcIlBVVCAvYXBwL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vc3VzcGVuZGVkXCJdLFxuICAgIHVuc3VzcGVuZEluc3RhbGxhdGlvbjogW1xuICAgICAgXCJERUxFVEUgL2FwcC9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3N1c3BlbmRlZFwiXG4gICAgXSxcbiAgICB1cGRhdGVXZWJob29rQ29uZmlnRm9yQXBwOiBbXCJQQVRDSCAvYXBwL2hvb2svY29uZmlnXCJdXG4gIH0sXG4gIGJpbGxpbmc6IHtcbiAgICBnZXRHaXRodWJBY3Rpb25zQmlsbGluZ09yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL2JpbGxpbmcvYWN0aW9uc1wiXSxcbiAgICBnZXRHaXRodWJBY3Rpb25zQmlsbGluZ1VzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NldHRpbmdzL2JpbGxpbmcvYWN0aW9uc1wiXG4gICAgXSxcbiAgICBnZXRHaXRodWJQYWNrYWdlc0JpbGxpbmdPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9zZXR0aW5ncy9iaWxsaW5nL3BhY2thZ2VzXCJdLFxuICAgIGdldEdpdGh1YlBhY2thZ2VzQmlsbGluZ1VzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NldHRpbmdzL2JpbGxpbmcvcGFja2FnZXNcIlxuICAgIF0sXG4gICAgZ2V0U2hhcmVkU3RvcmFnZUJpbGxpbmdPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL2JpbGxpbmcvc2hhcmVkLXN0b3JhZ2VcIlxuICAgIF0sXG4gICAgZ2V0U2hhcmVkU3RvcmFnZUJpbGxpbmdVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zZXR0aW5ncy9iaWxsaW5nL3NoYXJlZC1zdG9yYWdlXCJcbiAgICBdXG4gIH0sXG4gIGNoZWNrczoge1xuICAgIGNyZWF0ZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stcnVuc1wiXSxcbiAgICBjcmVhdGVTdWl0ZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stc3VpdGVzXCJdLFxuICAgIGdldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1ydW5zL3tjaGVja19ydW5faWR9XCJdLFxuICAgIGdldFN1aXRlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXN1aXRlcy97Y2hlY2tfc3VpdGVfaWR9XCJdLFxuICAgIGxpc3RBbm5vdGF0aW9uczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXJ1bnMve2NoZWNrX3J1bl9pZH0vYW5ub3RhdGlvbnNcIlxuICAgIF0sXG4gICAgbGlzdEZvclJlZjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L2NoZWNrLXJ1bnNcIl0sXG4gICAgbGlzdEZvclN1aXRlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stc3VpdGVzL3tjaGVja19zdWl0ZV9pZH0vY2hlY2stcnVuc1wiXG4gICAgXSxcbiAgICBsaXN0U3VpdGVzRm9yUmVmOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vY2hlY2stc3VpdGVzXCJdLFxuICAgIHJlcmVxdWVzdFJ1bjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1ydW5zL3tjaGVja19ydW5faWR9L3JlcmVxdWVzdFwiXG4gICAgXSxcbiAgICByZXJlcXVlc3RTdWl0ZTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1zdWl0ZXMve2NoZWNrX3N1aXRlX2lkfS9yZXJlcXVlc3RcIlxuICAgIF0sXG4gICAgc2V0U3VpdGVzUHJlZmVyZW5jZXM6IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXN1aXRlcy9wcmVmZXJlbmNlc1wiXG4gICAgXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1ydW5zL3tjaGVja19ydW5faWR9XCJdXG4gIH0sXG4gIGNvZGVTY2FubmluZzoge1xuICAgIGRlbGV0ZUFuYWx5c2lzOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbmFseXNlcy97YW5hbHlzaXNfaWR9ez9jb25maXJtX2RlbGV0ZX1cIlxuICAgIF0sXG4gICAgZ2V0QWxlcnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWRQYXJhbWV0ZXJzOiB7IGFsZXJ0X2lkOiBcImFsZXJ0X251bWJlclwiIH0gfVxuICAgIF0sXG4gICAgZ2V0QW5hbHlzaXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FuYWx5c2VzL3thbmFseXNpc19pZH1cIlxuICAgIF0sXG4gICAgZ2V0Q29kZXFsRGF0YWJhc2U6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2NvZGVxbC9kYXRhYmFzZXMve2xhbmd1YWdlfVwiXG4gICAgXSxcbiAgICBnZXREZWZhdWx0U2V0dXA6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9kZWZhdWx0LXNldHVwXCJdLFxuICAgIGdldFNhcmlmOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvc2FyaWZzL3tzYXJpZl9pZH1cIl0sXG4gICAgbGlzdEFsZXJ0SW5zdGFuY2VzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn0vaW5zdGFuY2VzXCJcbiAgICBdLFxuICAgIGxpc3RBbGVydHNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9jb2RlLXNjYW5uaW5nL2FsZXJ0c1wiXSxcbiAgICBsaXN0QWxlcnRzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0c1wiXSxcbiAgICBsaXN0QWxlcnRzSW5zdGFuY2VzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn0vaW5zdGFuY2VzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiY29kZVNjYW5uaW5nXCIsIFwibGlzdEFsZXJ0SW5zdGFuY2VzXCJdIH1cbiAgICBdLFxuICAgIGxpc3RDb2RlcWxEYXRhYmFzZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2NvZGVxbC9kYXRhYmFzZXNcIlxuICAgIF0sXG4gICAgbGlzdFJlY2VudEFuYWx5c2VzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYW5hbHlzZXNcIl0sXG4gICAgdXBkYXRlQWxlcnQ6IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9XCJcbiAgICBdLFxuICAgIHVwZGF0ZURlZmF1bHRTZXR1cDogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9kZWZhdWx0LXNldHVwXCJcbiAgICBdLFxuICAgIHVwbG9hZFNhcmlmOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL3Nhcmlmc1wiXVxuICB9LFxuICBjb2Rlc09mQ29uZHVjdDoge1xuICAgIGdldEFsbENvZGVzT2ZDb25kdWN0OiBbXCJHRVQgL2NvZGVzX29mX2NvbmR1Y3RcIl0sXG4gICAgZ2V0Q29uZHVjdENvZGU6IFtcIkdFVCAvY29kZXNfb2ZfY29uZHVjdC97a2V5fVwiXVxuICB9LFxuICBjb2Rlc3BhY2VzOiB7XG4gICAgYWRkUmVwb3NpdG9yeUZvclNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBVVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCJcbiAgICBdLFxuICAgIGFkZFNlbGVjdGVkUmVwb1RvT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCJcbiAgICBdLFxuICAgIGNoZWNrUGVybWlzc2lvbnNGb3JEZXZjb250YWluZXI6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL3Blcm1pc3Npb25zX2NoZWNrXCJcbiAgICBdLFxuICAgIGNvZGVzcGFjZU1hY2hpbmVzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfS9tYWNoaW5lc1wiXG4gICAgXSxcbiAgICBjcmVhdGVGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9jb2Rlc3BhY2VzXCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXG4gICAgXSxcbiAgICBjcmVhdGVPclVwZGF0ZVJlcG9TZWNyZXQ6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXG4gICAgXSxcbiAgICBjcmVhdGVPclVwZGF0ZVNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBVVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXG4gICAgXSxcbiAgICBjcmVhdGVXaXRoUHJGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2NvZGVzcGFjZXNcIlxuICAgIF0sXG4gICAgY3JlYXRlV2l0aFJlcG9Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzXCJcbiAgICBdLFxuICAgIGRlbGV0ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9XCJdLFxuICAgIGRlbGV0ZUZyb21Pcmdhbml6YXRpb246IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfS9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX1cIlxuICAgIF0sXG4gICAgZGVsZXRlT3JnU2VjcmV0OiBbXCJERUxFVEUgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZGVsZXRlUmVwb1NlY3JldDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJcbiAgICBdLFxuICAgIGRlbGV0ZVNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXG4gICAgXSxcbiAgICBleHBvcnRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQT1NUIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfS9leHBvcnRzXCJcbiAgICBdLFxuICAgIGdldENvZGVzcGFjZXNGb3JVc2VySW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfS9jb2Rlc3BhY2VzXCJcbiAgICBdLFxuICAgIGdldEV4cG9ydERldGFpbHNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9L2V4cG9ydHMve2V4cG9ydF9pZH1cIlxuICAgIF0sXG4gICAgZ2V0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX1cIl0sXG4gICAgZ2V0T3JnUHVibGljS2V5OiBbXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3B1YmxpYy1rZXlcIl0sXG4gICAgZ2V0T3JnU2VjcmV0OiBbXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZ2V0UHVibGljS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy9wdWJsaWMta2V5XCJcbiAgICBdLFxuICAgIGdldFJlcG9QdWJsaWNLZXk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL3NlY3JldHMvcHVibGljLWtleVwiXG4gICAgXSxcbiAgICBnZXRSZXBvU2VjcmV0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIlxuICAgIF0sXG4gICAgZ2V0U2VjcmV0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJcbiAgICBdLFxuICAgIGxpc3REZXZjb250YWluZXJzSW5SZXBvc2l0b3J5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL2RldmNvbnRhaW5lcnNcIlxuICAgIF0sXG4gICAgbGlzdEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvY29kZXNwYWNlc1wiXSxcbiAgICBsaXN0SW5Pcmdhbml6YXRpb246IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkUGFyYW1ldGVyczogeyBvcmdfaWQ6IFwib3JnXCIgfSB9XG4gICAgXSxcbiAgICBsaXN0SW5SZXBvc2l0b3J5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzXCJcbiAgICBdLFxuICAgIGxpc3RPcmdTZWNyZXRzOiBbXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzXCJdLFxuICAgIGxpc3RSZXBvU2VjcmV0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL3NlY3JldHNcIl0sXG4gICAgbGlzdFJlcG9zaXRvcmllc0ZvclNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIlxuICAgIF0sXG4gICAgbGlzdFNlY3JldHNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0c1wiXSxcbiAgICBsaXN0U2VsZWN0ZWRSZXBvc0Zvck9yZ1NlY3JldDogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCJcbiAgICBdLFxuICAgIHByZUZsaWdodFdpdGhSZXBvRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL25ld1wiXG4gICAgXSxcbiAgICBwdWJsaXNoRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUE9TVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vcHVibGlzaFwiXG4gICAgXSxcbiAgICByZW1vdmVSZXBvc2l0b3J5Rm9yU2VjcmV0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIlxuICAgIF0sXG4gICAgcmVtb3ZlU2VsZWN0ZWRSZXBvRnJvbU9yZ1NlY3JldDogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiXG4gICAgXSxcbiAgICByZXBvTWFjaGluZXNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvbWFjaGluZXNcIlxuICAgIF0sXG4gICAgc2V0UmVwb3NpdG9yaWVzRm9yU2VjcmV0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUFVUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiXG4gICAgXSxcbiAgICBzZXRTZWxlY3RlZFJlcG9zRm9yT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIlxuICAgIF0sXG4gICAgc3RhcnRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vc3RhcnRcIl0sXG4gICAgc3RvcEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfS9zdG9wXCJdLFxuICAgIHN0b3BJbk9yZ2FuaXphdGlvbjogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfS9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vc3RvcFwiXG4gICAgXSxcbiAgICB1cGRhdGVGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUEFUQ0ggL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9XCJdXG4gIH0sXG4gIGNvcGlsb3Q6IHtcbiAgICBhZGRDb3BpbG90U2VhdHNGb3JUZWFtczogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L2NvcGlsb3QvYmlsbGluZy9zZWxlY3RlZF90ZWFtc1wiXG4gICAgXSxcbiAgICBhZGRDb3BpbG90U2VhdHNGb3JVc2VyczogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L2NvcGlsb3QvYmlsbGluZy9zZWxlY3RlZF91c2Vyc1wiXG4gICAgXSxcbiAgICBjYW5jZWxDb3BpbG90U2VhdEFzc2lnbm1lbnRGb3JUZWFtczogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vY29waWxvdC9iaWxsaW5nL3NlbGVjdGVkX3RlYW1zXCJcbiAgICBdLFxuICAgIGNhbmNlbENvcGlsb3RTZWF0QXNzaWdubWVudEZvclVzZXJzOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmcvc2VsZWN0ZWRfdXNlcnNcIlxuICAgIF0sXG4gICAgZ2V0Q29waWxvdE9yZ2FuaXphdGlvbkRldGFpbHM6IFtcIkdFVCAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmdcIl0sXG4gICAgZ2V0Q29waWxvdFNlYXREZXRhaWxzRm9yVXNlcjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vbWVtYmVycy97dXNlcm5hbWV9L2NvcGlsb3RcIlxuICAgIF0sXG4gICAgbGlzdENvcGlsb3RTZWF0czogW1wiR0VUIC9vcmdzL3tvcmd9L2NvcGlsb3QvYmlsbGluZy9zZWF0c1wiXVxuICB9LFxuICBkZXBlbmRhYm90OiB7XG4gICAgYWRkU2VsZWN0ZWRSZXBvVG9PcmdTZWNyZXQ6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIlxuICAgIF0sXG4gICAgY3JlYXRlT3JVcGRhdGVPcmdTZWNyZXQ6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJcbiAgICBdLFxuICAgIGNyZWF0ZU9yVXBkYXRlUmVwb1NlY3JldDogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJcbiAgICBdLFxuICAgIGRlbGV0ZU9yZ1NlY3JldDogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGRlbGV0ZVJlcG9TZWNyZXQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfVwiXG4gICAgXSxcbiAgICBnZXRBbGVydDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L2FsZXJ0cy97YWxlcnRfbnVtYmVyfVwiXSxcbiAgICBnZXRPcmdQdWJsaWNLZXk6IFtcIkdFVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMvcHVibGljLWtleVwiXSxcbiAgICBnZXRPcmdTZWNyZXQ6IFtcIkdFVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBnZXRSZXBvUHVibGljS2V5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9zZWNyZXRzL3B1YmxpYy1rZXlcIlxuICAgIF0sXG4gICAgZ2V0UmVwb1NlY3JldDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJcbiAgICBdLFxuICAgIGxpc3RBbGVydHNGb3JFbnRlcnByaXNlOiBbXG4gICAgICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2RlcGVuZGFib3QvYWxlcnRzXCJcbiAgICBdLFxuICAgIGxpc3RBbGVydHNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L2FsZXJ0c1wiXSxcbiAgICBsaXN0QWxlcnRzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L2FsZXJ0c1wiXSxcbiAgICBsaXN0T3JnU2VjcmV0czogW1wiR0VUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0c1wiXSxcbiAgICBsaXN0UmVwb1NlY3JldHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9zZWNyZXRzXCJdLFxuICAgIGxpc3RTZWxlY3RlZFJlcG9zRm9yT3JnU2VjcmV0OiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIlxuICAgIF0sXG4gICAgcmVtb3ZlU2VsZWN0ZWRSZXBvRnJvbU9yZ1NlY3JldDogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiXG4gICAgXSxcbiAgICBzZXRTZWxlY3RlZFJlcG9zRm9yT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIlxuICAgIF0sXG4gICAgdXBkYXRlQWxlcnQ6IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3QvYWxlcnRzL3thbGVydF9udW1iZXJ9XCJcbiAgICBdXG4gIH0sXG4gIGRlcGVuZGVuY3lHcmFwaDoge1xuICAgIGNyZWF0ZVJlcG9zaXRvcnlTbmFwc2hvdDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRlbmN5LWdyYXBoL3NuYXBzaG90c1wiXG4gICAgXSxcbiAgICBkaWZmUmFuZ2U6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRlbmN5LWdyYXBoL2NvbXBhcmUve2Jhc2VoZWFkfVwiXG4gICAgXSxcbiAgICBleHBvcnRTYm9tOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGVuY3ktZ3JhcGgvc2JvbVwiXVxuICB9LFxuICBlbW9qaXM6IHsgZ2V0OiBbXCJHRVQgL2Vtb2ppc1wiXSB9LFxuICBnaXN0czoge1xuICAgIGNoZWNrSXNTdGFycmVkOiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfS9zdGFyXCJdLFxuICAgIGNyZWF0ZTogW1wiUE9TVCAvZ2lzdHNcIl0sXG4gICAgY3JlYXRlQ29tbWVudDogW1wiUE9TVCAvZ2lzdHMve2dpc3RfaWR9L2NvbW1lbnRzXCJdLFxuICAgIGRlbGV0ZTogW1wiREVMRVRFIC9naXN0cy97Z2lzdF9pZH1cIl0sXG4gICAgZGVsZXRlQ29tbWVudDogW1wiREVMRVRFIC9naXN0cy97Z2lzdF9pZH0vY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIGZvcms6IFtcIlBPU1QgL2dpc3RzL3tnaXN0X2lkfS9mb3Jrc1wiXSxcbiAgICBnZXQ6IFtcIkdFVCAvZ2lzdHMve2dpc3RfaWR9XCJdLFxuICAgIGdldENvbW1lbnQ6IFtcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBnZXRSZXZpc2lvbjogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH0ve3NoYX1cIl0sXG4gICAgbGlzdDogW1wiR0VUIC9naXN0c1wiXSxcbiAgICBsaXN0Q29tbWVudHM6IFtcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L2NvbW1lbnRzXCJdLFxuICAgIGxpc3RDb21taXRzOiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfS9jb21taXRzXCJdLFxuICAgIGxpc3RGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZ2lzdHNcIl0sXG4gICAgbGlzdEZvcmtzOiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfS9mb3Jrc1wiXSxcbiAgICBsaXN0UHVibGljOiBbXCJHRVQgL2dpc3RzL3B1YmxpY1wiXSxcbiAgICBsaXN0U3RhcnJlZDogW1wiR0VUIC9naXN0cy9zdGFycmVkXCJdLFxuICAgIHN0YXI6IFtcIlBVVCAvZ2lzdHMve2dpc3RfaWR9L3N0YXJcIl0sXG4gICAgdW5zdGFyOiBbXCJERUxFVEUgL2dpc3RzL3tnaXN0X2lkfS9zdGFyXCJdLFxuICAgIHVwZGF0ZTogW1wiUEFUQ0ggL2dpc3RzL3tnaXN0X2lkfVwiXSxcbiAgICB1cGRhdGVDb21tZW50OiBbXCJQQVRDSCAvZ2lzdHMve2dpc3RfaWR9L2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXVxuICB9LFxuICBnaXQ6IHtcbiAgICBjcmVhdGVCbG9iOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvYmxvYnNcIl0sXG4gICAgY3JlYXRlQ29tbWl0OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvY29tbWl0c1wiXSxcbiAgICBjcmVhdGVSZWY6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9yZWZzXCJdLFxuICAgIGNyZWF0ZVRhZzogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3RhZ3NcIl0sXG4gICAgY3JlYXRlVHJlZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3RyZWVzXCJdLFxuICAgIGRlbGV0ZVJlZjogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvcmVmcy97cmVmfVwiXSxcbiAgICBnZXRCbG9iOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9ibG9icy97ZmlsZV9zaGF9XCJdLFxuICAgIGdldENvbW1pdDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvY29tbWl0cy97Y29tbWl0X3NoYX1cIl0sXG4gICAgZ2V0UmVmOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9yZWYve3JlZn1cIl0sXG4gICAgZ2V0VGFnOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC90YWdzL3t0YWdfc2hhfVwiXSxcbiAgICBnZXRUcmVlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC90cmVlcy97dHJlZV9zaGF9XCJdLFxuICAgIGxpc3RNYXRjaGluZ1JlZnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L21hdGNoaW5nLXJlZnMve3JlZn1cIl0sXG4gICAgdXBkYXRlUmVmOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3JlZnMve3JlZn1cIl1cbiAgfSxcbiAgZ2l0aWdub3JlOiB7XG4gICAgZ2V0QWxsVGVtcGxhdGVzOiBbXCJHRVQgL2dpdGlnbm9yZS90ZW1wbGF0ZXNcIl0sXG4gICAgZ2V0VGVtcGxhdGU6IFtcIkdFVCAvZ2l0aWdub3JlL3RlbXBsYXRlcy97bmFtZX1cIl1cbiAgfSxcbiAgaW50ZXJhY3Rpb25zOiB7XG4gICAgZ2V0UmVzdHJpY3Rpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgZ2V0UmVzdHJpY3Rpb25zRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIGdldFJlc3RyaWN0aW9uc0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIGdldFJlc3RyaWN0aW9uc0ZvcllvdXJQdWJsaWNSZXBvczogW1xuICAgICAgXCJHRVQgL3VzZXIvaW50ZXJhY3Rpb24tbGltaXRzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiaW50ZXJhY3Rpb25zXCIsIFwiZ2V0UmVzdHJpY3Rpb25zRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfVxuICAgIF0sXG4gICAgcmVtb3ZlUmVzdHJpY3Rpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgcmVtb3ZlUmVzdHJpY3Rpb25zRm9yT3JnOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIHJlbW92ZVJlc3RyaWN0aW9uc0ZvclJlcG86IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbnRlcmFjdGlvbi1saW1pdHNcIlxuICAgIF0sXG4gICAgcmVtb3ZlUmVzdHJpY3Rpb25zRm9yWW91clB1YmxpY1JlcG9zOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9pbnRlcmFjdGlvbi1saW1pdHNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJpbnRlcmFjdGlvbnNcIiwgXCJyZW1vdmVSZXN0cmljdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBzZXRSZXN0cmljdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUFVUIC91c2VyL2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICBzZXRSZXN0cmljdGlvbnNGb3JPcmc6IFtcIlBVVCAvb3Jncy97b3JnfS9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgc2V0UmVzdHJpY3Rpb25zRm9yUmVwbzogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgc2V0UmVzdHJpY3Rpb25zRm9yWW91clB1YmxpY1JlcG9zOiBbXG4gICAgICBcIlBVVCAvdXNlci9pbnRlcmFjdGlvbi1saW1pdHNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJpbnRlcmFjdGlvbnNcIiwgXCJzZXRSZXN0cmljdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXVxuICB9LFxuICBpc3N1ZXM6IHtcbiAgICBhZGRBc3NpZ25lZXM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2Fzc2lnbmVlc1wiXG4gICAgXSxcbiAgICBhZGRMYWJlbHM6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sYWJlbHNcIl0sXG4gICAgY2hlY2tVc2VyQ2FuQmVBc3NpZ25lZDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hc3NpZ25lZXMve2Fzc2lnbmVlfVwiXSxcbiAgICBjaGVja1VzZXJDYW5CZUFzc2lnbmVkVG9Jc3N1ZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9hc3NpZ25lZXMve2Fzc2lnbmVlfVwiXG4gICAgXSxcbiAgICBjcmVhdGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlc1wiXSxcbiAgICBjcmVhdGVDb21tZW50OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9jb21tZW50c1wiXG4gICAgXSxcbiAgICBjcmVhdGVMYWJlbDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vbGFiZWxzXCJdLFxuICAgIGNyZWF0ZU1pbGVzdG9uZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lc1wiXSxcbiAgICBkZWxldGVDb21tZW50OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXG4gICAgXSxcbiAgICBkZWxldGVMYWJlbDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sYWJlbHMve25hbWV9XCJdLFxuICAgIGRlbGV0ZU1pbGVzdG9uZTogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXMve21pbGVzdG9uZV9udW1iZXJ9XCJcbiAgICBdLFxuICAgIGdldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn1cIl0sXG4gICAgZ2V0Q29tbWVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIGdldEV2ZW50OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9ldmVudHMve2V2ZW50X2lkfVwiXSxcbiAgICBnZXRMYWJlbDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sYWJlbHMve25hbWV9XCJdLFxuICAgIGdldE1pbGVzdG9uZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzL3ttaWxlc3RvbmVfbnVtYmVyfVwiXSxcbiAgICBsaXN0OiBbXCJHRVQgL2lzc3Vlc1wiXSxcbiAgICBsaXN0QXNzaWduZWVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Fzc2lnbmVlc1wiXSxcbiAgICBsaXN0Q29tbWVudHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2NvbW1lbnRzXCJdLFxuICAgIGxpc3RDb21tZW50c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzXCJdLFxuICAgIGxpc3RFdmVudHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2V2ZW50c1wiXSxcbiAgICBsaXN0RXZlbnRzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvZXZlbnRzXCJdLFxuICAgIGxpc3RFdmVudHNGb3JUaW1lbGluZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS90aW1lbGluZVwiXG4gICAgXSxcbiAgICBsaXN0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9pc3N1ZXNcIl0sXG4gICAgbGlzdEZvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2lzc3Vlc1wiXSxcbiAgICBsaXN0Rm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXNcIl0sXG4gICAgbGlzdExhYmVsc0Zvck1pbGVzdG9uZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXMve21pbGVzdG9uZV9udW1iZXJ9L2xhYmVsc1wiXG4gICAgXSxcbiAgICBsaXN0TGFiZWxzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sYWJlbHNcIl0sXG4gICAgbGlzdExhYmVsc09uSXNzdWU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbGFiZWxzXCJcbiAgICBdLFxuICAgIGxpc3RNaWxlc3RvbmVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXNcIl0sXG4gICAgbG9jazogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbG9ja1wiXSxcbiAgICByZW1vdmVBbGxMYWJlbHM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbGFiZWxzXCJcbiAgICBdLFxuICAgIHJlbW92ZUFzc2lnbmVlczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9hc3NpZ25lZXNcIlxuICAgIF0sXG4gICAgcmVtb3ZlTGFiZWw6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbGFiZWxzL3tuYW1lfVwiXG4gICAgXSxcbiAgICBzZXRMYWJlbHM6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xhYmVsc1wiXSxcbiAgICB1bmxvY2s6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xvY2tcIl0sXG4gICAgdXBkYXRlOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9XCJdLFxuICAgIHVwZGF0ZUNvbW1lbnQ6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIHVwZGF0ZUxhYmVsOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vbGFiZWxzL3tuYW1lfVwiXSxcbiAgICB1cGRhdGVNaWxlc3RvbmU6IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXMve21pbGVzdG9uZV9udW1iZXJ9XCJcbiAgICBdXG4gIH0sXG4gIGxpY2Vuc2VzOiB7XG4gICAgZ2V0OiBbXCJHRVQgL2xpY2Vuc2VzL3tsaWNlbnNlfVwiXSxcbiAgICBnZXRBbGxDb21tb25seVVzZWQ6IFtcIkdFVCAvbGljZW5zZXNcIl0sXG4gICAgZ2V0Rm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9saWNlbnNlXCJdXG4gIH0sXG4gIG1hcmtkb3duOiB7XG4gICAgcmVuZGVyOiBbXCJQT1NUIC9tYXJrZG93blwiXSxcbiAgICByZW5kZXJSYXc6IFtcbiAgICAgIFwiUE9TVCAvbWFya2Rvd24vcmF3XCIsXG4gICAgICB7IGhlYWRlcnM6IHsgXCJjb250ZW50LXR5cGVcIjogXCJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04XCIgfSB9XG4gICAgXVxuICB9LFxuICBtZXRhOiB7XG4gICAgZ2V0OiBbXCJHRVQgL21ldGFcIl0sXG4gICAgZ2V0QWxsVmVyc2lvbnM6IFtcIkdFVCAvdmVyc2lvbnNcIl0sXG4gICAgZ2V0T2N0b2NhdDogW1wiR0VUIC9vY3RvY2F0XCJdLFxuICAgIGdldFplbjogW1wiR0VUIC96ZW5cIl0sXG4gICAgcm9vdDogW1wiR0VUIC9cIl1cbiAgfSxcbiAgbWlncmF0aW9uczoge1xuICAgIGNhbmNlbEltcG9ydDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ltcG9ydFwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6IFwib2N0b2tpdC5yZXN0Lm1pZ3JhdGlvbnMuY2FuY2VsSW1wb3J0KCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvbWlncmF0aW9ucy9zb3VyY2UtaW1wb3J0cyNjYW5jZWwtYW4taW1wb3J0XCJcbiAgICAgIH1cbiAgICBdLFxuICAgIGRlbGV0ZUFyY2hpdmVGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9hcmNoaXZlXCJcbiAgICBdLFxuICAgIGRlbGV0ZUFyY2hpdmVGb3JPcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vYXJjaGl2ZVwiXG4gICAgXSxcbiAgICBkb3dubG9hZEFyY2hpdmVGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vYXJjaGl2ZVwiXG4gICAgXSxcbiAgICBnZXRBcmNoaXZlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vYXJjaGl2ZVwiXG4gICAgXSxcbiAgICBnZXRDb21taXRBdXRob3JzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaW1wb3J0L2F1dGhvcnNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOiBcIm9jdG9raXQucmVzdC5taWdyYXRpb25zLmdldENvbW1pdEF1dGhvcnMoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9taWdyYXRpb25zL3NvdXJjZS1pbXBvcnRzI2dldC1jb21taXQtYXV0aG9yc1wiXG4gICAgICB9XG4gICAgXSxcbiAgICBnZXRJbXBvcnRTdGF0dXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbXBvcnRcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOiBcIm9jdG9raXQucmVzdC5taWdyYXRpb25zLmdldEltcG9ydFN0YXR1cygpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L21pZ3JhdGlvbnMvc291cmNlLWltcG9ydHMjZ2V0LWFuLWltcG9ydC1zdGF0dXNcIlxuICAgICAgfVxuICAgIF0sXG4gICAgZ2V0TGFyZ2VGaWxlczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ltcG9ydC9sYXJnZV9maWxlc1wiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6IFwib2N0b2tpdC5yZXN0Lm1pZ3JhdGlvbnMuZ2V0TGFyZ2VGaWxlcygpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L21pZ3JhdGlvbnMvc291cmNlLWltcG9ydHMjZ2V0LWxhcmdlLWZpbGVzXCJcbiAgICAgIH1cbiAgICBdLFxuICAgIGdldFN0YXR1c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfVwiXSxcbiAgICBnZXRTdGF0dXNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9XCJdLFxuICAgIGxpc3RGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL21pZ3JhdGlvbnNcIl0sXG4gICAgbGlzdEZvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnNcIl0sXG4gICAgbGlzdFJlcG9zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCJcbiAgICBdLFxuICAgIGxpc3RSZXBvc0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCJdLFxuICAgIGxpc3RSZXBvc0ZvclVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wibWlncmF0aW9uc1wiLCBcImxpc3RSZXBvc0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIG1hcENvbW1pdEF1dGhvcjogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaW1wb3J0L2F1dGhvcnMve2F1dGhvcl9pZH1cIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOiBcIm9jdG9raXQucmVzdC5taWdyYXRpb25zLm1hcENvbW1pdEF1dGhvcigpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L21pZ3JhdGlvbnMvc291cmNlLWltcG9ydHMjbWFwLWEtY29tbWl0LWF1dGhvclwiXG4gICAgICB9XG4gICAgXSxcbiAgICBzZXRMZnNQcmVmZXJlbmNlOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbXBvcnQvbGZzXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDogXCJvY3Rva2l0LnJlc3QubWlncmF0aW9ucy5zZXRMZnNQcmVmZXJlbmNlKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvbWlncmF0aW9ucy9zb3VyY2UtaW1wb3J0cyN1cGRhdGUtZ2l0LWxmcy1wcmVmZXJlbmNlXCJcbiAgICAgIH1cbiAgICBdLFxuICAgIHN0YXJ0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvbWlncmF0aW9uc1wiXSxcbiAgICBzdGFydEZvck9yZzogW1wiUE9TVCAvb3Jncy97b3JnfS9taWdyYXRpb25zXCJdLFxuICAgIHN0YXJ0SW1wb3J0OiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vaW1wb3J0XCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDogXCJvY3Rva2l0LnJlc3QubWlncmF0aW9ucy5zdGFydEltcG9ydCgpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L21pZ3JhdGlvbnMvc291cmNlLWltcG9ydHMjc3RhcnQtYW4taW1wb3J0XCJcbiAgICAgIH1cbiAgICBdLFxuICAgIHVubG9ja1JlcG9Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9yZXBvcy97cmVwb19uYW1lfS9sb2NrXCJcbiAgICBdLFxuICAgIHVubG9ja1JlcG9Gb3JPcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3Mve3JlcG9fbmFtZX0vbG9ja1wiXG4gICAgXSxcbiAgICB1cGRhdGVJbXBvcnQ6IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2ltcG9ydFwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6IFwib2N0b2tpdC5yZXN0Lm1pZ3JhdGlvbnMudXBkYXRlSW1wb3J0KCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvbWlncmF0aW9ucy9zb3VyY2UtaW1wb3J0cyN1cGRhdGUtYW4taW1wb3J0XCJcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIG9pZGM6IHtcbiAgICBnZXRPaWRjQ3VzdG9tU3ViVGVtcGxhdGVGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvb2lkYy9jdXN0b21pemF0aW9uL3N1YlwiXG4gICAgXSxcbiAgICB1cGRhdGVPaWRjQ3VzdG9tU3ViVGVtcGxhdGVGb3JPcmc6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvb2lkYy9jdXN0b21pemF0aW9uL3N1YlwiXG4gICAgXVxuICB9LFxuICBvcmdzOiB7XG4gICAgYWRkU2VjdXJpdHlNYW5hZ2VyVGVhbTogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vc2VjdXJpdHktbWFuYWdlcnMvdGVhbXMve3RlYW1fc2x1Z31cIlxuICAgIF0sXG4gICAgYXNzaWduVGVhbVRvT3JnUm9sZTogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3RlYW1zL3t0ZWFtX3NsdWd9L3tyb2xlX2lkfVwiXG4gICAgXSxcbiAgICBhc3NpZ25Vc2VyVG9PcmdSb2xlOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMvdXNlcnMve3VzZXJuYW1lfS97cm9sZV9pZH1cIlxuICAgIF0sXG4gICAgYmxvY2tVc2VyOiBbXCJQVVQgL29yZ3Mve29yZ30vYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgY2FuY2VsSW52aXRhdGlvbjogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfVwiXSxcbiAgICBjaGVja0Jsb2NrZWRVc2VyOiBbXCJHRVQgL29yZ3Mve29yZ30vYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgY2hlY2tNZW1iZXJzaGlwRm9yVXNlcjogW1wiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfVwiXSxcbiAgICBjaGVja1B1YmxpY01lbWJlcnNoaXBGb3JVc2VyOiBbXCJHRVQgL29yZ3Mve29yZ30vcHVibGljX21lbWJlcnMve3VzZXJuYW1lfVwiXSxcbiAgICBjb252ZXJ0TWVtYmVyVG9PdXRzaWRlQ29sbGFib3JhdG9yOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9vdXRzaWRlX2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiXG4gICAgXSxcbiAgICBjcmVhdGVDdXN0b21Pcmdhbml6YXRpb25Sb2xlOiBbXCJQT1NUIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlc1wiXSxcbiAgICBjcmVhdGVJbnZpdGF0aW9uOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2ludml0YXRpb25zXCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlQ3VzdG9tUHJvcGVydGllczogW1wiUEFUQ0ggL29yZ3Mve29yZ30vcHJvcGVydGllcy9zY2hlbWFcIl0sXG4gICAgY3JlYXRlT3JVcGRhdGVDdXN0b21Qcm9wZXJ0aWVzVmFsdWVzRm9yUmVwb3M6IFtcbiAgICAgIFwiUEFUQ0ggL29yZ3Mve29yZ30vcHJvcGVydGllcy92YWx1ZXNcIlxuICAgIF0sXG4gICAgY3JlYXRlT3JVcGRhdGVDdXN0b21Qcm9wZXJ0eTogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vcHJvcGVydGllcy9zY2hlbWEve2N1c3RvbV9wcm9wZXJ0eV9uYW1lfVwiXG4gICAgXSxcbiAgICBjcmVhdGVXZWJob29rOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2hvb2tzXCJdLFxuICAgIGRlbGV0ZTogW1wiREVMRVRFIC9vcmdzL3tvcmd9XCJdLFxuICAgIGRlbGV0ZUN1c3RvbU9yZ2FuaXphdGlvblJvbGU6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy97cm9sZV9pZH1cIlxuICAgIF0sXG4gICAgZGVsZXRlV2ViaG9vazogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfVwiXSxcbiAgICBlbmFibGVPckRpc2FibGVTZWN1cml0eVByb2R1Y3RPbkFsbE9yZ1JlcG9zOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30ve3NlY3VyaXR5X3Byb2R1Y3R9L3tlbmFibGVtZW50fVwiXG4gICAgXSxcbiAgICBnZXQ6IFtcIkdFVCAvb3Jncy97b3JnfVwiXSxcbiAgICBnZXRBbGxDdXN0b21Qcm9wZXJ0aWVzOiBbXCJHRVQgL29yZ3Mve29yZ30vcHJvcGVydGllcy9zY2hlbWFcIl0sXG4gICAgZ2V0Q3VzdG9tUHJvcGVydHk6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvc2NoZW1hL3tjdXN0b21fcHJvcGVydHlfbmFtZX1cIlxuICAgIF0sXG4gICAgZ2V0TWVtYmVyc2hpcEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvbWVtYmVyc2hpcHMvb3Jncy97b3JnfVwiXSxcbiAgICBnZXRNZW1iZXJzaGlwRm9yVXNlcjogW1wiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnNoaXBzL3t1c2VybmFtZX1cIl0sXG4gICAgZ2V0T3JnUm9sZTogW1wiR0VUIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy97cm9sZV9pZH1cIl0sXG4gICAgZ2V0V2ViaG9vazogW1wiR0VUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfVwiXSxcbiAgICBnZXRXZWJob29rQ29uZmlnRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L2NvbmZpZ1wiXSxcbiAgICBnZXRXZWJob29rRGVsaXZlcnk6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzL3tkZWxpdmVyeV9pZH1cIlxuICAgIF0sXG4gICAgbGlzdDogW1wiR0VUIC9vcmdhbml6YXRpb25zXCJdLFxuICAgIGxpc3RBcHBJbnN0YWxsYXRpb25zOiBbXCJHRVQgL29yZ3Mve29yZ30vaW5zdGFsbGF0aW9uc1wiXSxcbiAgICBsaXN0QmxvY2tlZFVzZXJzOiBbXCJHRVQgL29yZ3Mve29yZ30vYmxvY2tzXCJdLFxuICAgIGxpc3RDdXN0b21Qcm9wZXJ0aWVzVmFsdWVzRm9yUmVwb3M6IFtcIkdFVCAvb3Jncy97b3JnfS9wcm9wZXJ0aWVzL3ZhbHVlc1wiXSxcbiAgICBsaXN0RmFpbGVkSW52aXRhdGlvbnM6IFtcIkdFVCAvb3Jncy97b3JnfS9mYWlsZWRfaW52aXRhdGlvbnNcIl0sXG4gICAgbGlzdEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvb3Jnc1wiXSxcbiAgICBsaXN0Rm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L29yZ3NcIl0sXG4gICAgbGlzdEludml0YXRpb25UZWFtczogW1wiR0VUIC9vcmdzL3tvcmd9L2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfS90ZWFtc1wiXSxcbiAgICBsaXN0TWVtYmVyczogW1wiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnNcIl0sXG4gICAgbGlzdE1lbWJlcnNoaXBzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9tZW1iZXJzaGlwcy9vcmdzXCJdLFxuICAgIGxpc3RPcmdSb2xlVGVhbXM6IFtcIkdFVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMve3JvbGVfaWR9L3RlYW1zXCJdLFxuICAgIGxpc3RPcmdSb2xlVXNlcnM6IFtcIkdFVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMve3JvbGVfaWR9L3VzZXJzXCJdLFxuICAgIGxpc3RPcmdSb2xlczogW1wiR0VUIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlc1wiXSxcbiAgICBsaXN0T3JnYW5pemF0aW9uRmluZUdyYWluZWRQZXJtaXNzaW9uczogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLWZpbmUtZ3JhaW5lZC1wZXJtaXNzaW9uc1wiXG4gICAgXSxcbiAgICBsaXN0T3V0c2lkZUNvbGxhYm9yYXRvcnM6IFtcIkdFVCAvb3Jncy97b3JnfS9vdXRzaWRlX2NvbGxhYm9yYXRvcnNcIl0sXG4gICAgbGlzdFBhdEdyYW50UmVwb3NpdG9yaWVzOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW5zL3twYXRfaWR9L3JlcG9zaXRvcmllc1wiXG4gICAgXSxcbiAgICBsaXN0UGF0R3JhbnRSZXF1ZXN0UmVwb3NpdG9yaWVzOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW4tcmVxdWVzdHMve3BhdF9yZXF1ZXN0X2lkfS9yZXBvc2l0b3JpZXNcIlxuICAgIF0sXG4gICAgbGlzdFBhdEdyYW50UmVxdWVzdHM6IFtcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW4tcmVxdWVzdHNcIl0sXG4gICAgbGlzdFBhdEdyYW50czogW1wiR0VUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbnNcIl0sXG4gICAgbGlzdFBlbmRpbmdJbnZpdGF0aW9uczogW1wiR0VUIC9vcmdzL3tvcmd9L2ludml0YXRpb25zXCJdLFxuICAgIGxpc3RQdWJsaWNNZW1iZXJzOiBbXCJHRVQgL29yZ3Mve29yZ30vcHVibGljX21lbWJlcnNcIl0sXG4gICAgbGlzdFNlY3VyaXR5TWFuYWdlclRlYW1zOiBbXCJHRVQgL29yZ3Mve29yZ30vc2VjdXJpdHktbWFuYWdlcnNcIl0sXG4gICAgbGlzdFdlYmhvb2tEZWxpdmVyaWVzOiBbXCJHRVQgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXNcIl0sXG4gICAgbGlzdFdlYmhvb2tzOiBbXCJHRVQgL29yZ3Mve29yZ30vaG9va3NcIl0sXG4gICAgcGF0Y2hDdXN0b21Pcmdhbml6YXRpb25Sb2xlOiBbXG4gICAgICBcIlBBVENIIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy97cm9sZV9pZH1cIlxuICAgIF0sXG4gICAgcGluZ1dlYmhvb2s6IFtcIlBPU1QgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L3BpbmdzXCJdLFxuICAgIHJlZGVsaXZlcldlYmhvb2tEZWxpdmVyeTogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzL3tkZWxpdmVyeV9pZH0vYXR0ZW1wdHNcIlxuICAgIF0sXG4gICAgcmVtb3ZlQ3VzdG9tUHJvcGVydHk6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvc2NoZW1hL3tjdXN0b21fcHJvcGVydHlfbmFtZX1cIlxuICAgIF0sXG4gICAgcmVtb3ZlTWVtYmVyOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vbWVtYmVycy97dXNlcm5hbWV9XCJdLFxuICAgIHJlbW92ZU1lbWJlcnNoaXBGb3JVc2VyOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiXSxcbiAgICByZW1vdmVPdXRzaWRlQ29sbGFib3JhdG9yOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9vdXRzaWRlX2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiXG4gICAgXSxcbiAgICByZW1vdmVQdWJsaWNNZW1iZXJzaGlwRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3B1YmxpY19tZW1iZXJzL3t1c2VybmFtZX1cIlxuICAgIF0sXG4gICAgcmVtb3ZlU2VjdXJpdHlNYW5hZ2VyVGVhbTogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vc2VjdXJpdHktbWFuYWdlcnMvdGVhbXMve3RlYW1fc2x1Z31cIlxuICAgIF0sXG4gICAgcmV2aWV3UGF0R3JhbnRSZXF1ZXN0OiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2VuLXJlcXVlc3RzL3twYXRfcmVxdWVzdF9pZH1cIlxuICAgIF0sXG4gICAgcmV2aWV3UGF0R3JhbnRSZXF1ZXN0c0luQnVsazogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbi1yZXF1ZXN0c1wiXG4gICAgXSxcbiAgICByZXZva2VBbGxPcmdSb2xlc1RlYW06IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy90ZWFtcy97dGVhbV9zbHVnfVwiXG4gICAgXSxcbiAgICByZXZva2VBbGxPcmdSb2xlc1VzZXI6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy91c2Vycy97dXNlcm5hbWV9XCJcbiAgICBdLFxuICAgIHJldm9rZU9yZ1JvbGVUZWFtOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMvdGVhbXMve3RlYW1fc2x1Z30ve3JvbGVfaWR9XCJcbiAgICBdLFxuICAgIHJldm9rZU9yZ1JvbGVVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMvdXNlcnMve3VzZXJuYW1lfS97cm9sZV9pZH1cIlxuICAgIF0sXG4gICAgc2V0TWVtYmVyc2hpcEZvclVzZXI6IFtcIlBVVCAvb3Jncy97b3JnfS9tZW1iZXJzaGlwcy97dXNlcm5hbWV9XCJdLFxuICAgIHNldFB1YmxpY01lbWJlcnNoaXBGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vcHVibGljX21lbWJlcnMve3VzZXJuYW1lfVwiXG4gICAgXSxcbiAgICB1bmJsb2NrVXNlcjogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2Jsb2Nrcy97dXNlcm5hbWV9XCJdLFxuICAgIHVwZGF0ZTogW1wiUEFUQ0ggL29yZ3Mve29yZ31cIl0sXG4gICAgdXBkYXRlTWVtYmVyc2hpcEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBBVENIIC91c2VyL21lbWJlcnNoaXBzL29yZ3Mve29yZ31cIlxuICAgIF0sXG4gICAgdXBkYXRlUGF0QWNjZXNzOiBbXCJQT1NUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbnMve3BhdF9pZH1cIl0sXG4gICAgdXBkYXRlUGF0QWNjZXNzZXM6IFtcIlBPU1QgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2Vuc1wiXSxcbiAgICB1cGRhdGVXZWJob29rOiBbXCJQQVRDSCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgdXBkYXRlV2ViaG9va0NvbmZpZ0Zvck9yZzogW1wiUEFUQ0ggL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L2NvbmZpZ1wiXVxuICB9LFxuICBwYWNrYWdlczoge1xuICAgIGRlbGV0ZVBhY2thZ2VGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX1cIlxuICAgIF0sXG4gICAgZGVsZXRlUGFja2FnZUZvck9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX1cIlxuICAgIF0sXG4gICAgZGVsZXRlUGFja2FnZUZvclVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9XCJcbiAgICBdLFxuICAgIGRlbGV0ZVBhY2thZ2VWZXJzaW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZVBhY2thZ2VWZXJzaW9uRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfVwiXG4gICAgXSxcbiAgICBkZWxldGVQYWNrYWdlVmVyc2lvbkZvclVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9XCJcbiAgICBdLFxuICAgIGdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvckFQYWNrYWdlT3duZWRCeUFuT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInBhY2thZ2VzXCIsIFwiZ2V0QWxsUGFja2FnZVZlcnNpb25zRm9yUGFja2FnZU93bmVkQnlPcmdcIl0gfVxuICAgIF0sXG4gICAgZ2V0QWxsUGFja2FnZVZlcnNpb25zRm9yQVBhY2thZ2VPd25lZEJ5VGhlQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgcmVuYW1lZDogW1xuICAgICAgICAgIFwicGFja2FnZXNcIixcbiAgICAgICAgICBcImdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvclBhY2thZ2VPd25lZEJ5QXV0aGVudGljYXRlZFVzZXJcIlxuICAgICAgICBdXG4gICAgICB9XG4gICAgXSxcbiAgICBnZXRBbGxQYWNrYWdlVmVyc2lvbnNGb3JQYWNrYWdlT3duZWRCeUF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiXG4gICAgXSxcbiAgICBnZXRBbGxQYWNrYWdlVmVyc2lvbnNGb3JQYWNrYWdlT3duZWRCeU9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIlxuICAgIF0sXG4gICAgZ2V0QWxsUGFja2FnZVZlcnNpb25zRm9yUGFja2FnZU93bmVkQnlVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiXG4gICAgXSxcbiAgICBnZXRQYWNrYWdlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9XCJcbiAgICBdLFxuICAgIGdldFBhY2thZ2VGb3JPcmdhbml6YXRpb246IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9XCJcbiAgICBdLFxuICAgIGdldFBhY2thZ2VGb3JVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfVwiXG4gICAgXSxcbiAgICBnZXRQYWNrYWdlVmVyc2lvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfVwiXG4gICAgXSxcbiAgICBnZXRQYWNrYWdlVmVyc2lvbkZvck9yZ2FuaXphdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH1cIlxuICAgIF0sXG4gICAgZ2V0UGFja2FnZVZlcnNpb25Gb3JVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfVwiXG4gICAgXSxcbiAgICBsaXN0RG9ja2VyTWlncmF0aW9uQ29uZmxpY3RpbmdQYWNrYWdlc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9kb2NrZXIvY29uZmxpY3RzXCJcbiAgICBdLFxuICAgIGxpc3REb2NrZXJNaWdyYXRpb25Db25mbGljdGluZ1BhY2thZ2VzRm9yT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9kb2NrZXIvY29uZmxpY3RzXCJcbiAgICBdLFxuICAgIGxpc3REb2NrZXJNaWdyYXRpb25Db25mbGljdGluZ1BhY2thZ2VzRm9yVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZG9ja2VyL2NvbmZsaWN0c1wiXG4gICAgXSxcbiAgICBsaXN0UGFja2FnZXNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3BhY2thZ2VzXCJdLFxuICAgIGxpc3RQYWNrYWdlc0Zvck9yZ2FuaXphdGlvbjogW1wiR0VUIC9vcmdzL3tvcmd9L3BhY2thZ2VzXCJdLFxuICAgIGxpc3RQYWNrYWdlc0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlc1wiXSxcbiAgICByZXN0b3JlUGFja2FnZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBPU1QgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vcmVzdG9yZXs/dG9rZW59XCJcbiAgICBdLFxuICAgIHJlc3RvcmVQYWNrYWdlRm9yT3JnOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vcmVzdG9yZXs/dG9rZW59XCJcbiAgICBdLFxuICAgIHJlc3RvcmVQYWNrYWdlRm9yVXNlcjogW1xuICAgICAgXCJQT1NUIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3Jlc3RvcmV7P3Rva2VufVwiXG4gICAgXSxcbiAgICByZXN0b3JlUGFja2FnZVZlcnNpb25Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQT1NUIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9L3Jlc3RvcmVcIlxuICAgIF0sXG4gICAgcmVzdG9yZVBhY2thZ2VWZXJzaW9uRm9yT3JnOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH0vcmVzdG9yZVwiXG4gICAgXSxcbiAgICByZXN0b3JlUGFja2FnZVZlcnNpb25Gb3JVc2VyOiBbXG4gICAgICBcIlBPU1QgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH0vcmVzdG9yZVwiXG4gICAgXVxuICB9LFxuICBwcm9qZWN0czoge1xuICAgIGFkZENvbGxhYm9yYXRvcjogW1wiUFVUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sbGFib3JhdG9ycy97dXNlcm5hbWV9XCJdLFxuICAgIGNyZWF0ZUNhcmQ6IFtcIlBPU1QgL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH0vY2FyZHNcIl0sXG4gICAgY3JlYXRlQ29sdW1uOiBbXCJQT1NUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sdW1uc1wiXSxcbiAgICBjcmVhdGVGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9wcm9qZWN0c1wiXSxcbiAgICBjcmVhdGVGb3JPcmc6IFtcIlBPU1QgL29yZ3Mve29yZ30vcHJvamVjdHNcIl0sXG4gICAgY3JlYXRlRm9yUmVwbzogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJvamVjdHNcIl0sXG4gICAgZGVsZXRlOiBbXCJERUxFVEUgL3Byb2plY3RzL3twcm9qZWN0X2lkfVwiXSxcbiAgICBkZWxldGVDYXJkOiBbXCJERUxFVEUgL3Byb2plY3RzL2NvbHVtbnMvY2FyZHMve2NhcmRfaWR9XCJdLFxuICAgIGRlbGV0ZUNvbHVtbjogW1wiREVMRVRFIC9wcm9qZWN0cy9jb2x1bW5zL3tjb2x1bW5faWR9XCJdLFxuICAgIGdldDogW1wiR0VUIC9wcm9qZWN0cy97cHJvamVjdF9pZH1cIl0sXG4gICAgZ2V0Q2FyZDogW1wiR0VUIC9wcm9qZWN0cy9jb2x1bW5zL2NhcmRzL3tjYXJkX2lkfVwiXSxcbiAgICBnZXRDb2x1bW46IFtcIkdFVCAvcHJvamVjdHMvY29sdW1ucy97Y29sdW1uX2lkfVwiXSxcbiAgICBnZXRQZXJtaXNzaW9uRm9yVXNlcjogW1xuICAgICAgXCJHRVQgL3Byb2plY3RzL3twcm9qZWN0X2lkfS9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX0vcGVybWlzc2lvblwiXG4gICAgXSxcbiAgICBsaXN0Q2FyZHM6IFtcIkdFVCAvcHJvamVjdHMvY29sdW1ucy97Y29sdW1uX2lkfS9jYXJkc1wiXSxcbiAgICBsaXN0Q29sbGFib3JhdG9yczogW1wiR0VUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sbGFib3JhdG9yc1wiXSxcbiAgICBsaXN0Q29sdW1uczogW1wiR0VUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sdW1uc1wiXSxcbiAgICBsaXN0Rm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vcHJvamVjdHNcIl0sXG4gICAgbGlzdEZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJvamVjdHNcIl0sXG4gICAgbGlzdEZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wcm9qZWN0c1wiXSxcbiAgICBtb3ZlQ2FyZDogW1wiUE9TVCAvcHJvamVjdHMvY29sdW1ucy9jYXJkcy97Y2FyZF9pZH0vbW92ZXNcIl0sXG4gICAgbW92ZUNvbHVtbjogW1wiUE9TVCAvcHJvamVjdHMvY29sdW1ucy97Y29sdW1uX2lkfS9tb3Zlc1wiXSxcbiAgICByZW1vdmVDb2xsYWJvcmF0b3I6IFtcbiAgICAgIFwiREVMRVRFIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sbGFib3JhdG9ycy97dXNlcm5hbWV9XCJcbiAgICBdLFxuICAgIHVwZGF0ZTogW1wiUEFUQ0ggL3Byb2plY3RzL3twcm9qZWN0X2lkfVwiXSxcbiAgICB1cGRhdGVDYXJkOiBbXCJQQVRDSCAvcHJvamVjdHMvY29sdW1ucy9jYXJkcy97Y2FyZF9pZH1cIl0sXG4gICAgdXBkYXRlQ29sdW1uOiBbXCJQQVRDSCAvcHJvamVjdHMvY29sdW1ucy97Y29sdW1uX2lkfVwiXVxuICB9LFxuICBwdWxsczoge1xuICAgIGNoZWNrSWZNZXJnZWQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9tZXJnZVwiXSxcbiAgICBjcmVhdGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzXCJdLFxuICAgIGNyZWF0ZVJlcGx5Rm9yUmV2aWV3Q29tbWVudDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZXBsaWVzXCJcbiAgICBdLFxuICAgIGNyZWF0ZVJldmlldzogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzXCJdLFxuICAgIGNyZWF0ZVJldmlld0NvbW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb21tZW50c1wiXG4gICAgXSxcbiAgICBkZWxldGVQZW5kaW5nUmV2aWV3OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzL3tyZXZpZXdfaWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZVJldmlld0NvbW1lbnQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy9jb21tZW50cy97Y29tbWVudF9pZH1cIlxuICAgIF0sXG4gICAgZGlzbWlzc1JldmlldzogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfS9kaXNtaXNzYWxzXCJcbiAgICBdLFxuICAgIGdldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9XCJdLFxuICAgIGdldFJldmlldzogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfVwiXG4gICAgXSxcbiAgICBnZXRSZXZpZXdDb21tZW50OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBsaXN0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzXCJdLFxuICAgIGxpc3RDb21tZW50c0ZvclJldmlldzogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfS9jb21tZW50c1wiXG4gICAgXSxcbiAgICBsaXN0Q29tbWl0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2NvbW1pdHNcIl0sXG4gICAgbGlzdEZpbGVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vZmlsZXNcIl0sXG4gICAgbGlzdFJlcXVlc3RlZFJldmlld2VyczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmVxdWVzdGVkX3Jldmlld2Vyc1wiXG4gICAgXSxcbiAgICBsaXN0UmV2aWV3Q29tbWVudHM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2NvbW1lbnRzXCJcbiAgICBdLFxuICAgIGxpc3RSZXZpZXdDb21tZW50c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHNcIl0sXG4gICAgbGlzdFJldmlld3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzXCJdLFxuICAgIG1lcmdlOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vbWVyZ2VcIl0sXG4gICAgcmVtb3ZlUmVxdWVzdGVkUmV2aWV3ZXJzOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXF1ZXN0ZWRfcmV2aWV3ZXJzXCJcbiAgICBdLFxuICAgIHJlcXVlc3RSZXZpZXdlcnM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXF1ZXN0ZWRfcmV2aWV3ZXJzXCJcbiAgICBdLFxuICAgIHN1Ym1pdFJldmlldzogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH0vZXZlbnRzXCJcbiAgICBdLFxuICAgIHVwZGF0ZTogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn1cIl0sXG4gICAgdXBkYXRlQnJhbmNoOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS91cGRhdGUtYnJhbmNoXCJcbiAgICBdLFxuICAgIHVwZGF0ZVJldmlldzogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfVwiXG4gICAgXSxcbiAgICB1cGRhdGVSZXZpZXdDb21tZW50OiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy9jb21tZW50cy97Y29tbWVudF9pZH1cIlxuICAgIF1cbiAgfSxcbiAgcmF0ZUxpbWl0OiB7IGdldDogW1wiR0VUIC9yYXRlX2xpbWl0XCJdIH0sXG4gIHJlYWN0aW9uczoge1xuICAgIGNyZWF0ZUZvckNvbW1pdENvbW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiXG4gICAgXSxcbiAgICBjcmVhdGVGb3JJc3N1ZTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vcmVhY3Rpb25zXCJcbiAgICBdLFxuICAgIGNyZWF0ZUZvcklzc3VlQ29tbWVudDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiXG4gICAgXSxcbiAgICBjcmVhdGVGb3JQdWxsUmVxdWVzdFJldmlld0NvbW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiXG4gICAgXSxcbiAgICBjcmVhdGVGb3JSZWxlYXNlOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfS9yZWFjdGlvbnNcIlxuICAgIF0sXG4gICAgY3JlYXRlRm9yVGVhbURpc2N1c3Npb25Db21tZW50SW5Pcmc6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn0vcmVhY3Rpb25zXCJcbiAgICBdLFxuICAgIGNyZWF0ZUZvclRlYW1EaXNjdXNzaW9uSW5Pcmc6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L3JlYWN0aW9uc1wiXG4gICAgXSxcbiAgICBkZWxldGVGb3JDb21taXRDb21tZW50OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZUZvcklzc3VlOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZUZvcklzc3VlQ29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zL3tyZWFjdGlvbl9pZH1cIlxuICAgIF0sXG4gICAgZGVsZXRlRm9yUHVsbFJlcXVlc3RDb21tZW50OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZUZvclJlbGVhc2U6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vcmVhY3Rpb25zL3tyZWFjdGlvbl9pZH1cIlxuICAgIF0sXG4gICAgZGVsZXRlRm9yVGVhbURpc2N1c3Npb246IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vcmVhY3Rpb25zL3tyZWFjdGlvbl9pZH1cIlxuICAgIF0sXG4gICAgZGVsZXRlRm9yVGVhbURpc2N1c3Npb25Db21tZW50OiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn0vcmVhY3Rpb25zL3tyZWFjdGlvbl9pZH1cIlxuICAgIF0sXG4gICAgbGlzdEZvckNvbW1pdENvbW1lbnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zXCJcbiAgICBdLFxuICAgIGxpc3RGb3JJc3N1ZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vcmVhY3Rpb25zXCJdLFxuICAgIGxpc3RGb3JJc3N1ZUNvbW1lbnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiXG4gICAgXSxcbiAgICBsaXN0Rm9yUHVsbFJlcXVlc3RSZXZpZXdDb21tZW50OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiXG4gICAgXSxcbiAgICBsaXN0Rm9yUmVsZWFzZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfS9yZWFjdGlvbnNcIlxuICAgIF0sXG4gICAgbGlzdEZvclRlYW1EaXNjdXNzaW9uQ29tbWVudEluT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn0vcmVhY3Rpb25zXCJcbiAgICBdLFxuICAgIGxpc3RGb3JUZWFtRGlzY3Vzc2lvbkluT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L3JlYWN0aW9uc1wiXG4gICAgXVxuICB9LFxuICByZXBvczoge1xuICAgIGFjY2VwdEludml0YXRpb246IFtcbiAgICAgIFwiUEFUQ0ggL3VzZXIvcmVwb3NpdG9yeV9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJyZXBvc1wiLCBcImFjY2VwdEludml0YXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBhY2NlcHRJbnZpdGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUEFUQ0ggL3VzZXIvcmVwb3NpdG9yeV9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIlxuICAgIF0sXG4gICAgYWRkQXBwQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL2FwcHNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwiYXBwc1wiIH1cbiAgICBdLFxuICAgIGFkZENvbGxhYm9yYXRvcjogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX1cIl0sXG4gICAgYWRkU3RhdHVzQ2hlY2tDb250ZXh0czogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3MvY29udGV4dHNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwiY29udGV4dHNcIiB9XG4gICAgXSxcbiAgICBhZGRUZWFtQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL3RlYW1zXCIsXG4gICAgICB7fSxcbiAgICAgIHsgbWFwVG9EYXRhOiBcInRlYW1zXCIgfVxuICAgIF0sXG4gICAgYWRkVXNlckFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy91c2Vyc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJ1c2Vyc1wiIH1cbiAgICBdLFxuICAgIGNhbmNlbFBhZ2VzRGVwbG95bWVudDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9kZXBsb3ltZW50cy97cGFnZXNfZGVwbG95bWVudF9pZH0vY2FuY2VsXCJcbiAgICBdLFxuICAgIGNoZWNrQXV0b21hdGVkU2VjdXJpdHlGaXhlczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9tYXRlZC1zZWN1cml0eS1maXhlc1wiXG4gICAgXSxcbiAgICBjaGVja0NvbGxhYm9yYXRvcjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX1cIl0sXG4gICAgY2hlY2tWdWxuZXJhYmlsaXR5QWxlcnRzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdnVsbmVyYWJpbGl0eS1hbGVydHNcIlxuICAgIF0sXG4gICAgY29kZW93bmVyc0Vycm9yczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlb3duZXJzL2Vycm9yc1wiXSxcbiAgICBjb21wYXJlQ29tbWl0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21wYXJlL3tiYXNlfS4uLntoZWFkfVwiXSxcbiAgICBjb21wYXJlQ29tbWl0c1dpdGhCYXNlaGVhZDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbXBhcmUve2Jhc2VoZWFkfVwiXG4gICAgXSxcbiAgICBjcmVhdGVBdXRvbGluazogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXV0b2xpbmtzXCJdLFxuICAgIGNyZWF0ZUNvbW1pdENvbW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97Y29tbWl0X3NoYX0vY29tbWVudHNcIlxuICAgIF0sXG4gICAgY3JlYXRlQ29tbWl0U2lnbmF0dXJlUHJvdGVjdGlvbjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3NpZ25hdHVyZXNcIlxuICAgIF0sXG4gICAgY3JlYXRlQ29tbWl0U3RhdHVzOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGF0dXNlcy97c2hhfVwiXSxcbiAgICBjcmVhdGVEZXBsb3lLZXk6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2tleXNcIl0sXG4gICAgY3JlYXRlRGVwbG95bWVudDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHNcIl0sXG4gICAgY3JlYXRlRGVwbG95bWVudEJyYW5jaFBvbGljeTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnQtYnJhbmNoLXBvbGljaWVzXCJcbiAgICBdLFxuICAgIGNyZWF0ZURlcGxveW1lbnRQcm90ZWN0aW9uUnVsZTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnRfcHJvdGVjdGlvbl9ydWxlc1wiXG4gICAgXSxcbiAgICBjcmVhdGVEZXBsb3ltZW50U3RhdHVzOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGxveW1lbnRzL3tkZXBsb3ltZW50X2lkfS9zdGF0dXNlc1wiXG4gICAgXSxcbiAgICBjcmVhdGVEaXNwYXRjaEV2ZW50OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kaXNwYXRjaGVzXCJdLFxuICAgIGNyZWF0ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL3JlcG9zXCJdLFxuICAgIGNyZWF0ZUZvcms6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ZvcmtzXCJdLFxuICAgIGNyZWF0ZUluT3JnOiBbXCJQT1NUIC9vcmdzL3tvcmd9L3JlcG9zXCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlQ3VzdG9tUHJvcGVydGllc1ZhbHVlczogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJvcGVydGllcy92YWx1ZXNcIlxuICAgIF0sXG4gICAgY3JlYXRlT3JVcGRhdGVFbnZpcm9ubWVudDogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX1cIlxuICAgIF0sXG4gICAgY3JlYXRlT3JVcGRhdGVGaWxlQ29udGVudHM6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29udGVudHMve3BhdGh9XCJdLFxuICAgIGNyZWF0ZU9yZ1J1bGVzZXQ6IFtcIlBPU1QgL29yZ3Mve29yZ30vcnVsZXNldHNcIl0sXG4gICAgY3JlYXRlUGFnZXNEZXBsb3ltZW50OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9kZXBsb3ltZW50c1wiXSxcbiAgICBjcmVhdGVQYWdlc1NpdGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzXCJdLFxuICAgIGNyZWF0ZVJlbGVhc2U6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzXCJdLFxuICAgIGNyZWF0ZVJlcG9SdWxlc2V0OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlc2V0c1wiXSxcbiAgICBjcmVhdGVUYWdQcm90ZWN0aW9uOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YWdzL3Byb3RlY3Rpb25cIl0sXG4gICAgY3JlYXRlVXNpbmdUZW1wbGF0ZTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97dGVtcGxhdGVfb3duZXJ9L3t0ZW1wbGF0ZV9yZXBvfS9nZW5lcmF0ZVwiXG4gICAgXSxcbiAgICBjcmVhdGVXZWJob29rOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rc1wiXSxcbiAgICBkZWNsaW5lSW52aXRhdGlvbjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvcmVwb3NpdG9yeV9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJyZXBvc1wiLCBcImRlY2xpbmVJbnZpdGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfVxuICAgIF0sXG4gICAgZGVjbGluZUludml0YXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvcmVwb3NpdG9yeV9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIlxuICAgIF0sXG4gICAgZGVsZXRlOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99XCJdLFxuICAgIGRlbGV0ZUFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zXCJcbiAgICBdLFxuICAgIGRlbGV0ZUFkbWluQnJhbmNoUHJvdGVjdGlvbjogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vZW5mb3JjZV9hZG1pbnNcIlxuICAgIF0sXG4gICAgZGVsZXRlQW5FbnZpcm9ubWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX1cIlxuICAgIF0sXG4gICAgZGVsZXRlQXV0b2xpbms6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYXV0b2xpbmtzL3thdXRvbGlua19pZH1cIl0sXG4gICAgZGVsZXRlQnJhbmNoUHJvdGVjdGlvbjogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb25cIlxuICAgIF0sXG4gICAgZGVsZXRlQ29tbWl0Q29tbWVudDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgZGVsZXRlQ29tbWl0U2lnbmF0dXJlUHJvdGVjdGlvbjogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc2lnbmF0dXJlc1wiXG4gICAgXSxcbiAgICBkZWxldGVEZXBsb3lLZXk6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30va2V5cy97a2V5X2lkfVwiXSxcbiAgICBkZWxldGVEZXBsb3ltZW50OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHMve2RlcGxveW1lbnRfaWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZURlcGxveW1lbnRCcmFuY2hQb2xpY3k6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnQtYnJhbmNoLXBvbGljaWVzL3ticmFuY2hfcG9saWN5X2lkfVwiXG4gICAgXSxcbiAgICBkZWxldGVGaWxlOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbnRlbnRzL3twYXRofVwiXSxcbiAgICBkZWxldGVJbnZpdGF0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZU9yZ1J1bGVzZXQ6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9ydWxlc2V0cy97cnVsZXNldF9pZH1cIl0sXG4gICAgZGVsZXRlUGFnZXNTaXRlOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzXCJdLFxuICAgIGRlbGV0ZVB1bGxSZXF1ZXN0UmV2aWV3UHJvdGVjdGlvbjogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfcHVsbF9yZXF1ZXN0X3Jldmlld3NcIlxuICAgIF0sXG4gICAgZGVsZXRlUmVsZWFzZTogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH1cIl0sXG4gICAgZGVsZXRlUmVsZWFzZUFzc2V0OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMvYXNzZXRzL3thc3NldF9pZH1cIlxuICAgIF0sXG4gICAgZGVsZXRlUmVwb1J1bGVzZXQ6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHMve3J1bGVzZXRfaWR9XCJdLFxuICAgIGRlbGV0ZVRhZ1Byb3RlY3Rpb246IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YWdzL3Byb3RlY3Rpb24ve3RhZ19wcm90ZWN0aW9uX2lkfVwiXG4gICAgXSxcbiAgICBkZWxldGVXZWJob29rOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfVwiXSxcbiAgICBkaXNhYmxlQXV0b21hdGVkU2VjdXJpdHlGaXhlczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9tYXRlZC1zZWN1cml0eS1maXhlc1wiXG4gICAgXSxcbiAgICBkaXNhYmxlRGVwbG95bWVudFByb3RlY3Rpb25SdWxlOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50X3Byb3RlY3Rpb25fcnVsZXMve3Byb3RlY3Rpb25fcnVsZV9pZH1cIlxuICAgIF0sXG4gICAgZGlzYWJsZVByaXZhdGVWdWxuZXJhYmlsaXR5UmVwb3J0aW5nOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcHJpdmF0ZS12dWxuZXJhYmlsaXR5LXJlcG9ydGluZ1wiXG4gICAgXSxcbiAgICBkaXNhYmxlVnVsbmVyYWJpbGl0eUFsZXJ0czogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Z1bG5lcmFiaWxpdHktYWxlcnRzXCJcbiAgICBdLFxuICAgIGRvd25sb2FkQXJjaGl2ZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3ppcGJhbGwve3JlZn1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJyZXBvc1wiLCBcImRvd25sb2FkWmlwYmFsbEFyY2hpdmVcIl0gfVxuICAgIF0sXG4gICAgZG93bmxvYWRUYXJiYWxsQXJjaGl2ZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YXJiYWxsL3tyZWZ9XCJdLFxuICAgIGRvd25sb2FkWmlwYmFsbEFyY2hpdmU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vemlwYmFsbC97cmVmfVwiXSxcbiAgICBlbmFibGVBdXRvbWF0ZWRTZWN1cml0eUZpeGVzOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXV0b21hdGVkLXNlY3VyaXR5LWZpeGVzXCJcbiAgICBdLFxuICAgIGVuYWJsZVByaXZhdGVWdWxuZXJhYmlsaXR5UmVwb3J0aW5nOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJpdmF0ZS12dWxuZXJhYmlsaXR5LXJlcG9ydGluZ1wiXG4gICAgXSxcbiAgICBlbmFibGVWdWxuZXJhYmlsaXR5QWxlcnRzOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vdnVsbmVyYWJpbGl0eS1hbGVydHNcIlxuICAgIF0sXG4gICAgZ2VuZXJhdGVSZWxlYXNlTm90ZXM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMvZ2VuZXJhdGUtbm90ZXNcIlxuICAgIF0sXG4gICAgZ2V0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99XCJdLFxuICAgIGdldEFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zXCJcbiAgICBdLFxuICAgIGdldEFkbWluQnJhbmNoUHJvdGVjdGlvbjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vZW5mb3JjZV9hZG1pbnNcIlxuICAgIF0sXG4gICAgZ2V0QWxsRGVwbG95bWVudFByb3RlY3Rpb25SdWxlczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudF9wcm90ZWN0aW9uX3J1bGVzXCJcbiAgICBdLFxuICAgIGdldEFsbEVudmlyb25tZW50czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHNcIl0sXG4gICAgZ2V0QWxsU3RhdHVzQ2hlY2tDb250ZXh0czogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrcy9jb250ZXh0c1wiXG4gICAgXSxcbiAgICBnZXRBbGxUb3BpY3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdG9waWNzXCJdLFxuICAgIGdldEFwcHNXaXRoQWNjZXNzVG9Qcm90ZWN0ZWRCcmFuY2g6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy9hcHBzXCJcbiAgICBdLFxuICAgIGdldEF1dG9saW5rOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9saW5rcy97YXV0b2xpbmtfaWR9XCJdLFxuICAgIGdldEJyYW5jaDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofVwiXSxcbiAgICBnZXRCcmFuY2hQcm90ZWN0aW9uOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvblwiXG4gICAgXSxcbiAgICBnZXRCcmFuY2hSdWxlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlcy9icmFuY2hlcy97YnJhbmNofVwiXSxcbiAgICBnZXRDbG9uZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdHJhZmZpYy9jbG9uZXNcIl0sXG4gICAgZ2V0Q29kZUZyZXF1ZW5jeVN0YXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXRzL2NvZGVfZnJlcXVlbmN5XCJdLFxuICAgIGdldENvbGxhYm9yYXRvclBlcm1pc3Npb25MZXZlbDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfS9wZXJtaXNzaW9uXCJcbiAgICBdLFxuICAgIGdldENvbWJpbmVkU3RhdHVzRm9yUmVmOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vc3RhdHVzXCJdLFxuICAgIGdldENvbW1pdDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9XCJdLFxuICAgIGdldENvbW1pdEFjdGl2aXR5U3RhdHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3RhdHMvY29tbWl0X2FjdGl2aXR5XCJdLFxuICAgIGdldENvbW1pdENvbW1lbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIGdldENvbW1pdFNpZ25hdHVyZVByb3RlY3Rpb246IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3NpZ25hdHVyZXNcIlxuICAgIF0sXG4gICAgZ2V0Q29tbXVuaXR5UHJvZmlsZU1ldHJpY3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbXVuaXR5L3Byb2ZpbGVcIl0sXG4gICAgZ2V0Q29udGVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb250ZW50cy97cGF0aH1cIl0sXG4gICAgZ2V0Q29udHJpYnV0b3JzU3RhdHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3RhdHMvY29udHJpYnV0b3JzXCJdLFxuICAgIGdldEN1c3RvbURlcGxveW1lbnRQcm90ZWN0aW9uUnVsZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudF9wcm90ZWN0aW9uX3J1bGVzL3twcm90ZWN0aW9uX3J1bGVfaWR9XCJcbiAgICBdLFxuICAgIGdldEN1c3RvbVByb3BlcnRpZXNWYWx1ZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJvcGVydGllcy92YWx1ZXNcIl0sXG4gICAgZ2V0RGVwbG95S2V5OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2tleXMve2tleV9pZH1cIl0sXG4gICAgZ2V0RGVwbG95bWVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50cy97ZGVwbG95bWVudF9pZH1cIl0sXG4gICAgZ2V0RGVwbG95bWVudEJyYW5jaFBvbGljeTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudC1icmFuY2gtcG9saWNpZXMve2JyYW5jaF9wb2xpY3lfaWR9XCJcbiAgICBdLFxuICAgIGdldERlcGxveW1lbnRTdGF0dXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50cy97ZGVwbG95bWVudF9pZH0vc3RhdHVzZXMve3N0YXR1c19pZH1cIlxuICAgIF0sXG4gICAgZ2V0RW52aXJvbm1lbnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9XCJcbiAgICBdLFxuICAgIGdldExhdGVzdFBhZ2VzQnVpbGQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXMvYnVpbGRzL2xhdGVzdFwiXSxcbiAgICBnZXRMYXRlc3RSZWxlYXNlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL2xhdGVzdFwiXSxcbiAgICBnZXRPcmdSdWxlU3VpdGU6IFtcIkdFVCAvb3Jncy97b3JnfS9ydWxlc2V0cy9ydWxlLXN1aXRlcy97cnVsZV9zdWl0ZV9pZH1cIl0sXG4gICAgZ2V0T3JnUnVsZVN1aXRlczogW1wiR0VUIC9vcmdzL3tvcmd9L3J1bGVzZXRzL3J1bGUtc3VpdGVzXCJdLFxuICAgIGdldE9yZ1J1bGVzZXQ6IFtcIkdFVCAvb3Jncy97b3JnfS9ydWxlc2V0cy97cnVsZXNldF9pZH1cIl0sXG4gICAgZ2V0T3JnUnVsZXNldHM6IFtcIkdFVCAvb3Jncy97b3JnfS9ydWxlc2V0c1wiXSxcbiAgICBnZXRQYWdlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlc1wiXSxcbiAgICBnZXRQYWdlc0J1aWxkOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2J1aWxkcy97YnVpbGRfaWR9XCJdLFxuICAgIGdldFBhZ2VzRGVwbG95bWVudDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2RlcGxveW1lbnRzL3twYWdlc19kZXBsb3ltZW50X2lkfVwiXG4gICAgXSxcbiAgICBnZXRQYWdlc0hlYWx0aENoZWNrOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2hlYWx0aFwiXSxcbiAgICBnZXRQYXJ0aWNpcGF0aW9uU3RhdHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3RhdHMvcGFydGljaXBhdGlvblwiXSxcbiAgICBnZXRQdWxsUmVxdWVzdFJldmlld1Byb3RlY3Rpb246IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3B1bGxfcmVxdWVzdF9yZXZpZXdzXCJcbiAgICBdLFxuICAgIGdldFB1bmNoQ2FyZFN0YXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXRzL3B1bmNoX2NhcmRcIl0sXG4gICAgZ2V0UmVhZG1lOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlYWRtZVwiXSxcbiAgICBnZXRSZWFkbWVJbkRpcmVjdG9yeTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWFkbWUve2Rpcn1cIl0sXG4gICAgZ2V0UmVsZWFzZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH1cIl0sXG4gICAgZ2V0UmVsZWFzZUFzc2V0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL2Fzc2V0cy97YXNzZXRfaWR9XCJdLFxuICAgIGdldFJlbGVhc2VCeVRhZzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy90YWdzL3t0YWd9XCJdLFxuICAgIGdldFJlcG9SdWxlU3VpdGU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlc2V0cy9ydWxlLXN1aXRlcy97cnVsZV9zdWl0ZV9pZH1cIlxuICAgIF0sXG4gICAgZ2V0UmVwb1J1bGVTdWl0ZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHMvcnVsZS1zdWl0ZXNcIl0sXG4gICAgZ2V0UmVwb1J1bGVzZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHMve3J1bGVzZXRfaWR9XCJdLFxuICAgIGdldFJlcG9SdWxlc2V0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlc2V0c1wiXSxcbiAgICBnZXRTdGF0dXNDaGVja3NQcm90ZWN0aW9uOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zdGF0dXNfY2hlY2tzXCJcbiAgICBdLFxuICAgIGdldFRlYW1zV2l0aEFjY2Vzc1RvUHJvdGVjdGVkQnJhbmNoOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdGVhbXNcIlxuICAgIF0sXG4gICAgZ2V0VG9wUGF0aHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdHJhZmZpYy9wb3B1bGFyL3BhdGhzXCJdLFxuICAgIGdldFRvcFJlZmVycmVyczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90cmFmZmljL3BvcHVsYXIvcmVmZXJyZXJzXCJdLFxuICAgIGdldFVzZXJzV2l0aEFjY2Vzc1RvUHJvdGVjdGVkQnJhbmNoOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdXNlcnNcIlxuICAgIF0sXG4gICAgZ2V0Vmlld3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdHJhZmZpYy92aWV3c1wiXSxcbiAgICBnZXRXZWJob29rOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfVwiXSxcbiAgICBnZXRXZWJob29rQ29uZmlnRm9yUmVwbzogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS9jb25maWdcIlxuICAgIF0sXG4gICAgZ2V0V2ViaG9va0RlbGl2ZXJ5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXMve2RlbGl2ZXJ5X2lkfVwiXG4gICAgXSxcbiAgICBsaXN0QWN0aXZpdGllczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpdml0eVwiXSxcbiAgICBsaXN0QXV0b2xpbmtzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9saW5rc1wiXSxcbiAgICBsaXN0QnJhbmNoZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXNcIl0sXG4gICAgbGlzdEJyYW5jaGVzRm9ySGVhZENvbW1pdDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve2NvbW1pdF9zaGF9L2JyYW5jaGVzLXdoZXJlLWhlYWRcIlxuICAgIF0sXG4gICAgbGlzdENvbGxhYm9yYXRvcnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29sbGFib3JhdG9yc1wiXSxcbiAgICBsaXN0Q29tbWVudHNGb3JDb21taXQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tjb21taXRfc2hhfS9jb21tZW50c1wiXG4gICAgXSxcbiAgICBsaXN0Q29tbWl0Q29tbWVudHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzXCJdLFxuICAgIGxpc3RDb21taXRTdGF0dXNlc0ZvclJlZjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vc3RhdHVzZXNcIlxuICAgIF0sXG4gICAgbGlzdENvbW1pdHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0c1wiXSxcbiAgICBsaXN0Q29udHJpYnV0b3JzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbnRyaWJ1dG9yc1wiXSxcbiAgICBsaXN0Q3VzdG9tRGVwbG95bWVudFJ1bGVJbnRlZ3JhdGlvbnM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnRfcHJvdGVjdGlvbl9ydWxlcy9hcHBzXCJcbiAgICBdLFxuICAgIGxpc3REZXBsb3lLZXlzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2tleXNcIl0sXG4gICAgbGlzdERlcGxveW1lbnRCcmFuY2hQb2xpY2llczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudC1icmFuY2gtcG9saWNpZXNcIlxuICAgIF0sXG4gICAgbGlzdERlcGxveW1lbnRTdGF0dXNlczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGxveW1lbnRzL3tkZXBsb3ltZW50X2lkfS9zdGF0dXNlc1wiXG4gICAgXSxcbiAgICBsaXN0RGVwbG95bWVudHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHNcIl0sXG4gICAgbGlzdEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvcmVwb3NcIl0sXG4gICAgbGlzdEZvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3JlcG9zXCJdLFxuICAgIGxpc3RGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcmVwb3NcIl0sXG4gICAgbGlzdEZvcmtzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ZvcmtzXCJdLFxuICAgIGxpc3RJbnZpdGF0aW9uczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbnZpdGF0aW9uc1wiXSxcbiAgICBsaXN0SW52aXRhdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3JlcG9zaXRvcnlfaW52aXRhdGlvbnNcIl0sXG4gICAgbGlzdExhbmd1YWdlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sYW5ndWFnZXNcIl0sXG4gICAgbGlzdFBhZ2VzQnVpbGRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2J1aWxkc1wiXSxcbiAgICBsaXN0UHVibGljOiBbXCJHRVQgL3JlcG9zaXRvcmllc1wiXSxcbiAgICBsaXN0UHVsbFJlcXVlc3RzQXNzb2NpYXRlZFdpdGhDb21taXQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tjb21taXRfc2hhfS9wdWxsc1wiXG4gICAgXSxcbiAgICBsaXN0UmVsZWFzZUFzc2V0czogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfS9hc3NldHNcIlxuICAgIF0sXG4gICAgbGlzdFJlbGVhc2VzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzXCJdLFxuICAgIGxpc3RUYWdQcm90ZWN0aW9uOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RhZ3MvcHJvdGVjdGlvblwiXSxcbiAgICBsaXN0VGFnczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YWdzXCJdLFxuICAgIGxpc3RUZWFtczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90ZWFtc1wiXSxcbiAgICBsaXN0V2ViaG9va0RlbGl2ZXJpZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllc1wiXG4gICAgXSxcbiAgICBsaXN0V2ViaG9va3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3NcIl0sXG4gICAgbWVyZ2U6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L21lcmdlc1wiXSxcbiAgICBtZXJnZVVwc3RyZWFtOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9tZXJnZS11cHN0cmVhbVwiXSxcbiAgICBwaW5nV2ViaG9vazogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L3BpbmdzXCJdLFxuICAgIHJlZGVsaXZlcldlYmhvb2tEZWxpdmVyeTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9L2F0dGVtcHRzXCJcbiAgICBdLFxuICAgIHJlbW92ZUFwcEFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL2FwcHNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwiYXBwc1wiIH1cbiAgICBdLFxuICAgIHJlbW92ZUNvbGxhYm9yYXRvcjogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiXG4gICAgXSxcbiAgICByZW1vdmVTdGF0dXNDaGVja0NvbnRleHRzOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zdGF0dXNfY2hlY2tzL2NvbnRleHRzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgbWFwVG9EYXRhOiBcImNvbnRleHRzXCIgfVxuICAgIF0sXG4gICAgcmVtb3ZlU3RhdHVzQ2hlY2tQcm90ZWN0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zdGF0dXNfY2hlY2tzXCJcbiAgICBdLFxuICAgIHJlbW92ZVRlYW1BY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy90ZWFtc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJ0ZWFtc1wiIH1cbiAgICBdLFxuICAgIHJlbW92ZVVzZXJBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy91c2Vyc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJ1c2Vyc1wiIH1cbiAgICBdLFxuICAgIHJlbmFtZUJyYW5jaDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcmVuYW1lXCJdLFxuICAgIHJlcGxhY2VBbGxUb3BpY3M6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vdG9waWNzXCJdLFxuICAgIHJlcXVlc3RQYWdlc0J1aWxkOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9idWlsZHNcIl0sXG4gICAgc2V0QWRtaW5CcmFuY2hQcm90ZWN0aW9uOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vZW5mb3JjZV9hZG1pbnNcIlxuICAgIF0sXG4gICAgc2V0QXBwQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvYXBwc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJhcHBzXCIgfVxuICAgIF0sXG4gICAgc2V0U3RhdHVzQ2hlY2tDb250ZXh0czogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrcy9jb250ZXh0c1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJjb250ZXh0c1wiIH1cbiAgICBdLFxuICAgIHNldFRlYW1BY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy90ZWFtc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJ0ZWFtc1wiIH1cbiAgICBdLFxuICAgIHNldFVzZXJBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy91c2Vyc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJ1c2Vyc1wiIH1cbiAgICBdLFxuICAgIHRlc3RQdXNoV2ViaG9vazogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L3Rlc3RzXCJdLFxuICAgIHRyYW5zZmVyOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90cmFuc2ZlclwiXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfVwiXSxcbiAgICB1cGRhdGVCcmFuY2hQcm90ZWN0aW9uOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvblwiXG4gICAgXSxcbiAgICB1cGRhdGVDb21taXRDb21tZW50OiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIHVwZGF0ZURlcGxveW1lbnRCcmFuY2hQb2xpY3k6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnQtYnJhbmNoLXBvbGljaWVzL3ticmFuY2hfcG9saWN5X2lkfVwiXG4gICAgXSxcbiAgICB1cGRhdGVJbmZvcm1hdGlvbkFib3V0UGFnZXNTaXRlOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzXCJdLFxuICAgIHVwZGF0ZUludml0YXRpb246IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfVwiXG4gICAgXSxcbiAgICB1cGRhdGVPcmdSdWxlc2V0OiBbXCJQVVQgL29yZ3Mve29yZ30vcnVsZXNldHMve3J1bGVzZXRfaWR9XCJdLFxuICAgIHVwZGF0ZVB1bGxSZXF1ZXN0UmV2aWV3UHJvdGVjdGlvbjogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9wdWxsX3JlcXVlc3RfcmV2aWV3c1wiXG4gICAgXSxcbiAgICB1cGRhdGVSZWxlYXNlOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9XCJdLFxuICAgIHVwZGF0ZVJlbGVhc2VBc3NldDogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMvYXNzZXRzL3thc3NldF9pZH1cIlxuICAgIF0sXG4gICAgdXBkYXRlUmVwb1J1bGVzZXQ6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHMve3J1bGVzZXRfaWR9XCJdLFxuICAgIHVwZGF0ZVN0YXR1c0NoZWNrUG90ZWN0aW9uOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3NcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJyZXBvc1wiLCBcInVwZGF0ZVN0YXR1c0NoZWNrUHJvdGVjdGlvblwiXSB9XG4gICAgXSxcbiAgICB1cGRhdGVTdGF0dXNDaGVja1Byb3RlY3Rpb246IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrc1wiXG4gICAgXSxcbiAgICB1cGRhdGVXZWJob29rOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9XCJdLFxuICAgIHVwZGF0ZVdlYmhvb2tDb25maWdGb3JSZXBvOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vY29uZmlnXCJcbiAgICBdLFxuICAgIHVwbG9hZFJlbGVhc2VBc3NldDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vYXNzZXRzez9uYW1lLGxhYmVsfVwiLFxuICAgICAgeyBiYXNlVXJsOiBcImh0dHBzOi8vdXBsb2Fkcy5naXRodWIuY29tXCIgfVxuICAgIF1cbiAgfSxcbiAgc2VhcmNoOiB7XG4gICAgY29kZTogW1wiR0VUIC9zZWFyY2gvY29kZVwiXSxcbiAgICBjb21taXRzOiBbXCJHRVQgL3NlYXJjaC9jb21taXRzXCJdLFxuICAgIGlzc3Vlc0FuZFB1bGxSZXF1ZXN0czogW1wiR0VUIC9zZWFyY2gvaXNzdWVzXCJdLFxuICAgIGxhYmVsczogW1wiR0VUIC9zZWFyY2gvbGFiZWxzXCJdLFxuICAgIHJlcG9zOiBbXCJHRVQgL3NlYXJjaC9yZXBvc2l0b3JpZXNcIl0sXG4gICAgdG9waWNzOiBbXCJHRVQgL3NlYXJjaC90b3BpY3NcIl0sXG4gICAgdXNlcnM6IFtcIkdFVCAvc2VhcmNoL3VzZXJzXCJdXG4gIH0sXG4gIHNlY3JldFNjYW5uaW5nOiB7XG4gICAgZ2V0QWxlcnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9XCJcbiAgICBdLFxuICAgIGxpc3RBbGVydHNGb3JFbnRlcnByaXNlOiBbXG4gICAgICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L3NlY3JldC1zY2FubmluZy9hbGVydHNcIlxuICAgIF0sXG4gICAgbGlzdEFsZXJ0c0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3NlY3JldC1zY2FubmluZy9hbGVydHNcIl0sXG4gICAgbGlzdEFsZXJ0c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0c1wiXSxcbiAgICBsaXN0TG9jYXRpb25zRm9yQWxlcnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9L2xvY2F0aW9uc1wiXG4gICAgXSxcbiAgICB1cGRhdGVBbGVydDogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfVwiXG4gICAgXVxuICB9LFxuICBzZWN1cml0eUFkdmlzb3JpZXM6IHtcbiAgICBjcmVhdGVGb3JrOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3VyaXR5LWFkdmlzb3JpZXMve2doc2FfaWR9L2ZvcmtzXCJcbiAgICBdLFxuICAgIGNyZWF0ZVByaXZhdGVWdWxuZXJhYmlsaXR5UmVwb3J0OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3VyaXR5LWFkdmlzb3JpZXMvcmVwb3J0c1wiXG4gICAgXSxcbiAgICBjcmVhdGVSZXBvc2l0b3J5QWR2aXNvcnk6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjdXJpdHktYWR2aXNvcmllc1wiXG4gICAgXSxcbiAgICBjcmVhdGVSZXBvc2l0b3J5QWR2aXNvcnlDdmVSZXF1ZXN0OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3VyaXR5LWFkdmlzb3JpZXMve2doc2FfaWR9L2N2ZVwiXG4gICAgXSxcbiAgICBnZXRHbG9iYWxBZHZpc29yeTogW1wiR0VUIC9hZHZpc29yaWVzL3tnaHNhX2lkfVwiXSxcbiAgICBnZXRSZXBvc2l0b3J5QWR2aXNvcnk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWN1cml0eS1hZHZpc29yaWVzL3tnaHNhX2lkfVwiXG4gICAgXSxcbiAgICBsaXN0R2xvYmFsQWR2aXNvcmllczogW1wiR0VUIC9hZHZpc29yaWVzXCJdLFxuICAgIGxpc3RPcmdSZXBvc2l0b3J5QWR2aXNvcmllczogW1wiR0VUIC9vcmdzL3tvcmd9L3NlY3VyaXR5LWFkdmlzb3JpZXNcIl0sXG4gICAgbGlzdFJlcG9zaXRvcnlBZHZpc29yaWVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3VyaXR5LWFkdmlzb3JpZXNcIl0sXG4gICAgdXBkYXRlUmVwb3NpdG9yeUFkdmlzb3J5OiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWN1cml0eS1hZHZpc29yaWVzL3tnaHNhX2lkfVwiXG4gICAgXVxuICB9LFxuICB0ZWFtczoge1xuICAgIGFkZE9yVXBkYXRlTWVtYmVyc2hpcEZvclVzZXJJbk9yZzogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiXG4gICAgXSxcbiAgICBhZGRPclVwZGF0ZVByb2plY3RQZXJtaXNzaW9uc0luT3JnOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9wcm9qZWN0cy97cHJvamVjdF9pZH1cIlxuICAgIF0sXG4gICAgYWRkT3JVcGRhdGVSZXBvUGVybWlzc2lvbnNJbk9yZzogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcmVwb3Mve293bmVyfS97cmVwb31cIlxuICAgIF0sXG4gICAgY2hlY2tQZXJtaXNzaW9uc0ZvclByb2plY3RJbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcHJvamVjdHMve3Byb2plY3RfaWR9XCJcbiAgICBdLFxuICAgIGNoZWNrUGVybWlzc2lvbnNGb3JSZXBvSW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3JlcG9zL3tvd25lcn0ve3JlcG99XCJcbiAgICBdLFxuICAgIGNyZWF0ZTogW1wiUE9TVCAvb3Jncy97b3JnfS90ZWFtc1wiXSxcbiAgICBjcmVhdGVEaXNjdXNzaW9uQ29tbWVudEluT3JnOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50c1wiXG4gICAgXSxcbiAgICBjcmVhdGVEaXNjdXNzaW9uSW5Pcmc6IFtcIlBPU1QgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnNcIl0sXG4gICAgZGVsZXRlRGlzY3Vzc2lvbkNvbW1lbnRJbk9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9XCJcbiAgICBdLFxuICAgIGRlbGV0ZURpc2N1c3Npb25Jbk9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfVwiXG4gICAgXSxcbiAgICBkZWxldGVJbk9yZzogW1wiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9XCJdLFxuICAgIGdldEJ5TmFtZTogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9XCJdLFxuICAgIGdldERpc2N1c3Npb25Db21tZW50SW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfbnVtYmVyfVwiXG4gICAgXSxcbiAgICBnZXREaXNjdXNzaW9uSW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn1cIlxuICAgIF0sXG4gICAgZ2V0TWVtYmVyc2hpcEZvclVzZXJJbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiXG4gICAgXSxcbiAgICBsaXN0OiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXNcIl0sXG4gICAgbGlzdENoaWxkSW5Pcmc6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS90ZWFtc1wiXSxcbiAgICBsaXN0RGlzY3Vzc2lvbkNvbW1lbnRzSW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHNcIlxuICAgIF0sXG4gICAgbGlzdERpc2N1c3Npb25zSW5Pcmc6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9uc1wiXSxcbiAgICBsaXN0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci90ZWFtc1wiXSxcbiAgICBsaXN0TWVtYmVyc0luT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vbWVtYmVyc1wiXSxcbiAgICBsaXN0UGVuZGluZ0ludml0YXRpb25zSW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2ludml0YXRpb25zXCJcbiAgICBdLFxuICAgIGxpc3RQcm9qZWN0c0luT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcHJvamVjdHNcIl0sXG4gICAgbGlzdFJlcG9zSW5Pcmc6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9yZXBvc1wiXSxcbiAgICByZW1vdmVNZW1iZXJzaGlwRm9yVXNlckluT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9tZW1iZXJzaGlwcy97dXNlcm5hbWV9XCJcbiAgICBdLFxuICAgIHJlbW92ZVByb2plY3RJbk9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcHJvamVjdHMve3Byb2plY3RfaWR9XCJcbiAgICBdLFxuICAgIHJlbW92ZVJlcG9Jbk9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcmVwb3Mve293bmVyfS97cmVwb31cIlxuICAgIF0sXG4gICAgdXBkYXRlRGlzY3Vzc2lvbkNvbW1lbnRJbk9yZzogW1xuICAgICAgXCJQQVRDSCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn1cIlxuICAgIF0sXG4gICAgdXBkYXRlRGlzY3Vzc2lvbkluT3JnOiBbXG4gICAgICBcIlBBVENIIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn1cIlxuICAgIF0sXG4gICAgdXBkYXRlSW5Pcmc6IFtcIlBBVENIIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9XCJdXG4gIH0sXG4gIHVzZXJzOiB7XG4gICAgYWRkRW1haWxGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIlBPU1QgL3VzZXIvZW1haWxzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJhZGRFbWFpbEZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIGFkZEVtYWlsRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvZW1haWxzXCJdLFxuICAgIGFkZFNvY2lhbEFjY291bnRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9zb2NpYWxfYWNjb3VudHNcIl0sXG4gICAgYmxvY2s6IFtcIlBVVCAvdXNlci9ibG9ja3Mve3VzZXJuYW1lfVwiXSxcbiAgICBjaGVja0Jsb2NrZWQ6IFtcIkdFVCAvdXNlci9ibG9ja3Mve3VzZXJuYW1lfVwiXSxcbiAgICBjaGVja0ZvbGxvd2luZ0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9mb2xsb3dpbmcve3RhcmdldF91c2VyfVwiXSxcbiAgICBjaGVja1BlcnNvbklzRm9sbG93ZWRCeUF1dGhlbnRpY2F0ZWQ6IFtcIkdFVCAvdXNlci9mb2xsb3dpbmcve3VzZXJuYW1lfVwiXSxcbiAgICBjcmVhdGVHcGdLZXlGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIlBPU1QgL3VzZXIvZ3BnX2tleXNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImNyZWF0ZUdwZ0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIGNyZWF0ZUdwZ0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL2dwZ19rZXlzXCJdLFxuICAgIGNyZWF0ZVB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiUE9TVCAvdXNlci9rZXlzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJjcmVhdGVQdWJsaWNTc2hLZXlGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBjcmVhdGVQdWJsaWNTc2hLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9rZXlzXCJdLFxuICAgIGNyZWF0ZVNzaFNpZ25pbmdLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9zc2hfc2lnbmluZ19rZXlzXCJdLFxuICAgIGRlbGV0ZUVtYWlsRm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvZW1haWxzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJkZWxldGVFbWFpbEZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIGRlbGV0ZUVtYWlsRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9lbWFpbHNcIl0sXG4gICAgZGVsZXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvZ3BnX2tleXMve2dwZ19rZXlfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJkZWxldGVHcGdLZXlGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBkZWxldGVHcGdLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiREVMRVRFIC91c2VyL2dwZ19rZXlzL3tncGdfa2V5X2lkfVwiXSxcbiAgICBkZWxldGVQdWJsaWNTc2hLZXlGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9rZXlzL3trZXlfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJkZWxldGVQdWJsaWNTc2hLZXlGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBkZWxldGVQdWJsaWNTc2hLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiREVMRVRFIC91c2VyL2tleXMve2tleV9pZH1cIl0sXG4gICAgZGVsZXRlU29jaWFsQWNjb3VudEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvc29jaWFsX2FjY291bnRzXCJdLFxuICAgIGRlbGV0ZVNzaFNpZ25pbmdLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvc3NoX3NpZ25pbmdfa2V5cy97c3NoX3NpZ25pbmdfa2V5X2lkfVwiXG4gICAgXSxcbiAgICBmb2xsb3c6IFtcIlBVVCAvdXNlci9mb2xsb3dpbmcve3VzZXJuYW1lfVwiXSxcbiAgICBnZXRBdXRoZW50aWNhdGVkOiBbXCJHRVQgL3VzZXJcIl0sXG4gICAgZ2V0QnlVc2VybmFtZTogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9XCJdLFxuICAgIGdldENvbnRleHRGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vaG92ZXJjYXJkXCJdLFxuICAgIGdldEdwZ0tleUZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL2dwZ19rZXlzL3tncGdfa2V5X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiZ2V0R3BnS2V5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfVxuICAgIF0sXG4gICAgZ2V0R3BnS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9ncGdfa2V5cy97Z3BnX2tleV9pZH1cIl0sXG4gICAgZ2V0UHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJHRVQgL3VzZXIva2V5cy97a2V5X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiZ2V0UHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfVxuICAgIF0sXG4gICAgZ2V0UHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9rZXlzL3trZXlfaWR9XCJdLFxuICAgIGdldFNzaFNpZ25pbmdLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvc3NoX3NpZ25pbmdfa2V5cy97c3NoX3NpZ25pbmdfa2V5X2lkfVwiXG4gICAgXSxcbiAgICBsaXN0OiBbXCJHRVQgL3VzZXJzXCJdLFxuICAgIGxpc3RCbG9ja2VkQnlBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIkdFVCAvdXNlci9ibG9ja3NcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImxpc3RCbG9ja2VkQnlBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBsaXN0QmxvY2tlZEJ5QXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9ibG9ja3NcIl0sXG4gICAgbGlzdEVtYWlsc0ZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL2VtYWlsc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwibGlzdEVtYWlsc0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIGxpc3RFbWFpbHNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2VtYWlsc1wiXSxcbiAgICBsaXN0Rm9sbG93ZWRCeUF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL2ZvbGxvd2luZ1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwibGlzdEZvbGxvd2VkQnlBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBsaXN0Rm9sbG93ZWRCeUF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvZm9sbG93aW5nXCJdLFxuICAgIGxpc3RGb2xsb3dlcnNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2ZvbGxvd2Vyc1wiXSxcbiAgICBsaXN0Rm9sbG93ZXJzRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2ZvbGxvd2Vyc1wiXSxcbiAgICBsaXN0Rm9sbG93aW5nRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2ZvbGxvd2luZ1wiXSxcbiAgICBsaXN0R3BnS2V5c0ZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL2dwZ19rZXlzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJsaXN0R3BnS2V5c0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIGxpc3RHcGdLZXlzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9ncGdfa2V5c1wiXSxcbiAgICBsaXN0R3BnS2V5c0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ncGdfa2V5c1wiXSxcbiAgICBsaXN0UHVibGljRW1haWxzRm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJHRVQgL3VzZXIvcHVibGljX2VtYWlsc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwibGlzdFB1YmxpY0VtYWlsc0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIGxpc3RQdWJsaWNFbWFpbHNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3B1YmxpY19lbWFpbHNcIl0sXG4gICAgbGlzdFB1YmxpY0tleXNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0va2V5c1wiXSxcbiAgICBsaXN0UHVibGljU3NoS2V5c0ZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL2tleXNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImxpc3RQdWJsaWNTc2hLZXlzRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfVxuICAgIF0sXG4gICAgbGlzdFB1YmxpY1NzaEtleXNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2tleXNcIl0sXG4gICAgbGlzdFNvY2lhbEFjY291bnRzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9zb2NpYWxfYWNjb3VudHNcIl0sXG4gICAgbGlzdFNvY2lhbEFjY291bnRzRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NvY2lhbF9hY2NvdW50c1wiXSxcbiAgICBsaXN0U3NoU2lnbmluZ0tleXNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3NzaF9zaWduaW5nX2tleXNcIl0sXG4gICAgbGlzdFNzaFNpZ25pbmdLZXlzRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NzaF9zaWduaW5nX2tleXNcIl0sXG4gICAgc2V0UHJpbWFyeUVtYWlsVmlzaWJpbGl0eUZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiUEFUQ0ggL3VzZXIvZW1haWwvdmlzaWJpbGl0eVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwic2V0UHJpbWFyeUVtYWlsVmlzaWJpbGl0eUZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIHNldFByaW1hcnlFbWFpbFZpc2liaWxpdHlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQQVRDSCAvdXNlci9lbWFpbC92aXNpYmlsaXR5XCJcbiAgICBdLFxuICAgIHVuYmxvY2s6IFtcIkRFTEVURSAvdXNlci9ibG9ja3Mve3VzZXJuYW1lfVwiXSxcbiAgICB1bmZvbGxvdzogW1wiREVMRVRFIC91c2VyL2ZvbGxvd2luZy97dXNlcm5hbWV9XCJdLFxuICAgIHVwZGF0ZUF1dGhlbnRpY2F0ZWQ6IFtcIlBBVENIIC91c2VyXCJdXG4gIH1cbn07XG52YXIgZW5kcG9pbnRzX2RlZmF1bHQgPSBFbmRwb2ludHM7XG5cbi8vIHBrZy9kaXN0LXNyYy9lbmRwb2ludHMtdG8tbWV0aG9kcy5qc1xudmFyIGVuZHBvaW50TWV0aG9kc01hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5mb3IgKGNvbnN0IFtzY29wZSwgZW5kcG9pbnRzXSBvZiBPYmplY3QuZW50cmllcyhlbmRwb2ludHNfZGVmYXVsdCkpIHtcbiAgZm9yIChjb25zdCBbbWV0aG9kTmFtZSwgZW5kcG9pbnRdIG9mIE9iamVjdC5lbnRyaWVzKGVuZHBvaW50cykpIHtcbiAgICBjb25zdCBbcm91dGUsIGRlZmF1bHRzLCBkZWNvcmF0aW9uc10gPSBlbmRwb2ludDtcbiAgICBjb25zdCBbbWV0aG9kLCB1cmxdID0gcm91dGUuc3BsaXQoLyAvKTtcbiAgICBjb25zdCBlbmRwb2ludERlZmF1bHRzID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHtcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICB1cmxcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0c1xuICAgICk7XG4gICAgaWYgKCFlbmRwb2ludE1ldGhvZHNNYXAuaGFzKHNjb3BlKSkge1xuICAgICAgZW5kcG9pbnRNZXRob2RzTWFwLnNldChzY29wZSwgLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSk7XG4gICAgfVxuICAgIGVuZHBvaW50TWV0aG9kc01hcC5nZXQoc2NvcGUpLnNldChtZXRob2ROYW1lLCB7XG4gICAgICBzY29wZSxcbiAgICAgIG1ldGhvZE5hbWUsXG4gICAgICBlbmRwb2ludERlZmF1bHRzLFxuICAgICAgZGVjb3JhdGlvbnNcbiAgICB9KTtcbiAgfVxufVxudmFyIGhhbmRsZXIgPSB7XG4gIGhhcyh7IHNjb3BlIH0sIG1ldGhvZE5hbWUpIHtcbiAgICByZXR1cm4gZW5kcG9pbnRNZXRob2RzTWFwLmdldChzY29wZSkuaGFzKG1ldGhvZE5hbWUpO1xuICB9LFxuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBtZXRob2ROYW1lKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiB0aGlzLmdldCh0YXJnZXQsIG1ldGhvZE5hbWUpLFxuICAgICAgLy8gZW5zdXJlcyBtZXRob2QgaXMgaW4gdGhlIGNhY2hlXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICB9O1xuICB9LFxuICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG1ldGhvZE5hbWUsIGRlc2NyaXB0b3IpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LmNhY2hlLCBtZXRob2ROYW1lLCBkZXNjcmlwdG9yKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSxcbiAgZGVsZXRlUHJvcGVydHkodGFyZ2V0LCBtZXRob2ROYW1lKSB7XG4gICAgZGVsZXRlIHRhcmdldC5jYWNoZVttZXRob2ROYW1lXTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSxcbiAgb3duS2V5cyh7IHNjb3BlIH0pIHtcbiAgICByZXR1cm4gWy4uLmVuZHBvaW50TWV0aG9kc01hcC5nZXQoc2NvcGUpLmtleXMoKV07XG4gIH0sXG4gIHNldCh0YXJnZXQsIG1ldGhvZE5hbWUsIHZhbHVlKSB7XG4gICAgcmV0dXJuIHRhcmdldC5jYWNoZVttZXRob2ROYW1lXSA9IHZhbHVlO1xuICB9LFxuICBnZXQoeyBvY3Rva2l0LCBzY29wZSwgY2FjaGUgfSwgbWV0aG9kTmFtZSkge1xuICAgIGlmIChjYWNoZVttZXRob2ROYW1lXSkge1xuICAgICAgcmV0dXJuIGNhY2hlW21ldGhvZE5hbWVdO1xuICAgIH1cbiAgICBjb25zdCBtZXRob2QgPSBlbmRwb2ludE1ldGhvZHNNYXAuZ2V0KHNjb3BlKS5nZXQobWV0aG9kTmFtZSk7XG4gICAgaWYgKCFtZXRob2QpIHtcbiAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgfVxuICAgIGNvbnN0IHsgZW5kcG9pbnREZWZhdWx0cywgZGVjb3JhdGlvbnMgfSA9IG1ldGhvZDtcbiAgICBpZiAoZGVjb3JhdGlvbnMpIHtcbiAgICAgIGNhY2hlW21ldGhvZE5hbWVdID0gZGVjb3JhdGUoXG4gICAgICAgIG9jdG9raXQsXG4gICAgICAgIHNjb3BlLFxuICAgICAgICBtZXRob2ROYW1lLFxuICAgICAgICBlbmRwb2ludERlZmF1bHRzLFxuICAgICAgICBkZWNvcmF0aW9uc1xuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FjaGVbbWV0aG9kTmFtZV0gPSBvY3Rva2l0LnJlcXVlc3QuZGVmYXVsdHMoZW5kcG9pbnREZWZhdWx0cyk7XG4gICAgfVxuICAgIHJldHVybiBjYWNoZVttZXRob2ROYW1lXTtcbiAgfVxufTtcbmZ1bmN0aW9uIGVuZHBvaW50c1RvTWV0aG9kcyhvY3Rva2l0KSB7XG4gIGNvbnN0IG5ld01ldGhvZHMgPSB7fTtcbiAgZm9yIChjb25zdCBzY29wZSBvZiBlbmRwb2ludE1ldGhvZHNNYXAua2V5cygpKSB7XG4gICAgbmV3TWV0aG9kc1tzY29wZV0gPSBuZXcgUHJveHkoeyBvY3Rva2l0LCBzY29wZSwgY2FjaGU6IHt9IH0sIGhhbmRsZXIpO1xuICB9XG4gIHJldHVybiBuZXdNZXRob2RzO1xufVxuZnVuY3Rpb24gZGVjb3JhdGUob2N0b2tpdCwgc2NvcGUsIG1ldGhvZE5hbWUsIGRlZmF1bHRzLCBkZWNvcmF0aW9ucykge1xuICBjb25zdCByZXF1ZXN0V2l0aERlZmF1bHRzID0gb2N0b2tpdC5yZXF1ZXN0LmRlZmF1bHRzKGRlZmF1bHRzKTtcbiAgZnVuY3Rpb24gd2l0aERlY29yYXRpb25zKC4uLmFyZ3MpIHtcbiAgICBsZXQgb3B0aW9ucyA9IHJlcXVlc3RXaXRoRGVmYXVsdHMuZW5kcG9pbnQubWVyZ2UoLi4uYXJncyk7XG4gICAgaWYgKGRlY29yYXRpb25zLm1hcFRvRGF0YSkge1xuICAgICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMsIHtcbiAgICAgICAgZGF0YTogb3B0aW9uc1tkZWNvcmF0aW9ucy5tYXBUb0RhdGFdLFxuICAgICAgICBbZGVjb3JhdGlvbnMubWFwVG9EYXRhXTogdm9pZCAwXG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXF1ZXN0V2l0aERlZmF1bHRzKG9wdGlvbnMpO1xuICAgIH1cbiAgICBpZiAoZGVjb3JhdGlvbnMucmVuYW1lZCkge1xuICAgICAgY29uc3QgW25ld1Njb3BlLCBuZXdNZXRob2ROYW1lXSA9IGRlY29yYXRpb25zLnJlbmFtZWQ7XG4gICAgICBvY3Rva2l0LmxvZy53YXJuKFxuICAgICAgICBgb2N0b2tpdC4ke3Njb3BlfS4ke21ldGhvZE5hbWV9KCkgaGFzIGJlZW4gcmVuYW1lZCB0byBvY3Rva2l0LiR7bmV3U2NvcGV9LiR7bmV3TWV0aG9kTmFtZX0oKWBcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChkZWNvcmF0aW9ucy5kZXByZWNhdGVkKSB7XG4gICAgICBvY3Rva2l0LmxvZy53YXJuKGRlY29yYXRpb25zLmRlcHJlY2F0ZWQpO1xuICAgIH1cbiAgICBpZiAoZGVjb3JhdGlvbnMucmVuYW1lZFBhcmFtZXRlcnMpIHtcbiAgICAgIGNvbnN0IG9wdGlvbnMyID0gcmVxdWVzdFdpdGhEZWZhdWx0cy5lbmRwb2ludC5tZXJnZSguLi5hcmdzKTtcbiAgICAgIGZvciAoY29uc3QgW25hbWUsIGFsaWFzXSBvZiBPYmplY3QuZW50cmllcyhcbiAgICAgICAgZGVjb3JhdGlvbnMucmVuYW1lZFBhcmFtZXRlcnNcbiAgICAgICkpIHtcbiAgICAgICAgaWYgKG5hbWUgaW4gb3B0aW9uczIpIHtcbiAgICAgICAgICBvY3Rva2l0LmxvZy53YXJuKFxuICAgICAgICAgICAgYFwiJHtuYW1lfVwiIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkIGZvciBcIm9jdG9raXQuJHtzY29wZX0uJHttZXRob2ROYW1lfSgpXCIuIFVzZSBcIiR7YWxpYXN9XCIgaW5zdGVhZGBcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmICghKGFsaWFzIGluIG9wdGlvbnMyKSkge1xuICAgICAgICAgICAgb3B0aW9uczJbYWxpYXNdID0gb3B0aW9uczJbbmFtZV07XG4gICAgICAgICAgfVxuICAgICAgICAgIGRlbGV0ZSBvcHRpb25zMltuYW1lXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlcXVlc3RXaXRoRGVmYXVsdHMob3B0aW9uczIpO1xuICAgIH1cbiAgICByZXR1cm4gcmVxdWVzdFdpdGhEZWZhdWx0cyguLi5hcmdzKTtcbiAgfVxuICByZXR1cm4gT2JqZWN0LmFzc2lnbih3aXRoRGVjb3JhdGlvbnMsIHJlcXVlc3RXaXRoRGVmYXVsdHMpO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbmZ1bmN0aW9uIHJlc3RFbmRwb2ludE1ldGhvZHMob2N0b2tpdCkge1xuICBjb25zdCBhcGkgPSBlbmRwb2ludHNUb01ldGhvZHMob2N0b2tpdCk7XG4gIHJldHVybiB7XG4gICAgcmVzdDogYXBpXG4gIH07XG59XG5yZXN0RW5kcG9pbnRNZXRob2RzLlZFUlNJT04gPSBWRVJTSU9OO1xuZnVuY3Rpb24gbGVnYWN5UmVzdEVuZHBvaW50TWV0aG9kcyhvY3Rva2l0KSB7XG4gIGNvbnN0IGFwaSA9IGVuZHBvaW50c1RvTWV0aG9kcyhvY3Rva2l0KTtcbiAgcmV0dXJuIHtcbiAgICAuLi5hcGksXG4gICAgcmVzdDogYXBpXG4gIH07XG59XG5sZWdhY3lSZXN0RW5kcG9pbnRNZXRob2RzLlZFUlNJT04gPSBWRVJTSU9OO1xuLy8gQW5ub3RhdGUgdGhlIENvbW1vbkpTIGV4cG9ydCBuYW1lcyBmb3IgRVNNIGltcG9ydCBpbiBub2RlOlxuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gIGxlZ2FjeVJlc3RFbmRwb2ludE1ldGhvZHMsXG4gIHJlc3RFbmRwb2ludE1ldGhvZHNcbn0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wRGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgX19nZXRPd25Qcm9wTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcztcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fZXhwb3J0ID0gKHRhcmdldCwgYWxsKSA9PiB7XG4gIGZvciAodmFyIG5hbWUgaW4gYWxsKVxuICAgIF9fZGVmUHJvcCh0YXJnZXQsIG5hbWUsIHsgZ2V0OiBhbGxbbmFtZV0sIGVudW1lcmFibGU6IHRydWUgfSk7XG59O1xudmFyIF9fY29weVByb3BzID0gKHRvLCBmcm9tLCBleGNlcHQsIGRlc2MpID0+IHtcbiAgaWYgKGZyb20gJiYgdHlwZW9mIGZyb20gPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGZyb20gPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGZvciAobGV0IGtleSBvZiBfX2dldE93blByb3BOYW1lcyhmcm9tKSlcbiAgICAgIGlmICghX19oYXNPd25Qcm9wLmNhbGwodG8sIGtleSkgJiYga2V5ICE9PSBleGNlcHQpXG4gICAgICAgIF9fZGVmUHJvcCh0bywga2V5LCB7IGdldDogKCkgPT4gZnJvbVtrZXldLCBlbnVtZXJhYmxlOiAhKGRlc2MgPSBfX2dldE93blByb3BEZXNjKGZyb20sIGtleSkpIHx8IGRlc2MuZW51bWVyYWJsZSB9KTtcbiAgfVxuICByZXR1cm4gdG87XG59O1xudmFyIF9fdG9Db21tb25KUyA9IChtb2QpID0+IF9fY29weVByb3BzKF9fZGVmUHJvcCh7fSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSksIG1vZCk7XG5cbi8vIHBrZy9kaXN0LXNyYy9pbmRleC5qc1xudmFyIGRpc3Rfc3JjX2V4cG9ydHMgPSB7fTtcbl9fZXhwb3J0KGRpc3Rfc3JjX2V4cG9ydHMsIHtcbiAgY29tcG9zZVBhZ2luYXRlUmVzdDogKCkgPT4gY29tcG9zZVBhZ2luYXRlUmVzdCxcbiAgaXNQYWdpbmF0aW5nRW5kcG9pbnQ6ICgpID0+IGlzUGFnaW5hdGluZ0VuZHBvaW50LFxuICBwYWdpbmF0ZVJlc3Q6ICgpID0+IHBhZ2luYXRlUmVzdCxcbiAgcGFnaW5hdGluZ0VuZHBvaW50czogKCkgPT4gcGFnaW5hdGluZ0VuZHBvaW50c1xufSk7XG5tb2R1bGUuZXhwb3J0cyA9IF9fdG9Db21tb25KUyhkaXN0X3NyY19leHBvcnRzKTtcblxuLy8gcGtnL2Rpc3Qtc3JjL3ZlcnNpb24uanNcbnZhciBWRVJTSU9OID0gXCI5LjIuMVwiO1xuXG4vLyBwa2cvZGlzdC1zcmMvbm9ybWFsaXplLXBhZ2luYXRlZC1saXN0LXJlc3BvbnNlLmpzXG5mdW5jdGlvbiBub3JtYWxpemVQYWdpbmF0ZWRMaXN0UmVzcG9uc2UocmVzcG9uc2UpIHtcbiAgaWYgKCFyZXNwb25zZS5kYXRhKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnJlc3BvbnNlLFxuICAgICAgZGF0YTogW11cbiAgICB9O1xuICB9XG4gIGNvbnN0IHJlc3BvbnNlTmVlZHNOb3JtYWxpemF0aW9uID0gXCJ0b3RhbF9jb3VudFwiIGluIHJlc3BvbnNlLmRhdGEgJiYgIShcInVybFwiIGluIHJlc3BvbnNlLmRhdGEpO1xuICBpZiAoIXJlc3BvbnNlTmVlZHNOb3JtYWxpemF0aW9uKVxuICAgIHJldHVybiByZXNwb25zZTtcbiAgY29uc3QgaW5jb21wbGV0ZVJlc3VsdHMgPSByZXNwb25zZS5kYXRhLmluY29tcGxldGVfcmVzdWx0cztcbiAgY29uc3QgcmVwb3NpdG9yeVNlbGVjdGlvbiA9IHJlc3BvbnNlLmRhdGEucmVwb3NpdG9yeV9zZWxlY3Rpb247XG4gIGNvbnN0IHRvdGFsQ291bnQgPSByZXNwb25zZS5kYXRhLnRvdGFsX2NvdW50O1xuICBkZWxldGUgcmVzcG9uc2UuZGF0YS5pbmNvbXBsZXRlX3Jlc3VsdHM7XG4gIGRlbGV0ZSByZXNwb25zZS5kYXRhLnJlcG9zaXRvcnlfc2VsZWN0aW9uO1xuICBkZWxldGUgcmVzcG9uc2UuZGF0YS50b3RhbF9jb3VudDtcbiAgY29uc3QgbmFtZXNwYWNlS2V5ID0gT2JqZWN0LmtleXMocmVzcG9uc2UuZGF0YSlbMF07XG4gIGNvbnN0IGRhdGEgPSByZXNwb25zZS5kYXRhW25hbWVzcGFjZUtleV07XG4gIHJlc3BvbnNlLmRhdGEgPSBkYXRhO1xuICBpZiAodHlwZW9mIGluY29tcGxldGVSZXN1bHRzICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmVzcG9uc2UuZGF0YS5pbmNvbXBsZXRlX3Jlc3VsdHMgPSBpbmNvbXBsZXRlUmVzdWx0cztcbiAgfVxuICBpZiAodHlwZW9mIHJlcG9zaXRvcnlTZWxlY3Rpb24gIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXNwb25zZS5kYXRhLnJlcG9zaXRvcnlfc2VsZWN0aW9uID0gcmVwb3NpdG9yeVNlbGVjdGlvbjtcbiAgfVxuICByZXNwb25zZS5kYXRhLnRvdGFsX2NvdW50ID0gdG90YWxDb3VudDtcbiAgcmV0dXJuIHJlc3BvbnNlO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvaXRlcmF0b3IuanNcbmZ1bmN0aW9uIGl0ZXJhdG9yKG9jdG9raXQsIHJvdXRlLCBwYXJhbWV0ZXJzKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSB0eXBlb2Ygcm91dGUgPT09IFwiZnVuY3Rpb25cIiA/IHJvdXRlLmVuZHBvaW50KHBhcmFtZXRlcnMpIDogb2N0b2tpdC5yZXF1ZXN0LmVuZHBvaW50KHJvdXRlLCBwYXJhbWV0ZXJzKTtcbiAgY29uc3QgcmVxdWVzdE1ldGhvZCA9IHR5cGVvZiByb3V0ZSA9PT0gXCJmdW5jdGlvblwiID8gcm91dGUgOiBvY3Rva2l0LnJlcXVlc3Q7XG4gIGNvbnN0IG1ldGhvZCA9IG9wdGlvbnMubWV0aG9kO1xuICBjb25zdCBoZWFkZXJzID0gb3B0aW9ucy5oZWFkZXJzO1xuICBsZXQgdXJsID0gb3B0aW9ucy51cmw7XG4gIHJldHVybiB7XG4gICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTogKCkgPT4gKHtcbiAgICAgIGFzeW5jIG5leHQoKSB7XG4gICAgICAgIGlmICghdXJsKVxuICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUgfTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcXVlc3RNZXRob2QoeyBtZXRob2QsIHVybCwgaGVhZGVycyB9KTtcbiAgICAgICAgICBjb25zdCBub3JtYWxpemVkUmVzcG9uc2UgPSBub3JtYWxpemVQYWdpbmF0ZWRMaXN0UmVzcG9uc2UocmVzcG9uc2UpO1xuICAgICAgICAgIHVybCA9ICgobm9ybWFsaXplZFJlc3BvbnNlLmhlYWRlcnMubGluayB8fCBcIlwiKS5tYXRjaChcbiAgICAgICAgICAgIC88KFtePl0rKT47XFxzKnJlbD1cIm5leHRcIi9cbiAgICAgICAgICApIHx8IFtdKVsxXTtcbiAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbm9ybWFsaXplZFJlc3BvbnNlIH07XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgaWYgKGVycm9yLnN0YXR1cyAhPT0gNDA5KVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgdXJsID0gXCJcIjtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgc3RhdHVzOiAyMDAsXG4gICAgICAgICAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgICAgICAgICBkYXRhOiBbXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9O1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvcGFnaW5hdGUuanNcbmZ1bmN0aW9uIHBhZ2luYXRlKG9jdG9raXQsIHJvdXRlLCBwYXJhbWV0ZXJzLCBtYXBGbikge1xuICBpZiAodHlwZW9mIHBhcmFtZXRlcnMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIG1hcEZuID0gcGFyYW1ldGVycztcbiAgICBwYXJhbWV0ZXJzID0gdm9pZCAwO1xuICB9XG4gIHJldHVybiBnYXRoZXIoXG4gICAgb2N0b2tpdCxcbiAgICBbXSxcbiAgICBpdGVyYXRvcihvY3Rva2l0LCByb3V0ZSwgcGFyYW1ldGVycylbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCksXG4gICAgbWFwRm5cbiAgKTtcbn1cbmZ1bmN0aW9uIGdhdGhlcihvY3Rva2l0LCByZXN1bHRzLCBpdGVyYXRvcjIsIG1hcEZuKSB7XG4gIHJldHVybiBpdGVyYXRvcjIubmV4dCgpLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgIGlmIChyZXN1bHQuZG9uZSkge1xuICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuICAgIGxldCBlYXJseUV4aXQgPSBmYWxzZTtcbiAgICBmdW5jdGlvbiBkb25lKCkge1xuICAgICAgZWFybHlFeGl0ID0gdHJ1ZTtcbiAgICB9XG4gICAgcmVzdWx0cyA9IHJlc3VsdHMuY29uY2F0KFxuICAgICAgbWFwRm4gPyBtYXBGbihyZXN1bHQudmFsdWUsIGRvbmUpIDogcmVzdWx0LnZhbHVlLmRhdGFcbiAgICApO1xuICAgIGlmIChlYXJseUV4aXQpIHtcbiAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbiAgICByZXR1cm4gZ2F0aGVyKG9jdG9raXQsIHJlc3VsdHMsIGl0ZXJhdG9yMiwgbWFwRm4pO1xuICB9KTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2NvbXBvc2UtcGFnaW5hdGUuanNcbnZhciBjb21wb3NlUGFnaW5hdGVSZXN0ID0gT2JqZWN0LmFzc2lnbihwYWdpbmF0ZSwge1xuICBpdGVyYXRvclxufSk7XG5cbi8vIHBrZy9kaXN0LXNyYy9nZW5lcmF0ZWQvcGFnaW5hdGluZy1lbmRwb2ludHMuanNcbnZhciBwYWdpbmF0aW5nRW5kcG9pbnRzID0gW1xuICBcIkdFVCAvYWR2aXNvcmllc1wiLFxuICBcIkdFVCAvYXBwL2hvb2svZGVsaXZlcmllc1wiLFxuICBcIkdFVCAvYXBwL2luc3RhbGxhdGlvbi1yZXF1ZXN0c1wiLFxuICBcIkdFVCAvYXBwL2luc3RhbGxhdGlvbnNcIixcbiAgXCJHRVQgL2Fzc2lnbm1lbnRzL3thc3NpZ25tZW50X2lkfS9hY2NlcHRlZF9hc3NpZ25tZW50c1wiLFxuICBcIkdFVCAvY2xhc3Nyb29tc1wiLFxuICBcIkdFVCAvY2xhc3Nyb29tcy97Y2xhc3Nyb29tX2lkfS9hc3NpZ25tZW50c1wiLFxuICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2RlcGVuZGFib3QvYWxlcnRzXCIsXG4gIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0c1wiLFxuICBcIkdFVCAvZXZlbnRzXCIsXG4gIFwiR0VUIC9naXN0c1wiLFxuICBcIkdFVCAvZ2lzdHMvcHVibGljXCIsXG4gIFwiR0VUIC9naXN0cy9zdGFycmVkXCIsXG4gIFwiR0VUIC9naXN0cy97Z2lzdF9pZH0vY29tbWVudHNcIixcbiAgXCJHRVQgL2dpc3RzL3tnaXN0X2lkfS9jb21taXRzXCIsXG4gIFwiR0VUIC9naXN0cy97Z2lzdF9pZH0vZm9ya3NcIixcbiAgXCJHRVQgL2luc3RhbGxhdGlvbi9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL2lzc3Vlc1wiLFxuICBcIkdFVCAvbGljZW5zZXNcIixcbiAgXCJHRVQgL21hcmtldHBsYWNlX2xpc3RpbmcvcGxhbnNcIixcbiAgXCJHRVQgL21hcmtldHBsYWNlX2xpc3RpbmcvcGxhbnMve3BsYW5faWR9L2FjY291bnRzXCIsXG4gIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3N0dWJiZWQvcGxhbnNcIixcbiAgXCJHRVQgL21hcmtldHBsYWNlX2xpc3Rpbmcvc3R1YmJlZC9wbGFucy97cGxhbl9pZH0vYWNjb3VudHNcIixcbiAgXCJHRVQgL25ldHdvcmtzL3tvd25lcn0ve3JlcG99L2V2ZW50c1wiLFxuICBcIkdFVCAvbm90aWZpY2F0aW9uc1wiLFxuICBcIkdFVCAvb3JnYW5pemF0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2NhY2hlL3VzYWdlLWJ5LXJlcG9zaXRvcnlcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9ibG9ja3NcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vY29kZS1zY2FubmluZy9hbGVydHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzL3NlY3JldHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2NvcGlsb3QvYmlsbGluZy9zZWF0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L2FsZXJ0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2V2ZW50c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9mYWlsZWRfaW52aXRhdGlvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vaG9va3NcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vaW5zdGFsbGF0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9pbnZpdGF0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH0vdGVhbXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vaXNzdWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vbWVtYmVycy97dXNlcm5hbWV9L2NvZGVzcGFjZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vbWlncmF0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMve3JvbGVfaWR9L3RlYW1zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy97cm9sZV9pZH0vdXNlcnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vb3V0c2lkZV9jb2xsYWJvcmF0b3JzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3BhY2thZ2VzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbi1yZXF1ZXN0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW4tcmVxdWVzdHMve3BhdF9yZXF1ZXN0X2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2Vuc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW5zL3twYXRfaWR9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wcm9qZWN0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wcm9wZXJ0aWVzL3ZhbHVlc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wdWJsaWNfbWVtYmVyc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9yZXBvc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9ydWxlc2V0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9ydWxlc2V0cy9ydWxlLXN1aXRlc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3NlY3VyaXR5LWFkdmlzb3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2ludml0YXRpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L21lbWJlcnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcHJvamVjdHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcmVwb3NcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vdGVhbXNcIixcbiAgXCJHRVQgL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH0vY2FyZHNcIixcbiAgXCJHRVQgL3Byb2plY3RzL3twcm9qZWN0X2lkfS9jb2xsYWJvcmF0b3JzXCIsXG4gIFwiR0VUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sdW1uc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9hcnRpZmFjdHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvY2FjaGVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL29yZ2FuaXphdGlvbi1zZWNyZXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL29yZ2FuaXphdGlvbi12YXJpYWJsZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVyc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXJ0aWZhY3RzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXR0ZW1wdHMve2F0dGVtcHRfbnVtYmVyfS9qb2JzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vam9ic1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9zZWNyZXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3ZhcmlhYmxlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3NcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvd29ya2Zsb3dzL3t3b3JrZmxvd19pZH0vcnVuc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aXZpdHlcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Fzc2lnbmVlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXJ1bnMve2NoZWNrX3J1bl9pZH0vYW5ub3RhdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXN1aXRlcy97Y2hlY2tfc3VpdGVfaWR9L2NoZWNrLXJ1bnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9pbnN0YW5jZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYW5hbHlzZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvZGV2Y29udGFpbmVyc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9zZWNyZXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2xsYWJvcmF0b3JzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97Y29tbWl0X3NoYX0vY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve2NvbW1pdF9zaGF9L3B1bGxzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L2NoZWNrLXJ1bnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vY2hlY2stc3VpdGVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L3N0YXR1c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfS9zdGF0dXNlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29udHJpYnV0b3JzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L2FsZXJ0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9zZWNyZXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHMve2RlcGxveW1lbnRfaWR9L3N0YXR1c2VzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudC1icmFuY2gtcG9saWNpZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudF9wcm90ZWN0aW9uX3J1bGVzL2FwcHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2V2ZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZm9ya3NcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaW52aXRhdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2V2ZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2NvbW1lbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vZXZlbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbGFiZWxzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vdGltZWxpbmVcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2tleXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhYmVsc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lcy97bWlsZXN0b25lX251bWJlcn0vbGFiZWxzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ub3RpZmljYXRpb25zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9idWlsZHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Byb2plY3RzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxsc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vY29tbWl0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9maWxlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH0vY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vYXNzZXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlcy9icmFuY2hlcy97YnJhbmNofVwiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzL3J1bGUtc3VpdGVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9L2xvY2F0aW9uc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjdXJpdHktYWR2aXNvcmllc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3RhcmdhemVyc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3Vic2NyaWJlcnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RhZ3NcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RlYW1zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90b3BpY3NcIixcbiAgXCJHRVQgL3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHNcIixcbiAgXCJHRVQgL3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH0vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS92YXJpYWJsZXNcIixcbiAgXCJHRVQgL3NlYXJjaC9jb2RlXCIsXG4gIFwiR0VUIC9zZWFyY2gvY29tbWl0c1wiLFxuICBcIkdFVCAvc2VhcmNoL2lzc3Vlc1wiLFxuICBcIkdFVCAvc2VhcmNoL2xhYmVsc1wiLFxuICBcIkdFVCAvc2VhcmNoL3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvc2VhcmNoL3RvcGljc1wiLFxuICBcIkdFVCAvc2VhcmNoL3VzZXJzXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vZGlzY3Vzc2lvbnNcIixcbiAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvdGVhbXMve3RlYW1faWR9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vaW52aXRhdGlvbnNcIixcbiAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9tZW1iZXJzXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vcHJvamVjdHNcIixcbiAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9yZXBvc1wiLFxuICBcIkdFVCAvdGVhbXMve3RlYW1faWR9L3RlYW1zXCIsXG4gIFwiR0VUIC91c2VyL2Jsb2Nrc1wiLFxuICBcIkdFVCAvdXNlci9jb2Rlc3BhY2VzXCIsXG4gIFwiR0VUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0c1wiLFxuICBcIkdFVCAvdXNlci9lbWFpbHNcIixcbiAgXCJHRVQgL3VzZXIvZm9sbG93ZXJzXCIsXG4gIFwiR0VUIC91c2VyL2ZvbGxvd2luZ1wiLFxuICBcIkdFVCAvdXNlci9ncGdfa2V5c1wiLFxuICBcIkdFVCAvdXNlci9pbnN0YWxsYXRpb25zXCIsXG4gIFwiR0VUIC91c2VyL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC91c2VyL2lzc3Vlc1wiLFxuICBcIkdFVCAvdXNlci9rZXlzXCIsXG4gIFwiR0VUIC91c2VyL21hcmtldHBsYWNlX3B1cmNoYXNlc1wiLFxuICBcIkdFVCAvdXNlci9tYXJrZXRwbGFjZV9wdXJjaGFzZXMvc3R1YmJlZFwiLFxuICBcIkdFVCAvdXNlci9tZW1iZXJzaGlwcy9vcmdzXCIsXG4gIFwiR0VUIC91c2VyL21pZ3JhdGlvbnNcIixcbiAgXCJHRVQgL3VzZXIvbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL3VzZXIvb3Jnc1wiLFxuICBcIkdFVCAvdXNlci9wYWNrYWdlc1wiLFxuICBcIkdFVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiLFxuICBcIkdFVCAvdXNlci9wdWJsaWNfZW1haWxzXCIsXG4gIFwiR0VUIC91c2VyL3JlcG9zXCIsXG4gIFwiR0VUIC91c2VyL3JlcG9zaXRvcnlfaW52aXRhdGlvbnNcIixcbiAgXCJHRVQgL3VzZXIvc29jaWFsX2FjY291bnRzXCIsXG4gIFwiR0VUIC91c2VyL3NzaF9zaWduaW5nX2tleXNcIixcbiAgXCJHRVQgL3VzZXIvc3RhcnJlZFwiLFxuICBcIkdFVCAvdXNlci9zdWJzY3JpcHRpb25zXCIsXG4gIFwiR0VUIC91c2VyL3RlYW1zXCIsXG4gIFwiR0VUIC91c2Vyc1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ldmVudHNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzL29yZ3Mve29yZ31cIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzL3B1YmxpY1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9mb2xsb3dlcnNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZm9sbG93aW5nXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2dpc3RzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2dwZ19rZXlzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2tleXNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vb3Jnc1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlc1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wcm9qZWN0c1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9yZWNlaXZlZF9ldmVudHNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcmVjZWl2ZWRfZXZlbnRzL3B1YmxpY1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9yZXBvc1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zb2NpYWxfYWNjb3VudHNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc3NoX3NpZ25pbmdfa2V5c1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zdGFycmVkXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3N1YnNjcmlwdGlvbnNcIlxuXTtcblxuLy8gcGtnL2Rpc3Qtc3JjL3BhZ2luYXRpbmctZW5kcG9pbnRzLmpzXG5mdW5jdGlvbiBpc1BhZ2luYXRpbmdFbmRwb2ludChhcmcpIHtcbiAgaWYgKHR5cGVvZiBhcmcgPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gcGFnaW5hdGluZ0VuZHBvaW50cy5pbmNsdWRlcyhhcmcpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbmZ1bmN0aW9uIHBhZ2luYXRlUmVzdChvY3Rva2l0KSB7XG4gIHJldHVybiB7XG4gICAgcGFnaW5hdGU6IE9iamVjdC5hc3NpZ24ocGFnaW5hdGUuYmluZChudWxsLCBvY3Rva2l0KSwge1xuICAgICAgaXRlcmF0b3I6IGl0ZXJhdG9yLmJpbmQobnVsbCwgb2N0b2tpdClcbiAgICB9KVxuICB9O1xufVxucGFnaW5hdGVSZXN0LlZFUlNJT04gPSBWRVJTSU9OO1xuLy8gQW5ub3RhdGUgdGhlIENvbW1vbkpTIGV4cG9ydCBuYW1lcyBmb3IgRVNNIGltcG9ydCBpbiBub2RlOlxuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gIGNvbXBvc2VQYWdpbmF0ZVJlc3QsXG4gIGlzUGFnaW5hdGluZ0VuZHBvaW50LFxuICBwYWdpbmF0ZVJlc3QsXG4gIHBhZ2luYXRpbmdFbmRwb2ludHNcbn0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRPY3Rva2l0T3B0aW9ucyA9IGV4cG9ydHMuR2l0SHViID0gZXhwb3J0cy5kZWZhdWx0cyA9IGV4cG9ydHMuY29udGV4dCA9IHZvaWQgMDtcbmNvbnN0IENvbnRleHQgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIi4vY29udGV4dFwiKSk7XG5jb25zdCBVdGlscyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiLi9pbnRlcm5hbC91dGlsc1wiKSk7XG4vLyBvY3Rva2l0ICsgcGx1Z2luc1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIkBvY3Rva2l0L2NvcmVcIik7XG5jb25zdCBwbHVnaW5fcmVzdF9lbmRwb2ludF9tZXRob2RzXzEgPSByZXF1aXJlKFwiQG9jdG9raXQvcGx1Z2luLXJlc3QtZW5kcG9pbnQtbWV0aG9kc1wiKTtcbmNvbnN0IHBsdWdpbl9wYWdpbmF0ZV9yZXN0XzEgPSByZXF1aXJlKFwiQG9jdG9raXQvcGx1Z2luLXBhZ2luYXRlLXJlc3RcIik7XG5leHBvcnRzLmNvbnRleHQgPSBuZXcgQ29udGV4dC5Db250ZXh0KCk7XG5jb25zdCBiYXNlVXJsID0gVXRpbHMuZ2V0QXBpQmFzZVVybCgpO1xuZXhwb3J0cy5kZWZhdWx0cyA9IHtcbiAgICBiYXNlVXJsLFxuICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgYWdlbnQ6IFV0aWxzLmdldFByb3h5QWdlbnQoYmFzZVVybCksXG4gICAgICAgIGZldGNoOiBVdGlscy5nZXRQcm94eUZldGNoKGJhc2VVcmwpXG4gICAgfVxufTtcbmV4cG9ydHMuR2l0SHViID0gY29yZV8xLk9jdG9raXQucGx1Z2luKHBsdWdpbl9yZXN0X2VuZHBvaW50X21ldGhvZHNfMS5yZXN0RW5kcG9pbnRNZXRob2RzLCBwbHVnaW5fcGFnaW5hdGVfcmVzdF8xLnBhZ2luYXRlUmVzdCkuZGVmYXVsdHMoZXhwb3J0cy5kZWZhdWx0cyk7XG4vKipcbiAqIENvbnZpZW5jZSBmdW5jdGlvbiB0byBjb3JyZWN0bHkgZm9ybWF0IE9jdG9raXQgT3B0aW9ucyB0byBwYXNzIGludG8gdGhlIGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSAgICAgdG9rZW4gICAgdGhlIHJlcG8gUEFUIG9yIEdJVEhVQl9UT0tFTlxuICogQHBhcmFtICAgICBvcHRpb25zICBvdGhlciBvcHRpb25zIHRvIHNldFxuICovXG5mdW5jdGlvbiBnZXRPY3Rva2l0T3B0aW9ucyh0b2tlbiwgb3B0aW9ucykge1xuICAgIGNvbnN0IG9wdHMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zIHx8IHt9KTsgLy8gU2hhbGxvdyBjbG9uZSAtIGRvbid0IG11dGF0ZSB0aGUgb2JqZWN0IHByb3ZpZGVkIGJ5IHRoZSBjYWxsZXJcbiAgICAvLyBBdXRoXG4gICAgY29uc3QgYXV0aCA9IFV0aWxzLmdldEF1dGhTdHJpbmcodG9rZW4sIG9wdHMpO1xuICAgIGlmIChhdXRoKSB7XG4gICAgICAgIG9wdHMuYXV0aCA9IGF1dGg7XG4gICAgfVxuICAgIHJldHVybiBvcHRzO1xufVxuZXhwb3J0cy5nZXRPY3Rva2l0T3B0aW9ucyA9IGdldE9jdG9raXRPcHRpb25zO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbHMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRPY3Rva2l0ID0gZXhwb3J0cy5jb250ZXh0ID0gdm9pZCAwO1xuY29uc3QgQ29udGV4dCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiLi9jb250ZXh0XCIpKTtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi91dGlsc1wiKTtcbmV4cG9ydHMuY29udGV4dCA9IG5ldyBDb250ZXh0LkNvbnRleHQoKTtcbi8qKlxuICogUmV0dXJucyBhIGh5ZHJhdGVkIG9jdG9raXQgcmVhZHkgdG8gdXNlIGZvciBHaXRIdWIgQWN0aW9uc1xuICpcbiAqIEBwYXJhbSAgICAgdG9rZW4gICAgdGhlIHJlcG8gUEFUIG9yIEdJVEhVQl9UT0tFTlxuICogQHBhcmFtICAgICBvcHRpb25zICBvdGhlciBvcHRpb25zIHRvIHNldFxuICovXG5mdW5jdGlvbiBnZXRPY3Rva2l0KHRva2VuLCBvcHRpb25zLCAuLi5hZGRpdGlvbmFsUGx1Z2lucykge1xuICAgIGNvbnN0IEdpdEh1YldpdGhQbHVnaW5zID0gdXRpbHNfMS5HaXRIdWIucGx1Z2luKC4uLmFkZGl0aW9uYWxQbHVnaW5zKTtcbiAgICByZXR1cm4gbmV3IEdpdEh1YldpdGhQbHVnaW5zKCgwLCB1dGlsc18xLmdldE9jdG9raXRPcHRpb25zKSh0b2tlbiwgb3B0aW9ucykpO1xufVxuZXhwb3J0cy5nZXRPY3Rva2l0ID0gZ2V0T2N0b2tpdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdpdGh1Yi5qcy5tYXAiLAogICAgImltcG9ydCAqIGFzIGZzIGZyb20gJ25vZGU6ZnMnXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ25vZGU6cGF0aCdcbmltcG9ydCB7IGV4ZWMgfSBmcm9tIFwiQGFjdGlvbnMvZXhlY1wiXG5pbXBvcnQgeyBkZWJ1ZywgZ2V0SW5wdXQsIGdldFN0YXRlLCBzYXZlU3RhdGUsIHNldEZhaWxlZCB9IGZyb20gXCJAYWN0aW9ucy9jb3JlXCJcbmltcG9ydCB7IERlZmF1bHRBcnRpZmFjdENsaWVudCB9IGZyb20gJ0BhY3Rpb25zL2FydGlmYWN0J1xuaW1wb3J0IHsgZ2V0UHVsbFJlcXVlc3ROdW1iZXIgfSBmcm9tICcuLi9oZWxwL3B1bGxzJ1xuaW1wb3J0IHsgY29sbGVjdFByb21ldGhldXMgfSBmcm9tICcuLi9tZXRyaWNzL3Byb21ldGhldXMnXG5pbXBvcnQgeyBkZWZhdWx0TWV0cmljcyB9IGZyb20gJy4uL21ldHJpY3MvZGVmYXVsdCdcbmltcG9ydCB7IHJlbmRlclJlcG9ydCB9IGZyb20gJy4uL3JlcG9ydC9kZWZhdWx0J1xuXG4oYXN5bmMgZnVuY3Rpb24gcG9zdCgpIHtcblx0bGV0IGN3ZCA9IGdldFN0YXRlKFwiQ1dEXCIpXG5cdGxldCBzZGsgPSBnZXRJbnB1dChcInNka19uYW1lXCIsIHsgcmVxdWlyZWQ6IHRydWUgfSlcblxuXHRsZXQgZW5kID0gbmV3IERhdGUoKVxuXHRsZXQgc3RhcnQgPSBuZXcgRGF0ZShnZXRTdGF0ZShcIllEQl9TVEFSVF9USU1FXCIpKVxuXHRsZXQgYXJ0aWZhY3RDbGllbnQgPSBuZXcgRGVmYXVsdEFydGlmYWN0Q2xpZW50KClcblxuXHRzYXZlU3RhdGUoXCJZREJfRU5EX1RJTUVcIiwgZW5kLnRvSVNPU3RyaW5nKCkpXG5cblx0ZGVidWcoXCJDb2xsZWN0aW5nIG1ldHJpY3MuLi5cIilcblx0bGV0IG1ldHJpY3MgPSBhd2FpdCBjb2xsZWN0UHJvbWV0aGV1cyhzdGFydCwgZW5kLCBkZWZhdWx0TWV0cmljcy5tZXRyaWNzKVxuXHRkZWJ1ZyhgTWV0cmljczogJHtPYmplY3Qua2V5cyhtZXRyaWNzKX1gKVxuXG5cdGRlYnVnKFwiUmVuZGVyaW5nIHJlcG9ydC4uLlwiKVxuXHRsZXQgcmVwb3J0ID0gcmVuZGVyUmVwb3J0KHNkaywgbWV0cmljcylcblx0ZGVidWcoYFJlcG9ydDogJHtyZXBvcnR9YClcblxuXHRkZWJ1ZyhcIldyaXRpbmcgcmVwb3J0Li4uXCIpXG5cdGxldCByZXBvcnRQYXRoID0gcGF0aC5qb2luKGN3ZCwgYHJlcG9ydC5tZGApXG5cdGZzLndyaXRlRmlsZVN5bmMocmVwb3J0UGF0aCwgcmVwb3J0LCB7IGVuY29kaW5nOiBcInV0Zi04XCIgfSlcblx0ZGVidWcoYFJlcG9ydCB3cml0dGVuIHRvICR7cmVwb3J0UGF0aH1gKVxuXG5cdHtcblx0XHRkZWJ1ZyhcIlVwbG9hZCByZXBvcnQgYXMgYW4gYXJ0aWZhY3QuLi5cIilcblx0XHRsZXQgeyBpZCB9ID0gYXdhaXQgYXJ0aWZhY3RDbGllbnQudXBsb2FkQXJ0aWZhY3QoYCR7c2RrfS1yZXBvcnQubWRgLCBbcmVwb3J0UGF0aF0sIGN3ZCwgeyByZXRlbnRpb25EYXlzOiAxIH0pXG5cdFx0ZGVidWcoYFJlcG9ydCB1cGxvYWRlZCBhcyBhbiBhcnRpZmFjdCAke2lkfWApXG5cdH1cblxuXHRkZWJ1ZygnQXF1aXJlIHB1bGwgcmVxdWVzdCBudW1iZXIuLi4nKVxuXHRsZXQgcHJOdW1iZXIgPSBhd2FpdCBnZXRQdWxsUmVxdWVzdE51bWJlcigpXG5cdGRlYnVnKGBQdWxsIHJlcXVlc3QgbnVtYmVyOiAke3ByTnVtYmVyfWApXG5cblx0aWYgKHByTnVtYmVyKSB7XG5cdFx0ZGVidWcoXCJXcml0aW5nIHB1bGwgbnVtYmVyLi4uXCIpXG5cdFx0bGV0IHB1bGxQYXRoID0gcGF0aC5qb2luKGN3ZCwgXCJwdWxsLnR4dFwiKVxuXHRcdGZzLndyaXRlRmlsZVN5bmMocHVsbFBhdGgsIHByTnVtYmVyLnRvRml4ZWQoMCksIHsgZW5jb2Rpbmc6IFwidXRmLThcIiB9KVxuXHRcdGRlYnVnKGBQdWxsIG51bWJlciB3cml0dGVuIHRvICR7cHVsbFBhdGh9YClcblxuXHRcdGRlYnVnKFwiVXBsb2FkIHB1bGwgbnVtYmVyIGFzIGFuIGFydGlmYWN0Li4uXCIpXG5cdFx0bGV0IHsgaWQgfSA9IGF3YWl0IGFydGlmYWN0Q2xpZW50LnVwbG9hZEFydGlmYWN0KGAke3Nka30tcHVsbC50eHRgLCBbcHVsbFBhdGhdLCBjd2QsIHsgcmV0ZW50aW9uRGF5czogMSB9KVxuXHRcdGRlYnVnKGBQdWxsIG51bWJlciB1cGxvYWRlZCBhcyBhbiBhcnRpZmFjdCAke2lkfWApXG5cdH1cblxuXHRkZWJ1ZyhcIlN0b3BwaW5nIFlEQi4uLlwiKVxuXHRhd2FpdCBleGVjKGBkb2NrZXJgLCBbYGNvbXBvc2VgLCBgLWZgLCBgY29tcG9zZS55YW1sYCwgYGRvd25gXSwgeyBjd2QgfSlcblxuXHRkZWJ1ZyhgWURCIHN0b3BwZWQgYXQgJHtlbmR9YClcblxuXHRsZXQgZHVyYXRpb24gPSBlbmQuZ2V0VGltZSgpIC0gc3RhcnQuZ2V0VGltZSgpXG5cdGRlYnVnKGBZREIgU0xPIFRlc3QgZHVyYXRpb246ICR7ZHVyYXRpb259bXMuYClcblxuXHRkZWJ1ZyhcIkNsZWFuaW5nIHVwIHRlbXAgZGlyZWN0b3J5Li4uXCIpXG5cdGZzLnJtU3luYyhjd2QsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG5cdGlmICghcHJOdW1iZXIpIHtcblx0XHRzZXRGYWlsZWQoJ1B1bGwgUmVxdWVzdCBudW1iZXIgY291bGQgbm90IGJlIGRldGVybWluZWQuJyk7XG5cdH1cbn0pKClcbiIsCiAgICAiaW1wb3J0IHsgZ2V0SW5wdXQgfSBmcm9tIFwiQGFjdGlvbnMvY29yZVwiO1xuaW1wb3J0IHsgY29udGV4dCwgZ2V0T2N0b2tpdCB9IGZyb20gXCJAYWN0aW9ucy9naXRodWJcIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFB1bGxSZXF1ZXN0TnVtYmVyKCkge1xuXHRsZXQgdG9rZW4gPSBnZXRJbnB1dCgnZ2l0aHViX3Rva2VuJykgfHwgcHJvY2Vzcy5lbnYuR0lUSFVCX1RPS0VOO1xuXG5cdGxldCBwck51bWJlciA9IGdldElucHV0KFwiZ2l0aHViX3B1bGxfcmVxdWVzdF9udW1iZXJcIik7XG5cdGlmIChwck51bWJlci5sZW5ndGggPiAwKSB7XG5cdFx0cmV0dXJuIHBhcnNlSW50KHByTnVtYmVyKTtcblx0fVxuXG5cdGlmIChjb250ZXh0LmV2ZW50TmFtZSA9PT0gJ3B1bGxfcmVxdWVzdCcpIHtcblx0XHRyZXR1cm4gY29udGV4dC5wYXlsb2FkLnB1bGxfcmVxdWVzdCEubnVtYmVyO1xuXHR9XG5cblx0aWYgKHRva2VuKSB7XG5cdFx0bGV0IG9jdG9raXQgPSBnZXRPY3Rva2l0KHRva2VuKTtcblx0XHRsZXQgYnJhbmNoID0gY29udGV4dC5yZWYucmVwbGFjZSgncmVmcy9oZWFkcy8nLCAnJyk7XG5cblx0XHRjb25zdCB7IGRhdGE6IHB1bGxzIH0gPSBhd2FpdCBvY3Rva2l0LnJlc3QucHVsbHMubGlzdCh7XG5cdFx0XHRzdGF0ZTogJ29wZW4nLFxuXHRcdFx0b3duZXI6IGNvbnRleHQucmVwby5vd25lcixcblx0XHRcdHJlcG86IGNvbnRleHQucmVwby5yZXBvLFxuXHRcdFx0aGVhZDogYCR7Y29udGV4dC5hY3Rvcn06JHticmFuY2h9YCxcblx0XHR9KTtcblxuXHRcdGlmIChwdWxscy5sZW5ndGggPiAwKSB7XG5cdFx0XHRyZXR1cm4gcHVsbHNbMF0ubnVtYmVyO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBudWxsXG59XG4iLAogICAgIi8vIEhvc3RcbmV4cG9ydCBjb25zdCBIT1NUID0gJ2xvY2FsaG9zdCdcblxuLy8gWURCIFN0YXRpYyBub2RlIGNvbmZpZ3VyYXRpb24uIFByZWZlcmUgZG8gbm90IGVkaXQuXG5leHBvcnQgY29uc3QgWURCX0dSUENfUE9SVCA9IDIxMzVcbmV4cG9ydCBjb25zdCBZREJfTU9OX1BPUlQgPSA4NzY1XG5leHBvcnQgY29uc3QgWURCX0lDX1BPUlQgPSAxOTAwMVxuZXhwb3J0IGNvbnN0IFlEQl9URU5BTlQgPSAnL1Jvb3QvdGVzdGRiJ1xuXG4vLyBQYXNzIGludG8gd29ya2xvYWRcbmV4cG9ydCBjb25zdCBZREJfRU5EUE9JTlQgPSBgZ3JwYzovLyR7SE9TVH06JHtZREJfR1JQQ19QT1JUfWBcbmV4cG9ydCBjb25zdCBZQkRfQ09OTkVDVElPTl9TVFJJTkcgPSBgJHtZREJfRU5EUE9JTlR9JHtZREJfVEVOQU5UfWBcblxuZXhwb3J0IGNvbnN0IFBST01FVEhFVVNfUE9SVCA9IDkwOTBcbmV4cG9ydCBjb25zdCBQUk9NRVRIRVVTX1BVU0hHQVRFV0FZX1BPUlQgPSA5MDkxXG5cbmV4cG9ydCBjb25zdCBQUk9NRVRIRVVTX1VSTCA9IGBodHRwOi8vJHtIT1NUfToke1BST01FVEhFVVNfUE9SVH1gXG5leHBvcnQgY29uc3QgUFJPTUVUSEVVU19QVVNIR0FURVdBWV9VUkwgPSBgaHR0cDovLyR7SE9TVH06JHtQUk9NRVRIRVVTX1BVU0hHQVRFV0FZX1BPUlR9YFxuIiwKICAgICJpbXBvcnQgeyBQUk9NRVRIRVVTX1VSTCB9IGZyb20gXCIuLi9jb25zdGFudHNcIlxuaW1wb3J0IHR5cGUgeyBTZXJpZXMgfSBmcm9tIFwiLi4vcmVwb3J0L2NoYXJ0XCJcbmltcG9ydCB0eXBlIHsgTWV0cmljc0RlZmluaXRpb24gfSBmcm9tIFwiLi9kZWZpbml0aW9uXCJcblxuZXhwb3J0IHR5cGUgUHJvbWV0aGV1c1F1ZXJ5UmFuZ2VSZXNwb25zZSA9IHtcblx0XCJzdGF0dXNcIjogXCJzdWNjZXNzXCIgfCBcImVycm9yXCIsXG5cdFwiZGF0YVwiOiB7XG5cdFx0XCJyZXN1bHRUeXBlXCI6IFwibWF0cml4XCIgfCBcInZlY3RvclwiIHwgXCJzY2FsYXJcIiB8IFwic3RyaW5nXCIsXG5cdFx0XCJyZXN1bHRcIjogU2VyaWVzW11cblx0fSxcblx0XCJ3YXJuaW5nc1wiOiBzdHJpbmdbXSxcblx0XCJpbmZvc1wiOiBzdHJpbmdbXSxcblx0XCJlcnJvclwiOiBzdHJpbmcsXG59XG5cbmZ1bmN0aW9uIHF1ZXJ5UmFuZ2UocXVlcnk6IHN0cmluZywgc3RhcnQ6IERhdGUsIGVuZDogRGF0ZSkge1xuXHRsZXQgdXJsID0gbmV3IFVSTChcIi9hcGkvdjEvcXVlcnlfcmFuZ2VcIiwgUFJPTUVUSEVVU19VUkwpXG5cdHVybC5zZWFyY2hQYXJhbXMuc2V0KFwicXVlcnlcIiwgcXVlcnkpXG5cdHVybC5zZWFyY2hQYXJhbXMuc2V0KFwic3RhcnRcIiwgTWF0aC5jZWlsKHN0YXJ0LmdldFRpbWUoKSAvIDEwMDApLnRvU3RyaW5nKCkpXG5cdHVybC5zZWFyY2hQYXJhbXMuc2V0KFwiZW5kXCIsIE1hdGguZmxvb3IoZW5kLmdldFRpbWUoKSAvIDEwMDApLnRvU3RyaW5nKCkpXG5cdHVybC5zZWFyY2hQYXJhbXMuc2V0KFwic3RlcFwiLCBcIjFcIilcblxuXHRyZXR1cm4gZmV0Y2godXJsKS50aGVuKHIgPT4gci5qc29uKCkpIGFzIFByb21pc2U8UHJvbWV0aGV1c1F1ZXJ5UmFuZ2VSZXNwb25zZT5cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNvbGxlY3RQcm9tZXRoZXVzKHN0YXJ0OiBEYXRlLCBlbmQ6IERhdGUsIG1ldHJpY3M6IE1ldHJpY3NEZWZpbml0aW9uW1wibWV0cmljc1wiXSk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgU2VyaWVzW10+PiB7XG5cdGxldCByZXN1bHRzID0ge30gYXMgUmVjb3JkPHN0cmluZywgU2VyaWVzW10+XG5cblx0Zm9yIChjb25zdCBtIG9mIG1ldHJpY3MpIHtcblx0XHRsZXQgeyBzdGF0dXMsIGRhdGEgfSA9IGF3YWl0IHF1ZXJ5UmFuZ2UobS5xdWVyeSwgc3RhcnQsIGVuZClcblx0XHRpZiAoc3RhdHVzICE9PSBcInN1Y2Nlc3NcIikgY29udGludWVcblxuXHRcdHJlc3VsdHNbbS5pZF0gPSBkYXRhLnJlc3VsdFxuXHR9XG5cblx0cmV0dXJuIHJlc3VsdHNcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBNZXRyaWNzRGVmaW5pdGlvbiB9IGZyb20gXCIuL2RlZmluaXRpb25cIjtcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRNZXRyaWNzOiBNZXRyaWNzRGVmaW5pdGlvbiA9IHtcblx0bWV0cmljczogW1xuXHRcdHtcblx0XHRcdGlkOiBcInJlYWRfbGF0ZW5jeV9tc1wiLFxuXHRcdFx0cXVlcnk6IGAxMDAwICogaGlzdG9ncmFtX3F1YW50aWxlKDAuOTUsIHN1bSBieShyZWYsIGxlKSAocmF0ZShzZGtfb3BlcmF0aW9uX2xhdGVuY3lfc2Vjb25kc19idWNrZXR7b3BlcmF0aW9uX3R5cGU9XCJyZWFkXCJ9WzJzXSkpKWAsXG5cdFx0XHRkZXNjcmlwdGlvbjogXCI5NXRoIHBlcmNlbnRpbGUgcmVhZCBvcGVyYXRpb25zIGxhdGVuY3kgaW4gbWlsbGlzZWNvbmRzXCIsXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRpZDogXCJ3cml0ZV9sYXRlbmN5X21zXCIsXG5cdFx0XHRxdWVyeTogYDEwMDAgKiBoaXN0b2dyYW1fcXVhbnRpbGUoMC45NSwgc3VtIGJ5KHJlZiwgbGUpIChyYXRlKHNka19vcGVyYXRpb25fbGF0ZW5jeV9zZWNvbmRzX2J1Y2tldHtvcGVyYXRpb25fdHlwZT1cIndyaXRlXCJ9WzJzXSkpKWAsXG5cdFx0XHRkZXNjcmlwdGlvbjogXCI5NXRoIHBlcmNlbnRpbGUgd3JpdGUgb3BlcmF0aW9ucyBsYXRlbmN5IGluIG1pbGxpc2Vjb25kc1wiLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0aWQ6IFwicmVhZF90aHJvdWdocHV0XCIsXG5cdFx0XHRxdWVyeTogYHN1bSBieShyZWYpIChyYXRlKHNka19vcGVyYXRpb25zX3RvdGFse29wZXJhdGlvbl90eXBlPVwicmVhZFwifVsyc10pKWAsXG5cdFx0XHRkZXNjcmlwdGlvbjogXCJSZWFkIG9wZXJhdGlvbnMgdGhyb3VnaHB1dFwiLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0aWQ6IFwid3JpdGVfdGhyb3VnaHB1dFwiLFxuXHRcdFx0cXVlcnk6IGBzdW0gYnkocmVmKSAocmF0ZShzZGtfb3BlcmF0aW9uc190b3RhbHtvcGVyYXRpb25fdHlwZT1cIndyaXRlXCJ9WzJzXSkpYCxcblx0XHRcdGRlc2NyaXB0aW9uOiBcIldyaXRlIG9wZXJhdGlvbnMgdGhyb3VnaHB1dFwiLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0aWQ6IFwicmVhZF9hdmFpbGFiaWxpdHlcIixcblx0XHRcdHF1ZXJ5OiBgMTAwICogc3VtIGJ5IChyZWYpIChpbmNyZWFzZShzZGtfb3BlcmF0aW9uc19zdWNjZXNzX3RvdGFse29wZXJhdGlvbl90eXBlPVwicmVhZFwifVsyc10pKSAvIHN1bSBieSAocmVmKSAoaW5jcmVhc2Uoc2RrX29wZXJhdGlvbnNfdG90YWx7b3BlcmF0aW9uX3R5cGU9XCJyZWFkXCJ9WzJzXSkpYCxcblx0XHRcdGRlc2NyaXB0aW9uOiBcIlJlYWQgb3BlcmF0aW9ucyBhdmFpbGFiaWxpdHlcIixcblx0XHR9LFxuXHRcdHtcblx0XHRcdGlkOiBcIndyaXRlX2F2YWlsYWJpbGl0eVwiLFxuXHRcdFx0cXVlcnk6IGAxMDAgKiBzdW0gYnkgKHJlZikgKGluY3JlYXNlKHNka19vcGVyYXRpb25zX3N1Y2Nlc3NfdG90YWx7b3BlcmF0aW9uX3R5cGU9XCJ3cml0ZVwifVsyc10pKSAvIHN1bSBieSAocmVmKSAoaW5jcmVhc2Uoc2RrX29wZXJhdGlvbnNfdG90YWx7b3BlcmF0aW9uX3R5cGU9XCJ3cml0ZVwifVsyc10pKWAsXG5cdFx0XHRkZXNjcmlwdGlvbjogXCJXcml0ZSBvcGVyYXRpb25zIGF2YWlsYWJpbGl0eVwiLFxuXHRcdH0sXG5cdF1cbn1cbiIsCiAgICAiLy8gVGFibGVhdSAxMFxuZXhwb3J0IGNvbnN0IHBhbGV0dGUgPSBbXG5cdFwiIzJDQTAyQ1wiLFxuXHRcIiMxRjc3QjRcIixcblx0XCIjRDYyNzI4XCIsXG5cdFwiI0ZGN0YwRVwiLFxuXHRcIiM5NDY3QkRcIixcblx0XCIjOEM1NjRCXCIsXG5cdFwiI0UzNzdDMlwiLFxuXHRcIiM3RjdGN0ZcIixcblx0XCIjQkNCRDIyXCIsXG5cdFwiIzE3QkVDRlwiXG5dXG4iLAogICAgImltcG9ydCB7IHBhbGV0dGUgYXMgZGVmYXVsdFBhbGV0dGUgfSBmcm9tIFwiLi9jb2xvcnNcIjtcblxuZXhwb3J0IHR5cGUgU2VyaWVzID0ge1xuXHRcIm1ldHJpY1wiOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuXHRcInZhbHVlc1wiOiBbbnVtYmVyLCBzdHJpbmddW10gLy8gW3RpbWVzdGFtcCAoc2VjKSwgdmFsdWUgKGZsb2F0KV1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlckNoYXJ0KHRpdGxlOiBzdHJpbmcsIHNlcmllczogU2VyaWVzW10sIHBhbGV0dGUgPSBkZWZhdWx0UGFsZXR0ZSk6IHN0cmluZyB7XG5cdC8vIDEuIEZpbHRlciB6ZXJvc1xuXHRsZXQgbWluTGVuZ3RoID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuXHRmb3IgKGNvbnN0IHMgb2Ygc2VyaWVzKSB7XG5cdFx0cy52YWx1ZXMgPSBzLnZhbHVlcy5maWx0ZXIodiA9PiB2WzFdICE9ICcwJyk7XG5cdFx0aWYgKHMudmFsdWVzLmxlbmd0aCA8IG1pbkxlbmd0aCkgbWluTGVuZ3RoID0gcy52YWx1ZXMubGVuZ3RoO1xuXHR9XG5cblx0Ly8gMi4gTGltaXQgdmFsdWVzIChjb3VudClcblx0Zm9yIChjb25zdCBzIG9mIHNlcmllcykge1xuXHRcdC8vIFNraXAgZmlyc3QgdmFsdWVzIHRoZW4gYWRqdXN0aW5nXG5cdFx0cy52YWx1ZXMgPSBzLnZhbHVlcy5zbGljZSgtMSAqIG1pbkxlbmd0aCk7XG5cdH1cblxuXHRsZXQgbWluID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuXHRsZXQgbWF4ID0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO1xuXG5cdGxldCBsaW5lcyA9IFtdO1xuXHRmb3IgKGNvbnN0IHMgb2Ygc2VyaWVzKSB7XG5cdFx0bGV0IGxpbmUgPSBbXVxuXG5cdFx0Zm9yIChsZXQgWywgdmFsdWVdIG9mIHMudmFsdWVzKSB7XG5cdFx0XHRsZXQgdiA9IE1hdGgucm91bmQocGFyc2VGbG9hdCh2YWx1ZSkgKiAxMDAwKSAvIDEwMDA7XG5cdFx0XHRpZiAoaXNOYU4odikpIHtcblx0XHRcdFx0diA9IDA7XG5cdFx0XHR9XG5cblx0XHRcdGxpbmUucHVzaCh2KTtcblxuXHRcdFx0aWYgKHYgPCBtaW4pIG1pbiA9IHY7XG5cdFx0XHRpZiAodiA+IG1heCkgbWF4ID0gdjtcblx0XHR9XG5cblx0XHRsaW5lcy5wdXNoKGBsaW5lIFske2xpbmUuam9pbigpfV1gKTtcblx0fVxuXG5cdHJldHVybiBgXFxgXFxgXFxgbWVybWFpZFxuLS0tXG5jb25maWc6XG4gICAgeHlDaGFydDpcbiAgICAgICAgd2lkdGg6IDEyMDBcbiAgICAgICAgaGVpZ2h0OiA0MDBcbiAgICB0aGVtZVZhcmlhYmxlczpcbiAgICAgICAgeHlDaGFydDpcbiAgICAgICAgICAgIHRpdGxlQ29sb3I6IFwiIzIyMlwiXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwiI2ZmZlwiXG4gICAgICAgICAgICB4QXhpc0xpbmVDb2xvcjogXCIjMjIyXCJcbiAgICAgICAgICAgIHlBeGlzTGluZUNvbG9yOiBcIiMyMjJcIlxuICAgICAgICAgICAgcGxvdENvbG9yUGFsZXR0ZTogXCIke3BhbGV0dGUuam9pbigpfVwiXG4tLS1cbnh5Y2hhcnQtYmV0YVxuICAgIHRpdGxlIFwiJHt0aXRsZX1cIlxuICAgIHgtYXhpcyAwIC0tPiAxMFxuICAgIHktYXhpcyAke01hdGguZmxvb3IobWluICogMC45KX0gLS0+ICR7TWF0aC5mbG9vcihtYXggKiAxLjEpfVxuICAgICR7bGluZXMuam9pbihcIlxcbiAgICBcIil9XG5cXGBcXGBcXGBcbmBcbn1cbiIsCiAgICAiaW1wb3J0IHsgcmVuZGVyQ2hhcnQsIHR5cGUgU2VyaWVzIH0gZnJvbSBcIi4vY2hhcnRcIjtcblxuZXhwb3J0IGNvbnN0IHJlbmRlclJlcG9ydCA9IChzZGs6IHN0cmluZywgbWV0cmljczogUmVjb3JkPHN0cmluZywgU2VyaWVzW10+KSA9PiBgIyBTTE8gVGVzdGluZyA8aW1nIGFsaWduPVwicmlnaHRcIiBoZWlnaHQ9XCIzNlwiIHNyYz1cImh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vYmFkZ2Uv4o6HLWhlYWQtJTIzRkY3RjBFP3N0eWxlPWZvci10aGUtYmFkZ2VcIj48aW1nIGFsaWduPVwicmlnaHRcIiBoZWlnaHQ9XCIzNlwiICBzcmM9XCJodHRwczovL2ltZy5zaGllbGRzLmlvL2JhZGdlL+KOhy1iYXNlLSUyMzFGNzdCND9zdHlsZT1mb3ItdGhlLWJhZGdlXCI+PGltZyBhbGlnbj1cInJpZ2h0XCIgaGVpZ2h0PVwiMzZcIiBzcmM9XCJodHRwczovL2ltZy5zaGllbGRzLmlvL2JhZGdlL3Nkay0ke3Nkay5yZXBsYWNlKC8tL2csIFwiLS1cIil9LSUyM0UzNzdDMj9zdHlsZT1mb3ItdGhlLWJhZGdlXCI+XG48ZGV0YWlscz48c3VtbWFyeT5PcGVyYXRpb24gU3VjY2VzcyBSYXRlPC9zdW1tYXJ5PlxuJHtyZW5kZXJDaGFydChcIm9wZXJhdGlvbl90eXBlPXJlYWRcIiwgbWV0cmljc1tcInJlYWRfYXZhaWxhYmlsaXR5XCJdKX1cbiR7cmVuZGVyQ2hhcnQoXCJvcGVyYXRpb25fdHlwZT13cml0ZVwiLCBtZXRyaWNzW1wid3JpdGVfYXZhaWxhYmlsaXR5XCJdKX1cbjwvZGV0YWlscz5cblxuPGRldGFpbHM+PHN1bW1hcnk+T3BlcmF0aW9ucyBQZXIgU2Vjb25kPC9zdW1tYXJ5PlxuJHtyZW5kZXJDaGFydChcIm9wZXJhdGlvbl90eXBlPXJlYWRcIiwgbWV0cmljc1tcInJlYWRfdGhyb3VnaHB1dFwiXSl9XG4ke3JlbmRlckNoYXJ0KFwib3BlcmF0aW9uX3R5cGU9d3JpdGVcIiwgbWV0cmljc1tcIndyaXRlX3Rocm91Z2hwdXRcIl0pfVxuPC9kZXRhaWxzPlxuXG48ZGV0YWlscz48c3VtbWFyeT45NXRoIFBlcmNlbnRpbGUgTGF0ZW5jeTwvc3VtbWFyeT5cbiR7cmVuZGVyQ2hhcnQoXCJvcGVyYXRpb25fdHlwZT1yZWFkXCIsIG1ldHJpY3NbXCJyZWFkX2xhdGVuY3lfbXNcIl0pfVxuJHtyZW5kZXJDaGFydChcIm9wZXJhdGlvbl90eXBlPXdyaXRlXCIsIG1ldHJpY3NbXCJ3cml0ZV9sYXRlbmN5X21zXCJdKX1cbjwvZGV0YWlscz5cbmBcbiIKICBdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsTUFBSSxrQkFBbUIsV0FBUSxRQUFLLG9CQUFxQixPQUFPLGlCQUFrQixDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUk7QUFDNUYsUUFBSSxPQUFPO0FBQVcsV0FBSztBQUMzQixXQUFPLGVBQWUsR0FBRyxJQUFJLEVBQUUsWUFBWSxNQUFNLGFBQWEsR0FBRztBQUFFLGFBQU8sRUFBRTtBQUFBLE1BQU0sQ0FBQztBQUFBLGNBQ3pFLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSTtBQUN4QixRQUFJLE9BQU87QUFBVyxXQUFLO0FBQzNCLE1BQUUsTUFBTSxFQUFFO0FBQUE7QUFFZCxNQUFJLHFCQUFzQixXQUFRLFFBQUssdUJBQXdCLE9BQU8saUJBQWtCLENBQUMsR0FBRyxHQUFHO0FBQzNGLFdBQU8sZUFBZSxHQUFHLFdBQVcsRUFBRSxZQUFZLE1BQU0sT0FBTyxFQUFFLENBQUM7QUFBQSxjQUN6RCxDQUFDLEdBQUcsR0FBRztBQUNoQixNQUFFLGFBQWE7QUFBQTtBQUVuQixNQUFJLGVBQWdCLFdBQVEsUUFBSyx3QkFBMEIsQ0FBQyxLQUFLO0FBQzdELFFBQUksT0FBTyxJQUFJO0FBQVksYUFBTztBQUNsQyxRQUFJLFNBQVMsQ0FBQztBQUNkLFFBQUksT0FBTztBQUFNLGVBQVMsS0FBSztBQUFLLFlBQUksTUFBTSxhQUFhLE9BQU8sZUFBZSxLQUFLLEtBQUssQ0FBQztBQUFHLDBCQUFnQixRQUFRLEtBQUssQ0FBQztBQUFBO0FBQzdILHVCQUFtQixRQUFRLEdBQUc7QUFDOUIsV0FBTztBQUFBO0FBRVgsTUFBSSxZ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O0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNGO0FBRUEsV0FBUyxJQUFJLEVBQUcsSUFBSSxxQkFBcUIsVUFBVSxHQUFHO0FBQ3BELFVBQU0sTUFBTSxxQkFBcUI7QUFDakMsVUFBTSxnQkFBZ0IsSUFBSSxZQUFZO0FBQ3RDLCtCQUEyQixPQUFPLDJCQUEyQixpQkFDM0Q7QUFBQSxFQUNKO0FBR0EsU0FBTyxlQUFl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QUFPO0FBQUE7QUFBQSxJQUFRLE9BQU87QUFBQTtBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxFQUN0RDtBQUVBLFdBQVMsZUFBZ0IsQ0FBQyxPQUFPO0FBQy9CLFdBQU8sY0FBYztBQUFBO0FBR3ZCLE1BQU0sWUFBWTtBQUNsQixNQUFNLGNBQWM7QUFDcEIsTUFBTSxnQkFBZ0I7QUFDdEIsTUFBTSxhQUFhO0FBRW5CLFdBQVMsV0FBWSxDQUFDLEtBQUs7QUFDekIsVUFBTSxNQUFNLENBQUM7QUFDYixRQUFJLFFBQVE7QUFDWixRQUFJLFVBQVU7QUFDZCxRQUFJLFVBQVU7QUFDZCxRQUFJLFdBQVc7QUFDZixRQUFJLElBQUk7QUFDUixRQUFJLE1BQU07QUFDVixVQUFNLE1BQU0sSUFBSTtBQUVoQixhQUFTLElBQUksRUFBRyxJQUFJLE9BQU8sR0FBRztBQUM1QixZQUFNLE9BQU8sSUFBSTtBQUNqQixVQUFJLFNBQVMsUUFBUSxTQUFTO0FBQzVCLFlBQUksVUFBVTtBQUFFLHFCQUFXO0FBQUEsUUFBTSxPQUFPO0FBQ3RDLHFCQUFXO0FBQ1g7QUFBQTtBQUFBLE1BRUosV0FBVyxTQUFTLEtBQUs7QUFDdkIsYUFBSyxVQUFVO0FBQ2IsY0FBSSxTQUFTO0FBQ1gsc0JBQVU7QUFDVixvQkFBUTtBQUFBLFVBQ1YsT0FBTztBQUFFLHNCQUFVO0FBQUE7QUFDbkI7QUFBQSxRQUNGLE9BQU87QUFBRSxxQkFBVztBQUFBO0FBQUEsTUFDdEIsT0FBTztBQUNMLFlBQUksWUFBWSxTQUFTO0FBQUUsaUJBQU87QUFBQSxRQUFLO0FBQ3ZDLG1CQUFXO0FBQ1gsYUFBSyxVQUFVLGlCQUFpQixVQUFVLGVBQWUsU0FBUyxLQUFLO0FBQ3JFLGNBQUksVUFBVSxlQUFlO0FBQzNCLG9CQUFRO0FBQ1Isc0JBQVUsSUFBSSxVQUFVLENBQUM7QUFBQSxVQUMzQixPQUFPO0FBQUUsb0JBQVE7QUFBQTtBQUNqQixnQkFBTTtBQUNOO0FBQUEsUUFDRixXQUFXLFVBQVUsY0FDbEIsU0FBUyxPQUFPLFNBQVMsUUFDMUIsSUFBSSxRQUFRO0FBQ1osa0JBQVEsU0FBUyxNQUNiLGdCQUNBO0FBQ0osY0FBSSxLQUFLLENBQUMsS0FBSyxTQUFTO0FBQ3hCLGdCQUFNO0FBQ047QUFBQSxRQUNGLFlBQVksV0FBVyxTQUFTLEtBQUs7QUFDbkMsa0JBQVE7QUFDUixjQUFJLFNBQVM7QUFDWCxnQkFBSSxJQUFJLFFBQVE7QUFDZCxvQkFBTSxXQUFXLElBQUksUUFBUSxZQUFZLGVBQWUsR0FDdEQsVUFDQSxPQUFPO0FBQUEsWUFDWDtBQUNBLHNCQUFVO0FBQUEsVUFDWixXQUFXLElBQUksUUFBUTtBQUNyQixrQkFBTSxXQUFXLEtBQUssVUFBVSxNQUFNO0FBQUEsVUFDeEM7QUFDQSxjQUFJLElBQUksT0FBTyxXQUFXO0FBQUUsZ0JBQUksS0FBSztBQUFBLFVBQUksT0FBTztBQUFFLGdCQUFJLEdBQUcsS0FBSztBQUFBO0FBQzlELGdCQUFNO0FBQ04sWUFBRTtBQUNGO0FBQUEsUUFDRixZQUFZLFlBQVksU0FBUyxPQUFPLFNBQVMsT0FBTztBQUFFO0FBQUEsUUFBUztBQUFBO0FBRXJFLGFBQU87QUFBQSxJQUNUO0FBQ0EsUUFBSSxXQUFXLElBQUksUUFBUTtBQUN6QixZQUFNLFdBQVcsSUFBSSxRQUFRLFlBQVksZUFBZSxHQUN0RCxVQUNBLE9BQU87QUFBQSxJQUNYLFdBQVcsS0FBSztBQUNkLFlBQU0sV0FBVyxLQUFLLFVBQVUsTUFBTTtBQUFBLElBQ3hDO0FBRUEsUUFBSSxJQUFJLE9BQU8sV0FBVztBQUN4QixVQUFJLEtBQUs7QUFBRSxZQUFJLEtBQUs7QUFBQSxNQUFJO0FBQUEsSUFDMUIsT0FBTztBQUFFLFVBQUksR0FBRyxLQUFLO0FBQUE7QUFFckIsV0FBTztBQUFBO0FBR1QsU0FBTyxVQUFVO0FBQUE7Ozs7QUNqTWpCLFNBQU8sbUJBQW1CLFFBQVMsQ0FBQyxNQUFNO0FBQ3hDLGVBQVcsU0FBUyxVQUFVO0FBQUUsYUFBTztBQUFBLElBQUc7QUFDMUMsYUFBUyxJQUFJLEtBQUssU0FBUyxFQUFHLEtBQUssS0FBSyxHQUFHO0FBQ3pDLGNBQVEsS0FBSyxXQUFXLENBQUM7QUFBQSxhQUNsQjtBQUFBLGFBQ0E7QUFDSCxpQkFBTyxLQUFLLE1BQU0sSUFBSSxDQUFDO0FBQ3ZCLGlCQUFRLFNBQVMsUUFBUSxTQUFTLE1BQU0sS0FBSztBQUFBO0FBQUEsSUFFbkQ7QUFDQSxXQUFRLFNBQVMsUUFBUSxTQUFTLE1BQU0sS0FBSztBQUFBO0FBQUE7Ozs7QUNIL0MsUUFBUTtBQUNSLFFBQVE7QUFFUixNQUFNO0FBRU4sTUFBTTtBQUNOLE1BQU07QUFDTixNQUFNO0FBQ04sTUFBTTtBQUVOLE1BQU0sY0FBYztBQUNwQixNQUFNLFdBQVc7QUFDakIsTUFBTSxhQUFhO0FBQ25CLE1BQU0sY0FBYztBQUNwQixNQUFNLFVBQVU7QUFFaEIsWUFBVSxTQUFTO0FBQ25CLFdBQVMsU0FBVSxDQUFDLEtBQUssS0FBSztBQUM1QixRQUFJO0FBQ0osUUFBSTtBQUNKLFVBQU0sUUFBTztBQUNiLFFBQUk7QUFDSixVQUFNLFNBQVMsSUFBSTtBQUNuQixVQUFNLGNBQWMsSUFBSSxnQkFBZ0IsQ0FBQyxXQUFXLGFBQWEsYUFBYyxnQkFBZ0IsOEJBQThCLGFBQWE7QUFDMUksVUFBTSxnQkFBZ0IsSUFBSSxpQkFBaUIsQ0FBQztBQUM1QyxVQUFNLGFBQWEsSUFBSSxjQUFjO0FBQ3JDLFVBQU0sZUFBZSxJQUFJO0FBQ3pCLFVBQU0sV0FBVyxFQUFFLGVBQWUsSUFBSSxRQUFRO0FBRTlDLFNBQUssSUFBSSxHQUFHLE1BQU0sY0FBYyxPQUFRLElBQUksT0FBTyxHQUFHO0FBQ3BELFVBQUksTUFBTSxRQUFRLGNBQWMsRUFBRSxLQUNoQyxZQUFZLEtBQUssY0FBYyxHQUFHLEVBQUUsR0FBRztBQUN2QyxtQkFBVyxjQUFjLEdBQUc7QUFDNUI7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUVBLGFBQVMsYUFBYyxHQUFHO0FBQ3hCLFVBQUksVUFBVSxLQUFLLGFBQWEsSUFBSSxPQUFPO0FBQ3pDLG1CQUFXO0FBQ1gsY0FBSyxJQUFJO0FBQUEsTUFDWDtBQUFBO0FBR0YsZUFBVyxhQUFhLFVBQVU7QUFBRSxZQUFNLElBQUksTUFBTSwrQkFBK0I7QUFBQSxJQUFFO0FBRXJGLFVBQU0saUJBQWlCLFNBQVMsUUFBUSxhQUFhLElBQUksT0FBTyxJQUFJO0FBQ3BFLFVBQU0sZ0JBQWdCLFNBQVMsUUFBUSxZQUFZLFFBQVE7QUFDM0QsVUFBTSxhQUFhLFNBQVMsUUFBUSxTQUFTLFFBQVE7QUFDckQsVUFBTSxjQUFjLFNBQVMsUUFBUSxVQUFVLFFBQVE7QUFDdkQsVUFBTSxhQUFhLFNBQVMsUUFBUSxTQUFTLFFBQVE7QUFDckQsVUFBTSxtQkFBbUIsU0FBUyxRQUFRLGVBQWUsSUFBSTtBQUM3RCxVQUFNLGtCQUFrQixTQUFTLFFBQVEsY0FBYyxLQUFLLElBQUk7QUFFaEUsUUFBSSxTQUFTO0FBQ2IsUUFBSSxVQUFVO0FBQ2QsUUFBSSxRQUFRO0FBQ1osUUFBSTtBQUNKLFFBQUk7QUFDSixRQUFJLFdBQVc7QUFFZixTQUFLLGFBQWE7QUFDbEIsU0FBSyxTQUFTO0FBQ2QsU0FBSyxNQUFNO0FBQ1gsU0FBSyxVQUFVO0FBQ2YsU0FBSyxPQUFPO0FBRVosVUFBTSxZQUFZO0FBQUEsTUFDaEI7QUFBQSxNQUNBLGdCQUFnQjtBQUFBLE1BQ2hCLGVBQWU7QUFBQSxNQUNmLFNBQVMsU0FBUztBQUFBLE1BQ2xCLGVBQWUsSUFBSTtBQUFBLElBQ3JCO0FBRUEsU0FBSyxTQUFTLElBQUksTUFBTSxTQUFTO0FBQ2pDLFNBQUssT0FBTyxHQUFHLGlCQUFrQixHQUFHO0FBQ2xDLFlBQUssYUFBYTtBQUNsQixVQUFJLE1BQUssUUFBUSxNQUFLLFFBQVE7QUFDNUIsY0FBTSxLQUFLLE1BQUs7QUFDaEIsY0FBSyxNQUFNO0FBQ1gsV0FBRztBQUFBLE1BQ0w7QUFBQSxLQUNELEVBQUUsR0FBRyxpQkFBaUIsTUFBTyxDQUFDLE1BQU07QUFDbkMsWUFBTSxNQUFLLFVBQVUsWUFBWTtBQUMvQixjQUFLLE9BQU8sZUFBZSxRQUFRLE1BQU07QUFDekMsY0FBSyxPQUFPLEdBQUcsUUFBUSxRQUFRO0FBQy9CLFlBQUksZ0JBQWdCO0FBQ3BCLFlBQUksS0FBSyxZQUFZO0FBQ3JCLGVBQU8sU0FBUyxJQUFJO0FBQUEsTUFDdEI7QUFLQSxVQUFJLFVBQVU7QUFDWixjQUFNLFFBQVE7QUFDZCxjQUFNLEtBQUssS0FBSztBQUNoQixjQUFNLG1CQUFtQixLQUFLO0FBQUEsTUFDaEM7QUFFQSxXQUFLLEdBQUcsa0JBQW1CLENBQUMsUUFBUTtBQUNsQyxZQUFJO0FBQ0osWUFBSTtBQUNKLFlBQUk7QUFDSixZQUFJO0FBQ0osWUFBSTtBQUNKLFlBQUk7QUFDSixZQUFJLFFBQVE7QUFFWixZQUFJLE9BQU8saUJBQWlCO0FBQzFCLG1CQUFTLFlBQVksT0FBTyxnQkFBZ0IsRUFBRTtBQUM5QyxjQUFJLE9BQU8sSUFBSTtBQUNiLHNCQUFVLE9BQU8sR0FBRyxZQUFZO0FBQ2hDLGlCQUFLLElBQUksR0FBRyxNQUFNLE9BQU8sT0FBUSxJQUFJLE9BQU8sR0FBRztBQUM3QyxrQkFBSSxXQUFXLEtBQUssT0FBTyxHQUFHLEVBQUUsR0FBRztBQUNqQywwQkFBVSxPQUFPLEdBQUcsR0FBRyxZQUFZO0FBQ25DO0FBQUEsY0FDRjtBQUFBLFlBQ0Y7QUFBQSxVQUNGO0FBQUEsUUFDRjtBQUVBLFlBQUksWUFBWSxXQUFXO0FBQUUsb0JBQVU7QUFBQSxRQUFhO0FBQ3BELFlBQUksWUFBWSxXQUFXO0FBQUUsb0JBQVU7QUFBQSxRQUFXO0FBRWxELFlBQUksT0FBTyx3QkFBd0I7QUFDakMsbUJBQVMsWUFBWSxPQUFPLHVCQUF1QixFQUFFO0FBQ3JELGVBQUssU0FBUyxLQUFLLE9BQU8sRUFBRSxHQUFHO0FBQUUsbUJBQU8sU0FBUyxJQUFJO0FBQUEsVUFBRTtBQUN2RCxlQUFLLElBQUksR0FBRyxNQUFNLE9BQU8sT0FBUSxJQUFJLE9BQU8sR0FBRztBQUM3QyxnQkFBSSxRQUFRLEtBQUssT0FBTyxHQUFHLEVBQUUsR0FBRztBQUM5QiwwQkFBWSxPQUFPLEdBQUc7QUFBQSxZQUN4QixXQUFXLFlBQVksS0FBSyxPQUFPLEdBQUcsRUFBRSxHQUFHO0FBQ3pDLHlCQUFXLE9BQU8sR0FBRztBQUNyQixtQkFBSyxjQUFjO0FBQUUsMkJBQVcsU0FBUyxRQUFRO0FBQUEsY0FBRTtBQUFBLFlBQ3JEO0FBQUEsVUFDRjtBQUFBLFFBQ0YsT0FBTztBQUFFLGlCQUFPLFNBQVMsSUFBSTtBQUFBO0FBRTdCLFlBQUksT0FBTyw4QkFBOEI7QUFBRSxxQkFBVyxPQUFPLDZCQUE2QixHQUFHLFlBQVk7QUFBQSxRQUFFLE9BQU87QUFBRSxxQkFBVztBQUFBO0FBRS9ILFlBQUksUUFDRjtBQUVGLFlBQUksWUFBWSxXQUFXLFNBQVMsUUFBUSxHQUFHO0FBRTdDLGNBQUksV0FBVyxZQUFZO0FBQ3pCLGlCQUFLLElBQUksZUFBZTtBQUN0QixrQkFBSSxnQkFBZ0I7QUFDcEIsa0JBQUksS0FBSyxZQUFZO0FBQUEsWUFDdkI7QUFDQSxtQkFBTyxTQUFTLElBQUk7QUFBQSxVQUN0QjtBQUVBLFlBQUU7QUFFRixjQUFJLElBQUksY0FBYyxNQUFNLE1BQU0sR0FBRztBQUNuQyxrQkFBSyxPQUFPLFFBQVE7QUFDcEI7QUFBQSxVQUNGO0FBRUEsWUFBRTtBQUNGLGdCQUFNLE9BQU8sSUFBSSxXQUFXLFFBQVE7QUFDcEMsb0JBQVU7QUFDVixlQUFLLEdBQUcsZUFBZ0IsR0FBRztBQUN6QixjQUFFO0FBQ0Ysa0JBQUssU0FBUztBQUNkLDBCQUFjO0FBQ2QsZ0JBQUksTUFBSyxRQUFRLE1BQUssWUFBWTtBQUNoQyxvQkFBTSxLQUFLLE1BQUs7QUFDaEIsb0JBQUssTUFBTTtBQUNYLGlCQUFHO0FBQUEsWUFDTDtBQUFBLFdBQ0Q7QUFDRCxlQUFLLGdCQUFpQixDQUFDLEdBQUc7QUFDeEIsaUJBQUssTUFBSyxRQUFRO0FBQUU7QUFBQSxZQUFPO0FBQzNCLGtCQUFLLFNBQVM7QUFDZCxnQkFBSSxNQUFLLFFBQVEsTUFBSyxZQUFZO0FBQ2hDLG9CQUFNLEtBQUssTUFBSztBQUNoQixvQkFBSyxNQUFNO0FBQ1gsaUJBQUc7QUFBQSxZQUNMO0FBQUE7QUFFRixjQUFJLEtBQUssUUFBUSxXQUFXLE1BQU0sVUFBVSxVQUFVLE9BQU87QUFFN0QsMkJBQWtCLENBQUMsTUFBTTtBQUN2QixpQkFBSyxTQUFTLEtBQUssVUFBVSxlQUFlO0FBQzFDLG9CQUFNLFdBQVcsZ0JBQWdCLFFBQVEsS0FBSztBQUM5QyxrQkFBSSxXQUFXLEdBQUc7QUFBRSxxQkFBSyxLQUFLLEtBQUssTUFBTSxHQUFHLFFBQVEsQ0FBQztBQUFBLGNBQUU7QUFDdkQsbUJBQUssWUFBWTtBQUNqQixtQkFBSyxZQUFZO0FBQ2pCLG1CQUFLLG1CQUFtQixNQUFNO0FBQzlCLG1CQUFLLEtBQUssT0FBTztBQUNqQjtBQUFBLFlBQ0YsWUFBWSxLQUFLLEtBQUssSUFBSSxHQUFHO0FBQUUsb0JBQUssU0FBUztBQUFBLFlBQUs7QUFFbEQsaUJBQUssWUFBWTtBQUFBO0FBR25CLDBCQUFpQixHQUFHO0FBQ2xCLHNCQUFVO0FBQ1YsaUJBQUssS0FBSyxJQUFJO0FBQUE7QUFBQSxRQUVsQixPQUFPO0FBRUwsY0FBSSxZQUFZLGFBQWE7QUFDM0IsaUJBQUssSUFBSSxnQkFBZ0I7QUFDdkIsa0JBQUksaUJBQWlCO0FBQ3JCLGtCQUFJLEtBQUssYUFBYTtBQUFBLFlBQ3hCO0FBQ0EsbUJBQU8sU0FBUyxJQUFJO0FBQUEsVUFDdEI7QUFFQSxZQUFFO0FBQ0YsWUFBRTtBQUNGLGNBQUksU0FBUztBQUNiLGNBQUksWUFBWTtBQUNoQixxQkFBVztBQUVYLDJCQUFrQixDQUFDLE1BQU07QUFDdkIsaUJBQUssU0FBUyxLQUFLLFVBQVUsZ0JBQWdCO0FBQzNDLG9CQUFNLFdBQVksa0JBQWtCLFFBQVEsS0FBSztBQUNqRCx3QkFBVSxLQUFLLFNBQVMsVUFBVSxHQUFHLFFBQVE7QUFDN0MsMEJBQVk7QUFDWixtQkFBSyxtQkFBbUIsTUFBTTtBQUFBLFlBQ2hDLE9BQU87QUFBRSx3QkFBVSxLQUFLLFNBQVMsUUFBUTtBQUFBO0FBQUE7QUFHM0MsMEJBQWlCLEdBQUc7QUFDbEIsdUJBQVc7QUFDWCxnQkFBSSxPQUFPLFFBQVE7QUFBRSx1QkFBUyxXQUFXLFFBQVEsVUFBVSxPQUFPO0FBQUEsWUFBRTtBQUNwRSxnQkFBSSxLQUFLLFNBQVMsV0FBVyxRQUFRLE9BQU8sV0FBVyxVQUFVLE9BQU87QUFDeEUsY0FBRTtBQUNGLDBCQUFjO0FBQUE7QUFBQTtBQVNsQixhQUFLLGVBQWUsT0FBTztBQUUzQixhQUFLLEdBQUcsUUFBUSxNQUFNO0FBQ3RCLGFBQUssR0FBRyxPQUFPLEtBQUs7QUFBQSxPQUNyQixFQUFFLEdBQUcsaUJBQWtCLENBQUMsS0FBSztBQUM1QixZQUFJLFNBQVM7QUFBRSxrQkFBUSxLQUFLLFNBQVMsR0FBRztBQUFBLFFBQUU7QUFBQSxPQUMzQztBQUFBLEtBQ0YsRUFBRSxHQUFHLGlCQUFrQixDQUFDLEtBQUs7QUFDNUIsVUFBSSxLQUFLLFNBQVMsR0FBRztBQUFBLEtBQ3RCLEVBQUUsR0FBRyxrQkFBbUIsR0FBRztBQUMxQixpQkFBVztBQUNYLG9CQUFjO0FBQUEsS0FDZjtBQUFBO0FBR0gsWUFBVSxVQUFVLGdCQUFpQixDQUFDLE9BQU8sSUFBSTtBQUMvQyxVQUFNLElBQUksS0FBSyxPQUFPLE1BQU0sS0FBSztBQUNqQyxRQUFJLE1BQU0sS0FBSyxRQUFRO0FBQ3JCLFNBQUc7QUFBQSxJQUNMLE9BQU87QUFDTCxXQUFLLGNBQWM7QUFDbkIsV0FBSyxNQUFNO0FBQUE7QUFBQTtBQUlmLFlBQVUsVUFBVSxjQUFlLEdBQUc7QUFDcEMsVUFBTSxRQUFPO0FBRWIsUUFBSSxNQUFLLE9BQU8sVUFBVTtBQUN4QixZQUFLLE9BQU8sSUFBSTtBQUFBLElBQ2xCLFlBQVksTUFBSyxLQUFLLE9BQU87QUFDM0IsY0FBUSxpQkFBa0IsR0FBRztBQUMzQixjQUFLLEtBQUssUUFBUTtBQUNsQixjQUFLLEtBQUssS0FBSyxRQUFRO0FBQUEsT0FDeEI7QUFBQSxJQUNIO0FBQUE7QUFHRixXQUFTLFFBQVMsQ0FBQyxNQUFNO0FBQ3ZCLFNBQUssT0FBTztBQUFBO0FBR2QsV0FBUyxVQUFXLENBQUMsTUFBTTtBQUN6QixhQUFTLEtBQUssTUFBTSxJQUFJO0FBRXhCLFNBQUssWUFBWTtBQUVqQixTQUFLLFlBQVk7QUFBQTtBQUduQixXQUFTLFlBQVksUUFBUTtBQUU3QixhQUFXLFVBQVUsZ0JBQWlCLENBQUMsR0FBRztBQUFBO0FBRTFDLFNBQU8sVUFBVTtBQUFBOzs7O0FDL1NqQixNQUFNLFVBQVU7QUFFaEIsTUFBTSxNQUFNO0FBQUEsSUFDVjtBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQzdDO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFDN0M7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUM3QztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQzdDO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFDN0M7QUFBQSxJQUFH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V0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEs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LEdBQUcsR0FBRyxDQUFDO0FBRWxDLE1BQUk7QUFHSCxVQUFNO0FBRU4sUUFBSSxrQkFBa0IsY0FBYyxVQUFVLGVBQWUsU0FBUyxHQUFHO0FBQ3hFLE1BQVEsaUJBQVM7QUFBQSxRQUNoQjtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0Q7QUFBQSxJQUNEO0FBQUEsV0FDUSxPQUFQO0FBQUE7QUFV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QSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDSjtBQUNBLE1BQU0sMkNBQTJDO0FBQUEsSUFDN0M7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0o7QUFDQSxNQUFNLHlDQUF5QztBQUMvQyxNQUFNLDRDQUE0QztBQUdsRCxNQUFNLGlCQUFpQjtBQUFBLElBQ25CO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtB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QUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFDMUY7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQU87QUFBQSxJQUFLO0FBQUEsSUFBTztBQUFBLElBQ3pGO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBTztBQUFBLElBQUs7QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUN0RjtBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQzNGO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQzNGO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUM1RjtBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUMzRjtBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQUs7QUFBQSxJQUN6RjtBQUFBLElBQUs7QUFBQSxJQUFPO0FBQUEsRUFDaEIsQ0FBQztBQUNELE1BQU0sWUFBWSxJQUFJLFlBQVk7QUFBQSxJQUM5QjtBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQzFGO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFDMUY7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUMxRjtBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBTTtBQUFBLElBQU07QUFBQSxJQUFNO0FBQUEsSUFBTTtBQUFBLElBQU07QUFBQSxJQUFNO0FBQUEsSUFBTTtBQUFBLElBQU07QUFBQSxJQUN4RjtBQUFBLElBQU07QUFBQSxJQUFNO0FBQUEsSUFBTTtBQUFBLElBQU07QUFBQSxJQUFNO0FBQUEsSUFBTTtBQUFBLElBQU07QUFBQSxJQUFNO0FBQUEsSUFBTTtBQUFBLElBQU07QUFBQSxJQUFNO0FBQUEsSUFBTTtBQUFBLElBQU07QUFBQSxJQUFNO0FBQUEsSUFBTTtBQUFBLElBQzFGO0FBQUEsSUFBTTtBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFDM0Y7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxFQUM5RixDQUFDO0FBQ0QsTUFBTSxZQUFZLElBQUksWUFBWTtBQUFBLElBQzlCO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFDMUY7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUMxRjtBQUFBLElBQUs7QUFBQSxJQUFRO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFRO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFDM0Y7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUMxRjtBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQzFGO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFB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QUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0osQ0FBQztBQVNELE1BQU0sY0FBYztBQUFBLElBQ2hCLGVBQWUsQ0FBQyxXQUFXLGFBQWE7QUFBQSxJQUN4QyxRQUFRO0FBQUEsTUFDSixjQUFjO0FBQUEsTUFDZCxZQUFZO0FBQUEsTUFDWixnQkFBZ0I7QUFBQSxNQUNoQixN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QUEsRUFDSjtBQUNBLE1BQU0sV0FBVztBQUFBLElBQ2IsZUFBZTtBQUFBLElBQ2YsUUFBUTtBQUFBLE1BQ0osY0FBYztBQUFBLE1BQ2QsWUFBWTtBQUFBLE1BQ1osZ0JBQWdCO0FBQUEsTUFDaEIsTUFBTTtBQUFBLFFBQ0YsTUFBTTtBQUFBLE1BQ1Y7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sT0FBTztBQUFBLElBQ1QsZUFBZTtBQUFBLElBQ2YsUUFBUTtBQUFBLE1BQ0osZ0JBQWdCO0FBQUEsTUFDaEIsVUFBVTtBQUFBLE1BQ1YsU0FBUztBQUFBLE1BQ1QsTUFBTTtBQUFBLFFBQ0YsTUFBTTtBQUFBLE1BQ1Y7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sUUFBUTtBQUFBLElBQ1YsZUFBZTtBQUFBLElBQ2YsUUFBUTtBQUFBLE1BQ0osY0FBYztBQUFBLE1BQ2QsWUFBWTtBQUFBLE1BQ1osZ0JBQWdCO0FBQUEsTUFDaEIsTUFBTTtBQUFBLFFBQ0YsTUFBTTtBQUFBLE1BQ1Y7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sZ0JBQWdCO0FBQUEsSUFDbEIsZUFBZTtBQUFBLElBQ2YsUUFBUTtBQUFBLE1BQ0osZ0JBQWdCO0FBQUEsTUFDaEIsVUFBVTtBQUFBLE1BQ1YsU0FBUztBQUFBLE1BQ1QsTUFBTTtBQUFBLFFBQ0YsTUFBTTtBQUFBLE1BQ1Y7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sdUJBQXVCO0FBQUEsSUFDekIsZUFBZTtBQUFBLElBQ2YsUUFBUTtBQUFBLE1BQ0osZ0JBQWdCO0FBQUEsTUFDaEIsVUFBVTtBQUFBLE1BQ1YsU0FBUztBQUFBLE1BQ1QsTUFBTTtBQUFBLFFBQ0YsTUFBTTtBQUFBLE1BQ1Y7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sUUFBUTtBQUFBLElBQ1YsZUFBZTtBQUFBLElBQ2YsUUFBUTtBQUFBLE1BQ0osY0FBYztBQUFBLE1BQ2QsWUFBWTtBQUFBLE1BQ1osZ0JBQWdCO0FBQUEsTUFDaEIsTUFBTTtBQUFBLFFBQ0YsTUFB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QkFBcUI7QUFjN0M7QUFBQSxRQUFNLFNBQVM7QUFBQSxJQVVYO0FBQUEsSUFNQTtBQUFBLElBTUE7QUFBQSxJQU1BO0FBQUEsSUFLQTtBQUFBLElBS0EsUUFBUTtBQUFBLElBRVI7QUFBQSxJQUVBO0FBQUEsUUFDSSxHQUFHLEdBQUc7QUFDTixhQUFPLEtBQUs7QUFBQTtBQUFBLElBRWhCO0FBQUEsUUFDSSxJQUFJLEdBQUc7QUFDUCxhQUFPLEtBQUs7QUFBQTtBQUFBLElBRWhCO0FBQUEsUUFDSSxLQUFLLEdBQUc7QUFDUixhQUFPLEtBQUs7QUFBQTtBQUFBLElBRWhCO0FBQUEsUUFDSSxHQUFHLEdBQUc7QUFDTixhQUFPLEtBQUs7QUFBQTtBQUFBLElBRWhCO0FBQUEsUUFDSSxHQUFHLEdBQUc7QUFDTixhQUFPLEtBQUs7QUFBQTtBQUFBLElBRWhCO0FBQUEsUUFDSSxJQUFJLEdBQUc7QUFDUCxhQUFPLEtBQUs7QUFBQTtBQUFBLElBRWhCO0FBQUEsUUFDSSxPQUFPLEdBQUc7QUFDVixhQUFPLEtBQUs7QUFBQTtBQUFBLElBRWhCO0FBQUEsUUFDSSxHQUFHLEdBQUc7QUFDTixhQUFPLEtBQUs7QUFBQTtBQUFBLElBRWhCO0FBQUEsUUFDSSxJQUFJLEdBQUc7QUFDUCxhQUFPLEtBQUs7QUFBQTtBQUFBLElBRWhCO0FBQUEsUUFDSSxNQUFNLEdBQUc7QUFDVCxhQUFPLEtBQUs7QUFBQTtBQUFBLElBRWhCO0FBQUEsUUFDSSxPQUFPLEdBQUc7QUFDVixhQUFPLEtBQUs7QUFBQTtBQUFBLElBRWhCO0FBQUEsUUFDSSxPQUFPLEdBQUc7QUFDVixhQUFPLEtBQUs7QUFBQTtBQUFBLElBRWhCO0FBQUEsUUFDSSxPQUFPLEdBQUc7QUFDVixhQUFPLEtBQUs7QUFBQTtBQUFBLElBRWhCO0FBQUEsUUFDSSxXQUFXLEdBQUc7QUFDZCxhQUFPLEtBQUs7QUFBQTtBQUFBLElBRWhCO0FBQUEsUUFDSSxLQUFLLEdBQUc7QUFDUixhQUFPLEtBQUs7QUFBQTtBQUFBLElBRWhCO0FBQUEsUUFDSSxLQUFLLEdBQUc7QUFD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QUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJ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Q0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElB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 +//# debugId=103F85E45207FFDC64756E2164756E21 +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2lvL2xpYi9pby11dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9pby9saWIvaW8uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2V4ZWMvbGliL3Rvb2xydW5uZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2V4ZWMvbGliL2V4ZWMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2NvcmUvbGliL3V0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9jb3JlL2xpYi9jb21tYW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9jb3JlL2xpYi9maWxlLWNvbW1hbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2h0dHAtY2xpZW50L2xpYi9wcm94eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdHVubmVsL2xpYi90dW5uZWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29yZS9zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvZXJyb3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvY29uc3RhbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi90aW1lcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9kZXBzL3N0cmVhbXNlYXJjaC9zYm1oLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZmFzdGlmeS9idXNib3kvZGVwcy9kaWNlci9saWIvUGFydFN0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGZhc3RpZnkvYnVzYm95L2xpYi91dGlscy9nZXRMaW1pdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGZhc3RpZnkvYnVzYm95L2RlcHMvZGljZXIvbGliL0hlYWRlclBhcnNlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGZhc3RpZnkvYnVzYm95L2RlcHMvZGljZXIvbGliL0RpY2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZmFzdGlmeS9idXNib3kvbGliL3V0aWxzL2RlY29kZVRleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9saWIvdXRpbHMvcGFyc2VQYXJhbXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9saWIvdXRpbHMvYmFzZW5hbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9saWIvdHlwZXMvbXVsdGlwYXJ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZmFzdGlmeS9idXNib3kvbGliL3V0aWxzL0RlY29kZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9saWIvdHlwZXMvdXJsZW5jb2RlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGZhc3RpZnkvYnVzYm95L2xpYi9tYWluLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL2NvbnN0YW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9mZXRjaC9nbG9iYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9mZXRjaC9zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL3dlYmlkbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9mZXRjaC9kYXRhVVJMLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL2ZpbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvZm9ybWRhdGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvYm9keS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb3JlL3JlcXVlc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9kaXNwYXRjaGVyLWJhc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29yZS9jb25uZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2xsaHR0cC91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9sbGh0dHAvY29uc3RhbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2hhbmRsZXIvUmVkaXJlY3RIYW5kbGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ludGVyY2VwdG9yL3JlZGlyZWN0SW50ZXJjZXB0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbGxodHRwL2xsaHR0cC13YXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2xsaHR0cC9sbGh0dHBfc2ltZC13YXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NsaWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9ub2RlL2ZpeGVkLXF1ZXVlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3Bvb2wtc3RhdHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvcG9vbC1iYXNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3Bvb2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYmFsYW5jZWQtcG9vbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb21wYXQvZGlzcGF0Y2hlci13ZWFrcmVmLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FnZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9yZWFkYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvYWJvcnQtc2lnbmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hcGktcmVxdWVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvYXBpLXN0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvYXBpLXBpcGVsaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hcGktdXBncmFkZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvYXBpLWNvbm5lY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYXBpL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1lcnJvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbW9jay9tb2NrLXN5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbW9jay9tb2NrLXV0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1pbnRlcmNlcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL21vY2stY2xpZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1wb29sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svcGx1cmFsaXplci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL3BlbmRpbmctaW50ZXJjZXB0b3JzLWZvcm1hdHRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL21vY2stYWdlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvcHJveHktYWdlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaGFuZGxlci9SZXRyeUhhbmRsZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZ2xvYmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2hhbmRsZXIvRGVjb3JhdG9ySGFuZGxlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9mZXRjaC9oZWFkZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL3Jlc3BvbnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL3JlcXVlc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmlsZWFwaS9zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZpbGVhcGkvcHJvZ3Jlc3NldmVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9maWxlYXBpL2VuY29kaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZpbGVhcGkvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9maWxlYXBpL2ZpbGVyZWFkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY2FjaGUvc3ltYm9scy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jYWNoZS91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NhY2hlL2NhY2hlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NhY2hlL2NhY2hlc3RvcmFnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb29raWVzL2NvbnN0YW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb29raWVzL3V0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29va2llcy9wYXJzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb29raWVzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYnNvY2tldC9jb25zdGFudHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2Vic29ja2V0L3N5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2Vic29ja2V0L2V2ZW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWJzb2NrZXQvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWJzb2NrZXQvY29ubmVjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWJzb2NrZXQvZnJhbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2Vic29ja2V0L3JlY2VpdmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYnNvY2tldC93ZWJzb2NrZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvaHR0cC1jbGllbnQvbGliL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9odHRwLWNsaWVudC9saWIvYXV0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9saWIvb2lkYy11dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9saWIvc3VtbWFyeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9saWIvcGF0aC11dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9saWIvcGxhdGZvcm0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2NvcmUvbGliL2NvcmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2FydGlmYWN0L2xpYi9pbnRlcm5hbC9zaGFyZWQvY29uZmlnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9qc29uLXR5cGluZ3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lL2J1aWxkL2NvbW1vbmpzL2Jhc2U2NC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUvYnVpbGQvY29tbW9uanMvcHJvdG9idWZqcy11dGY4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9iaW5hcnktZm9ybWF0LWNvbnRyYWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9nb29nLXZhcmludC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUvYnVpbGQvY29tbW9uanMvcGItbG9uZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUvYnVpbGQvY29tbW9uanMvYmluYXJ5LXJlYWRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUvYnVpbGQvY29tbW9uanMvYXNzZXJ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9iaW5hcnktd3JpdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9qc29uLWZvcm1hdC1jb250cmFjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUvYnVpbGQvY29tbW9uanMvbWVzc2FnZS10eXBlLWNvbnRyYWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9sb3dlci1jYW1lbC1jYXNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9yZWZsZWN0aW9uLWluZm8uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lL2J1aWxkL2NvbW1vbmpzL29uZW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9yZWZsZWN0aW9uLXR5cGUtY2hlY2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lL2J1aWxkL2NvbW1vbmpzL3JlZmxlY3Rpb24tbG9uZy1jb252ZXJ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9yZWZsZWN0aW9uLWpzb24tcmVhZGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9yZWZsZWN0aW9uLWpzb24td3JpdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9yZWZsZWN0aW9uLXNjYWxhci1kZWZhdWx0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9yZWZsZWN0aW9uLWJpbmFyeS1yZWFkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lL2J1aWxkL2NvbW1vbmpzL3JlZmxlY3Rpb24tYmluYXJ5LXdyaXRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUvYnVpbGQvY29tbW9uanMvcmVmbGVjdGlvbi1jcmVhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lL2J1aWxkL2NvbW1vbmpzL3JlZmxlY3Rpb24tbWVyZ2UtcGFydGlhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUvYnVpbGQvY29tbW9uanMvcmVmbGVjdGlvbi1lcXVhbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lL2J1aWxkL2NvbW1vbmpzL21lc3NhZ2UtdHlwZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUvYnVpbGQvY29tbW9uanMvcmVmbGVjdGlvbi1jb250YWlucy1tZXNzYWdlLXR5cGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lL2J1aWxkL2NvbW1vbmpzL2VudW0tb2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvYXJ0aWZhY3QvbGliL2dlbmVyYXRlZC9nb29nbGUvcHJvdG9idWYvdGltZXN0YW1wLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9hcnRpZmFjdC9saWIvZ2VuZXJhdGVkL2dvb2dsZS9wcm90b2J1Zi93cmFwcGVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUtcnBjL2J1aWxkL2NvbW1vbmpzL3JlZmxlY3Rpb24taW5mby5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUtcnBjL2J1aWxkL2NvbW1vbmpzL3NlcnZpY2UtdHlwZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUtcnBjL2J1aWxkL2NvbW1vbmpzL3JwYy1lcnJvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUtcnBjL2J1aWxkL2NvbW1vbmpzL3JwYy1vcHRpb25zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS1ycGMvYnVpbGQvY29tbW9uanMvZGVmZXJyZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lLXJwYy9idWlsZC9jb21tb25qcy9ycGMtb3V0cHV0LXN0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUtcnBjL2J1aWxkL2NvbW1vbmpzL3VuYXJ5LWNhbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lLXJwYy9idWlsZC9jb21tb25qcy9zZXJ2ZXItc3RyZWFtaW5nLWNhbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lLXJwYy9idWlsZC9jb21tb25qcy9jbGllbnQtc3RyZWFtaW5nLWNhbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lLXJwYy9idWlsZC9jb21tb25qcy9kdXBsZXgtc3RyZWFtaW5nLWNhbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lLXJwYy9idWlsZC9jb21tb25qcy90ZXN0LXRyYW5zcG9ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUtcnBjL2J1aWxkL2NvbW1vbmpzL3JwYy1pbnRlcmNlcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUtcnBjL2J1aWxkL2NvbW1vbmpzL3NlcnZlci1jYWxsLWNvbnRleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lLXJwYy9idWlsZC9jb21tb25qcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvYXJ0aWZhY3QvbGliL2dlbmVyYXRlZC9yZXN1bHRzL2FwaS92MS9hcnRpZmFjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdHdpcnAtdHMvYnVpbGQvdHdpcnAvY29udGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdHdpcnAtdHMvYnVpbGQvdHdpcnAvaG9va3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3R3aXJwLXRzL2J1aWxkL3R3aXJwL2Vycm9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdHdpcnAtdHMvYnVpbGQvdHdpcnAvcmVxdWVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdHdpcnAtdHMvYnVpbGQvdHdpcnAvc2VydmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy90d2lycC10cy9idWlsZC90d2lycC9pbnRlcmNlcHRvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2RvdC1vYmplY3QvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3R3aXJwLXRzL2J1aWxkL3R3aXJwL2h0dHAuY2xpZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy90d2lycC10cy9idWlsZC90d2lycC9nYXRld2F5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy90d2lycC10cy9idWlsZC90d2lycC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvYXJ0aWZhY3QvbGliL2dlbmVyYXRlZC9yZXN1bHRzL2FwaS92MS9hcnRpZmFjdC50d2lycC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvYXJ0aWZhY3QvbGliL2dlbmVyYXRlZC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvYXJ0aWZhY3QvbGliL2ludGVybmFsL3VwbG9hZC9yZXRlbnRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2FydGlmYWN0L2xpYi9pbnRlcm5hbC91cGxvYWQvcGF0aC1hbmQtYXJ0aWZhY3QtbmFtZS12YWxpZGF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9hcnRpZmFjdC9saWIvaW50ZXJuYWwvc2hhcmVkL3VzZXItYWdlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2FydGlmYWN0L2xpYi9pbnRlcm5hbC9zaGFyZWQvZXJyb3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9hcnRpZmFjdC9saWIvaW50ZXJuYWwvc2hhcmVkL2FydGlmYWN0LXR3aXJwLWNsaWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvYXJ0aWZhY3QvbGliL2ludGVybmFsL3VwbG9hZC91cGxvYWQtemlwLXNwZWNpZmljYXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2p3dC1kZWNvZGUvYnVpbGQvand0LWRlY29kZS5janMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2FydGlmYWN0L2xpYi9pbnRlcm5hbC9zaGFyZWQvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3BpcGVsaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2xvZ2dlci9kaXN0L2NvbW1vbmpzL2xvZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2xvZ2dlci9kaXN0L2NvbW1vbmpzL2RlYnVnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvbG9nZ2VyL2Rpc3QvY29tbW9uanMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9sb2cuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9hYm9ydC1jb250cm9sbGVyL2Rpc3QvY29tbW9uanMvQWJvcnRFcnJvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2Fib3J0LWNvbnRyb2xsZXIvZGlzdC9jb21tb25qcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtdXRpbC9kaXN0L2NvbW1vbmpzL2NyZWF0ZUFib3J0YWJsZVByb21pc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXV0aWwvZGlzdC9jb21tb25qcy9yYW5kb20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXV0aWwvZGlzdC9jb21tb25qcy9kZWxheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtdXRpbC9kaXN0L2NvbW1vbmpzL2Fib3J0ZXJVdGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtdXRpbC9kaXN0L2NvbW1vbmpzL29iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtdXRpbC9kaXN0L2NvbW1vbmpzL2Vycm9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS11dGlsL2Rpc3QvY29tbW9uanMvc2hhMjU2LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS11dGlsL2Rpc3QvY29tbW9uanMvdHlwZUd1YXJkcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtdXRpbC9kaXN0L2NvbW1vbmpzL3V1aWRVdGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtdXRpbC9kaXN0L2NvbW1vbmpzL2NoZWNrRW52aXJvbm1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXV0aWwvZGlzdC9jb21tb25qcy9ieXRlc0VuY29kaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS11dGlsL2Rpc3QvY29tbW9uanMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy91dGlsL3Nhbml0aXplci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3BvbGljaWVzL2xvZ1BvbGljeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3BvbGljaWVzL3JlZGlyZWN0UG9saWN5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvdXRpbC91c2VyQWdlbnRQbGF0Zm9ybS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL2NvbnN0YW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3V0aWwvdXNlckFnZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvcG9saWNpZXMvdXNlckFnZW50UG9saWN5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvdXRpbC90eXBlR3VhcmRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvdXRpbC9maWxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvdXRpbC9jb25jYXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9wb2xpY2llcy9tdWx0aXBhcnRQb2xpY3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9wb2xpY2llcy9kZWNvbXByZXNzUmVzcG9uc2VQb2xpY3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy91dGlsL2hlbHBlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9yZXRyeVN0cmF0ZWdpZXMvdGhyb3R0bGluZ1JldHJ5U3RyYXRlZ3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9yZXRyeVN0cmF0ZWdpZXMvZXhwb25lbnRpYWxSZXRyeVN0cmF0ZWd5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvcG9saWNpZXMvcmV0cnlQb2xpY3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9wb2xpY2llcy9kZWZhdWx0UmV0cnlQb2xpY3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9odHRwSGVhZGVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3BvbGljaWVzL2Zvcm1EYXRhUG9saWN5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9tcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvZGVidWcvc3JjL2NvbW1vbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvZGVidWcvc3JjL2Jyb3dzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2RlYnVnL3NyYy9ub2RlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2FnZW50LWJhc2UvZGlzdC9oZWxwZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9hZ2VudC1iYXNlL2Rpc3QvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2h0dHBzLXByb3h5LWFnZW50L2Rpc3QvcGFyc2UtcHJveHktcmVzcG9uc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2h0dHBzLXByb3h5LWFnZW50L2Rpc3QvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2h0dHAtcHJveHktYWdlbnQvZGlzdC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3BvbGljaWVzL3Byb3h5UG9saWN5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvcG9saWNpZXMvc2V0Q2xpZW50UmVxdWVzdElkUG9saWN5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvcG9saWNpZXMvdGxzUG9saWN5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS10cmFjaW5nL2Rpc3QvY29tbW9uanMvdHJhY2luZ0NvbnRleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXRyYWNpbmcvZGlzdC9jb21tb25qcy9zdGF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtdHJhY2luZy9kaXN0L2NvbW1vbmpzL2luc3RydW1lbnRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtdHJhY2luZy9kaXN0L2NvbW1vbmpzL3RyYWNpbmdDbGllbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXRyYWNpbmcvZGlzdC9jb21tb25qcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3V0aWwvaW5zcGVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3Jlc3RFcnJvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3BvbGljaWVzL3RyYWNpbmdQb2xpY3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9jcmVhdGVQaXBlbGluZUZyb21PcHRpb25zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvbm9kZUh0dHBDbGllbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9kZWZhdWx0SHR0cENsaWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3BpcGVsaW5lUmVxdWVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3BvbGljaWVzL2V4cG9uZW50aWFsUmV0cnlQb2xpY3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9wb2xpY2llcy9zeXN0ZW1FcnJvclJldHJ5UG9saWN5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvcG9saWNpZXMvdGhyb3R0bGluZ1JldHJ5UG9saWN5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvdXRpbC90b2tlbkN5Y2xlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3BvbGljaWVzL2JlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9wb2xpY2llcy9uZEpzb25Qb2xpY3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9wb2xpY2llcy9hdXhpbGlhcnlBdXRoZW50aWNhdGlvbkhlYWRlclBvbGljeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1hdXRoL2Rpc3QvY29tbW9uanMvYXp1cmVLZXlDcmVkZW50aWFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1hdXRoL2Rpc3QvY29tbW9uanMva2V5Q3JlZGVudGlhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtYXV0aC9kaXN0L2NvbW1vbmpzL2F6dXJlTmFtZWRLZXlDcmVkZW50aWFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1hdXRoL2Rpc3QvY29tbW9uanMvYXp1cmVTQVNDcmVkZW50aWFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1hdXRoL2Rpc3QvY29tbW9uanMvdG9rZW5DcmVkZW50aWFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1hdXRoL2Rpc3QvY29tbW9uanMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLWh0dHAtY29tcGF0L2Rpc3QvY29tbW9uanMvcG9saWNpZXMvZGlzYWJsZUtlZXBBbGl2ZVBvbGljeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtY2xpZW50L2Rpc3QvY29tbW9uanMvYmFzZTY0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1jbGllbnQvZGlzdC9jb21tb25qcy9pbnRlcmZhY2VzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1jbGllbnQvZGlzdC9jb21tb25qcy91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtY2xpZW50L2Rpc3QvY29tbW9uanMvc2VyaWFsaXplci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtY2xpZW50L2Rpc3QvY29tbW9uanMvc3RhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLWNsaWVudC9kaXN0L2NvbW1vbmpzL29wZXJhdGlvbkhlbHBlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLWNsaWVudC9kaXN0L2NvbW1vbmpzL2Rlc2VyaWFsaXphdGlvblBvbGljeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtY2xpZW50L2Rpc3QvY29tbW9uanMvaW50ZXJmYWNlSGVscGVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtY2xpZW50L2Rpc3QvY29tbW9uanMvc2VyaWFsaXphdGlvblBvbGljeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtY2xpZW50L2Rpc3QvY29tbW9uanMvcGlwZWxpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLWNsaWVudC9kaXN0L2NvbW1vbmpzL2h0dHBDbGllbnRDYWNoZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtY2xpZW50L2Rpc3QvY29tbW9uanMvdXJsSGVscGVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtY2xpZW50L2Rpc3QvY29tbW9uanMvbG9nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1jbGllbnQvZGlzdC9jb21tb25qcy9zZXJ2aWNlQ2xpZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1jbGllbnQvZGlzdC9jb21tb25qcy9hdXRob3JpemVSZXF1ZXN0T25DbGFpbUNoYWxsZW5nZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtY2xpZW50L2Rpc3QvY29tbW9uanMvYXV0aG9yaXplUmVxdWVzdE9uVGVuYW50Q2hhbGxlbmdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1jbGllbnQvZGlzdC9jb21tb25qcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtaHR0cC1jb21wYXQvZGlzdC9jb21tb25qcy91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1odHRwLWNvbXBhdC9kaXN0L2NvbW1vbmpzL3Jlc3BvbnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1odHRwLWNvbXBhdC9kaXN0L2NvbW1vbmpzL2V4dGVuZGVkQ2xpZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1odHRwLWNvbXBhdC9kaXN0L2NvbW1vbmpzL3BvbGljaWVzL3JlcXVlc3RQb2xpY3lGYWN0b3J5UG9saWN5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1odHRwLWNvbXBhdC9kaXN0L2NvbW1vbmpzL2h0dHBDbGllbnRBZGFwdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1odHRwLWNvbXBhdC9kaXN0L2NvbW1vbmpzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mYXN0LXhtbC1wYXJzZXIvc3JjL3V0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Zhc3QteG1sLXBhcnNlci9zcmMvdmFsaWRhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mYXN0LXhtbC1wYXJzZXIvc3JjL3htbHBhcnNlci9PcHRpb25zQnVpbGRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvZmFzdC14bWwtcGFyc2VyL3NyYy94bWxwYXJzZXIveG1sTm9kZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvZmFzdC14bWwtcGFyc2VyL3NyYy94bWxwYXJzZXIvRG9jVHlwZVJlYWRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvc3RybnVtL3N0cm51bS5qcyIsICIuLi9ub2RlX21vZHVsZXMvZmFzdC14bWwtcGFyc2VyL3NyYy9pZ25vcmVBdHRyaWJ1dGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mYXN0LXhtbC1wYXJzZXIvc3JjL3htbHBhcnNlci9PcmRlcmVkT2JqUGFyc2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mYXN0LXhtbC1wYXJzZXIvc3JjL3htbHBhcnNlci9ub2RlMmpzb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Zhc3QteG1sLXBhcnNlci9zcmMveG1scGFyc2VyL1hNTFBhcnNlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvZmFzdC14bWwtcGFyc2VyL3NyYy94bWxidWlsZGVyL29yZGVyZWRKczJYbWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Zhc3QteG1sLXBhcnNlci9zcmMveG1sYnVpbGRlci9qc29uMnhtbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvZmFzdC14bWwtcGFyc2VyL3NyYy9meHAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXhtbC9kaXN0L2NvbW1vbmpzL3htbC5jb21tb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXhtbC9kaXN0L2NvbW1vbmpzL3htbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUteG1sL2Rpc3QvY29tbW9uanMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLWxyby9kaXN0L2NvbW1vbmpzL2xvZ2dlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtbHJvL2Rpc3QvY29tbW9uanMvcG9sbGVyL2NvbnN0YW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtbHJvL2Rpc3QvY29tbW9uanMvcG9sbGVyL29wZXJhdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtbHJvL2Rpc3QvY29tbW9uanMvaHR0cC9vcGVyYXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLWxyby9kaXN0L2NvbW1vbmpzL3BvbGxlci9wb2xsZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLWxyby9kaXN0L2NvbW1vbmpzL2h0dHAvcG9sbGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1scm8vZGlzdC9jb21tb25qcy9sZWdhY3kvbHJvRW5naW5lL29wZXJhdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtbHJvL2Rpc3QvY29tbW9uanMvbGVnYWN5L3BvbGxlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtbHJvL2Rpc3QvY29tbW9uanMvbGVnYWN5L2xyb0VuZ2luZS9scm9FbmdpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLWxyby9kaXN0L2NvbW1vbmpzL2xlZ2FjeS9scm9FbmdpbmUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLWxyby9kaXN0L2NvbW1vbmpzL2xlZ2FjeS9wb2xsT3BlcmF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1scm8vZGlzdC9jb21tb25qcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL3N0b3JhZ2UtYmxvYi9kaXN0L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9hcnRpZmFjdC9saWIvaW50ZXJuYWwvdXBsb2FkL2Jsb2ItdXBsb2FkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9taW5pbWF0Y2gvbGliL3BhdGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2JhbGFuY2VkLW1hdGNoL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9icmFjZS1leHBhbnNpb24vaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL21pbmltYXRjaC9taW5pbWF0Y2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWRkaXItZ2xvYi9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXN5bmMvZGlzdC9hc3luYy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZ3JhY2VmdWwtZnMvcG9seWZpbGxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9ncmFjZWZ1bC1mcy9sZWdhY3ktc3RyZWFtcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZ3JhY2VmdWwtZnMvY2xvbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2dyYWNlZnVsLWZzL2dyYWNlZnVsLWZzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9pcy1zdHJlYW0vaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Byb2Nlc3MtbmV4dGljay1hcmdzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9pc2FycmF5L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sYXp5c3RyZWFtL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbm9kZV9tb2R1bGVzL3NhZmUtYnVmZmVyL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jb3JlLXV0aWwtaXMvbGliL3V0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2luaGVyaXRzL2luaGVyaXRzX2Jyb3dzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2luaGVyaXRzL2luaGVyaXRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sYXp5c3RyZWFtL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvQnVmZmVyTGlzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbGF6eXN0cmVhbS9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL2Rlc3Ryb3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3V0aWwtZGVwcmVjYXRlL25vZGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xhenlzdHJlYW0vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV93cml0YWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbGF6eXN0cmVhbS9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX2R1cGxleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbGF6eXN0cmVhbS9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL25vZGVfbW9kdWxlcy9zdHJpbmdfZGVjb2Rlci9saWIvc3RyaW5nX2RlY29kZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xhenlzdHJlYW0vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV9yZWFkYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbGF6eXN0cmVhbS9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3RyYW5zZm9ybS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbGF6eXN0cmVhbS9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3Bhc3N0aHJvdWdoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sYXp5c3RyZWFtL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vcmVhZGFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xhenlzdHJlYW0vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9wYXNzdGhyb3VnaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbGF6eXN0cmVhbS9saWIvbGF6eXN0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbm9ybWFsaXplLXBhdGgvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pZGVudGl0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcHBseS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19vdmVyUmVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2NvbnN0YW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2ZyZWVHbG9iYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fcm9vdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19TeW1ib2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0UmF3VGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX29iamVjdFRvU3RyaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VHZXRUYWcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc09iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzRnVuY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29yZUpzRGF0YS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc01hc2tlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL190b1NvdXJjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNOYXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0VmFsdWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TmF0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2RlZmluZVByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VTZXRUb1N0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zaG9ydE91dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRUb1N0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlUmVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2VxLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNMZW5ndGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5TGlrZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzSXRlcmF0ZWVDYWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VUaW1lcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzT2JqZWN0TGlrZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNBcmd1bWVudHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FyZ3VtZW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9zdHViRmFsc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0J1ZmZlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNUeXBlZEFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VVbmFyeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19ub2RlVXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzVHlwZWRBcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUxpa2VLZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzUHJvdG90eXBlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25hdGl2ZUtleXNJbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlS2V5c0luLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gva2V5c0luLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZGVmYXVsdHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvb3Vycy9wcmltb3JkaWFscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZXZlbnQtdGFyZ2V0LXNoaW0vZGlzdC9ldmVudC10YXJnZXQtc2hpbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvYWJvcnQtY29udHJvbGxlci9kaXN0L2Fib3J0LWNvbnRyb2xsZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvb3Vycy91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL291cnMvZXJyb3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3ZhbGlkYXRvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Byb2Nlc3MvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL2VuZC1vZi1zdHJlYW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9kZXN0cm95LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvbGVnYWN5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvYWRkLWFib3J0LXNpZ25hbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL2J1ZmZlcl9saXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvc3RhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9mcm9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvcmVhZGFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy93cml0YWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL2R1cGxleGlmeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL2R1cGxleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL3RyYW5zZm9ybS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL3Bhc3N0aHJvdWdoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvcGlwZWxpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9jb21wb3NlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvb3BlcmF0b3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL3N0cmVhbS9wcm9taXNlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9zdHJlYW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvb3Vycy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheVB1c2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNGbGF0dGVuYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlRmxhdHRlbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2ZsYXR0ZW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbmF0aXZlQ3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hDbGVhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoRGVsZXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hHZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaEhhcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoU2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0hhc2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlQ2xlYXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzb2NJbmRleE9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZURlbGV0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19saXN0Q2FjaGVHZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlSGFzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZVNldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19MaXN0Q2FjaGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlQ2xlYXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNLZXlhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldE1hcERhdGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVEZWxldGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVHZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVIYXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVTZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTWFwQ2FjaGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0Q2FjaGVBZGQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0Q2FjaGVIYXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU2V0Q2FjaGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUZpbmRJbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNOYU4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RyaWN0SW5kZXhPZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSW5kZXhPZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUluY2x1ZGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5SW5jbHVkZXNXaXRoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5TWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NhY2hlSGFzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VEaWZmZXJlbmNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheUxpa2VPYmplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9kaWZmZXJlbmNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1NldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL25vb3AuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0VG9BcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVTZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVVuaXEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC91bmlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19vdmVyQXJnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFByb3RvdHlwZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzUGxhaW5PYmplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2dsb2Ivbm9kZV9tb2R1bGVzL21pbmltYXRjaC9kaXN0L2NvbW1vbmpzL2Fzc2VydC12YWxpZC1wYXR0ZXJuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9nbG9iL25vZGVfbW9kdWxlcy9taW5pbWF0Y2gvZGlzdC9jb21tb25qcy9icmFjZS1leHByZXNzaW9ucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZ2xvYi9ub2RlX21vZHVsZXMvbWluaW1hdGNoL2Rpc3QvY29tbW9uanMvdW5lc2NhcGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2dsb2Ivbm9kZV9tb2R1bGVzL21pbmltYXRjaC9kaXN0L2NvbW1vbmpzL2FzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvZ2xvYi9ub2RlX21vZHVsZXMvbWluaW1hdGNoL2Rpc3QvY29tbW9uanMvZXNjYXBlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9nbG9iL25vZGVfbW9kdWxlcy9taW5pbWF0Y2gvZGlzdC9jb21tb25qcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbHJ1LWNhY2hlL2Rpc3QvY29tbW9uanMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL21pbmlwYXNzL2Rpc3QvY29tbW9uanMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3BhdGgtc2N1cnJ5L2Rpc3QvY29tbW9uanMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2dsb2IvZGlzdC9jb21tb25qcy9wYXR0ZXJuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9nbG9iL2Rpc3QvY29tbW9uanMvaWdub3JlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9nbG9iL2Rpc3QvY29tbW9uanMvcHJvY2Vzc29yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9nbG9iL2Rpc3QvY29tbW9uanMvd2Fsa2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9nbG9iL2Rpc3QvY29tbW9uanMvZ2xvYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvZ2xvYi9kaXN0L2NvbW1vbmpzL2hhcy1tYWdpYy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZ2xvYi9kaXN0L2NvbW1vbmpzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9hcmNoaXZlci11dGlscy9maWxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9hcmNoaXZlci11dGlscy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXJjaGl2ZXIvbGliL2Vycm9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9hcmNoaXZlci9saWIvY29yZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvY29tcHJlc3MtY29tbW9ucy9saWIvYXJjaGl2ZXJzL2FyY2hpdmUtZW50cnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NvbXByZXNzLWNvbW1vbnMvbGliL2FyY2hpdmVycy96aXAvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY29tcHJlc3MtY29tbW9ucy9saWIvYXJjaGl2ZXJzL3ppcC9nZW5lcmFsLXB1cnBvc2UtYml0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jb21wcmVzcy1jb21tb25zL2xpYi9hcmNoaXZlcnMvemlwL3VuaXgtc3RhdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY29tcHJlc3MtY29tbW9ucy9saWIvYXJjaGl2ZXJzL3ppcC9jb25zdGFudHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NvbXByZXNzLWNvbW1vbnMvbGliL2FyY2hpdmVycy96aXAvemlwLWFyY2hpdmUtZW50cnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NvbXByZXNzLWNvbW1vbnMvbGliL3V0aWwvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NvbXByZXNzLWNvbW1vbnMvbGliL2FyY2hpdmVycy9hcmNoaXZlLW91dHB1dC1zdHJlYW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NyYy0zMi9jcmMzMi5qcyIsICIuLi9ub2RlX21vZHVsZXMvY3JjMzItc3RyZWFtL2xpYi9jcmMzMi1zdHJlYW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NyYzMyLXN0cmVhbS9saWIvZGVmbGF0ZS1jcmMzMi1zdHJlYW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NyYzMyLXN0cmVhbS9saWIvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NvbXByZXNzLWNvbW1vbnMvbGliL2FyY2hpdmVycy96aXAvemlwLWFyY2hpdmUtb3V0cHV0LXN0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvY29tcHJlc3MtY29tbW9ucy9saWIvY29tcHJlc3MtY29tbW9ucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvemlwLXN0cmVhbS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXJjaGl2ZXIvbGliL3BsdWdpbnMvemlwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9xdWV1ZS10aWNrL3F1ZXVlLW1pY3JvdGFzay5qcyIsICIuLi9ub2RlX21vZHVsZXMvcXVldWUtdGljay9wcm9jZXNzLW5leHQtdGljay5qcyIsICIuLi9ub2RlX21vZHVsZXMvZmFzdC1maWZvL2ZpeGVkLXNpemUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Zhc3QtZmlmby9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdGV4dC1kZWNvZGVyL2xpYi9wYXNzLXRocm91Z2gtZGVjb2Rlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdGV4dC1kZWNvZGVyL2xpYi91dGY4LWRlY29kZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3RleHQtZGVjb2Rlci9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvc3RyZWFteC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYjRhL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy90YXItc3RyZWFtL2hlYWRlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Rhci1zdHJlYW0vZXh0cmFjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdGFyLXN0cmVhbS9jb25zdGFudHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Rhci1zdHJlYW0vcGFjay5qcyIsICIuLi9ub2RlX21vZHVsZXMvdGFyLXN0cmVhbS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXJjaGl2ZXIvbGliL3BsdWdpbnMvdGFyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9idWZmZXItY3JjMzIvZGlzdC9pbmRleC5janMiLCAiLi4vbm9kZV9tb2R1bGVzL2FyY2hpdmVyL2xpYi9wbHVnaW5zL2pzb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2FyY2hpdmVyL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9hcnRpZmFjdC9saWIvaW50ZXJuYWwvdXBsb2FkL3ppcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvYXJ0aWZhY3QvbGliL2ludGVybmFsL3VwbG9hZC91cGxvYWQtYXJ0aWZhY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2FydGlmYWN0L25vZGVfbW9kdWxlcy9AYWN0aW9ucy9naXRodWIvbGliL2NvbnRleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2FydGlmYWN0L25vZGVfbW9kdWxlcy9AYWN0aW9ucy9naXRodWIvbGliL2ludGVybmFsL3V0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bml2ZXJzYWwtdXNlci1hZ2VudC9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2JlZm9yZS1hZnRlci1ob29rL2xpYi9yZWdpc3Rlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvYmVmb3JlLWFmdGVyLWhvb2svbGliL2FkZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYmVmb3JlLWFmdGVyLWhvb2svbGliL3JlbW92ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvYmVmb3JlLWFmdGVyLWhvb2svaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2lzLXBsYWluLW9iamVjdC9kaXN0L2lzLXBsYWluLW9iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQG9jdG9raXQvZW5kcG9pbnQvZGlzdC1ub2RlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy93ZWJpZGwtY29udmVyc2lvbnMvbGliL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy93aGF0d2ctdXJsL2xpYi91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdHI0Ni9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvd2hhdHdnLXVybC9saWIvdXJsLXN0YXRlLW1hY2hpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3doYXR3Zy11cmwvbGliL1VSTC1pbXBsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy93aGF0d2ctdXJsL2xpYi9VUkwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3doYXR3Zy11cmwvbGliL3B1YmxpYy1hcGkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL25vZGUtZmV0Y2gvbGliL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9kZXByZWNhdGlvbi9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3dyYXBweS93cmFwcHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL29uY2Uvb25jZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQG9jdG9raXQvcmVxdWVzdC9ub2RlX21vZHVsZXMvQG9jdG9raXQvcmVxdWVzdC1lcnJvci9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3JlcXVlc3QvZGlzdC1ub2RlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9ncmFwaHFsL2Rpc3Qtbm9kZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQG9jdG9raXQvYXV0aC10b2tlbi9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2NvcmUvZGlzdC1ub2RlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9hcnRpZmFjdC9ub2RlX21vZHVsZXMvQGFjdGlvbnMvZ2l0aHViL25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9wbHVnaW4tcmVzdC1lbmRwb2ludC1tZXRob2RzL2Rpc3Qtbm9kZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvYXJ0aWZhY3Qvbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2dpdGh1Yi9ub2RlX21vZHVsZXMvQG9jdG9raXQvcGx1Z2luLXBhZ2luYXRlLXJlc3QvZGlzdC1ub2RlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9hcnRpZmFjdC9ub2RlX21vZHVsZXMvQGFjdGlvbnMvZ2l0aHViL2xpYi91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvYXJ0aWZhY3Qvbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2dpdGh1Yi9saWIvZ2l0aHViLmpzIiwgIi4uL25vZGVfbW9kdWxlcy90cmF2ZXJzZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hhaW5zYXcvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2J1ZmZlcnMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2JpbmFyeS9saWIvdmFycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvYmluYXJ5L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bnppcC1zdHJlYW0vbGliL21hdGNoZXItc3RyZWFtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bnppcC1zdHJlYW0vbGliL2VudHJ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bnppcC1zdHJlYW0vbGliL3VuemlwLXN0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW56aXAtc3RyZWFtL2xpYi9wYXJzZXItc3RyZWFtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9ta2RpcnAvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuemlwLXN0cmVhbS9saWIvZXh0cmFjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW56aXAtc3RyZWFtL3VuemlwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9hcnRpZmFjdC9saWIvaW50ZXJuYWwvZG93bmxvYWQvZG93bmxvYWQtYXJ0aWZhY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2FydGlmYWN0L2xpYi9pbnRlcm5hbC9maW5kL3JldHJ5LW9wdGlvbnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3BsdWdpbi1yZXF1ZXN0LWxvZy9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2JvdHRsZW5lY2svbGlnaHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3BsdWdpbi1yZXRyeS9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2FydGlmYWN0L2xpYi9pbnRlcm5hbC9maW5kL2dldC1hcnRpZmFjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvYXJ0aWZhY3QvbGliL2ludGVybmFsL2RlbGV0ZS9kZWxldGUtYXJ0aWZhY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2FydGlmYWN0L2xpYi9pbnRlcm5hbC9maW5kL2xpc3QtYXJ0aWZhY3RzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9hcnRpZmFjdC9saWIvaW50ZXJuYWwvY2xpZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9hcnRpZmFjdC9saWIvaW50ZXJuYWwvc2hhcmVkL2ludGVyZmFjZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2FydGlmYWN0L2xpYi9hcnRpZmFjdC5qcyIsICJzcmMvam9icy9wb3N0LnRzIiwgInNyYy9jb25zdGFudHMudHMiLCAic3JjL21ldHJpY3MvcHJvbWV0aGV1cy50cyIsICJzcmMvbWV0cmljcy9kZWZhdWx0LnRzIiwgInNyYy9yZXBvcnQvY29sb3JzLnRzIiwgInNyYy9yZXBvcnQvY2hhcnQudHMiLCAic3JjL3JlcG9ydC9kZWZhdWx0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWwogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH0pO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9hO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRDbWRQYXRoID0gZXhwb3J0cy50cnlHZXRFeGVjdXRhYmxlUGF0aCA9IGV4cG9ydHMuaXNSb290ZWQgPSBleHBvcnRzLmlzRGlyZWN0b3J5ID0gZXhwb3J0cy5leGlzdHMgPSBleHBvcnRzLlJFQURPTkxZID0gZXhwb3J0cy5VVl9GU19PX0VYTE9DSyA9IGV4cG9ydHMuSVNfV0lORE9XUyA9IGV4cG9ydHMudW5saW5rID0gZXhwb3J0cy5zeW1saW5rID0gZXhwb3J0cy5zdGF0ID0gZXhwb3J0cy5ybWRpciA9IGV4cG9ydHMucm0gPSBleHBvcnRzLnJlbmFtZSA9IGV4cG9ydHMucmVhZGxpbmsgPSBleHBvcnRzLnJlYWRkaXIgPSBleHBvcnRzLm9wZW4gPSBleHBvcnRzLm1rZGlyID0gZXhwb3J0cy5sc3RhdCA9IGV4cG9ydHMuY29weUZpbGUgPSBleHBvcnRzLmNobW9kID0gdm9pZCAwO1xuY29uc3QgZnMgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcImZzXCIpKTtcbmNvbnN0IHBhdGggPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcInBhdGhcIikpO1xuX2EgPSBmcy5wcm9taXNlc1xuLy8gZXhwb3J0IGNvbnN0IHtvcGVufSA9ICdmcydcbiwgZXhwb3J0cy5jaG1vZCA9IF9hLmNobW9kLCBleHBvcnRzLmNvcHlGaWxlID0gX2EuY29weUZpbGUsIGV4cG9ydHMubHN0YXQgPSBfYS5sc3RhdCwgZXhwb3J0cy5ta2RpciA9IF9hLm1rZGlyLCBleHBvcnRzLm9wZW4gPSBfYS5vcGVuLCBleHBvcnRzLnJlYWRkaXIgPSBfYS5yZWFkZGlyLCBleHBvcnRzLnJlYWRsaW5rID0gX2EucmVhZGxpbmssIGV4cG9ydHMucmVuYW1lID0gX2EucmVuYW1lLCBleHBvcnRzLnJtID0gX2Eucm0sIGV4cG9ydHMucm1kaXIgPSBfYS5ybWRpciwgZXhwb3J0cy5zdGF0ID0gX2Euc3RhdCwgZXhwb3J0cy5zeW1saW5rID0gX2Euc3ltbGluaywgZXhwb3J0cy51bmxpbmsgPSBfYS51bmxpbms7XG4vLyBleHBvcnQgY29uc3Qge29wZW59ID0gJ2ZzJ1xuZXhwb3J0cy5JU19XSU5ET1dTID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJztcbi8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvYmxvYi9kMDE1M2FlZTM2NzQyMmQwODU4MTA1YWJlYzE4NmRhNGRmZjBhMGM1L2RlcHMvdXYvaW5jbHVkZS91di93aW4uaCNMNjkxXG5leHBvcnRzLlVWX0ZTX09fRVhMT0NLID0gMHgxMDAwMDAwMDtcbmV4cG9ydHMuUkVBRE9OTFkgPSBmcy5jb25zdGFudHMuT19SRE9OTFk7XG5mdW5jdGlvbiBleGlzdHMoZnNQYXRoKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHlpZWxkIGV4cG9ydHMuc3RhdChmc1BhdGgpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG59XG5leHBvcnRzLmV4aXN0cyA9IGV4aXN0cztcbmZ1bmN0aW9uIGlzRGlyZWN0b3J5KGZzUGF0aCwgdXNlU3RhdCA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3Qgc3RhdHMgPSB1c2VTdGF0ID8geWllbGQgZXhwb3J0cy5zdGF0KGZzUGF0aCkgOiB5aWVsZCBleHBvcnRzLmxzdGF0KGZzUGF0aCk7XG4gICAgICAgIHJldHVybiBzdGF0cy5pc0RpcmVjdG9yeSgpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5pc0RpcmVjdG9yeSA9IGlzRGlyZWN0b3J5O1xuLyoqXG4gKiBPbiBPU1gvTGludXgsIHRydWUgaWYgcGF0aCBzdGFydHMgd2l0aCAnLycuIE9uIFdpbmRvd3MsIHRydWUgZm9yIHBhdGhzIGxpa2U6XG4gKiBcXCwgXFxoZWxsbywgXFxcXGhlbGxvXFxzaGFyZSwgQzosIGFuZCBDOlxcaGVsbG8gKGFuZCBjb3JyZXNwb25kaW5nIGFsdGVybmF0ZSBzZXBhcmF0b3IgY2FzZXMpLlxuICovXG5mdW5jdGlvbiBpc1Jvb3RlZChwKSB7XG4gICAgcCA9IG5vcm1hbGl6ZVNlcGFyYXRvcnMocCk7XG4gICAgaWYgKCFwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaXNSb290ZWQoKSBwYXJhbWV0ZXIgXCJwXCIgY2Fubm90IGJlIGVtcHR5Jyk7XG4gICAgfVxuICAgIGlmIChleHBvcnRzLklTX1dJTkRPV1MpIHtcbiAgICAgICAgcmV0dXJuIChwLnN0YXJ0c1dpdGgoJ1xcXFwnKSB8fCAvXltBLVpdOi9pLnRlc3QocCkgLy8gZS5nLiBcXCBvciBcXGhlbGxvIG9yIFxcXFxoZWxsb1xuICAgICAgICApOyAvLyBlLmcuIEM6IG9yIEM6XFxoZWxsb1xuICAgIH1cbiAgICByZXR1cm4gcC5zdGFydHNXaXRoKCcvJyk7XG59XG5leHBvcnRzLmlzUm9vdGVkID0gaXNSb290ZWQ7XG4vKipcbiAqIEJlc3QgZWZmb3J0IGF0dGVtcHQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBmaWxlIGV4aXN0cyBhbmQgaXMgZXhlY3V0YWJsZS5cbiAqIEBwYXJhbSBmaWxlUGF0aCAgICBmaWxlIHBhdGggdG8gY2hlY2tcbiAqIEBwYXJhbSBleHRlbnNpb25zICBhZGRpdGlvbmFsIGZpbGUgZXh0ZW5zaW9ucyB0byB0cnlcbiAqIEByZXR1cm4gaWYgZmlsZSBleGlzdHMgYW5kIGlzIGV4ZWN1dGFibGUsIHJldHVybnMgdGhlIGZpbGUgcGF0aC4gb3RoZXJ3aXNlIGVtcHR5IHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gdHJ5R2V0RXhlY3V0YWJsZVBhdGgoZmlsZVBhdGgsIGV4dGVuc2lvbnMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBsZXQgc3RhdHMgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyB0ZXN0IGZpbGUgZXhpc3RzXG4gICAgICAgICAgICBzdGF0cyA9IHlpZWxkIGV4cG9ydHMuc3RhdChmaWxlUGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgaWYgKGVyci5jb2RlICE9PSAnRU5PRU5UJykge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFVuZXhwZWN0ZWQgZXJyb3IgYXR0ZW1wdGluZyB0byBkZXRlcm1pbmUgaWYgZXhlY3V0YWJsZSBmaWxlIGV4aXN0cyAnJHtmaWxlUGF0aH0nOiAke2Vycn1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdHMgJiYgc3RhdHMuaXNGaWxlKCkpIHtcbiAgICAgICAgICAgIGlmIChleHBvcnRzLklTX1dJTkRPV1MpIHtcbiAgICAgICAgICAgICAgICAvLyBvbiBXaW5kb3dzLCB0ZXN0IGZvciB2YWxpZCBleHRlbnNpb25cbiAgICAgICAgICAgICAgICBjb25zdCB1cHBlckV4dCA9IHBhdGguZXh0bmFtZShmaWxlUGF0aCkudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgICAgICBpZiAoZXh0ZW5zaW9ucy5zb21lKHZhbGlkRXh0ID0+IHZhbGlkRXh0LnRvVXBwZXJDYXNlKCkgPT09IHVwcGVyRXh0KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmlsZVBhdGg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzVW5peEV4ZWN1dGFibGUoc3RhdHMpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmaWxlUGF0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gdHJ5IGVhY2ggZXh0ZW5zaW9uXG4gICAgICAgIGNvbnN0IG9yaWdpbmFsRmlsZVBhdGggPSBmaWxlUGF0aDtcbiAgICAgICAgZm9yIChjb25zdCBleHRlbnNpb24gb2YgZXh0ZW5zaW9ucykge1xuICAgICAgICAgICAgZmlsZVBhdGggPSBvcmlnaW5hbEZpbGVQYXRoICsgZXh0ZW5zaW9uO1xuICAgICAgICAgICAgc3RhdHMgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHN0YXRzID0geWllbGQgZXhwb3J0cy5zdGF0KGZpbGVQYXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyLmNvZGUgIT09ICdFTk9FTlQnKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBVbmV4cGVjdGVkIGVycm9yIGF0dGVtcHRpbmcgdG8gZGV0ZXJtaW5lIGlmIGV4ZWN1dGFibGUgZmlsZSBleGlzdHMgJyR7ZmlsZVBhdGh9JzogJHtlcnJ9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHN0YXRzICYmIHN0YXRzLmlzRmlsZSgpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGV4cG9ydHMuSVNfV0lORE9XUykge1xuICAgICAgICAgICAgICAgICAgICAvLyBwcmVzZXJ2ZSB0aGUgY2FzZSBvZiB0aGUgYWN0dWFsIGZpbGUgKHNpbmNlIGFuIGV4dGVuc2lvbiB3YXMgYXBwZW5kZWQpXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkaXJlY3RvcnkgPSBwYXRoLmRpcm5hbWUoZmlsZVBhdGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXBwZXJOYW1lID0gcGF0aC5iYXNlbmFtZShmaWxlUGF0aCkudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYWN0dWFsTmFtZSBvZiB5aWVsZCBleHBvcnRzLnJlYWRkaXIoZGlyZWN0b3J5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1cHBlck5hbWUgPT09IGFjdHVhbE5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlUGF0aCA9IHBhdGguam9pbihkaXJlY3RvcnksIGFjdHVhbE5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBVbmV4cGVjdGVkIGVycm9yIGF0dGVtcHRpbmcgdG8gZGV0ZXJtaW5lIHRoZSBhY3R1YWwgY2FzZSBvZiB0aGUgZmlsZSAnJHtmaWxlUGF0aH0nOiAke2Vycn1gKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmlsZVBhdGg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNVbml4RXhlY3V0YWJsZShzdGF0cykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmaWxlUGF0aDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfSk7XG59XG5leHBvcnRzLnRyeUdldEV4ZWN1dGFibGVQYXRoID0gdHJ5R2V0RXhlY3V0YWJsZVBhdGg7XG5mdW5jdGlvbiBub3JtYWxpemVTZXBhcmF0b3JzKHApIHtcbiAgICBwID0gcCB8fCAnJztcbiAgICBpZiAoZXhwb3J0cy5JU19XSU5ET1dTKSB7XG4gICAgICAgIC8vIGNvbnZlcnQgc2xhc2hlcyBvbiBXaW5kb3dzXG4gICAgICAgIHAgPSBwLnJlcGxhY2UoL1xcLy9nLCAnXFxcXCcpO1xuICAgICAgICAvLyByZW1vdmUgcmVkdW5kYW50IHNsYXNoZXNcbiAgICAgICAgcmV0dXJuIHAucmVwbGFjZSgvXFxcXFxcXFwrL2csICdcXFxcJyk7XG4gICAgfVxuICAgIC8vIHJlbW92ZSByZWR1bmRhbnQgc2xhc2hlc1xuICAgIHJldHVybiBwLnJlcGxhY2UoL1xcL1xcLysvZywgJy8nKTtcbn1cbi8vIG9uIE1hYy9MaW51eCwgdGVzdCB0aGUgZXhlY3V0ZSBiaXRcbi8vICAgICBSICAgVyAgWCAgUiAgVyBYIFIgVyBYXG4vLyAgIDI1NiAxMjggNjQgMzIgMTYgOCA0IDIgMVxuZnVuY3Rpb24gaXNVbml4RXhlY3V0YWJsZShzdGF0cykge1xuICAgIHJldHVybiAoKHN0YXRzLm1vZGUgJiAxKSA+IDAgfHxcbiAgICAgICAgKChzdGF0cy5tb2RlICYgOCkgPiAwICYmIHN0YXRzLmdpZCA9PT0gcHJvY2Vzcy5nZXRnaWQoKSkgfHxcbiAgICAgICAgKChzdGF0cy5tb2RlICYgNjQpID4gMCAmJiBzdGF0cy51aWQgPT09IHByb2Nlc3MuZ2V0dWlkKCkpKTtcbn1cbi8vIEdldCB0aGUgcGF0aCBvZiBjbWQuZXhlIGluIHdpbmRvd3NcbmZ1bmN0aW9uIGdldENtZFBhdGgoKSB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiAoX2EgPSBwcm9jZXNzLmVudlsnQ09NU1BFQyddKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBgY21kLmV4ZWA7XG59XG5leHBvcnRzLmdldENtZFBhdGggPSBnZXRDbWRQYXRoO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW8tdXRpbC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH0pO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5maW5kSW5QYXRoID0gZXhwb3J0cy53aGljaCA9IGV4cG9ydHMubWtkaXJQID0gZXhwb3J0cy5ybVJGID0gZXhwb3J0cy5tdiA9IGV4cG9ydHMuY3AgPSB2b2lkIDA7XG5jb25zdCBhc3NlcnRfMSA9IHJlcXVpcmUoXCJhc3NlcnRcIik7XG5jb25zdCBwYXRoID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJwYXRoXCIpKTtcbmNvbnN0IGlvVXRpbCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiLi9pby11dGlsXCIpKTtcbi8qKlxuICogQ29waWVzIGEgZmlsZSBvciBmb2xkZXIuXG4gKiBCYXNlZCBvZmYgb2Ygc2hlbGxqcyAtIGh0dHBzOi8vZ2l0aHViLmNvbS9zaGVsbGpzL3NoZWxsanMvYmxvYi85MjM3ZjY2YzUyZTVkYWE0MDQ1OGY5NGY5NTY1ZTE4ZTgxMzJmNWE2L3NyYy9jcC5qc1xuICpcbiAqIEBwYXJhbSAgICAgc291cmNlICAgIHNvdXJjZSBwYXRoXG4gKiBAcGFyYW0gICAgIGRlc3QgICAgICBkZXN0aW5hdGlvbiBwYXRoXG4gKiBAcGFyYW0gICAgIG9wdGlvbnMgICBvcHRpb25hbC4gU2VlIENvcHlPcHRpb25zLlxuICovXG5mdW5jdGlvbiBjcChzb3VyY2UsIGRlc3QsIG9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IHsgZm9yY2UsIHJlY3Vyc2l2ZSwgY29weVNvdXJjZURpcmVjdG9yeSB9ID0gcmVhZENvcHlPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBkZXN0U3RhdCA9ICh5aWVsZCBpb1V0aWwuZXhpc3RzKGRlc3QpKSA/IHlpZWxkIGlvVXRpbC5zdGF0KGRlc3QpIDogbnVsbDtcbiAgICAgICAgLy8gRGVzdCBpcyBhbiBleGlzdGluZyBmaWxlLCBidXQgbm90IGZvcmNpbmdcbiAgICAgICAgaWYgKGRlc3RTdGF0ICYmIGRlc3RTdGF0LmlzRmlsZSgpICYmICFmb3JjZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIGRlc3QgaXMgYW4gZXhpc3RpbmcgZGlyZWN0b3J5LCBzaG91bGQgY29weSBpbnNpZGUuXG4gICAgICAgIGNvbnN0IG5ld0Rlc3QgPSBkZXN0U3RhdCAmJiBkZXN0U3RhdC5pc0RpcmVjdG9yeSgpICYmIGNvcHlTb3VyY2VEaXJlY3RvcnlcbiAgICAgICAgICAgID8gcGF0aC5qb2luKGRlc3QsIHBhdGguYmFzZW5hbWUoc291cmNlKSlcbiAgICAgICAgICAgIDogZGVzdDtcbiAgICAgICAgaWYgKCEoeWllbGQgaW9VdGlsLmV4aXN0cyhzb3VyY2UpKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5OiAke3NvdXJjZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzb3VyY2VTdGF0ID0geWllbGQgaW9VdGlsLnN0YXQoc291cmNlKTtcbiAgICAgICAgaWYgKHNvdXJjZVN0YXQuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICAgICAgaWYgKCFyZWN1cnNpdmUpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBjb3B5LiAke3NvdXJjZX0gaXMgYSBkaXJlY3RvcnksIGJ1dCB0cmllZCB0byBjb3B5IHdpdGhvdXQgcmVjdXJzaXZlIGZsYWcuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB5aWVsZCBjcERpclJlY3Vyc2l2ZShzb3VyY2UsIG5ld0Rlc3QsIDAsIGZvcmNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChwYXRoLnJlbGF0aXZlKHNvdXJjZSwgbmV3RGVzdCkgPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgLy8gYSBmaWxlIGNhbm5vdCBiZSBjb3BpZWQgdG8gaXRzZWxmXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAnJHtuZXdEZXN0fScgYW5kICcke3NvdXJjZX0nIGFyZSB0aGUgc2FtZSBmaWxlYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB5aWVsZCBjb3B5RmlsZShzb3VyY2UsIG5ld0Rlc3QsIGZvcmNlKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuZXhwb3J0cy5jcCA9IGNwO1xuLyoqXG4gKiBNb3ZlcyBhIHBhdGguXG4gKlxuICogQHBhcmFtICAgICBzb3VyY2UgICAgc291cmNlIHBhdGhcbiAqIEBwYXJhbSAgICAgZGVzdCAgICAgIGRlc3RpbmF0aW9uIHBhdGhcbiAqIEBwYXJhbSAgICAgb3B0aW9ucyAgIG9wdGlvbmFsLiBTZWUgTW92ZU9wdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIG12KHNvdXJjZSwgZGVzdCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgaWYgKHlpZWxkIGlvVXRpbC5leGlzdHMoZGVzdCkpIHtcbiAgICAgICAgICAgIGxldCBkZXN0RXhpc3RzID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICh5aWVsZCBpb1V0aWwuaXNEaXJlY3RvcnkoZGVzdCkpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiBkZXN0IGlzIGRpcmVjdG9yeSBjb3B5IHNyYyBpbnRvIGRlc3RcbiAgICAgICAgICAgICAgICBkZXN0ID0gcGF0aC5qb2luKGRlc3QsIHBhdGguYmFzZW5hbWUoc291cmNlKSk7XG4gICAgICAgICAgICAgICAgZGVzdEV4aXN0cyA9IHlpZWxkIGlvVXRpbC5leGlzdHMoZGVzdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGVzdEV4aXN0cykge1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmZvcmNlID09IG51bGwgfHwgb3B0aW9ucy5mb3JjZSkge1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCBybVJGKGRlc3QpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdEZXN0aW5hdGlvbiBhbHJlYWR5IGV4aXN0cycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB5aWVsZCBta2RpclAocGF0aC5kaXJuYW1lKGRlc3QpKTtcbiAgICAgICAgeWllbGQgaW9VdGlsLnJlbmFtZShzb3VyY2UsIGRlc3QpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5tdiA9IG12O1xuLyoqXG4gKiBSZW1vdmUgYSBwYXRoIHJlY3Vyc2l2ZWx5IHdpdGggZm9yY2VcbiAqXG4gKiBAcGFyYW0gaW5wdXRQYXRoIHBhdGggdG8gcmVtb3ZlXG4gKi9cbmZ1bmN0aW9uIHJtUkYoaW5wdXRQYXRoKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgaWYgKGlvVXRpbC5JU19XSU5ET1dTKSB7XG4gICAgICAgICAgICAvLyBDaGVjayBmb3IgaW52YWxpZCBjaGFyYWN0ZXJzXG4gICAgICAgICAgICAvLyBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy93aW5kb3dzL3dpbjMyL2ZpbGVpby9uYW1pbmctYS1maWxlXG4gICAgICAgICAgICBpZiAoL1sqXCI8PnxdLy50ZXN0KGlucHV0UGF0aCkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZpbGUgcGF0aCBtdXN0IG5vdCBjb250YWluIGAqYCwgYFwiYCwgYDxgLCBgPmAgb3IgYHxgIG9uIFdpbmRvd3MnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gbm90ZSBpZiBwYXRoIGRvZXMgbm90IGV4aXN0LCBlcnJvciBpcyBzaWxlbnRcbiAgICAgICAgICAgIHlpZWxkIGlvVXRpbC5ybShpbnB1dFBhdGgsIHtcbiAgICAgICAgICAgICAgICBmb3JjZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBtYXhSZXRyaWVzOiAzLFxuICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICByZXRyeURlbGF5OiAzMDBcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmlsZSB3YXMgdW5hYmxlIHRvIGJlIHJlbW92ZWQgJHtlcnJ9YCk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbmV4cG9ydHMucm1SRiA9IHJtUkY7XG4vKipcbiAqIE1ha2UgYSBkaXJlY3RvcnkuICBDcmVhdGVzIHRoZSBmdWxsIHBhdGggd2l0aCBmb2xkZXJzIGluIGJldHdlZW5cbiAqIFdpbGwgdGhyb3cgaWYgaXQgZmFpbHNcbiAqXG4gKiBAcGFyYW0gICBmc1BhdGggICAgICAgIHBhdGggdG8gY3JlYXRlXG4gKiBAcmV0dXJucyBQcm9taXNlPHZvaWQ+XG4gKi9cbmZ1bmN0aW9uIG1rZGlyUChmc1BhdGgpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBhc3NlcnRfMS5vayhmc1BhdGgsICdhIHBhdGggYXJndW1lbnQgbXVzdCBiZSBwcm92aWRlZCcpO1xuICAgICAgICB5aWVsZCBpb1V0aWwubWtkaXIoZnNQYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICB9KTtcbn1cbmV4cG9ydHMubWtkaXJQID0gbWtkaXJQO1xuLyoqXG4gKiBSZXR1cm5zIHBhdGggb2YgYSB0b29sIGhhZCB0aGUgdG9vbCBhY3R1YWxseSBiZWVuIGludm9rZWQuICBSZXNvbHZlcyB2aWEgcGF0aHMuXG4gKiBJZiB5b3UgY2hlY2sgYW5kIHRoZSB0b29sIGRvZXMgbm90IGV4aXN0LCBpdCB3aWxsIHRocm93LlxuICpcbiAqIEBwYXJhbSAgICAgdG9vbCAgICAgICAgICAgICAgbmFtZSBvZiB0aGUgdG9vbFxuICogQHBhcmFtICAgICBjaGVjayAgICAgICAgICAgICB3aGV0aGVyIHRvIGNoZWNrIGlmIHRvb2wgZXhpc3RzXG4gKiBAcmV0dXJucyAgIFByb21pc2U8c3RyaW5nPiAgIHBhdGggdG8gdG9vbFxuICovXG5mdW5jdGlvbiB3aGljaCh0b29sLCBjaGVjaykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGlmICghdG9vbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwicGFyYW1ldGVyICd0b29sJyBpcyByZXF1aXJlZFwiKTtcbiAgICAgICAgfVxuICAgICAgICAvLyByZWN1cnNpdmUgd2hlbiBjaGVjaz10cnVlXG4gICAgICAgIGlmIChjaGVjaykge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0geWllbGQgd2hpY2godG9vbCwgZmFsc2UpO1xuICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICBpZiAoaW9VdGlsLklTX1dJTkRPV1MpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gbG9jYXRlIGV4ZWN1dGFibGUgZmlsZTogJHt0b29sfS4gUGxlYXNlIHZlcmlmeSBlaXRoZXIgdGhlIGZpbGUgcGF0aCBleGlzdHMgb3IgdGhlIGZpbGUgY2FuIGJlIGZvdW5kIHdpdGhpbiBhIGRpcmVjdG9yeSBzcGVjaWZpZWQgYnkgdGhlIFBBVEggZW52aXJvbm1lbnQgdmFyaWFibGUuIEFsc28gdmVyaWZ5IHRoZSBmaWxlIGhhcyBhIHZhbGlkIGV4dGVuc2lvbiBmb3IgYW4gZXhlY3V0YWJsZSBmaWxlLmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gbG9jYXRlIGV4ZWN1dGFibGUgZmlsZTogJHt0b29sfS4gUGxlYXNlIHZlcmlmeSBlaXRoZXIgdGhlIGZpbGUgcGF0aCBleGlzdHMgb3IgdGhlIGZpbGUgY2FuIGJlIGZvdW5kIHdpdGhpbiBhIGRpcmVjdG9yeSBzcGVjaWZpZWQgYnkgdGhlIFBBVEggZW52aXJvbm1lbnQgdmFyaWFibGUuIEFsc28gY2hlY2sgdGhlIGZpbGUgbW9kZSB0byB2ZXJpZnkgdGhlIGZpbGUgaXMgZXhlY3V0YWJsZS5gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1hdGNoZXMgPSB5aWVsZCBmaW5kSW5QYXRoKHRvb2wpO1xuICAgICAgICBpZiAobWF0Y2hlcyAmJiBtYXRjaGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiBtYXRjaGVzWzBdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9KTtcbn1cbmV4cG9ydHMud2hpY2ggPSB3aGljaDtcbi8qKlxuICogUmV0dXJucyBhIGxpc3Qgb2YgYWxsIG9jY3VycmVuY2VzIG9mIHRoZSBnaXZlbiB0b29sIG9uIHRoZSBzeXN0ZW0gcGF0aC5cbiAqXG4gKiBAcmV0dXJucyAgIFByb21pc2U8c3RyaW5nW10+ICB0aGUgcGF0aHMgb2YgdGhlIHRvb2xcbiAqL1xuZnVuY3Rpb24gZmluZEluUGF0aCh0b29sKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgaWYgKCF0b29sKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJwYXJhbWV0ZXIgJ3Rvb2wnIGlzIHJlcXVpcmVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGJ1aWxkIHRoZSBsaXN0IG9mIGV4dGVuc2lvbnMgdG8gdHJ5XG4gICAgICAgIGNvbnN0IGV4dGVuc2lvbnMgPSBbXTtcbiAgICAgICAgaWYgKGlvVXRpbC5JU19XSU5ET1dTICYmIHByb2Nlc3MuZW52WydQQVRIRVhUJ10pIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZXh0ZW5zaW9uIG9mIHByb2Nlc3MuZW52WydQQVRIRVhUJ10uc3BsaXQocGF0aC5kZWxpbWl0ZXIpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGV4dGVuc2lvbikge1xuICAgICAgICAgICAgICAgICAgICBleHRlbnNpb25zLnB1c2goZXh0ZW5zaW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgaXQncyByb290ZWQsIHJldHVybiBpdCBpZiBleGlzdHMuIG90aGVyd2lzZSByZXR1cm4gZW1wdHkuXG4gICAgICAgIGlmIChpb1V0aWwuaXNSb290ZWQodG9vbCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVQYXRoID0geWllbGQgaW9VdGlsLnRyeUdldEV4ZWN1dGFibGVQYXRoKHRvb2wsIGV4dGVuc2lvbnMpO1xuICAgICAgICAgICAgaWYgKGZpbGVQYXRoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtmaWxlUGF0aF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgYW55IHBhdGggc2VwYXJhdG9ycywgcmV0dXJuIGVtcHR5XG4gICAgICAgIGlmICh0b29sLmluY2x1ZGVzKHBhdGguc2VwKSkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIC8vIGJ1aWxkIHRoZSBsaXN0IG9mIGRpcmVjdG9yaWVzXG4gICAgICAgIC8vXG4gICAgICAgIC8vIE5vdGUsIHRlY2huaWNhbGx5IFwid2hlcmVcIiBjaGVja3MgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IG9uIFdpbmRvd3MuIEZyb20gYSB0b29sa2l0IHBlcnNwZWN0aXZlLFxuICAgICAgICAvLyBpdCBmZWVscyBsaWtlIHdlIHNob3VsZCBub3QgZG8gdGhpcy4gQ2hlY2tpbmcgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHNlZW1zIGxpa2UgbW9yZSBvZiBhIHVzZVxuICAgICAgICAvLyBjYXNlIG9mIGEgc2hlbGwsIGFuZCB0aGUgd2hpY2goKSBmdW5jdGlvbiBleHBvc2VkIGJ5IHRoZSB0b29sa2l0IHNob3VsZCBzdHJpdmUgZm9yIGNvbnNpc3RlbmN5XG4gICAgICAgIC8vIGFjcm9zcyBwbGF0Zm9ybXMuXG4gICAgICAgIGNvbnN0IGRpcmVjdG9yaWVzID0gW107XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5QQVRIKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHAgb2YgcHJvY2Vzcy5lbnYuUEFUSC5zcGxpdChwYXRoLmRlbGltaXRlcikpIHtcbiAgICAgICAgICAgICAgICBpZiAocCkge1xuICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcmllcy5wdXNoKHApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBmaW5kIGFsbCBtYXRjaGVzXG4gICAgICAgIGNvbnN0IG1hdGNoZXMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBkaXJlY3Rvcnkgb2YgZGlyZWN0b3JpZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVQYXRoID0geWllbGQgaW9VdGlsLnRyeUdldEV4ZWN1dGFibGVQYXRoKHBhdGguam9pbihkaXJlY3RvcnksIHRvb2wpLCBleHRlbnNpb25zKTtcbiAgICAgICAgICAgIGlmIChmaWxlUGF0aCkge1xuICAgICAgICAgICAgICAgIG1hdGNoZXMucHVzaChmaWxlUGF0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1hdGNoZXM7XG4gICAgfSk7XG59XG5leHBvcnRzLmZpbmRJblBhdGggPSBmaW5kSW5QYXRoO1xuZnVuY3Rpb24gcmVhZENvcHlPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBjb25zdCBmb3JjZSA9IG9wdGlvbnMuZm9yY2UgPT0gbnVsbCA/IHRydWUgOiBvcHRpb25zLmZvcmNlO1xuICAgIGNvbnN0IHJlY3Vyc2l2ZSA9IEJvb2xlYW4ob3B0aW9ucy5yZWN1cnNpdmUpO1xuICAgIGNvbnN0IGNvcHlTb3VyY2VEaXJlY3RvcnkgPSBvcHRpb25zLmNvcHlTb3VyY2VEaXJlY3RvcnkgPT0gbnVsbFxuICAgICAgICA/IHRydWVcbiAgICAgICAgOiBCb29sZWFuKG9wdGlvbnMuY29weVNvdXJjZURpcmVjdG9yeSk7XG4gICAgcmV0dXJuIHsgZm9yY2UsIHJlY3Vyc2l2ZSwgY29weVNvdXJjZURpcmVjdG9yeSB9O1xufVxuZnVuY3Rpb24gY3BEaXJSZWN1cnNpdmUoc291cmNlRGlyLCBkZXN0RGlyLCBjdXJyZW50RGVwdGgsIGZvcmNlKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgLy8gRW5zdXJlIHRoZXJlIGlzIG5vdCBhIHJ1biBhd2F5IHJlY3Vyc2l2ZSBjb3B5XG4gICAgICAgIGlmIChjdXJyZW50RGVwdGggPj0gMjU1KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjdXJyZW50RGVwdGgrKztcbiAgICAgICAgeWllbGQgbWtkaXJQKGRlc3REaXIpO1xuICAgICAgICBjb25zdCBmaWxlcyA9IHlpZWxkIGlvVXRpbC5yZWFkZGlyKHNvdXJjZURpcik7XG4gICAgICAgIGZvciAoY29uc3QgZmlsZU5hbWUgb2YgZmlsZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNyY0ZpbGUgPSBgJHtzb3VyY2VEaXJ9LyR7ZmlsZU5hbWV9YDtcbiAgICAgICAgICAgIGNvbnN0IGRlc3RGaWxlID0gYCR7ZGVzdERpcn0vJHtmaWxlTmFtZX1gO1xuICAgICAgICAgICAgY29uc3Qgc3JjRmlsZVN0YXQgPSB5aWVsZCBpb1V0aWwubHN0YXQoc3JjRmlsZSk7XG4gICAgICAgICAgICBpZiAoc3JjRmlsZVN0YXQuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICAgICAgICAgIC8vIFJlY3Vyc2VcbiAgICAgICAgICAgICAgICB5aWVsZCBjcERpclJlY3Vyc2l2ZShzcmNGaWxlLCBkZXN0RmlsZSwgY3VycmVudERlcHRoLCBmb3JjZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB5aWVsZCBjb3B5RmlsZShzcmNGaWxlLCBkZXN0RmlsZSwgZm9yY2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIENoYW5nZSB0aGUgbW9kZSBmb3IgdGhlIG5ld2x5IGNyZWF0ZWQgZGlyZWN0b3J5XG4gICAgICAgIHlpZWxkIGlvVXRpbC5jaG1vZChkZXN0RGlyLCAoeWllbGQgaW9VdGlsLnN0YXQoc291cmNlRGlyKSkubW9kZSk7XG4gICAgfSk7XG59XG4vLyBCdWZmZXJlZCBmaWxlIGNvcHlcbmZ1bmN0aW9uIGNvcHlGaWxlKHNyY0ZpbGUsIGRlc3RGaWxlLCBmb3JjZSkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGlmICgoeWllbGQgaW9VdGlsLmxzdGF0KHNyY0ZpbGUpKS5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgICAgICAgICAvLyB1bmxpbmsvcmUtbGluayBpdFxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB5aWVsZCBpb1V0aWwubHN0YXQoZGVzdEZpbGUpO1xuICAgICAgICAgICAgICAgIHlpZWxkIGlvVXRpbC51bmxpbmsoZGVzdEZpbGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAvLyBUcnkgdG8gb3ZlcnJpZGUgZmlsZSBwZXJtaXNzaW9uXG4gICAgICAgICAgICAgICAgaWYgKGUuY29kZSA9PT0gJ0VQRVJNJykge1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCBpb1V0aWwuY2htb2QoZGVzdEZpbGUsICcwNjY2Jyk7XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIGlvVXRpbC51bmxpbmsoZGVzdEZpbGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBvdGhlciBlcnJvcnMgPSBpdCBkb2Vzbid0IGV4aXN0LCBubyB3b3JrIHRvIGRvXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBDb3B5IG92ZXIgc3ltbGlua1xuICAgICAgICAgICAgY29uc3Qgc3ltbGlua0Z1bGwgPSB5aWVsZCBpb1V0aWwucmVhZGxpbmsoc3JjRmlsZSk7XG4gICAgICAgICAgICB5aWVsZCBpb1V0aWwuc3ltbGluayhzeW1saW5rRnVsbCwgZGVzdEZpbGUsIGlvVXRpbC5JU19XSU5ET1dTID8gJ2p1bmN0aW9uJyA6IG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCEoeWllbGQgaW9VdGlsLmV4aXN0cyhkZXN0RmlsZSkpIHx8IGZvcmNlKSB7XG4gICAgICAgICAgICB5aWVsZCBpb1V0aWwuY29weUZpbGUoc3JjRmlsZSwgZGVzdEZpbGUpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pby5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH0pO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5hcmdTdHJpbmdUb0FycmF5ID0gZXhwb3J0cy5Ub29sUnVubmVyID0gdm9pZCAwO1xuY29uc3Qgb3MgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIm9zXCIpKTtcbmNvbnN0IGV2ZW50cyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiZXZlbnRzXCIpKTtcbmNvbnN0IGNoaWxkID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJjaGlsZF9wcm9jZXNzXCIpKTtcbmNvbnN0IHBhdGggPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcInBhdGhcIikpO1xuY29uc3QgaW8gPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIkBhY3Rpb25zL2lvXCIpKTtcbmNvbnN0IGlvVXRpbCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiQGFjdGlvbnMvaW8vbGliL2lvLXV0aWxcIikpO1xuY29uc3QgdGltZXJzXzEgPSByZXF1aXJlKFwidGltZXJzXCIpO1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kICovXG5jb25zdCBJU19XSU5ET1dTID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJztcbi8qXG4gKiBDbGFzcyBmb3IgcnVubmluZyBjb21tYW5kIGxpbmUgdG9vbHMuIEhhbmRsZXMgcXVvdGluZyBhbmQgYXJnIHBhcnNpbmcgaW4gYSBwbGF0Zm9ybSBhZ25vc3RpYyB3YXkuXG4gKi9cbmNsYXNzIFRvb2xSdW5uZXIgZXh0ZW5kcyBldmVudHMuRXZlbnRFbWl0dGVyIHtcbiAgICBjb25zdHJ1Y3Rvcih0b29sUGF0aCwgYXJncywgb3B0aW9ucykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICBpZiAoIXRvb2xQYXRoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXJhbWV0ZXIgJ3Rvb2xQYXRoJyBjYW5ub3QgYmUgbnVsbCBvciBlbXB0eS5cIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50b29sUGF0aCA9IHRvb2xQYXRoO1xuICAgICAgICB0aGlzLmFyZ3MgPSBhcmdzIHx8IFtdO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIH1cbiAgICBfZGVidWcobWVzc2FnZSkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxpc3RlbmVycyAmJiB0aGlzLm9wdGlvbnMubGlzdGVuZXJzLmRlYnVnKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMubGlzdGVuZXJzLmRlYnVnKG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgfVxuICAgIF9nZXRDb21tYW5kU3RyaW5nKG9wdGlvbnMsIG5vUHJlZml4KSB7XG4gICAgICAgIGNvbnN0IHRvb2xQYXRoID0gdGhpcy5fZ2V0U3Bhd25GaWxlTmFtZSgpO1xuICAgICAgICBjb25zdCBhcmdzID0gdGhpcy5fZ2V0U3Bhd25BcmdzKG9wdGlvbnMpO1xuICAgICAgICBsZXQgY21kID0gbm9QcmVmaXggPyAnJyA6ICdbY29tbWFuZF0nOyAvLyBvbWl0IHByZWZpeCB3aGVuIHBpcGVkIHRvIGEgc2Vjb25kIHRvb2xcbiAgICAgICAgaWYgKElTX1dJTkRPV1MpIHtcbiAgICAgICAgICAgIC8vIFdpbmRvd3MgKyBjbWQgZmlsZVxuICAgICAgICAgICAgaWYgKHRoaXMuX2lzQ21kRmlsZSgpKSB7XG4gICAgICAgICAgICAgICAgY21kICs9IHRvb2xQYXRoO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYSBvZiBhcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNtZCArPSBgICR7YX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFdpbmRvd3MgKyB2ZXJiYXRpbVxuICAgICAgICAgICAgZWxzZSBpZiAob3B0aW9ucy53aW5kb3dzVmVyYmF0aW1Bcmd1bWVudHMpIHtcbiAgICAgICAgICAgICAgICBjbWQgKz0gYFwiJHt0b29sUGF0aH1cImA7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBhIG9mIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgY21kICs9IGAgJHthfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gV2luZG93cyAocmVndWxhcilcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNtZCArPSB0aGlzLl93aW5kb3dzUXVvdGVDbWRBcmcodG9vbFBhdGgpO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYSBvZiBhcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNtZCArPSBgICR7dGhpcy5fd2luZG93c1F1b3RlQ21kQXJnKGEpfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gT1NYL0xpbnV4IC0gdGhpcyBjYW4gbGlrZWx5IGJlIGltcHJvdmVkIHdpdGggc29tZSBmb3JtIG9mIHF1b3RpbmcuXG4gICAgICAgICAgICAvLyBjcmVhdGluZyBwcm9jZXNzZXMgb24gVW5peCBpcyBmdW5kYW1lbnRhbGx5IGRpZmZlcmVudCB0aGFuIFdpbmRvd3MuXG4gICAgICAgICAgICAvLyBvbiBVbml4LCBleGVjdnAoKSB0YWtlcyBhbiBhcmcgYXJyYXkuXG4gICAgICAgICAgICBjbWQgKz0gdG9vbFBhdGg7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGEgb2YgYXJncykge1xuICAgICAgICAgICAgICAgIGNtZCArPSBgICR7YX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbWQ7XG4gICAgfVxuICAgIF9wcm9jZXNzTGluZUJ1ZmZlcihkYXRhLCBzdHJCdWZmZXIsIG9uTGluZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGV0IHMgPSBzdHJCdWZmZXIgKyBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBsZXQgbiA9IHMuaW5kZXhPZihvcy5FT0wpO1xuICAgICAgICAgICAgd2hpbGUgKG4gPiAtMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxpbmUgPSBzLnN1YnN0cmluZygwLCBuKTtcbiAgICAgICAgICAgICAgICBvbkxpbmUobGluZSk7XG4gICAgICAgICAgICAgICAgLy8gdGhlIHJlc3Qgb2YgdGhlIHN0cmluZyAuLi5cbiAgICAgICAgICAgICAgICBzID0gcy5zdWJzdHJpbmcobiArIG9zLkVPTC5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIG4gPSBzLmluZGV4T2Yob3MuRU9MKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIC8vIHN0cmVhbWluZyBsaW5lcyB0byBjb25zb2xlIGlzIGJlc3QgZWZmb3J0LiAgRG9uJ3QgZmFpbCBhIGJ1aWxkLlxuICAgICAgICAgICAgdGhpcy5fZGVidWcoYGVycm9yIHByb2Nlc3NpbmcgbGluZS4gRmFpbGVkIHdpdGggZXJyb3IgJHtlcnJ9YCk7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX2dldFNwYXduRmlsZU5hbWUoKSB7XG4gICAgICAgIGlmIChJU19XSU5ET1dTKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5faXNDbWRGaWxlKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvY2Vzcy5lbnZbJ0NPTVNQRUMnXSB8fCAnY21kLmV4ZSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMudG9vbFBhdGg7XG4gICAgfVxuICAgIF9nZXRTcGF3bkFyZ3Mob3B0aW9ucykge1xuICAgICAgICBpZiAoSVNfV0lORE9XUykge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2lzQ21kRmlsZSgpKSB7XG4gICAgICAgICAgICAgICAgbGV0IGFyZ2xpbmUgPSBgL0QgL1MgL0MgXCIke3RoaXMuX3dpbmRvd3NRdW90ZUNtZEFyZyh0aGlzLnRvb2xQYXRoKX1gO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYSBvZiB0aGlzLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJnbGluZSArPSAnICc7XG4gICAgICAgICAgICAgICAgICAgIGFyZ2xpbmUgKz0gb3B0aW9ucy53aW5kb3dzVmVyYmF0aW1Bcmd1bWVudHNcbiAgICAgICAgICAgICAgICAgICAgICAgID8gYVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLl93aW5kb3dzUXVvdGVDbWRBcmcoYSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFyZ2xpbmUgKz0gJ1wiJztcbiAgICAgICAgICAgICAgICByZXR1cm4gW2FyZ2xpbmVdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmFyZ3M7XG4gICAgfVxuICAgIF9lbmRzV2l0aChzdHIsIGVuZCkge1xuICAgICAgICByZXR1cm4gc3RyLmVuZHNXaXRoKGVuZCk7XG4gICAgfVxuICAgIF9pc0NtZEZpbGUoKSB7XG4gICAgICAgIGNvbnN0IHVwcGVyVG9vbFBhdGggPSB0aGlzLnRvb2xQYXRoLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgIHJldHVybiAodGhpcy5fZW5kc1dpdGgodXBwZXJUb29sUGF0aCwgJy5DTUQnKSB8fFxuICAgICAgICAgICAgdGhpcy5fZW5kc1dpdGgodXBwZXJUb29sUGF0aCwgJy5CQVQnKSk7XG4gICAgfVxuICAgIF93aW5kb3dzUXVvdGVDbWRBcmcoYXJnKSB7XG4gICAgICAgIC8vIGZvciAuZXhlLCBhcHBseSB0aGUgbm9ybWFsIHF1b3RpbmcgcnVsZXMgdGhhdCBsaWJ1diBhcHBsaWVzXG4gICAgICAgIGlmICghdGhpcy5faXNDbWRGaWxlKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl91dlF1b3RlQ21kQXJnKGFyZyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gb3RoZXJ3aXNlIGFwcGx5IHF1b3RpbmcgcnVsZXMgc3BlY2lmaWMgdG8gdGhlIGNtZC5leGUgY29tbWFuZCBsaW5lIHBhcnNlci5cbiAgICAgICAgLy8gdGhlIGxpYnV2IHJ1bGVzIGFyZSBnZW5lcmljIGFuZCBhcmUgbm90IGRlc2lnbmVkIHNwZWNpZmljYWxseSBmb3IgY21kLmV4ZVxuICAgICAgICAvLyBjb21tYW5kIGxpbmUgcGFyc2VyLlxuICAgICAgICAvL1xuICAgICAgICAvLyBmb3IgYSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGUgY21kLmV4ZSBjb21tYW5kIGxpbmUgcGFyc2VyLCByZWZlciB0b1xuICAgICAgICAvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzQwOTQ2OTkvaG93LWRvZXMtdGhlLXdpbmRvd3MtY29tbWFuZC1pbnRlcnByZXRlci1jbWQtZXhlLXBhcnNlLXNjcmlwdHMvNzk3MDkxMiM3OTcwOTEyXG4gICAgICAgIC8vIG5lZWQgcXVvdGVzIGZvciBlbXB0eSBhcmdcbiAgICAgICAgaWYgKCFhcmcpIHtcbiAgICAgICAgICAgIHJldHVybiAnXCJcIic7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGFyZyBuZWVkcyB0byBiZSBxdW90ZWRcbiAgICAgICAgY29uc3QgY21kU3BlY2lhbENoYXJzID0gW1xuICAgICAgICAgICAgJyAnLFxuICAgICAgICAgICAgJ1xcdCcsXG4gICAgICAgICAgICAnJicsXG4gICAgICAgICAgICAnKCcsXG4gICAgICAgICAgICAnKScsXG4gICAgICAgICAgICAnWycsXG4gICAgICAgICAgICAnXScsXG4gICAgICAgICAgICAneycsXG4gICAgICAgICAgICAnfScsXG4gICAgICAgICAgICAnXicsXG4gICAgICAgICAgICAnPScsXG4gICAgICAgICAgICAnOycsXG4gICAgICAgICAgICAnIScsXG4gICAgICAgICAgICBcIidcIixcbiAgICAgICAgICAgICcrJyxcbiAgICAgICAgICAgICcsJyxcbiAgICAgICAgICAgICdgJyxcbiAgICAgICAgICAgICd+JyxcbiAgICAgICAgICAgICd8JyxcbiAgICAgICAgICAgICc8JyxcbiAgICAgICAgICAgICc+JyxcbiAgICAgICAgICAgICdcIidcbiAgICAgICAgXTtcbiAgICAgICAgbGV0IG5lZWRzUXVvdGVzID0gZmFsc2U7XG4gICAgICAgIGZvciAoY29uc3QgY2hhciBvZiBhcmcpIHtcbiAgICAgICAgICAgIGlmIChjbWRTcGVjaWFsQ2hhcnMuc29tZSh4ID0+IHggPT09IGNoYXIpKSB7XG4gICAgICAgICAgICAgICAgbmVlZHNRdW90ZXMgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIHNob3J0LWNpcmN1aXQgaWYgcXVvdGVzIG5vdCBuZWVkZWRcbiAgICAgICAgaWYgKCFuZWVkc1F1b3Rlcykge1xuICAgICAgICAgICAgcmV0dXJuIGFyZztcbiAgICAgICAgfVxuICAgICAgICAvLyB0aGUgZm9sbG93aW5nIHF1b3RpbmcgcnVsZXMgYXJlIHZlcnkgc2ltaWxhciB0byB0aGUgcnVsZXMgdGhhdCBieSBsaWJ1diBhcHBsaWVzLlxuICAgICAgICAvL1xuICAgICAgICAvLyAxKSB3cmFwIHRoZSBzdHJpbmcgaW4gcXVvdGVzXG4gICAgICAgIC8vXG4gICAgICAgIC8vIDIpIGRvdWJsZS11cCBxdW90ZXMgLSBpLmUuIFwiID0+IFwiXCJcbiAgICAgICAgLy9cbiAgICAgICAgLy8gICAgdGhpcyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgbGlidXYgcXVvdGluZyBydWxlcy4gbGlidXYgcmVwbGFjZXMgXCIgd2l0aCBcXFwiLCB3aGljaCB1bmZvcnR1bmF0ZWx5XG4gICAgICAgIC8vICAgIGRvZXNuJ3Qgd29yayB3ZWxsIHdpdGggYSBjbWQuZXhlIGNvbW1hbmQgbGluZS5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gICAgbm90ZSwgcmVwbGFjaW5nIFwiIHdpdGggXCJcIiBhbHNvIHdvcmtzIHdlbGwgaWYgdGhlIGFyZyBpcyBwYXNzZWQgdG8gYSBkb3duc3RyZWFtIC5ORVQgY29uc29sZSBhcHAuXG4gICAgICAgIC8vICAgIGZvciBleGFtcGxlLCB0aGUgY29tbWFuZCBsaW5lOlxuICAgICAgICAvLyAgICAgICAgICBmb28uZXhlIFwibXlhcmc6XCJcIm15IHZhbFwiXCJcIlxuICAgICAgICAvLyAgICBpcyBwYXJzZWQgYnkgYSAuTkVUIGNvbnNvbGUgYXBwIGludG8gYW4gYXJnIGFycmF5OlxuICAgICAgICAvLyAgICAgICAgICBbIFwibXlhcmc6XFxcIm15IHZhbFxcXCJcIiBdXG4gICAgICAgIC8vICAgIHdoaWNoIGlzIHRoZSBzYW1lIGVuZCByZXN1bHQgd2hlbiBhcHBseWluZyBsaWJ1diBxdW90aW5nIHJ1bGVzLiBhbHRob3VnaCB0aGUgYWN0dWFsXG4gICAgICAgIC8vICAgIGNvbW1hbmQgbGluZSBmcm9tIGxpYnV2IHF1b3RpbmcgcnVsZXMgd291bGQgbG9vayBsaWtlOlxuICAgICAgICAvLyAgICAgICAgICBmb28uZXhlIFwibXlhcmc6XFxcIm15IHZhbFxcXCJcIlxuICAgICAgICAvL1xuICAgICAgICAvLyAzKSBkb3VibGUtdXAgc2xhc2hlcyB0aGF0IHByZWNlZGUgYSBxdW90ZSxcbiAgICAgICAgLy8gICAgZS5nLiAgaGVsbG8gXFx3b3JsZCAgICA9PiBcImhlbGxvIFxcd29ybGRcIlxuICAgICAgICAvLyAgICAgICAgICBoZWxsb1xcXCJ3b3JsZCAgICA9PiBcImhlbGxvXFxcXFwiXCJ3b3JsZFwiXG4gICAgICAgIC8vICAgICAgICAgIGhlbGxvXFxcXFwid29ybGQgICA9PiBcImhlbGxvXFxcXFxcXFxcIlwid29ybGRcIlxuICAgICAgICAvLyAgICAgICAgICBoZWxsbyB3b3JsZFxcICAgID0+IFwiaGVsbG8gd29ybGRcXFxcXCJcbiAgICAgICAgLy9cbiAgICAgICAgLy8gICAgdGVjaG5pY2FsbHkgdGhpcyBpcyBub3QgcmVxdWlyZWQgZm9yIGEgY21kLmV4ZSBjb21tYW5kIGxpbmUsIG9yIHRoZSBiYXRjaCBhcmd1bWVudCBwYXJzZXIuXG4gICAgICAgIC8vICAgIHRoZSByZWFzb25zIGZvciBpbmNsdWRpbmcgdGhpcyBhcyBhIC5jbWQgcXVvdGluZyBydWxlIGFyZTpcbiAgICAgICAgLy9cbiAgICAgICAgLy8gICAgYSkgdGhpcyBpcyBvcHRpbWl6ZWQgZm9yIHRoZSBzY2VuYXJpbyB3aGVyZSB0aGUgYXJndW1lbnQgaXMgcGFzc2VkIGZyb20gdGhlIC5jbWQgZmlsZSB0byBhblxuICAgICAgICAvLyAgICAgICBleHRlcm5hbCBwcm9ncmFtLiBtYW55IHByb2dyYW1zIChlLmcuIC5ORVQgY29uc29sZSBhcHBzKSByZWx5IG9uIHRoZSBzbGFzaC1kb3VibGluZyBydWxlLlxuICAgICAgICAvL1xuICAgICAgICAvLyAgICBiKSBpdCdzIHdoYXQgd2UndmUgYmVlbiBkb2luZyBwcmV2aW91c2x5IChieSBkZWZlcnJpbmcgdG8gbm9kZSBkZWZhdWx0IGJlaGF2aW9yKSBhbmQgd2VcbiAgICAgICAgLy8gICAgICAgaGF2ZW4ndCBoZWFyZCBhbnkgY29tcGxhaW50cyBhYm91dCB0aGF0IGFzcGVjdC5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gbm90ZSwgYSB3ZWFrbmVzcyBvZiB0aGUgcXVvdGluZyBydWxlcyBjaG9zZW4gaGVyZSwgaXMgdGhhdCAlIGlzIG5vdCBlc2NhcGVkLiBpbiBmYWN0LCAlIGNhbm5vdCBiZVxuICAgICAgICAvLyBlc2NhcGVkIHdoZW4gdXNlZCBvbiB0aGUgY29tbWFuZCBsaW5lIGRpcmVjdGx5IC0gZXZlbiB0aG91Z2ggd2l0aGluIGEgLmNtZCBmaWxlICUgY2FuIGJlIGVzY2FwZWRcbiAgICAgICAgLy8gYnkgdXNpbmcgJSUuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIHRoZSBzYXZpbmcgZ3JhY2UgaXMsIG9uIHRoZSBjb21tYW5kIGxpbmUsICV2YXIlIGlzIGxlZnQgYXMtaXMgaWYgdmFyIGlzIG5vdCBkZWZpbmVkLiB0aGlzIGNvbnRyYXN0c1xuICAgICAgICAvLyB0aGUgbGluZSBwYXJzaW5nIHJ1bGVzIHdpdGhpbiBhIC5jbWQgZmlsZSwgd2hlcmUgaWYgdmFyIGlzIG5vdCBkZWZpbmVkIGl0IGlzIHJlcGxhY2VkIHdpdGggbm90aGluZy5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gb25lIG9wdGlvbiB0aGF0IHdhcyBleHBsb3JlZCB3YXMgcmVwbGFjaW5nICUgd2l0aCBeJSAtIGkuZS4gJXZhciUgPT4gXiV2YXJeJS4gdGhpcyBoYWNrIHdvdWxkXG4gICAgICAgIC8vIG9mdGVuIHdvcmssIHNpbmNlIGl0IGlzIHVubGlrZWx5IHRoYXQgdmFyXiB3b3VsZCBleGlzdCwgYW5kIHRoZSBeIGNoYXJhY3RlciBpcyByZW1vdmVkIHdoZW4gdGhlXG4gICAgICAgIC8vIHZhcmlhYmxlIGlzIHVzZWQuIHRoZSBwcm9ibGVtLCBob3dldmVyLCBpcyB0aGF0IF4gaXMgbm90IHJlbW92ZWQgd2hlbiAlKiBpcyB1c2VkIHRvIHBhc3MgdGhlIGFyZ3NcbiAgICAgICAgLy8gdG8gYW4gZXh0ZXJuYWwgcHJvZ3JhbS5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gYW4gdW5leHBsb3JlZCBwb3RlbnRpYWwgc29sdXRpb24gZm9yIHRoZSAlIGVzY2FwaW5nIHByb2JsZW0sIGlzIHRvIGNyZWF0ZSBhIHdyYXBwZXIgLmNtZCBmaWxlLlxuICAgICAgICAvLyAlIGNhbiBiZSBlc2NhcGVkIHdpdGhpbiBhIC5jbWQgZmlsZS5cbiAgICAgICAgbGV0IHJldmVyc2UgPSAnXCInO1xuICAgICAgICBsZXQgcXVvdGVIaXQgPSB0cnVlO1xuICAgICAgICBmb3IgKGxldCBpID0gYXJnLmxlbmd0aDsgaSA+IDA7IGktLSkge1xuICAgICAgICAgICAgLy8gd2FsayB0aGUgc3RyaW5nIGluIHJldmVyc2VcbiAgICAgICAgICAgIHJldmVyc2UgKz0gYXJnW2kgLSAxXTtcbiAgICAgICAgICAgIGlmIChxdW90ZUhpdCAmJiBhcmdbaSAtIDFdID09PSAnXFxcXCcpIHtcbiAgICAgICAgICAgICAgICByZXZlcnNlICs9ICdcXFxcJzsgLy8gZG91YmxlIHRoZSBzbGFzaFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYXJnW2kgLSAxXSA9PT0gJ1wiJykge1xuICAgICAgICAgICAgICAgIHF1b3RlSGl0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXZlcnNlICs9ICdcIic7IC8vIGRvdWJsZSB0aGUgcXVvdGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHF1b3RlSGl0ID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV2ZXJzZSArPSAnXCInO1xuICAgICAgICByZXR1cm4gcmV2ZXJzZVxuICAgICAgICAgICAgLnNwbGl0KCcnKVxuICAgICAgICAgICAgLnJldmVyc2UoKVxuICAgICAgICAgICAgLmpvaW4oJycpO1xuICAgIH1cbiAgICBfdXZRdW90ZUNtZEFyZyhhcmcpIHtcbiAgICAgICAgLy8gVG9vbCBydW5uZXIgd3JhcHMgY2hpbGRfcHJvY2Vzcy5zcGF3bigpIGFuZCBuZWVkcyB0byBhcHBseSB0aGUgc2FtZSBxdW90aW5nIGFzXG4gICAgICAgIC8vIE5vZGUgaW4gY2VydGFpbiBjYXNlcyB3aGVyZSB0aGUgdW5kb2N1bWVudGVkIHNwYXduIG9wdGlvbiB3aW5kb3dzVmVyYmF0aW1Bcmd1bWVudHNcbiAgICAgICAgLy8gaXMgdXNlZC5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gU2luY2UgdGhpcyBmdW5jdGlvbiBpcyBhIHBvcnQgb2YgcXVvdGVfY21kX2FyZyBmcm9tIE5vZGUgNC54ICh0ZWNobmljYWxseSwgbGliIFVWLFxuICAgICAgICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvdjQueC9kZXBzL3V2L3NyYy93aW4vcHJvY2Vzcy5jIGZvciBkZXRhaWxzKSxcbiAgICAgICAgLy8gcGFzdGluZyBjb3B5cmlnaHQgbm90aWNlIGZyb20gTm9kZSB3aXRoaW4gdGhpcyBmdW5jdGlvbjpcbiAgICAgICAgLy9cbiAgICAgICAgLy8gICAgICBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gICAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gICAgICAgIC8vICAgICAgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG9cbiAgICAgICAgLy8gICAgICBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZVxuICAgICAgICAvLyAgICAgIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vclxuICAgICAgICAvLyAgICAgIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gICAgICAgIC8vICAgICAgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAgICAgICAgLy9cbiAgICAgICAgLy8gICAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuICAgICAgICAvLyAgICAgIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICAgICAgICAvL1xuICAgICAgICAvLyAgICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAgICAgICAgLy8gICAgICBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAgICAgICAgLy8gICAgICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAgICAgICAgLy8gICAgICBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gICAgICAgIC8vICAgICAgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkdcbiAgICAgICAgLy8gICAgICBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTXG4gICAgICAgIC8vICAgICAgSU4gVEhFIFNPRlRXQVJFLlxuICAgICAgICBpZiAoIWFyZykge1xuICAgICAgICAgICAgLy8gTmVlZCBkb3VibGUgcXVvdGF0aW9uIGZvciBlbXB0eSBhcmd1bWVudFxuICAgICAgICAgICAgcmV0dXJuICdcIlwiJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWFyZy5pbmNsdWRlcygnICcpICYmICFhcmcuaW5jbHVkZXMoJ1xcdCcpICYmICFhcmcuaW5jbHVkZXMoJ1wiJykpIHtcbiAgICAgICAgICAgIC8vIE5vIHF1b3RhdGlvbiBuZWVkZWRcbiAgICAgICAgICAgIHJldHVybiBhcmc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFhcmcuaW5jbHVkZXMoJ1wiJykgJiYgIWFyZy5pbmNsdWRlcygnXFxcXCcpKSB7XG4gICAgICAgICAgICAvLyBObyBlbWJlZGRlZCBkb3VibGUgcXVvdGVzIG9yIGJhY2tzbGFzaGVzLCBzbyBJIGNhbiBqdXN0IHdyYXBcbiAgICAgICAgICAgIC8vIHF1b3RlIG1hcmtzIGFyb3VuZCB0aGUgd2hvbGUgdGhpbmcuXG4gICAgICAgICAgICByZXR1cm4gYFwiJHthcmd9XCJgO1xuICAgICAgICB9XG4gICAgICAgIC8vIEV4cGVjdGVkIGlucHV0L291dHB1dDpcbiAgICAgICAgLy8gICBpbnB1dCA6IGhlbGxvXCJ3b3JsZFxuICAgICAgICAvLyAgIG91dHB1dDogXCJoZWxsb1xcXCJ3b3JsZFwiXG4gICAgICAgIC8vICAgaW5wdXQgOiBoZWxsb1wiXCJ3b3JsZFxuICAgICAgICAvLyAgIG91dHB1dDogXCJoZWxsb1xcXCJcXFwid29ybGRcIlxuICAgICAgICAvLyAgIGlucHV0IDogaGVsbG9cXHdvcmxkXG4gICAgICAgIC8vICAgb3V0cHV0OiBoZWxsb1xcd29ybGRcbiAgICAgICAgLy8gICBpbnB1dCA6IGhlbGxvXFxcXHdvcmxkXG4gICAgICAgIC8vICAgb3V0cHV0OiBoZWxsb1xcXFx3b3JsZFxuICAgICAgICAvLyAgIGlucHV0IDogaGVsbG9cXFwid29ybGRcbiAgICAgICAgLy8gICBvdXRwdXQ6IFwiaGVsbG9cXFxcXFxcIndvcmxkXCJcbiAgICAgICAgLy8gICBpbnB1dCA6IGhlbGxvXFxcXFwid29ybGRcbiAgICAgICAgLy8gICBvdXRwdXQ6IFwiaGVsbG9cXFxcXFxcXFxcXCJ3b3JsZFwiXG4gICAgICAgIC8vICAgaW5wdXQgOiBoZWxsbyB3b3JsZFxcXG4gICAgICAgIC8vICAgb3V0cHV0OiBcImhlbGxvIHdvcmxkXFxcXFwiIC0gbm90ZSB0aGUgY29tbWVudCBpbiBsaWJ1diBhY3R1YWxseSByZWFkcyBcImhlbGxvIHdvcmxkXFxcIlxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0IGl0IGFwcGVhcnMgdGhlIGNvbW1lbnQgaXMgd3JvbmcsIGl0IHNob3VsZCBiZSBcImhlbGxvIHdvcmxkXFxcXFwiXG4gICAgICAgIGxldCByZXZlcnNlID0gJ1wiJztcbiAgICAgICAgbGV0IHF1b3RlSGl0ID0gdHJ1ZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IGFyZy5sZW5ndGg7IGkgPiAwOyBpLS0pIHtcbiAgICAgICAgICAgIC8vIHdhbGsgdGhlIHN0cmluZyBpbiByZXZlcnNlXG4gICAgICAgICAgICByZXZlcnNlICs9IGFyZ1tpIC0gMV07XG4gICAgICAgICAgICBpZiAocXVvdGVIaXQgJiYgYXJnW2kgLSAxXSA9PT0gJ1xcXFwnKSB7XG4gICAgICAgICAgICAgICAgcmV2ZXJzZSArPSAnXFxcXCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChhcmdbaSAtIDFdID09PSAnXCInKSB7XG4gICAgICAgICAgICAgICAgcXVvdGVIaXQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldmVyc2UgKz0gJ1xcXFwnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcXVvdGVIaXQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXZlcnNlICs9ICdcIic7XG4gICAgICAgIHJldHVybiByZXZlcnNlXG4gICAgICAgICAgICAuc3BsaXQoJycpXG4gICAgICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgICAgICAuam9pbignJyk7XG4gICAgfVxuICAgIF9jbG9uZUV4ZWNPcHRpb25zKG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgIGN3ZDogb3B0aW9ucy5jd2QgfHwgcHJvY2Vzcy5jd2QoKSxcbiAgICAgICAgICAgIGVudjogb3B0aW9ucy5lbnYgfHwgcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgICBzaWxlbnQ6IG9wdGlvbnMuc2lsZW50IHx8IGZhbHNlLFxuICAgICAgICAgICAgd2luZG93c1ZlcmJhdGltQXJndW1lbnRzOiBvcHRpb25zLndpbmRvd3NWZXJiYXRpbUFyZ3VtZW50cyB8fCBmYWxzZSxcbiAgICAgICAgICAgIGZhaWxPblN0ZEVycjogb3B0aW9ucy5mYWlsT25TdGRFcnIgfHwgZmFsc2UsXG4gICAgICAgICAgICBpZ25vcmVSZXR1cm5Db2RlOiBvcHRpb25zLmlnbm9yZVJldHVybkNvZGUgfHwgZmFsc2UsXG4gICAgICAgICAgICBkZWxheTogb3B0aW9ucy5kZWxheSB8fCAxMDAwMFxuICAgICAgICB9O1xuICAgICAgICByZXN1bHQub3V0U3RyZWFtID0gb3B0aW9ucy5vdXRTdHJlYW0gfHwgcHJvY2Vzcy5zdGRvdXQ7XG4gICAgICAgIHJlc3VsdC5lcnJTdHJlYW0gPSBvcHRpb25zLmVyclN0cmVhbSB8fCBwcm9jZXNzLnN0ZGVycjtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgX2dldFNwYXduT3B0aW9ucyhvcHRpb25zLCB0b29sUGF0aCkge1xuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgICAgIHJlc3VsdC5jd2QgPSBvcHRpb25zLmN3ZDtcbiAgICAgICAgcmVzdWx0LmVudiA9IG9wdGlvbnMuZW52O1xuICAgICAgICByZXN1bHRbJ3dpbmRvd3NWZXJiYXRpbUFyZ3VtZW50cyddID1cbiAgICAgICAgICAgIG9wdGlvbnMud2luZG93c1ZlcmJhdGltQXJndW1lbnRzIHx8IHRoaXMuX2lzQ21kRmlsZSgpO1xuICAgICAgICBpZiAob3B0aW9ucy53aW5kb3dzVmVyYmF0aW1Bcmd1bWVudHMpIHtcbiAgICAgICAgICAgIHJlc3VsdC5hcmd2MCA9IGBcIiR7dG9vbFBhdGh9XCJgO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEV4ZWMgYSB0b29sLlxuICAgICAqIE91dHB1dCB3aWxsIGJlIHN0cmVhbWVkIHRvIHRoZSBsaXZlIGNvbnNvbGUuXG4gICAgICogUmV0dXJucyBwcm9taXNlIHdpdGggcmV0dXJuIGNvZGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSAgICAgdG9vbCAgICAgcGF0aCB0byB0b29sIHRvIGV4ZWNcbiAgICAgKiBAcGFyYW0gICAgIG9wdGlvbnMgIG9wdGlvbmFsIGV4ZWMgb3B0aW9ucy4gIFNlZSBFeGVjT3B0aW9uc1xuICAgICAqIEByZXR1cm5zICAgbnVtYmVyXG4gICAgICovXG4gICAgZXhlYygpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIC8vIHJvb3QgdGhlIHRvb2wgcGF0aCBpZiBpdCBpcyB1bnJvb3RlZCBhbmQgY29udGFpbnMgcmVsYXRpdmUgcGF0aGluZ1xuICAgICAgICAgICAgaWYgKCFpb1V0aWwuaXNSb290ZWQodGhpcy50b29sUGF0aCkgJiZcbiAgICAgICAgICAgICAgICAodGhpcy50b29sUGF0aC5pbmNsdWRlcygnLycpIHx8XG4gICAgICAgICAgICAgICAgICAgIChJU19XSU5ET1dTICYmIHRoaXMudG9vbFBhdGguaW5jbHVkZXMoJ1xcXFwnKSkpKSB7XG4gICAgICAgICAgICAgICAgLy8gcHJlZmVyIG9wdGlvbnMuY3dkIGlmIGl0IGlzIHNwZWNpZmllZCwgaG93ZXZlciBvcHRpb25zLmN3ZCBtYXkgYWxzbyBuZWVkIHRvIGJlIHJvb3RlZFxuICAgICAgICAgICAgICAgIHRoaXMudG9vbFBhdGggPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgdGhpcy5vcHRpb25zLmN3ZCB8fCBwcm9jZXNzLmN3ZCgpLCB0aGlzLnRvb2xQYXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGlmIHRoZSB0b29sIGlzIG9ubHkgYSBmaWxlIG5hbWUsIHRoZW4gcmVzb2x2ZSBpdCBmcm9tIHRoZSBQQVRIXG4gICAgICAgICAgICAvLyBvdGhlcndpc2UgdmVyaWZ5IGl0IGV4aXN0cyAoYWRkIGV4dGVuc2lvbiBvbiBXaW5kb3dzIGlmIG5lY2Vzc2FyeSlcbiAgICAgICAgICAgIHRoaXMudG9vbFBhdGggPSB5aWVsZCBpby53aGljaCh0aGlzLnRvb2xQYXRoLCB0cnVlKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGVidWcoYGV4ZWMgdG9vbDogJHt0aGlzLnRvb2xQYXRofWApO1xuICAgICAgICAgICAgICAgIHRoaXMuX2RlYnVnKCdhcmd1bWVudHM6Jyk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBhcmcgb2YgdGhpcy5hcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RlYnVnKGAgICAke2FyZ31gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uc05vbk51bGwgPSB0aGlzLl9jbG9uZUV4ZWNPcHRpb25zKHRoaXMub3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zTm9uTnVsbC5zaWxlbnQgJiYgb3B0aW9uc05vbk51bGwub3V0U3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnNOb25OdWxsLm91dFN0cmVhbS53cml0ZSh0aGlzLl9nZXRDb21tYW5kU3RyaW5nKG9wdGlvbnNOb25OdWxsKSArIG9zLkVPTCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXRlID0gbmV3IEV4ZWNTdGF0ZShvcHRpb25zTm9uTnVsbCwgdGhpcy50b29sUGF0aCk7XG4gICAgICAgICAgICAgICAgc3RhdGUub24oJ2RlYnVnJywgKG1lc3NhZ2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVidWcobWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jd2QgJiYgISh5aWVsZCBpb1V0aWwuZXhpc3RzKHRoaXMub3B0aW9ucy5jd2QpKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcihgVGhlIGN3ZDogJHt0aGlzLm9wdGlvbnMuY3dkfSBkb2VzIG5vdCBleGlzdCFgKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVOYW1lID0gdGhpcy5fZ2V0U3Bhd25GaWxlTmFtZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNwID0gY2hpbGQuc3Bhd24oZmlsZU5hbWUsIHRoaXMuX2dldFNwYXduQXJncyhvcHRpb25zTm9uTnVsbCksIHRoaXMuX2dldFNwYXduT3B0aW9ucyh0aGlzLm9wdGlvbnMsIGZpbGVOYW1lKSk7XG4gICAgICAgICAgICAgICAgbGV0IHN0ZGJ1ZmZlciA9ICcnO1xuICAgICAgICAgICAgICAgIGlmIChjcC5zdGRvdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgY3Auc3Rkb3V0Lm9uKCdkYXRhJywgKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMubGlzdGVuZXJzICYmIHRoaXMub3B0aW9ucy5saXN0ZW5lcnMuc3Rkb3V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmxpc3RlbmVycy5zdGRvdXQoZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnNOb25OdWxsLnNpbGVudCAmJiBvcHRpb25zTm9uTnVsbC5vdXRTdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zTm9uTnVsbC5vdXRTdHJlYW0ud3JpdGUoZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGRidWZmZXIgPSB0aGlzLl9wcm9jZXNzTGluZUJ1ZmZlcihkYXRhLCBzdGRidWZmZXIsIChsaW5lKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5saXN0ZW5lcnMgJiYgdGhpcy5vcHRpb25zLmxpc3RlbmVycy5zdGRsaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5saXN0ZW5lcnMuc3RkbGluZShsaW5lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCBlcnJidWZmZXIgPSAnJztcbiAgICAgICAgICAgICAgICBpZiAoY3Auc3RkZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNwLnN0ZGVyci5vbignZGF0YScsIChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5wcm9jZXNzU3RkZXJyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMubGlzdGVuZXJzICYmIHRoaXMub3B0aW9ucy5saXN0ZW5lcnMuc3RkZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmxpc3RlbmVycy5zdGRlcnIoZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnNOb25OdWxsLnNpbGVudCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNOb25OdWxsLmVyclN0cmVhbSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNOb25OdWxsLm91dFN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHMgPSBvcHRpb25zTm9uTnVsbC5mYWlsT25TdGRFcnJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBvcHRpb25zTm9uTnVsbC5lcnJTdHJlYW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBvcHRpb25zTm9uTnVsbC5vdXRTdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcy53cml0ZShkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVycmJ1ZmZlciA9IHRoaXMuX3Byb2Nlc3NMaW5lQnVmZmVyKGRhdGEsIGVycmJ1ZmZlciwgKGxpbmUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxpc3RlbmVycyAmJiB0aGlzLm9wdGlvbnMubGlzdGVuZXJzLmVycmxpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmxpc3RlbmVycy5lcnJsaW5lKGxpbmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY3Aub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5wcm9jZXNzRXJyb3IgPSBlcnIubWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUucHJvY2Vzc0V4aXRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLnByb2Nlc3NDbG9zZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5DaGVja0NvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY3Aub24oJ2V4aXQnLCAoY29kZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5wcm9jZXNzRXhpdENvZGUgPSBjb2RlO1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5wcm9jZXNzRXhpdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVidWcoYEV4aXQgY29kZSAke2NvZGV9IHJlY2VpdmVkIGZyb20gdG9vbCAnJHt0aGlzLnRvb2xQYXRofSdgKTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuQ2hlY2tDb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNwLm9uKCdjbG9zZScsIChjb2RlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLnByb2Nlc3NFeGl0Q29kZSA9IGNvZGU7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLnByb2Nlc3NFeGl0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5wcm9jZXNzQ2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVidWcoYFNURElPIHN0cmVhbXMgaGF2ZSBjbG9zZWQgZm9yIHRvb2wgJyR7dGhpcy50b29sUGF0aH0nYCk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLkNoZWNrQ29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBzdGF0ZS5vbignZG9uZScsIChlcnJvciwgZXhpdENvZGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0ZGJ1ZmZlci5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ3N0ZGxpbmUnLCBzdGRidWZmZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJidWZmZXIubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdlcnJsaW5lJywgZXJyYnVmZmVyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjcC5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShleGl0Q29kZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmlucHV0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghY3Auc3RkaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignY2hpbGQgcHJvY2VzcyBtaXNzaW5nIHN0ZGluJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY3Auc3RkaW4uZW5kKHRoaXMub3B0aW9ucy5pbnB1dCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnRzLlRvb2xSdW5uZXIgPSBUb29sUnVubmVyO1xuLyoqXG4gKiBDb252ZXJ0IGFuIGFyZyBzdHJpbmcgdG8gYW4gYXJyYXkgb2YgYXJncy4gSGFuZGxlcyBlc2NhcGluZ1xuICpcbiAqIEBwYXJhbSAgICBhcmdTdHJpbmcgICBzdHJpbmcgb2YgYXJndW1lbnRzXG4gKiBAcmV0dXJucyAgc3RyaW5nW10gICAgYXJyYXkgb2YgYXJndW1lbnRzXG4gKi9cbmZ1bmN0aW9uIGFyZ1N0cmluZ1RvQXJyYXkoYXJnU3RyaW5nKSB7XG4gICAgY29uc3QgYXJncyA9IFtdO1xuICAgIGxldCBpblF1b3RlcyA9IGZhbHNlO1xuICAgIGxldCBlc2NhcGVkID0gZmFsc2U7XG4gICAgbGV0IGFyZyA9ICcnO1xuICAgIGZ1bmN0aW9uIGFwcGVuZChjKSB7XG4gICAgICAgIC8vIHdlIG9ubHkgZXNjYXBlIGRvdWJsZSBxdW90ZXMuXG4gICAgICAgIGlmIChlc2NhcGVkICYmIGMgIT09ICdcIicpIHtcbiAgICAgICAgICAgIGFyZyArPSAnXFxcXCc7XG4gICAgICAgIH1cbiAgICAgICAgYXJnICs9IGM7XG4gICAgICAgIGVzY2FwZWQgPSBmYWxzZTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmdTdHJpbmcubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgYyA9IGFyZ1N0cmluZy5jaGFyQXQoaSk7XG4gICAgICAgIGlmIChjID09PSAnXCInKSB7XG4gICAgICAgICAgICBpZiAoIWVzY2FwZWQpIHtcbiAgICAgICAgICAgICAgICBpblF1b3RlcyA9ICFpblF1b3RlcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGFwcGVuZChjKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjID09PSAnXFxcXCcgJiYgZXNjYXBlZCkge1xuICAgICAgICAgICAgYXBwZW5kKGMpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGMgPT09ICdcXFxcJyAmJiBpblF1b3Rlcykge1xuICAgICAgICAgICAgZXNjYXBlZCA9IHRydWU7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYyA9PT0gJyAnICYmICFpblF1b3Rlcykge1xuICAgICAgICAgICAgaWYgKGFyZy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgYXJncy5wdXNoKGFyZyk7XG4gICAgICAgICAgICAgICAgYXJnID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBhcHBlbmQoYyk7XG4gICAgfVxuICAgIGlmIChhcmcubGVuZ3RoID4gMCkge1xuICAgICAgICBhcmdzLnB1c2goYXJnLnRyaW0oKSk7XG4gICAgfVxuICAgIHJldHVybiBhcmdzO1xufVxuZXhwb3J0cy5hcmdTdHJpbmdUb0FycmF5ID0gYXJnU3RyaW5nVG9BcnJheTtcbmNsYXNzIEV4ZWNTdGF0ZSBleHRlbmRzIGV2ZW50cy5FdmVudEVtaXR0ZXIge1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMsIHRvb2xQYXRoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMucHJvY2Vzc0Nsb3NlZCA9IGZhbHNlOyAvLyB0cmFja3Mgd2hldGhlciB0aGUgcHJvY2VzcyBoYXMgZXhpdGVkIGFuZCBzdGRpbyBpcyBjbG9zZWRcbiAgICAgICAgdGhpcy5wcm9jZXNzRXJyb3IgPSAnJztcbiAgICAgICAgdGhpcy5wcm9jZXNzRXhpdENvZGUgPSAwO1xuICAgICAgICB0aGlzLnByb2Nlc3NFeGl0ZWQgPSBmYWxzZTsgLy8gdHJhY2tzIHdoZXRoZXIgdGhlIHByb2Nlc3MgaGFzIGV4aXRlZFxuICAgICAgICB0aGlzLnByb2Nlc3NTdGRlcnIgPSBmYWxzZTsgLy8gdHJhY2tzIHdoZXRoZXIgc3RkZXJyIHdhcyB3cml0dGVuIHRvXG4gICAgICAgIHRoaXMuZGVsYXkgPSAxMDAwMDsgLy8gMTAgc2Vjb25kc1xuICAgICAgICB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy50aW1lb3V0ID0gbnVsbDtcbiAgICAgICAgaWYgKCF0b29sUGF0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd0b29sUGF0aCBtdXN0IG5vdCBiZSBlbXB0eScpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgIHRoaXMudG9vbFBhdGggPSB0b29sUGF0aDtcbiAgICAgICAgaWYgKG9wdGlvbnMuZGVsYXkpIHtcbiAgICAgICAgICAgIHRoaXMuZGVsYXkgPSBvcHRpb25zLmRlbGF5O1xuICAgICAgICB9XG4gICAgfVxuICAgIENoZWNrQ29tcGxldGUoKSB7XG4gICAgICAgIGlmICh0aGlzLmRvbmUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wcm9jZXNzQ2xvc2VkKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRSZXN1bHQoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLnByb2Nlc3NFeGl0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMudGltZW91dCA9IHRpbWVyc18xLnNldFRpbWVvdXQoRXhlY1N0YXRlLkhhbmRsZVRpbWVvdXQsIHRoaXMuZGVsYXksIHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIF9kZWJ1ZyhtZXNzYWdlKSB7XG4gICAgICAgIHRoaXMuZW1pdCgnZGVidWcnLCBtZXNzYWdlKTtcbiAgICB9XG4gICAgX3NldFJlc3VsdCgpIHtcbiAgICAgICAgLy8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlcmUgaXMgYW4gZXJyb3JcbiAgICAgICAgbGV0IGVycm9yO1xuICAgICAgICBpZiAodGhpcy5wcm9jZXNzRXhpdGVkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcm9jZXNzRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihgVGhlcmUgd2FzIGFuIGVycm9yIHdoZW4gYXR0ZW1wdGluZyB0byBleGVjdXRlIHRoZSBwcm9jZXNzICcke3RoaXMudG9vbFBhdGh9Jy4gVGhpcyBtYXkgaW5kaWNhdGUgdGhlIHByb2Nlc3MgZmFpbGVkIHRvIHN0YXJ0LiBFcnJvcjogJHt0aGlzLnByb2Nlc3NFcnJvcn1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMucHJvY2Vzc0V4aXRDb2RlICE9PSAwICYmICF0aGlzLm9wdGlvbnMuaWdub3JlUmV0dXJuQ29kZSkge1xuICAgICAgICAgICAgICAgIGVycm9yID0gbmV3IEVycm9yKGBUaGUgcHJvY2VzcyAnJHt0aGlzLnRvb2xQYXRofScgZmFpbGVkIHdpdGggZXhpdCBjb2RlICR7dGhpcy5wcm9jZXNzRXhpdENvZGV9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLnByb2Nlc3NTdGRlcnIgJiYgdGhpcy5vcHRpb25zLmZhaWxPblN0ZEVycikge1xuICAgICAgICAgICAgICAgIGVycm9yID0gbmV3IEVycm9yKGBUaGUgcHJvY2VzcyAnJHt0aGlzLnRvb2xQYXRofScgZmFpbGVkIGJlY2F1c2Ugb25lIG9yIG1vcmUgbGluZXMgd2VyZSB3cml0dGVuIHRvIHRoZSBTVERFUlIgc3RyZWFtYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gY2xlYXIgdGhlIHRpbWVvdXRcbiAgICAgICAgaWYgKHRoaXMudGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7XG4gICAgICAgICAgICB0aGlzLnRpbWVvdXQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG4gICAgICAgIHRoaXMuZW1pdCgnZG9uZScsIGVycm9yLCB0aGlzLnByb2Nlc3NFeGl0Q29kZSk7XG4gICAgfVxuICAgIHN0YXRpYyBIYW5kbGVUaW1lb3V0KHN0YXRlKSB7XG4gICAgICAgIGlmIChzdGF0ZS5kb25lKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzdGF0ZS5wcm9jZXNzQ2xvc2VkICYmIHN0YXRlLnByb2Nlc3NFeGl0ZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgVGhlIFNURElPIHN0cmVhbXMgZGlkIG5vdCBjbG9zZSB3aXRoaW4gJHtzdGF0ZS5kZWxheSAvXG4gICAgICAgICAgICAgICAgMTAwMH0gc2Vjb25kcyBvZiB0aGUgZXhpdCBldmVudCBmcm9tIHByb2Nlc3MgJyR7c3RhdGUudG9vbFBhdGh9Jy4gVGhpcyBtYXkgaW5kaWNhdGUgYSBjaGlsZCBwcm9jZXNzIGluaGVyaXRlZCB0aGUgU1RESU8gc3RyZWFtcyBhbmQgaGFzIG5vdCB5ZXQgZXhpdGVkLmA7XG4gICAgICAgICAgICBzdGF0ZS5fZGVidWcobWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUuX3NldFJlc3VsdCgpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRvb2xydW5uZXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9KTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0RXhlY091dHB1dCA9IGV4cG9ydHMuZXhlYyA9IHZvaWQgMDtcbmNvbnN0IHN0cmluZ19kZWNvZGVyXzEgPSByZXF1aXJlKFwic3RyaW5nX2RlY29kZXJcIik7XG5jb25zdCB0ciA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiLi90b29scnVubmVyXCIpKTtcbi8qKlxuICogRXhlYyBhIGNvbW1hbmQuXG4gKiBPdXRwdXQgd2lsbCBiZSBzdHJlYW1lZCB0byB0aGUgbGl2ZSBjb25zb2xlLlxuICogUmV0dXJucyBwcm9taXNlIHdpdGggcmV0dXJuIGNvZGVcbiAqXG4gKiBAcGFyYW0gICAgIGNvbW1hbmRMaW5lICAgICAgICBjb21tYW5kIHRvIGV4ZWN1dGUgKGNhbiBpbmNsdWRlIGFkZGl0aW9uYWwgYXJncykuIE11c3QgYmUgY29ycmVjdGx5IGVzY2FwZWQuXG4gKiBAcGFyYW0gICAgIGFyZ3MgICAgICAgICAgICAgICBvcHRpb25hbCBhcmd1bWVudHMgZm9yIHRvb2wuIEVzY2FwaW5nIGlzIGhhbmRsZWQgYnkgdGhlIGxpYi5cbiAqIEBwYXJhbSAgICAgb3B0aW9ucyAgICAgICAgICAgIG9wdGlvbmFsIGV4ZWMgb3B0aW9ucy4gIFNlZSBFeGVjT3B0aW9uc1xuICogQHJldHVybnMgICBQcm9taXNlPG51bWJlcj4gICAgZXhpdCBjb2RlXG4gKi9cbmZ1bmN0aW9uIGV4ZWMoY29tbWFuZExpbmUsIGFyZ3MsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBjb21tYW5kQXJncyA9IHRyLmFyZ1N0cmluZ1RvQXJyYXkoY29tbWFuZExpbmUpO1xuICAgICAgICBpZiAoY29tbWFuZEFyZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFBhcmFtZXRlciAnY29tbWFuZExpbmUnIGNhbm5vdCBiZSBudWxsIG9yIGVtcHR5LmApO1xuICAgICAgICB9XG4gICAgICAgIC8vIFBhdGggdG8gdG9vbCB0byBleGVjdXRlIHNob3VsZCBiZSBmaXJzdCBhcmdcbiAgICAgICAgY29uc3QgdG9vbFBhdGggPSBjb21tYW5kQXJnc1swXTtcbiAgICAgICAgYXJncyA9IGNvbW1hbmRBcmdzLnNsaWNlKDEpLmNvbmNhdChhcmdzIHx8IFtdKTtcbiAgICAgICAgY29uc3QgcnVubmVyID0gbmV3IHRyLlRvb2xSdW5uZXIodG9vbFBhdGgsIGFyZ3MsIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gcnVubmVyLmV4ZWMoKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZXhlYyA9IGV4ZWM7XG4vKipcbiAqIEV4ZWMgYSBjb21tYW5kIGFuZCBnZXQgdGhlIG91dHB1dC5cbiAqIE91dHB1dCB3aWxsIGJlIHN0cmVhbWVkIHRvIHRoZSBsaXZlIGNvbnNvbGUuXG4gKiBSZXR1cm5zIHByb21pc2Ugd2l0aCB0aGUgZXhpdCBjb2RlIGFuZCBjb2xsZWN0ZWQgc3Rkb3V0IGFuZCBzdGRlcnJcbiAqXG4gKiBAcGFyYW0gICAgIGNvbW1hbmRMaW5lICAgICAgICAgICBjb21tYW5kIHRvIGV4ZWN1dGUgKGNhbiBpbmNsdWRlIGFkZGl0aW9uYWwgYXJncykuIE11c3QgYmUgY29ycmVjdGx5IGVzY2FwZWQuXG4gKiBAcGFyYW0gICAgIGFyZ3MgICAgICAgICAgICAgICAgICBvcHRpb25hbCBhcmd1bWVudHMgZm9yIHRvb2wuIEVzY2FwaW5nIGlzIGhhbmRsZWQgYnkgdGhlIGxpYi5cbiAqIEBwYXJhbSAgICAgb3B0aW9ucyAgICAgICAgICAgICAgIG9wdGlvbmFsIGV4ZWMgb3B0aW9ucy4gIFNlZSBFeGVjT3B0aW9uc1xuICogQHJldHVybnMgICBQcm9taXNlPEV4ZWNPdXRwdXQ+ICAgZXhpdCBjb2RlLCBzdGRvdXQsIGFuZCBzdGRlcnJcbiAqL1xuZnVuY3Rpb24gZ2V0RXhlY091dHB1dChjb21tYW5kTGluZSwgYXJncywgb3B0aW9ucykge1xuICAgIHZhciBfYSwgX2I7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgbGV0IHN0ZG91dCA9ICcnO1xuICAgICAgICBsZXQgc3RkZXJyID0gJyc7XG4gICAgICAgIC8vVXNpbmcgc3RyaW5nIGRlY29kZXIgY292ZXJzIHRoZSBjYXNlIHdoZXJlIGEgbXVsdC1ieXRlIGNoYXJhY3RlciBpcyBzcGxpdFxuICAgICAgICBjb25zdCBzdGRvdXREZWNvZGVyID0gbmV3IHN0cmluZ19kZWNvZGVyXzEuU3RyaW5nRGVjb2RlcigndXRmOCcpO1xuICAgICAgICBjb25zdCBzdGRlcnJEZWNvZGVyID0gbmV3IHN0cmluZ19kZWNvZGVyXzEuU3RyaW5nRGVjb2RlcigndXRmOCcpO1xuICAgICAgICBjb25zdCBvcmlnaW5hbFN0ZG91dExpc3RlbmVyID0gKF9hID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmxpc3RlbmVycykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN0ZG91dDtcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxTdGRFcnJMaXN0ZW5lciA9IChfYiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5saXN0ZW5lcnMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5zdGRlcnI7XG4gICAgICAgIGNvbnN0IHN0ZEVyckxpc3RlbmVyID0gKGRhdGEpID0+IHtcbiAgICAgICAgICAgIHN0ZGVyciArPSBzdGRlcnJEZWNvZGVyLndyaXRlKGRhdGEpO1xuICAgICAgICAgICAgaWYgKG9yaWdpbmFsU3RkRXJyTGlzdGVuZXIpIHtcbiAgICAgICAgICAgICAgICBvcmlnaW5hbFN0ZEVyckxpc3RlbmVyKGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBzdGRPdXRMaXN0ZW5lciA9IChkYXRhKSA9PiB7XG4gICAgICAgICAgICBzdGRvdXQgKz0gc3Rkb3V0RGVjb2Rlci53cml0ZShkYXRhKTtcbiAgICAgICAgICAgIGlmIChvcmlnaW5hbFN0ZG91dExpc3RlbmVyKSB7XG4gICAgICAgICAgICAgICAgb3JpZ2luYWxTdGRvdXRMaXN0ZW5lcihkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMubGlzdGVuZXJzKSwgeyBzdGRvdXQ6IHN0ZE91dExpc3RlbmVyLCBzdGRlcnI6IHN0ZEVyckxpc3RlbmVyIH0pO1xuICAgICAgICBjb25zdCBleGl0Q29kZSA9IHlpZWxkIGV4ZWMoY29tbWFuZExpbmUsIGFyZ3MsIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyksIHsgbGlzdGVuZXJzIH0pKTtcbiAgICAgICAgLy9mbHVzaCBhbnkgcmVtYWluaW5nIGNoYXJhY3RlcnNcbiAgICAgICAgc3Rkb3V0ICs9IHN0ZG91dERlY29kZXIuZW5kKCk7XG4gICAgICAgIHN0ZGVyciArPSBzdGRlcnJEZWNvZGVyLmVuZCgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZXhpdENvZGUsXG4gICAgICAgICAgICBzdGRvdXQsXG4gICAgICAgICAgICBzdGRlcnJcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZ2V0RXhlY091dHB1dCA9IGdldEV4ZWNPdXRwdXQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1leGVjLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBXZSB1c2UgYW55IGFzIGEgdmFsaWQgaW5wdXQgdHlwZVxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50b0NvbW1hbmRQcm9wZXJ0aWVzID0gZXhwb3J0cy50b0NvbW1hbmRWYWx1ZSA9IHZvaWQgMDtcbi8qKlxuICogU2FuaXRpemVzIGFuIGlucHV0IGludG8gYSBzdHJpbmcgc28gaXQgY2FuIGJlIHBhc3NlZCBpbnRvIGlzc3VlQ29tbWFuZCBzYWZlbHlcbiAqIEBwYXJhbSBpbnB1dCBpbnB1dCB0byBzYW5pdGl6ZSBpbnRvIGEgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIHRvQ29tbWFuZFZhbHVlKGlucHV0KSB7XG4gICAgaWYgKGlucHV0ID09PSBudWxsIHx8IGlucHV0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnIHx8IGlucHV0IGluc3RhbmNlb2YgU3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBpbnB1dDtcbiAgICB9XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGlucHV0KTtcbn1cbmV4cG9ydHMudG9Db21tYW5kVmFsdWUgPSB0b0NvbW1hbmRWYWx1ZTtcbi8qKlxuICpcbiAqIEBwYXJhbSBhbm5vdGF0aW9uUHJvcGVydGllc1xuICogQHJldHVybnMgVGhlIGNvbW1hbmQgcHJvcGVydGllcyB0byBzZW5kIHdpdGggdGhlIGFjdHVhbCBhbm5vdGF0aW9uIGNvbW1hbmRcbiAqIFNlZSBJc3N1ZUNvbW1hbmRQcm9wZXJ0aWVzOiBodHRwczovL2dpdGh1Yi5jb20vYWN0aW9ucy9ydW5uZXIvYmxvYi9tYWluL3NyYy9SdW5uZXIuV29ya2VyL0FjdGlvbkNvbW1hbmRNYW5hZ2VyLmNzI0w2NDZcbiAqL1xuZnVuY3Rpb24gdG9Db21tYW5kUHJvcGVydGllcyhhbm5vdGF0aW9uUHJvcGVydGllcykge1xuICAgIGlmICghT2JqZWN0LmtleXMoYW5ub3RhdGlvblByb3BlcnRpZXMpLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHRpdGxlOiBhbm5vdGF0aW9uUHJvcGVydGllcy50aXRsZSxcbiAgICAgICAgZmlsZTogYW5ub3RhdGlvblByb3BlcnRpZXMuZmlsZSxcbiAgICAgICAgbGluZTogYW5ub3RhdGlvblByb3BlcnRpZXMuc3RhcnRMaW5lLFxuICAgICAgICBlbmRMaW5lOiBhbm5vdGF0aW9uUHJvcGVydGllcy5lbmRMaW5lLFxuICAgICAgICBjb2w6IGFubm90YXRpb25Qcm9wZXJ0aWVzLnN0YXJ0Q29sdW1uLFxuICAgICAgICBlbmRDb2x1bW46IGFubm90YXRpb25Qcm9wZXJ0aWVzLmVuZENvbHVtblxuICAgIH07XG59XG5leHBvcnRzLnRvQ29tbWFuZFByb3BlcnRpZXMgPSB0b0NvbW1hbmRQcm9wZXJ0aWVzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbHMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc3N1ZSA9IGV4cG9ydHMuaXNzdWVDb21tYW5kID0gdm9pZCAwO1xuY29uc3Qgb3MgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIm9zXCIpKTtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi91dGlsc1wiKTtcbi8qKlxuICogQ29tbWFuZHNcbiAqXG4gKiBDb21tYW5kIEZvcm1hdDpcbiAqICAgOjpuYW1lIGtleT12YWx1ZSxrZXk9dmFsdWU6Om1lc3NhZ2VcbiAqXG4gKiBFeGFtcGxlczpcbiAqICAgOjp3YXJuaW5nOjpUaGlzIGlzIHRoZSBtZXNzYWdlXG4gKiAgIDo6c2V0LWVudiBuYW1lPU1ZX1ZBUjo6c29tZSB2YWx1ZVxuICovXG5mdW5jdGlvbiBpc3N1ZUNvbW1hbmQoY29tbWFuZCwgcHJvcGVydGllcywgbWVzc2FnZSkge1xuICAgIGNvbnN0IGNtZCA9IG5ldyBDb21tYW5kKGNvbW1hbmQsIHByb3BlcnRpZXMsIG1lc3NhZ2UpO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGNtZC50b1N0cmluZygpICsgb3MuRU9MKTtcbn1cbmV4cG9ydHMuaXNzdWVDb21tYW5kID0gaXNzdWVDb21tYW5kO1xuZnVuY3Rpb24gaXNzdWUobmFtZSwgbWVzc2FnZSA9ICcnKSB7XG4gICAgaXNzdWVDb21tYW5kKG5hbWUsIHt9LCBtZXNzYWdlKTtcbn1cbmV4cG9ydHMuaXNzdWUgPSBpc3N1ZTtcbmNvbnN0IENNRF9TVFJJTkcgPSAnOjonO1xuY2xhc3MgQ29tbWFuZCB7XG4gICAgY29uc3RydWN0b3IoY29tbWFuZCwgcHJvcGVydGllcywgbWVzc2FnZSkge1xuICAgICAgICBpZiAoIWNvbW1hbmQpIHtcbiAgICAgICAgICAgIGNvbW1hbmQgPSAnbWlzc2luZy5jb21tYW5kJztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbW1hbmQgPSBjb21tYW5kO1xuICAgICAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIH1cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgbGV0IGNtZFN0ciA9IENNRF9TVFJJTkcgKyB0aGlzLmNvbW1hbmQ7XG4gICAgICAgIGlmICh0aGlzLnByb3BlcnRpZXMgJiYgT2JqZWN0LmtleXModGhpcy5wcm9wZXJ0aWVzKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjbWRTdHIgKz0gJyAnO1xuICAgICAgICAgICAgbGV0IGZpcnN0ID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMucHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWwgPSB0aGlzLnByb3BlcnRpZXNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZFN0ciArPSAnLCc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjbWRTdHIgKz0gYCR7a2V5fT0ke2VzY2FwZVByb3BlcnR5KHZhbCl9YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjbWRTdHIgKz0gYCR7Q01EX1NUUklOR30ke2VzY2FwZURhdGEodGhpcy5tZXNzYWdlKX1gO1xuICAgICAgICByZXR1cm4gY21kU3RyO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGVzY2FwZURhdGEocykge1xuICAgIHJldHVybiAoMCwgdXRpbHNfMS50b0NvbW1hbmRWYWx1ZSkocylcbiAgICAgICAgLnJlcGxhY2UoLyUvZywgJyUyNScpXG4gICAgICAgIC5yZXBsYWNlKC9cXHIvZywgJyUwRCcpXG4gICAgICAgIC5yZXBsYWNlKC9cXG4vZywgJyUwQScpO1xufVxuZnVuY3Rpb24gZXNjYXBlUHJvcGVydHkocykge1xuICAgIHJldHVybiAoMCwgdXRpbHNfMS50b0NvbW1hbmRWYWx1ZSkocylcbiAgICAgICAgLnJlcGxhY2UoLyUvZywgJyUyNScpXG4gICAgICAgIC5yZXBsYWNlKC9cXHIvZywgJyUwRCcpXG4gICAgICAgIC5yZXBsYWNlKC9cXG4vZywgJyUwQScpXG4gICAgICAgIC5yZXBsYWNlKC86L2csICclM0EnKVxuICAgICAgICAucmVwbGFjZSgvLC9nLCAnJTJDJyk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb21tYW5kLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBGb3IgaW50ZXJuYWwgdXNlLCBzdWJqZWN0IHRvIGNoYW5nZS5cbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5wcmVwYXJlS2V5VmFsdWVNZXNzYWdlID0gZXhwb3J0cy5pc3N1ZUZpbGVDb21tYW5kID0gdm9pZCAwO1xuLy8gV2UgdXNlIGFueSBhcyBhIHZhbGlkIGlucHV0IHR5cGVcbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmNvbnN0IGNyeXB0byA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiY3J5cHRvXCIpKTtcbmNvbnN0IGZzID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJmc1wiKSk7XG5jb25zdCBvcyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwib3NcIikpO1xuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoXCIuL3V0aWxzXCIpO1xuZnVuY3Rpb24gaXNzdWVGaWxlQ29tbWFuZChjb21tYW5kLCBtZXNzYWdlKSB7XG4gICAgY29uc3QgZmlsZVBhdGggPSBwcm9jZXNzLmVudltgR0lUSFVCXyR7Y29tbWFuZH1gXTtcbiAgICBpZiAoIWZpbGVQYXRoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGZpbmQgZW52aXJvbm1lbnQgdmFyaWFibGUgZm9yIGZpbGUgY29tbWFuZCAke2NvbW1hbmR9YCk7XG4gICAgfVxuICAgIGlmICghZnMuZXhpc3RzU3luYyhmaWxlUGF0aCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIGZpbGUgYXQgcGF0aDogJHtmaWxlUGF0aH1gKTtcbiAgICB9XG4gICAgZnMuYXBwZW5kRmlsZVN5bmMoZmlsZVBhdGgsIGAkeygwLCB1dGlsc18xLnRvQ29tbWFuZFZhbHVlKShtZXNzYWdlKX0ke29zLkVPTH1gLCB7XG4gICAgICAgIGVuY29kaW5nOiAndXRmOCdcbiAgICB9KTtcbn1cbmV4cG9ydHMuaXNzdWVGaWxlQ29tbWFuZCA9IGlzc3VlRmlsZUNvbW1hbmQ7XG5mdW5jdGlvbiBwcmVwYXJlS2V5VmFsdWVNZXNzYWdlKGtleSwgdmFsdWUpIHtcbiAgICBjb25zdCBkZWxpbWl0ZXIgPSBgZ2hhZGVsaW1pdGVyXyR7Y3J5cHRvLnJhbmRvbVVVSUQoKX1gO1xuICAgIGNvbnN0IGNvbnZlcnRlZFZhbHVlID0gKDAsIHV0aWxzXzEudG9Db21tYW5kVmFsdWUpKHZhbHVlKTtcbiAgICAvLyBUaGVzZSBzaG91bGQgcmVhbGlzdGljYWxseSBuZXZlciBoYXBwZW4sIGJ1dCBqdXN0IGluIGNhc2Ugc29tZW9uZSBmaW5kcyBhXG4gICAgLy8gd2F5IHRvIGV4cGxvaXQgdXVpZCBnZW5lcmF0aW9uIGxldCdzIG5vdCBhbGxvdyBrZXlzIG9yIHZhbHVlcyB0aGF0IGNvbnRhaW5cbiAgICAvLyB0aGUgZGVsaW1pdGVyLlxuICAgIGlmIChrZXkuaW5jbHVkZXMoZGVsaW1pdGVyKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgaW5wdXQ6IG5hbWUgc2hvdWxkIG5vdCBjb250YWluIHRoZSBkZWxpbWl0ZXIgXCIke2RlbGltaXRlcn1cImApO1xuICAgIH1cbiAgICBpZiAoY29udmVydGVkVmFsdWUuaW5jbHVkZXMoZGVsaW1pdGVyKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgaW5wdXQ6IHZhbHVlIHNob3VsZCBub3QgY29udGFpbiB0aGUgZGVsaW1pdGVyIFwiJHtkZWxpbWl0ZXJ9XCJgKTtcbiAgICB9XG4gICAgcmV0dXJuIGAke2tleX08PCR7ZGVsaW1pdGVyfSR7b3MuRU9MfSR7Y29udmVydGVkVmFsdWV9JHtvcy5FT0x9JHtkZWxpbWl0ZXJ9YDtcbn1cbmV4cG9ydHMucHJlcGFyZUtleVZhbHVlTWVzc2FnZSA9IHByZXBhcmVLZXlWYWx1ZU1lc3NhZ2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1maWxlLWNvbW1hbmQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY2hlY2tCeXBhc3MgPSBleHBvcnRzLmdldFByb3h5VXJsID0gdm9pZCAwO1xuZnVuY3Rpb24gZ2V0UHJveHlVcmwocmVxVXJsKSB7XG4gICAgY29uc3QgdXNpbmdTc2wgPSByZXFVcmwucHJvdG9jb2wgPT09ICdodHRwczonO1xuICAgIGlmIChjaGVja0J5cGFzcyhyZXFVcmwpKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IHByb3h5VmFyID0gKCgpID0+IHtcbiAgICAgICAgaWYgKHVzaW5nU3NsKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvY2Vzcy5lbnZbJ2h0dHBzX3Byb3h5J10gfHwgcHJvY2Vzcy5lbnZbJ0hUVFBTX1BST1hZJ107XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvY2Vzcy5lbnZbJ2h0dHBfcHJveHknXSB8fCBwcm9jZXNzLmVudlsnSFRUUF9QUk9YWSddO1xuICAgICAgICB9XG4gICAgfSkoKTtcbiAgICBpZiAocHJveHlWYXIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGVjb2RlZFVSTChwcm94eVZhcik7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgICAgICBpZiAoIXByb3h5VmFyLnN0YXJ0c1dpdGgoJ2h0dHA6Ly8nKSAmJiAhcHJveHlWYXIuc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERlY29kZWRVUkwoYGh0dHA6Ly8ke3Byb3h5VmFyfWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbn1cbmV4cG9ydHMuZ2V0UHJveHlVcmwgPSBnZXRQcm94eVVybDtcbmZ1bmN0aW9uIGNoZWNrQnlwYXNzKHJlcVVybCkge1xuICAgIGlmICghcmVxVXJsLmhvc3RuYW1lKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgcmVxSG9zdCA9IHJlcVVybC5ob3N0bmFtZTtcbiAgICBpZiAoaXNMb29wYmFja0FkZHJlc3MocmVxSG9zdCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IG5vUHJveHkgPSBwcm9jZXNzLmVudlsnbm9fcHJveHknXSB8fCBwcm9jZXNzLmVudlsnTk9fUFJPWFknXSB8fCAnJztcbiAgICBpZiAoIW5vUHJveHkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBEZXRlcm1pbmUgdGhlIHJlcXVlc3QgcG9ydFxuICAgIGxldCByZXFQb3J0O1xuICAgIGlmIChyZXFVcmwucG9ydCkge1xuICAgICAgICByZXFQb3J0ID0gTnVtYmVyKHJlcVVybC5wb3J0KTtcbiAgICB9XG4gICAgZWxzZSBpZiAocmVxVXJsLnByb3RvY29sID09PSAnaHR0cDonKSB7XG4gICAgICAgIHJlcVBvcnQgPSA4MDtcbiAgICB9XG4gICAgZWxzZSBpZiAocmVxVXJsLnByb3RvY29sID09PSAnaHR0cHM6Jykge1xuICAgICAgICByZXFQb3J0ID0gNDQzO1xuICAgIH1cbiAgICAvLyBGb3JtYXQgdGhlIHJlcXVlc3QgaG9zdG5hbWUgYW5kIGhvc3RuYW1lIHdpdGggcG9ydFxuICAgIGNvbnN0IHVwcGVyUmVxSG9zdHMgPSBbcmVxVXJsLmhvc3RuYW1lLnRvVXBwZXJDYXNlKCldO1xuICAgIGlmICh0eXBlb2YgcmVxUG9ydCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgdXBwZXJSZXFIb3N0cy5wdXNoKGAke3VwcGVyUmVxSG9zdHNbMF19OiR7cmVxUG9ydH1gKTtcbiAgICB9XG4gICAgLy8gQ29tcGFyZSByZXF1ZXN0IGhvc3QgYWdhaW5zdCBub3Byb3h5XG4gICAgZm9yIChjb25zdCB1cHBlck5vUHJveHlJdGVtIG9mIG5vUHJveHlcbiAgICAgICAgLnNwbGl0KCcsJylcbiAgICAgICAgLm1hcCh4ID0+IHgudHJpbSgpLnRvVXBwZXJDYXNlKCkpXG4gICAgICAgIC5maWx0ZXIoeCA9PiB4KSkge1xuICAgICAgICBpZiAodXBwZXJOb1Byb3h5SXRlbSA9PT0gJyonIHx8XG4gICAgICAgICAgICB1cHBlclJlcUhvc3RzLnNvbWUoeCA9PiB4ID09PSB1cHBlck5vUHJveHlJdGVtIHx8XG4gICAgICAgICAgICAgICAgeC5lbmRzV2l0aChgLiR7dXBwZXJOb1Byb3h5SXRlbX1gKSB8fFxuICAgICAgICAgICAgICAgICh1cHBlck5vUHJveHlJdGVtLnN0YXJ0c1dpdGgoJy4nKSAmJlxuICAgICAgICAgICAgICAgICAgICB4LmVuZHNXaXRoKGAke3VwcGVyTm9Qcm94eUl0ZW19YCkpKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZXhwb3J0cy5jaGVja0J5cGFzcyA9IGNoZWNrQnlwYXNzO1xuZnVuY3Rpb24gaXNMb29wYmFja0FkZHJlc3MoaG9zdCkge1xuICAgIGNvbnN0IGhvc3RMb3dlciA9IGhvc3QudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gKGhvc3RMb3dlciA9PT0gJ2xvY2FsaG9zdCcgfHxcbiAgICAgICAgaG9zdExvd2VyLnN0YXJ0c1dpdGgoJzEyNy4nKSB8fFxuICAgICAgICBob3N0TG93ZXIuc3RhcnRzV2l0aCgnWzo6MV0nKSB8fFxuICAgICAgICBob3N0TG93ZXIuc3RhcnRzV2l0aCgnWzA6MDowOjA6MDowOjA6MV0nKSk7XG59XG5jbGFzcyBEZWNvZGVkVVJMIGV4dGVuZHMgVVJMIHtcbiAgICBjb25zdHJ1Y3Rvcih1cmwsIGJhc2UpIHtcbiAgICAgICAgc3VwZXIodXJsLCBiYXNlKTtcbiAgICAgICAgdGhpcy5fZGVjb2RlZFVzZXJuYW1lID0gZGVjb2RlVVJJQ29tcG9uZW50KHN1cGVyLnVzZXJuYW1lKTtcbiAgICAgICAgdGhpcy5fZGVjb2RlZFBhc3N3b3JkID0gZGVjb2RlVVJJQ29tcG9uZW50KHN1cGVyLnBhc3N3b3JkKTtcbiAgICB9XG4gICAgZ2V0IHVzZXJuYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVjb2RlZFVzZXJuYW1lO1xuICAgIH1cbiAgICBnZXQgcGFzc3dvcmQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWNvZGVkUGFzc3dvcmQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cHJveHkuanMubWFwIiwKICAgICIndXNlIHN0cmljdCc7XG5cbnZhciBuZXQgPSByZXF1aXJlKCduZXQnKTtcbnZhciB0bHMgPSByZXF1aXJlKCd0bHMnKTtcbnZhciBodHRwID0gcmVxdWlyZSgnaHR0cCcpO1xudmFyIGh0dHBzID0gcmVxdWlyZSgnaHR0cHMnKTtcbnZhciBldmVudHMgPSByZXF1aXJlKCdldmVudHMnKTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKTtcbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuXG5cbmV4cG9ydHMuaHR0cE92ZXJIdHRwID0gaHR0cE92ZXJIdHRwO1xuZXhwb3J0cy5odHRwc092ZXJIdHRwID0gaHR0cHNPdmVySHR0cDtcbmV4cG9ydHMuaHR0cE92ZXJIdHRwcyA9IGh0dHBPdmVySHR0cHM7XG5leHBvcnRzLmh0dHBzT3Zlckh0dHBzID0gaHR0cHNPdmVySHR0cHM7XG5cblxuZnVuY3Rpb24gaHR0cE92ZXJIdHRwKG9wdGlvbnMpIHtcbiAgdmFyIGFnZW50ID0gbmV3IFR1bm5lbGluZ0FnZW50KG9wdGlvbnMpO1xuICBhZ2VudC5yZXF1ZXN0ID0gaHR0cC5yZXF1ZXN0O1xuICByZXR1cm4gYWdlbnQ7XG59XG5cbmZ1bmN0aW9uIGh0dHBzT3Zlckh0dHAob3B0aW9ucykge1xuICB2YXIgYWdlbnQgPSBuZXcgVHVubmVsaW5nQWdlbnQob3B0aW9ucyk7XG4gIGFnZW50LnJlcXVlc3QgPSBodHRwLnJlcXVlc3Q7XG4gIGFnZW50LmNyZWF0ZVNvY2tldCA9IGNyZWF0ZVNlY3VyZVNvY2tldDtcbiAgYWdlbnQuZGVmYXVsdFBvcnQgPSA0NDM7XG4gIHJldHVybiBhZ2VudDtcbn1cblxuZnVuY3Rpb24gaHR0cE92ZXJIdHRwcyhvcHRpb25zKSB7XG4gIHZhciBhZ2VudCA9IG5ldyBUdW5uZWxpbmdBZ2VudChvcHRpb25zKTtcbiAgYWdlbnQucmVxdWVzdCA9IGh0dHBzLnJlcXVlc3Q7XG4gIHJldHVybiBhZ2VudDtcbn1cblxuZnVuY3Rpb24gaHR0cHNPdmVySHR0cHMob3B0aW9ucykge1xuICB2YXIgYWdlbnQgPSBuZXcgVHVubmVsaW5nQWdlbnQob3B0aW9ucyk7XG4gIGFnZW50LnJlcXVlc3QgPSBodHRwcy5yZXF1ZXN0O1xuICBhZ2VudC5jcmVhdGVTb2NrZXQgPSBjcmVhdGVTZWN1cmVTb2NrZXQ7XG4gIGFnZW50LmRlZmF1bHRQb3J0ID0gNDQzO1xuICByZXR1cm4gYWdlbnQ7XG59XG5cblxuZnVuY3Rpb24gVHVubmVsaW5nQWdlbnQob3B0aW9ucykge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHNlbGYub3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIHNlbGYucHJveHlPcHRpb25zID0gc2VsZi5vcHRpb25zLnByb3h5IHx8IHt9O1xuICBzZWxmLm1heFNvY2tldHMgPSBzZWxmLm9wdGlvbnMubWF4U29ja2V0cyB8fCBodHRwLkFnZW50LmRlZmF1bHRNYXhTb2NrZXRzO1xuICBzZWxmLnJlcXVlc3RzID0gW107XG4gIHNlbGYuc29ja2V0cyA9IFtdO1xuXG4gIHNlbGYub24oJ2ZyZWUnLCBmdW5jdGlvbiBvbkZyZWUoc29ja2V0LCBob3N0LCBwb3J0LCBsb2NhbEFkZHJlc3MpIHtcbiAgICB2YXIgb3B0aW9ucyA9IHRvT3B0aW9ucyhob3N0LCBwb3J0LCBsb2NhbEFkZHJlc3MpO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBzZWxmLnJlcXVlc3RzLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICB2YXIgcGVuZGluZyA9IHNlbGYucmVxdWVzdHNbaV07XG4gICAgICBpZiAocGVuZGluZy5ob3N0ID09PSBvcHRpb25zLmhvc3QgJiYgcGVuZGluZy5wb3J0ID09PSBvcHRpb25zLnBvcnQpIHtcbiAgICAgICAgLy8gRGV0ZWN0IHRoZSByZXF1ZXN0IHRvIGNvbm5lY3Qgc2FtZSBvcmlnaW4gc2VydmVyLFxuICAgICAgICAvLyByZXVzZSB0aGUgY29ubmVjdGlvbi5cbiAgICAgICAgc2VsZi5yZXF1ZXN0cy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIHBlbmRpbmcucmVxdWVzdC5vblNvY2tldChzb2NrZXQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIHNvY2tldC5kZXN0cm95KCk7XG4gICAgc2VsZi5yZW1vdmVTb2NrZXQoc29ja2V0KTtcbiAgfSk7XG59XG51dGlsLmluaGVyaXRzKFR1bm5lbGluZ0FnZW50LCBldmVudHMuRXZlbnRFbWl0dGVyKTtcblxuVHVubmVsaW5nQWdlbnQucHJvdG90eXBlLmFkZFJlcXVlc3QgPSBmdW5jdGlvbiBhZGRSZXF1ZXN0KHJlcSwgaG9zdCwgcG9ydCwgbG9jYWxBZGRyZXNzKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIG9wdGlvbnMgPSBtZXJnZU9wdGlvbnMoe3JlcXVlc3Q6IHJlcX0sIHNlbGYub3B0aW9ucywgdG9PcHRpb25zKGhvc3QsIHBvcnQsIGxvY2FsQWRkcmVzcykpO1xuXG4gIGlmIChzZWxmLnNvY2tldHMubGVuZ3RoID49IHRoaXMubWF4U29ja2V0cykge1xuICAgIC8vIFdlIGFyZSBvdmVyIGxpbWl0IHNvIHdlJ2xsIGFkZCBpdCB0byB0aGUgcXVldWUuXG4gICAgc2VsZi5yZXF1ZXN0cy5wdXNoKG9wdGlvbnMpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIElmIHdlIGFyZSB1bmRlciBtYXhTb2NrZXRzIGNyZWF0ZSBhIG5ldyBvbmUuXG4gIHNlbGYuY3JlYXRlU29ja2V0KG9wdGlvbnMsIGZ1bmN0aW9uKHNvY2tldCkge1xuICAgIHNvY2tldC5vbignZnJlZScsIG9uRnJlZSk7XG4gICAgc29ja2V0Lm9uKCdjbG9zZScsIG9uQ2xvc2VPclJlbW92ZSk7XG4gICAgc29ja2V0Lm9uKCdhZ2VudFJlbW92ZScsIG9uQ2xvc2VPclJlbW92ZSk7XG4gICAgcmVxLm9uU29ja2V0KHNvY2tldCk7XG5cbiAgICBmdW5jdGlvbiBvbkZyZWUoKSB7XG4gICAgICBzZWxmLmVtaXQoJ2ZyZWUnLCBzb2NrZXQsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9uQ2xvc2VPclJlbW92ZShlcnIpIHtcbiAgICAgIHNlbGYucmVtb3ZlU29ja2V0KHNvY2tldCk7XG4gICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ2ZyZWUnLCBvbkZyZWUpO1xuICAgICAgc29ja2V0LnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uQ2xvc2VPclJlbW92ZSk7XG4gICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ2FnZW50UmVtb3ZlJywgb25DbG9zZU9yUmVtb3ZlKTtcbiAgICB9XG4gIH0pO1xufTtcblxuVHVubmVsaW5nQWdlbnQucHJvdG90eXBlLmNyZWF0ZVNvY2tldCA9IGZ1bmN0aW9uIGNyZWF0ZVNvY2tldChvcHRpb25zLCBjYikge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciBwbGFjZWhvbGRlciA9IHt9O1xuICBzZWxmLnNvY2tldHMucHVzaChwbGFjZWhvbGRlcik7XG5cbiAgdmFyIGNvbm5lY3RPcHRpb25zID0gbWVyZ2VPcHRpb25zKHt9LCBzZWxmLnByb3h5T3B0aW9ucywge1xuICAgIG1ldGhvZDogJ0NPTk5FQ1QnLFxuICAgIHBhdGg6IG9wdGlvbnMuaG9zdCArICc6JyArIG9wdGlvbnMucG9ydCxcbiAgICBhZ2VudDogZmFsc2UsXG4gICAgaGVhZGVyczoge1xuICAgICAgaG9zdDogb3B0aW9ucy5ob3N0ICsgJzonICsgb3B0aW9ucy5wb3J0XG4gICAgfVxuICB9KTtcbiAgaWYgKG9wdGlvbnMubG9jYWxBZGRyZXNzKSB7XG4gICAgY29ubmVjdE9wdGlvbnMubG9jYWxBZGRyZXNzID0gb3B0aW9ucy5sb2NhbEFkZHJlc3M7XG4gIH1cbiAgaWYgKGNvbm5lY3RPcHRpb25zLnByb3h5QXV0aCkge1xuICAgIGNvbm5lY3RPcHRpb25zLmhlYWRlcnMgPSBjb25uZWN0T3B0aW9ucy5oZWFkZXJzIHx8IHt9O1xuICAgIGNvbm5lY3RPcHRpb25zLmhlYWRlcnNbJ1Byb3h5LUF1dGhvcml6YXRpb24nXSA9ICdCYXNpYyAnICtcbiAgICAgICAgbmV3IEJ1ZmZlcihjb25uZWN0T3B0aW9ucy5wcm94eUF1dGgpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgfVxuXG4gIGRlYnVnKCdtYWtpbmcgQ09OTkVDVCByZXF1ZXN0Jyk7XG4gIHZhciBjb25uZWN0UmVxID0gc2VsZi5yZXF1ZXN0KGNvbm5lY3RPcHRpb25zKTtcbiAgY29ubmVjdFJlcS51c2VDaHVua2VkRW5jb2RpbmdCeURlZmF1bHQgPSBmYWxzZTsgLy8gZm9yIHYwLjZcbiAgY29ubmVjdFJlcS5vbmNlKCdyZXNwb25zZScsIG9uUmVzcG9uc2UpOyAvLyBmb3IgdjAuNlxuICBjb25uZWN0UmVxLm9uY2UoJ3VwZ3JhZGUnLCBvblVwZ3JhZGUpOyAgIC8vIGZvciB2MC42XG4gIGNvbm5lY3RSZXEub25jZSgnY29ubmVjdCcsIG9uQ29ubmVjdCk7ICAgLy8gZm9yIHYwLjcgb3IgbGF0ZXJcbiAgY29ubmVjdFJlcS5vbmNlKCdlcnJvcicsIG9uRXJyb3IpO1xuICBjb25uZWN0UmVxLmVuZCgpO1xuXG4gIGZ1bmN0aW9uIG9uUmVzcG9uc2UocmVzKSB7XG4gICAgLy8gVmVyeSBoYWNreS4gVGhpcyBpcyBuZWNlc3NhcnkgdG8gYXZvaWQgaHR0cC1wYXJzZXIgbGVha3MuXG4gICAgcmVzLnVwZ3JhZGUgPSB0cnVlO1xuICB9XG5cbiAgZnVuY3Rpb24gb25VcGdyYWRlKHJlcywgc29ja2V0LCBoZWFkKSB7XG4gICAgLy8gSGFja3kuXG4gICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbigpIHtcbiAgICAgIG9uQ29ubmVjdChyZXMsIHNvY2tldCwgaGVhZCk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBvbkNvbm5lY3QocmVzLCBzb2NrZXQsIGhlYWQpIHtcbiAgICBjb25uZWN0UmVxLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgIHNvY2tldC5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcblxuICAgIGlmIChyZXMuc3RhdHVzQ29kZSAhPT0gMjAwKSB7XG4gICAgICBkZWJ1ZygndHVubmVsaW5nIHNvY2tldCBjb3VsZCBub3QgYmUgZXN0YWJsaXNoZWQsIHN0YXR1c0NvZGU9JWQnLFxuICAgICAgICByZXMuc3RhdHVzQ29kZSk7XG4gICAgICBzb2NrZXQuZGVzdHJveSgpO1xuICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKCd0dW5uZWxpbmcgc29ja2V0IGNvdWxkIG5vdCBiZSBlc3RhYmxpc2hlZCwgJyArXG4gICAgICAgICdzdGF0dXNDb2RlPScgKyByZXMuc3RhdHVzQ29kZSk7XG4gICAgICBlcnJvci5jb2RlID0gJ0VDT05OUkVTRVQnO1xuICAgICAgb3B0aW9ucy5yZXF1ZXN0LmVtaXQoJ2Vycm9yJywgZXJyb3IpO1xuICAgICAgc2VsZi5yZW1vdmVTb2NrZXQocGxhY2Vob2xkZXIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaGVhZC5sZW5ndGggPiAwKSB7XG4gICAgICBkZWJ1ZygnZ290IGlsbGVnYWwgcmVzcG9uc2UgYm9keSBmcm9tIHByb3h5Jyk7XG4gICAgICBzb2NrZXQuZGVzdHJveSgpO1xuICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKCdnb3QgaWxsZWdhbCByZXNwb25zZSBib2R5IGZyb20gcHJveHknKTtcbiAgICAgIGVycm9yLmNvZGUgPSAnRUNPTk5SRVNFVCc7XG4gICAgICBvcHRpb25zLnJlcXVlc3QuZW1pdCgnZXJyb3InLCBlcnJvcik7XG4gICAgICBzZWxmLnJlbW92ZVNvY2tldChwbGFjZWhvbGRlcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGRlYnVnKCd0dW5uZWxpbmcgY29ubmVjdGlvbiBoYXMgZXN0YWJsaXNoZWQnKTtcbiAgICBzZWxmLnNvY2tldHNbc2VsZi5zb2NrZXRzLmluZGV4T2YocGxhY2Vob2xkZXIpXSA9IHNvY2tldDtcbiAgICByZXR1cm4gY2Ioc29ja2V0KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uRXJyb3IoY2F1c2UpIHtcbiAgICBjb25uZWN0UmVxLnJlbW92ZUFsbExpc3RlbmVycygpO1xuXG4gICAgZGVidWcoJ3R1bm5lbGluZyBzb2NrZXQgY291bGQgbm90IGJlIGVzdGFibGlzaGVkLCBjYXVzZT0lc1xcbicsXG4gICAgICAgICAgY2F1c2UubWVzc2FnZSwgY2F1c2Uuc3RhY2spO1xuICAgIHZhciBlcnJvciA9IG5ldyBFcnJvcigndHVubmVsaW5nIHNvY2tldCBjb3VsZCBub3QgYmUgZXN0YWJsaXNoZWQsICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnY2F1c2U9JyArIGNhdXNlLm1lc3NhZ2UpO1xuICAgIGVycm9yLmNvZGUgPSAnRUNPTk5SRVNFVCc7XG4gICAgb3B0aW9ucy5yZXF1ZXN0LmVtaXQoJ2Vycm9yJywgZXJyb3IpO1xuICAgIHNlbGYucmVtb3ZlU29ja2V0KHBsYWNlaG9sZGVyKTtcbiAgfVxufTtcblxuVHVubmVsaW5nQWdlbnQucHJvdG90eXBlLnJlbW92ZVNvY2tldCA9IGZ1bmN0aW9uIHJlbW92ZVNvY2tldChzb2NrZXQpIHtcbiAgdmFyIHBvcyA9IHRoaXMuc29ja2V0cy5pbmRleE9mKHNvY2tldClcbiAgaWYgKHBvcyA9PT0gLTEpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdGhpcy5zb2NrZXRzLnNwbGljZShwb3MsIDEpO1xuXG4gIHZhciBwZW5kaW5nID0gdGhpcy5yZXF1ZXN0cy5zaGlmdCgpO1xuICBpZiAocGVuZGluZykge1xuICAgIC8vIElmIHdlIGhhdmUgcGVuZGluZyByZXF1ZXN0cyBhbmQgYSBzb2NrZXQgZ2V0cyBjbG9zZWQgYSBuZXcgb25lXG4gICAgLy8gbmVlZHMgdG8gYmUgY3JlYXRlZCB0byB0YWtlIG92ZXIgaW4gdGhlIHBvb2wgZm9yIHRoZSBvbmUgdGhhdCBjbG9zZWQuXG4gICAgdGhpcy5jcmVhdGVTb2NrZXQocGVuZGluZywgZnVuY3Rpb24oc29ja2V0KSB7XG4gICAgICBwZW5kaW5nLnJlcXVlc3Qub25Tb2NrZXQoc29ja2V0KTtcbiAgICB9KTtcbiAgfVxufTtcblxuZnVuY3Rpb24gY3JlYXRlU2VjdXJlU29ja2V0KG9wdGlvbnMsIGNiKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgVHVubmVsaW5nQWdlbnQucHJvdG90eXBlLmNyZWF0ZVNvY2tldC5jYWxsKHNlbGYsIG9wdGlvbnMsIGZ1bmN0aW9uKHNvY2tldCkge1xuICAgIHZhciBob3N0SGVhZGVyID0gb3B0aW9ucy5yZXF1ZXN0LmdldEhlYWRlcignaG9zdCcpO1xuICAgIHZhciB0bHNPcHRpb25zID0gbWVyZ2VPcHRpb25zKHt9LCBzZWxmLm9wdGlvbnMsIHtcbiAgICAgIHNvY2tldDogc29ja2V0LFxuICAgICAgc2VydmVybmFtZTogaG9zdEhlYWRlciA/IGhvc3RIZWFkZXIucmVwbGFjZSgvOi4qJC8sICcnKSA6IG9wdGlvbnMuaG9zdFxuICAgIH0pO1xuXG4gICAgLy8gMCBpcyBkdW1teSBwb3J0IGZvciB2MC42XG4gICAgdmFyIHNlY3VyZVNvY2tldCA9IHRscy5jb25uZWN0KDAsIHRsc09wdGlvbnMpO1xuICAgIHNlbGYuc29ja2V0c1tzZWxmLnNvY2tldHMuaW5kZXhPZihzb2NrZXQpXSA9IHNlY3VyZVNvY2tldDtcbiAgICBjYihzZWN1cmVTb2NrZXQpO1xuICB9KTtcbn1cblxuXG5mdW5jdGlvbiB0b09wdGlvbnMoaG9zdCwgcG9ydCwgbG9jYWxBZGRyZXNzKSB7XG4gIGlmICh0eXBlb2YgaG9zdCA9PT0gJ3N0cmluZycpIHsgLy8gc2luY2UgdjAuMTBcbiAgICByZXR1cm4ge1xuICAgICAgaG9zdDogaG9zdCxcbiAgICAgIHBvcnQ6IHBvcnQsXG4gICAgICBsb2NhbEFkZHJlc3M6IGxvY2FsQWRkcmVzc1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIGhvc3Q7IC8vIGZvciB2MC4xMSBvciBsYXRlclxufVxuXG5mdW5jdGlvbiBtZXJnZU9wdGlvbnModGFyZ2V0KSB7XG4gIGZvciAodmFyIGkgPSAxLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICB2YXIgb3ZlcnJpZGVzID0gYXJndW1lbnRzW2ldO1xuICAgIGlmICh0eXBlb2Ygb3ZlcnJpZGVzID09PSAnb2JqZWN0Jykge1xuICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvdmVycmlkZXMpO1xuICAgICAgZm9yICh2YXIgaiA9IDAsIGtleUxlbiA9IGtleXMubGVuZ3RoOyBqIDwga2V5TGVuOyArK2opIHtcbiAgICAgICAgdmFyIGsgPSBrZXlzW2pdO1xuICAgICAgICBpZiAob3ZlcnJpZGVzW2tdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0YXJnZXRba10gPSBvdmVycmlkZXNba107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuXG52YXIgZGVidWc7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9ERUJVRyAmJiAvXFxidHVubmVsXFxiLy50ZXN0KHByb2Nlc3MuZW52Lk5PREVfREVCVUcpKSB7XG4gIGRlYnVnID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgIGlmICh0eXBlb2YgYXJnc1swXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGFyZ3NbMF0gPSAnVFVOTkVMOiAnICsgYXJnc1swXTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXJncy51bnNoaWZ0KCdUVU5ORUw6Jyk7XG4gICAgfVxuICAgIGNvbnNvbGUuZXJyb3IuYXBwbHkoY29uc29sZSwgYXJncyk7XG4gIH1cbn0gZWxzZSB7XG4gIGRlYnVnID0gZnVuY3Rpb24oKSB7fTtcbn1cbmV4cG9ydHMuZGVidWcgPSBkZWJ1ZzsgLy8gZm9yIHRlc3RcbiIsCiAgICAibW9kdWxlLmV4cG9ydHMgPSB7XG4gIGtDbG9zZTogU3ltYm9sKCdjbG9zZScpLFxuICBrRGVzdHJveTogU3ltYm9sKCdkZXN0cm95JyksXG4gIGtEaXNwYXRjaDogU3ltYm9sKCdkaXNwYXRjaCcpLFxuICBrVXJsOiBTeW1ib2woJ3VybCcpLFxuICBrV3JpdGluZzogU3ltYm9sKCd3cml0aW5nJyksXG4gIGtSZXN1bWluZzogU3ltYm9sKCdyZXN1bWluZycpLFxuICBrUXVldWU6IFN5bWJvbCgncXVldWUnKSxcbiAga0Nvbm5lY3Q6IFN5bWJvbCgnY29ubmVjdCcpLFxuICBrQ29ubmVjdGluZzogU3ltYm9sKCdjb25uZWN0aW5nJyksXG4gIGtIZWFkZXJzTGlzdDogU3ltYm9sKCdoZWFkZXJzIGxpc3QnKSxcbiAga0tlZXBBbGl2ZURlZmF1bHRUaW1lb3V0OiBTeW1ib2woJ2RlZmF1bHQga2VlcCBhbGl2ZSB0aW1lb3V0JyksXG4gIGtLZWVwQWxpdmVNYXhUaW1lb3V0OiBTeW1ib2woJ21heCBrZWVwIGFsaXZlIHRpbWVvdXQnKSxcbiAga0tlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGQ6IFN5bWJvbCgna2VlcCBhbGl2ZSB0aW1lb3V0IHRocmVzaG9sZCcpLFxuICBrS2VlcEFsaXZlVGltZW91dFZhbHVlOiBTeW1ib2woJ2tlZXAgYWxpdmUgdGltZW91dCcpLFxuICBrS2VlcEFsaXZlOiBTeW1ib2woJ2tlZXAgYWxpdmUnKSxcbiAga0hlYWRlcnNUaW1lb3V0OiBTeW1ib2woJ2hlYWRlcnMgdGltZW91dCcpLFxuICBrQm9keVRpbWVvdXQ6IFN5bWJvbCgnYm9keSB0aW1lb3V0JyksXG4gIGtTZXJ2ZXJOYW1lOiBTeW1ib2woJ3NlcnZlciBuYW1lJyksXG4gIGtMb2NhbEFkZHJlc3M6IFN5bWJvbCgnbG9jYWwgYWRkcmVzcycpLFxuICBrSG9zdDogU3ltYm9sKCdob3N0JyksXG4gIGtOb1JlZjogU3ltYm9sKCdubyByZWYnKSxcbiAga0JvZHlVc2VkOiBTeW1ib2woJ3VzZWQnKSxcbiAga1J1bm5pbmc6IFN5bWJvbCgncnVubmluZycpLFxuICBrQmxvY2tpbmc6IFN5bWJvbCgnYmxvY2tpbmcnKSxcbiAga1BlbmRpbmc6IFN5bWJvbCgncGVuZGluZycpLFxuICBrU2l6ZTogU3ltYm9sKCdzaXplJyksXG4gIGtCdXN5OiBTeW1ib2woJ2J1c3knKSxcbiAga1F1ZXVlZDogU3ltYm9sKCdxdWV1ZWQnKSxcbiAga0ZyZWU6IFN5bWJvbCgnZnJlZScpLFxuICBrQ29ubmVjdGVkOiBTeW1ib2woJ2Nvbm5lY3RlZCcpLFxuICBrQ2xvc2VkOiBTeW1ib2woJ2Nsb3NlZCcpLFxuICBrTmVlZERyYWluOiBTeW1ib2woJ25lZWQgZHJhaW4nKSxcbiAga1Jlc2V0OiBTeW1ib2woJ3Jlc2V0JyksXG4gIGtEZXN0cm95ZWQ6IFN5bWJvbC5mb3IoJ25vZGVqcy5zdHJlYW0uZGVzdHJveWVkJyksXG4gIGtNYXhIZWFkZXJzU2l6ZTogU3ltYm9sKCdtYXggaGVhZGVycyBzaXplJyksXG4gIGtSdW5uaW5nSWR4OiBTeW1ib2woJ3J1bm5pbmcgaW5kZXgnKSxcbiAga1BlbmRpbmdJZHg6IFN5bWJvbCgncGVuZGluZyBpbmRleCcpLFxuICBrRXJyb3I6IFN5bWJvbCgnZXJyb3InKSxcbiAga0NsaWVudHM6IFN5bWJvbCgnY2xpZW50cycpLFxuICBrQ2xpZW50OiBTeW1ib2woJ2NsaWVudCcpLFxuICBrUGFyc2VyOiBTeW1ib2woJ3BhcnNlcicpLFxuICBrT25EZXN0cm95ZWQ6IFN5bWJvbCgnZGVzdHJveSBjYWxsYmFja3MnKSxcbiAga1BpcGVsaW5pbmc6IFN5bWJvbCgncGlwZWxpbmluZycpLFxuICBrU29ja2V0OiBTeW1ib2woJ3NvY2tldCcpLFxuICBrSG9zdEhlYWRlcjogU3ltYm9sKCdob3N0IGhlYWRlcicpLFxuICBrQ29ubmVjdG9yOiBTeW1ib2woJ2Nvbm5lY3RvcicpLFxuICBrU3RyaWN0Q29udGVudExlbmd0aDogU3ltYm9sKCdzdHJpY3QgY29udGVudCBsZW5ndGgnKSxcbiAga01heFJlZGlyZWN0aW9uczogU3ltYm9sKCdtYXhSZWRpcmVjdGlvbnMnKSxcbiAga01heFJlcXVlc3RzOiBTeW1ib2woJ21heFJlcXVlc3RzUGVyQ2xpZW50JyksXG4gIGtQcm94eTogU3ltYm9sKCdwcm94eSBhZ2VudCBvcHRpb25zJyksXG4gIGtDb3VudGVyOiBTeW1ib2woJ3NvY2tldCByZXF1ZXN0IGNvdW50ZXInKSxcbiAga0ludGVyY2VwdG9yczogU3ltYm9sKCdkaXNwYXRjaCBpbnRlcmNlcHRvcnMnKSxcbiAga01heFJlc3BvbnNlU2l6ZTogU3ltYm9sKCdtYXggcmVzcG9uc2Ugc2l6ZScpLFxuICBrSFRUUDJTZXNzaW9uOiBTeW1ib2woJ2h0dHAyU2Vzc2lvbicpLFxuICBrSFRUUDJTZXNzaW9uU3RhdGU6IFN5bWJvbCgnaHR0cDJTZXNzaW9uIHN0YXRlJyksXG4gIGtIVFRQMkJ1aWxkUmVxdWVzdDogU3ltYm9sKCdodHRwMiBidWlsZCByZXF1ZXN0JyksXG4gIGtIVFRQMUJ1aWxkUmVxdWVzdDogU3ltYm9sKCdodHRwMSBidWlsZCByZXF1ZXN0JyksXG4gIGtIVFRQMkNvcHlIZWFkZXJzOiBTeW1ib2woJ2h0dHAyIGNvcHkgaGVhZGVycycpLFxuICBrSFRUUENvbm5WZXJzaW9uOiBTeW1ib2woJ2h0dHAgY29ubmVjdGlvbiB2ZXJzaW9uJyksXG4gIGtSZXRyeUhhbmRsZXJEZWZhdWx0UmV0cnk6IFN5bWJvbCgncmV0cnkgYWdlbnQgZGVmYXVsdCByZXRyeScpLFxuICBrQ29uc3RydWN0OiBTeW1ib2woJ2NvbnN0cnVjdGFibGUnKVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY2xhc3MgVW5kaWNpRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICB0aGlzLm5hbWUgPSAnVW5kaWNpRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlInXG4gIH1cbn1cblxuY2xhc3MgQ29ubmVjdFRpbWVvdXRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIENvbm5lY3RUaW1lb3V0RXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0Nvbm5lY3RUaW1lb3V0RXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnQ29ubmVjdCBUaW1lb3V0IEVycm9yJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0NPTk5FQ1RfVElNRU9VVCdcbiAgfVxufVxuXG5jbGFzcyBIZWFkZXJzVGltZW91dEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgSGVhZGVyc1RpbWVvdXRFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnSGVhZGVyc1RpbWVvdXRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdIZWFkZXJzIFRpbWVvdXQgRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfSEVBREVSU19USU1FT1VUJ1xuICB9XG59XG5cbmNsYXNzIEhlYWRlcnNPdmVyZmxvd0Vycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgSGVhZGVyc092ZXJmbG93RXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0hlYWRlcnNPdmVyZmxvd0Vycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ0hlYWRlcnMgT3ZlcmZsb3cgRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfSEVBREVSU19PVkVSRkxPVydcbiAgfVxufVxuXG5jbGFzcyBCb2R5VGltZW91dEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgQm9keVRpbWVvdXRFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnQm9keVRpbWVvdXRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdCb2R5IFRpbWVvdXQgRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfQk9EWV9USU1FT1VUJ1xuICB9XG59XG5cbmNsYXNzIFJlc3BvbnNlU3RhdHVzQ29kZUVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSwgc3RhdHVzQ29kZSwgaGVhZGVycywgYm9keSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ1Jlc3BvbnNlU3RhdHVzQ29kZUVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1Jlc3BvbnNlIFN0YXR1cyBDb2RlIEVycm9yJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX1JFU1BPTlNFX1NUQVRVU19DT0RFJ1xuICAgIHRoaXMuYm9keSA9IGJvZHlcbiAgICB0aGlzLnN0YXR1cyA9IHN0YXR1c0NvZGVcbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBzdGF0dXNDb2RlXG4gICAgdGhpcy5oZWFkZXJzID0gaGVhZGVyc1xuICB9XG59XG5cbmNsYXNzIEludmFsaWRBcmd1bWVudEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgSW52YWxpZEFyZ3VtZW50RXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0ludmFsaWRBcmd1bWVudEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ0ludmFsaWQgQXJndW1lbnQgRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfSU5WQUxJRF9BUkcnXG4gIH1cbn1cblxuY2xhc3MgSW52YWxpZFJldHVyblZhbHVlRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnSW52YWxpZFJldHVyblZhbHVlRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnSW52YWxpZCBSZXR1cm4gVmFsdWUgRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfSU5WQUxJRF9SRVRVUk5fVkFMVUUnXG4gIH1cbn1cblxuY2xhc3MgUmVxdWVzdEFib3J0ZWRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFJlcXVlc3RBYm9ydGVkRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0Fib3J0RXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnUmVxdWVzdCBhYm9ydGVkJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0FCT1JURUQnXG4gIH1cbn1cblxuY2xhc3MgSW5mb3JtYXRpb25hbEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgSW5mb3JtYXRpb25hbEVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdJbmZvcm1hdGlvbmFsRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnUmVxdWVzdCBpbmZvcm1hdGlvbidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9JTkZPJ1xuICB9XG59XG5cbmNsYXNzIFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1JlcXVlc3QgYm9keSBsZW5ndGggZG9lcyBub3QgbWF0Y2ggY29udGVudC1sZW5ndGggaGVhZGVyJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX1JFUV9DT05URU5UX0xFTkdUSF9NSVNNQVRDSCdcbiAgfVxufVxuXG5jbGFzcyBSZXNwb25zZUNvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgUmVzcG9uc2VDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnUmVzcG9uc2VDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdSZXNwb25zZSBib2R5IGxlbmd0aCBkb2VzIG5vdCBtYXRjaCBjb250ZW50LWxlbmd0aCBoZWFkZXInXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfUkVTX0NPTlRFTlRfTEVOR1RIX01JU01BVENIJ1xuICB9XG59XG5cbmNsYXNzIENsaWVudERlc3Ryb3llZEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgQ2xpZW50RGVzdHJveWVkRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0NsaWVudERlc3Ryb3llZEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1RoZSBjbGllbnQgaXMgZGVzdHJveWVkJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0RFU1RST1lFRCdcbiAgfVxufVxuXG5jbGFzcyBDbGllbnRDbG9zZWRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIENsaWVudENsb3NlZEVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdDbGllbnRDbG9zZWRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdUaGUgY2xpZW50IGlzIGNsb3NlZCdcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9DTE9TRUQnXG4gIH1cbn1cblxuY2xhc3MgU29ja2V0RXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlLCBzb2NrZXQpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFNvY2tldEVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdTb2NrZXRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdTb2NrZXQgZXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfU09DS0VUJ1xuICAgIHRoaXMuc29ja2V0ID0gc29ja2V0XG4gIH1cbn1cblxuY2xhc3MgTm90U3VwcG9ydGVkRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBOb3RTdXBwb3J0ZWRFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnTm90U3VwcG9ydGVkRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnTm90IHN1cHBvcnRlZCBlcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9OT1RfU1VQUE9SVEVEJ1xuICB9XG59XG5cbmNsYXNzIEJhbGFuY2VkUG9vbE1pc3NpbmdVcHN0cmVhbUVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgTm90U3VwcG9ydGVkRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ01pc3NpbmdVcHN0cmVhbUVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ05vIHVwc3RyZWFtIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBCYWxhbmNlZFBvb2wnXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfQlBMX01JU1NJTkdfVVBTVFJFQU0nXG4gIH1cbn1cblxuY2xhc3MgSFRUUFBhcnNlckVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSwgY29kZSwgZGF0YSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgSFRUUFBhcnNlckVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdIVFRQUGFyc2VyRXJyb3InXG4gICAgdGhpcy5jb2RlID0gY29kZSA/IGBIUEVfJHtjb2RlfWAgOiB1bmRlZmluZWRcbiAgICB0aGlzLmRhdGEgPSBkYXRhID8gZGF0YS50b1N0cmluZygpIDogdW5kZWZpbmVkXG4gIH1cbn1cblxuY2xhc3MgUmVzcG9uc2VFeGNlZWRlZE1heFNpemVFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFJlc3BvbnNlRXhjZWVkZWRNYXhTaXplRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ1Jlc3BvbnNlRXhjZWVkZWRNYXhTaXplRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnUmVzcG9uc2UgY29udGVudCBleGNlZWRlZCBtYXggc2l6ZSdcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9SRVNfRVhDRUVERURfTUFYX1NJWkUnXG4gIH1cbn1cblxuY2xhc3MgUmVxdWVzdFJldHJ5RXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlLCBjb2RlLCB7IGhlYWRlcnMsIGRhdGEgfSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgUmVxdWVzdFJldHJ5RXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ1JlcXVlc3RSZXRyeUVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1JlcXVlc3QgcmV0cnkgZXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfUkVRX1JFVFJZJ1xuICAgIHRoaXMuc3RhdHVzQ29kZSA9IGNvZGVcbiAgICB0aGlzLmRhdGEgPSBkYXRhXG4gICAgdGhpcy5oZWFkZXJzID0gaGVhZGVyc1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBIVFRQUGFyc2VyRXJyb3IsXG4gIFVuZGljaUVycm9yLFxuICBIZWFkZXJzVGltZW91dEVycm9yLFxuICBIZWFkZXJzT3ZlcmZsb3dFcnJvcixcbiAgQm9keVRpbWVvdXRFcnJvcixcbiAgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yLFxuICBDb25uZWN0VGltZW91dEVycm9yLFxuICBSZXNwb25zZVN0YXR1c0NvZGVFcnJvcixcbiAgSW52YWxpZEFyZ3VtZW50RXJyb3IsXG4gIEludmFsaWRSZXR1cm5WYWx1ZUVycm9yLFxuICBSZXF1ZXN0QWJvcnRlZEVycm9yLFxuICBDbGllbnREZXN0cm95ZWRFcnJvcixcbiAgQ2xpZW50Q2xvc2VkRXJyb3IsXG4gIEluZm9ybWF0aW9uYWxFcnJvcixcbiAgU29ja2V0RXJyb3IsXG4gIE5vdFN1cHBvcnRlZEVycm9yLFxuICBSZXNwb25zZUNvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yLFxuICBCYWxhbmNlZFBvb2xNaXNzaW5nVXBzdHJlYW1FcnJvcixcbiAgUmVzcG9uc2VFeGNlZWRlZE1heFNpemVFcnJvcixcbiAgUmVxdWVzdFJldHJ5RXJyb3Jcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbi8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPn0gKi9cbmNvbnN0IGhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkID0ge31cblxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRUUC9IZWFkZXJzXG5jb25zdCB3ZWxsa25vd25IZWFkZXJOYW1lcyA9IFtcbiAgJ0FjY2VwdCcsXG4gICdBY2NlcHQtRW5jb2RpbmcnLFxuICAnQWNjZXB0LUxhbmd1YWdlJyxcbiAgJ0FjY2VwdC1SYW5nZXMnLFxuICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctQ3JlZGVudGlhbHMnLFxuICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycycsXG4gICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzJyxcbiAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbicsXG4gICdBY2Nlc3MtQ29udHJvbC1FeHBvc2UtSGVhZGVycycsXG4gICdBY2Nlc3MtQ29udHJvbC1NYXgtQWdlJyxcbiAgJ0FjY2Vzcy1Db250cm9sLVJlcXVlc3QtSGVhZGVycycsXG4gICdBY2Nlc3MtQ29udHJvbC1SZXF1ZXN0LU1ldGhvZCcsXG4gICdBZ2UnLFxuICAnQWxsb3cnLFxuICAnQWx0LVN2YycsXG4gICdBbHQtVXNlZCcsXG4gICdBdXRob3JpemF0aW9uJyxcbiAgJ0NhY2hlLUNvbnRyb2wnLFxuICAnQ2xlYXItU2l0ZS1EYXRhJyxcbiAgJ0Nvbm5lY3Rpb24nLFxuICAnQ29udGVudC1EaXNwb3NpdGlvbicsXG4gICdDb250ZW50LUVuY29kaW5nJyxcbiAgJ0NvbnRlbnQtTGFuZ3VhZ2UnLFxuICAnQ29udGVudC1MZW5ndGgnLFxuICAnQ29udGVudC1Mb2NhdGlvbicsXG4gICdDb250ZW50LVJhbmdlJyxcbiAgJ0NvbnRlbnQtU2VjdXJpdHktUG9saWN5JyxcbiAgJ0NvbnRlbnQtU2VjdXJpdHktUG9saWN5LVJlcG9ydC1Pbmx5JyxcbiAgJ0NvbnRlbnQtVHlwZScsXG4gICdDb29raWUnLFxuICAnQ3Jvc3MtT3JpZ2luLUVtYmVkZGVyLVBvbGljeScsXG4gICdDcm9zcy1PcmlnaW4tT3BlbmVyLVBvbGljeScsXG4gICdDcm9zcy1PcmlnaW4tUmVzb3VyY2UtUG9saWN5JyxcbiAgJ0RhdGUnLFxuICAnRGV2aWNlLU1lbW9yeScsXG4gICdEb3dubGluaycsXG4gICdFQ1QnLFxuICAnRVRhZycsXG4gICdFeHBlY3QnLFxuICAnRXhwZWN0LUNUJyxcbiAgJ0V4cGlyZXMnLFxuICAnRm9yd2FyZGVkJyxcbiAgJ0Zyb20nLFxuICAnSG9zdCcsXG4gICdJZi1NYXRjaCcsXG4gICdJZi1Nb2RpZmllZC1TaW5jZScsXG4gICdJZi1Ob25lLU1hdGNoJyxcbiAgJ0lmLVJhbmdlJyxcbiAgJ0lmLVVubW9kaWZpZWQtU2luY2UnLFxuICAnS2VlcC1BbGl2ZScsXG4gICdMYXN0LU1vZGlmaWVkJyxcbiAgJ0xpbmsnLFxuICAnTG9jYXRpb24nLFxuICAnTWF4LUZvcndhcmRzJyxcbiAgJ09yaWdpbicsXG4gICdQZXJtaXNzaW9ucy1Qb2xpY3knLFxuICAnUHJhZ21hJyxcbiAgJ1Byb3h5LUF1dGhlbnRpY2F0ZScsXG4gICdQcm94eS1BdXRob3JpemF0aW9uJyxcbiAgJ1JUVCcsXG4gICdSYW5nZScsXG4gICdSZWZlcmVyJyxcbiAgJ1JlZmVycmVyLVBvbGljeScsXG4gICdSZWZyZXNoJyxcbiAgJ1JldHJ5LUFmdGVyJyxcbiAgJ1NlYy1XZWJTb2NrZXQtQWNjZXB0JyxcbiAgJ1NlYy1XZWJTb2NrZXQtRXh0ZW5zaW9ucycsXG4gICdTZWMtV2ViU29ja2V0LUtleScsXG4gICdTZWMtV2ViU29ja2V0LVByb3RvY29sJyxcbiAgJ1NlYy1XZWJTb2NrZXQtVmVyc2lvbicsXG4gICdTZXJ2ZXInLFxuICAnU2VydmVyLVRpbWluZycsXG4gICdTZXJ2aWNlLVdvcmtlci1BbGxvd2VkJyxcbiAgJ1NlcnZpY2UtV29ya2VyLU5hdmlnYXRpb24tUHJlbG9hZCcsXG4gICdTZXQtQ29va2llJyxcbiAgJ1NvdXJjZU1hcCcsXG4gICdTdHJpY3QtVHJhbnNwb3J0LVNlY3VyaXR5JyxcbiAgJ1N1cHBvcnRzLUxvYWRpbmctTW9kZScsXG4gICdURScsXG4gICdUaW1pbmctQWxsb3ctT3JpZ2luJyxcbiAgJ1RyYWlsZXInLFxuICAnVHJhbnNmZXItRW5jb2RpbmcnLFxuICAnVXBncmFkZScsXG4gICdVcGdyYWRlLUluc2VjdXJlLVJlcXVlc3RzJyxcbiAgJ1VzZXItQWdlbnQnLFxuICAnVmFyeScsXG4gICdWaWEnLFxuICAnV1dXLUF1dGhlbnRpY2F0ZScsXG4gICdYLUNvbnRlbnQtVHlwZS1PcHRpb25zJyxcbiAgJ1gtRE5TLVByZWZldGNoLUNvbnRyb2wnLFxuICAnWC1GcmFtZS1PcHRpb25zJyxcbiAgJ1gtUGVybWl0dGVkLUNyb3NzLURvbWFpbi1Qb2xpY2llcycsXG4gICdYLVBvd2VyZWQtQnknLFxuICAnWC1SZXF1ZXN0ZWQtV2l0aCcsXG4gICdYLVhTUy1Qcm90ZWN0aW9uJ1xuXVxuXG5mb3IgKGxldCBpID0gMDsgaSA8IHdlbGxrbm93bkhlYWRlck5hbWVzLmxlbmd0aDsgKytpKSB7XG4gIGNvbnN0IGtleSA9IHdlbGxrbm93bkhlYWRlck5hbWVzW2ldXG4gIGNvbnN0IGxvd2VyQ2FzZWRLZXkgPSBrZXkudG9Mb3dlckNhc2UoKVxuICBoZWFkZXJOYW1lTG93ZXJDYXNlZFJlY29yZFtrZXldID0gaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmRbbG93ZXJDYXNlZEtleV0gPVxuICAgIGxvd2VyQ2FzZWRLZXlcbn1cblxuLy8gTm90ZTogb2JqZWN0IHByb3RvdHlwZXMgc2hvdWxkIG5vdCBiZSBhYmxlIHRvIGJlIHJlZmVyZW5jZWQuIGUuZy4gYE9iamVjdCNoYXNPd25Qcm9wZXJ0eWAuXG5PYmplY3Quc2V0UHJvdG90eXBlT2YoaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmQsIG51bGwpXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICB3ZWxsa25vd25IZWFkZXJOYW1lcyxcbiAgaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmRcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7IGtEZXN0cm95ZWQsIGtCb2R5VXNlZCB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgSW5jb21pbmdNZXNzYWdlIH0gPSByZXF1aXJlKCdodHRwJylcbmNvbnN0IHN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpXG5jb25zdCBuZXQgPSByZXF1aXJlKCduZXQnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi9lcnJvcnMnKVxuY29uc3QgeyBCbG9iIH0gPSByZXF1aXJlKCdidWZmZXInKVxuY29uc3Qgbm9kZVV0aWwgPSByZXF1aXJlKCd1dGlsJylcbmNvbnN0IHsgc3RyaW5naWZ5IH0gPSByZXF1aXJlKCdxdWVyeXN0cmluZycpXG5jb25zdCB7IGhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5cbmNvbnN0IFtub2RlTWFqb3IsIG5vZGVNaW5vcl0gPSBwcm9jZXNzLnZlcnNpb25zLm5vZGUuc3BsaXQoJy4nKS5tYXAodiA9PiBOdW1iZXIodikpXG5cbmZ1bmN0aW9uIG5vcCAoKSB7fVxuXG5mdW5jdGlvbiBpc1N0cmVhbSAob2JqKSB7XG4gIHJldHVybiBvYmogJiYgdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG9iai5waXBlID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBvYmoub24gPT09ICdmdW5jdGlvbidcbn1cblxuLy8gYmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL25vZGUtZmV0Y2gvZmV0Y2gtYmxvYi9ibG9iLzhhYjU4N2QzNDA4MGRlOTQxNDBiNTRmMDcxNjg0NTFlN2QwYjY1NWUvaW5kZXguanMjTDIyOS1MMjQxIChNSVQgTGljZW5zZSlcbmZ1bmN0aW9uIGlzQmxvYkxpa2UgKG9iamVjdCkge1xuICByZXR1cm4gKEJsb2IgJiYgb2JqZWN0IGluc3RhbmNlb2YgQmxvYikgfHwgKFxuICAgIG9iamVjdCAmJlxuICAgIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmXG4gICAgKHR5cGVvZiBvYmplY3Quc3RyZWFtID09PSAnZnVuY3Rpb24nIHx8XG4gICAgICB0eXBlb2Ygb2JqZWN0LmFycmF5QnVmZmVyID09PSAnZnVuY3Rpb24nKSAmJlxuICAgIC9eKEJsb2J8RmlsZSkkLy50ZXN0KG9iamVjdFtTeW1ib2wudG9TdHJpbmdUYWddKVxuICApXG59XG5cbmZ1bmN0aW9uIGJ1aWxkVVJMICh1cmwsIHF1ZXJ5UGFyYW1zKSB7XG4gIGlmICh1cmwuaW5jbHVkZXMoJz8nKSB8fCB1cmwuaW5jbHVkZXMoJyMnKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignUXVlcnkgcGFyYW1zIGNhbm5vdCBiZSBwYXNzZWQgd2hlbiB1cmwgYWxyZWFkeSBjb250YWlucyBcIj9cIiBvciBcIiNcIi4nKVxuICB9XG5cbiAgY29uc3Qgc3RyaW5naWZpZWQgPSBzdHJpbmdpZnkocXVlcnlQYXJhbXMpXG5cbiAgaWYgKHN0cmluZ2lmaWVkKSB7XG4gICAgdXJsICs9ICc/JyArIHN0cmluZ2lmaWVkXG4gIH1cblxuICByZXR1cm4gdXJsXG59XG5cbmZ1bmN0aW9uIHBhcnNlVVJMICh1cmwpIHtcbiAgaWYgKHR5cGVvZiB1cmwgPT09ICdzdHJpbmcnKSB7XG4gICAgdXJsID0gbmV3IFVSTCh1cmwpXG5cbiAgICBpZiAoIS9eaHR0cHM/Oi8udGVzdCh1cmwub3JpZ2luIHx8IHVybC5wcm90b2NvbCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkwgcHJvdG9jb2w6IHRoZSBVUkwgbXVzdCBzdGFydCB3aXRoIGBodHRwOmAgb3IgYGh0dHBzOmAuJylcbiAgICB9XG5cbiAgICByZXR1cm4gdXJsXG4gIH1cblxuICBpZiAoIXVybCB8fCB0eXBlb2YgdXJsICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkw6IFRoZSBVUkwgYXJndW1lbnQgbXVzdCBiZSBhIG5vbi1udWxsIG9iamVjdC4nKVxuICB9XG5cbiAgaWYgKCEvXmh0dHBzPzovLnRlc3QodXJsLm9yaWdpbiB8fCB1cmwucHJvdG9jb2wpKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIFVSTCBwcm90b2NvbDogdGhlIFVSTCBtdXN0IHN0YXJ0IHdpdGggYGh0dHA6YCBvciBgaHR0cHM6YC4nKVxuICB9XG5cbiAgaWYgKCEodXJsIGluc3RhbmNlb2YgVVJMKSkge1xuICAgIGlmICh1cmwucG9ydCAhPSBudWxsICYmIHVybC5wb3J0ICE9PSAnJyAmJiAhTnVtYmVyLmlzRmluaXRlKHBhcnNlSW50KHVybC5wb3J0KSkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkw6IHBvcnQgbXVzdCBiZSBhIHZhbGlkIGludGVnZXIgb3IgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gaW50ZWdlci4nKVxuICAgIH1cblxuICAgIGlmICh1cmwucGF0aCAhPSBudWxsICYmIHR5cGVvZiB1cmwucGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkwgcGF0aDogdGhlIHBhdGggbXVzdCBiZSBhIHN0cmluZyBvciBudWxsL3VuZGVmaW5lZC4nKVxuICAgIH1cblxuICAgIGlmICh1cmwucGF0aG5hbWUgIT0gbnVsbCAmJiB0eXBlb2YgdXJsLnBhdGhuYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIFVSTCBwYXRobmFtZTogdGhlIHBhdGhuYW1lIG11c3QgYmUgYSBzdHJpbmcgb3IgbnVsbC91bmRlZmluZWQuJylcbiAgICB9XG5cbiAgICBpZiAodXJsLmhvc3RuYW1lICE9IG51bGwgJiYgdHlwZW9mIHVybC5ob3N0bmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkwgaG9zdG5hbWU6IHRoZSBob3N0bmFtZSBtdXN0IGJlIGEgc3RyaW5nIG9yIG51bGwvdW5kZWZpbmVkLicpXG4gICAgfVxuXG4gICAgaWYgKHVybC5vcmlnaW4gIT0gbnVsbCAmJiB0eXBlb2YgdXJsLm9yaWdpbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkwgb3JpZ2luOiB0aGUgb3JpZ2luIG11c3QgYmUgYSBzdHJpbmcgb3IgbnVsbC91bmRlZmluZWQuJylcbiAgICB9XG5cbiAgICBjb25zdCBwb3J0ID0gdXJsLnBvcnQgIT0gbnVsbFxuICAgICAgPyB1cmwucG9ydFxuICAgICAgOiAodXJsLnByb3RvY29sID09PSAnaHR0cHM6JyA/IDQ0MyA6IDgwKVxuICAgIGxldCBvcmlnaW4gPSB1cmwub3JpZ2luICE9IG51bGxcbiAgICAgID8gdXJsLm9yaWdpblxuICAgICAgOiBgJHt1cmwucHJvdG9jb2x9Ly8ke3VybC5ob3N0bmFtZX06JHtwb3J0fWBcbiAgICBsZXQgcGF0aCA9IHVybC5wYXRoICE9IG51bGxcbiAgICAgID8gdXJsLnBhdGhcbiAgICAgIDogYCR7dXJsLnBhdGhuYW1lIHx8ICcnfSR7dXJsLnNlYXJjaCB8fCAnJ31gXG5cbiAgICBpZiAob3JpZ2luLmVuZHNXaXRoKCcvJykpIHtcbiAgICAgIG9yaWdpbiA9IG9yaWdpbi5zdWJzdHJpbmcoMCwgb3JpZ2luLmxlbmd0aCAtIDEpXG4gICAgfVxuXG4gICAgaWYgKHBhdGggJiYgIXBhdGguc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICBwYXRoID0gYC8ke3BhdGh9YFxuICAgIH1cbiAgICAvLyBuZXcgVVJMKHBhdGgsIG9yaWdpbikgaXMgdW5zYWZlIHdoZW4gYHBhdGhgIGNvbnRhaW5zIGFuIGFic29sdXRlIFVSTFxuICAgIC8vIEZyb20gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1VSTC9VUkw6XG4gICAgLy8gSWYgZmlyc3QgcGFyYW1ldGVyIGlzIGEgcmVsYXRpdmUgVVJMLCBzZWNvbmQgcGFyYW0gaXMgcmVxdWlyZWQsIGFuZCB3aWxsIGJlIHVzZWQgYXMgdGhlIGJhc2UgVVJMLlxuICAgIC8vIElmIGZpcnN0IHBhcmFtZXRlciBpcyBhbiBhYnNvbHV0ZSBVUkwsIGEgZ2l2ZW4gc2Vjb25kIHBhcmFtIHdpbGwgYmUgaWdub3JlZC5cbiAgICB1cmwgPSBuZXcgVVJMKG9yaWdpbiArIHBhdGgpXG4gIH1cblxuICByZXR1cm4gdXJsXG59XG5cbmZ1bmN0aW9uIHBhcnNlT3JpZ2luICh1cmwpIHtcbiAgdXJsID0gcGFyc2VVUkwodXJsKVxuXG4gIGlmICh1cmwucGF0aG5hbWUgIT09ICcvJyB8fCB1cmwuc2VhcmNoIHx8IHVybC5oYXNoKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIHVybCcpXG4gIH1cblxuICByZXR1cm4gdXJsXG59XG5cbmZ1bmN0aW9uIGdldEhvc3RuYW1lIChob3N0KSB7XG4gIGlmIChob3N0WzBdID09PSAnWycpIHtcbiAgICBjb25zdCBpZHggPSBob3N0LmluZGV4T2YoJ10nKVxuXG4gICAgYXNzZXJ0KGlkeCAhPT0gLTEpXG4gICAgcmV0dXJuIGhvc3Quc3Vic3RyaW5nKDEsIGlkeClcbiAgfVxuXG4gIGNvbnN0IGlkeCA9IGhvc3QuaW5kZXhPZignOicpXG4gIGlmIChpZHggPT09IC0xKSByZXR1cm4gaG9zdFxuXG4gIHJldHVybiBob3N0LnN1YnN0cmluZygwLCBpZHgpXG59XG5cbi8vIElQIGFkZHJlc3NlcyBhcmUgbm90IHZhbGlkIHNlcnZlciBuYW1lcyBwZXIgUkZDNjA2NlxuLy8gPiBDdXJyZW50bHksIHRoZSBvbmx5IHNlcnZlciBuYW1lcyBzdXBwb3J0ZWQgYXJlIEROUyBob3N0bmFtZXNcbmZ1bmN0aW9uIGdldFNlcnZlck5hbWUgKGhvc3QpIHtcbiAgaWYgKCFob3N0KSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgaG9zdCwgJ3N0cmluZycpXG5cbiAgY29uc3Qgc2VydmVybmFtZSA9IGdldEhvc3RuYW1lKGhvc3QpXG4gIGlmIChuZXQuaXNJUChzZXJ2ZXJuYW1lKSkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgcmV0dXJuIHNlcnZlcm5hbWVcbn1cblxuZnVuY3Rpb24gZGVlcENsb25lIChvYmopIHtcbiAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob2JqKSlcbn1cblxuZnVuY3Rpb24gaXNBc3luY0l0ZXJhYmxlIChvYmopIHtcbiAgcmV0dXJuICEhKG9iaiAhPSBudWxsICYmIHR5cGVvZiBvYmpbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID09PSAnZnVuY3Rpb24nKVxufVxuXG5mdW5jdGlvbiBpc0l0ZXJhYmxlIChvYmopIHtcbiAgcmV0dXJuICEhKG9iaiAhPSBudWxsICYmICh0eXBlb2Ygb2JqW1N5bWJvbC5pdGVyYXRvcl0gPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIG9ialtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPT09ICdmdW5jdGlvbicpKVxufVxuXG5mdW5jdGlvbiBib2R5TGVuZ3RoIChib2R5KSB7XG4gIGlmIChib2R5ID09IG51bGwpIHtcbiAgICByZXR1cm4gMFxuICB9IGVsc2UgaWYgKGlzU3RyZWFtKGJvZHkpKSB7XG4gICAgY29uc3Qgc3RhdGUgPSBib2R5Ll9yZWFkYWJsZVN0YXRlXG4gICAgcmV0dXJuIHN0YXRlICYmIHN0YXRlLm9iamVjdE1vZGUgPT09IGZhbHNlICYmIHN0YXRlLmVuZGVkID09PSB0cnVlICYmIE51bWJlci5pc0Zpbml0ZShzdGF0ZS5sZW5ndGgpXG4gICAgICA/IHN0YXRlLmxlbmd0aFxuICAgICAgOiBudWxsXG4gIH0gZWxzZSBpZiAoaXNCbG9iTGlrZShib2R5KSkge1xuICAgIHJldHVybiBib2R5LnNpemUgIT0gbnVsbCA/IGJvZHkuc2l6ZSA6IG51bGxcbiAgfSBlbHNlIGlmIChpc0J1ZmZlcihib2R5KSkge1xuICAgIHJldHVybiBib2R5LmJ5dGVMZW5ndGhcbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG5cbmZ1bmN0aW9uIGlzRGVzdHJveWVkIChzdHJlYW0pIHtcbiAgcmV0dXJuICFzdHJlYW0gfHwgISEoc3RyZWFtLmRlc3Ryb3llZCB8fCBzdHJlYW1ba0Rlc3Ryb3llZF0pXG59XG5cbmZ1bmN0aW9uIGlzUmVhZGFibGVBYm9ydGVkIChzdHJlYW0pIHtcbiAgY29uc3Qgc3RhdGUgPSBzdHJlYW0gJiYgc3RyZWFtLl9yZWFkYWJsZVN0YXRlXG4gIHJldHVybiBpc0Rlc3Ryb3llZChzdHJlYW0pICYmIHN0YXRlICYmICFzdGF0ZS5lbmRFbWl0dGVkXG59XG5cbmZ1bmN0aW9uIGRlc3Ryb3kgKHN0cmVhbSwgZXJyKSB7XG4gIGlmIChzdHJlYW0gPT0gbnVsbCB8fCAhaXNTdHJlYW0oc3RyZWFtKSB8fCBpc0Rlc3Ryb3llZChzdHJlYW0pKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAodHlwZW9mIHN0cmVhbS5kZXN0cm95ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKE9iamVjdC5nZXRQcm90b3R5cGVPZihzdHJlYW0pLmNvbnN0cnVjdG9yID09PSBJbmNvbWluZ01lc3NhZ2UpIHtcbiAgICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvMzg1MDUvZmlsZXNcbiAgICAgIHN0cmVhbS5zb2NrZXQgPSBudWxsXG4gICAgfVxuXG4gICAgc3RyZWFtLmRlc3Ryb3koZXJyKVxuICB9IGVsc2UgaWYgKGVycikge1xuICAgIHByb2Nlc3MubmV4dFRpY2soKHN0cmVhbSwgZXJyKSA9PiB7XG4gICAgICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcnIpXG4gICAgfSwgc3RyZWFtLCBlcnIpXG4gIH1cblxuICBpZiAoc3RyZWFtLmRlc3Ryb3llZCAhPT0gdHJ1ZSkge1xuICAgIHN0cmVhbVtrRGVzdHJveWVkXSA9IHRydWVcbiAgfVxufVxuXG5jb25zdCBLRUVQQUxJVkVfVElNRU9VVF9FWFBSID0gL3RpbWVvdXQ9KFxcZCspL1xuZnVuY3Rpb24gcGFyc2VLZWVwQWxpdmVUaW1lb3V0ICh2YWwpIHtcbiAgY29uc3QgbSA9IHZhbC50b1N0cmluZygpLm1hdGNoKEtFRVBBTElWRV9USU1FT1VUX0VYUFIpXG4gIHJldHVybiBtID8gcGFyc2VJbnQobVsxXSwgMTApICogMTAwMCA6IG51bGxcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgYSBoZWFkZXIgbmFtZSBhbmQgcmV0dXJucyBpdHMgbG93ZXJjYXNlIHZhbHVlLlxuICogQHBhcmFtIHtzdHJpbmcgfCBCdWZmZXJ9IHZhbHVlIEhlYWRlciBuYW1lXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBoZWFkZXJOYW1lVG9TdHJpbmcgKHZhbHVlKSB7XG4gIHJldHVybiBoZWFkZXJOYW1lTG93ZXJDYXNlZFJlY29yZFt2YWx1ZV0gfHwgdmFsdWUudG9Mb3dlckNhc2UoKVxufVxuXG5mdW5jdGlvbiBwYXJzZUhlYWRlcnMgKGhlYWRlcnMsIG9iaiA9IHt9KSB7XG4gIC8vIEZvciBIMiBzdXBwb3J0XG4gIGlmICghQXJyYXkuaXNBcnJheShoZWFkZXJzKSkgcmV0dXJuIGhlYWRlcnNcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICBjb25zdCBrZXkgPSBoZWFkZXJzW2ldLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKVxuICAgIGxldCB2YWwgPSBvYmpba2V5XVxuXG4gICAgaWYgKCF2YWwpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnNbaSArIDFdKSkge1xuICAgICAgICBvYmpba2V5XSA9IGhlYWRlcnNbaSArIDFdLm1hcCh4ID0+IHgudG9TdHJpbmcoJ3V0ZjgnKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9ialtrZXldID0gaGVhZGVyc1tpICsgMV0udG9TdHJpbmcoJ3V0ZjgnKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgICB2YWwgPSBbdmFsXVxuICAgICAgICBvYmpba2V5XSA9IHZhbFxuICAgICAgfVxuICAgICAgdmFsLnB1c2goaGVhZGVyc1tpICsgMV0udG9TdHJpbmcoJ3V0ZjgnKSlcbiAgICB9XG4gIH1cblxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvNDY1MjhcbiAgaWYgKCdjb250ZW50LWxlbmd0aCcgaW4gb2JqICYmICdjb250ZW50LWRpc3Bvc2l0aW9uJyBpbiBvYmopIHtcbiAgICBvYmpbJ2NvbnRlbnQtZGlzcG9zaXRpb24nXSA9IEJ1ZmZlci5mcm9tKG9ialsnY29udGVudC1kaXNwb3NpdGlvbiddKS50b1N0cmluZygnbGF0aW4xJylcbiAgfVxuXG4gIHJldHVybiBvYmpcbn1cblxuZnVuY3Rpb24gcGFyc2VSYXdIZWFkZXJzIChoZWFkZXJzKSB7XG4gIGNvbnN0IHJldCA9IFtdXG4gIGxldCBoYXNDb250ZW50TGVuZ3RoID0gZmFsc2VcbiAgbGV0IGNvbnRlbnREaXNwb3NpdGlvbklkeCA9IC0xXG5cbiAgZm9yIChsZXQgbiA9IDA7IG4gPCBoZWFkZXJzLmxlbmd0aDsgbiArPSAyKSB7XG4gICAgY29uc3Qga2V5ID0gaGVhZGVyc1tuICsgMF0udG9TdHJpbmcoKVxuICAgIGNvbnN0IHZhbCA9IGhlYWRlcnNbbiArIDFdLnRvU3RyaW5nKCd1dGY4JylcblxuICAgIGlmIChrZXkubGVuZ3RoID09PSAxNCAmJiAoa2V5ID09PSAnY29udGVudC1sZW5ndGgnIHx8IGtleS50b0xvd2VyQ2FzZSgpID09PSAnY29udGVudC1sZW5ndGgnKSkge1xuICAgICAgcmV0LnB1c2goa2V5LCB2YWwpXG4gICAgICBoYXNDb250ZW50TGVuZ3RoID0gdHJ1ZVxuICAgIH0gZWxzZSBpZiAoa2V5Lmxlbmd0aCA9PT0gMTkgJiYgKGtleSA9PT0gJ2NvbnRlbnQtZGlzcG9zaXRpb24nIHx8IGtleS50b0xvd2VyQ2FzZSgpID09PSAnY29udGVudC1kaXNwb3NpdGlvbicpKSB7XG4gICAgICBjb250ZW50RGlzcG9zaXRpb25JZHggPSByZXQucHVzaChrZXksIHZhbCkgLSAxXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldC5wdXNoKGtleSwgdmFsKVxuICAgIH1cbiAgfVxuXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvcHVsbC80NjUyOFxuICBpZiAoaGFzQ29udGVudExlbmd0aCAmJiBjb250ZW50RGlzcG9zaXRpb25JZHggIT09IC0xKSB7XG4gICAgcmV0W2NvbnRlbnREaXNwb3NpdGlvbklkeF0gPSBCdWZmZXIuZnJvbShyZXRbY29udGVudERpc3Bvc2l0aW9uSWR4XSkudG9TdHJpbmcoJ2xhdGluMScpXG4gIH1cblxuICByZXR1cm4gcmV0XG59XG5cbmZ1bmN0aW9uIGlzQnVmZmVyIChidWZmZXIpIHtcbiAgLy8gU2VlLCBodHRwczovL2dpdGh1Yi5jb20vbWNvbGxpbmEvdW5kaWNpL3B1bGwvMzE5XG4gIHJldHVybiBidWZmZXIgaW5zdGFuY2VvZiBVaW50OEFycmF5IHx8IEJ1ZmZlci5pc0J1ZmZlcihidWZmZXIpXG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlSGFuZGxlciAoaGFuZGxlciwgbWV0aG9kLCB1cGdyYWRlKSB7XG4gIGlmICghaGFuZGxlciB8fCB0eXBlb2YgaGFuZGxlciAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2hhbmRsZXIgbXVzdCBiZSBhbiBvYmplY3QnKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBoYW5kbGVyLm9uQ29ubmVjdCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkNvbm5lY3QgbWV0aG9kJylcbiAgfVxuXG4gIGlmICh0eXBlb2YgaGFuZGxlci5vbkVycm9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uRXJyb3IgbWV0aG9kJylcbiAgfVxuXG4gIGlmICh0eXBlb2YgaGFuZGxlci5vbkJvZHlTZW50ICE9PSAnZnVuY3Rpb24nICYmIGhhbmRsZXIub25Cb2R5U2VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uQm9keVNlbnQgbWV0aG9kJylcbiAgfVxuXG4gIGlmICh1cGdyYWRlIHx8IG1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSB7XG4gICAgaWYgKHR5cGVvZiBoYW5kbGVyLm9uVXBncmFkZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uVXBncmFkZSBtZXRob2QnKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAodHlwZW9mIGhhbmRsZXIub25IZWFkZXJzICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25IZWFkZXJzIG1ldGhvZCcpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBoYW5kbGVyLm9uRGF0YSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uRGF0YSBtZXRob2QnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaGFuZGxlci5vbkNvbXBsZXRlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25Db21wbGV0ZSBtZXRob2QnKVxuICAgIH1cbiAgfVxufVxuXG4vLyBBIGJvZHkgaXMgZGlzdHVyYmVkIGlmIGl0IGhhcyBiZWVuIHJlYWQgZnJvbSBhbmQgaXQgY2Fubm90XG4vLyBiZSByZS11c2VkIHdpdGhvdXQgbG9zaW5nIHN0YXRlIG9yIGRhdGEuXG5mdW5jdGlvbiBpc0Rpc3R1cmJlZCAoYm9keSkge1xuICByZXR1cm4gISEoYm9keSAmJiAoXG4gICAgc3RyZWFtLmlzRGlzdHVyYmVkXG4gICAgICA/IHN0cmVhbS5pc0Rpc3R1cmJlZChib2R5KSB8fCBib2R5W2tCb2R5VXNlZF0gLy8gVE9ETyAoZml4KTogV2h5IGlzIGJvZHlba0JvZHlVc2VkXSBuZWVkZWQ/XG4gICAgICA6IGJvZHlba0JvZHlVc2VkXSB8fFxuICAgICAgICBib2R5LnJlYWRhYmxlRGlkUmVhZCB8fFxuICAgICAgICAoYm9keS5fcmVhZGFibGVTdGF0ZSAmJiBib2R5Ll9yZWFkYWJsZVN0YXRlLmRhdGFFbWl0dGVkKSB8fFxuICAgICAgICBpc1JlYWRhYmxlQWJvcnRlZChib2R5KVxuICApKVxufVxuXG5mdW5jdGlvbiBpc0Vycm9yZWQgKGJvZHkpIHtcbiAgcmV0dXJuICEhKGJvZHkgJiYgKFxuICAgIHN0cmVhbS5pc0Vycm9yZWRcbiAgICAgID8gc3RyZWFtLmlzRXJyb3JlZChib2R5KVxuICAgICAgOiAvc3RhdGU6ICdlcnJvcmVkJy8udGVzdChub2RlVXRpbC5pbnNwZWN0KGJvZHkpXG4gICAgICApKSlcbn1cblxuZnVuY3Rpb24gaXNSZWFkYWJsZSAoYm9keSkge1xuICByZXR1cm4gISEoYm9keSAmJiAoXG4gICAgc3RyZWFtLmlzUmVhZGFibGVcbiAgICAgID8gc3RyZWFtLmlzUmVhZGFibGUoYm9keSlcbiAgICAgIDogL3N0YXRlOiAncmVhZGFibGUnLy50ZXN0KG5vZGVVdGlsLmluc3BlY3QoYm9keSlcbiAgICAgICkpKVxufVxuXG5mdW5jdGlvbiBnZXRTb2NrZXRJbmZvIChzb2NrZXQpIHtcbiAgcmV0dXJuIHtcbiAgICBsb2NhbEFkZHJlc3M6IHNvY2tldC5sb2NhbEFkZHJlc3MsXG4gICAgbG9jYWxQb3J0OiBzb2NrZXQubG9jYWxQb3J0LFxuICAgIHJlbW90ZUFkZHJlc3M6IHNvY2tldC5yZW1vdGVBZGRyZXNzLFxuICAgIHJlbW90ZVBvcnQ6IHNvY2tldC5yZW1vdGVQb3J0LFxuICAgIHJlbW90ZUZhbWlseTogc29ja2V0LnJlbW90ZUZhbWlseSxcbiAgICB0aW1lb3V0OiBzb2NrZXQudGltZW91dCxcbiAgICBieXRlc1dyaXR0ZW46IHNvY2tldC5ieXRlc1dyaXR0ZW4sXG4gICAgYnl0ZXNSZWFkOiBzb2NrZXQuYnl0ZXNSZWFkXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gKiBjb252ZXJ0SXRlcmFibGVUb0J1ZmZlciAoaXRlcmFibGUpIHtcbiAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBpdGVyYWJsZSkge1xuICAgIHlpZWxkIEJ1ZmZlci5pc0J1ZmZlcihjaHVuaykgPyBjaHVuayA6IEJ1ZmZlci5mcm9tKGNodW5rKVxuICB9XG59XG5cbmxldCBSZWFkYWJsZVN0cmVhbVxuZnVuY3Rpb24gUmVhZGFibGVTdHJlYW1Gcm9tIChpdGVyYWJsZSkge1xuICBpZiAoIVJlYWRhYmxlU3RyZWFtKSB7XG4gICAgUmVhZGFibGVTdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0vd2ViJykuUmVhZGFibGVTdHJlYW1cbiAgfVxuXG4gIGlmIChSZWFkYWJsZVN0cmVhbS5mcm9tKSB7XG4gICAgcmV0dXJuIFJlYWRhYmxlU3RyZWFtLmZyb20oY29udmVydEl0ZXJhYmxlVG9CdWZmZXIoaXRlcmFibGUpKVxuICB9XG5cbiAgbGV0IGl0ZXJhdG9yXG4gIHJldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oXG4gICAge1xuICAgICAgYXN5bmMgc3RhcnQgKCkge1xuICAgICAgICBpdGVyYXRvciA9IGl0ZXJhYmxlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpXG4gICAgICB9LFxuICAgICAgYXN5bmMgcHVsbCAoY29udHJvbGxlcikge1xuICAgICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCBpdGVyYXRvci5uZXh0KClcbiAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgICAgICBjb250cm9sbGVyLmNsb3NlKClcbiAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5pc0J1ZmZlcih2YWx1ZSkgPyB2YWx1ZSA6IEJ1ZmZlci5mcm9tKHZhbHVlKVxuICAgICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShuZXcgVWludDhBcnJheShidWYpKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb250cm9sbGVyLmRlc2lyZWRTaXplID4gMFxuICAgICAgfSxcbiAgICAgIGFzeW5jIGNhbmNlbCAocmVhc29uKSB7XG4gICAgICAgIGF3YWl0IGl0ZXJhdG9yLnJldHVybigpXG4gICAgICB9XG4gICAgfSxcbiAgICAwXG4gIClcbn1cblxuLy8gVGhlIGNodW5rIHNob3VsZCBiZSBhIEZvcm1EYXRhIGluc3RhbmNlIGFuZCBjb250YWluc1xuLy8gYWxsIHRoZSByZXF1aXJlZCBtZXRob2RzLlxuZnVuY3Rpb24gaXNGb3JtRGF0YUxpa2UgKG9iamVjdCkge1xuICByZXR1cm4gKFxuICAgIG9iamVjdCAmJlxuICAgIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmXG4gICAgdHlwZW9mIG9iamVjdC5hcHBlbmQgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2Ygb2JqZWN0LmRlbGV0ZSA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBvYmplY3QuZ2V0ID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIG9iamVjdC5nZXRBbGwgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2Ygb2JqZWN0LmhhcyA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBvYmplY3Quc2V0ID09PSAnZnVuY3Rpb24nICYmXG4gICAgb2JqZWN0W1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdGb3JtRGF0YSdcbiAgKVxufVxuXG5mdW5jdGlvbiB0aHJvd0lmQWJvcnRlZCAoc2lnbmFsKSB7XG4gIGlmICghc2lnbmFsKSB7IHJldHVybiB9XG4gIGlmICh0eXBlb2Ygc2lnbmFsLnRocm93SWZBYm9ydGVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgc2lnbmFsLnRocm93SWZBYm9ydGVkKClcbiAgfSBlbHNlIHtcbiAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgIC8vIERPTUV4Y2VwdGlvbiBub3QgYXZhaWxhYmxlIDwgdjE3LjAuMFxuICAgICAgY29uc3QgZXJyID0gbmV3IEVycm9yKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkJylcbiAgICAgIGVyci5uYW1lID0gJ0Fib3J0RXJyb3InXG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYWRkQWJvcnRMaXN0ZW5lciAoc2lnbmFsLCBsaXN0ZW5lcikge1xuICBpZiAoJ2FkZEV2ZW50TGlzdGVuZXInIGluIHNpZ25hbCkge1xuICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIGxpc3RlbmVyLCB7IG9uY2U6IHRydWUgfSlcbiAgICByZXR1cm4gKCkgPT4gc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgbGlzdGVuZXIpXG4gIH1cbiAgc2lnbmFsLmFkZExpc3RlbmVyKCdhYm9ydCcsIGxpc3RlbmVyKVxuICByZXR1cm4gKCkgPT4gc2lnbmFsLnJlbW92ZUxpc3RlbmVyKCdhYm9ydCcsIGxpc3RlbmVyKVxufVxuXG5jb25zdCBoYXNUb1dlbGxGb3JtZWQgPSAhIVN0cmluZy5wcm90b3R5cGUudG9XZWxsRm9ybWVkXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbFxuICovXG5mdW5jdGlvbiB0b1VTVlN0cmluZyAodmFsKSB7XG4gIGlmIChoYXNUb1dlbGxGb3JtZWQpIHtcbiAgICByZXR1cm4gYCR7dmFsfWAudG9XZWxsRm9ybWVkKClcbiAgfSBlbHNlIGlmIChub2RlVXRpbC50b1VTVlN0cmluZykge1xuICAgIHJldHVybiBub2RlVXRpbC50b1VTVlN0cmluZyh2YWwpXG4gIH1cblxuICByZXR1cm4gYCR7dmFsfWBcbn1cblxuLy8gUGFyc2VkIGFjY29yZGluZ2x5IHRvIFJGQyA5MTEwXG4vLyBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjOTExMCNmaWVsZC5jb250ZW50LXJhbmdlXG5mdW5jdGlvbiBwYXJzZVJhbmdlSGVhZGVyIChyYW5nZSkge1xuICBpZiAocmFuZ2UgPT0gbnVsbCB8fCByYW5nZSA9PT0gJycpIHJldHVybiB7IHN0YXJ0OiAwLCBlbmQ6IG51bGwsIHNpemU6IG51bGwgfVxuXG4gIGNvbnN0IG0gPSByYW5nZSA/IHJhbmdlLm1hdGNoKC9eYnl0ZXMgKFxcZCspLShcXGQrKVxcLyhcXGQrKT8kLykgOiBudWxsXG4gIHJldHVybiBtXG4gICAgPyB7XG4gICAgICAgIHN0YXJ0OiBwYXJzZUludChtWzFdKSxcbiAgICAgICAgZW5kOiBtWzJdID8gcGFyc2VJbnQobVsyXSkgOiBudWxsLFxuICAgICAgICBzaXplOiBtWzNdID8gcGFyc2VJbnQobVszXSkgOiBudWxsXG4gICAgICB9XG4gICAgOiBudWxsXG59XG5cbmNvbnN0IGtFbnVtZXJhYmxlUHJvcGVydHkgPSBPYmplY3QuY3JlYXRlKG51bGwpXG5rRW51bWVyYWJsZVByb3BlcnR5LmVudW1lcmFibGUgPSB0cnVlXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBub3AsXG4gIGlzRGlzdHVyYmVkLFxuICBpc0Vycm9yZWQsXG4gIGlzUmVhZGFibGUsXG4gIHRvVVNWU3RyaW5nLFxuICBpc1JlYWRhYmxlQWJvcnRlZCxcbiAgaXNCbG9iTGlrZSxcbiAgcGFyc2VPcmlnaW4sXG4gIHBhcnNlVVJMLFxuICBnZXRTZXJ2ZXJOYW1lLFxuICBpc1N0cmVhbSxcbiAgaXNJdGVyYWJsZSxcbiAgaXNBc3luY0l0ZXJhYmxlLFxuICBpc0Rlc3Ryb3llZCxcbiAgaGVhZGVyTmFtZVRvU3RyaW5nLFxuICBwYXJzZVJhd0hlYWRlcnMsXG4gIHBhcnNlSGVhZGVycyxcbiAgcGFyc2VLZWVwQWxpdmVUaW1lb3V0LFxuICBkZXN0cm95LFxuICBib2R5TGVuZ3RoLFxuICBkZWVwQ2xvbmUsXG4gIFJlYWRhYmxlU3RyZWFtRnJvbSxcbiAgaXNCdWZmZXIsXG4gIHZhbGlkYXRlSGFuZGxlcixcbiAgZ2V0U29ja2V0SW5mbyxcbiAgaXNGb3JtRGF0YUxpa2UsXG4gIGJ1aWxkVVJMLFxuICB0aHJvd0lmQWJvcnRlZCxcbiAgYWRkQWJvcnRMaXN0ZW5lcixcbiAgcGFyc2VSYW5nZUhlYWRlcixcbiAgbm9kZU1ham9yLFxuICBub2RlTWlub3IsXG4gIG5vZGVIYXNBdXRvU2VsZWN0RmFtaWx5OiBub2RlTWFqb3IgPiAxOCB8fCAobm9kZU1ham9yID09PSAxOCAmJiBub2RlTWlub3IgPj0gMTMpLFxuICBzYWZlSFRUUE1ldGhvZHM6IFsnR0VUJywgJ0hFQUQnLCAnT1BUSU9OUycsICdUUkFDRSddXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5sZXQgZmFzdE5vdyA9IERhdGUubm93KClcbmxldCBmYXN0Tm93VGltZW91dFxuXG5jb25zdCBmYXN0VGltZXJzID0gW11cblxuZnVuY3Rpb24gb25UaW1lb3V0ICgpIHtcbiAgZmFzdE5vdyA9IERhdGUubm93KClcblxuICBsZXQgbGVuID0gZmFzdFRpbWVycy5sZW5ndGhcbiAgbGV0IGlkeCA9IDBcbiAgd2hpbGUgKGlkeCA8IGxlbikge1xuICAgIGNvbnN0IHRpbWVyID0gZmFzdFRpbWVyc1tpZHhdXG5cbiAgICBpZiAodGltZXIuc3RhdGUgPT09IDApIHtcbiAgICAgIHRpbWVyLnN0YXRlID0gZmFzdE5vdyArIHRpbWVyLmRlbGF5XG4gICAgfSBlbHNlIGlmICh0aW1lci5zdGF0ZSA+IDAgJiYgZmFzdE5vdyA+PSB0aW1lci5zdGF0ZSkge1xuICAgICAgdGltZXIuc3RhdGUgPSAtMVxuICAgICAgdGltZXIuY2FsbGJhY2sodGltZXIub3BhcXVlKVxuICAgIH1cblxuICAgIGlmICh0aW1lci5zdGF0ZSA9PT0gLTEpIHtcbiAgICAgIHRpbWVyLnN0YXRlID0gLTJcbiAgICAgIGlmIChpZHggIT09IGxlbiAtIDEpIHtcbiAgICAgICAgZmFzdFRpbWVyc1tpZHhdID0gZmFzdFRpbWVycy5wb3AoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmFzdFRpbWVycy5wb3AoKVxuICAgICAgfVxuICAgICAgbGVuIC09IDFcbiAgICB9IGVsc2Uge1xuICAgICAgaWR4ICs9IDFcbiAgICB9XG4gIH1cblxuICBpZiAoZmFzdFRpbWVycy5sZW5ndGggPiAwKSB7XG4gICAgcmVmcmVzaFRpbWVvdXQoKVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlZnJlc2hUaW1lb3V0ICgpIHtcbiAgaWYgKGZhc3ROb3dUaW1lb3V0ICYmIGZhc3ROb3dUaW1lb3V0LnJlZnJlc2gpIHtcbiAgICBmYXN0Tm93VGltZW91dC5yZWZyZXNoKClcbiAgfSBlbHNlIHtcbiAgICBjbGVhclRpbWVvdXQoZmFzdE5vd1RpbWVvdXQpXG4gICAgZmFzdE5vd1RpbWVvdXQgPSBzZXRUaW1lb3V0KG9uVGltZW91dCwgMWUzKVxuICAgIGlmIChmYXN0Tm93VGltZW91dC51bnJlZikge1xuICAgICAgZmFzdE5vd1RpbWVvdXQudW5yZWYoKVxuICAgIH1cbiAgfVxufVxuXG5jbGFzcyBUaW1lb3V0IHtcbiAgY29uc3RydWN0b3IgKGNhbGxiYWNrLCBkZWxheSwgb3BhcXVlKSB7XG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrXG4gICAgdGhpcy5kZWxheSA9IGRlbGF5XG4gICAgdGhpcy5vcGFxdWUgPSBvcGFxdWVcblxuICAgIC8vICAtMiBub3QgaW4gdGltZXIgbGlzdFxuICAgIC8vICAtMSBpbiB0aW1lciBsaXN0IGJ1dCBpbmFjdGl2ZVxuICAgIC8vICAgMCBpbiB0aW1lciBsaXN0IHdhaXRpbmcgZm9yIHRpbWVcbiAgICAvLyA+IDAgaW4gdGltZXIgbGlzdCB3YWl0aW5nIGZvciB0aW1lIHRvIGV4cGlyZVxuICAgIHRoaXMuc3RhdGUgPSAtMlxuXG4gICAgdGhpcy5yZWZyZXNoKClcbiAgfVxuXG4gIHJlZnJlc2ggKCkge1xuICAgIGlmICh0aGlzLnN0YXRlID09PSAtMikge1xuICAgICAgZmFzdFRpbWVycy5wdXNoKHRoaXMpXG4gICAgICBpZiAoIWZhc3ROb3dUaW1lb3V0IHx8IGZhc3RUaW1lcnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJlZnJlc2hUaW1lb3V0KClcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnN0YXRlID0gMFxuICB9XG5cbiAgY2xlYXIgKCkge1xuICAgIHRoaXMuc3RhdGUgPSAtMVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXRUaW1lb3V0IChjYWxsYmFjaywgZGVsYXksIG9wYXF1ZSkge1xuICAgIHJldHVybiBkZWxheSA8IDFlM1xuICAgICAgPyBzZXRUaW1lb3V0KGNhbGxiYWNrLCBkZWxheSwgb3BhcXVlKVxuICAgICAgOiBuZXcgVGltZW91dChjYWxsYmFjaywgZGVsYXksIG9wYXF1ZSlcbiAgfSxcbiAgY2xlYXJUaW1lb3V0ICh0aW1lb3V0KSB7XG4gICAgaWYgKHRpbWVvdXQgaW5zdGFuY2VvZiBUaW1lb3V0KSB7XG4gICAgICB0aW1lb3V0LmNsZWFyKClcbiAgICB9IGVsc2Uge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpXG4gICAgfVxuICB9XG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG4vKipcbiAqIENvcHlyaWdodCBCcmlhbiBXaGl0ZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tc2NkZXgvc3RyZWFtc2VhcmNoXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG9cbiAqIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlXG4gKiByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3JcbiAqIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkdcbiAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1NcbiAqIElOIFRIRSBTT0ZUV0FSRS5cbiAqXG4gKiBCYXNlZCBoZWF2aWx5IG9uIHRoZSBTdHJlYW1pbmcgQm95ZXItTW9vcmUtSG9yc3Bvb2wgQysrIGltcGxlbWVudGF0aW9uXG4gKiBieSBIb25nbGkgTGFpIGF0OiBodHRwczovL2dpdGh1Yi5jb20vRm9vQmFyV2lkZ2V0L2JveWVyLW1vb3JlLWhvcnNwb29sXG4gKi9cbmNvbnN0IEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ25vZGU6ZXZlbnRzJykuRXZlbnRFbWl0dGVyXG5jb25zdCBpbmhlcml0cyA9IHJlcXVpcmUoJ25vZGU6dXRpbCcpLmluaGVyaXRzXG5cbmZ1bmN0aW9uIFNCTUggKG5lZWRsZSkge1xuICBpZiAodHlwZW9mIG5lZWRsZSA9PT0gJ3N0cmluZycpIHtcbiAgICBuZWVkbGUgPSBCdWZmZXIuZnJvbShuZWVkbGUpXG4gIH1cblxuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihuZWVkbGUpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIG5lZWRsZSBoYXMgdG8gYmUgYSBTdHJpbmcgb3IgYSBCdWZmZXIuJylcbiAgfVxuXG4gIGNvbnN0IG5lZWRsZUxlbmd0aCA9IG5lZWRsZS5sZW5ndGhcblxuICBpZiAobmVlZGxlTGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgbmVlZGxlIGNhbm5vdCBiZSBhbiBlbXB0eSBTdHJpbmcvQnVmZmVyLicpXG4gIH1cblxuICBpZiAobmVlZGxlTGVuZ3RoID4gMjU2KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgbmVlZGxlIGNhbm5vdCBoYXZlIGEgbGVuZ3RoIGJpZ2dlciB0aGFuIDI1Ni4nKVxuICB9XG5cbiAgdGhpcy5tYXhNYXRjaGVzID0gSW5maW5pdHlcbiAgdGhpcy5tYXRjaGVzID0gMFxuXG4gIHRoaXMuX29jYyA9IG5ldyBBcnJheSgyNTYpXG4gICAgLmZpbGwobmVlZGxlTGVuZ3RoKSAvLyBJbml0aWFsaXplIG9jY3VycmVuY2UgdGFibGUuXG4gIHRoaXMuX2xvb2tiZWhpbmRfc2l6ZSA9IDBcbiAgdGhpcy5fbmVlZGxlID0gbmVlZGxlXG4gIHRoaXMuX2J1ZnBvcyA9IDBcblxuICB0aGlzLl9sb29rYmVoaW5kID0gQnVmZmVyLmFsbG9jKG5lZWRsZUxlbmd0aClcblxuICAvLyBQb3B1bGF0ZSBvY2N1cnJlbmNlIHRhYmxlIHdpdGggYW5hbHlzaXMgb2YgdGhlIG5lZWRsZSxcbiAgLy8gaWdub3JpbmcgbGFzdCBsZXR0ZXIuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbmVlZGxlTGVuZ3RoIC0gMTsgKytpKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdmFyXG4gICAgdGhpcy5fb2NjW25lZWRsZVtpXV0gPSBuZWVkbGVMZW5ndGggLSAxIC0gaVxuICB9XG59XG5pbmhlcml0cyhTQk1ILCBFdmVudEVtaXR0ZXIpXG5cblNCTUgucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLl9sb29rYmVoaW5kX3NpemUgPSAwXG4gIHRoaXMubWF0Y2hlcyA9IDBcbiAgdGhpcy5fYnVmcG9zID0gMFxufVxuXG5TQk1ILnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGNodW5rLCBwb3MpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoY2h1bmspKSB7XG4gICAgY2h1bmsgPSBCdWZmZXIuZnJvbShjaHVuaywgJ2JpbmFyeScpXG4gIH1cbiAgY29uc3QgY2hsZW4gPSBjaHVuay5sZW5ndGhcbiAgdGhpcy5fYnVmcG9zID0gcG9zIHx8IDBcbiAgbGV0IHJcbiAgd2hpbGUgKHIgIT09IGNobGVuICYmIHRoaXMubWF0Y2hlcyA8IHRoaXMubWF4TWF0Y2hlcykgeyByID0gdGhpcy5fc2JtaF9mZWVkKGNodW5rKSB9XG4gIHJldHVybiByXG59XG5cblNCTUgucHJvdG90eXBlLl9zYm1oX2ZlZWQgPSBmdW5jdGlvbiAoZGF0YSkge1xuICBjb25zdCBsZW4gPSBkYXRhLmxlbmd0aFxuICBjb25zdCBuZWVkbGUgPSB0aGlzLl9uZWVkbGVcbiAgY29uc3QgbmVlZGxlTGVuZ3RoID0gbmVlZGxlLmxlbmd0aFxuICBjb25zdCBsYXN0TmVlZGxlQ2hhciA9IG5lZWRsZVtuZWVkbGVMZW5ndGggLSAxXVxuXG4gIC8vIFBvc2l0aXZlOiBwb2ludHMgdG8gYSBwb3NpdGlvbiBpbiBgZGF0YWBcbiAgLy8gICAgICAgICAgIHBvcyA9PSAzIHBvaW50cyB0byBkYXRhWzNdXG4gIC8vIE5lZ2F0aXZlOiBwb2ludHMgdG8gYSBwb3NpdGlvbiBpbiB0aGUgbG9va2JlaGluZCBidWZmZXJcbiAgLy8gICAgICAgICAgIHBvcyA9PSAtMiBwb2ludHMgdG8gbG9va2JlaGluZFtsb29rYmVoaW5kX3NpemUgLSAyXVxuICBsZXQgcG9zID0gLXRoaXMuX2xvb2tiZWhpbmRfc2l6ZVxuICBsZXQgY2hcblxuICBpZiAocG9zIDwgMCkge1xuICAgIC8vIExvb2tiZWhpbmQgYnVmZmVyIGlzIG5vdCBlbXB0eS4gUGVyZm9ybSBCb3llci1Nb29yZS1Ib3JzcG9vbFxuICAgIC8vIHNlYXJjaCB3aXRoIGNoYXJhY3RlciBsb29rdXAgY29kZSB0aGF0IGNvbnNpZGVycyBib3RoIHRoZVxuICAgIC8vIGxvb2tiZWhpbmQgYnVmZmVyIGFuZCB0aGUgY3VycmVudCByb3VuZCdzIGhheXN0YWNrIGRhdGEuXG4gICAgLy9cbiAgICAvLyBMb29wIHVudGlsXG4gICAgLy8gICB0aGVyZSBpcyBhIG1hdGNoLlxuICAgIC8vIG9yIHVudGlsXG4gICAgLy8gICB3ZSd2ZSBtb3ZlZCBwYXN0IHRoZSBwb3NpdGlvbiB0aGF0IHJlcXVpcmVzIHRoZVxuICAgIC8vICAgbG9va2JlaGluZCBidWZmZXIuIEluIHRoaXMgY2FzZSB3ZSBzd2l0Y2ggdG8gdGhlXG4gICAgLy8gICBvcHRpbWl6ZWQgbG9vcC5cbiAgICAvLyBvciB1bnRpbFxuICAgIC8vICAgdGhlIGNoYXJhY3RlciB0byBsb29rIGF0IGxpZXMgb3V0c2lkZSB0aGUgaGF5c3RhY2suXG4gICAgd2hpbGUgKHBvcyA8IDAgJiYgcG9zIDw9IGxlbiAtIG5lZWRsZUxlbmd0aCkge1xuICAgICAgY2ggPSB0aGlzLl9zYm1oX2xvb2t1cF9jaGFyKGRhdGEsIHBvcyArIG5lZWRsZUxlbmd0aCAtIDEpXG5cbiAgICAgIGlmIChcbiAgICAgICAgY2ggPT09IGxhc3ROZWVkbGVDaGFyICYmXG4gICAgICAgIHRoaXMuX3NibWhfbWVtY21wKGRhdGEsIHBvcywgbmVlZGxlTGVuZ3RoIC0gMSlcbiAgICAgICkge1xuICAgICAgICB0aGlzLl9sb29rYmVoaW5kX3NpemUgPSAwXG4gICAgICAgICsrdGhpcy5tYXRjaGVzXG4gICAgICAgIHRoaXMuZW1pdCgnaW5mbycsIHRydWUpXG5cbiAgICAgICAgcmV0dXJuICh0aGlzLl9idWZwb3MgPSBwb3MgKyBuZWVkbGVMZW5ndGgpXG4gICAgICB9XG4gICAgICBwb3MgKz0gdGhpcy5fb2NjW2NoXVxuICAgIH1cblxuICAgIC8vIE5vIG1hdGNoLlxuXG4gICAgaWYgKHBvcyA8IDApIHtcbiAgICAgIC8vIFRoZXJlJ3MgdG9vIGZldyBkYXRhIGZvciBCb3llci1Nb29yZS1Ib3JzcG9vbCB0byBydW4sXG4gICAgICAvLyBzbyBsZXQncyB1c2UgYSBkaWZmZXJlbnQgYWxnb3JpdGhtIHRvIHNraXAgYXMgbXVjaCBhc1xuICAgICAgLy8gd2UgY2FuLlxuICAgICAgLy8gRm9yd2FyZCBwb3MgdW50aWxcbiAgICAgIC8vICAgdGhlIHRyYWlsaW5nIHBhcnQgb2YgbG9va2JlaGluZCArIGRhdGFcbiAgICAgIC8vICAgbG9va3MgbGlrZSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZWVkbGVcbiAgICAgIC8vIG9yIHVudGlsXG4gICAgICAvLyAgIHBvcyA9PSAwXG4gICAgICB3aGlsZSAocG9zIDwgMCAmJiAhdGhpcy5fc2JtaF9tZW1jbXAoZGF0YSwgcG9zLCBsZW4gLSBwb3MpKSB7ICsrcG9zIH1cbiAgICB9XG5cbiAgICBpZiAocG9zID49IDApIHtcbiAgICAgIC8vIERpc2NhcmQgbG9va2JlaGluZCBidWZmZXIuXG4gICAgICB0aGlzLmVtaXQoJ2luZm8nLCBmYWxzZSwgdGhpcy5fbG9va2JlaGluZCwgMCwgdGhpcy5fbG9va2JlaGluZF9zaXplKVxuICAgICAgdGhpcy5fbG9va2JlaGluZF9zaXplID0gMFxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDdXQgb2ZmIHBhcnQgb2YgdGhlIGxvb2tiZWhpbmQgYnVmZmVyIHRoYXQgaGFzXG4gICAgICAvLyBiZWVuIHByb2Nlc3NlZCBhbmQgYXBwZW5kIHRoZSBlbnRpcmUgaGF5c3RhY2tcbiAgICAgIC8vIGludG8gaXQuXG4gICAgICBjb25zdCBieXRlc1RvQ3V0T2ZmID0gdGhpcy5fbG9va2JlaGluZF9zaXplICsgcG9zXG4gICAgICBpZiAoYnl0ZXNUb0N1dE9mZiA+IDApIHtcbiAgICAgICAgLy8gVGhlIGN1dCBvZmYgZGF0YSBpcyBndWFyYW50ZWVkIG5vdCB0byBjb250YWluIHRoZSBuZWVkbGUuXG4gICAgICAgIHRoaXMuZW1pdCgnaW5mbycsIGZhbHNlLCB0aGlzLl9sb29rYmVoaW5kLCAwLCBieXRlc1RvQ3V0T2ZmKVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9sb29rYmVoaW5kLmNvcHkodGhpcy5fbG9va2JlaGluZCwgMCwgYnl0ZXNUb0N1dE9mZixcbiAgICAgICAgdGhpcy5fbG9va2JlaGluZF9zaXplIC0gYnl0ZXNUb0N1dE9mZilcbiAgICAgIHRoaXMuX2xvb2tiZWhpbmRfc2l6ZSAtPSBieXRlc1RvQ3V0T2ZmXG5cbiAgICAgIGRhdGEuY29weSh0aGlzLl9sb29rYmVoaW5kLCB0aGlzLl9sb29rYmVoaW5kX3NpemUpXG4gICAgICB0aGlzLl9sb29rYmVoaW5kX3NpemUgKz0gbGVuXG5cbiAgICAgIHRoaXMuX2J1ZnBvcyA9IGxlblxuICAgICAgcmV0dXJuIGxlblxuICAgIH1cbiAgfVxuXG4gIHBvcyArPSAocG9zID49IDApICogdGhpcy5fYnVmcG9zXG5cbiAgLy8gTG9va2JlaGluZCBidWZmZXIgaXMgbm93IGVtcHR5LiBXZSBvbmx5IG5lZWQgdG8gY2hlY2sgaWYgdGhlXG4gIC8vIG5lZWRsZSBpcyBpbiB0aGUgaGF5c3RhY2suXG4gIGlmIChkYXRhLmluZGV4T2YobmVlZGxlLCBwb3MpICE9PSAtMSkge1xuICAgIHBvcyA9IGRhdGEuaW5kZXhPZihuZWVkbGUsIHBvcylcbiAgICArK3RoaXMubWF0Y2hlc1xuICAgIGlmIChwb3MgPiAwKSB7IHRoaXMuZW1pdCgnaW5mbycsIHRydWUsIGRhdGEsIHRoaXMuX2J1ZnBvcywgcG9zKSB9IGVsc2UgeyB0aGlzLmVtaXQoJ2luZm8nLCB0cnVlKSB9XG5cbiAgICByZXR1cm4gKHRoaXMuX2J1ZnBvcyA9IHBvcyArIG5lZWRsZUxlbmd0aClcbiAgfSBlbHNlIHtcbiAgICBwb3MgPSBsZW4gLSBuZWVkbGVMZW5ndGhcbiAgfVxuXG4gIC8vIFRoZXJlIHdhcyBubyBtYXRjaC4gSWYgdGhlcmUncyB0cmFpbGluZyBoYXlzdGFjayBkYXRhIHRoYXQgd2UgY2Fubm90XG4gIC8vIG1hdGNoIHlldCB1c2luZyB0aGUgQm95ZXItTW9vcmUtSG9yc3Bvb2wgYWxnb3JpdGhtIChiZWNhdXNlIHRoZSB0cmFpbGluZ1xuICAvLyBkYXRhIGlzIGxlc3MgdGhhbiB0aGUgbmVlZGxlIHNpemUpIHRoZW4gbWF0Y2ggdXNpbmcgYSBtb2RpZmllZFxuICAvLyBhbGdvcml0aG0gdGhhdCBzdGFydHMgbWF0Y2hpbmcgZnJvbSB0aGUgYmVnaW5uaW5nIGluc3RlYWQgb2YgdGhlIGVuZC5cbiAgLy8gV2hhdGV2ZXIgdHJhaWxpbmcgZGF0YSBpcyBsZWZ0IGFmdGVyIHJ1bm5pbmcgdGhpcyBhbGdvcml0aG0gaXMgYWRkZWQgdG9cbiAgLy8gdGhlIGxvb2tiZWhpbmQgYnVmZmVyLlxuICB3aGlsZSAoXG4gICAgcG9zIDwgbGVuICYmXG4gICAgKFxuICAgICAgZGF0YVtwb3NdICE9PSBuZWVkbGVbMF0gfHxcbiAgICAgIChcbiAgICAgICAgKEJ1ZmZlci5jb21wYXJlKFxuICAgICAgICAgIGRhdGEuc3ViYXJyYXkocG9zLCBwb3MgKyBsZW4gLSBwb3MpLFxuICAgICAgICAgIG5lZWRsZS5zdWJhcnJheSgwLCBsZW4gLSBwb3MpXG4gICAgICAgICkgIT09IDApXG4gICAgICApXG4gICAgKVxuICApIHtcbiAgICArK3Bvc1xuICB9XG4gIGlmIChwb3MgPCBsZW4pIHtcbiAgICBkYXRhLmNvcHkodGhpcy5fbG9va2JlaGluZCwgMCwgcG9zLCBwb3MgKyAobGVuIC0gcG9zKSlcbiAgICB0aGlzLl9sb29rYmVoaW5kX3NpemUgPSBsZW4gLSBwb3NcbiAgfVxuXG4gIC8vIEV2ZXJ5dGhpbmcgdW50aWwgcG9zIGlzIGd1YXJhbnRlZWQgbm90IHRvIGNvbnRhaW4gbmVlZGxlIGRhdGEuXG4gIGlmIChwb3MgPiAwKSB7IHRoaXMuZW1pdCgnaW5mbycsIGZhbHNlLCBkYXRhLCB0aGlzLl9idWZwb3MsIHBvcyA8IGxlbiA/IHBvcyA6IGxlbikgfVxuXG4gIHRoaXMuX2J1ZnBvcyA9IGxlblxuICByZXR1cm4gbGVuXG59XG5cblNCTUgucHJvdG90eXBlLl9zYm1oX2xvb2t1cF9jaGFyID0gZnVuY3Rpb24gKGRhdGEsIHBvcykge1xuICByZXR1cm4gKHBvcyA8IDApXG4gICAgPyB0aGlzLl9sb29rYmVoaW5kW3RoaXMuX2xvb2tiZWhpbmRfc2l6ZSArIHBvc11cbiAgICA6IGRhdGFbcG9zXVxufVxuXG5TQk1ILnByb3RvdHlwZS5fc2JtaF9tZW1jbXAgPSBmdW5jdGlvbiAoZGF0YSwgcG9zLCBsZW4pIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXZhclxuICAgIGlmICh0aGlzLl9zYm1oX2xvb2t1cF9jaGFyKGRhdGEsIHBvcyArIGkpICE9PSB0aGlzLl9uZWVkbGVbaV0pIHsgcmV0dXJuIGZhbHNlIH1cbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNCTUhcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGluaGVyaXRzID0gcmVxdWlyZSgnbm9kZTp1dGlsJykuaW5oZXJpdHNcbmNvbnN0IFJlYWRhYmxlU3RyZWFtID0gcmVxdWlyZSgnbm9kZTpzdHJlYW0nKS5SZWFkYWJsZVxuXG5mdW5jdGlvbiBQYXJ0U3RyZWFtIChvcHRzKSB7XG4gIFJlYWRhYmxlU3RyZWFtLmNhbGwodGhpcywgb3B0cylcbn1cbmluaGVyaXRzKFBhcnRTdHJlYW0sIFJlYWRhYmxlU3RyZWFtKVxuXG5QYXJ0U3RyZWFtLnByb3RvdHlwZS5fcmVhZCA9IGZ1bmN0aW9uIChuKSB7fVxuXG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRTdHJlYW1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0TGltaXQgKGxpbWl0cywgbmFtZSwgZGVmYXVsdExpbWl0KSB7XG4gIGlmIChcbiAgICAhbGltaXRzIHx8XG4gICAgbGltaXRzW25hbWVdID09PSB1bmRlZmluZWQgfHxcbiAgICBsaW1pdHNbbmFtZV0gPT09IG51bGxcbiAgKSB7IHJldHVybiBkZWZhdWx0TGltaXQgfVxuXG4gIGlmIChcbiAgICB0eXBlb2YgbGltaXRzW25hbWVdICE9PSAnbnVtYmVyJyB8fFxuICAgIGlzTmFOKGxpbWl0c1tuYW1lXSlcbiAgKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoJ0xpbWl0ICcgKyBuYW1lICsgJyBpcyBub3QgYSB2YWxpZCBudW1iZXInKSB9XG5cbiAgcmV0dXJuIGxpbWl0c1tuYW1lXVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnbm9kZTpldmVudHMnKS5FdmVudEVtaXR0ZXJcbmNvbnN0IGluaGVyaXRzID0gcmVxdWlyZSgnbm9kZTp1dGlsJykuaW5oZXJpdHNcbmNvbnN0IGdldExpbWl0ID0gcmVxdWlyZSgnLi4vLi4vLi4vbGliL3V0aWxzL2dldExpbWl0JylcblxuY29uc3QgU3RyZWFtU2VhcmNoID0gcmVxdWlyZSgnLi4vLi4vc3RyZWFtc2VhcmNoL3NibWgnKVxuXG5jb25zdCBCX0RDUkxGID0gQnVmZmVyLmZyb20oJ1xcclxcblxcclxcbicpXG5jb25zdCBSRV9DUkxGID0gL1xcclxcbi9nXG5jb25zdCBSRV9IRFIgPSAvXihbXjpdKyk6WyBcXHRdPyhbXFx4MDAtXFx4RkZdKyk/JC8gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb250cm9sLXJlZ2V4XG5cbmZ1bmN0aW9uIEhlYWRlclBhcnNlciAoY2ZnKSB7XG4gIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpXG5cbiAgY2ZnID0gY2ZnIHx8IHt9XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIHRoaXMubnJlYWQgPSAwXG4gIHRoaXMubWF4ZWQgPSBmYWxzZVxuICB0aGlzLm5wYWlycyA9IDBcbiAgdGhpcy5tYXhIZWFkZXJQYWlycyA9IGdldExpbWl0KGNmZywgJ21heEhlYWRlclBhaXJzJywgMjAwMClcbiAgdGhpcy5tYXhIZWFkZXJTaXplID0gZ2V0TGltaXQoY2ZnLCAnbWF4SGVhZGVyU2l6ZScsIDgwICogMTAyNClcbiAgdGhpcy5idWZmZXIgPSAnJ1xuICB0aGlzLmhlYWRlciA9IHt9XG4gIHRoaXMuZmluaXNoZWQgPSBmYWxzZVxuICB0aGlzLnNzID0gbmV3IFN0cmVhbVNlYXJjaChCX0RDUkxGKVxuICB0aGlzLnNzLm9uKCdpbmZvJywgZnVuY3Rpb24gKGlzTWF0Y2gsIGRhdGEsIHN0YXJ0LCBlbmQpIHtcbiAgICBpZiAoZGF0YSAmJiAhc2VsZi5tYXhlZCkge1xuICAgICAgaWYgKHNlbGYubnJlYWQgKyBlbmQgLSBzdGFydCA+PSBzZWxmLm1heEhlYWRlclNpemUpIHtcbiAgICAgICAgZW5kID0gc2VsZi5tYXhIZWFkZXJTaXplIC0gc2VsZi5ucmVhZCArIHN0YXJ0XG4gICAgICAgIHNlbGYubnJlYWQgPSBzZWxmLm1heEhlYWRlclNpemVcbiAgICAgICAgc2VsZi5tYXhlZCA9IHRydWVcbiAgICAgIH0gZWxzZSB7IHNlbGYubnJlYWQgKz0gKGVuZCAtIHN0YXJ0KSB9XG5cbiAgICAgIHNlbGYuYnVmZmVyICs9IGRhdGEudG9TdHJpbmcoJ2JpbmFyeScsIHN0YXJ0LCBlbmQpXG4gICAgfVxuICAgIGlmIChpc01hdGNoKSB7IHNlbGYuX2ZpbmlzaCgpIH1cbiAgfSlcbn1cbmluaGVyaXRzKEhlYWRlclBhcnNlciwgRXZlbnRFbWl0dGVyKVxuXG5IZWFkZXJQYXJzZXIucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoZGF0YSkge1xuICBjb25zdCByID0gdGhpcy5zcy5wdXNoKGRhdGEpXG4gIGlmICh0aGlzLmZpbmlzaGVkKSB7IHJldHVybiByIH1cbn1cblxuSGVhZGVyUGFyc2VyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5maW5pc2hlZCA9IGZhbHNlXG4gIHRoaXMuYnVmZmVyID0gJydcbiAgdGhpcy5oZWFkZXIgPSB7fVxuICB0aGlzLnNzLnJlc2V0KClcbn1cblxuSGVhZGVyUGFyc2VyLnByb3RvdHlwZS5fZmluaXNoID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5idWZmZXIpIHsgdGhpcy5fcGFyc2VIZWFkZXIoKSB9XG4gIHRoaXMuc3MubWF0Y2hlcyA9IHRoaXMuc3MubWF4TWF0Y2hlc1xuICBjb25zdCBoZWFkZXIgPSB0aGlzLmhlYWRlclxuICB0aGlzLmhlYWRlciA9IHt9XG4gIHRoaXMuYnVmZmVyID0gJydcbiAgdGhpcy5maW5pc2hlZCA9IHRydWVcbiAgdGhpcy5ucmVhZCA9IHRoaXMubnBhaXJzID0gMFxuICB0aGlzLm1heGVkID0gZmFsc2VcbiAgdGhpcy5lbWl0KCdoZWFkZXInLCBoZWFkZXIpXG59XG5cbkhlYWRlclBhcnNlci5wcm90b3R5cGUuX3BhcnNlSGVhZGVyID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5ucGFpcnMgPT09IHRoaXMubWF4SGVhZGVyUGFpcnMpIHsgcmV0dXJuIH1cblxuICBjb25zdCBsaW5lcyA9IHRoaXMuYnVmZmVyLnNwbGl0KFJFX0NSTEYpXG4gIGNvbnN0IGxlbiA9IGxpbmVzLmxlbmd0aFxuICBsZXQgbSwgaFxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby12YXJcbiAgICBpZiAobGluZXNbaV0ubGVuZ3RoID09PSAwKSB7IGNvbnRpbnVlIH1cbiAgICBpZiAobGluZXNbaV1bMF0gPT09ICdcXHQnIHx8IGxpbmVzW2ldWzBdID09PSAnICcpIHtcbiAgICAgIC8vIGZvbGRlZCBoZWFkZXIgY29udGVudFxuICAgICAgLy8gUkZDMjgyMiBzYXlzIHRvIGp1c3QgcmVtb3ZlIHRoZSBDUkxGIGFuZCBub3QgdGhlIHdoaXRlc3BhY2UgZm9sbG93aW5nXG4gICAgICAvLyBpdCwgc28gd2UgZm9sbG93IHRoZSBSRkMgYW5kIGluY2x1ZGUgdGhlIGxlYWRpbmcgd2hpdGVzcGFjZSAuLi5cbiAgICAgIGlmIChoKSB7XG4gICAgICAgIHRoaXMuaGVhZGVyW2hdW3RoaXMuaGVhZGVyW2hdLmxlbmd0aCAtIDFdICs9IGxpbmVzW2ldXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcG9zQ29sb24gPSBsaW5lc1tpXS5pbmRleE9mKCc6JylcbiAgICBpZiAoXG4gICAgICBwb3NDb2xvbiA9PT0gLTEgfHxcbiAgICAgIHBvc0NvbG9uID09PSAwXG4gICAgKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgbSA9IFJFX0hEUi5leGVjKGxpbmVzW2ldKVxuICAgIGggPSBtWzFdLnRvTG93ZXJDYXNlKClcbiAgICB0aGlzLmhlYWRlcltoXSA9IHRoaXMuaGVhZGVyW2hdIHx8IFtdXG4gICAgdGhpcy5oZWFkZXJbaF0ucHVzaCgobVsyXSB8fCAnJykpXG4gICAgaWYgKCsrdGhpcy5ucGFpcnMgPT09IHRoaXMubWF4SGVhZGVyUGFpcnMpIHsgYnJlYWsgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gSGVhZGVyUGFyc2VyXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBXcml0YWJsZVN0cmVhbSA9IHJlcXVpcmUoJ25vZGU6c3RyZWFtJykuV3JpdGFibGVcbmNvbnN0IGluaGVyaXRzID0gcmVxdWlyZSgnbm9kZTp1dGlsJykuaW5oZXJpdHNcblxuY29uc3QgU3RyZWFtU2VhcmNoID0gcmVxdWlyZSgnLi4vLi4vc3RyZWFtc2VhcmNoL3NibWgnKVxuXG5jb25zdCBQYXJ0U3RyZWFtID0gcmVxdWlyZSgnLi9QYXJ0U3RyZWFtJylcbmNvbnN0IEhlYWRlclBhcnNlciA9IHJlcXVpcmUoJy4vSGVhZGVyUGFyc2VyJylcblxuY29uc3QgREFTSCA9IDQ1XG5jb25zdCBCX09ORURBU0ggPSBCdWZmZXIuZnJvbSgnLScpXG5jb25zdCBCX0NSTEYgPSBCdWZmZXIuZnJvbSgnXFxyXFxuJylcbmNvbnN0IEVNUFRZX0ZOID0gZnVuY3Rpb24gKCkge31cblxuZnVuY3Rpb24gRGljZXIgKGNmZykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRGljZXIpKSB7IHJldHVybiBuZXcgRGljZXIoY2ZnKSB9XG4gIFdyaXRhYmxlU3RyZWFtLmNhbGwodGhpcywgY2ZnKVxuXG4gIGlmICghY2ZnIHx8ICghY2ZnLmhlYWRlckZpcnN0ICYmIHR5cGVvZiBjZmcuYm91bmRhcnkgIT09ICdzdHJpbmcnKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCdCb3VuZGFyeSByZXF1aXJlZCcpIH1cblxuICBpZiAodHlwZW9mIGNmZy5ib3VuZGFyeSA9PT0gJ3N0cmluZycpIHsgdGhpcy5zZXRCb3VuZGFyeShjZmcuYm91bmRhcnkpIH0gZWxzZSB7IHRoaXMuX2JwYXJzZXIgPSB1bmRlZmluZWQgfVxuXG4gIHRoaXMuX2hlYWRlckZpcnN0ID0gY2ZnLmhlYWRlckZpcnN0XG5cbiAgdGhpcy5fZGFzaGVzID0gMFxuICB0aGlzLl9wYXJ0cyA9IDBcbiAgdGhpcy5fZmluaXNoZWQgPSBmYWxzZVxuICB0aGlzLl9yZWFsRmluaXNoID0gZmFsc2VcbiAgdGhpcy5faXNQcmVhbWJsZSA9IHRydWVcbiAgdGhpcy5fanVzdE1hdGNoZWQgPSBmYWxzZVxuICB0aGlzLl9maXJzdFdyaXRlID0gdHJ1ZVxuICB0aGlzLl9pbkhlYWRlciA9IHRydWVcbiAgdGhpcy5fcGFydCA9IHVuZGVmaW5lZFxuICB0aGlzLl9jYiA9IHVuZGVmaW5lZFxuICB0aGlzLl9pZ25vcmVEYXRhID0gZmFsc2VcbiAgdGhpcy5fcGFydE9wdHMgPSB7IGhpZ2hXYXRlck1hcms6IGNmZy5wYXJ0SHdtIH1cbiAgdGhpcy5fcGF1c2UgPSBmYWxzZVxuXG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIHRoaXMuX2hwYXJzZXIgPSBuZXcgSGVhZGVyUGFyc2VyKGNmZylcbiAgdGhpcy5faHBhcnNlci5vbignaGVhZGVyJywgZnVuY3Rpb24gKGhlYWRlcikge1xuICAgIHNlbGYuX2luSGVhZGVyID0gZmFsc2VcbiAgICBzZWxmLl9wYXJ0LmVtaXQoJ2hlYWRlcicsIGhlYWRlcilcbiAgfSlcbn1cbmluaGVyaXRzKERpY2VyLCBXcml0YWJsZVN0cmVhbSlcblxuRGljZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiAoZXYpIHtcbiAgaWYgKGV2ID09PSAnZmluaXNoJyAmJiAhdGhpcy5fcmVhbEZpbmlzaCkge1xuICAgIGlmICghdGhpcy5fZmluaXNoZWQpIHtcbiAgICAgIGNvbnN0IHNlbGYgPSB0aGlzXG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2VsZi5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcignVW5leHBlY3RlZCBlbmQgb2YgbXVsdGlwYXJ0IGRhdGEnKSlcbiAgICAgICAgaWYgKHNlbGYuX3BhcnQgJiYgIXNlbGYuX2lnbm9yZURhdGEpIHtcbiAgICAgICAgICBjb25zdCB0eXBlID0gKHNlbGYuX2lzUHJlYW1ibGUgPyAnUHJlYW1ibGUnIDogJ1BhcnQnKVxuICAgICAgICAgIHNlbGYuX3BhcnQuZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IodHlwZSArICcgdGVybWluYXRlZCBlYXJseSBkdWUgdG8gdW5leHBlY3RlZCBlbmQgb2YgbXVsdGlwYXJ0IGRhdGEnKSlcbiAgICAgICAgICBzZWxmLl9wYXJ0LnB1c2gobnVsbClcbiAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHNlbGYuX3JlYWxGaW5pc2ggPSB0cnVlXG4gICAgICAgICAgICBzZWxmLmVtaXQoJ2ZpbmlzaCcpXG4gICAgICAgICAgICBzZWxmLl9yZWFsRmluaXNoID0gZmFsc2VcbiAgICAgICAgICB9KVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIHNlbGYuX3JlYWxGaW5pc2ggPSB0cnVlXG4gICAgICAgIHNlbGYuZW1pdCgnZmluaXNoJylcbiAgICAgICAgc2VsZi5fcmVhbEZpbmlzaCA9IGZhbHNlXG4gICAgICB9KVxuICAgIH1cbiAgfSBlbHNlIHsgV3JpdGFibGVTdHJlYW0ucHJvdG90eXBlLmVtaXQuYXBwbHkodGhpcywgYXJndW1lbnRzKSB9XG59XG5cbkRpY2VyLnByb3RvdHlwZS5fd3JpdGUgPSBmdW5jdGlvbiAoZGF0YSwgZW5jb2RpbmcsIGNiKSB7XG4gIC8vIGlnbm9yZSB1bmV4cGVjdGVkIGRhdGEgKGUuZy4gZXh0cmEgdHJhaWxlciBkYXRhIGFmdGVyIGZpbmlzaGVkKVxuICBpZiAoIXRoaXMuX2hwYXJzZXIgJiYgIXRoaXMuX2JwYXJzZXIpIHsgcmV0dXJuIGNiKCkgfVxuXG4gIGlmICh0aGlzLl9oZWFkZXJGaXJzdCAmJiB0aGlzLl9pc1ByZWFtYmxlKSB7XG4gICAgaWYgKCF0aGlzLl9wYXJ0KSB7XG4gICAgICB0aGlzLl9wYXJ0ID0gbmV3IFBhcnRTdHJlYW0odGhpcy5fcGFydE9wdHMpXG4gICAgICBpZiAodGhpcy5saXN0ZW5lckNvdW50KCdwcmVhbWJsZScpICE9PSAwKSB7IHRoaXMuZW1pdCgncHJlYW1ibGUnLCB0aGlzLl9wYXJ0KSB9IGVsc2UgeyB0aGlzLl9pZ25vcmUoKSB9XG4gICAgfVxuICAgIGNvbnN0IHIgPSB0aGlzLl9ocGFyc2VyLnB1c2goZGF0YSlcbiAgICBpZiAoIXRoaXMuX2luSGVhZGVyICYmIHIgIT09IHVuZGVmaW5lZCAmJiByIDwgZGF0YS5sZW5ndGgpIHsgZGF0YSA9IGRhdGEuc2xpY2UocikgfSBlbHNlIHsgcmV0dXJuIGNiKCkgfVxuICB9XG5cbiAgLy8gYWxsb3dzIGZvciBcImVhc2llclwiIHRlc3RpbmdcbiAgaWYgKHRoaXMuX2ZpcnN0V3JpdGUpIHtcbiAgICB0aGlzLl9icGFyc2VyLnB1c2goQl9DUkxGKVxuICAgIHRoaXMuX2ZpcnN0V3JpdGUgPSBmYWxzZVxuICB9XG5cbiAgdGhpcy5fYnBhcnNlci5wdXNoKGRhdGEpXG5cbiAgaWYgKHRoaXMuX3BhdXNlKSB7IHRoaXMuX2NiID0gY2IgfSBlbHNlIHsgY2IoKSB9XG59XG5cbkRpY2VyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5fcGFydCA9IHVuZGVmaW5lZFxuICB0aGlzLl9icGFyc2VyID0gdW5kZWZpbmVkXG4gIHRoaXMuX2hwYXJzZXIgPSB1bmRlZmluZWRcbn1cblxuRGljZXIucHJvdG90eXBlLnNldEJvdW5kYXJ5ID0gZnVuY3Rpb24gKGJvdW5kYXJ5KSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIHRoaXMuX2JwYXJzZXIgPSBuZXcgU3RyZWFtU2VhcmNoKCdcXHJcXG4tLScgKyBib3VuZGFyeSlcbiAgdGhpcy5fYnBhcnNlci5vbignaW5mbycsIGZ1bmN0aW9uIChpc01hdGNoLCBkYXRhLCBzdGFydCwgZW5kKSB7XG4gICAgc2VsZi5fb25pbmZvKGlzTWF0Y2gsIGRhdGEsIHN0YXJ0LCBlbmQpXG4gIH0pXG59XG5cbkRpY2VyLnByb3RvdHlwZS5faWdub3JlID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5fcGFydCAmJiAhdGhpcy5faWdub3JlRGF0YSkge1xuICAgIHRoaXMuX2lnbm9yZURhdGEgPSB0cnVlXG4gICAgdGhpcy5fcGFydC5vbignZXJyb3InLCBFTVBUWV9GTilcbiAgICAvLyB3ZSBtdXN0IHBlcmZvcm0gc29tZSBraW5kIG9mIHJlYWQgb24gdGhlIHN0cmVhbSBldmVuIHRob3VnaCB3ZSBhcmVcbiAgICAvLyBpZ25vcmluZyB0aGUgZGF0YSwgb3RoZXJ3aXNlIG5vZGUncyBSZWFkYWJsZSBzdHJlYW0gd2lsbCBub3QgZW1pdCAnZW5kJ1xuICAgIC8vIGFmdGVyIHB1c2hpbmcgbnVsbCB0byB0aGUgc3RyZWFtXG4gICAgdGhpcy5fcGFydC5yZXN1bWUoKVxuICB9XG59XG5cbkRpY2VyLnByb3RvdHlwZS5fb25pbmZvID0gZnVuY3Rpb24gKGlzTWF0Y2gsIGRhdGEsIHN0YXJ0LCBlbmQpIHtcbiAgbGV0IGJ1ZjsgY29uc3Qgc2VsZiA9IHRoaXM7IGxldCBpID0gMDsgbGV0IHI7IGxldCBzaG91bGRXcml0ZU1vcmUgPSB0cnVlXG5cbiAgaWYgKCF0aGlzLl9wYXJ0ICYmIHRoaXMuX2p1c3RNYXRjaGVkICYmIGRhdGEpIHtcbiAgICB3aGlsZSAodGhpcy5fZGFzaGVzIDwgMiAmJiAoc3RhcnQgKyBpKSA8IGVuZCkge1xuICAgICAgaWYgKGRhdGFbc3RhcnQgKyBpXSA9PT0gREFTSCkge1xuICAgICAgICArK2lcbiAgICAgICAgKyt0aGlzLl9kYXNoZXNcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLl9kYXNoZXMpIHsgYnVmID0gQl9PTkVEQVNIIH1cbiAgICAgICAgdGhpcy5fZGFzaGVzID0gMFxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5fZGFzaGVzID09PSAyKSB7XG4gICAgICBpZiAoKHN0YXJ0ICsgaSkgPCBlbmQgJiYgdGhpcy5saXN0ZW5lckNvdW50KCd0cmFpbGVyJykgIT09IDApIHsgdGhpcy5lbWl0KCd0cmFpbGVyJywgZGF0YS5zbGljZShzdGFydCArIGksIGVuZCkpIH1cbiAgICAgIHRoaXMucmVzZXQoKVxuICAgICAgdGhpcy5fZmluaXNoZWQgPSB0cnVlXG4gICAgICAvLyBubyBtb3JlIHBhcnRzIHdpbGwgYmUgYWRkZWRcbiAgICAgIGlmIChzZWxmLl9wYXJ0cyA9PT0gMCkge1xuICAgICAgICBzZWxmLl9yZWFsRmluaXNoID0gdHJ1ZVxuICAgICAgICBzZWxmLmVtaXQoJ2ZpbmlzaCcpXG4gICAgICAgIHNlbGYuX3JlYWxGaW5pc2ggPSBmYWxzZVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5fZGFzaGVzKSB7IHJldHVybiB9XG4gIH1cbiAgaWYgKHRoaXMuX2p1c3RNYXRjaGVkKSB7IHRoaXMuX2p1c3RNYXRjaGVkID0gZmFsc2UgfVxuICBpZiAoIXRoaXMuX3BhcnQpIHtcbiAgICB0aGlzLl9wYXJ0ID0gbmV3IFBhcnRTdHJlYW0odGhpcy5fcGFydE9wdHMpXG4gICAgdGhpcy5fcGFydC5fcmVhZCA9IGZ1bmN0aW9uIChuKSB7XG4gICAgICBzZWxmLl91bnBhdXNlKClcbiAgICB9XG4gICAgaWYgKHRoaXMuX2lzUHJlYW1ibGUgJiYgdGhpcy5saXN0ZW5lckNvdW50KCdwcmVhbWJsZScpICE9PSAwKSB7XG4gICAgICB0aGlzLmVtaXQoJ3ByZWFtYmxlJywgdGhpcy5fcGFydClcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2lzUHJlYW1ibGUgIT09IHRydWUgJiYgdGhpcy5saXN0ZW5lckNvdW50KCdwYXJ0JykgIT09IDApIHtcbiAgICAgIHRoaXMuZW1pdCgncGFydCcsIHRoaXMuX3BhcnQpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2lnbm9yZSgpXG4gICAgfVxuICAgIGlmICghdGhpcy5faXNQcmVhbWJsZSkgeyB0aGlzLl9pbkhlYWRlciA9IHRydWUgfVxuICB9XG4gIGlmIChkYXRhICYmIHN0YXJ0IDwgZW5kICYmICF0aGlzLl9pZ25vcmVEYXRhKSB7XG4gICAgaWYgKHRoaXMuX2lzUHJlYW1ibGUgfHwgIXRoaXMuX2luSGVhZGVyKSB7XG4gICAgICBpZiAoYnVmKSB7IHNob3VsZFdyaXRlTW9yZSA9IHRoaXMuX3BhcnQucHVzaChidWYpIH1cbiAgICAgIHNob3VsZFdyaXRlTW9yZSA9IHRoaXMuX3BhcnQucHVzaChkYXRhLnNsaWNlKHN0YXJ0LCBlbmQpKVxuICAgICAgaWYgKCFzaG91bGRXcml0ZU1vcmUpIHsgdGhpcy5fcGF1c2UgPSB0cnVlIH1cbiAgICB9IGVsc2UgaWYgKCF0aGlzLl9pc1ByZWFtYmxlICYmIHRoaXMuX2luSGVhZGVyKSB7XG4gICAgICBpZiAoYnVmKSB7IHRoaXMuX2hwYXJzZXIucHVzaChidWYpIH1cbiAgICAgIHIgPSB0aGlzLl9ocGFyc2VyLnB1c2goZGF0YS5zbGljZShzdGFydCwgZW5kKSlcbiAgICAgIGlmICghdGhpcy5faW5IZWFkZXIgJiYgciAhPT0gdW5kZWZpbmVkICYmIHIgPCBlbmQpIHsgdGhpcy5fb25pbmZvKGZhbHNlLCBkYXRhLCBzdGFydCArIHIsIGVuZCkgfVxuICAgIH1cbiAgfVxuICBpZiAoaXNNYXRjaCkge1xuICAgIHRoaXMuX2hwYXJzZXIucmVzZXQoKVxuICAgIGlmICh0aGlzLl9pc1ByZWFtYmxlKSB7IHRoaXMuX2lzUHJlYW1ibGUgPSBmYWxzZSB9IGVsc2Uge1xuICAgICAgaWYgKHN0YXJ0ICE9PSBlbmQpIHtcbiAgICAgICAgKyt0aGlzLl9wYXJ0c1xuICAgICAgICB0aGlzLl9wYXJ0Lm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKC0tc2VsZi5fcGFydHMgPT09IDApIHtcbiAgICAgICAgICAgIGlmIChzZWxmLl9maW5pc2hlZCkge1xuICAgICAgICAgICAgICBzZWxmLl9yZWFsRmluaXNoID0gdHJ1ZVxuICAgICAgICAgICAgICBzZWxmLmVtaXQoJ2ZpbmlzaCcpXG4gICAgICAgICAgICAgIHNlbGYuX3JlYWxGaW5pc2ggPSBmYWxzZVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2VsZi5fdW5wYXVzZSgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9wYXJ0LnB1c2gobnVsbClcbiAgICB0aGlzLl9wYXJ0ID0gdW5kZWZpbmVkXG4gICAgdGhpcy5faWdub3JlRGF0YSA9IGZhbHNlXG4gICAgdGhpcy5fanVzdE1hdGNoZWQgPSB0cnVlXG4gICAgdGhpcy5fZGFzaGVzID0gMFxuICB9XG59XG5cbkRpY2VyLnByb3RvdHlwZS5fdW5wYXVzZSA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKCF0aGlzLl9wYXVzZSkgeyByZXR1cm4gfVxuXG4gIHRoaXMuX3BhdXNlID0gZmFsc2VcbiAgaWYgKHRoaXMuX2NiKSB7XG4gICAgY29uc3QgY2IgPSB0aGlzLl9jYlxuICAgIHRoaXMuX2NiID0gdW5kZWZpbmVkXG4gICAgY2IoKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRGljZXJcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbi8vIE5vZGUgaGFzIGFsd2F5cyB1dGYtOFxuY29uc3QgdXRmOERlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoJ3V0Zi04JylcbmNvbnN0IHRleHREZWNvZGVycyA9IG5ldyBNYXAoW1xuICBbJ3V0Zi04JywgdXRmOERlY29kZXJdLFxuICBbJ3V0ZjgnLCB1dGY4RGVjb2Rlcl1cbl0pXG5cbmZ1bmN0aW9uIGdldERlY29kZXIgKGNoYXJzZXQpIHtcbiAgbGV0IGxjXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgc3dpdGNoIChjaGFyc2V0KSB7XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgICAgcmV0dXJuIGRlY29kZXJzLnV0ZjhcbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdhc2NpaSc6IC8vIFRPRE86IE1ha2UgdGhlc2UgYSBzZXBhcmF0ZSwgc3RyaWN0IGRlY29kZXI/XG4gICAgICBjYXNlICd1cy1hc2NpaSc6XG4gICAgICBjYXNlICdpc28tODg1OS0xJzpcbiAgICAgIGNhc2UgJ2lzbzg4NTktMSc6XG4gICAgICBjYXNlICdpc284ODU5MSc6XG4gICAgICBjYXNlICdpc29fODg1OS0xJzpcbiAgICAgIGNhc2UgJ3dpbmRvd3MtMTI1Mic6XG4gICAgICBjYXNlICdpc29fODg1OS0xOjE5ODcnOlxuICAgICAgY2FzZSAnY3AxMjUyJzpcbiAgICAgIGNhc2UgJ3gtY3AxMjUyJzpcbiAgICAgICAgcmV0dXJuIGRlY29kZXJzLmxhdGluMVxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgICAgcmV0dXJuIGRlY29kZXJzLnV0ZjE2bGVcbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIHJldHVybiBkZWNvZGVycy5iYXNlNjRcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsYyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbGMgPSB0cnVlXG4gICAgICAgICAgY2hhcnNldCA9IGNoYXJzZXQudG9Mb3dlckNhc2UoKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlY29kZXJzLm90aGVyLmJpbmQoY2hhcnNldClcbiAgICB9XG4gIH1cbn1cblxuY29uc3QgZGVjb2RlcnMgPSB7XG4gIHV0Zjg6IChkYXRhLCBzb3VyY2VFbmNvZGluZykgPT4ge1xuICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGRhdGEgPSBCdWZmZXIuZnJvbShkYXRhLCBzb3VyY2VFbmNvZGluZylcbiAgICB9XG4gICAgcmV0dXJuIGRhdGEudXRmOFNsaWNlKDAsIGRhdGEubGVuZ3RoKVxuICB9LFxuXG4gIGxhdGluMTogKGRhdGEsIHNvdXJjZUVuY29kaW5nKSA9PiB7XG4gICAgaWYgKGRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGRhdGFcbiAgICB9XG4gICAgcmV0dXJuIGRhdGEubGF0aW4xU2xpY2UoMCwgZGF0YS5sZW5ndGgpXG4gIH0sXG5cbiAgdXRmMTZsZTogKGRhdGEsIHNvdXJjZUVuY29kaW5nKSA9PiB7XG4gICAgaWYgKGRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgZGF0YSA9IEJ1ZmZlci5mcm9tKGRhdGEsIHNvdXJjZUVuY29kaW5nKVxuICAgIH1cbiAgICByZXR1cm4gZGF0YS51Y3MyU2xpY2UoMCwgZGF0YS5sZW5ndGgpXG4gIH0sXG5cbiAgYmFzZTY0OiAoZGF0YSwgc291cmNlRW5jb2RpbmcpID0+IHtcbiAgICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICBkYXRhID0gQnVmZmVyLmZyb20oZGF0YSwgc291cmNlRW5jb2RpbmcpXG4gICAgfVxuICAgIHJldHVybiBkYXRhLmJhc2U2NFNsaWNlKDAsIGRhdGEubGVuZ3RoKVxuICB9LFxuXG4gIG90aGVyOiAoZGF0YSwgc291cmNlRW5jb2RpbmcpID0+IHtcbiAgICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICBkYXRhID0gQnVmZmVyLmZyb20oZGF0YSwgc291cmNlRW5jb2RpbmcpXG4gICAgfVxuXG4gICAgaWYgKHRleHREZWNvZGVycy5oYXModGhpcy50b1N0cmluZygpKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHRleHREZWNvZGVycy5nZXQodGhpcykuZGVjb2RlKGRhdGEpXG4gICAgICB9IGNhdGNoIHt9XG4gICAgfVxuICAgIHJldHVybiB0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZydcbiAgICAgID8gZGF0YVxuICAgICAgOiBkYXRhLnRvU3RyaW5nKClcbiAgfVxufVxuXG5mdW5jdGlvbiBkZWNvZGVUZXh0ICh0ZXh0LCBzb3VyY2VFbmNvZGluZywgZGVzdEVuY29kaW5nKSB7XG4gIGlmICh0ZXh0KSB7XG4gICAgcmV0dXJuIGdldERlY29kZXIoZGVzdEVuY29kaW5nKSh0ZXh0LCBzb3VyY2VFbmNvZGluZylcbiAgfVxuICByZXR1cm4gdGV4dFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRlY29kZVRleHRcbiIsCiAgICAiLyogZXNsaW50LWRpc2FibGUgb2JqZWN0LXByb3BlcnR5LW5ld2xpbmUgKi9cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCBkZWNvZGVUZXh0ID0gcmVxdWlyZSgnLi9kZWNvZGVUZXh0JylcblxuY29uc3QgUkVfRU5DT0RFRCA9IC8lW2EtZkEtRjAtOV1bYS1mQS1GMC05XS9nXG5cbmNvbnN0IEVuY29kZWRMb29rdXAgPSB7XG4gICclMDAnOiAnXFx4MDAnLCAnJTAxJzogJ1xceDAxJywgJyUwMic6ICdcXHgwMicsICclMDMnOiAnXFx4MDMnLCAnJTA0JzogJ1xceDA0JyxcbiAgJyUwNSc6ICdcXHgwNScsICclMDYnOiAnXFx4MDYnLCAnJTA3JzogJ1xceDA3JywgJyUwOCc6ICdcXHgwOCcsICclMDknOiAnXFx4MDknLFxuICAnJTBhJzogJ1xceDBhJywgJyUwQSc6ICdcXHgwYScsICclMGInOiAnXFx4MGInLCAnJTBCJzogJ1xceDBiJywgJyUwYyc6ICdcXHgwYycsXG4gICclMEMnOiAnXFx4MGMnLCAnJTBkJzogJ1xceDBkJywgJyUwRCc6ICdcXHgwZCcsICclMGUnOiAnXFx4MGUnLCAnJTBFJzogJ1xceDBlJyxcbiAgJyUwZic6ICdcXHgwZicsICclMEYnOiAnXFx4MGYnLCAnJTEwJzogJ1xceDEwJywgJyUxMSc6ICdcXHgxMScsICclMTInOiAnXFx4MTInLFxuICAnJTEzJzogJ1xceDEzJywgJyUxNCc6ICdcXHgxNCcsICclMTUnOiAnXFx4MTUnLCAnJTE2JzogJ1xceDE2JywgJyUxNyc6ICdcXHgxNycsXG4gICclMTgnOiAnXFx4MTgnLCAnJTE5JzogJ1xceDE5JywgJyUxYSc6ICdcXHgxYScsICclMUEnOiAnXFx4MWEnLCAnJTFiJzogJ1xceDFiJyxcbiAgJyUxQic6ICdcXHgxYicsICclMWMnOiAnXFx4MWMnLCAnJTFDJzogJ1xceDFjJywgJyUxZCc6ICdcXHgxZCcsICclMUQnOiAnXFx4MWQnLFxuICAnJTFlJzogJ1xceDFlJywgJyUxRSc6ICdcXHgxZScsICclMWYnOiAnXFx4MWYnLCAnJTFGJzogJ1xceDFmJywgJyUyMCc6ICdcXHgyMCcsXG4gICclMjEnOiAnXFx4MjEnLCAnJTIyJzogJ1xceDIyJywgJyUyMyc6ICdcXHgyMycsICclMjQnOiAnXFx4MjQnLCAnJTI1JzogJ1xceDI1JyxcbiAgJyUyNic6ICdcXHgyNicsICclMjcnOiAnXFx4MjcnLCAnJTI4JzogJ1xceDI4JywgJyUyOSc6ICdcXHgyOScsICclMmEnOiAnXFx4MmEnLFxuICAnJTJBJzogJ1xceDJhJywgJyUyYic6ICdcXHgyYicsICclMkInOiAnXFx4MmInLCAnJTJjJzogJ1xceDJjJywgJyUyQyc6ICdcXHgyYycsXG4gICclMmQnOiAnXFx4MmQnLCAnJTJEJzogJ1xceDJkJywgJyUyZSc6ICdcXHgyZScsICclMkUnOiAnXFx4MmUnLCAnJTJmJzogJ1xceDJmJyxcbiAgJyUyRic6ICdcXHgyZicsICclMzAnOiAnXFx4MzAnLCAnJTMxJzogJ1xceDMxJywgJyUzMic6ICdcXHgzMicsICclMzMnOiAnXFx4MzMnLFxuICAnJTM0JzogJ1xceDM0JywgJyUzNSc6ICdcXHgzNScsICclMzYnOiAnXFx4MzYnLCAnJTM3JzogJ1xceDM3JywgJyUzOCc6ICdcXHgzOCcsXG4gICclMzknOiAnXFx4MzknLCAnJTNhJzogJ1xceDNhJywgJyUzQSc6ICdcXHgzYScsICclM2InOiAnXFx4M2InLCAnJTNCJzogJ1xceDNiJyxcbiAgJyUzYyc6ICdcXHgzYycsICclM0MnOiAnXFx4M2MnLCAnJTNkJzogJ1xceDNkJywgJyUzRCc6ICdcXHgzZCcsICclM2UnOiAnXFx4M2UnLFxuICAnJTNFJzogJ1xceDNlJywgJyUzZic6ICdcXHgzZicsICclM0YnOiAnXFx4M2YnLCAnJTQwJzogJ1xceDQwJywgJyU0MSc6ICdcXHg0MScsXG4gICclNDInOiAnXFx4NDInLCAnJTQzJzogJ1xceDQzJywgJyU0NCc6ICdcXHg0NCcsICclNDUnOiAnXFx4NDUnLCAnJTQ2JzogJ1xceDQ2JyxcbiAgJyU0Nyc6ICdcXHg0NycsICclNDgnOiAnXFx4NDgnLCAnJTQ5JzogJ1xceDQ5JywgJyU0YSc6ICdcXHg0YScsICclNEEnOiAnXFx4NGEnLFxuICAnJTRiJzogJ1xceDRiJywgJyU0Qic6ICdcXHg0YicsICclNGMnOiAnXFx4NGMnLCAnJTRDJzogJ1xceDRjJywgJyU0ZCc6ICdcXHg0ZCcsXG4gICclNEQnOiAnXFx4NGQnLCAnJTRlJzogJ1xceDRlJywgJyU0RSc6ICdcXHg0ZScsICclNGYnOiAnXFx4NGYnLCAnJTRGJzogJ1xceDRmJyxcbiAgJyU1MCc6ICdcXHg1MCcsICclNTEnOiAnXFx4NTEnLCAnJTUyJzogJ1xceDUyJywgJyU1Myc6ICdcXHg1MycsICclNTQnOiAnXFx4NTQnLFxuICAnJTU1JzogJ1xceDU1JywgJyU1Nic6ICdcXHg1NicsICclNTcnOiAnXFx4NTcnLCAnJTU4JzogJ1xceDU4JywgJyU1OSc6ICdcXHg1OScsXG4gICclNWEnOiAnXFx4NWEnLCAnJTVBJzogJ1xceDVhJywgJyU1Yic6ICdcXHg1YicsICclNUInOiAnXFx4NWInLCAnJTVjJzogJ1xceDVjJyxcbiAgJyU1Qyc6ICdcXHg1YycsICclNWQnOiAnXFx4NWQnLCAnJTVEJzogJ1xceDVkJywgJyU1ZSc6ICdcXHg1ZScsICclNUUnOiAnXFx4NWUnLFxuICAnJTVmJzogJ1xceDVmJywgJyU1Ric6ICdcXHg1ZicsICclNjAnOiAnXFx4NjAnLCAnJTYxJzogJ1xceDYxJywgJyU2Mic6ICdcXHg2MicsXG4gICclNjMnOiAnXFx4NjMnLCAnJTY0JzogJ1xceDY0JywgJyU2NSc6ICdcXHg2NScsICclNjYnOiAnXFx4NjYnLCAnJTY3JzogJ1xceDY3JyxcbiAgJyU2OCc6ICdcXHg2OCcsICclNjknOiAnXFx4NjknLCAnJTZhJzogJ1xceDZhJywgJyU2QSc6ICdcXHg2YScsICclNmInOiAnXFx4NmInLFxuICAnJTZCJzogJ1xceDZiJywgJyU2Yyc6ICdcXHg2YycsICclNkMnOiAnXFx4NmMnLCAnJTZkJzogJ1xceDZkJywgJyU2RCc6ICdcXHg2ZCcsXG4gICclNmUnOiAnXFx4NmUnLCAnJTZFJzogJ1xceDZlJywgJyU2Zic6ICdcXHg2ZicsICclNkYnOiAnXFx4NmYnLCAnJTcwJzogJ1xceDcwJyxcbiAgJyU3MSc6ICdcXHg3MScsICclNzInOiAnXFx4NzInLCAnJTczJzogJ1xceDczJywgJyU3NCc6ICdcXHg3NCcsICclNzUnOiAnXFx4NzUnLFxuICAnJTc2JzogJ1xceDc2JywgJyU3Nyc6ICdcXHg3NycsICclNzgnOiAnXFx4NzgnLCAnJTc5JzogJ1xceDc5JywgJyU3YSc6ICdcXHg3YScsXG4gICclN0EnOiAnXFx4N2EnLCAnJTdiJzogJ1xceDdiJywgJyU3Qic6ICdcXHg3YicsICclN2MnOiAnXFx4N2MnLCAnJTdDJzogJ1xceDdjJyxcbiAgJyU3ZCc6ICdcXHg3ZCcsICclN0QnOiAnXFx4N2QnLCAnJTdlJzogJ1xceDdlJywgJyU3RSc6ICdcXHg3ZScsICclN2YnOiAnXFx4N2YnLFxuICAnJTdGJzogJ1xceDdmJywgJyU4MCc6ICdcXHg4MCcsICclODEnOiAnXFx4ODEnLCAnJTgyJzogJ1xceDgyJywgJyU4Myc6ICdcXHg4MycsXG4gICclODQnOiAnXFx4ODQnLCAnJTg1JzogJ1xceDg1JywgJyU4Nic6ICdcXHg4NicsICclODcnOiAnXFx4ODcnLCAnJTg4JzogJ1xceDg4JyxcbiAgJyU4OSc6ICdcXHg4OScsICclOGEnOiAnXFx4OGEnLCAnJThBJzogJ1xceDhhJywgJyU4Yic6ICdcXHg4YicsICclOEInOiAnXFx4OGInLFxuICAnJThjJzogJ1xceDhjJywgJyU4Qyc6ICdcXHg4YycsICclOGQnOiAnXFx4OGQnLCAnJThEJzogJ1xceDhkJywgJyU4ZSc6ICdcXHg4ZScsXG4gICclOEUnOiAnXFx4OGUnLCAnJThmJzogJ1xceDhmJywgJyU4Ric6ICdcXHg4ZicsICclOTAnOiAnXFx4OTAnLCAnJTkxJzogJ1xceDkxJyxcbiAgJyU5Mic6ICdcXHg5MicsICclOTMnOiAnXFx4OTMnLCAnJTk0JzogJ1xceDk0JywgJyU5NSc6ICdcXHg5NScsICclOTYnOiAnXFx4OTYnLFxuICAnJTk3JzogJ1xceDk3JywgJyU5OCc6ICdcXHg5OCcsICclOTknOiAnXFx4OTknLCAnJTlhJzogJ1xceDlhJywgJyU5QSc6ICdcXHg5YScsXG4gICclOWInOiAnXFx4OWInLCAnJTlCJzogJ1xceDliJywgJyU5Yyc6ICdcXHg5YycsICclOUMnOiAnXFx4OWMnLCAnJTlkJzogJ1xceDlkJyxcbiAgJyU5RCc6ICdcXHg5ZCcsICclOWUnOiAnXFx4OWUnLCAnJTlFJzogJ1xceDllJywgJyU5Zic6ICdcXHg5ZicsICclOUYnOiAnXFx4OWYnLFxuICAnJWEwJzogJ1xceGEwJywgJyVBMCc6ICdcXHhhMCcsICclYTEnOiAnXFx4YTEnLCAnJUExJzogJ1xceGExJywgJyVhMic6ICdcXHhhMicsXG4gICclQTInOiAnXFx4YTInLCAnJWEzJzogJ1xceGEzJywgJyVBMyc6ICdcXHhhMycsICclYTQnOiAnXFx4YTQnLCAnJUE0JzogJ1xceGE0JyxcbiAgJyVhNSc6ICdcXHhhNScsICclQTUnOiAnXFx4YTUnLCAnJWE2JzogJ1xceGE2JywgJyVBNic6ICdcXHhhNicsICclYTcnOiAnXFx4YTcnLFxuICAnJUE3JzogJ1xceGE3JywgJyVhOCc6ICdcXHhhOCcsICclQTgnOiAnXFx4YTgnLCAnJWE5JzogJ1xceGE5JywgJyVBOSc6ICdcXHhhOScsXG4gICclYWEnOiAnXFx4YWEnLCAnJUFhJzogJ1xceGFhJywgJyVhQSc6ICdcXHhhYScsICclQUEnOiAnXFx4YWEnLCAnJWFiJzogJ1xceGFiJyxcbiAgJyVBYic6ICdcXHhhYicsICclYUInOiAnXFx4YWInLCAnJUFCJzogJ1xceGFiJywgJyVhYyc6ICdcXHhhYycsICclQWMnOiAnXFx4YWMnLFxuICAnJWFDJzogJ1xceGFjJywgJyVBQyc6ICdcXHhhYycsICclYWQnOiAnXFx4YWQnLCAnJUFkJzogJ1xceGFkJywgJyVhRCc6ICdcXHhhZCcsXG4gICclQUQnOiAnXFx4YWQnLCAnJWFlJzogJ1xceGFlJywgJyVBZSc6ICdcXHhhZScsICclYUUnOiAnXFx4YWUnLCAnJUFFJzogJ1xceGFlJyxcbiAgJyVhZic6ICdcXHhhZicsICclQWYnOiAnXFx4YWYnLCAnJWFGJzogJ1xceGFmJywgJyVBRic6ICdcXHhhZicsICclYjAnOiAnXFx4YjAnLFxuICAnJUIwJzogJ1xceGIwJywgJyViMSc6ICdcXHhiMScsICclQjEnOiAnXFx4YjEnLCAnJWIyJzogJ1xceGIyJywgJyVCMic6ICdcXHhiMicsXG4gICclYjMnOiAnXFx4YjMnLCAnJUIzJzogJ1xceGIzJywgJyViNCc6ICdcXHhiNCcsICclQjQnOiAnXFx4YjQnLCAnJWI1JzogJ1xceGI1JyxcbiAgJyVCNSc6ICdcXHhiNScsICclYjYnOiAnXFx4YjYnLCAnJUI2JzogJ1xceGI2JywgJyViNyc6ICdcXHhiNycsICclQjcnOiAnXFx4YjcnLFxuICAnJWI4JzogJ1xceGI4JywgJyVCOCc6ICdcXHhiOCcsICclYjknOiAnXFx4YjknLCAnJUI5JzogJ1xceGI5JywgJyViYSc6ICdcXHhiYScsXG4gICclQmEnOiAnXFx4YmEnLCAnJWJBJzogJ1xceGJhJywgJyVCQSc6ICdcXHhiYScsICclYmInOiAnXFx4YmInLCAnJUJiJzogJ1xceGJiJyxcbiAgJyViQic6ICdcXHhiYicsICclQkInOiAnXFx4YmInLCAnJWJjJzogJ1xceGJjJywgJyVCYyc6ICdcXHhiYycsICclYkMnOiAnXFx4YmMnLFxuICAnJUJDJzogJ1xceGJjJywgJyViZCc6ICdcXHhiZCcsICclQmQnOiAnXFx4YmQnLCAnJWJEJzogJ1xceGJkJywgJyVCRCc6ICdcXHhiZCcsXG4gICclYmUnOiAnXFx4YmUnLCAnJUJlJzogJ1xceGJlJywgJyViRSc6ICdcXHhiZScsICclQkUnOiAnXFx4YmUnLCAnJWJmJzogJ1xceGJmJyxcbiAgJyVCZic6ICdcXHhiZicsICclYkYnOiAnXFx4YmYnLCAnJUJGJzogJ1xceGJmJywgJyVjMCc6ICdcXHhjMCcsICclQzAnOiAnXFx4YzAnLFxuICAnJWMxJzogJ1xceGMxJywgJyVDMSc6ICdcXHhjMScsICclYzInOiAnXFx4YzInLCAnJUMyJzogJ1xceGMyJywgJyVjMyc6ICdcXHhjMycsXG4gICclQzMnOiAnXFx4YzMnLCAnJWM0JzogJ1xceGM0JywgJyVDNCc6ICdcXHhjNCcsICclYzUnOiAnXFx4YzUnLCAnJUM1JzogJ1xceGM1JyxcbiAgJyVjNic6ICdcXHhjNicsICclQzYnOiAnXFx4YzYnLCAnJWM3JzogJ1xceGM3JywgJyVDNyc6ICdcXHhjNycsICclYzgnOiAnXFx4YzgnLFxuICAnJUM4JzogJ1xceGM4JywgJyVjOSc6ICdcXHhjOScsICclQzknOiAnXFx4YzknLCAnJWNhJzogJ1xceGNhJywgJyVDYSc6ICdcXHhjYScsXG4gICclY0EnOiAnXFx4Y2EnLCAnJUNBJzogJ1xceGNhJywgJyVjYic6ICdcXHhjYicsICclQ2InOiAnXFx4Y2InLCAnJWNCJzogJ1xceGNiJyxcbiAgJyVDQic6ICdcXHhjYicsICclY2MnOiAnXFx4Y2MnLCAnJUNjJzogJ1xceGNjJywgJyVjQyc6ICdcXHhjYycsICclQ0MnOiAnXFx4Y2MnLFxuICAnJWNkJzogJ1xceGNkJywgJyVDZCc6ICdcXHhjZCcsICclY0QnOiAnXFx4Y2QnLCAnJUNEJzogJ1xceGNkJywgJyVjZSc6ICdcXHhjZScsXG4gICclQ2UnOiAnXFx4Y2UnLCAnJWNFJzogJ1xceGNlJywgJyVDRSc6ICdcXHhjZScsICclY2YnOiAnXFx4Y2YnLCAnJUNmJzogJ1xceGNmJyxcbiAgJyVjRic6ICdcXHhjZicsICclQ0YnOiAnXFx4Y2YnLCAnJWQwJzogJ1xceGQwJywgJyVEMCc6ICdcXHhkMCcsICclZDEnOiAnXFx4ZDEnLFxuICAnJUQxJzogJ1xceGQxJywgJyVkMic6ICdcXHhkMicsICclRDInOiAnXFx4ZDInLCAnJWQzJzogJ1xceGQzJywgJyVEMyc6ICdcXHhkMycsXG4gICclZDQnOiAnXFx4ZDQnLCAnJUQ0JzogJ1xceGQ0JywgJyVkNSc6ICdcXHhkNScsICclRDUnOiAnXFx4ZDUnLCAnJWQ2JzogJ1xceGQ2JyxcbiAgJyVENic6ICdcXHhkNicsICclZDcnOiAnXFx4ZDcnLCAnJUQ3JzogJ1xceGQ3JywgJyVkOCc6ICdcXHhkOCcsICclRDgnOiAnXFx4ZDgnLFxuICAnJWQ5JzogJ1xceGQ5JywgJyVEOSc6ICdcXHhkOScsICclZGEnOiAnXFx4ZGEnLCAnJURhJzogJ1xceGRhJywgJyVkQSc6ICdcXHhkYScsXG4gICclREEnOiAnXFx4ZGEnLCAnJWRiJzogJ1xceGRiJywgJyVEYic6ICdcXHhkYicsICclZEInOiAnXFx4ZGInLCAnJURCJzogJ1xceGRiJyxcbiAgJyVkYyc6ICdcXHhkYycsICclRGMnOiAnXFx4ZGMnLCAnJWRDJzogJ1xceGRjJywgJyVEQyc6ICdcXHhkYycsICclZGQnOiAnXFx4ZGQnLFxuICAnJURkJzogJ1xceGRkJywgJyVkRCc6ICdcXHhkZCcsICclREQnOiAnXFx4ZGQnLCAnJWRlJzogJ1xceGRlJywgJyVEZSc6ICdcXHhkZScsXG4gICclZEUnOiAnXFx4ZGUnLCAnJURFJzogJ1xceGRlJywgJyVkZic6ICdcXHhkZicsICclRGYnOiAnXFx4ZGYnLCAnJWRGJzogJ1xceGRmJyxcbiAgJyVERic6ICdcXHhkZicsICclZTAnOiAnXFx4ZTAnLCAnJUUwJzogJ1xceGUwJywgJyVlMSc6ICdcXHhlMScsICclRTEnOiAnXFx4ZTEnLFxuICAnJWUyJzogJ1xceGUyJywgJyVFMic6ICdcXHhlMicsICclZTMnOiAnXFx4ZTMnLCAnJUUzJzogJ1xceGUzJywgJyVlNCc6ICdcXHhlNCcsXG4gICclRTQnOiAnXFx4ZTQnLCAnJWU1JzogJ1xceGU1JywgJyVFNSc6ICdcXHhlNScsICclZTYnOiAnXFx4ZTYnLCAnJUU2JzogJ1xceGU2JyxcbiAgJyVlNyc6ICdcXHhlNycsICclRTcnOiAnXFx4ZTcnLCAnJWU4JzogJ1xceGU4JywgJyVFOCc6ICdcXHhlOCcsICclZTknOiAnXFx4ZTknLFxuICAnJUU5JzogJ1xceGU5JywgJyVlYSc6ICdcXHhlYScsICclRWEnOiAnXFx4ZWEnLCAnJWVBJzogJ1xceGVhJywgJyVFQSc6ICdcXHhlYScsXG4gICclZWInOiAnXFx4ZWInLCAnJUViJzogJ1xceGViJywgJyVlQic6ICdcXHhlYicsICclRUInOiAnXFx4ZWInLCAnJWVjJzogJ1xceGVjJyxcbiAgJyVFYyc6ICdcXHhlYycsICclZUMnOiAnXFx4ZWMnLCAnJUVDJzogJ1xceGVjJywgJyVlZCc6ICdcXHhlZCcsICclRWQnOiAnXFx4ZWQnLFxuICAnJWVEJzogJ1xceGVkJywgJyVFRCc6ICdcXHhlZCcsICclZWUnOiAnXFx4ZWUnLCAnJUVlJzogJ1xceGVlJywgJyVlRSc6ICdcXHhlZScsXG4gICclRUUnOiAnXFx4ZWUnLCAnJWVmJzogJ1xceGVmJywgJyVFZic6ICdcXHhlZicsICclZUYnOiAnXFx4ZWYnLCAnJUVGJzogJ1xceGVmJyxcbiAgJyVmMCc6ICdcXHhmMCcsICclRjAnOiAnXFx4ZjAnLCAnJWYxJzogJ1xceGYxJywgJyVGMSc6ICdcXHhmMScsICclZjInOiAnXFx4ZjInLFxuICAnJUYyJzogJ1xceGYyJywgJyVmMyc6ICdcXHhmMycsICclRjMnOiAnXFx4ZjMnLCAnJWY0JzogJ1xceGY0JywgJyVGNCc6ICdcXHhmNCcsXG4gICclZjUnOiAnXFx4ZjUnLCAnJUY1JzogJ1xceGY1JywgJyVmNic6ICdcXHhmNicsICclRjYnOiAnXFx4ZjYnLCAnJWY3JzogJ1xceGY3JyxcbiAgJyVGNyc6ICdcXHhmNycsICclZjgnOiAnXFx4ZjgnLCAnJUY4JzogJ1xceGY4JywgJyVmOSc6ICdcXHhmOScsICclRjknOiAnXFx4ZjknLFxuICAnJWZhJzogJ1xceGZhJywgJyVGYSc6ICdcXHhmYScsICclZkEnOiAnXFx4ZmEnLCAnJUZBJzogJ1xceGZhJywgJyVmYic6ICdcXHhmYicsXG4gICclRmInOiAnXFx4ZmInLCAnJWZCJzogJ1xceGZiJywgJyVGQic6ICdcXHhmYicsICclZmMnOiAnXFx4ZmMnLCAnJUZjJzogJ1xceGZjJyxcbiAgJyVmQyc6ICdcXHhmYycsICclRkMnOiAnXFx4ZmMnLCAnJWZkJzogJ1xceGZkJywgJyVGZCc6ICdcXHhmZCcsICclZkQnOiAnXFx4ZmQnLFxuICAnJUZEJzogJ1xceGZkJywgJyVmZSc6ICdcXHhmZScsICclRmUnOiAnXFx4ZmUnLCAnJWZFJzogJ1xceGZlJywgJyVGRSc6ICdcXHhmZScsXG4gICclZmYnOiAnXFx4ZmYnLCAnJUZmJzogJ1xceGZmJywgJyVmRic6ICdcXHhmZicsICclRkYnOiAnXFx4ZmYnXG59XG5cbmZ1bmN0aW9uIGVuY29kZWRSZXBsYWNlciAobWF0Y2gpIHtcbiAgcmV0dXJuIEVuY29kZWRMb29rdXBbbWF0Y2hdXG59XG5cbmNvbnN0IFNUQVRFX0tFWSA9IDBcbmNvbnN0IFNUQVRFX1ZBTFVFID0gMVxuY29uc3QgU1RBVEVfQ0hBUlNFVCA9IDJcbmNvbnN0IFNUQVRFX0xBTkcgPSAzXG5cbmZ1bmN0aW9uIHBhcnNlUGFyYW1zIChzdHIpIHtcbiAgY29uc3QgcmVzID0gW11cbiAgbGV0IHN0YXRlID0gU1RBVEVfS0VZXG4gIGxldCBjaGFyc2V0ID0gJydcbiAgbGV0IGlucXVvdGUgPSBmYWxzZVxuICBsZXQgZXNjYXBpbmcgPSBmYWxzZVxuICBsZXQgcCA9IDBcbiAgbGV0IHRtcCA9ICcnXG4gIGNvbnN0IGxlbiA9IHN0ci5sZW5ndGhcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdmFyXG4gICAgY29uc3QgY2hhciA9IHN0cltpXVxuICAgIGlmIChjaGFyID09PSAnXFxcXCcgJiYgaW5xdW90ZSkge1xuICAgICAgaWYgKGVzY2FwaW5nKSB7IGVzY2FwaW5nID0gZmFsc2UgfSBlbHNlIHtcbiAgICAgICAgZXNjYXBpbmcgPSB0cnVlXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjaGFyID09PSAnXCInKSB7XG4gICAgICBpZiAoIWVzY2FwaW5nKSB7XG4gICAgICAgIGlmIChpbnF1b3RlKSB7XG4gICAgICAgICAgaW5xdW90ZSA9IGZhbHNlXG4gICAgICAgICAgc3RhdGUgPSBTVEFURV9LRVlcbiAgICAgICAgfSBlbHNlIHsgaW5xdW90ZSA9IHRydWUgfVxuICAgICAgICBjb250aW51ZVxuICAgICAgfSBlbHNlIHsgZXNjYXBpbmcgPSBmYWxzZSB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChlc2NhcGluZyAmJiBpbnF1b3RlKSB7IHRtcCArPSAnXFxcXCcgfVxuICAgICAgZXNjYXBpbmcgPSBmYWxzZVxuICAgICAgaWYgKChzdGF0ZSA9PT0gU1RBVEVfQ0hBUlNFVCB8fCBzdGF0ZSA9PT0gU1RBVEVfTEFORykgJiYgY2hhciA9PT0gXCInXCIpIHtcbiAgICAgICAgaWYgKHN0YXRlID09PSBTVEFURV9DSEFSU0VUKSB7XG4gICAgICAgICAgc3RhdGUgPSBTVEFURV9MQU5HXG4gICAgICAgICAgY2hhcnNldCA9IHRtcC5zdWJzdHJpbmcoMSlcbiAgICAgICAgfSBlbHNlIHsgc3RhdGUgPSBTVEFURV9WQUxVRSB9XG4gICAgICAgIHRtcCA9ICcnXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9IGVsc2UgaWYgKHN0YXRlID09PSBTVEFURV9LRVkgJiZcbiAgICAgICAgKGNoYXIgPT09ICcqJyB8fCBjaGFyID09PSAnPScpICYmXG4gICAgICAgIHJlcy5sZW5ndGgpIHtcbiAgICAgICAgc3RhdGUgPSBjaGFyID09PSAnKidcbiAgICAgICAgICA/IFNUQVRFX0NIQVJTRVRcbiAgICAgICAgICA6IFNUQVRFX1ZBTFVFXG4gICAgICAgIHJlc1twXSA9IFt0bXAsIHVuZGVmaW5lZF1cbiAgICAgICAgdG1wID0gJydcbiAgICAgICAgY29udGludWVcbiAgICAgIH0gZWxzZSBpZiAoIWlucXVvdGUgJiYgY2hhciA9PT0gJzsnKSB7XG4gICAgICAgIHN0YXRlID0gU1RBVEVfS0VZXG4gICAgICAgIGlmIChjaGFyc2V0KSB7XG4gICAgICAgICAgaWYgKHRtcC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRtcCA9IGRlY29kZVRleHQodG1wLnJlcGxhY2UoUkVfRU5DT0RFRCwgZW5jb2RlZFJlcGxhY2VyKSxcbiAgICAgICAgICAgICAgJ2JpbmFyeScsXG4gICAgICAgICAgICAgIGNoYXJzZXQpXG4gICAgICAgICAgfVxuICAgICAgICAgIGNoYXJzZXQgPSAnJ1xuICAgICAgICB9IGVsc2UgaWYgKHRtcC5sZW5ndGgpIHtcbiAgICAgICAgICB0bXAgPSBkZWNvZGVUZXh0KHRtcCwgJ2JpbmFyeScsICd1dGY4JylcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzW3BdID09PSB1bmRlZmluZWQpIHsgcmVzW3BdID0gdG1wIH0gZWxzZSB7IHJlc1twXVsxXSA9IHRtcCB9XG4gICAgICAgIHRtcCA9ICcnXG4gICAgICAgICsrcFxuICAgICAgICBjb250aW51ZVxuICAgICAgfSBlbHNlIGlmICghaW5xdW90ZSAmJiAoY2hhciA9PT0gJyAnIHx8IGNoYXIgPT09ICdcXHQnKSkgeyBjb250aW51ZSB9XG4gICAgfVxuICAgIHRtcCArPSBjaGFyXG4gIH1cbiAgaWYgKGNoYXJzZXQgJiYgdG1wLmxlbmd0aCkge1xuICAgIHRtcCA9IGRlY29kZVRleHQodG1wLnJlcGxhY2UoUkVfRU5DT0RFRCwgZW5jb2RlZFJlcGxhY2VyKSxcbiAgICAgICdiaW5hcnknLFxuICAgICAgY2hhcnNldClcbiAgfSBlbHNlIGlmICh0bXApIHtcbiAgICB0bXAgPSBkZWNvZGVUZXh0KHRtcCwgJ2JpbmFyeScsICd1dGY4JylcbiAgfVxuXG4gIGlmIChyZXNbcF0gPT09IHVuZGVmaW5lZCkge1xuICAgIGlmICh0bXApIHsgcmVzW3BdID0gdG1wIH1cbiAgfSBlbHNlIHsgcmVzW3BdWzFdID0gdG1wIH1cblxuICByZXR1cm4gcmVzXG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyc2VQYXJhbXNcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYmFzZW5hbWUgKHBhdGgpIHtcbiAgaWYgKHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJykgeyByZXR1cm4gJycgfVxuICBmb3IgKHZhciBpID0gcGF0aC5sZW5ndGggLSAxOyBpID49IDA7IC0taSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXZhclxuICAgIHN3aXRjaCAocGF0aC5jaGFyQ29kZUF0KGkpKSB7XG4gICAgICBjYXNlIDB4MkY6IC8vICcvJ1xuICAgICAgY2FzZSAweDVDOiAvLyAnXFwnXG4gICAgICAgIHBhdGggPSBwYXRoLnNsaWNlKGkgKyAxKVxuICAgICAgICByZXR1cm4gKHBhdGggPT09ICcuLicgfHwgcGF0aCA9PT0gJy4nID8gJycgOiBwYXRoKVxuICAgIH1cbiAgfVxuICByZXR1cm4gKHBhdGggPT09ICcuLicgfHwgcGF0aCA9PT0gJy4nID8gJycgOiBwYXRoKVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuLy8gVE9ETzpcbi8vICAqIHN1cHBvcnQgMSBuZXN0ZWQgbXVsdGlwYXJ0IGxldmVsXG4vLyAgICAoc2VlIHNlY29uZCBtdWx0aXBhcnQgZXhhbXBsZSBoZXJlOlxuLy8gICAgIGh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0MDEvaW50ZXJhY3QvZm9ybXMuaHRtbCNkaWR4LW11bHRpcGFydGZvcm0tZGF0YSlcbi8vICAqIHN1cHBvcnQgbGltaXRzLmZpZWxkTmFtZVNpemVcbi8vICAgICAtLSB0aGlzIHdpbGwgcmVxdWlyZSBtb2RpZmljYXRpb25zIHRvIHV0aWxzLnBhcnNlUGFyYW1zXG5cbmNvbnN0IHsgUmVhZGFibGUgfSA9IHJlcXVpcmUoJ25vZGU6c3RyZWFtJylcbmNvbnN0IHsgaW5oZXJpdHMgfSA9IHJlcXVpcmUoJ25vZGU6dXRpbCcpXG5cbmNvbnN0IERpY2VyID0gcmVxdWlyZSgnLi4vLi4vZGVwcy9kaWNlci9saWIvRGljZXInKVxuXG5jb25zdCBwYXJzZVBhcmFtcyA9IHJlcXVpcmUoJy4uL3V0aWxzL3BhcnNlUGFyYW1zJylcbmNvbnN0IGRlY29kZVRleHQgPSByZXF1aXJlKCcuLi91dGlscy9kZWNvZGVUZXh0JylcbmNvbnN0IGJhc2VuYW1lID0gcmVxdWlyZSgnLi4vdXRpbHMvYmFzZW5hbWUnKVxuY29uc3QgZ2V0TGltaXQgPSByZXF1aXJlKCcuLi91dGlscy9nZXRMaW1pdCcpXG5cbmNvbnN0IFJFX0JPVU5EQVJZID0gL15ib3VuZGFyeSQvaVxuY29uc3QgUkVfRklFTEQgPSAvXmZvcm0tZGF0YSQvaVxuY29uc3QgUkVfQ0hBUlNFVCA9IC9eY2hhcnNldCQvaVxuY29uc3QgUkVfRklMRU5BTUUgPSAvXmZpbGVuYW1lJC9pXG5jb25zdCBSRV9OQU1FID0gL15uYW1lJC9pXG5cbk11bHRpcGFydC5kZXRlY3QgPSAvXm11bHRpcGFydFxcL2Zvcm0tZGF0YS9pXG5mdW5jdGlvbiBNdWx0aXBhcnQgKGJveSwgY2ZnKSB7XG4gIGxldCBpXG4gIGxldCBsZW5cbiAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgbGV0IGJvdW5kYXJ5XG4gIGNvbnN0IGxpbWl0cyA9IGNmZy5saW1pdHNcbiAgY29uc3QgaXNQYXJ0QUZpbGUgPSBjZmcuaXNQYXJ0QUZpbGUgfHwgKChmaWVsZE5hbWUsIGNvbnRlbnRUeXBlLCBmaWxlTmFtZSkgPT4gKGNvbnRlbnRUeXBlID09PSAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJyB8fCBmaWxlTmFtZSAhPT0gdW5kZWZpbmVkKSlcbiAgY29uc3QgcGFyc2VkQ29uVHlwZSA9IGNmZy5wYXJzZWRDb25UeXBlIHx8IFtdXG4gIGNvbnN0IGRlZkNoYXJzZXQgPSBjZmcuZGVmQ2hhcnNldCB8fCAndXRmOCdcbiAgY29uc3QgcHJlc2VydmVQYXRoID0gY2ZnLnByZXNlcnZlUGF0aFxuICBjb25zdCBmaWxlT3B0cyA9IHsgaGlnaFdhdGVyTWFyazogY2ZnLmZpbGVId20gfVxuXG4gIGZvciAoaSA9IDAsIGxlbiA9IHBhcnNlZENvblR5cGUubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJzZWRDb25UeXBlW2ldKSAmJlxuICAgICAgUkVfQk9VTkRBUlkudGVzdChwYXJzZWRDb25UeXBlW2ldWzBdKSkge1xuICAgICAgYm91bmRhcnkgPSBwYXJzZWRDb25UeXBlW2ldWzFdXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNoZWNrRmluaXNoZWQgKCkge1xuICAgIGlmIChuZW5kcyA9PT0gMCAmJiBmaW5pc2hlZCAmJiAhYm95Ll9kb25lKSB7XG4gICAgICBmaW5pc2hlZCA9IGZhbHNlXG4gICAgICBzZWxmLmVuZCgpXG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiBib3VuZGFyeSAhPT0gJ3N0cmluZycpIHsgdGhyb3cgbmV3IEVycm9yKCdNdWx0aXBhcnQ6IEJvdW5kYXJ5IG5vdCBmb3VuZCcpIH1cblxuICBjb25zdCBmaWVsZFNpemVMaW1pdCA9IGdldExpbWl0KGxpbWl0cywgJ2ZpZWxkU2l6ZScsIDEgKiAxMDI0ICogMTAyNClcbiAgY29uc3QgZmlsZVNpemVMaW1pdCA9IGdldExpbWl0KGxpbWl0cywgJ2ZpbGVTaXplJywgSW5maW5pdHkpXG4gIGNvbnN0IGZpbGVzTGltaXQgPSBnZXRMaW1pdChsaW1pdHMsICdmaWxlcycsIEluZmluaXR5KVxuICBjb25zdCBmaWVsZHNMaW1pdCA9IGdldExpbWl0KGxpbWl0cywgJ2ZpZWxkcycsIEluZmluaXR5KVxuICBjb25zdCBwYXJ0c0xpbWl0ID0gZ2V0TGltaXQobGltaXRzLCAncGFydHMnLCBJbmZpbml0eSlcbiAgY29uc3QgaGVhZGVyUGFpcnNMaW1pdCA9IGdldExpbWl0KGxpbWl0cywgJ2hlYWRlclBhaXJzJywgMjAwMClcbiAgY29uc3QgaGVhZGVyU2l6ZUxpbWl0ID0gZ2V0TGltaXQobGltaXRzLCAnaGVhZGVyU2l6ZScsIDgwICogMTAyNClcblxuICBsZXQgbmZpbGVzID0gMFxuICBsZXQgbmZpZWxkcyA9IDBcbiAgbGV0IG5lbmRzID0gMFxuICBsZXQgY3VyRmlsZVxuICBsZXQgY3VyRmllbGRcbiAgbGV0IGZpbmlzaGVkID0gZmFsc2VcblxuICB0aGlzLl9uZWVkRHJhaW4gPSBmYWxzZVxuICB0aGlzLl9wYXVzZSA9IGZhbHNlXG4gIHRoaXMuX2NiID0gdW5kZWZpbmVkXG4gIHRoaXMuX25wYXJ0cyA9IDBcbiAgdGhpcy5fYm95ID0gYm95XG5cbiAgY29uc3QgcGFyc2VyQ2ZnID0ge1xuICAgIGJvdW5kYXJ5LFxuICAgIG1heEhlYWRlclBhaXJzOiBoZWFkZXJQYWlyc0xpbWl0LFxuICAgIG1heEhlYWRlclNpemU6IGhlYWRlclNpemVMaW1pdCxcbiAgICBwYXJ0SHdtOiBmaWxlT3B0cy5oaWdoV2F0ZXJNYXJrLFxuICAgIGhpZ2hXYXRlck1hcms6IGNmZy5oaWdoV2F0ZXJNYXJrXG4gIH1cblxuICB0aGlzLnBhcnNlciA9IG5ldyBEaWNlcihwYXJzZXJDZmcpXG4gIHRoaXMucGFyc2VyLm9uKCdkcmFpbicsIGZ1bmN0aW9uICgpIHtcbiAgICBzZWxmLl9uZWVkRHJhaW4gPSBmYWxzZVxuICAgIGlmIChzZWxmLl9jYiAmJiAhc2VsZi5fcGF1c2UpIHtcbiAgICAgIGNvbnN0IGNiID0gc2VsZi5fY2JcbiAgICAgIHNlbGYuX2NiID0gdW5kZWZpbmVkXG4gICAgICBjYigpXG4gICAgfVxuICB9KS5vbigncGFydCcsIGZ1bmN0aW9uIG9uUGFydCAocGFydCkge1xuICAgIGlmICgrK3NlbGYuX25wYXJ0cyA+IHBhcnRzTGltaXQpIHtcbiAgICAgIHNlbGYucGFyc2VyLnJlbW92ZUxpc3RlbmVyKCdwYXJ0Jywgb25QYXJ0KVxuICAgICAgc2VsZi5wYXJzZXIub24oJ3BhcnQnLCBza2lwUGFydClcbiAgICAgIGJveS5oaXRQYXJ0c0xpbWl0ID0gdHJ1ZVxuICAgICAgYm95LmVtaXQoJ3BhcnRzTGltaXQnKVxuICAgICAgcmV0dXJuIHNraXBQYXJ0KHBhcnQpXG4gICAgfVxuXG4gICAgLy8gaGFjayBiZWNhdXNlIHN0cmVhbXMyIF9hbHdheXNfIGRvZXNuJ3QgZW1pdCAnZW5kJyB1bnRpbCBuZXh0VGljaywgc28gbGV0XG4gICAgLy8gdXMgZW1pdCAnZW5kJyBlYXJseSBzaW5jZSB3ZSBrbm93IHRoZSBwYXJ0IGhhcyBlbmRlZCBpZiB3ZSBhcmUgYWxyZWFkeVxuICAgIC8vIHNlZWluZyB0aGUgbmV4dCBwYXJ0XG4gICAgaWYgKGN1ckZpZWxkKSB7XG4gICAgICBjb25zdCBmaWVsZCA9IGN1ckZpZWxkXG4gICAgICBmaWVsZC5lbWl0KCdlbmQnKVxuICAgICAgZmllbGQucmVtb3ZlQWxsTGlzdGVuZXJzKCdlbmQnKVxuICAgIH1cblxuICAgIHBhcnQub24oJ2hlYWRlcicsIGZ1bmN0aW9uIChoZWFkZXIpIHtcbiAgICAgIGxldCBjb250eXBlXG4gICAgICBsZXQgZmllbGRuYW1lXG4gICAgICBsZXQgcGFyc2VkXG4gICAgICBsZXQgY2hhcnNldFxuICAgICAgbGV0IGVuY29kaW5nXG4gICAgICBsZXQgZmlsZW5hbWVcbiAgICAgIGxldCBuc2l6ZSA9IDBcblxuICAgICAgaWYgKGhlYWRlclsnY29udGVudC10eXBlJ10pIHtcbiAgICAgICAgcGFyc2VkID0gcGFyc2VQYXJhbXMoaGVhZGVyWydjb250ZW50LXR5cGUnXVswXSlcbiAgICAgICAgaWYgKHBhcnNlZFswXSkge1xuICAgICAgICAgIGNvbnR5cGUgPSBwYXJzZWRbMF0udG9Mb3dlckNhc2UoKVxuICAgICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IHBhcnNlZC5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgICAgICAgICAgaWYgKFJFX0NIQVJTRVQudGVzdChwYXJzZWRbaV1bMF0pKSB7XG4gICAgICAgICAgICAgIGNoYXJzZXQgPSBwYXJzZWRbaV1bMV0udG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoY29udHlwZSA9PT0gdW5kZWZpbmVkKSB7IGNvbnR5cGUgPSAndGV4dC9wbGFpbicgfVxuICAgICAgaWYgKGNoYXJzZXQgPT09IHVuZGVmaW5lZCkgeyBjaGFyc2V0ID0gZGVmQ2hhcnNldCB9XG5cbiAgICAgIGlmIChoZWFkZXJbJ2NvbnRlbnQtZGlzcG9zaXRpb24nXSkge1xuICAgICAgICBwYXJzZWQgPSBwYXJzZVBhcmFtcyhoZWFkZXJbJ2NvbnRlbnQtZGlzcG9zaXRpb24nXVswXSlcbiAgICAgICAgaWYgKCFSRV9GSUVMRC50ZXN0KHBhcnNlZFswXSkpIHsgcmV0dXJuIHNraXBQYXJ0KHBhcnQpIH1cbiAgICAgICAgZm9yIChpID0gMCwgbGVuID0gcGFyc2VkLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICAgICAgaWYgKFJFX05BTUUudGVzdChwYXJzZWRbaV1bMF0pKSB7XG4gICAgICAgICAgICBmaWVsZG5hbWUgPSBwYXJzZWRbaV1bMV1cbiAgICAgICAgICB9IGVsc2UgaWYgKFJFX0ZJTEVOQU1FLnRlc3QocGFyc2VkW2ldWzBdKSkge1xuICAgICAgICAgICAgZmlsZW5hbWUgPSBwYXJzZWRbaV1bMV1cbiAgICAgICAgICAgIGlmICghcHJlc2VydmVQYXRoKSB7IGZpbGVuYW1lID0gYmFzZW5hbWUoZmlsZW5hbWUpIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7IHJldHVybiBza2lwUGFydChwYXJ0KSB9XG5cbiAgICAgIGlmIChoZWFkZXJbJ2NvbnRlbnQtdHJhbnNmZXItZW5jb2RpbmcnXSkgeyBlbmNvZGluZyA9IGhlYWRlclsnY29udGVudC10cmFuc2Zlci1lbmNvZGluZyddWzBdLnRvTG93ZXJDYXNlKCkgfSBlbHNlIHsgZW5jb2RpbmcgPSAnN2JpdCcgfVxuXG4gICAgICBsZXQgb25EYXRhLFxuICAgICAgICBvbkVuZFxuXG4gICAgICBpZiAoaXNQYXJ0QUZpbGUoZmllbGRuYW1lLCBjb250eXBlLCBmaWxlbmFtZSkpIHtcbiAgICAgICAgLy8gZmlsZS9iaW5hcnkgZmllbGRcbiAgICAgICAgaWYgKG5maWxlcyA9PT0gZmlsZXNMaW1pdCkge1xuICAgICAgICAgIGlmICghYm95LmhpdEZpbGVzTGltaXQpIHtcbiAgICAgICAgICAgIGJveS5oaXRGaWxlc0xpbWl0ID0gdHJ1ZVxuICAgICAgICAgICAgYm95LmVtaXQoJ2ZpbGVzTGltaXQnKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gc2tpcFBhcnQocGFydClcbiAgICAgICAgfVxuXG4gICAgICAgICsrbmZpbGVzXG5cbiAgICAgICAgaWYgKGJveS5saXN0ZW5lckNvdW50KCdmaWxlJykgPT09IDApIHtcbiAgICAgICAgICBzZWxmLnBhcnNlci5faWdub3JlKClcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgICsrbmVuZHNcbiAgICAgICAgY29uc3QgZmlsZSA9IG5ldyBGaWxlU3RyZWFtKGZpbGVPcHRzKVxuICAgICAgICBjdXJGaWxlID0gZmlsZVxuICAgICAgICBmaWxlLm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLS1uZW5kc1xuICAgICAgICAgIHNlbGYuX3BhdXNlID0gZmFsc2VcbiAgICAgICAgICBjaGVja0ZpbmlzaGVkKClcbiAgICAgICAgICBpZiAoc2VsZi5fY2IgJiYgIXNlbGYuX25lZWREcmFpbikge1xuICAgICAgICAgICAgY29uc3QgY2IgPSBzZWxmLl9jYlxuICAgICAgICAgICAgc2VsZi5fY2IgPSB1bmRlZmluZWRcbiAgICAgICAgICAgIGNiKClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIGZpbGUuX3JlYWQgPSBmdW5jdGlvbiAobikge1xuICAgICAgICAgIGlmICghc2VsZi5fcGF1c2UpIHsgcmV0dXJuIH1cbiAgICAgICAgICBzZWxmLl9wYXVzZSA9IGZhbHNlXG4gICAgICAgICAgaWYgKHNlbGYuX2NiICYmICFzZWxmLl9uZWVkRHJhaW4pIHtcbiAgICAgICAgICAgIGNvbnN0IGNiID0gc2VsZi5fY2JcbiAgICAgICAgICAgIHNlbGYuX2NiID0gdW5kZWZpbmVkXG4gICAgICAgICAgICBjYigpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJveS5lbWl0KCdmaWxlJywgZmllbGRuYW1lLCBmaWxlLCBmaWxlbmFtZSwgZW5jb2RpbmcsIGNvbnR5cGUpXG5cbiAgICAgICAgb25EYXRhID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICBpZiAoKG5zaXplICs9IGRhdGEubGVuZ3RoKSA+IGZpbGVTaXplTGltaXQpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4dHJhbGVuID0gZmlsZVNpemVMaW1pdCAtIG5zaXplICsgZGF0YS5sZW5ndGhcbiAgICAgICAgICAgIGlmIChleHRyYWxlbiA+IDApIHsgZmlsZS5wdXNoKGRhdGEuc2xpY2UoMCwgZXh0cmFsZW4pKSB9XG4gICAgICAgICAgICBmaWxlLnRydW5jYXRlZCA9IHRydWVcbiAgICAgICAgICAgIGZpbGUuYnl0ZXNSZWFkID0gZmlsZVNpemVMaW1pdFxuICAgICAgICAgICAgcGFydC5yZW1vdmVBbGxMaXN0ZW5lcnMoJ2RhdGEnKVxuICAgICAgICAgICAgZmlsZS5lbWl0KCdsaW1pdCcpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9IGVsc2UgaWYgKCFmaWxlLnB1c2goZGF0YSkpIHsgc2VsZi5fcGF1c2UgPSB0cnVlIH1cblxuICAgICAgICAgIGZpbGUuYnl0ZXNSZWFkID0gbnNpemVcbiAgICAgICAgfVxuXG4gICAgICAgIG9uRW5kID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGN1ckZpbGUgPSB1bmRlZmluZWRcbiAgICAgICAgICBmaWxlLnB1c2gobnVsbClcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gbm9uLWZpbGUgZmllbGRcbiAgICAgICAgaWYgKG5maWVsZHMgPT09IGZpZWxkc0xpbWl0KSB7XG4gICAgICAgICAgaWYgKCFib3kuaGl0RmllbGRzTGltaXQpIHtcbiAgICAgICAgICAgIGJveS5oaXRGaWVsZHNMaW1pdCA9IHRydWVcbiAgICAgICAgICAgIGJveS5lbWl0KCdmaWVsZHNMaW1pdCcpXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBza2lwUGFydChwYXJ0KVxuICAgICAgICB9XG5cbiAgICAgICAgKytuZmllbGRzXG4gICAgICAgICsrbmVuZHNcbiAgICAgICAgbGV0IGJ1ZmZlciA9ICcnXG4gICAgICAgIGxldCB0cnVuY2F0ZWQgPSBmYWxzZVxuICAgICAgICBjdXJGaWVsZCA9IHBhcnRcblxuICAgICAgICBvbkRhdGEgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgIGlmICgobnNpemUgKz0gZGF0YS5sZW5ndGgpID4gZmllbGRTaXplTGltaXQpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4dHJhbGVuID0gKGZpZWxkU2l6ZUxpbWl0IC0gKG5zaXplIC0gZGF0YS5sZW5ndGgpKVxuICAgICAgICAgICAgYnVmZmVyICs9IGRhdGEudG9TdHJpbmcoJ2JpbmFyeScsIDAsIGV4dHJhbGVuKVxuICAgICAgICAgICAgdHJ1bmNhdGVkID0gdHJ1ZVxuICAgICAgICAgICAgcGFydC5yZW1vdmVBbGxMaXN0ZW5lcnMoJ2RhdGEnKVxuICAgICAgICAgIH0gZWxzZSB7IGJ1ZmZlciArPSBkYXRhLnRvU3RyaW5nKCdiaW5hcnknKSB9XG4gICAgICAgIH1cblxuICAgICAgICBvbkVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjdXJGaWVsZCA9IHVuZGVmaW5lZFxuICAgICAgICAgIGlmIChidWZmZXIubGVuZ3RoKSB7IGJ1ZmZlciA9IGRlY29kZVRleHQoYnVmZmVyLCAnYmluYXJ5JywgY2hhcnNldCkgfVxuICAgICAgICAgIGJveS5lbWl0KCdmaWVsZCcsIGZpZWxkbmFtZSwgYnVmZmVyLCBmYWxzZSwgdHJ1bmNhdGVkLCBlbmNvZGluZywgY29udHlwZSlcbiAgICAgICAgICAtLW5lbmRzXG4gICAgICAgICAgY2hlY2tGaW5pc2hlZCgpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLyogQXMgb2Ygbm9kZUAyZWZlNGFiNzYxNjY2ICh2MC4xMC4yOSsvdjAuMTEuMTQrKSwgYnVzYm95IGhhZCBiZWNvbWVcbiAgICAgICAgIGJyb2tlbi4gU3RyZWFtczIvc3RyZWFtczMgaXMgYSBodWdlIGJsYWNrIGJveCBvZiBjb25mdXNpb24sIGJ1dFxuICAgICAgICAgc29tZWhvdyBvdmVycmlkaW5nIHRoZSBzeW5jIHN0YXRlIHNlZW1zIHRvIGZpeCB0aGluZ3MgYWdhaW4gKGFuZCBzdGlsbFxuICAgICAgICAgc2VlbXMgdG8gd29yayBmb3IgcHJldmlvdXMgbm9kZSB2ZXJzaW9ucykuXG4gICAgICAqL1xuICAgICAgcGFydC5fcmVhZGFibGVTdGF0ZS5zeW5jID0gZmFsc2VcblxuICAgICAgcGFydC5vbignZGF0YScsIG9uRGF0YSlcbiAgICAgIHBhcnQub24oJ2VuZCcsIG9uRW5kKVxuICAgIH0pLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgIGlmIChjdXJGaWxlKSB7IGN1ckZpbGUuZW1pdCgnZXJyb3InLCBlcnIpIH1cbiAgICB9KVxuICB9KS5vbignZXJyb3InLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgYm95LmVtaXQoJ2Vycm9yJywgZXJyKVxuICB9KS5vbignZmluaXNoJywgZnVuY3Rpb24gKCkge1xuICAgIGZpbmlzaGVkID0gdHJ1ZVxuICAgIGNoZWNrRmluaXNoZWQoKVxuICB9KVxufVxuXG5NdWx0aXBhcnQucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKGNodW5rLCBjYikge1xuICBjb25zdCByID0gdGhpcy5wYXJzZXIud3JpdGUoY2h1bmspXG4gIGlmIChyICYmICF0aGlzLl9wYXVzZSkge1xuICAgIGNiKClcbiAgfSBlbHNlIHtcbiAgICB0aGlzLl9uZWVkRHJhaW4gPSAhclxuICAgIHRoaXMuX2NiID0gY2JcbiAgfVxufVxuXG5NdWx0aXBhcnQucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgY29uc3Qgc2VsZiA9IHRoaXNcblxuICBpZiAoc2VsZi5wYXJzZXIud3JpdGFibGUpIHtcbiAgICBzZWxmLnBhcnNlci5lbmQoKVxuICB9IGVsc2UgaWYgKCFzZWxmLl9ib3kuX2RvbmUpIHtcbiAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlbGYuX2JveS5fZG9uZSA9IHRydWVcbiAgICAgIHNlbGYuX2JveS5lbWl0KCdmaW5pc2gnKVxuICAgIH0pXG4gIH1cbn1cblxuZnVuY3Rpb24gc2tpcFBhcnQgKHBhcnQpIHtcbiAgcGFydC5yZXN1bWUoKVxufVxuXG5mdW5jdGlvbiBGaWxlU3RyZWFtIChvcHRzKSB7XG4gIFJlYWRhYmxlLmNhbGwodGhpcywgb3B0cylcblxuICB0aGlzLmJ5dGVzUmVhZCA9IDBcblxuICB0aGlzLnRydW5jYXRlZCA9IGZhbHNlXG59XG5cbmluaGVyaXRzKEZpbGVTdHJlYW0sIFJlYWRhYmxlKVxuXG5GaWxlU3RyZWFtLnByb3RvdHlwZS5fcmVhZCA9IGZ1bmN0aW9uIChuKSB7fVxuXG5tb2R1bGUuZXhwb3J0cyA9IE11bHRpcGFydFxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgUkVfUExVUyA9IC9cXCsvZ1xuXG5jb25zdCBIRVggPSBbXG4gIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsXG4gIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsXG4gIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsXG4gIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsXG4gIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsXG4gIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsXG4gIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsXG4gIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBcbl1cblxuZnVuY3Rpb24gRGVjb2RlciAoKSB7XG4gIHRoaXMuYnVmZmVyID0gdW5kZWZpbmVkXG59XG5EZWNvZGVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgLy8gUmVwbGFjZSAnKycgd2l0aCAnICcgYmVmb3JlIGRlY29kaW5nXG4gIHN0ciA9IHN0ci5yZXBsYWNlKFJFX1BMVVMsICcgJylcbiAgbGV0IHJlcyA9ICcnXG4gIGxldCBpID0gMDsgbGV0IHAgPSAwOyBjb25zdCBsZW4gPSBzdHIubGVuZ3RoXG4gIGZvciAoOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAodGhpcy5idWZmZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCFIRVhbc3RyLmNoYXJDb2RlQXQoaSldKSB7XG4gICAgICAgIHJlcyArPSAnJScgKyB0aGlzLmJ1ZmZlclxuICAgICAgICB0aGlzLmJ1ZmZlciA9IHVuZGVmaW5lZFxuICAgICAgICAtLWkgLy8gcmV0cnkgY2hhcmFjdGVyXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmJ1ZmZlciArPSBzdHJbaV1cbiAgICAgICAgKytwXG4gICAgICAgIGlmICh0aGlzLmJ1ZmZlci5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludCh0aGlzLmJ1ZmZlciwgMTYpKVxuICAgICAgICAgIHRoaXMuYnVmZmVyID0gdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHN0cltpXSA9PT0gJyUnKSB7XG4gICAgICBpZiAoaSA+IHApIHtcbiAgICAgICAgcmVzICs9IHN0ci5zdWJzdHJpbmcocCwgaSlcbiAgICAgICAgcCA9IGlcbiAgICAgIH1cbiAgICAgIHRoaXMuYnVmZmVyID0gJydcbiAgICAgICsrcFxuICAgIH1cbiAgfVxuICBpZiAocCA8IGxlbiAmJiB0aGlzLmJ1ZmZlciA9PT0gdW5kZWZpbmVkKSB7IHJlcyArPSBzdHIuc3Vic3RyaW5nKHApIH1cbiAgcmV0dXJuIHJlc1xufVxuRGVjb2Rlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuYnVmZmVyID0gdW5kZWZpbmVkXG59XG5cbm1vZHVsZS5leHBvcnRzID0gRGVjb2RlclxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgRGVjb2RlciA9IHJlcXVpcmUoJy4uL3V0aWxzL0RlY29kZXInKVxuY29uc3QgZGVjb2RlVGV4dCA9IHJlcXVpcmUoJy4uL3V0aWxzL2RlY29kZVRleHQnKVxuY29uc3QgZ2V0TGltaXQgPSByZXF1aXJlKCcuLi91dGlscy9nZXRMaW1pdCcpXG5cbmNvbnN0IFJFX0NIQVJTRVQgPSAvXmNoYXJzZXQkL2lcblxuVXJsRW5jb2RlZC5kZXRlY3QgPSAvXmFwcGxpY2F0aW9uXFwveC13d3ctZm9ybS11cmxlbmNvZGVkL2lcbmZ1bmN0aW9uIFVybEVuY29kZWQgKGJveSwgY2ZnKSB7XG4gIGNvbnN0IGxpbWl0cyA9IGNmZy5saW1pdHNcbiAgY29uc3QgcGFyc2VkQ29uVHlwZSA9IGNmZy5wYXJzZWRDb25UeXBlXG4gIHRoaXMuYm95ID0gYm95XG5cbiAgdGhpcy5maWVsZFNpemVMaW1pdCA9IGdldExpbWl0KGxpbWl0cywgJ2ZpZWxkU2l6ZScsIDEgKiAxMDI0ICogMTAyNClcbiAgdGhpcy5maWVsZE5hbWVTaXplTGltaXQgPSBnZXRMaW1pdChsaW1pdHMsICdmaWVsZE5hbWVTaXplJywgMTAwKVxuICB0aGlzLmZpZWxkc0xpbWl0ID0gZ2V0TGltaXQobGltaXRzLCAnZmllbGRzJywgSW5maW5pdHkpXG5cbiAgbGV0IGNoYXJzZXRcbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHBhcnNlZENvblR5cGUubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby12YXJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJzZWRDb25UeXBlW2ldKSAmJlxuICAgICAgICBSRV9DSEFSU0VULnRlc3QocGFyc2VkQ29uVHlwZVtpXVswXSkpIHtcbiAgICAgIGNoYXJzZXQgPSBwYXJzZWRDb25UeXBlW2ldWzFdLnRvTG93ZXJDYXNlKClcbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaWYgKGNoYXJzZXQgPT09IHVuZGVmaW5lZCkgeyBjaGFyc2V0ID0gY2ZnLmRlZkNoYXJzZXQgfHwgJ3V0ZjgnIH1cblxuICB0aGlzLmRlY29kZXIgPSBuZXcgRGVjb2RlcigpXG4gIHRoaXMuY2hhcnNldCA9IGNoYXJzZXRcbiAgdGhpcy5fZmllbGRzID0gMFxuICB0aGlzLl9zdGF0ZSA9ICdrZXknXG4gIHRoaXMuX2NoZWNraW5nQnl0ZXMgPSB0cnVlXG4gIHRoaXMuX2J5dGVzS2V5ID0gMFxuICB0aGlzLl9ieXRlc1ZhbCA9IDBcbiAgdGhpcy5fa2V5ID0gJydcbiAgdGhpcy5fdmFsID0gJydcbiAgdGhpcy5fa2V5VHJ1bmMgPSBmYWxzZVxuICB0aGlzLl92YWxUcnVuYyA9IGZhbHNlXG4gIHRoaXMuX2hpdExpbWl0ID0gZmFsc2Vcbn1cblxuVXJsRW5jb2RlZC5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiAoZGF0YSwgY2IpIHtcbiAgaWYgKHRoaXMuX2ZpZWxkcyA9PT0gdGhpcy5maWVsZHNMaW1pdCkge1xuICAgIGlmICghdGhpcy5ib3kuaGl0RmllbGRzTGltaXQpIHtcbiAgICAgIHRoaXMuYm95LmhpdEZpZWxkc0xpbWl0ID0gdHJ1ZVxuICAgICAgdGhpcy5ib3kuZW1pdCgnZmllbGRzTGltaXQnKVxuICAgIH1cbiAgICByZXR1cm4gY2IoKVxuICB9XG5cbiAgbGV0IGlkeGVxOyBsZXQgaWR4YW1wOyBsZXQgaTsgbGV0IHAgPSAwOyBjb25zdCBsZW4gPSBkYXRhLmxlbmd0aFxuXG4gIHdoaWxlIChwIDwgbGVuKSB7XG4gICAgaWYgKHRoaXMuX3N0YXRlID09PSAna2V5Jykge1xuICAgICAgaWR4ZXEgPSBpZHhhbXAgPSB1bmRlZmluZWRcbiAgICAgIGZvciAoaSA9IHA7IGkgPCBsZW47ICsraSkge1xuICAgICAgICBpZiAoIXRoaXMuX2NoZWNraW5nQnl0ZXMpIHsgKytwIH1cbiAgICAgICAgaWYgKGRhdGFbaV0gPT09IDB4M0QvKiA9ICovKSB7XG4gICAgICAgICAgaWR4ZXEgPSBpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhW2ldID09PSAweDI2LyogJiAqLykge1xuICAgICAgICAgIGlkeGFtcCA9IGlcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9jaGVja2luZ0J5dGVzICYmIHRoaXMuX2J5dGVzS2V5ID09PSB0aGlzLmZpZWxkTmFtZVNpemVMaW1pdCkge1xuICAgICAgICAgIHRoaXMuX2hpdExpbWl0ID0gdHJ1ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fY2hlY2tpbmdCeXRlcykgeyArK3RoaXMuX2J5dGVzS2V5IH1cbiAgICAgIH1cblxuICAgICAgaWYgKGlkeGVxICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8ga2V5IHdpdGggYXNzaWdubWVudFxuICAgICAgICBpZiAoaWR4ZXEgPiBwKSB7IHRoaXMuX2tleSArPSB0aGlzLmRlY29kZXIud3JpdGUoZGF0YS50b1N0cmluZygnYmluYXJ5JywgcCwgaWR4ZXEpKSB9XG4gICAgICAgIHRoaXMuX3N0YXRlID0gJ3ZhbCdcblxuICAgICAgICB0aGlzLl9oaXRMaW1pdCA9IGZhbHNlXG4gICAgICAgIHRoaXMuX2NoZWNraW5nQnl0ZXMgPSB0cnVlXG4gICAgICAgIHRoaXMuX3ZhbCA9ICcnXG4gICAgICAgIHRoaXMuX2J5dGVzVmFsID0gMFxuICAgICAgICB0aGlzLl92YWxUcnVuYyA9IGZhbHNlXG4gICAgICAgIHRoaXMuZGVjb2Rlci5yZXNldCgpXG5cbiAgICAgICAgcCA9IGlkeGVxICsgMVxuICAgICAgfSBlbHNlIGlmIChpZHhhbXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBrZXkgd2l0aCBubyBhc3NpZ25tZW50XG4gICAgICAgICsrdGhpcy5fZmllbGRzXG4gICAgICAgIGxldCBrZXk7IGNvbnN0IGtleVRydW5jID0gdGhpcy5fa2V5VHJ1bmNcbiAgICAgICAgaWYgKGlkeGFtcCA+IHApIHsga2V5ID0gKHRoaXMuX2tleSArPSB0aGlzLmRlY29kZXIud3JpdGUoZGF0YS50b1N0cmluZygnYmluYXJ5JywgcCwgaWR4YW1wKSkpIH0gZWxzZSB7IGtleSA9IHRoaXMuX2tleSB9XG5cbiAgICAgICAgdGhpcy5faGl0TGltaXQgPSBmYWxzZVxuICAgICAgICB0aGlzLl9jaGVja2luZ0J5dGVzID0gdHJ1ZVxuICAgICAgICB0aGlzLl9rZXkgPSAnJ1xuICAgICAgICB0aGlzLl9ieXRlc0tleSA9IDBcbiAgICAgICAgdGhpcy5fa2V5VHJ1bmMgPSBmYWxzZVxuICAgICAgICB0aGlzLmRlY29kZXIucmVzZXQoKVxuXG4gICAgICAgIGlmIChrZXkubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5ib3kuZW1pdCgnZmllbGQnLCBkZWNvZGVUZXh0KGtleSwgJ2JpbmFyeScsIHRoaXMuY2hhcnNldCksXG4gICAgICAgICAgICAnJyxcbiAgICAgICAgICAgIGtleVRydW5jLFxuICAgICAgICAgICAgZmFsc2UpXG4gICAgICAgIH1cblxuICAgICAgICBwID0gaWR4YW1wICsgMVxuICAgICAgICBpZiAodGhpcy5fZmllbGRzID09PSB0aGlzLmZpZWxkc0xpbWl0KSB7IHJldHVybiBjYigpIH1cbiAgICAgIH0gZWxzZSBpZiAodGhpcy5faGl0TGltaXQpIHtcbiAgICAgICAgLy8gd2UgbWF5IG5vdCBoYXZlIGhpdCB0aGUgYWN0dWFsIGxpbWl0IGlmIHRoZXJlIGFyZSBlbmNvZGVkIGJ5dGVzLi4uXG4gICAgICAgIGlmIChpID4gcCkgeyB0aGlzLl9rZXkgKz0gdGhpcy5kZWNvZGVyLndyaXRlKGRhdGEudG9TdHJpbmcoJ2JpbmFyeScsIHAsIGkpKSB9XG4gICAgICAgIHAgPSBpXG4gICAgICAgIGlmICgodGhpcy5fYnl0ZXNLZXkgPSB0aGlzLl9rZXkubGVuZ3RoKSA9PT0gdGhpcy5maWVsZE5hbWVTaXplTGltaXQpIHtcbiAgICAgICAgICAvLyB5ZXAsIHdlIGFjdHVhbGx5IGRpZCBoaXQgdGhlIGxpbWl0XG4gICAgICAgICAgdGhpcy5fY2hlY2tpbmdCeXRlcyA9IGZhbHNlXG4gICAgICAgICAgdGhpcy5fa2V5VHJ1bmMgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChwIDwgbGVuKSB7IHRoaXMuX2tleSArPSB0aGlzLmRlY29kZXIud3JpdGUoZGF0YS50b1N0cmluZygnYmluYXJ5JywgcCkpIH1cbiAgICAgICAgcCA9IGxlblxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZHhhbXAgPSB1bmRlZmluZWRcbiAgICAgIGZvciAoaSA9IHA7IGkgPCBsZW47ICsraSkge1xuICAgICAgICBpZiAoIXRoaXMuX2NoZWNraW5nQnl0ZXMpIHsgKytwIH1cbiAgICAgICAgaWYgKGRhdGFbaV0gPT09IDB4MjYvKiAmICovKSB7XG4gICAgICAgICAgaWR4YW1wID0gaVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2NoZWNraW5nQnl0ZXMgJiYgdGhpcy5fYnl0ZXNWYWwgPT09IHRoaXMuZmllbGRTaXplTGltaXQpIHtcbiAgICAgICAgICB0aGlzLl9oaXRMaW1pdCA9IHRydWVcbiAgICAgICAgICBicmVha1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2NoZWNraW5nQnl0ZXMpIHsgKyt0aGlzLl9ieXRlc1ZhbCB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpZHhhbXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICArK3RoaXMuX2ZpZWxkc1xuICAgICAgICBpZiAoaWR4YW1wID4gcCkgeyB0aGlzLl92YWwgKz0gdGhpcy5kZWNvZGVyLndyaXRlKGRhdGEudG9TdHJpbmcoJ2JpbmFyeScsIHAsIGlkeGFtcCkpIH1cbiAgICAgICAgdGhpcy5ib3kuZW1pdCgnZmllbGQnLCBkZWNvZGVUZXh0KHRoaXMuX2tleSwgJ2JpbmFyeScsIHRoaXMuY2hhcnNldCksXG4gICAgICAgICAgZGVjb2RlVGV4dCh0aGlzLl92YWwsICdiaW5hcnknLCB0aGlzLmNoYXJzZXQpLFxuICAgICAgICAgIHRoaXMuX2tleVRydW5jLFxuICAgICAgICAgIHRoaXMuX3ZhbFRydW5jKVxuICAgICAgICB0aGlzLl9zdGF0ZSA9ICdrZXknXG5cbiAgICAgICAgdGhpcy5faGl0TGltaXQgPSBmYWxzZVxuICAgICAgICB0aGlzLl9jaGVja2luZ0J5dGVzID0gdHJ1ZVxuICAgICAgICB0aGlzLl9rZXkgPSAnJ1xuICAgICAgICB0aGlzLl9ieXRlc0tleSA9IDBcbiAgICAgICAgdGhpcy5fa2V5VHJ1bmMgPSBmYWxzZVxuICAgICAgICB0aGlzLmRlY29kZXIucmVzZXQoKVxuXG4gICAgICAgIHAgPSBpZHhhbXAgKyAxXG4gICAgICAgIGlmICh0aGlzLl9maWVsZHMgPT09IHRoaXMuZmllbGRzTGltaXQpIHsgcmV0dXJuIGNiKCkgfVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9oaXRMaW1pdCkge1xuICAgICAgICAvLyB3ZSBtYXkgbm90IGhhdmUgaGl0IHRoZSBhY3R1YWwgbGltaXQgaWYgdGhlcmUgYXJlIGVuY29kZWQgYnl0ZXMuLi5cbiAgICAgICAgaWYgKGkgPiBwKSB7IHRoaXMuX3ZhbCArPSB0aGlzLmRlY29kZXIud3JpdGUoZGF0YS50b1N0cmluZygnYmluYXJ5JywgcCwgaSkpIH1cbiAgICAgICAgcCA9IGlcbiAgICAgICAgaWYgKCh0aGlzLl92YWwgPT09ICcnICYmIHRoaXMuZmllbGRTaXplTGltaXQgPT09IDApIHx8XG4gICAgICAgICAgICAodGhpcy5fYnl0ZXNWYWwgPSB0aGlzLl92YWwubGVuZ3RoKSA9PT0gdGhpcy5maWVsZFNpemVMaW1pdCkge1xuICAgICAgICAgIC8vIHllcCwgd2UgYWN0dWFsbHkgZGlkIGhpdCB0aGUgbGltaXRcbiAgICAgICAgICB0aGlzLl9jaGVja2luZ0J5dGVzID0gZmFsc2VcbiAgICAgICAgICB0aGlzLl92YWxUcnVuYyA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHAgPCBsZW4pIHsgdGhpcy5fdmFsICs9IHRoaXMuZGVjb2Rlci53cml0ZShkYXRhLnRvU3RyaW5nKCdiaW5hcnknLCBwKSkgfVxuICAgICAgICBwID0gbGVuXG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNiKClcbn1cblxuVXJsRW5jb2RlZC5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5ib3kuX2RvbmUpIHsgcmV0dXJuIH1cblxuICBpZiAodGhpcy5fc3RhdGUgPT09ICdrZXknICYmIHRoaXMuX2tleS5sZW5ndGggPiAwKSB7XG4gICAgdGhpcy5ib3kuZW1pdCgnZmllbGQnLCBkZWNvZGVUZXh0KHRoaXMuX2tleSwgJ2JpbmFyeScsIHRoaXMuY2hhcnNldCksXG4gICAgICAnJyxcbiAgICAgIHRoaXMuX2tleVRydW5jLFxuICAgICAgZmFsc2UpXG4gIH0gZWxzZSBpZiAodGhpcy5fc3RhdGUgPT09ICd2YWwnKSB7XG4gICAgdGhpcy5ib3kuZW1pdCgnZmllbGQnLCBkZWNvZGVUZXh0KHRoaXMuX2tleSwgJ2JpbmFyeScsIHRoaXMuY2hhcnNldCksXG4gICAgICBkZWNvZGVUZXh0KHRoaXMuX3ZhbCwgJ2JpbmFyeScsIHRoaXMuY2hhcnNldCksXG4gICAgICB0aGlzLl9rZXlUcnVuYyxcbiAgICAgIHRoaXMuX3ZhbFRydW5jKVxuICB9XG4gIHRoaXMuYm95Ll9kb25lID0gdHJ1ZVxuICB0aGlzLmJveS5lbWl0KCdmaW5pc2gnKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFVybEVuY29kZWRcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFdyaXRhYmxlU3RyZWFtID0gcmVxdWlyZSgnbm9kZTpzdHJlYW0nKS5Xcml0YWJsZVxuY29uc3QgeyBpbmhlcml0cyB9ID0gcmVxdWlyZSgnbm9kZTp1dGlsJylcbmNvbnN0IERpY2VyID0gcmVxdWlyZSgnLi4vZGVwcy9kaWNlci9saWIvRGljZXInKVxuXG5jb25zdCBNdWx0aXBhcnRQYXJzZXIgPSByZXF1aXJlKCcuL3R5cGVzL211bHRpcGFydCcpXG5jb25zdCBVcmxlbmNvZGVkUGFyc2VyID0gcmVxdWlyZSgnLi90eXBlcy91cmxlbmNvZGVkJylcbmNvbnN0IHBhcnNlUGFyYW1zID0gcmVxdWlyZSgnLi91dGlscy9wYXJzZVBhcmFtcycpXG5cbmZ1bmN0aW9uIEJ1c2JveSAob3B0cykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQnVzYm95KSkgeyByZXR1cm4gbmV3IEJ1c2JveShvcHRzKSB9XG5cbiAgaWYgKHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0J1c2JveSBleHBlY3RlZCBhbiBvcHRpb25zLU9iamVjdC4nKVxuICB9XG4gIGlmICh0eXBlb2Ygb3B0cy5oZWFkZXJzICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0J1c2JveSBleHBlY3RlZCBhbiBvcHRpb25zLU9iamVjdCB3aXRoIGhlYWRlcnMtYXR0cmlidXRlLicpXG4gIH1cbiAgaWYgKHR5cGVvZiBvcHRzLmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ01pc3NpbmcgQ29udGVudC1UeXBlLWhlYWRlci4nKVxuICB9XG5cbiAgY29uc3Qge1xuICAgIGhlYWRlcnMsXG4gICAgLi4uc3RyZWFtT3B0aW9uc1xuICB9ID0gb3B0c1xuXG4gIHRoaXMub3B0cyA9IHtcbiAgICBhdXRvRGVzdHJveTogZmFsc2UsXG4gICAgLi4uc3RyZWFtT3B0aW9uc1xuICB9XG4gIFdyaXRhYmxlU3RyZWFtLmNhbGwodGhpcywgdGhpcy5vcHRzKVxuXG4gIHRoaXMuX2RvbmUgPSBmYWxzZVxuICB0aGlzLl9wYXJzZXIgPSB0aGlzLmdldFBhcnNlckJ5SGVhZGVycyhoZWFkZXJzKVxuICB0aGlzLl9maW5pc2hlZCA9IGZhbHNlXG59XG5pbmhlcml0cyhCdXNib3ksIFdyaXRhYmxlU3RyZWFtKVxuXG5CdXNib3kucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiAoZXYpIHtcbiAgaWYgKGV2ID09PSAnZmluaXNoJykge1xuICAgIGlmICghdGhpcy5fZG9uZSkge1xuICAgICAgdGhpcy5fcGFyc2VyPy5lbmQoKVxuICAgICAgcmV0dXJuXG4gICAgfSBlbHNlIGlmICh0aGlzLl9maW5pc2hlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHRoaXMuX2ZpbmlzaGVkID0gdHJ1ZVxuICB9XG4gIFdyaXRhYmxlU3RyZWFtLnByb3RvdHlwZS5lbWl0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbn1cblxuQnVzYm95LnByb3RvdHlwZS5nZXRQYXJzZXJCeUhlYWRlcnMgPSBmdW5jdGlvbiAoaGVhZGVycykge1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZVBhcmFtcyhoZWFkZXJzWydjb250ZW50LXR5cGUnXSlcblxuICBjb25zdCBjZmcgPSB7XG4gICAgZGVmQ2hhcnNldDogdGhpcy5vcHRzLmRlZkNoYXJzZXQsXG4gICAgZmlsZUh3bTogdGhpcy5vcHRzLmZpbGVId20sXG4gICAgaGVhZGVycyxcbiAgICBoaWdoV2F0ZXJNYXJrOiB0aGlzLm9wdHMuaGlnaFdhdGVyTWFyayxcbiAgICBpc1BhcnRBRmlsZTogdGhpcy5vcHRzLmlzUGFydEFGaWxlLFxuICAgIGxpbWl0czogdGhpcy5vcHRzLmxpbWl0cyxcbiAgICBwYXJzZWRDb25UeXBlOiBwYXJzZWQsXG4gICAgcHJlc2VydmVQYXRoOiB0aGlzLm9wdHMucHJlc2VydmVQYXRoXG4gIH1cblxuICBpZiAoTXVsdGlwYXJ0UGFyc2VyLmRldGVjdC50ZXN0KHBhcnNlZFswXSkpIHtcbiAgICByZXR1cm4gbmV3IE11bHRpcGFydFBhcnNlcih0aGlzLCBjZmcpXG4gIH1cbiAgaWYgKFVybGVuY29kZWRQYXJzZXIuZGV0ZWN0LnRlc3QocGFyc2VkWzBdKSkge1xuICAgIHJldHVybiBuZXcgVXJsZW5jb2RlZFBhcnNlcih0aGlzLCBjZmcpXG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBDb250ZW50LVR5cGUuJylcbn1cblxuQnVzYm95LnByb3RvdHlwZS5fd3JpdGUgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICB0aGlzLl9wYXJzZXIud3JpdGUoY2h1bmssIGNiKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEJ1c2JveVxubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IEJ1c2JveVxubW9kdWxlLmV4cG9ydHMuQnVzYm95ID0gQnVzYm95XG5cbm1vZHVsZS5leHBvcnRzLkRpY2VyID0gRGljZXJcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgTWVzc2FnZUNoYW5uZWwsIHJlY2VpdmVNZXNzYWdlT25Qb3J0IH0gPSByZXF1aXJlKCd3b3JrZXJfdGhyZWFkcycpXG5cbmNvbnN0IGNvcnNTYWZlTGlzdGVkTWV0aG9kcyA9IFsnR0VUJywgJ0hFQUQnLCAnUE9TVCddXG5jb25zdCBjb3JzU2FmZUxpc3RlZE1ldGhvZHNTZXQgPSBuZXcgU2V0KGNvcnNTYWZlTGlzdGVkTWV0aG9kcylcblxuY29uc3QgbnVsbEJvZHlTdGF0dXMgPSBbMTAxLCAyMDQsIDIwNSwgMzA0XVxuXG5jb25zdCByZWRpcmVjdFN0YXR1cyA9IFszMDEsIDMwMiwgMzAzLCAzMDcsIDMwOF1cbmNvbnN0IHJlZGlyZWN0U3RhdHVzU2V0ID0gbmV3IFNldChyZWRpcmVjdFN0YXR1cylcblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2Jsb2NrLWJhZC1wb3J0XG5jb25zdCBiYWRQb3J0cyA9IFtcbiAgJzEnLCAnNycsICc5JywgJzExJywgJzEzJywgJzE1JywgJzE3JywgJzE5JywgJzIwJywgJzIxJywgJzIyJywgJzIzJywgJzI1JywgJzM3JywgJzQyJywgJzQzJywgJzUzJywgJzY5JywgJzc3JywgJzc5JyxcbiAgJzg3JywgJzk1JywgJzEwMScsICcxMDInLCAnMTAzJywgJzEwNCcsICcxMDknLCAnMTEwJywgJzExMScsICcxMTMnLCAnMTE1JywgJzExNycsICcxMTknLCAnMTIzJywgJzEzNScsICcxMzcnLFxuICAnMTM5JywgJzE0MycsICcxNjEnLCAnMTc5JywgJzM4OScsICc0MjcnLCAnNDY1JywgJzUxMicsICc1MTMnLCAnNTE0JywgJzUxNScsICc1MjYnLCAnNTMwJywgJzUzMScsICc1MzInLFxuICAnNTQwJywgJzU0OCcsICc1NTQnLCAnNTU2JywgJzU2MycsICc1ODcnLCAnNjAxJywgJzYzNicsICc5ODknLCAnOTkwJywgJzk5MycsICc5OTUnLCAnMTcxOScsICcxNzIwJywgJzE3MjMnLFxuICAnMjA0OScsICczNjU5JywgJzQwNDUnLCAnNTA2MCcsICc1MDYxJywgJzYwMDAnLCAnNjU2NicsICc2NjY1JywgJzY2NjYnLCAnNjY2NycsICc2NjY4JywgJzY2NjknLCAnNjY5NycsXG4gICcxMDA4MCdcbl1cblxuY29uc3QgYmFkUG9ydHNTZXQgPSBuZXcgU2V0KGJhZFBvcnRzKVxuXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLXJlZmVycmVyLXBvbGljeS8jcmVmZXJyZXItcG9saWNpZXNcbmNvbnN0IHJlZmVycmVyUG9saWN5ID0gW1xuICAnJyxcbiAgJ25vLXJlZmVycmVyJyxcbiAgJ25vLXJlZmVycmVyLXdoZW4tZG93bmdyYWRlJyxcbiAgJ3NhbWUtb3JpZ2luJyxcbiAgJ29yaWdpbicsXG4gICdzdHJpY3Qtb3JpZ2luJyxcbiAgJ29yaWdpbi13aGVuLWNyb3NzLW9yaWdpbicsXG4gICdzdHJpY3Qtb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luJyxcbiAgJ3Vuc2FmZS11cmwnXG5dXG5jb25zdCByZWZlcnJlclBvbGljeVNldCA9IG5ldyBTZXQocmVmZXJyZXJQb2xpY3kpXG5cbmNvbnN0IHJlcXVlc3RSZWRpcmVjdCA9IFsnZm9sbG93JywgJ21hbnVhbCcsICdlcnJvciddXG5cbmNvbnN0IHNhZmVNZXRob2RzID0gWydHRVQnLCAnSEVBRCcsICdPUFRJT05TJywgJ1RSQUNFJ11cbmNvbnN0IHNhZmVNZXRob2RzU2V0ID0gbmV3IFNldChzYWZlTWV0aG9kcylcblxuY29uc3QgcmVxdWVzdE1vZGUgPSBbJ25hdmlnYXRlJywgJ3NhbWUtb3JpZ2luJywgJ25vLWNvcnMnLCAnY29ycyddXG5cbmNvbnN0IHJlcXVlc3RDcmVkZW50aWFscyA9IFsnb21pdCcsICdzYW1lLW9yaWdpbicsICdpbmNsdWRlJ11cblxuY29uc3QgcmVxdWVzdENhY2hlID0gW1xuICAnZGVmYXVsdCcsXG4gICduby1zdG9yZScsXG4gICdyZWxvYWQnLFxuICAnbm8tY2FjaGUnLFxuICAnZm9yY2UtY2FjaGUnLFxuICAnb25seS1pZi1jYWNoZWQnXG5dXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXF1ZXN0LWJvZHktaGVhZGVyLW5hbWVcbmNvbnN0IHJlcXVlc3RCb2R5SGVhZGVyID0gW1xuICAnY29udGVudC1lbmNvZGluZycsXG4gICdjb250ZW50LWxhbmd1YWdlJyxcbiAgJ2NvbnRlbnQtbG9jYXRpb24nLFxuICAnY29udGVudC10eXBlJyxcbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8yMDIxXG4gIC8vICdDb250ZW50LUxlbmd0aCcgaXMgYSBmb3JiaWRkZW4gaGVhZGVyIG5hbWUsIHdoaWNoIGlzIHR5cGljYWxseVxuICAvLyByZW1vdmVkIGluIHRoZSBIZWFkZXJzIGltcGxlbWVudGF0aW9uLiBIb3dldmVyLCB1bmRpY2kgZG9lc24ndFxuICAvLyBmaWx0ZXIgb3V0IGhlYWRlcnMsIHNvIHdlIGFkZCBpdCBoZXJlLlxuICAnY29udGVudC1sZW5ndGgnXG5dXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNlbnVtZGVmLXJlcXVlc3RkdXBsZXhcbmNvbnN0IHJlcXVlc3REdXBsZXggPSBbXG4gICdoYWxmJ1xuXVxuXG4vLyBodHRwOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmb3JiaWRkZW4tbWV0aG9kXG5jb25zdCBmb3JiaWRkZW5NZXRob2RzID0gWydDT05ORUNUJywgJ1RSQUNFJywgJ1RSQUNLJ11cbmNvbnN0IGZvcmJpZGRlbk1ldGhvZHNTZXQgPSBuZXcgU2V0KGZvcmJpZGRlbk1ldGhvZHMpXG5cbmNvbnN0IHN1YnJlc291cmNlID0gW1xuICAnYXVkaW8nLFxuICAnYXVkaW93b3JrbGV0JyxcbiAgJ2ZvbnQnLFxuICAnaW1hZ2UnLFxuICAnbWFuaWZlc3QnLFxuICAncGFpbnR3b3JrbGV0JyxcbiAgJ3NjcmlwdCcsXG4gICdzdHlsZScsXG4gICd0cmFjaycsXG4gICd2aWRlbycsXG4gICd4c2x0JyxcbiAgJydcbl1cbmNvbnN0IHN1YnJlc291cmNlU2V0ID0gbmV3IFNldChzdWJyZXNvdXJjZSlcblxuLyoqIEB0eXBlIHtnbG9iYWxUaGlzWydET01FeGNlcHRpb24nXX0gKi9cbmNvbnN0IERPTUV4Y2VwdGlvbiA9IGdsb2JhbFRoaXMuRE9NRXhjZXB0aW9uID8/ICgoKSA9PiB7XG4gIC8vIERPTUV4Y2VwdGlvbiB3YXMgb25seSBtYWRlIGEgZ2xvYmFsIGluIE5vZGUgdjE3LjAuMCxcbiAgLy8gYnV0IGZldGNoIHN1cHBvcnRzID49IHYxNi44LlxuICB0cnkge1xuICAgIGF0b2IoJ34nKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKGVycikuY29uc3RydWN0b3JcbiAgfVxufSkoKVxuXG5sZXQgY2hhbm5lbFxuXG4vKiogQHR5cGUge2dsb2JhbFRoaXNbJ3N0cnVjdHVyZWRDbG9uZSddfSAqL1xuY29uc3Qgc3RydWN0dXJlZENsb25lID1cbiAgZ2xvYmFsVGhpcy5zdHJ1Y3R1cmVkQ2xvbmUgPz9cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvYjI3YWUyNGRjYzQyNTFiYWQ3MjZkOWQ4NGJhZjY3OGQxZjcwN2ZlZC9saWIvaW50ZXJuYWwvc3RydWN0dXJlZF9jbG9uZS5qc1xuICAvLyBzdHJ1Y3R1cmVkQ2xvbmUgd2FzIGFkZGVkIGluIHYxNy4wLjAsIGJ1dCBmZXRjaCBzdXBwb3J0cyB2MTYuOFxuICBmdW5jdGlvbiBzdHJ1Y3R1cmVkQ2xvbmUgKHZhbHVlLCBvcHRpb25zID0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ21pc3NpbmcgYXJndW1lbnQnKVxuICAgIH1cblxuICAgIGlmICghY2hhbm5lbCkge1xuICAgICAgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpXG4gICAgfVxuICAgIGNoYW5uZWwucG9ydDEudW5yZWYoKVxuICAgIGNoYW5uZWwucG9ydDIudW5yZWYoKVxuICAgIGNoYW5uZWwucG9ydDEucG9zdE1lc3NhZ2UodmFsdWUsIG9wdGlvbnM/LnRyYW5zZmVyKVxuICAgIHJldHVybiByZWNlaXZlTWVzc2FnZU9uUG9ydChjaGFubmVsLnBvcnQyKS5tZXNzYWdlXG4gIH1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIERPTUV4Y2VwdGlvbixcbiAgc3RydWN0dXJlZENsb25lLFxuICBzdWJyZXNvdXJjZSxcbiAgZm9yYmlkZGVuTWV0aG9kcyxcbiAgcmVxdWVzdEJvZHlIZWFkZXIsXG4gIHJlZmVycmVyUG9saWN5LFxuICByZXF1ZXN0UmVkaXJlY3QsXG4gIHJlcXVlc3RNb2RlLFxuICByZXF1ZXN0Q3JlZGVudGlhbHMsXG4gIHJlcXVlc3RDYWNoZSxcbiAgcmVkaXJlY3RTdGF0dXMsXG4gIGNvcnNTYWZlTGlzdGVkTWV0aG9kcyxcbiAgbnVsbEJvZHlTdGF0dXMsXG4gIHNhZmVNZXRob2RzLFxuICBiYWRQb3J0cyxcbiAgcmVxdWVzdER1cGxleCxcbiAgc3VicmVzb3VyY2VTZXQsXG4gIGJhZFBvcnRzU2V0LFxuICByZWRpcmVjdFN0YXR1c1NldCxcbiAgY29yc1NhZmVMaXN0ZWRNZXRob2RzU2V0LFxuICBzYWZlTWV0aG9kc1NldCxcbiAgZm9yYmlkZGVuTWV0aG9kc1NldCxcbiAgcmVmZXJyZXJQb2xpY3lTZXRcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbi8vIEluIGNhc2Ugb2YgYnJlYWtpbmcgY2hhbmdlcywgaW5jcmVhc2UgdGhlIHZlcnNpb25cbi8vIG51bWJlciB0byBhdm9pZCBjb25mbGljdHMuXG5jb25zdCBnbG9iYWxPcmlnaW4gPSBTeW1ib2wuZm9yKCd1bmRpY2kuZ2xvYmFsT3JpZ2luLjEnKVxuXG5mdW5jdGlvbiBnZXRHbG9iYWxPcmlnaW4gKCkge1xuICByZXR1cm4gZ2xvYmFsVGhpc1tnbG9iYWxPcmlnaW5dXG59XG5cbmZ1bmN0aW9uIHNldEdsb2JhbE9yaWdpbiAobmV3T3JpZ2luKSB7XG4gIGlmIChuZXdPcmlnaW4gPT09IHVuZGVmaW5lZCkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnbG9iYWxUaGlzLCBnbG9iYWxPcmlnaW4sIHtcbiAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZVxuICAgIH0pXG5cbiAgICByZXR1cm5cbiAgfVxuXG4gIGNvbnN0IHBhcnNlZFVSTCA9IG5ldyBVUkwobmV3T3JpZ2luKVxuXG4gIGlmIChwYXJzZWRVUkwucHJvdG9jb2wgIT09ICdodHRwOicgJiYgcGFyc2VkVVJMLnByb3RvY29sICE9PSAnaHR0cHM6Jykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE9ubHkgaHR0cCAmIGh0dHBzIHVybHMgYXJlIGFsbG93ZWQsIHJlY2VpdmVkICR7cGFyc2VkVVJMLnByb3RvY29sfWApXG4gIH1cblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZ2xvYmFsVGhpcywgZ2xvYmFsT3JpZ2luLCB7XG4gICAgdmFsdWU6IHBhcnNlZFVSTCxcbiAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IGZhbHNlXG4gIH0pXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRHbG9iYWxPcmlnaW4sXG4gIHNldEdsb2JhbE9yaWdpblxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyByZWRpcmVjdFN0YXR1c1NldCwgcmVmZXJyZXJQb2xpY3lTZXQ6IHJlZmVycmVyUG9saWN5VG9rZW5zLCBiYWRQb3J0c1NldCB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3QgeyBnZXRHbG9iYWxPcmlnaW4gfSA9IHJlcXVpcmUoJy4vZ2xvYmFsJylcbmNvbnN0IHsgcGVyZm9ybWFuY2UgfSA9IHJlcXVpcmUoJ3BlcmZfaG9va3MnKVxuY29uc3QgeyBpc0Jsb2JMaWtlLCB0b1VTVlN0cmluZywgUmVhZGFibGVTdHJlYW1Gcm9tIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbmNvbnN0IHsgaXNVaW50OEFycmF5IH0gPSByZXF1aXJlKCd1dGlsL3R5cGVzJylcblxubGV0IHN1cHBvcnRlZEhhc2hlcyA9IFtdXG5cbi8vIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvY3J5cHRvLmh0bWwjZGV0ZXJtaW5pbmctaWYtY3J5cHRvLXN1cHBvcnQtaXMtdW5hdmFpbGFibGVcbi8qKiBAdHlwZSB7aW1wb3J0KCdjcnlwdG8nKXx1bmRlZmluZWR9ICovXG5sZXQgY3J5cHRvXG5cbnRyeSB7XG4gIGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpXG4gIGNvbnN0IHBvc3NpYmxlUmVsZXZhbnRIYXNoZXMgPSBbJ3NoYTI1NicsICdzaGEzODQnLCAnc2hhNTEyJ11cbiAgc3VwcG9ydGVkSGFzaGVzID0gY3J5cHRvLmdldEhhc2hlcygpLmZpbHRlcigoaGFzaCkgPT4gcG9zc2libGVSZWxldmFudEhhc2hlcy5pbmNsdWRlcyhoYXNoKSlcbi8qIGM4IGlnbm9yZSBuZXh0IDMgKi9cbn0gY2F0Y2gge1xufVxuXG5mdW5jdGlvbiByZXNwb25zZVVSTCAocmVzcG9uc2UpIHtcbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3Jlc3BvbnNlc1xuICAvLyBBIHJlc3BvbnNlIGhhcyBhbiBhc3NvY2lhdGVkIFVSTC4gSXQgaXMgYSBwb2ludGVyIHRvIHRoZSBsYXN0IFVSTFxuICAvLyBpbiByZXNwb25zZeKAmXMgVVJMIGxpc3QgYW5kIG51bGwgaWYgcmVzcG9uc2XigJlzIFVSTCBsaXN0IGlzIGVtcHR5LlxuICBjb25zdCB1cmxMaXN0ID0gcmVzcG9uc2UudXJsTGlzdFxuICBjb25zdCBsZW5ndGggPSB1cmxMaXN0Lmxlbmd0aFxuICByZXR1cm4gbGVuZ3RoID09PSAwID8gbnVsbCA6IHVybExpc3RbbGVuZ3RoIC0gMV0udG9TdHJpbmcoKVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1yZXNwb25zZS1sb2NhdGlvbi11cmxcbmZ1bmN0aW9uIHJlc3BvbnNlTG9jYXRpb25VUkwgKHJlc3BvbnNlLCByZXF1ZXN0RnJhZ21lbnQpIHtcbiAgLy8gMS4gSWYgcmVzcG9uc2XigJlzIHN0YXR1cyBpcyBub3QgYSByZWRpcmVjdCBzdGF0dXMsIHRoZW4gcmV0dXJuIG51bGwuXG4gIGlmICghcmVkaXJlY3RTdGF0dXNTZXQuaGFzKHJlc3BvbnNlLnN0YXR1cykpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLy8gMi4gTGV0IGxvY2F0aW9uIGJlIHRoZSByZXN1bHQgb2YgZXh0cmFjdGluZyBoZWFkZXIgbGlzdCB2YWx1ZXMgZ2l2ZW5cbiAgLy8gYExvY2F0aW9uYCBhbmQgcmVzcG9uc2XigJlzIGhlYWRlciBsaXN0LlxuICBsZXQgbG9jYXRpb24gPSByZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ2xvY2F0aW9uJylcblxuICAvLyAzLiBJZiBsb2NhdGlvbiBpcyBhIGhlYWRlciB2YWx1ZSwgdGhlbiBzZXQgbG9jYXRpb24gdG8gdGhlIHJlc3VsdCBvZlxuICAvLyAgICBwYXJzaW5nIGxvY2F0aW9uIHdpdGggcmVzcG9uc2XigJlzIFVSTC5cbiAgaWYgKGxvY2F0aW9uICE9PSBudWxsICYmIGlzVmFsaWRIZWFkZXJWYWx1ZShsb2NhdGlvbikpIHtcbiAgICBsb2NhdGlvbiA9IG5ldyBVUkwobG9jYXRpb24sIHJlc3BvbnNlVVJMKHJlc3BvbnNlKSlcbiAgfVxuXG4gIC8vIDQuIElmIGxvY2F0aW9uIGlzIGEgVVJMIHdob3NlIGZyYWdtZW50IGlzIG51bGwsIHRoZW4gc2V0IGxvY2F0aW9u4oCZc1xuICAvLyBmcmFnbWVudCB0byByZXF1ZXN0RnJhZ21lbnQuXG4gIGlmIChsb2NhdGlvbiAmJiAhbG9jYXRpb24uaGFzaCkge1xuICAgIGxvY2F0aW9uLmhhc2ggPSByZXF1ZXN0RnJhZ21lbnRcbiAgfVxuXG4gIC8vIDUuIFJldHVybiBsb2NhdGlvbi5cbiAgcmV0dXJuIGxvY2F0aW9uXG59XG5cbi8qKiBAcmV0dXJucyB7VVJMfSAqL1xuZnVuY3Rpb24gcmVxdWVzdEN1cnJlbnRVUkwgKHJlcXVlc3QpIHtcbiAgcmV0dXJuIHJlcXVlc3QudXJsTGlzdFtyZXF1ZXN0LnVybExpc3QubGVuZ3RoIC0gMV1cbn1cblxuZnVuY3Rpb24gcmVxdWVzdEJhZFBvcnQgKHJlcXVlc3QpIHtcbiAgLy8gMS4gTGV0IHVybCBiZSByZXF1ZXN04oCZcyBjdXJyZW50IFVSTC5cbiAgY29uc3QgdXJsID0gcmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdClcblxuICAvLyAyLiBJZiB1cmzigJlzIHNjaGVtZSBpcyBhbiBIVFRQKFMpIHNjaGVtZSBhbmQgdXJs4oCZcyBwb3J0IGlzIGEgYmFkIHBvcnQsXG4gIC8vIHRoZW4gcmV0dXJuIGJsb2NrZWQuXG4gIGlmICh1cmxJc0h0dHBIdHRwc1NjaGVtZSh1cmwpICYmIGJhZFBvcnRzU2V0Lmhhcyh1cmwucG9ydCkpIHtcbiAgICByZXR1cm4gJ2Jsb2NrZWQnXG4gIH1cblxuICAvLyAzLiBSZXR1cm4gYWxsb3dlZC5cbiAgcmV0dXJuICdhbGxvd2VkJ1xufVxuXG5mdW5jdGlvbiBpc0Vycm9yTGlrZSAob2JqZWN0KSB7XG4gIHJldHVybiBvYmplY3QgaW5zdGFuY2VvZiBFcnJvciB8fCAoXG4gICAgb2JqZWN0Py5jb25zdHJ1Y3Rvcj8ubmFtZSA9PT0gJ0Vycm9yJyB8fFxuICAgIG9iamVjdD8uY29uc3RydWN0b3I/Lm5hbWUgPT09ICdET01FeGNlcHRpb24nXG4gIClcbn1cblxuLy8gQ2hlY2sgd2hldGhlciB8c3RhdHVzVGV4dHwgaXMgYSBCeXRlU3RyaW5nIGFuZFxuLy8gbWF0Y2hlcyB0aGUgUmVhc29uLVBocmFzZSB0b2tlbiBwcm9kdWN0aW9uLlxuLy8gUkZDIDI2MTY6IGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyNjE2XG4vLyBSRkMgNzIzMDogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzBcbi8vIFwicmVhc29uLXBocmFzZSA9ICooIEhUQUIgLyBTUCAvIFZDSEFSIC8gb2JzLXRleHQgKVwiXG4vLyBodHRwczovL2dpdGh1Yi5jb20vY2hyb21pdW0vY2hyb21pdW0vYmxvYi85NC4wLjQ2MDQuMS90aGlyZF9wYXJ0eS9ibGluay9yZW5kZXJlci9jb3JlL2ZldGNoL3Jlc3BvbnNlLmNjI0wxMTZcbmZ1bmN0aW9uIGlzVmFsaWRSZWFzb25QaHJhc2UgKHN0YXR1c1RleHQpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdGF0dXNUZXh0Lmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgYyA9IHN0YXR1c1RleHQuY2hhckNvZGVBdChpKVxuICAgIGlmIChcbiAgICAgICEoXG4gICAgICAgIChcbiAgICAgICAgICBjID09PSAweDA5IHx8IC8vIEhUQUJcbiAgICAgICAgICAoYyA+PSAweDIwICYmIGMgPD0gMHg3ZSkgfHwgLy8gU1AgLyBWQ0hBUlxuICAgICAgICAgIChjID49IDB4ODAgJiYgYyA8PSAweGZmKVxuICAgICAgICApIC8vIG9icy10ZXh0XG4gICAgICApXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4yLjZcbiAqIEBwYXJhbSB7bnVtYmVyfSBjXG4gKi9cbmZ1bmN0aW9uIGlzVG9rZW5DaGFyQ29kZSAoYykge1xuICBzd2l0Y2ggKGMpIHtcbiAgICBjYXNlIDB4MjI6XG4gICAgY2FzZSAweDI4OlxuICAgIGNhc2UgMHgyOTpcbiAgICBjYXNlIDB4MmM6XG4gICAgY2FzZSAweDJmOlxuICAgIGNhc2UgMHgzYTpcbiAgICBjYXNlIDB4M2I6XG4gICAgY2FzZSAweDNjOlxuICAgIGNhc2UgMHgzZDpcbiAgICBjYXNlIDB4M2U6XG4gICAgY2FzZSAweDNmOlxuICAgIGNhc2UgMHg0MDpcbiAgICBjYXNlIDB4NWI6XG4gICAgY2FzZSAweDVjOlxuICAgIGNhc2UgMHg1ZDpcbiAgICBjYXNlIDB4N2I6XG4gICAgY2FzZSAweDdkOlxuICAgICAgLy8gRFFVT1RFIGFuZCBcIigpLC86Ozw9Pj9AW1xcXXt9XCJcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBWQ0hBUiAleDIxLTdFXG4gICAgICByZXR1cm4gYyA+PSAweDIxICYmIGMgPD0gMHg3ZVxuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGNoYXJhY3RlcnNcbiAqL1xuZnVuY3Rpb24gaXNWYWxpZEhUVFBUb2tlbiAoY2hhcmFjdGVycykge1xuICBpZiAoY2hhcmFjdGVycy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGNoYXJhY3RlcnMubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoIWlzVG9rZW5DaGFyQ29kZShjaGFyYWN0ZXJzLmNoYXJDb2RlQXQoaSkpKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNoZWFkZXItbmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IHBvdGVudGlhbFZhbHVlXG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRIZWFkZXJOYW1lIChwb3RlbnRpYWxWYWx1ZSkge1xuICByZXR1cm4gaXNWYWxpZEhUVFBUb2tlbihwb3RlbnRpYWxWYWx1ZSlcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNoZWFkZXItdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBwb3RlbnRpYWxWYWx1ZVxuICovXG5mdW5jdGlvbiBpc1ZhbGlkSGVhZGVyVmFsdWUgKHBvdGVudGlhbFZhbHVlKSB7XG4gIC8vIC0gSGFzIG5vIGxlYWRpbmcgb3IgdHJhaWxpbmcgSFRUUCB0YWIgb3Igc3BhY2UgYnl0ZXMuXG4gIC8vIC0gQ29udGFpbnMgbm8gMHgwMCAoTlVMKSBvciBIVFRQIG5ld2xpbmUgYnl0ZXMuXG4gIGlmIChcbiAgICBwb3RlbnRpYWxWYWx1ZS5zdGFydHNXaXRoKCdcXHQnKSB8fFxuICAgIHBvdGVudGlhbFZhbHVlLnN0YXJ0c1dpdGgoJyAnKSB8fFxuICAgIHBvdGVudGlhbFZhbHVlLmVuZHNXaXRoKCdcXHQnKSB8fFxuICAgIHBvdGVudGlhbFZhbHVlLmVuZHNXaXRoKCcgJylcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBpZiAoXG4gICAgcG90ZW50aWFsVmFsdWUuaW5jbHVkZXMoJ1xcMCcpIHx8XG4gICAgcG90ZW50aWFsVmFsdWUuaW5jbHVkZXMoJ1xccicpIHx8XG4gICAgcG90ZW50aWFsVmFsdWUuaW5jbHVkZXMoJ1xcbicpXG4gICkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1yZWZlcnJlci1wb2xpY3kvI3NldC1yZXF1ZXN0cy1yZWZlcnJlci1wb2xpY3ktb24tcmVkaXJlY3RcbmZ1bmN0aW9uIHNldFJlcXVlc3RSZWZlcnJlclBvbGljeU9uUmVkaXJlY3QgKHJlcXVlc3QsIGFjdHVhbFJlc3BvbnNlKSB7XG4gIC8vICBHaXZlbiBhIHJlcXVlc3QgcmVxdWVzdCBhbmQgYSByZXNwb25zZSBhY3R1YWxSZXNwb25zZSwgdGhpcyBhbGdvcml0aG1cbiAgLy8gIHVwZGF0ZXMgcmVxdWVzdOKAmXMgcmVmZXJyZXIgcG9saWN5IGFjY29yZGluZyB0byB0aGUgUmVmZXJyZXItUG9saWN5XG4gIC8vICBoZWFkZXIgKGlmIGFueSkgaW4gYWN0dWFsUmVzcG9uc2UuXG5cbiAgLy8gMS4gTGV0IHBvbGljeSBiZSB0aGUgcmVzdWx0IG9mIGV4ZWN1dGluZyDCpyA4LjEgUGFyc2UgYSByZWZlcnJlciBwb2xpY3lcbiAgLy8gZnJvbSBhIFJlZmVycmVyLVBvbGljeSBoZWFkZXIgb24gYWN0dWFsUmVzcG9uc2UuXG5cbiAgLy8gOC4xIFBhcnNlIGEgcmVmZXJyZXIgcG9saWN5IGZyb20gYSBSZWZlcnJlci1Qb2xpY3kgaGVhZGVyXG4gIC8vIDEuIExldCBwb2xpY3ktdG9rZW5zIGJlIHRoZSByZXN1bHQgb2YgZXh0cmFjdGluZyBoZWFkZXIgbGlzdCB2YWx1ZXMgZ2l2ZW4gYFJlZmVycmVyLVBvbGljeWAgYW5kIHJlc3BvbnNl4oCZcyBoZWFkZXIgbGlzdC5cbiAgY29uc3QgeyBoZWFkZXJzTGlzdCB9ID0gYWN0dWFsUmVzcG9uc2VcbiAgLy8gMi4gTGV0IHBvbGljeSBiZSB0aGUgZW1wdHkgc3RyaW5nLlxuICAvLyAzLiBGb3IgZWFjaCB0b2tlbiBpbiBwb2xpY3ktdG9rZW5zLCBpZiB0b2tlbiBpcyBhIHJlZmVycmVyIHBvbGljeSBhbmQgdG9rZW4gaXMgbm90IHRoZSBlbXB0eSBzdHJpbmcsIHRoZW4gc2V0IHBvbGljeSB0byB0b2tlbi5cbiAgLy8gNC4gUmV0dXJuIHBvbGljeS5cbiAgY29uc3QgcG9saWN5SGVhZGVyID0gKGhlYWRlcnNMaXN0LmdldCgncmVmZXJyZXItcG9saWN5JykgPz8gJycpLnNwbGl0KCcsJylcblxuICAvLyBOb3RlOiBBcyB0aGUgcmVmZXJyZXItcG9saWN5IGNhbiBjb250YWluIG11bHRpcGxlIHBvbGljaWVzXG4gIC8vIHNlcGFyYXRlZCBieSBjb21tYSwgd2UgbmVlZCB0byBsb29wIHRocm91Z2ggYWxsIG9mIHRoZW1cbiAgLy8gYW5kIHBpY2sgdGhlIGZpcnN0IHZhbGlkIG9uZS5cbiAgLy8gUmVmOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvUmVmZXJyZXItUG9saWN5I3NwZWNpZnlfYV9mYWxsYmFja19wb2xpY3lcbiAgbGV0IHBvbGljeSA9ICcnXG4gIGlmIChwb2xpY3lIZWFkZXIubGVuZ3RoID4gMCkge1xuICAgIC8vIFRoZSByaWdodC1tb3N0IHBvbGljeSB0YWtlcyBwcmVjZWRlbmNlLlxuICAgIC8vIFRoZSBsZWZ0LW1vc3QgcG9saWN5IGlzIHRoZSBmYWxsYmFjay5cbiAgICBmb3IgKGxldCBpID0gcG9saWN5SGVhZGVyLmxlbmd0aDsgaSAhPT0gMDsgaS0tKSB7XG4gICAgICBjb25zdCB0b2tlbiA9IHBvbGljeUhlYWRlcltpIC0gMV0udHJpbSgpXG4gICAgICBpZiAocmVmZXJyZXJQb2xpY3lUb2tlbnMuaGFzKHRva2VuKSkge1xuICAgICAgICBwb2xpY3kgPSB0b2tlblxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIDIuIElmIHBvbGljeSBpcyBub3QgdGhlIGVtcHR5IHN0cmluZywgdGhlbiBzZXQgcmVxdWVzdOKAmXMgcmVmZXJyZXIgcG9saWN5IHRvIHBvbGljeS5cbiAgaWYgKHBvbGljeSAhPT0gJycpIHtcbiAgICByZXF1ZXN0LnJlZmVycmVyUG9saWN5ID0gcG9saWN5XG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2Nyb3NzLW9yaWdpbi1yZXNvdXJjZS1wb2xpY3ktY2hlY2tcbmZ1bmN0aW9uIGNyb3NzT3JpZ2luUmVzb3VyY2VQb2xpY3lDaGVjayAoKSB7XG4gIC8vIFRPRE9cbiAgcmV0dXJuICdhbGxvd2VkJ1xufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1jb3JzLWNoZWNrXG5mdW5jdGlvbiBjb3JzQ2hlY2sgKCkge1xuICAvLyBUT0RPXG4gIHJldHVybiAnc3VjY2Vzcydcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtdGFvLWNoZWNrXG5mdW5jdGlvbiBUQU9DaGVjayAoKSB7XG4gIC8vIFRPRE9cbiAgcmV0dXJuICdzdWNjZXNzJ1xufVxuXG5mdW5jdGlvbiBhcHBlbmRGZXRjaE1ldGFkYXRhIChodHRwUmVxdWVzdCkge1xuICAvLyAgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1mZXRjaC1tZXRhZGF0YS8jc2VjLWZldGNoLWRlc3QtaGVhZGVyXG4gIC8vICBUT0RPXG5cbiAgLy8gIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtZmV0Y2gtbWV0YWRhdGEvI3NlYy1mZXRjaC1tb2RlLWhlYWRlclxuXG4gIC8vICAxLiBBc3NlcnQ6IHLigJlzIHVybCBpcyBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTC5cbiAgLy8gIFRPRE9cblxuICAvLyAgMi4gTGV0IGhlYWRlciBiZSBhIFN0cnVjdHVyZWQgSGVhZGVyIHdob3NlIHZhbHVlIGlzIGEgdG9rZW4uXG4gIGxldCBoZWFkZXIgPSBudWxsXG5cbiAgLy8gIDMuIFNldCBoZWFkZXLigJlzIHZhbHVlIHRvIHLigJlzIG1vZGUuXG4gIGhlYWRlciA9IGh0dHBSZXF1ZXN0Lm1vZGVcblxuICAvLyAgNC4gU2V0IGEgc3RydWN0dXJlZCBmaWVsZCB2YWx1ZSBgU2VjLUZldGNoLU1vZGVgL2hlYWRlciBpbiBy4oCZcyBoZWFkZXIgbGlzdC5cbiAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3Quc2V0KCdzZWMtZmV0Y2gtbW9kZScsIGhlYWRlcilcblxuICAvLyAgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1mZXRjaC1tZXRhZGF0YS8jc2VjLWZldGNoLXNpdGUtaGVhZGVyXG4gIC8vICBUT0RPXG5cbiAgLy8gIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtZmV0Y2gtbWV0YWRhdGEvI3NlYy1mZXRjaC11c2VyLWhlYWRlclxuICAvLyAgVE9ET1xufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYXBwZW5kLWEtcmVxdWVzdC1vcmlnaW4taGVhZGVyXG5mdW5jdGlvbiBhcHBlbmRSZXF1ZXN0T3JpZ2luSGVhZGVyIChyZXF1ZXN0KSB7XG4gIC8vIDEuIExldCBzZXJpYWxpemVkT3JpZ2luIGJlIHRoZSByZXN1bHQgb2YgYnl0ZS1zZXJpYWxpemluZyBhIHJlcXVlc3Qgb3JpZ2luIHdpdGggcmVxdWVzdC5cbiAgbGV0IHNlcmlhbGl6ZWRPcmlnaW4gPSByZXF1ZXN0Lm9yaWdpblxuXG4gIC8vIDIuIElmIHJlcXVlc3TigJlzIHJlc3BvbnNlIHRhaW50aW5nIGlzIFwiY29yc1wiIG9yIHJlcXVlc3TigJlzIG1vZGUgaXMgXCJ3ZWJzb2NrZXRcIiwgdGhlbiBhcHBlbmQgKGBPcmlnaW5gLCBzZXJpYWxpemVkT3JpZ2luKSB0byByZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cbiAgaWYgKHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ2NvcnMnIHx8IHJlcXVlc3QubW9kZSA9PT0gJ3dlYnNvY2tldCcpIHtcbiAgICBpZiAoc2VyaWFsaXplZE9yaWdpbikge1xuICAgICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ29yaWdpbicsIHNlcmlhbGl6ZWRPcmlnaW4pXG4gICAgfVxuXG4gIC8vIDMuIE90aGVyd2lzZSwgaWYgcmVxdWVzdOKAmXMgbWV0aG9kIGlzIG5laXRoZXIgYEdFVGAgbm9yIGBIRUFEYCwgdGhlbjpcbiAgfSBlbHNlIGlmIChyZXF1ZXN0Lm1ldGhvZCAhPT0gJ0dFVCcgJiYgcmVxdWVzdC5tZXRob2QgIT09ICdIRUFEJykge1xuICAgIC8vIDEuIFN3aXRjaCBvbiByZXF1ZXN04oCZcyByZWZlcnJlciBwb2xpY3k6XG4gICAgc3dpdGNoIChyZXF1ZXN0LnJlZmVycmVyUG9saWN5KSB7XG4gICAgICBjYXNlICduby1yZWZlcnJlcic6XG4gICAgICAgIC8vIFNldCBzZXJpYWxpemVkT3JpZ2luIHRvIGBudWxsYC5cbiAgICAgICAgc2VyaWFsaXplZE9yaWdpbiA9IG51bGxcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ25vLXJlZmVycmVyLXdoZW4tZG93bmdyYWRlJzpcbiAgICAgIGNhc2UgJ3N0cmljdC1vcmlnaW4nOlxuICAgICAgY2FzZSAnc3RyaWN0LW9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbic6XG4gICAgICAgIC8vIElmIHJlcXVlc3TigJlzIG9yaWdpbiBpcyBhIHR1cGxlIG9yaWdpbiwgaXRzIHNjaGVtZSBpcyBcImh0dHBzXCIsIGFuZCByZXF1ZXN04oCZcyBjdXJyZW50IFVSTOKAmXMgc2NoZW1lIGlzIG5vdCBcImh0dHBzXCIsIHRoZW4gc2V0IHNlcmlhbGl6ZWRPcmlnaW4gdG8gYG51bGxgLlxuICAgICAgICBpZiAocmVxdWVzdC5vcmlnaW4gJiYgdXJsSGFzSHR0cHNTY2hlbWUocmVxdWVzdC5vcmlnaW4pICYmICF1cmxIYXNIdHRwc1NjaGVtZShyZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KSkpIHtcbiAgICAgICAgICBzZXJpYWxpemVkT3JpZ2luID0gbnVsbFxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdzYW1lLW9yaWdpbic6XG4gICAgICAgIC8vIElmIHJlcXVlc3TigJlzIG9yaWdpbiBpcyBub3Qgc2FtZSBvcmlnaW4gd2l0aCByZXF1ZXN04oCZcyBjdXJyZW50IFVSTOKAmXMgb3JpZ2luLCB0aGVuIHNldCBzZXJpYWxpemVkT3JpZ2luIHRvIGBudWxsYC5cbiAgICAgICAgaWYgKCFzYW1lT3JpZ2luKHJlcXVlc3QsIHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpKSkge1xuICAgICAgICAgIHNlcmlhbGl6ZWRPcmlnaW4gPSBudWxsXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIERvIG5vdGhpbmcuXG4gICAgfVxuXG4gICAgaWYgKHNlcmlhbGl6ZWRPcmlnaW4pIHtcbiAgICAgIC8vIDIuIEFwcGVuZCAoYE9yaWdpbmAsIHNlcmlhbGl6ZWRPcmlnaW4pIHRvIHJlcXVlc3TigJlzIGhlYWRlciBsaXN0LlxuICAgICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ29yaWdpbicsIHNlcmlhbGl6ZWRPcmlnaW4pXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvYXJzZW5lZFNoYXJlZEN1cnJlbnRUaW1lIChjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSkge1xuICAvLyBUT0RPXG4gIHJldHVybiBwZXJmb3JtYW5jZS5ub3coKVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY3JlYXRlLWFuLW9wYXF1ZS10aW1pbmctaW5mb1xuZnVuY3Rpb24gY3JlYXRlT3BhcXVlVGltaW5nSW5mbyAodGltaW5nSW5mbykge1xuICByZXR1cm4ge1xuICAgIHN0YXJ0VGltZTogdGltaW5nSW5mby5zdGFydFRpbWUgPz8gMCxcbiAgICByZWRpcmVjdFN0YXJ0VGltZTogMCxcbiAgICByZWRpcmVjdEVuZFRpbWU6IDAsXG4gICAgcG9zdFJlZGlyZWN0U3RhcnRUaW1lOiB0aW1pbmdJbmZvLnN0YXJ0VGltZSA/PyAwLFxuICAgIGZpbmFsU2VydmljZVdvcmtlclN0YXJ0VGltZTogMCxcbiAgICBmaW5hbE5ldHdvcmtSZXNwb25zZVN0YXJ0VGltZTogMCxcbiAgICBmaW5hbE5ldHdvcmtSZXF1ZXN0U3RhcnRUaW1lOiAwLFxuICAgIGVuZFRpbWU6IDAsXG4gICAgZW5jb2RlZEJvZHlTaXplOiAwLFxuICAgIGRlY29kZWRCb2R5U2l6ZTogMCxcbiAgICBmaW5hbENvbm5lY3Rpb25UaW1pbmdJbmZvOiBudWxsXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvb3JpZ2luLmh0bWwjcG9saWN5LWNvbnRhaW5lclxuZnVuY3Rpb24gbWFrZVBvbGljeUNvbnRhaW5lciAoKSB7XG4gIC8vIE5vdGU6IHRoZSBmZXRjaCBzcGVjIGRvZXNuJ3QgbWFrZSB1c2Ugb2YgZW1iZWRkZXIgcG9saWN5IG9yIENTUCBsaXN0XG4gIHJldHVybiB7XG4gICAgcmVmZXJyZXJQb2xpY3k6ICdzdHJpY3Qtb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luJ1xuICB9XG59XG5cbi8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL29yaWdpbi5odG1sI2Nsb25lLWEtcG9saWN5LWNvbnRhaW5lclxuZnVuY3Rpb24gY2xvbmVQb2xpY3lDb250YWluZXIgKHBvbGljeUNvbnRhaW5lcikge1xuICByZXR1cm4ge1xuICAgIHJlZmVycmVyUG9saWN5OiBwb2xpY3lDb250YWluZXIucmVmZXJyZXJQb2xpY3lcbiAgfVxufVxuXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLXJlZmVycmVyLXBvbGljeS8jZGV0ZXJtaW5lLXJlcXVlc3RzLXJlZmVycmVyXG5mdW5jdGlvbiBkZXRlcm1pbmVSZXF1ZXN0c1JlZmVycmVyIChyZXF1ZXN0KSB7XG4gIC8vIDEuIExldCBwb2xpY3kgYmUgcmVxdWVzdCdzIHJlZmVycmVyIHBvbGljeS5cbiAgY29uc3QgcG9saWN5ID0gcmVxdWVzdC5yZWZlcnJlclBvbGljeVxuXG4gIC8vIE5vdGU6IHBvbGljeSBjYW5ub3QgKHNob3VsZG4ndCkgYmUgbnVsbCBvciBhbiBlbXB0eSBzdHJpbmcuXG4gIGFzc2VydChwb2xpY3kpXG5cbiAgLy8gMi4gTGV0IGVudmlyb25tZW50IGJlIHJlcXVlc3TigJlzIGNsaWVudC5cblxuICBsZXQgcmVmZXJyZXJTb3VyY2UgPSBudWxsXG5cbiAgLy8gMy4gU3dpdGNoIG9uIHJlcXVlc3TigJlzIHJlZmVycmVyOlxuICBpZiAocmVxdWVzdC5yZWZlcnJlciA9PT0gJ2NsaWVudCcpIHtcbiAgICAvLyBOb3RlOiBub2RlIGlzbid0IGEgYnJvd3NlciBhbmQgZG9lc24ndCBpbXBsZW1lbnQgZG9jdW1lbnQvaWZyYW1lcyxcbiAgICAvLyBzbyB3ZSBieXBhc3MgdGhpcyBzdGVwIGFuZCByZXBsYWNlIGl0IHdpdGggb3VyIG93bi5cblxuICAgIGNvbnN0IGdsb2JhbE9yaWdpbiA9IGdldEdsb2JhbE9yaWdpbigpXG5cbiAgICBpZiAoIWdsb2JhbE9yaWdpbiB8fCBnbG9iYWxPcmlnaW4ub3JpZ2luID09PSAnbnVsbCcpIHtcbiAgICAgIHJldHVybiAnbm8tcmVmZXJyZXInXG4gICAgfVxuXG4gICAgLy8gbm90ZTogd2UgbmVlZCB0byBjbG9uZSBpdCBhcyBpdCdzIG11dGF0ZWRcbiAgICByZWZlcnJlclNvdXJjZSA9IG5ldyBVUkwoZ2xvYmFsT3JpZ2luKVxuICB9IGVsc2UgaWYgKHJlcXVlc3QucmVmZXJyZXIgaW5zdGFuY2VvZiBVUkwpIHtcbiAgICAvLyBMZXQgcmVmZXJyZXJTb3VyY2UgYmUgcmVxdWVzdOKAmXMgcmVmZXJyZXIuXG4gICAgcmVmZXJyZXJTb3VyY2UgPSByZXF1ZXN0LnJlZmVycmVyXG4gIH1cblxuICAvLyA0LiBMZXQgcmVxdWVzdOKAmXMgcmVmZXJyZXJVUkwgYmUgdGhlIHJlc3VsdCBvZiBzdHJpcHBpbmcgcmVmZXJyZXJTb3VyY2UgZm9yXG4gIC8vICAgIHVzZSBhcyBhIHJlZmVycmVyLlxuICBsZXQgcmVmZXJyZXJVUkwgPSBzdHJpcFVSTEZvclJlZmVycmVyKHJlZmVycmVyU291cmNlKVxuXG4gIC8vIDUuIExldCByZWZlcnJlck9yaWdpbiBiZSB0aGUgcmVzdWx0IG9mIHN0cmlwcGluZyByZWZlcnJlclNvdXJjZSBmb3IgdXNlIGFzXG4gIC8vICAgIGEgcmVmZXJyZXIsIHdpdGggdGhlIG9yaWdpbi1vbmx5IGZsYWcgc2V0IHRvIHRydWUuXG4gIGNvbnN0IHJlZmVycmVyT3JpZ2luID0gc3RyaXBVUkxGb3JSZWZlcnJlcihyZWZlcnJlclNvdXJjZSwgdHJ1ZSlcblxuICAvLyA2LiBJZiB0aGUgcmVzdWx0IG9mIHNlcmlhbGl6aW5nIHJlZmVycmVyVVJMIGlzIGEgc3RyaW5nIHdob3NlIGxlbmd0aCBpc1xuICAvLyAgICBncmVhdGVyIHRoYW4gNDA5Niwgc2V0IHJlZmVycmVyVVJMIHRvIHJlZmVycmVyT3JpZ2luLlxuICBpZiAocmVmZXJyZXJVUkwudG9TdHJpbmcoKS5sZW5ndGggPiA0MDk2KSB7XG4gICAgcmVmZXJyZXJVUkwgPSByZWZlcnJlck9yaWdpblxuICB9XG5cbiAgY29uc3QgYXJlU2FtZU9yaWdpbiA9IHNhbWVPcmlnaW4ocmVxdWVzdCwgcmVmZXJyZXJVUkwpXG4gIGNvbnN0IGlzTm9uUG90ZW50aWFsbHlUcnVzdFdvcnRoeSA9IGlzVVJMUG90ZW50aWFsbHlUcnVzdHdvcnRoeShyZWZlcnJlclVSTCkgJiZcbiAgICAhaXNVUkxQb3RlbnRpYWxseVRydXN0d29ydGh5KHJlcXVlc3QudXJsKVxuXG4gIC8vIDguIEV4ZWN1dGUgdGhlIHN3aXRjaCBzdGF0ZW1lbnRzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHZhbHVlIG9mIHBvbGljeTpcbiAgc3dpdGNoIChwb2xpY3kpIHtcbiAgICBjYXNlICdvcmlnaW4nOiByZXR1cm4gcmVmZXJyZXJPcmlnaW4gIT0gbnVsbCA/IHJlZmVycmVyT3JpZ2luIDogc3RyaXBVUkxGb3JSZWZlcnJlcihyZWZlcnJlclNvdXJjZSwgdHJ1ZSlcbiAgICBjYXNlICd1bnNhZmUtdXJsJzogcmV0dXJuIHJlZmVycmVyVVJMXG4gICAgY2FzZSAnc2FtZS1vcmlnaW4nOlxuICAgICAgcmV0dXJuIGFyZVNhbWVPcmlnaW4gPyByZWZlcnJlck9yaWdpbiA6ICduby1yZWZlcnJlcidcbiAgICBjYXNlICdvcmlnaW4td2hlbi1jcm9zcy1vcmlnaW4nOlxuICAgICAgcmV0dXJuIGFyZVNhbWVPcmlnaW4gPyByZWZlcnJlclVSTCA6IHJlZmVycmVyT3JpZ2luXG4gICAgY2FzZSAnc3RyaWN0LW9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbic6IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRVUkwgPSByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KVxuXG4gICAgICAvLyAxLiBJZiB0aGUgb3JpZ2luIG9mIHJlZmVycmVyVVJMIGFuZCB0aGUgb3JpZ2luIG9mIHJlcXVlc3TigJlzIGN1cnJlbnRcbiAgICAgIC8vICAgIFVSTCBhcmUgdGhlIHNhbWUsIHRoZW4gcmV0dXJuIHJlZmVycmVyVVJMLlxuICAgICAgaWYgKHNhbWVPcmlnaW4ocmVmZXJyZXJVUkwsIGN1cnJlbnRVUkwpKSB7XG4gICAgICAgIHJldHVybiByZWZlcnJlclVSTFxuICAgICAgfVxuXG4gICAgICAvLyAyLiBJZiByZWZlcnJlclVSTCBpcyBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTCBhbmQgcmVxdWVzdOKAmXNcbiAgICAgIC8vICAgIGN1cnJlbnQgVVJMIGlzIG5vdCBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTCwgdGhlbiByZXR1cm4gbm9cbiAgICAgIC8vICAgIHJlZmVycmVyLlxuICAgICAgaWYgKGlzVVJMUG90ZW50aWFsbHlUcnVzdHdvcnRoeShyZWZlcnJlclVSTCkgJiYgIWlzVVJMUG90ZW50aWFsbHlUcnVzdHdvcnRoeShjdXJyZW50VVJMKSkge1xuICAgICAgICByZXR1cm4gJ25vLXJlZmVycmVyJ1xuICAgICAgfVxuXG4gICAgICAvLyAzLiBSZXR1cm4gcmVmZXJyZXJPcmlnaW4uXG4gICAgICByZXR1cm4gcmVmZXJyZXJPcmlnaW5cbiAgICB9XG4gICAgY2FzZSAnc3RyaWN0LW9yaWdpbic6IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICAgIC8qKlxuICAgICAgICAgKiAxLiBJZiByZWZlcnJlclVSTCBpcyBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTCBhbmRcbiAgICAgICAgICogcmVxdWVzdOKAmXMgY3VycmVudCBVUkwgaXMgbm90IGEgcG90ZW50aWFsbHkgdHJ1c3R3b3J0aHkgVVJMLFxuICAgICAgICAgKiB0aGVuIHJldHVybiBubyByZWZlcnJlci5cbiAgICAgICAgICogMi4gUmV0dXJuIHJlZmVycmVyT3JpZ2luXG4gICAgICAgICovXG4gICAgY2FzZSAnbm8tcmVmZXJyZXItd2hlbi1kb3duZ3JhZGUnOiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICAvKipcbiAgICAgICAqIDEuIElmIHJlZmVycmVyVVJMIGlzIGEgcG90ZW50aWFsbHkgdHJ1c3R3b3J0aHkgVVJMIGFuZFxuICAgICAgICogcmVxdWVzdOKAmXMgY3VycmVudCBVUkwgaXMgbm90IGEgcG90ZW50aWFsbHkgdHJ1c3R3b3J0aHkgVVJMLFxuICAgICAgICogdGhlbiByZXR1cm4gbm8gcmVmZXJyZXIuXG4gICAgICAgKiAyLiBSZXR1cm4gcmVmZXJyZXJPcmlnaW5cbiAgICAgICovXG5cbiAgICBkZWZhdWx0OiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICByZXR1cm4gaXNOb25Qb3RlbnRpYWxseVRydXN0V29ydGh5ID8gJ25vLXJlZmVycmVyJyA6IHJlZmVycmVyT3JpZ2luXG4gIH1cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtcmVmZXJyZXItcG9saWN5LyNzdHJpcC11cmxcbiAqIEBwYXJhbSB7VVJMfSB1cmxcbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IG9yaWdpbk9ubHlcbiAqL1xuZnVuY3Rpb24gc3RyaXBVUkxGb3JSZWZlcnJlciAodXJsLCBvcmlnaW5Pbmx5KSB7XG4gIC8vIDEuIEFzc2VydDogdXJsIGlzIGEgVVJMLlxuICBhc3NlcnQodXJsIGluc3RhbmNlb2YgVVJMKVxuXG4gIC8vIDIuIElmIHVybOKAmXMgc2NoZW1lIGlzIGEgbG9jYWwgc2NoZW1lLCB0aGVuIHJldHVybiBubyByZWZlcnJlci5cbiAgaWYgKHVybC5wcm90b2NvbCA9PT0gJ2ZpbGU6JyB8fCB1cmwucHJvdG9jb2wgPT09ICdhYm91dDonIHx8IHVybC5wcm90b2NvbCA9PT0gJ2JsYW5rOicpIHtcbiAgICByZXR1cm4gJ25vLXJlZmVycmVyJ1xuICB9XG5cbiAgLy8gMy4gU2V0IHVybOKAmXMgdXNlcm5hbWUgdG8gdGhlIGVtcHR5IHN0cmluZy5cbiAgdXJsLnVzZXJuYW1lID0gJydcblxuICAvLyA0LiBTZXQgdXJs4oCZcyBwYXNzd29yZCB0byB0aGUgZW1wdHkgc3RyaW5nLlxuICB1cmwucGFzc3dvcmQgPSAnJ1xuXG4gIC8vIDUuIFNldCB1cmzigJlzIGZyYWdtZW50IHRvIG51bGwuXG4gIHVybC5oYXNoID0gJydcblxuICAvLyA2LiBJZiB0aGUgb3JpZ2luLW9ubHkgZmxhZyBpcyB0cnVlLCB0aGVuOlxuICBpZiAob3JpZ2luT25seSkge1xuICAgIC8vIDEuIFNldCB1cmzigJlzIHBhdGggdG8gwqsgdGhlIGVtcHR5IHN0cmluZyDCuy5cbiAgICB1cmwucGF0aG5hbWUgPSAnJ1xuXG4gICAgLy8gMi4gU2V0IHVybOKAmXMgcXVlcnkgdG8gbnVsbC5cbiAgICB1cmwuc2VhcmNoID0gJydcbiAgfVxuXG4gIC8vIDcuIFJldHVybiB1cmwuXG4gIHJldHVybiB1cmxcbn1cblxuZnVuY3Rpb24gaXNVUkxQb3RlbnRpYWxseVRydXN0d29ydGh5ICh1cmwpIHtcbiAgaWYgKCEodXJsIGluc3RhbmNlb2YgVVJMKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gSWYgY2hpbGQgb2YgYWJvdXQsIHJldHVybiB0cnVlXG4gIGlmICh1cmwuaHJlZiA9PT0gJ2Fib3V0OmJsYW5rJyB8fCB1cmwuaHJlZiA9PT0gJ2Fib3V0OnNyY2RvYycpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gSWYgc2NoZW1lIGlzIGRhdGEsIHJldHVybiB0cnVlXG4gIGlmICh1cmwucHJvdG9jb2wgPT09ICdkYXRhOicpIHJldHVybiB0cnVlXG5cbiAgLy8gSWYgZmlsZSwgcmV0dXJuIHRydWVcbiAgaWYgKHVybC5wcm90b2NvbCA9PT0gJ2ZpbGU6JykgcmV0dXJuIHRydWVcblxuICByZXR1cm4gaXNPcmlnaW5Qb3RlbnRpYWxseVRydXN0d29ydGh5KHVybC5vcmlnaW4pXG5cbiAgZnVuY3Rpb24gaXNPcmlnaW5Qb3RlbnRpYWxseVRydXN0d29ydGh5IChvcmlnaW4pIHtcbiAgICAvLyBJZiBvcmlnaW4gaXMgZXhwbGljaXRseSBudWxsLCByZXR1cm4gZmFsc2VcbiAgICBpZiAob3JpZ2luID09IG51bGwgfHwgb3JpZ2luID09PSAnbnVsbCcpIHJldHVybiBmYWxzZVxuXG4gICAgY29uc3Qgb3JpZ2luQXNVUkwgPSBuZXcgVVJMKG9yaWdpbilcblxuICAgIC8vIElmIHNlY3VyZSwgcmV0dXJuIHRydWVcbiAgICBpZiAob3JpZ2luQXNVUkwucHJvdG9jb2wgPT09ICdodHRwczonIHx8IG9yaWdpbkFzVVJMLnByb3RvY29sID09PSAnd3NzOicpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgLy8gSWYgbG9jYWxob3N0IG9yIHZhcmlhbnRzLCByZXR1cm4gdHJ1ZVxuICAgIGlmICgvXjEyNyg/OlxcLlswLTldKyl7MCwyfVxcLlswLTldKyR8XlxcWyg/OjAqOikqPzo/MCoxXFxdJC8udGVzdChvcmlnaW5Bc1VSTC5ob3N0bmFtZSkgfHxcbiAgICAgKG9yaWdpbkFzVVJMLmhvc3RuYW1lID09PSAnbG9jYWxob3N0JyB8fCBvcmlnaW5Bc1VSTC5ob3N0bmFtZS5pbmNsdWRlcygnbG9jYWxob3N0LicpKSB8fFxuICAgICAob3JpZ2luQXNVUkwuaG9zdG5hbWUuZW5kc1dpdGgoJy5sb2NhbGhvc3QnKSkpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgLy8gSWYgYW55IG90aGVyLCByZXR1cm4gZmFsc2VcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1zdWJyZXNvdXJjZS1pbnRlZ3JpdHkvI2RvZXMtcmVzcG9uc2UtbWF0Y2gtbWV0YWRhdGFsaXN0XG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGJ5dGVzXG4gKiBAcGFyYW0ge3N0cmluZ30gbWV0YWRhdGFMaXN0XG4gKi9cbmZ1bmN0aW9uIGJ5dGVzTWF0Y2ggKGJ5dGVzLCBtZXRhZGF0YUxpc3QpIHtcbiAgLy8gSWYgbm9kZSBpcyBub3QgYnVpbHQgd2l0aCBPcGVuU1NMIHN1cHBvcnQsIHdlIGNhbm5vdCBjaGVja1xuICAvLyBhIHJlcXVlc3QncyBpbnRlZ3JpdHksIHNvIGFsbG93IGl0IGJ5IGRlZmF1bHQgKHRoZSBzcGVjIHdpbGxcbiAgLy8gYWxsb3cgcmVxdWVzdHMgaWYgYW4gaW52YWxpZCBoYXNoIGlzIGdpdmVuLCBhcyBwcmVjZWRlbmNlKS5cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmOiBvbmx5IGlmIG5vZGUgaXMgYnVpbHQgd2l0aCAtLXdpdGhvdXQtc3NsICovXG4gIGlmIChjcnlwdG8gPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyAxLiBMZXQgcGFyc2VkTWV0YWRhdGEgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIG1ldGFkYXRhTGlzdC5cbiAgY29uc3QgcGFyc2VkTWV0YWRhdGEgPSBwYXJzZU1ldGFkYXRhKG1ldGFkYXRhTGlzdClcblxuICAvLyAyLiBJZiBwYXJzZWRNZXRhZGF0YSBpcyBubyBtZXRhZGF0YSwgcmV0dXJuIHRydWUuXG4gIGlmIChwYXJzZWRNZXRhZGF0YSA9PT0gJ25vIG1ldGFkYXRhJykge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyAzLiBJZiByZXNwb25zZSBpcyBub3QgZWxpZ2libGUgZm9yIGludGVncml0eSB2YWxpZGF0aW9uLCByZXR1cm4gZmFsc2UuXG4gIC8vIFRPRE9cblxuICAvLyA0LiBJZiBwYXJzZWRNZXRhZGF0YSBpcyB0aGUgZW1wdHkgc2V0LCByZXR1cm4gdHJ1ZS5cbiAgaWYgKHBhcnNlZE1ldGFkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyA1LiBMZXQgbWV0YWRhdGEgYmUgdGhlIHJlc3VsdCBvZiBnZXR0aW5nIHRoZSBzdHJvbmdlc3RcbiAgLy8gICAgbWV0YWRhdGEgZnJvbSBwYXJzZWRNZXRhZGF0YS5cbiAgY29uc3Qgc3Ryb25nZXN0ID0gZ2V0U3Ryb25nZXN0TWV0YWRhdGEocGFyc2VkTWV0YWRhdGEpXG4gIGNvbnN0IG1ldGFkYXRhID0gZmlsdGVyTWV0YWRhdGFMaXN0QnlBbGdvcml0aG0ocGFyc2VkTWV0YWRhdGEsIHN0cm9uZ2VzdClcblxuICAvLyA2LiBGb3IgZWFjaCBpdGVtIGluIG1ldGFkYXRhOlxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgbWV0YWRhdGEpIHtcbiAgICAvLyAxLiBMZXQgYWxnb3JpdGhtIGJlIHRoZSBhbGcgY29tcG9uZW50IG9mIGl0ZW0uXG4gICAgY29uc3QgYWxnb3JpdGhtID0gaXRlbS5hbGdvXG5cbiAgICAvLyAyLiBMZXQgZXhwZWN0ZWRWYWx1ZSBiZSB0aGUgdmFsIGNvbXBvbmVudCBvZiBpdGVtLlxuICAgIGNvbnN0IGV4cGVjdGVkVmFsdWUgPSBpdGVtLmhhc2hcblxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vd2ViLXBsYXRmb3JtLXRlc3RzL3dwdC9jb21taXQvZTRjNWNjN2E1ZTQ4MDkzMjIwNTI4ZGZkZDFjNDAxMmRjMzgzN2EwZVxuICAgIC8vIFwiYmUgbGliZXJhbCB3aXRoIHBhZGRpbmdcIi4gVGhpcyBpcyBhbm5veWluZywgYW5kIGl0J3Mgbm90IGV2ZW4gaW4gdGhlIHNwZWMuXG5cbiAgICAvLyAzLiBMZXQgYWN0dWFsVmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBhcHBseWluZyBhbGdvcml0aG0gdG8gYnl0ZXMuXG4gICAgbGV0IGFjdHVhbFZhbHVlID0gY3J5cHRvLmNyZWF0ZUhhc2goYWxnb3JpdGhtKS51cGRhdGUoYnl0ZXMpLmRpZ2VzdCgnYmFzZTY0JylcblxuICAgIGlmIChhY3R1YWxWYWx1ZVthY3R1YWxWYWx1ZS5sZW5ndGggLSAxXSA9PT0gJz0nKSB7XG4gICAgICBpZiAoYWN0dWFsVmFsdWVbYWN0dWFsVmFsdWUubGVuZ3RoIC0gMl0gPT09ICc9Jykge1xuICAgICAgICBhY3R1YWxWYWx1ZSA9IGFjdHVhbFZhbHVlLnNsaWNlKDAsIC0yKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWN0dWFsVmFsdWUgPSBhY3R1YWxWYWx1ZS5zbGljZSgwLCAtMSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA0LiBJZiBhY3R1YWxWYWx1ZSBpcyBhIGNhc2Utc2Vuc2l0aXZlIG1hdGNoIGZvciBleHBlY3RlZFZhbHVlLFxuICAgIC8vICAgIHJldHVybiB0cnVlLlxuICAgIGlmIChjb21wYXJlQmFzZTY0TWl4ZWQoYWN0dWFsVmFsdWUsIGV4cGVjdGVkVmFsdWUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxuXG4gIC8vIDcuIFJldHVybiBmYWxzZS5cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtc3VicmVzb3VyY2UtaW50ZWdyaXR5LyNncmFtbWFyZGVmLWhhc2gtd2l0aC1vcHRpb25zXG4vLyBodHRwczovL3d3dy53My5vcmcvVFIvQ1NQMi8jc291cmNlLWxpc3Qtc3ludGF4XG4vLyBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNTIzNCNhcHBlbmRpeC1CLjFcbmNvbnN0IHBhcnNlSGFzaFdpdGhPcHRpb25zID0gLyg/PGFsZ28+c2hhMjU2fHNoYTM4NHxzaGE1MTIpLSgoPzxoYXNoPltBLVphLXowLTkrL10rfFtBLVphLXowLTlfLV0rKT17MCwyfSg/Olxcc3wkKSggK1shLX5dKik/KT8vaVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1zdWJyZXNvdXJjZS1pbnRlZ3JpdHkvI3BhcnNlLW1ldGFkYXRhXG4gKiBAcGFyYW0ge3N0cmluZ30gbWV0YWRhdGFcbiAqL1xuZnVuY3Rpb24gcGFyc2VNZXRhZGF0YSAobWV0YWRhdGEpIHtcbiAgLy8gMS4gTGV0IHJlc3VsdCBiZSB0aGUgZW1wdHkgc2V0LlxuICAvKiogQHR5cGUge3sgYWxnbzogc3RyaW5nLCBoYXNoOiBzdHJpbmcgfVtdfSAqL1xuICBjb25zdCByZXN1bHQgPSBbXVxuXG4gIC8vIDIuIExldCBlbXB0eSBiZSBlcXVhbCB0byB0cnVlLlxuICBsZXQgZW1wdHkgPSB0cnVlXG5cbiAgLy8gMy4gRm9yIGVhY2ggdG9rZW4gcmV0dXJuZWQgYnkgc3BsaXR0aW5nIG1ldGFkYXRhIG9uIHNwYWNlczpcbiAgZm9yIChjb25zdCB0b2tlbiBvZiBtZXRhZGF0YS5zcGxpdCgnICcpKSB7XG4gICAgLy8gMS4gU2V0IGVtcHR5IHRvIGZhbHNlLlxuICAgIGVtcHR5ID0gZmFsc2VcblxuICAgIC8vIDIuIFBhcnNlIHRva2VuIGFzIGEgaGFzaC13aXRoLW9wdGlvbnMuXG4gICAgY29uc3QgcGFyc2VkVG9rZW4gPSBwYXJzZUhhc2hXaXRoT3B0aW9ucy5leGVjKHRva2VuKVxuXG4gICAgLy8gMy4gSWYgdG9rZW4gZG9lcyBub3QgcGFyc2UsIGNvbnRpbnVlIHRvIHRoZSBuZXh0IHRva2VuLlxuICAgIGlmIChcbiAgICAgIHBhcnNlZFRva2VuID09PSBudWxsIHx8XG4gICAgICBwYXJzZWRUb2tlbi5ncm91cHMgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgcGFyc2VkVG9rZW4uZ3JvdXBzLmFsZ28gPT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgLy8gTm90ZTogQ2hyb21pdW0gYmxvY2tzIHRoZSByZXF1ZXN0IGF0IHRoaXMgcG9pbnQsIGJ1dCBGaXJlZm94XG4gICAgICAvLyBnaXZlcyBhIHdhcm5pbmcgdGhhdCBhbiBpbnZhbGlkIGludGVncml0eSB3YXMgZ2l2ZW4uIFRoZVxuICAgICAgLy8gY29ycmVjdCBiZWhhdmlvciBpcyB0byBpZ25vcmUgdGhlc2UsIGFuZCBzdWJzZXF1ZW50bHkgbm90XG4gICAgICAvLyBjaGVjayB0aGUgaW50ZWdyaXR5IG9mIHRoZSByZXNvdXJjZS5cbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgLy8gNC4gTGV0IGFsZ29yaXRobSBiZSB0aGUgaGFzaC1hbGdvIGNvbXBvbmVudCBvZiB0b2tlbi5cbiAgICBjb25zdCBhbGdvcml0aG0gPSBwYXJzZWRUb2tlbi5ncm91cHMuYWxnby50b0xvd2VyQ2FzZSgpXG5cbiAgICAvLyA1LiBJZiBhbGdvcml0aG0gaXMgYSBoYXNoIGZ1bmN0aW9uIHJlY29nbml6ZWQgYnkgdGhlIHVzZXJcbiAgICAvLyAgICBhZ2VudCwgYWRkIHRoZSBwYXJzZWQgdG9rZW4gdG8gcmVzdWx0LlxuICAgIGlmIChzdXBwb3J0ZWRIYXNoZXMuaW5jbHVkZXMoYWxnb3JpdGhtKSkge1xuICAgICAgcmVzdWx0LnB1c2gocGFyc2VkVG9rZW4uZ3JvdXBzKVxuICAgIH1cbiAgfVxuXG4gIC8vIDQuIFJldHVybiBubyBtZXRhZGF0YSBpZiBlbXB0eSBpcyB0cnVlLCBvdGhlcndpc2UgcmV0dXJuIHJlc3VsdC5cbiAgaWYgKGVtcHR5ID09PSB0cnVlKSB7XG4gICAgcmV0dXJuICdubyBtZXRhZGF0YSdcbiAgfVxuXG4gIHJldHVybiByZXN1bHRcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3sgYWxnbzogJ3NoYTI1NicgfCAnc2hhMzg0JyB8ICdzaGE1MTInIH1bXX0gbWV0YWRhdGFMaXN0XG4gKi9cbmZ1bmN0aW9uIGdldFN0cm9uZ2VzdE1ldGFkYXRhIChtZXRhZGF0YUxpc3QpIHtcbiAgLy8gTGV0IGFsZ29yaXRobSBiZSB0aGUgYWxnbyBjb21wb25lbnQgb2YgdGhlIGZpcnN0IGl0ZW0gaW4gbWV0YWRhdGFMaXN0LlxuICAvLyBDYW4gYmUgc2hhMjU2XG4gIGxldCBhbGdvcml0aG0gPSBtZXRhZGF0YUxpc3RbMF0uYWxnb1xuICAvLyBJZiB0aGUgYWxnb3JpdGhtIGlzIHNoYTUxMiwgdGhlbiBpdCBpcyB0aGUgc3Ryb25nZXN0XG4gIC8vIGFuZCB3ZSBjYW4gcmV0dXJuIGltbWVkaWF0ZWx5XG4gIGlmIChhbGdvcml0aG1bM10gPT09ICc1Jykge1xuICAgIHJldHVybiBhbGdvcml0aG1cbiAgfVxuXG4gIGZvciAobGV0IGkgPSAxOyBpIDwgbWV0YWRhdGFMaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgbWV0YWRhdGEgPSBtZXRhZGF0YUxpc3RbaV1cbiAgICAvLyBJZiB0aGUgYWxnb3JpdGhtIGlzIHNoYTUxMiwgdGhlbiBpdCBpcyB0aGUgc3Ryb25nZXN0XG4gICAgLy8gYW5kIHdlIGNhbiBicmVhayB0aGUgbG9vcCBpbW1lZGlhdGVseVxuICAgIGlmIChtZXRhZGF0YS5hbGdvWzNdID09PSAnNScpIHtcbiAgICAgIGFsZ29yaXRobSA9ICdzaGE1MTInXG4gICAgICBicmVha1xuICAgIC8vIElmIHRoZSBhbGdvcml0aG0gaXMgc2hhMzg0LCB0aGVuIGEgcG90ZW50aWFsIHNoYTI1NiBvciBzaGEzODQgaXMgaWdub3JlZFxuICAgIH0gZWxzZSBpZiAoYWxnb3JpdGhtWzNdID09PSAnMycpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgLy8gYWxnb3JpdGhtIGlzIHNoYTI1NiwgY2hlY2sgaWYgYWxnb3JpdGhtIGlzIHNoYTM4NCBhbmQgaWYgc28sIHNldCBpdCBhc1xuICAgIC8vIHRoZSBzdHJvbmdlc3RcbiAgICB9IGVsc2UgaWYgKG1ldGFkYXRhLmFsZ29bM10gPT09ICczJykge1xuICAgICAgYWxnb3JpdGhtID0gJ3NoYTM4NCdcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGFsZ29yaXRobVxufVxuXG5mdW5jdGlvbiBmaWx0ZXJNZXRhZGF0YUxpc3RCeUFsZ29yaXRobSAobWV0YWRhdGFMaXN0LCBhbGdvcml0aG0pIHtcbiAgaWYgKG1ldGFkYXRhTGlzdC5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gbWV0YWRhdGFMaXN0XG4gIH1cblxuICBsZXQgcG9zID0gMFxuICBmb3IgKGxldCBpID0gMDsgaSA8IG1ldGFkYXRhTGlzdC5sZW5ndGg7ICsraSkge1xuICAgIGlmIChtZXRhZGF0YUxpc3RbaV0uYWxnbyA9PT0gYWxnb3JpdGhtKSB7XG4gICAgICBtZXRhZGF0YUxpc3RbcG9zKytdID0gbWV0YWRhdGFMaXN0W2ldXG4gICAgfVxuICB9XG5cbiAgbWV0YWRhdGFMaXN0Lmxlbmd0aCA9IHBvc1xuXG4gIHJldHVybiBtZXRhZGF0YUxpc3Rcbn1cblxuLyoqXG4gKiBDb21wYXJlcyB0d28gYmFzZTY0IHN0cmluZ3MsIGFsbG93aW5nIGZvciBiYXNlNjR1cmxcbiAqIGluIHRoZSBzZWNvbmQgc3RyaW5nLlxuICpcbiogQHBhcmFtIHtzdHJpbmd9IGFjdHVhbFZhbHVlIGFsd2F5cyBiYXNlNjRcbiAqIEBwYXJhbSB7c3RyaW5nfSBleHBlY3RlZFZhbHVlIGJhc2U2NCBvciBiYXNlNjR1cmxcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBjb21wYXJlQmFzZTY0TWl4ZWQgKGFjdHVhbFZhbHVlLCBleHBlY3RlZFZhbHVlKSB7XG4gIGlmIChhY3R1YWxWYWx1ZS5sZW5ndGggIT09IGV4cGVjdGVkVmFsdWUubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhY3R1YWxWYWx1ZS5sZW5ndGg7ICsraSkge1xuICAgIGlmIChhY3R1YWxWYWx1ZVtpXSAhPT0gZXhwZWN0ZWRWYWx1ZVtpXSkge1xuICAgICAgaWYgKFxuICAgICAgICAoYWN0dWFsVmFsdWVbaV0gPT09ICcrJyAmJiBleHBlY3RlZFZhbHVlW2ldID09PSAnLScpIHx8XG4gICAgICAgIChhY3R1YWxWYWx1ZVtpXSA9PT0gJy8nICYmIGV4cGVjdGVkVmFsdWVbaV0gPT09ICdfJylcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy11cGdyYWRlLWluc2VjdXJlLXJlcXVlc3RzLyN1cGdyYWRlLXJlcXVlc3RcbmZ1bmN0aW9uIHRyeVVwZ3JhZGVSZXF1ZXN0VG9BUG90ZW50aWFsbHlUcnVzdHdvcnRoeVVSTCAocmVxdWVzdCkge1xuICAvLyBUT0RPXG59XG5cbi8qKlxuICogQGxpbmsge2h0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL29yaWdpbi5odG1sI3NhbWUtb3JpZ2lufVxuICogQHBhcmFtIHtVUkx9IEFcbiAqIEBwYXJhbSB7VVJMfSBCXG4gKi9cbmZ1bmN0aW9uIHNhbWVPcmlnaW4gKEEsIEIpIHtcbiAgLy8gMS4gSWYgQSBhbmQgQiBhcmUgdGhlIHNhbWUgb3BhcXVlIG9yaWdpbiwgdGhlbiByZXR1cm4gdHJ1ZS5cbiAgaWYgKEEub3JpZ2luID09PSBCLm9yaWdpbiAmJiBBLm9yaWdpbiA9PT0gJ251bGwnKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8vIDIuIElmIEEgYW5kIEIgYXJlIGJvdGggdHVwbGUgb3JpZ2lucyBhbmQgdGhlaXIgc2NoZW1lcyxcbiAgLy8gICAgaG9zdHMsIGFuZCBwb3J0IGFyZSBpZGVudGljYWwsIHRoZW4gcmV0dXJuIHRydWUuXG4gIGlmIChBLnByb3RvY29sID09PSBCLnByb3RvY29sICYmIEEuaG9zdG5hbWUgPT09IEIuaG9zdG5hbWUgJiYgQS5wb3J0ID09PSBCLnBvcnQpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gMy4gUmV0dXJuIGZhbHNlLlxuICByZXR1cm4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gY3JlYXRlRGVmZXJyZWRQcm9taXNlICgpIHtcbiAgbGV0IHJlc1xuICBsZXQgcmVqXG4gIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgcmVzID0gcmVzb2x2ZVxuICAgIHJlaiA9IHJlamVjdFxuICB9KVxuXG4gIHJldHVybiB7IHByb21pc2UsIHJlc29sdmU6IHJlcywgcmVqZWN0OiByZWogfVxufVxuXG5mdW5jdGlvbiBpc0Fib3J0ZWQgKGZldGNoUGFyYW1zKSB7XG4gIHJldHVybiBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnN0YXRlID09PSAnYWJvcnRlZCdcbn1cblxuZnVuY3Rpb24gaXNDYW5jZWxsZWQgKGZldGNoUGFyYW1zKSB7XG4gIHJldHVybiBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnN0YXRlID09PSAnYWJvcnRlZCcgfHxcbiAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnN0YXRlID09PSAndGVybWluYXRlZCdcbn1cblxuY29uc3Qgbm9ybWFsaXplTWV0aG9kUmVjb3JkID0ge1xuICBkZWxldGU6ICdERUxFVEUnLFxuICBERUxFVEU6ICdERUxFVEUnLFxuICBnZXQ6ICdHRVQnLFxuICBHRVQ6ICdHRVQnLFxuICBoZWFkOiAnSEVBRCcsXG4gIEhFQUQ6ICdIRUFEJyxcbiAgb3B0aW9uczogJ09QVElPTlMnLFxuICBPUFRJT05TOiAnT1BUSU9OUycsXG4gIHBvc3Q6ICdQT1NUJyxcbiAgUE9TVDogJ1BPU1QnLFxuICBwdXQ6ICdQVVQnLFxuICBQVVQ6ICdQVVQnXG59XG5cbi8vIE5vdGU6IG9iamVjdCBwcm90b3R5cGVzIHNob3VsZCBub3QgYmUgYWJsZSB0byBiZSByZWZlcmVuY2VkLiBlLmcuIGBPYmplY3QjaGFzT3duUHJvcGVydHlgLlxuT2JqZWN0LnNldFByb3RvdHlwZU9mKG5vcm1hbGl6ZU1ldGhvZFJlY29yZCwgbnVsbClcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LW1ldGhvZC1ub3JtYWxpemVcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2RcbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplTWV0aG9kIChtZXRob2QpIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZU1ldGhvZFJlY29yZFttZXRob2QudG9Mb3dlckNhc2UoKV0gPz8gbWV0aG9kXG59XG5cbi8vIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNzZXJpYWxpemUtYS1qYXZhc2NyaXB0LXZhbHVlLXRvLWEtanNvbi1zdHJpbmdcbmZ1bmN0aW9uIHNlcmlhbGl6ZUphdmFzY3JpcHRWYWx1ZVRvSlNPTlN0cmluZyAodmFsdWUpIHtcbiAgLy8gMS4gTGV0IHJlc3VsdCBiZSA/IENhbGwoJUpTT04uc3RyaW5naWZ5JSwgdW5kZWZpbmVkLCDCqyB2YWx1ZSDCuykuXG4gIGNvbnN0IHJlc3VsdCA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKVxuXG4gIC8vIDIuIElmIHJlc3VsdCBpcyB1bmRlZmluZWQsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1ZhbHVlIGlzIG5vdCBKU09OIHNlcmlhbGl6YWJsZScpXG4gIH1cblxuICAvLyAzLiBBc3NlcnQ6IHJlc3VsdCBpcyBhIHN0cmluZy5cbiAgYXNzZXJ0KHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnKVxuXG4gIC8vIDQuIFJldHVybiByZXN1bHQuXG4gIHJldHVybiByZXN1bHRcbn1cblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0lMjVpdGVyYXRvcnByb3RvdHlwZSUyNS1vYmplY3RcbmNvbnN0IGVzSXRlcmF0b3JQcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoT2JqZWN0LmdldFByb3RvdHlwZU9mKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSkpXG5cbi8qKlxuICogQHNlZSBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2Rmbi1pdGVyYXRvci1wcm90b3R5cGUtb2JqZWN0XG4gKiBAcGFyYW0geygpID0+IHVua25vd25bXX0gaXRlcmF0b3JcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIG5hbWUgb2YgdGhlIGluc3RhbmNlXG4gKiBAcGFyYW0geydrZXknfCd2YWx1ZSd8J2tleSt2YWx1ZSd9IGtpbmRcbiAqL1xuZnVuY3Rpb24gbWFrZUl0ZXJhdG9yIChpdGVyYXRvciwgbmFtZSwga2luZCkge1xuICBjb25zdCBvYmplY3QgPSB7XG4gICAgaW5kZXg6IDAsXG4gICAga2luZCxcbiAgICB0YXJnZXQ6IGl0ZXJhdG9yXG4gIH1cblxuICBjb25zdCBpID0ge1xuICAgIG5leHQgKCkge1xuICAgICAgLy8gMS4gTGV0IGludGVyZmFjZSBiZSB0aGUgaW50ZXJmYWNlIGZvciB3aGljaCB0aGUgaXRlcmF0b3IgcHJvdG90eXBlIG9iamVjdCBleGlzdHMuXG5cbiAgICAgIC8vIDIuIExldCB0aGlzVmFsdWUgYmUgdGhlIHRoaXMgdmFsdWUuXG5cbiAgICAgIC8vIDMuIExldCBvYmplY3QgYmUgPyBUb09iamVjdCh0aGlzVmFsdWUpLlxuXG4gICAgICAvLyA0LiBJZiBvYmplY3QgaXMgYSBwbGF0Zm9ybSBvYmplY3QsIHRoZW4gcGVyZm9ybSBhIHNlY3VyaXR5XG4gICAgICAvLyAgICBjaGVjaywgcGFzc2luZzpcblxuICAgICAgLy8gNS4gSWYgb2JqZWN0IGlzIG5vdCBhIGRlZmF1bHQgaXRlcmF0b3Igb2JqZWN0IGZvciBpbnRlcmZhY2UsXG4gICAgICAvLyAgICB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgaWYgKE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKSAhPT0gaSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgIGAnbmV4dCcgY2FsbGVkIG9uIGFuIG9iamVjdCB0aGF0IGRvZXMgbm90IGltcGxlbWVudCBpbnRlcmZhY2UgJHtuYW1lfSBJdGVyYXRvci5gXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgLy8gNi4gTGV0IGluZGV4IGJlIG9iamVjdOKAmXMgaW5kZXguXG4gICAgICAvLyA3LiBMZXQga2luZCBiZSBvYmplY3TigJlzIGtpbmQuXG4gICAgICAvLyA4LiBMZXQgdmFsdWVzIGJlIG9iamVjdOKAmXMgdGFyZ2V0J3MgdmFsdWUgcGFpcnMgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAgY29uc3QgeyBpbmRleCwga2luZCwgdGFyZ2V0IH0gPSBvYmplY3RcbiAgICAgIGNvbnN0IHZhbHVlcyA9IHRhcmdldCgpXG5cbiAgICAgIC8vIDkuIExldCBsZW4gYmUgdGhlIGxlbmd0aCBvZiB2YWx1ZXMuXG4gICAgICBjb25zdCBsZW4gPSB2YWx1ZXMubGVuZ3RoXG5cbiAgICAgIC8vIDEwLiBJZiBpbmRleCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gbGVuLCB0aGVuIHJldHVyblxuICAgICAgLy8gICAgIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKS5cbiAgICAgIGlmIChpbmRleCA+PSBsZW4pIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9XG4gICAgICB9XG5cbiAgICAgIC8vIDExLiBMZXQgcGFpciBiZSB0aGUgZW50cnkgaW4gdmFsdWVzIGF0IGluZGV4IGluZGV4LlxuICAgICAgY29uc3QgcGFpciA9IHZhbHVlc1tpbmRleF1cblxuICAgICAgLy8gMTIuIFNldCBvYmplY3TigJlzIGluZGV4IHRvIGluZGV4ICsgMS5cbiAgICAgIG9iamVjdC5pbmRleCA9IGluZGV4ICsgMVxuXG4gICAgICAvLyAxMy4gUmV0dXJuIHRoZSBpdGVyYXRvciByZXN1bHQgZm9yIHBhaXIgYW5kIGtpbmQuXG4gICAgICByZXR1cm4gaXRlcmF0b3JSZXN1bHQocGFpciwga2luZClcbiAgICB9LFxuICAgIC8vIFRoZSBjbGFzcyBzdHJpbmcgb2YgYW4gaXRlcmF0b3IgcHJvdG90eXBlIG9iamVjdCBmb3IgYSBnaXZlbiBpbnRlcmZhY2UgaXMgdGhlXG4gICAgLy8gcmVzdWx0IG9mIGNvbmNhdGVuYXRpbmcgdGhlIGlkZW50aWZpZXIgb2YgdGhlIGludGVyZmFjZSBhbmQgdGhlIHN0cmluZyBcIiBJdGVyYXRvclwiLlxuICAgIFtTeW1ib2wudG9TdHJpbmdUYWddOiBgJHtuYW1lfSBJdGVyYXRvcmBcbiAgfVxuXG4gIC8vIFRoZSBbW1Byb3RvdHlwZV1dIGludGVybmFsIHNsb3Qgb2YgYW4gaXRlcmF0b3IgcHJvdG90eXBlIG9iamVjdCBtdXN0IGJlICVJdGVyYXRvclByb3RvdHlwZSUuXG4gIE9iamVjdC5zZXRQcm90b3R5cGVPZihpLCBlc0l0ZXJhdG9yUHJvdG90eXBlKVxuICAvLyBlc0l0ZXJhdG9yUHJvdG90eXBlIG5lZWRzIHRvIGJlIHRoZSBwcm90b3R5cGUgb2YgaVxuICAvLyB3aGljaCBpcyB0aGUgcHJvdG90eXBlIG9mIGFuIGVtcHR5IG9iamVjdC4gWWVzLCBpdCdzIGNvbmZ1c2luZy5cbiAgcmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZih7fSwgaSlcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNpdGVyYXRvci1yZXN1bHRcbmZ1bmN0aW9uIGl0ZXJhdG9yUmVzdWx0IChwYWlyLCBraW5kKSB7XG4gIGxldCByZXN1bHRcblxuICAvLyAxLiBMZXQgcmVzdWx0IGJlIGEgdmFsdWUgZGV0ZXJtaW5lZCBieSB0aGUgdmFsdWUgb2Yga2luZDpcbiAgc3dpdGNoIChraW5kKSB7XG4gICAgY2FzZSAna2V5Jzoge1xuICAgICAgLy8gMS4gTGV0IGlkbEtleSBiZSBwYWly4oCZcyBrZXkuXG4gICAgICAvLyAyLiBMZXQga2V5IGJlIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBpZGxLZXkgdG8gYW5cbiAgICAgIC8vICAgIEVDTUFTY3JpcHQgdmFsdWUuXG4gICAgICAvLyAzLiByZXN1bHQgaXMga2V5LlxuICAgICAgcmVzdWx0ID0gcGFpclswXVxuICAgICAgYnJlYWtcbiAgICB9XG4gICAgY2FzZSAndmFsdWUnOiB7XG4gICAgICAvLyAxLiBMZXQgaWRsVmFsdWUgYmUgcGFpcuKAmXMgdmFsdWUuXG4gICAgICAvLyAyLiBMZXQgdmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIGlkbFZhbHVlIHRvXG4gICAgICAvLyAgICBhbiBFQ01BU2NyaXB0IHZhbHVlLlxuICAgICAgLy8gMy4gcmVzdWx0IGlzIHZhbHVlLlxuICAgICAgcmVzdWx0ID0gcGFpclsxXVxuICAgICAgYnJlYWtcbiAgICB9XG4gICAgY2FzZSAna2V5K3ZhbHVlJzoge1xuICAgICAgLy8gMS4gTGV0IGlkbEtleSBiZSBwYWly4oCZcyBrZXkuXG4gICAgICAvLyAyLiBMZXQgaWRsVmFsdWUgYmUgcGFpcuKAmXMgdmFsdWUuXG4gICAgICAvLyAzLiBMZXQga2V5IGJlIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBpZGxLZXkgdG8gYW5cbiAgICAgIC8vICAgIEVDTUFTY3JpcHQgdmFsdWUuXG4gICAgICAvLyA0LiBMZXQgdmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIGlkbFZhbHVlIHRvXG4gICAgICAvLyAgICBhbiBFQ01BU2NyaXB0IHZhbHVlLlxuICAgICAgLy8gNS4gTGV0IGFycmF5IGJlICEgQXJyYXlDcmVhdGUoMikuXG4gICAgICAvLyA2LiBDYWxsICEgQ3JlYXRlRGF0YVByb3BlcnR5KGFycmF5LCBcIjBcIiwga2V5KS5cbiAgICAgIC8vIDcuIENhbGwgISBDcmVhdGVEYXRhUHJvcGVydHkoYXJyYXksIFwiMVwiLCB2YWx1ZSkuXG4gICAgICAvLyA4LiByZXN1bHQgaXMgYXJyYXkuXG4gICAgICByZXN1bHQgPSBwYWlyXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIC8vIDIuIFJldHVybiBDcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHJlc3VsdCwgZmFsc2UpLlxuICByZXR1cm4geyB2YWx1ZTogcmVzdWx0LCBkb25lOiBmYWxzZSB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYm9keS1mdWxseS1yZWFkXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZ1bGx5UmVhZEJvZHkgKGJvZHksIHByb2Nlc3NCb2R5LCBwcm9jZXNzQm9keUVycm9yKSB7XG4gIC8vIDEuIElmIHRhc2tEZXN0aW5hdGlvbiBpcyBudWxsLCB0aGVuIHNldCB0YXNrRGVzdGluYXRpb24gdG9cbiAgLy8gICAgdGhlIHJlc3VsdCBvZiBzdGFydGluZyBhIG5ldyBwYXJhbGxlbCBxdWV1ZS5cblxuICAvLyAyLiBMZXQgc3VjY2Vzc1N0ZXBzIGdpdmVuIGEgYnl0ZSBzZXF1ZW5jZSBieXRlcyBiZSB0byBxdWV1ZSBhXG4gIC8vICAgIGZldGNoIHRhc2sgdG8gcnVuIHByb2Nlc3NCb2R5IGdpdmVuIGJ5dGVzLCB3aXRoIHRhc2tEZXN0aW5hdGlvbi5cbiAgY29uc3Qgc3VjY2Vzc1N0ZXBzID0gcHJvY2Vzc0JvZHlcblxuICAvLyAzLiBMZXQgZXJyb3JTdGVwcyBiZSB0byBxdWV1ZSBhIGZldGNoIHRhc2sgdG8gcnVuIHByb2Nlc3NCb2R5RXJyb3IsXG4gIC8vICAgIHdpdGggdGFza0Rlc3RpbmF0aW9uLlxuICBjb25zdCBlcnJvclN0ZXBzID0gcHJvY2Vzc0JvZHlFcnJvclxuXG4gIC8vIDQuIExldCByZWFkZXIgYmUgdGhlIHJlc3VsdCBvZiBnZXR0aW5nIGEgcmVhZGVyIGZvciBib2R54oCZcyBzdHJlYW0uXG4gIC8vICAgIElmIHRoYXQgdGhyZXcgYW4gZXhjZXB0aW9uLCB0aGVuIHJ1biBlcnJvclN0ZXBzIHdpdGggdGhhdFxuICAvLyAgICBleGNlcHRpb24gYW5kIHJldHVybi5cbiAgbGV0IHJlYWRlclxuXG4gIHRyeSB7XG4gICAgcmVhZGVyID0gYm9keS5zdHJlYW0uZ2V0UmVhZGVyKClcbiAgfSBjYXRjaCAoZSkge1xuICAgIGVycm9yU3RlcHMoZSlcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIDUuIFJlYWQgYWxsIGJ5dGVzIGZyb20gcmVhZGVyLCBnaXZlbiBzdWNjZXNzU3RlcHMgYW5kIGVycm9yU3RlcHMuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVhZEFsbEJ5dGVzKHJlYWRlcilcbiAgICBzdWNjZXNzU3RlcHMocmVzdWx0KVxuICB9IGNhdGNoIChlKSB7XG4gICAgZXJyb3JTdGVwcyhlKVxuICB9XG59XG5cbi8qKiBAdHlwZSB7UmVhZGFibGVTdHJlYW19ICovXG5sZXQgUmVhZGFibGVTdHJlYW0gPSBnbG9iYWxUaGlzLlJlYWRhYmxlU3RyZWFtXG5cbmZ1bmN0aW9uIGlzUmVhZGFibGVTdHJlYW1MaWtlIChzdHJlYW0pIHtcbiAgaWYgKCFSZWFkYWJsZVN0cmVhbSkge1xuICAgIFJlYWRhYmxlU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtL3dlYicpLlJlYWRhYmxlU3RyZWFtXG4gIH1cblxuICByZXR1cm4gc3RyZWFtIGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW0gfHwgKFxuICAgIHN0cmVhbVtTeW1ib2wudG9TdHJpbmdUYWddID09PSAnUmVhZGFibGVTdHJlYW0nICYmXG4gICAgdHlwZW9mIHN0cmVhbS50ZWUgPT09ICdmdW5jdGlvbidcbiAgKVxufVxuXG5jb25zdCBNQVhJTVVNX0FSR1VNRU5UX0xFTkdUSCA9IDY1NTM1XG5cbi8qKlxuICogQHNlZSBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jaXNvbW9ycGhpYy1kZWNvZGVcbiAqIEBwYXJhbSB7bnVtYmVyW118VWludDhBcnJheX0gaW5wdXRcbiAqL1xuZnVuY3Rpb24gaXNvbW9ycGhpY0RlY29kZSAoaW5wdXQpIHtcbiAgLy8gMS4gVG8gaXNvbW9ycGhpYyBkZWNvZGUgYSBieXRlIHNlcXVlbmNlIGlucHV0LCByZXR1cm4gYSBzdHJpbmcgd2hvc2UgY29kZSBwb2ludFxuICAvLyAgICBsZW5ndGggaXMgZXF1YWwgdG8gaW5wdXTigJlzIGxlbmd0aCBhbmQgd2hvc2UgY29kZSBwb2ludHMgaGF2ZSB0aGUgc2FtZSB2YWx1ZXNcbiAgLy8gICAgYXMgdGhlIHZhbHVlcyBvZiBpbnB1dOKAmXMgYnl0ZXMsIGluIHRoZSBzYW1lIG9yZGVyLlxuXG4gIGlmIChpbnB1dC5sZW5ndGggPCBNQVhJTVVNX0FSR1VNRU5UX0xFTkdUSCkge1xuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKC4uLmlucHV0KVxuICB9XG5cbiAgcmV0dXJuIGlucHV0LnJlZHVjZSgocHJldmlvdXMsIGN1cnJlbnQpID0+IHByZXZpb3VzICsgU3RyaW5nLmZyb21DaGFyQ29kZShjdXJyZW50KSwgJycpXG59XG5cbi8qKlxuICogQHBhcmFtIHtSZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXI8VWludDhBcnJheT59IGNvbnRyb2xsZXJcbiAqL1xuZnVuY3Rpb24gcmVhZGFibGVTdHJlYW1DbG9zZSAoY29udHJvbGxlcikge1xuICB0cnkge1xuICAgIGNvbnRyb2xsZXIuY2xvc2UoKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBUT0RPOiBhZGQgY29tbWVudCBleHBsYWluaW5nIHdoeSB0aGlzIGVycm9yIG9jY3Vycy5cbiAgICBpZiAoIWVyci5tZXNzYWdlLmluY2x1ZGVzKCdDb250cm9sbGVyIGlzIGFscmVhZHkgY2xvc2VkJykpIHtcbiAgICAgIHRocm93IGVyclxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2lzb21vcnBoaWMtZW5jb2RlXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRcbiAqL1xuZnVuY3Rpb24gaXNvbW9ycGhpY0VuY29kZSAoaW5wdXQpIHtcbiAgLy8gMS4gQXNzZXJ0OiBpbnB1dCBjb250YWlucyBubyBjb2RlIHBvaW50cyBncmVhdGVyIHRoYW4gVSswMEZGLlxuICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgYXNzZXJ0KGlucHV0LmNoYXJDb2RlQXQoaSkgPD0gMHhGRilcbiAgfVxuXG4gIC8vIDIuIFJldHVybiBhIGJ5dGUgc2VxdWVuY2Ugd2hvc2UgbGVuZ3RoIGlzIGVxdWFsIHRvIGlucHV04oCZcyBjb2RlXG4gIC8vICAgIHBvaW50IGxlbmd0aCBhbmQgd2hvc2UgYnl0ZXMgaGF2ZSB0aGUgc2FtZSB2YWx1ZXMgYXMgdGhlXG4gIC8vICAgIHZhbHVlcyBvZiBpbnB1dOKAmXMgY29kZSBwb2ludHMsIGluIHRoZSBzYW1lIG9yZGVyXG4gIHJldHVybiBpbnB1dFxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9zdHJlYW1zLnNwZWMud2hhdHdnLm9yZy8jcmVhZGFibGVzdHJlYW1kZWZhdWx0cmVhZGVyLXJlYWQtYWxsLWJ5dGVzXG4gKiBAc2VlIGh0dHBzOi8vc3RyZWFtcy5zcGVjLndoYXR3Zy5vcmcvI3JlYWQtbG9vcFxuICogQHBhcmFtIHtSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXJ9IHJlYWRlclxuICovXG5hc3luYyBmdW5jdGlvbiByZWFkQWxsQnl0ZXMgKHJlYWRlcikge1xuICBjb25zdCBieXRlcyA9IFtdXG4gIGxldCBieXRlTGVuZ3RoID0gMFxuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgeyBkb25lLCB2YWx1ZTogY2h1bmsgfSA9IGF3YWl0IHJlYWRlci5yZWFkKClcblxuICAgIGlmIChkb25lKSB7XG4gICAgICAvLyAxLiBDYWxsIHN1Y2Nlc3NTdGVwcyB3aXRoIGJ5dGVzLlxuICAgICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoYnl0ZXMsIGJ5dGVMZW5ndGgpXG4gICAgfVxuXG4gICAgLy8gMS4gSWYgY2h1bmsgaXMgbm90IGEgVWludDhBcnJheSBvYmplY3QsIGNhbGwgZmFpbHVyZVN0ZXBzXG4gICAgLy8gICAgd2l0aCBhIFR5cGVFcnJvciBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMuXG4gICAgaWYgKCFpc1VpbnQ4QXJyYXkoY2h1bmspKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWNlaXZlZCBub24tVWludDhBcnJheSBjaHVuaycpXG4gICAgfVxuXG4gICAgLy8gMi4gQXBwZW5kIHRoZSBieXRlcyByZXByZXNlbnRlZCBieSBjaHVuayB0byBieXRlcy5cbiAgICBieXRlcy5wdXNoKGNodW5rKVxuICAgIGJ5dGVMZW5ndGggKz0gY2h1bmsubGVuZ3RoXG5cbiAgICAvLyAzLiBSZWFkLWxvb3AgZ2l2ZW4gcmVhZGVyLCBieXRlcywgc3VjY2Vzc1N0ZXBzLCBhbmQgZmFpbHVyZVN0ZXBzLlxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaXMtbG9jYWxcbiAqIEBwYXJhbSB7VVJMfSB1cmxcbiAqL1xuZnVuY3Rpb24gdXJsSXNMb2NhbCAodXJsKSB7XG4gIGFzc2VydCgncHJvdG9jb2wnIGluIHVybCkgLy8gZW5zdXJlIGl0J3MgYSB1cmwgb2JqZWN0XG5cbiAgY29uc3QgcHJvdG9jb2wgPSB1cmwucHJvdG9jb2xcblxuICByZXR1cm4gcHJvdG9jb2wgPT09ICdhYm91dDonIHx8IHByb3RvY29sID09PSAnYmxvYjonIHx8IHByb3RvY29sID09PSAnZGF0YTonXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd8VVJMfSB1cmxcbiAqL1xuZnVuY3Rpb24gdXJsSGFzSHR0cHNTY2hlbWUgKHVybCkge1xuICBpZiAodHlwZW9mIHVybCA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdXJsLnN0YXJ0c1dpdGgoJ2h0dHBzOicpXG4gIH1cblxuICByZXR1cm4gdXJsLnByb3RvY29sID09PSAnaHR0cHM6J1xufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtc2NoZW1lXG4gKiBAcGFyYW0ge1VSTH0gdXJsXG4gKi9cbmZ1bmN0aW9uIHVybElzSHR0cEh0dHBzU2NoZW1lICh1cmwpIHtcbiAgYXNzZXJ0KCdwcm90b2NvbCcgaW4gdXJsKSAvLyBlbnN1cmUgaXQncyBhIHVybCBvYmplY3RcblxuICBjb25zdCBwcm90b2NvbCA9IHVybC5wcm90b2NvbFxuXG4gIHJldHVybiBwcm90b2NvbCA9PT0gJ2h0dHA6JyB8fCBwcm90b2NvbCA9PT0gJ2h0dHBzOidcbn1cblxuLyoqXG4gKiBGZXRjaCBzdXBwb3J0cyBub2RlID49IDE2LjguMCwgYnV0IE9iamVjdC5oYXNPd24gd2FzIGFkZGVkIGluIHYxNi45LjAuXG4gKi9cbmNvbnN0IGhhc093biA9IE9iamVjdC5oYXNPd24gfHwgKChkaWN0LCBrZXkpID0+IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkaWN0LCBrZXkpKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXNBYm9ydGVkLFxuICBpc0NhbmNlbGxlZCxcbiAgY3JlYXRlRGVmZXJyZWRQcm9taXNlLFxuICBSZWFkYWJsZVN0cmVhbUZyb20sXG4gIHRvVVNWU3RyaW5nLFxuICB0cnlVcGdyYWRlUmVxdWVzdFRvQVBvdGVudGlhbGx5VHJ1c3R3b3J0aHlVUkwsXG4gIGNvYXJzZW5lZFNoYXJlZEN1cnJlbnRUaW1lLFxuICBkZXRlcm1pbmVSZXF1ZXN0c1JlZmVycmVyLFxuICBtYWtlUG9saWN5Q29udGFpbmVyLFxuICBjbG9uZVBvbGljeUNvbnRhaW5lcixcbiAgYXBwZW5kRmV0Y2hNZXRhZGF0YSxcbiAgYXBwZW5kUmVxdWVzdE9yaWdpbkhlYWRlcixcbiAgVEFPQ2hlY2ssXG4gIGNvcnNDaGVjayxcbiAgY3Jvc3NPcmlnaW5SZXNvdXJjZVBvbGljeUNoZWNrLFxuICBjcmVhdGVPcGFxdWVUaW1pbmdJbmZvLFxuICBzZXRSZXF1ZXN0UmVmZXJyZXJQb2xpY3lPblJlZGlyZWN0LFxuICBpc1ZhbGlkSFRUUFRva2VuLFxuICByZXF1ZXN0QmFkUG9ydCxcbiAgcmVxdWVzdEN1cnJlbnRVUkwsXG4gIHJlc3BvbnNlVVJMLFxuICByZXNwb25zZUxvY2F0aW9uVVJMLFxuICBpc0Jsb2JMaWtlLFxuICBpc1VSTFBvdGVudGlhbGx5VHJ1c3R3b3J0aHksXG4gIGlzVmFsaWRSZWFzb25QaHJhc2UsXG4gIHNhbWVPcmlnaW4sXG4gIG5vcm1hbGl6ZU1ldGhvZCxcbiAgc2VyaWFsaXplSmF2YXNjcmlwdFZhbHVlVG9KU09OU3RyaW5nLFxuICBtYWtlSXRlcmF0b3IsXG4gIGlzVmFsaWRIZWFkZXJOYW1lLFxuICBpc1ZhbGlkSGVhZGVyVmFsdWUsXG4gIGhhc093bixcbiAgaXNFcnJvckxpa2UsXG4gIGZ1bGx5UmVhZEJvZHksXG4gIGJ5dGVzTWF0Y2gsXG4gIGlzUmVhZGFibGVTdHJlYW1MaWtlLFxuICByZWFkYWJsZVN0cmVhbUNsb3NlLFxuICBpc29tb3JwaGljRW5jb2RlLFxuICBpc29tb3JwaGljRGVjb2RlLFxuICB1cmxJc0xvY2FsLFxuICB1cmxIYXNIdHRwc1NjaGVtZSxcbiAgdXJsSXNIdHRwSHR0cHNTY2hlbWUsXG4gIHJlYWRBbGxCeXRlcyxcbiAgbm9ybWFsaXplTWV0aG9kUmVjb3JkLFxuICBwYXJzZU1ldGFkYXRhXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAga1VybDogU3ltYm9sKCd1cmwnKSxcbiAga0hlYWRlcnM6IFN5bWJvbCgnaGVhZGVycycpLFxuICBrU2lnbmFsOiBTeW1ib2woJ3NpZ25hbCcpLFxuICBrU3RhdGU6IFN5bWJvbCgnc3RhdGUnKSxcbiAga0d1YXJkOiBTeW1ib2woJ2d1YXJkJyksXG4gIGtSZWFsbTogU3ltYm9sKCdyZWFsbScpXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHR5cGVzIH0gPSByZXF1aXJlKCd1dGlsJylcbmNvbnN0IHsgaGFzT3duLCB0b1VTVlN0cmluZyB9ID0gcmVxdWlyZSgnLi91dGlsJylcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4uLy4uL3R5cGVzL3dlYmlkbCcpLldlYmlkbH0gKi9cbmNvbnN0IHdlYmlkbCA9IHt9XG53ZWJpZGwuY29udmVydGVycyA9IHt9XG53ZWJpZGwudXRpbCA9IHt9XG53ZWJpZGwuZXJyb3JzID0ge31cblxud2ViaWRsLmVycm9ycy5leGNlcHRpb24gPSBmdW5jdGlvbiAobWVzc2FnZSkge1xuICByZXR1cm4gbmV3IFR5cGVFcnJvcihgJHttZXNzYWdlLmhlYWRlcn06ICR7bWVzc2FnZS5tZXNzYWdlfWApXG59XG5cbndlYmlkbC5lcnJvcnMuY29udmVyc2lvbkZhaWxlZCA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gIGNvbnN0IHBsdXJhbCA9IGNvbnRleHQudHlwZXMubGVuZ3RoID09PSAxID8gJycgOiAnIG9uZSBvZidcbiAgY29uc3QgbWVzc2FnZSA9XG4gICAgYCR7Y29udGV4dC5hcmd1bWVudH0gY291bGQgbm90IGJlIGNvbnZlcnRlZCB0b2AgK1xuICAgIGAke3BsdXJhbH06ICR7Y29udGV4dC50eXBlcy5qb2luKCcsICcpfS5gXG5cbiAgcmV0dXJuIHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICBoZWFkZXI6IGNvbnRleHQucHJlZml4LFxuICAgIG1lc3NhZ2VcbiAgfSlcbn1cblxud2ViaWRsLmVycm9ycy5pbnZhbGlkQXJndW1lbnQgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuICByZXR1cm4gd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgIGhlYWRlcjogY29udGV4dC5wcmVmaXgsXG4gICAgbWVzc2FnZTogYFwiJHtjb250ZXh0LnZhbHVlfVwiIGlzIGFuIGludmFsaWQgJHtjb250ZXh0LnR5cGV9LmBcbiAgfSlcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNpbXBsZW1lbnRzXG53ZWJpZGwuYnJhbmRDaGVjayA9IGZ1bmN0aW9uIChWLCBJLCBvcHRzID0gdW5kZWZpbmVkKSB7XG4gIGlmIChvcHRzPy5zdHJpY3QgIT09IGZhbHNlICYmICEoViBpbnN0YW5jZW9mIEkpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSWxsZWdhbCBpbnZvY2F0aW9uJylcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gVj8uW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09IEkucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ11cbiAgfVxufVxuXG53ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayA9IGZ1bmN0aW9uICh7IGxlbmd0aCB9LCBtaW4sIGN0eCkge1xuICBpZiAobGVuZ3RoIDwgbWluKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgbWVzc2FnZTogYCR7bWlufSBhcmd1bWVudCR7bWluICE9PSAxID8gJ3MnIDogJyd9IHJlcXVpcmVkLCBgICtcbiAgICAgICAgICAgICAgIGBidXQke2xlbmd0aCA/ICcgb25seScgOiAnJ30gJHtsZW5ndGh9IGZvdW5kLmAsXG4gICAgICAuLi5jdHhcbiAgICB9KVxuICB9XG59XG5cbndlYmlkbC5pbGxlZ2FsQ29uc3RydWN0b3IgPSBmdW5jdGlvbiAoKSB7XG4gIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICBoZWFkZXI6ICdUeXBlRXJyb3InLFxuICAgIG1lc3NhZ2U6ICdJbGxlZ2FsIGNvbnN0cnVjdG9yJ1xuICB9KVxufVxuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWVjbWFzY3JpcHQtZGF0YS10eXBlcy1hbmQtdmFsdWVzXG53ZWJpZGwudXRpbC5UeXBlID0gZnVuY3Rpb24gKFYpIHtcbiAgc3dpdGNoICh0eXBlb2YgVikge1xuICAgIGNhc2UgJ3VuZGVmaW5lZCc6IHJldHVybiAnVW5kZWZpbmVkJ1xuICAgIGNhc2UgJ2Jvb2xlYW4nOiByZXR1cm4gJ0Jvb2xlYW4nXG4gICAgY2FzZSAnc3RyaW5nJzogcmV0dXJuICdTdHJpbmcnXG4gICAgY2FzZSAnc3ltYm9sJzogcmV0dXJuICdTeW1ib2wnXG4gICAgY2FzZSAnbnVtYmVyJzogcmV0dXJuICdOdW1iZXInXG4gICAgY2FzZSAnYmlnaW50JzogcmV0dXJuICdCaWdJbnQnXG4gICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgIGNhc2UgJ29iamVjdCc6IHtcbiAgICAgIGlmIChWID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnTnVsbCdcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICdPYmplY3QnXG4gICAgfVxuICB9XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jYWJzdHJhY3Qtb3BkZWYtY29udmVydHRvaW50XG53ZWJpZGwudXRpbC5Db252ZXJ0VG9JbnQgPSBmdW5jdGlvbiAoViwgYml0TGVuZ3RoLCBzaWduZWRuZXNzLCBvcHRzID0ge30pIHtcbiAgbGV0IHVwcGVyQm91bmRcbiAgbGV0IGxvd2VyQm91bmRcblxuICAvLyAxLiBJZiBiaXRMZW5ndGggaXMgNjQsIHRoZW46XG4gIGlmIChiaXRMZW5ndGggPT09IDY0KSB7XG4gICAgLy8gMS4gTGV0IHVwcGVyQm91bmQgYmUgMl41MyDiiJIgMS5cbiAgICB1cHBlckJvdW5kID0gTWF0aC5wb3coMiwgNTMpIC0gMVxuXG4gICAgLy8gMi4gSWYgc2lnbmVkbmVzcyBpcyBcInVuc2lnbmVkXCIsIHRoZW4gbGV0IGxvd2VyQm91bmQgYmUgMC5cbiAgICBpZiAoc2lnbmVkbmVzcyA9PT0gJ3Vuc2lnbmVkJykge1xuICAgICAgbG93ZXJCb3VuZCA9IDBcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gMy4gT3RoZXJ3aXNlIGxldCBsb3dlckJvdW5kIGJlIOKIkjJeNTMgKyAxLlxuICAgICAgbG93ZXJCb3VuZCA9IE1hdGgucG93KC0yLCA1MykgKyAxXG4gICAgfVxuICB9IGVsc2UgaWYgKHNpZ25lZG5lc3MgPT09ICd1bnNpZ25lZCcpIHtcbiAgICAvLyAyLiBPdGhlcndpc2UsIGlmIHNpZ25lZG5lc3MgaXMgXCJ1bnNpZ25lZFwiLCB0aGVuOlxuXG4gICAgLy8gMS4gTGV0IGxvd2VyQm91bmQgYmUgMC5cbiAgICBsb3dlckJvdW5kID0gMFxuXG4gICAgLy8gMi4gTGV0IHVwcGVyQm91bmQgYmUgMl5iaXRMZW5ndGgg4oiSIDEuXG4gICAgdXBwZXJCb3VuZCA9IE1hdGgucG93KDIsIGJpdExlbmd0aCkgLSAxXG4gIH0gZWxzZSB7XG4gICAgLy8gMy4gT3RoZXJ3aXNlOlxuXG4gICAgLy8gMS4gTGV0IGxvd2VyQm91bmQgYmUgLTJeYml0TGVuZ3RoIOKIkiAxLlxuICAgIGxvd2VyQm91bmQgPSBNYXRoLnBvdygtMiwgYml0TGVuZ3RoKSAtIDFcblxuICAgIC8vIDIuIExldCB1cHBlckJvdW5kIGJlIDJeYml0TGVuZ3RoIOKIkiAxIOKIkiAxLlxuICAgIHVwcGVyQm91bmQgPSBNYXRoLnBvdygyLCBiaXRMZW5ndGggLSAxKSAtIDFcbiAgfVxuXG4gIC8vIDQuIExldCB4IGJlID8gVG9OdW1iZXIoVikuXG4gIGxldCB4ID0gTnVtYmVyKFYpXG5cbiAgLy8gNS4gSWYgeCBpcyDiiJIwLCB0aGVuIHNldCB4IHRvICswLlxuICBpZiAoeCA9PT0gMCkge1xuICAgIHggPSAwXG4gIH1cblxuICAvLyA2LiBJZiB0aGUgY29udmVyc2lvbiBpcyB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtFbmZvcmNlUmFuZ2VdIGV4dGVuZGVkIGF0dHJpYnV0ZSwgdGhlbjpcbiAgaWYgKG9wdHMuZW5mb3JjZVJhbmdlID09PSB0cnVlKSB7XG4gICAgLy8gMS4gSWYgeCBpcyBOYU4sICviiJ4sIG9yIOKIkuKIniwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoXG4gICAgICBOdW1iZXIuaXNOYU4oeCkgfHxcbiAgICAgIHggPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSB8fFxuICAgICAgeCA9PT0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZXG4gICAgKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ0ludGVnZXIgY29udmVyc2lvbicsXG4gICAgICAgIG1lc3NhZ2U6IGBDb3VsZCBub3QgY29udmVydCAke1Z9IHRvIGFuIGludGVnZXIuYFxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAyLiBTZXQgeCB0byBJbnRlZ2VyUGFydCh4KS5cbiAgICB4ID0gd2ViaWRsLnV0aWwuSW50ZWdlclBhcnQoeClcblxuICAgIC8vIDMuIElmIHggPCBsb3dlckJvdW5kIG9yIHggPiB1cHBlckJvdW5kLCB0aGVuXG4gICAgLy8gICAgdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKHggPCBsb3dlckJvdW5kIHx8IHggPiB1cHBlckJvdW5kKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ0ludGVnZXIgY29udmVyc2lvbicsXG4gICAgICAgIG1lc3NhZ2U6IGBWYWx1ZSBtdXN0IGJlIGJldHdlZW4gJHtsb3dlckJvdW5kfS0ke3VwcGVyQm91bmR9LCBnb3QgJHt4fS5gXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDQuIFJldHVybiB4LlxuICAgIHJldHVybiB4XG4gIH1cblxuICAvLyA3LiBJZiB4IGlzIG5vdCBOYU4gYW5kIHRoZSBjb252ZXJzaW9uIGlzIHRvIGFuIElETFxuICAvLyAgICB0eXBlIGFzc29jaWF0ZWQgd2l0aCB0aGUgW0NsYW1wXSBleHRlbmRlZFxuICAvLyAgICBhdHRyaWJ1dGUsIHRoZW46XG4gIGlmICghTnVtYmVyLmlzTmFOKHgpICYmIG9wdHMuY2xhbXAgPT09IHRydWUpIHtcbiAgICAvLyAxLiBTZXQgeCB0byBtaW4obWF4KHgsIGxvd2VyQm91bmQpLCB1cHBlckJvdW5kKS5cbiAgICB4ID0gTWF0aC5taW4oTWF0aC5tYXgoeCwgbG93ZXJCb3VuZCksIHVwcGVyQm91bmQpXG5cbiAgICAvLyAyLiBSb3VuZCB4IHRvIHRoZSBuZWFyZXN0IGludGVnZXIsIGNob29zaW5nIHRoZVxuICAgIC8vICAgIGV2ZW4gaW50ZWdlciBpZiBpdCBsaWVzIGhhbGZ3YXkgYmV0d2VlbiB0d28sXG4gICAgLy8gICAgYW5kIGNob29zaW5nICswIHJhdGhlciB0aGFuIOKIkjAuXG4gICAgaWYgKE1hdGguZmxvb3IoeCkgJSAyID09PSAwKSB7XG4gICAgICB4ID0gTWF0aC5mbG9vcih4KVxuICAgIH0gZWxzZSB7XG4gICAgICB4ID0gTWF0aC5jZWlsKHgpXG4gICAgfVxuXG4gICAgLy8gMy4gUmV0dXJuIHguXG4gICAgcmV0dXJuIHhcbiAgfVxuXG4gIC8vIDguIElmIHggaXMgTmFOLCArMCwgK+KIniwgb3Ig4oiS4oieLCB0aGVuIHJldHVybiArMC5cbiAgaWYgKFxuICAgIE51bWJlci5pc05hTih4KSB8fFxuICAgICh4ID09PSAwICYmIE9iamVjdC5pcygwLCB4KSkgfHxcbiAgICB4ID09PSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkgfHxcbiAgICB4ID09PSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFlcbiAgKSB7XG4gICAgcmV0dXJuIDBcbiAgfVxuXG4gIC8vIDkuIFNldCB4IHRvIEludGVnZXJQYXJ0KHgpLlxuICB4ID0gd2ViaWRsLnV0aWwuSW50ZWdlclBhcnQoeClcblxuICAvLyAxMC4gU2V0IHggdG8geCBtb2R1bG8gMl5iaXRMZW5ndGguXG4gIHggPSB4ICUgTWF0aC5wb3coMiwgYml0TGVuZ3RoKVxuXG4gIC8vIDExLiBJZiBzaWduZWRuZXNzIGlzIFwic2lnbmVkXCIgYW5kIHgg4omlIDJeYml0TGVuZ3RoIOKIkiAxLFxuICAvLyAgICB0aGVuIHJldHVybiB4IOKIkiAyXmJpdExlbmd0aC5cbiAgaWYgKHNpZ25lZG5lc3MgPT09ICdzaWduZWQnICYmIHggPj0gTWF0aC5wb3coMiwgYml0TGVuZ3RoKSAtIDEpIHtcbiAgICByZXR1cm4geCAtIE1hdGgucG93KDIsIGJpdExlbmd0aClcbiAgfVxuXG4gIC8vIDEyLiBPdGhlcndpc2UsIHJldHVybiB4LlxuICByZXR1cm4geFxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2Fic3RyYWN0LW9wZGVmLWludGVnZXJwYXJ0XG53ZWJpZGwudXRpbC5JbnRlZ2VyUGFydCA9IGZ1bmN0aW9uIChuKSB7XG4gIC8vIDEuIExldCByIGJlIGZsb29yKGFicyhuKSkuXG4gIGNvbnN0IHIgPSBNYXRoLmZsb29yKE1hdGguYWJzKG4pKVxuXG4gIC8vIDIuIElmIG4gPCAwLCB0aGVuIHJldHVybiAtMSDDlyByLlxuICBpZiAobiA8IDApIHtcbiAgICByZXR1cm4gLTEgKiByXG4gIH1cblxuICAvLyAzLiBPdGhlcndpc2UsIHJldHVybiByLlxuICByZXR1cm4gclxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLXNlcXVlbmNlXG53ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIgPSBmdW5jdGlvbiAoY29udmVydGVyKSB7XG4gIHJldHVybiAoVikgPT4ge1xuICAgIC8vIDEuIElmIFR5cGUoVikgaXMgbm90IE9iamVjdCwgdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKHdlYmlkbC51dGlsLlR5cGUoVikgIT09ICdPYmplY3QnKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ1NlcXVlbmNlJyxcbiAgICAgICAgbWVzc2FnZTogYFZhbHVlIG9mIHR5cGUgJHt3ZWJpZGwudXRpbC5UeXBlKFYpfSBpcyBub3QgYW4gT2JqZWN0LmBcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gTGV0IG1ldGhvZCBiZSA/IEdldE1ldGhvZChWLCBAQGl0ZXJhdG9yKS5cbiAgICAvKiogQHR5cGUge0dlbmVyYXRvcn0gKi9cbiAgICBjb25zdCBtZXRob2QgPSBWPy5bU3ltYm9sLml0ZXJhdG9yXT8uKClcbiAgICBjb25zdCBzZXEgPSBbXVxuXG4gICAgLy8gMy4gSWYgbWV0aG9kIGlzIHVuZGVmaW5lZCwgdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKFxuICAgICAgbWV0aG9kID09PSB1bmRlZmluZWQgfHxcbiAgICAgIHR5cGVvZiBtZXRob2QubmV4dCAhPT0gJ2Z1bmN0aW9uJ1xuICAgICkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6ICdTZXF1ZW5jZScsXG4gICAgICAgIG1lc3NhZ2U6ICdPYmplY3QgaXMgbm90IGFuIGl0ZXJhdG9yLidcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNjcmVhdGUtc2VxdWVuY2UtZnJvbS1pdGVyYWJsZVxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBtZXRob2QubmV4dCgpXG5cbiAgICAgIGlmIChkb25lKSB7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIHNlcS5wdXNoKGNvbnZlcnRlcih2YWx1ZSkpXG4gICAgfVxuXG4gICAgcmV0dXJuIHNlcVxuICB9XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtdG8tcmVjb3JkXG53ZWJpZGwucmVjb3JkQ29udmVydGVyID0gZnVuY3Rpb24gKGtleUNvbnZlcnRlciwgdmFsdWVDb252ZXJ0ZXIpIHtcbiAgcmV0dXJuIChPKSA9PiB7XG4gICAgLy8gMS4gSWYgVHlwZShPKSBpcyBub3QgT2JqZWN0LCB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAod2ViaWRsLnV0aWwuVHlwZShPKSAhPT0gJ09iamVjdCcpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnUmVjb3JkJyxcbiAgICAgICAgbWVzc2FnZTogYFZhbHVlIG9mIHR5cGUgJHt3ZWJpZGwudXRpbC5UeXBlKE8pfSBpcyBub3QgYW4gT2JqZWN0LmBcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gTGV0IHJlc3VsdCBiZSBhIG5ldyBlbXB0eSBpbnN0YW5jZSBvZiByZWNvcmQ8SywgVj4uXG4gICAgY29uc3QgcmVzdWx0ID0ge31cblxuICAgIGlmICghdHlwZXMuaXNQcm94eShPKSkge1xuICAgICAgLy8gT2JqZWN0LmtleXMgb25seSByZXR1cm5zIGVudW1lcmFibGUgcHJvcGVydGllc1xuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKE8pXG5cbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgLy8gMS4gTGV0IHR5cGVkS2V5IGJlIGtleSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgSy5cbiAgICAgICAgY29uc3QgdHlwZWRLZXkgPSBrZXlDb252ZXJ0ZXIoa2V5KVxuXG4gICAgICAgIC8vIDIuIExldCB2YWx1ZSBiZSA/IEdldChPLCBrZXkpLlxuICAgICAgICAvLyAzLiBMZXQgdHlwZWRWYWx1ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgVi5cbiAgICAgICAgY29uc3QgdHlwZWRWYWx1ZSA9IHZhbHVlQ29udmVydGVyKE9ba2V5XSlcblxuICAgICAgICAvLyA0LiBTZXQgcmVzdWx0W3R5cGVkS2V5XSB0byB0eXBlZFZhbHVlLlxuICAgICAgICByZXN1bHRbdHlwZWRLZXldID0gdHlwZWRWYWx1ZVxuICAgICAgfVxuXG4gICAgICAvLyA1LiBSZXR1cm4gcmVzdWx0LlxuICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH1cblxuICAgIC8vIDMuIExldCBrZXlzIGJlID8gTy5bW093blByb3BlcnR5S2V5c11dKCkuXG4gICAgY29uc3Qga2V5cyA9IFJlZmxlY3Qub3duS2V5cyhPKVxuXG4gICAgLy8gNC4gRm9yIGVhY2gga2V5IG9mIGtleXMuXG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgLy8gMS4gTGV0IGRlc2MgYmUgPyBPLltbR2V0T3duUHJvcGVydHldXShrZXkpLlxuICAgICAgY29uc3QgZGVzYyA9IFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIGtleSlcblxuICAgICAgLy8gMi4gSWYgZGVzYyBpcyBub3QgdW5kZWZpbmVkIGFuZCBkZXNjLltbRW51bWVyYWJsZV1dIGlzIHRydWU6XG4gICAgICBpZiAoZGVzYz8uZW51bWVyYWJsZSkge1xuICAgICAgICAvLyAxLiBMZXQgdHlwZWRLZXkgYmUga2V5IGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBLLlxuICAgICAgICBjb25zdCB0eXBlZEtleSA9IGtleUNvbnZlcnRlcihrZXkpXG5cbiAgICAgICAgLy8gMi4gTGV0IHZhbHVlIGJlID8gR2V0KE8sIGtleSkuXG4gICAgICAgIC8vIDMuIExldCB0eXBlZFZhbHVlIGJlIHZhbHVlIGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBWLlxuICAgICAgICBjb25zdCB0eXBlZFZhbHVlID0gdmFsdWVDb252ZXJ0ZXIoT1trZXldKVxuXG4gICAgICAgIC8vIDQuIFNldCByZXN1bHRbdHlwZWRLZXldIHRvIHR5cGVkVmFsdWUuXG4gICAgICAgIHJlc3VsdFt0eXBlZEtleV0gPSB0eXBlZFZhbHVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNS4gUmV0dXJuIHJlc3VsdC5cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cbn1cblxud2ViaWRsLmludGVyZmFjZUNvbnZlcnRlciA9IGZ1bmN0aW9uIChpKSB7XG4gIHJldHVybiAoViwgb3B0cyA9IHt9KSA9PiB7XG4gICAgaWYgKG9wdHMuc3RyaWN0ICE9PSBmYWxzZSAmJiAhKFYgaW5zdGFuY2VvZiBpKSkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6IGkubmFtZSxcbiAgICAgICAgbWVzc2FnZTogYEV4cGVjdGVkICR7Vn0gdG8gYmUgYW4gaW5zdGFuY2Ugb2YgJHtpLm5hbWV9LmBcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIFZcbiAgfVxufVxuXG53ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlciA9IGZ1bmN0aW9uIChjb252ZXJ0ZXJzKSB7XG4gIHJldHVybiAoZGljdGlvbmFyeSkgPT4ge1xuICAgIGNvbnN0IHR5cGUgPSB3ZWJpZGwudXRpbC5UeXBlKGRpY3Rpb25hcnkpXG4gICAgY29uc3QgZGljdCA9IHt9XG5cbiAgICBpZiAodHlwZSA9PT0gJ051bGwnIHx8IHR5cGUgPT09ICdVbmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gZGljdFxuICAgIH0gZWxzZSBpZiAodHlwZSAhPT0gJ09iamVjdCcpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnRGljdGlvbmFyeScsXG4gICAgICAgIG1lc3NhZ2U6IGBFeHBlY3RlZCAke2RpY3Rpb25hcnl9IHRvIGJlIG9uZSBvZjogTnVsbCwgVW5kZWZpbmVkLCBPYmplY3QuYFxuICAgICAgfSlcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IG9wdGlvbnMgb2YgY29udmVydGVycykge1xuICAgICAgY29uc3QgeyBrZXksIGRlZmF1bHRWYWx1ZSwgcmVxdWlyZWQsIGNvbnZlcnRlciB9ID0gb3B0aW9uc1xuXG4gICAgICBpZiAocmVxdWlyZWQgPT09IHRydWUpIHtcbiAgICAgICAgaWYgKCFoYXNPd24oZGljdGlvbmFyeSwga2V5KSkge1xuICAgICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICAgIGhlYWRlcjogJ0RpY3Rpb25hcnknLFxuICAgICAgICAgICAgbWVzc2FnZTogYE1pc3NpbmcgcmVxdWlyZWQga2V5IFwiJHtrZXl9XCIuYFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGV0IHZhbHVlID0gZGljdGlvbmFyeVtrZXldXG4gICAgICBjb25zdCBoYXNEZWZhdWx0ID0gaGFzT3duKG9wdGlvbnMsICdkZWZhdWx0VmFsdWUnKVxuXG4gICAgICAvLyBPbmx5IHVzZSBkZWZhdWx0VmFsdWUgaWYgdmFsdWUgaXMgdW5kZWZpbmVkIGFuZFxuICAgICAgLy8gYSBkZWZhdWx0VmFsdWUgb3B0aW9ucyB3YXMgcHJvdmlkZWQuXG4gICAgICBpZiAoaGFzRGVmYXVsdCAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlID8/IGRlZmF1bHRWYWx1ZVxuICAgICAgfVxuXG4gICAgICAvLyBBIGtleSBjYW4gYmUgb3B0aW9uYWwgYW5kIGhhdmUgbm8gZGVmYXVsdCB2YWx1ZS5cbiAgICAgIC8vIFdoZW4gdGhpcyBoYXBwZW5zLCBkbyBub3QgcGVyZm9ybSBhIGNvbnZlcnNpb24sXG4gICAgICAvLyBhbmQgZG8gbm90IGFzc2lnbiB0aGUga2V5IGEgdmFsdWUuXG4gICAgICBpZiAocmVxdWlyZWQgfHwgaGFzRGVmYXVsdCB8fCB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhbHVlID0gY29udmVydGVyKHZhbHVlKVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBvcHRpb25zLmFsbG93ZWRWYWx1ZXMgJiZcbiAgICAgICAgICAhb3B0aW9ucy5hbGxvd2VkVmFsdWVzLmluY2x1ZGVzKHZhbHVlKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICBoZWFkZXI6ICdEaWN0aW9uYXJ5JyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGAke3ZhbHVlfSBpcyBub3QgYW4gYWNjZXB0ZWQgdHlwZS4gRXhwZWN0ZWQgb25lIG9mICR7b3B0aW9ucy5hbGxvd2VkVmFsdWVzLmpvaW4oJywgJyl9LmBcbiAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgZGljdFtrZXldID0gdmFsdWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGljdFxuICB9XG59XG5cbndlYmlkbC5udWxsYWJsZUNvbnZlcnRlciA9IGZ1bmN0aW9uIChjb252ZXJ0ZXIpIHtcbiAgcmV0dXJuIChWKSA9PiB7XG4gICAgaWYgKFYgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBWXG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnZlcnRlcihWKVxuICB9XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtRE9NU3RyaW5nXG53ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcgPSBmdW5jdGlvbiAoViwgb3B0cyA9IHt9KSB7XG4gIC8vIDEuIElmIFYgaXMgbnVsbCBhbmQgdGhlIGNvbnZlcnNpb24gaXMgdG8gYW4gSURMIHR5cGVcbiAgLy8gICAgYXNzb2NpYXRlZCB3aXRoIHRoZSBbTGVnYWN5TnVsbFRvRW1wdHlTdHJpbmddXG4gIC8vICAgIGV4dGVuZGVkIGF0dHJpYnV0ZSwgdGhlbiByZXR1cm4gdGhlIERPTVN0cmluZyB2YWx1ZVxuICAvLyAgICB0aGF0IHJlcHJlc2VudHMgdGhlIGVtcHR5IHN0cmluZy5cbiAgaWYgKFYgPT09IG51bGwgJiYgb3B0cy5sZWdhY3lOdWxsVG9FbXB0eVN0cmluZykge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgLy8gMi4gTGV0IHggYmUgPyBUb1N0cmluZyhWKS5cbiAgaWYgKHR5cGVvZiBWID09PSAnc3ltYm9sJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0NvdWxkIG5vdCBjb252ZXJ0IGFyZ3VtZW50IG9mIHR5cGUgc3ltYm9sIHRvIHN0cmluZy4nKVxuICB9XG5cbiAgLy8gMy4gUmV0dXJuIHRoZSBJREwgRE9NU3RyaW5nIHZhbHVlIHRoYXQgcmVwcmVzZW50cyB0aGVcbiAgLy8gICAgc2FtZSBzZXF1ZW5jZSBvZiBjb2RlIHVuaXRzIGFzIHRoZSBvbmUgdGhlXG4gIC8vICAgIEVDTUFTY3JpcHQgU3RyaW5nIHZhbHVlIHggcmVwcmVzZW50cy5cbiAgcmV0dXJuIFN0cmluZyhWKVxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLUJ5dGVTdHJpbmdcbndlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcgPSBmdW5jdGlvbiAoVikge1xuICAvLyAxLiBMZXQgeCBiZSA/IFRvU3RyaW5nKFYpLlxuICAvLyBOb3RlOiBET01TdHJpbmcgY29udmVydGVyIHBlcmZvcm0gPyBUb1N0cmluZyhWKVxuICBjb25zdCB4ID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKFYpXG5cbiAgLy8gMi4gSWYgdGhlIHZhbHVlIG9mIGFueSBlbGVtZW50IG9mIHggaXMgZ3JlYXRlciB0aGFuXG4gIC8vICAgIDI1NSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHgubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgaWYgKHguY2hhckNvZGVBdChpbmRleCkgPiAyNTUpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICdDYW5ub3QgY29udmVydCBhcmd1bWVudCB0byBhIEJ5dGVTdHJpbmcgYmVjYXVzZSB0aGUgY2hhcmFjdGVyIGF0ICcgK1xuICAgICAgICBgaW5kZXggJHtpbmRleH0gaGFzIGEgdmFsdWUgb2YgJHt4LmNoYXJDb2RlQXQoaW5kZXgpfSB3aGljaCBpcyBncmVhdGVyIHRoYW4gMjU1LmBcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICAvLyAzLiBSZXR1cm4gYW4gSURMIEJ5dGVTdHJpbmcgdmFsdWUgd2hvc2UgbGVuZ3RoIGlzIHRoZVxuICAvLyAgICBsZW5ndGggb2YgeCwgYW5kIHdoZXJlIHRoZSB2YWx1ZSBvZiBlYWNoIGVsZW1lbnQgaXNcbiAgLy8gICAgdGhlIHZhbHVlIG9mIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnQgb2YgeC5cbiAgcmV0dXJuIHhcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy1VU1ZTdHJpbmdcbndlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyA9IHRvVVNWU3RyaW5nXG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtYm9vbGVhblxud2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbiA9IGZ1bmN0aW9uIChWKSB7XG4gIC8vIDEuIExldCB4IGJlIHRoZSByZXN1bHQgb2YgY29tcHV0aW5nIFRvQm9vbGVhbihWKS5cbiAgY29uc3QgeCA9IEJvb2xlYW4oVilcblxuICAvLyAyLiBSZXR1cm4gdGhlIElETCBib29sZWFuIHZhbHVlIHRoYXQgaXMgdGhlIG9uZSB0aGF0IHJlcHJlc2VudHNcbiAgLy8gICAgdGhlIHNhbWUgdHJ1dGggdmFsdWUgYXMgdGhlIEVDTUFTY3JpcHQgQm9vbGVhbiB2YWx1ZSB4LlxuICByZXR1cm4geFxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLWFueVxud2ViaWRsLmNvbnZlcnRlcnMuYW55ID0gZnVuY3Rpb24gKFYpIHtcbiAgcmV0dXJuIFZcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy1sb25nLWxvbmdcbndlYmlkbC5jb252ZXJ0ZXJzWydsb25nIGxvbmcnXSA9IGZ1bmN0aW9uIChWKSB7XG4gIC8vIDEuIExldCB4IGJlID8gQ29udmVydFRvSW50KFYsIDY0LCBcInNpZ25lZFwiKS5cbiAgY29uc3QgeCA9IHdlYmlkbC51dGlsLkNvbnZlcnRUb0ludChWLCA2NCwgJ3NpZ25lZCcpXG5cbiAgLy8gMi4gUmV0dXJuIHRoZSBJREwgbG9uZyBsb25nIHZhbHVlIHRoYXQgcmVwcmVzZW50c1xuICAvLyAgICB0aGUgc2FtZSBudW1lcmljIHZhbHVlIGFzIHguXG4gIHJldHVybiB4XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtdW5zaWduZWQtbG9uZy1sb25nXG53ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgbG9uZyBsb25nJ10gPSBmdW5jdGlvbiAoVikge1xuICAvLyAxLiBMZXQgeCBiZSA/IENvbnZlcnRUb0ludChWLCA2NCwgXCJ1bnNpZ25lZFwiKS5cbiAgY29uc3QgeCA9IHdlYmlkbC51dGlsLkNvbnZlcnRUb0ludChWLCA2NCwgJ3Vuc2lnbmVkJylcblxuICAvLyAyLiBSZXR1cm4gdGhlIElETCB1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWUgdGhhdFxuICAvLyAgICByZXByZXNlbnRzIHRoZSBzYW1lIG51bWVyaWMgdmFsdWUgYXMgeC5cbiAgcmV0dXJuIHhcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy11bnNpZ25lZC1sb25nXG53ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgbG9uZyddID0gZnVuY3Rpb24gKFYpIHtcbiAgLy8gMS4gTGV0IHggYmUgPyBDb252ZXJ0VG9JbnQoViwgMzIsIFwidW5zaWduZWRcIikuXG4gIGNvbnN0IHggPSB3ZWJpZGwudXRpbC5Db252ZXJ0VG9JbnQoViwgMzIsICd1bnNpZ25lZCcpXG5cbiAgLy8gMi4gUmV0dXJuIHRoZSBJREwgdW5zaWduZWQgbG9uZyB2YWx1ZSB0aGF0XG4gIC8vICAgIHJlcHJlc2VudHMgdGhlIHNhbWUgbnVtZXJpYyB2YWx1ZSBhcyB4LlxuICByZXR1cm4geFxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLXVuc2lnbmVkLXNob3J0XG53ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgc2hvcnQnXSA9IGZ1bmN0aW9uIChWLCBvcHRzKSB7XG4gIC8vIDEuIExldCB4IGJlID8gQ29udmVydFRvSW50KFYsIDE2LCBcInVuc2lnbmVkXCIpLlxuICBjb25zdCB4ID0gd2ViaWRsLnV0aWwuQ29udmVydFRvSW50KFYsIDE2LCAndW5zaWduZWQnLCBvcHRzKVxuXG4gIC8vIDIuIFJldHVybiB0aGUgSURMIHVuc2lnbmVkIHNob3J0IHZhbHVlIHRoYXQgcmVwcmVzZW50c1xuICAvLyAgICB0aGUgc2FtZSBudW1lcmljIHZhbHVlIGFzIHguXG4gIHJldHVybiB4XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jaWRsLUFycmF5QnVmZmVyXG53ZWJpZGwuY29udmVydGVycy5BcnJheUJ1ZmZlciA9IGZ1bmN0aW9uIChWLCBvcHRzID0ge30pIHtcbiAgLy8gMS4gSWYgVHlwZShWKSBpcyBub3QgT2JqZWN0LCBvciBWIGRvZXMgbm90IGhhdmUgYW5cbiAgLy8gICAgW1tBcnJheUJ1ZmZlckRhdGFdXSBpbnRlcm5hbCBzbG90LCB0aGVuIHRocm93IGFcbiAgLy8gICAgVHlwZUVycm9yLlxuICAvLyBzZWU6IGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvcGVydGllcy1vZi10aGUtYXJyYXlidWZmZXItaW5zdGFuY2VzXG4gIC8vIHNlZTogaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9wZXJ0aWVzLW9mLXRoZS1zaGFyZWRhcnJheWJ1ZmZlci1pbnN0YW5jZXNcbiAgaWYgKFxuICAgIHdlYmlkbC51dGlsLlR5cGUoVikgIT09ICdPYmplY3QnIHx8XG4gICAgIXR5cGVzLmlzQW55QXJyYXlCdWZmZXIoVilcbiAgKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5jb252ZXJzaW9uRmFpbGVkKHtcbiAgICAgIHByZWZpeDogYCR7Vn1gLFxuICAgICAgYXJndW1lbnQ6IGAke1Z9YCxcbiAgICAgIHR5cGVzOiBbJ0FycmF5QnVmZmVyJ11cbiAgICB9KVxuICB9XG5cbiAgLy8gMi4gSWYgdGhlIGNvbnZlcnNpb24gaXMgbm90IHRvIGFuIElETCB0eXBlIGFzc29jaWF0ZWRcbiAgLy8gICAgd2l0aCB0aGUgW0FsbG93U2hhcmVkXSBleHRlbmRlZCBhdHRyaWJ1dGUsIGFuZFxuICAvLyAgICBJc1NoYXJlZEFycmF5QnVmZmVyKFYpIGlzIHRydWUsIHRoZW4gdGhyb3cgYVxuICAvLyAgICBUeXBlRXJyb3IuXG4gIGlmIChvcHRzLmFsbG93U2hhcmVkID09PSBmYWxzZSAmJiB0eXBlcy5pc1NoYXJlZEFycmF5QnVmZmVyKFYpKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgaGVhZGVyOiAnQXJyYXlCdWZmZXInLFxuICAgICAgbWVzc2FnZTogJ1NoYXJlZEFycmF5QnVmZmVyIGlzIG5vdCBhbGxvd2VkLidcbiAgICB9KVxuICB9XG5cbiAgLy8gMy4gSWYgdGhlIGNvbnZlcnNpb24gaXMgbm90IHRvIGFuIElETCB0eXBlIGFzc29jaWF0ZWRcbiAgLy8gICAgd2l0aCB0aGUgW0FsbG93UmVzaXphYmxlXSBleHRlbmRlZCBhdHRyaWJ1dGUsIGFuZFxuICAvLyAgICBJc1Jlc2l6YWJsZUFycmF5QnVmZmVyKFYpIGlzIHRydWUsIHRoZW4gdGhyb3cgYVxuICAvLyAgICBUeXBlRXJyb3IuXG4gIC8vIE5vdGU6IHJlc2l6YWJsZSBBcnJheUJ1ZmZlcnMgYXJlIGN1cnJlbnRseSBhIHByb3Bvc2FsLlxuXG4gIC8vIDQuIFJldHVybiB0aGUgSURMIEFycmF5QnVmZmVyIHZhbHVlIHRoYXQgaXMgYVxuICAvLyAgICByZWZlcmVuY2UgdG8gdGhlIHNhbWUgb2JqZWN0IGFzIFYuXG4gIHJldHVybiBWXG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLlR5cGVkQXJyYXkgPSBmdW5jdGlvbiAoViwgVCwgb3B0cyA9IHt9KSB7XG4gIC8vIDEuIExldCBUIGJlIHRoZSBJREwgdHlwZSBWIGlzIGJlaW5nIGNvbnZlcnRlZCB0by5cblxuICAvLyAyLiBJZiBUeXBlKFYpIGlzIG5vdCBPYmplY3QsIG9yIFYgZG9lcyBub3QgaGF2ZSBhXG4gIC8vICAgIFtbVHlwZWRBcnJheU5hbWVdXSBpbnRlcm5hbCBzbG90IHdpdGggYSB2YWx1ZVxuICAvLyAgICBlcXVhbCB0byBU4oCZcyBuYW1lLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICBpZiAoXG4gICAgd2ViaWRsLnV0aWwuVHlwZShWKSAhPT0gJ09iamVjdCcgfHxcbiAgICAhdHlwZXMuaXNUeXBlZEFycmF5KFYpIHx8XG4gICAgVi5jb25zdHJ1Y3Rvci5uYW1lICE9PSBULm5hbWVcbiAgKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5jb252ZXJzaW9uRmFpbGVkKHtcbiAgICAgIHByZWZpeDogYCR7VC5uYW1lfWAsXG4gICAgICBhcmd1bWVudDogYCR7Vn1gLFxuICAgICAgdHlwZXM6IFtULm5hbWVdXG4gICAgfSlcbiAgfVxuXG4gIC8vIDMuIElmIHRoZSBjb252ZXJzaW9uIGlzIG5vdCB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtBbGxvd1NoYXJlZF0gZXh0ZW5kZWQgYXR0cmlidXRlLCBhbmRcbiAgLy8gICAgSXNTaGFyZWRBcnJheUJ1ZmZlcihWLltbVmlld2VkQXJyYXlCdWZmZXJdXSkgaXNcbiAgLy8gICAgdHJ1ZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKG9wdHMuYWxsb3dTaGFyZWQgPT09IGZhbHNlICYmIHR5cGVzLmlzU2hhcmVkQXJyYXlCdWZmZXIoVi5idWZmZXIpKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgaGVhZGVyOiAnQXJyYXlCdWZmZXInLFxuICAgICAgbWVzc2FnZTogJ1NoYXJlZEFycmF5QnVmZmVyIGlzIG5vdCBhbGxvd2VkLidcbiAgICB9KVxuICB9XG5cbiAgLy8gNC4gSWYgdGhlIGNvbnZlcnNpb24gaXMgbm90IHRvIGFuIElETCB0eXBlIGFzc29jaWF0ZWRcbiAgLy8gICAgd2l0aCB0aGUgW0FsbG93UmVzaXphYmxlXSBleHRlbmRlZCBhdHRyaWJ1dGUsIGFuZFxuICAvLyAgICBJc1Jlc2l6YWJsZUFycmF5QnVmZmVyKFYuW1tWaWV3ZWRBcnJheUJ1ZmZlcl1dKSBpc1xuICAvLyAgICB0cnVlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAvLyBOb3RlOiByZXNpemFibGUgYXJyYXkgYnVmZmVycyBhcmUgY3VycmVudGx5IGEgcHJvcG9zYWxcblxuICAvLyA1LiBSZXR1cm4gdGhlIElETCB2YWx1ZSBvZiB0eXBlIFQgdGhhdCBpcyBhIHJlZmVyZW5jZVxuICAvLyAgICB0byB0aGUgc2FtZSBvYmplY3QgYXMgVi5cbiAgcmV0dXJuIFZcbn1cblxud2ViaWRsLmNvbnZlcnRlcnMuRGF0YVZpZXcgPSBmdW5jdGlvbiAoViwgb3B0cyA9IHt9KSB7XG4gIC8vIDEuIElmIFR5cGUoVikgaXMgbm90IE9iamVjdCwgb3IgViBkb2VzIG5vdCBoYXZlIGFcbiAgLy8gICAgW1tEYXRhVmlld11dIGludGVybmFsIHNsb3QsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIGlmICh3ZWJpZGwudXRpbC5UeXBlKFYpICE9PSAnT2JqZWN0JyB8fCAhdHlwZXMuaXNEYXRhVmlldyhWKSkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgIGhlYWRlcjogJ0RhdGFWaWV3JyxcbiAgICAgIG1lc3NhZ2U6ICdPYmplY3QgaXMgbm90IGEgRGF0YVZpZXcuJ1xuICAgIH0pXG4gIH1cblxuICAvLyAyLiBJZiB0aGUgY29udmVyc2lvbiBpcyBub3QgdG8gYW4gSURMIHR5cGUgYXNzb2NpYXRlZFxuICAvLyAgICB3aXRoIHRoZSBbQWxsb3dTaGFyZWRdIGV4dGVuZGVkIGF0dHJpYnV0ZSwgYW5kXG4gIC8vICAgIElzU2hhcmVkQXJyYXlCdWZmZXIoVi5bW1ZpZXdlZEFycmF5QnVmZmVyXV0pIGlzIHRydWUsXG4gIC8vICAgIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIGlmIChvcHRzLmFsbG93U2hhcmVkID09PSBmYWxzZSAmJiB0eXBlcy5pc1NoYXJlZEFycmF5QnVmZmVyKFYuYnVmZmVyKSkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgIGhlYWRlcjogJ0FycmF5QnVmZmVyJyxcbiAgICAgIG1lc3NhZ2U6ICdTaGFyZWRBcnJheUJ1ZmZlciBpcyBub3QgYWxsb3dlZC4nXG4gICAgfSlcbiAgfVxuXG4gIC8vIDMuIElmIHRoZSBjb252ZXJzaW9uIGlzIG5vdCB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtBbGxvd1Jlc2l6YWJsZV0gZXh0ZW5kZWQgYXR0cmlidXRlLCBhbmRcbiAgLy8gICAgSXNSZXNpemFibGVBcnJheUJ1ZmZlcihWLltbVmlld2VkQXJyYXlCdWZmZXJdXSkgaXNcbiAgLy8gICAgdHJ1ZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgLy8gTm90ZTogcmVzaXphYmxlIEFycmF5QnVmZmVycyBhcmUgY3VycmVudGx5IGEgcHJvcG9zYWxcblxuICAvLyA0LiBSZXR1cm4gdGhlIElETCBEYXRhVmlldyB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlXG4gIC8vICAgIHRvIHRoZSBzYW1lIG9iamVjdCBhcyBWLlxuICByZXR1cm4gVlxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI0J1ZmZlclNvdXJjZVxud2ViaWRsLmNvbnZlcnRlcnMuQnVmZmVyU291cmNlID0gZnVuY3Rpb24gKFYsIG9wdHMgPSB7fSkge1xuICBpZiAodHlwZXMuaXNBbnlBcnJheUJ1ZmZlcihWKSkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5BcnJheUJ1ZmZlcihWLCBvcHRzKVxuICB9XG5cbiAgaWYgKHR5cGVzLmlzVHlwZWRBcnJheShWKSkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5UeXBlZEFycmF5KFYsIFYuY29uc3RydWN0b3IpXG4gIH1cblxuICBpZiAodHlwZXMuaXNEYXRhVmlldyhWKSkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5EYXRhVmlldyhWLCBvcHRzKVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihgQ291bGQgbm90IGNvbnZlcnQgJHtWfSB0byBhIEJ1ZmZlclNvdXJjZS5gKVxufVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8Qnl0ZVN0cmluZz4nXSA9IHdlYmlkbC5zZXF1ZW5jZUNvbnZlcnRlcihcbiAgd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZ1xuKVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8c2VxdWVuY2U8Qnl0ZVN0cmluZz4+J10gPSB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxCeXRlU3RyaW5nPiddXG4pXG5cbndlYmlkbC5jb252ZXJ0ZXJzWydyZWNvcmQ8Qnl0ZVN0cmluZywgQnl0ZVN0cmluZz4nXSA9IHdlYmlkbC5yZWNvcmRDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcsXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmdcbilcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHdlYmlkbFxufVxuIiwKICAgICJjb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBhdG9iIH0gPSByZXF1aXJlKCdidWZmZXInKVxuY29uc3QgeyBpc29tb3JwaGljRGVjb2RlIH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuXG5jb25zdCBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKClcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jaHR0cC10b2tlbi1jb2RlLXBvaW50XG4gKi9cbmNvbnN0IEhUVFBfVE9LRU5fQ09ERVBPSU5UUyA9IC9eWyEjJCUmJyorLS5eX3x+QS1aYS16MC05XSskL1xuY29uc3QgSFRUUF9XSElURVNQQUNFX1JFR0VYID0gLyhcXHUwMDBBfFxcdTAwMER8XFx1MDAwOXxcXHUwMDIwKS8gLy8gZXNsaW50LWRpc2FibGUtbGluZVxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jaHR0cC1xdW90ZWQtc3RyaW5nLXRva2VuLWNvZGUtcG9pbnRcbiAqL1xuY29uc3QgSFRUUF9RVU9URURfU1RSSU5HX1RPS0VOUyA9IC9bXFx1MDAwOXxcXHUwMDIwLVxcdTAwN0V8XFx1MDA4MC1cXHUwMEZGXS8gLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZGF0YS11cmwtcHJvY2Vzc29yXG4vKiogQHBhcmFtIHtVUkx9IGRhdGFVUkwgKi9cbmZ1bmN0aW9uIGRhdGFVUkxQcm9jZXNzb3IgKGRhdGFVUkwpIHtcbiAgLy8gMS4gQXNzZXJ0OiBkYXRhVVJM4oCZcyBzY2hlbWUgaXMgXCJkYXRhXCIuXG4gIGFzc2VydChkYXRhVVJMLnByb3RvY29sID09PSAnZGF0YTonKVxuXG4gIC8vIDIuIExldCBpbnB1dCBiZSB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgdGhlIFVSTFxuICAvLyBzZXJpYWxpemVyIG9uIGRhdGFVUkwgd2l0aCBleGNsdWRlIGZyYWdtZW50XG4gIC8vIHNldCB0byB0cnVlLlxuICBsZXQgaW5wdXQgPSBVUkxTZXJpYWxpemVyKGRhdGFVUkwsIHRydWUpXG5cbiAgLy8gMy4gUmVtb3ZlIHRoZSBsZWFkaW5nIFwiZGF0YTpcIiBzdHJpbmcgZnJvbSBpbnB1dC5cbiAgaW5wdXQgPSBpbnB1dC5zbGljZSg1KVxuXG4gIC8vIDQuIExldCBwb3NpdGlvbiBwb2ludCBhdCB0aGUgc3RhcnQgb2YgaW5wdXQuXG4gIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogMCB9XG5cbiAgLy8gNS4gTGV0IG1pbWVUeXBlIGJlIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhXG4gIC8vIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzIHRoYXQgYXJlIG5vdCBlcXVhbFxuICAvLyB0byBVKzAwMkMgKCwpLCBnaXZlbiBwb3NpdGlvbi5cbiAgbGV0IG1pbWVUeXBlID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoXG4gICAgJywnLFxuICAgIGlucHV0LFxuICAgIHBvc2l0aW9uXG4gIClcblxuICAvLyA2LiBTdHJpcCBsZWFkaW5nIGFuZCB0cmFpbGluZyBBU0NJSSB3aGl0ZXNwYWNlXG4gIC8vIGZyb20gbWltZVR5cGUuXG4gIC8vIFVuZGljaSBpbXBsZW1lbnRhdGlvbiBub3RlOiB3ZSBuZWVkIHRvIHN0b3JlIHRoZVxuICAvLyBsZW5ndGggYmVjYXVzZSBpZiB0aGUgbWltZXR5cGUgaGFzIHNwYWNlcyByZW1vdmVkLFxuICAvLyB0aGUgd3JvbmcgYW1vdW50IHdpbGwgYmUgc2xpY2VkIGZyb20gdGhlIGlucHV0IGluXG4gIC8vIHN0ZXAgIzlcbiAgY29uc3QgbWltZVR5cGVMZW5ndGggPSBtaW1lVHlwZS5sZW5ndGhcbiAgbWltZVR5cGUgPSByZW1vdmVBU0NJSVdoaXRlc3BhY2UobWltZVR5cGUsIHRydWUsIHRydWUpXG5cbiAgLy8gNy4gSWYgcG9zaXRpb24gaXMgcGFzdCB0aGUgZW5kIG9mIGlucHV0LCB0aGVuXG4gIC8vIHJldHVybiBmYWlsdXJlXG4gIGlmIChwb3NpdGlvbi5wb3NpdGlvbiA+PSBpbnB1dC5sZW5ndGgpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICAvLyA4LiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuXG4gIHBvc2l0aW9uLnBvc2l0aW9uKytcblxuICAvLyA5LiBMZXQgZW5jb2RlZEJvZHkgYmUgdGhlIHJlbWFpbmRlciBvZiBpbnB1dC5cbiAgY29uc3QgZW5jb2RlZEJvZHkgPSBpbnB1dC5zbGljZShtaW1lVHlwZUxlbmd0aCArIDEpXG5cbiAgLy8gMTAuIExldCBib2R5IGJlIHRoZSBwZXJjZW50LWRlY29kaW5nIG9mIGVuY29kZWRCb2R5LlxuICBsZXQgYm9keSA9IHN0cmluZ1BlcmNlbnREZWNvZGUoZW5jb2RlZEJvZHkpXG5cbiAgLy8gMTEuIElmIG1pbWVUeXBlIGVuZHMgd2l0aCBVKzAwM0IgKDspLCBmb2xsb3dlZCBieVxuICAvLyB6ZXJvIG9yIG1vcmUgVSswMDIwIFNQQUNFLCBmb2xsb3dlZCBieSBhbiBBU0NJSVxuICAvLyBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvciBcImJhc2U2NFwiLCB0aGVuOlxuICBpZiAoLzsoXFx1MDAyMCl7MCx9YmFzZTY0JC9pLnRlc3QobWltZVR5cGUpKSB7XG4gICAgLy8gMS4gTGV0IHN0cmluZ0JvZHkgYmUgdGhlIGlzb21vcnBoaWMgZGVjb2RlIG9mIGJvZHkuXG4gICAgY29uc3Qgc3RyaW5nQm9keSA9IGlzb21vcnBoaWNEZWNvZGUoYm9keSlcblxuICAgIC8vIDIuIFNldCBib2R5IHRvIHRoZSBmb3JnaXZpbmctYmFzZTY0IGRlY29kZSBvZlxuICAgIC8vIHN0cmluZ0JvZHkuXG4gICAgYm9keSA9IGZvcmdpdmluZ0Jhc2U2NChzdHJpbmdCb2R5KVxuXG4gICAgLy8gMy4gSWYgYm9keSBpcyBmYWlsdXJlLCB0aGVuIHJldHVybiBmYWlsdXJlLlxuICAgIGlmIChib2R5ID09PSAnZmFpbHVyZScpIHtcbiAgICAgIHJldHVybiAnZmFpbHVyZSdcbiAgICB9XG5cbiAgICAvLyA0LiBSZW1vdmUgdGhlIGxhc3QgNiBjb2RlIHBvaW50cyBmcm9tIG1pbWVUeXBlLlxuICAgIG1pbWVUeXBlID0gbWltZVR5cGUuc2xpY2UoMCwgLTYpXG5cbiAgICAvLyA1LiBSZW1vdmUgdHJhaWxpbmcgVSswMDIwIFNQQUNFIGNvZGUgcG9pbnRzIGZyb20gbWltZVR5cGUsXG4gICAgLy8gaWYgYW55LlxuICAgIG1pbWVUeXBlID0gbWltZVR5cGUucmVwbGFjZSgvKFxcdTAwMjApKyQvLCAnJylcblxuICAgIC8vIDYuIFJlbW92ZSB0aGUgbGFzdCBVKzAwM0IgKDspIGNvZGUgcG9pbnQgZnJvbSBtaW1lVHlwZS5cbiAgICBtaW1lVHlwZSA9IG1pbWVUeXBlLnNsaWNlKDAsIC0xKVxuICB9XG5cbiAgLy8gMTIuIElmIG1pbWVUeXBlIHN0YXJ0cyB3aXRoIFUrMDAzQiAoOyksIHRoZW4gcHJlcGVuZFxuICAvLyBcInRleHQvcGxhaW5cIiB0byBtaW1lVHlwZS5cbiAgaWYgKG1pbWVUeXBlLnN0YXJ0c1dpdGgoJzsnKSkge1xuICAgIG1pbWVUeXBlID0gJ3RleHQvcGxhaW4nICsgbWltZVR5cGVcbiAgfVxuXG4gIC8vIDEzLiBMZXQgbWltZVR5cGVSZWNvcmQgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nXG4gIC8vIG1pbWVUeXBlLlxuICBsZXQgbWltZVR5cGVSZWNvcmQgPSBwYXJzZU1JTUVUeXBlKG1pbWVUeXBlKVxuXG4gIC8vIDE0LiBJZiBtaW1lVHlwZVJlY29yZCBpcyBmYWlsdXJlLCB0aGVuIHNldFxuICAvLyBtaW1lVHlwZVJlY29yZCB0byB0ZXh0L3BsYWluO2NoYXJzZXQ9VVMtQVNDSUkuXG4gIGlmIChtaW1lVHlwZVJlY29yZCA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgbWltZVR5cGVSZWNvcmQgPSBwYXJzZU1JTUVUeXBlKCd0ZXh0L3BsYWluO2NoYXJzZXQ9VVMtQVNDSUknKVxuICB9XG5cbiAgLy8gMTUuIFJldHVybiBhIG5ldyBkYXRhOiBVUkwgc3RydWN0IHdob3NlIE1JTUVcbiAgLy8gdHlwZSBpcyBtaW1lVHlwZVJlY29yZCBhbmQgYm9keSBpcyBib2R5LlxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZGF0YS11cmwtc3RydWN0XG4gIHJldHVybiB7IG1pbWVUeXBlOiBtaW1lVHlwZVJlY29yZCwgYm9keSB9XG59XG5cbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC11cmwtc2VyaWFsaXplclxuLyoqXG4gKiBAcGFyYW0ge1VSTH0gdXJsXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGV4Y2x1ZGVGcmFnbWVudFxuICovXG5mdW5jdGlvbiBVUkxTZXJpYWxpemVyICh1cmwsIGV4Y2x1ZGVGcmFnbWVudCA9IGZhbHNlKSB7XG4gIGlmICghZXhjbHVkZUZyYWdtZW50KSB7XG4gICAgcmV0dXJuIHVybC5ocmVmXG4gIH1cblxuICBjb25zdCBocmVmID0gdXJsLmhyZWZcbiAgY29uc3QgaGFzaExlbmd0aCA9IHVybC5oYXNoLmxlbmd0aFxuXG4gIHJldHVybiBoYXNoTGVuZ3RoID09PSAwID8gaHJlZiA6IGhyZWYuc3Vic3RyaW5nKDAsIGhyZWYubGVuZ3RoIC0gaGFzaExlbmd0aClcbn1cblxuLy8gaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2NvbGxlY3QtYS1zZXF1ZW5jZS1vZi1jb2RlLXBvaW50c1xuLyoqXG4gKiBAcGFyYW0geyhjaGFyOiBzdHJpbmcpID0+IGJvb2xlYW59IGNvbmRpdGlvblxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0XG4gKiBAcGFyYW0ge3sgcG9zaXRpb246IG51bWJlciB9fSBwb3NpdGlvblxuICovXG5mdW5jdGlvbiBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzIChjb25kaXRpb24sIGlucHV0LCBwb3NpdGlvbikge1xuICAvLyAxLiBMZXQgcmVzdWx0IGJlIHRoZSBlbXB0eSBzdHJpbmcuXG4gIGxldCByZXN1bHQgPSAnJ1xuXG4gIC8vIDIuIFdoaWxlIHBvc2l0aW9uIGRvZXNu4oCZdCBwb2ludCBwYXN0IHRoZSBlbmQgb2YgaW5wdXQgYW5kIHRoZVxuICAvLyBjb2RlIHBvaW50IGF0IHBvc2l0aW9uIHdpdGhpbiBpbnB1dCBtZWV0cyB0aGUgY29uZGl0aW9uIGNvbmRpdGlvbjpcbiAgd2hpbGUgKHBvc2l0aW9uLnBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoICYmIGNvbmRpdGlvbihpbnB1dFtwb3NpdGlvbi5wb3NpdGlvbl0pKSB7XG4gICAgLy8gMS4gQXBwZW5kIHRoYXQgY29kZSBwb2ludCB0byB0aGUgZW5kIG9mIHJlc3VsdC5cbiAgICByZXN1bHQgKz0gaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dXG5cbiAgICAvLyAyLiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuXG4gICAgcG9zaXRpb24ucG9zaXRpb24rK1xuICB9XG5cbiAgLy8gMy4gUmV0dXJuIHJlc3VsdC5cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG4vKipcbiAqIEEgZmFzdGVyIGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMgdGhhdCBvbmx5IHdvcmtzIHdoZW4gY29tcGFyaW5nIGEgc2luZ2xlIGNoYXJhY3Rlci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjaGFyXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRcbiAqIEBwYXJhbSB7eyBwb3NpdGlvbjogbnVtYmVyIH19IHBvc2l0aW9uXG4gKi9cbmZ1bmN0aW9uIGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0IChjaGFyLCBpbnB1dCwgcG9zaXRpb24pIHtcbiAgY29uc3QgaWR4ID0gaW5wdXQuaW5kZXhPZihjaGFyLCBwb3NpdGlvbi5wb3NpdGlvbilcbiAgY29uc3Qgc3RhcnQgPSBwb3NpdGlvbi5wb3NpdGlvblxuXG4gIGlmIChpZHggPT09IC0xKSB7XG4gICAgcG9zaXRpb24ucG9zaXRpb24gPSBpbnB1dC5sZW5ndGhcbiAgICByZXR1cm4gaW5wdXQuc2xpY2Uoc3RhcnQpXG4gIH1cblxuICBwb3NpdGlvbi5wb3NpdGlvbiA9IGlkeFxuICByZXR1cm4gaW5wdXQuc2xpY2Uoc3RhcnQsIHBvc2l0aW9uLnBvc2l0aW9uKVxufVxuXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3N0cmluZy1wZXJjZW50LWRlY29kZVxuLyoqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dCAqL1xuZnVuY3Rpb24gc3RyaW5nUGVyY2VudERlY29kZSAoaW5wdXQpIHtcbiAgLy8gMS4gTGV0IGJ5dGVzIGJlIHRoZSBVVEYtOCBlbmNvZGluZyBvZiBpbnB1dC5cbiAgY29uc3QgYnl0ZXMgPSBlbmNvZGVyLmVuY29kZShpbnB1dClcblxuICAvLyAyLiBSZXR1cm4gdGhlIHBlcmNlbnQtZGVjb2Rpbmcgb2YgYnl0ZXMuXG4gIHJldHVybiBwZXJjZW50RGVjb2RlKGJ5dGVzKVxufVxuXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3BlcmNlbnQtZGVjb2RlXG4vKiogQHBhcmFtIHtVaW50OEFycmF5fSBpbnB1dCAqL1xuZnVuY3Rpb24gcGVyY2VudERlY29kZSAoaW5wdXQpIHtcbiAgLy8gMS4gTGV0IG91dHB1dCBiZSBhbiBlbXB0eSBieXRlIHNlcXVlbmNlLlxuICAvKiogQHR5cGUge251bWJlcltdfSAqL1xuICBjb25zdCBvdXRwdXQgPSBbXVxuXG4gIC8vIDIuIEZvciBlYWNoIGJ5dGUgYnl0ZSBpbiBpbnB1dDpcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGJ5dGUgPSBpbnB1dFtpXVxuXG4gICAgLy8gMS4gSWYgYnl0ZSBpcyBub3QgMHgyNSAoJSksIHRoZW4gYXBwZW5kIGJ5dGUgdG8gb3V0cHV0LlxuICAgIGlmIChieXRlICE9PSAweDI1KSB7XG4gICAgICBvdXRwdXQucHVzaChieXRlKVxuXG4gICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiBieXRlIGlzIDB4MjUgKCUpIGFuZCB0aGUgbmV4dCB0d28gYnl0ZXNcbiAgICAvLyBhZnRlciBieXRlIGluIGlucHV0IGFyZSBub3QgaW4gdGhlIHJhbmdlc1xuICAgIC8vIDB4MzAgKDApIHRvIDB4MzkgKDkpLCAweDQxIChBKSB0byAweDQ2IChGKSxcbiAgICAvLyBhbmQgMHg2MSAoYSkgdG8gMHg2NiAoZiksIGFsbCBpbmNsdXNpdmUsIGFwcGVuZCBieXRlXG4gICAgLy8gdG8gb3V0cHV0LlxuICAgIH0gZWxzZSBpZiAoXG4gICAgICBieXRlID09PSAweDI1ICYmXG4gICAgICAhL15bMC05QS1GYS1mXXsyfSQvaS50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoaW5wdXRbaSArIDFdLCBpbnB1dFtpICsgMl0pKVxuICAgICkge1xuICAgICAgb3V0cHV0LnB1c2goMHgyNSlcblxuICAgIC8vIDMuIE90aGVyd2lzZTpcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gMS4gTGV0IGJ5dGVQb2ludCBiZSB0aGUgdHdvIGJ5dGVzIGFmdGVyIGJ5dGUgaW4gaW5wdXQsXG4gICAgICAvLyBkZWNvZGVkLCBhbmQgdGhlbiBpbnRlcnByZXRlZCBhcyBoZXhhZGVjaW1hbCBudW1iZXIuXG4gICAgICBjb25zdCBuZXh0VHdvQnl0ZXMgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGlucHV0W2kgKyAxXSwgaW5wdXRbaSArIDJdKVxuICAgICAgY29uc3QgYnl0ZVBvaW50ID0gTnVtYmVyLnBhcnNlSW50KG5leHRUd29CeXRlcywgMTYpXG5cbiAgICAgIC8vIDIuIEFwcGVuZCBhIGJ5dGUgd2hvc2UgdmFsdWUgaXMgYnl0ZVBvaW50IHRvIG91dHB1dC5cbiAgICAgIG91dHB1dC5wdXNoKGJ5dGVQb2ludClcblxuICAgICAgLy8gMy4gU2tpcCB0aGUgbmV4dCB0d28gYnl0ZXMgaW4gaW5wdXQuXG4gICAgICBpICs9IDJcbiAgICB9XG4gIH1cblxuICAvLyAzLiBSZXR1cm4gb3V0cHV0LlxuICByZXR1cm4gVWludDhBcnJheS5mcm9tKG91dHB1dClcbn1cblxuLy8gaHR0cHM6Ly9taW1lc25pZmYuc3BlYy53aGF0d2cub3JnLyNwYXJzZS1hLW1pbWUtdHlwZVxuLyoqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dCAqL1xuZnVuY3Rpb24gcGFyc2VNSU1FVHlwZSAoaW5wdXQpIHtcbiAgLy8gMS4gUmVtb3ZlIGFueSBsZWFkaW5nIGFuZCB0cmFpbGluZyBIVFRQIHdoaXRlc3BhY2VcbiAgLy8gZnJvbSBpbnB1dC5cbiAgaW5wdXQgPSByZW1vdmVIVFRQV2hpdGVzcGFjZShpbnB1dCwgdHJ1ZSwgdHJ1ZSlcblxuICAvLyAyLiBMZXQgcG9zaXRpb24gYmUgYSBwb3NpdGlvbiB2YXJpYWJsZSBmb3IgaW5wdXQsXG4gIC8vIGluaXRpYWxseSBwb2ludGluZyBhdCB0aGUgc3RhcnQgb2YgaW5wdXQuXG4gIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogMCB9XG5cbiAgLy8gMy4gTGV0IHR5cGUgYmUgdGhlIHJlc3VsdCBvZiBjb2xsZWN0aW5nIGEgc2VxdWVuY2VcbiAgLy8gb2YgY29kZSBwb2ludHMgdGhhdCBhcmUgbm90IFUrMDAyRiAoLykgZnJvbVxuICAvLyBpbnB1dCwgZ2l2ZW4gcG9zaXRpb24uXG4gIGNvbnN0IHR5cGUgPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdChcbiAgICAnLycsXG4gICAgaW5wdXQsXG4gICAgcG9zaXRpb25cbiAgKVxuXG4gIC8vIDQuIElmIHR5cGUgaXMgdGhlIGVtcHR5IHN0cmluZyBvciBkb2VzIG5vdCBzb2xlbHlcbiAgLy8gY29udGFpbiBIVFRQIHRva2VuIGNvZGUgcG9pbnRzLCB0aGVuIHJldHVybiBmYWlsdXJlLlxuICAvLyBodHRwczovL21pbWVzbmlmZi5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtdG9rZW4tY29kZS1wb2ludFxuICBpZiAodHlwZS5sZW5ndGggPT09IDAgfHwgIUhUVFBfVE9LRU5fQ09ERVBPSU5UUy50ZXN0KHR5cGUpKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgLy8gNS4gSWYgcG9zaXRpb24gaXMgcGFzdCB0aGUgZW5kIG9mIGlucHV0LCB0aGVuIHJldHVyblxuICAvLyBmYWlsdXJlXG4gIGlmIChwb3NpdGlvbi5wb3NpdGlvbiA+IGlucHV0Lmxlbmd0aCkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIC8vIDYuIEFkdmFuY2UgcG9zaXRpb24gYnkgMS4gKFRoaXMgc2tpcHMgcGFzdCBVKzAwMkYgKC8pLilcbiAgcG9zaXRpb24ucG9zaXRpb24rK1xuXG4gIC8vIDcuIExldCBzdWJ0eXBlIGJlIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhIHNlcXVlbmNlIG9mXG4gIC8vIGNvZGUgcG9pbnRzIHRoYXQgYXJlIG5vdCBVKzAwM0IgKDspIGZyb20gaW5wdXQsIGdpdmVuXG4gIC8vIHBvc2l0aW9uLlxuICBsZXQgc3VidHlwZSA9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0KFxuICAgICc7JyxcbiAgICBpbnB1dCxcbiAgICBwb3NpdGlvblxuICApXG5cbiAgLy8gOC4gUmVtb3ZlIGFueSB0cmFpbGluZyBIVFRQIHdoaXRlc3BhY2UgZnJvbSBzdWJ0eXBlLlxuICBzdWJ0eXBlID0gcmVtb3ZlSFRUUFdoaXRlc3BhY2Uoc3VidHlwZSwgZmFsc2UsIHRydWUpXG5cbiAgLy8gOS4gSWYgc3VidHlwZSBpcyB0aGUgZW1wdHkgc3RyaW5nIG9yIGRvZXMgbm90IHNvbGVseVxuICAvLyBjb250YWluIEhUVFAgdG9rZW4gY29kZSBwb2ludHMsIHRoZW4gcmV0dXJuIGZhaWx1cmUuXG4gIGlmIChzdWJ0eXBlLmxlbmd0aCA9PT0gMCB8fCAhSFRUUF9UT0tFTl9DT0RFUE9JTlRTLnRlc3Qoc3VidHlwZSkpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICBjb25zdCB0eXBlTG93ZXJjYXNlID0gdHlwZS50b0xvd2VyQ2FzZSgpXG4gIGNvbnN0IHN1YnR5cGVMb3dlcmNhc2UgPSBzdWJ0eXBlLnRvTG93ZXJDYXNlKClcblxuICAvLyAxMC4gTGV0IG1pbWVUeXBlIGJlIGEgbmV3IE1JTUUgdHlwZSByZWNvcmQgd2hvc2UgdHlwZVxuICAvLyBpcyB0eXBlLCBpbiBBU0NJSSBsb3dlcmNhc2UsIGFuZCBzdWJ0eXBlIGlzIHN1YnR5cGUsXG4gIC8vIGluIEFTQ0lJIGxvd2VyY2FzZS5cbiAgLy8gaHR0cHM6Ly9taW1lc25pZmYuc3BlYy53aGF0d2cub3JnLyNtaW1lLXR5cGVcbiAgY29uc3QgbWltZVR5cGUgPSB7XG4gICAgdHlwZTogdHlwZUxvd2VyY2FzZSxcbiAgICBzdWJ0eXBlOiBzdWJ0eXBlTG93ZXJjYXNlLFxuICAgIC8qKiBAdHlwZSB7TWFwPHN0cmluZywgc3RyaW5nPn0gKi9cbiAgICBwYXJhbWV0ZXJzOiBuZXcgTWFwKCksXG4gICAgLy8gaHR0cHM6Ly9taW1lc25pZmYuc3BlYy53aGF0d2cub3JnLyNtaW1lLXR5cGUtZXNzZW5jZVxuICAgIGVzc2VuY2U6IGAke3R5cGVMb3dlcmNhc2V9LyR7c3VidHlwZUxvd2VyY2FzZX1gXG4gIH1cblxuICAvLyAxMS4gV2hpbGUgcG9zaXRpb24gaXMgbm90IHBhc3QgdGhlIGVuZCBvZiBpbnB1dDpcbiAgd2hpbGUgKHBvc2l0aW9uLnBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgLy8gMS4gQWR2YW5jZSBwb3NpdGlvbiBieSAxLiAoVGhpcyBza2lwcyBwYXN0IFUrMDAzQiAoOykuKVxuICAgIHBvc2l0aW9uLnBvc2l0aW9uKytcblxuICAgIC8vIDIuIENvbGxlY3QgYSBzZXF1ZW5jZSBvZiBjb2RlIHBvaW50cyB0aGF0IGFyZSBIVFRQXG4gICAgLy8gd2hpdGVzcGFjZSBmcm9tIGlucHV0IGdpdmVuIHBvc2l0aW9uLlxuICAgIGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMoXG4gICAgICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC13aGl0ZXNwYWNlXG4gICAgICBjaGFyID0+IEhUVFBfV0hJVEVTUEFDRV9SRUdFWC50ZXN0KGNoYXIpLFxuICAgICAgaW5wdXQsXG4gICAgICBwb3NpdGlvblxuICAgIClcblxuICAgIC8vIDMuIExldCBwYXJhbWV0ZXJOYW1lIGJlIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhXG4gICAgLy8gc2VxdWVuY2Ugb2YgY29kZSBwb2ludHMgdGhhdCBhcmUgbm90IFUrMDAzQiAoOylcbiAgICAvLyBvciBVKzAwM0QgKD0pIGZyb20gaW5wdXQsIGdpdmVuIHBvc2l0aW9uLlxuICAgIGxldCBwYXJhbWV0ZXJOYW1lID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50cyhcbiAgICAgIChjaGFyKSA9PiBjaGFyICE9PSAnOycgJiYgY2hhciAhPT0gJz0nLFxuICAgICAgaW5wdXQsXG4gICAgICBwb3NpdGlvblxuICAgIClcblxuICAgIC8vIDQuIFNldCBwYXJhbWV0ZXJOYW1lIHRvIHBhcmFtZXRlck5hbWUsIGluIEFTQ0lJXG4gICAgLy8gbG93ZXJjYXNlLlxuICAgIHBhcmFtZXRlck5hbWUgPSBwYXJhbWV0ZXJOYW1lLnRvTG93ZXJDYXNlKClcblxuICAgIC8vIDUuIElmIHBvc2l0aW9uIGlzIG5vdCBwYXN0IHRoZSBlbmQgb2YgaW5wdXQsIHRoZW46XG4gICAgaWYgKHBvc2l0aW9uLnBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAvLyAxLiBJZiB0aGUgY29kZSBwb2ludCBhdCBwb3NpdGlvbiB3aXRoaW4gaW5wdXQgaXNcbiAgICAgIC8vIFUrMDAzQiAoOyksIHRoZW4gY29udGludWUuXG4gICAgICBpZiAoaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dID09PSAnOycpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gMi4gQWR2YW5jZSBwb3NpdGlvbiBieSAxLiAoVGhpcyBza2lwcyBwYXN0IFUrMDAzRCAoPSkuKVxuICAgICAgcG9zaXRpb24ucG9zaXRpb24rK1xuICAgIH1cblxuICAgIC8vIDYuIElmIHBvc2l0aW9uIGlzIHBhc3QgdGhlIGVuZCBvZiBpbnB1dCwgdGhlbiBicmVhay5cbiAgICBpZiAocG9zaXRpb24ucG9zaXRpb24gPiBpbnB1dC5sZW5ndGgpIHtcbiAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgLy8gNy4gTGV0IHBhcmFtZXRlclZhbHVlIGJlIG51bGwuXG4gICAgbGV0IHBhcmFtZXRlclZhbHVlID0gbnVsbFxuXG4gICAgLy8gOC4gSWYgdGhlIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluIGlucHV0IGlzXG4gICAgLy8gVSswMDIyIChcIiksIHRoZW46XG4gICAgaWYgKGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXSA9PT0gJ1wiJykge1xuICAgICAgLy8gMS4gU2V0IHBhcmFtZXRlclZhbHVlIHRvIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZ1xuICAgICAgLy8gYW4gSFRUUCBxdW90ZWQgc3RyaW5nIGZyb20gaW5wdXQsIGdpdmVuIHBvc2l0aW9uXG4gICAgICAvLyBhbmQgdGhlIGV4dHJhY3QtdmFsdWUgZmxhZy5cbiAgICAgIHBhcmFtZXRlclZhbHVlID0gY29sbGVjdEFuSFRUUFF1b3RlZFN0cmluZyhpbnB1dCwgcG9zaXRpb24sIHRydWUpXG5cbiAgICAgIC8vIDIuIENvbGxlY3QgYSBzZXF1ZW5jZSBvZiBjb2RlIHBvaW50cyB0aGF0IGFyZSBub3RcbiAgICAgIC8vIFUrMDAzQiAoOykgZnJvbSBpbnB1dCwgZ2l2ZW4gcG9zaXRpb24uXG4gICAgICBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdChcbiAgICAgICAgJzsnLFxuICAgICAgICBpbnB1dCxcbiAgICAgICAgcG9zaXRpb25cbiAgICAgIClcblxuICAgIC8vIDkuIE90aGVyd2lzZTpcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gMS4gU2V0IHBhcmFtZXRlclZhbHVlIHRvIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZ1xuICAgICAgLy8gYSBzZXF1ZW5jZSBvZiBjb2RlIHBvaW50cyB0aGF0IGFyZSBub3QgVSswMDNCICg7KVxuICAgICAgLy8gZnJvbSBpbnB1dCwgZ2l2ZW4gcG9zaXRpb24uXG4gICAgICBwYXJhbWV0ZXJWYWx1ZSA9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0KFxuICAgICAgICAnOycsXG4gICAgICAgIGlucHV0LFxuICAgICAgICBwb3NpdGlvblxuICAgICAgKVxuXG4gICAgICAvLyAyLiBSZW1vdmUgYW55IHRyYWlsaW5nIEhUVFAgd2hpdGVzcGFjZSBmcm9tIHBhcmFtZXRlclZhbHVlLlxuICAgICAgcGFyYW1ldGVyVmFsdWUgPSByZW1vdmVIVFRQV2hpdGVzcGFjZShwYXJhbWV0ZXJWYWx1ZSwgZmFsc2UsIHRydWUpXG5cbiAgICAgIC8vIDMuIElmIHBhcmFtZXRlclZhbHVlIGlzIHRoZSBlbXB0eSBzdHJpbmcsIHRoZW4gY29udGludWUuXG4gICAgICBpZiAocGFyYW1ldGVyVmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gMTAuIElmIGFsbCBvZiB0aGUgZm9sbG93aW5nIGFyZSB0cnVlXG4gICAgLy8gLSBwYXJhbWV0ZXJOYW1lIGlzIG5vdCB0aGUgZW1wdHkgc3RyaW5nXG4gICAgLy8gLSBwYXJhbWV0ZXJOYW1lIHNvbGVseSBjb250YWlucyBIVFRQIHRva2VuIGNvZGUgcG9pbnRzXG4gICAgLy8gLSBwYXJhbWV0ZXJWYWx1ZSBzb2xlbHkgY29udGFpbnMgSFRUUCBxdW90ZWQtc3RyaW5nIHRva2VuIGNvZGUgcG9pbnRzXG4gICAgLy8gLSBtaW1lVHlwZeKAmXMgcGFyYW1ldGVyc1twYXJhbWV0ZXJOYW1lXSBkb2VzIG5vdCBleGlzdFxuICAgIC8vIHRoZW4gc2V0IG1pbWVUeXBl4oCZcyBwYXJhbWV0ZXJzW3BhcmFtZXRlck5hbWVdIHRvIHBhcmFtZXRlclZhbHVlLlxuICAgIGlmIChcbiAgICAgIHBhcmFtZXRlck5hbWUubGVuZ3RoICE9PSAwICYmXG4gICAgICBIVFRQX1RPS0VOX0NPREVQT0lOVFMudGVzdChwYXJhbWV0ZXJOYW1lKSAmJlxuICAgICAgKHBhcmFtZXRlclZhbHVlLmxlbmd0aCA9PT0gMCB8fCBIVFRQX1FVT1RFRF9TVFJJTkdfVE9LRU5TLnRlc3QocGFyYW1ldGVyVmFsdWUpKSAmJlxuICAgICAgIW1pbWVUeXBlLnBhcmFtZXRlcnMuaGFzKHBhcmFtZXRlck5hbWUpXG4gICAgKSB7XG4gICAgICBtaW1lVHlwZS5wYXJhbWV0ZXJzLnNldChwYXJhbWV0ZXJOYW1lLCBwYXJhbWV0ZXJWYWx1ZSlcbiAgICB9XG4gIH1cblxuICAvLyAxMi4gUmV0dXJuIG1pbWVUeXBlLlxuICByZXR1cm4gbWltZVR5cGVcbn1cblxuLy8gaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2ZvcmdpdmluZy1iYXNlNjQtZGVjb2RlXG4vKiogQHBhcmFtIHtzdHJpbmd9IGRhdGEgKi9cbmZ1bmN0aW9uIGZvcmdpdmluZ0Jhc2U2NCAoZGF0YSkge1xuICAvLyAxLiBSZW1vdmUgYWxsIEFTQ0lJIHdoaXRlc3BhY2UgZnJvbSBkYXRhLlxuICBkYXRhID0gZGF0YS5yZXBsYWNlKC9bXFx1MDAwOVxcdTAwMEFcXHUwMDBDXFx1MDAwRFxcdTAwMjBdL2csICcnKSAgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gIC8vIDIuIElmIGRhdGHigJlzIGNvZGUgcG9pbnQgbGVuZ3RoIGRpdmlkZXMgYnkgNCBsZWF2aW5nXG4gIC8vIG5vIHJlbWFpbmRlciwgdGhlbjpcbiAgaWYgKGRhdGEubGVuZ3RoICUgNCA9PT0gMCkge1xuICAgIC8vIDEuIElmIGRhdGEgZW5kcyB3aXRoIG9uZSBvciB0d28gVSswMDNEICg9KSBjb2RlIHBvaW50cyxcbiAgICAvLyB0aGVuIHJlbW92ZSB0aGVtIGZyb20gZGF0YS5cbiAgICBkYXRhID0gZGF0YS5yZXBsYWNlKC89Pz0kLywgJycpXG4gIH1cblxuICAvLyAzLiBJZiBkYXRh4oCZcyBjb2RlIHBvaW50IGxlbmd0aCBkaXZpZGVzIGJ5IDQgbGVhdmluZ1xuICAvLyBhIHJlbWFpbmRlciBvZiAxLCB0aGVuIHJldHVybiBmYWlsdXJlLlxuICBpZiAoZGF0YS5sZW5ndGggJSA0ID09PSAxKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgLy8gNC4gSWYgZGF0YSBjb250YWlucyBhIGNvZGUgcG9pbnQgdGhhdCBpcyBub3Qgb25lIG9mXG4gIC8vICBVKzAwMkIgKCspXG4gIC8vICBVKzAwMkYgKC8pXG4gIC8vICBBU0NJSSBhbHBoYW51bWVyaWNcbiAgLy8gdGhlbiByZXR1cm4gZmFpbHVyZS5cbiAgaWYgKC9bXisvMC05QS1aYS16XS8udGVzdChkYXRhKSkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIGNvbnN0IGJpbmFyeSA9IGF0b2IoZGF0YSlcbiAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheShiaW5hcnkubGVuZ3RoKVxuXG4gIGZvciAobGV0IGJ5dGUgPSAwOyBieXRlIDwgYmluYXJ5Lmxlbmd0aDsgYnl0ZSsrKSB7XG4gICAgYnl0ZXNbYnl0ZV0gPSBiaW5hcnkuY2hhckNvZGVBdChieXRlKVxuICB9XG5cbiAgcmV0dXJuIGJ5dGVzXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb2xsZWN0LWFuLWh0dHAtcXVvdGVkLXN0cmluZ1xuLy8gdGVzdHM6IGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNleGFtcGxlLWh0dHAtcXVvdGVkLXN0cmluZ1xuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRcbiAqIEBwYXJhbSB7eyBwb3NpdGlvbjogbnVtYmVyIH19IHBvc2l0aW9uXG4gKiBAcGFyYW0ge2Jvb2xlYW4/fSBleHRyYWN0VmFsdWVcbiAqL1xuZnVuY3Rpb24gY29sbGVjdEFuSFRUUFF1b3RlZFN0cmluZyAoaW5wdXQsIHBvc2l0aW9uLCBleHRyYWN0VmFsdWUpIHtcbiAgLy8gMS4gTGV0IHBvc2l0aW9uU3RhcnQgYmUgcG9zaXRpb24uXG4gIGNvbnN0IHBvc2l0aW9uU3RhcnQgPSBwb3NpdGlvbi5wb3NpdGlvblxuXG4gIC8vIDIuIExldCB2YWx1ZSBiZSB0aGUgZW1wdHkgc3RyaW5nLlxuICBsZXQgdmFsdWUgPSAnJ1xuXG4gIC8vIDMuIEFzc2VydDogdGhlIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluIGlucHV0XG4gIC8vIGlzIFUrMDAyMiAoXCIpLlxuICBhc3NlcnQoaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dID09PSAnXCInKVxuXG4gIC8vIDQuIEFkdmFuY2UgcG9zaXRpb24gYnkgMS5cbiAgcG9zaXRpb24ucG9zaXRpb24rK1xuXG4gIC8vIDUuIFdoaWxlIHRydWU6XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgLy8gMS4gQXBwZW5kIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzXG4gICAgLy8gdGhhdCBhcmUgbm90IFUrMDAyMiAoXCIpIG9yIFUrMDA1QyAoXFwpIGZyb20gaW5wdXQsIGdpdmVuXG4gICAgLy8gcG9zaXRpb24sIHRvIHZhbHVlLlxuICAgIHZhbHVlICs9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMoXG4gICAgICAoY2hhcikgPT4gY2hhciAhPT0gJ1wiJyAmJiBjaGFyICE9PSAnXFxcXCcsXG4gICAgICBpbnB1dCxcbiAgICAgIHBvc2l0aW9uXG4gICAgKVxuXG4gICAgLy8gMi4gSWYgcG9zaXRpb24gaXMgcGFzdCB0aGUgZW5kIG9mIGlucHV0LCB0aGVuIGJyZWFrLlxuICAgIGlmIChwb3NpdGlvbi5wb3NpdGlvbiA+PSBpbnB1dC5sZW5ndGgpIHtcbiAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgLy8gMy4gTGV0IHF1b3RlT3JCYWNrc2xhc2ggYmUgdGhlIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluXG4gICAgLy8gaW5wdXQuXG4gICAgY29uc3QgcXVvdGVPckJhY2tzbGFzaCA9IGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXVxuXG4gICAgLy8gNC4gQWR2YW5jZSBwb3NpdGlvbiBieSAxLlxuICAgIHBvc2l0aW9uLnBvc2l0aW9uKytcblxuICAgIC8vIDUuIElmIHF1b3RlT3JCYWNrc2xhc2ggaXMgVSswMDVDIChcXCksIHRoZW46XG4gICAgaWYgKHF1b3RlT3JCYWNrc2xhc2ggPT09ICdcXFxcJykge1xuICAgICAgLy8gMS4gSWYgcG9zaXRpb24gaXMgcGFzdCB0aGUgZW5kIG9mIGlucHV0LCB0aGVuIGFwcGVuZFxuICAgICAgLy8gVSswMDVDIChcXCkgdG8gdmFsdWUgYW5kIGJyZWFrLlxuICAgICAgaWYgKHBvc2l0aW9uLnBvc2l0aW9uID49IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICB2YWx1ZSArPSAnXFxcXCdcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgLy8gMi4gQXBwZW5kIHRoZSBjb2RlIHBvaW50IGF0IHBvc2l0aW9uIHdpdGhpbiBpbnB1dCB0byB2YWx1ZS5cbiAgICAgIHZhbHVlICs9IGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXVxuXG4gICAgICAvLyAzLiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuXG4gICAgICBwb3NpdGlvbi5wb3NpdGlvbisrXG5cbiAgICAvLyA2LiBPdGhlcndpc2U6XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIDEuIEFzc2VydDogcXVvdGVPckJhY2tzbGFzaCBpcyBVKzAwMjIgKFwiKS5cbiAgICAgIGFzc2VydChxdW90ZU9yQmFja3NsYXNoID09PSAnXCInKVxuXG4gICAgICAvLyAyLiBCcmVhay5cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgLy8gNi4gSWYgdGhlIGV4dHJhY3QtdmFsdWUgZmxhZyBpcyBzZXQsIHRoZW4gcmV0dXJuIHZhbHVlLlxuICBpZiAoZXh0cmFjdFZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cblxuICAvLyA3LiBSZXR1cm4gdGhlIGNvZGUgcG9pbnRzIGZyb20gcG9zaXRpb25TdGFydCB0byBwb3NpdGlvbixcbiAgLy8gaW5jbHVzaXZlLCB3aXRoaW4gaW5wdXQuXG4gIHJldHVybiBpbnB1dC5zbGljZShwb3NpdGlvblN0YXJ0LCBwb3NpdGlvbi5wb3NpdGlvbilcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jc2VyaWFsaXplLWEtbWltZS10eXBlXG4gKi9cbmZ1bmN0aW9uIHNlcmlhbGl6ZUFNaW1lVHlwZSAobWltZVR5cGUpIHtcbiAgYXNzZXJ0KG1pbWVUeXBlICE9PSAnZmFpbHVyZScpXG4gIGNvbnN0IHsgcGFyYW1ldGVycywgZXNzZW5jZSB9ID0gbWltZVR5cGVcblxuICAvLyAxLiBMZXQgc2VyaWFsaXphdGlvbiBiZSB0aGUgY29uY2F0ZW5hdGlvbiBvZiBtaW1lVHlwZeKAmXNcbiAgLy8gICAgdHlwZSwgVSswMDJGICgvKSwgYW5kIG1pbWVUeXBl4oCZcyBzdWJ0eXBlLlxuICBsZXQgc2VyaWFsaXphdGlvbiA9IGVzc2VuY2VcblxuICAvLyAyLiBGb3IgZWFjaCBuYW1lIOKGkiB2YWx1ZSBvZiBtaW1lVHlwZeKAmXMgcGFyYW1ldGVyczpcbiAgZm9yIChsZXQgW25hbWUsIHZhbHVlXSBvZiBwYXJhbWV0ZXJzLmVudHJpZXMoKSkge1xuICAgIC8vIDEuIEFwcGVuZCBVKzAwM0IgKDspIHRvIHNlcmlhbGl6YXRpb24uXG4gICAgc2VyaWFsaXphdGlvbiArPSAnOydcblxuICAgIC8vIDIuIEFwcGVuZCBuYW1lIHRvIHNlcmlhbGl6YXRpb24uXG4gICAgc2VyaWFsaXphdGlvbiArPSBuYW1lXG5cbiAgICAvLyAzLiBBcHBlbmQgVSswMDNEICg9KSB0byBzZXJpYWxpemF0aW9uLlxuICAgIHNlcmlhbGl6YXRpb24gKz0gJz0nXG5cbiAgICAvLyA0LiBJZiB2YWx1ZSBkb2VzIG5vdCBzb2xlbHkgY29udGFpbiBIVFRQIHRva2VuIGNvZGVcbiAgICAvLyAgICBwb2ludHMgb3IgdmFsdWUgaXMgdGhlIGVtcHR5IHN0cmluZywgdGhlbjpcbiAgICBpZiAoIUhUVFBfVE9LRU5fQ09ERVBPSU5UUy50ZXN0KHZhbHVlKSkge1xuICAgICAgLy8gMS4gUHJlY2VkZSBlYWNoIG9jY3VyZW5jZSBvZiBVKzAwMjIgKFwiKSBvclxuICAgICAgLy8gICAgVSswMDVDIChcXCkgaW4gdmFsdWUgd2l0aCBVKzAwNUMgKFxcKS5cbiAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvKFxcXFx8XCIpL2csICdcXFxcJDEnKVxuXG4gICAgICAvLyAyLiBQcmVwZW5kIFUrMDAyMiAoXCIpIHRvIHZhbHVlLlxuICAgICAgdmFsdWUgPSAnXCInICsgdmFsdWVcblxuICAgICAgLy8gMy4gQXBwZW5kIFUrMDAyMiAoXCIpIHRvIHZhbHVlLlxuICAgICAgdmFsdWUgKz0gJ1wiJ1xuICAgIH1cblxuICAgIC8vIDUuIEFwcGVuZCB2YWx1ZSB0byBzZXJpYWxpemF0aW9uLlxuICAgIHNlcmlhbGl6YXRpb24gKz0gdmFsdWVcbiAgfVxuXG4gIC8vIDMuIFJldHVybiBzZXJpYWxpemF0aW9uLlxuICByZXR1cm4gc2VyaWFsaXphdGlvblxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtd2hpdGVzcGFjZVxuICogQHBhcmFtIHtzdHJpbmd9IGNoYXJcbiAqL1xuZnVuY3Rpb24gaXNIVFRQV2hpdGVTcGFjZSAoY2hhcikge1xuICByZXR1cm4gY2hhciA9PT0gJ1xccicgfHwgY2hhciA9PT0gJ1xcbicgfHwgY2hhciA9PT0gJ1xcdCcgfHwgY2hhciA9PT0gJyAnXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC13aGl0ZXNwYWNlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUhUVFBXaGl0ZXNwYWNlIChzdHIsIGxlYWRpbmcgPSB0cnVlLCB0cmFpbGluZyA9IHRydWUpIHtcbiAgbGV0IGxlYWQgPSAwXG4gIGxldCB0cmFpbCA9IHN0ci5sZW5ndGggLSAxXG5cbiAgaWYgKGxlYWRpbmcpIHtcbiAgICBmb3IgKDsgbGVhZCA8IHN0ci5sZW5ndGggJiYgaXNIVFRQV2hpdGVTcGFjZShzdHJbbGVhZF0pOyBsZWFkKyspO1xuICB9XG5cbiAgaWYgKHRyYWlsaW5nKSB7XG4gICAgZm9yICg7IHRyYWlsID4gMCAmJiBpc0hUVFBXaGl0ZVNwYWNlKHN0clt0cmFpbF0pOyB0cmFpbC0tKTtcbiAgfVxuXG4gIHJldHVybiBzdHIuc2xpY2UobGVhZCwgdHJhaWwgKyAxKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2FzY2lpLXdoaXRlc3BhY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBjaGFyXG4gKi9cbmZ1bmN0aW9uIGlzQVNDSUlXaGl0ZXNwYWNlIChjaGFyKSB7XG4gIHJldHVybiBjaGFyID09PSAnXFxyJyB8fCBjaGFyID09PSAnXFxuJyB8fCBjaGFyID09PSAnXFx0JyB8fCBjaGFyID09PSAnXFxmJyB8fCBjaGFyID09PSAnICdcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNzdHJpcC1sZWFkaW5nLWFuZC10cmFpbGluZy1hc2NpaS13aGl0ZXNwYWNlXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUFTQ0lJV2hpdGVzcGFjZSAoc3RyLCBsZWFkaW5nID0gdHJ1ZSwgdHJhaWxpbmcgPSB0cnVlKSB7XG4gIGxldCBsZWFkID0gMFxuICBsZXQgdHJhaWwgPSBzdHIubGVuZ3RoIC0gMVxuXG4gIGlmIChsZWFkaW5nKSB7XG4gICAgZm9yICg7IGxlYWQgPCBzdHIubGVuZ3RoICYmIGlzQVNDSUlXaGl0ZXNwYWNlKHN0cltsZWFkXSk7IGxlYWQrKyk7XG4gIH1cblxuICBpZiAodHJhaWxpbmcpIHtcbiAgICBmb3IgKDsgdHJhaWwgPiAwICYmIGlzQVNDSUlXaGl0ZXNwYWNlKHN0clt0cmFpbF0pOyB0cmFpbC0tKTtcbiAgfVxuXG4gIHJldHVybiBzdHIuc2xpY2UobGVhZCwgdHJhaWwgKyAxKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZGF0YVVSTFByb2Nlc3NvcixcbiAgVVJMU2VyaWFsaXplcixcbiAgY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50cyxcbiAgY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QsXG4gIHN0cmluZ1BlcmNlbnREZWNvZGUsXG4gIHBhcnNlTUlNRVR5cGUsXG4gIGNvbGxlY3RBbkhUVFBRdW90ZWRTdHJpbmcsXG4gIHNlcmlhbGl6ZUFNaW1lVHlwZVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBCbG9iLCBGaWxlOiBOYXRpdmVGaWxlIH0gPSByZXF1aXJlKCdidWZmZXInKVxuY29uc3QgeyB0eXBlcyB9ID0gcmVxdWlyZSgndXRpbCcpXG5jb25zdCB7IGtTdGF0ZSB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgaXNCbG9iTGlrZSB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuL3dlYmlkbCcpXG5jb25zdCB7IHBhcnNlTUlNRVR5cGUsIHNlcmlhbGl6ZUFNaW1lVHlwZSB9ID0gcmVxdWlyZSgnLi9kYXRhVVJMJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKVxuXG5jbGFzcyBGaWxlIGV4dGVuZHMgQmxvYiB7XG4gIGNvbnN0cnVjdG9yIChmaWxlQml0cywgZmlsZU5hbWUsIG9wdGlvbnMgPSB7fSkge1xuICAgIC8vIFRoZSBGaWxlIGNvbnN0cnVjdG9yIGlzIGludm9rZWQgd2l0aCB0d28gb3IgdGhyZWUgcGFyYW1ldGVycywgZGVwZW5kaW5nXG4gICAgLy8gb24gd2hldGhlciB0aGUgb3B0aW9uYWwgZGljdGlvbmFyeSBwYXJhbWV0ZXIgaXMgdXNlZC4gV2hlbiB0aGUgRmlsZSgpXG4gICAgLy8gY29uc3RydWN0b3IgaXMgaW52b2tlZCwgdXNlciBhZ2VudHMgbXVzdCBydW4gdGhlIGZvbGxvd2luZyBzdGVwczpcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnRmlsZSBjb25zdHJ1Y3RvcicgfSlcblxuICAgIGZpbGVCaXRzID0gd2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPEJsb2JQYXJ0PiddKGZpbGVCaXRzKVxuICAgIGZpbGVOYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKGZpbGVOYW1lKVxuICAgIG9wdGlvbnMgPSB3ZWJpZGwuY29udmVydGVycy5GaWxlUHJvcGVydHlCYWcob3B0aW9ucylcblxuICAgIC8vIDEuIExldCBieXRlcyBiZSB0aGUgcmVzdWx0IG9mIHByb2Nlc3NpbmcgYmxvYiBwYXJ0cyBnaXZlbiBmaWxlQml0cyBhbmRcbiAgICAvLyBvcHRpb25zLlxuICAgIC8vIE5vdGU6IEJsb2IgaGFuZGxlcyB0aGlzIGZvciB1c1xuXG4gICAgLy8gMi4gTGV0IG4gYmUgdGhlIGZpbGVOYW1lIGFyZ3VtZW50IHRvIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICBjb25zdCBuID0gZmlsZU5hbWVcblxuICAgIC8vIDMuIFByb2Nlc3MgRmlsZVByb3BlcnR5QmFnIGRpY3Rpb25hcnkgYXJndW1lbnQgYnkgcnVubmluZyB0aGUgZm9sbG93aW5nXG4gICAgLy8gc3Vic3RlcHM6XG5cbiAgICAvLyAgICAxLiBJZiB0aGUgdHlwZSBtZW1iZXIgaXMgcHJvdmlkZWQgYW5kIGlzIG5vdCB0aGUgZW1wdHkgc3RyaW5nLCBsZXQgdFxuICAgIC8vICAgIGJlIHNldCB0byB0aGUgdHlwZSBkaWN0aW9uYXJ5IG1lbWJlci4gSWYgdCBjb250YWlucyBhbnkgY2hhcmFjdGVyc1xuICAgIC8vICAgIG91dHNpZGUgdGhlIHJhbmdlIFUrMDAyMCB0byBVKzAwN0UsIHRoZW4gc2V0IHQgdG8gdGhlIGVtcHR5IHN0cmluZ1xuICAgIC8vICAgIGFuZCByZXR1cm4gZnJvbSB0aGVzZSBzdWJzdGVwcy5cbiAgICAvLyAgICAyLiBDb252ZXJ0IGV2ZXJ5IGNoYXJhY3RlciBpbiB0IHRvIEFTQ0lJIGxvd2VyY2FzZS5cbiAgICBsZXQgdCA9IG9wdGlvbnMudHlwZVxuICAgIGxldCBkXG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbGFiZWxzXG4gICAgc3Vic3RlcDoge1xuICAgICAgaWYgKHQpIHtcbiAgICAgICAgdCA9IHBhcnNlTUlNRVR5cGUodClcblxuICAgICAgICBpZiAodCA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgICAgdCA9ICcnXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxhYmVsc1xuICAgICAgICAgIGJyZWFrIHN1YnN0ZXBcbiAgICAgICAgfVxuXG4gICAgICAgIHQgPSBzZXJpYWxpemVBTWltZVR5cGUodCkudG9Mb3dlckNhc2UoKVxuICAgICAgfVxuXG4gICAgICAvLyAgICAzLiBJZiB0aGUgbGFzdE1vZGlmaWVkIG1lbWJlciBpcyBwcm92aWRlZCwgbGV0IGQgYmUgc2V0IHRvIHRoZVxuICAgICAgLy8gICAgbGFzdE1vZGlmaWVkIGRpY3Rpb25hcnkgbWVtYmVyLiBJZiBpdCBpcyBub3QgcHJvdmlkZWQsIHNldCBkIHRvIHRoZVxuICAgICAgLy8gICAgY3VycmVudCBkYXRlIGFuZCB0aW1lIHJlcHJlc2VudGVkIGFzIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHNpbmNlXG4gICAgICAvLyAgICB0aGUgVW5peCBFcG9jaCAod2hpY2ggaXMgdGhlIGVxdWl2YWxlbnQgb2YgRGF0ZS5ub3coKSBbRUNNQS0yNjJdKS5cbiAgICAgIGQgPSBvcHRpb25zLmxhc3RNb2RpZmllZFxuICAgIH1cblxuICAgIC8vIDQuIFJldHVybiBhIG5ldyBGaWxlIG9iamVjdCBGIHN1Y2ggdGhhdDpcbiAgICAvLyBGIHJlZmVycyB0byB0aGUgYnl0ZXMgYnl0ZSBzZXF1ZW5jZS5cbiAgICAvLyBGLnNpemUgaXMgc2V0IHRvIHRoZSBudW1iZXIgb2YgdG90YWwgYnl0ZXMgaW4gYnl0ZXMuXG4gICAgLy8gRi5uYW1lIGlzIHNldCB0byBuLlxuICAgIC8vIEYudHlwZSBpcyBzZXQgdG8gdC5cbiAgICAvLyBGLmxhc3RNb2RpZmllZCBpcyBzZXQgdG8gZC5cblxuICAgIHN1cGVyKHByb2Nlc3NCbG9iUGFydHMoZmlsZUJpdHMsIG9wdGlvbnMpLCB7IHR5cGU6IHQgfSlcbiAgICB0aGlzW2tTdGF0ZV0gPSB7XG4gICAgICBuYW1lOiBuLFxuICAgICAgbGFzdE1vZGlmaWVkOiBkLFxuICAgICAgdHlwZTogdFxuICAgIH1cbiAgfVxuXG4gIGdldCBuYW1lICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5uYW1lXG4gIH1cblxuICBnZXQgbGFzdE1vZGlmaWVkICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5sYXN0TW9kaWZpZWRcbiAgfVxuXG4gIGdldCB0eXBlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS50eXBlXG4gIH1cbn1cblxuY2xhc3MgRmlsZUxpa2Uge1xuICBjb25zdHJ1Y3RvciAoYmxvYkxpa2UsIGZpbGVOYW1lLCBvcHRpb25zID0ge30pIHtcbiAgICAvLyBUT0RPOiBhcmd1bWVudCBpZGwgdHlwZSBjaGVja1xuXG4gICAgLy8gVGhlIEZpbGUgY29uc3RydWN0b3IgaXMgaW52b2tlZCB3aXRoIHR3byBvciB0aHJlZSBwYXJhbWV0ZXJzLCBkZXBlbmRpbmdcbiAgICAvLyBvbiB3aGV0aGVyIHRoZSBvcHRpb25hbCBkaWN0aW9uYXJ5IHBhcmFtZXRlciBpcyB1c2VkLiBXaGVuIHRoZSBGaWxlKClcbiAgICAvLyBjb25zdHJ1Y3RvciBpcyBpbnZva2VkLCB1c2VyIGFnZW50cyBtdXN0IHJ1biB0aGUgZm9sbG93aW5nIHN0ZXBzOlxuXG4gICAgLy8gMS4gTGV0IGJ5dGVzIGJlIHRoZSByZXN1bHQgb2YgcHJvY2Vzc2luZyBibG9iIHBhcnRzIGdpdmVuIGZpbGVCaXRzIGFuZFxuICAgIC8vIG9wdGlvbnMuXG5cbiAgICAvLyAyLiBMZXQgbiBiZSB0aGUgZmlsZU5hbWUgYXJndW1lbnQgdG8gdGhlIGNvbnN0cnVjdG9yLlxuICAgIGNvbnN0IG4gPSBmaWxlTmFtZVxuXG4gICAgLy8gMy4gUHJvY2VzcyBGaWxlUHJvcGVydHlCYWcgZGljdGlvbmFyeSBhcmd1bWVudCBieSBydW5uaW5nIHRoZSBmb2xsb3dpbmdcbiAgICAvLyBzdWJzdGVwczpcblxuICAgIC8vICAgIDEuIElmIHRoZSB0eXBlIG1lbWJlciBpcyBwcm92aWRlZCBhbmQgaXMgbm90IHRoZSBlbXB0eSBzdHJpbmcsIGxldCB0XG4gICAgLy8gICAgYmUgc2V0IHRvIHRoZSB0eXBlIGRpY3Rpb25hcnkgbWVtYmVyLiBJZiB0IGNvbnRhaW5zIGFueSBjaGFyYWN0ZXJzXG4gICAgLy8gICAgb3V0c2lkZSB0aGUgcmFuZ2UgVSswMDIwIHRvIFUrMDA3RSwgdGhlbiBzZXQgdCB0byB0aGUgZW1wdHkgc3RyaW5nXG4gICAgLy8gICAgYW5kIHJldHVybiBmcm9tIHRoZXNlIHN1YnN0ZXBzLlxuICAgIC8vICAgIFRPRE9cbiAgICBjb25zdCB0ID0gb3B0aW9ucy50eXBlXG5cbiAgICAvLyAgICAyLiBDb252ZXJ0IGV2ZXJ5IGNoYXJhY3RlciBpbiB0IHRvIEFTQ0lJIGxvd2VyY2FzZS5cbiAgICAvLyAgICBUT0RPXG5cbiAgICAvLyAgICAzLiBJZiB0aGUgbGFzdE1vZGlmaWVkIG1lbWJlciBpcyBwcm92aWRlZCwgbGV0IGQgYmUgc2V0IHRvIHRoZVxuICAgIC8vICAgIGxhc3RNb2RpZmllZCBkaWN0aW9uYXJ5IG1lbWJlci4gSWYgaXQgaXMgbm90IHByb3ZpZGVkLCBzZXQgZCB0byB0aGVcbiAgICAvLyAgICBjdXJyZW50IGRhdGUgYW5kIHRpbWUgcmVwcmVzZW50ZWQgYXMgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgc2luY2VcbiAgICAvLyAgICB0aGUgVW5peCBFcG9jaCAod2hpY2ggaXMgdGhlIGVxdWl2YWxlbnQgb2YgRGF0ZS5ub3coKSBbRUNNQS0yNjJdKS5cbiAgICBjb25zdCBkID0gb3B0aW9ucy5sYXN0TW9kaWZpZWQgPz8gRGF0ZS5ub3coKVxuXG4gICAgLy8gNC4gUmV0dXJuIGEgbmV3IEZpbGUgb2JqZWN0IEYgc3VjaCB0aGF0OlxuICAgIC8vIEYgcmVmZXJzIHRvIHRoZSBieXRlcyBieXRlIHNlcXVlbmNlLlxuICAgIC8vIEYuc2l6ZSBpcyBzZXQgdG8gdGhlIG51bWJlciBvZiB0b3RhbCBieXRlcyBpbiBieXRlcy5cbiAgICAvLyBGLm5hbWUgaXMgc2V0IHRvIG4uXG4gICAgLy8gRi50eXBlIGlzIHNldCB0byB0LlxuICAgIC8vIEYubGFzdE1vZGlmaWVkIGlzIHNldCB0byBkLlxuXG4gICAgdGhpc1trU3RhdGVdID0ge1xuICAgICAgYmxvYkxpa2UsXG4gICAgICBuYW1lOiBuLFxuICAgICAgdHlwZTogdCxcbiAgICAgIGxhc3RNb2RpZmllZDogZFxuICAgIH1cbiAgfVxuXG4gIHN0cmVhbSAoLi4uYXJncykge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVMaWtlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5ibG9iTGlrZS5zdHJlYW0oLi4uYXJncylcbiAgfVxuXG4gIGFycmF5QnVmZmVyICguLi5hcmdzKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZUxpa2UpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmJsb2JMaWtlLmFycmF5QnVmZmVyKC4uLmFyZ3MpXG4gIH1cblxuICBzbGljZSAoLi4uYXJncykge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVMaWtlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5ibG9iTGlrZS5zbGljZSguLi5hcmdzKVxuICB9XG5cbiAgdGV4dCAoLi4uYXJncykge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVMaWtlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5ibG9iTGlrZS50ZXh0KC4uLmFyZ3MpXG4gIH1cblxuICBnZXQgc2l6ZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZUxpa2UpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmJsb2JMaWtlLnNpemVcbiAgfVxuXG4gIGdldCB0eXBlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlTGlrZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uYmxvYkxpa2UudHlwZVxuICB9XG5cbiAgZ2V0IG5hbWUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVMaWtlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5uYW1lXG4gIH1cblxuICBnZXQgbGFzdE1vZGlmaWVkICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlTGlrZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ubGFzdE1vZGlmaWVkXG4gIH1cblxuICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10gKCkge1xuICAgIHJldHVybiAnRmlsZSdcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhGaWxlLnByb3RvdHlwZSwge1xuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnRmlsZScsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0sXG4gIG5hbWU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGxhc3RNb2RpZmllZDoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxud2ViaWRsLmNvbnZlcnRlcnMuQmxvYiA9IHdlYmlkbC5pbnRlcmZhY2VDb252ZXJ0ZXIoQmxvYilcblxud2ViaWRsLmNvbnZlcnRlcnMuQmxvYlBhcnQgPSBmdW5jdGlvbiAoViwgb3B0cykge1xuICBpZiAod2ViaWRsLnV0aWwuVHlwZShWKSA9PT0gJ09iamVjdCcpIHtcbiAgICBpZiAoaXNCbG9iTGlrZShWKSkge1xuICAgICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkJsb2IoViwgeyBzdHJpY3Q6IGZhbHNlIH0pXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgQXJyYXlCdWZmZXIuaXNWaWV3KFYpIHx8XG4gICAgICB0eXBlcy5pc0FueUFycmF5QnVmZmVyKFYpXG4gICAgKSB7XG4gICAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuQnVmZmVyU291cmNlKFYsIG9wdHMpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhWLCBvcHRzKVxufVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8QmxvYlBhcnQ+J10gPSB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLkJsb2JQYXJ0XG4pXG5cbi8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9GaWxlQVBJLyNkZm4tRmlsZVByb3BlcnR5QmFnXG53ZWJpZGwuY29udmVydGVycy5GaWxlUHJvcGVydHlCYWcgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIHtcbiAgICBrZXk6ICdsYXN0TW9kaWZpZWQnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ2xvbmcgbG9uZyddLFxuICAgIGdldCBkZWZhdWx0VmFsdWUgKCkge1xuICAgICAgcmV0dXJuIERhdGUubm93KClcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBrZXk6ICd0eXBlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6ICcnXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdlbmRpbmdzJyxcbiAgICBjb252ZXJ0ZXI6ICh2YWx1ZSkgPT4ge1xuICAgICAgdmFsdWUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcodmFsdWUpXG4gICAgICB2YWx1ZSA9IHZhbHVlLnRvTG93ZXJDYXNlKClcblxuICAgICAgaWYgKHZhbHVlICE9PSAnbmF0aXZlJykge1xuICAgICAgICB2YWx1ZSA9ICd0cmFuc3BhcmVudCdcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgfSxcbiAgICBkZWZhdWx0VmFsdWU6ICd0cmFuc3BhcmVudCdcbiAgfVxuXSlcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9GaWxlQVBJLyNwcm9jZXNzLWJsb2ItcGFydHNcbiAqIEBwYXJhbSB7KE5vZGVKUy5UeXBlZEFycmF5fEJsb2J8c3RyaW5nKVtdfSBwYXJ0c1xuICogQHBhcmFtIHt7IHR5cGU6IHN0cmluZywgZW5kaW5nczogc3RyaW5nIH19IG9wdGlvbnNcbiAqL1xuZnVuY3Rpb24gcHJvY2Vzc0Jsb2JQYXJ0cyAocGFydHMsIG9wdGlvbnMpIHtcbiAgLy8gMS4gTGV0IGJ5dGVzIGJlIGFuIGVtcHR5IHNlcXVlbmNlIG9mIGJ5dGVzLlxuICAvKiogQHR5cGUge05vZGVKUy5UeXBlZEFycmF5W119ICovXG4gIGNvbnN0IGJ5dGVzID0gW11cblxuICAvLyAyLiBGb3IgZWFjaCBlbGVtZW50IGluIHBhcnRzOlxuICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgcGFydHMpIHtcbiAgICAvLyAxLiBJZiBlbGVtZW50IGlzIGEgVVNWU3RyaW5nLCBydW4gdGhlIGZvbGxvd2luZyBzdWJzdGVwczpcbiAgICBpZiAodHlwZW9mIGVsZW1lbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyAxLiBMZXQgcyBiZSBlbGVtZW50LlxuICAgICAgbGV0IHMgPSBlbGVtZW50XG5cbiAgICAgIC8vIDIuIElmIHRoZSBlbmRpbmdzIG1lbWJlciBvZiBvcHRpb25zIGlzIFwibmF0aXZlXCIsIHNldCBzXG4gICAgICAvLyAgICB0byB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgbGluZSBlbmRpbmdzIHRvIG5hdGl2ZVxuICAgICAgLy8gICAgb2YgZWxlbWVudC5cbiAgICAgIGlmIChvcHRpb25zLmVuZGluZ3MgPT09ICduYXRpdmUnKSB7XG4gICAgICAgIHMgPSBjb252ZXJ0TGluZUVuZGluZ3NOYXRpdmUocylcbiAgICAgIH1cblxuICAgICAgLy8gMy4gQXBwZW5kIHRoZSByZXN1bHQgb2YgVVRGLTggZW5jb2RpbmcgcyB0byBieXRlcy5cbiAgICAgIGJ5dGVzLnB1c2goZW5jb2Rlci5lbmNvZGUocykpXG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHR5cGVzLmlzQW55QXJyYXlCdWZmZXIoZWxlbWVudCkgfHxcbiAgICAgIHR5cGVzLmlzVHlwZWRBcnJheShlbGVtZW50KVxuICAgICkge1xuICAgICAgLy8gMi4gSWYgZWxlbWVudCBpcyBhIEJ1ZmZlclNvdXJjZSwgZ2V0IGEgY29weSBvZiB0aGVcbiAgICAgIC8vICAgIGJ5dGVzIGhlbGQgYnkgdGhlIGJ1ZmZlciBzb3VyY2UsIGFuZCBhcHBlbmQgdGhvc2VcbiAgICAgIC8vICAgIGJ5dGVzIHRvIGJ5dGVzLlxuICAgICAgaWYgKCFlbGVtZW50LmJ1ZmZlcikgeyAvLyBBcnJheUJ1ZmZlclxuICAgICAgICBieXRlcy5wdXNoKG5ldyBVaW50OEFycmF5KGVsZW1lbnQpKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgICBuZXcgVWludDhBcnJheShlbGVtZW50LmJ1ZmZlciwgZWxlbWVudC5ieXRlT2Zmc2V0LCBlbGVtZW50LmJ5dGVMZW5ndGgpXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzQmxvYkxpa2UoZWxlbWVudCkpIHtcbiAgICAgIC8vIDMuIElmIGVsZW1lbnQgaXMgYSBCbG9iLCBhcHBlbmQgdGhlIGJ5dGVzIGl0IHJlcHJlc2VudHNcbiAgICAgIC8vICAgIHRvIGJ5dGVzLlxuICAgICAgYnl0ZXMucHVzaChlbGVtZW50KVxuICAgIH1cbiAgfVxuXG4gIC8vIDMuIFJldHVybiBieXRlcy5cbiAgcmV0dXJuIGJ5dGVzXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3d3dy53My5vcmcvVFIvRmlsZUFQSS8jY29udmVydC1saW5lLWVuZGluZ3MtdG8tbmF0aXZlXG4gKiBAcGFyYW0ge3N0cmluZ30gc1xuICovXG5mdW5jdGlvbiBjb252ZXJ0TGluZUVuZGluZ3NOYXRpdmUgKHMpIHtcbiAgLy8gMS4gTGV0IG5hdGl2ZSBsaW5lIGVuZGluZyBiZSBiZSB0aGUgY29kZSBwb2ludCBVKzAwMEEgTEYuXG4gIGxldCBuYXRpdmVMaW5lRW5kaW5nID0gJ1xcbidcblxuICAvLyAyLiBJZiB0aGUgdW5kZXJseWluZyBwbGF0Zm9ybeKAmXMgY29udmVudGlvbnMgYXJlIHRvXG4gIC8vICAgIHJlcHJlc2VudCBuZXdsaW5lcyBhcyBhIGNhcnJpYWdlIHJldHVybiBhbmQgbGluZSBmZWVkXG4gIC8vICAgIHNlcXVlbmNlLCBzZXQgbmF0aXZlIGxpbmUgZW5kaW5nIHRvIHRoZSBjb2RlIHBvaW50XG4gIC8vICAgIFUrMDAwRCBDUiBmb2xsb3dlZCBieSB0aGUgY29kZSBwb2ludCBVKzAwMEEgTEYuXG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG4gICAgbmF0aXZlTGluZUVuZGluZyA9ICdcXHJcXG4nXG4gIH1cblxuICByZXR1cm4gcy5yZXBsYWNlKC9cXHI/XFxuL2csIG5hdGl2ZUxpbmVFbmRpbmcpXG59XG5cbi8vIElmIHRoaXMgZnVuY3Rpb24gaXMgbW92ZWQgdG8gLi91dGlsLmpzLCBzb21lIHRvb2xzIChzdWNoIGFzXG4vLyByb2xsdXApIHdpbGwgd2FybiBhYm91dCBjaXJjdWxhciBkZXBlbmRlbmNpZXMuIFNlZTpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8xNjI5XG5mdW5jdGlvbiBpc0ZpbGVMaWtlIChvYmplY3QpIHtcbiAgcmV0dXJuIChcbiAgICAoTmF0aXZlRmlsZSAmJiBvYmplY3QgaW5zdGFuY2VvZiBOYXRpdmVGaWxlKSB8fFxuICAgIG9iamVjdCBpbnN0YW5jZW9mIEZpbGUgfHwgKFxuICAgICAgb2JqZWN0ICYmXG4gICAgICAodHlwZW9mIG9iamVjdC5zdHJlYW0gPT09ICdmdW5jdGlvbicgfHxcbiAgICAgIHR5cGVvZiBvYmplY3QuYXJyYXlCdWZmZXIgPT09ICdmdW5jdGlvbicpICYmXG4gICAgICBvYmplY3RbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ0ZpbGUnXG4gICAgKVxuICApXG59XG5cbm1vZHVsZS5leHBvcnRzID0geyBGaWxlLCBGaWxlTGlrZSwgaXNGaWxlTGlrZSB9XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGlzQmxvYkxpa2UsIHRvVVNWU3RyaW5nLCBtYWtlSXRlcmF0b3IgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IGtTdGF0ZSB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgRmlsZTogVW5kaWNpRmlsZSwgRmlsZUxpa2UsIGlzRmlsZUxpa2UgfSA9IHJlcXVpcmUoJy4vZmlsZScpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi93ZWJpZGwnKVxuY29uc3QgeyBCbG9iLCBGaWxlOiBOYXRpdmVGaWxlIH0gPSByZXF1aXJlKCdidWZmZXInKVxuXG4vKiogQHR5cGUge2dsb2JhbFRoaXNbJ0ZpbGUnXX0gKi9cbmNvbnN0IEZpbGUgPSBOYXRpdmVGaWxlID8/IFVuZGljaUZpbGVcblxuLy8gaHR0cHM6Ly94aHIuc3BlYy53aGF0d2cub3JnLyNmb3JtZGF0YVxuY2xhc3MgRm9ybURhdGEge1xuICBjb25zdHJ1Y3RvciAoZm9ybSkge1xuICAgIGlmIChmb3JtICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuY29udmVyc2lvbkZhaWxlZCh7XG4gICAgICAgIHByZWZpeDogJ0Zvcm1EYXRhIGNvbnN0cnVjdG9yJyxcbiAgICAgICAgYXJndW1lbnQ6ICdBcmd1bWVudCAxJyxcbiAgICAgICAgdHlwZXM6IFsndW5kZWZpbmVkJ11cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgdGhpc1trU3RhdGVdID0gW11cbiAgfVxuXG4gIGFwcGVuZCAobmFtZSwgdmFsdWUsIGZpbGVuYW1lID0gdW5kZWZpbmVkKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRm9ybURhdGEpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnRm9ybURhdGEuYXBwZW5kJyB9KVxuXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgIWlzQmxvYkxpa2UodmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBcIkZhaWxlZCB0byBleGVjdXRlICdhcHBlbmQnIG9uICdGb3JtRGF0YSc6IHBhcmFtZXRlciAyIGlzIG5vdCBvZiB0eXBlICdCbG9iJ1wiXG4gICAgICApXG4gICAgfVxuXG4gICAgLy8gMS4gTGV0IHZhbHVlIGJlIHZhbHVlIGlmIGdpdmVuOyBvdGhlcndpc2UgYmxvYlZhbHVlLlxuXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhuYW1lKVxuICAgIHZhbHVlID0gaXNCbG9iTGlrZSh2YWx1ZSlcbiAgICAgID8gd2ViaWRsLmNvbnZlcnRlcnMuQmxvYih2YWx1ZSwgeyBzdHJpY3Q6IGZhbHNlIH0pXG4gICAgICA6IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyh2YWx1ZSlcbiAgICBmaWxlbmFtZSA9IGFyZ3VtZW50cy5sZW5ndGggPT09IDNcbiAgICAgID8gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKGZpbGVuYW1lKVxuICAgICAgOiB1bmRlZmluZWRcblxuICAgIC8vIDIuIExldCBlbnRyeSBiZSB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGFuIGVudHJ5IHdpdGhcbiAgICAvLyBuYW1lLCB2YWx1ZSwgYW5kIGZpbGVuYW1lIGlmIGdpdmVuLlxuICAgIGNvbnN0IGVudHJ5ID0gbWFrZUVudHJ5KG5hbWUsIHZhbHVlLCBmaWxlbmFtZSlcblxuICAgIC8vIDMuIEFwcGVuZCBlbnRyeSB0byB0aGlz4oCZcyBlbnRyeSBsaXN0LlxuICAgIHRoaXNba1N0YXRlXS5wdXNoKGVudHJ5KVxuICB9XG5cbiAgZGVsZXRlIChuYW1lKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRm9ybURhdGEpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRm9ybURhdGEuZGVsZXRlJyB9KVxuXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhuYW1lKVxuXG4gICAgLy8gVGhlIGRlbGV0ZShuYW1lKSBtZXRob2Qgc3RlcHMgYXJlIHRvIHJlbW92ZSBhbGwgZW50cmllcyB3aG9zZSBuYW1lXG4gICAgLy8gaXMgbmFtZSBmcm9tIHRoaXPigJlzIGVudHJ5IGxpc3QuXG4gICAgdGhpc1trU3RhdGVdID0gdGhpc1trU3RhdGVdLmZpbHRlcihlbnRyeSA9PiBlbnRyeS5uYW1lICE9PSBuYW1lKVxuICB9XG5cbiAgZ2V0IChuYW1lKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRm9ybURhdGEpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRm9ybURhdGEuZ2V0JyB9KVxuXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhuYW1lKVxuXG4gICAgLy8gMS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgd2hvc2UgbmFtZSBpcyBuYW1lIGluIHRoaXPigJlzIGVudHJ5IGxpc3QsXG4gICAgLy8gdGhlbiByZXR1cm4gbnVsbC5cbiAgICBjb25zdCBpZHggPSB0aGlzW2tTdGF0ZV0uZmluZEluZGV4KChlbnRyeSkgPT4gZW50cnkubmFtZSA9PT0gbmFtZSlcbiAgICBpZiAoaWR4ID09PSAtMSkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBlbnRyeSB3aG9zZSBuYW1lIGlzIG5hbWUgZnJvbVxuICAgIC8vIHRoaXPigJlzIGVudHJ5IGxpc3QuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXVtpZHhdLnZhbHVlXG4gIH1cblxuICBnZXRBbGwgKG5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdGb3JtRGF0YS5nZXRBbGwnIH0pXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKG5hbWUpXG5cbiAgICAvLyAxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSB3aG9zZSBuYW1lIGlzIG5hbWUgaW4gdGhpc+KAmXMgZW50cnkgbGlzdCxcbiAgICAvLyB0aGVuIHJldHVybiB0aGUgZW1wdHkgbGlzdC5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIHZhbHVlcyBvZiBhbGwgZW50cmllcyB3aG9zZSBuYW1lIGlzIG5hbWUsIGluIG9yZGVyLFxuICAgIC8vIGZyb20gdGhpc+KAmXMgZW50cnkgbGlzdC5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdXG4gICAgICAuZmlsdGVyKChlbnRyeSkgPT4gZW50cnkubmFtZSA9PT0gbmFtZSlcbiAgICAgIC5tYXAoKGVudHJ5KSA9PiBlbnRyeS52YWx1ZSlcbiAgfVxuXG4gIGhhcyAobmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZvcm1EYXRhKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0Zvcm1EYXRhLmhhcycgfSlcblxuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcobmFtZSlcblxuICAgIC8vIFRoZSBoYXMobmFtZSkgbWV0aG9kIHN0ZXBzIGFyZSB0byByZXR1cm4gdHJ1ZSBpZiB0aGVyZSBpcyBhbiBlbnRyeVxuICAgIC8vIHdob3NlIG5hbWUgaXMgbmFtZSBpbiB0aGlz4oCZcyBlbnRyeSBsaXN0OyBvdGhlcndpc2UgZmFsc2UuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5maW5kSW5kZXgoKGVudHJ5KSA9PiBlbnRyeS5uYW1lID09PSBuYW1lKSAhPT0gLTFcbiAgfVxuXG4gIHNldCAobmFtZSwgdmFsdWUsIGZpbGVuYW1lID0gdW5kZWZpbmVkKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRm9ybURhdGEpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnRm9ybURhdGEuc2V0JyB9KVxuXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgIWlzQmxvYkxpa2UodmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBcIkZhaWxlZCB0byBleGVjdXRlICdzZXQnIG9uICdGb3JtRGF0YSc6IHBhcmFtZXRlciAyIGlzIG5vdCBvZiB0eXBlICdCbG9iJ1wiXG4gICAgICApXG4gICAgfVxuXG4gICAgLy8gVGhlIHNldChuYW1lLCB2YWx1ZSkgYW5kIHNldChuYW1lLCBibG9iVmFsdWUsIGZpbGVuYW1lKSBtZXRob2Qgc3RlcHNcbiAgICAvLyBhcmU6XG5cbiAgICAvLyAxLiBMZXQgdmFsdWUgYmUgdmFsdWUgaWYgZ2l2ZW47IG90aGVyd2lzZSBibG9iVmFsdWUuXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKG5hbWUpXG4gICAgdmFsdWUgPSBpc0Jsb2JMaWtlKHZhbHVlKVxuICAgICAgPyB3ZWJpZGwuY29udmVydGVycy5CbG9iKHZhbHVlLCB7IHN0cmljdDogZmFsc2UgfSlcbiAgICAgIDogd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKHZhbHVlKVxuICAgIGZpbGVuYW1lID0gYXJndW1lbnRzLmxlbmd0aCA9PT0gM1xuICAgICAgPyB0b1VTVlN0cmluZyhmaWxlbmFtZSlcbiAgICAgIDogdW5kZWZpbmVkXG5cbiAgICAvLyAyLiBMZXQgZW50cnkgYmUgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhbiBlbnRyeSB3aXRoIG5hbWUsIHZhbHVlLCBhbmRcbiAgICAvLyBmaWxlbmFtZSBpZiBnaXZlbi5cbiAgICBjb25zdCBlbnRyeSA9IG1ha2VFbnRyeShuYW1lLCB2YWx1ZSwgZmlsZW5hbWUpXG5cbiAgICAvLyAzLiBJZiB0aGVyZSBhcmUgZW50cmllcyBpbiB0aGlz4oCZcyBlbnRyeSBsaXN0IHdob3NlIG5hbWUgaXMgbmFtZSwgdGhlblxuICAgIC8vIHJlcGxhY2UgdGhlIGZpcnN0IHN1Y2ggZW50cnkgd2l0aCBlbnRyeSBhbmQgcmVtb3ZlIHRoZSBvdGhlcnMuXG4gICAgY29uc3QgaWR4ID0gdGhpc1trU3RhdGVdLmZpbmRJbmRleCgoZW50cnkpID0+IGVudHJ5Lm5hbWUgPT09IG5hbWUpXG4gICAgaWYgKGlkeCAhPT0gLTEpIHtcbiAgICAgIHRoaXNba1N0YXRlXSA9IFtcbiAgICAgICAgLi4udGhpc1trU3RhdGVdLnNsaWNlKDAsIGlkeCksXG4gICAgICAgIGVudHJ5LFxuICAgICAgICAuLi50aGlzW2tTdGF0ZV0uc2xpY2UoaWR4ICsgMSkuZmlsdGVyKChlbnRyeSkgPT4gZW50cnkubmFtZSAhPT0gbmFtZSlcbiAgICAgIF1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gNC4gT3RoZXJ3aXNlLCBhcHBlbmQgZW50cnkgdG8gdGhpc+KAmXMgZW50cnkgbGlzdC5cbiAgICAgIHRoaXNba1N0YXRlXS5wdXNoKGVudHJ5KVxuICAgIH1cbiAgfVxuXG4gIGVudHJpZXMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZvcm1EYXRhKVxuXG4gICAgcmV0dXJuIG1ha2VJdGVyYXRvcihcbiAgICAgICgpID0+IHRoaXNba1N0YXRlXS5tYXAocGFpciA9PiBbcGFpci5uYW1lLCBwYWlyLnZhbHVlXSksXG4gICAgICAnRm9ybURhdGEnLFxuICAgICAgJ2tleSt2YWx1ZSdcbiAgICApXG4gIH1cblxuICBrZXlzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIHJldHVybiBtYWtlSXRlcmF0b3IoXG4gICAgICAoKSA9PiB0aGlzW2tTdGF0ZV0ubWFwKHBhaXIgPT4gW3BhaXIubmFtZSwgcGFpci52YWx1ZV0pLFxuICAgICAgJ0Zvcm1EYXRhJyxcbiAgICAgICdrZXknXG4gICAgKVxuICB9XG5cbiAgdmFsdWVzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIHJldHVybiBtYWtlSXRlcmF0b3IoXG4gICAgICAoKSA9PiB0aGlzW2tTdGF0ZV0ubWFwKHBhaXIgPT4gW3BhaXIubmFtZSwgcGFpci52YWx1ZV0pLFxuICAgICAgJ0Zvcm1EYXRhJyxcbiAgICAgICd2YWx1ZSdcbiAgICApXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHsodmFsdWU6IHN0cmluZywga2V5OiBzdHJpbmcsIHNlbGY6IEZvcm1EYXRhKSA9PiB2b2lkfSBjYWxsYmFja0ZuXG4gICAqIEBwYXJhbSB7dW5rbm93bn0gdGhpc0FyZ1xuICAgKi9cbiAgZm9yRWFjaCAoY2FsbGJhY2tGbiwgdGhpc0FyZyA9IGdsb2JhbFRoaXMpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdGb3JtRGF0YS5mb3JFYWNoJyB9KVxuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFja0ZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBcIkZhaWxlZCB0byBleGVjdXRlICdmb3JFYWNoJyBvbiAnRm9ybURhdGEnOiBwYXJhbWV0ZXIgMSBpcyBub3Qgb2YgdHlwZSAnRnVuY3Rpb24nLlwiXG4gICAgICApXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgdGhpcykge1xuICAgICAgY2FsbGJhY2tGbi5hcHBseSh0aGlzQXJnLCBbdmFsdWUsIGtleSwgdGhpc10pXG4gICAgfVxuICB9XG59XG5cbkZvcm1EYXRhLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdID0gRm9ybURhdGEucHJvdG90eXBlLmVudHJpZXNcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRm9ybURhdGEucHJvdG90eXBlLCB7XG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdGb3JtRGF0YScsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH1cbn0pXG5cbi8qKlxuICogQHNlZSBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3JtLWNvbnRyb2wtaW5mcmFzdHJ1Y3R1cmUuaHRtbCNjcmVhdGUtYW4tZW50cnlcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge3N0cmluZ3xCbG9ifSB2YWx1ZVxuICogQHBhcmFtIHs/c3RyaW5nfSBmaWxlbmFtZVxuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24gbWFrZUVudHJ5IChuYW1lLCB2YWx1ZSwgZmlsZW5hbWUpIHtcbiAgLy8gMS4gU2V0IG5hbWUgdG8gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIG5hbWUgaW50byBhIHNjYWxhciB2YWx1ZSBzdHJpbmcuXG4gIC8vIFwiVG8gY29udmVydCBhIHN0cmluZyBpbnRvIGEgc2NhbGFyIHZhbHVlIHN0cmluZywgcmVwbGFjZSBhbnkgc3Vycm9nYXRlc1xuICAvLyAgd2l0aCBVK0ZGRkQuXCJcbiAgLy8gc2VlOiBodHRwczovL25vZGVqcy5vcmcvZGlzdC9sYXRlc3QtdjE4LngvZG9jcy9hcGkvYnVmZmVyLmh0bWwjYnVmdG9zdHJpbmdlbmNvZGluZy1zdGFydC1lbmRcbiAgbmFtZSA9IEJ1ZmZlci5mcm9tKG5hbWUpLnRvU3RyaW5nKCd1dGY4JylcblxuICAvLyAyLiBJZiB2YWx1ZSBpcyBhIHN0cmluZywgdGhlbiBzZXQgdmFsdWUgdG8gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nXG4gIC8vICAgIHZhbHVlIGludG8gYSBzY2FsYXIgdmFsdWUgc3RyaW5nLlxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHZhbHVlID0gQnVmZmVyLmZyb20odmFsdWUpLnRvU3RyaW5nKCd1dGY4JylcbiAgfSBlbHNlIHtcbiAgICAvLyAzLiBPdGhlcndpc2U6XG5cbiAgICAvLyAxLiBJZiB2YWx1ZSBpcyBub3QgYSBGaWxlIG9iamVjdCwgdGhlbiBzZXQgdmFsdWUgdG8gYSBuZXcgRmlsZSBvYmplY3QsXG4gICAgLy8gICAgcmVwcmVzZW50aW5nIHRoZSBzYW1lIGJ5dGVzLCB3aG9zZSBuYW1lIGF0dHJpYnV0ZSB2YWx1ZSBpcyBcImJsb2JcIlxuICAgIGlmICghaXNGaWxlTGlrZSh2YWx1ZSkpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUgaW5zdGFuY2VvZiBCbG9iXG4gICAgICAgID8gbmV3IEZpbGUoW3ZhbHVlXSwgJ2Jsb2InLCB7IHR5cGU6IHZhbHVlLnR5cGUgfSlcbiAgICAgICAgOiBuZXcgRmlsZUxpa2UodmFsdWUsICdibG9iJywgeyB0eXBlOiB2YWx1ZS50eXBlIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gSWYgZmlsZW5hbWUgaXMgZ2l2ZW4sIHRoZW4gc2V0IHZhbHVlIHRvIGEgbmV3IEZpbGUgb2JqZWN0LFxuICAgIC8vICAgIHJlcHJlc2VudGluZyB0aGUgc2FtZSBieXRlcywgd2hvc2UgbmFtZSBhdHRyaWJ1dGUgaXMgZmlsZW5hbWUuXG4gICAgaWYgKGZpbGVuYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8qKiBAdHlwZSB7RmlsZVByb3BlcnR5QmFnfSAqL1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgdHlwZTogdmFsdWUudHlwZSxcbiAgICAgICAgbGFzdE1vZGlmaWVkOiB2YWx1ZS5sYXN0TW9kaWZpZWRcbiAgICAgIH1cblxuICAgICAgdmFsdWUgPSAoTmF0aXZlRmlsZSAmJiB2YWx1ZSBpbnN0YW5jZW9mIE5hdGl2ZUZpbGUpIHx8IHZhbHVlIGluc3RhbmNlb2YgVW5kaWNpRmlsZVxuICAgICAgICA/IG5ldyBGaWxlKFt2YWx1ZV0sIGZpbGVuYW1lLCBvcHRpb25zKVxuICAgICAgICA6IG5ldyBGaWxlTGlrZSh2YWx1ZSwgZmlsZW5hbWUsIG9wdGlvbnMpXG4gICAgfVxuICB9XG5cbiAgLy8gNC4gUmV0dXJuIGFuIGVudHJ5IHdob3NlIG5hbWUgaXMgbmFtZSBhbmQgd2hvc2UgdmFsdWUgaXMgdmFsdWUuXG4gIHJldHVybiB7IG5hbWUsIHZhbHVlIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7IEZvcm1EYXRhIH1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IEJ1c2JveSA9IHJlcXVpcmUoJ0BmYXN0aWZ5L2J1c2JveScpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHtcbiAgUmVhZGFibGVTdHJlYW1Gcm9tLFxuICBpc0Jsb2JMaWtlLFxuICBpc1JlYWRhYmxlU3RyZWFtTGlrZSxcbiAgcmVhZGFibGVTdHJlYW1DbG9zZSxcbiAgY3JlYXRlRGVmZXJyZWRQcm9taXNlLFxuICBmdWxseVJlYWRCb2R5XG59ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgRm9ybURhdGEgfSA9IHJlcXVpcmUoJy4vZm9ybWRhdGEnKVxuY29uc3QgeyBrU3RhdGUgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi93ZWJpZGwnKVxuY29uc3QgeyBET01FeGNlcHRpb24sIHN0cnVjdHVyZWRDbG9uZSB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3QgeyBCbG9iLCBGaWxlOiBOYXRpdmVGaWxlIH0gPSByZXF1aXJlKCdidWZmZXInKVxuY29uc3QgeyBrQm9keVVzZWQgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBpc0Vycm9yZWQgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGlzVWludDhBcnJheSwgaXNBcnJheUJ1ZmZlciB9ID0gcmVxdWlyZSgndXRpbC90eXBlcycpXG5jb25zdCB7IEZpbGU6IFVuZGljaUZpbGUgfSA9IHJlcXVpcmUoJy4vZmlsZScpXG5jb25zdCB7IHBhcnNlTUlNRVR5cGUsIHNlcmlhbGl6ZUFNaW1lVHlwZSB9ID0gcmVxdWlyZSgnLi9kYXRhVVJMJylcblxubGV0IFJlYWRhYmxlU3RyZWFtID0gZ2xvYmFsVGhpcy5SZWFkYWJsZVN0cmVhbVxuXG4vKiogQHR5cGUge2dsb2JhbFRoaXNbJ0ZpbGUnXX0gKi9cbmNvbnN0IEZpbGUgPSBOYXRpdmVGaWxlID8/IFVuZGljaUZpbGVcbmNvbnN0IHRleHRFbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKClcbmNvbnN0IHRleHREZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKClcblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtYm9keWluaXQtZXh0cmFjdFxuZnVuY3Rpb24gZXh0cmFjdEJvZHkgKG9iamVjdCwga2VlcGFsaXZlID0gZmFsc2UpIHtcbiAgaWYgKCFSZWFkYWJsZVN0cmVhbSkge1xuICAgIFJlYWRhYmxlU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtL3dlYicpLlJlYWRhYmxlU3RyZWFtXG4gIH1cblxuICAvLyAxLiBMZXQgc3RyZWFtIGJlIG51bGwuXG4gIGxldCBzdHJlYW0gPSBudWxsXG5cbiAgLy8gMi4gSWYgb2JqZWN0IGlzIGEgUmVhZGFibGVTdHJlYW0gb2JqZWN0LCB0aGVuIHNldCBzdHJlYW0gdG8gb2JqZWN0LlxuICBpZiAob2JqZWN0IGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW0pIHtcbiAgICBzdHJlYW0gPSBvYmplY3RcbiAgfSBlbHNlIGlmIChpc0Jsb2JMaWtlKG9iamVjdCkpIHtcbiAgICAvLyAzLiBPdGhlcndpc2UsIGlmIG9iamVjdCBpcyBhIEJsb2Igb2JqZWN0LCBzZXQgc3RyZWFtIHRvIHRoZVxuICAgIC8vICAgIHJlc3VsdCBvZiBydW5uaW5nIG9iamVjdOKAmXMgZ2V0IHN0cmVhbS5cbiAgICBzdHJlYW0gPSBvYmplY3Quc3RyZWFtKClcbiAgfSBlbHNlIHtcbiAgICAvLyA0LiBPdGhlcndpc2UsIHNldCBzdHJlYW0gdG8gYSBuZXcgUmVhZGFibGVTdHJlYW0gb2JqZWN0LCBhbmQgc2V0XG4gICAgLy8gICAgdXAgc3RyZWFtLlxuICAgIHN0cmVhbSA9IG5ldyBSZWFkYWJsZVN0cmVhbSh7XG4gICAgICBhc3luYyBwdWxsIChjb250cm9sbGVyKSB7XG4gICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShcbiAgICAgICAgICB0eXBlb2Ygc291cmNlID09PSAnc3RyaW5nJyA/IHRleHRFbmNvZGVyLmVuY29kZShzb3VyY2UpIDogc291cmNlXG4gICAgICAgIClcbiAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gcmVhZGFibGVTdHJlYW1DbG9zZShjb250cm9sbGVyKSlcbiAgICAgIH0sXG4gICAgICBzdGFydCAoKSB7fSxcbiAgICAgIHR5cGU6IHVuZGVmaW5lZFxuICAgIH0pXG4gIH1cblxuICAvLyA1LiBBc3NlcnQ6IHN0cmVhbSBpcyBhIFJlYWRhYmxlU3RyZWFtIG9iamVjdC5cbiAgYXNzZXJ0KGlzUmVhZGFibGVTdHJlYW1MaWtlKHN0cmVhbSkpXG5cbiAgLy8gNi4gTGV0IGFjdGlvbiBiZSBudWxsLlxuICBsZXQgYWN0aW9uID0gbnVsbFxuXG4gIC8vIDcuIExldCBzb3VyY2UgYmUgbnVsbC5cbiAgbGV0IHNvdXJjZSA9IG51bGxcblxuICAvLyA4LiBMZXQgbGVuZ3RoIGJlIG51bGwuXG4gIGxldCBsZW5ndGggPSBudWxsXG5cbiAgLy8gOS4gTGV0IHR5cGUgYmUgbnVsbC5cbiAgbGV0IHR5cGUgPSBudWxsXG5cbiAgLy8gMTAuIFN3aXRjaCBvbiBvYmplY3Q6XG4gIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAnc3RyaW5nJykge1xuICAgIC8vIFNldCBzb3VyY2UgdG8gdGhlIFVURi04IGVuY29kaW5nIG9mIG9iamVjdC5cbiAgICAvLyBOb3RlOiBzZXR0aW5nIHNvdXJjZSB0byBhIFVpbnQ4QXJyYXkgaGVyZSBicmVha3Mgc29tZSBtb2NraW5nIGFzc3VtcHRpb25zLlxuICAgIHNvdXJjZSA9IG9iamVjdFxuXG4gICAgLy8gU2V0IHR5cGUgdG8gYHRleHQvcGxhaW47Y2hhcnNldD1VVEYtOGAuXG4gICAgdHlwZSA9ICd0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLTgnXG4gIH0gZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zKSB7XG4gICAgLy8gVVJMU2VhcmNoUGFyYW1zXG5cbiAgICAvLyBzcGVjIHNheXMgdG8gcnVuIGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCBvbiBib2R5Lmxpc3RcbiAgICAvLyB0aGlzIGlzIGltcGxlbWVudGVkIGluIE5vZGUuanMgYXMgYXBhcnQgb2YgYW4gVVJMU2VhcmNoUGFyYW1zIGluc3RhbmNlIHRvU3RyaW5nIG1ldGhvZFxuICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvZTQ2YzY4MGJmMmIyMTFiYmQ1MmNmOTU5Y2ExN2VlOThjN2Y2NTdmNS9saWIvaW50ZXJuYWwvdXJsLmpzI0w0OTBcbiAgICAvLyBhbmQgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvZTQ2YzY4MGJmMmIyMTFiYmQ1MmNmOTU5Y2ExN2VlOThjN2Y2NTdmNS9saWIvaW50ZXJuYWwvdXJsLmpzI0wxMTAwXG5cbiAgICAvLyBTZXQgc291cmNlIHRvIHRoZSByZXN1bHQgb2YgcnVubmluZyB0aGUgYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIHNlcmlhbGl6ZXIgd2l0aCBvYmplY3TigJlzIGxpc3QuXG4gICAgc291cmNlID0gb2JqZWN0LnRvU3RyaW5nKClcblxuICAgIC8vIFNldCB0eXBlIHRvIGBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOGAuXG4gICAgdHlwZSA9ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCdcbiAgfSBlbHNlIGlmIChpc0FycmF5QnVmZmVyKG9iamVjdCkpIHtcbiAgICAvLyBCdWZmZXJTb3VyY2UvQXJyYXlCdWZmZXJcblxuICAgIC8vIFNldCBzb3VyY2UgdG8gYSBjb3B5IG9mIHRoZSBieXRlcyBoZWxkIGJ5IG9iamVjdC5cbiAgICBzb3VyY2UgPSBuZXcgVWludDhBcnJheShvYmplY3Quc2xpY2UoKSlcbiAgfSBlbHNlIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcob2JqZWN0KSkge1xuICAgIC8vIEJ1ZmZlclNvdXJjZS9BcnJheUJ1ZmZlclZpZXdcblxuICAgIC8vIFNldCBzb3VyY2UgdG8gYSBjb3B5IG9mIHRoZSBieXRlcyBoZWxkIGJ5IG9iamVjdC5cbiAgICBzb3VyY2UgPSBuZXcgVWludDhBcnJheShvYmplY3QuYnVmZmVyLnNsaWNlKG9iamVjdC5ieXRlT2Zmc2V0LCBvYmplY3QuYnl0ZU9mZnNldCArIG9iamVjdC5ieXRlTGVuZ3RoKSlcbiAgfSBlbHNlIGlmICh1dGlsLmlzRm9ybURhdGFMaWtlKG9iamVjdCkpIHtcbiAgICBjb25zdCBib3VuZGFyeSA9IGAtLS0tZm9ybWRhdGEtdW5kaWNpLTAke2Ake01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDFlMTEpfWAucGFkU3RhcnQoMTEsICcwJyl9YFxuICAgIGNvbnN0IHByZWZpeCA9IGAtLSR7Ym91bmRhcnl9XFxyXFxuQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhYFxuXG4gICAgLyohIGZvcm1kYXRhLXBvbHlmaWxsLiBNSVQgTGljZW5zZS4gSmltbXkgV8OkcnRpbmcgPGh0dHBzOi8vamltbXkud2FydGluZy5zZS9vcGVuc291cmNlPiAqL1xuICAgIGNvbnN0IGVzY2FwZSA9IChzdHIpID0+XG4gICAgICBzdHIucmVwbGFjZSgvXFxuL2csICclMEEnKS5yZXBsYWNlKC9cXHIvZywgJyUwRCcpLnJlcGxhY2UoL1wiL2csICclMjInKVxuICAgIGNvbnN0IG5vcm1hbGl6ZUxpbmVmZWVkcyA9ICh2YWx1ZSkgPT4gdmFsdWUucmVwbGFjZSgvXFxyP1xcbnxcXHIvZywgJ1xcclxcbicpXG5cbiAgICAvLyBTZXQgYWN0aW9uIHRvIHRoaXMgc3RlcDogcnVuIHRoZSBtdWx0aXBhcnQvZm9ybS1kYXRhXG4gICAgLy8gZW5jb2RpbmcgYWxnb3JpdGhtLCB3aXRoIG9iamVjdOKAmXMgZW50cnkgbGlzdCBhbmQgVVRGLTguXG4gICAgLy8gLSBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgYm9keSBpcyBpbW11dGFibGUgYW5kIGNhbid0IGJlIGNoYW5nZWQgYWZ0ZXJ3b3Jkc1xuICAgIC8vIC0gVGhhdCB0aGUgY29udGVudC1sZW5ndGggaXMgY2FsY3VsYXRlZCBpbiBhZHZhbmNlLlxuICAgIC8vIC0gQW5kIHRoYXQgYWxsIHBhcnRzIGFyZSBwcmUtZW5jb2RlZCBhbmQgcmVhZHkgdG8gYmUgc2VudC5cblxuICAgIGNvbnN0IGJsb2JQYXJ0cyA9IFtdXG4gICAgY29uc3Qgcm4gPSBuZXcgVWludDhBcnJheShbMTMsIDEwXSkgLy8gJ1xcclxcbidcbiAgICBsZW5ndGggPSAwXG4gICAgbGV0IGhhc1Vua25vd25TaXplVmFsdWUgPSBmYWxzZVxuXG4gICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIG9iamVjdCkge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3QgY2h1bmsgPSB0ZXh0RW5jb2Rlci5lbmNvZGUocHJlZml4ICtcbiAgICAgICAgICBgOyBuYW1lPVwiJHtlc2NhcGUobm9ybWFsaXplTGluZWZlZWRzKG5hbWUpKX1cImAgK1xuICAgICAgICAgIGBcXHJcXG5cXHJcXG4ke25vcm1hbGl6ZUxpbmVmZWVkcyh2YWx1ZSl9XFxyXFxuYClcbiAgICAgICAgYmxvYlBhcnRzLnB1c2goY2h1bmspXG4gICAgICAgIGxlbmd0aCArPSBjaHVuay5ieXRlTGVuZ3RoXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjaHVuayA9IHRleHRFbmNvZGVyLmVuY29kZShgJHtwcmVmaXh9OyBuYW1lPVwiJHtlc2NhcGUobm9ybWFsaXplTGluZWZlZWRzKG5hbWUpKX1cImAgK1xuICAgICAgICAgICh2YWx1ZS5uYW1lID8gYDsgZmlsZW5hbWU9XCIke2VzY2FwZSh2YWx1ZS5uYW1lKX1cImAgOiAnJykgKyAnXFxyXFxuJyArXG4gICAgICAgICAgYENvbnRlbnQtVHlwZTogJHtcbiAgICAgICAgICAgIHZhbHVlLnR5cGUgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSdcbiAgICAgICAgICB9XFxyXFxuXFxyXFxuYClcbiAgICAgICAgYmxvYlBhcnRzLnB1c2goY2h1bmssIHZhbHVlLCBybilcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZS5zaXplID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIGxlbmd0aCArPSBjaHVuay5ieXRlTGVuZ3RoICsgdmFsdWUuc2l6ZSArIHJuLmJ5dGVMZW5ndGhcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoYXNVbmtub3duU2l6ZVZhbHVlID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY2h1bmsgPSB0ZXh0RW5jb2Rlci5lbmNvZGUoYC0tJHtib3VuZGFyeX0tLWApXG4gICAgYmxvYlBhcnRzLnB1c2goY2h1bmspXG4gICAgbGVuZ3RoICs9IGNodW5rLmJ5dGVMZW5ndGhcbiAgICBpZiAoaGFzVW5rbm93blNpemVWYWx1ZSkge1xuICAgICAgbGVuZ3RoID0gbnVsbFxuICAgIH1cblxuICAgIC8vIFNldCBzb3VyY2UgdG8gb2JqZWN0LlxuICAgIHNvdXJjZSA9IG9iamVjdFxuXG4gICAgYWN0aW9uID0gYXN5bmMgZnVuY3Rpb24gKiAoKSB7XG4gICAgICBmb3IgKGNvbnN0IHBhcnQgb2YgYmxvYlBhcnRzKSB7XG4gICAgICAgIGlmIChwYXJ0LnN0cmVhbSkge1xuICAgICAgICAgIHlpZWxkICogcGFydC5zdHJlYW0oKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHlpZWxkIHBhcnRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNldCB0eXBlIHRvIGBtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT1gLFxuICAgIC8vIGZvbGxvd2VkIGJ5IHRoZSBtdWx0aXBhcnQvZm9ybS1kYXRhIGJvdW5kYXJ5IHN0cmluZyBnZW5lcmF0ZWRcbiAgICAvLyBieSB0aGUgbXVsdGlwYXJ0L2Zvcm0tZGF0YSBlbmNvZGluZyBhbGdvcml0aG0uXG4gICAgdHlwZSA9ICdtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0nICsgYm91bmRhcnlcbiAgfSBlbHNlIGlmIChpc0Jsb2JMaWtlKG9iamVjdCkpIHtcbiAgICAvLyBCbG9iXG5cbiAgICAvLyBTZXQgc291cmNlIHRvIG9iamVjdC5cbiAgICBzb3VyY2UgPSBvYmplY3RcblxuICAgIC8vIFNldCBsZW5ndGggdG8gb2JqZWN04oCZcyBzaXplLlxuICAgIGxlbmd0aCA9IG9iamVjdC5zaXplXG5cbiAgICAvLyBJZiBvYmplY3TigJlzIHR5cGUgYXR0cmlidXRlIGlzIG5vdCB0aGUgZW1wdHkgYnl0ZSBzZXF1ZW5jZSwgc2V0XG4gICAgLy8gdHlwZSB0byBpdHMgdmFsdWUuXG4gICAgaWYgKG9iamVjdC50eXBlKSB7XG4gICAgICB0eXBlID0gb2JqZWN0LnR5cGVcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIG9iamVjdFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBJZiBrZWVwYWxpdmUgaXMgdHJ1ZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoa2VlcGFsaXZlKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdrZWVwYWxpdmUnKVxuICAgIH1cblxuICAgIC8vIElmIG9iamVjdCBpcyBkaXN0dXJiZWQgb3IgbG9ja2VkLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICh1dGlsLmlzRGlzdHVyYmVkKG9iamVjdCkgfHwgb2JqZWN0LmxvY2tlZCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgJ1Jlc3BvbnNlIGJvZHkgb2JqZWN0IHNob3VsZCBub3QgYmUgZGlzdHVyYmVkIG9yIGxvY2tlZCdcbiAgICAgIClcbiAgICB9XG5cbiAgICBzdHJlYW0gPVxuICAgICAgb2JqZWN0IGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW0gPyBvYmplY3QgOiBSZWFkYWJsZVN0cmVhbUZyb20ob2JqZWN0KVxuICB9XG5cbiAgLy8gMTEuIElmIHNvdXJjZSBpcyBhIGJ5dGUgc2VxdWVuY2UsIHRoZW4gc2V0IGFjdGlvbiB0byBhXG4gIC8vIHN0ZXAgdGhhdCByZXR1cm5zIHNvdXJjZSBhbmQgbGVuZ3RoIHRvIHNvdXJjZeKAmXMgbGVuZ3RoLlxuICBpZiAodHlwZW9mIHNvdXJjZSA9PT0gJ3N0cmluZycgfHwgdXRpbC5pc0J1ZmZlcihzb3VyY2UpKSB7XG4gICAgbGVuZ3RoID0gQnVmZmVyLmJ5dGVMZW5ndGgoc291cmNlKVxuICB9XG5cbiAgLy8gMTIuIElmIGFjdGlvbiBpcyBub24tbnVsbCwgdGhlbiBydW4gdGhlc2Ugc3RlcHMgaW4gaW4gcGFyYWxsZWw6XG4gIGlmIChhY3Rpb24gIT0gbnVsbCkge1xuICAgIC8vIFJ1biBhY3Rpb24uXG4gICAgbGV0IGl0ZXJhdG9yXG4gICAgc3RyZWFtID0gbmV3IFJlYWRhYmxlU3RyZWFtKHtcbiAgICAgIGFzeW5jIHN0YXJ0ICgpIHtcbiAgICAgICAgaXRlcmF0b3IgPSBhY3Rpb24ob2JqZWN0KVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKVxuICAgICAgfSxcbiAgICAgIGFzeW5jIHB1bGwgKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgY29uc3QgeyB2YWx1ZSwgZG9uZSB9ID0gYXdhaXQgaXRlcmF0b3IubmV4dCgpXG4gICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgLy8gV2hlbiBydW5uaW5nIGFjdGlvbiBpcyBkb25lLCBjbG9zZSBzdHJlYW0uXG4gICAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICAgICAgY29udHJvbGxlci5jbG9zZSgpXG4gICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBXaGVuZXZlciBvbmUgb3IgbW9yZSBieXRlcyBhcmUgYXZhaWxhYmxlIGFuZCBzdHJlYW0gaXMgbm90IGVycm9yZWQsXG4gICAgICAgICAgLy8gZW5xdWV1ZSBhIFVpbnQ4QXJyYXkgd3JhcHBpbmcgYW4gQXJyYXlCdWZmZXIgY29udGFpbmluZyB0aGUgYXZhaWxhYmxlXG4gICAgICAgICAgLy8gYnl0ZXMgaW50byBzdHJlYW0uXG4gICAgICAgICAgaWYgKCFpc0Vycm9yZWQoc3RyZWFtKSkge1xuICAgICAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KHZhbHVlKSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXIuZGVzaXJlZFNpemUgPiAwXG4gICAgICB9LFxuICAgICAgYXN5bmMgY2FuY2VsIChyZWFzb24pIHtcbiAgICAgICAgYXdhaXQgaXRlcmF0b3IucmV0dXJuKClcbiAgICAgIH0sXG4gICAgICB0eXBlOiB1bmRlZmluZWRcbiAgICB9KVxuICB9XG5cbiAgLy8gMTMuIExldCBib2R5IGJlIGEgYm9keSB3aG9zZSBzdHJlYW0gaXMgc3RyZWFtLCBzb3VyY2UgaXMgc291cmNlLFxuICAvLyBhbmQgbGVuZ3RoIGlzIGxlbmd0aC5cbiAgY29uc3QgYm9keSA9IHsgc3RyZWFtLCBzb3VyY2UsIGxlbmd0aCB9XG5cbiAgLy8gMTQuIFJldHVybiAoYm9keSwgdHlwZSkuXG4gIHJldHVybiBbYm9keSwgdHlwZV1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2JvZHlpbml0LXNhZmVseS1leHRyYWN0XG5mdW5jdGlvbiBzYWZlbHlFeHRyYWN0Qm9keSAob2JqZWN0LCBrZWVwYWxpdmUgPSBmYWxzZSkge1xuICBpZiAoIVJlYWRhYmxlU3RyZWFtKSB7XG4gICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICBSZWFkYWJsZVN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbS93ZWInKS5SZWFkYWJsZVN0cmVhbVxuICB9XG5cbiAgLy8gVG8gc2FmZWx5IGV4dHJhY3QgYSBib2R5IGFuZCBhIGBDb250ZW50LVR5cGVgIHZhbHVlIGZyb21cbiAgLy8gYSBieXRlIHNlcXVlbmNlIG9yIEJvZHlJbml0IG9iamVjdCBvYmplY3QsIHJ1biB0aGVzZSBzdGVwczpcblxuICAvLyAxLiBJZiBvYmplY3QgaXMgYSBSZWFkYWJsZVN0cmVhbSBvYmplY3QsIHRoZW46XG4gIGlmIChvYmplY3QgaW5zdGFuY2VvZiBSZWFkYWJsZVN0cmVhbSkge1xuICAgIC8vIEFzc2VydDogb2JqZWN0IGlzIG5laXRoZXIgZGlzdHVyYmVkIG5vciBsb2NrZWQuXG4gICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICBhc3NlcnQoIXV0aWwuaXNEaXN0dXJiZWQob2JqZWN0KSwgJ1RoZSBib2R5IGhhcyBhbHJlYWR5IGJlZW4gY29uc3VtZWQuJylcbiAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgIGFzc2VydCghb2JqZWN0LmxvY2tlZCwgJ1RoZSBzdHJlYW0gaXMgbG9ja2VkLicpXG4gIH1cblxuICAvLyAyLiBSZXR1cm4gdGhlIHJlc3VsdHMgb2YgZXh0cmFjdGluZyBvYmplY3QuXG4gIHJldHVybiBleHRyYWN0Qm9keShvYmplY3QsIGtlZXBhbGl2ZSlcbn1cblxuZnVuY3Rpb24gY2xvbmVCb2R5IChib2R5KSB7XG4gIC8vIFRvIGNsb25lIGEgYm9keSBib2R5LCBydW4gdGhlc2Ugc3RlcHM6XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtYm9keS1jbG9uZVxuXG4gIC8vIDEuIExldCDCqyBvdXQxLCBvdXQyIMK7IGJlIHRoZSByZXN1bHQgb2YgdGVlaW5nIGJvZHnigJlzIHN0cmVhbS5cbiAgY29uc3QgW291dDEsIG91dDJdID0gYm9keS5zdHJlYW0udGVlKClcbiAgY29uc3Qgb3V0MkNsb25lID0gc3RydWN0dXJlZENsb25lKG91dDIsIHsgdHJhbnNmZXI6IFtvdXQyXSB9KVxuICAvLyBUaGlzLCBmb3Igd2hhdGV2ZXIgcmVhc29ucywgdW5yZWZzIG91dDJDbG9uZSB3aGljaCBhbGxvd3NcbiAgLy8gdGhlIHByb2Nlc3MgdG8gZXhpdCBieSBpdHNlbGYuXG4gIGNvbnN0IFssIGZpbmFsQ2xvbmVdID0gb3V0MkNsb25lLnRlZSgpXG5cbiAgLy8gMi4gU2V0IGJvZHnigJlzIHN0cmVhbSB0byBvdXQxLlxuICBib2R5LnN0cmVhbSA9IG91dDFcblxuICAvLyAzLiBSZXR1cm4gYSBib2R5IHdob3NlIHN0cmVhbSBpcyBvdXQyIGFuZCBvdGhlciBtZW1iZXJzIGFyZSBjb3BpZWQgZnJvbSBib2R5LlxuICByZXR1cm4ge1xuICAgIHN0cmVhbTogZmluYWxDbG9uZSxcbiAgICBsZW5ndGg6IGJvZHkubGVuZ3RoLFxuICAgIHNvdXJjZTogYm9keS5zb3VyY2VcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiAqIGNvbnN1bWVCb2R5IChib2R5KSB7XG4gIGlmIChib2R5KSB7XG4gICAgaWYgKGlzVWludDhBcnJheShib2R5KSkge1xuICAgICAgeWllbGQgYm9keVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzdHJlYW0gPSBib2R5LnN0cmVhbVxuXG4gICAgICBpZiAodXRpbC5pc0Rpc3R1cmJlZChzdHJlYW0pKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBib2R5IGhhcyBhbHJlYWR5IGJlZW4gY29uc3VtZWQuJylcbiAgICAgIH1cblxuICAgICAgaWYgKHN0cmVhbS5sb2NrZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHN0cmVhbSBpcyBsb2NrZWQuJylcbiAgICAgIH1cblxuICAgICAgLy8gQ29tcGF0LlxuICAgICAgc3RyZWFtW2tCb2R5VXNlZF0gPSB0cnVlXG5cbiAgICAgIHlpZWxkICogc3RyZWFtXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHRocm93SWZBYm9ydGVkIChzdGF0ZSkge1xuICBpZiAoc3RhdGUuYWJvcnRlZCkge1xuICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oJ1RoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQuJywgJ0Fib3J0RXJyb3InKVxuICB9XG59XG5cbmZ1bmN0aW9uIGJvZHlNaXhpbk1ldGhvZHMgKGluc3RhbmNlKSB7XG4gIGNvbnN0IG1ldGhvZHMgPSB7XG4gICAgYmxvYiAoKSB7XG4gICAgICAvLyBUaGUgYmxvYigpIG1ldGhvZCBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoZSByZXN1bHQgb2ZcbiAgICAgIC8vIHJ1bm5pbmcgY29uc3VtZSBib2R5IHdpdGggdGhpcyBhbmQgdGhlIGZvbGxvd2luZyBzdGVwXG4gICAgICAvLyBnaXZlbiBhIGJ5dGUgc2VxdWVuY2UgYnl0ZXM6IHJldHVybiBhIEJsb2Igd2hvc2VcbiAgICAgIC8vIGNvbnRlbnRzIGFyZSBieXRlcyBhbmQgd2hvc2UgdHlwZSBhdHRyaWJ1dGUgaXMgdGhpc+KAmXNcbiAgICAgIC8vIE1JTUUgdHlwZS5cbiAgICAgIHJldHVybiBzcGVjQ29uc3VtZUJvZHkodGhpcywgKGJ5dGVzKSA9PiB7XG4gICAgICAgIGxldCBtaW1lVHlwZSA9IGJvZHlNaW1lVHlwZSh0aGlzKVxuXG4gICAgICAgIGlmIChtaW1lVHlwZSA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgICAgbWltZVR5cGUgPSAnJ1xuICAgICAgICB9IGVsc2UgaWYgKG1pbWVUeXBlKSB7XG4gICAgICAgICAgbWltZVR5cGUgPSBzZXJpYWxpemVBTWltZVR5cGUobWltZVR5cGUpXG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZXR1cm4gYSBCbG9iIHdob3NlIGNvbnRlbnRzIGFyZSBieXRlcyBhbmQgdHlwZSBhdHRyaWJ1dGVcbiAgICAgICAgLy8gaXMgbWltZVR5cGUuXG4gICAgICAgIHJldHVybiBuZXcgQmxvYihbYnl0ZXNdLCB7IHR5cGU6IG1pbWVUeXBlIH0pXG4gICAgICB9LCBpbnN0YW5jZSlcbiAgICB9LFxuXG4gICAgYXJyYXlCdWZmZXIgKCkge1xuICAgICAgLy8gVGhlIGFycmF5QnVmZmVyKCkgbWV0aG9kIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhlIHJlc3VsdFxuICAgICAgLy8gb2YgcnVubmluZyBjb25zdW1lIGJvZHkgd2l0aCB0aGlzIGFuZCB0aGUgZm9sbG93aW5nIHN0ZXBcbiAgICAgIC8vIGdpdmVuIGEgYnl0ZSBzZXF1ZW5jZSBieXRlczogcmV0dXJuIGEgbmV3IEFycmF5QnVmZmVyXG4gICAgICAvLyB3aG9zZSBjb250ZW50cyBhcmUgYnl0ZXMuXG4gICAgICByZXR1cm4gc3BlY0NvbnN1bWVCb2R5KHRoaXMsIChieXRlcykgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYnl0ZXMpLmJ1ZmZlclxuICAgICAgfSwgaW5zdGFuY2UpXG4gICAgfSxcblxuICAgIHRleHQgKCkge1xuICAgICAgLy8gVGhlIHRleHQoKSBtZXRob2Qgc3RlcHMgYXJlIHRvIHJldHVybiB0aGUgcmVzdWx0IG9mIHJ1bm5pbmdcbiAgICAgIC8vIGNvbnN1bWUgYm9keSB3aXRoIHRoaXMgYW5kIFVURi04IGRlY29kZS5cbiAgICAgIHJldHVybiBzcGVjQ29uc3VtZUJvZHkodGhpcywgdXRmOERlY29kZUJ5dGVzLCBpbnN0YW5jZSlcbiAgICB9LFxuXG4gICAganNvbiAoKSB7XG4gICAgICAvLyBUaGUganNvbigpIG1ldGhvZCBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZ1xuICAgICAgLy8gY29uc3VtZSBib2R5IHdpdGggdGhpcyBhbmQgcGFyc2UgSlNPTiBmcm9tIGJ5dGVzLlxuICAgICAgcmV0dXJuIHNwZWNDb25zdW1lQm9keSh0aGlzLCBwYXJzZUpTT05Gcm9tQnl0ZXMsIGluc3RhbmNlKVxuICAgIH0sXG5cbiAgICBhc3luYyBmb3JtRGF0YSAoKSB7XG4gICAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBpbnN0YW5jZSlcblxuICAgICAgdGhyb3dJZkFib3J0ZWQodGhpc1trU3RhdGVdKVxuXG4gICAgICBjb25zdCBjb250ZW50VHlwZSA9IHRoaXMuaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpXG5cbiAgICAgIC8vIElmIG1pbWVUeXBl4oCZcyBlc3NlbmNlIGlzIFwibXVsdGlwYXJ0L2Zvcm0tZGF0YVwiLCB0aGVuOlxuICAgICAgaWYgKC9tdWx0aXBhcnRcXC9mb3JtLWRhdGEvLnRlc3QoY29udGVudFR5cGUpKSB7XG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7fVxuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiB0aGlzLmhlYWRlcnMpIGhlYWRlcnNba2V5LnRvTG93ZXJDYXNlKCldID0gdmFsdWVcblxuICAgICAgICBjb25zdCByZXNwb25zZUZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKClcblxuICAgICAgICBsZXQgYnVzYm95XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBidXNib3kgPSBuZXcgQnVzYm95KHtcbiAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICBwcmVzZXJ2ZVBhdGg6IHRydWVcbiAgICAgICAgICB9KVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKGAke2Vycn1gLCAnQWJvcnRFcnJvcicpXG4gICAgICAgIH1cblxuICAgICAgICBidXNib3kub24oJ2ZpZWxkJywgKG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgICAgICAgcmVzcG9uc2VGb3JtRGF0YS5hcHBlbmQobmFtZSwgdmFsdWUpXG4gICAgICAgIH0pXG4gICAgICAgIGJ1c2JveS5vbignZmlsZScsIChuYW1lLCB2YWx1ZSwgZmlsZW5hbWUsIGVuY29kaW5nLCBtaW1lVHlwZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNodW5rcyA9IFtdXG5cbiAgICAgICAgICBpZiAoZW5jb2RpbmcgPT09ICdiYXNlNjQnIHx8IGVuY29kaW5nLnRvTG93ZXJDYXNlKCkgPT09ICdiYXNlNjQnKSB7XG4gICAgICAgICAgICBsZXQgYmFzZTY0Y2h1bmsgPSAnJ1xuXG4gICAgICAgICAgICB2YWx1ZS5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgICAgICAgICAgICBiYXNlNjRjaHVuayArPSBjaHVuay50b1N0cmluZygpLnJlcGxhY2UoL1tcXHJcXG5dL2dtLCAnJylcblxuICAgICAgICAgICAgICBjb25zdCBlbmQgPSBiYXNlNjRjaHVuay5sZW5ndGggLSBiYXNlNjRjaHVuay5sZW5ndGggJSA0XG4gICAgICAgICAgICAgIGNodW5rcy5wdXNoKEJ1ZmZlci5mcm9tKGJhc2U2NGNodW5rLnNsaWNlKDAsIGVuZCksICdiYXNlNjQnKSlcblxuICAgICAgICAgICAgICBiYXNlNjRjaHVuayA9IGJhc2U2NGNodW5rLnNsaWNlKGVuZClcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB2YWx1ZS5vbignZW5kJywgKCkgPT4ge1xuICAgICAgICAgICAgICBjaHVua3MucHVzaChCdWZmZXIuZnJvbShiYXNlNjRjaHVuaywgJ2Jhc2U2NCcpKVxuICAgICAgICAgICAgICByZXNwb25zZUZvcm1EYXRhLmFwcGVuZChuYW1lLCBuZXcgRmlsZShjaHVua3MsIGZpbGVuYW1lLCB7IHR5cGU6IG1pbWVUeXBlIH0pKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsdWUub24oJ2RhdGEnLCAoY2h1bmspID0+IHtcbiAgICAgICAgICAgICAgY2h1bmtzLnB1c2goY2h1bmspXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgdmFsdWUub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgICAgICAgcmVzcG9uc2VGb3JtRGF0YS5hcHBlbmQobmFtZSwgbmV3IEZpbGUoY2h1bmtzLCBmaWxlbmFtZSwgeyB0eXBlOiBtaW1lVHlwZSB9KSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgICAgIGNvbnN0IGJ1c2JveVJlc29sdmUgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgYnVzYm95Lm9uKCdmaW5pc2gnLCByZXNvbHZlKVxuICAgICAgICAgIGJ1c2JveS5vbignZXJyb3InLCAoZXJyKSA9PiByZWplY3QobmV3IFR5cGVFcnJvcihlcnIpKSlcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAodGhpcy5ib2R5ICE9PSBudWxsKSBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIGNvbnN1bWVCb2R5KHRoaXNba1N0YXRlXS5ib2R5KSkgYnVzYm95LndyaXRlKGNodW5rKVxuICAgICAgICBidXNib3kuZW5kKClcbiAgICAgICAgYXdhaXQgYnVzYm95UmVzb2x2ZVxuXG4gICAgICAgIHJldHVybiByZXNwb25zZUZvcm1EYXRhXG4gICAgICB9IGVsc2UgaWYgKC9hcHBsaWNhdGlvblxcL3gtd3d3LWZvcm0tdXJsZW5jb2RlZC8udGVzdChjb250ZW50VHlwZSkpIHtcbiAgICAgICAgLy8gT3RoZXJ3aXNlLCBpZiBtaW1lVHlwZeKAmXMgZXNzZW5jZSBpcyBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiLCB0aGVuOlxuXG4gICAgICAgIC8vIDEuIExldCBlbnRyaWVzIGJlIHRoZSByZXN1bHQgb2YgcGFyc2luZyBieXRlcy5cbiAgICAgICAgbGV0IGVudHJpZXNcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBsZXQgdGV4dCA9ICcnXG4gICAgICAgICAgLy8gYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIHBhcnNlciB3aWxsIGtlZXAgdGhlIEJPTS5cbiAgICAgICAgICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtdXJsZW5jb2RlZC1wYXJzZXJcbiAgICAgICAgICAvLyBOb3RlIHRoYXQgc3RyZWFtaW5nIGRlY29kZXIgaXMgc3RhdGVmdWwgYW5kIGNhbm5vdCBiZSByZXVzZWRcbiAgICAgICAgICBjb25zdCBzdHJlYW1pbmdEZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCd1dGYtOCcsIHsgaWdub3JlQk9NOiB0cnVlIH0pXG5cbiAgICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIGNvbnN1bWVCb2R5KHRoaXNba1N0YXRlXS5ib2R5KSkge1xuICAgICAgICAgICAgaWYgKCFpc1VpbnQ4QXJyYXkoY2h1bmspKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIFVpbnQ4QXJyYXkgY2h1bmsnKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGV4dCArPSBzdHJlYW1pbmdEZWNvZGVyLmRlY29kZShjaHVuaywgeyBzdHJlYW06IHRydWUgfSlcbiAgICAgICAgICB9XG4gICAgICAgICAgdGV4dCArPSBzdHJlYW1pbmdEZWNvZGVyLmRlY29kZSgpXG4gICAgICAgICAgZW50cmllcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXModGV4dClcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHQ6IFVuY2xlYXIgd2hlbiBuZXcgVVJMU2VhcmNoUGFyYW1zIGNhbiBmYWlsIG9uIGEgc3RyaW5nLlxuICAgICAgICAgIC8vIDIuIElmIGVudHJpZXMgaXMgZmFpbHVyZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgICAgICB0aHJvdyBPYmplY3QuYXNzaWduKG5ldyBUeXBlRXJyb3IoKSwgeyBjYXVzZTogZXJyIH0pXG4gICAgICAgIH1cblxuICAgICAgICAvLyAzLiBSZXR1cm4gYSBuZXcgRm9ybURhdGEgb2JqZWN0IHdob3NlIGVudHJpZXMgYXJlIGVudHJpZXMuXG4gICAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKClcbiAgICAgICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIGVudHJpZXMpIHtcbiAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQobmFtZSwgdmFsdWUpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZvcm1EYXRhXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBXYWl0IGEgdGljayBiZWZvcmUgY2hlY2tpbmcgaWYgdGhlIHJlcXVlc3QgaGFzIGJlZW4gYWJvcnRlZC5cbiAgICAgICAgLy8gT3RoZXJ3aXNlLCBhIFR5cGVFcnJvciBjYW4gYmUgdGhyb3duIHdoZW4gYW4gQWJvcnRFcnJvciBzaG91bGQuXG4gICAgICAgIGF3YWl0IFByb21pc2UucmVzb2x2ZSgpXG5cbiAgICAgICAgdGhyb3dJZkFib3J0ZWQodGhpc1trU3RhdGVdKVxuXG4gICAgICAgIC8vIE90aGVyd2lzZSwgdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICBoZWFkZXI6IGAke2luc3RhbmNlLm5hbWV9LmZvcm1EYXRhYCxcbiAgICAgICAgICBtZXNzYWdlOiAnQ291bGQgbm90IHBhcnNlIGNvbnRlbnQgYXMgRm9ybURhdGEuJ1xuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtZXRob2RzXG59XG5cbmZ1bmN0aW9uIG1peGluQm9keSAocHJvdG90eXBlKSB7XG4gIE9iamVjdC5hc3NpZ24ocHJvdG90eXBlLnByb3RvdHlwZSwgYm9keU1peGluTWV0aG9kcyhwcm90b3R5cGUpKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtYm9keS1jb25zdW1lLWJvZHlcbiAqIEBwYXJhbSB7UmVzcG9uc2V8UmVxdWVzdH0gb2JqZWN0XG4gKiBAcGFyYW0geyh2YWx1ZTogdW5rbm93bikgPT4gdW5rbm93bn0gY29udmVydEJ5dGVzVG9KU1ZhbHVlXG4gKiBAcGFyYW0ge1Jlc3BvbnNlfFJlcXVlc3R9IGluc3RhbmNlXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNwZWNDb25zdW1lQm9keSAob2JqZWN0LCBjb252ZXJ0Qnl0ZXNUb0pTVmFsdWUsIGluc3RhbmNlKSB7XG4gIHdlYmlkbC5icmFuZENoZWNrKG9iamVjdCwgaW5zdGFuY2UpXG5cbiAgdGhyb3dJZkFib3J0ZWQob2JqZWN0W2tTdGF0ZV0pXG5cbiAgLy8gMS4gSWYgb2JqZWN0IGlzIHVudXNhYmxlLCB0aGVuIHJldHVybiBhIHByb21pc2UgcmVqZWN0ZWRcbiAgLy8gICAgd2l0aCBhIFR5cGVFcnJvci5cbiAgaWYgKGJvZHlVbnVzYWJsZShvYmplY3Rba1N0YXRlXS5ib2R5KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0JvZHkgaXMgdW51c2FibGUnKVxuICB9XG5cbiAgLy8gMi4gTGV0IHByb21pc2UgYmUgYSBuZXcgcHJvbWlzZS5cbiAgY29uc3QgcHJvbWlzZSA9IGNyZWF0ZURlZmVycmVkUHJvbWlzZSgpXG5cbiAgLy8gMy4gTGV0IGVycm9yU3RlcHMgZ2l2ZW4gZXJyb3IgYmUgdG8gcmVqZWN0IHByb21pc2Ugd2l0aCBlcnJvci5cbiAgY29uc3QgZXJyb3JTdGVwcyA9IChlcnJvcikgPT4gcHJvbWlzZS5yZWplY3QoZXJyb3IpXG5cbiAgLy8gNC4gTGV0IHN1Y2Nlc3NTdGVwcyBnaXZlbiBhIGJ5dGUgc2VxdWVuY2UgZGF0YSBiZSB0byByZXNvbHZlXG4gIC8vICAgIHByb21pc2Ugd2l0aCB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgY29udmVydEJ5dGVzVG9KU1ZhbHVlXG4gIC8vICAgIHdpdGggZGF0YS4gSWYgdGhhdCB0aHJldyBhbiBleGNlcHRpb24sIHRoZW4gcnVuIGVycm9yU3RlcHNcbiAgLy8gICAgd2l0aCB0aGF0IGV4Y2VwdGlvbi5cbiAgY29uc3Qgc3VjY2Vzc1N0ZXBzID0gKGRhdGEpID0+IHtcbiAgICB0cnkge1xuICAgICAgcHJvbWlzZS5yZXNvbHZlKGNvbnZlcnRCeXRlc1RvSlNWYWx1ZShkYXRhKSlcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlcnJvclN0ZXBzKGUpXG4gICAgfVxuICB9XG5cbiAgLy8gNS4gSWYgb2JqZWN04oCZcyBib2R5IGlzIG51bGwsIHRoZW4gcnVuIHN1Y2Nlc3NTdGVwcyB3aXRoIGFuXG4gIC8vICAgIGVtcHR5IGJ5dGUgc2VxdWVuY2UuXG4gIGlmIChvYmplY3Rba1N0YXRlXS5ib2R5ID09IG51bGwpIHtcbiAgICBzdWNjZXNzU3RlcHMobmV3IFVpbnQ4QXJyYXkoKSlcbiAgICByZXR1cm4gcHJvbWlzZS5wcm9taXNlXG4gIH1cblxuICAvLyA2LiBPdGhlcndpc2UsIGZ1bGx5IHJlYWQgb2JqZWN04oCZcyBib2R5IGdpdmVuIHN1Y2Nlc3NTdGVwcyxcbiAgLy8gICAgZXJyb3JTdGVwcywgYW5kIG9iamVjdOKAmXMgcmVsZXZhbnQgZ2xvYmFsIG9iamVjdC5cbiAgYXdhaXQgZnVsbHlSZWFkQm9keShvYmplY3Rba1N0YXRlXS5ib2R5LCBzdWNjZXNzU3RlcHMsIGVycm9yU3RlcHMpXG5cbiAgLy8gNy4gUmV0dXJuIHByb21pc2UuXG4gIHJldHVybiBwcm9taXNlLnByb21pc2Vcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2JvZHktdW51c2FibGVcbmZ1bmN0aW9uIGJvZHlVbnVzYWJsZSAoYm9keSkge1xuICAvLyBBbiBvYmplY3QgaW5jbHVkaW5nIHRoZSBCb2R5IGludGVyZmFjZSBtaXhpbiBpc1xuICAvLyBzYWlkIHRvIGJlIHVudXNhYmxlIGlmIGl0cyBib2R5IGlzIG5vbi1udWxsIGFuZFxuICAvLyBpdHMgYm9keeKAmXMgc3RyZWFtIGlzIGRpc3R1cmJlZCBvciBsb2NrZWQuXG4gIHJldHVybiBib2R5ICE9IG51bGwgJiYgKGJvZHkuc3RyZWFtLmxvY2tlZCB8fCB1dGlsLmlzRGlzdHVyYmVkKGJvZHkuc3RyZWFtKSlcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZW5jb2Rpbmcuc3BlYy53aGF0d2cub3JnLyN1dGYtOC1kZWNvZGVcbiAqIEBwYXJhbSB7QnVmZmVyfSBidWZmZXJcbiAqL1xuZnVuY3Rpb24gdXRmOERlY29kZUJ5dGVzIChidWZmZXIpIHtcbiAgaWYgKGJ1ZmZlci5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIC8vIDEuIExldCBidWZmZXIgYmUgdGhlIHJlc3VsdCBvZiBwZWVraW5nIHRocmVlIGJ5dGVzIGZyb21cbiAgLy8gICAgaW9RdWV1ZSwgY29udmVydGVkIHRvIGEgYnl0ZSBzZXF1ZW5jZS5cblxuICAvLyAyLiBJZiBidWZmZXIgaXMgMHhFRiAweEJCIDB4QkYsIHRoZW4gcmVhZCB0aHJlZVxuICAvLyAgICBieXRlcyBmcm9tIGlvUXVldWUuIChEbyBub3RoaW5nIHdpdGggdGhvc2UgYnl0ZXMuKVxuICBpZiAoYnVmZmVyWzBdID09PSAweEVGICYmIGJ1ZmZlclsxXSA9PT0gMHhCQiAmJiBidWZmZXJbMl0gPT09IDB4QkYpIHtcbiAgICBidWZmZXIgPSBidWZmZXIuc3ViYXJyYXkoMylcbiAgfVxuXG4gIC8vIDMuIFByb2Nlc3MgYSBxdWV1ZSB3aXRoIGFuIGluc3RhbmNlIG9mIFVURi044oCZc1xuICAvLyAgICBkZWNvZGVyLCBpb1F1ZXVlLCBvdXRwdXQsIGFuZCBcInJlcGxhY2VtZW50XCIuXG4gIGNvbnN0IG91dHB1dCA9IHRleHREZWNvZGVyLmRlY29kZShidWZmZXIpXG5cbiAgLy8gNC4gUmV0dXJuIG91dHB1dC5cbiAgcmV0dXJuIG91dHB1dFxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI3BhcnNlLWpzb24tYnl0ZXMtdG8tYS1qYXZhc2NyaXB0LXZhbHVlXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGJ5dGVzXG4gKi9cbmZ1bmN0aW9uIHBhcnNlSlNPTkZyb21CeXRlcyAoYnl0ZXMpIHtcbiAgcmV0dXJuIEpTT04ucGFyc2UodXRmOERlY29kZUJ5dGVzKGJ5dGVzKSlcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWJvZHktbWltZS10eXBlXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9yZXNwb25zZScpLlJlc3BvbnNlfGltcG9ydCgnLi9yZXF1ZXN0JykuUmVxdWVzdH0gb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIGJvZHlNaW1lVHlwZSAob2JqZWN0KSB7XG4gIGNvbnN0IHsgaGVhZGVyc0xpc3QgfSA9IG9iamVjdFtrU3RhdGVdXG4gIGNvbnN0IGNvbnRlbnRUeXBlID0gaGVhZGVyc0xpc3QuZ2V0KCdjb250ZW50LXR5cGUnKVxuXG4gIGlmIChjb250ZW50VHlwZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIHJldHVybiBwYXJzZU1JTUVUeXBlKGNvbnRlbnRUeXBlKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZXh0cmFjdEJvZHksXG4gIHNhZmVseUV4dHJhY3RCb2R5LFxuICBjbG9uZUJvZHksXG4gIG1peGluQm9keVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3Qge1xuICBJbnZhbGlkQXJndW1lbnRFcnJvcixcbiAgTm90U3VwcG9ydGVkRXJyb3Jcbn0gPSByZXF1aXJlKCcuL2Vycm9ycycpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBrSFRUUDJCdWlsZFJlcXVlc3QsIGtIVFRQMkNvcHlIZWFkZXJzLCBrSFRUUDFCdWlsZFJlcXVlc3QgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi91dGlsJylcblxuLy8gdG9rZW5SZWdFeHAgYW5kIGhlYWRlckNoYXJSZWdleCBoYXZlIGJlZW4gbGlmdGVkIGZyb21cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL21haW4vbGliL19odHRwX2NvbW1vbi5qc1xuXG4vKipcbiAqIFZlcmlmaWVzIHRoYXQgdGhlIGdpdmVuIHZhbCBpcyBhIHZhbGlkIEhUVFAgdG9rZW5cbiAqIHBlciB0aGUgcnVsZXMgZGVmaW5lZCBpbiBSRkMgNzIzMFxuICogU2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4yLjZcbiAqL1xuY29uc3QgdG9rZW5SZWdFeHAgPSAvXltcXF5fYGEtekEtWlxcLTAtOSEjJCUmJyorLnx+XSskL1xuXG4vKipcbiAqIE1hdGNoZXMgaWYgdmFsIGNvbnRhaW5zIGFuIGludmFsaWQgZmllbGQtdmNoYXJcbiAqICBmaWVsZC12YWx1ZSAgICA9ICooIGZpZWxkLWNvbnRlbnQgLyBvYnMtZm9sZCApXG4gKiAgZmllbGQtY29udGVudCAgPSBmaWVsZC12Y2hhciBbIDEqKCBTUCAvIEhUQUIgKSBmaWVsZC12Y2hhciBdXG4gKiAgZmllbGQtdmNoYXIgICAgPSBWQ0hBUiAvIG9icy10ZXh0XG4gKi9cbmNvbnN0IGhlYWRlckNoYXJSZWdleCA9IC9bXlxcdFxceDIwLVxceDdlXFx4ODAtXFx4ZmZdL1xuXG4vLyBWZXJpZmllcyB0aGF0IGEgZ2l2ZW4gcGF0aCBpcyB2YWxpZCBkb2VzIG5vdCBjb250YWluIGNvbnRyb2wgY2hhcnMgXFx4MDAgdG8gXFx4MjBcbmNvbnN0IGludmFsaWRQYXRoUmVnZXggPSAvW15cXHUwMDIxLVxcdTAwZmZdL1xuXG5jb25zdCBrSGFuZGxlciA9IFN5bWJvbCgnaGFuZGxlcicpXG5cbmNvbnN0IGNoYW5uZWxzID0ge31cblxubGV0IGV4dHJhY3RCb2R5XG5cbnRyeSB7XG4gIGNvbnN0IGRpYWdub3N0aWNzQ2hhbm5lbCA9IHJlcXVpcmUoJ2RpYWdub3N0aWNzX2NoYW5uZWwnKVxuICBjaGFubmVscy5jcmVhdGUgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOnJlcXVlc3Q6Y3JlYXRlJylcbiAgY2hhbm5lbHMuYm9keVNlbnQgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOnJlcXVlc3Q6Ym9keVNlbnQnKVxuICBjaGFubmVscy5oZWFkZXJzID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpyZXF1ZXN0OmhlYWRlcnMnKVxuICBjaGFubmVscy50cmFpbGVycyA9IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6cmVxdWVzdDp0cmFpbGVycycpXG4gIGNoYW5uZWxzLmVycm9yID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpyZXF1ZXN0OmVycm9yJylcbn0gY2F0Y2gge1xuICBjaGFubmVscy5jcmVhdGUgPSB7IGhhc1N1YnNjcmliZXJzOiBmYWxzZSB9XG4gIGNoYW5uZWxzLmJvZHlTZW50ID0geyBoYXNTdWJzY3JpYmVyczogZmFsc2UgfVxuICBjaGFubmVscy5oZWFkZXJzID0geyBoYXNTdWJzY3JpYmVyczogZmFsc2UgfVxuICBjaGFubmVscy50cmFpbGVycyA9IHsgaGFzU3Vic2NyaWJlcnM6IGZhbHNlIH1cbiAgY2hhbm5lbHMuZXJyb3IgPSB7IGhhc1N1YnNjcmliZXJzOiBmYWxzZSB9XG59XG5cbmNsYXNzIFJlcXVlc3Qge1xuICBjb25zdHJ1Y3RvciAob3JpZ2luLCB7XG4gICAgcGF0aCxcbiAgICBtZXRob2QsXG4gICAgYm9keSxcbiAgICBoZWFkZXJzLFxuICAgIHF1ZXJ5LFxuICAgIGlkZW1wb3RlbnQsXG4gICAgYmxvY2tpbmcsXG4gICAgdXBncmFkZSxcbiAgICBoZWFkZXJzVGltZW91dCxcbiAgICBib2R5VGltZW91dCxcbiAgICByZXNldCxcbiAgICB0aHJvd09uRXJyb3IsXG4gICAgZXhwZWN0Q29udGludWVcbiAgfSwgaGFuZGxlcikge1xuICAgIGlmICh0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigncGF0aCBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgcGF0aFswXSAhPT0gJy8nICYmXG4gICAgICAhKHBhdGguc3RhcnRzV2l0aCgnaHR0cDovLycpIHx8IHBhdGguc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSkgJiZcbiAgICAgIG1ldGhvZCAhPT0gJ0NPTk5FQ1QnXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3BhdGggbXVzdCBiZSBhbiBhYnNvbHV0ZSBVUkwgb3Igc3RhcnQgd2l0aCBhIHNsYXNoJylcbiAgICB9IGVsc2UgaWYgKGludmFsaWRQYXRoUmVnZXguZXhlYyhwYXRoKSAhPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIHJlcXVlc3QgcGF0aCcpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBtZXRob2QgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ21ldGhvZCBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9IGVsc2UgaWYgKHRva2VuUmVnRXhwLmV4ZWMobWV0aG9kKSA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIHJlcXVlc3QgbWV0aG9kJylcbiAgICB9XG5cbiAgICBpZiAodXBncmFkZSAmJiB0eXBlb2YgdXBncmFkZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndXBncmFkZSBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9XG5cbiAgICBpZiAoaGVhZGVyc1RpbWVvdXQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0Zpbml0ZShoZWFkZXJzVGltZW91dCkgfHwgaGVhZGVyc1RpbWVvdXQgPCAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGhlYWRlcnNUaW1lb3V0JylcbiAgICB9XG5cbiAgICBpZiAoYm9keVRpbWVvdXQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0Zpbml0ZShib2R5VGltZW91dCkgfHwgYm9keVRpbWVvdXQgPCAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGJvZHlUaW1lb3V0JylcbiAgICB9XG5cbiAgICBpZiAocmVzZXQgIT0gbnVsbCAmJiB0eXBlb2YgcmVzZXQgIT09ICdib29sZWFuJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIHJlc2V0JylcbiAgICB9XG5cbiAgICBpZiAoZXhwZWN0Q29udGludWUgIT0gbnVsbCAmJiB0eXBlb2YgZXhwZWN0Q29udGludWUgIT09ICdib29sZWFuJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGV4cGVjdENvbnRpbnVlJylcbiAgICB9XG5cbiAgICB0aGlzLmhlYWRlcnNUaW1lb3V0ID0gaGVhZGVyc1RpbWVvdXRcblxuICAgIHRoaXMuYm9keVRpbWVvdXQgPSBib2R5VGltZW91dFxuXG4gICAgdGhpcy50aHJvd09uRXJyb3IgPSB0aHJvd09uRXJyb3IgPT09IHRydWVcblxuICAgIHRoaXMubWV0aG9kID0gbWV0aG9kXG5cbiAgICB0aGlzLmFib3J0ID0gbnVsbFxuXG4gICAgaWYgKGJvZHkgPT0gbnVsbCkge1xuICAgICAgdGhpcy5ib2R5ID0gbnVsbFxuICAgIH0gZWxzZSBpZiAodXRpbC5pc1N0cmVhbShib2R5KSkge1xuICAgICAgdGhpcy5ib2R5ID0gYm9keVxuXG4gICAgICBjb25zdCByU3RhdGUgPSB0aGlzLmJvZHkuX3JlYWRhYmxlU3RhdGVcbiAgICAgIGlmICghclN0YXRlIHx8ICFyU3RhdGUuYXV0b0Rlc3Ryb3kpIHtcbiAgICAgICAgdGhpcy5lbmRIYW5kbGVyID0gZnVuY3Rpb24gYXV0b0Rlc3Ryb3kgKCkge1xuICAgICAgICAgIHV0aWwuZGVzdHJveSh0aGlzKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuYm9keS5vbignZW5kJywgdGhpcy5lbmRIYW5kbGVyKVxuICAgICAgfVxuXG4gICAgICB0aGlzLmVycm9ySGFuZGxlciA9IGVyciA9PiB7XG4gICAgICAgIGlmICh0aGlzLmFib3J0KSB7XG4gICAgICAgICAgdGhpcy5hYm9ydChlcnIpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5lcnJvciA9IGVyclxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmJvZHkub24oJ2Vycm9yJywgdGhpcy5lcnJvckhhbmRsZXIpXG4gICAgfSBlbHNlIGlmICh1dGlsLmlzQnVmZmVyKGJvZHkpKSB7XG4gICAgICB0aGlzLmJvZHkgPSBib2R5LmJ5dGVMZW5ndGggPyBib2R5IDogbnVsbFxuICAgIH0gZWxzZSBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KGJvZHkpKSB7XG4gICAgICB0aGlzLmJvZHkgPSBib2R5LmJ1ZmZlci5ieXRlTGVuZ3RoID8gQnVmZmVyLmZyb20oYm9keS5idWZmZXIsIGJvZHkuYnl0ZU9mZnNldCwgYm9keS5ieXRlTGVuZ3RoKSA6IG51bGxcbiAgICB9IGVsc2UgaWYgKGJvZHkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgICAgdGhpcy5ib2R5ID0gYm9keS5ieXRlTGVuZ3RoID8gQnVmZmVyLmZyb20oYm9keSkgOiBudWxsXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuYm9keSA9IGJvZHkubGVuZ3RoID8gQnVmZmVyLmZyb20oYm9keSkgOiBudWxsXG4gICAgfSBlbHNlIGlmICh1dGlsLmlzRm9ybURhdGFMaWtlKGJvZHkpIHx8IHV0aWwuaXNJdGVyYWJsZShib2R5KSB8fCB1dGlsLmlzQmxvYkxpa2UoYm9keSkpIHtcbiAgICAgIHRoaXMuYm9keSA9IGJvZHlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdib2R5IG11c3QgYmUgYSBzdHJpbmcsIGEgQnVmZmVyLCBhIFJlYWRhYmxlIHN0cmVhbSwgYW4gaXRlcmFibGUsIG9yIGFuIGFzeW5jIGl0ZXJhYmxlJylcbiAgICB9XG5cbiAgICB0aGlzLmNvbXBsZXRlZCA9IGZhbHNlXG5cbiAgICB0aGlzLmFib3J0ZWQgPSBmYWxzZVxuXG4gICAgdGhpcy51cGdyYWRlID0gdXBncmFkZSB8fCBudWxsXG5cbiAgICB0aGlzLnBhdGggPSBxdWVyeSA/IHV0aWwuYnVpbGRVUkwocGF0aCwgcXVlcnkpIDogcGF0aFxuXG4gICAgdGhpcy5vcmlnaW4gPSBvcmlnaW5cblxuICAgIHRoaXMuaWRlbXBvdGVudCA9IGlkZW1wb3RlbnQgPT0gbnVsbFxuICAgICAgPyBtZXRob2QgPT09ICdIRUFEJyB8fCBtZXRob2QgPT09ICdHRVQnXG4gICAgICA6IGlkZW1wb3RlbnRcblxuICAgIHRoaXMuYmxvY2tpbmcgPSBibG9ja2luZyA9PSBudWxsID8gZmFsc2UgOiBibG9ja2luZ1xuXG4gICAgdGhpcy5yZXNldCA9IHJlc2V0ID09IG51bGwgPyBudWxsIDogcmVzZXRcblxuICAgIHRoaXMuaG9zdCA9IG51bGxcblxuICAgIHRoaXMuY29udGVudExlbmd0aCA9IG51bGxcblxuICAgIHRoaXMuY29udGVudFR5cGUgPSBudWxsXG5cbiAgICB0aGlzLmhlYWRlcnMgPSAnJ1xuXG4gICAgLy8gT25seSBmb3IgSDJcbiAgICB0aGlzLmV4cGVjdENvbnRpbnVlID0gZXhwZWN0Q29udGludWUgIT0gbnVsbCA/IGV4cGVjdENvbnRpbnVlIDogZmFsc2VcblxuICAgIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgICBpZiAoaGVhZGVycy5sZW5ndGggJSAyICE9PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaGVhZGVycyBhcnJheSBtdXN0IGJlIGV2ZW4nKVxuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgIHByb2Nlc3NIZWFkZXIodGhpcywgaGVhZGVyc1tpXSwgaGVhZGVyc1tpICsgMV0pXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChoZWFkZXJzICYmIHR5cGVvZiBoZWFkZXJzID09PSAnb2JqZWN0Jykge1xuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGhlYWRlcnMpXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXVxuICAgICAgICBwcm9jZXNzSGVhZGVyKHRoaXMsIGtleSwgaGVhZGVyc1trZXldKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaGVhZGVycyAhPSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2hlYWRlcnMgbXVzdCBiZSBhbiBvYmplY3Qgb3IgYW4gYXJyYXknKVxuICAgIH1cblxuICAgIGlmICh1dGlsLmlzRm9ybURhdGFMaWtlKHRoaXMuYm9keSkpIHtcbiAgICAgIGlmICh1dGlsLm5vZGVNYWpvciA8IDE2IHx8ICh1dGlsLm5vZGVNYWpvciA9PT0gMTYgJiYgdXRpbC5ub2RlTWlub3IgPCA4KSkge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0Zvcm0tRGF0YSBib2RpZXMgYXJlIG9ubHkgc3VwcG9ydGVkIGluIG5vZGUgdjE2LjggYW5kIG5ld2VyLicpXG4gICAgICB9XG5cbiAgICAgIGlmICghZXh0cmFjdEJvZHkpIHtcbiAgICAgICAgZXh0cmFjdEJvZHkgPSByZXF1aXJlKCcuLi9mZXRjaC9ib2R5LmpzJykuZXh0cmFjdEJvZHlcbiAgICAgIH1cblxuICAgICAgY29uc3QgW2JvZHlTdHJlYW0sIGNvbnRlbnRUeXBlXSA9IGV4dHJhY3RCb2R5KGJvZHkpXG4gICAgICBpZiAodGhpcy5jb250ZW50VHlwZSA9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuY29udGVudFR5cGUgPSBjb250ZW50VHlwZVxuICAgICAgICB0aGlzLmhlYWRlcnMgKz0gYGNvbnRlbnQtdHlwZTogJHtjb250ZW50VHlwZX1cXHJcXG5gXG4gICAgICB9XG4gICAgICB0aGlzLmJvZHkgPSBib2R5U3RyZWFtLnN0cmVhbVxuICAgICAgdGhpcy5jb250ZW50TGVuZ3RoID0gYm9keVN0cmVhbS5sZW5ndGhcbiAgICB9IGVsc2UgaWYgKHV0aWwuaXNCbG9iTGlrZShib2R5KSAmJiB0aGlzLmNvbnRlbnRUeXBlID09IG51bGwgJiYgYm9keS50eXBlKSB7XG4gICAgICB0aGlzLmNvbnRlbnRUeXBlID0gYm9keS50eXBlXG4gICAgICB0aGlzLmhlYWRlcnMgKz0gYGNvbnRlbnQtdHlwZTogJHtib2R5LnR5cGV9XFxyXFxuYFxuICAgIH1cblxuICAgIHV0aWwudmFsaWRhdGVIYW5kbGVyKGhhbmRsZXIsIG1ldGhvZCwgdXBncmFkZSlcblxuICAgIHRoaXMuc2VydmVybmFtZSA9IHV0aWwuZ2V0U2VydmVyTmFtZSh0aGlzLmhvc3QpXG5cbiAgICB0aGlzW2tIYW5kbGVyXSA9IGhhbmRsZXJcblxuICAgIGlmIChjaGFubmVscy5jcmVhdGUuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICAgIGNoYW5uZWxzLmNyZWF0ZS5wdWJsaXNoKHsgcmVxdWVzdDogdGhpcyB9KVxuICAgIH1cbiAgfVxuXG4gIG9uQm9keVNlbnQgKGNodW5rKSB7XG4gICAgaWYgKHRoaXNba0hhbmRsZXJdLm9uQm9keVNlbnQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB0aGlzW2tIYW5kbGVyXS5vbkJvZHlTZW50KGNodW5rKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMuYWJvcnQoZXJyKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uUmVxdWVzdFNlbnQgKCkge1xuICAgIGlmIChjaGFubmVscy5ib2R5U2VudC5oYXNTdWJzY3JpYmVycykge1xuICAgICAgY2hhbm5lbHMuYm9keVNlbnQucHVibGlzaCh7IHJlcXVlc3Q6IHRoaXMgfSlcbiAgICB9XG5cbiAgICBpZiAodGhpc1trSGFuZGxlcl0ub25SZXF1ZXN0U2VudCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uUmVxdWVzdFNlbnQoKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMuYWJvcnQoZXJyKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uQ29ubmVjdCAoYWJvcnQpIHtcbiAgICBhc3NlcnQoIXRoaXMuYWJvcnRlZClcbiAgICBhc3NlcnQoIXRoaXMuY29tcGxldGVkKVxuXG4gICAgaWYgKHRoaXMuZXJyb3IpIHtcbiAgICAgIGFib3J0KHRoaXMuZXJyb3IpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uQ29ubmVjdChhYm9ydClcbiAgICB9XG4gIH1cblxuICBvbkhlYWRlcnMgKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHJlc3VtZSwgc3RhdHVzVGV4dCkge1xuICAgIGFzc2VydCghdGhpcy5hYm9ydGVkKVxuICAgIGFzc2VydCghdGhpcy5jb21wbGV0ZWQpXG5cbiAgICBpZiAoY2hhbm5lbHMuaGVhZGVycy5oYXNTdWJzY3JpYmVycykge1xuICAgICAgY2hhbm5lbHMuaGVhZGVycy5wdWJsaXNoKHsgcmVxdWVzdDogdGhpcywgcmVzcG9uc2U6IHsgc3RhdHVzQ29kZSwgaGVhZGVycywgc3RhdHVzVGV4dCB9IH0pXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzW2tIYW5kbGVyXS5vbkhlYWRlcnMoc3RhdHVzQ29kZSwgaGVhZGVycywgcmVzdW1lLCBzdGF0dXNUZXh0KVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5hYm9ydChlcnIpXG4gICAgfVxuICB9XG5cbiAgb25EYXRhIChjaHVuaykge1xuICAgIGFzc2VydCghdGhpcy5hYm9ydGVkKVxuICAgIGFzc2VydCghdGhpcy5jb21wbGV0ZWQpXG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uRGF0YShjaHVuaylcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuYWJvcnQoZXJyKVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgb25VcGdyYWRlIChzdGF0dXNDb2RlLCBoZWFkZXJzLCBzb2NrZXQpIHtcbiAgICBhc3NlcnQoIXRoaXMuYWJvcnRlZClcbiAgICBhc3NlcnQoIXRoaXMuY29tcGxldGVkKVxuXG4gICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uVXBncmFkZShzdGF0dXNDb2RlLCBoZWFkZXJzLCBzb2NrZXQpXG4gIH1cblxuICBvbkNvbXBsZXRlICh0cmFpbGVycykge1xuICAgIHRoaXMub25GaW5hbGx5KClcblxuICAgIGFzc2VydCghdGhpcy5hYm9ydGVkKVxuXG4gICAgdGhpcy5jb21wbGV0ZWQgPSB0cnVlXG4gICAgaWYgKGNoYW5uZWxzLnRyYWlsZXJzLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICBjaGFubmVscy50cmFpbGVycy5wdWJsaXNoKHsgcmVxdWVzdDogdGhpcywgdHJhaWxlcnMgfSlcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uQ29tcGxldGUodHJhaWxlcnMpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBUT0RPIChmaXgpOiBUaGlzIG1pZ2h0IGJlIGEgYmFkIGlkZWE/XG4gICAgICB0aGlzLm9uRXJyb3IoZXJyKVxuICAgIH1cbiAgfVxuXG4gIG9uRXJyb3IgKGVycm9yKSB7XG4gICAgdGhpcy5vbkZpbmFsbHkoKVxuXG4gICAgaWYgKGNoYW5uZWxzLmVycm9yLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICBjaGFubmVscy5lcnJvci5wdWJsaXNoKHsgcmVxdWVzdDogdGhpcywgZXJyb3IgfSlcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hYm9ydGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdGhpcy5hYm9ydGVkID0gdHJ1ZVxuXG4gICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uRXJyb3IoZXJyb3IpXG4gIH1cblxuICBvbkZpbmFsbHkgKCkge1xuICAgIGlmICh0aGlzLmVycm9ySGFuZGxlcikge1xuICAgICAgdGhpcy5ib2R5Lm9mZignZXJyb3InLCB0aGlzLmVycm9ySGFuZGxlcilcbiAgICAgIHRoaXMuZXJyb3JIYW5kbGVyID0gbnVsbFxuICAgIH1cblxuICAgIGlmICh0aGlzLmVuZEhhbmRsZXIpIHtcbiAgICAgIHRoaXMuYm9keS5vZmYoJ2VuZCcsIHRoaXMuZW5kSGFuZGxlcilcbiAgICAgIHRoaXMuZW5kSGFuZGxlciA9IG51bGxcbiAgICB9XG4gIH1cblxuICAvLyBUT0RPOiBhZGp1c3QgdG8gc3VwcG9ydCBIMlxuICBhZGRIZWFkZXIgKGtleSwgdmFsdWUpIHtcbiAgICBwcm9jZXNzSGVhZGVyKHRoaXMsIGtleSwgdmFsdWUpXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIHN0YXRpYyBba0hUVFAxQnVpbGRSZXF1ZXN0XSAob3JpZ2luLCBvcHRzLCBoYW5kbGVyKSB7XG4gICAgLy8gVE9ETzogTWlncmF0ZSBoZWFkZXIgcGFyc2luZyBoZXJlLCB0byBtYWtlIFJlcXVlc3RzXG4gICAgLy8gSFRUUCBhZ25vc3RpY1xuICAgIHJldHVybiBuZXcgUmVxdWVzdChvcmlnaW4sIG9wdHMsIGhhbmRsZXIpXG4gIH1cblxuICBzdGF0aWMgW2tIVFRQMkJ1aWxkUmVxdWVzdF0gKG9yaWdpbiwgb3B0cywgaGFuZGxlcikge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBvcHRzLmhlYWRlcnNcbiAgICBvcHRzID0geyAuLi5vcHRzLCBoZWFkZXJzOiBudWxsIH1cblxuICAgIGNvbnN0IHJlcXVlc3QgPSBuZXcgUmVxdWVzdChvcmlnaW4sIG9wdHMsIGhhbmRsZXIpXG5cbiAgICByZXF1ZXN0LmhlYWRlcnMgPSB7fVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICAgIGlmIChoZWFkZXJzLmxlbmd0aCAlIDIgIT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdoZWFkZXJzIGFycmF5IG11c3QgYmUgZXZlbicpXG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgcHJvY2Vzc0hlYWRlcihyZXF1ZXN0LCBoZWFkZXJzW2ldLCBoZWFkZXJzW2kgKyAxXSwgdHJ1ZSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGhlYWRlcnMgJiYgdHlwZW9mIGhlYWRlcnMgPT09ICdvYmplY3QnKSB7XG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoaGVhZGVycylcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBrZXkgPSBrZXlzW2ldXG4gICAgICAgIHByb2Nlc3NIZWFkZXIocmVxdWVzdCwga2V5LCBoZWFkZXJzW2tleV0sIHRydWUpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChoZWFkZXJzICE9IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaGVhZGVycyBtdXN0IGJlIGFuIG9iamVjdCBvciBhbiBhcnJheScpXG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcXVlc3RcbiAgfVxuXG4gIHN0YXRpYyBba0hUVFAyQ29weUhlYWRlcnNdIChyYXcpIHtcbiAgICBjb25zdCByYXdIZWFkZXJzID0gcmF3LnNwbGl0KCdcXHJcXG4nKVxuICAgIGNvbnN0IGhlYWRlcnMgPSB7fVxuXG4gICAgZm9yIChjb25zdCBoZWFkZXIgb2YgcmF3SGVhZGVycykge1xuICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0gaGVhZGVyLnNwbGl0KCc6ICcpXG5cbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlLmxlbmd0aCA9PT0gMCkgY29udGludWVcblxuICAgICAgaWYgKGhlYWRlcnNba2V5XSkgaGVhZGVyc1trZXldICs9IGAsJHt2YWx1ZX1gXG4gICAgICBlbHNlIGhlYWRlcnNba2V5XSA9IHZhbHVlXG4gICAgfVxuXG4gICAgcmV0dXJuIGhlYWRlcnNcbiAgfVxufVxuXG5mdW5jdGlvbiBwcm9jZXNzSGVhZGVyVmFsdWUgKGtleSwgdmFsLCBza2lwQXBwZW5kKSB7XG4gIGlmICh2YWwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoYGludmFsaWQgJHtrZXl9IGhlYWRlcmApXG4gIH1cblxuICB2YWwgPSB2YWwgIT0gbnVsbCA/IGAke3ZhbH1gIDogJydcblxuICBpZiAoaGVhZGVyQ2hhclJlZ2V4LmV4ZWModmFsKSAhPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihgaW52YWxpZCAke2tleX0gaGVhZGVyYClcbiAgfVxuXG4gIHJldHVybiBza2lwQXBwZW5kID8gdmFsIDogYCR7a2V5fTogJHt2YWx9XFxyXFxuYFxufVxuXG5mdW5jdGlvbiBwcm9jZXNzSGVhZGVyIChyZXF1ZXN0LCBrZXksIHZhbCwgc2tpcEFwcGVuZCA9IGZhbHNlKSB7XG4gIGlmICh2YWwgJiYgKHR5cGVvZiB2YWwgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbCkpKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKGBpbnZhbGlkICR7a2V5fSBoZWFkZXJgKVxuICB9IGVsc2UgaWYgKHZhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoXG4gICAgcmVxdWVzdC5ob3N0ID09PSBudWxsICYmXG4gICAga2V5Lmxlbmd0aCA9PT0gNCAmJlxuICAgIGtleS50b0xvd2VyQ2FzZSgpID09PSAnaG9zdCdcbiAgKSB7XG4gICAgaWYgKGhlYWRlckNoYXJSZWdleC5leGVjKHZhbCkgIT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihgaW52YWxpZCAke2tleX0gaGVhZGVyYClcbiAgICB9XG4gICAgLy8gQ29uc3VtZWQgYnkgQ2xpZW50XG4gICAgcmVxdWVzdC5ob3N0ID0gdmFsXG4gIH0gZWxzZSBpZiAoXG4gICAgcmVxdWVzdC5jb250ZW50TGVuZ3RoID09PSBudWxsICYmXG4gICAga2V5Lmxlbmd0aCA9PT0gMTQgJiZcbiAgICBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtbGVuZ3RoJ1xuICApIHtcbiAgICByZXF1ZXN0LmNvbnRlbnRMZW5ndGggPSBwYXJzZUludCh2YWwsIDEwKVxuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHJlcXVlc3QuY29udGVudExlbmd0aCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjb250ZW50LWxlbmd0aCBoZWFkZXInKVxuICAgIH1cbiAgfSBlbHNlIGlmIChcbiAgICByZXF1ZXN0LmNvbnRlbnRUeXBlID09PSBudWxsICYmXG4gICAga2V5Lmxlbmd0aCA9PT0gMTIgJiZcbiAgICBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtdHlwZSdcbiAgKSB7XG4gICAgcmVxdWVzdC5jb250ZW50VHlwZSA9IHZhbFxuICAgIGlmIChza2lwQXBwZW5kKSByZXF1ZXN0LmhlYWRlcnNba2V5XSA9IHByb2Nlc3NIZWFkZXJWYWx1ZShrZXksIHZhbCwgc2tpcEFwcGVuZClcbiAgICBlbHNlIHJlcXVlc3QuaGVhZGVycyArPSBwcm9jZXNzSGVhZGVyVmFsdWUoa2V5LCB2YWwpXG4gIH0gZWxzZSBpZiAoXG4gICAga2V5Lmxlbmd0aCA9PT0gMTcgJiZcbiAgICBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3RyYW5zZmVyLWVuY29kaW5nJ1xuICApIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgdHJhbnNmZXItZW5jb2RpbmcgaGVhZGVyJylcbiAgfSBlbHNlIGlmIChcbiAgICBrZXkubGVuZ3RoID09PSAxMCAmJlxuICAgIGtleS50b0xvd2VyQ2FzZSgpID09PSAnY29ubmVjdGlvbidcbiAgKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0eXBlb2YgdmFsID09PSAnc3RyaW5nJyA/IHZhbC50b0xvd2VyQ2FzZSgpIDogbnVsbFxuICAgIGlmICh2YWx1ZSAhPT0gJ2Nsb3NlJyAmJiB2YWx1ZSAhPT0gJ2tlZXAtYWxpdmUnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY29ubmVjdGlvbiBoZWFkZXInKVxuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09ICdjbG9zZScpIHtcbiAgICAgIHJlcXVlc3QucmVzZXQgPSB0cnVlXG4gICAgfVxuICB9IGVsc2UgaWYgKFxuICAgIGtleS5sZW5ndGggPT09IDEwICYmXG4gICAga2V5LnRvTG93ZXJDYXNlKCkgPT09ICdrZWVwLWFsaXZlJ1xuICApIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQga2VlcC1hbGl2ZSBoZWFkZXInKVxuICB9IGVsc2UgaWYgKFxuICAgIGtleS5sZW5ndGggPT09IDcgJiZcbiAgICBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3VwZ3JhZGUnXG4gICkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCB1cGdyYWRlIGhlYWRlcicpXG4gIH0gZWxzZSBpZiAoXG4gICAga2V5Lmxlbmd0aCA9PT0gNiAmJlxuICAgIGtleS50b0xvd2VyQ2FzZSgpID09PSAnZXhwZWN0J1xuICApIHtcbiAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkRXJyb3IoJ2V4cGVjdCBoZWFkZXIgbm90IHN1cHBvcnRlZCcpXG4gIH0gZWxzZSBpZiAodG9rZW5SZWdFeHAuZXhlYyhrZXkpID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGhlYWRlciBrZXknKVxuICB9IGVsc2Uge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChza2lwQXBwZW5kKSB7XG4gICAgICAgICAgaWYgKHJlcXVlc3QuaGVhZGVyc1trZXldKSByZXF1ZXN0LmhlYWRlcnNba2V5XSArPSBgLCR7cHJvY2Vzc0hlYWRlclZhbHVlKGtleSwgdmFsW2ldLCBza2lwQXBwZW5kKX1gXG4gICAgICAgICAgZWxzZSByZXF1ZXN0LmhlYWRlcnNba2V5XSA9IHByb2Nlc3NIZWFkZXJWYWx1ZShrZXksIHZhbFtpXSwgc2tpcEFwcGVuZClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXF1ZXN0LmhlYWRlcnMgKz0gcHJvY2Vzc0hlYWRlclZhbHVlKGtleSwgdmFsW2ldKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChza2lwQXBwZW5kKSByZXF1ZXN0LmhlYWRlcnNba2V5XSA9IHByb2Nlc3NIZWFkZXJWYWx1ZShrZXksIHZhbCwgc2tpcEFwcGVuZClcbiAgICAgIGVsc2UgcmVxdWVzdC5oZWFkZXJzICs9IHByb2Nlc3NIZWFkZXJWYWx1ZShrZXksIHZhbClcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBSZXF1ZXN0XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudHMnKVxuXG5jbGFzcyBEaXNwYXRjaGVyIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgZGlzcGF0Y2ggKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignbm90IGltcGxlbWVudGVkJylcbiAgfVxuXG4gIGNsb3NlICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBpbXBsZW1lbnRlZCcpXG4gIH1cblxuICBkZXN0cm95ICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBpbXBsZW1lbnRlZCcpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBEaXNwYXRjaGVyXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBEaXNwYXRjaGVyID0gcmVxdWlyZSgnLi9kaXNwYXRjaGVyJylcbmNvbnN0IHtcbiAgQ2xpZW50RGVzdHJveWVkRXJyb3IsXG4gIENsaWVudENsb3NlZEVycm9yLFxuICBJbnZhbGlkQXJndW1lbnRFcnJvclxufSA9IHJlcXVpcmUoJy4vY29yZS9lcnJvcnMnKVxuY29uc3QgeyBrRGVzdHJveSwga0Nsb3NlLCBrRGlzcGF0Y2gsIGtJbnRlcmNlcHRvcnMgfSA9IHJlcXVpcmUoJy4vY29yZS9zeW1ib2xzJylcblxuY29uc3Qga0Rlc3Ryb3llZCA9IFN5bWJvbCgnZGVzdHJveWVkJylcbmNvbnN0IGtDbG9zZWQgPSBTeW1ib2woJ2Nsb3NlZCcpXG5jb25zdCBrT25EZXN0cm95ZWQgPSBTeW1ib2woJ29uRGVzdHJveWVkJylcbmNvbnN0IGtPbkNsb3NlZCA9IFN5bWJvbCgnb25DbG9zZWQnKVxuY29uc3Qga0ludGVyY2VwdGVkRGlzcGF0Y2ggPSBTeW1ib2woJ0ludGVyY2VwdGVkIERpc3BhdGNoJylcblxuY2xhc3MgRGlzcGF0Y2hlckJhc2UgZXh0ZW5kcyBEaXNwYXRjaGVyIHtcbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXNba0Rlc3Ryb3llZF0gPSBmYWxzZVxuICAgIHRoaXNba09uRGVzdHJveWVkXSA9IG51bGxcbiAgICB0aGlzW2tDbG9zZWRdID0gZmFsc2VcbiAgICB0aGlzW2tPbkNsb3NlZF0gPSBbXVxuICB9XG5cbiAgZ2V0IGRlc3Ryb3llZCAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0Rlc3Ryb3llZF1cbiAgfVxuXG4gIGdldCBjbG9zZWQgKCkge1xuICAgIHJldHVybiB0aGlzW2tDbG9zZWRdXG4gIH1cblxuICBnZXQgaW50ZXJjZXB0b3JzICgpIHtcbiAgICByZXR1cm4gdGhpc1trSW50ZXJjZXB0b3JzXVxuICB9XG5cbiAgc2V0IGludGVyY2VwdG9ycyAobmV3SW50ZXJjZXB0b3JzKSB7XG4gICAgaWYgKG5ld0ludGVyY2VwdG9ycykge1xuICAgICAgZm9yIChsZXQgaSA9IG5ld0ludGVyY2VwdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBjb25zdCBpbnRlcmNlcHRvciA9IHRoaXNba0ludGVyY2VwdG9yc11baV1cbiAgICAgICAgaWYgKHR5cGVvZiBpbnRlcmNlcHRvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW50ZXJjZXB0b3IgbXVzdCBiZSBhbiBmdW5jdGlvbicpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzW2tJbnRlcmNlcHRvcnNdID0gbmV3SW50ZXJjZXB0b3JzXG4gIH1cblxuICBjbG9zZSAoY2FsbGJhY2spIHtcbiAgICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgdGhpcy5jbG9zZSgoZXJyLCBkYXRhKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGVyciA/IHJlamVjdChlcnIpIDogcmVzb2x2ZShkYXRhKVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY2FsbGJhY2snKVxuICAgIH1cblxuICAgIGlmICh0aGlzW2tEZXN0cm95ZWRdKSB7XG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhuZXcgQ2xpZW50RGVzdHJveWVkRXJyb3IoKSwgbnVsbCkpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAodGhpc1trQ2xvc2VkXSkge1xuICAgICAgaWYgKHRoaXNba09uQ2xvc2VkXSkge1xuICAgICAgICB0aGlzW2tPbkNsb3NlZF0ucHVzaChjYWxsYmFjaylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGNhbGxiYWNrKG51bGwsIG51bGwpKVxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpc1trQ2xvc2VkXSA9IHRydWVcbiAgICB0aGlzW2tPbkNsb3NlZF0ucHVzaChjYWxsYmFjaylcblxuICAgIGNvbnN0IG9uQ2xvc2VkID0gKCkgPT4ge1xuICAgICAgY29uc3QgY2FsbGJhY2tzID0gdGhpc1trT25DbG9zZWRdXG4gICAgICB0aGlzW2tPbkNsb3NlZF0gPSBudWxsXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNhbGxiYWNrcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjYWxsYmFja3NbaV0obnVsbCwgbnVsbClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTaG91bGQgbm90IGVycm9yLlxuICAgIHRoaXNba0Nsb3NlXSgpXG4gICAgICAudGhlbigoKSA9PiB0aGlzLmRlc3Ryb3koKSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgcXVldWVNaWNyb3Rhc2sob25DbG9zZWQpXG4gICAgICB9KVxuICB9XG5cbiAgZGVzdHJveSAoZXJyLCBjYWxsYmFjaykge1xuICAgIGlmICh0eXBlb2YgZXJyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjYWxsYmFjayA9IGVyclxuICAgICAgZXJyID0gbnVsbFxuICAgIH1cblxuICAgIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICB0aGlzLmRlc3Ryb3koZXJyLCAoZXJyLCBkYXRhKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGVyciA/IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBzaG91bGQgbmV2ZXIgZXJyb3IgKi8gcmVqZWN0KGVycikgOiByZXNvbHZlKGRhdGEpXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjYWxsYmFjaycpXG4gICAgfVxuXG4gICAgaWYgKHRoaXNba0Rlc3Ryb3llZF0pIHtcbiAgICAgIGlmICh0aGlzW2tPbkRlc3Ryb3llZF0pIHtcbiAgICAgICAgdGhpc1trT25EZXN0cm95ZWRdLnB1c2goY2FsbGJhY2spXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhudWxsLCBudWxsKSlcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghZXJyKSB7XG4gICAgICBlcnIgPSBuZXcgQ2xpZW50RGVzdHJveWVkRXJyb3IoKVxuICAgIH1cblxuICAgIHRoaXNba0Rlc3Ryb3llZF0gPSB0cnVlXG4gICAgdGhpc1trT25EZXN0cm95ZWRdID0gdGhpc1trT25EZXN0cm95ZWRdIHx8IFtdXG4gICAgdGhpc1trT25EZXN0cm95ZWRdLnB1c2goY2FsbGJhY2spXG5cbiAgICBjb25zdCBvbkRlc3Ryb3llZCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGNhbGxiYWNrcyA9IHRoaXNba09uRGVzdHJveWVkXVxuICAgICAgdGhpc1trT25EZXN0cm95ZWRdID0gbnVsbFxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjYWxsYmFja3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY2FsbGJhY2tzW2ldKG51bGwsIG51bGwpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2hvdWxkIG5vdCBlcnJvci5cbiAgICB0aGlzW2tEZXN0cm95XShlcnIpLnRoZW4oKCkgPT4ge1xuICAgICAgcXVldWVNaWNyb3Rhc2sob25EZXN0cm95ZWQpXG4gICAgfSlcbiAgfVxuXG4gIFtrSW50ZXJjZXB0ZWREaXNwYXRjaF0gKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBpZiAoIXRoaXNba0ludGVyY2VwdG9yc10gfHwgdGhpc1trSW50ZXJjZXB0b3JzXS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXNba0ludGVyY2VwdGVkRGlzcGF0Y2hdID0gdGhpc1trRGlzcGF0Y2hdXG4gICAgICByZXR1cm4gdGhpc1trRGlzcGF0Y2hdKG9wdHMsIGhhbmRsZXIpXG4gICAgfVxuXG4gICAgbGV0IGRpc3BhdGNoID0gdGhpc1trRGlzcGF0Y2hdLmJpbmQodGhpcylcbiAgICBmb3IgKGxldCBpID0gdGhpc1trSW50ZXJjZXB0b3JzXS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgZGlzcGF0Y2ggPSB0aGlzW2tJbnRlcmNlcHRvcnNdW2ldKGRpc3BhdGNoKVxuICAgIH1cbiAgICB0aGlzW2tJbnRlcmNlcHRlZERpc3BhdGNoXSA9IGRpc3BhdGNoXG4gICAgcmV0dXJuIGRpc3BhdGNoKG9wdHMsIGhhbmRsZXIpXG4gIH1cblxuICBkaXNwYXRjaCAob3B0cywgaGFuZGxlcikge1xuICAgIGlmICghaGFuZGxlciB8fCB0eXBlb2YgaGFuZGxlciAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaGFuZGxlciBtdXN0IGJlIGFuIG9iamVjdCcpXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGlmICghb3B0cyB8fCB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdvcHRzIG11c3QgYmUgYW4gb2JqZWN0LicpXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzW2tEZXN0cm95ZWRdIHx8IHRoaXNba09uRGVzdHJveWVkXSkge1xuICAgICAgICB0aHJvdyBuZXcgQ2xpZW50RGVzdHJveWVkRXJyb3IoKVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpc1trQ2xvc2VkXSkge1xuICAgICAgICB0aHJvdyBuZXcgQ2xpZW50Q2xvc2VkRXJyb3IoKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpc1trSW50ZXJjZXB0ZWREaXNwYXRjaF0ob3B0cywgaGFuZGxlcilcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICh0eXBlb2YgaGFuZGxlci5vbkVycm9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkVycm9yIG1ldGhvZCcpXG4gICAgICB9XG5cbiAgICAgIGhhbmRsZXIub25FcnJvcihlcnIpXG5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IERpc3BhdGNoZXJCYXNlXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBuZXQgPSByZXF1aXJlKCduZXQnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciwgQ29ubmVjdFRpbWVvdXRFcnJvciB9ID0gcmVxdWlyZSgnLi9lcnJvcnMnKVxuXG5sZXQgdGxzIC8vIGluY2x1ZGUgdGxzIGNvbmRpdGlvbmFsbHkgc2luY2UgaXQgaXMgbm90IGFsd2F5cyBhdmFpbGFibGVcblxuLy8gVE9ETzogc2Vzc2lvbiByZS11c2UgZG9lcyBub3Qgd2FpdCBmb3IgdGhlIGZpcnN0XG4vLyBjb25uZWN0aW9uIHRvIHJlc29sdmUgdGhlIHNlc3Npb24gYW5kIG1pZ2h0IHRoZXJlZm9yZVxuLy8gcmVzb2x2ZSB0aGUgc2FtZSBzZXJ2ZXJuYW1lIG11bHRpcGxlIHRpbWVzIGV2ZW4gd2hlblxuLy8gcmUtdXNlIGlzIGVuYWJsZWQuXG5cbmxldCBTZXNzaW9uQ2FjaGVcbi8vIEZJWE1FOiByZW1vdmUgd29ya2Fyb3VuZCB3aGVuIHRoZSBOb2RlIGJ1ZyBpcyBmaXhlZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2lzc3Vlcy80OTM0NCNpc3N1ZWNvbW1lbnQtMTc0MTc3NjMwOFxuaWYgKGdsb2JhbC5GaW5hbGl6YXRpb25SZWdpc3RyeSAmJiAhcHJvY2Vzcy5lbnYuTk9ERV9WOF9DT1ZFUkFHRSkge1xuICBTZXNzaW9uQ2FjaGUgPSBjbGFzcyBXZWFrU2Vzc2lvbkNhY2hlIHtcbiAgICBjb25zdHJ1Y3RvciAobWF4Q2FjaGVkU2Vzc2lvbnMpIHtcbiAgICAgIHRoaXMuX21heENhY2hlZFNlc3Npb25zID0gbWF4Q2FjaGVkU2Vzc2lvbnNcbiAgICAgIHRoaXMuX3Nlc3Npb25DYWNoZSA9IG5ldyBNYXAoKVxuICAgICAgdGhpcy5fc2Vzc2lvblJlZ2lzdHJ5ID0gbmV3IGdsb2JhbC5GaW5hbGl6YXRpb25SZWdpc3RyeSgoa2V5KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9zZXNzaW9uQ2FjaGUuc2l6ZSA8IHRoaXMuX21heENhY2hlZFNlc3Npb25zKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZWYgPSB0aGlzLl9zZXNzaW9uQ2FjaGUuZ2V0KGtleSlcbiAgICAgICAgaWYgKHJlZiAhPT0gdW5kZWZpbmVkICYmIHJlZi5kZXJlZigpID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLl9zZXNzaW9uQ2FjaGUuZGVsZXRlKGtleSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBnZXQgKHNlc3Npb25LZXkpIHtcbiAgICAgIGNvbnN0IHJlZiA9IHRoaXMuX3Nlc3Npb25DYWNoZS5nZXQoc2Vzc2lvbktleSlcbiAgICAgIHJldHVybiByZWYgPyByZWYuZGVyZWYoKSA6IG51bGxcbiAgICB9XG5cbiAgICBzZXQgKHNlc3Npb25LZXksIHNlc3Npb24pIHtcbiAgICAgIGlmICh0aGlzLl9tYXhDYWNoZWRTZXNzaW9ucyA9PT0gMCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgdGhpcy5fc2Vzc2lvbkNhY2hlLnNldChzZXNzaW9uS2V5LCBuZXcgV2Vha1JlZihzZXNzaW9uKSlcbiAgICAgIHRoaXMuX3Nlc3Npb25SZWdpc3RyeS5yZWdpc3RlcihzZXNzaW9uLCBzZXNzaW9uS2V5KVxuICAgIH1cbiAgfVxufSBlbHNlIHtcbiAgU2Vzc2lvbkNhY2hlID0gY2xhc3MgU2ltcGxlU2Vzc2lvbkNhY2hlIHtcbiAgICBjb25zdHJ1Y3RvciAobWF4Q2FjaGVkU2Vzc2lvbnMpIHtcbiAgICAgIHRoaXMuX21heENhY2hlZFNlc3Npb25zID0gbWF4Q2FjaGVkU2Vzc2lvbnNcbiAgICAgIHRoaXMuX3Nlc3Npb25DYWNoZSA9IG5ldyBNYXAoKVxuICAgIH1cblxuICAgIGdldCAoc2Vzc2lvbktleSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3Nlc3Npb25DYWNoZS5nZXQoc2Vzc2lvbktleSlcbiAgICB9XG5cbiAgICBzZXQgKHNlc3Npb25LZXksIHNlc3Npb24pIHtcbiAgICAgIGlmICh0aGlzLl9tYXhDYWNoZWRTZXNzaW9ucyA9PT0gMCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX3Nlc3Npb25DYWNoZS5zaXplID49IHRoaXMuX21heENhY2hlZFNlc3Npb25zKSB7XG4gICAgICAgIC8vIHJlbW92ZSB0aGUgb2xkZXN0IHNlc3Npb25cbiAgICAgICAgY29uc3QgeyB2YWx1ZTogb2xkZXN0S2V5IH0gPSB0aGlzLl9zZXNzaW9uQ2FjaGUua2V5cygpLm5leHQoKVxuICAgICAgICB0aGlzLl9zZXNzaW9uQ2FjaGUuZGVsZXRlKG9sZGVzdEtleSlcbiAgICAgIH1cblxuICAgICAgdGhpcy5fc2Vzc2lvbkNhY2hlLnNldChzZXNzaW9uS2V5LCBzZXNzaW9uKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBidWlsZENvbm5lY3RvciAoeyBhbGxvd0gyLCBtYXhDYWNoZWRTZXNzaW9ucywgc29ja2V0UGF0aCwgdGltZW91dCwgLi4ub3B0cyB9KSB7XG4gIGlmIChtYXhDYWNoZWRTZXNzaW9ucyAhPSBudWxsICYmICghTnVtYmVyLmlzSW50ZWdlcihtYXhDYWNoZWRTZXNzaW9ucykgfHwgbWF4Q2FjaGVkU2Vzc2lvbnMgPCAwKSkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignbWF4Q2FjaGVkU2Vzc2lvbnMgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgb3IgemVybycpXG4gIH1cblxuICBjb25zdCBvcHRpb25zID0geyBwYXRoOiBzb2NrZXRQYXRoLCAuLi5vcHRzIH1cbiAgY29uc3Qgc2Vzc2lvbkNhY2hlID0gbmV3IFNlc3Npb25DYWNoZShtYXhDYWNoZWRTZXNzaW9ucyA9PSBudWxsID8gMTAwIDogbWF4Q2FjaGVkU2Vzc2lvbnMpXG4gIHRpbWVvdXQgPSB0aW1lb3V0ID09IG51bGwgPyAxMGUzIDogdGltZW91dFxuICBhbGxvd0gyID0gYWxsb3dIMiAhPSBudWxsID8gYWxsb3dIMiA6IGZhbHNlXG4gIHJldHVybiBmdW5jdGlvbiBjb25uZWN0ICh7IGhvc3RuYW1lLCBob3N0LCBwcm90b2NvbCwgcG9ydCwgc2VydmVybmFtZSwgbG9jYWxBZGRyZXNzLCBodHRwU29ja2V0IH0sIGNhbGxiYWNrKSB7XG4gICAgbGV0IHNvY2tldFxuICAgIGlmIChwcm90b2NvbCA9PT0gJ2h0dHBzOicpIHtcbiAgICAgIGlmICghdGxzKSB7XG4gICAgICAgIHRscyA9IHJlcXVpcmUoJ3RscycpXG4gICAgICB9XG4gICAgICBzZXJ2ZXJuYW1lID0gc2VydmVybmFtZSB8fCBvcHRpb25zLnNlcnZlcm5hbWUgfHwgdXRpbC5nZXRTZXJ2ZXJOYW1lKGhvc3QpIHx8IG51bGxcblxuICAgICAgY29uc3Qgc2Vzc2lvbktleSA9IHNlcnZlcm5hbWUgfHwgaG9zdG5hbWVcbiAgICAgIGNvbnN0IHNlc3Npb24gPSBzZXNzaW9uQ2FjaGUuZ2V0KHNlc3Npb25LZXkpIHx8IG51bGxcblxuICAgICAgYXNzZXJ0KHNlc3Npb25LZXkpXG5cbiAgICAgIHNvY2tldCA9IHRscy5jb25uZWN0KHtcbiAgICAgICAgaGlnaFdhdGVyTWFyazogMTYzODQsIC8vIFRMUyBpbiBub2RlIGNhbid0IGhhdmUgYmlnZ2VyIEhXTSBhbnl3YXkuLi5cbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgc2VydmVybmFtZSxcbiAgICAgICAgc2Vzc2lvbixcbiAgICAgICAgbG9jYWxBZGRyZXNzLFxuICAgICAgICAvLyBUT0RPKEhUVFAvMik6IEFkZCBzdXBwb3J0IGZvciBoMmNcbiAgICAgICAgQUxQTlByb3RvY29sczogYWxsb3dIMiA/IFsnaHR0cC8xLjEnLCAnaDInXSA6IFsnaHR0cC8xLjEnXSxcbiAgICAgICAgc29ja2V0OiBodHRwU29ja2V0LCAvLyB1cGdyYWRlIHNvY2tldCBjb25uZWN0aW9uXG4gICAgICAgIHBvcnQ6IHBvcnQgfHwgNDQzLFxuICAgICAgICBob3N0OiBob3N0bmFtZVxuICAgICAgfSlcblxuICAgICAgc29ja2V0XG4gICAgICAgIC5vbignc2Vzc2lvbicsIGZ1bmN0aW9uIChzZXNzaW9uKSB7XG4gICAgICAgICAgLy8gVE9ETyAoZml4KTogQ2FuIGEgc2Vzc2lvbiBiZWNvbWUgaW52YWxpZCBvbmNlIGVzdGFibGlzaGVkPyBEb24ndCB0aGluayBzbz9cbiAgICAgICAgICBzZXNzaW9uQ2FjaGUuc2V0KHNlc3Npb25LZXksIHNlc3Npb24pXG4gICAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydCghaHR0cFNvY2tldCwgJ2h0dHBTb2NrZXQgY2FuIG9ubHkgYmUgc2VudCBvbiBUTFMgdXBkYXRlJylcbiAgICAgIHNvY2tldCA9IG5ldC5jb25uZWN0KHtcbiAgICAgICAgaGlnaFdhdGVyTWFyazogNjQgKiAxMDI0LCAvLyBTYW1lIGFzIG5vZGVqcyBmcyBzdHJlYW1zLlxuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICBsb2NhbEFkZHJlc3MsXG4gICAgICAgIHBvcnQ6IHBvcnQgfHwgODAsXG4gICAgICAgIGhvc3Q6IGhvc3RuYW1lXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIFNldCBUQ1Aga2VlcCBhbGl2ZSBvcHRpb25zIG9uIHRoZSBzb2NrZXQgaGVyZSBpbnN0ZWFkIG9mIGluIGNvbm5lY3QoKSBmb3IgdGhlIGNhc2Ugb2YgYXNzaWduaW5nIHRoZSBzb2NrZXRcbiAgICBpZiAob3B0aW9ucy5rZWVwQWxpdmUgPT0gbnVsbCB8fCBvcHRpb25zLmtlZXBBbGl2ZSkge1xuICAgICAgY29uc3Qga2VlcEFsaXZlSW5pdGlhbERlbGF5ID0gb3B0aW9ucy5rZWVwQWxpdmVJbml0aWFsRGVsYXkgPT09IHVuZGVmaW5lZCA/IDYwZTMgOiBvcHRpb25zLmtlZXBBbGl2ZUluaXRpYWxEZWxheVxuICAgICAgc29ja2V0LnNldEtlZXBBbGl2ZSh0cnVlLCBrZWVwQWxpdmVJbml0aWFsRGVsYXkpXG4gICAgfVxuXG4gICAgY29uc3QgY2FuY2VsVGltZW91dCA9IHNldHVwVGltZW91dCgoKSA9PiBvbkNvbm5lY3RUaW1lb3V0KHNvY2tldCksIHRpbWVvdXQpXG5cbiAgICBzb2NrZXRcbiAgICAgIC5zZXROb0RlbGF5KHRydWUpXG4gICAgICAub25jZShwcm90b2NvbCA9PT0gJ2h0dHBzOicgPyAnc2VjdXJlQ29ubmVjdCcgOiAnY29ubmVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY2FuY2VsVGltZW91dCgpXG5cbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgY29uc3QgY2IgPSBjYWxsYmFja1xuICAgICAgICAgIGNhbGxiYWNrID0gbnVsbFxuICAgICAgICAgIGNiKG51bGwsIHRoaXMpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAub24oJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBjYW5jZWxUaW1lb3V0KClcblxuICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICBjb25zdCBjYiA9IGNhbGxiYWNrXG4gICAgICAgICAgY2FsbGJhY2sgPSBudWxsXG4gICAgICAgICAgY2IoZXJyKVxuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgcmV0dXJuIHNvY2tldFxuICB9XG59XG5cbmZ1bmN0aW9uIHNldHVwVGltZW91dCAob25Db25uZWN0VGltZW91dCwgdGltZW91dCkge1xuICBpZiAoIXRpbWVvdXQpIHtcbiAgICByZXR1cm4gKCkgPT4ge31cbiAgfVxuXG4gIGxldCBzMSA9IG51bGxcbiAgbGV0IHMyID0gbnVsbFxuICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyBzZXRJbW1lZGlhdGUgaXMgYWRkZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2UgcHJpb3RvcmlzZSBzb2NrZXQgZXJyb3IgZXZlbnRzIG92ZXIgdGltZW91dHNcbiAgICBzMSA9IHNldEltbWVkaWF0ZSgoKSA9PiB7XG4gICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgICAgICAvLyBXaW5kb3dzIG5lZWRzIGFuIGV4dHJhIHNldEltbWVkaWF0ZSBwcm9iYWJseSBkdWUgdG8gaW1wbGVtZW50YXRpb24gZGlmZmVyZW5jZXMgaW4gdGhlIHNvY2tldCBsb2dpY1xuICAgICAgICBzMiA9IHNldEltbWVkaWF0ZSgoKSA9PiBvbkNvbm5lY3RUaW1lb3V0KCkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvbkNvbm5lY3RUaW1lb3V0KClcbiAgICAgIH1cbiAgICB9KVxuICB9LCB0aW1lb3V0KVxuICByZXR1cm4gKCkgPT4ge1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpXG4gICAgY2xlYXJJbW1lZGlhdGUoczEpXG4gICAgY2xlYXJJbW1lZGlhdGUoczIpXG4gIH1cbn1cblxuZnVuY3Rpb24gb25Db25uZWN0VGltZW91dCAoc29ja2V0KSB7XG4gIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBDb25uZWN0VGltZW91dEVycm9yKCkpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRDb25uZWN0b3JcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmVudW1Ub01hcCA9IHZvaWQgMDtcbmZ1bmN0aW9uIGVudW1Ub01hcChvYmopIHtcbiAgICBjb25zdCByZXMgPSB7fTtcbiAgICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IG9ialtrZXldO1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgcmVzW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXM7XG59XG5leHBvcnRzLmVudW1Ub01hcCA9IGVudW1Ub01hcDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlNQRUNJQUxfSEVBREVSUyA9IGV4cG9ydHMuSEVBREVSX1NUQVRFID0gZXhwb3J0cy5NSU5PUiA9IGV4cG9ydHMuTUFKT1IgPSBleHBvcnRzLkNPTk5FQ1RJT05fVE9LRU5fQ0hBUlMgPSBleHBvcnRzLkhFQURFUl9DSEFSUyA9IGV4cG9ydHMuVE9LRU4gPSBleHBvcnRzLlNUUklDVF9UT0tFTiA9IGV4cG9ydHMuSEVYID0gZXhwb3J0cy5VUkxfQ0hBUiA9IGV4cG9ydHMuU1RSSUNUX1VSTF9DSEFSID0gZXhwb3J0cy5VU0VSSU5GT19DSEFSUyA9IGV4cG9ydHMuTUFSSyA9IGV4cG9ydHMuQUxQSEFOVU0gPSBleHBvcnRzLk5VTSA9IGV4cG9ydHMuSEVYX01BUCA9IGV4cG9ydHMuTlVNX01BUCA9IGV4cG9ydHMuQUxQSEEgPSBleHBvcnRzLkZJTklTSCA9IGV4cG9ydHMuSF9NRVRIT0RfTUFQID0gZXhwb3J0cy5NRVRIT0RfTUFQID0gZXhwb3J0cy5NRVRIT0RTX1JUU1AgPSBleHBvcnRzLk1FVEhPRFNfSUNFID0gZXhwb3J0cy5NRVRIT0RTX0hUVFAgPSBleHBvcnRzLk1FVEhPRFMgPSBleHBvcnRzLkxFTklFTlRfRkxBR1MgPSBleHBvcnRzLkZMQUdTID0gZXhwb3J0cy5UWVBFID0gZXhwb3J0cy5FUlJPUiA9IHZvaWQgMDtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi91dGlsc1wiKTtcbi8vIEMgaGVhZGVyc1xudmFyIEVSUk9SO1xuKGZ1bmN0aW9uIChFUlJPUikge1xuICAgIEVSUk9SW0VSUk9SW1wiT0tcIl0gPSAwXSA9IFwiT0tcIjtcbiAgICBFUlJPUltFUlJPUltcIklOVEVSTkFMXCJdID0gMV0gPSBcIklOVEVSTkFMXCI7XG4gICAgRVJST1JbRVJST1JbXCJTVFJJQ1RcIl0gPSAyXSA9IFwiU1RSSUNUXCI7XG4gICAgRVJST1JbRVJST1JbXCJMRl9FWFBFQ1RFRFwiXSA9IDNdID0gXCJMRl9FWFBFQ1RFRFwiO1xuICAgIEVSUk9SW0VSUk9SW1wiVU5FWFBFQ1RFRF9DT05URU5UX0xFTkdUSFwiXSA9IDRdID0gXCJVTkVYUEVDVEVEX0NPTlRFTlRfTEVOR1RIXCI7XG4gICAgRVJST1JbRVJST1JbXCJDTE9TRURfQ09OTkVDVElPTlwiXSA9IDVdID0gXCJDTE9TRURfQ09OTkVDVElPTlwiO1xuICAgIEVSUk9SW0VSUk9SW1wiSU5WQUxJRF9NRVRIT0RcIl0gPSA2XSA9IFwiSU5WQUxJRF9NRVRIT0RcIjtcbiAgICBFUlJPUltFUlJPUltcIklOVkFMSURfVVJMXCJdID0gN10gPSBcIklOVkFMSURfVVJMXCI7XG4gICAgRVJST1JbRVJST1JbXCJJTlZBTElEX0NPTlNUQU5UXCJdID0gOF0gPSBcIklOVkFMSURfQ09OU1RBTlRcIjtcbiAgICBFUlJPUltFUlJPUltcIklOVkFMSURfVkVSU0lPTlwiXSA9IDldID0gXCJJTlZBTElEX1ZFUlNJT05cIjtcbiAgICBFUlJPUltFUlJPUltcIklOVkFMSURfSEVBREVSX1RPS0VOXCJdID0gMTBdID0gXCJJTlZBTElEX0hFQURFUl9UT0tFTlwiO1xuICAgIEVSUk9SW0VSUk9SW1wiSU5WQUxJRF9DT05URU5UX0xFTkdUSFwiXSA9IDExXSA9IFwiSU5WQUxJRF9DT05URU5UX0xFTkdUSFwiO1xuICAgIEVSUk9SW0VSUk9SW1wiSU5WQUxJRF9DSFVOS19TSVpFXCJdID0gMTJdID0gXCJJTlZBTElEX0NIVU5LX1NJWkVcIjtcbiAgICBFUlJPUltFUlJPUltcIklOVkFMSURfU1RBVFVTXCJdID0gMTNdID0gXCJJTlZBTElEX1NUQVRVU1wiO1xuICAgIEVSUk9SW0VSUk9SW1wiSU5WQUxJRF9FT0ZfU1RBVEVcIl0gPSAxNF0gPSBcIklOVkFMSURfRU9GX1NUQVRFXCI7XG4gICAgRVJST1JbRVJST1JbXCJJTlZBTElEX1RSQU5TRkVSX0VOQ09ESU5HXCJdID0gMTVdID0gXCJJTlZBTElEX1RSQU5TRkVSX0VOQ09ESU5HXCI7XG4gICAgRVJST1JbRVJST1JbXCJDQl9NRVNTQUdFX0JFR0lOXCJdID0gMTZdID0gXCJDQl9NRVNTQUdFX0JFR0lOXCI7XG4gICAgRVJST1JbRVJST1JbXCJDQl9IRUFERVJTX0NPTVBMRVRFXCJdID0gMTddID0gXCJDQl9IRUFERVJTX0NPTVBMRVRFXCI7XG4gICAgRVJST1JbRVJST1JbXCJDQl9NRVNTQUdFX0NPTVBMRVRFXCJdID0gMThdID0gXCJDQl9NRVNTQUdFX0NPTVBMRVRFXCI7XG4gICAgRVJST1JbRVJST1JbXCJDQl9DSFVOS19IRUFERVJcIl0gPSAxOV0gPSBcIkNCX0NIVU5LX0hFQURFUlwiO1xuICAgIEVSUk9SW0VSUk9SW1wiQ0JfQ0hVTktfQ09NUExFVEVcIl0gPSAyMF0gPSBcIkNCX0NIVU5LX0NPTVBMRVRFXCI7XG4gICAgRVJST1JbRVJST1JbXCJQQVVTRURcIl0gPSAyMV0gPSBcIlBBVVNFRFwiO1xuICAgIEVSUk9SW0VSUk9SW1wiUEFVU0VEX1VQR1JBREVcIl0gPSAyMl0gPSBcIlBBVVNFRF9VUEdSQURFXCI7XG4gICAgRVJST1JbRVJST1JbXCJQQVVTRURfSDJfVVBHUkFERVwiXSA9IDIzXSA9IFwiUEFVU0VEX0gyX1VQR1JBREVcIjtcbiAgICBFUlJPUltFUlJPUltcIlVTRVJcIl0gPSAyNF0gPSBcIlVTRVJcIjtcbn0pKEVSUk9SID0gZXhwb3J0cy5FUlJPUiB8fCAoZXhwb3J0cy5FUlJPUiA9IHt9KSk7XG52YXIgVFlQRTtcbihmdW5jdGlvbiAoVFlQRSkge1xuICAgIFRZUEVbVFlQRVtcIkJPVEhcIl0gPSAwXSA9IFwiQk9USFwiO1xuICAgIFRZUEVbVFlQRVtcIlJFUVVFU1RcIl0gPSAxXSA9IFwiUkVRVUVTVFwiO1xuICAgIFRZUEVbVFlQRVtcIlJFU1BPTlNFXCJdID0gMl0gPSBcIlJFU1BPTlNFXCI7XG59KShUWVBFID0gZXhwb3J0cy5UWVBFIHx8IChleHBvcnRzLlRZUEUgPSB7fSkpO1xudmFyIEZMQUdTO1xuKGZ1bmN0aW9uIChGTEFHUykge1xuICAgIEZMQUdTW0ZMQUdTW1wiQ09OTkVDVElPTl9LRUVQX0FMSVZFXCJdID0gMV0gPSBcIkNPTk5FQ1RJT05fS0VFUF9BTElWRVwiO1xuICAgIEZMQUdTW0ZMQUdTW1wiQ09OTkVDVElPTl9DTE9TRVwiXSA9IDJdID0gXCJDT05ORUNUSU9OX0NMT1NFXCI7XG4gICAgRkxBR1NbRkxBR1NbXCJDT05ORUNUSU9OX1VQR1JBREVcIl0gPSA0XSA9IFwiQ09OTkVDVElPTl9VUEdSQURFXCI7XG4gICAgRkxBR1NbRkxBR1NbXCJDSFVOS0VEXCJdID0gOF0gPSBcIkNIVU5LRURcIjtcbiAgICBGTEFHU1tGTEFHU1tcIlVQR1JBREVcIl0gPSAxNl0gPSBcIlVQR1JBREVcIjtcbiAgICBGTEFHU1tGTEFHU1tcIkNPTlRFTlRfTEVOR1RIXCJdID0gMzJdID0gXCJDT05URU5UX0xFTkdUSFwiO1xuICAgIEZMQUdTW0ZMQUdTW1wiU0tJUEJPRFlcIl0gPSA2NF0gPSBcIlNLSVBCT0RZXCI7XG4gICAgRkxBR1NbRkxBR1NbXCJUUkFJTElOR1wiXSA9IDEyOF0gPSBcIlRSQUlMSU5HXCI7XG4gICAgLy8gMSA8PCA4IGlzIHVudXNlZFxuICAgIEZMQUdTW0ZMQUdTW1wiVFJBTlNGRVJfRU5DT0RJTkdcIl0gPSA1MTJdID0gXCJUUkFOU0ZFUl9FTkNPRElOR1wiO1xufSkoRkxBR1MgPSBleHBvcnRzLkZMQUdTIHx8IChleHBvcnRzLkZMQUdTID0ge30pKTtcbnZhciBMRU5JRU5UX0ZMQUdTO1xuKGZ1bmN0aW9uIChMRU5JRU5UX0ZMQUdTKSB7XG4gICAgTEVOSUVOVF9GTEFHU1tMRU5JRU5UX0ZMQUdTW1wiSEVBREVSU1wiXSA9IDFdID0gXCJIRUFERVJTXCI7XG4gICAgTEVOSUVOVF9GTEFHU1tMRU5JRU5UX0ZMQUdTW1wiQ0hVTktFRF9MRU5HVEhcIl0gPSAyXSA9IFwiQ0hVTktFRF9MRU5HVEhcIjtcbiAgICBMRU5JRU5UX0ZMQUdTW0xFTklFTlRfRkxBR1NbXCJLRUVQX0FMSVZFXCJdID0gNF0gPSBcIktFRVBfQUxJVkVcIjtcbn0pKExFTklFTlRfRkxBR1MgPSBleHBvcnRzLkxFTklFTlRfRkxBR1MgfHwgKGV4cG9ydHMuTEVOSUVOVF9GTEFHUyA9IHt9KSk7XG52YXIgTUVUSE9EUztcbihmdW5jdGlvbiAoTUVUSE9EUykge1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIkRFTEVURVwiXSA9IDBdID0gXCJERUxFVEVcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJHRVRcIl0gPSAxXSA9IFwiR0VUXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiSEVBRFwiXSA9IDJdID0gXCJIRUFEXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiUE9TVFwiXSA9IDNdID0gXCJQT1NUXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiUFVUXCJdID0gNF0gPSBcIlBVVFwiO1xuICAgIC8qIHBhdGhvbG9naWNhbCAqL1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIkNPTk5FQ1RcIl0gPSA1XSA9IFwiQ09OTkVDVFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIk9QVElPTlNcIl0gPSA2XSA9IFwiT1BUSU9OU1wiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlRSQUNFXCJdID0gN10gPSBcIlRSQUNFXCI7XG4gICAgLyogV2ViREFWICovXG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiQ09QWVwiXSA9IDhdID0gXCJDT1BZXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiTE9DS1wiXSA9IDldID0gXCJMT0NLXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiTUtDT0xcIl0gPSAxMF0gPSBcIk1LQ09MXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiTU9WRVwiXSA9IDExXSA9IFwiTU9WRVwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlBST1BGSU5EXCJdID0gMTJdID0gXCJQUk9QRklORFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlBST1BQQVRDSFwiXSA9IDEzXSA9IFwiUFJPUFBBVENIXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiU0VBUkNIXCJdID0gMTRdID0gXCJTRUFSQ0hcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJVTkxPQ0tcIl0gPSAxNV0gPSBcIlVOTE9DS1wiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIkJJTkRcIl0gPSAxNl0gPSBcIkJJTkRcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJSRUJJTkRcIl0gPSAxN10gPSBcIlJFQklORFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlVOQklORFwiXSA9IDE4XSA9IFwiVU5CSU5EXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiQUNMXCJdID0gMTldID0gXCJBQ0xcIjtcbiAgICAvKiBzdWJ2ZXJzaW9uICovXG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiUkVQT1JUXCJdID0gMjBdID0gXCJSRVBPUlRcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJNS0FDVElWSVRZXCJdID0gMjFdID0gXCJNS0FDVElWSVRZXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiQ0hFQ0tPVVRcIl0gPSAyMl0gPSBcIkNIRUNLT1VUXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiTUVSR0VcIl0gPSAyM10gPSBcIk1FUkdFXCI7XG4gICAgLyogdXBucCAqL1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIk0tU0VBUkNIXCJdID0gMjRdID0gXCJNLVNFQVJDSFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIk5PVElGWVwiXSA9IDI1XSA9IFwiTk9USUZZXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiU1VCU0NSSUJFXCJdID0gMjZdID0gXCJTVUJTQ1JJQkVcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJVTlNVQlNDUklCRVwiXSA9IDI3XSA9IFwiVU5TVUJTQ1JJQkVcIjtcbiAgICAvKiBSRkMtNTc4OSAqL1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlBBVENIXCJdID0gMjhdID0gXCJQQVRDSFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlBVUkdFXCJdID0gMjldID0gXCJQVVJHRVwiO1xuICAgIC8qIENhbERBViAqL1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIk1LQ0FMRU5EQVJcIl0gPSAzMF0gPSBcIk1LQ0FMRU5EQVJcIjtcbiAgICAvKiBSRkMtMjA2OCwgc2VjdGlvbiAxOS42LjEuMiAqL1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIkxJTktcIl0gPSAzMV0gPSBcIkxJTktcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJVTkxJTktcIl0gPSAzMl0gPSBcIlVOTElOS1wiO1xuICAgIC8qIGljZWNhc3QgKi9cbiAgICBNRVRIT0RTW01FVEhPRFNbXCJTT1VSQ0VcIl0gPSAzM10gPSBcIlNPVVJDRVwiO1xuICAgIC8qIFJGQy03NTQwLCBzZWN0aW9uIDExLjYgKi9cbiAgICBNRVRIT0RTW01FVEhPRFNbXCJQUklcIl0gPSAzNF0gPSBcIlBSSVwiO1xuICAgIC8qIFJGQy0yMzI2IFJUU1AgKi9cbiAgICBNRVRIT0RTW01FVEhPRFNbXCJERVNDUklCRVwiXSA9IDM1XSA9IFwiREVTQ1JJQkVcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJBTk5PVU5DRVwiXSA9IDM2XSA9IFwiQU5OT1VOQ0VcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJTRVRVUFwiXSA9IDM3XSA9IFwiU0VUVVBcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJQTEFZXCJdID0gMzhdID0gXCJQTEFZXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiUEFVU0VcIl0gPSAzOV0gPSBcIlBBVVNFXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiVEVBUkRPV05cIl0gPSA0MF0gPSBcIlRFQVJET1dOXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiR0VUX1BBUkFNRVRFUlwiXSA9IDQxXSA9IFwiR0VUX1BBUkFNRVRFUlwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlNFVF9QQVJBTUVURVJcIl0gPSA0Ml0gPSBcIlNFVF9QQVJBTUVURVJcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJSRURJUkVDVFwiXSA9IDQzXSA9IFwiUkVESVJFQ1RcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJSRUNPUkRcIl0gPSA0NF0gPSBcIlJFQ09SRFwiO1xuICAgIC8qIFJBT1AgKi9cbiAgICBNRVRIT0RTW01FVEhPRFNbXCJGTFVTSFwiXSA9IDQ1XSA9IFwiRkxVU0hcIjtcbn0pKE1FVEhPRFMgPSBleHBvcnRzLk1FVEhPRFMgfHwgKGV4cG9ydHMuTUVUSE9EUyA9IHt9KSk7XG5leHBvcnRzLk1FVEhPRFNfSFRUUCA9IFtcbiAgICBNRVRIT0RTLkRFTEVURSxcbiAgICBNRVRIT0RTLkdFVCxcbiAgICBNRVRIT0RTLkhFQUQsXG4gICAgTUVUSE9EUy5QT1NULFxuICAgIE1FVEhPRFMuUFVULFxuICAgIE1FVEhPRFMuQ09OTkVDVCxcbiAgICBNRVRIT0RTLk9QVElPTlMsXG4gICAgTUVUSE9EUy5UUkFDRSxcbiAgICBNRVRIT0RTLkNPUFksXG4gICAgTUVUSE9EUy5MT0NLLFxuICAgIE1FVEhPRFMuTUtDT0wsXG4gICAgTUVUSE9EUy5NT1ZFLFxuICAgIE1FVEhPRFMuUFJPUEZJTkQsXG4gICAgTUVUSE9EUy5QUk9QUEFUQ0gsXG4gICAgTUVUSE9EUy5TRUFSQ0gsXG4gICAgTUVUSE9EUy5VTkxPQ0ssXG4gICAgTUVUSE9EUy5CSU5ELFxuICAgIE1FVEhPRFMuUkVCSU5ELFxuICAgIE1FVEhPRFMuVU5CSU5ELFxuICAgIE1FVEhPRFMuQUNMLFxuICAgIE1FVEhPRFMuUkVQT1JULFxuICAgIE1FVEhPRFMuTUtBQ1RJVklUWSxcbiAgICBNRVRIT0RTLkNIRUNLT1VULFxuICAgIE1FVEhPRFMuTUVSR0UsXG4gICAgTUVUSE9EU1snTS1TRUFSQ0gnXSxcbiAgICBNRVRIT0RTLk5PVElGWSxcbiAgICBNRVRIT0RTLlNVQlNDUklCRSxcbiAgICBNRVRIT0RTLlVOU1VCU0NSSUJFLFxuICAgIE1FVEhPRFMuUEFUQ0gsXG4gICAgTUVUSE9EUy5QVVJHRSxcbiAgICBNRVRIT0RTLk1LQ0FMRU5EQVIsXG4gICAgTUVUSE9EUy5MSU5LLFxuICAgIE1FVEhPRFMuVU5MSU5LLFxuICAgIE1FVEhPRFMuUFJJLFxuICAgIC8vIFRPRE8oaW5kdXRueSk6IHNob3VsZCB3ZSBhbGxvdyBpdCB3aXRoIEhUVFA/XG4gICAgTUVUSE9EUy5TT1VSQ0UsXG5dO1xuZXhwb3J0cy5NRVRIT0RTX0lDRSA9IFtcbiAgICBNRVRIT0RTLlNPVVJDRSxcbl07XG5leHBvcnRzLk1FVEhPRFNfUlRTUCA9IFtcbiAgICBNRVRIT0RTLk9QVElPTlMsXG4gICAgTUVUSE9EUy5ERVNDUklCRSxcbiAgICBNRVRIT0RTLkFOTk9VTkNFLFxuICAgIE1FVEhPRFMuU0VUVVAsXG4gICAgTUVUSE9EUy5QTEFZLFxuICAgIE1FVEhPRFMuUEFVU0UsXG4gICAgTUVUSE9EUy5URUFSRE9XTixcbiAgICBNRVRIT0RTLkdFVF9QQVJBTUVURVIsXG4gICAgTUVUSE9EUy5TRVRfUEFSQU1FVEVSLFxuICAgIE1FVEhPRFMuUkVESVJFQ1QsXG4gICAgTUVUSE9EUy5SRUNPUkQsXG4gICAgTUVUSE9EUy5GTFVTSCxcbiAgICAvLyBGb3IgQWlyUGxheVxuICAgIE1FVEhPRFMuR0VULFxuICAgIE1FVEhPRFMuUE9TVCxcbl07XG5leHBvcnRzLk1FVEhPRF9NQVAgPSB1dGlsc18xLmVudW1Ub01hcChNRVRIT0RTKTtcbmV4cG9ydHMuSF9NRVRIT0RfTUFQID0ge307XG5PYmplY3Qua2V5cyhleHBvcnRzLk1FVEhPRF9NQVApLmZvckVhY2goKGtleSkgPT4ge1xuICAgIGlmICgvXkgvLnRlc3Qoa2V5KSkge1xuICAgICAgICBleHBvcnRzLkhfTUVUSE9EX01BUFtrZXldID0gZXhwb3J0cy5NRVRIT0RfTUFQW2tleV07XG4gICAgfVxufSk7XG52YXIgRklOSVNIO1xuKGZ1bmN0aW9uIChGSU5JU0gpIHtcbiAgICBGSU5JU0hbRklOSVNIW1wiU0FGRVwiXSA9IDBdID0gXCJTQUZFXCI7XG4gICAgRklOSVNIW0ZJTklTSFtcIlNBRkVfV0lUSF9DQlwiXSA9IDFdID0gXCJTQUZFX1dJVEhfQ0JcIjtcbiAgICBGSU5JU0hbRklOSVNIW1wiVU5TQUZFXCJdID0gMl0gPSBcIlVOU0FGRVwiO1xufSkoRklOSVNIID0gZXhwb3J0cy5GSU5JU0ggfHwgKGV4cG9ydHMuRklOSVNIID0ge30pKTtcbmV4cG9ydHMuQUxQSEEgPSBbXTtcbmZvciAobGV0IGkgPSAnQScuY2hhckNvZGVBdCgwKTsgaSA8PSAnWicuY2hhckNvZGVBdCgwKTsgaSsrKSB7XG4gICAgLy8gVXBwZXIgY2FzZVxuICAgIGV4cG9ydHMuQUxQSEEucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGkpKTtcbiAgICAvLyBMb3dlciBjYXNlXG4gICAgZXhwb3J0cy5BTFBIQS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoaSArIDB4MjApKTtcbn1cbmV4cG9ydHMuTlVNX01BUCA9IHtcbiAgICAwOiAwLCAxOiAxLCAyOiAyLCAzOiAzLCA0OiA0LFxuICAgIDU6IDUsIDY6IDYsIDc6IDcsIDg6IDgsIDk6IDksXG59O1xuZXhwb3J0cy5IRVhfTUFQID0ge1xuICAgIDA6IDAsIDE6IDEsIDI6IDIsIDM6IDMsIDQ6IDQsXG4gICAgNTogNSwgNjogNiwgNzogNywgODogOCwgOTogOSxcbiAgICBBOiAwWEEsIEI6IDBYQiwgQzogMFhDLCBEOiAwWEQsIEU6IDBYRSwgRjogMFhGLFxuICAgIGE6IDB4YSwgYjogMHhiLCBjOiAweGMsIGQ6IDB4ZCwgZTogMHhlLCBmOiAweGYsXG59O1xuZXhwb3J0cy5OVU0gPSBbXG4gICAgJzAnLCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsICc4JywgJzknLFxuXTtcbmV4cG9ydHMuQUxQSEFOVU0gPSBleHBvcnRzLkFMUEhBLmNvbmNhdChleHBvcnRzLk5VTSk7XG5leHBvcnRzLk1BUksgPSBbJy0nLCAnXycsICcuJywgJyEnLCAnficsICcqJywgJ1xcJycsICcoJywgJyknXTtcbmV4cG9ydHMuVVNFUklORk9fQ0hBUlMgPSBleHBvcnRzLkFMUEhBTlVNXG4gICAgLmNvbmNhdChleHBvcnRzLk1BUkspXG4gICAgLmNvbmNhdChbJyUnLCAnOycsICc6JywgJyYnLCAnPScsICcrJywgJyQnLCAnLCddKTtcbi8vIFRPRE8oaW5kdXRueSk6IHVzZSBSRkNcbmV4cG9ydHMuU1RSSUNUX1VSTF9DSEFSID0gW1xuICAgICchJywgJ1wiJywgJyQnLCAnJScsICcmJywgJ1xcJycsXG4gICAgJygnLCAnKScsICcqJywgJysnLCAnLCcsICctJywgJy4nLCAnLycsXG4gICAgJzonLCAnOycsICc8JywgJz0nLCAnPicsXG4gICAgJ0AnLCAnWycsICdcXFxcJywgJ10nLCAnXicsICdfJyxcbiAgICAnYCcsXG4gICAgJ3snLCAnfCcsICd9JywgJ34nLFxuXS5jb25jYXQoZXhwb3J0cy5BTFBIQU5VTSk7XG5leHBvcnRzLlVSTF9DSEFSID0gZXhwb3J0cy5TVFJJQ1RfVVJMX0NIQVJcbiAgICAuY29uY2F0KFsnXFx0JywgJ1xcZiddKTtcbi8vIEFsbCBjaGFyYWN0ZXJzIHdpdGggMHg4MCBiaXQgc2V0IHRvIDFcbmZvciAobGV0IGkgPSAweDgwOyBpIDw9IDB4ZmY7IGkrKykge1xuICAgIGV4cG9ydHMuVVJMX0NIQVIucHVzaChpKTtcbn1cbmV4cG9ydHMuSEVYID0gZXhwb3J0cy5OVU0uY29uY2F0KFsnYScsICdiJywgJ2MnLCAnZCcsICdlJywgJ2YnLCAnQScsICdCJywgJ0MnLCAnRCcsICdFJywgJ0YnXSk7XG4vKiBUb2tlbnMgYXMgZGVmaW5lZCBieSByZmMgMjYxNi4gQWxzbyBsb3dlcmNhc2VzIHRoZW0uXG4gKiAgICAgICAgdG9rZW4gICAgICAgPSAxKjxhbnkgQ0hBUiBleGNlcHQgQ1RMcyBvciBzZXBhcmF0b3JzPlxuICogICAgIHNlcGFyYXRvcnMgICAgID0gXCIoXCIgfCBcIilcIiB8IFwiPFwiIHwgXCI+XCIgfCBcIkBcIlxuICogICAgICAgICAgICAgICAgICAgIHwgXCIsXCIgfCBcIjtcIiB8IFwiOlwiIHwgXCJcXFwiIHwgPFwiPlxuICogICAgICAgICAgICAgICAgICAgIHwgXCIvXCIgfCBcIltcIiB8IFwiXVwiIHwgXCI/XCIgfCBcIj1cIlxuICogICAgICAgICAgICAgICAgICAgIHwgXCJ7XCIgfCBcIn1cIiB8IFNQIHwgSFRcbiAqL1xuZXhwb3J0cy5TVFJJQ1RfVE9LRU4gPSBbXG4gICAgJyEnLCAnIycsICckJywgJyUnLCAnJicsICdcXCcnLFxuICAgICcqJywgJysnLCAnLScsICcuJyxcbiAgICAnXicsICdfJywgJ2AnLFxuICAgICd8JywgJ34nLFxuXS5jb25jYXQoZXhwb3J0cy5BTFBIQU5VTSk7XG5leHBvcnRzLlRPS0VOID0gZXhwb3J0cy5TVFJJQ1RfVE9LRU4uY29uY2F0KFsnICddKTtcbi8qXG4gKiBWZXJpZnkgdGhhdCBhIGNoYXIgaXMgYSB2YWxpZCB2aXNpYmxlIChwcmludGFibGUpIFVTLUFTQ0lJXG4gKiBjaGFyYWN0ZXIgb3IgJXg4MC1GRlxuICovXG5leHBvcnRzLkhFQURFUl9DSEFSUyA9IFsnXFx0J107XG5mb3IgKGxldCBpID0gMzI7IGkgPD0gMjU1OyBpKyspIHtcbiAgICBpZiAoaSAhPT0gMTI3KSB7XG4gICAgICAgIGV4cG9ydHMuSEVBREVSX0NIQVJTLnB1c2goaSk7XG4gICAgfVxufVxuLy8gJywnID0gXFx4NDRcbmV4cG9ydHMuQ09OTkVDVElPTl9UT0tFTl9DSEFSUyA9IGV4cG9ydHMuSEVBREVSX0NIQVJTLmZpbHRlcigoYykgPT4gYyAhPT0gNDQpO1xuZXhwb3J0cy5NQUpPUiA9IGV4cG9ydHMuTlVNX01BUDtcbmV4cG9ydHMuTUlOT1IgPSBleHBvcnRzLk1BSk9SO1xudmFyIEhFQURFUl9TVEFURTtcbihmdW5jdGlvbiAoSEVBREVSX1NUQVRFKSB7XG4gICAgSEVBREVSX1NUQVRFW0hFQURFUl9TVEFURVtcIkdFTkVSQUxcIl0gPSAwXSA9IFwiR0VORVJBTFwiO1xuICAgIEhFQURFUl9TVEFURVtIRUFERVJfU1RBVEVbXCJDT05ORUNUSU9OXCJdID0gMV0gPSBcIkNPTk5FQ1RJT05cIjtcbiAgICBIRUFERVJfU1RBVEVbSEVBREVSX1NUQVRFW1wiQ09OVEVOVF9MRU5HVEhcIl0gPSAyXSA9IFwiQ09OVEVOVF9MRU5HVEhcIjtcbiAgICBIRUFERVJfU1RBVEVbSEVBREVSX1NUQVRFW1wiVFJBTlNGRVJfRU5DT0RJTkdcIl0gPSAzXSA9IFwiVFJBTlNGRVJfRU5DT0RJTkdcIjtcbiAgICBIRUFERVJfU1RBVEVbSEVBREVSX1NUQVRFW1wiVVBHUkFERVwiXSA9IDRdID0gXCJVUEdSQURFXCI7XG4gICAgSEVBREVSX1NUQVRFW0hFQURFUl9TVEFURVtcIkNPTk5FQ1RJT05fS0VFUF9BTElWRVwiXSA9IDVdID0gXCJDT05ORUNUSU9OX0tFRVBfQUxJVkVcIjtcbiAgICBIRUFERVJfU1RBVEVbSEVBREVSX1NUQVRFW1wiQ09OTkVDVElPTl9DTE9TRVwiXSA9IDZdID0gXCJDT05ORUNUSU9OX0NMT1NFXCI7XG4gICAgSEVBREVSX1NUQVRFW0hFQURFUl9TVEFURVtcIkNPTk5FQ1RJT05fVVBHUkFERVwiXSA9IDddID0gXCJDT05ORUNUSU9OX1VQR1JBREVcIjtcbiAgICBIRUFERVJfU1RBVEVbSEVBREVSX1NUQVRFW1wiVFJBTlNGRVJfRU5DT0RJTkdfQ0hVTktFRFwiXSA9IDhdID0gXCJUUkFOU0ZFUl9FTkNPRElOR19DSFVOS0VEXCI7XG59KShIRUFERVJfU1RBVEUgPSBleHBvcnRzLkhFQURFUl9TVEFURSB8fCAoZXhwb3J0cy5IRUFERVJfU1RBVEUgPSB7fSkpO1xuZXhwb3J0cy5TUEVDSUFMX0hFQURFUlMgPSB7XG4gICAgJ2Nvbm5lY3Rpb24nOiBIRUFERVJfU1RBVEUuQ09OTkVDVElPTixcbiAgICAnY29udGVudC1sZW5ndGgnOiBIRUFERVJfU1RBVEUuQ09OVEVOVF9MRU5HVEgsXG4gICAgJ3Byb3h5LWNvbm5lY3Rpb24nOiBIRUFERVJfU1RBVEUuQ09OTkVDVElPTixcbiAgICAndHJhbnNmZXItZW5jb2RpbmcnOiBIRUFERVJfU1RBVEUuVFJBTlNGRVJfRU5DT0RJTkcsXG4gICAgJ3VwZ3JhZGUnOiBIRUFERVJfU1RBVEUuVVBHUkFERSxcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25zdGFudHMuanMubWFwIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGtCb2R5VXNlZCB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCBFRSA9IHJlcXVpcmUoJ2V2ZW50cycpXG5cbmNvbnN0IHJlZGlyZWN0YWJsZVN0YXR1c0NvZGVzID0gWzMwMCwgMzAxLCAzMDIsIDMwMywgMzA3LCAzMDhdXG5cbmNvbnN0IGtCb2R5ID0gU3ltYm9sKCdib2R5JylcblxuY2xhc3MgQm9keUFzeW5jSXRlcmFibGUge1xuICBjb25zdHJ1Y3RvciAoYm9keSkge1xuICAgIHRoaXNba0JvZHldID0gYm9keVxuICAgIHRoaXNba0JvZHlVc2VkXSA9IGZhbHNlXG4gIH1cblxuICBhc3luYyAqIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gKCkge1xuICAgIGFzc2VydCghdGhpc1trQm9keVVzZWRdLCAnZGlzdHVyYmVkJylcbiAgICB0aGlzW2tCb2R5VXNlZF0gPSB0cnVlXG4gICAgeWllbGQgKiB0aGlzW2tCb2R5XVxuICB9XG59XG5cbmNsYXNzIFJlZGlyZWN0SGFuZGxlciB7XG4gIGNvbnN0cnVjdG9yIChkaXNwYXRjaCwgbWF4UmVkaXJlY3Rpb25zLCBvcHRzLCBoYW5kbGVyKSB7XG4gICAgaWYgKG1heFJlZGlyZWN0aW9ucyAhPSBudWxsICYmICghTnVtYmVyLmlzSW50ZWdlcihtYXhSZWRpcmVjdGlvbnMpIHx8IG1heFJlZGlyZWN0aW9ucyA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ21heFJlZGlyZWN0aW9ucyBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJylcbiAgICB9XG5cbiAgICB1dGlsLnZhbGlkYXRlSGFuZGxlcihoYW5kbGVyLCBvcHRzLm1ldGhvZCwgb3B0cy51cGdyYWRlKVxuXG4gICAgdGhpcy5kaXNwYXRjaCA9IGRpc3BhdGNoXG4gICAgdGhpcy5sb2NhdGlvbiA9IG51bGxcbiAgICB0aGlzLmFib3J0ID0gbnVsbFxuICAgIHRoaXMub3B0cyA9IHsgLi4ub3B0cywgbWF4UmVkaXJlY3Rpb25zOiAwIH0gLy8gb3B0cyBtdXN0IGJlIGEgY29weVxuICAgIHRoaXMubWF4UmVkaXJlY3Rpb25zID0gbWF4UmVkaXJlY3Rpb25zXG4gICAgdGhpcy5oYW5kbGVyID0gaGFuZGxlclxuICAgIHRoaXMuaGlzdG9yeSA9IFtdXG5cbiAgICBpZiAodXRpbC5pc1N0cmVhbSh0aGlzLm9wdHMuYm9keSkpIHtcbiAgICAgIC8vIFRPRE8gKGZpeCk6IFByb3ZpZGUgc29tZSB3YXkgZm9yIHRoZSB1c2VyIHRvIGNhY2hlIHRoZSBmaWxlIHRvIGUuZy4gL3RtcFxuICAgICAgLy8gc28gdGhhdCBpdCBjYW4gYmUgZGlzcGF0Y2hlZCBhZ2Fpbj9cbiAgICAgIC8vIFRPRE8gKGZpeCk6IERvIHdlIG5lZWQgMTAwLWV4cGVjdCBzdXBwb3J0IHRvIHByb3ZpZGUgYSB3YXkgdG8gZG8gdGhpcyBwcm9wZXJseT9cbiAgICAgIGlmICh1dGlsLmJvZHlMZW5ndGgodGhpcy5vcHRzLmJvZHkpID09PSAwKSB7XG4gICAgICAgIHRoaXMub3B0cy5ib2R5XG4gICAgICAgICAgLm9uKCdkYXRhJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKVxuICAgICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRzLmJvZHkucmVhZGFibGVEaWRSZWFkICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgdGhpcy5vcHRzLmJvZHlba0JvZHlVc2VkXSA9IGZhbHNlXG4gICAgICAgIEVFLnByb3RvdHlwZS5vbi5jYWxsKHRoaXMub3B0cy5ib2R5LCAnZGF0YScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB0aGlzW2tCb2R5VXNlZF0gPSB0cnVlXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdHMuYm9keSAmJiB0eXBlb2YgdGhpcy5vcHRzLmJvZHkucGlwZVRvID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBUT0RPIChmaXgpOiBXZSBjYW4ndCBhY2Nlc3MgUmVhZGFibGVTdHJlYW0gaW50ZXJuYWwgc3RhdGVcbiAgICAgIC8vIHRvIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCBpdCBoYXMgYmVlbiBkaXN0dXJiZWQuIFRoaXMgaXMganVzdFxuICAgICAgLy8gYSB3b3JrYXJvdW5kLlxuICAgICAgdGhpcy5vcHRzLmJvZHkgPSBuZXcgQm9keUFzeW5jSXRlcmFibGUodGhpcy5vcHRzLmJvZHkpXG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMub3B0cy5ib2R5ICYmXG4gICAgICB0eXBlb2YgdGhpcy5vcHRzLmJvZHkgIT09ICdzdHJpbmcnICYmXG4gICAgICAhQXJyYXlCdWZmZXIuaXNWaWV3KHRoaXMub3B0cy5ib2R5KSAmJlxuICAgICAgdXRpbC5pc0l0ZXJhYmxlKHRoaXMub3B0cy5ib2R5KVxuICAgICkge1xuICAgICAgLy8gVE9ETzogU2hvdWxkIHdlIGFsbG93IHJlLXVzaW5nIGl0ZXJhYmxlIGlmICF0aGlzLm9wdHMuaWRlbXBvdGVudFxuICAgICAgLy8gb3IgdGhyb3VnaCBzb21lIG90aGVyIGZsYWc/XG4gICAgICB0aGlzLm9wdHMuYm9keSA9IG5ldyBCb2R5QXN5bmNJdGVyYWJsZSh0aGlzLm9wdHMuYm9keSlcbiAgICB9XG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0KSB7XG4gICAgdGhpcy5hYm9ydCA9IGFib3J0XG4gICAgdGhpcy5oYW5kbGVyLm9uQ29ubmVjdChhYm9ydCwgeyBoaXN0b3J5OiB0aGlzLmhpc3RvcnkgfSlcbiAgfVxuXG4gIG9uVXBncmFkZSAoc3RhdHVzQ29kZSwgaGVhZGVycywgc29ja2V0KSB7XG4gICAgdGhpcy5oYW5kbGVyLm9uVXBncmFkZShzdGF0dXNDb2RlLCBoZWFkZXJzLCBzb2NrZXQpXG4gIH1cblxuICBvbkVycm9yIChlcnJvcikge1xuICAgIHRoaXMuaGFuZGxlci5vbkVycm9yKGVycm9yKVxuICB9XG5cbiAgb25IZWFkZXJzIChzdGF0dXNDb2RlLCBoZWFkZXJzLCByZXN1bWUsIHN0YXR1c1RleHQpIHtcbiAgICB0aGlzLmxvY2F0aW9uID0gdGhpcy5oaXN0b3J5Lmxlbmd0aCA+PSB0aGlzLm1heFJlZGlyZWN0aW9ucyB8fCB1dGlsLmlzRGlzdHVyYmVkKHRoaXMub3B0cy5ib2R5KVxuICAgICAgPyBudWxsXG4gICAgICA6IHBhcnNlTG9jYXRpb24oc3RhdHVzQ29kZSwgaGVhZGVycylcblxuICAgIGlmICh0aGlzLm9wdHMub3JpZ2luKSB7XG4gICAgICB0aGlzLmhpc3RvcnkucHVzaChuZXcgVVJMKHRoaXMub3B0cy5wYXRoLCB0aGlzLm9wdHMub3JpZ2luKSlcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMubG9jYXRpb24pIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25IZWFkZXJzKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHJlc3VtZSwgc3RhdHVzVGV4dClcbiAgICB9XG5cbiAgICBjb25zdCB7IG9yaWdpbiwgcGF0aG5hbWUsIHNlYXJjaCB9ID0gdXRpbC5wYXJzZVVSTChuZXcgVVJMKHRoaXMubG9jYXRpb24sIHRoaXMub3B0cy5vcmlnaW4gJiYgbmV3IFVSTCh0aGlzLm9wdHMucGF0aCwgdGhpcy5vcHRzLm9yaWdpbikpKVxuICAgIGNvbnN0IHBhdGggPSBzZWFyY2ggPyBgJHtwYXRobmFtZX0ke3NlYXJjaH1gIDogcGF0aG5hbWVcblxuICAgIC8vIFJlbW92ZSBoZWFkZXJzIHJlZmVycmluZyB0byB0aGUgb3JpZ2luYWwgVVJMLlxuICAgIC8vIEJ5IGRlZmF1bHQgaXQgaXMgSG9zdCBvbmx5LCB1bmxlc3MgaXQncyBhIDMwMyAoc2VlIGJlbG93KSwgd2hpY2ggcmVtb3ZlcyBhbHNvIGFsbCBDb250ZW50LSogaGVhZGVycy5cbiAgICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTYuNFxuICAgIHRoaXMub3B0cy5oZWFkZXJzID0gY2xlYW5SZXF1ZXN0SGVhZGVycyh0aGlzLm9wdHMuaGVhZGVycywgc3RhdHVzQ29kZSA9PT0gMzAzLCB0aGlzLm9wdHMub3JpZ2luICE9PSBvcmlnaW4pXG4gICAgdGhpcy5vcHRzLnBhdGggPSBwYXRoXG4gICAgdGhpcy5vcHRzLm9yaWdpbiA9IG9yaWdpblxuICAgIHRoaXMub3B0cy5tYXhSZWRpcmVjdGlvbnMgPSAwXG4gICAgdGhpcy5vcHRzLnF1ZXJ5ID0gbnVsbFxuXG4gICAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi02LjQuNFxuICAgIC8vIEluIGNhc2Ugb2YgSFRUUCAzMDMsIGFsd2F5cyByZXBsYWNlIG1ldGhvZCB0byBiZSBlaXRoZXIgSEVBRCBvciBHRVRcbiAgICBpZiAoc3RhdHVzQ29kZSA9PT0gMzAzICYmIHRoaXMub3B0cy5tZXRob2QgIT09ICdIRUFEJykge1xuICAgICAgdGhpcy5vcHRzLm1ldGhvZCA9ICdHRVQnXG4gICAgICB0aGlzLm9wdHMuYm9keSA9IG51bGxcbiAgICB9XG4gIH1cblxuICBvbkRhdGEgKGNodW5rKSB7XG4gICAgaWYgKHRoaXMubG9jYXRpb24pIHtcbiAgICAgIC8qXG4gICAgICAgIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNi40XG5cbiAgICAgICAgVExEUjogdW5kaWNpIGFsd2F5cyBpZ25vcmVzIDN4eCByZXNwb25zZSBib2RpZXMuXG5cbiAgICAgICAgUmVkaXJlY3Rpb24gaXMgdXNlZCB0byBzZXJ2ZSB0aGUgcmVxdWVzdGVkIHJlc291cmNlIGZyb20gYW5vdGhlciBVUkwsIHNvIGl0IGlzIGFzc3VtZXMgdGhhdFxuICAgICAgICBubyBib2R5IGlzIGdlbmVyYXRlZCAoYW5kIHRodXMgY2FuIGJlIGlnbm9yZWQpLiBFdmVuIHRob3VnaCBnZW5lcmF0aW5nIGEgYm9keSBpcyBub3QgcHJvaGliaXRlZC5cblxuICAgICAgICBGb3Igc3RhdHVzIDMwMSwgMzAyLCAzMDMsIDMwNyBhbmQgMzA4ICh0aGUgbGF0dGVyIGZyb20gUkZDIDcyMzgpLCB0aGUgc3BlY3MgbWVudGlvbiB0aGF0IHRoZSBib2R5IHVzdWFsbHlcbiAgICAgICAgKHdoaWNoIG1lYW5zIGl0J3Mgb3B0aW9uYWwgYW5kIG5vdCBtYW5kYXRlZCkgY29udGFpbiBqdXN0IGFuIGh5cGVybGluayB0byB0aGUgdmFsdWUgb2ZcbiAgICAgICAgdGhlIExvY2F0aW9uIHJlc3BvbnNlIGhlYWRlciwgc28gdGhlIGJvZHkgY2FuIGJlIGlnbm9yZWQgc2FmZWx5LlxuXG4gICAgICAgIEZvciBzdGF0dXMgMzAwLCB3aGljaCBpcyBcIk11bHRpcGxlIENob2ljZXNcIiwgdGhlIHNwZWMgbWVudGlvbnMgYm90aCBnZW5lcmF0aW5nIGEgTG9jYXRpb25cbiAgICAgICAgcmVzcG9uc2UgaGVhZGVyIEFORCBhIHJlc3BvbnNlIGJvZHkgd2l0aCB0aGUgb3RoZXIgcG9zc2libGUgbG9jYXRpb24gdG8gZm9sbG93LlxuICAgICAgICBTaW5jZSB0aGUgc3BlYyBleHBsaWNpdGlseSBjaG9vc2VzIG5vdCB0byBzcGVjaWZ5IGEgZm9ybWF0IGZvciBzdWNoIGJvZHkgYW5kIGxlYXZlIGl0IHRvXG4gICAgICAgIHNlcnZlcnMgYW5kIGJyb3dzZXJzIGltcGxlbWVudG9ycywgd2UgaWdub3JlIHRoZSBib2R5IGFzIHRoZXJlIGlzIG5vIHNwZWNpZmllZCB3YXkgdG8gZXZlbnR1YWxseSBwYXJzZSBpdC5cbiAgICAgICovXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25EYXRhKGNodW5rKVxuICAgIH1cbiAgfVxuXG4gIG9uQ29tcGxldGUgKHRyYWlsZXJzKSB7XG4gICAgaWYgKHRoaXMubG9jYXRpb24pIHtcbiAgICAgIC8qXG4gICAgICAgIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNi40XG5cbiAgICAgICAgVExEUjogdW5kaWNpIGFsd2F5cyBpZ25vcmVzIDN4eCByZXNwb25zZSB0cmFpbGVycyBhcyB0aGV5IGFyZSBub3QgZXhwZWN0ZWQgaW4gY2FzZSBvZiByZWRpcmVjdGlvbnNcbiAgICAgICAgYW5kIG5laXRoZXIgYXJlIHVzZWZ1bCBpZiBwcmVzZW50LlxuXG4gICAgICAgIFNlZSBjb21tZW50IG9uIG9uRGF0YSBtZXRob2QgYWJvdmUgZm9yIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb25zLlxuICAgICAgKi9cblxuICAgICAgdGhpcy5sb2NhdGlvbiA9IG51bGxcbiAgICAgIHRoaXMuYWJvcnQgPSBudWxsXG5cbiAgICAgIHRoaXMuZGlzcGF0Y2godGhpcy5vcHRzLCB0aGlzKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhhbmRsZXIub25Db21wbGV0ZSh0cmFpbGVycylcbiAgICB9XG4gIH1cblxuICBvbkJvZHlTZW50IChjaHVuaykge1xuICAgIGlmICh0aGlzLmhhbmRsZXIub25Cb2R5U2VudCkge1xuICAgICAgdGhpcy5oYW5kbGVyLm9uQm9keVNlbnQoY2h1bmspXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlTG9jYXRpb24gKHN0YXR1c0NvZGUsIGhlYWRlcnMpIHtcbiAgaWYgKHJlZGlyZWN0YWJsZVN0YXR1c0NvZGVzLmluZGV4T2Yoc3RhdHVzQ29kZSkgPT09IC0xKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaGVhZGVycy5sZW5ndGg7IGkgKz0gMikge1xuICAgIGlmIChoZWFkZXJzW2ldLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT0gJ2xvY2F0aW9uJykge1xuICAgICAgcmV0dXJuIGhlYWRlcnNbaSArIDFdXG4gICAgfVxuICB9XG59XG5cbi8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNi40LjRcbmZ1bmN0aW9uIHNob3VsZFJlbW92ZUhlYWRlciAoaGVhZGVyLCByZW1vdmVDb250ZW50LCB1bmtub3duT3JpZ2luKSB7XG4gIGlmIChoZWFkZXIubGVuZ3RoID09PSA0KSB7XG4gICAgcmV0dXJuIHV0aWwuaGVhZGVyTmFtZVRvU3RyaW5nKGhlYWRlcikgPT09ICdob3N0J1xuICB9XG4gIGlmIChyZW1vdmVDb250ZW50ICYmIHV0aWwuaGVhZGVyTmFtZVRvU3RyaW5nKGhlYWRlcikuc3RhcnRzV2l0aCgnY29udGVudC0nKSkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgaWYgKHVua25vd25PcmlnaW4gJiYgKGhlYWRlci5sZW5ndGggPT09IDEzIHx8IGhlYWRlci5sZW5ndGggPT09IDYgfHwgaGVhZGVyLmxlbmd0aCA9PT0gMTkpKSB7XG4gICAgY29uc3QgbmFtZSA9IHV0aWwuaGVhZGVyTmFtZVRvU3RyaW5nKGhlYWRlcilcbiAgICByZXR1cm4gbmFtZSA9PT0gJ2F1dGhvcml6YXRpb24nIHx8IG5hbWUgPT09ICdjb29raWUnIHx8IG5hbWUgPT09ICdwcm94eS1hdXRob3JpemF0aW9uJ1xuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG4vLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTYuNFxuZnVuY3Rpb24gY2xlYW5SZXF1ZXN0SGVhZGVycyAoaGVhZGVycywgcmVtb3ZlQ29udGVudCwgdW5rbm93bk9yaWdpbikge1xuICBjb25zdCByZXQgPSBbXVxuICBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzKSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGVhZGVycy5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgaWYgKCFzaG91bGRSZW1vdmVIZWFkZXIoaGVhZGVyc1tpXSwgcmVtb3ZlQ29udGVudCwgdW5rbm93bk9yaWdpbikpIHtcbiAgICAgICAgcmV0LnB1c2goaGVhZGVyc1tpXSwgaGVhZGVyc1tpICsgMV0pXG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKGhlYWRlcnMgJiYgdHlwZW9mIGhlYWRlcnMgPT09ICdvYmplY3QnKSB7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoaGVhZGVycykpIHtcbiAgICAgIGlmICghc2hvdWxkUmVtb3ZlSGVhZGVyKGtleSwgcmVtb3ZlQ29udGVudCwgdW5rbm93bk9yaWdpbikpIHtcbiAgICAgICAgcmV0LnB1c2goa2V5LCBoZWFkZXJzW2tleV0pXG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGFzc2VydChoZWFkZXJzID09IG51bGwsICdoZWFkZXJzIG11c3QgYmUgYW4gb2JqZWN0IG9yIGFuIGFycmF5JylcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUmVkaXJlY3RIYW5kbGVyXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBSZWRpcmVjdEhhbmRsZXIgPSByZXF1aXJlKCcuLi9oYW5kbGVyL1JlZGlyZWN0SGFuZGxlcicpXG5cbmZ1bmN0aW9uIGNyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3IgKHsgbWF4UmVkaXJlY3Rpb25zOiBkZWZhdWx0TWF4UmVkaXJlY3Rpb25zIH0pIHtcbiAgcmV0dXJuIChkaXNwYXRjaCkgPT4ge1xuICAgIHJldHVybiBmdW5jdGlvbiBJbnRlcmNlcHQgKG9wdHMsIGhhbmRsZXIpIHtcbiAgICAgIGNvbnN0IHsgbWF4UmVkaXJlY3Rpb25zID0gZGVmYXVsdE1heFJlZGlyZWN0aW9ucyB9ID0gb3B0c1xuXG4gICAgICBpZiAoIW1heFJlZGlyZWN0aW9ucykge1xuICAgICAgICByZXR1cm4gZGlzcGF0Y2gob3B0cywgaGFuZGxlcilcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVkaXJlY3RIYW5kbGVyID0gbmV3IFJlZGlyZWN0SGFuZGxlcihkaXNwYXRjaCwgbWF4UmVkaXJlY3Rpb25zLCBvcHRzLCBoYW5kbGVyKVxuICAgICAgb3B0cyA9IHsgLi4ub3B0cywgbWF4UmVkaXJlY3Rpb25zOiAwIH0gLy8gU3RvcCBzdWIgZGlzcGF0Y2hlciBmcm9tIGFsc28gcmVkaXJlY3RpbmcuXG4gICAgICByZXR1cm4gZGlzcGF0Y2gob3B0cywgcmVkaXJlY3RIYW5kbGVyKVxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3JcbiIsCiAgICAibW9kdWxlLmV4cG9ydHMgPSAnQUdGemJRRUFBQUFCTUFoZ0FYOEJmMkFEZjM5L0FYOWdCSDkvZjM4QmYyQUFBR0FEZjM5L0FHQUJmd0JnQW45L0FHQUdmMzkvZjM5L0FBTExBUWdEWlc1MkdIZGhjMjFmYjI1ZmFHVmhaR1Z5YzE5amIyMXdiR1YwWlFBQ0EyVnVkaFYzWVhOdFgyOXVYMjFsYzNOaFoyVmZZbVZuYVc0QUFBTmxibllMZDJGemJWOXZibDkxY213QUFRTmxibllPZDJGemJWOXZibDl6ZEdGMGRYTUFBUU5sYm5ZVWQyRnpiVjl2Ymw5b1pXRmtaWEpmWm1sbGJHUUFBUU5sYm5ZVWQyRnpiVjl2Ymw5b1pXRmtaWEpmZG1Gc2RXVUFBUU5sYm5ZTWQyRnpiVjl2Ymw5aWIyUjVBQUVEWlc1MkdIZGhjMjFmYjI1ZmJXVnpjMkZuWlY5amIyMXdiR1YwWlFBQUEwWkZBd01FQUFBRkFBQUFBQUFBQlFFRkFBVUZCUUFBQmdBQUFBQUdCZ1lHQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFCQUFBQkFRY0FBQVVGQXdBQkJBVUJjQUVTRWdVREFRQUNCZ2dCZndGQmdOUUVDd2ZSQlNJR2JXVnRiM0o1QWdBTFgybHVhWFJwWVd4cGVtVUFDUmxmWDJsdVpHbHlaV04wWDJaMWJtTjBhVzl1WDNSaFlteGxBUUFMYkd4b2RIUndYMmx1YVhRQUNoaHNiR2gwZEhCZmMyaHZkV3hrWDJ0bFpYQmZZV3hwZG1VQVFReHNiR2gwZEhCZllXeHNiMk1BREFadFlXeHNiMk1BUmd0c2JHaDBkSEJmWm5KbFpRQU5CR1p5WldVQVNBOXNiR2gwZEhCZloyVjBYM1I1Y0dVQURoVnNiR2gwZEhCZloyVjBYMmgwZEhCZmJXRnFiM0lBRHhWc2JHaDBkSEJmWjJWMFgyaDBkSEJmYldsdWIzSUFFQkZzYkdoMGRIQmZaMlYwWDIxbGRHaHZaQUFSRm14c2FIUjBjRjluWlhSZmMzUmhkSFZ6WDJOdlpHVUFFaEpzYkdoMGRIQmZaMlYwWDNWd1ozSmhaR1VBRXd4c2JHaDBkSEJmY21WelpYUUFGQTVzYkdoMGRIQmZaWGhsWTNWMFpRQVZGR3hzYUhSMGNGOXpaWFIwYVc1bmMxOXBibWwwQUJZTmJHeG9kSFJ3WDJacGJtbHphQUFYREd4c2FIUjBjRjl3WVhWelpRQVlEV3hzYUhSMGNGOXlaWE4xYldVQUdSdHNiR2gwZEhCZmNtVnpkVzFsWDJGbWRHVnlYM1Z3WjNKaFpHVUFHaEJzYkdoMGRIQmZaMlYwWDJWeWNtNXZBQnNYYkd4b2RIUndYMmRsZEY5bGNuSnZjbDl5WldGemIyNEFIQmRzYkdoMGRIQmZjMlYwWDJWeWNtOXlYM0psWVhOdmJnQWRGR3hzYUhSMGNGOW5aWFJmWlhKeWIzSmZjRzl6QUI0UmJHeG9kSFJ3WDJWeWNtNXZYMjVoYldVQUh4SnNiR2gwZEhCZmJXVjBhRzlrWDI1aGJXVUFJQkpzYkdoMGRIQmZjM1JoZEhWelgyNWhiV1VBSVJwc2JHaDBkSEJmYzJWMFgyeGxibWxsYm5SZmFHVmhaR1Z5Y3dBaUlXeHNhSFIwY0Y5elpYUmZiR1Z1YVdWdWRGOWphSFZ1YTJWa1gyeGxibWQwYUFBakhXeHNhSFIwY0Y5elpYUmZiR1Z1YVdWdWRGOXJaV1Z3WDJGc2FYWmxBQ1FrYkd4b2RIUndYM05sZEY5c1pXNXBaVzUwWDNSeVlXNXpabVZ5WDJWdVkyOWthVzVuQUNVWWJHeG9kSFJ3WDIxbGMzTmhaMlZmYm1WbFpITmZaVzltQUQ4SkZ3RUFRUUVMRVFFQ0F3UUZDd1lITlRrM01TOHRKeXNwQ3NMZ0FrVUNBQXNJQUJDSWdJQ0FBQXNaQUNBQUVNS0FnSUFBR2lBQUlBSTJBamdnQUNBQk9nQW9DeHdBSUFBZ0FDOEJNaUFBTFFBdUlBQVF3WUNBZ0FBUWdJQ0FnQUFMS2dFQmYwSEFBQkRHZ0lDQUFDSUJFTUtBZ0lBQUdpQUJRWUNJZ0lBQU5nSTRJQUVnQURvQUtDQUJDd29BSUFBUXlJQ0FnQUFMQndBZ0FDMEFLQXNIQUNBQUxRQXFDd2NBSUFBdEFDc0xCd0FnQUMwQUtRc0hBQ0FBTHdFeUN3Y0FJQUF0QUM0TFJRRUVmeUFBS0FJWUlRRWdBQzBBTFNFQ0lBQXRBQ2doQXlBQUtBSTRJUVFnQUJEQ2dJQ0FBQm9nQUNBRU5nSTRJQUFnQXpvQUtDQUFJQUk2QUMwZ0FDQUJOZ0lZQ3hFQUlBQWdBU0FCSUFKcUVNT0FnSUFBQ3hBQUlBQkJBRUhjQUJETWdJQ0FBQm9MWndFQmYwRUFJUUVDUUNBQUtBSU1EUUFDUUFKQUFrQUNRQ0FBTFFBdkRnTUJBQU1DQ3lBQUtBSTRJZ0ZGRFFBZ0FTZ0NMQ0lCUlEwQUlBQWdBUkdBZ0lDQUFBQWlBUTBEQzBFQUR3c1F5b0NBZ0FBQUN5QUFRY09XZ0lBQU5nSVFRUTRoQVFzZ0FRc2VBQUpBSUFBb0Fnd05BQ0FBUWRHYmdJQUFOZ0lRSUFCQkZUWUNEQXNMRmdBQ1FDQUFLQUlNUVJWSERRQWdBRUVBTmdJTUN3c1dBQUpBSUFBb0FneEJGa2NOQUNBQVFRQTJBZ3dMQ3djQUlBQW9BZ3dMQndBZ0FDZ0NFQXNKQUNBQUlBRTJBaEFMQndBZ0FDZ0NGQXNpQUFKQUlBQkJKRWtOQUJES2dJQ0FBQUFMSUFCQkFuUkJvTE9BZ0FCcUtBSUFDeUlBQWtBZ0FFRXVTUTBBRU1xQWdJQUFBQXNnQUVFQ2RFR3d0SUNBQUdvb0FnQUw3Z3NCQVg5QjY2aUFnQUFoQVFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUlBQkJuSDlxRHZRRFkySUFBV0ZoWVdGaFlRSURCQVZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaEJnY0lDUW9MREEwT0QyRmhZV0ZoRUdGaFlXRmhZV0ZoWVdGaEVXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlSSVRGQlVXRnhnWkdodGhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhIQjBlSHlBaElpTWtKU1luS0NrcUt5d3RMaTh3TVRJek5EVTJZVGM0T1RwaFlXRmhZV0ZoWVR0aFlXRThZV0ZoWVQwK1AyRmhZV0ZoWVdGaFFHRmhRV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVVKRFJFVkdSMGhKU2t0TVRVNVBVRkZTVTJGaFlXRmhZV0ZoVkZWV1YxaFpXbHRoWEYxaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmVZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhYMkJoQzBIaHA0Q0FBQThMUWFTaGdJQUFEd3RCeTZ5QWdBQVBDMEgrc1lDQUFBOExRY0NrZ0lBQUR3dEJxNlNBZ0FBUEMwR05xSUNBQUE4TFFlS21nSUFBRHd0QmdMQ0FnQUFQQzBHNXI0Q0FBQThMUWRla2dJQUFEd3RCNzUrQWdBQVBDMEhobjRDQUFBOExRZnFmZ0lBQUR3dEI4cUNBZ0FBUEMwR29yNENBQUE4TFFhNnlnSUFBRHd0QmlMQ0FnQUFQQzBIc3A0Q0FBQThMUVlLaWdJQUFEd3RCanAyQWdBQVBDMEhRcm9DQUFBOExRY3FqZ0lBQUR3dEJ4YktBZ0FBUEMwSGZuSUNBQUE4TFFkS2NnSUFBRHd0QnhLQ0FnQUFQQzBIWG9JQ0FBQThMUWFLZmdJQUFEd3RCN2E2QWdBQVBDMEdyc0lDQUFBOExRZFNsZ0lBQUR3dEJ6SzZBZ0FBUEMwSDZyb0NBQUE4TFFmeXJnSUFBRHd0QjByQ0FnQUFQQzBIeG5ZQ0FBQThMUWJ1Z2dJQUFEd3RCOTZ1QWdBQVBDMEdRc1lDQUFBOExRZGV4Z0lBQUR3dEJvcTJBZ0FBUEMwSFVwNENBQUE4TFFlQ3JnSUFBRHd0Qm42eUFnQUFQQzBIcnNZQ0FBQThMUWRXZmdJQUFEd3RCeXJHQWdBQVBDMEhlcFlDQUFBOExRZFNlZ0lBQUR3dEI5SnlBZ0FBUEMwR25zb0NBQUE4TFFiR2RnSUFBRHd0Qm9KMkFnQUFQQzBHNXNZQ0FBQThMUWJ5d2dJQUFEd3RCa3FHQWdBQVBDMEd6cG9DQUFBOExRZW1zZ0lBQUR3dEJySjZBZ0FBUEMwSFVxNENBQUE4TFFmZW1nSUFBRHd0QmdLYUFnQUFQQzBHd29ZQ0FBQThMUWY2ZWdJQUFEd3RCamFPQWdBQVBDMEdKcllDQUFBOExRZmVpZ0lBQUR3dEJvTEdBZ0FBUEMwR3VuNENBQUE4TFFjYWxnSUFBRHd0QjZKNkFnQUFQQzBHVG9vQ0FBQThMUWNLdmdJQUFEd3RCdzUyQWdBQVBDMEdMcklDQUFBOExRZUdkZ0lBQUR3dEJqYStBZ0FBUEMwSHFvWUNBQUE4TFFiU3RnSUFBRHd0QjBxK0FnQUFQQzBIZnNvQ0FBQThMUWRLeWdJQUFEd3RCOExDQWdBQVBDMEdwb29DQUFBOExRZm1qZ0lBQUR3dEJtWjZBZ0FBUEMwRzFySUNBQUE4TFFadXdnSUFBRHd0QmtyS0FnQUFQQzBHMnE0Q0FBQThMUWNLaWdJQUFEd3RCK0xLQWdBQVBDMEdlcFlDQUFBOExRZENpZ0lBQUR3dEJ1cDZBZ0FBUEMwR0Jub0NBQUE4TEVNcUFnSUFBQUF0QjFxR0FnQUFoQVFzZ0FRc1dBQ0FBSUFBdEFDMUIvZ0Z4SUFGQkFFZHlPZ0F0Q3hrQUlBQWdBQzBBTFVIOUFYRWdBVUVBUjBFQmRISTZBQzBMR1FBZ0FDQUFMUUF0UWZzQmNTQUJRUUJIUVFKMGNqb0FMUXNaQUNBQUlBQXRBQzFCOXdGeElBRkJBRWRCQTNSeU9nQXRDeTRCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FnQWlCRVVOQUNBQUlBUVJnSUNBZ0FBQUlRTUxJQU1MU1FFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NCQ0lFUlEwQUlBQWdBU0FDSUFGcklBUVJnWUNBZ0FBQUlnTkJmMGNOQUNBQVFjYVJnSUFBTmdJUVFSZ2hBd3NnQXdzdUFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUl3SWdSRkRRQWdBQ0FFRVlDQWdJQUFBQ0VEQ3lBREMwa0JBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWdnaUJFVU5BQ0FBSUFFZ0FpQUJheUFFRVlHQWdJQUFBQ0lEUVg5SERRQWdBRUgyaW9DQUFEWUNFRUVZSVFNTElBTUxMZ0VDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ05DSUVSUTBBSUFBZ0JCR0FnSUNBQUFBaEF3c2dBd3RKQVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSU1JZ1JGRFFBZ0FDQUJJQUlnQVdzZ0JCR0JnSUNBQUFBaUEwRi9SdzBBSUFCQjdacUFnQUEyQWhCQkdDRURDeUFEQ3k0QkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9BamdpQkVVTkFDQUFJQVFSZ0lDQWdBQUFJUU1MSUFNTFNRRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDRUNJRVJRMEFJQUFnQVNBQ0lBRnJJQVFSZ1lDQWdBQUFJZ05CZjBjTkFDQUFRWldRZ0lBQU5nSVFRUmdoQXdzZ0F3c3VBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FJOElnUkZEUUFnQUNBRUVZQ0FnSUFBQUNFREN5QURDMGtCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FoUWlCRVVOQUNBQUlBRWdBaUFCYXlBRUVZR0FnSUFBQUNJRFFYOUhEUUFnQUVHcW00Q0FBRFlDRUVFWUlRTUxJQU1MTGdFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NRQ0lFUlEwQUlBQWdCQkdBZ0lDQUFBQWhBd3NnQXd0SkFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUlZSWdSRkRRQWdBQ0FCSUFJZ0FXc2dCQkdCZ0lDQUFBQWlBMEYvUncwQUlBQkI3Wk9BZ0FBMkFoQkJHQ0VEQ3lBREN5NEJBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWtRaUJFVU5BQ0FBSUFRUmdJQ0FnQUFBSVFNTElBTUxMZ0VDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ0pDSUVSUTBBSUFBZ0JCR0FnSUNBQUFBaEF3c2dBd3N1QVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSXNJZ1JGRFFBZ0FDQUVFWUNBZ0lBQUFDRURDeUFEQzBrQkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9BaWdpQkVVTkFDQUFJQUVnQWlBQmF5QUVFWUdBZ0lBQUFDSURRWDlIRFFBZ0FFSDJpSUNBQURZQ0VFRVlJUU1MSUFNTExnRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDVUNJRVJRMEFJQUFnQkJHQWdJQ0FBQUFoQXdzZ0F3dEpBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FJY0lnUkZEUUFnQUNBQklBSWdBV3NnQkJHQmdJQ0FBQUFpQTBGL1J3MEFJQUJCd3BtQWdBQTJBaEJCR0NFREN5QURDeTRCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FrZ2lCRVVOQUNBQUlBUVJnSUNBZ0FBQUlRTUxJQU1MU1FFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NJQ0lFUlEwQUlBQWdBU0FDSUFGcklBUVJnWUNBZ0FBQUlnTkJmMGNOQUNBQVFaU1VnSUFBTmdJUVFSZ2hBd3NnQXdzdUFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUpNSWdSRkRRQWdBQ0FFRVlDQWdJQUFBQ0VEQ3lBREN5NEJBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWxRaUJFVU5BQ0FBSUFRUmdJQ0FnQUFBSVFNTElBTUxMZ0VDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ1dDSUVSUTBBSUFBZ0JCR0FnSUNBQUFBaEF3c2dBd3RGQVFGL0FrQUNRQ0FBTHdFd1FSUnhRUlJIRFFCQkFTRURJQUF0QUNoQkFVWU5BU0FBTHdFeVFlVUFSaUVEREFFTElBQXRBQ2xCQlVZaEF3c2dBQ0FET2dBdVFRQUwvZ0VCQTM5QkFTRURBa0FnQUM4Qk1DSUVRUWh4RFFBZ0FDa0RJRUlBVWlFREN3SkFBa0FnQUMwQUxrVU5BRUVCSVFVZ0FDMEFLVUVGUmcwQlFRRWhCU0FFUWNBQWNVVWdBM0ZCQVVjTkFRdEJBQ0VGSUFSQndBQnhEUUJCQWlFRklBUkIvLzhEY1NJRFFRaHhEUUFDUUNBRFFZQUVjVVVOQUFKQUlBQXRBQ2hCQVVjTkFDQUFMUUF0UVFweERRQkJCUThMUVFRUEN3SkFJQU5CSUhFTkFBSkFJQUF0QUNoQkFVWU5BQ0FBTHdFeVFmLy9BM0VpQUVHY2YycEI1QUJKRFFBZ0FFSE1BVVlOQUNBQVFiQUNSZzBBUVFRaEJTQUVRU2h4UlEwQ0lBTkJpQVJ4UVlBRVJnMENDMEVBRHd0QkFFRURJQUFwQXlCUUd5RUZDeUFGQzJJQkFuOUJBQ0VCQWtBZ0FDMEFLRUVCUmcwQUlBQXZBVEpCLy84RGNTSUNRWngvYWtIa0FFa05BQ0FDUWN3QlJnMEFJQUpCc0FKR0RRQWdBQzhCTUNJQVFjQUFjUTBBUVFFaEFTQUFRWWdFY1VHQUJFWU5BQ0FBUVNoeFJTRUJDeUFCQzZjQkFRTi9Ba0FDUUFKQUlBQXRBQ3BGRFFBZ0FDMEFLMFVOQUVFQUlRTWdBQzhCTUNJRVFRSnhSUTBCREFJTFFRQWhBeUFBTHdFd0lnUkJBWEZGRFFFTFFRRWhBeUFBTFFBb1FRRkdEUUFnQUM4Qk1rSC8vd054SWdWQm5IOXFRZVFBU1EwQUlBVkJ6QUZHRFFBZ0JVR3dBa1lOQUNBRVFjQUFjUTBBUVFBaEF5QUVRWWdFY1VHQUJFWU5BQ0FFUVNoeFFRQkhJUU1MSUFCQkFEc0JNQ0FBUVFBNkFDOGdBd3VaQVFFQ2Z3SkFBa0FDUUNBQUxRQXFSUTBBSUFBdEFDdEZEUUJCQUNFQklBQXZBVEFpQWtFQ2NVVU5BUXdDQzBFQUlRRWdBQzhCTUNJQ1FRRnhSUTBCQzBFQklRRWdBQzBBS0VFQlJnMEFJQUF2QVRKQi8vOERjU0lBUVp4L2FrSGtBRWtOQUNBQVFjd0JSZzBBSUFCQnNBSkdEUUFnQWtIQUFIRU5BRUVBSVFFZ0FrR0lCSEZCZ0FSR0RRQWdBa0VvY1VFQVJ5RUJDeUFCQzFrQUlBQkJHR3BDQURjREFDQUFRZ0EzQXdBZ0FFRTRha0lBTndNQUlBQkJNR3BDQURjREFDQUFRU2hxUWdBM0F3QWdBRUVnYWtJQU53TUFJQUJCRUdwQ0FEY0RBQ0FBUVFocVFnQTNBd0FnQUVIZEFUWUNIRUVBQzNzQkFYOENRQ0FBS0FJTUlnTU5BQUpBSUFBb0FnUkZEUUFnQUNBQk5nSUVDd0pBSUFBZ0FTQUNFTVNBZ0lBQUlnTU5BQ0FBS0FJTUR3c2dBQ0FETmdJY1FRQWhBeUFBS0FJRUlnRkZEUUFnQUNBQklBSWdBQ2dDQ0JHQmdJQ0FBQUFpQVVVTkFDQUFJQUkyQWhRZ0FDQUJOZ0lNSUFFaEF3c2dBd3ZrOHdFRERuOERmZ1IvSTRDQWdJQUFRUkJySWdNa2dJQ0FnQUFnQVNFRUlBRWhCU0FCSVFZZ0FTRUhJQUVoQ0NBQklRa2dBU0VLSUFFaEN5QUJJUXdnQVNFTklBRWhEaUFCSVE4Q1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBZ0FDZ0NIQ0lRUVg5cUR0MEIyZ0VCMlFFQ0F3UUZCZ2NJQ1FvTERBME8yQUVQRU5jQkVSTFdBUk1VRlJZWEdCa2FHK0FCM3dFY0hSN1ZBUjhnSVNJakpDWFVBU1luS0NrcUt5elRBZElCTFM3UkFkQUJMekF4TWpNME5UWTNPRGs2T3p3OVBqOUFRVUpEUkVWRzJ3RkhTRWxLendIT0FVdk5BVXpNQVUxT1QxQlJVbE5VVlZaWFdGbGFXMXhkWGw5Z1lXSmpaR1ZtWjJocGFtdHNiVzV2Y0hGeWMzUjFkbmQ0ZVhwN2ZIMStmNEFCZ1FHQ0FZTUJoQUdGQVlZQmh3R0lBWWtCaWdHTEFZd0JqUUdPQVk4QmtBR1JBWklCa3dHVUFaVUJsZ0dYQVpnQm1RR2FBWnNCbkFHZEFaNEJud0dnQWFFQm9nR2pBYVFCcFFHbUFhY0JxQUdwQWFvQnF3R3NBYTBCcmdHdkFiQUJzUUd5QWJNQnRBRzFBYllCdHdITEFjb0J1QUhKQWJrQnlBRzZBYnNCdkFHOUFiNEJ2d0hBQWNFQndnSERBY1FCeFFIR0FRRGNBUXRCQUNFUURNWUJDMEVPSVJBTXhRRUxRUTBoRUF6RUFRdEJEeUVRRE1NQkMwRVFJUkFNd2dFTFFSTWhFQXpCQVF0QkZDRVFETUFCQzBFVklSQU12d0VMUVJZaEVBeStBUXRCRnlFUURMMEJDMEVZSVJBTXZBRUxRUmtoRUF5N0FRdEJHaUVRRExvQkMwRWJJUkFNdVFFTFFSd2hFQXk0QVF0QkNDRVFETGNCQzBFZElSQU10Z0VMUVNBaEVBeTFBUXRCSHlFUURMUUJDMEVISVJBTXN3RUxRU0VoRUF5eUFRdEJJaUVRRExFQkMwRWVJUkFNc0FFTFFTTWhFQXl2QVF0QkVpRVFESzRCQzBFUklSQU1yUUVMUVNRaEVBeXNBUXRCSlNFUURLc0JDMEVtSVJBTXFnRUxRU2NoRUF5cEFRdEJ3d0VoRUF5b0FRdEJLU0VRREtjQkMwRXJJUkFNcGdFTFFTd2hFQXlsQVF0QkxTRVFES1FCQzBFdUlSQU1vd0VMUVM4aEVBeWlBUXRCeEFFaEVBeWhBUXRCTUNFUURLQUJDMEUwSVJBTW53RUxRUXdoRUF5ZUFRdEJNU0VRREowQkMwRXlJUkFNbkFFTFFUTWhFQXliQVF0Qk9TRVFESm9CQzBFMUlSQU1tUUVMUWNVQklSQU1tQUVMUVFzaEVBeVhBUXRCT2lFUURKWUJDMEUySVJBTWxRRUxRUW9oRUF5VUFRdEJOeUVRREpNQkMwRTRJUkFNa2dFTFFUd2hFQXlSQVF0Qk95RVFESkFCQzBFOUlSQU1qd0VMUVFraEVBeU9BUXRCS0NFUURJMEJDMEUrSVJBTWpBRUxRVDhoRUF5TEFRdEJ3QUFoRUF5S0FRdEJ3UUFoRUF5SkFRdEJ3Z0FoRUF5SUFRdEJ3d0FoRUF5SEFRdEJ4QUFoRUF5R0FRdEJ4UUFoRUF5RkFRdEJ4Z0FoRUF5RUFRdEJLaUVRRElNQkMwSEhBQ0VRRElJQkMwSElBQ0VRRElFQkMwSEpBQ0VRRElBQkMwSEtBQ0VRREg4TFFjc0FJUkFNZmd0QnpRQWhFQXg5QzBITUFDRVFESHdMUWM0QUlSQU1ld3RCendBaEVBeDZDMEhRQUNFUURIa0xRZEVBSVJBTWVBdEIwZ0FoRUF4M0MwSFRBQ0VRREhZTFFkUUFJUkFNZFF0QjFnQWhFQXgwQzBIVkFDRVFESE1MUVFZaEVBeHlDMEhYQUNFUURIRUxRUVVoRUF4d0MwSFlBQ0VRREc4TFFRUWhFQXh1QzBIWkFDRVFERzBMUWRvQUlSQU1iQXRCMndBaEVBeHJDMEhjQUNFUURHb0xRUU1oRUF4cEMwSGRBQ0VRREdnTFFkNEFJUkFNWnd0QjN3QWhFQXhtQzBIaEFDRVFER1VMUWVBQUlSQU1aQXRCNGdBaEVBeGpDMEhqQUNFUURHSUxRUUloRUF4aEMwSGtBQ0VRREdBTFFlVUFJUkFNWHd0QjVnQWhFQXhlQzBIbkFDRVFERjBMUWVnQUlSQU1YQXRCNlFBaEVBeGJDMEhxQUNFUURGb0xRZXNBSVJBTVdRdEI3QUFoRUF4WUMwSHRBQ0VRREZjTFFlNEFJUkFNVmd0Qjd3QWhFQXhWQzBId0FDRVFERlFMUWZFQUlSQU1Vd3RCOGdBaEVBeFNDMEh6QUNFUURGRUxRZlFBSVJBTVVBdEI5UUFoRUF4UEMwSDJBQ0VRREU0TFFmY0FJUkFNVFF0QitBQWhFQXhNQzBINUFDRVFERXNMUWZvQUlSQU1TZ3RCK3dBaEVBeEpDMEg4QUNFUURFZ0xRZjBBSVJBTVJ3dEIvZ0FoRUF4R0MwSC9BQ0VRREVVTFFZQUJJUkFNUkF0QmdRRWhFQXhEQzBHQ0FTRVFERUlMUVlNQklSQU1RUXRCaEFFaEVBeEFDMEdGQVNFUUREOExRWVlCSVJBTVBndEJod0VoRUF3OUMwR0lBU0VRRER3TFFZa0JJUkFNT3d0QmlnRWhFQXc2QzBHTEFTRVFERGtMUVl3QklSQU1PQXRCalFFaEVBdzNDMEdPQVNFUUREWUxRWThCSVJBTU5RdEJrQUVoRUF3MEMwR1JBU0VRRERNTFFaSUJJUkFNTWd0Qmt3RWhFQXd4QzBHVUFTRVFEREFMUVpVQklSQU1Md3RCbGdFaEVBd3VDMEdYQVNFUURDMExRWmdCSVJBTUxBdEJtUUVoRUF3ckMwR2FBU0VRRENvTFFac0JJUkFNS1F0Qm5BRWhFQXdvQzBHZEFTRVFEQ2NMUVo0QklSQU1KZ3RCbndFaEVBd2xDMEdnQVNFUURDUUxRYUVCSVJBTUl3dEJvZ0VoRUF3aUMwR2pBU0VRRENFTFFhUUJJUkFNSUF0QnBRRWhFQXdmQzBHbUFTRVFEQjRMUWFjQklSQU1IUXRCcUFFaEVBd2NDMEdwQVNFUURCc0xRYW9CSVJBTUdndEJxd0VoRUF3WkMwR3NBU0VRREJnTFFhMEJJUkFNRnd0QnJnRWhFQXdXQzBFQklSQU1GUXRCcndFaEVBd1VDMEd3QVNFUURCTUxRYkVCSVJBTUVndEJzd0VoRUF3UkMwR3lBU0VRREJBTFFiUUJJUkFNRHd0QnRRRWhFQXdPQzBHMkFTRVFEQTBMUWJjQklSQU1EQXRCdUFFaEVBd0xDMEc1QVNFUURBb0xRYm9CSVJBTUNRdEJ1d0VoRUF3SUMwSEdBU0VRREFjTFFid0JJUkFNQmd0QnZRRWhFQXdGQzBHK0FTRVFEQVFMUWI4QklSQU1Bd3RCd0FFaEVBd0NDMEhDQVNFUURBRUxRY0VCSVJBTEEwQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQ0FRRHNjQkFBRUNBd1FGQmdjSUNRb0xEQTBPRHhBUkVoTVVGUllYR0JrYUd4d2VIeUFoSXlVb1AwQkJSRVZHUjBoSlNrdE1UVTlRVVZKVDNnTlhXVnRjWFdCaVpXWm5hR2xxYTJ4dGIzQnhjbk4wZFhaM2VIbDZlM3g5Zm9BQmdnR0ZBWVlCaHdHSkFZc0JqQUdOQVk0Qmp3R1FBWkVCbEFHVkFaWUJsd0dZQVprQm1nR2JBWndCblFHZUFaOEJvQUdoQWFJQm93R2tBYVVCcGdHbkFhZ0JxUUdxQWFzQnJBR3RBYTRCcndHd0FiRUJzZ0d6QWJRQnRRRzJBYmNCdUFHNUFib0J1d0c4QWIwQnZnRy9BY0FCd1FIQ0FjTUJ4QUhGQWNZQnh3SElBY2tCeWdITEFjd0J6UUhPQWM4QjBBSFJBZElCMHdIVUFkVUIxZ0hYQWRnQjJRSGFBZHNCM0FIZEFkNEI0QUhoQWVJQjR3SGtBZVVCNWdIbkFlZ0I2UUhxQWVzQjdBSHRBZTRCN3dId0FmRUI4Z0h6QVprQ3BBS3dBdjRDL2dJTElBRWlCQ0FDUnczekFVSGRBU0VRRFA4REN5QUJJaEFnQWtjTjNRRkJ3d0VoRUF6K0F3c2dBU0lCSUFKSERaQUJRZmNBSVJBTS9RTUxJQUVpQVNBQ1J3MkdBVUh2QUNFUURQd0RDeUFCSWdFZ0FrY05mMEhxQUNFUURQc0RDeUFCSWdFZ0FrY05lMEhvQUNFUURQb0RDeUFCSWdFZ0FrY05lRUhtQUNFUURQa0RDeUFCSWdFZ0FrY05Ha0VZSVJBTStBTUxJQUVpQVNBQ1J3MFVRUkloRUF6M0F3c2dBU0lCSUFKSERWbEJ4UUFoRUF6MkF3c2dBU0lCSUFKSERVcEJQeUVRRFBVREN5QUJJZ0VnQWtjTlNFRThJUkFNOUFNTElBRWlBU0FDUncxQlFURWhFQXp6QXdzZ0FDMEFMa0VCUmczckF3eUhBZ3NnQUNBQklnRWdBaERBZ0lDQUFFRUJSdzNtQVNBQVFnQTNBeUFNNXdFTElBQWdBU0lCSUFJUXRJQ0FnQUFpRUEzbkFTQUJJUUVNOVFJTEFrQWdBU0lCSUFKSERRQkJCaUVRRFBBREN5QUFJQUZCQVdvaUFTQUNFTHVBZ0lBQUloQU42QUVnQVNFQkRERUxJQUJDQURjRElFRVNJUkFNMVFNTElBRWlFQ0FDUncwclFSMGhFQXp0QXdzQ1FDQUJJZ0VnQWtZTkFDQUJRUUZxSVFGQkVDRVFETlFEQzBFSElSQU03QU1MSUFCQ0FDQUFLUU1nSWhFZ0FpQUJJaEJyclNJU2ZTSVRJQk1nRVZZYk53TWdJQkVnRWxZaUZFVU41UUZCQ0NFUURPc0RDd0pBSUFFaUFTQUNSZzBBSUFCQmlZQ0FnQUEyQWdnZ0FDQUJOZ0lFSUFFaEFVRVVJUkFNMGdNTFFRa2hFQXpxQXdzZ0FTRUJJQUFwQXlCUURlUUJJQUVoQVF6eUFnc0NRQ0FCSWdFZ0FrY05BRUVMSVJBTTZRTUxJQUFnQVVFQmFpSUJJQUlRdG9DQWdBQWlFQTNsQVNBQklRRU04Z0lMSUFBZ0FTSUJJQUlRdUlDQWdBQWlFQTNsQVNBQklRRU04Z0lMSUFBZ0FTSUJJQUlRdUlDQWdBQWlFQTNtQVNBQklRRU1EUXNnQUNBQklnRWdBaEM2Z0lDQUFDSVFEZWNCSUFFaEFRendBZ3NDUUNBQklnRWdBa2NOQUVFUElSQU01UU1MSUFFdEFBQWlFRUU3UmcwSUlCQkJEVWNONkFFZ0FVRUJhaUVCRE84Q0N5QUFJQUVpQVNBQ0VMcUFnSUFBSWhBTjZBRWdBU0VCRFBJQ0N3TkFBa0FnQVMwQUFFSHd0WUNBQUdvdEFBQWlFRUVCUmcwQUlCQkJBa2NONndFZ0FDZ0NCQ0VRSUFCQkFEWUNCQ0FBSUJBZ0FVRUJhaUlCRUxtQWdJQUFJaEFONmdFZ0FTRUJEUFFDQ3lBQlFRRnFJZ0VnQWtjTkFBdEJFaUVRRE9JREN5QUFJQUVpQVNBQ0VMcUFnSUFBSWhBTjZRRWdBU0VCREFvTElBRWlBU0FDUncwR1FSc2hFQXpnQXdzQ1FDQUJJZ0VnQWtjTkFFRVdJUkFNNEFNTElBQkJpb0NBZ0FBMkFnZ2dBQ0FCTmdJRUlBQWdBU0FDRUxpQWdJQUFJaEFONmdFZ0FTRUJRU0FoRUF6R0F3c0NRQ0FCSWdFZ0FrWU5BQU5BQWtBZ0FTMEFBRUh3dDRDQUFHb3RBQUFpRUVFQ1JnMEFBa0FnRUVGL2FnNEU1UUhzQVFEckFld0JDeUFCUVFGcUlRRkJDQ0VRRE1nREN5QUJRUUZxSWdFZ0FrY05BQXRCRlNFUUROOERDMEVWSVJBTTNnTUxBMEFDUUNBQkxRQUFRZkM1Z0lBQWFpMEFBQ0lRUVFKR0RRQWdFRUYvYWc0RTNnSHNBZUFCNndIc0FRc2dBVUVCYWlJQklBSkhEUUFMUVJnaEVBemRBd3NDUUNBQklnRWdBa1lOQUNBQVFZdUFnSUFBTmdJSUlBQWdBVFlDQkNBQklRRkJCeUVRRE1RREMwRVpJUkFNM0FNTElBRkJBV29oQVF3Q0N3SkFJQUVpRkNBQ1J3MEFRUm9oRUF6YkF3c2dGQ0VCQWtBZ0ZDMEFBRUZ6YWc0VTNRTHVBdTRDN2dMdUF1NEM3Z0x1QXU0QzdnTHVBdTRDN2dMdUF1NEM3Z0x1QXU0QzdnSUE3Z0lMUVFBaEVDQUFRUUEyQWh3Z0FFR3ZpNENBQURZQ0VDQUFRUUkyQWd3Z0FDQVVRUUZxTmdJVUROb0RDd0pBSUFFdEFBQWlFRUU3UmcwQUlCQkJEVWNONkFFZ0FVRUJhaUVCRE9VQ0N5QUJRUUZxSVFFTFFTSWhFQXkvQXdzQ1FDQUJJaEFnQWtjTkFFRWNJUkFNMkFNTFFnQWhFU0FRSVFFZ0VDMEFBRUZRYWc0MzV3SG1BUUVDQXdRRkJnY0lBQUFBQUFBQUFBa0tDd3dORGdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRHhBUkVoTVVBQXRCSGlFUURMMERDMElDSVJFTTVRRUxRZ01oRVF6a0FRdENCQ0VSRE9NQkMwSUZJUkVNNGdFTFFnWWhFUXpoQVF0Q0J5RVJET0FCQzBJSUlSRU0zd0VMUWdraEVRemVBUXRDQ2lFUkROMEJDMElMSVJFTTNBRUxRZ3doRVF6YkFRdENEU0VSRE5vQkMwSU9JUkVNMlFFTFFnOGhFUXpZQVF0Q0NpRVJETmNCQzBJTElSRU0xZ0VMUWd3aEVRelZBUXRDRFNFUkROUUJDMElPSVJFTTB3RUxRZzhoRVF6U0FRdENBQ0VSQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FDQVFMUUFBUVZCcURqZmxBZVFCQUFFQ0F3UUZCZ2ZtQWVZQjVnSG1BZVlCNWdIbUFRZ0pDZ3NNRGVZQjVnSG1BZVlCNWdIbUFlWUI1Z0htQWVZQjVnSG1BZVlCNWdIbUFlWUI1Z0htQWVZQjVnSG1BZVlCNWdIbUFlWUI1Z0VPRHhBUkVoUG1BUXRDQWlFUkRPUUJDMElESVJFTTR3RUxRZ1FoRVF6aUFRdENCU0VSRE9FQkMwSUdJUkVNNEFFTFFnY2hFUXpmQVF0Q0NDRVJETjRCQzBJSklSRU0zUUVMUWdvaEVRemNBUXRDQ3lFUkROc0JDMElNSVJFTTJnRUxRZzBoRVF6WkFRdENEaUVSRE5nQkMwSVBJUkVNMXdFTFFnb2hFUXpXQVF0Q0N5RVJETlVCQzBJTUlSRU0xQUVMUWcwaEVRelRBUXRDRGlFUkROSUJDMElQSVJFTTBRRUxJQUJDQUNBQUtRTWdJaEVnQWlBQkloQnJyU0lTZlNJVElCTWdFVlliTndNZ0lCRWdFbFlpRkVVTjBnRkJIeUVRRE1BREN3SkFJQUVpQVNBQ1JnMEFJQUJCaVlDQWdBQTJBZ2dnQUNBQk5nSUVJQUVoQVVFa0lSQU1wd01MUVNBaEVBeS9Bd3NnQUNBQkloQWdBaEMrZ0lDQUFFRi9hZzRGdGdFQXhRSUIwUUhTQVF0QkVTRVFES1FEQ3lBQVFRRTZBQzhnRUNFQkRMc0RDeUFCSWdFZ0FrY04wZ0ZCSkNFUURMc0RDeUFCSWcwZ0FrY05Ia0hHQUNFUURMb0RDeUFBSUFFaUFTQUNFTEtBZ0lBQUloQU4xQUVnQVNFQkRMVUJDeUFCSWhBZ0FrY05Ka0hRQUNFUURMZ0RDd0pBSUFFaUFTQUNSdzBBUVNnaEVBeTRBd3NnQUVFQU5nSUVJQUJCaklDQWdBQTJBZ2dnQUNBQklBRVFzWUNBZ0FBaUVBM1RBU0FCSVFFTTJBRUxBa0FnQVNJUUlBSkhEUUJCS1NFUURMY0RDeUFRTFFBQUlnRkJJRVlORkNBQlFRbEhEZE1CSUJCQkFXb2hBUXdWQ3dKQUlBRWlBU0FDUmcwQUlBRkJBV29oQVF3WEMwRXFJUkFNdFFNTEFrQWdBU0lRSUFKSERRQkJLeUVRRExVREN3SkFJQkF0QUFBaUFVRUpSZzBBSUFGQklFY04xUUVMSUFBdEFDeEJDRVlOMHdFZ0VDRUJESkVEQ3dKQUlBRWlBU0FDUncwQVFTd2hFQXkwQXdzZ0FTMEFBRUVLUnczVkFTQUJRUUZxSVFFTXlRSUxJQUVpRGlBQ1J3M1ZBVUV2SVJBTXNnTUxBMEFDUUNBQkxRQUFJaEJCSUVZTkFBSkFJQkJCZG1vT0JBRGNBZHdCQU5vQkN5QUJJUUVNNEFFTElBRkJBV29pQVNBQ1J3MEFDMEV4SVJBTXNRTUxRVEloRUNBQkloUWdBa1lOc0FNZ0FpQVVheUFBS0FJQUlnRnFJUlVnRkNBQmEwRURhaUVXQWtBRFFDQVVMUUFBSWhkQklISWdGeUFYUWI5L2FrSC9BWEZCR2trYlFmOEJjU0FCUWZDN2dJQUFhaTBBQUVjTkFRSkFJQUZCQTBjTkFFRUdJUUVNbGdNTElBRkJBV29oQVNBVVFRRnFJaFFnQWtjTkFBc2dBQ0FWTmdJQURMRURDeUFBUVFBMkFnQWdGQ0VCRE5rQkMwRXpJUkFnQVNJVUlBSkdEYThESUFJZ0ZHc2dBQ2dDQUNJQmFpRVZJQlFnQVd0QkNHb2hGZ0pBQTBBZ0ZDMEFBQ0lYUVNCeUlCY2dGMEcvZjJwQi93RnhRUnBKRzBIL0FYRWdBVUgwdTRDQUFHb3RBQUJIRFFFQ1FDQUJRUWhIRFFCQkJTRUJESlVEQ3lBQlFRRnFJUUVnRkVFQmFpSVVJQUpIRFFBTElBQWdGVFlDQUF5d0F3c2dBRUVBTmdJQUlCUWhBUXpZQVF0Qk5DRVFJQUVpRkNBQ1JnMnVBeUFDSUJScklBQW9BZ0FpQVdvaEZTQVVJQUZyUVFWcUlSWUNRQU5BSUJRdEFBQWlGMEVnY2lBWElCZEJ2MzlxUWY4QmNVRWFTUnRCL3dGeElBRkIwTUtBZ0FCcUxRQUFSdzBCQWtBZ0FVRUZSdzBBUVFjaEFReVVBd3NnQVVFQmFpRUJJQlJCQVdvaUZDQUNSdzBBQ3lBQUlCVTJBZ0FNcndNTElBQkJBRFlDQUNBVUlRRU0xd0VMQWtBZ0FTSUJJQUpHRFFBRFFBSkFJQUV0QUFCQmdMNkFnQUJxTFFBQUloQkJBVVlOQUNBUVFRSkdEUW9nQVNFQkROMEJDeUFCUVFGcUlnRWdBa2NOQUF0Qk1DRVFESzREQzBFd0lSQU1yUU1MQWtBZ0FTSUJJQUpHRFFBRFFBSkFJQUV0QUFBaUVFRWdSZzBBSUJCQmRtb09CTmtCMmdIYUFka0IyZ0VMSUFGQkFXb2lBU0FDUncwQUMwRTRJUkFNclFNTFFUZ2hFQXlzQXdzRFFBSkFJQUV0QUFBaUVFRWdSZzBBSUJCQkNVY05Bd3NnQVVFQmFpSUJJQUpIRFFBTFFUd2hFQXlyQXdzRFFBSkFJQUV0QUFBaUVFRWdSZzBBQWtBQ1FDQVFRWFpxRGdUYUFRRUIyZ0VBQ3lBUVFTeEdEZHNCQ3lBQklRRU1CQXNnQVVFQmFpSUJJQUpIRFFBTFFUOGhFQXlxQXdzZ0FTRUJETnNCQzBIQUFDRVFJQUVpRkNBQ1JnMm9BeUFDSUJScklBQW9BZ0FpQVdvaEZpQVVJQUZyUVFacUlSY0NRQU5BSUJRdEFBQkJJSElnQVVHQXdJQ0FBR290QUFCSERRRWdBVUVHUmcyT0F5QUJRUUZxSVFFZ0ZFRUJhaUlVSUFKSERRQUxJQUFnRmpZQ0FBeXBBd3NnQUVFQU5nSUFJQlFoQVF0Qk5pRVFESTREQ3dKQUlBRWlEeUFDUncwQVFjRUFJUkFNcHdNTElBQkJqSUNBZ0FBMkFnZ2dBQ0FQTmdJRUlBOGhBU0FBTFFBc1FYOXFEZ1ROQWRVQjF3SFpBWWNEQ3lBQlFRRnFJUUVNekFFTEFrQWdBU0lCSUFKR0RRQURRQUpBSUFFdEFBQWlFRUVnY2lBUUlCQkJ2MzlxUWY4QmNVRWFTUnRCL3dGeEloQkJDVVlOQUNBUVFTQkdEUUFDUUFKQUFrQUNRQ0FRUVoxL2FnNFRBQU1EQXdNREF3TUJBd01EQXdNREF3TURBZ01MSUFGQkFXb2hBVUV4SVJBTWtRTUxJQUZCQVdvaEFVRXlJUkFNa0FNTElBRkJBV29oQVVFeklSQU1qd01MSUFFaEFRelFBUXNnQVVFQmFpSUJJQUpIRFFBTFFUVWhFQXlsQXd0Qk5TRVFES1FEQ3dKQUlBRWlBU0FDUmcwQUEwQUNRQ0FCTFFBQVFZQzhnSUFBYWkwQUFFRUJSZzBBSUFFaEFRelRBUXNnQVVFQmFpSUJJQUpIRFFBTFFUMGhFQXlrQXd0QlBTRVFES01EQ3lBQUlBRWlBU0FDRUxDQWdJQUFJaEFOMWdFZ0FTRUJEQUVMSUJCQkFXb2hBUXRCUENFUURJY0RDd0pBSUFFaUFTQUNSdzBBUWNJQUlSQU1vQU1MQWtBRFFBSkFJQUV0QUFCQmQyb09HQUFDL2dMK0FvUUQvZ0wrQXY0Qy9nTCtBdjRDL2dMK0F2NEMvZ0wrQXY0Qy9nTCtBdjRDL2dMK0F2NENBUDRDQ3lBQlFRRnFJZ0VnQWtjTkFBdEJ3Z0FoRUF5Z0F3c2dBVUVCYWlFQklBQXRBQzFCQVhGRkRiMEJJQUVoQVF0QkxDRVFESVVEQ3lBQklnRWdBa2NOMHdGQnhBQWhFQXlkQXdzRFFBSkFJQUV0QUFCQmtNQ0FnQUJxTFFBQVFRRkdEUUFnQVNFQkRMY0NDeUFCUVFGcUlnRWdBa2NOQUF0QnhRQWhFQXljQXdzZ0RTMEFBQ0lRUVNCR0RiTUJJQkJCT2tjTmdRTWdBQ2dDQkNFQklBQkJBRFlDQkNBQUlBRWdEUkN2Z0lDQUFDSUJEZEFCSUExQkFXb2hBUXl6QWd0Qnh3QWhFQ0FCSWcwZ0FrWU5tZ01nQWlBTmF5QUFLQUlBSWdGcUlSWWdEU0FCYTBFRmFpRVhBMEFnRFMwQUFDSVVRU0J5SUJRZ0ZFRy9mMnBCL3dGeFFScEpHMEgvQVhFZ0FVR1F3b0NBQUdvdEFBQkhEWUFESUFGQkJVWU45QUlnQVVFQmFpRUJJQTFCQVdvaURTQUNSdzBBQ3lBQUlCWTJBZ0FNbWdNTFFjZ0FJUkFnQVNJTklBSkdEWmtESUFJZ0RXc2dBQ2dDQUNJQmFpRVdJQTBnQVd0QkNXb2hGd05BSUEwdEFBQWlGRUVnY2lBVUlCUkJ2MzlxUWY4QmNVRWFTUnRCL3dGeElBRkJsc0tBZ0FCcUxRQUFSdzMvQWdKQUlBRkJDVWNOQUVFQ0lRRU05UUlMSUFGQkFXb2hBU0FOUVFGcUlnMGdBa2NOQUFzZ0FDQVdOZ0lBREprREN3SkFJQUVpRFNBQ1J3MEFRY2tBSVJBTW1RTUxBa0FDUUNBTkxRQUFJZ0ZCSUhJZ0FTQUJRYjkvYWtIL0FYRkJHa2tiUWY4QmNVR1NmMm9PQndDQUE0QURnQU9BQTRBREFZQURDeUFOUVFGcUlRRkJQaUVRRElBREN5QU5RUUZxSVFGQlB5RVFEUDhDQzBIS0FDRVFJQUVpRFNBQ1JnMlhBeUFDSUExcklBQW9BZ0FpQVdvaEZpQU5JQUZyUVFGcUlSY0RRQ0FOTFFBQUloUkJJSElnRkNBVVFiOS9ha0gvQVhGQkdra2JRZjhCY1NBQlFhRENnSUFBYWkwQUFFY04vUUlnQVVFQlJnM3dBaUFCUVFGcUlRRWdEVUVCYWlJTklBSkhEUUFMSUFBZ0ZqWUNBQXlYQXd0Qnl3QWhFQ0FCSWcwZ0FrWU5sZ01nQWlBTmF5QUFLQUlBSWdGcUlSWWdEU0FCYTBFT2FpRVhBMEFnRFMwQUFDSVVRU0J5SUJRZ0ZFRy9mMnBCL3dGeFFScEpHMEgvQVhFZ0FVR2l3b0NBQUdvdEFBQkhEZndDSUFGQkRrWU44QUlnQVVFQmFpRUJJQTFCQVdvaURTQUNSdzBBQ3lBQUlCWTJBZ0FNbGdNTFFjd0FJUkFnQVNJTklBSkdEWlVESUFJZ0RXc2dBQ2dDQUNJQmFpRVdJQTBnQVd0QkQyb2hGd05BSUEwdEFBQWlGRUVnY2lBVUlCUkJ2MzlxUWY4QmNVRWFTUnRCL3dGeElBRkJ3TUtBZ0FCcUxRQUFSdzM3QWdKQUlBRkJEMGNOQUVFRElRRU04UUlMSUFGQkFXb2hBU0FOUVFGcUlnMGdBa2NOQUFzZ0FDQVdOZ0lBREpVREMwSE5BQ0VRSUFFaURTQUNSZzJVQXlBQ0lBMXJJQUFvQWdBaUFXb2hGaUFOSUFGclFRVnFJUmNEUUNBTkxRQUFJaFJCSUhJZ0ZDQVVRYjkvYWtIL0FYRkJHa2tiUWY4QmNTQUJRZERDZ0lBQWFpMEFBRWNOK2dJQ1FDQUJRUVZIRFFCQkJDRUJEUEFDQ3lBQlFRRnFJUUVnRFVFQmFpSU5JQUpIRFFBTElBQWdGallDQUF5VUF3c0NRQ0FCSWcwZ0FrY05BRUhPQUNFUURKUURDd0pBQWtBQ1FBSkFJQTB0QUFBaUFVRWdjaUFCSUFGQnYzOXFRZjhCY1VFYVNSdEIvd0Z4UVoxL2FnNFRBUDBDL1FMOUF2MEMvUUw5QXYwQy9RTDlBdjBDL1FMOUFnSDlBdjBDL1FJQ0EvMENDeUFOUVFGcUlRRkJ3UUFoRUF6OUFnc2dEVUVCYWlFQlFjSUFJUkFNL0FJTElBMUJBV29oQVVIREFDRVFEUHNDQ3lBTlFRRnFJUUZCeEFBaEVBejZBZ3NDUUNBQklnRWdBa1lOQUNBQVFZMkFnSUFBTmdJSUlBQWdBVFlDQkNBQklRRkJ4UUFoRUF6NkFndEJ6d0FoRUF5U0F3c2dFQ0VCQWtBQ1FDQVFMUUFBUVhacURnUUJxQUtvQWdDb0Fnc2dFRUVCYWlFQkMwRW5JUkFNK0FJTEFrQWdBU0lCSUFKSERRQkIwUUFoRUF5UkF3c0NRQ0FCTFFBQVFTQkdEUUFnQVNFQkRJMEJDeUFCUVFGcUlRRWdBQzBBTFVFQmNVVU54d0VnQVNFQkRJd0JDeUFCSWhjZ0FrY055QUZCMGdBaEVBeVBBd3RCMHdBaEVDQUJJaFFnQWtZTmpnTWdBaUFVYXlBQUtBSUFJZ0ZxSVJZZ0ZDQUJhMEVCYWlFWEEwQWdGQzBBQUNBQlFkYkNnSUFBYWkwQUFFY056QUVnQVVFQlJnM0hBU0FCUVFGcUlRRWdGRUVCYWlJVUlBSkhEUUFMSUFBZ0ZqWUNBQXlPQXdzQ1FDQUJJZ0VnQWtjTkFFSFZBQ0VRREk0REN5QUJMUUFBUVFwSERjd0JJQUZCQVdvaEFRekhBUXNDUUNBQklnRWdBa2NOQUVIV0FDRVFESTBEQ3dKQUFrQWdBUzBBQUVGMmFnNEVBTTBCelFFQnpRRUxJQUZCQVdvaEFRekhBUXNnQVVFQmFpRUJRY29BSVJBTTh3SUxJQUFnQVNJQklBSVFyb0NBZ0FBaUVBM0xBU0FCSVFGQnpRQWhFQXp5QWdzZ0FDMEFLVUVpUmcyRkF3eW1BZ3NDUUNBQklnRWdBa2NOQUVIYkFDRVFESW9EQzBFQUlSUkJBU0VYUVFFaEZrRUFJUkFDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FnQVMwQUFFRlFhZzRLMUFIVEFRQUJBZ01FQlFZSTFRRUxRUUloRUF3R0MwRURJUkFNQlF0QkJDRVFEQVFMUVFVaEVBd0RDMEVHSVJBTUFndEJCeUVRREFFTFFRZ2hFQXRCQUNFWFFRQWhGa0VBSVJRTXpBRUxRUWtoRUVFQklSUkJBQ0VYUVFBaEZnekxBUXNDUUNBQklnRWdBa2NOQUVIZEFDRVFESWtEQ3lBQkxRQUFRUzVIRGN3QklBRkJBV29oQVF5bUFnc2dBU0lCSUFKSERjd0JRZDhBSVJBTWh3TUxBa0FnQVNJQklBSkdEUUFnQUVHT2dJQ0FBRFlDQ0NBQUlBRTJBZ1FnQVNFQlFkQUFJUkFNN2dJTFFlQUFJUkFNaGdNTFFlRUFJUkFnQVNJQklBSkdEWVVESUFJZ0FXc2dBQ2dDQUNJVWFpRVdJQUVnRkd0QkEyb2hGd05BSUFFdEFBQWdGRUhpd29DQUFHb3RBQUJIRGMwQklCUkJBMFlOekFFZ0ZFRUJhaUVVSUFGQkFXb2lBU0FDUncwQUN5QUFJQlkyQWdBTWhRTUxRZUlBSVJBZ0FTSUJJQUpHRFlRRElBSWdBV3NnQUNnQ0FDSVVhaUVXSUFFZ0ZHdEJBbW9oRndOQUlBRXRBQUFnRkVIbXdvQ0FBR290QUFCSERjd0JJQlJCQWtZTnpnRWdGRUVCYWlFVUlBRkJBV29pQVNBQ1J3MEFDeUFBSUJZMkFnQU1oQU1MUWVNQUlSQWdBU0lCSUFKR0RZTURJQUlnQVdzZ0FDZ0NBQ0lVYWlFV0lBRWdGR3RCQTJvaEZ3TkFJQUV0QUFBZ0ZFSHB3b0NBQUdvdEFBQkhEY3NCSUJSQkEwWU56Z0VnRkVFQmFpRVVJQUZCQVdvaUFTQUNSdzBBQ3lBQUlCWTJBZ0FNZ3dNTEFrQWdBU0lCSUFKSERRQkI1UUFoRUF5REF3c2dBQ0FCUVFGcUlnRWdBaENvZ0lDQUFDSVFEYzBCSUFFaEFVSFdBQ0VRRE9rQ0N3SkFJQUVpQVNBQ1JnMEFBMEFDUUNBQkxRQUFJaEJCSUVZTkFBSkFBa0FDUUNBUVFiaC9hZzRMQUFIUEFjOEJ6d0hQQWM4Qnp3SFBBYzhCQXM4QkN5QUJRUUZxSVFGQjBnQWhFQXp0QWdzZ0FVRUJhaUVCUWRNQUlSQU03QUlMSUFGQkFXb2hBVUhVQUNFUURPc0NDeUFCUVFGcUlnRWdBa2NOQUF0QjVBQWhFQXlDQXd0QjVBQWhFQXlCQXdzRFFBSkFJQUV0QUFCQjhNS0FnQUJxTFFBQUloQkJBVVlOQUNBUVFYNXFEZ1BQQWRBQjBRSFNBUXNnQVVFQmFpSUJJQUpIRFFBTFFlWUFJUkFNZ0FNTEFrQWdBU0lCSUFKR0RRQWdBVUVCYWlFQkRBTUxRZWNBSVJBTS93SUxBMEFDUUNBQkxRQUFRZkRFZ0lBQWFpMEFBQ0lRUVFGR0RRQUNRQ0FRUVg1cURnVFNBZE1CMUFFQTFRRUxJQUVoQVVIWEFDRVFET2NDQ3lBQlFRRnFJZ0VnQWtjTkFBdEI2QUFoRUF6K0Fnc0NRQ0FCSWdFZ0FrY05BRUhwQUNFUURQNENDd0pBSUFFdEFBQWlFRUYyYWc0YXVnSFZBZFVCdkFIVkFkVUIxUUhWQWRVQjFRSFZBZFVCMVFIVkFkVUIxUUhWQWRVQjFRSFZBZFVCMVFIS0FkVUIxUUVBMHdFTElBRkJBV29oQVF0QkJpRVFET01DQ3dOQUFrQWdBUzBBQUVId3hvQ0FBR290QUFCQkFVWU5BQ0FCSVFFTW5nSUxJQUZCQVdvaUFTQUNSdzBBQzBIcUFDRVFEUHNDQ3dKQUlBRWlBU0FDUmcwQUlBRkJBV29oQVF3REMwSHJBQ0VRRFBvQ0N3SkFJQUVpQVNBQ1J3MEFRZXdBSVJBTStnSUxJQUZCQVdvaEFRd0JDd0pBSUFFaUFTQUNSdzBBUWUwQUlSQU0rUUlMSUFGQkFXb2hBUXRCQkNFUURONENDd0pBSUFFaUZDQUNSdzBBUWU0QUlSQU05d0lMSUJRaEFRSkFBa0FDUUNBVUxRQUFRZkRJZ0lBQWFpMEFBRUYvYWc0SDFBSFZBZFlCQUp3Q0FRTFhBUXNnRkVFQmFpRUJEQW9MSUJSQkFXb2hBUXpOQVF0QkFDRVFJQUJCQURZQ0hDQUFRWnVTZ0lBQU5nSVFJQUJCQnpZQ0RDQUFJQlJCQVdvMkFoUU05Z0lMQWtBRFFBSkFJQUV0QUFCQjhNaUFnQUJxTFFBQUloQkJCRVlOQUFKQUFrQWdFRUYvYWc0SDBnSFRBZFFCMlFFQUJBSFpBUXNnQVNFQlFkb0FJUkFNNEFJTElBRkJBV29oQVVIY0FDRVFETjhDQ3lBQlFRRnFJZ0VnQWtjTkFBdEI3d0FoRUF6MkFnc2dBVUVCYWlFQkRNc0JDd0pBSUFFaUZDQUNSdzBBUWZBQUlSQU05UUlMSUJRdEFBQkJMMGNOMUFFZ0ZFRUJhaUVCREFZTEFrQWdBU0lVSUFKSERRQkI4UUFoRUF6MEFnc0NRQ0FVTFFBQUlnRkJMMGNOQUNBVVFRRnFJUUZCM1FBaEVBemJBZ3NnQVVGMmFpSUVRUlpMRGRNQlFRRWdCSFJCaVlDQUFuRkZEZE1CRE1vQ0N3SkFJQUVpQVNBQ1JnMEFJQUZCQVdvaEFVSGVBQ0VRRE5vQ0MwSHlBQ0VRRFBJQ0N3SkFJQUVpRkNBQ1J3MEFRZlFBSVJBTThnSUxJQlFoQVFKQUlCUXRBQUJCOE15QWdBQnFMUUFBUVg5cURnUEpBcFFDQU5RQkMwSGhBQ0VRRE5nQ0N3SkFJQUVpRkNBQ1JnMEFBMEFDUUNBVUxRQUFRZkRLZ0lBQWFpMEFBQ0lCUVFOR0RRQUNRQ0FCUVg5cURnTExBZ0RWQVFzZ0ZDRUJRZDhBSVJBTTJnSUxJQlJCQVdvaUZDQUNSdzBBQzBIekFDRVFEUEVDQzBIekFDRVFEUEFDQ3dKQUlBRWlBU0FDUmcwQUlBQkJqNENBZ0FBMkFnZ2dBQ0FCTmdJRUlBRWhBVUhnQUNFUUROY0NDMEgxQUNFUURPOENDd0pBSUFFaUFTQUNSdzBBUWZZQUlSQU03d0lMSUFCQmo0Q0FnQUEyQWdnZ0FDQUJOZ0lFSUFFaEFRdEJBeUVRRE5RQ0N3TkFJQUV0QUFCQklFY053d0lnQVVFQmFpSUJJQUpIRFFBTFFmY0FJUkFNN0FJTEFrQWdBU0lCSUFKSERRQkIrQUFoRUF6c0Fnc2dBUzBBQUVFZ1J3M09BU0FCUVFGcUlRRU03d0VMSUFBZ0FTSUJJQUlRcklDQWdBQWlFQTNPQVNBQklRRU1qZ0lMQWtBZ0FTSUVJQUpIRFFCQitnQWhFQXpxQWdzZ0JDMEFBRUhNQUVjTjBRRWdCRUVCYWlFQlFSTWhFQXpQQVFzQ1FDQUJJZ1FnQWtjTkFFSDdBQ0VRRE9rQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUVZxSVJBRFFDQUVMUUFBSUFGQjhNNkFnQUJxTFFBQVJ3M1FBU0FCUVFWR0RjNEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRZnNBSVJBTTZBSUxBa0FnQVNJRUlBSkhEUUJCL0FBaEVBem9BZ3NDUUFKQUlBUXRBQUJCdlg5cURnd0EwUUhSQWRFQjBRSFJBZEVCMFFIUkFkRUIwUUVCMFFFTElBUkJBV29oQVVIbUFDRVFETThDQ3lBRVFRRnFJUUZCNXdBaEVBek9BZ3NDUUNBQklnUWdBa2NOQUVIOUFDRVFET2NDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRSnFJUkFDUUFOQUlBUXRBQUFnQVVIdHo0Q0FBR290QUFCSERjOEJJQUZCQWtZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFSDlBQ0VRRE9jQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVJBaEVBek1BUXNDUUNBQklnUWdBa2NOQUVIK0FDRVFET1lDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRVnFJUkFDUUFOQUlBUXRBQUFnQVVIMnpvQ0FBR290QUFCSERjNEJJQUZCQlVZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFSCtBQ0VRRE9ZQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVJZaEVBekxBUXNDUUNBQklnUWdBa2NOQUVIL0FDRVFET1VDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRTnFJUkFDUUFOQUlBUXRBQUFnQVVIOHpvQ0FBR290QUFCSERjMEJJQUZCQTBZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFSC9BQ0VRRE9VQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVFVaEVBektBUXNDUUNBQklnUWdBa2NOQUVHQUFTRVFET1FDQ3lBRUxRQUFRZGtBUnczTEFTQUVRUUZxSVFGQkNDRVFETWtCQ3dKQUlBRWlCQ0FDUncwQVFZRUJJUkFNNHdJTEFrQUNRQ0FFTFFBQVFiSi9hZzREQU13QkFjd0JDeUFFUVFGcUlRRkI2d0FoRUF6S0Fnc2dCRUVCYWlFQlFld0FJUkFNeVFJTEFrQWdBU0lFSUFKSERRQkJnZ0VoRUF6aUFnc0NRQUpBSUFRdEFBQkJ1SDlxRGdnQXl3SExBY3NCeXdITEFjc0JBY3NCQ3lBRVFRRnFJUUZCNmdBaEVBekpBZ3NnQkVFQmFpRUJRZTBBSVJBTXlBSUxBa0FnQVNJRUlBSkhEUUJCZ3dFaEVBemhBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSQWdCQ0FCYTBFQ2FpRVVBa0FEUUNBRUxRQUFJQUZCZ00rQWdBQnFMUUFBUnczSkFTQUJRUUpHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQkEyQWdCQmd3RWhFQXpoQWd0QkFDRVFJQUJCQURZQ0FDQVVRUUZxSVFFTXhnRUxBa0FnQVNJRUlBSkhEUUJCaEFFaEVBemdBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFRWFpRVFBa0FEUUNBRUxRQUFJQUZCZzgrQWdBQnFMUUFBUnczSUFTQUJRUVJHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQmhBRWhFQXpnQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVqSVJBTXhRRUxBa0FnQVNJRUlBSkhEUUJCaFFFaEVBemZBZ3NDUUFKQUlBUXRBQUJCdEg5cURnZ0F5QUhJQWNnQnlBSElBY2dCQWNnQkN5QUVRUUZxSVFGQjd3QWhFQXpHQWdzZ0JFRUJhaUVCUWZBQUlSQU14UUlMQWtBZ0FTSUVJQUpIRFFCQmhnRWhFQXplQWdzZ0JDMEFBRUhGQUVjTnhRRWdCRUVCYWlFQkRJTUNDd0pBSUFFaUJDQUNSdzBBUVljQklSQU0zUUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkEyb2hFQUpBQTBBZ0JDMEFBQ0FCUVlqUGdJQUFhaTBBQUVjTnhRRWdBVUVEUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFZY0JJUkFNM1FJTElBQkJBRFlDQUNBUVFRRnFJUUZCTFNFUURNSUJDd0pBSUFFaUJDQUNSdzBBUVlnQklSQU0zQUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkNHb2hFQUpBQTBBZ0JDMEFBQ0FCUWREUGdJQUFhaTBBQUVjTnhBRWdBVUVJUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFZZ0JJUkFNM0FJTElBQkJBRFlDQUNBUVFRRnFJUUZCS1NFUURNRUJDd0pBSUFFaUFTQUNSdzBBUVlrQklSQU0yd0lMUVFFaEVDQUJMUUFBUWQ4QVJ3M0FBU0FCUVFGcUlRRU1nUUlMQWtBZ0FTSUVJQUpIRFFCQmlnRWhFQXphQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUJhaUVRQTBBZ0JDMEFBQ0FCUVl6UGdJQUFhaTBBQUVjTndRRWdBVUVCUmcydkFpQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR0tBU0VRRE5rQ0N3SkFJQUVpQkNBQ1J3MEFRWXNCSVJBTTJRSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQW1vaEVBSkFBMEFnQkMwQUFDQUJRWTdQZ0lBQWFpMEFBRWNOd1FFZ0FVRUNSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVlzQklSQU0yUUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJBaUVRREw0QkN3SkFJQUVpQkNBQ1J3MEFRWXdCSVJBTTJBSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQVdvaEVBSkFBMEFnQkMwQUFDQUJRZkRQZ0lBQWFpMEFBRWNOd0FFZ0FVRUJSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVl3QklSQU0yQUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJIeUVRREwwQkN3SkFJQUVpQkNBQ1J3MEFRWTBCSVJBTTF3SUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQVdvaEVBSkFBMEFnQkMwQUFDQUJRZkxQZ0lBQWFpMEFBRWNOdndFZ0FVRUJSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVkwQklSQU0xd0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJDU0VRREx3QkN3SkFJQUVpQkNBQ1J3MEFRWTRCSVJBTTFnSUxBa0FDUUNBRUxRQUFRYmQvYWc0SEFMOEJ2d0cvQWI4QnZ3RUJ2d0VMSUFSQkFXb2hBVUg0QUNFUURMMENDeUFFUVFGcUlRRkIrUUFoRUF5OEFnc0NRQ0FCSWdRZ0FrY05BRUdQQVNFUUROVUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFWcUlSQUNRQU5BSUFRdEFBQWdBVUdSejRDQUFHb3RBQUJIRGIwQklBRkJCVVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHUEFTRVFETlVDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUmdoRUF5NkFRc0NRQ0FCSWdRZ0FrY05BRUdRQVNFUUROUUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFKcUlSQUNRQU5BSUFRdEFBQWdBVUdYejRDQUFHb3RBQUJIRGJ3QklBRkJBa1lOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHUUFTRVFETlFDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUmNoRUF5NUFRc0NRQ0FCSWdRZ0FrY05BRUdSQVNFUUROTUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFacUlSQUNRQU5BSUFRdEFBQWdBVUdhejRDQUFHb3RBQUJIRGJzQklBRkJCa1lOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHUkFTRVFETk1DQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUlVoRUF5NEFRc0NRQ0FCSWdRZ0FrY05BRUdTQVNFUUROSUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFWcUlSQUNRQU5BSUFRdEFBQWdBVUdoejRDQUFHb3RBQUJIRGJvQklBRkJCVVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHU0FTRVFETklDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUjRoRUF5M0FRc0NRQ0FCSWdRZ0FrY05BRUdUQVNFUURORUNDeUFFTFFBQVFjd0FSdzI0QVNBRVFRRnFJUUZCQ2lFUURMWUJDd0pBSUFRZ0FrY05BRUdVQVNFUUROQUNDd0pBQWtBZ0JDMEFBRUcvZjJvT0R3QzVBYmtCdVFHNUFia0J1UUc1QWJrQnVRRzVBYmtCdVFHNUFRRzVBUXNnQkVFQmFpRUJRZjRBSVJBTXR3SUxJQVJCQVdvaEFVSC9BQ0VRRExZQ0N3SkFJQVFnQWtjTkFFR1ZBU0VRRE04Q0N3SkFBa0FnQkMwQUFFRy9mMm9PQXdDNEFRRzRBUXNnQkVFQmFpRUJRZjBBSVJBTXRnSUxJQVJCQVdvaEJFR0FBU0VRRExVQ0N3SkFJQVFnQWtjTkFFR1dBU0VRRE00Q0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUZxSVJBQ1FBTkFJQVF0QUFBZ0FVR256NENBQUdvdEFBQkhEYllCSUFGQkFVWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdXQVNFUURNNENDeUFBUVFBMkFnQWdFRUVCYWlFQlFRc2hFQXl6QVFzQ1FDQUVJQUpIRFFCQmx3RWhFQXpOQWdzQ1FBSkFBa0FDUUNBRUxRQUFRVk5xRGlNQXVBRzRBYmdCdUFHNEFiZ0J1QUc0QWJnQnVBRzRBYmdCdUFHNEFiZ0J1QUc0QWJnQnVBRzRBYmdCdUFHNEFRRzRBYmdCdUFHNEFiZ0JBcmdCdUFHNEFRTzRBUXNnQkVFQmFpRUJRZnNBSVJBTXRnSUxJQVJCQVdvaEFVSDhBQ0VRRExVQ0N5QUVRUUZxSVFSQmdRRWhFQXkwQWdzZ0JFRUJhaUVFUVlJQklSQU1zd0lMQWtBZ0JDQUNSdzBBUVpnQklSQU16QUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkJHb2hFQUpBQTBBZ0JDMEFBQ0FCUWFuUGdJQUFhaTBBQUVjTnRBRWdBVUVFUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFaZ0JJUkFNekFJTElBQkJBRFlDQUNBUVFRRnFJUUZCR1NFUURMRUJDd0pBSUFRZ0FrY05BRUdaQVNFUURNc0NDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFWcUlSQUNRQU5BSUFRdEFBQWdBVUd1ejRDQUFHb3RBQUJIRGJNQklBRkJCVVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHWkFTRVFETXNDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUVloRUF5d0FRc0NRQ0FFSUFKSERRQkJtZ0VoRUF6S0Fnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVCYWlFUUFrQURRQ0FFTFFBQUlBRkJ0TStBZ0FCcUxRQUFSdzJ5QVNBQlFRRkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCbWdFaEVBektBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRWNJUkFNcndFTEFrQWdCQ0FDUncwQVFac0JJUkFNeVFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBV29oRUFKQUEwQWdCQzBBQUNBQlFiYlBnSUFBYWkwQUFFY05zUUVnQVVFQlJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWnNCSVJBTXlRSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkp5RVFESzRCQ3dKQUlBUWdBa2NOQUVHY0FTRVFETWdDQ3dKQUFrQWdCQzBBQUVHc2Yyb09BZ0FCc1FFTElBUkJBV29oQkVHR0FTRVFESzhDQ3lBRVFRRnFJUVJCaHdFaEVBeXVBZ3NDUUNBRUlBSkhEUUJCblFFaEVBekhBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFQmFpRVFBa0FEUUNBRUxRQUFJQUZCdU0rQWdBQnFMUUFBUncydkFTQUJRUUZHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQm5RRWhFQXpIQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVtSVJBTXJBRUxBa0FnQkNBQ1J3MEFRWjRCSVJBTXhnSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQVdvaEVBSkFBMEFnQkMwQUFDQUJRYnJQZ0lBQWFpMEFBRWNOcmdFZ0FVRUJSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVo0QklSQU14Z0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJBeUVRREtzQkN3SkFJQVFnQWtjTkFFR2ZBU0VRRE1VQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUpxSVJBQ1FBTkFJQVF0QUFBZ0FVSHR6NENBQUdvdEFBQkhEYTBCSUFGQkFrWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdmQVNFUURNVUNDeUFBUVFBMkFnQWdFRUVCYWlFQlFRd2hFQXlxQVFzQ1FDQUVJQUpIRFFCQm9BRWhFQXpFQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRURhaUVRQWtBRFFDQUVMUUFBSUFGQnZNK0FnQUJxTFFBQVJ3MnNBU0FCUVFOR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJvQUVoRUF6RUFnc2dBRUVBTmdJQUlCQkJBV29oQVVFTklSQU1xUUVMQWtBZ0JDQUNSdzBBUWFFQklSQU13d0lMQWtBQ1FDQUVMUUFBUWJwL2FnNExBS3dCckFHc0Fhd0JyQUdzQWF3QnJBR3NBUUdzQVFzZ0JFRUJhaUVFUVlzQklSQU1xZ0lMSUFSQkFXb2hCRUdNQVNFUURLa0NDd0pBSUFRZ0FrY05BRUdpQVNFUURNSUNDeUFFTFFBQVFkQUFSdzJwQVNBRVFRRnFJUVFNNlFFTEFrQWdCQ0FDUncwQVFhTUJJUkFNd1FJTEFrQUNRQ0FFTFFBQVFiZC9hZzRIQWFvQnFnR3FBYW9CcWdFQXFnRUxJQVJCQVdvaEJFR09BU0VRREtnQ0N5QUVRUUZxSVFGQklpRVFES1lCQ3dKQUlBUWdBa2NOQUVHa0FTRVFETUFDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRRnFJUkFDUUFOQUlBUXRBQUFnQVVIQXo0Q0FBR290QUFCSERhZ0JJQUZCQVVZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR2tBU0VRRE1BQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVIwaEVBeWxBUXNDUUNBRUlBSkhEUUJCcFFFaEVBeS9BZ3NDUUFKQUlBUXRBQUJCcm45cURnTUFxQUVCcUFFTElBUkJBV29oQkVHUUFTRVFES1lDQ3lBRVFRRnFJUUZCQkNFUURLUUJDd0pBSUFRZ0FrY05BRUdtQVNFUURMNENDd0pBQWtBQ1FBSkFBa0FnQkMwQUFFRy9mMm9PRlFDcUFhb0JxZ0dxQWFvQnFnR3FBYW9CcWdHcUFRR3FBYW9CQXFvQnFnRURxZ0dxQVFTcUFRc2dCRUVCYWlFRVFZZ0JJUkFNcUFJTElBUkJBV29oQkVHSkFTRVFES2NDQ3lBRVFRRnFJUVJCaWdFaEVBeW1BZ3NnQkVFQmFpRUVRWThCSVJBTXBRSUxJQVJCQVdvaEJFR1JBU0VRREtRQ0N3SkFJQVFnQWtjTkFFR25BU0VRREwwQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUpxSVJBQ1FBTkFJQVF0QUFBZ0FVSHR6NENBQUdvdEFBQkhEYVVCSUFGQkFrWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUduQVNFUURMMENDeUFBUVFBMkFnQWdFRUVCYWlFQlFSRWhFQXlpQVFzQ1FDQUVJQUpIRFFCQnFBRWhFQXk4QWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUNhaUVRQWtBRFFDQUVMUUFBSUFGQndzK0FnQUJxTFFBQVJ3MmtBU0FCUVFKR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJxQUVoRUF5OEFnc2dBRUVBTmdJQUlCQkJBV29oQVVFc0lSQU1vUUVMQWtBZ0JDQUNSdzBBUWFrQklSQU11d0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkJHb2hFQUpBQTBBZ0JDMEFBQ0FCUWNYUGdJQUFhaTBBQUVjTm93RWdBVUVFUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFha0JJUkFNdXdJTElBQkJBRFlDQUNBUVFRRnFJUUZCS3lFUURLQUJDd0pBSUFRZ0FrY05BRUdxQVNFUURMb0NDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFKcUlSQUNRQU5BSUFRdEFBQWdBVUhLejRDQUFHb3RBQUJIRGFJQklBRkJBa1lOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHcUFTRVFETG9DQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUlFoRUF5ZkFRc0NRQ0FFSUFKSERRQkJxd0VoRUF5NUFnc0NRQUpBQWtBQ1FDQUVMUUFBUWI1L2FnNFBBQUVDcEFHa0FhUUJwQUdrQWFRQnBBR2tBYVFCcEFHa0FRT2tBUXNnQkVFQmFpRUVRWk1CSVJBTW9nSUxJQVJCQVdvaEJFR1VBU0VRREtFQ0N5QUVRUUZxSVFSQmxRRWhFQXlnQWdzZ0JFRUJhaUVFUVpZQklSQU1ud0lMQWtBZ0JDQUNSdzBBUWF3QklSQU11QUlMSUFRdEFBQkJ4UUJIRFo4QklBUkJBV29oQkF6Z0FRc0NRQ0FFSUFKSERRQkJyUUVoRUF5M0Fnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVDYWlFUUFrQURRQ0FFTFFBQUlBRkJ6YytBZ0FCcUxRQUFSdzJmQVNBQlFRSkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCclFFaEVBeTNBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRU9JUkFNbkFFTEFrQWdCQ0FDUncwQVFhNEJJUkFNdGdJTElBUXRBQUJCMEFCSERaMEJJQVJCQVdvaEFVRWxJUkFNbXdFTEFrQWdCQ0FDUncwQVFhOEJJUkFNdFFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJDR29oRUFKQUEwQWdCQzBBQUNBQlFkRFBnSUFBYWkwQUFFY05uUUVnQVVFSVJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRYThCSVJBTXRRSUxJQUJCQURZQ0FDQVFRUUZxSVFGQktpRVFESm9CQ3dKQUlBUWdBa2NOQUVHd0FTRVFETFFDQ3dKQUFrQWdCQzBBQUVHcmYyb09Dd0NkQVowQm5RR2RBWjBCblFHZEFaMEJuUUVCblFFTElBUkJBV29oQkVHYUFTRVFESnNDQ3lBRVFRRnFJUVJCbXdFaEVBeWFBZ3NDUUNBRUlBSkhEUUJCc1FFaEVBeXpBZ3NDUUFKQUlBUXRBQUJCdjM5cURoUUFuQUdjQVp3Qm5BR2NBWndCbkFHY0Fad0JuQUdjQVp3Qm5BR2NBWndCbkFHY0Fad0JBWndCQ3lBRVFRRnFJUVJCbVFFaEVBeWFBZ3NnQkVFQmFpRUVRWndCSVJBTW1RSUxBa0FnQkNBQ1J3MEFRYklCSVJBTXNnSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQTJvaEVBSkFBMEFnQkMwQUFDQUJRZG5QZ0lBQWFpMEFBRWNObWdFZ0FVRURSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWJJQklSQU1zZ0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJJU0VRREpjQkN3SkFJQVFnQWtjTkFFR3pBU0VRRExFQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUVpxSVJBQ1FBTkFJQVF0QUFBZ0FVSGR6NENBQUdvdEFBQkhEWmtCSUFGQkJrWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUd6QVNFUURMRUNDeUFBUVFBMkFnQWdFRUVCYWlFQlFSb2hFQXlXQVFzQ1FDQUVJQUpIRFFCQnRBRWhFQXl3QWdzQ1FBSkFBa0FnQkMwQUFFRzdmMm9PRVFDYUFab0JtZ0dhQVpvQm1nR2FBWm9CbWdFQm1nR2FBWm9CbWdHYUFRS2FBUXNnQkVFQmFpRUVRWjBCSVJBTW1BSUxJQVJCQVdvaEJFR2VBU0VRREpjQ0N5QUVRUUZxSVFSQm53RWhFQXlXQWdzQ1FDQUVJQUpIRFFCQnRRRWhFQXl2QWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUZhaUVRQWtBRFFDQUVMUUFBSUFGQjVNK0FnQUJxTFFBQVJ3MlhBU0FCUVFWR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJ0UUVoRUF5dkFnc2dBRUVBTmdJQUlCQkJBV29oQVVFb0lSQU1sQUVMQWtBZ0JDQUNSdzBBUWJZQklSQU1yZ0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFtb2hFQUpBQTBBZ0JDMEFBQ0FCUWVyUGdJQUFhaTBBQUVjTmxnRWdBVUVDUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFiWUJJUkFNcmdJTElBQkJBRFlDQUNBUVFRRnFJUUZCQnlFUURKTUJDd0pBSUFRZ0FrY05BRUczQVNFUURLMENDd0pBQWtBZ0JDMEFBRUc3ZjJvT0RnQ1dBWllCbGdHV0FaWUJsZ0dXQVpZQmxnR1dBWllCbGdFQmxnRUxJQVJCQVdvaEJFR2hBU0VRREpRQ0N5QUVRUUZxSVFSQm9nRWhFQXlUQWdzQ1FDQUVJQUpIRFFCQnVBRWhFQXlzQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUNhaUVRQWtBRFFDQUVMUUFBSUFGQjdjK0FnQUJxTFFBQVJ3MlVBU0FCUVFKR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJ1QUVoRUF5c0Fnc2dBRUVBTmdJQUlCQkJBV29oQVVFU0lSQU1rUUVMQWtBZ0JDQUNSdzBBUWJrQklSQU1xd0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFXb2hFQUpBQTBBZ0JDMEFBQ0FCUWZEUGdJQUFhaTBBQUVjTmt3RWdBVUVCUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFia0JJUkFNcXdJTElBQkJBRFlDQUNBUVFRRnFJUUZCSUNFUURKQUJDd0pBSUFRZ0FrY05BRUc2QVNFUURLb0NDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFGcUlSQUNRQU5BSUFRdEFBQWdBVUh5ejRDQUFHb3RBQUJIRFpJQklBRkJBVVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHNkFTRVFES29DQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUThoRUF5UEFRc0NRQ0FFSUFKSERRQkJ1d0VoRUF5cEFnc0NRQUpBSUFRdEFBQkJ0MzlxRGdjQWtnR1NBWklCa2dHU0FRR1NBUXNnQkVFQmFpRUVRYVVCSVJBTWtBSUxJQVJCQVdvaEJFR21BU0VRREk4Q0N3SkFJQVFnQWtjTkFFRzhBU0VRREtnQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUWRxSVJBQ1FBTkFJQVF0QUFBZ0FVSDB6NENBQUdvdEFBQkhEWkFCSUFGQkIwWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUc4QVNFUURLZ0NDeUFBUVFBMkFnQWdFRUVCYWlFQlFSc2hFQXlOQVFzQ1FDQUVJQUpIRFFCQnZRRWhFQXluQWdzQ1FBSkFBa0FnQkMwQUFFRytmMm9PRWdDUkFaRUJrUUdSQVpFQmtRR1JBWkVCa1FFQmtRR1JBWkVCa1FHUkFaRUJBcEVCQ3lBRVFRRnFJUVJCcEFFaEVBeVBBZ3NnQkVFQmFpRUVRYWNCSVJBTWpnSUxJQVJCQVdvaEJFR29BU0VRREkwQ0N3SkFJQVFnQWtjTkFFRytBU0VRREtZQ0N5QUVMUUFBUWM0QVJ3Mk5BU0FFUVFGcUlRUU16d0VMQWtBZ0JDQUNSdzBBUWI4QklSQU1wUUlMQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQWdCQzBBQUVHL2Yyb09GUUFCQWdPY0FRUUZCcHdCbkFHY0FRY0lDUW9MbkFFTURRNFBuQUVMSUFSQkFXb2hBVUhvQUNFUURKb0NDeUFFUVFGcUlRRkI2UUFoRUF5WkFnc2dCRUVCYWlFQlFlNEFJUkFNbUFJTElBUkJBV29oQVVIeUFDRVFESmNDQ3lBRVFRRnFJUUZCOHdBaEVBeVdBZ3NnQkVFQmFpRUJRZllBSVJBTWxRSUxJQVJCQVdvaEFVSDNBQ0VRREpRQ0N5QUVRUUZxSVFGQitnQWhFQXlUQWdzZ0JFRUJhaUVFUVlNQklSQU1rZ0lMSUFSQkFXb2hCRUdFQVNFUURKRUNDeUFFUVFGcUlRUkJoUUVoRUF5UUFnc2dCRUVCYWlFRVFaSUJJUkFNandJTElBUkJBV29oQkVHWUFTRVFESTRDQ3lBRVFRRnFJUVJCb0FFaEVBeU5BZ3NnQkVFQmFpRUVRYU1CSVJBTWpBSUxJQVJCQVdvaEJFR3FBU0VRRElzQ0N3SkFJQVFnQWtZTkFDQUFRWkNBZ0lBQU5nSUlJQUFnQkRZQ0JFR3JBU0VRRElzQ0MwSEFBU0VRREtNQ0N5QUFJQVVnQWhDcWdJQ0FBQ0lCRFlzQklBVWhBUXhjQ3dKQUlBWWdBa1lOQUNBR1FRRnFJUVVNalFFTFFjSUJJUkFNb1FJTEEwQUNRQ0FRTFFBQVFYWnFEZ1NNQVFBQWp3RUFDeUFRUVFGcUloQWdBa2NOQUF0Qnd3RWhFQXlnQWdzQ1FDQUhJQUpHRFFBZ0FFR1JnSUNBQURZQ0NDQUFJQWMyQWdRZ0J5RUJRUUVoRUF5SEFndEJ4QUVoRUF5ZkFnc0NRQ0FISUFKSERRQkJ4UUVoRUF5ZkFnc0NRQUpBSUFjdEFBQkJkbW9PQkFIT0FjNEJBTTRCQ3lBSFFRRnFJUVlNalFFTElBZEJBV29oQlF5SkFRc0NRQ0FISUFKSERRQkJ4Z0VoRUF5ZUFnc0NRQUpBSUFjdEFBQkJkbW9PRndHUEFZOEJBWThCandHUEFZOEJqd0dQQVk4Qmp3R1BBWThCandHUEFZOEJqd0dQQVk4Qmp3R1BBUUNQQVFzZ0IwRUJhaUVIQzBHd0FTRVFESVFDQ3dKQUlBZ2dBa2NOQUVISUFTRVFESjBDQ3lBSUxRQUFRU0JIRFkwQklBQkJBRHNCTWlBSVFRRnFJUUZCc3dFaEVBeURBZ3NnQVNFWEFrQURRQ0FYSWdjZ0FrWU5BU0FITFFBQVFWQnFRZjhCY1NJUVFRcFBEY3dCQWtBZ0FDOEJNaUlVUVprelN3MEFJQUFnRkVFS2JDSVVPd0V5SUJCQi8vOERjeUFVUWY3L0EzRkpEUUFnQjBFQmFpRVhJQUFnRkNBUWFpSVFPd0V5SUJCQi8vOERjVUhvQjBrTkFRc0xRUUFoRUNBQVFRQTJBaHdnQUVIQmlZQ0FBRFlDRUNBQVFRMDJBZ3dnQUNBSFFRRnFOZ0lVREp3Q0MwSEhBU0VRREpzQ0N5QUFJQWdnQWhDdWdJQ0FBQ0lRUlEzS0FTQVFRUlZIRFl3QklBQkJ5QUUyQWh3Z0FDQUlOZ0lVSUFCQnlaZUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBeWFBZ3NDUUNBSklBSkhEUUJCekFFaEVBeWFBZ3RCQUNFVVFRRWhGMEVCSVJaQkFDRVFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQWt0QUFCQlVHb09DcFlCbFFFQUFRSURCQVVHQ0pjQkMwRUNJUkFNQmd0QkF5RVFEQVVMUVFRaEVBd0VDMEVGSVJBTUF3dEJCaUVRREFJTFFRY2hFQXdCQzBFSUlSQUxRUUFoRjBFQUlSWkJBQ0VVREk0QkMwRUpJUkJCQVNFVVFRQWhGMEVBSVJZTWpRRUxBa0FnQ2lBQ1J3MEFRYzRCSVJBTW1RSUxJQW90QUFCQkxrY05qZ0VnQ2tFQmFpRUpETW9CQ3lBTElBSkhEWTRCUWRBQklSQU1sd0lMQWtBZ0N5QUNSZzBBSUFCQmpvQ0FnQUEyQWdnZ0FDQUxOZ0lFUWJjQklSQU0vZ0VMUWRFQklSQU1sZ0lMQWtBZ0JDQUNSdzBBUWRJQklSQU1sZ0lMSUFJZ0JHc2dBQ2dDQUNJUWFpRVVJQVFnRUd0QkJHb2hDd05BSUFRdEFBQWdFRUg4ejRDQUFHb3RBQUJIRFk0QklCQkJCRVlONlFFZ0VFRUJhaUVRSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQjBnRWhFQXlWQWdzZ0FDQU1JQUlRcklDQWdBQWlBUTJOQVNBTUlRRU11QUVMQWtBZ0JDQUNSdzBBUWRRQklSQU1sQUlMSUFJZ0JHc2dBQ2dDQUNJUWFpRVVJQVFnRUd0QkFXb2hEQU5BSUFRdEFBQWdFRUdCMElDQUFHb3RBQUJIRFk4QklCQkJBVVlOamdFZ0VFRUJhaUVRSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQjFBRWhFQXlUQWdzQ1FDQUVJQUpIRFFCQjFnRWhFQXlUQWdzZ0FpQUVheUFBS0FJQUloQnFJUlFnQkNBUWEwRUNhaUVMQTBBZ0JDMEFBQ0FRUVlQUWdJQUFhaTBBQUVjTmpnRWdFRUVDUmcyUUFTQVFRUUZxSVJBZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFSFdBU0VRREpJQ0N3SkFJQVFnQWtjTkFFSFhBU0VRREpJQ0N3SkFBa0FnQkMwQUFFRzdmMm9PRUFDUEFZOEJqd0dQQVk4Qmp3R1BBWThCandHUEFZOEJqd0dQQVk4QkFZOEJDeUFFUVFGcUlRUkJ1d0VoRUF6NUFRc2dCRUVCYWlFRVFid0JJUkFNK0FFTEFrQWdCQ0FDUncwQVFkZ0JJUkFNa1FJTElBUXRBQUJCeUFCSERZd0JJQVJCQVdvaEJBekVBUXNDUUNBRUlBSkdEUUFnQUVHUWdJQ0FBRFlDQ0NBQUlBUTJBZ1JCdmdFaEVBejNBUXRCMlFFaEVBeVBBZ3NDUUNBRUlBSkhEUUJCMmdFaEVBeVBBZ3NnQkMwQUFFSElBRVlOd3dFZ0FFRUJPZ0FvRExrQkN5QUFRUUk2QUM4Z0FDQUVJQUlRcG9DQWdBQWlFQTJOQVVIQ0FTRVFEUFFCQ3lBQUxRQW9RWDlxRGdLM0Fia0J1QUVMQTBBQ1FDQUVMUUFBUVhacURnUUFqZ0dPQVFDT0FRc2dCRUVCYWlJRUlBSkhEUUFMUWQwQklSQU1pd0lMSUFCQkFEb0FMeUFBTFFBdFFRUnhSUTJFQWdzZ0FFRUFPZ0F2SUFCQkFUb0FOQ0FCSVFFTWpBRUxJQkJCRlVZTjJnRWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFhZU9nSUFBTmdJUUlBQkJFallDREVFQUlSQU1pQUlMQWtBZ0FDQVFJQUlRdElDQWdBQWlCQTBBSUJBaEFReUJBZ3NDUUNBRVFSVkhEUUFnQUVFRE5nSWNJQUFnRURZQ0ZDQUFRYkNZZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNaUFJTElBQkJBRFlDSENBQUlCQTJBaFFnQUVHbmpvQ0FBRFlDRUNBQVFSSTJBZ3hCQUNFUURJY0NDeUFRUVJWR0RkWUJJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFSGFqWUNBQURZQ0VDQUFRUlEyQWd4QkFDRVFESVlDQ3lBQUtBSUVJUmNnQUVFQU5nSUVJQkFnRWFkcUloWWhBU0FBSUJjZ0VDQVdJQlFiSWhBUXRZQ0FnQUFpRkVVTmpRRWdBRUVITmdJY0lBQWdFRFlDRkNBQUlCUTJBZ3hCQUNFUURJVUNDeUFBSUFBdkFUQkJnQUZ5T3dFd0lBRWhBUXRCS2lFUURPb0JDeUFRUVJWR0RkRUJJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFR0RqSUNBQURZQ0VDQUFRUk0yQWd4QkFDRVFESUlDQ3lBUVFSVkdEYzhCSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUdhajRDQUFEWUNFQ0FBUVNJMkFneEJBQ0VRRElFQ0N5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRdDRDQWdBQWlFQTBBSUFGQkFXb2hBUXlOQVFzZ0FFRU1OZ0ljSUFBZ0VEWUNEQ0FBSUFGQkFXbzJBaFJCQUNFUURJQUNDeUFRUVJWR0Rjd0JJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFR2FqNENBQURZQ0VDQUFRU0kyQWd4QkFDRVFEUDhCQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVF0NENBZ0FBaUVBMEFJQUZCQVdvaEFReU1BUXNnQUVFTk5nSWNJQUFnRURZQ0RDQUFJQUZCQVdvMkFoUkJBQ0VRRFA0QkN5QVFRUlZHRGNrQklBQkJBRFlDSENBQUlBRTJBaFFnQUVIR2pJQ0FBRFlDRUNBQVFTTTJBZ3hCQUNFUURQMEJDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXVZQ0FnQUFpRUEwQUlBRkJBV29oQVF5TEFRc2dBRUVPTmdJY0lBQWdFRFlDRENBQUlBRkJBV28yQWhSQkFDRVFEUHdCQ3lBQVFRQTJBaHdnQUNBQk5nSVVJQUJCd0pXQWdBQTJBaEFnQUVFQ05nSU1RUUFoRUF6N0FRc2dFRUVWUmczRkFTQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnhveUFnQUEyQWhBZ0FFRWpOZ0lNUVFBaEVBejZBUXNnQUVFUU5nSWNJQUFnQVRZQ0ZDQUFJQkEyQWd4QkFDRVFEUGtCQ3lBQUtBSUVJUVFnQUVFQU5nSUVBa0FnQUNBRUlBRVF1WUNBZ0FBaUJBMEFJQUZCQVdvaEFRenhBUXNnQUVFUk5nSWNJQUFnQkRZQ0RDQUFJQUZCQVdvMkFoUkJBQ0VRRFBnQkN5QVFRUlZHRGNFQklBQkJBRFlDSENBQUlBRTJBaFFnQUVIR2pJQ0FBRFlDRUNBQVFTTTJBZ3hCQUNFUURQY0JDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXVZQ0FnQUFpRUEwQUlBRkJBV29oQVF5SUFRc2dBRUVUTmdJY0lBQWdFRFlDRENBQUlBRkJBV28yQWhSQkFDRVFEUFlCQ3lBQUtBSUVJUVFnQUVFQU5nSUVBa0FnQUNBRUlBRVF1WUNBZ0FBaUJBMEFJQUZCQVdvaEFRenRBUXNnQUVFVU5nSWNJQUFnQkRZQ0RDQUFJQUZCQVdvMkFoUkJBQ0VRRFBVQkN5QVFRUlZHRGIwQklBQkJBRFlDSENBQUlBRTJBaFFnQUVHYWo0Q0FBRFlDRUNBQVFTSTJBZ3hCQUNFUURQUUJDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXQ0Q0FnQUFpRUEwQUlBRkJBV29oQVF5R0FRc2dBRUVXTmdJY0lBQWdFRFlDRENBQUlBRkJBV28yQWhSQkFDRVFEUE1CQ3lBQUtBSUVJUVFnQUVFQU5nSUVBa0FnQUNBRUlBRVF0NENBZ0FBaUJBMEFJQUZCQVdvaEFRenBBUXNnQUVFWE5nSWNJQUFnQkRZQ0RDQUFJQUZCQVdvMkFoUkJBQ0VRRFBJQkN5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnpaT0FnQUEyQWhBZ0FFRU1OZ0lNUVFBaEVBenhBUXRDQVNFUkN5QVFRUUZxSVFFQ1FDQUFLUU1nSWhKQy8vLy8vLy8vLy84UFZnMEFJQUFnRWtJRWhpQVJoRGNESUNBQklRRU1oQUVMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUd0aVlDQUFEWUNFQ0FBUVF3MkFneEJBQ0VRRE84QkN5QUFRUUEyQWh3Z0FDQVFOZ0lVSUFCQnpaT0FnQUEyQWhBZ0FFRU1OZ0lNUVFBaEVBenVBUXNnQUNnQ0JDRVhJQUJCQURZQ0JDQVFJQkduYWlJV0lRRWdBQ0FYSUJBZ0ZpQVVHeUlRRUxXQWdJQUFJaFJGRFhNZ0FFRUZOZ0ljSUFBZ0VEWUNGQ0FBSUJRMkFneEJBQ0VRRE8wQkN5QUFRUUEyQWh3Z0FDQVFOZ0lVSUFCQnFweUFnQUEyQWhBZ0FFRVBOZ0lNUVFBaEVBenNBUXNnQUNBUUlBSVF0SUNBZ0FBaUFRMEJJQkFoQVF0QkRpRVFETkVCQ3dKQUlBRkJGVWNOQUNBQVFRSTJBaHdnQUNBUU5nSVVJQUJCc0ppQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF6cUFRc2dBRUVBTmdJY0lBQWdFRFlDRkNBQVFhZU9nSUFBTmdJUUlBQkJFallDREVFQUlSQU02UUVMSUFGQkFXb2hFQUpBSUFBdkFUQWlBVUdBQVhGRkRRQUNRQ0FBSUJBZ0FoQzdnSUNBQUNJQkRRQWdFQ0VCREhBTElBRkJGVWNOdWdFZ0FFRUZOZ0ljSUFBZ0VEWUNGQ0FBUWZtWGdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTTZRRUxBa0FnQVVHZ0JIRkJvQVJIRFFBZ0FDMEFMVUVDY1EwQUlBQkJBRFlDSENBQUlCQTJBaFFnQUVHV2s0Q0FBRFlDRUNBQVFRUTJBZ3hCQUNFUURPa0JDeUFBSUJBZ0FoQzlnSUNBQUJvZ0VDRUJBa0FDUUFKQUFrQUNRQ0FBSUJBZ0FoQ3pnSUNBQUE0V0FnRUFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBd1FMSUFCQkFUb0FMZ3NnQUNBQUx3RXdRY0FBY2pzQk1DQVFJUUVMUVNZaEVBelJBUXNnQUVFak5nSWNJQUFnRURZQ0ZDQUFRYVdXZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNNlFFTElBQkJBRFlDSENBQUlCQTJBaFFnQUVIVmk0Q0FBRFlDRUNBQVFSRTJBZ3hCQUNFUURPZ0JDeUFBTFFBdFFRRnhSUTBCUWNNQklSQU16Z0VMQWtBZ0RTQUNSZzBBQTBBQ1FDQU5MUUFBUVNCR0RRQWdEU0VCRE1RQkN5QU5RUUZxSWcwZ0FrY05BQXRCSlNFUURPY0JDMEVsSVJBTTVnRUxJQUFvQWdRaEJDQUFRUUEyQWdRZ0FDQUVJQTBRcjRDQWdBQWlCRVVOclFFZ0FFRW1OZ0ljSUFBZ0JEWUNEQ0FBSUExQkFXbzJBaFJCQUNFUURPVUJDeUFRUVJWR0Rhc0JJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFSDlqWUNBQURZQ0VDQUFRUjAyQWd4QkFDRVFET1FCQ3lBQVFTYzJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNNHdFTElCQWhBVUVCSVJRQ1FBSkFBa0FDUUFKQUFrQUNRQ0FBTFFBc1FYNXFEZ2NHQlFVREFRSUFCUXNnQUNBQUx3RXdRUWh5T3dFd0RBTUxRUUloRkF3QkMwRUVJUlFMSUFCQkFUb0FMQ0FBSUFBdkFUQWdGSEk3QVRBTElCQWhBUXRCS3lFUURNb0JDeUFBUVFBMkFod2dBQ0FRTmdJVUlBQkJxNUtBZ0FBMkFoQWdBRUVMTmdJTVFRQWhFQXppQVFzZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWVHUGdJQUFOZ0lRSUFCQkNqWUNERUVBSVJBTTRRRUxJQUJCQURvQUxDQVFJUUVNdlFFTElCQWhBVUVCSVJRQ1FBSkFBa0FDUUFKQUlBQXRBQ3hCZTJvT0JBTUJBZ0FGQ3lBQUlBQXZBVEJCQ0hJN0FUQU1Bd3RCQWlFVURBRUxRUVFoRkFzZ0FFRUJPZ0FzSUFBZ0FDOEJNQ0FVY2pzQk1Bc2dFQ0VCQzBFcElSQU14UUVMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUh3bElDQUFEWUNFQ0FBUVFNMkFneEJBQ0VRRE4wQkN3SkFJQTR0QUFCQkRVY05BQ0FBS0FJRUlRRWdBRUVBTmdJRUFrQWdBQ0FCSUE0UXNZQ0FnQUFpQVEwQUlBNUJBV29oQVF4MUN5QUFRU3cyQWh3Z0FDQUJOZ0lNSUFBZ0RrRUJhallDRkVFQUlSQU0zUUVMSUFBdEFDMUJBWEZGRFFGQnhBRWhFQXpEQVFzQ1FDQU9JQUpIRFFCQkxTRVFETndCQ3dKQUFrQURRQUpBSUE0dEFBQkJkbW9PQkFJQUFBTUFDeUFPUVFGcUlnNGdBa2NOQUF0QkxTRVFETjBCQ3lBQUtBSUVJUUVnQUVFQU5nSUVBa0FnQUNBQklBNFFzWUNBZ0FBaUFRMEFJQTRoQVF4MEN5QUFRU3cyQWh3Z0FDQU9OZ0lVSUFBZ0FUWUNERUVBSVJBTTNBRUxJQUFvQWdRaEFTQUFRUUEyQWdRQ1FDQUFJQUVnRGhDeGdJQ0FBQ0lCRFFBZ0RrRUJhaUVCREhNTElBQkJMRFlDSENBQUlBRTJBZ3dnQUNBT1FRRnFOZ0lVUVFBaEVBemJBUXNnQUNnQ0JDRUVJQUJCQURZQ0JDQUFJQVFnRGhDeGdJQ0FBQ0lFRGFBQklBNGhBUXpPQVFzZ0VFRXNSdzBCSUFGQkFXb2hFRUVCSVFFQ1FBSkFBa0FDUUFKQUlBQXRBQ3hCZTJvT0JBTUJBZ1FBQ3lBUUlRRU1CQXRCQWlFQkRBRUxRUVFoQVFzZ0FFRUJPZ0FzSUFBZ0FDOEJNQ0FCY2pzQk1DQVFJUUVNQVFzZ0FDQUFMd0V3UVFoeU93RXdJQkFoQVF0Qk9TRVFETDhCQ3lBQVFRQTZBQ3dnQVNFQkMwRTBJUkFNdlFFTElBQWdBQzhCTUVFZ2Nqc0JNQ0FCSVFFTUFnc2dBQ2dDQkNFRUlBQkJBRFlDQkFKQUlBQWdCQ0FCRUxHQWdJQUFJZ1FOQUNBQklRRU14d0VMSUFCQk56WUNIQ0FBSUFFMkFoUWdBQ0FFTmdJTVFRQWhFQXpVQVFzZ0FFRUlPZ0FzSUFFaEFRdEJNQ0VRRExrQkN3SkFJQUF0QUNoQkFVWU5BQ0FCSVFFTUJBc2dBQzBBTFVFSWNVVU5rd0VnQVNFQkRBTUxJQUF0QURCQklIRU5sQUZCeFFFaEVBeTNBUXNDUUNBUElBSkdEUUFDUUFOQUFrQWdEeTBBQUVGUWFpSUJRZjhCY1VFS1NRMEFJQThoQVVFMUlSQU11Z0VMSUFBcEF5QWlFVUtacytiTW1iUG16QmxXRFFFZ0FDQVJRZ3ArSWhFM0F5QWdFU0FCclVML0FZTWlFa0ovaFZZTkFTQUFJQkVnRW53M0F5QWdEMEVCYWlJUElBSkhEUUFMUVRraEVBelJBUXNnQUNnQ0JDRUNJQUJCQURZQ0JDQUFJQUlnRDBFQmFpSUVFTEdBZ0lBQUlnSU5sUUVnQkNFQkRNTUJDMEU1SVJBTXp3RUxBa0FnQUM4Qk1DSUJRUWh4UlEwQUlBQXRBQ2hCQVVjTkFDQUFMUUF0UVFoeFJRMlFBUXNnQUNBQlFmZjdBM0ZCZ0FSeU93RXdJQThoQVF0Qk55RVFETFFCQ3lBQUlBQXZBVEJCRUhJN0FUQU1xd0VMSUJCQkZVWU5pd0VnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZkNPZ0lBQU5nSVFJQUJCSERZQ0RFRUFJUkFNeXdFTElBQkJ3d0EyQWh3Z0FDQUJOZ0lNSUFBZ0RVRUJhallDRkVFQUlSQU15Z0VMQWtBZ0FTMEFBRUU2UncwQUlBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkN2Z0lDQUFDSVFEUUFnQVVFQmFpRUJER01MSUFCQnd3QTJBaHdnQUNBUU5nSU1JQUFnQVVFQmFqWUNGRUVBSVJBTXlnRUxJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFR3hrWUNBQURZQ0VDQUFRUW8yQWd4QkFDRVFETWtCQ3lBQVFRQTJBaHdnQUNBQk5nSVVJQUJCb0ptQWdBQTJBaEFnQUVFZU5nSU1RUUFoRUF6SUFRc2dBRUVBTmdJQUN5QUFRWUFTT3dFcUlBQWdGMEVCYWlJQklBSVFxSUNBZ0FBaUVBMEJJQUVoQVF0Qnh3QWhFQXlzQVFzZ0VFRVZSdzJEQVNBQVFkRUFOZ0ljSUFBZ0FUWUNGQ0FBUWVPWGdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTXhBRUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDbmdJQ0FBQ0lRRFFBZ0FTRUJERjRMSUFCQjBnQTJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNd3dFTElBQkJBRFlDSENBQUlCUTJBaFFnQUVIQnFJQ0FBRFlDRUNBQVFRYzJBZ3dnQUVFQU5nSUFRUUFoRUF6Q0FRc2dBQ2dDQkNFUUlBQkJBRFlDQkFKQUlBQWdFQ0FCRUtlQWdJQUFJaEFOQUNBQklRRU1YUXNnQUVIVEFEWUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXpCQVF0QkFDRVFJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFR0FrWUNBQURZQ0VDQUFRUWsyQWd3TXdBRUxJQkJCRlVZTmZTQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQmxJMkFnQUEyQWhBZ0FFRWhOZ0lNUVFBaEVBeS9BUXRCQVNFV1FRQWhGMEVBSVJSQkFTRVFDeUFBSUJBNkFDc2dBVUVCYWlFQkFrQUNRQ0FBTFFBdFFSQnhEUUFDUUFKQUFrQWdBQzBBS2c0REFRQUNCQXNnRmtVTkF3d0NDeUFVRFFFTUFnc2dGMFVOQVFzZ0FDZ0NCQ0VRSUFCQkFEWUNCQUpBSUFBZ0VDQUJFSzJBZ0lBQUloQU5BQ0FCSVFFTVhBc2dBRUhZQURZQ0hDQUFJQUUyQWhRZ0FDQVFOZ0lNUVFBaEVBeStBUXNnQUNnQ0JDRUVJQUJCQURZQ0JBSkFJQUFnQkNBQkVLMkFnSUFBSWdRTkFDQUJJUUVNclFFTElBQkIyUUEyQWh3Z0FDQUJOZ0lVSUFBZ0JEWUNERUVBSVJBTXZRRUxJQUFvQWdRaEJDQUFRUUEyQWdRQ1FDQUFJQVFnQVJDdGdJQ0FBQ0lFRFFBZ0FTRUJES3NCQ3lBQVFkb0FOZ0ljSUFBZ0FUWUNGQ0FBSUFRMkFneEJBQ0VRREx3QkN5QUFLQUlFSVFRZ0FFRUFOZ0lFQWtBZ0FDQUVJQUVRcllDQWdBQWlCQTBBSUFFaEFReXBBUXNnQUVIY0FEWUNIQ0FBSUFFMkFoUWdBQ0FFTmdJTVFRQWhFQXk3QVFzQ1FDQUJMUUFBUVZCcUloQkIvd0Z4UVFwUERRQWdBQ0FRT2dBcUlBRkJBV29oQVVIUEFDRVFES0lCQ3lBQUtBSUVJUVFnQUVFQU5nSUVBa0FnQUNBRUlBRVFyWUNBZ0FBaUJBMEFJQUVoQVF5bkFRc2dBRUhlQURZQ0hDQUFJQUUyQWhRZ0FDQUVOZ0lNUVFBaEVBeTZBUXNnQUVFQU5nSUFJQmRCQVdvaEFRSkFJQUF0QUNsQkkwOE5BQ0FCSVFFTVdRc2dBRUVBTmdJY0lBQWdBVFlDRkNBQVFkT0pnSUFBTmdJUUlBQkJDRFlDREVFQUlSQU11UUVMSUFCQkFEWUNBQXRCQUNFUUlBQkJBRFlDSENBQUlBRTJBaFFnQUVHUXM0Q0FBRFlDRUNBQVFRZzJBZ3dNdHdFTElBQkJBRFlDQUNBWFFRRnFJUUVDUUNBQUxRQXBRU0ZIRFFBZ0FTRUJERllMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUdiaW9DQUFEWUNFQ0FBUVFnMkFneEJBQ0VRRExZQkN5QUFRUUEyQWdBZ0YwRUJhaUVCQWtBZ0FDMEFLU0lRUVYxcVFRdFBEUUFnQVNFQkRGVUxBa0FnRUVFR1N3MEFRUUVnRUhSQnlnQnhSUTBBSUFFaEFReFZDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWZlSmdJQUFOZ0lRSUFCQkNEWUNEQXkxQVFzZ0VFRVZSZzF4SUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUc1allDQUFEWUNFQ0FBUVJvMkFneEJBQ0VRRExRQkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRcDRDQWdBQWlFQTBBSUFFaEFReFVDeUFBUWVVQU5nSWNJQUFnQVRZQ0ZDQUFJQkEyQWd4QkFDRVFETE1CQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVFwNENBZ0FBaUVBMEFJQUVoQVF4TkN5QUFRZElBTmdJY0lBQWdBVFlDRkNBQUlCQTJBZ3hCQUNFUURMSUJDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXA0Q0FnQUFpRUEwQUlBRWhBUXhOQ3lBQVFkTUFOZ0ljSUFBZ0FUWUNGQ0FBSUJBMkFneEJBQ0VRRExFQkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRcDRDQWdBQWlFQTBBSUFFaEFReFJDeUFBUWVVQU5nSWNJQUFnQVRZQ0ZDQUFJQkEyQWd4QkFDRVFETEFCQ3lBQVFRQTJBaHdnQUNBQk5nSVVJQUJCeG9xQWdBQTJBaEFnQUVFSE5nSU1RUUFoRUF5dkFRc2dBQ2dDQkNFUUlBQkJBRFlDQkFKQUlBQWdFQ0FCRUtlQWdJQUFJaEFOQUNBQklRRU1TUXNnQUVIU0FEWUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXl1QVFzZ0FDZ0NCQ0VRSUFCQkFEWUNCQUpBSUFBZ0VDQUJFS2VBZ0lBQUloQU5BQ0FCSVFFTVNRc2dBRUhUQURZQ0hDQUFJQUUyQWhRZ0FDQVFOZ0lNUVFBaEVBeXRBUXNnQUNnQ0JDRVFJQUJCQURZQ0JBSkFJQUFnRUNBQkVLZUFnSUFBSWhBTkFDQUJJUUVNVFFzZ0FFSGxBRFlDSENBQUlBRTJBaFFnQUNBUU5nSU1RUUFoRUF5c0FRc2dBRUVBTmdJY0lBQWdBVFlDRkNBQVFkeUlnSUFBTmdJUUlBQkJCellDREVFQUlSQU1xd0VMSUJCQlAwY05BU0FCUVFGcUlRRUxRUVVoRUF5UUFRdEJBQ0VRSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUg5a29DQUFEWUNFQ0FBUVFjMkFnd01xQUVMSUFBb0FnUWhFQ0FBUVFBMkFnUUNRQ0FBSUJBZ0FSQ25nSUNBQUNJUURRQWdBU0VCREVJTElBQkIwZ0EyQWh3Z0FDQUJOZ0lVSUFBZ0VEWUNERUVBSVJBTXB3RUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDbmdJQ0FBQ0lRRFFBZ0FTRUJERUlMSUFCQjB3QTJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNcGdFTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkNuZ0lDQUFDSVFEUUFnQVNFQkRFWUxJQUJCNVFBMkFod2dBQ0FCTmdJVUlBQWdFRFlDREVFQUlSQU1wUUVMSUFBb0FnUWhBU0FBUVFBMkFnUUNRQ0FBSUFFZ0ZCQ25nSUNBQUNJQkRRQWdGQ0VCREQ4TElBQkIwZ0EyQWh3Z0FDQVVOZ0lVSUFBZ0FUWUNERUVBSVJBTXBBRUxJQUFvQWdRaEFTQUFRUUEyQWdRQ1FDQUFJQUVnRkJDbmdJQ0FBQ0lCRFFBZ0ZDRUJERDhMSUFCQjB3QTJBaHdnQUNBVU5nSVVJQUFnQVRZQ0RFRUFJUkFNb3dFTElBQW9BZ1FoQVNBQVFRQTJBZ1FDUUNBQUlBRWdGQkNuZ0lDQUFDSUJEUUFnRkNFQkRFTUxJQUJCNVFBMkFod2dBQ0FVTmdJVUlBQWdBVFlDREVFQUlSQU1vZ0VMSUFCQkFEWUNIQ0FBSUJRMkFoUWdBRUhEajRDQUFEWUNFQ0FBUVFjMkFneEJBQ0VRREtFQkN5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnc0K0FnQUEyQWhBZ0FFRUhOZ0lNUVFBaEVBeWdBUXRCQUNFUUlBQkJBRFlDSENBQUlCUTJBaFFnQUVHTW5JQ0FBRFlDRUNBQVFRYzJBZ3dNbndFTElBQkJBRFlDSENBQUlCUTJBaFFnQUVHTW5JQ0FBRFlDRUNBQVFRYzJBZ3hCQUNFUURKNEJDeUFBUVFBMkFod2dBQ0FVTmdJVUlBQkIvcEdBZ0FBMkFoQWdBRUVITmdJTVFRQWhFQXlkQVFzZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVk2YmdJQUFOZ0lRSUFCQkJqWUNERUVBSVJBTW5BRUxJQkJCRlVZTlZ5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnpJNkFnQUEyQWhBZ0FFRWdOZ0lNUVFBaEVBeWJBUXNnQUVFQU5nSUFJQkJCQVdvaEFVRWtJUkFMSUFBZ0VEb0FLU0FBS0FJRUlSQWdBRUVBTmdJRUlBQWdFQ0FCRUt1QWdJQUFJaEFOVkNBQklRRU1QZ3NnQUVFQU5nSUFDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0JEWUNGQ0FBUWZHYmdJQUFOZ0lRSUFCQkJqWUNEQXlYQVFzZ0FVRVZSZzFRSUFCQkFEWUNIQ0FBSUFVMkFoUWdBRUh3aklDQUFEWUNFQ0FBUVJzMkFneEJBQ0VRREpZQkN5QUFLQUlFSVFVZ0FFRUFOZ0lFSUFBZ0JTQVFFS21BZ0lBQUlnVU5BU0FRUVFGcUlRVUxRYTBCSVJBTWV3c2dBRUhCQVRZQ0hDQUFJQVUyQWd3Z0FDQVFRUUZxTmdJVVFRQWhFQXlUQVFzZ0FDZ0NCQ0VHSUFCQkFEWUNCQ0FBSUFZZ0VCQ3BnSUNBQUNJR0RRRWdFRUVCYWlFR0MwR3VBU0VRREhnTElBQkJ3Z0UyQWh3Z0FDQUdOZ0lNSUFBZ0VFRUJhallDRkVFQUlSQU1rQUVMSUFCQkFEWUNIQ0FBSUFjMkFoUWdBRUdYaTRDQUFEWUNFQ0FBUVEwMkFneEJBQ0VRREk4QkN5QUFRUUEyQWh3Z0FDQUlOZ0lVSUFCQjQ1Q0FnQUEyQWhBZ0FFRUpOZ0lNUVFBaEVBeU9BUXNnQUVFQU5nSWNJQUFnQ0RZQ0ZDQUFRWlNOZ0lBQU5nSVFJQUJCSVRZQ0RFRUFJUkFNalFFTFFRRWhGa0VBSVJkQkFDRVVRUUVoRUFzZ0FDQVFPZ0FySUFsQkFXb2hDQUpBQWtBZ0FDMEFMVUVRY1EwQUFrQUNRQUpBSUFBdEFDb09Bd0VBQWdRTElCWkZEUU1NQWdzZ0ZBMEJEQUlMSUJkRkRRRUxJQUFvQWdRaEVDQUFRUUEyQWdRZ0FDQVFJQWdRcllDQWdBQWlFRVVOUFNBQVFja0JOZ0ljSUFBZ0NEWUNGQ0FBSUJBMkFneEJBQ0VRREl3QkN5QUFLQUlFSVFRZ0FFRUFOZ0lFSUFBZ0JDQUlFSzJBZ0lBQUlnUkZEWFlnQUVIS0FUWUNIQ0FBSUFnMkFoUWdBQ0FFTmdJTVFRQWhFQXlMQVFzZ0FDZ0NCQ0VFSUFCQkFEWUNCQ0FBSUFRZ0NSQ3RnSUNBQUNJRVJRMTBJQUJCeXdFMkFod2dBQ0FKTmdJVUlBQWdCRFlDREVFQUlSQU1pZ0VMSUFBb0FnUWhCQ0FBUVFBMkFnUWdBQ0FFSUFvUXJZQ0FnQUFpQkVVTmNpQUFRYzBCTmdJY0lBQWdDallDRkNBQUlBUTJBZ3hCQUNFUURJa0JDd0pBSUFzdEFBQkJVR29pRUVIL0FYRkJDazhOQUNBQUlCQTZBQ29nQzBFQmFpRUtRYllCSVJBTWNBc2dBQ2dDQkNFRUlBQkJBRFlDQkNBQUlBUWdDeEN0Z0lDQUFDSUVSUTF3SUFCQnp3RTJBaHdnQUNBTE5nSVVJQUFnQkRZQ0RFRUFJUkFNaUFFTElBQkJBRFlDSENBQUlBUTJBaFFnQUVHUXM0Q0FBRFlDRUNBQVFRZzJBZ3dnQUVFQU5nSUFRUUFoRUF5SEFRc2dBVUVWUmcwL0lBQkJBRFlDSENBQUlBdzJBaFFnQUVITWpvQ0FBRFlDRUNBQVFTQTJBZ3hCQUNFUURJWUJDeUFBUVlFRU93RW9JQUFvQWdRaEVDQUFRZ0EzQXdBZ0FDQVFJQXhCQVdvaURCQ3JnSUNBQUNJUVJRMDRJQUJCMHdFMkFod2dBQ0FNTmdJVUlBQWdFRFlDREVFQUlSQU1oUUVMSUFCQkFEWUNBQXRCQUNFUUlBQkJBRFlDSENBQUlBUTJBaFFnQUVIWW00Q0FBRFlDRUNBQVFRZzJBZ3dNZ3dFTElBQW9BZ1FoRUNBQVFnQTNBd0FnQUNBUUlBdEJBV29pQ3hDcmdJQ0FBQ0lRRFFGQnhnRWhFQXhwQ3lBQVFRSTZBQ2dNVlFzZ0FFSFZBVFlDSENBQUlBczJBaFFnQUNBUU5nSU1RUUFoRUF5QUFRc2dFRUVWUmcwM0lBQkJBRFlDSENBQUlBUTJBaFFnQUVHa2pJQ0FBRFlDRUNBQVFSQTJBZ3hCQUNFUURIOExJQUF0QURSQkFVY05OQ0FBSUFRZ0FoQzhnSUNBQUNJUVJRMDBJQkJCRlVjTk5TQUFRZHdCTmdJY0lBQWdCRFlDRkNBQVFkV1dnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1mZ3RCQUNFUUlBQkJBRFlDSENBQVFhK0xnSUFBTmdJUUlBQkJBallDRENBQUlCUkJBV28yQWhRTWZRdEJBQ0VRREdNTFFRSWhFQXhpQzBFTklSQU1ZUXRCRHlFUURHQUxRU1VoRUF4ZkMwRVRJUkFNWGd0QkZTRVFERjBMUVJZaEVBeGNDMEVYSVJBTVd3dEJHQ0VRREZvTFFSa2hFQXhaQzBFYUlSQU1XQXRCR3lFUURGY0xRUndoRUF4V0MwRWRJUkFNVlF0Qkh5RVFERlFMUVNFaEVBeFRDMEVqSVJBTVVndEJ4Z0FoRUF4UkMwRXVJUkFNVUF0Qkx5RVFERThMUVRzaEVBeE9DMEU5SVJBTVRRdEJ5QUFoRUF4TUMwSEpBQ0VRREVzTFFjc0FJUkFNU2d0QnpBQWhFQXhKQzBIT0FDRVFERWdMUWRFQUlSQU1Sd3RCMVFBaEVBeEdDMEhZQUNFUURFVUxRZGtBSVJBTVJBdEIyd0FoRUF4REMwSGtBQ0VRREVJTFFlVUFJUkFNUVF0QjhRQWhFQXhBQzBIMEFDRVFERDhMUVkwQklSQU1QZ3RCbHdFaEVBdzlDMEdwQVNFUUREd0xRYXdCSVJBTU93dEJ3QUVoRUF3NkMwRzVBU0VRRERrTFFhOEJJUkFNT0F0QnNRRWhFQXczQzBHeUFTRVFERFlMUWJRQklSQU1OUXRCdFFFaEVBdzBDMEc2QVNFUURETUxRYjBCSVJBTU1ndEJ2d0VoRUF3eEMwSEJBU0VRRERBTElBQkJBRFlDSENBQUlBUTJBaFFnQUVIcGk0Q0FBRFlDRUNBQVFSODJBZ3hCQUNFUURFZ0xJQUJCMndFMkFod2dBQ0FFTmdJVUlBQkIrcGFBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXhIQ3lBQVFmZ0FOZ0ljSUFBZ0REWUNGQ0FBUWNxWWdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTVJnc2dBRUhSQURZQ0hDQUFJQVUyQWhRZ0FFR3dsNENBQURZQ0VDQUFRUlUyQWd4QkFDRVFERVVMSUFCQitRQTJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNUkFzZ0FFSDRBRFlDSENBQUlBRTJBaFFnQUVIS21JQ0FBRFlDRUNBQVFSVTJBZ3hCQUNFUURFTUxJQUJCNUFBMkFod2dBQ0FCTmdJVUlBQkI0NWVBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXhDQ3lBQVFkY0FOZ0ljSUFBZ0FUWUNGQ0FBUWNtWGdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTVFRc2dBRUVBTmdJY0lBQWdBVFlDRkNBQVFibU5nSUFBTmdJUUlBQkJHallDREVFQUlSQU1RQXNnQUVIQ0FEWUNIQ0FBSUFFMkFoUWdBRUhqbUlDQUFEWUNFQ0FBUVJVMkFneEJBQ0VRREQ4TElBQkJBRFlDQkNBQUlBOGdEeEN4Z0lDQUFDSUVSUTBCSUFCQk9qWUNIQ0FBSUFRMkFnd2dBQ0FQUVFGcU5nSVVRUUFoRUF3K0N5QUFLQUlFSVFRZ0FFRUFOZ0lFQWtBZ0FDQUVJQUVRc1lDQWdBQWlCRVVOQUNBQVFUczJBaHdnQUNBRU5nSU1JQUFnQVVFQmFqWUNGRUVBSVJBTVBnc2dBVUVCYWlFQkRDMExJQTlCQVdvaEFRd3RDeUFBUVFBMkFod2dBQ0FQTmdJVUlBQkI1SktBZ0FBMkFoQWdBRUVFTmdJTVFRQWhFQXc3Q3lBQVFUWTJBaHdnQUNBRU5nSVVJQUFnQWpZQ0RFRUFJUkFNT2dzZ0FFRXVOZ0ljSUFBZ0RqWUNGQ0FBSUFRMkFneEJBQ0VRRERrTElBQkIwQUEyQWh3Z0FDQUJOZ0lVSUFCQmtaaUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBdzRDeUFOUVFGcUlRRU1MQXNnQUVFVk5nSWNJQUFnQVRZQ0ZDQUFRWUtaZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNTmdzZ0FFRWJOZ0ljSUFBZ0FUWUNGQ0FBUVpHWGdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTU5Rc2dBRUVQTmdJY0lBQWdBVFlDRkNBQVFaR1hnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1OQXNnQUVFTE5nSWNJQUFnQVRZQ0ZDQUFRWkdYZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNTXdzZ0FFRWFOZ0ljSUFBZ0FUWUNGQ0FBUVlLWmdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTU1nc2dBRUVMTmdJY0lBQWdBVFlDRkNBQVFZS1pnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1NUXNnQUVFS05nSWNJQUFnQVRZQ0ZDQUFRZVNXZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNTUFzZ0FFRWVOZ0ljSUFBZ0FUWUNGQ0FBUWZtWGdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTUx3c2dBRUVBTmdJY0lBQWdFRFlDRkNBQVFkcU5nSUFBTmdJUUlBQkJGRFlDREVFQUlSQU1MZ3NnQUVFRU5nSWNJQUFnQVRZQ0ZDQUFRYkNZZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNTFFzZ0FFRUFOZ0lBSUF0QkFXb2hDd3RCdUFFaEVBd1NDeUFBUVFBMkFnQWdFRUVCYWlFQlFmVUFJUkFNRVFzZ0FTRUJBa0FnQUMwQUtVRUZSdzBBUWVNQUlSQU1FUXRCNGdBaEVBd1FDMEVBSVJBZ0FFRUFOZ0ljSUFCQjVKR0FnQUEyQWhBZ0FFRUhOZ0lNSUFBZ0ZFRUJhallDRkF3b0N5QUFRUUEyQWdBZ0YwRUJhaUVCUWNBQUlSQU1EZ3RCQVNFQkN5QUFJQUU2QUN3Z0FFRUFOZ0lBSUJkQkFXb2hBUXRCS0NFUURBc0xJQUVoQVF0Qk9DRVFEQWtMQWtBZ0FTSVBJQUpHRFFBRFFBSkFJQTh0QUFCQmdMNkFnQUJxTFFBQUlnRkJBVVlOQUNBQlFRSkhEUU1nRDBFQmFpRUJEQVFMSUE5QkFXb2lEeUFDUncwQUMwRStJUkFNSWd0QlBpRVFEQ0VMSUFCQkFEb0FMQ0FQSVFFTUFRdEJDeUVRREFZTFFUb2hFQXdGQ3lBQlFRRnFJUUZCTFNFUURBUUxJQUFnQVRvQUxDQUFRUUEyQWdBZ0ZrRUJhaUVCUVF3aEVBd0RDeUFBUVFBMkFnQWdGMEVCYWlFQlFRb2hFQXdDQ3lBQVFRQTJBZ0FMSUFCQkFEb0FMQ0FOSVFGQkNTRVFEQUFMQzBFQUlSQWdBRUVBTmdJY0lBQWdDellDRkNBQVFjMlFnSUFBTmdJUUlBQkJDVFlDREF3WEMwRUFJUkFnQUVFQU5nSWNJQUFnQ2pZQ0ZDQUFRZW1LZ0lBQU5nSVFJQUJCQ1RZQ0RBd1dDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0NUWUNGQ0FBUWJlUWdJQUFOZ0lRSUFCQkNUWUNEQXdWQzBFQUlSQWdBRUVBTmdJY0lBQWdDRFlDRkNBQVFaeVJnSUFBTmdJUUlBQkJDVFlDREF3VUMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRYzJRZ0lBQU5nSVFJQUJCQ1RZQ0RBd1RDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWVtS2dJQUFOZ0lRSUFCQkNUWUNEQXdTQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFiZVFnSUFBTmdJUUlBQkJDVFlDREF3UkMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRWnlSZ0lBQU5nSVFJQUJCQ1RZQ0RBd1FDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVplVmdJQUFOZ0lRSUFCQkR6WUNEQXdQQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFaZVZnSUFBTmdJUUlBQkJEellDREF3T0MwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRY0NTZ0lBQU5nSVFJQUJCQ3pZQ0RBd05DMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVpXSmdJQUFOZ0lRSUFCQkN6WUNEQXdNQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFlR1BnSUFBTmdJUUlBQkJDallDREF3TEMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZnVQZ0lBQU5nSVFJQUJCQ2pZQ0RBd0tDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWZHWmdJQUFOZ0lRSUFCQkFqWUNEQXdKQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFjU1VnSUFBTmdJUUlBQkJBallDREF3SUMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZktWZ0lBQU5nSVFJQUJCQWpZQ0RBd0hDeUFBUVFJMkFod2dBQ0FCTmdJVUlBQkJuSnFBZ0FBMkFoQWdBRUVXTmdJTVFRQWhFQXdHQzBFQklSQU1CUXRCMUFBaEVDQUJJZ1FnQWtZTkJDQURRUWhxSUFBZ0JDQUNRZGpDZ0lBQVFRb1F4WUNBZ0FBZ0F5Z0NEQ0VFSUFNb0FnZ09Bd0VFQWdBTEVNcUFnSUFBQUFzZ0FFRUFOZ0ljSUFCQnRacUFnQUEyQWhBZ0FFRVhOZ0lNSUFBZ0JFRUJhallDRkVFQUlSQU1BZ3NnQUVFQU5nSWNJQUFnQkRZQ0ZDQUFRY3FhZ0lBQU5nSVFJQUJCQ1RZQ0RFRUFJUkFNQVFzQ1FDQUJJZ1FnQWtjTkFFRWlJUkFNQVFzZ0FFR0pnSUNBQURZQ0NDQUFJQVEyQWdSQklTRVFDeUFEUVJCcUpJQ0FnSUFBSUJBTHJ3RUJBbjhnQVNnQ0FDRUdBa0FDUUNBQ0lBTkdEUUFnQkNBR2FpRUVJQVlnQTJvZ0Ftc2hCeUFDSUFaQmYzTWdCV29pQm1vaEJRTkFBa0FnQWkwQUFDQUVMUUFBUmcwQVFRSWhCQXdEQ3dKQUlBWU5BRUVBSVFRZ0JTRUNEQU1MSUFaQmYyb2hCaUFFUVFGcUlRUWdBa0VCYWlJQ0lBTkhEUUFMSUFjaEJpQURJUUlMSUFCQkFUWUNBQ0FCSUFZMkFnQWdBQ0FDTmdJRUR3c2dBVUVBTmdJQUlBQWdCRFlDQUNBQUlBSTJBZ1FMQ2dBZ0FCREhnSUNBQUF2eU5nRUxmeU9BZ0lDQUFFRVFheUlCSklDQWdJQUFBa0JCQUNnQ29OQ0FnQUFOQUVFQUVNdUFnSUFBUVlEVWhJQUFheUlDUWRrQVNRMEFRUUFoQXdKQVFRQW9BdURUZ0lBQUlnUU5BRUVBUW44M0F1elRnSUFBUVFCQ2dJQ0VnSUNBd0FBM0F1VFRnSUFBUVFBZ0FVRUlha0Z3Y1VIWXF0V3FCWE1pQkRZQzROT0FnQUJCQUVFQU5nTDAwNENBQUVFQVFRQTJBc1RUZ0lBQUMwRUFJQUkyQXN6VGdJQUFRUUJCZ05TRWdBQTJBc2pUZ0lBQVFRQkJnTlNFZ0FBMkFwalFnSUFBUVFBZ0JEWUNyTkNBZ0FCQkFFRi9OZ0tvMElDQUFBTkFJQU5CeE5DQWdBQnFJQU5CdU5DQWdBQnFJZ1EyQWdBZ0JDQURRYkRRZ0lBQWFpSUZOZ0lBSUFOQnZOQ0FnQUJxSUFVMkFnQWdBMEhNMElDQUFHb2dBMEhBMElDQUFHb2lCVFlDQUNBRklBUTJBZ0FnQTBIVTBJQ0FBR29nQTBISTBJQ0FBR29pQkRZQ0FDQUVJQVUyQWdBZ0EwSFEwSUNBQUdvZ0JEWUNBQ0FEUVNCcUlnTkJnQUpIRFFBTFFZRFVoSUFBUVhoQmdOU0VnQUJyUVE5eFFRQkJnTlNFZ0FCQkNHcEJEM0ViSWdOcUlnUkJCR29nQWtGSWFpSUZJQU5ySWdOQkFYSTJBZ0JCQUVFQUtBTHcwNENBQURZQ3BOQ0FnQUJCQUNBRE5nS1UwSUNBQUVFQUlBUTJBcURRZ0lBQVFZRFVoSUFBSUFWcVFUZzJBZ1FMQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQUJCN0FGTERRQUNRRUVBS0FLSTBJQ0FBQ0lHUVJBZ0FFRVRha0Z3Y1NBQVFRdEpHeUlDUVFOMklnUjJJZ05CQTNGRkRRQUNRQUpBSUFOQkFYRWdCSEpCQVhNaUJVRURkQ0lFUWJEUWdJQUFhaUlESUFSQnVOQ0FnQUJxS0FJQUlnUW9BZ2dpQWtjTkFFRUFJQVpCZmlBRmQzRTJBb2pRZ0lBQURBRUxJQU1nQWpZQ0NDQUNJQU0yQWd3TElBUkJDR29oQXlBRUlBVkJBM1FpQlVFRGNqWUNCQ0FFSUFWcUlnUWdCQ2dDQkVFQmNqWUNCQXdNQ3lBQ1FRQW9BcERRZ0lBQUlnZE5EUUVDUUNBRFJRMEFBa0FDUUNBRElBUjBRUUlnQkhRaUEwRUFJQU5yY25FaUEwRUFJQU5yY1VGL2FpSURJQU5CREhaQkVIRWlBM1lpQkVFRmRrRUljU0lGSUFOeUlBUWdCWFlpQTBFQ2RrRUVjU0lFY2lBRElBUjJJZ05CQVhaQkFuRWlCSElnQXlBRWRpSURRUUYyUVFGeElnUnlJQU1nQkhacUlnUkJBM1FpQTBHdzBJQ0FBR29pQlNBRFFialFnSUFBYWlnQ0FDSURLQUlJSWdCSERRQkJBQ0FHUVg0Z0JIZHhJZ1kyQW9qUWdJQUFEQUVMSUFVZ0FEWUNDQ0FBSUFVMkFnd0xJQU1nQWtFRGNqWUNCQ0FESUFSQkEzUWlCR29nQkNBQ2F5SUZOZ0lBSUFNZ0Ftb2lBQ0FGUVFGeU5nSUVBa0FnQjBVTkFDQUhRWGh4UWJEUWdJQUFhaUVDUVFBb0FwelFnSUFBSVFRQ1FBSkFJQVpCQVNBSFFRTjJkQ0lJY1EwQVFRQWdCaUFJY2pZQ2lOQ0FnQUFnQWlFSURBRUxJQUlvQWdnaENBc2dDQ0FFTmdJTUlBSWdCRFlDQ0NBRUlBSTJBZ3dnQkNBSU5nSUlDeUFEUVFocUlRTkJBQ0FBTmdLYzBJQ0FBRUVBSUFVMkFwRFFnSUFBREF3TFFRQW9Bb3pRZ0lBQUlnbEZEUUVnQ1VFQUlBbHJjVUYvYWlJRElBTkJESFpCRUhFaUEzWWlCRUVGZGtFSWNTSUZJQU55SUFRZ0JYWWlBMEVDZGtFRWNTSUVjaUFESUFSMklnTkJBWFpCQW5FaUJISWdBeUFFZGlJRFFRRjJRUUZ4SWdSeUlBTWdCSFpxUVFKMFFialNnSUFBYWlnQ0FDSUFLQUlFUVhoeElBSnJJUVFnQUNFRkFrQURRQUpBSUFVb0FoQWlBdzBBSUFWQkZHb29BZ0FpQTBVTkFnc2dBeWdDQkVGNGNTQUNheUlGSUFRZ0JTQUVTU0lGR3lFRUlBTWdBQ0FGR3lFQUlBTWhCUXdBQ3dzZ0FDZ0NHQ0VLQWtBZ0FDZ0NEQ0lJSUFCR0RRQWdBQ2dDQ0NJRFFRQW9BcGpRZ0lBQVNSb2dDQ0FETmdJSUlBTWdDRFlDREF3TEN3SkFJQUJCRkdvaUJTZ0NBQ0lERFFBZ0FDZ0NFQ0lEUlEwRElBQkJFR29oQlFzRFFDQUZJUXNnQXlJSVFSUnFJZ1VvQWdBaUF3MEFJQWhCRUdvaEJTQUlLQUlRSWdNTkFBc2dDMEVBTmdJQURBb0xRWDhoQWlBQVFiOS9TdzBBSUFCQkUyb2lBMEZ3Y1NFQ1FRQW9Bb3pRZ0lBQUlnZEZEUUJCQUNFTEFrQWdBa0dBQWtrTkFFRWZJUXNnQWtILy8vOEhTdzBBSUFOQkNIWWlBeUFEUVlEK1AycEJFSFpCQ0hFaUEzUWlCQ0FFUVlEZ0gycEJFSFpCQkhFaUJIUWlCU0FGUVlDQUQycEJFSFpCQW5FaUJYUkJEM1lnQXlBRWNpQUZjbXNpQTBFQmRDQUNJQU5CRldwMlFRRnhja0VjYWlFTEMwRUFJQUpySVFRQ1FBSkFBa0FDUUNBTFFRSjBRYmpTZ0lBQWFpZ0NBQ0lGRFFCQkFDRURRUUFoQ0F3QkMwRUFJUU1nQWtFQVFSa2dDMEVCZG1zZ0MwRWZSaHQwSVFCQkFDRUlBMEFDUUNBRktBSUVRWGh4SUFKcklnWWdCRThOQUNBR0lRUWdCU0VJSUFZTkFFRUFJUVFnQlNFSUlBVWhBd3dEQ3lBRElBVkJGR29vQWdBaUJpQUdJQVVnQUVFZGRrRUVjV3BCRUdvb0FnQWlCVVliSUFNZ0Joc2hBeUFBUVFGMElRQWdCUTBBQ3dzQ1FDQURJQWh5RFFCQkFDRUlRUUlnQzNRaUEwRUFJQU5yY2lBSGNTSURSUTBESUFOQkFDQURhM0ZCZjJvaUF5QURRUXgyUVJCeElnTjJJZ1ZCQlhaQkNIRWlBQ0FEY2lBRklBQjJJZ05CQW5aQkJIRWlCWElnQXlBRmRpSURRUUYyUVFKeElnVnlJQU1nQlhZaUEwRUJka0VCY1NJRmNpQURJQVYyYWtFQ2RFRzQwb0NBQUdvb0FnQWhBd3NnQTBVTkFRc0RRQ0FES0FJRVFYaHhJQUpySWdZZ0JFa2hBQUpBSUFNb0FoQWlCUTBBSUFOQkZHb29BZ0FoQlFzZ0JpQUVJQUFiSVFRZ0F5QUlJQUFiSVFnZ0JTRURJQVVOQUFzTElBaEZEUUFnQkVFQUtBS1EwSUNBQUNBQ2EwOE5BQ0FJS0FJWUlRc0NRQ0FJS0FJTUlnQWdDRVlOQUNBSUtBSUlJZ05CQUNnQ21OQ0FnQUJKR2lBQUlBTTJBZ2dnQXlBQU5nSU1EQWtMQWtBZ0NFRVVhaUlGS0FJQUlnTU5BQ0FJS0FJUUlnTkZEUU1nQ0VFUWFpRUZDd05BSUFVaEJpQURJZ0JCRkdvaUJTZ0NBQ0lERFFBZ0FFRVFhaUVGSUFBb0FoQWlBdzBBQ3lBR1FRQTJBZ0FNQ0FzQ1FFRUFLQUtRMElDQUFDSURJQUpKRFFCQkFDZ0NuTkNBZ0FBaEJBSkFBa0FnQXlBQ2F5SUZRUkJKRFFBZ0JDQUNhaUlBSUFWQkFYSTJBZ1JCQUNBRk5nS1EwSUNBQUVFQUlBQTJBcHpRZ0lBQUlBUWdBMm9nQlRZQ0FDQUVJQUpCQTNJMkFnUU1BUXNnQkNBRFFRTnlOZ0lFSUFRZ0Eyb2lBeUFES0FJRVFRRnlOZ0lFUVFCQkFEWUNuTkNBZ0FCQkFFRUFOZ0tRMElDQUFBc2dCRUVJYWlFRERBb0xBa0JCQUNnQ2xOQ0FnQUFpQUNBQ1RRMEFRUUFvQXFEUWdJQUFJZ01nQW1vaUJDQUFJQUpySWdWQkFYSTJBZ1JCQUNBRk5nS1UwSUNBQUVFQUlBUTJBcURRZ0lBQUlBTWdBa0VEY2pZQ0JDQURRUWhxSVFNTUNnc0NRQUpBUVFBb0F1RFRnSUFBUlEwQVFRQW9BdWpUZ0lBQUlRUU1BUXRCQUVKL053THMwNENBQUVFQVFvQ0FoSUNBZ01BQU53TGswNENBQUVFQUlBRkJER3BCY0hGQjJLclZxZ1Z6TmdMZzA0Q0FBRUVBUVFBMkF2VFRnSUFBUVFCQkFEWUN4Tk9BZ0FCQmdJQUVJUVFMUVFBaEF3SkFJQVFnQWtISEFHb2lCMm9pQmtFQUlBUnJJZ3R4SWdnZ0Frc05BRUVBUVRBMkF2alRnSUFBREFvTEFrQkJBQ2dDd05PQWdBQWlBMFVOQUFKQVFRQW9BcmpUZ0lBQUlnUWdDR29pQlNBRVRRMEFJQVVnQTAwTkFRdEJBQ0VEUVFCQk1EWUMrTk9BZ0FBTUNndEJBQzBBeE5PQWdBQkJCSEVOQkFKQUFrQUNRRUVBS0FLZzBJQ0FBQ0lFUlEwQVFjalRnSUFBSVFNRFFBSkFJQU1vQWdBaUJTQUVTdzBBSUFVZ0F5Z0NCR29nQkVzTkF3c2dBeWdDQ0NJRERRQUxDMEVBRU11QWdJQUFJZ0JCZjBZTkJTQUlJUVlDUUVFQUtBTGswNENBQUNJRFFYOXFJZ1FnQUhGRkRRQWdDQ0FBYXlBRUlBQnFRUUFnQTJ0eGFpRUdDeUFHSUFKTkRRVWdCa0grLy8vL0Iwc05CUUpBUVFBb0FzRFRnSUFBSWdORkRRQkJBQ2dDdU5PQWdBQWlCQ0FHYWlJRklBUk5EUVlnQlNBRFN3MEdDeUFHRU11QWdJQUFJZ01nQUVjTkFRd0hDeUFHSUFCcklBdHhJZ1pCL3YvLy93ZExEUVFnQmhETGdJQ0FBQ0lBSUFNb0FnQWdBeWdDQkdwR0RRTWdBQ0VEQ3dKQUlBTkJmMFlOQUNBQ1FjZ0FhaUFHVFEwQUFrQWdCeUFHYTBFQUtBTG8wNENBQUNJRWFrRUFJQVJyY1NJRVFmNy8vLzhIVFEwQUlBTWhBQXdIQ3dKQUlBUVF5NENBZ0FCQmYwWU5BQ0FFSUFacUlRWWdBeUVBREFjTFFRQWdCbXNReTRDQWdBQWFEQVFMSUFNaEFDQURRWDlIRFFVTUF3dEJBQ0VJREFjTFFRQWhBQXdGQ3lBQVFYOUhEUUlMUVFCQkFDZ0N4Tk9BZ0FCQkJISTJBc1RUZ0lBQUN5QUlRZjcvLy84SFN3MEJJQWdReTRDQWdBQWhBRUVBRU11QWdJQUFJUU1nQUVGL1JnMEJJQU5CZjBZTkFTQUFJQU5QRFFFZ0F5QUFheUlHSUFKQk9HcE5EUUVMUVFCQkFDZ0N1Tk9BZ0FBZ0Jtb2lBellDdU5PQWdBQUNRQ0FEUVFBb0FyelRnSUFBVFEwQVFRQWdBellDdk5PQWdBQUxBa0FDUUFKQUFrQkJBQ2dDb05DQWdBQWlCRVVOQUVISTA0Q0FBQ0VEQTBBZ0FDQURLQUlBSWdVZ0F5Z0NCQ0lJYWtZTkFpQURLQUlJSWdNTkFBd0RDd3NDUUFKQVFRQW9BcGpRZ0lBQUlnTkZEUUFnQUNBRFR3MEJDMEVBSUFBMkFwalFnSUFBQzBFQUlRTkJBQ0FHTmdMTTA0Q0FBRUVBSUFBMkFzalRnSUFBUVFCQmZ6WUNxTkNBZ0FCQkFFRUFLQUxnMDRDQUFEWUNyTkNBZ0FCQkFFRUFOZ0xVMDRDQUFBTkFJQU5CeE5DQWdBQnFJQU5CdU5DQWdBQnFJZ1EyQWdBZ0JDQURRYkRRZ0lBQWFpSUZOZ0lBSUFOQnZOQ0FnQUJxSUFVMkFnQWdBMEhNMElDQUFHb2dBMEhBMElDQUFHb2lCVFlDQUNBRklBUTJBZ0FnQTBIVTBJQ0FBR29nQTBISTBJQ0FBR29pQkRZQ0FDQUVJQVUyQWdBZ0EwSFEwSUNBQUdvZ0JEWUNBQ0FEUVNCcUlnTkJnQUpIRFFBTElBQkJlQ0FBYTBFUGNVRUFJQUJCQ0dwQkQzRWJJZ05xSWdRZ0JrRklhaUlGSUFOcklnTkJBWEkyQWdSQkFFRUFLQUx3MDRDQUFEWUNwTkNBZ0FCQkFDQUROZ0tVMElDQUFFRUFJQVEyQXFEUWdJQUFJQUFnQldwQk9EWUNCQXdDQ3lBRExRQU1RUWh4RFFBZ0JDQUZTUTBBSUFRZ0FFOE5BQ0FFUVhnZ0JHdEJEM0ZCQUNBRVFRaHFRUTl4R3lJRmFpSUFRUUFvQXBUUWdJQUFJQVpxSWdzZ0JXc2lCVUVCY2pZQ0JDQURJQWdnQm1vMkFnUkJBRUVBS0FMdzA0Q0FBRFlDcE5DQWdBQkJBQ0FGTmdLVTBJQ0FBRUVBSUFBMkFxRFFnSUFBSUFRZ0MycEJPRFlDQkF3QkN3SkFJQUJCQUNnQ21OQ0FnQUFpQ0U4TkFFRUFJQUEyQXBqUWdJQUFJQUFoQ0FzZ0FDQUdhaUVGUWNqVGdJQUFJUU1DUUFKQUFrQUNRQUpBQWtBQ1FBTkFJQU1vQWdBZ0JVWU5BU0FES0FJSUlnTU5BQXdDQ3dzZ0F5MEFERUVJY1VVTkFRdEJ5Tk9BZ0FBaEF3TkFBa0FnQXlnQ0FDSUZJQVJMRFFBZ0JTQURLQUlFYWlJRklBUkxEUU1MSUFNb0FnZ2hBd3dBQ3dzZ0F5QUFOZ0lBSUFNZ0F5Z0NCQ0FHYWpZQ0JDQUFRWGdnQUd0QkQzRkJBQ0FBUVFocVFROXhHMm9pQ3lBQ1FRTnlOZ0lFSUFWQmVDQUZhMEVQY1VFQUlBVkJDR3BCRDNFYmFpSUdJQXNnQW1vaUFtc2hBd0pBSUFZZ0JFY05BRUVBSUFJMkFxRFFnSUFBUVFCQkFDZ0NsTkNBZ0FBZ0Eyb2lBellDbE5DQWdBQWdBaUFEUVFGeU5nSUVEQU1MQWtBZ0JrRUFLQUtjMElDQUFFY05BRUVBSUFJMkFwelFnSUFBUVFCQkFDZ0NrTkNBZ0FBZ0Eyb2lBellDa05DQWdBQWdBaUFEUVFGeU5nSUVJQUlnQTJvZ0F6WUNBQXdEQ3dKQUlBWW9BZ1FpQkVFRGNVRUJSdzBBSUFSQmVIRWhCd0pBQWtBZ0JFSC9BVXNOQUNBR0tBSUlJZ1VnQkVFRGRpSUlRUU4wUWJEUWdJQUFhaUlBUmhvQ1FDQUdLQUlNSWdRZ0JVY05BRUVBUVFBb0FvalFnSUFBUVg0Z0NIZHhOZ0tJMElDQUFBd0NDeUFFSUFCR0dpQUVJQVUyQWdnZ0JTQUVOZ0lNREFFTElBWW9BaGdoQ1FKQUFrQWdCaWdDRENJQUlBWkdEUUFnQmlnQ0NDSUVJQWhKR2lBQUlBUTJBZ2dnQkNBQU5nSU1EQUVMQWtBZ0JrRVVhaUlFS0FJQUlnVU5BQ0FHUVJCcUlnUW9BZ0FpQlEwQVFRQWhBQXdCQ3dOQUlBUWhDQ0FGSWdCQkZHb2lCQ2dDQUNJRkRRQWdBRUVRYWlFRUlBQW9BaEFpQlEwQUN5QUlRUUEyQWdBTElBbEZEUUFDUUFKQUlBWWdCaWdDSENJRlFRSjBRYmpTZ0lBQWFpSUVLQUlBUncwQUlBUWdBRFlDQUNBQURRRkJBRUVBS0FLTTBJQ0FBRUYrSUFWM2NUWUNqTkNBZ0FBTUFnc2dDVUVRUVJRZ0NTZ0NFQ0FHUmh0cUlBQTJBZ0FnQUVVTkFRc2dBQ0FKTmdJWUFrQWdCaWdDRUNJRVJRMEFJQUFnQkRZQ0VDQUVJQUEyQWhnTElBWW9BaFFpQkVVTkFDQUFRUlJxSUFRMkFnQWdCQ0FBTmdJWUN5QUhJQU5xSVFNZ0JpQUhhaUlHS0FJRUlRUUxJQVlnQkVGK2NUWUNCQ0FDSUFOcUlBTTJBZ0FnQWlBRFFRRnlOZ0lFQWtBZ0EwSC9BVXNOQUNBRFFYaHhRYkRRZ0lBQWFpRUVBa0FDUUVFQUtBS0kwSUNBQUNJRlFRRWdBMEVEZG5RaUEzRU5BRUVBSUFVZ0EzSTJBb2pRZ0lBQUlBUWhBd3dCQ3lBRUtBSUlJUU1MSUFNZ0FqWUNEQ0FFSUFJMkFnZ2dBaUFFTmdJTUlBSWdBellDQ0F3REMwRWZJUVFDUUNBRFFmLy8vd2RMRFFBZ0EwRUlkaUlFSUFSQmdQNC9ha0VRZGtFSWNTSUVkQ0lGSUFWQmdPQWZha0VRZGtFRWNTSUZkQ0lBSUFCQmdJQVBha0VRZGtFQ2NTSUFkRUVQZGlBRUlBVnlJQUJ5YXlJRVFRRjBJQU1nQkVFVmFuWkJBWEZ5UVJ4cUlRUUxJQUlnQkRZQ0hDQUNRZ0EzQWhBZ0JFRUNkRUc0MG9DQUFHb2hCUUpBUVFBb0FvelFnSUFBSWdCQkFTQUVkQ0lJY1EwQUlBVWdBallDQUVFQUlBQWdDSEkyQW96UWdJQUFJQUlnQlRZQ0dDQUNJQUkyQWdnZ0FpQUNOZ0lNREFNTElBTkJBRUVaSUFSQkFYWnJJQVJCSDBZYmRDRUVJQVVvQWdBaEFBTkFJQUFpQlNnQ0JFRjRjU0FEUmcwQ0lBUkJIWFloQUNBRVFRRjBJUVFnQlNBQVFRUnhha0VRYWlJSUtBSUFJZ0FOQUFzZ0NDQUNOZ0lBSUFJZ0JUWUNHQ0FDSUFJMkFnd2dBaUFDTmdJSURBSUxJQUJCZUNBQWEwRVBjVUVBSUFCQkNHcEJEM0ViSWdOcUlnc2dCa0ZJYWlJSUlBTnJJZ05CQVhJMkFnUWdBQ0FJYWtFNE5nSUVJQVFnQlVFM0lBVnJRUTl4UVFBZ0JVRkpha0VQY1J0cVFVRnFJZ2dnQ0NBRVFSQnFTUnNpQ0VFak5nSUVRUUJCQUNnQzhOT0FnQUEyQXFUUWdJQUFRUUFnQXpZQ2xOQ0FnQUJCQUNBTE5nS2cwSUNBQUNBSVFSQnFRUUFwQXREVGdJQUFOd0lBSUFoQkFDa0N5Tk9BZ0FBM0FnaEJBQ0FJUVFocU5nTFEwNENBQUVFQUlBWTJBc3pUZ0lBQVFRQWdBRFlDeU5PQWdBQkJBRUVBTmdMVTA0Q0FBQ0FJUVNScUlRTURRQ0FEUVFjMkFnQWdBMEVFYWlJRElBVkpEUUFMSUFnZ0JFWU5BeUFJSUFnb0FnUkJmbkUyQWdRZ0NDQUlJQVJySWdBMkFnQWdCQ0FBUVFGeU5nSUVBa0FnQUVIL0FVc05BQ0FBUVhoeFFiRFFnSUFBYWlFREFrQUNRRUVBS0FLSTBJQ0FBQ0lGUVFFZ0FFRURkblFpQUhFTkFFRUFJQVVnQUhJMkFvalFnSUFBSUFNaEJRd0JDeUFES0FJSUlRVUxJQVVnQkRZQ0RDQURJQVEyQWdnZ0JDQUROZ0lNSUFRZ0JUWUNDQXdFQzBFZklRTUNRQ0FBUWYvLy93ZExEUUFnQUVFSWRpSURJQU5CZ1A0L2FrRVFka0VJY1NJRGRDSUZJQVZCZ09BZmFrRVFka0VFY1NJRmRDSUlJQWhCZ0lBUGFrRVFka0VDY1NJSWRFRVBkaUFESUFWeUlBaHlheUlEUVFGMElBQWdBMEVWYW5aQkFYRnlRUnhxSVFNTElBUWdBellDSENBRVFnQTNBaEFnQTBFQ2RFRzQwb0NBQUdvaEJRSkFRUUFvQW96UWdJQUFJZ2hCQVNBRGRDSUdjUTBBSUFVZ0JEWUNBRUVBSUFnZ0JuSTJBb3pRZ0lBQUlBUWdCVFlDR0NBRUlBUTJBZ2dnQkNBRU5nSU1EQVFMSUFCQkFFRVpJQU5CQVhacklBTkJIMFliZENFRElBVW9BZ0FoQ0FOQUlBZ2lCU2dDQkVGNGNTQUFSZzBESUFOQkhYWWhDQ0FEUVFGMElRTWdCU0FJUVFSeGFrRVFhaUlHS0FJQUlnZ05BQXNnQmlBRU5nSUFJQVFnQlRZQ0dDQUVJQVEyQWd3Z0JDQUVOZ0lJREFNTElBVW9BZ2dpQXlBQ05nSU1JQVVnQWpZQ0NDQUNRUUEyQWhnZ0FpQUZOZ0lNSUFJZ0F6WUNDQXNnQzBFSWFpRUREQVVMSUFVb0FnZ2lBeUFFTmdJTUlBVWdCRFlDQ0NBRVFRQTJBaGdnQkNBRk5nSU1JQVFnQXpZQ0NBdEJBQ2dDbE5DQWdBQWlBeUFDVFEwQVFRQW9BcURRZ0lBQUlnUWdBbW9pQlNBRElBSnJJZ05CQVhJMkFnUkJBQ0FETmdLVTBJQ0FBRUVBSUFVMkFxRFFnSUFBSUFRZ0FrRURjallDQkNBRVFRaHFJUU1NQXd0QkFDRURRUUJCTURZQytOT0FnQUFNQWdzQ1FDQUxSUTBBQWtBQ1FDQUlJQWdvQWh3aUJVRUNkRUc0MG9DQUFHb2lBeWdDQUVjTkFDQURJQUEyQWdBZ0FBMEJRUUFnQjBGK0lBVjNjU0lITmdLTTBJQ0FBQXdDQ3lBTFFSQkJGQ0FMS0FJUUlBaEdHMm9nQURZQ0FDQUFSUTBCQ3lBQUlBczJBaGdDUUNBSUtBSVFJZ05GRFFBZ0FDQUROZ0lRSUFNZ0FEWUNHQXNnQ0VFVWFpZ0NBQ0lEUlEwQUlBQkJGR29nQXpZQ0FDQURJQUEyQWhnTEFrQUNRQ0FFUVE5TERRQWdDQ0FFSUFKcUlnTkJBM0kyQWdRZ0NDQURhaUlESUFNb0FnUkJBWEkyQWdRTUFRc2dDQ0FDYWlJQUlBUkJBWEkyQWdRZ0NDQUNRUU55TmdJRUlBQWdCR29nQkRZQ0FBSkFJQVJCL3dGTERRQWdCRUY0Y1VHdzBJQ0FBR29oQXdKQUFrQkJBQ2dDaU5DQWdBQWlCVUVCSUFSQkEzWjBJZ1J4RFFCQkFDQUZJQVJ5TmdLSTBJQ0FBQ0FESVFRTUFRc2dBeWdDQ0NFRUN5QUVJQUEyQWd3Z0F5QUFOZ0lJSUFBZ0F6WUNEQ0FBSUFRMkFnZ01BUXRCSHlFREFrQWdCRUgvLy84SFN3MEFJQVJCQ0hZaUF5QURRWUQrUDJwQkVIWkJDSEVpQTNRaUJTQUZRWURnSDJwQkVIWkJCSEVpQlhRaUFpQUNRWUNBRDJwQkVIWkJBbkVpQW5SQkQzWWdBeUFGY2lBQ2Ntc2lBMEVCZENBRUlBTkJGV3AyUVFGeGNrRWNhaUVEQ3lBQUlBTTJBaHdnQUVJQU53SVFJQU5CQW5SQnVOS0FnQUJxSVFVQ1FDQUhRUUVnQTNRaUFuRU5BQ0FGSUFBMkFnQkJBQ0FISUFKeU5nS00wSUNBQUNBQUlBVTJBaGdnQUNBQU5nSUlJQUFnQURZQ0RBd0JDeUFFUVFCQkdTQURRUUYyYXlBRFFSOUdHM1FoQXlBRktBSUFJUUlDUUFOQUlBSWlCU2dDQkVGNGNTQUVSZzBCSUFOQkhYWWhBaUFEUVFGMElRTWdCU0FDUVFSeGFrRVFhaUlHS0FJQUlnSU5BQXNnQmlBQU5nSUFJQUFnQlRZQ0dDQUFJQUEyQWd3Z0FDQUFOZ0lJREFFTElBVW9BZ2dpQXlBQU5nSU1JQVVnQURZQ0NDQUFRUUEyQWhnZ0FDQUZOZ0lNSUFBZ0F6WUNDQXNnQ0VFSWFpRUREQUVMQWtBZ0NrVU5BQUpBQWtBZ0FDQUFLQUljSWdWQkFuUkJ1TktBZ0FCcUlnTW9BZ0JIRFFBZ0F5QUlOZ0lBSUFnTkFVRUFJQWxCZmlBRmQzRTJBb3pRZ0lBQURBSUxJQXBCRUVFVUlBb29BaEFnQUVZYmFpQUlOZ0lBSUFoRkRRRUxJQWdnQ2pZQ0dBSkFJQUFvQWhBaUEwVU5BQ0FJSUFNMkFoQWdBeUFJTmdJWUN5QUFRUlJxS0FJQUlnTkZEUUFnQ0VFVWFpQUROZ0lBSUFNZ0NEWUNHQXNDUUFKQUlBUkJEMHNOQUNBQUlBUWdBbW9pQTBFRGNqWUNCQ0FBSUFOcUlnTWdBeWdDQkVFQmNqWUNCQXdCQ3lBQUlBSnFJZ1VnQkVFQmNqWUNCQ0FBSUFKQkEzSTJBZ1FnQlNBRWFpQUVOZ0lBQWtBZ0IwVU5BQ0FIUVhoeFFiRFFnSUFBYWlFQ1FRQW9BcHpRZ0lBQUlRTUNRQUpBUVFFZ0IwRURkblFpQ0NBR2NRMEFRUUFnQ0NBR2NqWUNpTkNBZ0FBZ0FpRUlEQUVMSUFJb0FnZ2hDQXNnQ0NBRE5nSU1JQUlnQXpZQ0NDQURJQUkyQWd3Z0F5QUlOZ0lJQzBFQUlBVTJBcHpRZ0lBQVFRQWdCRFlDa05DQWdBQUxJQUJCQ0dvaEF3c2dBVUVRYWlTQWdJQ0FBQ0FEQ3dvQUlBQVF5WUNBZ0FBTDRnMEJCMzhDUUNBQVJRMEFJQUJCZUdvaUFTQUFRWHhxS0FJQUlnSkJlSEVpQUdvaEF3SkFJQUpCQVhFTkFDQUNRUU54UlEwQklBRWdBU2dDQUNJQ2F5SUJRUUFvQXBqUWdJQUFJZ1JKRFFFZ0FpQUFhaUVBQWtBZ0FVRUFLQUtjMElDQUFFWU5BQUpBSUFKQi93RkxEUUFnQVNnQ0NDSUVJQUpCQTNZaUJVRURkRUd3MElDQUFHb2lCa1lhQWtBZ0FTZ0NEQ0lDSUFSSERRQkJBRUVBS0FLSTBJQ0FBRUYrSUFWM2NUWUNpTkNBZ0FBTUF3c2dBaUFHUmhvZ0FpQUVOZ0lJSUFRZ0FqWUNEQXdDQ3lBQktBSVlJUWNDUUFKQUlBRW9BZ3dpQmlBQlJnMEFJQUVvQWdnaUFpQUVTUm9nQmlBQ05nSUlJQUlnQmpZQ0RBd0JDd0pBSUFGQkZHb2lBaWdDQUNJRURRQWdBVUVRYWlJQ0tBSUFJZ1FOQUVFQUlRWU1BUXNEUUNBQ0lRVWdCQ0lHUVJScUlnSW9BZ0FpQkEwQUlBWkJFR29oQWlBR0tBSVFJZ1FOQUFzZ0JVRUFOZ0lBQ3lBSFJRMEJBa0FDUUNBQklBRW9BaHdpQkVFQ2RFRzQwb0NBQUdvaUFpZ0NBRWNOQUNBQ0lBWTJBZ0FnQmcwQlFRQkJBQ2dDak5DQWdBQkJmaUFFZDNFMkFvelFnSUFBREFNTElBZEJFRUVVSUFjb0FoQWdBVVliYWlBR05nSUFJQVpGRFFJTElBWWdCellDR0FKQUlBRW9BaEFpQWtVTkFDQUdJQUkyQWhBZ0FpQUdOZ0lZQ3lBQktBSVVJZ0pGRFFFZ0JrRVVhaUFDTmdJQUlBSWdCallDR0F3QkN5QURLQUlFSWdKQkEzRkJBMGNOQUNBRElBSkJmbkUyQWdSQkFDQUFOZ0tRMElDQUFDQUJJQUJxSUFBMkFnQWdBU0FBUVFGeU5nSUVEd3NnQVNBRFR3MEFJQU1vQWdRaUFrRUJjVVVOQUFKQUFrQWdBa0VDY1EwQUFrQWdBMEVBS0FLZzBJQ0FBRWNOQUVFQUlBRTJBcURRZ0lBQVFRQkJBQ2dDbE5DQWdBQWdBR29pQURZQ2xOQ0FnQUFnQVNBQVFRRnlOZ0lFSUFGQkFDZ0NuTkNBZ0FCSERRTkJBRUVBTmdLUTBJQ0FBRUVBUVFBMkFwelFnSUFBRHdzQ1FDQURRUUFvQXB6UWdJQUFSdzBBUVFBZ0FUWUNuTkNBZ0FCQkFFRUFLQUtRMElDQUFDQUFhaUlBTmdLUTBJQ0FBQ0FCSUFCQkFYSTJBZ1FnQVNBQWFpQUFOZ0lBRHdzZ0FrRjRjU0FBYWlFQUFrQUNRQ0FDUWY4QlN3MEFJQU1vQWdnaUJDQUNRUU4ySWdWQkEzUkJzTkNBZ0FCcUlnWkdHZ0pBSUFNb0Fnd2lBaUFFUncwQVFRQkJBQ2dDaU5DQWdBQkJmaUFGZDNFMkFvalFnSUFBREFJTElBSWdCa1lhSUFJZ0JEWUNDQ0FFSUFJMkFnd01BUXNnQXlnQ0dDRUhBa0FDUUNBREtBSU1JZ1lnQTBZTkFDQURLQUlJSWdKQkFDZ0NtTkNBZ0FCSkdpQUdJQUkyQWdnZ0FpQUdOZ0lNREFFTEFrQWdBMEVVYWlJQ0tBSUFJZ1FOQUNBRFFSQnFJZ0lvQWdBaUJBMEFRUUFoQmd3QkN3TkFJQUloQlNBRUlnWkJGR29pQWlnQ0FDSUVEUUFnQmtFUWFpRUNJQVlvQWhBaUJBMEFDeUFGUVFBMkFnQUxJQWRGRFFBQ1FBSkFJQU1nQXlnQ0hDSUVRUUowUWJqU2dJQUFhaUlDS0FJQVJ3MEFJQUlnQmpZQ0FDQUdEUUZCQUVFQUtBS00wSUNBQUVGK0lBUjNjVFlDak5DQWdBQU1BZ3NnQjBFUVFSUWdCeWdDRUNBRFJodHFJQVkyQWdBZ0JrVU5BUXNnQmlBSE5nSVlBa0FnQXlnQ0VDSUNSUTBBSUFZZ0FqWUNFQ0FDSUFZMkFoZ0xJQU1vQWhRaUFrVU5BQ0FHUVJScUlBSTJBZ0FnQWlBR05nSVlDeUFCSUFCcUlBQTJBZ0FnQVNBQVFRRnlOZ0lFSUFGQkFDZ0NuTkNBZ0FCSERRRkJBQ0FBTmdLUTBJQ0FBQThMSUFNZ0FrRitjVFlDQkNBQklBQnFJQUEyQWdBZ0FTQUFRUUZ5TmdJRUN3SkFJQUJCL3dGTERRQWdBRUY0Y1VHdzBJQ0FBR29oQWdKQUFrQkJBQ2dDaU5DQWdBQWlCRUVCSUFCQkEzWjBJZ0J4RFFCQkFDQUVJQUJ5TmdLSTBJQ0FBQ0FDSVFBTUFRc2dBaWdDQ0NFQUN5QUFJQUUyQWd3Z0FpQUJOZ0lJSUFFZ0FqWUNEQ0FCSUFBMkFnZ1BDMEVmSVFJQ1FDQUFRZi8vL3dkTERRQWdBRUVJZGlJQ0lBSkJnUDQvYWtFUWRrRUljU0lDZENJRUlBUkJnT0FmYWtFUWRrRUVjU0lFZENJR0lBWkJnSUFQYWtFUWRrRUNjU0lHZEVFUGRpQUNJQVJ5SUFaeWF5SUNRUUYwSUFBZ0FrRVZhblpCQVhGeVFSeHFJUUlMSUFFZ0FqWUNIQ0FCUWdBM0FoQWdBa0VDZEVHNDBvQ0FBR29oQkFKQUFrQkJBQ2dDak5DQWdBQWlCa0VCSUFKMElnTnhEUUFnQkNBQk5nSUFRUUFnQmlBRGNqWUNqTkNBZ0FBZ0FTQUVOZ0lZSUFFZ0FUWUNDQ0FCSUFFMkFnd01BUXNnQUVFQVFSa2dBa0VCZG1zZ0FrRWZSaHQwSVFJZ0JDZ0NBQ0VHQWtBRFFDQUdJZ1FvQWdSQmVIRWdBRVlOQVNBQ1FSMTJJUVlnQWtFQmRDRUNJQVFnQmtFRWNXcEJFR29pQXlnQ0FDSUdEUUFMSUFNZ0FUWUNBQ0FCSUFRMkFoZ2dBU0FCTmdJTUlBRWdBVFlDQ0F3QkN5QUVLQUlJSWdBZ0FUWUNEQ0FFSUFFMkFnZ2dBVUVBTmdJWUlBRWdCRFlDRENBQklBQTJBZ2dMUVFCQkFDZ0NxTkNBZ0FCQmYyb2lBVUYvSUFFYk5nS28wSUNBQUFzTEJBQUFBQXRPQUFKQUlBQU5BRDhBUVJCMER3c0NRQ0FBUWYvL0EzRU5BQ0FBUVg5TURRQUNRQ0FBUVJCMlFBQWlBRUYvUncwQVFRQkJNRFlDK05PQWdBQkJmdzhMSUFCQkVIUVBDeERLZ0lDQUFBQUw4Z0lDQTM4QmZnSkFJQUpGRFFBZ0FDQUJPZ0FBSUFJZ0FHb2lBMEYvYWlBQk9nQUFJQUpCQTBrTkFDQUFJQUU2QUFJZ0FDQUJPZ0FCSUFOQmZXb2dBVG9BQUNBRFFYNXFJQUU2QUFBZ0FrRUhTUTBBSUFBZ0FUb0FBeUFEUVh4cUlBRTZBQUFnQWtFSlNRMEFJQUJCQUNBQWEwRURjU0lFYWlJRElBRkIvd0Z4UVlHQ2hBaHNJZ0UyQWdBZ0F5QUNJQVJyUVh4eElnUnFJZ0pCZkdvZ0FUWUNBQ0FFUVFsSkRRQWdBeUFCTmdJSUlBTWdBVFlDQkNBQ1FYaHFJQUUyQWdBZ0FrRjBhaUFCTmdJQUlBUkJHVWtOQUNBRElBRTJBaGdnQXlBQk5nSVVJQU1nQVRZQ0VDQURJQUUyQWd3Z0FrRndhaUFCTmdJQUlBSkJiR29nQVRZQ0FDQUNRV2hxSUFFMkFnQWdBa0ZrYWlBQk5nSUFJQVFnQTBFRWNVRVljaUlGYXlJQ1FTQkpEUUFnQWExQ2dZQ0FnQkIrSVFZZ0F5QUZhaUVCQTBBZ0FTQUdOd01ZSUFFZ0JqY0RFQ0FCSUFZM0F3Z2dBU0FHTndNQUlBRkJJR29oQVNBQ1FXQnFJZ0pCSDBzTkFBc0xJQUFMQzQ1SUFRQkJnQWdMaGtnQkFBQUFBZ0FBQUFNQUFBQUFBQUFBQUFBQUFBUUFBQUFGQUFBQUFBQUFBQUFBQUFBR0FBQUFCd0FBQUFnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFbHVkbUZzYVdRZ1kyaGhjaUJwYmlCMWNtd2djWFZsY25rQVUzQmhiaUJqWVd4c1ltRmpheUJsY25KdmNpQnBiaUJ2Ymw5aWIyUjVBRU52Ym5SbGJuUXRUR1Z1WjNSb0lHOTJaWEptYkc5M0FFTm9kVzVySUhOcGVtVWdiM1psY21ac2IzY0FVbVZ6Y0c5dWMyVWdiM1psY21ac2IzY0FTVzUyWVd4cFpDQnRaWFJvYjJRZ1ptOXlJRWhVVkZBdmVDNTRJSEpsY1hWbGMzUUFTVzUyWVd4cFpDQnRaWFJvYjJRZ1ptOXlJRkpVVTFBdmVDNTRJSEpsY1hWbGMzUUFSWGh3WldOMFpXUWdVMDlWVWtORklHMWxkR2h2WkNCbWIzSWdTVU5GTDNndWVDQnlaWEYxWlhOMEFFbHVkbUZzYVdRZ1kyaGhjaUJwYmlCMWNtd2dabkpoWjIxbGJuUWdjM1JoY25RQVJYaHdaV04wWldRZ1pHOTBBRk53WVc0Z1kyRnNiR0poWTJzZ1pYSnliM0lnYVc0Z2IyNWZjM1JoZEhWekFFbHVkbUZzYVdRZ2NtVnpjRzl1YzJVZ2MzUmhkSFZ6QUVsdWRtRnNhV1FnWTJoaGNtRmpkR1Z5SUdsdUlHTm9kVzVySUdWNGRHVnVjMmx2Ym5NQVZYTmxjaUJqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmY21WelpYUmdJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDlqYUhWdWExOW9aV0ZrWlhKZ0lHTmhiR3hpWVdOcklHVnljbTl5QUdCdmJsOXRaWE56WVdkbFgySmxaMmx1WUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZlkyaDFibXRmWlhoMFpXNXphVzl1WDNaaGJIVmxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmYzNSaGRIVnpYMk52YlhCc1pYUmxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmZG1WeWMybHZibDlqYjIxd2JHVjBaV0FnWTJGc2JHSmhZMnNnWlhKeWIzSUFZRzl1WDNWeWJGOWpiMjF3YkdWMFpXQWdZMkZzYkdKaFkyc2daWEp5YjNJQVlHOXVYMk5vZFc1clgyTnZiWEJzWlhSbFlDQmpZV3hzWW1GamF5Qmxjbkp2Y2dCZ2IyNWZhR1ZoWkdWeVgzWmhiSFZsWDJOdmJYQnNaWFJsWUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZmJXVnpjMkZuWlY5amIyMXdiR1YwWldBZ1kyRnNiR0poWTJzZ1pYSnliM0lBWUc5dVgyMWxkR2h2WkY5amIyMXdiR1YwWldBZ1kyRnNiR0poWTJzZ1pYSnliM0lBWUc5dVgyaGxZV1JsY2w5bWFXVnNaRjlqYjIxd2JHVjBaV0FnWTJGc2JHSmhZMnNnWlhKeWIzSUFZRzl1WDJOb2RXNXJYMlY0ZEdWdWMybHZibDl1WVcxbFlDQmpZV3hzWW1GamF5Qmxjbkp2Y2dCVmJtVjRjR1ZqZEdWa0lHTm9ZWElnYVc0Z2RYSnNJSE5sY25abGNnQkpiblpoYkdsa0lHaGxZV1JsY2lCMllXeDFaU0JqYUdGeUFFbHVkbUZzYVdRZ2FHVmhaR1Z5SUdacFpXeGtJR05vWVhJQVUzQmhiaUJqWVd4c1ltRmpheUJsY25KdmNpQnBiaUJ2Ymw5MlpYSnphVzl1QUVsdWRtRnNhV1FnYldsdWIzSWdkbVZ5YzJsdmJnQkpiblpoYkdsa0lHMWhhbTl5SUhabGNuTnBiMjRBUlhod1pXTjBaV1FnYzNCaFkyVWdZV1owWlhJZ2RtVnljMmx2YmdCRmVIQmxZM1JsWkNCRFVreEdJR0ZtZEdWeUlIWmxjbk5wYjI0QVNXNTJZV3hwWkNCSVZGUlFJSFpsY25OcGIyNEFTVzUyWVd4cFpDQm9aV0ZrWlhJZ2RHOXJaVzRBVTNCaGJpQmpZV3hzWW1GamF5Qmxjbkp2Y2lCcGJpQnZibDkxY213QVNXNTJZV3hwWkNCamFHRnlZV04wWlhKeklHbHVJSFZ5YkFCVmJtVjRjR1ZqZEdWa0lITjBZWEowSUdOb1lYSWdhVzRnZFhKc0FFUnZkV0pzWlNCQUlHbHVJSFZ5YkFCRmJYQjBlU0JEYjI1MFpXNTBMVXhsYm1kMGFBQkpiblpoYkdsa0lHTm9ZWEpoWTNSbGNpQnBiaUJEYjI1MFpXNTBMVXhsYm1kMGFBQkVkWEJzYVdOaGRHVWdRMjl1ZEdWdWRDMU1aVzVuZEdnQVNXNTJZV3hwWkNCamFHRnlJR2x1SUhWeWJDQndZWFJvQUVOdmJuUmxiblF0VEdWdVozUm9JR05oYmlkMElHSmxJSEJ5WlhObGJuUWdkMmwwYUNCVWNtRnVjMlpsY2kxRmJtTnZaR2x1WndCSmJuWmhiR2xrSUdOb1lYSmhZM1JsY2lCcGJpQmphSFZ1YXlCemFYcGxBRk53WVc0Z1kyRnNiR0poWTJzZ1pYSnliM0lnYVc0Z2IyNWZhR1ZoWkdWeVgzWmhiSFZsQUZOd1lXNGdZMkZzYkdKaFkyc2daWEp5YjNJZ2FXNGdiMjVmWTJoMWJtdGZaWGgwWlc1emFXOXVYM1poYkhWbEFFbHVkbUZzYVdRZ1kyaGhjbUZqZEdWeUlHbHVJR05vZFc1cklHVjRkR1Z1YzJsdmJuTWdkbUZzZFdVQVRXbHpjMmx1WnlCbGVIQmxZM1JsWkNCTVJpQmhablJsY2lCb1pXRmtaWElnZG1Gc2RXVUFTVzUyWVd4cFpDQmdWSEpoYm5ObVpYSXRSVzVqYjJScGJtZGdJR2hsWVdSbGNpQjJZV3gxWlFCSmJuWmhiR2xrSUdOb1lYSmhZM1JsY2lCcGJpQmphSFZ1YXlCbGVIUmxibk5wYjI1eklIRjFiM1JsSUhaaGJIVmxBRWx1ZG1Gc2FXUWdZMmhoY21GamRHVnlJR2x1SUdOb2RXNXJJR1Y0ZEdWdWMybHZibk1nY1hWdmRHVmtJSFpoYkhWbEFGQmhkWE5sWkNCaWVTQnZibDlvWldGa1pYSnpYMk52YlhCc1pYUmxBRWx1ZG1Gc2FXUWdSVTlHSUhOMFlYUmxBRzl1WDNKbGMyVjBJSEJoZFhObEFHOXVYMk5vZFc1clgyaGxZV1JsY2lCd1lYVnpaUUJ2Ymw5dFpYTnpZV2RsWDJKbFoybHVJSEJoZFhObEFHOXVYMk5vZFc1clgyVjRkR1Z1YzJsdmJsOTJZV3gxWlNCd1lYVnpaUUJ2Ymw5emRHRjBkWE5mWTI5dGNHeGxkR1VnY0dGMWMyVUFiMjVmZG1WeWMybHZibDlqYjIxd2JHVjBaU0J3WVhWelpRQnZibDkxY214ZlkyOXRjR3hsZEdVZ2NHRjFjMlVBYjI1ZlkyaDFibXRmWTI5dGNHeGxkR1VnY0dGMWMyVUFiMjVmYUdWaFpHVnlYM1poYkhWbFgyTnZiWEJzWlhSbElIQmhkWE5sQUc5dVgyMWxjM05oWjJWZlkyOXRjR3hsZEdVZ2NHRjFjMlVBYjI1ZmJXVjBhRzlrWDJOdmJYQnNaWFJsSUhCaGRYTmxBRzl1WDJobFlXUmxjbDltYVdWc1pGOWpiMjF3YkdWMFpTQndZWFZ6WlFCdmJsOWphSFZ1YTE5bGVIUmxibk5wYjI1ZmJtRnRaU0J3WVhWelpRQlZibVY0Y0dWamRHVmtJSE53WVdObElHRm1kR1Z5SUhOMFlYSjBJR3hwYm1VQVUzQmhiaUJqWVd4c1ltRmpheUJsY25KdmNpQnBiaUJ2Ymw5amFIVnVhMTlsZUhSbGJuTnBiMjVmYm1GdFpRQkpiblpoYkdsa0lHTm9ZWEpoWTNSbGNpQnBiaUJqYUhWdWF5QmxlSFJsYm5OcGIyNXpJRzVoYldVQVVHRjFjMlVnYjI0Z1EwOU9Ua1ZEVkM5VmNHZHlZV1JsQUZCaGRYTmxJRzl1SUZCU1NTOVZjR2R5WVdSbEFFVjRjR1ZqZEdWa0lFaFVWRkF2TWlCRGIyNXVaV04wYVc5dUlGQnlaV1poWTJVQVUzQmhiaUJqWVd4c1ltRmpheUJsY25KdmNpQnBiaUJ2Ymw5dFpYUm9iMlFBUlhod1pXTjBaV1FnYzNCaFkyVWdZV1owWlhJZ2JXVjBhRzlrQUZOd1lXNGdZMkZzYkdKaFkyc2daWEp5YjNJZ2FXNGdiMjVmYUdWaFpHVnlYMlpwWld4a0FGQmhkWE5sWkFCSmJuWmhiR2xrSUhkdmNtUWdaVzVqYjNWdWRHVnlaV1FBU1c1MllXeHBaQ0J0WlhSb2IyUWdaVzVqYjNWdWRHVnlaV1FBVlc1bGVIQmxZM1JsWkNCamFHRnlJR2x1SUhWeWJDQnpZMmhsYldFQVVtVnhkV1Z6ZENCb1lYTWdhVzUyWVd4cFpDQmdWSEpoYm5ObVpYSXRSVzVqYjJScGJtZGdBRk5YU1ZSRFNGOVFVazlZV1FCVlUwVmZVRkpQV0ZrQVRVdEJRMVJKVmtsVVdRQlZUbEJTVDBORlUxTkJRa3hGWDBWT1ZFbFVXUUJEVDFCWkFFMVBWa1ZFWDFCRlVrMUJUa1ZPVkV4WkFGUlBUMTlGUVZKTVdRQk9UMVJKUmxrQVJrRkpURVZFWDBSRlVFVk9SRVZPUTFrQVFrRkVYMGRCVkVWWFFWa0FVRXhCV1FCUVZWUUFRMGhGUTB0UFZWUUFSMEZVUlZkQldWOVVTVTFGVDFWVUFGSkZVVlZGVTFSZlZFbE5SVTlWVkFCT1JWUlhUMUpMWDBOUFRrNUZRMVJmVkVsTlJVOVZWQUJEVDA1T1JVTlVTVTlPWDFSSlRVVlBWVlFBVEU5SFNVNWZWRWxOUlU5VlZBQk9SVlJYVDFKTFgxSkZRVVJmVkVsTlJVOVZWQUJRVDFOVUFFMUpVMFJKVWtWRFZFVkVYMUpGVVZWRlUxUUFRMHhKUlU1VVgwTk1UMU5GUkY5U1JWRlZSVk5VQUVOTVNVVk9WRjlEVEU5VFJVUmZURTlCUkY5Q1FVeEJUa05GUkY5U1JWRlZSVk5VQUVKQlJGOVNSVkZWUlZOVUFFaFVWRkJmVWtWUlZVVlRWRjlUUlU1VVgxUlBYMGhVVkZCVFgxQlBVbFFBVWtWUVQxSlVBRWxOWDBGZlZFVkJVRTlVQUZKRlUwVlVYME5QVGxSRlRsUUFUazlmUTA5T1ZFVk9WQUJRUVZKVVNVRk1YME5QVGxSRlRsUUFTRkJGWDBsT1ZrRk1TVVJmUTA5T1UxUkJUbFFBU0ZCRlgwTkNYMUpGVTBWVUFFZEZWQUJJVUVWZlUxUlNTVU5VQUVOUFRrWk1TVU5VQUZSRlRWQlBVa0ZTV1Y5U1JVUkpVa1ZEVkFCUVJWSk5RVTVGVGxSZlVrVkVTVkpGUTFRQVEwOU9Ua1ZEVkFCTlZVeFVTVjlUVkVGVVZWTUFTRkJGWDBsT1ZrRk1TVVJmVTFSQlZGVlRBRlJQVDE5TlFVNVpYMUpGVVZWRlUxUlRBRVZCVWt4WlgwaEpUbFJUQUZWT1FWWkJTVXhCUWt4RlgwWlBVbDlNUlVkQlRGOVNSVUZUVDA1VEFFOVFWRWxQVGxNQVUxZEpWRU5JU1U1SFgxQlNUMVJQUTA5TVV3QldRVkpKUVU1VVgwRk1VMDlmVGtWSFQxUkpRVlJGVXdCTlZVeFVTVkJNUlY5RFNFOUpRMFZUQUVsT1ZFVlNUa0ZNWDFORlVsWkZVbDlGVWxKUFVnQlhSVUpmVTBWU1ZrVlNYMVZPUzA1UFYwNWZSVkpTVDFJQVVrRkpURWRWVGw5RlVsSlBVZ0JKUkVWT1ZFbFVXVjlRVWs5V1NVUkZVbDlCVlZSSVJVNVVTVU5CVkVsUFRsOUZVbEpQVWdCVFUweGZRMFZTVkVsR1NVTkJWRVZmUlZKU1QxSUFTVTVXUVV4SlJGOVlYMFpQVWxkQlVrUkZSRjlHVDFJQVUwVlVYMUJCVWtGTlJWUkZVZ0JIUlZSZlVFRlNRVTFGVkVWU0FFaFFSVjlWVTBWU0FGTkZSVjlQVkVoRlVnQklVRVZmUTBKZlEwaFZUa3RmU0VWQlJFVlNBRTFMUTBGTVJVNUVRVklBVTBWVVZWQUFWMFZDWDFORlVsWkZVbDlKVTE5RVQxZE9BRlJGUVZKRVQxZE9BRWhRUlY5RFRFOVRSVVJmUTA5T1RrVkRWRWxQVGdCSVJWVlNTVk5VU1VOZlJWaFFTVkpCVkVsUFRnQkVTVk5EVDA1T1JVTlVSVVJmVDFCRlVrRlVTVTlPQUU1UFRsOUJWVlJJVDFKSlZFRlVTVlpGWDBsT1JrOVNUVUZVU1U5T0FFaFFSVjlKVGxaQlRFbEVYMVpGVWxOSlQwNEFTRkJGWDBOQ1gwMUZVMU5CUjBWZlFrVkhTVTRBVTBsVVJWOUpVMTlHVWs5YVJVNEFTRkJGWDBsT1ZrRk1TVVJmU0VWQlJFVlNYMVJQUzBWT0FFbE9Wa0ZNU1VSZlZFOUxSVTRBUms5U1FrbEVSRVZPQUVWT1NFRk9RMFZmV1U5VlVsOURRVXhOQUVoUVJWOUpUbFpCVEVsRVgxVlNUQUJDVEU5RFMwVkVYMEpaWDFCQlVrVk9WRUZNWDBOUFRsUlNUMHdBVFV0RFQwd0FRVU5NQUVoUVJWOUpUbFJGVWs1QlRBQlNSVkZWUlZOVVgwaEZRVVJGVWw5R1NVVk1SRk5mVkU5UFgweEJVa2RGWDFWT1QwWkdTVU5KUVV3QVNGQkZYMDlMQUZWT1RFbE9Td0JWVGt4UFEwc0FVRkpKQUZKRlZGSlpYMWRKVkVnQVNGQkZYMGxPVmtGTVNVUmZRMDlPVkVWT1ZGOU1SVTVIVkVnQVNGQkZYMVZPUlZoUVJVTlVSVVJmUTA5T1ZFVk9WRjlNUlU1SFZFZ0FSa3hWVTBnQVVGSlBVRkJCVkVOSUFFMHRVMFZCVWtOSUFGVlNTVjlVVDA5ZlRFOU9Sd0JRVWs5RFJWTlRTVTVIQUUxSlUwTkZURXhCVGtWUFZWTmZVRVZTVTBsVFZFVk9WRjlYUVZKT1NVNUhBRTFKVTBORlRFeEJUa1ZQVlZOZlYwRlNUa2xPUndCSVVFVmZTVTVXUVV4SlJGOVVVa0ZPVTBaRlVsOUZUa05QUkVsT1J3QkZlSEJsWTNSbFpDQkRVa3hHQUVoUVJWOUpUbFpCVEVsRVgwTklWVTVMWDFOSldrVUFUVTlXUlFCRFQwNVVTVTVWUlFCSVVFVmZRMEpmVTFSQlZGVlRYME5QVFZCTVJWUkZBRWhRUlY5RFFsOUlSVUZFUlZKVFgwTlBUVkJNUlZSRkFFaFFSVjlEUWw5V1JWSlRTVTlPWDBOUFRWQk1SVlJGQUVoUVJWOURRbDlWVWt4ZlEwOU5VRXhGVkVVQVNGQkZYME5DWDBOSVZVNUxYME5QVFZCTVJWUkZBRWhRUlY5RFFsOUlSVUZFUlZKZlZrRk1WVVZmUTA5TlVFeEZWRVVBU0ZCRlgwTkNYME5JVlU1TFgwVllWRVZPVTBsUFRsOVdRVXhWUlY5RFQwMVFURVZVUlFCSVVFVmZRMEpmUTBoVlRrdGZSVmhVUlU1VFNVOU9YMDVCVFVWZlEwOU5VRXhGVkVVQVNGQkZYME5DWDAxRlUxTkJSMFZmUTA5TlVFeEZWRVVBU0ZCRlgwTkNYMDFGVkVoUFJGOURUMDFRVEVWVVJRQklVRVZmUTBKZlNFVkJSRVZTWDBaSlJVeEVYME5QVFZCTVJWUkZBRVJGVEVWVVJRQklVRVZmU1U1V1FVeEpSRjlGVDBaZlUxUkJWRVVBU1U1V1FVeEpSRjlUVTB4ZlEwVlNWRWxHU1VOQlZFVUFVRUZWVTBVQVRrOWZVa1ZUVUU5T1UwVUFWVTVUVlZCUVQxSlVSVVJmVFVWRVNVRmZWRmxRUlFCSFQwNUZBRTVQVkY5QlEwTkZVRlJCUWt4RkFGTkZVbFpKUTBWZlZVNUJWa0ZKVEVGQ1RFVUFVa0ZPUjBWZlRrOVVYMU5CVkVsVFJrbEJRa3hGQUU5U1NVZEpUbDlKVTE5VlRsSkZRVU5JUVVKTVJRQlNSVk5RVDA1VFJWOUpVMTlUVkVGTVJRQlFWVkpIUlFCTlJWSkhSUUJTUlZGVlJWTlVYMGhGUVVSRlVsOUdTVVZNUkZOZlZFOVBYMHhCVWtkRkFGSkZVVlZGVTFSZlNFVkJSRVZTWDFSUFQxOU1RVkpIUlFCUVFWbE1UMEZFWDFSUFQxOU1RVkpIUlFCSlRsTlZSa1pKUTBsRlRsUmZVMVJQVWtGSFJRQklVRVZmVUVGVlUwVkVYMVZRUjFKQlJFVUFTRkJGWDFCQlZWTkZSRjlJTWw5VlVFZFNRVVJGQUZOUFZWSkRSUUJCVGs1UFZVNURSUUJVVWtGRFJRQklVRVZmVlU1RldGQkZRMVJGUkY5VFVFRkRSUUJFUlZORFVrbENSUUJWVGxOVlFsTkRVa2xDUlFCU1JVTlBVa1FBU0ZCRlgwbE9Wa0ZNU1VSZlRVVlVTRTlFQUU1UFZGOUdUMVZPUkFCUVVrOVFSa2xPUkFCVlRrSkpUa1FBVWtWQ1NVNUVBRlZPUVZWVVNFOVNTVnBGUkFCTlJWUklUMFJmVGs5VVgwRk1URTlYUlVRQVNGUlVVRjlXUlZKVFNVOU9YMDVQVkY5VFZWQlFUMUpVUlVRQVFVeFNSVUZFV1Y5U1JWQlBVbFJGUkFCQlEwTkZVRlJGUkFCT1QxUmZTVTFRVEVWTlJVNVVSVVFBVEU5UFVGOUVSVlJGUTFSRlJBQklVRVZmUTFKZlJWaFFSVU5VUlVRQVNGQkZYMHhHWDBWWVVFVkRWRVZFQUVOU1JVRlVSVVFBU1UxZlZWTkZSQUJJVUVWZlVFRlZVMFZFQUZSSlRVVlBWVlJmVDBORFZWSkZSQUJRUVZsTlJVNVVYMUpGVVZWSlVrVkVBRkJTUlVOUFRrUkpWRWxQVGw5U1JWRlZTVkpGUkFCUVVrOVlXVjlCVlZSSVJVNVVTVU5CVkVsUFRsOVNSVkZWU1ZKRlJBQk9SVlJYVDFKTFgwRlZWRWhGVGxSSlEwRlVTVTlPWDFKRlVWVkpVa1ZFQUV4RlRrZFVTRjlTUlZGVlNWSkZSQUJUVTB4ZlEwVlNWRWxHU1VOQlZFVmZVa1ZSVlVsU1JVUUFWVkJIVWtGRVJWOVNSVkZWU1ZKRlJBQlFRVWRGWDBWWVVFbFNSVVFBVUZKRlEwOU9SRWxVU1U5T1gwWkJTVXhGUkFCRldGQkZRMVJCVkVsUFRsOUdRVWxNUlVRQVVrVldRVXhKUkVGVVNVOU9YMFpCU1V4RlJBQlRVMHhmU0VGT1JGTklRVXRGWDBaQlNVeEZSQUJNVDBOTFJVUUFWRkpCVGxOR1QxSk5RVlJKVDA1ZlFWQlFURWxGUkFCT1QxUmZUVTlFU1VaSlJVUUFUazlVWDBWWVZFVk9SRVZFQUVKQlRrUlhTVVJVU0Y5TVNVMUpWRjlGV0VORlJVUkZSQUJUU1ZSRlgwbFRYMDlXUlZKTVQwRkVSVVFBU0VWQlJBQkZlSEJsWTNSbFpDQklWRlJRTHdBQVhoTUFBQ1lUQUFBd0VBQUE4QmNBQUowVEFBQVZFZ0FBT1JjQUFQQVNBQUFLRUFBQWRSSUFBSzBTQUFDQ0V3QUFUeFFBQUg4UUFBQ2dGUUFBSXhRQUFJa1NBQUNMRkFBQVRSVUFBTlFSQUFEUEZBQUFFQmdBQU1rV0FBRGNGZ0FBd1JFQUFPQVhBQUM3RkFBQWRCUUFBSHdWQUFEbEZBQUFDQmNBQUI4UUFBQmxGUUFBb3hRQUFDZ1ZBQUFDRlFBQW1SVUFBQ3dRQUFDTEdRQUFUdzhBQU5RT0FBQnFFQUFBemhBQUFBSVhBQUNKRGdBQWJoTUFBQndUQUFCbUZBQUFWaGNBQU1FVEFBRE5Fd0FBYkJNQUFHZ1hBQUJtRndBQVh4Y0FBQ0lUQUFET0R3QUFhUTRBQU5nT0FBQmpGZ0FBeXhNQUFLb09BQUFvRndBQUpoY0FBTVVUQUFCZEZnQUE2QkVBQUdjVEFBQmxFd0FBOGhZQUFITVRBQUFkRndBQStSWUFBUE1SQUFEUERnQUF6aFVBQUF3U0FBQ3pFUUFBcFJFQUFHRVFBQUF5RndBQXV4TUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFRSUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQUFBQUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUlEQWdJQ0FnSUFBQUlDQUFJQ0FBSUNBZ0lDQWdJQ0FnSUFCQUFBQUFBQUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQUFBQUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0FDQUFJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ0FBSUNBZ0lDQUFBQ0FnQUNBZ0FDQWdJQ0FnSUNBZ0lDQUFNQUJBQUFBQUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBQUFBQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQUFnQUNBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBYkc5elpXVmxjQzFoYkdsMlpRQUFBQUFBQUFBQUFBQUFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQUFBQUFBQUFBQUFBQkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVCQVFFQkFRRUJBUUVCQVFJQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJZMmgxYm10bFpBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFFQUFRRUJBUUVBQUFFQkFBRUJBQUVCQVFFQkFRRUJBUUVBQUFBQUFBQUFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBQUFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQkFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJsWTNScGIyNWxiblF0YkdWdVozUm9iMjV5YjNoNUxXTnZibTVsWTNScGIyNEFBQUFBQUFBQUFBQUFBQUFBQUFCeVlXNXpabVZ5TFdWdVkyOWthVzVuY0dkeVlXUmxEUW9OQ2cwS1UwME5DZzBLVkZSUUwwTkZMMVJUVUM4QUFBQUFBQUFBQUFBQUFBQUJBZ0FCQXdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFBQUFBQUFBQUFBQVFJQUFRTUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVBUUVGQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUFBQUFBQUFBQUFBRUFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFQkFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQUFBQUFBQUFBQUFBQVFBQUFnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTUVBQUFFQkFRRUJBUUVCQVFFQkFVRUJBUUVCQVFFQkFRRUJBUUFCQUFHQndRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBRUFBUUFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRUFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUlBQUFBQUFBQURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3QUFBQUFBQUFNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQUFBQkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUFBQUFBQUFBQUFBSUFBQUFBQWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01BQUFBQUFBQURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCT1QxVk9RMFZGUTB0UFZWUk9SVU5VUlZSRlExSkpRa1ZNVlZOSVJWUkZRVVJUUlVGU1EwaFNSMFZEVkVsV1NWUlpURVZPUkVGU1ZrVlBWRWxHV1ZCVVNVOU9VME5JVTBWQldWTlVRVlJEU0VkRlQxSkVTVkpGUTFSUFVsUlNRMGhRUVZKQlRVVlVSVkpWVWtORlFsTkRVa2xDUlVGU1JFOVhUa0ZEUlVsT1JFNUxRMHRWUWxORFVrbENSVWhVVkZBdlFVUlVVQzg9J1xuIiwKICAgICJtb2R1bGUuZXhwb3J0cyA9ICdBR0Z6YlFFQUFBQUJNQWhnQVg4QmYyQURmMzkvQVg5Z0JIOS9mMzhCZjJBQUFHQURmMzkvQUdBQmZ3QmdBbjkvQUdBR2YzOS9mMzkvQUFMTEFRZ0RaVzUyR0hkaGMyMWZiMjVmYUdWaFpHVnljMTlqYjIxd2JHVjBaUUFDQTJWdWRoVjNZWE50WDI5dVgyMWxjM05oWjJWZlltVm5hVzRBQUFObGJuWUxkMkZ6YlY5dmJsOTFjbXdBQVFObGJuWU9kMkZ6YlY5dmJsOXpkR0YwZFhNQUFRTmxibllVZDJGemJWOXZibDlvWldGa1pYSmZabWxsYkdRQUFRTmxibllVZDJGemJWOXZibDlvWldGa1pYSmZkbUZzZFdVQUFRTmxibllNZDJGemJWOXZibDlpYjJSNUFBRURaVzUyR0hkaGMyMWZiMjVmYldWemMyRm5aVjlqYjIxd2JHVjBaUUFBQTBaRkF3TUVBQUFGQUFBQUFBQUFCUUVGQUFVRkJRQUFCZ0FBQUFBR0JnWUdBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBQUFCQVFjQUFBVUZBd0FCQkFVQmNBRVNFZ1VEQVFBQ0JnZ0Jmd0ZCZ05RRUN3ZlJCU0lHYldWdGIzSjVBZ0FMWDJsdWFYUnBZV3hwZW1VQUNSbGZYMmx1WkdseVpXTjBYMloxYm1OMGFXOXVYM1JoWW14bEFRQUxiR3hvZEhSd1gybHVhWFFBQ2hoc2JHaDBkSEJmYzJodmRXeGtYMnRsWlhCZllXeHBkbVVBUVF4c2JHaDBkSEJmWVd4c2IyTUFEQVp0WVd4c2IyTUFSZ3RzYkdoMGRIQmZabkpsWlFBTkJHWnlaV1VBU0E5c2JHaDBkSEJmWjJWMFgzUjVjR1VBRGhWc2JHaDBkSEJmWjJWMFgyaDBkSEJmYldGcWIzSUFEeFZzYkdoMGRIQmZaMlYwWDJoMGRIQmZiV2x1YjNJQUVCRnNiR2gwZEhCZloyVjBYMjFsZEdodlpBQVJGbXhzYUhSMGNGOW5aWFJmYzNSaGRIVnpYMk52WkdVQUVoSnNiR2gwZEhCZloyVjBYM1Z3WjNKaFpHVUFFd3hzYkdoMGRIQmZjbVZ6WlhRQUZBNXNiR2gwZEhCZlpYaGxZM1YwWlFBVkZHeHNhSFIwY0Y5elpYUjBhVzVuYzE5cGJtbDBBQllOYkd4b2RIUndYMlpwYm1semFBQVhER3hzYUhSMGNGOXdZWFZ6WlFBWURXeHNhSFIwY0Y5eVpYTjFiV1VBR1J0c2JHaDBkSEJmY21WemRXMWxYMkZtZEdWeVgzVndaM0poWkdVQUdoQnNiR2gwZEhCZloyVjBYMlZ5Y201dkFCc1hiR3hvZEhSd1gyZGxkRjlsY25KdmNsOXlaV0Z6YjI0QUhCZHNiR2gwZEhCZmMyVjBYMlZ5Y205eVgzSmxZWE52YmdBZEZHeHNhSFIwY0Y5blpYUmZaWEp5YjNKZmNHOXpBQjRSYkd4b2RIUndYMlZ5Y201dlgyNWhiV1VBSHhKc2JHaDBkSEJmYldWMGFHOWtYMjVoYldVQUlCSnNiR2gwZEhCZmMzUmhkSFZ6WDI1aGJXVUFJUnBzYkdoMGRIQmZjMlYwWDJ4bGJtbGxiblJmYUdWaFpHVnljd0FpSVd4c2FIUjBjRjl6WlhSZmJHVnVhV1Z1ZEY5amFIVnVhMlZrWDJ4bGJtZDBhQUFqSFd4c2FIUjBjRjl6WlhSZmJHVnVhV1Z1ZEY5clpXVndYMkZzYVhabEFDUWtiR3hvZEhSd1gzTmxkRjlzWlc1cFpXNTBYM1J5WVc1elptVnlYMlZ1WTI5a2FXNW5BQ1VZYkd4b2RIUndYMjFsYzNOaFoyVmZibVZsWkhOZlpXOW1BRDhKRndFQVFRRUxFUUVDQXdRRkN3WUhOVGszTVM4dEp5c3BDckxnQWtVQ0FBc0lBQkNJZ0lDQUFBc1pBQ0FBRU1LQWdJQUFHaUFBSUFJMkFqZ2dBQ0FCT2dBb0N4d0FJQUFnQUM4Qk1pQUFMUUF1SUFBUXdZQ0FnQUFRZ0lDQWdBQUxLZ0VCZjBIQUFCREdnSUNBQUNJQkVNS0FnSUFBR2lBQlFZQ0lnSUFBTmdJNElBRWdBRG9BS0NBQkN3b0FJQUFReUlDQWdBQUxCd0FnQUMwQUtBc0hBQ0FBTFFBcUN3Y0FJQUF0QUNzTEJ3QWdBQzBBS1FzSEFDQUFMd0V5Q3djQUlBQXRBQzRMUlFFRWZ5QUFLQUlZSVFFZ0FDMEFMU0VDSUFBdEFDZ2hBeUFBS0FJNElRUWdBQkRDZ0lDQUFCb2dBQ0FFTmdJNElBQWdBem9BS0NBQUlBSTZBQzBnQUNBQk5nSVlDeEVBSUFBZ0FTQUJJQUpxRU1PQWdJQUFDeEFBSUFCQkFFSGNBQkRNZ0lDQUFCb0xad0VCZjBFQUlRRUNRQ0FBS0FJTURRQUNRQUpBQWtBQ1FDQUFMUUF2RGdNQkFBTUNDeUFBS0FJNElnRkZEUUFnQVNnQ0xDSUJSUTBBSUFBZ0FSR0FnSUNBQUFBaUFRMERDMEVBRHdzUXlvQ0FnQUFBQ3lBQVFjT1dnSUFBTmdJUVFRNGhBUXNnQVFzZUFBSkFJQUFvQWd3TkFDQUFRZEdiZ0lBQU5nSVFJQUJCRlRZQ0RBc0xGZ0FDUUNBQUtBSU1RUlZIRFFBZ0FFRUFOZ0lNQ3dzV0FBSkFJQUFvQWd4QkZrY05BQ0FBUVFBMkFnd0xDd2NBSUFBb0Fnd0xCd0FnQUNnQ0VBc0pBQ0FBSUFFMkFoQUxCd0FnQUNnQ0ZBc2lBQUpBSUFCQkpFa05BQkRLZ0lDQUFBQUxJQUJCQW5SQm9MT0FnQUJxS0FJQUN5SUFBa0FnQUVFdVNRMEFFTXFBZ0lBQUFBc2dBRUVDZEVHd3RJQ0FBR29vQWdBTDdnc0JBWDlCNjZpQWdBQWhBUUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBSUFCQm5IOXFEdlFEWTJJQUFXRmhZV0ZoWVFJREJBVmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoQmdjSUNRb0xEQTBPRDJGaFlXRmhFR0ZoWVdGaFlXRmhZV0ZoRVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVJJVEZCVVdGeGdaR2h0aFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaEhCMGVIeUFoSWlNa0pTWW5LQ2txS3l3dExpOHdNVEl6TkRVMllUYzRPVHBoWVdGaFlXRmhZVHRoWVdFOFlXRmhZVDArUDJGaFlXRmhZV0ZoUUdGaFFXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZVUpEUkVWR1IwaEpTa3RNVFU1UFVGRlNVMkZoWVdGaFlXRmhWRlZXVjFoWldsdGhYRjFoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGZVlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFgyQmhDMEhocDRDQUFBOExRYVNoZ0lBQUR3dEJ5NnlBZ0FBUEMwSCtzWUNBQUE4TFFjQ2tnSUFBRHd0QnE2U0FnQUFQQzBHTnFJQ0FBQThMUWVLbWdJQUFEd3RCZ0xDQWdBQVBDMEc1cjRDQUFBOExRZGVrZ0lBQUR3dEI3NStBZ0FBUEMwSGhuNENBQUE4TFFmcWZnSUFBRHd0QjhxQ0FnQUFQQzBHb3I0Q0FBQThMUWE2eWdJQUFEd3RCaUxDQWdBQVBDMEhzcDRDQUFBOExRWUtpZ0lBQUR3dEJqcDJBZ0FBUEMwSFFyb0NBQUE4TFFjcWpnSUFBRHd0QnhiS0FnQUFQQzBIZm5JQ0FBQThMUWRLY2dJQUFEd3RCeEtDQWdBQVBDMEhYb0lDQUFBOExRYUtmZ0lBQUR3dEI3YTZBZ0FBUEMwR3JzSUNBQUE4TFFkU2xnSUFBRHd0QnpLNkFnQUFQQzBINnJvQ0FBQThMUWZ5cmdJQUFEd3RCMHJDQWdBQVBDMEh4bllDQUFBOExRYnVnZ0lBQUR3dEI5NnVBZ0FBUEMwR1FzWUNBQUE4TFFkZXhnSUFBRHd0Qm9xMkFnQUFQQzBIVXA0Q0FBQThMUWVDcmdJQUFEd3RCbjZ5QWdBQVBDMEhyc1lDQUFBOExRZFdmZ0lBQUR3dEJ5ckdBZ0FBUEMwSGVwWUNBQUE4TFFkU2VnSUFBRHd0QjlKeUFnQUFQQzBHbnNvQ0FBQThMUWJHZGdJQUFEd3RCb0oyQWdBQVBDMEc1c1lDQUFBOExRYnl3Z0lBQUR3dEJrcUdBZ0FBUEMwR3pwb0NBQUE4TFFlbXNnSUFBRHd0QnJKNkFnQUFQQzBIVXE0Q0FBQThMUWZlbWdJQUFEd3RCZ0thQWdBQVBDMEd3b1lDQUFBOExRZjZlZ0lBQUR3dEJqYU9BZ0FBUEMwR0pyWUNBQUE4TFFmZWlnSUFBRHd0Qm9MR0FnQUFQQzBHdW40Q0FBQThMUWNhbGdJQUFEd3RCNko2QWdBQVBDMEdUb29DQUFBOExRY0t2Z0lBQUR3dEJ3NTJBZ0FBUEMwR0xySUNBQUE4TFFlR2RnSUFBRHd0QmphK0FnQUFQQzBIcW9ZQ0FBQThMUWJTdGdJQUFEd3RCMHErQWdBQVBDMEhmc29DQUFBOExRZEt5Z0lBQUR3dEI4TENBZ0FBUEMwR3Bvb0NBQUE4TFFmbWpnSUFBRHd0Qm1aNkFnQUFQQzBHMXJJQ0FBQThMUVp1d2dJQUFEd3RCa3JLQWdBQVBDMEcycTRDQUFBOExRY0tpZ0lBQUR3dEIrTEtBZ0FBUEMwR2VwWUNBQUE4TFFkQ2lnSUFBRHd0QnVwNkFnQUFQQzBHQm5vQ0FBQThMRU1xQWdJQUFBQXRCMXFHQWdBQWhBUXNnQVFzV0FDQUFJQUF0QUMxQi9nRnhJQUZCQUVkeU9nQXRDeGtBSUFBZ0FDMEFMVUg5QVhFZ0FVRUFSMEVCZEhJNkFDMExHUUFnQUNBQUxRQXRRZnNCY1NBQlFRQkhRUUowY2pvQUxRc1pBQ0FBSUFBdEFDMUI5d0Z4SUFGQkFFZEJBM1J5T2dBdEN5NEJBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWdBaUJFVU5BQ0FBSUFRUmdJQ0FnQUFBSVFNTElBTUxTUUVDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ0JDSUVSUTBBSUFBZ0FTQUNJQUZySUFRUmdZQ0FnQUFBSWdOQmYwY05BQ0FBUWNhUmdJQUFOZ0lRUVJnaEF3c2dBd3N1QVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSXdJZ1JGRFFBZ0FDQUVFWUNBZ0lBQUFDRURDeUFEQzBrQkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9BZ2dpQkVVTkFDQUFJQUVnQWlBQmF5QUVFWUdBZ0lBQUFDSURRWDlIRFFBZ0FFSDJpb0NBQURZQ0VFRVlJUU1MSUFNTExnRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDTkNJRVJRMEFJQUFnQkJHQWdJQ0FBQUFoQXdzZ0F3dEpBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FJTUlnUkZEUUFnQUNBQklBSWdBV3NnQkJHQmdJQ0FBQUFpQTBGL1J3MEFJQUJCN1pxQWdBQTJBaEJCR0NFREN5QURDeTRCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FqZ2lCRVVOQUNBQUlBUVJnSUNBZ0FBQUlRTUxJQU1MU1FFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NFQ0lFUlEwQUlBQWdBU0FDSUFGcklBUVJnWUNBZ0FBQUlnTkJmMGNOQUNBQVFaV1FnSUFBTmdJUVFSZ2hBd3NnQXdzdUFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUk4SWdSRkRRQWdBQ0FFRVlDQWdJQUFBQ0VEQ3lBREMwa0JBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWhRaUJFVU5BQ0FBSUFFZ0FpQUJheUFFRVlHQWdJQUFBQ0lEUVg5SERRQWdBRUdxbTRDQUFEWUNFRUVZSVFNTElBTUxMZ0VDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ1FDSUVSUTBBSUFBZ0JCR0FnSUNBQUFBaEF3c2dBd3RKQVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSVlJZ1JGRFFBZ0FDQUJJQUlnQVdzZ0JCR0JnSUNBQUFBaUEwRi9SdzBBSUFCQjdaT0FnQUEyQWhCQkdDRURDeUFEQ3k0QkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9Ba1FpQkVVTkFDQUFJQVFSZ0lDQWdBQUFJUU1MSUFNTExnRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDSkNJRVJRMEFJQUFnQkJHQWdJQ0FBQUFoQXdzZ0F3c3VBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FJc0lnUkZEUUFnQUNBRUVZQ0FnSUFBQUNFREN5QURDMGtCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FpZ2lCRVVOQUNBQUlBRWdBaUFCYXlBRUVZR0FnSUFBQUNJRFFYOUhEUUFnQUVIMmlJQ0FBRFlDRUVFWUlRTUxJQU1MTGdFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NVQ0lFUlEwQUlBQWdCQkdBZ0lDQUFBQWhBd3NnQXd0SkFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUljSWdSRkRRQWdBQ0FCSUFJZ0FXc2dCQkdCZ0lDQUFBQWlBMEYvUncwQUlBQkJ3cG1BZ0FBMkFoQkJHQ0VEQ3lBREN5NEJBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWtnaUJFVU5BQ0FBSUFRUmdJQ0FnQUFBSVFNTElBTUxTUUVDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ0lDSUVSUTBBSUFBZ0FTQUNJQUZySUFRUmdZQ0FnQUFBSWdOQmYwY05BQ0FBUVpTVWdJQUFOZ0lRUVJnaEF3c2dBd3N1QVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSk1JZ1JGRFFBZ0FDQUVFWUNBZ0lBQUFDRURDeUFEQ3k0QkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9BbFFpQkVVTkFDQUFJQVFSZ0lDQWdBQUFJUU1MSUFNTExnRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDV0NJRVJRMEFJQUFnQkJHQWdJQ0FBQUFoQXdzZ0F3dEZBUUYvQWtBQ1FDQUFMd0V3UVJSeFFSUkhEUUJCQVNFRElBQXRBQ2hCQVVZTkFTQUFMd0V5UWVVQVJpRUREQUVMSUFBdEFDbEJCVVloQXdzZ0FDQURPZ0F1UVFBTC9nRUJBMzlCQVNFREFrQWdBQzhCTUNJRVFRaHhEUUFnQUNrRElFSUFVaUVEQ3dKQUFrQWdBQzBBTGtVTkFFRUJJUVVnQUMwQUtVRUZSZzBCUVFFaEJTQUVRY0FBY1VVZ0EzRkJBVWNOQVF0QkFDRUZJQVJCd0FCeERRQkJBaUVGSUFSQi8vOERjU0lEUVFoeERRQUNRQ0FEUVlBRWNVVU5BQUpBSUFBdEFDaEJBVWNOQUNBQUxRQXRRUXB4RFFCQkJROExRUVFQQ3dKQUlBTkJJSEVOQUFKQUlBQXRBQ2hCQVVZTkFDQUFMd0V5UWYvL0EzRWlBRUdjZjJwQjVBQkpEUUFnQUVITUFVWU5BQ0FBUWJBQ1JnMEFRUVFoQlNBRVFTaHhSUTBDSUFOQmlBUnhRWUFFUmcwQ0MwRUFEd3RCQUVFRElBQXBBeUJRR3lFRkN5QUZDMklCQW45QkFDRUJBa0FnQUMwQUtFRUJSZzBBSUFBdkFUSkIvLzhEY1NJQ1FaeC9ha0hrQUVrTkFDQUNRY3dCUmcwQUlBSkJzQUpHRFFBZ0FDOEJNQ0lBUWNBQWNRMEFRUUVoQVNBQVFZZ0VjVUdBQkVZTkFDQUFRU2h4UlNFQkN5QUJDNmNCQVFOL0FrQUNRQUpBSUFBdEFDcEZEUUFnQUMwQUswVU5BRUVBSVFNZ0FDOEJNQ0lFUVFKeFJRMEJEQUlMUVFBaEF5QUFMd0V3SWdSQkFYRkZEUUVMUVFFaEF5QUFMUUFvUVFGR0RRQWdBQzhCTWtILy93TnhJZ1ZCbkg5cVFlUUFTUTBBSUFWQnpBRkdEUUFnQlVHd0FrWU5BQ0FFUWNBQWNRMEFRUUFoQXlBRVFZZ0VjVUdBQkVZTkFDQUVRU2h4UVFCSElRTUxJQUJCQURzQk1DQUFRUUE2QUM4Z0F3dVpBUUVDZndKQUFrQUNRQ0FBTFFBcVJRMEFJQUF0QUN0RkRRQkJBQ0VCSUFBdkFUQWlBa0VDY1VVTkFRd0NDMEVBSVFFZ0FDOEJNQ0lDUVFGeFJRMEJDMEVCSVFFZ0FDMEFLRUVCUmcwQUlBQXZBVEpCLy84RGNTSUFRWngvYWtIa0FFa05BQ0FBUWN3QlJnMEFJQUJCc0FKR0RRQWdBa0hBQUhFTkFFRUFJUUVnQWtHSUJIRkJnQVJHRFFBZ0FrRW9jVUVBUnlFQkN5QUJDMGtCQVhzZ0FFRVFhdjBNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ0lCL1FzREFDQUFJQUg5Q3dNQUlBQkJNR29nQWYwTEF3QWdBRUVnYWlBQi9Rc0RBQ0FBUWQwQk5nSWNRUUFMZXdFQmZ3SkFJQUFvQWd3aUF3MEFBa0FnQUNnQ0JFVU5BQ0FBSUFFMkFnUUxBa0FnQUNBQklBSVF4SUNBZ0FBaUF3MEFJQUFvQWd3UEN5QUFJQU0yQWh4QkFDRURJQUFvQWdRaUFVVU5BQ0FBSUFFZ0FpQUFLQUlJRVlHQWdJQUFBQ0lCUlEwQUlBQWdBallDRkNBQUlBRTJBZ3dnQVNFREN5QURDK1R6QVFNT2Z3TitCSDhqZ0lDQWdBQkJFR3NpQXlTQWdJQ0FBQ0FCSVFRZ0FTRUZJQUVoQmlBQklRY2dBU0VJSUFFaENTQUJJUW9nQVNFTElBRWhEQ0FCSVEwZ0FTRU9JQUVoRHdKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUNBQUtBSWNJaEJCZjJvTzNRSGFBUUhaQVFJREJBVUdCd2dKQ2dzTURRN1lBUThRMXdFUkV0WUJFeFFWRmhjWUdSb2I0QUhmQVJ3ZEh0VUJIeUFoSWlNa0pkUUJKaWNvS1NvckxOTUIwZ0V0THRFQjBBRXZNREV5TXpRMU5qYzRPVG83UEQwK1AwQkJRa05FUlViYkFVZElTVXJQQWM0QlM4MEJUTXdCVFU1UFVGRlNVMVJWVmxkWVdWcGJYRjFlWDJCaFltTmtaV1puYUdscWEyeHRibTl3Y1hKemRIVjJkM2g1ZW50OGZYNS9nQUdCQVlJQmd3R0VBWVVCaGdHSEFZZ0JpUUdLQVlzQmpBR05BWTRCandHUUFaRUJrZ0dUQVpRQmxRR1dBWmNCbUFHWkFab0Jtd0djQVowQm5nR2ZBYUFCb1FHaUFhTUJwQUdsQWFZQnB3R29BYWtCcWdHckFhd0JyUUd1QWE4QnNBR3hBYklCc3dHMEFiVUJ0Z0czQWNzQnlnRzRBY2tCdVFISUFib0J1d0c4QWIwQnZnRy9BY0FCd1FIQ0FjTUJ4QUhGQWNZQkFOd0JDMEVBSVJBTXhnRUxRUTRoRUF6RkFRdEJEU0VRRE1RQkMwRVBJUkFNd3dFTFFSQWhFQXpDQVF0QkV5RVFETUVCQzBFVUlSQU13QUVMUVJVaEVBeS9BUXRCRmlFUURMNEJDMEVYSVJBTXZRRUxRUmdoRUF5OEFRdEJHU0VRRExzQkMwRWFJUkFNdWdFTFFSc2hFQXk1QVF0QkhDRVFETGdCQzBFSUlSQU10d0VMUVIwaEVBeTJBUXRCSUNFUURMVUJDMEVmSVJBTXRBRUxRUWNoRUF5ekFRdEJJU0VRRExJQkMwRWlJUkFNc1FFTFFSNGhFQXl3QVF0Qkl5RVFESzhCQzBFU0lSQU1yZ0VMUVJFaEVBeXRBUXRCSkNFUURLd0JDMEVsSVJBTXF3RUxRU1loRUF5cUFRdEJKeUVRREtrQkMwSERBU0VRREtnQkMwRXBJUkFNcHdFTFFTc2hFQXltQVF0QkxDRVFES1VCQzBFdElSQU1wQUVMUVM0aEVBeWpBUXRCTHlFUURLSUJDMEhFQVNFUURLRUJDMEV3SVJBTW9BRUxRVFFoRUF5ZkFRdEJEQ0VRREo0QkMwRXhJUkFNblFFTFFUSWhFQXljQVF0Qk15RVFESnNCQzBFNUlSQU1tZ0VMUVRVaEVBeVpBUXRCeFFFaEVBeVlBUXRCQ3lFUURKY0JDMEU2SVJBTWxnRUxRVFloRUF5VkFRdEJDaUVRREpRQkMwRTNJUkFNa3dFTFFUZ2hFQXlTQVF0QlBDRVFESkVCQzBFN0lSQU1rQUVMUVQwaEVBeVBBUXRCQ1NFUURJNEJDMEVvSVJBTWpRRUxRVDRoRUF5TUFRdEJQeUVRRElzQkMwSEFBQ0VRRElvQkMwSEJBQ0VRRElrQkMwSENBQ0VRRElnQkMwSERBQ0VRREljQkMwSEVBQ0VRRElZQkMwSEZBQ0VRRElVQkMwSEdBQ0VRRElRQkMwRXFJUkFNZ3dFTFFjY0FJUkFNZ2dFTFFjZ0FJUkFNZ1FFTFFja0FJUkFNZ0FFTFFjb0FJUkFNZnd0Qnl3QWhFQXgrQzBITkFDRVFESDBMUWN3QUlSQU1mQXRCemdBaEVBeDdDMEhQQUNFUURIb0xRZEFBSVJBTWVRdEIwUUFoRUF4NEMwSFNBQ0VRREhjTFFkTUFJUkFNZGd0QjFBQWhFQXgxQzBIV0FDRVFESFFMUWRVQUlSQU1jd3RCQmlFUURISUxRZGNBSVJBTWNRdEJCU0VRREhBTFFkZ0FJUkFNYnd0QkJDRVFERzRMUWRrQUlSQU1iUXRCMmdBaEVBeHNDMEhiQUNFUURHc0xRZHdBSVJBTWFndEJBeUVRREdrTFFkMEFJUkFNYUF0QjNnQWhFQXhuQzBIZkFDRVFER1lMUWVFQUlSQU1aUXRCNEFBaEVBeGtDMEhpQUNFUURHTUxRZU1BSVJBTVlndEJBaUVRREdFTFFlUUFJUkFNWUF0QjVRQWhFQXhmQzBIbUFDRVFERjRMUWVjQUlSQU1YUXRCNkFBaEVBeGNDMEhwQUNFUURGc0xRZW9BSVJBTVdndEI2d0FoRUF4WkMwSHNBQ0VRREZnTFFlMEFJUkFNVnd0QjdnQWhFQXhXQzBIdkFDRVFERlVMUWZBQUlSQU1WQXRCOFFBaEVBeFRDMEh5QUNFUURGSUxRZk1BSVJBTVVRdEI5QUFoRUF4UUMwSDFBQ0VRREU4TFFmWUFJUkFNVGd0Qjl3QWhFQXhOQzBINEFDRVFERXdMUWZrQUlSQU1Td3RCK2dBaEVBeEtDMEg3QUNFUURFa0xRZndBSVJBTVNBdEIvUUFoRUF4SEMwSCtBQ0VRREVZTFFmOEFJUkFNUlF0QmdBRWhFQXhFQzBHQkFTRVFERU1MUVlJQklSQU1RZ3RCZ3dFaEVBeEJDMEdFQVNFUURFQUxRWVVCSVJBTVB3dEJoZ0VoRUF3K0MwR0hBU0VRREQwTFFZZ0JJUkFNUEF0QmlRRWhFQXc3QzBHS0FTRVFERG9MUVlzQklSQU1PUXRCakFFaEVBdzRDMEdOQVNFUUREY0xRWTRCSVJBTU5ndEJqd0VoRUF3MUMwR1FBU0VRRERRTFFaRUJJUkFNTXd0QmtnRWhFQXd5QzBHVEFTRVFEREVMUVpRQklSQU1NQXRCbFFFaEVBd3ZDMEdXQVNFUURDNExRWmNCSVJBTUxRdEJtQUVoRUF3c0MwR1pBU0VRRENzTFFab0JJUkFNS2d0Qm13RWhFQXdwQzBHY0FTRVFEQ2dMUVowQklSQU1Kd3RCbmdFaEVBd21DMEdmQVNFUURDVUxRYUFCSVJBTUpBdEJvUUVoRUF3akMwR2lBU0VRRENJTFFhTUJJUkFNSVF0QnBBRWhFQXdnQzBHbEFTRVFEQjhMUWFZQklSQU1IZ3RCcHdFaEVBd2RDMEdvQVNFUURCd0xRYWtCSVJBTUd3dEJxZ0VoRUF3YUMwR3JBU0VRREJrTFFhd0JJUkFNR0F0QnJRRWhFQXdYQzBHdUFTRVFEQllMUVFFaEVBd1ZDMEd2QVNFUURCUUxRYkFCSVJBTUV3dEJzUUVoRUF3U0MwR3pBU0VRREJFTFFiSUJJUkFNRUF0QnRBRWhFQXdQQzBHMUFTRVFEQTRMUWJZQklSQU1EUXRCdHdFaEVBd01DMEc0QVNFUURBc0xRYmtCSVJBTUNndEJ1Z0VoRUF3SkMwRzdBU0VRREFnTFFjWUJJUkFNQnd0QnZBRWhFQXdHQzBHOUFTRVFEQVVMUWI0QklSQU1CQXRCdndFaEVBd0RDMEhBQVNFUURBSUxRY0lCSVJBTUFRdEJ3UUVoRUFzRFFBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQkFPeHdFQUFRSURCQVVHQndnSkNnc01EUTRQRUJFU0V4UVZGaGNZR1JvYkhCNGZJQ0VqSlNnL1FFRkVSVVpIU0VsS1MweE5UMUJSVWxQZUExZFpXMXhkWUdKbFptZG9hV3ByYkcxdmNIRnljM1IxZG5kNGVYcDdmSDErZ0FHQ0FZVUJoZ0dIQVlrQml3R01BWTBCamdHUEFaQUJrUUdVQVpVQmxnR1hBWmdCbVFHYUFac0JuQUdkQVo0Qm53R2dBYUVCb2dHakFhUUJwUUdtQWFjQnFBR3BBYW9CcXdHc0FhMEJyZ0d2QWJBQnNRR3lBYk1CdEFHMUFiWUJ0d0c0QWJrQnVnRzdBYndCdlFHK0FiOEJ3QUhCQWNJQnd3SEVBY1VCeGdISEFjZ0J5UUhLQWNzQnpBSE5BYzRCendIUUFkRUIwZ0hUQWRRQjFRSFdBZGNCMkFIWkFkb0Iyd0hjQWQwQjNnSGdBZUVCNGdIakFlUUI1UUhtQWVjQjZBSHBBZW9CNndIc0FlMEI3Z0h2QWZBQjhRSHlBZk1CbVFLa0FyQUMvZ0wrQWdzZ0FTSUVJQUpIRGZNQlFkMEJJUkFNL3dNTElBRWlFQ0FDUnczZEFVSERBU0VRRFA0REN5QUJJZ0VnQWtjTmtBRkI5d0FoRUF6OUF3c2dBU0lCSUFKSERZWUJRZThBSVJBTS9BTUxJQUVpQVNBQ1J3MS9RZW9BSVJBTSt3TUxJQUVpQVNBQ1J3MTdRZWdBSVJBTStnTUxJQUVpQVNBQ1J3MTRRZVlBSVJBTStRTUxJQUVpQVNBQ1J3MGFRUmdoRUF6NEF3c2dBU0lCSUFKSERSUkJFaUVRRFBjREN5QUJJZ0VnQWtjTldVSEZBQ0VRRFBZREN5QUJJZ0VnQWtjTlNrRS9JUkFNOVFNTElBRWlBU0FDUncxSVFUd2hFQXowQXdzZ0FTSUJJQUpIRFVGQk1TRVFEUE1EQ3lBQUxRQXVRUUZHRGVzRERJY0NDeUFBSUFFaUFTQUNFTUNBZ0lBQVFRRkhEZVlCSUFCQ0FEY0RJQXpuQVFzZ0FDQUJJZ0VnQWhDMGdJQ0FBQ0lRRGVjQklBRWhBUXoxQWdzQ1FDQUJJZ0VnQWtjTkFFRUdJUkFNOEFNTElBQWdBVUVCYWlJQklBSVF1NENBZ0FBaUVBM29BU0FCSVFFTU1Rc2dBRUlBTndNZ1FSSWhFQXpWQXdzZ0FTSVFJQUpIRFN0QkhTRVFETzBEQ3dKQUlBRWlBU0FDUmcwQUlBRkJBV29oQVVFUUlSQU0xQU1MUVFjaEVBenNBd3NnQUVJQUlBQXBBeUFpRVNBQ0lBRWlFR3V0SWhKOUloTWdFeUFSVmhzM0F5QWdFU0FTVmlJVVJRM2xBVUVJSVJBTTZ3TUxBa0FnQVNJQklBSkdEUUFnQUVHSmdJQ0FBRFlDQ0NBQUlBRTJBZ1FnQVNFQlFSUWhFQXpTQXd0QkNTRVFET29EQ3lBQklRRWdBQ2tESUZBTjVBRWdBU0VCRFBJQ0N3SkFJQUVpQVNBQ1J3MEFRUXNoRUF6cEF3c2dBQ0FCUVFGcUlnRWdBaEMyZ0lDQUFDSVFEZVVCSUFFaEFRenlBZ3NnQUNBQklnRWdBaEM0Z0lDQUFDSVFEZVVCSUFFaEFRenlBZ3NnQUNBQklnRWdBaEM0Z0lDQUFDSVFEZVlCSUFFaEFRd05DeUFBSUFFaUFTQUNFTHFBZ0lBQUloQU41d0VnQVNFQkRQQUNDd0pBSUFFaUFTQUNSdzBBUVE4aEVBemxBd3NnQVMwQUFDSVFRVHRHRFFnZ0VFRU5SdzNvQVNBQlFRRnFJUUVNN3dJTElBQWdBU0lCSUFJUXVvQ0FnQUFpRUEzb0FTQUJJUUVNOGdJTEEwQUNRQ0FCTFFBQVFmQzFnSUFBYWkwQUFDSVFRUUZHRFFBZ0VFRUNSdzNyQVNBQUtBSUVJUkFnQUVFQU5nSUVJQUFnRUNBQlFRRnFJZ0VRdVlDQWdBQWlFQTNxQVNBQklRRU05QUlMSUFGQkFXb2lBU0FDUncwQUMwRVNJUkFNNGdNTElBQWdBU0lCSUFJUXVvQ0FnQUFpRUEzcEFTQUJJUUVNQ2dzZ0FTSUJJQUpIRFFaQkd5RVFET0FEQ3dKQUlBRWlBU0FDUncwQVFSWWhFQXpnQXdzZ0FFR0tnSUNBQURZQ0NDQUFJQUUyQWdRZ0FDQUJJQUlRdUlDQWdBQWlFQTNxQVNBQklRRkJJQ0VRRE1ZREN3SkFJQUVpQVNBQ1JnMEFBMEFDUUNBQkxRQUFRZkMzZ0lBQWFpMEFBQ0lRUVFKR0RRQUNRQ0FRUVg5cURnVGxBZXdCQU9zQjdBRUxJQUZCQVdvaEFVRUlJUkFNeUFNTElBRkJBV29pQVNBQ1J3MEFDMEVWSVJBTTN3TUxRUlVoRUF6ZUF3c0RRQUpBSUFFdEFBQkI4TG1BZ0FCcUxRQUFJaEJCQWtZTkFDQVFRWDlxRGdUZUFld0I0QUhyQWV3QkN5QUJRUUZxSWdFZ0FrY05BQXRCR0NFUUROMERDd0pBSUFFaUFTQUNSZzBBSUFCQmk0Q0FnQUEyQWdnZ0FDQUJOZ0lFSUFFaEFVRUhJUkFNeEFNTFFSa2hFQXpjQXdzZ0FVRUJhaUVCREFJTEFrQWdBU0lVSUFKSERRQkJHaUVRRE5zREN5QVVJUUVDUUNBVUxRQUFRWE5xRGhUZEF1NEM3Z0x1QXU0QzdnTHVBdTRDN2dMdUF1NEM3Z0x1QXU0QzdnTHVBdTRDN2dMdUFnRHVBZ3RCQUNFUUlBQkJBRFlDSENBQVFhK0xnSUFBTmdJUUlBQkJBallDRENBQUlCUkJBV28yQWhRTTJnTUxBa0FnQVMwQUFDSVFRVHRHRFFBZ0VFRU5SdzNvQVNBQlFRRnFJUUVNNVFJTElBRkJBV29oQVF0QklpRVFETDhEQ3dKQUlBRWlFQ0FDUncwQVFSd2hFQXpZQXd0Q0FDRVJJQkFoQVNBUUxRQUFRVkJxRGpmbkFlWUJBUUlEQkFVR0J3Z0FBQUFBQUFBQUNRb0xEQTBPQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFQRUJFU0V4UUFDMEVlSVJBTXZRTUxRZ0loRVF6bEFRdENBeUVSRE9RQkMwSUVJUkVNNHdFTFFnVWhFUXppQVF0Q0JpRVJET0VCQzBJSElSRU00QUVMUWdnaEVRemZBUXRDQ1NFUkRONEJDMElLSVJFTTNRRUxRZ3NoRVF6Y0FRdENEQ0VSRE5zQkMwSU5JUkVNMmdFTFFnNGhFUXpaQVF0Q0R5RVJETmdCQzBJS0lSRU0xd0VMUWdzaEVReldBUXRDRENFUkROVUJDMElOSVJFTTFBRUxRZzRoRVF6VEFRdENEeUVSRE5JQkMwSUFJUkVDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUlCQXRBQUJCVUdvT04rVUI1QUVBQVFJREJBVUdCK1lCNWdIbUFlWUI1Z0htQWVZQkNBa0tDd3dONWdIbUFlWUI1Z0htQWVZQjVnSG1BZVlCNWdIbUFlWUI1Z0htQWVZQjVnSG1BZVlCNWdIbUFlWUI1Z0htQWVZQjVnSG1BUTRQRUJFU0UrWUJDMElDSVJFTTVBRUxRZ01oRVF6akFRdENCQ0VSRE9JQkMwSUZJUkVNNFFFTFFnWWhFUXpnQVF0Q0J5RVJETjhCQzBJSUlSRU0zZ0VMUWdraEVRemRBUXRDQ2lFUkROd0JDMElMSVJFTTJ3RUxRZ3doRVF6YUFRdENEU0VSRE5rQkMwSU9JUkVNMkFFTFFnOGhFUXpYQVF0Q0NpRVJETllCQzBJTElSRU0xUUVMUWd3aEVRelVBUXRDRFNFUkROTUJDMElPSVJFTTBnRUxRZzhoRVF6UkFRc2dBRUlBSUFBcEF5QWlFU0FDSUFFaUVHdXRJaEo5SWhNZ0V5QVJWaHMzQXlBZ0VTQVNWaUlVUlEzU0FVRWZJUkFNd0FNTEFrQWdBU0lCSUFKR0RRQWdBRUdKZ0lDQUFEWUNDQ0FBSUFFMkFnUWdBU0VCUVNRaEVBeW5Bd3RCSUNFUURMOERDeUFBSUFFaUVDQUNFTDZBZ0lBQVFYOXFEZ1cyQVFERkFnSFJBZElCQzBFUklSQU1wQU1MSUFCQkFUb0FMeUFRSVFFTXV3TUxJQUVpQVNBQ1J3M1NBVUVrSVJBTXV3TUxJQUVpRFNBQ1J3MGVRY1lBSVJBTXVnTUxJQUFnQVNJQklBSVFzb0NBZ0FBaUVBM1VBU0FCSVFFTXRRRUxJQUVpRUNBQ1J3MG1RZEFBSVJBTXVBTUxBa0FnQVNJQklBSkhEUUJCS0NFUURMZ0RDeUFBUVFBMkFnUWdBRUdNZ0lDQUFEWUNDQ0FBSUFFZ0FSQ3hnSUNBQUNJUURkTUJJQUVoQVF6WUFRc0NRQ0FCSWhBZ0FrY05BRUVwSVJBTXR3TUxJQkF0QUFBaUFVRWdSZzBVSUFGQkNVY04wd0VnRUVFQmFpRUJEQlVMQWtBZ0FTSUJJQUpHRFFBZ0FVRUJhaUVCREJjTFFTb2hFQXkxQXdzQ1FDQUJJaEFnQWtjTkFFRXJJUkFNdFFNTEFrQWdFQzBBQUNJQlFRbEdEUUFnQVVFZ1J3M1ZBUXNnQUMwQUxFRUlSZzNUQVNBUUlRRU1rUU1MQWtBZ0FTSUJJQUpIRFFCQkxDRVFETFFEQ3lBQkxRQUFRUXBIRGRVQklBRkJBV29oQVF6SkFnc2dBU0lPSUFKSERkVUJRUzhoRUF5eUF3c0RRQUpBSUFFdEFBQWlFRUVnUmcwQUFrQWdFRUYyYWc0RUFOd0IzQUVBMmdFTElBRWhBUXpnQVFzZ0FVRUJhaUlCSUFKSERRQUxRVEVoRUF5eEF3dEJNaUVRSUFFaUZDQUNSZzJ3QXlBQ0lCUnJJQUFvQWdBaUFXb2hGU0FVSUFGclFRTnFJUllDUUFOQUlCUXRBQUFpRjBFZ2NpQVhJQmRCdjM5cVFmOEJjVUVhU1J0Qi93RnhJQUZCOEx1QWdBQnFMUUFBUncwQkFrQWdBVUVEUncwQVFRWWhBUXlXQXdzZ0FVRUJhaUVCSUJSQkFXb2lGQ0FDUncwQUN5QUFJQlUyQWdBTXNRTUxJQUJCQURZQ0FDQVVJUUVNMlFFTFFUTWhFQ0FCSWhRZ0FrWU5yd01nQWlBVWF5QUFLQUlBSWdGcUlSVWdGQ0FCYTBFSWFpRVdBa0FEUUNBVUxRQUFJaGRCSUhJZ0Z5QVhRYjkvYWtIL0FYRkJHa2tiUWY4QmNTQUJRZlM3Z0lBQWFpMEFBRWNOQVFKQUlBRkJDRWNOQUVFRklRRU1sUU1MSUFGQkFXb2hBU0FVUVFGcUloUWdBa2NOQUFzZ0FDQVZOZ0lBRExBREN5QUFRUUEyQWdBZ0ZDRUJETmdCQzBFMElSQWdBU0lVSUFKR0RhNERJQUlnRkdzZ0FDZ0NBQ0lCYWlFVklCUWdBV3RCQldvaEZnSkFBMEFnRkMwQUFDSVhRU0J5SUJjZ0YwRy9mMnBCL3dGeFFScEpHMEgvQVhFZ0FVSFF3b0NBQUdvdEFBQkhEUUVDUUNBQlFRVkhEUUJCQnlFQkRKUURDeUFCUVFGcUlRRWdGRUVCYWlJVUlBSkhEUUFMSUFBZ0ZUWUNBQXl2QXdzZ0FFRUFOZ0lBSUJRaEFRelhBUXNDUUNBQklnRWdBa1lOQUFOQUFrQWdBUzBBQUVHQXZvQ0FBR290QUFBaUVFRUJSZzBBSUJCQkFrWU5DaUFCSVFFTTNRRUxJQUZCQVdvaUFTQUNSdzBBQzBFd0lSQU1yZ01MUVRBaEVBeXRBd3NDUUNBQklnRWdBa1lOQUFOQUFrQWdBUzBBQUNJUVFTQkdEUUFnRUVGMmFnNEUyUUhhQWRvQjJRSGFBUXNnQVVFQmFpSUJJQUpIRFFBTFFUZ2hFQXl0QXd0Qk9DRVFES3dEQ3dOQUFrQWdBUzBBQUNJUVFTQkdEUUFnRUVFSlJ3MERDeUFCUVFGcUlnRWdBa2NOQUF0QlBDRVFES3NEQ3dOQUFrQWdBUzBBQUNJUVFTQkdEUUFDUUFKQUlCQkJkbW9PQk5vQkFRSGFBUUFMSUJCQkxFWU4yd0VMSUFFaEFRd0VDeUFCUVFGcUlnRWdBa2NOQUF0QlB5RVFES29EQ3lBQklRRU0yd0VMUWNBQUlSQWdBU0lVSUFKR0RhZ0RJQUlnRkdzZ0FDZ0NBQ0lCYWlFV0lCUWdBV3RCQm1vaEZ3SkFBMEFnRkMwQUFFRWdjaUFCUVlEQWdJQUFhaTBBQUVjTkFTQUJRUVpHRFk0RElBRkJBV29oQVNBVVFRRnFJaFFnQWtjTkFBc2dBQ0FXTmdJQURLa0RDeUFBUVFBMkFnQWdGQ0VCQzBFMklSQU1qZ01MQWtBZ0FTSVBJQUpIRFFCQndRQWhFQXluQXdzZ0FFR01nSUNBQURZQ0NDQUFJQTgyQWdRZ0R5RUJJQUF0QUN4QmYyb09CTTBCMVFIWEFka0Jod01MSUFGQkFXb2hBUXpNQVFzQ1FDQUJJZ0VnQWtZTkFBTkFBa0FnQVMwQUFDSVFRU0J5SUJBZ0VFRy9mMnBCL3dGeFFScEpHMEgvQVhFaUVFRUpSZzBBSUJCQklFWU5BQUpBQWtBQ1FBSkFJQkJCblg5cURoTUFBd01EQXdNREF3RURBd01EQXdNREF3TUNBd3NnQVVFQmFpRUJRVEVoRUF5UkF3c2dBVUVCYWlFQlFUSWhFQXlRQXdzZ0FVRUJhaUVCUVRNaEVBeVBBd3NnQVNFQkROQUJDeUFCUVFGcUlnRWdBa2NOQUF0Qk5TRVFES1VEQzBFMUlSQU1wQU1MQWtBZ0FTSUJJQUpHRFFBRFFBSkFJQUV0QUFCQmdMeUFnQUJxTFFBQVFRRkdEUUFnQVNFQkROTUJDeUFCUVFGcUlnRWdBa2NOQUF0QlBTRVFES1FEQzBFOUlSQU1vd01MSUFBZ0FTSUJJQUlRc0lDQWdBQWlFQTNXQVNBQklRRU1BUXNnRUVFQmFpRUJDMEU4SVJBTWh3TUxBa0FnQVNJQklBSkhEUUJCd2dBaEVBeWdBd3NDUUFOQUFrQWdBUzBBQUVGM2FnNFlBQUwrQXY0Q2hBUCtBdjRDL2dMK0F2NEMvZ0wrQXY0Qy9nTCtBdjRDL2dMK0F2NEMvZ0wrQXY0Qy9nSUEvZ0lMSUFGQkFXb2lBU0FDUncwQUMwSENBQ0VRREtBREN5QUJRUUZxSVFFZ0FDMEFMVUVCY1VVTnZRRWdBU0VCQzBFc0lSQU1oUU1MSUFFaUFTQUNSdzNUQVVIRUFDRVFESjBEQ3dOQUFrQWdBUzBBQUVHUXdJQ0FBR290QUFCQkFVWU5BQ0FCSVFFTXR3SUxJQUZCQVdvaUFTQUNSdzBBQzBIRkFDRVFESndEQ3lBTkxRQUFJaEJCSUVZTnN3RWdFRUU2UncyQkF5QUFLQUlFSVFFZ0FFRUFOZ0lFSUFBZ0FTQU5FSytBZ0lBQUlnRU4wQUVnRFVFQmFpRUJETE1DQzBISEFDRVFJQUVpRFNBQ1JnMmFBeUFDSUExcklBQW9BZ0FpQVdvaEZpQU5JQUZyUVFWcUlSY0RRQ0FOTFFBQUloUkJJSElnRkNBVVFiOS9ha0gvQVhGQkdra2JRZjhCY1NBQlFaRENnSUFBYWkwQUFFY05nQU1nQVVFRlJnMzBBaUFCUVFGcUlRRWdEVUVCYWlJTklBSkhEUUFMSUFBZ0ZqWUNBQXlhQXd0QnlBQWhFQ0FCSWcwZ0FrWU5tUU1nQWlBTmF5QUFLQUlBSWdGcUlSWWdEU0FCYTBFSmFpRVhBMEFnRFMwQUFDSVVRU0J5SUJRZ0ZFRy9mMnBCL3dGeFFScEpHMEgvQVhFZ0FVR1d3b0NBQUdvdEFBQkhEZjhDQWtBZ0FVRUpSdzBBUVFJaEFRejFBZ3NnQVVFQmFpRUJJQTFCQVdvaURTQUNSdzBBQ3lBQUlCWTJBZ0FNbVFNTEFrQWdBU0lOSUFKSERRQkJ5UUFoRUF5WkF3c0NRQUpBSUEwdEFBQWlBVUVnY2lBQklBRkJ2MzlxUWY4QmNVRWFTUnRCL3dGeFFaSi9hZzRIQUlBRGdBT0FBNEFEZ0FNQmdBTUxJQTFCQVdvaEFVRStJUkFNZ0FNTElBMUJBV29oQVVFL0lSQU0vd0lMUWNvQUlSQWdBU0lOSUFKR0RaY0RJQUlnRFdzZ0FDZ0NBQ0lCYWlFV0lBMGdBV3RCQVdvaEZ3TkFJQTB0QUFBaUZFRWdjaUFVSUJSQnYzOXFRZjhCY1VFYVNSdEIvd0Z4SUFGQm9NS0FnQUJxTFFBQVJ3MzlBaUFCUVFGR0RmQUNJQUZCQVdvaEFTQU5RUUZxSWcwZ0FrY05BQXNnQUNBV05nSUFESmNEQzBITEFDRVFJQUVpRFNBQ1JnMldBeUFDSUExcklBQW9BZ0FpQVdvaEZpQU5JQUZyUVE1cUlSY0RRQ0FOTFFBQUloUkJJSElnRkNBVVFiOS9ha0gvQVhGQkdra2JRZjhCY1NBQlFhTENnSUFBYWkwQUFFY04vQUlnQVVFT1JnM3dBaUFCUVFGcUlRRWdEVUVCYWlJTklBSkhEUUFMSUFBZ0ZqWUNBQXlXQXd0QnpBQWhFQ0FCSWcwZ0FrWU5sUU1nQWlBTmF5QUFLQUlBSWdGcUlSWWdEU0FCYTBFUGFpRVhBMEFnRFMwQUFDSVVRU0J5SUJRZ0ZFRy9mMnBCL3dGeFFScEpHMEgvQVhFZ0FVSEF3b0NBQUdvdEFBQkhEZnNDQWtBZ0FVRVBSdzBBUVFNaEFRenhBZ3NnQVVFQmFpRUJJQTFCQVdvaURTQUNSdzBBQ3lBQUlCWTJBZ0FNbFFNTFFjMEFJUkFnQVNJTklBSkdEWlFESUFJZ0RXc2dBQ2dDQUNJQmFpRVdJQTBnQVd0QkJXb2hGd05BSUEwdEFBQWlGRUVnY2lBVUlCUkJ2MzlxUWY4QmNVRWFTUnRCL3dGeElBRkIwTUtBZ0FCcUxRQUFSdzM2QWdKQUlBRkJCVWNOQUVFRUlRRU04QUlMSUFGQkFXb2hBU0FOUVFGcUlnMGdBa2NOQUFzZ0FDQVdOZ0lBREpRREN3SkFJQUVpRFNBQ1J3MEFRYzRBSVJBTWxBTUxBa0FDUUFKQUFrQWdEUzBBQUNJQlFTQnlJQUVnQVVHL2YycEIvd0Z4UVJwSkcwSC9BWEZCblg5cURoTUEvUUw5QXYwQy9RTDlBdjBDL1FMOUF2MEMvUUw5QXYwQ0FmMEMvUUw5QWdJRC9RSUxJQTFCQVdvaEFVSEJBQ0VRRFAwQ0N5QU5RUUZxSVFGQndnQWhFQXo4QWdzZ0RVRUJhaUVCUWNNQUlSQU0rd0lMSUExQkFXb2hBVUhFQUNFUURQb0NDd0pBSUFFaUFTQUNSZzBBSUFCQmpZQ0FnQUEyQWdnZ0FDQUJOZ0lFSUFFaEFVSEZBQ0VRRFBvQ0MwSFBBQ0VRREpJREN5QVFJUUVDUUFKQUlCQXRBQUJCZG1vT0JBR29BcWdDQUtnQ0N5QVFRUUZxSVFFTFFTY2hFQXo0QWdzQ1FDQUJJZ0VnQWtjTkFFSFJBQ0VRREpFREN3SkFJQUV0QUFCQklFWU5BQ0FCSVFFTWpRRUxJQUZCQVdvaEFTQUFMUUF0UVFGeFJRM0hBU0FCSVFFTWpBRUxJQUVpRnlBQ1J3M0lBVUhTQUNFUURJOERDMEhUQUNFUUlBRWlGQ0FDUmcyT0F5QUNJQlJySUFBb0FnQWlBV29oRmlBVUlBRnJRUUZxSVJjRFFDQVVMUUFBSUFGQjFzS0FnQUJxTFFBQVJ3M01BU0FCUVFGR0RjY0JJQUZCQVdvaEFTQVVRUUZxSWhRZ0FrY05BQXNnQUNBV05nSUFESTREQ3dKQUlBRWlBU0FDUncwQVFkVUFJUkFNamdNTElBRXRBQUJCQ2tjTnpBRWdBVUVCYWlFQkRNY0JDd0pBSUFFaUFTQUNSdzBBUWRZQUlSQU1qUU1MQWtBQ1FDQUJMUUFBUVhacURnUUF6UUhOQVFITkFRc2dBVUVCYWlFQkRNY0JDeUFCUVFGcUlRRkJ5Z0FoRUF6ekFnc2dBQ0FCSWdFZ0FoQ3VnSUNBQUNJUURjc0JJQUVoQVVITkFDRVFEUElDQ3lBQUxRQXBRU0pHRFlVRERLWUNDd0pBSUFFaUFTQUNSdzBBUWRzQUlSQU1pZ01MUVFBaEZFRUJJUmRCQVNFV1FRQWhFQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQ0FCTFFBQVFWQnFEZ3JVQWRNQkFBRUNBd1FGQmdqVkFRdEJBaUVRREFZTFFRTWhFQXdGQzBFRUlSQU1CQXRCQlNFUURBTUxRUVloRUF3Q0MwRUhJUkFNQVF0QkNDRVFDMEVBSVJkQkFDRVdRUUFoRkF6TUFRdEJDU0VRUVFFaEZFRUFJUmRCQUNFV0RNc0JDd0pBSUFFaUFTQUNSdzBBUWQwQUlSQU1pUU1MSUFFdEFBQkJMa2NOekFFZ0FVRUJhaUVCREtZQ0N5QUJJZ0VnQWtjTnpBRkIzd0FoRUF5SEF3c0NRQ0FCSWdFZ0FrWU5BQ0FBUVk2QWdJQUFOZ0lJSUFBZ0FUWUNCQ0FCSVFGQjBBQWhFQXp1QWd0QjRBQWhFQXlHQXd0QjRRQWhFQ0FCSWdFZ0FrWU5oUU1nQWlBQmF5QUFLQUlBSWhScUlSWWdBU0FVYTBFRGFpRVhBMEFnQVMwQUFDQVVRZUxDZ0lBQWFpMEFBRWNOelFFZ0ZFRURSZzNNQVNBVVFRRnFJUlFnQVVFQmFpSUJJQUpIRFFBTElBQWdGallDQUF5RkF3dEI0Z0FoRUNBQklnRWdBa1lOaEFNZ0FpQUJheUFBS0FJQUloUnFJUllnQVNBVWEwRUNhaUVYQTBBZ0FTMEFBQ0FVUWViQ2dJQUFhaTBBQUVjTnpBRWdGRUVDUmczT0FTQVVRUUZxSVJRZ0FVRUJhaUlCSUFKSERRQUxJQUFnRmpZQ0FBeUVBd3RCNHdBaEVDQUJJZ0VnQWtZTmd3TWdBaUFCYXlBQUtBSUFJaFJxSVJZZ0FTQVVhMEVEYWlFWEEwQWdBUzBBQUNBVVFlbkNnSUFBYWkwQUFFY055d0VnRkVFRFJnM09BU0FVUVFGcUlSUWdBVUVCYWlJQklBSkhEUUFMSUFBZ0ZqWUNBQXlEQXdzQ1FDQUJJZ0VnQWtjTkFFSGxBQ0VRRElNREN5QUFJQUZCQVdvaUFTQUNFS2lBZ0lBQUloQU56UUVnQVNFQlFkWUFJUkFNNlFJTEFrQWdBU0lCSUFKR0RRQURRQUpBSUFFdEFBQWlFRUVnUmcwQUFrQUNRQUpBSUJCQnVIOXFEZ3NBQWM4Qnp3SFBBYzhCendIUEFjOEJ6d0VDendFTElBRkJBV29oQVVIU0FDRVFETzBDQ3lBQlFRRnFJUUZCMHdBaEVBenNBZ3NnQVVFQmFpRUJRZFFBSVJBTTZ3SUxJQUZCQVdvaUFTQUNSdzBBQzBIa0FDRVFESUlEQzBIa0FDRVFESUVEQ3dOQUFrQWdBUzBBQUVId3dvQ0FBR290QUFBaUVFRUJSZzBBSUJCQmZtb09BODhCMEFIUkFkSUJDeUFCUVFGcUlnRWdBa2NOQUF0QjVnQWhFQXlBQXdzQ1FDQUJJZ0VnQWtZTkFDQUJRUUZxSVFFTUF3dEI1d0FoRUF6L0Fnc0RRQUpBSUFFdEFBQkI4TVNBZ0FCcUxRQUFJaEJCQVVZTkFBSkFJQkJCZm1vT0JOSUIwd0hVQVFEVkFRc2dBU0VCUWRjQUlSQU01d0lMSUFGQkFXb2lBU0FDUncwQUMwSG9BQ0VRRFA0Q0N3SkFJQUVpQVNBQ1J3MEFRZWtBSVJBTS9nSUxBa0FnQVMwQUFDSVFRWFpxRGhxNkFkVUIxUUc4QWRVQjFRSFZBZFVCMVFIVkFkVUIxUUhWQWRVQjFRSFZBZFVCMVFIVkFkVUIxUUhWQWNvQjFRSFZBUURUQVFzZ0FVRUJhaUVCQzBFR0lSQU00d0lMQTBBQ1FDQUJMUUFBUWZER2dJQUFhaTBBQUVFQlJnMEFJQUVoQVF5ZUFnc2dBVUVCYWlJQklBSkhEUUFMUWVvQUlSQU0rd0lMQWtBZ0FTSUJJQUpHRFFBZ0FVRUJhaUVCREFNTFFlc0FJUkFNK2dJTEFrQWdBU0lCSUFKSERRQkI3QUFoRUF6NkFnc2dBVUVCYWlFQkRBRUxBa0FnQVNJQklBSkhEUUJCN1FBaEVBejVBZ3NnQVVFQmFpRUJDMEVFSVJBTTNnSUxBa0FnQVNJVUlBSkhEUUJCN2dBaEVBejNBZ3NnRkNFQkFrQUNRQUpBSUJRdEFBQkI4TWlBZ0FCcUxRQUFRWDlxRGdmVUFkVUIxZ0VBbkFJQkF0Y0JDeUFVUVFGcUlRRU1DZ3NnRkVFQmFpRUJETTBCQzBFQUlSQWdBRUVBTmdJY0lBQkJtNUtBZ0FBMkFoQWdBRUVITmdJTUlBQWdGRUVCYWpZQ0ZBejJBZ3NDUUFOQUFrQWdBUzBBQUVId3lJQ0FBR290QUFBaUVFRUVSZzBBQWtBQ1FDQVFRWDlxRGdmU0FkTUIxQUhaQVFBRUFka0JDeUFCSVFGQjJnQWhFQXpnQWdzZ0FVRUJhaUVCUWR3QUlSQU0zd0lMSUFGQkFXb2lBU0FDUncwQUMwSHZBQ0VRRFBZQ0N5QUJRUUZxSVFFTXl3RUxBa0FnQVNJVUlBSkhEUUJCOEFBaEVBejFBZ3NnRkMwQUFFRXZSdzNVQVNBVVFRRnFJUUVNQmdzQ1FDQUJJaFFnQWtjTkFFSHhBQ0VRRFBRQ0N3SkFJQlF0QUFBaUFVRXZSdzBBSUJSQkFXb2hBVUhkQUNFUUROc0NDeUFCUVhacUlnUkJGa3NOMHdGQkFTQUVkRUdKZ0lBQ2NVVU4wd0VNeWdJTEFrQWdBU0lCSUFKR0RRQWdBVUVCYWlFQlFkNEFJUkFNMmdJTFFmSUFJUkFNOGdJTEFrQWdBU0lVSUFKSERRQkI5QUFoRUF6eUFnc2dGQ0VCQWtBZ0ZDMEFBRUh3eklDQUFHb3RBQUJCZjJvT0E4a0NsQUlBMUFFTFFlRUFJUkFNMkFJTEFrQWdBU0lVSUFKR0RRQURRQUpBSUJRdEFBQkI4TXFBZ0FCcUxRQUFJZ0ZCQTBZTkFBSkFJQUZCZjJvT0Fzc0NBTlVCQ3lBVUlRRkIzd0FoRUF6YUFnc2dGRUVCYWlJVUlBSkhEUUFMUWZNQUlSQU04UUlMUWZNQUlSQU04QUlMQWtBZ0FTSUJJQUpHRFFBZ0FFR1BnSUNBQURZQ0NDQUFJQUUyQWdRZ0FTRUJRZUFBSVJBTTF3SUxRZlVBSVJBTTd3SUxBa0FnQVNJQklBSkhEUUJCOWdBaEVBenZBZ3NnQUVHUGdJQ0FBRFlDQ0NBQUlBRTJBZ1FnQVNFQkMwRURJUkFNMUFJTEEwQWdBUzBBQUVFZ1J3M0RBaUFCUVFGcUlnRWdBa2NOQUF0Qjl3QWhFQXpzQWdzQ1FDQUJJZ0VnQWtjTkFFSDRBQ0VRRE93Q0N5QUJMUUFBUVNCSERjNEJJQUZCQVdvaEFRenZBUXNnQUNBQklnRWdBaENzZ0lDQUFDSVFEYzRCSUFFaEFReU9BZ3NDUUNBQklnUWdBa2NOQUVINkFDRVFET29DQ3lBRUxRQUFRY3dBUnczUkFTQUVRUUZxSVFGQkV5RVFETThCQ3dKQUlBRWlCQ0FDUncwQVFmc0FJUkFNNlFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJCV29oRUFOQUlBUXRBQUFnQVVId3pvQ0FBR290QUFCSERkQUJJQUZCQlVZTnpnRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkIrd0FoRUF6b0Fnc0NRQ0FCSWdRZ0FrY05BRUg4QUNFUURPZ0NDd0pBQWtBZ0JDMEFBRUc5ZjJvT0RBRFJBZEVCMFFIUkFkRUIwUUhSQWRFQjBRSFJBUUhSQVFzZ0JFRUJhaUVCUWVZQUlSQU16d0lMSUFSQkFXb2hBVUhuQUNFUURNNENDd0pBSUFFaUJDQUNSdzBBUWYwQUlSQU01d0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFtb2hFQUpBQTBBZ0JDMEFBQ0FCUWUzUGdJQUFhaTBBQUVjTnp3RWdBVUVDUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFmMEFJUkFNNXdJTElBQkJBRFlDQUNBUVFRRnFJUUZCRUNFUURNd0JDd0pBSUFFaUJDQUNSdzBBUWY0QUlSQU01Z0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkJXb2hFQUpBQTBBZ0JDMEFBQ0FCUWZiT2dJQUFhaTBBQUVjTnpnRWdBVUVGUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFmNEFJUkFNNWdJTElBQkJBRFlDQUNBUVFRRnFJUUZCRmlFUURNc0JDd0pBSUFFaUJDQUNSdzBBUWY4QUlSQU01UUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkEyb2hFQUpBQTBBZ0JDMEFBQ0FCUWZ6T2dJQUFhaTBBQUVjTnpRRWdBVUVEUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFmOEFJUkFNNVFJTElBQkJBRFlDQUNBUVFRRnFJUUZCQlNFUURNb0JDd0pBSUFFaUJDQUNSdzBBUVlBQklSQU01QUlMSUFRdEFBQkIyUUJIRGNzQklBUkJBV29oQVVFSUlSQU15UUVMQWtBZ0FTSUVJQUpIRFFCQmdRRWhFQXpqQWdzQ1FBSkFJQVF0QUFCQnNuOXFEZ01BekFFQnpBRUxJQVJCQVdvaEFVSHJBQ0VRRE1vQ0N5QUVRUUZxSVFGQjdBQWhFQXpKQWdzQ1FDQUJJZ1FnQWtjTkFFR0NBU0VRRE9JQ0N3SkFBa0FnQkMwQUFFRzRmMm9PQ0FETEFjc0J5d0hMQWNzQnl3RUJ5d0VMSUFSQkFXb2hBVUhxQUNFUURNa0NDeUFFUVFGcUlRRkI3UUFoRUF6SUFnc0NRQ0FCSWdRZ0FrY05BRUdEQVNFUURPRUNDeUFDSUFScklBQW9BZ0FpQVdvaEVDQUVJQUZyUVFKcUlSUUNRQU5BSUFRdEFBQWdBVUdBejRDQUFHb3RBQUJIRGNrQklBRkJBa1lOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdFRFlDQUVHREFTRVFET0VDQzBFQUlSQWdBRUVBTmdJQUlCUkJBV29oQVF6R0FRc0NRQ0FCSWdRZ0FrY05BRUdFQVNFUURPQUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFScUlSQUNRQU5BSUFRdEFBQWdBVUdEejRDQUFHb3RBQUJIRGNnQklBRkJCRVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHRUFTRVFET0FDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRU01oRUF6RkFRc0NRQ0FCSWdRZ0FrY05BRUdGQVNFUUROOENDd0pBQWtBZ0JDMEFBRUcwZjJvT0NBRElBY2dCeUFISUFjZ0J5QUVCeUFFTElBUkJBV29oQVVIdkFDRVFETVlDQ3lBRVFRRnFJUUZCOEFBaEVBekZBZ3NDUUNBQklnUWdBa2NOQUVHR0FTRVFETjRDQ3lBRUxRQUFRY1VBUnczRkFTQUVRUUZxSVFFTWd3SUxBa0FnQVNJRUlBSkhEUUJCaHdFaEVBemRBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFRGFpRVFBa0FEUUNBRUxRQUFJQUZCaU0rQWdBQnFMUUFBUnczRkFTQUJRUU5HRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQmh3RWhFQXpkQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUV0SVJBTXdnRUxBa0FnQVNJRUlBSkhEUUJCaUFFaEVBemNBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFSWFpRVFBa0FEUUNBRUxRQUFJQUZCME0rQWdBQnFMUUFBUnczRUFTQUJRUWhHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQmlBRWhFQXpjQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVwSVJBTXdRRUxBa0FnQVNJQklBSkhEUUJCaVFFaEVBemJBZ3RCQVNFUUlBRXRBQUJCM3dCSERjQUJJQUZCQVdvaEFReUJBZ3NDUUNBQklnUWdBa2NOQUVHS0FTRVFETm9DQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRRnFJUkFEUUNBRUxRQUFJQUZCak0rQWdBQnFMUUFBUnczQkFTQUJRUUZHRGE4Q0lBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFZb0JJUkFNMlFJTEFrQWdBU0lFSUFKSERRQkJpd0VoRUF6WkFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVDYWlFUUFrQURRQ0FFTFFBQUlBRkJqcytBZ0FCcUxRQUFSdzNCQVNBQlFRSkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCaXdFaEVBelpBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRUNJUkFNdmdFTEFrQWdBU0lFSUFKSERRQkJqQUVoRUF6WUFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVCYWlFUUFrQURRQ0FFTFFBQUlBRkI4TStBZ0FCcUxRQUFSdzNBQVNBQlFRRkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCakFFaEVBellBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRWZJUkFNdlFFTEFrQWdBU0lFSUFKSERRQkJqUUVoRUF6WEFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVCYWlFUUFrQURRQ0FFTFFBQUlBRkI4cytBZ0FCcUxRQUFSdzIvQVNBQlFRRkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCalFFaEVBelhBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRUpJUkFNdkFFTEFrQWdBU0lFSUFKSERRQkJqZ0VoRUF6V0Fnc0NRQUpBSUFRdEFBQkJ0MzlxRGdjQXZ3Ry9BYjhCdndHL0FRRy9BUXNnQkVFQmFpRUJRZmdBSVJBTXZRSUxJQVJCQVdvaEFVSDVBQ0VRREx3Q0N3SkFJQUVpQkNBQ1J3MEFRWThCSVJBTTFRSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQldvaEVBSkFBMEFnQkMwQUFDQUJRWkhQZ0lBQWFpMEFBRWNOdlFFZ0FVRUZSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVk4QklSQU0xUUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJHQ0VRRExvQkN3SkFJQUVpQkNBQ1J3MEFRWkFCSVJBTTFBSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQW1vaEVBSkFBMEFnQkMwQUFDQUJRWmZQZ0lBQWFpMEFBRWNOdkFFZ0FVRUNSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVpBQklSQU0xQUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJGeUVRRExrQkN3SkFJQUVpQkNBQ1J3MEFRWkVCSVJBTTB3SUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQm1vaEVBSkFBMEFnQkMwQUFDQUJRWnJQZ0lBQWFpMEFBRWNOdXdFZ0FVRUdSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVpFQklSQU0wd0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJGU0VRRExnQkN3SkFJQUVpQkNBQ1J3MEFRWklCSVJBTTBnSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQldvaEVBSkFBMEFnQkMwQUFDQUJRYUhQZ0lBQWFpMEFBRWNOdWdFZ0FVRUZSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVpJQklSQU0wZ0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJIaUVRRExjQkN3SkFJQUVpQkNBQ1J3MEFRWk1CSVJBTTBRSUxJQVF0QUFCQnpBQkhEYmdCSUFSQkFXb2hBVUVLSVJBTXRnRUxBa0FnQkNBQ1J3MEFRWlFCSVJBTTBBSUxBa0FDUUNBRUxRQUFRYjkvYWc0UEFMa0J1UUc1QWJrQnVRRzVBYmtCdVFHNUFia0J1UUc1QWJrQkFia0JDeUFFUVFGcUlRRkIvZ0FoRUF5M0Fnc2dCRUVCYWlFQlFmOEFJUkFNdGdJTEFrQWdCQ0FDUncwQVFaVUJJUkFNendJTEFrQUNRQ0FFTFFBQVFiOS9hZzREQUxnQkFiZ0JDeUFFUVFGcUlRRkIvUUFoRUF5MkFnc2dCRUVCYWlFRVFZQUJJUkFNdFFJTEFrQWdCQ0FDUncwQVFaWUJJUkFNemdJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBV29oRUFKQUEwQWdCQzBBQUNBQlFhZlBnSUFBYWkwQUFFY050Z0VnQVVFQlJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWllCSVJBTXpnSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkN5RVFETE1CQ3dKQUlBUWdBa2NOQUVHWEFTRVFETTBDQ3dKQUFrQUNRQUpBSUFRdEFBQkJVMm9PSXdDNEFiZ0J1QUc0QWJnQnVBRzRBYmdCdUFHNEFiZ0J1QUc0QWJnQnVBRzRBYmdCdUFHNEFiZ0J1QUc0QWJnQkFiZ0J1QUc0QWJnQnVBRUN1QUc0QWJnQkE3Z0JDeUFFUVFGcUlRRkIrd0FoRUF5MkFnc2dCRUVCYWlFQlFmd0FJUkFNdFFJTElBUkJBV29oQkVHQkFTRVFETFFDQ3lBRVFRRnFJUVJCZ2dFaEVBeXpBZ3NDUUNBRUlBSkhEUUJCbUFFaEVBek1BZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFRWFpRVFBa0FEUUNBRUxRQUFJQUZCcWMrQWdBQnFMUUFBUncyMEFTQUJRUVJHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQm1BRWhFQXpNQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVaSVJBTXNRRUxBa0FnQkNBQ1J3MEFRWmtCSVJBTXl3SUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQldvaEVBSkFBMEFnQkMwQUFDQUJRYTdQZ0lBQWFpMEFBRWNOc3dFZ0FVRUZSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVprQklSQU15d0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJCaUVRRExBQkN3SkFJQVFnQWtjTkFFR2FBU0VRRE1vQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUZxSVJBQ1FBTkFJQVF0QUFBZ0FVRzB6NENBQUdvdEFBQkhEYklCSUFGQkFVWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdhQVNFUURNb0NDeUFBUVFBMkFnQWdFRUVCYWlFQlFSd2hFQXl2QVFzQ1FDQUVJQUpIRFFCQm13RWhFQXpKQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUJhaUVRQWtBRFFDQUVMUUFBSUFGQnRzK0FnQUJxTFFBQVJ3MnhBU0FCUVFGR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJtd0VoRUF6SkFnc2dBRUVBTmdJQUlCQkJBV29oQVVFbklSQU1yZ0VMQWtBZ0JDQUNSdzBBUVp3QklSQU15QUlMQWtBQ1FDQUVMUUFBUWF4L2FnNENBQUd4QVFzZ0JFRUJhaUVFUVlZQklSQU1yd0lMSUFSQkFXb2hCRUdIQVNFUURLNENDd0pBSUFRZ0FrY05BRUdkQVNFUURNY0NDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFGcUlSQUNRQU5BSUFRdEFBQWdBVUc0ejRDQUFHb3RBQUJIRGE4QklBRkJBVVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHZEFTRVFETWNDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRU1loRUF5c0FRc0NRQ0FFSUFKSERRQkJuZ0VoRUF6R0Fnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVCYWlFUUFrQURRQ0FFTFFBQUlBRkJ1cytBZ0FCcUxRQUFSdzJ1QVNBQlFRRkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCbmdFaEVBekdBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRURJUkFNcXdFTEFrQWdCQ0FDUncwQVFaOEJJUkFNeFFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBbW9oRUFKQUEwQWdCQzBBQUNBQlFlM1BnSUFBYWkwQUFFY05yUUVnQVVFQ1JnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWjhCSVJBTXhRSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkRDRVFES29CQ3dKQUlBUWdBa2NOQUVHZ0FTRVFETVFDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRTnFJUkFDUUFOQUlBUXRBQUFnQVVHOHo0Q0FBR290QUFCSERhd0JJQUZCQTBZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR2dBU0VRRE1RQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVEwaEVBeXBBUXNDUUNBRUlBSkhEUUJCb1FFaEVBekRBZ3NDUUFKQUlBUXRBQUJCdW45cURnc0FyQUdzQWF3QnJBR3NBYXdCckFHc0Fhd0JBYXdCQ3lBRVFRRnFJUVJCaXdFaEVBeXFBZ3NnQkVFQmFpRUVRWXdCSVJBTXFRSUxBa0FnQkNBQ1J3MEFRYUlCSVJBTXdnSUxJQVF0QUFCQjBBQkhEYWtCSUFSQkFXb2hCQXpwQVFzQ1FDQUVJQUpIRFFCQm93RWhFQXpCQWdzQ1FBSkFJQVF0QUFCQnQzOXFEZ2NCcWdHcUFhb0JxZ0dxQVFDcUFRc2dCRUVCYWlFRVFZNEJJUkFNcUFJTElBUkJBV29oQVVFaUlSQU1wZ0VMQWtBZ0JDQUNSdzBBUWFRQklSQU13QUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFXb2hFQUpBQTBBZ0JDMEFBQ0FCUWNEUGdJQUFhaTBBQUVjTnFBRWdBVUVCUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFhUUJJUkFNd0FJTElBQkJBRFlDQUNBUVFRRnFJUUZCSFNFUURLVUJDd0pBSUFRZ0FrY05BRUdsQVNFUURMOENDd0pBQWtBZ0JDMEFBRUd1ZjJvT0F3Q29BUUdvQVFzZ0JFRUJhaUVFUVpBQklSQU1wZ0lMSUFSQkFXb2hBVUVFSVJBTXBBRUxBa0FnQkNBQ1J3MEFRYVlCSVJBTXZnSUxBa0FDUUFKQUFrQUNRQ0FFTFFBQVFiOS9hZzRWQUtvQnFnR3FBYW9CcWdHcUFhb0JxZ0dxQWFvQkFhb0JxZ0VDcWdHcUFRT3FBYW9CQktvQkN5QUVRUUZxSVFSQmlBRWhFQXlvQWdzZ0JFRUJhaUVFUVlrQklSQU1wd0lMSUFSQkFXb2hCRUdLQVNFUURLWUNDeUFFUVFGcUlRUkJqd0VoRUF5bEFnc2dCRUVCYWlFRVFaRUJJUkFNcEFJTEFrQWdCQ0FDUncwQVFhY0JJUkFNdlFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBbW9oRUFKQUEwQWdCQzBBQUNBQlFlM1BnSUFBYWkwQUFFY05wUUVnQVVFQ1JnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRYWNCSVJBTXZRSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkVTRVFES0lCQ3dKQUlBUWdBa2NOQUVHb0FTRVFETHdDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRSnFJUkFDUUFOQUlBUXRBQUFnQVVIQ3o0Q0FBR290QUFCSERhUUJJQUZCQWtZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR29BU0VRREx3Q0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVN3aEVBeWhBUXNDUUNBRUlBSkhEUUJCcVFFaEVBeTdBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFRWFpRVFBa0FEUUNBRUxRQUFJQUZCeGMrQWdBQnFMUUFBUncyakFTQUJRUVJHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQnFRRWhFQXk3QWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVySVJBTW9BRUxBa0FnQkNBQ1J3MEFRYW9CSVJBTXVnSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQW1vaEVBSkFBMEFnQkMwQUFDQUJRY3JQZ0lBQWFpMEFBRWNOb2dFZ0FVRUNSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWFvQklSQU11Z0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJGQ0VRREo4QkN3SkFJQVFnQWtjTkFFR3JBU0VRRExrQ0N3SkFBa0FDUUFKQUlBUXRBQUJCdm45cURnOEFBUUtrQWFRQnBBR2tBYVFCcEFHa0FhUUJwQUdrQWFRQkE2UUJDeUFFUVFGcUlRUkJrd0VoRUF5aUFnc2dCRUVCYWlFRVFaUUJJUkFNb1FJTElBUkJBV29oQkVHVkFTRVFES0FDQ3lBRVFRRnFJUVJCbGdFaEVBeWZBZ3NDUUNBRUlBSkhEUUJCckFFaEVBeTRBZ3NnQkMwQUFFSEZBRWNObndFZ0JFRUJhaUVFRE9BQkN3SkFJQVFnQWtjTkFFR3RBU0VRRExjQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUpxSVJBQ1FBTkFJQVF0QUFBZ0FVSE56NENBQUdvdEFBQkhEWjhCSUFGQkFrWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUd0QVNFUURMY0NDeUFBUVFBMkFnQWdFRUVCYWlFQlFRNGhFQXljQVFzQ1FDQUVJQUpIRFFCQnJnRWhFQXkyQWdzZ0JDMEFBRUhRQUVjTm5RRWdCRUVCYWlFQlFTVWhFQXliQVFzQ1FDQUVJQUpIRFFCQnJ3RWhFQXkxQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUlhaUVRQWtBRFFDQUVMUUFBSUFGQjBNK0FnQUJxTFFBQVJ3MmRBU0FCUVFoR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJyd0VoRUF5MUFnc2dBRUVBTmdJQUlCQkJBV29oQVVFcUlSQU1tZ0VMQWtBZ0JDQUNSdzBBUWJBQklSQU10QUlMQWtBQ1FDQUVMUUFBUWF0L2FnNExBSjBCblFHZEFaMEJuUUdkQVowQm5RR2RBUUdkQVFzZ0JFRUJhaUVFUVpvQklSQU1td0lMSUFSQkFXb2hCRUdiQVNFUURKb0NDd0pBSUFRZ0FrY05BRUd4QVNFUURMTUNDd0pBQWtBZ0JDMEFBRUcvZjJvT0ZBQ2NBWndCbkFHY0Fad0JuQUdjQVp3Qm5BR2NBWndCbkFHY0Fad0JuQUdjQVp3Qm5BRUJuQUVMSUFSQkFXb2hCRUdaQVNFUURKb0NDeUFFUVFGcUlRUkJuQUVoRUF5WkFnc0NRQ0FFSUFKSERRQkJzZ0VoRUF5eUFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVEYWlFUUFrQURRQ0FFTFFBQUlBRkIyYytBZ0FCcUxRQUFSdzJhQVNBQlFRTkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCc2dFaEVBeXlBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRWhJUkFNbHdFTEFrQWdCQ0FDUncwQVFiTUJJUkFNc1FJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJCbW9oRUFKQUEwQWdCQzBBQUNBQlFkM1BnSUFBYWkwQUFFY05tUUVnQVVFR1JnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRYk1CSVJBTXNRSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkdpRVFESllCQ3dKQUlBUWdBa2NOQUVHMEFTRVFETEFDQ3dKQUFrQUNRQ0FFTFFBQVFidC9hZzRSQUpvQm1nR2FBWm9CbWdHYUFab0JtZ0dhQVFHYUFab0JtZ0dhQVpvQkFwb0JDeUFFUVFGcUlRUkJuUUVoRUF5WUFnc2dCRUVCYWlFRVFaNEJJUkFNbHdJTElBUkJBV29oQkVHZkFTRVFESllDQ3dKQUlBUWdBa2NOQUVHMUFTRVFESzhDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRVnFJUkFDUUFOQUlBUXRBQUFnQVVIa3o0Q0FBR290QUFCSERaY0JJQUZCQlVZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFRzFBU0VRREs4Q0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVNnaEVBeVVBUXNDUUNBRUlBSkhEUUJCdGdFaEVBeXVBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFQ2FpRVFBa0FEUUNBRUxRQUFJQUZCNnMrQWdBQnFMUUFBUncyV0FTQUJRUUpHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQnRnRWhFQXl1QWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVISVJBTWt3RUxBa0FnQkNBQ1J3MEFRYmNCSVJBTXJRSUxBa0FDUUNBRUxRQUFRYnQvYWc0T0FKWUJsZ0dXQVpZQmxnR1dBWllCbGdHV0FaWUJsZ0dXQVFHV0FRc2dCRUVCYWlFRVFhRUJJUkFNbEFJTElBUkJBV29oQkVHaUFTRVFESk1DQ3dKQUlBUWdBa2NOQUVHNEFTRVFES3dDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRSnFJUkFDUUFOQUlBUXRBQUFnQVVIdHo0Q0FBR290QUFCSERaUUJJQUZCQWtZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFRzRBU0VRREt3Q0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVJJaEVBeVJBUXNDUUNBRUlBSkhEUUJCdVFFaEVBeXJBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFQmFpRVFBa0FEUUNBRUxRQUFJQUZCOE0rQWdBQnFMUUFBUncyVEFTQUJRUUZHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQnVRRWhFQXlyQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVnSVJBTWtBRUxBa0FnQkNBQ1J3MEFRYm9CSVJBTXFnSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQVdvaEVBSkFBMEFnQkMwQUFDQUJRZkxQZ0lBQWFpMEFBRWNOa2dFZ0FVRUJSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWJvQklSQU1xZ0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJEeUVRREk4QkN3SkFJQVFnQWtjTkFFRzdBU0VRREtrQ0N3SkFBa0FnQkMwQUFFRzNmMm9PQndDU0FaSUJrZ0dTQVpJQkFaSUJDeUFFUVFGcUlRUkJwUUVoRUF5UUFnc2dCRUVCYWlFRVFhWUJJUkFNandJTEFrQWdCQ0FDUncwQVFid0JJUkFNcUFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJCMm9oRUFKQUEwQWdCQzBBQUNBQlFmVFBnSUFBYWkwQUFFY05rQUVnQVVFSFJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRYndCSVJBTXFBSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkd5RVFESTBCQ3dKQUlBUWdBa2NOQUVHOUFTRVFES2NDQ3dKQUFrQUNRQ0FFTFFBQVFiNS9hZzRTQUpFQmtRR1JBWkVCa1FHUkFaRUJrUUdSQVFHUkFaRUJrUUdSQVpFQmtRRUNrUUVMSUFSQkFXb2hCRUdrQVNFUURJOENDeUFFUVFGcUlRUkJwd0VoRUF5T0Fnc2dCRUVCYWlFRVFhZ0JJUkFNalFJTEFrQWdCQ0FDUncwQVFiNEJJUkFNcGdJTElBUXRBQUJCemdCSERZMEJJQVJCQVdvaEJBelBBUXNDUUNBRUlBSkhEUUJCdndFaEVBeWxBZ3NDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FDQUVMUUFBUWI5L2FnNFZBQUVDQTV3QkJBVUduQUdjQVp3QkJ3Z0pDZ3VjQVF3TkRnK2NBUXNnQkVFQmFpRUJRZWdBSVJBTW1nSUxJQVJCQVdvaEFVSHBBQ0VRREprQ0N5QUVRUUZxSVFGQjdnQWhFQXlZQWdzZ0JFRUJhaUVCUWZJQUlSQU1sd0lMSUFSQkFXb2hBVUh6QUNFUURKWUNDeUFFUVFGcUlRRkI5Z0FoRUF5VkFnc2dCRUVCYWlFQlFmY0FJUkFNbEFJTElBUkJBV29oQVVINkFDRVFESk1DQ3lBRVFRRnFJUVJCZ3dFaEVBeVNBZ3NnQkVFQmFpRUVRWVFCSVJBTWtRSUxJQVJCQVdvaEJFR0ZBU0VRREpBQ0N5QUVRUUZxSVFSQmtnRWhFQXlQQWdzZ0JFRUJhaUVFUVpnQklSQU1qZ0lMSUFSQkFXb2hCRUdnQVNFUURJMENDeUFFUVFGcUlRUkJvd0VoRUF5TUFnc2dCRUVCYWlFRVFhb0JJUkFNaXdJTEFrQWdCQ0FDUmcwQUlBQkJrSUNBZ0FBMkFnZ2dBQ0FFTmdJRVFhc0JJUkFNaXdJTFFjQUJJUkFNb3dJTElBQWdCU0FDRUtxQWdJQUFJZ0VOaXdFZ0JTRUJERndMQWtBZ0JpQUNSZzBBSUFaQkFXb2hCUXlOQVF0QndnRWhFQXloQWdzRFFBSkFJQkF0QUFCQmRtb09CSXdCQUFDUEFRQUxJQkJCQVdvaUVDQUNSdzBBQzBIREFTRVFES0FDQ3dKQUlBY2dBa1lOQUNBQVFaR0FnSUFBTmdJSUlBQWdCellDQkNBSElRRkJBU0VRREljQ0MwSEVBU0VRREo4Q0N3SkFJQWNnQWtjTkFFSEZBU0VRREo4Q0N3SkFBa0FnQnkwQUFFRjJhZzRFQWM0QnpnRUF6Z0VMSUFkQkFXb2hCZ3lOQVFzZ0IwRUJhaUVGRElrQkN3SkFJQWNnQWtjTkFFSEdBU0VRREo0Q0N3SkFBa0FnQnkwQUFFRjJhZzRYQVk4Qmp3RUJqd0dQQVk4Qmp3R1BBWThCandHUEFZOEJqd0dQQVk4Qmp3R1BBWThCandHUEFZOEJBSThCQ3lBSFFRRnFJUWNMUWJBQklSQU1oQUlMQWtBZ0NDQUNSdzBBUWNnQklSQU1uUUlMSUFndEFBQkJJRWNOalFFZ0FFRUFPd0V5SUFoQkFXb2hBVUd6QVNFUURJTUNDeUFCSVJjQ1FBTkFJQmNpQnlBQ1JnMEJJQWN0QUFCQlVHcEIvd0Z4SWhCQkNrOE56QUVDUUNBQUx3RXlJaFJCbVROTERRQWdBQ0FVUVFwc0loUTdBVElnRUVILy93TnpJQlJCL3Y4RGNVa05BQ0FIUVFGcUlSY2dBQ0FVSUJCcUloQTdBVElnRUVILy93TnhRZWdIU1EwQkN3dEJBQ0VRSUFCQkFEWUNIQ0FBUWNHSmdJQUFOZ0lRSUFCQkRUWUNEQ0FBSUFkQkFXbzJBaFFNbkFJTFFjY0JJUkFNbXdJTElBQWdDQ0FDRUs2QWdJQUFJaEJGRGNvQklCQkJGVWNOakFFZ0FFSElBVFlDSENBQUlBZzJBaFFnQUVISmw0Q0FBRFlDRUNBQVFSVTJBZ3hCQUNFUURKb0NDd0pBSUFrZ0FrY05BRUhNQVNFUURKb0NDMEVBSVJSQkFTRVhRUUVoRmtFQUlSQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQWdDUzBBQUVGUWFnNEtsZ0dWQVFBQkFnTUVCUVlJbHdFTFFRSWhFQXdHQzBFRElSQU1CUXRCQkNFUURBUUxRUVVoRUF3REMwRUdJUkFNQWd0QkJ5RVFEQUVMUVFnaEVBdEJBQ0VYUVFBaEZrRUFJUlFNamdFTFFRa2hFRUVCSVJSQkFDRVhRUUFoRmd5TkFRc0NRQ0FLSUFKSERRQkJ6Z0VoRUF5WkFnc2dDaTBBQUVFdVJ3Mk9BU0FLUVFGcUlRa015Z0VMSUFzZ0FrY05qZ0ZCMEFFaEVBeVhBZ3NDUUNBTElBSkdEUUFnQUVHT2dJQ0FBRFlDQ0NBQUlBczJBZ1JCdHdFaEVBeitBUXRCMFFFaEVBeVdBZ3NDUUNBRUlBSkhEUUJCMGdFaEVBeVdBZ3NnQWlBRWF5QUFLQUlBSWhCcUlSUWdCQ0FRYTBFRWFpRUxBMEFnQkMwQUFDQVFRZnpQZ0lBQWFpMEFBRWNOamdFZ0VFRUVSZzNwQVNBUVFRRnFJUkFnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVIU0FTRVFESlVDQ3lBQUlBd2dBaENzZ0lDQUFDSUJEWTBCSUF3aEFReTRBUXNDUUNBRUlBSkhEUUJCMUFFaEVBeVVBZ3NnQWlBRWF5QUFLQUlBSWhCcUlSUWdCQ0FRYTBFQmFpRU1BMEFnQkMwQUFDQVFRWUhRZ0lBQWFpMEFBRWNOandFZ0VFRUJSZzJPQVNBUVFRRnFJUkFnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVIVUFTRVFESk1DQ3dKQUlBUWdBa2NOQUVIV0FTRVFESk1DQ3lBQ0lBUnJJQUFvQWdBaUVHb2hGQ0FFSUJCclFRSnFJUXNEUUNBRUxRQUFJQkJCZzlDQWdBQnFMUUFBUncyT0FTQVFRUUpHRFpBQklCQkJBV29oRUNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFkWUJJUkFNa2dJTEFrQWdCQ0FDUncwQVFkY0JJUkFNa2dJTEFrQUNRQ0FFTFFBQVFidC9hZzRRQUk4Qmp3R1BBWThCandHUEFZOEJqd0dQQVk4Qmp3R1BBWThCandFQmp3RUxJQVJCQVdvaEJFRzdBU0VRRFBrQkN5QUVRUUZxSVFSQnZBRWhFQXo0QVFzQ1FDQUVJQUpIRFFCQjJBRWhFQXlSQWdzZ0JDMEFBRUhJQUVjTmpBRWdCRUVCYWlFRURNUUJDd0pBSUFRZ0FrWU5BQ0FBUVpDQWdJQUFOZ0lJSUFBZ0JEWUNCRUcrQVNFUURQY0JDMEhaQVNFUURJOENDd0pBSUFRZ0FrY05BRUhhQVNFUURJOENDeUFFTFFBQVFjZ0FSZzNEQVNBQVFRRTZBQ2dNdVFFTElBQkJBam9BTHlBQUlBUWdBaENtZ0lDQUFDSVFEWTBCUWNJQklSQU05QUVMSUFBdEFDaEJmMm9PQXJjQnVRRzRBUXNEUUFKQUlBUXRBQUJCZG1vT0JBQ09BWTRCQUk0QkN5QUVRUUZxSWdRZ0FrY05BQXRCM1FFaEVBeUxBZ3NnQUVFQU9nQXZJQUF0QUMxQkJIRkZEWVFDQ3lBQVFRQTZBQzhnQUVFQk9nQTBJQUVoQVF5TUFRc2dFRUVWUmczYUFTQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnA0NkFnQUEyQWhBZ0FFRVNOZ0lNUVFBaEVBeUlBZ3NDUUNBQUlCQWdBaEMwZ0lDQUFDSUVEUUFnRUNFQkRJRUNDd0pBSUFSQkZVY05BQ0FBUVFNMkFod2dBQ0FRTmdJVUlBQkJzSmlBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXlJQWdzZ0FFRUFOZ0ljSUFBZ0VEWUNGQ0FBUWFlT2dJQUFOZ0lRSUFCQkVqWUNERUVBSVJBTWh3SUxJQkJCRlVZTjFnRWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFkcU5nSUFBTmdJUUlBQkJGRFlDREVFQUlSQU1oZ0lMSUFBb0FnUWhGeUFBUVFBMkFnUWdFQ0FScDJvaUZpRUJJQUFnRnlBUUlCWWdGQnNpRUJDMWdJQ0FBQ0lVUlEyTkFTQUFRUWMyQWh3Z0FDQVFOZ0lVSUFBZ0ZEWUNERUVBSVJBTWhRSUxJQUFnQUM4Qk1FR0FBWEk3QVRBZ0FTRUJDMEVxSVJBTTZnRUxJQkJCRlVZTjBRRWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFZT01nSUFBTmdJUUlBQkJFellDREVFQUlSQU1nZ0lMSUJCQkZVWU56d0VnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRWnFQZ0lBQU5nSVFJQUJCSWpZQ0RFRUFJUkFNZ1FJTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkMzZ0lDQUFDSVFEUUFnQVVFQmFpRUJESTBCQ3lBQVFRdzJBaHdnQUNBUU5nSU1JQUFnQVVFQmFqWUNGRUVBSVJBTWdBSUxJQkJCRlVZTnpBRWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFacVBnSUFBTmdJUUlBQkJJallDREVFQUlSQU0vd0VMSUFBb0FnUWhFQ0FBUVFBMkFnUUNRQ0FBSUJBZ0FSQzNnSUNBQUNJUURRQWdBVUVCYWlFQkRJd0JDeUFBUVEwMkFod2dBQ0FRTmdJTUlBQWdBVUVCYWpZQ0ZFRUFJUkFNL2dFTElCQkJGVVlOeVFFZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWNhTWdJQUFOZ0lRSUFCQkl6WUNERUVBSVJBTS9RRUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDNWdJQ0FBQ0lRRFFBZ0FVRUJhaUVCRElzQkN5QUFRUTQyQWh3Z0FDQVFOZ0lNSUFBZ0FVRUJhallDRkVFQUlSQU0vQUVMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUhBbFlDQUFEWUNFQ0FBUVFJMkFneEJBQ0VRRFBzQkN5QVFRUlZHRGNVQklBQkJBRFlDSENBQUlBRTJBaFFnQUVIR2pJQ0FBRFlDRUNBQVFTTTJBZ3hCQUNFUURQb0JDeUFBUVJBMkFod2dBQ0FCTmdJVUlBQWdFRFlDREVFQUlSQU0rUUVMSUFBb0FnUWhCQ0FBUVFBMkFnUUNRQ0FBSUFRZ0FSQzVnSUNBQUNJRURRQWdBVUVCYWlFQkRQRUJDeUFBUVJFMkFod2dBQ0FFTmdJTUlBQWdBVUVCYWpZQ0ZFRUFJUkFNK0FFTElCQkJGVVlOd1FFZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWNhTWdJQUFOZ0lRSUFCQkl6WUNERUVBSVJBTTl3RUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDNWdJQ0FBQ0lRRFFBZ0FVRUJhaUVCRElnQkN5QUFRUk0yQWh3Z0FDQVFOZ0lNSUFBZ0FVRUJhallDRkVFQUlSQU05Z0VMSUFBb0FnUWhCQ0FBUVFBMkFnUUNRQ0FBSUFRZ0FSQzVnSUNBQUNJRURRQWdBVUVCYWlFQkRPMEJDeUFBUVJRMkFod2dBQ0FFTmdJTUlBQWdBVUVCYWpZQ0ZFRUFJUkFNOVFFTElCQkJGVVlOdlFFZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVpxUGdJQUFOZ0lRSUFCQklqWUNERUVBSVJBTTlBRUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDM2dJQ0FBQ0lRRFFBZ0FVRUJhaUVCRElZQkN5QUFRUlkyQWh3Z0FDQVFOZ0lNSUFBZ0FVRUJhallDRkVFQUlSQU04d0VMSUFBb0FnUWhCQ0FBUVFBMkFnUUNRQ0FBSUFRZ0FSQzNnSUNBQUNJRURRQWdBVUVCYWlFQkRPa0JDeUFBUVJjMkFod2dBQ0FFTmdJTUlBQWdBVUVCYWpZQ0ZFRUFJUkFNOGdFTElBQkJBRFlDSENBQUlBRTJBaFFnQUVITms0Q0FBRFlDRUNBQVFRdzJBZ3hCQUNFUURQRUJDMElCSVJFTElCQkJBV29oQVFKQUlBQXBBeUFpRWtMLy8vLy8vLy8vL3c5V0RRQWdBQ0FTUWdTR0lCR0VOd01nSUFFaEFReUVBUXNnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRYTJKZ0lBQU5nSVFJQUJCRERZQ0RFRUFJUkFNN3dFTElBQkJBRFlDSENBQUlCQTJBaFFnQUVITms0Q0FBRFlDRUNBQVFRdzJBZ3hCQUNFUURPNEJDeUFBS0FJRUlSY2dBRUVBTmdJRUlCQWdFYWRxSWhZaEFTQUFJQmNnRUNBV0lCUWJJaEFRdFlDQWdBQWlGRVVOY3lBQVFRVTJBaHdnQUNBUU5nSVVJQUFnRkRZQ0RFRUFJUkFNN1FFTElBQkJBRFlDSENBQUlCQTJBaFFnQUVHcW5JQ0FBRFlDRUNBQVFRODJBZ3hCQUNFUURPd0JDeUFBSUJBZ0FoQzBnSUNBQUNJQkRRRWdFQ0VCQzBFT0lSQU0wUUVMQWtBZ0FVRVZSdzBBSUFCQkFqWUNIQ0FBSUJBMkFoUWdBRUd3bUlDQUFEWUNFQ0FBUVJVMkFneEJBQ0VRRE9vQkN5QUFRUUEyQWh3Z0FDQVFOZ0lVSUFCQnA0NkFnQUEyQWhBZ0FFRVNOZ0lNUVFBaEVBenBBUXNnQVVFQmFpRVFBa0FnQUM4Qk1DSUJRWUFCY1VVTkFBSkFJQUFnRUNBQ0VMdUFnSUFBSWdFTkFDQVFJUUVNY0FzZ0FVRVZSdzI2QVNBQVFRVTJBaHdnQUNBUU5nSVVJQUJCK1plQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF6cEFRc0NRQ0FCUWFBRWNVR2dCRWNOQUNBQUxRQXRRUUp4RFFBZ0FFRUFOZ0ljSUFBZ0VEWUNGQ0FBUVphVGdJQUFOZ0lRSUFCQkJEWUNERUVBSVJBTTZRRUxJQUFnRUNBQ0VMMkFnSUFBR2lBUUlRRUNRQUpBQWtBQ1FBSkFJQUFnRUNBQ0VMT0FnSUFBRGhZQ0FRQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUURCQXNnQUVFQk9nQXVDeUFBSUFBdkFUQkJ3QUJ5T3dFd0lCQWhBUXRCSmlFUURORUJDeUFBUVNNMkFod2dBQ0FRTmdJVUlBQkJwWmFBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXpwQVFzZ0FFRUFOZ0ljSUFBZ0VEWUNGQ0FBUWRXTGdJQUFOZ0lRSUFCQkVUWUNERUVBSVJBTTZBRUxJQUF0QUMxQkFYRkZEUUZCd3dFaEVBek9BUXNDUUNBTklBSkdEUUFEUUFKQUlBMHRBQUJCSUVZTkFDQU5JUUVNeEFFTElBMUJBV29pRFNBQ1J3MEFDMEVsSVJBTTV3RUxRU1VoRUF6bUFRc2dBQ2dDQkNFRUlBQkJBRFlDQkNBQUlBUWdEUkN2Z0lDQUFDSUVSUTJ0QVNBQVFTWTJBaHdnQUNBRU5nSU1JQUFnRFVFQmFqWUNGRUVBSVJBTTVRRUxJQkJCRlVZTnF3RWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFmMk5nSUFBTmdJUUlBQkJIVFlDREVFQUlSQU01QUVMSUFCQkp6WUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXpqQVFzZ0VDRUJRUUVoRkFKQUFrQUNRQUpBQWtBQ1FBSkFJQUF0QUN4QmZtb09Cd1lGQlFNQkFnQUZDeUFBSUFBdkFUQkJDSEk3QVRBTUF3dEJBaUVVREFFTFFRUWhGQXNnQUVFQk9nQXNJQUFnQUM4Qk1DQVVjanNCTUFzZ0VDRUJDMEVySVJBTXlnRUxJQUJCQURZQ0hDQUFJQkEyQWhRZ0FFR3Jrb0NBQURZQ0VDQUFRUXMyQWd4QkFDRVFET0lCQ3lBQVFRQTJBaHdnQUNBQk5nSVVJQUJCNFkrQWdBQTJBaEFnQUVFS05nSU1RUUFoRUF6aEFRc2dBRUVBT2dBc0lCQWhBUXk5QVFzZ0VDRUJRUUVoRkFKQUFrQUNRQUpBQWtBZ0FDMEFMRUY3YWc0RUF3RUNBQVVMSUFBZ0FDOEJNRUVJY2pzQk1Bd0RDMEVDSVJRTUFRdEJCQ0VVQ3lBQVFRRTZBQ3dnQUNBQUx3RXdJQlJ5T3dFd0N5QVFJUUVMUVNraEVBekZBUXNnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZkNVZ0lBQU5nSVFJQUJCQXpZQ0RFRUFJUkFNM1FFTEFrQWdEaTBBQUVFTlJ3MEFJQUFvQWdRaEFTQUFRUUEyQWdRQ1FDQUFJQUVnRGhDeGdJQ0FBQ0lCRFFBZ0RrRUJhaUVCREhVTElBQkJMRFlDSENBQUlBRTJBZ3dnQUNBT1FRRnFOZ0lVUVFBaEVBemRBUXNnQUMwQUxVRUJjVVVOQVVIRUFTRVFETU1CQ3dKQUlBNGdBa2NOQUVFdElSQU0zQUVMQWtBQ1FBTkFBa0FnRGkwQUFFRjJhZzRFQWdBQUF3QUxJQTVCQVdvaURpQUNSdzBBQzBFdElSQU0zUUVMSUFBb0FnUWhBU0FBUVFBMkFnUUNRQ0FBSUFFZ0RoQ3hnSUNBQUNJQkRRQWdEaUVCREhRTElBQkJMRFlDSENBQUlBNDJBaFFnQUNBQk5nSU1RUUFoRUF6Y0FRc2dBQ2dDQkNFQklBQkJBRFlDQkFKQUlBQWdBU0FPRUxHQWdJQUFJZ0VOQUNBT1FRRnFJUUVNY3dzZ0FFRXNOZ0ljSUFBZ0FUWUNEQ0FBSUE1QkFXbzJBaFJCQUNFUUROc0JDeUFBS0FJRUlRUWdBRUVBTmdJRUlBQWdCQ0FPRUxHQWdJQUFJZ1FOb0FFZ0RpRUJETTRCQ3lBUVFTeEhEUUVnQVVFQmFpRVFRUUVoQVFKQUFrQUNRQUpBQWtBZ0FDMEFMRUY3YWc0RUF3RUNCQUFMSUJBaEFRd0VDMEVDSVFFTUFRdEJCQ0VCQ3lBQVFRRTZBQ3dnQUNBQUx3RXdJQUZ5T3dFd0lCQWhBUXdCQ3lBQUlBQXZBVEJCQ0hJN0FUQWdFQ0VCQzBFNUlSQU12d0VMSUFCQkFEb0FMQ0FCSVFFTFFUUWhFQXk5QVFzZ0FDQUFMd0V3UVNCeU93RXdJQUVoQVF3Q0N5QUFLQUlFSVFRZ0FFRUFOZ0lFQWtBZ0FDQUVJQUVRc1lDQWdBQWlCQTBBSUFFaEFRekhBUXNnQUVFM05nSWNJQUFnQVRZQ0ZDQUFJQVEyQWd4QkFDRVFETlFCQ3lBQVFRZzZBQ3dnQVNFQkMwRXdJUkFNdVFFTEFrQWdBQzBBS0VFQlJnMEFJQUVoQVF3RUN5QUFMUUF0UVFoeFJRMlRBU0FCSVFFTUF3c2dBQzBBTUVFZ2NRMlVBVUhGQVNFUURMY0JDd0pBSUE4Z0FrWU5BQUpBQTBBQ1FDQVBMUUFBUVZCcUlnRkIvd0Z4UVFwSkRRQWdEeUVCUVRVaEVBeTZBUXNnQUNrRElDSVJRcG16NXN5WnMrYk1HVllOQVNBQUlCRkNDbjRpRVRjRElDQVJJQUd0UXY4Qmd5SVNRbitGVmcwQklBQWdFU0FTZkRjRElDQVBRUUZxSWc4Z0FrY05BQXRCT1NFUURORUJDeUFBS0FJRUlRSWdBRUVBTmdJRUlBQWdBaUFQUVFGcUlnUVFzWUNBZ0FBaUFnMlZBU0FFSVFFTXd3RUxRVGtoRUF6UEFRc0NRQ0FBTHdFd0lnRkJDSEZGRFFBZ0FDMEFLRUVCUncwQUlBQXRBQzFCQ0hGRkRaQUJDeUFBSUFGQjkvc0RjVUdBQkhJN0FUQWdEeUVCQzBFM0lSQU10QUVMSUFBZ0FDOEJNRUVRY2pzQk1BeXJBUXNnRUVFVlJnMkxBU0FBUVFBMkFod2dBQ0FCTmdJVUlBQkI4STZBZ0FBMkFoQWdBRUVjTmdJTVFRQWhFQXpMQVFzZ0FFSERBRFlDSENBQUlBRTJBZ3dnQUNBTlFRRnFOZ0lVUVFBaEVBektBUXNDUUNBQkxRQUFRVHBIRFFBZ0FDZ0NCQ0VRSUFCQkFEWUNCQUpBSUFBZ0VDQUJFSytBZ0lBQUloQU5BQ0FCUVFGcUlRRU1Zd3NnQUVIREFEWUNIQ0FBSUJBMkFnd2dBQ0FCUVFGcU5nSVVRUUFoRUF6S0FRc2dBRUVBTmdJY0lBQWdBVFlDRkNBQVFiR1JnSUFBTmdJUUlBQkJDallDREVFQUlSQU15UUVMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUdnbVlDQUFEWUNFQ0FBUVI0MkFneEJBQ0VRRE1nQkN5QUFRUUEyQWdBTElBQkJnQkk3QVNvZ0FDQVhRUUZxSWdFZ0FoQ29nSUNBQUNJUURRRWdBU0VCQzBISEFDRVFES3dCQ3lBUVFSVkhEWU1CSUFCQjBRQTJBaHdnQUNBQk5nSVVJQUJCNDVlQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF6RUFRc2dBQ2dDQkNFUUlBQkJBRFlDQkFKQUlBQWdFQ0FCRUtlQWdJQUFJaEFOQUNBQklRRU1YZ3NnQUVIU0FEWUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXpEQVFzZ0FFRUFOZ0ljSUFBZ0ZEWUNGQ0FBUWNHb2dJQUFOZ0lRSUFCQkJ6WUNEQ0FBUVFBMkFnQkJBQ0VRRE1JQkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRcDRDQWdBQWlFQTBBSUFFaEFReGRDeUFBUWRNQU5nSWNJQUFnQVRZQ0ZDQUFJQkEyQWd4QkFDRVFETUVCQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFZQ1JnSUFBTmdJUUlBQkJDVFlDREF6QUFRc2dFRUVWUmcxOUlBQkJBRFlDSENBQUlBRTJBaFFnQUVHVWpZQ0FBRFlDRUNBQVFTRTJBZ3hCQUNFUURMOEJDMEVCSVJaQkFDRVhRUUFoRkVFQklSQUxJQUFnRURvQUt5QUJRUUZxSVFFQ1FBSkFJQUF0QUMxQkVIRU5BQUpBQWtBQ1FDQUFMUUFxRGdNQkFBSUVDeUFXUlEwRERBSUxJQlFOQVF3Q0N5QVhSUTBCQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVFyWUNBZ0FBaUVBMEFJQUVoQVF4Y0N5QUFRZGdBTmdJY0lBQWdBVFlDRkNBQUlCQTJBZ3hCQUNFUURMNEJDeUFBS0FJRUlRUWdBRUVBTmdJRUFrQWdBQ0FFSUFFUXJZQ0FnQUFpQkEwQUlBRWhBUXl0QVFzZ0FFSFpBRFlDSENBQUlBRTJBaFFnQUNBRU5nSU1RUUFoRUF5OUFRc2dBQ2dDQkNFRUlBQkJBRFlDQkFKQUlBQWdCQ0FCRUsyQWdJQUFJZ1FOQUNBQklRRU1xd0VMSUFCQjJnQTJBaHdnQUNBQk5nSVVJQUFnQkRZQ0RFRUFJUkFNdkFFTElBQW9BZ1FoQkNBQVFRQTJBZ1FDUUNBQUlBUWdBUkN0Z0lDQUFDSUVEUUFnQVNFQkRLa0JDeUFBUWR3QU5nSWNJQUFnQVRZQ0ZDQUFJQVEyQWd4QkFDRVFETHNCQ3dKQUlBRXRBQUJCVUdvaUVFSC9BWEZCQ2s4TkFDQUFJQkE2QUNvZ0FVRUJhaUVCUWM4QUlSQU1vZ0VMSUFBb0FnUWhCQ0FBUVFBMkFnUUNRQ0FBSUFRZ0FSQ3RnSUNBQUNJRURRQWdBU0VCREtjQkN5QUFRZDRBTmdJY0lBQWdBVFlDRkNBQUlBUTJBZ3hCQUNFUURMb0JDeUFBUVFBMkFnQWdGMEVCYWlFQkFrQWdBQzBBS1VFalR3MEFJQUVoQVF4WkN5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQjA0bUFnQUEyQWhBZ0FFRUlOZ0lNUVFBaEVBeTVBUXNnQUVFQU5nSUFDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVpDemdJQUFOZ0lRSUFCQkNEWUNEQXkzQVFzZ0FFRUFOZ0lBSUJkQkFXb2hBUUpBSUFBdEFDbEJJVWNOQUNBQklRRU1WZ3NnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRWnVLZ0lBQU5nSVFJQUJCQ0RZQ0RFRUFJUkFNdGdFTElBQkJBRFlDQUNBWFFRRnFJUUVDUUNBQUxRQXBJaEJCWFdwQkMwOE5BQ0FCSVFFTVZRc0NRQ0FRUVFaTERRQkJBU0FRZEVIS0FIRkZEUUFnQVNFQkRGVUxRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCOTRtQWdBQTJBaEFnQUVFSU5nSU1ETFVCQ3lBUVFSVkdEWEVnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRYm1OZ0lBQU5nSVFJQUJCR2pZQ0RFRUFJUkFNdEFFTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkNuZ0lDQUFDSVFEUUFnQVNFQkRGUUxJQUJCNVFBMkFod2dBQ0FCTmdJVUlBQWdFRFlDREVFQUlSQU1zd0VMSUFBb0FnUWhFQ0FBUVFBMkFnUUNRQ0FBSUJBZ0FSQ25nSUNBQUNJUURRQWdBU0VCREUwTElBQkIwZ0EyQWh3Z0FDQUJOZ0lVSUFBZ0VEWUNERUVBSVJBTXNnRUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDbmdJQ0FBQ0lRRFFBZ0FTRUJERTBMSUFCQjB3QTJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNc1FFTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkNuZ0lDQUFDSVFEUUFnQVNFQkRGRUxJQUJCNVFBMkFod2dBQ0FCTmdJVUlBQWdFRFlDREVFQUlSQU1zQUVMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUhHaW9DQUFEWUNFQ0FBUVFjMkFneEJBQ0VRREs4QkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRcDRDQWdBQWlFQTBBSUFFaEFReEpDeUFBUWRJQU5nSWNJQUFnQVRZQ0ZDQUFJQkEyQWd4QkFDRVFESzRCQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVFwNENBZ0FBaUVBMEFJQUVoQVF4SkN5QUFRZE1BTmdJY0lBQWdBVFlDRkNBQUlCQTJBZ3hCQUNFUURLMEJDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXA0Q0FnQUFpRUEwQUlBRWhBUXhOQ3lBQVFlVUFOZ0ljSUFBZ0FUWUNGQ0FBSUJBMkFneEJBQ0VRREt3QkN5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQjNJaUFnQUEyQWhBZ0FFRUhOZ0lNUVFBaEVBeXJBUXNnRUVFL1J3MEJJQUZCQVdvaEFRdEJCU0VRREpBQkMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZjJTZ0lBQU5nSVFJQUJCQnpZQ0RBeW9BUXNnQUNnQ0JDRVFJQUJCQURZQ0JBSkFJQUFnRUNBQkVLZUFnSUFBSWhBTkFDQUJJUUVNUWdzZ0FFSFNBRFlDSENBQUlBRTJBaFFnQUNBUU5nSU1RUUFoRUF5bkFRc2dBQ2dDQkNFUUlBQkJBRFlDQkFKQUlBQWdFQ0FCRUtlQWdJQUFJaEFOQUNBQklRRU1RZ3NnQUVIVEFEWUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXltQVFzZ0FDZ0NCQ0VRSUFCQkFEWUNCQUpBSUFBZ0VDQUJFS2VBZ0lBQUloQU5BQ0FCSVFFTVJnc2dBRUhsQURZQ0hDQUFJQUUyQWhRZ0FDQVFOZ0lNUVFBaEVBeWxBUXNnQUNnQ0JDRUJJQUJCQURZQ0JBSkFJQUFnQVNBVUVLZUFnSUFBSWdFTkFDQVVJUUVNUHdzZ0FFSFNBRFlDSENBQUlCUTJBaFFnQUNBQk5nSU1RUUFoRUF5a0FRc2dBQ2dDQkNFQklBQkJBRFlDQkFKQUlBQWdBU0FVRUtlQWdJQUFJZ0VOQUNBVUlRRU1Qd3NnQUVIVEFEWUNIQ0FBSUJRMkFoUWdBQ0FCTmdJTVFRQWhFQXlqQVFzZ0FDZ0NCQ0VCSUFCQkFEWUNCQUpBSUFBZ0FTQVVFS2VBZ0lBQUlnRU5BQ0FVSVFFTVF3c2dBRUhsQURZQ0hDQUFJQlEyQWhRZ0FDQUJOZ0lNUVFBaEVBeWlBUXNnQUVFQU5nSWNJQUFnRkRZQ0ZDQUFRY09QZ0lBQU5nSVFJQUJCQnpZQ0RFRUFJUkFNb1FFTElBQkJBRFlDSENBQUlBRTJBaFFnQUVIRGo0Q0FBRFlDRUNBQVFRYzJBZ3hCQUNFUURLQUJDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0ZEWUNGQ0FBUVl5Y2dJQUFOZ0lRSUFCQkJ6WUNEQXlmQVFzZ0FFRUFOZ0ljSUFBZ0ZEWUNGQ0FBUVl5Y2dJQUFOZ0lRSUFCQkJ6WUNERUVBSVJBTW5nRUxJQUJCQURZQ0hDQUFJQlEyQWhRZ0FFSCtrWUNBQURZQ0VDQUFRUWMyQWd4QkFDRVFESjBCQ3lBQVFRQTJBaHdnQUNBQk5nSVVJQUJCanB1QWdBQTJBaEFnQUVFR05nSU1RUUFoRUF5Y0FRc2dFRUVWUmcxWElBQkJBRFlDSENBQUlBRTJBaFFnQUVITWpvQ0FBRFlDRUNBQVFTQTJBZ3hCQUNFUURKc0JDeUFBUVFBMkFnQWdFRUVCYWlFQlFTUWhFQXNnQUNBUU9nQXBJQUFvQWdRaEVDQUFRUUEyQWdRZ0FDQVFJQUVRcTRDQWdBQWlFQTFVSUFFaEFRdytDeUFBUVFBMkFnQUxRUUFoRUNBQVFRQTJBaHdnQUNBRU5nSVVJQUJCOFp1QWdBQTJBaEFnQUVFR05nSU1ESmNCQ3lBQlFSVkdEVkFnQUVFQU5nSWNJQUFnQlRZQ0ZDQUFRZkNNZ0lBQU5nSVFJQUJCR3pZQ0RFRUFJUkFNbGdFTElBQW9BZ1FoQlNBQVFRQTJBZ1FnQUNBRklCQVFxWUNBZ0FBaUJRMEJJQkJCQVdvaEJRdEJyUUVoRUF4N0N5QUFRY0VCTmdJY0lBQWdCVFlDRENBQUlCQkJBV28yQWhSQkFDRVFESk1CQ3lBQUtBSUVJUVlnQUVFQU5nSUVJQUFnQmlBUUVLbUFnSUFBSWdZTkFTQVFRUUZxSVFZTFFhNEJJUkFNZUFzZ0FFSENBVFlDSENBQUlBWTJBZ3dnQUNBUVFRRnFOZ0lVUVFBaEVBeVFBUXNnQUVFQU5nSWNJQUFnQnpZQ0ZDQUFRWmVMZ0lBQU5nSVFJQUJCRFRZQ0RFRUFJUkFNandFTElBQkJBRFlDSENBQUlBZzJBaFFnQUVIamtJQ0FBRFlDRUNBQVFRazJBZ3hCQUNFUURJNEJDeUFBUVFBMkFod2dBQ0FJTmdJVUlBQkJsSTJBZ0FBMkFoQWdBRUVoTmdJTVFRQWhFQXlOQVF0QkFTRVdRUUFoRjBFQUlSUkJBU0VRQ3lBQUlCQTZBQ3NnQ1VFQmFpRUlBa0FDUUNBQUxRQXRRUkJ4RFFBQ1FBSkFBa0FnQUMwQUtnNERBUUFDQkFzZ0ZrVU5Bd3dDQ3lBVURRRU1BZ3NnRjBVTkFRc2dBQ2dDQkNFUUlBQkJBRFlDQkNBQUlCQWdDQkN0Z0lDQUFDSVFSUTA5SUFCQnlRRTJBaHdnQUNBSU5nSVVJQUFnRURZQ0RFRUFJUkFNakFFTElBQW9BZ1FoQkNBQVFRQTJBZ1FnQUNBRUlBZ1FyWUNBZ0FBaUJFVU5kaUFBUWNvQk5nSWNJQUFnQ0RZQ0ZDQUFJQVEyQWd4QkFDRVFESXNCQ3lBQUtBSUVJUVFnQUVFQU5nSUVJQUFnQkNBSkVLMkFnSUFBSWdSRkRYUWdBRUhMQVRZQ0hDQUFJQWsyQWhRZ0FDQUVOZ0lNUVFBaEVBeUtBUXNnQUNnQ0JDRUVJQUJCQURZQ0JDQUFJQVFnQ2hDdGdJQ0FBQ0lFUlExeUlBQkJ6UUUyQWh3Z0FDQUtOZ0lVSUFBZ0JEWUNERUVBSVJBTWlRRUxBa0FnQ3kwQUFFRlFhaUlRUWY4QmNVRUtUdzBBSUFBZ0VEb0FLaUFMUVFGcUlRcEJ0Z0VoRUF4d0N5QUFLQUlFSVFRZ0FFRUFOZ0lFSUFBZ0JDQUxFSzJBZ0lBQUlnUkZEWEFnQUVIUEFUWUNIQ0FBSUFzMkFoUWdBQ0FFTmdJTVFRQWhFQXlJQVFzZ0FFRUFOZ0ljSUFBZ0JEWUNGQ0FBUVpDemdJQUFOZ0lRSUFCQkNEWUNEQ0FBUVFBMkFnQkJBQ0VRREljQkN5QUJRUlZHRFQ4Z0FFRUFOZ0ljSUFBZ0REWUNGQ0FBUWN5T2dJQUFOZ0lRSUFCQklEWUNERUVBSVJBTWhnRUxJQUJCZ1FRN0FTZ2dBQ2dDQkNFUUlBQkNBRGNEQUNBQUlCQWdERUVCYWlJTUVLdUFnSUFBSWhCRkRUZ2dBRUhUQVRZQ0hDQUFJQXcyQWhRZ0FDQVFOZ0lNUVFBaEVBeUZBUXNnQUVFQU5nSUFDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0JEWUNGQ0FBUWRpYmdJQUFOZ0lRSUFCQkNEWUNEQXlEQVFzZ0FDZ0NCQ0VRSUFCQ0FEY0RBQ0FBSUJBZ0MwRUJhaUlMRUt1QWdJQUFJaEFOQVVIR0FTRVFER2tMSUFCQkFqb0FLQXhWQ3lBQVFkVUJOZ0ljSUFBZ0N6WUNGQ0FBSUJBMkFneEJBQ0VRRElBQkN5QVFRUlZHRFRjZ0FFRUFOZ0ljSUFBZ0JEWUNGQ0FBUWFTTWdJQUFOZ0lRSUFCQkVEWUNERUVBSVJBTWZ3c2dBQzBBTkVFQlJ3MDBJQUFnQkNBQ0VMeUFnSUFBSWhCRkRUUWdFRUVWUncwMUlBQkIzQUUyQWh3Z0FDQUVOZ0lVSUFCQjFaYUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBeCtDMEVBSVJBZ0FFRUFOZ0ljSUFCQnI0dUFnQUEyQWhBZ0FFRUNOZ0lNSUFBZ0ZFRUJhallDRkF4OUMwRUFJUkFNWXd0QkFpRVFER0lMUVEwaEVBeGhDMEVQSVJBTVlBdEJKU0VRREY4TFFSTWhFQXhlQzBFVklSQU1YUXRCRmlFUURGd0xRUmNoRUF4YkMwRVlJUkFNV2d0QkdTRVFERmtMUVJvaEVBeFlDMEViSVJBTVZ3dEJIQ0VRREZZTFFSMGhFQXhWQzBFZklSQU1WQXRCSVNFUURGTUxRU01oRUF4U0MwSEdBQ0VRREZFTFFTNGhFQXhRQzBFdklSQU1Ud3RCT3lFUURFNExRVDBoRUF4TkMwSElBQ0VRREV3TFFja0FJUkFNU3d0Qnl3QWhFQXhLQzBITUFDRVFERWtMUWM0QUlSQU1TQXRCMFFBaEVBeEhDMEhWQUNFUURFWUxRZGdBSVJBTVJRdEIyUUFoRUF4RUMwSGJBQ0VRREVNTFFlUUFJUkFNUWd0QjVRQWhFQXhCQzBIeEFDRVFERUFMUWZRQUlSQU1Qd3RCalFFaEVBdytDMEdYQVNFUUREMExRYWtCSVJBTVBBdEJyQUVoRUF3N0MwSEFBU0VRRERvTFFia0JJUkFNT1F0QnJ3RWhFQXc0QzBHeEFTRVFERGNMUWJJQklSQU1OZ3RCdEFFaEVBdzFDMEcxQVNFUUREUUxRYm9CSVJBTU13dEJ2UUVoRUF3eUMwRy9BU0VRRERFTFFjRUJJUkFNTUFzZ0FFRUFOZ0ljSUFBZ0JEWUNGQ0FBUWVtTGdJQUFOZ0lRSUFCQkh6WUNERUVBSVJBTVNBc2dBRUhiQVRZQ0hDQUFJQVEyQWhRZ0FFSDZsb0NBQURZQ0VDQUFRUlUyQWd4QkFDRVFERWNMSUFCQitBQTJBaHdnQUNBTU5nSVVJQUJCeXBpQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF4R0N5QUFRZEVBTmdJY0lBQWdCVFlDRkNBQVFiQ1hnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1SUXNnQUVINUFEWUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXhFQ3lBQVFmZ0FOZ0ljSUFBZ0FUWUNGQ0FBUWNxWWdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTVF3c2dBRUhrQURZQ0hDQUFJQUUyQWhRZ0FFSGpsNENBQURZQ0VDQUFRUlUyQWd4QkFDRVFERUlMSUFCQjF3QTJBaHdnQUNBQk5nSVVJQUJCeVplQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF4QkN5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnVZMkFnQUEyQWhBZ0FFRWFOZ0lNUVFBaEVBeEFDeUFBUWNJQU5nSWNJQUFnQVRZQ0ZDQUFRZU9ZZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNUHdzZ0FFRUFOZ0lFSUFBZ0R5QVBFTEdBZ0lBQUlnUkZEUUVnQUVFNk5nSWNJQUFnQkRZQ0RDQUFJQTlCQVdvMkFoUkJBQ0VRREQ0TElBQW9BZ1FoQkNBQVFRQTJBZ1FDUUNBQUlBUWdBUkN4Z0lDQUFDSUVSUTBBSUFCQk96WUNIQ0FBSUFRMkFnd2dBQ0FCUVFGcU5nSVVRUUFoRUF3K0N5QUJRUUZxSVFFTUxRc2dEMEVCYWlFQkRDMExJQUJCQURZQ0hDQUFJQTgyQWhRZ0FFSGtrb0NBQURZQ0VDQUFRUVEyQWd4QkFDRVFERHNMSUFCQk5qWUNIQ0FBSUFRMkFoUWdBQ0FDTmdJTVFRQWhFQXc2Q3lBQVFTNDJBaHdnQUNBT05nSVVJQUFnQkRZQ0RFRUFJUkFNT1FzZ0FFSFFBRFlDSENBQUlBRTJBaFFnQUVHUm1JQ0FBRFlDRUNBQVFSVTJBZ3hCQUNFUUREZ0xJQTFCQVdvaEFRd3NDeUFBUVJVMkFod2dBQ0FCTmdJVUlBQkJncG1BZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXcyQ3lBQVFSczJBaHdnQUNBQk5nSVVJQUJCa1plQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF3MUN5QUFRUTgyQWh3Z0FDQUJOZ0lVSUFCQmtaZUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBdzBDeUFBUVFzMkFod2dBQ0FCTmdJVUlBQkJrWmVBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXd6Q3lBQVFSbzJBaHdnQUNBQk5nSVVJQUJCZ3BtQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF3eUN5QUFRUXMyQWh3Z0FDQUJOZ0lVSUFCQmdwbUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBd3hDeUFBUVFvMkFod2dBQ0FCTmdJVUlBQkI1SmFBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXd3Q3lBQVFSNDJBaHdnQUNBQk5nSVVJQUJCK1plQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF3dkN5QUFRUUEyQWh3Z0FDQVFOZ0lVSUFCQjJvMkFnQUEyQWhBZ0FFRVVOZ0lNUVFBaEVBd3VDeUFBUVFRMkFod2dBQ0FCTmdJVUlBQkJzSmlBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXd0Q3lBQVFRQTJBZ0FnQzBFQmFpRUxDMEc0QVNFUURCSUxJQUJCQURZQ0FDQVFRUUZxSVFGQjlRQWhFQXdSQ3lBQklRRUNRQ0FBTFFBcFFRVkhEUUJCNHdBaEVBd1JDMEhpQUNFUURCQUxRUUFoRUNBQVFRQTJBaHdnQUVIa2tZQ0FBRFlDRUNBQVFRYzJBZ3dnQUNBVVFRRnFOZ0lVRENnTElBQkJBRFlDQUNBWFFRRnFJUUZCd0FBaEVBd09DMEVCSVFFTElBQWdBVG9BTENBQVFRQTJBZ0FnRjBFQmFpRUJDMEVvSVJBTUN3c2dBU0VCQzBFNElSQU1DUXNDUUNBQklnOGdBa1lOQUFOQUFrQWdEeTBBQUVHQXZvQ0FBR290QUFBaUFVRUJSZzBBSUFGQkFrY05BeUFQUVFGcUlRRU1CQXNnRDBFQmFpSVBJQUpIRFFBTFFUNGhFQXdpQzBFK0lSQU1JUXNnQUVFQU9nQXNJQThoQVF3QkMwRUxJUkFNQmd0Qk9pRVFEQVVMSUFGQkFXb2hBVUV0SVJBTUJBc2dBQ0FCT2dBc0lBQkJBRFlDQUNBV1FRRnFJUUZCRENFUURBTUxJQUJCQURZQ0FDQVhRUUZxSVFGQkNpRVFEQUlMSUFCQkFEWUNBQXNnQUVFQU9nQXNJQTBoQVVFSklSQU1BQXNMUVFBaEVDQUFRUUEyQWh3Z0FDQUxOZ0lVSUFCQnpaQ0FnQUEyQWhBZ0FFRUpOZ0lNREJjTFFRQWhFQ0FBUVFBMkFod2dBQ0FLTmdJVUlBQkI2WXFBZ0FBMkFoQWdBRUVKTmdJTURCWUxRUUFoRUNBQVFRQTJBaHdnQUNBSk5nSVVJQUJCdDVDQWdBQTJBaEFnQUVFSk5nSU1EQlVMUVFBaEVDQUFRUUEyQWh3Z0FDQUlOZ0lVSUFCQm5KR0FnQUEyQWhBZ0FFRUpOZ0lNREJRTFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkJ6WkNBZ0FBMkFoQWdBRUVKTmdJTURCTUxRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCNllxQWdBQTJBaEFnQUVFSk5nSU1EQklMUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnQ1Q0FnQUEyQWhBZ0FFRUpOZ0lNREJFTFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkJuSkdBZ0FBMkFoQWdBRUVKTmdJTURCQUxRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCbDVXQWdBQTJBaEFnQUVFUE5nSU1EQThMUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQmw1V0FnQUEyQWhBZ0FFRVBOZ0lNREE0TFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkJ3SktBZ0FBMkFoQWdBRUVMTmdJTURBMExRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCbFltQWdBQTJBaEFnQUVFTE5nSU1EQXdMUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQjRZK0FnQUEyQWhBZ0FFRUtOZ0lNREFzTFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkIrNCtBZ0FBMkFoQWdBRUVLTmdJTURBb0xRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCOFptQWdBQTJBaEFnQUVFQ05nSU1EQWtMUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnhKU0FnQUEyQWhBZ0FFRUNOZ0lNREFnTFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkI4cFdBZ0FBMkFoQWdBRUVDTmdJTURBY0xJQUJCQWpZQ0hDQUFJQUUyQWhRZ0FFR2Ntb0NBQURZQ0VDQUFRUlkyQWd4QkFDRVFEQVlMUVFFaEVBd0ZDMEhVQUNFUUlBRWlCQ0FDUmcwRUlBTkJDR29nQUNBRUlBSkIyTUtBZ0FCQkNoREZnSUNBQUNBREtBSU1JUVFnQXlnQ0NBNERBUVFDQUFzUXlvQ0FnQUFBQ3lBQVFRQTJBaHdnQUVHMW1vQ0FBRFlDRUNBQVFSYzJBZ3dnQUNBRVFRRnFOZ0lVUVFBaEVBd0NDeUFBUVFBMkFod2dBQ0FFTmdJVUlBQkJ5cHFBZ0FBMkFoQWdBRUVKTmdJTVFRQWhFQXdCQ3dKQUlBRWlCQ0FDUncwQVFTSWhFQXdCQ3lBQVFZbUFnSUFBTmdJSUlBQWdCRFlDQkVFaElSQUxJQU5CRUdva2dJQ0FnQUFnRUF1dkFRRUNmeUFCS0FJQUlRWUNRQUpBSUFJZ0EwWU5BQ0FFSUFacUlRUWdCaUFEYWlBQ2F5RUhJQUlnQmtGL2N5QUZhaUlHYWlFRkEwQUNRQ0FDTFFBQUlBUXRBQUJHRFFCQkFpRUVEQU1MQWtBZ0JnMEFRUUFoQkNBRklRSU1Bd3NnQmtGL2FpRUdJQVJCQVdvaEJDQUNRUUZxSWdJZ0EwY05BQXNnQnlFR0lBTWhBZ3NnQUVFQk5nSUFJQUVnQmpZQ0FDQUFJQUkyQWdRUEN5QUJRUUEyQWdBZ0FDQUVOZ0lBSUFBZ0FqWUNCQXNLQUNBQUVNZUFnSUFBQy9JMkFRdC9JNENBZ0lBQVFSQnJJZ0VrZ0lDQWdBQUNRRUVBS0FLZzBJQ0FBQTBBUVFBUXk0Q0FnQUJCZ05TRWdBQnJJZ0pCMlFCSkRRQkJBQ0VEQWtCQkFDZ0M0Tk9BZ0FBaUJBMEFRUUJDZnpjQzdOT0FnQUJCQUVLQWdJU0FnSURBQURjQzVOT0FnQUJCQUNBQlFRaHFRWEJ4UWRpcTFhb0ZjeUlFTmdMZzA0Q0FBRUVBUVFBMkF2VFRnSUFBUVFCQkFEWUN4Tk9BZ0FBTFFRQWdBallDek5PQWdBQkJBRUdBMUlTQUFEWUN5Tk9BZ0FCQkFFR0ExSVNBQURZQ21OQ0FnQUJCQUNBRU5nS3MwSUNBQUVFQVFYODJBcWpRZ0lBQUEwQWdBMEhFMElDQUFHb2dBMEc0MElDQUFHb2lCRFlDQUNBRUlBTkJzTkNBZ0FCcUlnVTJBZ0FnQTBHODBJQ0FBR29nQlRZQ0FDQURRY3pRZ0lBQWFpQURRY0RRZ0lBQWFpSUZOZ0lBSUFVZ0JEWUNBQ0FEUWRUUWdJQUFhaUFEUWNqUWdJQUFhaUlFTmdJQUlBUWdCVFlDQUNBRFFkRFFnSUFBYWlBRU5nSUFJQU5CSUdvaUEwR0FBa2NOQUF0QmdOU0VnQUJCZUVHQTFJU0FBR3RCRDNGQkFFR0ExSVNBQUVFSWFrRVBjUnNpQTJvaUJFRUVhaUFDUVVocUlnVWdBMnNpQTBFQmNqWUNBRUVBUVFBb0F2RFRnSUFBTmdLazBJQ0FBRUVBSUFNMkFwVFFnSUFBUVFBZ0JEWUNvTkNBZ0FCQmdOU0VnQUFnQldwQk9EWUNCQXNDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQWdBRUhzQVVzTkFBSkFRUUFvQW9qUWdJQUFJZ1pCRUNBQVFSTnFRWEJ4SUFCQkMwa2JJZ0pCQTNZaUJIWWlBMEVEY1VVTkFBSkFBa0FnQTBFQmNTQUVja0VCY3lJRlFRTjBJZ1JCc05DQWdBQnFJZ01nQkVHNDBJQ0FBR29vQWdBaUJDZ0NDQ0lDUncwQVFRQWdCa0YrSUFWM2NUWUNpTkNBZ0FBTUFRc2dBeUFDTmdJSUlBSWdBellDREFzZ0JFRUlhaUVESUFRZ0JVRURkQ0lGUVFOeU5nSUVJQVFnQldvaUJDQUVLQUlFUVFGeU5nSUVEQXdMSUFKQkFDZ0NrTkNBZ0FBaUIwME5BUUpBSUFORkRRQUNRQUpBSUFNZ0JIUkJBaUFFZENJRFFRQWdBMnR5Y1NJRFFRQWdBMnR4UVg5cUlnTWdBMEVNZGtFUWNTSURkaUlFUVFWMlFRaHhJZ1VnQTNJZ0JDQUZkaUlEUVFKMlFRUnhJZ1J5SUFNZ0JIWWlBMEVCZGtFQ2NTSUVjaUFESUFSMklnTkJBWFpCQVhFaUJISWdBeUFFZG1vaUJFRURkQ0lEUWJEUWdJQUFhaUlGSUFOQnVOQ0FnQUJxS0FJQUlnTW9BZ2dpQUVjTkFFRUFJQVpCZmlBRWQzRWlCallDaU5DQWdBQU1BUXNnQlNBQU5nSUlJQUFnQlRZQ0RBc2dBeUFDUVFOeU5nSUVJQU1nQkVFRGRDSUVhaUFFSUFKcklnVTJBZ0FnQXlBQ2FpSUFJQVZCQVhJMkFnUUNRQ0FIUlEwQUlBZEJlSEZCc05DQWdBQnFJUUpCQUNnQ25OQ0FnQUFoQkFKQUFrQWdCa0VCSUFkQkEzWjBJZ2h4RFFCQkFDQUdJQWh5TmdLSTBJQ0FBQ0FDSVFnTUFRc2dBaWdDQ0NFSUN5QUlJQVEyQWd3Z0FpQUVOZ0lJSUFRZ0FqWUNEQ0FFSUFnMkFnZ0xJQU5CQ0dvaEEwRUFJQUEyQXB6UWdJQUFRUUFnQlRZQ2tOQ0FnQUFNREF0QkFDZ0NqTkNBZ0FBaUNVVU5BU0FKUVFBZ0NXdHhRWDlxSWdNZ0EwRU1ka0VRY1NJRGRpSUVRUVYyUVFoeElnVWdBM0lnQkNBRmRpSURRUUoyUVFSeElnUnlJQU1nQkhZaUEwRUJka0VDY1NJRWNpQURJQVIySWdOQkFYWkJBWEVpQkhJZ0F5QUVkbXBCQW5SQnVOS0FnQUJxS0FJQUlnQW9BZ1JCZUhFZ0Ftc2hCQ0FBSVFVQ1FBTkFBa0FnQlNnQ0VDSUREUUFnQlVFVWFpZ0NBQ0lEUlEwQ0N5QURLQUlFUVhoeElBSnJJZ1VnQkNBRklBUkpJZ1ViSVFRZ0F5QUFJQVViSVFBZ0F5RUZEQUFMQ3lBQUtBSVlJUW9DUUNBQUtBSU1JZ2dnQUVZTkFDQUFLQUlJSWdOQkFDZ0NtTkNBZ0FCSkdpQUlJQU0yQWdnZ0F5QUlOZ0lNREFzTEFrQWdBRUVVYWlJRktBSUFJZ01OQUNBQUtBSVFJZ05GRFFNZ0FFRVFhaUVGQ3dOQUlBVWhDeUFESWdoQkZHb2lCU2dDQUNJRERRQWdDRUVRYWlFRklBZ29BaEFpQXcwQUN5QUxRUUEyQWdBTUNndEJmeUVDSUFCQnYzOUxEUUFnQUVFVGFpSURRWEJ4SVFKQkFDZ0NqTkNBZ0FBaUIwVU5BRUVBSVFzQ1FDQUNRWUFDU1EwQVFSOGhDeUFDUWYvLy93ZExEUUFnQTBFSWRpSURJQU5CZ1A0L2FrRVFka0VJY1NJRGRDSUVJQVJCZ09BZmFrRVFka0VFY1NJRWRDSUZJQVZCZ0lBUGFrRVFka0VDY1NJRmRFRVBkaUFESUFSeUlBVnlheUlEUVFGMElBSWdBMEVWYW5aQkFYRnlRUnhxSVFzTFFRQWdBbXNoQkFKQUFrQUNRQUpBSUF0QkFuUkJ1TktBZ0FCcUtBSUFJZ1VOQUVFQUlRTkJBQ0VJREFFTFFRQWhBeUFDUVFCQkdTQUxRUUYyYXlBTFFSOUdHM1FoQUVFQUlRZ0RRQUpBSUFVb0FnUkJlSEVnQW1zaUJpQUVUdzBBSUFZaEJDQUZJUWdnQmcwQVFRQWhCQ0FGSVFnZ0JTRUREQU1MSUFNZ0JVRVVhaWdDQUNJR0lBWWdCU0FBUVIxMlFRUnhha0VRYWlnQ0FDSUZSaHNnQXlBR0d5RURJQUJCQVhRaEFDQUZEUUFMQ3dKQUlBTWdDSElOQUVFQUlRaEJBaUFMZENJRFFRQWdBMnR5SUFkeElnTkZEUU1nQTBFQUlBTnJjVUYvYWlJRElBTkJESFpCRUhFaUEzWWlCVUVGZGtFSWNTSUFJQU55SUFVZ0FIWWlBMEVDZGtFRWNTSUZjaUFESUFWMklnTkJBWFpCQW5FaUJYSWdBeUFGZGlJRFFRRjJRUUZ4SWdWeUlBTWdCWFpxUVFKMFFialNnSUFBYWlnQ0FDRURDeUFEUlEwQkN3TkFJQU1vQWdSQmVIRWdBbXNpQmlBRVNTRUFBa0FnQXlnQ0VDSUZEUUFnQTBFVWFpZ0NBQ0VGQ3lBR0lBUWdBQnNoQkNBRElBZ2dBQnNoQ0NBRklRTWdCUTBBQ3dzZ0NFVU5BQ0FFUVFBb0FwRFFnSUFBSUFKclR3MEFJQWdvQWhnaEN3SkFJQWdvQWd3aUFDQUlSZzBBSUFnb0FnZ2lBMEVBS0FLWTBJQ0FBRWthSUFBZ0F6WUNDQ0FESUFBMkFnd01DUXNDUUNBSVFSUnFJZ1VvQWdBaUF3MEFJQWdvQWhBaUEwVU5BeUFJUVJCcUlRVUxBMEFnQlNFR0lBTWlBRUVVYWlJRktBSUFJZ01OQUNBQVFSQnFJUVVnQUNnQ0VDSUREUUFMSUFaQkFEWUNBQXdJQ3dKQVFRQW9BcERRZ0lBQUlnTWdBa2tOQUVFQUtBS2MwSUNBQUNFRUFrQUNRQ0FESUFKcklnVkJFRWtOQUNBRUlBSnFJZ0FnQlVFQmNqWUNCRUVBSUFVMkFwRFFnSUFBUVFBZ0FEWUNuTkNBZ0FBZ0JDQURhaUFGTmdJQUlBUWdBa0VEY2pZQ0JBd0JDeUFFSUFOQkEzSTJBZ1FnQkNBRGFpSURJQU1vQWdSQkFYSTJBZ1JCQUVFQU5nS2MwSUNBQUVFQVFRQTJBcERRZ0lBQUN5QUVRUWhxSVFNTUNnc0NRRUVBS0FLVTBJQ0FBQ0lBSUFKTkRRQkJBQ2dDb05DQWdBQWlBeUFDYWlJRUlBQWdBbXNpQlVFQmNqWUNCRUVBSUFVMkFwVFFnSUFBUVFBZ0JEWUNvTkNBZ0FBZ0F5QUNRUU55TmdJRUlBTkJDR29oQXd3S0N3SkFBa0JCQUNnQzROT0FnQUJGRFFCQkFDZ0M2Tk9BZ0FBaEJBd0JDMEVBUW44M0F1elRnSUFBUVFCQ2dJQ0VnSUNBd0FBM0F1VFRnSUFBUVFBZ0FVRU1ha0Z3Y1VIWXF0V3FCWE0yQXVEVGdJQUFRUUJCQURZQzlOT0FnQUJCQUVFQU5nTEUwNENBQUVHQWdBUWhCQXRCQUNFREFrQWdCQ0FDUWNjQWFpSUhhaUlHUVFBZ0JHc2lDM0VpQ0NBQ1N3MEFRUUJCTURZQytOT0FnQUFNQ2dzQ1FFRUFLQUxBMDRDQUFDSURSUTBBQWtCQkFDZ0N1Tk9BZ0FBaUJDQUlhaUlGSUFSTkRRQWdCU0FEVFEwQkMwRUFJUU5CQUVFd05nTDQwNENBQUF3S0MwRUFMUURFMDRDQUFFRUVjUTBFQWtBQ1FBSkFRUUFvQXFEUWdJQUFJZ1JGRFFCQnlOT0FnQUFoQXdOQUFrQWdBeWdDQUNJRklBUkxEUUFnQlNBREtBSUVhaUFFU3cwREN5QURLQUlJSWdNTkFBc0xRUUFReTRDQWdBQWlBRUYvUmcwRklBZ2hCZ0pBUVFBb0F1VFRnSUFBSWdOQmYyb2lCQ0FBY1VVTkFDQUlJQUJySUFRZ0FHcEJBQ0FEYTNGcUlRWUxJQVlnQWswTkJTQUdRZjcvLy84SFN3MEZBa0JCQUNnQ3dOT0FnQUFpQTBVTkFFRUFLQUs0MDRDQUFDSUVJQVpxSWdVZ0JFME5CaUFGSUFOTERRWUxJQVlReTRDQWdBQWlBeUFBUncwQkRBY0xJQVlnQUdzZ0MzRWlCa0grLy8vL0Iwc05CQ0FHRU11QWdJQUFJZ0FnQXlnQ0FDQURLQUlFYWtZTkF5QUFJUU1MQWtBZ0EwRi9SZzBBSUFKQnlBQnFJQVpORFFBQ1FDQUhJQVpyUVFBb0F1alRnSUFBSWdScVFRQWdCR3R4SWdSQi92Ly8vd2RORFFBZ0F5RUFEQWNMQWtBZ0JCRExnSUNBQUVGL1JnMEFJQVFnQm1vaEJpQURJUUFNQnd0QkFDQUdheERMZ0lDQUFCb01CQXNnQXlFQUlBTkJmMGNOQlF3REMwRUFJUWdNQnd0QkFDRUFEQVVMSUFCQmYwY05BZ3RCQUVFQUtBTEUwNENBQUVFRWNqWUN4Tk9BZ0FBTElBaEIvdi8vL3dkTERRRWdDQkRMZ0lDQUFDRUFRUUFReTRDQWdBQWhBeUFBUVg5R0RRRWdBMEYvUmcwQklBQWdBMDhOQVNBRElBQnJJZ1lnQWtFNGFrME5BUXRCQUVFQUtBSzQwNENBQUNBR2FpSUROZ0s0MDRDQUFBSkFJQU5CQUNnQ3ZOT0FnQUJORFFCQkFDQUROZ0s4MDRDQUFBc0NRQUpBQWtBQ1FFRUFLQUtnMElDQUFDSUVSUTBBUWNqVGdJQUFJUU1EUUNBQUlBTW9BZ0FpQlNBREtBSUVJZ2hxUmcwQ0lBTW9BZ2dpQXcwQURBTUxDd0pBQWtCQkFDZ0NtTkNBZ0FBaUEwVU5BQ0FBSUFOUERRRUxRUUFnQURZQ21OQ0FnQUFMUVFBaEEwRUFJQVkyQXN6VGdJQUFRUUFnQURZQ3lOT0FnQUJCQUVGL05nS28wSUNBQUVFQVFRQW9BdURUZ0lBQU5nS3MwSUNBQUVFQVFRQTJBdFRUZ0lBQUEwQWdBMEhFMElDQUFHb2dBMEc0MElDQUFHb2lCRFlDQUNBRUlBTkJzTkNBZ0FCcUlnVTJBZ0FnQTBHODBJQ0FBR29nQlRZQ0FDQURRY3pRZ0lBQWFpQURRY0RRZ0lBQWFpSUZOZ0lBSUFVZ0JEWUNBQ0FEUWRUUWdJQUFhaUFEUWNqUWdJQUFhaUlFTmdJQUlBUWdCVFlDQUNBRFFkRFFnSUFBYWlBRU5nSUFJQU5CSUdvaUEwR0FBa2NOQUFzZ0FFRjRJQUJyUVE5eFFRQWdBRUVJYWtFUGNSc2lBMm9pQkNBR1FVaHFJZ1VnQTJzaUEwRUJjallDQkVFQVFRQW9BdkRUZ0lBQU5nS2swSUNBQUVFQUlBTTJBcFRRZ0lBQVFRQWdCRFlDb05DQWdBQWdBQ0FGYWtFNE5nSUVEQUlMSUFNdEFBeEJDSEVOQUNBRUlBVkpEUUFnQkNBQVR3MEFJQVJCZUNBRWEwRVBjVUVBSUFSQkNHcEJEM0ViSWdWcUlnQkJBQ2dDbE5DQWdBQWdCbW9pQ3lBRmF5SUZRUUZ5TmdJRUlBTWdDQ0FHYWpZQ0JFRUFRUUFvQXZEVGdJQUFOZ0trMElDQUFFRUFJQVUyQXBUUWdJQUFRUUFnQURZQ29OQ0FnQUFnQkNBTGFrRTROZ0lFREFFTEFrQWdBRUVBS0FLWTBJQ0FBQ0lJVHcwQVFRQWdBRFlDbU5DQWdBQWdBQ0VJQ3lBQUlBWnFJUVZCeU5PQWdBQWhBd0pBQWtBQ1FBSkFBa0FDUUFKQUEwQWdBeWdDQUNBRlJnMEJJQU1vQWdnaUF3MEFEQUlMQ3lBRExRQU1RUWh4UlEwQkMwSEkwNENBQUNFREEwQUNRQ0FES0FJQUlnVWdCRXNOQUNBRklBTW9BZ1JxSWdVZ0JFc05Bd3NnQXlnQ0NDRUREQUFMQ3lBRElBQTJBZ0FnQXlBREtBSUVJQVpxTmdJRUlBQkJlQ0FBYTBFUGNVRUFJQUJCQ0dwQkQzRWJhaUlMSUFKQkEzSTJBZ1FnQlVGNElBVnJRUTl4UVFBZ0JVRUlha0VQY1J0cUlnWWdDeUFDYWlJQ2F5RURBa0FnQmlBRVJ3MEFRUUFnQWpZQ29OQ0FnQUJCQUVFQUtBS1UwSUNBQUNBRGFpSUROZ0tVMElDQUFDQUNJQU5CQVhJMkFnUU1Bd3NDUUNBR1FRQW9BcHpRZ0lBQVJ3MEFRUUFnQWpZQ25OQ0FnQUJCQUVFQUtBS1EwSUNBQUNBRGFpSUROZ0tRMElDQUFDQUNJQU5CQVhJMkFnUWdBaUFEYWlBRE5nSUFEQU1MQWtBZ0JpZ0NCQ0lFUVFOeFFRRkhEUUFnQkVGNGNTRUhBa0FDUUNBRVFmOEJTdzBBSUFZb0FnZ2lCU0FFUVFOMklnaEJBM1JCc05DQWdBQnFJZ0JHR2dKQUlBWW9BZ3dpQkNBRlJ3MEFRUUJCQUNnQ2lOQ0FnQUJCZmlBSWQzRTJBb2pRZ0lBQURBSUxJQVFnQUVZYUlBUWdCVFlDQ0NBRklBUTJBZ3dNQVFzZ0JpZ0NHQ0VKQWtBQ1FDQUdLQUlNSWdBZ0JrWU5BQ0FHS0FJSUlnUWdDRWthSUFBZ0JEWUNDQ0FFSUFBMkFnd01BUXNDUUNBR1FSUnFJZ1FvQWdBaUJRMEFJQVpCRUdvaUJDZ0NBQ0lGRFFCQkFDRUFEQUVMQTBBZ0JDRUlJQVVpQUVFVWFpSUVLQUlBSWdVTkFDQUFRUkJxSVFRZ0FDZ0NFQ0lGRFFBTElBaEJBRFlDQUFzZ0NVVU5BQUpBQWtBZ0JpQUdLQUljSWdWQkFuUkJ1TktBZ0FCcUlnUW9BZ0JIRFFBZ0JDQUFOZ0lBSUFBTkFVRUFRUUFvQW96UWdJQUFRWDRnQlhkeE5nS00wSUNBQUF3Q0N5QUpRUkJCRkNBSktBSVFJQVpHRzJvZ0FEWUNBQ0FBUlEwQkN5QUFJQWsyQWhnQ1FDQUdLQUlRSWdSRkRRQWdBQ0FFTmdJUUlBUWdBRFlDR0FzZ0JpZ0NGQ0lFUlEwQUlBQkJGR29nQkRZQ0FDQUVJQUEyQWhnTElBY2dBMm9oQXlBR0lBZHFJZ1lvQWdRaEJBc2dCaUFFUVg1eE5nSUVJQUlnQTJvZ0F6WUNBQ0FDSUFOQkFYSTJBZ1FDUUNBRFFmOEJTdzBBSUFOQmVIRkJzTkNBZ0FCcUlRUUNRQUpBUVFBb0FvalFnSUFBSWdWQkFTQURRUU4yZENJRGNRMEFRUUFnQlNBRGNqWUNpTkNBZ0FBZ0JDRUREQUVMSUFRb0FnZ2hBd3NnQXlBQ05nSU1JQVFnQWpZQ0NDQUNJQVEyQWd3Z0FpQUROZ0lJREFNTFFSOGhCQUpBSUFOQi8vLy9CMHNOQUNBRFFRaDJJZ1FnQkVHQS9qOXFRUkIyUVFoeElnUjBJZ1VnQlVHQTRCOXFRUkIyUVFSeElnVjBJZ0FnQUVHQWdBOXFRUkIyUVFKeElnQjBRUTkySUFRZ0JYSWdBSEpySWdSQkFYUWdBeUFFUVJWcWRrRUJjWEpCSEdvaEJBc2dBaUFFTmdJY0lBSkNBRGNDRUNBRVFRSjBRYmpTZ0lBQWFpRUZBa0JCQUNnQ2pOQ0FnQUFpQUVFQklBUjBJZ2h4RFFBZ0JTQUNOZ0lBUVFBZ0FDQUljallDak5DQWdBQWdBaUFGTmdJWUlBSWdBallDQ0NBQ0lBSTJBZ3dNQXdzZ0EwRUFRUmtnQkVFQmRtc2dCRUVmUmh0MElRUWdCU2dDQUNFQUEwQWdBQ0lGS0FJRVFYaHhJQU5HRFFJZ0JFRWRkaUVBSUFSQkFYUWhCQ0FGSUFCQkJIRnFRUkJxSWdnb0FnQWlBQTBBQ3lBSUlBSTJBZ0FnQWlBRk5nSVlJQUlnQWpZQ0RDQUNJQUkyQWdnTUFnc2dBRUY0SUFCclFROXhRUUFnQUVFSWFrRVBjUnNpQTJvaUN5QUdRVWhxSWdnZ0Eyc2lBMEVCY2pZQ0JDQUFJQWhxUVRnMkFnUWdCQ0FGUVRjZ0JXdEJEM0ZCQUNBRlFVbHFRUTl4RzJwQlFXb2lDQ0FJSUFSQkVHcEpHeUlJUVNNMkFnUkJBRUVBS0FMdzA0Q0FBRFlDcE5DQWdBQkJBQ0FETmdLVTBJQ0FBRUVBSUFzMkFxRFFnSUFBSUFoQkVHcEJBQ2tDME5PQWdBQTNBZ0FnQ0VFQUtRTEkwNENBQURjQ0NFRUFJQWhCQ0dvMkF0RFRnSUFBUVFBZ0JqWUN6Tk9BZ0FCQkFDQUFOZ0xJMDRDQUFFRUFRUUEyQXRUVGdJQUFJQWhCSkdvaEF3TkFJQU5CQnpZQ0FDQURRUVJxSWdNZ0JVa05BQXNnQ0NBRVJnMERJQWdnQ0NnQ0JFRitjVFlDQkNBSUlBZ2dCR3NpQURZQ0FDQUVJQUJCQVhJMkFnUUNRQ0FBUWY4QlN3MEFJQUJCZUhGQnNOQ0FnQUJxSVFNQ1FBSkFRUUFvQW9qUWdJQUFJZ1ZCQVNBQVFRTjJkQ0lBY1EwQVFRQWdCU0FBY2pZQ2lOQ0FnQUFnQXlFRkRBRUxJQU1vQWdnaEJRc2dCU0FFTmdJTUlBTWdCRFlDQ0NBRUlBTTJBZ3dnQkNBRk5nSUlEQVFMUVI4aEF3SkFJQUJCLy8vL0Iwc05BQ0FBUVFoMklnTWdBMEdBL2o5cVFSQjJRUWh4SWdOMElnVWdCVUdBNEI5cVFSQjJRUVJ4SWdWMElnZ2dDRUdBZ0E5cVFSQjJRUUp4SWdoMFFROTJJQU1nQlhJZ0NISnJJZ05CQVhRZ0FDQURRUlZxZGtFQmNYSkJIR29oQXdzZ0JDQUROZ0ljSUFSQ0FEY0NFQ0FEUVFKMFFialNnSUFBYWlFRkFrQkJBQ2dDak5DQWdBQWlDRUVCSUFOMElnWnhEUUFnQlNBRU5nSUFRUUFnQ0NBR2NqWUNqTkNBZ0FBZ0JDQUZOZ0lZSUFRZ0JEWUNDQ0FFSUFRMkFnd01CQXNnQUVFQVFSa2dBMEVCZG1zZ0EwRWZSaHQwSVFNZ0JTZ0NBQ0VJQTBBZ0NDSUZLQUlFUVhoeElBQkdEUU1nQTBFZGRpRUlJQU5CQVhRaEF5QUZJQWhCQkhGcVFSQnFJZ1lvQWdBaUNBMEFDeUFHSUFRMkFnQWdCQ0FGTmdJWUlBUWdCRFlDRENBRUlBUTJBZ2dNQXdzZ0JTZ0NDQ0lESUFJMkFnd2dCU0FDTmdJSUlBSkJBRFlDR0NBQ0lBVTJBZ3dnQWlBRE5nSUlDeUFMUVFocUlRTU1CUXNnQlNnQ0NDSURJQVEyQWd3Z0JTQUVOZ0lJSUFSQkFEWUNHQ0FFSUFVMkFnd2dCQ0FETmdJSUMwRUFLQUtVMElDQUFDSURJQUpORFFCQkFDZ0NvTkNBZ0FBaUJDQUNhaUlGSUFNZ0Ftc2lBMEVCY2pZQ0JFRUFJQU0yQXBUUWdJQUFRUUFnQlRZQ29OQ0FnQUFnQkNBQ1FRTnlOZ0lFSUFSQkNHb2hBd3dEQzBFQUlRTkJBRUV3TmdMNDA0Q0FBQXdDQ3dKQUlBdEZEUUFDUUFKQUlBZ2dDQ2dDSENJRlFRSjBRYmpTZ0lBQWFpSURLQUlBUncwQUlBTWdBRFlDQUNBQURRRkJBQ0FIUVg0Z0JYZHhJZ2MyQW96UWdJQUFEQUlMSUF0QkVFRVVJQXNvQWhBZ0NFWWJhaUFBTmdJQUlBQkZEUUVMSUFBZ0N6WUNHQUpBSUFnb0FoQWlBMFVOQUNBQUlBTTJBaEFnQXlBQU5nSVlDeUFJUVJScUtBSUFJZ05GRFFBZ0FFRVVhaUFETmdJQUlBTWdBRFlDR0FzQ1FBSkFJQVJCRDBzTkFDQUlJQVFnQW1vaUEwRURjallDQkNBSUlBTnFJZ01nQXlnQ0JFRUJjallDQkF3QkN5QUlJQUpxSWdBZ0JFRUJjallDQkNBSUlBSkJBM0kyQWdRZ0FDQUVhaUFFTmdJQUFrQWdCRUgvQVVzTkFDQUVRWGh4UWJEUWdJQUFhaUVEQWtBQ1FFRUFLQUtJMElDQUFDSUZRUUVnQkVFRGRuUWlCSEVOQUVFQUlBVWdCSEkyQW9qUWdJQUFJQU1oQkF3QkN5QURLQUlJSVFRTElBUWdBRFlDRENBRElBQTJBZ2dnQUNBRE5nSU1JQUFnQkRZQ0NBd0JDMEVmSVFNQ1FDQUVRZi8vL3dkTERRQWdCRUVJZGlJRElBTkJnUDQvYWtFUWRrRUljU0lEZENJRklBVkJnT0FmYWtFUWRrRUVjU0lGZENJQ0lBSkJnSUFQYWtFUWRrRUNjU0lDZEVFUGRpQURJQVZ5SUFKeWF5SURRUUYwSUFRZ0EwRVZhblpCQVhGeVFSeHFJUU1MSUFBZ0F6WUNIQ0FBUWdBM0FoQWdBMEVDZEVHNDBvQ0FBR29oQlFKQUlBZEJBU0FEZENJQ2NRMEFJQVVnQURZQ0FFRUFJQWNnQW5JMkFvelFnSUFBSUFBZ0JUWUNHQ0FBSUFBMkFnZ2dBQ0FBTmdJTURBRUxJQVJCQUVFWklBTkJBWFpySUFOQkgwWWJkQ0VESUFVb0FnQWhBZ0pBQTBBZ0FpSUZLQUlFUVhoeElBUkdEUUVnQTBFZGRpRUNJQU5CQVhRaEF5QUZJQUpCQkhGcVFSQnFJZ1lvQWdBaUFnMEFDeUFHSUFBMkFnQWdBQ0FGTmdJWUlBQWdBRFlDRENBQUlBQTJBZ2dNQVFzZ0JTZ0NDQ0lESUFBMkFnd2dCU0FBTmdJSUlBQkJBRFlDR0NBQUlBVTJBZ3dnQUNBRE5nSUlDeUFJUVFocUlRTU1BUXNDUUNBS1JRMEFBa0FDUUNBQUlBQW9BaHdpQlVFQ2RFRzQwb0NBQUdvaUF5Z0NBRWNOQUNBRElBZzJBZ0FnQ0EwQlFRQWdDVUYrSUFWM2NUWUNqTkNBZ0FBTUFnc2dDa0VRUVJRZ0NpZ0NFQ0FBUmh0cUlBZzJBZ0FnQ0VVTkFRc2dDQ0FLTmdJWUFrQWdBQ2dDRUNJRFJRMEFJQWdnQXpZQ0VDQURJQWcyQWhnTElBQkJGR29vQWdBaUEwVU5BQ0FJUVJScUlBTTJBZ0FnQXlBSU5nSVlDd0pBQWtBZ0JFRVBTdzBBSUFBZ0JDQUNhaUlEUVFOeU5nSUVJQUFnQTJvaUF5QURLQUlFUVFGeU5nSUVEQUVMSUFBZ0Ftb2lCU0FFUVFGeU5nSUVJQUFnQWtFRGNqWUNCQ0FGSUFScUlBUTJBZ0FDUUNBSFJRMEFJQWRCZUhGQnNOQ0FnQUJxSVFKQkFDZ0NuTkNBZ0FBaEF3SkFBa0JCQVNBSFFRTjJkQ0lJSUFaeERRQkJBQ0FJSUFaeU5nS0kwSUNBQUNBQ0lRZ01BUXNnQWlnQ0NDRUlDeUFJSUFNMkFnd2dBaUFETmdJSUlBTWdBallDRENBRElBZzJBZ2dMUVFBZ0JUWUNuTkNBZ0FCQkFDQUVOZ0tRMElDQUFBc2dBRUVJYWlFREN5QUJRUkJxSklDQWdJQUFJQU1MQ2dBZ0FCREpnSUNBQUF2aURRRUhmd0pBSUFCRkRRQWdBRUY0YWlJQklBQkJmR29vQWdBaUFrRjRjU0lBYWlFREFrQWdBa0VCY1EwQUlBSkJBM0ZGRFFFZ0FTQUJLQUlBSWdKcklnRkJBQ2dDbU5DQWdBQWlCRWtOQVNBQ0lBQnFJUUFDUUNBQlFRQW9BcHpRZ0lBQVJnMEFBa0FnQWtIL0FVc05BQ0FCS0FJSUlnUWdBa0VEZGlJRlFRTjBRYkRRZ0lBQWFpSUdSaG9DUUNBQktBSU1JZ0lnQkVjTkFFRUFRUUFvQW9qUWdJQUFRWDRnQlhkeE5nS0kwSUNBQUF3REN5QUNJQVpHR2lBQ0lBUTJBZ2dnQkNBQ05nSU1EQUlMSUFFb0FoZ2hCd0pBQWtBZ0FTZ0NEQ0lHSUFGR0RRQWdBU2dDQ0NJQ0lBUkpHaUFHSUFJMkFnZ2dBaUFHTmdJTURBRUxBa0FnQVVFVWFpSUNLQUlBSWdRTkFDQUJRUkJxSWdJb0FnQWlCQTBBUVFBaEJnd0JDd05BSUFJaEJTQUVJZ1pCRkdvaUFpZ0NBQ0lFRFFBZ0JrRVFhaUVDSUFZb0FoQWlCQTBBQ3lBRlFRQTJBZ0FMSUFkRkRRRUNRQUpBSUFFZ0FTZ0NIQ0lFUVFKMFFialNnSUFBYWlJQ0tBSUFSdzBBSUFJZ0JqWUNBQ0FHRFFGQkFFRUFLQUtNMElDQUFFRitJQVIzY1RZQ2pOQ0FnQUFNQXdzZ0IwRVFRUlFnQnlnQ0VDQUJSaHRxSUFZMkFnQWdCa1VOQWdzZ0JpQUhOZ0lZQWtBZ0FTZ0NFQ0lDUlEwQUlBWWdBallDRUNBQ0lBWTJBaGdMSUFFb0FoUWlBa1VOQVNBR1FSUnFJQUkyQWdBZ0FpQUdOZ0lZREFFTElBTW9BZ1FpQWtFRGNVRURSdzBBSUFNZ0FrRitjVFlDQkVFQUlBQTJBcERRZ0lBQUlBRWdBR29nQURZQ0FDQUJJQUJCQVhJMkFnUVBDeUFCSUFOUERRQWdBeWdDQkNJQ1FRRnhSUTBBQWtBQ1FDQUNRUUp4RFFBQ1FDQURRUUFvQXFEUWdJQUFSdzBBUVFBZ0FUWUNvTkNBZ0FCQkFFRUFLQUtVMElDQUFDQUFhaUlBTmdLVTBJQ0FBQ0FCSUFCQkFYSTJBZ1FnQVVFQUtBS2MwSUNBQUVjTkEwRUFRUUEyQXBEUWdJQUFRUUJCQURZQ25OQ0FnQUFQQ3dKQUlBTkJBQ2dDbk5DQWdBQkhEUUJCQUNBQk5nS2MwSUNBQUVFQVFRQW9BcERRZ0lBQUlBQnFJZ0EyQXBEUWdJQUFJQUVnQUVFQmNqWUNCQ0FCSUFCcUlBQTJBZ0FQQ3lBQ1FYaHhJQUJxSVFBQ1FBSkFJQUpCL3dGTERRQWdBeWdDQ0NJRUlBSkJBM1lpQlVFRGRFR3cwSUNBQUdvaUJrWWFBa0FnQXlnQ0RDSUNJQVJIRFFCQkFFRUFLQUtJMElDQUFFRitJQVYzY1RZQ2lOQ0FnQUFNQWdzZ0FpQUdSaG9nQWlBRU5nSUlJQVFnQWpZQ0RBd0JDeUFES0FJWUlRY0NRQUpBSUFNb0Fnd2lCaUFEUmcwQUlBTW9BZ2dpQWtFQUtBS1kwSUNBQUVrYUlBWWdBallDQ0NBQ0lBWTJBZ3dNQVFzQ1FDQURRUlJxSWdJb0FnQWlCQTBBSUFOQkVHb2lBaWdDQUNJRURRQkJBQ0VHREFFTEEwQWdBaUVGSUFRaUJrRVVhaUlDS0FJQUlnUU5BQ0FHUVJCcUlRSWdCaWdDRUNJRURRQUxJQVZCQURZQ0FBc2dCMFVOQUFKQUFrQWdBeUFES0FJY0lnUkJBblJCdU5LQWdBQnFJZ0lvQWdCSERRQWdBaUFHTmdJQUlBWU5BVUVBUVFBb0FvelFnSUFBUVg0Z0JIZHhOZ0tNMElDQUFBd0NDeUFIUVJCQkZDQUhLQUlRSUFOR0cyb2dCallDQUNBR1JRMEJDeUFHSUFjMkFoZ0NRQ0FES0FJUUlnSkZEUUFnQmlBQ05nSVFJQUlnQmpZQ0dBc2dBeWdDRkNJQ1JRMEFJQVpCRkdvZ0FqWUNBQ0FDSUFZMkFoZ0xJQUVnQUdvZ0FEWUNBQ0FCSUFCQkFYSTJBZ1FnQVVFQUtBS2MwSUNBQUVjTkFVRUFJQUEyQXBEUWdJQUFEd3NnQXlBQ1FYNXhOZ0lFSUFFZ0FHb2dBRFlDQUNBQklBQkJBWEkyQWdRTEFrQWdBRUgvQVVzTkFDQUFRWGh4UWJEUWdJQUFhaUVDQWtBQ1FFRUFLQUtJMElDQUFDSUVRUUVnQUVFRGRuUWlBSEVOQUVFQUlBUWdBSEkyQW9qUWdJQUFJQUloQUF3QkN5QUNLQUlJSVFBTElBQWdBVFlDRENBQ0lBRTJBZ2dnQVNBQ05nSU1JQUVnQURZQ0NBOExRUjhoQWdKQUlBQkIvLy8vQjBzTkFDQUFRUWgySWdJZ0FrR0EvajlxUVJCMlFRaHhJZ0owSWdRZ0JFR0E0QjlxUVJCMlFRUnhJZ1IwSWdZZ0JrR0FnQTlxUVJCMlFRSnhJZ1owUVE5MklBSWdCSElnQm5KcklnSkJBWFFnQUNBQ1FSVnFka0VCY1hKQkhHb2hBZ3NnQVNBQ05nSWNJQUZDQURjQ0VDQUNRUUowUWJqU2dJQUFhaUVFQWtBQ1FFRUFLQUtNMElDQUFDSUdRUUVnQW5RaUEzRU5BQ0FFSUFFMkFnQkJBQ0FHSUFOeU5nS00wSUNBQUNBQklBUTJBaGdnQVNBQk5nSUlJQUVnQVRZQ0RBd0JDeUFBUVFCQkdTQUNRUUYyYXlBQ1FSOUdHM1FoQWlBRUtBSUFJUVlDUUFOQUlBWWlCQ2dDQkVGNGNTQUFSZzBCSUFKQkhYWWhCaUFDUVFGMElRSWdCQ0FHUVFSeGFrRVFhaUlES0FJQUlnWU5BQXNnQXlBQk5nSUFJQUVnQkRZQ0dDQUJJQUUyQWd3Z0FTQUJOZ0lJREFFTElBUW9BZ2dpQUNBQk5nSU1JQVFnQVRZQ0NDQUJRUUEyQWhnZ0FTQUVOZ0lNSUFFZ0FEWUNDQXRCQUVFQUtBS28wSUNBQUVGL2FpSUJRWDhnQVJzMkFxalFnSUFBQ3dzRUFBQUFDMDRBQWtBZ0FBMEFQd0JCRUhRUEN3SkFJQUJCLy84RGNRMEFJQUJCZjB3TkFBSkFJQUJCRUhaQUFDSUFRWDlIRFFCQkFFRXdOZ0w0MDRDQUFFRi9Ed3NnQUVFUWRBOExFTXFBZ0lBQUFBdnlBZ0lEZndGK0FrQWdBa1VOQUNBQUlBRTZBQUFnQWlBQWFpSURRWDlxSUFFNkFBQWdBa0VEU1EwQUlBQWdBVG9BQWlBQUlBRTZBQUVnQTBGOWFpQUJPZ0FBSUFOQmZtb2dBVG9BQUNBQ1FRZEpEUUFnQUNBQk9nQURJQU5CZkdvZ0FUb0FBQ0FDUVFsSkRRQWdBRUVBSUFCclFRTnhJZ1JxSWdNZ0FVSC9BWEZCZ1lLRUNHd2lBVFlDQUNBRElBSWdCR3RCZkhFaUJHb2lBa0Y4YWlBQk5nSUFJQVJCQ1VrTkFDQURJQUUyQWdnZ0F5QUJOZ0lFSUFKQmVHb2dBVFlDQUNBQ1FYUnFJQUUyQWdBZ0JFRVpTUTBBSUFNZ0FUWUNHQ0FESUFFMkFoUWdBeUFCTmdJUUlBTWdBVFlDRENBQ1FYQnFJQUUyQWdBZ0FrRnNhaUFCTmdJQUlBSkJhR29nQVRZQ0FDQUNRV1JxSUFFMkFnQWdCQ0FEUVFSeFFSaHlJZ1ZySWdKQklFa05BQ0FCclVLQmdJQ0FFSDRoQmlBRElBVnFJUUVEUUNBQklBWTNBeGdnQVNBR053TVFJQUVnQmpjRENDQUJJQVkzQXdBZ0FVRWdhaUVCSUFKQllHb2lBa0VmU3cwQUN3c2dBQXNMamtnQkFFR0FDQXVHU0FFQUFBQUNBQUFBQXdBQUFBQUFBQUFBQUFBQUJBQUFBQVVBQUFBQUFBQUFBQUFBQUFZQUFBQUhBQUFBQ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVNXNTJZV3hwWkNCamFHRnlJR2x1SUhWeWJDQnhkV1Z5ZVFCVGNHRnVJR05oYkd4aVlXTnJJR1Z5Y205eUlHbHVJRzl1WDJKdlpIa0FRMjl1ZEdWdWRDMU1aVzVuZEdnZ2IzWmxjbVpzYjNjQVEyaDFibXNnYzJsNlpTQnZkbVZ5Wm14dmR3QlNaWE53YjI1elpTQnZkbVZ5Wm14dmR3QkpiblpoYkdsa0lHMWxkR2h2WkNCbWIzSWdTRlJVVUM5NExuZ2djbVZ4ZFdWemRBQkpiblpoYkdsa0lHMWxkR2h2WkNCbWIzSWdVbFJUVUM5NExuZ2djbVZ4ZFdWemRBQkZlSEJsWTNSbFpDQlRUMVZTUTBVZ2JXVjBhRzlrSUdadmNpQkpRMFV2ZUM1NElISmxjWFZsYzNRQVNXNTJZV3hwWkNCamFHRnlJR2x1SUhWeWJDQm1jbUZuYldWdWRDQnpkR0Z5ZEFCRmVIQmxZM1JsWkNCa2IzUUFVM0JoYmlCallXeHNZbUZqYXlCbGNuSnZjaUJwYmlCdmJsOXpkR0YwZFhNQVNXNTJZV3hwWkNCeVpYTndiMjV6WlNCemRHRjBkWE1BU1c1MllXeHBaQ0JqYUdGeVlXTjBaWElnYVc0Z1kyaDFibXNnWlhoMFpXNXphVzl1Y3dCVmMyVnlJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDl5WlhObGRHQWdZMkZzYkdKaFkyc2daWEp5YjNJQVlHOXVYMk5vZFc1clgyaGxZV1JsY21BZ1kyRnNiR0poWTJzZ1pYSnliM0lBWUc5dVgyMWxjM05oWjJWZlltVm5hVzVnSUdOaGJHeGlZV05ySUdWeWNtOXlBR0J2Ymw5amFIVnVhMTlsZUhSbGJuTnBiMjVmZG1Gc2RXVmdJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDl6ZEdGMGRYTmZZMjl0Y0d4bGRHVmdJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDkyWlhKemFXOXVYMk52YlhCc1pYUmxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmZFhKc1gyTnZiWEJzWlhSbFlDQmpZV3hzWW1GamF5Qmxjbkp2Y2dCZ2IyNWZZMmgxYm10ZlkyOXRjR3hsZEdWZ0lHTmhiR3hpWVdOcklHVnljbTl5QUdCdmJsOW9aV0ZrWlhKZmRtRnNkV1ZmWTI5dGNHeGxkR1ZnSUdOaGJHeGlZV05ySUdWeWNtOXlBR0J2Ymw5dFpYTnpZV2RsWDJOdmJYQnNaWFJsWUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZmJXVjBhRzlrWDJOdmJYQnNaWFJsWUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZmFHVmhaR1Z5WDJacFpXeGtYMk52YlhCc1pYUmxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmWTJoMWJtdGZaWGgwWlc1emFXOXVYMjVoYldWZ0lHTmhiR3hpWVdOcklHVnljbTl5QUZWdVpYaHdaV04wWldRZ1kyaGhjaUJwYmlCMWNtd2djMlZ5ZG1WeUFFbHVkbUZzYVdRZ2FHVmhaR1Z5SUhaaGJIVmxJR05vWVhJQVNXNTJZV3hwWkNCb1pXRmtaWElnWm1sbGJHUWdZMmhoY2dCVGNHRnVJR05oYkd4aVlXTnJJR1Z5Y205eUlHbHVJRzl1WDNabGNuTnBiMjRBU1c1MllXeHBaQ0J0YVc1dmNpQjJaWEp6YVc5dUFFbHVkbUZzYVdRZ2JXRnFiM0lnZG1WeWMybHZiZ0JGZUhCbFkzUmxaQ0J6Y0dGalpTQmhablJsY2lCMlpYSnphVzl1QUVWNGNHVmpkR1ZrSUVOU1RFWWdZV1owWlhJZ2RtVnljMmx2YmdCSmJuWmhiR2xrSUVoVVZGQWdkbVZ5YzJsdmJnQkpiblpoYkdsa0lHaGxZV1JsY2lCMGIydGxiZ0JUY0dGdUlHTmhiR3hpWVdOcklHVnljbTl5SUdsdUlHOXVYM1Z5YkFCSmJuWmhiR2xrSUdOb1lYSmhZM1JsY25NZ2FXNGdkWEpzQUZWdVpYaHdaV04wWldRZ2MzUmhjblFnWTJoaGNpQnBiaUIxY213QVJHOTFZbXhsSUVBZ2FXNGdkWEpzQUVWdGNIUjVJRU52Ym5SbGJuUXRUR1Z1WjNSb0FFbHVkbUZzYVdRZ1kyaGhjbUZqZEdWeUlHbHVJRU52Ym5SbGJuUXRUR1Z1WjNSb0FFUjFjR3hwWTJGMFpTQkRiMjUwWlc1MExVeGxibWQwYUFCSmJuWmhiR2xrSUdOb1lYSWdhVzRnZFhKc0lIQmhkR2dBUTI5dWRHVnVkQzFNWlc1bmRHZ2dZMkZ1SjNRZ1ltVWdjSEpsYzJWdWRDQjNhWFJvSUZSeVlXNXpabVZ5TFVWdVkyOWthVzVuQUVsdWRtRnNhV1FnWTJoaGNtRmpkR1Z5SUdsdUlHTm9kVzVySUhOcGVtVUFVM0JoYmlCallXeHNZbUZqYXlCbGNuSnZjaUJwYmlCdmJsOW9aV0ZrWlhKZmRtRnNkV1VBVTNCaGJpQmpZV3hzWW1GamF5Qmxjbkp2Y2lCcGJpQnZibDlqYUhWdWExOWxlSFJsYm5OcGIyNWZkbUZzZFdVQVNXNTJZV3hwWkNCamFHRnlZV04wWlhJZ2FXNGdZMmgxYm1zZ1pYaDBaVzV6YVc5dWN5QjJZV3gxWlFCTmFYTnphVzVuSUdWNGNHVmpkR1ZrSUV4R0lHRm1kR1Z5SUdobFlXUmxjaUIyWVd4MVpRQkpiblpoYkdsa0lHQlVjbUZ1YzJabGNpMUZibU52WkdsdVoyQWdhR1ZoWkdWeUlIWmhiSFZsQUVsdWRtRnNhV1FnWTJoaGNtRmpkR1Z5SUdsdUlHTm9kVzVySUdWNGRHVnVjMmx2Ym5NZ2NYVnZkR1VnZG1Gc2RXVUFTVzUyWVd4cFpDQmphR0Z5WVdOMFpYSWdhVzRnWTJoMWJtc2daWGgwWlc1emFXOXVjeUJ4ZFc5MFpXUWdkbUZzZFdVQVVHRjFjMlZrSUdKNUlHOXVYMmhsWVdSbGNuTmZZMjl0Y0d4bGRHVUFTVzUyWVd4cFpDQkZUMFlnYzNSaGRHVUFiMjVmY21WelpYUWdjR0YxYzJVQWIyNWZZMmgxYm10ZmFHVmhaR1Z5SUhCaGRYTmxBRzl1WDIxbGMzTmhaMlZmWW1WbmFXNGdjR0YxYzJVQWIyNWZZMmgxYm10ZlpYaDBaVzV6YVc5dVgzWmhiSFZsSUhCaGRYTmxBRzl1WDNOMFlYUjFjMTlqYjIxd2JHVjBaU0J3WVhWelpRQnZibDkyWlhKemFXOXVYMk52YlhCc1pYUmxJSEJoZFhObEFHOXVYM1Z5YkY5amIyMXdiR1YwWlNCd1lYVnpaUUJ2Ymw5amFIVnVhMTlqYjIxd2JHVjBaU0J3WVhWelpRQnZibDlvWldGa1pYSmZkbUZzZFdWZlkyOXRjR3hsZEdVZ2NHRjFjMlVBYjI1ZmJXVnpjMkZuWlY5amIyMXdiR1YwWlNCd1lYVnpaUUJ2Ymw5dFpYUm9iMlJmWTI5dGNHeGxkR1VnY0dGMWMyVUFiMjVmYUdWaFpHVnlYMlpwWld4a1gyTnZiWEJzWlhSbElIQmhkWE5sQUc5dVgyTm9kVzVyWDJWNGRHVnVjMmx2Ymw5dVlXMWxJSEJoZFhObEFGVnVaWGh3WldOMFpXUWdjM0JoWTJVZ1lXWjBaWElnYzNSaGNuUWdiR2x1WlFCVGNHRnVJR05oYkd4aVlXTnJJR1Z5Y205eUlHbHVJRzl1WDJOb2RXNXJYMlY0ZEdWdWMybHZibDl1WVcxbEFFbHVkbUZzYVdRZ1kyaGhjbUZqZEdWeUlHbHVJR05vZFc1cklHVjRkR1Z1YzJsdmJuTWdibUZ0WlFCUVlYVnpaU0J2YmlCRFQwNU9SVU5VTDFWd1ozSmhaR1VBVUdGMWMyVWdiMjRnVUZKSkwxVndaM0poWkdVQVJYaHdaV04wWldRZ1NGUlVVQzh5SUVOdmJtNWxZM1JwYjI0Z1VISmxabUZqWlFCVGNHRnVJR05oYkd4aVlXTnJJR1Z5Y205eUlHbHVJRzl1WDIxbGRHaHZaQUJGZUhCbFkzUmxaQ0J6Y0dGalpTQmhablJsY2lCdFpYUm9iMlFBVTNCaGJpQmpZV3hzWW1GamF5Qmxjbkp2Y2lCcGJpQnZibDlvWldGa1pYSmZabWxsYkdRQVVHRjFjMlZrQUVsdWRtRnNhV1FnZDI5eVpDQmxibU52ZFc1MFpYSmxaQUJKYm5aaGJHbGtJRzFsZEdodlpDQmxibU52ZFc1MFpYSmxaQUJWYm1WNGNHVmpkR1ZrSUdOb1lYSWdhVzRnZFhKc0lITmphR1Z0WVFCU1pYRjFaWE4wSUdoaGN5QnBiblpoYkdsa0lHQlVjbUZ1YzJabGNpMUZibU52WkdsdVoyQUFVMWRKVkVOSVgxQlNUMWhaQUZWVFJWOVFVazlZV1FCTlMwRkRWRWxXU1ZSWkFGVk9VRkpQUTBWVFUwRkNURVZmUlU1VVNWUlpBRU5QVUZrQVRVOVdSVVJmVUVWU1RVRk9SVTVVVEZrQVZFOVBYMFZCVWt4WkFFNVBWRWxHV1FCR1FVbE1SVVJmUkVWUVJVNUVSVTVEV1FCQ1FVUmZSMEZVUlZkQldRQlFURUZaQUZCVlZBQkRTRVZEUzA5VlZBQkhRVlJGVjBGWlgxUkpUVVZQVlZRQVVrVlJWVVZUVkY5VVNVMUZUMVZVQUU1RlZGZFBVa3RmUTA5T1RrVkRWRjlVU1UxRlQxVlVBRU5QVGs1RlExUkpUMDVmVkVsTlJVOVZWQUJNVDBkSlRsOVVTVTFGVDFWVUFFNUZWRmRQVWt0ZlVrVkJSRjlVU1UxRlQxVlVBRkJQVTFRQVRVbFRSRWxTUlVOVVJVUmZVa1ZSVlVWVFZBQkRURWxGVGxSZlEweFBVMFZFWDFKRlVWVkZVMVFBUTB4SlJVNVVYME5NVDFORlJGOU1UMEZFWDBKQlRFRk9RMFZFWDFKRlVWVkZVMVFBUWtGRVgxSkZVVlZGVTFRQVNGUlVVRjlTUlZGVlJWTlVYMU5GVGxSZlZFOWZTRlJVVUZOZlVFOVNWQUJTUlZCUFVsUUFTVTFmUVY5VVJVRlFUMVFBVWtWVFJWUmZRMDlPVkVWT1ZBQk9UMTlEVDA1VVJVNVVBRkJCVWxSSlFVeGZRMDlPVkVWT1ZBQklVRVZmU1U1V1FVeEpSRjlEVDA1VFZFRk9WQUJJVUVWZlEwSmZVa1ZUUlZRQVIwVlVBRWhRUlY5VFZGSkpRMVFBUTA5T1JreEpRMVFBVkVWTlVFOVNRVkpaWDFKRlJFbFNSVU5VQUZCRlVrMUJUa1ZPVkY5U1JVUkpVa1ZEVkFCRFQwNU9SVU5VQUUxVlRGUkpYMU5VUVZSVlV3QklVRVZmU1U1V1FVeEpSRjlUVkVGVVZWTUFWRTlQWDAxQlRsbGZVa1ZSVlVWVFZGTUFSVUZTVEZsZlNFbE9WRk1BVlU1QlZrRkpURUZDVEVWZlJrOVNYMHhGUjBGTVgxSkZRVk5QVGxNQVQxQlVTVTlPVXdCVFYwbFVRMGhKVGtkZlVGSlBWRTlEVDB4VEFGWkJVa2xCVGxSZlFVeFRUMTlPUlVkUFZFbEJWRVZUQUUxVlRGUkpVRXhGWDBOSVQwbERSVk1BU1U1VVJWSk9RVXhmVTBWU1ZrVlNYMFZTVWs5U0FGZEZRbDlUUlZKV1JWSmZWVTVMVGs5WFRsOUZVbEpQVWdCU1FVbE1SMVZPWDBWU1VrOVNBRWxFUlU1VVNWUlpYMUJTVDFaSlJFVlNYMEZWVkVoRlRsUkpRMEZVU1U5T1gwVlNVazlTQUZOVFRGOURSVkpVU1VaSlEwRlVSVjlGVWxKUFVnQkpUbFpCVEVsRVgxaGZSazlTVjBGU1JFVkVYMFpQVWdCVFJWUmZVRUZTUVUxRlZFVlNBRWRGVkY5UVFWSkJUVVZVUlZJQVNGQkZYMVZUUlZJQVUwVkZYMDlVU0VWU0FFaFFSVjlEUWw5RFNGVk9TMTlJUlVGRVJWSUFUVXREUVV4RlRrUkJVZ0JUUlZSVlVBQlhSVUpmVTBWU1ZrVlNYMGxUWDBSUFYwNEFWRVZCVWtSUFYwNEFTRkJGWDBOTVQxTkZSRjlEVDA1T1JVTlVTVTlPQUVoRlZWSkpVMVJKUTE5RldGQkpVa0ZVU1U5T0FFUkpVME5QVGs1RlExUkZSRjlQVUVWU1FWUkpUMDRBVGs5T1gwRlZWRWhQVWtsVVFWUkpWa1ZmU1U1R1QxSk5RVlJKVDA0QVNGQkZYMGxPVmtGTVNVUmZWa1ZTVTBsUFRnQklVRVZmUTBKZlRVVlRVMEZIUlY5Q1JVZEpUZ0JUU1ZSRlgwbFRYMFpTVDFwRlRnQklVRVZmU1U1V1FVeEpSRjlJUlVGRVJWSmZWRTlMUlU0QVNVNVdRVXhKUkY5VVQwdEZUZ0JHVDFKQ1NVUkVSVTRBUlU1SVFVNURSVjlaVDFWU1gwTkJURTBBU0ZCRlgwbE9Wa0ZNU1VSZlZWSk1BRUpNVDBOTFJVUmZRbGxmVUVGU1JVNVVRVXhmUTA5T1ZGSlBUQUJOUzBOUFRBQkJRMHdBU0ZCRlgwbE9WRVZTVGtGTUFGSkZVVlZGVTFSZlNFVkJSRVZTWDBaSlJVeEVVMTlVVDA5ZlRFRlNSMFZmVlU1UFJrWkpRMGxCVEFCSVVFVmZUMHNBVlU1TVNVNUxBRlZPVEU5RFN3QlFVa2tBVWtWVVVsbGZWMGxVU0FCSVVFVmZTVTVXUVV4SlJGOURUMDVVUlU1VVgweEZUa2RVU0FCSVVFVmZWVTVGV0ZCRlExUkZSRjlEVDA1VVJVNVVYMHhGVGtkVVNBQkdURlZUU0FCUVVrOVFVRUZVUTBnQVRTMVRSVUZTUTBnQVZWSkpYMVJQVDE5TVQwNUhBRkJTVDBORlUxTkpUa2NBVFVsVFEwVk1URUZPUlU5VlUxOVFSVkpUU1ZOVVJVNVVYMWRCVWs1SlRrY0FUVWxUUTBWTVRFRk9SVTlWVTE5WFFWSk9TVTVIQUVoUVJWOUpUbFpCVEVsRVgxUlNRVTVUUmtWU1gwVk9RMDlFU1U1SEFFVjRjR1ZqZEdWa0lFTlNURVlBU0ZCRlgwbE9Wa0ZNU1VSZlEwaFZUa3RmVTBsYVJRQk5UMVpGQUVOUFRsUkpUbFZGQUVoUVJWOURRbDlUVkVGVVZWTmZRMDlOVUV4RlZFVUFTRkJGWDBOQ1gwaEZRVVJGVWxOZlEwOU5VRXhGVkVVQVNGQkZYME5DWDFaRlVsTkpUMDVmUTA5TlVFeEZWRVVBU0ZCRlgwTkNYMVZTVEY5RFQwMVFURVZVUlFCSVVFVmZRMEpmUTBoVlRrdGZRMDlOVUV4RlZFVUFTRkJGWDBOQ1gwaEZRVVJGVWw5V1FVeFZSVjlEVDAxUVRFVlVSUUJJVUVWZlEwSmZRMGhWVGt0ZlJWaFVSVTVUU1U5T1gxWkJURlZGWDBOUFRWQk1SVlJGQUVoUVJWOURRbDlEU0ZWT1MxOUZXRlJGVGxOSlQwNWZUa0ZOUlY5RFQwMVFURVZVUlFCSVVFVmZRMEpmVFVWVFUwRkhSVjlEVDAxUVRFVlVSUUJJVUVWZlEwSmZUVVZVU0U5RVgwTlBUVkJNUlZSRkFFaFFSVjlEUWw5SVJVRkVSVkpmUmtsRlRFUmZRMDlOVUV4RlZFVUFSRVZNUlZSRkFFaFFSVjlKVGxaQlRFbEVYMFZQUmw5VFZFRlVSUUJKVGxaQlRFbEVYMU5UVEY5RFJWSlVTVVpKUTBGVVJRQlFRVlZUUlFCT1QxOVNSVk5RVDA1VFJRQlZUbE5WVUZCUFVsUkZSRjlOUlVSSlFWOVVXVkJGQUVkUFRrVUFUazlVWDBGRFEwVlFWRUZDVEVVQVUwVlNWa2xEUlY5VlRrRldRVWxNUVVKTVJRQlNRVTVIUlY5T1QxUmZVMEZVU1ZOR1NVRkNURVVBVDFKSlIwbE9YMGxUWDFWT1VrVkJRMGhCUWt4RkFGSkZVMUJQVGxORlgwbFRYMU5VUVV4RkFGQlZVa2RGQUUxRlVrZEZBRkpGVVZWRlUxUmZTRVZCUkVWU1gwWkpSVXhFVTE5VVQwOWZURUZTUjBVQVVrVlJWVVZUVkY5SVJVRkVSVkpmVkU5UFgweEJVa2RGQUZCQldVeFBRVVJmVkU5UFgweEJVa2RGQUVsT1UxVkdSa2xEU1VWT1ZGOVRWRTlTUVVkRkFFaFFSVjlRUVZWVFJVUmZWVkJIVWtGRVJRQklVRVZmVUVGVlUwVkVYMGd5WDFWUVIxSkJSRVVBVTA5VlVrTkZBRUZPVGs5VlRrTkZBRlJTUVVORkFFaFFSVjlWVGtWWVVFVkRWRVZFWDFOUVFVTkZBRVJGVTBOU1NVSkZBRlZPVTFWQ1UwTlNTVUpGQUZKRlEwOVNSQUJJVUVWZlNVNVdRVXhKUkY5TlJWUklUMFFBVGs5VVgwWlBWVTVFQUZCU1QxQkdTVTVFQUZWT1FrbE9SQUJTUlVKSlRrUUFWVTVCVlZSSVQxSkpXa1ZFQUUxRlZFaFBSRjlPVDFSZlFVeE1UMWRGUkFCSVZGUlFYMVpGVWxOSlQwNWZUazlVWDFOVlVGQlBVbFJGUkFCQlRGSkZRVVJaWDFKRlVFOVNWRVZFQUVGRFEwVlFWRVZFQUU1UFZGOUpUVkJNUlUxRlRsUkZSQUJNVDA5UVgwUkZWRVZEVkVWRUFFaFFSVjlEVWw5RldGQkZRMVJGUkFCSVVFVmZURVpmUlZoUVJVTlVSVVFBUTFKRlFWUkZSQUJKVFY5VlUwVkVBRWhRUlY5UVFWVlRSVVFBVkVsTlJVOVZWRjlQUTBOVlVrVkVBRkJCV1UxRlRsUmZVa1ZSVlVsU1JVUUFVRkpGUTA5T1JFbFVTVTlPWDFKRlVWVkpVa1ZFQUZCU1QxaFpYMEZWVkVoRlRsUkpRMEZVU1U5T1gxSkZVVlZKVWtWRUFFNUZWRmRQVWt0ZlFWVlVTRVZPVkVsRFFWUkpUMDVmVWtWUlZVbFNSVVFBVEVWT1IxUklYMUpGVVZWSlVrVkVBRk5UVEY5RFJWSlVTVVpKUTBGVVJWOVNSVkZWU1ZKRlJBQlZVRWRTUVVSRlgxSkZVVlZKVWtWRUFGQkJSMFZmUlZoUVNWSkZSQUJRVWtWRFQwNUVTVlJKVDA1ZlJrRkpURVZFQUVWWVVFVkRWRUZVU1U5T1gwWkJTVXhGUkFCU1JWWkJURWxFUVZSSlQwNWZSa0ZKVEVWRUFGTlRURjlJUVU1RVUwaEJTMFZmUmtGSlRFVkVBRXhQUTB0RlJBQlVVa0ZPVTBaUFVrMUJWRWxQVGw5QlVGQk1TVVZFQUU1UFZGOU5UMFJKUmtsRlJBQk9UMVJmUlZoVVJVNUVSVVFBUWtGT1JGZEpSRlJJWDB4SlRVbFVYMFZZUTBWRlJFVkVBRk5KVkVWZlNWTmZUMVpGVWt4UFFVUkZSQUJJUlVGRUFFVjRjR1ZqZEdWa0lFaFVWRkF2QUFCZUV3QUFKaE1BQURBUUFBRHdGd0FBblJNQUFCVVNBQUE1RndBQThCSUFBQW9RQUFCMUVnQUFyUklBQUlJVEFBQlBGQUFBZnhBQUFLQVZBQUFqRkFBQWlSSUFBSXNVQUFCTkZRQUExQkVBQU04VUFBQVFHQUFBeVJZQUFOd1dBQURCRVFBQTRCY0FBTHNVQUFCMEZBQUFmQlVBQU9VVUFBQUlGd0FBSHhBQUFHVVZBQUNqRkFBQUtCVUFBQUlWQUFDWkZRQUFMQkFBQUlzWkFBQlBEd0FBMUE0QUFHb1FBQURPRUFBQUFoY0FBSWtPQUFCdUV3QUFIQk1BQUdZVUFBQldGd0FBd1JNQUFNMFRBQUJzRXdBQWFCY0FBR1lYQUFCZkZ3QUFJaE1BQU00UEFBQnBEZ0FBMkE0QUFHTVdBQURMRXdBQXFnNEFBQ2dYQUFBbUZ3QUF4Uk1BQUYwV0FBRG9FUUFBWnhNQUFHVVRBQUR5RmdBQWN4TUFBQjBYQUFENUZnQUE4eEVBQU04T0FBRE9GUUFBREJJQUFMTVJBQUNsRVFBQVlSQUFBRElYQUFDN0V3QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFQkFnRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFBQUFBQUFBQUFBQUFBQUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBZ01DQWdJQ0FnQUFBZ0lBQWdJQUFnSUNBZ0lDQWdJQ0FnQUVBQUFBQUFBQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdBQUFBSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBQUlBQWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFJQUFnSUNBZ0lBQUFJQ0FBSUNBQUlDQWdJQ0FnSUNBZ0lBQXdBRUFBQUFBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFBQUFDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdBQ0FBSUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJzYjNObFpXVndMV0ZzYVhabEFBQUFBQUFBQUFBQUFBQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQUFBQUFBQUFBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUVCQVFFQkFRRUJBUUVCQWdFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRmphSFZ1YTJWa0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQVFBQkFRRUJBUUFBQVFFQUFRRUFBUUVCQVFFQkFRRUJBUUFBQUFBQUFBQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUFBQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFFQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBR1ZqZEdsdmJtVnVkQzFzWlc1bmRHaHZibkp2ZUhrdFkyOXVibVZqZEdsdmJnQUFBQUFBQUFBQUFBQUFBQUFBQUhKaGJuTm1aWEl0Wlc1amIyUnBibWR3WjNKaFpHVU5DZzBLRFFwVFRRMEtEUXBVVkZBdlEwVXZWRk5RTHdBQUFBQUFBQUFBQUFBQUFBRUNBQUVEQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQUFBQUFBQUFBQUFCQWdBQkF3QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUJBUVVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBQUFBQUFBQUFBQUFRQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFFQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFBQUFBQUFBQUFBQUFCQUFBQ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUF3UUFBQVFFQkFRRUJBUUVCQVFFQlFRRUJBUUVCQVFFQkFRRUJBQUVBQVlIQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQUFRQUJBQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBQUFBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBZ0FBQUFBQUFBTURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREFBQUFBQUFBQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFBQUFBQUFBQUFBQUFnQUFBQUFDQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFEQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd0FBQUFBQUFBTURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUU1UFZVNURSVVZEUzA5VlZFNUZRMVJGVkVWRFVrbENSVXhWVTBoRlZFVkJSRk5GUVZKRFNGSkhSVU5VU1ZaSlZGbE1SVTVFUVZKV1JVOVVTVVpaVUZSSlQwNVRRMGhUUlVGWlUxUkJWRU5JUjBWUFVrUkpVa1ZEVkU5U1ZGSkRTRkJCVWtGTlJWUkZVbFZTUTBWQ1UwTlNTVUpGUVZKRVQxZE9RVU5GU1U1RVRrdERTMVZDVTBOU1NVSkZTRlJVVUM5QlJGUlFMdz09J1xuIiwKICAgICIvLyBAdHMtY2hlY2tcblxuJ3VzZSBzdHJpY3QnXG5cbi8qIGdsb2JhbCBXZWJBc3NlbWJseSAqL1xuXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgbmV0ID0gcmVxdWlyZSgnbmV0JylcbmNvbnN0IGh0dHAgPSByZXF1aXJlKCdodHRwJylcbmNvbnN0IHsgcGlwZWxpbmUgfSA9IHJlcXVpcmUoJ3N0cmVhbScpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi9jb3JlL3V0aWwnKVxuY29uc3QgdGltZXJzID0gcmVxdWlyZSgnLi90aW1lcnMnKVxuY29uc3QgUmVxdWVzdCA9IHJlcXVpcmUoJy4vY29yZS9yZXF1ZXN0JylcbmNvbnN0IERpc3BhdGNoZXJCYXNlID0gcmVxdWlyZSgnLi9kaXNwYXRjaGVyLWJhc2UnKVxuY29uc3Qge1xuICBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IsXG4gIFJlc3BvbnNlQ29udGVudExlbmd0aE1pc21hdGNoRXJyb3IsXG4gIEludmFsaWRBcmd1bWVudEVycm9yLFxuICBSZXF1ZXN0QWJvcnRlZEVycm9yLFxuICBIZWFkZXJzVGltZW91dEVycm9yLFxuICBIZWFkZXJzT3ZlcmZsb3dFcnJvcixcbiAgU29ja2V0RXJyb3IsXG4gIEluZm9ybWF0aW9uYWxFcnJvcixcbiAgQm9keVRpbWVvdXRFcnJvcixcbiAgSFRUUFBhcnNlckVycm9yLFxuICBSZXNwb25zZUV4Y2VlZGVkTWF4U2l6ZUVycm9yLFxuICBDbGllbnREZXN0cm95ZWRFcnJvclxufSA9IHJlcXVpcmUoJy4vY29yZS9lcnJvcnMnKVxuY29uc3QgYnVpbGRDb25uZWN0b3IgPSByZXF1aXJlKCcuL2NvcmUvY29ubmVjdCcpXG5jb25zdCB7XG4gIGtVcmwsXG4gIGtSZXNldCxcbiAga1NlcnZlck5hbWUsXG4gIGtDbGllbnQsXG4gIGtCdXN5LFxuICBrUGFyc2VyLFxuICBrQ29ubmVjdCxcbiAga0Jsb2NraW5nLFxuICBrUmVzdW1pbmcsXG4gIGtSdW5uaW5nLFxuICBrUGVuZGluZyxcbiAga1NpemUsXG4gIGtXcml0aW5nLFxuICBrUXVldWUsXG4gIGtDb25uZWN0ZWQsXG4gIGtDb25uZWN0aW5nLFxuICBrTmVlZERyYWluLFxuICBrTm9SZWYsXG4gIGtLZWVwQWxpdmVEZWZhdWx0VGltZW91dCxcbiAga0hvc3RIZWFkZXIsXG4gIGtQZW5kaW5nSWR4LFxuICBrUnVubmluZ0lkeCxcbiAga0Vycm9yLFxuICBrUGlwZWxpbmluZyxcbiAga1NvY2tldCxcbiAga0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZSxcbiAga01heEhlYWRlcnNTaXplLFxuICBrS2VlcEFsaXZlTWF4VGltZW91dCxcbiAga0tlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGQsXG4gIGtIZWFkZXJzVGltZW91dCxcbiAga0JvZHlUaW1lb3V0LFxuICBrU3RyaWN0Q29udGVudExlbmd0aCxcbiAga0Nvbm5lY3RvcixcbiAga01heFJlZGlyZWN0aW9ucyxcbiAga01heFJlcXVlc3RzLFxuICBrQ291bnRlcixcbiAga0Nsb3NlLFxuICBrRGVzdHJveSxcbiAga0Rpc3BhdGNoLFxuICBrSW50ZXJjZXB0b3JzLFxuICBrTG9jYWxBZGRyZXNzLFxuICBrTWF4UmVzcG9uc2VTaXplLFxuICBrSFRUUENvbm5WZXJzaW9uLFxuICAvLyBIVFRQMlxuICBrSG9zdCxcbiAga0hUVFAyU2Vzc2lvbixcbiAga0hUVFAyU2Vzc2lvblN0YXRlLFxuICBrSFRUUDJCdWlsZFJlcXVlc3QsXG4gIGtIVFRQMkNvcHlIZWFkZXJzLFxuICBrSFRUUDFCdWlsZFJlcXVlc3Rcbn0gPSByZXF1aXJlKCcuL2NvcmUvc3ltYm9scycpXG5cbi8qKiBAdHlwZSB7aW1wb3J0KCdodHRwMicpfSAqL1xubGV0IGh0dHAyXG50cnkge1xuICBodHRwMiA9IHJlcXVpcmUoJ2h0dHAyJylcbn0gY2F0Y2gge1xuICAvLyBAdHMtaWdub3JlXG4gIGh0dHAyID0geyBjb25zdGFudHM6IHt9IH1cbn1cblxuY29uc3Qge1xuICBjb25zdGFudHM6IHtcbiAgICBIVFRQMl9IRUFERVJfQVVUSE9SSVRZLFxuICAgIEhUVFAyX0hFQURFUl9NRVRIT0QsXG4gICAgSFRUUDJfSEVBREVSX1BBVEgsXG4gICAgSFRUUDJfSEVBREVSX1NDSEVNRSxcbiAgICBIVFRQMl9IRUFERVJfQ09OVEVOVF9MRU5HVEgsXG4gICAgSFRUUDJfSEVBREVSX0VYUEVDVCxcbiAgICBIVFRQMl9IRUFERVJfU1RBVFVTXG4gIH1cbn0gPSBodHRwMlxuXG4vLyBFeHBlcmltZW50YWxcbmxldCBoMkV4cGVyaW1lbnRhbFdhcm5lZCA9IGZhbHNlXG5cbmNvbnN0IEZhc3RCdWZmZXIgPSBCdWZmZXJbU3ltYm9sLnNwZWNpZXNdXG5cbmNvbnN0IGtDbG9zZWRSZXNvbHZlID0gU3ltYm9sKCdrQ2xvc2VkUmVzb2x2ZScpXG5cbmNvbnN0IGNoYW5uZWxzID0ge31cblxudHJ5IHtcbiAgY29uc3QgZGlhZ25vc3RpY3NDaGFubmVsID0gcmVxdWlyZSgnZGlhZ25vc3RpY3NfY2hhbm5lbCcpXG4gIGNoYW5uZWxzLnNlbmRIZWFkZXJzID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpjbGllbnQ6c2VuZEhlYWRlcnMnKVxuICBjaGFubmVscy5iZWZvcmVDb25uZWN0ID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpjbGllbnQ6YmVmb3JlQ29ubmVjdCcpXG4gIGNoYW5uZWxzLmNvbm5lY3RFcnJvciA9IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6Y2xpZW50OmNvbm5lY3RFcnJvcicpXG4gIGNoYW5uZWxzLmNvbm5lY3RlZCA9IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6Y2xpZW50OmNvbm5lY3RlZCcpXG59IGNhdGNoIHtcbiAgY2hhbm5lbHMuc2VuZEhlYWRlcnMgPSB7IGhhc1N1YnNjcmliZXJzOiBmYWxzZSB9XG4gIGNoYW5uZWxzLmJlZm9yZUNvbm5lY3QgPSB7IGhhc1N1YnNjcmliZXJzOiBmYWxzZSB9XG4gIGNoYW5uZWxzLmNvbm5lY3RFcnJvciA9IHsgaGFzU3Vic2NyaWJlcnM6IGZhbHNlIH1cbiAgY2hhbm5lbHMuY29ubmVjdGVkID0geyBoYXNTdWJzY3JpYmVyczogZmFsc2UgfVxufVxuXG4vKipcbiAqIEB0eXBlIHtpbXBvcnQoJy4uL3R5cGVzL2NsaWVudCcpLmRlZmF1bHR9XG4gKi9cbmNsYXNzIENsaWVudCBleHRlbmRzIERpc3BhdGNoZXJCYXNlIHtcbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfFVSTH0gdXJsXG4gICAqIEBwYXJhbSB7aW1wb3J0KCcuLi90eXBlcy9jbGllbnQnKS5DbGllbnQuT3B0aW9uc30gb3B0aW9uc1xuICAgKi9cbiAgY29uc3RydWN0b3IgKHVybCwge1xuICAgIGludGVyY2VwdG9ycyxcbiAgICBtYXhIZWFkZXJTaXplLFxuICAgIGhlYWRlcnNUaW1lb3V0LFxuICAgIHNvY2tldFRpbWVvdXQsXG4gICAgcmVxdWVzdFRpbWVvdXQsXG4gICAgY29ubmVjdFRpbWVvdXQsXG4gICAgYm9keVRpbWVvdXQsXG4gICAgaWRsZVRpbWVvdXQsXG4gICAga2VlcEFsaXZlLFxuICAgIGtlZXBBbGl2ZVRpbWVvdXQsXG4gICAgbWF4S2VlcEFsaXZlVGltZW91dCxcbiAgICBrZWVwQWxpdmVNYXhUaW1lb3V0LFxuICAgIGtlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGQsXG4gICAgc29ja2V0UGF0aCxcbiAgICBwaXBlbGluaW5nLFxuICAgIHRscyxcbiAgICBzdHJpY3RDb250ZW50TGVuZ3RoLFxuICAgIG1heENhY2hlZFNlc3Npb25zLFxuICAgIG1heFJlZGlyZWN0aW9ucyxcbiAgICBjb25uZWN0LFxuICAgIG1heFJlcXVlc3RzUGVyQ2xpZW50LFxuICAgIGxvY2FsQWRkcmVzcyxcbiAgICBtYXhSZXNwb25zZVNpemUsXG4gICAgYXV0b1NlbGVjdEZhbWlseSxcbiAgICBhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQsXG4gICAgLy8gaDJcbiAgICBhbGxvd0gyLFxuICAgIG1heENvbmN1cnJlbnRTdHJlYW1zXG4gIH0gPSB7fSkge1xuICAgIHN1cGVyKClcblxuICAgIGlmIChrZWVwQWxpdmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCd1bnN1cHBvcnRlZCBrZWVwQWxpdmUsIHVzZSBwaXBlbGluaW5nPTAgaW5zdGVhZCcpXG4gICAgfVxuXG4gICAgaWYgKHNvY2tldFRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCd1bnN1cHBvcnRlZCBzb2NrZXRUaW1lb3V0LCB1c2UgaGVhZGVyc1RpbWVvdXQgJiBib2R5VGltZW91dCBpbnN0ZWFkJylcbiAgICB9XG5cbiAgICBpZiAocmVxdWVzdFRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCd1bnN1cHBvcnRlZCByZXF1ZXN0VGltZW91dCwgdXNlIGhlYWRlcnNUaW1lb3V0ICYgYm9keVRpbWVvdXQgaW5zdGVhZCcpXG4gICAgfVxuXG4gICAgaWYgKGlkbGVUaW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndW5zdXBwb3J0ZWQgaWRsZVRpbWVvdXQsIHVzZSBrZWVwQWxpdmVUaW1lb3V0IGluc3RlYWQnKVxuICAgIH1cblxuICAgIGlmIChtYXhLZWVwQWxpdmVUaW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndW5zdXBwb3J0ZWQgbWF4S2VlcEFsaXZlVGltZW91dCwgdXNlIGtlZXBBbGl2ZU1heFRpbWVvdXQgaW5zdGVhZCcpXG4gICAgfVxuXG4gICAgaWYgKG1heEhlYWRlclNpemUgIT0gbnVsbCAmJiAhTnVtYmVyLmlzRmluaXRlKG1heEhlYWRlclNpemUpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgbWF4SGVhZGVyU2l6ZScpXG4gICAgfVxuXG4gICAgaWYgKHNvY2tldFBhdGggIT0gbnVsbCAmJiB0eXBlb2Ygc29ja2V0UGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBzb2NrZXRQYXRoJylcbiAgICB9XG5cbiAgICBpZiAoY29ubmVjdFRpbWVvdXQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0Zpbml0ZShjb25uZWN0VGltZW91dCkgfHwgY29ubmVjdFRpbWVvdXQgPCAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGNvbm5lY3RUaW1lb3V0JylcbiAgICB9XG5cbiAgICBpZiAoa2VlcEFsaXZlVGltZW91dCAhPSBudWxsICYmICghTnVtYmVyLmlzRmluaXRlKGtlZXBBbGl2ZVRpbWVvdXQpIHx8IGtlZXBBbGl2ZVRpbWVvdXQgPD0gMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBrZWVwQWxpdmVUaW1lb3V0JylcbiAgICB9XG5cbiAgICBpZiAoa2VlcEFsaXZlTWF4VGltZW91dCAhPSBudWxsICYmICghTnVtYmVyLmlzRmluaXRlKGtlZXBBbGl2ZU1heFRpbWVvdXQpIHx8IGtlZXBBbGl2ZU1heFRpbWVvdXQgPD0gMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBrZWVwQWxpdmVNYXhUaW1lb3V0JylcbiAgICB9XG5cbiAgICBpZiAoa2VlcEFsaXZlVGltZW91dFRocmVzaG9sZCAhPSBudWxsICYmICFOdW1iZXIuaXNGaW5pdGUoa2VlcEFsaXZlVGltZW91dFRocmVzaG9sZCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBrZWVwQWxpdmVUaW1lb3V0VGhyZXNob2xkJylcbiAgICB9XG5cbiAgICBpZiAoaGVhZGVyc1RpbWVvdXQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0ludGVnZXIoaGVhZGVyc1RpbWVvdXQpIHx8IGhlYWRlcnNUaW1lb3V0IDwgMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaGVhZGVyc1RpbWVvdXQgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgb3IgemVybycpXG4gICAgfVxuXG4gICAgaWYgKGJvZHlUaW1lb3V0ICE9IG51bGwgJiYgKCFOdW1iZXIuaXNJbnRlZ2VyKGJvZHlUaW1lb3V0KSB8fCBib2R5VGltZW91dCA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2JvZHlUaW1lb3V0IG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIG9yIHplcm8nKVxuICAgIH1cblxuICAgIGlmIChjb25uZWN0ICE9IG51bGwgJiYgdHlwZW9mIGNvbm5lY3QgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGNvbm5lY3QgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2Nvbm5lY3QgbXVzdCBiZSBhIGZ1bmN0aW9uIG9yIGFuIG9iamVjdCcpXG4gICAgfVxuXG4gICAgaWYgKG1heFJlZGlyZWN0aW9ucyAhPSBudWxsICYmICghTnVtYmVyLmlzSW50ZWdlcihtYXhSZWRpcmVjdGlvbnMpIHx8IG1heFJlZGlyZWN0aW9ucyA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ21heFJlZGlyZWN0aW9ucyBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJylcbiAgICB9XG5cbiAgICBpZiAobWF4UmVxdWVzdHNQZXJDbGllbnQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0ludGVnZXIobWF4UmVxdWVzdHNQZXJDbGllbnQpIHx8IG1heFJlcXVlc3RzUGVyQ2xpZW50IDwgMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignbWF4UmVxdWVzdHNQZXJDbGllbnQgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpXG4gICAgfVxuXG4gICAgaWYgKGxvY2FsQWRkcmVzcyAhPSBudWxsICYmICh0eXBlb2YgbG9jYWxBZGRyZXNzICE9PSAnc3RyaW5nJyB8fCBuZXQuaXNJUChsb2NhbEFkZHJlc3MpID09PSAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdsb2NhbEFkZHJlc3MgbXVzdCBiZSB2YWxpZCBzdHJpbmcgSVAgYWRkcmVzcycpXG4gICAgfVxuXG4gICAgaWYgKG1heFJlc3BvbnNlU2l6ZSAhPSBudWxsICYmICghTnVtYmVyLmlzSW50ZWdlcihtYXhSZXNwb25zZVNpemUpIHx8IG1heFJlc3BvbnNlU2l6ZSA8IC0xKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdtYXhSZXNwb25zZVNpemUgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgYXV0b1NlbGVjdEZhbWlseUF0dGVtcHRUaW1lb3V0ICE9IG51bGwgJiZcbiAgICAgICghTnVtYmVyLmlzSW50ZWdlcihhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQpIHx8IGF1dG9TZWxlY3RGYW1pbHlBdHRlbXB0VGltZW91dCA8IC0xKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpXG4gICAgfVxuXG4gICAgLy8gaDJcbiAgICBpZiAoYWxsb3dIMiAhPSBudWxsICYmIHR5cGVvZiBhbGxvd0gyICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignYWxsb3dIMiBtdXN0IGJlIGEgdmFsaWQgYm9vbGVhbiB2YWx1ZScpXG4gICAgfVxuXG4gICAgaWYgKG1heENvbmN1cnJlbnRTdHJlYW1zICE9IG51bGwgJiYgKHR5cGVvZiBtYXhDb25jdXJyZW50U3RyZWFtcyAhPT0gJ251bWJlcicgfHwgbWF4Q29uY3VycmVudFN0cmVhbXMgPCAxKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdtYXhDb25jdXJyZW50U3RyZWFtcyBtdXN0IGJlIGEgcG9zc2l0aXZlIGludGVnZXIsIGdyZWF0ZXIgdGhhbiAwJylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNvbm5lY3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbm5lY3QgPSBidWlsZENvbm5lY3Rvcih7XG4gICAgICAgIC4uLnRscyxcbiAgICAgICAgbWF4Q2FjaGVkU2Vzc2lvbnMsXG4gICAgICAgIGFsbG93SDIsXG4gICAgICAgIHNvY2tldFBhdGgsXG4gICAgICAgIHRpbWVvdXQ6IGNvbm5lY3RUaW1lb3V0LFxuICAgICAgICAuLi4odXRpbC5ub2RlSGFzQXV0b1NlbGVjdEZhbWlseSAmJiBhdXRvU2VsZWN0RmFtaWx5ID8geyBhdXRvU2VsZWN0RmFtaWx5LCBhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQgfSA6IHVuZGVmaW5lZCksXG4gICAgICAgIC4uLmNvbm5lY3RcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgdGhpc1trSW50ZXJjZXB0b3JzXSA9IGludGVyY2VwdG9ycyAmJiBpbnRlcmNlcHRvcnMuQ2xpZW50ICYmIEFycmF5LmlzQXJyYXkoaW50ZXJjZXB0b3JzLkNsaWVudClcbiAgICAgID8gaW50ZXJjZXB0b3JzLkNsaWVudFxuICAgICAgOiBbY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvcih7IG1heFJlZGlyZWN0aW9ucyB9KV1cbiAgICB0aGlzW2tVcmxdID0gdXRpbC5wYXJzZU9yaWdpbih1cmwpXG4gICAgdGhpc1trQ29ubmVjdG9yXSA9IGNvbm5lY3RcbiAgICB0aGlzW2tTb2NrZXRdID0gbnVsbFxuICAgIHRoaXNba1BpcGVsaW5pbmddID0gcGlwZWxpbmluZyAhPSBudWxsID8gcGlwZWxpbmluZyA6IDFcbiAgICB0aGlzW2tNYXhIZWFkZXJzU2l6ZV0gPSBtYXhIZWFkZXJTaXplIHx8IGh0dHAubWF4SGVhZGVyU2l6ZVxuICAgIHRoaXNba0tlZXBBbGl2ZURlZmF1bHRUaW1lb3V0XSA9IGtlZXBBbGl2ZVRpbWVvdXQgPT0gbnVsbCA/IDRlMyA6IGtlZXBBbGl2ZVRpbWVvdXRcbiAgICB0aGlzW2tLZWVwQWxpdmVNYXhUaW1lb3V0XSA9IGtlZXBBbGl2ZU1heFRpbWVvdXQgPT0gbnVsbCA/IDYwMGUzIDoga2VlcEFsaXZlTWF4VGltZW91dFxuICAgIHRoaXNba0tlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGRdID0ga2VlcEFsaXZlVGltZW91dFRocmVzaG9sZCA9PSBudWxsID8gMWUzIDoga2VlcEFsaXZlVGltZW91dFRocmVzaG9sZFxuICAgIHRoaXNba0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZV0gPSB0aGlzW2tLZWVwQWxpdmVEZWZhdWx0VGltZW91dF1cbiAgICB0aGlzW2tTZXJ2ZXJOYW1lXSA9IG51bGxcbiAgICB0aGlzW2tMb2NhbEFkZHJlc3NdID0gbG9jYWxBZGRyZXNzICE9IG51bGwgPyBsb2NhbEFkZHJlc3MgOiBudWxsXG4gICAgdGhpc1trUmVzdW1pbmddID0gMCAvLyAwLCBpZGxlLCAxLCBzY2hlZHVsZWQsIDIgcmVzdW1pbmdcbiAgICB0aGlzW2tOZWVkRHJhaW5dID0gMCAvLyAwLCBpZGxlLCAxLCBzY2hlZHVsZWQsIDIgcmVzdW1pbmdcbiAgICB0aGlzW2tIb3N0SGVhZGVyXSA9IGBob3N0OiAke3RoaXNba1VybF0uaG9zdG5hbWV9JHt0aGlzW2tVcmxdLnBvcnQgPyBgOiR7dGhpc1trVXJsXS5wb3J0fWAgOiAnJ31cXHJcXG5gXG4gICAgdGhpc1trQm9keVRpbWVvdXRdID0gYm9keVRpbWVvdXQgIT0gbnVsbCA/IGJvZHlUaW1lb3V0IDogMzAwZTNcbiAgICB0aGlzW2tIZWFkZXJzVGltZW91dF0gPSBoZWFkZXJzVGltZW91dCAhPSBudWxsID8gaGVhZGVyc1RpbWVvdXQgOiAzMDBlM1xuICAgIHRoaXNba1N0cmljdENvbnRlbnRMZW5ndGhdID0gc3RyaWN0Q29udGVudExlbmd0aCA9PSBudWxsID8gdHJ1ZSA6IHN0cmljdENvbnRlbnRMZW5ndGhcbiAgICB0aGlzW2tNYXhSZWRpcmVjdGlvbnNdID0gbWF4UmVkaXJlY3Rpb25zXG4gICAgdGhpc1trTWF4UmVxdWVzdHNdID0gbWF4UmVxdWVzdHNQZXJDbGllbnRcbiAgICB0aGlzW2tDbG9zZWRSZXNvbHZlXSA9IG51bGxcbiAgICB0aGlzW2tNYXhSZXNwb25zZVNpemVdID0gbWF4UmVzcG9uc2VTaXplID4gLTEgPyBtYXhSZXNwb25zZVNpemUgOiAtMVxuICAgIHRoaXNba0hUVFBDb25uVmVyc2lvbl0gPSAnaDEnXG5cbiAgICAvLyBIVFRQLzJcbiAgICB0aGlzW2tIVFRQMlNlc3Npb25dID0gbnVsbFxuICAgIHRoaXNba0hUVFAyU2Vzc2lvblN0YXRlXSA9ICFhbGxvd0gyXG4gICAgICA/IG51bGxcbiAgICAgIDoge1xuICAgICAgICAvLyBzdHJlYW1zOiBudWxsLCAvLyBGaXhlZCBxdWV1ZSBvZiBzdHJlYW1zIC0gRm9yIGZ1dHVyZSBzdXBwb3J0IG9mIGBwdXNoYFxuICAgICAgICAgIG9wZW5TdHJlYW1zOiAwLCAvLyBLZWVwIHRyYWNrIG9mIHRoZW0gdG8gZGVjaWRlIHdldGhlciBvciBub3QgdW5yZWYgdGhlIHNlc3Npb25cbiAgICAgICAgICBtYXhDb25jdXJyZW50U3RyZWFtczogbWF4Q29uY3VycmVudFN0cmVhbXMgIT0gbnVsbCA/IG1heENvbmN1cnJlbnRTdHJlYW1zIDogMTAwIC8vIE1heCBwZWVyQ29uY3VycmVudFN0cmVhbXMgZm9yIGEgTm9kZSBoMiBzZXJ2ZXJcbiAgICAgICAgfVxuICAgIHRoaXNba0hvc3RdID0gYCR7dGhpc1trVXJsXS5ob3N0bmFtZX0ke3RoaXNba1VybF0ucG9ydCA/IGA6JHt0aGlzW2tVcmxdLnBvcnR9YCA6ICcnfWBcblxuICAgIC8vIGtRdWV1ZSBpcyBidWlsdCB1cCBvZiAzIHNlY3Rpb25zIHNlcGFyYXRlZCBieVxuICAgIC8vIHRoZSBrUnVubmluZ0lkeCBhbmQga1BlbmRpbmdJZHggaW5kaWNlcy5cbiAgICAvLyB8ICAgY29tcGxldGUgICB8ICAgcnVubmluZyAgIHwgICBwZW5kaW5nICAgfFxuICAgIC8vICAgICAgICAgICAgICAgIF4ga1J1bm5pbmdJZHggXiBrUGVuZGluZ0lkeCBeIGtRdWV1ZS5sZW5ndGhcbiAgICAvLyBrUnVubmluZ0lkeCBwb2ludHMgdG8gdGhlIGZpcnN0IHJ1bm5pbmcgZWxlbWVudC5cbiAgICAvLyBrUGVuZGluZ0lkeCBwb2ludHMgdG8gdGhlIGZpcnN0IHBlbmRpbmcgZWxlbWVudC5cbiAgICAvLyBUaGlzIGltcGxlbWVudHMgYSBmYXN0IHF1ZXVlIHdpdGggYW4gYW1vcnRpemVkXG4gICAgLy8gdGltZSBvZiBPKDEpLlxuXG4gICAgdGhpc1trUXVldWVdID0gW11cbiAgICB0aGlzW2tSdW5uaW5nSWR4XSA9IDBcbiAgICB0aGlzW2tQZW5kaW5nSWR4XSA9IDBcbiAgfVxuXG4gIGdldCBwaXBlbGluaW5nICgpIHtcbiAgICByZXR1cm4gdGhpc1trUGlwZWxpbmluZ11cbiAgfVxuXG4gIHNldCBwaXBlbGluaW5nICh2YWx1ZSkge1xuICAgIHRoaXNba1BpcGVsaW5pbmddID0gdmFsdWVcbiAgICByZXN1bWUodGhpcywgdHJ1ZSlcbiAgfVxuXG4gIGdldCBba1BlbmRpbmddICgpIHtcbiAgICByZXR1cm4gdGhpc1trUXVldWVdLmxlbmd0aCAtIHRoaXNba1BlbmRpbmdJZHhdXG4gIH1cblxuICBnZXQgW2tSdW5uaW5nXSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1BlbmRpbmdJZHhdIC0gdGhpc1trUnVubmluZ0lkeF1cbiAgfVxuXG4gIGdldCBba1NpemVdICgpIHtcbiAgICByZXR1cm4gdGhpc1trUXVldWVdLmxlbmd0aCAtIHRoaXNba1J1bm5pbmdJZHhdXG4gIH1cblxuICBnZXQgW2tDb25uZWN0ZWRdICgpIHtcbiAgICByZXR1cm4gISF0aGlzW2tTb2NrZXRdICYmICF0aGlzW2tDb25uZWN0aW5nXSAmJiAhdGhpc1trU29ja2V0XS5kZXN0cm95ZWRcbiAgfVxuXG4gIGdldCBba0J1c3ldICgpIHtcbiAgICBjb25zdCBzb2NrZXQgPSB0aGlzW2tTb2NrZXRdXG4gICAgcmV0dXJuIChcbiAgICAgIChzb2NrZXQgJiYgKHNvY2tldFtrUmVzZXRdIHx8IHNvY2tldFtrV3JpdGluZ10gfHwgc29ja2V0W2tCbG9ja2luZ10pKSB8fFxuICAgICAgKHRoaXNba1NpemVdID49ICh0aGlzW2tQaXBlbGluaW5nXSB8fCAxKSkgfHxcbiAgICAgIHRoaXNba1BlbmRpbmddID4gMFxuICAgIClcbiAgfVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZTogb25seSB1c2VkIGZvciB0ZXN0ICovXG4gIFtrQ29ubmVjdF0gKGNiKSB7XG4gICAgY29ubmVjdCh0aGlzKVxuICAgIHRoaXMub25jZSgnY29ubmVjdCcsIGNiKVxuICB9XG5cbiAgW2tEaXNwYXRjaF0gKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBjb25zdCBvcmlnaW4gPSBvcHRzLm9yaWdpbiB8fCB0aGlzW2tVcmxdLm9yaWdpblxuXG4gICAgY29uc3QgcmVxdWVzdCA9IHRoaXNba0hUVFBDb25uVmVyc2lvbl0gPT09ICdoMidcbiAgICAgID8gUmVxdWVzdFtrSFRUUDJCdWlsZFJlcXVlc3RdKG9yaWdpbiwgb3B0cywgaGFuZGxlcilcbiAgICAgIDogUmVxdWVzdFtrSFRUUDFCdWlsZFJlcXVlc3RdKG9yaWdpbiwgb3B0cywgaGFuZGxlcilcblxuICAgIHRoaXNba1F1ZXVlXS5wdXNoKHJlcXVlc3QpXG4gICAgaWYgKHRoaXNba1Jlc3VtaW5nXSkge1xuICAgICAgLy8gRG8gbm90aGluZy5cbiAgICB9IGVsc2UgaWYgKHV0aWwuYm9keUxlbmd0aChyZXF1ZXN0LmJvZHkpID09IG51bGwgJiYgdXRpbC5pc0l0ZXJhYmxlKHJlcXVlc3QuYm9keSkpIHtcbiAgICAgIC8vIFdhaXQgYSB0aWNrIGluIGNhc2Ugc3RyZWFtL2l0ZXJhdG9yIGlzIGVuZGVkIGluIHRoZSBzYW1lIHRpY2suXG4gICAgICB0aGlzW2tSZXN1bWluZ10gPSAxXG4gICAgICBwcm9jZXNzLm5leHRUaWNrKHJlc3VtZSwgdGhpcylcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdW1lKHRoaXMsIHRydWUpXG4gICAgfVxuXG4gICAgaWYgKHRoaXNba1Jlc3VtaW5nXSAmJiB0aGlzW2tOZWVkRHJhaW5dICE9PSAyICYmIHRoaXNba0J1c3ldKSB7XG4gICAgICB0aGlzW2tOZWVkRHJhaW5dID0gMlxuICAgIH1cblxuICAgIHJldHVybiB0aGlzW2tOZWVkRHJhaW5dIDwgMlxuICB9XG5cbiAgYXN5bmMgW2tDbG9zZV0gKCkge1xuICAgIC8vIFRPRE86IGZvciBIMiB3ZSBuZWVkIHRvIGdyYWNlZnVsbHkgZmx1c2ggdGhlIHJlbWFpbmluZyBlbnF1ZXVlZFxuICAgIC8vIHJlcXVlc3QgYW5kIGNsb3NlIGVhY2ggc3RyZWFtLlxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgaWYgKCF0aGlzW2tTaXplXSkge1xuICAgICAgICByZXNvbHZlKG51bGwpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzW2tDbG9zZWRSZXNvbHZlXSA9IHJlc29sdmVcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgYXN5bmMgW2tEZXN0cm95XSAoZXJyKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBjb25zdCByZXF1ZXN0cyA9IHRoaXNba1F1ZXVlXS5zcGxpY2UodGhpc1trUGVuZGluZ0lkeF0pXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcXVlc3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSByZXF1ZXN0c1tpXVxuICAgICAgICBlcnJvclJlcXVlc3QodGhpcywgcmVxdWVzdCwgZXJyKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBjYWxsYmFjayA9ICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXNba0Nsb3NlZFJlc29sdmVdKSB7XG4gICAgICAgICAgLy8gVE9ETyAoZml4KTogU2hvdWxkIHdlIGVycm9yIGhlcmUgd2l0aCBDbGllbnREZXN0cm95ZWRFcnJvcj9cbiAgICAgICAgICB0aGlzW2tDbG9zZWRSZXNvbHZlXSgpXG4gICAgICAgICAgdGhpc1trQ2xvc2VkUmVzb2x2ZV0gPSBudWxsXG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZSgpXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzW2tIVFRQMlNlc3Npb25dICE9IG51bGwpIHtcbiAgICAgICAgdXRpbC5kZXN0cm95KHRoaXNba0hUVFAyU2Vzc2lvbl0sIGVycilcbiAgICAgICAgdGhpc1trSFRUUDJTZXNzaW9uXSA9IG51bGxcbiAgICAgICAgdGhpc1trSFRUUDJTZXNzaW9uU3RhdGVdID0gbnVsbFxuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXNba1NvY2tldF0pIHtcbiAgICAgICAgcXVldWVNaWNyb3Rhc2soY2FsbGJhY2spXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1dGlsLmRlc3Ryb3kodGhpc1trU29ja2V0XS5vbignY2xvc2UnLCBjYWxsYmFjayksIGVycilcbiAgICAgIH1cblxuICAgICAgcmVzdW1lKHRoaXMpXG4gICAgfSlcbiAgfVxufVxuXG5mdW5jdGlvbiBvbkh0dHAyU2Vzc2lvbkVycm9yIChlcnIpIHtcbiAgYXNzZXJ0KGVyci5jb2RlICE9PSAnRVJSX1RMU19DRVJUX0FMVE5BTUVfSU5WQUxJRCcpXG5cbiAgdGhpc1trU29ja2V0XVtrRXJyb3JdID0gZXJyXG5cbiAgb25FcnJvcih0aGlzW2tDbGllbnRdLCBlcnIpXG59XG5cbmZ1bmN0aW9uIG9uSHR0cDJGcmFtZUVycm9yICh0eXBlLCBjb2RlLCBpZCkge1xuICBjb25zdCBlcnIgPSBuZXcgSW5mb3JtYXRpb25hbEVycm9yKGBIVFRQLzI6IFwiZnJhbWVFcnJvclwiIHJlY2VpdmVkIC0gdHlwZSAke3R5cGV9LCBjb2RlICR7Y29kZX1gKVxuXG4gIGlmIChpZCA9PT0gMCkge1xuICAgIHRoaXNba1NvY2tldF1ba0Vycm9yXSA9IGVyclxuICAgIG9uRXJyb3IodGhpc1trQ2xpZW50XSwgZXJyKVxuICB9XG59XG5cbmZ1bmN0aW9uIG9uSHR0cDJTZXNzaW9uRW5kICgpIHtcbiAgdXRpbC5kZXN0cm95KHRoaXMsIG5ldyBTb2NrZXRFcnJvcignb3RoZXIgc2lkZSBjbG9zZWQnKSlcbiAgdXRpbC5kZXN0cm95KHRoaXNba1NvY2tldF0sIG5ldyBTb2NrZXRFcnJvcignb3RoZXIgc2lkZSBjbG9zZWQnKSlcbn1cblxuZnVuY3Rpb24gb25IVFRQMkdvQXdheSAoY29kZSkge1xuICBjb25zdCBjbGllbnQgPSB0aGlzW2tDbGllbnRdXG4gIGNvbnN0IGVyciA9IG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoYEhUVFAvMjogXCJHT0FXQVlcIiBmcmFtZSByZWNlaXZlZCB3aXRoIGNvZGUgJHtjb2RlfWApXG4gIGNsaWVudFtrU29ja2V0XSA9IG51bGxcbiAgY2xpZW50W2tIVFRQMlNlc3Npb25dID0gbnVsbFxuXG4gIGlmIChjbGllbnQuZGVzdHJveWVkKSB7XG4gICAgYXNzZXJ0KHRoaXNba1BlbmRpbmddID09PSAwKVxuXG4gICAgLy8gRmFpbCBlbnRpcmUgcXVldWUuXG4gICAgY29uc3QgcmVxdWVzdHMgPSBjbGllbnRba1F1ZXVlXS5zcGxpY2UoY2xpZW50W2tSdW5uaW5nSWR4XSlcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcXVlc3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCByZXF1ZXN0ID0gcmVxdWVzdHNbaV1cbiAgICAgIGVycm9yUmVxdWVzdCh0aGlzLCByZXF1ZXN0LCBlcnIpXG4gICAgfVxuICB9IGVsc2UgaWYgKGNsaWVudFtrUnVubmluZ10gPiAwKSB7XG4gICAgLy8gRmFpbCBoZWFkIG9mIHBpcGVsaW5lLlxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdXVxuICAgIGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF0rK10gPSBudWxsXG5cbiAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIpXG4gIH1cblxuICBjbGllbnRba1BlbmRpbmdJZHhdID0gY2xpZW50W2tSdW5uaW5nSWR4XVxuXG4gIGFzc2VydChjbGllbnRba1J1bm5pbmddID09PSAwKVxuXG4gIGNsaWVudC5lbWl0KCdkaXNjb25uZWN0JyxcbiAgICBjbGllbnRba1VybF0sXG4gICAgW2NsaWVudF0sXG4gICAgZXJyXG4gIClcblxuICByZXN1bWUoY2xpZW50KVxufVxuXG5jb25zdCBjb25zdGFudHMgPSByZXF1aXJlKCcuL2xsaHR0cC9jb25zdGFudHMnKVxuY29uc3QgY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvciA9IHJlcXVpcmUoJy4vaW50ZXJjZXB0b3IvcmVkaXJlY3RJbnRlcmNlcHRvcicpXG5jb25zdCBFTVBUWV9CVUYgPSBCdWZmZXIuYWxsb2MoMClcblxuYXN5bmMgZnVuY3Rpb24gbGF6eWxsaHR0cCAoKSB7XG4gIGNvbnN0IGxsaHR0cFdhc21EYXRhID0gcHJvY2Vzcy5lbnYuSkVTVF9XT1JLRVJfSUQgPyByZXF1aXJlKCcuL2xsaHR0cC9sbGh0dHAtd2FzbS5qcycpIDogdW5kZWZpbmVkXG5cbiAgbGV0IG1vZFxuICB0cnkge1xuICAgIG1vZCA9IGF3YWl0IFdlYkFzc2VtYmx5LmNvbXBpbGUoQnVmZmVyLmZyb20ocmVxdWlyZSgnLi9sbGh0dHAvbGxodHRwX3NpbWQtd2FzbS5qcycpLCAnYmFzZTY0JykpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXG4gICAgLy8gV2UgY291bGQgY2hlY2sgaWYgdGhlIGVycm9yIHdhcyBjYXVzZWQgYnkgdGhlIHNpbWQgb3B0aW9uIG5vdFxuICAgIC8vIGJlaW5nIGVuYWJsZWQsIGJ1dCB0aGUgb2NjdXJyaW5nIG9mIHRoaXMgb3RoZXIgZXJyb3JcbiAgICAvLyAqIGh0dHBzOi8vZ2l0aHViLmNvbS9lbXNjcmlwdGVuLWNvcmUvZW1zY3JpcHRlbi9pc3N1ZXMvMTE0OTVcbiAgICAvLyBnb3QgbWUgdG8gcmVtb3ZlIHRoYXQgY2hlY2sgdG8gYXZvaWQgYnJlYWtpbmcgTm9kZSAxMi5cbiAgICBtb2QgPSBhd2FpdCBXZWJBc3NlbWJseS5jb21waWxlKEJ1ZmZlci5mcm9tKGxsaHR0cFdhc21EYXRhIHx8IHJlcXVpcmUoJy4vbGxodHRwL2xsaHR0cC13YXNtLmpzJyksICdiYXNlNjQnKSlcbiAgfVxuXG4gIHJldHVybiBhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShtb2QsIHtcbiAgICBlbnY6IHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIGNhbWVsY2FzZSAqL1xuXG4gICAgICB3YXNtX29uX3VybDogKHAsIGF0LCBsZW4pID0+IHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgcmV0dXJuIDBcbiAgICAgIH0sXG4gICAgICB3YXNtX29uX3N0YXR1czogKHAsIGF0LCBsZW4pID0+IHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGN1cnJlbnRQYXJzZXIucHRyLCBwKVxuICAgICAgICBjb25zdCBzdGFydCA9IGF0IC0gY3VycmVudEJ1ZmZlclB0ciArIGN1cnJlbnRCdWZmZXJSZWYuYnl0ZU9mZnNldFxuICAgICAgICByZXR1cm4gY3VycmVudFBhcnNlci5vblN0YXR1cyhuZXcgRmFzdEJ1ZmZlcihjdXJyZW50QnVmZmVyUmVmLmJ1ZmZlciwgc3RhcnQsIGxlbikpIHx8IDBcbiAgICAgIH0sXG4gICAgICB3YXNtX29uX21lc3NhZ2VfYmVnaW46IChwKSA9PiB7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjdXJyZW50UGFyc2VyLnB0ciwgcClcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRQYXJzZXIub25NZXNzYWdlQmVnaW4oKSB8fCAwXG4gICAgICB9LFxuICAgICAgd2FzbV9vbl9oZWFkZXJfZmllbGQ6IChwLCBhdCwgbGVuKSA9PiB7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjdXJyZW50UGFyc2VyLnB0ciwgcClcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBhdCAtIGN1cnJlbnRCdWZmZXJQdHIgKyBjdXJyZW50QnVmZmVyUmVmLmJ5dGVPZmZzZXRcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRQYXJzZXIub25IZWFkZXJGaWVsZChuZXcgRmFzdEJ1ZmZlcihjdXJyZW50QnVmZmVyUmVmLmJ1ZmZlciwgc3RhcnQsIGxlbikpIHx8IDBcbiAgICAgIH0sXG4gICAgICB3YXNtX29uX2hlYWRlcl92YWx1ZTogKHAsIGF0LCBsZW4pID0+IHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGN1cnJlbnRQYXJzZXIucHRyLCBwKVxuICAgICAgICBjb25zdCBzdGFydCA9IGF0IC0gY3VycmVudEJ1ZmZlclB0ciArIGN1cnJlbnRCdWZmZXJSZWYuYnl0ZU9mZnNldFxuICAgICAgICByZXR1cm4gY3VycmVudFBhcnNlci5vbkhlYWRlclZhbHVlKG5ldyBGYXN0QnVmZmVyKGN1cnJlbnRCdWZmZXJSZWYuYnVmZmVyLCBzdGFydCwgbGVuKSkgfHwgMFxuICAgICAgfSxcbiAgICAgIHdhc21fb25faGVhZGVyc19jb21wbGV0ZTogKHAsIHN0YXR1c0NvZGUsIHVwZ3JhZGUsIHNob3VsZEtlZXBBbGl2ZSkgPT4ge1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY3VycmVudFBhcnNlci5wdHIsIHApXG4gICAgICAgIHJldHVybiBjdXJyZW50UGFyc2VyLm9uSGVhZGVyc0NvbXBsZXRlKHN0YXR1c0NvZGUsIEJvb2xlYW4odXBncmFkZSksIEJvb2xlYW4oc2hvdWxkS2VlcEFsaXZlKSkgfHwgMFxuICAgICAgfSxcbiAgICAgIHdhc21fb25fYm9keTogKHAsIGF0LCBsZW4pID0+IHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGN1cnJlbnRQYXJzZXIucHRyLCBwKVxuICAgICAgICBjb25zdCBzdGFydCA9IGF0IC0gY3VycmVudEJ1ZmZlclB0ciArIGN1cnJlbnRCdWZmZXJSZWYuYnl0ZU9mZnNldFxuICAgICAgICByZXR1cm4gY3VycmVudFBhcnNlci5vbkJvZHkobmV3IEZhc3RCdWZmZXIoY3VycmVudEJ1ZmZlclJlZi5idWZmZXIsIHN0YXJ0LCBsZW4pKSB8fCAwXG4gICAgICB9LFxuICAgICAgd2FzbV9vbl9tZXNzYWdlX2NvbXBsZXRlOiAocCkgPT4ge1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY3VycmVudFBhcnNlci5wdHIsIHApXG4gICAgICAgIHJldHVybiBjdXJyZW50UGFyc2VyLm9uTWVzc2FnZUNvbXBsZXRlKCkgfHwgMFxuICAgICAgfVxuXG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIGNhbWVsY2FzZSAqL1xuICAgIH1cbiAgfSlcbn1cblxubGV0IGxsaHR0cEluc3RhbmNlID0gbnVsbFxubGV0IGxsaHR0cFByb21pc2UgPSBsYXp5bGxodHRwKClcbmxsaHR0cFByb21pc2UuY2F0Y2goKVxuXG5sZXQgY3VycmVudFBhcnNlciA9IG51bGxcbmxldCBjdXJyZW50QnVmZmVyUmVmID0gbnVsbFxubGV0IGN1cnJlbnRCdWZmZXJTaXplID0gMFxubGV0IGN1cnJlbnRCdWZmZXJQdHIgPSBudWxsXG5cbmNvbnN0IFRJTUVPVVRfSEVBREVSUyA9IDFcbmNvbnN0IFRJTUVPVVRfQk9EWSA9IDJcbmNvbnN0IFRJTUVPVVRfSURMRSA9IDNcblxuY2xhc3MgUGFyc2VyIHtcbiAgY29uc3RydWN0b3IgKGNsaWVudCwgc29ja2V0LCB7IGV4cG9ydHMgfSkge1xuICAgIGFzc2VydChOdW1iZXIuaXNGaW5pdGUoY2xpZW50W2tNYXhIZWFkZXJzU2l6ZV0pICYmIGNsaWVudFtrTWF4SGVhZGVyc1NpemVdID4gMClcblxuICAgIHRoaXMubGxodHRwID0gZXhwb3J0c1xuICAgIHRoaXMucHRyID0gdGhpcy5sbGh0dHAubGxodHRwX2FsbG9jKGNvbnN0YW50cy5UWVBFLlJFU1BPTlNFKVxuICAgIHRoaXMuY2xpZW50ID0gY2xpZW50XG4gICAgdGhpcy5zb2NrZXQgPSBzb2NrZXRcbiAgICB0aGlzLnRpbWVvdXQgPSBudWxsXG4gICAgdGhpcy50aW1lb3V0VmFsdWUgPSBudWxsXG4gICAgdGhpcy50aW1lb3V0VHlwZSA9IG51bGxcbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBudWxsXG4gICAgdGhpcy5zdGF0dXNUZXh0ID0gJydcbiAgICB0aGlzLnVwZ3JhZGUgPSBmYWxzZVxuICAgIHRoaXMuaGVhZGVycyA9IFtdXG4gICAgdGhpcy5oZWFkZXJzU2l6ZSA9IDBcbiAgICB0aGlzLmhlYWRlcnNNYXhTaXplID0gY2xpZW50W2tNYXhIZWFkZXJzU2l6ZV1cbiAgICB0aGlzLnNob3VsZEtlZXBBbGl2ZSA9IGZhbHNlXG4gICAgdGhpcy5wYXVzZWQgPSBmYWxzZVxuICAgIHRoaXMucmVzdW1lID0gdGhpcy5yZXN1bWUuYmluZCh0aGlzKVxuXG4gICAgdGhpcy5ieXRlc1JlYWQgPSAwXG5cbiAgICB0aGlzLmtlZXBBbGl2ZSA9ICcnXG4gICAgdGhpcy5jb250ZW50TGVuZ3RoID0gJydcbiAgICB0aGlzLmNvbm5lY3Rpb24gPSAnJ1xuICAgIHRoaXMubWF4UmVzcG9uc2VTaXplID0gY2xpZW50W2tNYXhSZXNwb25zZVNpemVdXG4gIH1cblxuICBzZXRUaW1lb3V0ICh2YWx1ZSwgdHlwZSkge1xuICAgIHRoaXMudGltZW91dFR5cGUgPSB0eXBlXG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLnRpbWVvdXRWYWx1ZSkge1xuICAgICAgdGltZXJzLmNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpXG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgdGhpcy50aW1lb3V0ID0gdGltZXJzLnNldFRpbWVvdXQob25QYXJzZXJUaW1lb3V0LCB2YWx1ZSwgdGhpcylcbiAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIGVsc2U6IG9ubHkgZm9yIGplc3RcbiAgICAgICAgaWYgKHRoaXMudGltZW91dC51bnJlZikge1xuICAgICAgICAgIHRoaXMudGltZW91dC51bnJlZigpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudGltZW91dCA9IG51bGxcbiAgICAgIH1cbiAgICAgIHRoaXMudGltZW91dFZhbHVlID0gdmFsdWVcbiAgICB9IGVsc2UgaWYgKHRoaXMudGltZW91dCkge1xuICAgICAgLy8gaXN0YW5idWwgaWdub3JlIGVsc2U6IG9ubHkgZm9yIGplc3RcbiAgICAgIGlmICh0aGlzLnRpbWVvdXQucmVmcmVzaCkge1xuICAgICAgICB0aGlzLnRpbWVvdXQucmVmcmVzaCgpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmVzdW1lICgpIHtcbiAgICBpZiAodGhpcy5zb2NrZXQuZGVzdHJveWVkIHx8ICF0aGlzLnBhdXNlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgYXNzZXJ0KHRoaXMucHRyICE9IG51bGwpXG4gICAgYXNzZXJ0KGN1cnJlbnRQYXJzZXIgPT0gbnVsbClcblxuICAgIHRoaXMubGxodHRwLmxsaHR0cF9yZXN1bWUodGhpcy5wdHIpXG5cbiAgICBhc3NlcnQodGhpcy50aW1lb3V0VHlwZSA9PT0gVElNRU9VVF9CT0RZKVxuICAgIGlmICh0aGlzLnRpbWVvdXQpIHtcbiAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBvbmx5IGZvciBqZXN0XG4gICAgICBpZiAodGhpcy50aW1lb3V0LnJlZnJlc2gpIHtcbiAgICAgICAgdGhpcy50aW1lb3V0LnJlZnJlc2goKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucGF1c2VkID0gZmFsc2VcbiAgICB0aGlzLmV4ZWN1dGUodGhpcy5zb2NrZXQucmVhZCgpIHx8IEVNUFRZX0JVRikgLy8gRmx1c2ggcGFyc2VyLlxuICAgIHRoaXMucmVhZE1vcmUoKVxuICB9XG5cbiAgcmVhZE1vcmUgKCkge1xuICAgIHdoaWxlICghdGhpcy5wYXVzZWQgJiYgdGhpcy5wdHIpIHtcbiAgICAgIGNvbnN0IGNodW5rID0gdGhpcy5zb2NrZXQucmVhZCgpXG4gICAgICBpZiAoY2h1bmsgPT09IG51bGwpIHtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIHRoaXMuZXhlY3V0ZShjaHVuaylcbiAgICB9XG4gIH1cblxuICBleGVjdXRlIChkYXRhKSB7XG4gICAgYXNzZXJ0KHRoaXMucHRyICE9IG51bGwpXG4gICAgYXNzZXJ0KGN1cnJlbnRQYXJzZXIgPT0gbnVsbClcbiAgICBhc3NlcnQoIXRoaXMucGF1c2VkKVxuXG4gICAgY29uc3QgeyBzb2NrZXQsIGxsaHR0cCB9ID0gdGhpc1xuXG4gICAgaWYgKGRhdGEubGVuZ3RoID4gY3VycmVudEJ1ZmZlclNpemUpIHtcbiAgICAgIGlmIChjdXJyZW50QnVmZmVyUHRyKSB7XG4gICAgICAgIGxsaHR0cC5mcmVlKGN1cnJlbnRCdWZmZXJQdHIpXG4gICAgICB9XG4gICAgICBjdXJyZW50QnVmZmVyU2l6ZSA9IE1hdGguY2VpbChkYXRhLmxlbmd0aCAvIDQwOTYpICogNDA5NlxuICAgICAgY3VycmVudEJ1ZmZlclB0ciA9IGxsaHR0cC5tYWxsb2MoY3VycmVudEJ1ZmZlclNpemUpXG4gICAgfVxuXG4gICAgbmV3IFVpbnQ4QXJyYXkobGxodHRwLm1lbW9yeS5idWZmZXIsIGN1cnJlbnRCdWZmZXJQdHIsIGN1cnJlbnRCdWZmZXJTaXplKS5zZXQoZGF0YSlcblxuICAgIC8vIENhbGwgYGV4ZWN1dGVgIG9uIHRoZSB3YXNtIHBhcnNlci5cbiAgICAvLyBXZSBwYXNzIHRoZSBgbGxodHRwX3BhcnNlcmAgcG9pbnRlciBhZGRyZXNzLCB0aGUgcG9pbnRlciBhZGRyZXNzIG9mIGJ1ZmZlciB2aWV3IGRhdGEsXG4gICAgLy8gYW5kIGZpbmFsbHkgdGhlIGxlbmd0aCBvZiBieXRlcyB0byBwYXJzZS5cbiAgICAvLyBUaGUgcmV0dXJuIHZhbHVlIGlzIGFuIGVycm9yIGNvZGUgb3IgYGNvbnN0YW50cy5FUlJPUi5PS2AuXG4gICAgdHJ5IHtcbiAgICAgIGxldCByZXRcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY3VycmVudEJ1ZmZlclJlZiA9IGRhdGFcbiAgICAgICAgY3VycmVudFBhcnNlciA9IHRoaXNcbiAgICAgICAgcmV0ID0gbGxodHRwLmxsaHR0cF9leGVjdXRlKHRoaXMucHRyLCBjdXJyZW50QnVmZmVyUHRyLCBkYXRhLmxlbmd0aClcbiAgICAgICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY2F0Y2ggKi9cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogZGlmZmljdWx0IHRvIG1ha2UgYSB0ZXN0IGNhc2UgZm9yICovXG4gICAgICAgIHRocm93IGVyclxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgY3VycmVudFBhcnNlciA9IG51bGxcbiAgICAgICAgY3VycmVudEJ1ZmZlclJlZiA9IG51bGxcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb2Zmc2V0ID0gbGxodHRwLmxsaHR0cF9nZXRfZXJyb3JfcG9zKHRoaXMucHRyKSAtIGN1cnJlbnRCdWZmZXJQdHJcblxuICAgICAgaWYgKHJldCA9PT0gY29uc3RhbnRzLkVSUk9SLlBBVVNFRF9VUEdSQURFKSB7XG4gICAgICAgIHRoaXMub25VcGdyYWRlKGRhdGEuc2xpY2Uob2Zmc2V0KSlcbiAgICAgIH0gZWxzZSBpZiAocmV0ID09PSBjb25zdGFudHMuRVJST1IuUEFVU0VEKSB7XG4gICAgICAgIHRoaXMucGF1c2VkID0gdHJ1ZVxuICAgICAgICBzb2NrZXQudW5zaGlmdChkYXRhLnNsaWNlKG9mZnNldCkpXG4gICAgICB9IGVsc2UgaWYgKHJldCAhPT0gY29uc3RhbnRzLkVSUk9SLk9LKSB7XG4gICAgICAgIGNvbnN0IHB0ciA9IGxsaHR0cC5sbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbih0aGlzLnB0cilcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSAnJ1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogZGlmZmljdWx0IHRvIG1ha2UgYSB0ZXN0IGNhc2UgZm9yICovXG4gICAgICAgIGlmIChwdHIpIHtcbiAgICAgICAgICBjb25zdCBsZW4gPSBuZXcgVWludDhBcnJheShsbGh0dHAubWVtb3J5LmJ1ZmZlciwgcHRyKS5pbmRleE9mKDApXG4gICAgICAgICAgbWVzc2FnZSA9XG4gICAgICAgICAgICAnUmVzcG9uc2UgZG9lcyBub3QgbWF0Y2ggdGhlIEhUVFAvMS4xIHByb3RvY29sICgnICtcbiAgICAgICAgICAgIEJ1ZmZlci5mcm9tKGxsaHR0cC5tZW1vcnkuYnVmZmVyLCBwdHIsIGxlbikudG9TdHJpbmcoKSArXG4gICAgICAgICAgICAnKSdcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgSFRUUFBhcnNlckVycm9yKG1lc3NhZ2UsIGNvbnN0YW50cy5FUlJPUltyZXRdLCBkYXRhLnNsaWNlKG9mZnNldCkpXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBlcnIpXG4gICAgfVxuICB9XG5cbiAgZGVzdHJveSAoKSB7XG4gICAgYXNzZXJ0KHRoaXMucHRyICE9IG51bGwpXG4gICAgYXNzZXJ0KGN1cnJlbnRQYXJzZXIgPT0gbnVsbClcblxuICAgIHRoaXMubGxodHRwLmxsaHR0cF9mcmVlKHRoaXMucHRyKVxuICAgIHRoaXMucHRyID0gbnVsbFxuXG4gICAgdGltZXJzLmNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpXG4gICAgdGhpcy50aW1lb3V0ID0gbnVsbFxuICAgIHRoaXMudGltZW91dFZhbHVlID0gbnVsbFxuICAgIHRoaXMudGltZW91dFR5cGUgPSBudWxsXG5cbiAgICB0aGlzLnBhdXNlZCA9IGZhbHNlXG4gIH1cblxuICBvblN0YXR1cyAoYnVmKSB7XG4gICAgdGhpcy5zdGF0dXNUZXh0ID0gYnVmLnRvU3RyaW5nKClcbiAgfVxuXG4gIG9uTWVzc2FnZUJlZ2luICgpIHtcbiAgICBjb25zdCB7IHNvY2tldCwgY2xpZW50IH0gPSB0aGlzXG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogZGlmZmljdWx0IHRvIG1ha2UgYSB0ZXN0IGNhc2UgZm9yICovXG4gICAgaWYgKHNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdXVxuICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuICB9XG5cbiAgb25IZWFkZXJGaWVsZCAoYnVmKSB7XG4gICAgY29uc3QgbGVuID0gdGhpcy5oZWFkZXJzLmxlbmd0aFxuXG4gICAgaWYgKChsZW4gJiAxKSA9PT0gMCkge1xuICAgICAgdGhpcy5oZWFkZXJzLnB1c2goYnVmKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhlYWRlcnNbbGVuIC0gMV0gPSBCdWZmZXIuY29uY2F0KFt0aGlzLmhlYWRlcnNbbGVuIC0gMV0sIGJ1Zl0pXG4gICAgfVxuXG4gICAgdGhpcy50cmFja0hlYWRlcihidWYubGVuZ3RoKVxuICB9XG5cbiAgb25IZWFkZXJWYWx1ZSAoYnVmKSB7XG4gICAgbGV0IGxlbiA9IHRoaXMuaGVhZGVycy5sZW5ndGhcblxuICAgIGlmICgobGVuICYgMSkgPT09IDEpIHtcbiAgICAgIHRoaXMuaGVhZGVycy5wdXNoKGJ1ZilcbiAgICAgIGxlbiArPSAxXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGVhZGVyc1tsZW4gLSAxXSA9IEJ1ZmZlci5jb25jYXQoW3RoaXMuaGVhZGVyc1tsZW4gLSAxXSwgYnVmXSlcbiAgICB9XG5cbiAgICBjb25zdCBrZXkgPSB0aGlzLmhlYWRlcnNbbGVuIC0gMl1cbiAgICBpZiAoa2V5Lmxlbmd0aCA9PT0gMTAgJiYga2V5LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT0gJ2tlZXAtYWxpdmUnKSB7XG4gICAgICB0aGlzLmtlZXBBbGl2ZSArPSBidWYudG9TdHJpbmcoKVxuICAgIH0gZWxzZSBpZiAoa2V5Lmxlbmd0aCA9PT0gMTAgJiYga2V5LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT0gJ2Nvbm5lY3Rpb24nKSB7XG4gICAgICB0aGlzLmNvbm5lY3Rpb24gKz0gYnVmLnRvU3RyaW5nKClcbiAgICB9IGVsc2UgaWYgKGtleS5sZW5ndGggPT09IDE0ICYmIGtleS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT09ICdjb250ZW50LWxlbmd0aCcpIHtcbiAgICAgIHRoaXMuY29udGVudExlbmd0aCArPSBidWYudG9TdHJpbmcoKVxuICAgIH1cblxuICAgIHRoaXMudHJhY2tIZWFkZXIoYnVmLmxlbmd0aClcbiAgfVxuXG4gIHRyYWNrSGVhZGVyIChsZW4pIHtcbiAgICB0aGlzLmhlYWRlcnNTaXplICs9IGxlblxuICAgIGlmICh0aGlzLmhlYWRlcnNTaXplID49IHRoaXMuaGVhZGVyc01heFNpemUpIHtcbiAgICAgIHV0aWwuZGVzdHJveSh0aGlzLnNvY2tldCwgbmV3IEhlYWRlcnNPdmVyZmxvd0Vycm9yKCkpXG4gICAgfVxuICB9XG5cbiAgb25VcGdyYWRlIChoZWFkKSB7XG4gICAgY29uc3QgeyB1cGdyYWRlLCBjbGllbnQsIHNvY2tldCwgaGVhZGVycywgc3RhdHVzQ29kZSB9ID0gdGhpc1xuXG4gICAgYXNzZXJ0KHVwZ3JhZGUpXG5cbiAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XV1cbiAgICBhc3NlcnQocmVxdWVzdClcblxuICAgIGFzc2VydCghc29ja2V0LmRlc3Ryb3llZClcbiAgICBhc3NlcnQoc29ja2V0ID09PSBjbGllbnRba1NvY2tldF0pXG4gICAgYXNzZXJ0KCF0aGlzLnBhdXNlZClcbiAgICBhc3NlcnQocmVxdWVzdC51cGdyYWRlIHx8IHJlcXVlc3QubWV0aG9kID09PSAnQ09OTkVDVCcpXG5cbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBudWxsXG4gICAgdGhpcy5zdGF0dXNUZXh0ID0gJydcbiAgICB0aGlzLnNob3VsZEtlZXBBbGl2ZSA9IG51bGxcblxuICAgIGFzc2VydCh0aGlzLmhlYWRlcnMubGVuZ3RoICUgMiA9PT0gMClcbiAgICB0aGlzLmhlYWRlcnMgPSBbXVxuICAgIHRoaXMuaGVhZGVyc1NpemUgPSAwXG5cbiAgICBzb2NrZXQudW5zaGlmdChoZWFkKVxuXG4gICAgc29ja2V0W2tQYXJzZXJdLmRlc3Ryb3koKVxuICAgIHNvY2tldFtrUGFyc2VyXSA9IG51bGxcblxuICAgIHNvY2tldFtrQ2xpZW50XSA9IG51bGxcbiAgICBzb2NrZXRba0Vycm9yXSA9IG51bGxcbiAgICBzb2NrZXRcbiAgICAgIC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvblNvY2tldEVycm9yKVxuICAgICAgLnJlbW92ZUxpc3RlbmVyKCdyZWFkYWJsZScsIG9uU29ja2V0UmVhZGFibGUpXG4gICAgICAucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIG9uU29ja2V0RW5kKVxuICAgICAgLnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uU29ja2V0Q2xvc2UpXG5cbiAgICBjbGllbnRba1NvY2tldF0gPSBudWxsXG4gICAgY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XSsrXSA9IG51bGxcbiAgICBjbGllbnQuZW1pdCgnZGlzY29ubmVjdCcsIGNsaWVudFtrVXJsXSwgW2NsaWVudF0sIG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoJ3VwZ3JhZGUnKSlcblxuICAgIHRyeSB7XG4gICAgICByZXF1ZXN0Lm9uVXBncmFkZShzdGF0dXNDb2RlLCBoZWFkZXJzLCBzb2NrZXQpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBlcnIpXG4gICAgfVxuXG4gICAgcmVzdW1lKGNsaWVudClcbiAgfVxuXG4gIG9uSGVhZGVyc0NvbXBsZXRlIChzdGF0dXNDb2RlLCB1cGdyYWRlLCBzaG91bGRLZWVwQWxpdmUpIHtcbiAgICBjb25zdCB7IGNsaWVudCwgc29ja2V0LCBoZWFkZXJzLCBzdGF0dXNUZXh0IH0gPSB0aGlzXG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogZGlmZmljdWx0IHRvIG1ha2UgYSB0ZXN0IGNhc2UgZm9yICovXG4gICAgaWYgKHNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdXVxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IGRpZmZpY3VsdCB0byBtYWtlIGEgdGVzdCBjYXNlIGZvciAqL1xuICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgYXNzZXJ0KCF0aGlzLnVwZ3JhZGUpXG4gICAgYXNzZXJ0KHRoaXMuc3RhdHVzQ29kZSA8IDIwMClcblxuICAgIGlmIChzdGF0dXNDb2RlID09PSAxMDApIHtcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBTb2NrZXRFcnJvcignYmFkIHJlc3BvbnNlJywgdXRpbC5nZXRTb2NrZXRJbmZvKHNvY2tldCkpKVxuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgLyogdGhpcyBjYW4gb25seSBoYXBwZW4gaWYgc2VydmVyIGlzIG1pc2JlaGF2aW5nICovXG4gICAgaWYgKHVwZ3JhZGUgJiYgIXJlcXVlc3QudXBncmFkZSkge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IFNvY2tldEVycm9yKCdiYWQgdXBncmFkZScsIHV0aWwuZ2V0U29ja2V0SW5mbyhzb2NrZXQpKSlcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0aGlzLnRpbWVvdXRUeXBlLCBUSU1FT1VUX0hFQURFUlMpXG5cbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBzdGF0dXNDb2RlXG4gICAgdGhpcy5zaG91bGRLZWVwQWxpdmUgPSAoXG4gICAgICBzaG91bGRLZWVwQWxpdmUgfHxcbiAgICAgIC8vIE92ZXJyaWRlIGxsaHR0cCB2YWx1ZSB3aGljaCBkb2VzIG5vdCBhbGxvdyBrZWVwQWxpdmUgZm9yIEhFQUQuXG4gICAgICAocmVxdWVzdC5tZXRob2QgPT09ICdIRUFEJyAmJiAhc29ja2V0W2tSZXNldF0gJiYgdGhpcy5jb25uZWN0aW9uLnRvTG93ZXJDYXNlKCkgPT09ICdrZWVwLWFsaXZlJylcbiAgICApXG5cbiAgICBpZiAodGhpcy5zdGF0dXNDb2RlID49IDIwMCkge1xuICAgICAgY29uc3QgYm9keVRpbWVvdXQgPSByZXF1ZXN0LmJvZHlUaW1lb3V0ICE9IG51bGxcbiAgICAgICAgPyByZXF1ZXN0LmJvZHlUaW1lb3V0XG4gICAgICAgIDogY2xpZW50W2tCb2R5VGltZW91dF1cbiAgICAgIHRoaXMuc2V0VGltZW91dChib2R5VGltZW91dCwgVElNRU9VVF9CT0RZKVxuICAgIH0gZWxzZSBpZiAodGhpcy50aW1lb3V0KSB7XG4gICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogb25seSBmb3IgamVzdFxuICAgICAgaWYgKHRoaXMudGltZW91dC5yZWZyZXNoKSB7XG4gICAgICAgIHRoaXMudGltZW91dC5yZWZyZXNoKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocmVxdWVzdC5tZXRob2QgPT09ICdDT05ORUNUJykge1xuICAgICAgYXNzZXJ0KGNsaWVudFtrUnVubmluZ10gPT09IDEpXG4gICAgICB0aGlzLnVwZ3JhZGUgPSB0cnVlXG4gICAgICByZXR1cm4gMlxuICAgIH1cblxuICAgIGlmICh1cGdyYWRlKSB7XG4gICAgICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA9PT0gMSlcbiAgICAgIHRoaXMudXBncmFkZSA9IHRydWVcbiAgICAgIHJldHVybiAyXG4gICAgfVxuXG4gICAgYXNzZXJ0KHRoaXMuaGVhZGVycy5sZW5ndGggJSAyID09PSAwKVxuICAgIHRoaXMuaGVhZGVycyA9IFtdXG4gICAgdGhpcy5oZWFkZXJzU2l6ZSA9IDBcblxuICAgIGlmICh0aGlzLnNob3VsZEtlZXBBbGl2ZSAmJiBjbGllbnRba1BpcGVsaW5pbmddKSB7XG4gICAgICBjb25zdCBrZWVwQWxpdmVUaW1lb3V0ID0gdGhpcy5rZWVwQWxpdmUgPyB1dGlsLnBhcnNlS2VlcEFsaXZlVGltZW91dCh0aGlzLmtlZXBBbGl2ZSkgOiBudWxsXG5cbiAgICAgIGlmIChrZWVwQWxpdmVUaW1lb3V0ICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgdGltZW91dCA9IE1hdGgubWluKFxuICAgICAgICAgIGtlZXBBbGl2ZVRpbWVvdXQgLSBjbGllbnRba0tlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGRdLFxuICAgICAgICAgIGNsaWVudFtrS2VlcEFsaXZlTWF4VGltZW91dF1cbiAgICAgICAgKVxuICAgICAgICBpZiAodGltZW91dCA8PSAwKSB7XG4gICAgICAgICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2xpZW50W2tLZWVwQWxpdmVUaW1lb3V0VmFsdWVdID0gdGltZW91dFxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjbGllbnRba0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZV0gPSBjbGllbnRba0tlZXBBbGl2ZURlZmF1bHRUaW1lb3V0XVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTdG9wIG1vcmUgcmVxdWVzdHMgZnJvbSBiZWluZyBkaXNwYXRjaGVkLlxuICAgICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gICAgfVxuXG4gICAgY29uc3QgcGF1c2UgPSByZXF1ZXN0Lm9uSGVhZGVycyhzdGF0dXNDb2RlLCBoZWFkZXJzLCB0aGlzLnJlc3VtZSwgc3RhdHVzVGV4dCkgPT09IGZhbHNlXG5cbiAgICBpZiAocmVxdWVzdC5hYm9ydGVkKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICBpZiAocmVxdWVzdC5tZXRob2QgPT09ICdIRUFEJykge1xuICAgICAgcmV0dXJuIDFcbiAgICB9XG5cbiAgICBpZiAoc3RhdHVzQ29kZSA8IDIwMCkge1xuICAgICAgcmV0dXJuIDFcbiAgICB9XG5cbiAgICBpZiAoc29ja2V0W2tCbG9ja2luZ10pIHtcbiAgICAgIHNvY2tldFtrQmxvY2tpbmddID0gZmFsc2VcbiAgICAgIHJlc3VtZShjbGllbnQpXG4gICAgfVxuXG4gICAgcmV0dXJuIHBhdXNlID8gY29uc3RhbnRzLkVSUk9SLlBBVVNFRCA6IDBcbiAgfVxuXG4gIG9uQm9keSAoYnVmKSB7XG4gICAgY29uc3QgeyBjbGllbnQsIHNvY2tldCwgc3RhdHVzQ29kZSwgbWF4UmVzcG9uc2VTaXplIH0gPSB0aGlzXG5cbiAgICBpZiAoc29ja2V0LmRlc3Ryb3llZCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdCA9IGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF1dXG4gICAgYXNzZXJ0KHJlcXVlc3QpXG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwodGhpcy50aW1lb3V0VHlwZSwgVElNRU9VVF9CT0RZKVxuICAgIGlmICh0aGlzLnRpbWVvdXQpIHtcbiAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBvbmx5IGZvciBqZXN0XG4gICAgICBpZiAodGhpcy50aW1lb3V0LnJlZnJlc2gpIHtcbiAgICAgICAgdGhpcy50aW1lb3V0LnJlZnJlc2goKVxuICAgICAgfVxuICAgIH1cblxuICAgIGFzc2VydChzdGF0dXNDb2RlID49IDIwMClcblxuICAgIGlmIChtYXhSZXNwb25zZVNpemUgPiAtMSAmJiB0aGlzLmJ5dGVzUmVhZCArIGJ1Zi5sZW5ndGggPiBtYXhSZXNwb25zZVNpemUpIHtcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBSZXNwb25zZUV4Y2VlZGVkTWF4U2l6ZUVycm9yKCkpXG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICB0aGlzLmJ5dGVzUmVhZCArPSBidWYubGVuZ3RoXG5cbiAgICBpZiAocmVxdWVzdC5vbkRhdGEoYnVmKSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBjb25zdGFudHMuRVJST1IuUEFVU0VEXG4gICAgfVxuICB9XG5cbiAgb25NZXNzYWdlQ29tcGxldGUgKCkge1xuICAgIGNvbnN0IHsgY2xpZW50LCBzb2NrZXQsIHN0YXR1c0NvZGUsIHVwZ3JhZGUsIGhlYWRlcnMsIGNvbnRlbnRMZW5ndGgsIGJ5dGVzUmVhZCwgc2hvdWxkS2VlcEFsaXZlIH0gPSB0aGlzXG5cbiAgICBpZiAoc29ja2V0LmRlc3Ryb3llZCAmJiAoIXN0YXR1c0NvZGUgfHwgc2hvdWxkS2VlcEFsaXZlKSkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgaWYgKHVwZ3JhZGUpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdXVxuICAgIGFzc2VydChyZXF1ZXN0KVxuXG4gICAgYXNzZXJ0KHN0YXR1c0NvZGUgPj0gMTAwKVxuXG4gICAgdGhpcy5zdGF0dXNDb2RlID0gbnVsbFxuICAgIHRoaXMuc3RhdHVzVGV4dCA9ICcnXG4gICAgdGhpcy5ieXRlc1JlYWQgPSAwXG4gICAgdGhpcy5jb250ZW50TGVuZ3RoID0gJydcbiAgICB0aGlzLmtlZXBBbGl2ZSA9ICcnXG4gICAgdGhpcy5jb25uZWN0aW9uID0gJydcblxuICAgIGFzc2VydCh0aGlzLmhlYWRlcnMubGVuZ3RoICUgMiA9PT0gMClcbiAgICB0aGlzLmhlYWRlcnMgPSBbXVxuICAgIHRoaXMuaGVhZGVyc1NpemUgPSAwXG5cbiAgICBpZiAoc3RhdHVzQ29kZSA8IDIwMCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IHNob3VsZCBiZSBoYW5kbGVkIGJ5IGxsaHR0cD8gKi9cbiAgICBpZiAocmVxdWVzdC5tZXRob2QgIT09ICdIRUFEJyAmJiBjb250ZW50TGVuZ3RoICYmIGJ5dGVzUmVhZCAhPT0gcGFyc2VJbnQoY29udGVudExlbmd0aCwgMTApKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgUmVzcG9uc2VDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpKVxuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgcmVxdWVzdC5vbkNvbXBsZXRlKGhlYWRlcnMpXG5cbiAgICBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdKytdID0gbnVsbFxuXG4gICAgaWYgKHNvY2tldFtrV3JpdGluZ10pIHtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjbGllbnRba1J1bm5pbmddLCAwKVxuICAgICAgLy8gUmVzcG9uc2UgY29tcGxldGVkIGJlZm9yZSByZXF1ZXN0LlxuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEluZm9ybWF0aW9uYWxFcnJvcigncmVzZXQnKSlcbiAgICAgIHJldHVybiBjb25zdGFudHMuRVJST1IuUEFVU0VEXG4gICAgfSBlbHNlIGlmICghc2hvdWxkS2VlcEFsaXZlKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgSW5mb3JtYXRpb25hbEVycm9yKCdyZXNldCcpKVxuICAgICAgcmV0dXJuIGNvbnN0YW50cy5FUlJPUi5QQVVTRURcbiAgICB9IGVsc2UgaWYgKHNvY2tldFtrUmVzZXRdICYmIGNsaWVudFtrUnVubmluZ10gPT09IDApIHtcbiAgICAgIC8vIERlc3Ryb3kgc29ja2V0IG9uY2UgYWxsIHJlcXVlc3RzIGhhdmUgY29tcGxldGVkLlxuICAgICAgLy8gVGhlIHJlcXVlc3QgYXQgdGhlIHRhaWwgb2YgdGhlIHBpcGVsaW5lIGlzIHRoZSBvbmVcbiAgICAgIC8vIHRoYXQgcmVxdWVzdGVkIHJlc2V0IGFuZCBubyBmdXJ0aGVyIHJlcXVlc3RzIHNob3VsZFxuICAgICAgLy8gaGF2ZSBiZWVuIHF1ZXVlZCBzaW5jZSB0aGVuLlxuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEluZm9ybWF0aW9uYWxFcnJvcigncmVzZXQnKSlcbiAgICAgIHJldHVybiBjb25zdGFudHMuRVJST1IuUEFVU0VEXG4gICAgfSBlbHNlIGlmIChjbGllbnRba1BpcGVsaW5pbmddID09PSAxKSB7XG4gICAgICAvLyBXZSBtdXN0IHdhaXQgYSBmdWxsIGV2ZW50IGxvb3AgY3ljbGUgdG8gcmV1c2UgdGhpcyBzb2NrZXQgdG8gbWFrZSBzdXJlXG4gICAgICAvLyB0aGF0IG5vbi1zcGVjIGNvbXBsaWFudCBzZXJ2ZXJzIGFyZSBub3QgY2xvc2luZyB0aGUgY29ubmVjdGlvbiBldmVuIGlmIHRoZXlcbiAgICAgIC8vIHNhaWQgdGhleSB3b24ndC5cbiAgICAgIHNldEltbWVkaWF0ZShyZXN1bWUsIGNsaWVudClcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdW1lKGNsaWVudClcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gb25QYXJzZXJUaW1lb3V0IChwYXJzZXIpIHtcbiAgY29uc3QgeyBzb2NrZXQsIHRpbWVvdXRUeXBlLCBjbGllbnQgfSA9IHBhcnNlclxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmICh0aW1lb3V0VHlwZSA9PT0gVElNRU9VVF9IRUFERVJTKSB7XG4gICAgaWYgKCFzb2NrZXRba1dyaXRpbmddIHx8IHNvY2tldC53cml0YWJsZU5lZWREcmFpbiB8fCBjbGllbnRba1J1bm5pbmddID4gMSkge1xuICAgICAgYXNzZXJ0KCFwYXJzZXIucGF1c2VkLCAnY2Fubm90IGJlIHBhdXNlZCB3aGlsZSB3YWl0aW5nIGZvciBoZWFkZXJzJylcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBIZWFkZXJzVGltZW91dEVycm9yKCkpXG4gICAgfVxuICB9IGVsc2UgaWYgKHRpbWVvdXRUeXBlID09PSBUSU1FT1VUX0JPRFkpIHtcbiAgICBpZiAoIXBhcnNlci5wYXVzZWQpIHtcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBCb2R5VGltZW91dEVycm9yKCkpXG4gICAgfVxuICB9IGVsc2UgaWYgKHRpbWVvdXRUeXBlID09PSBUSU1FT1VUX0lETEUpIHtcbiAgICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA9PT0gMCAmJiBjbGllbnRba0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZV0pXG4gICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEluZm9ybWF0aW9uYWxFcnJvcignc29ja2V0IGlkbGUgdGltZW91dCcpKVxuICB9XG59XG5cbmZ1bmN0aW9uIG9uU29ja2V0UmVhZGFibGUgKCkge1xuICBjb25zdCB7IFtrUGFyc2VyXTogcGFyc2VyIH0gPSB0aGlzXG4gIGlmIChwYXJzZXIpIHtcbiAgICBwYXJzZXIucmVhZE1vcmUoKVxuICB9XG59XG5cbmZ1bmN0aW9uIG9uU29ja2V0RXJyb3IgKGVycikge1xuICBjb25zdCB7IFtrQ2xpZW50XTogY2xpZW50LCBba1BhcnNlcl06IHBhcnNlciB9ID0gdGhpc1xuXG4gIGFzc2VydChlcnIuY29kZSAhPT0gJ0VSUl9UTFNfQ0VSVF9BTFROQU1FX0lOVkFMSUQnKVxuXG4gIGlmIChjbGllbnRba0hUVFBDb25uVmVyc2lvbl0gIT09ICdoMicpIHtcbiAgICAvLyBPbiBNYWMgT1MsIHdlIGdldCBhbiBFQ09OTlJFU0VUIGV2ZW4gaWYgdGhlcmUgaXMgYSBmdWxsIGJvZHkgdG8gYmUgZm9yd2FyZGVkXG4gICAgLy8gdG8gdGhlIHVzZXIuXG4gICAgaWYgKGVyci5jb2RlID09PSAnRUNPTk5SRVNFVCcgJiYgcGFyc2VyLnN0YXR1c0NvZGUgJiYgIXBhcnNlci5zaG91bGRLZWVwQWxpdmUpIHtcbiAgICAgIC8vIFdlIHRyZWF0IGFsbCBpbmNvbWluZyBkYXRhIHNvIGZvciBhcyBhIHZhbGlkIHJlc3BvbnNlLlxuICAgICAgcGFyc2VyLm9uTWVzc2FnZUNvbXBsZXRlKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgfVxuXG4gIHRoaXNba0Vycm9yXSA9IGVyclxuXG4gIG9uRXJyb3IodGhpc1trQ2xpZW50XSwgZXJyKVxufVxuXG5mdW5jdGlvbiBvbkVycm9yIChjbGllbnQsIGVycikge1xuICBpZiAoXG4gICAgY2xpZW50W2tSdW5uaW5nXSA9PT0gMCAmJlxuICAgIGVyci5jb2RlICE9PSAnVU5EX0VSUl9JTkZPJyAmJlxuICAgIGVyci5jb2RlICE9PSAnVU5EX0VSUl9TT0NLRVQnXG4gICkge1xuICAgIC8vIEVycm9yIGlzIG5vdCBjYXVzZWQgYnkgcnVubmluZyByZXF1ZXN0IGFuZCBub3QgYSByZWNvdmVyYWJsZVxuICAgIC8vIHNvY2tldCBlcnJvci5cblxuICAgIGFzc2VydChjbGllbnRba1BlbmRpbmdJZHhdID09PSBjbGllbnRba1J1bm5pbmdJZHhdKVxuXG4gICAgY29uc3QgcmVxdWVzdHMgPSBjbGllbnRba1F1ZXVlXS5zcGxpY2UoY2xpZW50W2tSdW5uaW5nSWR4XSlcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcXVlc3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCByZXF1ZXN0ID0gcmVxdWVzdHNbaV1cbiAgICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIGVycilcbiAgICB9XG4gICAgYXNzZXJ0KGNsaWVudFtrU2l6ZV0gPT09IDApXG4gIH1cbn1cblxuZnVuY3Rpb24gb25Tb2NrZXRFbmQgKCkge1xuICBjb25zdCB7IFtrUGFyc2VyXTogcGFyc2VyLCBba0NsaWVudF06IGNsaWVudCB9ID0gdGhpc1xuXG4gIGlmIChjbGllbnRba0hUVFBDb25uVmVyc2lvbl0gIT09ICdoMicpIHtcbiAgICBpZiAocGFyc2VyLnN0YXR1c0NvZGUgJiYgIXBhcnNlci5zaG91bGRLZWVwQWxpdmUpIHtcbiAgICAgIC8vIFdlIHRyZWF0IGFsbCBpbmNvbWluZyBkYXRhIHNvIGZhciBhcyBhIHZhbGlkIHJlc3BvbnNlLlxuICAgICAgcGFyc2VyLm9uTWVzc2FnZUNvbXBsZXRlKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgfVxuXG4gIHV0aWwuZGVzdHJveSh0aGlzLCBuZXcgU29ja2V0RXJyb3IoJ290aGVyIHNpZGUgY2xvc2VkJywgdXRpbC5nZXRTb2NrZXRJbmZvKHRoaXMpKSlcbn1cblxuZnVuY3Rpb24gb25Tb2NrZXRDbG9zZSAoKSB7XG4gIGNvbnN0IHsgW2tDbGllbnRdOiBjbGllbnQsIFtrUGFyc2VyXTogcGFyc2VyIH0gPSB0aGlzXG5cbiAgaWYgKGNsaWVudFtrSFRUUENvbm5WZXJzaW9uXSA9PT0gJ2gxJyAmJiBwYXJzZXIpIHtcbiAgICBpZiAoIXRoaXNba0Vycm9yXSAmJiBwYXJzZXIuc3RhdHVzQ29kZSAmJiAhcGFyc2VyLnNob3VsZEtlZXBBbGl2ZSkge1xuICAgICAgLy8gV2UgdHJlYXQgYWxsIGluY29taW5nIGRhdGEgc28gZmFyIGFzIGEgdmFsaWQgcmVzcG9uc2UuXG4gICAgICBwYXJzZXIub25NZXNzYWdlQ29tcGxldGUoKVxuICAgIH1cblxuICAgIHRoaXNba1BhcnNlcl0uZGVzdHJveSgpXG4gICAgdGhpc1trUGFyc2VyXSA9IG51bGxcbiAgfVxuXG4gIGNvbnN0IGVyciA9IHRoaXNba0Vycm9yXSB8fCBuZXcgU29ja2V0RXJyb3IoJ2Nsb3NlZCcsIHV0aWwuZ2V0U29ja2V0SW5mbyh0aGlzKSlcblxuICBjbGllbnRba1NvY2tldF0gPSBudWxsXG5cbiAgaWYgKGNsaWVudC5kZXN0cm95ZWQpIHtcbiAgICBhc3NlcnQoY2xpZW50W2tQZW5kaW5nXSA9PT0gMClcblxuICAgIC8vIEZhaWwgZW50aXJlIHF1ZXVlLlxuICAgIGNvbnN0IHJlcXVlc3RzID0gY2xpZW50W2tRdWV1ZV0uc3BsaWNlKGNsaWVudFtrUnVubmluZ0lkeF0pXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXF1ZXN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgcmVxdWVzdCA9IHJlcXVlc3RzW2ldXG4gICAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIpXG4gICAgfVxuICB9IGVsc2UgaWYgKGNsaWVudFtrUnVubmluZ10gPiAwICYmIGVyci5jb2RlICE9PSAnVU5EX0VSUl9JTkZPJykge1xuICAgIC8vIEZhaWwgaGVhZCBvZiBwaXBlbGluZS5cbiAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XV1cbiAgICBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdKytdID0gbnVsbFxuXG4gICAgZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyKVxuICB9XG5cbiAgY2xpZW50W2tQZW5kaW5nSWR4XSA9IGNsaWVudFtrUnVubmluZ0lkeF1cblxuICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA9PT0gMClcblxuICBjbGllbnQuZW1pdCgnZGlzY29ubmVjdCcsIGNsaWVudFtrVXJsXSwgW2NsaWVudF0sIGVycilcblxuICByZXN1bWUoY2xpZW50KVxufVxuXG5hc3luYyBmdW5jdGlvbiBjb25uZWN0IChjbGllbnQpIHtcbiAgYXNzZXJ0KCFjbGllbnRba0Nvbm5lY3RpbmddKVxuICBhc3NlcnQoIWNsaWVudFtrU29ja2V0XSlcblxuICBsZXQgeyBob3N0LCBob3N0bmFtZSwgcHJvdG9jb2wsIHBvcnQgfSA9IGNsaWVudFtrVXJsXVxuXG4gIC8vIFJlc29sdmUgaXB2NlxuICBpZiAoaG9zdG5hbWVbMF0gPT09ICdbJykge1xuICAgIGNvbnN0IGlkeCA9IGhvc3RuYW1lLmluZGV4T2YoJ10nKVxuXG4gICAgYXNzZXJ0KGlkeCAhPT0gLTEpXG4gICAgY29uc3QgaXAgPSBob3N0bmFtZS5zdWJzdHJpbmcoMSwgaWR4KVxuXG4gICAgYXNzZXJ0KG5ldC5pc0lQKGlwKSlcbiAgICBob3N0bmFtZSA9IGlwXG4gIH1cblxuICBjbGllbnRba0Nvbm5lY3RpbmddID0gdHJ1ZVxuXG4gIGlmIChjaGFubmVscy5iZWZvcmVDb25uZWN0Lmhhc1N1YnNjcmliZXJzKSB7XG4gICAgY2hhbm5lbHMuYmVmb3JlQ29ubmVjdC5wdWJsaXNoKHtcbiAgICAgIGNvbm5lY3RQYXJhbXM6IHtcbiAgICAgICAgaG9zdCxcbiAgICAgICAgaG9zdG5hbWUsXG4gICAgICAgIHByb3RvY29sLFxuICAgICAgICBwb3J0LFxuICAgICAgICBzZXJ2ZXJuYW1lOiBjbGllbnRba1NlcnZlck5hbWVdLFxuICAgICAgICBsb2NhbEFkZHJlc3M6IGNsaWVudFtrTG9jYWxBZGRyZXNzXVxuICAgICAgfSxcbiAgICAgIGNvbm5lY3RvcjogY2xpZW50W2tDb25uZWN0b3JdXG4gICAgfSlcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3Qgc29ja2V0ID0gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY2xpZW50W2tDb25uZWN0b3JdKHtcbiAgICAgICAgaG9zdCxcbiAgICAgICAgaG9zdG5hbWUsXG4gICAgICAgIHByb3RvY29sLFxuICAgICAgICBwb3J0LFxuICAgICAgICBzZXJ2ZXJuYW1lOiBjbGllbnRba1NlcnZlck5hbWVdLFxuICAgICAgICBsb2NhbEFkZHJlc3M6IGNsaWVudFtrTG9jYWxBZGRyZXNzXVxuICAgICAgfSwgKGVyciwgc29ja2V0KSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICByZWplY3QoZXJyKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc29sdmUoc29ja2V0KVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0pXG5cbiAgICBpZiAoY2xpZW50LmRlc3Ryb3llZCkge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldC5vbignZXJyb3InLCAoKSA9PiB7fSksIG5ldyBDbGllbnREZXN0cm95ZWRFcnJvcigpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY2xpZW50W2tDb25uZWN0aW5nXSA9IGZhbHNlXG5cbiAgICBhc3NlcnQoc29ja2V0KVxuXG4gICAgY29uc3QgaXNIMiA9IHNvY2tldC5hbHBuUHJvdG9jb2wgPT09ICdoMidcbiAgICBpZiAoaXNIMikge1xuICAgICAgaWYgKCFoMkV4cGVyaW1lbnRhbFdhcm5lZCkge1xuICAgICAgICBoMkV4cGVyaW1lbnRhbFdhcm5lZCA9IHRydWVcbiAgICAgICAgcHJvY2Vzcy5lbWl0V2FybmluZygnSDIgc3VwcG9ydCBpcyBleHBlcmltZW50YWwsIGV4cGVjdCB0aGVtIHRvIGNoYW5nZSBhdCBhbnkgdGltZS4nLCB7XG4gICAgICAgICAgY29kZTogJ1VORElDSS1IMidcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2Vzc2lvbiA9IGh0dHAyLmNvbm5lY3QoY2xpZW50W2tVcmxdLCB7XG4gICAgICAgIGNyZWF0ZUNvbm5lY3Rpb246ICgpID0+IHNvY2tldCxcbiAgICAgICAgcGVlck1heENvbmN1cnJlbnRTdHJlYW1zOiBjbGllbnRba0hUVFAyU2Vzc2lvblN0YXRlXS5tYXhDb25jdXJyZW50U3RyZWFtc1xuICAgICAgfSlcblxuICAgICAgY2xpZW50W2tIVFRQQ29ublZlcnNpb25dID0gJ2gyJ1xuICAgICAgc2Vzc2lvbltrQ2xpZW50XSA9IGNsaWVudFxuICAgICAgc2Vzc2lvbltrU29ja2V0XSA9IHNvY2tldFxuICAgICAgc2Vzc2lvbi5vbignZXJyb3InLCBvbkh0dHAyU2Vzc2lvbkVycm9yKVxuICAgICAgc2Vzc2lvbi5vbignZnJhbWVFcnJvcicsIG9uSHR0cDJGcmFtZUVycm9yKVxuICAgICAgc2Vzc2lvbi5vbignZW5kJywgb25IdHRwMlNlc3Npb25FbmQpXG4gICAgICBzZXNzaW9uLm9uKCdnb2F3YXknLCBvbkhUVFAyR29Bd2F5KVxuICAgICAgc2Vzc2lvbi5vbignY2xvc2UnLCBvblNvY2tldENsb3NlKVxuICAgICAgc2Vzc2lvbi51bnJlZigpXG5cbiAgICAgIGNsaWVudFtrSFRUUDJTZXNzaW9uXSA9IHNlc3Npb25cbiAgICAgIHNvY2tldFtrSFRUUDJTZXNzaW9uXSA9IHNlc3Npb25cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFsbGh0dHBJbnN0YW5jZSkge1xuICAgICAgICBsbGh0dHBJbnN0YW5jZSA9IGF3YWl0IGxsaHR0cFByb21pc2VcbiAgICAgICAgbGxodHRwUHJvbWlzZSA9IG51bGxcbiAgICAgIH1cblxuICAgICAgc29ja2V0W2tOb1JlZl0gPSBmYWxzZVxuICAgICAgc29ja2V0W2tXcml0aW5nXSA9IGZhbHNlXG4gICAgICBzb2NrZXRba1Jlc2V0XSA9IGZhbHNlXG4gICAgICBzb2NrZXRba0Jsb2NraW5nXSA9IGZhbHNlXG4gICAgICBzb2NrZXRba1BhcnNlcl0gPSBuZXcgUGFyc2VyKGNsaWVudCwgc29ja2V0LCBsbGh0dHBJbnN0YW5jZSlcbiAgICB9XG5cbiAgICBzb2NrZXRba0NvdW50ZXJdID0gMFxuICAgIHNvY2tldFtrTWF4UmVxdWVzdHNdID0gY2xpZW50W2tNYXhSZXF1ZXN0c11cbiAgICBzb2NrZXRba0NsaWVudF0gPSBjbGllbnRcbiAgICBzb2NrZXRba0Vycm9yXSA9IG51bGxcblxuICAgIHNvY2tldFxuICAgICAgLm9uKCdlcnJvcicsIG9uU29ja2V0RXJyb3IpXG4gICAgICAub24oJ3JlYWRhYmxlJywgb25Tb2NrZXRSZWFkYWJsZSlcbiAgICAgIC5vbignZW5kJywgb25Tb2NrZXRFbmQpXG4gICAgICAub24oJ2Nsb3NlJywgb25Tb2NrZXRDbG9zZSlcblxuICAgIGNsaWVudFtrU29ja2V0XSA9IHNvY2tldFxuXG4gICAgaWYgKGNoYW5uZWxzLmNvbm5lY3RlZC5oYXNTdWJzY3JpYmVycykge1xuICAgICAgY2hhbm5lbHMuY29ubmVjdGVkLnB1Ymxpc2goe1xuICAgICAgICBjb25uZWN0UGFyYW1zOiB7XG4gICAgICAgICAgaG9zdCxcbiAgICAgICAgICBob3N0bmFtZSxcbiAgICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgICBwb3J0LFxuICAgICAgICAgIHNlcnZlcm5hbWU6IGNsaWVudFtrU2VydmVyTmFtZV0sXG4gICAgICAgICAgbG9jYWxBZGRyZXNzOiBjbGllbnRba0xvY2FsQWRkcmVzc11cbiAgICAgICAgfSxcbiAgICAgICAgY29ubmVjdG9yOiBjbGllbnRba0Nvbm5lY3Rvcl0sXG4gICAgICAgIHNvY2tldFxuICAgICAgfSlcbiAgICB9XG4gICAgY2xpZW50LmVtaXQoJ2Nvbm5lY3QnLCBjbGllbnRba1VybF0sIFtjbGllbnRdKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoY2xpZW50LmRlc3Ryb3llZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY2xpZW50W2tDb25uZWN0aW5nXSA9IGZhbHNlXG5cbiAgICBpZiAoY2hhbm5lbHMuY29ubmVjdEVycm9yLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICBjaGFubmVscy5jb25uZWN0RXJyb3IucHVibGlzaCh7XG4gICAgICAgIGNvbm5lY3RQYXJhbXM6IHtcbiAgICAgICAgICBob3N0LFxuICAgICAgICAgIGhvc3RuYW1lLFxuICAgICAgICAgIHByb3RvY29sLFxuICAgICAgICAgIHBvcnQsXG4gICAgICAgICAgc2VydmVybmFtZTogY2xpZW50W2tTZXJ2ZXJOYW1lXSxcbiAgICAgICAgICBsb2NhbEFkZHJlc3M6IGNsaWVudFtrTG9jYWxBZGRyZXNzXVxuICAgICAgICB9LFxuICAgICAgICBjb25uZWN0b3I6IGNsaWVudFtrQ29ubmVjdG9yXSxcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAoZXJyLmNvZGUgPT09ICdFUlJfVExTX0NFUlRfQUxUTkFNRV9JTlZBTElEJykge1xuICAgICAgYXNzZXJ0KGNsaWVudFtrUnVubmluZ10gPT09IDApXG4gICAgICB3aGlsZSAoY2xpZW50W2tQZW5kaW5nXSA+IDAgJiYgY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tQZW5kaW5nSWR4XV0uc2VydmVybmFtZSA9PT0gY2xpZW50W2tTZXJ2ZXJOYW1lXSkge1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tQZW5kaW5nSWR4XSsrXVxuICAgICAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG9uRXJyb3IoY2xpZW50LCBlcnIpXG4gICAgfVxuXG4gICAgY2xpZW50LmVtaXQoJ2Nvbm5lY3Rpb25FcnJvcicsIGNsaWVudFtrVXJsXSwgW2NsaWVudF0sIGVycilcbiAgfVxuXG4gIHJlc3VtZShjbGllbnQpXG59XG5cbmZ1bmN0aW9uIGVtaXREcmFpbiAoY2xpZW50KSB7XG4gIGNsaWVudFtrTmVlZERyYWluXSA9IDBcbiAgY2xpZW50LmVtaXQoJ2RyYWluJywgY2xpZW50W2tVcmxdLCBbY2xpZW50XSlcbn1cblxuZnVuY3Rpb24gcmVzdW1lIChjbGllbnQsIHN5bmMpIHtcbiAgaWYgKGNsaWVudFtrUmVzdW1pbmddID09PSAyKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBjbGllbnRba1Jlc3VtaW5nXSA9IDJcblxuICBfcmVzdW1lKGNsaWVudCwgc3luYylcbiAgY2xpZW50W2tSZXN1bWluZ10gPSAwXG5cbiAgaWYgKGNsaWVudFtrUnVubmluZ0lkeF0gPiAyNTYpIHtcbiAgICBjbGllbnRba1F1ZXVlXS5zcGxpY2UoMCwgY2xpZW50W2tSdW5uaW5nSWR4XSlcbiAgICBjbGllbnRba1BlbmRpbmdJZHhdIC09IGNsaWVudFtrUnVubmluZ0lkeF1cbiAgICBjbGllbnRba1J1bm5pbmdJZHhdID0gMFxuICB9XG59XG5cbmZ1bmN0aW9uIF9yZXN1bWUgKGNsaWVudCwgc3luYykge1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIGlmIChjbGllbnQuZGVzdHJveWVkKSB7XG4gICAgICBhc3NlcnQoY2xpZW50W2tQZW5kaW5nXSA9PT0gMClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChjbGllbnRba0Nsb3NlZFJlc29sdmVdICYmICFjbGllbnRba1NpemVdKSB7XG4gICAgICBjbGllbnRba0Nsb3NlZFJlc29sdmVdKClcbiAgICAgIGNsaWVudFtrQ2xvc2VkUmVzb2x2ZV0gPSBudWxsXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBzb2NrZXQgPSBjbGllbnRba1NvY2tldF1cblxuICAgIGlmIChzb2NrZXQgJiYgIXNvY2tldC5kZXN0cm95ZWQgJiYgc29ja2V0LmFscG5Qcm90b2NvbCAhPT0gJ2gyJykge1xuICAgICAgaWYgKGNsaWVudFtrU2l6ZV0gPT09IDApIHtcbiAgICAgICAgaWYgKCFzb2NrZXRba05vUmVmXSAmJiBzb2NrZXQudW5yZWYpIHtcbiAgICAgICAgICBzb2NrZXQudW5yZWYoKVxuICAgICAgICAgIHNvY2tldFtrTm9SZWZdID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHNvY2tldFtrTm9SZWZdICYmIHNvY2tldC5yZWYpIHtcbiAgICAgICAgc29ja2V0LnJlZigpXG4gICAgICAgIHNvY2tldFtrTm9SZWZdID0gZmFsc2VcbiAgICAgIH1cblxuICAgICAgaWYgKGNsaWVudFtrU2l6ZV0gPT09IDApIHtcbiAgICAgICAgaWYgKHNvY2tldFtrUGFyc2VyXS50aW1lb3V0VHlwZSAhPT0gVElNRU9VVF9JRExFKSB7XG4gICAgICAgICAgc29ja2V0W2tQYXJzZXJdLnNldFRpbWVvdXQoY2xpZW50W2tLZWVwQWxpdmVUaW1lb3V0VmFsdWVdLCBUSU1FT1VUX0lETEUpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDAgJiYgc29ja2V0W2tQYXJzZXJdLnN0YXR1c0NvZGUgPCAyMDApIHtcbiAgICAgICAgaWYgKHNvY2tldFtrUGFyc2VyXS50aW1lb3V0VHlwZSAhPT0gVElNRU9VVF9IRUFERVJTKSB7XG4gICAgICAgICAgY29uc3QgcmVxdWVzdCA9IGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF1dXG4gICAgICAgICAgY29uc3QgaGVhZGVyc1RpbWVvdXQgPSByZXF1ZXN0LmhlYWRlcnNUaW1lb3V0ICE9IG51bGxcbiAgICAgICAgICAgID8gcmVxdWVzdC5oZWFkZXJzVGltZW91dFxuICAgICAgICAgICAgOiBjbGllbnRba0hlYWRlcnNUaW1lb3V0XVxuICAgICAgICAgIHNvY2tldFtrUGFyc2VyXS5zZXRUaW1lb3V0KGhlYWRlcnNUaW1lb3V0LCBUSU1FT1VUX0hFQURFUlMpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tCdXN5XSkge1xuICAgICAgY2xpZW50W2tOZWVkRHJhaW5dID0gMlxuICAgIH0gZWxzZSBpZiAoY2xpZW50W2tOZWVkRHJhaW5dID09PSAyKSB7XG4gICAgICBpZiAoc3luYykge1xuICAgICAgICBjbGllbnRba05lZWREcmFpbl0gPSAxXG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soZW1pdERyYWluLCBjbGllbnQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbWl0RHJhaW4oY2xpZW50KVxuICAgICAgfVxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tQZW5kaW5nXSA9PT0gMCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGNsaWVudFtrUnVubmluZ10gPj0gKGNsaWVudFtrUGlwZWxpbmluZ10gfHwgMSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1BlbmRpbmdJZHhdXVxuXG4gICAgaWYgKGNsaWVudFtrVXJsXS5wcm90b2NvbCA9PT0gJ2h0dHBzOicgJiYgY2xpZW50W2tTZXJ2ZXJOYW1lXSAhPT0gcmVxdWVzdC5zZXJ2ZXJuYW1lKSB7XG4gICAgICBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDApIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNsaWVudFtrU2VydmVyTmFtZV0gPSByZXF1ZXN0LnNlcnZlcm5hbWVcblxuICAgICAgaWYgKHNvY2tldCAmJiBzb2NrZXQuc2VydmVybmFtZSAhPT0gcmVxdWVzdC5zZXJ2ZXJuYW1lKSB7XG4gICAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoJ3NlcnZlcm5hbWUgY2hhbmdlZCcpKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tDb25uZWN0aW5nXSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKCFzb2NrZXQgJiYgIWNsaWVudFtrSFRUUDJTZXNzaW9uXSkge1xuICAgICAgY29ubmVjdChjbGllbnQpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoc29ja2V0LmRlc3Ryb3llZCB8fCBzb2NrZXRba1dyaXRpbmddIHx8IHNvY2tldFtrUmVzZXRdIHx8IHNvY2tldFtrQmxvY2tpbmddKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDAgJiYgIXJlcXVlc3QuaWRlbXBvdGVudCkge1xuICAgICAgLy8gTm9uLWlkZW1wb3RlbnQgcmVxdWVzdCBjYW5ub3QgYmUgcmV0cmllZC5cbiAgICAgIC8vIEVuc3VyZSB0aGF0IG5vIG90aGVyIHJlcXVlc3RzIGFyZSBpbmZsaWdodCBhbmRcbiAgICAgIC8vIGNvdWxkIGNhdXNlIGZhaWx1cmUuXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDAgJiYgKHJlcXVlc3QudXBncmFkZSB8fCByZXF1ZXN0Lm1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSkge1xuICAgICAgLy8gRG9uJ3QgZGlzcGF0Y2ggYW4gdXBncmFkZSB1bnRpbCBhbGwgcHJlY2VkaW5nIHJlcXVlc3RzIGhhdmUgY29tcGxldGVkLlxuICAgICAgLy8gQSBtaXNiZWhhdmluZyBzZXJ2ZXIgbWlnaHQgdXBncmFkZSB0aGUgY29ubmVjdGlvbiBiZWZvcmUgYWxsIHBpcGVsaW5lZFxuICAgICAgLy8gcmVxdWVzdCBoYXMgY29tcGxldGVkLlxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGNsaWVudFtrUnVubmluZ10gPiAwICYmIHV0aWwuYm9keUxlbmd0aChyZXF1ZXN0LmJvZHkpICE9PSAwICYmXG4gICAgICAodXRpbC5pc1N0cmVhbShyZXF1ZXN0LmJvZHkpIHx8IHV0aWwuaXNBc3luY0l0ZXJhYmxlKHJlcXVlc3QuYm9keSkpKSB7XG4gICAgICAvLyBSZXF1ZXN0IHdpdGggc3RyZWFtIG9yIGl0ZXJhdG9yIGJvZHkgY2FuIGVycm9yIHdoaWxlIG90aGVyIHJlcXVlc3RzXG4gICAgICAvLyBhcmUgaW5mbGlnaHQgYW5kIGluZGlyZWN0bHkgZXJyb3IgdGhvc2UgYXMgd2VsbC5cbiAgICAgIC8vIEVuc3VyZSB0aGlzIGRvZXNuJ3QgaGFwcGVuIGJ5IHdhaXRpbmcgZm9yIGluZmxpZ2h0XG4gICAgICAvLyB0byBjb21wbGV0ZSBiZWZvcmUgZGlzcGF0Y2hpbmcuXG5cbiAgICAgIC8vIFJlcXVlc3Qgd2l0aCBzdHJlYW0gb3IgaXRlcmF0b3IgYm9keSBjYW5ub3QgYmUgcmV0cmllZC5cbiAgICAgIC8vIEVuc3VyZSB0aGF0IG5vIG90aGVyIHJlcXVlc3RzIGFyZSBpbmZsaWdodCBhbmRcbiAgICAgIC8vIGNvdWxkIGNhdXNlIGZhaWx1cmUuXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIXJlcXVlc3QuYWJvcnRlZCAmJiB3cml0ZShjbGllbnQsIHJlcXVlc3QpKSB7XG4gICAgICBjbGllbnRba1BlbmRpbmdJZHhdKytcbiAgICB9IGVsc2Uge1xuICAgICAgY2xpZW50W2tRdWV1ZV0uc3BsaWNlKGNsaWVudFtrUGVuZGluZ0lkeF0sIDEpXG4gICAgfVxuICB9XG59XG5cbi8vIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM3MjMwI3NlY3Rpb24tMy4zLjJcbmZ1bmN0aW9uIHNob3VsZFNlbmRDb250ZW50TGVuZ3RoIChtZXRob2QpIHtcbiAgcmV0dXJuIG1ldGhvZCAhPT0gJ0dFVCcgJiYgbWV0aG9kICE9PSAnSEVBRCcgJiYgbWV0aG9kICE9PSAnT1BUSU9OUycgJiYgbWV0aG9kICE9PSAnVFJBQ0UnICYmIG1ldGhvZCAhPT0gJ0NPTk5FQ1QnXG59XG5cbmZ1bmN0aW9uIHdyaXRlIChjbGllbnQsIHJlcXVlc3QpIHtcbiAgaWYgKGNsaWVudFtrSFRUUENvbm5WZXJzaW9uXSA9PT0gJ2gyJykge1xuICAgIHdyaXRlSDIoY2xpZW50LCBjbGllbnRba0hUVFAyU2Vzc2lvbl0sIHJlcXVlc3QpXG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCB7IGJvZHksIG1ldGhvZCwgcGF0aCwgaG9zdCwgdXBncmFkZSwgaGVhZGVycywgYmxvY2tpbmcsIHJlc2V0IH0gPSByZXF1ZXN0XG5cbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi00LjMuMVxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTQuMy4yXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNC4zLjVcblxuICAvLyBTZW5kaW5nIGEgcGF5bG9hZCBib2R5IG9uIGEgcmVxdWVzdCB0aGF0IGRvZXMgbm90XG4gIC8vIGV4cGVjdCBpdCBjYW4gY2F1c2UgdW5kZWZpbmVkIGJlaGF2aW9yIG9uIHNvbWVcbiAgLy8gc2VydmVycyBhbmQgY29ycnVwdCBjb25uZWN0aW9uIHN0YXRlLiBEbyBub3RcbiAgLy8gcmUtdXNlIHRoZSBjb25uZWN0aW9uIGZvciBmdXJ0aGVyIHJlcXVlc3RzLlxuXG4gIGNvbnN0IGV4cGVjdHNQYXlsb2FkID0gKFxuICAgIG1ldGhvZCA9PT0gJ1BVVCcgfHxcbiAgICBtZXRob2QgPT09ICdQT1NUJyB8fFxuICAgIG1ldGhvZCA9PT0gJ1BBVENIJ1xuICApXG5cbiAgaWYgKGJvZHkgJiYgdHlwZW9mIGJvZHkucmVhZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIFRyeSB0byByZWFkIEVPRiBpbiBvcmRlciB0byBnZXQgbGVuZ3RoLlxuICAgIGJvZHkucmVhZCgwKVxuICB9XG5cbiAgY29uc3QgYm9keUxlbmd0aCA9IHV0aWwuYm9keUxlbmd0aChib2R5KVxuXG4gIGxldCBjb250ZW50TGVuZ3RoID0gYm9keUxlbmd0aFxuXG4gIGlmIChjb250ZW50TGVuZ3RoID09PSBudWxsKSB7XG4gICAgY29udGVudExlbmd0aCA9IHJlcXVlc3QuY29udGVudExlbmd0aFxuICB9XG5cbiAgaWYgKGNvbnRlbnRMZW5ndGggPT09IDAgJiYgIWV4cGVjdHNQYXlsb2FkKSB7XG4gICAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjMuMlxuICAgIC8vIEEgdXNlciBhZ2VudCBTSE9VTEQgTk9UIHNlbmQgYSBDb250ZW50LUxlbmd0aCBoZWFkZXIgZmllbGQgd2hlblxuICAgIC8vIHRoZSByZXF1ZXN0IG1lc3NhZ2UgZG9lcyBub3QgY29udGFpbiBhIHBheWxvYWQgYm9keSBhbmQgdGhlIG1ldGhvZFxuICAgIC8vIHNlbWFudGljcyBkbyBub3QgYW50aWNpcGF0ZSBzdWNoIGEgYm9keS5cblxuICAgIGNvbnRlbnRMZW5ndGggPSBudWxsXG4gIH1cblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMjA0NlxuICAvLyBBIHVzZXIgYWdlbnQgbWF5IHNlbmQgYSBDb250ZW50LUxlbmd0aCBoZWFkZXIgd2l0aCAwIHZhbHVlLCB0aGlzIHNob3VsZCBiZSBhbGxvd2VkLlxuICBpZiAoc2hvdWxkU2VuZENvbnRlbnRMZW5ndGgobWV0aG9kKSAmJiBjb250ZW50TGVuZ3RoID4gMCAmJiByZXF1ZXN0LmNvbnRlbnRMZW5ndGggIT09IG51bGwgJiYgcmVxdWVzdC5jb250ZW50TGVuZ3RoICE9PSBjb250ZW50TGVuZ3RoKSB7XG4gICAgaWYgKGNsaWVudFtrU3RyaWN0Q29udGVudExlbmd0aF0pIHtcbiAgICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKSlcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIHByb2Nlc3MuZW1pdFdhcm5pbmcobmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpKVxuICB9XG5cbiAgY29uc3Qgc29ja2V0ID0gY2xpZW50W2tTb2NrZXRdXG5cbiAgdHJ5IHtcbiAgICByZXF1ZXN0Lm9uQ29ubmVjdCgoZXJyKSA9PiB7XG4gICAgICBpZiAocmVxdWVzdC5hYm9ydGVkIHx8IHJlcXVlc3QuY29tcGxldGVkKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIgfHwgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKSlcblxuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEluZm9ybWF0aW9uYWxFcnJvcignYWJvcnRlZCcpKVxuICAgIH0pXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIGVycilcbiAgfVxuXG4gIGlmIChyZXF1ZXN0LmFib3J0ZWQpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlmIChtZXRob2QgPT09ICdIRUFEJykge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tY29sbGluYS91bmRpY2kvaXNzdWVzLzI1OFxuICAgIC8vIENsb3NlIGFmdGVyIGEgSEVBRCByZXF1ZXN0IHRvIGludGVyb3Agd2l0aCBtaXNiZWhhdmluZyBzZXJ2ZXJzXG4gICAgLy8gdGhhdCBtYXkgc2VuZCBhIGJvZHkgaW4gdGhlIHJlc3BvbnNlLlxuXG4gICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gIH1cblxuICBpZiAodXBncmFkZSB8fCBtZXRob2QgPT09ICdDT05ORUNUJykge1xuICAgIC8vIE9uIENPTk5FQ1Qgb3IgdXBncmFkZSwgYmxvY2sgcGlwZWxpbmUgZnJvbSBkaXNwYXRjaGluZyBmdXJ0aGVyXG4gICAgLy8gcmVxdWVzdHMgb24gdGhpcyBjb25uZWN0aW9uLlxuXG4gICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gIH1cblxuICBpZiAocmVzZXQgIT0gbnVsbCkge1xuICAgIHNvY2tldFtrUmVzZXRdID0gcmVzZXRcbiAgfVxuXG4gIGlmIChjbGllbnRba01heFJlcXVlc3RzXSAmJiBzb2NrZXRba0NvdW50ZXJdKysgPj0gY2xpZW50W2tNYXhSZXF1ZXN0c10pIHtcbiAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgfVxuXG4gIGlmIChibG9ja2luZykge1xuICAgIHNvY2tldFtrQmxvY2tpbmddID0gdHJ1ZVxuICB9XG5cbiAgbGV0IGhlYWRlciA9IGAke21ldGhvZH0gJHtwYXRofSBIVFRQLzEuMVxcclxcbmBcblxuICBpZiAodHlwZW9mIGhvc3QgPT09ICdzdHJpbmcnKSB7XG4gICAgaGVhZGVyICs9IGBob3N0OiAke2hvc3R9XFxyXFxuYFxuICB9IGVsc2Uge1xuICAgIGhlYWRlciArPSBjbGllbnRba0hvc3RIZWFkZXJdXG4gIH1cblxuICBpZiAodXBncmFkZSkge1xuICAgIGhlYWRlciArPSBgY29ubmVjdGlvbjogdXBncmFkZVxcclxcbnVwZ3JhZGU6ICR7dXBncmFkZX1cXHJcXG5gXG4gIH0gZWxzZSBpZiAoY2xpZW50W2tQaXBlbGluaW5nXSAmJiAhc29ja2V0W2tSZXNldF0pIHtcbiAgICBoZWFkZXIgKz0gJ2Nvbm5lY3Rpb246IGtlZXAtYWxpdmVcXHJcXG4nXG4gIH0gZWxzZSB7XG4gICAgaGVhZGVyICs9ICdjb25uZWN0aW9uOiBjbG9zZVxcclxcbidcbiAgfVxuXG4gIGlmIChoZWFkZXJzKSB7XG4gICAgaGVhZGVyICs9IGhlYWRlcnNcbiAgfVxuXG4gIGlmIChjaGFubmVscy5zZW5kSGVhZGVycy5oYXNTdWJzY3JpYmVycykge1xuICAgIGNoYW5uZWxzLnNlbmRIZWFkZXJzLnB1Ymxpc2goeyByZXF1ZXN0LCBoZWFkZXJzOiBoZWFkZXIsIHNvY2tldCB9KVxuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2U6IGFzc2VydGlvbiAqL1xuICBpZiAoIWJvZHkgfHwgYm9keUxlbmd0aCA9PT0gMCkge1xuICAgIGlmIChjb250ZW50TGVuZ3RoID09PSAwKSB7XG4gICAgICBzb2NrZXQud3JpdGUoYCR7aGVhZGVyfWNvbnRlbnQtbGVuZ3RoOiAwXFxyXFxuXFxyXFxuYCwgJ2xhdGluMScpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydChjb250ZW50TGVuZ3RoID09PSBudWxsLCAnbm8gYm9keSBtdXN0IG5vdCBoYXZlIGNvbnRlbnQgbGVuZ3RoJylcbiAgICAgIHNvY2tldC53cml0ZShgJHtoZWFkZXJ9XFxyXFxuYCwgJ2xhdGluMScpXG4gICAgfVxuICAgIHJlcXVlc3Qub25SZXF1ZXN0U2VudCgpXG4gIH0gZWxzZSBpZiAodXRpbC5pc0J1ZmZlcihib2R5KSkge1xuICAgIGFzc2VydChjb250ZW50TGVuZ3RoID09PSBib2R5LmJ5dGVMZW5ndGgsICdidWZmZXIgYm9keSBtdXN0IGhhdmUgY29udGVudCBsZW5ndGgnKVxuXG4gICAgc29ja2V0LmNvcmsoKVxuICAgIHNvY2tldC53cml0ZShgJHtoZWFkZXJ9Y29udGVudC1sZW5ndGg6ICR7Y29udGVudExlbmd0aH1cXHJcXG5cXHJcXG5gLCAnbGF0aW4xJylcbiAgICBzb2NrZXQud3JpdGUoYm9keSlcbiAgICBzb2NrZXQudW5jb3JrKClcbiAgICByZXF1ZXN0Lm9uQm9keVNlbnQoYm9keSlcbiAgICByZXF1ZXN0Lm9uUmVxdWVzdFNlbnQoKVxuICAgIGlmICghZXhwZWN0c1BheWxvYWQpIHtcbiAgICAgIHNvY2tldFtrUmVzZXRdID0gdHJ1ZVxuICAgIH1cbiAgfSBlbHNlIGlmICh1dGlsLmlzQmxvYkxpa2UoYm9keSkpIHtcbiAgICBpZiAodHlwZW9mIGJvZHkuc3RyZWFtID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB3cml0ZUl0ZXJhYmxlKHsgYm9keTogYm9keS5zdHJlYW0oKSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgd3JpdGVCbG9iKHsgYm9keSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQgfSlcbiAgICB9XG4gIH0gZWxzZSBpZiAodXRpbC5pc1N0cmVhbShib2R5KSkge1xuICAgIHdyaXRlU3RyZWFtKHsgYm9keSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQgfSlcbiAgfSBlbHNlIGlmICh1dGlsLmlzSXRlcmFibGUoYm9keSkpIHtcbiAgICB3cml0ZUl0ZXJhYmxlKHsgYm9keSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQgfSlcbiAgfSBlbHNlIHtcbiAgICBhc3NlcnQoZmFsc2UpXG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiB3cml0ZUgyIChjbGllbnQsIHNlc3Npb24sIHJlcXVlc3QpIHtcbiAgY29uc3QgeyBib2R5LCBtZXRob2QsIHBhdGgsIGhvc3QsIHVwZ3JhZGUsIGV4cGVjdENvbnRpbnVlLCBzaWduYWwsIGhlYWRlcnM6IHJlcUhlYWRlcnMgfSA9IHJlcXVlc3RcblxuICBsZXQgaGVhZGVyc1xuICBpZiAodHlwZW9mIHJlcUhlYWRlcnMgPT09ICdzdHJpbmcnKSBoZWFkZXJzID0gUmVxdWVzdFtrSFRUUDJDb3B5SGVhZGVyc10ocmVxSGVhZGVycy50cmltKCkpXG4gIGVsc2UgaGVhZGVycyA9IHJlcUhlYWRlcnNcblxuICBpZiAodXBncmFkZSkge1xuICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIG5ldyBFcnJvcignVXBncmFkZSBub3Qgc3VwcG9ydGVkIGZvciBIMicpKVxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBUT0RPKEhUVFAvMik6IFNob3VsZCB3ZSBjYWxsIG9uQ29ubmVjdCBpbW1lZGlhdGVseSBvciBvbiBzdHJlYW0gcmVhZHkgZXZlbnQ/XG4gICAgcmVxdWVzdC5vbkNvbm5lY3QoKGVycikgPT4ge1xuICAgICAgaWYgKHJlcXVlc3QuYWJvcnRlZCB8fCByZXF1ZXN0LmNvbXBsZXRlZCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyIHx8IG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKCkpXG4gICAgfSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyKVxuICB9XG5cbiAgaWYgKHJlcXVlc3QuYWJvcnRlZCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLyoqIEB0eXBlIHtpbXBvcnQoJ25vZGU6aHR0cDInKS5DbGllbnRIdHRwMlN0cmVhbX0gKi9cbiAgbGV0IHN0cmVhbVxuICBjb25zdCBoMlN0YXRlID0gY2xpZW50W2tIVFRQMlNlc3Npb25TdGF0ZV1cblxuICBoZWFkZXJzW0hUVFAyX0hFQURFUl9BVVRIT1JJVFldID0gaG9zdCB8fCBjbGllbnRba0hvc3RdXG4gIGhlYWRlcnNbSFRUUDJfSEVBREVSX01FVEhPRF0gPSBtZXRob2RcblxuICBpZiAobWV0aG9kID09PSAnQ09OTkVDVCcpIHtcbiAgICBzZXNzaW9uLnJlZigpXG4gICAgLy8gd2UgYXJlIGFscmVhZHkgY29ubmVjdGVkLCBzdHJlYW1zIGFyZSBwZW5kaW5nLCBmaXJzdCByZXF1ZXN0XG4gICAgLy8gd2lsbCBjcmVhdGUgYSBuZXcgc3RyZWFtLiBXZSB0cmlnZ2VyIGEgcmVxdWVzdCB0byBjcmVhdGUgdGhlIHN0cmVhbSBhbmQgd2FpdCB1bnRpbFxuICAgIC8vIGByZWFkeWAgZXZlbnQgaXMgdHJpZ2dlcmVkXG4gICAgLy8gV2UgZGlzYWJsZWQgZW5kU3RyZWFtIHRvIGFsbG93IHRoZSB1c2VyIHRvIHdyaXRlIHRvIHRoZSBzdHJlYW1cbiAgICBzdHJlYW0gPSBzZXNzaW9uLnJlcXVlc3QoaGVhZGVycywgeyBlbmRTdHJlYW06IGZhbHNlLCBzaWduYWwgfSlcblxuICAgIGlmIChzdHJlYW0uaWQgJiYgIXN0cmVhbS5wZW5kaW5nKSB7XG4gICAgICByZXF1ZXN0Lm9uVXBncmFkZShudWxsLCBudWxsLCBzdHJlYW0pXG4gICAgICArK2gyU3RhdGUub3BlblN0cmVhbXNcbiAgICB9IGVsc2Uge1xuICAgICAgc3RyZWFtLm9uY2UoJ3JlYWR5JywgKCkgPT4ge1xuICAgICAgICByZXF1ZXN0Lm9uVXBncmFkZShudWxsLCBudWxsLCBzdHJlYW0pXG4gICAgICAgICsraDJTdGF0ZS5vcGVuU3RyZWFtc1xuICAgICAgfSlcbiAgICB9XG5cbiAgICBzdHJlYW0ub25jZSgnY2xvc2UnLCAoKSA9PiB7XG4gICAgICBoMlN0YXRlLm9wZW5TdHJlYW1zIC09IDFcbiAgICAgIC8vIFRPRE8oSFRUUC8yKTogdW5yZWYgb25seSBpZiBjdXJyZW50IHN0cmVhbXMgY291bnQgaXMgMFxuICAgICAgaWYgKGgyU3RhdGUub3BlblN0cmVhbXMgPT09IDApIHNlc3Npb24udW5yZWYoKVxuICAgIH0pXG5cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc1NDAjc2VjdGlvbi04LjNcbiAgLy8gOnBhdGggYW5kIDpzY2hlbWUgaGVhZGVycyBtdXN0IGJlIG9taXRlZCB3aGVuIHNlbmRpbmcgQ09OTkVDVFxuXG4gIGhlYWRlcnNbSFRUUDJfSEVBREVSX1BBVEhdID0gcGF0aFxuICBoZWFkZXJzW0hUVFAyX0hFQURFUl9TQ0hFTUVdID0gJ2h0dHBzJ1xuXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNC4zLjFcbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi00LjMuMlxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTQuMy41XG5cbiAgLy8gU2VuZGluZyBhIHBheWxvYWQgYm9keSBvbiBhIHJlcXVlc3QgdGhhdCBkb2VzIG5vdFxuICAvLyBleHBlY3QgaXQgY2FuIGNhdXNlIHVuZGVmaW5lZCBiZWhhdmlvciBvbiBzb21lXG4gIC8vIHNlcnZlcnMgYW5kIGNvcnJ1cHQgY29ubmVjdGlvbiBzdGF0ZS4gRG8gbm90XG4gIC8vIHJlLXVzZSB0aGUgY29ubmVjdGlvbiBmb3IgZnVydGhlciByZXF1ZXN0cy5cblxuICBjb25zdCBleHBlY3RzUGF5bG9hZCA9IChcbiAgICBtZXRob2QgPT09ICdQVVQnIHx8XG4gICAgbWV0aG9kID09PSAnUE9TVCcgfHxcbiAgICBtZXRob2QgPT09ICdQQVRDSCdcbiAgKVxuXG4gIGlmIChib2R5ICYmIHR5cGVvZiBib2R5LnJlYWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBUcnkgdG8gcmVhZCBFT0YgaW4gb3JkZXIgdG8gZ2V0IGxlbmd0aC5cbiAgICBib2R5LnJlYWQoMClcbiAgfVxuXG4gIGxldCBjb250ZW50TGVuZ3RoID0gdXRpbC5ib2R5TGVuZ3RoKGJvZHkpXG5cbiAgaWYgKGNvbnRlbnRMZW5ndGggPT0gbnVsbCkge1xuICAgIGNvbnRlbnRMZW5ndGggPSByZXF1ZXN0LmNvbnRlbnRMZW5ndGhcbiAgfVxuXG4gIGlmIChjb250ZW50TGVuZ3RoID09PSAwIHx8ICFleHBlY3RzUGF5bG9hZCkge1xuICAgIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4zLjJcbiAgICAvLyBBIHVzZXIgYWdlbnQgU0hPVUxEIE5PVCBzZW5kIGEgQ29udGVudC1MZW5ndGggaGVhZGVyIGZpZWxkIHdoZW5cbiAgICAvLyB0aGUgcmVxdWVzdCBtZXNzYWdlIGRvZXMgbm90IGNvbnRhaW4gYSBwYXlsb2FkIGJvZHkgYW5kIHRoZSBtZXRob2RcbiAgICAvLyBzZW1hbnRpY3MgZG8gbm90IGFudGljaXBhdGUgc3VjaCBhIGJvZHkuXG5cbiAgICBjb250ZW50TGVuZ3RoID0gbnVsbFxuICB9XG5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzIwNDZcbiAgLy8gQSB1c2VyIGFnZW50IG1heSBzZW5kIGEgQ29udGVudC1MZW5ndGggaGVhZGVyIHdpdGggMCB2YWx1ZSwgdGhpcyBzaG91bGQgYmUgYWxsb3dlZC5cbiAgaWYgKHNob3VsZFNlbmRDb250ZW50TGVuZ3RoKG1ldGhvZCkgJiYgY29udGVudExlbmd0aCA+IDAgJiYgcmVxdWVzdC5jb250ZW50TGVuZ3RoICE9IG51bGwgJiYgcmVxdWVzdC5jb250ZW50TGVuZ3RoICE9PSBjb250ZW50TGVuZ3RoKSB7XG4gICAgaWYgKGNsaWVudFtrU3RyaWN0Q29udGVudExlbmd0aF0pIHtcbiAgICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKSlcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIHByb2Nlc3MuZW1pdFdhcm5pbmcobmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpKVxuICB9XG5cbiAgaWYgKGNvbnRlbnRMZW5ndGggIT0gbnVsbCkge1xuICAgIGFzc2VydChib2R5LCAnbm8gYm9keSBtdXN0IG5vdCBoYXZlIGNvbnRlbnQgbGVuZ3RoJylcbiAgICBoZWFkZXJzW0hUVFAyX0hFQURFUl9DT05URU5UX0xFTkdUSF0gPSBgJHtjb250ZW50TGVuZ3RofWBcbiAgfVxuXG4gIHNlc3Npb24ucmVmKClcblxuICBjb25zdCBzaG91bGRFbmRTdHJlYW0gPSBtZXRob2QgPT09ICdHRVQnIHx8IG1ldGhvZCA9PT0gJ0hFQUQnXG4gIGlmIChleHBlY3RDb250aW51ZSkge1xuICAgIGhlYWRlcnNbSFRUUDJfSEVBREVSX0VYUEVDVF0gPSAnMTAwLWNvbnRpbnVlJ1xuICAgIHN0cmVhbSA9IHNlc3Npb24ucmVxdWVzdChoZWFkZXJzLCB7IGVuZFN0cmVhbTogc2hvdWxkRW5kU3RyZWFtLCBzaWduYWwgfSlcblxuICAgIHN0cmVhbS5vbmNlKCdjb250aW51ZScsIHdyaXRlQm9keUgyKVxuICB9IGVsc2Uge1xuICAgIHN0cmVhbSA9IHNlc3Npb24ucmVxdWVzdChoZWFkZXJzLCB7XG4gICAgICBlbmRTdHJlYW06IHNob3VsZEVuZFN0cmVhbSxcbiAgICAgIHNpZ25hbFxuICAgIH0pXG4gICAgd3JpdGVCb2R5SDIoKVxuICB9XG5cbiAgLy8gSW5jcmVtZW50IGNvdW50ZXIgYXMgd2UgaGF2ZSBuZXcgc2V2ZXJhbCBzdHJlYW1zIG9wZW5cbiAgKytoMlN0YXRlLm9wZW5TdHJlYW1zXG5cbiAgc3RyZWFtLm9uY2UoJ3Jlc3BvbnNlJywgaGVhZGVycyA9PiB7XG4gICAgY29uc3QgeyBbSFRUUDJfSEVBREVSX1NUQVRVU106IHN0YXR1c0NvZGUsIC4uLnJlYWxIZWFkZXJzIH0gPSBoZWFkZXJzXG5cbiAgICBpZiAocmVxdWVzdC5vbkhlYWRlcnMoTnVtYmVyKHN0YXR1c0NvZGUpLCByZWFsSGVhZGVycywgc3RyZWFtLnJlc3VtZS5iaW5kKHN0cmVhbSksICcnKSA9PT0gZmFsc2UpIHtcbiAgICAgIHN0cmVhbS5wYXVzZSgpXG4gICAgfVxuICB9KVxuXG4gIHN0cmVhbS5vbmNlKCdlbmQnLCAoKSA9PiB7XG4gICAgcmVxdWVzdC5vbkNvbXBsZXRlKFtdKVxuICB9KVxuXG4gIHN0cmVhbS5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgIGlmIChyZXF1ZXN0Lm9uRGF0YShjaHVuaykgPT09IGZhbHNlKSB7XG4gICAgICBzdHJlYW0ucGF1c2UoKVxuICAgIH1cbiAgfSlcblxuICBzdHJlYW0ub25jZSgnY2xvc2UnLCAoKSA9PiB7XG4gICAgaDJTdGF0ZS5vcGVuU3RyZWFtcyAtPSAxXG4gICAgLy8gVE9ETyhIVFRQLzIpOiB1bnJlZiBvbmx5IGlmIGN1cnJlbnQgc3RyZWFtcyBjb3VudCBpcyAwXG4gICAgaWYgKGgyU3RhdGUub3BlblN0cmVhbXMgPT09IDApIHtcbiAgICAgIHNlc3Npb24udW5yZWYoKVxuICAgIH1cbiAgfSlcblxuICBzdHJlYW0ub25jZSgnZXJyb3InLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgaWYgKGNsaWVudFtrSFRUUDJTZXNzaW9uXSAmJiAhY2xpZW50W2tIVFRQMlNlc3Npb25dLmRlc3Ryb3llZCAmJiAhdGhpcy5jbG9zZWQgJiYgIXRoaXMuZGVzdHJveWVkKSB7XG4gICAgICBoMlN0YXRlLnN0cmVhbXMgLT0gMVxuICAgICAgdXRpbC5kZXN0cm95KHN0cmVhbSwgZXJyKVxuICAgIH1cbiAgfSlcblxuICBzdHJlYW0ub25jZSgnZnJhbWVFcnJvcicsICh0eXBlLCBjb2RlKSA9PiB7XG4gICAgY29uc3QgZXJyID0gbmV3IEluZm9ybWF0aW9uYWxFcnJvcihgSFRUUC8yOiBcImZyYW1lRXJyb3JcIiByZWNlaXZlZCAtIHR5cGUgJHt0eXBlfSwgY29kZSAke2NvZGV9YClcbiAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIpXG5cbiAgICBpZiAoY2xpZW50W2tIVFRQMlNlc3Npb25dICYmICFjbGllbnRba0hUVFAyU2Vzc2lvbl0uZGVzdHJveWVkICYmICF0aGlzLmNsb3NlZCAmJiAhdGhpcy5kZXN0cm95ZWQpIHtcbiAgICAgIGgyU3RhdGUuc3RyZWFtcyAtPSAxXG4gICAgICB1dGlsLmRlc3Ryb3koc3RyZWFtLCBlcnIpXG4gICAgfVxuICB9KVxuXG4gIC8vIHN0cmVhbS5vbignYWJvcnRlZCcsICgpID0+IHtcbiAgLy8gICAvLyBUT0RPKEhUVFAvMik6IFN1cHBvcnQgYWJvcnRlZFxuICAvLyB9KVxuXG4gIC8vIHN0cmVhbS5vbigndGltZW91dCcsICgpID0+IHtcbiAgLy8gICAvLyBUT0RPKEhUVFAvMik6IFN1cHBvcnQgdGltZW91dFxuICAvLyB9KVxuXG4gIC8vIHN0cmVhbS5vbigncHVzaCcsIGhlYWRlcnMgPT4ge1xuICAvLyAgIC8vIFRPRE8oSFRUUC8yKTogU3VwcG9yIHB1c2hcbiAgLy8gfSlcblxuICAvLyBzdHJlYW0ub24oJ3RyYWlsZXJzJywgaGVhZGVycyA9PiB7XG4gIC8vICAgLy8gVE9ETyhIVFRQLzIpOiBTdXBwb3J0IHRyYWlsZXJzXG4gIC8vIH0pXG5cbiAgcmV0dXJuIHRydWVcblxuICBmdW5jdGlvbiB3cml0ZUJvZHlIMiAoKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2U6IGFzc2VydGlvbiAqL1xuICAgIGlmICghYm9keSkge1xuICAgICAgcmVxdWVzdC5vblJlcXVlc3RTZW50KClcbiAgICB9IGVsc2UgaWYgKHV0aWwuaXNCdWZmZXIoYm9keSkpIHtcbiAgICAgIGFzc2VydChjb250ZW50TGVuZ3RoID09PSBib2R5LmJ5dGVMZW5ndGgsICdidWZmZXIgYm9keSBtdXN0IGhhdmUgY29udGVudCBsZW5ndGgnKVxuICAgICAgc3RyZWFtLmNvcmsoKVxuICAgICAgc3RyZWFtLndyaXRlKGJvZHkpXG4gICAgICBzdHJlYW0udW5jb3JrKClcbiAgICAgIHN0cmVhbS5lbmQoKVxuICAgICAgcmVxdWVzdC5vbkJvZHlTZW50KGJvZHkpXG4gICAgICByZXF1ZXN0Lm9uUmVxdWVzdFNlbnQoKVxuICAgIH0gZWxzZSBpZiAodXRpbC5pc0Jsb2JMaWtlKGJvZHkpKSB7XG4gICAgICBpZiAodHlwZW9mIGJvZHkuc3RyZWFtID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHdyaXRlSXRlcmFibGUoe1xuICAgICAgICAgIGNsaWVudCxcbiAgICAgICAgICByZXF1ZXN0LFxuICAgICAgICAgIGNvbnRlbnRMZW5ndGgsXG4gICAgICAgICAgaDJzdHJlYW06IHN0cmVhbSxcbiAgICAgICAgICBleHBlY3RzUGF5bG9hZCxcbiAgICAgICAgICBib2R5OiBib2R5LnN0cmVhbSgpLFxuICAgICAgICAgIHNvY2tldDogY2xpZW50W2tTb2NrZXRdLFxuICAgICAgICAgIGhlYWRlcjogJydcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdyaXRlQmxvYih7XG4gICAgICAgICAgYm9keSxcbiAgICAgICAgICBjbGllbnQsXG4gICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgICBjb250ZW50TGVuZ3RoLFxuICAgICAgICAgIGV4cGVjdHNQYXlsb2FkLFxuICAgICAgICAgIGgyc3RyZWFtOiBzdHJlYW0sXG4gICAgICAgICAgaGVhZGVyOiAnJyxcbiAgICAgICAgICBzb2NrZXQ6IGNsaWVudFtrU29ja2V0XVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodXRpbC5pc1N0cmVhbShib2R5KSkge1xuICAgICAgd3JpdGVTdHJlYW0oe1xuICAgICAgICBib2R5LFxuICAgICAgICBjbGllbnQsXG4gICAgICAgIHJlcXVlc3QsXG4gICAgICAgIGNvbnRlbnRMZW5ndGgsXG4gICAgICAgIGV4cGVjdHNQYXlsb2FkLFxuICAgICAgICBzb2NrZXQ6IGNsaWVudFtrU29ja2V0XSxcbiAgICAgICAgaDJzdHJlYW06IHN0cmVhbSxcbiAgICAgICAgaGVhZGVyOiAnJ1xuICAgICAgfSlcbiAgICB9IGVsc2UgaWYgKHV0aWwuaXNJdGVyYWJsZShib2R5KSkge1xuICAgICAgd3JpdGVJdGVyYWJsZSh7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGNsaWVudCxcbiAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgZXhwZWN0c1BheWxvYWQsXG4gICAgICAgIGhlYWRlcjogJycsXG4gICAgICAgIGgyc3RyZWFtOiBzdHJlYW0sXG4gICAgICAgIHNvY2tldDogY2xpZW50W2tTb2NrZXRdXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBhc3NlcnQoZmFsc2UpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHdyaXRlU3RyZWFtICh7IGgyc3RyZWFtLCBib2R5LCBjbGllbnQsIHJlcXVlc3QsIHNvY2tldCwgY29udGVudExlbmd0aCwgaGVhZGVyLCBleHBlY3RzUGF5bG9hZCB9KSB7XG4gIGFzc2VydChjb250ZW50TGVuZ3RoICE9PSAwIHx8IGNsaWVudFtrUnVubmluZ10gPT09IDAsICdzdHJlYW0gYm9keSBjYW5ub3QgYmUgcGlwZWxpbmVkJylcblxuICBpZiAoY2xpZW50W2tIVFRQQ29ublZlcnNpb25dID09PSAnaDInKSB7XG4gICAgLy8gRm9yIEhUVFAvMiwgaXMgZW5vdWdoIHRvIHBpcGUgdGhlIHN0cmVhbVxuICAgIGNvbnN0IHBpcGUgPSBwaXBlbGluZShcbiAgICAgIGJvZHksXG4gICAgICBoMnN0cmVhbSxcbiAgICAgIChlcnIpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHV0aWwuZGVzdHJveShib2R5LCBlcnIpXG4gICAgICAgICAgdXRpbC5kZXN0cm95KGgyc3RyZWFtLCBlcnIpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVxdWVzdC5vblJlcXVlc3RTZW50KClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIClcblxuICAgIHBpcGUub24oJ2RhdGEnLCBvblBpcGVEYXRhKVxuICAgIHBpcGUub25jZSgnZW5kJywgKCkgPT4ge1xuICAgICAgcGlwZS5yZW1vdmVMaXN0ZW5lcignZGF0YScsIG9uUGlwZURhdGEpXG4gICAgICB1dGlsLmRlc3Ryb3kocGlwZSlcbiAgICB9KVxuXG4gICAgZnVuY3Rpb24gb25QaXBlRGF0YSAoY2h1bmspIHtcbiAgICAgIHJlcXVlc3Qub25Cb2R5U2VudChjaHVuaylcbiAgICB9XG5cbiAgICByZXR1cm5cbiAgfVxuXG4gIGxldCBmaW5pc2hlZCA9IGZhbHNlXG5cbiAgY29uc3Qgd3JpdGVyID0gbmV3IEFzeW5jV3JpdGVyKHsgc29ja2V0LCByZXF1ZXN0LCBjb250ZW50TGVuZ3RoLCBjbGllbnQsIGV4cGVjdHNQYXlsb2FkLCBoZWFkZXIgfSlcblxuICBjb25zdCBvbkRhdGEgPSBmdW5jdGlvbiAoY2h1bmspIHtcbiAgICBpZiAoZmluaXNoZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBpZiAoIXdyaXRlci53cml0ZShjaHVuaykgJiYgdGhpcy5wYXVzZSkge1xuICAgICAgICB0aGlzLnBhdXNlKClcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHV0aWwuZGVzdHJveSh0aGlzLCBlcnIpXG4gICAgfVxuICB9XG4gIGNvbnN0IG9uRHJhaW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGZpbmlzaGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoYm9keS5yZXN1bWUpIHtcbiAgICAgIGJvZHkucmVzdW1lKClcbiAgICB9XG4gIH1cbiAgY29uc3Qgb25BYm9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoZmluaXNoZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjb25zdCBlcnIgPSBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gb25GaW5pc2hlZChlcnIpKVxuICB9XG4gIGNvbnN0IG9uRmluaXNoZWQgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgaWYgKGZpbmlzaGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBmaW5pc2hlZCA9IHRydWVcblxuICAgIGFzc2VydChzb2NrZXQuZGVzdHJveWVkIHx8IChzb2NrZXRba1dyaXRpbmddICYmIGNsaWVudFtrUnVubmluZ10gPD0gMSkpXG5cbiAgICBzb2NrZXRcbiAgICAgIC5vZmYoJ2RyYWluJywgb25EcmFpbilcbiAgICAgIC5vZmYoJ2Vycm9yJywgb25GaW5pc2hlZClcblxuICAgIGJvZHlcbiAgICAgIC5yZW1vdmVMaXN0ZW5lcignZGF0YScsIG9uRGF0YSlcbiAgICAgIC5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25GaW5pc2hlZClcbiAgICAgIC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbkZpbmlzaGVkKVxuICAgICAgLnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uQWJvcnQpXG5cbiAgICBpZiAoIWVycikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgd3JpdGVyLmVuZCgpXG4gICAgICB9IGNhdGNoIChlcikge1xuICAgICAgICBlcnIgPSBlclxuICAgICAgfVxuICAgIH1cblxuICAgIHdyaXRlci5kZXN0cm95KGVycilcblxuICAgIGlmIChlcnIgJiYgKGVyci5jb2RlICE9PSAnVU5EX0VSUl9JTkZPJyB8fCBlcnIubWVzc2FnZSAhPT0gJ3Jlc2V0JykpIHtcbiAgICAgIHV0aWwuZGVzdHJveShib2R5LCBlcnIpXG4gICAgfSBlbHNlIHtcbiAgICAgIHV0aWwuZGVzdHJveShib2R5KVxuICAgIH1cbiAgfVxuXG4gIGJvZHlcbiAgICAub24oJ2RhdGEnLCBvbkRhdGEpXG4gICAgLm9uKCdlbmQnLCBvbkZpbmlzaGVkKVxuICAgIC5vbignZXJyb3InLCBvbkZpbmlzaGVkKVxuICAgIC5vbignY2xvc2UnLCBvbkFib3J0KVxuXG4gIGlmIChib2R5LnJlc3VtZSkge1xuICAgIGJvZHkucmVzdW1lKClcbiAgfVxuXG4gIHNvY2tldFxuICAgIC5vbignZHJhaW4nLCBvbkRyYWluKVxuICAgIC5vbignZXJyb3InLCBvbkZpbmlzaGVkKVxufVxuXG5hc3luYyBmdW5jdGlvbiB3cml0ZUJsb2IgKHsgaDJzdHJlYW0sIGJvZHksIGNsaWVudCwgcmVxdWVzdCwgc29ja2V0LCBjb250ZW50TGVuZ3RoLCBoZWFkZXIsIGV4cGVjdHNQYXlsb2FkIH0pIHtcbiAgYXNzZXJ0KGNvbnRlbnRMZW5ndGggPT09IGJvZHkuc2l6ZSwgJ2Jsb2IgYm9keSBtdXN0IGhhdmUgY29udGVudCBsZW5ndGgnKVxuXG4gIGNvbnN0IGlzSDIgPSBjbGllbnRba0hUVFBDb25uVmVyc2lvbl0gPT09ICdoMidcbiAgdHJ5IHtcbiAgICBpZiAoY29udGVudExlbmd0aCAhPSBudWxsICYmIGNvbnRlbnRMZW5ndGggIT09IGJvZHkuc2l6ZSkge1xuICAgICAgdGhyb3cgbmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpXG4gICAgfVxuXG4gICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20oYXdhaXQgYm9keS5hcnJheUJ1ZmZlcigpKVxuXG4gICAgaWYgKGlzSDIpIHtcbiAgICAgIGgyc3RyZWFtLmNvcmsoKVxuICAgICAgaDJzdHJlYW0ud3JpdGUoYnVmZmVyKVxuICAgICAgaDJzdHJlYW0udW5jb3JrKClcbiAgICB9IGVsc2Uge1xuICAgICAgc29ja2V0LmNvcmsoKVxuICAgICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn1jb250ZW50LWxlbmd0aDogJHtjb250ZW50TGVuZ3RofVxcclxcblxcclxcbmAsICdsYXRpbjEnKVxuICAgICAgc29ja2V0LndyaXRlKGJ1ZmZlcilcbiAgICAgIHNvY2tldC51bmNvcmsoKVxuICAgIH1cblxuICAgIHJlcXVlc3Qub25Cb2R5U2VudChidWZmZXIpXG4gICAgcmVxdWVzdC5vblJlcXVlc3RTZW50KClcblxuICAgIGlmICghZXhwZWN0c1BheWxvYWQpIHtcbiAgICAgIHNvY2tldFtrUmVzZXRdID0gdHJ1ZVxuICAgIH1cblxuICAgIHJlc3VtZShjbGllbnQpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHV0aWwuZGVzdHJveShpc0gyID8gaDJzdHJlYW0gOiBzb2NrZXQsIGVycilcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiB3cml0ZUl0ZXJhYmxlICh7IGgyc3RyZWFtLCBib2R5LCBjbGllbnQsIHJlcXVlc3QsIHNvY2tldCwgY29udGVudExlbmd0aCwgaGVhZGVyLCBleHBlY3RzUGF5bG9hZCB9KSB7XG4gIGFzc2VydChjb250ZW50TGVuZ3RoICE9PSAwIHx8IGNsaWVudFtrUnVubmluZ10gPT09IDAsICdpdGVyYXRvciBib2R5IGNhbm5vdCBiZSBwaXBlbGluZWQnKVxuXG4gIGxldCBjYWxsYmFjayA9IG51bGxcbiAgZnVuY3Rpb24gb25EcmFpbiAoKSB7XG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBjb25zdCBjYiA9IGNhbGxiYWNrXG4gICAgICBjYWxsYmFjayA9IG51bGxcbiAgICAgIGNiKClcbiAgICB9XG4gIH1cblxuICBjb25zdCB3YWl0Rm9yRHJhaW4gPSAoKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgYXNzZXJ0KGNhbGxiYWNrID09PSBudWxsKVxuXG4gICAgaWYgKHNvY2tldFtrRXJyb3JdKSB7XG4gICAgICByZWplY3Qoc29ja2V0W2tFcnJvcl0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbGxiYWNrID0gcmVzb2x2ZVxuICAgIH1cbiAgfSlcblxuICBpZiAoY2xpZW50W2tIVFRQQ29ublZlcnNpb25dID09PSAnaDInKSB7XG4gICAgaDJzdHJlYW1cbiAgICAgIC5vbignY2xvc2UnLCBvbkRyYWluKVxuICAgICAgLm9uKCdkcmFpbicsIG9uRHJhaW4pXG5cbiAgICB0cnkge1xuICAgICAgLy8gSXQncyB1cCB0byB0aGUgdXNlciB0byBzb21laG93IGFib3J0IHRoZSBhc3luYyBpdGVyYWJsZS5cbiAgICAgIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgYm9keSkge1xuICAgICAgICBpZiAoc29ja2V0W2tFcnJvcl0pIHtcbiAgICAgICAgICB0aHJvdyBzb2NrZXRba0Vycm9yXVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzID0gaDJzdHJlYW0ud3JpdGUoY2h1bmspXG4gICAgICAgIHJlcXVlc3Qub25Cb2R5U2VudChjaHVuaylcbiAgICAgICAgaWYgKCFyZXMpIHtcbiAgICAgICAgICBhd2FpdCB3YWl0Rm9yRHJhaW4oKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBoMnN0cmVhbS5kZXN0cm95KGVycilcbiAgICB9IGZpbmFsbHkge1xuICAgICAgcmVxdWVzdC5vblJlcXVlc3RTZW50KClcbiAgICAgIGgyc3RyZWFtLmVuZCgpXG4gICAgICBoMnN0cmVhbVxuICAgICAgICAub2ZmKCdjbG9zZScsIG9uRHJhaW4pXG4gICAgICAgIC5vZmYoJ2RyYWluJywgb25EcmFpbilcbiAgICB9XG5cbiAgICByZXR1cm5cbiAgfVxuXG4gIHNvY2tldFxuICAgIC5vbignY2xvc2UnLCBvbkRyYWluKVxuICAgIC5vbignZHJhaW4nLCBvbkRyYWluKVxuXG4gIGNvbnN0IHdyaXRlciA9IG5ldyBBc3luY1dyaXRlcih7IHNvY2tldCwgcmVxdWVzdCwgY29udGVudExlbmd0aCwgY2xpZW50LCBleHBlY3RzUGF5bG9hZCwgaGVhZGVyIH0pXG4gIHRyeSB7XG4gICAgLy8gSXQncyB1cCB0byB0aGUgdXNlciB0byBzb21laG93IGFib3J0IHRoZSBhc3luYyBpdGVyYWJsZS5cbiAgICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIGJvZHkpIHtcbiAgICAgIGlmIChzb2NrZXRba0Vycm9yXSkge1xuICAgICAgICB0aHJvdyBzb2NrZXRba0Vycm9yXVxuICAgICAgfVxuXG4gICAgICBpZiAoIXdyaXRlci53cml0ZShjaHVuaykpIHtcbiAgICAgICAgYXdhaXQgd2FpdEZvckRyYWluKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICB3cml0ZXIuZW5kKClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgd3JpdGVyLmRlc3Ryb3koZXJyKVxuICB9IGZpbmFsbHkge1xuICAgIHNvY2tldFxuICAgICAgLm9mZignY2xvc2UnLCBvbkRyYWluKVxuICAgICAgLm9mZignZHJhaW4nLCBvbkRyYWluKVxuICB9XG59XG5cbmNsYXNzIEFzeW5jV3JpdGVyIHtcbiAgY29uc3RydWN0b3IgKHsgc29ja2V0LCByZXF1ZXN0LCBjb250ZW50TGVuZ3RoLCBjbGllbnQsIGV4cGVjdHNQYXlsb2FkLCBoZWFkZXIgfSkge1xuICAgIHRoaXMuc29ja2V0ID0gc29ja2V0XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdFxuICAgIHRoaXMuY29udGVudExlbmd0aCA9IGNvbnRlbnRMZW5ndGhcbiAgICB0aGlzLmNsaWVudCA9IGNsaWVudFxuICAgIHRoaXMuYnl0ZXNXcml0dGVuID0gMFxuICAgIHRoaXMuZXhwZWN0c1BheWxvYWQgPSBleHBlY3RzUGF5bG9hZFxuICAgIHRoaXMuaGVhZGVyID0gaGVhZGVyXG5cbiAgICBzb2NrZXRba1dyaXRpbmddID0gdHJ1ZVxuICB9XG5cbiAgd3JpdGUgKGNodW5rKSB7XG4gICAgY29uc3QgeyBzb2NrZXQsIHJlcXVlc3QsIGNvbnRlbnRMZW5ndGgsIGNsaWVudCwgYnl0ZXNXcml0dGVuLCBleHBlY3RzUGF5bG9hZCwgaGVhZGVyIH0gPSB0aGlzXG5cbiAgICBpZiAoc29ja2V0W2tFcnJvcl0pIHtcbiAgICAgIHRocm93IHNvY2tldFtrRXJyb3JdXG4gICAgfVxuXG4gICAgaWYgKHNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGNvbnN0IGxlbiA9IEJ1ZmZlci5ieXRlTGVuZ3RoKGNodW5rKVxuICAgIGlmICghbGVuKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIC8vIFdlIHNob3VsZCBkZWZlciB3cml0aW5nIGNodW5rcy5cbiAgICBpZiAoY29udGVudExlbmd0aCAhPT0gbnVsbCAmJiBieXRlc1dyaXR0ZW4gKyBsZW4gPiBjb250ZW50TGVuZ3RoKSB7XG4gICAgICBpZiAoY2xpZW50W2tTdHJpY3RDb250ZW50TGVuZ3RoXSkge1xuICAgICAgICB0aHJvdyBuZXcgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKClcbiAgICAgIH1cblxuICAgICAgcHJvY2Vzcy5lbWl0V2FybmluZyhuZXcgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKCkpXG4gICAgfVxuXG4gICAgc29ja2V0LmNvcmsoKVxuXG4gICAgaWYgKGJ5dGVzV3JpdHRlbiA9PT0gMCkge1xuICAgICAgaWYgKCFleHBlY3RzUGF5bG9hZCkge1xuICAgICAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbnRlbnRMZW5ndGggPT09IG51bGwpIHtcbiAgICAgICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn10cmFuc2Zlci1lbmNvZGluZzogY2h1bmtlZFxcclxcbmAsICdsYXRpbjEnKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn1jb250ZW50LWxlbmd0aDogJHtjb250ZW50TGVuZ3RofVxcclxcblxcclxcbmAsICdsYXRpbjEnKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb250ZW50TGVuZ3RoID09PSBudWxsKSB7XG4gICAgICBzb2NrZXQud3JpdGUoYFxcclxcbiR7bGVuLnRvU3RyaW5nKDE2KX1cXHJcXG5gLCAnbGF0aW4xJylcbiAgICB9XG5cbiAgICB0aGlzLmJ5dGVzV3JpdHRlbiArPSBsZW5cblxuICAgIGNvbnN0IHJldCA9IHNvY2tldC53cml0ZShjaHVuaylcblxuICAgIHNvY2tldC51bmNvcmsoKVxuXG4gICAgcmVxdWVzdC5vbkJvZHlTZW50KGNodW5rKVxuXG4gICAgaWYgKCFyZXQpIHtcbiAgICAgIGlmIChzb2NrZXRba1BhcnNlcl0udGltZW91dCAmJiBzb2NrZXRba1BhcnNlcl0udGltZW91dFR5cGUgPT09IFRJTUVPVVRfSEVBREVSUykge1xuICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogb25seSBmb3IgamVzdFxuICAgICAgICBpZiAoc29ja2V0W2tQYXJzZXJdLnRpbWVvdXQucmVmcmVzaCkge1xuICAgICAgICAgIHNvY2tldFtrUGFyc2VyXS50aW1lb3V0LnJlZnJlc2goKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgZW5kICgpIHtcbiAgICBjb25zdCB7IHNvY2tldCwgY29udGVudExlbmd0aCwgY2xpZW50LCBieXRlc1dyaXR0ZW4sIGV4cGVjdHNQYXlsb2FkLCBoZWFkZXIsIHJlcXVlc3QgfSA9IHRoaXNcbiAgICByZXF1ZXN0Lm9uUmVxdWVzdFNlbnQoKVxuXG4gICAgc29ja2V0W2tXcml0aW5nXSA9IGZhbHNlXG5cbiAgICBpZiAoc29ja2V0W2tFcnJvcl0pIHtcbiAgICAgIHRocm93IHNvY2tldFtrRXJyb3JdXG4gICAgfVxuXG4gICAgaWYgKHNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChieXRlc1dyaXR0ZW4gPT09IDApIHtcbiAgICAgIGlmIChleHBlY3RzUGF5bG9hZCkge1xuICAgICAgICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMCNzZWN0aW9uLTMuMy4yXG4gICAgICAgIC8vIEEgdXNlciBhZ2VudCBTSE9VTEQgc2VuZCBhIENvbnRlbnQtTGVuZ3RoIGluIGEgcmVxdWVzdCBtZXNzYWdlIHdoZW5cbiAgICAgICAgLy8gbm8gVHJhbnNmZXItRW5jb2RpbmcgaXMgc2VudCBhbmQgdGhlIHJlcXVlc3QgbWV0aG9kIGRlZmluZXMgYSBtZWFuaW5nXG4gICAgICAgIC8vIGZvciBhbiBlbmNsb3NlZCBwYXlsb2FkIGJvZHkuXG5cbiAgICAgICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn1jb250ZW50LWxlbmd0aDogMFxcclxcblxcclxcbmAsICdsYXRpbjEnKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn1cXHJcXG5gLCAnbGF0aW4xJylcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNvbnRlbnRMZW5ndGggPT09IG51bGwpIHtcbiAgICAgIHNvY2tldC53cml0ZSgnXFxyXFxuMFxcclxcblxcclxcbicsICdsYXRpbjEnKVxuICAgIH1cblxuICAgIGlmIChjb250ZW50TGVuZ3RoICE9PSBudWxsICYmIGJ5dGVzV3JpdHRlbiAhPT0gY29udGVudExlbmd0aCkge1xuICAgICAgaWYgKGNsaWVudFtrU3RyaWN0Q29udGVudExlbmd0aF0pIHtcbiAgICAgICAgdGhyb3cgbmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9jZXNzLmVtaXRXYXJuaW5nKG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc29ja2V0W2tQYXJzZXJdLnRpbWVvdXQgJiYgc29ja2V0W2tQYXJzZXJdLnRpbWVvdXRUeXBlID09PSBUSU1FT1VUX0hFQURFUlMpIHtcbiAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBvbmx5IGZvciBqZXN0XG4gICAgICBpZiAoc29ja2V0W2tQYXJzZXJdLnRpbWVvdXQucmVmcmVzaCkge1xuICAgICAgICBzb2NrZXRba1BhcnNlcl0udGltZW91dC5yZWZyZXNoKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXN1bWUoY2xpZW50KVxuICB9XG5cbiAgZGVzdHJveSAoZXJyKSB7XG4gICAgY29uc3QgeyBzb2NrZXQsIGNsaWVudCB9ID0gdGhpc1xuXG4gICAgc29ja2V0W2tXcml0aW5nXSA9IGZhbHNlXG5cbiAgICBpZiAoZXJyKSB7XG4gICAgICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA8PSAxLCAncGlwZWxpbmUgc2hvdWxkIG9ubHkgY29udGFpbiB0aGlzIHJlcXVlc3QnKVxuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgZXJyKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBlcnJvclJlcXVlc3QgKGNsaWVudCwgcmVxdWVzdCwgZXJyKSB7XG4gIHRyeSB7XG4gICAgcmVxdWVzdC5vbkVycm9yKGVycilcbiAgICBhc3NlcnQocmVxdWVzdC5hYm9ydGVkKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjbGllbnQuZW1pdCgnZXJyb3InLCBlcnIpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBDbGllbnRcbiIsCiAgICAiLyogZXNsaW50LWRpc2FibGUgKi9cblxuJ3VzZSBzdHJpY3QnXG5cbi8vIEV4dHJhY3RlZCBmcm9tIG5vZGUvbGliL2ludGVybmFsL2ZpeGVkX3F1ZXVlLmpzXG5cbi8vIEN1cnJlbnRseSBvcHRpbWFsIHF1ZXVlIHNpemUsIHRlc3RlZCBvbiBWOCA2LjAgLSA2LjYuIE11c3QgYmUgcG93ZXIgb2YgdHdvLlxuY29uc3Qga1NpemUgPSAyMDQ4O1xuY29uc3Qga01hc2sgPSBrU2l6ZSAtIDE7XG5cbi8vIFRoZSBGaXhlZFF1ZXVlIGlzIGltcGxlbWVudGVkIGFzIGEgc2luZ2x5LWxpbmtlZCBsaXN0IG9mIGZpeGVkLXNpemVcbi8vIGNpcmN1bGFyIGJ1ZmZlcnMuIEl0IGxvb2tzIHNvbWV0aGluZyBsaWtlIHRoaXM6XG4vL1xuLy8gIGhlYWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFpbFxuLy8gICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4vLyAgICB2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZcbi8vICstLS0tLS0tLS0tLSsgPC0tLS0tXFwgICAgICAgKy0tLS0tLS0tLS0tKyA8LS0tLS0tXFwgICAgICAgICArLS0tLS0tLS0tLS0rXG4vLyB8ICBbbnVsbF0gICB8ICAgICAgICBcXC0tLS0tIHwgICBuZXh0ICAgIHwgICAgICAgICBcXC0tLS0tLS0gfCAgIG5leHQgICAgfFxuLy8gKy0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rXG4vLyB8ICAgaXRlbSAgICB8IDwtLSBib3R0b20gICAgfCAgIGl0ZW0gICAgfCA8LS0gYm90dG9tICAgICAgIHwgIFtlbXB0eV0gIHxcbi8vIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgfCAgW2VtcHR5XSAgfFxuLy8gfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICB8ICBbZW1wdHldICB8XG4vLyB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgIHwgIFtlbXB0eV0gIHxcbi8vIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgIGJvdHRvbSAtLT4gfCAgIGl0ZW0gICAgfFxuLy8gfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8XG4vLyB8ICAgIC4uLiAgICB8ICAgICAgICAgICAgICAgfCAgICAuLi4gICAgfCAgICAgICAgICAgICAgICAgIHwgICAgLi4uICAgIHxcbi8vIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfFxuLy8gfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8XG4vLyB8ICBbZW1wdHldICB8IDwtLSB0b3AgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHxcbi8vIHwgIFtlbXB0eV0gIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfFxuLy8gfCAgW2VtcHR5XSAgfCAgICAgICAgICAgICAgIHwgIFtlbXB0eV0gIHwgPC0tIHRvcCAgdG9wIC0tPiB8ICBbZW1wdHldICB8XG4vLyArLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLStcbi8vXG4vLyBPciwgaWYgdGhlcmUgaXMgb25seSBvbmUgY2lyY3VsYXIgYnVmZmVyLCBpdCBsb29rcyBzb21ldGhpbmdcbi8vIGxpa2UgZWl0aGVyIG9mIHRoZXNlOlxuLy9cbi8vICBoZWFkICAgdGFpbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWQgICB0YWlsXG4vLyAgICB8ICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHxcbi8vICAgIHYgICAgIHYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdiAgICAgdlxuLy8gKy0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rXG4vLyB8ICBbbnVsbF0gICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFtudWxsXSAgIHxcbi8vICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tK1xuLy8gfCAgW2VtcHR5XSAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8XG4vLyB8ICBbZW1wdHldICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHxcbi8vIHwgICBpdGVtICAgIHwgPC0tIGJvdHRvbSAgICAgICAgICAgIHRvcCAtLT4gfCAgW2VtcHR5XSAgfFxuLy8gfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBbZW1wdHldICB8XG4vLyB8ICBbZW1wdHldICB8IDwtLSB0b3AgICAgICAgICAgICBib3R0b20gLS0+IHwgICBpdGVtICAgIHxcbi8vIHwgIFtlbXB0eV0gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfFxuLy8gKy0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rXG4vL1xuLy8gQWRkaW5nIGEgdmFsdWUgbWVhbnMgbW92aW5nIGB0b3BgIGZvcndhcmQgYnkgb25lLCByZW1vdmluZyBtZWFuc1xuLy8gbW92aW5nIGBib3R0b21gIGZvcndhcmQgYnkgb25lLiBBZnRlciByZWFjaGluZyB0aGUgZW5kLCB0aGUgcXVldWVcbi8vIHdyYXBzIGFyb3VuZC5cbi8vXG4vLyBXaGVuIGB0b3AgPT09IGJvdHRvbWAgdGhlIGN1cnJlbnQgcXVldWUgaXMgZW1wdHkgYW5kIHdoZW5cbi8vIGB0b3AgKyAxID09PSBib3R0b21gIGl0J3MgZnVsbC4gVGhpcyB3YXN0ZXMgYSBzaW5nbGUgc3BhY2Ugb2Ygc3RvcmFnZVxuLy8gYnV0IGFsbG93cyBtdWNoIHF1aWNrZXIgY2hlY2tzLlxuXG5jbGFzcyBGaXhlZENpcmN1bGFyQnVmZmVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5ib3R0b20gPSAwO1xuICAgIHRoaXMudG9wID0gMDtcbiAgICB0aGlzLmxpc3QgPSBuZXcgQXJyYXkoa1NpemUpO1xuICAgIHRoaXMubmV4dCA9IG51bGw7XG4gIH1cblxuICBpc0VtcHR5KCkge1xuICAgIHJldHVybiB0aGlzLnRvcCA9PT0gdGhpcy5ib3R0b207XG4gIH1cblxuICBpc0Z1bGwoKSB7XG4gICAgcmV0dXJuICgodGhpcy50b3AgKyAxKSAmIGtNYXNrKSA9PT0gdGhpcy5ib3R0b207XG4gIH1cblxuICBwdXNoKGRhdGEpIHtcbiAgICB0aGlzLmxpc3RbdGhpcy50b3BdID0gZGF0YTtcbiAgICB0aGlzLnRvcCA9ICh0aGlzLnRvcCArIDEpICYga01hc2s7XG4gIH1cblxuICBzaGlmdCgpIHtcbiAgICBjb25zdCBuZXh0SXRlbSA9IHRoaXMubGlzdFt0aGlzLmJvdHRvbV07XG4gICAgaWYgKG5leHRJdGVtID09PSB1bmRlZmluZWQpXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB0aGlzLmxpc3RbdGhpcy5ib3R0b21dID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuYm90dG9tID0gKHRoaXMuYm90dG9tICsgMSkgJiBrTWFzaztcbiAgICByZXR1cm4gbmV4dEl0ZW07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBGaXhlZFF1ZXVlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5oZWFkID0gdGhpcy50YWlsID0gbmV3IEZpeGVkQ2lyY3VsYXJCdWZmZXIoKTtcbiAgfVxuXG4gIGlzRW1wdHkoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGVhZC5pc0VtcHR5KCk7XG4gIH1cblxuICBwdXNoKGRhdGEpIHtcbiAgICBpZiAodGhpcy5oZWFkLmlzRnVsbCgpKSB7XG4gICAgICAvLyBIZWFkIGlzIGZ1bGw6IENyZWF0ZXMgYSBuZXcgcXVldWUsIHNldHMgdGhlIG9sZCBxdWV1ZSdzIGAubmV4dGAgdG8gaXQsXG4gICAgICAvLyBhbmQgc2V0cyBpdCBhcyB0aGUgbmV3IG1haW4gcXVldWUuXG4gICAgICB0aGlzLmhlYWQgPSB0aGlzLmhlYWQubmV4dCA9IG5ldyBGaXhlZENpcmN1bGFyQnVmZmVyKCk7XG4gICAgfVxuICAgIHRoaXMuaGVhZC5wdXNoKGRhdGEpO1xuICB9XG5cbiAgc2hpZnQoKSB7XG4gICAgY29uc3QgdGFpbCA9IHRoaXMudGFpbDtcbiAgICBjb25zdCBuZXh0ID0gdGFpbC5zaGlmdCgpO1xuICAgIGlmICh0YWlsLmlzRW1wdHkoKSAmJiB0YWlsLm5leHQgIT09IG51bGwpIHtcbiAgICAgIC8vIElmIHRoZXJlIGlzIGFub3RoZXIgcXVldWUsIGl0IGZvcm1zIHRoZSBuZXcgdGFpbC5cbiAgICAgIHRoaXMudGFpbCA9IHRhaWwubmV4dDtcbiAgICB9XG4gICAgcmV0dXJuIG5leHQ7XG4gIH1cbn07XG4iLAogICAgImNvbnN0IHsga0ZyZWUsIGtDb25uZWN0ZWQsIGtQZW5kaW5nLCBrUXVldWVkLCBrUnVubmluZywga1NpemUgfSA9IHJlcXVpcmUoJy4vY29yZS9zeW1ib2xzJylcbmNvbnN0IGtQb29sID0gU3ltYm9sKCdwb29sJylcblxuY2xhc3MgUG9vbFN0YXRzIHtcbiAgY29uc3RydWN0b3IgKHBvb2wpIHtcbiAgICB0aGlzW2tQb29sXSA9IHBvb2xcbiAgfVxuXG4gIGdldCBjb25uZWN0ZWQgKCkge1xuICAgIHJldHVybiB0aGlzW2tQb29sXVtrQ29ubmVjdGVkXVxuICB9XG5cbiAgZ2V0IGZyZWUgKCkge1xuICAgIHJldHVybiB0aGlzW2tQb29sXVtrRnJlZV1cbiAgfVxuXG4gIGdldCBwZW5kaW5nICgpIHtcbiAgICByZXR1cm4gdGhpc1trUG9vbF1ba1BlbmRpbmddXG4gIH1cblxuICBnZXQgcXVldWVkICgpIHtcbiAgICByZXR1cm4gdGhpc1trUG9vbF1ba1F1ZXVlZF1cbiAgfVxuXG4gIGdldCBydW5uaW5nICgpIHtcbiAgICByZXR1cm4gdGhpc1trUG9vbF1ba1J1bm5pbmddXG4gIH1cblxuICBnZXQgc2l6ZSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1Bvb2xdW2tTaXplXVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUG9vbFN0YXRzXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBEaXNwYXRjaGVyQmFzZSA9IHJlcXVpcmUoJy4vZGlzcGF0Y2hlci1iYXNlJylcbmNvbnN0IEZpeGVkUXVldWUgPSByZXF1aXJlKCcuL25vZGUvZml4ZWQtcXVldWUnKVxuY29uc3QgeyBrQ29ubmVjdGVkLCBrU2l6ZSwga1J1bm5pbmcsIGtQZW5kaW5nLCBrUXVldWVkLCBrQnVzeSwga0ZyZWUsIGtVcmwsIGtDbG9zZSwga0Rlc3Ryb3ksIGtEaXNwYXRjaCB9ID0gcmVxdWlyZSgnLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgUG9vbFN0YXRzID0gcmVxdWlyZSgnLi9wb29sLXN0YXRzJylcblxuY29uc3Qga0NsaWVudHMgPSBTeW1ib2woJ2NsaWVudHMnKVxuY29uc3Qga05lZWREcmFpbiA9IFN5bWJvbCgnbmVlZERyYWluJylcbmNvbnN0IGtRdWV1ZSA9IFN5bWJvbCgncXVldWUnKVxuY29uc3Qga0Nsb3NlZFJlc29sdmUgPSBTeW1ib2woJ2Nsb3NlZCByZXNvbHZlJylcbmNvbnN0IGtPbkRyYWluID0gU3ltYm9sKCdvbkRyYWluJylcbmNvbnN0IGtPbkNvbm5lY3QgPSBTeW1ib2woJ29uQ29ubmVjdCcpXG5jb25zdCBrT25EaXNjb25uZWN0ID0gU3ltYm9sKCdvbkRpc2Nvbm5lY3QnKVxuY29uc3Qga09uQ29ubmVjdGlvbkVycm9yID0gU3ltYm9sKCdvbkNvbm5lY3Rpb25FcnJvcicpXG5jb25zdCBrR2V0RGlzcGF0Y2hlciA9IFN5bWJvbCgnZ2V0IGRpc3BhdGNoZXInKVxuY29uc3Qga0FkZENsaWVudCA9IFN5bWJvbCgnYWRkIGNsaWVudCcpXG5jb25zdCBrUmVtb3ZlQ2xpZW50ID0gU3ltYm9sKCdyZW1vdmUgY2xpZW50JylcbmNvbnN0IGtTdGF0cyA9IFN5bWJvbCgnc3RhdHMnKVxuXG5jbGFzcyBQb29sQmFzZSBleHRlbmRzIERpc3BhdGNoZXJCYXNlIHtcbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXNba1F1ZXVlXSA9IG5ldyBGaXhlZFF1ZXVlKClcbiAgICB0aGlzW2tDbGllbnRzXSA9IFtdXG4gICAgdGhpc1trUXVldWVkXSA9IDBcblxuICAgIGNvbnN0IHBvb2wgPSB0aGlzXG5cbiAgICB0aGlzW2tPbkRyYWluXSA9IGZ1bmN0aW9uIG9uRHJhaW4gKG9yaWdpbiwgdGFyZ2V0cykge1xuICAgICAgY29uc3QgcXVldWUgPSBwb29sW2tRdWV1ZV1cblxuICAgICAgbGV0IG5lZWREcmFpbiA9IGZhbHNlXG5cbiAgICAgIHdoaWxlICghbmVlZERyYWluKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBxdWV1ZS5zaGlmdCgpXG4gICAgICAgIGlmICghaXRlbSkge1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgcG9vbFtrUXVldWVkXS0tXG4gICAgICAgIG5lZWREcmFpbiA9ICF0aGlzLmRpc3BhdGNoKGl0ZW0ub3B0cywgaXRlbS5oYW5kbGVyKVxuICAgICAgfVxuXG4gICAgICB0aGlzW2tOZWVkRHJhaW5dID0gbmVlZERyYWluXG5cbiAgICAgIGlmICghdGhpc1trTmVlZERyYWluXSAmJiBwb29sW2tOZWVkRHJhaW5dKSB7XG4gICAgICAgIHBvb2xba05lZWREcmFpbl0gPSBmYWxzZVxuICAgICAgICBwb29sLmVtaXQoJ2RyYWluJywgb3JpZ2luLCBbcG9vbCwgLi4udGFyZ2V0c10pXG4gICAgICB9XG5cbiAgICAgIGlmIChwb29sW2tDbG9zZWRSZXNvbHZlXSAmJiBxdWV1ZS5pc0VtcHR5KCkpIHtcbiAgICAgICAgUHJvbWlzZVxuICAgICAgICAgIC5hbGwocG9vbFtrQ2xpZW50c10ubWFwKGMgPT4gYy5jbG9zZSgpKSlcbiAgICAgICAgICAudGhlbihwb29sW2tDbG9zZWRSZXNvbHZlXSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzW2tPbkNvbm5lY3RdID0gKG9yaWdpbiwgdGFyZ2V0cykgPT4ge1xuICAgICAgcG9vbC5lbWl0KCdjb25uZWN0Jywgb3JpZ2luLCBbcG9vbCwgLi4udGFyZ2V0c10pXG4gICAgfVxuXG4gICAgdGhpc1trT25EaXNjb25uZWN0XSA9IChvcmlnaW4sIHRhcmdldHMsIGVycikgPT4ge1xuICAgICAgcG9vbC5lbWl0KCdkaXNjb25uZWN0Jywgb3JpZ2luLCBbcG9vbCwgLi4udGFyZ2V0c10sIGVycilcbiAgICB9XG5cbiAgICB0aGlzW2tPbkNvbm5lY3Rpb25FcnJvcl0gPSAob3JpZ2luLCB0YXJnZXRzLCBlcnIpID0+IHtcbiAgICAgIHBvb2wuZW1pdCgnY29ubmVjdGlvbkVycm9yJywgb3JpZ2luLCBbcG9vbCwgLi4udGFyZ2V0c10sIGVycilcbiAgICB9XG5cbiAgICB0aGlzW2tTdGF0c10gPSBuZXcgUG9vbFN0YXRzKHRoaXMpXG4gIH1cblxuICBnZXQgW2tCdXN5XSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba05lZWREcmFpbl1cbiAgfVxuXG4gIGdldCBba0Nvbm5lY3RlZF0gKCkge1xuICAgIHJldHVybiB0aGlzW2tDbGllbnRzXS5maWx0ZXIoY2xpZW50ID0+IGNsaWVudFtrQ29ubmVjdGVkXSkubGVuZ3RoXG4gIH1cblxuICBnZXQgW2tGcmVlXSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0NsaWVudHNdLmZpbHRlcihjbGllbnQgPT4gY2xpZW50W2tDb25uZWN0ZWRdICYmICFjbGllbnRba05lZWREcmFpbl0pLmxlbmd0aFxuICB9XG5cbiAgZ2V0IFtrUGVuZGluZ10gKCkge1xuICAgIGxldCByZXQgPSB0aGlzW2tRdWV1ZWRdXG4gICAgZm9yIChjb25zdCB7IFtrUGVuZGluZ106IHBlbmRpbmcgfSBvZiB0aGlzW2tDbGllbnRzXSkge1xuICAgICAgcmV0ICs9IHBlbmRpbmdcbiAgICB9XG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgZ2V0IFtrUnVubmluZ10gKCkge1xuICAgIGxldCByZXQgPSAwXG4gICAgZm9yIChjb25zdCB7IFtrUnVubmluZ106IHJ1bm5pbmcgfSBvZiB0aGlzW2tDbGllbnRzXSkge1xuICAgICAgcmV0ICs9IHJ1bm5pbmdcbiAgICB9XG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgZ2V0IFtrU2l6ZV0gKCkge1xuICAgIGxldCByZXQgPSB0aGlzW2tRdWV1ZWRdXG4gICAgZm9yIChjb25zdCB7IFtrU2l6ZV06IHNpemUgfSBvZiB0aGlzW2tDbGllbnRzXSkge1xuICAgICAgcmV0ICs9IHNpemVcbiAgICB9XG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgZ2V0IHN0YXRzICgpIHtcbiAgICByZXR1cm4gdGhpc1trU3RhdHNdXG4gIH1cblxuICBhc3luYyBba0Nsb3NlXSAoKSB7XG4gICAgaWYgKHRoaXNba1F1ZXVlXS5pc0VtcHR5KCkpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLmFsbCh0aGlzW2tDbGllbnRzXS5tYXAoYyA9PiBjLmNsb3NlKCkpKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgdGhpc1trQ2xvc2VkUmVzb2x2ZV0gPSByZXNvbHZlXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIFtrRGVzdHJveV0gKGVycikge1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCBpdGVtID0gdGhpc1trUXVldWVdLnNoaWZ0KClcbiAgICAgIGlmICghaXRlbSkge1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgaXRlbS5oYW5kbGVyLm9uRXJyb3IoZXJyKVxuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLmFsbCh0aGlzW2tDbGllbnRzXS5tYXAoYyA9PiBjLmRlc3Ryb3koZXJyKSkpXG4gIH1cblxuICBba0Rpc3BhdGNoXSAob3B0cywgaGFuZGxlcikge1xuICAgIGNvbnN0IGRpc3BhdGNoZXIgPSB0aGlzW2tHZXREaXNwYXRjaGVyXSgpXG5cbiAgICBpZiAoIWRpc3BhdGNoZXIpIHtcbiAgICAgIHRoaXNba05lZWREcmFpbl0gPSB0cnVlXG4gICAgICB0aGlzW2tRdWV1ZV0ucHVzaCh7IG9wdHMsIGhhbmRsZXIgfSlcbiAgICAgIHRoaXNba1F1ZXVlZF0rK1xuICAgIH0gZWxzZSBpZiAoIWRpc3BhdGNoZXIuZGlzcGF0Y2gob3B0cywgaGFuZGxlcikpIHtcbiAgICAgIGRpc3BhdGNoZXJba05lZWREcmFpbl0gPSB0cnVlXG4gICAgICB0aGlzW2tOZWVkRHJhaW5dID0gIXRoaXNba0dldERpc3BhdGNoZXJdKClcbiAgICB9XG5cbiAgICByZXR1cm4gIXRoaXNba05lZWREcmFpbl1cbiAgfVxuXG4gIFtrQWRkQ2xpZW50XSAoY2xpZW50KSB7XG4gICAgY2xpZW50XG4gICAgICAub24oJ2RyYWluJywgdGhpc1trT25EcmFpbl0pXG4gICAgICAub24oJ2Nvbm5lY3QnLCB0aGlzW2tPbkNvbm5lY3RdKVxuICAgICAgLm9uKCdkaXNjb25uZWN0JywgdGhpc1trT25EaXNjb25uZWN0XSlcbiAgICAgIC5vbignY29ubmVjdGlvbkVycm9yJywgdGhpc1trT25Db25uZWN0aW9uRXJyb3JdKVxuXG4gICAgdGhpc1trQ2xpZW50c10ucHVzaChjbGllbnQpXG5cbiAgICBpZiAodGhpc1trTmVlZERyYWluXSkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzW2tOZWVkRHJhaW5dKSB7XG4gICAgICAgICAgdGhpc1trT25EcmFpbl0oY2xpZW50W2tVcmxdLCBbdGhpcywgY2xpZW50XSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgW2tSZW1vdmVDbGllbnRdIChjbGllbnQpIHtcbiAgICBjbGllbnQuY2xvc2UoKCkgPT4ge1xuICAgICAgY29uc3QgaWR4ID0gdGhpc1trQ2xpZW50c10uaW5kZXhPZihjbGllbnQpXG4gICAgICBpZiAoaWR4ICE9PSAtMSkge1xuICAgICAgICB0aGlzW2tDbGllbnRzXS5zcGxpY2UoaWR4LCAxKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICB0aGlzW2tOZWVkRHJhaW5dID0gdGhpc1trQ2xpZW50c10uc29tZShkaXNwYXRjaGVyID0+IChcbiAgICAgICFkaXNwYXRjaGVyW2tOZWVkRHJhaW5dICYmXG4gICAgICBkaXNwYXRjaGVyLmNsb3NlZCAhPT0gdHJ1ZSAmJlxuICAgICAgZGlzcGF0Y2hlci5kZXN0cm95ZWQgIT09IHRydWVcbiAgICApKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBQb29sQmFzZSxcbiAga0NsaWVudHMsXG4gIGtOZWVkRHJhaW4sXG4gIGtBZGRDbGllbnQsXG4gIGtSZW1vdmVDbGllbnQsXG4gIGtHZXREaXNwYXRjaGVyXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIFBvb2xCYXNlLFxuICBrQ2xpZW50cyxcbiAga05lZWREcmFpbixcbiAga0FkZENsaWVudCxcbiAga0dldERpc3BhdGNoZXJcbn0gPSByZXF1aXJlKCcuL3Bvb2wtYmFzZScpXG5jb25zdCBDbGllbnQgPSByZXF1aXJlKCcuL2NsaWVudCcpXG5jb25zdCB7XG4gIEludmFsaWRBcmd1bWVudEVycm9yXG59ID0gcmVxdWlyZSgnLi9jb3JlL2Vycm9ycycpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBrVXJsLCBrSW50ZXJjZXB0b3JzIH0gPSByZXF1aXJlKCcuL2NvcmUvc3ltYm9scycpXG5jb25zdCBidWlsZENvbm5lY3RvciA9IHJlcXVpcmUoJy4vY29yZS9jb25uZWN0JylcblxuY29uc3Qga09wdGlvbnMgPSBTeW1ib2woJ29wdGlvbnMnKVxuY29uc3Qga0Nvbm5lY3Rpb25zID0gU3ltYm9sKCdjb25uZWN0aW9ucycpXG5jb25zdCBrRmFjdG9yeSA9IFN5bWJvbCgnZmFjdG9yeScpXG5cbmZ1bmN0aW9uIGRlZmF1bHRGYWN0b3J5IChvcmlnaW4sIG9wdHMpIHtcbiAgcmV0dXJuIG5ldyBDbGllbnQob3JpZ2luLCBvcHRzKVxufVxuXG5jbGFzcyBQb29sIGV4dGVuZHMgUG9vbEJhc2Uge1xuICBjb25zdHJ1Y3RvciAob3JpZ2luLCB7XG4gICAgY29ubmVjdGlvbnMsXG4gICAgZmFjdG9yeSA9IGRlZmF1bHRGYWN0b3J5LFxuICAgIGNvbm5lY3QsXG4gICAgY29ubmVjdFRpbWVvdXQsXG4gICAgdGxzLFxuICAgIG1heENhY2hlZFNlc3Npb25zLFxuICAgIHNvY2tldFBhdGgsXG4gICAgYXV0b1NlbGVjdEZhbWlseSxcbiAgICBhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQsXG4gICAgYWxsb3dIMixcbiAgICAuLi5vcHRpb25zXG4gIH0gPSB7fSkge1xuICAgIHN1cGVyKClcblxuICAgIGlmIChjb25uZWN0aW9ucyAhPSBudWxsICYmICghTnVtYmVyLmlzRmluaXRlKGNvbm5lY3Rpb25zKSB8fCBjb25uZWN0aW9ucyA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY29ubmVjdGlvbnMnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZmFjdG9yeSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdmYWN0b3J5IG11c3QgYmUgYSBmdW5jdGlvbi4nKVxuICAgIH1cblxuICAgIGlmIChjb25uZWN0ICE9IG51bGwgJiYgdHlwZW9mIGNvbm5lY3QgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGNvbm5lY3QgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2Nvbm5lY3QgbXVzdCBiZSBhIGZ1bmN0aW9uIG9yIGFuIG9iamVjdCcpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjb25uZWN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25uZWN0ID0gYnVpbGRDb25uZWN0b3Ioe1xuICAgICAgICAuLi50bHMsXG4gICAgICAgIG1heENhY2hlZFNlc3Npb25zLFxuICAgICAgICBhbGxvd0gyLFxuICAgICAgICBzb2NrZXRQYXRoLFxuICAgICAgICB0aW1lb3V0OiBjb25uZWN0VGltZW91dCxcbiAgICAgICAgLi4uKHV0aWwubm9kZUhhc0F1dG9TZWxlY3RGYW1pbHkgJiYgYXV0b1NlbGVjdEZhbWlseSA/IHsgYXV0b1NlbGVjdEZhbWlseSwgYXV0b1NlbGVjdEZhbWlseUF0dGVtcHRUaW1lb3V0IH0gOiB1bmRlZmluZWQpLFxuICAgICAgICAuLi5jb25uZWN0XG4gICAgICB9KVxuICAgIH1cblxuICAgIHRoaXNba0ludGVyY2VwdG9yc10gPSBvcHRpb25zLmludGVyY2VwdG9ycyAmJiBvcHRpb25zLmludGVyY2VwdG9ycy5Qb29sICYmIEFycmF5LmlzQXJyYXkob3B0aW9ucy5pbnRlcmNlcHRvcnMuUG9vbClcbiAgICAgID8gb3B0aW9ucy5pbnRlcmNlcHRvcnMuUG9vbFxuICAgICAgOiBbXVxuICAgIHRoaXNba0Nvbm5lY3Rpb25zXSA9IGNvbm5lY3Rpb25zIHx8IG51bGxcbiAgICB0aGlzW2tVcmxdID0gdXRpbC5wYXJzZU9yaWdpbihvcmlnaW4pXG4gICAgdGhpc1trT3B0aW9uc10gPSB7IC4uLnV0aWwuZGVlcENsb25lKG9wdGlvbnMpLCBjb25uZWN0LCBhbGxvd0gyIH1cbiAgICB0aGlzW2tPcHRpb25zXS5pbnRlcmNlcHRvcnMgPSBvcHRpb25zLmludGVyY2VwdG9yc1xuICAgICAgPyB7IC4uLm9wdGlvbnMuaW50ZXJjZXB0b3JzIH1cbiAgICAgIDogdW5kZWZpbmVkXG4gICAgdGhpc1trRmFjdG9yeV0gPSBmYWN0b3J5XG4gIH1cblxuICBba0dldERpc3BhdGNoZXJdICgpIHtcbiAgICBsZXQgZGlzcGF0Y2hlciA9IHRoaXNba0NsaWVudHNdLmZpbmQoZGlzcGF0Y2hlciA9PiAhZGlzcGF0Y2hlcltrTmVlZERyYWluXSlcblxuICAgIGlmIChkaXNwYXRjaGVyKSB7XG4gICAgICByZXR1cm4gZGlzcGF0Y2hlclxuICAgIH1cblxuICAgIGlmICghdGhpc1trQ29ubmVjdGlvbnNdIHx8IHRoaXNba0NsaWVudHNdLmxlbmd0aCA8IHRoaXNba0Nvbm5lY3Rpb25zXSkge1xuICAgICAgZGlzcGF0Y2hlciA9IHRoaXNba0ZhY3RvcnldKHRoaXNba1VybF0sIHRoaXNba09wdGlvbnNdKVxuICAgICAgdGhpc1trQWRkQ2xpZW50XShkaXNwYXRjaGVyKVxuICAgIH1cblxuICAgIHJldHVybiBkaXNwYXRjaGVyXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBQb29sXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIEJhbGFuY2VkUG9vbE1pc3NpbmdVcHN0cmVhbUVycm9yLFxuICBJbnZhbGlkQXJndW1lbnRFcnJvclxufSA9IHJlcXVpcmUoJy4vY29yZS9lcnJvcnMnKVxuY29uc3Qge1xuICBQb29sQmFzZSxcbiAga0NsaWVudHMsXG4gIGtOZWVkRHJhaW4sXG4gIGtBZGRDbGllbnQsXG4gIGtSZW1vdmVDbGllbnQsXG4gIGtHZXREaXNwYXRjaGVyXG59ID0gcmVxdWlyZSgnLi9wb29sLWJhc2UnKVxuY29uc3QgUG9vbCA9IHJlcXVpcmUoJy4vcG9vbCcpXG5jb25zdCB7IGtVcmwsIGtJbnRlcmNlcHRvcnMgfSA9IHJlcXVpcmUoJy4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsgcGFyc2VPcmlnaW4gfSA9IHJlcXVpcmUoJy4vY29yZS91dGlsJylcbmNvbnN0IGtGYWN0b3J5ID0gU3ltYm9sKCdmYWN0b3J5JylcblxuY29uc3Qga09wdGlvbnMgPSBTeW1ib2woJ29wdGlvbnMnKVxuY29uc3Qga0dyZWF0ZXN0Q29tbW9uRGl2aXNvciA9IFN5bWJvbCgna0dyZWF0ZXN0Q29tbW9uRGl2aXNvcicpXG5jb25zdCBrQ3VycmVudFdlaWdodCA9IFN5bWJvbCgna0N1cnJlbnRXZWlnaHQnKVxuY29uc3Qga0luZGV4ID0gU3ltYm9sKCdrSW5kZXgnKVxuY29uc3Qga1dlaWdodCA9IFN5bWJvbCgna1dlaWdodCcpXG5jb25zdCBrTWF4V2VpZ2h0UGVyU2VydmVyID0gU3ltYm9sKCdrTWF4V2VpZ2h0UGVyU2VydmVyJylcbmNvbnN0IGtFcnJvclBlbmFsdHkgPSBTeW1ib2woJ2tFcnJvclBlbmFsdHknKVxuXG5mdW5jdGlvbiBnZXRHcmVhdGVzdENvbW1vbkRpdmlzb3IgKGEsIGIpIHtcbiAgaWYgKGIgPT09IDApIHJldHVybiBhXG4gIHJldHVybiBnZXRHcmVhdGVzdENvbW1vbkRpdmlzb3IoYiwgYSAlIGIpXG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRGYWN0b3J5IChvcmlnaW4sIG9wdHMpIHtcbiAgcmV0dXJuIG5ldyBQb29sKG9yaWdpbiwgb3B0cylcbn1cblxuY2xhc3MgQmFsYW5jZWRQb29sIGV4dGVuZHMgUG9vbEJhc2Uge1xuICBjb25zdHJ1Y3RvciAodXBzdHJlYW1zID0gW10sIHsgZmFjdG9yeSA9IGRlZmF1bHRGYWN0b3J5LCAuLi5vcHRzIH0gPSB7fSkge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXNba09wdGlvbnNdID0gb3B0c1xuICAgIHRoaXNba0luZGV4XSA9IC0xXG4gICAgdGhpc1trQ3VycmVudFdlaWdodF0gPSAwXG5cbiAgICB0aGlzW2tNYXhXZWlnaHRQZXJTZXJ2ZXJdID0gdGhpc1trT3B0aW9uc10ubWF4V2VpZ2h0UGVyU2VydmVyIHx8IDEwMFxuICAgIHRoaXNba0Vycm9yUGVuYWx0eV0gPSB0aGlzW2tPcHRpb25zXS5lcnJvclBlbmFsdHkgfHwgMTVcblxuICAgIGlmICghQXJyYXkuaXNBcnJheSh1cHN0cmVhbXMpKSB7XG4gICAgICB1cHN0cmVhbXMgPSBbdXBzdHJlYW1zXVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZmFjdG9yeSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdmYWN0b3J5IG11c3QgYmUgYSBmdW5jdGlvbi4nKVxuICAgIH1cblxuICAgIHRoaXNba0ludGVyY2VwdG9yc10gPSBvcHRzLmludGVyY2VwdG9ycyAmJiBvcHRzLmludGVyY2VwdG9ycy5CYWxhbmNlZFBvb2wgJiYgQXJyYXkuaXNBcnJheShvcHRzLmludGVyY2VwdG9ycy5CYWxhbmNlZFBvb2wpXG4gICAgICA/IG9wdHMuaW50ZXJjZXB0b3JzLkJhbGFuY2VkUG9vbFxuICAgICAgOiBbXVxuICAgIHRoaXNba0ZhY3RvcnldID0gZmFjdG9yeVxuXG4gICAgZm9yIChjb25zdCB1cHN0cmVhbSBvZiB1cHN0cmVhbXMpIHtcbiAgICAgIHRoaXMuYWRkVXBzdHJlYW0odXBzdHJlYW0pXG4gICAgfVxuICAgIHRoaXMuX3VwZGF0ZUJhbGFuY2VkUG9vbFN0YXRzKClcbiAgfVxuXG4gIGFkZFVwc3RyZWFtICh1cHN0cmVhbSkge1xuICAgIGNvbnN0IHVwc3RyZWFtT3JpZ2luID0gcGFyc2VPcmlnaW4odXBzdHJlYW0pLm9yaWdpblxuXG4gICAgaWYgKHRoaXNba0NsaWVudHNdLmZpbmQoKHBvb2wpID0+IChcbiAgICAgIHBvb2xba1VybF0ub3JpZ2luID09PSB1cHN0cmVhbU9yaWdpbiAmJlxuICAgICAgcG9vbC5jbG9zZWQgIT09IHRydWUgJiZcbiAgICAgIHBvb2wuZGVzdHJveWVkICE9PSB0cnVlXG4gICAgKSkpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuICAgIGNvbnN0IHBvb2wgPSB0aGlzW2tGYWN0b3J5XSh1cHN0cmVhbU9yaWdpbiwgT2JqZWN0LmFzc2lnbih7fSwgdGhpc1trT3B0aW9uc10pKVxuXG4gICAgdGhpc1trQWRkQ2xpZW50XShwb29sKVxuICAgIHBvb2wub24oJ2Nvbm5lY3QnLCAoKSA9PiB7XG4gICAgICBwb29sW2tXZWlnaHRdID0gTWF0aC5taW4odGhpc1trTWF4V2VpZ2h0UGVyU2VydmVyXSwgcG9vbFtrV2VpZ2h0XSArIHRoaXNba0Vycm9yUGVuYWx0eV0pXG4gICAgfSlcblxuICAgIHBvb2wub24oJ2Nvbm5lY3Rpb25FcnJvcicsICgpID0+IHtcbiAgICAgIHBvb2xba1dlaWdodF0gPSBNYXRoLm1heCgxLCBwb29sW2tXZWlnaHRdIC0gdGhpc1trRXJyb3JQZW5hbHR5XSlcbiAgICAgIHRoaXMuX3VwZGF0ZUJhbGFuY2VkUG9vbFN0YXRzKClcbiAgICB9KVxuXG4gICAgcG9vbC5vbignZGlzY29ubmVjdCcsICguLi5hcmdzKSA9PiB7XG4gICAgICBjb25zdCBlcnIgPSBhcmdzWzJdXG4gICAgICBpZiAoZXJyICYmIGVyci5jb2RlID09PSAnVU5EX0VSUl9TT0NLRVQnKSB7XG4gICAgICAgIC8vIGRlY3JlYXNlIHRoZSB3ZWlnaHQgb2YgdGhlIHBvb2wuXG4gICAgICAgIHBvb2xba1dlaWdodF0gPSBNYXRoLm1heCgxLCBwb29sW2tXZWlnaHRdIC0gdGhpc1trRXJyb3JQZW5hbHR5XSlcbiAgICAgICAgdGhpcy5fdXBkYXRlQmFsYW5jZWRQb29sU3RhdHMoKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBmb3IgKGNvbnN0IGNsaWVudCBvZiB0aGlzW2tDbGllbnRzXSkge1xuICAgICAgY2xpZW50W2tXZWlnaHRdID0gdGhpc1trTWF4V2VpZ2h0UGVyU2VydmVyXVxuICAgIH1cblxuICAgIHRoaXMuX3VwZGF0ZUJhbGFuY2VkUG9vbFN0YXRzKClcblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBfdXBkYXRlQmFsYW5jZWRQb29sU3RhdHMgKCkge1xuICAgIHRoaXNba0dyZWF0ZXN0Q29tbW9uRGl2aXNvcl0gPSB0aGlzW2tDbGllbnRzXS5tYXAocCA9PiBwW2tXZWlnaHRdKS5yZWR1Y2UoZ2V0R3JlYXRlc3RDb21tb25EaXZpc29yLCAwKVxuICB9XG5cbiAgcmVtb3ZlVXBzdHJlYW0gKHVwc3RyZWFtKSB7XG4gICAgY29uc3QgdXBzdHJlYW1PcmlnaW4gPSBwYXJzZU9yaWdpbih1cHN0cmVhbSkub3JpZ2luXG5cbiAgICBjb25zdCBwb29sID0gdGhpc1trQ2xpZW50c10uZmluZCgocG9vbCkgPT4gKFxuICAgICAgcG9vbFtrVXJsXS5vcmlnaW4gPT09IHVwc3RyZWFtT3JpZ2luICYmXG4gICAgICBwb29sLmNsb3NlZCAhPT0gdHJ1ZSAmJlxuICAgICAgcG9vbC5kZXN0cm95ZWQgIT09IHRydWVcbiAgICApKVxuXG4gICAgaWYgKHBvb2wpIHtcbiAgICAgIHRoaXNba1JlbW92ZUNsaWVudF0ocG9vbClcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgZ2V0IHVwc3RyZWFtcyAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0NsaWVudHNdXG4gICAgICAuZmlsdGVyKGRpc3BhdGNoZXIgPT4gZGlzcGF0Y2hlci5jbG9zZWQgIT09IHRydWUgJiYgZGlzcGF0Y2hlci5kZXN0cm95ZWQgIT09IHRydWUpXG4gICAgICAubWFwKChwKSA9PiBwW2tVcmxdLm9yaWdpbilcbiAgfVxuXG4gIFtrR2V0RGlzcGF0Y2hlcl0gKCkge1xuICAgIC8vIFdlIHZhbGlkYXRlIHRoYXQgcG9vbHMgaXMgZ3JlYXRlciB0aGFuIDAsXG4gICAgLy8gb3RoZXJ3aXNlIHdlIHdvdWxkIGhhdmUgdG8gd2FpdCB1bnRpbCBhbiB1cHN0cmVhbVxuICAgIC8vIGlzIGFkZGVkLCB3aGljaCBtaWdodCBuZXZlciBoYXBwZW4uXG4gICAgaWYgKHRoaXNba0NsaWVudHNdLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEJhbGFuY2VkUG9vbE1pc3NpbmdVcHN0cmVhbUVycm9yKClcbiAgICB9XG5cbiAgICBjb25zdCBkaXNwYXRjaGVyID0gdGhpc1trQ2xpZW50c10uZmluZChkaXNwYXRjaGVyID0+IChcbiAgICAgICFkaXNwYXRjaGVyW2tOZWVkRHJhaW5dICYmXG4gICAgICBkaXNwYXRjaGVyLmNsb3NlZCAhPT0gdHJ1ZSAmJlxuICAgICAgZGlzcGF0Y2hlci5kZXN0cm95ZWQgIT09IHRydWVcbiAgICApKVxuXG4gICAgaWYgKCFkaXNwYXRjaGVyKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBhbGxDbGllbnRzQnVzeSA9IHRoaXNba0NsaWVudHNdLm1hcChwb29sID0+IHBvb2xba05lZWREcmFpbl0pLnJlZHVjZSgoYSwgYikgPT4gYSAmJiBiLCB0cnVlKVxuXG4gICAgaWYgKGFsbENsaWVudHNCdXN5KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBsZXQgY291bnRlciA9IDBcblxuICAgIGxldCBtYXhXZWlnaHRJbmRleCA9IHRoaXNba0NsaWVudHNdLmZpbmRJbmRleChwb29sID0+ICFwb29sW2tOZWVkRHJhaW5dKVxuXG4gICAgd2hpbGUgKGNvdW50ZXIrKyA8IHRoaXNba0NsaWVudHNdLmxlbmd0aCkge1xuICAgICAgdGhpc1trSW5kZXhdID0gKHRoaXNba0luZGV4XSArIDEpICUgdGhpc1trQ2xpZW50c10ubGVuZ3RoXG4gICAgICBjb25zdCBwb29sID0gdGhpc1trQ2xpZW50c11bdGhpc1trSW5kZXhdXVxuXG4gICAgICAvLyBmaW5kIHBvb2wgaW5kZXggd2l0aCB0aGUgbGFyZ2VzdCB3ZWlnaHRcbiAgICAgIGlmIChwb29sW2tXZWlnaHRdID4gdGhpc1trQ2xpZW50c11bbWF4V2VpZ2h0SW5kZXhdW2tXZWlnaHRdICYmICFwb29sW2tOZWVkRHJhaW5dKSB7XG4gICAgICAgIG1heFdlaWdodEluZGV4ID0gdGhpc1trSW5kZXhdXG4gICAgICB9XG5cbiAgICAgIC8vIGRlY3JlYXNlIHRoZSBjdXJyZW50IHdlaWdodCBldmVyeSBgdGhpc1trQ2xpZW50c10ubGVuZ3RoYC5cbiAgICAgIGlmICh0aGlzW2tJbmRleF0gPT09IDApIHtcbiAgICAgICAgLy8gU2V0IHRoZSBjdXJyZW50IHdlaWdodCB0byB0aGUgbmV4dCBsb3dlciB3ZWlnaHQuXG4gICAgICAgIHRoaXNba0N1cnJlbnRXZWlnaHRdID0gdGhpc1trQ3VycmVudFdlaWdodF0gLSB0aGlzW2tHcmVhdGVzdENvbW1vbkRpdmlzb3JdXG5cbiAgICAgICAgaWYgKHRoaXNba0N1cnJlbnRXZWlnaHRdIDw9IDApIHtcbiAgICAgICAgICB0aGlzW2tDdXJyZW50V2VpZ2h0XSA9IHRoaXNba01heFdlaWdodFBlclNlcnZlcl1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHBvb2xba1dlaWdodF0gPj0gdGhpc1trQ3VycmVudFdlaWdodF0gJiYgKCFwb29sW2tOZWVkRHJhaW5dKSkge1xuICAgICAgICByZXR1cm4gcG9vbFxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXNba0N1cnJlbnRXZWlnaHRdID0gdGhpc1trQ2xpZW50c11bbWF4V2VpZ2h0SW5kZXhdW2tXZWlnaHRdXG4gICAgdGhpc1trSW5kZXhdID0gbWF4V2VpZ2h0SW5kZXhcbiAgICByZXR1cm4gdGhpc1trQ2xpZW50c11bbWF4V2VpZ2h0SW5kZXhdXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBCYWxhbmNlZFBvb2xcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBmaWxlOiBvbmx5IGZvciBOb2RlIDEyICovXG5cbmNvbnN0IHsga0Nvbm5lY3RlZCwga1NpemUgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5cbmNsYXNzIENvbXBhdFdlYWtSZWYge1xuICBjb25zdHJ1Y3RvciAodmFsdWUpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWVcbiAgfVxuXG4gIGRlcmVmICgpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZVtrQ29ubmVjdGVkXSA9PT0gMCAmJiB0aGlzLnZhbHVlW2tTaXplXSA9PT0gMFxuICAgICAgPyB1bmRlZmluZWRcbiAgICAgIDogdGhpcy52YWx1ZVxuICB9XG59XG5cbmNsYXNzIENvbXBhdEZpbmFsaXplciB7XG4gIGNvbnN0cnVjdG9yIChmaW5hbGl6ZXIpIHtcbiAgICB0aGlzLmZpbmFsaXplciA9IGZpbmFsaXplclxuICB9XG5cbiAgcmVnaXN0ZXIgKGRpc3BhdGNoZXIsIGtleSkge1xuICAgIGlmIChkaXNwYXRjaGVyLm9uKSB7XG4gICAgICBkaXNwYXRjaGVyLm9uKCdkaXNjb25uZWN0JywgKCkgPT4ge1xuICAgICAgICBpZiAoZGlzcGF0Y2hlcltrQ29ubmVjdGVkXSA9PT0gMCAmJiBkaXNwYXRjaGVyW2tTaXplXSA9PT0gMCkge1xuICAgICAgICAgIHRoaXMuZmluYWxpemVyKGtleSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIEZJWE1FOiByZW1vdmUgd29ya2Fyb3VuZCB3aGVuIHRoZSBOb2RlIGJ1ZyBpcyBmaXhlZFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvaXNzdWVzLzQ5MzQ0I2lzc3VlY29tbWVudC0xNzQxNzc2MzA4XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX1Y4X0NPVkVSQUdFKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFdlYWtSZWY6IENvbXBhdFdlYWtSZWYsXG4gICAgICBGaW5hbGl6YXRpb25SZWdpc3RyeTogQ29tcGF0RmluYWxpemVyXG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgV2Vha1JlZjogZ2xvYmFsLldlYWtSZWYgfHwgQ29tcGF0V2Vha1JlZixcbiAgICBGaW5hbGl6YXRpb25SZWdpc3RyeTogZ2xvYmFsLkZpbmFsaXphdGlvblJlZ2lzdHJ5IHx8IENvbXBhdEZpbmFsaXplclxuICB9XG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gPSByZXF1aXJlKCcuL2NvcmUvZXJyb3JzJylcbmNvbnN0IHsga0NsaWVudHMsIGtSdW5uaW5nLCBrQ2xvc2UsIGtEZXN0cm95LCBrRGlzcGF0Y2gsIGtJbnRlcmNlcHRvcnMgfSA9IHJlcXVpcmUoJy4vY29yZS9zeW1ib2xzJylcbmNvbnN0IERpc3BhdGNoZXJCYXNlID0gcmVxdWlyZSgnLi9kaXNwYXRjaGVyLWJhc2UnKVxuY29uc3QgUG9vbCA9IHJlcXVpcmUoJy4vcG9vbCcpXG5jb25zdCBDbGllbnQgPSByZXF1aXJlKCcuL2NsaWVudCcpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi9jb3JlL3V0aWwnKVxuY29uc3QgY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvciA9IHJlcXVpcmUoJy4vaW50ZXJjZXB0b3IvcmVkaXJlY3RJbnRlcmNlcHRvcicpXG5jb25zdCB7IFdlYWtSZWYsIEZpbmFsaXphdGlvblJlZ2lzdHJ5IH0gPSByZXF1aXJlKCcuL2NvbXBhdC9kaXNwYXRjaGVyLXdlYWtyZWYnKSgpXG5cbmNvbnN0IGtPbkNvbm5lY3QgPSBTeW1ib2woJ29uQ29ubmVjdCcpXG5jb25zdCBrT25EaXNjb25uZWN0ID0gU3ltYm9sKCdvbkRpc2Nvbm5lY3QnKVxuY29uc3Qga09uQ29ubmVjdGlvbkVycm9yID0gU3ltYm9sKCdvbkNvbm5lY3Rpb25FcnJvcicpXG5jb25zdCBrTWF4UmVkaXJlY3Rpb25zID0gU3ltYm9sKCdtYXhSZWRpcmVjdGlvbnMnKVxuY29uc3Qga09uRHJhaW4gPSBTeW1ib2woJ29uRHJhaW4nKVxuY29uc3Qga0ZhY3RvcnkgPSBTeW1ib2woJ2ZhY3RvcnknKVxuY29uc3Qga0ZpbmFsaXplciA9IFN5bWJvbCgnZmluYWxpemVyJylcbmNvbnN0IGtPcHRpb25zID0gU3ltYm9sKCdvcHRpb25zJylcblxuZnVuY3Rpb24gZGVmYXVsdEZhY3RvcnkgKG9yaWdpbiwgb3B0cykge1xuICByZXR1cm4gb3B0cyAmJiBvcHRzLmNvbm5lY3Rpb25zID09PSAxXG4gICAgPyBuZXcgQ2xpZW50KG9yaWdpbiwgb3B0cylcbiAgICA6IG5ldyBQb29sKG9yaWdpbiwgb3B0cylcbn1cblxuY2xhc3MgQWdlbnQgZXh0ZW5kcyBEaXNwYXRjaGVyQmFzZSB7XG4gIGNvbnN0cnVjdG9yICh7IGZhY3RvcnkgPSBkZWZhdWx0RmFjdG9yeSwgbWF4UmVkaXJlY3Rpb25zID0gMCwgY29ubmVjdCwgLi4ub3B0aW9ucyB9ID0ge30pIHtcbiAgICBzdXBlcigpXG5cbiAgICBpZiAodHlwZW9mIGZhY3RvcnkgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignZmFjdG9yeSBtdXN0IGJlIGEgZnVuY3Rpb24uJylcbiAgICB9XG5cbiAgICBpZiAoY29ubmVjdCAhPSBudWxsICYmIHR5cGVvZiBjb25uZWN0ICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBjb25uZWN0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdjb25uZWN0IG11c3QgYmUgYSBmdW5jdGlvbiBvciBhbiBvYmplY3QnKVxuICAgIH1cblxuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihtYXhSZWRpcmVjdGlvbnMpIHx8IG1heFJlZGlyZWN0aW9ucyA8IDApIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignbWF4UmVkaXJlY3Rpb25zIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKVxuICAgIH1cblxuICAgIGlmIChjb25uZWN0ICYmIHR5cGVvZiBjb25uZWN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25uZWN0ID0geyAuLi5jb25uZWN0IH1cbiAgICB9XG5cbiAgICB0aGlzW2tJbnRlcmNlcHRvcnNdID0gb3B0aW9ucy5pbnRlcmNlcHRvcnMgJiYgb3B0aW9ucy5pbnRlcmNlcHRvcnMuQWdlbnQgJiYgQXJyYXkuaXNBcnJheShvcHRpb25zLmludGVyY2VwdG9ycy5BZ2VudClcbiAgICAgID8gb3B0aW9ucy5pbnRlcmNlcHRvcnMuQWdlbnRcbiAgICAgIDogW2NyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3IoeyBtYXhSZWRpcmVjdGlvbnMgfSldXG5cbiAgICB0aGlzW2tPcHRpb25zXSA9IHsgLi4udXRpbC5kZWVwQ2xvbmUob3B0aW9ucyksIGNvbm5lY3QgfVxuICAgIHRoaXNba09wdGlvbnNdLmludGVyY2VwdG9ycyA9IG9wdGlvbnMuaW50ZXJjZXB0b3JzXG4gICAgICA/IHsgLi4ub3B0aW9ucy5pbnRlcmNlcHRvcnMgfVxuICAgICAgOiB1bmRlZmluZWRcbiAgICB0aGlzW2tNYXhSZWRpcmVjdGlvbnNdID0gbWF4UmVkaXJlY3Rpb25zXG4gICAgdGhpc1trRmFjdG9yeV0gPSBmYWN0b3J5XG4gICAgdGhpc1trQ2xpZW50c10gPSBuZXcgTWFwKClcbiAgICB0aGlzW2tGaW5hbGl6ZXJdID0gbmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBnYyBpcyB1bmRldGVybWluaXN0aWMgKi8ga2V5ID0+IHtcbiAgICAgIGNvbnN0IHJlZiA9IHRoaXNba0NsaWVudHNdLmdldChrZXkpXG4gICAgICBpZiAocmVmICE9PSB1bmRlZmluZWQgJiYgcmVmLmRlcmVmKCkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzW2tDbGllbnRzXS5kZWxldGUoa2V5KVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBjb25zdCBhZ2VudCA9IHRoaXNcblxuICAgIHRoaXNba09uRHJhaW5dID0gKG9yaWdpbiwgdGFyZ2V0cykgPT4ge1xuICAgICAgYWdlbnQuZW1pdCgnZHJhaW4nLCBvcmlnaW4sIFthZ2VudCwgLi4udGFyZ2V0c10pXG4gICAgfVxuXG4gICAgdGhpc1trT25Db25uZWN0XSA9IChvcmlnaW4sIHRhcmdldHMpID0+IHtcbiAgICAgIGFnZW50LmVtaXQoJ2Nvbm5lY3QnLCBvcmlnaW4sIFthZ2VudCwgLi4udGFyZ2V0c10pXG4gICAgfVxuXG4gICAgdGhpc1trT25EaXNjb25uZWN0XSA9IChvcmlnaW4sIHRhcmdldHMsIGVycikgPT4ge1xuICAgICAgYWdlbnQuZW1pdCgnZGlzY29ubmVjdCcsIG9yaWdpbiwgW2FnZW50LCAuLi50YXJnZXRzXSwgZXJyKVxuICAgIH1cblxuICAgIHRoaXNba09uQ29ubmVjdGlvbkVycm9yXSA9IChvcmlnaW4sIHRhcmdldHMsIGVycikgPT4ge1xuICAgICAgYWdlbnQuZW1pdCgnY29ubmVjdGlvbkVycm9yJywgb3JpZ2luLCBbYWdlbnQsIC4uLnRhcmdldHNdLCBlcnIpXG4gICAgfVxuICB9XG5cbiAgZ2V0IFtrUnVubmluZ10gKCkge1xuICAgIGxldCByZXQgPSAwXG4gICAgZm9yIChjb25zdCByZWYgb2YgdGhpc1trQ2xpZW50c10udmFsdWVzKCkpIHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IHJlZi5kZXJlZigpXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogZ2MgaXMgdW5kZXRlcm1pbmlzdGljICovXG4gICAgICBpZiAoY2xpZW50KSB7XG4gICAgICAgIHJldCArPSBjbGllbnRba1J1bm5pbmddXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXRcbiAgfVxuXG4gIFtrRGlzcGF0Y2hdIChvcHRzLCBoYW5kbGVyKSB7XG4gICAgbGV0IGtleVxuICAgIGlmIChvcHRzLm9yaWdpbiAmJiAodHlwZW9mIG9wdHMub3JpZ2luID09PSAnc3RyaW5nJyB8fCBvcHRzLm9yaWdpbiBpbnN0YW5jZW9mIFVSTCkpIHtcbiAgICAgIGtleSA9IFN0cmluZyhvcHRzLm9yaWdpbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdvcHRzLm9yaWdpbiBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyBvciBVUkwuJylcbiAgICB9XG5cbiAgICBjb25zdCByZWYgPSB0aGlzW2tDbGllbnRzXS5nZXQoa2V5KVxuXG4gICAgbGV0IGRpc3BhdGNoZXIgPSByZWYgPyByZWYuZGVyZWYoKSA6IG51bGxcbiAgICBpZiAoIWRpc3BhdGNoZXIpIHtcbiAgICAgIGRpc3BhdGNoZXIgPSB0aGlzW2tGYWN0b3J5XShvcHRzLm9yaWdpbiwgdGhpc1trT3B0aW9uc10pXG4gICAgICAgIC5vbignZHJhaW4nLCB0aGlzW2tPbkRyYWluXSlcbiAgICAgICAgLm9uKCdjb25uZWN0JywgdGhpc1trT25Db25uZWN0XSlcbiAgICAgICAgLm9uKCdkaXNjb25uZWN0JywgdGhpc1trT25EaXNjb25uZWN0XSlcbiAgICAgICAgLm9uKCdjb25uZWN0aW9uRXJyb3InLCB0aGlzW2tPbkNvbm5lY3Rpb25FcnJvcl0pXG5cbiAgICAgIHRoaXNba0NsaWVudHNdLnNldChrZXksIG5ldyBXZWFrUmVmKGRpc3BhdGNoZXIpKVxuICAgICAgdGhpc1trRmluYWxpemVyXS5yZWdpc3RlcihkaXNwYXRjaGVyLCBrZXkpXG4gICAgfVxuXG4gICAgcmV0dXJuIGRpc3BhdGNoZXIuZGlzcGF0Y2gob3B0cywgaGFuZGxlcilcbiAgfVxuXG4gIGFzeW5jIFtrQ2xvc2VdICgpIHtcbiAgICBjb25zdCBjbG9zZVByb21pc2VzID0gW11cbiAgICBmb3IgKGNvbnN0IHJlZiBvZiB0aGlzW2tDbGllbnRzXS52YWx1ZXMoKSkge1xuICAgICAgY29uc3QgY2xpZW50ID0gcmVmLmRlcmVmKClcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBnYyBpcyB1bmRldGVybWluaXN0aWMgKi9cbiAgICAgIGlmIChjbGllbnQpIHtcbiAgICAgICAgY2xvc2VQcm9taXNlcy5wdXNoKGNsaWVudC5jbG9zZSgpKVxuICAgICAgfVxuICAgIH1cblxuICAgIGF3YWl0IFByb21pc2UuYWxsKGNsb3NlUHJvbWlzZXMpXG4gIH1cblxuICBhc3luYyBba0Rlc3Ryb3ldIChlcnIpIHtcbiAgICBjb25zdCBkZXN0cm95UHJvbWlzZXMgPSBbXVxuICAgIGZvciAoY29uc3QgcmVmIG9mIHRoaXNba0NsaWVudHNdLnZhbHVlcygpKSB7XG4gICAgICBjb25zdCBjbGllbnQgPSByZWYuZGVyZWYoKVxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2U6IGdjIGlzIHVuZGV0ZXJtaW5pc3RpYyAqL1xuICAgICAgaWYgKGNsaWVudCkge1xuICAgICAgICBkZXN0cm95UHJvbWlzZXMucHVzaChjbGllbnQuZGVzdHJveShlcnIpKVxuICAgICAgfVxuICAgIH1cblxuICAgIGF3YWl0IFByb21pc2UuYWxsKGRlc3Ryb3lQcm9taXNlcylcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEFnZW50XG4iLAogICAgIi8vIFBvcnRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL3B1bGwvOTA3XG5cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBSZWFkYWJsZSB9ID0gcmVxdWlyZSgnc3RyZWFtJylcbmNvbnN0IHsgUmVxdWVzdEFib3J0ZWRFcnJvciwgTm90U3VwcG9ydGVkRXJyb3IsIEludmFsaWRBcmd1bWVudEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgUmVhZGFibGVTdHJlYW1Gcm9tLCB0b1VTVlN0cmluZyB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcblxubGV0IEJsb2JcblxuY29uc3Qga0NvbnN1bWUgPSBTeW1ib2woJ2tDb25zdW1lJylcbmNvbnN0IGtSZWFkaW5nID0gU3ltYm9sKCdrUmVhZGluZycpXG5jb25zdCBrQm9keSA9IFN5bWJvbCgna0JvZHknKVxuY29uc3Qga0Fib3J0ID0gU3ltYm9sKCdhYm9ydCcpXG5jb25zdCBrQ29udGVudFR5cGUgPSBTeW1ib2woJ2tDb250ZW50VHlwZScpXG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7fVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIEJvZHlSZWFkYWJsZSBleHRlbmRzIFJlYWRhYmxlIHtcbiAgY29uc3RydWN0b3IgKHtcbiAgICByZXN1bWUsXG4gICAgYWJvcnQsXG4gICAgY29udGVudFR5cGUgPSAnJyxcbiAgICBoaWdoV2F0ZXJNYXJrID0gNjQgKiAxMDI0IC8vIFNhbWUgYXMgbm9kZWpzIGZzIHN0cmVhbXMuXG4gIH0pIHtcbiAgICBzdXBlcih7XG4gICAgICBhdXRvRGVzdHJveTogdHJ1ZSxcbiAgICAgIHJlYWQ6IHJlc3VtZSxcbiAgICAgIGhpZ2hXYXRlck1hcmtcbiAgICB9KVxuXG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5kYXRhRW1pdHRlZCA9IGZhbHNlXG5cbiAgICB0aGlzW2tBYm9ydF0gPSBhYm9ydFxuICAgIHRoaXNba0NvbnN1bWVdID0gbnVsbFxuICAgIHRoaXNba0JvZHldID0gbnVsbFxuICAgIHRoaXNba0NvbnRlbnRUeXBlXSA9IGNvbnRlbnRUeXBlXG5cbiAgICAvLyBJcyBzdHJlYW0gYmVpbmcgY29uc3VtZWQgdGhyb3VnaCBSZWFkYWJsZSBBUEk/XG4gICAgLy8gVGhpcyBpcyBhbiBvcHRpbWl6YXRpb24gc28gdGhhdCB3ZSBhdm9pZCBjaGVja2luZ1xuICAgIC8vIGZvciAnZGF0YScgYW5kICdyZWFkYWJsZScgbGlzdGVuZXJzIGluIHRoZSBob3QgcGF0aFxuICAgIC8vIGluc2lkZSBwdXNoKCkuXG4gICAgdGhpc1trUmVhZGluZ10gPSBmYWxzZVxuICB9XG5cbiAgZGVzdHJveSAoZXJyKSB7XG4gICAgaWYgKHRoaXMuZGVzdHJveWVkKSB7XG4gICAgICAvLyBOb2RlIDwgMTZcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuXG4gICAgaWYgKCFlcnIgJiYgIXRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCkge1xuICAgICAgZXJyID0gbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgIH1cblxuICAgIGlmIChlcnIpIHtcbiAgICAgIHRoaXNba0Fib3J0XSgpXG4gICAgfVxuXG4gICAgcmV0dXJuIHN1cGVyLmRlc3Ryb3koZXJyKVxuICB9XG5cbiAgZW1pdCAoZXYsIC4uLmFyZ3MpIHtcbiAgICBpZiAoZXYgPT09ICdkYXRhJykge1xuICAgICAgLy8gTm9kZSA8IDE2LjdcbiAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGF0YUVtaXR0ZWQgPSB0cnVlXG4gICAgfSBlbHNlIGlmIChldiA9PT0gJ2Vycm9yJykge1xuICAgICAgLy8gTm9kZSA8IDE2XG4gICAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmVycm9yRW1pdHRlZCA9IHRydWVcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLmVtaXQoZXYsIC4uLmFyZ3MpXG4gIH1cblxuICBvbiAoZXYsIC4uLmFyZ3MpIHtcbiAgICBpZiAoZXYgPT09ICdkYXRhJyB8fCBldiA9PT0gJ3JlYWRhYmxlJykge1xuICAgICAgdGhpc1trUmVhZGluZ10gPSB0cnVlXG4gICAgfVxuICAgIHJldHVybiBzdXBlci5vbihldiwgLi4uYXJncylcbiAgfVxuXG4gIGFkZExpc3RlbmVyIChldiwgLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLm9uKGV2LCAuLi5hcmdzKVxuICB9XG5cbiAgb2ZmIChldiwgLi4uYXJncykge1xuICAgIGNvbnN0IHJldCA9IHN1cGVyLm9mZihldiwgLi4uYXJncylcbiAgICBpZiAoZXYgPT09ICdkYXRhJyB8fCBldiA9PT0gJ3JlYWRhYmxlJykge1xuICAgICAgdGhpc1trUmVhZGluZ10gPSAoXG4gICAgICAgIHRoaXMubGlzdGVuZXJDb3VudCgnZGF0YScpID4gMCB8fFxuICAgICAgICB0aGlzLmxpc3RlbmVyQ291bnQoJ3JlYWRhYmxlJykgPiAwXG4gICAgICApXG4gICAgfVxuICAgIHJldHVybiByZXRcbiAgfVxuXG4gIHJlbW92ZUxpc3RlbmVyIChldiwgLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLm9mZihldiwgLi4uYXJncylcbiAgfVxuXG4gIHB1c2ggKGNodW5rKSB7XG4gICAgaWYgKHRoaXNba0NvbnN1bWVdICYmIGNodW5rICE9PSBudWxsICYmIHRoaXMucmVhZGFibGVMZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnN1bWVQdXNoKHRoaXNba0NvbnN1bWVdLCBjaHVuaylcbiAgICAgIHJldHVybiB0aGlzW2tSZWFkaW5nXSA/IHN1cGVyLnB1c2goY2h1bmspIDogdHJ1ZVxuICAgIH1cbiAgICByZXR1cm4gc3VwZXIucHVzaChjaHVuaylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS10ZXh0XG4gIGFzeW5jIHRleHQgKCkge1xuICAgIHJldHVybiBjb25zdW1lKHRoaXMsICd0ZXh0JylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS1qc29uXG4gIGFzeW5jIGpzb24gKCkge1xuICAgIHJldHVybiBjb25zdW1lKHRoaXMsICdqc29uJylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS1ibG9iXG4gIGFzeW5jIGJsb2IgKCkge1xuICAgIHJldHVybiBjb25zdW1lKHRoaXMsICdibG9iJylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS1hcnJheWJ1ZmZlclxuICBhc3luYyBhcnJheUJ1ZmZlciAoKSB7XG4gICAgcmV0dXJuIGNvbnN1bWUodGhpcywgJ2FycmF5QnVmZmVyJylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS1mb3JtZGF0YVxuICBhc3luYyBmb3JtRGF0YSAoKSB7XG4gICAgLy8gVE9ETzogSW1wbGVtZW50LlxuICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWRFcnJvcigpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWJvZHktYm9keXVzZWRcbiAgZ2V0IGJvZHlVc2VkICgpIHtcbiAgICByZXR1cm4gdXRpbC5pc0Rpc3R1cmJlZCh0aGlzKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1ib2R5LWJvZHlcbiAgZ2V0IGJvZHkgKCkge1xuICAgIGlmICghdGhpc1trQm9keV0pIHtcbiAgICAgIHRoaXNba0JvZHldID0gUmVhZGFibGVTdHJlYW1Gcm9tKHRoaXMpXG4gICAgICBpZiAodGhpc1trQ29uc3VtZV0pIHtcbiAgICAgICAgLy8gVE9ETzogSXMgdGhpcyB0aGUgYmVzdCB3YXkgdG8gZm9yY2UgYSBsb2NrP1xuICAgICAgICB0aGlzW2tCb2R5XS5nZXRSZWFkZXIoKSAvLyBFbnN1cmUgc3RyZWFtIGlzIGxvY2tlZC5cbiAgICAgICAgYXNzZXJ0KHRoaXNba0JvZHldLmxvY2tlZClcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXNba0JvZHldXG4gIH1cblxuICBkdW1wIChvcHRzKSB7XG4gICAgbGV0IGxpbWl0ID0gb3B0cyAmJiBOdW1iZXIuaXNGaW5pdGUob3B0cy5saW1pdCkgPyBvcHRzLmxpbWl0IDogMjYyMTQ0XG4gICAgY29uc3Qgc2lnbmFsID0gb3B0cyAmJiBvcHRzLnNpZ25hbFxuXG4gICAgaWYgKHNpZ25hbCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBzaWduYWwgIT09ICdvYmplY3QnIHx8ICEoJ2Fib3J0ZWQnIGluIHNpZ25hbCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3NpZ25hbCBtdXN0IGJlIGFuIEFib3J0U2lnbmFsJylcbiAgICAgICAgfVxuICAgICAgICB1dGlsLnRocm93SWZBYm9ydGVkKHNpZ25hbClcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBzaWduYWxMaXN0ZW5lckNsZWFudXAgPSBzaWduYWxcbiAgICAgICAgPyB1dGlsLmFkZEFib3J0TGlzdGVuZXIoc2lnbmFsLCAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5kZXN0cm95KClcbiAgICAgICAgfSlcbiAgICAgICAgOiBub29wXG5cbiAgICAgIHRoaXNcbiAgICAgICAgLm9uKCdjbG9zZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBzaWduYWxMaXN0ZW5lckNsZWFudXAoKVxuICAgICAgICAgIGlmIChzaWduYWwgJiYgc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgICAgIHJlamVjdChzaWduYWwucmVhc29uIHx8IE9iamVjdC5hc3NpZ24obmV3IEVycm9yKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkJyksIHsgbmFtZTogJ0Fib3J0RXJyb3InIH0pKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNvbHZlKG51bGwpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAub24oJ2Vycm9yJywgbm9vcClcbiAgICAgICAgLm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7XG4gICAgICAgICAgbGltaXQgLT0gY2h1bmsubGVuZ3RoXG4gICAgICAgICAgaWYgKGxpbWl0IDw9IDApIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdHJveSgpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAucmVzdW1lKClcbiAgICB9KVxuICB9XG59XG5cbi8vIGh0dHBzOi8vc3RyZWFtcy5zcGVjLndoYXR3Zy5vcmcvI3JlYWRhYmxlc3RyZWFtLWxvY2tlZFxuZnVuY3Rpb24gaXNMb2NrZWQgKHNlbGYpIHtcbiAgLy8gQ29uc3VtZSBpcyBhbiBpbXBsaWNpdCBsb2NrLlxuICByZXR1cm4gKHNlbGZba0JvZHldICYmIHNlbGZba0JvZHldLmxvY2tlZCA9PT0gdHJ1ZSkgfHwgc2VsZltrQ29uc3VtZV1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2JvZHktdW51c2FibGVcbmZ1bmN0aW9uIGlzVW51c2FibGUgKHNlbGYpIHtcbiAgcmV0dXJuIHV0aWwuaXNEaXN0dXJiZWQoc2VsZikgfHwgaXNMb2NrZWQoc2VsZilcbn1cblxuYXN5bmMgZnVuY3Rpb24gY29uc3VtZSAoc3RyZWFtLCB0eXBlKSB7XG4gIGlmIChpc1VudXNhYmxlKHN0cmVhbSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd1bnVzYWJsZScpXG4gIH1cblxuICBhc3NlcnQoIXN0cmVhbVtrQ29uc3VtZV0pXG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBzdHJlYW1ba0NvbnN1bWVdID0ge1xuICAgICAgdHlwZSxcbiAgICAgIHN0cmVhbSxcbiAgICAgIHJlc29sdmUsXG4gICAgICByZWplY3QsXG4gICAgICBsZW5ndGg6IDAsXG4gICAgICBib2R5OiBbXVxuICAgIH1cblxuICAgIHN0cmVhbVxuICAgICAgLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgY29uc3VtZUZpbmlzaCh0aGlzW2tDb25zdW1lXSwgZXJyKVxuICAgICAgfSlcbiAgICAgIC5vbignY2xvc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzW2tDb25zdW1lXS5ib2R5ICE9PSBudWxsKSB7XG4gICAgICAgICAgY29uc3VtZUZpbmlzaCh0aGlzW2tDb25zdW1lXSwgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKSlcbiAgICAgICAgfVxuICAgICAgfSlcblxuICAgIHByb2Nlc3MubmV4dFRpY2soY29uc3VtZVN0YXJ0LCBzdHJlYW1ba0NvbnN1bWVdKVxuICB9KVxufVxuXG5mdW5jdGlvbiBjb25zdW1lU3RhcnQgKGNvbnN1bWUpIHtcbiAgaWYgKGNvbnN1bWUuYm9keSA9PT0gbnVsbCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgY29uc3QgeyBfcmVhZGFibGVTdGF0ZTogc3RhdGUgfSA9IGNvbnN1bWUuc3RyZWFtXG5cbiAgZm9yIChjb25zdCBjaHVuayBvZiBzdGF0ZS5idWZmZXIpIHtcbiAgICBjb25zdW1lUHVzaChjb25zdW1lLCBjaHVuaylcbiAgfVxuXG4gIGlmIChzdGF0ZS5lbmRFbWl0dGVkKSB7XG4gICAgY29uc3VtZUVuZCh0aGlzW2tDb25zdW1lXSlcbiAgfSBlbHNlIHtcbiAgICBjb25zdW1lLnN0cmVhbS5vbignZW5kJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3VtZUVuZCh0aGlzW2tDb25zdW1lXSlcbiAgICB9KVxuICB9XG5cbiAgY29uc3VtZS5zdHJlYW0ucmVzdW1lKClcblxuICB3aGlsZSAoY29uc3VtZS5zdHJlYW0ucmVhZCgpICE9IG51bGwpIHtcbiAgICAvLyBMb29wXG4gIH1cbn1cblxuZnVuY3Rpb24gY29uc3VtZUVuZCAoY29uc3VtZSkge1xuICBjb25zdCB7IHR5cGUsIGJvZHksIHJlc29sdmUsIHN0cmVhbSwgbGVuZ3RoIH0gPSBjb25zdW1lXG5cbiAgdHJ5IHtcbiAgICBpZiAodHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICByZXNvbHZlKHRvVVNWU3RyaW5nKEJ1ZmZlci5jb25jYXQoYm9keSkpKVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2pzb24nKSB7XG4gICAgICByZXNvbHZlKEpTT04ucGFyc2UoQnVmZmVyLmNvbmNhdChib2R5KSkpXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnYXJyYXlCdWZmZXInKSB7XG4gICAgICBjb25zdCBkc3QgPSBuZXcgVWludDhBcnJheShsZW5ndGgpXG5cbiAgICAgIGxldCBwb3MgPSAwXG4gICAgICBmb3IgKGNvbnN0IGJ1ZiBvZiBib2R5KSB7XG4gICAgICAgIGRzdC5zZXQoYnVmLCBwb3MpXG4gICAgICAgIHBvcyArPSBidWYuYnl0ZUxlbmd0aFxuICAgICAgfVxuXG4gICAgICByZXNvbHZlKGRzdC5idWZmZXIpXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnYmxvYicpIHtcbiAgICAgIGlmICghQmxvYikge1xuICAgICAgICBCbG9iID0gcmVxdWlyZSgnYnVmZmVyJykuQmxvYlxuICAgICAgfVxuICAgICAgcmVzb2x2ZShuZXcgQmxvYihib2R5LCB7IHR5cGU6IHN0cmVhbVtrQ29udGVudFR5cGVdIH0pKVxuICAgIH1cblxuICAgIGNvbnN1bWVGaW5pc2goY29uc3VtZSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgc3RyZWFtLmRlc3Ryb3koZXJyKVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbnN1bWVQdXNoIChjb25zdW1lLCBjaHVuaykge1xuICBjb25zdW1lLmxlbmd0aCArPSBjaHVuay5sZW5ndGhcbiAgY29uc3VtZS5ib2R5LnB1c2goY2h1bmspXG59XG5cbmZ1bmN0aW9uIGNvbnN1bWVGaW5pc2ggKGNvbnN1bWUsIGVycikge1xuICBpZiAoY29uc3VtZS5ib2R5ID09PSBudWxsKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoZXJyKSB7XG4gICAgY29uc3VtZS5yZWplY3QoZXJyKVxuICB9IGVsc2Uge1xuICAgIGNvbnN1bWUucmVzb2x2ZSgpXG4gIH1cblxuICBjb25zdW1lLnR5cGUgPSBudWxsXG4gIGNvbnN1bWUuc3RyZWFtID0gbnVsbFxuICBjb25zdW1lLnJlc29sdmUgPSBudWxsXG4gIGNvbnN1bWUucmVqZWN0ID0gbnVsbFxuICBjb25zdW1lLmxlbmd0aCA9IDBcbiAgY29uc3VtZS5ib2R5ID0gbnVsbFxufVxuIiwKICAgICJjb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3Qge1xuICBSZXNwb25zZVN0YXR1c0NvZGVFcnJvclxufSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHsgdG9VU1ZTdHJpbmcgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5cbmFzeW5jIGZ1bmN0aW9uIGdldFJlc29sdmVFcnJvckJvZHlDYWxsYmFjayAoeyBjYWxsYmFjaywgYm9keSwgY29udGVudFR5cGUsIHN0YXR1c0NvZGUsIHN0YXR1c01lc3NhZ2UsIGhlYWRlcnMgfSkge1xuICBhc3NlcnQoYm9keSlcblxuICBsZXQgY2h1bmtzID0gW11cbiAgbGV0IGxpbWl0ID0gMFxuXG4gIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgYm9keSkge1xuICAgIGNodW5rcy5wdXNoKGNodW5rKVxuICAgIGxpbWl0ICs9IGNodW5rLmxlbmd0aFxuICAgIGlmIChsaW1pdCA+IDEyOCAqIDEwMjQpIHtcbiAgICAgIGNodW5rcyA9IG51bGxcbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaWYgKHN0YXR1c0NvZGUgPT09IDIwNCB8fCAhY29udGVudFR5cGUgfHwgIWNodW5rcykge1xuICAgIHByb2Nlc3MubmV4dFRpY2soY2FsbGJhY2ssIG5ldyBSZXNwb25zZVN0YXR1c0NvZGVFcnJvcihgUmVzcG9uc2Ugc3RhdHVzIGNvZGUgJHtzdGF0dXNDb2RlfSR7c3RhdHVzTWVzc2FnZSA/IGA6ICR7c3RhdHVzTWVzc2FnZX1gIDogJyd9YCwgc3RhdHVzQ29kZSwgaGVhZGVycykpXG4gICAgcmV0dXJuXG4gIH1cblxuICB0cnkge1xuICAgIGlmIChjb250ZW50VHlwZS5zdGFydHNXaXRoKCdhcHBsaWNhdGlvbi9qc29uJykpIHtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSBKU09OLnBhcnNlKHRvVVNWU3RyaW5nKEJ1ZmZlci5jb25jYXQoY2h1bmtzKSkpXG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGNhbGxiYWNrLCBuZXcgUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IoYFJlc3BvbnNlIHN0YXR1cyBjb2RlICR7c3RhdHVzQ29kZX0ke3N0YXR1c01lc3NhZ2UgPyBgOiAke3N0YXR1c01lc3NhZ2V9YCA6ICcnfWAsIHN0YXR1c0NvZGUsIGhlYWRlcnMsIHBheWxvYWQpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGNvbnRlbnRUeXBlLnN0YXJ0c1dpdGgoJ3RleHQvJykpIHtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSB0b1VTVlN0cmluZyhCdWZmZXIuY29uY2F0KGNodW5rcykpXG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGNhbGxiYWNrLCBuZXcgUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IoYFJlc3BvbnNlIHN0YXR1cyBjb2RlICR7c3RhdHVzQ29kZX0ke3N0YXR1c01lc3NhZ2UgPyBgOiAke3N0YXR1c01lc3NhZ2V9YCA6ICcnfWAsIHN0YXR1c0NvZGUsIGhlYWRlcnMsIHBheWxvYWQpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBQcm9jZXNzIGluIGEgZmFsbGJhY2sgaWYgZXJyb3JcbiAgfVxuXG4gIHByb2Nlc3MubmV4dFRpY2soY2FsbGJhY2ssIG5ldyBSZXNwb25zZVN0YXR1c0NvZGVFcnJvcihgUmVzcG9uc2Ugc3RhdHVzIGNvZGUgJHtzdGF0dXNDb2RlfSR7c3RhdHVzTWVzc2FnZSA/IGA6ICR7c3RhdHVzTWVzc2FnZX1gIDogJyd9YCwgc3RhdHVzQ29kZSwgaGVhZGVycykpXG59XG5cbm1vZHVsZS5leHBvcnRzID0geyBnZXRSZXNvbHZlRXJyb3JCb2R5Q2FsbGJhY2sgfVxuIiwKICAgICJjb25zdCB7IGFkZEFib3J0TGlzdGVuZXIgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IFJlcXVlc3RBYm9ydGVkRXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcblxuY29uc3Qga0xpc3RlbmVyID0gU3ltYm9sKCdrTGlzdGVuZXInKVxuY29uc3Qga1NpZ25hbCA9IFN5bWJvbCgna1NpZ25hbCcpXG5cbmZ1bmN0aW9uIGFib3J0IChzZWxmKSB7XG4gIGlmIChzZWxmLmFib3J0KSB7XG4gICAgc2VsZi5hYm9ydCgpXG4gIH0gZWxzZSB7XG4gICAgc2VsZi5vbkVycm9yKG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKCkpXG4gIH1cbn1cblxuZnVuY3Rpb24gYWRkU2lnbmFsIChzZWxmLCBzaWduYWwpIHtcbiAgc2VsZltrU2lnbmFsXSA9IG51bGxcbiAgc2VsZltrTGlzdGVuZXJdID0gbnVsbFxuXG4gIGlmICghc2lnbmFsKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcbiAgICBhYm9ydChzZWxmKVxuICAgIHJldHVyblxuICB9XG5cbiAgc2VsZltrU2lnbmFsXSA9IHNpZ25hbFxuICBzZWxmW2tMaXN0ZW5lcl0gPSAoKSA9PiB7XG4gICAgYWJvcnQoc2VsZilcbiAgfVxuXG4gIGFkZEFib3J0TGlzdGVuZXIoc2VsZltrU2lnbmFsXSwgc2VsZltrTGlzdGVuZXJdKVxufVxuXG5mdW5jdGlvbiByZW1vdmVTaWduYWwgKHNlbGYpIHtcbiAgaWYgKCFzZWxmW2tTaWduYWxdKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoJ3JlbW92ZUV2ZW50TGlzdGVuZXInIGluIHNlbGZba1NpZ25hbF0pIHtcbiAgICBzZWxmW2tTaWduYWxdLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgc2VsZltrTGlzdGVuZXJdKVxuICB9IGVsc2Uge1xuICAgIHNlbGZba1NpZ25hbF0ucmVtb3ZlTGlzdGVuZXIoJ2Fib3J0Jywgc2VsZltrTGlzdGVuZXJdKVxuICB9XG5cbiAgc2VsZltrU2lnbmFsXSA9IG51bGxcbiAgc2VsZltrTGlzdGVuZXJdID0gbnVsbFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgYWRkU2lnbmFsLFxuICByZW1vdmVTaWduYWxcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFJlYWRhYmxlID0gcmVxdWlyZSgnLi9yZWFkYWJsZScpXG5jb25zdCB7XG4gIEludmFsaWRBcmd1bWVudEVycm9yLFxuICBSZXF1ZXN0QWJvcnRlZEVycm9yXG59ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGdldFJlc29sdmVFcnJvckJvZHlDYWxsYmFjayB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgQXN5bmNSZXNvdXJjZSB9ID0gcmVxdWlyZSgnYXN5bmNfaG9va3MnKVxuY29uc3QgeyBhZGRTaWduYWwsIHJlbW92ZVNpZ25hbCB9ID0gcmVxdWlyZSgnLi9hYm9ydC1zaWduYWwnKVxuXG5jbGFzcyBSZXF1ZXN0SGFuZGxlciBleHRlbmRzIEFzeW5jUmVzb3VyY2Uge1xuICBjb25zdHJ1Y3RvciAob3B0cywgY2FsbGJhY2spIHtcbiAgICBpZiAoIW9wdHMgfHwgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb3B0cycpXG4gICAgfVxuXG4gICAgY29uc3QgeyBzaWduYWwsIG1ldGhvZCwgb3BhcXVlLCBib2R5LCBvbkluZm8sIHJlc3BvbnNlSGVhZGVycywgdGhyb3dPbkVycm9yLCBoaWdoV2F0ZXJNYXJrIH0gPSBvcHRzXG5cbiAgICB0cnkge1xuICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY2FsbGJhY2snKVxuICAgICAgfVxuXG4gICAgICBpZiAoaGlnaFdhdGVyTWFyayAmJiAodHlwZW9mIGhpZ2hXYXRlck1hcmsgIT09ICdudW1iZXInIHx8IGhpZ2hXYXRlck1hcmsgPCAwKSkge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgaGlnaFdhdGVyTWFyaycpXG4gICAgICB9XG5cbiAgICAgIGlmIChzaWduYWwgJiYgdHlwZW9mIHNpZ25hbC5vbiAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2Ygc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdzaWduYWwgbXVzdCBiZSBhbiBFdmVudEVtaXR0ZXIgb3IgRXZlbnRUYXJnZXQnKVxuICAgICAgfVxuXG4gICAgICBpZiAobWV0aG9kID09PSAnQ09OTkVDVCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG1ldGhvZCcpXG4gICAgICB9XG5cbiAgICAgIGlmIChvbkluZm8gJiYgdHlwZW9mIG9uSW5mbyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25JbmZvIGNhbGxiYWNrJylcbiAgICAgIH1cblxuICAgICAgc3VwZXIoJ1VORElDSV9SRVFVRVNUJylcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICh1dGlsLmlzU3RyZWFtKGJvZHkpKSB7XG4gICAgICAgIHV0aWwuZGVzdHJveShib2R5Lm9uKCdlcnJvcicsIHV0aWwubm9wKSwgZXJyKVxuICAgICAgfVxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuXG4gICAgdGhpcy5yZXNwb25zZUhlYWRlcnMgPSByZXNwb25zZUhlYWRlcnMgfHwgbnVsbFxuICAgIHRoaXMub3BhcXVlID0gb3BhcXVlIHx8IG51bGxcbiAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2tcbiAgICB0aGlzLnJlcyA9IG51bGxcbiAgICB0aGlzLmFib3J0ID0gbnVsbFxuICAgIHRoaXMuYm9keSA9IGJvZHlcbiAgICB0aGlzLnRyYWlsZXJzID0ge31cbiAgICB0aGlzLmNvbnRleHQgPSBudWxsXG4gICAgdGhpcy5vbkluZm8gPSBvbkluZm8gfHwgbnVsbFxuICAgIHRoaXMudGhyb3dPbkVycm9yID0gdGhyb3dPbkVycm9yXG4gICAgdGhpcy5oaWdoV2F0ZXJNYXJrID0gaGlnaFdhdGVyTWFya1xuXG4gICAgaWYgKHV0aWwuaXNTdHJlYW0oYm9keSkpIHtcbiAgICAgIGJvZHkub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgICB0aGlzLm9uRXJyb3IoZXJyKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBhZGRTaWduYWwodGhpcywgc2lnbmFsKVxuICB9XG5cbiAgb25Db25uZWN0IChhYm9ydCwgY29udGV4dCkge1xuICAgIGlmICghdGhpcy5jYWxsYmFjaykge1xuICAgICAgdGhyb3cgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgIH1cblxuICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHRcbiAgfVxuXG4gIG9uSGVhZGVycyAoc3RhdHVzQ29kZSwgcmF3SGVhZGVycywgcmVzdW1lLCBzdGF0dXNNZXNzYWdlKSB7XG4gICAgY29uc3QgeyBjYWxsYmFjaywgb3BhcXVlLCBhYm9ydCwgY29udGV4dCwgcmVzcG9uc2VIZWFkZXJzLCBoaWdoV2F0ZXJNYXJrIH0gPSB0aGlzXG5cbiAgICBjb25zdCBoZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VSYXdIZWFkZXJzKHJhd0hlYWRlcnMpIDogdXRpbC5wYXJzZUhlYWRlcnMocmF3SGVhZGVycylcblxuICAgIGlmIChzdGF0dXNDb2RlIDwgMjAwKSB7XG4gICAgICBpZiAodGhpcy5vbkluZm8pIHtcbiAgICAgICAgdGhpcy5vbkluZm8oeyBzdGF0dXNDb2RlLCBoZWFkZXJzIH0pXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBwYXJzZWRIZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpIDogaGVhZGVyc1xuICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcGFyc2VkSGVhZGVyc1snY29udGVudC10eXBlJ11cbiAgICBjb25zdCBib2R5ID0gbmV3IFJlYWRhYmxlKHsgcmVzdW1lLCBhYm9ydCwgY29udGVudFR5cGUsIGhpZ2hXYXRlck1hcmsgfSlcblxuICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG4gICAgdGhpcy5yZXMgPSBib2R5XG4gICAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICBpZiAodGhpcy50aHJvd09uRXJyb3IgJiYgc3RhdHVzQ29kZSA+PSA0MDApIHtcbiAgICAgICAgdGhpcy5ydW5JbkFzeW5jU2NvcGUoZ2V0UmVzb2x2ZUVycm9yQm9keUNhbGxiYWNrLCBudWxsLFxuICAgICAgICAgIHsgY2FsbGJhY2ssIGJvZHksIGNvbnRlbnRUeXBlLCBzdGF0dXNDb2RlLCBzdGF0dXNNZXNzYWdlLCBoZWFkZXJzIH1cbiAgICAgICAgKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5ydW5JbkFzeW5jU2NvcGUoY2FsbGJhY2ssIG51bGwsIG51bGwsIHtcbiAgICAgICAgICBzdGF0dXNDb2RlLFxuICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgdHJhaWxlcnM6IHRoaXMudHJhaWxlcnMsXG4gICAgICAgICAgb3BhcXVlLFxuICAgICAgICAgIGJvZHksXG4gICAgICAgICAgY29udGV4dFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uRGF0YSAoY2h1bmspIHtcbiAgICBjb25zdCB7IHJlcyB9ID0gdGhpc1xuICAgIHJldHVybiByZXMucHVzaChjaHVuaylcbiAgfVxuXG4gIG9uQ29tcGxldGUgKHRyYWlsZXJzKSB7XG4gICAgY29uc3QgeyByZXMgfSA9IHRoaXNcblxuICAgIHJlbW92ZVNpZ25hbCh0aGlzKVxuXG4gICAgdXRpbC5wYXJzZUhlYWRlcnModHJhaWxlcnMsIHRoaXMudHJhaWxlcnMpXG5cbiAgICByZXMucHVzaChudWxsKVxuICB9XG5cbiAgb25FcnJvciAoZXJyKSB7XG4gICAgY29uc3QgeyByZXMsIGNhbGxiYWNrLCBib2R5LCBvcGFxdWUgfSA9IHRoaXNcblxuICAgIHJlbW92ZVNpZ25hbCh0aGlzKVxuXG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAvLyBUT0RPOiBEb2VzIHRoaXMgbmVlZCBxdWV1ZU1pY3JvdGFzaz9cbiAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGNhbGxiYWNrLCBudWxsLCBlcnIsIHsgb3BhcXVlIH0pXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChyZXMpIHtcbiAgICAgIHRoaXMucmVzID0gbnVsbFxuICAgICAgLy8gRW5zdXJlIGFsbCBxdWV1ZWQgaGFuZGxlcnMgYXJlIGludm9rZWQgYmVmb3JlIGRlc3Ryb3lpbmcgcmVzLlxuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICB1dGlsLmRlc3Ryb3kocmVzLCBlcnIpXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChib2R5KSB7XG4gICAgICB0aGlzLmJvZHkgPSBudWxsXG4gICAgICB1dGlsLmRlc3Ryb3koYm9keSwgZXJyKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiByZXF1ZXN0IChvcHRzLCBjYWxsYmFjaykge1xuICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICByZXF1ZXN0LmNhbGwodGhpcywgb3B0cywgKGVyciwgZGF0YSkgPT4ge1xuICAgICAgICByZXR1cm4gZXJyID8gcmVqZWN0KGVycikgOiByZXNvbHZlKGRhdGEpXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICB0cnkge1xuICAgIHRoaXMuZGlzcGF0Y2gob3B0cywgbmV3IFJlcXVlc3RIYW5kbGVyKG9wdHMsIGNhbGxiYWNrKSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICAgIGNvbnN0IG9wYXF1ZSA9IG9wdHMgJiYgb3B0cy5vcGFxdWVcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhlcnIsIHsgb3BhcXVlIH0pKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWVzdFxubW9kdWxlLmV4cG9ydHMuUmVxdWVzdEhhbmRsZXIgPSBSZXF1ZXN0SGFuZGxlclxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBmaW5pc2hlZCwgUGFzc1Rocm91Z2ggfSA9IHJlcXVpcmUoJ3N0cmVhbScpXG5jb25zdCB7XG4gIEludmFsaWRBcmd1bWVudEVycm9yLFxuICBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcixcbiAgUmVxdWVzdEFib3J0ZWRFcnJvclxufSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBnZXRSZXNvbHZlRXJyb3JCb2R5Q2FsbGJhY2sgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IEFzeW5jUmVzb3VyY2UgfSA9IHJlcXVpcmUoJ2FzeW5jX2hvb2tzJylcbmNvbnN0IHsgYWRkU2lnbmFsLCByZW1vdmVTaWduYWwgfSA9IHJlcXVpcmUoJy4vYWJvcnQtc2lnbmFsJylcblxuY2xhc3MgU3RyZWFtSGFuZGxlciBleHRlbmRzIEFzeW5jUmVzb3VyY2Uge1xuICBjb25zdHJ1Y3RvciAob3B0cywgZmFjdG9yeSwgY2FsbGJhY2spIHtcbiAgICBpZiAoIW9wdHMgfHwgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb3B0cycpXG4gICAgfVxuXG4gICAgY29uc3QgeyBzaWduYWwsIG1ldGhvZCwgb3BhcXVlLCBib2R5LCBvbkluZm8sIHJlc3BvbnNlSGVhZGVycywgdGhyb3dPbkVycm9yIH0gPSBvcHRzXG5cbiAgICB0cnkge1xuICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY2FsbGJhY2snKVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGZhY3RvcnkgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGZhY3RvcnknKVxuICAgICAgfVxuXG4gICAgICBpZiAoc2lnbmFsICYmIHR5cGVvZiBzaWduYWwub24gIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignc2lnbmFsIG11c3QgYmUgYW4gRXZlbnRFbWl0dGVyIG9yIEV2ZW50VGFyZ2V0JylcbiAgICAgIH1cblxuICAgICAgaWYgKG1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBtZXRob2QnKVxuICAgICAgfVxuXG4gICAgICBpZiAob25JbmZvICYmIHR5cGVvZiBvbkluZm8gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uSW5mbyBjYWxsYmFjaycpXG4gICAgICB9XG5cbiAgICAgIHN1cGVyKCdVTkRJQ0lfU1RSRUFNJylcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICh1dGlsLmlzU3RyZWFtKGJvZHkpKSB7XG4gICAgICAgIHV0aWwuZGVzdHJveShib2R5Lm9uKCdlcnJvcicsIHV0aWwubm9wKSwgZXJyKVxuICAgICAgfVxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuXG4gICAgdGhpcy5yZXNwb25zZUhlYWRlcnMgPSByZXNwb25zZUhlYWRlcnMgfHwgbnVsbFxuICAgIHRoaXMub3BhcXVlID0gb3BhcXVlIHx8IG51bGxcbiAgICB0aGlzLmZhY3RvcnkgPSBmYWN0b3J5XG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrXG4gICAgdGhpcy5yZXMgPSBudWxsXG4gICAgdGhpcy5hYm9ydCA9IG51bGxcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsXG4gICAgdGhpcy50cmFpbGVycyA9IG51bGxcbiAgICB0aGlzLmJvZHkgPSBib2R5XG4gICAgdGhpcy5vbkluZm8gPSBvbkluZm8gfHwgbnVsbFxuICAgIHRoaXMudGhyb3dPbkVycm9yID0gdGhyb3dPbkVycm9yIHx8IGZhbHNlXG5cbiAgICBpZiAodXRpbC5pc1N0cmVhbShib2R5KSkge1xuICAgICAgYm9keS5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMub25FcnJvcihlcnIpXG4gICAgICB9KVxuICAgIH1cblxuICAgIGFkZFNpZ25hbCh0aGlzLCBzaWduYWwpXG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0LCBjb250ZXh0KSB7XG4gICAgaWYgKCF0aGlzLmNhbGxiYWNrKSB7XG4gICAgICB0aHJvdyBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gICAgfVxuXG4gICAgdGhpcy5hYm9ydCA9IGFib3J0XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dFxuICB9XG5cbiAgb25IZWFkZXJzIChzdGF0dXNDb2RlLCByYXdIZWFkZXJzLCByZXN1bWUsIHN0YXR1c01lc3NhZ2UpIHtcbiAgICBjb25zdCB7IGZhY3RvcnksIG9wYXF1ZSwgY29udGV4dCwgY2FsbGJhY2ssIHJlc3BvbnNlSGVhZGVycyB9ID0gdGhpc1xuXG4gICAgY29uc3QgaGVhZGVycyA9IHJlc3BvbnNlSGVhZGVycyA9PT0gJ3JhdycgPyB1dGlsLnBhcnNlUmF3SGVhZGVycyhyYXdIZWFkZXJzKSA6IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpXG5cbiAgICBpZiAoc3RhdHVzQ29kZSA8IDIwMCkge1xuICAgICAgaWYgKHRoaXMub25JbmZvKSB7XG4gICAgICAgIHRoaXMub25JbmZvKHsgc3RhdHVzQ29kZSwgaGVhZGVycyB9KVxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5mYWN0b3J5ID0gbnVsbFxuXG4gICAgbGV0IHJlc1xuXG4gICAgaWYgKHRoaXMudGhyb3dPbkVycm9yICYmIHN0YXR1c0NvZGUgPj0gNDAwKSB7XG4gICAgICBjb25zdCBwYXJzZWRIZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpIDogaGVhZGVyc1xuICAgICAgY29uc3QgY29udGVudFR5cGUgPSBwYXJzZWRIZWFkZXJzWydjb250ZW50LXR5cGUnXVxuICAgICAgcmVzID0gbmV3IFBhc3NUaHJvdWdoKClcblxuICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGxcbiAgICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGdldFJlc29sdmVFcnJvckJvZHlDYWxsYmFjaywgbnVsbCxcbiAgICAgICAgeyBjYWxsYmFjaywgYm9keTogcmVzLCBjb250ZW50VHlwZSwgc3RhdHVzQ29kZSwgc3RhdHVzTWVzc2FnZSwgaGVhZGVycyB9XG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChmYWN0b3J5ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICByZXMgPSB0aGlzLnJ1bkluQXN5bmNTY29wZShmYWN0b3J5LCBudWxsLCB7XG4gICAgICAgIHN0YXR1c0NvZGUsXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIG9wYXF1ZSxcbiAgICAgICAgY29udGV4dFxuICAgICAgfSlcblxuICAgICAgaWYgKFxuICAgICAgICAhcmVzIHx8XG4gICAgICAgIHR5cGVvZiByZXMud3JpdGUgIT09ICdmdW5jdGlvbicgfHxcbiAgICAgICAgdHlwZW9mIHJlcy5lbmQgIT09ICdmdW5jdGlvbicgfHxcbiAgICAgICAgdHlwZW9mIHJlcy5vbiAhPT0gJ2Z1bmN0aW9uJ1xuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcignZXhwZWN0ZWQgV3JpdGFibGUnKVxuICAgICAgfVxuXG4gICAgICAvLyBUT0RPOiBBdm9pZCBmaW5pc2hlZC4gSXQgcmVnaXN0ZXJzIGFuIHVubmVjZXNzYXJ5IGFtb3VudCBvZiBsaXN0ZW5lcnMuXG4gICAgICBmaW5pc2hlZChyZXMsIHsgcmVhZGFibGU6IGZhbHNlIH0sIChlcnIpID0+IHtcbiAgICAgICAgY29uc3QgeyBjYWxsYmFjaywgcmVzLCBvcGFxdWUsIHRyYWlsZXJzLCBhYm9ydCB9ID0gdGhpc1xuXG4gICAgICAgIHRoaXMucmVzID0gbnVsbFxuICAgICAgICBpZiAoZXJyIHx8ICFyZXMucmVhZGFibGUpIHtcbiAgICAgICAgICB1dGlsLmRlc3Ryb3kocmVzLCBlcnIpXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNhbGxiYWNrID0gbnVsbFxuICAgICAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgZXJyIHx8IG51bGwsIHsgb3BhcXVlLCB0cmFpbGVycyB9KVxuXG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICBhYm9ydCgpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmVzLm9uKCdkcmFpbicsIHJlc3VtZSlcblxuICAgIHRoaXMucmVzID0gcmVzXG5cbiAgICBjb25zdCBuZWVkRHJhaW4gPSByZXMud3JpdGFibGVOZWVkRHJhaW4gIT09IHVuZGVmaW5lZFxuICAgICAgPyByZXMud3JpdGFibGVOZWVkRHJhaW5cbiAgICAgIDogcmVzLl93cml0YWJsZVN0YXRlICYmIHJlcy5fd3JpdGFibGVTdGF0ZS5uZWVkRHJhaW5cblxuICAgIHJldHVybiBuZWVkRHJhaW4gIT09IHRydWVcbiAgfVxuXG4gIG9uRGF0YSAoY2h1bmspIHtcbiAgICBjb25zdCB7IHJlcyB9ID0gdGhpc1xuXG4gICAgcmV0dXJuIHJlcyA/IHJlcy53cml0ZShjaHVuaykgOiB0cnVlXG4gIH1cblxuICBvbkNvbXBsZXRlICh0cmFpbGVycykge1xuICAgIGNvbnN0IHsgcmVzIH0gPSB0aGlzXG5cbiAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgIGlmICghcmVzKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLnRyYWlsZXJzID0gdXRpbC5wYXJzZUhlYWRlcnModHJhaWxlcnMpXG5cbiAgICByZXMuZW5kKClcbiAgfVxuXG4gIG9uRXJyb3IgKGVycikge1xuICAgIGNvbnN0IHsgcmVzLCBjYWxsYmFjaywgb3BhcXVlLCBib2R5IH0gPSB0aGlzXG5cbiAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgIHRoaXMuZmFjdG9yeSA9IG51bGxcblxuICAgIGlmIChyZXMpIHtcbiAgICAgIHRoaXMucmVzID0gbnVsbFxuICAgICAgdXRpbC5kZXN0cm95KHJlcywgZXJyKVxuICAgIH0gZWxzZSBpZiAoY2FsbGJhY2spIHtcbiAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGNhbGxiYWNrLCBudWxsLCBlcnIsIHsgb3BhcXVlIH0pXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChib2R5KSB7XG4gICAgICB0aGlzLmJvZHkgPSBudWxsXG4gICAgICB1dGlsLmRlc3Ryb3koYm9keSwgZXJyKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzdHJlYW0gKG9wdHMsIGZhY3RvcnksIGNhbGxiYWNrKSB7XG4gIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHN0cmVhbS5jYWxsKHRoaXMsIG9wdHMsIGZhY3RvcnksIChlcnIsIGRhdGEpID0+IHtcbiAgICAgICAgcmV0dXJuIGVyciA/IHJlamVjdChlcnIpIDogcmVzb2x2ZShkYXRhKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgdHJ5IHtcbiAgICB0aGlzLmRpc3BhdGNoKG9wdHMsIG5ldyBTdHJlYW1IYW5kbGVyKG9wdHMsIGZhY3RvcnksIGNhbGxiYWNrKSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICAgIGNvbnN0IG9wYXF1ZSA9IG9wdHMgJiYgb3B0cy5vcGFxdWVcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhlcnIsIHsgb3BhcXVlIH0pKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RyZWFtXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIFJlYWRhYmxlLFxuICBEdXBsZXgsXG4gIFBhc3NUaHJvdWdoXG59ID0gcmVxdWlyZSgnc3RyZWFtJylcbmNvbnN0IHtcbiAgSW52YWxpZEFyZ3VtZW50RXJyb3IsXG4gIEludmFsaWRSZXR1cm5WYWx1ZUVycm9yLFxuICBSZXF1ZXN0QWJvcnRlZEVycm9yXG59ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IEFzeW5jUmVzb3VyY2UgfSA9IHJlcXVpcmUoJ2FzeW5jX2hvb2tzJylcbmNvbnN0IHsgYWRkU2lnbmFsLCByZW1vdmVTaWduYWwgfSA9IHJlcXVpcmUoJy4vYWJvcnQtc2lnbmFsJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5cbmNvbnN0IGtSZXN1bWUgPSBTeW1ib2woJ3Jlc3VtZScpXG5cbmNsYXNzIFBpcGVsaW5lUmVxdWVzdCBleHRlbmRzIFJlYWRhYmxlIHtcbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHN1cGVyKHsgYXV0b0Rlc3Ryb3k6IHRydWUgfSlcblxuICAgIHRoaXNba1Jlc3VtZV0gPSBudWxsXG4gIH1cblxuICBfcmVhZCAoKSB7XG4gICAgY29uc3QgeyBba1Jlc3VtZV06IHJlc3VtZSB9ID0gdGhpc1xuXG4gICAgaWYgKHJlc3VtZSkge1xuICAgICAgdGhpc1trUmVzdW1lXSA9IG51bGxcbiAgICAgIHJlc3VtZSgpXG4gICAgfVxuICB9XG5cbiAgX2Rlc3Ryb3kgKGVyciwgY2FsbGJhY2spIHtcbiAgICB0aGlzLl9yZWFkKClcblxuICAgIGNhbGxiYWNrKGVycilcbiAgfVxufVxuXG5jbGFzcyBQaXBlbGluZVJlc3BvbnNlIGV4dGVuZHMgUmVhZGFibGUge1xuICBjb25zdHJ1Y3RvciAocmVzdW1lKSB7XG4gICAgc3VwZXIoeyBhdXRvRGVzdHJveTogdHJ1ZSB9KVxuICAgIHRoaXNba1Jlc3VtZV0gPSByZXN1bWVcbiAgfVxuXG4gIF9yZWFkICgpIHtcbiAgICB0aGlzW2tSZXN1bWVdKClcbiAgfVxuXG4gIF9kZXN0cm95IChlcnIsIGNhbGxiYWNrKSB7XG4gICAgaWYgKCFlcnIgJiYgIXRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCkge1xuICAgICAgZXJyID0gbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgIH1cblxuICAgIGNhbGxiYWNrKGVycilcbiAgfVxufVxuXG5jbGFzcyBQaXBlbGluZUhhbmRsZXIgZXh0ZW5kcyBBc3luY1Jlc291cmNlIHtcbiAgY29uc3RydWN0b3IgKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBpZiAoIW9wdHMgfHwgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb3B0cycpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBoYW5kbGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgaGFuZGxlcicpXG4gICAgfVxuXG4gICAgY29uc3QgeyBzaWduYWwsIG1ldGhvZCwgb3BhcXVlLCBvbkluZm8sIHJlc3BvbnNlSGVhZGVycyB9ID0gb3B0c1xuXG4gICAgaWYgKHNpZ25hbCAmJiB0eXBlb2Ygc2lnbmFsLm9uICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdzaWduYWwgbXVzdCBiZSBhbiBFdmVudEVtaXR0ZXIgb3IgRXZlbnRUYXJnZXQnKVxuICAgIH1cblxuICAgIGlmIChtZXRob2QgPT09ICdDT05ORUNUJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG1ldGhvZCcpXG4gICAgfVxuXG4gICAgaWYgKG9uSW5mbyAmJiB0eXBlb2Ygb25JbmZvICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25JbmZvIGNhbGxiYWNrJylcbiAgICB9XG5cbiAgICBzdXBlcignVU5ESUNJX1BJUEVMSU5FJylcblxuICAgIHRoaXMub3BhcXVlID0gb3BhcXVlIHx8IG51bGxcbiAgICB0aGlzLnJlc3BvbnNlSGVhZGVycyA9IHJlc3BvbnNlSGVhZGVycyB8fCBudWxsXG4gICAgdGhpcy5oYW5kbGVyID0gaGFuZGxlclxuICAgIHRoaXMuYWJvcnQgPSBudWxsXG4gICAgdGhpcy5jb250ZXh0ID0gbnVsbFxuICAgIHRoaXMub25JbmZvID0gb25JbmZvIHx8IG51bGxcblxuICAgIHRoaXMucmVxID0gbmV3IFBpcGVsaW5lUmVxdWVzdCgpLm9uKCdlcnJvcicsIHV0aWwubm9wKVxuXG4gICAgdGhpcy5yZXQgPSBuZXcgRHVwbGV4KHtcbiAgICAgIHJlYWRhYmxlT2JqZWN0TW9kZTogb3B0cy5vYmplY3RNb2RlLFxuICAgICAgYXV0b0Rlc3Ryb3k6IHRydWUsXG4gICAgICByZWFkOiAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgYm9keSB9ID0gdGhpc1xuXG4gICAgICAgIGlmIChib2R5ICYmIGJvZHkucmVzdW1lKSB7XG4gICAgICAgICAgYm9keS5yZXN1bWUoKVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgd3JpdGU6IChjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcmVxIH0gPSB0aGlzXG5cbiAgICAgICAgaWYgKHJlcS5wdXNoKGNodW5rLCBlbmNvZGluZykgfHwgcmVxLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCkge1xuICAgICAgICAgIGNhbGxiYWNrKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXFba1Jlc3VtZV0gPSBjYWxsYmFja1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZGVzdHJveTogKGVyciwgY2FsbGJhY2spID0+IHtcbiAgICAgICAgY29uc3QgeyBib2R5LCByZXEsIHJlcywgcmV0LCBhYm9ydCB9ID0gdGhpc1xuXG4gICAgICAgIGlmICghZXJyICYmICFyZXQuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCkge1xuICAgICAgICAgIGVyciA9IG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKClcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhYm9ydCAmJiBlcnIpIHtcbiAgICAgICAgICBhYm9ydCgpXG4gICAgICAgIH1cblxuICAgICAgICB1dGlsLmRlc3Ryb3koYm9keSwgZXJyKVxuICAgICAgICB1dGlsLmRlc3Ryb3kocmVxLCBlcnIpXG4gICAgICAgIHV0aWwuZGVzdHJveShyZXMsIGVycilcblxuICAgICAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgICAgICBjYWxsYmFjayhlcnIpXG4gICAgICB9XG4gICAgfSkub24oJ3ByZWZpbmlzaCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgcmVxIH0gPSB0aGlzXG5cbiAgICAgIC8vIE5vZGUgPCAxNSBkb2VzIG5vdCBjYWxsIF9maW5hbCBpbiBzYW1lIHRpY2suXG4gICAgICByZXEucHVzaChudWxsKVxuICAgIH0pXG5cbiAgICB0aGlzLnJlcyA9IG51bGxcblxuICAgIGFkZFNpZ25hbCh0aGlzLCBzaWduYWwpXG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0LCBjb250ZXh0KSB7XG4gICAgY29uc3QgeyByZXQsIHJlcyB9ID0gdGhpc1xuXG4gICAgYXNzZXJ0KCFyZXMsICdwaXBlbGluZSBjYW5ub3QgYmUgcmV0cmllZCcpXG5cbiAgICBpZiAocmV0LmRlc3Ryb3llZCkge1xuICAgICAgdGhyb3cgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgIH1cblxuICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHRcbiAgfVxuXG4gIG9uSGVhZGVycyAoc3RhdHVzQ29kZSwgcmF3SGVhZGVycywgcmVzdW1lKSB7XG4gICAgY29uc3QgeyBvcGFxdWUsIGhhbmRsZXIsIGNvbnRleHQgfSA9IHRoaXNcblxuICAgIGlmIChzdGF0dXNDb2RlIDwgMjAwKSB7XG4gICAgICBpZiAodGhpcy5vbkluZm8pIHtcbiAgICAgICAgY29uc3QgaGVhZGVycyA9IHRoaXMucmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VSYXdIZWFkZXJzKHJhd0hlYWRlcnMpIDogdXRpbC5wYXJzZUhlYWRlcnMocmF3SGVhZGVycylcbiAgICAgICAgdGhpcy5vbkluZm8oeyBzdGF0dXNDb2RlLCBoZWFkZXJzIH0pXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLnJlcyA9IG5ldyBQaXBlbGluZVJlc3BvbnNlKHJlc3VtZSlcblxuICAgIGxldCBib2R5XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuaGFuZGxlciA9IG51bGxcbiAgICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLnJlc3BvbnNlSGVhZGVycyA9PT0gJ3JhdycgPyB1dGlsLnBhcnNlUmF3SGVhZGVycyhyYXdIZWFkZXJzKSA6IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpXG4gICAgICBib2R5ID0gdGhpcy5ydW5JbkFzeW5jU2NvcGUoaGFuZGxlciwgbnVsbCwge1xuICAgICAgICBzdGF0dXNDb2RlLFxuICAgICAgICBoZWFkZXJzLFxuICAgICAgICBvcGFxdWUsXG4gICAgICAgIGJvZHk6IHRoaXMucmVzLFxuICAgICAgICBjb250ZXh0XG4gICAgICB9KVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5yZXMub24oJ2Vycm9yJywgdXRpbC5ub3ApXG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG5cbiAgICBpZiAoIWJvZHkgfHwgdHlwZW9mIGJvZHkub24gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcignZXhwZWN0ZWQgUmVhZGFibGUnKVxuICAgIH1cblxuICAgIGJvZHlcbiAgICAgIC5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgICAgICBjb25zdCB7IHJldCwgYm9keSB9ID0gdGhpc1xuXG4gICAgICAgIGlmICghcmV0LnB1c2goY2h1bmspICYmIGJvZHkucGF1c2UpIHtcbiAgICAgICAgICBib2R5LnBhdXNlKClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcmV0IH0gPSB0aGlzXG5cbiAgICAgICAgdXRpbC5kZXN0cm95KHJldCwgZXJyKVxuICAgICAgfSlcbiAgICAgIC5vbignZW5kJywgKCkgPT4ge1xuICAgICAgICBjb25zdCB7IHJldCB9ID0gdGhpc1xuXG4gICAgICAgIHJldC5wdXNoKG51bGwpXG4gICAgICB9KVxuICAgICAgLm9uKCdjbG9zZScsICgpID0+IHtcbiAgICAgICAgY29uc3QgeyByZXQgfSA9IHRoaXNcblxuICAgICAgICBpZiAoIXJldC5fcmVhZGFibGVTdGF0ZS5lbmRlZCkge1xuICAgICAgICAgIHV0aWwuZGVzdHJveShyZXQsIG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKCkpXG4gICAgICAgIH1cbiAgICAgIH0pXG5cbiAgICB0aGlzLmJvZHkgPSBib2R5XG4gIH1cblxuICBvbkRhdGEgKGNodW5rKSB7XG4gICAgY29uc3QgeyByZXMgfSA9IHRoaXNcbiAgICByZXR1cm4gcmVzLnB1c2goY2h1bmspXG4gIH1cblxuICBvbkNvbXBsZXRlICh0cmFpbGVycykge1xuICAgIGNvbnN0IHsgcmVzIH0gPSB0aGlzXG4gICAgcmVzLnB1c2gobnVsbClcbiAgfVxuXG4gIG9uRXJyb3IgKGVycikge1xuICAgIGNvbnN0IHsgcmV0IH0gPSB0aGlzXG4gICAgdGhpcy5oYW5kbGVyID0gbnVsbFxuICAgIHV0aWwuZGVzdHJveShyZXQsIGVycilcbiAgfVxufVxuXG5mdW5jdGlvbiBwaXBlbGluZSAob3B0cywgaGFuZGxlcikge1xuICB0cnkge1xuICAgIGNvbnN0IHBpcGVsaW5lSGFuZGxlciA9IG5ldyBQaXBlbGluZUhhbmRsZXIob3B0cywgaGFuZGxlcilcbiAgICB0aGlzLmRpc3BhdGNoKHsgLi4ub3B0cywgYm9keTogcGlwZWxpbmVIYW5kbGVyLnJlcSB9LCBwaXBlbGluZUhhbmRsZXIpXG4gICAgcmV0dXJuIHBpcGVsaW5lSGFuZGxlci5yZXRcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIG5ldyBQYXNzVGhyb3VnaCgpLmRlc3Ryb3koZXJyKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGlwZWxpbmVcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IsIFJlcXVlc3RBYm9ydGVkRXJyb3IsIFNvY2tldEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB7IEFzeW5jUmVzb3VyY2UgfSA9IHJlcXVpcmUoJ2FzeW5jX2hvb2tzJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBhZGRTaWduYWwsIHJlbW92ZVNpZ25hbCB9ID0gcmVxdWlyZSgnLi9hYm9ydC1zaWduYWwnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcblxuY2xhc3MgVXBncmFkZUhhbmRsZXIgZXh0ZW5kcyBBc3luY1Jlc291cmNlIHtcbiAgY29uc3RydWN0b3IgKG9wdHMsIGNhbGxiYWNrKSB7XG4gICAgaWYgKCFvcHRzIHx8IHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9wdHMnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjYWxsYmFjaycpXG4gICAgfVxuXG4gICAgY29uc3QgeyBzaWduYWwsIG9wYXF1ZSwgcmVzcG9uc2VIZWFkZXJzIH0gPSBvcHRzXG5cbiAgICBpZiAoc2lnbmFsICYmIHR5cGVvZiBzaWduYWwub24gIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3NpZ25hbCBtdXN0IGJlIGFuIEV2ZW50RW1pdHRlciBvciBFdmVudFRhcmdldCcpXG4gICAgfVxuXG4gICAgc3VwZXIoJ1VORElDSV9VUEdSQURFJylcblxuICAgIHRoaXMucmVzcG9uc2VIZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzIHx8IG51bGxcbiAgICB0aGlzLm9wYXF1ZSA9IG9wYXF1ZSB8fCBudWxsXG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrXG4gICAgdGhpcy5hYm9ydCA9IG51bGxcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsXG5cbiAgICBhZGRTaWduYWwodGhpcywgc2lnbmFsKVxuICB9XG5cbiAgb25Db25uZWN0IChhYm9ydCwgY29udGV4dCkge1xuICAgIGlmICghdGhpcy5jYWxsYmFjaykge1xuICAgICAgdGhyb3cgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgIH1cblxuICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIHRoaXMuY29udGV4dCA9IG51bGxcbiAgfVxuXG4gIG9uSGVhZGVycyAoKSB7XG4gICAgdGhyb3cgbmV3IFNvY2tldEVycm9yKCdiYWQgdXBncmFkZScsIG51bGwpXG4gIH1cblxuICBvblVwZ3JhZGUgKHN0YXR1c0NvZGUsIHJhd0hlYWRlcnMsIHNvY2tldCkge1xuICAgIGNvbnN0IHsgY2FsbGJhY2ssIG9wYXF1ZSwgY29udGV4dCB9ID0gdGhpc1xuXG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHN0YXR1c0NvZGUsIDEwMSlcblxuICAgIHJlbW92ZVNpZ25hbCh0aGlzKVxuXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGxcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5yZXNwb25zZUhlYWRlcnMgPT09ICdyYXcnID8gdXRpbC5wYXJzZVJhd0hlYWRlcnMocmF3SGVhZGVycykgOiB1dGlsLnBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKVxuICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGNhbGxiYWNrLCBudWxsLCBudWxsLCB7XG4gICAgICBoZWFkZXJzLFxuICAgICAgc29ja2V0LFxuICAgICAgb3BhcXVlLFxuICAgICAgY29udGV4dFxuICAgIH0pXG4gIH1cblxuICBvbkVycm9yIChlcnIpIHtcbiAgICBjb25zdCB7IGNhbGxiYWNrLCBvcGFxdWUgfSA9IHRoaXNcblxuICAgIHJlbW92ZVNpZ25hbCh0aGlzKVxuXG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICB0aGlzLmNhbGxiYWNrID0gbnVsbFxuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgZXJyLCB7IG9wYXF1ZSB9KVxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdXBncmFkZSAob3B0cywgY2FsbGJhY2spIHtcbiAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdXBncmFkZS5jYWxsKHRoaXMsIG9wdHMsIChlcnIsIGRhdGEpID0+IHtcbiAgICAgICAgcmV0dXJuIGVyciA/IHJlamVjdChlcnIpIDogcmVzb2x2ZShkYXRhKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB1cGdyYWRlSGFuZGxlciA9IG5ldyBVcGdyYWRlSGFuZGxlcihvcHRzLCBjYWxsYmFjaylcbiAgICB0aGlzLmRpc3BhdGNoKHtcbiAgICAgIC4uLm9wdHMsXG4gICAgICBtZXRob2Q6IG9wdHMubWV0aG9kIHx8ICdHRVQnLFxuICAgICAgdXBncmFkZTogb3B0cy5wcm90b2NvbCB8fCAnV2Vic29ja2V0J1xuICAgIH0sIHVwZ3JhZGVIYW5kbGVyKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gICAgY29uc3Qgb3BhcXVlID0gb3B0cyAmJiBvcHRzLm9wYXF1ZVxuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGNhbGxiYWNrKGVyciwgeyBvcGFxdWUgfSkpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB1cGdyYWRlXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IEFzeW5jUmVzb3VyY2UgfSA9IHJlcXVpcmUoJ2FzeW5jX2hvb2tzJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IsIFJlcXVlc3RBYm9ydGVkRXJyb3IsIFNvY2tldEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgYWRkU2lnbmFsLCByZW1vdmVTaWduYWwgfSA9IHJlcXVpcmUoJy4vYWJvcnQtc2lnbmFsJylcblxuY2xhc3MgQ29ubmVjdEhhbmRsZXIgZXh0ZW5kcyBBc3luY1Jlc291cmNlIHtcbiAgY29uc3RydWN0b3IgKG9wdHMsIGNhbGxiYWNrKSB7XG4gICAgaWYgKCFvcHRzIHx8IHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9wdHMnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjYWxsYmFjaycpXG4gICAgfVxuXG4gICAgY29uc3QgeyBzaWduYWwsIG9wYXF1ZSwgcmVzcG9uc2VIZWFkZXJzIH0gPSBvcHRzXG5cbiAgICBpZiAoc2lnbmFsICYmIHR5cGVvZiBzaWduYWwub24gIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3NpZ25hbCBtdXN0IGJlIGFuIEV2ZW50RW1pdHRlciBvciBFdmVudFRhcmdldCcpXG4gICAgfVxuXG4gICAgc3VwZXIoJ1VORElDSV9DT05ORUNUJylcblxuICAgIHRoaXMub3BhcXVlID0gb3BhcXVlIHx8IG51bGxcbiAgICB0aGlzLnJlc3BvbnNlSGVhZGVycyA9IHJlc3BvbnNlSGVhZGVycyB8fCBudWxsXG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrXG4gICAgdGhpcy5hYm9ydCA9IG51bGxcblxuICAgIGFkZFNpZ25hbCh0aGlzLCBzaWduYWwpXG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0LCBjb250ZXh0KSB7XG4gICAgaWYgKCF0aGlzLmNhbGxiYWNrKSB7XG4gICAgICB0aHJvdyBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gICAgfVxuXG4gICAgdGhpcy5hYm9ydCA9IGFib3J0XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dFxuICB9XG5cbiAgb25IZWFkZXJzICgpIHtcbiAgICB0aHJvdyBuZXcgU29ja2V0RXJyb3IoJ2JhZCBjb25uZWN0JywgbnVsbClcbiAgfVxuXG4gIG9uVXBncmFkZSAoc3RhdHVzQ29kZSwgcmF3SGVhZGVycywgc29ja2V0KSB7XG4gICAgY29uc3QgeyBjYWxsYmFjaywgb3BhcXVlLCBjb250ZXh0IH0gPSB0aGlzXG5cbiAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG5cbiAgICBsZXQgaGVhZGVycyA9IHJhd0hlYWRlcnNcbiAgICAvLyBJbmRpY2F0ZXMgaXMgYW4gSFRUUDJTZXNzaW9uXG4gICAgaWYgKGhlYWRlcnMgIT0gbnVsbCkge1xuICAgICAgaGVhZGVycyA9IHRoaXMucmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VSYXdIZWFkZXJzKHJhd0hlYWRlcnMpIDogdXRpbC5wYXJzZUhlYWRlcnMocmF3SGVhZGVycylcbiAgICB9XG5cbiAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgbnVsbCwge1xuICAgICAgc3RhdHVzQ29kZSxcbiAgICAgIGhlYWRlcnMsXG4gICAgICBzb2NrZXQsXG4gICAgICBvcGFxdWUsXG4gICAgICBjb250ZXh0XG4gICAgfSlcbiAgfVxuXG4gIG9uRXJyb3IgKGVycikge1xuICAgIGNvbnN0IHsgY2FsbGJhY2ssIG9wYXF1ZSB9ID0gdGhpc1xuXG4gICAgcmVtb3ZlU2lnbmFsKHRoaXMpXG5cbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGNhbGxiYWNrLCBudWxsLCBlcnIsIHsgb3BhcXVlIH0pXG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb25uZWN0IChvcHRzLCBjYWxsYmFjaykge1xuICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25uZWN0LmNhbGwodGhpcywgb3B0cywgKGVyciwgZGF0YSkgPT4ge1xuICAgICAgICByZXR1cm4gZXJyID8gcmVqZWN0KGVycikgOiByZXNvbHZlKGRhdGEpXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IGNvbm5lY3RIYW5kbGVyID0gbmV3IENvbm5lY3RIYW5kbGVyKG9wdHMsIGNhbGxiYWNrKVxuICAgIHRoaXMuZGlzcGF0Y2goeyAuLi5vcHRzLCBtZXRob2Q6ICdDT05ORUNUJyB9LCBjb25uZWN0SGFuZGxlcilcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICAgIGNvbnN0IG9wYXF1ZSA9IG9wdHMgJiYgb3B0cy5vcGFxdWVcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhlcnIsIHsgb3BhcXVlIH0pKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29ubmVjdFxuIiwKICAgICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMucmVxdWVzdCA9IHJlcXVpcmUoJy4vYXBpLXJlcXVlc3QnKVxubW9kdWxlLmV4cG9ydHMuc3RyZWFtID0gcmVxdWlyZSgnLi9hcGktc3RyZWFtJylcbm1vZHVsZS5leHBvcnRzLnBpcGVsaW5lID0gcmVxdWlyZSgnLi9hcGktcGlwZWxpbmUnKVxubW9kdWxlLmV4cG9ydHMudXBncmFkZSA9IHJlcXVpcmUoJy4vYXBpLXVwZ3JhZGUnKVxubW9kdWxlLmV4cG9ydHMuY29ubmVjdCA9IHJlcXVpcmUoJy4vYXBpLWNvbm5lY3QnKVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBVbmRpY2lFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuXG5jbGFzcyBNb2NrTm90TWF0Y2hlZEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgTW9ja05vdE1hdGNoZWRFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnTW9ja05vdE1hdGNoZWRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdUaGUgcmVxdWVzdCBkb2VzIG5vdCBtYXRjaCBhbnkgcmVnaXN0ZXJlZCBtb2NrIGRpc3BhdGNoZXMnXG4gICAgdGhpcy5jb2RlID0gJ1VORF9NT0NLX0VSUl9NT0NLX05PVF9NQVRDSEVEJ1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBNb2NrTm90TWF0Y2hlZEVycm9yXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAga0FnZW50OiBTeW1ib2woJ2FnZW50JyksXG4gIGtPcHRpb25zOiBTeW1ib2woJ29wdGlvbnMnKSxcbiAga0ZhY3Rvcnk6IFN5bWJvbCgnZmFjdG9yeScpLFxuICBrRGlzcGF0Y2hlczogU3ltYm9sKCdkaXNwYXRjaGVzJyksXG4gIGtEaXNwYXRjaEtleTogU3ltYm9sKCdkaXNwYXRjaCBrZXknKSxcbiAga0RlZmF1bHRIZWFkZXJzOiBTeW1ib2woJ2RlZmF1bHQgaGVhZGVycycpLFxuICBrRGVmYXVsdFRyYWlsZXJzOiBTeW1ib2woJ2RlZmF1bHQgdHJhaWxlcnMnKSxcbiAga0NvbnRlbnRMZW5ndGg6IFN5bWJvbCgnY29udGVudCBsZW5ndGgnKSxcbiAga01vY2tBZ2VudDogU3ltYm9sKCdtb2NrIGFnZW50JyksXG4gIGtNb2NrQWdlbnRTZXQ6IFN5bWJvbCgnbW9jayBhZ2VudCBzZXQnKSxcbiAga01vY2tBZ2VudEdldDogU3ltYm9sKCdtb2NrIGFnZW50IGdldCcpLFxuICBrTW9ja0Rpc3BhdGNoOiBTeW1ib2woJ21vY2sgZGlzcGF0Y2gnKSxcbiAga0Nsb3NlOiBTeW1ib2woJ2Nsb3NlJyksXG4gIGtPcmlnaW5hbENsb3NlOiBTeW1ib2woJ29yaWdpbmFsIGFnZW50IGNsb3NlJyksXG4gIGtPcmlnaW46IFN5bWJvbCgnb3JpZ2luJyksXG4gIGtJc01vY2tBY3RpdmU6IFN5bWJvbCgnaXMgbW9jayBhY3RpdmUnKSxcbiAga05ldENvbm5lY3Q6IFN5bWJvbCgnbmV0IGNvbm5lY3QnKSxcbiAga0dldE5ldENvbm5lY3Q6IFN5bWJvbCgnZ2V0IG5ldCBjb25uZWN0JyksXG4gIGtDb25uZWN0ZWQ6IFN5bWJvbCgnY29ubmVjdGVkJylcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgTW9ja05vdE1hdGNoZWRFcnJvciB9ID0gcmVxdWlyZSgnLi9tb2NrLWVycm9ycycpXG5jb25zdCB7XG4gIGtEaXNwYXRjaGVzLFxuICBrTW9ja0FnZW50LFxuICBrT3JpZ2luYWxEaXNwYXRjaCxcbiAga09yaWdpbixcbiAga0dldE5ldENvbm5lY3Rcbn0gPSByZXF1aXJlKCcuL21vY2stc3ltYm9scycpXG5jb25zdCB7IGJ1aWxkVVJMLCBub3AgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IFNUQVRVU19DT0RFUyB9ID0gcmVxdWlyZSgnaHR0cCcpXG5jb25zdCB7XG4gIHR5cGVzOiB7XG4gICAgaXNQcm9taXNlXG4gIH1cbn0gPSByZXF1aXJlKCd1dGlsJylcblxuZnVuY3Rpb24gbWF0Y2hWYWx1ZSAobWF0Y2gsIHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgbWF0Y2ggPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIG1hdGNoID09PSB2YWx1ZVxuICB9XG4gIGlmIChtYXRjaCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgIHJldHVybiBtYXRjaC50ZXN0KHZhbHVlKVxuICB9XG4gIGlmICh0eXBlb2YgbWF0Y2ggPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gbWF0Y2godmFsdWUpID09PSB0cnVlXG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmZ1bmN0aW9uIGxvd2VyQ2FzZUVudHJpZXMgKGhlYWRlcnMpIHtcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhoZWFkZXJzKS5tYXAoKFtoZWFkZXJOYW1lLCBoZWFkZXJWYWx1ZV0pID0+IHtcbiAgICAgIHJldHVybiBbaGVhZGVyTmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpLCBoZWFkZXJWYWx1ZV1cbiAgICB9KVxuICApXG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4uLy4uL2luZGV4JykuSGVhZGVyc3xzdHJpbmdbXXxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSBoZWFkZXJzXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKi9cbmZ1bmN0aW9uIGdldEhlYWRlckJ5TmFtZSAoaGVhZGVycywga2V5KSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICBpZiAoaGVhZGVyc1tpXS50b0xvY2FsZUxvd2VyQ2FzZSgpID09PSBrZXkudG9Mb2NhbGVMb3dlckNhc2UoKSkge1xuICAgICAgICByZXR1cm4gaGVhZGVyc1tpICsgMV1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH0gZWxzZSBpZiAodHlwZW9mIGhlYWRlcnMuZ2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGhlYWRlcnMuZ2V0KGtleSlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbG93ZXJDYXNlRW50cmllcyhoZWFkZXJzKVtrZXkudG9Mb2NhbGVMb3dlckNhc2UoKV1cbiAgfVxufVxuXG4vKiogQHBhcmFtIHtzdHJpbmdbXX0gaGVhZGVycyAqL1xuZnVuY3Rpb24gYnVpbGRIZWFkZXJzRnJvbUFycmF5IChoZWFkZXJzKSB7IC8vIGZldGNoIEhlYWRlcnNMaXN0XG4gIGNvbnN0IGNsb25lID0gaGVhZGVycy5zbGljZSgpXG4gIGNvbnN0IGVudHJpZXMgPSBbXVxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgY2xvbmUubGVuZ3RoOyBpbmRleCArPSAyKSB7XG4gICAgZW50cmllcy5wdXNoKFtjbG9uZVtpbmRleF0sIGNsb25lW2luZGV4ICsgMV1dKVxuICB9XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoZW50cmllcylcbn1cblxuZnVuY3Rpb24gbWF0Y2hIZWFkZXJzIChtb2NrRGlzcGF0Y2gsIGhlYWRlcnMpIHtcbiAgaWYgKHR5cGVvZiBtb2NrRGlzcGF0Y2guaGVhZGVycyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7IC8vIGZldGNoIEhlYWRlcnNMaXN0XG4gICAgICBoZWFkZXJzID0gYnVpbGRIZWFkZXJzRnJvbUFycmF5KGhlYWRlcnMpXG4gICAgfVxuICAgIHJldHVybiBtb2NrRGlzcGF0Y2guaGVhZGVycyhoZWFkZXJzID8gbG93ZXJDYXNlRW50cmllcyhoZWFkZXJzKSA6IHt9KVxuICB9XG4gIGlmICh0eXBlb2YgbW9ja0Rpc3BhdGNoLmhlYWRlcnMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICBpZiAodHlwZW9mIGhlYWRlcnMgIT09ICdvYmplY3QnIHx8IHR5cGVvZiBtb2NrRGlzcGF0Y2guaGVhZGVycyAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGZvciAoY29uc3QgW21hdGNoSGVhZGVyTmFtZSwgbWF0Y2hIZWFkZXJWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMobW9ja0Rpc3BhdGNoLmhlYWRlcnMpKSB7XG4gICAgY29uc3QgaGVhZGVyVmFsdWUgPSBnZXRIZWFkZXJCeU5hbWUoaGVhZGVycywgbWF0Y2hIZWFkZXJOYW1lKVxuXG4gICAgaWYgKCFtYXRjaFZhbHVlKG1hdGNoSGVhZGVyVmFsdWUsIGhlYWRlclZhbHVlKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlXG59XG5cbmZ1bmN0aW9uIHNhZmVVcmwgKHBhdGgpIHtcbiAgaWYgKHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBwYXRoXG4gIH1cblxuICBjb25zdCBwYXRoU2VnbWVudHMgPSBwYXRoLnNwbGl0KCc/JylcblxuICBpZiAocGF0aFNlZ21lbnRzLmxlbmd0aCAhPT0gMikge1xuICAgIHJldHVybiBwYXRoXG4gIH1cblxuICBjb25zdCBxcCA9IG5ldyBVUkxTZWFyY2hQYXJhbXMocGF0aFNlZ21lbnRzLnBvcCgpKVxuICBxcC5zb3J0KClcbiAgcmV0dXJuIFsuLi5wYXRoU2VnbWVudHMsIHFwLnRvU3RyaW5nKCldLmpvaW4oJz8nKVxufVxuXG5mdW5jdGlvbiBtYXRjaEtleSAobW9ja0Rpc3BhdGNoLCB7IHBhdGgsIG1ldGhvZCwgYm9keSwgaGVhZGVycyB9KSB7XG4gIGNvbnN0IHBhdGhNYXRjaCA9IG1hdGNoVmFsdWUobW9ja0Rpc3BhdGNoLnBhdGgsIHBhdGgpXG4gIGNvbnN0IG1ldGhvZE1hdGNoID0gbWF0Y2hWYWx1ZShtb2NrRGlzcGF0Y2gubWV0aG9kLCBtZXRob2QpXG4gIGNvbnN0IGJvZHlNYXRjaCA9IHR5cGVvZiBtb2NrRGlzcGF0Y2guYm9keSAhPT0gJ3VuZGVmaW5lZCcgPyBtYXRjaFZhbHVlKG1vY2tEaXNwYXRjaC5ib2R5LCBib2R5KSA6IHRydWVcbiAgY29uc3QgaGVhZGVyc01hdGNoID0gbWF0Y2hIZWFkZXJzKG1vY2tEaXNwYXRjaCwgaGVhZGVycylcbiAgcmV0dXJuIHBhdGhNYXRjaCAmJiBtZXRob2RNYXRjaCAmJiBib2R5TWF0Y2ggJiYgaGVhZGVyc01hdGNoXG59XG5cbmZ1bmN0aW9uIGdldFJlc3BvbnNlRGF0YSAoZGF0YSkge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKGRhdGEpKSB7XG4gICAgcmV0dXJuIGRhdGFcbiAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZGF0YSlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZGF0YS50b1N0cmluZygpXG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0TW9ja0Rpc3BhdGNoIChtb2NrRGlzcGF0Y2hlcywga2V5KSB7XG4gIGNvbnN0IGJhc2VQYXRoID0ga2V5LnF1ZXJ5ID8gYnVpbGRVUkwoa2V5LnBhdGgsIGtleS5xdWVyeSkgOiBrZXkucGF0aFxuICBjb25zdCByZXNvbHZlZFBhdGggPSB0eXBlb2YgYmFzZVBhdGggPT09ICdzdHJpbmcnID8gc2FmZVVybChiYXNlUGF0aCkgOiBiYXNlUGF0aFxuXG4gIC8vIE1hdGNoIHBhdGhcbiAgbGV0IG1hdGNoZWRNb2NrRGlzcGF0Y2hlcyA9IG1vY2tEaXNwYXRjaGVzLmZpbHRlcigoeyBjb25zdW1lZCB9KSA9PiAhY29uc3VtZWQpLmZpbHRlcigoeyBwYXRoIH0pID0+IG1hdGNoVmFsdWUoc2FmZVVybChwYXRoKSwgcmVzb2x2ZWRQYXRoKSlcbiAgaWYgKG1hdGNoZWRNb2NrRGlzcGF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgTW9ja05vdE1hdGNoZWRFcnJvcihgTW9jayBkaXNwYXRjaCBub3QgbWF0Y2hlZCBmb3IgcGF0aCAnJHtyZXNvbHZlZFBhdGh9J2ApXG4gIH1cblxuICAvLyBNYXRjaCBtZXRob2RcbiAgbWF0Y2hlZE1vY2tEaXNwYXRjaGVzID0gbWF0Y2hlZE1vY2tEaXNwYXRjaGVzLmZpbHRlcigoeyBtZXRob2QgfSkgPT4gbWF0Y2hWYWx1ZShtZXRob2QsIGtleS5tZXRob2QpKVxuICBpZiAobWF0Y2hlZE1vY2tEaXNwYXRjaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBNb2NrTm90TWF0Y2hlZEVycm9yKGBNb2NrIGRpc3BhdGNoIG5vdCBtYXRjaGVkIGZvciBtZXRob2QgJyR7a2V5Lm1ldGhvZH0nYClcbiAgfVxuXG4gIC8vIE1hdGNoIGJvZHlcbiAgbWF0Y2hlZE1vY2tEaXNwYXRjaGVzID0gbWF0Y2hlZE1vY2tEaXNwYXRjaGVzLmZpbHRlcigoeyBib2R5IH0pID0+IHR5cGVvZiBib2R5ICE9PSAndW5kZWZpbmVkJyA/IG1hdGNoVmFsdWUoYm9keSwga2V5LmJvZHkpIDogdHJ1ZSlcbiAgaWYgKG1hdGNoZWRNb2NrRGlzcGF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgTW9ja05vdE1hdGNoZWRFcnJvcihgTW9jayBkaXNwYXRjaCBub3QgbWF0Y2hlZCBmb3IgYm9keSAnJHtrZXkuYm9keX0nYClcbiAgfVxuXG4gIC8vIE1hdGNoIGhlYWRlcnNcbiAgbWF0Y2hlZE1vY2tEaXNwYXRjaGVzID0gbWF0Y2hlZE1vY2tEaXNwYXRjaGVzLmZpbHRlcigobW9ja0Rpc3BhdGNoKSA9PiBtYXRjaEhlYWRlcnMobW9ja0Rpc3BhdGNoLCBrZXkuaGVhZGVycykpXG4gIGlmIChtYXRjaGVkTW9ja0Rpc3BhdGNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IE1vY2tOb3RNYXRjaGVkRXJyb3IoYE1vY2sgZGlzcGF0Y2ggbm90IG1hdGNoZWQgZm9yIGhlYWRlcnMgJyR7dHlwZW9mIGtleS5oZWFkZXJzID09PSAnb2JqZWN0JyA/IEpTT04uc3RyaW5naWZ5KGtleS5oZWFkZXJzKSA6IGtleS5oZWFkZXJzfSdgKVxuICB9XG5cbiAgcmV0dXJuIG1hdGNoZWRNb2NrRGlzcGF0Y2hlc1swXVxufVxuXG5mdW5jdGlvbiBhZGRNb2NrRGlzcGF0Y2ggKG1vY2tEaXNwYXRjaGVzLCBrZXksIGRhdGEpIHtcbiAgY29uc3QgYmFzZURhdGEgPSB7IHRpbWVzSW52b2tlZDogMCwgdGltZXM6IDEsIHBlcnNpc3Q6IGZhbHNlLCBjb25zdW1lZDogZmFsc2UgfVxuICBjb25zdCByZXBseURhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ2Z1bmN0aW9uJyA/IHsgY2FsbGJhY2s6IGRhdGEgfSA6IHsgLi4uZGF0YSB9XG4gIGNvbnN0IG5ld01vY2tEaXNwYXRjaCA9IHsgLi4uYmFzZURhdGEsIC4uLmtleSwgcGVuZGluZzogdHJ1ZSwgZGF0YTogeyBlcnJvcjogbnVsbCwgLi4ucmVwbHlEYXRhIH0gfVxuICBtb2NrRGlzcGF0Y2hlcy5wdXNoKG5ld01vY2tEaXNwYXRjaClcbiAgcmV0dXJuIG5ld01vY2tEaXNwYXRjaFxufVxuXG5mdW5jdGlvbiBkZWxldGVNb2NrRGlzcGF0Y2ggKG1vY2tEaXNwYXRjaGVzLCBrZXkpIHtcbiAgY29uc3QgaW5kZXggPSBtb2NrRGlzcGF0Y2hlcy5maW5kSW5kZXgoZGlzcGF0Y2ggPT4ge1xuICAgIGlmICghZGlzcGF0Y2guY29uc3VtZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICByZXR1cm4gbWF0Y2hLZXkoZGlzcGF0Y2gsIGtleSlcbiAgfSlcbiAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgIG1vY2tEaXNwYXRjaGVzLnNwbGljZShpbmRleCwgMSlcbiAgfVxufVxuXG5mdW5jdGlvbiBidWlsZEtleSAob3B0cykge1xuICBjb25zdCB7IHBhdGgsIG1ldGhvZCwgYm9keSwgaGVhZGVycywgcXVlcnkgfSA9IG9wdHNcbiAgcmV0dXJuIHtcbiAgICBwYXRoLFxuICAgIG1ldGhvZCxcbiAgICBib2R5LFxuICAgIGhlYWRlcnMsXG4gICAgcXVlcnlcbiAgfVxufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUtleVZhbHVlcyAoZGF0YSkge1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoZGF0YSkucmVkdWNlKChrZXlWYWx1ZVBhaXJzLCBba2V5LCB2YWx1ZV0pID0+IFtcbiAgICAuLi5rZXlWYWx1ZVBhaXJzLFxuICAgIEJ1ZmZlci5mcm9tKGAke2tleX1gKSxcbiAgICBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLm1hcCh4ID0+IEJ1ZmZlci5mcm9tKGAke3h9YCkpIDogQnVmZmVyLmZyb20oYCR7dmFsdWV9YClcbiAgXSwgW10pXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL1N0YXR1c1xuICogQHBhcmFtIHtudW1iZXJ9IHN0YXR1c0NvZGVcbiAqL1xuZnVuY3Rpb24gZ2V0U3RhdHVzVGV4dCAoc3RhdHVzQ29kZSkge1xuICByZXR1cm4gU1RBVFVTX0NPREVTW3N0YXR1c0NvZGVdIHx8ICd1bmtub3duJ1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRSZXNwb25zZSAoYm9keSkge1xuICBjb25zdCBidWZmZXJzID0gW11cbiAgZm9yIGF3YWl0IChjb25zdCBkYXRhIG9mIGJvZHkpIHtcbiAgICBidWZmZXJzLnB1c2goZGF0YSlcbiAgfVxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChidWZmZXJzKS50b1N0cmluZygndXRmOCcpXG59XG5cbi8qKlxuICogTW9jayBkaXNwYXRjaCBmdW5jdGlvbiB1c2VkIHRvIHNpbXVsYXRlIHVuZGljaSBkaXNwYXRjaGVzXG4gKi9cbmZ1bmN0aW9uIG1vY2tEaXNwYXRjaCAob3B0cywgaGFuZGxlcikge1xuICAvLyBHZXQgbW9jayBkaXNwYXRjaCBmcm9tIGJ1aWx0IGtleVxuICBjb25zdCBrZXkgPSBidWlsZEtleShvcHRzKVxuICBjb25zdCBtb2NrRGlzcGF0Y2ggPSBnZXRNb2NrRGlzcGF0Y2godGhpc1trRGlzcGF0Y2hlc10sIGtleSlcblxuICBtb2NrRGlzcGF0Y2gudGltZXNJbnZva2VkKytcblxuICAvLyBIZXJlJ3Mgd2hlcmUgd2UgcmVzb2x2ZSBhIGNhbGxiYWNrIGlmIGEgY2FsbGJhY2sgaXMgcHJlc2VudCBmb3IgdGhlIGRpc3BhdGNoIGRhdGEuXG4gIGlmIChtb2NrRGlzcGF0Y2guZGF0YS5jYWxsYmFjaykge1xuICAgIG1vY2tEaXNwYXRjaC5kYXRhID0geyAuLi5tb2NrRGlzcGF0Y2guZGF0YSwgLi4ubW9ja0Rpc3BhdGNoLmRhdGEuY2FsbGJhY2sob3B0cykgfVxuICB9XG5cbiAgLy8gUGFyc2UgbW9ja0Rpc3BhdGNoIGRhdGFcbiAgY29uc3QgeyBkYXRhOiB7IHN0YXR1c0NvZGUsIGRhdGEsIGhlYWRlcnMsIHRyYWlsZXJzLCBlcnJvciB9LCBkZWxheSwgcGVyc2lzdCB9ID0gbW9ja0Rpc3BhdGNoXG4gIGNvbnN0IHsgdGltZXNJbnZva2VkLCB0aW1lcyB9ID0gbW9ja0Rpc3BhdGNoXG5cbiAgLy8gSWYgaXQncyB1c2VkIHVwIGFuZCBub3QgcGVyc2lzdGVudCwgbWFyayBhcyBjb25zdW1lZFxuICBtb2NrRGlzcGF0Y2guY29uc3VtZWQgPSAhcGVyc2lzdCAmJiB0aW1lc0ludm9rZWQgPj0gdGltZXNcbiAgbW9ja0Rpc3BhdGNoLnBlbmRpbmcgPSB0aW1lc0ludm9rZWQgPCB0aW1lc1xuXG4gIC8vIElmIHNwZWNpZmllZCwgdHJpZ2dlciBkaXNwYXRjaCBlcnJvclxuICBpZiAoZXJyb3IgIT09IG51bGwpIHtcbiAgICBkZWxldGVNb2NrRGlzcGF0Y2godGhpc1trRGlzcGF0Y2hlc10sIGtleSlcbiAgICBoYW5kbGVyLm9uRXJyb3IoZXJyb3IpXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8vIEhhbmRsZSB0aGUgcmVxdWVzdCB3aXRoIGEgZGVsYXkgaWYgbmVjZXNzYXJ5XG4gIGlmICh0eXBlb2YgZGVsYXkgPT09ICdudW1iZXInICYmIGRlbGF5ID4gMCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaGFuZGxlUmVwbHkodGhpc1trRGlzcGF0Y2hlc10pXG4gICAgfSwgZGVsYXkpXG4gIH0gZWxzZSB7XG4gICAgaGFuZGxlUmVwbHkodGhpc1trRGlzcGF0Y2hlc10pXG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVSZXBseSAobW9ja0Rpc3BhdGNoZXMsIF9kYXRhID0gZGF0YSkge1xuICAgIC8vIGZldGNoJ3MgSGVhZGVyc0xpc3QgaXMgYSAxRCBzdHJpbmcgYXJyYXlcbiAgICBjb25zdCBvcHRzSGVhZGVycyA9IEFycmF5LmlzQXJyYXkob3B0cy5oZWFkZXJzKVxuICAgICAgPyBidWlsZEhlYWRlcnNGcm9tQXJyYXkob3B0cy5oZWFkZXJzKVxuICAgICAgOiBvcHRzLmhlYWRlcnNcbiAgICBjb25zdCBib2R5ID0gdHlwZW9mIF9kYXRhID09PSAnZnVuY3Rpb24nXG4gICAgICA/IF9kYXRhKHsgLi4ub3B0cywgaGVhZGVyczogb3B0c0hlYWRlcnMgfSlcbiAgICAgIDogX2RhdGFcblxuICAgIC8vIHV0aWwudHlwZXMuaXNQcm9taXNlIGlzIGxpa2VseSBuZWVkZWQgZm9yIGplc3QuXG4gICAgaWYgKGlzUHJvbWlzZShib2R5KSkge1xuICAgICAgLy8gSWYgaGFuZGxlUmVwbHkgaXMgYXN5bmNocm9ub3VzLCB0aHJvd2luZyBhbiBlcnJvclxuICAgICAgLy8gaW4gdGhlIGNhbGxiYWNrIHdpbGwgcmVqZWN0IHRoZSBwcm9taXNlLCByYXRoZXIgdGhhblxuICAgICAgLy8gc3luY2hyb25vdXNseSB0aHJvdyB0aGUgZXJyb3IsIHdoaWNoIGJyZWFrcyBzb21lIHRlc3RzLlxuICAgICAgLy8gUmF0aGVyLCB3ZSB3YWl0IGZvciB0aGUgY2FsbGJhY2sgdG8gcmVzb2x2ZSBpZiBpdCBpcyBhXG4gICAgICAvLyBwcm9taXNlLCBhbmQgdGhlbiByZS1ydW4gaGFuZGxlUmVwbHkgd2l0aCB0aGUgbmV3IGJvZHkuXG4gICAgICBib2R5LnRoZW4oKG5ld0RhdGEpID0+IGhhbmRsZVJlcGx5KG1vY2tEaXNwYXRjaGVzLCBuZXdEYXRhKSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9IGdldFJlc3BvbnNlRGF0YShib2R5KVxuICAgIGNvbnN0IHJlc3BvbnNlSGVhZGVycyA9IGdlbmVyYXRlS2V5VmFsdWVzKGhlYWRlcnMpXG4gICAgY29uc3QgcmVzcG9uc2VUcmFpbGVycyA9IGdlbmVyYXRlS2V5VmFsdWVzKHRyYWlsZXJzKVxuXG4gICAgaGFuZGxlci5hYm9ydCA9IG5vcFxuICAgIGhhbmRsZXIub25IZWFkZXJzKHN0YXR1c0NvZGUsIHJlc3BvbnNlSGVhZGVycywgcmVzdW1lLCBnZXRTdGF0dXNUZXh0KHN0YXR1c0NvZGUpKVxuICAgIGhhbmRsZXIub25EYXRhKEJ1ZmZlci5mcm9tKHJlc3BvbnNlRGF0YSkpXG4gICAgaGFuZGxlci5vbkNvbXBsZXRlKHJlc3BvbnNlVHJhaWxlcnMpXG4gICAgZGVsZXRlTW9ja0Rpc3BhdGNoKG1vY2tEaXNwYXRjaGVzLCBrZXkpXG4gIH1cblxuICBmdW5jdGlvbiByZXN1bWUgKCkge31cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiBidWlsZE1vY2tEaXNwYXRjaCAoKSB7XG4gIGNvbnN0IGFnZW50ID0gdGhpc1trTW9ja0FnZW50XVxuICBjb25zdCBvcmlnaW4gPSB0aGlzW2tPcmlnaW5dXG4gIGNvbnN0IG9yaWdpbmFsRGlzcGF0Y2ggPSB0aGlzW2tPcmlnaW5hbERpc3BhdGNoXVxuXG4gIHJldHVybiBmdW5jdGlvbiBkaXNwYXRjaCAob3B0cywgaGFuZGxlcikge1xuICAgIGlmIChhZ2VudC5pc01vY2tBY3RpdmUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG1vY2tEaXNwYXRjaC5jYWxsKHRoaXMsIG9wdHMsIGhhbmRsZXIpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBNb2NrTm90TWF0Y2hlZEVycm9yKSB7XG4gICAgICAgICAgY29uc3QgbmV0Q29ubmVjdCA9IGFnZW50W2tHZXROZXRDb25uZWN0XSgpXG4gICAgICAgICAgaWYgKG5ldENvbm5lY3QgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgTW9ja05vdE1hdGNoZWRFcnJvcihgJHtlcnJvci5tZXNzYWdlfTogc3Vic2VxdWVudCByZXF1ZXN0IHRvIG9yaWdpbiAke29yaWdpbn0gd2FzIG5vdCBhbGxvd2VkIChuZXQuY29ubmVjdCBkaXNhYmxlZClgKVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY2hlY2tOZXRDb25uZWN0KG5ldENvbm5lY3QsIG9yaWdpbikpIHtcbiAgICAgICAgICAgIG9yaWdpbmFsRGlzcGF0Y2guY2FsbCh0aGlzLCBvcHRzLCBoYW5kbGVyKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgTW9ja05vdE1hdGNoZWRFcnJvcihgJHtlcnJvci5tZXNzYWdlfTogc3Vic2VxdWVudCByZXF1ZXN0IHRvIG9yaWdpbiAke29yaWdpbn0gd2FzIG5vdCBhbGxvd2VkIChuZXQuY29ubmVjdCBpcyBub3QgZW5hYmxlZCBmb3IgdGhpcyBvcmlnaW4pYClcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvcmlnaW5hbERpc3BhdGNoLmNhbGwodGhpcywgb3B0cywgaGFuZGxlcilcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tOZXRDb25uZWN0IChuZXRDb25uZWN0LCBvcmlnaW4pIHtcbiAgY29uc3QgdXJsID0gbmV3IFVSTChvcmlnaW4pXG4gIGlmIChuZXRDb25uZWN0ID09PSB0cnVlKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG5ldENvbm5lY3QpICYmIG5ldENvbm5lY3Quc29tZSgobWF0Y2hlcikgPT4gbWF0Y2hWYWx1ZShtYXRjaGVyLCB1cmwuaG9zdCkpKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gYnVpbGRNb2NrT3B0aW9ucyAob3B0cykge1xuICBpZiAob3B0cykge1xuICAgIGNvbnN0IHsgYWdlbnQsIC4uLm1vY2tPcHRpb25zIH0gPSBvcHRzXG4gICAgcmV0dXJuIG1vY2tPcHRpb25zXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldFJlc3BvbnNlRGF0YSxcbiAgZ2V0TW9ja0Rpc3BhdGNoLFxuICBhZGRNb2NrRGlzcGF0Y2gsXG4gIGRlbGV0ZU1vY2tEaXNwYXRjaCxcbiAgYnVpbGRLZXksXG4gIGdlbmVyYXRlS2V5VmFsdWVzLFxuICBtYXRjaFZhbHVlLFxuICBnZXRSZXNwb25zZSxcbiAgZ2V0U3RhdHVzVGV4dCxcbiAgbW9ja0Rpc3BhdGNoLFxuICBidWlsZE1vY2tEaXNwYXRjaCxcbiAgY2hlY2tOZXRDb25uZWN0LFxuICBidWlsZE1vY2tPcHRpb25zLFxuICBnZXRIZWFkZXJCeU5hbWVcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgZ2V0UmVzcG9uc2VEYXRhLCBidWlsZEtleSwgYWRkTW9ja0Rpc3BhdGNoIH0gPSByZXF1aXJlKCcuL21vY2stdXRpbHMnKVxuY29uc3Qge1xuICBrRGlzcGF0Y2hlcyxcbiAga0Rpc3BhdGNoS2V5LFxuICBrRGVmYXVsdEhlYWRlcnMsXG4gIGtEZWZhdWx0VHJhaWxlcnMsXG4gIGtDb250ZW50TGVuZ3RoLFxuICBrTW9ja0Rpc3BhdGNoXG59ID0gcmVxdWlyZSgnLi9tb2NrLXN5bWJvbHMnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgeyBidWlsZFVSTCB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcblxuLyoqXG4gKiBEZWZpbmVzIHRoZSBzY29wZSBBUEkgZm9yIGFuIGludGVyY2VwdG9yIHJlcGx5XG4gKi9cbmNsYXNzIE1vY2tTY29wZSB7XG4gIGNvbnN0cnVjdG9yIChtb2NrRGlzcGF0Y2gpIHtcbiAgICB0aGlzW2tNb2NrRGlzcGF0Y2hdID0gbW9ja0Rpc3BhdGNoXG4gIH1cblxuICAvKipcbiAgICogRGVsYXkgYSByZXBseSBieSBhIHNldCBhbW91bnQgaW4gbXMuXG4gICAqL1xuICBkZWxheSAod2FpdEluTXMpIHtcbiAgICBpZiAodHlwZW9mIHdhaXRJbk1zICE9PSAnbnVtYmVyJyB8fCAhTnVtYmVyLmlzSW50ZWdlcih3YWl0SW5NcykgfHwgd2FpdEluTXMgPD0gMCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCd3YWl0SW5NcyBtdXN0IGJlIGEgdmFsaWQgaW50ZWdlciA+IDAnKVxuICAgIH1cblxuICAgIHRoaXNba01vY2tEaXNwYXRjaF0uZGVsYXkgPSB3YWl0SW5Nc1xuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogRm9yIGEgZGVmaW5lZCByZXBseSwgbmV2ZXIgbWFyayBhcyBjb25zdW1lZC5cbiAgICovXG4gIHBlcnNpc3QgKCkge1xuICAgIHRoaXNba01vY2tEaXNwYXRjaF0ucGVyc2lzdCA9IHRydWVcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93IG9uZSB0byBkZWZpbmUgYSByZXBseSBmb3IgYSBzZXQgYW1vdW50IG9mIG1hdGNoaW5nIHJlcXVlc3RzLlxuICAgKi9cbiAgdGltZXMgKHJlcGVhdFRpbWVzKSB7XG4gICAgaWYgKHR5cGVvZiByZXBlYXRUaW1lcyAhPT0gJ251bWJlcicgfHwgIU51bWJlci5pc0ludGVnZXIocmVwZWF0VGltZXMpIHx8IHJlcGVhdFRpbWVzIDw9IDApIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigncmVwZWF0VGltZXMgbXVzdCBiZSBhIHZhbGlkIGludGVnZXIgPiAwJylcbiAgICB9XG5cbiAgICB0aGlzW2tNb2NrRGlzcGF0Y2hdLnRpbWVzID0gcmVwZWF0VGltZXNcbiAgICByZXR1cm4gdGhpc1xuICB9XG59XG5cbi8qKlxuICogRGVmaW5lcyBhbiBpbnRlcmNlcHRvciBmb3IgYSBNb2NrXG4gKi9cbmNsYXNzIE1vY2tJbnRlcmNlcHRvciB7XG4gIGNvbnN0cnVjdG9yIChvcHRzLCBtb2NrRGlzcGF0Y2hlcykge1xuICAgIGlmICh0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignb3B0cyBtdXN0IGJlIGFuIG9iamVjdCcpXG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3B0cy5wYXRoID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdvcHRzLnBhdGggbXVzdCBiZSBkZWZpbmVkJylcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvcHRzLm1ldGhvZCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIG9wdHMubWV0aG9kID0gJ0dFVCdcbiAgICB9XG4gICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8xMjQ1XG4gICAgLy8gQXMgcGVyIFJGQyAzOTg2LCBjbGllbnRzIGFyZSBub3Qgc3VwcG9zZWQgdG8gc2VuZCBVUklcbiAgICAvLyBmcmFnbWVudHMgdG8gc2VydmVycyB3aGVuIHRoZXkgcmV0cmlldmUgYSBkb2N1bWVudCxcbiAgICBpZiAodHlwZW9mIG9wdHMucGF0aCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmIChvcHRzLnF1ZXJ5KSB7XG4gICAgICAgIG9wdHMucGF0aCA9IGJ1aWxkVVJMKG9wdHMucGF0aCwgb3B0cy5xdWVyeSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE1hdGNoZXMgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvYmxvYi9tYWluL2xpYi9mZXRjaC9pbmRleC5qcyNMMTgxMVxuICAgICAgICBjb25zdCBwYXJzZWRVUkwgPSBuZXcgVVJMKG9wdHMucGF0aCwgJ2RhdGE6Ly8nKVxuICAgICAgICBvcHRzLnBhdGggPSBwYXJzZWRVUkwucGF0aG5hbWUgKyBwYXJzZWRVUkwuc2VhcmNoXG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3B0cy5tZXRob2QgPT09ICdzdHJpbmcnKSB7XG4gICAgICBvcHRzLm1ldGhvZCA9IG9wdHMubWV0aG9kLnRvVXBwZXJDYXNlKClcbiAgICB9XG5cbiAgICB0aGlzW2tEaXNwYXRjaEtleV0gPSBidWlsZEtleShvcHRzKVxuICAgIHRoaXNba0Rpc3BhdGNoZXNdID0gbW9ja0Rpc3BhdGNoZXNcbiAgICB0aGlzW2tEZWZhdWx0SGVhZGVyc10gPSB7fVxuICAgIHRoaXNba0RlZmF1bHRUcmFpbGVyc10gPSB7fVxuICAgIHRoaXNba0NvbnRlbnRMZW5ndGhdID0gZmFsc2VcbiAgfVxuXG4gIGNyZWF0ZU1vY2tTY29wZURpc3BhdGNoRGF0YSAoc3RhdHVzQ29kZSwgZGF0YSwgcmVzcG9uc2VPcHRpb25zID0ge30pIHtcbiAgICBjb25zdCByZXNwb25zZURhdGEgPSBnZXRSZXNwb25zZURhdGEoZGF0YSlcbiAgICBjb25zdCBjb250ZW50TGVuZ3RoID0gdGhpc1trQ29udGVudExlbmd0aF0gPyB7ICdjb250ZW50LWxlbmd0aCc6IHJlc3BvbnNlRGF0YS5sZW5ndGggfSA6IHt9XG4gICAgY29uc3QgaGVhZGVycyA9IHsgLi4udGhpc1trRGVmYXVsdEhlYWRlcnNdLCAuLi5jb250ZW50TGVuZ3RoLCAuLi5yZXNwb25zZU9wdGlvbnMuaGVhZGVycyB9XG4gICAgY29uc3QgdHJhaWxlcnMgPSB7IC4uLnRoaXNba0RlZmF1bHRUcmFpbGVyc10sIC4uLnJlc3BvbnNlT3B0aW9ucy50cmFpbGVycyB9XG5cbiAgICByZXR1cm4geyBzdGF0dXNDb2RlLCBkYXRhLCBoZWFkZXJzLCB0cmFpbGVycyB9XG4gIH1cblxuICB2YWxpZGF0ZVJlcGx5UGFyYW1ldGVycyAoc3RhdHVzQ29kZSwgZGF0YSwgcmVzcG9uc2VPcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBzdGF0dXNDb2RlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdzdGF0dXNDb2RlIG11c3QgYmUgZGVmaW5lZCcpXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignZGF0YSBtdXN0IGJlIGRlZmluZWQnKVxuICAgIH1cbiAgICBpZiAodHlwZW9mIHJlc3BvbnNlT3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigncmVzcG9uc2VPcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0JylcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTW9jayBhbiB1bmRpY2kgcmVxdWVzdCB3aXRoIGEgZGVmaW5lZCByZXBseS5cbiAgICovXG4gIHJlcGx5IChyZXBseURhdGEpIHtcbiAgICAvLyBWYWx1ZXMgb2YgcmVwbHkgYXJlbid0IGF2YWlsYWJsZSByaWdodCBub3cgYXMgdGhleVxuICAgIC8vIGNhbiBvbmx5IGJlIGF2YWlsYWJsZSB3aGVuIHRoZSByZXBseSBjYWxsYmFjayBpcyBpbnZva2VkLlxuICAgIGlmICh0eXBlb2YgcmVwbHlEYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBXZSdsbCBmaXJzdCB3cmFwIHRoZSBwcm92aWRlZCBjYWxsYmFjayBpbiBhbm90aGVyIGZ1bmN0aW9uLFxuICAgICAgLy8gdGhpcyBmdW5jdGlvbiB3aWxsIHByb3Blcmx5IHJlc29sdmUgdGhlIGRhdGEgZnJvbSB0aGUgY2FsbGJhY2tcbiAgICAgIC8vIHdoZW4gaW52b2tlZC5cbiAgICAgIGNvbnN0IHdyYXBwZWREZWZhdWx0c0NhbGxiYWNrID0gKG9wdHMpID0+IHtcbiAgICAgICAgLy8gT3VyIHJlcGx5IG9wdGlvbnMgY2FsbGJhY2sgY29udGFpbnMgdGhlIHBhcmFtZXRlciBmb3Igc3RhdHVzQ29kZSwgZGF0YSBhbmQgb3B0aW9ucy5cbiAgICAgICAgY29uc3QgcmVzb2x2ZWREYXRhID0gcmVwbHlEYXRhKG9wdHMpXG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgaXQgaXMgaW4gdGhlIHJpZ2h0IGZvcm1hdFxuICAgICAgICBpZiAodHlwZW9mIHJlc29sdmVkRGF0YSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3JlcGx5IG9wdGlvbnMgY2FsbGJhY2sgbXVzdCByZXR1cm4gYW4gb2JqZWN0JylcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgc3RhdHVzQ29kZSwgZGF0YSA9ICcnLCByZXNwb25zZU9wdGlvbnMgPSB7fSB9ID0gcmVzb2x2ZWREYXRhXG4gICAgICAgIHRoaXMudmFsaWRhdGVSZXBseVBhcmFtZXRlcnMoc3RhdHVzQ29kZSwgZGF0YSwgcmVzcG9uc2VPcHRpb25zKVxuICAgICAgICAvLyBTaW5jZSB0aGUgdmFsdWVzIGNhbiBiZSBvYnRhaW5lZCBpbW1lZGlhdGVseSB3ZSByZXR1cm4gdGhlbVxuICAgICAgICAvLyBmcm9tIHRoaXMgaGlnaGVyIG9yZGVyIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSByZXNvbHZlZCBsYXRlci5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi50aGlzLmNyZWF0ZU1vY2tTY29wZURpc3BhdGNoRGF0YShzdGF0dXNDb2RlLCBkYXRhLCByZXNwb25zZU9wdGlvbnMpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQWRkIHVzdWFsIGRpc3BhdGNoIGRhdGEsIGJ1dCB0aGlzIHRpbWUgc2V0IHRoZSBkYXRhIHBhcmFtZXRlciB0byBmdW5jdGlvbiB0aGF0IHdpbGwgZXZlbnR1YWxseSBwcm92aWRlIGRhdGEuXG4gICAgICBjb25zdCBuZXdNb2NrRGlzcGF0Y2ggPSBhZGRNb2NrRGlzcGF0Y2godGhpc1trRGlzcGF0Y2hlc10sIHRoaXNba0Rpc3BhdGNoS2V5XSwgd3JhcHBlZERlZmF1bHRzQ2FsbGJhY2spXG4gICAgICByZXR1cm4gbmV3IE1vY2tTY29wZShuZXdNb2NrRGlzcGF0Y2gpXG4gICAgfVxuXG4gICAgLy8gV2UgY2FuIGhhdmUgZWl0aGVyIG9uZSBvciB0aHJlZSBwYXJhbWV0ZXJzLCBpZiB3ZSBnZXQgaGVyZSxcbiAgICAvLyB3ZSBzaG91bGQgaGF2ZSAxLTMgcGFyYW1ldGVycy4gU28gd2Ugc3ByZWFkIHRoZSBhcmd1bWVudHMgb2ZcbiAgICAvLyB0aGlzIGZ1bmN0aW9uIHRvIG9idGFpbiB0aGUgcGFyYW1ldGVycywgc2luY2UgcmVwbHlEYXRhIHdpbGwgYWx3YXlzXG4gICAgLy8ganVzdCBiZSB0aGUgc3RhdHVzQ29kZS5cbiAgICBjb25zdCBbc3RhdHVzQ29kZSwgZGF0YSA9ICcnLCByZXNwb25zZU9wdGlvbnMgPSB7fV0gPSBbLi4uYXJndW1lbnRzXVxuICAgIHRoaXMudmFsaWRhdGVSZXBseVBhcmFtZXRlcnMoc3RhdHVzQ29kZSwgZGF0YSwgcmVzcG9uc2VPcHRpb25zKVxuXG4gICAgLy8gU2VuZCBpbi1hbHJlYWR5IHByb3ZpZGVkIGRhdGEgbGlrZSB1c3VhbFxuICAgIGNvbnN0IGRpc3BhdGNoRGF0YSA9IHRoaXMuY3JlYXRlTW9ja1Njb3BlRGlzcGF0Y2hEYXRhKHN0YXR1c0NvZGUsIGRhdGEsIHJlc3BvbnNlT3B0aW9ucylcbiAgICBjb25zdCBuZXdNb2NrRGlzcGF0Y2ggPSBhZGRNb2NrRGlzcGF0Y2godGhpc1trRGlzcGF0Y2hlc10sIHRoaXNba0Rpc3BhdGNoS2V5XSwgZGlzcGF0Y2hEYXRhKVxuICAgIHJldHVybiBuZXcgTW9ja1Njb3BlKG5ld01vY2tEaXNwYXRjaClcbiAgfVxuXG4gIC8qKlxuICAgKiBNb2NrIGFuIHVuZGljaSByZXF1ZXN0IHdpdGggYSBkZWZpbmVkIGVycm9yLlxuICAgKi9cbiAgcmVwbHlXaXRoRXJyb3IgKGVycm9yKSB7XG4gICAgaWYgKHR5cGVvZiBlcnJvciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignZXJyb3IgbXVzdCBiZSBkZWZpbmVkJylcbiAgICB9XG5cbiAgICBjb25zdCBuZXdNb2NrRGlzcGF0Y2ggPSBhZGRNb2NrRGlzcGF0Y2godGhpc1trRGlzcGF0Y2hlc10sIHRoaXNba0Rpc3BhdGNoS2V5XSwgeyBlcnJvciB9KVxuICAgIHJldHVybiBuZXcgTW9ja1Njb3BlKG5ld01vY2tEaXNwYXRjaClcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgZGVmYXVsdCByZXBseSBoZWFkZXJzIG9uIHRoZSBpbnRlcmNlcHRvciBmb3Igc3Vic2VxdWVudCByZXBsaWVzXG4gICAqL1xuICBkZWZhdWx0UmVwbHlIZWFkZXJzIChoZWFkZXJzKSB7XG4gICAgaWYgKHR5cGVvZiBoZWFkZXJzID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdoZWFkZXJzIG11c3QgYmUgZGVmaW5lZCcpXG4gICAgfVxuXG4gICAgdGhpc1trRGVmYXVsdEhlYWRlcnNdID0gaGVhZGVyc1xuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogU2V0IGRlZmF1bHQgcmVwbHkgdHJhaWxlcnMgb24gdGhlIGludGVyY2VwdG9yIGZvciBzdWJzZXF1ZW50IHJlcGxpZXNcbiAgICovXG4gIGRlZmF1bHRSZXBseVRyYWlsZXJzICh0cmFpbGVycykge1xuICAgIGlmICh0eXBlb2YgdHJhaWxlcnMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3RyYWlsZXJzIG11c3QgYmUgZGVmaW5lZCcpXG4gICAgfVxuXG4gICAgdGhpc1trRGVmYXVsdFRyYWlsZXJzXSA9IHRyYWlsZXJzXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgcmVwbHkgY29udGVudCBsZW5ndGggaGVhZGVyIGZvciByZXBsaWVzIG9uIHRoZSBpbnRlcmNlcHRvclxuICAgKi9cbiAgcmVwbHlDb250ZW50TGVuZ3RoICgpIHtcbiAgICB0aGlzW2tDb250ZW50TGVuZ3RoXSA9IHRydWVcbiAgICByZXR1cm4gdGhpc1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzLk1vY2tJbnRlcmNlcHRvciA9IE1vY2tJbnRlcmNlcHRvclxubW9kdWxlLmV4cG9ydHMuTW9ja1Njb3BlID0gTW9ja1Njb3BlXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHByb21pc2lmeSB9ID0gcmVxdWlyZSgndXRpbCcpXG5jb25zdCBDbGllbnQgPSByZXF1aXJlKCcuLi9jbGllbnQnKVxuY29uc3QgeyBidWlsZE1vY2tEaXNwYXRjaCB9ID0gcmVxdWlyZSgnLi9tb2NrLXV0aWxzJylcbmNvbnN0IHtcbiAga0Rpc3BhdGNoZXMsXG4gIGtNb2NrQWdlbnQsXG4gIGtDbG9zZSxcbiAga09yaWdpbmFsQ2xvc2UsXG4gIGtPcmlnaW4sXG4gIGtPcmlnaW5hbERpc3BhdGNoLFxuICBrQ29ubmVjdGVkXG59ID0gcmVxdWlyZSgnLi9tb2NrLXN5bWJvbHMnKVxuY29uc3QgeyBNb2NrSW50ZXJjZXB0b3IgfSA9IHJlcXVpcmUoJy4vbW9jay1pbnRlcmNlcHRvcicpXG5jb25zdCBTeW1ib2xzID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcblxuLyoqXG4gKiBNb2NrQ2xpZW50IHByb3ZpZGVzIGFuIEFQSSB0aGF0IGV4dGVuZHMgdGhlIENsaWVudCB0byBpbmZsdWVuY2UgdGhlIG1vY2tEaXNwYXRjaGVzLlxuICovXG5jbGFzcyBNb2NrQ2xpZW50IGV4dGVuZHMgQ2xpZW50IHtcbiAgY29uc3RydWN0b3IgKG9yaWdpbiwgb3B0cykge1xuICAgIHN1cGVyKG9yaWdpbiwgb3B0cylcblxuICAgIGlmICghb3B0cyB8fCAhb3B0cy5hZ2VudCB8fCB0eXBlb2Ygb3B0cy5hZ2VudC5kaXNwYXRjaCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdBcmd1bWVudCBvcHRzLmFnZW50IG11c3QgaW1wbGVtZW50IEFnZW50JylcbiAgICB9XG5cbiAgICB0aGlzW2tNb2NrQWdlbnRdID0gb3B0cy5hZ2VudFxuICAgIHRoaXNba09yaWdpbl0gPSBvcmlnaW5cbiAgICB0aGlzW2tEaXNwYXRjaGVzXSA9IFtdXG4gICAgdGhpc1trQ29ubmVjdGVkXSA9IDFcbiAgICB0aGlzW2tPcmlnaW5hbERpc3BhdGNoXSA9IHRoaXMuZGlzcGF0Y2hcbiAgICB0aGlzW2tPcmlnaW5hbENsb3NlXSA9IHRoaXMuY2xvc2UuYmluZCh0aGlzKVxuXG4gICAgdGhpcy5kaXNwYXRjaCA9IGJ1aWxkTW9ja0Rpc3BhdGNoLmNhbGwodGhpcylcbiAgICB0aGlzLmNsb3NlID0gdGhpc1trQ2xvc2VdXG4gIH1cblxuICBnZXQgW1N5bWJvbHMua0Nvbm5lY3RlZF0gKCkge1xuICAgIHJldHVybiB0aGlzW2tDb25uZWN0ZWRdXG4gIH1cblxuICAvKipcbiAgICogU2V0cyB1cCB0aGUgYmFzZSBpbnRlcmNlcHRvciBmb3IgbW9ja2luZyByZXBsaWVzIGZyb20gdW5kaWNpLlxuICAgKi9cbiAgaW50ZXJjZXB0IChvcHRzKSB7XG4gICAgcmV0dXJuIG5ldyBNb2NrSW50ZXJjZXB0b3Iob3B0cywgdGhpc1trRGlzcGF0Y2hlc10pXG4gIH1cblxuICBhc3luYyBba0Nsb3NlXSAoKSB7XG4gICAgYXdhaXQgcHJvbWlzaWZ5KHRoaXNba09yaWdpbmFsQ2xvc2VdKSgpXG4gICAgdGhpc1trQ29ubmVjdGVkXSA9IDBcbiAgICB0aGlzW2tNb2NrQWdlbnRdW1N5bWJvbHMua0NsaWVudHNdLmRlbGV0ZSh0aGlzW2tPcmlnaW5dKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gTW9ja0NsaWVudFxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBwcm9taXNpZnkgfSA9IHJlcXVpcmUoJ3V0aWwnKVxuY29uc3QgUG9vbCA9IHJlcXVpcmUoJy4uL3Bvb2wnKVxuY29uc3QgeyBidWlsZE1vY2tEaXNwYXRjaCB9ID0gcmVxdWlyZSgnLi9tb2NrLXV0aWxzJylcbmNvbnN0IHtcbiAga0Rpc3BhdGNoZXMsXG4gIGtNb2NrQWdlbnQsXG4gIGtDbG9zZSxcbiAga09yaWdpbmFsQ2xvc2UsXG4gIGtPcmlnaW4sXG4gIGtPcmlnaW5hbERpc3BhdGNoLFxuICBrQ29ubmVjdGVkXG59ID0gcmVxdWlyZSgnLi9tb2NrLXN5bWJvbHMnKVxuY29uc3QgeyBNb2NrSW50ZXJjZXB0b3IgfSA9IHJlcXVpcmUoJy4vbW9jay1pbnRlcmNlcHRvcicpXG5jb25zdCBTeW1ib2xzID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcblxuLyoqXG4gKiBNb2NrUG9vbCBwcm92aWRlcyBhbiBBUEkgdGhhdCBleHRlbmRzIHRoZSBQb29sIHRvIGluZmx1ZW5jZSB0aGUgbW9ja0Rpc3BhdGNoZXMuXG4gKi9cbmNsYXNzIE1vY2tQb29sIGV4dGVuZHMgUG9vbCB7XG4gIGNvbnN0cnVjdG9yIChvcmlnaW4sIG9wdHMpIHtcbiAgICBzdXBlcihvcmlnaW4sIG9wdHMpXG5cbiAgICBpZiAoIW9wdHMgfHwgIW9wdHMuYWdlbnQgfHwgdHlwZW9mIG9wdHMuYWdlbnQuZGlzcGF0Y2ggIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignQXJndW1lbnQgb3B0cy5hZ2VudCBtdXN0IGltcGxlbWVudCBBZ2VudCcpXG4gICAgfVxuXG4gICAgdGhpc1trTW9ja0FnZW50XSA9IG9wdHMuYWdlbnRcbiAgICB0aGlzW2tPcmlnaW5dID0gb3JpZ2luXG4gICAgdGhpc1trRGlzcGF0Y2hlc10gPSBbXVxuICAgIHRoaXNba0Nvbm5lY3RlZF0gPSAxXG4gICAgdGhpc1trT3JpZ2luYWxEaXNwYXRjaF0gPSB0aGlzLmRpc3BhdGNoXG4gICAgdGhpc1trT3JpZ2luYWxDbG9zZV0gPSB0aGlzLmNsb3NlLmJpbmQodGhpcylcblxuICAgIHRoaXMuZGlzcGF0Y2ggPSBidWlsZE1vY2tEaXNwYXRjaC5jYWxsKHRoaXMpXG4gICAgdGhpcy5jbG9zZSA9IHRoaXNba0Nsb3NlXVxuICB9XG5cbiAgZ2V0IFtTeW1ib2xzLmtDb25uZWN0ZWRdICgpIHtcbiAgICByZXR1cm4gdGhpc1trQ29ubmVjdGVkXVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdXAgdGhlIGJhc2UgaW50ZXJjZXB0b3IgZm9yIG1vY2tpbmcgcmVwbGllcyBmcm9tIHVuZGljaS5cbiAgICovXG4gIGludGVyY2VwdCAob3B0cykge1xuICAgIHJldHVybiBuZXcgTW9ja0ludGVyY2VwdG9yKG9wdHMsIHRoaXNba0Rpc3BhdGNoZXNdKVxuICB9XG5cbiAgYXN5bmMgW2tDbG9zZV0gKCkge1xuICAgIGF3YWl0IHByb21pc2lmeSh0aGlzW2tPcmlnaW5hbENsb3NlXSkoKVxuICAgIHRoaXNba0Nvbm5lY3RlZF0gPSAwXG4gICAgdGhpc1trTW9ja0FnZW50XVtTeW1ib2xzLmtDbGllbnRzXS5kZWxldGUodGhpc1trT3JpZ2luXSlcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IE1vY2tQb29sXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBzaW5ndWxhcnMgPSB7XG4gIHByb25vdW46ICdpdCcsXG4gIGlzOiAnaXMnLFxuICB3YXM6ICd3YXMnLFxuICB0aGlzOiAndGhpcydcbn1cblxuY29uc3QgcGx1cmFscyA9IHtcbiAgcHJvbm91bjogJ3RoZXknLFxuICBpczogJ2FyZScsXG4gIHdhczogJ3dlcmUnLFxuICB0aGlzOiAndGhlc2UnXG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xhc3MgUGx1cmFsaXplciB7XG4gIGNvbnN0cnVjdG9yIChzaW5ndWxhciwgcGx1cmFsKSB7XG4gICAgdGhpcy5zaW5ndWxhciA9IHNpbmd1bGFyXG4gICAgdGhpcy5wbHVyYWwgPSBwbHVyYWxcbiAgfVxuXG4gIHBsdXJhbGl6ZSAoY291bnQpIHtcbiAgICBjb25zdCBvbmUgPSBjb3VudCA9PT0gMVxuICAgIGNvbnN0IGtleXMgPSBvbmUgPyBzaW5ndWxhcnMgOiBwbHVyYWxzXG4gICAgY29uc3Qgbm91biA9IG9uZSA/IHRoaXMuc2luZ3VsYXIgOiB0aGlzLnBsdXJhbFxuICAgIHJldHVybiB7IC4uLmtleXMsIGNvdW50LCBub3VuIH1cbiAgfVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBUcmFuc2Zvcm0gfSA9IHJlcXVpcmUoJ3N0cmVhbScpXG5jb25zdCB7IENvbnNvbGUgfSA9IHJlcXVpcmUoJ2NvbnNvbGUnKVxuXG4vKipcbiAqIEdldHMgdGhlIG91dHB1dCBvZiBgY29uc29sZS50YWJsZSjigKYpYCBhcyBhIHN0cmluZy5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBQZW5kaW5nSW50ZXJjZXB0b3JzRm9ybWF0dGVyIHtcbiAgY29uc3RydWN0b3IgKHsgZGlzYWJsZUNvbG9ycyB9ID0ge30pIHtcbiAgICB0aGlzLnRyYW5zZm9ybSA9IG5ldyBUcmFuc2Zvcm0oe1xuICAgICAgdHJhbnNmb3JtIChjaHVuaywgX2VuYywgY2IpIHtcbiAgICAgICAgY2IobnVsbCwgY2h1bmspXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXMubG9nZ2VyID0gbmV3IENvbnNvbGUoe1xuICAgICAgc3Rkb3V0OiB0aGlzLnRyYW5zZm9ybSxcbiAgICAgIGluc3BlY3RPcHRpb25zOiB7XG4gICAgICAgIGNvbG9yczogIWRpc2FibGVDb2xvcnMgJiYgIXByb2Nlc3MuZW52LkNJXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGZvcm1hdCAocGVuZGluZ0ludGVyY2VwdG9ycykge1xuICAgIGNvbnN0IHdpdGhQcmV0dHlIZWFkZXJzID0gcGVuZGluZ0ludGVyY2VwdG9ycy5tYXAoXG4gICAgICAoeyBtZXRob2QsIHBhdGgsIGRhdGE6IHsgc3RhdHVzQ29kZSB9LCBwZXJzaXN0LCB0aW1lcywgdGltZXNJbnZva2VkLCBvcmlnaW4gfSkgPT4gKHtcbiAgICAgICAgTWV0aG9kOiBtZXRob2QsXG4gICAgICAgIE9yaWdpbjogb3JpZ2luLFxuICAgICAgICBQYXRoOiBwYXRoLFxuICAgICAgICAnU3RhdHVzIGNvZGUnOiBzdGF0dXNDb2RlLFxuICAgICAgICBQZXJzaXN0ZW50OiBwZXJzaXN0ID8gJ+KchScgOiAn4p2MJyxcbiAgICAgICAgSW52b2NhdGlvbnM6IHRpbWVzSW52b2tlZCxcbiAgICAgICAgUmVtYWluaW5nOiBwZXJzaXN0ID8gSW5maW5pdHkgOiB0aW1lcyAtIHRpbWVzSW52b2tlZFxuICAgICAgfSkpXG5cbiAgICB0aGlzLmxvZ2dlci50YWJsZSh3aXRoUHJldHR5SGVhZGVycylcbiAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm0ucmVhZCgpLnRvU3RyaW5nKClcbiAgfVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBrQ2xpZW50cyB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IEFnZW50ID0gcmVxdWlyZSgnLi4vYWdlbnQnKVxuY29uc3Qge1xuICBrQWdlbnQsXG4gIGtNb2NrQWdlbnRTZXQsXG4gIGtNb2NrQWdlbnRHZXQsXG4gIGtEaXNwYXRjaGVzLFxuICBrSXNNb2NrQWN0aXZlLFxuICBrTmV0Q29ubmVjdCxcbiAga0dldE5ldENvbm5lY3QsXG4gIGtPcHRpb25zLFxuICBrRmFjdG9yeVxufSA9IHJlcXVpcmUoJy4vbW9jay1zeW1ib2xzJylcbmNvbnN0IE1vY2tDbGllbnQgPSByZXF1aXJlKCcuL21vY2stY2xpZW50JylcbmNvbnN0IE1vY2tQb29sID0gcmVxdWlyZSgnLi9tb2NrLXBvb2wnKVxuY29uc3QgeyBtYXRjaFZhbHVlLCBidWlsZE1vY2tPcHRpb25zIH0gPSByZXF1aXJlKCcuL21vY2stdXRpbHMnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciwgVW5kaWNpRXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IERpc3BhdGNoZXIgPSByZXF1aXJlKCcuLi9kaXNwYXRjaGVyJylcbmNvbnN0IFBsdXJhbGl6ZXIgPSByZXF1aXJlKCcuL3BsdXJhbGl6ZXInKVxuY29uc3QgUGVuZGluZ0ludGVyY2VwdG9yc0Zvcm1hdHRlciA9IHJlcXVpcmUoJy4vcGVuZGluZy1pbnRlcmNlcHRvcnMtZm9ybWF0dGVyJylcblxuY2xhc3MgRmFrZVdlYWtSZWYge1xuICBjb25zdHJ1Y3RvciAodmFsdWUpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWVcbiAgfVxuXG4gIGRlcmVmICgpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZVxuICB9XG59XG5cbmNsYXNzIE1vY2tBZ2VudCBleHRlbmRzIERpc3BhdGNoZXIge1xuICBjb25zdHJ1Y3RvciAob3B0cykge1xuICAgIHN1cGVyKG9wdHMpXG5cbiAgICB0aGlzW2tOZXRDb25uZWN0XSA9IHRydWVcbiAgICB0aGlzW2tJc01vY2tBY3RpdmVdID0gdHJ1ZVxuXG4gICAgLy8gSW5zdGFudGlhdGUgQWdlbnQgYW5kIGVuY2Fwc3VsYXRlXG4gICAgaWYgKChvcHRzICYmIG9wdHMuYWdlbnQgJiYgdHlwZW9mIG9wdHMuYWdlbnQuZGlzcGF0Y2ggIT09ICdmdW5jdGlvbicpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0FyZ3VtZW50IG9wdHMuYWdlbnQgbXVzdCBpbXBsZW1lbnQgQWdlbnQnKVxuICAgIH1cbiAgICBjb25zdCBhZ2VudCA9IG9wdHMgJiYgb3B0cy5hZ2VudCA/IG9wdHMuYWdlbnQgOiBuZXcgQWdlbnQob3B0cylcbiAgICB0aGlzW2tBZ2VudF0gPSBhZ2VudFxuXG4gICAgdGhpc1trQ2xpZW50c10gPSBhZ2VudFtrQ2xpZW50c11cbiAgICB0aGlzW2tPcHRpb25zXSA9IGJ1aWxkTW9ja09wdGlvbnMob3B0cylcbiAgfVxuXG4gIGdldCAob3JpZ2luKSB7XG4gICAgbGV0IGRpc3BhdGNoZXIgPSB0aGlzW2tNb2NrQWdlbnRHZXRdKG9yaWdpbilcblxuICAgIGlmICghZGlzcGF0Y2hlcikge1xuICAgICAgZGlzcGF0Y2hlciA9IHRoaXNba0ZhY3RvcnldKG9yaWdpbilcbiAgICAgIHRoaXNba01vY2tBZ2VudFNldF0ob3JpZ2luLCBkaXNwYXRjaGVyKVxuICAgIH1cbiAgICByZXR1cm4gZGlzcGF0Y2hlclxuICB9XG5cbiAgZGlzcGF0Y2ggKG9wdHMsIGhhbmRsZXIpIHtcbiAgICAvLyBDYWxsIE1vY2tBZ2VudC5nZXQgdG8gcGVyZm9ybSBhZGRpdGlvbmFsIHNldHVwIGJlZm9yZSBkaXNwYXRjaGluZyBhcyBub3JtYWxcbiAgICB0aGlzLmdldChvcHRzLm9yaWdpbilcbiAgICByZXR1cm4gdGhpc1trQWdlbnRdLmRpc3BhdGNoKG9wdHMsIGhhbmRsZXIpXG4gIH1cblxuICBhc3luYyBjbG9zZSAoKSB7XG4gICAgYXdhaXQgdGhpc1trQWdlbnRdLmNsb3NlKClcbiAgICB0aGlzW2tDbGllbnRzXS5jbGVhcigpXG4gIH1cblxuICBkZWFjdGl2YXRlICgpIHtcbiAgICB0aGlzW2tJc01vY2tBY3RpdmVdID0gZmFsc2VcbiAgfVxuXG4gIGFjdGl2YXRlICgpIHtcbiAgICB0aGlzW2tJc01vY2tBY3RpdmVdID0gdHJ1ZVxuICB9XG5cbiAgZW5hYmxlTmV0Q29ubmVjdCAobWF0Y2hlcikge1xuICAgIGlmICh0eXBlb2YgbWF0Y2hlciA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG1hdGNoZXIgPT09ICdmdW5jdGlvbicgfHwgbWF0Y2hlciBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpc1trTmV0Q29ubmVjdF0pKSB7XG4gICAgICAgIHRoaXNba05ldENvbm5lY3RdLnB1c2gobWF0Y2hlcilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXNba05ldENvbm5lY3RdID0gW21hdGNoZXJdXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbWF0Y2hlciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRoaXNba05ldENvbm5lY3RdID0gdHJ1ZVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ1Vuc3VwcG9ydGVkIG1hdGNoZXIuIE11c3QgYmUgb25lIG9mIFN0cmluZ3xGdW5jdGlvbnxSZWdFeHAuJylcbiAgICB9XG4gIH1cblxuICBkaXNhYmxlTmV0Q29ubmVjdCAoKSB7XG4gICAgdGhpc1trTmV0Q29ubmVjdF0gPSBmYWxzZVxuICB9XG5cbiAgLy8gVGhpcyBpcyByZXF1aXJlZCB0byBieXBhc3MgaXNzdWVzIGNhdXNlZCBieSB1c2luZyBnbG9iYWwgc3ltYm9scyAtIHNlZTpcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzE0NDdcbiAgZ2V0IGlzTW9ja0FjdGl2ZSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0lzTW9ja0FjdGl2ZV1cbiAgfVxuXG4gIFtrTW9ja0FnZW50U2V0XSAob3JpZ2luLCBkaXNwYXRjaGVyKSB7XG4gICAgdGhpc1trQ2xpZW50c10uc2V0KG9yaWdpbiwgbmV3IEZha2VXZWFrUmVmKGRpc3BhdGNoZXIpKVxuICB9XG5cbiAgW2tGYWN0b3J5XSAob3JpZ2luKSB7XG4gICAgY29uc3QgbW9ja09wdGlvbnMgPSBPYmplY3QuYXNzaWduKHsgYWdlbnQ6IHRoaXMgfSwgdGhpc1trT3B0aW9uc10pXG4gICAgcmV0dXJuIHRoaXNba09wdGlvbnNdICYmIHRoaXNba09wdGlvbnNdLmNvbm5lY3Rpb25zID09PSAxXG4gICAgICA/IG5ldyBNb2NrQ2xpZW50KG9yaWdpbiwgbW9ja09wdGlvbnMpXG4gICAgICA6IG5ldyBNb2NrUG9vbChvcmlnaW4sIG1vY2tPcHRpb25zKVxuICB9XG5cbiAgW2tNb2NrQWdlbnRHZXRdIChvcmlnaW4pIHtcbiAgICAvLyBGaXJzdCBjaGVjayBpZiB3ZSBjYW4gaW1tZWRpYXRlbHkgZmluZCBpdFxuICAgIGNvbnN0IHJlZiA9IHRoaXNba0NsaWVudHNdLmdldChvcmlnaW4pXG4gICAgaWYgKHJlZikge1xuICAgICAgcmV0dXJuIHJlZi5kZXJlZigpXG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIG9yaWdpbiBpcyBub3QgYSBzdHJpbmcgY3JlYXRlIGEgZHVtbXkgcGFyZW50IHBvb2wgYW5kIHJldHVybiB0byB1c2VyXG4gICAgaWYgKHR5cGVvZiBvcmlnaW4gIT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBkaXNwYXRjaGVyID0gdGhpc1trRmFjdG9yeV0oJ2h0dHA6Ly9sb2NhbGhvc3Q6OTk5OScpXG4gICAgICB0aGlzW2tNb2NrQWdlbnRTZXRdKG9yaWdpbiwgZGlzcGF0Y2hlcilcbiAgICAgIHJldHVybiBkaXNwYXRjaGVyXG4gICAgfVxuXG4gICAgLy8gSWYgd2UgbWF0Y2gsIGNyZWF0ZSBhIHBvb2wgYW5kIGFzc2lnbiB0aGUgc2FtZSBkaXNwYXRjaGVzXG4gICAgZm9yIChjb25zdCBba2V5TWF0Y2hlciwgbm9uRXhwbGljaXRSZWZdIG9mIEFycmF5LmZyb20odGhpc1trQ2xpZW50c10pKSB7XG4gICAgICBjb25zdCBub25FeHBsaWNpdERpc3BhdGNoZXIgPSBub25FeHBsaWNpdFJlZi5kZXJlZigpXG4gICAgICBpZiAobm9uRXhwbGljaXREaXNwYXRjaGVyICYmIHR5cGVvZiBrZXlNYXRjaGVyICE9PSAnc3RyaW5nJyAmJiBtYXRjaFZhbHVlKGtleU1hdGNoZXIsIG9yaWdpbikpIHtcbiAgICAgICAgY29uc3QgZGlzcGF0Y2hlciA9IHRoaXNba0ZhY3RvcnldKG9yaWdpbilcbiAgICAgICAgdGhpc1trTW9ja0FnZW50U2V0XShvcmlnaW4sIGRpc3BhdGNoZXIpXG4gICAgICAgIGRpc3BhdGNoZXJba0Rpc3BhdGNoZXNdID0gbm9uRXhwbGljaXREaXNwYXRjaGVyW2tEaXNwYXRjaGVzXVxuICAgICAgICByZXR1cm4gZGlzcGF0Y2hlclxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIFtrR2V0TmV0Q29ubmVjdF0gKCkge1xuICAgIHJldHVybiB0aGlzW2tOZXRDb25uZWN0XVxuICB9XG5cbiAgcGVuZGluZ0ludGVyY2VwdG9ycyAoKSB7XG4gICAgY29uc3QgbW9ja0FnZW50Q2xpZW50cyA9IHRoaXNba0NsaWVudHNdXG5cbiAgICByZXR1cm4gQXJyYXkuZnJvbShtb2NrQWdlbnRDbGllbnRzLmVudHJpZXMoKSlcbiAgICAgIC5mbGF0TWFwKChbb3JpZ2luLCBzY29wZV0pID0+IHNjb3BlLmRlcmVmKClba0Rpc3BhdGNoZXNdLm1hcChkaXNwYXRjaCA9PiAoeyAuLi5kaXNwYXRjaCwgb3JpZ2luIH0pKSlcbiAgICAgIC5maWx0ZXIoKHsgcGVuZGluZyB9KSA9PiBwZW5kaW5nKVxuICB9XG5cbiAgYXNzZXJ0Tm9QZW5kaW5nSW50ZXJjZXB0b3JzICh7IHBlbmRpbmdJbnRlcmNlcHRvcnNGb3JtYXR0ZXIgPSBuZXcgUGVuZGluZ0ludGVyY2VwdG9yc0Zvcm1hdHRlcigpIH0gPSB7fSkge1xuICAgIGNvbnN0IHBlbmRpbmcgPSB0aGlzLnBlbmRpbmdJbnRlcmNlcHRvcnMoKVxuXG4gICAgaWYgKHBlbmRpbmcubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBwbHVyYWxpemVyID0gbmV3IFBsdXJhbGl6ZXIoJ2ludGVyY2VwdG9yJywgJ2ludGVyY2VwdG9ycycpLnBsdXJhbGl6ZShwZW5kaW5nLmxlbmd0aClcblxuICAgIHRocm93IG5ldyBVbmRpY2lFcnJvcihgXG4ke3BsdXJhbGl6ZXIuY291bnR9ICR7cGx1cmFsaXplci5ub3VufSAke3BsdXJhbGl6ZXIuaXN9IHBlbmRpbmc6XG5cbiR7cGVuZGluZ0ludGVyY2VwdG9yc0Zvcm1hdHRlci5mb3JtYXQocGVuZGluZyl9XG5gLnRyaW0oKSlcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IE1vY2tBZ2VudFxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBrUHJveHksIGtDbG9zZSwga0Rlc3Ryb3ksIGtJbnRlcmNlcHRvcnMgfSA9IHJlcXVpcmUoJy4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsgVVJMIH0gPSByZXF1aXJlKCd1cmwnKVxuY29uc3QgQWdlbnQgPSByZXF1aXJlKCcuL2FnZW50JylcbmNvbnN0IFBvb2wgPSByZXF1aXJlKCcuL3Bvb2wnKVxuY29uc3QgRGlzcGF0Y2hlckJhc2UgPSByZXF1aXJlKCcuL2Rpc3BhdGNoZXItYmFzZScpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yLCBSZXF1ZXN0QWJvcnRlZEVycm9yIH0gPSByZXF1aXJlKCcuL2NvcmUvZXJyb3JzJylcbmNvbnN0IGJ1aWxkQ29ubmVjdG9yID0gcmVxdWlyZSgnLi9jb3JlL2Nvbm5lY3QnKVxuXG5jb25zdCBrQWdlbnQgPSBTeW1ib2woJ3Byb3h5IGFnZW50JylcbmNvbnN0IGtDbGllbnQgPSBTeW1ib2woJ3Byb3h5IGNsaWVudCcpXG5jb25zdCBrUHJveHlIZWFkZXJzID0gU3ltYm9sKCdwcm94eSBoZWFkZXJzJylcbmNvbnN0IGtSZXF1ZXN0VGxzID0gU3ltYm9sKCdyZXF1ZXN0IHRscyBzZXR0aW5ncycpXG5jb25zdCBrUHJveHlUbHMgPSBTeW1ib2woJ3Byb3h5IHRscyBzZXR0aW5ncycpXG5jb25zdCBrQ29ubmVjdEVuZHBvaW50ID0gU3ltYm9sKCdjb25uZWN0IGVuZHBvaW50IGZ1bmN0aW9uJylcblxuZnVuY3Rpb24gZGVmYXVsdFByb3RvY29sUG9ydCAocHJvdG9jb2wpIHtcbiAgcmV0dXJuIHByb3RvY29sID09PSAnaHR0cHM6JyA/IDQ0MyA6IDgwXG59XG5cbmZ1bmN0aW9uIGJ1aWxkUHJveHlPcHRpb25zIChvcHRzKSB7XG4gIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ3N0cmluZycpIHtcbiAgICBvcHRzID0geyB1cmk6IG9wdHMgfVxuICB9XG5cbiAgaWYgKCFvcHRzIHx8ICFvcHRzLnVyaSkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignUHJveHkgb3B0cy51cmkgaXMgbWFuZGF0b3J5JylcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdXJpOiBvcHRzLnVyaSxcbiAgICBwcm90b2NvbDogb3B0cy5wcm90b2NvbCB8fCAnaHR0cHMnXG4gIH1cbn1cblxuZnVuY3Rpb24gZGVmYXVsdEZhY3RvcnkgKG9yaWdpbiwgb3B0cykge1xuICByZXR1cm4gbmV3IFBvb2wob3JpZ2luLCBvcHRzKVxufVxuXG5jbGFzcyBQcm94eUFnZW50IGV4dGVuZHMgRGlzcGF0Y2hlckJhc2Uge1xuICBjb25zdHJ1Y3RvciAob3B0cykge1xuICAgIHN1cGVyKG9wdHMpXG4gICAgdGhpc1trUHJveHldID0gYnVpbGRQcm94eU9wdGlvbnMob3B0cylcbiAgICB0aGlzW2tBZ2VudF0gPSBuZXcgQWdlbnQob3B0cylcbiAgICB0aGlzW2tJbnRlcmNlcHRvcnNdID0gb3B0cy5pbnRlcmNlcHRvcnMgJiYgb3B0cy5pbnRlcmNlcHRvcnMuUHJveHlBZ2VudCAmJiBBcnJheS5pc0FycmF5KG9wdHMuaW50ZXJjZXB0b3JzLlByb3h5QWdlbnQpXG4gICAgICA/IG9wdHMuaW50ZXJjZXB0b3JzLlByb3h5QWdlbnRcbiAgICAgIDogW11cblxuICAgIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG9wdHMgPSB7IHVyaTogb3B0cyB9XG4gICAgfVxuXG4gICAgaWYgKCFvcHRzIHx8ICFvcHRzLnVyaSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdQcm94eSBvcHRzLnVyaSBpcyBtYW5kYXRvcnknKVxuICAgIH1cblxuICAgIGNvbnN0IHsgY2xpZW50RmFjdG9yeSA9IGRlZmF1bHRGYWN0b3J5IH0gPSBvcHRzXG5cbiAgICBpZiAodHlwZW9mIGNsaWVudEZhY3RvcnkgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignUHJveHkgb3B0cy5jbGllbnRGYWN0b3J5IG11c3QgYmUgYSBmdW5jdGlvbi4nKVxuICAgIH1cblxuICAgIHRoaXNba1JlcXVlc3RUbHNdID0gb3B0cy5yZXF1ZXN0VGxzXG4gICAgdGhpc1trUHJveHlUbHNdID0gb3B0cy5wcm94eVRsc1xuICAgIHRoaXNba1Byb3h5SGVhZGVyc10gPSBvcHRzLmhlYWRlcnMgfHwge31cblxuICAgIGNvbnN0IHJlc29sdmVkVXJsID0gbmV3IFVSTChvcHRzLnVyaSlcbiAgICBjb25zdCB7IG9yaWdpbiwgcG9ydCwgaG9zdCwgdXNlcm5hbWUsIHBhc3N3b3JkIH0gPSByZXNvbHZlZFVybFxuXG4gICAgaWYgKG9wdHMuYXV0aCAmJiBvcHRzLnRva2VuKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ29wdHMuYXV0aCBjYW5ub3QgYmUgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIG9wdHMudG9rZW4nKVxuICAgIH0gZWxzZSBpZiAob3B0cy5hdXRoKSB7XG4gICAgICAvKiBAZGVwcmVjYXRlZCBpbiBmYXZvdXIgb2Ygb3B0cy50b2tlbiAqL1xuICAgICAgdGhpc1trUHJveHlIZWFkZXJzXVsncHJveHktYXV0aG9yaXphdGlvbiddID0gYEJhc2ljICR7b3B0cy5hdXRofWBcbiAgICB9IGVsc2UgaWYgKG9wdHMudG9rZW4pIHtcbiAgICAgIHRoaXNba1Byb3h5SGVhZGVyc11bJ3Byb3h5LWF1dGhvcml6YXRpb24nXSA9IG9wdHMudG9rZW5cbiAgICB9IGVsc2UgaWYgKHVzZXJuYW1lICYmIHBhc3N3b3JkKSB7XG4gICAgICB0aGlzW2tQcm94eUhlYWRlcnNdWydwcm94eS1hdXRob3JpemF0aW9uJ10gPSBgQmFzaWMgJHtCdWZmZXIuZnJvbShgJHtkZWNvZGVVUklDb21wb25lbnQodXNlcm5hbWUpfToke2RlY29kZVVSSUNvbXBvbmVudChwYXNzd29yZCl9YCkudG9TdHJpbmcoJ2Jhc2U2NCcpfWBcbiAgICB9XG5cbiAgICBjb25zdCBjb25uZWN0ID0gYnVpbGRDb25uZWN0b3IoeyAuLi5vcHRzLnByb3h5VGxzIH0pXG4gICAgdGhpc1trQ29ubmVjdEVuZHBvaW50XSA9IGJ1aWxkQ29ubmVjdG9yKHsgLi4ub3B0cy5yZXF1ZXN0VGxzIH0pXG4gICAgdGhpc1trQ2xpZW50XSA9IGNsaWVudEZhY3RvcnkocmVzb2x2ZWRVcmwsIHsgY29ubmVjdCB9KVxuICAgIHRoaXNba0FnZW50XSA9IG5ldyBBZ2VudCh7XG4gICAgICAuLi5vcHRzLFxuICAgICAgY29ubmVjdDogYXN5bmMgKG9wdHMsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGxldCByZXF1ZXN0ZWRIb3N0ID0gb3B0cy5ob3N0XG4gICAgICAgIGlmICghb3B0cy5wb3J0KSB7XG4gICAgICAgICAgcmVxdWVzdGVkSG9zdCArPSBgOiR7ZGVmYXVsdFByb3RvY29sUG9ydChvcHRzLnByb3RvY29sKX1gXG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB7IHNvY2tldCwgc3RhdHVzQ29kZSB9ID0gYXdhaXQgdGhpc1trQ2xpZW50XS5jb25uZWN0KHtcbiAgICAgICAgICAgIG9yaWdpbixcbiAgICAgICAgICAgIHBvcnQsXG4gICAgICAgICAgICBwYXRoOiByZXF1ZXN0ZWRIb3N0LFxuICAgICAgICAgICAgc2lnbmFsOiBvcHRzLnNpZ25hbCxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgLi4udGhpc1trUHJveHlIZWFkZXJzXSxcbiAgICAgICAgICAgICAgaG9zdFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICAgaWYgKHN0YXR1c0NvZGUgIT09IDIwMCkge1xuICAgICAgICAgICAgc29ja2V0Lm9uKCdlcnJvcicsICgpID0+IHt9KS5kZXN0cm95KClcbiAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKGBQcm94eSByZXNwb25zZSAoJHtzdGF0dXNDb2RlfSkgIT09IDIwMCB3aGVuIEhUVFAgVHVubmVsaW5nYCkpXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChvcHRzLnByb3RvY29sICE9PSAnaHR0cHM6Jykge1xuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgc29ja2V0KVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICAgIGxldCBzZXJ2ZXJuYW1lXG4gICAgICAgICAgaWYgKHRoaXNba1JlcXVlc3RUbHNdKSB7XG4gICAgICAgICAgICBzZXJ2ZXJuYW1lID0gdGhpc1trUmVxdWVzdFRsc10uc2VydmVybmFtZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXJ2ZXJuYW1lID0gb3B0cy5zZXJ2ZXJuYW1lXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXNba0Nvbm5lY3RFbmRwb2ludF0oeyAuLi5vcHRzLCBzZXJ2ZXJuYW1lLCBodHRwU29ja2V0OiBzb2NrZXQgfSwgY2FsbGJhY2spXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNhbGxiYWNrKGVycilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBkaXNwYXRjaCAob3B0cywgaGFuZGxlcikge1xuICAgIGNvbnN0IHsgaG9zdCB9ID0gbmV3IFVSTChvcHRzLm9yaWdpbilcbiAgICBjb25zdCBoZWFkZXJzID0gYnVpbGRIZWFkZXJzKG9wdHMuaGVhZGVycylcbiAgICB0aHJvd0lmUHJveHlBdXRoSXNTZW50KGhlYWRlcnMpXG4gICAgcmV0dXJuIHRoaXNba0FnZW50XS5kaXNwYXRjaChcbiAgICAgIHtcbiAgICAgICAgLi4ub3B0cyxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIC4uLmhlYWRlcnMsXG4gICAgICAgICAgaG9zdFxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgaGFuZGxlclxuICAgIClcbiAgfVxuXG4gIGFzeW5jIFtrQ2xvc2VdICgpIHtcbiAgICBhd2FpdCB0aGlzW2tBZ2VudF0uY2xvc2UoKVxuICAgIGF3YWl0IHRoaXNba0NsaWVudF0uY2xvc2UoKVxuICB9XG5cbiAgYXN5bmMgW2tEZXN0cm95XSAoKSB7XG4gICAgYXdhaXQgdGhpc1trQWdlbnRdLmRlc3Ryb3koKVxuICAgIGF3YWl0IHRoaXNba0NsaWVudF0uZGVzdHJveSgpXG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ1tdIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nPn0gaGVhZGVyc1xuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHN0cmluZz59XG4gKi9cbmZ1bmN0aW9uIGJ1aWxkSGVhZGVycyAoaGVhZGVycykge1xuICAvLyBXaGVuIHVzaW5nIHVuZGljaS5mZXRjaCwgdGhlIGhlYWRlcnMgbGlzdCBpcyBzdG9yZWRcbiAgLy8gYXMgYW4gYXJyYXkuXG4gIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSAqL1xuICAgIGNvbnN0IGhlYWRlcnNQYWlyID0ge31cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGVhZGVycy5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgaGVhZGVyc1BhaXJbaGVhZGVyc1tpXV0gPSBoZWFkZXJzW2kgKyAxXVxuICAgIH1cblxuICAgIHJldHVybiBoZWFkZXJzUGFpclxuICB9XG5cbiAgcmV0dXJuIGhlYWRlcnNcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIHN0cmluZz59IGhlYWRlcnNcbiAqXG4gKiBQcmV2aW91cyB2ZXJzaW9ucyBvZiBQcm94eUFnZW50IHN1Z2dlc3RzIHRoZSBQcm94eS1BdXRob3JpemF0aW9uIGluIHJlcXVlc3QgaGVhZGVyc1xuICogTmV2ZXJ0aGVsZXNzLCBpdCB3YXMgY2hhbmdlZCBhbmQgdG8gYXZvaWQgYSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5IGJ5IGVuZCB1c2Vyc1xuICogdGhpcyBjaGVjayB3YXMgY3JlYXRlZC5cbiAqIEl0IHNob3VsZCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24gZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnNcbiAqL1xuZnVuY3Rpb24gdGhyb3dJZlByb3h5QXV0aElzU2VudCAoaGVhZGVycykge1xuICBjb25zdCBleGlzdFByb3h5QXV0aCA9IGhlYWRlcnMgJiYgT2JqZWN0LmtleXMoaGVhZGVycylcbiAgICAuZmluZCgoa2V5KSA9PiBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3Byb3h5LWF1dGhvcml6YXRpb24nKVxuICBpZiAoZXhpc3RQcm94eUF1dGgpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ1Byb3h5LUF1dGhvcml6YXRpb24gc2hvdWxkIGJlIHNlbnQgaW4gUHJveHlBZ2VudCBjb25zdHJ1Y3RvcicpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBQcm94eUFnZW50XG4iLAogICAgImNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5cbmNvbnN0IHsga1JldHJ5SGFuZGxlckRlZmF1bHRSZXRyeSB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsgUmVxdWVzdFJldHJ5RXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHsgaXNEaXN0dXJiZWQsIHBhcnNlSGVhZGVycywgcGFyc2VSYW5nZUhlYWRlciB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcblxuZnVuY3Rpb24gY2FsY3VsYXRlUmV0cnlBZnRlckhlYWRlciAocmV0cnlBZnRlcikge1xuICBjb25zdCBjdXJyZW50ID0gRGF0ZS5ub3coKVxuICBjb25zdCBkaWZmID0gbmV3IERhdGUocmV0cnlBZnRlcikuZ2V0VGltZSgpIC0gY3VycmVudFxuXG4gIHJldHVybiBkaWZmXG59XG5cbmNsYXNzIFJldHJ5SGFuZGxlciB7XG4gIGNvbnN0cnVjdG9yIChvcHRzLCBoYW5kbGVycykge1xuICAgIGNvbnN0IHsgcmV0cnlPcHRpb25zLCAuLi5kaXNwYXRjaE9wdHMgfSA9IG9wdHNcbiAgICBjb25zdCB7XG4gICAgICAvLyBSZXRyeSBzY29wZWRcbiAgICAgIHJldHJ5OiByZXRyeUZuLFxuICAgICAgbWF4UmV0cmllcyxcbiAgICAgIG1heFRpbWVvdXQsXG4gICAgICBtaW5UaW1lb3V0LFxuICAgICAgdGltZW91dEZhY3RvcixcbiAgICAgIC8vIFJlc3BvbnNlIHNjb3BlZFxuICAgICAgbWV0aG9kcyxcbiAgICAgIGVycm9yQ29kZXMsXG4gICAgICByZXRyeUFmdGVyLFxuICAgICAgc3RhdHVzQ29kZXNcbiAgICB9ID0gcmV0cnlPcHRpb25zID8/IHt9XG5cbiAgICB0aGlzLmRpc3BhdGNoID0gaGFuZGxlcnMuZGlzcGF0Y2hcbiAgICB0aGlzLmhhbmRsZXIgPSBoYW5kbGVycy5oYW5kbGVyXG4gICAgdGhpcy5vcHRzID0gZGlzcGF0Y2hPcHRzXG4gICAgdGhpcy5hYm9ydCA9IG51bGxcbiAgICB0aGlzLmFib3J0ZWQgPSBmYWxzZVxuICAgIHRoaXMucmV0cnlPcHRzID0ge1xuICAgICAgcmV0cnk6IHJldHJ5Rm4gPz8gUmV0cnlIYW5kbGVyW2tSZXRyeUhhbmRsZXJEZWZhdWx0UmV0cnldLFxuICAgICAgcmV0cnlBZnRlcjogcmV0cnlBZnRlciA/PyB0cnVlLFxuICAgICAgbWF4VGltZW91dDogbWF4VGltZW91dCA/PyAzMCAqIDEwMDAsIC8vIDMwcyxcbiAgICAgIHRpbWVvdXQ6IG1pblRpbWVvdXQgPz8gNTAwLCAvLyAuNXNcbiAgICAgIHRpbWVvdXRGYWN0b3I6IHRpbWVvdXRGYWN0b3IgPz8gMixcbiAgICAgIG1heFJldHJpZXM6IG1heFJldHJpZXMgPz8gNSxcbiAgICAgIC8vIFdoYXQgZXJyb3JzIHdlIHNob3VsZCByZXRyeVxuICAgICAgbWV0aG9kczogbWV0aG9kcyA/PyBbJ0dFVCcsICdIRUFEJywgJ09QVElPTlMnLCAnUFVUJywgJ0RFTEVURScsICdUUkFDRSddLFxuICAgICAgLy8gSW5kaWNhdGVzIHdoaWNoIGVycm9ycyB0byByZXRyeVxuICAgICAgc3RhdHVzQ29kZXM6IHN0YXR1c0NvZGVzID8/IFs1MDAsIDUwMiwgNTAzLCA1MDQsIDQyOV0sXG4gICAgICAvLyBMaXN0IG9mIGVycm9ycyB0byByZXRyeVxuICAgICAgZXJyb3JDb2RlczogZXJyb3JDb2RlcyA/PyBbXG4gICAgICAgICdFQ09OTlJFU0VUJyxcbiAgICAgICAgJ0VDT05OUkVGVVNFRCcsXG4gICAgICAgICdFTk9URk9VTkQnLFxuICAgICAgICAnRU5FVERPV04nLFxuICAgICAgICAnRU5FVFVOUkVBQ0gnLFxuICAgICAgICAnRUhPU1RET1dOJyxcbiAgICAgICAgJ0VIT1NUVU5SRUFDSCcsXG4gICAgICAgICdFUElQRSdcbiAgICAgIF1cbiAgICB9XG5cbiAgICB0aGlzLnJldHJ5Q291bnQgPSAwXG4gICAgdGhpcy5zdGFydCA9IDBcbiAgICB0aGlzLmVuZCA9IG51bGxcbiAgICB0aGlzLmV0YWcgPSBudWxsXG4gICAgdGhpcy5yZXN1bWUgPSBudWxsXG5cbiAgICAvLyBIYW5kbGUgcG9zc2libGUgb25Db25uZWN0IGR1cGxpY2F0aW9uXG4gICAgdGhpcy5oYW5kbGVyLm9uQ29ubmVjdChyZWFzb24gPT4ge1xuICAgICAgdGhpcy5hYm9ydGVkID0gdHJ1ZVxuICAgICAgaWYgKHRoaXMuYWJvcnQpIHtcbiAgICAgICAgdGhpcy5hYm9ydChyZWFzb24pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlYXNvbiA9IHJlYXNvblxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBvblJlcXVlc3RTZW50ICgpIHtcbiAgICBpZiAodGhpcy5oYW5kbGVyLm9uUmVxdWVzdFNlbnQpIHtcbiAgICAgIHRoaXMuaGFuZGxlci5vblJlcXVlc3RTZW50KClcbiAgICB9XG4gIH1cblxuICBvblVwZ3JhZGUgKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHNvY2tldCkge1xuICAgIGlmICh0aGlzLmhhbmRsZXIub25VcGdyYWRlKSB7XG4gICAgICB0aGlzLmhhbmRsZXIub25VcGdyYWRlKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHNvY2tldClcbiAgICB9XG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0KSB7XG4gICAgaWYgKHRoaXMuYWJvcnRlZCkge1xuICAgICAgYWJvcnQodGhpcy5yZWFzb24pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIH1cbiAgfVxuXG4gIG9uQm9keVNlbnQgKGNodW5rKSB7XG4gICAgaWYgKHRoaXMuaGFuZGxlci5vbkJvZHlTZW50KSByZXR1cm4gdGhpcy5oYW5kbGVyLm9uQm9keVNlbnQoY2h1bmspXG4gIH1cblxuICBzdGF0aWMgW2tSZXRyeUhhbmRsZXJEZWZhdWx0UmV0cnldIChlcnIsIHsgc3RhdGUsIG9wdHMgfSwgY2IpIHtcbiAgICBjb25zdCB7IHN0YXR1c0NvZGUsIGNvZGUsIGhlYWRlcnMgfSA9IGVyclxuICAgIGNvbnN0IHsgbWV0aG9kLCByZXRyeU9wdGlvbnMgfSA9IG9wdHNcbiAgICBjb25zdCB7XG4gICAgICBtYXhSZXRyaWVzLFxuICAgICAgdGltZW91dCxcbiAgICAgIG1heFRpbWVvdXQsXG4gICAgICB0aW1lb3V0RmFjdG9yLFxuICAgICAgc3RhdHVzQ29kZXMsXG4gICAgICBlcnJvckNvZGVzLFxuICAgICAgbWV0aG9kc1xuICAgIH0gPSByZXRyeU9wdGlvbnNcbiAgICBsZXQgeyBjb3VudGVyLCBjdXJyZW50VGltZW91dCB9ID0gc3RhdGVcblxuICAgIGN1cnJlbnRUaW1lb3V0ID1cbiAgICAgIGN1cnJlbnRUaW1lb3V0ICE9IG51bGwgJiYgY3VycmVudFRpbWVvdXQgPiAwID8gY3VycmVudFRpbWVvdXQgOiB0aW1lb3V0XG5cbiAgICAvLyBBbnkgY29kZSB0aGF0IGlzIG5vdCBhIFVuZGljaSdzIG9yaWdpbmF0ZWQgYW5kIGFsbG93ZWQgdG8gcmV0cnlcbiAgICBpZiAoXG4gICAgICBjb2RlICYmXG4gICAgICBjb2RlICE9PSAnVU5EX0VSUl9SRVFfUkVUUlknICYmXG4gICAgICBjb2RlICE9PSAnVU5EX0VSUl9TT0NLRVQnICYmXG4gICAgICAhZXJyb3JDb2Rlcy5pbmNsdWRlcyhjb2RlKVxuICAgICkge1xuICAgICAgY2IoZXJyKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gSWYgYSBzZXQgb2YgbWV0aG9kIGFyZSBwcm92aWRlZCBhbmQgdGhlIGN1cnJlbnQgbWV0aG9kIGlzIG5vdCBpbiB0aGUgbGlzdFxuICAgIGlmIChBcnJheS5pc0FycmF5KG1ldGhvZHMpICYmICFtZXRob2RzLmluY2x1ZGVzKG1ldGhvZCkpIHtcbiAgICAgIGNiKGVycilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIElmIGEgc2V0IG9mIHN0YXR1cyBjb2RlIGFyZSBwcm92aWRlZCBhbmQgdGhlIGN1cnJlbnQgc3RhdHVzIGNvZGUgaXMgbm90IGluIHRoZSBsaXN0XG4gICAgaWYgKFxuICAgICAgc3RhdHVzQ29kZSAhPSBudWxsICYmXG4gICAgICBBcnJheS5pc0FycmF5KHN0YXR1c0NvZGVzKSAmJlxuICAgICAgIXN0YXR1c0NvZGVzLmluY2x1ZGVzKHN0YXR1c0NvZGUpXG4gICAgKSB7XG4gICAgICBjYihlcnIpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBJZiB3ZSByZWFjaGVkIHRoZSBtYXggbnVtYmVyIG9mIHJldHJpZXNcbiAgICBpZiAoY291bnRlciA+IG1heFJldHJpZXMpIHtcbiAgICAgIGNiKGVycilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGxldCByZXRyeUFmdGVySGVhZGVyID0gaGVhZGVycyAhPSBudWxsICYmIGhlYWRlcnNbJ3JldHJ5LWFmdGVyJ11cbiAgICBpZiAocmV0cnlBZnRlckhlYWRlcikge1xuICAgICAgcmV0cnlBZnRlckhlYWRlciA9IE51bWJlcihyZXRyeUFmdGVySGVhZGVyKVxuICAgICAgcmV0cnlBZnRlckhlYWRlciA9IGlzTmFOKHJldHJ5QWZ0ZXJIZWFkZXIpXG4gICAgICAgID8gY2FsY3VsYXRlUmV0cnlBZnRlckhlYWRlcihyZXRyeUFmdGVySGVhZGVyKVxuICAgICAgICA6IHJldHJ5QWZ0ZXJIZWFkZXIgKiAxZTMgLy8gUmV0cnktQWZ0ZXIgaXMgaW4gc2Vjb25kc1xuICAgIH1cblxuICAgIGNvbnN0IHJldHJ5VGltZW91dCA9XG4gICAgICByZXRyeUFmdGVySGVhZGVyID4gMFxuICAgICAgICA/IE1hdGgubWluKHJldHJ5QWZ0ZXJIZWFkZXIsIG1heFRpbWVvdXQpXG4gICAgICAgIDogTWF0aC5taW4oY3VycmVudFRpbWVvdXQgKiB0aW1lb3V0RmFjdG9yICoqIGNvdW50ZXIsIG1heFRpbWVvdXQpXG5cbiAgICBzdGF0ZS5jdXJyZW50VGltZW91dCA9IHJldHJ5VGltZW91dFxuXG4gICAgc2V0VGltZW91dCgoKSA9PiBjYihudWxsKSwgcmV0cnlUaW1lb3V0KVxuICB9XG5cbiAgb25IZWFkZXJzIChzdGF0dXNDb2RlLCByYXdIZWFkZXJzLCByZXN1bWUsIHN0YXR1c01lc3NhZ2UpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gcGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpXG5cbiAgICB0aGlzLnJldHJ5Q291bnQgKz0gMVxuXG4gICAgaWYgKHN0YXR1c0NvZGUgPj0gMzAwKSB7XG4gICAgICB0aGlzLmFib3J0KFxuICAgICAgICBuZXcgUmVxdWVzdFJldHJ5RXJyb3IoJ1JlcXVlc3QgZmFpbGVkJywgc3RhdHVzQ29kZSwge1xuICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgY291bnQ6IHRoaXMucmV0cnlDb3VudFxuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgLy8gQ2hlY2twb2ludCBmb3IgcmVzdW1lIGZyb20gd2hlcmUgd2UgbGVmdCBpdFxuICAgIGlmICh0aGlzLnJlc3VtZSAhPSBudWxsKSB7XG4gICAgICB0aGlzLnJlc3VtZSA9IG51bGxcblxuICAgICAgaWYgKHN0YXR1c0NvZGUgIT09IDIwNikge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuXG4gICAgICBjb25zdCBjb250ZW50UmFuZ2UgPSBwYXJzZVJhbmdlSGVhZGVyKGhlYWRlcnNbJ2NvbnRlbnQtcmFuZ2UnXSlcbiAgICAgIC8vIElmIG5vIGNvbnRlbnQgcmFuZ2VcbiAgICAgIGlmICghY29udGVudFJhbmdlKSB7XG4gICAgICAgIHRoaXMuYWJvcnQoXG4gICAgICAgICAgbmV3IFJlcXVlc3RSZXRyeUVycm9yKCdDb250ZW50LVJhbmdlIG1pc21hdGNoJywgc3RhdHVzQ29kZSwge1xuICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICAgIGNvdW50OiB0aGlzLnJldHJ5Q291bnRcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuXG4gICAgICAvLyBMZXQncyBzdGFydCB3aXRoIGEgd2VhayBldGFnIGNoZWNrXG4gICAgICBpZiAodGhpcy5ldGFnICE9IG51bGwgJiYgdGhpcy5ldGFnICE9PSBoZWFkZXJzLmV0YWcpIHtcbiAgICAgICAgdGhpcy5hYm9ydChcbiAgICAgICAgICBuZXcgUmVxdWVzdFJldHJ5RXJyb3IoJ0VUYWcgbWlzbWF0Y2gnLCBzdGF0dXNDb2RlLCB7XG4gICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgICAgY291bnQ6IHRoaXMucmV0cnlDb3VudFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgc3RhcnQsIHNpemUsIGVuZCA9IHNpemUgfSA9IGNvbnRlbnRSYW5nZVxuXG4gICAgICBhc3NlcnQodGhpcy5zdGFydCA9PT0gc3RhcnQsICdjb250ZW50LXJhbmdlIG1pc21hdGNoJylcbiAgICAgIGFzc2VydCh0aGlzLmVuZCA9PSBudWxsIHx8IHRoaXMuZW5kID09PSBlbmQsICdjb250ZW50LXJhbmdlIG1pc21hdGNoJylcblxuICAgICAgdGhpcy5yZXN1bWUgPSByZXN1bWVcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZW5kID09IG51bGwpIHtcbiAgICAgIGlmIChzdGF0dXNDb2RlID09PSAyMDYpIHtcbiAgICAgICAgLy8gRmlyc3QgdGltZSB3ZSByZWNlaXZlIDIwNlxuICAgICAgICBjb25zdCByYW5nZSA9IHBhcnNlUmFuZ2VIZWFkZXIoaGVhZGVyc1snY29udGVudC1yYW5nZSddKVxuXG4gICAgICAgIGlmIChyYW5nZSA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkhlYWRlcnMoXG4gICAgICAgICAgICBzdGF0dXNDb2RlLFxuICAgICAgICAgICAgcmF3SGVhZGVycyxcbiAgICAgICAgICAgIHJlc3VtZSxcbiAgICAgICAgICAgIHN0YXR1c01lc3NhZ2VcbiAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IHN0YXJ0LCBzaXplLCBlbmQgPSBzaXplIH0gPSByYW5nZVxuXG4gICAgICAgIGFzc2VydChcbiAgICAgICAgICBzdGFydCAhPSBudWxsICYmIE51bWJlci5pc0Zpbml0ZShzdGFydCkgJiYgdGhpcy5zdGFydCAhPT0gc3RhcnQsXG4gICAgICAgICAgJ2NvbnRlbnQtcmFuZ2UgbWlzbWF0Y2gnXG4gICAgICAgIClcbiAgICAgICAgYXNzZXJ0KE51bWJlci5pc0Zpbml0ZShzdGFydCkpXG4gICAgICAgIGFzc2VydChcbiAgICAgICAgICBlbmQgIT0gbnVsbCAmJiBOdW1iZXIuaXNGaW5pdGUoZW5kKSAmJiB0aGlzLmVuZCAhPT0gZW5kLFxuICAgICAgICAgICdpbnZhbGlkIGNvbnRlbnQtbGVuZ3RoJ1xuICAgICAgICApXG5cbiAgICAgICAgdGhpcy5zdGFydCA9IHN0YXJ0XG4gICAgICAgIHRoaXMuZW5kID0gZW5kXG4gICAgICB9XG5cbiAgICAgIC8vIFdlIG1ha2Ugb3VyIGJlc3QgdG8gY2hlY2twb2ludCB0aGUgYm9keSBmb3IgZnVydGhlciByYW5nZSBoZWFkZXJzXG4gICAgICBpZiAodGhpcy5lbmQgPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBjb250ZW50TGVuZ3RoID0gaGVhZGVyc1snY29udGVudC1sZW5ndGgnXVxuICAgICAgICB0aGlzLmVuZCA9IGNvbnRlbnRMZW5ndGggIT0gbnVsbCA/IE51bWJlcihjb250ZW50TGVuZ3RoKSA6IG51bGxcbiAgICAgIH1cblxuICAgICAgYXNzZXJ0KE51bWJlci5pc0Zpbml0ZSh0aGlzLnN0YXJ0KSlcbiAgICAgIGFzc2VydChcbiAgICAgICAgdGhpcy5lbmQgPT0gbnVsbCB8fCBOdW1iZXIuaXNGaW5pdGUodGhpcy5lbmQpLFxuICAgICAgICAnaW52YWxpZCBjb250ZW50LWxlbmd0aCdcbiAgICAgIClcblxuICAgICAgdGhpcy5yZXN1bWUgPSByZXN1bWVcbiAgICAgIHRoaXMuZXRhZyA9IGhlYWRlcnMuZXRhZyAhPSBudWxsID8gaGVhZGVycy5ldGFnIDogbnVsbFxuXG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uSGVhZGVycyhcbiAgICAgICAgc3RhdHVzQ29kZSxcbiAgICAgICAgcmF3SGVhZGVycyxcbiAgICAgICAgcmVzdW1lLFxuICAgICAgICBzdGF0dXNNZXNzYWdlXG4gICAgICApXG4gICAgfVxuXG4gICAgY29uc3QgZXJyID0gbmV3IFJlcXVlc3RSZXRyeUVycm9yKCdSZXF1ZXN0IGZhaWxlZCcsIHN0YXR1c0NvZGUsIHtcbiAgICAgIGhlYWRlcnMsXG4gICAgICBjb3VudDogdGhpcy5yZXRyeUNvdW50XG4gICAgfSlcblxuICAgIHRoaXMuYWJvcnQoZXJyKVxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBvbkRhdGEgKGNodW5rKSB7XG4gICAgdGhpcy5zdGFydCArPSBjaHVuay5sZW5ndGhcblxuICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25EYXRhKGNodW5rKVxuICB9XG5cbiAgb25Db21wbGV0ZSAocmF3VHJhaWxlcnMpIHtcbiAgICB0aGlzLnJldHJ5Q291bnQgPSAwXG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkNvbXBsZXRlKHJhd1RyYWlsZXJzKVxuICB9XG5cbiAgb25FcnJvciAoZXJyKSB7XG4gICAgaWYgKHRoaXMuYWJvcnRlZCB8fCBpc0Rpc3R1cmJlZCh0aGlzLm9wdHMuYm9keSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25FcnJvcihlcnIpXG4gICAgfVxuXG4gICAgdGhpcy5yZXRyeU9wdHMucmV0cnkoXG4gICAgICBlcnIsXG4gICAgICB7XG4gICAgICAgIHN0YXRlOiB7IGNvdW50ZXI6IHRoaXMucmV0cnlDb3VudCsrLCBjdXJyZW50VGltZW91dDogdGhpcy5yZXRyeUFmdGVyIH0sXG4gICAgICAgIG9wdHM6IHsgcmV0cnlPcHRpb25zOiB0aGlzLnJldHJ5T3B0cywgLi4udGhpcy5vcHRzIH1cbiAgICAgIH0sXG4gICAgICBvblJldHJ5LmJpbmQodGhpcylcbiAgICApXG5cbiAgICBmdW5jdGlvbiBvblJldHJ5IChlcnIpIHtcbiAgICAgIGlmIChlcnIgIT0gbnVsbCB8fCB0aGlzLmFib3J0ZWQgfHwgaXNEaXN0dXJiZWQodGhpcy5vcHRzLmJvZHkpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25FcnJvcihlcnIpXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnN0YXJ0ICE9PSAwKSB7XG4gICAgICAgIHRoaXMub3B0cyA9IHtcbiAgICAgICAgICAuLi50aGlzLm9wdHMsXG4gICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgLi4udGhpcy5vcHRzLmhlYWRlcnMsXG4gICAgICAgICAgICByYW5nZTogYGJ5dGVzPSR7dGhpcy5zdGFydH0tJHt0aGlzLmVuZCA/PyAnJ31gXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2godGhpcy5vcHRzLCB0aGlzKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlci5vbkVycm9yKGVycilcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBSZXRyeUhhbmRsZXJcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbi8vIFdlIGluY2x1ZGUgYSB2ZXJzaW9uIG51bWJlciBmb3IgdGhlIERpc3BhdGNoZXIgQVBJLiBJbiBjYXNlIG9mIGJyZWFraW5nIGNoYW5nZXMsXG4vLyB0aGlzIHZlcnNpb24gbnVtYmVyIG11c3QgYmUgaW5jcmVhc2VkIHRvIGF2b2lkIGNvbmZsaWN0cy5cbmNvbnN0IGdsb2JhbERpc3BhdGNoZXIgPSBTeW1ib2wuZm9yKCd1bmRpY2kuZ2xvYmFsRGlzcGF0Y2hlci4xJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IHJlcXVpcmUoJy4vY29yZS9lcnJvcnMnKVxuY29uc3QgQWdlbnQgPSByZXF1aXJlKCcuL2FnZW50JylcblxuaWYgKGdldEdsb2JhbERpc3BhdGNoZXIoKSA9PT0gdW5kZWZpbmVkKSB7XG4gIHNldEdsb2JhbERpc3BhdGNoZXIobmV3IEFnZW50KCkpXG59XG5cbmZ1bmN0aW9uIHNldEdsb2JhbERpc3BhdGNoZXIgKGFnZW50KSB7XG4gIGlmICghYWdlbnQgfHwgdHlwZW9mIGFnZW50LmRpc3BhdGNoICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdBcmd1bWVudCBhZ2VudCBtdXN0IGltcGxlbWVudCBBZ2VudCcpXG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGdsb2JhbFRoaXMsIGdsb2JhbERpc3BhdGNoZXIsIHtcbiAgICB2YWx1ZTogYWdlbnQsXG4gICAgd3JpdGFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiBmYWxzZVxuICB9KVxufVxuXG5mdW5jdGlvbiBnZXRHbG9iYWxEaXNwYXRjaGVyICgpIHtcbiAgcmV0dXJuIGdsb2JhbFRoaXNbZ2xvYmFsRGlzcGF0Y2hlcl1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldEdsb2JhbERpc3BhdGNoZXIsXG4gIGdldEdsb2JhbERpc3BhdGNoZXJcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0gY2xhc3MgRGVjb3JhdG9ySGFuZGxlciB7XG4gIGNvbnN0cnVjdG9yIChoYW5kbGVyKSB7XG4gICAgdGhpcy5oYW5kbGVyID0gaGFuZGxlclxuICB9XG5cbiAgb25Db25uZWN0ICguLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkNvbm5lY3QoLi4uYXJncylcbiAgfVxuXG4gIG9uRXJyb3IgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uRXJyb3IoLi4uYXJncylcbiAgfVxuXG4gIG9uVXBncmFkZSAoLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25VcGdyYWRlKC4uLmFyZ3MpXG4gIH1cblxuICBvbkhlYWRlcnMgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uSGVhZGVycyguLi5hcmdzKVxuICB9XG5cbiAgb25EYXRhICguLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkRhdGEoLi4uYXJncylcbiAgfVxuXG4gIG9uQ29tcGxldGUgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uQ29tcGxldGUoLi4uYXJncylcbiAgfVxuXG4gIG9uQm9keVNlbnQgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uQm9keVNlbnQoLi4uYXJncylcbiAgfVxufVxuIiwKICAgICIvLyBodHRwczovL2dpdGh1Yi5jb20vRXRoYW4tQXJyb3dvb2QvdW5kaWNpLWZldGNoXG5cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGtIZWFkZXJzTGlzdCwga0NvbnN0cnVjdCB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsga0d1YXJkIH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5IH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3Qge1xuICBtYWtlSXRlcmF0b3IsXG4gIGlzVmFsaWRIZWFkZXJOYW1lLFxuICBpc1ZhbGlkSGVhZGVyVmFsdWVcbn0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4vd2ViaWRsJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5cbmNvbnN0IGtIZWFkZXJzTWFwID0gU3ltYm9sKCdoZWFkZXJzIG1hcCcpXG5jb25zdCBrSGVhZGVyc1NvcnRlZE1hcCA9IFN5bWJvbCgnaGVhZGVycyBtYXAgc29ydGVkJylcblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gY29kZVxuICovXG5mdW5jdGlvbiBpc0hUVFBXaGl0ZVNwYWNlQ2hhckNvZGUgKGNvZGUpIHtcbiAgcmV0dXJuIGNvZGUgPT09IDB4MDBhIHx8IGNvZGUgPT09IDB4MDBkIHx8IGNvZGUgPT09IDB4MDA5IHx8IGNvZGUgPT09IDB4MDIwXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXItdmFsdWUtbm9ybWFsaXplXG4gKiBAcGFyYW0ge3N0cmluZ30gcG90ZW50aWFsVmFsdWVcbiAqL1xuZnVuY3Rpb24gaGVhZGVyVmFsdWVOb3JtYWxpemUgKHBvdGVudGlhbFZhbHVlKSB7XG4gIC8vICBUbyBub3JtYWxpemUgYSBieXRlIHNlcXVlbmNlIHBvdGVudGlhbFZhbHVlLCByZW1vdmVcbiAgLy8gIGFueSBsZWFkaW5nIGFuZCB0cmFpbGluZyBIVFRQIHdoaXRlc3BhY2UgYnl0ZXMgZnJvbVxuICAvLyAgcG90ZW50aWFsVmFsdWUuXG4gIGxldCBpID0gMDsgbGV0IGogPSBwb3RlbnRpYWxWYWx1ZS5sZW5ndGhcblxuICB3aGlsZSAoaiA+IGkgJiYgaXNIVFRQV2hpdGVTcGFjZUNoYXJDb2RlKHBvdGVudGlhbFZhbHVlLmNoYXJDb2RlQXQoaiAtIDEpKSkgLS1qXG4gIHdoaWxlIChqID4gaSAmJiBpc0hUVFBXaGl0ZVNwYWNlQ2hhckNvZGUocG90ZW50aWFsVmFsdWUuY2hhckNvZGVBdChpKSkpICsraVxuXG4gIHJldHVybiBpID09PSAwICYmIGogPT09IHBvdGVudGlhbFZhbHVlLmxlbmd0aCA/IHBvdGVudGlhbFZhbHVlIDogcG90ZW50aWFsVmFsdWUuc3Vic3RyaW5nKGksIGopXG59XG5cbmZ1bmN0aW9uIGZpbGwgKGhlYWRlcnMsIG9iamVjdCkge1xuICAvLyBUbyBmaWxsIGEgSGVhZGVycyBvYmplY3QgaGVhZGVycyB3aXRoIGEgZ2l2ZW4gb2JqZWN0IG9iamVjdCwgcnVuIHRoZXNlIHN0ZXBzOlxuXG4gIC8vIDEuIElmIG9iamVjdCBpcyBhIHNlcXVlbmNlLCB0aGVuIGZvciBlYWNoIGhlYWRlciBpbiBvYmplY3Q6XG4gIC8vIE5vdGU6IHdlYmlkbCBjb252ZXJzaW9uIHRvIGFycmF5IGhhcyBhbHJlYWR5IGJlZW4gZG9uZS5cbiAgaWYgKEFycmF5LmlzQXJyYXkob2JqZWN0KSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2JqZWN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICBjb25zdCBoZWFkZXIgPSBvYmplY3RbaV1cbiAgICAgIC8vIDEuIElmIGhlYWRlciBkb2VzIG5vdCBjb250YWluIGV4YWN0bHkgdHdvIGl0ZW1zLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgaWYgKGhlYWRlci5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgIGhlYWRlcjogJ0hlYWRlcnMgY29uc3RydWN0b3InLFxuICAgICAgICAgIG1lc3NhZ2U6IGBleHBlY3RlZCBuYW1lL3ZhbHVlIHBhaXIgdG8gYmUgbGVuZ3RoIDIsIGZvdW5kICR7aGVhZGVyLmxlbmd0aH0uYFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICAvLyAyLiBBcHBlbmQgKGhlYWRlcuKAmXMgZmlyc3QgaXRlbSwgaGVhZGVy4oCZcyBzZWNvbmQgaXRlbSkgdG8gaGVhZGVycy5cbiAgICAgIGFwcGVuZEhlYWRlcihoZWFkZXJzLCBoZWFkZXJbMF0sIGhlYWRlclsxXSlcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsKSB7XG4gICAgLy8gTm90ZTogbnVsbCBzaG91bGQgdGhyb3dcblxuICAgIC8vIDIuIE90aGVyd2lzZSwgb2JqZWN0IGlzIGEgcmVjb3JkLCB0aGVuIGZvciBlYWNoIGtleSDihpIgdmFsdWUgaW4gb2JqZWN0LFxuICAgIC8vICAgIGFwcGVuZCAoa2V5LCB2YWx1ZSkgdG8gaGVhZGVyc1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICBhcHBlbmRIZWFkZXIoaGVhZGVycywga2V5c1tpXSwgb2JqZWN0W2tleXNbaV1dKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmNvbnZlcnNpb25GYWlsZWQoe1xuICAgICAgcHJlZml4OiAnSGVhZGVycyBjb25zdHJ1Y3RvcicsXG4gICAgICBhcmd1bWVudDogJ0FyZ3VtZW50IDEnLFxuICAgICAgdHlwZXM6IFsnc2VxdWVuY2U8c2VxdWVuY2U8Qnl0ZVN0cmluZz4+JywgJ3JlY29yZDxCeXRlU3RyaW5nLCBCeXRlU3RyaW5nPiddXG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtaGVhZGVycy1hcHBlbmRcbiAqL1xuZnVuY3Rpb24gYXBwZW5kSGVhZGVyIChoZWFkZXJzLCBuYW1lLCB2YWx1ZSkge1xuICAvLyAxLiBOb3JtYWxpemUgdmFsdWUuXG4gIHZhbHVlID0gaGVhZGVyVmFsdWVOb3JtYWxpemUodmFsdWUpXG5cbiAgLy8gMi4gSWYgbmFtZSBpcyBub3QgYSBoZWFkZXIgbmFtZSBvciB2YWx1ZSBpcyBub3QgYVxuICAvLyAgICBoZWFkZXIgdmFsdWUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIGlmICghaXNWYWxpZEhlYWRlck5hbWUobmFtZSkpIHtcbiAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmludmFsaWRBcmd1bWVudCh7XG4gICAgICBwcmVmaXg6ICdIZWFkZXJzLmFwcGVuZCcsXG4gICAgICB2YWx1ZTogbmFtZSxcbiAgICAgIHR5cGU6ICdoZWFkZXIgbmFtZSdcbiAgICB9KVxuICB9IGVsc2UgaWYgKCFpc1ZhbGlkSGVhZGVyVmFsdWUodmFsdWUpKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5pbnZhbGlkQXJndW1lbnQoe1xuICAgICAgcHJlZml4OiAnSGVhZGVycy5hcHBlbmQnLFxuICAgICAgdmFsdWUsXG4gICAgICB0eXBlOiAnaGVhZGVyIHZhbHVlJ1xuICAgIH0pXG4gIH1cblxuICAvLyAzLiBJZiBoZWFkZXJz4oCZcyBndWFyZCBpcyBcImltbXV0YWJsZVwiLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAvLyA0LiBPdGhlcndpc2UsIGlmIGhlYWRlcnPigJlzIGd1YXJkIGlzIFwicmVxdWVzdFwiIGFuZCBuYW1lIGlzIGFcbiAgLy8gICAgZm9yYmlkZGVuIGhlYWRlciBuYW1lLCByZXR1cm4uXG4gIC8vIE5vdGU6IHVuZGljaSBkb2VzIG5vdCBpbXBsZW1lbnQgZm9yYmlkZGVuIGhlYWRlciBuYW1lc1xuICBpZiAoaGVhZGVyc1trR3VhcmRdID09PSAnaW1tdXRhYmxlJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ltbXV0YWJsZScpXG4gIH0gZWxzZSBpZiAoaGVhZGVyc1trR3VhcmRdID09PSAncmVxdWVzdC1uby1jb3JzJykge1xuICAgIC8vIDUuIE90aGVyd2lzZSwgaWYgaGVhZGVyc+KAmXMgZ3VhcmQgaXMgXCJyZXF1ZXN0LW5vLWNvcnNcIjpcbiAgICAvLyBUT0RPXG4gIH1cblxuICAvLyA2LiBPdGhlcndpc2UsIGlmIGhlYWRlcnPigJlzIGd1YXJkIGlzIFwicmVzcG9uc2VcIiBhbmQgbmFtZSBpcyBhXG4gIC8vICAgIGZvcmJpZGRlbiByZXNwb25zZS1oZWFkZXIgbmFtZSwgcmV0dXJuLlxuXG4gIC8vIDcuIEFwcGVuZCAobmFtZSwgdmFsdWUpIHRvIGhlYWRlcnPigJlzIGhlYWRlciBsaXN0LlxuICByZXR1cm4gaGVhZGVyc1trSGVhZGVyc0xpc3RdLmFwcGVuZChuYW1lLCB2YWx1ZSlcblxuICAvLyA4LiBJZiBoZWFkZXJz4oCZcyBndWFyZCBpcyBcInJlcXVlc3Qtbm8tY29yc1wiLCB0aGVuIHJlbW92ZVxuICAvLyAgICBwcml2aWxlZ2VkIG5vLUNPUlMgcmVxdWVzdCBoZWFkZXJzIGZyb20gaGVhZGVyc1xufVxuXG5jbGFzcyBIZWFkZXJzTGlzdCB7XG4gIC8qKiBAdHlwZSB7W3N0cmluZywgc3RyaW5nXVtdfG51bGx9ICovXG4gIGNvb2tpZXMgPSBudWxsXG5cbiAgY29uc3RydWN0b3IgKGluaXQpIHtcbiAgICBpZiAoaW5pdCBpbnN0YW5jZW9mIEhlYWRlcnNMaXN0KSB7XG4gICAgICB0aGlzW2tIZWFkZXJzTWFwXSA9IG5ldyBNYXAoaW5pdFtrSGVhZGVyc01hcF0pXG4gICAgICB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXSA9IGluaXRba0hlYWRlcnNTb3J0ZWRNYXBdXG4gICAgICB0aGlzLmNvb2tpZXMgPSBpbml0LmNvb2tpZXMgPT09IG51bGwgPyBudWxsIDogWy4uLmluaXQuY29va2llc11cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trSGVhZGVyc01hcF0gPSBuZXcgTWFwKGluaXQpXG4gICAgICB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXSA9IG51bGxcbiAgICB9XG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaGVhZGVyLWxpc3QtY29udGFpbnNcbiAgY29udGFpbnMgKG5hbWUpIHtcbiAgICAvLyBBIGhlYWRlciBsaXN0IGxpc3QgY29udGFpbnMgYSBoZWFkZXIgbmFtZSBuYW1lIGlmIGxpc3RcbiAgICAvLyBjb250YWlucyBhIGhlYWRlciB3aG9zZSBuYW1lIGlzIGEgYnl0ZS1jYXNlLWluc2Vuc2l0aXZlXG4gICAgLy8gbWF0Y2ggZm9yIG5hbWUuXG4gICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKVxuXG4gICAgcmV0dXJuIHRoaXNba0hlYWRlcnNNYXBdLmhhcyhuYW1lKVxuICB9XG5cbiAgY2xlYXIgKCkge1xuICAgIHRoaXNba0hlYWRlcnNNYXBdLmNsZWFyKClcbiAgICB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXSA9IG51bGxcbiAgICB0aGlzLmNvb2tpZXMgPSBudWxsXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXItbGlzdC1hcHBlbmRcbiAgYXBwZW5kIChuYW1lLCB2YWx1ZSkge1xuICAgIHRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdID0gbnVsbFxuXG4gICAgLy8gMS4gSWYgbGlzdCBjb250YWlucyBuYW1lLCB0aGVuIHNldCBuYW1lIHRvIHRoZSBmaXJzdCBzdWNoXG4gICAgLy8gICAgaGVhZGVy4oCZcyBuYW1lLlxuICAgIGNvbnN0IGxvd2VyY2FzZU5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKClcbiAgICBjb25zdCBleGlzdHMgPSB0aGlzW2tIZWFkZXJzTWFwXS5nZXQobG93ZXJjYXNlTmFtZSlcblxuICAgIC8vIDIuIEFwcGVuZCAobmFtZSwgdmFsdWUpIHRvIGxpc3QuXG4gICAgaWYgKGV4aXN0cykge1xuICAgICAgY29uc3QgZGVsaW1pdGVyID0gbG93ZXJjYXNlTmFtZSA9PT0gJ2Nvb2tpZScgPyAnOyAnIDogJywgJ1xuICAgICAgdGhpc1trSGVhZGVyc01hcF0uc2V0KGxvd2VyY2FzZU5hbWUsIHtcbiAgICAgICAgbmFtZTogZXhpc3RzLm5hbWUsXG4gICAgICAgIHZhbHVlOiBgJHtleGlzdHMudmFsdWV9JHtkZWxpbWl0ZXJ9JHt2YWx1ZX1gXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tIZWFkZXJzTWFwXS5zZXQobG93ZXJjYXNlTmFtZSwgeyBuYW1lLCB2YWx1ZSB9KVxuICAgIH1cblxuICAgIGlmIChsb3dlcmNhc2VOYW1lID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgIHRoaXMuY29va2llcyA/Pz0gW11cbiAgICAgIHRoaXMuY29va2llcy5wdXNoKHZhbHVlKVxuICAgIH1cbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWhlYWRlci1saXN0LXNldFxuICBzZXQgKG5hbWUsIHZhbHVlKSB7XG4gICAgdGhpc1trSGVhZGVyc1NvcnRlZE1hcF0gPSBudWxsXG4gICAgY29uc3QgbG93ZXJjYXNlTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKVxuXG4gICAgaWYgKGxvd2VyY2FzZU5hbWUgPT09ICdzZXQtY29va2llJykge1xuICAgICAgdGhpcy5jb29raWVzID0gW3ZhbHVlXVxuICAgIH1cblxuICAgIC8vIDEuIElmIGxpc3QgY29udGFpbnMgbmFtZSwgdGhlbiBzZXQgdGhlIHZhbHVlIG9mXG4gICAgLy8gICAgdGhlIGZpcnN0IHN1Y2ggaGVhZGVyIHRvIHZhbHVlIGFuZCByZW1vdmUgdGhlXG4gICAgLy8gICAgb3RoZXJzLlxuICAgIC8vIDIuIE90aGVyd2lzZSwgYXBwZW5kIGhlYWRlciAobmFtZSwgdmFsdWUpIHRvIGxpc3QuXG4gICAgdGhpc1trSGVhZGVyc01hcF0uc2V0KGxvd2VyY2FzZU5hbWUsIHsgbmFtZSwgdmFsdWUgfSlcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWhlYWRlci1saXN0LWRlbGV0ZVxuICBkZWxldGUgKG5hbWUpIHtcbiAgICB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXSA9IG51bGxcblxuICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKClcblxuICAgIGlmIChuYW1lID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgIHRoaXMuY29va2llcyA9IG51bGxcbiAgICB9XG5cbiAgICB0aGlzW2tIZWFkZXJzTWFwXS5kZWxldGUobmFtZSlcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWhlYWRlci1saXN0LWdldFxuICBnZXQgKG5hbWUpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXNba0hlYWRlcnNNYXBdLmdldChuYW1lLnRvTG93ZXJDYXNlKCkpXG5cbiAgICAvLyAxLiBJZiBsaXN0IGRvZXMgbm90IGNvbnRhaW4gbmFtZSwgdGhlbiByZXR1cm4gbnVsbC5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIHZhbHVlcyBvZiBhbGwgaGVhZGVycyBpbiBsaXN0IHdob3NlIG5hbWVcbiAgICAvLyAgICBpcyBhIGJ5dGUtY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBmb3IgbmFtZSxcbiAgICAvLyAgICBzZXBhcmF0ZWQgZnJvbSBlYWNoIG90aGVyIGJ5IDB4MkMgMHgyMCwgaW4gb3JkZXIuXG4gICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyBudWxsIDogdmFsdWUudmFsdWVcbiAgfVxuXG4gICogW1N5bWJvbC5pdGVyYXRvcl0gKCkge1xuICAgIC8vIHVzZSB0aGUgbG93ZXJjYXNlZCBuYW1lXG4gICAgZm9yIChjb25zdCBbbmFtZSwgeyB2YWx1ZSB9XSBvZiB0aGlzW2tIZWFkZXJzTWFwXSkge1xuICAgICAgeWllbGQgW25hbWUsIHZhbHVlXVxuICAgIH1cbiAgfVxuXG4gIGdldCBlbnRyaWVzICgpIHtcbiAgICBjb25zdCBoZWFkZXJzID0ge31cblxuICAgIGlmICh0aGlzW2tIZWFkZXJzTWFwXS5zaXplKSB7XG4gICAgICBmb3IgKGNvbnN0IHsgbmFtZSwgdmFsdWUgfSBvZiB0aGlzW2tIZWFkZXJzTWFwXS52YWx1ZXMoKSkge1xuICAgICAgICBoZWFkZXJzW25hbWVdID0gdmFsdWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaGVhZGVyc1xuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNoZWFkZXJzLWNsYXNzXG5jbGFzcyBIZWFkZXJzIHtcbiAgY29uc3RydWN0b3IgKGluaXQgPSB1bmRlZmluZWQpIHtcbiAgICBpZiAoaW5pdCA9PT0ga0NvbnN0cnVjdCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHRoaXNba0hlYWRlcnNMaXN0XSA9IG5ldyBIZWFkZXJzTGlzdCgpXG5cbiAgICAvLyBUaGUgbmV3IEhlYWRlcnMoaW5pdCkgY29uc3RydWN0b3Igc3RlcHMgYXJlOlxuXG4gICAgLy8gMS4gU2V0IHRoaXPigJlzIGd1YXJkIHRvIFwibm9uZVwiLlxuICAgIHRoaXNba0d1YXJkXSA9ICdub25lJ1xuXG4gICAgLy8gMi4gSWYgaW5pdCBpcyBnaXZlbiwgdGhlbiBmaWxsIHRoaXMgd2l0aCBpbml0LlxuICAgIGlmIChpbml0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGluaXQgPSB3ZWJpZGwuY29udmVydGVycy5IZWFkZXJzSW5pdChpbml0KVxuICAgICAgZmlsbCh0aGlzLCBpbml0KVxuICAgIH1cbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20taGVhZGVycy1hcHBlbmRcbiAgYXBwZW5kIChuYW1lLCB2YWx1ZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnSGVhZGVycy5hcHBlbmQnIH0pXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyhuYW1lKVxuICAgIHZhbHVlID0gd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyh2YWx1ZSlcblxuICAgIHJldHVybiBhcHBlbmRIZWFkZXIodGhpcywgbmFtZSwgdmFsdWUpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWhlYWRlcnMtZGVsZXRlXG4gIGRlbGV0ZSAobmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnSGVhZGVycy5kZWxldGUnIH0pXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyhuYW1lKVxuXG4gICAgLy8gMS4gSWYgbmFtZSBpcyBub3QgYSBoZWFkZXIgbmFtZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoIWlzVmFsaWRIZWFkZXJOYW1lKG5hbWUpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmludmFsaWRBcmd1bWVudCh7XG4gICAgICAgIHByZWZpeDogJ0hlYWRlcnMuZGVsZXRlJyxcbiAgICAgICAgdmFsdWU6IG5hbWUsXG4gICAgICAgIHR5cGU6ICdoZWFkZXIgbmFtZSdcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gSWYgdGhpc+KAmXMgZ3VhcmQgaXMgXCJpbW11dGFibGVcIiwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAvLyAzLiBPdGhlcndpc2UsIGlmIHRoaXPigJlzIGd1YXJkIGlzIFwicmVxdWVzdFwiIGFuZCBuYW1lIGlzIGFcbiAgICAvLyAgICBmb3JiaWRkZW4gaGVhZGVyIG5hbWUsIHJldHVybi5cbiAgICAvLyA0LiBPdGhlcndpc2UsIGlmIHRoaXPigJlzIGd1YXJkIGlzIFwicmVxdWVzdC1uby1jb3JzXCIsIG5hbWVcbiAgICAvLyAgICBpcyBub3QgYSBuby1DT1JTLXNhZmVsaXN0ZWQgcmVxdWVzdC1oZWFkZXIgbmFtZSwgYW5kXG4gICAgLy8gICAgbmFtZSBpcyBub3QgYSBwcml2aWxlZ2VkIG5vLUNPUlMgcmVxdWVzdC1oZWFkZXIgbmFtZSxcbiAgICAvLyAgICByZXR1cm4uXG4gICAgLy8gNS4gT3RoZXJ3aXNlLCBpZiB0aGlz4oCZcyBndWFyZCBpcyBcInJlc3BvbnNlXCIgYW5kIG5hbWUgaXNcbiAgICAvLyAgICBhIGZvcmJpZGRlbiByZXNwb25zZS1oZWFkZXIgbmFtZSwgcmV0dXJuLlxuICAgIC8vIE5vdGU6IHVuZGljaSBkb2VzIG5vdCBpbXBsZW1lbnQgZm9yYmlkZGVuIGhlYWRlciBuYW1lc1xuICAgIGlmICh0aGlzW2tHdWFyZF0gPT09ICdpbW11dGFibGUnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbW11dGFibGUnKVxuICAgIH0gZWxzZSBpZiAodGhpc1trR3VhcmRdID09PSAncmVxdWVzdC1uby1jb3JzJykge1xuICAgICAgLy8gVE9ET1xuICAgIH1cblxuICAgIC8vIDYuIElmIHRoaXPigJlzIGhlYWRlciBsaXN0IGRvZXMgbm90IGNvbnRhaW4gbmFtZSwgdGhlblxuICAgIC8vICAgIHJldHVybi5cbiAgICBpZiAoIXRoaXNba0hlYWRlcnNMaXN0XS5jb250YWlucyhuYW1lKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gNy4gRGVsZXRlIG5hbWUgZnJvbSB0aGlz4oCZcyBoZWFkZXIgbGlzdC5cbiAgICAvLyA4LiBJZiB0aGlz4oCZcyBndWFyZCBpcyBcInJlcXVlc3Qtbm8tY29yc1wiLCB0aGVuIHJlbW92ZVxuICAgIC8vICAgIHByaXZpbGVnZWQgbm8tQ09SUyByZXF1ZXN0IGhlYWRlcnMgZnJvbSB0aGlzLlxuICAgIHRoaXNba0hlYWRlcnNMaXN0XS5kZWxldGUobmFtZSlcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20taGVhZGVycy1nZXRcbiAgZ2V0IChuYW1lKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdIZWFkZXJzLmdldCcgfSlcblxuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nKG5hbWUpXG5cbiAgICAvLyAxLiBJZiBuYW1lIGlzIG5vdCBhIGhlYWRlciBuYW1lLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICghaXNWYWxpZEhlYWRlck5hbWUobmFtZSkpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuaW52YWxpZEFyZ3VtZW50KHtcbiAgICAgICAgcHJlZml4OiAnSGVhZGVycy5nZXQnLFxuICAgICAgICB2YWx1ZTogbmFtZSxcbiAgICAgICAgdHlwZTogJ2hlYWRlciBuYW1lJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBnZXR0aW5nIG5hbWUgZnJvbSB0aGlz4oCZcyBoZWFkZXJcbiAgICAvLyAgICBsaXN0LlxuICAgIHJldHVybiB0aGlzW2tIZWFkZXJzTGlzdF0uZ2V0KG5hbWUpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWhlYWRlcnMtaGFzXG4gIGhhcyAobmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnSGVhZGVycy5oYXMnIH0pXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyhuYW1lKVxuXG4gICAgLy8gMS4gSWYgbmFtZSBpcyBub3QgYSBoZWFkZXIgbmFtZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoIWlzVmFsaWRIZWFkZXJOYW1lKG5hbWUpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmludmFsaWRBcmd1bWVudCh7XG4gICAgICAgIHByZWZpeDogJ0hlYWRlcnMuaGFzJyxcbiAgICAgICAgdmFsdWU6IG5hbWUsXG4gICAgICAgIHR5cGU6ICdoZWFkZXIgbmFtZSdcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gUmV0dXJuIHRydWUgaWYgdGhpc+KAmXMgaGVhZGVyIGxpc3QgY29udGFpbnMgbmFtZTtcbiAgICAvLyAgICBvdGhlcndpc2UgZmFsc2UuXG4gICAgcmV0dXJuIHRoaXNba0hlYWRlcnNMaXN0XS5jb250YWlucyhuYW1lKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1oZWFkZXJzLXNldFxuICBzZXQgKG5hbWUsIHZhbHVlKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMiwgeyBoZWFkZXI6ICdIZWFkZXJzLnNldCcgfSlcblxuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nKG5hbWUpXG4gICAgdmFsdWUgPSB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nKHZhbHVlKVxuXG4gICAgLy8gMS4gTm9ybWFsaXplIHZhbHVlLlxuICAgIHZhbHVlID0gaGVhZGVyVmFsdWVOb3JtYWxpemUodmFsdWUpXG5cbiAgICAvLyAyLiBJZiBuYW1lIGlzIG5vdCBhIGhlYWRlciBuYW1lIG9yIHZhbHVlIGlzIG5vdCBhXG4gICAgLy8gICAgaGVhZGVyIHZhbHVlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICghaXNWYWxpZEhlYWRlck5hbWUobmFtZSkpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuaW52YWxpZEFyZ3VtZW50KHtcbiAgICAgICAgcHJlZml4OiAnSGVhZGVycy5zZXQnLFxuICAgICAgICB2YWx1ZTogbmFtZSxcbiAgICAgICAgdHlwZTogJ2hlYWRlciBuYW1lJ1xuICAgICAgfSlcbiAgICB9IGVsc2UgaWYgKCFpc1ZhbGlkSGVhZGVyVmFsdWUodmFsdWUpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmludmFsaWRBcmd1bWVudCh7XG4gICAgICAgIHByZWZpeDogJ0hlYWRlcnMuc2V0JyxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHR5cGU6ICdoZWFkZXIgdmFsdWUnXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDMuIElmIHRoaXPigJlzIGd1YXJkIGlzIFwiaW1tdXRhYmxlXCIsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgLy8gNC4gT3RoZXJ3aXNlLCBpZiB0aGlz4oCZcyBndWFyZCBpcyBcInJlcXVlc3RcIiBhbmQgbmFtZSBpcyBhXG4gICAgLy8gICAgZm9yYmlkZGVuIGhlYWRlciBuYW1lLCByZXR1cm4uXG4gICAgLy8gNS4gT3RoZXJ3aXNlLCBpZiB0aGlz4oCZcyBndWFyZCBpcyBcInJlcXVlc3Qtbm8tY29yc1wiIGFuZFxuICAgIC8vICAgIG5hbWUvdmFsdWUgaXMgbm90IGEgbm8tQ09SUy1zYWZlbGlzdGVkIHJlcXVlc3QtaGVhZGVyLFxuICAgIC8vICAgIHJldHVybi5cbiAgICAvLyA2LiBPdGhlcndpc2UsIGlmIHRoaXPigJlzIGd1YXJkIGlzIFwicmVzcG9uc2VcIiBhbmQgbmFtZSBpcyBhXG4gICAgLy8gICAgZm9yYmlkZGVuIHJlc3BvbnNlLWhlYWRlciBuYW1lLCByZXR1cm4uXG4gICAgLy8gTm90ZTogdW5kaWNpIGRvZXMgbm90IGltcGxlbWVudCBmb3JiaWRkZW4gaGVhZGVyIG5hbWVzXG4gICAgaWYgKHRoaXNba0d1YXJkXSA9PT0gJ2ltbXV0YWJsZScpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ltbXV0YWJsZScpXG4gICAgfSBlbHNlIGlmICh0aGlzW2tHdWFyZF0gPT09ICdyZXF1ZXN0LW5vLWNvcnMnKSB7XG4gICAgICAvLyBUT0RPXG4gICAgfVxuXG4gICAgLy8gNy4gU2V0IChuYW1lLCB2YWx1ZSkgaW4gdGhpc+KAmXMgaGVhZGVyIGxpc3QuXG4gICAgLy8gOC4gSWYgdGhpc+KAmXMgZ3VhcmQgaXMgXCJyZXF1ZXN0LW5vLWNvcnNcIiwgdGhlbiByZW1vdmVcbiAgICAvLyAgICBwcml2aWxlZ2VkIG5vLUNPUlMgcmVxdWVzdCBoZWFkZXJzIGZyb20gdGhpc1xuICAgIHRoaXNba0hlYWRlcnNMaXN0XS5zZXQobmFtZSwgdmFsdWUpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWhlYWRlcnMtZ2V0c2V0Y29va2llXG4gIGdldFNldENvb2tpZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIC8vIDEuIElmIHRoaXPigJlzIGhlYWRlciBsaXN0IGRvZXMgbm90IGNvbnRhaW4gYFNldC1Db29raWVgLCB0aGVuIHJldHVybiDCqyDCuy5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIHZhbHVlcyBvZiBhbGwgaGVhZGVycyBpbiB0aGlz4oCZcyBoZWFkZXIgbGlzdCB3aG9zZSBuYW1lIGlzXG4gICAgLy8gICAgYSBieXRlLWNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yIGBTZXQtQ29va2llYCwgaW4gb3JkZXIuXG5cbiAgICBjb25zdCBsaXN0ID0gdGhpc1trSGVhZGVyc0xpc3RdLmNvb2tpZXNcblxuICAgIGlmIChsaXN0KSB7XG4gICAgICByZXR1cm4gWy4uLmxpc3RdXG4gICAgfVxuXG4gICAgcmV0dXJuIFtdXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXItbGlzdC1zb3J0LWFuZC1jb21iaW5lXG4gIGdldCBba0hlYWRlcnNTb3J0ZWRNYXBdICgpIHtcbiAgICBpZiAodGhpc1trSGVhZGVyc0xpc3RdW2tIZWFkZXJzU29ydGVkTWFwXSkge1xuICAgICAgcmV0dXJuIHRoaXNba0hlYWRlcnNMaXN0XVtrSGVhZGVyc1NvcnRlZE1hcF1cbiAgICB9XG5cbiAgICAvLyAxLiBMZXQgaGVhZGVycyBiZSBhbiBlbXB0eSBsaXN0IG9mIGhlYWRlcnMgd2l0aCB0aGUga2V5IGJlaW5nIHRoZSBuYW1lXG4gICAgLy8gICAgYW5kIHZhbHVlIHRoZSB2YWx1ZS5cbiAgICBjb25zdCBoZWFkZXJzID0gW11cblxuICAgIC8vIDIuIExldCBuYW1lcyBiZSB0aGUgcmVzdWx0IG9mIGNvbnZlcnQgaGVhZGVyIG5hbWVzIHRvIGEgc29ydGVkLWxvd2VyY2FzZVxuICAgIC8vICAgIHNldCB3aXRoIGFsbCB0aGUgbmFtZXMgb2YgdGhlIGhlYWRlcnMgaW4gbGlzdC5cbiAgICBjb25zdCBuYW1lcyA9IFsuLi50aGlzW2tIZWFkZXJzTGlzdF1dLnNvcnQoKGEsIGIpID0+IGFbMF0gPCBiWzBdID8gLTEgOiAxKVxuICAgIGNvbnN0IGNvb2tpZXMgPSB0aGlzW2tIZWFkZXJzTGlzdF0uY29va2llc1xuXG4gICAgLy8gMy4gRm9yIGVhY2ggbmFtZSBvZiBuYW1lczpcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgKytpKSB7XG4gICAgICBjb25zdCBbbmFtZSwgdmFsdWVdID0gbmFtZXNbaV1cbiAgICAgIC8vIDEuIElmIG5hbWUgaXMgYHNldC1jb29raWVgLCB0aGVuOlxuICAgICAgaWYgKG5hbWUgPT09ICdzZXQtY29va2llJykge1xuICAgICAgICAvLyAxLiBMZXQgdmFsdWVzIGJlIGEgbGlzdCBvZiBhbGwgdmFsdWVzIG9mIGhlYWRlcnMgaW4gbGlzdCB3aG9zZSBuYW1lXG4gICAgICAgIC8vICAgIGlzIGEgYnl0ZS1jYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvciBuYW1lLCBpbiBvcmRlci5cblxuICAgICAgICAvLyAyLiBGb3IgZWFjaCB2YWx1ZSBvZiB2YWx1ZXM6XG4gICAgICAgIC8vIDEuIEFwcGVuZCAobmFtZSwgdmFsdWUpIHRvIGhlYWRlcnMuXG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29va2llcy5sZW5ndGg7ICsraikge1xuICAgICAgICAgIGhlYWRlcnMucHVzaChbbmFtZSwgY29va2llc1tqXV0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIDIuIE90aGVyd2lzZTpcblxuICAgICAgICAvLyAxLiBMZXQgdmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBnZXR0aW5nIG5hbWUgZnJvbSBsaXN0LlxuXG4gICAgICAgIC8vIDIuIEFzc2VydDogdmFsdWUgaXMgbm9uLW51bGwuXG4gICAgICAgIGFzc2VydCh2YWx1ZSAhPT0gbnVsbClcblxuICAgICAgICAvLyAzLiBBcHBlbmQgKG5hbWUsIHZhbHVlKSB0byBoZWFkZXJzLlxuICAgICAgICBoZWFkZXJzLnB1c2goW25hbWUsIHZhbHVlXSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzW2tIZWFkZXJzTGlzdF1ba0hlYWRlcnNTb3J0ZWRNYXBdID0gaGVhZGVyc1xuXG4gICAgLy8gNC4gUmV0dXJuIGhlYWRlcnMuXG4gICAgcmV0dXJuIGhlYWRlcnNcbiAgfVxuXG4gIGtleXMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICBpZiAodGhpc1trR3VhcmRdID09PSAnaW1tdXRhYmxlJykge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXVxuICAgICAgcmV0dXJuIG1ha2VJdGVyYXRvcigoKSA9PiB2YWx1ZSwgJ0hlYWRlcnMnLFxuICAgICAgICAna2V5JylcbiAgICB9XG5cbiAgICByZXR1cm4gbWFrZUl0ZXJhdG9yKFxuICAgICAgKCkgPT4gWy4uLnRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdLnZhbHVlcygpXSxcbiAgICAgICdIZWFkZXJzJyxcbiAgICAgICdrZXknXG4gICAgKVxuICB9XG5cbiAgdmFsdWVzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBIZWFkZXJzKVxuXG4gICAgaWYgKHRoaXNba0d1YXJkXSA9PT0gJ2ltbXV0YWJsZScpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1trSGVhZGVyc1NvcnRlZE1hcF1cbiAgICAgIHJldHVybiBtYWtlSXRlcmF0b3IoKCkgPT4gdmFsdWUsICdIZWFkZXJzJyxcbiAgICAgICAgJ3ZhbHVlJylcbiAgICB9XG5cbiAgICByZXR1cm4gbWFrZUl0ZXJhdG9yKFxuICAgICAgKCkgPT4gWy4uLnRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdLnZhbHVlcygpXSxcbiAgICAgICdIZWFkZXJzJyxcbiAgICAgICd2YWx1ZSdcbiAgICApXG4gIH1cblxuICBlbnRyaWVzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBIZWFkZXJzKVxuXG4gICAgaWYgKHRoaXNba0d1YXJkXSA9PT0gJ2ltbXV0YWJsZScpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1trSGVhZGVyc1NvcnRlZE1hcF1cbiAgICAgIHJldHVybiBtYWtlSXRlcmF0b3IoKCkgPT4gdmFsdWUsICdIZWFkZXJzJyxcbiAgICAgICAgJ2tleSt2YWx1ZScpXG4gICAgfVxuXG4gICAgcmV0dXJuIG1ha2VJdGVyYXRvcihcbiAgICAgICgpID0+IFsuLi50aGlzW2tIZWFkZXJzU29ydGVkTWFwXS52YWx1ZXMoKV0sXG4gICAgICAnSGVhZGVycycsXG4gICAgICAna2V5K3ZhbHVlJ1xuICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0geyh2YWx1ZTogc3RyaW5nLCBrZXk6IHN0cmluZywgc2VsZjogSGVhZGVycykgPT4gdm9pZH0gY2FsbGJhY2tGblxuICAgKiBAcGFyYW0ge3Vua25vd259IHRoaXNBcmdcbiAgICovXG4gIGZvckVhY2ggKGNhbGxiYWNrRm4sIHRoaXNBcmcgPSBnbG9iYWxUaGlzKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdIZWFkZXJzLmZvckVhY2gnIH0pXG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrRm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ2ZvckVhY2gnIG9uICdIZWFkZXJzJzogcGFyYW1ldGVyIDEgaXMgbm90IG9mIHR5cGUgJ0Z1bmN0aW9uJy5cIlxuICAgICAgKVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHRoaXMpIHtcbiAgICAgIGNhbGxiYWNrRm4uYXBwbHkodGhpc0FyZywgW3ZhbHVlLCBrZXksIHRoaXNdKVxuICAgIH1cbiAgfVxuXG4gIFtTeW1ib2wuZm9yKCdub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbScpXSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIHJldHVybiB0aGlzW2tIZWFkZXJzTGlzdF1cbiAgfVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdID0gSGVhZGVycy5wcm90b3R5cGUuZW50cmllc1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhIZWFkZXJzLnByb3RvdHlwZSwge1xuICBhcHBlbmQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGRlbGV0ZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZ2V0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBoYXM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHNldDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZ2V0U2V0Q29va2llOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBrZXlzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICB2YWx1ZXM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGVudHJpZXM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGZvckVhY2g6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIFtTeW1ib2wuaXRlcmF0b3JdOiB7IGVudW1lcmFibGU6IGZhbHNlIH0sXG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdIZWFkZXJzJyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfVxufSlcblxud2ViaWRsLmNvbnZlcnRlcnMuSGVhZGVyc0luaXQgPSBmdW5jdGlvbiAoVikge1xuICBpZiAod2ViaWRsLnV0aWwuVHlwZShWKSA9PT0gJ09iamVjdCcpIHtcbiAgICBpZiAoVltTeW1ib2wuaXRlcmF0b3JdKSB7XG4gICAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPHNlcXVlbmNlPEJ5dGVTdHJpbmc+PiddKFYpXG4gICAgfVxuXG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzWydyZWNvcmQ8Qnl0ZVN0cmluZywgQnl0ZVN0cmluZz4nXShWKVxuICB9XG5cbiAgdGhyb3cgd2ViaWRsLmVycm9ycy5jb252ZXJzaW9uRmFpbGVkKHtcbiAgICBwcmVmaXg6ICdIZWFkZXJzIGNvbnN0cnVjdG9yJyxcbiAgICBhcmd1bWVudDogJ0FyZ3VtZW50IDEnLFxuICAgIHR5cGVzOiBbJ3NlcXVlbmNlPHNlcXVlbmNlPEJ5dGVTdHJpbmc+PicsICdyZWNvcmQ8Qnl0ZVN0cmluZywgQnl0ZVN0cmluZz4nXVxuICB9KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZmlsbCxcbiAgSGVhZGVycyxcbiAgSGVhZGVyc0xpc3Rcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgSGVhZGVycywgSGVhZGVyc0xpc3QsIGZpbGwgfSA9IHJlcXVpcmUoJy4vaGVhZGVycycpXG5jb25zdCB7IGV4dHJhY3RCb2R5LCBjbG9uZUJvZHksIG1peGluQm9keSB9ID0gcmVxdWlyZSgnLi9ib2R5JylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5IH0gPSB1dGlsXG5jb25zdCB7XG4gIGlzVmFsaWRSZWFzb25QaHJhc2UsXG4gIGlzQ2FuY2VsbGVkLFxuICBpc0Fib3J0ZWQsXG4gIGlzQmxvYkxpa2UsXG4gIHNlcmlhbGl6ZUphdmFzY3JpcHRWYWx1ZVRvSlNPTlN0cmluZyxcbiAgaXNFcnJvckxpa2UsXG4gIGlzb21vcnBoaWNFbmNvZGVcbn0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3Qge1xuICByZWRpcmVjdFN0YXR1c1NldCxcbiAgbnVsbEJvZHlTdGF0dXMsXG4gIERPTUV4Y2VwdGlvblxufSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IHsga1N0YXRlLCBrSGVhZGVycywga0d1YXJkLCBrUmVhbG0gfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi93ZWJpZGwnKVxuY29uc3QgeyBGb3JtRGF0YSB9ID0gcmVxdWlyZSgnLi9mb3JtZGF0YScpXG5jb25zdCB7IGdldEdsb2JhbE9yaWdpbiB9ID0gcmVxdWlyZSgnLi9nbG9iYWwnKVxuY29uc3QgeyBVUkxTZXJpYWxpemVyIH0gPSByZXF1aXJlKCcuL2RhdGFVUkwnKVxuY29uc3QgeyBrSGVhZGVyc0xpc3QsIGtDb25zdHJ1Y3QgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyB0eXBlcyB9ID0gcmVxdWlyZSgndXRpbCcpXG5cbmNvbnN0IFJlYWRhYmxlU3RyZWFtID0gZ2xvYmFsVGhpcy5SZWFkYWJsZVN0cmVhbSB8fCByZXF1aXJlKCdzdHJlYW0vd2ViJykuUmVhZGFibGVTdHJlYW1cbmNvbnN0IHRleHRFbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCd1dGYtOCcpXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXNwb25zZS1jbGFzc1xuY2xhc3MgUmVzcG9uc2Uge1xuICAvLyBDcmVhdGVzIG5ldHdvcmsgZXJyb3IgUmVzcG9uc2UuXG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgLy8gVE9ET1xuICAgIGNvbnN0IHJlbGV2YW50UmVhbG0gPSB7IHNldHRpbmdzT2JqZWN0OiB7fSB9XG5cbiAgICAvLyBUaGUgc3RhdGljIGVycm9yKCkgbWV0aG9kIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhXG4gICAgLy8gUmVzcG9uc2Ugb2JqZWN0LCBnaXZlbiBhIG5ldyBuZXR3b3JrIGVycm9yLCBcImltbXV0YWJsZVwiLCBhbmQgdGhpc+KAmXNcbiAgICAvLyByZWxldmFudCBSZWFsbS5cbiAgICBjb25zdCByZXNwb25zZU9iamVjdCA9IG5ldyBSZXNwb25zZSgpXG4gICAgcmVzcG9uc2VPYmplY3Rba1N0YXRlXSA9IG1ha2VOZXR3b3JrRXJyb3IoKVxuICAgIHJlc3BvbnNlT2JqZWN0W2tSZWFsbV0gPSByZWxldmFudFJlYWxtXG4gICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tIZWFkZXJzTGlzdF0gPSByZXNwb25zZU9iamVjdFtrU3RhdGVdLmhlYWRlcnNMaXN0XG4gICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tHdWFyZF0gPSAnaW1tdXRhYmxlJ1xuICAgIHJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrUmVhbG1dID0gcmVsZXZhbnRSZWFsbVxuICAgIHJldHVybiByZXNwb25zZU9iamVjdFxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1yZXNwb25zZS1qc29uXG4gIHN0YXRpYyBqc29uIChkYXRhLCBpbml0ID0ge30pIHtcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnUmVzcG9uc2UuanNvbicgfSlcblxuICAgIGlmIChpbml0ICE9PSBudWxsKSB7XG4gICAgICBpbml0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVzcG9uc2VJbml0KGluaXQpXG4gICAgfVxuXG4gICAgLy8gMS4gTGV0IGJ5dGVzIHRoZSByZXN1bHQgb2YgcnVubmluZyBzZXJpYWxpemUgYSBKYXZhU2NyaXB0IHZhbHVlIHRvIEpTT04gYnl0ZXMgb24gZGF0YS5cbiAgICBjb25zdCBieXRlcyA9IHRleHRFbmNvZGVyLmVuY29kZShcbiAgICAgIHNlcmlhbGl6ZUphdmFzY3JpcHRWYWx1ZVRvSlNPTlN0cmluZyhkYXRhKVxuICAgIClcblxuICAgIC8vIDIuIExldCBib2R5IGJlIHRoZSByZXN1bHQgb2YgZXh0cmFjdGluZyBieXRlcy5cbiAgICBjb25zdCBib2R5ID0gZXh0cmFjdEJvZHkoYnl0ZXMpXG5cbiAgICAvLyAzLiBMZXQgcmVzcG9uc2VPYmplY3QgYmUgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhIFJlc3BvbnNlIG9iamVjdCwgZ2l2ZW4gYSBuZXcgcmVzcG9uc2UsXG4gICAgLy8gICAgXCJyZXNwb25zZVwiLCBhbmQgdGhpc+KAmXMgcmVsZXZhbnQgUmVhbG0uXG4gICAgY29uc3QgcmVsZXZhbnRSZWFsbSA9IHsgc2V0dGluZ3NPYmplY3Q6IHt9IH1cbiAgICBjb25zdCByZXNwb25zZU9iamVjdCA9IG5ldyBSZXNwb25zZSgpXG4gICAgcmVzcG9uc2VPYmplY3Rba1JlYWxtXSA9IHJlbGV2YW50UmVhbG1cbiAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba0d1YXJkXSA9ICdyZXNwb25zZSdcbiAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba1JlYWxtXSA9IHJlbGV2YW50UmVhbG1cblxuICAgIC8vIDQuIFBlcmZvcm0gaW5pdGlhbGl6ZSBhIHJlc3BvbnNlIGdpdmVuIHJlc3BvbnNlT2JqZWN0LCBpbml0LCBhbmQgKGJvZHksIFwiYXBwbGljYXRpb24vanNvblwiKS5cbiAgICBpbml0aWFsaXplUmVzcG9uc2UocmVzcG9uc2VPYmplY3QsIGluaXQsIHsgYm9keTogYm9keVswXSwgdHlwZTogJ2FwcGxpY2F0aW9uL2pzb24nIH0pXG5cbiAgICAvLyA1LiBSZXR1cm4gcmVzcG9uc2VPYmplY3QuXG4gICAgcmV0dXJuIHJlc3BvbnNlT2JqZWN0XG4gIH1cblxuICAvLyBDcmVhdGVzIGEgcmVkaXJlY3QgUmVzcG9uc2UgdGhhdCByZWRpcmVjdHMgdG8gdXJsIHdpdGggc3RhdHVzIHN0YXR1cy5cbiAgc3RhdGljIHJlZGlyZWN0ICh1cmwsIHN0YXR1cyA9IDMwMikge1xuICAgIGNvbnN0IHJlbGV2YW50UmVhbG0gPSB7IHNldHRpbmdzT2JqZWN0OiB7fSB9XG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnUmVzcG9uc2UucmVkaXJlY3QnIH0pXG5cbiAgICB1cmwgPSB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcodXJsKVxuICAgIHN0YXR1cyA9IHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBzaG9ydCddKHN0YXR1cylcblxuICAgIC8vIDEuIExldCBwYXJzZWRVUkwgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIHVybCB3aXRoIGN1cnJlbnQgc2V0dGluZ3NcbiAgICAvLyBvYmplY3TigJlzIEFQSSBiYXNlIFVSTC5cbiAgICAvLyAyLiBJZiBwYXJzZWRVUkwgaXMgZmFpbHVyZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAvLyBUT0RPOiBiYXNlLVVSTD9cbiAgICBsZXQgcGFyc2VkVVJMXG4gICAgdHJ5IHtcbiAgICAgIHBhcnNlZFVSTCA9IG5ldyBVUkwodXJsLCBnZXRHbG9iYWxPcmlnaW4oKSlcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRocm93IE9iamVjdC5hc3NpZ24obmV3IFR5cGVFcnJvcignRmFpbGVkIHRvIHBhcnNlIFVSTCBmcm9tICcgKyB1cmwpLCB7XG4gICAgICAgIGNhdXNlOiBlcnJcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMy4gSWYgc3RhdHVzIGlzIG5vdCBhIHJlZGlyZWN0IHN0YXR1cywgdGhlbiB0aHJvdyBhIFJhbmdlRXJyb3IuXG4gICAgaWYgKCFyZWRpcmVjdFN0YXR1c1NldC5oYXMoc3RhdHVzKSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgc3RhdHVzIGNvZGUgJyArIHN0YXR1cylcbiAgICB9XG5cbiAgICAvLyA0LiBMZXQgcmVzcG9uc2VPYmplY3QgYmUgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhIFJlc3BvbnNlIG9iamVjdCxcbiAgICAvLyBnaXZlbiBhIG5ldyByZXNwb25zZSwgXCJpbW11dGFibGVcIiwgYW5kIHRoaXPigJlzIHJlbGV2YW50IFJlYWxtLlxuICAgIGNvbnN0IHJlc3BvbnNlT2JqZWN0ID0gbmV3IFJlc3BvbnNlKClcbiAgICByZXNwb25zZU9iamVjdFtrUmVhbG1dID0gcmVsZXZhbnRSZWFsbVxuICAgIHJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrR3VhcmRdID0gJ2ltbXV0YWJsZSdcbiAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba1JlYWxtXSA9IHJlbGV2YW50UmVhbG1cblxuICAgIC8vIDUuIFNldCByZXNwb25zZU9iamVjdOKAmXMgcmVzcG9uc2XigJlzIHN0YXR1cyB0byBzdGF0dXMuXG4gICAgcmVzcG9uc2VPYmplY3Rba1N0YXRlXS5zdGF0dXMgPSBzdGF0dXNcblxuICAgIC8vIDYuIExldCB2YWx1ZSBiZSBwYXJzZWRVUkwsIHNlcmlhbGl6ZWQgYW5kIGlzb21vcnBoaWMgZW5jb2RlZC5cbiAgICBjb25zdCB2YWx1ZSA9IGlzb21vcnBoaWNFbmNvZGUoVVJMU2VyaWFsaXplcihwYXJzZWRVUkwpKVxuXG4gICAgLy8gNy4gQXBwZW5kIGBMb2NhdGlvbmAvdmFsdWUgdG8gcmVzcG9uc2VPYmplY3TigJlzIHJlc3BvbnNl4oCZcyBoZWFkZXIgbGlzdC5cbiAgICByZXNwb25zZU9iamVjdFtrU3RhdGVdLmhlYWRlcnNMaXN0LmFwcGVuZCgnbG9jYXRpb24nLCB2YWx1ZSlcblxuICAgIC8vIDguIFJldHVybiByZXNwb25zZU9iamVjdC5cbiAgICByZXR1cm4gcmVzcG9uc2VPYmplY3RcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tcmVzcG9uc2VcbiAgY29uc3RydWN0b3IgKGJvZHkgPSBudWxsLCBpbml0ID0ge30pIHtcbiAgICBpZiAoYm9keSAhPT0gbnVsbCkge1xuICAgICAgYm9keSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkJvZHlJbml0KGJvZHkpXG4gICAgfVxuXG4gICAgaW5pdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlc3BvbnNlSW5pdChpbml0KVxuXG4gICAgLy8gVE9ET1xuICAgIHRoaXNba1JlYWxtXSA9IHsgc2V0dGluZ3NPYmplY3Q6IHt9IH1cblxuICAgIC8vIDEuIFNldCB0aGlz4oCZcyByZXNwb25zZSB0byBhIG5ldyByZXNwb25zZS5cbiAgICB0aGlzW2tTdGF0ZV0gPSBtYWtlUmVzcG9uc2Uoe30pXG5cbiAgICAvLyAyLiBTZXQgdGhpc+KAmXMgaGVhZGVycyB0byBhIG5ldyBIZWFkZXJzIG9iamVjdCB3aXRoIHRoaXPigJlzIHJlbGV2YW50XG4gICAgLy8gUmVhbG0sIHdob3NlIGhlYWRlciBsaXN0IGlzIHRoaXPigJlzIHJlc3BvbnNl4oCZcyBoZWFkZXIgbGlzdCBhbmQgZ3VhcmRcbiAgICAvLyBpcyBcInJlc3BvbnNlXCIuXG4gICAgdGhpc1trSGVhZGVyc10gPSBuZXcgSGVhZGVycyhrQ29uc3RydWN0KVxuICAgIHRoaXNba0hlYWRlcnNdW2tHdWFyZF0gPSAncmVzcG9uc2UnXG4gICAgdGhpc1trSGVhZGVyc11ba0hlYWRlcnNMaXN0XSA9IHRoaXNba1N0YXRlXS5oZWFkZXJzTGlzdFxuICAgIHRoaXNba0hlYWRlcnNdW2tSZWFsbV0gPSB0aGlzW2tSZWFsbV1cblxuICAgIC8vIDMuIExldCBib2R5V2l0aFR5cGUgYmUgbnVsbC5cbiAgICBsZXQgYm9keVdpdGhUeXBlID0gbnVsbFxuXG4gICAgLy8gNC4gSWYgYm9keSBpcyBub24tbnVsbCwgdGhlbiBzZXQgYm9keVdpdGhUeXBlIHRvIHRoZSByZXN1bHQgb2YgZXh0cmFjdGluZyBib2R5LlxuICAgIGlmIChib2R5ICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IFtleHRyYWN0ZWRCb2R5LCB0eXBlXSA9IGV4dHJhY3RCb2R5KGJvZHkpXG4gICAgICBib2R5V2l0aFR5cGUgPSB7IGJvZHk6IGV4dHJhY3RlZEJvZHksIHR5cGUgfVxuICAgIH1cblxuICAgIC8vIDUuIFBlcmZvcm0gaW5pdGlhbGl6ZSBhIHJlc3BvbnNlIGdpdmVuIHRoaXMsIGluaXQsIGFuZCBib2R5V2l0aFR5cGUuXG4gICAgaW5pdGlhbGl6ZVJlc3BvbnNlKHRoaXMsIGluaXQsIGJvZHlXaXRoVHlwZSlcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2XigJlzIHR5cGUsIGUuZy4sIFwiY29yc1wiLlxuICBnZXQgdHlwZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICAvLyBUaGUgdHlwZSBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlz4oCZcyByZXNwb25zZeKAmXMgdHlwZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnR5cGVcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2XigJlzIFVSTCwgaWYgaXQgaGFzIG9uZTsgb3RoZXJ3aXNlIHRoZSBlbXB0eSBzdHJpbmcuXG4gIGdldCB1cmwgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgY29uc3QgdXJsTGlzdCA9IHRoaXNba1N0YXRlXS51cmxMaXN0XG5cbiAgICAvLyBUaGUgdXJsIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoZSBlbXB0eSBzdHJpbmcgaWYgdGhpc+KAmXNcbiAgICAvLyByZXNwb25zZeKAmXMgVVJMIGlzIG51bGw7IG90aGVyd2lzZSB0aGlz4oCZcyByZXNwb25zZeKAmXMgVVJMLFxuICAgIC8vIHNlcmlhbGl6ZWQgd2l0aCBleGNsdWRlIGZyYWdtZW50IHNldCB0byB0cnVlLlxuICAgIGNvbnN0IHVybCA9IHVybExpc3RbdXJsTGlzdC5sZW5ndGggLSAxXSA/PyBudWxsXG5cbiAgICBpZiAodXJsID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG5cbiAgICByZXR1cm4gVVJMU2VyaWFsaXplcih1cmwsIHRydWUpXG4gIH1cblxuICAvLyBSZXR1cm5zIHdoZXRoZXIgcmVzcG9uc2Ugd2FzIG9idGFpbmVkIHRocm91Z2ggYSByZWRpcmVjdC5cbiAgZ2V0IHJlZGlyZWN0ZWQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgLy8gVGhlIHJlZGlyZWN0ZWQgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdHJ1ZSBpZiB0aGlz4oCZcyByZXNwb25zZeKAmXMgVVJMXG4gICAgLy8gbGlzdCBoYXMgbW9yZSB0aGFuIG9uZSBpdGVtOyBvdGhlcndpc2UgZmFsc2UuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS51cmxMaXN0Lmxlbmd0aCA+IDFcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2XigJlzIHN0YXR1cy5cbiAgZ2V0IHN0YXR1cyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICAvLyBUaGUgc3RhdHVzIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXPigJlzIHJlc3BvbnNl4oCZcyBzdGF0dXMuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5zdGF0dXNcbiAgfVxuXG4gIC8vIFJldHVybnMgd2hldGhlciByZXNwb25zZeKAmXMgc3RhdHVzIGlzIGFuIG9rIHN0YXR1cy5cbiAgZ2V0IG9rICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXNwb25zZSlcblxuICAgIC8vIFRoZSBvayBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0cnVlIGlmIHRoaXPigJlzIHJlc3BvbnNl4oCZcyBzdGF0dXMgaXMgYW5cbiAgICAvLyBvayBzdGF0dXM7IG90aGVyd2lzZSBmYWxzZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnN0YXR1cyA+PSAyMDAgJiYgdGhpc1trU3RhdGVdLnN0YXR1cyA8PSAyOTlcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2XigJlzIHN0YXR1cyBtZXNzYWdlLlxuICBnZXQgc3RhdHVzVGV4dCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICAvLyBUaGUgc3RhdHVzVGV4dCBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlz4oCZcyByZXNwb25zZeKAmXMgc3RhdHVzXG4gICAgLy8gbWVzc2FnZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnN0YXR1c1RleHRcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2XigJlzIGhlYWRlcnMgYXMgSGVhZGVycy5cbiAgZ2V0IGhlYWRlcnMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgLy8gVGhlIGhlYWRlcnMgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc+KAmXMgaGVhZGVycy5cbiAgICByZXR1cm4gdGhpc1trSGVhZGVyc11cbiAgfVxuXG4gIGdldCBib2R5ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXNwb25zZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uYm9keSA/IHRoaXNba1N0YXRlXS5ib2R5LnN0cmVhbSA6IG51bGxcbiAgfVxuXG4gIGdldCBib2R5VXNlZCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICByZXR1cm4gISF0aGlzW2tTdGF0ZV0uYm9keSAmJiB1dGlsLmlzRGlzdHVyYmVkKHRoaXNba1N0YXRlXS5ib2R5LnN0cmVhbSlcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBjbG9uZSBvZiByZXNwb25zZS5cbiAgY2xvbmUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgLy8gMS4gSWYgdGhpcyBpcyB1bnVzYWJsZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAodGhpcy5ib2R5VXNlZCB8fCAodGhpcy5ib2R5ICYmIHRoaXMuYm9keS5sb2NrZWQpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ1Jlc3BvbnNlLmNsb25lJyxcbiAgICAgICAgbWVzc2FnZTogJ0JvZHkgaGFzIGFscmVhZHkgYmVlbiBjb25zdW1lZC4nXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDIuIExldCBjbG9uZWRSZXNwb25zZSBiZSB0aGUgcmVzdWx0IG9mIGNsb25pbmcgdGhpc+KAmXMgcmVzcG9uc2UuXG4gICAgY29uc3QgY2xvbmVkUmVzcG9uc2UgPSBjbG9uZVJlc3BvbnNlKHRoaXNba1N0YXRlXSlcblxuICAgIC8vIDMuIFJldHVybiB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEgUmVzcG9uc2Ugb2JqZWN0LCBnaXZlblxuICAgIC8vIGNsb25lZFJlc3BvbnNlLCB0aGlz4oCZcyBoZWFkZXJz4oCZcyBndWFyZCwgYW5kIHRoaXPigJlzIHJlbGV2YW50IFJlYWxtLlxuICAgIGNvbnN0IGNsb25lZFJlc3BvbnNlT2JqZWN0ID0gbmV3IFJlc3BvbnNlKClcbiAgICBjbG9uZWRSZXNwb25zZU9iamVjdFtrU3RhdGVdID0gY2xvbmVkUmVzcG9uc2VcbiAgICBjbG9uZWRSZXNwb25zZU9iamVjdFtrUmVhbG1dID0gdGhpc1trUmVhbG1dXG4gICAgY2xvbmVkUmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tIZWFkZXJzTGlzdF0gPSBjbG9uZWRSZXNwb25zZS5oZWFkZXJzTGlzdFxuICAgIGNsb25lZFJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrR3VhcmRdID0gdGhpc1trSGVhZGVyc11ba0d1YXJkXVxuICAgIGNsb25lZFJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrUmVhbG1dID0gdGhpc1trSGVhZGVyc11ba1JlYWxtXVxuXG4gICAgcmV0dXJuIGNsb25lZFJlc3BvbnNlT2JqZWN0XG4gIH1cbn1cblxubWl4aW5Cb2R5KFJlc3BvbnNlKVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhSZXNwb25zZS5wcm90b3R5cGUsIHtcbiAgdHlwZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgdXJsOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBzdGF0dXM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9rOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWRpcmVjdGVkOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBzdGF0dXNUZXh0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBoZWFkZXJzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBjbG9uZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYm9keToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYm9keVVzZWQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdSZXNwb25zZScsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH1cbn0pXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFJlc3BvbnNlLCB7XG4gIGpzb246IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlZGlyZWN0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBlcnJvcjoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtcmVzcG9uc2UtY2xvbmVcbmZ1bmN0aW9uIGNsb25lUmVzcG9uc2UgKHJlc3BvbnNlKSB7XG4gIC8vIFRvIGNsb25lIGEgcmVzcG9uc2UgcmVzcG9uc2UsIHJ1biB0aGVzZSBzdGVwczpcblxuICAvLyAxLiBJZiByZXNwb25zZSBpcyBhIGZpbHRlcmVkIHJlc3BvbnNlLCB0aGVuIHJldHVybiBhIG5ldyBpZGVudGljYWxcbiAgLy8gZmlsdGVyZWQgcmVzcG9uc2Ugd2hvc2UgaW50ZXJuYWwgcmVzcG9uc2UgaXMgYSBjbG9uZSBvZiByZXNwb25zZeKAmXNcbiAgLy8gaW50ZXJuYWwgcmVzcG9uc2UuXG4gIGlmIChyZXNwb25zZS5pbnRlcm5hbFJlc3BvbnNlKSB7XG4gICAgcmV0dXJuIGZpbHRlclJlc3BvbnNlKFxuICAgICAgY2xvbmVSZXNwb25zZShyZXNwb25zZS5pbnRlcm5hbFJlc3BvbnNlKSxcbiAgICAgIHJlc3BvbnNlLnR5cGVcbiAgICApXG4gIH1cblxuICAvLyAyLiBMZXQgbmV3UmVzcG9uc2UgYmUgYSBjb3B5IG9mIHJlc3BvbnNlLCBleGNlcHQgZm9yIGl0cyBib2R5LlxuICBjb25zdCBuZXdSZXNwb25zZSA9IG1ha2VSZXNwb25zZSh7IC4uLnJlc3BvbnNlLCBib2R5OiBudWxsIH0pXG5cbiAgLy8gMy4gSWYgcmVzcG9uc2XigJlzIGJvZHkgaXMgbm9uLW51bGwsIHRoZW4gc2V0IG5ld1Jlc3BvbnNl4oCZcyBib2R5IHRvIHRoZVxuICAvLyByZXN1bHQgb2YgY2xvbmluZyByZXNwb25zZeKAmXMgYm9keS5cbiAgaWYgKHJlc3BvbnNlLmJvZHkgIT0gbnVsbCkge1xuICAgIG5ld1Jlc3BvbnNlLmJvZHkgPSBjbG9uZUJvZHkocmVzcG9uc2UuYm9keSlcbiAgfVxuXG4gIC8vIDQuIFJldHVybiBuZXdSZXNwb25zZS5cbiAgcmV0dXJuIG5ld1Jlc3BvbnNlXG59XG5cbmZ1bmN0aW9uIG1ha2VSZXNwb25zZSAoaW5pdCkge1xuICByZXR1cm4ge1xuICAgIGFib3J0ZWQ6IGZhbHNlLFxuICAgIHJhbmdlUmVxdWVzdGVkOiBmYWxzZSxcbiAgICB0aW1pbmdBbGxvd1Bhc3NlZDogZmFsc2UsXG4gICAgcmVxdWVzdEluY2x1ZGVzQ3JlZGVudGlhbHM6IGZhbHNlLFxuICAgIHR5cGU6ICdkZWZhdWx0JyxcbiAgICBzdGF0dXM6IDIwMCxcbiAgICB0aW1pbmdJbmZvOiBudWxsLFxuICAgIGNhY2hlU3RhdGU6ICcnLFxuICAgIHN0YXR1c1RleHQ6ICcnLFxuICAgIC4uLmluaXQsXG4gICAgaGVhZGVyc0xpc3Q6IGluaXQuaGVhZGVyc0xpc3RcbiAgICAgID8gbmV3IEhlYWRlcnNMaXN0KGluaXQuaGVhZGVyc0xpc3QpXG4gICAgICA6IG5ldyBIZWFkZXJzTGlzdCgpLFxuICAgIHVybExpc3Q6IGluaXQudXJsTGlzdCA/IFsuLi5pbml0LnVybExpc3RdIDogW11cbiAgfVxufVxuXG5mdW5jdGlvbiBtYWtlTmV0d29ya0Vycm9yIChyZWFzb24pIHtcbiAgY29uc3QgaXNFcnJvciA9IGlzRXJyb3JMaWtlKHJlYXNvbilcbiAgcmV0dXJuIG1ha2VSZXNwb25zZSh7XG4gICAgdHlwZTogJ2Vycm9yJyxcbiAgICBzdGF0dXM6IDAsXG4gICAgZXJyb3I6IGlzRXJyb3JcbiAgICAgID8gcmVhc29uXG4gICAgICA6IG5ldyBFcnJvcihyZWFzb24gPyBTdHJpbmcocmVhc29uKSA6IHJlYXNvbiksXG4gICAgYWJvcnRlZDogcmVhc29uICYmIHJlYXNvbi5uYW1lID09PSAnQWJvcnRFcnJvcidcbiAgfSlcbn1cblxuZnVuY3Rpb24gbWFrZUZpbHRlcmVkUmVzcG9uc2UgKHJlc3BvbnNlLCBzdGF0ZSkge1xuICBzdGF0ZSA9IHtcbiAgICBpbnRlcm5hbFJlc3BvbnNlOiByZXNwb25zZSxcbiAgICAuLi5zdGF0ZVxuICB9XG5cbiAgcmV0dXJuIG5ldyBQcm94eShyZXNwb25zZSwge1xuICAgIGdldCAodGFyZ2V0LCBwKSB7XG4gICAgICByZXR1cm4gcCBpbiBzdGF0ZSA/IHN0YXRlW3BdIDogdGFyZ2V0W3BdXG4gICAgfSxcbiAgICBzZXQgKHRhcmdldCwgcCwgdmFsdWUpIHtcbiAgICAgIGFzc2VydCghKHAgaW4gc3RhdGUpKVxuICAgICAgdGFyZ2V0W3BdID0gdmFsdWVcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICB9KVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1maWx0ZXJlZC1yZXNwb25zZVxuZnVuY3Rpb24gZmlsdGVyUmVzcG9uc2UgKHJlc3BvbnNlLCB0eXBlKSB7XG4gIC8vIFNldCByZXNwb25zZSB0byB0aGUgZm9sbG93aW5nIGZpbHRlcmVkIHJlc3BvbnNlIHdpdGggcmVzcG9uc2UgYXMgaXRzXG4gIC8vIGludGVybmFsIHJlc3BvbnNlLCBkZXBlbmRpbmcgb24gcmVxdWVzdOKAmXMgcmVzcG9uc2UgdGFpbnRpbmc6XG4gIGlmICh0eXBlID09PSAnYmFzaWMnKSB7XG4gICAgLy8gQSBiYXNpYyBmaWx0ZXJlZCByZXNwb25zZSBpcyBhIGZpbHRlcmVkIHJlc3BvbnNlIHdob3NlIHR5cGUgaXMgXCJiYXNpY1wiXG4gICAgLy8gYW5kIGhlYWRlciBsaXN0IGV4Y2x1ZGVzIGFueSBoZWFkZXJzIGluIGludGVybmFsIHJlc3BvbnNl4oCZcyBoZWFkZXIgbGlzdFxuICAgIC8vIHdob3NlIG5hbWUgaXMgYSBmb3JiaWRkZW4gcmVzcG9uc2UtaGVhZGVyIG5hbWUuXG5cbiAgICAvLyBOb3RlOiB1bmRpY2kgZG9lcyBub3QgaW1wbGVtZW50IGZvcmJpZGRlbiByZXNwb25zZS1oZWFkZXIgbmFtZXNcbiAgICByZXR1cm4gbWFrZUZpbHRlcmVkUmVzcG9uc2UocmVzcG9uc2UsIHtcbiAgICAgIHR5cGU6ICdiYXNpYycsXG4gICAgICBoZWFkZXJzTGlzdDogcmVzcG9uc2UuaGVhZGVyc0xpc3RcbiAgICB9KVxuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdjb3JzJykge1xuICAgIC8vIEEgQ09SUyBmaWx0ZXJlZCByZXNwb25zZSBpcyBhIGZpbHRlcmVkIHJlc3BvbnNlIHdob3NlIHR5cGUgaXMgXCJjb3JzXCJcbiAgICAvLyBhbmQgaGVhZGVyIGxpc3QgZXhjbHVkZXMgYW55IGhlYWRlcnMgaW4gaW50ZXJuYWwgcmVzcG9uc2XigJlzIGhlYWRlclxuICAgIC8vIGxpc3Qgd2hvc2UgbmFtZSBpcyBub3QgYSBDT1JTLXNhZmVsaXN0ZWQgcmVzcG9uc2UtaGVhZGVyIG5hbWUsIGdpdmVuXG4gICAgLy8gaW50ZXJuYWwgcmVzcG9uc2XigJlzIENPUlMtZXhwb3NlZCBoZWFkZXItbmFtZSBsaXN0LlxuXG4gICAgLy8gTm90ZTogdW5kaWNpIGRvZXMgbm90IGltcGxlbWVudCBDT1JTLXNhZmVsaXN0ZWQgcmVzcG9uc2UtaGVhZGVyIG5hbWVzXG4gICAgcmV0dXJuIG1ha2VGaWx0ZXJlZFJlc3BvbnNlKHJlc3BvbnNlLCB7XG4gICAgICB0eXBlOiAnY29ycycsXG4gICAgICBoZWFkZXJzTGlzdDogcmVzcG9uc2UuaGVhZGVyc0xpc3RcbiAgICB9KVxuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdvcGFxdWUnKSB7XG4gICAgLy8gQW4gb3BhcXVlIGZpbHRlcmVkIHJlc3BvbnNlIGlzIGEgZmlsdGVyZWQgcmVzcG9uc2Ugd2hvc2UgdHlwZSBpc1xuICAgIC8vIFwib3BhcXVlXCIsIFVSTCBsaXN0IGlzIHRoZSBlbXB0eSBsaXN0LCBzdGF0dXMgaXMgMCwgc3RhdHVzIG1lc3NhZ2VcbiAgICAvLyBpcyB0aGUgZW1wdHkgYnl0ZSBzZXF1ZW5jZSwgaGVhZGVyIGxpc3QgaXMgZW1wdHksIGFuZCBib2R5IGlzIG51bGwuXG5cbiAgICByZXR1cm4gbWFrZUZpbHRlcmVkUmVzcG9uc2UocmVzcG9uc2UsIHtcbiAgICAgIHR5cGU6ICdvcGFxdWUnLFxuICAgICAgdXJsTGlzdDogT2JqZWN0LmZyZWV6ZShbXSksXG4gICAgICBzdGF0dXM6IDAsXG4gICAgICBzdGF0dXNUZXh0OiAnJyxcbiAgICAgIGJvZHk6IG51bGxcbiAgICB9KVxuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdvcGFxdWVyZWRpcmVjdCcpIHtcbiAgICAvLyBBbiBvcGFxdWUtcmVkaXJlY3QgZmlsdGVyZWQgcmVzcG9uc2UgaXMgYSBmaWx0ZXJlZCByZXNwb25zZSB3aG9zZSB0eXBlXG4gICAgLy8gaXMgXCJvcGFxdWVyZWRpcmVjdFwiLCBzdGF0dXMgaXMgMCwgc3RhdHVzIG1lc3NhZ2UgaXMgdGhlIGVtcHR5IGJ5dGVcbiAgICAvLyBzZXF1ZW5jZSwgaGVhZGVyIGxpc3QgaXMgZW1wdHksIGFuZCBib2R5IGlzIG51bGwuXG5cbiAgICByZXR1cm4gbWFrZUZpbHRlcmVkUmVzcG9uc2UocmVzcG9uc2UsIHtcbiAgICAgIHR5cGU6ICdvcGFxdWVyZWRpcmVjdCcsXG4gICAgICBzdGF0dXM6IDAsXG4gICAgICBzdGF0dXNUZXh0OiAnJyxcbiAgICAgIGhlYWRlcnNMaXN0OiBbXSxcbiAgICAgIGJvZHk6IG51bGxcbiAgICB9KVxuICB9IGVsc2Uge1xuICAgIGFzc2VydChmYWxzZSlcbiAgfVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYXBwcm9wcmlhdGUtbmV0d29yay1lcnJvclxuZnVuY3Rpb24gbWFrZUFwcHJvcHJpYXRlTmV0d29ya0Vycm9yIChmZXRjaFBhcmFtcywgZXJyID0gbnVsbCkge1xuICAvLyAxLiBBc3NlcnQ6IGZldGNoUGFyYW1zIGlzIGNhbmNlbGVkLlxuICBhc3NlcnQoaXNDYW5jZWxsZWQoZmV0Y2hQYXJhbXMpKVxuXG4gIC8vIDIuIFJldHVybiBhbiBhYm9ydGVkIG5ldHdvcmsgZXJyb3IgaWYgZmV0Y2hQYXJhbXMgaXMgYWJvcnRlZDtcbiAgLy8gb3RoZXJ3aXNlIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gIHJldHVybiBpc0Fib3J0ZWQoZmV0Y2hQYXJhbXMpXG4gICAgPyBtYWtlTmV0d29ya0Vycm9yKE9iamVjdC5hc3NpZ24obmV3IERPTUV4Y2VwdGlvbignVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC4nLCAnQWJvcnRFcnJvcicpLCB7IGNhdXNlOiBlcnIgfSkpXG4gICAgOiBtYWtlTmV0d29ya0Vycm9yKE9iamVjdC5hc3NpZ24obmV3IERPTUV4Y2VwdGlvbignUmVxdWVzdCB3YXMgY2FuY2VsbGVkLicpLCB7IGNhdXNlOiBlcnIgfSkpXG59XG5cbi8vIGh0dHBzOi8vd2hhdHByLm9yZy9mZXRjaC8xMzkyLmh0bWwjaW5pdGlhbGl6ZS1hLXJlc3BvbnNlXG5mdW5jdGlvbiBpbml0aWFsaXplUmVzcG9uc2UgKHJlc3BvbnNlLCBpbml0LCBib2R5KSB7XG4gIC8vIDEuIElmIGluaXRbXCJzdGF0dXNcIl0gaXMgbm90IGluIHRoZSByYW5nZSAyMDAgdG8gNTk5LCBpbmNsdXNpdmUsIHRoZW5cbiAgLy8gICAgdGhyb3cgYSBSYW5nZUVycm9yLlxuICBpZiAoaW5pdC5zdGF0dXMgIT09IG51bGwgJiYgKGluaXQuc3RhdHVzIDwgMjAwIHx8IGluaXQuc3RhdHVzID4gNTk5KSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdpbml0W1wic3RhdHVzXCJdIG11c3QgYmUgaW4gdGhlIHJhbmdlIG9mIDIwMCB0byA1OTksIGluY2x1c2l2ZS4nKVxuICB9XG5cbiAgLy8gMi4gSWYgaW5pdFtcInN0YXR1c1RleHRcIl0gZG9lcyBub3QgbWF0Y2ggdGhlIHJlYXNvbi1waHJhc2UgdG9rZW4gcHJvZHVjdGlvbixcbiAgLy8gICAgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKCdzdGF0dXNUZXh0JyBpbiBpbml0ICYmIGluaXQuc3RhdHVzVGV4dCAhPSBudWxsKSB7XG4gICAgLy8gU2VlLCBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjEuMjpcbiAgICAvLyAgIHJlYXNvbi1waHJhc2UgID0gKiggSFRBQiAvIFNQIC8gVkNIQVIgLyBvYnMtdGV4dCApXG4gICAgaWYgKCFpc1ZhbGlkUmVhc29uUGhyYXNlKFN0cmluZyhpbml0LnN0YXR1c1RleHQpKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBzdGF0dXNUZXh0JylcbiAgICB9XG4gIH1cblxuICAvLyAzLiBTZXQgcmVzcG9uc2XigJlzIHJlc3BvbnNl4oCZcyBzdGF0dXMgdG8gaW5pdFtcInN0YXR1c1wiXS5cbiAgaWYgKCdzdGF0dXMnIGluIGluaXQgJiYgaW5pdC5zdGF0dXMgIT0gbnVsbCkge1xuICAgIHJlc3BvbnNlW2tTdGF0ZV0uc3RhdHVzID0gaW5pdC5zdGF0dXNcbiAgfVxuXG4gIC8vIDQuIFNldCByZXNwb25zZeKAmXMgcmVzcG9uc2XigJlzIHN0YXR1cyBtZXNzYWdlIHRvIGluaXRbXCJzdGF0dXNUZXh0XCJdLlxuICBpZiAoJ3N0YXR1c1RleHQnIGluIGluaXQgJiYgaW5pdC5zdGF0dXNUZXh0ICE9IG51bGwpIHtcbiAgICByZXNwb25zZVtrU3RhdGVdLnN0YXR1c1RleHQgPSBpbml0LnN0YXR1c1RleHRcbiAgfVxuXG4gIC8vIDUuIElmIGluaXRbXCJoZWFkZXJzXCJdIGV4aXN0cywgdGhlbiBmaWxsIHJlc3BvbnNl4oCZcyBoZWFkZXJzIHdpdGggaW5pdFtcImhlYWRlcnNcIl0uXG4gIGlmICgnaGVhZGVycycgaW4gaW5pdCAmJiBpbml0LmhlYWRlcnMgIT0gbnVsbCkge1xuICAgIGZpbGwocmVzcG9uc2Vba0hlYWRlcnNdLCBpbml0LmhlYWRlcnMpXG4gIH1cblxuICAvLyA2LiBJZiBib2R5IHdhcyBnaXZlbiwgdGhlbjpcbiAgaWYgKGJvZHkpIHtcbiAgICAvLyAxLiBJZiByZXNwb25zZSdzIHN0YXR1cyBpcyBhIG51bGwgYm9keSBzdGF0dXMsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKG51bGxCb2R5U3RhdHVzLmluY2x1ZGVzKHJlc3BvbnNlLnN0YXR1cykpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnUmVzcG9uc2UgY29uc3RydWN0b3InLFxuICAgICAgICBtZXNzYWdlOiAnSW52YWxpZCByZXNwb25zZSBzdGF0dXMgY29kZSAnICsgcmVzcG9uc2Uuc3RhdHVzXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDIuIFNldCByZXNwb25zZSdzIGJvZHkgdG8gYm9keSdzIGJvZHkuXG4gICAgcmVzcG9uc2Vba1N0YXRlXS5ib2R5ID0gYm9keS5ib2R5XG5cbiAgICAvLyAzLiBJZiBib2R5J3MgdHlwZSBpcyBub24tbnVsbCBhbmQgcmVzcG9uc2UncyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluXG4gICAgLy8gICAgYENvbnRlbnQtVHlwZWAsIHRoZW4gYXBwZW5kIChgQ29udGVudC1UeXBlYCwgYm9keSdzIHR5cGUpIHRvIHJlc3BvbnNlJ3MgaGVhZGVyIGxpc3QuXG4gICAgaWYgKGJvZHkudHlwZSAhPSBudWxsICYmICFyZXNwb25zZVtrU3RhdGVdLmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdDb250ZW50LVR5cGUnKSkge1xuICAgICAgcmVzcG9uc2Vba1N0YXRlXS5oZWFkZXJzTGlzdC5hcHBlbmQoJ2NvbnRlbnQtdHlwZScsIGJvZHkudHlwZSlcbiAgICB9XG4gIH1cbn1cblxud2ViaWRsLmNvbnZlcnRlcnMuUmVhZGFibGVTdHJlYW0gPSB3ZWJpZGwuaW50ZXJmYWNlQ29udmVydGVyKFxuICBSZWFkYWJsZVN0cmVhbVxuKVxuXG53ZWJpZGwuY29udmVydGVycy5Gb3JtRGF0YSA9IHdlYmlkbC5pbnRlcmZhY2VDb252ZXJ0ZXIoXG4gIEZvcm1EYXRhXG4pXG5cbndlYmlkbC5jb252ZXJ0ZXJzLlVSTFNlYXJjaFBhcmFtcyA9IHdlYmlkbC5pbnRlcmZhY2VDb252ZXJ0ZXIoXG4gIFVSTFNlYXJjaFBhcmFtc1xuKVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jdHlwZWRlZmRlZi14bWxodHRwcmVxdWVzdGJvZHlpbml0XG53ZWJpZGwuY29udmVydGVycy5YTUxIdHRwUmVxdWVzdEJvZHlJbml0ID0gZnVuY3Rpb24gKFYpIHtcbiAgaWYgKHR5cGVvZiBWID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcoVilcbiAgfVxuXG4gIGlmIChpc0Jsb2JMaWtlKFYpKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkJsb2IoViwgeyBzdHJpY3Q6IGZhbHNlIH0pXG4gIH1cblxuICBpZiAodHlwZXMuaXNBcnJheUJ1ZmZlcihWKSB8fCB0eXBlcy5pc1R5cGVkQXJyYXkoVikgfHwgdHlwZXMuaXNEYXRhVmlldyhWKSkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5CdWZmZXJTb3VyY2UoVilcbiAgfVxuXG4gIGlmICh1dGlsLmlzRm9ybURhdGFMaWtlKFYpKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkZvcm1EYXRhKFYsIHsgc3RyaWN0OiBmYWxzZSB9KVxuICB9XG5cbiAgaWYgKFYgaW5zdGFuY2VvZiBVUkxTZWFyY2hQYXJhbXMpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuVVJMU2VhcmNoUGFyYW1zKFYpXG4gIH1cblxuICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKFYpXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNib2R5aW5pdFxud2ViaWRsLmNvbnZlcnRlcnMuQm9keUluaXQgPSBmdW5jdGlvbiAoVikge1xuICBpZiAoViBpbnN0YW5jZW9mIFJlYWRhYmxlU3RyZWFtKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLlJlYWRhYmxlU3RyZWFtKFYpXG4gIH1cblxuICAvLyBOb3RlOiB0aGUgc3BlYyBkb2Vzbid0IGluY2x1ZGUgYXN5bmMgaXRlcmFibGVzLFxuICAvLyB0aGlzIGlzIGFuIHVuZGljaSBleHRlbnNpb24uXG4gIGlmIChWPy5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdKSB7XG4gICAgcmV0dXJuIFZcbiAgfVxuXG4gIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5YTUxIdHRwUmVxdWVzdEJvZHlJbml0KFYpXG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLlJlc3BvbnNlSW5pdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGtleTogJ3N0YXR1cycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgc2hvcnQnXSxcbiAgICBkZWZhdWx0VmFsdWU6IDIwMFxuICB9LFxuICB7XG4gICAga2V5OiAnc3RhdHVzVGV4dCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZTogJydcbiAgfSxcbiAge1xuICAgIGtleTogJ2hlYWRlcnMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuSGVhZGVyc0luaXRcbiAgfVxuXSlcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1ha2VOZXR3b3JrRXJyb3IsXG4gIG1ha2VSZXNwb25zZSxcbiAgbWFrZUFwcHJvcHJpYXRlTmV0d29ya0Vycm9yLFxuICBmaWx0ZXJSZXNwb25zZSxcbiAgUmVzcG9uc2UsXG4gIGNsb25lUmVzcG9uc2Vcbn1cbiIsCiAgICAiLyogZ2xvYmFscyBBYm9ydENvbnRyb2xsZXIgKi9cblxuJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgZXh0cmFjdEJvZHksIG1peGluQm9keSwgY2xvbmVCb2R5IH0gPSByZXF1aXJlKCcuL2JvZHknKVxuY29uc3QgeyBIZWFkZXJzLCBmaWxsOiBmaWxsSGVhZGVycywgSGVhZGVyc0xpc3QgfSA9IHJlcXVpcmUoJy4vaGVhZGVycycpXG5jb25zdCB7IEZpbmFsaXphdGlvblJlZ2lzdHJ5IH0gPSByZXF1aXJlKCcuLi9jb21wYXQvZGlzcGF0Y2hlci13ZWFrcmVmJykoKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7XG4gIGlzVmFsaWRIVFRQVG9rZW4sXG4gIHNhbWVPcmlnaW4sXG4gIG5vcm1hbGl6ZU1ldGhvZCxcbiAgbWFrZVBvbGljeUNvbnRhaW5lcixcbiAgbm9ybWFsaXplTWV0aG9kUmVjb3JkXG59ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHtcbiAgZm9yYmlkZGVuTWV0aG9kc1NldCxcbiAgY29yc1NhZmVMaXN0ZWRNZXRob2RzU2V0LFxuICByZWZlcnJlclBvbGljeSxcbiAgcmVxdWVzdFJlZGlyZWN0LFxuICByZXF1ZXN0TW9kZSxcbiAgcmVxdWVzdENyZWRlbnRpYWxzLFxuICByZXF1ZXN0Q2FjaGUsXG4gIHJlcXVlc3REdXBsZXhcbn0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7IGtFbnVtZXJhYmxlUHJvcGVydHkgfSA9IHV0aWxcbmNvbnN0IHsga0hlYWRlcnMsIGtTaWduYWwsIGtTdGF0ZSwga0d1YXJkLCBrUmVhbG0gfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi93ZWJpZGwnKVxuY29uc3QgeyBnZXRHbG9iYWxPcmlnaW4gfSA9IHJlcXVpcmUoJy4vZ2xvYmFsJylcbmNvbnN0IHsgVVJMU2VyaWFsaXplciB9ID0gcmVxdWlyZSgnLi9kYXRhVVJMJylcbmNvbnN0IHsga0hlYWRlcnNMaXN0LCBrQ29uc3RydWN0IH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbmNvbnN0IHsgZ2V0TWF4TGlzdGVuZXJzLCBzZXRNYXhMaXN0ZW5lcnMsIGdldEV2ZW50TGlzdGVuZXJzLCBkZWZhdWx0TWF4TGlzdGVuZXJzIH0gPSByZXF1aXJlKCdldmVudHMnKVxuXG5sZXQgVHJhbnNmb3JtU3RyZWFtID0gZ2xvYmFsVGhpcy5UcmFuc2Zvcm1TdHJlYW1cblxuY29uc3Qga0Fib3J0Q29udHJvbGxlciA9IFN5bWJvbCgnYWJvcnRDb250cm9sbGVyJylcblxuY29uc3QgcmVxdWVzdEZpbmFsaXplciA9IG5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeSgoeyBzaWduYWwsIGFib3J0IH0pID0+IHtcbiAgc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnQpXG59KVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdC1jbGFzc1xuY2xhc3MgUmVxdWVzdCB7XG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tcmVxdWVzdFxuICBjb25zdHJ1Y3RvciAoaW5wdXQsIGluaXQgPSB7fSkge1xuICAgIGlmIChpbnB1dCA9PT0ga0NvbnN0cnVjdCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ1JlcXVlc3QgY29uc3RydWN0b3InIH0pXG5cbiAgICBpbnB1dCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKGlucHV0KVxuICAgIGluaXQgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5pdChpbml0KVxuXG4gICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvd2ViYXBwYXBpcy5odG1sI2Vudmlyb25tZW50LXNldHRpbmdzLW9iamVjdFxuICAgIHRoaXNba1JlYWxtXSA9IHtcbiAgICAgIHNldHRpbmdzT2JqZWN0OiB7XG4gICAgICAgIGJhc2VVcmw6IGdldEdsb2JhbE9yaWdpbigpLFxuICAgICAgICBnZXQgb3JpZ2luICgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5iYXNlVXJsPy5vcmlnaW5cbiAgICAgICAgfSxcbiAgICAgICAgcG9saWN5Q29udGFpbmVyOiBtYWtlUG9saWN5Q29udGFpbmVyKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAxLiBMZXQgcmVxdWVzdCBiZSBudWxsLlxuICAgIGxldCByZXF1ZXN0ID0gbnVsbFxuXG4gICAgLy8gMi4gTGV0IGZhbGxiYWNrTW9kZSBiZSBudWxsLlxuICAgIGxldCBmYWxsYmFja01vZGUgPSBudWxsXG5cbiAgICAvLyAzLiBMZXQgYmFzZVVSTCBiZSB0aGlz4oCZcyByZWxldmFudCBzZXR0aW5ncyBvYmplY3TigJlzIEFQSSBiYXNlIFVSTC5cbiAgICBjb25zdCBiYXNlVXJsID0gdGhpc1trUmVhbG1dLnNldHRpbmdzT2JqZWN0LmJhc2VVcmxcblxuICAgIC8vIDQuIExldCBzaWduYWwgYmUgbnVsbC5cbiAgICBsZXQgc2lnbmFsID0gbnVsbFxuXG4gICAgLy8gNS4gSWYgaW5wdXQgaXMgYSBzdHJpbmcsIHRoZW46XG4gICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIDEuIExldCBwYXJzZWRVUkwgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIGlucHV0IHdpdGggYmFzZVVSTC5cbiAgICAgIC8vIDIuIElmIHBhcnNlZFVSTCBpcyBmYWlsdXJlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgbGV0IHBhcnNlZFVSTFxuICAgICAgdHJ5IHtcbiAgICAgICAgcGFyc2VkVVJMID0gbmV3IFVSTChpbnB1dCwgYmFzZVVybClcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGYWlsZWQgdG8gcGFyc2UgVVJMIGZyb20gJyArIGlucHV0LCB7IGNhdXNlOiBlcnIgfSlcbiAgICAgIH1cblxuICAgICAgLy8gMy4gSWYgcGFyc2VkVVJMIGluY2x1ZGVzIGNyZWRlbnRpYWxzLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgaWYgKHBhcnNlZFVSTC51c2VybmFtZSB8fCBwYXJzZWRVUkwucGFzc3dvcmQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAnUmVxdWVzdCBjYW5ub3QgYmUgY29uc3RydWN0ZWQgZnJvbSBhIFVSTCB0aGF0IGluY2x1ZGVzIGNyZWRlbnRpYWxzOiAnICtcbiAgICAgICAgICAgIGlucHV0XG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgLy8gNC4gU2V0IHJlcXVlc3QgdG8gYSBuZXcgcmVxdWVzdCB3aG9zZSBVUkwgaXMgcGFyc2VkVVJMLlxuICAgICAgcmVxdWVzdCA9IG1ha2VSZXF1ZXN0KHsgdXJsTGlzdDogW3BhcnNlZFVSTF0gfSlcblxuICAgICAgLy8gNS4gU2V0IGZhbGxiYWNrTW9kZSB0byBcImNvcnNcIi5cbiAgICAgIGZhbGxiYWNrTW9kZSA9ICdjb3JzJ1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyA2LiBPdGhlcndpc2U6XG5cbiAgICAgIC8vIDcuIEFzc2VydDogaW5wdXQgaXMgYSBSZXF1ZXN0IG9iamVjdC5cbiAgICAgIGFzc2VydChpbnB1dCBpbnN0YW5jZW9mIFJlcXVlc3QpXG5cbiAgICAgIC8vIDguIFNldCByZXF1ZXN0IHRvIGlucHV04oCZcyByZXF1ZXN0LlxuICAgICAgcmVxdWVzdCA9IGlucHV0W2tTdGF0ZV1cblxuICAgICAgLy8gOS4gU2V0IHNpZ25hbCB0byBpbnB1dOKAmXMgc2lnbmFsLlxuICAgICAgc2lnbmFsID0gaW5wdXRba1NpZ25hbF1cbiAgICB9XG5cbiAgICAvLyA3LiBMZXQgb3JpZ2luIGJlIHRoaXPigJlzIHJlbGV2YW50IHNldHRpbmdzIG9iamVjdOKAmXMgb3JpZ2luLlxuICAgIGNvbnN0IG9yaWdpbiA9IHRoaXNba1JlYWxtXS5zZXR0aW5nc09iamVjdC5vcmlnaW5cblxuICAgIC8vIDguIExldCB3aW5kb3cgYmUgXCJjbGllbnRcIi5cbiAgICBsZXQgd2luZG93ID0gJ2NsaWVudCdcblxuICAgIC8vIDkuIElmIHJlcXVlc3TigJlzIHdpbmRvdyBpcyBhbiBlbnZpcm9ubWVudCBzZXR0aW5ncyBvYmplY3QgYW5kIGl0cyBvcmlnaW5cbiAgICAvLyBpcyBzYW1lIG9yaWdpbiB3aXRoIG9yaWdpbiwgdGhlbiBzZXQgd2luZG93IHRvIHJlcXVlc3TigJlzIHdpbmRvdy5cbiAgICBpZiAoXG4gICAgICByZXF1ZXN0LndpbmRvdz8uY29uc3RydWN0b3I/Lm5hbWUgPT09ICdFbnZpcm9ubWVudFNldHRpbmdzT2JqZWN0JyAmJlxuICAgICAgc2FtZU9yaWdpbihyZXF1ZXN0LndpbmRvdywgb3JpZ2luKVxuICAgICkge1xuICAgICAgd2luZG93ID0gcmVxdWVzdC53aW5kb3dcbiAgICB9XG5cbiAgICAvLyAxMC4gSWYgaW5pdFtcIndpbmRvd1wiXSBleGlzdHMgYW5kIGlzIG5vbi1udWxsLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmIChpbml0LndpbmRvdyAhPSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAnd2luZG93JyBvcHRpb24gJyR7d2luZG93fScgbXVzdCBiZSBudWxsYClcbiAgICB9XG5cbiAgICAvLyAxMS4gSWYgaW5pdFtcIndpbmRvd1wiXSBleGlzdHMsIHRoZW4gc2V0IHdpbmRvdyB0byBcIm5vLXdpbmRvd1wiLlxuICAgIGlmICgnd2luZG93JyBpbiBpbml0KSB7XG4gICAgICB3aW5kb3cgPSAnbm8td2luZG93J1xuICAgIH1cblxuICAgIC8vIDEyLiBTZXQgcmVxdWVzdCB0byBhIG5ldyByZXF1ZXN0IHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICAgIHJlcXVlc3QgPSBtYWtlUmVxdWVzdCh7XG4gICAgICAvLyBVUkwgcmVxdWVzdOKAmXMgVVJMLlxuICAgICAgLy8gdW5kaWNpIGltcGxlbWVudGF0aW9uIG5vdGU6IHRoaXMgaXMgc2V0IGFzIHRoZSBmaXJzdCBpdGVtIGluIHJlcXVlc3QncyB1cmxMaXN0IGluIG1ha2VSZXF1ZXN0XG4gICAgICAvLyBtZXRob2QgcmVxdWVzdOKAmXMgbWV0aG9kLlxuICAgICAgbWV0aG9kOiByZXF1ZXN0Lm1ldGhvZCxcbiAgICAgIC8vIGhlYWRlciBsaXN0IEEgY29weSBvZiByZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cbiAgICAgIC8vIHVuZGljaSBpbXBsZW1lbnRhdGlvbiBub3RlOiBoZWFkZXJzTGlzdCBpcyBjbG9uZWQgaW4gbWFrZVJlcXVlc3RcbiAgICAgIGhlYWRlcnNMaXN0OiByZXF1ZXN0LmhlYWRlcnNMaXN0LFxuICAgICAgLy8gdW5zYWZlLXJlcXVlc3QgZmxhZyBTZXQuXG4gICAgICB1bnNhZmVSZXF1ZXN0OiByZXF1ZXN0LnVuc2FmZVJlcXVlc3QsXG4gICAgICAvLyBjbGllbnQgVGhpc+KAmXMgcmVsZXZhbnQgc2V0dGluZ3Mgb2JqZWN0LlxuICAgICAgY2xpZW50OiB0aGlzW2tSZWFsbV0uc2V0dGluZ3NPYmplY3QsXG4gICAgICAvLyB3aW5kb3cgd2luZG93LlxuICAgICAgd2luZG93LFxuICAgICAgLy8gcHJpb3JpdHkgcmVxdWVzdOKAmXMgcHJpb3JpdHkuXG4gICAgICBwcmlvcml0eTogcmVxdWVzdC5wcmlvcml0eSxcbiAgICAgIC8vIG9yaWdpbiByZXF1ZXN04oCZcyBvcmlnaW4uIFRoZSBwcm9wYWdhdGlvbiBvZiB0aGUgb3JpZ2luIGlzIG9ubHkgc2lnbmlmaWNhbnQgZm9yIG5hdmlnYXRpb24gcmVxdWVzdHNcbiAgICAgIC8vIGJlaW5nIGhhbmRsZWQgYnkgYSBzZXJ2aWNlIHdvcmtlci4gSW4gdGhpcyBzY2VuYXJpbyBhIHJlcXVlc3QgY2FuIGhhdmUgYW4gb3JpZ2luIHRoYXQgaXMgZGlmZmVyZW50XG4gICAgICAvLyBmcm9tIHRoZSBjdXJyZW50IGNsaWVudC5cbiAgICAgIG9yaWdpbjogcmVxdWVzdC5vcmlnaW4sXG4gICAgICAvLyByZWZlcnJlciByZXF1ZXN04oCZcyByZWZlcnJlci5cbiAgICAgIHJlZmVycmVyOiByZXF1ZXN0LnJlZmVycmVyLFxuICAgICAgLy8gcmVmZXJyZXIgcG9saWN5IHJlcXVlc3TigJlzIHJlZmVycmVyIHBvbGljeS5cbiAgICAgIHJlZmVycmVyUG9saWN5OiByZXF1ZXN0LnJlZmVycmVyUG9saWN5LFxuICAgICAgLy8gbW9kZSByZXF1ZXN04oCZcyBtb2RlLlxuICAgICAgbW9kZTogcmVxdWVzdC5tb2RlLFxuICAgICAgLy8gY3JlZGVudGlhbHMgbW9kZSByZXF1ZXN04oCZcyBjcmVkZW50aWFscyBtb2RlLlxuICAgICAgY3JlZGVudGlhbHM6IHJlcXVlc3QuY3JlZGVudGlhbHMsXG4gICAgICAvLyBjYWNoZSBtb2RlIHJlcXVlc3TigJlzIGNhY2hlIG1vZGUuXG4gICAgICBjYWNoZTogcmVxdWVzdC5jYWNoZSxcbiAgICAgIC8vIHJlZGlyZWN0IG1vZGUgcmVxdWVzdOKAmXMgcmVkaXJlY3QgbW9kZS5cbiAgICAgIHJlZGlyZWN0OiByZXF1ZXN0LnJlZGlyZWN0LFxuICAgICAgLy8gaW50ZWdyaXR5IG1ldGFkYXRhIHJlcXVlc3TigJlzIGludGVncml0eSBtZXRhZGF0YS5cbiAgICAgIGludGVncml0eTogcmVxdWVzdC5pbnRlZ3JpdHksXG4gICAgICAvLyBrZWVwYWxpdmUgcmVxdWVzdOKAmXMga2VlcGFsaXZlLlxuICAgICAga2VlcGFsaXZlOiByZXF1ZXN0LmtlZXBhbGl2ZSxcbiAgICAgIC8vIHJlbG9hZC1uYXZpZ2F0aW9uIGZsYWcgcmVxdWVzdOKAmXMgcmVsb2FkLW5hdmlnYXRpb24gZmxhZy5cbiAgICAgIHJlbG9hZE5hdmlnYXRpb246IHJlcXVlc3QucmVsb2FkTmF2aWdhdGlvbixcbiAgICAgIC8vIGhpc3RvcnktbmF2aWdhdGlvbiBmbGFnIHJlcXVlc3TigJlzIGhpc3RvcnktbmF2aWdhdGlvbiBmbGFnLlxuICAgICAgaGlzdG9yeU5hdmlnYXRpb246IHJlcXVlc3QuaGlzdG9yeU5hdmlnYXRpb24sXG4gICAgICAvLyBVUkwgbGlzdCBBIGNsb25lIG9mIHJlcXVlc3TigJlzIFVSTCBsaXN0LlxuICAgICAgdXJsTGlzdDogWy4uLnJlcXVlc3QudXJsTGlzdF1cbiAgICB9KVxuXG4gICAgY29uc3QgaW5pdEhhc0tleSA9IE9iamVjdC5rZXlzKGluaXQpLmxlbmd0aCAhPT0gMFxuXG4gICAgLy8gMTMuIElmIGluaXQgaXMgbm90IGVtcHR5LCB0aGVuOlxuICAgIGlmIChpbml0SGFzS2V5KSB7XG4gICAgICAvLyAxLiBJZiByZXF1ZXN04oCZcyBtb2RlIGlzIFwibmF2aWdhdGVcIiwgdGhlbiBzZXQgaXQgdG8gXCJzYW1lLW9yaWdpblwiLlxuICAgICAgaWYgKHJlcXVlc3QubW9kZSA9PT0gJ25hdmlnYXRlJykge1xuICAgICAgICByZXF1ZXN0Lm1vZGUgPSAnc2FtZS1vcmlnaW4nXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIFVuc2V0IHJlcXVlc3TigJlzIHJlbG9hZC1uYXZpZ2F0aW9uIGZsYWcuXG4gICAgICByZXF1ZXN0LnJlbG9hZE5hdmlnYXRpb24gPSBmYWxzZVxuXG4gICAgICAvLyAzLiBVbnNldCByZXF1ZXN04oCZcyBoaXN0b3J5LW5hdmlnYXRpb24gZmxhZy5cbiAgICAgIHJlcXVlc3QuaGlzdG9yeU5hdmlnYXRpb24gPSBmYWxzZVxuXG4gICAgICAvLyA0LiBTZXQgcmVxdWVzdOKAmXMgb3JpZ2luIHRvIFwiY2xpZW50XCIuXG4gICAgICByZXF1ZXN0Lm9yaWdpbiA9ICdjbGllbnQnXG5cbiAgICAgIC8vIDUuIFNldCByZXF1ZXN04oCZcyByZWZlcnJlciB0byBcImNsaWVudFwiXG4gICAgICByZXF1ZXN0LnJlZmVycmVyID0gJ2NsaWVudCdcblxuICAgICAgLy8gNi4gU2V0IHJlcXVlc3TigJlzIHJlZmVycmVyIHBvbGljeSB0byB0aGUgZW1wdHkgc3RyaW5nLlxuICAgICAgcmVxdWVzdC5yZWZlcnJlclBvbGljeSA9ICcnXG5cbiAgICAgIC8vIDcuIFNldCByZXF1ZXN04oCZcyBVUkwgdG8gcmVxdWVzdOKAmXMgY3VycmVudCBVUkwuXG4gICAgICByZXF1ZXN0LnVybCA9IHJlcXVlc3QudXJsTGlzdFtyZXF1ZXN0LnVybExpc3QubGVuZ3RoIC0gMV1cblxuICAgICAgLy8gOC4gU2V0IHJlcXVlc3TigJlzIFVSTCBsaXN0IHRvIMKrIHJlcXVlc3TigJlzIFVSTCDCuy5cbiAgICAgIHJlcXVlc3QudXJsTGlzdCA9IFtyZXF1ZXN0LnVybF1cbiAgICB9XG5cbiAgICAvLyAxNC4gSWYgaW5pdFtcInJlZmVycmVyXCJdIGV4aXN0cywgdGhlbjpcbiAgICBpZiAoaW5pdC5yZWZlcnJlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyAxLiBMZXQgcmVmZXJyZXIgYmUgaW5pdFtcInJlZmVycmVyXCJdLlxuICAgICAgY29uc3QgcmVmZXJyZXIgPSBpbml0LnJlZmVycmVyXG5cbiAgICAgIC8vIDIuIElmIHJlZmVycmVyIGlzIHRoZSBlbXB0eSBzdHJpbmcsIHRoZW4gc2V0IHJlcXVlc3TigJlzIHJlZmVycmVyIHRvIFwibm8tcmVmZXJyZXJcIi5cbiAgICAgIGlmIChyZWZlcnJlciA9PT0gJycpIHtcbiAgICAgICAgcmVxdWVzdC5yZWZlcnJlciA9ICduby1yZWZlcnJlcidcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIDEuIExldCBwYXJzZWRSZWZlcnJlciBiZSB0aGUgcmVzdWx0IG9mIHBhcnNpbmcgcmVmZXJyZXIgd2l0aFxuICAgICAgICAvLyBiYXNlVVJMLlxuICAgICAgICAvLyAyLiBJZiBwYXJzZWRSZWZlcnJlciBpcyBmYWlsdXJlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgICBsZXQgcGFyc2VkUmVmZXJyZXJcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBwYXJzZWRSZWZlcnJlciA9IG5ldyBVUkwocmVmZXJyZXIsIGJhc2VVcmwpXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFJlZmVycmVyIFwiJHtyZWZlcnJlcn1cIiBpcyBub3QgYSB2YWxpZCBVUkwuYCwgeyBjYXVzZTogZXJyIH0pXG4gICAgICAgIH1cblxuICAgICAgICAvLyAzLiBJZiBvbmUgb2YgdGhlIGZvbGxvd2luZyBpcyB0cnVlXG4gICAgICAgIC8vIC0gcGFyc2VkUmVmZXJyZXLigJlzIHNjaGVtZSBpcyBcImFib3V0XCIgYW5kIHBhdGggaXMgdGhlIHN0cmluZyBcImNsaWVudFwiXG4gICAgICAgIC8vIC0gcGFyc2VkUmVmZXJyZXLigJlzIG9yaWdpbiBpcyBub3Qgc2FtZSBvcmlnaW4gd2l0aCBvcmlnaW5cbiAgICAgICAgLy8gdGhlbiBzZXQgcmVxdWVzdOKAmXMgcmVmZXJyZXIgdG8gXCJjbGllbnRcIi5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIChwYXJzZWRSZWZlcnJlci5wcm90b2NvbCA9PT0gJ2Fib3V0OicgJiYgcGFyc2VkUmVmZXJyZXIuaG9zdG5hbWUgPT09ICdjbGllbnQnKSB8fFxuICAgICAgICAgIChvcmlnaW4gJiYgIXNhbWVPcmlnaW4ocGFyc2VkUmVmZXJyZXIsIHRoaXNba1JlYWxtXS5zZXR0aW5nc09iamVjdC5iYXNlVXJsKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmVxdWVzdC5yZWZlcnJlciA9ICdjbGllbnQnXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gNC4gT3RoZXJ3aXNlLCBzZXQgcmVxdWVzdOKAmXMgcmVmZXJyZXIgdG8gcGFyc2VkUmVmZXJyZXIuXG4gICAgICAgICAgcmVxdWVzdC5yZWZlcnJlciA9IHBhcnNlZFJlZmVycmVyXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAxNS4gSWYgaW5pdFtcInJlZmVycmVyUG9saWN5XCJdIGV4aXN0cywgdGhlbiBzZXQgcmVxdWVzdOKAmXMgcmVmZXJyZXIgcG9saWN5XG4gICAgLy8gdG8gaXQuXG4gICAgaWYgKGluaXQucmVmZXJyZXJQb2xpY3kgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVxdWVzdC5yZWZlcnJlclBvbGljeSA9IGluaXQucmVmZXJyZXJQb2xpY3lcbiAgICB9XG5cbiAgICAvLyAxNi4gTGV0IG1vZGUgYmUgaW5pdFtcIm1vZGVcIl0gaWYgaXQgZXhpc3RzLCBhbmQgZmFsbGJhY2tNb2RlIG90aGVyd2lzZS5cbiAgICBsZXQgbW9kZVxuICAgIGlmIChpbml0Lm1vZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbW9kZSA9IGluaXQubW9kZVxuICAgIH0gZWxzZSB7XG4gICAgICBtb2RlID0gZmFsbGJhY2tNb2RlXG4gICAgfVxuXG4gICAgLy8gMTcuIElmIG1vZGUgaXMgXCJuYXZpZ2F0ZVwiLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmIChtb2RlID09PSAnbmF2aWdhdGUnKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ1JlcXVlc3QgY29uc3RydWN0b3InLFxuICAgICAgICBtZXNzYWdlOiAnaW52YWxpZCByZXF1ZXN0IG1vZGUgbmF2aWdhdGUuJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAxOC4gSWYgbW9kZSBpcyBub24tbnVsbCwgc2V0IHJlcXVlc3TigJlzIG1vZGUgdG8gbW9kZS5cbiAgICBpZiAobW9kZSAhPSBudWxsKSB7XG4gICAgICByZXF1ZXN0Lm1vZGUgPSBtb2RlXG4gICAgfVxuXG4gICAgLy8gMTkuIElmIGluaXRbXCJjcmVkZW50aWFsc1wiXSBleGlzdHMsIHRoZW4gc2V0IHJlcXVlc3TigJlzIGNyZWRlbnRpYWxzIG1vZGVcbiAgICAvLyB0byBpdC5cbiAgICBpZiAoaW5pdC5jcmVkZW50aWFscyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXF1ZXN0LmNyZWRlbnRpYWxzID0gaW5pdC5jcmVkZW50aWFsc1xuICAgIH1cblxuICAgIC8vIDE4LiBJZiBpbml0W1wiY2FjaGVcIl0gZXhpc3RzLCB0aGVuIHNldCByZXF1ZXN04oCZcyBjYWNoZSBtb2RlIHRvIGl0LlxuICAgIGlmIChpbml0LmNhY2hlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlcXVlc3QuY2FjaGUgPSBpbml0LmNhY2hlXG4gICAgfVxuXG4gICAgLy8gMjEuIElmIHJlcXVlc3TigJlzIGNhY2hlIG1vZGUgaXMgXCJvbmx5LWlmLWNhY2hlZFwiIGFuZCByZXF1ZXN04oCZcyBtb2RlIGlzXG4gICAgLy8gbm90IFwic2FtZS1vcmlnaW5cIiwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAocmVxdWVzdC5jYWNoZSA9PT0gJ29ubHktaWYtY2FjaGVkJyAmJiByZXF1ZXN0Lm1vZGUgIT09ICdzYW1lLW9yaWdpbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIFwiJ29ubHktaWYtY2FjaGVkJyBjYW4gYmUgc2V0IG9ubHkgd2l0aCAnc2FtZS1vcmlnaW4nIG1vZGVcIlxuICAgICAgKVxuICAgIH1cblxuICAgIC8vIDIyLiBJZiBpbml0W1wicmVkaXJlY3RcIl0gZXhpc3RzLCB0aGVuIHNldCByZXF1ZXN04oCZcyByZWRpcmVjdCBtb2RlIHRvIGl0LlxuICAgIGlmIChpbml0LnJlZGlyZWN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlcXVlc3QucmVkaXJlY3QgPSBpbml0LnJlZGlyZWN0XG4gICAgfVxuXG4gICAgLy8gMjMuIElmIGluaXRbXCJpbnRlZ3JpdHlcIl0gZXhpc3RzLCB0aGVuIHNldCByZXF1ZXN04oCZcyBpbnRlZ3JpdHkgbWV0YWRhdGEgdG8gaXQuXG4gICAgaWYgKGluaXQuaW50ZWdyaXR5ICE9IG51bGwpIHtcbiAgICAgIHJlcXVlc3QuaW50ZWdyaXR5ID0gU3RyaW5nKGluaXQuaW50ZWdyaXR5KVxuICAgIH1cblxuICAgIC8vIDI0LiBJZiBpbml0W1wia2VlcGFsaXZlXCJdIGV4aXN0cywgdGhlbiBzZXQgcmVxdWVzdOKAmXMga2VlcGFsaXZlIHRvIGl0LlxuICAgIGlmIChpbml0LmtlZXBhbGl2ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXF1ZXN0LmtlZXBhbGl2ZSA9IEJvb2xlYW4oaW5pdC5rZWVwYWxpdmUpXG4gICAgfVxuXG4gICAgLy8gMjUuIElmIGluaXRbXCJtZXRob2RcIl0gZXhpc3RzLCB0aGVuOlxuICAgIGlmIChpbml0Lm1ldGhvZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyAxLiBMZXQgbWV0aG9kIGJlIGluaXRbXCJtZXRob2RcIl0uXG4gICAgICBsZXQgbWV0aG9kID0gaW5pdC5tZXRob2RcblxuICAgICAgLy8gMi4gSWYgbWV0aG9kIGlzIG5vdCBhIG1ldGhvZCBvciBtZXRob2QgaXMgYSBmb3JiaWRkZW4gbWV0aG9kLCB0aGVuXG4gICAgICAvLyB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGlmICghaXNWYWxpZEhUVFBUb2tlbihtZXRob2QpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCcke21ldGhvZH0nIGlzIG5vdCBhIHZhbGlkIEhUVFAgbWV0aG9kLmApXG4gICAgICB9XG5cbiAgICAgIGlmIChmb3JiaWRkZW5NZXRob2RzU2V0LmhhcyhtZXRob2QudG9VcHBlckNhc2UoKSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJyR7bWV0aG9kfScgSFRUUCBtZXRob2QgaXMgdW5zdXBwb3J0ZWQuYClcbiAgICAgIH1cblxuICAgICAgLy8gMy4gTm9ybWFsaXplIG1ldGhvZC5cbiAgICAgIG1ldGhvZCA9IG5vcm1hbGl6ZU1ldGhvZFJlY29yZFttZXRob2RdID8/IG5vcm1hbGl6ZU1ldGhvZChtZXRob2QpXG5cbiAgICAgIC8vIDQuIFNldCByZXF1ZXN04oCZcyBtZXRob2QgdG8gbWV0aG9kLlxuICAgICAgcmVxdWVzdC5tZXRob2QgPSBtZXRob2RcbiAgICB9XG5cbiAgICAvLyAyNi4gSWYgaW5pdFtcInNpZ25hbFwiXSBleGlzdHMsIHRoZW4gc2V0IHNpZ25hbCB0byBpdC5cbiAgICBpZiAoaW5pdC5zaWduYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgc2lnbmFsID0gaW5pdC5zaWduYWxcbiAgICB9XG5cbiAgICAvLyAyNy4gU2V0IHRoaXPigJlzIHJlcXVlc3QgdG8gcmVxdWVzdC5cbiAgICB0aGlzW2tTdGF0ZV0gPSByZXF1ZXN0XG5cbiAgICAvLyAyOC4gU2V0IHRoaXPigJlzIHNpZ25hbCB0byBhIG5ldyBBYm9ydFNpZ25hbCBvYmplY3Qgd2l0aCB0aGlz4oCZcyByZWxldmFudFxuICAgIC8vIFJlYWxtLlxuICAgIC8vIFRPRE86IGNvdWxkIHRoaXMgYmUgc2ltcGxpZmllZCB3aXRoIEFib3J0U2lnbmFsLmFueVxuICAgIC8vIChodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2RvbS1hYm9ydHNpZ25hbC1hbnkpXG4gICAgY29uc3QgYWMgPSBuZXcgQWJvcnRDb250cm9sbGVyKClcbiAgICB0aGlzW2tTaWduYWxdID0gYWMuc2lnbmFsXG4gICAgdGhpc1trU2lnbmFsXVtrUmVhbG1dID0gdGhpc1trUmVhbG1dXG5cbiAgICAvLyAyOS4gSWYgc2lnbmFsIGlzIG5vdCBudWxsLCB0aGVuIG1ha2UgdGhpc+KAmXMgc2lnbmFsIGZvbGxvdyBzaWduYWwuXG4gICAgaWYgKHNpZ25hbCAhPSBudWxsKSB7XG4gICAgICBpZiAoXG4gICAgICAgICFzaWduYWwgfHxcbiAgICAgICAgdHlwZW9mIHNpZ25hbC5hYm9ydGVkICE9PSAnYm9vbGVhbicgfHxcbiAgICAgICAgdHlwZW9mIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyICE9PSAnZnVuY3Rpb24nXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICBcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ1JlcXVlc3QnOiBtZW1iZXIgc2lnbmFsIGlzIG5vdCBvZiB0eXBlIEFib3J0U2lnbmFsLlwiXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgIGFjLmFib3J0KHNpZ25hbC5yZWFzb24pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBLZWVwIGEgc3Ryb25nIHJlZiB0byBhYyB3aGlsZSByZXF1ZXN0IG9iamVjdFxuICAgICAgICAvLyBpcyBhbGl2ZS4gVGhpcyBpcyBuZWVkZWQgdG8gcHJldmVudCBBYm9ydENvbnRyb2xsZXJcbiAgICAgICAgLy8gZnJvbSBiZWluZyBwcmVtYXR1cmVseSBnYXJiYWdlIGNvbGxlY3RlZC5cbiAgICAgICAgLy8gU2VlLCBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMTkyNi5cbiAgICAgICAgdGhpc1trQWJvcnRDb250cm9sbGVyXSA9IGFjXG5cbiAgICAgICAgY29uc3QgYWNSZWYgPSBuZXcgV2Vha1JlZihhYylcbiAgICAgICAgY29uc3QgYWJvcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3QgYWMgPSBhY1JlZi5kZXJlZigpXG4gICAgICAgICAgaWYgKGFjICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGFjLmFib3J0KHRoaXMucmVhc29uKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoaXJkLXBhcnR5IEFib3J0Q29udHJvbGxlcnMgbWF5IG5vdCB3b3JrIHdpdGggdGhlc2UuXG4gICAgICAgIC8vIFNlZSwgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvcHVsbC8xOTEwI2lzc3VlY29tbWVudC0xNDY0NDk1NjE5LlxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIElmIHRoZSBtYXggYW1vdW50IG9mIGxpc3RlbmVycyBpcyBlcXVhbCB0byB0aGUgZGVmYXVsdCwgaW5jcmVhc2UgaXRcbiAgICAgICAgICAvLyBUaGlzIGlzIG9ubHkgYXZhaWxhYmxlIGluIG5vZGUgPj0gdjE5LjkuMFxuICAgICAgICAgIGlmICh0eXBlb2YgZ2V0TWF4TGlzdGVuZXJzID09PSAnZnVuY3Rpb24nICYmIGdldE1heExpc3RlbmVycyhzaWduYWwpID09PSBkZWZhdWx0TWF4TGlzdGVuZXJzKSB7XG4gICAgICAgICAgICBzZXRNYXhMaXN0ZW5lcnMoMTAwLCBzaWduYWwpXG4gICAgICAgICAgfSBlbHNlIGlmIChnZXRFdmVudExpc3RlbmVycyhzaWduYWwsICdhYm9ydCcpLmxlbmd0aCA+PSBkZWZhdWx0TWF4TGlzdGVuZXJzKSB7XG4gICAgICAgICAgICBzZXRNYXhMaXN0ZW5lcnMoMTAwLCBzaWduYWwpXG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIHt9XG5cbiAgICAgICAgdXRpbC5hZGRBYm9ydExpc3RlbmVyKHNpZ25hbCwgYWJvcnQpXG4gICAgICAgIHJlcXVlc3RGaW5hbGl6ZXIucmVnaXN0ZXIoYWMsIHsgc2lnbmFsLCBhYm9ydCB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDMwLiBTZXQgdGhpc+KAmXMgaGVhZGVycyB0byBhIG5ldyBIZWFkZXJzIG9iamVjdCB3aXRoIHRoaXPigJlzIHJlbGV2YW50XG4gICAgLy8gUmVhbG0sIHdob3NlIGhlYWRlciBsaXN0IGlzIHJlcXVlc3TigJlzIGhlYWRlciBsaXN0IGFuZCBndWFyZCBpc1xuICAgIC8vIFwicmVxdWVzdFwiLlxuICAgIHRoaXNba0hlYWRlcnNdID0gbmV3IEhlYWRlcnMoa0NvbnN0cnVjdClcbiAgICB0aGlzW2tIZWFkZXJzXVtrSGVhZGVyc0xpc3RdID0gcmVxdWVzdC5oZWFkZXJzTGlzdFxuICAgIHRoaXNba0hlYWRlcnNdW2tHdWFyZF0gPSAncmVxdWVzdCdcbiAgICB0aGlzW2tIZWFkZXJzXVtrUmVhbG1dID0gdGhpc1trUmVhbG1dXG5cbiAgICAvLyAzMS4gSWYgdGhpc+KAmXMgcmVxdWVzdOKAmXMgbW9kZSBpcyBcIm5vLWNvcnNcIiwgdGhlbjpcbiAgICBpZiAobW9kZSA9PT0gJ25vLWNvcnMnKSB7XG4gICAgICAvLyAxLiBJZiB0aGlz4oCZcyByZXF1ZXN04oCZcyBtZXRob2QgaXMgbm90IGEgQ09SUy1zYWZlbGlzdGVkIG1ldGhvZCxcbiAgICAgIC8vIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICBpZiAoIWNvcnNTYWZlTGlzdGVkTWV0aG9kc1NldC5oYXMocmVxdWVzdC5tZXRob2QpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgYCcke3JlcXVlc3QubWV0aG9kfSBpcyB1bnN1cHBvcnRlZCBpbiBuby1jb3JzIG1vZGUuYFxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIFNldCB0aGlz4oCZcyBoZWFkZXJz4oCZcyBndWFyZCB0byBcInJlcXVlc3Qtbm8tY29yc1wiLlxuICAgICAgdGhpc1trSGVhZGVyc11ba0d1YXJkXSA9ICdyZXF1ZXN0LW5vLWNvcnMnXG4gICAgfVxuXG4gICAgLy8gMzIuIElmIGluaXQgaXMgbm90IGVtcHR5LCB0aGVuOlxuICAgIGlmIChpbml0SGFzS2V5KSB7XG4gICAgICAvKiogQHR5cGUge0hlYWRlcnNMaXN0fSAqL1xuICAgICAgY29uc3QgaGVhZGVyc0xpc3QgPSB0aGlzW2tIZWFkZXJzXVtrSGVhZGVyc0xpc3RdXG4gICAgICAvLyAxLiBMZXQgaGVhZGVycyBiZSBhIGNvcHkgb2YgdGhpc+KAmXMgaGVhZGVycyBhbmQgaXRzIGFzc29jaWF0ZWQgaGVhZGVyXG4gICAgICAvLyBsaXN0LlxuICAgICAgLy8gMi4gSWYgaW5pdFtcImhlYWRlcnNcIl0gZXhpc3RzLCB0aGVuIHNldCBoZWFkZXJzIHRvIGluaXRbXCJoZWFkZXJzXCJdLlxuICAgICAgY29uc3QgaGVhZGVycyA9IGluaXQuaGVhZGVycyAhPT0gdW5kZWZpbmVkID8gaW5pdC5oZWFkZXJzIDogbmV3IEhlYWRlcnNMaXN0KGhlYWRlcnNMaXN0KVxuXG4gICAgICAvLyAzLiBFbXB0eSB0aGlz4oCZcyBoZWFkZXJz4oCZcyBoZWFkZXIgbGlzdC5cbiAgICAgIGhlYWRlcnNMaXN0LmNsZWFyKClcblxuICAgICAgLy8gNC4gSWYgaGVhZGVycyBpcyBhIEhlYWRlcnMgb2JqZWN0LCB0aGVuIGZvciBlYWNoIGhlYWRlciBpbiBpdHMgaGVhZGVyXG4gICAgICAvLyBsaXN0LCBhcHBlbmQgaGVhZGVy4oCZcyBuYW1lL2hlYWRlcuKAmXMgdmFsdWUgdG8gdGhpc+KAmXMgaGVhZGVycy5cbiAgICAgIGlmIChoZWFkZXJzIGluc3RhbmNlb2YgSGVhZGVyc0xpc3QpIHtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIGhlYWRlcnMpIHtcbiAgICAgICAgICBoZWFkZXJzTGlzdC5hcHBlbmQoa2V5LCB2YWwpXG4gICAgICAgIH1cbiAgICAgICAgLy8gTm90ZTogQ29weSB0aGUgYHNldC1jb29raWVgIG1ldGEtZGF0YS5cbiAgICAgICAgaGVhZGVyc0xpc3QuY29va2llcyA9IGhlYWRlcnMuY29va2llc1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gNS4gT3RoZXJ3aXNlLCBmaWxsIHRoaXPigJlzIGhlYWRlcnMgd2l0aCBoZWFkZXJzLlxuICAgICAgICBmaWxsSGVhZGVycyh0aGlzW2tIZWFkZXJzXSwgaGVhZGVycylcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAzMy4gTGV0IGlucHV0Qm9keSBiZSBpbnB1dOKAmXMgcmVxdWVzdOKAmXMgYm9keSBpZiBpbnB1dCBpcyBhIFJlcXVlc3RcbiAgICAvLyBvYmplY3Q7IG90aGVyd2lzZSBudWxsLlxuICAgIGNvbnN0IGlucHV0Qm9keSA9IGlucHV0IGluc3RhbmNlb2YgUmVxdWVzdCA/IGlucHV0W2tTdGF0ZV0uYm9keSA6IG51bGxcblxuICAgIC8vIDM0LiBJZiBlaXRoZXIgaW5pdFtcImJvZHlcIl0gZXhpc3RzIGFuZCBpcyBub24tbnVsbCBvciBpbnB1dEJvZHkgaXNcbiAgICAvLyBub24tbnVsbCwgYW5kIHJlcXVlc3TigJlzIG1ldGhvZCBpcyBgR0VUYCBvciBgSEVBRGAsIHRoZW4gdGhyb3cgYVxuICAgIC8vIFR5cGVFcnJvci5cbiAgICBpZiAoXG4gICAgICAoaW5pdC5ib2R5ICE9IG51bGwgfHwgaW5wdXRCb2R5ICE9IG51bGwpICYmXG4gICAgICAocmVxdWVzdC5tZXRob2QgPT09ICdHRVQnIHx8IHJlcXVlc3QubWV0aG9kID09PSAnSEVBRCcpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZXF1ZXN0IHdpdGggR0VUL0hFQUQgbWV0aG9kIGNhbm5vdCBoYXZlIGJvZHkuJylcbiAgICB9XG5cbiAgICAvLyAzNS4gTGV0IGluaXRCb2R5IGJlIG51bGwuXG4gICAgbGV0IGluaXRCb2R5ID0gbnVsbFxuXG4gICAgLy8gMzYuIElmIGluaXRbXCJib2R5XCJdIGV4aXN0cyBhbmQgaXMgbm9uLW51bGwsIHRoZW46XG4gICAgaWYgKGluaXQuYm9keSAhPSBudWxsKSB7XG4gICAgICAvLyAxLiBMZXQgQ29udGVudC1UeXBlIGJlIG51bGwuXG4gICAgICAvLyAyLiBTZXQgaW5pdEJvZHkgYW5kIENvbnRlbnQtVHlwZSB0byB0aGUgcmVzdWx0IG9mIGV4dHJhY3RpbmdcbiAgICAgIC8vIGluaXRbXCJib2R5XCJdLCB3aXRoIGtlZXBhbGl2ZSBzZXQgdG8gcmVxdWVzdOKAmXMga2VlcGFsaXZlLlxuICAgICAgY29uc3QgW2V4dHJhY3RlZEJvZHksIGNvbnRlbnRUeXBlXSA9IGV4dHJhY3RCb2R5KFxuICAgICAgICBpbml0LmJvZHksXG4gICAgICAgIHJlcXVlc3Qua2VlcGFsaXZlXG4gICAgICApXG4gICAgICBpbml0Qm9keSA9IGV4dHJhY3RlZEJvZHlcblxuICAgICAgLy8gMywgSWYgQ29udGVudC1UeXBlIGlzIG5vbi1udWxsIGFuZCB0aGlz4oCZcyBoZWFkZXJz4oCZcyBoZWFkZXIgbGlzdCBkb2VzXG4gICAgICAvLyBub3QgY29udGFpbiBgQ29udGVudC1UeXBlYCwgdGhlbiBhcHBlbmQgYENvbnRlbnQtVHlwZWAvQ29udGVudC1UeXBlIHRvXG4gICAgICAvLyB0aGlz4oCZcyBoZWFkZXJzLlxuICAgICAgaWYgKGNvbnRlbnRUeXBlICYmICF0aGlzW2tIZWFkZXJzXVtrSGVhZGVyc0xpc3RdLmNvbnRhaW5zKCdjb250ZW50LXR5cGUnKSkge1xuICAgICAgICB0aGlzW2tIZWFkZXJzXS5hcHBlbmQoJ2NvbnRlbnQtdHlwZScsIGNvbnRlbnRUeXBlKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDM3LiBMZXQgaW5wdXRPckluaXRCb2R5IGJlIGluaXRCb2R5IGlmIGl0IGlzIG5vbi1udWxsOyBvdGhlcndpc2VcbiAgICAvLyBpbnB1dEJvZHkuXG4gICAgY29uc3QgaW5wdXRPckluaXRCb2R5ID0gaW5pdEJvZHkgPz8gaW5wdXRCb2R5XG5cbiAgICAvLyAzOC4gSWYgaW5wdXRPckluaXRCb2R5IGlzIG5vbi1udWxsIGFuZCBpbnB1dE9ySW5pdEJvZHnigJlzIHNvdXJjZSBpc1xuICAgIC8vIG51bGwsIHRoZW46XG4gICAgaWYgKGlucHV0T3JJbml0Qm9keSAhPSBudWxsICYmIGlucHV0T3JJbml0Qm9keS5zb3VyY2UgPT0gbnVsbCkge1xuICAgICAgLy8gMS4gSWYgaW5pdEJvZHkgaXMgbm9uLW51bGwgYW5kIGluaXRbXCJkdXBsZXhcIl0gZG9lcyBub3QgZXhpc3QsXG4gICAgICAvLyAgICB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgaWYgKGluaXRCb2R5ICE9IG51bGwgJiYgaW5pdC5kdXBsZXggPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZXF1ZXN0SW5pdDogZHVwbGV4IG9wdGlvbiBpcyByZXF1aXJlZCB3aGVuIHNlbmRpbmcgYSBib2R5LicpXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIElmIHRoaXPigJlzIHJlcXVlc3TigJlzIG1vZGUgaXMgbmVpdGhlciBcInNhbWUtb3JpZ2luXCIgbm9yIFwiY29yc1wiLFxuICAgICAgLy8gdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGlmIChyZXF1ZXN0Lm1vZGUgIT09ICdzYW1lLW9yaWdpbicgJiYgcmVxdWVzdC5tb2RlICE9PSAnY29ycycpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAnSWYgcmVxdWVzdCBpcyBtYWRlIGZyb20gUmVhZGFibGVTdHJlYW0sIG1vZGUgc2hvdWxkIGJlIFwic2FtZS1vcmlnaW5cIiBvciBcImNvcnNcIidcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICAvLyAzLiBTZXQgdGhpc+KAmXMgcmVxdWVzdOKAmXMgdXNlLUNPUlMtcHJlZmxpZ2h0IGZsYWcuXG4gICAgICByZXF1ZXN0LnVzZUNPUlNQcmVmbGlnaHRGbGFnID0gdHJ1ZVxuICAgIH1cblxuICAgIC8vIDM5LiBMZXQgZmluYWxCb2R5IGJlIGlucHV0T3JJbml0Qm9keS5cbiAgICBsZXQgZmluYWxCb2R5ID0gaW5wdXRPckluaXRCb2R5XG5cbiAgICAvLyA0MC4gSWYgaW5pdEJvZHkgaXMgbnVsbCBhbmQgaW5wdXRCb2R5IGlzIG5vbi1udWxsLCB0aGVuOlxuICAgIGlmIChpbml0Qm9keSA9PSBudWxsICYmIGlucHV0Qm9keSAhPSBudWxsKSB7XG4gICAgICAvLyAxLiBJZiBpbnB1dCBpcyB1bnVzYWJsZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGlmICh1dGlsLmlzRGlzdHVyYmVkKGlucHV0Qm9keS5zdHJlYW0pIHx8IGlucHV0Qm9keS5zdHJlYW0ubG9ja2VkKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgJ0Nhbm5vdCBjb25zdHJ1Y3QgYSBSZXF1ZXN0IHdpdGggYSBSZXF1ZXN0IG9iamVjdCB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gdXNlZC4nXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgLy8gMi4gU2V0IGZpbmFsQm9keSB0byB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEgcHJveHkgZm9yIGlucHV0Qm9keS5cbiAgICAgIGlmICghVHJhbnNmb3JtU3RyZWFtKSB7XG4gICAgICAgIFRyYW5zZm9ybVN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbS93ZWInKS5UcmFuc2Zvcm1TdHJlYW1cbiAgICAgIH1cblxuICAgICAgLy8gaHR0cHM6Ly9zdHJlYW1zLnNwZWMud2hhdHdnLm9yZy8jcmVhZGFibGVzdHJlYW0tY3JlYXRlLWEtcHJveHlcbiAgICAgIGNvbnN0IGlkZW50aXR5VHJhbnNmb3JtID0gbmV3IFRyYW5zZm9ybVN0cmVhbSgpXG4gICAgICBpbnB1dEJvZHkuc3RyZWFtLnBpcGVUaHJvdWdoKGlkZW50aXR5VHJhbnNmb3JtKVxuICAgICAgZmluYWxCb2R5ID0ge1xuICAgICAgICBzb3VyY2U6IGlucHV0Qm9keS5zb3VyY2UsXG4gICAgICAgIGxlbmd0aDogaW5wdXRCb2R5Lmxlbmd0aCxcbiAgICAgICAgc3RyZWFtOiBpZGVudGl0eVRyYW5zZm9ybS5yZWFkYWJsZVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDQxLiBTZXQgdGhpc+KAmXMgcmVxdWVzdOKAmXMgYm9keSB0byBmaW5hbEJvZHkuXG4gICAgdGhpc1trU3RhdGVdLmJvZHkgPSBmaW5hbEJvZHlcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVxdWVzdOKAmXMgSFRUUCBtZXRob2QsIHdoaWNoIGlzIFwiR0VUXCIgYnkgZGVmYXVsdC5cbiAgZ2V0IG1ldGhvZCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBtZXRob2QgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc+KAmXMgcmVxdWVzdOKAmXMgbWV0aG9kLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ubWV0aG9kXG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSBVUkwgb2YgcmVxdWVzdCBhcyBhIHN0cmluZy5cbiAgZ2V0IHVybCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSB1cmwgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc+KAmXMgcmVxdWVzdOKAmXMgVVJMLCBzZXJpYWxpemVkLlxuICAgIHJldHVybiBVUkxTZXJpYWxpemVyKHRoaXNba1N0YXRlXS51cmwpXG4gIH1cblxuICAvLyBSZXR1cm5zIGEgSGVhZGVycyBvYmplY3QgY29uc2lzdGluZyBvZiB0aGUgaGVhZGVycyBhc3NvY2lhdGVkIHdpdGggcmVxdWVzdC5cbiAgLy8gTm90ZSB0aGF0IGhlYWRlcnMgYWRkZWQgaW4gdGhlIG5ldHdvcmsgbGF5ZXIgYnkgdGhlIHVzZXIgYWdlbnQgd2lsbCBub3RcbiAgLy8gYmUgYWNjb3VudGVkIGZvciBpbiB0aGlzIG9iamVjdCwgZS5nLiwgdGhlIFwiSG9zdFwiIGhlYWRlci5cbiAgZ2V0IGhlYWRlcnMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgaGVhZGVycyBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlz4oCZcyBoZWFkZXJzLlxuICAgIHJldHVybiB0aGlzW2tIZWFkZXJzXVxuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUga2luZCBvZiByZXNvdXJjZSByZXF1ZXN0ZWQgYnkgcmVxdWVzdCwgZS5nLiwgXCJkb2N1bWVudFwiXG4gIC8vIG9yIFwic2NyaXB0XCIuXG4gIGdldCBkZXN0aW5hdGlvbiAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBkZXN0aW5hdGlvbiBnZXR0ZXIgYXJlIHRvIHJldHVybiB0aGlz4oCZcyByZXF1ZXN04oCZcyBkZXN0aW5hdGlvbi5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmRlc3RpbmF0aW9uXG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSByZWZlcnJlciBvZiByZXF1ZXN0LiBJdHMgdmFsdWUgY2FuIGJlIGEgc2FtZS1vcmlnaW4gVVJMIGlmXG4gIC8vIGV4cGxpY2l0bHkgc2V0IGluIGluaXQsIHRoZSBlbXB0eSBzdHJpbmcgdG8gaW5kaWNhdGUgbm8gcmVmZXJyZXIsIGFuZFxuICAvLyBcImFib3V0OmNsaWVudFwiIHdoZW4gZGVmYXVsdGluZyB0byB0aGUgZ2xvYmFs4oCZcyBkZWZhdWx0LiBUaGlzIGlzIHVzZWRcbiAgLy8gZHVyaW5nIGZldGNoaW5nIHRvIGRldGVybWluZSB0aGUgdmFsdWUgb2YgdGhlIGBSZWZlcmVyYCBoZWFkZXIgb2YgdGhlXG4gIC8vIHJlcXVlc3QgYmVpbmcgbWFkZS5cbiAgZ2V0IHJlZmVycmVyICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gMS4gSWYgdGhpc+KAmXMgcmVxdWVzdOKAmXMgcmVmZXJyZXIgaXMgXCJuby1yZWZlcnJlclwiLCB0aGVuIHJldHVybiB0aGVcbiAgICAvLyBlbXB0eSBzdHJpbmcuXG4gICAgaWYgKHRoaXNba1N0YXRlXS5yZWZlcnJlciA9PT0gJ25vLXJlZmVycmVyJykge1xuICAgICAgcmV0dXJuICcnXG4gICAgfVxuXG4gICAgLy8gMi4gSWYgdGhpc+KAmXMgcmVxdWVzdOKAmXMgcmVmZXJyZXIgaXMgXCJjbGllbnRcIiwgdGhlbiByZXR1cm5cbiAgICAvLyBcImFib3V0OmNsaWVudFwiLlxuICAgIGlmICh0aGlzW2tTdGF0ZV0ucmVmZXJyZXIgPT09ICdjbGllbnQnKSB7XG4gICAgICByZXR1cm4gJ2Fib3V0OmNsaWVudCdcbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gdGhpc+KAmXMgcmVxdWVzdOKAmXMgcmVmZXJyZXIsIHNlcmlhbGl6ZWQuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5yZWZlcnJlci50b1N0cmluZygpXG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSByZWZlcnJlciBwb2xpY3kgYXNzb2NpYXRlZCB3aXRoIHJlcXVlc3QuXG4gIC8vIFRoaXMgaXMgdXNlZCBkdXJpbmcgZmV0Y2hpbmcgdG8gY29tcHV0ZSB0aGUgdmFsdWUgb2YgdGhlIHJlcXVlc3TigJlzXG4gIC8vIHJlZmVycmVyLlxuICBnZXQgcmVmZXJyZXJQb2xpY3kgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgcmVmZXJyZXJQb2xpY3kgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc+KAmXMgcmVxdWVzdOKAmXMgcmVmZXJyZXIgcG9saWN5LlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ucmVmZXJyZXJQb2xpY3lcbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIG1vZGUgYXNzb2NpYXRlZCB3aXRoIHJlcXVlc3QsIHdoaWNoIGlzIGEgc3RyaW5nIGluZGljYXRpbmdcbiAgLy8gd2hldGhlciB0aGUgcmVxdWVzdCB3aWxsIHVzZSBDT1JTLCBvciB3aWxsIGJlIHJlc3RyaWN0ZWQgdG8gc2FtZS1vcmlnaW5cbiAgLy8gVVJMcy5cbiAgZ2V0IG1vZGUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgbW9kZSBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlz4oCZcyByZXF1ZXN04oCZcyBtb2RlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ubW9kZVxuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgY3JlZGVudGlhbHMgbW9kZSBhc3NvY2lhdGVkIHdpdGggcmVxdWVzdCxcbiAgLy8gd2hpY2ggaXMgYSBzdHJpbmcgaW5kaWNhdGluZyB3aGV0aGVyIGNyZWRlbnRpYWxzIHdpbGwgYmUgc2VudCB3aXRoIHRoZVxuICAvLyByZXF1ZXN0IGFsd2F5cywgbmV2ZXIsIG9yIG9ubHkgd2hlbiBzZW50IHRvIGEgc2FtZS1vcmlnaW4gVVJMLlxuICBnZXQgY3JlZGVudGlhbHMgKCkge1xuICAgIC8vIFRoZSBjcmVkZW50aWFscyBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlz4oCZcyByZXF1ZXN04oCZcyBjcmVkZW50aWFscyBtb2RlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uY3JlZGVudGlhbHNcbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIGNhY2hlIG1vZGUgYXNzb2NpYXRlZCB3aXRoIHJlcXVlc3QsXG4gIC8vIHdoaWNoIGlzIGEgc3RyaW5nIGluZGljYXRpbmcgaG93IHRoZSByZXF1ZXN0IHdpbGxcbiAgLy8gaW50ZXJhY3Qgd2l0aCB0aGUgYnJvd3NlcuKAmXMgY2FjaGUgd2hlbiBmZXRjaGluZy5cbiAgZ2V0IGNhY2hlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIGNhY2hlIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXPigJlzIHJlcXVlc3TigJlzIGNhY2hlIG1vZGUuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5jYWNoZVxuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgcmVkaXJlY3QgbW9kZSBhc3NvY2lhdGVkIHdpdGggcmVxdWVzdCxcbiAgLy8gd2hpY2ggaXMgYSBzdHJpbmcgaW5kaWNhdGluZyBob3cgcmVkaXJlY3RzIGZvciB0aGVcbiAgLy8gcmVxdWVzdCB3aWxsIGJlIGhhbmRsZWQgZHVyaW5nIGZldGNoaW5nLiBBIHJlcXVlc3RcbiAgLy8gd2lsbCBmb2xsb3cgcmVkaXJlY3RzIGJ5IGRlZmF1bHQuXG4gIGdldCByZWRpcmVjdCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSByZWRpcmVjdCBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlz4oCZcyByZXF1ZXN04oCZcyByZWRpcmVjdCBtb2RlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ucmVkaXJlY3RcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVxdWVzdOKAmXMgc3VicmVzb3VyY2UgaW50ZWdyaXR5IG1ldGFkYXRhLCB3aGljaCBpcyBhXG4gIC8vIGNyeXB0b2dyYXBoaWMgaGFzaCBvZiB0aGUgcmVzb3VyY2UgYmVpbmcgZmV0Y2hlZC4gSXRzIHZhbHVlXG4gIC8vIGNvbnNpc3RzIG9mIG11bHRpcGxlIGhhc2hlcyBzZXBhcmF0ZWQgYnkgd2hpdGVzcGFjZS4gW1NSSV1cbiAgZ2V0IGludGVncml0eSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBpbnRlZ3JpdHkgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc+KAmXMgcmVxdWVzdOKAmXMgaW50ZWdyaXR5XG4gICAgLy8gbWV0YWRhdGEuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5pbnRlZ3JpdHlcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgcmVxdWVzdCBjYW4gb3V0bGl2ZSB0aGVcbiAgLy8gZ2xvYmFsIGluIHdoaWNoIGl0IHdhcyBjcmVhdGVkLlxuICBnZXQga2VlcGFsaXZlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIGtlZXBhbGl2ZSBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlz4oCZcyByZXF1ZXN04oCZcyBrZWVwYWxpdmUuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5rZWVwYWxpdmVcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgcmVxdWVzdCBpcyBmb3IgYSByZWxvYWRcbiAgLy8gbmF2aWdhdGlvbi5cbiAgZ2V0IGlzUmVsb2FkTmF2aWdhdGlvbiAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBpc1JlbG9hZE5hdmlnYXRpb24gZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdHJ1ZSBpZiB0aGlz4oCZc1xuICAgIC8vIHJlcXVlc3TigJlzIHJlbG9hZC1uYXZpZ2F0aW9uIGZsYWcgaXMgc2V0OyBvdGhlcndpc2UgZmFsc2UuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5yZWxvYWROYXZpZ2F0aW9uXG4gIH1cblxuICAvLyBSZXR1cm5zIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90IHJlcXVlc3QgaXMgZm9yIGEgaGlzdG9yeVxuICAvLyBuYXZpZ2F0aW9uIChhLmsuYS4gYmFjay1mb3dhcmQgbmF2aWdhdGlvbikuXG4gIGdldCBpc0hpc3RvcnlOYXZpZ2F0aW9uICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIGlzSGlzdG9yeU5hdmlnYXRpb24gZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdHJ1ZSBpZiB0aGlz4oCZcyByZXF1ZXN04oCZc1xuICAgIC8vIGhpc3RvcnktbmF2aWdhdGlvbiBmbGFnIGlzIHNldDsgb3RoZXJ3aXNlIGZhbHNlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uaGlzdG9yeU5hdmlnYXRpb25cbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIHNpZ25hbCBhc3NvY2lhdGVkIHdpdGggcmVxdWVzdCwgd2hpY2ggaXMgYW4gQWJvcnRTaWduYWxcbiAgLy8gb2JqZWN0IGluZGljYXRpbmcgd2hldGhlciBvciBub3QgcmVxdWVzdCBoYXMgYmVlbiBhYm9ydGVkLCBhbmQgaXRzXG4gIC8vIGFib3J0IGV2ZW50IGhhbmRsZXIuXG4gIGdldCBzaWduYWwgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgc2lnbmFsIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXPigJlzIHNpZ25hbC5cbiAgICByZXR1cm4gdGhpc1trU2lnbmFsXVxuICB9XG5cbiAgZ2V0IGJvZHkgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmJvZHkgPyB0aGlzW2tTdGF0ZV0uYm9keS5zdHJlYW0gOiBudWxsXG4gIH1cblxuICBnZXQgYm9keVVzZWQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICByZXR1cm4gISF0aGlzW2tTdGF0ZV0uYm9keSAmJiB1dGlsLmlzRGlzdHVyYmVkKHRoaXNba1N0YXRlXS5ib2R5LnN0cmVhbSlcbiAgfVxuXG4gIGdldCBkdXBsZXggKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICByZXR1cm4gJ2hhbGYnXG4gIH1cblxuICAvLyBSZXR1cm5zIGEgY2xvbmUgb2YgcmVxdWVzdC5cbiAgY2xvbmUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyAxLiBJZiB0aGlzIGlzIHVudXNhYmxlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICh0aGlzLmJvZHlVc2VkIHx8IHRoaXMuYm9keT8ubG9ja2VkKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd1bnVzYWJsZScpXG4gICAgfVxuXG4gICAgLy8gMi4gTGV0IGNsb25lZFJlcXVlc3QgYmUgdGhlIHJlc3VsdCBvZiBjbG9uaW5nIHRoaXPigJlzIHJlcXVlc3QuXG4gICAgY29uc3QgY2xvbmVkUmVxdWVzdCA9IGNsb25lUmVxdWVzdCh0aGlzW2tTdGF0ZV0pXG5cbiAgICAvLyAzLiBMZXQgY2xvbmVkUmVxdWVzdE9iamVjdCBiZSB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEgUmVxdWVzdCBvYmplY3QsXG4gICAgLy8gZ2l2ZW4gY2xvbmVkUmVxdWVzdCwgdGhpc+KAmXMgaGVhZGVyc+KAmXMgZ3VhcmQsIGFuZCB0aGlz4oCZcyByZWxldmFudCBSZWFsbS5cbiAgICBjb25zdCBjbG9uZWRSZXF1ZXN0T2JqZWN0ID0gbmV3IFJlcXVlc3Qoa0NvbnN0cnVjdClcbiAgICBjbG9uZWRSZXF1ZXN0T2JqZWN0W2tTdGF0ZV0gPSBjbG9uZWRSZXF1ZXN0XG4gICAgY2xvbmVkUmVxdWVzdE9iamVjdFtrUmVhbG1dID0gdGhpc1trUmVhbG1dXG4gICAgY2xvbmVkUmVxdWVzdE9iamVjdFtrSGVhZGVyc10gPSBuZXcgSGVhZGVycyhrQ29uc3RydWN0KVxuICAgIGNsb25lZFJlcXVlc3RPYmplY3Rba0hlYWRlcnNdW2tIZWFkZXJzTGlzdF0gPSBjbG9uZWRSZXF1ZXN0LmhlYWRlcnNMaXN0XG4gICAgY2xvbmVkUmVxdWVzdE9iamVjdFtrSGVhZGVyc11ba0d1YXJkXSA9IHRoaXNba0hlYWRlcnNdW2tHdWFyZF1cbiAgICBjbG9uZWRSZXF1ZXN0T2JqZWN0W2tIZWFkZXJzXVtrUmVhbG1dID0gdGhpc1trSGVhZGVyc11ba1JlYWxtXVxuXG4gICAgLy8gNC4gTWFrZSBjbG9uZWRSZXF1ZXN0T2JqZWN04oCZcyBzaWduYWwgZm9sbG93IHRoaXPigJlzIHNpZ25hbC5cbiAgICBjb25zdCBhYyA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuICAgIGlmICh0aGlzLnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICBhYy5hYm9ydCh0aGlzLnNpZ25hbC5yZWFzb24pXG4gICAgfSBlbHNlIHtcbiAgICAgIHV0aWwuYWRkQWJvcnRMaXN0ZW5lcihcbiAgICAgICAgdGhpcy5zaWduYWwsXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBhYy5hYm9ydCh0aGlzLnNpZ25hbC5yZWFzb24pXG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9XG4gICAgY2xvbmVkUmVxdWVzdE9iamVjdFtrU2lnbmFsXSA9IGFjLnNpZ25hbFxuXG4gICAgLy8gNC4gUmV0dXJuIGNsb25lZFJlcXVlc3RPYmplY3QuXG4gICAgcmV0dXJuIGNsb25lZFJlcXVlc3RPYmplY3RcbiAgfVxufVxuXG5taXhpbkJvZHkoUmVxdWVzdClcblxuZnVuY3Rpb24gbWFrZVJlcXVlc3QgKGluaXQpIHtcbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3RzXG4gIGNvbnN0IHJlcXVlc3QgPSB7XG4gICAgbWV0aG9kOiAnR0VUJyxcbiAgICBsb2NhbFVSTHNPbmx5OiBmYWxzZSxcbiAgICB1bnNhZmVSZXF1ZXN0OiBmYWxzZSxcbiAgICBib2R5OiBudWxsLFxuICAgIGNsaWVudDogbnVsbCxcbiAgICByZXNlcnZlZENsaWVudDogbnVsbCxcbiAgICByZXBsYWNlc0NsaWVudElkOiAnJyxcbiAgICB3aW5kb3c6ICdjbGllbnQnLFxuICAgIGtlZXBhbGl2ZTogZmFsc2UsXG4gICAgc2VydmljZVdvcmtlcnM6ICdhbGwnLFxuICAgIGluaXRpYXRvcjogJycsXG4gICAgZGVzdGluYXRpb246ICcnLFxuICAgIHByaW9yaXR5OiBudWxsLFxuICAgIG9yaWdpbjogJ2NsaWVudCcsXG4gICAgcG9saWN5Q29udGFpbmVyOiAnY2xpZW50JyxcbiAgICByZWZlcnJlcjogJ2NsaWVudCcsXG4gICAgcmVmZXJyZXJQb2xpY3k6ICcnLFxuICAgIG1vZGU6ICduby1jb3JzJyxcbiAgICB1c2VDT1JTUHJlZmxpZ2h0RmxhZzogZmFsc2UsXG4gICAgY3JlZGVudGlhbHM6ICdzYW1lLW9yaWdpbicsXG4gICAgdXNlQ3JlZGVudGlhbHM6IGZhbHNlLFxuICAgIGNhY2hlOiAnZGVmYXVsdCcsXG4gICAgcmVkaXJlY3Q6ICdmb2xsb3cnLFxuICAgIGludGVncml0eTogJycsXG4gICAgY3J5cHRvR3JhcGhpY3NOb25jZU1ldGFkYXRhOiAnJyxcbiAgICBwYXJzZXJNZXRhZGF0YTogJycsXG4gICAgcmVsb2FkTmF2aWdhdGlvbjogZmFsc2UsXG4gICAgaGlzdG9yeU5hdmlnYXRpb246IGZhbHNlLFxuICAgIHVzZXJBY3RpdmF0aW9uOiBmYWxzZSxcbiAgICB0YWludGVkT3JpZ2luOiBmYWxzZSxcbiAgICByZWRpcmVjdENvdW50OiAwLFxuICAgIHJlc3BvbnNlVGFpbnRpbmc6ICdiYXNpYycsXG4gICAgcHJldmVudE5vQ2FjaGVDYWNoZUNvbnRyb2xIZWFkZXJNb2RpZmljYXRpb246IGZhbHNlLFxuICAgIGRvbmU6IGZhbHNlLFxuICAgIHRpbWluZ0FsbG93RmFpbGVkOiBmYWxzZSxcbiAgICAuLi5pbml0LFxuICAgIGhlYWRlcnNMaXN0OiBpbml0LmhlYWRlcnNMaXN0XG4gICAgICA/IG5ldyBIZWFkZXJzTGlzdChpbml0LmhlYWRlcnNMaXN0KVxuICAgICAgOiBuZXcgSGVhZGVyc0xpc3QoKVxuICB9XG4gIHJlcXVlc3QudXJsID0gcmVxdWVzdC51cmxMaXN0WzBdXG4gIHJldHVybiByZXF1ZXN0XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LXJlcXVlc3QtY2xvbmVcbmZ1bmN0aW9uIGNsb25lUmVxdWVzdCAocmVxdWVzdCkge1xuICAvLyBUbyBjbG9uZSBhIHJlcXVlc3QgcmVxdWVzdCwgcnVuIHRoZXNlIHN0ZXBzOlxuXG4gIC8vIDEuIExldCBuZXdSZXF1ZXN0IGJlIGEgY29weSBvZiByZXF1ZXN0LCBleGNlcHQgZm9yIGl0cyBib2R5LlxuICBjb25zdCBuZXdSZXF1ZXN0ID0gbWFrZVJlcXVlc3QoeyAuLi5yZXF1ZXN0LCBib2R5OiBudWxsIH0pXG5cbiAgLy8gMi4gSWYgcmVxdWVzdOKAmXMgYm9keSBpcyBub24tbnVsbCwgc2V0IG5ld1JlcXVlc3TigJlzIGJvZHkgdG8gdGhlXG4gIC8vIHJlc3VsdCBvZiBjbG9uaW5nIHJlcXVlc3TigJlzIGJvZHkuXG4gIGlmIChyZXF1ZXN0LmJvZHkgIT0gbnVsbCkge1xuICAgIG5ld1JlcXVlc3QuYm9keSA9IGNsb25lQm9keShyZXF1ZXN0LmJvZHkpXG4gIH1cblxuICAvLyAzLiBSZXR1cm4gbmV3UmVxdWVzdC5cbiAgcmV0dXJuIG5ld1JlcXVlc3Rcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUmVxdWVzdC5wcm90b3R5cGUsIHtcbiAgbWV0aG9kOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICB1cmw6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGhlYWRlcnM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlZGlyZWN0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBjbG9uZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgc2lnbmFsOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBkdXBsZXg6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGRlc3RpbmF0aW9uOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBib2R5OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBib2R5VXNlZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgaXNIaXN0b3J5TmF2aWdhdGlvbjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgaXNSZWxvYWROYXZpZ2F0aW9uOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBrZWVwYWxpdmU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGludGVncml0eToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgY2FjaGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNyZWRlbnRpYWxzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBhdHRyaWJ1dGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlZmVycmVyUG9saWN5OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWZlcnJlcjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgbW9kZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ1JlcXVlc3QnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9XG59KVxuXG53ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0ID0gd2ViaWRsLmludGVyZmFjZUNvbnZlcnRlcihcbiAgUmVxdWVzdFxuKVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdGluZm9cbndlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvID0gZnVuY3Rpb24gKFYpIHtcbiAgaWYgKHR5cGVvZiBWID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcoVilcbiAgfVxuXG4gIGlmIChWIGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0KFYpXG4gIH1cblxuICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKFYpXG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLkFib3J0U2lnbmFsID0gd2ViaWRsLmludGVyZmFjZUNvbnZlcnRlcihcbiAgQWJvcnRTaWduYWxcbilcblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3Rpbml0XG53ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5pdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGtleTogJ21ldGhvZCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdoZWFkZXJzJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkhlYWRlcnNJbml0XG4gIH0sXG4gIHtcbiAgICBrZXk6ICdib2R5JyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcihcbiAgICAgIHdlYmlkbC5jb252ZXJ0ZXJzLkJvZHlJbml0XG4gICAgKVxuICB9LFxuICB7XG4gICAga2V5OiAncmVmZXJyZXInLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdyZWZlcnJlclBvbGljeScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAgLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1yZWZlcnJlci1wb2xpY3kvI3JlZmVycmVyLXBvbGljeVxuICAgIGFsbG93ZWRWYWx1ZXM6IHJlZmVycmVyUG9saWN5XG4gIH0sXG4gIHtcbiAgICBrZXk6ICdtb2RlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1yZXF1ZXN0LW1vZGVcbiAgICBhbGxvd2VkVmFsdWVzOiByZXF1ZXN0TW9kZVxuICB9LFxuICB7XG4gICAga2V5OiAnY3JlZGVudGlhbHMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXF1ZXN0Y3JlZGVudGlhbHNcbiAgICBhbGxvd2VkVmFsdWVzOiByZXF1ZXN0Q3JlZGVudGlhbHNcbiAgfSxcbiAge1xuICAgIGtleTogJ2NhY2hlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdGNhY2hlXG4gICAgYWxsb3dlZFZhbHVlczogcmVxdWVzdENhY2hlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdyZWRpcmVjdCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3RyZWRpcmVjdFxuICAgIGFsbG93ZWRWYWx1ZXM6IHJlcXVlc3RSZWRpcmVjdFxuICB9LFxuICB7XG4gICAga2V5OiAnaW50ZWdyaXR5JyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZ1xuICB9LFxuICB7XG4gICAga2V5OiAna2VlcGFsaXZlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW5cbiAgfSxcbiAge1xuICAgIGtleTogJ3NpZ25hbCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIoXG4gICAgICAoc2lnbmFsKSA9PiB3ZWJpZGwuY29udmVydGVycy5BYm9ydFNpZ25hbChcbiAgICAgICAgc2lnbmFsLFxuICAgICAgICB7IHN0cmljdDogZmFsc2UgfVxuICAgICAgKVxuICAgIClcbiAgfSxcbiAge1xuICAgIGtleTogJ3dpbmRvdycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5hbnlcbiAgfSxcbiAge1xuICAgIGtleTogJ2R1cGxleCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAgYWxsb3dlZFZhbHVlczogcmVxdWVzdER1cGxleFxuICB9XG5dKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHsgUmVxdWVzdCwgbWFrZVJlcXVlc3QgfVxuIiwKICAgICIvLyBodHRwczovL2dpdGh1Yi5jb20vRXRoYW4tQXJyb3dvb2QvdW5kaWNpLWZldGNoXG5cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIFJlc3BvbnNlLFxuICBtYWtlTmV0d29ya0Vycm9yLFxuICBtYWtlQXBwcm9wcmlhdGVOZXR3b3JrRXJyb3IsXG4gIGZpbHRlclJlc3BvbnNlLFxuICBtYWtlUmVzcG9uc2Vcbn0gPSByZXF1aXJlKCcuL3Jlc3BvbnNlJylcbmNvbnN0IHsgSGVhZGVycyB9ID0gcmVxdWlyZSgnLi9oZWFkZXJzJylcbmNvbnN0IHsgUmVxdWVzdCwgbWFrZVJlcXVlc3QgfSA9IHJlcXVpcmUoJy4vcmVxdWVzdCcpXG5jb25zdCB6bGliID0gcmVxdWlyZSgnemxpYicpXG5jb25zdCB7XG4gIGJ5dGVzTWF0Y2gsXG4gIG1ha2VQb2xpY3lDb250YWluZXIsXG4gIGNsb25lUG9saWN5Q29udGFpbmVyLFxuICByZXF1ZXN0QmFkUG9ydCxcbiAgVEFPQ2hlY2ssXG4gIGFwcGVuZFJlcXVlc3RPcmlnaW5IZWFkZXIsXG4gIHJlc3BvbnNlTG9jYXRpb25VUkwsXG4gIHJlcXVlc3RDdXJyZW50VVJMLFxuICBzZXRSZXF1ZXN0UmVmZXJyZXJQb2xpY3lPblJlZGlyZWN0LFxuICB0cnlVcGdyYWRlUmVxdWVzdFRvQVBvdGVudGlhbGx5VHJ1c3R3b3J0aHlVUkwsXG4gIGNyZWF0ZU9wYXF1ZVRpbWluZ0luZm8sXG4gIGFwcGVuZEZldGNoTWV0YWRhdGEsXG4gIGNvcnNDaGVjayxcbiAgY3Jvc3NPcmlnaW5SZXNvdXJjZVBvbGljeUNoZWNrLFxuICBkZXRlcm1pbmVSZXF1ZXN0c1JlZmVycmVyLFxuICBjb2Fyc2VuZWRTaGFyZWRDdXJyZW50VGltZSxcbiAgY3JlYXRlRGVmZXJyZWRQcm9taXNlLFxuICBpc0Jsb2JMaWtlLFxuICBzYW1lT3JpZ2luLFxuICBpc0NhbmNlbGxlZCxcbiAgaXNBYm9ydGVkLFxuICBpc0Vycm9yTGlrZSxcbiAgZnVsbHlSZWFkQm9keSxcbiAgcmVhZGFibGVTdHJlYW1DbG9zZSxcbiAgaXNvbW9ycGhpY0VuY29kZSxcbiAgdXJsSXNMb2NhbCxcbiAgdXJsSXNIdHRwSHR0cHNTY2hlbWUsXG4gIHVybEhhc0h0dHBzU2NoZW1lXG59ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsga1N0YXRlLCBrSGVhZGVycywga0d1YXJkLCBrUmVhbG0gfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBzYWZlbHlFeHRyYWN0Qm9keSB9ID0gcmVxdWlyZSgnLi9ib2R5JylcbmNvbnN0IHtcbiAgcmVkaXJlY3RTdGF0dXNTZXQsXG4gIG51bGxCb2R5U3RhdHVzLFxuICBzYWZlTWV0aG9kc1NldCxcbiAgcmVxdWVzdEJvZHlIZWFkZXIsXG4gIHN1YnJlc291cmNlU2V0LFxuICBET01FeGNlcHRpb25cbn0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7IGtIZWFkZXJzTGlzdCB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IEVFID0gcmVxdWlyZSgnZXZlbnRzJylcbmNvbnN0IHsgUmVhZGFibGUsIHBpcGVsaW5lIH0gPSByZXF1aXJlKCdzdHJlYW0nKVxuY29uc3QgeyBhZGRBYm9ydExpc3RlbmVyLCBpc0Vycm9yZWQsIGlzUmVhZGFibGUsIG5vZGVNYWpvciwgbm9kZU1pbm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBkYXRhVVJMUHJvY2Vzc29yLCBzZXJpYWxpemVBTWltZVR5cGUgfSA9IHJlcXVpcmUoJy4vZGF0YVVSTCcpXG5jb25zdCB7IFRyYW5zZm9ybVN0cmVhbSB9ID0gcmVxdWlyZSgnc3RyZWFtL3dlYicpXG5jb25zdCB7IGdldEdsb2JhbERpc3BhdGNoZXIgfSA9IHJlcXVpcmUoJy4uL2dsb2JhbCcpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi93ZWJpZGwnKVxuY29uc3QgeyBTVEFUVVNfQ09ERVMgfSA9IHJlcXVpcmUoJ2h0dHAnKVxuY29uc3QgR0VUX09SX0hFQUQgPSBbJ0dFVCcsICdIRUFEJ11cblxuLyoqIEB0eXBlIHtpbXBvcnQoJ2J1ZmZlcicpLnJlc29sdmVPYmplY3RVUkx9ICovXG5sZXQgcmVzb2x2ZU9iamVjdFVSTFxubGV0IFJlYWRhYmxlU3RyZWFtID0gZ2xvYmFsVGhpcy5SZWFkYWJsZVN0cmVhbVxuXG5jbGFzcyBGZXRjaCBleHRlbmRzIEVFIHtcbiAgY29uc3RydWN0b3IgKGRpc3BhdGNoZXIpIHtcbiAgICBzdXBlcigpXG5cbiAgICB0aGlzLmRpc3BhdGNoZXIgPSBkaXNwYXRjaGVyXG4gICAgdGhpcy5jb25uZWN0aW9uID0gbnVsbFxuICAgIHRoaXMuZHVtcCA9IGZhbHNlXG4gICAgdGhpcy5zdGF0ZSA9ICdvbmdvaW5nJ1xuICAgIC8vIDIgdGVybWluYXRlZCBsaXN0ZW5lcnMgZ2V0IGFkZGVkIHBlciByZXF1ZXN0LFxuICAgIC8vIGJ1dCBvbmx5IDEgZ2V0cyByZW1vdmVkLiBJZiB0aGVyZSBhcmUgMjAgcmVkaXJlY3RzLFxuICAgIC8vIDIxIGxpc3RlbmVycyB3aWxsIGJlIGFkZGVkLlxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMTcxMVxuICAgIC8vIFRPRE8gKGZpeCk6IEZpbmQgYW5kIGZpeCByb290IGNhdXNlIGZvciBsZWFrZWQgbGlzdGVuZXIuXG4gICAgdGhpcy5zZXRNYXhMaXN0ZW5lcnMoMjEpXG4gIH1cblxuICB0ZXJtaW5hdGUgKHJlYXNvbikge1xuICAgIGlmICh0aGlzLnN0YXRlICE9PSAnb25nb2luZycpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuc3RhdGUgPSAndGVybWluYXRlZCdcbiAgICB0aGlzLmNvbm5lY3Rpb24/LmRlc3Ryb3kocmVhc29uKVxuICAgIHRoaXMuZW1pdCgndGVybWluYXRlZCcsIHJlYXNvbilcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmZXRjaC1jb250cm9sbGVyLWFib3J0XG4gIGFib3J0IChlcnJvcikge1xuICAgIGlmICh0aGlzLnN0YXRlICE9PSAnb25nb2luZycpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIDEuIFNldCBjb250cm9sbGVy4oCZcyBzdGF0ZSB0byBcImFib3J0ZWRcIi5cbiAgICB0aGlzLnN0YXRlID0gJ2Fib3J0ZWQnXG5cbiAgICAvLyAyLiBMZXQgZmFsbGJhY2tFcnJvciBiZSBhbiBcIkFib3J0RXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgLy8gMy4gU2V0IGVycm9yIHRvIGZhbGxiYWNrRXJyb3IgaWYgaXQgaXMgbm90IGdpdmVuLlxuICAgIGlmICghZXJyb3IpIHtcbiAgICAgIGVycm9yID0gbmV3IERPTUV4Y2VwdGlvbignVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC4nLCAnQWJvcnRFcnJvcicpXG4gICAgfVxuXG4gICAgLy8gNC4gTGV0IHNlcmlhbGl6ZWRFcnJvciBiZSBTdHJ1Y3R1cmVkU2VyaWFsaXplKGVycm9yKS5cbiAgICAvLyAgICBJZiB0aGF0IHRocmV3IGFuIGV4Y2VwdGlvbiwgY2F0Y2ggaXQsIGFuZCBsZXRcbiAgICAvLyAgICBzZXJpYWxpemVkRXJyb3IgYmUgU3RydWN0dXJlZFNlcmlhbGl6ZShmYWxsYmFja0Vycm9yKS5cblxuICAgIC8vIDUuIFNldCBjb250cm9sbGVy4oCZcyBzZXJpYWxpemVkIGFib3J0IHJlYXNvbiB0byBzZXJpYWxpemVkRXJyb3IuXG4gICAgdGhpcy5zZXJpYWxpemVkQWJvcnRSZWFzb24gPSBlcnJvclxuXG4gICAgdGhpcy5jb25uZWN0aW9uPy5kZXN0cm95KGVycm9yKVxuICAgIHRoaXMuZW1pdCgndGVybWluYXRlZCcsIGVycm9yKVxuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmZXRjaC1tZXRob2RcbmZ1bmN0aW9uIGZldGNoIChpbnB1dCwgaW5pdCA9IHt9KSB7XG4gIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdnbG9iYWxUaGlzLmZldGNoJyB9KVxuXG4gIC8vIDEuIExldCBwIGJlIGEgbmV3IHByb21pc2UuXG4gIGNvbnN0IHAgPSBjcmVhdGVEZWZlcnJlZFByb21pc2UoKVxuXG4gIC8vIDIuIExldCByZXF1ZXN0T2JqZWN0IGJlIHRoZSByZXN1bHQgb2YgaW52b2tpbmcgdGhlIGluaXRpYWwgdmFsdWUgb2ZcbiAgLy8gUmVxdWVzdCBhcyBjb25zdHJ1Y3RvciB3aXRoIGlucHV0IGFuZCBpbml0IGFzIGFyZ3VtZW50cy4gSWYgdGhpcyB0aHJvd3NcbiAgLy8gYW4gZXhjZXB0aW9uLCByZWplY3QgcCB3aXRoIGl0IGFuZCByZXR1cm4gcC5cbiAgbGV0IHJlcXVlc3RPYmplY3RcblxuICB0cnkge1xuICAgIHJlcXVlc3RPYmplY3QgPSBuZXcgUmVxdWVzdChpbnB1dCwgaW5pdClcbiAgfSBjYXRjaCAoZSkge1xuICAgIHAucmVqZWN0KGUpXG4gICAgcmV0dXJuIHAucHJvbWlzZVxuICB9XG5cbiAgLy8gMy4gTGV0IHJlcXVlc3QgYmUgcmVxdWVzdE9iamVjdOKAmXMgcmVxdWVzdC5cbiAgY29uc3QgcmVxdWVzdCA9IHJlcXVlc3RPYmplY3Rba1N0YXRlXVxuXG4gIC8vIDQuIElmIHJlcXVlc3RPYmplY3TigJlzIHNpZ25hbOKAmXMgYWJvcnRlZCBmbGFnIGlzIHNldCwgdGhlbjpcbiAgaWYgKHJlcXVlc3RPYmplY3Quc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAvLyAxLiBBYm9ydCB0aGUgZmV0Y2goKSBjYWxsIHdpdGggcCwgcmVxdWVzdCwgbnVsbCwgYW5kXG4gICAgLy8gICAgcmVxdWVzdE9iamVjdOKAmXMgc2lnbmFs4oCZcyBhYm9ydCByZWFzb24uXG4gICAgYWJvcnRGZXRjaChwLCByZXF1ZXN0LCBudWxsLCByZXF1ZXN0T2JqZWN0LnNpZ25hbC5yZWFzb24pXG5cbiAgICAvLyAyLiBSZXR1cm4gcC5cbiAgICByZXR1cm4gcC5wcm9taXNlXG4gIH1cblxuICAvLyA1LiBMZXQgZ2xvYmFsT2JqZWN0IGJlIHJlcXVlc3TigJlzIGNsaWVudOKAmXMgZ2xvYmFsIG9iamVjdC5cbiAgY29uc3QgZ2xvYmFsT2JqZWN0ID0gcmVxdWVzdC5jbGllbnQuZ2xvYmFsT2JqZWN0XG5cbiAgLy8gNi4gSWYgZ2xvYmFsT2JqZWN0IGlzIGEgU2VydmljZVdvcmtlckdsb2JhbFNjb3BlIG9iamVjdCwgdGhlbiBzZXRcbiAgLy8gcmVxdWVzdOKAmXMgc2VydmljZS13b3JrZXJzIG1vZGUgdG8gXCJub25lXCIuXG4gIGlmIChnbG9iYWxPYmplY3Q/LmNvbnN0cnVjdG9yPy5uYW1lID09PSAnU2VydmljZVdvcmtlckdsb2JhbFNjb3BlJykge1xuICAgIHJlcXVlc3Quc2VydmljZVdvcmtlcnMgPSAnbm9uZSdcbiAgfVxuXG4gIC8vIDcuIExldCByZXNwb25zZU9iamVjdCBiZSBudWxsLlxuICBsZXQgcmVzcG9uc2VPYmplY3QgPSBudWxsXG5cbiAgLy8gOC4gTGV0IHJlbGV2YW50UmVhbG0gYmUgdGhpc+KAmXMgcmVsZXZhbnQgUmVhbG0uXG4gIGNvbnN0IHJlbGV2YW50UmVhbG0gPSBudWxsXG5cbiAgLy8gOS4gTGV0IGxvY2FsbHlBYm9ydGVkIGJlIGZhbHNlLlxuICBsZXQgbG9jYWxseUFib3J0ZWQgPSBmYWxzZVxuXG4gIC8vIDEwLiBMZXQgY29udHJvbGxlciBiZSBudWxsLlxuICBsZXQgY29udHJvbGxlciA9IG51bGxcblxuICAvLyAxMS4gQWRkIHRoZSBmb2xsb3dpbmcgYWJvcnQgc3RlcHMgdG8gcmVxdWVzdE9iamVjdOKAmXMgc2lnbmFsOlxuICBhZGRBYm9ydExpc3RlbmVyKFxuICAgIHJlcXVlc3RPYmplY3Quc2lnbmFsLFxuICAgICgpID0+IHtcbiAgICAgIC8vIDEuIFNldCBsb2NhbGx5QWJvcnRlZCB0byB0cnVlLlxuICAgICAgbG9jYWxseUFib3J0ZWQgPSB0cnVlXG5cbiAgICAgIC8vIDIuIEFzc2VydDogY29udHJvbGxlciBpcyBub24tbnVsbC5cbiAgICAgIGFzc2VydChjb250cm9sbGVyICE9IG51bGwpXG5cbiAgICAgIC8vIDMuIEFib3J0IGNvbnRyb2xsZXIgd2l0aCByZXF1ZXN0T2JqZWN04oCZcyBzaWduYWzigJlzIGFib3J0IHJlYXNvbi5cbiAgICAgIGNvbnRyb2xsZXIuYWJvcnQocmVxdWVzdE9iamVjdC5zaWduYWwucmVhc29uKVxuXG4gICAgICAvLyA0LiBBYm9ydCB0aGUgZmV0Y2goKSBjYWxsIHdpdGggcCwgcmVxdWVzdCwgcmVzcG9uc2VPYmplY3QsXG4gICAgICAvLyAgICBhbmQgcmVxdWVzdE9iamVjdOKAmXMgc2lnbmFs4oCZcyBhYm9ydCByZWFzb24uXG4gICAgICBhYm9ydEZldGNoKHAsIHJlcXVlc3QsIHJlc3BvbnNlT2JqZWN0LCByZXF1ZXN0T2JqZWN0LnNpZ25hbC5yZWFzb24pXG4gICAgfVxuICApXG5cbiAgLy8gMTIuIExldCBoYW5kbGVGZXRjaERvbmUgZ2l2ZW4gcmVzcG9uc2UgcmVzcG9uc2UgYmUgdG8gZmluYWxpemUgYW5kXG4gIC8vIHJlcG9ydCB0aW1pbmcgd2l0aCByZXNwb25zZSwgZ2xvYmFsT2JqZWN0LCBhbmQgXCJmZXRjaFwiLlxuICBjb25zdCBoYW5kbGVGZXRjaERvbmUgPSAocmVzcG9uc2UpID0+XG4gICAgZmluYWxpemVBbmRSZXBvcnRUaW1pbmcocmVzcG9uc2UsICdmZXRjaCcpXG5cbiAgLy8gMTMuIFNldCBjb250cm9sbGVyIHRvIHRoZSByZXN1bHQgb2YgY2FsbGluZyBmZXRjaCBnaXZlbiByZXF1ZXN0LFxuICAvLyB3aXRoIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSBzZXQgdG8gaGFuZGxlRmV0Y2hEb25lLCBhbmQgcHJvY2Vzc1Jlc3BvbnNlXG4gIC8vIGdpdmVuIHJlc3BvbnNlIGJlaW5nIHRoZXNlIHN1YnN0ZXBzOlxuXG4gIGNvbnN0IHByb2Nlc3NSZXNwb25zZSA9IChyZXNwb25zZSkgPT4ge1xuICAgIC8vIDEuIElmIGxvY2FsbHlBYm9ydGVkIGlzIHRydWUsIHRlcm1pbmF0ZSB0aGVzZSBzdWJzdGVwcy5cbiAgICBpZiAobG9jYWxseUFib3J0ZWQpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgIH1cblxuICAgIC8vIDIuIElmIHJlc3BvbnNl4oCZcyBhYm9ydGVkIGZsYWcgaXMgc2V0LCB0aGVuOlxuICAgIGlmIChyZXNwb25zZS5hYm9ydGVkKSB7XG4gICAgICAvLyAxLiBMZXQgZGVzZXJpYWxpemVkRXJyb3IgYmUgdGhlIHJlc3VsdCBvZiBkZXNlcmlhbGl6ZSBhIHNlcmlhbGl6ZWRcbiAgICAgIC8vICAgIGFib3J0IHJlYXNvbiBnaXZlbiBjb250cm9sbGVy4oCZcyBzZXJpYWxpemVkIGFib3J0IHJlYXNvbiBhbmRcbiAgICAgIC8vICAgIHJlbGV2YW50UmVhbG0uXG5cbiAgICAgIC8vIDIuIEFib3J0IHRoZSBmZXRjaCgpIGNhbGwgd2l0aCBwLCByZXF1ZXN0LCByZXNwb25zZU9iamVjdCwgYW5kXG4gICAgICAvLyAgICBkZXNlcmlhbGl6ZWRFcnJvci5cblxuICAgICAgYWJvcnRGZXRjaChwLCByZXF1ZXN0LCByZXNwb25zZU9iamVjdCwgY29udHJvbGxlci5zZXJpYWxpemVkQWJvcnRSZWFzb24pXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICB9XG5cbiAgICAvLyAzLiBJZiByZXNwb25zZSBpcyBhIG5ldHdvcmsgZXJyb3IsIHRoZW4gcmVqZWN0IHAgd2l0aCBhIFR5cGVFcnJvclxuICAgIC8vIGFuZCB0ZXJtaW5hdGUgdGhlc2Ugc3Vic3RlcHMuXG4gICAgaWYgKHJlc3BvbnNlLnR5cGUgPT09ICdlcnJvcicpIHtcbiAgICAgIHAucmVqZWN0KFxuICAgICAgICBPYmplY3QuYXNzaWduKG5ldyBUeXBlRXJyb3IoJ2ZldGNoIGZhaWxlZCcpLCB7IGNhdXNlOiByZXNwb25zZS5lcnJvciB9KVxuICAgICAgKVxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgfVxuXG4gICAgLy8gNC4gU2V0IHJlc3BvbnNlT2JqZWN0IHRvIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYSBSZXNwb25zZSBvYmplY3QsXG4gICAgLy8gZ2l2ZW4gcmVzcG9uc2UsIFwiaW1tdXRhYmxlXCIsIGFuZCByZWxldmFudFJlYWxtLlxuICAgIHJlc3BvbnNlT2JqZWN0ID0gbmV3IFJlc3BvbnNlKClcbiAgICByZXNwb25zZU9iamVjdFtrU3RhdGVdID0gcmVzcG9uc2VcbiAgICByZXNwb25zZU9iamVjdFtrUmVhbG1dID0gcmVsZXZhbnRSZWFsbVxuICAgIHJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrSGVhZGVyc0xpc3RdID0gcmVzcG9uc2UuaGVhZGVyc0xpc3RcbiAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba0d1YXJkXSA9ICdpbW11dGFibGUnXG4gICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tSZWFsbV0gPSByZWxldmFudFJlYWxtXG5cbiAgICAvLyA1LiBSZXNvbHZlIHAgd2l0aCByZXNwb25zZU9iamVjdC5cbiAgICBwLnJlc29sdmUocmVzcG9uc2VPYmplY3QpXG4gIH1cblxuICBjb250cm9sbGVyID0gZmV0Y2hpbmcoe1xuICAgIHJlcXVlc3QsXG4gICAgcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5OiBoYW5kbGVGZXRjaERvbmUsXG4gICAgcHJvY2Vzc1Jlc3BvbnNlLFxuICAgIGRpc3BhdGNoZXI6IGluaXQuZGlzcGF0Y2hlciA/PyBnZXRHbG9iYWxEaXNwYXRjaGVyKCkgLy8gdW5kaWNpXG4gIH0pXG5cbiAgLy8gMTQuIFJldHVybiBwLlxuICByZXR1cm4gcC5wcm9taXNlXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmaW5hbGl6ZS1hbmQtcmVwb3J0LXRpbWluZ1xuZnVuY3Rpb24gZmluYWxpemVBbmRSZXBvcnRUaW1pbmcgKHJlc3BvbnNlLCBpbml0aWF0b3JUeXBlID0gJ290aGVyJykge1xuICAvLyAxLiBJZiByZXNwb25zZSBpcyBhbiBhYm9ydGVkIG5ldHdvcmsgZXJyb3IsIHRoZW4gcmV0dXJuLlxuICBpZiAocmVzcG9uc2UudHlwZSA9PT0gJ2Vycm9yJyAmJiByZXNwb25zZS5hYm9ydGVkKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyAyLiBJZiByZXNwb25zZeKAmXMgVVJMIGxpc3QgaXMgbnVsbCBvciBlbXB0eSwgdGhlbiByZXR1cm4uXG4gIGlmICghcmVzcG9uc2UudXJsTGlzdD8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyAzLiBMZXQgb3JpZ2luYWxVUkwgYmUgcmVzcG9uc2XigJlzIFVSTCBsaXN0WzBdLlxuICBjb25zdCBvcmlnaW5hbFVSTCA9IHJlc3BvbnNlLnVybExpc3RbMF1cblxuICAvLyA0LiBMZXQgdGltaW5nSW5mbyBiZSByZXNwb25zZeKAmXMgdGltaW5nIGluZm8uXG4gIGxldCB0aW1pbmdJbmZvID0gcmVzcG9uc2UudGltaW5nSW5mb1xuXG4gIC8vIDUuIExldCBjYWNoZVN0YXRlIGJlIHJlc3BvbnNl4oCZcyBjYWNoZSBzdGF0ZS5cbiAgbGV0IGNhY2hlU3RhdGUgPSByZXNwb25zZS5jYWNoZVN0YXRlXG5cbiAgLy8gNi4gSWYgb3JpZ2luYWxVUkzigJlzIHNjaGVtZSBpcyBub3QgYW4gSFRUUChTKSBzY2hlbWUsIHRoZW4gcmV0dXJuLlxuICBpZiAoIXVybElzSHR0cEh0dHBzU2NoZW1lKG9yaWdpbmFsVVJMKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgLy8gNy4gSWYgdGltaW5nSW5mbyBpcyBudWxsLCB0aGVuIHJldHVybi5cbiAgaWYgKHRpbWluZ0luZm8gPT09IG51bGwpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIDguIElmIHJlc3BvbnNl4oCZcyB0aW1pbmcgYWxsb3cgcGFzc2VkIGZsYWcgaXMgbm90IHNldCwgdGhlbjpcbiAgaWYgKCFyZXNwb25zZS50aW1pbmdBbGxvd1Bhc3NlZCkge1xuICAgIC8vICAxLiBTZXQgdGltaW5nSW5mbyB0byBhIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYW4gb3BhcXVlIHRpbWluZyBpbmZvIGZvciB0aW1pbmdJbmZvLlxuICAgIHRpbWluZ0luZm8gPSBjcmVhdGVPcGFxdWVUaW1pbmdJbmZvKHtcbiAgICAgIHN0YXJ0VGltZTogdGltaW5nSW5mby5zdGFydFRpbWVcbiAgICB9KVxuXG4gICAgLy8gIDIuIFNldCBjYWNoZVN0YXRlIHRvIHRoZSBlbXB0eSBzdHJpbmcuXG4gICAgY2FjaGVTdGF0ZSA9ICcnXG4gIH1cblxuICAvLyA5LiBTZXQgdGltaW5nSW5mb+KAmXMgZW5kIHRpbWUgdG8gdGhlIGNvYXJzZW5lZCBzaGFyZWQgY3VycmVudCB0aW1lXG4gIC8vIGdpdmVuIGdsb2JhbOKAmXMgcmVsZXZhbnQgc2V0dGluZ3Mgb2JqZWN04oCZcyBjcm9zcy1vcmlnaW4gaXNvbGF0ZWRcbiAgLy8gY2FwYWJpbGl0eS5cbiAgLy8gVE9ETzogZ2l2ZW4gZ2xvYmFs4oCZcyByZWxldmFudCBzZXR0aW5ncyBvYmplY3TigJlzIGNyb3NzLW9yaWdpbiBpc29sYXRlZFxuICAvLyBjYXBhYmlsaXR5P1xuICB0aW1pbmdJbmZvLmVuZFRpbWUgPSBjb2Fyc2VuZWRTaGFyZWRDdXJyZW50VGltZSgpXG5cbiAgLy8gMTAuIFNldCByZXNwb25zZeKAmXMgdGltaW5nIGluZm8gdG8gdGltaW5nSW5mby5cbiAgcmVzcG9uc2UudGltaW5nSW5mbyA9IHRpbWluZ0luZm9cblxuICAvLyAxMS4gTWFyayByZXNvdXJjZSB0aW1pbmcgZm9yIHRpbWluZ0luZm8sIG9yaWdpbmFsVVJMLCBpbml0aWF0b3JUeXBlLFxuICAvLyBnbG9iYWwsIGFuZCBjYWNoZVN0YXRlLlxuICBtYXJrUmVzb3VyY2VUaW1pbmcoXG4gICAgdGltaW5nSW5mbyxcbiAgICBvcmlnaW5hbFVSTCxcbiAgICBpbml0aWF0b3JUeXBlLFxuICAgIGdsb2JhbFRoaXMsXG4gICAgY2FjaGVTdGF0ZVxuICApXG59XG5cbi8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9yZXNvdXJjZS10aW1pbmcvI2Rmbi1tYXJrLXJlc291cmNlLXRpbWluZ1xuZnVuY3Rpb24gbWFya1Jlc291cmNlVGltaW5nICh0aW1pbmdJbmZvLCBvcmlnaW5hbFVSTCwgaW5pdGlhdG9yVHlwZSwgZ2xvYmFsVGhpcywgY2FjaGVTdGF0ZSkge1xuICBpZiAobm9kZU1ham9yID4gMTggfHwgKG5vZGVNYWpvciA9PT0gMTggJiYgbm9kZU1pbm9yID49IDIpKSB7XG4gICAgcGVyZm9ybWFuY2UubWFya1Jlc291cmNlVGltaW5nKHRpbWluZ0luZm8sIG9yaWdpbmFsVVJMLmhyZWYsIGluaXRpYXRvclR5cGUsIGdsb2JhbFRoaXMsIGNhY2hlU3RhdGUpXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2Fib3J0LWZldGNoXG5mdW5jdGlvbiBhYm9ydEZldGNoIChwLCByZXF1ZXN0LCByZXNwb25zZU9iamVjdCwgZXJyb3IpIHtcbiAgLy8gTm90ZTogQWJvcnRTaWduYWwucmVhc29uIHdhcyBhZGRlZCBpbiBub2RlIHYxNy4yLjBcbiAgLy8gd2hpY2ggd291bGQgZ2l2ZSB1cyBhbiB1bmRlZmluZWQgZXJyb3IgdG8gcmVqZWN0IHdpdGguXG4gIC8vIFJlbW92ZSB0aGlzIG9uY2Ugbm9kZSB2MTYgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC5cbiAgaWYgKCFlcnJvcikge1xuICAgIGVycm9yID0gbmV3IERPTUV4Y2VwdGlvbignVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC4nLCAnQWJvcnRFcnJvcicpXG4gIH1cblxuICAvLyAxLiBSZWplY3QgcHJvbWlzZSB3aXRoIGVycm9yLlxuICBwLnJlamVjdChlcnJvcilcblxuICAvLyAyLiBJZiByZXF1ZXN04oCZcyBib2R5IGlzIG5vdCBudWxsIGFuZCBpcyByZWFkYWJsZSwgdGhlbiBjYW5jZWwgcmVxdWVzdOKAmXNcbiAgLy8gYm9keSB3aXRoIGVycm9yLlxuICBpZiAocmVxdWVzdC5ib2R5ICE9IG51bGwgJiYgaXNSZWFkYWJsZShyZXF1ZXN0LmJvZHk/LnN0cmVhbSkpIHtcbiAgICByZXF1ZXN0LmJvZHkuc3RyZWFtLmNhbmNlbChlcnJvcikuY2F0Y2goKGVycikgPT4ge1xuICAgICAgaWYgKGVyci5jb2RlID09PSAnRVJSX0lOVkFMSURfU1RBVEUnKSB7XG4gICAgICAgIC8vIE5vZGUgYnVnP1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIHRocm93IGVyclxuICAgIH0pXG4gIH1cblxuICAvLyAzLiBJZiByZXNwb25zZU9iamVjdCBpcyBudWxsLCB0aGVuIHJldHVybi5cbiAgaWYgKHJlc3BvbnNlT2JqZWN0ID09IG51bGwpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIDQuIExldCByZXNwb25zZSBiZSByZXNwb25zZU9iamVjdOKAmXMgcmVzcG9uc2UuXG4gIGNvbnN0IHJlc3BvbnNlID0gcmVzcG9uc2VPYmplY3Rba1N0YXRlXVxuXG4gIC8vIDUuIElmIHJlc3BvbnNl4oCZcyBib2R5IGlzIG5vdCBudWxsIGFuZCBpcyByZWFkYWJsZSwgdGhlbiBlcnJvciByZXNwb25zZeKAmXNcbiAgLy8gYm9keSB3aXRoIGVycm9yLlxuICBpZiAocmVzcG9uc2UuYm9keSAhPSBudWxsICYmIGlzUmVhZGFibGUocmVzcG9uc2UuYm9keT8uc3RyZWFtKSkge1xuICAgIHJlc3BvbnNlLmJvZHkuc3RyZWFtLmNhbmNlbChlcnJvcikuY2F0Y2goKGVycikgPT4ge1xuICAgICAgaWYgKGVyci5jb2RlID09PSAnRVJSX0lOVkFMSURfU1RBVEUnKSB7XG4gICAgICAgIC8vIE5vZGUgYnVnP1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIHRocm93IGVyclxuICAgIH0pXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2ZldGNoaW5nXG5mdW5jdGlvbiBmZXRjaGluZyAoe1xuICByZXF1ZXN0LFxuICBwcm9jZXNzUmVxdWVzdEJvZHlDaHVua0xlbmd0aCxcbiAgcHJvY2Vzc1JlcXVlc3RFbmRPZkJvZHksXG4gIHByb2Nlc3NSZXNwb25zZSxcbiAgcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5LFxuICBwcm9jZXNzUmVzcG9uc2VDb25zdW1lQm9keSxcbiAgdXNlUGFyYWxsZWxRdWV1ZSA9IGZhbHNlLFxuICBkaXNwYXRjaGVyIC8vIHVuZGljaVxufSkge1xuICAvLyAxLiBMZXQgdGFza0Rlc3RpbmF0aW9uIGJlIG51bGwuXG4gIGxldCB0YXNrRGVzdGluYXRpb24gPSBudWxsXG5cbiAgLy8gMi4gTGV0IGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5IGJlIGZhbHNlLlxuICBsZXQgY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkgPSBmYWxzZVxuXG4gIC8vIDMuIElmIHJlcXVlc3TigJlzIGNsaWVudCBpcyBub24tbnVsbCwgdGhlbjpcbiAgaWYgKHJlcXVlc3QuY2xpZW50ICE9IG51bGwpIHtcbiAgICAvLyAxLiBTZXQgdGFza0Rlc3RpbmF0aW9uIHRvIHJlcXVlc3TigJlzIGNsaWVudOKAmXMgZ2xvYmFsIG9iamVjdC5cbiAgICB0YXNrRGVzdGluYXRpb24gPSByZXF1ZXN0LmNsaWVudC5nbG9iYWxPYmplY3RcblxuICAgIC8vIDIuIFNldCBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSB0byByZXF1ZXN04oCZcyBjbGllbnTigJlzIGNyb3NzLW9yaWdpblxuICAgIC8vIGlzb2xhdGVkIGNhcGFiaWxpdHkuXG4gICAgY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkgPVxuICAgICAgcmVxdWVzdC5jbGllbnQuY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHlcbiAgfVxuXG4gIC8vIDQuIElmIHVzZVBhcmFsbGVsUXVldWUgaXMgdHJ1ZSwgdGhlbiBzZXQgdGFza0Rlc3RpbmF0aW9uIHRvIHRoZSByZXN1bHQgb2ZcbiAgLy8gc3RhcnRpbmcgYSBuZXcgcGFyYWxsZWwgcXVldWUuXG4gIC8vIFRPRE9cblxuICAvLyA1LiBMZXQgdGltaW5nSW5mbyBiZSBhIG5ldyBmZXRjaCB0aW1pbmcgaW5mbyB3aG9zZSBzdGFydCB0aW1lIGFuZFxuICAvLyBwb3N0LXJlZGlyZWN0IHN0YXJ0IHRpbWUgYXJlIHRoZSBjb2Fyc2VuZWQgc2hhcmVkIGN1cnJlbnQgdGltZSBnaXZlblxuICAvLyBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eS5cbiAgY29uc3QgY3VycmVuVGltZSA9IGNvYXJzZW5lZFNoYXJlZEN1cnJlbnRUaW1lKGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5KVxuICBjb25zdCB0aW1pbmdJbmZvID0gY3JlYXRlT3BhcXVlVGltaW5nSW5mbyh7XG4gICAgc3RhcnRUaW1lOiBjdXJyZW5UaW1lXG4gIH0pXG5cbiAgLy8gNi4gTGV0IGZldGNoUGFyYW1zIGJlIGEgbmV3IGZldGNoIHBhcmFtcyB3aG9zZVxuICAvLyByZXF1ZXN0IGlzIHJlcXVlc3QsXG4gIC8vIHRpbWluZyBpbmZvIGlzIHRpbWluZ0luZm8sXG4gIC8vIHByb2Nlc3MgcmVxdWVzdCBib2R5IGNodW5rIGxlbmd0aCBpcyBwcm9jZXNzUmVxdWVzdEJvZHlDaHVua0xlbmd0aCxcbiAgLy8gcHJvY2VzcyByZXF1ZXN0IGVuZC1vZi1ib2R5IGlzIHByb2Nlc3NSZXF1ZXN0RW5kT2ZCb2R5LFxuICAvLyBwcm9jZXNzIHJlc3BvbnNlIGlzIHByb2Nlc3NSZXNwb25zZSxcbiAgLy8gcHJvY2VzcyByZXNwb25zZSBjb25zdW1lIGJvZHkgaXMgcHJvY2Vzc1Jlc3BvbnNlQ29uc3VtZUJvZHksXG4gIC8vIHByb2Nlc3MgcmVzcG9uc2UgZW5kLW9mLWJvZHkgaXMgcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5LFxuICAvLyB0YXNrIGRlc3RpbmF0aW9uIGlzIHRhc2tEZXN0aW5hdGlvbixcbiAgLy8gYW5kIGNyb3NzLW9yaWdpbiBpc29sYXRlZCBjYXBhYmlsaXR5IGlzIGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5LlxuICBjb25zdCBmZXRjaFBhcmFtcyA9IHtcbiAgICBjb250cm9sbGVyOiBuZXcgRmV0Y2goZGlzcGF0Y2hlciksXG4gICAgcmVxdWVzdCxcbiAgICB0aW1pbmdJbmZvLFxuICAgIHByb2Nlc3NSZXF1ZXN0Qm9keUNodW5rTGVuZ3RoLFxuICAgIHByb2Nlc3NSZXF1ZXN0RW5kT2ZCb2R5LFxuICAgIHByb2Nlc3NSZXNwb25zZSxcbiAgICBwcm9jZXNzUmVzcG9uc2VDb25zdW1lQm9keSxcbiAgICBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHksXG4gICAgdGFza0Rlc3RpbmF0aW9uLFxuICAgIGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5XG4gIH1cblxuICAvLyA3LiBJZiByZXF1ZXN04oCZcyBib2R5IGlzIGEgYnl0ZSBzZXF1ZW5jZSwgdGhlbiBzZXQgcmVxdWVzdOKAmXMgYm9keSB0b1xuICAvLyAgICByZXF1ZXN04oCZcyBib2R5IGFzIGEgYm9keS5cbiAgLy8gTk9URTogU2luY2UgZmV0Y2hpbmcgaXMgb25seSBjYWxsZWQgZnJvbSBmZXRjaCwgYm9keSBzaG91bGQgYWxyZWFkeSBiZVxuICAvLyBleHRyYWN0ZWQuXG4gIGFzc2VydCghcmVxdWVzdC5ib2R5IHx8IHJlcXVlc3QuYm9keS5zdHJlYW0pXG5cbiAgLy8gOC4gSWYgcmVxdWVzdOKAmXMgd2luZG93IGlzIFwiY2xpZW50XCIsIHRoZW4gc2V0IHJlcXVlc3TigJlzIHdpbmRvdyB0byByZXF1ZXN04oCZc1xuICAvLyBjbGllbnQsIGlmIHJlcXVlc3TigJlzIGNsaWVudOKAmXMgZ2xvYmFsIG9iamVjdCBpcyBhIFdpbmRvdyBvYmplY3Q7IG90aGVyd2lzZVxuICAvLyBcIm5vLXdpbmRvd1wiLlxuICBpZiAocmVxdWVzdC53aW5kb3cgPT09ICdjbGllbnQnKSB7XG4gICAgLy8gVE9ETzogV2hhdCBpZiByZXF1ZXN0LmNsaWVudCBpcyBudWxsP1xuICAgIHJlcXVlc3Qud2luZG93ID1cbiAgICAgIHJlcXVlc3QuY2xpZW50Py5nbG9iYWxPYmplY3Q/LmNvbnN0cnVjdG9yPy5uYW1lID09PSAnV2luZG93J1xuICAgICAgICA/IHJlcXVlc3QuY2xpZW50XG4gICAgICAgIDogJ25vLXdpbmRvdydcbiAgfVxuXG4gIC8vIDkuIElmIHJlcXVlc3TigJlzIG9yaWdpbiBpcyBcImNsaWVudFwiLCB0aGVuIHNldCByZXF1ZXN04oCZcyBvcmlnaW4gdG8gcmVxdWVzdOKAmXNcbiAgLy8gY2xpZW504oCZcyBvcmlnaW4uXG4gIGlmIChyZXF1ZXN0Lm9yaWdpbiA9PT0gJ2NsaWVudCcpIHtcbiAgICAvLyBUT0RPOiBXaGF0IGlmIHJlcXVlc3QuY2xpZW50IGlzIG51bGw/XG4gICAgcmVxdWVzdC5vcmlnaW4gPSByZXF1ZXN0LmNsaWVudD8ub3JpZ2luXG4gIH1cblxuICAvLyAxMC4gSWYgYWxsIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgdHJ1ZTpcbiAgLy8gVE9ET1xuXG4gIC8vIDExLiBJZiByZXF1ZXN04oCZcyBwb2xpY3kgY29udGFpbmVyIGlzIFwiY2xpZW50XCIsIHRoZW46XG4gIGlmIChyZXF1ZXN0LnBvbGljeUNvbnRhaW5lciA9PT0gJ2NsaWVudCcpIHtcbiAgICAvLyAxLiBJZiByZXF1ZXN04oCZcyBjbGllbnQgaXMgbm9uLW51bGwsIHRoZW4gc2V0IHJlcXVlc3TigJlzIHBvbGljeVxuICAgIC8vIGNvbnRhaW5lciB0byBhIGNsb25lIG9mIHJlcXVlc3TigJlzIGNsaWVudOKAmXMgcG9saWN5IGNvbnRhaW5lci4gW0hUTUxdXG4gICAgaWYgKHJlcXVlc3QuY2xpZW50ICE9IG51bGwpIHtcbiAgICAgIHJlcXVlc3QucG9saWN5Q29udGFpbmVyID0gY2xvbmVQb2xpY3lDb250YWluZXIoXG4gICAgICAgIHJlcXVlc3QuY2xpZW50LnBvbGljeUNvbnRhaW5lclxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyAyLiBPdGhlcndpc2UsIHNldCByZXF1ZXN04oCZcyBwb2xpY3kgY29udGFpbmVyIHRvIGEgbmV3IHBvbGljeVxuICAgICAgLy8gY29udGFpbmVyLlxuICAgICAgcmVxdWVzdC5wb2xpY3lDb250YWluZXIgPSBtYWtlUG9saWN5Q29udGFpbmVyKClcbiAgICB9XG4gIH1cblxuICAvLyAxMi4gSWYgcmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgQWNjZXB0YCwgdGhlbjpcbiAgaWYgKCFyZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdhY2NlcHQnKSkge1xuICAgIC8vIDEuIExldCB2YWx1ZSBiZSBgKi8qYC5cbiAgICBjb25zdCB2YWx1ZSA9ICcqLyonXG5cbiAgICAvLyAyLiBBIHVzZXIgYWdlbnQgc2hvdWxkIHNldCB2YWx1ZSB0byB0aGUgZmlyc3QgbWF0Y2hpbmcgc3RhdGVtZW50LCBpZlxuICAgIC8vIGFueSwgc3dpdGNoaW5nIG9uIHJlcXVlc3TigJlzIGRlc3RpbmF0aW9uOlxuICAgIC8vIFwiZG9jdW1lbnRcIlxuICAgIC8vIFwiZnJhbWVcIlxuICAgIC8vIFwiaWZyYW1lXCJcbiAgICAvLyBgdGV4dC9odG1sLGFwcGxpY2F0aW9uL3hodG1sK3htbCxhcHBsaWNhdGlvbi94bWw7cT0wLjksKi8qO3E9MC44YFxuICAgIC8vIFwiaW1hZ2VcIlxuICAgIC8vIGBpbWFnZS9wbmcsaW1hZ2Uvc3ZnK3htbCxpbWFnZS8qO3E9MC44LCovKjtxPTAuNWBcbiAgICAvLyBcInN0eWxlXCJcbiAgICAvLyBgdGV4dC9jc3MsKi8qO3E9MC4xYFxuICAgIC8vIFRPRE9cblxuICAgIC8vIDMuIEFwcGVuZCBgQWNjZXB0YC92YWx1ZSB0byByZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cbiAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnYWNjZXB0JywgdmFsdWUpXG4gIH1cblxuICAvLyAxMy4gSWYgcmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgQWNjZXB0LUxhbmd1YWdlYCwgdGhlblxuICAvLyB1c2VyIGFnZW50cyBzaG91bGQgYXBwZW5kIGBBY2NlcHQtTGFuZ3VhZ2VgL2FuIGFwcHJvcHJpYXRlIHZhbHVlIHRvXG4gIC8vIHJlcXVlc3TigJlzIGhlYWRlciBsaXN0LlxuICBpZiAoIXJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2FjY2VwdC1sYW5ndWFnZScpKSB7XG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ2FjY2VwdC1sYW5ndWFnZScsICcqJylcbiAgfVxuXG4gIC8vIDE0LiBJZiByZXF1ZXN04oCZcyBwcmlvcml0eSBpcyBudWxsLCB0aGVuIHVzZSByZXF1ZXN04oCZcyBpbml0aWF0b3IgYW5kXG4gIC8vIGRlc3RpbmF0aW9uIGFwcHJvcHJpYXRlbHkgaW4gc2V0dGluZyByZXF1ZXN04oCZcyBwcmlvcml0eSB0byBhXG4gIC8vIHVzZXItYWdlbnQtZGVmaW5lZCBvYmplY3QuXG4gIGlmIChyZXF1ZXN0LnByaW9yaXR5ID09PSBudWxsKSB7XG4gICAgLy8gVE9ET1xuICB9XG5cbiAgLy8gMTUuIElmIHJlcXVlc3QgaXMgYSBzdWJyZXNvdXJjZSByZXF1ZXN0LCB0aGVuOlxuICBpZiAoc3VicmVzb3VyY2VTZXQuaGFzKHJlcXVlc3QuZGVzdGluYXRpb24pKSB7XG4gICAgLy8gVE9ET1xuICB9XG5cbiAgLy8gMTYuIFJ1biBtYWluIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLlxuICBtYWluRmV0Y2goZmV0Y2hQYXJhbXMpXG4gICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnRlcm1pbmF0ZShlcnIpXG4gICAgfSlcblxuICAvLyAxNy4gUmV0dXJuIGZldGNoUGFyYW0ncyBjb250cm9sbGVyXG4gIHJldHVybiBmZXRjaFBhcmFtcy5jb250cm9sbGVyXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LW1haW4tZmV0Y2hcbmFzeW5jIGZ1bmN0aW9uIG1haW5GZXRjaCAoZmV0Y2hQYXJhbXMsIHJlY3Vyc2l2ZSA9IGZhbHNlKSB7XG4gIC8vIDEuIExldCByZXF1ZXN0IGJlIGZldGNoUGFyYW1z4oCZcyByZXF1ZXN0LlxuICBjb25zdCByZXF1ZXN0ID0gZmV0Y2hQYXJhbXMucmVxdWVzdFxuXG4gIC8vIDIuIExldCByZXNwb25zZSBiZSBudWxsLlxuICBsZXQgcmVzcG9uc2UgPSBudWxsXG5cbiAgLy8gMy4gSWYgcmVxdWVzdOKAmXMgbG9jYWwtVVJMcy1vbmx5IGZsYWcgaXMgc2V0IGFuZCByZXF1ZXN04oCZcyBjdXJyZW50IFVSTCBpc1xuICAvLyBub3QgbG9jYWwsIHRoZW4gc2V0IHJlc3BvbnNlIHRvIGEgbmV0d29yayBlcnJvci5cbiAgaWYgKHJlcXVlc3QubG9jYWxVUkxzT25seSAmJiAhdXJsSXNMb2NhbChyZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KSkpIHtcbiAgICByZXNwb25zZSA9IG1ha2VOZXR3b3JrRXJyb3IoJ2xvY2FsIFVSTHMgb25seScpXG4gIH1cblxuICAvLyA0LiBSdW4gcmVwb3J0IENvbnRlbnQgU2VjdXJpdHkgUG9saWN5IHZpb2xhdGlvbnMgZm9yIHJlcXVlc3QuXG4gIC8vIFRPRE9cblxuICAvLyA1LiBVcGdyYWRlIHJlcXVlc3QgdG8gYSBwb3RlbnRpYWxseSB0cnVzdHdvcnRoeSBVUkwsIGlmIGFwcHJvcHJpYXRlLlxuICB0cnlVcGdyYWRlUmVxdWVzdFRvQVBvdGVudGlhbGx5VHJ1c3R3b3J0aHlVUkwocmVxdWVzdClcblxuICAvLyA2LiBJZiBzaG91bGQgcmVxdWVzdCBiZSBibG9ja2VkIGR1ZSB0byBhIGJhZCBwb3J0LCBzaG91bGQgZmV0Y2hpbmcgcmVxdWVzdFxuICAvLyBiZSBibG9ja2VkIGFzIG1peGVkIGNvbnRlbnQsIG9yIHNob3VsZCByZXF1ZXN0IGJlIGJsb2NrZWQgYnkgQ29udGVudFxuICAvLyBTZWN1cml0eSBQb2xpY3kgcmV0dXJucyBibG9ja2VkLCB0aGVuIHNldCByZXNwb25zZSB0byBhIG5ldHdvcmsgZXJyb3IuXG4gIGlmIChyZXF1ZXN0QmFkUG9ydChyZXF1ZXN0KSA9PT0gJ2Jsb2NrZWQnKSB7XG4gICAgcmVzcG9uc2UgPSBtYWtlTmV0d29ya0Vycm9yKCdiYWQgcG9ydCcpXG4gIH1cbiAgLy8gVE9ETzogc2hvdWxkIGZldGNoaW5nIHJlcXVlc3QgYmUgYmxvY2tlZCBhcyBtaXhlZCBjb250ZW50P1xuICAvLyBUT0RPOiBzaG91bGQgcmVxdWVzdCBiZSBibG9ja2VkIGJ5IENvbnRlbnQgU2VjdXJpdHkgUG9saWN5P1xuXG4gIC8vIDcuIElmIHJlcXVlc3TigJlzIHJlZmVycmVyIHBvbGljeSBpcyB0aGUgZW1wdHkgc3RyaW5nLCB0aGVuIHNldCByZXF1ZXN04oCZc1xuICAvLyByZWZlcnJlciBwb2xpY3kgdG8gcmVxdWVzdOKAmXMgcG9saWN5IGNvbnRhaW5lcuKAmXMgcmVmZXJyZXIgcG9saWN5LlxuICBpZiAocmVxdWVzdC5yZWZlcnJlclBvbGljeSA9PT0gJycpIHtcbiAgICByZXF1ZXN0LnJlZmVycmVyUG9saWN5ID0gcmVxdWVzdC5wb2xpY3lDb250YWluZXIucmVmZXJyZXJQb2xpY3lcbiAgfVxuXG4gIC8vIDguIElmIHJlcXVlc3TigJlzIHJlZmVycmVyIGlzIG5vdCBcIm5vLXJlZmVycmVyXCIsIHRoZW4gc2V0IHJlcXVlc3TigJlzXG4gIC8vIHJlZmVycmVyIHRvIHRoZSByZXN1bHQgb2YgaW52b2tpbmcgZGV0ZXJtaW5lIHJlcXVlc3TigJlzIHJlZmVycmVyLlxuICBpZiAocmVxdWVzdC5yZWZlcnJlciAhPT0gJ25vLXJlZmVycmVyJykge1xuICAgIHJlcXVlc3QucmVmZXJyZXIgPSBkZXRlcm1pbmVSZXF1ZXN0c1JlZmVycmVyKHJlcXVlc3QpXG4gIH1cblxuICAvLyA5LiBTZXQgcmVxdWVzdOKAmXMgY3VycmVudCBVUkzigJlzIHNjaGVtZSB0byBcImh0dHBzXCIgaWYgYWxsIG9mIHRoZSBmb2xsb3dpbmdcbiAgLy8gY29uZGl0aW9ucyBhcmUgdHJ1ZTpcbiAgLy8gLSByZXF1ZXN04oCZcyBjdXJyZW50IFVSTOKAmXMgc2NoZW1lIGlzIFwiaHR0cFwiXG4gIC8vIC0gcmVxdWVzdOKAmXMgY3VycmVudCBVUkzigJlzIGhvc3QgaXMgYSBkb21haW5cbiAgLy8gLSBNYXRjaGluZyByZXF1ZXN04oCZcyBjdXJyZW50IFVSTOKAmXMgaG9zdCBwZXIgS25vd24gSFNUUyBIb3N0IERvbWFpbiBOYW1lXG4gIC8vICAgTWF0Y2hpbmcgcmVzdWx0cyBpbiBlaXRoZXIgYSBzdXBlcmRvbWFpbiBtYXRjaCB3aXRoIGFuIGFzc2VydGVkXG4gIC8vICAgaW5jbHVkZVN1YkRvbWFpbnMgZGlyZWN0aXZlIG9yIGEgY29uZ3J1ZW50IG1hdGNoICh3aXRoIG9yIHdpdGhvdXQgYW5cbiAgLy8gICBhc3NlcnRlZCBpbmNsdWRlU3ViRG9tYWlucyBkaXJlY3RpdmUpLiBbSFNUU11cbiAgLy8gVE9ET1xuXG4gIC8vIDEwLiBJZiByZWN1cnNpdmUgaXMgZmFsc2UsIHRoZW4gcnVuIHRoZSByZW1haW5pbmcgc3RlcHMgaW4gcGFyYWxsZWwuXG4gIC8vIFRPRE9cblxuICAvLyAxMS4gSWYgcmVzcG9uc2UgaXMgbnVsbCwgdGhlbiBzZXQgcmVzcG9uc2UgdG8gdGhlIHJlc3VsdCBvZiBydW5uaW5nXG4gIC8vIHRoZSBzdGVwcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBmaXJzdCBtYXRjaGluZyBzdGF0ZW1lbnQ6XG4gIGlmIChyZXNwb25zZSA9PT0gbnVsbCkge1xuICAgIHJlc3BvbnNlID0gYXdhaXQgKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRVUkwgPSByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KVxuXG4gICAgICBpZiAoXG4gICAgICAgIC8vIC0gcmVxdWVzdOKAmXMgY3VycmVudCBVUkzigJlzIG9yaWdpbiBpcyBzYW1lIG9yaWdpbiB3aXRoIHJlcXVlc3TigJlzIG9yaWdpbixcbiAgICAgICAgLy8gICBhbmQgcmVxdWVzdOKAmXMgcmVzcG9uc2UgdGFpbnRpbmcgaXMgXCJiYXNpY1wiXG4gICAgICAgIChzYW1lT3JpZ2luKGN1cnJlbnRVUkwsIHJlcXVlc3QudXJsKSAmJiByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdiYXNpYycpIHx8XG4gICAgICAgIC8vIHJlcXVlc3TigJlzIGN1cnJlbnQgVVJM4oCZcyBzY2hlbWUgaXMgXCJkYXRhXCJcbiAgICAgICAgKGN1cnJlbnRVUkwucHJvdG9jb2wgPT09ICdkYXRhOicpIHx8XG4gICAgICAgIC8vIC0gcmVxdWVzdOKAmXMgbW9kZSBpcyBcIm5hdmlnYXRlXCIgb3IgXCJ3ZWJzb2NrZXRcIlxuICAgICAgICAocmVxdWVzdC5tb2RlID09PSAnbmF2aWdhdGUnIHx8IHJlcXVlc3QubW9kZSA9PT0gJ3dlYnNvY2tldCcpXG4gICAgICApIHtcbiAgICAgICAgLy8gMS4gU2V0IHJlcXVlc3TigJlzIHJlc3BvbnNlIHRhaW50aW5nIHRvIFwiYmFzaWNcIi5cbiAgICAgICAgcmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID0gJ2Jhc2ljJ1xuXG4gICAgICAgIC8vIDIuIFJldHVybiB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgc2NoZW1lIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLlxuICAgICAgICByZXR1cm4gYXdhaXQgc2NoZW1lRmV0Y2goZmV0Y2hQYXJhbXMpXG4gICAgICB9XG5cbiAgICAgIC8vIHJlcXVlc3TigJlzIG1vZGUgaXMgXCJzYW1lLW9yaWdpblwiXG4gICAgICBpZiAocmVxdWVzdC5tb2RlID09PSAnc2FtZS1vcmlnaW4nKSB7XG4gICAgICAgIC8vIDEuIFJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdyZXF1ZXN0IG1vZGUgY2Fubm90IGJlIFwic2FtZS1vcmlnaW5cIicpXG4gICAgICB9XG5cbiAgICAgIC8vIHJlcXVlc3TigJlzIG1vZGUgaXMgXCJuby1jb3JzXCJcbiAgICAgIGlmIChyZXF1ZXN0Lm1vZGUgPT09ICduby1jb3JzJykge1xuICAgICAgICAvLyAxLiBJZiByZXF1ZXN04oCZcyByZWRpcmVjdCBtb2RlIGlzIG5vdCBcImZvbGxvd1wiLCB0aGVuIHJldHVybiBhIG5ldHdvcmtcbiAgICAgICAgLy8gZXJyb3IuXG4gICAgICAgIGlmIChyZXF1ZXN0LnJlZGlyZWN0ICE9PSAnZm9sbG93Jykge1xuICAgICAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKFxuICAgICAgICAgICAgJ3JlZGlyZWN0IG1vZGUgY2Fubm90IGJlIFwiZm9sbG93XCIgZm9yIFwibm8tY29yc1wiIHJlcXVlc3QnXG4gICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gMi4gU2V0IHJlcXVlc3TigJlzIHJlc3BvbnNlIHRhaW50aW5nIHRvIFwib3BhcXVlXCIuXG4gICAgICAgIHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9ICdvcGFxdWUnXG5cbiAgICAgICAgLy8gMy4gUmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZyBzY2hlbWUgZmV0Y2ggZ2l2ZW4gZmV0Y2hQYXJhbXMuXG4gICAgICAgIHJldHVybiBhd2FpdCBzY2hlbWVGZXRjaChmZXRjaFBhcmFtcylcbiAgICAgIH1cblxuICAgICAgLy8gcmVxdWVzdOKAmXMgY3VycmVudCBVUkzigJlzIHNjaGVtZSBpcyBub3QgYW4gSFRUUChTKSBzY2hlbWVcbiAgICAgIGlmICghdXJsSXNIdHRwSHR0cHNTY2hlbWUocmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdCkpKSB7XG4gICAgICAgIC8vIFJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdVUkwgc2NoZW1lIG11c3QgYmUgYSBIVFRQKFMpIHNjaGVtZScpXG4gICAgICB9XG5cbiAgICAgIC8vIC0gcmVxdWVzdOKAmXMgdXNlLUNPUlMtcHJlZmxpZ2h0IGZsYWcgaXMgc2V0XG4gICAgICAvLyAtIHJlcXVlc3TigJlzIHVuc2FmZS1yZXF1ZXN0IGZsYWcgaXMgc2V0IGFuZCBlaXRoZXIgcmVxdWVzdOKAmXMgbWV0aG9kIGlzXG4gICAgICAvLyAgIG5vdCBhIENPUlMtc2FmZWxpc3RlZCBtZXRob2Qgb3IgQ09SUy11bnNhZmUgcmVxdWVzdC1oZWFkZXIgbmFtZXMgd2l0aFxuICAgICAgLy8gICByZXF1ZXN04oCZcyBoZWFkZXIgbGlzdCBpcyBub3QgZW1wdHlcbiAgICAgIC8vICAgIDEuIFNldCByZXF1ZXN04oCZcyByZXNwb25zZSB0YWludGluZyB0byBcImNvcnNcIi5cbiAgICAgIC8vICAgIDIuIExldCBjb3JzV2l0aFByZWZsaWdodFJlc3BvbnNlIGJlIHRoZSByZXN1bHQgb2YgcnVubmluZyBIVFRQIGZldGNoXG4gICAgICAvLyAgICBnaXZlbiBmZXRjaFBhcmFtcyBhbmQgdHJ1ZS5cbiAgICAgIC8vICAgIDMuIElmIGNvcnNXaXRoUHJlZmxpZ2h0UmVzcG9uc2UgaXMgYSBuZXR3b3JrIGVycm9yLCB0aGVuIGNsZWFyIGNhY2hlXG4gICAgICAvLyAgICBlbnRyaWVzIHVzaW5nIHJlcXVlc3QuXG4gICAgICAvLyAgICA0LiBSZXR1cm4gY29yc1dpdGhQcmVmbGlnaHRSZXNwb25zZS5cbiAgICAgIC8vIFRPRE9cblxuICAgICAgLy8gT3RoZXJ3aXNlXG4gICAgICAvLyAgICAxLiBTZXQgcmVxdWVzdOKAmXMgcmVzcG9uc2UgdGFpbnRpbmcgdG8gXCJjb3JzXCIuXG4gICAgICByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPSAnY29ycydcblxuICAgICAgLy8gICAgMi4gUmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZyBIVFRQIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLlxuICAgICAgcmV0dXJuIGF3YWl0IGh0dHBGZXRjaChmZXRjaFBhcmFtcylcbiAgICB9KSgpXG4gIH1cblxuICAvLyAxMi4gSWYgcmVjdXJzaXZlIGlzIHRydWUsIHRoZW4gcmV0dXJuIHJlc3BvbnNlLlxuICBpZiAocmVjdXJzaXZlKSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlXG4gIH1cblxuICAvLyAxMy4gSWYgcmVzcG9uc2UgaXMgbm90IGEgbmV0d29yayBlcnJvciBhbmQgcmVzcG9uc2UgaXMgbm90IGEgZmlsdGVyZWRcbiAgLy8gcmVzcG9uc2UsIHRoZW46XG4gIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IDAgJiYgIXJlc3BvbnNlLmludGVybmFsUmVzcG9uc2UpIHtcbiAgICAvLyBJZiByZXF1ZXN04oCZcyByZXNwb25zZSB0YWludGluZyBpcyBcImNvcnNcIiwgdGhlbjpcbiAgICBpZiAocmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnY29ycycpIHtcbiAgICAgIC8vIDEuIExldCBoZWFkZXJOYW1lcyBiZSB0aGUgcmVzdWx0IG9mIGV4dHJhY3RpbmcgaGVhZGVyIGxpc3QgdmFsdWVzXG4gICAgICAvLyBnaXZlbiBgQWNjZXNzLUNvbnRyb2wtRXhwb3NlLUhlYWRlcnNgIGFuZCByZXNwb25zZeKAmXMgaGVhZGVyIGxpc3QuXG4gICAgICAvLyBUT0RPXG4gICAgICAvLyAyLiBJZiByZXF1ZXN04oCZcyBjcmVkZW50aWFscyBtb2RlIGlzIG5vdCBcImluY2x1ZGVcIiBhbmQgaGVhZGVyTmFtZXNcbiAgICAgIC8vIGNvbnRhaW5zIGAqYCwgdGhlbiBzZXQgcmVzcG9uc2XigJlzIENPUlMtZXhwb3NlZCBoZWFkZXItbmFtZSBsaXN0IHRvXG4gICAgICAvLyBhbGwgdW5pcXVlIGhlYWRlciBuYW1lcyBpbiByZXNwb25zZeKAmXMgaGVhZGVyIGxpc3QuXG4gICAgICAvLyBUT0RPXG4gICAgICAvLyAzLiBPdGhlcndpc2UsIGlmIGhlYWRlck5hbWVzIGlzIG5vdCBudWxsIG9yIGZhaWx1cmUsIHRoZW4gc2V0XG4gICAgICAvLyByZXNwb25zZeKAmXMgQ09SUy1leHBvc2VkIGhlYWRlci1uYW1lIGxpc3QgdG8gaGVhZGVyTmFtZXMuXG4gICAgICAvLyBUT0RPXG4gICAgfVxuXG4gICAgLy8gU2V0IHJlc3BvbnNlIHRvIHRoZSBmb2xsb3dpbmcgZmlsdGVyZWQgcmVzcG9uc2Ugd2l0aCByZXNwb25zZSBhcyBpdHNcbiAgICAvLyBpbnRlcm5hbCByZXNwb25zZSwgZGVwZW5kaW5nIG9uIHJlcXVlc3TigJlzIHJlc3BvbnNlIHRhaW50aW5nOlxuICAgIGlmIChyZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdiYXNpYycpIHtcbiAgICAgIHJlc3BvbnNlID0gZmlsdGVyUmVzcG9uc2UocmVzcG9uc2UsICdiYXNpYycpXG4gICAgfSBlbHNlIGlmIChyZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdjb3JzJykge1xuICAgICAgcmVzcG9uc2UgPSBmaWx0ZXJSZXNwb25zZShyZXNwb25zZSwgJ2NvcnMnKVxuICAgIH0gZWxzZSBpZiAocmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnb3BhcXVlJykge1xuICAgICAgcmVzcG9uc2UgPSBmaWx0ZXJSZXNwb25zZShyZXNwb25zZSwgJ29wYXF1ZScpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydChmYWxzZSlcbiAgICB9XG4gIH1cblxuICAvLyAxNC4gTGV0IGludGVybmFsUmVzcG9uc2UgYmUgcmVzcG9uc2UsIGlmIHJlc3BvbnNlIGlzIGEgbmV0d29yayBlcnJvcixcbiAgLy8gYW5kIHJlc3BvbnNl4oCZcyBpbnRlcm5hbCByZXNwb25zZSBvdGhlcndpc2UuXG4gIGxldCBpbnRlcm5hbFJlc3BvbnNlID1cbiAgICByZXNwb25zZS5zdGF0dXMgPT09IDAgPyByZXNwb25zZSA6IHJlc3BvbnNlLmludGVybmFsUmVzcG9uc2VcblxuICAvLyAxNS4gSWYgaW50ZXJuYWxSZXNwb25zZeKAmXMgVVJMIGxpc3QgaXMgZW1wdHksIHRoZW4gc2V0IGl0IHRvIGEgY2xvbmUgb2ZcbiAgLy8gcmVxdWVzdOKAmXMgVVJMIGxpc3QuXG4gIGlmIChpbnRlcm5hbFJlc3BvbnNlLnVybExpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgaW50ZXJuYWxSZXNwb25zZS51cmxMaXN0LnB1c2goLi4ucmVxdWVzdC51cmxMaXN0KVxuICB9XG5cbiAgLy8gMTYuIElmIHJlcXVlc3TigJlzIHRpbWluZyBhbGxvdyBmYWlsZWQgZmxhZyBpcyB1bnNldCwgdGhlbiBzZXRcbiAgLy8gaW50ZXJuYWxSZXNwb25zZeKAmXMgdGltaW5nIGFsbG93IHBhc3NlZCBmbGFnLlxuICBpZiAoIXJlcXVlc3QudGltaW5nQWxsb3dGYWlsZWQpIHtcbiAgICByZXNwb25zZS50aW1pbmdBbGxvd1Bhc3NlZCA9IHRydWVcbiAgfVxuXG4gIC8vIDE3LiBJZiByZXNwb25zZSBpcyBub3QgYSBuZXR3b3JrIGVycm9yIGFuZCBhbnkgb2YgdGhlIGZvbGxvd2luZyByZXR1cm5zXG4gIC8vIGJsb2NrZWRcbiAgLy8gLSBzaG91bGQgaW50ZXJuYWxSZXNwb25zZSB0byByZXF1ZXN0IGJlIGJsb2NrZWQgYXMgbWl4ZWQgY29udGVudFxuICAvLyAtIHNob3VsZCBpbnRlcm5hbFJlc3BvbnNlIHRvIHJlcXVlc3QgYmUgYmxvY2tlZCBieSBDb250ZW50IFNlY3VyaXR5IFBvbGljeVxuICAvLyAtIHNob3VsZCBpbnRlcm5hbFJlc3BvbnNlIHRvIHJlcXVlc3QgYmUgYmxvY2tlZCBkdWUgdG8gaXRzIE1JTUUgdHlwZVxuICAvLyAtIHNob3VsZCBpbnRlcm5hbFJlc3BvbnNlIHRvIHJlcXVlc3QgYmUgYmxvY2tlZCBkdWUgdG8gbm9zbmlmZlxuICAvLyBUT0RPXG5cbiAgLy8gMTguIElmIHJlc3BvbnNl4oCZcyB0eXBlIGlzIFwib3BhcXVlXCIsIGludGVybmFsUmVzcG9uc2XigJlzIHN0YXR1cyBpcyAyMDYsXG4gIC8vIGludGVybmFsUmVzcG9uc2XigJlzIHJhbmdlLXJlcXVlc3RlZCBmbGFnIGlzIHNldCwgYW5kIHJlcXVlc3TigJlzIGhlYWRlclxuICAvLyBsaXN0IGRvZXMgbm90IGNvbnRhaW4gYFJhbmdlYCwgdGhlbiBzZXQgcmVzcG9uc2UgYW5kIGludGVybmFsUmVzcG9uc2VcbiAgLy8gdG8gYSBuZXR3b3JrIGVycm9yLlxuICBpZiAoXG4gICAgcmVzcG9uc2UudHlwZSA9PT0gJ29wYXF1ZScgJiZcbiAgICBpbnRlcm5hbFJlc3BvbnNlLnN0YXR1cyA9PT0gMjA2ICYmXG4gICAgaW50ZXJuYWxSZXNwb25zZS5yYW5nZVJlcXVlc3RlZCAmJlxuICAgICFyZXF1ZXN0LmhlYWRlcnMuY29udGFpbnMoJ3JhbmdlJylcbiAgKSB7XG4gICAgcmVzcG9uc2UgPSBpbnRlcm5hbFJlc3BvbnNlID0gbWFrZU5ldHdvcmtFcnJvcigpXG4gIH1cblxuICAvLyAxOS4gSWYgcmVzcG9uc2UgaXMgbm90IGEgbmV0d29yayBlcnJvciBhbmQgZWl0aGVyIHJlcXVlc3TigJlzIG1ldGhvZCBpc1xuICAvLyBgSEVBRGAgb3IgYENPTk5FQ1RgLCBvciBpbnRlcm5hbFJlc3BvbnNl4oCZcyBzdGF0dXMgaXMgYSBudWxsIGJvZHkgc3RhdHVzLFxuICAvLyBzZXQgaW50ZXJuYWxSZXNwb25zZeKAmXMgYm9keSB0byBudWxsIGFuZCBkaXNyZWdhcmQgYW55IGVucXVldWluZyB0b3dhcmRcbiAgLy8gaXQgKGlmIGFueSkuXG4gIGlmIChcbiAgICByZXNwb25zZS5zdGF0dXMgIT09IDAgJiZcbiAgICAocmVxdWVzdC5tZXRob2QgPT09ICdIRUFEJyB8fFxuICAgICAgcmVxdWVzdC5tZXRob2QgPT09ICdDT05ORUNUJyB8fFxuICAgICAgbnVsbEJvZHlTdGF0dXMuaW5jbHVkZXMoaW50ZXJuYWxSZXNwb25zZS5zdGF0dXMpKVxuICApIHtcbiAgICBpbnRlcm5hbFJlc3BvbnNlLmJvZHkgPSBudWxsXG4gICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5kdW1wID0gdHJ1ZVxuICB9XG5cbiAgLy8gMjAuIElmIHJlcXVlc3TigJlzIGludGVncml0eSBtZXRhZGF0YSBpcyBub3QgdGhlIGVtcHR5IHN0cmluZywgdGhlbjpcbiAgaWYgKHJlcXVlc3QuaW50ZWdyaXR5KSB7XG4gICAgLy8gMS4gTGV0IHByb2Nlc3NCb2R5RXJyb3IgYmUgdGhpcyBzdGVwOiBydW4gZmV0Y2ggZmluYWxlIGdpdmVuIGZldGNoUGFyYW1zXG4gICAgLy8gYW5kIGEgbmV0d29yayBlcnJvci5cbiAgICBjb25zdCBwcm9jZXNzQm9keUVycm9yID0gKHJlYXNvbikgPT5cbiAgICAgIGZldGNoRmluYWxlKGZldGNoUGFyYW1zLCBtYWtlTmV0d29ya0Vycm9yKHJlYXNvbikpXG5cbiAgICAvLyAyLiBJZiByZXF1ZXN04oCZcyByZXNwb25zZSB0YWludGluZyBpcyBcIm9wYXF1ZVwiLCBvciByZXNwb25zZeKAmXMgYm9keSBpcyBudWxsLFxuICAgIC8vIHRoZW4gcnVuIHByb2Nlc3NCb2R5RXJyb3IgYW5kIGFib3J0IHRoZXNlIHN0ZXBzLlxuICAgIGlmIChyZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdvcGFxdWUnIHx8IHJlc3BvbnNlLmJvZHkgPT0gbnVsbCkge1xuICAgICAgcHJvY2Vzc0JvZHlFcnJvcihyZXNwb25zZS5lcnJvcilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIDMuIExldCBwcm9jZXNzQm9keSBnaXZlbiBieXRlcyBiZSB0aGVzZSBzdGVwczpcbiAgICBjb25zdCBwcm9jZXNzQm9keSA9IChieXRlcykgPT4ge1xuICAgICAgLy8gMS4gSWYgYnl0ZXMgZG8gbm90IG1hdGNoIHJlcXVlc3TigJlzIGludGVncml0eSBtZXRhZGF0YSxcbiAgICAgIC8vIHRoZW4gcnVuIHByb2Nlc3NCb2R5RXJyb3IgYW5kIGFib3J0IHRoZXNlIHN0ZXBzLiBbU1JJXVxuICAgICAgaWYgKCFieXRlc01hdGNoKGJ5dGVzLCByZXF1ZXN0LmludGVncml0eSkpIHtcbiAgICAgICAgcHJvY2Vzc0JvZHlFcnJvcignaW50ZWdyaXR5IG1pc21hdGNoJylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIFNldCByZXNwb25zZeKAmXMgYm9keSB0byBieXRlcyBhcyBhIGJvZHkuXG4gICAgICByZXNwb25zZS5ib2R5ID0gc2FmZWx5RXh0cmFjdEJvZHkoYnl0ZXMpWzBdXG5cbiAgICAgIC8vIDMuIFJ1biBmZXRjaCBmaW5hbGUgZ2l2ZW4gZmV0Y2hQYXJhbXMgYW5kIHJlc3BvbnNlLlxuICAgICAgZmV0Y2hGaW5hbGUoZmV0Y2hQYXJhbXMsIHJlc3BvbnNlKVxuICAgIH1cblxuICAgIC8vIDQuIEZ1bGx5IHJlYWQgcmVzcG9uc2XigJlzIGJvZHkgZ2l2ZW4gcHJvY2Vzc0JvZHkgYW5kIHByb2Nlc3NCb2R5RXJyb3IuXG4gICAgYXdhaXQgZnVsbHlSZWFkQm9keShyZXNwb25zZS5ib2R5LCBwcm9jZXNzQm9keSwgcHJvY2Vzc0JvZHlFcnJvcilcbiAgfSBlbHNlIHtcbiAgICAvLyAyMS4gT3RoZXJ3aXNlLCBydW4gZmV0Y2ggZmluYWxlIGdpdmVuIGZldGNoUGFyYW1zIGFuZCByZXNwb25zZS5cbiAgICBmZXRjaEZpbmFsZShmZXRjaFBhcmFtcywgcmVzcG9uc2UpXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtc2NoZW1lLWZldGNoXG4vLyBnaXZlbiBhIGZldGNoIHBhcmFtcyBmZXRjaFBhcmFtc1xuZnVuY3Rpb24gc2NoZW1lRmV0Y2ggKGZldGNoUGFyYW1zKSB7XG4gIC8vIE5vdGU6IHNpbmNlIHRoZSBjb25uZWN0aW9uIGlzIGRlc3Ryb3llZCBvbiByZWRpcmVjdCwgd2hpY2ggc2V0cyBmZXRjaFBhcmFtcyB0byBhXG4gIC8vIGNhbmNlbGxlZCBzdGF0ZSwgd2UgZG8gbm90IHdhbnQgdGhpcyBjb25kaXRpb24gdG8gdHJpZ2dlciAqdW5sZXNzKiB0aGVyZSBoYXZlIGJlZW5cbiAgLy8gbm8gcmVkaXJlY3RzLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzE3NzZcbiAgLy8gMS4gSWYgZmV0Y2hQYXJhbXMgaXMgY2FuY2VsZWQsIHRoZW4gcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSBuZXR3b3JrIGVycm9yIGZvciBmZXRjaFBhcmFtcy5cbiAgaWYgKGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSAmJiBmZXRjaFBhcmFtcy5yZXF1ZXN0LnJlZGlyZWN0Q291bnQgPT09IDApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VBcHByb3ByaWF0ZU5ldHdvcmtFcnJvcihmZXRjaFBhcmFtcykpXG4gIH1cblxuICAvLyAyLiBMZXQgcmVxdWVzdCBiZSBmZXRjaFBhcmFtc+KAmXMgcmVxdWVzdC5cbiAgY29uc3QgeyByZXF1ZXN0IH0gPSBmZXRjaFBhcmFtc1xuXG4gIGNvbnN0IHsgcHJvdG9jb2w6IHNjaGVtZSB9ID0gcmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdClcblxuICAvLyAzLiBTd2l0Y2ggb24gcmVxdWVzdOKAmXMgY3VycmVudCBVUkzigJlzIHNjaGVtZSBhbmQgcnVuIHRoZSBhc3NvY2lhdGVkIHN0ZXBzOlxuICBzd2l0Y2ggKHNjaGVtZSkge1xuICAgIGNhc2UgJ2Fib3V0Oic6IHtcbiAgICAgIC8vIElmIHJlcXVlc3TigJlzIGN1cnJlbnQgVVJM4oCZcyBwYXRoIGlzIHRoZSBzdHJpbmcgXCJibGFua1wiLCB0aGVuIHJldHVybiBhIG5ldyByZXNwb25zZVxuICAgICAgLy8gd2hvc2Ugc3RhdHVzIG1lc3NhZ2UgaXMgYE9LYCwgaGVhZGVyIGxpc3QgaXMgwqsgKGBDb250ZW50LVR5cGVgLCBgdGV4dC9odG1sO2NoYXJzZXQ9dXRmLThgKSDCuyxcbiAgICAgIC8vIGFuZCBib2R5IGlzIHRoZSBlbXB0eSBieXRlIHNlcXVlbmNlIGFzIGEgYm9keS5cblxuICAgICAgLy8gT3RoZXJ3aXNlLCByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKCdhYm91dCBzY2hlbWUgaXMgbm90IHN1cHBvcnRlZCcpKVxuICAgIH1cbiAgICBjYXNlICdibG9iOic6IHtcbiAgICAgIGlmICghcmVzb2x2ZU9iamVjdFVSTCkge1xuICAgICAgICByZXNvbHZlT2JqZWN0VVJMID0gcmVxdWlyZSgnYnVmZmVyJykucmVzb2x2ZU9iamVjdFVSTFxuICAgICAgfVxuXG4gICAgICAvLyAxLiBMZXQgYmxvYlVSTEVudHJ5IGJlIHJlcXVlc3TigJlzIGN1cnJlbnQgVVJM4oCZcyBibG9iIFVSTCBlbnRyeS5cbiAgICAgIGNvbnN0IGJsb2JVUkxFbnRyeSA9IHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpXG5cbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS93ZWItcGxhdGZvcm0tdGVzdHMvd3B0L2Jsb2IvN2IwZWJhY2NjNjJiNTY2YTE5NjUzOTZlNWJlN2JiMmJjMDZmODQxZi9GaWxlQVBJL3VybC9yZXNvdXJjZXMvZmV0Y2gtdGVzdHMuanMjTDUyLUw1NlxuICAgICAgLy8gQnVmZmVyLnJlc29sdmVPYmplY3RVUkwgZG9lcyBub3QgaWdub3JlIFVSTCBxdWVyaWVzLlxuICAgICAgaWYgKGJsb2JVUkxFbnRyeS5zZWFyY2gubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignTmV0d29ya0Vycm9yIHdoZW4gYXR0ZW1wdGluZyB0byBmZXRjaCByZXNvdXJjZS4nKSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgYmxvYlVSTEVudHJ5T2JqZWN0ID0gcmVzb2x2ZU9iamVjdFVSTChibG9iVVJMRW50cnkudG9TdHJpbmcoKSlcblxuICAgICAgLy8gMi4gSWYgcmVxdWVzdOKAmXMgbWV0aG9kIGlzIG5vdCBgR0VUYCwgYmxvYlVSTEVudHJ5IGlzIG51bGwsIG9yIGJsb2JVUkxFbnRyeeKAmXNcbiAgICAgIC8vICAgIG9iamVjdCBpcyBub3QgYSBCbG9iIG9iamVjdCwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICAgICAgaWYgKHJlcXVlc3QubWV0aG9kICE9PSAnR0VUJyB8fCAhaXNCbG9iTGlrZShibG9iVVJMRW50cnlPYmplY3QpKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignaW52YWxpZCBtZXRob2QnKSlcbiAgICAgIH1cblxuICAgICAgLy8gMy4gTGV0IGJvZHlXaXRoVHlwZSBiZSB0aGUgcmVzdWx0IG9mIHNhZmVseSBleHRyYWN0aW5nIGJsb2JVUkxFbnRyeeKAmXMgb2JqZWN0LlxuICAgICAgY29uc3QgYm9keVdpdGhUeXBlID0gc2FmZWx5RXh0cmFjdEJvZHkoYmxvYlVSTEVudHJ5T2JqZWN0KVxuXG4gICAgICAvLyA0LiBMZXQgYm9keSBiZSBib2R5V2l0aFR5cGXigJlzIGJvZHkuXG4gICAgICBjb25zdCBib2R5ID0gYm9keVdpdGhUeXBlWzBdXG5cbiAgICAgIC8vIDUuIExldCBsZW5ndGggYmUgYm9keeKAmXMgbGVuZ3RoLCBzZXJpYWxpemVkIGFuZCBpc29tb3JwaGljIGVuY29kZWQuXG4gICAgICBjb25zdCBsZW5ndGggPSBpc29tb3JwaGljRW5jb2RlKGAke2JvZHkubGVuZ3RofWApXG5cbiAgICAgIC8vIDYuIExldCB0eXBlIGJlIGJvZHlXaXRoVHlwZeKAmXMgdHlwZSBpZiBpdCBpcyBub24tbnVsbDsgb3RoZXJ3aXNlIHRoZSBlbXB0eSBieXRlIHNlcXVlbmNlLlxuICAgICAgY29uc3QgdHlwZSA9IGJvZHlXaXRoVHlwZVsxXSA/PyAnJ1xuXG4gICAgICAvLyA3LiBSZXR1cm4gYSBuZXcgcmVzcG9uc2Ugd2hvc2Ugc3RhdHVzIG1lc3NhZ2UgaXMgYE9LYCwgaGVhZGVyIGxpc3QgaXNcbiAgICAgIC8vICAgIMKrIChgQ29udGVudC1MZW5ndGhgLCBsZW5ndGgpLCAoYENvbnRlbnQtVHlwZWAsIHR5cGUpIMK7LCBhbmQgYm9keSBpcyBib2R5LlxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBtYWtlUmVzcG9uc2Uoe1xuICAgICAgICBzdGF0dXNUZXh0OiAnT0snLFxuICAgICAgICBoZWFkZXJzTGlzdDogW1xuICAgICAgICAgIFsnY29udGVudC1sZW5ndGgnLCB7IG5hbWU6ICdDb250ZW50LUxlbmd0aCcsIHZhbHVlOiBsZW5ndGggfV0sXG4gICAgICAgICAgWydjb250ZW50LXR5cGUnLCB7IG5hbWU6ICdDb250ZW50LVR5cGUnLCB2YWx1ZTogdHlwZSB9XVxuICAgICAgICBdXG4gICAgICB9KVxuXG4gICAgICByZXNwb25zZS5ib2R5ID0gYm9keVxuXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3BvbnNlKVxuICAgIH1cbiAgICBjYXNlICdkYXRhOic6IHtcbiAgICAgIC8vIDEuIExldCBkYXRhVVJMU3RydWN0IGJlIHRoZSByZXN1bHQgb2YgcnVubmluZyB0aGVcbiAgICAgIC8vICAgIGRhdGE6IFVSTCBwcm9jZXNzb3Igb24gcmVxdWVzdOKAmXMgY3VycmVudCBVUkwuXG4gICAgICBjb25zdCBjdXJyZW50VVJMID0gcmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdClcbiAgICAgIGNvbnN0IGRhdGFVUkxTdHJ1Y3QgPSBkYXRhVVJMUHJvY2Vzc29yKGN1cnJlbnRVUkwpXG5cbiAgICAgIC8vIDIuIElmIGRhdGFVUkxTdHJ1Y3QgaXMgZmFpbHVyZSwgdGhlbiByZXR1cm4gYVxuICAgICAgLy8gICAgbmV0d29yayBlcnJvci5cbiAgICAgIGlmIChkYXRhVVJMU3RydWN0ID09PSAnZmFpbHVyZScpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKCdmYWlsZWQgdG8gZmV0Y2ggdGhlIGRhdGEgVVJMJykpXG4gICAgICB9XG5cbiAgICAgIC8vIDMuIExldCBtaW1lVHlwZSBiZSBkYXRhVVJMU3RydWN04oCZcyBNSU1FIHR5cGUsIHNlcmlhbGl6ZWQuXG4gICAgICBjb25zdCBtaW1lVHlwZSA9IHNlcmlhbGl6ZUFNaW1lVHlwZShkYXRhVVJMU3RydWN0Lm1pbWVUeXBlKVxuXG4gICAgICAvLyA0LiBSZXR1cm4gYSByZXNwb25zZSB3aG9zZSBzdGF0dXMgbWVzc2FnZSBpcyBgT0tgLFxuICAgICAgLy8gICAgaGVhZGVyIGxpc3QgaXMgwqsgKGBDb250ZW50LVR5cGVgLCBtaW1lVHlwZSkgwrssXG4gICAgICAvLyAgICBhbmQgYm9keSBpcyBkYXRhVVJMU3RydWN04oCZcyBib2R5IGFzIGEgYm9keS5cbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZVJlc3BvbnNlKHtcbiAgICAgICAgc3RhdHVzVGV4dDogJ09LJyxcbiAgICAgICAgaGVhZGVyc0xpc3Q6IFtcbiAgICAgICAgICBbJ2NvbnRlbnQtdHlwZScsIHsgbmFtZTogJ0NvbnRlbnQtVHlwZScsIHZhbHVlOiBtaW1lVHlwZSB9XVxuICAgICAgICBdLFxuICAgICAgICBib2R5OiBzYWZlbHlFeHRyYWN0Qm9keShkYXRhVVJMU3RydWN0LmJvZHkpWzBdXG4gICAgICB9KSlcbiAgICB9XG4gICAgY2FzZSAnZmlsZTonOiB7XG4gICAgICAvLyBGb3Igbm93LCB1bmZvcnR1bmF0ZSBhcyBpdCBpcywgZmlsZSBVUkxzIGFyZSBsZWZ0IGFzIGFuIGV4ZXJjaXNlIGZvciB0aGUgcmVhZGVyLlxuICAgICAgLy8gV2hlbiBpbiBkb3VidCwgcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignbm90IGltcGxlbWVudGVkLi4uIHlldC4uLicpKVxuICAgIH1cbiAgICBjYXNlICdodHRwOic6XG4gICAgY2FzZSAnaHR0cHM6Jzoge1xuICAgICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZyBIVFRQIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLlxuXG4gICAgICByZXR1cm4gaHR0cEZldGNoKGZldGNoUGFyYW1zKVxuICAgICAgICAuY2F0Y2goKGVycikgPT4gbWFrZU5ldHdvcmtFcnJvcihlcnIpKVxuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoJ3Vua25vd24gc2NoZW1lJykpXG4gICAgfVxuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmaW5hbGl6ZS1yZXNwb25zZVxuZnVuY3Rpb24gZmluYWxpemVSZXNwb25zZSAoZmV0Y2hQYXJhbXMsIHJlc3BvbnNlKSB7XG4gIC8vIDEuIFNldCBmZXRjaFBhcmFtc+KAmXMgcmVxdWVzdOKAmXMgZG9uZSBmbGFnLlxuICBmZXRjaFBhcmFtcy5yZXF1ZXN0LmRvbmUgPSB0cnVlXG5cbiAgLy8gMiwgSWYgZmV0Y2hQYXJhbXPigJlzIHByb2Nlc3MgcmVzcG9uc2UgZG9uZSBpcyBub3QgbnVsbCwgdGhlbiBxdWV1ZSBhIGZldGNoXG4gIC8vIHRhc2sgdG8gcnVuIGZldGNoUGFyYW1z4oCZcyBwcm9jZXNzIHJlc3BvbnNlIGRvbmUgZ2l2ZW4gcmVzcG9uc2UsIHdpdGhcbiAgLy8gZmV0Y2hQYXJhbXPigJlzIHRhc2sgZGVzdGluYXRpb24uXG4gIGlmIChmZXRjaFBhcmFtcy5wcm9jZXNzUmVzcG9uc2VEb25lICE9IG51bGwpIHtcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBmZXRjaFBhcmFtcy5wcm9jZXNzUmVzcG9uc2VEb25lKHJlc3BvbnNlKSlcbiAgfVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZmV0Y2gtZmluYWxlXG5mdW5jdGlvbiBmZXRjaEZpbmFsZSAoZmV0Y2hQYXJhbXMsIHJlc3BvbnNlKSB7XG4gIC8vIDEuIElmIHJlc3BvbnNlIGlzIGEgbmV0d29yayBlcnJvciwgdGhlbjpcbiAgaWYgKHJlc3BvbnNlLnR5cGUgPT09ICdlcnJvcicpIHtcbiAgICAvLyAxLiBTZXQgcmVzcG9uc2XigJlzIFVSTCBsaXN0IHRvIMKrIGZldGNoUGFyYW1z4oCZcyByZXF1ZXN04oCZcyBVUkwgbGlzdFswXSDCuy5cbiAgICByZXNwb25zZS51cmxMaXN0ID0gW2ZldGNoUGFyYW1zLnJlcXVlc3QudXJsTGlzdFswXV1cblxuICAgIC8vIDIuIFNldCByZXNwb25zZeKAmXMgdGltaW5nIGluZm8gdG8gdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhbiBvcGFxdWUgdGltaW5nXG4gICAgLy8gaW5mbyBmb3IgZmV0Y2hQYXJhbXPigJlzIHRpbWluZyBpbmZvLlxuICAgIHJlc3BvbnNlLnRpbWluZ0luZm8gPSBjcmVhdGVPcGFxdWVUaW1pbmdJbmZvKHtcbiAgICAgIHN0YXJ0VGltZTogZmV0Y2hQYXJhbXMudGltaW5nSW5mby5zdGFydFRpbWVcbiAgICB9KVxuICB9XG5cbiAgLy8gMi4gTGV0IHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSBiZSB0aGUgZm9sbG93aW5nIHN0ZXBzOlxuICBjb25zdCBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHkgPSAoKSA9PiB7XG4gICAgLy8gMS4gU2V0IGZldGNoUGFyYW1z4oCZcyByZXF1ZXN04oCZcyBkb25lIGZsYWcuXG4gICAgZmV0Y2hQYXJhbXMucmVxdWVzdC5kb25lID0gdHJ1ZVxuXG4gICAgLy8gSWYgZmV0Y2hQYXJhbXPigJlzIHByb2Nlc3MgcmVzcG9uc2UgZW5kLW9mLWJvZHkgaXMgbm90IG51bGwsXG4gICAgLy8gdGhlbiBxdWV1ZSBhIGZldGNoIHRhc2sgdG8gcnVuIGZldGNoUGFyYW1z4oCZcyBwcm9jZXNzIHJlc3BvbnNlXG4gICAgLy8gZW5kLW9mLWJvZHkgZ2l2ZW4gcmVzcG9uc2Ugd2l0aCBmZXRjaFBhcmFtc+KAmXMgdGFzayBkZXN0aW5hdGlvbi5cbiAgICBpZiAoZmV0Y2hQYXJhbXMucHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5ICE9IG51bGwpIHtcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZUVuZE9mQm9keShyZXNwb25zZSkpXG4gICAgfVxuICB9XG5cbiAgLy8gMy4gSWYgZmV0Y2hQYXJhbXPigJlzIHByb2Nlc3MgcmVzcG9uc2UgaXMgbm9uLW51bGwsIHRoZW4gcXVldWUgYSBmZXRjaCB0YXNrXG4gIC8vIHRvIHJ1biBmZXRjaFBhcmFtc+KAmXMgcHJvY2VzcyByZXNwb25zZSBnaXZlbiByZXNwb25zZSwgd2l0aCBmZXRjaFBhcmFtc+KAmXNcbiAgLy8gdGFzayBkZXN0aW5hdGlvbi5cbiAgaWYgKGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZSAhPSBudWxsKSB7XG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gZmV0Y2hQYXJhbXMucHJvY2Vzc1Jlc3BvbnNlKHJlc3BvbnNlKSlcbiAgfVxuXG4gIC8vIDQuIElmIHJlc3BvbnNl4oCZcyBib2R5IGlzIG51bGwsIHRoZW4gcnVuIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keS5cbiAgaWYgKHJlc3BvbnNlLmJvZHkgPT0gbnVsbCkge1xuICAgIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSgpXG4gIH0gZWxzZSB7XG4gIC8vIDUuIE90aGVyd2lzZTpcblxuICAgIC8vIDEuIExldCB0cmFuc2Zvcm1TdHJlYW0gYmUgYSBuZXcgYSBUcmFuc2Zvcm1TdHJlYW0uXG5cbiAgICAvLyAyLiBMZXQgaWRlbnRpdHlUcmFuc2Zvcm1BbGdvcml0aG0gYmUgYW4gYWxnb3JpdGhtIHdoaWNoLCBnaXZlbiBjaHVuayxcbiAgICAvLyBlbnF1ZXVlcyBjaHVuayBpbiB0cmFuc2Zvcm1TdHJlYW0uXG4gICAgY29uc3QgaWRlbnRpdHlUcmFuc2Zvcm1BbGdvcml0aG0gPSAoY2h1bmssIGNvbnRyb2xsZXIpID0+IHtcbiAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShjaHVuaylcbiAgICB9XG5cbiAgICAvLyAzLiBTZXQgdXAgdHJhbnNmb3JtU3RyZWFtIHdpdGggdHJhbnNmb3JtQWxnb3JpdGhtIHNldCB0byBpZGVudGl0eVRyYW5zZm9ybUFsZ29yaXRobVxuICAgIC8vIGFuZCBmbHVzaEFsZ29yaXRobSBzZXQgdG8gcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5LlxuICAgIGNvbnN0IHRyYW5zZm9ybVN0cmVhbSA9IG5ldyBUcmFuc2Zvcm1TdHJlYW0oe1xuICAgICAgc3RhcnQgKCkge30sXG4gICAgICB0cmFuc2Zvcm06IGlkZW50aXR5VHJhbnNmb3JtQWxnb3JpdGhtLFxuICAgICAgZmx1c2g6IHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keVxuICAgIH0sIHtcbiAgICAgIHNpemUgKCkge1xuICAgICAgICByZXR1cm4gMVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIHNpemUgKCkge1xuICAgICAgICByZXR1cm4gMVxuICAgICAgfVxuICAgIH0pXG5cbiAgICAvLyA0LiBTZXQgcmVzcG9uc2XigJlzIGJvZHkgdG8gdGhlIHJlc3VsdCBvZiBwaXBpbmcgcmVzcG9uc2XigJlzIGJvZHkgdGhyb3VnaCB0cmFuc2Zvcm1TdHJlYW0uXG4gICAgcmVzcG9uc2UuYm9keSA9IHsgc3RyZWFtOiByZXNwb25zZS5ib2R5LnN0cmVhbS5waXBlVGhyb3VnaCh0cmFuc2Zvcm1TdHJlYW0pIH1cbiAgfVxuXG4gIC8vIDYuIElmIGZldGNoUGFyYW1z4oCZcyBwcm9jZXNzIHJlc3BvbnNlIGNvbnN1bWUgYm9keSBpcyBub24tbnVsbCwgdGhlbjpcbiAgaWYgKGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZUNvbnN1bWVCb2R5ICE9IG51bGwpIHtcbiAgICAvLyAxLiBMZXQgcHJvY2Vzc0JvZHkgZ2l2ZW4gbnVsbE9yQnl0ZXMgYmUgdGhpcyBzdGVwOiBydW4gZmV0Y2hQYXJhbXPigJlzXG4gICAgLy8gcHJvY2VzcyByZXNwb25zZSBjb25zdW1lIGJvZHkgZ2l2ZW4gcmVzcG9uc2UgYW5kIG51bGxPckJ5dGVzLlxuICAgIGNvbnN0IHByb2Nlc3NCb2R5ID0gKG51bGxPckJ5dGVzKSA9PiBmZXRjaFBhcmFtcy5wcm9jZXNzUmVzcG9uc2VDb25zdW1lQm9keShyZXNwb25zZSwgbnVsbE9yQnl0ZXMpXG5cbiAgICAvLyAyLiBMZXQgcHJvY2Vzc0JvZHlFcnJvciBiZSB0aGlzIHN0ZXA6IHJ1biBmZXRjaFBhcmFtc+KAmXMgcHJvY2Vzc1xuICAgIC8vIHJlc3BvbnNlIGNvbnN1bWUgYm9keSBnaXZlbiByZXNwb25zZSBhbmQgZmFpbHVyZS5cbiAgICBjb25zdCBwcm9jZXNzQm9keUVycm9yID0gKGZhaWx1cmUpID0+IGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZUNvbnN1bWVCb2R5KHJlc3BvbnNlLCBmYWlsdXJlKVxuXG4gICAgLy8gMy4gSWYgcmVzcG9uc2XigJlzIGJvZHkgaXMgbnVsbCwgdGhlbiBxdWV1ZSBhIGZldGNoIHRhc2sgdG8gcnVuIHByb2Nlc3NCb2R5XG4gICAgLy8gZ2l2ZW4gbnVsbCwgd2l0aCBmZXRjaFBhcmFtc+KAmXMgdGFzayBkZXN0aW5hdGlvbi5cbiAgICBpZiAocmVzcG9uc2UuYm9keSA9PSBudWxsKSB7XG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBwcm9jZXNzQm9keShudWxsKSlcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gNC4gT3RoZXJ3aXNlLCBmdWxseSByZWFkIHJlc3BvbnNl4oCZcyBib2R5IGdpdmVuIHByb2Nlc3NCb2R5LCBwcm9jZXNzQm9keUVycm9yLFxuICAgICAgLy8gYW5kIGZldGNoUGFyYW1z4oCZcyB0YXNrIGRlc3RpbmF0aW9uLlxuICAgICAgcmV0dXJuIGZ1bGx5UmVhZEJvZHkocmVzcG9uc2UuYm9keSwgcHJvY2Vzc0JvZHksIHByb2Nlc3NCb2R5RXJyb3IpXG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNodHRwLWZldGNoXG5hc3luYyBmdW5jdGlvbiBodHRwRmV0Y2ggKGZldGNoUGFyYW1zKSB7XG4gIC8vIDEuIExldCByZXF1ZXN0IGJlIGZldGNoUGFyYW1z4oCZcyByZXF1ZXN0LlxuICBjb25zdCByZXF1ZXN0ID0gZmV0Y2hQYXJhbXMucmVxdWVzdFxuXG4gIC8vIDIuIExldCByZXNwb25zZSBiZSBudWxsLlxuICBsZXQgcmVzcG9uc2UgPSBudWxsXG5cbiAgLy8gMy4gTGV0IGFjdHVhbFJlc3BvbnNlIGJlIG51bGwuXG4gIGxldCBhY3R1YWxSZXNwb25zZSA9IG51bGxcblxuICAvLyA0LiBMZXQgdGltaW5nSW5mbyBiZSBmZXRjaFBhcmFtc+KAmXMgdGltaW5nIGluZm8uXG4gIGNvbnN0IHRpbWluZ0luZm8gPSBmZXRjaFBhcmFtcy50aW1pbmdJbmZvXG5cbiAgLy8gNS4gSWYgcmVxdWVzdOKAmXMgc2VydmljZS13b3JrZXJzIG1vZGUgaXMgXCJhbGxcIiwgdGhlbjpcbiAgaWYgKHJlcXVlc3Quc2VydmljZVdvcmtlcnMgPT09ICdhbGwnKSB7XG4gICAgLy8gVE9ET1xuICB9XG5cbiAgLy8gNi4gSWYgcmVzcG9uc2UgaXMgbnVsbCwgdGhlbjpcbiAgaWYgKHJlc3BvbnNlID09PSBudWxsKSB7XG4gICAgLy8gMS4gSWYgbWFrZUNPUlNQcmVmbGlnaHQgaXMgdHJ1ZSBhbmQgb25lIG9mIHRoZXNlIGNvbmRpdGlvbnMgaXMgdHJ1ZTpcbiAgICAvLyBUT0RPXG5cbiAgICAvLyAyLiBJZiByZXF1ZXN04oCZcyByZWRpcmVjdCBtb2RlIGlzIFwiZm9sbG93XCIsIHRoZW4gc2V0IHJlcXVlc3TigJlzXG4gICAgLy8gc2VydmljZS13b3JrZXJzIG1vZGUgdG8gXCJub25lXCIuXG4gICAgaWYgKHJlcXVlc3QucmVkaXJlY3QgPT09ICdmb2xsb3cnKSB7XG4gICAgICByZXF1ZXN0LnNlcnZpY2VXb3JrZXJzID0gJ25vbmUnXG4gICAgfVxuXG4gICAgLy8gMy4gU2V0IHJlc3BvbnNlIGFuZCBhY3R1YWxSZXNwb25zZSB0byB0aGUgcmVzdWx0IG9mIHJ1bm5pbmdcbiAgICAvLyBIVFRQLW5ldHdvcmstb3ItY2FjaGUgZmV0Y2ggZ2l2ZW4gZmV0Y2hQYXJhbXMuXG4gICAgYWN0dWFsUmVzcG9uc2UgPSByZXNwb25zZSA9IGF3YWl0IGh0dHBOZXR3b3JrT3JDYWNoZUZldGNoKGZldGNoUGFyYW1zKVxuXG4gICAgLy8gNC4gSWYgcmVxdWVzdOKAmXMgcmVzcG9uc2UgdGFpbnRpbmcgaXMgXCJjb3JzXCIgYW5kIGEgQ09SUyBjaGVja1xuICAgIC8vIGZvciByZXF1ZXN0IGFuZCByZXNwb25zZSByZXR1cm5zIGZhaWx1cmUsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgICBpZiAoXG4gICAgICByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdjb3JzJyAmJlxuICAgICAgY29yc0NoZWNrKHJlcXVlc3QsIHJlc3BvbnNlKSA9PT0gJ2ZhaWx1cmUnXG4gICAgKSB7XG4gICAgICByZXR1cm4gbWFrZU5ldHdvcmtFcnJvcignY29ycyBmYWlsdXJlJylcbiAgICB9XG5cbiAgICAvLyA1LiBJZiB0aGUgVEFPIGNoZWNrIGZvciByZXF1ZXN0IGFuZCByZXNwb25zZSByZXR1cm5zIGZhaWx1cmUsIHRoZW4gc2V0XG4gICAgLy8gcmVxdWVzdOKAmXMgdGltaW5nIGFsbG93IGZhaWxlZCBmbGFnLlxuICAgIGlmIChUQU9DaGVjayhyZXF1ZXN0LCByZXNwb25zZSkgPT09ICdmYWlsdXJlJykge1xuICAgICAgcmVxdWVzdC50aW1pbmdBbGxvd0ZhaWxlZCA9IHRydWVcbiAgICB9XG4gIH1cblxuICAvLyA3LiBJZiBlaXRoZXIgcmVxdWVzdOKAmXMgcmVzcG9uc2UgdGFpbnRpbmcgb3IgcmVzcG9uc2XigJlzIHR5cGVcbiAgLy8gaXMgXCJvcGFxdWVcIiwgYW5kIHRoZSBjcm9zcy1vcmlnaW4gcmVzb3VyY2UgcG9saWN5IGNoZWNrIHdpdGhcbiAgLy8gcmVxdWVzdOKAmXMgb3JpZ2luLCByZXF1ZXN04oCZcyBjbGllbnQsIHJlcXVlc3TigJlzIGRlc3RpbmF0aW9uLFxuICAvLyBhbmQgYWN0dWFsUmVzcG9uc2UgcmV0dXJucyBibG9ja2VkLCB0aGVuIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gIGlmIChcbiAgICAocmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnb3BhcXVlJyB8fCByZXNwb25zZS50eXBlID09PSAnb3BhcXVlJykgJiZcbiAgICBjcm9zc09yaWdpblJlc291cmNlUG9saWN5Q2hlY2soXG4gICAgICByZXF1ZXN0Lm9yaWdpbixcbiAgICAgIHJlcXVlc3QuY2xpZW50LFxuICAgICAgcmVxdWVzdC5kZXN0aW5hdGlvbixcbiAgICAgIGFjdHVhbFJlc3BvbnNlXG4gICAgKSA9PT0gJ2Jsb2NrZWQnXG4gICkge1xuICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdibG9ja2VkJylcbiAgfVxuXG4gIC8vIDguIElmIGFjdHVhbFJlc3BvbnNl4oCZcyBzdGF0dXMgaXMgYSByZWRpcmVjdCBzdGF0dXMsIHRoZW46XG4gIGlmIChyZWRpcmVjdFN0YXR1c1NldC5oYXMoYWN0dWFsUmVzcG9uc2Uuc3RhdHVzKSkge1xuICAgIC8vIDEuIElmIGFjdHVhbFJlc3BvbnNl4oCZcyBzdGF0dXMgaXMgbm90IDMwMywgcmVxdWVzdOKAmXMgYm9keSBpcyBub3QgbnVsbCxcbiAgICAvLyBhbmQgdGhlIGNvbm5lY3Rpb24gdXNlcyBIVFRQLzIsIHRoZW4gdXNlciBhZ2VudHMgbWF5LCBhbmQgYXJlIGV2ZW5cbiAgICAvLyBlbmNvdXJhZ2VkIHRvLCB0cmFuc21pdCBhbiBSU1RfU1RSRUFNIGZyYW1lLlxuICAgIC8vIFNlZSwgaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy9mZXRjaC9pc3N1ZXMvMTI4OFxuICAgIGlmIChyZXF1ZXN0LnJlZGlyZWN0ICE9PSAnbWFudWFsJykge1xuICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb25uZWN0aW9uLmRlc3Ryb3koKVxuICAgIH1cblxuICAgIC8vIDIuIFN3aXRjaCBvbiByZXF1ZXN04oCZcyByZWRpcmVjdCBtb2RlOlxuICAgIGlmIChyZXF1ZXN0LnJlZGlyZWN0ID09PSAnZXJyb3InKSB7XG4gICAgICAvLyBTZXQgcmVzcG9uc2UgdG8gYSBuZXR3b3JrIGVycm9yLlxuICAgICAgcmVzcG9uc2UgPSBtYWtlTmV0d29ya0Vycm9yKCd1bmV4cGVjdGVkIHJlZGlyZWN0JylcbiAgICB9IGVsc2UgaWYgKHJlcXVlc3QucmVkaXJlY3QgPT09ICdtYW51YWwnKSB7XG4gICAgICAvLyBTZXQgcmVzcG9uc2UgdG8gYW4gb3BhcXVlLXJlZGlyZWN0IGZpbHRlcmVkIHJlc3BvbnNlIHdob3NlIGludGVybmFsXG4gICAgICAvLyByZXNwb25zZSBpcyBhY3R1YWxSZXNwb25zZS5cbiAgICAgIC8vIE5PVEUoc3BlYyk6IE9uIHRoZSB3ZWIgdGhpcyB3b3VsZCByZXR1cm4gYW4gYG9wYXF1ZXJlZGlyZWN0YCByZXNwb25zZSxcbiAgICAgIC8vIGJ1dCB0aGF0IGRvZXNuJ3QgbWFrZSBzZW5zZSBzZXJ2ZXIgc2lkZS5cbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMTE5My5cbiAgICAgIHJlc3BvbnNlID0gYWN0dWFsUmVzcG9uc2VcbiAgICB9IGVsc2UgaWYgKHJlcXVlc3QucmVkaXJlY3QgPT09ICdmb2xsb3cnKSB7XG4gICAgICAvLyBTZXQgcmVzcG9uc2UgdG8gdGhlIHJlc3VsdCBvZiBydW5uaW5nIEhUVFAtcmVkaXJlY3QgZmV0Y2ggZ2l2ZW5cbiAgICAgIC8vIGZldGNoUGFyYW1zIGFuZCByZXNwb25zZS5cbiAgICAgIHJlc3BvbnNlID0gYXdhaXQgaHR0cFJlZGlyZWN0RmV0Y2goZmV0Y2hQYXJhbXMsIHJlc3BvbnNlKVxuICAgIH0gZWxzZSB7XG4gICAgICBhc3NlcnQoZmFsc2UpXG4gICAgfVxuICB9XG5cbiAgLy8gOS4gU2V0IHJlc3BvbnNl4oCZcyB0aW1pbmcgaW5mbyB0byB0aW1pbmdJbmZvLlxuICByZXNwb25zZS50aW1pbmdJbmZvID0gdGltaW5nSW5mb1xuXG4gIC8vIDEwLiBSZXR1cm4gcmVzcG9uc2UuXG4gIHJldHVybiByZXNwb25zZVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC1yZWRpcmVjdC1mZXRjaFxuZnVuY3Rpb24gaHR0cFJlZGlyZWN0RmV0Y2ggKGZldGNoUGFyYW1zLCByZXNwb25zZSkge1xuICAvLyAxLiBMZXQgcmVxdWVzdCBiZSBmZXRjaFBhcmFtc+KAmXMgcmVxdWVzdC5cbiAgY29uc3QgcmVxdWVzdCA9IGZldGNoUGFyYW1zLnJlcXVlc3RcblxuICAvLyAyLiBMZXQgYWN0dWFsUmVzcG9uc2UgYmUgcmVzcG9uc2UsIGlmIHJlc3BvbnNlIGlzIG5vdCBhIGZpbHRlcmVkIHJlc3BvbnNlLFxuICAvLyBhbmQgcmVzcG9uc2XigJlzIGludGVybmFsIHJlc3BvbnNlIG90aGVyd2lzZS5cbiAgY29uc3QgYWN0dWFsUmVzcG9uc2UgPSByZXNwb25zZS5pbnRlcm5hbFJlc3BvbnNlXG4gICAgPyByZXNwb25zZS5pbnRlcm5hbFJlc3BvbnNlXG4gICAgOiByZXNwb25zZVxuXG4gIC8vIDMuIExldCBsb2NhdGlvblVSTCBiZSBhY3R1YWxSZXNwb25zZeKAmXMgbG9jYXRpb24gVVJMIGdpdmVuIHJlcXVlc3TigJlzIGN1cnJlbnRcbiAgLy8gVVJM4oCZcyBmcmFnbWVudC5cbiAgbGV0IGxvY2F0aW9uVVJMXG5cbiAgdHJ5IHtcbiAgICBsb2NhdGlvblVSTCA9IHJlc3BvbnNlTG9jYXRpb25VUkwoXG4gICAgICBhY3R1YWxSZXNwb25zZSxcbiAgICAgIHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpLmhhc2hcbiAgICApXG5cbiAgICAvLyA0LiBJZiBsb2NhdGlvblVSTCBpcyBudWxsLCB0aGVuIHJldHVybiByZXNwb25zZS5cbiAgICBpZiAobG9jYXRpb25VUkwgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyA1LiBJZiBsb2NhdGlvblVSTCBpcyBmYWlsdXJlLCB0aGVuIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKGVycikpXG4gIH1cblxuICAvLyA2LiBJZiBsb2NhdGlvblVSTOKAmXMgc2NoZW1lIGlzIG5vdCBhbiBIVFRQKFMpIHNjaGVtZSwgdGhlbiByZXR1cm4gYSBuZXR3b3JrXG4gIC8vIGVycm9yLlxuICBpZiAoIXVybElzSHR0cEh0dHBzU2NoZW1lKGxvY2F0aW9uVVJMKSkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignVVJMIHNjaGVtZSBtdXN0IGJlIGEgSFRUUChTKSBzY2hlbWUnKSlcbiAgfVxuXG4gIC8vIDcuIElmIHJlcXVlc3TigJlzIHJlZGlyZWN0IGNvdW50IGlzIDIwLCB0aGVuIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gIGlmIChyZXF1ZXN0LnJlZGlyZWN0Q291bnQgPT09IDIwKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKCdyZWRpcmVjdCBjb3VudCBleGNlZWRlZCcpKVxuICB9XG5cbiAgLy8gOC4gSW5jcmVhc2UgcmVxdWVzdOKAmXMgcmVkaXJlY3QgY291bnQgYnkgMS5cbiAgcmVxdWVzdC5yZWRpcmVjdENvdW50ICs9IDFcblxuICAvLyA5LiBJZiByZXF1ZXN04oCZcyBtb2RlIGlzIFwiY29yc1wiLCBsb2NhdGlvblVSTCBpbmNsdWRlcyBjcmVkZW50aWFscywgYW5kXG4gIC8vIHJlcXVlc3TigJlzIG9yaWdpbiBpcyBub3Qgc2FtZSBvcmlnaW4gd2l0aCBsb2NhdGlvblVSTOKAmXMgb3JpZ2luLCB0aGVuIHJldHVyblxuICAvLyAgYSBuZXR3b3JrIGVycm9yLlxuICBpZiAoXG4gICAgcmVxdWVzdC5tb2RlID09PSAnY29ycycgJiZcbiAgICAobG9jYXRpb25VUkwudXNlcm5hbWUgfHwgbG9jYXRpb25VUkwucGFzc3dvcmQpICYmXG4gICAgIXNhbWVPcmlnaW4ocmVxdWVzdCwgbG9jYXRpb25VUkwpXG4gICkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignY3Jvc3Mgb3JpZ2luIG5vdCBhbGxvd2VkIGZvciByZXF1ZXN0IG1vZGUgXCJjb3JzXCInKSlcbiAgfVxuXG4gIC8vIDEwLiBJZiByZXF1ZXN04oCZcyByZXNwb25zZSB0YWludGluZyBpcyBcImNvcnNcIiBhbmQgbG9jYXRpb25VUkwgaW5jbHVkZXNcbiAgLy8gY3JlZGVudGlhbHMsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgaWYgKFxuICAgIHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ2NvcnMnICYmXG4gICAgKGxvY2F0aW9uVVJMLnVzZXJuYW1lIHx8IGxvY2F0aW9uVVJMLnBhc3N3b3JkKVxuICApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoXG4gICAgICAnVVJMIGNhbm5vdCBjb250YWluIGNyZWRlbnRpYWxzIGZvciByZXF1ZXN0IG1vZGUgXCJjb3JzXCInXG4gICAgKSlcbiAgfVxuXG4gIC8vIDExLiBJZiBhY3R1YWxSZXNwb25zZeKAmXMgc3RhdHVzIGlzIG5vdCAzMDMsIHJlcXVlc3TigJlzIGJvZHkgaXMgbm9uLW51bGwsXG4gIC8vIGFuZCByZXF1ZXN04oCZcyBib2R54oCZcyBzb3VyY2UgaXMgbnVsbCwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICBpZiAoXG4gICAgYWN0dWFsUmVzcG9uc2Uuc3RhdHVzICE9PSAzMDMgJiZcbiAgICByZXF1ZXN0LmJvZHkgIT0gbnVsbCAmJlxuICAgIHJlcXVlc3QuYm9keS5zb3VyY2UgPT0gbnVsbFxuICApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoKSlcbiAgfVxuXG4gIC8vIDEyLiBJZiBvbmUgb2YgdGhlIGZvbGxvd2luZyBpcyB0cnVlXG4gIC8vIC0gYWN0dWFsUmVzcG9uc2XigJlzIHN0YXR1cyBpcyAzMDEgb3IgMzAyIGFuZCByZXF1ZXN04oCZcyBtZXRob2QgaXMgYFBPU1RgXG4gIC8vIC0gYWN0dWFsUmVzcG9uc2XigJlzIHN0YXR1cyBpcyAzMDMgYW5kIHJlcXVlc3TigJlzIG1ldGhvZCBpcyBub3QgYEdFVGAgb3IgYEhFQURgXG4gIGlmIChcbiAgICAoWzMwMSwgMzAyXS5pbmNsdWRlcyhhY3R1YWxSZXNwb25zZS5zdGF0dXMpICYmIHJlcXVlc3QubWV0aG9kID09PSAnUE9TVCcpIHx8XG4gICAgKGFjdHVhbFJlc3BvbnNlLnN0YXR1cyA9PT0gMzAzICYmXG4gICAgICAhR0VUX09SX0hFQUQuaW5jbHVkZXMocmVxdWVzdC5tZXRob2QpKVxuICApIHtcbiAgICAvLyB0aGVuOlxuICAgIC8vIDEuIFNldCByZXF1ZXN04oCZcyBtZXRob2QgdG8gYEdFVGAgYW5kIHJlcXVlc3TigJlzIGJvZHkgdG8gbnVsbC5cbiAgICByZXF1ZXN0Lm1ldGhvZCA9ICdHRVQnXG4gICAgcmVxdWVzdC5ib2R5ID0gbnVsbFxuXG4gICAgLy8gMi4gRm9yIGVhY2ggaGVhZGVyTmFtZSBvZiByZXF1ZXN0LWJvZHktaGVhZGVyIG5hbWUsIGRlbGV0ZSBoZWFkZXJOYW1lIGZyb21cbiAgICAvLyByZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cbiAgICBmb3IgKGNvbnN0IGhlYWRlck5hbWUgb2YgcmVxdWVzdEJvZHlIZWFkZXIpIHtcbiAgICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QuZGVsZXRlKGhlYWRlck5hbWUpXG4gICAgfVxuICB9XG5cbiAgLy8gMTMuIElmIHJlcXVlc3TigJlzIGN1cnJlbnQgVVJM4oCZcyBvcmlnaW4gaXMgbm90IHNhbWUgb3JpZ2luIHdpdGggbG9jYXRpb25VUkzigJlzXG4gIC8vICAgICBvcmlnaW4sIHRoZW4gZm9yIGVhY2ggaGVhZGVyTmFtZSBvZiBDT1JTIG5vbi13aWxkY2FyZCByZXF1ZXN0LWhlYWRlciBuYW1lLFxuICAvLyAgICAgZGVsZXRlIGhlYWRlck5hbWUgZnJvbSByZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cbiAgaWYgKCFzYW1lT3JpZ2luKHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpLCBsb2NhdGlvblVSTCkpIHtcbiAgICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29ycy1ub24td2lsZGNhcmQtcmVxdWVzdC1oZWFkZXItbmFtZVxuICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QuZGVsZXRlKCdhdXRob3JpemF0aW9uJylcblxuICAgIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNhdXRoZW50aWNhdGlvbi1lbnRyaWVzXG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5kZWxldGUoJ3Byb3h5LWF1dGhvcml6YXRpb24nLCB0cnVlKVxuXG4gICAgLy8gXCJDb29raWVcIiBhbmQgXCJIb3N0XCIgYXJlIGZvcmJpZGRlbiByZXF1ZXN0LWhlYWRlcnMsIHdoaWNoIHVuZGljaSBkb2Vzbid0IGltcGxlbWVudC5cbiAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmRlbGV0ZSgnY29va2llJylcbiAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmRlbGV0ZSgnaG9zdCcpXG4gIH1cblxuICAvLyAxNC4gSWYgcmVxdWVzdOKAmXMgYm9keSBpcyBub24tbnVsbCwgdGhlbiBzZXQgcmVxdWVzdOKAmXMgYm9keSB0byB0aGUgZmlyc3QgcmV0dXJuXG4gIC8vIHZhbHVlIG9mIHNhZmVseSBleHRyYWN0aW5nIHJlcXVlc3TigJlzIGJvZHnigJlzIHNvdXJjZS5cbiAgaWYgKHJlcXVlc3QuYm9keSAhPSBudWxsKSB7XG4gICAgYXNzZXJ0KHJlcXVlc3QuYm9keS5zb3VyY2UgIT0gbnVsbClcbiAgICByZXF1ZXN0LmJvZHkgPSBzYWZlbHlFeHRyYWN0Qm9keShyZXF1ZXN0LmJvZHkuc291cmNlKVswXVxuICB9XG5cbiAgLy8gMTUuIExldCB0aW1pbmdJbmZvIGJlIGZldGNoUGFyYW1z4oCZcyB0aW1pbmcgaW5mby5cbiAgY29uc3QgdGltaW5nSW5mbyA9IGZldGNoUGFyYW1zLnRpbWluZ0luZm9cblxuICAvLyAxNi4gU2V0IHRpbWluZ0luZm/igJlzIHJlZGlyZWN0IGVuZCB0aW1lIGFuZCBwb3N0LXJlZGlyZWN0IHN0YXJ0IHRpbWUgdG8gdGhlXG4gIC8vIGNvYXJzZW5lZCBzaGFyZWQgY3VycmVudCB0aW1lIGdpdmVuIGZldGNoUGFyYW1z4oCZcyBjcm9zcy1vcmlnaW4gaXNvbGF0ZWRcbiAgLy8gY2FwYWJpbGl0eS5cbiAgdGltaW5nSW5mby5yZWRpcmVjdEVuZFRpbWUgPSB0aW1pbmdJbmZvLnBvc3RSZWRpcmVjdFN0YXJ0VGltZSA9XG4gICAgY29hcnNlbmVkU2hhcmVkQ3VycmVudFRpbWUoZmV0Y2hQYXJhbXMuY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkpXG5cbiAgLy8gMTcuIElmIHRpbWluZ0luZm/igJlzIHJlZGlyZWN0IHN0YXJ0IHRpbWUgaXMgMCwgdGhlbiBzZXQgdGltaW5nSW5mb+KAmXNcbiAgLy8gIHJlZGlyZWN0IHN0YXJ0IHRpbWUgdG8gdGltaW5nSW5mb+KAmXMgc3RhcnQgdGltZS5cbiAgaWYgKHRpbWluZ0luZm8ucmVkaXJlY3RTdGFydFRpbWUgPT09IDApIHtcbiAgICB0aW1pbmdJbmZvLnJlZGlyZWN0U3RhcnRUaW1lID0gdGltaW5nSW5mby5zdGFydFRpbWVcbiAgfVxuXG4gIC8vIDE4LiBBcHBlbmQgbG9jYXRpb25VUkwgdG8gcmVxdWVzdOKAmXMgVVJMIGxpc3QuXG4gIHJlcXVlc3QudXJsTGlzdC5wdXNoKGxvY2F0aW9uVVJMKVxuXG4gIC8vIDE5LiBJbnZva2Ugc2V0IHJlcXVlc3TigJlzIHJlZmVycmVyIHBvbGljeSBvbiByZWRpcmVjdCBvbiByZXF1ZXN0IGFuZFxuICAvLyBhY3R1YWxSZXNwb25zZS5cbiAgc2V0UmVxdWVzdFJlZmVycmVyUG9saWN5T25SZWRpcmVjdChyZXF1ZXN0LCBhY3R1YWxSZXNwb25zZSlcblxuICAvLyAyMC4gUmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZyBtYWluIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zIGFuZCB0cnVlLlxuICByZXR1cm4gbWFpbkZldGNoKGZldGNoUGFyYW1zLCB0cnVlKVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC1uZXR3b3JrLW9yLWNhY2hlLWZldGNoXG5hc3luYyBmdW5jdGlvbiBodHRwTmV0d29ya09yQ2FjaGVGZXRjaCAoXG4gIGZldGNoUGFyYW1zLFxuICBpc0F1dGhlbnRpY2F0aW9uRmV0Y2ggPSBmYWxzZSxcbiAgaXNOZXdDb25uZWN0aW9uRmV0Y2ggPSBmYWxzZVxuKSB7XG4gIC8vIDEuIExldCByZXF1ZXN0IGJlIGZldGNoUGFyYW1z4oCZcyByZXF1ZXN0LlxuICBjb25zdCByZXF1ZXN0ID0gZmV0Y2hQYXJhbXMucmVxdWVzdFxuXG4gIC8vIDIuIExldCBodHRwRmV0Y2hQYXJhbXMgYmUgbnVsbC5cbiAgbGV0IGh0dHBGZXRjaFBhcmFtcyA9IG51bGxcblxuICAvLyAzLiBMZXQgaHR0cFJlcXVlc3QgYmUgbnVsbC5cbiAgbGV0IGh0dHBSZXF1ZXN0ID0gbnVsbFxuXG4gIC8vIDQuIExldCByZXNwb25zZSBiZSBudWxsLlxuICBsZXQgcmVzcG9uc2UgPSBudWxsXG5cbiAgLy8gNS4gTGV0IHN0b3JlZFJlc3BvbnNlIGJlIG51bGwuXG4gIC8vIFRPRE86IGNhY2hlXG5cbiAgLy8gNi4gTGV0IGh0dHBDYWNoZSBiZSBudWxsLlxuICBjb25zdCBodHRwQ2FjaGUgPSBudWxsXG5cbiAgLy8gNy4gTGV0IHRoZSByZXZhbGlkYXRpbmdGbGFnIGJlIHVuc2V0LlxuICBjb25zdCByZXZhbGlkYXRpbmdGbGFnID0gZmFsc2VcblxuICAvLyA4LiBSdW4gdGhlc2Ugc3RlcHMsIGJ1dCBhYm9ydCB3aGVuIHRoZSBvbmdvaW5nIGZldGNoIGlzIHRlcm1pbmF0ZWQ6XG5cbiAgLy8gICAgMS4gSWYgcmVxdWVzdOKAmXMgd2luZG93IGlzIFwibm8td2luZG93XCIgYW5kIHJlcXVlc3TigJlzIHJlZGlyZWN0IG1vZGUgaXNcbiAgLy8gICAgXCJlcnJvclwiLCB0aGVuIHNldCBodHRwRmV0Y2hQYXJhbXMgdG8gZmV0Y2hQYXJhbXMgYW5kIGh0dHBSZXF1ZXN0IHRvXG4gIC8vICAgIHJlcXVlc3QuXG4gIGlmIChyZXF1ZXN0LndpbmRvdyA9PT0gJ25vLXdpbmRvdycgJiYgcmVxdWVzdC5yZWRpcmVjdCA9PT0gJ2Vycm9yJykge1xuICAgIGh0dHBGZXRjaFBhcmFtcyA9IGZldGNoUGFyYW1zXG4gICAgaHR0cFJlcXVlc3QgPSByZXF1ZXN0XG4gIH0gZWxzZSB7XG4gICAgLy8gT3RoZXJ3aXNlOlxuXG4gICAgLy8gMS4gU2V0IGh0dHBSZXF1ZXN0IHRvIGEgY2xvbmUgb2YgcmVxdWVzdC5cbiAgICBodHRwUmVxdWVzdCA9IG1ha2VSZXF1ZXN0KHJlcXVlc3QpXG5cbiAgICAvLyAyLiBTZXQgaHR0cEZldGNoUGFyYW1zIHRvIGEgY29weSBvZiBmZXRjaFBhcmFtcy5cbiAgICBodHRwRmV0Y2hQYXJhbXMgPSB7IC4uLmZldGNoUGFyYW1zIH1cblxuICAgIC8vIDMuIFNldCBodHRwRmV0Y2hQYXJhbXPigJlzIHJlcXVlc3QgdG8gaHR0cFJlcXVlc3QuXG4gICAgaHR0cEZldGNoUGFyYW1zLnJlcXVlc3QgPSBodHRwUmVxdWVzdFxuICB9XG5cbiAgLy8gICAgMy4gTGV0IGluY2x1ZGVDcmVkZW50aWFscyBiZSB0cnVlIGlmIG9uZSBvZlxuICBjb25zdCBpbmNsdWRlQ3JlZGVudGlhbHMgPVxuICAgIHJlcXVlc3QuY3JlZGVudGlhbHMgPT09ICdpbmNsdWRlJyB8fFxuICAgIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnc2FtZS1vcmlnaW4nICYmXG4gICAgICByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdiYXNpYycpXG5cbiAgLy8gICAgNC4gTGV0IGNvbnRlbnRMZW5ndGggYmUgaHR0cFJlcXVlc3TigJlzIGJvZHnigJlzIGxlbmd0aCwgaWYgaHR0cFJlcXVlc3TigJlzXG4gIC8vICAgIGJvZHkgaXMgbm9uLW51bGw7IG90aGVyd2lzZSBudWxsLlxuICBjb25zdCBjb250ZW50TGVuZ3RoID0gaHR0cFJlcXVlc3QuYm9keSA/IGh0dHBSZXF1ZXN0LmJvZHkubGVuZ3RoIDogbnVsbFxuXG4gIC8vICAgIDUuIExldCBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgYmUgbnVsbC5cbiAgbGV0IGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSA9IG51bGxcblxuICAvLyAgICA2LiBJZiBodHRwUmVxdWVzdOKAmXMgYm9keSBpcyBudWxsIGFuZCBodHRwUmVxdWVzdOKAmXMgbWV0aG9kIGlzIGBQT1NUYCBvclxuICAvLyAgICBgUFVUYCwgdGhlbiBzZXQgY29udGVudExlbmd0aEhlYWRlclZhbHVlIHRvIGAwYC5cbiAgaWYgKFxuICAgIGh0dHBSZXF1ZXN0LmJvZHkgPT0gbnVsbCAmJlxuICAgIFsnUE9TVCcsICdQVVQnXS5pbmNsdWRlcyhodHRwUmVxdWVzdC5tZXRob2QpXG4gICkge1xuICAgIGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSA9ICcwJ1xuICB9XG5cbiAgLy8gICAgNy4gSWYgY29udGVudExlbmd0aCBpcyBub24tbnVsbCwgdGhlbiBzZXQgY29udGVudExlbmd0aEhlYWRlclZhbHVlIHRvXG4gIC8vICAgIGNvbnRlbnRMZW5ndGgsIHNlcmlhbGl6ZWQgYW5kIGlzb21vcnBoaWMgZW5jb2RlZC5cbiAgaWYgKGNvbnRlbnRMZW5ndGggIT0gbnVsbCkge1xuICAgIGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSA9IGlzb21vcnBoaWNFbmNvZGUoYCR7Y29udGVudExlbmd0aH1gKVxuICB9XG5cbiAgLy8gICAgOC4gSWYgY29udGVudExlbmd0aEhlYWRlclZhbHVlIGlzIG5vbi1udWxsLCB0aGVuIGFwcGVuZFxuICAvLyAgICBgQ29udGVudC1MZW5ndGhgL2NvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSB0byBodHRwUmVxdWVzdOKAmXMgaGVhZGVyXG4gIC8vICAgIGxpc3QuXG4gIGlmIChjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgIT0gbnVsbCkge1xuICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnY29udGVudC1sZW5ndGgnLCBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUpXG4gIH1cblxuICAvLyAgICA5LiBJZiBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgaXMgbm9uLW51bGwsIHRoZW4gYXBwZW5kIChgQ29udGVudC1MZW5ndGhgLFxuICAvLyAgICBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUpIHRvIGh0dHBSZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cblxuICAvLyAgICAxMC4gSWYgY29udGVudExlbmd0aCBpcyBub24tbnVsbCBhbmQgaHR0cFJlcXVlc3TigJlzIGtlZXBhbGl2ZSBpcyB0cnVlLFxuICAvLyAgICB0aGVuOlxuICBpZiAoY29udGVudExlbmd0aCAhPSBudWxsICYmIGh0dHBSZXF1ZXN0LmtlZXBhbGl2ZSkge1xuICAgIC8vIE5PVEU6IGtlZXBhbGl2ZSBpcyBhIG5vb3Agb3V0c2lkZSBvZiBicm93c2VyIGNvbnRleHQuXG4gIH1cblxuICAvLyAgICAxMS4gSWYgaHR0cFJlcXVlc3TigJlzIHJlZmVycmVyIGlzIGEgVVJMLCB0aGVuIGFwcGVuZFxuICAvLyAgICBgUmVmZXJlcmAvaHR0cFJlcXVlc3TigJlzIHJlZmVycmVyLCBzZXJpYWxpemVkIGFuZCBpc29tb3JwaGljIGVuY29kZWQsXG4gIC8vICAgICB0byBodHRwUmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QuXG4gIGlmIChodHRwUmVxdWVzdC5yZWZlcnJlciBpbnN0YW5jZW9mIFVSTCkge1xuICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgncmVmZXJlcicsIGlzb21vcnBoaWNFbmNvZGUoaHR0cFJlcXVlc3QucmVmZXJyZXIuaHJlZikpXG4gIH1cblxuICAvLyAgICAxMi4gQXBwZW5kIGEgcmVxdWVzdCBgT3JpZ2luYCBoZWFkZXIgZm9yIGh0dHBSZXF1ZXN0LlxuICBhcHBlbmRSZXF1ZXN0T3JpZ2luSGVhZGVyKGh0dHBSZXF1ZXN0KVxuXG4gIC8vICAgIDEzLiBBcHBlbmQgdGhlIEZldGNoIG1ldGFkYXRhIGhlYWRlcnMgZm9yIGh0dHBSZXF1ZXN0LiBbRkVUQ0gtTUVUQURBVEFdXG4gIGFwcGVuZEZldGNoTWV0YWRhdGEoaHR0cFJlcXVlc3QpXG5cbiAgLy8gICAgMTQuIElmIGh0dHBSZXF1ZXN04oCZcyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluIGBVc2VyLUFnZW50YCwgdGhlblxuICAvLyAgICB1c2VyIGFnZW50cyBzaG91bGQgYXBwZW5kIGBVc2VyLUFnZW50YC9kZWZhdWx0IGBVc2VyLUFnZW50YCB2YWx1ZSB0b1xuICAvLyAgICBodHRwUmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QuXG4gIGlmICghaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ3VzZXItYWdlbnQnKSkge1xuICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgndXNlci1hZ2VudCcsIHR5cGVvZiBlc2J1aWxkRGV0ZWN0aW9uID09PSAndW5kZWZpbmVkJyA/ICd1bmRpY2knIDogJ25vZGUnKVxuICB9XG5cbiAgLy8gICAgMTUuIElmIGh0dHBSZXF1ZXN04oCZcyBjYWNoZSBtb2RlIGlzIFwiZGVmYXVsdFwiIGFuZCBodHRwUmVxdWVzdOKAmXMgaGVhZGVyXG4gIC8vICAgIGxpc3QgY29udGFpbnMgYElmLU1vZGlmaWVkLVNpbmNlYCwgYElmLU5vbmUtTWF0Y2hgLFxuICAvLyAgICBgSWYtVW5tb2RpZmllZC1TaW5jZWAsIGBJZi1NYXRjaGAsIG9yIGBJZi1SYW5nZWAsIHRoZW4gc2V0XG4gIC8vICAgIGh0dHBSZXF1ZXN04oCZcyBjYWNoZSBtb2RlIHRvIFwibm8tc3RvcmVcIi5cbiAgaWYgKFxuICAgIGh0dHBSZXF1ZXN0LmNhY2hlID09PSAnZGVmYXVsdCcgJiZcbiAgICAoaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2lmLW1vZGlmaWVkLXNpbmNlJykgfHxcbiAgICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdpZi1ub25lLW1hdGNoJykgfHxcbiAgICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdpZi11bm1vZGlmaWVkLXNpbmNlJykgfHxcbiAgICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdpZi1tYXRjaCcpIHx8XG4gICAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygnaWYtcmFuZ2UnKSlcbiAgKSB7XG4gICAgaHR0cFJlcXVlc3QuY2FjaGUgPSAnbm8tc3RvcmUnXG4gIH1cblxuICAvLyAgICAxNi4gSWYgaHR0cFJlcXVlc3TigJlzIGNhY2hlIG1vZGUgaXMgXCJuby1jYWNoZVwiLCBodHRwUmVxdWVzdOKAmXMgcHJldmVudFxuICAvLyAgICBuby1jYWNoZSBjYWNoZS1jb250cm9sIGhlYWRlciBtb2RpZmljYXRpb24gZmxhZyBpcyB1bnNldCwgYW5kXG4gIC8vICAgIGh0dHBSZXF1ZXN04oCZcyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluIGBDYWNoZS1Db250cm9sYCwgdGhlbiBhcHBlbmRcbiAgLy8gICAgYENhY2hlLUNvbnRyb2xgL2BtYXgtYWdlPTBgIHRvIGh0dHBSZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cbiAgaWYgKFxuICAgIGh0dHBSZXF1ZXN0LmNhY2hlID09PSAnbm8tY2FjaGUnICYmXG4gICAgIWh0dHBSZXF1ZXN0LnByZXZlbnROb0NhY2hlQ2FjaGVDb250cm9sSGVhZGVyTW9kaWZpY2F0aW9uICYmXG4gICAgIWh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdjYWNoZS1jb250cm9sJylcbiAgKSB7XG4gICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdjYWNoZS1jb250cm9sJywgJ21heC1hZ2U9MCcpXG4gIH1cblxuICAvLyAgICAxNy4gSWYgaHR0cFJlcXVlc3TigJlzIGNhY2hlIG1vZGUgaXMgXCJuby1zdG9yZVwiIG9yIFwicmVsb2FkXCIsIHRoZW46XG4gIGlmIChodHRwUmVxdWVzdC5jYWNoZSA9PT0gJ25vLXN0b3JlJyB8fCBodHRwUmVxdWVzdC5jYWNoZSA9PT0gJ3JlbG9hZCcpIHtcbiAgICAvLyAxLiBJZiBodHRwUmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgUHJhZ21hYCwgdGhlbiBhcHBlbmRcbiAgICAvLyBgUHJhZ21hYC9gbm8tY2FjaGVgIHRvIGh0dHBSZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cbiAgICBpZiAoIWh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdwcmFnbWEnKSkge1xuICAgICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdwcmFnbWEnLCAnbm8tY2FjaGUnKVxuICAgIH1cblxuICAgIC8vIDIuIElmIGh0dHBSZXF1ZXN04oCZcyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluIGBDYWNoZS1Db250cm9sYCxcbiAgICAvLyB0aGVuIGFwcGVuZCBgQ2FjaGUtQ29udHJvbGAvYG5vLWNhY2hlYCB0byBodHRwUmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QuXG4gICAgaWYgKCFodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygnY2FjaGUtY29udHJvbCcpKSB7XG4gICAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ2NhY2hlLWNvbnRyb2wnLCAnbm8tY2FjaGUnKVxuICAgIH1cbiAgfVxuXG4gIC8vICAgIDE4LiBJZiBodHRwUmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QgY29udGFpbnMgYFJhbmdlYCwgdGhlbiBhcHBlbmRcbiAgLy8gICAgYEFjY2VwdC1FbmNvZGluZ2AvYGlkZW50aXR5YCB0byBodHRwUmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QuXG4gIGlmIChodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygncmFuZ2UnKSkge1xuICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnYWNjZXB0LWVuY29kaW5nJywgJ2lkZW50aXR5JylcbiAgfVxuXG4gIC8vICAgIDE5LiBNb2RpZnkgaHR0cFJlcXVlc3TigJlzIGhlYWRlciBsaXN0IHBlciBIVFRQLiBEbyBub3QgYXBwZW5kIGEgZ2l2ZW5cbiAgLy8gICAgaGVhZGVyIGlmIGh0dHBSZXF1ZXN04oCZcyBoZWFkZXIgbGlzdCBjb250YWlucyB0aGF0IGhlYWRlcuKAmXMgbmFtZS5cbiAgLy8gICAgVE9ETzogaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy9mZXRjaC9pc3N1ZXMvMTI4NSNpc3N1ZWNvbW1lbnQtODk2NTYwMTI5XG4gIGlmICghaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2FjY2VwdC1lbmNvZGluZycpKSB7XG4gICAgaWYgKHVybEhhc0h0dHBzU2NoZW1lKHJlcXVlc3RDdXJyZW50VVJMKGh0dHBSZXF1ZXN0KSkpIHtcbiAgICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnYWNjZXB0LWVuY29kaW5nJywgJ2JyLCBnemlwLCBkZWZsYXRlJylcbiAgICB9IGVsc2Uge1xuICAgICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdhY2NlcHQtZW5jb2RpbmcnLCAnZ3ppcCwgZGVmbGF0ZScpXG4gICAgfVxuICB9XG5cbiAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuZGVsZXRlKCdob3N0JylcblxuICAvLyAgICAyMC4gSWYgaW5jbHVkZUNyZWRlbnRpYWxzIGlzIHRydWUsIHRoZW46XG4gIGlmIChpbmNsdWRlQ3JlZGVudGlhbHMpIHtcbiAgICAvLyAxLiBJZiB0aGUgdXNlciBhZ2VudCBpcyBub3QgY29uZmlndXJlZCB0byBibG9jayBjb29raWVzIGZvciBodHRwUmVxdWVzdFxuICAgIC8vIChzZWUgc2VjdGlvbiA3IG9mIFtDT09LSUVTXSksIHRoZW46XG4gICAgLy8gVE9ETzogY3JlZGVudGlhbHNcbiAgICAvLyAyLiBJZiBodHRwUmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgQXV0aG9yaXphdGlvbmAsIHRoZW46XG4gICAgLy8gVE9ETzogY3JlZGVudGlhbHNcbiAgfVxuXG4gIC8vICAgIDIxLiBJZiB0aGVyZeKAmXMgYSBwcm94eS1hdXRoZW50aWNhdGlvbiBlbnRyeSwgdXNlIGl0IGFzIGFwcHJvcHJpYXRlLlxuICAvLyAgICBUT0RPOiBwcm94eS1hdXRoZW50aWNhdGlvblxuXG4gIC8vICAgIDIyLiBTZXQgaHR0cENhY2hlIHRvIHRoZSByZXN1bHQgb2YgZGV0ZXJtaW5pbmcgdGhlIEhUVFAgY2FjaGVcbiAgLy8gICAgcGFydGl0aW9uLCBnaXZlbiBodHRwUmVxdWVzdC5cbiAgLy8gICAgVE9ETzogY2FjaGVcblxuICAvLyAgICAyMy4gSWYgaHR0cENhY2hlIGlzIG51bGwsIHRoZW4gc2V0IGh0dHBSZXF1ZXN04oCZcyBjYWNoZSBtb2RlIHRvXG4gIC8vICAgIFwibm8tc3RvcmVcIi5cbiAgaWYgKGh0dHBDYWNoZSA9PSBudWxsKSB7XG4gICAgaHR0cFJlcXVlc3QuY2FjaGUgPSAnbm8tc3RvcmUnXG4gIH1cblxuICAvLyAgICAyNC4gSWYgaHR0cFJlcXVlc3TigJlzIGNhY2hlIG1vZGUgaXMgbmVpdGhlciBcIm5vLXN0b3JlXCIgbm9yIFwicmVsb2FkXCIsXG4gIC8vICAgIHRoZW46XG4gIGlmIChodHRwUmVxdWVzdC5tb2RlICE9PSAnbm8tc3RvcmUnICYmIGh0dHBSZXF1ZXN0Lm1vZGUgIT09ICdyZWxvYWQnKSB7XG4gICAgLy8gVE9ETzogY2FjaGVcbiAgfVxuXG4gIC8vIDkuIElmIGFib3J0ZWQsIHRoZW4gcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSBuZXR3b3JrIGVycm9yIGZvciBmZXRjaFBhcmFtcy5cbiAgLy8gVE9ET1xuXG4gIC8vIDEwLiBJZiByZXNwb25zZSBpcyBudWxsLCB0aGVuOlxuICBpZiAocmVzcG9uc2UgPT0gbnVsbCkge1xuICAgIC8vIDEuIElmIGh0dHBSZXF1ZXN04oCZcyBjYWNoZSBtb2RlIGlzIFwib25seS1pZi1jYWNoZWRcIiwgdGhlbiByZXR1cm4gYVxuICAgIC8vIG5ldHdvcmsgZXJyb3IuXG4gICAgaWYgKGh0dHBSZXF1ZXN0Lm1vZGUgPT09ICdvbmx5LWlmLWNhY2hlZCcpIHtcbiAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdvbmx5IGlmIGNhY2hlZCcpXG4gICAgfVxuXG4gICAgLy8gMi4gTGV0IGZvcndhcmRSZXNwb25zZSBiZSB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgSFRUUC1uZXR3b3JrIGZldGNoXG4gICAgLy8gZ2l2ZW4gaHR0cEZldGNoUGFyYW1zLCBpbmNsdWRlQ3JlZGVudGlhbHMsIGFuZCBpc05ld0Nvbm5lY3Rpb25GZXRjaC5cbiAgICBjb25zdCBmb3J3YXJkUmVzcG9uc2UgPSBhd2FpdCBodHRwTmV0d29ya0ZldGNoKFxuICAgICAgaHR0cEZldGNoUGFyYW1zLFxuICAgICAgaW5jbHVkZUNyZWRlbnRpYWxzLFxuICAgICAgaXNOZXdDb25uZWN0aW9uRmV0Y2hcbiAgICApXG5cbiAgICAvLyAzLiBJZiBodHRwUmVxdWVzdOKAmXMgbWV0aG9kIGlzIHVuc2FmZSBhbmQgZm9yd2FyZFJlc3BvbnNl4oCZcyBzdGF0dXMgaXNcbiAgICAvLyBpbiB0aGUgcmFuZ2UgMjAwIHRvIDM5OSwgaW5jbHVzaXZlLCBpbnZhbGlkYXRlIGFwcHJvcHJpYXRlIHN0b3JlZFxuICAgIC8vIHJlc3BvbnNlcyBpbiBodHRwQ2FjaGUsIGFzIHBlciB0aGUgXCJJbnZhbGlkYXRpb25cIiBjaGFwdGVyIG9mIEhUVFBcbiAgICAvLyBDYWNoaW5nLCBhbmQgc2V0IHN0b3JlZFJlc3BvbnNlIHRvIG51bGwuIFtIVFRQLUNBQ0hJTkddXG4gICAgaWYgKFxuICAgICAgIXNhZmVNZXRob2RzU2V0LmhhcyhodHRwUmVxdWVzdC5tZXRob2QpICYmXG4gICAgICBmb3J3YXJkUmVzcG9uc2Uuc3RhdHVzID49IDIwMCAmJlxuICAgICAgZm9yd2FyZFJlc3BvbnNlLnN0YXR1cyA8PSAzOTlcbiAgICApIHtcbiAgICAgIC8vIFRPRE86IGNhY2hlXG4gICAgfVxuXG4gICAgLy8gNC4gSWYgdGhlIHJldmFsaWRhdGluZ0ZsYWcgaXMgc2V0IGFuZCBmb3J3YXJkUmVzcG9uc2XigJlzIHN0YXR1cyBpcyAzMDQsXG4gICAgLy8gdGhlbjpcbiAgICBpZiAocmV2YWxpZGF0aW5nRmxhZyAmJiBmb3J3YXJkUmVzcG9uc2Uuc3RhdHVzID09PSAzMDQpIHtcbiAgICAgIC8vIFRPRE86IGNhY2hlXG4gICAgfVxuXG4gICAgLy8gNS4gSWYgcmVzcG9uc2UgaXMgbnVsbCwgdGhlbjpcbiAgICBpZiAocmVzcG9uc2UgPT0gbnVsbCkge1xuICAgICAgLy8gMS4gU2V0IHJlc3BvbnNlIHRvIGZvcndhcmRSZXNwb25zZS5cbiAgICAgIHJlc3BvbnNlID0gZm9yd2FyZFJlc3BvbnNlXG5cbiAgICAgIC8vIDIuIFN0b3JlIGh0dHBSZXF1ZXN0IGFuZCBmb3J3YXJkUmVzcG9uc2UgaW4gaHR0cENhY2hlLCBhcyBwZXIgdGhlXG4gICAgICAvLyBcIlN0b3JpbmcgUmVzcG9uc2VzIGluIENhY2hlc1wiIGNoYXB0ZXIgb2YgSFRUUCBDYWNoaW5nLiBbSFRUUC1DQUNISU5HXVxuICAgICAgLy8gVE9ETzogY2FjaGVcbiAgICB9XG4gIH1cblxuICAvLyAxMS4gU2V0IHJlc3BvbnNl4oCZcyBVUkwgbGlzdCB0byBhIGNsb25lIG9mIGh0dHBSZXF1ZXN04oCZcyBVUkwgbGlzdC5cbiAgcmVzcG9uc2UudXJsTGlzdCA9IFsuLi5odHRwUmVxdWVzdC51cmxMaXN0XVxuXG4gIC8vIDEyLiBJZiBodHRwUmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QgY29udGFpbnMgYFJhbmdlYCwgdGhlbiBzZXQgcmVzcG9uc2XigJlzXG4gIC8vIHJhbmdlLXJlcXVlc3RlZCBmbGFnLlxuICBpZiAoaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ3JhbmdlJykpIHtcbiAgICByZXNwb25zZS5yYW5nZVJlcXVlc3RlZCA9IHRydWVcbiAgfVxuXG4gIC8vIDEzLiBTZXQgcmVzcG9uc2XigJlzIHJlcXVlc3QtaW5jbHVkZXMtY3JlZGVudGlhbHMgdG8gaW5jbHVkZUNyZWRlbnRpYWxzLlxuICByZXNwb25zZS5yZXF1ZXN0SW5jbHVkZXNDcmVkZW50aWFscyA9IGluY2x1ZGVDcmVkZW50aWFsc1xuXG4gIC8vIDE0LiBJZiByZXNwb25zZeKAmXMgc3RhdHVzIGlzIDQwMSwgaHR0cFJlcXVlc3TigJlzIHJlc3BvbnNlIHRhaW50aW5nIGlzIG5vdFxuICAvLyBcImNvcnNcIiwgaW5jbHVkZUNyZWRlbnRpYWxzIGlzIHRydWUsIGFuZCByZXF1ZXN04oCZcyB3aW5kb3cgaXMgYW4gZW52aXJvbm1lbnRcbiAgLy8gc2V0dGluZ3Mgb2JqZWN0LCB0aGVuOlxuICAvLyBUT0RPXG5cbiAgLy8gMTUuIElmIHJlc3BvbnNl4oCZcyBzdGF0dXMgaXMgNDA3LCB0aGVuOlxuICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDcpIHtcbiAgICAvLyAxLiBJZiByZXF1ZXN04oCZcyB3aW5kb3cgaXMgXCJuby13aW5kb3dcIiwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICAgIGlmIChyZXF1ZXN0LndpbmRvdyA9PT0gJ25vLXdpbmRvdycpIHtcbiAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKClcbiAgICB9XG5cbiAgICAvLyAyLiA/Pz9cblxuICAgIC8vIDMuIElmIGZldGNoUGFyYW1zIGlzIGNhbmNlbGVkLCB0aGVuIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgbmV0d29yayBlcnJvciBmb3IgZmV0Y2hQYXJhbXMuXG4gICAgaWYgKGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSkge1xuICAgICAgcmV0dXJuIG1ha2VBcHByb3ByaWF0ZU5ldHdvcmtFcnJvcihmZXRjaFBhcmFtcylcbiAgICB9XG5cbiAgICAvLyA0LiBQcm9tcHQgdGhlIGVuZCB1c2VyIGFzIGFwcHJvcHJpYXRlIGluIHJlcXVlc3TigJlzIHdpbmRvdyBhbmQgc3RvcmVcbiAgICAvLyB0aGUgcmVzdWx0IGFzIGEgcHJveHktYXV0aGVudGljYXRpb24gZW50cnkuIFtIVFRQLUFVVEhdXG4gICAgLy8gVE9ETzogSW52b2tlIHNvbWUga2luZCBvZiBjYWxsYmFjaz9cblxuICAgIC8vIDUuIFNldCByZXNwb25zZSB0byB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgSFRUUC1uZXR3b3JrLW9yLWNhY2hlIGZldGNoIGdpdmVuXG4gICAgLy8gZmV0Y2hQYXJhbXMuXG4gICAgLy8gVE9ET1xuICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdwcm94eSBhdXRoZW50aWNhdGlvbiByZXF1aXJlZCcpXG4gIH1cblxuICAvLyAxNi4gSWYgYWxsIG9mIHRoZSBmb2xsb3dpbmcgYXJlIHRydWVcbiAgaWYgKFxuICAgIC8vIHJlc3BvbnNl4oCZcyBzdGF0dXMgaXMgNDIxXG4gICAgcmVzcG9uc2Uuc3RhdHVzID09PSA0MjEgJiZcbiAgICAvLyBpc05ld0Nvbm5lY3Rpb25GZXRjaCBpcyBmYWxzZVxuICAgICFpc05ld0Nvbm5lY3Rpb25GZXRjaCAmJlxuICAgIC8vIHJlcXVlc3TigJlzIGJvZHkgaXMgbnVsbCwgb3IgcmVxdWVzdOKAmXMgYm9keSBpcyBub24tbnVsbCBhbmQgcmVxdWVzdOKAmXMgYm9keeKAmXMgc291cmNlIGlzIG5vbi1udWxsXG4gICAgKHJlcXVlc3QuYm9keSA9PSBudWxsIHx8IHJlcXVlc3QuYm9keS5zb3VyY2UgIT0gbnVsbClcbiAgKSB7XG4gICAgLy8gdGhlbjpcblxuICAgIC8vIDEuIElmIGZldGNoUGFyYW1zIGlzIGNhbmNlbGVkLCB0aGVuIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgbmV0d29yayBlcnJvciBmb3IgZmV0Y2hQYXJhbXMuXG4gICAgaWYgKGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSkge1xuICAgICAgcmV0dXJuIG1ha2VBcHByb3ByaWF0ZU5ldHdvcmtFcnJvcihmZXRjaFBhcmFtcylcbiAgICB9XG5cbiAgICAvLyAyLiBTZXQgcmVzcG9uc2UgdG8gdGhlIHJlc3VsdCBvZiBydW5uaW5nIEhUVFAtbmV0d29yay1vci1jYWNoZVxuICAgIC8vIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLCBpc0F1dGhlbnRpY2F0aW9uRmV0Y2gsIGFuZCB0cnVlLlxuXG4gICAgLy8gVE9ETyAoc3BlYyk6IFRoZSBzcGVjIGRvZXNuJ3Qgc3BlY2lmeSB0aGlzIGJ1dCB3ZSBuZWVkIHRvIGNhbmNlbFxuICAgIC8vIHRoZSBhY3RpdmUgcmVzcG9uc2UgYmVmb3JlIHdlIGNhbiBzdGFydCBhIG5ldyBvbmUuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy9mZXRjaC9pc3N1ZXMvMTI5M1xuICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29ubmVjdGlvbi5kZXN0cm95KClcblxuICAgIHJlc3BvbnNlID0gYXdhaXQgaHR0cE5ldHdvcmtPckNhY2hlRmV0Y2goXG4gICAgICBmZXRjaFBhcmFtcyxcbiAgICAgIGlzQXV0aGVudGljYXRpb25GZXRjaCxcbiAgICAgIHRydWVcbiAgICApXG4gIH1cblxuICAvLyAxNy4gSWYgaXNBdXRoZW50aWNhdGlvbkZldGNoIGlzIHRydWUsIHRoZW4gY3JlYXRlIGFuIGF1dGhlbnRpY2F0aW9uIGVudHJ5XG4gIGlmIChpc0F1dGhlbnRpY2F0aW9uRmV0Y2gpIHtcbiAgICAvLyBUT0RPXG4gIH1cblxuICAvLyAxOC4gUmV0dXJuIHJlc3BvbnNlLlxuICByZXR1cm4gcmVzcG9uc2Vcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtbmV0d29yay1mZXRjaFxuYXN5bmMgZnVuY3Rpb24gaHR0cE5ldHdvcmtGZXRjaCAoXG4gIGZldGNoUGFyYW1zLFxuICBpbmNsdWRlQ3JlZGVudGlhbHMgPSBmYWxzZSxcbiAgZm9yY2VOZXdDb25uZWN0aW9uID0gZmFsc2Vcbikge1xuICBhc3NlcnQoIWZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29ubmVjdGlvbiB8fCBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbm5lY3Rpb24uZGVzdHJveWVkKVxuXG4gIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29ubmVjdGlvbiA9IHtcbiAgICBhYm9ydDogbnVsbCxcbiAgICBkZXN0cm95ZWQ6IGZhbHNlLFxuICAgIGRlc3Ryb3kgKGVycikge1xuICAgICAgaWYgKCF0aGlzLmRlc3Ryb3llZCkge1xuICAgICAgICB0aGlzLmRlc3Ryb3llZCA9IHRydWVcbiAgICAgICAgdGhpcy5hYm9ydD8uKGVyciA/PyBuZXcgRE9NRXhjZXB0aW9uKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLicsICdBYm9ydEVycm9yJykpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gMS4gTGV0IHJlcXVlc3QgYmUgZmV0Y2hQYXJhbXPigJlzIHJlcXVlc3QuXG4gIGNvbnN0IHJlcXVlc3QgPSBmZXRjaFBhcmFtcy5yZXF1ZXN0XG5cbiAgLy8gMi4gTGV0IHJlc3BvbnNlIGJlIG51bGwuXG4gIGxldCByZXNwb25zZSA9IG51bGxcblxuICAvLyAzLiBMZXQgdGltaW5nSW5mbyBiZSBmZXRjaFBhcmFtc+KAmXMgdGltaW5nIGluZm8uXG4gIGNvbnN0IHRpbWluZ0luZm8gPSBmZXRjaFBhcmFtcy50aW1pbmdJbmZvXG5cbiAgLy8gNC4gTGV0IGh0dHBDYWNoZSBiZSB0aGUgcmVzdWx0IG9mIGRldGVybWluaW5nIHRoZSBIVFRQIGNhY2hlIHBhcnRpdGlvbixcbiAgLy8gZ2l2ZW4gcmVxdWVzdC5cbiAgLy8gVE9ETzogY2FjaGVcbiAgY29uc3QgaHR0cENhY2hlID0gbnVsbFxuXG4gIC8vIDUuIElmIGh0dHBDYWNoZSBpcyBudWxsLCB0aGVuIHNldCByZXF1ZXN04oCZcyBjYWNoZSBtb2RlIHRvIFwibm8tc3RvcmVcIi5cbiAgaWYgKGh0dHBDYWNoZSA9PSBudWxsKSB7XG4gICAgcmVxdWVzdC5jYWNoZSA9ICduby1zdG9yZSdcbiAgfVxuXG4gIC8vIDYuIExldCBuZXR3b3JrUGFydGl0aW9uS2V5IGJlIHRoZSByZXN1bHQgb2YgZGV0ZXJtaW5pbmcgdGhlIG5ldHdvcmtcbiAgLy8gcGFydGl0aW9uIGtleSBnaXZlbiByZXF1ZXN0LlxuICAvLyBUT0RPXG5cbiAgLy8gNy4gTGV0IG5ld0Nvbm5lY3Rpb24gYmUgXCJ5ZXNcIiBpZiBmb3JjZU5ld0Nvbm5lY3Rpb24gaXMgdHJ1ZTsgb3RoZXJ3aXNlXG4gIC8vIFwibm9cIi5cbiAgY29uc3QgbmV3Q29ubmVjdGlvbiA9IGZvcmNlTmV3Q29ubmVjdGlvbiA/ICd5ZXMnIDogJ25vJyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG5cbiAgLy8gOC4gU3dpdGNoIG9uIHJlcXVlc3TigJlzIG1vZGU6XG4gIGlmIChyZXF1ZXN0Lm1vZGUgPT09ICd3ZWJzb2NrZXQnKSB7XG4gICAgLy8gTGV0IGNvbm5lY3Rpb24gYmUgdGhlIHJlc3VsdCBvZiBvYnRhaW5pbmcgYSBXZWJTb2NrZXQgY29ubmVjdGlvbixcbiAgICAvLyBnaXZlbiByZXF1ZXN04oCZcyBjdXJyZW50IFVSTC5cbiAgICAvLyBUT0RPXG4gIH0gZWxzZSB7XG4gICAgLy8gTGV0IGNvbm5lY3Rpb24gYmUgdGhlIHJlc3VsdCBvZiBvYnRhaW5pbmcgYSBjb25uZWN0aW9uLCBnaXZlblxuICAgIC8vIG5ldHdvcmtQYXJ0aXRpb25LZXksIHJlcXVlc3TigJlzIGN1cnJlbnQgVVJM4oCZcyBvcmlnaW4sXG4gICAgLy8gaW5jbHVkZUNyZWRlbnRpYWxzLCBhbmQgZm9yY2VOZXdDb25uZWN0aW9uLlxuICAgIC8vIFRPRE9cbiAgfVxuXG4gIC8vIDkuIFJ1biB0aGVzZSBzdGVwcywgYnV0IGFib3J0IHdoZW4gdGhlIG9uZ29pbmcgZmV0Y2ggaXMgdGVybWluYXRlZDpcblxuICAvLyAgICAxLiBJZiBjb25uZWN0aW9uIGlzIGZhaWx1cmUsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cblxuICAvLyAgICAyLiBTZXQgdGltaW5nSW5mb+KAmXMgZmluYWwgY29ubmVjdGlvbiB0aW1pbmcgaW5mbyB0byB0aGUgcmVzdWx0IG9mXG4gIC8vICAgIGNhbGxpbmcgY2xhbXAgYW5kIGNvYXJzZW4gY29ubmVjdGlvbiB0aW1pbmcgaW5mbyB3aXRoIGNvbm5lY3Rpb27igJlzXG4gIC8vICAgIHRpbWluZyBpbmZvLCB0aW1pbmdJbmZv4oCZcyBwb3N0LXJlZGlyZWN0IHN0YXJ0IHRpbWUsIGFuZCBmZXRjaFBhcmFtc+KAmXNcbiAgLy8gICAgY3Jvc3Mtb3JpZ2luIGlzb2xhdGVkIGNhcGFiaWxpdHkuXG5cbiAgLy8gICAgMy4gSWYgY29ubmVjdGlvbiBpcyBub3QgYW4gSFRUUC8yIGNvbm5lY3Rpb24sIHJlcXVlc3TigJlzIGJvZHkgaXMgbm9uLW51bGwsXG4gIC8vICAgIGFuZCByZXF1ZXN04oCZcyBib2R54oCZcyBzb3VyY2UgaXMgbnVsbCwgdGhlbiBhcHBlbmQgKGBUcmFuc2Zlci1FbmNvZGluZ2AsXG4gIC8vICAgIGBjaHVua2VkYCkgdG8gcmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QuXG5cbiAgLy8gICAgNC4gU2V0IHRpbWluZ0luZm/igJlzIGZpbmFsIG5ldHdvcmstcmVxdWVzdCBzdGFydCB0aW1lIHRvIHRoZSBjb2Fyc2VuZWRcbiAgLy8gICAgc2hhcmVkIGN1cnJlbnQgdGltZSBnaXZlbiBmZXRjaFBhcmFtc+KAmXMgY3Jvc3Mtb3JpZ2luIGlzb2xhdGVkXG4gIC8vICAgIGNhcGFiaWxpdHkuXG5cbiAgLy8gICAgNS4gU2V0IHJlc3BvbnNlIHRvIHRoZSByZXN1bHQgb2YgbWFraW5nIGFuIEhUVFAgcmVxdWVzdCBvdmVyIGNvbm5lY3Rpb25cbiAgLy8gICAgdXNpbmcgcmVxdWVzdCB3aXRoIHRoZSBmb2xsb3dpbmcgY2F2ZWF0czpcblxuICAvLyAgICAgICAgLSBGb2xsb3cgdGhlIHJlbGV2YW50IHJlcXVpcmVtZW50cyBmcm9tIEhUVFAuIFtIVFRQXSBbSFRUUC1TRU1BTlRJQ1NdXG4gIC8vICAgICAgICBbSFRUUC1DT05EXSBbSFRUUC1DQUNISU5HXSBbSFRUUC1BVVRIXVxuXG4gIC8vICAgICAgICAtIElmIHJlcXVlc3TigJlzIGJvZHkgaXMgbm9uLW51bGwsIGFuZCByZXF1ZXN04oCZcyBib2R54oCZcyBzb3VyY2UgaXMgbnVsbCxcbiAgLy8gICAgICAgIHRoZW4gdGhlIHVzZXIgYWdlbnQgbWF5IGhhdmUgYSBidWZmZXIgb2YgdXAgdG8gNjQga2liaWJ5dGVzIGFuZCBzdG9yZVxuICAvLyAgICAgICAgYSBwYXJ0IG9mIHJlcXVlc3TigJlzIGJvZHkgaW4gdGhhdCBidWZmZXIuIElmIHRoZSB1c2VyIGFnZW50IHJlYWRzIGZyb21cbiAgLy8gICAgICAgIHJlcXVlc3TigJlzIGJvZHkgYmV5b25kIHRoYXQgYnVmZmVy4oCZcyBzaXplIGFuZCB0aGUgdXNlciBhZ2VudCBuZWVkcyB0b1xuICAvLyAgICAgICAgcmVzZW5kIHJlcXVlc3QsIHRoZW4gaW5zdGVhZCByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuXG4gIC8vICAgICAgICAtIFNldCB0aW1pbmdJbmZv4oCZcyBmaW5hbCBuZXR3b3JrLXJlc3BvbnNlIHN0YXJ0IHRpbWUgdG8gdGhlIGNvYXJzZW5lZFxuICAvLyAgICAgICAgc2hhcmVkIGN1cnJlbnQgdGltZSBnaXZlbiBmZXRjaFBhcmFtc+KAmXMgY3Jvc3Mtb3JpZ2luIGlzb2xhdGVkIGNhcGFiaWxpdHksXG4gIC8vICAgICAgICBpbW1lZGlhdGVseSBhZnRlciB0aGUgdXNlciBhZ2VudOKAmXMgSFRUUCBwYXJzZXIgcmVjZWl2ZXMgdGhlIGZpcnN0IGJ5dGVcbiAgLy8gICAgICAgIG9mIHRoZSByZXNwb25zZSAoZS5nLiwgZnJhbWUgaGVhZGVyIGJ5dGVzIGZvciBIVFRQLzIgb3IgcmVzcG9uc2Ugc3RhdHVzXG4gIC8vICAgICAgICBsaW5lIGZvciBIVFRQLzEueCkuXG5cbiAgLy8gICAgICAgIC0gV2FpdCB1bnRpbCBhbGwgdGhlIGhlYWRlcnMgYXJlIHRyYW5zbWl0dGVkLlxuXG4gIC8vICAgICAgICAtIEFueSByZXNwb25zZXMgd2hvc2Ugc3RhdHVzIGlzIGluIHRoZSByYW5nZSAxMDAgdG8gMTk5LCBpbmNsdXNpdmUsXG4gIC8vICAgICAgICBhbmQgaXMgbm90IDEwMSwgYXJlIHRvIGJlIGlnbm9yZWQsIGV4Y2VwdCBmb3IgdGhlIHB1cnBvc2VzIG9mIHNldHRpbmdcbiAgLy8gICAgICAgIHRpbWluZ0luZm/igJlzIGZpbmFsIG5ldHdvcmstcmVzcG9uc2Ugc3RhcnQgdGltZSBhYm92ZS5cblxuICAvLyAgICAtIElmIHJlcXVlc3TigJlzIGhlYWRlciBsaXN0IGNvbnRhaW5zIGBUcmFuc2Zlci1FbmNvZGluZ2AvYGNodW5rZWRgIGFuZFxuICAvLyAgICByZXNwb25zZSBpcyB0cmFuc2ZlcnJlZCB2aWEgSFRUUC8xLjAgb3Igb2xkZXIsIHRoZW4gcmV0dXJuIGEgbmV0d29ya1xuICAvLyAgICBlcnJvci5cblxuICAvLyAgICAtIElmIHRoZSBIVFRQIHJlcXVlc3QgcmVzdWx0cyBpbiBhIFRMUyBjbGllbnQgY2VydGlmaWNhdGUgZGlhbG9nLCB0aGVuOlxuXG4gIC8vICAgICAgICAxLiBJZiByZXF1ZXN04oCZcyB3aW5kb3cgaXMgYW4gZW52aXJvbm1lbnQgc2V0dGluZ3Mgb2JqZWN0LCBtYWtlIHRoZVxuICAvLyAgICAgICAgZGlhbG9nIGF2YWlsYWJsZSBpbiByZXF1ZXN04oCZcyB3aW5kb3cuXG5cbiAgLy8gICAgICAgIDIuIE90aGVyd2lzZSwgcmV0dXJuIGEgbmV0d29yayBlcnJvci5cblxuICAvLyBUbyB0cmFuc21pdCByZXF1ZXN04oCZcyBib2R5IGJvZHksIHJ1biB0aGVzZSBzdGVwczpcbiAgbGV0IHJlcXVlc3RCb2R5ID0gbnVsbFxuICAvLyAxLiBJZiBib2R5IGlzIG51bGwgYW5kIGZldGNoUGFyYW1z4oCZcyBwcm9jZXNzIHJlcXVlc3QgZW5kLW9mLWJvZHkgaXNcbiAgLy8gbm9uLW51bGwsIHRoZW4gcXVldWUgYSBmZXRjaCB0YXNrIGdpdmVuIGZldGNoUGFyYW1z4oCZcyBwcm9jZXNzIHJlcXVlc3RcbiAgLy8gZW5kLW9mLWJvZHkgYW5kIGZldGNoUGFyYW1z4oCZcyB0YXNrIGRlc3RpbmF0aW9uLlxuICBpZiAocmVxdWVzdC5ib2R5ID09IG51bGwgJiYgZmV0Y2hQYXJhbXMucHJvY2Vzc1JlcXVlc3RFbmRPZkJvZHkpIHtcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBmZXRjaFBhcmFtcy5wcm9jZXNzUmVxdWVzdEVuZE9mQm9keSgpKVxuICB9IGVsc2UgaWYgKHJlcXVlc3QuYm9keSAhPSBudWxsKSB7XG4gICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiBib2R5IGlzIG5vbi1udWxsOlxuXG4gICAgLy8gICAgMS4gTGV0IHByb2Nlc3NCb2R5Q2h1bmsgZ2l2ZW4gYnl0ZXMgYmUgdGhlc2Ugc3RlcHM6XG4gICAgY29uc3QgcHJvY2Vzc0JvZHlDaHVuayA9IGFzeW5jIGZ1bmN0aW9uICogKGJ5dGVzKSB7XG4gICAgICAvLyAxLiBJZiB0aGUgb25nb2luZyBmZXRjaCBpcyB0ZXJtaW5hdGVkLCB0aGVuIGFib3J0IHRoZXNlIHN0ZXBzLlxuICAgICAgaWYgKGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gMi4gUnVuIHRoaXMgc3RlcCBpbiBwYXJhbGxlbDogdHJhbnNtaXQgYnl0ZXMuXG4gICAgICB5aWVsZCBieXRlc1xuXG4gICAgICAvLyAzLiBJZiBmZXRjaFBhcmFtc+KAmXMgcHJvY2VzcyByZXF1ZXN0IGJvZHkgaXMgbm9uLW51bGwsIHRoZW4gcnVuXG4gICAgICAvLyBmZXRjaFBhcmFtc+KAmXMgcHJvY2VzcyByZXF1ZXN0IGJvZHkgZ2l2ZW4gYnl0ZXPigJlzIGxlbmd0aC5cbiAgICAgIGZldGNoUGFyYW1zLnByb2Nlc3NSZXF1ZXN0Qm9keUNodW5rTGVuZ3RoPy4oYnl0ZXMuYnl0ZUxlbmd0aClcbiAgICB9XG5cbiAgICAvLyAyLiBMZXQgcHJvY2Vzc0VuZE9mQm9keSBiZSB0aGVzZSBzdGVwczpcbiAgICBjb25zdCBwcm9jZXNzRW5kT2ZCb2R5ID0gKCkgPT4ge1xuICAgICAgLy8gMS4gSWYgZmV0Y2hQYXJhbXMgaXMgY2FuY2VsZWQsIHRoZW4gYWJvcnQgdGhlc2Ugc3RlcHMuXG4gICAgICBpZiAoaXNDYW5jZWxsZWQoZmV0Y2hQYXJhbXMpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyAyLiBJZiBmZXRjaFBhcmFtc+KAmXMgcHJvY2VzcyByZXF1ZXN0IGVuZC1vZi1ib2R5IGlzIG5vbi1udWxsLFxuICAgICAgLy8gdGhlbiBydW4gZmV0Y2hQYXJhbXPigJlzIHByb2Nlc3MgcmVxdWVzdCBlbmQtb2YtYm9keS5cbiAgICAgIGlmIChmZXRjaFBhcmFtcy5wcm9jZXNzUmVxdWVzdEVuZE9mQm9keSkge1xuICAgICAgICBmZXRjaFBhcmFtcy5wcm9jZXNzUmVxdWVzdEVuZE9mQm9keSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gMy4gTGV0IHByb2Nlc3NCb2R5RXJyb3IgZ2l2ZW4gZSBiZSB0aGVzZSBzdGVwczpcbiAgICBjb25zdCBwcm9jZXNzQm9keUVycm9yID0gKGUpID0+IHtcbiAgICAgIC8vIDEuIElmIGZldGNoUGFyYW1zIGlzIGNhbmNlbGVkLCB0aGVuIGFib3J0IHRoZXNlIHN0ZXBzLlxuICAgICAgaWYgKGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gMi4gSWYgZSBpcyBhbiBcIkFib3J0RXJyb3JcIiBET01FeGNlcHRpb24sIHRoZW4gYWJvcnQgZmV0Y2hQYXJhbXPigJlzIGNvbnRyb2xsZXIuXG4gICAgICBpZiAoZS5uYW1lID09PSAnQWJvcnRFcnJvcicpIHtcbiAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5hYm9ydCgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnRlcm1pbmF0ZShlKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDQuIEluY3JlbWVudGFsbHkgcmVhZCByZXF1ZXN04oCZcyBib2R5IGdpdmVuIHByb2Nlc3NCb2R5Q2h1bmssIHByb2Nlc3NFbmRPZkJvZHksXG4gICAgLy8gcHJvY2Vzc0JvZHlFcnJvciwgYW5kIGZldGNoUGFyYW1z4oCZcyB0YXNrIGRlc3RpbmF0aW9uLlxuICAgIHJlcXVlc3RCb2R5ID0gKGFzeW5jIGZ1bmN0aW9uICogKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm9yIGF3YWl0IChjb25zdCBieXRlcyBvZiByZXF1ZXN0LmJvZHkuc3RyZWFtKSB7XG4gICAgICAgICAgeWllbGQgKiBwcm9jZXNzQm9keUNodW5rKGJ5dGVzKVxuICAgICAgICB9XG4gICAgICAgIHByb2Nlc3NFbmRPZkJvZHkoKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHByb2Nlc3NCb2R5RXJyb3IoZXJyKVxuICAgICAgfVxuICAgIH0pKClcbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gc29ja2V0IGlzIG9ubHkgcHJvdmlkZWQgZm9yIHdlYnNvY2tldHNcbiAgICBjb25zdCB7IGJvZHksIHN0YXR1cywgc3RhdHVzVGV4dCwgaGVhZGVyc0xpc3QsIHNvY2tldCB9ID0gYXdhaXQgZGlzcGF0Y2goeyBib2R5OiByZXF1ZXN0Qm9keSB9KVxuXG4gICAgaWYgKHNvY2tldCkge1xuICAgICAgcmVzcG9uc2UgPSBtYWtlUmVzcG9uc2UoeyBzdGF0dXMsIHN0YXR1c1RleHQsIGhlYWRlcnNMaXN0LCBzb2NrZXQgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgaXRlcmF0b3IgPSBib2R5W1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpXG4gICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLm5leHQgPSAoKSA9PiBpdGVyYXRvci5uZXh0KClcblxuICAgICAgcmVzcG9uc2UgPSBtYWtlUmVzcG9uc2UoeyBzdGF0dXMsIHN0YXR1c1RleHQsIGhlYWRlcnNMaXN0IH0pXG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyAxMC4gSWYgYWJvcnRlZCwgdGhlbjpcbiAgICBpZiAoZXJyLm5hbWUgPT09ICdBYm9ydEVycm9yJykge1xuICAgICAgLy8gMS4gSWYgY29ubmVjdGlvbiB1c2VzIEhUVFAvMiwgdGhlbiB0cmFuc21pdCBhbiBSU1RfU1RSRUFNIGZyYW1lLlxuICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb25uZWN0aW9uLmRlc3Ryb3koKVxuXG4gICAgICAvLyAyLiBSZXR1cm4gdGhlIGFwcHJvcHJpYXRlIG5ldHdvcmsgZXJyb3IgZm9yIGZldGNoUGFyYW1zLlxuICAgICAgcmV0dXJuIG1ha2VBcHByb3ByaWF0ZU5ldHdvcmtFcnJvcihmZXRjaFBhcmFtcywgZXJyKVxuICAgIH1cblxuICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKGVycilcbiAgfVxuXG4gIC8vIDExLiBMZXQgcHVsbEFsZ29yaXRobSBiZSBhbiBhY3Rpb24gdGhhdCByZXN1bWVzIHRoZSBvbmdvaW5nIGZldGNoXG4gIC8vIGlmIGl0IGlzIHN1c3BlbmRlZC5cbiAgY29uc3QgcHVsbEFsZ29yaXRobSA9ICgpID0+IHtcbiAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnJlc3VtZSgpXG4gIH1cblxuICAvLyAxMi4gTGV0IGNhbmNlbEFsZ29yaXRobSBiZSBhbiBhbGdvcml0aG0gdGhhdCBhYm9ydHMgZmV0Y2hQYXJhbXPigJlzXG4gIC8vIGNvbnRyb2xsZXIgd2l0aCByZWFzb24sIGdpdmVuIHJlYXNvbi5cbiAgY29uc3QgY2FuY2VsQWxnb3JpdGhtID0gKHJlYXNvbikgPT4ge1xuICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuYWJvcnQocmVhc29uKVxuICB9XG5cbiAgLy8gMTMuIExldCBoaWdoV2F0ZXJNYXJrIGJlIGEgbm9uLW5lZ2F0aXZlLCBub24tTmFOIG51bWJlciwgY2hvc2VuIGJ5XG4gIC8vIHRoZSB1c2VyIGFnZW50LlxuICAvLyBUT0RPXG5cbiAgLy8gMTQuIExldCBzaXplQWxnb3JpdGhtIGJlIGFuIGFsZ29yaXRobSB0aGF0IGFjY2VwdHMgYSBjaHVuayBvYmplY3RcbiAgLy8gYW5kIHJldHVybnMgYSBub24tbmVnYXRpdmUsIG5vbi1OYU4sIG5vbi1pbmZpbml0ZSBudW1iZXIsIGNob3NlbiBieSB0aGUgdXNlciBhZ2VudC5cbiAgLy8gVE9ET1xuXG4gIC8vIDE1LiBMZXQgc3RyZWFtIGJlIGEgbmV3IFJlYWRhYmxlU3RyZWFtLlxuICAvLyAxNi4gU2V0IHVwIHN0cmVhbSB3aXRoIHB1bGxBbGdvcml0aG0gc2V0IHRvIHB1bGxBbGdvcml0aG0sXG4gIC8vIGNhbmNlbEFsZ29yaXRobSBzZXQgdG8gY2FuY2VsQWxnb3JpdGhtLCBoaWdoV2F0ZXJNYXJrIHNldCB0b1xuICAvLyBoaWdoV2F0ZXJNYXJrLCBhbmQgc2l6ZUFsZ29yaXRobSBzZXQgdG8gc2l6ZUFsZ29yaXRobS5cbiAgaWYgKCFSZWFkYWJsZVN0cmVhbSkge1xuICAgIFJlYWRhYmxlU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtL3dlYicpLlJlYWRhYmxlU3RyZWFtXG4gIH1cblxuICBjb25zdCBzdHJlYW0gPSBuZXcgUmVhZGFibGVTdHJlYW0oXG4gICAge1xuICAgICAgYXN5bmMgc3RhcnQgKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb250cm9sbGVyID0gY29udHJvbGxlclxuICAgICAgfSxcbiAgICAgIGFzeW5jIHB1bGwgKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgYXdhaXQgcHVsbEFsZ29yaXRobShjb250cm9sbGVyKVxuICAgICAgfSxcbiAgICAgIGFzeW5jIGNhbmNlbCAocmVhc29uKSB7XG4gICAgICAgIGF3YWl0IGNhbmNlbEFsZ29yaXRobShyZWFzb24pXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBoaWdoV2F0ZXJNYXJrOiAwLFxuICAgICAgc2l6ZSAoKSB7XG4gICAgICAgIHJldHVybiAxXG4gICAgICB9XG4gICAgfVxuICApXG5cbiAgLy8gMTcuIFJ1biB0aGVzZSBzdGVwcywgYnV0IGFib3J0IHdoZW4gdGhlIG9uZ29pbmcgZmV0Y2ggaXMgdGVybWluYXRlZDpcblxuICAvLyAgICAxLiBTZXQgcmVzcG9uc2XigJlzIGJvZHkgdG8gYSBuZXcgYm9keSB3aG9zZSBzdHJlYW0gaXMgc3RyZWFtLlxuICByZXNwb25zZS5ib2R5ID0geyBzdHJlYW0gfVxuXG4gIC8vICAgIDIuIElmIHJlc3BvbnNlIGlzIG5vdCBhIG5ldHdvcmsgZXJyb3IgYW5kIHJlcXVlc3TigJlzIGNhY2hlIG1vZGUgaXNcbiAgLy8gICAgbm90IFwibm8tc3RvcmVcIiwgdGhlbiB1cGRhdGUgcmVzcG9uc2UgaW4gaHR0cENhY2hlIGZvciByZXF1ZXN0LlxuICAvLyAgICBUT0RPXG5cbiAgLy8gICAgMy4gSWYgaW5jbHVkZUNyZWRlbnRpYWxzIGlzIHRydWUgYW5kIHRoZSB1c2VyIGFnZW50IGlzIG5vdCBjb25maWd1cmVkXG4gIC8vICAgIHRvIGJsb2NrIGNvb2tpZXMgZm9yIHJlcXVlc3QgKHNlZSBzZWN0aW9uIDcgb2YgW0NPT0tJRVNdKSwgdGhlbiBydW4gdGhlXG4gIC8vICAgIFwic2V0LWNvb2tpZS1zdHJpbmdcIiBwYXJzaW5nIGFsZ29yaXRobSAoc2VlIHNlY3Rpb24gNS4yIG9mIFtDT09LSUVTXSkgb25cbiAgLy8gICAgdGhlIHZhbHVlIG9mIGVhY2ggaGVhZGVyIHdob3NlIG5hbWUgaXMgYSBieXRlLWNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yXG4gIC8vICAgIGBTZXQtQ29va2llYCBpbiByZXNwb25zZeKAmXMgaGVhZGVyIGxpc3QsIGlmIGFueSwgYW5kIHJlcXVlc3TigJlzIGN1cnJlbnQgVVJMLlxuICAvLyAgICBUT0RPXG5cbiAgLy8gMTguIElmIGFib3J0ZWQsIHRoZW46XG4gIC8vIFRPRE9cblxuICAvLyAxOS4gUnVuIHRoZXNlIHN0ZXBzIGluIHBhcmFsbGVsOlxuXG4gIC8vICAgIDEuIFJ1biB0aGVzZSBzdGVwcywgYnV0IGFib3J0IHdoZW4gZmV0Y2hQYXJhbXMgaXMgY2FuY2VsZWQ6XG4gIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIub24oJ3Rlcm1pbmF0ZWQnLCBvbkFib3J0ZWQpXG4gIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIucmVzdW1lID0gYXN5bmMgKCkgPT4ge1xuICAgIC8vIDEuIFdoaWxlIHRydWVcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgLy8gMS0zLiBTZWUgb25EYXRhLi4uXG5cbiAgICAgIC8vIDQuIFNldCBieXRlcyB0byB0aGUgcmVzdWx0IG9mIGhhbmRsaW5nIGNvbnRlbnQgY29kaW5ncyBnaXZlblxuICAgICAgLy8gY29kaW5ncyBhbmQgYnl0ZXMuXG4gICAgICBsZXQgYnl0ZXNcbiAgICAgIGxldCBpc0ZhaWx1cmVcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IGZldGNoUGFyYW1zLmNvbnRyb2xsZXIubmV4dCgpXG5cbiAgICAgICAgaWYgKGlzQWJvcnRlZChmZXRjaFBhcmFtcykpIHtcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG5cbiAgICAgICAgYnl0ZXMgPSBkb25lID8gdW5kZWZpbmVkIDogdmFsdWVcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoZmV0Y2hQYXJhbXMuY29udHJvbGxlci5lbmRlZCAmJiAhdGltaW5nSW5mby5lbmNvZGVkQm9keVNpemUpIHtcbiAgICAgICAgICAvLyB6bGliIGRvZXNuJ3QgbGlrZSBlbXB0eSBzdHJlYW1zLlxuICAgICAgICAgIGJ5dGVzID0gdW5kZWZpbmVkXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnl0ZXMgPSBlcnJcblxuICAgICAgICAgIC8vIGVyciBtYXkgYmUgcHJvcGFnYXRlZCBmcm9tIHRoZSByZXN1bHQgb2YgY2FsbGluZyByZWFkYWJsZXN0cmVhbS5jYW5jZWwsXG4gICAgICAgICAgLy8gd2hpY2ggbWlnaHQgbm90IGJlIGFuIGVycm9yLiBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMjAwOVxuICAgICAgICAgIGlzRmFpbHVyZSA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoYnl0ZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyAyLiBPdGhlcndpc2UsIGlmIHRoZSBieXRlcyB0cmFuc21pc3Npb24gZm9yIHJlc3BvbnNl4oCZcyBtZXNzYWdlXG4gICAgICAgIC8vIGJvZHkgaXMgZG9uZSBub3JtYWxseSBhbmQgc3RyZWFtIGlzIHJlYWRhYmxlLCB0aGVuIGNsb3NlXG4gICAgICAgIC8vIHN0cmVhbSwgZmluYWxpemUgcmVzcG9uc2UgZm9yIGZldGNoUGFyYW1zIGFuZCByZXNwb25zZSwgYW5kXG4gICAgICAgIC8vIGFib3J0IHRoZXNlIGluLXBhcmFsbGVsIHN0ZXBzLlxuICAgICAgICByZWFkYWJsZVN0cmVhbUNsb3NlKGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29udHJvbGxlcilcblxuICAgICAgICBmaW5hbGl6ZVJlc3BvbnNlKGZldGNoUGFyYW1zLCByZXNwb25zZSlcblxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gNS4gSW5jcmVhc2UgdGltaW5nSW5mb+KAmXMgZGVjb2RlZCBib2R5IHNpemUgYnkgYnl0ZXPigJlzIGxlbmd0aC5cbiAgICAgIHRpbWluZ0luZm8uZGVjb2RlZEJvZHlTaXplICs9IGJ5dGVzPy5ieXRlTGVuZ3RoID8/IDBcblxuICAgICAgLy8gNi4gSWYgYnl0ZXMgaXMgZmFpbHVyZSwgdGhlbiB0ZXJtaW5hdGUgZmV0Y2hQYXJhbXPigJlzIGNvbnRyb2xsZXIuXG4gICAgICBpZiAoaXNGYWlsdXJlKSB7XG4gICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIudGVybWluYXRlKGJ5dGVzKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gNy4gRW5xdWV1ZSBhIFVpbnQ4QXJyYXkgd3JhcHBpbmcgYW4gQXJyYXlCdWZmZXIgY29udGFpbmluZyBieXRlc1xuICAgICAgLy8gaW50byBzdHJlYW0uXG4gICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbnRyb2xsZXIuZW5xdWV1ZShuZXcgVWludDhBcnJheShieXRlcykpXG5cbiAgICAgIC8vIDguIElmIHN0cmVhbSBpcyBlcnJvcmVkLCB0aGVuIHRlcm1pbmF0ZSB0aGUgb25nb2luZyBmZXRjaC5cbiAgICAgIGlmIChpc0Vycm9yZWQoc3RyZWFtKSkge1xuICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnRlcm1pbmF0ZSgpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyA5LiBJZiBzdHJlYW0gZG9lc27igJl0IG5lZWQgbW9yZSBkYXRhIGFzayB0aGUgdXNlciBhZ2VudCB0byBzdXNwZW5kXG4gICAgICAvLyB0aGUgb25nb2luZyBmZXRjaC5cbiAgICAgIGlmICghZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb250cm9sbGVyLmRlc2lyZWRTaXplKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vICAgIDIuIElmIGFib3J0ZWQsIHRoZW46XG4gIGZ1bmN0aW9uIG9uQWJvcnRlZCAocmVhc29uKSB7XG4gICAgLy8gMi4gSWYgZmV0Y2hQYXJhbXMgaXMgYWJvcnRlZCwgdGhlbjpcbiAgICBpZiAoaXNBYm9ydGVkKGZldGNoUGFyYW1zKSkge1xuICAgICAgLy8gMS4gU2V0IHJlc3BvbnNl4oCZcyBhYm9ydGVkIGZsYWcuXG4gICAgICByZXNwb25zZS5hYm9ydGVkID0gdHJ1ZVxuXG4gICAgICAvLyAyLiBJZiBzdHJlYW0gaXMgcmVhZGFibGUsIHRoZW4gZXJyb3Igc3RyZWFtIHdpdGggdGhlIHJlc3VsdCBvZlxuICAgICAgLy8gICAgZGVzZXJpYWxpemUgYSBzZXJpYWxpemVkIGFib3J0IHJlYXNvbiBnaXZlbiBmZXRjaFBhcmFtc+KAmXNcbiAgICAgIC8vICAgIGNvbnRyb2xsZXLigJlzIHNlcmlhbGl6ZWQgYWJvcnQgcmVhc29uIGFuZCBhblxuICAgICAgLy8gICAgaW1wbGVtZW50YXRpb24tZGVmaW5lZCByZWFsbS5cbiAgICAgIGlmIChpc1JlYWRhYmxlKHN0cmVhbSkpIHtcbiAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb250cm9sbGVyLmVycm9yKFxuICAgICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuc2VyaWFsaXplZEFib3J0UmVhc29uXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gMy4gT3RoZXJ3aXNlLCBpZiBzdHJlYW0gaXMgcmVhZGFibGUsIGVycm9yIHN0cmVhbSB3aXRoIGEgVHlwZUVycm9yLlxuICAgICAgaWYgKGlzUmVhZGFibGUoc3RyZWFtKSkge1xuICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbnRyb2xsZXIuZXJyb3IobmV3IFR5cGVFcnJvcigndGVybWluYXRlZCcsIHtcbiAgICAgICAgICBjYXVzZTogaXNFcnJvckxpa2UocmVhc29uKSA/IHJlYXNvbiA6IHVuZGVmaW5lZFxuICAgICAgICB9KSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA0LiBJZiBjb25uZWN0aW9uIHVzZXMgSFRUUC8yLCB0aGVuIHRyYW5zbWl0IGFuIFJTVF9TVFJFQU0gZnJhbWUuXG4gICAgLy8gNS4gT3RoZXJ3aXNlLCB0aGUgdXNlciBhZ2VudCBzaG91bGQgY2xvc2UgY29ubmVjdGlvbiB1bmxlc3MgaXQgd291bGQgYmUgYmFkIGZvciBwZXJmb3JtYW5jZSB0byBkbyBzby5cbiAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbm5lY3Rpb24uZGVzdHJveSgpXG4gIH1cblxuICAvLyAyMC4gUmV0dXJuIHJlc3BvbnNlLlxuICByZXR1cm4gcmVzcG9uc2VcblxuICBhc3luYyBmdW5jdGlvbiBkaXNwYXRjaCAoeyBib2R5IH0pIHtcbiAgICBjb25zdCB1cmwgPSByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KVxuICAgIC8qKiBAdHlwZSB7aW1wb3J0KCcuLi8uLicpLkFnZW50fSAqL1xuICAgIGNvbnN0IGFnZW50ID0gZmV0Y2hQYXJhbXMuY29udHJvbGxlci5kaXNwYXRjaGVyXG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gYWdlbnQuZGlzcGF0Y2goXG4gICAgICB7XG4gICAgICAgIHBhdGg6IHVybC5wYXRobmFtZSArIHVybC5zZWFyY2gsXG4gICAgICAgIG9yaWdpbjogdXJsLm9yaWdpbixcbiAgICAgICAgbWV0aG9kOiByZXF1ZXN0Lm1ldGhvZCxcbiAgICAgICAgYm9keTogZmV0Y2hQYXJhbXMuY29udHJvbGxlci5kaXNwYXRjaGVyLmlzTW9ja0FjdGl2ZSA/IHJlcXVlc3QuYm9keSAmJiAocmVxdWVzdC5ib2R5LnNvdXJjZSB8fCByZXF1ZXN0LmJvZHkuc3RyZWFtKSA6IGJvZHksXG4gICAgICAgIGhlYWRlcnM6IHJlcXVlc3QuaGVhZGVyc0xpc3QuZW50cmllcyxcbiAgICAgICAgbWF4UmVkaXJlY3Rpb25zOiAwLFxuICAgICAgICB1cGdyYWRlOiByZXF1ZXN0Lm1vZGUgPT09ICd3ZWJzb2NrZXQnID8gJ3dlYnNvY2tldCcgOiB1bmRlZmluZWRcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJvZHk6IG51bGwsXG4gICAgICAgIGFib3J0OiBudWxsLFxuXG4gICAgICAgIG9uQ29ubmVjdCAoYWJvcnQpIHtcbiAgICAgICAgICAvLyBUT0RPIChmaXgpOiBEbyB3ZSBuZWVkIGNvbm5lY3Rpb24gaGVyZT9cbiAgICAgICAgICBjb25zdCB7IGNvbm5lY3Rpb24gfSA9IGZldGNoUGFyYW1zLmNvbnRyb2xsZXJcblxuICAgICAgICAgIGlmIChjb25uZWN0aW9uLmRlc3Ryb3llZCkge1xuICAgICAgICAgICAgYWJvcnQobmV3IERPTUV4Y2VwdGlvbignVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC4nLCAnQWJvcnRFcnJvcicpKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLm9uKCd0ZXJtaW5hdGVkJywgYWJvcnQpXG4gICAgICAgICAgICB0aGlzLmFib3J0ID0gY29ubmVjdGlvbi5hYm9ydCA9IGFib3J0XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIG9uSGVhZGVycyAoc3RhdHVzLCBoZWFkZXJzTGlzdCwgcmVzdW1lLCBzdGF0dXNUZXh0KSB7XG4gICAgICAgICAgaWYgKHN0YXR1cyA8IDIwMCkge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IGNvZGluZ3MgPSBbXVxuICAgICAgICAgIGxldCBsb2NhdGlvbiA9ICcnXG5cbiAgICAgICAgICBjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKVxuXG4gICAgICAgICAgLy8gRm9yIEgyLCB0aGUgaGVhZGVycyBhcmUgYSBwbGFpbiBKUyBvYmplY3RcbiAgICAgICAgICAvLyBXZSBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZW0gYW5kIGl0ZXJhdGUgYWNjb3JkaW5nbHlcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzTGlzdCkpIHtcbiAgICAgICAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgaGVhZGVyc0xpc3QubGVuZ3RoOyBuICs9IDIpIHtcbiAgICAgICAgICAgICAgY29uc3Qga2V5ID0gaGVhZGVyc0xpc3RbbiArIDBdLnRvU3RyaW5nKCdsYXRpbjEnKVxuICAgICAgICAgICAgICBjb25zdCB2YWwgPSBoZWFkZXJzTGlzdFtuICsgMV0udG9TdHJpbmcoJ2xhdGluMScpXG4gICAgICAgICAgICAgIGlmIChrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtZW5jb2RpbmcnKSB7XG4gICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzcyMzEjc2VjdGlvbi0zLjEuMi4xXG4gICAgICAgICAgICAgICAgLy8gXCJBbGwgY29udGVudC1jb2RpbmcgdmFsdWVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlLi4uXCJcbiAgICAgICAgICAgICAgICBjb2RpbmdzID0gdmFsLnRvTG93ZXJDYXNlKCkuc3BsaXQoJywnKS5tYXAoKHgpID0+IHgudHJpbSgpKVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleS50b0xvd2VyQ2FzZSgpID09PSAnbG9jYXRpb24nKSB7XG4gICAgICAgICAgICAgICAgbG9jYXRpb24gPSB2YWxcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGhlYWRlcnNba0hlYWRlcnNMaXN0XS5hcHBlbmQoa2V5LCB2YWwpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhoZWFkZXJzTGlzdClcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgICAgICAgY29uc3QgdmFsID0gaGVhZGVyc0xpc3Rba2V5XVxuICAgICAgICAgICAgICBpZiAoa2V5LnRvTG93ZXJDYXNlKCkgPT09ICdjb250ZW50LWVuY29kaW5nJykge1xuICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM3MjMxI3NlY3Rpb24tMy4xLjIuMVxuICAgICAgICAgICAgICAgIC8vIFwiQWxsIGNvbnRlbnQtY29kaW5nIHZhbHVlcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZS4uLlwiXG4gICAgICAgICAgICAgICAgY29kaW5ncyA9IHZhbC50b0xvd2VyQ2FzZSgpLnNwbGl0KCcsJykubWFwKCh4KSA9PiB4LnRyaW0oKSkucmV2ZXJzZSgpXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5LnRvTG93ZXJDYXNlKCkgPT09ICdsb2NhdGlvbicpIHtcbiAgICAgICAgICAgICAgICBsb2NhdGlvbiA9IHZhbFxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaGVhZGVyc1trSGVhZGVyc0xpc3RdLmFwcGVuZChrZXksIHZhbClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmJvZHkgPSBuZXcgUmVhZGFibGUoeyByZWFkOiByZXN1bWUgfSlcblxuICAgICAgICAgIGNvbnN0IGRlY29kZXJzID0gW11cblxuICAgICAgICAgIGNvbnN0IHdpbGxGb2xsb3cgPSByZXF1ZXN0LnJlZGlyZWN0ID09PSAnZm9sbG93JyAmJlxuICAgICAgICAgICAgbG9jYXRpb24gJiZcbiAgICAgICAgICAgIHJlZGlyZWN0U3RhdHVzU2V0LmhhcyhzdGF0dXMpXG5cbiAgICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvQ29udGVudC1FbmNvZGluZ1xuICAgICAgICAgIGlmIChyZXF1ZXN0Lm1ldGhvZCAhPT0gJ0hFQUQnICYmIHJlcXVlc3QubWV0aG9kICE9PSAnQ09OTkVDVCcgJiYgIW51bGxCb2R5U3RhdHVzLmluY2x1ZGVzKHN0YXR1cykgJiYgIXdpbGxGb2xsb3cpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29kaW5nIG9mIGNvZGluZ3MpIHtcbiAgICAgICAgICAgICAgLy8gaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzkxMTIuaHRtbCNzZWN0aW9uLTcuMlxuICAgICAgICAgICAgICBpZiAoY29kaW5nID09PSAneC1nemlwJyB8fCBjb2RpbmcgPT09ICdnemlwJykge1xuICAgICAgICAgICAgICAgIGRlY29kZXJzLnB1c2goemxpYi5jcmVhdGVHdW56aXAoe1xuICAgICAgICAgICAgICAgICAgLy8gQmUgbGVzcyBzdHJpY3Qgd2hlbiBkZWNvZGluZyBjb21wcmVzc2VkIHJlc3BvbnNlcywgc2luY2Ugc29tZXRpbWVzXG4gICAgICAgICAgICAgICAgICAvLyBzZXJ2ZXJzIHNlbmQgc2xpZ2h0bHkgaW52YWxpZCByZXNwb25zZXMgdGhhdCBhcmUgc3RpbGwgYWNjZXB0ZWRcbiAgICAgICAgICAgICAgICAgIC8vIGJ5IGNvbW1vbiBicm93c2Vycy5cbiAgICAgICAgICAgICAgICAgIC8vIEFsd2F5cyB1c2luZyBaX1NZTkNfRkxVU0ggaXMgd2hhdCBjVVJMIGRvZXMuXG4gICAgICAgICAgICAgICAgICBmbHVzaDogemxpYi5jb25zdGFudHMuWl9TWU5DX0ZMVVNILFxuICAgICAgICAgICAgICAgICAgZmluaXNoRmx1c2g6IHpsaWIuY29uc3RhbnRzLlpfU1lOQ19GTFVTSFxuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvZGluZyA9PT0gJ2RlZmxhdGUnKSB7XG4gICAgICAgICAgICAgICAgZGVjb2RlcnMucHVzaCh6bGliLmNyZWF0ZUluZmxhdGUoKSlcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb2RpbmcgPT09ICdicicpIHtcbiAgICAgICAgICAgICAgICBkZWNvZGVycy5wdXNoKHpsaWIuY3JlYXRlQnJvdGxpRGVjb21wcmVzcygpKVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRlY29kZXJzLmxlbmd0aCA9IDBcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgICBzdGF0dXNUZXh0LFxuICAgICAgICAgICAgaGVhZGVyc0xpc3Q6IGhlYWRlcnNba0hlYWRlcnNMaXN0XSxcbiAgICAgICAgICAgIGJvZHk6IGRlY29kZXJzLmxlbmd0aFxuICAgICAgICAgICAgICA/IHBpcGVsaW5lKHRoaXMuYm9keSwgLi4uZGVjb2RlcnMsICgpID0+IHsgfSlcbiAgICAgICAgICAgICAgOiB0aGlzLmJvZHkub24oJ2Vycm9yJywgKCkgPT4ge30pXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH0sXG5cbiAgICAgICAgb25EYXRhIChjaHVuaykge1xuICAgICAgICAgIGlmIChmZXRjaFBhcmFtcy5jb250cm9sbGVyLmR1bXApIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDEuIElmIG9uZSBvciBtb3JlIGJ5dGVzIGhhdmUgYmVlbiB0cmFuc21pdHRlZCBmcm9tIHJlc3BvbnNl4oCZc1xuICAgICAgICAgIC8vIG1lc3NhZ2UgYm9keSwgdGhlbjpcblxuICAgICAgICAgIC8vICAxLiBMZXQgYnl0ZXMgYmUgdGhlIHRyYW5zbWl0dGVkIGJ5dGVzLlxuICAgICAgICAgIGNvbnN0IGJ5dGVzID0gY2h1bmtcblxuICAgICAgICAgIC8vICAyLiBMZXQgY29kaW5ncyBiZSB0aGUgcmVzdWx0IG9mIGV4dHJhY3RpbmcgaGVhZGVyIGxpc3QgdmFsdWVzXG4gICAgICAgICAgLy8gIGdpdmVuIGBDb250ZW50LUVuY29kaW5nYCBhbmQgcmVzcG9uc2XigJlzIGhlYWRlciBsaXN0LlxuICAgICAgICAgIC8vICBTZWUgcHVsbEFsZ29yaXRobS5cblxuICAgICAgICAgIC8vICAzLiBJbmNyZWFzZSB0aW1pbmdJbmZv4oCZcyBlbmNvZGVkIGJvZHkgc2l6ZSBieSBieXRlc+KAmXMgbGVuZ3RoLlxuICAgICAgICAgIHRpbWluZ0luZm8uZW5jb2RlZEJvZHlTaXplICs9IGJ5dGVzLmJ5dGVMZW5ndGhcblxuICAgICAgICAgIC8vICA0LiBTZWUgcHVsbEFsZ29yaXRobS4uLlxuXG4gICAgICAgICAgcmV0dXJuIHRoaXMuYm9keS5wdXNoKGJ5dGVzKVxuICAgICAgICB9LFxuXG4gICAgICAgIG9uQ29tcGxldGUgKCkge1xuICAgICAgICAgIGlmICh0aGlzLmFib3J0KSB7XG4gICAgICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLm9mZigndGVybWluYXRlZCcsIHRoaXMuYWJvcnQpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5lbmRlZCA9IHRydWVcblxuICAgICAgICAgIHRoaXMuYm9keS5wdXNoKG51bGwpXG4gICAgICAgIH0sXG5cbiAgICAgICAgb25FcnJvciAoZXJyb3IpIHtcbiAgICAgICAgICBpZiAodGhpcy5hYm9ydCkge1xuICAgICAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5vZmYoJ3Rlcm1pbmF0ZWQnLCB0aGlzLmFib3J0KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuYm9keT8uZGVzdHJveShlcnJvcilcblxuICAgICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIudGVybWluYXRlKGVycm9yKVxuXG4gICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICB9LFxuXG4gICAgICAgIG9uVXBncmFkZSAoc3RhdHVzLCBoZWFkZXJzTGlzdCwgc29ja2V0KSB7XG4gICAgICAgICAgaWYgKHN0YXR1cyAhPT0gMTAxKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKVxuXG4gICAgICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBoZWFkZXJzTGlzdC5sZW5ndGg7IG4gKz0gMikge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gaGVhZGVyc0xpc3RbbiArIDBdLnRvU3RyaW5nKCdsYXRpbjEnKVxuICAgICAgICAgICAgY29uc3QgdmFsID0gaGVhZGVyc0xpc3RbbiArIDFdLnRvU3RyaW5nKCdsYXRpbjEnKVxuXG4gICAgICAgICAgICBoZWFkZXJzW2tIZWFkZXJzTGlzdF0uYXBwZW5kKGtleSwgdmFsKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgICAgc3RhdHVzVGV4dDogU1RBVFVTX0NPREVTW3N0YXR1c10sXG4gICAgICAgICAgICBoZWFkZXJzTGlzdDogaGVhZGVyc1trSGVhZGVyc0xpc3RdLFxuICAgICAgICAgICAgc29ja2V0XG4gICAgICAgICAgfSlcblxuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBmZXRjaCxcbiAgRmV0Y2gsXG4gIGZldGNoaW5nLFxuICBmaW5hbGl6ZUFuZFJlcG9ydFRpbWluZ1xufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGtTdGF0ZTogU3ltYm9sKCdGaWxlUmVhZGVyIHN0YXRlJyksXG4gIGtSZXN1bHQ6IFN5bWJvbCgnRmlsZVJlYWRlciByZXN1bHQnKSxcbiAga0Vycm9yOiBTeW1ib2woJ0ZpbGVSZWFkZXIgZXJyb3InKSxcbiAga0xhc3RQcm9ncmVzc0V2ZW50RmlyZWQ6IFN5bWJvbCgnRmlsZVJlYWRlciBsYXN0IHByb2dyZXNzIGV2ZW50IGZpcmVkIHRpbWVzdGFtcCcpLFxuICBrRXZlbnRzOiBTeW1ib2woJ0ZpbGVSZWFkZXIgZXZlbnRzJyksXG4gIGtBYm9ydGVkOiBTeW1ib2woJ0ZpbGVSZWFkZXIgYWJvcnRlZCcpXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvd2ViaWRsJylcblxuY29uc3Qga1N0YXRlID0gU3ltYm9sKCdQcm9ncmVzc0V2ZW50IHN0YXRlJylcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8veGhyLnNwZWMud2hhdHdnLm9yZy8jcHJvZ3Jlc3NldmVudFxuICovXG5jbGFzcyBQcm9ncmVzc0V2ZW50IGV4dGVuZHMgRXZlbnQge1xuICBjb25zdHJ1Y3RvciAodHlwZSwgZXZlbnRJbml0RGljdCA9IHt9KSB7XG4gICAgdHlwZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyh0eXBlKVxuICAgIGV2ZW50SW5pdERpY3QgPSB3ZWJpZGwuY29udmVydGVycy5Qcm9ncmVzc0V2ZW50SW5pdChldmVudEluaXREaWN0ID8/IHt9KVxuXG4gICAgc3VwZXIodHlwZSwgZXZlbnRJbml0RGljdClcblxuICAgIHRoaXNba1N0YXRlXSA9IHtcbiAgICAgIGxlbmd0aENvbXB1dGFibGU6IGV2ZW50SW5pdERpY3QubGVuZ3RoQ29tcHV0YWJsZSxcbiAgICAgIGxvYWRlZDogZXZlbnRJbml0RGljdC5sb2FkZWQsXG4gICAgICB0b3RhbDogZXZlbnRJbml0RGljdC50b3RhbFxuICAgIH1cbiAgfVxuXG4gIGdldCBsZW5ndGhDb21wdXRhYmxlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBQcm9ncmVzc0V2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5sZW5ndGhDb21wdXRhYmxlXG4gIH1cblxuICBnZXQgbG9hZGVkICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBQcm9ncmVzc0V2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5sb2FkZWRcbiAgfVxuXG4gIGdldCB0b3RhbCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUHJvZ3Jlc3NFdmVudClcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0udG90YWxcbiAgfVxufVxuXG53ZWJpZGwuY29udmVydGVycy5Qcm9ncmVzc0V2ZW50SW5pdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGtleTogJ2xlbmd0aENvbXB1dGFibGUnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdsb2FkZWQnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIGxvbmcgbG9uZyddLFxuICAgIGRlZmF1bHRWYWx1ZTogMFxuICB9LFxuICB7XG4gICAga2V5OiAndG90YWwnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIGxvbmcgbG9uZyddLFxuICAgIGRlZmF1bHRWYWx1ZTogMFxuICB9LFxuICB7XG4gICAga2V5OiAnYnViYmxlcycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2VcbiAgfSxcbiAge1xuICAgIGtleTogJ2NhbmNlbGFibGUnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjb21wb3NlZCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2VcbiAgfVxuXSlcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFByb2dyZXNzRXZlbnRcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbi8qKlxuICogQHNlZSBodHRwczovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1lbmNvZGluZy1nZXRcbiAqIEBwYXJhbSB7c3RyaW5nfHVuZGVmaW5lZH0gbGFiZWxcbiAqL1xuZnVuY3Rpb24gZ2V0RW5jb2RpbmcgKGxhYmVsKSB7XG4gIGlmICghbGFiZWwpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICAvLyAxLiBSZW1vdmUgYW55IGxlYWRpbmcgYW5kIHRyYWlsaW5nIEFTQ0lJIHdoaXRlc3BhY2UgZnJvbSBsYWJlbC5cbiAgLy8gMi4gSWYgbGFiZWwgaXMgYW4gQVNDSUkgY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBmb3IgYW55IG9mIHRoZVxuICAvLyAgICBsYWJlbHMgbGlzdGVkIGluIHRoZSB0YWJsZSBiZWxvdywgdGhlbiByZXR1cm4gdGhlXG4gIC8vICAgIGNvcnJlc3BvbmRpbmcgZW5jb2Rpbmc7IG90aGVyd2lzZSByZXR1cm4gZmFpbHVyZS5cbiAgc3dpdGNoIChsYWJlbC50cmltKCkudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgJ3VuaWNvZGUtMS0xLXV0Zi04JzpcbiAgICBjYXNlICd1bmljb2RlMTF1dGY4JzpcbiAgICBjYXNlICd1bmljb2RlMjB1dGY4JzpcbiAgICBjYXNlICd1dGYtOCc6XG4gICAgY2FzZSAndXRmOCc6XG4gICAgY2FzZSAneC11bmljb2RlMjB1dGY4JzpcbiAgICAgIHJldHVybiAnVVRGLTgnXG4gICAgY2FzZSAnODY2JzpcbiAgICBjYXNlICdjcDg2Nic6XG4gICAgY2FzZSAnY3NpYm04NjYnOlxuICAgIGNhc2UgJ2libTg2Nic6XG4gICAgICByZXR1cm4gJ0lCTTg2NidcbiAgICBjYXNlICdjc2lzb2xhdGluMic6XG4gICAgY2FzZSAnaXNvLTg4NTktMic6XG4gICAgY2FzZSAnaXNvLWlyLTEwMSc6XG4gICAgY2FzZSAnaXNvODg1OS0yJzpcbiAgICBjYXNlICdpc284ODU5Mic6XG4gICAgY2FzZSAnaXNvXzg4NTktMic6XG4gICAgY2FzZSAnaXNvXzg4NTktMjoxOTg3JzpcbiAgICBjYXNlICdsMic6XG4gICAgY2FzZSAnbGF0aW4yJzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktMidcbiAgICBjYXNlICdjc2lzb2xhdGluMyc6XG4gICAgY2FzZSAnaXNvLTg4NTktMyc6XG4gICAgY2FzZSAnaXNvLWlyLTEwOSc6XG4gICAgY2FzZSAnaXNvODg1OS0zJzpcbiAgICBjYXNlICdpc284ODU5Myc6XG4gICAgY2FzZSAnaXNvXzg4NTktMyc6XG4gICAgY2FzZSAnaXNvXzg4NTktMzoxOTg4JzpcbiAgICBjYXNlICdsMyc6XG4gICAgY2FzZSAnbGF0aW4zJzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktMydcbiAgICBjYXNlICdjc2lzb2xhdGluNCc6XG4gICAgY2FzZSAnaXNvLTg4NTktNCc6XG4gICAgY2FzZSAnaXNvLWlyLTExMCc6XG4gICAgY2FzZSAnaXNvODg1OS00JzpcbiAgICBjYXNlICdpc284ODU5NCc6XG4gICAgY2FzZSAnaXNvXzg4NTktNCc6XG4gICAgY2FzZSAnaXNvXzg4NTktNDoxOTg4JzpcbiAgICBjYXNlICdsNCc6XG4gICAgY2FzZSAnbGF0aW40JzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktNCdcbiAgICBjYXNlICdjc2lzb2xhdGluY3lyaWxsaWMnOlxuICAgIGNhc2UgJ2N5cmlsbGljJzpcbiAgICBjYXNlICdpc28tODg1OS01JzpcbiAgICBjYXNlICdpc28taXItMTQ0JzpcbiAgICBjYXNlICdpc284ODU5LTUnOlxuICAgIGNhc2UgJ2lzbzg4NTk1JzpcbiAgICBjYXNlICdpc29fODg1OS01JzpcbiAgICBjYXNlICdpc29fODg1OS01OjE5ODgnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS01J1xuICAgIGNhc2UgJ2FyYWJpYyc6XG4gICAgY2FzZSAnYXNtby03MDgnOlxuICAgIGNhc2UgJ2NzaXNvODg1OTZlJzpcbiAgICBjYXNlICdjc2lzbzg4NTk2aSc6XG4gICAgY2FzZSAnY3Npc29sYXRpbmFyYWJpYyc6XG4gICAgY2FzZSAnZWNtYS0xMTQnOlxuICAgIGNhc2UgJ2lzby04ODU5LTYnOlxuICAgIGNhc2UgJ2lzby04ODU5LTYtZSc6XG4gICAgY2FzZSAnaXNvLTg4NTktNi1pJzpcbiAgICBjYXNlICdpc28taXItMTI3JzpcbiAgICBjYXNlICdpc284ODU5LTYnOlxuICAgIGNhc2UgJ2lzbzg4NTk2JzpcbiAgICBjYXNlICdpc29fODg1OS02JzpcbiAgICBjYXNlICdpc29fODg1OS02OjE5ODcnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS02J1xuICAgIGNhc2UgJ2NzaXNvbGF0aW5ncmVlayc6XG4gICAgY2FzZSAnZWNtYS0xMTgnOlxuICAgIGNhc2UgJ2Vsb3RfOTI4JzpcbiAgICBjYXNlICdncmVlayc6XG4gICAgY2FzZSAnZ3JlZWs4JzpcbiAgICBjYXNlICdpc28tODg1OS03JzpcbiAgICBjYXNlICdpc28taXItMTI2JzpcbiAgICBjYXNlICdpc284ODU5LTcnOlxuICAgIGNhc2UgJ2lzbzg4NTk3JzpcbiAgICBjYXNlICdpc29fODg1OS03JzpcbiAgICBjYXNlICdpc29fODg1OS03OjE5ODcnOlxuICAgIGNhc2UgJ3N1bl9ldV9ncmVlayc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTcnXG4gICAgY2FzZSAnY3Npc284ODU5OGUnOlxuICAgIGNhc2UgJ2NzaXNvbGF0aW5oZWJyZXcnOlxuICAgIGNhc2UgJ2hlYnJldyc6XG4gICAgY2FzZSAnaXNvLTg4NTktOCc6XG4gICAgY2FzZSAnaXNvLTg4NTktOC1lJzpcbiAgICBjYXNlICdpc28taXItMTM4JzpcbiAgICBjYXNlICdpc284ODU5LTgnOlxuICAgIGNhc2UgJ2lzbzg4NTk4JzpcbiAgICBjYXNlICdpc29fODg1OS04JzpcbiAgICBjYXNlICdpc29fODg1OS04OjE5ODgnOlxuICAgIGNhc2UgJ3Zpc3VhbCc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTgnXG4gICAgY2FzZSAnY3Npc284ODU5OGknOlxuICAgIGNhc2UgJ2lzby04ODU5LTgtaSc6XG4gICAgY2FzZSAnbG9naWNhbCc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTgtSSdcbiAgICBjYXNlICdjc2lzb2xhdGluNic6XG4gICAgY2FzZSAnaXNvLTg4NTktMTAnOlxuICAgIGNhc2UgJ2lzby1pci0xNTcnOlxuICAgIGNhc2UgJ2lzbzg4NTktMTAnOlxuICAgIGNhc2UgJ2lzbzg4NTkxMCc6XG4gICAgY2FzZSAnbDYnOlxuICAgIGNhc2UgJ2xhdGluNic6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTEwJ1xuICAgIGNhc2UgJ2lzby04ODU5LTEzJzpcbiAgICBjYXNlICdpc284ODU5LTEzJzpcbiAgICBjYXNlICdpc284ODU5MTMnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS0xMydcbiAgICBjYXNlICdpc28tODg1OS0xNCc6XG4gICAgY2FzZSAnaXNvODg1OS0xNCc6XG4gICAgY2FzZSAnaXNvODg1OTE0JzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktMTQnXG4gICAgY2FzZSAnY3Npc29sYXRpbjknOlxuICAgIGNhc2UgJ2lzby04ODU5LTE1JzpcbiAgICBjYXNlICdpc284ODU5LTE1JzpcbiAgICBjYXNlICdpc284ODU5MTUnOlxuICAgIGNhc2UgJ2lzb184ODU5LTE1JzpcbiAgICBjYXNlICdsOSc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTE1J1xuICAgIGNhc2UgJ2lzby04ODU5LTE2JzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktMTYnXG4gICAgY2FzZSAnY3Nrb2k4cic6XG4gICAgY2FzZSAna29pJzpcbiAgICBjYXNlICdrb2k4JzpcbiAgICBjYXNlICdrb2k4LXInOlxuICAgIGNhc2UgJ2tvaThfcic6XG4gICAgICByZXR1cm4gJ0tPSTgtUidcbiAgICBjYXNlICdrb2k4LXJ1JzpcbiAgICBjYXNlICdrb2k4LXUnOlxuICAgICAgcmV0dXJuICdLT0k4LVUnXG4gICAgY2FzZSAnY3NtYWNpbnRvc2gnOlxuICAgIGNhc2UgJ21hYyc6XG4gICAgY2FzZSAnbWFjaW50b3NoJzpcbiAgICBjYXNlICd4LW1hYy1yb21hbic6XG4gICAgICByZXR1cm4gJ21hY2ludG9zaCdcbiAgICBjYXNlICdpc28tODg1OS0xMSc6XG4gICAgY2FzZSAnaXNvODg1OS0xMSc6XG4gICAgY2FzZSAnaXNvODg1OTExJzpcbiAgICBjYXNlICd0aXMtNjIwJzpcbiAgICBjYXNlICd3aW5kb3dzLTg3NCc6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtODc0J1xuICAgIGNhc2UgJ2NwMTI1MCc6XG4gICAgY2FzZSAnd2luZG93cy0xMjUwJzpcbiAgICBjYXNlICd4LWNwMTI1MCc6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtMTI1MCdcbiAgICBjYXNlICdjcDEyNTEnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMTI1MSc6XG4gICAgY2FzZSAneC1jcDEyNTEnOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTEyNTEnXG4gICAgY2FzZSAnYW5zaV94My40LTE5NjgnOlxuICAgIGNhc2UgJ2FzY2lpJzpcbiAgICBjYXNlICdjcDEyNTInOlxuICAgIGNhc2UgJ2NwODE5JzpcbiAgICBjYXNlICdjc2lzb2xhdGluMSc6XG4gICAgY2FzZSAnaWJtODE5JzpcbiAgICBjYXNlICdpc28tODg1OS0xJzpcbiAgICBjYXNlICdpc28taXItMTAwJzpcbiAgICBjYXNlICdpc284ODU5LTEnOlxuICAgIGNhc2UgJ2lzbzg4NTkxJzpcbiAgICBjYXNlICdpc29fODg1OS0xJzpcbiAgICBjYXNlICdpc29fODg1OS0xOjE5ODcnOlxuICAgIGNhc2UgJ2wxJzpcbiAgICBjYXNlICdsYXRpbjEnOlxuICAgIGNhc2UgJ3VzLWFzY2lpJzpcbiAgICBjYXNlICd3aW5kb3dzLTEyNTInOlxuICAgIGNhc2UgJ3gtY3AxMjUyJzpcbiAgICAgIHJldHVybiAnd2luZG93cy0xMjUyJ1xuICAgIGNhc2UgJ2NwMTI1Myc6XG4gICAgY2FzZSAnd2luZG93cy0xMjUzJzpcbiAgICBjYXNlICd4LWNwMTI1Myc6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtMTI1MydcbiAgICBjYXNlICdjcDEyNTQnOlxuICAgIGNhc2UgJ2NzaXNvbGF0aW41JzpcbiAgICBjYXNlICdpc28tODg1OS05JzpcbiAgICBjYXNlICdpc28taXItMTQ4JzpcbiAgICBjYXNlICdpc284ODU5LTknOlxuICAgIGNhc2UgJ2lzbzg4NTk5JzpcbiAgICBjYXNlICdpc29fODg1OS05JzpcbiAgICBjYXNlICdpc29fODg1OS05OjE5ODknOlxuICAgIGNhc2UgJ2w1JzpcbiAgICBjYXNlICdsYXRpbjUnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMTI1NCc6XG4gICAgY2FzZSAneC1jcDEyNTQnOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTEyNTQnXG4gICAgY2FzZSAnY3AxMjU1JzpcbiAgICBjYXNlICd3aW5kb3dzLTEyNTUnOlxuICAgIGNhc2UgJ3gtY3AxMjU1JzpcbiAgICAgIHJldHVybiAnd2luZG93cy0xMjU1J1xuICAgIGNhc2UgJ2NwMTI1Nic6XG4gICAgY2FzZSAnd2luZG93cy0xMjU2JzpcbiAgICBjYXNlICd4LWNwMTI1Nic6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtMTI1NidcbiAgICBjYXNlICdjcDEyNTcnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMTI1Nyc6XG4gICAgY2FzZSAneC1jcDEyNTcnOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTEyNTcnXG4gICAgY2FzZSAnY3AxMjU4JzpcbiAgICBjYXNlICd3aW5kb3dzLTEyNTgnOlxuICAgIGNhc2UgJ3gtY3AxMjU4JzpcbiAgICAgIHJldHVybiAnd2luZG93cy0xMjU4J1xuICAgIGNhc2UgJ3gtbWFjLWN5cmlsbGljJzpcbiAgICBjYXNlICd4LW1hYy11a3JhaW5pYW4nOlxuICAgICAgcmV0dXJuICd4LW1hYy1jeXJpbGxpYydcbiAgICBjYXNlICdjaGluZXNlJzpcbiAgICBjYXNlICdjc2diMjMxMic6XG4gICAgY2FzZSAnY3Npc281OGdiMjMxMjgwJzpcbiAgICBjYXNlICdnYjIzMTInOlxuICAgIGNhc2UgJ2diXzIzMTInOlxuICAgIGNhc2UgJ2diXzIzMTItODAnOlxuICAgIGNhc2UgJ2diayc6XG4gICAgY2FzZSAnaXNvLWlyLTU4JzpcbiAgICBjYXNlICd4LWdiayc6XG4gICAgICByZXR1cm4gJ0dCSydcbiAgICBjYXNlICdnYjE4MDMwJzpcbiAgICAgIHJldHVybiAnZ2IxODAzMCdcbiAgICBjYXNlICdiaWc1JzpcbiAgICBjYXNlICdiaWc1LWhrc2NzJzpcbiAgICBjYXNlICdjbi1iaWc1JzpcbiAgICBjYXNlICdjc2JpZzUnOlxuICAgIGNhc2UgJ3gteC1iaWc1JzpcbiAgICAgIHJldHVybiAnQmlnNSdcbiAgICBjYXNlICdjc2V1Y3BrZGZtdGphcGFuZXNlJzpcbiAgICBjYXNlICdldWMtanAnOlxuICAgIGNhc2UgJ3gtZXVjLWpwJzpcbiAgICAgIHJldHVybiAnRVVDLUpQJ1xuICAgIGNhc2UgJ2NzaXNvMjAyMmpwJzpcbiAgICBjYXNlICdpc28tMjAyMi1qcCc6XG4gICAgICByZXR1cm4gJ0lTTy0yMDIyLUpQJ1xuICAgIGNhc2UgJ2Nzc2hpZnRqaXMnOlxuICAgIGNhc2UgJ21zOTMyJzpcbiAgICBjYXNlICdtc19rYW5qaSc6XG4gICAgY2FzZSAnc2hpZnQtamlzJzpcbiAgICBjYXNlICdzaGlmdF9qaXMnOlxuICAgIGNhc2UgJ3NqaXMnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMzFqJzpcbiAgICBjYXNlICd4LXNqaXMnOlxuICAgICAgcmV0dXJuICdTaGlmdF9KSVMnXG4gICAgY2FzZSAnY3NldWNrcic6XG4gICAgY2FzZSAnY3Nrc2M1NjAxMTk4Nyc6XG4gICAgY2FzZSAnZXVjLWtyJzpcbiAgICBjYXNlICdpc28taXItMTQ5JzpcbiAgICBjYXNlICdrb3JlYW4nOlxuICAgIGNhc2UgJ2tzX2NfNTYwMS0xOTg3JzpcbiAgICBjYXNlICdrc19jXzU2MDEtMTk4OSc6XG4gICAgY2FzZSAna3NjNTYwMSc6XG4gICAgY2FzZSAna3NjXzU2MDEnOlxuICAgIGNhc2UgJ3dpbmRvd3MtOTQ5JzpcbiAgICAgIHJldHVybiAnRVVDLUtSJ1xuICAgIGNhc2UgJ2NzaXNvMjAyMmtyJzpcbiAgICBjYXNlICdoei1nYi0yMzEyJzpcbiAgICBjYXNlICdpc28tMjAyMi1jbic6XG4gICAgY2FzZSAnaXNvLTIwMjItY24tZXh0JzpcbiAgICBjYXNlICdpc28tMjAyMi1rcic6XG4gICAgY2FzZSAncmVwbGFjZW1lbnQnOlxuICAgICAgcmV0dXJuICdyZXBsYWNlbWVudCdcbiAgICBjYXNlICd1bmljb2RlZmZmZSc6XG4gICAgY2FzZSAndXRmLTE2YmUnOlxuICAgICAgcmV0dXJuICdVVEYtMTZCRSdcbiAgICBjYXNlICdjc3VuaWNvZGUnOlxuICAgIGNhc2UgJ2lzby0xMDY0Ni11Y3MtMic6XG4gICAgY2FzZSAndWNzLTInOlxuICAgIGNhc2UgJ3VuaWNvZGUnOlxuICAgIGNhc2UgJ3VuaWNvZGVmZWZmJzpcbiAgICBjYXNlICd1dGYtMTYnOlxuICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgIHJldHVybiAnVVRGLTE2TEUnXG4gICAgY2FzZSAneC11c2VyLWRlZmluZWQnOlxuICAgICAgcmV0dXJuICd4LXVzZXItZGVmaW5lZCdcbiAgICBkZWZhdWx0OiByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldEVuY29kaW5nXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIGtTdGF0ZSxcbiAga0Vycm9yLFxuICBrUmVzdWx0LFxuICBrQWJvcnRlZCxcbiAga0xhc3RQcm9ncmVzc0V2ZW50RmlyZWRcbn0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBQcm9ncmVzc0V2ZW50IH0gPSByZXF1aXJlKCcuL3Byb2dyZXNzZXZlbnQnKVxuY29uc3QgeyBnZXRFbmNvZGluZyB9ID0gcmVxdWlyZSgnLi9lbmNvZGluZycpXG5jb25zdCB7IERPTUV4Y2VwdGlvbiB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvY29uc3RhbnRzJylcbmNvbnN0IHsgc2VyaWFsaXplQU1pbWVUeXBlLCBwYXJzZU1JTUVUeXBlIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9kYXRhVVJMJylcbmNvbnN0IHsgdHlwZXMgfSA9IHJlcXVpcmUoJ3V0aWwnKVxuY29uc3QgeyBTdHJpbmdEZWNvZGVyIH0gPSByZXF1aXJlKCdzdHJpbmdfZGVjb2RlcicpXG5jb25zdCB7IGJ0b2EgfSA9IHJlcXVpcmUoJ2J1ZmZlcicpXG5cbi8qKiBAdHlwZSB7UHJvcGVydHlEZXNjcmlwdG9yfSAqL1xuY29uc3Qgc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyA9IHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgd3JpdGFibGU6IGZhbHNlLFxuICBjb25maWd1cmFibGU6IGZhbHNlXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jcmVhZE9wZXJhdGlvblxuICogQHBhcmFtIHtpbXBvcnQoJy4vZmlsZXJlYWRlcicpLkZpbGVSZWFkZXJ9IGZyXG4gKiBAcGFyYW0ge2ltcG9ydCgnYnVmZmVyJykuQmxvYn0gYmxvYlxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nP30gZW5jb2RpbmdOYW1lXG4gKi9cbmZ1bmN0aW9uIHJlYWRPcGVyYXRpb24gKGZyLCBibG9iLCB0eXBlLCBlbmNvZGluZ05hbWUpIHtcbiAgLy8gMS4gSWYgZnLigJlzIHN0YXRlIGlzIFwibG9hZGluZ1wiLCB0aHJvdyBhbiBJbnZhbGlkU3RhdGVFcnJvclxuICAvLyAgICBET01FeGNlcHRpb24uXG4gIGlmIChmcltrU3RhdGVdID09PSAnbG9hZGluZycpIHtcbiAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCdJbnZhbGlkIHN0YXRlJywgJ0ludmFsaWRTdGF0ZUVycm9yJylcbiAgfVxuXG4gIC8vIDIuIFNldCBmcuKAmXMgc3RhdGUgdG8gXCJsb2FkaW5nXCIuXG4gIGZyW2tTdGF0ZV0gPSAnbG9hZGluZydcblxuICAvLyAzLiBTZXQgZnLigJlzIHJlc3VsdCB0byBudWxsLlxuICBmcltrUmVzdWx0XSA9IG51bGxcblxuICAvLyA0LiBTZXQgZnLigJlzIGVycm9yIHRvIG51bGwuXG4gIGZyW2tFcnJvcl0gPSBudWxsXG5cbiAgLy8gNS4gTGV0IHN0cmVhbSBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgZ2V0IHN0cmVhbSBvbiBibG9iLlxuICAvKiogQHR5cGUge2ltcG9ydCgnc3RyZWFtL3dlYicpLlJlYWRhYmxlU3RyZWFtfSAqL1xuICBjb25zdCBzdHJlYW0gPSBibG9iLnN0cmVhbSgpXG5cbiAgLy8gNi4gTGV0IHJlYWRlciBiZSB0aGUgcmVzdWx0IG9mIGdldHRpbmcgYSByZWFkZXIgZnJvbSBzdHJlYW0uXG4gIGNvbnN0IHJlYWRlciA9IHN0cmVhbS5nZXRSZWFkZXIoKVxuXG4gIC8vIDcuIExldCBieXRlcyBiZSBhbiBlbXB0eSBieXRlIHNlcXVlbmNlLlxuICAvKiogQHR5cGUge1VpbnQ4QXJyYXlbXX0gKi9cbiAgY29uc3QgYnl0ZXMgPSBbXVxuXG4gIC8vIDguIExldCBjaHVua1Byb21pc2UgYmUgdGhlIHJlc3VsdCBvZiByZWFkaW5nIGEgY2h1bmsgZnJvbVxuICAvLyAgICBzdHJlYW0gd2l0aCByZWFkZXIuXG4gIGxldCBjaHVua1Byb21pc2UgPSByZWFkZXIucmVhZCgpXG5cbiAgLy8gOS4gTGV0IGlzRmlyc3RDaHVuayBiZSB0cnVlLlxuICBsZXQgaXNGaXJzdENodW5rID0gdHJ1ZVxuXG4gIC8vIDEwLiBJbiBwYXJhbGxlbCwgd2hpbGUgdHJ1ZTpcbiAgLy8gTm90ZTogXCJJbiBwYXJhbGxlbFwiIGp1c3QgbWVhbnMgbm9uLWJsb2NraW5nXG4gIC8vIE5vdGUgMjogcmVhZE9wZXJhdGlvbiBpdHNlbGYgY2Fubm90IGJlIGFzeW5jIGFzIGRvdWJsZVxuICAvLyByZWFkaW5nIHRoZSBib2R5IHdvdWxkIHRoZW4gcmVqZWN0IHRoZSBwcm9taXNlLCBpbnN0ZWFkXG4gIC8vIG9mIHRocm93aW5nIGFuIGVycm9yLlxuICA7KGFzeW5jICgpID0+IHtcbiAgICB3aGlsZSAoIWZyW2tBYm9ydGVkXSkge1xuICAgICAgLy8gMS4gV2FpdCBmb3IgY2h1bmtQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZCBvciByZWplY3RlZC5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IGNodW5rUHJvbWlzZVxuXG4gICAgICAgIC8vIDIuIElmIGNodW5rUHJvbWlzZSBpcyBmdWxmaWxsZWQsIGFuZCBpc0ZpcnN0Q2h1bmsgaXNcbiAgICAgICAgLy8gICAgdHJ1ZSwgcXVldWUgYSB0YXNrIHRvIGZpcmUgYSBwcm9ncmVzcyBldmVudCBjYWxsZWRcbiAgICAgICAgLy8gICAgbG9hZHN0YXJ0IGF0IGZyLlxuICAgICAgICBpZiAoaXNGaXJzdENodW5rICYmICFmcltrQWJvcnRlZF0pIHtcbiAgICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgICAgICBmaXJlQVByb2dyZXNzRXZlbnQoJ2xvYWRzdGFydCcsIGZyKVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgICAgICAvLyAzLiBTZXQgaXNGaXJzdENodW5rIHRvIGZhbHNlLlxuICAgICAgICBpc0ZpcnN0Q2h1bmsgPSBmYWxzZVxuXG4gICAgICAgIC8vIDQuIElmIGNodW5rUHJvbWlzZSBpcyBmdWxmaWxsZWQgd2l0aCBhbiBvYmplY3Qgd2hvc2VcbiAgICAgICAgLy8gICAgZG9uZSBwcm9wZXJ0eSBpcyBmYWxzZSBhbmQgd2hvc2UgdmFsdWUgcHJvcGVydHkgaXNcbiAgICAgICAgLy8gICAgYSBVaW50OEFycmF5IG9iamVjdCwgcnVuIHRoZXNlIHN0ZXBzOlxuICAgICAgICBpZiAoIWRvbmUgJiYgdHlwZXMuaXNVaW50OEFycmF5KHZhbHVlKSkge1xuICAgICAgICAgIC8vIDEuIExldCBicyBiZSB0aGUgYnl0ZSBzZXF1ZW5jZSByZXByZXNlbnRlZCBieSB0aGVcbiAgICAgICAgICAvLyAgICBVaW50OEFycmF5IG9iamVjdC5cblxuICAgICAgICAgIC8vIDIuIEFwcGVuZCBicyB0byBieXRlcy5cbiAgICAgICAgICBieXRlcy5wdXNoKHZhbHVlKVxuXG4gICAgICAgICAgLy8gMy4gSWYgcm91Z2hseSA1MG1zIGhhdmUgcGFzc2VkIHNpbmNlIHRoZXNlIHN0ZXBzXG4gICAgICAgICAgLy8gICAgd2VyZSBsYXN0IGludm9rZWQsIHF1ZXVlIGEgdGFzayB0byBmaXJlIGFcbiAgICAgICAgICAvLyAgICBwcm9ncmVzcyBldmVudCBjYWxsZWQgcHJvZ3Jlc3MgYXQgZnIuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgKFxuICAgICAgICAgICAgICBmcltrTGFzdFByb2dyZXNzRXZlbnRGaXJlZF0gPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICBEYXRlLm5vdygpIC0gZnJba0xhc3RQcm9ncmVzc0V2ZW50RmlyZWRdID49IDUwXG4gICAgICAgICAgICApICYmXG4gICAgICAgICAgICAhZnJba0Fib3J0ZWRdXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBmcltrTGFzdFByb2dyZXNzRXZlbnRGaXJlZF0gPSBEYXRlLm5vdygpXG4gICAgICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgICAgICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgncHJvZ3Jlc3MnLCBmcilcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gNC4gU2V0IGNodW5rUHJvbWlzZSB0byB0aGUgcmVzdWx0IG9mIHJlYWRpbmcgYVxuICAgICAgICAgIC8vICAgIGNodW5rIGZyb20gc3RyZWFtIHdpdGggcmVhZGVyLlxuICAgICAgICAgIGNodW5rUHJvbWlzZSA9IHJlYWRlci5yZWFkKClcbiAgICAgICAgfSBlbHNlIGlmIChkb25lKSB7XG4gICAgICAgICAgLy8gNS4gT3RoZXJ3aXNlLCBpZiBjaHVua1Byb21pc2UgaXMgZnVsZmlsbGVkIHdpdGggYW5cbiAgICAgICAgICAvLyAgICBvYmplY3Qgd2hvc2UgZG9uZSBwcm9wZXJ0eSBpcyB0cnVlLCBxdWV1ZSBhIHRhc2tcbiAgICAgICAgICAvLyAgICB0byBydW4gdGhlIGZvbGxvd2luZyBzdGVwcyBhbmQgYWJvcnQgdGhpcyBhbGdvcml0aG06XG4gICAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICAgICAgLy8gMS4gU2V0IGZy4oCZcyBzdGF0ZSB0byBcImRvbmVcIi5cbiAgICAgICAgICAgIGZyW2tTdGF0ZV0gPSAnZG9uZSdcblxuICAgICAgICAgICAgLy8gMi4gTGV0IHJlc3VsdCBiZSB0aGUgcmVzdWx0IG9mIHBhY2thZ2UgZGF0YSBnaXZlblxuICAgICAgICAgICAgLy8gICAgYnl0ZXMsIHR5cGUsIGJsb2LigJlzIHR5cGUsIGFuZCBlbmNvZGluZ05hbWUuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYWNrYWdlRGF0YShieXRlcywgdHlwZSwgYmxvYi50eXBlLCBlbmNvZGluZ05hbWUpXG5cbiAgICAgICAgICAgICAgLy8gNC4gRWxzZTpcblxuICAgICAgICAgICAgICBpZiAoZnJba0Fib3J0ZWRdKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAvLyAxLiBTZXQgZnLigJlzIHJlc3VsdCB0byByZXN1bHQuXG4gICAgICAgICAgICAgIGZyW2tSZXN1bHRdID0gcmVzdWx0XG5cbiAgICAgICAgICAgICAgLy8gMi4gRmlyZSBhIHByb2dyZXNzIGV2ZW50IGNhbGxlZCBsb2FkIGF0IHRoZSBmci5cbiAgICAgICAgICAgICAgZmlyZUFQcm9ncmVzc0V2ZW50KCdsb2FkJywgZnIpXG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAvLyAzLiBJZiBwYWNrYWdlIGRhdGEgdGhyZXcgYW4gZXhjZXB0aW9uIGVycm9yOlxuXG4gICAgICAgICAgICAgIC8vIDEuIFNldCBmcuKAmXMgZXJyb3IgdG8gZXJyb3IuXG4gICAgICAgICAgICAgIGZyW2tFcnJvcl0gPSBlcnJvclxuXG4gICAgICAgICAgICAgIC8vIDIuIEZpcmUgYSBwcm9ncmVzcyBldmVudCBjYWxsZWQgZXJyb3IgYXQgZnIuXG4gICAgICAgICAgICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgnZXJyb3InLCBmcilcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gNS4gSWYgZnLigJlzIHN0YXRlIGlzIG5vdCBcImxvYWRpbmdcIiwgZmlyZSBhIHByb2dyZXNzXG4gICAgICAgICAgICAvLyAgICBldmVudCBjYWxsZWQgbG9hZGVuZCBhdCB0aGUgZnIuXG4gICAgICAgICAgICBpZiAoZnJba1N0YXRlXSAhPT0gJ2xvYWRpbmcnKSB7XG4gICAgICAgICAgICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgnbG9hZGVuZCcsIGZyKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoZnJba0Fib3J0ZWRdKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICAvLyA2LiBPdGhlcndpc2UsIGlmIGNodW5rUHJvbWlzZSBpcyByZWplY3RlZCB3aXRoIGFuXG4gICAgICAgIC8vICAgIGVycm9yIGVycm9yLCBxdWV1ZSBhIHRhc2sgdG8gcnVuIHRoZSBmb2xsb3dpbmdcbiAgICAgICAgLy8gICAgc3RlcHMgYW5kIGFib3J0IHRoaXMgYWxnb3JpdGhtOlxuICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgICAgLy8gMS4gU2V0IGZy4oCZcyBzdGF0ZSB0byBcImRvbmVcIi5cbiAgICAgICAgICBmcltrU3RhdGVdID0gJ2RvbmUnXG5cbiAgICAgICAgICAvLyAyLiBTZXQgZnLigJlzIGVycm9yIHRvIGVycm9yLlxuICAgICAgICAgIGZyW2tFcnJvcl0gPSBlcnJvclxuXG4gICAgICAgICAgLy8gMy4gRmlyZSBhIHByb2dyZXNzIGV2ZW50IGNhbGxlZCBlcnJvciBhdCBmci5cbiAgICAgICAgICBmaXJlQVByb2dyZXNzRXZlbnQoJ2Vycm9yJywgZnIpXG5cbiAgICAgICAgICAvLyA0LiBJZiBmcuKAmXMgc3RhdGUgaXMgbm90IFwibG9hZGluZ1wiLCBmaXJlIGEgcHJvZ3Jlc3NcbiAgICAgICAgICAvLyAgICBldmVudCBjYWxsZWQgbG9hZGVuZCBhdCBmci5cbiAgICAgICAgICBpZiAoZnJba1N0YXRlXSAhPT0gJ2xvYWRpbmcnKSB7XG4gICAgICAgICAgICBmaXJlQVByb2dyZXNzRXZlbnQoJ2xvYWRlbmQnLCBmcilcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG5cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gIH0pKClcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNmaXJlLWEtcHJvZ3Jlc3MtZXZlbnRcbiAqIEBzZWUgaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWV2ZW50LWZpcmVcbiAqIEBwYXJhbSB7c3RyaW5nfSBlIFRoZSBuYW1lIG9mIHRoZSBldmVudFxuICogQHBhcmFtIHtpbXBvcnQoJy4vZmlsZXJlYWRlcicpLkZpbGVSZWFkZXJ9IHJlYWRlclxuICovXG5mdW5jdGlvbiBmaXJlQVByb2dyZXNzRXZlbnQgKGUsIHJlYWRlcikge1xuICAvLyBUaGUgcHJvZ3Jlc3MgZXZlbnQgZSBkb2VzIG5vdCBidWJibGUuIGUuYnViYmxlcyBtdXN0IGJlIGZhbHNlXG4gIC8vIFRoZSBwcm9ncmVzcyBldmVudCBlIGlzIE5PVCBjYW5jZWxhYmxlLiBlLmNhbmNlbGFibGUgbXVzdCBiZSBmYWxzZVxuICBjb25zdCBldmVudCA9IG5ldyBQcm9ncmVzc0V2ZW50KGUsIHtcbiAgICBidWJibGVzOiBmYWxzZSxcbiAgICBjYW5jZWxhYmxlOiBmYWxzZVxuICB9KVxuXG4gIHJlYWRlci5kaXNwYXRjaEV2ZW50KGV2ZW50KVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2Jsb2ItcGFja2FnZS1kYXRhXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXlbXX0gYnl0ZXNcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge3N0cmluZz99IG1pbWVUeXBlXG4gKiBAcGFyYW0ge3N0cmluZz99IGVuY29kaW5nTmFtZVxuICovXG5mdW5jdGlvbiBwYWNrYWdlRGF0YSAoYnl0ZXMsIHR5cGUsIG1pbWVUeXBlLCBlbmNvZGluZ05hbWUpIHtcbiAgLy8gMS4gQSBCbG9iIGhhcyBhbiBhc3NvY2lhdGVkIHBhY2thZ2UgZGF0YSBhbGdvcml0aG0sIGdpdmVuXG4gIC8vICAgIGJ5dGVzLCBhIHR5cGUsIGEgb3B0aW9uYWwgbWltZVR5cGUsIGFuZCBhIG9wdGlvbmFsXG4gIC8vICAgIGVuY29kaW5nTmFtZSwgd2hpY2ggc3dpdGNoZXMgb24gdHlwZSBhbmQgcnVucyB0aGVcbiAgLy8gICAgYXNzb2NpYXRlZCBzdGVwczpcblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdEYXRhVVJMJzoge1xuICAgICAgLy8gMS4gUmV0dXJuIGJ5dGVzIGFzIGEgRGF0YVVSTCBbUkZDMjM5N10gc3ViamVjdCB0b1xuICAgICAgLy8gICAgdGhlIGNvbnNpZGVyYXRpb25zIGJlbG93OlxuICAgICAgLy8gICogVXNlIG1pbWVUeXBlIGFzIHBhcnQgb2YgdGhlIERhdGEgVVJMIGlmIGl0IGlzXG4gICAgICAvLyAgICBhdmFpbGFibGUgaW4ga2VlcGluZyB3aXRoIHRoZSBEYXRhIFVSTFxuICAgICAgLy8gICAgc3BlY2lmaWNhdGlvbiBbUkZDMjM5N10uXG4gICAgICAvLyAgKiBJZiBtaW1lVHlwZSBpcyBub3QgYXZhaWxhYmxlIHJldHVybiBhIERhdGEgVVJMXG4gICAgICAvLyAgICB3aXRob3V0IGEgbWVkaWEtdHlwZS4gW1JGQzIzOTddLlxuXG4gICAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzIzOTcjc2VjdGlvbi0zXG4gICAgICAvLyBkYXRhdXJsICAgIDo9IFwiZGF0YTpcIiBbIG1lZGlhdHlwZSBdIFsgXCI7YmFzZTY0XCIgXSBcIixcIiBkYXRhXG4gICAgICAvLyBtZWRpYXR5cGUgIDo9IFsgdHlwZSBcIi9cIiBzdWJ0eXBlIF0gKiggXCI7XCIgcGFyYW1ldGVyIClcbiAgICAgIC8vIGRhdGEgICAgICAgOj0gKnVybGNoYXJcbiAgICAgIC8vIHBhcmFtZXRlciAgOj0gYXR0cmlidXRlIFwiPVwiIHZhbHVlXG4gICAgICBsZXQgZGF0YVVSTCA9ICdkYXRhOidcblxuICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VNSU1FVHlwZShtaW1lVHlwZSB8fCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJylcblxuICAgICAgaWYgKHBhcnNlZCAhPT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgIGRhdGFVUkwgKz0gc2VyaWFsaXplQU1pbWVUeXBlKHBhcnNlZClcbiAgICAgIH1cblxuICAgICAgZGF0YVVSTCArPSAnO2Jhc2U2NCwnXG5cbiAgICAgIGNvbnN0IGRlY29kZXIgPSBuZXcgU3RyaW5nRGVjb2RlcignbGF0aW4xJylcblxuICAgICAgZm9yIChjb25zdCBjaHVuayBvZiBieXRlcykge1xuICAgICAgICBkYXRhVVJMICs9IGJ0b2EoZGVjb2Rlci53cml0ZShjaHVuaykpXG4gICAgICB9XG5cbiAgICAgIGRhdGFVUkwgKz0gYnRvYShkZWNvZGVyLmVuZCgpKVxuXG4gICAgICByZXR1cm4gZGF0YVVSTFxuICAgIH1cbiAgICBjYXNlICdUZXh0Jzoge1xuICAgICAgLy8gMS4gTGV0IGVuY29kaW5nIGJlIGZhaWx1cmVcbiAgICAgIGxldCBlbmNvZGluZyA9ICdmYWlsdXJlJ1xuXG4gICAgICAvLyAyLiBJZiB0aGUgZW5jb2RpbmdOYW1lIGlzIHByZXNlbnQsIHNldCBlbmNvZGluZyB0byB0aGVcbiAgICAgIC8vICAgIHJlc3VsdCBvZiBnZXR0aW5nIGFuIGVuY29kaW5nIGZyb20gZW5jb2RpbmdOYW1lLlxuICAgICAgaWYgKGVuY29kaW5nTmFtZSkge1xuICAgICAgICBlbmNvZGluZyA9IGdldEVuY29kaW5nKGVuY29kaW5nTmFtZSlcbiAgICAgIH1cblxuICAgICAgLy8gMy4gSWYgZW5jb2RpbmcgaXMgZmFpbHVyZSwgYW5kIG1pbWVUeXBlIGlzIHByZXNlbnQ6XG4gICAgICBpZiAoZW5jb2RpbmcgPT09ICdmYWlsdXJlJyAmJiBtaW1lVHlwZSkge1xuICAgICAgICAvLyAxLiBMZXQgdHlwZSBiZSB0aGUgcmVzdWx0IG9mIHBhcnNlIGEgTUlNRSB0eXBlXG4gICAgICAgIC8vICAgIGdpdmVuIG1pbWVUeXBlLlxuICAgICAgICBjb25zdCB0eXBlID0gcGFyc2VNSU1FVHlwZShtaW1lVHlwZSlcblxuICAgICAgICAvLyAyLiBJZiB0eXBlIGlzIG5vdCBmYWlsdXJlLCBzZXQgZW5jb2RpbmcgdG8gdGhlIHJlc3VsdFxuICAgICAgICAvLyAgICBvZiBnZXR0aW5nIGFuIGVuY29kaW5nIGZyb20gdHlwZeKAmXMgcGFyYW1ldGVyc1tcImNoYXJzZXRcIl0uXG4gICAgICAgIGlmICh0eXBlICE9PSAnZmFpbHVyZScpIHtcbiAgICAgICAgICBlbmNvZGluZyA9IGdldEVuY29kaW5nKHR5cGUucGFyYW1ldGVycy5nZXQoJ2NoYXJzZXQnKSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyA0LiBJZiBlbmNvZGluZyBpcyBmYWlsdXJlLCB0aGVuIHNldCBlbmNvZGluZyB0byBVVEYtOC5cbiAgICAgIGlmIChlbmNvZGluZyA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgIGVuY29kaW5nID0gJ1VURi04J1xuICAgICAgfVxuXG4gICAgICAvLyA1LiBEZWNvZGUgYnl0ZXMgdXNpbmcgZmFsbGJhY2sgZW5jb2RpbmcgZW5jb2RpbmcsIGFuZFxuICAgICAgLy8gICAgcmV0dXJuIHRoZSByZXN1bHQuXG4gICAgICByZXR1cm4gZGVjb2RlKGJ5dGVzLCBlbmNvZGluZylcbiAgICB9XG4gICAgY2FzZSAnQXJyYXlCdWZmZXInOiB7XG4gICAgICAvLyBSZXR1cm4gYSBuZXcgQXJyYXlCdWZmZXIgd2hvc2UgY29udGVudHMgYXJlIGJ5dGVzLlxuICAgICAgY29uc3Qgc2VxdWVuY2UgPSBjb21iaW5lQnl0ZVNlcXVlbmNlcyhieXRlcylcblxuICAgICAgcmV0dXJuIHNlcXVlbmNlLmJ1ZmZlclxuICAgIH1cbiAgICBjYXNlICdCaW5hcnlTdHJpbmcnOiB7XG4gICAgICAvLyBSZXR1cm4gYnl0ZXMgYXMgYSBiaW5hcnkgc3RyaW5nLCBpbiB3aGljaCBldmVyeSBieXRlXG4gICAgICAvLyAgaXMgcmVwcmVzZW50ZWQgYnkgYSBjb2RlIHVuaXQgb2YgZXF1YWwgdmFsdWUgWzAuLjI1NV0uXG4gICAgICBsZXQgYmluYXJ5U3RyaW5nID0gJydcblxuICAgICAgY29uc3QgZGVjb2RlciA9IG5ldyBTdHJpbmdEZWNvZGVyKCdsYXRpbjEnKVxuXG4gICAgICBmb3IgKGNvbnN0IGNodW5rIG9mIGJ5dGVzKSB7XG4gICAgICAgIGJpbmFyeVN0cmluZyArPSBkZWNvZGVyLndyaXRlKGNodW5rKVxuICAgICAgfVxuXG4gICAgICBiaW5hcnlTdHJpbmcgKz0gZGVjb2Rlci5lbmQoKVxuXG4gICAgICByZXR1cm4gYmluYXJ5U3RyaW5nXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy8jZGVjb2RlXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXlbXX0gaW9RdWV1ZVxuICogQHBhcmFtIHtzdHJpbmd9IGVuY29kaW5nXG4gKi9cbmZ1bmN0aW9uIGRlY29kZSAoaW9RdWV1ZSwgZW5jb2RpbmcpIHtcbiAgY29uc3QgYnl0ZXMgPSBjb21iaW5lQnl0ZVNlcXVlbmNlcyhpb1F1ZXVlKVxuXG4gIC8vIDEuIExldCBCT01FbmNvZGluZyBiZSB0aGUgcmVzdWx0IG9mIEJPTSBzbmlmZmluZyBpb1F1ZXVlLlxuICBjb25zdCBCT01FbmNvZGluZyA9IEJPTVNuaWZmaW5nKGJ5dGVzKVxuXG4gIGxldCBzbGljZSA9IDBcblxuICAvLyAyLiBJZiBCT01FbmNvZGluZyBpcyBub24tbnVsbDpcbiAgaWYgKEJPTUVuY29kaW5nICE9PSBudWxsKSB7XG4gICAgLy8gMS4gU2V0IGVuY29kaW5nIHRvIEJPTUVuY29kaW5nLlxuICAgIGVuY29kaW5nID0gQk9NRW5jb2RpbmdcblxuICAgIC8vIDIuIFJlYWQgdGhyZWUgYnl0ZXMgZnJvbSBpb1F1ZXVlLCBpZiBCT01FbmNvZGluZyBpc1xuICAgIC8vICAgIFVURi04OyBvdGhlcndpc2UgcmVhZCB0d28gYnl0ZXMuXG4gICAgLy8gICAgKERvIG5vdGhpbmcgd2l0aCB0aG9zZSBieXRlcy4pXG4gICAgc2xpY2UgPSBCT01FbmNvZGluZyA9PT0gJ1VURi04JyA/IDMgOiAyXG4gIH1cblxuICAvLyAzLiBQcm9jZXNzIGEgcXVldWUgd2l0aCBhbiBpbnN0YW5jZSBvZiBlbmNvZGluZ+KAmXNcbiAgLy8gICAgZGVjb2RlciwgaW9RdWV1ZSwgb3V0cHV0LCBhbmQgXCJyZXBsYWNlbWVudFwiLlxuXG4gIC8vIDQuIFJldHVybiBvdXRwdXQuXG5cbiAgY29uc3Qgc2xpY2VkID0gYnl0ZXMuc2xpY2Uoc2xpY2UpXG4gIHJldHVybiBuZXcgVGV4dERlY29kZXIoZW5jb2RpbmcpLmRlY29kZShzbGljZWQpXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy8jYm9tLXNuaWZmXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGlvUXVldWVcbiAqL1xuZnVuY3Rpb24gQk9NU25pZmZpbmcgKGlvUXVldWUpIHtcbiAgLy8gMS4gTGV0IEJPTSBiZSB0aGUgcmVzdWx0IG9mIHBlZWtpbmcgMyBieXRlcyBmcm9tIGlvUXVldWUsXG4gIC8vICAgIGNvbnZlcnRlZCB0byBhIGJ5dGUgc2VxdWVuY2UuXG4gIGNvbnN0IFthLCBiLCBjXSA9IGlvUXVldWVcblxuICAvLyAyLiBGb3IgZWFjaCBvZiB0aGUgcm93cyBpbiB0aGUgdGFibGUgYmVsb3csIHN0YXJ0aW5nIHdpdGhcbiAgLy8gICAgdGhlIGZpcnN0IG9uZSBhbmQgZ29pbmcgZG93biwgaWYgQk9NIHN0YXJ0cyB3aXRoIHRoZVxuICAvLyAgICBieXRlcyBnaXZlbiBpbiB0aGUgZmlyc3QgY29sdW1uLCB0aGVuIHJldHVybiB0aGVcbiAgLy8gICAgZW5jb2RpbmcgZ2l2ZW4gaW4gdGhlIGNlbGwgaW4gdGhlIHNlY29uZCBjb2x1bW4gb2YgdGhhdFxuICAvLyAgICByb3cuIE90aGVyd2lzZSwgcmV0dXJuIG51bGwuXG4gIGlmIChhID09PSAweEVGICYmIGIgPT09IDB4QkIgJiYgYyA9PT0gMHhCRikge1xuICAgIHJldHVybiAnVVRGLTgnXG4gIH0gZWxzZSBpZiAoYSA9PT0gMHhGRSAmJiBiID09PSAweEZGKSB7XG4gICAgcmV0dXJuICdVVEYtMTZCRSdcbiAgfSBlbHNlIGlmIChhID09PSAweEZGICYmIGIgPT09IDB4RkUpIHtcbiAgICByZXR1cm4gJ1VURi0xNkxFJ1xuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXlbXX0gc2VxdWVuY2VzXG4gKi9cbmZ1bmN0aW9uIGNvbWJpbmVCeXRlU2VxdWVuY2VzIChzZXF1ZW5jZXMpIHtcbiAgY29uc3Qgc2l6ZSA9IHNlcXVlbmNlcy5yZWR1Y2UoKGEsIGIpID0+IHtcbiAgICByZXR1cm4gYSArIGIuYnl0ZUxlbmd0aFxuICB9LCAwKVxuXG4gIGxldCBvZmZzZXQgPSAwXG5cbiAgcmV0dXJuIHNlcXVlbmNlcy5yZWR1Y2UoKGEsIGIpID0+IHtcbiAgICBhLnNldChiLCBvZmZzZXQpXG4gICAgb2Zmc2V0ICs9IGIuYnl0ZUxlbmd0aFxuICAgIHJldHVybiBhXG4gIH0sIG5ldyBVaW50OEFycmF5KHNpemUpKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgcmVhZE9wZXJhdGlvbixcbiAgZmlyZUFQcm9ncmVzc0V2ZW50XG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIHJlYWRPcGVyYXRpb24sXG4gIGZpcmVBUHJvZ3Jlc3NFdmVudFxufSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7XG4gIGtTdGF0ZSxcbiAga0Vycm9yLFxuICBrUmVzdWx0LFxuICBrRXZlbnRzLFxuICBrQWJvcnRlZFxufSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvd2ViaWRsJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcblxuY2xhc3MgRmlsZVJlYWRlciBleHRlbmRzIEV2ZW50VGFyZ2V0IHtcbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXNba1N0YXRlXSA9ICdlbXB0eSdcbiAgICB0aGlzW2tSZXN1bHRdID0gbnVsbFxuICAgIHRoaXNba0Vycm9yXSA9IG51bGxcbiAgICB0aGlzW2tFdmVudHNdID0ge1xuICAgICAgbG9hZGVuZDogbnVsbCxcbiAgICAgIGVycm9yOiBudWxsLFxuICAgICAgYWJvcnQ6IG51bGwsXG4gICAgICBsb2FkOiBudWxsLFxuICAgICAgcHJvZ3Jlc3M6IG51bGwsXG4gICAgICBsb2Fkc3RhcnQ6IG51bGxcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZGZuLXJlYWRBc0FycmF5QnVmZmVyXG4gICAqIEBwYXJhbSB7aW1wb3J0KCdidWZmZXInKS5CbG9ifSBibG9iXG4gICAqL1xuICByZWFkQXNBcnJheUJ1ZmZlciAoYmxvYikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRmlsZVJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcicgfSlcblxuICAgIGJsb2IgPSB3ZWJpZGwuY29udmVydGVycy5CbG9iKGJsb2IsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gICAgLy8gVGhlIHJlYWRBc0FycmF5QnVmZmVyKGJsb2IpIG1ldGhvZCwgd2hlbiBpbnZva2VkLFxuICAgIC8vIG11c3QgaW5pdGlhdGUgYSByZWFkIG9wZXJhdGlvbiBmb3IgYmxvYiB3aXRoIEFycmF5QnVmZmVyLlxuICAgIHJlYWRPcGVyYXRpb24odGhpcywgYmxvYiwgJ0FycmF5QnVmZmVyJylcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNyZWFkQXNCaW5hcnlTdHJpbmdcbiAgICogQHBhcmFtIHtpbXBvcnQoJ2J1ZmZlcicpLkJsb2J9IGJsb2JcbiAgICovXG4gIHJlYWRBc0JpbmFyeVN0cmluZyAoYmxvYikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRmlsZVJlYWRlci5yZWFkQXNCaW5hcnlTdHJpbmcnIH0pXG5cbiAgICBibG9iID0gd2ViaWRsLmNvbnZlcnRlcnMuQmxvYihibG9iLCB7IHN0cmljdDogZmFsc2UgfSlcblxuICAgIC8vIFRoZSByZWFkQXNCaW5hcnlTdHJpbmcoYmxvYikgbWV0aG9kLCB3aGVuIGludm9rZWQsXG4gICAgLy8gbXVzdCBpbml0aWF0ZSBhIHJlYWQgb3BlcmF0aW9uIGZvciBibG9iIHdpdGggQmluYXJ5U3RyaW5nLlxuICAgIHJlYWRPcGVyYXRpb24odGhpcywgYmxvYiwgJ0JpbmFyeVN0cmluZycpXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jcmVhZEFzRGF0YVRleHRcbiAgICogQHBhcmFtIHtpbXBvcnQoJ2J1ZmZlcicpLkJsb2J9IGJsb2JcbiAgICogQHBhcmFtIHtzdHJpbmc/fSBlbmNvZGluZ1xuICAgKi9cbiAgcmVhZEFzVGV4dCAoYmxvYiwgZW5jb2RpbmcgPSB1bmRlZmluZWQpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0ZpbGVSZWFkZXIucmVhZEFzVGV4dCcgfSlcblxuICAgIGJsb2IgPSB3ZWJpZGwuY29udmVydGVycy5CbG9iKGJsb2IsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gICAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGVuY29kaW5nID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKGVuY29kaW5nKVxuICAgIH1cblxuICAgIC8vIFRoZSByZWFkQXNUZXh0KGJsb2IsIGVuY29kaW5nKSBtZXRob2QsIHdoZW4gaW52b2tlZCxcbiAgICAvLyBtdXN0IGluaXRpYXRlIGEgcmVhZCBvcGVyYXRpb24gZm9yIGJsb2Igd2l0aCBUZXh0IGFuZCBlbmNvZGluZy5cbiAgICByZWFkT3BlcmF0aW9uKHRoaXMsIGJsb2IsICdUZXh0JywgZW5jb2RpbmcpXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZGZuLXJlYWRBc0RhdGFVUkxcbiAgICogQHBhcmFtIHtpbXBvcnQoJ2J1ZmZlcicpLkJsb2J9IGJsb2JcbiAgICovXG4gIHJlYWRBc0RhdGFVUkwgKGJsb2IpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0ZpbGVSZWFkZXIucmVhZEFzRGF0YVVSTCcgfSlcblxuICAgIGJsb2IgPSB3ZWJpZGwuY29udmVydGVycy5CbG9iKGJsb2IsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gICAgLy8gVGhlIHJlYWRBc0RhdGFVUkwoYmxvYikgbWV0aG9kLCB3aGVuIGludm9rZWQsIG11c3RcbiAgICAvLyBpbml0aWF0ZSBhIHJlYWQgb3BlcmF0aW9uIGZvciBibG9iIHdpdGggRGF0YVVSTC5cbiAgICByZWFkT3BlcmF0aW9uKHRoaXMsIGJsb2IsICdEYXRhVVJMJylcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNkZm4tYWJvcnRcbiAgICovXG4gIGFib3J0ICgpIHtcbiAgICAvLyAxLiBJZiB0aGlzJ3Mgc3RhdGUgaXMgXCJlbXB0eVwiIG9yIGlmIHRoaXMncyBzdGF0ZSBpc1xuICAgIC8vICAgIFwiZG9uZVwiIHNldCB0aGlzJ3MgcmVzdWx0IHRvIG51bGwgYW5kIHRlcm1pbmF0ZVxuICAgIC8vICAgIHRoaXMgYWxnb3JpdGhtLlxuICAgIGlmICh0aGlzW2tTdGF0ZV0gPT09ICdlbXB0eScgfHwgdGhpc1trU3RhdGVdID09PSAnZG9uZScpIHtcbiAgICAgIHRoaXNba1Jlc3VsdF0gPSBudWxsXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyAyLiBJZiB0aGlzJ3Mgc3RhdGUgaXMgXCJsb2FkaW5nXCIgc2V0IHRoaXMncyBzdGF0ZSB0b1xuICAgIC8vICAgIFwiZG9uZVwiIGFuZCBzZXQgdGhpcydzIHJlc3VsdCB0byBudWxsLlxuICAgIGlmICh0aGlzW2tTdGF0ZV0gPT09ICdsb2FkaW5nJykge1xuICAgICAgdGhpc1trU3RhdGVdID0gJ2RvbmUnXG4gICAgICB0aGlzW2tSZXN1bHRdID0gbnVsbFxuICAgIH1cblxuICAgIC8vIDMuIElmIHRoZXJlIGFyZSBhbnkgdGFza3MgZnJvbSB0aGlzIG9uIHRoZSBmaWxlIHJlYWRpbmdcbiAgICAvLyAgICB0YXNrIHNvdXJjZSBpbiBhbiBhZmZpbGlhdGVkIHRhc2sgcXVldWUsIHRoZW4gcmVtb3ZlXG4gICAgLy8gICAgdGhvc2UgdGFza3MgZnJvbSB0aGF0IHRhc2sgcXVldWUuXG4gICAgdGhpc1trQWJvcnRlZF0gPSB0cnVlXG5cbiAgICAvLyA0LiBUZXJtaW5hdGUgdGhlIGFsZ29yaXRobSBmb3IgdGhlIHJlYWQgbWV0aG9kIGJlaW5nIHByb2Nlc3NlZC5cbiAgICAvLyBUT0RPXG5cbiAgICAvLyA1LiBGaXJlIGEgcHJvZ3Jlc3MgZXZlbnQgY2FsbGVkIGFib3J0IGF0IHRoaXMuXG4gICAgZmlyZUFQcm9ncmVzc0V2ZW50KCdhYm9ydCcsIHRoaXMpXG5cbiAgICAvLyA2LiBJZiB0aGlzJ3Mgc3RhdGUgaXMgbm90IFwibG9hZGluZ1wiLCBmaXJlIGEgcHJvZ3Jlc3NcbiAgICAvLyAgICBldmVudCBjYWxsZWQgbG9hZGVuZCBhdCB0aGlzLlxuICAgIGlmICh0aGlzW2tTdGF0ZV0gIT09ICdsb2FkaW5nJykge1xuICAgICAgZmlyZUFQcm9ncmVzc0V2ZW50KCdsb2FkZW5kJywgdGhpcylcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZG9tLWZpbGVyZWFkZXItcmVhZHlzdGF0ZVxuICAgKi9cbiAgZ2V0IHJlYWR5U3RhdGUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICBzd2l0Y2ggKHRoaXNba1N0YXRlXSkge1xuICAgICAgY2FzZSAnZW1wdHknOiByZXR1cm4gdGhpcy5FTVBUWVxuICAgICAgY2FzZSAnbG9hZGluZyc6IHJldHVybiB0aGlzLkxPQURJTkdcbiAgICAgIGNhc2UgJ2RvbmUnOiByZXR1cm4gdGhpcy5ET05FXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2RvbS1maWxlcmVhZGVyLXJlc3VsdFxuICAgKi9cbiAgZ2V0IHJlc3VsdCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIC8vIFRoZSByZXN1bHQgYXR0cmlidXRl4oCZcyBnZXR0ZXIsIHdoZW4gaW52b2tlZCwgbXVzdCByZXR1cm5cbiAgICAvLyB0aGlzJ3MgcmVzdWx0LlxuICAgIHJldHVybiB0aGlzW2tSZXN1bHRdXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZG9tLWZpbGVyZWFkZXItZXJyb3JcbiAgICovXG4gIGdldCBlcnJvciAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIC8vIFRoZSBlcnJvciBhdHRyaWJ1dGXigJlzIGdldHRlciwgd2hlbiBpbnZva2VkLCBtdXN0IHJldHVyblxuICAgIC8vIHRoaXMncyBlcnJvci5cbiAgICByZXR1cm4gdGhpc1trRXJyb3JdXG4gIH1cblxuICBnZXQgb25sb2FkZW5kICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgcmV0dXJuIHRoaXNba0V2ZW50c10ubG9hZGVuZFxuICB9XG5cbiAgc2V0IG9ubG9hZGVuZCAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgaWYgKHRoaXNba0V2ZW50c10ubG9hZGVuZCkge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkZW5kJywgdGhpc1trRXZlbnRzXS5sb2FkZW5kKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXNba0V2ZW50c10ubG9hZGVuZCA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlbmQnLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trRXZlbnRzXS5sb2FkZW5kID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBvbmVycm9yICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgcmV0dXJuIHRoaXNba0V2ZW50c10uZXJyb3JcbiAgfVxuXG4gIHNldCBvbmVycm9yIChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICBpZiAodGhpc1trRXZlbnRzXS5lcnJvcikge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXNba0V2ZW50c10uZXJyb3IpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpc1trRXZlbnRzXS5lcnJvciA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgZm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNba0V2ZW50c10uZXJyb3IgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgZ2V0IG9ubG9hZHN0YXJ0ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgcmV0dXJuIHRoaXNba0V2ZW50c10ubG9hZHN0YXJ0XG4gIH1cblxuICBzZXQgb25sb2Fkc3RhcnQgKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIGlmICh0aGlzW2tFdmVudHNdLmxvYWRzdGFydCkge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2Fkc3RhcnQnLCB0aGlzW2tFdmVudHNdLmxvYWRzdGFydClcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmxvYWRzdGFydCA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRzdGFydCcsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmxvYWRzdGFydCA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgb25wcm9ncmVzcyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIHJldHVybiB0aGlzW2tFdmVudHNdLnByb2dyZXNzXG4gIH1cblxuICBzZXQgb25wcm9ncmVzcyAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgaWYgKHRoaXNba0V2ZW50c10ucHJvZ3Jlc3MpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzW2tFdmVudHNdLnByb2dyZXNzKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXNba0V2ZW50c10ucHJvZ3Jlc3MgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tFdmVudHNdLnByb2dyZXNzID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBvbmxvYWQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICByZXR1cm4gdGhpc1trRXZlbnRzXS5sb2FkXG4gIH1cblxuICBzZXQgb25sb2FkIChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICBpZiAodGhpc1trRXZlbnRzXS5sb2FkKSB7XG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzW2tFdmVudHNdLmxvYWQpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpc1trRXZlbnRzXS5sb2FkID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmxvYWQgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgZ2V0IG9uYWJvcnQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICByZXR1cm4gdGhpc1trRXZlbnRzXS5hYm9ydFxuICB9XG5cbiAgc2V0IG9uYWJvcnQgKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIGlmICh0aGlzW2tFdmVudHNdLmFib3J0KSB7XG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgdGhpc1trRXZlbnRzXS5hYm9ydClcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmFib3J0ID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trRXZlbnRzXS5hYm9ydCA9IG51bGxcbiAgICB9XG4gIH1cbn1cblxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2RvbS1maWxlcmVhZGVyLWVtcHR5XG5GaWxlUmVhZGVyLkVNUFRZID0gRmlsZVJlYWRlci5wcm90b3R5cGUuRU1QVFkgPSAwXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZG9tLWZpbGVyZWFkZXItbG9hZGluZ1xuRmlsZVJlYWRlci5MT0FESU5HID0gRmlsZVJlYWRlci5wcm90b3R5cGUuTE9BRElORyA9IDFcbi8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNkb20tZmlsZXJlYWRlci1kb25lXG5GaWxlUmVhZGVyLkRPTkUgPSBGaWxlUmVhZGVyLnByb3RvdHlwZS5ET05FID0gMlxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhGaWxlUmVhZGVyLnByb3RvdHlwZSwge1xuICBFTVBUWTogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgTE9BRElORzogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgRE9ORTogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgcmVhZEFzQXJyYXlCdWZmZXI6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlYWRBc0JpbmFyeVN0cmluZzoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcmVhZEFzVGV4dDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcmVhZEFzRGF0YVVSTDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYWJvcnQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlYWR5U3RhdGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlc3VsdDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZXJyb3I6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9ubG9hZHN0YXJ0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbnByb2dyZXNzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbmxvYWQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9uYWJvcnQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9uZXJyb3I6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9ubG9hZGVuZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0ZpbGVSZWFkZXInLFxuICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfVxufSlcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRmlsZVJlYWRlciwge1xuICBFTVBUWTogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgTE9BRElORzogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgRE9ORTogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9yc1xufSlcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEZpbGVSZWFkZXJcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBrQ29uc3RydWN0OiByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKS5rQ29uc3RydWN0XG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBVUkxTZXJpYWxpemVyIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9kYXRhVVJMJylcbmNvbnN0IHsgaXNWYWxpZEhlYWRlck5hbWUgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3V0aWwnKVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LXVybC1lcXVhbHNcbiAqIEBwYXJhbSB7VVJMfSBBXG4gKiBAcGFyYW0ge1VSTH0gQlxuICogQHBhcmFtIHtib29sZWFuIHwgdW5kZWZpbmVkfSBleGNsdWRlRnJhZ21lbnRcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiB1cmxFcXVhbHMgKEEsIEIsIGV4Y2x1ZGVGcmFnbWVudCA9IGZhbHNlKSB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRBID0gVVJMU2VyaWFsaXplcihBLCBleGNsdWRlRnJhZ21lbnQpXG5cbiAgY29uc3Qgc2VyaWFsaXplZEIgPSBVUkxTZXJpYWxpemVyKEIsIGV4Y2x1ZGVGcmFnbWVudClcblxuICByZXR1cm4gc2VyaWFsaXplZEEgPT09IHNlcmlhbGl6ZWRCXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vY2hyb21pdW0vY2hyb21pdW0vYmxvYi82OTRkMjBkMTM0Y2I1NTNkOGQ4OWU1NTAwYjkxNDgwMTJiMWJhMjk5L2NvbnRlbnQvYnJvd3Nlci9jYWNoZV9zdG9yYWdlL2NhY2hlX3N0b3JhZ2VfY2FjaGUuY2MjTDI2MC1MMjYyXG4gKiBAcGFyYW0ge3N0cmluZ30gaGVhZGVyXG4gKi9cbmZ1bmN0aW9uIGZpZWxkVmFsdWVzIChoZWFkZXIpIHtcbiAgYXNzZXJ0KGhlYWRlciAhPT0gbnVsbClcblxuICBjb25zdCB2YWx1ZXMgPSBbXVxuXG4gIGZvciAobGV0IHZhbHVlIG9mIGhlYWRlci5zcGxpdCgnLCcpKSB7XG4gICAgdmFsdWUgPSB2YWx1ZS50cmltKClcblxuICAgIGlmICghdmFsdWUubGVuZ3RoKSB7XG4gICAgICBjb250aW51ZVxuICAgIH0gZWxzZSBpZiAoIWlzVmFsaWRIZWFkZXJOYW1lKHZhbHVlKSkge1xuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICB2YWx1ZXMucHVzaCh2YWx1ZSlcbiAgfVxuXG4gIHJldHVybiB2YWx1ZXNcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHVybEVxdWFscyxcbiAgZmllbGRWYWx1ZXNcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsga0NvbnN0cnVjdCB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgdXJsRXF1YWxzLCBmaWVsZFZhbHVlczogZ2V0RmllbGRWYWx1ZXMgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IGtFbnVtZXJhYmxlUHJvcGVydHksIGlzRGlzdHVyYmVkIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBrSGVhZGVyc0xpc3QgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvd2ViaWRsJylcbmNvbnN0IHsgUmVzcG9uc2UsIGNsb25lUmVzcG9uc2UgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3Jlc3BvbnNlJylcbmNvbnN0IHsgUmVxdWVzdCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvcmVxdWVzdCcpXG5jb25zdCB7IGtTdGF0ZSwga0hlYWRlcnMsIGtHdWFyZCwga1JlYWxtIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9zeW1ib2xzJylcbmNvbnN0IHsgZmV0Y2hpbmcgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2luZGV4JylcbmNvbnN0IHsgdXJsSXNIdHRwSHR0cHNTY2hlbWUsIGNyZWF0ZURlZmVycmVkUHJvbWlzZSwgcmVhZEFsbEJ5dGVzIH0gPSByZXF1aXJlKCcuLi9mZXRjaC91dGlsJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7IGdldEdsb2JhbERpc3BhdGNoZXIgfSA9IHJlcXVpcmUoJy4uL2dsb2JhbCcpXG5cbi8qKlxuICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jZGZuLWNhY2hlLWJhdGNoLW9wZXJhdGlvblxuICogQHR5cGVkZWYge09iamVjdH0gQ2FjaGVCYXRjaE9wZXJhdGlvblxuICogQHByb3BlcnR5IHsnZGVsZXRlJyB8ICdwdXQnfSB0eXBlXG4gKiBAcHJvcGVydHkge2FueX0gcmVxdWVzdFxuICogQHByb3BlcnR5IHthbnl9IHJlc3BvbnNlXG4gKiBAcHJvcGVydHkge2ltcG9ydCgnLi4vLi4vdHlwZXMvY2FjaGUnKS5DYWNoZVF1ZXJ5T3B0aW9uc30gb3B0aW9uc1xuICovXG5cbi8qKlxuICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jZGZuLXJlcXVlc3QtcmVzcG9uc2UtbGlzdFxuICogQHR5cGVkZWYge1thbnksIGFueV1bXX0gcmVxdWVzdFJlc3BvbnNlTGlzdFxuICovXG5cbmNsYXNzIENhY2hlIHtcbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2Rmbi1yZWxldmFudC1yZXF1ZXN0LXJlc3BvbnNlLWxpc3RcbiAgICogQHR5cGUge3JlcXVlc3RSZXNwb25zZUxpc3R9XG4gICAqL1xuICAjcmVsZXZhbnRSZXF1ZXN0UmVzcG9uc2VMaXN0XG5cbiAgY29uc3RydWN0b3IgKCkge1xuICAgIGlmIChhcmd1bWVudHNbMF0gIT09IGtDb25zdHJ1Y3QpIHtcbiAgICAgIHdlYmlkbC5pbGxlZ2FsQ29uc3RydWN0b3IoKVxuICAgIH1cblxuICAgIHRoaXMuI3JlbGV2YW50UmVxdWVzdFJlc3BvbnNlTGlzdCA9IGFyZ3VtZW50c1sxXVxuICB9XG5cbiAgYXN5bmMgbWF0Y2ggKHJlcXVlc3QsIG9wdGlvbnMgPSB7fSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlKVxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdDYWNoZS5tYXRjaCcgfSlcblxuICAgIHJlcXVlc3QgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mbyhyZXF1ZXN0KVxuICAgIG9wdGlvbnMgPSB3ZWJpZGwuY29udmVydGVycy5DYWNoZVF1ZXJ5T3B0aW9ucyhvcHRpb25zKVxuXG4gICAgY29uc3QgcCA9IGF3YWl0IHRoaXMubWF0Y2hBbGwocmVxdWVzdCwgb3B0aW9ucylcblxuICAgIGlmIChwLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgcmV0dXJuIHBbMF1cbiAgfVxuXG4gIGFzeW5jIG1hdGNoQWxsIChyZXF1ZXN0ID0gdW5kZWZpbmVkLCBvcHRpb25zID0ge30pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZSlcblxuICAgIGlmIChyZXF1ZXN0ICE9PSB1bmRlZmluZWQpIHJlcXVlc3QgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mbyhyZXF1ZXN0KVxuICAgIG9wdGlvbnMgPSB3ZWJpZGwuY29udmVydGVycy5DYWNoZVF1ZXJ5T3B0aW9ucyhvcHRpb25zKVxuXG4gICAgLy8gMS5cbiAgICBsZXQgciA9IG51bGxcblxuICAgIC8vIDIuXG4gICAgaWYgKHJlcXVlc3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHJlcXVlc3QgaW5zdGFuY2VvZiBSZXF1ZXN0KSB7XG4gICAgICAgIC8vIDIuMS4xXG4gICAgICAgIHIgPSByZXF1ZXN0W2tTdGF0ZV1cblxuICAgICAgICAvLyAyLjEuMlxuICAgICAgICBpZiAoci5tZXRob2QgIT09ICdHRVQnICYmICFvcHRpb25zLmlnbm9yZU1ldGhvZCkge1xuICAgICAgICAgIHJldHVybiBbXVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiByZXF1ZXN0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAvLyAyLjIuMVxuICAgICAgICByID0gbmV3IFJlcXVlc3QocmVxdWVzdClba1N0YXRlXVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDUuXG4gICAgLy8gNS4xXG4gICAgY29uc3QgcmVzcG9uc2VzID0gW11cblxuICAgIC8vIDUuMlxuICAgIGlmIChyZXF1ZXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIDUuMi4xXG4gICAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiB0aGlzLiNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3QpIHtcbiAgICAgICAgcmVzcG9uc2VzLnB1c2gocmVxdWVzdFJlc3BvbnNlWzFdKVxuICAgICAgfVxuICAgIH0gZWxzZSB7IC8vIDUuM1xuICAgICAgLy8gNS4zLjFcbiAgICAgIGNvbnN0IHJlcXVlc3RSZXNwb25zZXMgPSB0aGlzLiNxdWVyeUNhY2hlKHIsIG9wdGlvbnMpXG5cbiAgICAgIC8vIDUuMy4yXG4gICAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiByZXF1ZXN0UmVzcG9uc2VzKSB7XG4gICAgICAgIHJlc3BvbnNlcy5wdXNoKHJlcXVlc3RSZXNwb25zZVsxXSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA1LjRcbiAgICAvLyBXZSBkb24ndCBpbXBsZW1lbnQgQ09ScyBzbyB3ZSBkb24ndCBuZWVkIHRvIGxvb3Agb3ZlciB0aGUgcmVzcG9uc2VzLCB5YXkhXG5cbiAgICAvLyA1LjUuMVxuICAgIGNvbnN0IHJlc3BvbnNlTGlzdCA9IFtdXG5cbiAgICAvLyA1LjUuMlxuICAgIGZvciAoY29uc3QgcmVzcG9uc2Ugb2YgcmVzcG9uc2VzKSB7XG4gICAgICAvLyA1LjUuMi4xXG4gICAgICBjb25zdCByZXNwb25zZU9iamVjdCA9IG5ldyBSZXNwb25zZShyZXNwb25zZS5ib2R5Py5zb3VyY2UgPz8gbnVsbClcbiAgICAgIGNvbnN0IGJvZHkgPSByZXNwb25zZU9iamVjdFtrU3RhdGVdLmJvZHlcbiAgICAgIHJlc3BvbnNlT2JqZWN0W2tTdGF0ZV0gPSByZXNwb25zZVxuICAgICAgcmVzcG9uc2VPYmplY3Rba1N0YXRlXS5ib2R5ID0gYm9keVxuICAgICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tIZWFkZXJzTGlzdF0gPSByZXNwb25zZS5oZWFkZXJzTGlzdFxuICAgICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tHdWFyZF0gPSAnaW1tdXRhYmxlJ1xuXG4gICAgICByZXNwb25zZUxpc3QucHVzaChyZXNwb25zZU9iamVjdClcbiAgICB9XG5cbiAgICAvLyA2LlxuICAgIHJldHVybiBPYmplY3QuZnJlZXplKHJlc3BvbnNlTGlzdClcbiAgfVxuXG4gIGFzeW5jIGFkZCAocmVxdWVzdCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlKVxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdDYWNoZS5hZGQnIH0pXG5cbiAgICByZXF1ZXN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluZm8ocmVxdWVzdClcblxuICAgIC8vIDEuXG4gICAgY29uc3QgcmVxdWVzdHMgPSBbcmVxdWVzdF1cblxuICAgIC8vIDIuXG4gICAgY29uc3QgcmVzcG9uc2VBcnJheVByb21pc2UgPSB0aGlzLmFkZEFsbChyZXF1ZXN0cylcblxuICAgIC8vIDMuXG4gICAgcmV0dXJuIGF3YWl0IHJlc3BvbnNlQXJyYXlQcm9taXNlXG4gIH1cblxuICBhc3luYyBhZGRBbGwgKHJlcXVlc3RzKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGUpXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0NhY2hlLmFkZEFsbCcgfSlcblxuICAgIHJlcXVlc3RzID0gd2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPFJlcXVlc3RJbmZvPiddKHJlcXVlc3RzKVxuXG4gICAgLy8gMS5cbiAgICBjb25zdCByZXNwb25zZVByb21pc2VzID0gW11cblxuICAgIC8vIDIuXG4gICAgY29uc3QgcmVxdWVzdExpc3QgPSBbXVxuXG4gICAgLy8gMy5cbiAgICBmb3IgKGNvbnN0IHJlcXVlc3Qgb2YgcmVxdWVzdHMpIHtcbiAgICAgIGlmICh0eXBlb2YgcmVxdWVzdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gMy4xXG4gICAgICBjb25zdCByID0gcmVxdWVzdFtrU3RhdGVdXG5cbiAgICAgIC8vIDMuMlxuICAgICAgaWYgKCF1cmxJc0h0dHBIdHRwc1NjaGVtZShyLnVybCkgfHwgci5tZXRob2QgIT09ICdHRVQnKSB7XG4gICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICBoZWFkZXI6ICdDYWNoZS5hZGRBbGwnLFxuICAgICAgICAgIG1lc3NhZ2U6ICdFeHBlY3RlZCBodHRwL3Mgc2NoZW1lIHdoZW4gbWV0aG9kIGlzIG5vdCBHRVQuJ1xuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDQuXG4gICAgLyoqIEB0eXBlIHtSZXR1cm5UeXBlPHR5cGVvZiBmZXRjaGluZz5bXX0gKi9cbiAgICBjb25zdCBmZXRjaENvbnRyb2xsZXJzID0gW11cblxuICAgIC8vIDUuXG4gICAgZm9yIChjb25zdCByZXF1ZXN0IG9mIHJlcXVlc3RzKSB7XG4gICAgICAvLyA1LjFcbiAgICAgIGNvbnN0IHIgPSBuZXcgUmVxdWVzdChyZXF1ZXN0KVtrU3RhdGVdXG5cbiAgICAgIC8vIDUuMlxuICAgICAgaWYgKCF1cmxJc0h0dHBIdHRwc1NjaGVtZShyLnVybCkpIHtcbiAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLmFkZEFsbCcsXG4gICAgICAgICAgbWVzc2FnZTogJ0V4cGVjdGVkIGh0dHAvcyBzY2hlbWUuJ1xuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICAvLyA1LjRcbiAgICAgIHIuaW5pdGlhdG9yID0gJ2ZldGNoJ1xuICAgICAgci5kZXN0aW5hdGlvbiA9ICdzdWJyZXNvdXJjZSdcblxuICAgICAgLy8gNS41XG4gICAgICByZXF1ZXN0TGlzdC5wdXNoKHIpXG5cbiAgICAgIC8vIDUuNlxuICAgICAgY29uc3QgcmVzcG9uc2VQcm9taXNlID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKClcblxuICAgICAgLy8gNS43XG4gICAgICBmZXRjaENvbnRyb2xsZXJzLnB1c2goZmV0Y2hpbmcoe1xuICAgICAgICByZXF1ZXN0OiByLFxuICAgICAgICBkaXNwYXRjaGVyOiBnZXRHbG9iYWxEaXNwYXRjaGVyKCksXG4gICAgICAgIHByb2Nlc3NSZXNwb25zZSAocmVzcG9uc2UpIHtcbiAgICAgICAgICAvLyAxLlxuICAgICAgICAgIGlmIChyZXNwb25zZS50eXBlID09PSAnZXJyb3InIHx8IHJlc3BvbnNlLnN0YXR1cyA9PT0gMjA2IHx8IHJlc3BvbnNlLnN0YXR1cyA8IDIwMCB8fCByZXNwb25zZS5zdGF0dXMgPiAyOTkpIHtcbiAgICAgICAgICAgIHJlc3BvbnNlUHJvbWlzZS5yZWplY3Qod2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgICBoZWFkZXI6ICdDYWNoZS5hZGRBbGwnLFxuICAgICAgICAgICAgICBtZXNzYWdlOiAnUmVjZWl2ZWQgYW4gaW52YWxpZCBzdGF0dXMgY29kZSBvciB0aGUgcmVxdWVzdCBmYWlsZWQuJ1xuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgfSBlbHNlIGlmIChyZXNwb25zZS5oZWFkZXJzTGlzdC5jb250YWlucygndmFyeScpKSB7IC8vIDIuXG4gICAgICAgICAgICAvLyAyLjFcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkVmFsdWVzID0gZ2V0RmllbGRWYWx1ZXMocmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCd2YXJ5JykpXG5cbiAgICAgICAgICAgIC8vIDIuMlxuICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZFZhbHVlIG9mIGZpZWxkVmFsdWVzKSB7XG4gICAgICAgICAgICAgIC8vIDIuMi4xXG4gICAgICAgICAgICAgIGlmIChmaWVsZFZhbHVlID09PSAnKicpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVByb21pc2UucmVqZWN0KHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLmFkZEFsbCcsXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnaW52YWxpZCB2YXJ5IGZpZWxkIHZhbHVlJ1xuICAgICAgICAgICAgICAgIH0pKVxuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBjb250cm9sbGVyIG9mIGZldGNoQ29udHJvbGxlcnMpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuYWJvcnQoKVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHkgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgLy8gMS5cbiAgICAgICAgICBpZiAocmVzcG9uc2UuYWJvcnRlZCkge1xuICAgICAgICAgICAgcmVzcG9uc2VQcm9taXNlLnJlamVjdChuZXcgRE9NRXhjZXB0aW9uKCdhYm9ydGVkJywgJ0Fib3J0RXJyb3InKSlcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDIuXG4gICAgICAgICAgcmVzcG9uc2VQcm9taXNlLnJlc29sdmUocmVzcG9uc2UpXG4gICAgICAgIH1cbiAgICAgIH0pKVxuXG4gICAgICAvLyA1LjhcbiAgICAgIHJlc3BvbnNlUHJvbWlzZXMucHVzaChyZXNwb25zZVByb21pc2UucHJvbWlzZSlcbiAgICB9XG5cbiAgICAvLyA2LlxuICAgIGNvbnN0IHAgPSBQcm9taXNlLmFsbChyZXNwb25zZVByb21pc2VzKVxuXG4gICAgLy8gNy5cbiAgICBjb25zdCByZXNwb25zZXMgPSBhd2FpdCBwXG5cbiAgICAvLyA3LjFcbiAgICBjb25zdCBvcGVyYXRpb25zID0gW11cblxuICAgIC8vIDcuMlxuICAgIGxldCBpbmRleCA9IDBcblxuICAgIC8vIDcuM1xuICAgIGZvciAoY29uc3QgcmVzcG9uc2Ugb2YgcmVzcG9uc2VzKSB7XG4gICAgICAvLyA3LjMuMVxuICAgICAgLyoqIEB0eXBlIHtDYWNoZUJhdGNoT3BlcmF0aW9ufSAqL1xuICAgICAgY29uc3Qgb3BlcmF0aW9uID0ge1xuICAgICAgICB0eXBlOiAncHV0JywgLy8gNy4zLjJcbiAgICAgICAgcmVxdWVzdDogcmVxdWVzdExpc3RbaW5kZXhdLCAvLyA3LjMuM1xuICAgICAgICByZXNwb25zZSAvLyA3LjMuNFxuICAgICAgfVxuXG4gICAgICBvcGVyYXRpb25zLnB1c2gob3BlcmF0aW9uKSAvLyA3LjMuNVxuXG4gICAgICBpbmRleCsrIC8vIDcuMy42XG4gICAgfVxuXG4gICAgLy8gNy41XG4gICAgY29uc3QgY2FjaGVKb2JQcm9taXNlID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKClcblxuICAgIC8vIDcuNi4xXG4gICAgbGV0IGVycm9yRGF0YSA9IG51bGxcblxuICAgIC8vIDcuNi4yXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuI2JhdGNoQ2FjaGVPcGVyYXRpb25zKG9wZXJhdGlvbnMpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZXJyb3JEYXRhID0gZVxuICAgIH1cblxuICAgIC8vIDcuNi4zXG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgLy8gNy42LjMuMVxuICAgICAgaWYgKGVycm9yRGF0YSA9PT0gbnVsbCkge1xuICAgICAgICBjYWNoZUpvYlByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyA3LjYuMy4yXG4gICAgICAgIGNhY2hlSm9iUHJvbWlzZS5yZWplY3QoZXJyb3JEYXRhKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICAvLyA3LjdcbiAgICByZXR1cm4gY2FjaGVKb2JQcm9taXNlLnByb21pc2VcbiAgfVxuXG4gIGFzeW5jIHB1dCAocmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZSlcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnQ2FjaGUucHV0JyB9KVxuXG4gICAgcmVxdWVzdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKHJlcXVlc3QpXG4gICAgcmVzcG9uc2UgPSB3ZWJpZGwuY29udmVydGVycy5SZXNwb25zZShyZXNwb25zZSlcblxuICAgIC8vIDEuXG4gICAgbGV0IGlubmVyUmVxdWVzdCA9IG51bGxcblxuICAgIC8vIDIuXG4gICAgaWYgKHJlcXVlc3QgaW5zdGFuY2VvZiBSZXF1ZXN0KSB7XG4gICAgICBpbm5lclJlcXVlc3QgPSByZXF1ZXN0W2tTdGF0ZV1cbiAgICB9IGVsc2UgeyAvLyAzLlxuICAgICAgaW5uZXJSZXF1ZXN0ID0gbmV3IFJlcXVlc3QocmVxdWVzdClba1N0YXRlXVxuICAgIH1cblxuICAgIC8vIDQuXG4gICAgaWYgKCF1cmxJc0h0dHBIdHRwc1NjaGVtZShpbm5lclJlcXVlc3QudXJsKSB8fCBpbm5lclJlcXVlc3QubWV0aG9kICE9PSAnR0VUJykge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6ICdDYWNoZS5wdXQnLFxuICAgICAgICBtZXNzYWdlOiAnRXhwZWN0ZWQgYW4gaHR0cC9zIHNjaGVtZSB3aGVuIG1ldGhvZCBpcyBub3QgR0VUJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyA1LlxuICAgIGNvbnN0IGlubmVyUmVzcG9uc2UgPSByZXNwb25zZVtrU3RhdGVdXG5cbiAgICAvLyA2LlxuICAgIGlmIChpbm5lclJlc3BvbnNlLnN0YXR1cyA9PT0gMjA2KSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ0NhY2hlLnB1dCcsXG4gICAgICAgIG1lc3NhZ2U6ICdHb3QgMjA2IHN0YXR1cydcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gNy5cbiAgICBpZiAoaW5uZXJSZXNwb25zZS5oZWFkZXJzTGlzdC5jb250YWlucygndmFyeScpKSB7XG4gICAgICAvLyA3LjEuXG4gICAgICBjb25zdCBmaWVsZFZhbHVlcyA9IGdldEZpZWxkVmFsdWVzKGlubmVyUmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCd2YXJ5JykpXG5cbiAgICAgIC8vIDcuMi5cbiAgICAgIGZvciAoY29uc3QgZmllbGRWYWx1ZSBvZiBmaWVsZFZhbHVlcykge1xuICAgICAgICAvLyA3LjIuMVxuICAgICAgICBpZiAoZmllbGRWYWx1ZSA9PT0gJyonKSB7XG4gICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgaGVhZGVyOiAnQ2FjaGUucHV0JyxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdHb3QgKiB2YXJ5IGZpZWxkIHZhbHVlJ1xuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA4LlxuICAgIGlmIChpbm5lclJlc3BvbnNlLmJvZHkgJiYgKGlzRGlzdHVyYmVkKGlubmVyUmVzcG9uc2UuYm9keS5zdHJlYW0pIHx8IGlubmVyUmVzcG9uc2UuYm9keS5zdHJlYW0ubG9ja2VkKSkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6ICdDYWNoZS5wdXQnLFxuICAgICAgICBtZXNzYWdlOiAnUmVzcG9uc2UgYm9keSBpcyBsb2NrZWQgb3IgZGlzdHVyYmVkJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyA5LlxuICAgIGNvbnN0IGNsb25lZFJlc3BvbnNlID0gY2xvbmVSZXNwb25zZShpbm5lclJlc3BvbnNlKVxuXG4gICAgLy8gMTAuXG4gICAgY29uc3QgYm9keVJlYWRQcm9taXNlID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKClcblxuICAgIC8vIDExLlxuICAgIGlmIChpbm5lclJlc3BvbnNlLmJvZHkgIT0gbnVsbCkge1xuICAgICAgLy8gMTEuMVxuICAgICAgY29uc3Qgc3RyZWFtID0gaW5uZXJSZXNwb25zZS5ib2R5LnN0cmVhbVxuXG4gICAgICAvLyAxMS4yXG4gICAgICBjb25zdCByZWFkZXIgPSBzdHJlYW0uZ2V0UmVhZGVyKClcblxuICAgICAgLy8gMTEuM1xuICAgICAgcmVhZEFsbEJ5dGVzKHJlYWRlcikudGhlbihib2R5UmVhZFByb21pc2UucmVzb2x2ZSwgYm9keVJlYWRQcm9taXNlLnJlamVjdClcbiAgICB9IGVsc2Uge1xuICAgICAgYm9keVJlYWRQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKVxuICAgIH1cblxuICAgIC8vIDEyLlxuICAgIC8qKiBAdHlwZSB7Q2FjaGVCYXRjaE9wZXJhdGlvbltdfSAqL1xuICAgIGNvbnN0IG9wZXJhdGlvbnMgPSBbXVxuXG4gICAgLy8gMTMuXG4gICAgLyoqIEB0eXBlIHtDYWNoZUJhdGNoT3BlcmF0aW9ufSAqL1xuICAgIGNvbnN0IG9wZXJhdGlvbiA9IHtcbiAgICAgIHR5cGU6ICdwdXQnLCAvLyAxNC5cbiAgICAgIHJlcXVlc3Q6IGlubmVyUmVxdWVzdCwgLy8gMTUuXG4gICAgICByZXNwb25zZTogY2xvbmVkUmVzcG9uc2UgLy8gMTYuXG4gICAgfVxuXG4gICAgLy8gMTcuXG4gICAgb3BlcmF0aW9ucy5wdXNoKG9wZXJhdGlvbilcblxuICAgIC8vIDE5LlxuICAgIGNvbnN0IGJ5dGVzID0gYXdhaXQgYm9keVJlYWRQcm9taXNlLnByb21pc2VcblxuICAgIGlmIChjbG9uZWRSZXNwb25zZS5ib2R5ICE9IG51bGwpIHtcbiAgICAgIGNsb25lZFJlc3BvbnNlLmJvZHkuc291cmNlID0gYnl0ZXNcbiAgICB9XG5cbiAgICAvLyAxOS4xXG4gICAgY29uc3QgY2FjaGVKb2JQcm9taXNlID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKClcblxuICAgIC8vIDE5LjIuMVxuICAgIGxldCBlcnJvckRhdGEgPSBudWxsXG5cbiAgICAvLyAxOS4yLjJcbiAgICB0cnkge1xuICAgICAgdGhpcy4jYmF0Y2hDYWNoZU9wZXJhdGlvbnMob3BlcmF0aW9ucylcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlcnJvckRhdGEgPSBlXG4gICAgfVxuXG4gICAgLy8gMTkuMi4zXG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgLy8gMTkuMi4zLjFcbiAgICAgIGlmIChlcnJvckRhdGEgPT09IG51bGwpIHtcbiAgICAgICAgY2FjaGVKb2JQcm9taXNlLnJlc29sdmUoKVxuICAgICAgfSBlbHNlIHsgLy8gMTkuMi4zLjJcbiAgICAgICAgY2FjaGVKb2JQcm9taXNlLnJlamVjdChlcnJvckRhdGEpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHJldHVybiBjYWNoZUpvYlByb21pc2UucHJvbWlzZVxuICB9XG5cbiAgYXN5bmMgZGVsZXRlIChyZXF1ZXN0LCBvcHRpb25zID0ge30pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZSlcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnQ2FjaGUuZGVsZXRlJyB9KVxuXG4gICAgcmVxdWVzdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKHJlcXVlc3QpXG4gICAgb3B0aW9ucyA9IHdlYmlkbC5jb252ZXJ0ZXJzLkNhY2hlUXVlcnlPcHRpb25zKG9wdGlvbnMpXG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7UmVxdWVzdH1cbiAgICAgKi9cbiAgICBsZXQgciA9IG51bGxcblxuICAgIGlmIChyZXF1ZXN0IGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgICAgciA9IHJlcXVlc3Rba1N0YXRlXVxuXG4gICAgICBpZiAoci5tZXRob2QgIT09ICdHRVQnICYmICFvcHRpb25zLmlnbm9yZU1ldGhvZCkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYXNzZXJ0KHR5cGVvZiByZXF1ZXN0ID09PSAnc3RyaW5nJylcblxuICAgICAgciA9IG5ldyBSZXF1ZXN0KHJlcXVlc3QpW2tTdGF0ZV1cbiAgICB9XG5cbiAgICAvKiogQHR5cGUge0NhY2hlQmF0Y2hPcGVyYXRpb25bXX0gKi9cbiAgICBjb25zdCBvcGVyYXRpb25zID0gW11cblxuICAgIC8qKiBAdHlwZSB7Q2FjaGVCYXRjaE9wZXJhdGlvbn0gKi9cbiAgICBjb25zdCBvcGVyYXRpb24gPSB7XG4gICAgICB0eXBlOiAnZGVsZXRlJyxcbiAgICAgIHJlcXVlc3Q6IHIsXG4gICAgICBvcHRpb25zXG4gICAgfVxuXG4gICAgb3BlcmF0aW9ucy5wdXNoKG9wZXJhdGlvbilcblxuICAgIGNvbnN0IGNhY2hlSm9iUHJvbWlzZSA9IGNyZWF0ZURlZmVycmVkUHJvbWlzZSgpXG5cbiAgICBsZXQgZXJyb3JEYXRhID0gbnVsbFxuICAgIGxldCByZXF1ZXN0UmVzcG9uc2VzXG5cbiAgICB0cnkge1xuICAgICAgcmVxdWVzdFJlc3BvbnNlcyA9IHRoaXMuI2JhdGNoQ2FjaGVPcGVyYXRpb25zKG9wZXJhdGlvbnMpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZXJyb3JEYXRhID0gZVxuICAgIH1cblxuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgIGlmIChlcnJvckRhdGEgPT09IG51bGwpIHtcbiAgICAgICAgY2FjaGVKb2JQcm9taXNlLnJlc29sdmUoISFyZXF1ZXN0UmVzcG9uc2VzPy5sZW5ndGgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWNoZUpvYlByb21pc2UucmVqZWN0KGVycm9yRGF0YSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIGNhY2hlSm9iUHJvbWlzZS5wcm9taXNlXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jZG9tLWNhY2hlLWtleXNcbiAgICogQHBhcmFtIHthbnl9IHJlcXVlc3RcbiAgICogQHBhcmFtIHtpbXBvcnQoJy4uLy4uL3R5cGVzL2NhY2hlJykuQ2FjaGVRdWVyeU9wdGlvbnN9IG9wdGlvbnNcbiAgICogQHJldHVybnMge3JlYWRvbmx5IFJlcXVlc3RbXX1cbiAgICovXG4gIGFzeW5jIGtleXMgKHJlcXVlc3QgPSB1bmRlZmluZWQsIG9wdGlvbnMgPSB7fSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlKVxuXG4gICAgaWYgKHJlcXVlc3QgIT09IHVuZGVmaW5lZCkgcmVxdWVzdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKHJlcXVlc3QpXG4gICAgb3B0aW9ucyA9IHdlYmlkbC5jb252ZXJ0ZXJzLkNhY2hlUXVlcnlPcHRpb25zKG9wdGlvbnMpXG5cbiAgICAvLyAxLlxuICAgIGxldCByID0gbnVsbFxuXG4gICAgLy8gMi5cbiAgICBpZiAocmVxdWVzdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyAyLjFcbiAgICAgIGlmIChyZXF1ZXN0IGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgICAgICAvLyAyLjEuMVxuICAgICAgICByID0gcmVxdWVzdFtrU3RhdGVdXG5cbiAgICAgICAgLy8gMi4xLjJcbiAgICAgICAgaWYgKHIubWV0aG9kICE9PSAnR0VUJyAmJiAhb3B0aW9ucy5pZ25vcmVNZXRob2QpIHtcbiAgICAgICAgICByZXR1cm4gW11cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcmVxdWVzdCA9PT0gJ3N0cmluZycpIHsgLy8gMi4yXG4gICAgICAgIHIgPSBuZXcgUmVxdWVzdChyZXF1ZXN0KVtrU3RhdGVdXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNC5cbiAgICBjb25zdCBwcm9taXNlID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKClcblxuICAgIC8vIDUuXG4gICAgLy8gNS4xXG4gICAgY29uc3QgcmVxdWVzdHMgPSBbXVxuXG4gICAgLy8gNS4yXG4gICAgaWYgKHJlcXVlc3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gNS4yLjFcbiAgICAgIGZvciAoY29uc3QgcmVxdWVzdFJlc3BvbnNlIG9mIHRoaXMuI3JlbGV2YW50UmVxdWVzdFJlc3BvbnNlTGlzdCkge1xuICAgICAgICAvLyA1LjIuMS4xXG4gICAgICAgIHJlcXVlc3RzLnB1c2gocmVxdWVzdFJlc3BvbnNlWzBdKVxuICAgICAgfVxuICAgIH0gZWxzZSB7IC8vIDUuM1xuICAgICAgLy8gNS4zLjFcbiAgICAgIGNvbnN0IHJlcXVlc3RSZXNwb25zZXMgPSB0aGlzLiNxdWVyeUNhY2hlKHIsIG9wdGlvbnMpXG5cbiAgICAgIC8vIDUuMy4yXG4gICAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiByZXF1ZXN0UmVzcG9uc2VzKSB7XG4gICAgICAgIC8vIDUuMy4yLjFcbiAgICAgICAgcmVxdWVzdHMucHVzaChyZXF1ZXN0UmVzcG9uc2VbMF0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNS40XG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgLy8gNS40LjFcbiAgICAgIGNvbnN0IHJlcXVlc3RMaXN0ID0gW11cblxuICAgICAgLy8gNS40LjJcbiAgICAgIGZvciAoY29uc3QgcmVxdWVzdCBvZiByZXF1ZXN0cykge1xuICAgICAgICBjb25zdCByZXF1ZXN0T2JqZWN0ID0gbmV3IFJlcXVlc3QoJ2h0dHBzOi8vYScpXG4gICAgICAgIHJlcXVlc3RPYmplY3Rba1N0YXRlXSA9IHJlcXVlc3RcbiAgICAgICAgcmVxdWVzdE9iamVjdFtrSGVhZGVyc11ba0hlYWRlcnNMaXN0XSA9IHJlcXVlc3QuaGVhZGVyc0xpc3RcbiAgICAgICAgcmVxdWVzdE9iamVjdFtrSGVhZGVyc11ba0d1YXJkXSA9ICdpbW11dGFibGUnXG4gICAgICAgIHJlcXVlc3RPYmplY3Rba1JlYWxtXSA9IHJlcXVlc3QuY2xpZW50XG5cbiAgICAgICAgLy8gNS40LjIuMVxuICAgICAgICByZXF1ZXN0TGlzdC5wdXNoKHJlcXVlc3RPYmplY3QpXG4gICAgICB9XG5cbiAgICAgIC8vIDUuNC4zXG4gICAgICBwcm9taXNlLnJlc29sdmUoT2JqZWN0LmZyZWV6ZShyZXF1ZXN0TGlzdCkpXG4gICAgfSlcblxuICAgIHJldHVybiBwcm9taXNlLnByb21pc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNiYXRjaC1jYWNoZS1vcGVyYXRpb25zLWFsZ29yaXRobVxuICAgKiBAcGFyYW0ge0NhY2hlQmF0Y2hPcGVyYXRpb25bXX0gb3BlcmF0aW9uc1xuICAgKiBAcmV0dXJucyB7cmVxdWVzdFJlc3BvbnNlTGlzdH1cbiAgICovXG4gICNiYXRjaENhY2hlT3BlcmF0aW9ucyAob3BlcmF0aW9ucykge1xuICAgIC8vIDEuXG4gICAgY29uc3QgY2FjaGUgPSB0aGlzLiNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3RcblxuICAgIC8vIDIuXG4gICAgY29uc3QgYmFja3VwQ2FjaGUgPSBbLi4uY2FjaGVdXG5cbiAgICAvLyAzLlxuICAgIGNvbnN0IGFkZGVkSXRlbXMgPSBbXVxuXG4gICAgLy8gNC4xXG4gICAgY29uc3QgcmVzdWx0TGlzdCA9IFtdXG5cbiAgICB0cnkge1xuICAgICAgLy8gNC4yXG4gICAgICBmb3IgKGNvbnN0IG9wZXJhdGlvbiBvZiBvcGVyYXRpb25zKSB7XG4gICAgICAgIC8vIDQuMi4xXG4gICAgICAgIGlmIChvcGVyYXRpb24udHlwZSAhPT0gJ2RlbGV0ZScgJiYgb3BlcmF0aW9uLnR5cGUgIT09ICdwdXQnKSB7XG4gICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgaGVhZGVyOiAnQ2FjaGUuI2JhdGNoQ2FjaGVPcGVyYXRpb25zJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdvcGVyYXRpb24gdHlwZSBkb2VzIG5vdCBtYXRjaCBcImRlbGV0ZVwiIG9yIFwicHV0XCInXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDQuMi4yXG4gICAgICAgIGlmIChvcGVyYXRpb24udHlwZSA9PT0gJ2RlbGV0ZScgJiYgb3BlcmF0aW9uLnJlc3BvbnNlICE9IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICBoZWFkZXI6ICdDYWNoZS4jYmF0Y2hDYWNoZU9wZXJhdGlvbnMnLFxuICAgICAgICAgICAgbWVzc2FnZTogJ2RlbGV0ZSBvcGVyYXRpb24gc2hvdWxkIG5vdCBoYXZlIGFuIGFzc29jaWF0ZWQgcmVzcG9uc2UnXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDQuMi4zXG4gICAgICAgIGlmICh0aGlzLiNxdWVyeUNhY2hlKG9wZXJhdGlvbi5yZXF1ZXN0LCBvcGVyYXRpb24ub3B0aW9ucywgYWRkZWRJdGVtcykubGVuZ3RoKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignPz8/JywgJ0ludmFsaWRTdGF0ZUVycm9yJylcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDQuMi40XG4gICAgICAgIGxldCByZXF1ZXN0UmVzcG9uc2VzXG5cbiAgICAgICAgLy8gNC4yLjVcbiAgICAgICAgaWYgKG9wZXJhdGlvbi50eXBlID09PSAnZGVsZXRlJykge1xuICAgICAgICAgIC8vIDQuMi41LjFcbiAgICAgICAgICByZXF1ZXN0UmVzcG9uc2VzID0gdGhpcy4jcXVlcnlDYWNoZShvcGVyYXRpb24ucmVxdWVzdCwgb3BlcmF0aW9uLm9wdGlvbnMpXG5cbiAgICAgICAgICAvLyBUT0RPOiB0aGUgc3BlYyBpcyB3cm9uZywgdGhpcyBpcyBuZWVkZWQgdG8gcGFzcyBXUFRzXG4gICAgICAgICAgaWYgKHJlcXVlc3RSZXNwb25zZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gW11cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyA0LjIuNS4yXG4gICAgICAgICAgZm9yIChjb25zdCByZXF1ZXN0UmVzcG9uc2Ugb2YgcmVxdWVzdFJlc3BvbnNlcykge1xuICAgICAgICAgICAgY29uc3QgaWR4ID0gY2FjaGUuaW5kZXhPZihyZXF1ZXN0UmVzcG9uc2UpXG4gICAgICAgICAgICBhc3NlcnQoaWR4ICE9PSAtMSlcblxuICAgICAgICAgICAgLy8gNC4yLjUuMi4xXG4gICAgICAgICAgICBjYWNoZS5zcGxpY2UoaWR4LCAxKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24udHlwZSA9PT0gJ3B1dCcpIHsgLy8gNC4yLjZcbiAgICAgICAgICAvLyA0LjIuNi4xXG4gICAgICAgICAgaWYgKG9wZXJhdGlvbi5yZXNwb25zZSA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLiNiYXRjaENhY2hlT3BlcmF0aW9ucycsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdwdXQgb3BlcmF0aW9uIHNob3VsZCBoYXZlIGFuIGFzc29jaWF0ZWQgcmVzcG9uc2UnXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDQuMi42LjJcbiAgICAgICAgICBjb25zdCByID0gb3BlcmF0aW9uLnJlcXVlc3RcblxuICAgICAgICAgIC8vIDQuMi42LjNcbiAgICAgICAgICBpZiAoIXVybElzSHR0cEh0dHBzU2NoZW1lKHIudXJsKSkge1xuICAgICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgICBoZWFkZXI6ICdDYWNoZS4jYmF0Y2hDYWNoZU9wZXJhdGlvbnMnLFxuICAgICAgICAgICAgICBtZXNzYWdlOiAnZXhwZWN0ZWQgaHR0cCBvciBodHRwcyBzY2hlbWUnXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDQuMi42LjRcbiAgICAgICAgICBpZiAoci5tZXRob2QgIT09ICdHRVQnKSB7XG4gICAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLiNiYXRjaENhY2hlT3BlcmF0aW9ucycsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdub3QgZ2V0IG1ldGhvZCdcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gNC4yLjYuNVxuICAgICAgICAgIGlmIChvcGVyYXRpb24ub3B0aW9ucyAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLiNiYXRjaENhY2hlT3BlcmF0aW9ucycsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdvcHRpb25zIG11c3Qgbm90IGJlIGRlZmluZWQnXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDQuMi42LjZcbiAgICAgICAgICByZXF1ZXN0UmVzcG9uc2VzID0gdGhpcy4jcXVlcnlDYWNoZShvcGVyYXRpb24ucmVxdWVzdClcblxuICAgICAgICAgIC8vIDQuMi42LjdcbiAgICAgICAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiByZXF1ZXN0UmVzcG9uc2VzKSB7XG4gICAgICAgICAgICBjb25zdCBpZHggPSBjYWNoZS5pbmRleE9mKHJlcXVlc3RSZXNwb25zZSlcbiAgICAgICAgICAgIGFzc2VydChpZHggIT09IC0xKVxuXG4gICAgICAgICAgICAvLyA0LjIuNi43LjFcbiAgICAgICAgICAgIGNhY2hlLnNwbGljZShpZHgsIDEpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gNC4yLjYuOFxuICAgICAgICAgIGNhY2hlLnB1c2goW29wZXJhdGlvbi5yZXF1ZXN0LCBvcGVyYXRpb24ucmVzcG9uc2VdKVxuXG4gICAgICAgICAgLy8gNC4yLjYuMTBcbiAgICAgICAgICBhZGRlZEl0ZW1zLnB1c2goW29wZXJhdGlvbi5yZXF1ZXN0LCBvcGVyYXRpb24ucmVzcG9uc2VdKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gNC4yLjdcbiAgICAgICAgcmVzdWx0TGlzdC5wdXNoKFtvcGVyYXRpb24ucmVxdWVzdCwgb3BlcmF0aW9uLnJlc3BvbnNlXSlcbiAgICAgIH1cblxuICAgICAgLy8gNC4zXG4gICAgICByZXR1cm4gcmVzdWx0TGlzdFxuICAgIH0gY2F0Y2ggKGUpIHsgLy8gNS5cbiAgICAgIC8vIDUuMVxuICAgICAgdGhpcy4jcmVsZXZhbnRSZXF1ZXN0UmVzcG9uc2VMaXN0Lmxlbmd0aCA9IDBcblxuICAgICAgLy8gNS4yXG4gICAgICB0aGlzLiNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3QgPSBiYWNrdXBDYWNoZVxuXG4gICAgICAvLyA1LjNcbiAgICAgIHRocm93IGVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jcXVlcnktY2FjaGVcbiAgICogQHBhcmFtIHthbnl9IHJlcXVlc3RRdWVyeVxuICAgKiBAcGFyYW0ge2ltcG9ydCgnLi4vLi4vdHlwZXMvY2FjaGUnKS5DYWNoZVF1ZXJ5T3B0aW9uc30gb3B0aW9uc1xuICAgKiBAcGFyYW0ge3JlcXVlc3RSZXNwb25zZUxpc3R9IHRhcmdldFN0b3JhZ2VcbiAgICogQHJldHVybnMge3JlcXVlc3RSZXNwb25zZUxpc3R9XG4gICAqL1xuICAjcXVlcnlDYWNoZSAocmVxdWVzdFF1ZXJ5LCBvcHRpb25zLCB0YXJnZXRTdG9yYWdlKSB7XG4gICAgLyoqIEB0eXBlIHtyZXF1ZXN0UmVzcG9uc2VMaXN0fSAqL1xuICAgIGNvbnN0IHJlc3VsdExpc3QgPSBbXVxuXG4gICAgY29uc3Qgc3RvcmFnZSA9IHRhcmdldFN0b3JhZ2UgPz8gdGhpcy4jcmVsZXZhbnRSZXF1ZXN0UmVzcG9uc2VMaXN0XG5cbiAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiBzdG9yYWdlKSB7XG4gICAgICBjb25zdCBbY2FjaGVkUmVxdWVzdCwgY2FjaGVkUmVzcG9uc2VdID0gcmVxdWVzdFJlc3BvbnNlXG4gICAgICBpZiAodGhpcy4jcmVxdWVzdE1hdGNoZXNDYWNoZWRJdGVtKHJlcXVlc3RRdWVyeSwgY2FjaGVkUmVxdWVzdCwgY2FjaGVkUmVzcG9uc2UsIG9wdGlvbnMpKSB7XG4gICAgICAgIHJlc3VsdExpc3QucHVzaChyZXF1ZXN0UmVzcG9uc2UpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdExpc3RcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNyZXF1ZXN0LW1hdGNoZXMtY2FjaGVkLWl0ZW0tYWxnb3JpdGhtXG4gICAqIEBwYXJhbSB7YW55fSByZXF1ZXN0UXVlcnlcbiAgICogQHBhcmFtIHthbnl9IHJlcXVlc3RcbiAgICogQHBhcmFtIHthbnkgfCBudWxsfSByZXNwb25zZVxuICAgKiBAcGFyYW0ge2ltcG9ydCgnLi4vLi4vdHlwZXMvY2FjaGUnKS5DYWNoZVF1ZXJ5T3B0aW9ucyB8IHVuZGVmaW5lZH0gb3B0aW9uc1xuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gICNyZXF1ZXN0TWF0Y2hlc0NhY2hlZEl0ZW0gKHJlcXVlc3RRdWVyeSwgcmVxdWVzdCwgcmVzcG9uc2UgPSBudWxsLCBvcHRpb25zKSB7XG4gICAgLy8gaWYgKG9wdGlvbnM/Lmlnbm9yZU1ldGhvZCA9PT0gZmFsc2UgJiYgcmVxdWVzdC5tZXRob2QgPT09ICdHRVQnKSB7XG4gICAgLy8gICByZXR1cm4gZmFsc2VcbiAgICAvLyB9XG5cbiAgICBjb25zdCBxdWVyeVVSTCA9IG5ldyBVUkwocmVxdWVzdFF1ZXJ5LnVybClcblxuICAgIGNvbnN0IGNhY2hlZFVSTCA9IG5ldyBVUkwocmVxdWVzdC51cmwpXG5cbiAgICBpZiAob3B0aW9ucz8uaWdub3JlU2VhcmNoKSB7XG4gICAgICBjYWNoZWRVUkwuc2VhcmNoID0gJydcblxuICAgICAgcXVlcnlVUkwuc2VhcmNoID0gJydcbiAgICB9XG5cbiAgICBpZiAoIXVybEVxdWFscyhxdWVyeVVSTCwgY2FjaGVkVVJMLCB0cnVlKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgcmVzcG9uc2UgPT0gbnVsbCB8fFxuICAgICAgb3B0aW9ucz8uaWdub3JlVmFyeSB8fFxuICAgICAgIXJlc3BvbnNlLmhlYWRlcnNMaXN0LmNvbnRhaW5zKCd2YXJ5JylcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgY29uc3QgZmllbGRWYWx1ZXMgPSBnZXRGaWVsZFZhbHVlcyhyZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ3ZhcnknKSlcblxuICAgIGZvciAoY29uc3QgZmllbGRWYWx1ZSBvZiBmaWVsZFZhbHVlcykge1xuICAgICAgaWYgKGZpZWxkVmFsdWUgPT09ICcqJykge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVxdWVzdFZhbHVlID0gcmVxdWVzdC5oZWFkZXJzTGlzdC5nZXQoZmllbGRWYWx1ZSlcbiAgICAgIGNvbnN0IHF1ZXJ5VmFsdWUgPSByZXF1ZXN0UXVlcnkuaGVhZGVyc0xpc3QuZ2V0KGZpZWxkVmFsdWUpXG5cbiAgICAgIC8vIElmIG9uZSBoYXMgdGhlIGhlYWRlciBhbmQgdGhlIG90aGVyIGRvZXNuJ3QsIG9yIG9uZSBoYXNcbiAgICAgIC8vIGEgZGlmZmVyZW50IHZhbHVlIHRoYW4gdGhlIG90aGVyLCByZXR1cm4gZmFsc2VcbiAgICAgIGlmIChyZXF1ZXN0VmFsdWUgIT09IHF1ZXJ5VmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWVcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDYWNoZS5wcm90b3R5cGUsIHtcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0NhY2hlJyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSxcbiAgbWF0Y2g6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG1hdGNoQWxsOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBhZGQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGFkZEFsbDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcHV0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBkZWxldGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGtleXM6IGtFbnVtZXJhYmxlUHJvcGVydHlcbn0pXG5cbmNvbnN0IGNhY2hlUXVlcnlPcHRpb25Db252ZXJ0ZXJzID0gW1xuICB7XG4gICAga2V5OiAnaWdub3JlU2VhcmNoJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4sXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZVxuICB9LFxuICB7XG4gICAga2V5OiAnaWdub3JlTWV0aG9kJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4sXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZVxuICB9LFxuICB7XG4gICAga2V5OiAnaWdub3JlVmFyeScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2VcbiAgfVxuXVxuXG53ZWJpZGwuY29udmVydGVycy5DYWNoZVF1ZXJ5T3B0aW9ucyA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKGNhY2hlUXVlcnlPcHRpb25Db252ZXJ0ZXJzKVxuXG53ZWJpZGwuY29udmVydGVycy5NdWx0aUNhY2hlUXVlcnlPcHRpb25zID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICAuLi5jYWNoZVF1ZXJ5T3B0aW9uQ29udmVydGVycyxcbiAge1xuICAgIGtleTogJ2NhY2hlTmFtZScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmdcbiAgfVxuXSlcblxud2ViaWRsLmNvbnZlcnRlcnMuUmVzcG9uc2UgPSB3ZWJpZGwuaW50ZXJmYWNlQ29udmVydGVyKFJlc3BvbnNlKVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8UmVxdWVzdEluZm8+J10gPSB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvXG4pXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBDYWNoZVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBrQ29uc3RydWN0IH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBDYWNoZSB9ID0gcmVxdWlyZSgnLi9jYWNoZScpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvd2ViaWRsJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcblxuY2xhc3MgQ2FjaGVTdG9yYWdlIHtcbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2Rmbi1yZWxldmFudC1uYW1lLXRvLWNhY2hlLW1hcFxuICAgKiBAdHlwZSB7TWFwPHN0cmluZywgaW1wb3J0KCcuL2NhY2hlJykucmVxdWVzdFJlc3BvbnNlTGlzdH1cbiAgICovXG4gICNjYWNoZXMgPSBuZXcgTWFwKClcblxuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgaWYgKGFyZ3VtZW50c1swXSAhPT0ga0NvbnN0cnVjdCkge1xuICAgICAgd2ViaWRsLmlsbGVnYWxDb25zdHJ1Y3RvcigpXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbWF0Y2ggKHJlcXVlc3QsIG9wdGlvbnMgPSB7fSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlU3RvcmFnZSlcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnQ2FjaGVTdG9yYWdlLm1hdGNoJyB9KVxuXG4gICAgcmVxdWVzdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKHJlcXVlc3QpXG4gICAgb3B0aW9ucyA9IHdlYmlkbC5jb252ZXJ0ZXJzLk11bHRpQ2FjaGVRdWVyeU9wdGlvbnMob3B0aW9ucylcblxuICAgIC8vIDEuXG4gICAgaWYgKG9wdGlvbnMuY2FjaGVOYW1lICE9IG51bGwpIHtcbiAgICAgIC8vIDEuMS4xLjFcbiAgICAgIGlmICh0aGlzLiNjYWNoZXMuaGFzKG9wdGlvbnMuY2FjaGVOYW1lKSkge1xuICAgICAgICAvLyAxLjEuMS4xLjFcbiAgICAgICAgY29uc3QgY2FjaGVMaXN0ID0gdGhpcy4jY2FjaGVzLmdldChvcHRpb25zLmNhY2hlTmFtZSlcbiAgICAgICAgY29uc3QgY2FjaGUgPSBuZXcgQ2FjaGUoa0NvbnN0cnVjdCwgY2FjaGVMaXN0KVxuXG4gICAgICAgIHJldHVybiBhd2FpdCBjYWNoZS5tYXRjaChyZXF1ZXN0LCBvcHRpb25zKVxuICAgICAgfVxuICAgIH0gZWxzZSB7IC8vIDIuXG4gICAgICAvLyAyLjJcbiAgICAgIGZvciAoY29uc3QgY2FjaGVMaXN0IG9mIHRoaXMuI2NhY2hlcy52YWx1ZXMoKSkge1xuICAgICAgICBjb25zdCBjYWNoZSA9IG5ldyBDYWNoZShrQ29uc3RydWN0LCBjYWNoZUxpc3QpXG5cbiAgICAgICAgLy8gMi4yLjEuMlxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNhY2hlLm1hdGNoKHJlcXVlc3QsIG9wdGlvbnMpXG5cbiAgICAgICAgaWYgKHJlc3BvbnNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNjYWNoZS1zdG9yYWdlLWhhc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fVxuICAgKi9cbiAgYXN5bmMgaGFzIChjYWNoZU5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZVN0b3JhZ2UpXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0NhY2hlU3RvcmFnZS5oYXMnIH0pXG5cbiAgICBjYWNoZU5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcoY2FjaGVOYW1lKVxuXG4gICAgLy8gMi4xLjFcbiAgICAvLyAyLjJcbiAgICByZXR1cm4gdGhpcy4jY2FjaGVzLmhhcyhjYWNoZU5hbWUpXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jZG9tLWNhY2hlc3RvcmFnZS1vcGVuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWVcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2FjaGU+fVxuICAgKi9cbiAgYXN5bmMgb3BlbiAoY2FjaGVOYW1lKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGVTdG9yYWdlKVxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdDYWNoZVN0b3JhZ2Uub3BlbicgfSlcblxuICAgIGNhY2hlTmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyhjYWNoZU5hbWUpXG5cbiAgICAvLyAyLjFcbiAgICBpZiAodGhpcy4jY2FjaGVzLmhhcyhjYWNoZU5hbWUpKSB7XG4gICAgICAvLyBhd2FpdCBjYWNoZXMub3BlbigndjEnKSAhPT0gYXdhaXQgY2FjaGVzLm9wZW4oJ3YxJylcblxuICAgICAgLy8gMi4xLjFcbiAgICAgIGNvbnN0IGNhY2hlID0gdGhpcy4jY2FjaGVzLmdldChjYWNoZU5hbWUpXG5cbiAgICAgIC8vIDIuMS4xLjFcbiAgICAgIHJldHVybiBuZXcgQ2FjaGUoa0NvbnN0cnVjdCwgY2FjaGUpXG4gICAgfVxuXG4gICAgLy8gMi4yXG4gICAgY29uc3QgY2FjaGUgPSBbXVxuXG4gICAgLy8gMi4zXG4gICAgdGhpcy4jY2FjaGVzLnNldChjYWNoZU5hbWUsIGNhY2hlKVxuXG4gICAgLy8gMi40XG4gICAgcmV0dXJuIG5ldyBDYWNoZShrQ29uc3RydWN0LCBjYWNoZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNjYWNoZS1zdG9yYWdlLWRlbGV0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fVxuICAgKi9cbiAgYXN5bmMgZGVsZXRlIChjYWNoZU5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZVN0b3JhZ2UpXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0NhY2hlU3RvcmFnZS5kZWxldGUnIH0pXG5cbiAgICBjYWNoZU5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcoY2FjaGVOYW1lKVxuXG4gICAgcmV0dXJuIHRoaXMuI2NhY2hlcy5kZWxldGUoY2FjaGVOYW1lKVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2NhY2hlLXN0b3JhZ2Uta2V5c1xuICAgKiBAcmV0dXJucyB7c3RyaW5nW119XG4gICAqL1xuICBhc3luYyBrZXlzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZVN0b3JhZ2UpXG5cbiAgICAvLyAyLjFcbiAgICBjb25zdCBrZXlzID0gdGhpcy4jY2FjaGVzLmtleXMoKVxuXG4gICAgLy8gMi4yXG4gICAgcmV0dXJuIFsuLi5rZXlzXVxuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENhY2hlU3RvcmFnZS5wcm90b3R5cGUsIHtcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0NhY2hlU3RvcmFnZScsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0sXG4gIG1hdGNoOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBoYXM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9wZW46IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGRlbGV0ZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAga2V5czoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIENhY2hlU3RvcmFnZVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuLy8gaHR0cHM6Ly93aWNnLmdpdGh1Yi5pby9jb29raWUtc3RvcmUvI2Nvb2tpZS1tYXhpbXVtLWF0dHJpYnV0ZS12YWx1ZS1zaXplXG5jb25zdCBtYXhBdHRyaWJ1dGVWYWx1ZVNpemUgPSAxMDI0XG5cbi8vIGh0dHBzOi8vd2ljZy5naXRodWIuaW8vY29va2llLXN0b3JlLyNjb29raWUtbWF4aW11bS1uYW1lLXZhbHVlLXBhaXItc2l6ZVxuY29uc3QgbWF4TmFtZVZhbHVlUGFpclNpemUgPSA0MDk2XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtYXhBdHRyaWJ1dGVWYWx1ZVNpemUsXG4gIG1heE5hbWVWYWx1ZVBhaXJTaXplXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBrSGVhZGVyc0xpc3QgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5cbmZ1bmN0aW9uIGlzQ1RMRXhjbHVkaW5nSHRhYiAodmFsdWUpIHtcbiAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgZm9yIChjb25zdCBjaGFyIG9mIHZhbHVlKSB7XG4gICAgY29uc3QgY29kZSA9IGNoYXIuY2hhckNvZGVBdCgwKVxuXG4gICAgaWYgKFxuICAgICAgKGNvZGUgPj0gMHgwMCB8fCBjb2RlIDw9IDB4MDgpIHx8XG4gICAgICAoY29kZSA+PSAweDBBIHx8IGNvZGUgPD0gMHgxRikgfHxcbiAgICAgIGNvZGUgPT09IDB4N0ZcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiBDSEFSICAgICAgICAgICA9IDxhbnkgVVMtQVNDSUkgY2hhcmFjdGVyIChvY3RldHMgMCAtIDEyNyk+XG4gdG9rZW4gICAgICAgICAgPSAxKjxhbnkgQ0hBUiBleGNlcHQgQ1RMcyBvciBzZXBhcmF0b3JzPlxuIHNlcGFyYXRvcnMgICAgID0gXCIoXCIgfCBcIilcIiB8IFwiPFwiIHwgXCI+XCIgfCBcIkBcIlxuICAgICAgICAgICAgICAgIHwgXCIsXCIgfCBcIjtcIiB8IFwiOlwiIHwgXCJcXFwiIHwgPFwiPlxuICAgICAgICAgICAgICAgIHwgXCIvXCIgfCBcIltcIiB8IFwiXVwiIHwgXCI/XCIgfCBcIj1cIlxuICAgICAgICAgICAgICAgIHwgXCJ7XCIgfCBcIn1cIiB8IFNQIHwgSFRcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQ29va2llTmFtZSAobmFtZSkge1xuICBmb3IgKGNvbnN0IGNoYXIgb2YgbmFtZSkge1xuICAgIGNvbnN0IGNvZGUgPSBjaGFyLmNoYXJDb2RlQXQoMClcblxuICAgIGlmIChcbiAgICAgIChjb2RlIDw9IDB4MjAgfHwgY29kZSA+IDB4N0YpIHx8XG4gICAgICBjaGFyID09PSAnKCcgfHxcbiAgICAgIGNoYXIgPT09ICcpJyB8fFxuICAgICAgY2hhciA9PT0gJz4nIHx8XG4gICAgICBjaGFyID09PSAnPCcgfHxcbiAgICAgIGNoYXIgPT09ICdAJyB8fFxuICAgICAgY2hhciA9PT0gJywnIHx8XG4gICAgICBjaGFyID09PSAnOycgfHxcbiAgICAgIGNoYXIgPT09ICc6JyB8fFxuICAgICAgY2hhciA9PT0gJ1xcXFwnIHx8XG4gICAgICBjaGFyID09PSAnXCInIHx8XG4gICAgICBjaGFyID09PSAnLycgfHxcbiAgICAgIGNoYXIgPT09ICdbJyB8fFxuICAgICAgY2hhciA9PT0gJ10nIHx8XG4gICAgICBjaGFyID09PSAnPycgfHxcbiAgICAgIGNoYXIgPT09ICc9JyB8fFxuICAgICAgY2hhciA9PT0gJ3snIHx8XG4gICAgICBjaGFyID09PSAnfSdcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb29raWUgbmFtZScpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuIGNvb2tpZS12YWx1ZSAgICAgID0gKmNvb2tpZS1vY3RldCAvICggRFFVT1RFICpjb29raWUtb2N0ZXQgRFFVT1RFIClcbiBjb29raWUtb2N0ZXQgICAgICA9ICV4MjEgLyAleDIzLTJCIC8gJXgyRC0zQSAvICV4M0MtNUIgLyAleDVELTdFXG4gICAgICAgICAgICAgICAgICAgICAgIDsgVVMtQVNDSUkgY2hhcmFjdGVycyBleGNsdWRpbmcgQ1RMcyxcbiAgICAgICAgICAgICAgICAgICAgICAgOyB3aGl0ZXNwYWNlIERRVU9URSwgY29tbWEsIHNlbWljb2xvbixcbiAgICAgICAgICAgICAgICAgICAgICAgOyBhbmQgYmFja3NsYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVDb29raWVWYWx1ZSAodmFsdWUpIHtcbiAgZm9yIChjb25zdCBjaGFyIG9mIHZhbHVlKSB7XG4gICAgY29uc3QgY29kZSA9IGNoYXIuY2hhckNvZGVBdCgwKVxuXG4gICAgaWYgKFxuICAgICAgY29kZSA8IDB4MjEgfHwgLy8gZXhjbHVkZSBDVExzICgwLTMxKVxuICAgICAgY29kZSA9PT0gMHgyMiB8fFxuICAgICAgY29kZSA9PT0gMHgyQyB8fFxuICAgICAgY29kZSA9PT0gMHgzQiB8fFxuICAgICAgY29kZSA9PT0gMHg1QyB8fFxuICAgICAgY29kZSA+IDB4N0UgLy8gbm9uLWFzY2lpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaGVhZGVyIHZhbHVlJylcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBwYXRoLXZhbHVlICAgICAgICA9IDxhbnkgQ0hBUiBleGNlcHQgQ1RMcyBvciBcIjtcIj5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQ29va2llUGF0aCAocGF0aCkge1xuICBmb3IgKGNvbnN0IGNoYXIgb2YgcGF0aCkge1xuICAgIGNvbnN0IGNvZGUgPSBjaGFyLmNoYXJDb2RlQXQoMClcblxuICAgIGlmIChjb2RlIDwgMHgyMSB8fCBjaGFyID09PSAnOycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb29raWUgcGF0aCcpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogSSBoYXZlIG5vIGlkZWEgd2h5IHRoZXNlIHZhbHVlcyBhcmVuJ3QgYWxsb3dlZCB0byBiZSBob25lc3QsXG4gKiBidXQgRGVubyB0ZXN0cyB0aGVzZS4gLSBLaGFmcmFcbiAqIEBwYXJhbSB7c3RyaW5nfSBkb21haW5cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVDb29raWVEb21haW4gKGRvbWFpbikge1xuICBpZiAoXG4gICAgZG9tYWluLnN0YXJ0c1dpdGgoJy0nKSB8fFxuICAgIGRvbWFpbi5lbmRzV2l0aCgnLicpIHx8XG4gICAgZG9tYWluLmVuZHNXaXRoKCctJylcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvb2tpZSBkb21haW4nKVxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNzIzMSNzZWN0aW9uLTcuMS4xLjFcbiAqIEBwYXJhbSB7bnVtYmVyfERhdGV9IGRhdGVcbiAgSU1GLWZpeGRhdGUgID0gZGF5LW5hbWUgXCIsXCIgU1AgZGF0ZTEgU1AgdGltZS1vZi1kYXkgU1AgR01UXG4gIDsgZml4ZWQgbGVuZ3RoL3pvbmUvY2FwaXRhbGl6YXRpb24gc3Vic2V0IG9mIHRoZSBmb3JtYXRcbiAgOyBzZWUgU2VjdGlvbiAzLjMgb2YgW1JGQzUzMjJdXG5cbiAgZGF5LW5hbWUgICAgID0gJXg0RC42Ri42RSA7IFwiTW9uXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg1NC43NS42NSA7IFwiVHVlXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg1Ny42NS42NCA7IFwiV2VkXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg1NC42OC43NSA7IFwiVGh1XCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0Ni43Mi42OSA7IFwiRnJpXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg1My42MS43NCA7IFwiU2F0XCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg1My43NS42RSA7IFwiU3VuXCIsIGNhc2Utc2Vuc2l0aXZlXG4gIGRhdGUxICAgICAgICA9IGRheSBTUCBtb250aCBTUCB5ZWFyXG4gICAgICAgICAgICAgICAgICA7IGUuZy4sIDAyIEp1biAxOTgyXG5cbiAgZGF5ICAgICAgICAgID0gMkRJR0lUXG4gIG1vbnRoICAgICAgICA9ICV4NEEuNjEuNkUgOyBcIkphblwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NDYuNjUuNjIgOyBcIkZlYlwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NEQuNjEuNzIgOyBcIk1hclwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NDEuNzAuNzIgOyBcIkFwclwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NEQuNjEuNzkgOyBcIk1heVwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NEEuNzUuNkUgOyBcIkp1blwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NEEuNzUuNkMgOyBcIkp1bFwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NDEuNzUuNjcgOyBcIkF1Z1wiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NTMuNjUuNzAgOyBcIlNlcFwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NEYuNjMuNzQgOyBcIk9jdFwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NEUuNkYuNzYgOyBcIk5vdlwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NDQuNjUuNjMgOyBcIkRlY1wiLCBjYXNlLXNlbnNpdGl2ZVxuICB5ZWFyICAgICAgICAgPSA0RElHSVRcblxuICBHTVQgICAgICAgICAgPSAleDQ3LjRELjU0IDsgXCJHTVRcIiwgY2FzZS1zZW5zaXRpdmVcblxuICB0aW1lLW9mLWRheSAgPSBob3VyIFwiOlwiIG1pbnV0ZSBcIjpcIiBzZWNvbmRcbiAgICAgICAgICAgICAgOyAwMDowMDowMCAtIDIzOjU5OjYwIChsZWFwIHNlY29uZClcblxuICBob3VyICAgICAgICAgPSAyRElHSVRcbiAgbWludXRlICAgICAgID0gMkRJR0lUXG4gIHNlY29uZCAgICAgICA9IDJESUdJVFxuICovXG5mdW5jdGlvbiB0b0lNRkRhdGUgKGRhdGUpIHtcbiAgaWYgKHR5cGVvZiBkYXRlID09PSAnbnVtYmVyJykge1xuICAgIGRhdGUgPSBuZXcgRGF0ZShkYXRlKVxuICB9XG5cbiAgY29uc3QgZGF5cyA9IFtcbiAgICAnU3VuJywgJ01vbicsICdUdWUnLCAnV2VkJyxcbiAgICAnVGh1JywgJ0ZyaScsICdTYXQnXG4gIF1cblxuICBjb25zdCBtb250aHMgPSBbXG4gICAgJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJyxcbiAgICAnSnVsJywgJ0F1ZycsICdTZXAnLCAnT2N0JywgJ05vdicsICdEZWMnXG4gIF1cblxuICBjb25zdCBkYXlOYW1lID0gZGF5c1tkYXRlLmdldFVUQ0RheSgpXVxuICBjb25zdCBkYXkgPSBkYXRlLmdldFVUQ0RhdGUoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcbiAgY29uc3QgbW9udGggPSBtb250aHNbZGF0ZS5nZXRVVENNb250aCgpXVxuICBjb25zdCB5ZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpXG4gIGNvbnN0IGhvdXIgPSBkYXRlLmdldFVUQ0hvdXJzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpXG4gIGNvbnN0IG1pbnV0ZSA9IGRhdGUuZ2V0VVRDTWludXRlcygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKVxuICBjb25zdCBzZWNvbmQgPSBkYXRlLmdldFVUQ1NlY29uZHMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcblxuICByZXR1cm4gYCR7ZGF5TmFtZX0sICR7ZGF5fSAke21vbnRofSAke3llYXJ9ICR7aG91cn06JHttaW51dGV9OiR7c2Vjb25kfSBHTVRgXG59XG5cbi8qKlxuIG1heC1hZ2UtYXYgICAgICAgID0gXCJNYXgtQWdlPVwiIG5vbi16ZXJvLWRpZ2l0ICpESUdJVFxuICAgICAgICAgICAgICAgICAgICAgICA7IEluIHByYWN0aWNlLCBib3RoIGV4cGlyZXMtYXYgYW5kIG1heC1hZ2UtYXZcbiAgICAgICAgICAgICAgICAgICAgICAgOyBhcmUgbGltaXRlZCB0byBkYXRlcyByZXByZXNlbnRhYmxlIGJ5IHRoZVxuICAgICAgICAgICAgICAgICAgICAgICA7IHVzZXIgYWdlbnQuXG4gKiBAcGFyYW0ge251bWJlcn0gbWF4QWdlXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQ29va2llTWF4QWdlIChtYXhBZ2UpIHtcbiAgaWYgKG1heEFnZSA8IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29va2llIG1heC1hZ2UnKVxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNjI2NSNzZWN0aW9uLTQuMS4xXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbmRleCcpLkNvb2tpZX0gY29va2llXG4gKi9cbmZ1bmN0aW9uIHN0cmluZ2lmeSAoY29va2llKSB7XG4gIGlmIChjb29raWUubmFtZS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgdmFsaWRhdGVDb29raWVOYW1lKGNvb2tpZS5uYW1lKVxuICB2YWxpZGF0ZUNvb2tpZVZhbHVlKGNvb2tpZS52YWx1ZSlcblxuICBjb25zdCBvdXQgPSBbYCR7Y29va2llLm5hbWV9PSR7Y29va2llLnZhbHVlfWBdXG5cbiAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtY29va2llLXByZWZpeGVzLTAwI3NlY3Rpb24tMy4xXG4gIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLWNvb2tpZS1wcmVmaXhlcy0wMCNzZWN0aW9uLTMuMlxuICBpZiAoY29va2llLm5hbWUuc3RhcnRzV2l0aCgnX19TZWN1cmUtJykpIHtcbiAgICBjb29raWUuc2VjdXJlID0gdHJ1ZVxuICB9XG5cbiAgaWYgKGNvb2tpZS5uYW1lLnN0YXJ0c1dpdGgoJ19fSG9zdC0nKSkge1xuICAgIGNvb2tpZS5zZWN1cmUgPSB0cnVlXG4gICAgY29va2llLmRvbWFpbiA9IG51bGxcbiAgICBjb29raWUucGF0aCA9ICcvJ1xuICB9XG5cbiAgaWYgKGNvb2tpZS5zZWN1cmUpIHtcbiAgICBvdXQucHVzaCgnU2VjdXJlJylcbiAgfVxuXG4gIGlmIChjb29raWUuaHR0cE9ubHkpIHtcbiAgICBvdXQucHVzaCgnSHR0cE9ubHknKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBjb29raWUubWF4QWdlID09PSAnbnVtYmVyJykge1xuICAgIHZhbGlkYXRlQ29va2llTWF4QWdlKGNvb2tpZS5tYXhBZ2UpXG4gICAgb3V0LnB1c2goYE1heC1BZ2U9JHtjb29raWUubWF4QWdlfWApXG4gIH1cblxuICBpZiAoY29va2llLmRvbWFpbikge1xuICAgIHZhbGlkYXRlQ29va2llRG9tYWluKGNvb2tpZS5kb21haW4pXG4gICAgb3V0LnB1c2goYERvbWFpbj0ke2Nvb2tpZS5kb21haW59YClcbiAgfVxuXG4gIGlmIChjb29raWUucGF0aCkge1xuICAgIHZhbGlkYXRlQ29va2llUGF0aChjb29raWUucGF0aClcbiAgICBvdXQucHVzaChgUGF0aD0ke2Nvb2tpZS5wYXRofWApXG4gIH1cblxuICBpZiAoY29va2llLmV4cGlyZXMgJiYgY29va2llLmV4cGlyZXMudG9TdHJpbmcoKSAhPT0gJ0ludmFsaWQgRGF0ZScpIHtcbiAgICBvdXQucHVzaChgRXhwaXJlcz0ke3RvSU1GRGF0ZShjb29raWUuZXhwaXJlcyl9YClcbiAgfVxuXG4gIGlmIChjb29raWUuc2FtZVNpdGUpIHtcbiAgICBvdXQucHVzaChgU2FtZVNpdGU9JHtjb29raWUuc2FtZVNpdGV9YClcbiAgfVxuXG4gIGZvciAoY29uc3QgcGFydCBvZiBjb29raWUudW5wYXJzZWQpIHtcbiAgICBpZiAoIXBhcnQuaW5jbHVkZXMoJz0nKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHVucGFyc2VkJylcbiAgICB9XG5cbiAgICBjb25zdCBba2V5LCAuLi52YWx1ZV0gPSBwYXJ0LnNwbGl0KCc9JylcblxuICAgIG91dC5wdXNoKGAke2tleS50cmltKCl9PSR7dmFsdWUuam9pbignPScpfWApXG4gIH1cblxuICByZXR1cm4gb3V0LmpvaW4oJzsgJylcbn1cblxubGV0IGtIZWFkZXJzTGlzdE5vZGVcblxuZnVuY3Rpb24gZ2V0SGVhZGVyc0xpc3QgKGhlYWRlcnMpIHtcbiAgaWYgKGhlYWRlcnNba0hlYWRlcnNMaXN0XSkge1xuICAgIHJldHVybiBoZWFkZXJzW2tIZWFkZXJzTGlzdF1cbiAgfVxuXG4gIGlmICgha0hlYWRlcnNMaXN0Tm9kZSkge1xuICAgIGtIZWFkZXJzTGlzdE5vZGUgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGhlYWRlcnMpLmZpbmQoXG4gICAgICAoc3ltYm9sKSA9PiBzeW1ib2wuZGVzY3JpcHRpb24gPT09ICdoZWFkZXJzIGxpc3QnXG4gICAgKVxuXG4gICAgYXNzZXJ0KGtIZWFkZXJzTGlzdE5vZGUsICdIZWFkZXJzIGNhbm5vdCBiZSBwYXJzZWQnKVxuICB9XG5cbiAgY29uc3QgaGVhZGVyc0xpc3QgPSBoZWFkZXJzW2tIZWFkZXJzTGlzdE5vZGVdXG4gIGFzc2VydChoZWFkZXJzTGlzdClcblxuICByZXR1cm4gaGVhZGVyc0xpc3Rcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGlzQ1RMRXhjbHVkaW5nSHRhYixcbiAgc3RyaW5naWZ5LFxuICBnZXRIZWFkZXJzTGlzdFxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBtYXhOYW1lVmFsdWVQYWlyU2l6ZSwgbWF4QXR0cmlidXRlVmFsdWVTaXplIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7IGlzQ1RMRXhjbHVkaW5nSHRhYiB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2RhdGFVUkwnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUGFyc2VzIHRoZSBmaWVsZC12YWx1ZSBhdHRyaWJ1dGVzIG9mIGEgc2V0LWNvb2tpZSBoZWFkZXIgc3RyaW5nLlxuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1yZmM2MjY1YmlzI3NlY3Rpb24tNS40XG4gKiBAcGFyYW0ge3N0cmluZ30gaGVhZGVyXG4gKiBAcmV0dXJucyBpZiB0aGUgaGVhZGVyIGlzIGludmFsaWQsIG51bGwgd2lsbCBiZSByZXR1cm5lZFxuICovXG5mdW5jdGlvbiBwYXJzZVNldENvb2tpZSAoaGVhZGVyKSB7XG4gIC8vIDEuIElmIHRoZSBzZXQtY29va2llLXN0cmluZyBjb250YWlucyBhICV4MDAtMDggLyAleDBBLTFGIC8gJXg3RlxuICAvLyAgICBjaGFyYWN0ZXIgKENUTCBjaGFyYWN0ZXJzIGV4Y2x1ZGluZyBIVEFCKTogQWJvcnQgdGhlc2Ugc3RlcHMgYW5kXG4gIC8vICAgIGlnbm9yZSB0aGUgc2V0LWNvb2tpZS1zdHJpbmcgZW50aXJlbHkuXG4gIGlmIChpc0NUTEV4Y2x1ZGluZ0h0YWIoaGVhZGVyKSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBsZXQgbmFtZVZhbHVlUGFpciA9ICcnXG4gIGxldCB1bnBhcnNlZEF0dHJpYnV0ZXMgPSAnJ1xuICBsZXQgbmFtZSA9ICcnXG4gIGxldCB2YWx1ZSA9ICcnXG5cbiAgLy8gMi4gSWYgdGhlIHNldC1jb29raWUtc3RyaW5nIGNvbnRhaW5zIGEgJXgzQiAoXCI7XCIpIGNoYXJhY3RlcjpcbiAgaWYgKGhlYWRlci5pbmNsdWRlcygnOycpKSB7XG4gICAgLy8gMS4gVGhlIG5hbWUtdmFsdWUtcGFpciBzdHJpbmcgY29uc2lzdHMgb2YgdGhlIGNoYXJhY3RlcnMgdXAgdG8sXG4gICAgLy8gICAgYnV0IG5vdCBpbmNsdWRpbmcsIHRoZSBmaXJzdCAleDNCIChcIjtcIiksIGFuZCB0aGUgdW5wYXJzZWQtXG4gICAgLy8gICAgYXR0cmlidXRlcyBjb25zaXN0IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHNldC1jb29raWUtc3RyaW5nXG4gICAgLy8gICAgKGluY2x1ZGluZyB0aGUgJXgzQiAoXCI7XCIpIGluIHF1ZXN0aW9uKS5cbiAgICBjb25zdCBwb3NpdGlvbiA9IHsgcG9zaXRpb246IDAgfVxuXG4gICAgbmFtZVZhbHVlUGFpciA9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0KCc7JywgaGVhZGVyLCBwb3NpdGlvbilcbiAgICB1bnBhcnNlZEF0dHJpYnV0ZXMgPSBoZWFkZXIuc2xpY2UocG9zaXRpb24ucG9zaXRpb24pXG4gIH0gZWxzZSB7XG4gICAgLy8gT3RoZXJ3aXNlOlxuXG4gICAgLy8gMS4gVGhlIG5hbWUtdmFsdWUtcGFpciBzdHJpbmcgY29uc2lzdHMgb2YgYWxsIHRoZSBjaGFyYWN0ZXJzXG4gICAgLy8gICAgY29udGFpbmVkIGluIHRoZSBzZXQtY29va2llLXN0cmluZywgYW5kIHRoZSB1bnBhcnNlZC1cbiAgICAvLyAgICBhdHRyaWJ1dGVzIGlzIHRoZSBlbXB0eSBzdHJpbmcuXG4gICAgbmFtZVZhbHVlUGFpciA9IGhlYWRlclxuICB9XG5cbiAgLy8gMy4gSWYgdGhlIG5hbWUtdmFsdWUtcGFpciBzdHJpbmcgbGFja3MgYSAleDNEIChcIj1cIikgY2hhcmFjdGVyLCB0aGVuXG4gIC8vICAgIHRoZSBuYW1lIHN0cmluZyBpcyBlbXB0eSwgYW5kIHRoZSB2YWx1ZSBzdHJpbmcgaXMgdGhlIHZhbHVlIG9mXG4gIC8vICAgIG5hbWUtdmFsdWUtcGFpci5cbiAgaWYgKCFuYW1lVmFsdWVQYWlyLmluY2x1ZGVzKCc9JykpIHtcbiAgICB2YWx1ZSA9IG5hbWVWYWx1ZVBhaXJcbiAgfSBlbHNlIHtcbiAgICAvLyAgICBPdGhlcndpc2UsIHRoZSBuYW1lIHN0cmluZyBjb25zaXN0cyBvZiB0aGUgY2hhcmFjdGVycyB1cCB0bywgYnV0XG4gICAgLy8gICAgbm90IGluY2x1ZGluZywgdGhlIGZpcnN0ICV4M0QgKFwiPVwiKSBjaGFyYWN0ZXIsIGFuZCB0aGUgKHBvc3NpYmx5XG4gICAgLy8gICAgZW1wdHkpIHZhbHVlIHN0cmluZyBjb25zaXN0cyBvZiB0aGUgY2hhcmFjdGVycyBhZnRlciB0aGUgZmlyc3RcbiAgICAvLyAgICAleDNEIChcIj1cIikgY2hhcmFjdGVyLlxuICAgIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogMCB9XG4gICAgbmFtZSA9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0KFxuICAgICAgJz0nLFxuICAgICAgbmFtZVZhbHVlUGFpcixcbiAgICAgIHBvc2l0aW9uXG4gICAgKVxuICAgIHZhbHVlID0gbmFtZVZhbHVlUGFpci5zbGljZShwb3NpdGlvbi5wb3NpdGlvbiArIDEpXG4gIH1cblxuICAvLyA0LiBSZW1vdmUgYW55IGxlYWRpbmcgb3IgdHJhaWxpbmcgV1NQIGNoYXJhY3RlcnMgZnJvbSB0aGUgbmFtZVxuICAvLyAgICBzdHJpbmcgYW5kIHRoZSB2YWx1ZSBzdHJpbmcuXG4gIG5hbWUgPSBuYW1lLnRyaW0oKVxuICB2YWx1ZSA9IHZhbHVlLnRyaW0oKVxuXG4gIC8vIDUuIElmIHRoZSBzdW0gb2YgdGhlIGxlbmd0aHMgb2YgdGhlIG5hbWUgc3RyaW5nIGFuZCB0aGUgdmFsdWUgc3RyaW5nXG4gIC8vICAgIGlzIG1vcmUgdGhhbiA0MDk2IG9jdGV0cywgYWJvcnQgdGhlc2Ugc3RlcHMgYW5kIGlnbm9yZSB0aGUgc2V0LVxuICAvLyAgICBjb29raWUtc3RyaW5nIGVudGlyZWx5LlxuICBpZiAobmFtZS5sZW5ndGggKyB2YWx1ZS5sZW5ndGggPiBtYXhOYW1lVmFsdWVQYWlyU2l6ZSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvLyA2LiBUaGUgY29va2llLW5hbWUgaXMgdGhlIG5hbWUgc3RyaW5nLCBhbmQgdGhlIGNvb2tpZS12YWx1ZSBpcyB0aGVcbiAgLy8gICAgdmFsdWUgc3RyaW5nLlxuICByZXR1cm4ge1xuICAgIG5hbWUsIHZhbHVlLCAuLi5wYXJzZVVucGFyc2VkQXR0cmlidXRlcyh1bnBhcnNlZEF0dHJpYnV0ZXMpXG4gIH1cbn1cblxuLyoqXG4gKiBQYXJzZXMgdGhlIHJlbWFpbmluZyBhdHRyaWJ1dGVzIG9mIGEgc2V0LWNvb2tpZSBoZWFkZXJcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtcmZjNjI2NWJpcyNzZWN0aW9uLTUuNFxuICogQHBhcmFtIHtzdHJpbmd9IHVucGFyc2VkQXR0cmlidXRlc1xuICogQHBhcmFtIHtbT2JqZWN0LjxzdHJpbmcsIHVua25vd24+XT17fX0gY29va2llQXR0cmlidXRlTGlzdFxuICovXG5mdW5jdGlvbiBwYXJzZVVucGFyc2VkQXR0cmlidXRlcyAodW5wYXJzZWRBdHRyaWJ1dGVzLCBjb29raWVBdHRyaWJ1dGVMaXN0ID0ge30pIHtcbiAgLy8gMS4gSWYgdGhlIHVucGFyc2VkLWF0dHJpYnV0ZXMgc3RyaW5nIGlzIGVtcHR5LCBza2lwIHRoZSByZXN0IG9mXG4gIC8vICAgIHRoZXNlIHN0ZXBzLlxuICBpZiAodW5wYXJzZWRBdHRyaWJ1dGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBjb29raWVBdHRyaWJ1dGVMaXN0XG4gIH1cblxuICAvLyAyLiBEaXNjYXJkIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIHVucGFyc2VkLWF0dHJpYnV0ZXMgKHdoaWNoXG4gIC8vICAgIHdpbGwgYmUgYSAleDNCIChcIjtcIikgY2hhcmFjdGVyKS5cbiAgYXNzZXJ0KHVucGFyc2VkQXR0cmlidXRlc1swXSA9PT0gJzsnKVxuICB1bnBhcnNlZEF0dHJpYnV0ZXMgPSB1bnBhcnNlZEF0dHJpYnV0ZXMuc2xpY2UoMSlcblxuICBsZXQgY29va2llQXYgPSAnJ1xuXG4gIC8vIDMuIElmIHRoZSByZW1haW5pbmcgdW5wYXJzZWQtYXR0cmlidXRlcyBjb250YWlucyBhICV4M0IgKFwiO1wiKVxuICAvLyAgICBjaGFyYWN0ZXI6XG4gIGlmICh1bnBhcnNlZEF0dHJpYnV0ZXMuaW5jbHVkZXMoJzsnKSkge1xuICAgIC8vIDEuIENvbnN1bWUgdGhlIGNoYXJhY3RlcnMgb2YgdGhlIHVucGFyc2VkLWF0dHJpYnV0ZXMgdXAgdG8sIGJ1dFxuICAgIC8vICAgIG5vdCBpbmNsdWRpbmcsIHRoZSBmaXJzdCAleDNCIChcIjtcIikgY2hhcmFjdGVyLlxuICAgIGNvb2tpZUF2ID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoXG4gICAgICAnOycsXG4gICAgICB1bnBhcnNlZEF0dHJpYnV0ZXMsXG4gICAgICB7IHBvc2l0aW9uOiAwIH1cbiAgICApXG4gICAgdW5wYXJzZWRBdHRyaWJ1dGVzID0gdW5wYXJzZWRBdHRyaWJ1dGVzLnNsaWNlKGNvb2tpZUF2Lmxlbmd0aClcbiAgfSBlbHNlIHtcbiAgICAvLyBPdGhlcndpc2U6XG5cbiAgICAvLyAxLiBDb25zdW1lIHRoZSByZW1haW5kZXIgb2YgdGhlIHVucGFyc2VkLWF0dHJpYnV0ZXMuXG4gICAgY29va2llQXYgPSB1bnBhcnNlZEF0dHJpYnV0ZXNcbiAgICB1bnBhcnNlZEF0dHJpYnV0ZXMgPSAnJ1xuICB9XG5cbiAgLy8gTGV0IHRoZSBjb29raWUtYXYgc3RyaW5nIGJlIHRoZSBjaGFyYWN0ZXJzIGNvbnN1bWVkIGluIHRoaXMgc3RlcC5cblxuICBsZXQgYXR0cmlidXRlTmFtZSA9ICcnXG4gIGxldCBhdHRyaWJ1dGVWYWx1ZSA9ICcnXG5cbiAgLy8gNC4gSWYgdGhlIGNvb2tpZS1hdiBzdHJpbmcgY29udGFpbnMgYSAleDNEIChcIj1cIikgY2hhcmFjdGVyOlxuICBpZiAoY29va2llQXYuaW5jbHVkZXMoJz0nKSkge1xuICAgIC8vIDEuIFRoZSAocG9zc2libHkgZW1wdHkpIGF0dHJpYnV0ZS1uYW1lIHN0cmluZyBjb25zaXN0cyBvZiB0aGVcbiAgICAvLyAgICBjaGFyYWN0ZXJzIHVwIHRvLCBidXQgbm90IGluY2x1ZGluZywgdGhlIGZpcnN0ICV4M0QgKFwiPVwiKVxuICAgIC8vICAgIGNoYXJhY3RlciwgYW5kIHRoZSAocG9zc2libHkgZW1wdHkpIGF0dHJpYnV0ZS12YWx1ZSBzdHJpbmdcbiAgICAvLyAgICBjb25zaXN0cyBvZiB0aGUgY2hhcmFjdGVycyBhZnRlciB0aGUgZmlyc3QgJXgzRCAoXCI9XCIpXG4gICAgLy8gICAgY2hhcmFjdGVyLlxuICAgIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogMCB9XG5cbiAgICBhdHRyaWJ1dGVOYW1lID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoXG4gICAgICAnPScsXG4gICAgICBjb29raWVBdixcbiAgICAgIHBvc2l0aW9uXG4gICAgKVxuICAgIGF0dHJpYnV0ZVZhbHVlID0gY29va2llQXYuc2xpY2UocG9zaXRpb24ucG9zaXRpb24gKyAxKVxuICB9IGVsc2Uge1xuICAgIC8vIE90aGVyd2lzZTpcblxuICAgIC8vIDEuIFRoZSBhdHRyaWJ1dGUtbmFtZSBzdHJpbmcgY29uc2lzdHMgb2YgdGhlIGVudGlyZSBjb29raWUtYXZcbiAgICAvLyAgICBzdHJpbmcsIGFuZCB0aGUgYXR0cmlidXRlLXZhbHVlIHN0cmluZyBpcyBlbXB0eS5cbiAgICBhdHRyaWJ1dGVOYW1lID0gY29va2llQXZcbiAgfVxuXG4gIC8vIDUuIFJlbW92ZSBhbnkgbGVhZGluZyBvciB0cmFpbGluZyBXU1AgY2hhcmFjdGVycyBmcm9tIHRoZSBhdHRyaWJ1dGUtXG4gIC8vICAgIG5hbWUgc3RyaW5nIGFuZCB0aGUgYXR0cmlidXRlLXZhbHVlIHN0cmluZy5cbiAgYXR0cmlidXRlTmFtZSA9IGF0dHJpYnV0ZU5hbWUudHJpbSgpXG4gIGF0dHJpYnV0ZVZhbHVlID0gYXR0cmlidXRlVmFsdWUudHJpbSgpXG5cbiAgLy8gNi4gSWYgdGhlIGF0dHJpYnV0ZS12YWx1ZSBpcyBsb25nZXIgdGhhbiAxMDI0IG9jdGV0cywgaWdub3JlIHRoZVxuICAvLyAgICBjb29raWUtYXYgc3RyaW5nIGFuZCByZXR1cm4gdG8gU3RlcCAxIG9mIHRoaXMgYWxnb3JpdGhtLlxuICBpZiAoYXR0cmlidXRlVmFsdWUubGVuZ3RoID4gbWF4QXR0cmlidXRlVmFsdWVTaXplKSB7XG4gICAgcmV0dXJuIHBhcnNlVW5wYXJzZWRBdHRyaWJ1dGVzKHVucGFyc2VkQXR0cmlidXRlcywgY29va2llQXR0cmlidXRlTGlzdClcbiAgfVxuXG4gIC8vIDcuIFByb2Nlc3MgdGhlIGF0dHJpYnV0ZS1uYW1lIGFuZCBhdHRyaWJ1dGUtdmFsdWUgYWNjb3JkaW5nIHRvIHRoZVxuICAvLyAgICByZXF1aXJlbWVudHMgaW4gdGhlIGZvbGxvd2luZyBzdWJzZWN0aW9ucy4gIChOb3RpY2UgdGhhdFxuICAvLyAgICBhdHRyaWJ1dGVzIHdpdGggdW5yZWNvZ25pemVkIGF0dHJpYnV0ZS1uYW1lcyBhcmUgaWdub3JlZC4pXG4gIGNvbnN0IGF0dHJpYnV0ZU5hbWVMb3dlcmNhc2UgPSBhdHRyaWJ1dGVOYW1lLnRvTG93ZXJDYXNlKClcblxuICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1yZmM2MjY1YmlzI3NlY3Rpb24tNS40LjFcbiAgLy8gSWYgdGhlIGF0dHJpYnV0ZS1uYW1lIGNhc2UtaW5zZW5zaXRpdmVseSBtYXRjaGVzIHRoZSBzdHJpbmdcbiAgLy8gXCJFeHBpcmVzXCIsIHRoZSB1c2VyIGFnZW50IE1VU1QgcHJvY2VzcyB0aGUgY29va2llLWF2IGFzIGZvbGxvd3MuXG4gIGlmIChhdHRyaWJ1dGVOYW1lTG93ZXJjYXNlID09PSAnZXhwaXJlcycpIHtcbiAgICAvLyAxLiBMZXQgdGhlIGV4cGlyeS10aW1lIGJlIHRoZSByZXN1bHQgb2YgcGFyc2luZyB0aGUgYXR0cmlidXRlLXZhbHVlXG4gICAgLy8gICAgYXMgY29va2llLWRhdGUgKHNlZSBTZWN0aW9uIDUuMS4xKS5cbiAgICBjb25zdCBleHBpcnlUaW1lID0gbmV3IERhdGUoYXR0cmlidXRlVmFsdWUpXG5cbiAgICAvLyAyLiBJZiB0aGUgYXR0cmlidXRlLXZhbHVlIGZhaWxlZCB0byBwYXJzZSBhcyBhIGNvb2tpZSBkYXRlLCBpZ25vcmVcbiAgICAvLyAgICB0aGUgY29va2llLWF2LlxuXG4gICAgY29va2llQXR0cmlidXRlTGlzdC5leHBpcmVzID0gZXhwaXJ5VGltZVxuICB9IGVsc2UgaWYgKGF0dHJpYnV0ZU5hbWVMb3dlcmNhc2UgPT09ICdtYXgtYWdlJykge1xuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjQuMlxuICAgIC8vIElmIHRoZSBhdHRyaWJ1dGUtbmFtZSBjYXNlLWluc2Vuc2l0aXZlbHkgbWF0Y2hlcyB0aGUgc3RyaW5nIFwiTWF4LVxuICAgIC8vIEFnZVwiLCB0aGUgdXNlciBhZ2VudCBNVVNUIHByb2Nlc3MgdGhlIGNvb2tpZS1hdiBhcyBmb2xsb3dzLlxuXG4gICAgLy8gMS4gSWYgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgYXR0cmlidXRlLXZhbHVlIGlzIG5vdCBhIERJR0lUIG9yIGFcbiAgICAvLyAgICBcIi1cIiBjaGFyYWN0ZXIsIGlnbm9yZSB0aGUgY29va2llLWF2LlxuICAgIGNvbnN0IGNoYXJDb2RlID0gYXR0cmlidXRlVmFsdWUuY2hhckNvZGVBdCgwKVxuXG4gICAgaWYgKChjaGFyQ29kZSA8IDQ4IHx8IGNoYXJDb2RlID4gNTcpICYmIGF0dHJpYnV0ZVZhbHVlWzBdICE9PSAnLScpIHtcbiAgICAgIHJldHVybiBwYXJzZVVucGFyc2VkQXR0cmlidXRlcyh1bnBhcnNlZEF0dHJpYnV0ZXMsIGNvb2tpZUF0dHJpYnV0ZUxpc3QpXG4gICAgfVxuXG4gICAgLy8gMi4gSWYgdGhlIHJlbWFpbmRlciBvZiBhdHRyaWJ1dGUtdmFsdWUgY29udGFpbnMgYSBub24tRElHSVRcbiAgICAvLyAgICBjaGFyYWN0ZXIsIGlnbm9yZSB0aGUgY29va2llLWF2LlxuICAgIGlmICghL15cXGQrJC8udGVzdChhdHRyaWJ1dGVWYWx1ZSkpIHtcbiAgICAgIHJldHVybiBwYXJzZVVucGFyc2VkQXR0cmlidXRlcyh1bnBhcnNlZEF0dHJpYnV0ZXMsIGNvb2tpZUF0dHJpYnV0ZUxpc3QpXG4gICAgfVxuXG4gICAgLy8gMy4gTGV0IGRlbHRhLXNlY29uZHMgYmUgdGhlIGF0dHJpYnV0ZS12YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gaW50ZWdlci5cbiAgICBjb25zdCBkZWx0YVNlY29uZHMgPSBOdW1iZXIoYXR0cmlidXRlVmFsdWUpXG5cbiAgICAvLyA0LiBMZXQgY29va2llLWFnZS1saW1pdCBiZSB0aGUgbWF4aW11bSBhZ2Ugb2YgdGhlIGNvb2tpZSAod2hpY2hcbiAgICAvLyAgICBTSE9VTEQgYmUgNDAwIGRheXMgb3IgbGVzcywgc2VlIFNlY3Rpb24gNC4xLjIuMikuXG5cbiAgICAvLyA1LiBTZXQgZGVsdGEtc2Vjb25kcyB0byB0aGUgc21hbGxlciBvZiBpdHMgcHJlc2VudCB2YWx1ZSBhbmQgY29va2llLVxuICAgIC8vICAgIGFnZS1saW1pdC5cbiAgICAvLyBkZWx0YVNlY29uZHMgPSBNYXRoLm1pbihkZWx0YVNlY29uZHMgKiAxMDAwLCBtYXhFeHBpcmVzTXMpXG5cbiAgICAvLyA2LiBJZiBkZWx0YS1zZWNvbmRzIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB6ZXJvICgwKSwgbGV0IGV4cGlyeS1cbiAgICAvLyAgICB0aW1lIGJlIHRoZSBlYXJsaWVzdCByZXByZXNlbnRhYmxlIGRhdGUgYW5kIHRpbWUuICBPdGhlcndpc2UsIGxldFxuICAgIC8vICAgIHRoZSBleHBpcnktdGltZSBiZSB0aGUgY3VycmVudCBkYXRlIGFuZCB0aW1lIHBsdXMgZGVsdGEtc2Vjb25kc1xuICAgIC8vICAgIHNlY29uZHMuXG4gICAgLy8gY29uc3QgZXhwaXJ5VGltZSA9IGRlbHRhU2Vjb25kcyA8PSAwID8gRGF0ZS5ub3coKSA6IERhdGUubm93KCkgKyBkZWx0YVNlY29uZHNcblxuICAgIC8vIDcuIEFwcGVuZCBhbiBhdHRyaWJ1dGUgdG8gdGhlIGNvb2tpZS1hdHRyaWJ1dGUtbGlzdCB3aXRoIGFuXG4gICAgLy8gICAgYXR0cmlidXRlLW5hbWUgb2YgTWF4LUFnZSBhbmQgYW4gYXR0cmlidXRlLXZhbHVlIG9mIGV4cGlyeS10aW1lLlxuICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3QubWF4QWdlID0gZGVsdGFTZWNvbmRzXG4gIH0gZWxzZSBpZiAoYXR0cmlidXRlTmFtZUxvd2VyY2FzZSA9PT0gJ2RvbWFpbicpIHtcbiAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1yZmM2MjY1YmlzI3NlY3Rpb24tNS40LjNcbiAgICAvLyBJZiB0aGUgYXR0cmlidXRlLW5hbWUgY2FzZS1pbnNlbnNpdGl2ZWx5IG1hdGNoZXMgdGhlIHN0cmluZyBcIkRvbWFpblwiLFxuICAgIC8vIHRoZSB1c2VyIGFnZW50IE1VU1QgcHJvY2VzcyB0aGUgY29va2llLWF2IGFzIGZvbGxvd3MuXG5cbiAgICAvLyAxLiBMZXQgY29va2llLWRvbWFpbiBiZSB0aGUgYXR0cmlidXRlLXZhbHVlLlxuICAgIGxldCBjb29raWVEb21haW4gPSBhdHRyaWJ1dGVWYWx1ZVxuXG4gICAgLy8gMi4gSWYgY29va2llLWRvbWFpbiBzdGFydHMgd2l0aCAleDJFIChcIi5cIiksIGxldCBjb29raWUtZG9tYWluIGJlXG4gICAgLy8gICAgY29va2llLWRvbWFpbiB3aXRob3V0IGl0cyBsZWFkaW5nICV4MkUgKFwiLlwiKS5cbiAgICBpZiAoY29va2llRG9tYWluWzBdID09PSAnLicpIHtcbiAgICAgIGNvb2tpZURvbWFpbiA9IGNvb2tpZURvbWFpbi5zbGljZSgxKVxuICAgIH1cblxuICAgIC8vIDMuIENvbnZlcnQgdGhlIGNvb2tpZS1kb21haW4gdG8gbG93ZXIgY2FzZS5cbiAgICBjb29raWVEb21haW4gPSBjb29raWVEb21haW4udG9Mb3dlckNhc2UoKVxuXG4gICAgLy8gNC4gQXBwZW5kIGFuIGF0dHJpYnV0ZSB0byB0aGUgY29va2llLWF0dHJpYnV0ZS1saXN0IHdpdGggYW5cbiAgICAvLyAgICBhdHRyaWJ1dGUtbmFtZSBvZiBEb21haW4gYW5kIGFuIGF0dHJpYnV0ZS12YWx1ZSBvZiBjb29raWUtZG9tYWluLlxuICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3QuZG9tYWluID0gY29va2llRG9tYWluXG4gIH0gZWxzZSBpZiAoYXR0cmlidXRlTmFtZUxvd2VyY2FzZSA9PT0gJ3BhdGgnKSB7XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtcmZjNjI2NWJpcyNzZWN0aW9uLTUuNC40XG4gICAgLy8gSWYgdGhlIGF0dHJpYnV0ZS1uYW1lIGNhc2UtaW5zZW5zaXRpdmVseSBtYXRjaGVzIHRoZSBzdHJpbmcgXCJQYXRoXCIsXG4gICAgLy8gdGhlIHVzZXIgYWdlbnQgTVVTVCBwcm9jZXNzIHRoZSBjb29raWUtYXYgYXMgZm9sbG93cy5cblxuICAgIC8vIDEuIElmIHRoZSBhdHRyaWJ1dGUtdmFsdWUgaXMgZW1wdHkgb3IgaWYgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGVcbiAgICAvLyAgICBhdHRyaWJ1dGUtdmFsdWUgaXMgbm90ICV4MkYgKFwiL1wiKTpcbiAgICBsZXQgY29va2llUGF0aCA9ICcnXG4gICAgaWYgKGF0dHJpYnV0ZVZhbHVlLmxlbmd0aCA9PT0gMCB8fCBhdHRyaWJ1dGVWYWx1ZVswXSAhPT0gJy8nKSB7XG4gICAgICAvLyAxLiBMZXQgY29va2llLXBhdGggYmUgdGhlIGRlZmF1bHQtcGF0aC5cbiAgICAgIGNvb2tpZVBhdGggPSAnLydcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT3RoZXJ3aXNlOlxuXG4gICAgICAvLyAxLiBMZXQgY29va2llLXBhdGggYmUgdGhlIGF0dHJpYnV0ZS12YWx1ZS5cbiAgICAgIGNvb2tpZVBhdGggPSBhdHRyaWJ1dGVWYWx1ZVxuICAgIH1cblxuICAgIC8vIDIuIEFwcGVuZCBhbiBhdHRyaWJ1dGUgdG8gdGhlIGNvb2tpZS1hdHRyaWJ1dGUtbGlzdCB3aXRoIGFuXG4gICAgLy8gICAgYXR0cmlidXRlLW5hbWUgb2YgUGF0aCBhbmQgYW4gYXR0cmlidXRlLXZhbHVlIG9mIGNvb2tpZS1wYXRoLlxuICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3QucGF0aCA9IGNvb2tpZVBhdGhcbiAgfSBlbHNlIGlmIChhdHRyaWJ1dGVOYW1lTG93ZXJjYXNlID09PSAnc2VjdXJlJykge1xuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjQuNVxuICAgIC8vIElmIHRoZSBhdHRyaWJ1dGUtbmFtZSBjYXNlLWluc2Vuc2l0aXZlbHkgbWF0Y2hlcyB0aGUgc3RyaW5nIFwiU2VjdXJlXCIsXG4gICAgLy8gdGhlIHVzZXIgYWdlbnQgTVVTVCBhcHBlbmQgYW4gYXR0cmlidXRlIHRvIHRoZSBjb29raWUtYXR0cmlidXRlLWxpc3RcbiAgICAvLyB3aXRoIGFuIGF0dHJpYnV0ZS1uYW1lIG9mIFNlY3VyZSBhbmQgYW4gZW1wdHkgYXR0cmlidXRlLXZhbHVlLlxuXG4gICAgY29va2llQXR0cmlidXRlTGlzdC5zZWN1cmUgPSB0cnVlXG4gIH0gZWxzZSBpZiAoYXR0cmlidXRlTmFtZUxvd2VyY2FzZSA9PT0gJ2h0dHBvbmx5Jykge1xuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjQuNlxuICAgIC8vIElmIHRoZSBhdHRyaWJ1dGUtbmFtZSBjYXNlLWluc2Vuc2l0aXZlbHkgbWF0Y2hlcyB0aGUgc3RyaW5nXG4gICAgLy8gXCJIdHRwT25seVwiLCB0aGUgdXNlciBhZ2VudCBNVVNUIGFwcGVuZCBhbiBhdHRyaWJ1dGUgdG8gdGhlIGNvb2tpZS1cbiAgICAvLyBhdHRyaWJ1dGUtbGlzdCB3aXRoIGFuIGF0dHJpYnV0ZS1uYW1lIG9mIEh0dHBPbmx5IGFuZCBhbiBlbXB0eVxuICAgIC8vIGF0dHJpYnV0ZS12YWx1ZS5cblxuICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3QuaHR0cE9ubHkgPSB0cnVlXG4gIH0gZWxzZSBpZiAoYXR0cmlidXRlTmFtZUxvd2VyY2FzZSA9PT0gJ3NhbWVzaXRlJykge1xuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjQuN1xuICAgIC8vIElmIHRoZSBhdHRyaWJ1dGUtbmFtZSBjYXNlLWluc2Vuc2l0aXZlbHkgbWF0Y2hlcyB0aGUgc3RyaW5nXG4gICAgLy8gXCJTYW1lU2l0ZVwiLCB0aGUgdXNlciBhZ2VudCBNVVNUIHByb2Nlc3MgdGhlIGNvb2tpZS1hdiBhcyBmb2xsb3dzOlxuXG4gICAgLy8gMS4gTGV0IGVuZm9yY2VtZW50IGJlIFwiRGVmYXVsdFwiLlxuICAgIGxldCBlbmZvcmNlbWVudCA9ICdEZWZhdWx0J1xuXG4gICAgY29uc3QgYXR0cmlidXRlVmFsdWVMb3dlcmNhc2UgPSBhdHRyaWJ1dGVWYWx1ZS50b0xvd2VyQ2FzZSgpXG4gICAgLy8gMi4gSWYgY29va2llLWF2J3MgYXR0cmlidXRlLXZhbHVlIGlzIGEgY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBmb3JcbiAgICAvLyAgICBcIk5vbmVcIiwgc2V0IGVuZm9yY2VtZW50IHRvIFwiTm9uZVwiLlxuICAgIGlmIChhdHRyaWJ1dGVWYWx1ZUxvd2VyY2FzZS5pbmNsdWRlcygnbm9uZScpKSB7XG4gICAgICBlbmZvcmNlbWVudCA9ICdOb25lJ1xuICAgIH1cblxuICAgIC8vIDMuIElmIGNvb2tpZS1hdidzIGF0dHJpYnV0ZS12YWx1ZSBpcyBhIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yXG4gICAgLy8gICAgXCJTdHJpY3RcIiwgc2V0IGVuZm9yY2VtZW50IHRvIFwiU3RyaWN0XCIuXG4gICAgaWYgKGF0dHJpYnV0ZVZhbHVlTG93ZXJjYXNlLmluY2x1ZGVzKCdzdHJpY3QnKSkge1xuICAgICAgZW5mb3JjZW1lbnQgPSAnU3RyaWN0J1xuICAgIH1cblxuICAgIC8vIDQuIElmIGNvb2tpZS1hdidzIGF0dHJpYnV0ZS12YWx1ZSBpcyBhIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yXG4gICAgLy8gICAgXCJMYXhcIiwgc2V0IGVuZm9yY2VtZW50IHRvIFwiTGF4XCIuXG4gICAgaWYgKGF0dHJpYnV0ZVZhbHVlTG93ZXJjYXNlLmluY2x1ZGVzKCdsYXgnKSkge1xuICAgICAgZW5mb3JjZW1lbnQgPSAnTGF4J1xuICAgIH1cblxuICAgIC8vIDUuIEFwcGVuZCBhbiBhdHRyaWJ1dGUgdG8gdGhlIGNvb2tpZS1hdHRyaWJ1dGUtbGlzdCB3aXRoIGFuXG4gICAgLy8gICAgYXR0cmlidXRlLW5hbWUgb2YgXCJTYW1lU2l0ZVwiIGFuZCBhbiBhdHRyaWJ1dGUtdmFsdWUgb2ZcbiAgICAvLyAgICBlbmZvcmNlbWVudC5cbiAgICBjb29raWVBdHRyaWJ1dGVMaXN0LnNhbWVTaXRlID0gZW5mb3JjZW1lbnRcbiAgfSBlbHNlIHtcbiAgICBjb29raWVBdHRyaWJ1dGVMaXN0LnVucGFyc2VkID8/PSBbXVxuXG4gICAgY29va2llQXR0cmlidXRlTGlzdC51bnBhcnNlZC5wdXNoKGAke2F0dHJpYnV0ZU5hbWV9PSR7YXR0cmlidXRlVmFsdWV9YClcbiAgfVxuXG4gIC8vIDguIFJldHVybiB0byBTdGVwIDEgb2YgdGhpcyBhbGdvcml0aG0uXG4gIHJldHVybiBwYXJzZVVucGFyc2VkQXR0cmlidXRlcyh1bnBhcnNlZEF0dHJpYnV0ZXMsIGNvb2tpZUF0dHJpYnV0ZUxpc3QpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBwYXJzZVNldENvb2tpZSxcbiAgcGFyc2VVbnBhcnNlZEF0dHJpYnV0ZXNcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgcGFyc2VTZXRDb29raWUgfSA9IHJlcXVpcmUoJy4vcGFyc2UnKVxuY29uc3QgeyBzdHJpbmdpZnksIGdldEhlYWRlcnNMaXN0IH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3dlYmlkbCcpXG5jb25zdCB7IEhlYWRlcnMgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2hlYWRlcnMnKVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IENvb2tpZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IG5hbWVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2YWx1ZVxuICogQHByb3BlcnR5IHtEYXRlfG51bWJlcnx1bmRlZmluZWR9IGV4cGlyZXNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfHVuZGVmaW5lZH0gbWF4QWdlXG4gKiBAcHJvcGVydHkge3N0cmluZ3x1bmRlZmluZWR9IGRvbWFpblxuICogQHByb3BlcnR5IHtzdHJpbmd8dW5kZWZpbmVkfSBwYXRoXG4gKiBAcHJvcGVydHkge2Jvb2xlYW58dW5kZWZpbmVkfSBzZWN1cmVcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbnx1bmRlZmluZWR9IGh0dHBPbmx5XG4gKiBAcHJvcGVydHkgeydTdHJpY3QnfCdMYXgnfCdOb25lJ30gc2FtZVNpdGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IHVucGFyc2VkXG4gKi9cblxuLyoqXG4gKiBAcGFyYW0ge0hlYWRlcnN9IGhlYWRlcnNcbiAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fVxuICovXG5mdW5jdGlvbiBnZXRDb29raWVzIChoZWFkZXJzKSB7XG4gIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdnZXRDb29raWVzJyB9KVxuXG4gIHdlYmlkbC5icmFuZENoZWNrKGhlYWRlcnMsIEhlYWRlcnMsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gIGNvbnN0IGNvb2tpZSA9IGhlYWRlcnMuZ2V0KCdjb29raWUnKVxuICBjb25zdCBvdXQgPSB7fVxuXG4gIGlmICghY29va2llKSB7XG4gICAgcmV0dXJuIG91dFxuICB9XG5cbiAgZm9yIChjb25zdCBwaWVjZSBvZiBjb29raWUuc3BsaXQoJzsnKSkge1xuICAgIGNvbnN0IFtuYW1lLCAuLi52YWx1ZV0gPSBwaWVjZS5zcGxpdCgnPScpXG5cbiAgICBvdXRbbmFtZS50cmltKCldID0gdmFsdWUuam9pbignPScpXG4gIH1cblxuICByZXR1cm4gb3V0XG59XG5cbi8qKlxuICogQHBhcmFtIHtIZWFkZXJzfSBoZWFkZXJzXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHt7IHBhdGg/OiBzdHJpbmcsIGRvbWFpbj86IHN0cmluZyB9fHVuZGVmaW5lZH0gYXR0cmlidXRlc1xuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIGRlbGV0ZUNvb2tpZSAoaGVhZGVycywgbmFtZSwgYXR0cmlidXRlcykge1xuICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnZGVsZXRlQ29va2llJyB9KVxuXG4gIHdlYmlkbC5icmFuZENoZWNrKGhlYWRlcnMsIEhlYWRlcnMsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcobmFtZSlcbiAgYXR0cmlidXRlcyA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRlbGV0ZUNvb2tpZUF0dHJpYnV0ZXMoYXR0cmlidXRlcylcblxuICAvLyBNYXRjaGVzIGJlaGF2aW9yIG9mXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9kZW5vbGFuZC9kZW5vX3N0ZC9ibG9iLzYzODI3YjE2MzMwYjgyNDg5YTA0NjE0MDI3YzMzYjc5MDRlMDhiZTUvaHR0cC9jb29raWUudHMjTDI3OFxuICBzZXRDb29raWUoaGVhZGVycywge1xuICAgIG5hbWUsXG4gICAgdmFsdWU6ICcnLFxuICAgIGV4cGlyZXM6IG5ldyBEYXRlKDApLFxuICAgIC4uLmF0dHJpYnV0ZXNcbiAgfSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0hlYWRlcnN9IGhlYWRlcnNcbiAqIEByZXR1cm5zIHtDb29raWVbXX1cbiAqL1xuZnVuY3Rpb24gZ2V0U2V0Q29va2llcyAoaGVhZGVycykge1xuICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnZ2V0U2V0Q29va2llcycgfSlcblxuICB3ZWJpZGwuYnJhbmRDaGVjayhoZWFkZXJzLCBIZWFkZXJzLCB7IHN0cmljdDogZmFsc2UgfSlcblxuICBjb25zdCBjb29raWVzID0gZ2V0SGVhZGVyc0xpc3QoaGVhZGVycykuY29va2llc1xuXG4gIGlmICghY29va2llcykge1xuICAgIHJldHVybiBbXVxuICB9XG5cbiAgLy8gSW4gb2xkZXIgdmVyc2lvbnMgb2YgdW5kaWNpLCBjb29raWVzIGlzIGEgbGlzdCBvZiBuYW1lOnZhbHVlLlxuICByZXR1cm4gY29va2llcy5tYXAoKHBhaXIpID0+IHBhcnNlU2V0Q29va2llKEFycmF5LmlzQXJyYXkocGFpcikgPyBwYWlyWzFdIDogcGFpcikpXG59XG5cbi8qKlxuICogQHBhcmFtIHtIZWFkZXJzfSBoZWFkZXJzXG4gKiBAcGFyYW0ge0Nvb2tpZX0gY29va2llXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gc2V0Q29va2llIChoZWFkZXJzLCBjb29raWUpIHtcbiAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAyLCB7IGhlYWRlcjogJ3NldENvb2tpZScgfSlcblxuICB3ZWJpZGwuYnJhbmRDaGVjayhoZWFkZXJzLCBIZWFkZXJzLCB7IHN0cmljdDogZmFsc2UgfSlcblxuICBjb29raWUgPSB3ZWJpZGwuY29udmVydGVycy5Db29raWUoY29va2llKVxuXG4gIGNvbnN0IHN0ciA9IHN0cmluZ2lmeShjb29raWUpXG5cbiAgaWYgKHN0cikge1xuICAgIGhlYWRlcnMuYXBwZW5kKCdTZXQtQ29va2llJywgc3RyaW5naWZ5KGNvb2tpZSkpXG4gIH1cbn1cblxud2ViaWRsLmNvbnZlcnRlcnMuRGVsZXRlQ29va2llQXR0cmlidXRlcyA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyksXG4gICAga2V5OiAncGF0aCcsXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcih3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcpLFxuICAgIGtleTogJ2RvbWFpbicsXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH1cbl0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzLkNvb2tpZSA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIGtleTogJ25hbWUnXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICBrZXk6ICd2YWx1ZSdcbiAgfSxcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKCh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBsb25nIGxvbmcnXSh2YWx1ZSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBEYXRlKHZhbHVlKVxuICAgIH0pLFxuICAgIGtleTogJ2V4cGlyZXMnLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbFxuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnNbJ2xvbmcgbG9uZyddKSxcbiAgICBrZXk6ICdtYXhBZ2UnLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbFxuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKSxcbiAgICBrZXk6ICdkb21haW4nLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbFxuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKSxcbiAgICBrZXk6ICdwYXRoJyxcbiAgICBkZWZhdWx0VmFsdWU6IG51bGxcbiAgfSxcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4pLFxuICAgIGtleTogJ3NlY3VyZScsXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcih3ZWJpZGwuY29udmVydGVycy5ib29sZWFuKSxcbiAgICBrZXk6ICdodHRwT25seScsXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyxcbiAgICBrZXk6ICdzYW1lU2l0ZScsXG4gICAgYWxsb3dlZFZhbHVlczogWydTdHJpY3QnLCAnTGF4JywgJ05vbmUnXVxuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKSxcbiAgICBrZXk6ICd1bnBhcnNlZCcsXG4gICAgZGVmYXVsdFZhbHVlOiBbXVxuICB9XG5dKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0Q29va2llcyxcbiAgZGVsZXRlQ29va2llLFxuICBnZXRTZXRDb29raWVzLFxuICBzZXRDb29raWVcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbi8vIFRoaXMgaXMgYSBHbG9iYWxseSBVbmlxdWUgSWRlbnRpZmllciB1bmlxdWUgdXNlZFxuLy8gdG8gdmFsaWRhdGUgdGhhdCB0aGUgZW5kcG9pbnQgYWNjZXB0cyB3ZWJzb2NrZXRcbi8vIGNvbm5lY3Rpb25zLlxuLy8gU2VlIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM2NDU1Lmh0bWwjc2VjdGlvbi0xLjNcbmNvbnN0IHVpZCA9ICcyNThFQUZBNS1FOTE0LTQ3REEtOTVDQS1DNUFCMERDODVCMTEnXG5cbi8qKiBAdHlwZSB7UHJvcGVydHlEZXNjcmlwdG9yfSAqL1xuY29uc3Qgc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyA9IHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgd3JpdGFibGU6IGZhbHNlLFxuICBjb25maWd1cmFibGU6IGZhbHNlXG59XG5cbmNvbnN0IHN0YXRlcyA9IHtcbiAgQ09OTkVDVElORzogMCxcbiAgT1BFTjogMSxcbiAgQ0xPU0lORzogMixcbiAgQ0xPU0VEOiAzXG59XG5cbmNvbnN0IG9wY29kZXMgPSB7XG4gIENPTlRJTlVBVElPTjogMHgwLFxuICBURVhUOiAweDEsXG4gIEJJTkFSWTogMHgyLFxuICBDTE9TRTogMHg4LFxuICBQSU5HOiAweDksXG4gIFBPTkc6IDB4QVxufVxuXG5jb25zdCBtYXhVbnNpZ25lZDE2Qml0ID0gMiAqKiAxNiAtIDEgLy8gNjU1MzVcblxuY29uc3QgcGFyc2VyU3RhdGVzID0ge1xuICBJTkZPOiAwLFxuICBQQVlMT0FETEVOR1RIXzE2OiAyLFxuICBQQVlMT0FETEVOR1RIXzY0OiAzLFxuICBSRUFEX0RBVEE6IDRcbn1cblxuY29uc3QgZW1wdHlCdWZmZXIgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMClcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHVpZCxcbiAgc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgc3RhdGVzLFxuICBvcGNvZGVzLFxuICBtYXhVbnNpZ25lZDE2Qml0LFxuICBwYXJzZXJTdGF0ZXMsXG4gIGVtcHR5QnVmZmVyXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAga1dlYlNvY2tldFVSTDogU3ltYm9sKCd1cmwnKSxcbiAga1JlYWR5U3RhdGU6IFN5bWJvbCgncmVhZHkgc3RhdGUnKSxcbiAga0NvbnRyb2xsZXI6IFN5bWJvbCgnY29udHJvbGxlcicpLFxuICBrUmVzcG9uc2U6IFN5bWJvbCgncmVzcG9uc2UnKSxcbiAga0JpbmFyeVR5cGU6IFN5bWJvbCgnYmluYXJ5IHR5cGUnKSxcbiAga1NlbnRDbG9zZTogU3ltYm9sKCdzZW50IGNsb3NlJyksXG4gIGtSZWNlaXZlZENsb3NlOiBTeW1ib2woJ3JlY2VpdmVkIGNsb3NlJyksXG4gIGtCeXRlUGFyc2VyOiBTeW1ib2woJ2J5dGUgcGFyc2VyJylcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuLi9mZXRjaC93ZWJpZGwnKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5IH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBNZXNzYWdlUG9ydCB9ID0gcmVxdWlyZSgnd29ya2VyX3RocmVhZHMnKVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvY29tbXMuaHRtbCNtZXNzYWdlZXZlbnRcbiAqL1xuY2xhc3MgTWVzc2FnZUV2ZW50IGV4dGVuZHMgRXZlbnQge1xuICAjZXZlbnRJbml0XG5cbiAgY29uc3RydWN0b3IgKHR5cGUsIGV2ZW50SW5pdERpY3QgPSB7fSkge1xuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdNZXNzYWdlRXZlbnQgY29uc3RydWN0b3InIH0pXG5cbiAgICB0eXBlID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKHR5cGUpXG4gICAgZXZlbnRJbml0RGljdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLk1lc3NhZ2VFdmVudEluaXQoZXZlbnRJbml0RGljdClcblxuICAgIHN1cGVyKHR5cGUsIGV2ZW50SW5pdERpY3QpXG5cbiAgICB0aGlzLiNldmVudEluaXQgPSBldmVudEluaXREaWN0XG4gIH1cblxuICBnZXQgZGF0YSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgTWVzc2FnZUV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5kYXRhXG4gIH1cblxuICBnZXQgb3JpZ2luICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBNZXNzYWdlRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0Lm9yaWdpblxuICB9XG5cbiAgZ2V0IGxhc3RFdmVudElkICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBNZXNzYWdlRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0Lmxhc3RFdmVudElkXG4gIH1cblxuICBnZXQgc291cmNlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBNZXNzYWdlRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LnNvdXJjZVxuICB9XG5cbiAgZ2V0IHBvcnRzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBNZXNzYWdlRXZlbnQpXG5cbiAgICBpZiAoIU9iamVjdC5pc0Zyb3plbih0aGlzLiNldmVudEluaXQucG9ydHMpKSB7XG4gICAgICBPYmplY3QuZnJlZXplKHRoaXMuI2V2ZW50SW5pdC5wb3J0cylcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LnBvcnRzXG4gIH1cblxuICBpbml0TWVzc2FnZUV2ZW50IChcbiAgICB0eXBlLFxuICAgIGJ1YmJsZXMgPSBmYWxzZSxcbiAgICBjYW5jZWxhYmxlID0gZmFsc2UsXG4gICAgZGF0YSA9IG51bGwsXG4gICAgb3JpZ2luID0gJycsXG4gICAgbGFzdEV2ZW50SWQgPSAnJyxcbiAgICBzb3VyY2UgPSBudWxsLFxuICAgIHBvcnRzID0gW11cbiAgKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgTWVzc2FnZUV2ZW50KVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ01lc3NhZ2VFdmVudC5pbml0TWVzc2FnZUV2ZW50JyB9KVxuXG4gICAgcmV0dXJuIG5ldyBNZXNzYWdlRXZlbnQodHlwZSwge1xuICAgICAgYnViYmxlcywgY2FuY2VsYWJsZSwgZGF0YSwgb3JpZ2luLCBsYXN0RXZlbnRJZCwgc291cmNlLCBwb3J0c1xuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI3RoZS1jbG9zZWV2ZW50LWludGVyZmFjZVxuICovXG5jbGFzcyBDbG9zZUV2ZW50IGV4dGVuZHMgRXZlbnQge1xuICAjZXZlbnRJbml0XG5cbiAgY29uc3RydWN0b3IgKHR5cGUsIGV2ZW50SW5pdERpY3QgPSB7fSkge1xuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdDbG9zZUV2ZW50IGNvbnN0cnVjdG9yJyB9KVxuXG4gICAgdHlwZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyh0eXBlKVxuICAgIGV2ZW50SW5pdERpY3QgPSB3ZWJpZGwuY29udmVydGVycy5DbG9zZUV2ZW50SW5pdChldmVudEluaXREaWN0KVxuXG4gICAgc3VwZXIodHlwZSwgZXZlbnRJbml0RGljdClcblxuICAgIHRoaXMuI2V2ZW50SW5pdCA9IGV2ZW50SW5pdERpY3RcbiAgfVxuXG4gIGdldCB3YXNDbGVhbiAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2xvc2VFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQud2FzQ2xlYW5cbiAgfVxuXG4gIGdldCBjb2RlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDbG9zZUV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5jb2RlXG4gIH1cblxuICBnZXQgcmVhc29uICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDbG9zZUV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5yZWFzb25cbiAgfVxufVxuXG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS93ZWJhcHBhcGlzLmh0bWwjdGhlLWVycm9yZXZlbnQtaW50ZXJmYWNlXG5jbGFzcyBFcnJvckV2ZW50IGV4dGVuZHMgRXZlbnQge1xuICAjZXZlbnRJbml0XG5cbiAgY29uc3RydWN0b3IgKHR5cGUsIGV2ZW50SW5pdERpY3QpIHtcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRXJyb3JFdmVudCBjb25zdHJ1Y3RvcicgfSlcblxuICAgIHN1cGVyKHR5cGUsIGV2ZW50SW5pdERpY3QpXG5cbiAgICB0eXBlID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKHR5cGUpXG4gICAgZXZlbnRJbml0RGljdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLkVycm9yRXZlbnRJbml0KGV2ZW50SW5pdERpY3QgPz8ge30pXG5cbiAgICB0aGlzLiNldmVudEluaXQgPSBldmVudEluaXREaWN0XG4gIH1cblxuICBnZXQgbWVzc2FnZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRXJyb3JFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQubWVzc2FnZVxuICB9XG5cbiAgZ2V0IGZpbGVuYW1lICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBFcnJvckV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5maWxlbmFtZVxuICB9XG5cbiAgZ2V0IGxpbmVubyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRXJyb3JFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQubGluZW5vXG4gIH1cblxuICBnZXQgY29sbm8gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEVycm9yRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LmNvbG5vXG4gIH1cblxuICBnZXQgZXJyb3IgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEVycm9yRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LmVycm9yXG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTWVzc2FnZUV2ZW50LnByb3RvdHlwZSwge1xuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnTWVzc2FnZUV2ZW50JyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSxcbiAgZGF0YToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb3JpZ2luOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBsYXN0RXZlbnRJZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgc291cmNlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBwb3J0czoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgaW5pdE1lc3NhZ2VFdmVudDoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2xvc2VFdmVudC5wcm90b3R5cGUsIHtcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0Nsb3NlRXZlbnQnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9LFxuICByZWFzb246IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNvZGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHdhc0NsZWFuOiBrRW51bWVyYWJsZVByb3BlcnR5XG59KVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhFcnJvckV2ZW50LnByb3RvdHlwZSwge1xuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnRXJyb3JFdmVudCcsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0sXG4gIG1lc3NhZ2U6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGZpbGVuYW1lOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBsaW5lbm86IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNvbG5vOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBlcnJvcjoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxud2ViaWRsLmNvbnZlcnRlcnMuTWVzc2FnZVBvcnQgPSB3ZWJpZGwuaW50ZXJmYWNlQ29udmVydGVyKE1lc3NhZ2VQb3J0KVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8TWVzc2FnZVBvcnQ+J10gPSB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLk1lc3NhZ2VQb3J0XG4pXG5cbmNvbnN0IGV2ZW50SW5pdCA9IFtcbiAge1xuICAgIGtleTogJ2J1YmJsZXMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjYW5jZWxhYmxlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4sXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZVxuICB9LFxuICB7XG4gICAga2V5OiAnY29tcG9zZWQnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH1cbl1cblxud2ViaWRsLmNvbnZlcnRlcnMuTWVzc2FnZUV2ZW50SW5pdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAgLi4uZXZlbnRJbml0LFxuICB7XG4gICAga2V5OiAnZGF0YScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5hbnksXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdvcmlnaW4nLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZTogJydcbiAgfSxcbiAge1xuICAgIGtleTogJ2xhc3RFdmVudElkJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6ICcnXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdzb3VyY2UnLFxuICAgIC8vIE5vZGUgZG9lc24ndCBpbXBsZW1lbnQgV2luZG93UHJveHkgb3IgU2VydmljZVdvcmtlciwgc28gdGhlIG9ubHlcbiAgICAvLyB2YWxpZCB2YWx1ZSBmb3Igc291cmNlIGlzIGEgTWVzc2FnZVBvcnQuXG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuTWVzc2FnZVBvcnQpLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbFxuICB9LFxuICB7XG4gICAga2V5OiAncG9ydHMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPE1lc3NhZ2VQb3J0PiddLFxuICAgIGdldCBkZWZhdWx0VmFsdWUgKCkge1xuICAgICAgcmV0dXJuIFtdXG4gICAgfVxuICB9XG5dKVxuXG53ZWJpZGwuY29udmVydGVycy5DbG9zZUV2ZW50SW5pdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAgLi4uZXZlbnRJbml0LFxuICB7XG4gICAga2V5OiAnd2FzQ2xlYW4nLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjb2RlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBzaG9ydCddLFxuICAgIGRlZmF1bHRWYWx1ZTogMFxuICB9LFxuICB7XG4gICAga2V5OiAncmVhc29uJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6ICcnXG4gIH1cbl0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzLkVycm9yRXZlbnRJbml0ID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICAuLi5ldmVudEluaXQsXG4gIHtcbiAgICBrZXk6ICdtZXNzYWdlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6ICcnXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdmaWxlbmFtZScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcsXG4gICAgZGVmYXVsdFZhbHVlOiAnJ1xuICB9LFxuICB7XG4gICAga2V5OiAnbGluZW5vJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBsb25nJ10sXG4gICAgZGVmYXVsdFZhbHVlOiAwXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjb2xubycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgbG9uZyddLFxuICAgIGRlZmF1bHRWYWx1ZTogMFxuICB9LFxuICB7XG4gICAga2V5OiAnZXJyb3InLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYW55XG4gIH1cbl0pXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBNZXNzYWdlRXZlbnQsXG4gIENsb3NlRXZlbnQsXG4gIEVycm9yRXZlbnRcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsga1JlYWR5U3RhdGUsIGtDb250cm9sbGVyLCBrUmVzcG9uc2UsIGtCaW5hcnlUeXBlLCBrV2ViU29ja2V0VVJMIH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBzdGF0ZXMsIG9wY29kZXMgfSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IHsgTWVzc2FnZUV2ZW50LCBFcnJvckV2ZW50IH0gPSByZXF1aXJlKCcuL2V2ZW50cycpXG5cbi8qIGdsb2JhbHMgQmxvYiAqL1xuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL3dlYnNvY2tldCcpLldlYlNvY2tldH0gd3NcbiAqL1xuZnVuY3Rpb24gaXNFc3RhYmxpc2hlZCAod3MpIHtcbiAgLy8gSWYgdGhlIHNlcnZlcidzIHJlc3BvbnNlIGlzIHZhbGlkYXRlZCBhcyBwcm92aWRlZCBmb3IgYWJvdmUsIGl0IGlzXG4gIC8vIHNhaWQgdGhhdCBfVGhlIFdlYlNvY2tldCBDb25uZWN0aW9uIGlzIEVzdGFibGlzaGVkXyBhbmQgdGhhdCB0aGVcbiAgLy8gV2ViU29ja2V0IENvbm5lY3Rpb24gaXMgaW4gdGhlIE9QRU4gc3RhdGUuXG4gIHJldHVybiB3c1trUmVhZHlTdGF0ZV0gPT09IHN0YXRlcy5PUEVOXG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vd2Vic29ja2V0JykuV2ViU29ja2V0fSB3c1xuICovXG5mdW5jdGlvbiBpc0Nsb3NpbmcgKHdzKSB7XG4gIC8vIFVwb24gZWl0aGVyIHNlbmRpbmcgb3IgcmVjZWl2aW5nIGEgQ2xvc2UgY29udHJvbCBmcmFtZSwgaXQgaXMgc2FpZFxuICAvLyB0aGF0IF9UaGUgV2ViU29ja2V0IENsb3NpbmcgSGFuZHNoYWtlIGlzIFN0YXJ0ZWRfIGFuZCB0aGF0IHRoZVxuICAvLyBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBpbiB0aGUgQ0xPU0lORyBzdGF0ZS5cbiAgcmV0dXJuIHdzW2tSZWFkeVN0YXRlXSA9PT0gc3RhdGVzLkNMT1NJTkdcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi93ZWJzb2NrZXQnKS5XZWJTb2NrZXR9IHdzXG4gKi9cbmZ1bmN0aW9uIGlzQ2xvc2VkICh3cykge1xuICByZXR1cm4gd3Nba1JlYWR5U3RhdGVdID09PSBzdGF0ZXMuQ0xPU0VEXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtZXZlbnQtZmlyZVxuICogQHBhcmFtIHtzdHJpbmd9IGVcbiAqIEBwYXJhbSB7RXZlbnRUYXJnZXR9IHRhcmdldFxuICogQHBhcmFtIHtFdmVudEluaXQgfCB1bmRlZmluZWR9IGV2ZW50SW5pdERpY3RcbiAqL1xuZnVuY3Rpb24gZmlyZUV2ZW50IChlLCB0YXJnZXQsIGV2ZW50Q29uc3RydWN0b3IgPSBFdmVudCwgZXZlbnRJbml0RGljdCkge1xuICAvLyAxLiBJZiBldmVudENvbnN0cnVjdG9yIGlzIG5vdCBnaXZlbiwgdGhlbiBsZXQgZXZlbnRDb25zdHJ1Y3RvciBiZSBFdmVudC5cblxuICAvLyAyLiBMZXQgZXZlbnQgYmUgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhbiBldmVudCBnaXZlbiBldmVudENvbnN0cnVjdG9yLFxuICAvLyAgICBpbiB0aGUgcmVsZXZhbnQgcmVhbG0gb2YgdGFyZ2V0LlxuICAvLyAzLiBJbml0aWFsaXplIGV2ZW504oCZcyB0eXBlIGF0dHJpYnV0ZSB0byBlLlxuICBjb25zdCBldmVudCA9IG5ldyBldmVudENvbnN0cnVjdG9yKGUsIGV2ZW50SW5pdERpY3QpIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbmV3LWNhcFxuXG4gIC8vIDQuIEluaXRpYWxpemUgYW55IG90aGVyIElETCBhdHRyaWJ1dGVzIG9mIGV2ZW50IGFzIGRlc2NyaWJlZCBpbiB0aGVcbiAgLy8gICAgaW52b2NhdGlvbiBvZiB0aGlzIGFsZ29yaXRobS5cblxuICAvLyA1LiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBkaXNwYXRjaGluZyBldmVudCBhdCB0YXJnZXQsIHdpdGggbGVnYWN5IHRhcmdldFxuICAvLyAgICBvdmVycmlkZSBmbGFnIHNldCBpZiBzZXQuXG4gIHRhcmdldC5kaXNwYXRjaEV2ZW50KGV2ZW50KVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZmVlZGJhY2stZnJvbS10aGUtcHJvdG9jb2xcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL3dlYnNvY2tldCcpLldlYlNvY2tldH0gd3NcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlIE9wY29kZVxuICogQHBhcmFtIHtCdWZmZXJ9IGRhdGEgYXBwbGljYXRpb24gZGF0YVxuICovXG5mdW5jdGlvbiB3ZWJzb2NrZXRNZXNzYWdlUmVjZWl2ZWQgKHdzLCB0eXBlLCBkYXRhKSB7XG4gIC8vIDEuIElmIHJlYWR5IHN0YXRlIGlzIG5vdCBPUEVOICgxKSwgdGhlbiByZXR1cm4uXG4gIGlmICh3c1trUmVhZHlTdGF0ZV0gIT09IHN0YXRlcy5PUEVOKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyAyLiBMZXQgZGF0YUZvckV2ZW50IGJlIGRldGVybWluZWQgYnkgc3dpdGNoaW5nIG9uIHR5cGUgYW5kIGJpbmFyeSB0eXBlOlxuICBsZXQgZGF0YUZvckV2ZW50XG5cbiAgaWYgKHR5cGUgPT09IG9wY29kZXMuVEVYVCkge1xuICAgIC8vIC0+IHR5cGUgaW5kaWNhdGVzIHRoYXQgdGhlIGRhdGEgaXMgVGV4dFxuICAgIC8vICAgICAgYSBuZXcgRE9NU3RyaW5nIGNvbnRhaW5pbmcgZGF0YVxuICAgIHRyeSB7XG4gICAgICBkYXRhRm9yRXZlbnQgPSBuZXcgVGV4dERlY29kZXIoJ3V0Zi04JywgeyBmYXRhbDogdHJ1ZSB9KS5kZWNvZGUoZGF0YSlcbiAgICB9IGNhdGNoIHtcbiAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnUmVjZWl2ZWQgaW52YWxpZCBVVEYtOCBpbiB0ZXh0IGZyYW1lLicpXG4gICAgICByZXR1cm5cbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gb3Bjb2Rlcy5CSU5BUlkpIHtcbiAgICBpZiAod3Nba0JpbmFyeVR5cGVdID09PSAnYmxvYicpIHtcbiAgICAgIC8vIC0+IHR5cGUgaW5kaWNhdGVzIHRoYXQgdGhlIGRhdGEgaXMgQmluYXJ5IGFuZCBiaW5hcnkgdHlwZSBpcyBcImJsb2JcIlxuICAgICAgLy8gICAgICBhIG5ldyBCbG9iIG9iamVjdCwgY3JlYXRlZCBpbiB0aGUgcmVsZXZhbnQgUmVhbG0gb2YgdGhlIFdlYlNvY2tldFxuICAgICAgLy8gICAgICBvYmplY3QsIHRoYXQgcmVwcmVzZW50cyBkYXRhIGFzIGl0cyByYXcgZGF0YVxuICAgICAgZGF0YUZvckV2ZW50ID0gbmV3IEJsb2IoW2RhdGFdKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyAtPiB0eXBlIGluZGljYXRlcyB0aGF0IHRoZSBkYXRhIGlzIEJpbmFyeSBhbmQgYmluYXJ5IHR5cGUgaXMgXCJhcnJheWJ1ZmZlclwiXG4gICAgICAvLyAgICAgIGEgbmV3IEFycmF5QnVmZmVyIG9iamVjdCwgY3JlYXRlZCBpbiB0aGUgcmVsZXZhbnQgUmVhbG0gb2YgdGhlXG4gICAgICAvLyAgICAgIFdlYlNvY2tldCBvYmplY3QsIHdob3NlIGNvbnRlbnRzIGFyZSBkYXRhXG4gICAgICBkYXRhRm9yRXZlbnQgPSBuZXcgVWludDhBcnJheShkYXRhKS5idWZmZXJcbiAgICB9XG4gIH1cblxuICAvLyAzLiBGaXJlIGFuIGV2ZW50IG5hbWVkIG1lc3NhZ2UgYXQgdGhlIFdlYlNvY2tldCBvYmplY3QsIHVzaW5nIE1lc3NhZ2VFdmVudCxcbiAgLy8gICAgd2l0aCB0aGUgb3JpZ2luIGF0dHJpYnV0ZSBpbml0aWFsaXplZCB0byB0aGUgc2VyaWFsaXphdGlvbiBvZiB0aGUgV2ViU29ja2V0XG4gIC8vICAgIG9iamVjdOKAmXMgdXJsJ3Mgb3JpZ2luLCBhbmQgdGhlIGRhdGEgYXR0cmlidXRlIGluaXRpYWxpemVkIHRvIGRhdGFGb3JFdmVudC5cbiAgZmlyZUV2ZW50KCdtZXNzYWdlJywgd3MsIE1lc3NhZ2VFdmVudCwge1xuICAgIG9yaWdpbjogd3Nba1dlYlNvY2tldFVSTF0ub3JpZ2luLFxuICAgIGRhdGE6IGRhdGFGb3JFdmVudFxuICB9KVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1XG4gKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMjYxNlxuICogQHNlZSBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0zOTg0MDdcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm90b2NvbFxuICovXG5mdW5jdGlvbiBpc1ZhbGlkU3VicHJvdG9jb2wgKHByb3RvY29sKSB7XG4gIC8vIElmIHByZXNlbnQsIHRoaXMgdmFsdWUgaW5kaWNhdGVzIG9uZVxuICAvLyBvciBtb3JlIGNvbW1hLXNlcGFyYXRlZCBzdWJwcm90b2NvbCB0aGUgY2xpZW50IHdpc2hlcyB0byBzcGVhayxcbiAgLy8gb3JkZXJlZCBieSBwcmVmZXJlbmNlLiAgVGhlIGVsZW1lbnRzIHRoYXQgY29tcHJpc2UgdGhpcyB2YWx1ZVxuICAvLyBNVVNUIGJlIG5vbi1lbXB0eSBzdHJpbmdzIHdpdGggY2hhcmFjdGVycyBpbiB0aGUgcmFuZ2UgVSswMDIxIHRvXG4gIC8vIFUrMDA3RSBub3QgaW5jbHVkaW5nIHNlcGFyYXRvciBjaGFyYWN0ZXJzIGFzIGRlZmluZWQgaW5cbiAgLy8gW1JGQzI2MTZdIGFuZCBNVVNUIGFsbCBiZSB1bmlxdWUgc3RyaW5ncy5cbiAgaWYgKHByb3RvY29sLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgZm9yIChjb25zdCBjaGFyIG9mIHByb3RvY29sKSB7XG4gICAgY29uc3QgY29kZSA9IGNoYXIuY2hhckNvZGVBdCgwKVxuXG4gICAgaWYgKFxuICAgICAgY29kZSA8IDB4MjEgfHxcbiAgICAgIGNvZGUgPiAweDdFIHx8XG4gICAgICBjaGFyID09PSAnKCcgfHxcbiAgICAgIGNoYXIgPT09ICcpJyB8fFxuICAgICAgY2hhciA9PT0gJzwnIHx8XG4gICAgICBjaGFyID09PSAnPicgfHxcbiAgICAgIGNoYXIgPT09ICdAJyB8fFxuICAgICAgY2hhciA9PT0gJywnIHx8XG4gICAgICBjaGFyID09PSAnOycgfHxcbiAgICAgIGNoYXIgPT09ICc6JyB8fFxuICAgICAgY2hhciA9PT0gJ1xcXFwnIHx8XG4gICAgICBjaGFyID09PSAnXCInIHx8XG4gICAgICBjaGFyID09PSAnLycgfHxcbiAgICAgIGNoYXIgPT09ICdbJyB8fFxuICAgICAgY2hhciA9PT0gJ10nIHx8XG4gICAgICBjaGFyID09PSAnPycgfHxcbiAgICAgIGNoYXIgPT09ICc9JyB8fFxuICAgICAgY2hhciA9PT0gJ3snIHx8XG4gICAgICBjaGFyID09PSAnfScgfHxcbiAgICAgIGNvZGUgPT09IDMyIHx8IC8vIFNQXG4gICAgICBjb2RlID09PSA5IC8vIEhUXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tNy00XG4gKiBAcGFyYW0ge251bWJlcn0gY29kZVxuICovXG5mdW5jdGlvbiBpc1ZhbGlkU3RhdHVzQ29kZSAoY29kZSkge1xuICBpZiAoY29kZSA+PSAxMDAwICYmIGNvZGUgPCAxMDE1KSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGNvZGUgIT09IDEwMDQgJiYgLy8gcmVzZXJ2ZWRcbiAgICAgIGNvZGUgIT09IDEwMDUgJiYgLy8gXCJNVVNUIE5PVCBiZSBzZXQgYXMgYSBzdGF0dXMgY29kZVwiXG4gICAgICBjb2RlICE9PSAxMDA2IC8vIFwiTVVTVCBOT1QgYmUgc2V0IGFzIGEgc3RhdHVzIGNvZGVcIlxuICAgIClcbiAgfVxuXG4gIHJldHVybiBjb2RlID49IDMwMDAgJiYgY29kZSA8PSA0OTk5XG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vd2Vic29ja2V0JykuV2ViU29ja2V0fSB3c1xuICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSByZWFzb25cbiAqL1xuZnVuY3Rpb24gZmFpbFdlYnNvY2tldENvbm5lY3Rpb24gKHdzLCByZWFzb24pIHtcbiAgY29uc3QgeyBba0NvbnRyb2xsZXJdOiBjb250cm9sbGVyLCBba1Jlc3BvbnNlXTogcmVzcG9uc2UgfSA9IHdzXG5cbiAgY29udHJvbGxlci5hYm9ydCgpXG5cbiAgaWYgKHJlc3BvbnNlPy5zb2NrZXQgJiYgIXJlc3BvbnNlLnNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICByZXNwb25zZS5zb2NrZXQuZGVzdHJveSgpXG4gIH1cblxuICBpZiAocmVhc29uKSB7XG4gICAgZmlyZUV2ZW50KCdlcnJvcicsIHdzLCBFcnJvckV2ZW50LCB7XG4gICAgICBlcnJvcjogbmV3IEVycm9yKHJlYXNvbilcbiAgICB9KVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc0VzdGFibGlzaGVkLFxuICBpc0Nsb3NpbmcsXG4gIGlzQ2xvc2VkLFxuICBmaXJlRXZlbnQsXG4gIGlzVmFsaWRTdWJwcm90b2NvbCxcbiAgaXNWYWxpZFN0YXR1c0NvZGUsXG4gIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uLFxuICB3ZWJzb2NrZXRNZXNzYWdlUmVjZWl2ZWRcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGRpYWdub3N0aWNzQ2hhbm5lbCA9IHJlcXVpcmUoJ2RpYWdub3N0aWNzX2NoYW5uZWwnKVxuY29uc3QgeyB1aWQsIHN0YXRlcyB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3Qge1xuICBrUmVhZHlTdGF0ZSxcbiAga1NlbnRDbG9zZSxcbiAga0J5dGVQYXJzZXIsXG4gIGtSZWNlaXZlZENsb3NlXG59ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgZmlyZUV2ZW50LCBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbiB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgQ2xvc2VFdmVudCB9ID0gcmVxdWlyZSgnLi9ldmVudHMnKVxuY29uc3QgeyBtYWtlUmVxdWVzdCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvcmVxdWVzdCcpXG5jb25zdCB7IGZldGNoaW5nIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9pbmRleCcpXG5jb25zdCB7IEhlYWRlcnMgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2hlYWRlcnMnKVxuY29uc3QgeyBnZXRHbG9iYWxEaXNwYXRjaGVyIH0gPSByZXF1aXJlKCcuLi9nbG9iYWwnKVxuY29uc3QgeyBrSGVhZGVyc0xpc3QgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5cbmNvbnN0IGNoYW5uZWxzID0ge31cbmNoYW5uZWxzLm9wZW4gPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOndlYnNvY2tldDpvcGVuJylcbmNoYW5uZWxzLmNsb3NlID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTp3ZWJzb2NrZXQ6Y2xvc2UnKVxuY2hhbm5lbHMuc29ja2V0RXJyb3IgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOndlYnNvY2tldDpzb2NrZXRfZXJyb3InKVxuXG4vKiogQHR5cGUge2ltcG9ydCgnY3J5cHRvJyl9ICovXG5sZXQgY3J5cHRvXG50cnkge1xuICBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKVxufSBjYXRjaCB7XG5cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtd2Vic29ja2V0LWVzdGFibGlzaFxuICogQHBhcmFtIHtVUkx9IHVybFxuICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IHByb3RvY29sc1xuICogQHBhcmFtIHtpbXBvcnQoJy4vd2Vic29ja2V0JykuV2ViU29ja2V0fSB3c1xuICogQHBhcmFtIHsocmVzcG9uc2U6IGFueSkgPT4gdm9pZH0gb25Fc3RhYmxpc2hcbiAqIEBwYXJhbSB7UGFydGlhbDxpbXBvcnQoJy4uLy4uL3R5cGVzL3dlYnNvY2tldCcpLldlYlNvY2tldEluaXQ+fSBvcHRpb25zXG4gKi9cbmZ1bmN0aW9uIGVzdGFibGlzaFdlYlNvY2tldENvbm5lY3Rpb24gKHVybCwgcHJvdG9jb2xzLCB3cywgb25Fc3RhYmxpc2gsIG9wdGlvbnMpIHtcbiAgLy8gMS4gTGV0IHJlcXVlc3RVUkwgYmUgYSBjb3B5IG9mIHVybCwgd2l0aCBpdHMgc2NoZW1lIHNldCB0byBcImh0dHBcIiwgaWYgdXJs4oCZc1xuICAvLyAgICBzY2hlbWUgaXMgXCJ3c1wiLCBhbmQgdG8gXCJodHRwc1wiIG90aGVyd2lzZS5cbiAgY29uc3QgcmVxdWVzdFVSTCA9IHVybFxuXG4gIHJlcXVlc3RVUkwucHJvdG9jb2wgPSB1cmwucHJvdG9jb2wgPT09ICd3czonID8gJ2h0dHA6JyA6ICdodHRwczonXG5cbiAgLy8gMi4gTGV0IHJlcXVlc3QgYmUgYSBuZXcgcmVxdWVzdCwgd2hvc2UgVVJMIGlzIHJlcXVlc3RVUkwsIGNsaWVudCBpcyBjbGllbnQsXG4gIC8vICAgIHNlcnZpY2Utd29ya2VycyBtb2RlIGlzIFwibm9uZVwiLCByZWZlcnJlciBpcyBcIm5vLXJlZmVycmVyXCIsIG1vZGUgaXNcbiAgLy8gICAgXCJ3ZWJzb2NrZXRcIiwgY3JlZGVudGlhbHMgbW9kZSBpcyBcImluY2x1ZGVcIiwgY2FjaGUgbW9kZSBpcyBcIm5vLXN0b3JlXCIgLFxuICAvLyAgICBhbmQgcmVkaXJlY3QgbW9kZSBpcyBcImVycm9yXCIuXG4gIGNvbnN0IHJlcXVlc3QgPSBtYWtlUmVxdWVzdCh7XG4gICAgdXJsTGlzdDogW3JlcXVlc3RVUkxdLFxuICAgIHNlcnZpY2VXb3JrZXJzOiAnbm9uZScsXG4gICAgcmVmZXJyZXI6ICduby1yZWZlcnJlcicsXG4gICAgbW9kZTogJ3dlYnNvY2tldCcsXG4gICAgY3JlZGVudGlhbHM6ICdpbmNsdWRlJyxcbiAgICBjYWNoZTogJ25vLXN0b3JlJyxcbiAgICByZWRpcmVjdDogJ2Vycm9yJ1xuICB9KVxuXG4gIC8vIE5vdGU6IHVuZGljaSBleHRlbnNpb24sIGFsbG93IHNldHRpbmcgY3VzdG9tIGhlYWRlcnMuXG4gIGlmIChvcHRpb25zLmhlYWRlcnMpIHtcbiAgICBjb25zdCBoZWFkZXJzTGlzdCA9IG5ldyBIZWFkZXJzKG9wdGlvbnMuaGVhZGVycylba0hlYWRlcnNMaXN0XVxuXG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdCA9IGhlYWRlcnNMaXN0XG4gIH1cblxuICAvLyAzLiBBcHBlbmQgKGBVcGdyYWRlYCwgYHdlYnNvY2tldGApIHRvIHJlcXVlc3TigJlzIGhlYWRlciBsaXN0LlxuICAvLyA0LiBBcHBlbmQgKGBDb25uZWN0aW9uYCwgYFVwZ3JhZGVgKSB0byByZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cbiAgLy8gTm90ZTogYm90aCBvZiB0aGVzZSBhcmUgaGFuZGxlZCBieSB1bmRpY2kgY3VycmVudGx5LlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9ibG9iLzY4YzI2OWM0MTQ0YzQ0NmYzZjEyMjA5NTEzMzhkYWVmNGE2YjVlYzQvbGliL2NsaWVudC5qcyNMMTM5N1xuXG4gIC8vIDUuIExldCBrZXlWYWx1ZSBiZSBhIG5vbmNlIGNvbnNpc3Rpbmcgb2YgYSByYW5kb21seSBzZWxlY3RlZFxuICAvLyAgICAxNi1ieXRlIHZhbHVlIHRoYXQgaGFzIGJlZW4gZm9yZ2l2aW5nLWJhc2U2NC1lbmNvZGVkIGFuZFxuICAvLyAgICBpc29tb3JwaGljIGVuY29kZWQuXG4gIGNvbnN0IGtleVZhbHVlID0gY3J5cHRvLnJhbmRvbUJ5dGVzKDE2KS50b1N0cmluZygnYmFzZTY0JylcblxuICAvLyA2LiBBcHBlbmQgKGBTZWMtV2ViU29ja2V0LUtleWAsIGtleVZhbHVlKSB0byByZXF1ZXN04oCZc1xuICAvLyAgICBoZWFkZXIgbGlzdC5cbiAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ3NlYy13ZWJzb2NrZXQta2V5Jywga2V5VmFsdWUpXG5cbiAgLy8gNy4gQXBwZW5kIChgU2VjLVdlYlNvY2tldC1WZXJzaW9uYCwgYDEzYCkgdG8gcmVxdWVzdOKAmXNcbiAgLy8gICAgaGVhZGVyIGxpc3QuXG4gIHJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdzZWMtd2Vic29ja2V0LXZlcnNpb24nLCAnMTMnKVxuXG4gIC8vIDguIEZvciBlYWNoIHByb3RvY29sIGluIHByb3RvY29scywgY29tYmluZVxuICAvLyAgICAoYFNlYy1XZWJTb2NrZXQtUHJvdG9jb2xgLCBwcm90b2NvbCkgaW4gcmVxdWVzdOKAmXMgaGVhZGVyXG4gIC8vICAgIGxpc3QuXG4gIGZvciAoY29uc3QgcHJvdG9jb2wgb2YgcHJvdG9jb2xzKSB7XG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ3NlYy13ZWJzb2NrZXQtcHJvdG9jb2wnLCBwcm90b2NvbClcbiAgfVxuXG4gIC8vIDkuIExldCBwZXJtZXNzYWdlRGVmbGF0ZSBiZSBhIHVzZXItYWdlbnQgZGVmaW5lZFxuICAvLyAgICBcInBlcm1lc3NhZ2UtZGVmbGF0ZVwiIGV4dGVuc2lvbiBoZWFkZXIgdmFsdWUuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL2dlY2tvLWRldi9ibG9iL2NlNzgyMzRmNWU2NTNhNWQzOTE2ODEzZmY5OTBmMDUzNTEwMjI3YmMvbmV0d2Vyay9wcm90b2NvbC93ZWJzb2NrZXQvV2ViU29ja2V0Q2hhbm5lbC5jcHAjTDI2NzNcbiAgLy8gVE9ETzogZW5hYmxlIG9uY2UgcGVybWVzc2FnZS1kZWZsYXRlIGlzIHN1cHBvcnRlZFxuICBjb25zdCBwZXJtZXNzYWdlRGVmbGF0ZSA9ICcnIC8vICdwZXJtZXNzYWdlLWRlZmxhdGU7IDE1J1xuXG4gIC8vIDEwLiBBcHBlbmQgKGBTZWMtV2ViU29ja2V0LUV4dGVuc2lvbnNgLCBwZXJtZXNzYWdlRGVmbGF0ZSkgdG9cbiAgLy8gICAgIHJlcXVlc3TigJlzIGhlYWRlciBsaXN0LlxuICAvLyByZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnc2VjLXdlYnNvY2tldC1leHRlbnNpb25zJywgcGVybWVzc2FnZURlZmxhdGUpXG5cbiAgLy8gMTEuIEZldGNoIHJlcXVlc3Qgd2l0aCB1c2VQYXJhbGxlbFF1ZXVlIHNldCB0byB0cnVlLCBhbmRcbiAgLy8gICAgIHByb2Nlc3NSZXNwb25zZSBnaXZlbiByZXNwb25zZSBiZWluZyB0aGVzZSBzdGVwczpcbiAgY29uc3QgY29udHJvbGxlciA9IGZldGNoaW5nKHtcbiAgICByZXF1ZXN0LFxuICAgIHVzZVBhcmFsbGVsUXVldWU6IHRydWUsXG4gICAgZGlzcGF0Y2hlcjogb3B0aW9ucy5kaXNwYXRjaGVyID8/IGdldEdsb2JhbERpc3BhdGNoZXIoKSxcbiAgICBwcm9jZXNzUmVzcG9uc2UgKHJlc3BvbnNlKSB7XG4gICAgICAvLyAxLiBJZiByZXNwb25zZSBpcyBhIG5ldHdvcmsgZXJyb3Igb3IgaXRzIHN0YXR1cyBpcyBub3QgMTAxLFxuICAgICAgLy8gICAgZmFpbCB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24uXG4gICAgICBpZiAocmVzcG9uc2UudHlwZSA9PT0gJ2Vycm9yJyB8fCByZXNwb25zZS5zdGF0dXMgIT09IDEwMSkge1xuICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1JlY2VpdmVkIG5ldHdvcmsgZXJyb3Igb3Igbm9uLTEwMSBzdGF0dXMgY29kZS4nKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gMi4gSWYgcHJvdG9jb2xzIGlzIG5vdCB0aGUgZW1wdHkgbGlzdCBhbmQgZXh0cmFjdGluZyBoZWFkZXJcbiAgICAgIC8vICAgIGxpc3QgdmFsdWVzIGdpdmVuIGBTZWMtV2ViU29ja2V0LVByb3RvY29sYCBhbmQgcmVzcG9uc2XigJlzXG4gICAgICAvLyAgICBoZWFkZXIgbGlzdCByZXN1bHRzIGluIG51bGwsIGZhaWx1cmUsIG9yIHRoZSBlbXB0eSBieXRlXG4gICAgICAvLyAgICBzZXF1ZW5jZSwgdGhlbiBmYWlsIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbi5cbiAgICAgIGlmIChwcm90b2NvbHMubGVuZ3RoICE9PSAwICYmICFyZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ1NlYy1XZWJTb2NrZXQtUHJvdG9jb2wnKSkge1xuICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1NlcnZlciBkaWQgbm90IHJlc3BvbmQgd2l0aCBzZW50IHByb3RvY29scy4nKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gMy4gRm9sbG93IHRoZSByZXF1aXJlbWVudHMgc3RhdGVkIHN0ZXAgMiB0byBzdGVwIDYsIGluY2x1c2l2ZSxcbiAgICAgIC8vICAgIG9mIHRoZSBsYXN0IHNldCBvZiBzdGVwcyBpbiBzZWN0aW9uIDQuMSBvZiBUaGUgV2ViU29ja2V0XG4gICAgICAvLyAgICBQcm90b2NvbCB0byB2YWxpZGF0ZSByZXNwb25zZS4gVGhpcyBlaXRoZXIgcmVzdWx0cyBpbiBmYWlsXG4gICAgICAvLyAgICB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gb3IgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzXG4gICAgICAvLyAgICBlc3RhYmxpc2hlZC5cblxuICAgICAgLy8gMi4gSWYgdGhlIHJlc3BvbnNlIGxhY2tzIGFuIHxVcGdyYWRlfCBoZWFkZXIgZmllbGQgb3IgdGhlIHxVcGdyYWRlfFxuICAgICAgLy8gICAgaGVhZGVyIGZpZWxkIGNvbnRhaW5zIGEgdmFsdWUgdGhhdCBpcyBub3QgYW4gQVNDSUkgY2FzZS1cbiAgICAgIC8vICAgIGluc2Vuc2l0aXZlIG1hdGNoIGZvciB0aGUgdmFsdWUgXCJ3ZWJzb2NrZXRcIiwgdGhlIGNsaWVudCBNVVNUXG4gICAgICAvLyAgICBfRmFpbCB0aGUgV2ViU29ja2V0IENvbm5lY3Rpb25fLlxuICAgICAgaWYgKHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnVXBncmFkZScpPy50b0xvd2VyQ2FzZSgpICE9PSAnd2Vic29ja2V0Jykge1xuICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1NlcnZlciBkaWQgbm90IHNldCBVcGdyYWRlIGhlYWRlciB0byBcIndlYnNvY2tldFwiLicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyAzLiBJZiB0aGUgcmVzcG9uc2UgbGFja3MgYSB8Q29ubmVjdGlvbnwgaGVhZGVyIGZpZWxkIG9yIHRoZVxuICAgICAgLy8gICAgfENvbm5lY3Rpb258IGhlYWRlciBmaWVsZCBkb2Vzbid0IGNvbnRhaW4gYSB0b2tlbiB0aGF0IGlzIGFuXG4gICAgICAvLyAgICBBU0NJSSBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvciB0aGUgdmFsdWUgXCJVcGdyYWRlXCIsIHRoZSBjbGllbnRcbiAgICAgIC8vICAgIE1VU1QgX0ZhaWwgdGhlIFdlYlNvY2tldCBDb25uZWN0aW9uXy5cbiAgICAgIGlmIChyZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ0Nvbm5lY3Rpb24nKT8udG9Mb3dlckNhc2UoKSAhPT0gJ3VwZ3JhZGUnKSB7XG4gICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnU2VydmVyIGRpZCBub3Qgc2V0IENvbm5lY3Rpb24gaGVhZGVyIHRvIFwidXBncmFkZVwiLicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyA0LiBJZiB0aGUgcmVzcG9uc2UgbGFja3MgYSB8U2VjLVdlYlNvY2tldC1BY2NlcHR8IGhlYWRlciBmaWVsZCBvclxuICAgICAgLy8gICAgdGhlIHxTZWMtV2ViU29ja2V0LUFjY2VwdHwgY29udGFpbnMgYSB2YWx1ZSBvdGhlciB0aGFuIHRoZVxuICAgICAgLy8gICAgYmFzZTY0LWVuY29kZWQgU0hBLTEgb2YgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlIHxTZWMtV2ViU29ja2V0LVxuICAgICAgLy8gICAgS2V5fCAoYXMgYSBzdHJpbmcsIG5vdCBiYXNlNjQtZGVjb2RlZCkgd2l0aCB0aGUgc3RyaW5nIFwiMjU4RUFGQTUtXG4gICAgICAvLyAgICBFOTE0LTQ3REEtOTVDQS1DNUFCMERDODVCMTFcIiBidXQgaWdub3JpbmcgYW55IGxlYWRpbmcgYW5kXG4gICAgICAvLyAgICB0cmFpbGluZyB3aGl0ZXNwYWNlLCB0aGUgY2xpZW50IE1VU1QgX0ZhaWwgdGhlIFdlYlNvY2tldFxuICAgICAgLy8gICAgQ29ubmVjdGlvbl8uXG4gICAgICBjb25zdCBzZWNXU0FjY2VwdCA9IHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnU2VjLVdlYlNvY2tldC1BY2NlcHQnKVxuICAgICAgY29uc3QgZGlnZXN0ID0gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTEnKS51cGRhdGUoa2V5VmFsdWUgKyB1aWQpLmRpZ2VzdCgnYmFzZTY0JylcbiAgICAgIGlmIChzZWNXU0FjY2VwdCAhPT0gZGlnZXN0KSB7XG4gICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnSW5jb3JyZWN0IGhhc2ggcmVjZWl2ZWQgaW4gU2VjLVdlYlNvY2tldC1BY2NlcHQgaGVhZGVyLicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyA1LiBJZiB0aGUgcmVzcG9uc2UgaW5jbHVkZXMgYSB8U2VjLVdlYlNvY2tldC1FeHRlbnNpb25zfCBoZWFkZXJcbiAgICAgIC8vICAgIGZpZWxkIGFuZCB0aGlzIGhlYWRlciBmaWVsZCBpbmRpY2F0ZXMgdGhlIHVzZSBvZiBhbiBleHRlbnNpb25cbiAgICAgIC8vICAgIHRoYXQgd2FzIG5vdCBwcmVzZW50IGluIHRoZSBjbGllbnQncyBoYW5kc2hha2UgKHRoZSBzZXJ2ZXIgaGFzXG4gICAgICAvLyAgICBpbmRpY2F0ZWQgYW4gZXh0ZW5zaW9uIG5vdCByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCksIHRoZSBjbGllbnRcbiAgICAgIC8vICAgIE1VU1QgX0ZhaWwgdGhlIFdlYlNvY2tldCBDb25uZWN0aW9uXy4gIChUaGUgcGFyc2luZyBvZiB0aGlzXG4gICAgICAvLyAgICBoZWFkZXIgZmllbGQgdG8gZGV0ZXJtaW5lIHdoaWNoIGV4dGVuc2lvbnMgYXJlIHJlcXVlc3RlZCBpc1xuICAgICAgLy8gICAgZGlzY3Vzc2VkIGluIFNlY3Rpb24gOS4xLilcbiAgICAgIGNvbnN0IHNlY0V4dGVuc2lvbiA9IHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnU2VjLVdlYlNvY2tldC1FeHRlbnNpb25zJylcblxuICAgICAgaWYgKHNlY0V4dGVuc2lvbiAhPT0gbnVsbCAmJiBzZWNFeHRlbnNpb24gIT09IHBlcm1lc3NhZ2VEZWZsYXRlKSB7XG4gICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnUmVjZWl2ZWQgZGlmZmVyZW50IHBlcm1lc3NhZ2UtZGVmbGF0ZSB0aGFuIHRoZSBvbmUgc2V0LicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyA2LiBJZiB0aGUgcmVzcG9uc2UgaW5jbHVkZXMgYSB8U2VjLVdlYlNvY2tldC1Qcm90b2NvbHwgaGVhZGVyIGZpZWxkXG4gICAgICAvLyAgICBhbmQgdGhpcyBoZWFkZXIgZmllbGQgaW5kaWNhdGVzIHRoZSB1c2Ugb2YgYSBzdWJwcm90b2NvbCB0aGF0IHdhc1xuICAgICAgLy8gICAgbm90IHByZXNlbnQgaW4gdGhlIGNsaWVudCdzIGhhbmRzaGFrZSAodGhlIHNlcnZlciBoYXMgaW5kaWNhdGVkIGFcbiAgICAgIC8vICAgIHN1YnByb3RvY29sIG5vdCByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCksIHRoZSBjbGllbnQgTVVTVCBfRmFpbFxuICAgICAgLy8gICAgdGhlIFdlYlNvY2tldCBDb25uZWN0aW9uXy5cbiAgICAgIGNvbnN0IHNlY1Byb3RvY29sID0gcmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdTZWMtV2ViU29ja2V0LVByb3RvY29sJylcblxuICAgICAgaWYgKHNlY1Byb3RvY29sICE9PSBudWxsICYmIHNlY1Byb3RvY29sICE9PSByZXF1ZXN0LmhlYWRlcnNMaXN0LmdldCgnU2VjLVdlYlNvY2tldC1Qcm90b2NvbCcpKSB7XG4gICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnUHJvdG9jb2wgd2FzIG5vdCBzZXQgaW4gdGhlIG9wZW5pbmcgaGFuZHNoYWtlLicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICByZXNwb25zZS5zb2NrZXQub24oJ2RhdGEnLCBvblNvY2tldERhdGEpXG4gICAgICByZXNwb25zZS5zb2NrZXQub24oJ2Nsb3NlJywgb25Tb2NrZXRDbG9zZSlcbiAgICAgIHJlc3BvbnNlLnNvY2tldC5vbignZXJyb3InLCBvblNvY2tldEVycm9yKVxuXG4gICAgICBpZiAoY2hhbm5lbHMub3Blbi5oYXNTdWJzY3JpYmVycykge1xuICAgICAgICBjaGFubmVscy5vcGVuLnB1Ymxpc2goe1xuICAgICAgICAgIGFkZHJlc3M6IHJlc3BvbnNlLnNvY2tldC5hZGRyZXNzKCksXG4gICAgICAgICAgcHJvdG9jb2w6IHNlY1Byb3RvY29sLFxuICAgICAgICAgIGV4dGVuc2lvbnM6IHNlY0V4dGVuc2lvblxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBvbkVzdGFibGlzaChyZXNwb25zZSlcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIGNvbnRyb2xsZXJcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0J1ZmZlcn0gY2h1bmtcbiAqL1xuZnVuY3Rpb24gb25Tb2NrZXREYXRhIChjaHVuaykge1xuICBpZiAoIXRoaXMud3Nba0J5dGVQYXJzZXJdLndyaXRlKGNodW5rKSkge1xuICAgIHRoaXMucGF1c2UoKVxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNmZWVkYmFjay1mcm9tLXRoZS1wcm90b2NvbFxuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzY0NTUjc2VjdGlvbi03LjEuNFxuICovXG5mdW5jdGlvbiBvblNvY2tldENsb3NlICgpIHtcbiAgY29uc3QgeyB3cyB9ID0gdGhpc1xuXG4gIC8vIElmIHRoZSBUQ1AgY29ubmVjdGlvbiB3YXMgY2xvc2VkIGFmdGVyIHRoZVxuICAvLyBXZWJTb2NrZXQgY2xvc2luZyBoYW5kc2hha2Ugd2FzIGNvbXBsZXRlZCwgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uXG4gIC8vIGlzIHNhaWQgdG8gaGF2ZSBiZWVuIGNsb3NlZCBfY2xlYW5seV8uXG4gIGNvbnN0IHdhc0NsZWFuID0gd3Nba1NlbnRDbG9zZV0gJiYgd3Nba1JlY2VpdmVkQ2xvc2VdXG5cbiAgbGV0IGNvZGUgPSAxMDA1XG4gIGxldCByZWFzb24gPSAnJ1xuXG4gIGNvbnN0IHJlc3VsdCA9IHdzW2tCeXRlUGFyc2VyXS5jbG9zaW5nSW5mb1xuXG4gIGlmIChyZXN1bHQpIHtcbiAgICBjb2RlID0gcmVzdWx0LmNvZGUgPz8gMTAwNVxuICAgIHJlYXNvbiA9IHJlc3VsdC5yZWFzb25cbiAgfSBlbHNlIGlmICghd3Nba1NlbnRDbG9zZV0pIHtcbiAgICAvLyBJZiBfVGhlIFdlYlNvY2tldFxuICAgIC8vIENvbm5lY3Rpb24gaXMgQ2xvc2VkXyBhbmQgbm8gQ2xvc2UgY29udHJvbCBmcmFtZSB3YXMgcmVjZWl2ZWQgYnkgdGhlXG4gICAgLy8gZW5kcG9pbnQgKHN1Y2ggYXMgY291bGQgb2NjdXIgaWYgdGhlIHVuZGVybHlpbmcgdHJhbnNwb3J0IGNvbm5lY3Rpb25cbiAgICAvLyBpcyBsb3N0KSwgX1RoZSBXZWJTb2NrZXQgQ29ubmVjdGlvbiBDbG9zZSBDb2RlXyBpcyBjb25zaWRlcmVkIHRvIGJlXG4gICAgLy8gMTAwNi5cbiAgICBjb2RlID0gMTAwNlxuICB9XG5cbiAgLy8gMS4gQ2hhbmdlIHRoZSByZWFkeSBzdGF0ZSB0byBDTE9TRUQgKDMpLlxuICB3c1trUmVhZHlTdGF0ZV0gPSBzdGF0ZXMuQ0xPU0VEXG5cbiAgLy8gMi4gSWYgdGhlIHVzZXIgYWdlbnQgd2FzIHJlcXVpcmVkIHRvIGZhaWwgdGhlIFdlYlNvY2tldFxuICAvLyAgICBjb25uZWN0aW9uLCBvciBpZiB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gd2FzIGNsb3NlZFxuICAvLyAgICBhZnRlciBiZWluZyBmbGFnZ2VkIGFzIGZ1bGwsIGZpcmUgYW4gZXZlbnQgbmFtZWQgZXJyb3JcbiAgLy8gICAgYXQgdGhlIFdlYlNvY2tldCBvYmplY3QuXG4gIC8vIFRPRE9cblxuICAvLyAzLiBGaXJlIGFuIGV2ZW50IG5hbWVkIGNsb3NlIGF0IHRoZSBXZWJTb2NrZXQgb2JqZWN0LFxuICAvLyAgICB1c2luZyBDbG9zZUV2ZW50LCB3aXRoIHRoZSB3YXNDbGVhbiBhdHRyaWJ1dGVcbiAgLy8gICAgaW5pdGlhbGl6ZWQgdG8gdHJ1ZSBpZiB0aGUgY29ubmVjdGlvbiBjbG9zZWQgY2xlYW5seVxuICAvLyAgICBhbmQgZmFsc2Ugb3RoZXJ3aXNlLCB0aGUgY29kZSBhdHRyaWJ1dGUgaW5pdGlhbGl6ZWQgdG9cbiAgLy8gICAgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGNsb3NlIGNvZGUsIGFuZCB0aGUgcmVhc29uXG4gIC8vICAgIGF0dHJpYnV0ZSBpbml0aWFsaXplZCB0byB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIFVURi04XG4gIC8vICAgIGRlY29kZSB3aXRob3V0IEJPTSB0byB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gY2xvc2VcbiAgLy8gICAgcmVhc29uLlxuICBmaXJlRXZlbnQoJ2Nsb3NlJywgd3MsIENsb3NlRXZlbnQsIHtcbiAgICB3YXNDbGVhbiwgY29kZSwgcmVhc29uXG4gIH0pXG5cbiAgaWYgKGNoYW5uZWxzLmNsb3NlLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgY2hhbm5lbHMuY2xvc2UucHVibGlzaCh7XG4gICAgICB3ZWJzb2NrZXQ6IHdzLFxuICAgICAgY29kZSxcbiAgICAgIHJlYXNvblxuICAgIH0pXG4gIH1cbn1cblxuZnVuY3Rpb24gb25Tb2NrZXRFcnJvciAoZXJyb3IpIHtcbiAgY29uc3QgeyB3cyB9ID0gdGhpc1xuXG4gIHdzW2tSZWFkeVN0YXRlXSA9IHN0YXRlcy5DTE9TSU5HXG5cbiAgaWYgKGNoYW5uZWxzLnNvY2tldEVycm9yLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgY2hhbm5lbHMuc29ja2V0RXJyb3IucHVibGlzaChlcnJvcilcbiAgfVxuXG4gIHRoaXMuZGVzdHJveSgpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBlc3RhYmxpc2hXZWJTb2NrZXRDb25uZWN0aW9uXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IG1heFVuc2lnbmVkMTZCaXQgfSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcblxuLyoqIEB0eXBlIHtpbXBvcnQoJ2NyeXB0bycpfSAqL1xubGV0IGNyeXB0b1xudHJ5IHtcbiAgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJylcbn0gY2F0Y2gge1xuXG59XG5cbmNsYXNzIFdlYnNvY2tldEZyYW1lU2VuZCB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge0J1ZmZlcnx1bmRlZmluZWR9IGRhdGFcbiAgICovXG4gIGNvbnN0cnVjdG9yIChkYXRhKSB7XG4gICAgdGhpcy5mcmFtZURhdGEgPSBkYXRhXG4gICAgdGhpcy5tYXNrS2V5ID0gY3J5cHRvLnJhbmRvbUJ5dGVzKDQpXG4gIH1cblxuICBjcmVhdGVGcmFtZSAob3Bjb2RlKSB7XG4gICAgY29uc3QgYm9keUxlbmd0aCA9IHRoaXMuZnJhbWVEYXRhPy5ieXRlTGVuZ3RoID8/IDBcblxuICAgIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICAgIGxldCBwYXlsb2FkTGVuZ3RoID0gYm9keUxlbmd0aCAvLyAwLTEyNVxuICAgIGxldCBvZmZzZXQgPSA2XG5cbiAgICBpZiAoYm9keUxlbmd0aCA+IG1heFVuc2lnbmVkMTZCaXQpIHtcbiAgICAgIG9mZnNldCArPSA4IC8vIHBheWxvYWQgbGVuZ3RoIGlzIG5leHQgOCBieXRlc1xuICAgICAgcGF5bG9hZExlbmd0aCA9IDEyN1xuICAgIH0gZWxzZSBpZiAoYm9keUxlbmd0aCA+IDEyNSkge1xuICAgICAgb2Zmc2V0ICs9IDIgLy8gcGF5bG9hZCBsZW5ndGggaXMgbmV4dCAyIGJ5dGVzXG4gICAgICBwYXlsb2FkTGVuZ3RoID0gMTI2XG4gICAgfVxuXG4gICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKGJvZHlMZW5ndGggKyBvZmZzZXQpXG5cbiAgICAvLyBDbGVhciBmaXJzdCAyIGJ5dGVzLCBldmVyeXRoaW5nIGVsc2UgaXMgb3ZlcndyaXR0ZW5cbiAgICBidWZmZXJbMF0gPSBidWZmZXJbMV0gPSAwXG4gICAgYnVmZmVyWzBdIHw9IDB4ODAgLy8gRklOXG4gICAgYnVmZmVyWzBdID0gKGJ1ZmZlclswXSAmIDB4RjApICsgb3Bjb2RlIC8vIG9wY29kZVxuXG4gICAgLyohIHdzLiBNSVQgTGljZW5zZS4gRWluYXIgT3R0byBTdGFuZ3ZpayA8ZWluYXJvc0BnbWFpbC5jb20+ICovXG4gICAgYnVmZmVyW29mZnNldCAtIDRdID0gdGhpcy5tYXNrS2V5WzBdXG4gICAgYnVmZmVyW29mZnNldCAtIDNdID0gdGhpcy5tYXNrS2V5WzFdXG4gICAgYnVmZmVyW29mZnNldCAtIDJdID0gdGhpcy5tYXNrS2V5WzJdXG4gICAgYnVmZmVyW29mZnNldCAtIDFdID0gdGhpcy5tYXNrS2V5WzNdXG5cbiAgICBidWZmZXJbMV0gPSBwYXlsb2FkTGVuZ3RoXG5cbiAgICBpZiAocGF5bG9hZExlbmd0aCA9PT0gMTI2KSB7XG4gICAgICBidWZmZXIud3JpdGVVSW50MTZCRShib2R5TGVuZ3RoLCAyKVxuICAgIH0gZWxzZSBpZiAocGF5bG9hZExlbmd0aCA9PT0gMTI3KSB7XG4gICAgICAvLyBDbGVhciBleHRlbmRlZCBwYXlsb2FkIGxlbmd0aFxuICAgICAgYnVmZmVyWzJdID0gYnVmZmVyWzNdID0gMFxuICAgICAgYnVmZmVyLndyaXRlVUludEJFKGJvZHlMZW5ndGgsIDQsIDYpXG4gICAgfVxuXG4gICAgYnVmZmVyWzFdIHw9IDB4ODAgLy8gTUFTS1xuXG4gICAgLy8gbWFzayBib2R5XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBib2R5TGVuZ3RoOyBpKyspIHtcbiAgICAgIGJ1ZmZlcltvZmZzZXQgKyBpXSA9IHRoaXMuZnJhbWVEYXRhW2ldIF4gdGhpcy5tYXNrS2V5W2kgJSA0XVxuICAgIH1cblxuICAgIHJldHVybiBidWZmZXJcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgV2Vic29ja2V0RnJhbWVTZW5kXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IFdyaXRhYmxlIH0gPSByZXF1aXJlKCdzdHJlYW0nKVxuY29uc3QgZGlhZ25vc3RpY3NDaGFubmVsID0gcmVxdWlyZSgnZGlhZ25vc3RpY3NfY2hhbm5lbCcpXG5jb25zdCB7IHBhcnNlclN0YXRlcywgb3Bjb2Rlcywgc3RhdGVzLCBlbXB0eUJ1ZmZlciB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3QgeyBrUmVhZHlTdGF0ZSwga1NlbnRDbG9zZSwga1Jlc3BvbnNlLCBrUmVjZWl2ZWRDbG9zZSB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgaXNWYWxpZFN0YXR1c0NvZGUsIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uLCB3ZWJzb2NrZXRNZXNzYWdlUmVjZWl2ZWQgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IFdlYnNvY2tldEZyYW1lU2VuZCB9ID0gcmVxdWlyZSgnLi9mcmFtZScpXG5cbi8vIFRoaXMgY29kZSB3YXMgaW5mbHVlbmNlZCBieSB3cyByZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4vLyBDb3B5cmlnaHQgKGMpIDIwMTEgRWluYXIgT3R0byBTdGFuZ3ZpayA8ZWluYXJvc0BnbWFpbC5jb20+XG4vLyBDb3B5cmlnaHQgKGMpIDIwMTMgQXJub3V0IEthemVtaWVyIGFuZCBjb250cmlidXRvcnNcbi8vIENvcHlyaWdodCAoYykgMjAxNiBMdWlnaSBQaW5jYSBhbmQgY29udHJpYnV0b3JzXG5cbmNvbnN0IGNoYW5uZWxzID0ge31cbmNoYW5uZWxzLnBpbmcgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOndlYnNvY2tldDpwaW5nJylcbmNoYW5uZWxzLnBvbmcgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOndlYnNvY2tldDpwb25nJylcblxuY2xhc3MgQnl0ZVBhcnNlciBleHRlbmRzIFdyaXRhYmxlIHtcbiAgI2J1ZmZlcnMgPSBbXVxuICAjYnl0ZU9mZnNldCA9IDBcblxuICAjc3RhdGUgPSBwYXJzZXJTdGF0ZXMuSU5GT1xuXG4gICNpbmZvID0ge31cbiAgI2ZyYWdtZW50cyA9IFtdXG5cbiAgY29uc3RydWN0b3IgKHdzKSB7XG4gICAgc3VwZXIoKVxuXG4gICAgdGhpcy53cyA9IHdzXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtCdWZmZXJ9IGNodW5rXG4gICAqIEBwYXJhbSB7KCkgPT4gdm9pZH0gY2FsbGJhY2tcbiAgICovXG4gIF93cml0ZSAoY2h1bmssIF8sIGNhbGxiYWNrKSB7XG4gICAgdGhpcy4jYnVmZmVycy5wdXNoKGNodW5rKVxuICAgIHRoaXMuI2J5dGVPZmZzZXQgKz0gY2h1bmsubGVuZ3RoXG5cbiAgICB0aGlzLnJ1bihjYWxsYmFjaylcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHdoZW5ldmVyIGEgbmV3IGNodW5rIGlzIHJlY2VpdmVkLlxuICAgKiBDYWxsYmFjayBpcyBjYWxsZWQgd2hlbmV2ZXIgdGhlcmUgYXJlIG5vIG1vcmUgY2h1bmtzIGJ1ZmZlcmluZyxcbiAgICogb3Igbm90IGVub3VnaCBieXRlcyBhcmUgYnVmZmVyZWQgdG8gcGFyc2UuXG4gICAqL1xuICBydW4gKGNhbGxiYWNrKSB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmICh0aGlzLiNzdGF0ZSA9PT0gcGFyc2VyU3RhdGVzLklORk8pIHtcbiAgICAgICAgLy8gSWYgdGhlcmUgYXJlbid0IGVub3VnaCBieXRlcyB0byBwYXJzZSB0aGUgcGF5bG9hZCBsZW5ndGgsIGV0Yy5cbiAgICAgICAgaWYgKHRoaXMuI2J5dGVPZmZzZXQgPCAyKSB7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IHRoaXMuY29uc3VtZSgyKVxuXG4gICAgICAgIHRoaXMuI2luZm8uZmluID0gKGJ1ZmZlclswXSAmIDB4ODApICE9PSAwXG4gICAgICAgIHRoaXMuI2luZm8ub3Bjb2RlID0gYnVmZmVyWzBdICYgMHgwRlxuXG4gICAgICAgIC8vIElmIHdlIHJlY2VpdmUgYSBmcmFnbWVudGVkIG1lc3NhZ2UsIHdlIHVzZSB0aGUgdHlwZSBvZiB0aGUgZmlyc3RcbiAgICAgICAgLy8gZnJhbWUgdG8gcGFyc2UgdGhlIGZ1bGwgbWVzc2FnZSBhcyBiaW5hcnkvdGV4dCwgd2hlbiBpdCdzIHRlcm1pbmF0ZWRcbiAgICAgICAgdGhpcy4jaW5mby5vcmlnaW5hbE9wY29kZSA/Pz0gdGhpcy4jaW5mby5vcGNvZGVcblxuICAgICAgICB0aGlzLiNpbmZvLmZyYWdtZW50ZWQgPSAhdGhpcy4jaW5mby5maW4gJiYgdGhpcy4jaW5mby5vcGNvZGUgIT09IG9wY29kZXMuQ09OVElOVUFUSU9OXG5cbiAgICAgICAgaWYgKHRoaXMuI2luZm8uZnJhZ21lbnRlZCAmJiB0aGlzLiNpbmZvLm9wY29kZSAhPT0gb3Bjb2Rlcy5CSU5BUlkgJiYgdGhpcy4jaW5mby5vcGNvZGUgIT09IG9wY29kZXMuVEVYVCkge1xuICAgICAgICAgIC8vIE9ubHkgdGV4dCBhbmQgYmluYXJ5IGZyYW1lcyBjYW4gYmUgZnJhZ21lbnRlZFxuICAgICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHRoaXMud3MsICdJbnZhbGlkIGZyYW1lIHR5cGUgd2FzIGZyYWdtZW50ZWQuJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBheWxvYWRMZW5ndGggPSBidWZmZXJbMV0gJiAweDdGXG5cbiAgICAgICAgaWYgKHBheWxvYWRMZW5ndGggPD0gMTI1KSB7XG4gICAgICAgICAgdGhpcy4jaW5mby5wYXlsb2FkTGVuZ3RoID0gcGF5bG9hZExlbmd0aFxuICAgICAgICAgIHRoaXMuI3N0YXRlID0gcGFyc2VyU3RhdGVzLlJFQURfREFUQVxuICAgICAgICB9IGVsc2UgaWYgKHBheWxvYWRMZW5ndGggPT09IDEyNikge1xuICAgICAgICAgIHRoaXMuI3N0YXRlID0gcGFyc2VyU3RhdGVzLlBBWUxPQURMRU5HVEhfMTZcbiAgICAgICAgfSBlbHNlIGlmIChwYXlsb2FkTGVuZ3RoID09PSAxMjcpIHtcbiAgICAgICAgICB0aGlzLiNzdGF0ZSA9IHBhcnNlclN0YXRlcy5QQVlMT0FETEVOR1RIXzY0XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy4jaW5mby5mcmFnbWVudGVkICYmIHBheWxvYWRMZW5ndGggPiAxMjUpIHtcbiAgICAgICAgICAvLyBBIGZyYWdtZW50ZWQgZnJhbWUgY2FuJ3QgYmUgZnJhZ21lbnRlZCBpdHNlbGZcbiAgICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih0aGlzLndzLCAnRnJhZ21lbnRlZCBmcmFtZSBleGNlZWRlZCAxMjUgYnl0ZXMuJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAodGhpcy4jaW5mby5vcGNvZGUgPT09IG9wY29kZXMuUElORyB8fFxuICAgICAgICAgICAgdGhpcy4jaW5mby5vcGNvZGUgPT09IG9wY29kZXMuUE9ORyB8fFxuICAgICAgICAgICAgdGhpcy4jaW5mby5vcGNvZGUgPT09IG9wY29kZXMuQ0xPU0UpICYmXG4gICAgICAgICAgcGF5bG9hZExlbmd0aCA+IDEyNVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBDb250cm9sIGZyYW1lcyBjYW4gaGF2ZSBhIHBheWxvYWQgbGVuZ3RoIG9mIDEyNSBieXRlcyBNQVhcbiAgICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih0aGlzLndzLCAnUGF5bG9hZCBsZW5ndGggZm9yIGNvbnRyb2wgZnJhbWUgZXhjZWVkZWQgMTI1IGJ5dGVzLicpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy4jaW5mby5vcGNvZGUgPT09IG9wY29kZXMuQ0xPU0UpIHtcbiAgICAgICAgICBpZiAocGF5bG9hZExlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24odGhpcy53cywgJ1JlY2VpdmVkIGNsb3NlIGZyYW1lIHdpdGggYSAxLWJ5dGUgYm9keS4nKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgYm9keSA9IHRoaXMuY29uc3VtZShwYXlsb2FkTGVuZ3RoKVxuXG4gICAgICAgICAgdGhpcy4jaW5mby5jbG9zZUluZm8gPSB0aGlzLnBhcnNlQ2xvc2VCb2R5KGZhbHNlLCBib2R5KVxuXG4gICAgICAgICAgaWYgKCF0aGlzLndzW2tTZW50Q2xvc2VdKSB7XG4gICAgICAgICAgICAvLyBJZiBhbiBlbmRwb2ludCByZWNlaXZlcyBhIENsb3NlIGZyYW1lIGFuZCBkaWQgbm90IHByZXZpb3VzbHkgc2VuZCBhXG4gICAgICAgICAgICAvLyBDbG9zZSBmcmFtZSwgdGhlIGVuZHBvaW50IE1VU1Qgc2VuZCBhIENsb3NlIGZyYW1lIGluIHJlc3BvbnNlLiAgKFdoZW5cbiAgICAgICAgICAgIC8vIHNlbmRpbmcgYSBDbG9zZSBmcmFtZSBpbiByZXNwb25zZSwgdGhlIGVuZHBvaW50IHR5cGljYWxseSBlY2hvcyB0aGVcbiAgICAgICAgICAgIC8vIHN0YXR1cyBjb2RlIGl0IHJlY2VpdmVkLilcbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMilcbiAgICAgICAgICAgIGJvZHkud3JpdGVVSW50MTZCRSh0aGlzLiNpbmZvLmNsb3NlSW5mby5jb2RlLCAwKVxuICAgICAgICAgICAgY29uc3QgY2xvc2VGcmFtZSA9IG5ldyBXZWJzb2NrZXRGcmFtZVNlbmQoYm9keSlcblxuICAgICAgICAgICAgdGhpcy53c1trUmVzcG9uc2VdLnNvY2tldC53cml0ZShcbiAgICAgICAgICAgICAgY2xvc2VGcmFtZS5jcmVhdGVGcmFtZShvcGNvZGVzLkNMT1NFKSxcbiAgICAgICAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghZXJyKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLndzW2tTZW50Q2xvc2VdID0gdHJ1ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFVwb24gZWl0aGVyIHNlbmRpbmcgb3IgcmVjZWl2aW5nIGEgQ2xvc2UgY29udHJvbCBmcmFtZSwgaXQgaXMgc2FpZFxuICAgICAgICAgIC8vIHRoYXQgX1RoZSBXZWJTb2NrZXQgQ2xvc2luZyBIYW5kc2hha2UgaXMgU3RhcnRlZF8gYW5kIHRoYXQgdGhlXG4gICAgICAgICAgLy8gV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgaW4gdGhlIENMT1NJTkcgc3RhdGUuXG4gICAgICAgICAgdGhpcy53c1trUmVhZHlTdGF0ZV0gPSBzdGF0ZXMuQ0xPU0lOR1xuICAgICAgICAgIHRoaXMud3Nba1JlY2VpdmVkQ2xvc2VdID0gdHJ1ZVxuXG4gICAgICAgICAgdGhpcy5lbmQoKVxuXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy4jaW5mby5vcGNvZGUgPT09IG9wY29kZXMuUElORykge1xuICAgICAgICAgIC8vIFVwb24gcmVjZWlwdCBvZiBhIFBpbmcgZnJhbWUsIGFuIGVuZHBvaW50IE1VU1Qgc2VuZCBhIFBvbmcgZnJhbWUgaW5cbiAgICAgICAgICAvLyByZXNwb25zZSwgdW5sZXNzIGl0IGFscmVhZHkgcmVjZWl2ZWQgYSBDbG9zZSBmcmFtZS5cbiAgICAgICAgICAvLyBBIFBvbmcgZnJhbWUgc2VudCBpbiByZXNwb25zZSB0byBhIFBpbmcgZnJhbWUgbXVzdCBoYXZlIGlkZW50aWNhbFxuICAgICAgICAgIC8vIFwiQXBwbGljYXRpb24gZGF0YVwiXG5cbiAgICAgICAgICBjb25zdCBib2R5ID0gdGhpcy5jb25zdW1lKHBheWxvYWRMZW5ndGgpXG5cbiAgICAgICAgICBpZiAoIXRoaXMud3Nba1JlY2VpdmVkQ2xvc2VdKSB7XG4gICAgICAgICAgICBjb25zdCBmcmFtZSA9IG5ldyBXZWJzb2NrZXRGcmFtZVNlbmQoYm9keSlcblxuICAgICAgICAgICAgdGhpcy53c1trUmVzcG9uc2VdLnNvY2tldC53cml0ZShmcmFtZS5jcmVhdGVGcmFtZShvcGNvZGVzLlBPTkcpKVxuXG4gICAgICAgICAgICBpZiAoY2hhbm5lbHMucGluZy5oYXNTdWJzY3JpYmVycykge1xuICAgICAgICAgICAgICBjaGFubmVscy5waW5nLnB1Ymxpc2goe1xuICAgICAgICAgICAgICAgIHBheWxvYWQ6IGJvZHlcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLiNzdGF0ZSA9IHBhcnNlclN0YXRlcy5JTkZPXG5cbiAgICAgICAgICBpZiAodGhpcy4jYnl0ZU9mZnNldCA+IDApIHtcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKClcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLiNpbmZvLm9wY29kZSA9PT0gb3Bjb2Rlcy5QT05HKSB7XG4gICAgICAgICAgLy8gQSBQb25nIGZyYW1lIE1BWSBiZSBzZW50IHVuc29saWNpdGVkLiAgVGhpcyBzZXJ2ZXMgYXMgYVxuICAgICAgICAgIC8vIHVuaWRpcmVjdGlvbmFsIGhlYXJ0YmVhdC4gIEEgcmVzcG9uc2UgdG8gYW4gdW5zb2xpY2l0ZWQgUG9uZyBmcmFtZSBpc1xuICAgICAgICAgIC8vIG5vdCBleHBlY3RlZC5cblxuICAgICAgICAgIGNvbnN0IGJvZHkgPSB0aGlzLmNvbnN1bWUocGF5bG9hZExlbmd0aClcblxuICAgICAgICAgIGlmIChjaGFubmVscy5wb25nLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICAgICAgICBjaGFubmVscy5wb25nLnB1Ymxpc2goe1xuICAgICAgICAgICAgICBwYXlsb2FkOiBib2R5XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0aGlzLiNieXRlT2Zmc2V0ID4gMCkge1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2soKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuI3N0YXRlID09PSBwYXJzZXJTdGF0ZXMuUEFZTE9BRExFTkdUSF8xNikge1xuICAgICAgICBpZiAodGhpcy4jYnl0ZU9mZnNldCA8IDIpIHtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYnVmZmVyID0gdGhpcy5jb25zdW1lKDIpXG5cbiAgICAgICAgdGhpcy4jaW5mby5wYXlsb2FkTGVuZ3RoID0gYnVmZmVyLnJlYWRVSW50MTZCRSgwKVxuICAgICAgICB0aGlzLiNzdGF0ZSA9IHBhcnNlclN0YXRlcy5SRUFEX0RBVEFcbiAgICAgIH0gZWxzZSBpZiAodGhpcy4jc3RhdGUgPT09IHBhcnNlclN0YXRlcy5QQVlMT0FETEVOR1RIXzY0KSB7XG4gICAgICAgIGlmICh0aGlzLiNieXRlT2Zmc2V0IDwgOCkge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBidWZmZXIgPSB0aGlzLmNvbnN1bWUoOClcbiAgICAgICAgY29uc3QgdXBwZXIgPSBidWZmZXIucmVhZFVJbnQzMkJFKDApXG5cbiAgICAgICAgLy8gMl4zMSBpcyB0aGUgbWF4aW5pbXVtIGJ5dGVzIGFuIGFycmF5YnVmZmVyIGNhbiBjb250YWluXG4gICAgICAgIC8vIG9uIDMyLWJpdCBzeXN0ZW1zLiBBbHRob3VnaCwgb24gNjQtYml0IHN5c3RlbXMsIHRoaXMgaXNcbiAgICAgICAgLy8gMl41My0xIGJ5dGVzLlxuICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9FcnJvcnMvSW52YWxpZF9hcnJheV9sZW5ndGhcbiAgICAgICAgLy8gaHR0cHM6Ly9zb3VyY2UuY2hyb21pdW0ub3JnL2Nocm9taXVtL2Nocm9taXVtL3NyYy8rL21haW46djgvc3JjL2NvbW1vbi9nbG9iYWxzLmg7ZHJjPTE5NDYyMTJhYzAxMDA2NjhmMTRlYjllMjg0M2JkZDg0NmU1MTBhMWU7YnB2PTE7YnB0PTE7bD0xMjc1XG4gICAgICAgIC8vIGh0dHBzOi8vc291cmNlLmNocm9taXVtLm9yZy9jaHJvbWl1bS9jaHJvbWl1bS9zcmMvKy9tYWluOnY4L3NyYy9vYmplY3RzL2pzLWFycmF5LWJ1ZmZlci5oO2w9MzQ7ZHJjPTE5NDYyMTJhYzAxMDA2NjhmMTRlYjllMjg0M2JkZDg0NmU1MTBhMWVcbiAgICAgICAgaWYgKHVwcGVyID4gMiAqKiAzMSAtIDEpIHtcbiAgICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih0aGlzLndzLCAnUmVjZWl2ZWQgcGF5bG9hZCBsZW5ndGggPiAyXjMxIGJ5dGVzLicpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsb3dlciA9IGJ1ZmZlci5yZWFkVUludDMyQkUoNClcblxuICAgICAgICB0aGlzLiNpbmZvLnBheWxvYWRMZW5ndGggPSAodXBwZXIgPDwgOCkgKyBsb3dlclxuICAgICAgICB0aGlzLiNzdGF0ZSA9IHBhcnNlclN0YXRlcy5SRUFEX0RBVEFcbiAgICAgIH0gZWxzZSBpZiAodGhpcy4jc3RhdGUgPT09IHBhcnNlclN0YXRlcy5SRUFEX0RBVEEpIHtcbiAgICAgICAgaWYgKHRoaXMuI2J5dGVPZmZzZXQgPCB0aGlzLiNpbmZvLnBheWxvYWRMZW5ndGgpIHtcbiAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBzdGlsbCBtb3JlIGRhdGEgaW4gdGhpcyBjaHVuayB0aGF0IG5lZWRzIHRvIGJlIHJlYWRcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuI2J5dGVPZmZzZXQgPj0gdGhpcy4jaW5mby5wYXlsb2FkTGVuZ3RoKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIHNlcnZlciBzZW50IG11bHRpcGxlIGZyYW1lcyBpbiBhIHNpbmdsZSBjaHVua1xuXG4gICAgICAgICAgY29uc3QgYm9keSA9IHRoaXMuY29uc3VtZSh0aGlzLiNpbmZvLnBheWxvYWRMZW5ndGgpXG5cbiAgICAgICAgICB0aGlzLiNmcmFnbWVudHMucHVzaChib2R5KVxuXG4gICAgICAgICAgLy8gSWYgdGhlIGZyYW1lIGlzIHVuZnJhZ21lbnRlZCwgb3IgYSBmcmFnbWVudGVkIGZyYW1lIHdhcyB0ZXJtaW5hdGVkLFxuICAgICAgICAgIC8vIGEgbWVzc2FnZSB3YXMgcmVjZWl2ZWRcbiAgICAgICAgICBpZiAoIXRoaXMuI2luZm8uZnJhZ21lbnRlZCB8fCAodGhpcy4jaW5mby5maW4gJiYgdGhpcy4jaW5mby5vcGNvZGUgPT09IG9wY29kZXMuQ09OVElOVUFUSU9OKSkge1xuICAgICAgICAgICAgY29uc3QgZnVsbE1lc3NhZ2UgPSBCdWZmZXIuY29uY2F0KHRoaXMuI2ZyYWdtZW50cylcblxuICAgICAgICAgICAgd2Vic29ja2V0TWVzc2FnZVJlY2VpdmVkKHRoaXMud3MsIHRoaXMuI2luZm8ub3JpZ2luYWxPcGNvZGUsIGZ1bGxNZXNzYWdlKVxuXG4gICAgICAgICAgICB0aGlzLiNpbmZvID0ge31cbiAgICAgICAgICAgIHRoaXMuI2ZyYWdtZW50cy5sZW5ndGggPSAwXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy4jc3RhdGUgPSBwYXJzZXJTdGF0ZXMuSU5GT1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLiNieXRlT2Zmc2V0ID4gMCkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2soKVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUYWtlIG4gYnl0ZXMgZnJvbSB0aGUgYnVmZmVyZWQgQnVmZmVyc1xuICAgKiBAcGFyYW0ge251bWJlcn0gblxuICAgKiBAcmV0dXJucyB7QnVmZmVyfG51bGx9XG4gICAqL1xuICBjb25zdW1lIChuKSB7XG4gICAgaWYgKG4gPiB0aGlzLiNieXRlT2Zmc2V0KSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0gZWxzZSBpZiAobiA9PT0gMCkge1xuICAgICAgcmV0dXJuIGVtcHR5QnVmZmVyXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuI2J1ZmZlcnNbMF0ubGVuZ3RoID09PSBuKSB7XG4gICAgICB0aGlzLiNieXRlT2Zmc2V0IC09IHRoaXMuI2J1ZmZlcnNbMF0ubGVuZ3RoXG4gICAgICByZXR1cm4gdGhpcy4jYnVmZmVycy5zaGlmdCgpXG4gICAgfVxuXG4gICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKG4pXG4gICAgbGV0IG9mZnNldCA9IDBcblxuICAgIHdoaWxlIChvZmZzZXQgIT09IG4pIHtcbiAgICAgIGNvbnN0IG5leHQgPSB0aGlzLiNidWZmZXJzWzBdXG4gICAgICBjb25zdCB7IGxlbmd0aCB9ID0gbmV4dFxuXG4gICAgICBpZiAobGVuZ3RoICsgb2Zmc2V0ID09PSBuKSB7XG4gICAgICAgIGJ1ZmZlci5zZXQodGhpcy4jYnVmZmVycy5zaGlmdCgpLCBvZmZzZXQpXG4gICAgICAgIGJyZWFrXG4gICAgICB9IGVsc2UgaWYgKGxlbmd0aCArIG9mZnNldCA+IG4pIHtcbiAgICAgICAgYnVmZmVyLnNldChuZXh0LnN1YmFycmF5KDAsIG4gLSBvZmZzZXQpLCBvZmZzZXQpXG4gICAgICAgIHRoaXMuI2J1ZmZlcnNbMF0gPSBuZXh0LnN1YmFycmF5KG4gLSBvZmZzZXQpXG4gICAgICAgIGJyZWFrXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBidWZmZXIuc2V0KHRoaXMuI2J1ZmZlcnMuc2hpZnQoKSwgb2Zmc2V0KVxuICAgICAgICBvZmZzZXQgKz0gbmV4dC5sZW5ndGhcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLiNieXRlT2Zmc2V0IC09IG5cblxuICAgIHJldHVybiBidWZmZXJcbiAgfVxuXG4gIHBhcnNlQ2xvc2VCb2R5IChvbmx5Q29kZSwgZGF0YSkge1xuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NSNzZWN0aW9uLTcuMS41XG4gICAgLyoqIEB0eXBlIHtudW1iZXJ8dW5kZWZpbmVkfSAqL1xuICAgIGxldCBjb2RlXG5cbiAgICBpZiAoZGF0YS5sZW5ndGggPj0gMikge1xuICAgICAgLy8gX1RoZSBXZWJTb2NrZXQgQ29ubmVjdGlvbiBDbG9zZSBDb2RlXyBpc1xuICAgICAgLy8gZGVmaW5lZCBhcyB0aGUgc3RhdHVzIGNvZGUgKFNlY3Rpb24gNy40KSBjb250YWluZWQgaW4gdGhlIGZpcnN0IENsb3NlXG4gICAgICAvLyBjb250cm9sIGZyYW1lIHJlY2VpdmVkIGJ5IHRoZSBhcHBsaWNhdGlvblxuICAgICAgY29kZSA9IGRhdGEucmVhZFVJbnQxNkJFKDApXG4gICAgfVxuXG4gICAgaWYgKG9ubHlDb2RlKSB7XG4gICAgICBpZiAoIWlzVmFsaWRTdGF0dXNDb2RlKGNvZGUpKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7IGNvZGUgfVxuICAgIH1cblxuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NSNzZWN0aW9uLTcuMS42XG4gICAgLyoqIEB0eXBlIHtCdWZmZXJ9ICovXG4gICAgbGV0IHJlYXNvbiA9IGRhdGEuc3ViYXJyYXkoMilcblxuICAgIC8vIFJlbW92ZSBCT01cbiAgICBpZiAocmVhc29uWzBdID09PSAweEVGICYmIHJlYXNvblsxXSA9PT0gMHhCQiAmJiByZWFzb25bMl0gPT09IDB4QkYpIHtcbiAgICAgIHJlYXNvbiA9IHJlYXNvbi5zdWJhcnJheSgzKVxuICAgIH1cblxuICAgIGlmIChjb2RlICE9PSB1bmRlZmluZWQgJiYgIWlzVmFsaWRTdGF0dXNDb2RlKGNvZGUpKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAvLyBUT0RPOiBvcHRpbWl6ZSB0aGlzXG4gICAgICByZWFzb24gPSBuZXcgVGV4dERlY29kZXIoJ3V0Zi04JywgeyBmYXRhbDogdHJ1ZSB9KS5kZWNvZGUocmVhc29uKVxuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICByZXR1cm4geyBjb2RlLCByZWFzb24gfVxuICB9XG5cbiAgZ2V0IGNsb3NpbmdJbmZvICgpIHtcbiAgICByZXR1cm4gdGhpcy4jaW5mby5jbG9zZUluZm9cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQnl0ZVBhcnNlclxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3dlYmlkbCcpXG5jb25zdCB7IERPTUV4Y2VwdGlvbiB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvY29uc3RhbnRzJylcbmNvbnN0IHsgVVJMU2VyaWFsaXplciB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvZGF0YVVSTCcpXG5jb25zdCB7IGdldEdsb2JhbE9yaWdpbiB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvZ2xvYmFsJylcbmNvbnN0IHsgc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycywgc3RhdGVzLCBvcGNvZGVzLCBlbXB0eUJ1ZmZlciB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3Qge1xuICBrV2ViU29ja2V0VVJMLFxuICBrUmVhZHlTdGF0ZSxcbiAga0NvbnRyb2xsZXIsXG4gIGtCaW5hcnlUeXBlLFxuICBrUmVzcG9uc2UsXG4gIGtTZW50Q2xvc2UsXG4gIGtCeXRlUGFyc2VyXG59ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgaXNFc3RhYmxpc2hlZCwgaXNDbG9zaW5nLCBpc1ZhbGlkU3VicHJvdG9jb2wsIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uLCBmaXJlRXZlbnQgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IGVzdGFibGlzaFdlYlNvY2tldENvbm5lY3Rpb24gfSA9IHJlcXVpcmUoJy4vY29ubmVjdGlvbicpXG5jb25zdCB7IFdlYnNvY2tldEZyYW1lU2VuZCB9ID0gcmVxdWlyZSgnLi9mcmFtZScpXG5jb25zdCB7IEJ5dGVQYXJzZXIgfSA9IHJlcXVpcmUoJy4vcmVjZWl2ZXInKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5LCBpc0Jsb2JMaWtlIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBnZXRHbG9iYWxEaXNwYXRjaGVyIH0gPSByZXF1aXJlKCcuLi9nbG9iYWwnKVxuY29uc3QgeyB0eXBlcyB9ID0gcmVxdWlyZSgndXRpbCcpXG5cbmxldCBleHBlcmltZW50YWxXYXJuZWQgPSBmYWxzZVxuXG4vLyBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNpbnRlcmZhY2UtZGVmaW5pdGlvblxuY2xhc3MgV2ViU29ja2V0IGV4dGVuZHMgRXZlbnRUYXJnZXQge1xuICAjZXZlbnRzID0ge1xuICAgIG9wZW46IG51bGwsXG4gICAgZXJyb3I6IG51bGwsXG4gICAgY2xvc2U6IG51bGwsXG4gICAgbWVzc2FnZTogbnVsbFxuICB9XG5cbiAgI2J1ZmZlcmVkQW1vdW50ID0gMFxuICAjcHJvdG9jb2wgPSAnJ1xuICAjZXh0ZW5zaW9ucyA9ICcnXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAgICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IHByb3RvY29sc1xuICAgKi9cbiAgY29uc3RydWN0b3IgKHVybCwgcHJvdG9jb2xzID0gW10pIHtcbiAgICBzdXBlcigpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnV2ViU29ja2V0IGNvbnN0cnVjdG9yJyB9KVxuXG4gICAgaWYgKCFleHBlcmltZW50YWxXYXJuZWQpIHtcbiAgICAgIGV4cGVyaW1lbnRhbFdhcm5lZCA9IHRydWVcbiAgICAgIHByb2Nlc3MuZW1pdFdhcm5pbmcoJ1dlYlNvY2tldHMgYXJlIGV4cGVyaW1lbnRhbCwgZXhwZWN0IHRoZW0gdG8gY2hhbmdlIGF0IGFueSB0aW1lLicsIHtcbiAgICAgICAgY29kZTogJ1VORElDSS1XUydcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgY29uc3Qgb3B0aW9ucyA9IHdlYmlkbC5jb252ZXJ0ZXJzWydET01TdHJpbmcgb3Igc2VxdWVuY2U8RE9NU3RyaW5nPiBvciBXZWJTb2NrZXRJbml0J10ocHJvdG9jb2xzKVxuXG4gICAgdXJsID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKHVybClcbiAgICBwcm90b2NvbHMgPSBvcHRpb25zLnByb3RvY29sc1xuXG4gICAgLy8gMS4gTGV0IGJhc2VVUkwgYmUgdGhpcydzIHJlbGV2YW50IHNldHRpbmdzIG9iamVjdCdzIEFQSSBiYXNlIFVSTC5cbiAgICBjb25zdCBiYXNlVVJMID0gZ2V0R2xvYmFsT3JpZ2luKClcblxuICAgIC8vIDEuIExldCB1cmxSZWNvcmQgYmUgdGhlIHJlc3VsdCBvZiBhcHBseWluZyB0aGUgVVJMIHBhcnNlciB0byB1cmwgd2l0aCBiYXNlVVJMLlxuICAgIGxldCB1cmxSZWNvcmRcblxuICAgIHRyeSB7XG4gICAgICB1cmxSZWNvcmQgPSBuZXcgVVJMKHVybCwgYmFzZVVSTClcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyAzLiBJZiB1cmxSZWNvcmQgaXMgZmFpbHVyZSwgdGhlbiB0aHJvdyBhIFwiU3ludGF4RXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKGUsICdTeW50YXhFcnJvcicpXG4gICAgfVxuXG4gICAgLy8gNC4gSWYgdXJsUmVjb3Jk4oCZcyBzY2hlbWUgaXMgXCJodHRwXCIsIHRoZW4gc2V0IHVybFJlY29yZOKAmXMgc2NoZW1lIHRvIFwid3NcIi5cbiAgICBpZiAodXJsUmVjb3JkLnByb3RvY29sID09PSAnaHR0cDonKSB7XG4gICAgICB1cmxSZWNvcmQucHJvdG9jb2wgPSAnd3M6J1xuICAgIH0gZWxzZSBpZiAodXJsUmVjb3JkLnByb3RvY29sID09PSAnaHR0cHM6Jykge1xuICAgICAgLy8gNS4gT3RoZXJ3aXNlLCBpZiB1cmxSZWNvcmTigJlzIHNjaGVtZSBpcyBcImh0dHBzXCIsIHNldCB1cmxSZWNvcmTigJlzIHNjaGVtZSB0byBcIndzc1wiLlxuICAgICAgdXJsUmVjb3JkLnByb3RvY29sID0gJ3dzczonXG4gICAgfVxuXG4gICAgLy8gNi4gSWYgdXJsUmVjb3Jk4oCZcyBzY2hlbWUgaXMgbm90IFwid3NcIiBvciBcIndzc1wiLCB0aGVuIHRocm93IGEgXCJTeW50YXhFcnJvclwiIERPTUV4Y2VwdGlvbi5cbiAgICBpZiAodXJsUmVjb3JkLnByb3RvY29sICE9PSAnd3M6JyAmJiB1cmxSZWNvcmQucHJvdG9jb2wgIT09ICd3c3M6Jykge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihcbiAgICAgICAgYEV4cGVjdGVkIGEgd3M6IG9yIHdzczogcHJvdG9jb2wsIGdvdCAke3VybFJlY29yZC5wcm90b2NvbH1gLFxuICAgICAgICAnU3ludGF4RXJyb3InXG4gICAgICApXG4gICAgfVxuXG4gICAgLy8gNy4gSWYgdXJsUmVjb3Jk4oCZcyBmcmFnbWVudCBpcyBub24tbnVsbCwgdGhlbiB0aHJvdyBhIFwiU3ludGF4RXJyb3JcIlxuICAgIC8vICAgIERPTUV4Y2VwdGlvbi5cbiAgICBpZiAodXJsUmVjb3JkLmhhc2ggfHwgdXJsUmVjb3JkLmhyZWYuZW5kc1dpdGgoJyMnKSkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignR290IGZyYWdtZW50JywgJ1N5bnRheEVycm9yJylcbiAgICB9XG5cbiAgICAvLyA4LiBJZiBwcm90b2NvbHMgaXMgYSBzdHJpbmcsIHNldCBwcm90b2NvbHMgdG8gYSBzZXF1ZW5jZSBjb25zaXN0aW5nXG4gICAgLy8gICAgb2YganVzdCB0aGF0IHN0cmluZy5cbiAgICBpZiAodHlwZW9mIHByb3RvY29scyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHByb3RvY29scyA9IFtwcm90b2NvbHNdXG4gICAgfVxuXG4gICAgLy8gOS4gSWYgYW55IG9mIHRoZSB2YWx1ZXMgaW4gcHJvdG9jb2xzIG9jY3VyIG1vcmUgdGhhbiBvbmNlIG9yIG90aGVyd2lzZVxuICAgIC8vICAgIGZhaWwgdG8gbWF0Y2ggdGhlIHJlcXVpcmVtZW50cyBmb3IgZWxlbWVudHMgdGhhdCBjb21wcmlzZSB0aGUgdmFsdWVcbiAgICAvLyAgICBvZiBgU2VjLVdlYlNvY2tldC1Qcm90b2NvbGAgZmllbGRzIGFzIGRlZmluZWQgYnkgVGhlIFdlYlNvY2tldFxuICAgIC8vICAgIHByb3RvY29sLCB0aGVuIHRocm93IGEgXCJTeW50YXhFcnJvclwiIERPTUV4Y2VwdGlvbi5cbiAgICBpZiAocHJvdG9jb2xzLmxlbmd0aCAhPT0gbmV3IFNldChwcm90b2NvbHMubWFwKHAgPT4gcC50b0xvd2VyQ2FzZSgpKSkuc2l6ZSkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignSW52YWxpZCBTZWMtV2ViU29ja2V0LVByb3RvY29sIHZhbHVlJywgJ1N5bnRheEVycm9yJylcbiAgICB9XG5cbiAgICBpZiAocHJvdG9jb2xzLmxlbmd0aCA+IDAgJiYgIXByb3RvY29scy5ldmVyeShwID0+IGlzVmFsaWRTdWJwcm90b2NvbChwKSkpIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oJ0ludmFsaWQgU2VjLVdlYlNvY2tldC1Qcm90b2NvbCB2YWx1ZScsICdTeW50YXhFcnJvcicpXG4gICAgfVxuXG4gICAgLy8gMTAuIFNldCB0aGlzJ3MgdXJsIHRvIHVybFJlY29yZC5cbiAgICB0aGlzW2tXZWJTb2NrZXRVUkxdID0gbmV3IFVSTCh1cmxSZWNvcmQuaHJlZilcblxuICAgIC8vIDExLiBMZXQgY2xpZW50IGJlIHRoaXMncyByZWxldmFudCBzZXR0aW5ncyBvYmplY3QuXG5cbiAgICAvLyAxMi4gUnVuIHRoaXMgc3RlcCBpbiBwYXJhbGxlbDpcblxuICAgIC8vICAgIDEuIEVzdGFibGlzaCBhIFdlYlNvY2tldCBjb25uZWN0aW9uIGdpdmVuIHVybFJlY29yZCwgcHJvdG9jb2xzLFxuICAgIC8vICAgICAgIGFuZCBjbGllbnQuXG4gICAgdGhpc1trQ29udHJvbGxlcl0gPSBlc3RhYmxpc2hXZWJTb2NrZXRDb25uZWN0aW9uKFxuICAgICAgdXJsUmVjb3JkLFxuICAgICAgcHJvdG9jb2xzLFxuICAgICAgdGhpcyxcbiAgICAgIChyZXNwb25zZSkgPT4gdGhpcy4jb25Db25uZWN0aW9uRXN0YWJsaXNoZWQocmVzcG9uc2UpLFxuICAgICAgb3B0aW9uc1xuICAgIClcblxuICAgIC8vIEVhY2ggV2ViU29ja2V0IG9iamVjdCBoYXMgYW4gYXNzb2NpYXRlZCByZWFkeSBzdGF0ZSwgd2hpY2ggaXMgYVxuICAgIC8vIG51bWJlciByZXByZXNlbnRpbmcgdGhlIHN0YXRlIG9mIHRoZSBjb25uZWN0aW9uLiBJbml0aWFsbHkgaXQgbXVzdFxuICAgIC8vIGJlIENPTk5FQ1RJTkcgKDApLlxuICAgIHRoaXNba1JlYWR5U3RhdGVdID0gV2ViU29ja2V0LkNPTk5FQ1RJTkdcblxuICAgIC8vIFRoZSBleHRlbnNpb25zIGF0dHJpYnV0ZSBtdXN0IGluaXRpYWxseSByZXR1cm4gdGhlIGVtcHR5IHN0cmluZy5cblxuICAgIC8vIFRoZSBwcm90b2NvbCBhdHRyaWJ1dGUgbXVzdCBpbml0aWFsbHkgcmV0dXJuIHRoZSBlbXB0eSBzdHJpbmcuXG5cbiAgICAvLyBFYWNoIFdlYlNvY2tldCBvYmplY3QgaGFzIGFuIGFzc29jaWF0ZWQgYmluYXJ5IHR5cGUsIHdoaWNoIGlzIGFcbiAgICAvLyBCaW5hcnlUeXBlLiBJbml0aWFsbHkgaXQgbXVzdCBiZSBcImJsb2JcIi5cbiAgICB0aGlzW2tCaW5hcnlUeXBlXSA9ICdibG9iJ1xuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZG9tLXdlYnNvY2tldC1jbG9zZVxuICAgKiBAcGFyYW0ge251bWJlcnx1bmRlZmluZWR9IGNvZGVcbiAgICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSByZWFzb25cbiAgICovXG4gIGNsb3NlIChjb2RlID0gdW5kZWZpbmVkLCByZWFzb24gPSB1bmRlZmluZWQpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICBpZiAoY29kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb2RlID0gd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIHNob3J0J10oY29kZSwgeyBjbGFtcDogdHJ1ZSB9KVxuICAgIH1cblxuICAgIGlmIChyZWFzb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVhc29uID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKHJlYXNvbilcbiAgICB9XG5cbiAgICAvLyAxLiBJZiBjb2RlIGlzIHByZXNlbnQsIGJ1dCBpcyBuZWl0aGVyIGFuIGludGVnZXIgZXF1YWwgdG8gMTAwMCBub3IgYW5cbiAgICAvLyAgICBpbnRlZ2VyIGluIHRoZSByYW5nZSAzMDAwIHRvIDQ5OTksIGluY2x1c2l2ZSwgdGhyb3cgYW5cbiAgICAvLyAgICBcIkludmFsaWRBY2Nlc3NFcnJvclwiIERPTUV4Y2VwdGlvbi5cbiAgICBpZiAoY29kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoY29kZSAhPT0gMTAwMCAmJiAoY29kZSA8IDMwMDAgfHwgY29kZSA+IDQ5OTkpKSB7XG4gICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oJ2ludmFsaWQgY29kZScsICdJbnZhbGlkQWNjZXNzRXJyb3InKVxuICAgICAgfVxuICAgIH1cblxuICAgIGxldCByZWFzb25CeXRlTGVuZ3RoID0gMFxuXG4gICAgLy8gMi4gSWYgcmVhc29uIGlzIHByZXNlbnQsIHRoZW4gcnVuIHRoZXNlIHN1YnN0ZXBzOlxuICAgIGlmIChyZWFzb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gMS4gTGV0IHJlYXNvbkJ5dGVzIGJlIHRoZSByZXN1bHQgb2YgZW5jb2RpbmcgcmVhc29uLlxuICAgICAgLy8gMi4gSWYgcmVhc29uQnl0ZXMgaXMgbG9uZ2VyIHRoYW4gMTIzIGJ5dGVzLCB0aGVuIHRocm93IGFcbiAgICAgIC8vICAgIFwiU3ludGF4RXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgICByZWFzb25CeXRlTGVuZ3RoID0gQnVmZmVyLmJ5dGVMZW5ndGgocmVhc29uKVxuXG4gICAgICBpZiAocmVhc29uQnl0ZUxlbmd0aCA+IDEyMykge1xuICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKFxuICAgICAgICAgIGBSZWFzb24gbXVzdCBiZSBsZXNzIHRoYW4gMTIzIGJ5dGVzOyByZWNlaXZlZCAke3JlYXNvbkJ5dGVMZW5ndGh9YCxcbiAgICAgICAgICAnU3ludGF4RXJyb3InXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAzLiBSdW4gdGhlIGZpcnN0IG1hdGNoaW5nIHN0ZXBzIGZyb20gdGhlIGZvbGxvd2luZyBsaXN0OlxuICAgIGlmICh0aGlzW2tSZWFkeVN0YXRlXSA9PT0gV2ViU29ja2V0LkNMT1NJTkcgfHwgdGhpc1trUmVhZHlTdGF0ZV0gPT09IFdlYlNvY2tldC5DTE9TRUQpIHtcbiAgICAgIC8vIElmIHRoaXMncyByZWFkeSBzdGF0ZSBpcyBDTE9TSU5HICgyKSBvciBDTE9TRUQgKDMpXG4gICAgICAvLyBEbyBub3RoaW5nLlxuICAgIH0gZWxzZSBpZiAoIWlzRXN0YWJsaXNoZWQodGhpcykpIHtcbiAgICAgIC8vIElmIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBub3QgeWV0IGVzdGFibGlzaGVkXG4gICAgICAvLyBGYWlsIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBhbmQgc2V0IHRoaXMncyByZWFkeSBzdGF0ZVxuICAgICAgLy8gdG8gQ0xPU0lORyAoMikuXG4gICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih0aGlzLCAnQ29ubmVjdGlvbiB3YXMgY2xvc2VkIGJlZm9yZSBpdCB3YXMgZXN0YWJsaXNoZWQuJylcbiAgICAgIHRoaXNba1JlYWR5U3RhdGVdID0gV2ViU29ja2V0LkNMT1NJTkdcbiAgICB9IGVsc2UgaWYgKCFpc0Nsb3NpbmcodGhpcykpIHtcbiAgICAgIC8vIElmIHRoZSBXZWJTb2NrZXQgY2xvc2luZyBoYW5kc2hha2UgaGFzIG5vdCB5ZXQgYmVlbiBzdGFydGVkXG4gICAgICAvLyBTdGFydCB0aGUgV2ViU29ja2V0IGNsb3NpbmcgaGFuZHNoYWtlIGFuZCBzZXQgdGhpcydzIHJlYWR5XG4gICAgICAvLyBzdGF0ZSB0byBDTE9TSU5HICgyKS5cbiAgICAgIC8vIC0gSWYgbmVpdGhlciBjb2RlIG5vciByZWFzb24gaXMgcHJlc2VudCwgdGhlIFdlYlNvY2tldCBDbG9zZVxuICAgICAgLy8gICBtZXNzYWdlIG11c3Qgbm90IGhhdmUgYSBib2R5LlxuICAgICAgLy8gLSBJZiBjb2RlIGlzIHByZXNlbnQsIHRoZW4gdGhlIHN0YXR1cyBjb2RlIHRvIHVzZSBpbiB0aGVcbiAgICAgIC8vICAgV2ViU29ja2V0IENsb3NlIG1lc3NhZ2UgbXVzdCBiZSB0aGUgaW50ZWdlciBnaXZlbiBieSBjb2RlLlxuICAgICAgLy8gLSBJZiByZWFzb24gaXMgYWxzbyBwcmVzZW50LCB0aGVuIHJlYXNvbkJ5dGVzIG11c3QgYmVcbiAgICAgIC8vICAgcHJvdmlkZWQgaW4gdGhlIENsb3NlIG1lc3NhZ2UgYWZ0ZXIgdGhlIHN0YXR1cyBjb2RlLlxuXG4gICAgICBjb25zdCBmcmFtZSA9IG5ldyBXZWJzb2NrZXRGcmFtZVNlbmQoKVxuXG4gICAgICAvLyBJZiBuZWl0aGVyIGNvZGUgbm9yIHJlYXNvbiBpcyBwcmVzZW50LCB0aGUgV2ViU29ja2V0IENsb3NlXG4gICAgICAvLyBtZXNzYWdlIG11c3Qgbm90IGhhdmUgYSBib2R5LlxuXG4gICAgICAvLyBJZiBjb2RlIGlzIHByZXNlbnQsIHRoZW4gdGhlIHN0YXR1cyBjb2RlIHRvIHVzZSBpbiB0aGVcbiAgICAgIC8vIFdlYlNvY2tldCBDbG9zZSBtZXNzYWdlIG11c3QgYmUgdGhlIGludGVnZXIgZ2l2ZW4gYnkgY29kZS5cbiAgICAgIGlmIChjb2RlICE9PSB1bmRlZmluZWQgJiYgcmVhc29uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZnJhbWUuZnJhbWVEYXRhID0gQnVmZmVyLmFsbG9jVW5zYWZlKDIpXG4gICAgICAgIGZyYW1lLmZyYW1lRGF0YS53cml0ZVVJbnQxNkJFKGNvZGUsIDApXG4gICAgICB9IGVsc2UgaWYgKGNvZGUgIT09IHVuZGVmaW5lZCAmJiByZWFzb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBJZiByZWFzb24gaXMgYWxzbyBwcmVzZW50LCB0aGVuIHJlYXNvbkJ5dGVzIG11c3QgYmVcbiAgICAgICAgLy8gcHJvdmlkZWQgaW4gdGhlIENsb3NlIG1lc3NhZ2UgYWZ0ZXIgdGhlIHN0YXR1cyBjb2RlLlxuICAgICAgICBmcmFtZS5mcmFtZURhdGEgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMiArIHJlYXNvbkJ5dGVMZW5ndGgpXG4gICAgICAgIGZyYW1lLmZyYW1lRGF0YS53cml0ZVVJbnQxNkJFKGNvZGUsIDApXG4gICAgICAgIC8vIHRoZSBib2R5IE1BWSBjb250YWluIFVURi04LWVuY29kZWQgZGF0YSB3aXRoIHZhbHVlIC9yZWFzb24vXG4gICAgICAgIGZyYW1lLmZyYW1lRGF0YS53cml0ZShyZWFzb24sIDIsICd1dGYtOCcpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmcmFtZS5mcmFtZURhdGEgPSBlbXB0eUJ1ZmZlclxuICAgICAgfVxuXG4gICAgICAvKiogQHR5cGUge2ltcG9ydCgnc3RyZWFtJykuRHVwbGV4fSAqL1xuICAgICAgY29uc3Qgc29ja2V0ID0gdGhpc1trUmVzcG9uc2VdLnNvY2tldFxuXG4gICAgICBzb2NrZXQud3JpdGUoZnJhbWUuY3JlYXRlRnJhbWUob3Bjb2Rlcy5DTE9TRSksIChlcnIpID0+IHtcbiAgICAgICAgaWYgKCFlcnIpIHtcbiAgICAgICAgICB0aGlzW2tTZW50Q2xvc2VdID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgICAvLyBVcG9uIGVpdGhlciBzZW5kaW5nIG9yIHJlY2VpdmluZyBhIENsb3NlIGNvbnRyb2wgZnJhbWUsIGl0IGlzIHNhaWRcbiAgICAgIC8vIHRoYXQgX1RoZSBXZWJTb2NrZXQgQ2xvc2luZyBIYW5kc2hha2UgaXMgU3RhcnRlZF8gYW5kIHRoYXQgdGhlXG4gICAgICAvLyBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBpbiB0aGUgQ0xPU0lORyBzdGF0ZS5cbiAgICAgIHRoaXNba1JlYWR5U3RhdGVdID0gc3RhdGVzLkNMT1NJTkdcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT3RoZXJ3aXNlXG4gICAgICAvLyBTZXQgdGhpcydzIHJlYWR5IHN0YXRlIHRvIENMT1NJTkcgKDIpLlxuICAgICAgdGhpc1trUmVhZHlTdGF0ZV0gPSBXZWJTb2NrZXQuQ0xPU0lOR1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2RvbS13ZWJzb2NrZXQtc2VuZFxuICAgKiBAcGFyYW0ge05vZGVKUy5UeXBlZEFycmF5fEFycmF5QnVmZmVyfEJsb2J8c3RyaW5nfSBkYXRhXG4gICAqL1xuICBzZW5kIChkYXRhKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ1dlYlNvY2tldC5zZW5kJyB9KVxuXG4gICAgZGF0YSA9IHdlYmlkbC5jb252ZXJ0ZXJzLldlYlNvY2tldFNlbmREYXRhKGRhdGEpXG5cbiAgICAvLyAxLiBJZiB0aGlzJ3MgcmVhZHkgc3RhdGUgaXMgQ09OTkVDVElORywgdGhlbiB0aHJvdyBhblxuICAgIC8vICAgIFwiSW52YWxpZFN0YXRlRXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgaWYgKHRoaXNba1JlYWR5U3RhdGVdID09PSBXZWJTb2NrZXQuQ09OTkVDVElORykge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignU2VudCBiZWZvcmUgY29ubmVjdGVkLicsICdJbnZhbGlkU3RhdGVFcnJvcicpXG4gICAgfVxuXG4gICAgLy8gMi4gUnVuIHRoZSBhcHByb3ByaWF0ZSBzZXQgb2Ygc3RlcHMgZnJvbSB0aGUgZm9sbG93aW5nIGxpc3Q6XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tNi4xXG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tNS4yXG5cbiAgICBpZiAoIWlzRXN0YWJsaXNoZWQodGhpcykgfHwgaXNDbG9zaW5nKHRoaXMpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvKiogQHR5cGUge2ltcG9ydCgnc3RyZWFtJykuRHVwbGV4fSAqL1xuICAgIGNvbnN0IHNvY2tldCA9IHRoaXNba1Jlc3BvbnNlXS5zb2NrZXRcblxuICAgIC8vIElmIGRhdGEgaXMgYSBzdHJpbmdcbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBJZiB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQgYW5kIHRoZSBXZWJTb2NrZXRcbiAgICAgIC8vIGNsb3NpbmcgaGFuZHNoYWtlIGhhcyBub3QgeWV0IHN0YXJ0ZWQsIHRoZW4gdGhlIHVzZXIgYWdlbnRcbiAgICAgIC8vIG11c3Qgc2VuZCBhIFdlYlNvY2tldCBNZXNzYWdlIGNvbXByaXNlZCBvZiB0aGUgZGF0YSBhcmd1bWVudFxuICAgICAgLy8gdXNpbmcgYSB0ZXh0IGZyYW1lIG9wY29kZTsgaWYgdGhlIGRhdGEgY2Fubm90IGJlIHNlbnQsIGUuZy5cbiAgICAgIC8vIGJlY2F1c2UgaXQgd291bGQgbmVlZCB0byBiZSBidWZmZXJlZCBidXQgdGhlIGJ1ZmZlciBpcyBmdWxsLFxuICAgICAgLy8gdGhlIHVzZXIgYWdlbnQgbXVzdCBmbGFnIHRoZSBXZWJTb2NrZXQgYXMgZnVsbCBhbmQgdGhlbiBjbG9zZVxuICAgICAgLy8gdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uLiBBbnkgaW52b2NhdGlvbiBvZiB0aGlzIG1ldGhvZCB3aXRoIGFcbiAgICAgIC8vIHN0cmluZyBhcmd1bWVudCB0aGF0IGRvZXMgbm90IHRocm93IGFuIGV4Y2VwdGlvbiBtdXN0IGluY3JlYXNlXG4gICAgICAvLyB0aGUgYnVmZmVyZWRBbW91bnQgYXR0cmlidXRlIGJ5IHRoZSBudW1iZXIgb2YgYnl0ZXMgbmVlZGVkIHRvXG4gICAgICAvLyBleHByZXNzIHRoZSBhcmd1bWVudCBhcyBVVEYtOC5cblxuICAgICAgY29uc3QgdmFsdWUgPSBCdWZmZXIuZnJvbShkYXRhKVxuICAgICAgY29uc3QgZnJhbWUgPSBuZXcgV2Vic29ja2V0RnJhbWVTZW5kKHZhbHVlKVxuICAgICAgY29uc3QgYnVmZmVyID0gZnJhbWUuY3JlYXRlRnJhbWUob3Bjb2Rlcy5URVhUKVxuXG4gICAgICB0aGlzLiNidWZmZXJlZEFtb3VudCArPSB2YWx1ZS5ieXRlTGVuZ3RoXG4gICAgICBzb2NrZXQud3JpdGUoYnVmZmVyLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuI2J1ZmZlcmVkQW1vdW50IC09IHZhbHVlLmJ5dGVMZW5ndGhcbiAgICAgIH0pXG4gICAgfSBlbHNlIGlmICh0eXBlcy5pc0FycmF5QnVmZmVyKGRhdGEpKSB7XG4gICAgICAvLyBJZiB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQsIGFuZCB0aGUgV2ViU29ja2V0XG4gICAgICAvLyBjbG9zaW5nIGhhbmRzaGFrZSBoYXMgbm90IHlldCBzdGFydGVkLCB0aGVuIHRoZSB1c2VyIGFnZW50IG11c3RcbiAgICAgIC8vIHNlbmQgYSBXZWJTb2NrZXQgTWVzc2FnZSBjb21wcmlzZWQgb2YgZGF0YSB1c2luZyBhIGJpbmFyeSBmcmFtZVxuICAgICAgLy8gb3Bjb2RlOyBpZiB0aGUgZGF0YSBjYW5ub3QgYmUgc2VudCwgZS5nLiBiZWNhdXNlIGl0IHdvdWxkIG5lZWRcbiAgICAgIC8vIHRvIGJlIGJ1ZmZlcmVkIGJ1dCB0aGUgYnVmZmVyIGlzIGZ1bGwsIHRoZSB1c2VyIGFnZW50IG11c3QgZmxhZ1xuICAgICAgLy8gdGhlIFdlYlNvY2tldCBhcyBmdWxsIGFuZCB0aGVuIGNsb3NlIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbi5cbiAgICAgIC8vIFRoZSBkYXRhIHRvIGJlIHNlbnQgaXMgdGhlIGRhdGEgc3RvcmVkIGluIHRoZSBidWZmZXIgZGVzY3JpYmVkXG4gICAgICAvLyBieSB0aGUgQXJyYXlCdWZmZXIgb2JqZWN0LiBBbnkgaW52b2NhdGlvbiBvZiB0aGlzIG1ldGhvZCB3aXRoIGFuXG4gICAgICAvLyBBcnJheUJ1ZmZlciBhcmd1bWVudCB0aGF0IGRvZXMgbm90IHRocm93IGFuIGV4Y2VwdGlvbiBtdXN0XG4gICAgICAvLyBpbmNyZWFzZSB0aGUgYnVmZmVyZWRBbW91bnQgYXR0cmlidXRlIGJ5IHRoZSBsZW5ndGggb2YgdGhlXG4gICAgICAvLyBBcnJheUJ1ZmZlciBpbiBieXRlcy5cblxuICAgICAgY29uc3QgdmFsdWUgPSBCdWZmZXIuZnJvbShkYXRhKVxuICAgICAgY29uc3QgZnJhbWUgPSBuZXcgV2Vic29ja2V0RnJhbWVTZW5kKHZhbHVlKVxuICAgICAgY29uc3QgYnVmZmVyID0gZnJhbWUuY3JlYXRlRnJhbWUob3Bjb2Rlcy5CSU5BUlkpXG5cbiAgICAgIHRoaXMuI2J1ZmZlcmVkQW1vdW50ICs9IHZhbHVlLmJ5dGVMZW5ndGhcbiAgICAgIHNvY2tldC53cml0ZShidWZmZXIsICgpID0+IHtcbiAgICAgICAgdGhpcy4jYnVmZmVyZWRBbW91bnQgLT0gdmFsdWUuYnl0ZUxlbmd0aFxuICAgICAgfSlcbiAgICB9IGVsc2UgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhkYXRhKSkge1xuICAgICAgLy8gSWYgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkLCBhbmQgdGhlIFdlYlNvY2tldFxuICAgICAgLy8gY2xvc2luZyBoYW5kc2hha2UgaGFzIG5vdCB5ZXQgc3RhcnRlZCwgdGhlbiB0aGUgdXNlciBhZ2VudCBtdXN0XG4gICAgICAvLyBzZW5kIGEgV2ViU29ja2V0IE1lc3NhZ2UgY29tcHJpc2VkIG9mIGRhdGEgdXNpbmcgYSBiaW5hcnkgZnJhbWVcbiAgICAgIC8vIG9wY29kZTsgaWYgdGhlIGRhdGEgY2Fubm90IGJlIHNlbnQsIGUuZy4gYmVjYXVzZSBpdCB3b3VsZCBuZWVkIHRvXG4gICAgICAvLyBiZSBidWZmZXJlZCBidXQgdGhlIGJ1ZmZlciBpcyBmdWxsLCB0aGUgdXNlciBhZ2VudCBtdXN0IGZsYWcgdGhlXG4gICAgICAvLyBXZWJTb2NrZXQgYXMgZnVsbCBhbmQgdGhlbiBjbG9zZSB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24uIFRoZVxuICAgICAgLy8gZGF0YSB0byBiZSBzZW50IGlzIHRoZSBkYXRhIHN0b3JlZCBpbiB0aGUgc2VjdGlvbiBvZiB0aGUgYnVmZmVyXG4gICAgICAvLyBkZXNjcmliZWQgYnkgdGhlIEFycmF5QnVmZmVyIG9iamVjdCB0aGF0IGRhdGEgcmVmZXJlbmNlcy4gQW55XG4gICAgICAvLyBpbnZvY2F0aW9uIG9mIHRoaXMgbWV0aG9kIHdpdGggdGhpcyBraW5kIG9mIGFyZ3VtZW50IHRoYXQgZG9lc1xuICAgICAgLy8gbm90IHRocm93IGFuIGV4Y2VwdGlvbiBtdXN0IGluY3JlYXNlIHRoZSBidWZmZXJlZEFtb3VudCBhdHRyaWJ1dGVcbiAgICAgIC8vIGJ5IHRoZSBsZW5ndGggb2YgZGF0YeKAmXMgYnVmZmVyIGluIGJ5dGVzLlxuXG4gICAgICBjb25zdCBhYiA9IEJ1ZmZlci5mcm9tKGRhdGEsIGRhdGEuYnl0ZU9mZnNldCwgZGF0YS5ieXRlTGVuZ3RoKVxuXG4gICAgICBjb25zdCBmcmFtZSA9IG5ldyBXZWJzb2NrZXRGcmFtZVNlbmQoYWIpXG4gICAgICBjb25zdCBidWZmZXIgPSBmcmFtZS5jcmVhdGVGcmFtZShvcGNvZGVzLkJJTkFSWSlcblxuICAgICAgdGhpcy4jYnVmZmVyZWRBbW91bnQgKz0gYWIuYnl0ZUxlbmd0aFxuICAgICAgc29ja2V0LndyaXRlKGJ1ZmZlciwgKCkgPT4ge1xuICAgICAgICB0aGlzLiNidWZmZXJlZEFtb3VudCAtPSBhYi5ieXRlTGVuZ3RoXG4gICAgICB9KVxuICAgIH0gZWxzZSBpZiAoaXNCbG9iTGlrZShkYXRhKSkge1xuICAgICAgLy8gSWYgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkLCBhbmQgdGhlIFdlYlNvY2tldFxuICAgICAgLy8gY2xvc2luZyBoYW5kc2hha2UgaGFzIG5vdCB5ZXQgc3RhcnRlZCwgdGhlbiB0aGUgdXNlciBhZ2VudCBtdXN0XG4gICAgICAvLyBzZW5kIGEgV2ViU29ja2V0IE1lc3NhZ2UgY29tcHJpc2VkIG9mIGRhdGEgdXNpbmcgYSBiaW5hcnkgZnJhbWVcbiAgICAgIC8vIG9wY29kZTsgaWYgdGhlIGRhdGEgY2Fubm90IGJlIHNlbnQsIGUuZy4gYmVjYXVzZSBpdCB3b3VsZCBuZWVkIHRvXG4gICAgICAvLyBiZSBidWZmZXJlZCBidXQgdGhlIGJ1ZmZlciBpcyBmdWxsLCB0aGUgdXNlciBhZ2VudCBtdXN0IGZsYWcgdGhlXG4gICAgICAvLyBXZWJTb2NrZXQgYXMgZnVsbCBhbmQgdGhlbiBjbG9zZSB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24uIFRoZSBkYXRhXG4gICAgICAvLyB0byBiZSBzZW50IGlzIHRoZSByYXcgZGF0YSByZXByZXNlbnRlZCBieSB0aGUgQmxvYiBvYmplY3QuIEFueVxuICAgICAgLy8gaW52b2NhdGlvbiBvZiB0aGlzIG1ldGhvZCB3aXRoIGEgQmxvYiBhcmd1bWVudCB0aGF0IGRvZXMgbm90IHRocm93XG4gICAgICAvLyBhbiBleGNlcHRpb24gbXVzdCBpbmNyZWFzZSB0aGUgYnVmZmVyZWRBbW91bnQgYXR0cmlidXRlIGJ5IHRoZSBzaXplXG4gICAgICAvLyBvZiB0aGUgQmxvYiBvYmplY3TigJlzIHJhdyBkYXRhLCBpbiBieXRlcy5cblxuICAgICAgY29uc3QgZnJhbWUgPSBuZXcgV2Vic29ja2V0RnJhbWVTZW5kKClcblxuICAgICAgZGF0YS5hcnJheUJ1ZmZlcigpLnRoZW4oKGFiKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gQnVmZmVyLmZyb20oYWIpXG4gICAgICAgIGZyYW1lLmZyYW1lRGF0YSA9IHZhbHVlXG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IGZyYW1lLmNyZWF0ZUZyYW1lKG9wY29kZXMuQklOQVJZKVxuXG4gICAgICAgIHRoaXMuI2J1ZmZlcmVkQW1vdW50ICs9IHZhbHVlLmJ5dGVMZW5ndGhcbiAgICAgICAgc29ja2V0LndyaXRlKGJ1ZmZlciwgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuI2J1ZmZlcmVkQW1vdW50IC09IHZhbHVlLmJ5dGVMZW5ndGhcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgZ2V0IHJlYWR5U3RhdGUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIC8vIFRoZSByZWFkeVN0YXRlIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXMncyByZWFkeSBzdGF0ZS5cbiAgICByZXR1cm4gdGhpc1trUmVhZHlTdGF0ZV1cbiAgfVxuXG4gIGdldCBidWZmZXJlZEFtb3VudCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgcmV0dXJuIHRoaXMuI2J1ZmZlcmVkQW1vdW50XG4gIH1cblxuICBnZXQgdXJsICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICAvLyBUaGUgdXJsIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXMncyB1cmwsIHNlcmlhbGl6ZWQuXG4gICAgcmV0dXJuIFVSTFNlcmlhbGl6ZXIodGhpc1trV2ViU29ja2V0VVJMXSlcbiAgfVxuXG4gIGdldCBleHRlbnNpb25zICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXh0ZW5zaW9uc1xuICB9XG5cbiAgZ2V0IHByb3RvY29sICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICByZXR1cm4gdGhpcy4jcHJvdG9jb2xcbiAgfVxuXG4gIGdldCBvbm9wZW4gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIHJldHVybiB0aGlzLiNldmVudHMub3BlblxuICB9XG5cbiAgc2V0IG9ub3BlbiAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICBpZiAodGhpcy4jZXZlbnRzLm9wZW4pIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignb3BlbicsIHRoaXMuI2V2ZW50cy5vcGVuKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5vcGVuID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignb3BlbicsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNldmVudHMub3BlbiA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgb25lcnJvciAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50cy5lcnJvclxuICB9XG5cbiAgc2V0IG9uZXJyb3IgKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgaWYgKHRoaXMuI2V2ZW50cy5lcnJvcikge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuI2V2ZW50cy5lcnJvcilcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLiNldmVudHMuZXJyb3IgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNldmVudHMuZXJyb3IgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgZ2V0IG9uY2xvc2UgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIHJldHVybiB0aGlzLiNldmVudHMuY2xvc2VcbiAgfVxuXG4gIHNldCBvbmNsb3NlIChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIGlmICh0aGlzLiNldmVudHMuY2xvc2UpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xvc2UnLCB0aGlzLiNldmVudHMuY2xvc2UpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy4jZXZlbnRzLmNsb3NlID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignY2xvc2UnLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy4jZXZlbnRzLmNsb3NlID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBvbm1lc3NhZ2UgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIHJldHVybiB0aGlzLiNldmVudHMubWVzc2FnZVxuICB9XG5cbiAgc2V0IG9ubWVzc2FnZSAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICBpZiAodGhpcy4jZXZlbnRzLm1lc3NhZ2UpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHRoaXMuI2V2ZW50cy5tZXNzYWdlKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5tZXNzYWdlID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNldmVudHMubWVzc2FnZSA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgYmluYXJ5VHlwZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgcmV0dXJuIHRoaXNba0JpbmFyeVR5cGVdXG4gIH1cblxuICBzZXQgYmluYXJ5VHlwZSAodHlwZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIGlmICh0eXBlICE9PSAnYmxvYicgJiYgdHlwZSAhPT0gJ2FycmF5YnVmZmVyJykge1xuICAgICAgdGhpc1trQmluYXJ5VHlwZV0gPSAnYmxvYidcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trQmluYXJ5VHlwZV0gPSB0eXBlXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZmVlZGJhY2stZnJvbS10aGUtcHJvdG9jb2xcbiAgICovXG4gICNvbkNvbm5lY3Rpb25Fc3RhYmxpc2hlZCAocmVzcG9uc2UpIHtcbiAgICAvLyBwcm9jZXNzUmVzcG9uc2UgaXMgY2FsbGVkIHdoZW4gdGhlIFwicmVzcG9uc2XigJlzIGhlYWRlciBsaXN0IGhhcyBiZWVuIHJlY2VpdmVkIGFuZCBpbml0aWFsaXplZC5cIlxuICAgIC8vIG9uY2UgdGhpcyBoYXBwZW5zLCB0aGUgY29ubmVjdGlvbiBpcyBvcGVuXG4gICAgdGhpc1trUmVzcG9uc2VdID0gcmVzcG9uc2VcblxuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBCeXRlUGFyc2VyKHRoaXMpXG4gICAgcGFyc2VyLm9uKCdkcmFpbicsIGZ1bmN0aW9uIG9uUGFyc2VyRHJhaW4gKCkge1xuICAgICAgdGhpcy53c1trUmVzcG9uc2VdLnNvY2tldC5yZXN1bWUoKVxuICAgIH0pXG5cbiAgICByZXNwb25zZS5zb2NrZXQud3MgPSB0aGlzXG4gICAgdGhpc1trQnl0ZVBhcnNlcl0gPSBwYXJzZXJcblxuICAgIC8vIDEuIENoYW5nZSB0aGUgcmVhZHkgc3RhdGUgdG8gT1BFTiAoMSkuXG4gICAgdGhpc1trUmVhZHlTdGF0ZV0gPSBzdGF0ZXMuT1BFTlxuXG4gICAgLy8gMi4gQ2hhbmdlIHRoZSBleHRlbnNpb25zIGF0dHJpYnV0ZeKAmXMgdmFsdWUgdG8gdGhlIGV4dGVuc2lvbnMgaW4gdXNlLCBpZlxuICAgIC8vICAgIGl0IGlzIG5vdCB0aGUgbnVsbCB2YWx1ZS5cbiAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzY0NTUjc2VjdGlvbi05LjFcbiAgICBjb25zdCBleHRlbnNpb25zID0gcmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdzZWMtd2Vic29ja2V0LWV4dGVuc2lvbnMnKVxuXG4gICAgaWYgKGV4dGVuc2lvbnMgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuI2V4dGVuc2lvbnMgPSBleHRlbnNpb25zXG4gICAgfVxuXG4gICAgLy8gMy4gQ2hhbmdlIHRoZSBwcm90b2NvbCBhdHRyaWJ1dGXigJlzIHZhbHVlIHRvIHRoZSBzdWJwcm90b2NvbCBpbiB1c2UsIGlmXG4gICAgLy8gICAgaXQgaXMgbm90IHRoZSBudWxsIHZhbHVlLlxuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NSNzZWN0aW9uLTEuOVxuICAgIGNvbnN0IHByb3RvY29sID0gcmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdzZWMtd2Vic29ja2V0LXByb3RvY29sJylcblxuICAgIGlmIChwcm90b2NvbCAhPT0gbnVsbCkge1xuICAgICAgdGhpcy4jcHJvdG9jb2wgPSBwcm90b2NvbFxuICAgIH1cblxuICAgIC8vIDQuIEZpcmUgYW4gZXZlbnQgbmFtZWQgb3BlbiBhdCB0aGUgV2ViU29ja2V0IG9iamVjdC5cbiAgICBmaXJlRXZlbnQoJ29wZW4nLCB0aGlzKVxuICB9XG59XG5cbi8vIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2RvbS13ZWJzb2NrZXQtY29ubmVjdGluZ1xuV2ViU29ja2V0LkNPTk5FQ1RJTkcgPSBXZWJTb2NrZXQucHJvdG90eXBlLkNPTk5FQ1RJTkcgPSBzdGF0ZXMuQ09OTkVDVElOR1xuLy8gaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZG9tLXdlYnNvY2tldC1vcGVuXG5XZWJTb2NrZXQuT1BFTiA9IFdlYlNvY2tldC5wcm90b3R5cGUuT1BFTiA9IHN0YXRlcy5PUEVOXG4vLyBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNkb20td2Vic29ja2V0LWNsb3NpbmdcbldlYlNvY2tldC5DTE9TSU5HID0gV2ViU29ja2V0LnByb3RvdHlwZS5DTE9TSU5HID0gc3RhdGVzLkNMT1NJTkdcbi8vIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2RvbS13ZWJzb2NrZXQtY2xvc2VkXG5XZWJTb2NrZXQuQ0xPU0VEID0gV2ViU29ja2V0LnByb3RvdHlwZS5DTE9TRUQgPSBzdGF0ZXMuQ0xPU0VEXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFdlYlNvY2tldC5wcm90b3R5cGUsIHtcbiAgQ09OTkVDVElORzogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgT1BFTjogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgQ0xPU0lORzogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgQ0xPU0VEOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICB1cmw6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlYWR5U3RhdGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGJ1ZmZlcmVkQW1vdW50OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbm9wZW46IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9uZXJyb3I6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9uY2xvc2U6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNsb3NlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbm1lc3NhZ2U6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGJpbmFyeVR5cGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHNlbmQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGV4dGVuc2lvbnM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHByb3RvY29sOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnV2ViU29ja2V0JyxcbiAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH1cbn0pXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFdlYlNvY2tldCwge1xuICBDT05ORUNUSU5HOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBPUEVOOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBDTE9TSU5HOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBDTE9TRUQ6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnNcbn0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxET01TdHJpbmc+J10gPSB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZ1xuKVxuXG53ZWJpZGwuY29udmVydGVyc1snRE9NU3RyaW5nIG9yIHNlcXVlbmNlPERPTVN0cmluZz4nXSA9IGZ1bmN0aW9uIChWKSB7XG4gIGlmICh3ZWJpZGwudXRpbC5UeXBlKFYpID09PSAnT2JqZWN0JyAmJiBTeW1ib2wuaXRlcmF0b3IgaW4gVikge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8RE9NU3RyaW5nPiddKFYpXG4gIH1cblxuICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKFYpXG59XG5cbi8vIFRoaXMgaW1wbGVtZW50cyB0aGUgcHJvcHNhbCBtYWRlIGluIGh0dHBzOi8vZ2l0aHViLmNvbS93aGF0d2cvd2Vic29ja2V0cy9pc3N1ZXMvNDJcbndlYmlkbC5jb252ZXJ0ZXJzLldlYlNvY2tldEluaXQgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIHtcbiAgICBrZXk6ICdwcm90b2NvbHMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ0RPTVN0cmluZyBvciBzZXF1ZW5jZTxET01TdHJpbmc+J10sXG4gICAgZ2V0IGRlZmF1bHRWYWx1ZSAoKSB7XG4gICAgICByZXR1cm4gW11cbiAgICB9XG4gIH0sXG4gIHtcbiAgICBrZXk6ICdkaXNwYXRjaGVyJyxcbiAgICBjb252ZXJ0ZXI6IChWKSA9PiBWLFxuICAgIGdldCBkZWZhdWx0VmFsdWUgKCkge1xuICAgICAgcmV0dXJuIGdldEdsb2JhbERpc3BhdGNoZXIoKVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGtleTogJ2hlYWRlcnMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzLkhlYWRlcnNJbml0KVxuICB9XG5dKVxuXG53ZWJpZGwuY29udmVydGVyc1snRE9NU3RyaW5nIG9yIHNlcXVlbmNlPERPTVN0cmluZz4gb3IgV2ViU29ja2V0SW5pdCddID0gZnVuY3Rpb24gKFYpIHtcbiAgaWYgKHdlYmlkbC51dGlsLlR5cGUoVikgPT09ICdPYmplY3QnICYmICEoU3ltYm9sLml0ZXJhdG9yIGluIFYpKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLldlYlNvY2tldEluaXQoVilcbiAgfVxuXG4gIHJldHVybiB7IHByb3RvY29sczogd2ViaWRsLmNvbnZlcnRlcnNbJ0RPTVN0cmluZyBvciBzZXF1ZW5jZTxET01TdHJpbmc+J10oVikgfVxufVxuXG53ZWJpZGwuY29udmVydGVycy5XZWJTb2NrZXRTZW5kRGF0YSA9IGZ1bmN0aW9uIChWKSB7XG4gIGlmICh3ZWJpZGwudXRpbC5UeXBlKFYpID09PSAnT2JqZWN0Jykge1xuICAgIGlmIChpc0Jsb2JMaWtlKFYpKSB7XG4gICAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuQmxvYihWLCB7IHN0cmljdDogZmFsc2UgfSlcbiAgICB9XG5cbiAgICBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KFYpIHx8IHR5cGVzLmlzQW55QXJyYXlCdWZmZXIoVikpIHtcbiAgICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5CdWZmZXJTb3VyY2UoVilcbiAgICB9XG4gIH1cblxuICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKFYpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBXZWJTb2NrZXRcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IENsaWVudCA9IHJlcXVpcmUoJy4vbGliL2NsaWVudCcpXG5jb25zdCBEaXNwYXRjaGVyID0gcmVxdWlyZSgnLi9saWIvZGlzcGF0Y2hlcicpXG5jb25zdCBlcnJvcnMgPSByZXF1aXJlKCcuL2xpYi9jb3JlL2Vycm9ycycpXG5jb25zdCBQb29sID0gcmVxdWlyZSgnLi9saWIvcG9vbCcpXG5jb25zdCBCYWxhbmNlZFBvb2wgPSByZXF1aXJlKCcuL2xpYi9iYWxhbmNlZC1wb29sJylcbmNvbnN0IEFnZW50ID0gcmVxdWlyZSgnLi9saWIvYWdlbnQnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4vbGliL2NvcmUvdXRpbCcpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gPSBlcnJvcnNcbmNvbnN0IGFwaSA9IHJlcXVpcmUoJy4vbGliL2FwaScpXG5jb25zdCBidWlsZENvbm5lY3RvciA9IHJlcXVpcmUoJy4vbGliL2NvcmUvY29ubmVjdCcpXG5jb25zdCBNb2NrQ2xpZW50ID0gcmVxdWlyZSgnLi9saWIvbW9jay9tb2NrLWNsaWVudCcpXG5jb25zdCBNb2NrQWdlbnQgPSByZXF1aXJlKCcuL2xpYi9tb2NrL21vY2stYWdlbnQnKVxuY29uc3QgTW9ja1Bvb2wgPSByZXF1aXJlKCcuL2xpYi9tb2NrL21vY2stcG9vbCcpXG5jb25zdCBtb2NrRXJyb3JzID0gcmVxdWlyZSgnLi9saWIvbW9jay9tb2NrLWVycm9ycycpXG5jb25zdCBQcm94eUFnZW50ID0gcmVxdWlyZSgnLi9saWIvcHJveHktYWdlbnQnKVxuY29uc3QgUmV0cnlIYW5kbGVyID0gcmVxdWlyZSgnLi9saWIvaGFuZGxlci9SZXRyeUhhbmRsZXInKVxuY29uc3QgeyBnZXRHbG9iYWxEaXNwYXRjaGVyLCBzZXRHbG9iYWxEaXNwYXRjaGVyIH0gPSByZXF1aXJlKCcuL2xpYi9nbG9iYWwnKVxuY29uc3QgRGVjb3JhdG9ySGFuZGxlciA9IHJlcXVpcmUoJy4vbGliL2hhbmRsZXIvRGVjb3JhdG9ySGFuZGxlcicpXG5jb25zdCBSZWRpcmVjdEhhbmRsZXIgPSByZXF1aXJlKCcuL2xpYi9oYW5kbGVyL1JlZGlyZWN0SGFuZGxlcicpXG5jb25zdCBjcmVhdGVSZWRpcmVjdEludGVyY2VwdG9yID0gcmVxdWlyZSgnLi9saWIvaW50ZXJjZXB0b3IvcmVkaXJlY3RJbnRlcmNlcHRvcicpXG5cbmxldCBoYXNDcnlwdG9cbnRyeSB7XG4gIHJlcXVpcmUoJ2NyeXB0bycpXG4gIGhhc0NyeXB0byA9IHRydWVcbn0gY2F0Y2gge1xuICBoYXNDcnlwdG8gPSBmYWxzZVxufVxuXG5PYmplY3QuYXNzaWduKERpc3BhdGNoZXIucHJvdG90eXBlLCBhcGkpXG5cbm1vZHVsZS5leHBvcnRzLkRpc3BhdGNoZXIgPSBEaXNwYXRjaGVyXG5tb2R1bGUuZXhwb3J0cy5DbGllbnQgPSBDbGllbnRcbm1vZHVsZS5leHBvcnRzLlBvb2wgPSBQb29sXG5tb2R1bGUuZXhwb3J0cy5CYWxhbmNlZFBvb2wgPSBCYWxhbmNlZFBvb2xcbm1vZHVsZS5leHBvcnRzLkFnZW50ID0gQWdlbnRcbm1vZHVsZS5leHBvcnRzLlByb3h5QWdlbnQgPSBQcm94eUFnZW50XG5tb2R1bGUuZXhwb3J0cy5SZXRyeUhhbmRsZXIgPSBSZXRyeUhhbmRsZXJcblxubW9kdWxlLmV4cG9ydHMuRGVjb3JhdG9ySGFuZGxlciA9IERlY29yYXRvckhhbmRsZXJcbm1vZHVsZS5leHBvcnRzLlJlZGlyZWN0SGFuZGxlciA9IFJlZGlyZWN0SGFuZGxlclxubW9kdWxlLmV4cG9ydHMuY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvciA9IGNyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3JcblxubW9kdWxlLmV4cG9ydHMuYnVpbGRDb25uZWN0b3IgPSBidWlsZENvbm5lY3RvclxubW9kdWxlLmV4cG9ydHMuZXJyb3JzID0gZXJyb3JzXG5cbmZ1bmN0aW9uIG1ha2VEaXNwYXRjaGVyIChmbikge1xuICByZXR1cm4gKHVybCwgb3B0cywgaGFuZGxlcikgPT4ge1xuICAgIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaGFuZGxlciA9IG9wdHNcbiAgICAgIG9wdHMgPSBudWxsXG4gICAgfVxuXG4gICAgaWYgKCF1cmwgfHwgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnICYmIHR5cGVvZiB1cmwgIT09ICdvYmplY3QnICYmICEodXJsIGluc3RhbmNlb2YgVVJMKSkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCB1cmwnKVxuICAgIH1cblxuICAgIGlmIChvcHRzICE9IG51bGwgJiYgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb3B0cycpXG4gICAgfVxuXG4gICAgaWYgKG9wdHMgJiYgb3B0cy5wYXRoICE9IG51bGwpIHtcbiAgICAgIGlmICh0eXBlb2Ygb3B0cy5wYXRoICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb3B0cy5wYXRoJylcbiAgICAgIH1cblxuICAgICAgbGV0IHBhdGggPSBvcHRzLnBhdGhcbiAgICAgIGlmICghb3B0cy5wYXRoLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgICBwYXRoID0gYC8ke3BhdGh9YFxuICAgICAgfVxuXG4gICAgICB1cmwgPSBuZXcgVVJMKHV0aWwucGFyc2VPcmlnaW4odXJsKS5vcmlnaW4gKyBwYXRoKVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIW9wdHMpIHtcbiAgICAgICAgb3B0cyA9IHR5cGVvZiB1cmwgPT09ICdvYmplY3QnID8gdXJsIDoge31cbiAgICAgIH1cblxuICAgICAgdXJsID0gdXRpbC5wYXJzZVVSTCh1cmwpXG4gICAgfVxuXG4gICAgY29uc3QgeyBhZ2VudCwgZGlzcGF0Y2hlciA9IGdldEdsb2JhbERpc3BhdGNoZXIoKSB9ID0gb3B0c1xuXG4gICAgaWYgKGFnZW50KSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3Vuc3VwcG9ydGVkIG9wdHMuYWdlbnQuIERpZCB5b3UgbWVhbiBvcHRzLmNsaWVudD8nKVxuICAgIH1cblxuICAgIHJldHVybiBmbi5jYWxsKGRpc3BhdGNoZXIsIHtcbiAgICAgIC4uLm9wdHMsXG4gICAgICBvcmlnaW46IHVybC5vcmlnaW4sXG4gICAgICBwYXRoOiB1cmwuc2VhcmNoID8gYCR7dXJsLnBhdGhuYW1lfSR7dXJsLnNlYXJjaH1gIDogdXJsLnBhdGhuYW1lLFxuICAgICAgbWV0aG9kOiBvcHRzLm1ldGhvZCB8fCAob3B0cy5ib2R5ID8gJ1BVVCcgOiAnR0VUJylcbiAgICB9LCBoYW5kbGVyKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzLnNldEdsb2JhbERpc3BhdGNoZXIgPSBzZXRHbG9iYWxEaXNwYXRjaGVyXG5tb2R1bGUuZXhwb3J0cy5nZXRHbG9iYWxEaXNwYXRjaGVyID0gZ2V0R2xvYmFsRGlzcGF0Y2hlclxuXG5pZiAodXRpbC5ub2RlTWFqb3IgPiAxNiB8fCAodXRpbC5ub2RlTWFqb3IgPT09IDE2ICYmIHV0aWwubm9kZU1pbm9yID49IDgpKSB7XG4gIGxldCBmZXRjaEltcGwgPSBudWxsXG4gIG1vZHVsZS5leHBvcnRzLmZldGNoID0gYXN5bmMgZnVuY3Rpb24gZmV0Y2ggKHJlc291cmNlKSB7XG4gICAgaWYgKCFmZXRjaEltcGwpIHtcbiAgICAgIGZldGNoSW1wbCA9IHJlcXVpcmUoJy4vbGliL2ZldGNoJykuZmV0Y2hcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGZldGNoSW1wbCguLi5hcmd1bWVudHMpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAodHlwZW9mIGVyciA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoZXJyLCB0aGlzKVxuICAgICAgfVxuXG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gIH1cbiAgbW9kdWxlLmV4cG9ydHMuSGVhZGVycyA9IHJlcXVpcmUoJy4vbGliL2ZldGNoL2hlYWRlcnMnKS5IZWFkZXJzXG4gIG1vZHVsZS5leHBvcnRzLlJlc3BvbnNlID0gcmVxdWlyZSgnLi9saWIvZmV0Y2gvcmVzcG9uc2UnKS5SZXNwb25zZVxuICBtb2R1bGUuZXhwb3J0cy5SZXF1ZXN0ID0gcmVxdWlyZSgnLi9saWIvZmV0Y2gvcmVxdWVzdCcpLlJlcXVlc3RcbiAgbW9kdWxlLmV4cG9ydHMuRm9ybURhdGEgPSByZXF1aXJlKCcuL2xpYi9mZXRjaC9mb3JtZGF0YScpLkZvcm1EYXRhXG4gIG1vZHVsZS5leHBvcnRzLkZpbGUgPSByZXF1aXJlKCcuL2xpYi9mZXRjaC9maWxlJykuRmlsZVxuICBtb2R1bGUuZXhwb3J0cy5GaWxlUmVhZGVyID0gcmVxdWlyZSgnLi9saWIvZmlsZWFwaS9maWxlcmVhZGVyJykuRmlsZVJlYWRlclxuXG4gIGNvbnN0IHsgc2V0R2xvYmFsT3JpZ2luLCBnZXRHbG9iYWxPcmlnaW4gfSA9IHJlcXVpcmUoJy4vbGliL2ZldGNoL2dsb2JhbCcpXG5cbiAgbW9kdWxlLmV4cG9ydHMuc2V0R2xvYmFsT3JpZ2luID0gc2V0R2xvYmFsT3JpZ2luXG4gIG1vZHVsZS5leHBvcnRzLmdldEdsb2JhbE9yaWdpbiA9IGdldEdsb2JhbE9yaWdpblxuXG4gIGNvbnN0IHsgQ2FjaGVTdG9yYWdlIH0gPSByZXF1aXJlKCcuL2xpYi9jYWNoZS9jYWNoZXN0b3JhZ2UnKVxuICBjb25zdCB7IGtDb25zdHJ1Y3QgfSA9IHJlcXVpcmUoJy4vbGliL2NhY2hlL3N5bWJvbHMnKVxuXG4gIC8vIENhY2hlICYgQ2FjaGVTdG9yYWdlIGFyZSB0aWdodGx5IGNvdXBsZWQgd2l0aCBmZXRjaC4gRXZlbiBpZiBpdCBtYXkgcnVuXG4gIC8vIGluIGFuIG9sZGVyIHZlcnNpb24gb2YgTm9kZSwgaXQgZG9lc24ndCBoYXZlIGFueSB1c2Ugd2l0aG91dCBmZXRjaC5cbiAgbW9kdWxlLmV4cG9ydHMuY2FjaGVzID0gbmV3IENhY2hlU3RvcmFnZShrQ29uc3RydWN0KVxufVxuXG5pZiAodXRpbC5ub2RlTWFqb3IgPj0gMTYpIHtcbiAgY29uc3QgeyBkZWxldGVDb29raWUsIGdldENvb2tpZXMsIGdldFNldENvb2tpZXMsIHNldENvb2tpZSB9ID0gcmVxdWlyZSgnLi9saWIvY29va2llcycpXG5cbiAgbW9kdWxlLmV4cG9ydHMuZGVsZXRlQ29va2llID0gZGVsZXRlQ29va2llXG4gIG1vZHVsZS5leHBvcnRzLmdldENvb2tpZXMgPSBnZXRDb29raWVzXG4gIG1vZHVsZS5leHBvcnRzLmdldFNldENvb2tpZXMgPSBnZXRTZXRDb29raWVzXG4gIG1vZHVsZS5leHBvcnRzLnNldENvb2tpZSA9IHNldENvb2tpZVxuXG4gIGNvbnN0IHsgcGFyc2VNSU1FVHlwZSwgc2VyaWFsaXplQU1pbWVUeXBlIH0gPSByZXF1aXJlKCcuL2xpYi9mZXRjaC9kYXRhVVJMJylcblxuICBtb2R1bGUuZXhwb3J0cy5wYXJzZU1JTUVUeXBlID0gcGFyc2VNSU1FVHlwZVxuICBtb2R1bGUuZXhwb3J0cy5zZXJpYWxpemVBTWltZVR5cGUgPSBzZXJpYWxpemVBTWltZVR5cGVcbn1cblxuaWYgKHV0aWwubm9kZU1ham9yID49IDE4ICYmIGhhc0NyeXB0bykge1xuICBjb25zdCB7IFdlYlNvY2tldCB9ID0gcmVxdWlyZSgnLi9saWIvd2Vic29ja2V0L3dlYnNvY2tldCcpXG5cbiAgbW9kdWxlLmV4cG9ydHMuV2ViU29ja2V0ID0gV2ViU29ja2V0XG59XG5cbm1vZHVsZS5leHBvcnRzLnJlcXVlc3QgPSBtYWtlRGlzcGF0Y2hlcihhcGkucmVxdWVzdClcbm1vZHVsZS5leHBvcnRzLnN0cmVhbSA9IG1ha2VEaXNwYXRjaGVyKGFwaS5zdHJlYW0pXG5tb2R1bGUuZXhwb3J0cy5waXBlbGluZSA9IG1ha2VEaXNwYXRjaGVyKGFwaS5waXBlbGluZSlcbm1vZHVsZS5leHBvcnRzLmNvbm5lY3QgPSBtYWtlRGlzcGF0Y2hlcihhcGkuY29ubmVjdClcbm1vZHVsZS5leHBvcnRzLnVwZ3JhZGUgPSBtYWtlRGlzcGF0Y2hlcihhcGkudXBncmFkZSlcblxubW9kdWxlLmV4cG9ydHMuTW9ja0NsaWVudCA9IE1vY2tDbGllbnRcbm1vZHVsZS5leHBvcnRzLk1vY2tQb29sID0gTW9ja1Bvb2xcbm1vZHVsZS5leHBvcnRzLk1vY2tBZ2VudCA9IE1vY2tBZ2VudFxubW9kdWxlLmV4cG9ydHMubW9ja0Vycm9ycyA9IG1vY2tFcnJvcnNcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5IdHRwQ2xpZW50ID0gZXhwb3J0cy5pc0h0dHBzID0gZXhwb3J0cy5IdHRwQ2xpZW50UmVzcG9uc2UgPSBleHBvcnRzLkh0dHBDbGllbnRFcnJvciA9IGV4cG9ydHMuZ2V0UHJveHlVcmwgPSBleHBvcnRzLk1lZGlhVHlwZXMgPSBleHBvcnRzLkhlYWRlcnMgPSBleHBvcnRzLkh0dHBDb2RlcyA9IHZvaWQgMDtcbmNvbnN0IGh0dHAgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcImh0dHBcIikpO1xuY29uc3QgaHR0cHMgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcImh0dHBzXCIpKTtcbmNvbnN0IHBtID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL3Byb3h5XCIpKTtcbmNvbnN0IHR1bm5lbCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwidHVubmVsXCIpKTtcbmNvbnN0IHVuZGljaV8xID0gcmVxdWlyZShcInVuZGljaVwiKTtcbnZhciBIdHRwQ29kZXM7XG4oZnVuY3Rpb24gKEh0dHBDb2Rlcykge1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJPS1wiXSA9IDIwMF0gPSBcIk9LXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIk11bHRpcGxlQ2hvaWNlc1wiXSA9IDMwMF0gPSBcIk11bHRpcGxlQ2hvaWNlc1wiO1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJNb3ZlZFBlcm1hbmVudGx5XCJdID0gMzAxXSA9IFwiTW92ZWRQZXJtYW5lbnRseVwiO1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJSZXNvdXJjZU1vdmVkXCJdID0gMzAyXSA9IFwiUmVzb3VyY2VNb3ZlZFwiO1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJTZWVPdGhlclwiXSA9IDMwM10gPSBcIlNlZU90aGVyXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIk5vdE1vZGlmaWVkXCJdID0gMzA0XSA9IFwiTm90TW9kaWZpZWRcIjtcbiAgICBIdHRwQ29kZXNbSHR0cENvZGVzW1wiVXNlUHJveHlcIl0gPSAzMDVdID0gXCJVc2VQcm94eVwiO1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJTd2l0Y2hQcm94eVwiXSA9IDMwNl0gPSBcIlN3aXRjaFByb3h5XCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIlRlbXBvcmFyeVJlZGlyZWN0XCJdID0gMzA3XSA9IFwiVGVtcG9yYXJ5UmVkaXJlY3RcIjtcbiAgICBIdHRwQ29kZXNbSHR0cENvZGVzW1wiUGVybWFuZW50UmVkaXJlY3RcIl0gPSAzMDhdID0gXCJQZXJtYW5lbnRSZWRpcmVjdFwiO1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJCYWRSZXF1ZXN0XCJdID0gNDAwXSA9IFwiQmFkUmVxdWVzdFwiO1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJVbmF1dGhvcml6ZWRcIl0gPSA0MDFdID0gXCJVbmF1dGhvcml6ZWRcIjtcbiAgICBIdHRwQ29kZXNbSHR0cENvZGVzW1wiUGF5bWVudFJlcXVpcmVkXCJdID0gNDAyXSA9IFwiUGF5bWVudFJlcXVpcmVkXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIkZvcmJpZGRlblwiXSA9IDQwM10gPSBcIkZvcmJpZGRlblwiO1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJOb3RGb3VuZFwiXSA9IDQwNF0gPSBcIk5vdEZvdW5kXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIk1ldGhvZE5vdEFsbG93ZWRcIl0gPSA0MDVdID0gXCJNZXRob2ROb3RBbGxvd2VkXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIk5vdEFjY2VwdGFibGVcIl0gPSA0MDZdID0gXCJOb3RBY2NlcHRhYmxlXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIlByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZFwiXSA9IDQwN10gPSBcIlByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZFwiO1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJSZXF1ZXN0VGltZW91dFwiXSA9IDQwOF0gPSBcIlJlcXVlc3RUaW1lb3V0XCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIkNvbmZsaWN0XCJdID0gNDA5XSA9IFwiQ29uZmxpY3RcIjtcbiAgICBIdHRwQ29kZXNbSHR0cENvZGVzW1wiR29uZVwiXSA9IDQxMF0gPSBcIkdvbmVcIjtcbiAgICBIdHRwQ29kZXNbSHR0cENvZGVzW1wiVG9vTWFueVJlcXVlc3RzXCJdID0gNDI5XSA9IFwiVG9vTWFueVJlcXVlc3RzXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIkludGVybmFsU2VydmVyRXJyb3JcIl0gPSA1MDBdID0gXCJJbnRlcm5hbFNlcnZlckVycm9yXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIk5vdEltcGxlbWVudGVkXCJdID0gNTAxXSA9IFwiTm90SW1wbGVtZW50ZWRcIjtcbiAgICBIdHRwQ29kZXNbSHR0cENvZGVzW1wiQmFkR2F0ZXdheVwiXSA9IDUwMl0gPSBcIkJhZEdhdGV3YXlcIjtcbiAgICBIdHRwQ29kZXNbSHR0cENvZGVzW1wiU2VydmljZVVuYXZhaWxhYmxlXCJdID0gNTAzXSA9IFwiU2VydmljZVVuYXZhaWxhYmxlXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIkdhdGV3YXlUaW1lb3V0XCJdID0gNTA0XSA9IFwiR2F0ZXdheVRpbWVvdXRcIjtcbn0pKEh0dHBDb2RlcyB8fCAoZXhwb3J0cy5IdHRwQ29kZXMgPSBIdHRwQ29kZXMgPSB7fSkpO1xudmFyIEhlYWRlcnM7XG4oZnVuY3Rpb24gKEhlYWRlcnMpIHtcbiAgICBIZWFkZXJzW1wiQWNjZXB0XCJdID0gXCJhY2NlcHRcIjtcbiAgICBIZWFkZXJzW1wiQ29udGVudFR5cGVcIl0gPSBcImNvbnRlbnQtdHlwZVwiO1xufSkoSGVhZGVycyB8fCAoZXhwb3J0cy5IZWFkZXJzID0gSGVhZGVycyA9IHt9KSk7XG52YXIgTWVkaWFUeXBlcztcbihmdW5jdGlvbiAoTWVkaWFUeXBlcykge1xuICAgIE1lZGlhVHlwZXNbXCJBcHBsaWNhdGlvbkpzb25cIl0gPSBcImFwcGxpY2F0aW9uL2pzb25cIjtcbn0pKE1lZGlhVHlwZXMgfHwgKGV4cG9ydHMuTWVkaWFUeXBlcyA9IE1lZGlhVHlwZXMgPSB7fSkpO1xuLyoqXG4gKiBSZXR1cm5zIHRoZSBwcm94eSBVUkwsIGRlcGVuZGluZyB1cG9uIHRoZSBzdXBwbGllZCB1cmwgYW5kIHByb3h5IGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiAqIEBwYXJhbSBzZXJ2ZXJVcmwgIFRoZSBzZXJ2ZXIgVVJMIHdoZXJlIHRoZSByZXF1ZXN0IHdpbGwgYmUgc2VudC4gRm9yIGV4YW1wbGUsIGh0dHBzOi8vYXBpLmdpdGh1Yi5jb21cbiAqL1xuZnVuY3Rpb24gZ2V0UHJveHlVcmwoc2VydmVyVXJsKSB7XG4gICAgY29uc3QgcHJveHlVcmwgPSBwbS5nZXRQcm94eVVybChuZXcgVVJMKHNlcnZlclVybCkpO1xuICAgIHJldHVybiBwcm94eVVybCA/IHByb3h5VXJsLmhyZWYgOiAnJztcbn1cbmV4cG9ydHMuZ2V0UHJveHlVcmwgPSBnZXRQcm94eVVybDtcbmNvbnN0IEh0dHBSZWRpcmVjdENvZGVzID0gW1xuICAgIEh0dHBDb2Rlcy5Nb3ZlZFBlcm1hbmVudGx5LFxuICAgIEh0dHBDb2Rlcy5SZXNvdXJjZU1vdmVkLFxuICAgIEh0dHBDb2Rlcy5TZWVPdGhlcixcbiAgICBIdHRwQ29kZXMuVGVtcG9yYXJ5UmVkaXJlY3QsXG4gICAgSHR0cENvZGVzLlBlcm1hbmVudFJlZGlyZWN0XG5dO1xuY29uc3QgSHR0cFJlc3BvbnNlUmV0cnlDb2RlcyA9IFtcbiAgICBIdHRwQ29kZXMuQmFkR2F0ZXdheSxcbiAgICBIdHRwQ29kZXMuU2VydmljZVVuYXZhaWxhYmxlLFxuICAgIEh0dHBDb2Rlcy5HYXRld2F5VGltZW91dFxuXTtcbmNvbnN0IFJldHJ5YWJsZUh0dHBWZXJicyA9IFsnT1BUSU9OUycsICdHRVQnLCAnREVMRVRFJywgJ0hFQUQnXTtcbmNvbnN0IEV4cG9uZW50aWFsQmFja29mZkNlaWxpbmcgPSAxMDtcbmNvbnN0IEV4cG9uZW50aWFsQmFja29mZlRpbWVTbGljZSA9IDU7XG5jbGFzcyBIdHRwQ2xpZW50RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZSwgc3RhdHVzQ29kZSkge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5uYW1lID0gJ0h0dHBDbGllbnRFcnJvcic7XG4gICAgICAgIHRoaXMuc3RhdHVzQ29kZSA9IHN0YXR1c0NvZGU7XG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBIdHRwQ2xpZW50RXJyb3IucHJvdG90eXBlKTtcbiAgICB9XG59XG5leHBvcnRzLkh0dHBDbGllbnRFcnJvciA9IEh0dHBDbGllbnRFcnJvcjtcbmNsYXNzIEh0dHBDbGllbnRSZXNwb25zZSB7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZSkge1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIH1cbiAgICByZWFkQm9keSgpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgIGxldCBvdXRwdXQgPSBCdWZmZXIuYWxsb2MoMCk7XG4gICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlLm9uKCdkYXRhJywgKGNodW5rKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IEJ1ZmZlci5jb25jYXQoW291dHB1dCwgY2h1bmtdKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2Uub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShvdXRwdXQudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZWFkQm9keUJ1ZmZlcigpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNodW5rcyA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZS5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjaHVua3MucHVzaChjaHVuayk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoQnVmZmVyLmNvbmNhdChjaHVua3MpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0cy5IdHRwQ2xpZW50UmVzcG9uc2UgPSBIdHRwQ2xpZW50UmVzcG9uc2U7XG5mdW5jdGlvbiBpc0h0dHBzKHJlcXVlc3RVcmwpIHtcbiAgICBjb25zdCBwYXJzZWRVcmwgPSBuZXcgVVJMKHJlcXVlc3RVcmwpO1xuICAgIHJldHVybiBwYXJzZWRVcmwucHJvdG9jb2wgPT09ICdodHRwczonO1xufVxuZXhwb3J0cy5pc0h0dHBzID0gaXNIdHRwcztcbmNsYXNzIEh0dHBDbGllbnQge1xuICAgIGNvbnN0cnVjdG9yKHVzZXJBZ2VudCwgaGFuZGxlcnMsIHJlcXVlc3RPcHRpb25zKSB7XG4gICAgICAgIHRoaXMuX2lnbm9yZVNzbEVycm9yID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2FsbG93UmVkaXJlY3RzID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fYWxsb3dSZWRpcmVjdERvd25ncmFkZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9tYXhSZWRpcmVjdHMgPSA1MDtcbiAgICAgICAgdGhpcy5fYWxsb3dSZXRyaWVzID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX21heFJldHJpZXMgPSAxO1xuICAgICAgICB0aGlzLl9rZWVwQWxpdmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fZGlzcG9zZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy51c2VyQWdlbnQgPSB1c2VyQWdlbnQ7XG4gICAgICAgIHRoaXMuaGFuZGxlcnMgPSBoYW5kbGVycyB8fCBbXTtcbiAgICAgICAgdGhpcy5yZXF1ZXN0T3B0aW9ucyA9IHJlcXVlc3RPcHRpb25zO1xuICAgICAgICBpZiAocmVxdWVzdE9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChyZXF1ZXN0T3B0aW9ucy5pZ25vcmVTc2xFcnJvciAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5faWdub3JlU3NsRXJyb3IgPSByZXF1ZXN0T3B0aW9ucy5pZ25vcmVTc2xFcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3NvY2tldFRpbWVvdXQgPSByZXF1ZXN0T3B0aW9ucy5zb2NrZXRUaW1lb3V0O1xuICAgICAgICAgICAgaWYgKHJlcXVlc3RPcHRpb25zLmFsbG93UmVkaXJlY3RzICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hbGxvd1JlZGlyZWN0cyA9IHJlcXVlc3RPcHRpb25zLmFsbG93UmVkaXJlY3RzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlcXVlc3RPcHRpb25zLmFsbG93UmVkaXJlY3REb3duZ3JhZGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FsbG93UmVkaXJlY3REb3duZ3JhZGUgPSByZXF1ZXN0T3B0aW9ucy5hbGxvd1JlZGlyZWN0RG93bmdyYWRlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlcXVlc3RPcHRpb25zLm1heFJlZGlyZWN0cyAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWF4UmVkaXJlY3RzID0gTWF0aC5tYXgocmVxdWVzdE9wdGlvbnMubWF4UmVkaXJlY3RzLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXF1ZXN0T3B0aW9ucy5rZWVwQWxpdmUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2tlZXBBbGl2ZSA9IHJlcXVlc3RPcHRpb25zLmtlZXBBbGl2ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXF1ZXN0T3B0aW9ucy5hbGxvd1JldHJpZXMgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FsbG93UmV0cmllcyA9IHJlcXVlc3RPcHRpb25zLmFsbG93UmV0cmllcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXF1ZXN0T3B0aW9ucy5tYXhSZXRyaWVzICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXhSZXRyaWVzID0gcmVxdWVzdE9wdGlvbnMubWF4UmV0cmllcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBvcHRpb25zKHJlcXVlc3RVcmwsIGFkZGl0aW9uYWxIZWFkZXJzKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KCdPUFRJT05TJywgcmVxdWVzdFVybCwgbnVsbCwgYWRkaXRpb25hbEhlYWRlcnMgfHwge30pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZ2V0KHJlcXVlc3RVcmwsIGFkZGl0aW9uYWxIZWFkZXJzKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KCdHRVQnLCByZXF1ZXN0VXJsLCBudWxsLCBhZGRpdGlvbmFsSGVhZGVycyB8fCB7fSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBkZWwocmVxdWVzdFVybCwgYWRkaXRpb25hbEhlYWRlcnMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QoJ0RFTEVURScsIHJlcXVlc3RVcmwsIG51bGwsIGFkZGl0aW9uYWxIZWFkZXJzIHx8IHt9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHBvc3QocmVxdWVzdFVybCwgZGF0YSwgYWRkaXRpb25hbEhlYWRlcnMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QoJ1BPU1QnLCByZXF1ZXN0VXJsLCBkYXRhLCBhZGRpdGlvbmFsSGVhZGVycyB8fCB7fSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwYXRjaChyZXF1ZXN0VXJsLCBkYXRhLCBhZGRpdGlvbmFsSGVhZGVycykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdCgnUEFUQ0gnLCByZXF1ZXN0VXJsLCBkYXRhLCBhZGRpdGlvbmFsSGVhZGVycyB8fCB7fSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwdXQocmVxdWVzdFVybCwgZGF0YSwgYWRkaXRpb25hbEhlYWRlcnMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QoJ1BVVCcsIHJlcXVlc3RVcmwsIGRhdGEsIGFkZGl0aW9uYWxIZWFkZXJzIHx8IHt9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGhlYWQocmVxdWVzdFVybCwgYWRkaXRpb25hbEhlYWRlcnMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QoJ0hFQUQnLCByZXF1ZXN0VXJsLCBudWxsLCBhZGRpdGlvbmFsSGVhZGVycyB8fCB7fSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBzZW5kU3RyZWFtKHZlcmIsIHJlcXVlc3RVcmwsIHN0cmVhbSwgYWRkaXRpb25hbEhlYWRlcnMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QodmVyYiwgcmVxdWVzdFVybCwgc3RyZWFtLCBhZGRpdGlvbmFsSGVhZGVycyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXRzIGEgdHlwZWQgb2JqZWN0IGZyb20gYW4gZW5kcG9pbnRcbiAgICAgKiBCZSBhd2FyZSB0aGF0IG5vdCBmb3VuZCByZXR1cm5zIGEgbnVsbC4gIE90aGVyIGVycm9ycyAoNHh4LCA1eHgpIHJlamVjdCB0aGUgcHJvbWlzZVxuICAgICAqL1xuICAgIGdldEpzb24ocmVxdWVzdFVybCwgYWRkaXRpb25hbEhlYWRlcnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgYWRkaXRpb25hbEhlYWRlcnNbSGVhZGVycy5BY2NlcHRdID0gdGhpcy5fZ2V0RXhpc3RpbmdPckRlZmF1bHRIZWFkZXIoYWRkaXRpb25hbEhlYWRlcnMsIEhlYWRlcnMuQWNjZXB0LCBNZWRpYVR5cGVzLkFwcGxpY2F0aW9uSnNvbik7XG4gICAgICAgICAgICBjb25zdCByZXMgPSB5aWVsZCB0aGlzLmdldChyZXF1ZXN0VXJsLCBhZGRpdGlvbmFsSGVhZGVycyk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJvY2Vzc1Jlc3BvbnNlKHJlcywgdGhpcy5yZXF1ZXN0T3B0aW9ucyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwb3N0SnNvbihyZXF1ZXN0VXJsLCBvYmosIGFkZGl0aW9uYWxIZWFkZXJzID0ge30pIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnN0cmluZ2lmeShvYmosIG51bGwsIDIpO1xuICAgICAgICAgICAgYWRkaXRpb25hbEhlYWRlcnNbSGVhZGVycy5BY2NlcHRdID0gdGhpcy5fZ2V0RXhpc3RpbmdPckRlZmF1bHRIZWFkZXIoYWRkaXRpb25hbEhlYWRlcnMsIEhlYWRlcnMuQWNjZXB0LCBNZWRpYVR5cGVzLkFwcGxpY2F0aW9uSnNvbik7XG4gICAgICAgICAgICBhZGRpdGlvbmFsSGVhZGVyc1tIZWFkZXJzLkNvbnRlbnRUeXBlXSA9IHRoaXMuX2dldEV4aXN0aW5nT3JEZWZhdWx0SGVhZGVyKGFkZGl0aW9uYWxIZWFkZXJzLCBIZWFkZXJzLkNvbnRlbnRUeXBlLCBNZWRpYVR5cGVzLkFwcGxpY2F0aW9uSnNvbik7XG4gICAgICAgICAgICBjb25zdCByZXMgPSB5aWVsZCB0aGlzLnBvc3QocmVxdWVzdFVybCwgZGF0YSwgYWRkaXRpb25hbEhlYWRlcnMpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2Nlc3NSZXNwb25zZShyZXMsIHRoaXMucmVxdWVzdE9wdGlvbnMpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcHV0SnNvbihyZXF1ZXN0VXJsLCBvYmosIGFkZGl0aW9uYWxIZWFkZXJzID0ge30pIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnN0cmluZ2lmeShvYmosIG51bGwsIDIpO1xuICAgICAgICAgICAgYWRkaXRpb25hbEhlYWRlcnNbSGVhZGVycy5BY2NlcHRdID0gdGhpcy5fZ2V0RXhpc3RpbmdPckRlZmF1bHRIZWFkZXIoYWRkaXRpb25hbEhlYWRlcnMsIEhlYWRlcnMuQWNjZXB0LCBNZWRpYVR5cGVzLkFwcGxpY2F0aW9uSnNvbik7XG4gICAgICAgICAgICBhZGRpdGlvbmFsSGVhZGVyc1tIZWFkZXJzLkNvbnRlbnRUeXBlXSA9IHRoaXMuX2dldEV4aXN0aW5nT3JEZWZhdWx0SGVhZGVyKGFkZGl0aW9uYWxIZWFkZXJzLCBIZWFkZXJzLkNvbnRlbnRUeXBlLCBNZWRpYVR5cGVzLkFwcGxpY2F0aW9uSnNvbik7XG4gICAgICAgICAgICBjb25zdCByZXMgPSB5aWVsZCB0aGlzLnB1dChyZXF1ZXN0VXJsLCBkYXRhLCBhZGRpdGlvbmFsSGVhZGVycyk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJvY2Vzc1Jlc3BvbnNlKHJlcywgdGhpcy5yZXF1ZXN0T3B0aW9ucyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwYXRjaEpzb24ocmVxdWVzdFVybCwgb2JqLCBhZGRpdGlvbmFsSGVhZGVycyA9IHt9KSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gSlNPTi5zdHJpbmdpZnkob2JqLCBudWxsLCAyKTtcbiAgICAgICAgICAgIGFkZGl0aW9uYWxIZWFkZXJzW0hlYWRlcnMuQWNjZXB0XSA9IHRoaXMuX2dldEV4aXN0aW5nT3JEZWZhdWx0SGVhZGVyKGFkZGl0aW9uYWxIZWFkZXJzLCBIZWFkZXJzLkFjY2VwdCwgTWVkaWFUeXBlcy5BcHBsaWNhdGlvbkpzb24pO1xuICAgICAgICAgICAgYWRkaXRpb25hbEhlYWRlcnNbSGVhZGVycy5Db250ZW50VHlwZV0gPSB0aGlzLl9nZXRFeGlzdGluZ09yRGVmYXVsdEhlYWRlcihhZGRpdGlvbmFsSGVhZGVycywgSGVhZGVycy5Db250ZW50VHlwZSwgTWVkaWFUeXBlcy5BcHBsaWNhdGlvbkpzb24pO1xuICAgICAgICAgICAgY29uc3QgcmVzID0geWllbGQgdGhpcy5wYXRjaChyZXF1ZXN0VXJsLCBkYXRhLCBhZGRpdGlvbmFsSGVhZGVycyk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJvY2Vzc1Jlc3BvbnNlKHJlcywgdGhpcy5yZXF1ZXN0T3B0aW9ucyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBNYWtlcyBhIHJhdyBodHRwIHJlcXVlc3QuXG4gICAgICogQWxsIG90aGVyIG1ldGhvZHMgc3VjaCBhcyBnZXQsIHBvc3QsIHBhdGNoLCBhbmQgcmVxdWVzdCB1bHRpbWF0ZWx5IGNhbGwgdGhpcy5cbiAgICAgKiBQcmVmZXIgZ2V0LCBkZWwsIHBvc3QgYW5kIHBhdGNoXG4gICAgICovXG4gICAgcmVxdWVzdCh2ZXJiLCByZXF1ZXN0VXJsLCBkYXRhLCBoZWFkZXJzKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NsaWVudCBoYXMgYWxyZWFkeSBiZWVuIGRpc3Bvc2VkLicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcGFyc2VkVXJsID0gbmV3IFVSTChyZXF1ZXN0VXJsKTtcbiAgICAgICAgICAgIGxldCBpbmZvID0gdGhpcy5fcHJlcGFyZVJlcXVlc3QodmVyYiwgcGFyc2VkVXJsLCBoZWFkZXJzKTtcbiAgICAgICAgICAgIC8vIE9ubHkgcGVyZm9ybSByZXRyaWVzIG9uIHJlYWRzIHNpbmNlIHdyaXRlcyBtYXkgbm90IGJlIGlkZW1wb3RlbnQuXG4gICAgICAgICAgICBjb25zdCBtYXhUcmllcyA9IHRoaXMuX2FsbG93UmV0cmllcyAmJiBSZXRyeWFibGVIdHRwVmVyYnMuaW5jbHVkZXModmVyYilcbiAgICAgICAgICAgICAgICA/IHRoaXMuX21heFJldHJpZXMgKyAxXG4gICAgICAgICAgICAgICAgOiAxO1xuICAgICAgICAgICAgbGV0IG51bVRyaWVzID0gMDtcbiAgICAgICAgICAgIGxldCByZXNwb25zZTtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZSA9IHlpZWxkIHRoaXMucmVxdWVzdFJhdyhpbmZvLCBkYXRhKTtcbiAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiBpdCdzIGFuIGF1dGhlbnRpY2F0aW9uIGNoYWxsZW5nZVxuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZSAmJlxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5tZXNzYWdlICYmXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLm1lc3NhZ2Uuc3RhdHVzQ29kZSA9PT0gSHR0cENvZGVzLlVuYXV0aG9yaXplZCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgYXV0aGVudGljYXRpb25IYW5kbGVyO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGhhbmRsZXIgb2YgdGhpcy5oYW5kbGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZXIuY2FuSGFuZGxlQXV0aGVudGljYXRpb24ocmVzcG9uc2UpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aGVudGljYXRpb25IYW5kbGVyID0gaGFuZGxlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoYXV0aGVudGljYXRpb25IYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXV0aGVudGljYXRpb25IYW5kbGVyLmhhbmRsZUF1dGhlbnRpY2F0aW9uKHRoaXMsIGluZm8sIGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSByZWNlaXZlZCBhbiB1bmF1dGhvcml6ZWQgcmVzcG9uc2UgYnV0IGhhdmUgbm8gaGFuZGxlcnMgdG8gaGFuZGxlIGl0LlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gTGV0IHRoZSByZXNwb25zZSByZXR1cm4gdG8gdGhlIGNhbGxlci5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgcmVkaXJlY3RzUmVtYWluaW5nID0gdGhpcy5fbWF4UmVkaXJlY3RzO1xuICAgICAgICAgICAgICAgIHdoaWxlIChyZXNwb25zZS5tZXNzYWdlLnN0YXR1c0NvZGUgJiZcbiAgICAgICAgICAgICAgICAgICAgSHR0cFJlZGlyZWN0Q29kZXMuaW5jbHVkZXMocmVzcG9uc2UubWVzc2FnZS5zdGF0dXNDb2RlKSAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hbGxvd1JlZGlyZWN0cyAmJlxuICAgICAgICAgICAgICAgICAgICByZWRpcmVjdHNSZW1haW5pbmcgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZGlyZWN0VXJsID0gcmVzcG9uc2UubWVzc2FnZS5oZWFkZXJzWydsb2NhdGlvbiddO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXJlZGlyZWN0VXJsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGVyZSdzIG5vIGxvY2F0aW9uIHRvIHJlZGlyZWN0IHRvLCB3ZSB3b24ndFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkUmVkaXJlY3RVcmwgPSBuZXcgVVJMKHJlZGlyZWN0VXJsKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlZFVybC5wcm90b2NvbCA9PT0gJ2h0dHBzOicgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZFVybC5wcm90b2NvbCAhPT0gcGFyc2VkUmVkaXJlY3RVcmwucHJvdG9jb2wgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICF0aGlzLl9hbGxvd1JlZGlyZWN0RG93bmdyYWRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlZGlyZWN0IGZyb20gSFRUUFMgdG8gSFRUUCBwcm90b2NvbC4gVGhpcyBkb3duZ3JhZGUgaXMgbm90IGFsbG93ZWQgZm9yIHNlY3VyaXR5IHJlYXNvbnMuIElmIHlvdSB3YW50IHRvIGFsbG93IHRoaXMgYmVoYXZpb3IsIHNldCB0aGUgYWxsb3dSZWRpcmVjdERvd25ncmFkZSBvcHRpb24gdG8gdHJ1ZS4nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIGZpbmlzaCByZWFkaW5nIHRoZSByZXNwb25zZSBiZWZvcmUgcmVhc3NpZ25pbmcgcmVzcG9uc2VcbiAgICAgICAgICAgICAgICAgICAgLy8gd2hpY2ggd2lsbCBsZWFrIHRoZSBvcGVuIHNvY2tldC5cbiAgICAgICAgICAgICAgICAgICAgeWllbGQgcmVzcG9uc2UucmVhZEJvZHkoKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gc3RyaXAgYXV0aG9yaXphdGlvbiBoZWFkZXIgaWYgcmVkaXJlY3RlZCB0byBhIGRpZmZlcmVudCBob3N0bmFtZVxuICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VkUmVkaXJlY3RVcmwuaG9zdG5hbWUgIT09IHBhcnNlZFVybC5ob3N0bmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBoZWFkZXIgaW4gaGVhZGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhlYWRlciBuYW1lcyBhcmUgY2FzZSBpbnNlbnNpdGl2ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoZWFkZXIudG9Mb3dlckNhc2UoKSA9PT0gJ2F1dGhvcml6YXRpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBoZWFkZXJzW2hlYWRlcl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIGxldCdzIG1ha2UgdGhlIHJlcXVlc3Qgd2l0aCB0aGUgbmV3IHJlZGlyZWN0VXJsXG4gICAgICAgICAgICAgICAgICAgIGluZm8gPSB0aGlzLl9wcmVwYXJlUmVxdWVzdCh2ZXJiLCBwYXJzZWRSZWRpcmVjdFVybCwgaGVhZGVycyk7XG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0geWllbGQgdGhpcy5yZXF1ZXN0UmF3KGluZm8sIGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICByZWRpcmVjdHNSZW1haW5pbmctLTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5tZXNzYWdlLnN0YXR1c0NvZGUgfHxcbiAgICAgICAgICAgICAgICAgICAgIUh0dHBSZXNwb25zZVJldHJ5Q29kZXMuaW5jbHVkZXMocmVzcG9uc2UubWVzc2FnZS5zdGF0dXNDb2RlKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBJZiBub3QgYSByZXRyeSBjb2RlLCByZXR1cm4gaW1tZWRpYXRlbHkgaW5zdGVhZCBvZiByZXRyeWluZ1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG51bVRyaWVzICs9IDE7XG4gICAgICAgICAgICAgICAgaWYgKG51bVRyaWVzIDwgbWF4VHJpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgcmVzcG9uc2UucmVhZEJvZHkoKTtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgdGhpcy5fcGVyZm9ybUV4cG9uZW50aWFsQmFja29mZihudW1Ucmllcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSB3aGlsZSAobnVtVHJpZXMgPCBtYXhUcmllcyk7XG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBOZWVkcyB0byBiZSBjYWxsZWQgaWYga2VlcEFsaXZlIGlzIHNldCB0byB0cnVlIGluIHJlcXVlc3Qgb3B0aW9ucy5cbiAgICAgKi9cbiAgICBkaXNwb3NlKCkge1xuICAgICAgICBpZiAodGhpcy5fYWdlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX2FnZW50LmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9kaXNwb3NlZCA9IHRydWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJhdyByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBpbmZvXG4gICAgICogQHBhcmFtIGRhdGFcbiAgICAgKi9cbiAgICByZXF1ZXN0UmF3KGluZm8sIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2tGb3JSZXN1bHQoZXJyLCByZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIXJlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgYGVycmAgaXMgbm90IHBhc3NlZCwgdGhlbiBgcmVzYCBtdXN0IGJlIHBhc3NlZC5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ1Vua25vd24gZXJyb3InKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5yZXF1ZXN0UmF3V2l0aENhbGxiYWNrKGluZm8sIGRhdGEsIGNhbGxiYWNrRm9yUmVzdWx0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmF3IHJlcXVlc3Qgd2l0aCBjYWxsYmFjay5cbiAgICAgKiBAcGFyYW0gaW5mb1xuICAgICAqIEBwYXJhbSBkYXRhXG4gICAgICogQHBhcmFtIG9uUmVzdWx0XG4gICAgICovXG4gICAgcmVxdWVzdFJhd1dpdGhDYWxsYmFjayhpbmZvLCBkYXRhLCBvblJlc3VsdCkge1xuICAgICAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBpZiAoIWluZm8ub3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgICAgICAgICAgICAgaW5mby5vcHRpb25zLmhlYWRlcnMgPSB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGluZm8ub3B0aW9ucy5oZWFkZXJzWydDb250ZW50LUxlbmd0aCddID0gQnVmZmVyLmJ5dGVMZW5ndGgoZGF0YSwgJ3V0ZjgnKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgY2FsbGJhY2tDYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgZnVuY3Rpb24gaGFuZGxlUmVzdWx0KGVyciwgcmVzKSB7XG4gICAgICAgICAgICBpZiAoIWNhbGxiYWNrQ2FsbGVkKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2tDYWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIG9uUmVzdWx0KGVyciwgcmVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXEgPSBpbmZvLmh0dHBNb2R1bGUucmVxdWVzdChpbmZvLm9wdGlvbnMsIChtc2cpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IG5ldyBIdHRwQ2xpZW50UmVzcG9uc2UobXNnKTtcbiAgICAgICAgICAgIGhhbmRsZVJlc3VsdCh1bmRlZmluZWQsIHJlcyk7XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgc29ja2V0O1xuICAgICAgICByZXEub24oJ3NvY2tldCcsIHNvY2sgPT4ge1xuICAgICAgICAgICAgc29ja2V0ID0gc29jaztcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIElmIHdlIGV2ZXIgZ2V0IGRpc2Nvbm5lY3RlZCwgd2Ugd2FudCB0aGUgc29ja2V0IHRvIHRpbWVvdXQgZXZlbnR1YWxseVxuICAgICAgICByZXEuc2V0VGltZW91dCh0aGlzLl9zb2NrZXRUaW1lb3V0IHx8IDMgKiA2MDAwMCwgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHNvY2tldCkge1xuICAgICAgICAgICAgICAgIHNvY2tldC5lbmQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGhhbmRsZVJlc3VsdChuZXcgRXJyb3IoYFJlcXVlc3QgdGltZW91dDogJHtpbmZvLm9wdGlvbnMucGF0aH1gKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXEub24oJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgLy8gZXJyIGhhcyBzdGF0dXNDb2RlIHByb3BlcnR5XG4gICAgICAgICAgICAvLyByZXMgc2hvdWxkIGhhdmUgaGVhZGVyc1xuICAgICAgICAgICAgaGFuZGxlUmVzdWx0KGVycik7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoZGF0YSAmJiB0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJlcS53cml0ZShkYXRhLCAndXRmOCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRhICYmIHR5cGVvZiBkYXRhICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZGF0YS5vbignY2xvc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmVxLmVuZCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBkYXRhLnBpcGUocmVxKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlcS5lbmQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXRzIGFuIGh0dHAgYWdlbnQuIFRoaXMgZnVuY3Rpb24gaXMgdXNlZnVsIHdoZW4geW91IG5lZWQgYW4gaHR0cCBhZ2VudCB0aGF0IGhhbmRsZXNcbiAgICAgKiByb3V0aW5nIHRocm91Z2ggYSBwcm94eSBzZXJ2ZXIgLSBkZXBlbmRpbmcgdXBvbiB0aGUgdXJsIGFuZCBwcm94eSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG4gICAgICogQHBhcmFtIHNlcnZlclVybCAgVGhlIHNlcnZlciBVUkwgd2hlcmUgdGhlIHJlcXVlc3Qgd2lsbCBiZSBzZW50LiBGb3IgZXhhbXBsZSwgaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbVxuICAgICAqL1xuICAgIGdldEFnZW50KHNlcnZlclVybCkge1xuICAgICAgICBjb25zdCBwYXJzZWRVcmwgPSBuZXcgVVJMKHNlcnZlclVybCk7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRBZ2VudChwYXJzZWRVcmwpO1xuICAgIH1cbiAgICBnZXRBZ2VudERpc3BhdGNoZXIoc2VydmVyVXJsKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFVybCA9IG5ldyBVUkwoc2VydmVyVXJsKTtcbiAgICAgICAgY29uc3QgcHJveHlVcmwgPSBwbS5nZXRQcm94eVVybChwYXJzZWRVcmwpO1xuICAgICAgICBjb25zdCB1c2VQcm94eSA9IHByb3h5VXJsICYmIHByb3h5VXJsLmhvc3RuYW1lO1xuICAgICAgICBpZiAoIXVzZVByb3h5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldFByb3h5QWdlbnREaXNwYXRjaGVyKHBhcnNlZFVybCwgcHJveHlVcmwpO1xuICAgIH1cbiAgICBfcHJlcGFyZVJlcXVlc3QobWV0aG9kLCByZXF1ZXN0VXJsLCBoZWFkZXJzKSB7XG4gICAgICAgIGNvbnN0IGluZm8gPSB7fTtcbiAgICAgICAgaW5mby5wYXJzZWRVcmwgPSByZXF1ZXN0VXJsO1xuICAgICAgICBjb25zdCB1c2luZ1NzbCA9IGluZm8ucGFyc2VkVXJsLnByb3RvY29sID09PSAnaHR0cHM6JztcbiAgICAgICAgaW5mby5odHRwTW9kdWxlID0gdXNpbmdTc2wgPyBodHRwcyA6IGh0dHA7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRQb3J0ID0gdXNpbmdTc2wgPyA0NDMgOiA4MDtcbiAgICAgICAgaW5mby5vcHRpb25zID0ge307XG4gICAgICAgIGluZm8ub3B0aW9ucy5ob3N0ID0gaW5mby5wYXJzZWRVcmwuaG9zdG5hbWU7XG4gICAgICAgIGluZm8ub3B0aW9ucy5wb3J0ID0gaW5mby5wYXJzZWRVcmwucG9ydFxuICAgICAgICAgICAgPyBwYXJzZUludChpbmZvLnBhcnNlZFVybC5wb3J0KVxuICAgICAgICAgICAgOiBkZWZhdWx0UG9ydDtcbiAgICAgICAgaW5mby5vcHRpb25zLnBhdGggPVxuICAgICAgICAgICAgKGluZm8ucGFyc2VkVXJsLnBhdGhuYW1lIHx8ICcnKSArIChpbmZvLnBhcnNlZFVybC5zZWFyY2ggfHwgJycpO1xuICAgICAgICBpbmZvLm9wdGlvbnMubWV0aG9kID0gbWV0aG9kO1xuICAgICAgICBpbmZvLm9wdGlvbnMuaGVhZGVycyA9IHRoaXMuX21lcmdlSGVhZGVycyhoZWFkZXJzKTtcbiAgICAgICAgaWYgKHRoaXMudXNlckFnZW50ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGluZm8ub3B0aW9ucy5oZWFkZXJzWyd1c2VyLWFnZW50J10gPSB0aGlzLnVzZXJBZ2VudDtcbiAgICAgICAgfVxuICAgICAgICBpbmZvLm9wdGlvbnMuYWdlbnQgPSB0aGlzLl9nZXRBZ2VudChpbmZvLnBhcnNlZFVybCk7XG4gICAgICAgIC8vIGdpdmVzIGhhbmRsZXJzIGFuIG9wcG9ydHVuaXR5IHRvIHBhcnRpY2lwYXRlXG4gICAgICAgIGlmICh0aGlzLmhhbmRsZXJzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGhhbmRsZXIgb2YgdGhpcy5oYW5kbGVycykge1xuICAgICAgICAgICAgICAgIGhhbmRsZXIucHJlcGFyZVJlcXVlc3QoaW5mby5vcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5mbztcbiAgICB9XG4gICAgX21lcmdlSGVhZGVycyhoZWFkZXJzKSB7XG4gICAgICAgIGlmICh0aGlzLnJlcXVlc3RPcHRpb25zICYmIHRoaXMucmVxdWVzdE9wdGlvbnMuaGVhZGVycykge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGxvd2VyY2FzZUtleXModGhpcy5yZXF1ZXN0T3B0aW9ucy5oZWFkZXJzKSwgbG93ZXJjYXNlS2V5cyhoZWFkZXJzIHx8IHt9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvd2VyY2FzZUtleXMoaGVhZGVycyB8fCB7fSk7XG4gICAgfVxuICAgIF9nZXRFeGlzdGluZ09yRGVmYXVsdEhlYWRlcihhZGRpdGlvbmFsSGVhZGVycywgaGVhZGVyLCBfZGVmYXVsdCkge1xuICAgICAgICBsZXQgY2xpZW50SGVhZGVyO1xuICAgICAgICBpZiAodGhpcy5yZXF1ZXN0T3B0aW9ucyAmJiB0aGlzLnJlcXVlc3RPcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgICAgICAgIGNsaWVudEhlYWRlciA9IGxvd2VyY2FzZUtleXModGhpcy5yZXF1ZXN0T3B0aW9ucy5oZWFkZXJzKVtoZWFkZXJdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhZGRpdGlvbmFsSGVhZGVyc1toZWFkZXJdIHx8IGNsaWVudEhlYWRlciB8fCBfZGVmYXVsdDtcbiAgICB9XG4gICAgX2dldEFnZW50KHBhcnNlZFVybCkge1xuICAgICAgICBsZXQgYWdlbnQ7XG4gICAgICAgIGNvbnN0IHByb3h5VXJsID0gcG0uZ2V0UHJveHlVcmwocGFyc2VkVXJsKTtcbiAgICAgICAgY29uc3QgdXNlUHJveHkgPSBwcm94eVVybCAmJiBwcm94eVVybC5ob3N0bmFtZTtcbiAgICAgICAgaWYgKHRoaXMuX2tlZXBBbGl2ZSAmJiB1c2VQcm94eSkge1xuICAgICAgICAgICAgYWdlbnQgPSB0aGlzLl9wcm94eUFnZW50O1xuICAgICAgICB9XG4gICAgICAgIGlmICghdXNlUHJveHkpIHtcbiAgICAgICAgICAgIGFnZW50ID0gdGhpcy5fYWdlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgYWdlbnQgaXMgYWxyZWFkeSBhc3NpZ25lZCB1c2UgdGhhdCBhZ2VudC5cbiAgICAgICAgaWYgKGFnZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gYWdlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdXNpbmdTc2wgPSBwYXJzZWRVcmwucHJvdG9jb2wgPT09ICdodHRwczonO1xuICAgICAgICBsZXQgbWF4U29ja2V0cyA9IDEwMDtcbiAgICAgICAgaWYgKHRoaXMucmVxdWVzdE9wdGlvbnMpIHtcbiAgICAgICAgICAgIG1heFNvY2tldHMgPSB0aGlzLnJlcXVlc3RPcHRpb25zLm1heFNvY2tldHMgfHwgaHR0cC5nbG9iYWxBZ2VudC5tYXhTb2NrZXRzO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRoaXMgaXMgYHVzZVByb3h5YCBhZ2FpbiwgYnV0IHdlIG5lZWQgdG8gY2hlY2sgYHByb3h5VVJsYCBkaXJlY3RseSBmb3IgVHlwZVNjcmlwdHMncyBmbG93IGFuYWx5c2lzLlxuICAgICAgICBpZiAocHJveHlVcmwgJiYgcHJveHlVcmwuaG9zdG5hbWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGFnZW50T3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICBtYXhTb2NrZXRzLFxuICAgICAgICAgICAgICAgIGtlZXBBbGl2ZTogdGhpcy5fa2VlcEFsaXZlLFxuICAgICAgICAgICAgICAgIHByb3h5OiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sICgocHJveHlVcmwudXNlcm5hbWUgfHwgcHJveHlVcmwucGFzc3dvcmQpICYmIHtcbiAgICAgICAgICAgICAgICAgICAgcHJveHlBdXRoOiBgJHtwcm94eVVybC51c2VybmFtZX06JHtwcm94eVVybC5wYXNzd29yZH1gXG4gICAgICAgICAgICAgICAgfSkpLCB7IGhvc3Q6IHByb3h5VXJsLmhvc3RuYW1lLCBwb3J0OiBwcm94eVVybC5wb3J0IH0pXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgbGV0IHR1bm5lbEFnZW50O1xuICAgICAgICAgICAgY29uc3Qgb3Zlckh0dHBzID0gcHJveHlVcmwucHJvdG9jb2wgPT09ICdodHRwczonO1xuICAgICAgICAgICAgaWYgKHVzaW5nU3NsKSB7XG4gICAgICAgICAgICAgICAgdHVubmVsQWdlbnQgPSBvdmVySHR0cHMgPyB0dW5uZWwuaHR0cHNPdmVySHR0cHMgOiB0dW5uZWwuaHR0cHNPdmVySHR0cDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHR1bm5lbEFnZW50ID0gb3Zlckh0dHBzID8gdHVubmVsLmh0dHBPdmVySHR0cHMgOiB0dW5uZWwuaHR0cE92ZXJIdHRwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWdlbnQgPSB0dW5uZWxBZ2VudChhZ2VudE9wdGlvbnMpO1xuICAgICAgICAgICAgdGhpcy5fcHJveHlBZ2VudCA9IGFnZW50O1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHR1bm5lbGluZyBhZ2VudCBpc24ndCBhc3NpZ25lZCBjcmVhdGUgYSBuZXcgYWdlbnRcbiAgICAgICAgaWYgKCFhZ2VudCkge1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHsga2VlcEFsaXZlOiB0aGlzLl9rZWVwQWxpdmUsIG1heFNvY2tldHMgfTtcbiAgICAgICAgICAgIGFnZW50ID0gdXNpbmdTc2wgPyBuZXcgaHR0cHMuQWdlbnQob3B0aW9ucykgOiBuZXcgaHR0cC5BZ2VudChvcHRpb25zKTtcbiAgICAgICAgICAgIHRoaXMuX2FnZW50ID0gYWdlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVzaW5nU3NsICYmIHRoaXMuX2lnbm9yZVNzbEVycm9yKSB7XG4gICAgICAgICAgICAvLyB3ZSBkb24ndCB3YW50IHRvIHNldCBOT0RFX1RMU19SRUpFQ1RfVU5BVVRIT1JJWkVEPTAgc2luY2UgdGhhdCB3aWxsIGFmZmVjdCByZXF1ZXN0IGZvciBlbnRpcmUgcHJvY2Vzc1xuICAgICAgICAgICAgLy8gaHR0cC5SZXF1ZXN0T3B0aW9ucyBkb2Vzbid0IGV4cG9zZSBhIHdheSB0byBtb2RpZnkgUmVxdWVzdE9wdGlvbnMuYWdlbnQub3B0aW9uc1xuICAgICAgICAgICAgLy8gd2UgaGF2ZSB0byBjYXN0IGl0IHRvIGFueSBhbmQgY2hhbmdlIGl0IGRpcmVjdGx5XG4gICAgICAgICAgICBhZ2VudC5vcHRpb25zID0gT2JqZWN0LmFzc2lnbihhZ2VudC5vcHRpb25zIHx8IHt9LCB7XG4gICAgICAgICAgICAgICAgcmVqZWN0VW5hdXRob3JpemVkOiBmYWxzZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFnZW50O1xuICAgIH1cbiAgICBfZ2V0UHJveHlBZ2VudERpc3BhdGNoZXIocGFyc2VkVXJsLCBwcm94eVVybCkge1xuICAgICAgICBsZXQgcHJveHlBZ2VudDtcbiAgICAgICAgaWYgKHRoaXMuX2tlZXBBbGl2ZSkge1xuICAgICAgICAgICAgcHJveHlBZ2VudCA9IHRoaXMuX3Byb3h5QWdlbnREaXNwYXRjaGVyO1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIGFnZW50IGlzIGFscmVhZHkgYXNzaWduZWQgdXNlIHRoYXQgYWdlbnQuXG4gICAgICAgIGlmIChwcm94eUFnZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gcHJveHlBZ2VudDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1c2luZ1NzbCA9IHBhcnNlZFVybC5wcm90b2NvbCA9PT0gJ2h0dHBzOic7XG4gICAgICAgIHByb3h5QWdlbnQgPSBuZXcgdW5kaWNpXzEuUHJveHlBZ2VudChPYmplY3QuYXNzaWduKHsgdXJpOiBwcm94eVVybC5ocmVmLCBwaXBlbGluaW5nOiAhdGhpcy5fa2VlcEFsaXZlID8gMCA6IDEgfSwgKChwcm94eVVybC51c2VybmFtZSB8fCBwcm94eVVybC5wYXNzd29yZCkgJiYge1xuICAgICAgICAgICAgdG9rZW46IGBCYXNpYyAke0J1ZmZlci5mcm9tKGAke3Byb3h5VXJsLnVzZXJuYW1lfToke3Byb3h5VXJsLnBhc3N3b3JkfWApLnRvU3RyaW5nKCdiYXNlNjQnKX1gXG4gICAgICAgIH0pKSk7XG4gICAgICAgIHRoaXMuX3Byb3h5QWdlbnREaXNwYXRjaGVyID0gcHJveHlBZ2VudDtcbiAgICAgICAgaWYgKHVzaW5nU3NsICYmIHRoaXMuX2lnbm9yZVNzbEVycm9yKSB7XG4gICAgICAgICAgICAvLyB3ZSBkb24ndCB3YW50IHRvIHNldCBOT0RFX1RMU19SRUpFQ1RfVU5BVVRIT1JJWkVEPTAgc2luY2UgdGhhdCB3aWxsIGFmZmVjdCByZXF1ZXN0IGZvciBlbnRpcmUgcHJvY2Vzc1xuICAgICAgICAgICAgLy8gaHR0cC5SZXF1ZXN0T3B0aW9ucyBkb2Vzbid0IGV4cG9zZSBhIHdheSB0byBtb2RpZnkgUmVxdWVzdE9wdGlvbnMuYWdlbnQub3B0aW9uc1xuICAgICAgICAgICAgLy8gd2UgaGF2ZSB0byBjYXN0IGl0IHRvIGFueSBhbmQgY2hhbmdlIGl0IGRpcmVjdGx5XG4gICAgICAgICAgICBwcm94eUFnZW50Lm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHByb3h5QWdlbnQub3B0aW9ucy5yZXF1ZXN0VGxzIHx8IHt9LCB7XG4gICAgICAgICAgICAgICAgcmVqZWN0VW5hdXRob3JpemVkOiBmYWxzZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb3h5QWdlbnQ7XG4gICAgfVxuICAgIF9wZXJmb3JtRXhwb25lbnRpYWxCYWNrb2ZmKHJldHJ5TnVtYmVyKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICByZXRyeU51bWJlciA9IE1hdGgubWluKEV4cG9uZW50aWFsQmFja29mZkNlaWxpbmcsIHJldHJ5TnVtYmVyKTtcbiAgICAgICAgICAgIGNvbnN0IG1zID0gRXhwb25lbnRpYWxCYWNrb2ZmVGltZVNsaWNlICogTWF0aC5wb3coMiwgcmV0cnlOdW1iZXIpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dCgoKSA9PiByZXNvbHZlKCksIG1zKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfcHJvY2Vzc1Jlc3BvbnNlKHJlcywgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGF0dXNDb2RlID0gcmVzLm1lc3NhZ2Uuc3RhdHVzQ29kZSB8fCAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0ge1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXNDb2RlLFxuICAgICAgICAgICAgICAgICAgICByZXN1bHQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHt9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAvLyBub3QgZm91bmQgbGVhZHMgdG8gbnVsbCBvYmogcmV0dXJuZWRcbiAgICAgICAgICAgICAgICBpZiAoc3RhdHVzQ29kZSA9PT0gSHR0cENvZGVzLk5vdEZvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBnZXQgdGhlIHJlc3VsdCBmcm9tIHRoZSBib2R5XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gZGF0ZVRpbWVEZXNlcmlhbGl6ZXIoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYSA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNOYU4oYS52YWx1ZU9mKCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgb2JqO1xuICAgICAgICAgICAgICAgIGxldCBjb250ZW50cztcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb250ZW50cyA9IHlpZWxkIHJlcy5yZWFkQm9keSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudHMgJiYgY29udGVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5kZXNlcmlhbGl6ZURhdGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqID0gSlNPTi5wYXJzZShjb250ZW50cywgZGF0ZVRpbWVEZXNlcmlhbGl6ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqID0gSlNPTi5wYXJzZShjb250ZW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5yZXN1bHQgPSBvYmo7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuaGVhZGVycyA9IHJlcy5tZXNzYWdlLmhlYWRlcnM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSW52YWxpZCByZXNvdXJjZSAoY29udGVudHMgbm90IGpzb24pOyAgbGVhdmluZyByZXN1bHQgb2JqIG51bGxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gbm90ZSB0aGF0IDN4eCByZWRpcmVjdHMgYXJlIGhhbmRsZWQgYnkgdGhlIGh0dHAgbGF5ZXIuXG4gICAgICAgICAgICAgICAgaWYgKHN0YXR1c0NvZGUgPiAyOTkpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG1zZztcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgZXhjZXB0aW9uL2Vycm9yIGluIGJvZHksIGF0dGVtcHQgdG8gZ2V0IGJldHRlciBlcnJvclxuICAgICAgICAgICAgICAgICAgICBpZiAob2JqICYmIG9iai5tZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSBvYmoubWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb250ZW50cyAmJiBjb250ZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpdCBtYXkgYmUgdGhlIGNhc2UgdGhhdCB0aGUgZXhjZXB0aW9uIGlzIGluIHRoZSBib2R5IG1lc3NhZ2UgYXMgc3RyaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSBjb250ZW50cztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9IGBGYWlsZWQgcmVxdWVzdDogKCR7c3RhdHVzQ29kZX0pYDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnIgPSBuZXcgSHR0cENsaWVudEVycm9yKG1zZywgc3RhdHVzQ29kZSk7XG4gICAgICAgICAgICAgICAgICAgIGVyci5yZXN1bHQgPSByZXNwb25zZS5yZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnRzLkh0dHBDbGllbnQgPSBIdHRwQ2xpZW50O1xuY29uc3QgbG93ZXJjYXNlS2V5cyA9IChvYmopID0+IE9iamVjdC5rZXlzKG9iaikucmVkdWNlKChjLCBrKSA9PiAoKGNbay50b0xvd2VyQ2FzZSgpXSA9IG9ialtrXSksIGMpLCB7fSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlBlcnNvbmFsQWNjZXNzVG9rZW5DcmVkZW50aWFsSGFuZGxlciA9IGV4cG9ydHMuQmVhcmVyQ3JlZGVudGlhbEhhbmRsZXIgPSBleHBvcnRzLkJhc2ljQ3JlZGVudGlhbEhhbmRsZXIgPSB2b2lkIDA7XG5jbGFzcyBCYXNpY0NyZWRlbnRpYWxIYW5kbGVyIHtcbiAgICBjb25zdHJ1Y3Rvcih1c2VybmFtZSwgcGFzc3dvcmQpIHtcbiAgICAgICAgdGhpcy51c2VybmFtZSA9IHVzZXJuYW1lO1xuICAgICAgICB0aGlzLnBhc3N3b3JkID0gcGFzc3dvcmQ7XG4gICAgfVxuICAgIHByZXBhcmVSZXF1ZXN0KG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKCFvcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCdUaGUgcmVxdWVzdCBoYXMgbm8gaGVhZGVycycpO1xuICAgICAgICB9XG4gICAgICAgIG9wdGlvbnMuaGVhZGVyc1snQXV0aG9yaXphdGlvbiddID0gYEJhc2ljICR7QnVmZmVyLmZyb20oYCR7dGhpcy51c2VybmFtZX06JHt0aGlzLnBhc3N3b3JkfWApLnRvU3RyaW5nKCdiYXNlNjQnKX1gO1xuICAgIH1cbiAgICAvLyBUaGlzIGhhbmRsZXIgY2Fubm90IGhhbmRsZSA0MDFcbiAgICBjYW5IYW5kbGVBdXRoZW50aWNhdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBoYW5kbGVBdXRoZW50aWNhdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbm90IGltcGxlbWVudGVkJyk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuQmFzaWNDcmVkZW50aWFsSGFuZGxlciA9IEJhc2ljQ3JlZGVudGlhbEhhbmRsZXI7XG5jbGFzcyBCZWFyZXJDcmVkZW50aWFsSGFuZGxlciB7XG4gICAgY29uc3RydWN0b3IodG9rZW4pIHtcbiAgICAgICAgdGhpcy50b2tlbiA9IHRva2VuO1xuICAgIH1cbiAgICAvLyBjdXJyZW50bHkgaW1wbGVtZW50cyBwcmUtYXV0aG9yaXphdGlvblxuICAgIC8vIFRPRE86IHN1cHBvcnQgcHJlQXV0aCA9IGZhbHNlIHdoZXJlIGl0IGhvb2tzIG9uIDQwMVxuICAgIHByZXBhcmVSZXF1ZXN0KG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKCFvcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCdUaGUgcmVxdWVzdCBoYXMgbm8gaGVhZGVycycpO1xuICAgICAgICB9XG4gICAgICAgIG9wdGlvbnMuaGVhZGVyc1snQXV0aG9yaXphdGlvbiddID0gYEJlYXJlciAke3RoaXMudG9rZW59YDtcbiAgICB9XG4gICAgLy8gVGhpcyBoYW5kbGVyIGNhbm5vdCBoYW5kbGUgNDAxXG4gICAgY2FuSGFuZGxlQXV0aGVudGljYXRpb24oKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaGFuZGxlQXV0aGVudGljYXRpb24oKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBpbXBsZW1lbnRlZCcpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnRzLkJlYXJlckNyZWRlbnRpYWxIYW5kbGVyID0gQmVhcmVyQ3JlZGVudGlhbEhhbmRsZXI7XG5jbGFzcyBQZXJzb25hbEFjY2Vzc1Rva2VuQ3JlZGVudGlhbEhhbmRsZXIge1xuICAgIGNvbnN0cnVjdG9yKHRva2VuKSB7XG4gICAgICAgIHRoaXMudG9rZW4gPSB0b2tlbjtcbiAgICB9XG4gICAgLy8gY3VycmVudGx5IGltcGxlbWVudHMgcHJlLWF1dGhvcml6YXRpb25cbiAgICAvLyBUT0RPOiBzdXBwb3J0IHByZUF1dGggPSBmYWxzZSB3aGVyZSBpdCBob29rcyBvbiA0MDFcbiAgICBwcmVwYXJlUmVxdWVzdChvcHRpb25zKSB7XG4gICAgICAgIGlmICghb3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcignVGhlIHJlcXVlc3QgaGFzIG5vIGhlYWRlcnMnKTtcbiAgICAgICAgfVxuICAgICAgICBvcHRpb25zLmhlYWRlcnNbJ0F1dGhvcml6YXRpb24nXSA9IGBCYXNpYyAke0J1ZmZlci5mcm9tKGBQQVQ6JHt0aGlzLnRva2VufWApLnRvU3RyaW5nKCdiYXNlNjQnKX1gO1xuICAgIH1cbiAgICAvLyBUaGlzIGhhbmRsZXIgY2Fubm90IGhhbmRsZSA0MDFcbiAgICBjYW5IYW5kbGVBdXRoZW50aWNhdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBoYW5kbGVBdXRoZW50aWNhdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbm90IGltcGxlbWVudGVkJyk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuUGVyc29uYWxBY2Nlc3NUb2tlbkNyZWRlbnRpYWxIYW5kbGVyID0gUGVyc29uYWxBY2Nlc3NUb2tlbkNyZWRlbnRpYWxIYW5kbGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXV0aC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk9pZGNDbGllbnQgPSB2b2lkIDA7XG5jb25zdCBodHRwX2NsaWVudF8xID0gcmVxdWlyZShcIkBhY3Rpb25zL2h0dHAtY2xpZW50XCIpO1xuY29uc3QgYXV0aF8xID0gcmVxdWlyZShcIkBhY3Rpb25zL2h0dHAtY2xpZW50L2xpYi9hdXRoXCIpO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIi4vY29yZVwiKTtcbmNsYXNzIE9pZGNDbGllbnQge1xuICAgIHN0YXRpYyBjcmVhdGVIdHRwQ2xpZW50KGFsbG93UmV0cnkgPSB0cnVlLCBtYXhSZXRyeSA9IDEwKSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zID0ge1xuICAgICAgICAgICAgYWxsb3dSZXRyaWVzOiBhbGxvd1JldHJ5LFxuICAgICAgICAgICAgbWF4UmV0cmllczogbWF4UmV0cnlcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG5ldyBodHRwX2NsaWVudF8xLkh0dHBDbGllbnQoJ2FjdGlvbnMvb2lkYy1jbGllbnQnLCBbbmV3IGF1dGhfMS5CZWFyZXJDcmVkZW50aWFsSGFuZGxlcihPaWRjQ2xpZW50LmdldFJlcXVlc3RUb2tlbigpKV0sIHJlcXVlc3RPcHRpb25zKTtcbiAgICB9XG4gICAgc3RhdGljIGdldFJlcXVlc3RUb2tlbigpIHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSBwcm9jZXNzLmVudlsnQUNUSU9OU19JRF9UT0tFTl9SRVFVRVNUX1RPS0VOJ107XG4gICAgICAgIGlmICghdG9rZW4pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGdldCBBQ1RJT05TX0lEX1RPS0VOX1JFUVVFU1RfVE9LRU4gZW52IHZhcmlhYmxlJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgIH1cbiAgICBzdGF0aWMgZ2V0SURUb2tlblVybCgpIHtcbiAgICAgICAgY29uc3QgcnVudGltZVVybCA9IHByb2Nlc3MuZW52WydBQ1RJT05TX0lEX1RPS0VOX1JFUVVFU1RfVVJMJ107XG4gICAgICAgIGlmICghcnVudGltZVVybCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gZ2V0IEFDVElPTlNfSURfVE9LRU5fUkVRVUVTVF9VUkwgZW52IHZhcmlhYmxlJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJ1bnRpbWVVcmw7XG4gICAgfVxuICAgIHN0YXRpYyBnZXRDYWxsKGlkX3Rva2VuX3VybCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCBodHRwY2xpZW50ID0gT2lkY0NsaWVudC5jcmVhdGVIdHRwQ2xpZW50KCk7XG4gICAgICAgICAgICBjb25zdCByZXMgPSB5aWVsZCBodHRwY2xpZW50XG4gICAgICAgICAgICAgICAgLmdldEpzb24oaWRfdG9rZW5fdXJsKVxuICAgICAgICAgICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZ2V0IElEIFRva2VuLiBcXG4gXG4gICAgICAgIEVycm9yIENvZGUgOiAke2Vycm9yLnN0YXR1c0NvZGV9XFxuIFxuICAgICAgICBFcnJvciBNZXNzYWdlOiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGlkX3Rva2VuID0gKF9hID0gcmVzLnJlc3VsdCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlO1xuICAgICAgICAgICAgaWYgKCFpZF90b2tlbikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVzcG9uc2UganNvbiBib2R5IGRvIG5vdCBoYXZlIElEIFRva2VuIGZpZWxkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaWRfdG9rZW47XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBzdGF0aWMgZ2V0SURUb2tlbihhdWRpZW5jZSkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAvLyBOZXcgSUQgVG9rZW4gaXMgcmVxdWVzdGVkIGZyb20gYWN0aW9uIHNlcnZpY2VcbiAgICAgICAgICAgICAgICBsZXQgaWRfdG9rZW5fdXJsID0gT2lkY0NsaWVudC5nZXRJRFRva2VuVXJsKCk7XG4gICAgICAgICAgICAgICAgaWYgKGF1ZGllbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuY29kZWRBdWRpZW5jZSA9IGVuY29kZVVSSUNvbXBvbmVudChhdWRpZW5jZSk7XG4gICAgICAgICAgICAgICAgICAgIGlkX3Rva2VuX3VybCA9IGAke2lkX3Rva2VuX3VybH0mYXVkaWVuY2U9JHtlbmNvZGVkQXVkaWVuY2V9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKDAsIGNvcmVfMS5kZWJ1ZykoYElEIHRva2VuIHVybCBpcyAke2lkX3Rva2VuX3VybH1gKTtcbiAgICAgICAgICAgICAgICBjb25zdCBpZF90b2tlbiA9IHlpZWxkIE9pZGNDbGllbnQuZ2V0Q2FsbChpZF90b2tlbl91cmwpO1xuICAgICAgICAgICAgICAgICgwLCBjb3JlXzEuc2V0U2VjcmV0KShpZF90b2tlbik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlkX3Rva2VuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBtZXNzYWdlOiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuT2lkY0NsaWVudCA9IE9pZGNDbGllbnQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1vaWRjLXV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc3VtbWFyeSA9IGV4cG9ydHMubWFya2Rvd25TdW1tYXJ5ID0gZXhwb3J0cy5TVU1NQVJZX0RPQ1NfVVJMID0gZXhwb3J0cy5TVU1NQVJZX0VOVl9WQVIgPSB2b2lkIDA7XG5jb25zdCBvc18xID0gcmVxdWlyZShcIm9zXCIpO1xuY29uc3QgZnNfMSA9IHJlcXVpcmUoXCJmc1wiKTtcbmNvbnN0IHsgYWNjZXNzLCBhcHBlbmRGaWxlLCB3cml0ZUZpbGUgfSA9IGZzXzEucHJvbWlzZXM7XG5leHBvcnRzLlNVTU1BUllfRU5WX1ZBUiA9ICdHSVRIVUJfU1RFUF9TVU1NQVJZJztcbmV4cG9ydHMuU1VNTUFSWV9ET0NTX1VSTCA9ICdodHRwczovL2RvY3MuZ2l0aHViLmNvbS9hY3Rpb25zL3VzaW5nLXdvcmtmbG93cy93b3JrZmxvdy1jb21tYW5kcy1mb3ItZ2l0aHViLWFjdGlvbnMjYWRkaW5nLWEtam9iLXN1bW1hcnknO1xuY2xhc3MgU3VtbWFyeSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuX2J1ZmZlciA9ICcnO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBGaW5kcyB0aGUgc3VtbWFyeSBmaWxlIHBhdGggZnJvbSB0aGUgZW52aXJvbm1lbnQsIHJlamVjdHMgaWYgZW52IHZhciBpcyBub3QgZm91bmQgb3IgZmlsZSBkb2VzIG5vdCBleGlzdFxuICAgICAqIEFsc28gY2hlY2tzIHIvdyBwZXJtaXNzaW9ucy5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHN0ZXAgc3VtbWFyeSBmaWxlIHBhdGhcbiAgICAgKi9cbiAgICBmaWxlUGF0aCgpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9maWxlUGF0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9maWxlUGF0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHBhdGhGcm9tRW52ID0gcHJvY2Vzcy5lbnZbZXhwb3J0cy5TVU1NQVJZX0VOVl9WQVJdO1xuICAgICAgICAgICAgaWYgKCFwYXRoRnJvbUVudikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGZpbmQgZW52aXJvbm1lbnQgdmFyaWFibGUgZm9yICQke2V4cG9ydHMuU1VNTUFSWV9FTlZfVkFSfS4gQ2hlY2sgaWYgeW91ciBydW50aW1lIGVudmlyb25tZW50IHN1cHBvcnRzIGpvYiBzdW1tYXJpZXMuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHlpZWxkIGFjY2VzcyhwYXRoRnJvbUVudiwgZnNfMS5jb25zdGFudHMuUl9PSyB8IGZzXzEuY29uc3RhbnRzLldfT0spO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gYWNjZXNzIHN1bW1hcnkgZmlsZTogJyR7cGF0aEZyb21FbnZ9Jy4gQ2hlY2sgaWYgdGhlIGZpbGUgaGFzIGNvcnJlY3QgcmVhZC93cml0ZSBwZXJtaXNzaW9ucy5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX2ZpbGVQYXRoID0gcGF0aEZyb21FbnY7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZmlsZVBhdGg7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXcmFwcyBjb250ZW50IGluIGFuIEhUTUwgdGFnLCBhZGRpbmcgYW55IEhUTUwgYXR0cmlidXRlc1xuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRhZyBIVE1MIHRhZyB0byB3cmFwXG4gICAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsfSBjb250ZW50IGNvbnRlbnQgd2l0aGluIHRoZSB0YWdcbiAgICAgKiBAcGFyYW0ge1thdHRyaWJ1dGU6IHN0cmluZ106IHN0cmluZ30gYXR0cnMga2V5LXZhbHVlIGxpc3Qgb2YgSFRNTCBhdHRyaWJ1dGVzIHRvIGFkZFxuICAgICAqXG4gICAgICogQHJldHVybnMge3N0cmluZ30gY29udGVudCB3cmFwcGVkIGluIEhUTUwgZWxlbWVudFxuICAgICAqL1xuICAgIHdyYXAodGFnLCBjb250ZW50LCBhdHRycyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IGh0bWxBdHRycyA9IE9iamVjdC5lbnRyaWVzKGF0dHJzKVxuICAgICAgICAgICAgLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBgICR7a2V5fT1cIiR7dmFsdWV9XCJgKVxuICAgICAgICAgICAgLmpvaW4oJycpO1xuICAgICAgICBpZiAoIWNvbnRlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBgPCR7dGFnfSR7aHRtbEF0dHJzfT5gO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgPCR7dGFnfSR7aHRtbEF0dHJzfT4ke2NvbnRlbnR9PC8ke3RhZ30+YDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGVzIHRleHQgaW4gdGhlIGJ1ZmZlciB0byB0aGUgc3VtbWFyeSBidWZmZXIgZmlsZSBhbmQgZW1wdGllcyBidWZmZXIuIFdpbGwgYXBwZW5kIGJ5IGRlZmF1bHQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N1bW1hcnlXcml0ZU9wdGlvbnN9IFtvcHRpb25zXSAob3B0aW9uYWwpIG9wdGlvbnMgZm9yIHdyaXRlIG9wZXJhdGlvblxuICAgICAqXG4gICAgICogQHJldHVybnMge1Byb21pc2U8U3VtbWFyeT59IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICB3cml0ZShvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCBvdmVyd3JpdGUgPSAhIShvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMub3ZlcndyaXRlKTtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVQYXRoID0geWllbGQgdGhpcy5maWxlUGF0aCgpO1xuICAgICAgICAgICAgY29uc3Qgd3JpdGVGdW5jID0gb3ZlcndyaXRlID8gd3JpdGVGaWxlIDogYXBwZW5kRmlsZTtcbiAgICAgICAgICAgIHlpZWxkIHdyaXRlRnVuYyhmaWxlUGF0aCwgdGhpcy5fYnVmZmVyLCB7IGVuY29kaW5nOiAndXRmOCcgfSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lbXB0eUJ1ZmZlcigpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2xlYXJzIHRoZSBzdW1tYXJ5IGJ1ZmZlciBhbmQgd2lwZXMgdGhlIHN1bW1hcnkgZmlsZVxuICAgICAqXG4gICAgICogQHJldHVybnMge1N1bW1hcnl9IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBjbGVhcigpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVtcHR5QnVmZmVyKCkud3JpdGUoeyBvdmVyd3JpdGU6IHRydWUgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHN1bW1hcnkgYnVmZmVyIGFzIGEgc3RyaW5nXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBzdHJpbmcgb2Ygc3VtbWFyeSBidWZmZXJcbiAgICAgKi9cbiAgICBzdHJpbmdpZnkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9idWZmZXI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElmIHRoZSBzdW1tYXJ5IGJ1ZmZlciBpcyBlbXB0eVxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlbn0gdHJ1ZSBpZiB0aGUgYnVmZmVyIGlzIGVtcHR5XG4gICAgICovXG4gICAgaXNFbXB0eUJ1ZmZlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlci5sZW5ndGggPT09IDA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlc2V0cyB0aGUgc3VtbWFyeSBidWZmZXIgd2l0aG91dCB3cml0aW5nIHRvIHN1bW1hcnkgZmlsZVxuICAgICAqXG4gICAgICogQHJldHVybnMge1N1bW1hcnl9IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBlbXB0eUJ1ZmZlcigpIHtcbiAgICAgICAgdGhpcy5fYnVmZmVyID0gJyc7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIHJhdyB0ZXh0IHRvIHRoZSBzdW1tYXJ5IGJ1ZmZlclxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgY29udGVudCB0byBhZGRcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthZGRFT0w9ZmFsc2VdIChvcHRpb25hbCkgYXBwZW5kIGFuIEVPTCB0byB0aGUgcmF3IHRleHQgKGRlZmF1bHQ6IGZhbHNlKVxuICAgICAqXG4gICAgICogQHJldHVybnMge1N1bW1hcnl9IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBhZGRSYXcodGV4dCwgYWRkRU9MID0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5fYnVmZmVyICs9IHRleHQ7XG4gICAgICAgIHJldHVybiBhZGRFT0wgPyB0aGlzLmFkZEVPTCgpIDogdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyB0aGUgb3BlcmF0aW5nIHN5c3RlbS1zcGVjaWZpYyBlbmQtb2YtbGluZSBtYXJrZXIgdG8gdGhlIGJ1ZmZlclxuICAgICAqXG4gICAgICogQHJldHVybnMge1N1bW1hcnl9IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBhZGRFT0woKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZFJhdyhvc18xLkVPTCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYW4gSFRNTCBjb2RlYmxvY2sgdG8gdGhlIHN1bW1hcnkgYnVmZmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY29kZSBjb250ZW50IHRvIHJlbmRlciB3aXRoaW4gZmVuY2VkIGNvZGUgYmxvY2tcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbGFuZyAob3B0aW9uYWwpIGxhbmd1YWdlIHRvIHN5bnRheCBoaWdobGlnaHQgY29kZVxuICAgICAqXG4gICAgICogQHJldHVybnMge1N1bW1hcnl9IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBhZGRDb2RlQmxvY2soY29kZSwgbGFuZykge1xuICAgICAgICBjb25zdCBhdHRycyA9IE9iamVjdC5hc3NpZ24oe30sIChsYW5nICYmIHsgbGFuZyB9KSk7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLndyYXAoJ3ByZScsIHRoaXMud3JhcCgnY29kZScsIGNvZGUpLCBhdHRycyk7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZFJhdyhlbGVtZW50KS5hZGRFT0woKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhbiBIVE1MIGxpc3QgdG8gdGhlIHN1bW1hcnkgYnVmZmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBpdGVtcyBsaXN0IG9mIGl0ZW1zIHRvIHJlbmRlclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29yZGVyZWQ9ZmFsc2VdIChvcHRpb25hbCkgaWYgdGhlIHJlbmRlcmVkIGxpc3Qgc2hvdWxkIGJlIG9yZGVyZWQgb3Igbm90IChkZWZhdWx0OiBmYWxzZSlcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtTdW1tYXJ5fSBzdW1tYXJ5IGluc3RhbmNlXG4gICAgICovXG4gICAgYWRkTGlzdChpdGVtcywgb3JkZXJlZCA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IHRhZyA9IG9yZGVyZWQgPyAnb2wnIDogJ3VsJztcbiAgICAgICAgY29uc3QgbGlzdEl0ZW1zID0gaXRlbXMubWFwKGl0ZW0gPT4gdGhpcy53cmFwKCdsaScsIGl0ZW0pKS5qb2luKCcnKTtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMud3JhcCh0YWcsIGxpc3RJdGVtcyk7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZFJhdyhlbGVtZW50KS5hZGRFT0woKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhbiBIVE1MIHRhYmxlIHRvIHRoZSBzdW1tYXJ5IGJ1ZmZlclxuICAgICAqXG4gICAgICogQHBhcmFtIHtTdW1tYXJ5VGFibGVDZWxsW119IHJvd3MgdGFibGUgcm93c1xuICAgICAqXG4gICAgICogQHJldHVybnMge1N1bW1hcnl9IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBhZGRUYWJsZShyb3dzKSB7XG4gICAgICAgIGNvbnN0IHRhYmxlQm9keSA9IHJvd3NcbiAgICAgICAgICAgIC5tYXAocm93ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNlbGxzID0gcm93XG4gICAgICAgICAgICAgICAgLm1hcChjZWxsID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNlbGwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLndyYXAoJ3RkJywgY2VsbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHsgaGVhZGVyLCBkYXRhLCBjb2xzcGFuLCByb3dzcGFuIH0gPSBjZWxsO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhZyA9IGhlYWRlciA/ICd0aCcgOiAndGQnO1xuICAgICAgICAgICAgICAgIGNvbnN0IGF0dHJzID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCAoY29sc3BhbiAmJiB7IGNvbHNwYW4gfSkpLCAocm93c3BhbiAmJiB7IHJvd3NwYW4gfSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLndyYXAodGFnLCBkYXRhLCBhdHRycyk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5qb2luKCcnKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLndyYXAoJ3RyJywgY2VsbHMpO1xuICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oJycpO1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy53cmFwKCd0YWJsZScsIHRhYmxlQm9keSk7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZFJhdyhlbGVtZW50KS5hZGRFT0woKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhIGNvbGxhcHNhYmxlIEhUTUwgZGV0YWlscyBlbGVtZW50IHRvIHRoZSBzdW1tYXJ5IGJ1ZmZlclxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGxhYmVsIHRleHQgZm9yIHRoZSBjbG9zZWQgc3RhdGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCBjb2xsYXBzYWJsZSBjb250ZW50XG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7U3VtbWFyeX0gc3VtbWFyeSBpbnN0YW5jZVxuICAgICAqL1xuICAgIGFkZERldGFpbHMobGFiZWwsIGNvbnRlbnQpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMud3JhcCgnZGV0YWlscycsIHRoaXMud3JhcCgnc3VtbWFyeScsIGxhYmVsKSArIGNvbnRlbnQpO1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRSYXcoZWxlbWVudCkuYWRkRU9MKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYW4gSFRNTCBpbWFnZSB0YWcgdG8gdGhlIHN1bW1hcnkgYnVmZmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3JjIHBhdGggdG8gdGhlIGltYWdlIHlvdSB0byBlbWJlZFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhbHQgdGV4dCBkZXNjcmlwdGlvbiBvZiB0aGUgaW1hZ2VcbiAgICAgKiBAcGFyYW0ge1N1bW1hcnlJbWFnZU9wdGlvbnN9IG9wdGlvbnMgKG9wdGlvbmFsKSBhZGRpdGlvbiBpbWFnZSBhdHRyaWJ1dGVzXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7U3VtbWFyeX0gc3VtbWFyeSBpbnN0YW5jZVxuICAgICAqL1xuICAgIGFkZEltYWdlKHNyYywgYWx0LCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgY29uc3QgYXR0cnMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sICh3aWR0aCAmJiB7IHdpZHRoIH0pKSwgKGhlaWdodCAmJiB7IGhlaWdodCB9KSk7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLndyYXAoJ2ltZycsIG51bGwsIE9iamVjdC5hc3NpZ24oeyBzcmMsIGFsdCB9LCBhdHRycykpO1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRSYXcoZWxlbWVudCkuYWRkRU9MKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYW4gSFRNTCBzZWN0aW9uIGhlYWRpbmcgZWxlbWVudFxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgaGVhZGluZyB0ZXh0XG4gICAgICogQHBhcmFtIHtudW1iZXIgfCBzdHJpbmd9IFtsZXZlbD0xXSAob3B0aW9uYWwpIHRoZSBoZWFkaW5nIGxldmVsLCBkZWZhdWx0OiAxXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7U3VtbWFyeX0gc3VtbWFyeSBpbnN0YW5jZVxuICAgICAqL1xuICAgIGFkZEhlYWRpbmcodGV4dCwgbGV2ZWwpIHtcbiAgICAgICAgY29uc3QgdGFnID0gYGgke2xldmVsfWA7XG4gICAgICAgIGNvbnN0IGFsbG93ZWRUYWcgPSBbJ2gxJywgJ2gyJywgJ2gzJywgJ2g0JywgJ2g1JywgJ2g2J10uaW5jbHVkZXModGFnKVxuICAgICAgICAgICAgPyB0YWdcbiAgICAgICAgICAgIDogJ2gxJztcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMud3JhcChhbGxvd2VkVGFnLCB0ZXh0KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkUmF3KGVsZW1lbnQpLmFkZEVPTCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGFuIEhUTUwgdGhlbWF0aWMgYnJlYWsgKDxocj4pIHRvIHRoZSBzdW1tYXJ5IGJ1ZmZlclxuICAgICAqXG4gICAgICogQHJldHVybnMge1N1bW1hcnl9IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBhZGRTZXBhcmF0b3IoKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLndyYXAoJ2hyJywgbnVsbCk7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZFJhdyhlbGVtZW50KS5hZGRFT0woKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhbiBIVE1MIGxpbmUgYnJlYWsgKDxicj4pIHRvIHRoZSBzdW1tYXJ5IGJ1ZmZlclxuICAgICAqXG4gICAgICogQHJldHVybnMge1N1bW1hcnl9IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBhZGRCcmVhaygpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMud3JhcCgnYnInLCBudWxsKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkUmF3KGVsZW1lbnQpLmFkZEVPTCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGFuIEhUTUwgYmxvY2txdW90ZSB0byB0aGUgc3VtbWFyeSBidWZmZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IHF1b3RlIHRleHRcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY2l0ZSAob3B0aW9uYWwpIGNpdGF0aW9uIHVybFxuICAgICAqXG4gICAgICogQHJldHVybnMge1N1bW1hcnl9IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBhZGRRdW90ZSh0ZXh0LCBjaXRlKSB7XG4gICAgICAgIGNvbnN0IGF0dHJzID0gT2JqZWN0LmFzc2lnbih7fSwgKGNpdGUgJiYgeyBjaXRlIH0pKTtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMud3JhcCgnYmxvY2txdW90ZScsIHRleHQsIGF0dHJzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkUmF3KGVsZW1lbnQpLmFkZEVPTCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGFuIEhUTUwgYW5jaG9yIHRhZyB0byB0aGUgc3VtbWFyeSBidWZmZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IGxpbmsgdGV4dC9jb250ZW50XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGhyZWYgaHlwZXJsaW5rXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7U3VtbWFyeX0gc3VtbWFyeSBpbnN0YW5jZVxuICAgICAqL1xuICAgIGFkZExpbmsodGV4dCwgaHJlZikge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy53cmFwKCdhJywgdGV4dCwgeyBocmVmIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRSYXcoZWxlbWVudCkuYWRkRU9MKCk7XG4gICAgfVxufVxuY29uc3QgX3N1bW1hcnkgPSBuZXcgU3VtbWFyeSgpO1xuLyoqXG4gKiBAZGVwcmVjYXRlZCB1c2UgYGNvcmUuc3VtbWFyeWBcbiAqL1xuZXhwb3J0cy5tYXJrZG93blN1bW1hcnkgPSBfc3VtbWFyeTtcbmV4cG9ydHMuc3VtbWFyeSA9IF9zdW1tYXJ5O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3VtbWFyeS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRvUGxhdGZvcm1QYXRoID0gZXhwb3J0cy50b1dpbjMyUGF0aCA9IGV4cG9ydHMudG9Qb3NpeFBhdGggPSB2b2lkIDA7XG5jb25zdCBwYXRoID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJwYXRoXCIpKTtcbi8qKlxuICogdG9Qb3NpeFBhdGggY29udmVydHMgdGhlIGdpdmVuIHBhdGggdG8gdGhlIHBvc2l4IGZvcm0uIE9uIFdpbmRvd3MsIFxcXFwgd2lsbCBiZVxuICogcmVwbGFjZWQgd2l0aCAvLlxuICpcbiAqIEBwYXJhbSBwdGguIFBhdGggdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiBzdHJpbmcgUG9zaXggcGF0aC5cbiAqL1xuZnVuY3Rpb24gdG9Qb3NpeFBhdGgocHRoKSB7XG4gICAgcmV0dXJuIHB0aC5yZXBsYWNlKC9bXFxcXF0vZywgJy8nKTtcbn1cbmV4cG9ydHMudG9Qb3NpeFBhdGggPSB0b1Bvc2l4UGF0aDtcbi8qKlxuICogdG9XaW4zMlBhdGggY29udmVydHMgdGhlIGdpdmVuIHBhdGggdG8gdGhlIHdpbjMyIGZvcm0uIE9uIExpbnV4LCAvIHdpbGwgYmVcbiAqIHJlcGxhY2VkIHdpdGggXFxcXC5cbiAqXG4gKiBAcGFyYW0gcHRoLiBQYXRoIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4gc3RyaW5nIFdpbjMyIHBhdGguXG4gKi9cbmZ1bmN0aW9uIHRvV2luMzJQYXRoKHB0aCkge1xuICAgIHJldHVybiBwdGgucmVwbGFjZSgvWy9dL2csICdcXFxcJyk7XG59XG5leHBvcnRzLnRvV2luMzJQYXRoID0gdG9XaW4zMlBhdGg7XG4vKipcbiAqIHRvUGxhdGZvcm1QYXRoIGNvbnZlcnRzIHRoZSBnaXZlbiBwYXRoIHRvIGEgcGxhdGZvcm0tc3BlY2lmaWMgcGF0aC4gSXQgZG9lc1xuICogdGhpcyBieSByZXBsYWNpbmcgaW5zdGFuY2VzIG9mIC8gYW5kIFxcIHdpdGggdGhlIHBsYXRmb3JtLXNwZWNpZmljIHBhdGhcbiAqIHNlcGFyYXRvci5cbiAqXG4gKiBAcGFyYW0gcHRoIFRoZSBwYXRoIHRvIHBsYXRmb3JtaXplLlxuICogQHJldHVybiBzdHJpbmcgVGhlIHBsYXRmb3JtLXNwZWNpZmljIHBhdGguXG4gKi9cbmZ1bmN0aW9uIHRvUGxhdGZvcm1QYXRoKHB0aCkge1xuICAgIHJldHVybiBwdGgucmVwbGFjZSgvWy9cXFxcXS9nLCBwYXRoLnNlcCk7XG59XG5leHBvcnRzLnRvUGxhdGZvcm1QYXRoID0gdG9QbGF0Zm9ybVBhdGg7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wYXRoLXV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXREZXRhaWxzID0gZXhwb3J0cy5pc0xpbnV4ID0gZXhwb3J0cy5pc01hY09TID0gZXhwb3J0cy5pc1dpbmRvd3MgPSBleHBvcnRzLmFyY2ggPSBleHBvcnRzLnBsYXRmb3JtID0gdm9pZCAwO1xuY29uc3Qgb3NfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwib3NcIikpO1xuY29uc3QgZXhlYyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiQGFjdGlvbnMvZXhlY1wiKSk7XG5jb25zdCBnZXRXaW5kb3dzSW5mbyA9ICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgIGNvbnN0IHsgc3Rkb3V0OiB2ZXJzaW9uIH0gPSB5aWVsZCBleGVjLmdldEV4ZWNPdXRwdXQoJ3Bvd2Vyc2hlbGwgLWNvbW1hbmQgXCIoR2V0LUNpbUluc3RhbmNlIC1DbGFzc05hbWUgV2luMzJfT3BlcmF0aW5nU3lzdGVtKS5WZXJzaW9uXCInLCB1bmRlZmluZWQsIHtcbiAgICAgICAgc2lsZW50OiB0cnVlXG4gICAgfSk7XG4gICAgY29uc3QgeyBzdGRvdXQ6IG5hbWUgfSA9IHlpZWxkIGV4ZWMuZ2V0RXhlY091dHB1dCgncG93ZXJzaGVsbCAtY29tbWFuZCBcIihHZXQtQ2ltSW5zdGFuY2UgLUNsYXNzTmFtZSBXaW4zMl9PcGVyYXRpbmdTeXN0ZW0pLkNhcHRpb25cIicsIHVuZGVmaW5lZCwge1xuICAgICAgICBzaWxlbnQ6IHRydWVcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBuYW1lLnRyaW0oKSxcbiAgICAgICAgdmVyc2lvbjogdmVyc2lvbi50cmltKClcbiAgICB9O1xufSk7XG5jb25zdCBnZXRNYWNPc0luZm8gPSAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICB2YXIgX2EsIF9iLCBfYywgX2Q7XG4gICAgY29uc3QgeyBzdGRvdXQgfSA9IHlpZWxkIGV4ZWMuZ2V0RXhlY091dHB1dCgnc3dfdmVycycsIHVuZGVmaW5lZCwge1xuICAgICAgICBzaWxlbnQ6IHRydWVcbiAgICB9KTtcbiAgICBjb25zdCB2ZXJzaW9uID0gKF9iID0gKF9hID0gc3Rkb3V0Lm1hdGNoKC9Qcm9kdWN0VmVyc2lvbjpcXHMqKC4rKS8pKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2FbMV0pICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xuICAgIGNvbnN0IG5hbWUgPSAoX2QgPSAoX2MgPSBzdGRvdXQubWF0Y2goL1Byb2R1Y3ROYW1lOlxccyooLispLykpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfY1sxXSkgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDogJyc7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgdmVyc2lvblxuICAgIH07XG59KTtcbmNvbnN0IGdldExpbnV4SW5mbyA9ICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgIGNvbnN0IHsgc3Rkb3V0IH0gPSB5aWVsZCBleGVjLmdldEV4ZWNPdXRwdXQoJ2xzYl9yZWxlYXNlJywgWyctaScsICctcicsICctcyddLCB7XG4gICAgICAgIHNpbGVudDogdHJ1ZVxuICAgIH0pO1xuICAgIGNvbnN0IFtuYW1lLCB2ZXJzaW9uXSA9IHN0ZG91dC50cmltKCkuc3BsaXQoJ1xcbicpO1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWUsXG4gICAgICAgIHZlcnNpb25cbiAgICB9O1xufSk7XG5leHBvcnRzLnBsYXRmb3JtID0gb3NfMS5kZWZhdWx0LnBsYXRmb3JtKCk7XG5leHBvcnRzLmFyY2ggPSBvc18xLmRlZmF1bHQuYXJjaCgpO1xuZXhwb3J0cy5pc1dpbmRvd3MgPSBleHBvcnRzLnBsYXRmb3JtID09PSAnd2luMzInO1xuZXhwb3J0cy5pc01hY09TID0gZXhwb3J0cy5wbGF0Zm9ybSA9PT0gJ2Rhcndpbic7XG5leHBvcnRzLmlzTGludXggPSBleHBvcnRzLnBsYXRmb3JtID09PSAnbGludXgnO1xuZnVuY3Rpb24gZ2V0RGV0YWlscygpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCAoeWllbGQgKGV4cG9ydHMuaXNXaW5kb3dzXG4gICAgICAgICAgICA/IGdldFdpbmRvd3NJbmZvKClcbiAgICAgICAgICAgIDogZXhwb3J0cy5pc01hY09TXG4gICAgICAgICAgICAgICAgPyBnZXRNYWNPc0luZm8oKVxuICAgICAgICAgICAgICAgIDogZ2V0TGludXhJbmZvKCkpKSksIHsgcGxhdGZvcm06IGV4cG9ydHMucGxhdGZvcm0sXG4gICAgICAgICAgICBhcmNoOiBleHBvcnRzLmFyY2gsXG4gICAgICAgICAgICBpc1dpbmRvd3M6IGV4cG9ydHMuaXNXaW5kb3dzLFxuICAgICAgICAgICAgaXNNYWNPUzogZXhwb3J0cy5pc01hY09TLFxuICAgICAgICAgICAgaXNMaW51eDogZXhwb3J0cy5pc0xpbnV4IH0pO1xuICAgIH0pO1xufVxuZXhwb3J0cy5nZXREZXRhaWxzID0gZ2V0RGV0YWlscztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBsYXRmb3JtLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5wbGF0Zm9ybSA9IGV4cG9ydHMudG9QbGF0Zm9ybVBhdGggPSBleHBvcnRzLnRvV2luMzJQYXRoID0gZXhwb3J0cy50b1Bvc2l4UGF0aCA9IGV4cG9ydHMubWFya2Rvd25TdW1tYXJ5ID0gZXhwb3J0cy5zdW1tYXJ5ID0gZXhwb3J0cy5nZXRJRFRva2VuID0gZXhwb3J0cy5nZXRTdGF0ZSA9IGV4cG9ydHMuc2F2ZVN0YXRlID0gZXhwb3J0cy5ncm91cCA9IGV4cG9ydHMuZW5kR3JvdXAgPSBleHBvcnRzLnN0YXJ0R3JvdXAgPSBleHBvcnRzLmluZm8gPSBleHBvcnRzLm5vdGljZSA9IGV4cG9ydHMud2FybmluZyA9IGV4cG9ydHMuZXJyb3IgPSBleHBvcnRzLmRlYnVnID0gZXhwb3J0cy5pc0RlYnVnID0gZXhwb3J0cy5zZXRGYWlsZWQgPSBleHBvcnRzLnNldENvbW1hbmRFY2hvID0gZXhwb3J0cy5zZXRPdXRwdXQgPSBleHBvcnRzLmdldEJvb2xlYW5JbnB1dCA9IGV4cG9ydHMuZ2V0TXVsdGlsaW5lSW5wdXQgPSBleHBvcnRzLmdldElucHV0ID0gZXhwb3J0cy5hZGRQYXRoID0gZXhwb3J0cy5zZXRTZWNyZXQgPSBleHBvcnRzLmV4cG9ydFZhcmlhYmxlID0gZXhwb3J0cy5FeGl0Q29kZSA9IHZvaWQgMDtcbmNvbnN0IGNvbW1hbmRfMSA9IHJlcXVpcmUoXCIuL2NvbW1hbmRcIik7XG5jb25zdCBmaWxlX2NvbW1hbmRfMSA9IHJlcXVpcmUoXCIuL2ZpbGUtY29tbWFuZFwiKTtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi91dGlsc1wiKTtcbmNvbnN0IG9zID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJvc1wiKSk7XG5jb25zdCBwYXRoID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJwYXRoXCIpKTtcbmNvbnN0IG9pZGNfdXRpbHNfMSA9IHJlcXVpcmUoXCIuL29pZGMtdXRpbHNcIik7XG4vKipcbiAqIFRoZSBjb2RlIHRvIGV4aXQgYW4gYWN0aW9uXG4gKi9cbnZhciBFeGl0Q29kZTtcbihmdW5jdGlvbiAoRXhpdENvZGUpIHtcbiAgICAvKipcbiAgICAgKiBBIGNvZGUgaW5kaWNhdGluZyB0aGF0IHRoZSBhY3Rpb24gd2FzIHN1Y2Nlc3NmdWxcbiAgICAgKi9cbiAgICBFeGl0Q29kZVtFeGl0Q29kZVtcIlN1Y2Nlc3NcIl0gPSAwXSA9IFwiU3VjY2Vzc1wiO1xuICAgIC8qKlxuICAgICAqIEEgY29kZSBpbmRpY2F0aW5nIHRoYXQgdGhlIGFjdGlvbiB3YXMgYSBmYWlsdXJlXG4gICAgICovXG4gICAgRXhpdENvZGVbRXhpdENvZGVbXCJGYWlsdXJlXCJdID0gMV0gPSBcIkZhaWx1cmVcIjtcbn0pKEV4aXRDb2RlIHx8IChleHBvcnRzLkV4aXRDb2RlID0gRXhpdENvZGUgPSB7fSkpO1xuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVmFyaWFibGVzXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vKipcbiAqIFNldHMgZW52IHZhcmlhYmxlIGZvciB0aGlzIGFjdGlvbiBhbmQgZnV0dXJlIGFjdGlvbnMgaW4gdGhlIGpvYlxuICogQHBhcmFtIG5hbWUgdGhlIG5hbWUgb2YgdGhlIHZhcmlhYmxlIHRvIHNldFxuICogQHBhcmFtIHZhbCB0aGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlLiBOb24tc3RyaW5nIHZhbHVlcyB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIHN0cmluZyB2aWEgSlNPTi5zdHJpbmdpZnlcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmZ1bmN0aW9uIGV4cG9ydFZhcmlhYmxlKG5hbWUsIHZhbCkge1xuICAgIGNvbnN0IGNvbnZlcnRlZFZhbCA9ICgwLCB1dGlsc18xLnRvQ29tbWFuZFZhbHVlKSh2YWwpO1xuICAgIHByb2Nlc3MuZW52W25hbWVdID0gY29udmVydGVkVmFsO1xuICAgIGNvbnN0IGZpbGVQYXRoID0gcHJvY2Vzcy5lbnZbJ0dJVEhVQl9FTlYnXSB8fCAnJztcbiAgICBpZiAoZmlsZVBhdGgpIHtcbiAgICAgICAgcmV0dXJuICgwLCBmaWxlX2NvbW1hbmRfMS5pc3N1ZUZpbGVDb21tYW5kKSgnRU5WJywgKDAsIGZpbGVfY29tbWFuZF8xLnByZXBhcmVLZXlWYWx1ZU1lc3NhZ2UpKG5hbWUsIHZhbCkpO1xuICAgIH1cbiAgICAoMCwgY29tbWFuZF8xLmlzc3VlQ29tbWFuZCkoJ3NldC1lbnYnLCB7IG5hbWUgfSwgY29udmVydGVkVmFsKTtcbn1cbmV4cG9ydHMuZXhwb3J0VmFyaWFibGUgPSBleHBvcnRWYXJpYWJsZTtcbi8qKlxuICogUmVnaXN0ZXJzIGEgc2VjcmV0IHdoaWNoIHdpbGwgZ2V0IG1hc2tlZCBmcm9tIGxvZ3NcbiAqIEBwYXJhbSBzZWNyZXQgdmFsdWUgb2YgdGhlIHNlY3JldFxuICovXG5mdW5jdGlvbiBzZXRTZWNyZXQoc2VjcmV0KSB7XG4gICAgKDAsIGNvbW1hbmRfMS5pc3N1ZUNvbW1hbmQpKCdhZGQtbWFzaycsIHt9LCBzZWNyZXQpO1xufVxuZXhwb3J0cy5zZXRTZWNyZXQgPSBzZXRTZWNyZXQ7XG4vKipcbiAqIFByZXBlbmRzIGlucHV0UGF0aCB0byB0aGUgUEFUSCAoZm9yIHRoaXMgYWN0aW9uIGFuZCBmdXR1cmUgYWN0aW9ucylcbiAqIEBwYXJhbSBpbnB1dFBhdGhcbiAqL1xuZnVuY3Rpb24gYWRkUGF0aChpbnB1dFBhdGgpIHtcbiAgICBjb25zdCBmaWxlUGF0aCA9IHByb2Nlc3MuZW52WydHSVRIVUJfUEFUSCddIHx8ICcnO1xuICAgIGlmIChmaWxlUGF0aCkge1xuICAgICAgICAoMCwgZmlsZV9jb21tYW5kXzEuaXNzdWVGaWxlQ29tbWFuZCkoJ1BBVEgnLCBpbnB1dFBhdGgpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgKDAsIGNvbW1hbmRfMS5pc3N1ZUNvbW1hbmQpKCdhZGQtcGF0aCcsIHt9LCBpbnB1dFBhdGgpO1xuICAgIH1cbiAgICBwcm9jZXNzLmVudlsnUEFUSCddID0gYCR7aW5wdXRQYXRofSR7cGF0aC5kZWxpbWl0ZXJ9JHtwcm9jZXNzLmVudlsnUEFUSCddfWA7XG59XG5leHBvcnRzLmFkZFBhdGggPSBhZGRQYXRoO1xuLyoqXG4gKiBHZXRzIHRoZSB2YWx1ZSBvZiBhbiBpbnB1dC5cbiAqIFVubGVzcyB0cmltV2hpdGVzcGFjZSBpcyBzZXQgdG8gZmFsc2UgaW4gSW5wdXRPcHRpb25zLCB0aGUgdmFsdWUgaXMgYWxzbyB0cmltbWVkLlxuICogUmV0dXJucyBhbiBlbXB0eSBzdHJpbmcgaWYgdGhlIHZhbHVlIGlzIG5vdCBkZWZpbmVkLlxuICpcbiAqIEBwYXJhbSAgICAgbmFtZSAgICAgbmFtZSBvZiB0aGUgaW5wdXQgdG8gZ2V0XG4gKiBAcGFyYW0gICAgIG9wdGlvbnMgIG9wdGlvbmFsLiBTZWUgSW5wdXRPcHRpb25zLlxuICogQHJldHVybnMgICBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gZ2V0SW5wdXQobmFtZSwgb3B0aW9ucykge1xuICAgIGNvbnN0IHZhbCA9IHByb2Nlc3MuZW52W2BJTlBVVF8ke25hbWUucmVwbGFjZSgvIC9nLCAnXycpLnRvVXBwZXJDYXNlKCl9YF0gfHwgJyc7XG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5yZXF1aXJlZCAmJiAhdmFsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW5wdXQgcmVxdWlyZWQgYW5kIG5vdCBzdXBwbGllZDogJHtuYW1lfWApO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnRyaW1XaGl0ZXNwYWNlID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH1cbiAgICByZXR1cm4gdmFsLnRyaW0oKTtcbn1cbmV4cG9ydHMuZ2V0SW5wdXQgPSBnZXRJbnB1dDtcbi8qKlxuICogR2V0cyB0aGUgdmFsdWVzIG9mIGFuIG11bHRpbGluZSBpbnB1dC4gIEVhY2ggdmFsdWUgaXMgYWxzbyB0cmltbWVkLlxuICpcbiAqIEBwYXJhbSAgICAgbmFtZSAgICAgbmFtZSBvZiB0aGUgaW5wdXQgdG8gZ2V0XG4gKiBAcGFyYW0gICAgIG9wdGlvbnMgIG9wdGlvbmFsLiBTZWUgSW5wdXRPcHRpb25zLlxuICogQHJldHVybnMgICBzdHJpbmdbXVxuICpcbiAqL1xuZnVuY3Rpb24gZ2V0TXVsdGlsaW5lSW5wdXQobmFtZSwgb3B0aW9ucykge1xuICAgIGNvbnN0IGlucHV0cyA9IGdldElucHV0KG5hbWUsIG9wdGlvbnMpXG4gICAgICAgIC5zcGxpdCgnXFxuJylcbiAgICAgICAgLmZpbHRlcih4ID0+IHggIT09ICcnKTtcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnRyaW1XaGl0ZXNwYWNlID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gaW5wdXRzO1xuICAgIH1cbiAgICByZXR1cm4gaW5wdXRzLm1hcChpbnB1dCA9PiBpbnB1dC50cmltKCkpO1xufVxuZXhwb3J0cy5nZXRNdWx0aWxpbmVJbnB1dCA9IGdldE11bHRpbGluZUlucHV0O1xuLyoqXG4gKiBHZXRzIHRoZSBpbnB1dCB2YWx1ZSBvZiB0aGUgYm9vbGVhbiB0eXBlIGluIHRoZSBZQU1MIDEuMiBcImNvcmUgc2NoZW1hXCIgc3BlY2lmaWNhdGlvbi5cbiAqIFN1cHBvcnQgYm9vbGVhbiBpbnB1dCBsaXN0OiBgdHJ1ZSB8IFRydWUgfCBUUlVFIHwgZmFsc2UgfCBGYWxzZSB8IEZBTFNFYCAuXG4gKiBUaGUgcmV0dXJuIHZhbHVlIGlzIGFsc28gaW4gYm9vbGVhbiB0eXBlLlxuICogcmVmOiBodHRwczovL3lhbWwub3JnL3NwZWMvMS4yL3NwZWMuaHRtbCNpZDI4MDQ5MjNcbiAqXG4gKiBAcGFyYW0gICAgIG5hbWUgICAgIG5hbWUgb2YgdGhlIGlucHV0IHRvIGdldFxuICogQHBhcmFtICAgICBvcHRpb25zICBvcHRpb25hbC4gU2VlIElucHV0T3B0aW9ucy5cbiAqIEByZXR1cm5zICAgYm9vbGVhblxuICovXG5mdW5jdGlvbiBnZXRCb29sZWFuSW5wdXQobmFtZSwgb3B0aW9ucykge1xuICAgIGNvbnN0IHRydWVWYWx1ZSA9IFsndHJ1ZScsICdUcnVlJywgJ1RSVUUnXTtcbiAgICBjb25zdCBmYWxzZVZhbHVlID0gWydmYWxzZScsICdGYWxzZScsICdGQUxTRSddO1xuICAgIGNvbnN0IHZhbCA9IGdldElucHV0KG5hbWUsIG9wdGlvbnMpO1xuICAgIGlmICh0cnVlVmFsdWUuaW5jbHVkZXModmFsKSlcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgaWYgKGZhbHNlVmFsdWUuaW5jbHVkZXModmFsKSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYElucHV0IGRvZXMgbm90IG1lZXQgWUFNTCAxLjIgXCJDb3JlIFNjaGVtYVwiIHNwZWNpZmljYXRpb246ICR7bmFtZX1cXG5gICtcbiAgICAgICAgYFN1cHBvcnQgYm9vbGVhbiBpbnB1dCBsaXN0OiBcXGB0cnVlIHwgVHJ1ZSB8IFRSVUUgfCBmYWxzZSB8IEZhbHNlIHwgRkFMU0VcXGBgKTtcbn1cbmV4cG9ydHMuZ2V0Qm9vbGVhbklucHV0ID0gZ2V0Qm9vbGVhbklucHV0O1xuLyoqXG4gKiBTZXRzIHRoZSB2YWx1ZSBvZiBhbiBvdXRwdXQuXG4gKlxuICogQHBhcmFtICAgICBuYW1lICAgICBuYW1lIG9mIHRoZSBvdXRwdXQgdG8gc2V0XG4gKiBAcGFyYW0gICAgIHZhbHVlICAgIHZhbHVlIHRvIHN0b3JlLiBOb24tc3RyaW5nIHZhbHVlcyB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIHN0cmluZyB2aWEgSlNPTi5zdHJpbmdpZnlcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmZ1bmN0aW9uIHNldE91dHB1dChuYW1lLCB2YWx1ZSkge1xuICAgIGNvbnN0IGZpbGVQYXRoID0gcHJvY2Vzcy5lbnZbJ0dJVEhVQl9PVVRQVVQnXSB8fCAnJztcbiAgICBpZiAoZmlsZVBhdGgpIHtcbiAgICAgICAgcmV0dXJuICgwLCBmaWxlX2NvbW1hbmRfMS5pc3N1ZUZpbGVDb21tYW5kKSgnT1VUUFVUJywgKDAsIGZpbGVfY29tbWFuZF8xLnByZXBhcmVLZXlWYWx1ZU1lc3NhZ2UpKG5hbWUsIHZhbHVlKSk7XG4gICAgfVxuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKG9zLkVPTCk7XG4gICAgKDAsIGNvbW1hbmRfMS5pc3N1ZUNvbW1hbmQpKCdzZXQtb3V0cHV0JywgeyBuYW1lIH0sICgwLCB1dGlsc18xLnRvQ29tbWFuZFZhbHVlKSh2YWx1ZSkpO1xufVxuZXhwb3J0cy5zZXRPdXRwdXQgPSBzZXRPdXRwdXQ7XG4vKipcbiAqIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIGVjaG9pbmcgb2YgY29tbWFuZHMgaW50byBzdGRvdXQgZm9yIHRoZSByZXN0IG9mIHRoZSBzdGVwLlxuICogRWNob2luZyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0IGlmIEFDVElPTlNfU1RFUF9ERUJVRyBpcyBub3Qgc2V0LlxuICpcbiAqL1xuZnVuY3Rpb24gc2V0Q29tbWFuZEVjaG8oZW5hYmxlZCkge1xuICAgICgwLCBjb21tYW5kXzEuaXNzdWUpKCdlY2hvJywgZW5hYmxlZCA/ICdvbicgOiAnb2ZmJyk7XG59XG5leHBvcnRzLnNldENvbW1hbmRFY2hvID0gc2V0Q29tbWFuZEVjaG87XG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSZXN1bHRzXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vKipcbiAqIFNldHMgdGhlIGFjdGlvbiBzdGF0dXMgdG8gZmFpbGVkLlxuICogV2hlbiB0aGUgYWN0aW9uIGV4aXRzIGl0IHdpbGwgYmUgd2l0aCBhbiBleGl0IGNvZGUgb2YgMVxuICogQHBhcmFtIG1lc3NhZ2UgYWRkIGVycm9yIGlzc3VlIG1lc3NhZ2VcbiAqL1xuZnVuY3Rpb24gc2V0RmFpbGVkKG1lc3NhZ2UpIHtcbiAgICBwcm9jZXNzLmV4aXRDb2RlID0gRXhpdENvZGUuRmFpbHVyZTtcbiAgICBlcnJvcihtZXNzYWdlKTtcbn1cbmV4cG9ydHMuc2V0RmFpbGVkID0gc2V0RmFpbGVkO1xuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gTG9nZ2luZyBDb21tYW5kc1xuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLyoqXG4gKiBHZXRzIHdoZXRoZXIgQWN0aW9ucyBTdGVwIERlYnVnIGlzIG9uIG9yIG5vdFxuICovXG5mdW5jdGlvbiBpc0RlYnVnKCkge1xuICAgIHJldHVybiBwcm9jZXNzLmVudlsnUlVOTkVSX0RFQlVHJ10gPT09ICcxJztcbn1cbmV4cG9ydHMuaXNEZWJ1ZyA9IGlzRGVidWc7XG4vKipcbiAqIFdyaXRlcyBkZWJ1ZyBtZXNzYWdlIHRvIHVzZXIgbG9nXG4gKiBAcGFyYW0gbWVzc2FnZSBkZWJ1ZyBtZXNzYWdlXG4gKi9cbmZ1bmN0aW9uIGRlYnVnKG1lc3NhZ2UpIHtcbiAgICAoMCwgY29tbWFuZF8xLmlzc3VlQ29tbWFuZCkoJ2RlYnVnJywge30sIG1lc3NhZ2UpO1xufVxuZXhwb3J0cy5kZWJ1ZyA9IGRlYnVnO1xuLyoqXG4gKiBBZGRzIGFuIGVycm9yIGlzc3VlXG4gKiBAcGFyYW0gbWVzc2FnZSBlcnJvciBpc3N1ZSBtZXNzYWdlLiBFcnJvcnMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gc3RyaW5nIHZpYSB0b1N0cmluZygpXG4gKiBAcGFyYW0gcHJvcGVydGllcyBvcHRpb25hbCBwcm9wZXJ0aWVzIHRvIGFkZCB0byB0aGUgYW5ub3RhdGlvbi5cbiAqL1xuZnVuY3Rpb24gZXJyb3IobWVzc2FnZSwgcHJvcGVydGllcyA9IHt9KSB7XG4gICAgKDAsIGNvbW1hbmRfMS5pc3N1ZUNvbW1hbmQpKCdlcnJvcicsICgwLCB1dGlsc18xLnRvQ29tbWFuZFByb3BlcnRpZXMpKHByb3BlcnRpZXMpLCBtZXNzYWdlIGluc3RhbmNlb2YgRXJyb3IgPyBtZXNzYWdlLnRvU3RyaW5nKCkgOiBtZXNzYWdlKTtcbn1cbmV4cG9ydHMuZXJyb3IgPSBlcnJvcjtcbi8qKlxuICogQWRkcyBhIHdhcm5pbmcgaXNzdWVcbiAqIEBwYXJhbSBtZXNzYWdlIHdhcm5pbmcgaXNzdWUgbWVzc2FnZS4gRXJyb3JzIHdpbGwgYmUgY29udmVydGVkIHRvIHN0cmluZyB2aWEgdG9TdHJpbmcoKVxuICogQHBhcmFtIHByb3BlcnRpZXMgb3B0aW9uYWwgcHJvcGVydGllcyB0byBhZGQgdG8gdGhlIGFubm90YXRpb24uXG4gKi9cbmZ1bmN0aW9uIHdhcm5pbmcobWVzc2FnZSwgcHJvcGVydGllcyA9IHt9KSB7XG4gICAgKDAsIGNvbW1hbmRfMS5pc3N1ZUNvbW1hbmQpKCd3YXJuaW5nJywgKDAsIHV0aWxzXzEudG9Db21tYW5kUHJvcGVydGllcykocHJvcGVydGllcyksIG1lc3NhZ2UgaW5zdGFuY2VvZiBFcnJvciA/IG1lc3NhZ2UudG9TdHJpbmcoKSA6IG1lc3NhZ2UpO1xufVxuZXhwb3J0cy53YXJuaW5nID0gd2FybmluZztcbi8qKlxuICogQWRkcyBhIG5vdGljZSBpc3N1ZVxuICogQHBhcmFtIG1lc3NhZ2Ugbm90aWNlIGlzc3VlIG1lc3NhZ2UuIEVycm9ycyB3aWxsIGJlIGNvbnZlcnRlZCB0byBzdHJpbmcgdmlhIHRvU3RyaW5nKClcbiAqIEBwYXJhbSBwcm9wZXJ0aWVzIG9wdGlvbmFsIHByb3BlcnRpZXMgdG8gYWRkIHRvIHRoZSBhbm5vdGF0aW9uLlxuICovXG5mdW5jdGlvbiBub3RpY2UobWVzc2FnZSwgcHJvcGVydGllcyA9IHt9KSB7XG4gICAgKDAsIGNvbW1hbmRfMS5pc3N1ZUNvbW1hbmQpKCdub3RpY2UnLCAoMCwgdXRpbHNfMS50b0NvbW1hbmRQcm9wZXJ0aWVzKShwcm9wZXJ0aWVzKSwgbWVzc2FnZSBpbnN0YW5jZW9mIEVycm9yID8gbWVzc2FnZS50b1N0cmluZygpIDogbWVzc2FnZSk7XG59XG5leHBvcnRzLm5vdGljZSA9IG5vdGljZTtcbi8qKlxuICogV3JpdGVzIGluZm8gdG8gbG9nIHdpdGggY29uc29sZS5sb2cuXG4gKiBAcGFyYW0gbWVzc2FnZSBpbmZvIG1lc3NhZ2VcbiAqL1xuZnVuY3Rpb24gaW5mbyhtZXNzYWdlKSB7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUobWVzc2FnZSArIG9zLkVPTCk7XG59XG5leHBvcnRzLmluZm8gPSBpbmZvO1xuLyoqXG4gKiBCZWdpbiBhbiBvdXRwdXQgZ3JvdXAuXG4gKlxuICogT3V0cHV0IHVudGlsIHRoZSBuZXh0IGBncm91cEVuZGAgd2lsbCBiZSBmb2xkYWJsZSBpbiB0aGlzIGdyb3VwXG4gKlxuICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIG91dHB1dCBncm91cFxuICovXG5mdW5jdGlvbiBzdGFydEdyb3VwKG5hbWUpIHtcbiAgICAoMCwgY29tbWFuZF8xLmlzc3VlKSgnZ3JvdXAnLCBuYW1lKTtcbn1cbmV4cG9ydHMuc3RhcnRHcm91cCA9IHN0YXJ0R3JvdXA7XG4vKipcbiAqIEVuZCBhbiBvdXRwdXQgZ3JvdXAuXG4gKi9cbmZ1bmN0aW9uIGVuZEdyb3VwKCkge1xuICAgICgwLCBjb21tYW5kXzEuaXNzdWUpKCdlbmRncm91cCcpO1xufVxuZXhwb3J0cy5lbmRHcm91cCA9IGVuZEdyb3VwO1xuLyoqXG4gKiBXcmFwIGFuIGFzeW5jaHJvbm91cyBmdW5jdGlvbiBjYWxsIGluIGEgZ3JvdXAuXG4gKlxuICogUmV0dXJucyB0aGUgc2FtZSB0eXBlIGFzIHRoZSBmdW5jdGlvbiBpdHNlbGYuXG4gKlxuICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGdyb3VwXG4gKiBAcGFyYW0gZm4gVGhlIGZ1bmN0aW9uIHRvIHdyYXAgaW4gdGhlIGdyb3VwXG4gKi9cbmZ1bmN0aW9uIGdyb3VwKG5hbWUsIGZuKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgc3RhcnRHcm91cChuYW1lKTtcbiAgICAgICAgbGV0IHJlc3VsdDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHlpZWxkIGZuKCk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBlbmRHcm91cCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSk7XG59XG5leHBvcnRzLmdyb3VwID0gZ3JvdXA7XG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBXcmFwcGVyIGFjdGlvbiBzdGF0ZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLyoqXG4gKiBTYXZlcyBzdGF0ZSBmb3IgY3VycmVudCBhY3Rpb24sIHRoZSBzdGF0ZSBjYW4gb25seSBiZSByZXRyaWV2ZWQgYnkgdGhpcyBhY3Rpb24ncyBwb3N0IGpvYiBleGVjdXRpb24uXG4gKlxuICogQHBhcmFtICAgICBuYW1lICAgICBuYW1lIG9mIHRoZSBzdGF0ZSB0byBzdG9yZVxuICogQHBhcmFtICAgICB2YWx1ZSAgICB2YWx1ZSB0byBzdG9yZS4gTm9uLXN0cmluZyB2YWx1ZXMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBzdHJpbmcgdmlhIEpTT04uc3RyaW5naWZ5XG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5mdW5jdGlvbiBzYXZlU3RhdGUobmFtZSwgdmFsdWUpIHtcbiAgICBjb25zdCBmaWxlUGF0aCA9IHByb2Nlc3MuZW52WydHSVRIVUJfU1RBVEUnXSB8fCAnJztcbiAgICBpZiAoZmlsZVBhdGgpIHtcbiAgICAgICAgcmV0dXJuICgwLCBmaWxlX2NvbW1hbmRfMS5pc3N1ZUZpbGVDb21tYW5kKSgnU1RBVEUnLCAoMCwgZmlsZV9jb21tYW5kXzEucHJlcGFyZUtleVZhbHVlTWVzc2FnZSkobmFtZSwgdmFsdWUpKTtcbiAgICB9XG4gICAgKDAsIGNvbW1hbmRfMS5pc3N1ZUNvbW1hbmQpKCdzYXZlLXN0YXRlJywgeyBuYW1lIH0sICgwLCB1dGlsc18xLnRvQ29tbWFuZFZhbHVlKSh2YWx1ZSkpO1xufVxuZXhwb3J0cy5zYXZlU3RhdGUgPSBzYXZlU3RhdGU7XG4vKipcbiAqIEdldHMgdGhlIHZhbHVlIG9mIGFuIHN0YXRlIHNldCBieSB0aGlzIGFjdGlvbidzIG1haW4gZXhlY3V0aW9uLlxuICpcbiAqIEBwYXJhbSAgICAgbmFtZSAgICAgbmFtZSBvZiB0aGUgc3RhdGUgdG8gZ2V0XG4gKiBAcmV0dXJucyAgIHN0cmluZ1xuICovXG5mdW5jdGlvbiBnZXRTdGF0ZShuYW1lKSB7XG4gICAgcmV0dXJuIHByb2Nlc3MuZW52W2BTVEFURV8ke25hbWV9YF0gfHwgJyc7XG59XG5leHBvcnRzLmdldFN0YXRlID0gZ2V0U3RhdGU7XG5mdW5jdGlvbiBnZXRJRFRva2VuKGF1ZCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHJldHVybiB5aWVsZCBvaWRjX3V0aWxzXzEuT2lkY0NsaWVudC5nZXRJRFRva2VuKGF1ZCk7XG4gICAgfSk7XG59XG5leHBvcnRzLmdldElEVG9rZW4gPSBnZXRJRFRva2VuO1xuLyoqXG4gKiBTdW1tYXJ5IGV4cG9ydHNcbiAqL1xudmFyIHN1bW1hcnlfMSA9IHJlcXVpcmUoXCIuL3N1bW1hcnlcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdW1tYXJ5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzdW1tYXJ5XzEuc3VtbWFyeTsgfSB9KTtcbi8qKlxuICogQGRlcHJlY2F0ZWQgdXNlIGNvcmUuc3VtbWFyeVxuICovXG52YXIgc3VtbWFyeV8yID0gcmVxdWlyZShcIi4vc3VtbWFyeVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm1hcmtkb3duU3VtbWFyeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc3VtbWFyeV8yLm1hcmtkb3duU3VtbWFyeTsgfSB9KTtcbi8qKlxuICogUGF0aCBleHBvcnRzXG4gKi9cbnZhciBwYXRoX3V0aWxzXzEgPSByZXF1aXJlKFwiLi9wYXRoLXV0aWxzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidG9Qb3NpeFBhdGhcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBhdGhfdXRpbHNfMS50b1Bvc2l4UGF0aDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRvV2luMzJQYXRoXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwYXRoX3V0aWxzXzEudG9XaW4zMlBhdGg7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0b1BsYXRmb3JtUGF0aFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcGF0aF91dGlsc18xLnRvUGxhdGZvcm1QYXRoOyB9IH0pO1xuLyoqXG4gKiBQbGF0Zm9ybSB1dGlsaXRpZXMgZXhwb3J0c1xuICovXG5leHBvcnRzLnBsYXRmb3JtID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL3BsYXRmb3JtXCIpKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvcmUuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0VXBsb2FkQ2h1bmtUaW1lb3V0ID0gZXhwb3J0cy5nZXRDb25jdXJyZW5jeSA9IGV4cG9ydHMuZ2V0R2l0SHViV29ya3NwYWNlRGlyID0gZXhwb3J0cy5pc0doZXMgPSBleHBvcnRzLmdldFJlc3VsdHNTZXJ2aWNlVXJsID0gZXhwb3J0cy5nZXRSdW50aW1lVG9rZW4gPSBleHBvcnRzLmdldFVwbG9hZENodW5rU2l6ZSA9IHZvaWQgMDtcbmNvbnN0IG9zXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIm9zXCIpKTtcbi8vIFVzZWQgZm9yIGNvbnRyb2xsaW5nIHRoZSBoaWdoV2F0ZXJNYXJrIHZhbHVlIG9mIHRoZSB6aXAgdGhhdCBpcyBiZWluZyBzdHJlYW1lZFxuLy8gVGhlIHNhbWUgdmFsdWUgaXMgdXNlZCBhcyB0aGUgY2h1bmsgc2l6ZSB0aGF0IGlzIHVzZSBkdXJpbmcgdXBsb2FkIHRvIGJsb2Igc3RvcmFnZVxuZnVuY3Rpb24gZ2V0VXBsb2FkQ2h1bmtTaXplKCkge1xuICAgIHJldHVybiA4ICogMTAyNCAqIDEwMjQ7IC8vIDggTUIgQ2h1bmtzXG59XG5leHBvcnRzLmdldFVwbG9hZENodW5rU2l6ZSA9IGdldFVwbG9hZENodW5rU2l6ZTtcbmZ1bmN0aW9uIGdldFJ1bnRpbWVUb2tlbigpIHtcbiAgICBjb25zdCB0b2tlbiA9IHByb2Nlc3MuZW52WydBQ1RJT05TX1JVTlRJTUVfVE9LRU4nXTtcbiAgICBpZiAoIXRva2VuKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGdldCB0aGUgQUNUSU9OU19SVU5USU1FX1RPS0VOIGVudiB2YXJpYWJsZScpO1xuICAgIH1cbiAgICByZXR1cm4gdG9rZW47XG59XG5leHBvcnRzLmdldFJ1bnRpbWVUb2tlbiA9IGdldFJ1bnRpbWVUb2tlbjtcbmZ1bmN0aW9uIGdldFJlc3VsdHNTZXJ2aWNlVXJsKCkge1xuICAgIGNvbnN0IHJlc3VsdHNVcmwgPSBwcm9jZXNzLmVudlsnQUNUSU9OU19SRVNVTFRTX1VSTCddO1xuICAgIGlmICghcmVzdWx0c1VybCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBnZXQgdGhlIEFDVElPTlNfUkVTVUxUU19VUkwgZW52IHZhcmlhYmxlJyk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgVVJMKHJlc3VsdHNVcmwpLm9yaWdpbjtcbn1cbmV4cG9ydHMuZ2V0UmVzdWx0c1NlcnZpY2VVcmwgPSBnZXRSZXN1bHRzU2VydmljZVVybDtcbmZ1bmN0aW9uIGlzR2hlcygpIHtcbiAgICBjb25zdCBnaFVybCA9IG5ldyBVUkwocHJvY2Vzcy5lbnZbJ0dJVEhVQl9TRVJWRVJfVVJMJ10gfHwgJ2h0dHBzOi8vZ2l0aHViLmNvbScpO1xuICAgIGNvbnN0IGhvc3RuYW1lID0gZ2hVcmwuaG9zdG5hbWUudHJpbUVuZCgpLnRvVXBwZXJDYXNlKCk7XG4gICAgY29uc3QgaXNHaXRIdWJIb3N0ID0gaG9zdG5hbWUgPT09ICdHSVRIVUIuQ09NJztcbiAgICBjb25zdCBpc0doZUhvc3QgPSBob3N0bmFtZS5lbmRzV2l0aCgnLkdIRS5DT00nKTtcbiAgICBjb25zdCBpc0xvY2FsSG9zdCA9IGhvc3RuYW1lLmVuZHNXaXRoKCcuTE9DQUxIT1NUJyk7XG4gICAgcmV0dXJuICFpc0dpdEh1Ykhvc3QgJiYgIWlzR2hlSG9zdCAmJiAhaXNMb2NhbEhvc3Q7XG59XG5leHBvcnRzLmlzR2hlcyA9IGlzR2hlcztcbmZ1bmN0aW9uIGdldEdpdEh1YldvcmtzcGFjZURpcigpIHtcbiAgICBjb25zdCBnaFdvcmtzcGFjZURpciA9IHByb2Nlc3MuZW52WydHSVRIVUJfV09SS1NQQUNFJ107XG4gICAgaWYgKCFnaFdvcmtzcGFjZURpcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBnZXQgdGhlIEdJVEhVQl9XT1JLU1BBQ0UgZW52IHZhcmlhYmxlJyk7XG4gICAgfVxuICAgIHJldHVybiBnaFdvcmtzcGFjZURpcjtcbn1cbmV4cG9ydHMuZ2V0R2l0SHViV29ya3NwYWNlRGlyID0gZ2V0R2l0SHViV29ya3NwYWNlRGlyO1xuLy8gTWltaWNzIGJlaGF2aW9yIG9mIGF6Y29weTogaHR0cHM6Ly9sZWFybi5taWNyb3NvZnQuY29tL2VuLXVzL2F6dXJlL3N0b3JhZ2UvY29tbW9uL3N0b3JhZ2UtdXNlLWF6Y29weS1vcHRpbWl6ZVxuLy8gSWYgeW91ciBtYWNoaW5lIGhhcyBmZXdlciB0aGFuIDUgQ1BVcywgdGhlbiB0aGUgdmFsdWUgb2YgdGhpcyB2YXJpYWJsZSBpcyBzZXQgdG8gMzIuXG4vLyBPdGhlcndpc2UsIHRoZSBkZWZhdWx0IHZhbHVlIGlzIGVxdWFsIHRvIDE2IG11bHRpcGxpZWQgYnkgdGhlIG51bWJlciBvZiBDUFVzLiBUaGUgbWF4aW11bSB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlIGlzIDMwMC5cbmZ1bmN0aW9uIGdldENvbmN1cnJlbmN5KCkge1xuICAgIGNvbnN0IG51bUNQVXMgPSBvc18xLmRlZmF1bHQuY3B1cygpLmxlbmd0aDtcbiAgICBpZiAobnVtQ1BVcyA8PSA0KSB7XG4gICAgICAgIHJldHVybiAzMjtcbiAgICB9XG4gICAgY29uc3QgY29uY3VycmVuY3kgPSAxNiAqIG51bUNQVXM7XG4gICAgcmV0dXJuIGNvbmN1cnJlbmN5ID4gMzAwID8gMzAwIDogY29uY3VycmVuY3k7XG59XG5leHBvcnRzLmdldENvbmN1cnJlbmN5ID0gZ2V0Q29uY3VycmVuY3k7XG5mdW5jdGlvbiBnZXRVcGxvYWRDaHVua1RpbWVvdXQoKSB7XG4gICAgcmV0dXJuIDMwMDAwMDsgLy8gNSBtaW51dGVzXG59XG5leHBvcnRzLmdldFVwbG9hZENodW5rVGltZW91dCA9IGdldFVwbG9hZENodW5rVGltZW91dDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbmZpZy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc0pzb25PYmplY3QgPSBleHBvcnRzLnR5cGVvZkpzb25WYWx1ZSA9IHZvaWQgMDtcbi8qKlxuICogR2V0IHRoZSB0eXBlIG9mIGEgSlNPTiB2YWx1ZS5cbiAqIERpc3Rpbmd1aXNoZXMgYmV0d2VlbiBhcnJheSwgbnVsbCBhbmQgb2JqZWN0LlxuICovXG5mdW5jdGlvbiB0eXBlb2ZKc29uVmFsdWUodmFsdWUpIHtcbiAgICBsZXQgdCA9IHR5cGVvZiB2YWx1ZTtcbiAgICBpZiAodCA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSlcbiAgICAgICAgICAgIHJldHVybiBcImFycmF5XCI7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbClcbiAgICAgICAgICAgIHJldHVybiBcIm51bGxcIjtcbiAgICB9XG4gICAgcmV0dXJuIHQ7XG59XG5leHBvcnRzLnR5cGVvZkpzb25WYWx1ZSA9IHR5cGVvZkpzb25WYWx1ZTtcbi8qKlxuICogSXMgdGhpcyBhIEpTT04gb2JqZWN0IChpbnN0ZWFkIG9mIGFuIGFycmF5IG9yIG51bGwpP1xuICovXG5mdW5jdGlvbiBpc0pzb25PYmplY3QodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpO1xufVxuZXhwb3J0cy5pc0pzb25PYmplY3QgPSBpc0pzb25PYmplY3Q7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5iYXNlNjRlbmNvZGUgPSBleHBvcnRzLmJhc2U2NGRlY29kZSA9IHZvaWQgMDtcbi8vIGxvb2t1cCB0YWJsZSBmcm9tIGJhc2U2NCBjaGFyYWN0ZXIgdG8gYnl0ZVxubGV0IGVuY1RhYmxlID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nLnNwbGl0KCcnKTtcbi8vIGxvb2t1cCB0YWJsZSBmcm9tIGJhc2U2NCBjaGFyYWN0ZXIgKmNvZGUqIHRvIGJ5dGUgYmVjYXVzZSBsb29rdXAgYnkgbnVtYmVyIGlzIGZhc3RcbmxldCBkZWNUYWJsZSA9IFtdO1xuZm9yIChsZXQgaSA9IDA7IGkgPCBlbmNUYWJsZS5sZW5ndGg7IGkrKylcbiAgICBkZWNUYWJsZVtlbmNUYWJsZVtpXS5jaGFyQ29kZUF0KDApXSA9IGk7XG4vLyBzdXBwb3J0IGJhc2U2NHVybCB2YXJpYW50c1xuZGVjVGFibGVbXCItXCIuY2hhckNvZGVBdCgwKV0gPSBlbmNUYWJsZS5pbmRleE9mKFwiK1wiKTtcbmRlY1RhYmxlW1wiX1wiLmNoYXJDb2RlQXQoMCldID0gZW5jVGFibGUuaW5kZXhPZihcIi9cIik7XG4vKipcbiAqIERlY29kZXMgYSBiYXNlNjQgc3RyaW5nIHRvIGEgYnl0ZSBhcnJheS5cbiAqXG4gKiAtIGlnbm9yZXMgd2hpdGUtc3BhY2UsIGluY2x1ZGluZyBsaW5lIGJyZWFrcyBhbmQgdGFic1xuICogLSBhbGxvd3MgaW5uZXIgcGFkZGluZyAoY2FuIGRlY29kZSBjb25jYXRlbmF0ZWQgYmFzZTY0IHN0cmluZ3MpXG4gKiAtIGRvZXMgbm90IHJlcXVpcmUgcGFkZGluZ1xuICogLSB1bmRlcnN0YW5kcyBiYXNlNjR1cmwgZW5jb2Rpbmc6XG4gKiAgIFwiLVwiIGluc3RlYWQgb2YgXCIrXCIsXG4gKiAgIFwiX1wiIGluc3RlYWQgb2YgXCIvXCIsXG4gKiAgIG5vIHBhZGRpbmdcbiAqL1xuZnVuY3Rpb24gYmFzZTY0ZGVjb2RlKGJhc2U2NFN0cikge1xuICAgIC8vIGVzdGltYXRlIGJ5dGUgc2l6ZSwgbm90IGFjY291bnRpbmcgZm9yIGlubmVyIHBhZGRpbmcgYW5kIHdoaXRlc3BhY2VcbiAgICBsZXQgZXMgPSBiYXNlNjRTdHIubGVuZ3RoICogMyAvIDQ7XG4gICAgLy8gaWYgKGVzICUgMyAhPT0gMClcbiAgICAvLyB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgYmFzZTY0IHN0cmluZycpO1xuICAgIGlmIChiYXNlNjRTdHJbYmFzZTY0U3RyLmxlbmd0aCAtIDJdID09ICc9JylcbiAgICAgICAgZXMgLT0gMjtcbiAgICBlbHNlIGlmIChiYXNlNjRTdHJbYmFzZTY0U3RyLmxlbmd0aCAtIDFdID09ICc9JylcbiAgICAgICAgZXMgLT0gMTtcbiAgICBsZXQgYnl0ZXMgPSBuZXcgVWludDhBcnJheShlcyksIGJ5dGVQb3MgPSAwLCAvLyBwb3NpdGlvbiBpbiBieXRlIGFycmF5XG4gICAgZ3JvdXBQb3MgPSAwLCAvLyBwb3NpdGlvbiBpbiBiYXNlNjQgZ3JvdXBcbiAgICBiLCAvLyBjdXJyZW50IGJ5dGVcbiAgICBwID0gMCAvLyBwcmV2aW91cyBieXRlXG4gICAgO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmFzZTY0U3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGIgPSBkZWNUYWJsZVtiYXNlNjRTdHIuY2hhckNvZGVBdChpKV07XG4gICAgICAgIGlmIChiID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIG5vaW5zcGVjdGlvbiBGYWxsVGhyb3VnaEluU3dpdGNoU3RhdGVtZW50SlNcbiAgICAgICAgICAgIHN3aXRjaCAoYmFzZTY0U3RyW2ldKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnPSc6XG4gICAgICAgICAgICAgICAgICAgIGdyb3VwUG9zID0gMDsgLy8gcmVzZXQgc3RhdGUgd2hlbiBwYWRkaW5nIGZvdW5kXG4gICAgICAgICAgICAgICAgY2FzZSAnXFxuJzpcbiAgICAgICAgICAgICAgICBjYXNlICdcXHInOlxuICAgICAgICAgICAgICAgIGNhc2UgJ1xcdCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnICc6XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBza2lwIHdoaXRlLXNwYWNlLCBhbmQgcGFkZGluZ1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKGBpbnZhbGlkIGJhc2U2NCBzdHJpbmcuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChncm91cFBvcykge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgIHAgPSBiO1xuICAgICAgICAgICAgICAgIGdyb3VwUG9zID0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICBieXRlc1tieXRlUG9zKytdID0gcCA8PCAyIHwgKGIgJiA0OCkgPj4gNDtcbiAgICAgICAgICAgICAgICBwID0gYjtcbiAgICAgICAgICAgICAgICBncm91cFBvcyA9IDI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgYnl0ZXNbYnl0ZVBvcysrXSA9IChwICYgMTUpIDw8IDQgfCAoYiAmIDYwKSA+PiAyO1xuICAgICAgICAgICAgICAgIHAgPSBiO1xuICAgICAgICAgICAgICAgIGdyb3VwUG9zID0gMztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICBieXRlc1tieXRlUG9zKytdID0gKHAgJiAzKSA8PCA2IHwgYjtcbiAgICAgICAgICAgICAgICBncm91cFBvcyA9IDA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGdyb3VwUG9zID09IDEpXG4gICAgICAgIHRocm93IEVycm9yKGBpbnZhbGlkIGJhc2U2NCBzdHJpbmcuYCk7XG4gICAgcmV0dXJuIGJ5dGVzLnN1YmFycmF5KDAsIGJ5dGVQb3MpO1xufVxuZXhwb3J0cy5iYXNlNjRkZWNvZGUgPSBiYXNlNjRkZWNvZGU7XG4vKipcbiAqIEVuY29kZXMgYSBieXRlIGFycmF5IHRvIGEgYmFzZTY0IHN0cmluZy5cbiAqIEFkZHMgcGFkZGluZyBhdCB0aGUgZW5kLlxuICogRG9lcyBub3QgaW5zZXJ0IG5ld2xpbmVzLlxuICovXG5mdW5jdGlvbiBiYXNlNjRlbmNvZGUoYnl0ZXMpIHtcbiAgICBsZXQgYmFzZTY0ID0gJycsIGdyb3VwUG9zID0gMCwgLy8gcG9zaXRpb24gaW4gYmFzZTY0IGdyb3VwXG4gICAgYiwgLy8gY3VycmVudCBieXRlXG4gICAgcCA9IDA7IC8vIGNhcnJ5IG92ZXIgZnJvbSBwcmV2aW91cyBieXRlXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBiID0gYnl0ZXNbaV07XG4gICAgICAgIHN3aXRjaCAoZ3JvdXBQb3MpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICBiYXNlNjQgKz0gZW5jVGFibGVbYiA+PiAyXTtcbiAgICAgICAgICAgICAgICBwID0gKGIgJiAzKSA8PCA0O1xuICAgICAgICAgICAgICAgIGdyb3VwUG9zID0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICBiYXNlNjQgKz0gZW5jVGFibGVbcCB8IGIgPj4gNF07XG4gICAgICAgICAgICAgICAgcCA9IChiICYgMTUpIDw8IDI7XG4gICAgICAgICAgICAgICAgZ3JvdXBQb3MgPSAyO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgIGJhc2U2NCArPSBlbmNUYWJsZVtwIHwgYiA+PiA2XTtcbiAgICAgICAgICAgICAgICBiYXNlNjQgKz0gZW5jVGFibGVbYiAmIDYzXTtcbiAgICAgICAgICAgICAgICBncm91cFBvcyA9IDA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gcGFkZGluZyByZXF1aXJlZD9cbiAgICBpZiAoZ3JvdXBQb3MpIHtcbiAgICAgICAgYmFzZTY0ICs9IGVuY1RhYmxlW3BdO1xuICAgICAgICBiYXNlNjQgKz0gJz0nO1xuICAgICAgICBpZiAoZ3JvdXBQb3MgPT0gMSlcbiAgICAgICAgICAgIGJhc2U2NCArPSAnPSc7XG4gICAgfVxuICAgIHJldHVybiBiYXNlNjQ7XG59XG5leHBvcnRzLmJhc2U2NGVuY29kZSA9IGJhc2U2NGVuY29kZTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIDIwMTYsIERhbmllbCBXaXJ0eiAgQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vXG4vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbi8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmVcbi8vIG1ldDpcbi8vXG4vLyAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4vLyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbi8vICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbi8vICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZVxuLy8gICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuLy8gKiBOZWl0aGVyIHRoZSBuYW1lIG9mIGl0cyBhdXRob3IsIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9yc1xuLy8gICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmVcbi8vICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG4vL1xuLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SU1xuLy8gXCJBUyBJU1wiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVFxuLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SXG4vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVFxuLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsXG4vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UXG4vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSxcbi8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWVxuLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFXG4vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy51dGY4cmVhZCA9IHZvaWQgMDtcbmNvbnN0IGZyb21DaGFyQ29kZXMgPSAoY2h1bmspID0+IFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLCBjaHVuayk7XG4vKipcbiAqIEBkZXByZWNhdGVkIFRoaXMgZnVuY3Rpb24gd2lsbCBubyBsb25nZXIgYmUgZXhwb3J0ZWQgd2l0aCB0aGUgbmV4dCBtYWpvclxuICogcmVsZWFzZSwgc2luY2UgcHJvdG9idWYtdHMgaGFzIHN3aXRjaCB0byBUZXh0RGVjb2RlciBBUEkuIElmIHlvdSBuZWVkIHRoaXNcbiAqIGZ1bmN0aW9uLCBwbGVhc2UgbWlncmF0ZSB0byBAcHJvdG9idWZqcy91dGY4LiBGb3IgY29udGV4dCwgc2VlXG4gKiBodHRwczovL2dpdGh1Yi5jb20vdGltb3N0YW1tL3Byb3RvYnVmLXRzL2lzc3Vlcy8xODRcbiAqXG4gKiBSZWFkcyBVVEY4IGJ5dGVzIGFzIGEgc3RyaW5nLlxuICpcbiAqIFNlZSBbcHJvdG9idWZqcyAvIHV0ZjhdKGh0dHBzOi8vZ2l0aHViLmNvbS9wcm90b2J1ZmpzL3Byb3RvYnVmLmpzL2Jsb2IvOTg5M2UzNWI4NTQ2MjFjY2U2NGFmNGJmNmJlMmNmZjRmYjg5Mjc5Ni9saWIvdXRmOC9pbmRleC5qcyNMNDApXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE2LCBEYW5pZWwgV2lydHpcbiAqL1xuZnVuY3Rpb24gdXRmOHJlYWQoYnl0ZXMpIHtcbiAgICBpZiAoYnl0ZXMubGVuZ3RoIDwgMSlcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgbGV0IHBvcyA9IDAsIC8vIHBvc2l0aW9uIGluIGJ5dGVzXG4gICAgcGFydHMgPSBbXSwgY2h1bmsgPSBbXSwgaSA9IDAsIC8vIGNoYXIgb2Zmc2V0XG4gICAgdDsgLy8gdGVtcG9yYXJ5XG4gICAgbGV0IGxlbiA9IGJ5dGVzLmxlbmd0aDtcbiAgICB3aGlsZSAocG9zIDwgbGVuKSB7XG4gICAgICAgIHQgPSBieXRlc1twb3MrK107XG4gICAgICAgIGlmICh0IDwgMTI4KVxuICAgICAgICAgICAgY2h1bmtbaSsrXSA9IHQ7XG4gICAgICAgIGVsc2UgaWYgKHQgPiAxOTEgJiYgdCA8IDIyNClcbiAgICAgICAgICAgIGNodW5rW2krK10gPSAodCAmIDMxKSA8PCA2IHwgYnl0ZXNbcG9zKytdICYgNjM7XG4gICAgICAgIGVsc2UgaWYgKHQgPiAyMzkgJiYgdCA8IDM2NSkge1xuICAgICAgICAgICAgdCA9ICgodCAmIDcpIDw8IDE4IHwgKGJ5dGVzW3BvcysrXSAmIDYzKSA8PCAxMiB8IChieXRlc1twb3MrK10gJiA2MykgPDwgNiB8IGJ5dGVzW3BvcysrXSAmIDYzKSAtIDB4MTAwMDA7XG4gICAgICAgICAgICBjaHVua1tpKytdID0gMHhEODAwICsgKHQgPj4gMTApO1xuICAgICAgICAgICAgY2h1bmtbaSsrXSA9IDB4REMwMCArICh0ICYgMTAyMyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgY2h1bmtbaSsrXSA9ICh0ICYgMTUpIDw8IDEyIHwgKGJ5dGVzW3BvcysrXSAmIDYzKSA8PCA2IHwgYnl0ZXNbcG9zKytdICYgNjM7XG4gICAgICAgIGlmIChpID4gODE5MSkge1xuICAgICAgICAgICAgcGFydHMucHVzaChmcm9tQ2hhckNvZGVzKGNodW5rKSk7XG4gICAgICAgICAgICBpID0gMDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAocGFydHMubGVuZ3RoKSB7XG4gICAgICAgIGlmIChpKVxuICAgICAgICAgICAgcGFydHMucHVzaChmcm9tQ2hhckNvZGVzKGNodW5rLnNsaWNlKDAsIGkpKSk7XG4gICAgICAgIHJldHVybiBwYXJ0cy5qb2luKFwiXCIpO1xuICAgIH1cbiAgICByZXR1cm4gZnJvbUNoYXJDb2RlcyhjaHVuay5zbGljZSgwLCBpKSk7XG59XG5leHBvcnRzLnV0ZjhyZWFkID0gdXRmOHJlYWQ7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5XaXJlVHlwZSA9IGV4cG9ydHMubWVyZ2VCaW5hcnlPcHRpb25zID0gZXhwb3J0cy5Vbmtub3duRmllbGRIYW5kbGVyID0gdm9pZCAwO1xuLyoqXG4gKiBUaGlzIGhhbmRsZXIgaW1wbGVtZW50cyB0aGUgZGVmYXVsdCBiZWhhdmlvdXIgZm9yIHVua25vd24gZmllbGRzLlxuICogV2hlbiByZWFkaW5nIGRhdGEsIHVua25vd24gZmllbGRzIGFyZSBzdG9yZWQgb24gdGhlIG1lc3NhZ2UsIGluIGFcbiAqIHN5bWJvbCBwcm9wZXJ0eS5cbiAqIFdoZW4gd3JpdGluZyBkYXRhLCB0aGUgc3ltYm9sIHByb3BlcnR5IGlzIHF1ZXJpZWQgYW5kIHVua25vd24gZmllbGRzXG4gKiBhcmUgc2VyaWFsaXplZCBpbnRvIHRoZSBvdXRwdXQgYWdhaW4uXG4gKi9cbnZhciBVbmtub3duRmllbGRIYW5kbGVyO1xuKGZ1bmN0aW9uIChVbmtub3duRmllbGRIYW5kbGVyKSB7XG4gICAgLyoqXG4gICAgICogVGhlIHN5bWJvbCB1c2VkIHRvIHN0b3JlIHVua25vd24gZmllbGRzIGZvciBhIG1lc3NhZ2UuXG4gICAgICogVGhlIHByb3BlcnR5IG11c3QgY29uZm9ybSB0byBgVW5rbm93bkZpZWxkQ29udGFpbmVyYC5cbiAgICAgKi9cbiAgICBVbmtub3duRmllbGRIYW5kbGVyLnN5bWJvbCA9IFN5bWJvbC5mb3IoXCJwcm90b2J1Zi10cy91bmtub3duXCIpO1xuICAgIC8qKlxuICAgICAqIFN0b3JlIGFuIHVua25vd24gZmllbGQgZHVyaW5nIGJpbmFyeSByZWFkIGRpcmVjdGx5IG9uIHRoZSBtZXNzYWdlLlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGNvbXBhdGlibGUgd2l0aCBgQmluYXJ5UmVhZE9wdGlvbnMucmVhZFVua25vd25GaWVsZGAuXG4gICAgICovXG4gICAgVW5rbm93bkZpZWxkSGFuZGxlci5vblJlYWQgPSAodHlwZU5hbWUsIG1lc3NhZ2UsIGZpZWxkTm8sIHdpcmVUeXBlLCBkYXRhKSA9PiB7XG4gICAgICAgIGxldCBjb250YWluZXIgPSBpcyhtZXNzYWdlKSA/IG1lc3NhZ2VbVW5rbm93bkZpZWxkSGFuZGxlci5zeW1ib2xdIDogbWVzc2FnZVtVbmtub3duRmllbGRIYW5kbGVyLnN5bWJvbF0gPSBbXTtcbiAgICAgICAgY29udGFpbmVyLnB1c2goeyBubzogZmllbGRObywgd2lyZVR5cGUsIGRhdGEgfSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBXcml0ZSB1bmtub3duIGZpZWxkcyBzdG9yZWQgZm9yIHRoZSBtZXNzYWdlIHRvIHRoZSB3cml0ZXIuXG4gICAgICogVGhpcyBtZXRob2QgaXMgY29tcGF0aWJsZSB3aXRoIGBCaW5hcnlXcml0ZU9wdGlvbnMud3JpdGVVbmtub3duRmllbGRzYC5cbiAgICAgKi9cbiAgICBVbmtub3duRmllbGRIYW5kbGVyLm9uV3JpdGUgPSAodHlwZU5hbWUsIG1lc3NhZ2UsIHdyaXRlcikgPT4ge1xuICAgICAgICBmb3IgKGxldCB7IG5vLCB3aXJlVHlwZSwgZGF0YSB9IG9mIFVua25vd25GaWVsZEhhbmRsZXIubGlzdChtZXNzYWdlKSlcbiAgICAgICAgICAgIHdyaXRlci50YWcobm8sIHdpcmVUeXBlKS5yYXcoZGF0YSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBMaXN0IHVua25vd24gZmllbGRzIHN0b3JlZCBmb3IgdGhlIG1lc3NhZ2UuXG4gICAgICogTm90ZSB0aGF0IHRoZXJlIG1heSBiZSBtdWx0aXBsZXMgZmllbGRzIHdpdGggdGhlIHNhbWUgbnVtYmVyLlxuICAgICAqL1xuICAgIFVua25vd25GaWVsZEhhbmRsZXIubGlzdCA9IChtZXNzYWdlLCBmaWVsZE5vKSA9PiB7XG4gICAgICAgIGlmIChpcyhtZXNzYWdlKSkge1xuICAgICAgICAgICAgbGV0IGFsbCA9IG1lc3NhZ2VbVW5rbm93bkZpZWxkSGFuZGxlci5zeW1ib2xdO1xuICAgICAgICAgICAgcmV0dXJuIGZpZWxkTm8gPyBhbGwuZmlsdGVyKHVmID0+IHVmLm5vID09IGZpZWxkTm8pIDogYWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGxhc3QgdW5rbm93biBmaWVsZCBieSBmaWVsZCBudW1iZXIuXG4gICAgICovXG4gICAgVW5rbm93bkZpZWxkSGFuZGxlci5sYXN0ID0gKG1lc3NhZ2UsIGZpZWxkTm8pID0+IFVua25vd25GaWVsZEhhbmRsZXIubGlzdChtZXNzYWdlLCBmaWVsZE5vKS5zbGljZSgtMSlbMF07XG4gICAgY29uc3QgaXMgPSAobWVzc2FnZSkgPT4gbWVzc2FnZSAmJiBBcnJheS5pc0FycmF5KG1lc3NhZ2VbVW5rbm93bkZpZWxkSGFuZGxlci5zeW1ib2xdKTtcbn0pKFVua25vd25GaWVsZEhhbmRsZXIgPSBleHBvcnRzLlVua25vd25GaWVsZEhhbmRsZXIgfHwgKGV4cG9ydHMuVW5rbm93bkZpZWxkSGFuZGxlciA9IHt9KSk7XG4vKipcbiAqIE1lcmdlcyBiaW5hcnkgd3JpdGUgb3IgcmVhZCBvcHRpb25zLiBMYXRlciB2YWx1ZXMgb3ZlcnJpZGUgZWFybGllciB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIG1lcmdlQmluYXJ5T3B0aW9ucyhhLCBiKSB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYSksIGIpO1xufVxuZXhwb3J0cy5tZXJnZUJpbmFyeU9wdGlvbnMgPSBtZXJnZUJpbmFyeU9wdGlvbnM7XG4vKipcbiAqIFByb3RvYnVmIGJpbmFyeSBmb3JtYXQgd2lyZSB0eXBlcy5cbiAqXG4gKiBBIHdpcmUgdHlwZSBwcm92aWRlcyBqdXN0IGVub3VnaCBpbmZvcm1hdGlvbiB0byBmaW5kIHRoZSBsZW5ndGggb2YgdGhlXG4gKiBmb2xsb3dpbmcgdmFsdWUuXG4gKlxuICogU2VlIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvZG9jcy9lbmNvZGluZyNzdHJ1Y3R1cmVcbiAqL1xudmFyIFdpcmVUeXBlO1xuKGZ1bmN0aW9uIChXaXJlVHlwZSkge1xuICAgIC8qKlxuICAgICAqIFVzZWQgZm9yIGludDMyLCBpbnQ2NCwgdWludDMyLCB1aW50NjQsIHNpbnQzMiwgc2ludDY0LCBib29sLCBlbnVtXG4gICAgICovXG4gICAgV2lyZVR5cGVbV2lyZVR5cGVbXCJWYXJpbnRcIl0gPSAwXSA9IFwiVmFyaW50XCI7XG4gICAgLyoqXG4gICAgICogVXNlZCBmb3IgZml4ZWQ2NCwgc2ZpeGVkNjQsIGRvdWJsZS5cbiAgICAgKiBBbHdheXMgOCBieXRlcyB3aXRoIGxpdHRsZS1lbmRpYW4gYnl0ZSBvcmRlci5cbiAgICAgKi9cbiAgICBXaXJlVHlwZVtXaXJlVHlwZVtcIkJpdDY0XCJdID0gMV0gPSBcIkJpdDY0XCI7XG4gICAgLyoqXG4gICAgICogVXNlZCBmb3Igc3RyaW5nLCBieXRlcywgZW1iZWRkZWQgbWVzc2FnZXMsIHBhY2tlZCByZXBlYXRlZCBmaWVsZHNcbiAgICAgKlxuICAgICAqIE9ubHkgcmVwZWF0ZWQgbnVtZXJpYyB0eXBlcyAodHlwZXMgd2hpY2ggdXNlIHRoZSB2YXJpbnQsIDMyLWJpdCxcbiAgICAgKiBvciA2NC1iaXQgd2lyZSB0eXBlcykgY2FuIGJlIHBhY2tlZC4gSW4gcHJvdG8zLCBzdWNoIGZpZWxkcyBhcmVcbiAgICAgKiBwYWNrZWQgYnkgZGVmYXVsdC5cbiAgICAgKi9cbiAgICBXaXJlVHlwZVtXaXJlVHlwZVtcIkxlbmd0aERlbGltaXRlZFwiXSA9IDJdID0gXCJMZW5ndGhEZWxpbWl0ZWRcIjtcbiAgICAvKipcbiAgICAgKiBVc2VkIGZvciBncm91cHNcbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqL1xuICAgIFdpcmVUeXBlW1dpcmVUeXBlW1wiU3RhcnRHcm91cFwiXSA9IDNdID0gXCJTdGFydEdyb3VwXCI7XG4gICAgLyoqXG4gICAgICogVXNlZCBmb3IgZ3JvdXBzXG4gICAgICogQGRlcHJlY2F0ZWRcbiAgICAgKi9cbiAgICBXaXJlVHlwZVtXaXJlVHlwZVtcIkVuZEdyb3VwXCJdID0gNF0gPSBcIkVuZEdyb3VwXCI7XG4gICAgLyoqXG4gICAgICogVXNlZCBmb3IgZml4ZWQzMiwgc2ZpeGVkMzIsIGZsb2F0LlxuICAgICAqIEFsd2F5cyA0IGJ5dGVzIHdpdGggbGl0dGxlLWVuZGlhbiBieXRlIG9yZGVyLlxuICAgICAqL1xuICAgIFdpcmVUeXBlW1dpcmVUeXBlW1wiQml0MzJcIl0gPSA1XSA9IFwiQml0MzJcIjtcbn0pKFdpcmVUeXBlID0gZXhwb3J0cy5XaXJlVHlwZSB8fCAoZXhwb3J0cy5XaXJlVHlwZSA9IHt9KSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vL1xuLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlXG4vLyBtZXQ6XG4vL1xuLy8gKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuLy8gKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlXG4vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyXG4vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlXG4vLyBkaXN0cmlidXRpb24uXG4vLyAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHNcbi8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tXG4vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuLy9cbi8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlNcbi8vIFwiQVMgSVNcIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Rcbi8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUlxuLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFRcbi8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLFxuLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVFxuLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsXG4vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTllcbi8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbi8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRVxuLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbi8vXG4vLyBDb2RlIGdlbmVyYXRlZCBieSB0aGUgUHJvdG9jb2wgQnVmZmVyIGNvbXBpbGVyIGlzIG93bmVkIGJ5IHRoZSBvd25lclxuLy8gb2YgdGhlIGlucHV0IGZpbGUgdXNlZCB3aGVuIGdlbmVyYXRpbmcgaXQuICBUaGlzIGNvZGUgaXMgbm90XG4vLyBzdGFuZGFsb25lIGFuZCByZXF1aXJlcyBhIHN1cHBvcnQgbGlicmFyeSB0byBiZSBsaW5rZWQgd2l0aCBpdC4gIFRoaXNcbi8vIHN1cHBvcnQgbGlicmFyeSBpcyBpdHNlbGYgY292ZXJlZCBieSB0aGUgYWJvdmUgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudmFyaW50MzJyZWFkID0gZXhwb3J0cy52YXJpbnQzMndyaXRlID0gZXhwb3J0cy5pbnQ2NHRvU3RyaW5nID0gZXhwb3J0cy5pbnQ2NGZyb21TdHJpbmcgPSBleHBvcnRzLnZhcmludDY0d3JpdGUgPSBleHBvcnRzLnZhcmludDY0cmVhZCA9IHZvaWQgMDtcbi8qKlxuICogUmVhZCBhIDY0IGJpdCB2YXJpbnQgYXMgdHdvIEpTIG51bWJlcnMuXG4gKlxuICogUmV0dXJucyB0dXBsZTpcbiAqIFswXTogbG93IGJpdHNcbiAqIFswXTogaGlnaCBiaXRzXG4gKlxuICogQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9wcm90b2NvbGJ1ZmZlcnMvcHJvdG9idWYvYmxvYi84YTcxOTI3ZDc0YTRjZTM0ZWZlMmQ4NzY5ZmRhMTk4ZjUyZDIwZDEyL2pzL2V4cGVyaW1lbnRhbC9ydW50aW1lL2tlcm5lbC9idWZmZXJfZGVjb2Rlci5qcyNMMTc1XG4gKi9cbmZ1bmN0aW9uIHZhcmludDY0cmVhZCgpIHtcbiAgICBsZXQgbG93Qml0cyA9IDA7XG4gICAgbGV0IGhpZ2hCaXRzID0gMDtcbiAgICBmb3IgKGxldCBzaGlmdCA9IDA7IHNoaWZ0IDwgMjg7IHNoaWZ0ICs9IDcpIHtcbiAgICAgICAgbGV0IGIgPSB0aGlzLmJ1Zlt0aGlzLnBvcysrXTtcbiAgICAgICAgbG93Qml0cyB8PSAoYiAmIDB4N0YpIDw8IHNoaWZ0O1xuICAgICAgICBpZiAoKGIgJiAweDgwKSA9PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmFzc2VydEJvdW5kcygpO1xuICAgICAgICAgICAgcmV0dXJuIFtsb3dCaXRzLCBoaWdoQml0c107XG4gICAgICAgIH1cbiAgICB9XG4gICAgbGV0IG1pZGRsZUJ5dGUgPSB0aGlzLmJ1Zlt0aGlzLnBvcysrXTtcbiAgICAvLyBsYXN0IGZvdXIgYml0cyBvZiB0aGUgZmlyc3QgMzIgYml0IG51bWJlclxuICAgIGxvd0JpdHMgfD0gKG1pZGRsZUJ5dGUgJiAweDBGKSA8PCAyODtcbiAgICAvLyAzIHVwcGVyIGJpdHMgYXJlIHBhcnQgb2YgdGhlIG5leHQgMzIgYml0IG51bWJlclxuICAgIGhpZ2hCaXRzID0gKG1pZGRsZUJ5dGUgJiAweDcwKSA+PiA0O1xuICAgIGlmICgobWlkZGxlQnl0ZSAmIDB4ODApID09IDApIHtcbiAgICAgICAgdGhpcy5hc3NlcnRCb3VuZHMoKTtcbiAgICAgICAgcmV0dXJuIFtsb3dCaXRzLCBoaWdoQml0c107XG4gICAgfVxuICAgIGZvciAobGV0IHNoaWZ0ID0gMzsgc2hpZnQgPD0gMzE7IHNoaWZ0ICs9IDcpIHtcbiAgICAgICAgbGV0IGIgPSB0aGlzLmJ1Zlt0aGlzLnBvcysrXTtcbiAgICAgICAgaGlnaEJpdHMgfD0gKGIgJiAweDdGKSA8PCBzaGlmdDtcbiAgICAgICAgaWYgKChiICYgMHg4MCkgPT0gMCkge1xuICAgICAgICAgICAgdGhpcy5hc3NlcnRCb3VuZHMoKTtcbiAgICAgICAgICAgIHJldHVybiBbbG93Qml0cywgaGlnaEJpdHNdO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCB2YXJpbnQnKTtcbn1cbmV4cG9ydHMudmFyaW50NjRyZWFkID0gdmFyaW50NjRyZWFkO1xuLyoqXG4gKiBXcml0ZSBhIDY0IGJpdCB2YXJpbnQsIGdpdmVuIGFzIHR3byBKUyBudW1iZXJzLCB0byB0aGUgZ2l2ZW4gYnl0ZXMgYXJyYXkuXG4gKlxuICogQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9wcm90b2NvbGJ1ZmZlcnMvcHJvdG9idWYvYmxvYi84YTcxOTI3ZDc0YTRjZTM0ZWZlMmQ4NzY5ZmRhMTk4ZjUyZDIwZDEyL2pzL2V4cGVyaW1lbnRhbC9ydW50aW1lL2tlcm5lbC93cml0ZXIuanMjTDM0NFxuICovXG5mdW5jdGlvbiB2YXJpbnQ2NHdyaXRlKGxvLCBoaSwgYnl0ZXMpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDI4OyBpID0gaSArIDcpIHtcbiAgICAgICAgY29uc3Qgc2hpZnQgPSBsbyA+Pj4gaTtcbiAgICAgICAgY29uc3QgaGFzTmV4dCA9ICEoKHNoaWZ0ID4+PiA3KSA9PSAwICYmIGhpID09IDApO1xuICAgICAgICBjb25zdCBieXRlID0gKGhhc05leHQgPyBzaGlmdCB8IDB4ODAgOiBzaGlmdCkgJiAweEZGO1xuICAgICAgICBieXRlcy5wdXNoKGJ5dGUpO1xuICAgICAgICBpZiAoIWhhc05leHQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBzcGxpdEJpdHMgPSAoKGxvID4+PiAyOCkgJiAweDBGKSB8ICgoaGkgJiAweDA3KSA8PCA0KTtcbiAgICBjb25zdCBoYXNNb3JlQml0cyA9ICEoKGhpID4+IDMpID09IDApO1xuICAgIGJ5dGVzLnB1c2goKGhhc01vcmVCaXRzID8gc3BsaXRCaXRzIHwgMHg4MCA6IHNwbGl0Qml0cykgJiAweEZGKTtcbiAgICBpZiAoIWhhc01vcmVCaXRzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDM7IGkgPCAzMTsgaSA9IGkgKyA3KSB7XG4gICAgICAgIGNvbnN0IHNoaWZ0ID0gaGkgPj4+IGk7XG4gICAgICAgIGNvbnN0IGhhc05leHQgPSAhKChzaGlmdCA+Pj4gNykgPT0gMCk7XG4gICAgICAgIGNvbnN0IGJ5dGUgPSAoaGFzTmV4dCA/IHNoaWZ0IHwgMHg4MCA6IHNoaWZ0KSAmIDB4RkY7XG4gICAgICAgIGJ5dGVzLnB1c2goYnl0ZSk7XG4gICAgICAgIGlmICghaGFzTmV4dCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuICAgIGJ5dGVzLnB1c2goKGhpID4+PiAzMSkgJiAweDAxKTtcbn1cbmV4cG9ydHMudmFyaW50NjR3cml0ZSA9IHZhcmludDY0d3JpdGU7XG4vLyBjb25zdGFudHMgZm9yIGJpbmFyeSBtYXRoXG5jb25zdCBUV09fUFdSXzMyX0RCTCA9ICgxIDw8IDE2KSAqICgxIDw8IDE2KTtcbi8qKlxuICogUGFyc2UgZGVjaW1hbCBzdHJpbmcgb2YgNjQgYml0IGludGVnZXIgdmFsdWUgYXMgdHdvIEpTIG51bWJlcnMuXG4gKlxuICogUmV0dXJucyB0dXBsZTpcbiAqIFswXTogbWludXMgc2lnbj9cbiAqIFsxXTogbG93IGJpdHNcbiAqIFsyXTogaGlnaCBiaXRzXG4gKlxuICogQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy5cbiAqL1xuZnVuY3Rpb24gaW50NjRmcm9tU3RyaW5nKGRlYykge1xuICAgIC8vIENoZWNrIGZvciBtaW51cyBzaWduLlxuICAgIGxldCBtaW51cyA9IGRlY1swXSA9PSAnLSc7XG4gICAgaWYgKG1pbnVzKVxuICAgICAgICBkZWMgPSBkZWMuc2xpY2UoMSk7XG4gICAgLy8gV29yayA2IGRlY2ltYWwgZGlnaXRzIGF0IGEgdGltZSwgYWN0aW5nIGxpa2Ugd2UncmUgY29udmVydGluZyBiYXNlIDFlNlxuICAgIC8vIGRpZ2l0cyB0byBiaW5hcnkuIFRoaXMgaXMgc2FmZSB0byBkbyB3aXRoIGZsb2F0aW5nIHBvaW50IG1hdGggYmVjYXVzZVxuICAgIC8vIE51bWJlci5pc1NhZmVJbnRlZ2VyKEFMTF8zMl9CSVRTICogMWU2KSA9PSB0cnVlLlxuICAgIGNvbnN0IGJhc2UgPSAxZTY7XG4gICAgbGV0IGxvd0JpdHMgPSAwO1xuICAgIGxldCBoaWdoQml0cyA9IDA7XG4gICAgZnVuY3Rpb24gYWRkMWU2ZGlnaXQoYmVnaW4sIGVuZCkge1xuICAgICAgICAvLyBOb3RlOiBOdW1iZXIoJycpIGlzIDAuXG4gICAgICAgIGNvbnN0IGRpZ2l0MWU2ID0gTnVtYmVyKGRlYy5zbGljZShiZWdpbiwgZW5kKSk7XG4gICAgICAgIGhpZ2hCaXRzICo9IGJhc2U7XG4gICAgICAgIGxvd0JpdHMgPSBsb3dCaXRzICogYmFzZSArIGRpZ2l0MWU2O1xuICAgICAgICAvLyBDYXJyeSBiaXRzIGZyb20gbG93Qml0cyB0byBoaWdoQml0c1xuICAgICAgICBpZiAobG93Qml0cyA+PSBUV09fUFdSXzMyX0RCTCkge1xuICAgICAgICAgICAgaGlnaEJpdHMgPSBoaWdoQml0cyArICgobG93Qml0cyAvIFRXT19QV1JfMzJfREJMKSB8IDApO1xuICAgICAgICAgICAgbG93Qml0cyA9IGxvd0JpdHMgJSBUV09fUFdSXzMyX0RCTDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhZGQxZTZkaWdpdCgtMjQsIC0xOCk7XG4gICAgYWRkMWU2ZGlnaXQoLTE4LCAtMTIpO1xuICAgIGFkZDFlNmRpZ2l0KC0xMiwgLTYpO1xuICAgIGFkZDFlNmRpZ2l0KC02KTtcbiAgICByZXR1cm4gW21pbnVzLCBsb3dCaXRzLCBoaWdoQml0c107XG59XG5leHBvcnRzLmludDY0ZnJvbVN0cmluZyA9IGludDY0ZnJvbVN0cmluZztcbi8qKlxuICogRm9ybWF0IDY0IGJpdCBpbnRlZ2VyIHZhbHVlIChhcyB0d28gSlMgbnVtYmVycykgdG8gZGVjaW1hbCBzdHJpbmcuXG4gKlxuICogQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy5cbiAqL1xuZnVuY3Rpb24gaW50NjR0b1N0cmluZyhiaXRzTG93LCBiaXRzSGlnaCkge1xuICAgIC8vIFNraXAgdGhlIGV4cGVuc2l2ZSBjb252ZXJzaW9uIGlmIHRoZSBudW1iZXIgaXMgc21hbGwgZW5vdWdoIHRvIHVzZSB0aGVcbiAgICAvLyBidWlsdC1pbiBjb252ZXJzaW9ucy5cbiAgICBpZiAoKGJpdHNIaWdoID4+PiAwKSA8PSAweDFGRkZGRikge1xuICAgICAgICByZXR1cm4gJycgKyAoVFdPX1BXUl8zMl9EQkwgKiBiaXRzSGlnaCArIChiaXRzTG93ID4+PiAwKSk7XG4gICAgfVxuICAgIC8vIFdoYXQgdGhpcyBjb2RlIGlzIGRvaW5nIGlzIGVzc2VudGlhbGx5IGNvbnZlcnRpbmcgdGhlIGlucHV0IG51bWJlciBmcm9tXG4gICAgLy8gYmFzZS0yIHRvIGJhc2UtMWU3LCB3aGljaCBhbGxvd3MgdXMgdG8gcmVwcmVzZW50IHRoZSA2NC1iaXQgcmFuZ2Ugd2l0aFxuICAgIC8vIG9ubHkgMyAodmVyeSBsYXJnZSkgZGlnaXRzLiBUaG9zZSBkaWdpdHMgYXJlIHRoZW4gdHJpdmlhbCB0byBjb252ZXJ0IHRvXG4gICAgLy8gYSBiYXNlLTEwIHN0cmluZy5cbiAgICAvLyBUaGUgbWFnaWMgbnVtYmVycyB1c2VkIGhlcmUgYXJlIC1cbiAgICAvLyAyXjI0ID0gMTY3NzcyMTYgPSAoMSw2Nzc3MjE2KSBpbiBiYXNlLTFlNy5cbiAgICAvLyAyXjQ4ID0gMjgxNDc0OTc2NzEwNjU2ID0gKDIsODE0NzQ5Nyw2NzEwNjU2KSBpbiBiYXNlLTFlNy5cbiAgICAvLyBTcGxpdCAzMjozMiByZXByZXNlbnRhdGlvbiBpbnRvIDE2OjI0OjI0IHJlcHJlc2VudGF0aW9uIHNvIG91clxuICAgIC8vIGludGVybWVkaWF0ZSBkaWdpdHMgZG9uJ3Qgb3ZlcmZsb3cuXG4gICAgbGV0IGxvdyA9IGJpdHNMb3cgJiAweEZGRkZGRjtcbiAgICBsZXQgbWlkID0gKCgoYml0c0xvdyA+Pj4gMjQpIHwgKGJpdHNIaWdoIDw8IDgpKSA+Pj4gMCkgJiAweEZGRkZGRjtcbiAgICBsZXQgaGlnaCA9IChiaXRzSGlnaCA+PiAxNikgJiAweEZGRkY7XG4gICAgLy8gQXNzZW1ibGUgb3VyIHRocmVlIGJhc2UtMWU3IGRpZ2l0cywgaWdub3JpbmcgY2Fycmllcy4gVGhlIG1heGltdW1cbiAgICAvLyB2YWx1ZSBpbiBhIGRpZ2l0IGF0IHRoaXMgc3RlcCBpcyByZXByZXNlbnRhYmxlIGFzIGEgNDgtYml0IGludGVnZXIsIHdoaWNoXG4gICAgLy8gY2FuIGJlIHN0b3JlZCBpbiBhIDY0LWJpdCBmbG9hdGluZyBwb2ludCBudW1iZXIuXG4gICAgbGV0IGRpZ2l0QSA9IGxvdyArIChtaWQgKiA2Nzc3MjE2KSArIChoaWdoICogNjcxMDY1Nik7XG4gICAgbGV0IGRpZ2l0QiA9IG1pZCArIChoaWdoICogODE0NzQ5Nyk7XG4gICAgbGV0IGRpZ2l0QyA9IChoaWdoICogMik7XG4gICAgLy8gQXBwbHkgY2FycmllcyBmcm9tIEEgdG8gQiBhbmQgZnJvbSBCIHRvIEMuXG4gICAgbGV0IGJhc2UgPSAxMDAwMDAwMDtcbiAgICBpZiAoZGlnaXRBID49IGJhc2UpIHtcbiAgICAgICAgZGlnaXRCICs9IE1hdGguZmxvb3IoZGlnaXRBIC8gYmFzZSk7XG4gICAgICAgIGRpZ2l0QSAlPSBiYXNlO1xuICAgIH1cbiAgICBpZiAoZGlnaXRCID49IGJhc2UpIHtcbiAgICAgICAgZGlnaXRDICs9IE1hdGguZmxvb3IoZGlnaXRCIC8gYmFzZSk7XG4gICAgICAgIGRpZ2l0QiAlPSBiYXNlO1xuICAgIH1cbiAgICAvLyBDb252ZXJ0IGJhc2UtMWU3IGRpZ2l0cyB0byBiYXNlLTEwLCB3aXRoIG9wdGlvbmFsIGxlYWRpbmcgemVyb2VzLlxuICAgIGZ1bmN0aW9uIGRlY2ltYWxGcm9tMWU3KGRpZ2l0MWU3LCBuZWVkTGVhZGluZ1plcm9zKSB7XG4gICAgICAgIGxldCBwYXJ0aWFsID0gZGlnaXQxZTcgPyBTdHJpbmcoZGlnaXQxZTcpIDogJyc7XG4gICAgICAgIGlmIChuZWVkTGVhZGluZ1plcm9zKSB7XG4gICAgICAgICAgICByZXR1cm4gJzAwMDAwMDAnLnNsaWNlKHBhcnRpYWwubGVuZ3RoKSArIHBhcnRpYWw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcnRpYWw7XG4gICAgfVxuICAgIHJldHVybiBkZWNpbWFsRnJvbTFlNyhkaWdpdEMsIC8qbmVlZExlYWRpbmdaZXJvcz0qLyAwKSArXG4gICAgICAgIGRlY2ltYWxGcm9tMWU3KGRpZ2l0QiwgLypuZWVkTGVhZGluZ1plcm9zPSovIGRpZ2l0QykgK1xuICAgICAgICAvLyBJZiB0aGUgZmluYWwgMWU3IGRpZ2l0IGRpZG4ndCBuZWVkIGxlYWRpbmcgemVyb3MsIHdlIHdvdWxkIGhhdmVcbiAgICAgICAgLy8gcmV0dXJuZWQgdmlhIHRoZSB0cml2aWFsIGNvZGUgcGF0aCBhdCB0aGUgdG9wLlxuICAgICAgICBkZWNpbWFsRnJvbTFlNyhkaWdpdEEsIC8qbmVlZExlYWRpbmdaZXJvcz0qLyAxKTtcbn1cbmV4cG9ydHMuaW50NjR0b1N0cmluZyA9IGludDY0dG9TdHJpbmc7XG4vKipcbiAqIFdyaXRlIGEgMzIgYml0IHZhcmludCwgc2lnbmVkIG9yIHVuc2lnbmVkLiBTYW1lIGFzIGB2YXJpbnQ2NHdyaXRlKDAsIHZhbHVlLCBieXRlcylgXG4gKlxuICogQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9wcm90b2NvbGJ1ZmZlcnMvcHJvdG9idWYvYmxvYi8xYjE4ODMzZjRmMmEyZjY4MWY0ZTRhMjVjZGYzYjBhNDMxMTVlYzI2L2pzL2JpbmFyeS9lbmNvZGVyLmpzI0wxNDRcbiAqL1xuZnVuY3Rpb24gdmFyaW50MzJ3cml0ZSh2YWx1ZSwgYnl0ZXMpIHtcbiAgICBpZiAodmFsdWUgPj0gMCkge1xuICAgICAgICAvLyB3cml0ZSB2YWx1ZSBhcyB2YXJpbnQgMzJcbiAgICAgICAgd2hpbGUgKHZhbHVlID4gMHg3Zikge1xuICAgICAgICAgICAgYnl0ZXMucHVzaCgodmFsdWUgJiAweDdmKSB8IDB4ODApO1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSA+Pj4gNztcbiAgICAgICAgfVxuICAgICAgICBieXRlcy5wdXNoKHZhbHVlKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgOTsgaSsrKSB7XG4gICAgICAgICAgICBieXRlcy5wdXNoKHZhbHVlICYgMTI3IHwgMTI4KTtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgPj4gNztcbiAgICAgICAgfVxuICAgICAgICBieXRlcy5wdXNoKDEpO1xuICAgIH1cbn1cbmV4cG9ydHMudmFyaW50MzJ3cml0ZSA9IHZhcmludDMyd3JpdGU7XG4vKipcbiAqIFJlYWQgYW4gdW5zaWduZWQgMzIgYml0IHZhcmludC5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3Byb3RvY29sYnVmZmVycy9wcm90b2J1Zi9ibG9iLzhhNzE5MjdkNzRhNGNlMzRlZmUyZDg3NjlmZGExOThmNTJkMjBkMTIvanMvZXhwZXJpbWVudGFsL3J1bnRpbWUva2VybmVsL2J1ZmZlcl9kZWNvZGVyLmpzI0wyMjBcbiAqL1xuZnVuY3Rpb24gdmFyaW50MzJyZWFkKCkge1xuICAgIGxldCBiID0gdGhpcy5idWZbdGhpcy5wb3MrK107XG4gICAgbGV0IHJlc3VsdCA9IGIgJiAweDdGO1xuICAgIGlmICgoYiAmIDB4ODApID09IDApIHtcbiAgICAgICAgdGhpcy5hc3NlcnRCb3VuZHMoKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgYiA9IHRoaXMuYnVmW3RoaXMucG9zKytdO1xuICAgIHJlc3VsdCB8PSAoYiAmIDB4N0YpIDw8IDc7XG4gICAgaWYgKChiICYgMHg4MCkgPT0gMCkge1xuICAgICAgICB0aGlzLmFzc2VydEJvdW5kcygpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBiID0gdGhpcy5idWZbdGhpcy5wb3MrK107XG4gICAgcmVzdWx0IHw9IChiICYgMHg3RikgPDwgMTQ7XG4gICAgaWYgKChiICYgMHg4MCkgPT0gMCkge1xuICAgICAgICB0aGlzLmFzc2VydEJvdW5kcygpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBiID0gdGhpcy5idWZbdGhpcy5wb3MrK107XG4gICAgcmVzdWx0IHw9IChiICYgMHg3RikgPDwgMjE7XG4gICAgaWYgKChiICYgMHg4MCkgPT0gMCkge1xuICAgICAgICB0aGlzLmFzc2VydEJvdW5kcygpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICAvLyBFeHRyYWN0IG9ubHkgbGFzdCA0IGJpdHNcbiAgICBiID0gdGhpcy5idWZbdGhpcy5wb3MrK107XG4gICAgcmVzdWx0IHw9IChiICYgMHgwRikgPDwgMjg7XG4gICAgZm9yIChsZXQgcmVhZEJ5dGVzID0gNTsgKChiICYgMHg4MCkgIT09IDApICYmIHJlYWRCeXRlcyA8IDEwOyByZWFkQnl0ZXMrKylcbiAgICAgICAgYiA9IHRoaXMuYnVmW3RoaXMucG9zKytdO1xuICAgIGlmICgoYiAmIDB4ODApICE9IDApXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCB2YXJpbnQnKTtcbiAgICB0aGlzLmFzc2VydEJvdW5kcygpO1xuICAgIC8vIFJlc3VsdCBjYW4gaGF2ZSAzMiBiaXRzLCBjb252ZXJ0IGl0IHRvIHVuc2lnbmVkXG4gICAgcmV0dXJuIHJlc3VsdCA+Pj4gMDtcbn1cbmV4cG9ydHMudmFyaW50MzJyZWFkID0gdmFyaW50MzJyZWFkO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUGJMb25nID0gZXhwb3J0cy5QYlVMb25nID0gZXhwb3J0cy5kZXRlY3RCaSA9IHZvaWQgMDtcbmNvbnN0IGdvb2dfdmFyaW50XzEgPSByZXF1aXJlKFwiLi9nb29nLXZhcmludFwiKTtcbmxldCBCSTtcbmZ1bmN0aW9uIGRldGVjdEJpKCkge1xuICAgIGNvbnN0IGR2ID0gbmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcig4KSk7XG4gICAgY29uc3Qgb2sgPSBnbG9iYWxUaGlzLkJpZ0ludCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICYmIHR5cGVvZiBkdi5nZXRCaWdJbnQ2NCA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICYmIHR5cGVvZiBkdi5nZXRCaWdVaW50NjQgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAmJiB0eXBlb2YgZHYuc2V0QmlnSW50NjQgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAmJiB0eXBlb2YgZHYuc2V0QmlnVWludDY0ID09PSBcImZ1bmN0aW9uXCI7XG4gICAgQkkgPSBvayA/IHtcbiAgICAgICAgTUlOOiBCaWdJbnQoXCItOTIyMzM3MjAzNjg1NDc3NTgwOFwiKSxcbiAgICAgICAgTUFYOiBCaWdJbnQoXCI5MjIzMzcyMDM2ODU0Nzc1ODA3XCIpLFxuICAgICAgICBVTUlOOiBCaWdJbnQoXCIwXCIpLFxuICAgICAgICBVTUFYOiBCaWdJbnQoXCIxODQ0Njc0NDA3MzcwOTU1MTYxNVwiKSxcbiAgICAgICAgQzogQmlnSW50LFxuICAgICAgICBWOiBkdixcbiAgICB9IDogdW5kZWZpbmVkO1xufVxuZXhwb3J0cy5kZXRlY3RCaSA9IGRldGVjdEJpO1xuZGV0ZWN0QmkoKTtcbmZ1bmN0aW9uIGFzc2VydEJpKGJpKSB7XG4gICAgaWYgKCFiaSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmlnSW50IHVuYXZhaWxhYmxlLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3RpbW9zdGFtbS9wcm90b2J1Zi10cy9ibG9iL3YxLjAuOC9NQU5VQUwubWQjYmlnaW50LXN1cHBvcnRcIik7XG59XG4vLyB1c2VkIHRvIHZhbGlkYXRlIGZyb20oc3RyaW5nKSBpbnB1dCAod2hlbiBiaWdpbnQgaXMgdW5hdmFpbGFibGUpXG5jb25zdCBSRV9ERUNJTUFMX1NUUiA9IC9eLT9bMC05XSskLztcbi8vIGNvbnN0YW50cyBmb3IgYmluYXJ5IG1hdGhcbmNvbnN0IFRXT19QV1JfMzJfREJMID0gMHgxMDAwMDAwMDA7XG5jb25zdCBIQUxGXzJfUFdSXzMyID0gMHgwODAwMDAwMDA7XG4vLyBiYXNlIGNsYXNzIGZvciBQYkxvbmcgYW5kIFBiVUxvbmcgcHJvdmlkZXMgc2hhcmVkIGNvZGVcbmNsYXNzIFNoYXJlZFBiTG9uZyB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIHdpdGggdGhlIGdpdmVuIGJpdHMuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IobG8sIGhpKSB7XG4gICAgICAgIHRoaXMubG8gPSBsbyB8IDA7XG4gICAgICAgIHRoaXMuaGkgPSBoaSB8IDA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElzIHRoaXMgaW5zdGFuY2UgZXF1YWwgdG8gMD9cbiAgICAgKi9cbiAgICBpc1plcm8oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvID09IDAgJiYgdGhpcy5oaSA9PSAwO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IHRvIGEgbmF0aXZlIG51bWJlci5cbiAgICAgKi9cbiAgICB0b051bWJlcigpIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHRoaXMuaGkgKiBUV09fUFdSXzMyX0RCTCArICh0aGlzLmxvID4+PiAwKTtcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihyZXN1bHQpKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiY2Fubm90IGNvbnZlcnQgdG8gc2FmZSBudW1iZXJcIik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLyoqXG4gKiA2NC1iaXQgdW5zaWduZWQgaW50ZWdlciBhcyB0d28gMzItYml0IHZhbHVlcy5cbiAqIENvbnZlcnRzIGJldHdlZW4gYHN0cmluZ2AsIGBudW1iZXJgIGFuZCBgYmlnaW50YCByZXByZXNlbnRhdGlvbnMuXG4gKi9cbmNsYXNzIFBiVUxvbmcgZXh0ZW5kcyBTaGFyZWRQYkxvbmcge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZSBpbnN0YW5jZSBmcm9tIGEgYHN0cmluZ2AsIGBudW1iZXJgIG9yIGBiaWdpbnRgLlxuICAgICAqL1xuICAgIHN0YXRpYyBmcm9tKHZhbHVlKSB7XG4gICAgICAgIGlmIChCSSlcbiAgICAgICAgICAgIC8vIG5vaW5zcGVjdGlvbiBGYWxsVGhyb3VnaEluU3dpdGNoU3RhdGVtZW50SlNcbiAgICAgICAgICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gXCIwXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5aRVJPO1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gXCJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc3RyaW5nIGlzIG5vIGludGVnZXInKTtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBCSS5DKHZhbHVlKTtcbiAgICAgICAgICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLlpFUk87XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gQkkuQyh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgY2FzZSBcImJpZ2ludFwiOlxuICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuWkVSTztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlIDwgQkkuVU1JTilcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc2lnbmVkIHZhbHVlIGZvciB1bG9uZycpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPiBCSS5VTUFYKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bG9uZyB0b28gbGFyZ2UnKTtcbiAgICAgICAgICAgICAgICAgICAgQkkuVi5zZXRCaWdVaW50NjQoMCwgdmFsdWUsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFBiVUxvbmcoQkkuVi5nZXRJbnQzMigwLCB0cnVlKSwgQkkuVi5nZXRJbnQzMig0LCB0cnVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gXCIwXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5aRVJPO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFSRV9ERUNJTUFMX1NUUi50ZXN0KHZhbHVlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc3RyaW5nIGlzIG5vIGludGVnZXInKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IFttaW51cywgbG8sIGhpXSA9IGdvb2dfdmFyaW50XzEuaW50NjRmcm9tU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1pbnVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzaWduZWQgdmFsdWUgZm9yIHVsb25nJyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUGJVTG9uZyhsbywgaGkpO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IDApXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5aRVJPO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKHZhbHVlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbnVtYmVyIGlzIG5vIGludGVnZXInKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlIDwgMClcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc2lnbmVkIHZhbHVlIGZvciB1bG9uZycpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFBiVUxvbmcodmFsdWUsIHZhbHVlIC8gVFdPX1BXUl8zMl9EQkwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vua25vd24gdmFsdWUgJyArIHR5cGVvZiB2YWx1ZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgdG8gZGVjaW1hbCBzdHJpbmcuXG4gICAgICovXG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiBCSSA/IHRoaXMudG9CaWdJbnQoKS50b1N0cmluZygpIDogZ29vZ192YXJpbnRfMS5pbnQ2NHRvU3RyaW5nKHRoaXMubG8sIHRoaXMuaGkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IHRvIG5hdGl2ZSBiaWdpbnQuXG4gICAgICovXG4gICAgdG9CaWdJbnQoKSB7XG4gICAgICAgIGFzc2VydEJpKEJJKTtcbiAgICAgICAgQkkuVi5zZXRJbnQzMigwLCB0aGlzLmxvLCB0cnVlKTtcbiAgICAgICAgQkkuVi5zZXRJbnQzMig0LCB0aGlzLmhpLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIEJJLlYuZ2V0QmlnVWludDY0KDAsIHRydWUpO1xuICAgIH1cbn1cbmV4cG9ydHMuUGJVTG9uZyA9IFBiVUxvbmc7XG4vKipcbiAqIHVsb25nIDAgc2luZ2xldG9uLlxuICovXG5QYlVMb25nLlpFUk8gPSBuZXcgUGJVTG9uZygwLCAwKTtcbi8qKlxuICogNjQtYml0IHNpZ25lZCBpbnRlZ2VyIGFzIHR3byAzMi1iaXQgdmFsdWVzLlxuICogQ29udmVydHMgYmV0d2VlbiBgc3RyaW5nYCwgYG51bWJlcmAgYW5kIGBiaWdpbnRgIHJlcHJlc2VudGF0aW9ucy5cbiAqL1xuY2xhc3MgUGJMb25nIGV4dGVuZHMgU2hhcmVkUGJMb25nIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGUgaW5zdGFuY2UgZnJvbSBhIGBzdHJpbmdgLCBgbnVtYmVyYCBvciBgYmlnaW50YC5cbiAgICAgKi9cbiAgICBzdGF0aWMgZnJvbSh2YWx1ZSkge1xuICAgICAgICBpZiAoQkkpXG4gICAgICAgICAgICAvLyBub2luc3BlY3Rpb24gRmFsbFRocm91Z2hJblN3aXRjaFN0YXRlbWVudEpTXG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IFwiMFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuWkVSTztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IFwiXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N0cmluZyBpcyBubyBpbnRlZ2VyJyk7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gQkkuQyh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IDApXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5aRVJPO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IEJJLkModmFsdWUpO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJiaWdpbnRcIjpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLlpFUk87XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA8IEJJLk1JTilcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc2lnbmVkIGxvbmcgdG9vIHNtYWxsJyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA+IEJJLk1BWClcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc2lnbmVkIGxvbmcgdG9vIGxhcmdlJyk7XG4gICAgICAgICAgICAgICAgICAgIEJJLlYuc2V0QmlnSW50NjQoMCwgdmFsdWUsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFBiTG9uZyhCSS5WLmdldEludDMyKDAsIHRydWUpLCBCSS5WLmdldEludDMyKDQsIHRydWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBcIjBcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLlpFUk87XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUudHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIVJFX0RFQ0lNQUxfU1RSLnRlc3QodmFsdWUpKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzdHJpbmcgaXMgbm8gaW50ZWdlcicpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgW21pbnVzLCBsbywgaGldID0gZ29vZ192YXJpbnRfMS5pbnQ2NGZyb21TdHJpbmcodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobWludXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoaSA+IEhBTEZfMl9QV1JfMzIgfHwgKGhpID09IEhBTEZfMl9QV1JfMzIgJiYgbG8gIT0gMCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzaWduZWQgbG9uZyB0b28gc21hbGwnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChoaSA+PSBIQUxGXzJfUFdSXzMyKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzaWduZWQgbG9uZyB0b28gbGFyZ2UnKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBibCA9IG5ldyBQYkxvbmcobG8sIGhpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1pbnVzID8gcGJsLm5lZ2F0ZSgpIDogcGJsO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IDApXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5aRVJPO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKHZhbHVlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbnVtYmVyIGlzIG5vIGludGVnZXInKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlID4gMFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBuZXcgUGJMb25nKHZhbHVlLCB2YWx1ZSAvIFRXT19QV1JfMzJfREJMKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBuZXcgUGJMb25nKC12YWx1ZSwgLXZhbHVlIC8gVFdPX1BXUl8zMl9EQkwpLm5lZ2F0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vua25vd24gdmFsdWUgJyArIHR5cGVvZiB2YWx1ZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERvIHdlIGhhdmUgYSBtaW51cyBzaWduP1xuICAgICAqL1xuICAgIGlzTmVnYXRpdmUoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5oaSAmIEhBTEZfMl9QV1JfMzIpICE9PSAwO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBOZWdhdGUgdHdvJ3MgY29tcGxlbWVudC5cbiAgICAgKiBJbnZlcnQgYWxsIHRoZSBiaXRzIGFuZCBhZGQgb25lIHRvIHRoZSByZXN1bHQuXG4gICAgICovXG4gICAgbmVnYXRlKCkge1xuICAgICAgICBsZXQgaGkgPSB+dGhpcy5oaSwgbG8gPSB0aGlzLmxvO1xuICAgICAgICBpZiAobG8pXG4gICAgICAgICAgICBsbyA9IH5sbyArIDE7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIGhpICs9IDE7XG4gICAgICAgIHJldHVybiBuZXcgUGJMb25nKGxvLCBoaSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgdG8gZGVjaW1hbCBzdHJpbmcuXG4gICAgICovXG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIGlmIChCSSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRvQmlnSW50KCkudG9TdHJpbmcoKTtcbiAgICAgICAgaWYgKHRoaXMuaXNOZWdhdGl2ZSgpKSB7XG4gICAgICAgICAgICBsZXQgbiA9IHRoaXMubmVnYXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gJy0nICsgZ29vZ192YXJpbnRfMS5pbnQ2NHRvU3RyaW5nKG4ubG8sIG4uaGkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBnb29nX3ZhcmludF8xLmludDY0dG9TdHJpbmcodGhpcy5sbywgdGhpcy5oaSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgdG8gbmF0aXZlIGJpZ2ludC5cbiAgICAgKi9cbiAgICB0b0JpZ0ludCgpIHtcbiAgICAgICAgYXNzZXJ0QmkoQkkpO1xuICAgICAgICBCSS5WLnNldEludDMyKDAsIHRoaXMubG8sIHRydWUpO1xuICAgICAgICBCSS5WLnNldEludDMyKDQsIHRoaXMuaGksIHRydWUpO1xuICAgICAgICByZXR1cm4gQkkuVi5nZXRCaWdJbnQ2NCgwLCB0cnVlKTtcbiAgICB9XG59XG5leHBvcnRzLlBiTG9uZyA9IFBiTG9uZztcbi8qKlxuICogbG9uZyAwIHNpbmdsZXRvbi5cbiAqL1xuUGJMb25nLlpFUk8gPSBuZXcgUGJMb25nKDAsIDApO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQmluYXJ5UmVhZGVyID0gZXhwb3J0cy5iaW5hcnlSZWFkT3B0aW9ucyA9IHZvaWQgMDtcbmNvbnN0IGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMSA9IHJlcXVpcmUoXCIuL2JpbmFyeS1mb3JtYXQtY29udHJhY3RcIik7XG5jb25zdCBwYl9sb25nXzEgPSByZXF1aXJlKFwiLi9wYi1sb25nXCIpO1xuY29uc3QgZ29vZ192YXJpbnRfMSA9IHJlcXVpcmUoXCIuL2dvb2ctdmFyaW50XCIpO1xuY29uc3QgZGVmYXVsdHNSZWFkID0ge1xuICAgIHJlYWRVbmtub3duRmllbGQ6IHRydWUsXG4gICAgcmVhZGVyRmFjdG9yeTogYnl0ZXMgPT4gbmV3IEJpbmFyeVJlYWRlcihieXRlcyksXG59O1xuLyoqXG4gKiBNYWtlIG9wdGlvbnMgZm9yIHJlYWRpbmcgYmluYXJ5IGRhdGEgZm9ybSBwYXJ0aWFsIG9wdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIGJpbmFyeVJlYWRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gb3B0aW9ucyA/IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdHNSZWFkKSwgb3B0aW9ucykgOiBkZWZhdWx0c1JlYWQ7XG59XG5leHBvcnRzLmJpbmFyeVJlYWRPcHRpb25zID0gYmluYXJ5UmVhZE9wdGlvbnM7XG5jbGFzcyBCaW5hcnlSZWFkZXIge1xuICAgIGNvbnN0cnVjdG9yKGJ1ZiwgdGV4dERlY29kZXIpIHtcbiAgICAgICAgdGhpcy52YXJpbnQ2NCA9IGdvb2dfdmFyaW50XzEudmFyaW50NjRyZWFkOyAvLyBkaXJ0eSBjYXN0IGZvciBgdGhpc2BcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJlYWQgYSBgdWludDMyYCBmaWVsZCwgYW4gdW5zaWduZWQgMzIgYml0IHZhcmludC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudWludDMyID0gZ29vZ192YXJpbnRfMS52YXJpbnQzMnJlYWQ7IC8vIGRpcnR5IGNhc3QgZm9yIGB0aGlzYCBhbmQgYWNjZXNzIHRvIHByb3RlY3RlZCBgYnVmYFxuICAgICAgICB0aGlzLmJ1ZiA9IGJ1ZjtcbiAgICAgICAgdGhpcy5sZW4gPSBidWYubGVuZ3RoO1xuICAgICAgICB0aGlzLnBvcyA9IDA7XG4gICAgICAgIHRoaXMudmlldyA9IG5ldyBEYXRhVmlldyhidWYuYnVmZmVyLCBidWYuYnl0ZU9mZnNldCwgYnVmLmJ5dGVMZW5ndGgpO1xuICAgICAgICB0aGlzLnRleHREZWNvZGVyID0gdGV4dERlY29kZXIgIT09IG51bGwgJiYgdGV4dERlY29kZXIgIT09IHZvaWQgMCA/IHRleHREZWNvZGVyIDogbmV3IFRleHREZWNvZGVyKFwidXRmLThcIiwge1xuICAgICAgICAgICAgZmF0YWw6IHRydWUsXG4gICAgICAgICAgICBpZ25vcmVCT006IHRydWUsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWFkcyBhIHRhZyAtIGZpZWxkIG51bWJlciBhbmQgd2lyZSB0eXBlLlxuICAgICAqL1xuICAgIHRhZygpIHtcbiAgICAgICAgbGV0IHRhZyA9IHRoaXMudWludDMyKCksIGZpZWxkTm8gPSB0YWcgPj4+IDMsIHdpcmVUeXBlID0gdGFnICYgNztcbiAgICAgICAgaWYgKGZpZWxkTm8gPD0gMCB8fCB3aXJlVHlwZSA8IDAgfHwgd2lyZVR5cGUgPiA1KVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCB0YWc6IGZpZWxkIG5vIFwiICsgZmllbGRObyArIFwiIHdpcmUgdHlwZSBcIiArIHdpcmVUeXBlKTtcbiAgICAgICAgcmV0dXJuIFtmaWVsZE5vLCB3aXJlVHlwZV07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNraXAgb25lIGVsZW1lbnQgb24gdGhlIHdpcmUgYW5kIHJldHVybiB0aGUgc2tpcHBlZCBkYXRhLlxuICAgICAqIFN1cHBvcnRzIFdpcmVUeXBlLlN0YXJ0R3JvdXAgc2luY2UgdjIuMC4wLWFscGhhLjIzLlxuICAgICAqL1xuICAgIHNraXAod2lyZVR5cGUpIHtcbiAgICAgICAgbGV0IHN0YXJ0ID0gdGhpcy5wb3M7XG4gICAgICAgIC8vIG5vaW5zcGVjdGlvbiBGYWxsVGhyb3VnaEluU3dpdGNoU3RhdGVtZW50SlNcbiAgICAgICAgc3dpdGNoICh3aXJlVHlwZSkge1xuICAgICAgICAgICAgY2FzZSBiaW5hcnlfZm9ybWF0X2NvbnRyYWN0XzEuV2lyZVR5cGUuVmFyaW50OlxuICAgICAgICAgICAgICAgIHdoaWxlICh0aGlzLmJ1Zlt0aGlzLnBvcysrXSAmIDB4ODApIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBiaW5hcnlfZm9ybWF0X2NvbnRyYWN0XzEuV2lyZVR5cGUuQml0NjQ6XG4gICAgICAgICAgICAgICAgdGhpcy5wb3MgKz0gNDtcbiAgICAgICAgICAgIGNhc2UgYmluYXJ5X2Zvcm1hdF9jb250cmFjdF8xLldpcmVUeXBlLkJpdDMyOlxuICAgICAgICAgICAgICAgIHRoaXMucG9zICs9IDQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQ6XG4gICAgICAgICAgICAgICAgbGV0IGxlbiA9IHRoaXMudWludDMyKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3MgKz0gbGVuO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBiaW5hcnlfZm9ybWF0X2NvbnRyYWN0XzEuV2lyZVR5cGUuU3RhcnRHcm91cDpcbiAgICAgICAgICAgICAgICAvLyBGcm9tIGRlc2NyaXB0b3IucHJvdG86IEdyb3VwIHR5cGUgaXMgZGVwcmVjYXRlZCwgbm90IHN1cHBvcnRlZCBpbiBwcm90bzMuXG4gICAgICAgICAgICAgICAgLy8gQnV0IHdlIG11c3Qgc3RpbGwgYmUgYWJsZSB0byBwYXJzZSBhbmQgdHJlYXQgYXMgdW5rbm93bi5cbiAgICAgICAgICAgICAgICBsZXQgdDtcbiAgICAgICAgICAgICAgICB3aGlsZSAoKHQgPSB0aGlzLnRhZygpWzFdKSAhPT0gYmluYXJ5X2Zvcm1hdF9jb250cmFjdF8xLldpcmVUeXBlLkVuZEdyb3VwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2tpcCh0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImNhbnQgc2tpcCB3aXJlIHR5cGUgXCIgKyB3aXJlVHlwZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hc3NlcnRCb3VuZHMoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVmLnN1YmFycmF5KHN0YXJ0LCB0aGlzLnBvcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRocm93cyBlcnJvciBpZiBwb3NpdGlvbiBpbiBieXRlIGFycmF5IGlzIG91dCBvZiByYW5nZS5cbiAgICAgKi9cbiAgICBhc3NlcnRCb3VuZHMoKSB7XG4gICAgICAgIGlmICh0aGlzLnBvcyA+IHRoaXMubGVuKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJwcmVtYXR1cmUgRU9GXCIpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWFkIGEgYGludDMyYCBmaWVsZCwgYSBzaWduZWQgMzIgYml0IHZhcmludC5cbiAgICAgKi9cbiAgICBpbnQzMigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudWludDMyKCkgfCAwO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWFkIGEgYHNpbnQzMmAgZmllbGQsIGEgc2lnbmVkLCB6aWd6YWctZW5jb2RlZCAzMi1iaXQgdmFyaW50LlxuICAgICAqL1xuICAgIHNpbnQzMigpIHtcbiAgICAgICAgbGV0IHp6ZSA9IHRoaXMudWludDMyKCk7XG4gICAgICAgIC8vIGRlY29kZSB6aWd6YWdcbiAgICAgICAgcmV0dXJuICh6emUgPj4+IDEpIF4gLSh6emUgJiAxKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVhZCBhIGBpbnQ2NGAgZmllbGQsIGEgc2lnbmVkIDY0LWJpdCB2YXJpbnQuXG4gICAgICovXG4gICAgaW50NjQoKSB7XG4gICAgICAgIHJldHVybiBuZXcgcGJfbG9uZ18xLlBiTG9uZyguLi50aGlzLnZhcmludDY0KCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWFkIGEgYHVpbnQ2NGAgZmllbGQsIGFuIHVuc2lnbmVkIDY0LWJpdCB2YXJpbnQuXG4gICAgICovXG4gICAgdWludDY0KCkge1xuICAgICAgICByZXR1cm4gbmV3IHBiX2xvbmdfMS5QYlVMb25nKC4uLnRoaXMudmFyaW50NjQoKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWQgYSBgc2ludDY0YCBmaWVsZCwgYSBzaWduZWQsIHppZy16YWctZW5jb2RlZCA2NC1iaXQgdmFyaW50LlxuICAgICAqL1xuICAgIHNpbnQ2NCgpIHtcbiAgICAgICAgbGV0IFtsbywgaGldID0gdGhpcy52YXJpbnQ2NCgpO1xuICAgICAgICAvLyBkZWNvZGUgemlnIHphZ1xuICAgICAgICBsZXQgcyA9IC0obG8gJiAxKTtcbiAgICAgICAgbG8gPSAoKGxvID4+PiAxIHwgKGhpICYgMSkgPDwgMzEpIF4gcyk7XG4gICAgICAgIGhpID0gKGhpID4+PiAxIF4gcyk7XG4gICAgICAgIHJldHVybiBuZXcgcGJfbG9uZ18xLlBiTG9uZyhsbywgaGkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWFkIGEgYGJvb2xgIGZpZWxkLCBhIHZhcmlhbnQuXG4gICAgICovXG4gICAgYm9vbCgpIHtcbiAgICAgICAgbGV0IFtsbywgaGldID0gdGhpcy52YXJpbnQ2NCgpO1xuICAgICAgICByZXR1cm4gbG8gIT09IDAgfHwgaGkgIT09IDA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWQgYSBgZml4ZWQzMmAgZmllbGQsIGFuIHVuc2lnbmVkLCBmaXhlZC1sZW5ndGggMzItYml0IGludGVnZXIuXG4gICAgICovXG4gICAgZml4ZWQzMigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlldy5nZXRVaW50MzIoKHRoaXMucG9zICs9IDQpIC0gNCwgdHJ1ZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWQgYSBgc2ZpeGVkMzJgIGZpZWxkLCBhIHNpZ25lZCwgZml4ZWQtbGVuZ3RoIDMyLWJpdCBpbnRlZ2VyLlxuICAgICAqL1xuICAgIHNmaXhlZDMyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52aWV3LmdldEludDMyKCh0aGlzLnBvcyArPSA0KSAtIDQsIHRydWUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWFkIGEgYGZpeGVkNjRgIGZpZWxkLCBhbiB1bnNpZ25lZCwgZml4ZWQtbGVuZ3RoIDY0IGJpdCBpbnRlZ2VyLlxuICAgICAqL1xuICAgIGZpeGVkNjQoKSB7XG4gICAgICAgIHJldHVybiBuZXcgcGJfbG9uZ18xLlBiVUxvbmcodGhpcy5zZml4ZWQzMigpLCB0aGlzLnNmaXhlZDMyKCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWFkIGEgYGZpeGVkNjRgIGZpZWxkLCBhIHNpZ25lZCwgZml4ZWQtbGVuZ3RoIDY0LWJpdCBpbnRlZ2VyLlxuICAgICAqL1xuICAgIHNmaXhlZDY0KCkge1xuICAgICAgICByZXR1cm4gbmV3IHBiX2xvbmdfMS5QYkxvbmcodGhpcy5zZml4ZWQzMigpLCB0aGlzLnNmaXhlZDMyKCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWFkIGEgYGZsb2F0YCBmaWVsZCwgMzItYml0IGZsb2F0aW5nIHBvaW50IG51bWJlci5cbiAgICAgKi9cbiAgICBmbG9hdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlldy5nZXRGbG9hdDMyKCh0aGlzLnBvcyArPSA0KSAtIDQsIHRydWUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWFkIGEgYGRvdWJsZWAgZmllbGQsIGEgNjQtYml0IGZsb2F0aW5nIHBvaW50IG51bWJlci5cbiAgICAgKi9cbiAgICBkb3VibGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZXcuZ2V0RmxvYXQ2NCgodGhpcy5wb3MgKz0gOCkgLSA4LCB0cnVlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVhZCBhIGBieXRlc2AgZmllbGQsIGxlbmd0aC1kZWxpbWl0ZWQgYXJiaXRyYXJ5IGRhdGEuXG4gICAgICovXG4gICAgYnl0ZXMoKSB7XG4gICAgICAgIGxldCBsZW4gPSB0aGlzLnVpbnQzMigpO1xuICAgICAgICBsZXQgc3RhcnQgPSB0aGlzLnBvcztcbiAgICAgICAgdGhpcy5wb3MgKz0gbGVuO1xuICAgICAgICB0aGlzLmFzc2VydEJvdW5kcygpO1xuICAgICAgICByZXR1cm4gdGhpcy5idWYuc3ViYXJyYXkoc3RhcnQsIHN0YXJ0ICsgbGVuKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVhZCBhIGBzdHJpbmdgIGZpZWxkLCBsZW5ndGgtZGVsaW1pdGVkIGRhdGEgY29udmVydGVkIHRvIFVURi04IHRleHQuXG4gICAgICovXG4gICAgc3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0RGVjb2Rlci5kZWNvZGUodGhpcy5ieXRlcygpKTtcbiAgICB9XG59XG5leHBvcnRzLkJpbmFyeVJlYWRlciA9IEJpbmFyeVJlYWRlcjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmFzc2VydEZsb2F0MzIgPSBleHBvcnRzLmFzc2VydFVJbnQzMiA9IGV4cG9ydHMuYXNzZXJ0SW50MzIgPSBleHBvcnRzLmFzc2VydE5ldmVyID0gZXhwb3J0cy5hc3NlcnQgPSB2b2lkIDA7XG4vKipcbiAqIGFzc2VydCB0aGF0IGNvbmRpdGlvbiBpcyB0cnVlIG9yIHRocm93IGVycm9yICh3aXRoIG1lc3NhZ2UpXG4gKi9cbmZ1bmN0aW9uIGFzc2VydChjb25kaXRpb24sIG1zZykge1xuICAgIGlmICghY29uZGl0aW9uKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgIH1cbn1cbmV4cG9ydHMuYXNzZXJ0ID0gYXNzZXJ0O1xuLyoqXG4gKiBhc3NlcnQgdGhhdCB2YWx1ZSBjYW5ub3QgZXhpc3QgPSB0eXBlIGBuZXZlcmAuIHRocm93IHJ1bnRpbWUgZXJyb3IgaWYgaXQgZG9lcy5cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0TmV2ZXIodmFsdWUsIG1zZykge1xuICAgIHRocm93IG5ldyBFcnJvcihtc2cgIT09IG51bGwgJiYgbXNnICE9PSB2b2lkIDAgPyBtc2cgOiAnVW5leHBlY3RlZCBvYmplY3Q6ICcgKyB2YWx1ZSk7XG59XG5leHBvcnRzLmFzc2VydE5ldmVyID0gYXNzZXJ0TmV2ZXI7XG5jb25zdCBGTE9BVDMyX01BWCA9IDMuNDAyODIzNDY2Mzg1Mjg4NmUrMzgsIEZMT0FUMzJfTUlOID0gLTMuNDAyODIzNDY2Mzg1Mjg4NmUrMzgsIFVJTlQzMl9NQVggPSAweEZGRkZGRkZGLCBJTlQzMl9NQVggPSAwWDdGRkZGRkZGLCBJTlQzMl9NSU4gPSAtMFg4MDAwMDAwMDtcbmZ1bmN0aW9uIGFzc2VydEludDMyKGFyZykge1xuICAgIGlmICh0eXBlb2YgYXJnICE9PSBcIm51bWJlclwiKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgaW50IDMyOiAnICsgdHlwZW9mIGFyZyk7XG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGFyZykgfHwgYXJnID4gSU5UMzJfTUFYIHx8IGFyZyA8IElOVDMyX01JTilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGludCAzMjogJyArIGFyZyk7XG59XG5leHBvcnRzLmFzc2VydEludDMyID0gYXNzZXJ0SW50MzI7XG5mdW5jdGlvbiBhc3NlcnRVSW50MzIoYXJnKSB7XG4gICAgaWYgKHR5cGVvZiBhcmcgIT09IFwibnVtYmVyXCIpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCB1aW50IDMyOiAnICsgdHlwZW9mIGFyZyk7XG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGFyZykgfHwgYXJnID4gVUlOVDMyX01BWCB8fCBhcmcgPCAwKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgdWludCAzMjogJyArIGFyZyk7XG59XG5leHBvcnRzLmFzc2VydFVJbnQzMiA9IGFzc2VydFVJbnQzMjtcbmZ1bmN0aW9uIGFzc2VydEZsb2F0MzIoYXJnKSB7XG4gICAgaWYgKHR5cGVvZiBhcmcgIT09IFwibnVtYmVyXCIpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBmbG9hdCAzMjogJyArIHR5cGVvZiBhcmcpO1xuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKGFyZykpXG4gICAgICAgIHJldHVybjtcbiAgICBpZiAoYXJnID4gRkxPQVQzMl9NQVggfHwgYXJnIDwgRkxPQVQzMl9NSU4pXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBmbG9hdCAzMjogJyArIGFyZyk7XG59XG5leHBvcnRzLmFzc2VydEZsb2F0MzIgPSBhc3NlcnRGbG9hdDMyO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQmluYXJ5V3JpdGVyID0gZXhwb3J0cy5iaW5hcnlXcml0ZU9wdGlvbnMgPSB2b2lkIDA7XG5jb25zdCBwYl9sb25nXzEgPSByZXF1aXJlKFwiLi9wYi1sb25nXCIpO1xuY29uc3QgZ29vZ192YXJpbnRfMSA9IHJlcXVpcmUoXCIuL2dvb2ctdmFyaW50XCIpO1xuY29uc3QgYXNzZXJ0XzEgPSByZXF1aXJlKFwiLi9hc3NlcnRcIik7XG5jb25zdCBkZWZhdWx0c1dyaXRlID0ge1xuICAgIHdyaXRlVW5rbm93bkZpZWxkczogdHJ1ZSxcbiAgICB3cml0ZXJGYWN0b3J5OiAoKSA9PiBuZXcgQmluYXJ5V3JpdGVyKCksXG59O1xuLyoqXG4gKiBNYWtlIG9wdGlvbnMgZm9yIHdyaXRpbmcgYmluYXJ5IGRhdGEgZm9ybSBwYXJ0aWFsIG9wdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIGJpbmFyeVdyaXRlT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMgPyBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRzV3JpdGUpLCBvcHRpb25zKSA6IGRlZmF1bHRzV3JpdGU7XG59XG5leHBvcnRzLmJpbmFyeVdyaXRlT3B0aW9ucyA9IGJpbmFyeVdyaXRlT3B0aW9ucztcbmNsYXNzIEJpbmFyeVdyaXRlciB7XG4gICAgY29uc3RydWN0b3IodGV4dEVuY29kZXIpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFByZXZpb3VzIGZvcmsgc3RhdGVzLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5zdGFjayA9IFtdO1xuICAgICAgICB0aGlzLnRleHRFbmNvZGVyID0gdGV4dEVuY29kZXIgIT09IG51bGwgJiYgdGV4dEVuY29kZXIgIT09IHZvaWQgMCA/IHRleHRFbmNvZGVyIDogbmV3IFRleHRFbmNvZGVyKCk7XG4gICAgICAgIHRoaXMuY2h1bmtzID0gW107XG4gICAgICAgIHRoaXMuYnVmID0gW107XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiBhbGwgYnl0ZXMgd3JpdHRlbiBhbmQgcmVzZXQgdGhpcyB3cml0ZXIuXG4gICAgICovXG4gICAgZmluaXNoKCkge1xuICAgICAgICB0aGlzLmNodW5rcy5wdXNoKG5ldyBVaW50OEFycmF5KHRoaXMuYnVmKSk7IC8vIGZsdXNoIHRoZSBidWZmZXJcbiAgICAgICAgbGV0IGxlbiA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jaHVua3MubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICBsZW4gKz0gdGhpcy5jaHVua3NbaV0ubGVuZ3RoO1xuICAgICAgICBsZXQgYnl0ZXMgPSBuZXcgVWludDhBcnJheShsZW4pO1xuICAgICAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNodW5rcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYnl0ZXMuc2V0KHRoaXMuY2h1bmtzW2ldLCBvZmZzZXQpO1xuICAgICAgICAgICAgb2Zmc2V0ICs9IHRoaXMuY2h1bmtzW2ldLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNodW5rcyA9IFtdO1xuICAgICAgICByZXR1cm4gYnl0ZXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN0YXJ0IGEgbmV3IGZvcmsgZm9yIGxlbmd0aC1kZWxpbWl0ZWQgZGF0YSBsaWtlIGEgbWVzc2FnZVxuICAgICAqIG9yIGEgcGFja2VkIHJlcGVhdGVkIGZpZWxkLlxuICAgICAqXG4gICAgICogTXVzdCBiZSBqb2luZWQgbGF0ZXIgd2l0aCBgam9pbigpYC5cbiAgICAgKi9cbiAgICBmb3JrKCkge1xuICAgICAgICB0aGlzLnN0YWNrLnB1c2goeyBjaHVua3M6IHRoaXMuY2h1bmtzLCBidWY6IHRoaXMuYnVmIH0pO1xuICAgICAgICB0aGlzLmNodW5rcyA9IFtdO1xuICAgICAgICB0aGlzLmJ1ZiA9IFtdO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogSm9pbiB0aGUgbGFzdCBmb3JrLiBXcml0ZSBpdHMgbGVuZ3RoIGFuZCBieXRlcywgdGhlblxuICAgICAqIHJldHVybiB0byB0aGUgcHJldmlvdXMgc3RhdGUuXG4gICAgICovXG4gICAgam9pbigpIHtcbiAgICAgICAgLy8gZ2V0IGNodW5rIG9mIGZvcmtcbiAgICAgICAgbGV0IGNodW5rID0gdGhpcy5maW5pc2goKTtcbiAgICAgICAgLy8gcmVzdG9yZSBwcmV2aW91cyBzdGF0ZVxuICAgICAgICBsZXQgcHJldiA9IHRoaXMuc3RhY2sucG9wKCk7XG4gICAgICAgIGlmICghcHJldilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBzdGF0ZSwgZm9yayBzdGFjayBlbXB0eScpO1xuICAgICAgICB0aGlzLmNodW5rcyA9IHByZXYuY2h1bmtzO1xuICAgICAgICB0aGlzLmJ1ZiA9IHByZXYuYnVmO1xuICAgICAgICAvLyB3cml0ZSBsZW5ndGggb2YgY2h1bmsgYXMgdmFyaW50XG4gICAgICAgIHRoaXMudWludDMyKGNodW5rLmJ5dGVMZW5ndGgpO1xuICAgICAgICByZXR1cm4gdGhpcy5yYXcoY2h1bmspO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXcml0ZXMgYSB0YWcgKGZpZWxkIG51bWJlciBhbmQgd2lyZSB0eXBlKS5cbiAgICAgKlxuICAgICAqIEVxdWl2YWxlbnQgdG8gYHVpbnQzMiggKGZpZWxkTm8gPDwgMyB8IHR5cGUpID4+PiAwIClgLlxuICAgICAqXG4gICAgICogR2VuZXJhdGVkIGNvZGUgc2hvdWxkIGNvbXB1dGUgdGhlIHRhZyBhaGVhZCBvZiB0aW1lIGFuZCBjYWxsIGB1aW50MzIoKWAuXG4gICAgICovXG4gICAgdGFnKGZpZWxkTm8sIHR5cGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudWludDMyKChmaWVsZE5vIDw8IDMgfCB0eXBlKSA+Pj4gMCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyaXRlIGEgY2h1bmsgb2YgcmF3IGJ5dGVzLlxuICAgICAqL1xuICAgIHJhdyhjaHVuaykge1xuICAgICAgICBpZiAodGhpcy5idWYubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmNodW5rcy5wdXNoKG5ldyBVaW50OEFycmF5KHRoaXMuYnVmKSk7XG4gICAgICAgICAgICB0aGlzLmJ1ZiA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2h1bmtzLnB1c2goY2h1bmspO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGUgYSBgdWludDMyYCB2YWx1ZSwgYW4gdW5zaWduZWQgMzIgYml0IHZhcmludC5cbiAgICAgKi9cbiAgICB1aW50MzIodmFsdWUpIHtcbiAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0VUludDMyKHZhbHVlKTtcbiAgICAgICAgLy8gd3JpdGUgdmFsdWUgYXMgdmFyaW50IDMyLCBpbmxpbmVkIGZvciBzcGVlZFxuICAgICAgICB3aGlsZSAodmFsdWUgPiAweDdmKSB7XG4gICAgICAgICAgICB0aGlzLmJ1Zi5wdXNoKCh2YWx1ZSAmIDB4N2YpIHwgMHg4MCk7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlID4+PiA3O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYnVmLnB1c2godmFsdWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGUgYSBgaW50MzJgIHZhbHVlLCBhIHNpZ25lZCAzMiBiaXQgdmFyaW50LlxuICAgICAqL1xuICAgIGludDMyKHZhbHVlKSB7XG4gICAgICAgIGFzc2VydF8xLmFzc2VydEludDMyKHZhbHVlKTtcbiAgICAgICAgZ29vZ192YXJpbnRfMS52YXJpbnQzMndyaXRlKHZhbHVlLCB0aGlzLmJ1Zik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXcml0ZSBhIGBib29sYCB2YWx1ZSwgYSB2YXJpYW50LlxuICAgICAqL1xuICAgIGJvb2wodmFsdWUpIHtcbiAgICAgICAgdGhpcy5idWYucHVzaCh2YWx1ZSA/IDEgOiAwKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyaXRlIGEgYGJ5dGVzYCB2YWx1ZSwgbGVuZ3RoLWRlbGltaXRlZCBhcmJpdHJhcnkgZGF0YS5cbiAgICAgKi9cbiAgICBieXRlcyh2YWx1ZSkge1xuICAgICAgICB0aGlzLnVpbnQzMih2YWx1ZS5ieXRlTGVuZ3RoKTsgLy8gd3JpdGUgbGVuZ3RoIG9mIGNodW5rIGFzIHZhcmludFxuICAgICAgICByZXR1cm4gdGhpcy5yYXcodmFsdWUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXcml0ZSBhIGBzdHJpbmdgIHZhbHVlLCBsZW5ndGgtZGVsaW1pdGVkIGRhdGEgY29udmVydGVkIHRvIFVURi04IHRleHQuXG4gICAgICovXG4gICAgc3RyaW5nKHZhbHVlKSB7XG4gICAgICAgIGxldCBjaHVuayA9IHRoaXMudGV4dEVuY29kZXIuZW5jb2RlKHZhbHVlKTtcbiAgICAgICAgdGhpcy51aW50MzIoY2h1bmsuYnl0ZUxlbmd0aCk7IC8vIHdyaXRlIGxlbmd0aCBvZiBjaHVuayBhcyB2YXJpbnRcbiAgICAgICAgcmV0dXJuIHRoaXMucmF3KGNodW5rKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGUgYSBgZmxvYXRgIHZhbHVlLCAzMi1iaXQgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLlxuICAgICAqL1xuICAgIGZsb2F0KHZhbHVlKSB7XG4gICAgICAgIGFzc2VydF8xLmFzc2VydEZsb2F0MzIodmFsdWUpO1xuICAgICAgICBsZXQgY2h1bmsgPSBuZXcgVWludDhBcnJheSg0KTtcbiAgICAgICAgbmV3IERhdGFWaWV3KGNodW5rLmJ1ZmZlcikuc2V0RmxvYXQzMigwLCB2YWx1ZSwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzLnJhdyhjaHVuayk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyaXRlIGEgYGRvdWJsZWAgdmFsdWUsIGEgNjQtYml0IGZsb2F0aW5nIHBvaW50IG51bWJlci5cbiAgICAgKi9cbiAgICBkb3VibGUodmFsdWUpIHtcbiAgICAgICAgbGV0IGNodW5rID0gbmV3IFVpbnQ4QXJyYXkoOCk7XG4gICAgICAgIG5ldyBEYXRhVmlldyhjaHVuay5idWZmZXIpLnNldEZsb2F0NjQoMCwgdmFsdWUsIHRydWUpO1xuICAgICAgICByZXR1cm4gdGhpcy5yYXcoY2h1bmspO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXcml0ZSBhIGBmaXhlZDMyYCB2YWx1ZSwgYW4gdW5zaWduZWQsIGZpeGVkLWxlbmd0aCAzMi1iaXQgaW50ZWdlci5cbiAgICAgKi9cbiAgICBmaXhlZDMyKHZhbHVlKSB7XG4gICAgICAgIGFzc2VydF8xLmFzc2VydFVJbnQzMih2YWx1ZSk7XG4gICAgICAgIGxldCBjaHVuayA9IG5ldyBVaW50OEFycmF5KDQpO1xuICAgICAgICBuZXcgRGF0YVZpZXcoY2h1bmsuYnVmZmVyKS5zZXRVaW50MzIoMCwgdmFsdWUsIHRydWUpO1xuICAgICAgICByZXR1cm4gdGhpcy5yYXcoY2h1bmspO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXcml0ZSBhIGBzZml4ZWQzMmAgdmFsdWUsIGEgc2lnbmVkLCBmaXhlZC1sZW5ndGggMzItYml0IGludGVnZXIuXG4gICAgICovXG4gICAgc2ZpeGVkMzIodmFsdWUpIHtcbiAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0SW50MzIodmFsdWUpO1xuICAgICAgICBsZXQgY2h1bmsgPSBuZXcgVWludDhBcnJheSg0KTtcbiAgICAgICAgbmV3IERhdGFWaWV3KGNodW5rLmJ1ZmZlcikuc2V0SW50MzIoMCwgdmFsdWUsIHRydWUpO1xuICAgICAgICByZXR1cm4gdGhpcy5yYXcoY2h1bmspO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXcml0ZSBhIGBzaW50MzJgIHZhbHVlLCBhIHNpZ25lZCwgemlnemFnLWVuY29kZWQgMzItYml0IHZhcmludC5cbiAgICAgKi9cbiAgICBzaW50MzIodmFsdWUpIHtcbiAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0SW50MzIodmFsdWUpO1xuICAgICAgICAvLyB6aWd6YWcgZW5jb2RlXG4gICAgICAgIHZhbHVlID0gKCh2YWx1ZSA8PCAxKSBeICh2YWx1ZSA+PiAzMSkpID4+PiAwO1xuICAgICAgICBnb29nX3ZhcmludF8xLnZhcmludDMyd3JpdGUodmFsdWUsIHRoaXMuYnVmKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyaXRlIGEgYGZpeGVkNjRgIHZhbHVlLCBhIHNpZ25lZCwgZml4ZWQtbGVuZ3RoIDY0LWJpdCBpbnRlZ2VyLlxuICAgICAqL1xuICAgIHNmaXhlZDY0KHZhbHVlKSB7XG4gICAgICAgIGxldCBjaHVuayA9IG5ldyBVaW50OEFycmF5KDgpO1xuICAgICAgICBsZXQgdmlldyA9IG5ldyBEYXRhVmlldyhjaHVuay5idWZmZXIpO1xuICAgICAgICBsZXQgbG9uZyA9IHBiX2xvbmdfMS5QYkxvbmcuZnJvbSh2YWx1ZSk7XG4gICAgICAgIHZpZXcuc2V0SW50MzIoMCwgbG9uZy5sbywgdHJ1ZSk7XG4gICAgICAgIHZpZXcuc2V0SW50MzIoNCwgbG9uZy5oaSwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzLnJhdyhjaHVuayk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyaXRlIGEgYGZpeGVkNjRgIHZhbHVlLCBhbiB1bnNpZ25lZCwgZml4ZWQtbGVuZ3RoIDY0IGJpdCBpbnRlZ2VyLlxuICAgICAqL1xuICAgIGZpeGVkNjQodmFsdWUpIHtcbiAgICAgICAgbGV0IGNodW5rID0gbmV3IFVpbnQ4QXJyYXkoOCk7XG4gICAgICAgIGxldCB2aWV3ID0gbmV3IERhdGFWaWV3KGNodW5rLmJ1ZmZlcik7XG4gICAgICAgIGxldCBsb25nID0gcGJfbG9uZ18xLlBiVUxvbmcuZnJvbSh2YWx1ZSk7XG4gICAgICAgIHZpZXcuc2V0SW50MzIoMCwgbG9uZy5sbywgdHJ1ZSk7XG4gICAgICAgIHZpZXcuc2V0SW50MzIoNCwgbG9uZy5oaSwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzLnJhdyhjaHVuayk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyaXRlIGEgYGludDY0YCB2YWx1ZSwgYSBzaWduZWQgNjQtYml0IHZhcmludC5cbiAgICAgKi9cbiAgICBpbnQ2NCh2YWx1ZSkge1xuICAgICAgICBsZXQgbG9uZyA9IHBiX2xvbmdfMS5QYkxvbmcuZnJvbSh2YWx1ZSk7XG4gICAgICAgIGdvb2dfdmFyaW50XzEudmFyaW50NjR3cml0ZShsb25nLmxvLCBsb25nLmhpLCB0aGlzLmJ1Zik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXcml0ZSBhIGBzaW50NjRgIHZhbHVlLCBhIHNpZ25lZCwgemlnLXphZy1lbmNvZGVkIDY0LWJpdCB2YXJpbnQuXG4gICAgICovXG4gICAgc2ludDY0KHZhbHVlKSB7XG4gICAgICAgIGxldCBsb25nID0gcGJfbG9uZ18xLlBiTG9uZy5mcm9tKHZhbHVlKSwgXG4gICAgICAgIC8vIHppZ3phZyBlbmNvZGVcbiAgICAgICAgc2lnbiA9IGxvbmcuaGkgPj4gMzEsIGxvID0gKGxvbmcubG8gPDwgMSkgXiBzaWduLCBoaSA9ICgobG9uZy5oaSA8PCAxKSB8IChsb25nLmxvID4+PiAzMSkpIF4gc2lnbjtcbiAgICAgICAgZ29vZ192YXJpbnRfMS52YXJpbnQ2NHdyaXRlKGxvLCBoaSwgdGhpcy5idWYpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGUgYSBgdWludDY0YCB2YWx1ZSwgYW4gdW5zaWduZWQgNjQtYml0IHZhcmludC5cbiAgICAgKi9cbiAgICB1aW50NjQodmFsdWUpIHtcbiAgICAgICAgbGV0IGxvbmcgPSBwYl9sb25nXzEuUGJVTG9uZy5mcm9tKHZhbHVlKTtcbiAgICAgICAgZ29vZ192YXJpbnRfMS52YXJpbnQ2NHdyaXRlKGxvbmcubG8sIGxvbmcuaGksIHRoaXMuYnVmKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufVxuZXhwb3J0cy5CaW5hcnlXcml0ZXIgPSBCaW5hcnlXcml0ZXI7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5tZXJnZUpzb25PcHRpb25zID0gZXhwb3J0cy5qc29uV3JpdGVPcHRpb25zID0gZXhwb3J0cy5qc29uUmVhZE9wdGlvbnMgPSB2b2lkIDA7XG5jb25zdCBkZWZhdWx0c1dyaXRlID0ge1xuICAgIGVtaXREZWZhdWx0VmFsdWVzOiBmYWxzZSxcbiAgICBlbnVtQXNJbnRlZ2VyOiBmYWxzZSxcbiAgICB1c2VQcm90b0ZpZWxkTmFtZTogZmFsc2UsXG4gICAgcHJldHR5U3BhY2VzOiAwLFxufSwgZGVmYXVsdHNSZWFkID0ge1xuICAgIGlnbm9yZVVua25vd25GaWVsZHM6IGZhbHNlLFxufTtcbi8qKlxuICogTWFrZSBvcHRpb25zIGZvciByZWFkaW5nIEpTT04gZGF0YSBmcm9tIHBhcnRpYWwgb3B0aW9ucy5cbiAqL1xuZnVuY3Rpb24ganNvblJlYWRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gb3B0aW9ucyA/IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdHNSZWFkKSwgb3B0aW9ucykgOiBkZWZhdWx0c1JlYWQ7XG59XG5leHBvcnRzLmpzb25SZWFkT3B0aW9ucyA9IGpzb25SZWFkT3B0aW9ucztcbi8qKlxuICogTWFrZSBvcHRpb25zIGZvciB3cml0aW5nIEpTT04gZGF0YSBmcm9tIHBhcnRpYWwgb3B0aW9ucy5cbiAqL1xuZnVuY3Rpb24ganNvbldyaXRlT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMgPyBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRzV3JpdGUpLCBvcHRpb25zKSA6IGRlZmF1bHRzV3JpdGU7XG59XG5leHBvcnRzLmpzb25Xcml0ZU9wdGlvbnMgPSBqc29uV3JpdGVPcHRpb25zO1xuLyoqXG4gKiBNZXJnZXMgSlNPTiB3cml0ZSBvciByZWFkIG9wdGlvbnMuIExhdGVyIHZhbHVlcyBvdmVycmlkZSBlYXJsaWVyIHZhbHVlcy4gVHlwZSByZWdpc3RyaWVzIGFyZSBtZXJnZWQuXG4gKi9cbmZ1bmN0aW9uIG1lcmdlSnNvbk9wdGlvbnMoYSwgYikge1xuICAgIHZhciBfYSwgX2I7XG4gICAgbGV0IGMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGEpLCBiKTtcbiAgICBjLnR5cGVSZWdpc3RyeSA9IFsuLi4oKF9hID0gYSA9PT0gbnVsbCB8fCBhID09PSB2b2lkIDAgPyB2b2lkIDAgOiBhLnR5cGVSZWdpc3RyeSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogW10pLCAuLi4oKF9iID0gYiA9PT0gbnVsbCB8fCBiID09PSB2b2lkIDAgPyB2b2lkIDAgOiBiLnR5cGVSZWdpc3RyeSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogW10pXTtcbiAgICByZXR1cm4gYztcbn1cbmV4cG9ydHMubWVyZ2VKc29uT3B0aW9ucyA9IG1lcmdlSnNvbk9wdGlvbnM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5NRVNTQUdFX1RZUEUgPSB2b2lkIDA7XG4vKipcbiAqIFRoZSBzeW1ib2wgdXNlZCBhcyBhIGtleSBvbiBtZXNzYWdlIG9iamVjdHMgdG8gc3RvcmUgdGhlIG1lc3NhZ2UgdHlwZS5cbiAqXG4gKiBOb3RlIHRoYXQgdGhpcyBpcyBhbiBleHBlcmltZW50YWwgZmVhdHVyZSAtIGl0IGlzIGhlcmUgdG8gc3RheSwgYnV0XG4gKiBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG1heSBjaGFuZ2Ugd2l0aG91dCBub3RpY2UuXG4gKi9cbmV4cG9ydHMuTUVTU0FHRV9UWVBFID0gU3ltYm9sLmZvcihcInByb3RvYnVmLXRzL21lc3NhZ2UtdHlwZVwiKTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmxvd2VyQ2FtZWxDYXNlID0gdm9pZCAwO1xuLyoqXG4gKiBDb252ZXJ0cyBzbmFrZV9jYXNlIHRvIGxvd2VyQ2FtZWxDYXNlLlxuICpcbiAqIFNob3VsZCBiZWhhdmUgbGlrZSBwcm90b2M6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vcHJvdG9jb2xidWZmZXJzL3Byb3RvYnVmL2Jsb2IvZThhZTEzN2M5NjQ0NGVhMzEzNDg1ZWQxMTE4YzVlNDNiMjA5OWNmMS9zcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9oZWxwZXJzLmNjI0wxMThcbiAqL1xuZnVuY3Rpb24gbG93ZXJDYW1lbENhc2Uoc25ha2VDYXNlKSB7XG4gICAgbGV0IGNhcE5leHQgPSBmYWxzZTtcbiAgICBjb25zdCBzYiA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc25ha2VDYXNlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCBuZXh0ID0gc25ha2VDYXNlLmNoYXJBdChpKTtcbiAgICAgICAgaWYgKG5leHQgPT0gJ18nKSB7XG4gICAgICAgICAgICBjYXBOZXh0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICgvXFxkLy50ZXN0KG5leHQpKSB7XG4gICAgICAgICAgICBzYi5wdXNoKG5leHQpO1xuICAgICAgICAgICAgY2FwTmV4dCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY2FwTmV4dCkge1xuICAgICAgICAgICAgc2IucHVzaChuZXh0LnRvVXBwZXJDYXNlKCkpO1xuICAgICAgICAgICAgY2FwTmV4dCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGkgPT0gMCkge1xuICAgICAgICAgICAgc2IucHVzaChuZXh0LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc2IucHVzaChuZXh0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc2Iuam9pbignJyk7XG59XG5leHBvcnRzLmxvd2VyQ2FtZWxDYXNlID0gbG93ZXJDYW1lbENhc2U7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yZWFkTWVzc2FnZU9wdGlvbiA9IGV4cG9ydHMucmVhZEZpZWxkT3B0aW9uID0gZXhwb3J0cy5yZWFkRmllbGRPcHRpb25zID0gZXhwb3J0cy5ub3JtYWxpemVGaWVsZEluZm8gPSBleHBvcnRzLlJlcGVhdFR5cGUgPSBleHBvcnRzLkxvbmdUeXBlID0gZXhwb3J0cy5TY2FsYXJUeXBlID0gdm9pZCAwO1xuY29uc3QgbG93ZXJfY2FtZWxfY2FzZV8xID0gcmVxdWlyZShcIi4vbG93ZXItY2FtZWwtY2FzZVwiKTtcbi8qKlxuICogU2NhbGFyIHZhbHVlIHR5cGVzLiBUaGlzIGlzIGEgc3Vic2V0IG9mIGZpZWxkIHR5cGVzIGRlY2xhcmVkIGJ5IHByb3RvYnVmXG4gKiBlbnVtIGdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5UeXBlIFRoZSB0eXBlcyBHUk9VUCBhbmQgTUVTU0FHRVxuICogYXJlIG9taXR0ZWQsIGJ1dCB0aGUgbnVtZXJpY2FsIHZhbHVlcyBhcmUgaWRlbnRpY2FsLlxuICovXG52YXIgU2NhbGFyVHlwZTtcbihmdW5jdGlvbiAoU2NhbGFyVHlwZSkge1xuICAgIC8vIDAgaXMgcmVzZXJ2ZWQgZm9yIGVycm9ycy5cbiAgICAvLyBPcmRlciBpcyB3ZWlyZCBmb3IgaGlzdG9yaWNhbCByZWFzb25zLlxuICAgIFNjYWxhclR5cGVbU2NhbGFyVHlwZVtcIkRPVUJMRVwiXSA9IDFdID0gXCJET1VCTEVcIjtcbiAgICBTY2FsYXJUeXBlW1NjYWxhclR5cGVbXCJGTE9BVFwiXSA9IDJdID0gXCJGTE9BVFwiO1xuICAgIC8vIE5vdCBaaWdaYWcgZW5jb2RlZC4gIE5lZ2F0aXZlIG51bWJlcnMgdGFrZSAxMCBieXRlcy4gIFVzZSBUWVBFX1NJTlQ2NCBpZlxuICAgIC8vIG5lZ2F0aXZlIHZhbHVlcyBhcmUgbGlrZWx5LlxuICAgIFNjYWxhclR5cGVbU2NhbGFyVHlwZVtcIklOVDY0XCJdID0gM10gPSBcIklOVDY0XCI7XG4gICAgU2NhbGFyVHlwZVtTY2FsYXJUeXBlW1wiVUlOVDY0XCJdID0gNF0gPSBcIlVJTlQ2NFwiO1xuICAgIC8vIE5vdCBaaWdaYWcgZW5jb2RlZC4gIE5lZ2F0aXZlIG51bWJlcnMgdGFrZSAxMCBieXRlcy4gIFVzZSBUWVBFX1NJTlQzMiBpZlxuICAgIC8vIG5lZ2F0aXZlIHZhbHVlcyBhcmUgbGlrZWx5LlxuICAgIFNjYWxhclR5cGVbU2NhbGFyVHlwZVtcIklOVDMyXCJdID0gNV0gPSBcIklOVDMyXCI7XG4gICAgU2NhbGFyVHlwZVtTY2FsYXJUeXBlW1wiRklYRUQ2NFwiXSA9IDZdID0gXCJGSVhFRDY0XCI7XG4gICAgU2NhbGFyVHlwZVtTY2FsYXJUeXBlW1wiRklYRUQzMlwiXSA9IDddID0gXCJGSVhFRDMyXCI7XG4gICAgU2NhbGFyVHlwZVtTY2FsYXJUeXBlW1wiQk9PTFwiXSA9IDhdID0gXCJCT09MXCI7XG4gICAgU2NhbGFyVHlwZVtTY2FsYXJUeXBlW1wiU1RSSU5HXCJdID0gOV0gPSBcIlNUUklOR1wiO1xuICAgIC8vIFRhZy1kZWxpbWl0ZWQgYWdncmVnYXRlLlxuICAgIC8vIEdyb3VwIHR5cGUgaXMgZGVwcmVjYXRlZCBhbmQgbm90IHN1cHBvcnRlZCBpbiBwcm90bzMuIEhvd2V2ZXIsIFByb3RvM1xuICAgIC8vIGltcGxlbWVudGF0aW9ucyBzaG91bGQgc3RpbGwgYmUgYWJsZSB0byBwYXJzZSB0aGUgZ3JvdXAgd2lyZSBmb3JtYXQgYW5kXG4gICAgLy8gdHJlYXQgZ3JvdXAgZmllbGRzIGFzIHVua25vd24gZmllbGRzLlxuICAgIC8vIFRZUEVfR1JPVVAgPSAxMCxcbiAgICAvLyBUWVBFX01FU1NBR0UgPSAxMSwgIC8vIExlbmd0aC1kZWxpbWl0ZWQgYWdncmVnYXRlLlxuICAgIC8vIE5ldyBpbiB2ZXJzaW9uIDIuXG4gICAgU2NhbGFyVHlwZVtTY2FsYXJUeXBlW1wiQllURVNcIl0gPSAxMl0gPSBcIkJZVEVTXCI7XG4gICAgU2NhbGFyVHlwZVtTY2FsYXJUeXBlW1wiVUlOVDMyXCJdID0gMTNdID0gXCJVSU5UMzJcIjtcbiAgICAvLyBUWVBFX0VOVU0gPSAxNCxcbiAgICBTY2FsYXJUeXBlW1NjYWxhclR5cGVbXCJTRklYRUQzMlwiXSA9IDE1XSA9IFwiU0ZJWEVEMzJcIjtcbiAgICBTY2FsYXJUeXBlW1NjYWxhclR5cGVbXCJTRklYRUQ2NFwiXSA9IDE2XSA9IFwiU0ZJWEVENjRcIjtcbiAgICBTY2FsYXJUeXBlW1NjYWxhclR5cGVbXCJTSU5UMzJcIl0gPSAxN10gPSBcIlNJTlQzMlwiO1xuICAgIFNjYWxhclR5cGVbU2NhbGFyVHlwZVtcIlNJTlQ2NFwiXSA9IDE4XSA9IFwiU0lOVDY0XCI7XG59KShTY2FsYXJUeXBlID0gZXhwb3J0cy5TY2FsYXJUeXBlIHx8IChleHBvcnRzLlNjYWxhclR5cGUgPSB7fSkpO1xuLyoqXG4gKiBKYXZhU2NyaXB0IHJlcHJlc2VudGF0aW9uIG9mIDY0IGJpdCBpbnRlZ3JhbCB0eXBlcy4gRXF1aXZhbGVudCB0byB0aGVcbiAqIGZpZWxkIG9wdGlvbiBcImpzdHlwZVwiLlxuICpcbiAqIEJ5IGRlZmF1bHQsIHByb3RvYnVmLXRzIHJlcHJlc2VudHMgNjQgYml0IHR5cGVzIGFzIGBiaWdpbnRgLlxuICpcbiAqIFlvdSBjYW4gY2hhbmdlIHRoZSBkZWZhdWx0IGJlaGF2aW91ciBieSBlbmFibGluZyB0aGUgcGx1Z2luIHBhcmFtZXRlclxuICogYGxvbmdfdHlwZV9zdHJpbmdgLCB3aGljaCB3aWxsIHJlcHJlc2VudCA2NCBiaXQgdHlwZXMgYXMgYHN0cmluZ2AuXG4gKlxuICogQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBjaGFuZ2UgdGhlIGJlaGF2aW91ciBmb3IgaW5kaXZpZHVhbCBmaWVsZHNcbiAqIHdpdGggdGhlIGZpZWxkIG9wdGlvbiBcImpzdHlwZVwiOlxuICpcbiAqIGBgYHByb3RvYnVmXG4gKiB1aW50NjQgbXlfZmllbGQgPSAxIFtqc3R5cGUgPSBKU19TVFJJTkddO1xuICogdWludDY0IG90aGVyX2ZpZWxkID0gMiBbanN0eXBlID0gSlNfTlVNQkVSXTtcbiAqIGBgYFxuICovXG52YXIgTG9uZ1R5cGU7XG4oZnVuY3Rpb24gKExvbmdUeXBlKSB7XG4gICAgLyoqXG4gICAgICogVXNlIEphdmFTY3JpcHQgYGJpZ2ludGAuXG4gICAgICpcbiAgICAgKiBGaWVsZCBvcHRpb24gYFtqc3R5cGUgPSBKU19OT1JNQUxdYC5cbiAgICAgKi9cbiAgICBMb25nVHlwZVtMb25nVHlwZVtcIkJJR0lOVFwiXSA9IDBdID0gXCJCSUdJTlRcIjtcbiAgICAvKipcbiAgICAgKiBVc2UgSmF2YVNjcmlwdCBgc3RyaW5nYC5cbiAgICAgKlxuICAgICAqIEZpZWxkIG9wdGlvbiBgW2pzdHlwZSA9IEpTX1NUUklOR11gLlxuICAgICAqL1xuICAgIExvbmdUeXBlW0xvbmdUeXBlW1wiU1RSSU5HXCJdID0gMV0gPSBcIlNUUklOR1wiO1xuICAgIC8qKlxuICAgICAqIFVzZSBKYXZhU2NyaXB0IGBudW1iZXJgLlxuICAgICAqXG4gICAgICogTGFyZ2UgdmFsdWVzIHdpbGwgbG9vc2UgcHJlY2lzaW9uLlxuICAgICAqXG4gICAgICogRmllbGQgb3B0aW9uIGBbanN0eXBlID0gSlNfTlVNQkVSXWAuXG4gICAgICovXG4gICAgTG9uZ1R5cGVbTG9uZ1R5cGVbXCJOVU1CRVJcIl0gPSAyXSA9IFwiTlVNQkVSXCI7XG59KShMb25nVHlwZSA9IGV4cG9ydHMuTG9uZ1R5cGUgfHwgKGV4cG9ydHMuTG9uZ1R5cGUgPSB7fSkpO1xuLyoqXG4gKiBQcm90b2J1ZiAyLjEuMCBpbnRyb2R1Y2VkIHBhY2tlZCByZXBlYXRlZCBmaWVsZHMuXG4gKiBTZXR0aW5nIHRoZSBmaWVsZCBvcHRpb24gYFtwYWNrZWQgPSB0cnVlXWAgZW5hYmxlcyBwYWNraW5nLlxuICpcbiAqIEluIHByb3RvMywgYWxsIHJlcGVhdGVkIGZpZWxkcyBhcmUgcGFja2VkIGJ5IGRlZmF1bHQuXG4gKiBTZXR0aW5nIHRoZSBmaWVsZCBvcHRpb24gYFtwYWNrZWQgPSBmYWxzZV1gIGRpc2FibGVzIHBhY2tpbmcuXG4gKlxuICogUGFja2VkIHJlcGVhdGVkIGZpZWxkcyBhcmUgZW5jb2RlZCB3aXRoIGEgc2luZ2xlIHRhZyxcbiAqIHRoZW4gYSBsZW5ndGgtZGVsaW1pdGVyLCB0aGVuIHRoZSBlbGVtZW50IHZhbHVlcy5cbiAqXG4gKiBVbnBhY2tlZCByZXBlYXRlZCBmaWVsZHMgYXJlIGVuY29kZWQgd2l0aCBhIHRhZyBhbmRcbiAqIHZhbHVlIGZvciBlYWNoIGVsZW1lbnQuXG4gKlxuICogYGJ5dGVzYCBhbmQgYHN0cmluZ2AgY2Fubm90IGJlIHBhY2tlZC5cbiAqL1xudmFyIFJlcGVhdFR5cGU7XG4oZnVuY3Rpb24gKFJlcGVhdFR5cGUpIHtcbiAgICAvKipcbiAgICAgKiBUaGUgZmllbGQgaXMgbm90IHJlcGVhdGVkLlxuICAgICAqL1xuICAgIFJlcGVhdFR5cGVbUmVwZWF0VHlwZVtcIk5PXCJdID0gMF0gPSBcIk5PXCI7XG4gICAgLyoqXG4gICAgICogVGhlIGZpZWxkIGlzIHJlcGVhdGVkIGFuZCBzaG91bGQgYmUgcGFja2VkLlxuICAgICAqIEludmFsaWQgZm9yIGBieXRlc2AgYW5kIGBzdHJpbmdgLCB0aGV5IGNhbm5vdCBiZSBwYWNrZWQuXG4gICAgICovXG4gICAgUmVwZWF0VHlwZVtSZXBlYXRUeXBlW1wiUEFDS0VEXCJdID0gMV0gPSBcIlBBQ0tFRFwiO1xuICAgIC8qKlxuICAgICAqIFRoZSBmaWVsZCBpcyByZXBlYXRlZCBidXQgc2hvdWxkIG5vdCBiZSBwYWNrZWQuXG4gICAgICogVGhlIG9ubHkgdmFsaWQgcmVwZWF0IHR5cGUgZm9yIHJlcGVhdGVkIGBieXRlc2AgYW5kIGBzdHJpbmdgLlxuICAgICAqL1xuICAgIFJlcGVhdFR5cGVbUmVwZWF0VHlwZVtcIlVOUEFDS0VEXCJdID0gMl0gPSBcIlVOUEFDS0VEXCI7XG59KShSZXBlYXRUeXBlID0gZXhwb3J0cy5SZXBlYXRUeXBlIHx8IChleHBvcnRzLlJlcGVhdFR5cGUgPSB7fSkpO1xuLyoqXG4gKiBUdXJucyBQYXJ0aWFsRmllbGRJbmZvIGludG8gRmllbGRJbmZvLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVGaWVsZEluZm8oZmllbGQpIHtcbiAgICB2YXIgX2EsIF9iLCBfYywgX2Q7XG4gICAgZmllbGQubG9jYWxOYW1lID0gKF9hID0gZmllbGQubG9jYWxOYW1lKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBsb3dlcl9jYW1lbF9jYXNlXzEubG93ZXJDYW1lbENhc2UoZmllbGQubmFtZSk7XG4gICAgZmllbGQuanNvbk5hbWUgPSAoX2IgPSBmaWVsZC5qc29uTmFtZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogbG93ZXJfY2FtZWxfY2FzZV8xLmxvd2VyQ2FtZWxDYXNlKGZpZWxkLm5hbWUpO1xuICAgIGZpZWxkLnJlcGVhdCA9IChfYyA9IGZpZWxkLnJlcGVhdCkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogUmVwZWF0VHlwZS5OTztcbiAgICBmaWVsZC5vcHQgPSAoX2QgPSBmaWVsZC5vcHQpICE9PSBudWxsICYmIF9kICE9PSB2b2lkIDAgPyBfZCA6IChmaWVsZC5yZXBlYXQgPyBmYWxzZSA6IGZpZWxkLm9uZW9mID8gZmFsc2UgOiBmaWVsZC5raW5kID09IFwibWVzc2FnZVwiKTtcbiAgICByZXR1cm4gZmllbGQ7XG59XG5leHBvcnRzLm5vcm1hbGl6ZUZpZWxkSW5mbyA9IG5vcm1hbGl6ZUZpZWxkSW5mbztcbi8qKlxuICogUmVhZCBjdXN0b20gZmllbGQgb3B0aW9ucyBmcm9tIGEgZ2VuZXJhdGVkIG1lc3NhZ2UgdHlwZS5cbiAqXG4gKiBAZGVwcmVjYXRlZCB1c2UgcmVhZEZpZWxkT3B0aW9uKClcbiAqL1xuZnVuY3Rpb24gcmVhZEZpZWxkT3B0aW9ucyhtZXNzYWdlVHlwZSwgZmllbGROYW1lLCBleHRlbnNpb25OYW1lLCBleHRlbnNpb25UeXBlKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IG9wdGlvbnMgPSAoX2EgPSBtZXNzYWdlVHlwZS5maWVsZHMuZmluZCgobSwgaSkgPT4gbS5sb2NhbE5hbWUgPT0gZmllbGROYW1lIHx8IGkgPT0gZmllbGROYW1lKSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm9wdGlvbnM7XG4gICAgcmV0dXJuIG9wdGlvbnMgJiYgb3B0aW9uc1tleHRlbnNpb25OYW1lXSA/IGV4dGVuc2lvblR5cGUuZnJvbUpzb24ob3B0aW9uc1tleHRlbnNpb25OYW1lXSkgOiB1bmRlZmluZWQ7XG59XG5leHBvcnRzLnJlYWRGaWVsZE9wdGlvbnMgPSByZWFkRmllbGRPcHRpb25zO1xuZnVuY3Rpb24gcmVhZEZpZWxkT3B0aW9uKG1lc3NhZ2VUeXBlLCBmaWVsZE5hbWUsIGV4dGVuc2lvbk5hbWUsIGV4dGVuc2lvblR5cGUpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3Qgb3B0aW9ucyA9IChfYSA9IG1lc3NhZ2VUeXBlLmZpZWxkcy5maW5kKChtLCBpKSA9PiBtLmxvY2FsTmFtZSA9PSBmaWVsZE5hbWUgfHwgaSA9PSBmaWVsZE5hbWUpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub3B0aW9ucztcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3Qgb3B0aW9uVmFsID0gb3B0aW9uc1tleHRlbnNpb25OYW1lXTtcbiAgICBpZiAob3B0aW9uVmFsID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvblZhbDtcbiAgICB9XG4gICAgcmV0dXJuIGV4dGVuc2lvblR5cGUgPyBleHRlbnNpb25UeXBlLmZyb21Kc29uKG9wdGlvblZhbCkgOiBvcHRpb25WYWw7XG59XG5leHBvcnRzLnJlYWRGaWVsZE9wdGlvbiA9IHJlYWRGaWVsZE9wdGlvbjtcbmZ1bmN0aW9uIHJlYWRNZXNzYWdlT3B0aW9uKG1lc3NhZ2VUeXBlLCBleHRlbnNpb25OYW1lLCBleHRlbnNpb25UeXBlKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IG1lc3NhZ2VUeXBlLm9wdGlvbnM7XG4gICAgY29uc3Qgb3B0aW9uVmFsID0gb3B0aW9uc1tleHRlbnNpb25OYW1lXTtcbiAgICBpZiAob3B0aW9uVmFsID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvblZhbDtcbiAgICB9XG4gICAgcmV0dXJuIGV4dGVuc2lvblR5cGUgPyBleHRlbnNpb25UeXBlLmZyb21Kc29uKG9wdGlvblZhbCkgOiBvcHRpb25WYWw7XG59XG5leHBvcnRzLnJlYWRNZXNzYWdlT3B0aW9uID0gcmVhZE1lc3NhZ2VPcHRpb247XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRTZWxlY3RlZE9uZW9mVmFsdWUgPSBleHBvcnRzLmNsZWFyT25lb2ZWYWx1ZSA9IGV4cG9ydHMuc2V0VW5rbm93bk9uZW9mVmFsdWUgPSBleHBvcnRzLnNldE9uZW9mVmFsdWUgPSBleHBvcnRzLmdldE9uZW9mVmFsdWUgPSBleHBvcnRzLmlzT25lb2ZHcm91cCA9IHZvaWQgMDtcbi8qKlxuICogSXMgdGhlIGdpdmVuIHZhbHVlIGEgdmFsaWQgb25lb2YgZ3JvdXA/XG4gKlxuICogV2UgcmVwcmVzZW50IHByb3RvYnVmIGBvbmVvZmAgYXMgYWxnZWJyYWljIGRhdGEgdHlwZXMgKEFEVCkgaW4gZ2VuZXJhdGVkXG4gKiBjb2RlLiBCdXQgd2hlbiB3b3JraW5nIHdpdGggbWVzc2FnZXMgb2YgdW5rbm93biB0eXBlLCB0aGUgQURUIGRvZXMgbm90XG4gKiBoZWxwIHVzLlxuICpcbiAqIFRoaXMgdHlwZSBndWFyZCBjaGVja3MgaWYgdGhlIGdpdmVuIG9iamVjdCBhZGhlcmVzIHRvIHRoZSBBRFQgcnVsZXMsIHdoaWNoXG4gKiBhcmUgYXMgZm9sbG93czpcbiAqXG4gKiAxKSBNdXN0IGJlIGFuIG9iamVjdC5cbiAqXG4gKiAyKSBNdXN0IGhhdmUgYSBcIm9uZW9mS2luZFwiIGRpc2NyaW1pbmF0b3IgcHJvcGVydHkuXG4gKlxuICogMykgSWYgXCJvbmVvZktpbmRcIiBpcyBgdW5kZWZpbmVkYCwgbm8gbWVtYmVyIGZpZWxkIGlzIHNlbGVjdGVkLiBUaGUgb2JqZWN0XG4gKiBtdXN0IG5vdCBoYXZlIGFueSBvdGhlciBwcm9wZXJ0aWVzLlxuICpcbiAqIDQpIElmIFwib25lb2ZLaW5kXCIgaXMgYSBgc3RyaW5nYCwgdGhlIG1lbWJlciBmaWVsZCB3aXRoIHRoaXMgbmFtZSBpc1xuICogc2VsZWN0ZWQuXG4gKlxuICogNSkgSWYgYSBtZW1iZXIgZmllbGQgaXMgc2VsZWN0ZWQsIHRoZSBvYmplY3QgbXVzdCBoYXZlIGEgc2Vjb25kIHByb3BlcnR5XG4gKiB3aXRoIHRoaXMgbmFtZS4gVGhlIHByb3BlcnR5IG11c3Qgbm90IGJlIGB1bmRlZmluZWRgLlxuICpcbiAqIDYpIE5vIGV4dHJhIHByb3BlcnRpZXMgYXJlIGFsbG93ZWQuIFRoZSBvYmplY3QgaGFzIGVpdGhlciBvbmUgcHJvcGVydHlcbiAqIChubyBzZWxlY3Rpb24pIG9yIHR3byBwcm9wZXJ0aWVzIChzZWxlY3Rpb24pLlxuICpcbiAqL1xuZnVuY3Rpb24gaXNPbmVvZkdyb3VwKGFueSkge1xuICAgIGlmICh0eXBlb2YgYW55ICE9ICdvYmplY3QnIHx8IGFueSA9PT0gbnVsbCB8fCAhYW55Lmhhc093blByb3BlcnR5KCdvbmVvZktpbmQnKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHN3aXRjaCAodHlwZW9mIGFueS5vbmVvZktpbmQpIHtcbiAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgICAgaWYgKGFueVthbnkub25lb2ZLaW5kXSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhhbnkpLmxlbmd0aCA9PSAyO1xuICAgICAgICBjYXNlIFwidW5kZWZpbmVkXCI6XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoYW55KS5sZW5ndGggPT0gMTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5leHBvcnRzLmlzT25lb2ZHcm91cCA9IGlzT25lb2ZHcm91cDtcbi8qKlxuICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGdpdmVuIGZpZWxkIGluIGEgb25lb2YgZ3JvdXAuXG4gKi9cbmZ1bmN0aW9uIGdldE9uZW9mVmFsdWUob25lb2YsIGtpbmQpIHtcbiAgICByZXR1cm4gb25lb2Zba2luZF07XG59XG5leHBvcnRzLmdldE9uZW9mVmFsdWUgPSBnZXRPbmVvZlZhbHVlO1xuZnVuY3Rpb24gc2V0T25lb2ZWYWx1ZShvbmVvZiwga2luZCwgdmFsdWUpIHtcbiAgICBpZiAob25lb2Yub25lb2ZLaW5kICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZGVsZXRlIG9uZW9mW29uZW9mLm9uZW9mS2luZF07XG4gICAgfVxuICAgIG9uZW9mLm9uZW9mS2luZCA9IGtpbmQ7XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgb25lb2Zba2luZF0gPSB2YWx1ZTtcbiAgICB9XG59XG5leHBvcnRzLnNldE9uZW9mVmFsdWUgPSBzZXRPbmVvZlZhbHVlO1xuZnVuY3Rpb24gc2V0VW5rbm93bk9uZW9mVmFsdWUob25lb2YsIGtpbmQsIHZhbHVlKSB7XG4gICAgaWYgKG9uZW9mLm9uZW9mS2luZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGRlbGV0ZSBvbmVvZltvbmVvZi5vbmVvZktpbmRdO1xuICAgIH1cbiAgICBvbmVvZi5vbmVvZktpbmQgPSBraW5kO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIGtpbmQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBvbmVvZltraW5kXSA9IHZhbHVlO1xuICAgIH1cbn1cbmV4cG9ydHMuc2V0VW5rbm93bk9uZW9mVmFsdWUgPSBzZXRVbmtub3duT25lb2ZWYWx1ZTtcbi8qKlxuICogUmVtb3ZlcyB0aGUgc2VsZWN0ZWQgZmllbGQgaW4gYSBvbmVvZiBncm91cC5cbiAqXG4gKiBOb3RlIHRoYXQgdGhlIHJlY29tbWVuZGVkIHdheSB0byBtb2RpZnkgYSBvbmVvZiBncm91cCBpcyB0byBzZXRcbiAqIGEgbmV3IG9iamVjdDpcbiAqXG4gKiBgYGB0c1xuICogbWVzc2FnZS5yZXN1bHQgPSB7IG9uZW9mS2luZDogdW5kZWZpbmVkIH07XG4gKiBgYGBcbiAqL1xuZnVuY3Rpb24gY2xlYXJPbmVvZlZhbHVlKG9uZW9mKSB7XG4gICAgaWYgKG9uZW9mLm9uZW9mS2luZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGRlbGV0ZSBvbmVvZltvbmVvZi5vbmVvZktpbmRdO1xuICAgIH1cbiAgICBvbmVvZi5vbmVvZktpbmQgPSB1bmRlZmluZWQ7XG59XG5leHBvcnRzLmNsZWFyT25lb2ZWYWx1ZSA9IGNsZWFyT25lb2ZWYWx1ZTtcbi8qKlxuICogUmV0dXJucyB0aGUgc2VsZWN0ZWQgdmFsdWUgb2YgdGhlIGdpdmVuIG9uZW9mIGdyb3VwLlxuICpcbiAqIE5vdCB0aGF0IHRoZSByZWNvbW1lbmRlZCB3YXkgdG8gYWNjZXNzIGEgb25lb2YgZ3JvdXAgaXMgdG8gY2hlY2tcbiAqIHRoZSBcIm9uZW9mS2luZFwiIHByb3BlcnR5IGFuZCBsZXQgVHlwZVNjcmlwdCBuYXJyb3cgZG93biB0aGUgdW5pb25cbiAqIHR5cGUgZm9yIHlvdTpcbiAqXG4gKiBgYGB0c1xuICogaWYgKG1lc3NhZ2UucmVzdWx0Lm9uZW9mS2luZCA9PT0gXCJlcnJvclwiKSB7XG4gKiAgIG1lc3NhZ2UucmVzdWx0LmVycm9yOyAvLyBzdHJpbmdcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEluIHRoZSByYXJlIGNhc2UgeW91IGp1c3QgbmVlZCB0aGUgdmFsdWUsIGFuZCBkbyBub3QgY2FyZSBhYm91dFxuICogd2hpY2ggcHJvdG9idWYgZmllbGQgaXMgc2VsZWN0ZWQsIHlvdSBjYW4gdXNlIHRoaXMgZnVuY3Rpb25cbiAqIGZvciBjb252ZW5pZW5jZS5cbiAqL1xuZnVuY3Rpb24gZ2V0U2VsZWN0ZWRPbmVvZlZhbHVlKG9uZW9mKSB7XG4gICAgaWYgKG9uZW9mLm9uZW9mS2luZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiBvbmVvZltvbmVvZi5vbmVvZktpbmRdO1xufVxuZXhwb3J0cy5nZXRTZWxlY3RlZE9uZW9mVmFsdWUgPSBnZXRTZWxlY3RlZE9uZW9mVmFsdWU7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5SZWZsZWN0aW9uVHlwZUNoZWNrID0gdm9pZCAwO1xuY29uc3QgcmVmbGVjdGlvbl9pbmZvXzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLWluZm9cIik7XG5jb25zdCBvbmVvZl8xID0gcmVxdWlyZShcIi4vb25lb2ZcIik7XG4vLyBub2luc3BlY3Rpb24gSlNNZXRob2RDYW5CZVN0YXRpY1xuY2xhc3MgUmVmbGVjdGlvblR5cGVDaGVjayB7XG4gICAgY29uc3RydWN0b3IoaW5mbykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHRoaXMuZmllbGRzID0gKF9hID0gaW5mby5maWVsZHMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFtdO1xuICAgIH1cbiAgICBwcmVwYXJlKCkge1xuICAgICAgICBpZiAodGhpcy5kYXRhKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCByZXEgPSBbXSwga25vd24gPSBbXSwgb25lb2ZzID0gW107XG4gICAgICAgIGZvciAobGV0IGZpZWxkIG9mIHRoaXMuZmllbGRzKSB7XG4gICAgICAgICAgICBpZiAoZmllbGQub25lb2YpIHtcbiAgICAgICAgICAgICAgICBpZiAoIW9uZW9mcy5pbmNsdWRlcyhmaWVsZC5vbmVvZikpIHtcbiAgICAgICAgICAgICAgICAgICAgb25lb2ZzLnB1c2goZmllbGQub25lb2YpO1xuICAgICAgICAgICAgICAgICAgICByZXEucHVzaChmaWVsZC5vbmVvZik7XG4gICAgICAgICAgICAgICAgICAgIGtub3duLnB1c2goZmllbGQub25lb2YpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGtub3duLnB1c2goZmllbGQubG9jYWxOYW1lKTtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGZpZWxkLmtpbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcInNjYWxhclwiOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZW51bVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmaWVsZC5vcHQgfHwgZmllbGQucmVwZWF0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcS5wdXNoKGZpZWxkLmxvY2FsTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcIm1lc3NhZ2VcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZC5yZXBlYXQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxLnB1c2goZmllbGQubG9jYWxOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwibWFwXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXEucHVzaChmaWVsZC5sb2NhbE5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGF0YSA9IHsgcmVxLCBrbm93biwgb25lb2ZzOiBPYmplY3QudmFsdWVzKG9uZW9mcykgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSXMgdGhlIGFyZ3VtZW50IGEgdmFsaWQgbWVzc2FnZSBhcyBzcGVjaWZpZWQgYnkgdGhlXG4gICAgICogcmVmbGVjdGlvbiBpbmZvcm1hdGlvbj9cbiAgICAgKlxuICAgICAqIENoZWNrcyBhbGwgZmllbGQgdHlwZXMgcmVjdXJzaXZlbHkuIFRoZSBgZGVwdGhgXG4gICAgICogc3BlY2lmaWVzIGhvdyBkZWVwIGludG8gdGhlIHN0cnVjdHVyZSB0aGUgY2hlY2sgd2lsbCBiZS5cbiAgICAgKlxuICAgICAqIFdpdGggYSBkZXB0aCBvZiAwLCBvbmx5IHRoZSBwcmVzZW5jZSBvZiBmaWVsZHNcbiAgICAgKiBpcyBjaGVja2VkLlxuICAgICAqXG4gICAgICogV2l0aCBhIGRlcHRoIG9mIDEgb3IgbW9yZSwgdGhlIGZpZWxkIHR5cGVzIGFyZSBjaGVja2VkLlxuICAgICAqXG4gICAgICogV2l0aCBhIGRlcHRoIG9mIDIgb3IgbW9yZSwgdGhlIG1lbWJlcnMgb2YgbWFwLCByZXBlYXRlZFxuICAgICAqIGFuZCBtZXNzYWdlIGZpZWxkcyBhcmUgY2hlY2tlZC5cbiAgICAgKlxuICAgICAqIE1lc3NhZ2UgZmllbGRzIHdpbGwgYmUgY2hlY2tlZCByZWN1cnNpdmVseSB3aXRoIGRlcHRoIC0gMS5cbiAgICAgKlxuICAgICAqIFRoZSBudW1iZXIgb2YgbWFwIGVudHJpZXMgLyByZXBlYXRlZCB2YWx1ZXMgYmVpbmcgY2hlY2tlZFxuICAgICAqIGlzIDwgZGVwdGguXG4gICAgICovXG4gICAgaXMobWVzc2FnZSwgZGVwdGgsIGFsbG93RXhjZXNzUHJvcGVydGllcyA9IGZhbHNlKSB7XG4gICAgICAgIGlmIChkZXB0aCA8IDApXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKG1lc3NhZ2UgPT09IG51bGwgfHwgbWVzc2FnZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBtZXNzYWdlICE9ICdvYmplY3QnKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB0aGlzLnByZXBhcmUoKTtcbiAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhtZXNzYWdlKSwgZGF0YSA9IHRoaXMuZGF0YTtcbiAgICAgICAgLy8gaWYgYSByZXF1aXJlZCBmaWVsZCBpcyBtaXNzaW5nIGluIGFyZywgdGhpcyBjYW5ub3QgYmUgYSBUXG4gICAgICAgIGlmIChrZXlzLmxlbmd0aCA8IGRhdGEucmVxLmxlbmd0aCB8fCBkYXRhLnJlcS5zb21lKG4gPT4gIWtleXMuaW5jbHVkZXMobikpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoIWFsbG93RXhjZXNzUHJvcGVydGllcykge1xuICAgICAgICAgICAgLy8gaWYgdGhlIGFyZyBjb250YWlucyBhIGtleSB3ZSBkb250IGtub3csIHRoaXMgaXMgbm90IGEgbGl0ZXJhbCBUXG4gICAgICAgICAgICBpZiAoa2V5cy5zb21lKGsgPT4gIWRhdGEua25vd24uaW5jbHVkZXMoaykpKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBcIldpdGggYSBkZXB0aCBvZiAwLCBvbmx5IHRoZSBwcmVzZW5jZSBhbmQgYWJzZW5jZSBvZiBmaWVsZHMgaXMgY2hlY2tlZC5cIlxuICAgICAgICAvLyBcIldpdGggYSBkZXB0aCBvZiAxIG9yIG1vcmUsIHRoZSBmaWVsZCB0eXBlcyBhcmUgY2hlY2tlZC5cIlxuICAgICAgICBpZiAoZGVwdGggPCAxKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjaGVjayBvbmVvZiBncm91cFxuICAgICAgICBmb3IgKGNvbnN0IG5hbWUgb2YgZGF0YS5vbmVvZnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gbWVzc2FnZVtuYW1lXTtcbiAgICAgICAgICAgIGlmICghb25lb2ZfMS5pc09uZW9mR3JvdXAoZ3JvdXApKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGlmIChncm91cC5vbmVvZktpbmQgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5maWVsZHMuZmluZChmID0+IGYubG9jYWxOYW1lID09PSBncm91cC5vbmVvZktpbmQpO1xuICAgICAgICAgICAgaWYgKCFmaWVsZClcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIHdlIGZvdW5kIG5vIGZpZWxkLCBidXQgaGF2ZSBhIGtpbmQsIHNvbWV0aGluZyBpcyB3cm9uZ1xuICAgICAgICAgICAgaWYgKCF0aGlzLmZpZWxkKGdyb3VwW2dyb3VwLm9uZW9mS2luZF0sIGZpZWxkLCBhbGxvd0V4Y2Vzc1Byb3BlcnRpZXMsIGRlcHRoKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY2hlY2sgdHlwZXNcbiAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiB0aGlzLmZpZWxkcykge1xuICAgICAgICAgICAgaWYgKGZpZWxkLm9uZW9mICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZmllbGQobWVzc2FnZVtmaWVsZC5sb2NhbE5hbWVdLCBmaWVsZCwgYWxsb3dFeGNlc3NQcm9wZXJ0aWVzLCBkZXB0aCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBmaWVsZChhcmcsIGZpZWxkLCBhbGxvd0V4Y2Vzc1Byb3BlcnRpZXMsIGRlcHRoKSB7XG4gICAgICAgIGxldCByZXBlYXRlZCA9IGZpZWxkLnJlcGVhdDtcbiAgICAgICAgc3dpdGNoIChmaWVsZC5raW5kKSB7XG4gICAgICAgICAgICBjYXNlIFwic2NhbGFyXCI6XG4gICAgICAgICAgICAgICAgaWYgKGFyZyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmllbGQub3B0O1xuICAgICAgICAgICAgICAgIGlmIChyZXBlYXRlZClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGFycyhhcmcsIGZpZWxkLlQsIGRlcHRoLCBmaWVsZC5MKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsYXIoYXJnLCBmaWVsZC5ULCBmaWVsZC5MKTtcbiAgICAgICAgICAgIGNhc2UgXCJlbnVtXCI6XG4gICAgICAgICAgICAgICAgaWYgKGFyZyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmllbGQub3B0O1xuICAgICAgICAgICAgICAgIGlmIChyZXBlYXRlZClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGFycyhhcmcsIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuSU5UMzIsIGRlcHRoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsYXIoYXJnLCByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLklOVDMyKTtcbiAgICAgICAgICAgIGNhc2UgXCJtZXNzYWdlXCI6XG4gICAgICAgICAgICAgICAgaWYgKGFyZyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpZiAocmVwZWF0ZWQpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2VzKGFyZywgZmllbGQuVCgpLCBhbGxvd0V4Y2Vzc1Byb3BlcnRpZXMsIGRlcHRoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tZXNzYWdlKGFyZywgZmllbGQuVCgpLCBhbGxvd0V4Y2Vzc1Byb3BlcnRpZXMsIGRlcHRoKTtcbiAgICAgICAgICAgIGNhc2UgXCJtYXBcIjpcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFyZyAhPSAnb2JqZWN0JyB8fCBhcmcgPT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAoZGVwdGggPCAyKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMubWFwS2V5cyhhcmcsIGZpZWxkLkssIGRlcHRoKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoZmllbGQuVi5raW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJzY2FsYXJcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxhcnMoT2JqZWN0LnZhbHVlcyhhcmcpLCBmaWVsZC5WLlQsIGRlcHRoLCBmaWVsZC5WLkwpO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZW51bVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGFycyhPYmplY3QudmFsdWVzKGFyZyksIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuSU5UMzIsIGRlcHRoKTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcIm1lc3NhZ2VcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2VzKE9iamVjdC52YWx1ZXMoYXJnKSwgZmllbGQuVi5UKCksIGFsbG93RXhjZXNzUHJvcGVydGllcywgZGVwdGgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgbWVzc2FnZShhcmcsIHR5cGUsIGFsbG93RXhjZXNzUHJvcGVydGllcywgZGVwdGgpIHtcbiAgICAgICAgaWYgKGFsbG93RXhjZXNzUHJvcGVydGllcykge1xuICAgICAgICAgICAgcmV0dXJuIHR5cGUuaXNBc3NpZ25hYmxlKGFyZywgZGVwdGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0eXBlLmlzKGFyZywgZGVwdGgpO1xuICAgIH1cbiAgICBtZXNzYWdlcyhhcmcsIHR5cGUsIGFsbG93RXhjZXNzUHJvcGVydGllcywgZGVwdGgpIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFyZykpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChkZXB0aCA8IDIpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKGFsbG93RXhjZXNzUHJvcGVydGllcykge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmcubGVuZ3RoICYmIGkgPCBkZXB0aDsgaSsrKVxuICAgICAgICAgICAgICAgIGlmICghdHlwZS5pc0Fzc2lnbmFibGUoYXJnW2ldLCBkZXB0aCAtIDEpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZy5sZW5ndGggJiYgaSA8IGRlcHRoOyBpKyspXG4gICAgICAgICAgICAgICAgaWYgKCF0eXBlLmlzKGFyZ1tpXSwgZGVwdGggLSAxKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBzY2FsYXIoYXJnLCB0eXBlLCBsb25nVHlwZSkge1xuICAgICAgICBsZXQgYXJnVHlwZSA9IHR5cGVvZiBhcmc7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlVJTlQ2NDpcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5GSVhFRDY0OlxuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLklOVDY0OlxuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNGSVhFRDY0OlxuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNJTlQ2NDpcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGxvbmdUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuTG9uZ1R5cGUuQklHSU5UOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFyZ1R5cGUgPT0gXCJiaWdpbnRcIjtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5Mb25nVHlwZS5OVU1CRVI6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJnVHlwZSA9PSBcIm51bWJlclwiICYmICFpc05hTihhcmcpO1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFyZ1R5cGUgPT0gXCJzdHJpbmdcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuQk9PTDpcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJnVHlwZSA9PSAnYm9vbGVhbic7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuU1RSSU5HOlxuICAgICAgICAgICAgICAgIHJldHVybiBhcmdUeXBlID09ICdzdHJpbmcnO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkJZVEVTOlxuICAgICAgICAgICAgICAgIHJldHVybiBhcmcgaW5zdGFuY2VvZiBVaW50OEFycmF5O1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkRPVUJMRTpcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5GTE9BVDpcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJnVHlwZSA9PSAnbnVtYmVyJyAmJiAhaXNOYU4oYXJnKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgLy8gY2FzZSBTY2FsYXJUeXBlLlVJTlQzMjpcbiAgICAgICAgICAgICAgICAvLyBjYXNlIFNjYWxhclR5cGUuRklYRUQzMjpcbiAgICAgICAgICAgICAgICAvLyBjYXNlIFNjYWxhclR5cGUuSU5UMzI6XG4gICAgICAgICAgICAgICAgLy8gY2FzZSBTY2FsYXJUeXBlLlNJTlQzMjpcbiAgICAgICAgICAgICAgICAvLyBjYXNlIFNjYWxhclR5cGUuU0ZJWEVEMzI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFyZ1R5cGUgPT0gJ251bWJlcicgJiYgTnVtYmVyLmlzSW50ZWdlcihhcmcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNjYWxhcnMoYXJnLCB0eXBlLCBkZXB0aCwgbG9uZ1R5cGUpIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFyZykpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChkZXB0aCA8IDIpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYXJnKSlcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJnLmxlbmd0aCAmJiBpIDwgZGVwdGg7IGkrKylcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2NhbGFyKGFyZ1tpXSwgdHlwZSwgbG9uZ1R5cGUpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBtYXBLZXlzKG1hcCwgdHlwZSwgZGVwdGgpIHtcbiAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhtYXApO1xuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5JTlQzMjpcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5GSVhFRDMyOlxuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNGSVhFRDMyOlxuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNJTlQzMjpcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5VSU5UMzI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGFycyhrZXlzLnNsaWNlKDAsIGRlcHRoKS5tYXAoayA9PiBwYXJzZUludChrKSksIHR5cGUsIGRlcHRoKTtcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5CT09MOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxhcnMoa2V5cy5zbGljZSgwLCBkZXB0aCkubWFwKGsgPT4gayA9PSAndHJ1ZScgPyB0cnVlIDogayA9PSAnZmFsc2UnID8gZmFsc2UgOiBrKSwgdHlwZSwgZGVwdGgpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsYXJzKGtleXMsIHR5cGUsIGRlcHRoLCByZWZsZWN0aW9uX2luZm9fMS5Mb25nVHlwZS5TVFJJTkcpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5SZWZsZWN0aW9uVHlwZUNoZWNrID0gUmVmbGVjdGlvblR5cGVDaGVjaztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlZmxlY3Rpb25Mb25nQ29udmVydCA9IHZvaWQgMDtcbmNvbnN0IHJlZmxlY3Rpb25faW5mb18xID0gcmVxdWlyZShcIi4vcmVmbGVjdGlvbi1pbmZvXCIpO1xuLyoqXG4gKiBVdGlsaXR5IG1ldGhvZCB0byBjb252ZXJ0IGEgUGJMb25nIG9yIFBiVWxvbmcgdG8gYSBKYXZhU2NyaXB0XG4gKiByZXByZXNlbnRhdGlvbiBkdXJpbmcgcnVudGltZS5cbiAqXG4gKiBXb3JrcyB3aXRoIGdlbmVyYXRlZCBmaWVsZCBpbmZvcm1hdGlvbiwgYHVuZGVmaW5lZGAgaXMgZXF1aXZhbGVudFxuICogdG8gYFNUUklOR2AuXG4gKi9cbmZ1bmN0aW9uIHJlZmxlY3Rpb25Mb25nQ29udmVydChsb25nLCB0eXBlKSB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuTG9uZ1R5cGUuQklHSU5UOlxuICAgICAgICAgICAgcmV0dXJuIGxvbmcudG9CaWdJbnQoKTtcbiAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5Mb25nVHlwZS5OVU1CRVI6XG4gICAgICAgICAgICByZXR1cm4gbG9uZy50b051bWJlcigpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgLy8gY2FzZSB1bmRlZmluZWQ6XG4gICAgICAgICAgICAvLyBjYXNlIExvbmdUeXBlLlNUUklORzpcbiAgICAgICAgICAgIHJldHVybiBsb25nLnRvU3RyaW5nKCk7XG4gICAgfVxufVxuZXhwb3J0cy5yZWZsZWN0aW9uTG9uZ0NvbnZlcnQgPSByZWZsZWN0aW9uTG9uZ0NvbnZlcnQ7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5SZWZsZWN0aW9uSnNvblJlYWRlciA9IHZvaWQgMDtcbmNvbnN0IGpzb25fdHlwaW5nc18xID0gcmVxdWlyZShcIi4vanNvbi10eXBpbmdzXCIpO1xuY29uc3QgYmFzZTY0XzEgPSByZXF1aXJlKFwiLi9iYXNlNjRcIik7XG5jb25zdCByZWZsZWN0aW9uX2luZm9fMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24taW5mb1wiKTtcbmNvbnN0IHBiX2xvbmdfMSA9IHJlcXVpcmUoXCIuL3BiLWxvbmdcIik7XG5jb25zdCBhc3NlcnRfMSA9IHJlcXVpcmUoXCIuL2Fzc2VydFwiKTtcbmNvbnN0IHJlZmxlY3Rpb25fbG9uZ19jb252ZXJ0XzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLWxvbmctY29udmVydFwiKTtcbi8qKlxuICogUmVhZHMgcHJvdG8zIG1lc3NhZ2VzIGluIGNhbm9uaWNhbCBKU09OIGZvcm1hdCB1c2luZyByZWZsZWN0aW9uIGluZm9ybWF0aW9uLlxuICpcbiAqIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvZG9jcy9wcm90bzMjanNvblxuICovXG5jbGFzcyBSZWZsZWN0aW9uSnNvblJlYWRlciB7XG4gICAgY29uc3RydWN0b3IoaW5mbykge1xuICAgICAgICB0aGlzLmluZm8gPSBpbmZvO1xuICAgIH1cbiAgICBwcmVwYXJlKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICh0aGlzLmZNYXAgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5mTWFwID0ge307XG4gICAgICAgICAgICBjb25zdCBmaWVsZHNJbnB1dCA9IChfYSA9IHRoaXMuaW5mby5maWVsZHMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHNJbnB1dCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZk1hcFtmaWVsZC5uYW1lXSA9IGZpZWxkO1xuICAgICAgICAgICAgICAgIHRoaXMuZk1hcFtmaWVsZC5qc29uTmFtZV0gPSBmaWVsZDtcbiAgICAgICAgICAgICAgICB0aGlzLmZNYXBbZmllbGQubG9jYWxOYW1lXSA9IGZpZWxkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIENhbm5vdCBwYXJzZSBKU09OIDx0eXBlIG9mIGpzb25WYWx1ZT4gZm9yIDx0eXBlIG5hbWU+IzxmaWVsZE5hbWU+LlxuICAgIGFzc2VydChjb25kaXRpb24sIGZpZWxkTmFtZSwganNvblZhbHVlKSB7XG4gICAgICAgIGlmICghY29uZGl0aW9uKSB7XG4gICAgICAgICAgICBsZXQgd2hhdCA9IGpzb25fdHlwaW5nc18xLnR5cGVvZkpzb25WYWx1ZShqc29uVmFsdWUpO1xuICAgICAgICAgICAgaWYgKHdoYXQgPT0gXCJudW1iZXJcIiB8fCB3aGF0ID09IFwiYm9vbGVhblwiKVxuICAgICAgICAgICAgICAgIHdoYXQgPSBqc29uVmFsdWUudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHBhcnNlIEpTT04gJHt3aGF0fSBmb3IgJHt0aGlzLmluZm8udHlwZU5hbWV9IyR7ZmllbGROYW1lfWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWRzIGEgbWVzc2FnZSBmcm9tIGNhbm9uaWNhbCBKU09OIGZvcm1hdCBpbnRvIHRoZSB0YXJnZXQgbWVzc2FnZS5cbiAgICAgKlxuICAgICAqIFJlcGVhdGVkIGZpZWxkcyBhcmUgYXBwZW5kZWQuIE1hcCBlbnRyaWVzIGFyZSBhZGRlZCwgb3ZlcndyaXRpbmdcbiAgICAgKiBleGlzdGluZyBrZXlzLlxuICAgICAqXG4gICAgICogSWYgYSBtZXNzYWdlIGZpZWxkIGlzIGFscmVhZHkgcHJlc2VudCwgaXQgd2lsbCBiZSBtZXJnZWQgd2l0aCB0aGVcbiAgICAgKiBuZXcgZGF0YS5cbiAgICAgKi9cbiAgICByZWFkKGlucHV0LCBtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMucHJlcGFyZSgpO1xuICAgICAgICBjb25zdCBvbmVvZnNIYW5kbGVkID0gW107XG4gICAgICAgIGZvciAoY29uc3QgW2pzb25LZXksIGpzb25WYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuZk1hcFtqc29uS2V5XTtcbiAgICAgICAgICAgIGlmICghZmllbGQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMuaWdub3JlVW5rbm93bkZpZWxkcylcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGb3VuZCB1bmtub3duIGZpZWxkIHdoaWxlIHJlYWRpbmcgJHt0aGlzLmluZm8udHlwZU5hbWV9IGZyb20gSlNPTiBmb3JtYXQuIEpTT04ga2V5OiAke2pzb25LZXl9YCk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBsb2NhbE5hbWUgPSBmaWVsZC5sb2NhbE5hbWU7XG4gICAgICAgICAgICAvLyBoYW5kbGUgb25lb2YgQURUXG4gICAgICAgICAgICBsZXQgdGFyZ2V0OyAvLyB0aGlzIHdpbGwgYmUgdGhlIHRhcmdldCBmb3IgdGhlIGZpZWxkIHZhbHVlLCB3aGV0aGVyIGl0IGlzIG1lbWJlciBvZiBhIG9uZW9mIG9yIG5vdFxuICAgICAgICAgICAgaWYgKGZpZWxkLm9uZW9mKSB7XG4gICAgICAgICAgICAgICAgaWYgKGpzb25WYWx1ZSA9PT0gbnVsbCAmJiAoZmllbGQua2luZCAhPT0gJ2VudW0nIHx8IGZpZWxkLlQoKVswXSAhPT0gJ2dvb2dsZS5wcm90b2J1Zi5OdWxsVmFsdWUnKSkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gc2luY2UganNvbiBvYmplY3RzIGFyZSB1bm9yZGVyZWQgYnkgc3BlY2lmaWNhdGlvbiwgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHRha2UgdGhlIGxhc3Qgb2YgbXVsdGlwbGUgb25lb2ZzXG4gICAgICAgICAgICAgICAgaWYgKG9uZW9mc0hhbmRsZWQuaW5jbHVkZXMoZmllbGQub25lb2YpKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE11bHRpcGxlIG1lbWJlcnMgb2YgdGhlIG9uZW9mIGdyb3VwIFwiJHtmaWVsZC5vbmVvZn1cIiBvZiAke3RoaXMuaW5mby50eXBlTmFtZX0gYXJlIHByZXNlbnQgaW4gSlNPTi5gKTtcbiAgICAgICAgICAgICAgICBvbmVvZnNIYW5kbGVkLnB1c2goZmllbGQub25lb2YpO1xuICAgICAgICAgICAgICAgIHRhcmdldCA9IG1lc3NhZ2VbZmllbGQub25lb2ZdID0ge1xuICAgICAgICAgICAgICAgICAgICBvbmVvZktpbmQ6IGxvY2FsTmFtZVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0YXJnZXQgPSBtZXNzYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gd2UgaGF2ZSBoYW5kbGVkIG9uZW9mIGFib3ZlLiB3ZSBqdXN0IGhhdmUgcmVhZCB0aGUgdmFsdWUgaW50byBgdGFyZ2V0YC5cbiAgICAgICAgICAgIGlmIChmaWVsZC5raW5kID09ICdtYXAnKSB7XG4gICAgICAgICAgICAgICAgaWYgKGpzb25WYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gY2hlY2sgaW5wdXRcbiAgICAgICAgICAgICAgICB0aGlzLmFzc2VydChqc29uX3R5cGluZ3NfMS5pc0pzb25PYmplY3QoanNvblZhbHVlKSwgZmllbGQubmFtZSwganNvblZhbHVlKTtcbiAgICAgICAgICAgICAgICAvLyBvdXIgdGFyZ2V0IHRvIHB1dCBtYXAgZW50cmllcyBpbnRvXG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGRPYmogPSB0YXJnZXRbbG9jYWxOYW1lXTtcbiAgICAgICAgICAgICAgICAvLyByZWFkIGVudHJpZXNcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtqc29uT2JqS2V5LCBqc29uT2JqVmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGpzb25WYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hc3NlcnQoanNvbk9ialZhbHVlICE9PSBudWxsLCBmaWVsZC5uYW1lICsgXCIgbWFwIHZhbHVlXCIsIG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAvLyByZWFkIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgIGxldCB2YWw7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZmllbGQuVi5raW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwibWVzc2FnZVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IGZpZWxkLlYuVCgpLmludGVybmFsSnNvblJlYWQoanNvbk9ialZhbHVlLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJlbnVtXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gdGhpcy5lbnVtKGZpZWxkLlYuVCgpLCBqc29uT2JqVmFsdWUsIGZpZWxkLm5hbWUsIG9wdGlvbnMuaWdub3JlVW5rbm93bkZpZWxkcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbCA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcInNjYWxhclwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IHRoaXMuc2NhbGFyKGpzb25PYmpWYWx1ZSwgZmllbGQuVi5ULCBmaWVsZC5WLkwsIGZpZWxkLm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXNzZXJ0KHZhbCAhPT0gdW5kZWZpbmVkLCBmaWVsZC5uYW1lICsgXCIgbWFwIHZhbHVlXCIsIGpzb25PYmpWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHJlYWQga2V5XG4gICAgICAgICAgICAgICAgICAgIGxldCBrZXkgPSBqc29uT2JqS2V5O1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQuSyA9PSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkJPT0wpXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBrZXkgPT0gXCJ0cnVlXCIgPyB0cnVlIDoga2V5ID09IFwiZmFsc2VcIiA/IGZhbHNlIDoga2V5O1xuICAgICAgICAgICAgICAgICAgICBrZXkgPSB0aGlzLnNjYWxhcihrZXksIGZpZWxkLkssIHJlZmxlY3Rpb25faW5mb18xLkxvbmdUeXBlLlNUUklORywgZmllbGQubmFtZSkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgZmllbGRPYmpba2V5XSA9IHZhbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChmaWVsZC5yZXBlYXQpIHtcbiAgICAgICAgICAgICAgICBpZiAoanNvblZhbHVlID09PSBudWxsKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAvLyBjaGVjayBpbnB1dFxuICAgICAgICAgICAgICAgIHRoaXMuYXNzZXJ0KEFycmF5LmlzQXJyYXkoanNvblZhbHVlKSwgZmllbGQubmFtZSwganNvblZhbHVlKTtcbiAgICAgICAgICAgICAgICAvLyBvdXIgdGFyZ2V0IHRvIHB1dCBhcnJheSBlbnRyaWVzIGludG9cbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZEFyciA9IHRhcmdldFtsb2NhbE5hbWVdO1xuICAgICAgICAgICAgICAgIC8vIHJlYWQgYXJyYXkgZW50cmllc1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QganNvbkl0ZW0gb2YganNvblZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXNzZXJ0KGpzb25JdGVtICE9PSBudWxsLCBmaWVsZC5uYW1lLCBudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHZhbDtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChmaWVsZC5raW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwibWVzc2FnZVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IGZpZWxkLlQoKS5pbnRlcm5hbEpzb25SZWFkKGpzb25JdGVtLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJlbnVtXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gdGhpcy5lbnVtKGZpZWxkLlQoKSwganNvbkl0ZW0sIGZpZWxkLm5hbWUsIG9wdGlvbnMuaWdub3JlVW5rbm93bkZpZWxkcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbCA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcInNjYWxhclwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IHRoaXMuc2NhbGFyKGpzb25JdGVtLCBmaWVsZC5ULCBmaWVsZC5MLCBmaWVsZC5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFzc2VydCh2YWwgIT09IHVuZGVmaW5lZCwgZmllbGQubmFtZSwganNvblZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgZmllbGRBcnIucHVzaCh2YWwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoZmllbGQua2luZCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwibWVzc2FnZVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpzb25WYWx1ZSA9PT0gbnVsbCAmJiBmaWVsZC5UKCkudHlwZU5hbWUgIT0gJ2dvb2dsZS5wcm90b2J1Zi5WYWx1ZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFzc2VydChmaWVsZC5vbmVvZiA9PT0gdW5kZWZpbmVkLCBmaWVsZC5uYW1lICsgXCIgKG9uZW9mIG1lbWJlcilcIiwgbnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRbbG9jYWxOYW1lXSA9IGZpZWxkLlQoKS5pbnRlcm5hbEpzb25SZWFkKGpzb25WYWx1ZSwgb3B0aW9ucywgdGFyZ2V0W2xvY2FsTmFtZV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJlbnVtXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsID0gdGhpcy5lbnVtKGZpZWxkLlQoKSwganNvblZhbHVlLCBmaWVsZC5uYW1lLCBvcHRpb25zLmlnbm9yZVVua25vd25GaWVsZHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbCA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRbbG9jYWxOYW1lXSA9IHZhbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwic2NhbGFyXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRbbG9jYWxOYW1lXSA9IHRoaXMuc2NhbGFyKGpzb25WYWx1ZSwgZmllbGQuVCwgZmllbGQuTCwgZmllbGQubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBgZmFsc2VgIGZvciB1bnJlY29nbml6ZWQgc3RyaW5nIHJlcHJlc2VudGF0aW9ucy5cbiAgICAgKlxuICAgICAqIGdvb2dsZS5wcm90b2J1Zi5OdWxsVmFsdWUgYWNjZXB0cyBvbmx5IEpTT04gYG51bGxgIChvciB0aGUgb2xkIGBcIk5VTExfVkFMVUVcImApLlxuICAgICAqL1xuICAgIGVudW0odHlwZSwganNvbiwgZmllbGROYW1lLCBpZ25vcmVVbmtub3duRmllbGRzKSB7XG4gICAgICAgIGlmICh0eXBlWzBdID09ICdnb29nbGUucHJvdG9idWYuTnVsbFZhbHVlJylcbiAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydChqc29uID09PSBudWxsIHx8IGpzb24gPT09IFwiTlVMTF9WQUxVRVwiLCBgVW5hYmxlIHRvIHBhcnNlIGZpZWxkICR7dGhpcy5pbmZvLnR5cGVOYW1lfSMke2ZpZWxkTmFtZX0sIGVudW0gJHt0eXBlWzBdfSBvbmx5IGFjY2VwdHMgbnVsbC5gKTtcbiAgICAgICAgaWYgKGpzb24gPT09IG51bGwpXG4gICAgICAgICAgICAvLyB3ZSByZXF1aXJlIDAgdG8gYmUgZGVmYXVsdCB2YWx1ZSBmb3IgYWxsIGVudW1zXG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgc3dpdGNoICh0eXBlb2YganNvbikge1xuICAgICAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydChOdW1iZXIuaXNJbnRlZ2VyKGpzb24pLCBgVW5hYmxlIHRvIHBhcnNlIGZpZWxkICR7dGhpcy5pbmZvLnR5cGVOYW1lfSMke2ZpZWxkTmFtZX0sIGVudW0gY2FuIG9ubHkgYmUgaW50ZWdyYWwgbnVtYmVyLCBnb3QgJHtqc29ufS5gKTtcbiAgICAgICAgICAgICAgICByZXR1cm4ganNvbjtcbiAgICAgICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgICAgICAgICBsZXQgbG9jYWxFbnVtTmFtZSA9IGpzb247XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVbMl0gJiYganNvbi5zdWJzdHJpbmcoMCwgdHlwZVsyXS5sZW5ndGgpID09PSB0eXBlWzJdKVxuICAgICAgICAgICAgICAgICAgICAvLyBsb29rdXAgd2l0aG91dCB0aGUgc2hhcmVkIHByZWZpeFxuICAgICAgICAgICAgICAgICAgICBsb2NhbEVudW1OYW1lID0ganNvbi5zdWJzdHJpbmcodHlwZVsyXS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIGxldCBlbnVtTnVtYmVyID0gdHlwZVsxXVtsb2NhbEVudW1OYW1lXTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGVudW1OdW1iZXIgPT09ICd1bmRlZmluZWQnICYmIGlnbm9yZVVua25vd25GaWVsZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnQodHlwZW9mIGVudW1OdW1iZXIgPT0gXCJudW1iZXJcIiwgYFVuYWJsZSB0byBwYXJzZSBmaWVsZCAke3RoaXMuaW5mby50eXBlTmFtZX0jJHtmaWVsZE5hbWV9LCBlbnVtICR7dHlwZVswXX0gaGFzIG5vIHZhbHVlIGZvciBcIiR7anNvbn1cIi5gKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZW51bU51bWJlcjtcbiAgICAgICAgfVxuICAgICAgICBhc3NlcnRfMS5hc3NlcnQoZmFsc2UsIGBVbmFibGUgdG8gcGFyc2UgZmllbGQgJHt0aGlzLmluZm8udHlwZU5hbWV9IyR7ZmllbGROYW1lfSwgY2Fubm90IHBhcnNlIGVudW0gdmFsdWUgZnJvbSAke3R5cGVvZiBqc29ufVwiLmApO1xuICAgIH1cbiAgICBzY2FsYXIoanNvbiwgdHlwZSwgbG9uZ1R5cGUsIGZpZWxkTmFtZSkge1xuICAgICAgICBsZXQgZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgICAgIC8vIGZsb2F0LCBkb3VibGU6IEpTT04gdmFsdWUgd2lsbCBiZSBhIG51bWJlciBvciBvbmUgb2YgdGhlIHNwZWNpYWwgc3RyaW5nIHZhbHVlcyBcIk5hTlwiLCBcIkluZmluaXR5XCIsIGFuZCBcIi1JbmZpbml0eVwiLlxuICAgICAgICAgICAgICAgIC8vIEVpdGhlciBudW1iZXJzIG9yIHN0cmluZ3MgYXJlIGFjY2VwdGVkLiBFeHBvbmVudCBub3RhdGlvbiBpcyBhbHNvIGFjY2VwdGVkLlxuICAgICAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5ET1VCTEU6XG4gICAgICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkZMT0FUOlxuICAgICAgICAgICAgICAgICAgICBpZiAoanNvbiA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAuMDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24gPT09IFwiTmFOXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTnVtYmVyLk5hTjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24gPT09IFwiSW5maW5pdHlcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChqc29uID09PSBcIi1JbmZpbml0eVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE51bWJlci5ORUdBVElWRV9JTkZJTklUWTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24gPT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGUgPSBcImVtcHR5IHN0cmluZ1wiO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBqc29uID09IFwic3RyaW5nXCIgJiYganNvbi50cmltKCkubGVuZ3RoICE9PSBqc29uLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZSA9IFwiZXh0cmEgd2hpdGVzcGFjZVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBqc29uICE9IFwic3RyaW5nXCIgJiYgdHlwZW9mIGpzb24gIT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbGV0IGZsb2F0ID0gTnVtYmVyKGpzb24pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoTnVtYmVyLmlzTmFOKGZsb2F0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZSA9IFwibm90IGEgbnVtYmVyXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShmbG9hdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluZmluaXR5IGFuZCAtaW5maW5pdHkgYXJlIGhhbmRsZWQgYnkgc3RyaW5nIHJlcHJlc2VudGF0aW9uIGFib3ZlLCBzbyB0aGlzIGlzIGFuIGVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICBlID0gXCJ0b28gbGFyZ2Ugb3Igc21hbGxcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlID09IHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuRkxPQVQpXG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnRGbG9hdDMyKGZsb2F0KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZsb2F0O1xuICAgICAgICAgICAgICAgIC8vIGludDMyLCBmaXhlZDMyLCB1aW50MzI6IEpTT04gdmFsdWUgd2lsbCBiZSBhIGRlY2ltYWwgbnVtYmVyLiBFaXRoZXIgbnVtYmVycyBvciBzdHJpbmdzIGFyZSBhY2NlcHRlZC5cbiAgICAgICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuSU5UMzI6XG4gICAgICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkZJWEVEMzI6XG4gICAgICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNGSVhFRDMyOlxuICAgICAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TSU5UMzI6XG4gICAgICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlVJTlQzMjpcbiAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24gPT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGludDMyO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGpzb24gPT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIGludDMyID0ganNvbjtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoanNvbiA9PT0gXCJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIGUgPSBcImVtcHR5IHN0cmluZ1wiO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YganNvbiA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoanNvbi50cmltKCkubGVuZ3RoICE9PSBqc29uLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlID0gXCJleHRyYSB3aGl0ZXNwYWNlXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzIgPSBOdW1iZXIoanNvbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGludDMyID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5VSU5UMzIpXG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnRVSW50MzIoaW50MzIpO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnRJbnQzMihpbnQzMik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnQzMjtcbiAgICAgICAgICAgICAgICAvLyBpbnQ2NCwgZml4ZWQ2NCwgdWludDY0OiBKU09OIHZhbHVlIHdpbGwgYmUgYSBkZWNpbWFsIHN0cmluZy4gRWl0aGVyIG51bWJlcnMgb3Igc3RyaW5ncyBhcmUgYWNjZXB0ZWQuXG4gICAgICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLklOVDY0OlxuICAgICAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TRklYRUQ2NDpcbiAgICAgICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuU0lOVDY0OlxuICAgICAgICAgICAgICAgICAgICBpZiAoanNvbiA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWZsZWN0aW9uX2xvbmdfY29udmVydF8xLnJlZmxlY3Rpb25Mb25nQ29udmVydChwYl9sb25nXzEuUGJMb25nLlpFUk8sIGxvbmdUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBqc29uICE9IFwibnVtYmVyXCIgJiYgdHlwZW9mIGpzb24gIT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVmbGVjdGlvbl9sb25nX2NvbnZlcnRfMS5yZWZsZWN0aW9uTG9uZ0NvbnZlcnQocGJfbG9uZ18xLlBiTG9uZy5mcm9tKGpzb24pLCBsb25nVHlwZSk7XG4gICAgICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkZJWEVENjQ6XG4gICAgICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlVJTlQ2NDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24gPT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVmbGVjdGlvbl9sb25nX2NvbnZlcnRfMS5yZWZsZWN0aW9uTG9uZ0NvbnZlcnQocGJfbG9uZ18xLlBiVUxvbmcuWkVSTywgbG9uZ1R5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGpzb24gIT0gXCJudW1iZXJcIiAmJiB0eXBlb2YganNvbiAhPSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWZsZWN0aW9uX2xvbmdfY29udmVydF8xLnJlZmxlY3Rpb25Mb25nQ29udmVydChwYl9sb25nXzEuUGJVTG9uZy5mcm9tKGpzb24pLCBsb25nVHlwZSk7XG4gICAgICAgICAgICAgICAgLy8gYm9vbDpcbiAgICAgICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuQk9PTDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24gPT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YganNvbiAhPT0gXCJib29sZWFuXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpzb247XG4gICAgICAgICAgICAgICAgLy8gc3RyaW5nOlxuICAgICAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TVFJJTkc6XG4gICAgICAgICAgICAgICAgICAgIGlmIChqc29uID09PSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YganNvbiAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZSA9IFwiZXh0cmEgd2hpdGVzcGFjZVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudChqc29uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZSA9IFwiaW52YWxpZCBVVEY4XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ganNvbjtcbiAgICAgICAgICAgICAgICAvLyBieXRlczogSlNPTiB2YWx1ZSB3aWxsIGJlIHRoZSBkYXRhIGVuY29kZWQgYXMgYSBzdHJpbmcgdXNpbmcgc3RhbmRhcmQgYmFzZTY0IGVuY29kaW5nIHdpdGggcGFkZGluZ3MuXG4gICAgICAgICAgICAgICAgLy8gRWl0aGVyIHN0YW5kYXJkIG9yIFVSTC1zYWZlIGJhc2U2NCBlbmNvZGluZyB3aXRoL3dpdGhvdXQgcGFkZGluZ3MgYXJlIGFjY2VwdGVkLlxuICAgICAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5CWVRFUzpcbiAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24gPT09IG51bGwgfHwganNvbiA9PT0gXCJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheSgwKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBqc29uICE9PSAnc3RyaW5nJylcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYmFzZTY0XzEuYmFzZTY0ZGVjb2RlKGpzb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgZSA9IGVycm9yLm1lc3NhZ2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hc3NlcnQoZmFsc2UsIGZpZWxkTmFtZSArIChlID8gXCIgLSBcIiArIGUgOiBcIlwiKSwganNvbik7XG4gICAgfVxufVxuZXhwb3J0cy5SZWZsZWN0aW9uSnNvblJlYWRlciA9IFJlZmxlY3Rpb25Kc29uUmVhZGVyO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUmVmbGVjdGlvbkpzb25Xcml0ZXIgPSB2b2lkIDA7XG5jb25zdCBiYXNlNjRfMSA9IHJlcXVpcmUoXCIuL2Jhc2U2NFwiKTtcbmNvbnN0IHBiX2xvbmdfMSA9IHJlcXVpcmUoXCIuL3BiLWxvbmdcIik7XG5jb25zdCByZWZsZWN0aW9uX2luZm9fMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24taW5mb1wiKTtcbmNvbnN0IGFzc2VydF8xID0gcmVxdWlyZShcIi4vYXNzZXJ0XCIpO1xuLyoqXG4gKiBXcml0ZXMgcHJvdG8zIG1lc3NhZ2VzIGluIGNhbm9uaWNhbCBKU09OIGZvcm1hdCB1c2luZyByZWZsZWN0aW9uXG4gKiBpbmZvcm1hdGlvbi5cbiAqXG4gKiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzL2RvY3MvcHJvdG8zI2pzb25cbiAqL1xuY2xhc3MgUmVmbGVjdGlvbkpzb25Xcml0ZXIge1xuICAgIGNvbnN0cnVjdG9yKGluZm8pIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB0aGlzLmZpZWxkcyA9IChfYSA9IGluZm8uZmllbGRzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBbXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29udmVydHMgdGhlIG1lc3NhZ2UgdG8gYSBKU09OIG9iamVjdCwgYmFzZWQgb24gdGhlIGZpZWxkIGRlc2NyaXB0b3JzLlxuICAgICAqL1xuICAgIHdyaXRlKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QganNvbiA9IHt9LCBzb3VyY2UgPSBtZXNzYWdlO1xuICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIHRoaXMuZmllbGRzKSB7XG4gICAgICAgICAgICAvLyBmaWVsZCBpcyBub3QgcGFydCBvZiBhIG9uZW9mLCBzaW1wbHkgd3JpdGUgYXMgaXNcbiAgICAgICAgICAgIGlmICghZmllbGQub25lb2YpIHtcbiAgICAgICAgICAgICAgICBsZXQganNvblZhbHVlID0gdGhpcy5maWVsZChmaWVsZCwgc291cmNlW2ZpZWxkLmxvY2FsTmFtZV0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIGlmIChqc29uVmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAganNvbltvcHRpb25zLnVzZVByb3RvRmllbGROYW1lID8gZmllbGQubmFtZSA6IGZpZWxkLmpzb25OYW1lXSA9IGpzb25WYWx1ZTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGZpZWxkIGlzIHBhcnQgb2YgYSBvbmVvZlxuICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSBzb3VyY2VbZmllbGQub25lb2ZdO1xuICAgICAgICAgICAgaWYgKGdyb3VwLm9uZW9mS2luZCAhPT0gZmllbGQubG9jYWxOYW1lKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBub3Qgc2VsZWN0ZWQsIHNraXBcbiAgICAgICAgICAgIGNvbnN0IG9wdCA9IGZpZWxkLmtpbmQgPT0gJ3NjYWxhcicgfHwgZmllbGQua2luZCA9PSAnZW51bSdcbiAgICAgICAgICAgICAgICA/IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyksIHsgZW1pdERlZmF1bHRWYWx1ZXM6IHRydWUgfSkgOiBvcHRpb25zO1xuICAgICAgICAgICAgbGV0IGpzb25WYWx1ZSA9IHRoaXMuZmllbGQoZmllbGQsIGdyb3VwW2ZpZWxkLmxvY2FsTmFtZV0sIG9wdCk7XG4gICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnQoanNvblZhbHVlICE9PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAganNvbltvcHRpb25zLnVzZVByb3RvRmllbGROYW1lID8gZmllbGQubmFtZSA6IGZpZWxkLmpzb25OYW1lXSA9IGpzb25WYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ganNvbjtcbiAgICB9XG4gICAgZmllbGQoZmllbGQsIHZhbHVlLCBvcHRpb25zKSB7XG4gICAgICAgIGxldCBqc29uVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChmaWVsZC5raW5kID09ICdtYXAnKSB7XG4gICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnQodHlwZW9mIHZhbHVlID09IFwib2JqZWN0XCIgJiYgdmFsdWUgIT09IG51bGwpO1xuICAgICAgICAgICAgY29uc3QganNvbk9iaiA9IHt9O1xuICAgICAgICAgICAgc3dpdGNoIChmaWVsZC5WLmtpbmQpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwic2NhbGFyXCI6XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2VudHJ5S2V5LCBlbnRyeVZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbCA9IHRoaXMuc2NhbGFyKGZpZWxkLlYuVCwgZW50cnlWYWx1ZSwgZmllbGQubmFtZSwgZmFsc2UsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KHZhbCAhPT0gdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGpzb25PYmpbZW50cnlLZXkudG9TdHJpbmcoKV0gPSB2YWw7IC8vIEpTT04gc3RhbmRhcmQgYWxsb3dzIG9ubHkgKGRvdWJsZSBxdW90ZWQpIHN0cmluZyBhcyBwcm9wZXJ0eSBrZXlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwibWVzc2FnZVwiOlxuICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlVHlwZSA9IGZpZWxkLlYuVCgpO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtlbnRyeUtleSwgZW50cnlWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWwgPSB0aGlzLm1lc3NhZ2UobWVzc2FnZVR5cGUsIGVudHJ5VmFsdWUsIGZpZWxkLm5hbWUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KHZhbCAhPT0gdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGpzb25PYmpbZW50cnlLZXkudG9TdHJpbmcoKV0gPSB2YWw7IC8vIEpTT04gc3RhbmRhcmQgYWxsb3dzIG9ubHkgKGRvdWJsZSBxdW90ZWQpIHN0cmluZyBhcyBwcm9wZXJ0eSBrZXlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiZW51bVwiOlxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbnVtSW5mbyA9IGZpZWxkLlYuVCgpO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtlbnRyeUtleSwgZW50cnlWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnQoZW50cnlWYWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBlbnRyeVZhbHVlID09ICdudW1iZXInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbCA9IHRoaXMuZW51bShlbnVtSW5mbywgZW50cnlWYWx1ZSwgZmllbGQubmFtZSwgZmFsc2UsIHRydWUsIG9wdGlvbnMuZW51bUFzSW50ZWdlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnQodmFsICE9PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAganNvbk9ialtlbnRyeUtleS50b1N0cmluZygpXSA9IHZhbDsgLy8gSlNPTiBzdGFuZGFyZCBhbGxvd3Mgb25seSAoZG91YmxlIHF1b3RlZCkgc3RyaW5nIGFzIHByb3BlcnR5IGtleVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuZW1pdERlZmF1bHRWYWx1ZXMgfHwgT2JqZWN0LmtleXMoanNvbk9iaikubGVuZ3RoID4gMClcbiAgICAgICAgICAgICAgICBqc29uVmFsdWUgPSBqc29uT2JqO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGZpZWxkLnJlcGVhdCkge1xuICAgICAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KEFycmF5LmlzQXJyYXkodmFsdWUpKTtcbiAgICAgICAgICAgIGNvbnN0IGpzb25BcnIgPSBbXTtcbiAgICAgICAgICAgIHN3aXRjaCAoZmllbGQua2luZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzY2FsYXJcIjpcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsID0gdGhpcy5zY2FsYXIoZmllbGQuVCwgdmFsdWVbaV0sIGZpZWxkLm5hbWUsIGZpZWxkLm9wdCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnQodmFsICE9PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAganNvbkFyci5wdXNoKHZhbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImVudW1cIjpcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW51bUluZm8gPSBmaWVsZC5UKCk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydCh2YWx1ZVtpXSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiB2YWx1ZVtpXSA9PSAnbnVtYmVyJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWwgPSB0aGlzLmVudW0oZW51bUluZm8sIHZhbHVlW2ldLCBmaWVsZC5uYW1lLCBmaWVsZC5vcHQsIHRydWUsIG9wdGlvbnMuZW51bUFzSW50ZWdlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnQodmFsICE9PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAganNvbkFyci5wdXNoKHZhbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm1lc3NhZ2VcIjpcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZVR5cGUgPSBmaWVsZC5UKCk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbCA9IHRoaXMubWVzc2FnZShtZXNzYWdlVHlwZSwgdmFsdWVbaV0sIGZpZWxkLm5hbWUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KHZhbCAhPT0gdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGpzb25BcnIucHVzaCh2YWwpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gYWRkIGNvbnZlcnRlZCBhcnJheSB0byBqc29uIG91dHB1dFxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuZW1pdERlZmF1bHRWYWx1ZXMgfHwganNvbkFyci5sZW5ndGggPiAwIHx8IG9wdGlvbnMuZW1pdERlZmF1bHRWYWx1ZXMpXG4gICAgICAgICAgICAgICAganNvblZhbHVlID0ganNvbkFycjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHN3aXRjaCAoZmllbGQua2luZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzY2FsYXJcIjpcbiAgICAgICAgICAgICAgICAgICAganNvblZhbHVlID0gdGhpcy5zY2FsYXIoZmllbGQuVCwgdmFsdWUsIGZpZWxkLm5hbWUsIGZpZWxkLm9wdCwgb3B0aW9ucy5lbWl0RGVmYXVsdFZhbHVlcyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJlbnVtXCI6XG4gICAgICAgICAgICAgICAgICAgIGpzb25WYWx1ZSA9IHRoaXMuZW51bShmaWVsZC5UKCksIHZhbHVlLCBmaWVsZC5uYW1lLCBmaWVsZC5vcHQsIG9wdGlvbnMuZW1pdERlZmF1bHRWYWx1ZXMsIG9wdGlvbnMuZW51bUFzSW50ZWdlcik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJtZXNzYWdlXCI6XG4gICAgICAgICAgICAgICAgICAgIGpzb25WYWx1ZSA9IHRoaXMubWVzc2FnZShmaWVsZC5UKCksIHZhbHVlLCBmaWVsZC5uYW1lLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGpzb25WYWx1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBgbnVsbGAgYXMgdGhlIGRlZmF1bHQgZm9yIGdvb2dsZS5wcm90b2J1Zi5OdWxsVmFsdWUuXG4gICAgICovXG4gICAgZW51bSh0eXBlLCB2YWx1ZSwgZmllbGROYW1lLCBvcHRpb25hbCwgZW1pdERlZmF1bHRWYWx1ZXMsIGVudW1Bc0ludGVnZXIpIHtcbiAgICAgICAgaWYgKHR5cGVbMF0gPT0gJ2dvb2dsZS5wcm90b2J1Zi5OdWxsVmFsdWUnKVxuICAgICAgICAgICAgcmV0dXJuICFlbWl0RGVmYXVsdFZhbHVlcyAmJiAhb3B0aW9uYWwgPyB1bmRlZmluZWQgOiBudWxsO1xuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KG9wdGlvbmFsKTtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlID09PSAwICYmICFlbWl0RGVmYXVsdFZhbHVlcyAmJiAhb3B0aW9uYWwpXG4gICAgICAgICAgICAvLyB3ZSByZXF1aXJlIDAgdG8gYmUgZGVmYXVsdCB2YWx1ZSBmb3IgYWxsIGVudW1zXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICBhc3NlcnRfMS5hc3NlcnQodHlwZW9mIHZhbHVlID09ICdudW1iZXInKTtcbiAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KE51bWJlci5pc0ludGVnZXIodmFsdWUpKTtcbiAgICAgICAgaWYgKGVudW1Bc0ludGVnZXIgfHwgIXR5cGVbMV0uaGFzT3duUHJvcGVydHkodmFsdWUpKVxuICAgICAgICAgICAgLy8gaWYgd2UgZG9uJ3Qgbm93IHRoZSBlbnVtIHZhbHVlLCBqdXN0IHJldHVybiB0aGUgbnVtYmVyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIGlmICh0eXBlWzJdKVxuICAgICAgICAgICAgLy8gcmVzdG9yZSB0aGUgZHJvcHBlZCBwcmVmaXhcbiAgICAgICAgICAgIHJldHVybiB0eXBlWzJdICsgdHlwZVsxXVt2YWx1ZV07XG4gICAgICAgIHJldHVybiB0eXBlWzFdW3ZhbHVlXTtcbiAgICB9XG4gICAgbWVzc2FnZSh0eXBlLCB2YWx1ZSwgZmllbGROYW1lLCBvcHRpb25zKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMuZW1pdERlZmF1bHRWYWx1ZXMgPyBudWxsIDogdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gdHlwZS5pbnRlcm5hbEpzb25Xcml0ZSh2YWx1ZSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIHNjYWxhcih0eXBlLCB2YWx1ZSwgZmllbGROYW1lLCBvcHRpb25hbCwgZW1pdERlZmF1bHRWYWx1ZXMpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydChvcHRpb25hbCk7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVkID0gZW1pdERlZmF1bHRWYWx1ZXMgfHwgb3B0aW9uYWw7XG4gICAgICAgIC8vIG5vaW5zcGVjdGlvbiBGYWxsVGhyb3VnaEluU3dpdGNoU3RhdGVtZW50SlNcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICAvLyBpbnQzMiwgZml4ZWQzMiwgdWludDMyOiBKU09OIHZhbHVlIHdpbGwgYmUgYSBkZWNpbWFsIG51bWJlci4gRWl0aGVyIG51bWJlcnMgb3Igc3RyaW5ncyBhcmUgYWNjZXB0ZWQuXG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuSU5UMzI6XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuU0ZJWEVEMzI6XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuU0lOVDMyOlxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gMClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVkID8gMCA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnRJbnQzMih2YWx1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkZJWEVEMzI6XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuVUlOVDMyOlxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gMClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVkID8gMCA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnRVSW50MzIodmFsdWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIC8vIGZsb2F0LCBkb3VibGU6IEpTT04gdmFsdWUgd2lsbCBiZSBhIG51bWJlciBvciBvbmUgb2YgdGhlIHNwZWNpYWwgc3RyaW5nIHZhbHVlcyBcIk5hTlwiLCBcIkluZmluaXR5XCIsIGFuZCBcIi1JbmZpbml0eVwiLlxuICAgICAgICAgICAgLy8gRWl0aGVyIG51bWJlcnMgb3Igc3RyaW5ncyBhcmUgYWNjZXB0ZWQuIEV4cG9uZW50IG5vdGF0aW9uIGlzIGFsc28gYWNjZXB0ZWQuXG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuRkxPQVQ6XG4gICAgICAgICAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0RmxvYXQzMih2YWx1ZSk7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuRE9VQkxFOlxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gMClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVkID8gMCA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnQodHlwZW9mIHZhbHVlID09ICdudW1iZXInKTtcbiAgICAgICAgICAgICAgICBpZiAoTnVtYmVyLmlzTmFOKHZhbHVlKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdOYU4nO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ0luZmluaXR5JztcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICctSW5maW5pdHknO1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIC8vIHN0cmluZzpcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TVFJJTkc6XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSBcIlwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWQgPyAnJyA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnQodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICAvLyBib29sOlxuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkJPT0w6XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVkID8gZmFsc2UgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KHR5cGVvZiB2YWx1ZSA9PSAnYm9vbGVhbicpO1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIC8vIEpTT04gdmFsdWUgd2lsbCBiZSBhIGRlY2ltYWwgc3RyaW5nLiBFaXRoZXIgbnVtYmVycyBvciBzdHJpbmdzIGFyZSBhY2NlcHRlZC5cbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5VSU5UNjQ6XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuRklYRUQ2NDpcbiAgICAgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnQodHlwZW9mIHZhbHVlID09ICdudW1iZXInIHx8IHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyB8fCB0eXBlb2YgdmFsdWUgPT0gJ2JpZ2ludCcpO1xuICAgICAgICAgICAgICAgIGxldCB1bG9uZyA9IHBiX2xvbmdfMS5QYlVMb25nLmZyb20odmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmICh1bG9uZy5pc1plcm8oKSAmJiAhZWQpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVsb25nLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAvLyBKU09OIHZhbHVlIHdpbGwgYmUgYSBkZWNpbWFsIHN0cmluZy4gRWl0aGVyIG51bWJlcnMgb3Igc3RyaW5ncyBhcmUgYWNjZXB0ZWQuXG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuSU5UNjQ6XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuU0ZJWEVENjQ6XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuU0lOVDY0OlxuICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydCh0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgfHwgdHlwZW9mIHZhbHVlID09ICdzdHJpbmcnIHx8IHR5cGVvZiB2YWx1ZSA9PSAnYmlnaW50Jyk7XG4gICAgICAgICAgICAgICAgbGV0IGxvbmcgPSBwYl9sb25nXzEuUGJMb25nLmZyb20odmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmIChsb25nLmlzWmVybygpICYmICFlZClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gbG9uZy50b1N0cmluZygpO1xuICAgICAgICAgICAgLy8gYnl0ZXM6IEpTT04gdmFsdWUgd2lsbCBiZSB0aGUgZGF0YSBlbmNvZGVkIGFzIGEgc3RyaW5nIHVzaW5nIHN0YW5kYXJkIGJhc2U2NCBlbmNvZGluZyB3aXRoIHBhZGRpbmdzLlxuICAgICAgICAgICAgLy8gRWl0aGVyIHN0YW5kYXJkIG9yIFVSTC1zYWZlIGJhc2U2NCBlbmNvZGluZyB3aXRoL3dpdGhvdXQgcGFkZGluZ3MgYXJlIGFjY2VwdGVkLlxuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkJZVEVTOlxuICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydCh2YWx1ZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpO1xuICAgICAgICAgICAgICAgIGlmICghdmFsdWUuYnl0ZUxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVkID8gXCJcIiA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYmFzZTY0XzEuYmFzZTY0ZW5jb2RlKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuUmVmbGVjdGlvbkpzb25Xcml0ZXIgPSBSZWZsZWN0aW9uSnNvbldyaXRlcjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlZmxlY3Rpb25TY2FsYXJEZWZhdWx0ID0gdm9pZCAwO1xuY29uc3QgcmVmbGVjdGlvbl9pbmZvXzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLWluZm9cIik7XG5jb25zdCByZWZsZWN0aW9uX2xvbmdfY29udmVydF8xID0gcmVxdWlyZShcIi4vcmVmbGVjdGlvbi1sb25nLWNvbnZlcnRcIik7XG5jb25zdCBwYl9sb25nXzEgPSByZXF1aXJlKFwiLi9wYi1sb25nXCIpO1xuLyoqXG4gKiBDcmVhdGVzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciBhIHNjYWxhciB0eXBlLlxuICovXG5mdW5jdGlvbiByZWZsZWN0aW9uU2NhbGFyRGVmYXVsdCh0eXBlLCBsb25nVHlwZSA9IHJlZmxlY3Rpb25faW5mb18xLkxvbmdUeXBlLlNUUklORykge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuQk9PTDpcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlVJTlQ2NDpcbiAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkZJWEVENjQ6XG4gICAgICAgICAgICByZXR1cm4gcmVmbGVjdGlvbl9sb25nX2NvbnZlcnRfMS5yZWZsZWN0aW9uTG9uZ0NvbnZlcnQocGJfbG9uZ18xLlBiVUxvbmcuWkVSTywgbG9uZ1R5cGUpO1xuICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuSU5UNjQ6XG4gICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TRklYRUQ2NDpcbiAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNJTlQ2NDpcbiAgICAgICAgICAgIHJldHVybiByZWZsZWN0aW9uX2xvbmdfY29udmVydF8xLnJlZmxlY3Rpb25Mb25nQ29udmVydChwYl9sb25nXzEuUGJMb25nLlpFUk8sIGxvbmdUeXBlKTtcbiAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkRPVUJMRTpcbiAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkZMT0FUOlxuICAgICAgICAgICAgcmV0dXJuIDAuMDtcbiAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkJZVEVTOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KDApO1xuICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuU1RSSU5HOlxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAvLyBjYXNlIFNjYWxhclR5cGUuSU5UMzI6XG4gICAgICAgICAgICAvLyBjYXNlIFNjYWxhclR5cGUuVUlOVDMyOlxuICAgICAgICAgICAgLy8gY2FzZSBTY2FsYXJUeXBlLlNJTlQzMjpcbiAgICAgICAgICAgIC8vIGNhc2UgU2NhbGFyVHlwZS5GSVhFRDMyOlxuICAgICAgICAgICAgLy8gY2FzZSBTY2FsYXJUeXBlLlNGSVhFRDMyOlxuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxufVxuZXhwb3J0cy5yZWZsZWN0aW9uU2NhbGFyRGVmYXVsdCA9IHJlZmxlY3Rpb25TY2FsYXJEZWZhdWx0O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUmVmbGVjdGlvbkJpbmFyeVJlYWRlciA9IHZvaWQgMDtcbmNvbnN0IGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMSA9IHJlcXVpcmUoXCIuL2JpbmFyeS1mb3JtYXQtY29udHJhY3RcIik7XG5jb25zdCByZWZsZWN0aW9uX2luZm9fMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24taW5mb1wiKTtcbmNvbnN0IHJlZmxlY3Rpb25fbG9uZ19jb252ZXJ0XzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLWxvbmctY29udmVydFwiKTtcbmNvbnN0IHJlZmxlY3Rpb25fc2NhbGFyX2RlZmF1bHRfMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24tc2NhbGFyLWRlZmF1bHRcIik7XG4vKipcbiAqIFJlYWRzIHByb3RvMyBtZXNzYWdlcyBpbiBiaW5hcnkgZm9ybWF0IHVzaW5nIHJlZmxlY3Rpb24gaW5mb3JtYXRpb24uXG4gKlxuICogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL2VuY29kaW5nXG4gKi9cbmNsYXNzIFJlZmxlY3Rpb25CaW5hcnlSZWFkZXIge1xuICAgIGNvbnN0cnVjdG9yKGluZm8pIHtcbiAgICAgICAgdGhpcy5pbmZvID0gaW5mbztcbiAgICB9XG4gICAgcHJlcGFyZSgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoIXRoaXMuZmllbGROb1RvRmllbGQpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkc0lucHV0ID0gKF9hID0gdGhpcy5pbmZvLmZpZWxkcykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogW107XG4gICAgICAgICAgICB0aGlzLmZpZWxkTm9Ub0ZpZWxkID0gbmV3IE1hcChmaWVsZHNJbnB1dC5tYXAoZmllbGQgPT4gW2ZpZWxkLm5vLCBmaWVsZF0pKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWFkcyBhIG1lc3NhZ2UgZnJvbSBiaW5hcnkgZm9ybWF0IGludG8gdGhlIHRhcmdldCBtZXNzYWdlLlxuICAgICAqXG4gICAgICogUmVwZWF0ZWQgZmllbGRzIGFyZSBhcHBlbmRlZC4gTWFwIGVudHJpZXMgYXJlIGFkZGVkLCBvdmVyd3JpdGluZ1xuICAgICAqIGV4aXN0aW5nIGtleXMuXG4gICAgICpcbiAgICAgKiBJZiBhIG1lc3NhZ2UgZmllbGQgaXMgYWxyZWFkeSBwcmVzZW50LCBpdCB3aWxsIGJlIG1lcmdlZCB3aXRoIHRoZVxuICAgICAqIG5ldyBkYXRhLlxuICAgICAqL1xuICAgIHJlYWQocmVhZGVyLCBtZXNzYWdlLCBvcHRpb25zLCBsZW5ndGgpIHtcbiAgICAgICAgdGhpcy5wcmVwYXJlKCk7XG4gICAgICAgIGNvbnN0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICAvLyByZWFkIHRoZSB0YWcgYW5kIGZpbmQgdGhlIGZpZWxkXG4gICAgICAgICAgICBjb25zdCBbZmllbGRObywgd2lyZVR5cGVdID0gcmVhZGVyLnRhZygpLCBmaWVsZCA9IHRoaXMuZmllbGROb1RvRmllbGQuZ2V0KGZpZWxkTm8pO1xuICAgICAgICAgICAgaWYgKCFmaWVsZCkge1xuICAgICAgICAgICAgICAgIGxldCB1ID0gb3B0aW9ucy5yZWFkVW5rbm93bkZpZWxkO1xuICAgICAgICAgICAgICAgIGlmICh1ID09IFwidGhyb3dcIilcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGZpZWxkICR7ZmllbGROb30gKHdpcmUgdHlwZSAke3dpcmVUeXBlfSkgZm9yICR7dGhpcy5pbmZvLnR5cGVOYW1lfWApO1xuICAgICAgICAgICAgICAgIGxldCBkID0gcmVhZGVyLnNraXAod2lyZVR5cGUpO1xuICAgICAgICAgICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgKHUgPT09IHRydWUgPyBiaW5hcnlfZm9ybWF0X2NvbnRyYWN0XzEuVW5rbm93bkZpZWxkSGFuZGxlci5vblJlYWQgOiB1KSh0aGlzLmluZm8udHlwZU5hbWUsIG1lc3NhZ2UsIGZpZWxkTm8sIHdpcmVUeXBlLCBkKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHRhcmdldCBvYmplY3QgZm9yIHRoZSBmaWVsZCB3ZSBhcmUgcmVhZGluZ1xuICAgICAgICAgICAgbGV0IHRhcmdldCA9IG1lc3NhZ2UsIHJlcGVhdGVkID0gZmllbGQucmVwZWF0LCBsb2NhbE5hbWUgPSBmaWVsZC5sb2NhbE5hbWU7XG4gICAgICAgICAgICAvLyBpZiBmaWVsZCBpcyBtZW1iZXIgb2Ygb25lb2YgQURULCB1c2UgQURUIGFzIHRhcmdldFxuICAgICAgICAgICAgaWYgKGZpZWxkLm9uZW9mKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0W2ZpZWxkLm9uZW9mXTtcbiAgICAgICAgICAgICAgICAvLyBpZiBvdGhlciBvbmVvZiBtZW1iZXIgc2VsZWN0ZWQsIHNldCBuZXcgQURUXG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldC5vbmVvZktpbmQgIT09IGxvY2FsTmFtZSlcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gbWVzc2FnZVtmaWVsZC5vbmVvZl0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvbmVvZktpbmQ6IGxvY2FsTmFtZVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gd2UgaGF2ZSBoYW5kbGVkIG9uZW9mIGFib3ZlLCB3ZSBqdXN0IGhhdmUgcmVhZCB0aGUgdmFsdWUgaW50byBgdGFyZ2V0W2xvY2FsTmFtZV1gXG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkLmtpbmQpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwic2NhbGFyXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcImVudW1cIjpcbiAgICAgICAgICAgICAgICAgICAgbGV0IFQgPSBmaWVsZC5raW5kID09IFwiZW51bVwiID8gcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5JTlQzMiA6IGZpZWxkLlQ7XG4gICAgICAgICAgICAgICAgICAgIGxldCBMID0gZmllbGQua2luZCA9PSBcInNjYWxhclwiID8gZmllbGQuTCA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcGVhdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYXJyID0gdGFyZ2V0W2xvY2FsTmFtZV07IC8vIHNhZmUgdG8gYXNzdW1lIHByZXNlbmNlIG9mIGFycmF5LCBvbmVvZiBjYW5ub3QgY29udGFpbiByZXBlYXRlZCB2YWx1ZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3aXJlVHlwZSA9PSBiaW5hcnlfZm9ybWF0X2NvbnRyYWN0XzEuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkICYmIFQgIT0gcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TVFJJTkcgJiYgVCAhPSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkJZVEVTKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGUgPSByZWFkZXIudWludDMyKCkgKyByZWFkZXIucG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2godGhpcy5zY2FsYXIocmVhZGVyLCBULCBMKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2godGhpcy5zY2FsYXIocmVhZGVyLCBULCBMKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W2xvY2FsTmFtZV0gPSB0aGlzLnNjYWxhcihyZWFkZXIsIFQsIEwpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwibWVzc2FnZVwiOlxuICAgICAgICAgICAgICAgICAgICBpZiAocmVwZWF0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhcnIgPSB0YXJnZXRbbG9jYWxOYW1lXTsgLy8gc2FmZSB0byBhc3N1bWUgcHJlc2VuY2Ugb2YgYXJyYXksIG9uZW9mIGNhbm5vdCBjb250YWluIHJlcGVhdGVkIHZhbHVlc1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG1zZyA9IGZpZWxkLlQoKS5pbnRlcm5hbEJpbmFyeVJlYWQocmVhZGVyLCByZWFkZXIudWludDMyKCksIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2gobXNnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRbbG9jYWxOYW1lXSA9IGZpZWxkLlQoKS5pbnRlcm5hbEJpbmFyeVJlYWQocmVhZGVyLCByZWFkZXIudWludDMyKCksIG9wdGlvbnMsIHRhcmdldFtsb2NhbE5hbWVdKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm1hcFwiOlxuICAgICAgICAgICAgICAgICAgICBsZXQgW21hcEtleSwgbWFwVmFsXSA9IHRoaXMubWFwRW50cnkoZmllbGQsIHJlYWRlciwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHNhZmUgdG8gYXNzdW1lIHByZXNlbmNlIG9mIG1hcCBvYmplY3QsIG9uZW9mIGNhbm5vdCBjb250YWluIHJlcGVhdGVkIHZhbHVlc1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRbbG9jYWxOYW1lXVttYXBLZXldID0gbWFwVmFsO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWFkIGEgbWFwIGZpZWxkLCBleHBlY3Rpbmcga2V5IGZpZWxkID0gMSwgdmFsdWUgZmllbGQgPSAyXG4gICAgICovXG4gICAgbWFwRW50cnkoZmllbGQsIHJlYWRlciwgb3B0aW9ucykge1xuICAgICAgICBsZXQgbGVuZ3RoID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgICBsZXQgZW5kID0gcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICAgICAgbGV0IGtleSA9IHVuZGVmaW5lZDsgLy8gamF2YXNjcmlwdCBvbmx5IGFsbG93cyBudW1iZXIgb3Igc3RyaW5nIGZvciBvYmplY3QgcHJvcGVydGllc1xuICAgICAgICBsZXQgdmFsID0gdW5kZWZpbmVkO1xuICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgbGV0IFtmaWVsZE5vLCB3aXJlVHlwZV0gPSByZWFkZXIudGFnKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkTm8pIHtcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZC5LID09IHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuQk9PTClcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IHJlYWRlci5ib29sKCkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9uZyB0eXBlcyBhcmUgcmVhZCBhcyBzdHJpbmcsIG51bWJlciB0eXBlcyBhcmUgb2theSBhcyBudW1iZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IHRoaXMuc2NhbGFyKHJlYWRlciwgZmllbGQuSywgcmVmbGVjdGlvbl9pbmZvXzEuTG9uZ1R5cGUuU1RSSU5HKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGZpZWxkLlYua2luZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcInNjYWxhclwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IHRoaXMuc2NhbGFyKHJlYWRlciwgZmllbGQuVi5ULCBmaWVsZC5WLkwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImVudW1cIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSByZWFkZXIuaW50MzIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJtZXNzYWdlXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gZmllbGQuVi5UKCkuaW50ZXJuYWxCaW5hcnlSZWFkKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZmllbGQgJHtmaWVsZE5vfSAod2lyZSB0eXBlICR7d2lyZVR5cGV9KSBpbiBtYXAgZW50cnkgZm9yICR7dGhpcy5pbmZvLnR5cGVOYW1lfSMke2ZpZWxkLm5hbWV9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsZXQga2V5UmF3ID0gcmVmbGVjdGlvbl9zY2FsYXJfZGVmYXVsdF8xLnJlZmxlY3Rpb25TY2FsYXJEZWZhdWx0KGZpZWxkLkspO1xuICAgICAgICAgICAga2V5ID0gZmllbGQuSyA9PSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkJPT0wgPyBrZXlSYXcudG9TdHJpbmcoKSA6IGtleVJhdztcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkLlYua2luZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzY2FsYXJcIjpcbiAgICAgICAgICAgICAgICAgICAgdmFsID0gcmVmbGVjdGlvbl9zY2FsYXJfZGVmYXVsdF8xLnJlZmxlY3Rpb25TY2FsYXJEZWZhdWx0KGZpZWxkLlYuVCwgZmllbGQuVi5MKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImVudW1cIjpcbiAgICAgICAgICAgICAgICAgICAgdmFsID0gMDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm1lc3NhZ2VcIjpcbiAgICAgICAgICAgICAgICAgICAgdmFsID0gZmllbGQuVi5UKCkuY3JlYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICByZXR1cm4gW2tleSwgdmFsXTtcbiAgICB9XG4gICAgc2NhbGFyKHJlYWRlciwgdHlwZSwgbG9uZ1R5cGUpIHtcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuSU5UMzI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlYWRlci5pbnQzMigpO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNUUklORzpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkJPT0w6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlYWRlci5ib29sKCk7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuRE9VQkxFOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWFkZXIuZG91YmxlKCk7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuRkxPQVQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlYWRlci5mbG9hdCgpO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLklOVDY0OlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZsZWN0aW9uX2xvbmdfY29udmVydF8xLnJlZmxlY3Rpb25Mb25nQ29udmVydChyZWFkZXIuaW50NjQoKSwgbG9uZ1R5cGUpO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlVJTlQ2NDpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmbGVjdGlvbl9sb25nX2NvbnZlcnRfMS5yZWZsZWN0aW9uTG9uZ0NvbnZlcnQocmVhZGVyLnVpbnQ2NCgpLCBsb25nVHlwZSk7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuRklYRUQ2NDpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmbGVjdGlvbl9sb25nX2NvbnZlcnRfMS5yZWZsZWN0aW9uTG9uZ0NvbnZlcnQocmVhZGVyLmZpeGVkNjQoKSwgbG9uZ1R5cGUpO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkZJWEVEMzI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlYWRlci5maXhlZDMyKCk7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuQllURVM6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlYWRlci5ieXRlcygpO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlVJTlQzMjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNGSVhFRDMyOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWFkZXIuc2ZpeGVkMzIoKTtcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TRklYRUQ2NDpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmbGVjdGlvbl9sb25nX2NvbnZlcnRfMS5yZWZsZWN0aW9uTG9uZ0NvbnZlcnQocmVhZGVyLnNmaXhlZDY0KCksIGxvbmdUeXBlKTtcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TSU5UMzI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlYWRlci5zaW50MzIoKTtcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TSU5UNjQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmxlY3Rpb25fbG9uZ19jb252ZXJ0XzEucmVmbGVjdGlvbkxvbmdDb252ZXJ0KHJlYWRlci5zaW50NjQoKSwgbG9uZ1R5cGUpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5SZWZsZWN0aW9uQmluYXJ5UmVhZGVyID0gUmVmbGVjdGlvbkJpbmFyeVJlYWRlcjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlJlZmxlY3Rpb25CaW5hcnlXcml0ZXIgPSB2b2lkIDA7XG5jb25zdCBiaW5hcnlfZm9ybWF0X2NvbnRyYWN0XzEgPSByZXF1aXJlKFwiLi9iaW5hcnktZm9ybWF0LWNvbnRyYWN0XCIpO1xuY29uc3QgcmVmbGVjdGlvbl9pbmZvXzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLWluZm9cIik7XG5jb25zdCBhc3NlcnRfMSA9IHJlcXVpcmUoXCIuL2Fzc2VydFwiKTtcbmNvbnN0IHBiX2xvbmdfMSA9IHJlcXVpcmUoXCIuL3BiLWxvbmdcIik7XG4vKipcbiAqIFdyaXRlcyBwcm90bzMgbWVzc2FnZXMgaW4gYmluYXJ5IGZvcm1hdCB1c2luZyByZWZsZWN0aW9uIGluZm9ybWF0aW9uLlxuICpcbiAqIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvZG9jcy9lbmNvZGluZ1xuICovXG5jbGFzcyBSZWZsZWN0aW9uQmluYXJ5V3JpdGVyIHtcbiAgICBjb25zdHJ1Y3RvcihpbmZvKSB7XG4gICAgICAgIHRoaXMuaW5mbyA9IGluZm87XG4gICAgfVxuICAgIHByZXBhcmUoKSB7XG4gICAgICAgIGlmICghdGhpcy5maWVsZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkc0lucHV0ID0gdGhpcy5pbmZvLmZpZWxkcyA/IHRoaXMuaW5mby5maWVsZHMuY29uY2F0KCkgOiBbXTtcbiAgICAgICAgICAgIHRoaXMuZmllbGRzID0gZmllbGRzSW5wdXQuc29ydCgoYSwgYikgPT4gYS5ubyAtIGIubm8pO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyaXRlcyB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZm9ybWF0LlxuICAgICAqL1xuICAgIHdyaXRlKG1lc3NhZ2UsIHdyaXRlciwgb3B0aW9ucykge1xuICAgICAgICB0aGlzLnByZXBhcmUoKTtcbiAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiB0aGlzLmZpZWxkcykge1xuICAgICAgICAgICAgbGV0IHZhbHVlLCAvLyB0aGlzIHdpbGwgYmUgb3VyIGZpZWxkIHZhbHVlLCB3aGV0aGVyIGl0IGlzIG1lbWJlciBvZiBhIG9uZW9mIG9yIG5vdFxuICAgICAgICAgICAgZW1pdERlZmF1bHQsIC8vIHdoZXRoZXIgd2UgZW1pdCB0aGUgZGVmYXVsdCB2YWx1ZSAob25seSB0cnVlIGZvciBvbmVvZiBtZW1iZXJzKVxuICAgICAgICAgICAgcmVwZWF0ZWQgPSBmaWVsZC5yZXBlYXQsIGxvY2FsTmFtZSA9IGZpZWxkLmxvY2FsTmFtZTtcbiAgICAgICAgICAgIC8vIGhhbmRsZSBvbmVvZiBBRFRcbiAgICAgICAgICAgIGlmIChmaWVsZC5vbmVvZikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gbWVzc2FnZVtmaWVsZC5vbmVvZl07XG4gICAgICAgICAgICAgICAgaWYgKGdyb3VwLm9uZW9mS2luZCAhPT0gbG9jYWxOYW1lKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgLy8gaWYgZmllbGQgaXMgbm90IHNlbGVjdGVkLCBza2lwXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBncm91cFtsb2NhbE5hbWVdO1xuICAgICAgICAgICAgICAgIGVtaXREZWZhdWx0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gbWVzc2FnZVtsb2NhbE5hbWVdO1xuICAgICAgICAgICAgICAgIGVtaXREZWZhdWx0ID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB3ZSBoYXZlIGhhbmRsZWQgb25lb2YgYWJvdmUuIHdlIGp1c3QgaGF2ZSB0byBob25vciBgZW1pdERlZmF1bHRgLlxuICAgICAgICAgICAgc3dpdGNoIChmaWVsZC5raW5kKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNjYWxhclwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJlbnVtXCI6XG4gICAgICAgICAgICAgICAgICAgIGxldCBUID0gZmllbGQua2luZCA9PSBcImVudW1cIiA/IHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuSU5UMzIgOiBmaWVsZC5UO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVwZWF0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydChBcnJheS5pc0FycmF5KHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVwZWF0ZWQgPT0gcmVmbGVjdGlvbl9pbmZvXzEuUmVwZWF0VHlwZS5QQUNLRUQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWNrZWQod3JpdGVyLCBULCBmaWVsZC5ubywgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB2YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY2FsYXIod3JpdGVyLCBULCBmaWVsZC5ubywgaXRlbSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydChmaWVsZC5vcHQpO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjYWxhcih3cml0ZXIsIFQsIGZpZWxkLm5vLCB2YWx1ZSwgZW1pdERlZmF1bHQgfHwgZmllbGQub3B0KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm1lc3NhZ2VcIjpcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcGVhdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnQoQXJyYXkuaXNBcnJheSh2YWx1ZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSh3cml0ZXIsIG9wdGlvbnMsIGZpZWxkLlQoKSwgZmllbGQubm8sIGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlKHdyaXRlciwgb3B0aW9ucywgZmllbGQuVCgpLCBmaWVsZC5ubywgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJtYXBcIjpcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBPYmplY3QuZW50cmllcyh2YWx1ZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcEVudHJ5KHdyaXRlciwgb3B0aW9ucywgZmllbGQsIGtleSwgdmFsKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHUgPSBvcHRpb25zLndyaXRlVW5rbm93bkZpZWxkcztcbiAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgKHUgPT09IHRydWUgPyBiaW5hcnlfZm9ybWF0X2NvbnRyYWN0XzEuVW5rbm93bkZpZWxkSGFuZGxlci5vbldyaXRlIDogdSkodGhpcy5pbmZvLnR5cGVOYW1lLCBtZXNzYWdlLCB3cml0ZXIpO1xuICAgIH1cbiAgICBtYXBFbnRyeSh3cml0ZXIsIG9wdGlvbnMsIGZpZWxkLCBrZXksIHZhbHVlKSB7XG4gICAgICAgIHdyaXRlci50YWcoZmllbGQubm8sIGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpO1xuICAgICAgICB3cml0ZXIuZm9yaygpO1xuICAgICAgICAvLyBqYXZhc2NyaXB0IG9ubHkgYWxsb3dzIG51bWJlciBvciBzdHJpbmcgZm9yIG9iamVjdCBwcm9wZXJ0aWVzXG4gICAgICAgIC8vIHdlIGNvbnZlcnQgZnJvbSBvdXIgcmVwcmVzZW50YXRpb24gdG8gdGhlIHByb3RvYnVmIHR5cGVcbiAgICAgICAgbGV0IGtleVZhbHVlID0ga2V5O1xuICAgICAgICBzd2l0Y2ggKGZpZWxkLkspIHtcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5JTlQzMjpcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5GSVhFRDMyOlxuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlVJTlQzMjpcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TRklYRUQzMjpcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TSU5UMzI6XG4gICAgICAgICAgICAgICAga2V5VmFsdWUgPSBOdW1iZXIucGFyc2VJbnQoa2V5KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5CT09MOlxuICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydChrZXkgPT0gJ3RydWUnIHx8IGtleSA9PSAnZmFsc2UnKTtcbiAgICAgICAgICAgICAgICBrZXlWYWx1ZSA9IGtleSA9PSAndHJ1ZSc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgLy8gd3JpdGUga2V5LCBleHBlY3Rpbmcga2V5IGZpZWxkIG51bWJlciA9IDFcbiAgICAgICAgdGhpcy5zY2FsYXIod3JpdGVyLCBmaWVsZC5LLCAxLCBrZXlWYWx1ZSwgdHJ1ZSk7XG4gICAgICAgIC8vIHdyaXRlIHZhbHVlLCBleHBlY3RpbmcgdmFsdWUgZmllbGQgbnVtYmVyID0gMlxuICAgICAgICBzd2l0Y2ggKGZpZWxkLlYua2luZCkge1xuICAgICAgICAgICAgY2FzZSAnc2NhbGFyJzpcbiAgICAgICAgICAgICAgICB0aGlzLnNjYWxhcih3cml0ZXIsIGZpZWxkLlYuVCwgMiwgdmFsdWUsIHRydWUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZW51bSc6XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsYXIod3JpdGVyLCByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLklOVDMyLCAyLCB2YWx1ZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtZXNzYWdlJzpcbiAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2Uod3JpdGVyLCBvcHRpb25zLCBmaWVsZC5WLlQoKSwgMiwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHdyaXRlci5qb2luKCk7XG4gICAgfVxuICAgIG1lc3NhZ2Uod3JpdGVyLCBvcHRpb25zLCBoYW5kbGVyLCBmaWVsZE5vLCB2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaGFuZGxlci5pbnRlcm5hbEJpbmFyeVdyaXRlKHZhbHVlLCB3cml0ZXIudGFnKGZpZWxkTm8sIGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLmZvcmsoKSwgb3B0aW9ucyk7XG4gICAgICAgIHdyaXRlci5qb2luKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyaXRlIGEgc2luZ2xlIHNjYWxhciB2YWx1ZS5cbiAgICAgKi9cbiAgICBzY2FsYXIod3JpdGVyLCB0eXBlLCBmaWVsZE5vLCB2YWx1ZSwgZW1pdERlZmF1bHQpIHtcbiAgICAgICAgbGV0IFt3aXJlVHlwZSwgbWV0aG9kLCBpc0RlZmF1bHRdID0gdGhpcy5zY2FsYXJJbmZvKHR5cGUsIHZhbHVlKTtcbiAgICAgICAgaWYgKCFpc0RlZmF1bHQgfHwgZW1pdERlZmF1bHQpIHtcbiAgICAgICAgICAgIHdyaXRlci50YWcoZmllbGRObywgd2lyZVR5cGUpO1xuICAgICAgICAgICAgd3JpdGVyW21ldGhvZF0odmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyaXRlIGFuIGFycmF5IG9mIHNjYWxhciB2YWx1ZXMgaW4gcGFja2VkIGZvcm1hdC5cbiAgICAgKi9cbiAgICBwYWNrZWQod3JpdGVyLCB0eXBlLCBmaWVsZE5vLCB2YWx1ZSkge1xuICAgICAgICBpZiAoIXZhbHVlLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KHR5cGUgIT09IHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuQllURVMgJiYgdHlwZSAhPT0gcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TVFJJTkcpO1xuICAgICAgICAvLyB3cml0ZSB0YWdcbiAgICAgICAgd3JpdGVyLnRhZyhmaWVsZE5vLCBiaW5hcnlfZm9ybWF0X2NvbnRyYWN0XzEuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKTtcbiAgICAgICAgLy8gYmVnaW4gbGVuZ3RoLWRlbGltaXRlZFxuICAgICAgICB3cml0ZXIuZm9yaygpO1xuICAgICAgICAvLyB3cml0ZSB2YWx1ZXMgd2l0aG91dCB0YWdzXG4gICAgICAgIGxldCBbLCBtZXRob2QsXSA9IHRoaXMuc2NhbGFySW5mbyh0eXBlKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIHdyaXRlclttZXRob2RdKHZhbHVlW2ldKTtcbiAgICAgICAgLy8gZW5kIGxlbmd0aCBkZWxpbWl0ZWRcbiAgICAgICAgd3JpdGVyLmpvaW4oKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IGluZm9ybWF0aW9uIGZvciB3cml0aW5nIGEgc2NhbGFyIHZhbHVlLlxuICAgICAqXG4gICAgICogUmV0dXJucyB0dXBsZTpcbiAgICAgKiBbMF06IGFwcHJvcHJpYXRlIFdpcmVUeXBlXG4gICAgICogWzFdOiBuYW1lIG9mIHRoZSBhcHByb3ByaWF0ZSBtZXRob2Qgb2YgSUJpbmFyeVdyaXRlclxuICAgICAqIFsyXTogd2hldGhlciB0aGUgZ2l2ZW4gdmFsdWUgaXMgYSBkZWZhdWx0IHZhbHVlXG4gICAgICpcbiAgICAgKiBJZiBhcmd1bWVudCBgdmFsdWVgIGlzIG9taXR0ZWQsIFsyXSBpcyBhbHdheXMgZmFsc2UuXG4gICAgICovXG4gICAgc2NhbGFySW5mbyh0eXBlLCB2YWx1ZSkge1xuICAgICAgICBsZXQgdCA9IGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMS5XaXJlVHlwZS5WYXJpbnQ7XG4gICAgICAgIGxldCBtO1xuICAgICAgICBsZXQgaSA9IHZhbHVlID09PSB1bmRlZmluZWQ7XG4gICAgICAgIGxldCBkID0gdmFsdWUgPT09IDA7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLklOVDMyOlxuICAgICAgICAgICAgICAgIG0gPSBcImludDMyXCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuU1RSSU5HOlxuICAgICAgICAgICAgICAgIGQgPSBpIHx8ICF2YWx1ZS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgdCA9IGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQ7XG4gICAgICAgICAgICAgICAgbSA9IFwic3RyaW5nXCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuQk9PTDpcbiAgICAgICAgICAgICAgICBkID0gdmFsdWUgPT09IGZhbHNlO1xuICAgICAgICAgICAgICAgIG0gPSBcImJvb2xcIjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5VSU5UMzI6XG4gICAgICAgICAgICAgICAgbSA9IFwidWludDMyXCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuRE9VQkxFOlxuICAgICAgICAgICAgICAgIHQgPSBiaW5hcnlfZm9ybWF0X2NvbnRyYWN0XzEuV2lyZVR5cGUuQml0NjQ7XG4gICAgICAgICAgICAgICAgbSA9IFwiZG91YmxlXCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuRkxPQVQ6XG4gICAgICAgICAgICAgICAgdCA9IGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMS5XaXJlVHlwZS5CaXQzMjtcbiAgICAgICAgICAgICAgICBtID0gXCJmbG9hdFwiO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLklOVDY0OlxuICAgICAgICAgICAgICAgIGQgPSBpIHx8IHBiX2xvbmdfMS5QYkxvbmcuZnJvbSh2YWx1ZSkuaXNaZXJvKCk7XG4gICAgICAgICAgICAgICAgbSA9IFwiaW50NjRcIjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5VSU5UNjQ6XG4gICAgICAgICAgICAgICAgZCA9IGkgfHwgcGJfbG9uZ18xLlBiVUxvbmcuZnJvbSh2YWx1ZSkuaXNaZXJvKCk7XG4gICAgICAgICAgICAgICAgbSA9IFwidWludDY0XCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuRklYRUQ2NDpcbiAgICAgICAgICAgICAgICBkID0gaSB8fCBwYl9sb25nXzEuUGJVTG9uZy5mcm9tKHZhbHVlKS5pc1plcm8oKTtcbiAgICAgICAgICAgICAgICB0ID0gYmluYXJ5X2Zvcm1hdF9jb250cmFjdF8xLldpcmVUeXBlLkJpdDY0O1xuICAgICAgICAgICAgICAgIG0gPSBcImZpeGVkNjRcIjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5CWVRFUzpcbiAgICAgICAgICAgICAgICBkID0gaSB8fCAhdmFsdWUuYnl0ZUxlbmd0aDtcbiAgICAgICAgICAgICAgICB0ID0gYmluYXJ5X2Zvcm1hdF9jb250cmFjdF8xLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZDtcbiAgICAgICAgICAgICAgICBtID0gXCJieXRlc1wiO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkZJWEVEMzI6XG4gICAgICAgICAgICAgICAgdCA9IGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMS5XaXJlVHlwZS5CaXQzMjtcbiAgICAgICAgICAgICAgICBtID0gXCJmaXhlZDMyXCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuU0ZJWEVEMzI6XG4gICAgICAgICAgICAgICAgdCA9IGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMS5XaXJlVHlwZS5CaXQzMjtcbiAgICAgICAgICAgICAgICBtID0gXCJzZml4ZWQzMlwiO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNGSVhFRDY0OlxuICAgICAgICAgICAgICAgIGQgPSBpIHx8IHBiX2xvbmdfMS5QYkxvbmcuZnJvbSh2YWx1ZSkuaXNaZXJvKCk7XG4gICAgICAgICAgICAgICAgdCA9IGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMS5XaXJlVHlwZS5CaXQ2NDtcbiAgICAgICAgICAgICAgICBtID0gXCJzZml4ZWQ2NFwiO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNJTlQzMjpcbiAgICAgICAgICAgICAgICBtID0gXCJzaW50MzJcIjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TSU5UNjQ6XG4gICAgICAgICAgICAgICAgZCA9IGkgfHwgcGJfbG9uZ18xLlBiTG9uZy5mcm9tKHZhbHVlKS5pc1plcm8oKTtcbiAgICAgICAgICAgICAgICBtID0gXCJzaW50NjRcIjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW3QsIG0sIGkgfHwgZF07XG4gICAgfVxufVxuZXhwb3J0cy5SZWZsZWN0aW9uQmluYXJ5V3JpdGVyID0gUmVmbGVjdGlvbkJpbmFyeVdyaXRlcjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlZmxlY3Rpb25DcmVhdGUgPSB2b2lkIDA7XG5jb25zdCByZWZsZWN0aW9uX3NjYWxhcl9kZWZhdWx0XzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLXNjYWxhci1kZWZhdWx0XCIpO1xuY29uc3QgbWVzc2FnZV90eXBlX2NvbnRyYWN0XzEgPSByZXF1aXJlKFwiLi9tZXNzYWdlLXR5cGUtY29udHJhY3RcIik7XG4vKipcbiAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGdlbmVyaWMgbWVzc2FnZSwgdXNpbmcgdGhlIGZpZWxkXG4gKiBpbmZvcm1hdGlvbi5cbiAqL1xuZnVuY3Rpb24gcmVmbGVjdGlvbkNyZWF0ZSh0eXBlKSB7XG4gICAgLyoqXG4gICAgICogVGhpcyB0ZXJuYXJ5IGNhbiBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24uXG4gICAgICogVGhlIGBPYmplY3QuY3JlYXRlKClgIGNvZGUgcGF0aCB1dGlsaXplcyBhIG5ldyBgbWVzc2FnZVByb3RvdHlwZWBcbiAgICAgKiBwcm9wZXJ0eSBvbiB0aGUgYElNZXNzYWdlVHlwZWAgd2hpY2ggaGFzIHRoaXMgc2FtZSBgTUVTU0FHRV9UWVBFYFxuICAgICAqIG5vbi1lbnVtZXJhYmxlIHByb3BlcnR5IG9uIGl0LiBEb2luZyBpdCB0aGlzIHdheSBtZWFucyB0aGF0IHdlIG9ubHlcbiAgICAgKiBwYXkgdGhlIGNvc3Qgb2YgYE9iamVjdC5kZWZpbmVQcm9wZXJ0eSgpYCBvbmNlIHBlciBgSU1lc3NhZ2VUeXBlYFxuICAgICAqIGNsYXNzIG9mIG9uY2UgcGVyIFwiaW5zdGFuY2VcIi4gVGhlIGZhbHN5IGNvZGUgcGF0aCBpcyBvbmx5IHByb3ZpZGVkXG4gICAgICogZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGluIGNhc2VzIHdoZXJlIHRoZSBydW50aW1lIGxpYnJhcnkgaXNcbiAgICAgKiB1cGRhdGVkIHdpdGhvdXQgYWxzbyB1cGRhdGluZyB0aGUgZ2VuZXJhdGVkIGNvZGUuXG4gICAgICovXG4gICAgY29uc3QgbXNnID0gdHlwZS5tZXNzYWdlUHJvdG90eXBlXG4gICAgICAgID8gT2JqZWN0LmNyZWF0ZSh0eXBlLm1lc3NhZ2VQcm90b3R5cGUpXG4gICAgICAgIDogT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCBtZXNzYWdlX3R5cGVfY29udHJhY3RfMS5NRVNTQUdFX1RZUEUsIHsgdmFsdWU6IHR5cGUgfSk7XG4gICAgZm9yIChsZXQgZmllbGQgb2YgdHlwZS5maWVsZHMpIHtcbiAgICAgICAgbGV0IG5hbWUgPSBmaWVsZC5sb2NhbE5hbWU7XG4gICAgICAgIGlmIChmaWVsZC5vcHQpXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgaWYgKGZpZWxkLm9uZW9mKVxuICAgICAgICAgICAgbXNnW2ZpZWxkLm9uZW9mXSA9IHsgb25lb2ZLaW5kOiB1bmRlZmluZWQgfTtcbiAgICAgICAgZWxzZSBpZiAoZmllbGQucmVwZWF0KVxuICAgICAgICAgICAgbXNnW25hbWVdID0gW107XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHN3aXRjaCAoZmllbGQua2luZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzY2FsYXJcIjpcbiAgICAgICAgICAgICAgICAgICAgbXNnW25hbWVdID0gcmVmbGVjdGlvbl9zY2FsYXJfZGVmYXVsdF8xLnJlZmxlY3Rpb25TY2FsYXJEZWZhdWx0KGZpZWxkLlQsIGZpZWxkLkwpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiZW51bVwiOlxuICAgICAgICAgICAgICAgICAgICAvLyB3ZSByZXF1aXJlIDAgdG8gYmUgZGVmYXVsdCB2YWx1ZSBmb3IgYWxsIGVudW1zXG4gICAgICAgICAgICAgICAgICAgIG1zZ1tuYW1lXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJtYXBcIjpcbiAgICAgICAgICAgICAgICAgICAgbXNnW25hbWVdID0ge307XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbXNnO1xufVxuZXhwb3J0cy5yZWZsZWN0aW9uQ3JlYXRlID0gcmVmbGVjdGlvbkNyZWF0ZTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlZmxlY3Rpb25NZXJnZVBhcnRpYWwgPSB2b2lkIDA7XG4vKipcbiAqIENvcHkgcGFydGlhbCBkYXRhIGludG8gdGhlIHRhcmdldCBtZXNzYWdlLlxuICpcbiAqIElmIGEgc2luZ3VsYXIgc2NhbGFyIG9yIGVudW0gZmllbGQgaXMgcHJlc2VudCBpbiB0aGUgc291cmNlLCBpdFxuICogcmVwbGFjZXMgdGhlIGZpZWxkIGluIHRoZSB0YXJnZXQuXG4gKlxuICogSWYgYSBzaW5ndWxhciBtZXNzYWdlIGZpZWxkIGlzIHByZXNlbnQgaW4gdGhlIHNvdXJjZSwgaXQgaXMgbWVyZ2VkXG4gKiB3aXRoIHRoZSB0YXJnZXQgZmllbGQgYnkgY2FsbGluZyBtZXJnZVBhcnRpYWwoKSBvZiB0aGUgcmVzcG9uc2libGVcbiAqIG1lc3NhZ2UgdHlwZS5cbiAqXG4gKiBJZiBhIHJlcGVhdGVkIGZpZWxkIGlzIHByZXNlbnQgaW4gdGhlIHNvdXJjZSwgaXRzIHZhbHVlcyByZXBsYWNlXG4gKiBhbGwgdmFsdWVzIGluIHRoZSB0YXJnZXQgYXJyYXksIHJlbW92aW5nIGV4dHJhbmVvdXMgdmFsdWVzLlxuICogUmVwZWF0ZWQgbWVzc2FnZSBmaWVsZHMgYXJlIGNvcGllZCwgbm90IG1lcmdlZC5cbiAqXG4gKiBJZiBhIG1hcCBmaWVsZCBpcyBwcmVzZW50IGluIHRoZSBzb3VyY2UsIGVudHJpZXMgYXJlIGFkZGVkIHRvIHRoZVxuICogdGFyZ2V0IG1hcCwgcmVwbGFjaW5nIGVudHJpZXMgd2l0aCB0aGUgc2FtZSBrZXkuIEVudHJpZXMgdGhhdCBvbmx5XG4gKiBleGlzdCBpbiB0aGUgdGFyZ2V0IHJlbWFpbi4gRW50cmllcyB3aXRoIG1lc3NhZ2UgdmFsdWVzIGFyZSBjb3BpZWQsXG4gKiBub3QgbWVyZ2VkLlxuICpcbiAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGRpZmZlcnMgZnJvbSBwcm90b2J1ZiBtZXJnZSBzZW1hbnRpY3MsXG4gKiB3aGljaCBhcHBlbmRzIHJlcGVhdGVkIGZpZWxkcy5cbiAqL1xuZnVuY3Rpb24gcmVmbGVjdGlvbk1lcmdlUGFydGlhbChpbmZvLCB0YXJnZXQsIHNvdXJjZSkge1xuICAgIGxldCBmaWVsZFZhbHVlLCAvLyB0aGUgZmllbGQgdmFsdWUgd2UgYXJlIHdvcmtpbmcgd2l0aFxuICAgIGlucHV0ID0gc291cmNlLCBvdXRwdXQ7IC8vIHdoZXJlIHdlIHdhbnQgb3VyIGZpZWxkIHZhbHVlIHRvIGdvXG4gICAgZm9yIChsZXQgZmllbGQgb2YgaW5mby5maWVsZHMpIHtcbiAgICAgICAgbGV0IG5hbWUgPSBmaWVsZC5sb2NhbE5hbWU7XG4gICAgICAgIGlmIChmaWVsZC5vbmVvZikge1xuICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSBpbnB1dFtmaWVsZC5vbmVvZl07IC8vIHRoaXMgaXMgdGhlIG9uZW9mYHMgZ3JvdXAgaW4gdGhlIHNvdXJjZVxuICAgICAgICAgICAgaWYgKChncm91cCA9PT0gbnVsbCB8fCBncm91cCA9PT0gdm9pZCAwID8gdm9pZCAwIDogZ3JvdXAub25lb2ZLaW5kKSA9PSB1bmRlZmluZWQpIHsgLy8gdGhlIHVzZXIgaXMgZnJlZSB0byBvbWl0XG4gICAgICAgICAgICAgICAgY29udGludWU7IC8vIHdlIHNraXAgdGhpcyBmaWVsZCwgYW5kIGFsbCBvdGhlciBtZW1iZXJzIHRvb1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmllbGRWYWx1ZSA9IGdyb3VwW25hbWVdOyAvLyBvdXIgdmFsdWUgY29tZXMgZnJvbSB0aGUgdGhlIG9uZW9mIGdyb3VwIG9mIHRoZSBzb3VyY2VcbiAgICAgICAgICAgIG91dHB1dCA9IHRhcmdldFtmaWVsZC5vbmVvZl07IC8vIGFuZCBvdXIgb3V0cHV0IGlzIHRoZSBvbmVvZiBncm91cCBvZiB0aGUgdGFyZ2V0XG4gICAgICAgICAgICBvdXRwdXQub25lb2ZLaW5kID0gZ3JvdXAub25lb2ZLaW5kOyAvLyBhbHdheXMgdXBkYXRlIGRpc2NyaW1pbmF0b3JcbiAgICAgICAgICAgIGlmIChmaWVsZFZhbHVlID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBvdXRwdXRbbmFtZV07IC8vIHJlbW92ZSBhbnkgZXhpc3RpbmcgdmFsdWVcbiAgICAgICAgICAgICAgICBjb250aW51ZTsgLy8gc2tpcCBmdXJ0aGVyIHdvcmsgb24gZmllbGRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZpZWxkVmFsdWUgPSBpbnB1dFtuYW1lXTsgLy8gd2UgYXJlIHVzaW5nIHRoZSBzb3VyY2UgZGlyZWN0bHlcbiAgICAgICAgICAgIG91dHB1dCA9IHRhcmdldDsgLy8gd2Ugd2FudCBvdXIgZmllbGQgdmFsdWUgdG8gZ28gZGlyZWN0bHkgaW50byB0aGUgdGFyZ2V0XG4gICAgICAgICAgICBpZiAoZmllbGRWYWx1ZSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTsgLy8gc2tpcCBmdXJ0aGVyIHdvcmsgb24gZmllbGQsIGV4aXN0aW5nIHZhbHVlIGlzIHVzZWQgYXMgaXNcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZmllbGQucmVwZWF0KVxuICAgICAgICAgICAgb3V0cHV0W25hbWVdLmxlbmd0aCA9IGZpZWxkVmFsdWUubGVuZ3RoOyAvLyByZXNpemUgdGFyZ2V0IGFycmF5IHRvIG1hdGNoIHNvdXJjZSBhcnJheVxuICAgICAgICAvLyBub3cgd2UganVzdCB3b3JrIHdpdGggYGZpZWxkVmFsdWVgIGFuZCBgb3V0cHV0YCB0byBtZXJnZSB0aGUgdmFsdWVcbiAgICAgICAgc3dpdGNoIChmaWVsZC5raW5kKSB7XG4gICAgICAgICAgICBjYXNlIFwic2NhbGFyXCI6XG4gICAgICAgICAgICBjYXNlIFwiZW51bVwiOlxuICAgICAgICAgICAgICAgIGlmIChmaWVsZC5yZXBlYXQpXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmllbGRWYWx1ZS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFtuYW1lXVtpXSA9IGZpZWxkVmFsdWVbaV07IC8vIG5vdCBhIHJlZmVyZW5jZSB0eXBlXG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBvdXRwdXRbbmFtZV0gPSBmaWVsZFZhbHVlOyAvLyBub3QgYSByZWZlcmVuY2UgdHlwZVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm1lc3NhZ2VcIjpcbiAgICAgICAgICAgICAgICBsZXQgVCA9IGZpZWxkLlQoKTtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGQucmVwZWF0KVxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpZWxkVmFsdWUubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRbbmFtZV1baV0gPSBULmNyZWF0ZShmaWVsZFZhbHVlW2ldKTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChvdXRwdXRbbmFtZV0gPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0W25hbWVdID0gVC5jcmVhdGUoZmllbGRWYWx1ZSk7IC8vIG5vdGhpbmcgdG8gbWVyZ2Ugd2l0aFxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgVC5tZXJnZVBhcnRpYWwob3V0cHV0W25hbWVdLCBmaWVsZFZhbHVlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJtYXBcIjpcbiAgICAgICAgICAgICAgICAvLyBNYXAgYW5kIHJlcGVhdGVkIGZpZWxkcyBhcmUgc2ltcGx5IG92ZXJ3cml0dGVuLCBub3QgYXBwZW5kZWQgb3IgbWVyZ2VkXG4gICAgICAgICAgICAgICAgc3dpdGNoIChmaWVsZC5WLmtpbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcInNjYWxhclwiOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZW51bVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihvdXRwdXRbbmFtZV0sIGZpZWxkVmFsdWUpOyAvLyBlbGVtZW50cyBhcmUgbm90IHJlZmVyZW5jZSB0eXBlc1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJtZXNzYWdlXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgVCA9IGZpZWxkLlYuVCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgayBvZiBPYmplY3Qua2V5cyhmaWVsZFZhbHVlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRbbmFtZV1ba10gPSBULmNyZWF0ZShmaWVsZFZhbHVlW2tdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMucmVmbGVjdGlvbk1lcmdlUGFydGlhbCA9IHJlZmxlY3Rpb25NZXJnZVBhcnRpYWw7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yZWZsZWN0aW9uRXF1YWxzID0gdm9pZCAwO1xuY29uc3QgcmVmbGVjdGlvbl9pbmZvXzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLWluZm9cIik7XG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0d28gbWVzc2FnZSBvZiB0aGUgc2FtZSB0eXBlIGhhdmUgdGhlIHNhbWUgZmllbGQgdmFsdWVzLlxuICogQ2hlY2tzIGZvciBkZWVwIGVxdWFsaXR5LCB0cmF2ZXJzaW5nIHJlcGVhdGVkIGZpZWxkcywgb25lb2YgZ3JvdXBzLCBtYXBzXG4gKiBhbmQgbWVzc2FnZXMgcmVjdXJzaXZlbHkuXG4gKiBXaWxsIGFsc28gcmV0dXJuIHRydWUgaWYgYm90aCBtZXNzYWdlcyBhcmUgYHVuZGVmaW5lZGAuXG4gKi9cbmZ1bmN0aW9uIHJlZmxlY3Rpb25FcXVhbHMoaW5mbywgYSwgYikge1xuICAgIGlmIChhID09PSBiKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoIWEgfHwgIWIpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBmb3IgKGxldCBmaWVsZCBvZiBpbmZvLmZpZWxkcykge1xuICAgICAgICBsZXQgbG9jYWxOYW1lID0gZmllbGQubG9jYWxOYW1lO1xuICAgICAgICBsZXQgdmFsX2EgPSBmaWVsZC5vbmVvZiA/IGFbZmllbGQub25lb2ZdW2xvY2FsTmFtZV0gOiBhW2xvY2FsTmFtZV07XG4gICAgICAgIGxldCB2YWxfYiA9IGZpZWxkLm9uZW9mID8gYltmaWVsZC5vbmVvZl1bbG9jYWxOYW1lXSA6IGJbbG9jYWxOYW1lXTtcbiAgICAgICAgc3dpdGNoIChmaWVsZC5raW5kKSB7XG4gICAgICAgICAgICBjYXNlIFwiZW51bVwiOlxuICAgICAgICAgICAgY2FzZSBcInNjYWxhclwiOlxuICAgICAgICAgICAgICAgIGxldCB0ID0gZmllbGQua2luZCA9PSBcImVudW1cIiA/IHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuSU5UMzIgOiBmaWVsZC5UO1xuICAgICAgICAgICAgICAgIGlmICghKGZpZWxkLnJlcGVhdFxuICAgICAgICAgICAgICAgICAgICA/IHJlcGVhdGVkUHJpbWl0aXZlRXEodCwgdmFsX2EsIHZhbF9iKVxuICAgICAgICAgICAgICAgICAgICA6IHByaW1pdGl2ZUVxKHQsIHZhbF9hLCB2YWxfYikpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWFwXCI6XG4gICAgICAgICAgICAgICAgaWYgKCEoZmllbGQuVi5raW5kID09IFwibWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgICAgID8gcmVwZWF0ZWRNc2dFcShmaWVsZC5WLlQoKSwgb2JqZWN0VmFsdWVzKHZhbF9hKSwgb2JqZWN0VmFsdWVzKHZhbF9iKSlcbiAgICAgICAgICAgICAgICAgICAgOiByZXBlYXRlZFByaW1pdGl2ZUVxKGZpZWxkLlYua2luZCA9PSBcImVudW1cIiA/IHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuSU5UMzIgOiBmaWVsZC5WLlQsIG9iamVjdFZhbHVlcyh2YWxfYSksIG9iamVjdFZhbHVlcyh2YWxfYikpKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm1lc3NhZ2VcIjpcbiAgICAgICAgICAgICAgICBsZXQgVCA9IGZpZWxkLlQoKTtcbiAgICAgICAgICAgICAgICBpZiAoIShmaWVsZC5yZXBlYXRcbiAgICAgICAgICAgICAgICAgICAgPyByZXBlYXRlZE1zZ0VxKFQsIHZhbF9hLCB2YWxfYilcbiAgICAgICAgICAgICAgICAgICAgOiBULmVxdWFscyh2YWxfYSwgdmFsX2IpKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuZXhwb3J0cy5yZWZsZWN0aW9uRXF1YWxzID0gcmVmbGVjdGlvbkVxdWFscztcbmNvbnN0IG9iamVjdFZhbHVlcyA9IE9iamVjdC52YWx1ZXM7XG5mdW5jdGlvbiBwcmltaXRpdmVFcSh0eXBlLCBhLCBiKSB7XG4gICAgaWYgKGEgPT09IGIpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIGlmICh0eXBlICE9PSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkJZVEVTKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgbGV0IGJhID0gYTtcbiAgICBsZXQgYmIgPSBiO1xuICAgIGlmIChiYS5sZW5ndGggIT09IGJiLmxlbmd0aClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmEubGVuZ3RoOyBpKyspXG4gICAgICAgIGlmIChiYVtpXSAhPSBiYltpXSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIHJlcGVhdGVkUHJpbWl0aXZlRXEodHlwZSwgYSwgYikge1xuICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspXG4gICAgICAgIGlmICghcHJpbWl0aXZlRXEodHlwZSwgYVtpXSwgYltpXSkpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiByZXBlYXRlZE1zZ0VxKHR5cGUsIGEsIGIpIHtcbiAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKVxuICAgICAgICBpZiAoIXR5cGUuZXF1YWxzKGFbaV0sIGJbaV0pKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xufVxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTWVzc2FnZVR5cGUgPSB2b2lkIDA7XG5jb25zdCBtZXNzYWdlX3R5cGVfY29udHJhY3RfMSA9IHJlcXVpcmUoXCIuL21lc3NhZ2UtdHlwZS1jb250cmFjdFwiKTtcbmNvbnN0IHJlZmxlY3Rpb25faW5mb18xID0gcmVxdWlyZShcIi4vcmVmbGVjdGlvbi1pbmZvXCIpO1xuY29uc3QgcmVmbGVjdGlvbl90eXBlX2NoZWNrXzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLXR5cGUtY2hlY2tcIik7XG5jb25zdCByZWZsZWN0aW9uX2pzb25fcmVhZGVyXzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLWpzb24tcmVhZGVyXCIpO1xuY29uc3QgcmVmbGVjdGlvbl9qc29uX3dyaXRlcl8xID0gcmVxdWlyZShcIi4vcmVmbGVjdGlvbi1qc29uLXdyaXRlclwiKTtcbmNvbnN0IHJlZmxlY3Rpb25fYmluYXJ5X3JlYWRlcl8xID0gcmVxdWlyZShcIi4vcmVmbGVjdGlvbi1iaW5hcnktcmVhZGVyXCIpO1xuY29uc3QgcmVmbGVjdGlvbl9iaW5hcnlfd3JpdGVyXzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLWJpbmFyeS13cml0ZXJcIik7XG5jb25zdCByZWZsZWN0aW9uX2NyZWF0ZV8xID0gcmVxdWlyZShcIi4vcmVmbGVjdGlvbi1jcmVhdGVcIik7XG5jb25zdCByZWZsZWN0aW9uX21lcmdlX3BhcnRpYWxfMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24tbWVyZ2UtcGFydGlhbFwiKTtcbmNvbnN0IGpzb25fdHlwaW5nc18xID0gcmVxdWlyZShcIi4vanNvbi10eXBpbmdzXCIpO1xuY29uc3QganNvbl9mb3JtYXRfY29udHJhY3RfMSA9IHJlcXVpcmUoXCIuL2pzb24tZm9ybWF0LWNvbnRyYWN0XCIpO1xuY29uc3QgcmVmbGVjdGlvbl9lcXVhbHNfMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24tZXF1YWxzXCIpO1xuY29uc3QgYmluYXJ5X3dyaXRlcl8xID0gcmVxdWlyZShcIi4vYmluYXJ5LXdyaXRlclwiKTtcbmNvbnN0IGJpbmFyeV9yZWFkZXJfMSA9IHJlcXVpcmUoXCIuL2JpbmFyeS1yZWFkZXJcIik7XG5jb25zdCBiYXNlRGVzY3JpcHRvcnMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3QuZ2V0UHJvdG90eXBlT2Yoe30pKTtcbi8qKlxuICogVGhpcyBzdGFuZGFyZCBtZXNzYWdlIHR5cGUgcHJvdmlkZXMgcmVmbGVjdGlvbi1iYXNlZFxuICogb3BlcmF0aW9ucyB0byB3b3JrIHdpdGggYSBtZXNzYWdlLlxuICovXG5jbGFzcyBNZXNzYWdlVHlwZSB7XG4gICAgY29uc3RydWN0b3IobmFtZSwgZmllbGRzLCBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMuZGVmYXVsdENoZWNrRGVwdGggPSAxNjtcbiAgICAgICAgdGhpcy50eXBlTmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMuZmllbGRzID0gZmllbGRzLm1hcChyZWZsZWN0aW9uX2luZm9fMS5ub3JtYWxpemVGaWVsZEluZm8pO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCA/IG9wdGlvbnMgOiB7fTtcbiAgICAgICAgdGhpcy5tZXNzYWdlUHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShudWxsLCBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGJhc2VEZXNjcmlwdG9ycyksIHsgW21lc3NhZ2VfdHlwZV9jb250cmFjdF8xLk1FU1NBR0VfVFlQRV06IHsgdmFsdWU6IHRoaXMgfSB9KSk7XG4gICAgICAgIHRoaXMucmVmVHlwZUNoZWNrID0gbmV3IHJlZmxlY3Rpb25fdHlwZV9jaGVja18xLlJlZmxlY3Rpb25UeXBlQ2hlY2sodGhpcyk7XG4gICAgICAgIHRoaXMucmVmSnNvblJlYWRlciA9IG5ldyByZWZsZWN0aW9uX2pzb25fcmVhZGVyXzEuUmVmbGVjdGlvbkpzb25SZWFkZXIodGhpcyk7XG4gICAgICAgIHRoaXMucmVmSnNvbldyaXRlciA9IG5ldyByZWZsZWN0aW9uX2pzb25fd3JpdGVyXzEuUmVmbGVjdGlvbkpzb25Xcml0ZXIodGhpcyk7XG4gICAgICAgIHRoaXMucmVmQmluUmVhZGVyID0gbmV3IHJlZmxlY3Rpb25fYmluYXJ5X3JlYWRlcl8xLlJlZmxlY3Rpb25CaW5hcnlSZWFkZXIodGhpcyk7XG4gICAgICAgIHRoaXMucmVmQmluV3JpdGVyID0gbmV3IHJlZmxlY3Rpb25fYmluYXJ5X3dyaXRlcl8xLlJlZmxlY3Rpb25CaW5hcnlXcml0ZXIodGhpcyk7XG4gICAgfVxuICAgIGNyZWF0ZSh2YWx1ZSkge1xuICAgICAgICBsZXQgbWVzc2FnZSA9IHJlZmxlY3Rpb25fY3JlYXRlXzEucmVmbGVjdGlvbkNyZWF0ZSh0aGlzKTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJlZmxlY3Rpb25fbWVyZ2VfcGFydGlhbF8xLnJlZmxlY3Rpb25NZXJnZVBhcnRpYWwodGhpcywgbWVzc2FnZSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDbG9uZSB0aGUgbWVzc2FnZS5cbiAgICAgKlxuICAgICAqIFVua25vd24gZmllbGRzIGFyZSBkaXNjYXJkZWQuXG4gICAgICovXG4gICAgY2xvbmUobWVzc2FnZSkge1xuICAgICAgICBsZXQgY29weSA9IHRoaXMuY3JlYXRlKCk7XG4gICAgICAgIHJlZmxlY3Rpb25fbWVyZ2VfcGFydGlhbF8xLnJlZmxlY3Rpb25NZXJnZVBhcnRpYWwodGhpcywgY29weSwgbWVzc2FnZSk7XG4gICAgICAgIHJldHVybiBjb3B5O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdHdvIG1lc3NhZ2Ugb2YgdGhlIHNhbWUgdHlwZSBoYXZlIHRoZSBzYW1lIGZpZWxkIHZhbHVlcy5cbiAgICAgKiBDaGVja3MgZm9yIGRlZXAgZXF1YWxpdHksIHRyYXZlcnNpbmcgcmVwZWF0ZWQgZmllbGRzLCBvbmVvZiBncm91cHMsIG1hcHNcbiAgICAgKiBhbmQgbWVzc2FnZXMgcmVjdXJzaXZlbHkuXG4gICAgICogV2lsbCBhbHNvIHJldHVybiB0cnVlIGlmIGJvdGggbWVzc2FnZXMgYXJlIGB1bmRlZmluZWRgLlxuICAgICAqL1xuICAgIGVxdWFscyhhLCBiKSB7XG4gICAgICAgIHJldHVybiByZWZsZWN0aW9uX2VxdWFsc18xLnJlZmxlY3Rpb25FcXVhbHModGhpcywgYSwgYik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElzIHRoZSBnaXZlbiB2YWx1ZSBhc3NpZ25hYmxlIHRvIG91ciBtZXNzYWdlIHR5cGVcbiAgICAgKiBhbmQgY29udGFpbnMgbm8gW2V4Y2VzcyBwcm9wZXJ0aWVzXShodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay9pbnRlcmZhY2VzLmh0bWwjZXhjZXNzLXByb3BlcnR5LWNoZWNrcyk/XG4gICAgICovXG4gICAgaXMoYXJnLCBkZXB0aCA9IHRoaXMuZGVmYXVsdENoZWNrRGVwdGgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmVHlwZUNoZWNrLmlzKGFyZywgZGVwdGgsIGZhbHNlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSXMgdGhlIGdpdmVuIHZhbHVlIGFzc2lnbmFibGUgdG8gb3VyIG1lc3NhZ2UgdHlwZSxcbiAgICAgKiByZWdhcmRsZXNzIG9mIFtleGNlc3MgcHJvcGVydGllc10oaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svaW50ZXJmYWNlcy5odG1sI2V4Y2Vzcy1wcm9wZXJ0eS1jaGVja3MpP1xuICAgICAqL1xuICAgIGlzQXNzaWduYWJsZShhcmcsIGRlcHRoID0gdGhpcy5kZWZhdWx0Q2hlY2tEZXB0aCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWZUeXBlQ2hlY2suaXMoYXJnLCBkZXB0aCwgdHJ1ZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvcHkgcGFydGlhbCBkYXRhIGludG8gdGhlIHRhcmdldCBtZXNzYWdlLlxuICAgICAqL1xuICAgIG1lcmdlUGFydGlhbCh0YXJnZXQsIHNvdXJjZSkge1xuICAgICAgICByZWZsZWN0aW9uX21lcmdlX3BhcnRpYWxfMS5yZWZsZWN0aW9uTWVyZ2VQYXJ0aWFsKHRoaXMsIHRhcmdldCwgc291cmNlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgbmV3IG1lc3NhZ2UgZnJvbSBiaW5hcnkgZm9ybWF0LlxuICAgICAqL1xuICAgIGZyb21CaW5hcnkoZGF0YSwgb3B0aW9ucykge1xuICAgICAgICBsZXQgb3B0ID0gYmluYXJ5X3JlYWRlcl8xLmJpbmFyeVJlYWRPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbEJpbmFyeVJlYWQob3B0LnJlYWRlckZhY3RvcnkoZGF0YSksIGRhdGEuYnl0ZUxlbmd0aCwgb3B0KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVhZCBhIG5ldyBtZXNzYWdlIGZyb20gYSBKU09OIHZhbHVlLlxuICAgICAqL1xuICAgIGZyb21Kc29uKGpzb24sIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxKc29uUmVhZChqc29uLCBqc29uX2Zvcm1hdF9jb250cmFjdF8xLmpzb25SZWFkT3B0aW9ucyhvcHRpb25zKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWQgYSBuZXcgbWVzc2FnZSBmcm9tIGEgSlNPTiBzdHJpbmcuXG4gICAgICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIGBULmZyb21Kc29uKEpTT04ucGFyc2UoanNvbikpYC5cbiAgICAgKi9cbiAgICBmcm9tSnNvblN0cmluZyhqc29uLCBvcHRpb25zKSB7XG4gICAgICAgIGxldCB2YWx1ZSA9IEpTT04ucGFyc2UoanNvbik7XG4gICAgICAgIHJldHVybiB0aGlzLmZyb21Kc29uKHZhbHVlLCBvcHRpb25zKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGUgdGhlIG1lc3NhZ2UgdG8gY2Fub25pY2FsIEpTT04gdmFsdWUuXG4gICAgICovXG4gICAgdG9Kc29uKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxKc29uV3JpdGUobWVzc2FnZSwganNvbl9mb3JtYXRfY29udHJhY3RfMS5qc29uV3JpdGVPcHRpb25zKG9wdGlvbnMpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29udmVydCB0aGUgbWVzc2FnZSB0byBjYW5vbmljYWwgSlNPTiBzdHJpbmcuXG4gICAgICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIGBKU09OLnN0cmluZ2lmeShULnRvSnNvbih0KSlgXG4gICAgICovXG4gICAgdG9Kc29uU3RyaW5nKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLnRvSnNvbihtZXNzYWdlLCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlLCBudWxsLCAoX2EgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMucHJldHR5U3BhY2VzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAwKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGUgdGhlIG1lc3NhZ2UgdG8gYmluYXJ5IGZvcm1hdC5cbiAgICAgKi9cbiAgICB0b0JpbmFyeShtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICAgIGxldCBvcHQgPSBiaW5hcnlfd3JpdGVyXzEuYmluYXJ5V3JpdGVPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbEJpbmFyeVdyaXRlKG1lc3NhZ2UsIG9wdC53cml0ZXJGYWN0b3J5KCksIG9wdCkuZmluaXNoKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgYW4gaW50ZXJuYWwgbWV0aG9kLiBJZiB5b3UganVzdCB3YW50IHRvIHJlYWQgYSBtZXNzYWdlIGZyb21cbiAgICAgKiBKU09OLCB1c2UgYGZyb21Kc29uKClgIG9yIGBmcm9tSnNvblN0cmluZygpYC5cbiAgICAgKlxuICAgICAqIFJlYWRzIEpTT04gdmFsdWUgYW5kIG1lcmdlcyB0aGUgZmllbGRzIGludG8gdGhlIHRhcmdldFxuICAgICAqIGFjY29yZGluZyB0byBwcm90b2J1ZiBydWxlcy4gSWYgdGhlIHRhcmdldCBpcyBvbWl0dGVkLFxuICAgICAqIGEgbmV3IGluc3RhbmNlIGlzIGNyZWF0ZWQgZmlyc3QuXG4gICAgICovXG4gICAgaW50ZXJuYWxKc29uUmVhZChqc29uLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgaWYgKGpzb24gIT09IG51bGwgJiYgdHlwZW9mIGpzb24gPT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShqc29uKSkge1xuICAgICAgICAgICAgbGV0IG1lc3NhZ2UgPSB0YXJnZXQgIT09IG51bGwgJiYgdGFyZ2V0ICE9PSB2b2lkIDAgPyB0YXJnZXQgOiB0aGlzLmNyZWF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5yZWZKc29uUmVhZGVyLnJlYWQoanNvbiwgbWVzc2FnZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBwYXJzZSBtZXNzYWdlICR7dGhpcy50eXBlTmFtZX0gZnJvbSBKU09OICR7anNvbl90eXBpbmdzXzEudHlwZW9mSnNvblZhbHVlKGpzb24pfS5gKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhpcyBpcyBhbiBpbnRlcm5hbCBtZXRob2QuIElmIHlvdSBqdXN0IHdhbnQgdG8gd3JpdGUgYSBtZXNzYWdlXG4gICAgICogdG8gSlNPTiwgdXNlIGB0b0pzb24oKWAgb3IgYHRvSnNvblN0cmluZygpLlxuICAgICAqXG4gICAgICogV3JpdGVzIEpTT04gdmFsdWUgYW5kIHJldHVybnMgaXQuXG4gICAgICovXG4gICAgaW50ZXJuYWxKc29uV3JpdGUobWVzc2FnZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWZKc29uV3JpdGVyLndyaXRlKG1lc3NhZ2UsIG9wdGlvbnMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIGFuIGludGVybmFsIG1ldGhvZC4gSWYgeW91IGp1c3Qgd2FudCB0byB3cml0ZSBhIG1lc3NhZ2VcbiAgICAgKiBpbiBiaW5hcnkgZm9ybWF0LCB1c2UgYHRvQmluYXJ5KClgLlxuICAgICAqXG4gICAgICogU2VyaWFsaXplcyB0aGUgbWVzc2FnZSBpbiBiaW5hcnkgZm9ybWF0IGFuZCBhcHBlbmRzIGl0IHRvIHRoZSBnaXZlblxuICAgICAqIHdyaXRlci4gUmV0dXJucyBwYXNzZWQgd3JpdGVyLlxuICAgICAqL1xuICAgIGludGVybmFsQmluYXJ5V3JpdGUobWVzc2FnZSwgd3JpdGVyLCBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMucmVmQmluV3JpdGVyLndyaXRlKG1lc3NhZ2UsIHdyaXRlciwgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgYW4gaW50ZXJuYWwgbWV0aG9kLiBJZiB5b3UganVzdCB3YW50IHRvIHJlYWQgYSBtZXNzYWdlIGZyb21cbiAgICAgKiBiaW5hcnkgZGF0YSwgdXNlIGBmcm9tQmluYXJ5KClgLlxuICAgICAqXG4gICAgICogUmVhZHMgZGF0YSBmcm9tIGJpbmFyeSBmb3JtYXQgYW5kIG1lcmdlcyB0aGUgZmllbGRzIGludG9cbiAgICAgKiB0aGUgdGFyZ2V0IGFjY29yZGluZyB0byBwcm90b2J1ZiBydWxlcy4gSWYgdGhlIHRhcmdldCBpc1xuICAgICAqIG9taXR0ZWQsIGEgbmV3IGluc3RhbmNlIGlzIGNyZWF0ZWQgZmlyc3QuXG4gICAgICovXG4gICAgaW50ZXJuYWxCaW5hcnlSZWFkKHJlYWRlciwgbGVuZ3RoLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSB0YXJnZXQgIT09IG51bGwgJiYgdGFyZ2V0ICE9PSB2b2lkIDAgPyB0YXJnZXQgOiB0aGlzLmNyZWF0ZSgpO1xuICAgICAgICB0aGlzLnJlZkJpblJlYWRlci5yZWFkKHJlYWRlciwgbWVzc2FnZSwgb3B0aW9ucywgbGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxufVxuZXhwb3J0cy5NZXNzYWdlVHlwZSA9IE1lc3NhZ2VUeXBlO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY29udGFpbnNNZXNzYWdlVHlwZSA9IHZvaWQgMDtcbmNvbnN0IG1lc3NhZ2VfdHlwZV9jb250cmFjdF8xID0gcmVxdWlyZShcIi4vbWVzc2FnZS10eXBlLWNvbnRyYWN0XCIpO1xuLyoqXG4gKiBDaGVjayBpZiB0aGUgcHJvdmlkZWQgb2JqZWN0IGlzIGEgcHJvdG8gbWVzc2FnZS5cbiAqXG4gKiBOb3RlIHRoYXQgdGhpcyBpcyBhbiBleHBlcmltZW50YWwgZmVhdHVyZSAtIGl0IGlzIGhlcmUgdG8gc3RheSwgYnV0XG4gKiBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG1heSBjaGFuZ2Ugd2l0aG91dCBub3RpY2UuXG4gKi9cbmZ1bmN0aW9uIGNvbnRhaW5zTWVzc2FnZVR5cGUobXNnKSB7XG4gICAgcmV0dXJuIG1zZ1ttZXNzYWdlX3R5cGVfY29udHJhY3RfMS5NRVNTQUdFX1RZUEVdICE9IG51bGw7XG59XG5leHBvcnRzLmNvbnRhaW5zTWVzc2FnZVR5cGUgPSBjb250YWluc01lc3NhZ2VUeXBlO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubGlzdEVudW1OdW1iZXJzID0gZXhwb3J0cy5saXN0RW51bU5hbWVzID0gZXhwb3J0cy5saXN0RW51bVZhbHVlcyA9IGV4cG9ydHMuaXNFbnVtT2JqZWN0ID0gdm9pZCAwO1xuLyoqXG4gKiBJcyB0aGlzIGEgbG9va3VwIG9iamVjdCBnZW5lcmF0ZWQgYnkgVHlwZXNjcmlwdCwgZm9yIGEgVHlwZXNjcmlwdCBlbnVtXG4gKiBnZW5lcmF0ZWQgYnkgcHJvdG9idWYtdHM/XG4gKlxuICogLSBObyBgY29uc3QgZW51bWAgKGVudW0gbXVzdCBub3QgYmUgaW5saW5lZCwgd2UgbmVlZCByZXZlcnNlIG1hcHBpbmcpLlxuICogLSBObyBzdHJpbmcgZW51bSAod2UgbmVlZCBpbnQzMiBmb3IgcHJvdG9idWYpLlxuICogLSBNdXN0IGhhdmUgYSB2YWx1ZSBmb3IgMCAob3RoZXJ3aXNlLCB3ZSB3b3VsZCBuZWVkIHRvIHN1cHBvcnQgY3VzdG9tIGRlZmF1bHQgdmFsdWVzKS5cbiAqL1xuZnVuY3Rpb24gaXNFbnVtT2JqZWN0KGFyZykge1xuICAgIGlmICh0eXBlb2YgYXJnICE9ICdvYmplY3QnIHx8IGFyZyA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghYXJnLmhhc093blByb3BlcnR5KDApKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZm9yIChsZXQgayBvZiBPYmplY3Qua2V5cyhhcmcpKSB7XG4gICAgICAgIGxldCBudW0gPSBwYXJzZUludChrKTtcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4obnVtKSkge1xuICAgICAgICAgICAgLy8gaXMgdGhlcmUgYSBuYW1lIGZvciB0aGUgbnVtYmVyP1xuICAgICAgICAgICAgbGV0IG5hbSA9IGFyZ1tudW1dO1xuICAgICAgICAgICAgaWYgKG5hbSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIC8vIGRvZXMgdGhlIG5hbWUgcmVzb2x2ZSBiYWNrIHRvIHRoZSBudW1iZXI/XG4gICAgICAgICAgICBpZiAoYXJnW25hbV0gIT09IG51bSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBpcyB0aGVyZSBhIG51bWJlciBmb3IgdGhlIG5hbWU/XG4gICAgICAgICAgICBsZXQgbnVtID0gYXJnW2tdO1xuICAgICAgICAgICAgaWYgKG51bSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIC8vIGlzIGl0IGEgc3RyaW5nIGVudW0/XG4gICAgICAgICAgICBpZiAodHlwZW9mIG51bSAhPT0gJ251bWJlcicpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgLy8gZG8gd2Uga25vdyB0aGUgbnVtYmVyP1xuICAgICAgICAgICAgaWYgKGFyZ1tudW1dID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuZXhwb3J0cy5pc0VudW1PYmplY3QgPSBpc0VudW1PYmplY3Q7XG4vKipcbiAqIExpc3RzIGFsbCB2YWx1ZXMgb2YgYSBUeXBlc2NyaXB0IGVudW0sIGFzIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCBhIFwibmFtZVwiXG4gKiBwcm9wZXJ0eSBhbmQgYSBcIm51bWJlclwiIHByb3BlcnR5LlxuICpcbiAqIE5vdGUgdGhhdCBpdCBpcyBwb3NzaWJsZSB0aGF0IGEgbnVtYmVyIGFwcGVhcnMgbW9yZSB0aGFuIG9uY2UsIGJlY2F1c2UgaXQgaXNcbiAqIHBvc3NpYmxlIHRvIGhhdmUgYWxpYXNlcyBpbiBhbiBlbnVtLlxuICpcbiAqIFRocm93cyBpZiB0aGUgZW51bSBkb2VzIG5vdCBhZGhlcmUgdG8gdGhlIHJ1bGVzIG9mIGVudW1zIGdlbmVyYXRlZCBieVxuICogcHJvdG9idWYtdHMuIFNlZSBgaXNFbnVtT2JqZWN0KClgLlxuICovXG5mdW5jdGlvbiBsaXN0RW51bVZhbHVlcyhlbnVtT2JqZWN0KSB7XG4gICAgaWYgKCFpc0VudW1PYmplY3QoZW51bU9iamVjdCkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIm5vdCBhIHR5cGVzY3JpcHQgZW51bSBvYmplY3RcIik7XG4gICAgbGV0IHZhbHVlcyA9IFtdO1xuICAgIGZvciAobGV0IFtuYW1lLCBudW1iZXJdIG9mIE9iamVjdC5lbnRyaWVzKGVudW1PYmplY3QpKVxuICAgICAgICBpZiAodHlwZW9mIG51bWJlciA9PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgdmFsdWVzLnB1c2goeyBuYW1lLCBudW1iZXIgfSk7XG4gICAgcmV0dXJuIHZhbHVlcztcbn1cbmV4cG9ydHMubGlzdEVudW1WYWx1ZXMgPSBsaXN0RW51bVZhbHVlcztcbi8qKlxuICogTGlzdHMgdGhlIG5hbWVzIG9mIGEgVHlwZXNjcmlwdCBlbnVtLlxuICpcbiAqIFRocm93cyBpZiB0aGUgZW51bSBkb2VzIG5vdCBhZGhlcmUgdG8gdGhlIHJ1bGVzIG9mIGVudW1zIGdlbmVyYXRlZCBieVxuICogcHJvdG9idWYtdHMuIFNlZSBgaXNFbnVtT2JqZWN0KClgLlxuICovXG5mdW5jdGlvbiBsaXN0RW51bU5hbWVzKGVudW1PYmplY3QpIHtcbiAgICByZXR1cm4gbGlzdEVudW1WYWx1ZXMoZW51bU9iamVjdCkubWFwKHZhbCA9PiB2YWwubmFtZSk7XG59XG5leHBvcnRzLmxpc3RFbnVtTmFtZXMgPSBsaXN0RW51bU5hbWVzO1xuLyoqXG4gKiBMaXN0cyB0aGUgbnVtYmVycyBvZiBhIFR5cGVzY3JpcHQgZW51bS5cbiAqXG4gKiBUaHJvd3MgaWYgdGhlIGVudW0gZG9lcyBub3QgYWRoZXJlIHRvIHRoZSBydWxlcyBvZiBlbnVtcyBnZW5lcmF0ZWQgYnlcbiAqIHByb3RvYnVmLXRzLiBTZWUgYGlzRW51bU9iamVjdCgpYC5cbiAqL1xuZnVuY3Rpb24gbGlzdEVudW1OdW1iZXJzKGVudW1PYmplY3QpIHtcbiAgICByZXR1cm4gbGlzdEVudW1WYWx1ZXMoZW51bU9iamVjdClcbiAgICAgICAgLm1hcCh2YWwgPT4gdmFsLm51bWJlcilcbiAgICAgICAgLmZpbHRlcigobnVtLCBpbmRleCwgYXJyKSA9PiBhcnIuaW5kZXhPZihudW0pID09IGluZGV4KTtcbn1cbmV4cG9ydHMubGlzdEVudW1OdW1iZXJzID0gbGlzdEVudW1OdW1iZXJzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIFB1YmxpYyBBUEkgb2YgdGhlIHByb3RvYnVmLXRzIHJ1bnRpbWUuXG4vLyBOb3RlOiB3ZSBkbyBub3QgdXNlIGBleHBvcnQgKiBmcm9tIC4uLmAgdG8gaGVscCB0cmVlIHNoYWtlcnMsXG4vLyB3ZWJwYWNrIHZlcmJvc2Ugb3V0cHV0IGhpbnRzIHRoYXQgdGhpcyBzaG91bGQgYmUgdXNlZnVsXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4vLyBDb252ZW5pZW5jZSBKU09OIHR5cGluZ3MgYW5kIGNvcnJlc3BvbmRpbmcgdHlwZSBndWFyZHNcbnZhciBqc29uX3R5cGluZ3NfMSA9IHJlcXVpcmUoXCIuL2pzb24tdHlwaW5nc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInR5cGVvZkpzb25WYWx1ZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4ganNvbl90eXBpbmdzXzEudHlwZW9mSnNvblZhbHVlOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNKc29uT2JqZWN0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBqc29uX3R5cGluZ3NfMS5pc0pzb25PYmplY3Q7IH0gfSk7XG4vLyBCYXNlIDY0IGVuY29kaW5nXG52YXIgYmFzZTY0XzEgPSByZXF1aXJlKFwiLi9iYXNlNjRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJiYXNlNjRkZWNvZGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGJhc2U2NF8xLmJhc2U2NGRlY29kZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImJhc2U2NGVuY29kZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYmFzZTY0XzEuYmFzZTY0ZW5jb2RlOyB9IH0pO1xuLy8gVVRGOCBlbmNvZGluZ1xudmFyIHByb3RvYnVmanNfdXRmOF8xID0gcmVxdWlyZShcIi4vcHJvdG9idWZqcy11dGY4XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidXRmOHJlYWRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHByb3RvYnVmanNfdXRmOF8xLnV0ZjhyZWFkOyB9IH0pO1xuLy8gQmluYXJ5IGZvcm1hdCBjb250cmFjdHMsIG9wdGlvbnMgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcsIGZvciBleGFtcGxlXG52YXIgYmluYXJ5X2Zvcm1hdF9jb250cmFjdF8xID0gcmVxdWlyZShcIi4vYmluYXJ5LWZvcm1hdC1jb250cmFjdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIldpcmVUeXBlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBiaW5hcnlfZm9ybWF0X2NvbnRyYWN0XzEuV2lyZVR5cGU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtZXJnZUJpbmFyeU9wdGlvbnNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMS5tZXJnZUJpbmFyeU9wdGlvbnM7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJVbmtub3duRmllbGRIYW5kbGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBiaW5hcnlfZm9ybWF0X2NvbnRyYWN0XzEuVW5rbm93bkZpZWxkSGFuZGxlcjsgfSB9KTtcbi8vIFN0YW5kYXJkIElCaW5hcnlSZWFkZXIgaW1wbGVtZW50YXRpb25cbnZhciBiaW5hcnlfcmVhZGVyXzEgPSByZXF1aXJlKFwiLi9iaW5hcnktcmVhZGVyXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQmluYXJ5UmVhZGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBiaW5hcnlfcmVhZGVyXzEuQmluYXJ5UmVhZGVyOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYmluYXJ5UmVhZE9wdGlvbnNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGJpbmFyeV9yZWFkZXJfMS5iaW5hcnlSZWFkT3B0aW9uczsgfSB9KTtcbi8vIFN0YW5kYXJkIElCaW5hcnlXcml0ZXIgaW1wbGVtZW50YXRpb25cbnZhciBiaW5hcnlfd3JpdGVyXzEgPSByZXF1aXJlKFwiLi9iaW5hcnktd3JpdGVyXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQmluYXJ5V3JpdGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBiaW5hcnlfd3JpdGVyXzEuQmluYXJ5V3JpdGVyOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYmluYXJ5V3JpdGVPcHRpb25zXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBiaW5hcnlfd3JpdGVyXzEuYmluYXJ5V3JpdGVPcHRpb25zOyB9IH0pO1xuLy8gSW50NjQgYW5kIFVJbnQ2NCBpbXBsZW1lbnRhdGlvbnMgcmVxdWlyZWQgZm9yIHRoZSBiaW5hcnkgZm9ybWF0XG52YXIgcGJfbG9uZ18xID0gcmVxdWlyZShcIi4vcGItbG9uZ1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlBiTG9uZ1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcGJfbG9uZ18xLlBiTG9uZzsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlBiVUxvbmdcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBiX2xvbmdfMS5QYlVMb25nOyB9IH0pO1xuLy8gSlNPTiBmb3JtYXQgY29udHJhY3RzLCBvcHRpb25zIGZvciByZWFkaW5nIGFuZCB3cml0aW5nLCBmb3IgZXhhbXBsZVxudmFyIGpzb25fZm9ybWF0X2NvbnRyYWN0XzEgPSByZXF1aXJlKFwiLi9qc29uLWZvcm1hdC1jb250cmFjdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImpzb25SZWFkT3B0aW9uc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4ganNvbl9mb3JtYXRfY29udHJhY3RfMS5qc29uUmVhZE9wdGlvbnM7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJqc29uV3JpdGVPcHRpb25zXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBqc29uX2Zvcm1hdF9jb250cmFjdF8xLmpzb25Xcml0ZU9wdGlvbnM7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtZXJnZUpzb25PcHRpb25zXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBqc29uX2Zvcm1hdF9jb250cmFjdF8xLm1lcmdlSnNvbk9wdGlvbnM7IH0gfSk7XG4vLyBNZXNzYWdlIHR5cGUgY29udHJhY3RcbnZhciBtZXNzYWdlX3R5cGVfY29udHJhY3RfMSA9IHJlcXVpcmUoXCIuL21lc3NhZ2UtdHlwZS1jb250cmFjdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk1FU1NBR0VfVFlQRVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbWVzc2FnZV90eXBlX2NvbnRyYWN0XzEuTUVTU0FHRV9UWVBFOyB9IH0pO1xuLy8gTWVzc2FnZSB0eXBlIGltcGxlbWVudGF0aW9uIHZpYSByZWZsZWN0aW9uXG52YXIgbWVzc2FnZV90eXBlXzEgPSByZXF1aXJlKFwiLi9tZXNzYWdlLXR5cGVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJNZXNzYWdlVHlwZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbWVzc2FnZV90eXBlXzEuTWVzc2FnZVR5cGU7IH0gfSk7XG4vLyBSZWZsZWN0aW9uIGluZm8sIGdlbmVyYXRlZCBieSB0aGUgcGx1Z2luLCBleHBvc2VkIHRvIHRoZSB1c2VyLCB1c2VkIGJ5IHJlZmxlY3Rpb24gb3BzXG52YXIgcmVmbGVjdGlvbl9pbmZvXzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLWluZm9cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJTY2FsYXJUeXBlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTG9uZ1R5cGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlZmxlY3Rpb25faW5mb18xLkxvbmdUeXBlOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUmVwZWF0VHlwZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVmbGVjdGlvbl9pbmZvXzEuUmVwZWF0VHlwZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm5vcm1hbGl6ZUZpZWxkSW5mb1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVmbGVjdGlvbl9pbmZvXzEubm9ybWFsaXplRmllbGRJbmZvOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmVhZEZpZWxkT3B0aW9uc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVmbGVjdGlvbl9pbmZvXzEucmVhZEZpZWxkT3B0aW9uczsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlYWRGaWVsZE9wdGlvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVmbGVjdGlvbl9pbmZvXzEucmVhZEZpZWxkT3B0aW9uOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmVhZE1lc3NhZ2VPcHRpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlZmxlY3Rpb25faW5mb18xLnJlYWRNZXNzYWdlT3B0aW9uOyB9IH0pO1xuLy8gTWVzc2FnZSBvcGVyYXRpb25zIHZpYSByZWZsZWN0aW9uXG52YXIgcmVmbGVjdGlvbl90eXBlX2NoZWNrXzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLXR5cGUtY2hlY2tcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJSZWZsZWN0aW9uVHlwZUNoZWNrXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZWZsZWN0aW9uX3R5cGVfY2hlY2tfMS5SZWZsZWN0aW9uVHlwZUNoZWNrOyB9IH0pO1xudmFyIHJlZmxlY3Rpb25fY3JlYXRlXzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLWNyZWF0ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlZmxlY3Rpb25DcmVhdGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlZmxlY3Rpb25fY3JlYXRlXzEucmVmbGVjdGlvbkNyZWF0ZTsgfSB9KTtcbnZhciByZWZsZWN0aW9uX3NjYWxhcl9kZWZhdWx0XzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLXNjYWxhci1kZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmVmbGVjdGlvblNjYWxhckRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlZmxlY3Rpb25fc2NhbGFyX2RlZmF1bHRfMS5yZWZsZWN0aW9uU2NhbGFyRGVmYXVsdDsgfSB9KTtcbnZhciByZWZsZWN0aW9uX21lcmdlX3BhcnRpYWxfMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24tbWVyZ2UtcGFydGlhbFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlZmxlY3Rpb25NZXJnZVBhcnRpYWxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlZmxlY3Rpb25fbWVyZ2VfcGFydGlhbF8xLnJlZmxlY3Rpb25NZXJnZVBhcnRpYWw7IH0gfSk7XG52YXIgcmVmbGVjdGlvbl9lcXVhbHNfMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24tZXF1YWxzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmVmbGVjdGlvbkVxdWFsc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVmbGVjdGlvbl9lcXVhbHNfMS5yZWZsZWN0aW9uRXF1YWxzOyB9IH0pO1xudmFyIHJlZmxlY3Rpb25fYmluYXJ5X3JlYWRlcl8xID0gcmVxdWlyZShcIi4vcmVmbGVjdGlvbi1iaW5hcnktcmVhZGVyXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUmVmbGVjdGlvbkJpbmFyeVJlYWRlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVmbGVjdGlvbl9iaW5hcnlfcmVhZGVyXzEuUmVmbGVjdGlvbkJpbmFyeVJlYWRlcjsgfSB9KTtcbnZhciByZWZsZWN0aW9uX2JpbmFyeV93cml0ZXJfMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24tYmluYXJ5LXdyaXRlclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlJlZmxlY3Rpb25CaW5hcnlXcml0ZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlZmxlY3Rpb25fYmluYXJ5X3dyaXRlcl8xLlJlZmxlY3Rpb25CaW5hcnlXcml0ZXI7IH0gfSk7XG52YXIgcmVmbGVjdGlvbl9qc29uX3JlYWRlcl8xID0gcmVxdWlyZShcIi4vcmVmbGVjdGlvbi1qc29uLXJlYWRlclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlJlZmxlY3Rpb25Kc29uUmVhZGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZWZsZWN0aW9uX2pzb25fcmVhZGVyXzEuUmVmbGVjdGlvbkpzb25SZWFkZXI7IH0gfSk7XG52YXIgcmVmbGVjdGlvbl9qc29uX3dyaXRlcl8xID0gcmVxdWlyZShcIi4vcmVmbGVjdGlvbi1qc29uLXdyaXRlclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlJlZmxlY3Rpb25Kc29uV3JpdGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZWZsZWN0aW9uX2pzb25fd3JpdGVyXzEuUmVmbGVjdGlvbkpzb25Xcml0ZXI7IH0gfSk7XG52YXIgcmVmbGVjdGlvbl9jb250YWluc19tZXNzYWdlX3R5cGVfMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24tY29udGFpbnMtbWVzc2FnZS10eXBlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29udGFpbnNNZXNzYWdlVHlwZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVmbGVjdGlvbl9jb250YWluc19tZXNzYWdlX3R5cGVfMS5jb250YWluc01lc3NhZ2VUeXBlOyB9IH0pO1xuLy8gT25lb2YgaGVscGVyc1xudmFyIG9uZW9mXzEgPSByZXF1aXJlKFwiLi9vbmVvZlwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzT25lb2ZHcm91cFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gb25lb2ZfMS5pc09uZW9mR3JvdXA7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzZXRPbmVvZlZhbHVlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBvbmVvZl8xLnNldE9uZW9mVmFsdWU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnZXRPbmVvZlZhbHVlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBvbmVvZl8xLmdldE9uZW9mVmFsdWU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjbGVhck9uZW9mVmFsdWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9uZW9mXzEuY2xlYXJPbmVvZlZhbHVlOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZ2V0U2VsZWN0ZWRPbmVvZlZhbHVlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBvbmVvZl8xLmdldFNlbGVjdGVkT25lb2ZWYWx1ZTsgfSB9KTtcbi8vIEVudW0gb2JqZWN0IHR5cGUgZ3VhcmQgYW5kIHJlZmxlY3Rpb24gdXRpbCwgbWF5IGJlIGludGVyZXN0aW5nIHRvIHRoZSB1c2VyLlxudmFyIGVudW1fb2JqZWN0XzEgPSByZXF1aXJlKFwiLi9lbnVtLW9iamVjdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImxpc3RFbnVtVmFsdWVzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBlbnVtX29iamVjdF8xLmxpc3RFbnVtVmFsdWVzOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibGlzdEVudW1OYW1lc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZW51bV9vYmplY3RfMS5saXN0RW51bU5hbWVzOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibGlzdEVudW1OdW1iZXJzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBlbnVtX29iamVjdF8xLmxpc3RFbnVtTnVtYmVyczsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzRW51bU9iamVjdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZW51bV9vYmplY3RfMS5pc0VudW1PYmplY3Q7IH0gfSk7XG4vLyBsb3dlckNhbWVsQ2FzZSgpIGlzIGV4cG9ydGVkIGZvciBwbHVnaW4sIHJwYy1ydW50aW1lIGFuZCBvdGhlciBycGMgcGFja2FnZXNcbnZhciBsb3dlcl9jYW1lbF9jYXNlXzEgPSByZXF1aXJlKFwiLi9sb3dlci1jYW1lbC1jYXNlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibG93ZXJDYW1lbENhc2VcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGxvd2VyX2NhbWVsX2Nhc2VfMS5sb3dlckNhbWVsQ2FzZTsgfSB9KTtcbi8vIGFzc2VydGlvbiBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkIGZvciBwbHVnaW4sIG1heSBhbHNvIGJlIHVzZWZ1bCB0byB1c2VyXG52YXIgYXNzZXJ0XzEgPSByZXF1aXJlKFwiLi9hc3NlcnRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhc3NlcnRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFzc2VydF8xLmFzc2VydDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImFzc2VydE5ldmVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBhc3NlcnRfMS5hc3NlcnROZXZlcjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImFzc2VydEludDMyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBhc3NlcnRfMS5hc3NlcnRJbnQzMjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImFzc2VydFVJbnQzMlwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYXNzZXJ0XzEuYXNzZXJ0VUludDMyOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYXNzZXJ0RmxvYXQzMlwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYXNzZXJ0XzEuYXNzZXJ0RmxvYXQzMjsgfSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlRpbWVzdGFtcCA9IHZvaWQgMDtcbmNvbnN0IHJ1bnRpbWVfMSA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbmNvbnN0IHJ1bnRpbWVfMiA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbmNvbnN0IHJ1bnRpbWVfMyA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbmNvbnN0IHJ1bnRpbWVfNCA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbmNvbnN0IHJ1bnRpbWVfNSA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbmNvbnN0IHJ1bnRpbWVfNiA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbmNvbnN0IHJ1bnRpbWVfNyA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbi8vIEBnZW5lcmF0ZWQgbWVzc2FnZSB0eXBlIHdpdGggcmVmbGVjdGlvbiBpbmZvcm1hdGlvbiwgbWF5IHByb3ZpZGUgc3BlZWQgb3B0aW1pemVkIG1ldGhvZHNcbmNsYXNzIFRpbWVzdGFtcCRUeXBlIGV4dGVuZHMgcnVudGltZV83Lk1lc3NhZ2VUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoXCJnb29nbGUucHJvdG9idWYuVGltZXN0YW1wXCIsIFtcbiAgICAgICAgICAgIHsgbm86IDEsIG5hbWU6IFwic2Vjb25kc1wiLCBraW5kOiBcInNjYWxhclwiLCBUOiAzIC8qU2NhbGFyVHlwZS5JTlQ2NCovIH0sXG4gICAgICAgICAgICB7IG5vOiAyLCBuYW1lOiBcIm5hbm9zXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDUgLypTY2FsYXJUeXBlLklOVDMyKi8gfVxuICAgICAgICBdKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBgVGltZXN0YW1wYCBmb3IgdGhlIGN1cnJlbnQgdGltZS5cbiAgICAgKi9cbiAgICBub3coKSB7XG4gICAgICAgIGNvbnN0IG1zZyA9IHRoaXMuY3JlYXRlKCk7XG4gICAgICAgIGNvbnN0IG1zID0gRGF0ZS5ub3coKTtcbiAgICAgICAgbXNnLnNlY29uZHMgPSBydW50aW1lXzYuUGJMb25nLmZyb20oTWF0aC5mbG9vcihtcyAvIDEwMDApKS50b1N0cmluZygpO1xuICAgICAgICBtc2cubmFub3MgPSAobXMgJSAxMDAwKSAqIDEwMDAwMDA7XG4gICAgICAgIHJldHVybiBtc2c7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGEgYFRpbWVzdGFtcGAgdG8gYSBKYXZhU2NyaXB0IERhdGUuXG4gICAgICovXG4gICAgdG9EYXRlKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHJ1bnRpbWVfNi5QYkxvbmcuZnJvbShtZXNzYWdlLnNlY29uZHMpLnRvTnVtYmVyKCkgKiAxMDAwICsgTWF0aC5jZWlsKG1lc3NhZ2UubmFub3MgLyAxMDAwMDAwKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGEgSmF2YVNjcmlwdCBEYXRlIHRvIGEgYFRpbWVzdGFtcGAuXG4gICAgICovXG4gICAgZnJvbURhdGUoZGF0ZSkge1xuICAgICAgICBjb25zdCBtc2cgPSB0aGlzLmNyZWF0ZSgpO1xuICAgICAgICBjb25zdCBtcyA9IGRhdGUuZ2V0VGltZSgpO1xuICAgICAgICBtc2cuc2Vjb25kcyA9IHJ1bnRpbWVfNi5QYkxvbmcuZnJvbShNYXRoLmZsb29yKG1zIC8gMTAwMCkpLnRvU3RyaW5nKCk7XG4gICAgICAgIG1zZy5uYW5vcyA9IChtcyAlIDEwMDApICogMTAwMDAwMDtcbiAgICAgICAgcmV0dXJuIG1zZztcbiAgICB9XG4gICAgLyoqXG4gICAgICogSW4gSlNPTiBmb3JtYXQsIHRoZSBgVGltZXN0YW1wYCB0eXBlIGlzIGVuY29kZWQgYXMgYSBzdHJpbmdcbiAgICAgKiBpbiB0aGUgUkZDIDMzMzkgZm9ybWF0LlxuICAgICAqL1xuICAgIGludGVybmFsSnNvbldyaXRlKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgbGV0IG1zID0gcnVudGltZV82LlBiTG9uZy5mcm9tKG1lc3NhZ2Uuc2Vjb25kcykudG9OdW1iZXIoKSAqIDEwMDA7XG4gICAgICAgIGlmIChtcyA8IERhdGUucGFyc2UoXCIwMDAxLTAxLTAxVDAwOjAwOjAwWlwiKSB8fCBtcyA+IERhdGUucGFyc2UoXCI5OTk5LTEyLTMxVDIzOjU5OjU5WlwiKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBlbmNvZGUgVGltZXN0YW1wIHRvIEpTT04uIE11c3QgYmUgZnJvbSAwMDAxLTAxLTAxVDAwOjAwOjAwWiB0byA5OTk5LTEyLTMxVDIzOjU5OjU5WiBpbmNsdXNpdmUuXCIpO1xuICAgICAgICBpZiAobWVzc2FnZS5uYW5vcyA8IDApXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gZW5jb2RlIGludmFsaWQgVGltZXN0YW1wIHRvIEpTT04uIE5hbm9zIG11c3Qgbm90IGJlIG5lZ2F0aXZlLlwiKTtcbiAgICAgICAgbGV0IHogPSBcIlpcIjtcbiAgICAgICAgaWYgKG1lc3NhZ2UubmFub3MgPiAwKSB7XG4gICAgICAgICAgICBsZXQgbmFub3NTdHIgPSAobWVzc2FnZS5uYW5vcyArIDEwMDAwMDAwMDApLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDEpO1xuICAgICAgICAgICAgaWYgKG5hbm9zU3RyLnN1YnN0cmluZygzKSA9PT0gXCIwMDAwMDBcIilcbiAgICAgICAgICAgICAgICB6ID0gXCIuXCIgKyBuYW5vc1N0ci5zdWJzdHJpbmcoMCwgMykgKyBcIlpcIjtcbiAgICAgICAgICAgIGVsc2UgaWYgKG5hbm9zU3RyLnN1YnN0cmluZyg2KSA9PT0gXCIwMDBcIilcbiAgICAgICAgICAgICAgICB6ID0gXCIuXCIgKyBuYW5vc1N0ci5zdWJzdHJpbmcoMCwgNikgKyBcIlpcIjtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB6ID0gXCIuXCIgKyBuYW5vc1N0ciArIFwiWlwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShtcykudG9JU09TdHJpbmcoKS5yZXBsYWNlKFwiLjAwMFpcIiwgeik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEluIEpTT04gZm9ybWF0LCB0aGUgYFRpbWVzdGFtcGAgdHlwZSBpcyBlbmNvZGVkIGFzIGEgc3RyaW5nXG4gICAgICogaW4gdGhlIFJGQyAzMzM5IGZvcm1hdC5cbiAgICAgKi9cbiAgICBpbnRlcm5hbEpzb25SZWFkKGpzb24sIG9wdGlvbnMsIHRhcmdldCkge1xuICAgICAgICBpZiAodHlwZW9mIGpzb24gIT09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gcGFyc2UgVGltZXN0YW1wIGZyb20gSlNPTiBcIiArICgwLCBydW50aW1lXzUudHlwZW9mSnNvblZhbHVlKShqc29uKSArIFwiLlwiKTtcbiAgICAgICAgbGV0IG1hdGNoZXMgPSBqc29uLm1hdGNoKC9eKFswLTldezR9KS0oWzAtOV17Mn0pLShbMC05XXsyfSlUKFswLTldezJ9KTooWzAtOV17Mn0pOihbMC05XXsyfSkoPzpafFxcLihbMC05XXszLDl9KVp8KFsrLV1bMC05XVswLTldOlswLTldWzAtOV0pKSQvKTtcbiAgICAgICAgaWYgKCFtYXRjaGVzKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIHBhcnNlIFRpbWVzdGFtcCBmcm9tIEpTT04uIEludmFsaWQgZm9ybWF0LlwiKTtcbiAgICAgICAgbGV0IG1zID0gRGF0ZS5wYXJzZShtYXRjaGVzWzFdICsgXCItXCIgKyBtYXRjaGVzWzJdICsgXCItXCIgKyBtYXRjaGVzWzNdICsgXCJUXCIgKyBtYXRjaGVzWzRdICsgXCI6XCIgKyBtYXRjaGVzWzVdICsgXCI6XCIgKyBtYXRjaGVzWzZdICsgKG1hdGNoZXNbOF0gPyBtYXRjaGVzWzhdIDogXCJaXCIpKTtcbiAgICAgICAgaWYgKE51bWJlci5pc05hTihtcykpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gcGFyc2UgVGltZXN0YW1wIGZyb20gSlNPTi4gSW52YWxpZCB2YWx1ZS5cIik7XG4gICAgICAgIGlmIChtcyA8IERhdGUucGFyc2UoXCIwMDAxLTAxLTAxVDAwOjAwOjAwWlwiKSB8fCBtcyA+IERhdGUucGFyc2UoXCI5OTk5LTEyLTMxVDIzOjU5OjU5WlwiKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBnbG9iYWxUaGlzLkVycm9yKFwiVW5hYmxlIHRvIHBhcnNlIFRpbWVzdGFtcCBmcm9tIEpTT04uIE11c3QgYmUgZnJvbSAwMDAxLTAxLTAxVDAwOjAwOjAwWiB0byA5OTk5LTEyLTMxVDIzOjU5OjU5WiBpbmNsdXNpdmUuXCIpO1xuICAgICAgICBpZiAoIXRhcmdldClcbiAgICAgICAgICAgIHRhcmdldCA9IHRoaXMuY3JlYXRlKCk7XG4gICAgICAgIHRhcmdldC5zZWNvbmRzID0gcnVudGltZV82LlBiTG9uZy5mcm9tKG1zIC8gMTAwMCkudG9TdHJpbmcoKTtcbiAgICAgICAgdGFyZ2V0Lm5hbm9zID0gMDtcbiAgICAgICAgaWYgKG1hdGNoZXNbN10pXG4gICAgICAgICAgICB0YXJnZXQubmFub3MgPSAocGFyc2VJbnQoXCIxXCIgKyBtYXRjaGVzWzddICsgXCIwXCIucmVwZWF0KDkgLSBtYXRjaGVzWzddLmxlbmd0aCkpIC0gMTAwMDAwMDAwMCk7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuICAgIGNyZWF0ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0geyBzZWNvbmRzOiBcIjBcIiwgbmFub3M6IDAgfTtcbiAgICAgICAgZ2xvYmFsVGhpcy5PYmplY3QuZGVmaW5lUHJvcGVydHkobWVzc2FnZSwgcnVudGltZV80Lk1FU1NBR0VfVFlQRSwgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRoaXMgfSk7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgKDAsIHJ1bnRpbWVfMy5yZWZsZWN0aW9uTWVyZ2VQYXJ0aWFsKSh0aGlzLCBtZXNzYWdlLCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVJlYWQocmVhZGVyLCBsZW5ndGgsIG9wdGlvbnMsIHRhcmdldCkge1xuICAgICAgICBsZXQgbWVzc2FnZSA9IHRhcmdldCAhPT0gbnVsbCAmJiB0YXJnZXQgIT09IHZvaWQgMCA/IHRhcmdldCA6IHRoaXMuY3JlYXRlKCksIGVuZCA9IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICBsZXQgW2ZpZWxkTm8sIHdpcmVUeXBlXSA9IHJlYWRlci50YWcoKTtcbiAgICAgICAgICAgIHN3aXRjaCAoZmllbGRObykge1xuICAgICAgICAgICAgICAgIGNhc2UgLyogaW50NjQgc2Vjb25kcyAqLyAxOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnNlY29uZHMgPSByZWFkZXIuaW50NjQoKS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIC8qIGludDMyIG5hbm9zICovIDI6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UubmFub3MgPSByZWFkZXIuaW50MzIoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBvcHRpb25zLnJlYWRVbmtub3duRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ID09PSBcInRocm93XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZ2xvYmFsVGhpcy5FcnJvcihgVW5rbm93biBmaWVsZCAke2ZpZWxkTm99ICh3aXJlIHR5cGUgJHt3aXJlVHlwZX0pIGZvciAke3RoaXMudHlwZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkID0gcmVhZGVyLnNraXAod2lyZVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAodSA9PT0gdHJ1ZSA/IHJ1bnRpbWVfMi5Vbmtub3duRmllbGRIYW5kbGVyLm9uUmVhZCA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIGZpZWxkTm8sIHdpcmVUeXBlLCBkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLCB3cml0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgLyogaW50NjQgc2Vjb25kcyA9IDE7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLnNlY29uZHMgIT09IFwiMFwiKVxuICAgICAgICAgICAgd3JpdGVyLnRhZygxLCBydW50aW1lXzEuV2lyZVR5cGUuVmFyaW50KS5pbnQ2NChtZXNzYWdlLnNlY29uZHMpO1xuICAgICAgICAvKiBpbnQzMiBuYW5vcyA9IDI7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLm5hbm9zICE9PSAwKVxuICAgICAgICAgICAgd3JpdGVyLnRhZygyLCBydW50aW1lXzEuV2lyZVR5cGUuVmFyaW50KS5pbnQzMihtZXNzYWdlLm5hbm9zKTtcbiAgICAgICAgbGV0IHUgPSBvcHRpb25zLndyaXRlVW5rbm93bkZpZWxkcztcbiAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgKHUgPT0gdHJ1ZSA/IHJ1bnRpbWVfMi5Vbmtub3duRmllbGRIYW5kbGVyLm9uV3JpdGUgOiB1KSh0aGlzLnR5cGVOYW1lLCBtZXNzYWdlLCB3cml0ZXIpO1xuICAgICAgICByZXR1cm4gd3JpdGVyO1xuICAgIH1cbn1cbi8qKlxuICogQGdlbmVyYXRlZCBNZXNzYWdlVHlwZSBmb3IgcHJvdG9idWYgbWVzc2FnZSBnb29nbGUucHJvdG9idWYuVGltZXN0YW1wXG4gKi9cbmV4cG9ydHMuVGltZXN0YW1wID0gbmV3IFRpbWVzdGFtcCRUeXBlKCk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10aW1lc3RhbXAuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQnl0ZXNWYWx1ZSA9IGV4cG9ydHMuU3RyaW5nVmFsdWUgPSBleHBvcnRzLkJvb2xWYWx1ZSA9IGV4cG9ydHMuVUludDMyVmFsdWUgPSBleHBvcnRzLkludDMyVmFsdWUgPSBleHBvcnRzLlVJbnQ2NFZhbHVlID0gZXhwb3J0cy5JbnQ2NFZhbHVlID0gZXhwb3J0cy5GbG9hdFZhbHVlID0gZXhwb3J0cy5Eb3VibGVWYWx1ZSA9IHZvaWQgMDtcbi8vIEBnZW5lcmF0ZWQgYnkgcHJvdG9idWYtdHMgMi45LjEgd2l0aCBwYXJhbWV0ZXIgbG9uZ190eXBlX3N0cmluZyxjbGllbnRfbm9uZSxnZW5lcmF0ZV9kZXBlbmRlbmNpZXNcbi8vIEBnZW5lcmF0ZWQgZnJvbSBwcm90b2J1ZiBmaWxlIFwiZ29vZ2xlL3Byb3RvYnVmL3dyYXBwZXJzLnByb3RvXCIgKHBhY2thZ2UgXCJnb29nbGUucHJvdG9idWZcIiwgc3ludGF4IHByb3RvMylcbi8vIHRzbGludDpkaXNhYmxlXG4vL1xuLy8gUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0XG4vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvXG4vL1xuLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlXG4vLyBtZXQ6XG4vL1xuLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbi8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbi8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmVcbi8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXJcbi8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGVcbi8vIGRpc3RyaWJ1dGlvbi5cbi8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHNcbi8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tXG4vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuLy9cbi8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlNcbi8vIFwiQVMgSVNcIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Rcbi8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUlxuLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFRcbi8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLFxuLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVFxuLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsXG4vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTllcbi8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbi8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRVxuLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbi8vXG4vL1xuLy8gV3JhcHBlcnMgZm9yIHByaW1pdGl2ZSAobm9uLW1lc3NhZ2UpIHR5cGVzLiBUaGVzZSB0eXBlcyBhcmUgdXNlZnVsXG4vLyBmb3IgZW1iZWRkaW5nIHByaW1pdGl2ZXMgaW4gdGhlIGBnb29nbGUucHJvdG9idWYuQW55YCB0eXBlIGFuZCBmb3IgcGxhY2VzXG4vLyB3aGVyZSB3ZSBuZWVkIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlIGFic2VuY2Ugb2YgYSBwcmltaXRpdmVcbi8vIHR5cGVkIGZpZWxkIGFuZCBpdHMgZGVmYXVsdCB2YWx1ZS5cbi8vXG5jb25zdCBydW50aW1lXzEgPSByZXF1aXJlKFwiQHByb3RvYnVmLXRzL3J1bnRpbWVcIik7XG5jb25zdCBydW50aW1lXzIgPSByZXF1aXJlKFwiQHByb3RvYnVmLXRzL3J1bnRpbWVcIik7XG5jb25zdCBydW50aW1lXzMgPSByZXF1aXJlKFwiQHByb3RvYnVmLXRzL3J1bnRpbWVcIik7XG5jb25zdCBydW50aW1lXzQgPSByZXF1aXJlKFwiQHByb3RvYnVmLXRzL3J1bnRpbWVcIik7XG5jb25zdCBydW50aW1lXzUgPSByZXF1aXJlKFwiQHByb3RvYnVmLXRzL3J1bnRpbWVcIik7XG5jb25zdCBydW50aW1lXzYgPSByZXF1aXJlKFwiQHByb3RvYnVmLXRzL3J1bnRpbWVcIik7XG5jb25zdCBydW50aW1lXzcgPSByZXF1aXJlKFwiQHByb3RvYnVmLXRzL3J1bnRpbWVcIik7XG4vLyBAZ2VuZXJhdGVkIG1lc3NhZ2UgdHlwZSB3aXRoIHJlZmxlY3Rpb24gaW5mb3JtYXRpb24sIG1heSBwcm92aWRlIHNwZWVkIG9wdGltaXplZCBtZXRob2RzXG5jbGFzcyBEb3VibGVWYWx1ZSRUeXBlIGV4dGVuZHMgcnVudGltZV83Lk1lc3NhZ2VUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoXCJnb29nbGUucHJvdG9idWYuRG91YmxlVmFsdWVcIiwgW1xuICAgICAgICAgICAgeyBubzogMSwgbmFtZTogXCJ2YWx1ZVwiLCBraW5kOiBcInNjYWxhclwiLCBUOiAxIC8qU2NhbGFyVHlwZS5ET1VCTEUqLyB9XG4gICAgICAgIF0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFbmNvZGUgYERvdWJsZVZhbHVlYCB0byBKU09OIG51bWJlci5cbiAgICAgKi9cbiAgICBpbnRlcm5hbEpzb25Xcml0ZShtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZkpzb25Xcml0ZXIuc2NhbGFyKDIsIG1lc3NhZ2UudmFsdWUsIFwidmFsdWVcIiwgZmFsc2UsIHRydWUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWNvZGUgYERvdWJsZVZhbHVlYCBmcm9tIEpTT04gbnVtYmVyLlxuICAgICAqL1xuICAgIGludGVybmFsSnNvblJlYWQoanNvbiwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGlmICghdGFyZ2V0KVxuICAgICAgICAgICAgdGFyZ2V0ID0gdGhpcy5jcmVhdGUoKTtcbiAgICAgICAgdGFyZ2V0LnZhbHVlID0gdGhpcy5yZWZKc29uUmVhZGVyLnNjYWxhcihqc29uLCAxLCB1bmRlZmluZWQsIFwidmFsdWVcIik7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuICAgIGNyZWF0ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0geyB2YWx1ZTogMCB9O1xuICAgICAgICBnbG9iYWxUaGlzLk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZXNzYWdlLCBydW50aW1lXzYuTUVTU0FHRV9UWVBFLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdGhpcyB9KTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAoMCwgcnVudGltZV81LnJlZmxlY3Rpb25NZXJnZVBhcnRpYWwpKHRoaXMsIG1lc3NhZ2UsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5UmVhZChyZWFkZXIsIGxlbmd0aCwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGxldCBtZXNzYWdlID0gdGFyZ2V0ICE9PSBudWxsICYmIHRhcmdldCAhPT0gdm9pZCAwID8gdGFyZ2V0IDogdGhpcy5jcmVhdGUoKSwgZW5kID0gcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgIGxldCBbZmllbGRObywgd2lyZVR5cGVdID0gcmVhZGVyLnRhZygpO1xuICAgICAgICAgICAgc3dpdGNoIChmaWVsZE5vKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBkb3VibGUgdmFsdWUgKi8gMTpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS52YWx1ZSA9IHJlYWRlci5kb3VibGUoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBvcHRpb25zLnJlYWRVbmtub3duRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ID09PSBcInRocm93XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZ2xvYmFsVGhpcy5FcnJvcihgVW5rbm93biBmaWVsZCAke2ZpZWxkTm99ICh3aXJlIHR5cGUgJHt3aXJlVHlwZX0pIGZvciAke3RoaXMudHlwZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkID0gcmVhZGVyLnNraXAod2lyZVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAodSA9PT0gdHJ1ZSA/IHJ1bnRpbWVfNC5Vbmtub3duRmllbGRIYW5kbGVyLm9uUmVhZCA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIGZpZWxkTm8sIHdpcmVUeXBlLCBkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLCB3cml0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgLyogZG91YmxlIHZhbHVlID0gMTsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2UudmFsdWUgIT09IDApXG4gICAgICAgICAgICB3cml0ZXIudGFnKDEsIHJ1bnRpbWVfMy5XaXJlVHlwZS5CaXQ2NCkuZG91YmxlKG1lc3NhZ2UudmFsdWUpO1xuICAgICAgICBsZXQgdSA9IG9wdGlvbnMud3JpdGVVbmtub3duRmllbGRzO1xuICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAodSA9PSB0cnVlID8gcnVudGltZV80LlVua25vd25GaWVsZEhhbmRsZXIub25Xcml0ZSA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIHdyaXRlcik7XG4gICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgfVxufVxuLyoqXG4gKiBAZ2VuZXJhdGVkIE1lc3NhZ2VUeXBlIGZvciBwcm90b2J1ZiBtZXNzYWdlIGdvb2dsZS5wcm90b2J1Zi5Eb3VibGVWYWx1ZVxuICovXG5leHBvcnRzLkRvdWJsZVZhbHVlID0gbmV3IERvdWJsZVZhbHVlJFR5cGUoKTtcbi8vIEBnZW5lcmF0ZWQgbWVzc2FnZSB0eXBlIHdpdGggcmVmbGVjdGlvbiBpbmZvcm1hdGlvbiwgbWF5IHByb3ZpZGUgc3BlZWQgb3B0aW1pemVkIG1ldGhvZHNcbmNsYXNzIEZsb2F0VmFsdWUkVHlwZSBleHRlbmRzIHJ1bnRpbWVfNy5NZXNzYWdlVHlwZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiZ29vZ2xlLnByb3RvYnVmLkZsb2F0VmFsdWVcIiwgW1xuICAgICAgICAgICAgeyBubzogMSwgbmFtZTogXCJ2YWx1ZVwiLCBraW5kOiBcInNjYWxhclwiLCBUOiAyIC8qU2NhbGFyVHlwZS5GTE9BVCovIH1cbiAgICAgICAgXSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEVuY29kZSBgRmxvYXRWYWx1ZWAgdG8gSlNPTiBudW1iZXIuXG4gICAgICovXG4gICAgaW50ZXJuYWxKc29uV3JpdGUobWVzc2FnZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWZKc29uV3JpdGVyLnNjYWxhcigxLCBtZXNzYWdlLnZhbHVlLCBcInZhbHVlXCIsIGZhbHNlLCB0cnVlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVjb2RlIGBGbG9hdFZhbHVlYCBmcm9tIEpTT04gbnVtYmVyLlxuICAgICAqL1xuICAgIGludGVybmFsSnNvblJlYWQoanNvbiwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGlmICghdGFyZ2V0KVxuICAgICAgICAgICAgdGFyZ2V0ID0gdGhpcy5jcmVhdGUoKTtcbiAgICAgICAgdGFyZ2V0LnZhbHVlID0gdGhpcy5yZWZKc29uUmVhZGVyLnNjYWxhcihqc29uLCAxLCB1bmRlZmluZWQsIFwidmFsdWVcIik7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuICAgIGNyZWF0ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0geyB2YWx1ZTogMCB9O1xuICAgICAgICBnbG9iYWxUaGlzLk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZXNzYWdlLCBydW50aW1lXzYuTUVTU0FHRV9UWVBFLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdGhpcyB9KTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAoMCwgcnVudGltZV81LnJlZmxlY3Rpb25NZXJnZVBhcnRpYWwpKHRoaXMsIG1lc3NhZ2UsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5UmVhZChyZWFkZXIsIGxlbmd0aCwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGxldCBtZXNzYWdlID0gdGFyZ2V0ICE9PSBudWxsICYmIHRhcmdldCAhPT0gdm9pZCAwID8gdGFyZ2V0IDogdGhpcy5jcmVhdGUoKSwgZW5kID0gcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgIGxldCBbZmllbGRObywgd2lyZVR5cGVdID0gcmVhZGVyLnRhZygpO1xuICAgICAgICAgICAgc3dpdGNoIChmaWVsZE5vKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBmbG9hdCB2YWx1ZSAqLyAxOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnZhbHVlID0gcmVhZGVyLmZsb2F0KCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGxldCB1ID0gb3B0aW9ucy5yZWFkVW5rbm93bkZpZWxkO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSA9PT0gXCJ0aHJvd1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGdsb2JhbFRoaXMuRXJyb3IoYFVua25vd24gZmllbGQgJHtmaWVsZE5vfSAod2lyZSB0eXBlICR7d2lyZVR5cGV9KSBmb3IgJHt0aGlzLnR5cGVOYW1lfWApO1xuICAgICAgICAgICAgICAgICAgICBsZXQgZCA9IHJlYWRlci5za2lwKHdpcmVUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgKHUgPT09IHRydWUgPyBydW50aW1lXzQuVW5rbm93bkZpZWxkSGFuZGxlci5vblJlYWQgOiB1KSh0aGlzLnR5cGVOYW1lLCBtZXNzYWdlLCBmaWVsZE5vLCB3aXJlVHlwZSwgZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5V3JpdGUobWVzc2FnZSwgd3JpdGVyLCBvcHRpb25zKSB7XG4gICAgICAgIC8qIGZsb2F0IHZhbHVlID0gMTsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2UudmFsdWUgIT09IDApXG4gICAgICAgICAgICB3cml0ZXIudGFnKDEsIHJ1bnRpbWVfMy5XaXJlVHlwZS5CaXQzMikuZmxvYXQobWVzc2FnZS52YWx1ZSk7XG4gICAgICAgIGxldCB1ID0gb3B0aW9ucy53cml0ZVVua25vd25GaWVsZHM7XG4gICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICh1ID09IHRydWUgPyBydW50aW1lXzQuVW5rbm93bkZpZWxkSGFuZGxlci5vbldyaXRlIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgd3JpdGVyKTtcbiAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICB9XG59XG4vKipcbiAqIEBnZW5lcmF0ZWQgTWVzc2FnZVR5cGUgZm9yIHByb3RvYnVmIG1lc3NhZ2UgZ29vZ2xlLnByb3RvYnVmLkZsb2F0VmFsdWVcbiAqL1xuZXhwb3J0cy5GbG9hdFZhbHVlID0gbmV3IEZsb2F0VmFsdWUkVHlwZSgpO1xuLy8gQGdlbmVyYXRlZCBtZXNzYWdlIHR5cGUgd2l0aCByZWZsZWN0aW9uIGluZm9ybWF0aW9uLCBtYXkgcHJvdmlkZSBzcGVlZCBvcHRpbWl6ZWQgbWV0aG9kc1xuY2xhc3MgSW50NjRWYWx1ZSRUeXBlIGV4dGVuZHMgcnVudGltZV83Lk1lc3NhZ2VUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoXCJnb29nbGUucHJvdG9idWYuSW50NjRWYWx1ZVwiLCBbXG4gICAgICAgICAgICB7IG5vOiAxLCBuYW1lOiBcInZhbHVlXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDMgLypTY2FsYXJUeXBlLklOVDY0Ki8gfVxuICAgICAgICBdKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRW5jb2RlIGBJbnQ2NFZhbHVlYCB0byBKU09OIHN0cmluZy5cbiAgICAgKi9cbiAgICBpbnRlcm5hbEpzb25Xcml0ZShtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZkpzb25Xcml0ZXIuc2NhbGFyKHJ1bnRpbWVfMS5TY2FsYXJUeXBlLklOVDY0LCBtZXNzYWdlLnZhbHVlLCBcInZhbHVlXCIsIGZhbHNlLCB0cnVlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVjb2RlIGBJbnQ2NFZhbHVlYCBmcm9tIEpTT04gc3RyaW5nLlxuICAgICAqL1xuICAgIGludGVybmFsSnNvblJlYWQoanNvbiwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGlmICghdGFyZ2V0KVxuICAgICAgICAgICAgdGFyZ2V0ID0gdGhpcy5jcmVhdGUoKTtcbiAgICAgICAgdGFyZ2V0LnZhbHVlID0gdGhpcy5yZWZKc29uUmVhZGVyLnNjYWxhcihqc29uLCBydW50aW1lXzEuU2NhbGFyVHlwZS5JTlQ2NCwgcnVudGltZV8yLkxvbmdUeXBlLlNUUklORywgXCJ2YWx1ZVwiKTtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG4gICAgY3JlYXRlKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7IHZhbHVlOiBcIjBcIiB9O1xuICAgICAgICBnbG9iYWxUaGlzLk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZXNzYWdlLCBydW50aW1lXzYuTUVTU0FHRV9UWVBFLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdGhpcyB9KTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAoMCwgcnVudGltZV81LnJlZmxlY3Rpb25NZXJnZVBhcnRpYWwpKHRoaXMsIG1lc3NhZ2UsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5UmVhZChyZWFkZXIsIGxlbmd0aCwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGxldCBtZXNzYWdlID0gdGFyZ2V0ICE9PSBudWxsICYmIHRhcmdldCAhPT0gdm9pZCAwID8gdGFyZ2V0IDogdGhpcy5jcmVhdGUoKSwgZW5kID0gcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgIGxldCBbZmllbGRObywgd2lyZVR5cGVdID0gcmVhZGVyLnRhZygpO1xuICAgICAgICAgICAgc3dpdGNoIChmaWVsZE5vKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBpbnQ2NCB2YWx1ZSAqLyAxOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnZhbHVlID0gcmVhZGVyLmludDY0KCkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBvcHRpb25zLnJlYWRVbmtub3duRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ID09PSBcInRocm93XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZ2xvYmFsVGhpcy5FcnJvcihgVW5rbm93biBmaWVsZCAke2ZpZWxkTm99ICh3aXJlIHR5cGUgJHt3aXJlVHlwZX0pIGZvciAke3RoaXMudHlwZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkID0gcmVhZGVyLnNraXAod2lyZVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAodSA9PT0gdHJ1ZSA/IHJ1bnRpbWVfNC5Vbmtub3duRmllbGRIYW5kbGVyLm9uUmVhZCA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIGZpZWxkTm8sIHdpcmVUeXBlLCBkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLCB3cml0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgLyogaW50NjQgdmFsdWUgPSAxOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS52YWx1ZSAhPT0gXCIwXCIpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDEsIHJ1bnRpbWVfMy5XaXJlVHlwZS5WYXJpbnQpLmludDY0KG1lc3NhZ2UudmFsdWUpO1xuICAgICAgICBsZXQgdSA9IG9wdGlvbnMud3JpdGVVbmtub3duRmllbGRzO1xuICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAodSA9PSB0cnVlID8gcnVudGltZV80LlVua25vd25GaWVsZEhhbmRsZXIub25Xcml0ZSA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIHdyaXRlcik7XG4gICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgfVxufVxuLyoqXG4gKiBAZ2VuZXJhdGVkIE1lc3NhZ2VUeXBlIGZvciBwcm90b2J1ZiBtZXNzYWdlIGdvb2dsZS5wcm90b2J1Zi5JbnQ2NFZhbHVlXG4gKi9cbmV4cG9ydHMuSW50NjRWYWx1ZSA9IG5ldyBJbnQ2NFZhbHVlJFR5cGUoKTtcbi8vIEBnZW5lcmF0ZWQgbWVzc2FnZSB0eXBlIHdpdGggcmVmbGVjdGlvbiBpbmZvcm1hdGlvbiwgbWF5IHByb3ZpZGUgc3BlZWQgb3B0aW1pemVkIG1ldGhvZHNcbmNsYXNzIFVJbnQ2NFZhbHVlJFR5cGUgZXh0ZW5kcyBydW50aW1lXzcuTWVzc2FnZVR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcImdvb2dsZS5wcm90b2J1Zi5VSW50NjRWYWx1ZVwiLCBbXG4gICAgICAgICAgICB7IG5vOiAxLCBuYW1lOiBcInZhbHVlXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDQgLypTY2FsYXJUeXBlLlVJTlQ2NCovIH1cbiAgICAgICAgXSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEVuY29kZSBgVUludDY0VmFsdWVgIHRvIEpTT04gc3RyaW5nLlxuICAgICAqL1xuICAgIGludGVybmFsSnNvbldyaXRlKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmSnNvbldyaXRlci5zY2FsYXIocnVudGltZV8xLlNjYWxhclR5cGUuVUlOVDY0LCBtZXNzYWdlLnZhbHVlLCBcInZhbHVlXCIsIGZhbHNlLCB0cnVlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVjb2RlIGBVSW50NjRWYWx1ZWAgZnJvbSBKU09OIHN0cmluZy5cbiAgICAgKi9cbiAgICBpbnRlcm5hbEpzb25SZWFkKGpzb24sIG9wdGlvbnMsIHRhcmdldCkge1xuICAgICAgICBpZiAoIXRhcmdldClcbiAgICAgICAgICAgIHRhcmdldCA9IHRoaXMuY3JlYXRlKCk7XG4gICAgICAgIHRhcmdldC52YWx1ZSA9IHRoaXMucmVmSnNvblJlYWRlci5zY2FsYXIoanNvbiwgcnVudGltZV8xLlNjYWxhclR5cGUuVUlOVDY0LCBydW50aW1lXzIuTG9uZ1R5cGUuU1RSSU5HLCBcInZhbHVlXCIpO1xuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cbiAgICBjcmVhdGUodmFsdWUpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IHsgdmFsdWU6IFwiMFwiIH07XG4gICAgICAgIGdsb2JhbFRoaXMuT2JqZWN0LmRlZmluZVByb3BlcnR5KG1lc3NhZ2UsIHJ1bnRpbWVfNi5NRVNTQUdFX1RZUEUsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0aGlzIH0pO1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICgwLCBydW50aW1lXzUucmVmbGVjdGlvbk1lcmdlUGFydGlhbCkodGhpcywgbWVzc2FnZSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlSZWFkKHJlYWRlciwgbGVuZ3RoLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSB0YXJnZXQgIT09IG51bGwgJiYgdGFyZ2V0ICE9PSB2b2lkIDAgPyB0YXJnZXQgOiB0aGlzLmNyZWF0ZSgpLCBlbmQgPSByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgbGV0IFtmaWVsZE5vLCB3aXJlVHlwZV0gPSByZWFkZXIudGFnKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkTm8pIHtcbiAgICAgICAgICAgICAgICBjYXNlIC8qIHVpbnQ2NCB2YWx1ZSAqLyAxOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnZhbHVlID0gcmVhZGVyLnVpbnQ2NCgpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGxldCB1ID0gb3B0aW9ucy5yZWFkVW5rbm93bkZpZWxkO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSA9PT0gXCJ0aHJvd1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGdsb2JhbFRoaXMuRXJyb3IoYFVua25vd24gZmllbGQgJHtmaWVsZE5vfSAod2lyZSB0eXBlICR7d2lyZVR5cGV9KSBmb3IgJHt0aGlzLnR5cGVOYW1lfWApO1xuICAgICAgICAgICAgICAgICAgICBsZXQgZCA9IHJlYWRlci5za2lwKHdpcmVUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgKHUgPT09IHRydWUgPyBydW50aW1lXzQuVW5rbm93bkZpZWxkSGFuZGxlci5vblJlYWQgOiB1KSh0aGlzLnR5cGVOYW1lLCBtZXNzYWdlLCBmaWVsZE5vLCB3aXJlVHlwZSwgZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5V3JpdGUobWVzc2FnZSwgd3JpdGVyLCBvcHRpb25zKSB7XG4gICAgICAgIC8qIHVpbnQ2NCB2YWx1ZSA9IDE7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLnZhbHVlICE9PSBcIjBcIilcbiAgICAgICAgICAgIHdyaXRlci50YWcoMSwgcnVudGltZV8zLldpcmVUeXBlLlZhcmludCkudWludDY0KG1lc3NhZ2UudmFsdWUpO1xuICAgICAgICBsZXQgdSA9IG9wdGlvbnMud3JpdGVVbmtub3duRmllbGRzO1xuICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAodSA9PSB0cnVlID8gcnVudGltZV80LlVua25vd25GaWVsZEhhbmRsZXIub25Xcml0ZSA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIHdyaXRlcik7XG4gICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgfVxufVxuLyoqXG4gKiBAZ2VuZXJhdGVkIE1lc3NhZ2VUeXBlIGZvciBwcm90b2J1ZiBtZXNzYWdlIGdvb2dsZS5wcm90b2J1Zi5VSW50NjRWYWx1ZVxuICovXG5leHBvcnRzLlVJbnQ2NFZhbHVlID0gbmV3IFVJbnQ2NFZhbHVlJFR5cGUoKTtcbi8vIEBnZW5lcmF0ZWQgbWVzc2FnZSB0eXBlIHdpdGggcmVmbGVjdGlvbiBpbmZvcm1hdGlvbiwgbWF5IHByb3ZpZGUgc3BlZWQgb3B0aW1pemVkIG1ldGhvZHNcbmNsYXNzIEludDMyVmFsdWUkVHlwZSBleHRlbmRzIHJ1bnRpbWVfNy5NZXNzYWdlVHlwZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiZ29vZ2xlLnByb3RvYnVmLkludDMyVmFsdWVcIiwgW1xuICAgICAgICAgICAgeyBubzogMSwgbmFtZTogXCJ2YWx1ZVwiLCBraW5kOiBcInNjYWxhclwiLCBUOiA1IC8qU2NhbGFyVHlwZS5JTlQzMiovIH1cbiAgICAgICAgXSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEVuY29kZSBgSW50MzJWYWx1ZWAgdG8gSlNPTiBzdHJpbmcuXG4gICAgICovXG4gICAgaW50ZXJuYWxKc29uV3JpdGUobWVzc2FnZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWZKc29uV3JpdGVyLnNjYWxhcig1LCBtZXNzYWdlLnZhbHVlLCBcInZhbHVlXCIsIGZhbHNlLCB0cnVlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVjb2RlIGBJbnQzMlZhbHVlYCBmcm9tIEpTT04gc3RyaW5nLlxuICAgICAqL1xuICAgIGludGVybmFsSnNvblJlYWQoanNvbiwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGlmICghdGFyZ2V0KVxuICAgICAgICAgICAgdGFyZ2V0ID0gdGhpcy5jcmVhdGUoKTtcbiAgICAgICAgdGFyZ2V0LnZhbHVlID0gdGhpcy5yZWZKc29uUmVhZGVyLnNjYWxhcihqc29uLCA1LCB1bmRlZmluZWQsIFwidmFsdWVcIik7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuICAgIGNyZWF0ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0geyB2YWx1ZTogMCB9O1xuICAgICAgICBnbG9iYWxUaGlzLk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZXNzYWdlLCBydW50aW1lXzYuTUVTU0FHRV9UWVBFLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdGhpcyB9KTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAoMCwgcnVudGltZV81LnJlZmxlY3Rpb25NZXJnZVBhcnRpYWwpKHRoaXMsIG1lc3NhZ2UsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5UmVhZChyZWFkZXIsIGxlbmd0aCwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGxldCBtZXNzYWdlID0gdGFyZ2V0ICE9PSBudWxsICYmIHRhcmdldCAhPT0gdm9pZCAwID8gdGFyZ2V0IDogdGhpcy5jcmVhdGUoKSwgZW5kID0gcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgIGxldCBbZmllbGRObywgd2lyZVR5cGVdID0gcmVhZGVyLnRhZygpO1xuICAgICAgICAgICAgc3dpdGNoIChmaWVsZE5vKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBpbnQzMiB2YWx1ZSAqLyAxOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnZhbHVlID0gcmVhZGVyLmludDMyKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGxldCB1ID0gb3B0aW9ucy5yZWFkVW5rbm93bkZpZWxkO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSA9PT0gXCJ0aHJvd1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGdsb2JhbFRoaXMuRXJyb3IoYFVua25vd24gZmllbGQgJHtmaWVsZE5vfSAod2lyZSB0eXBlICR7d2lyZVR5cGV9KSBmb3IgJHt0aGlzLnR5cGVOYW1lfWApO1xuICAgICAgICAgICAgICAgICAgICBsZXQgZCA9IHJlYWRlci5za2lwKHdpcmVUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgKHUgPT09IHRydWUgPyBydW50aW1lXzQuVW5rbm93bkZpZWxkSGFuZGxlci5vblJlYWQgOiB1KSh0aGlzLnR5cGVOYW1lLCBtZXNzYWdlLCBmaWVsZE5vLCB3aXJlVHlwZSwgZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5V3JpdGUobWVzc2FnZSwgd3JpdGVyLCBvcHRpb25zKSB7XG4gICAgICAgIC8qIGludDMyIHZhbHVlID0gMTsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2UudmFsdWUgIT09IDApXG4gICAgICAgICAgICB3cml0ZXIudGFnKDEsIHJ1bnRpbWVfMy5XaXJlVHlwZS5WYXJpbnQpLmludDMyKG1lc3NhZ2UudmFsdWUpO1xuICAgICAgICBsZXQgdSA9IG9wdGlvbnMud3JpdGVVbmtub3duRmllbGRzO1xuICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAodSA9PSB0cnVlID8gcnVudGltZV80LlVua25vd25GaWVsZEhhbmRsZXIub25Xcml0ZSA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIHdyaXRlcik7XG4gICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgfVxufVxuLyoqXG4gKiBAZ2VuZXJhdGVkIE1lc3NhZ2VUeXBlIGZvciBwcm90b2J1ZiBtZXNzYWdlIGdvb2dsZS5wcm90b2J1Zi5JbnQzMlZhbHVlXG4gKi9cbmV4cG9ydHMuSW50MzJWYWx1ZSA9IG5ldyBJbnQzMlZhbHVlJFR5cGUoKTtcbi8vIEBnZW5lcmF0ZWQgbWVzc2FnZSB0eXBlIHdpdGggcmVmbGVjdGlvbiBpbmZvcm1hdGlvbiwgbWF5IHByb3ZpZGUgc3BlZWQgb3B0aW1pemVkIG1ldGhvZHNcbmNsYXNzIFVJbnQzMlZhbHVlJFR5cGUgZXh0ZW5kcyBydW50aW1lXzcuTWVzc2FnZVR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcImdvb2dsZS5wcm90b2J1Zi5VSW50MzJWYWx1ZVwiLCBbXG4gICAgICAgICAgICB7IG5vOiAxLCBuYW1lOiBcInZhbHVlXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDEzIC8qU2NhbGFyVHlwZS5VSU5UMzIqLyB9XG4gICAgICAgIF0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFbmNvZGUgYFVJbnQzMlZhbHVlYCB0byBKU09OIHN0cmluZy5cbiAgICAgKi9cbiAgICBpbnRlcm5hbEpzb25Xcml0ZShtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZkpzb25Xcml0ZXIuc2NhbGFyKDEzLCBtZXNzYWdlLnZhbHVlLCBcInZhbHVlXCIsIGZhbHNlLCB0cnVlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVjb2RlIGBVSW50MzJWYWx1ZWAgZnJvbSBKU09OIHN0cmluZy5cbiAgICAgKi9cbiAgICBpbnRlcm5hbEpzb25SZWFkKGpzb24sIG9wdGlvbnMsIHRhcmdldCkge1xuICAgICAgICBpZiAoIXRhcmdldClcbiAgICAgICAgICAgIHRhcmdldCA9IHRoaXMuY3JlYXRlKCk7XG4gICAgICAgIHRhcmdldC52YWx1ZSA9IHRoaXMucmVmSnNvblJlYWRlci5zY2FsYXIoanNvbiwgMTMsIHVuZGVmaW5lZCwgXCJ2YWx1ZVwiKTtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG4gICAgY3JlYXRlKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7IHZhbHVlOiAwIH07XG4gICAgICAgIGdsb2JhbFRoaXMuT2JqZWN0LmRlZmluZVByb3BlcnR5KG1lc3NhZ2UsIHJ1bnRpbWVfNi5NRVNTQUdFX1RZUEUsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0aGlzIH0pO1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICgwLCBydW50aW1lXzUucmVmbGVjdGlvbk1lcmdlUGFydGlhbCkodGhpcywgbWVzc2FnZSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlSZWFkKHJlYWRlciwgbGVuZ3RoLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSB0YXJnZXQgIT09IG51bGwgJiYgdGFyZ2V0ICE9PSB2b2lkIDAgPyB0YXJnZXQgOiB0aGlzLmNyZWF0ZSgpLCBlbmQgPSByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgbGV0IFtmaWVsZE5vLCB3aXJlVHlwZV0gPSByZWFkZXIudGFnKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkTm8pIHtcbiAgICAgICAgICAgICAgICBjYXNlIC8qIHVpbnQzMiB2YWx1ZSAqLyAxOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnZhbHVlID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBsZXQgdSA9IG9wdGlvbnMucmVhZFVua25vd25GaWVsZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgPT09IFwidGhyb3dcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBnbG9iYWxUaGlzLkVycm9yKGBVbmtub3duIGZpZWxkICR7ZmllbGROb30gKHdpcmUgdHlwZSAke3dpcmVUeXBlfSkgZm9yICR7dGhpcy50eXBlTmFtZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGQgPSByZWFkZXIuc2tpcCh3aXJlVHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICh1ID09PSB0cnVlID8gcnVudGltZV80LlVua25vd25GaWVsZEhhbmRsZXIub25SZWFkIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgZmllbGRObywgd2lyZVR5cGUsIGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVdyaXRlKG1lc3NhZ2UsIHdyaXRlciwgb3B0aW9ucykge1xuICAgICAgICAvKiB1aW50MzIgdmFsdWUgPSAxOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS52YWx1ZSAhPT0gMClcbiAgICAgICAgICAgIHdyaXRlci50YWcoMSwgcnVudGltZV8zLldpcmVUeXBlLlZhcmludCkudWludDMyKG1lc3NhZ2UudmFsdWUpO1xuICAgICAgICBsZXQgdSA9IG9wdGlvbnMud3JpdGVVbmtub3duRmllbGRzO1xuICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAodSA9PSB0cnVlID8gcnVudGltZV80LlVua25vd25GaWVsZEhhbmRsZXIub25Xcml0ZSA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIHdyaXRlcik7XG4gICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgfVxufVxuLyoqXG4gKiBAZ2VuZXJhdGVkIE1lc3NhZ2VUeXBlIGZvciBwcm90b2J1ZiBtZXNzYWdlIGdvb2dsZS5wcm90b2J1Zi5VSW50MzJWYWx1ZVxuICovXG5leHBvcnRzLlVJbnQzMlZhbHVlID0gbmV3IFVJbnQzMlZhbHVlJFR5cGUoKTtcbi8vIEBnZW5lcmF0ZWQgbWVzc2FnZSB0eXBlIHdpdGggcmVmbGVjdGlvbiBpbmZvcm1hdGlvbiwgbWF5IHByb3ZpZGUgc3BlZWQgb3B0aW1pemVkIG1ldGhvZHNcbmNsYXNzIEJvb2xWYWx1ZSRUeXBlIGV4dGVuZHMgcnVudGltZV83Lk1lc3NhZ2VUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoXCJnb29nbGUucHJvdG9idWYuQm9vbFZhbHVlXCIsIFtcbiAgICAgICAgICAgIHsgbm86IDEsIG5hbWU6IFwidmFsdWVcIiwga2luZDogXCJzY2FsYXJcIiwgVDogOCAvKlNjYWxhclR5cGUuQk9PTCovIH1cbiAgICAgICAgXSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEVuY29kZSBgQm9vbFZhbHVlYCB0byBKU09OIGJvb2wuXG4gICAgICovXG4gICAgaW50ZXJuYWxKc29uV3JpdGUobWVzc2FnZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gbWVzc2FnZS52YWx1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVjb2RlIGBCb29sVmFsdWVgIGZyb20gSlNPTiBib29sLlxuICAgICAqL1xuICAgIGludGVybmFsSnNvblJlYWQoanNvbiwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGlmICghdGFyZ2V0KVxuICAgICAgICAgICAgdGFyZ2V0ID0gdGhpcy5jcmVhdGUoKTtcbiAgICAgICAgdGFyZ2V0LnZhbHVlID0gdGhpcy5yZWZKc29uUmVhZGVyLnNjYWxhcihqc29uLCA4LCB1bmRlZmluZWQsIFwidmFsdWVcIik7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuICAgIGNyZWF0ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0geyB2YWx1ZTogZmFsc2UgfTtcbiAgICAgICAgZ2xvYmFsVGhpcy5PYmplY3QuZGVmaW5lUHJvcGVydHkobWVzc2FnZSwgcnVudGltZV82Lk1FU1NBR0VfVFlQRSwgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRoaXMgfSk7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgKDAsIHJ1bnRpbWVfNS5yZWZsZWN0aW9uTWVyZ2VQYXJ0aWFsKSh0aGlzLCBtZXNzYWdlLCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVJlYWQocmVhZGVyLCBsZW5ndGgsIG9wdGlvbnMsIHRhcmdldCkge1xuICAgICAgICBsZXQgbWVzc2FnZSA9IHRhcmdldCAhPT0gbnVsbCAmJiB0YXJnZXQgIT09IHZvaWQgMCA/IHRhcmdldCA6IHRoaXMuY3JlYXRlKCksIGVuZCA9IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICBsZXQgW2ZpZWxkTm8sIHdpcmVUeXBlXSA9IHJlYWRlci50YWcoKTtcbiAgICAgICAgICAgIHN3aXRjaCAoZmllbGRObykge1xuICAgICAgICAgICAgICAgIGNhc2UgLyogYm9vbCB2YWx1ZSAqLyAxOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnZhbHVlID0gcmVhZGVyLmJvb2woKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBvcHRpb25zLnJlYWRVbmtub3duRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ID09PSBcInRocm93XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZ2xvYmFsVGhpcy5FcnJvcihgVW5rbm93biBmaWVsZCAke2ZpZWxkTm99ICh3aXJlIHR5cGUgJHt3aXJlVHlwZX0pIGZvciAke3RoaXMudHlwZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkID0gcmVhZGVyLnNraXAod2lyZVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAodSA9PT0gdHJ1ZSA/IHJ1bnRpbWVfNC5Vbmtub3duRmllbGRIYW5kbGVyLm9uUmVhZCA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIGZpZWxkTm8sIHdpcmVUeXBlLCBkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLCB3cml0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgLyogYm9vbCB2YWx1ZSA9IDE7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLnZhbHVlICE9PSBmYWxzZSlcbiAgICAgICAgICAgIHdyaXRlci50YWcoMSwgcnVudGltZV8zLldpcmVUeXBlLlZhcmludCkuYm9vbChtZXNzYWdlLnZhbHVlKTtcbiAgICAgICAgbGV0IHUgPSBvcHRpb25zLndyaXRlVW5rbm93bkZpZWxkcztcbiAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgKHUgPT0gdHJ1ZSA/IHJ1bnRpbWVfNC5Vbmtub3duRmllbGRIYW5kbGVyLm9uV3JpdGUgOiB1KSh0aGlzLnR5cGVOYW1lLCBtZXNzYWdlLCB3cml0ZXIpO1xuICAgICAgICByZXR1cm4gd3JpdGVyO1xuICAgIH1cbn1cbi8qKlxuICogQGdlbmVyYXRlZCBNZXNzYWdlVHlwZSBmb3IgcHJvdG9idWYgbWVzc2FnZSBnb29nbGUucHJvdG9idWYuQm9vbFZhbHVlXG4gKi9cbmV4cG9ydHMuQm9vbFZhbHVlID0gbmV3IEJvb2xWYWx1ZSRUeXBlKCk7XG4vLyBAZ2VuZXJhdGVkIG1lc3NhZ2UgdHlwZSB3aXRoIHJlZmxlY3Rpb24gaW5mb3JtYXRpb24sIG1heSBwcm92aWRlIHNwZWVkIG9wdGltaXplZCBtZXRob2RzXG5jbGFzcyBTdHJpbmdWYWx1ZSRUeXBlIGV4dGVuZHMgcnVudGltZV83Lk1lc3NhZ2VUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoXCJnb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWVcIiwgW1xuICAgICAgICAgICAgeyBubzogMSwgbmFtZTogXCJ2YWx1ZVwiLCBraW5kOiBcInNjYWxhclwiLCBUOiA5IC8qU2NhbGFyVHlwZS5TVFJJTkcqLyB9XG4gICAgICAgIF0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFbmNvZGUgYFN0cmluZ1ZhbHVlYCB0byBKU09OIHN0cmluZy5cbiAgICAgKi9cbiAgICBpbnRlcm5hbEpzb25Xcml0ZShtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBtZXNzYWdlLnZhbHVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWNvZGUgYFN0cmluZ1ZhbHVlYCBmcm9tIEpTT04gc3RyaW5nLlxuICAgICAqL1xuICAgIGludGVybmFsSnNvblJlYWQoanNvbiwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGlmICghdGFyZ2V0KVxuICAgICAgICAgICAgdGFyZ2V0ID0gdGhpcy5jcmVhdGUoKTtcbiAgICAgICAgdGFyZ2V0LnZhbHVlID0gdGhpcy5yZWZKc29uUmVhZGVyLnNjYWxhcihqc29uLCA5LCB1bmRlZmluZWQsIFwidmFsdWVcIik7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuICAgIGNyZWF0ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0geyB2YWx1ZTogXCJcIiB9O1xuICAgICAgICBnbG9iYWxUaGlzLk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZXNzYWdlLCBydW50aW1lXzYuTUVTU0FHRV9UWVBFLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdGhpcyB9KTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAoMCwgcnVudGltZV81LnJlZmxlY3Rpb25NZXJnZVBhcnRpYWwpKHRoaXMsIG1lc3NhZ2UsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5UmVhZChyZWFkZXIsIGxlbmd0aCwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGxldCBtZXNzYWdlID0gdGFyZ2V0ICE9PSBudWxsICYmIHRhcmdldCAhPT0gdm9pZCAwID8gdGFyZ2V0IDogdGhpcy5jcmVhdGUoKSwgZW5kID0gcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgIGxldCBbZmllbGRObywgd2lyZVR5cGVdID0gcmVhZGVyLnRhZygpO1xuICAgICAgICAgICAgc3dpdGNoIChmaWVsZE5vKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBzdHJpbmcgdmFsdWUgKi8gMTpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS52YWx1ZSA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBvcHRpb25zLnJlYWRVbmtub3duRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ID09PSBcInRocm93XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZ2xvYmFsVGhpcy5FcnJvcihgVW5rbm93biBmaWVsZCAke2ZpZWxkTm99ICh3aXJlIHR5cGUgJHt3aXJlVHlwZX0pIGZvciAke3RoaXMudHlwZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkID0gcmVhZGVyLnNraXAod2lyZVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAodSA9PT0gdHJ1ZSA/IHJ1bnRpbWVfNC5Vbmtub3duRmllbGRIYW5kbGVyLm9uUmVhZCA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIGZpZWxkTm8sIHdpcmVUeXBlLCBkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLCB3cml0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgLyogc3RyaW5nIHZhbHVlID0gMTsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2UudmFsdWUgIT09IFwiXCIpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDEsIHJ1bnRpbWVfMy5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLnN0cmluZyhtZXNzYWdlLnZhbHVlKTtcbiAgICAgICAgbGV0IHUgPSBvcHRpb25zLndyaXRlVW5rbm93bkZpZWxkcztcbiAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgKHUgPT0gdHJ1ZSA/IHJ1bnRpbWVfNC5Vbmtub3duRmllbGRIYW5kbGVyLm9uV3JpdGUgOiB1KSh0aGlzLnR5cGVOYW1lLCBtZXNzYWdlLCB3cml0ZXIpO1xuICAgICAgICByZXR1cm4gd3JpdGVyO1xuICAgIH1cbn1cbi8qKlxuICogQGdlbmVyYXRlZCBNZXNzYWdlVHlwZSBmb3IgcHJvdG9idWYgbWVzc2FnZSBnb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWVcbiAqL1xuZXhwb3J0cy5TdHJpbmdWYWx1ZSA9IG5ldyBTdHJpbmdWYWx1ZSRUeXBlKCk7XG4vLyBAZ2VuZXJhdGVkIG1lc3NhZ2UgdHlwZSB3aXRoIHJlZmxlY3Rpb24gaW5mb3JtYXRpb24sIG1heSBwcm92aWRlIHNwZWVkIG9wdGltaXplZCBtZXRob2RzXG5jbGFzcyBCeXRlc1ZhbHVlJFR5cGUgZXh0ZW5kcyBydW50aW1lXzcuTWVzc2FnZVR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcImdvb2dsZS5wcm90b2J1Zi5CeXRlc1ZhbHVlXCIsIFtcbiAgICAgICAgICAgIHsgbm86IDEsIG5hbWU6IFwidmFsdWVcIiwga2luZDogXCJzY2FsYXJcIiwgVDogMTIgLypTY2FsYXJUeXBlLkJZVEVTKi8gfVxuICAgICAgICBdKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRW5jb2RlIGBCeXRlc1ZhbHVlYCB0byBKU09OIHN0cmluZy5cbiAgICAgKi9cbiAgICBpbnRlcm5hbEpzb25Xcml0ZShtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZkpzb25Xcml0ZXIuc2NhbGFyKDEyLCBtZXNzYWdlLnZhbHVlLCBcInZhbHVlXCIsIGZhbHNlLCB0cnVlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVjb2RlIGBCeXRlc1ZhbHVlYCBmcm9tIEpTT04gc3RyaW5nLlxuICAgICAqL1xuICAgIGludGVybmFsSnNvblJlYWQoanNvbiwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGlmICghdGFyZ2V0KVxuICAgICAgICAgICAgdGFyZ2V0ID0gdGhpcy5jcmVhdGUoKTtcbiAgICAgICAgdGFyZ2V0LnZhbHVlID0gdGhpcy5yZWZKc29uUmVhZGVyLnNjYWxhcihqc29uLCAxMiwgdW5kZWZpbmVkLCBcInZhbHVlXCIpO1xuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cbiAgICBjcmVhdGUodmFsdWUpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IHsgdmFsdWU6IG5ldyBVaW50OEFycmF5KDApIH07XG4gICAgICAgIGdsb2JhbFRoaXMuT2JqZWN0LmRlZmluZVByb3BlcnR5KG1lc3NhZ2UsIHJ1bnRpbWVfNi5NRVNTQUdFX1RZUEUsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0aGlzIH0pO1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICgwLCBydW50aW1lXzUucmVmbGVjdGlvbk1lcmdlUGFydGlhbCkodGhpcywgbWVzc2FnZSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlSZWFkKHJlYWRlciwgbGVuZ3RoLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSB0YXJnZXQgIT09IG51bGwgJiYgdGFyZ2V0ICE9PSB2b2lkIDAgPyB0YXJnZXQgOiB0aGlzLmNyZWF0ZSgpLCBlbmQgPSByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgbGV0IFtmaWVsZE5vLCB3aXJlVHlwZV0gPSByZWFkZXIudGFnKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkTm8pIHtcbiAgICAgICAgICAgICAgICBjYXNlIC8qIGJ5dGVzIHZhbHVlICovIDE6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudmFsdWUgPSByZWFkZXIuYnl0ZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBvcHRpb25zLnJlYWRVbmtub3duRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ID09PSBcInRocm93XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZ2xvYmFsVGhpcy5FcnJvcihgVW5rbm93biBmaWVsZCAke2ZpZWxkTm99ICh3aXJlIHR5cGUgJHt3aXJlVHlwZX0pIGZvciAke3RoaXMudHlwZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkID0gcmVhZGVyLnNraXAod2lyZVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAodSA9PT0gdHJ1ZSA/IHJ1bnRpbWVfNC5Vbmtub3duRmllbGRIYW5kbGVyLm9uUmVhZCA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIGZpZWxkTm8sIHdpcmVUeXBlLCBkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLCB3cml0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgLyogYnl0ZXMgdmFsdWUgPSAxOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS52YWx1ZS5sZW5ndGgpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDEsIHJ1bnRpbWVfMy5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLmJ5dGVzKG1lc3NhZ2UudmFsdWUpO1xuICAgICAgICBsZXQgdSA9IG9wdGlvbnMud3JpdGVVbmtub3duRmllbGRzO1xuICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAodSA9PSB0cnVlID8gcnVudGltZV80LlVua25vd25GaWVsZEhhbmRsZXIub25Xcml0ZSA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIHdyaXRlcik7XG4gICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgfVxufVxuLyoqXG4gKiBAZ2VuZXJhdGVkIE1lc3NhZ2VUeXBlIGZvciBwcm90b2J1ZiBtZXNzYWdlIGdvb2dsZS5wcm90b2J1Zi5CeXRlc1ZhbHVlXG4gKi9cbmV4cG9ydHMuQnl0ZXNWYWx1ZSA9IG5ldyBCeXRlc1ZhbHVlJFR5cGUoKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXdyYXBwZXJzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlYWRTZXJ2aWNlT3B0aW9uID0gZXhwb3J0cy5yZWFkTWV0aG9kT3B0aW9uID0gZXhwb3J0cy5yZWFkTWV0aG9kT3B0aW9ucyA9IGV4cG9ydHMubm9ybWFsaXplTWV0aG9kSW5mbyA9IHZvaWQgMDtcbmNvbnN0IHJ1bnRpbWVfMSA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbi8qKlxuICogVHVybnMgUGFydGlhbE1ldGhvZEluZm8gaW50byBNZXRob2RJbmZvLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVNZXRob2RJbmZvKG1ldGhvZCwgc2VydmljZSkge1xuICAgIHZhciBfYSwgX2IsIF9jO1xuICAgIGxldCBtID0gbWV0aG9kO1xuICAgIG0uc2VydmljZSA9IHNlcnZpY2U7XG4gICAgbS5sb2NhbE5hbWUgPSAoX2EgPSBtLmxvY2FsTmFtZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogcnVudGltZV8xLmxvd2VyQ2FtZWxDYXNlKG0ubmFtZSk7XG4gICAgLy8gbm9pbnNwZWN0aW9uIFBvaW50bGVzc0Jvb2xlYW5FeHByZXNzaW9uSlNcbiAgICBtLnNlcnZlclN0cmVhbWluZyA9ICEhbS5zZXJ2ZXJTdHJlYW1pbmc7XG4gICAgLy8gbm9pbnNwZWN0aW9uIFBvaW50bGVzc0Jvb2xlYW5FeHByZXNzaW9uSlNcbiAgICBtLmNsaWVudFN0cmVhbWluZyA9ICEhbS5jbGllbnRTdHJlYW1pbmc7XG4gICAgbS5vcHRpb25zID0gKF9iID0gbS5vcHRpb25zKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiB7fTtcbiAgICBtLmlkZW1wb3RlbmN5ID0gKF9jID0gbS5pZGVtcG90ZW5jeSkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiBtO1xufVxuZXhwb3J0cy5ub3JtYWxpemVNZXRob2RJbmZvID0gbm9ybWFsaXplTWV0aG9kSW5mbztcbi8qKlxuICogUmVhZCBjdXN0b20gbWV0aG9kIG9wdGlvbnMgZnJvbSBhIGdlbmVyYXRlZCBzZXJ2aWNlIGNsaWVudC5cbiAqXG4gKiBAZGVwcmVjYXRlZCB1c2UgcmVhZE1ldGhvZE9wdGlvbigpXG4gKi9cbmZ1bmN0aW9uIHJlYWRNZXRob2RPcHRpb25zKHNlcnZpY2UsIG1ldGhvZE5hbWUsIGV4dGVuc2lvbk5hbWUsIGV4dGVuc2lvblR5cGUpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3Qgb3B0aW9ucyA9IChfYSA9IHNlcnZpY2UubWV0aG9kcy5maW5kKChtLCBpKSA9PiBtLmxvY2FsTmFtZSA9PT0gbWV0aG9kTmFtZSB8fCBpID09PSBtZXRob2ROYW1lKSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm9wdGlvbnM7XG4gICAgcmV0dXJuIG9wdGlvbnMgJiYgb3B0aW9uc1tleHRlbnNpb25OYW1lXSA/IGV4dGVuc2lvblR5cGUuZnJvbUpzb24ob3B0aW9uc1tleHRlbnNpb25OYW1lXSkgOiB1bmRlZmluZWQ7XG59XG5leHBvcnRzLnJlYWRNZXRob2RPcHRpb25zID0gcmVhZE1ldGhvZE9wdGlvbnM7XG5mdW5jdGlvbiByZWFkTWV0aG9kT3B0aW9uKHNlcnZpY2UsIG1ldGhvZE5hbWUsIGV4dGVuc2lvbk5hbWUsIGV4dGVuc2lvblR5cGUpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3Qgb3B0aW9ucyA9IChfYSA9IHNlcnZpY2UubWV0aG9kcy5maW5kKChtLCBpKSA9PiBtLmxvY2FsTmFtZSA9PT0gbWV0aG9kTmFtZSB8fCBpID09PSBtZXRob2ROYW1lKSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm9wdGlvbnM7XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IG9wdGlvblZhbCA9IG9wdGlvbnNbZXh0ZW5zaW9uTmFtZV07XG4gICAgaWYgKG9wdGlvblZhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBvcHRpb25WYWw7XG4gICAgfVxuICAgIHJldHVybiBleHRlbnNpb25UeXBlID8gZXh0ZW5zaW9uVHlwZS5mcm9tSnNvbihvcHRpb25WYWwpIDogb3B0aW9uVmFsO1xufVxuZXhwb3J0cy5yZWFkTWV0aG9kT3B0aW9uID0gcmVhZE1ldGhvZE9wdGlvbjtcbmZ1bmN0aW9uIHJlYWRTZXJ2aWNlT3B0aW9uKHNlcnZpY2UsIGV4dGVuc2lvbk5hbWUsIGV4dGVuc2lvblR5cGUpIHtcbiAgICBjb25zdCBvcHRpb25zID0gc2VydmljZS5vcHRpb25zO1xuICAgIGlmICghb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBvcHRpb25WYWwgPSBvcHRpb25zW2V4dGVuc2lvbk5hbWVdO1xuICAgIGlmIChvcHRpb25WYWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gb3B0aW9uVmFsO1xuICAgIH1cbiAgICByZXR1cm4gZXh0ZW5zaW9uVHlwZSA/IGV4dGVuc2lvblR5cGUuZnJvbUpzb24ob3B0aW9uVmFsKSA6IG9wdGlvblZhbDtcbn1cbmV4cG9ydHMucmVhZFNlcnZpY2VPcHRpb24gPSByZWFkU2VydmljZU9wdGlvbjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlNlcnZpY2VUeXBlID0gdm9pZCAwO1xuY29uc3QgcmVmbGVjdGlvbl9pbmZvXzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLWluZm9cIik7XG5jbGFzcyBTZXJ2aWNlVHlwZSB7XG4gICAgY29uc3RydWN0b3IodHlwZU5hbWUsIG1ldGhvZHMsIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy50eXBlTmFtZSA9IHR5cGVOYW1lO1xuICAgICAgICB0aGlzLm1ldGhvZHMgPSBtZXRob2RzLm1hcChpID0+IHJlZmxlY3Rpb25faW5mb18xLm5vcm1hbGl6ZU1ldGhvZEluZm8oaSwgdGhpcykpO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCA/IG9wdGlvbnMgOiB7fTtcbiAgICB9XG59XG5leHBvcnRzLlNlcnZpY2VUeXBlID0gU2VydmljZVR5cGU7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5ScGNFcnJvciA9IHZvaWQgMDtcbi8qKlxuICogQW4gZXJyb3IgdGhhdCBvY2N1cnJlZCB3aGlsZSBjYWxsaW5nIGEgUlBDIG1ldGhvZC5cbiAqL1xuY2xhc3MgUnBjRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZSwgY29kZSA9ICdVTktOT1dOJywgbWV0YSkge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5uYW1lID0gJ1JwY0Vycm9yJztcbiAgICAgICAgLy8gc2VlIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rL3JlbGVhc2Utbm90ZXMvdHlwZXNjcmlwdC0yLTIuaHRtbCNleGFtcGxlXG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBuZXcudGFyZ2V0LnByb3RvdHlwZSk7XG4gICAgICAgIHRoaXMuY29kZSA9IGNvZGU7XG4gICAgICAgIHRoaXMubWV0YSA9IG1ldGEgIT09IG51bGwgJiYgbWV0YSAhPT0gdm9pZCAwID8gbWV0YSA6IHt9O1xuICAgIH1cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgY29uc3QgbCA9IFt0aGlzLm5hbWUgKyAnOiAnICsgdGhpcy5tZXNzYWdlXTtcbiAgICAgICAgaWYgKHRoaXMuY29kZSkge1xuICAgICAgICAgICAgbC5wdXNoKCcnKTtcbiAgICAgICAgICAgIGwucHVzaCgnQ29kZTogJyArIHRoaXMuY29kZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2VydmljZU5hbWUgJiYgdGhpcy5tZXRob2ROYW1lKSB7XG4gICAgICAgICAgICBsLnB1c2goJ01ldGhvZDogJyArIHRoaXMuc2VydmljZU5hbWUgKyAnLycgKyB0aGlzLm1ldGhvZE5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBtID0gT2JqZWN0LmVudHJpZXModGhpcy5tZXRhKTtcbiAgICAgICAgaWYgKG0ubGVuZ3RoKSB7XG4gICAgICAgICAgICBsLnB1c2goJycpO1xuICAgICAgICAgICAgbC5wdXNoKCdNZXRhOicpO1xuICAgICAgICAgICAgZm9yIChsZXQgW2ssIHZdIG9mIG0pIHtcbiAgICAgICAgICAgICAgICBsLnB1c2goYCAgJHtrfTogJHt2fWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsLmpvaW4oJ1xcbicpO1xuICAgIH1cbn1cbmV4cG9ydHMuUnBjRXJyb3IgPSBScGNFcnJvcjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLm1lcmdlUnBjT3B0aW9ucyA9IHZvaWQgMDtcbmNvbnN0IHJ1bnRpbWVfMSA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbi8qKlxuICogTWVyZ2VzIGN1c3RvbSBSUEMgb3B0aW9ucyB3aXRoIGRlZmF1bHRzLiBSZXR1cm5zIGEgbmV3IGluc3RhbmNlIGFuZCBrZWVwc1xuICogdGhlIFwiZGVmYXVsdHNcIiBhbmQgdGhlIFwib3B0aW9uc1wiIHVubW9kaWZpZWQuXG4gKlxuICogTWVyZ2VzIGBScGNNZXRhZGF0YWAgXCJtZXRhXCIsIG92ZXJ3cml0aW5nIHZhbHVlcyBmcm9tIFwiZGVmYXVsdHNcIiB3aXRoXG4gKiB2YWx1ZXMgZnJvbSBcIm9wdGlvbnNcIi4gRG9lcyBub3QgYXBwZW5kIHZhbHVlcyB0byBleGlzdGluZyBlbnRyaWVzLlxuICpcbiAqIE1lcmdlcyBcImpzb25PcHRpb25zXCIsIGluY2x1ZGluZyBcImpzb25PcHRpb25zLnR5cGVSZWdpc3RyeVwiLCBieSBjcmVhdGluZ1xuICogYSBuZXcgYXJyYXkgdGhhdCBjb250YWlucyB0eXBlcyBmcm9tIFwib3B0aW9ucy5qc29uT3B0aW9ucy50eXBlUmVnaXN0cnlcIlxuICogZmlyc3QsIHRoZW4gdHlwZXMgZnJvbSBcImRlZmF1bHRzLmpzb25PcHRpb25zLnR5cGVSZWdpc3RyeVwiLlxuICpcbiAqIE1lcmdlcyBcImJpbmFyeU9wdGlvbnNcIi5cbiAqXG4gKiBNZXJnZXMgXCJpbnRlcmNlcHRvcnNcIiBieSBjcmVhdGluZyBhIG5ldyBhcnJheSB0aGF0IGNvbnRhaW5zIGludGVyY2VwdG9yc1xuICogZnJvbSBcImRlZmF1bHRzXCIgZmlyc3QsIHRoZW4gaW50ZXJjZXB0b3JzIGZyb20gXCJvcHRpb25zXCIuXG4gKlxuICogV29ya3Mgd2l0aCBvYmplY3RzIHRoYXQgZXh0ZW5kIGBScGNPcHRpb25zYCwgYnV0IG9ubHkgaWYgdGhlIGFkZGVkXG4gKiBwcm9wZXJ0aWVzIGFyZSBvZiB0eXBlIERhdGUsIHByaW1pdGl2ZSBsaWtlIHN0cmluZywgYm9vbGVhbiwgb3IgQXJyYXlcbiAqIG9mIHByaW1pdGl2ZXMuIElmIHlvdSBoYXZlIG90aGVyIHByb3BlcnR5IHR5cGVzLCB5b3UgaGF2ZSB0byBtZXJnZSB0aGVtXG4gKiB5b3Vyc2VsZi5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VScGNPcHRpb25zKGRlZmF1bHRzLCBvcHRpb25zKSB7XG4gICAgaWYgKCFvcHRpb25zKVxuICAgICAgICByZXR1cm4gZGVmYXVsdHM7XG4gICAgbGV0IG8gPSB7fTtcbiAgICBjb3B5KGRlZmF1bHRzLCBvKTtcbiAgICBjb3B5KG9wdGlvbnMsIG8pO1xuICAgIGZvciAobGV0IGtleSBvZiBPYmplY3Qua2V5cyhvcHRpb25zKSkge1xuICAgICAgICBsZXQgdmFsID0gb3B0aW9uc1trZXldO1xuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSBcImpzb25PcHRpb25zXCI6XG4gICAgICAgICAgICAgICAgby5qc29uT3B0aW9ucyA9IHJ1bnRpbWVfMS5tZXJnZUpzb25PcHRpb25zKGRlZmF1bHRzLmpzb25PcHRpb25zLCBvLmpzb25PcHRpb25zKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJiaW5hcnlPcHRpb25zXCI6XG4gICAgICAgICAgICAgICAgby5iaW5hcnlPcHRpb25zID0gcnVudGltZV8xLm1lcmdlQmluYXJ5T3B0aW9ucyhkZWZhdWx0cy5iaW5hcnlPcHRpb25zLCBvLmJpbmFyeU9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm1ldGFcIjpcbiAgICAgICAgICAgICAgICBvLm1ldGEgPSB7fTtcbiAgICAgICAgICAgICAgICBjb3B5KGRlZmF1bHRzLm1ldGEsIG8ubWV0YSk7XG4gICAgICAgICAgICAgICAgY29weShvcHRpb25zLm1ldGEsIG8ubWV0YSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiaW50ZXJjZXB0b3JzXCI6XG4gICAgICAgICAgICAgICAgby5pbnRlcmNlcHRvcnMgPSBkZWZhdWx0cy5pbnRlcmNlcHRvcnMgPyBkZWZhdWx0cy5pbnRlcmNlcHRvcnMuY29uY2F0KHZhbCkgOiB2YWwuY29uY2F0KCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG87XG59XG5leHBvcnRzLm1lcmdlUnBjT3B0aW9ucyA9IG1lcmdlUnBjT3B0aW9ucztcbmZ1bmN0aW9uIGNvcHkoYSwgaW50bykge1xuICAgIGlmICghYSlcbiAgICAgICAgcmV0dXJuO1xuICAgIGxldCBjID0gaW50bztcbiAgICBmb3IgKGxldCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMoYSkpIHtcbiAgICAgICAgaWYgKHYgaW5zdGFuY2VvZiBEYXRlKVxuICAgICAgICAgICAgY1trXSA9IG5ldyBEYXRlKHYuZ2V0VGltZSgpKTtcbiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2KSlcbiAgICAgICAgICAgIGNba10gPSB2LmNvbmNhdCgpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBjW2tdID0gdjtcbiAgICB9XG59XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5EZWZlcnJlZCA9IGV4cG9ydHMuRGVmZXJyZWRTdGF0ZSA9IHZvaWQgMDtcbnZhciBEZWZlcnJlZFN0YXRlO1xuKGZ1bmN0aW9uIChEZWZlcnJlZFN0YXRlKSB7XG4gICAgRGVmZXJyZWRTdGF0ZVtEZWZlcnJlZFN0YXRlW1wiUEVORElOR1wiXSA9IDBdID0gXCJQRU5ESU5HXCI7XG4gICAgRGVmZXJyZWRTdGF0ZVtEZWZlcnJlZFN0YXRlW1wiUkVKRUNURURcIl0gPSAxXSA9IFwiUkVKRUNURURcIjtcbiAgICBEZWZlcnJlZFN0YXRlW0RlZmVycmVkU3RhdGVbXCJSRVNPTFZFRFwiXSA9IDJdID0gXCJSRVNPTFZFRFwiO1xufSkoRGVmZXJyZWRTdGF0ZSA9IGV4cG9ydHMuRGVmZXJyZWRTdGF0ZSB8fCAoZXhwb3J0cy5EZWZlcnJlZFN0YXRlID0ge30pKTtcbi8qKlxuICogQSBkZWZlcnJlZCBwcm9taXNlLiBUaGlzIGlzIGEgXCJjb250cm9sbGVyXCIgZm9yIGEgcHJvbWlzZSwgd2hpY2ggbGV0cyB5b3VcbiAqIHBhc3MgYSBwcm9taXNlIGFyb3VuZCBhbmQgcmVqZWN0IG9yIHJlc29sdmUgaXQgZnJvbSB0aGUgb3V0c2lkZS5cbiAqXG4gKiBXYXJuaW5nOiBUaGlzIGNsYXNzIGlzIHRvIGJlIHVzZWQgd2l0aCBjYXJlLiBVc2luZyBpdCBjYW4gbWFrZSBjb2RlIHZlcnlcbiAqIGRpZmZpY3VsdCB0byByZWFkLiBJdCBpcyBpbnRlbmRlZCBmb3IgdXNlIGluIGxpYnJhcnkgY29kZSB0aGF0IGV4cG9zZXNcbiAqIHByb21pc2VzLCBub3QgZm9yIHJlZ3VsYXIgYnVzaW5lc3MgbG9naWMuXG4gKi9cbmNsYXNzIERlZmVycmVkIHtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gcHJldmVudFVuaGFuZGxlZFJlamVjdGlvbldhcm5pbmcgLSBwcmV2ZW50cyB0aGUgd2FybmluZ1xuICAgICAqIFwiVW5oYW5kbGVkIFByb21pc2UgcmVqZWN0aW9uXCIgYnkgYWRkaW5nIGEgbm9vcCByZWplY3Rpb24gaGFuZGxlci5cbiAgICAgKiBXb3JraW5nIHdpdGggY2FsbHMgcmV0dXJuZWQgZnJvbSB0aGUgcnVudGltZS1ycGMgcGFja2FnZSBpbiBhblxuICAgICAqIGFzeW5jIGZ1bmN0aW9uIHVzdWFsbHkgbWVhbnMgYXdhaXRpbmcgb25lIGNhbGwgcHJvcGVydHkgYWZ0ZXJcbiAgICAgKiB0aGUgb3RoZXIuIFRoaXMgbWVhbnMgdGhhdCB0aGUgXCJzdGF0dXNcIiBpcyBub3QgYmVpbmcgYXdhaXRlZCB3aGVuXG4gICAgICogYW4gZWFybGllciBhd2FpdCBmb3IgdGhlIFwiaGVhZGVyc1wiIGlzIHJlamVjdGVkLiBUaGlzIGNhdXNlcyB0aGVcbiAgICAgKiBcInVuaGFuZGxlZCBwcm9taXNlIHJlamVjdFwiIHdhcm5pbmcuIEEgbW9yZSBjb3JyZWN0IGJlaGF2aW91ciBmb3JcbiAgICAgKiBjYWxscyBtaWdodCBiZSB0byBiZWNvbWUgYXdhcmUgd2hldGhlciBhdCBsZWFzdCBvbmUgb2YgdGhlXG4gICAgICogcHJvbWlzZXMgaXMgaGFuZGxlZCBhbmQgc3dhbGxvdyB0aGUgcmVqZWN0aW9uIHdhcm5pbmcgZm9yIHRoZVxuICAgICAqIG90aGVycy5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihwcmV2ZW50VW5oYW5kbGVkUmVqZWN0aW9uV2FybmluZyA9IHRydWUpIHtcbiAgICAgICAgdGhpcy5fc3RhdGUgPSBEZWZlcnJlZFN0YXRlLlBFTkRJTkc7XG4gICAgICAgIHRoaXMuX3Byb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgICAgICAgIHRoaXMuX3JlamVjdCA9IHJlamVjdDtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChwcmV2ZW50VW5oYW5kbGVkUmVqZWN0aW9uV2FybmluZykge1xuICAgICAgICAgICAgdGhpcy5fcHJvbWlzZS5jYXRjaChfID0+IHsgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBwcm9taXNlLlxuICAgICAqL1xuICAgIGdldCBzdGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGRlZmVycmVkIHByb21pc2UuXG4gICAgICovXG4gICAgZ2V0IHByb21pc2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9taXNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXNvbHZlIHRoZSBwcm9taXNlLiBUaHJvd3MgaWYgdGhlIHByb21pc2UgaXMgYWxyZWFkeSByZXNvbHZlZCBvciByZWplY3RlZC5cbiAgICAgKi9cbiAgICByZXNvbHZlKHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlICE9PSBEZWZlcnJlZFN0YXRlLlBFTkRJTkcpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGNhbm5vdCByZXNvbHZlICR7RGVmZXJyZWRTdGF0ZVt0aGlzLnN0YXRlXS50b0xvd2VyQ2FzZSgpfWApO1xuICAgICAgICB0aGlzLl9yZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgdGhpcy5fc3RhdGUgPSBEZWZlcnJlZFN0YXRlLlJFU09MVkVEO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWplY3QgdGhlIHByb21pc2UuIFRocm93cyBpZiB0aGUgcHJvbWlzZSBpcyBhbHJlYWR5IHJlc29sdmVkIG9yIHJlamVjdGVkLlxuICAgICAqL1xuICAgIHJlamVjdChyZWFzb24pIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgIT09IERlZmVycmVkU3RhdGUuUEVORElORylcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgY2Fubm90IHJlamVjdCAke0RlZmVycmVkU3RhdGVbdGhpcy5zdGF0ZV0udG9Mb3dlckNhc2UoKX1gKTtcbiAgICAgICAgdGhpcy5fcmVqZWN0KHJlYXNvbik7XG4gICAgICAgIHRoaXMuX3N0YXRlID0gRGVmZXJyZWRTdGF0ZS5SRUpFQ1RFRDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVzb2x2ZSB0aGUgcHJvbWlzZS4gSWdub3JlIGlmIG5vdCBwZW5kaW5nLlxuICAgICAqL1xuICAgIHJlc29sdmVQZW5kaW5nKHZhbCkge1xuICAgICAgICBpZiAodGhpcy5fc3RhdGUgPT09IERlZmVycmVkU3RhdGUuUEVORElORylcbiAgICAgICAgICAgIHRoaXMucmVzb2x2ZSh2YWwpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWplY3QgdGhlIHByb21pc2UuIElnbm9yZSBpZiBub3QgcGVuZGluZy5cbiAgICAgKi9cbiAgICByZWplY3RQZW5kaW5nKHJlYXNvbikge1xuICAgICAgICBpZiAodGhpcy5fc3RhdGUgPT09IERlZmVycmVkU3RhdGUuUEVORElORylcbiAgICAgICAgICAgIHRoaXMucmVqZWN0KHJlYXNvbik7XG4gICAgfVxufVxuZXhwb3J0cy5EZWZlcnJlZCA9IERlZmVycmVkO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUnBjT3V0cHV0U3RyZWFtQ29udHJvbGxlciA9IHZvaWQgMDtcbmNvbnN0IGRlZmVycmVkXzEgPSByZXF1aXJlKFwiLi9kZWZlcnJlZFwiKTtcbmNvbnN0IHJ1bnRpbWVfMSA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbi8qKlxuICogQSBgUnBjT3V0cHV0U3RyZWFtYCB0aGF0IHlvdSBjb250cm9sLlxuICovXG5jbGFzcyBScGNPdXRwdXRTdHJlYW1Db250cm9sbGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5fbGlzID0ge1xuICAgICAgICAgICAgbnh0OiBbXSxcbiAgICAgICAgICAgIG1zZzogW10sXG4gICAgICAgICAgICBlcnI6IFtdLFxuICAgICAgICAgICAgY21wOiBbXSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5fY2xvc2VkID0gZmFsc2U7XG4gICAgfVxuICAgIC8vIC0tLSBScGNPdXRwdXRTdHJlYW0gY2FsbGJhY2sgQVBJXG4gICAgb25OZXh0KGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZExpcyhjYWxsYmFjaywgdGhpcy5fbGlzLm54dCk7XG4gICAgfVxuICAgIG9uTWVzc2FnZShjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRMaXMoY2FsbGJhY2ssIHRoaXMuX2xpcy5tc2cpO1xuICAgIH1cbiAgICBvbkVycm9yKGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZExpcyhjYWxsYmFjaywgdGhpcy5fbGlzLmVycik7XG4gICAgfVxuICAgIG9uQ29tcGxldGUoY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkTGlzKGNhbGxiYWNrLCB0aGlzLl9saXMuY21wKTtcbiAgICB9XG4gICAgYWRkTGlzKGNhbGxiYWNrLCBsaXN0KSB7XG4gICAgICAgIGxpc3QucHVzaChjYWxsYmFjayk7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBsZXQgaSA9IGxpc3QuaW5kZXhPZihjYWxsYmFjayk7XG4gICAgICAgICAgICBpZiAoaSA+PSAwKVxuICAgICAgICAgICAgICAgIGxpc3Quc3BsaWNlKGksIDEpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICAvLyByZW1vdmUgYWxsIGxpc3RlbmVyc1xuICAgIGNsZWFyTGlzKCkge1xuICAgICAgICBmb3IgKGxldCBsIG9mIE9iamVjdC52YWx1ZXModGhpcy5fbGlzKSlcbiAgICAgICAgICAgIGwuc3BsaWNlKDAsIGwubGVuZ3RoKTtcbiAgICB9XG4gICAgLy8gLS0tIENvbnRyb2xsZXIgQVBJXG4gICAgLyoqXG4gICAgICogSXMgdGhpcyBzdHJlYW0gYWxyZWFkeSBjbG9zZWQgYnkgYSBjb21wbGV0aW9uIG9yIGVycm9yP1xuICAgICAqL1xuICAgIGdldCBjbG9zZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jbG9zZWQgIT09IGZhbHNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFbWl0IG1lc3NhZ2UsIGNsb3NlIHdpdGggZXJyb3IsIG9yIGNsb3NlIHN1Y2Nlc3NmdWxseSwgYnV0IG9ubHkgb25lXG4gICAgICogYXQgYSB0aW1lLlxuICAgICAqIENhbiBiZSB1c2VkIHRvIHdyYXAgYSBzdHJlYW0gYnkgdXNpbmcgdGhlIG90aGVyIHN0cmVhbSdzIGBvbk5leHRgLlxuICAgICAqL1xuICAgIG5vdGlmeU5leHQobWVzc2FnZSwgZXJyb3IsIGNvbXBsZXRlKSB7XG4gICAgICAgIHJ1bnRpbWVfMS5hc3NlcnQoKG1lc3NhZ2UgPyAxIDogMCkgKyAoZXJyb3IgPyAxIDogMCkgKyAoY29tcGxldGUgPyAxIDogMCkgPD0gMSwgJ29ubHkgb25lIGVtaXNzaW9uIGF0IGEgdGltZScpO1xuICAgICAgICBpZiAobWVzc2FnZSlcbiAgICAgICAgICAgIHRoaXMubm90aWZ5TWVzc2FnZShtZXNzYWdlKTtcbiAgICAgICAgaWYgKGVycm9yKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnlFcnJvcihlcnJvcik7XG4gICAgICAgIGlmIChjb21wbGV0ZSlcbiAgICAgICAgICAgIHRoaXMubm90aWZ5Q29tcGxldGUoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRW1pdHMgYSBuZXcgbWVzc2FnZS4gVGhyb3dzIGlmIHN0cmVhbSBpcyBjbG9zZWQuXG4gICAgICpcbiAgICAgKiBUcmlnZ2VycyBvbk5leHQgYW5kIG9uTWVzc2FnZSBjYWxsYmFja3MuXG4gICAgICovXG4gICAgbm90aWZ5TWVzc2FnZShtZXNzYWdlKSB7XG4gICAgICAgIHJ1bnRpbWVfMS5hc3NlcnQoIXRoaXMuY2xvc2VkLCAnc3RyZWFtIGlzIGNsb3NlZCcpO1xuICAgICAgICB0aGlzLnB1c2hJdCh7IHZhbHVlOiBtZXNzYWdlLCBkb25lOiBmYWxzZSB9KTtcbiAgICAgICAgdGhpcy5fbGlzLm1zZy5mb3JFYWNoKGwgPT4gbChtZXNzYWdlKSk7XG4gICAgICAgIHRoaXMuX2xpcy5ueHQuZm9yRWFjaChsID0+IGwobWVzc2FnZSwgdW5kZWZpbmVkLCBmYWxzZSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDbG9zZXMgdGhlIHN0cmVhbSB3aXRoIGFuIGVycm9yLiBUaHJvd3MgaWYgc3RyZWFtIGlzIGNsb3NlZC5cbiAgICAgKlxuICAgICAqIFRyaWdnZXJzIG9uTmV4dCBhbmQgb25FcnJvciBjYWxsYmFja3MuXG4gICAgICovXG4gICAgbm90aWZ5RXJyb3IoZXJyb3IpIHtcbiAgICAgICAgcnVudGltZV8xLmFzc2VydCghdGhpcy5jbG9zZWQsICdzdHJlYW0gaXMgY2xvc2VkJyk7XG4gICAgICAgIHRoaXMuX2Nsb3NlZCA9IGVycm9yO1xuICAgICAgICB0aGlzLnB1c2hJdChlcnJvcik7XG4gICAgICAgIHRoaXMuX2xpcy5lcnIuZm9yRWFjaChsID0+IGwoZXJyb3IpKTtcbiAgICAgICAgdGhpcy5fbGlzLm54dC5mb3JFYWNoKGwgPT4gbCh1bmRlZmluZWQsIGVycm9yLCBmYWxzZSkpO1xuICAgICAgICB0aGlzLmNsZWFyTGlzKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENsb3NlcyB0aGUgc3RyZWFtIHN1Y2Nlc3NmdWxseS4gVGhyb3dzIGlmIHN0cmVhbSBpcyBjbG9zZWQuXG4gICAgICpcbiAgICAgKiBUcmlnZ2VycyBvbk5leHQgYW5kIG9uQ29tcGxldGUgY2FsbGJhY2tzLlxuICAgICAqL1xuICAgIG5vdGlmeUNvbXBsZXRlKCkge1xuICAgICAgICBydW50aW1lXzEuYXNzZXJ0KCF0aGlzLmNsb3NlZCwgJ3N0cmVhbSBpcyBjbG9zZWQnKTtcbiAgICAgICAgdGhpcy5fY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5wdXNoSXQoeyB2YWx1ZTogbnVsbCwgZG9uZTogdHJ1ZSB9KTtcbiAgICAgICAgdGhpcy5fbGlzLmNtcC5mb3JFYWNoKGwgPT4gbCgpKTtcbiAgICAgICAgdGhpcy5fbGlzLm54dC5mb3JFYWNoKGwgPT4gbCh1bmRlZmluZWQsIHVuZGVmaW5lZCwgdHJ1ZSkpO1xuICAgICAgICB0aGlzLmNsZWFyTGlzKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXN5bmMgaXRlcmF0b3IgKHRoYXQgY2FuIGJlIHVzZWQgd2l0aCBgZm9yIGF3YWl0IHsuLi59YClcbiAgICAgKiB0byBjb25zdW1lIHRoZSBzdHJlYW0uXG4gICAgICpcbiAgICAgKiBTb21lIHRoaW5ncyB0byBub3RlOlxuICAgICAqIC0gSWYgYW4gZXJyb3Igb2NjdXJzLCB0aGUgYGZvciBhd2FpdGAgd2lsbCB0aHJvdyBpdC5cbiAgICAgKiAtIElmIGFuIGVycm9yIG9jY3VycmVkIGJlZm9yZSB0aGUgYGZvciBhd2FpdGAgd2FzIHN0YXJ0ZWQsIGBmb3IgYXdhaXRgXG4gICAgICogICB3aWxsIHJlLXRocm93IGl0LlxuICAgICAqIC0gSWYgdGhlIHN0cmVhbSBpcyBhbHJlYWR5IGNvbXBsZXRlLCB0aGUgYGZvciBhd2FpdGAgd2lsbCBiZSBlbXB0eS5cbiAgICAgKiAtIElmIHlvdXIgYGZvciBhd2FpdGAgY29uc3VtZXMgc2xvd2VyIHRoYW4gdGhlIHN0cmVhbSBwcm9kdWNlcyxcbiAgICAgKiAgIGZvciBleGFtcGxlIGJlY2F1c2UgeW91IGFyZSByZWxheWluZyBtZXNzYWdlcyBpbiBhIHNsb3cgb3BlcmF0aW9uLFxuICAgICAqICAgbWVzc2FnZXMgYXJlIHF1ZXVlZC5cbiAgICAgKi9cbiAgICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xuICAgICAgICAvLyBpbml0IHRoZSBpdGVyYXRvciBzdGF0ZSwgZW5hYmxpbmcgcHVzaEl0KClcbiAgICAgICAgaWYgKCF0aGlzLl9pdFN0YXRlKSB7XG4gICAgICAgICAgICB0aGlzLl9pdFN0YXRlID0geyBxOiBbXSB9O1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHdlIGFyZSBjbG9zZWQsIHdlIGFyZSBkZWZpbml0ZWx5IG5vdCByZWNlaXZpbmcgYW55IG1vcmUgbWVzc2FnZXMuXG4gICAgICAgIC8vIGJ1dCB3ZSBjYW4ndCBsZXQgdGhlIGl0ZXJhdG9yIGdldCBzdHVjay4gd2Ugd2FudCB0byBlaXRoZXI6XG4gICAgICAgIC8vIGEpIGZpbmlzaCB0aGUgbmV3IGl0ZXJhdG9yIGltbWVkaWF0ZWx5LCBiZWNhdXNlIHdlIGFyZSBjb21wbGV0ZWRcbiAgICAgICAgLy8gYikgcmVqZWN0IHRoZSBuZXcgaXRlcmF0b3IsIGJlY2F1c2Ugd2UgZXJyb3JlZFxuICAgICAgICBpZiAodGhpcy5fY2xvc2VkID09PSB0cnVlKVxuICAgICAgICAgICAgdGhpcy5wdXNoSXQoeyB2YWx1ZTogbnVsbCwgZG9uZTogdHJ1ZSB9KTtcbiAgICAgICAgZWxzZSBpZiAodGhpcy5fY2xvc2VkICE9PSBmYWxzZSlcbiAgICAgICAgICAgIHRoaXMucHVzaEl0KHRoaXMuX2Nsb3NlZCk7XG4gICAgICAgIC8vIHRoZSBhc3luYyBpdGVyYXRvclxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBzdGF0ZSA9IHRoaXMuX2l0U3RhdGU7XG4gICAgICAgICAgICAgICAgcnVudGltZV8xLmFzc2VydChzdGF0ZSwgXCJiYWQgc3RhdGVcIik7IC8vIGlmIHdlIGRvbid0IGhhdmUgYSBzdGF0ZSBoZXJlLCBjb2RlIGlzIGJyb2tlblxuICAgICAgICAgICAgICAgIC8vIHRoZXJlIHNob3VsZCBiZSBubyBwZW5kaW5nIHJlc3VsdC5cbiAgICAgICAgICAgICAgICAvLyBkaWQgdGhlIGNvbnN1bWVyIGNhbGwgbmV4dCgpIGJlZm9yZSB3ZSByZXNvbHZlZCBvdXIgcHJldmlvdXMgcmVzdWx0IHByb21pc2U/XG4gICAgICAgICAgICAgICAgcnVudGltZV8xLmFzc2VydCghc3RhdGUucCwgXCJpdGVyYXRvciBjb250cmFjdCBicm9rZW5cIik7XG4gICAgICAgICAgICAgICAgLy8gZGlkIHdlIHByb2R1Y2UgZmFzdGVyIHRoYW4gdGhlIGl0ZXJhdG9yIGNvbnN1bWVkP1xuICAgICAgICAgICAgICAgIC8vIHJldHVybiB0aGUgb2xkZXN0IHJlc3VsdCBmcm9tIHRoZSBxdWV1ZS5cbiAgICAgICAgICAgICAgICBsZXQgZmlyc3QgPSBzdGF0ZS5xLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgaWYgKGZpcnN0KVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFwidmFsdWVcIiBpbiBmaXJzdCkgPyBQcm9taXNlLnJlc29sdmUoZmlyc3QpIDogUHJvbWlzZS5yZWplY3QoZmlyc3QpO1xuICAgICAgICAgICAgICAgIC8vIHdlIGhhdmUgbm8gcmVzdWx0IEFUTSwgYnV0IHdlIHByb21pc2Ugb25lLlxuICAgICAgICAgICAgICAgIC8vIGFzIHNvb24gYXMgd2UgaGF2ZSBhIHJlc3VsdCwgd2UgbXVzdCByZXNvbHZlIHByb21pc2UuXG4gICAgICAgICAgICAgICAgc3RhdGUucCA9IG5ldyBkZWZlcnJlZF8xLkRlZmVycmVkKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlLnAucHJvbWlzZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8vIFwicHVzaFwiIGEgbmV3IGl0ZXJhdG9yIHJlc3VsdC5cbiAgICAvLyB0aGlzIGVpdGhlciByZXNvbHZlcyBhIHBlbmRpbmcgcHJvbWlzZSwgb3IgZW5xdWV1ZXMgdGhlIHJlc3VsdC5cbiAgICBwdXNoSXQocmVzdWx0KSB7XG4gICAgICAgIGxldCBzdGF0ZSA9IHRoaXMuX2l0U3RhdGU7XG4gICAgICAgIGlmICghc3RhdGUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIC8vIGlzIHRoZSBjb25zdW1lciB3YWl0aW5nIGZvciB1cz9cbiAgICAgICAgaWYgKHN0YXRlLnApIHtcbiAgICAgICAgICAgIC8vIHllcywgY29uc3VtZXIgaXMgd2FpdGluZyBmb3IgdGhpcyBwcm9taXNlLlxuICAgICAgICAgICAgY29uc3QgcCA9IHN0YXRlLnA7XG4gICAgICAgICAgICBydW50aW1lXzEuYXNzZXJ0KHAuc3RhdGUgPT0gZGVmZXJyZWRfMS5EZWZlcnJlZFN0YXRlLlBFTkRJTkcsIFwiaXRlcmF0b3IgY29udHJhY3QgYnJva2VuXCIpO1xuICAgICAgICAgICAgLy8gcmVzb2x2ZSB0aGUgcHJvbWlzZVxuICAgICAgICAgICAgKFwidmFsdWVcIiBpbiByZXN1bHQpID8gcC5yZXNvbHZlKHJlc3VsdCkgOiBwLnJlamVjdChyZXN1bHQpO1xuICAgICAgICAgICAgLy8gbXVzdCBjbGVhbnVwLCBvdGhlcndpc2UgaXRlcmF0b3IubmV4dCgpIHdvdWxkIHBpY2sgaXQgdXAgYWdhaW4uXG4gICAgICAgICAgICBkZWxldGUgc3RhdGUucDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIHdlIGFyZSBwcm9kdWNpbmcgZmFzdGVyIHRoYW4gdGhlIGl0ZXJhdG9yIGNvbnN1bWVzLlxuICAgICAgICAgICAgLy8gcHVzaCByZXN1bHQgb250byBxdWV1ZS5cbiAgICAgICAgICAgIHN0YXRlLnEucHVzaChyZXN1bHQpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5ScGNPdXRwdXRTdHJlYW1Db250cm9sbGVyID0gUnBjT3V0cHV0U3RyZWFtQ29udHJvbGxlcjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVW5hcnlDYWxsID0gdm9pZCAwO1xuLyoqXG4gKiBBIHVuYXJ5IFJQQyBjYWxsLiBVbmFyeSBtZWFucyB0aGVyZSBpcyBleGFjdGx5IG9uZSBpbnB1dCBtZXNzYWdlIGFuZFxuICogZXhhY3RseSBvbmUgb3V0cHV0IG1lc3NhZ2UgdW5sZXNzIGFuIGVycm9yIG9jY3VycmVkLlxuICovXG5jbGFzcyBVbmFyeUNhbGwge1xuICAgIGNvbnN0cnVjdG9yKG1ldGhvZCwgcmVxdWVzdEhlYWRlcnMsIHJlcXVlc3QsIGhlYWRlcnMsIHJlc3BvbnNlLCBzdGF0dXMsIHRyYWlsZXJzKSB7XG4gICAgICAgIHRoaXMubWV0aG9kID0gbWV0aG9kO1xuICAgICAgICB0aGlzLnJlcXVlc3RIZWFkZXJzID0gcmVxdWVzdEhlYWRlcnM7XG4gICAgICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gICAgICAgIHRoaXMuaGVhZGVycyA9IGhlYWRlcnM7XG4gICAgICAgIHRoaXMucmVzcG9uc2UgPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zdGF0dXMgPSBzdGF0dXM7XG4gICAgICAgIHRoaXMudHJhaWxlcnMgPSB0cmFpbGVycztcbiAgICB9XG4gICAgLyoqXG4gICAgICogSWYgeW91IGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIGZpbmFsIG91dGNvbWUgb2YgdGhpcyBjYWxsLFxuICAgICAqIHlvdSBjYW4gYXdhaXQgaXQgdG8gcmVjZWl2ZSBhIGBGaW5pc2hlZFVuYXJ5Q2FsbGAuXG4gICAgICovXG4gICAgdGhlbihvbmZ1bGZpbGxlZCwgb25yZWplY3RlZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9taXNlRmluaXNoZWQoKS50aGVuKHZhbHVlID0+IG9uZnVsZmlsbGVkID8gUHJvbWlzZS5yZXNvbHZlKG9uZnVsZmlsbGVkKHZhbHVlKSkgOiB2YWx1ZSwgcmVhc29uID0+IG9ucmVqZWN0ZWQgPyBQcm9taXNlLnJlc29sdmUob25yZWplY3RlZChyZWFzb24pKSA6IFByb21pc2UucmVqZWN0KHJlYXNvbikpO1xuICAgIH1cbiAgICBwcm9taXNlRmluaXNoZWQoKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBsZXQgW2hlYWRlcnMsIHJlc3BvbnNlLCBzdGF0dXMsIHRyYWlsZXJzXSA9IHlpZWxkIFByb21pc2UuYWxsKFt0aGlzLmhlYWRlcnMsIHRoaXMucmVzcG9uc2UsIHRoaXMuc3RhdHVzLCB0aGlzLnRyYWlsZXJzXSk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG1ldGhvZDogdGhpcy5tZXRob2QsXG4gICAgICAgICAgICAgICAgcmVxdWVzdEhlYWRlcnM6IHRoaXMucmVxdWVzdEhlYWRlcnMsXG4gICAgICAgICAgICAgICAgcmVxdWVzdDogdGhpcy5yZXF1ZXN0LFxuICAgICAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgICAgICAgIHRyYWlsZXJzXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnRzLlVuYXJ5Q2FsbCA9IFVuYXJ5Q2FsbDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU2VydmVyU3RyZWFtaW5nQ2FsbCA9IHZvaWQgMDtcbi8qKlxuICogQSBzZXJ2ZXIgc3RyZWFtaW5nIFJQQyBjYWxsLiBUaGUgY2xpZW50IHByb3ZpZGVzIGV4YWN0bHkgb25lIGlucHV0IG1lc3NhZ2VcbiAqIGJ1dCB0aGUgc2VydmVyIG1heSByZXNwb25kIHdpdGggMCwgMSwgb3IgbW9yZSBtZXNzYWdlcy5cbiAqL1xuY2xhc3MgU2VydmVyU3RyZWFtaW5nQ2FsbCB7XG4gICAgY29uc3RydWN0b3IobWV0aG9kLCByZXF1ZXN0SGVhZGVycywgcmVxdWVzdCwgaGVhZGVycywgcmVzcG9uc2UsIHN0YXR1cywgdHJhaWxlcnMpIHtcbiAgICAgICAgdGhpcy5tZXRob2QgPSBtZXRob2Q7XG4gICAgICAgIHRoaXMucmVxdWVzdEhlYWRlcnMgPSByZXF1ZXN0SGVhZGVycztcbiAgICAgICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICAgICAgdGhpcy5oZWFkZXJzID0gaGVhZGVycztcbiAgICAgICAgdGhpcy5yZXNwb25zZXMgPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zdGF0dXMgPSBzdGF0dXM7XG4gICAgICAgIHRoaXMudHJhaWxlcnMgPSB0cmFpbGVycztcbiAgICB9XG4gICAgLyoqXG4gICAgICogSW5zdGVhZCBvZiBhd2FpdGluZyB0aGUgcmVzcG9uc2Ugc3RhdHVzIGFuZCB0cmFpbGVycywgeW91IGNhblxuICAgICAqIGp1c3QgYXMgd2VsbCBhd2FpdCB0aGlzIGNhbGwgaXRzZWxmIHRvIHJlY2VpdmUgdGhlIHNlcnZlciBvdXRjb21lLlxuICAgICAqIFlvdSBzaG91bGQgZmlyc3Qgc2V0dXAgc29tZSBsaXN0ZW5lcnMgdG8gdGhlIGByZXF1ZXN0YCB0b1xuICAgICAqIHNlZSB0aGUgYWN0dWFsIG1lc3NhZ2VzIHRoZSBzZXJ2ZXIgcmVwbGllZCB3aXRoLlxuICAgICAqL1xuICAgIHRoZW4ob25mdWxmaWxsZWQsIG9ucmVqZWN0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvbWlzZUZpbmlzaGVkKCkudGhlbih2YWx1ZSA9PiBvbmZ1bGZpbGxlZCA/IFByb21pc2UucmVzb2x2ZShvbmZ1bGZpbGxlZCh2YWx1ZSkpIDogdmFsdWUsIHJlYXNvbiA9PiBvbnJlamVjdGVkID8gUHJvbWlzZS5yZXNvbHZlKG9ucmVqZWN0ZWQocmVhc29uKSkgOiBQcm9taXNlLnJlamVjdChyZWFzb24pKTtcbiAgICB9XG4gICAgcHJvbWlzZUZpbmlzaGVkKCkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgbGV0IFtoZWFkZXJzLCBzdGF0dXMsIHRyYWlsZXJzXSA9IHlpZWxkIFByb21pc2UuYWxsKFt0aGlzLmhlYWRlcnMsIHRoaXMuc3RhdHVzLCB0aGlzLnRyYWlsZXJzXSk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG1ldGhvZDogdGhpcy5tZXRob2QsXG4gICAgICAgICAgICAgICAgcmVxdWVzdEhlYWRlcnM6IHRoaXMucmVxdWVzdEhlYWRlcnMsXG4gICAgICAgICAgICAgICAgcmVxdWVzdDogdGhpcy5yZXF1ZXN0LFxuICAgICAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgICAgICAgIHRyYWlsZXJzLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0cy5TZXJ2ZXJTdHJlYW1pbmdDYWxsID0gU2VydmVyU3RyZWFtaW5nQ2FsbDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQ2xpZW50U3RyZWFtaW5nQ2FsbCA9IHZvaWQgMDtcbi8qKlxuICogQSBjbGllbnQgc3RyZWFtaW5nIFJQQyBjYWxsLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGNsaWVudHMgc2VuZHMgMCwgMSwgb3JcbiAqIG1vcmUgbWVzc2FnZXMgdG8gdGhlIHNlcnZlciwgYW5kIHRoZSBzZXJ2ZXIgcmVwbGllcyB3aXRoIGV4YWN0bHkgb25lXG4gKiBtZXNzYWdlLlxuICovXG5jbGFzcyBDbGllbnRTdHJlYW1pbmdDYWxsIHtcbiAgICBjb25zdHJ1Y3RvcihtZXRob2QsIHJlcXVlc3RIZWFkZXJzLCByZXF1ZXN0LCBoZWFkZXJzLCByZXNwb25zZSwgc3RhdHVzLCB0cmFpbGVycykge1xuICAgICAgICB0aGlzLm1ldGhvZCA9IG1ldGhvZDtcbiAgICAgICAgdGhpcy5yZXF1ZXN0SGVhZGVycyA9IHJlcXVlc3RIZWFkZXJzO1xuICAgICAgICB0aGlzLnJlcXVlc3RzID0gcmVxdWVzdDtcbiAgICAgICAgdGhpcy5oZWFkZXJzID0gaGVhZGVycztcbiAgICAgICAgdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnN0YXR1cyA9IHN0YXR1cztcbiAgICAgICAgdGhpcy50cmFpbGVycyA9IHRyYWlsZXJzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbnN0ZWFkIG9mIGF3YWl0aW5nIHRoZSByZXNwb25zZSBzdGF0dXMgYW5kIHRyYWlsZXJzLCB5b3UgY2FuXG4gICAgICoganVzdCBhcyB3ZWxsIGF3YWl0IHRoaXMgY2FsbCBpdHNlbGYgdG8gcmVjZWl2ZSB0aGUgc2VydmVyIG91dGNvbWUuXG4gICAgICogTm90ZSB0aGF0IGl0IG1heSBzdGlsbCBiZSB2YWxpZCB0byBzZW5kIG1vcmUgcmVxdWVzdCBtZXNzYWdlcy5cbiAgICAgKi9cbiAgICB0aGVuKG9uZnVsZmlsbGVkLCBvbnJlamVjdGVkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb21pc2VGaW5pc2hlZCgpLnRoZW4odmFsdWUgPT4gb25mdWxmaWxsZWQgPyBQcm9taXNlLnJlc29sdmUob25mdWxmaWxsZWQodmFsdWUpKSA6IHZhbHVlLCByZWFzb24gPT4gb25yZWplY3RlZCA/IFByb21pc2UucmVzb2x2ZShvbnJlamVjdGVkKHJlYXNvbikpIDogUHJvbWlzZS5yZWplY3QocmVhc29uKSk7XG4gICAgfVxuICAgIHByb21pc2VGaW5pc2hlZCgpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGxldCBbaGVhZGVycywgcmVzcG9uc2UsIHN0YXR1cywgdHJhaWxlcnNdID0geWllbGQgUHJvbWlzZS5hbGwoW3RoaXMuaGVhZGVycywgdGhpcy5yZXNwb25zZSwgdGhpcy5zdGF0dXMsIHRoaXMudHJhaWxlcnNdKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiB0aGlzLm1ldGhvZCxcbiAgICAgICAgICAgICAgICByZXF1ZXN0SGVhZGVyczogdGhpcy5yZXF1ZXN0SGVhZGVycyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlLFxuICAgICAgICAgICAgICAgIHN0YXR1cyxcbiAgICAgICAgICAgICAgICB0cmFpbGVyc1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0cy5DbGllbnRTdHJlYW1pbmdDYWxsID0gQ2xpZW50U3RyZWFtaW5nQ2FsbDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuRHVwbGV4U3RyZWFtaW5nQ2FsbCA9IHZvaWQgMDtcbi8qKlxuICogQSBkdXBsZXggc3RyZWFtaW5nIFJQQyBjYWxsLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGNsaWVudHMgc2VuZHMgYW5cbiAqIGFyYml0cmFyeSBhbW91bnQgb2YgbWVzc2FnZXMgdG8gdGhlIHNlcnZlciwgd2hpbGUgYXQgdGhlIHNhbWUgdGltZSxcbiAqIHRoZSBzZXJ2ZXIgc2VuZHMgYW4gYXJiaXRyYXJ5IGFtb3VudCBvZiBtZXNzYWdlcyB0byB0aGUgY2xpZW50LlxuICovXG5jbGFzcyBEdXBsZXhTdHJlYW1pbmdDYWxsIHtcbiAgICBjb25zdHJ1Y3RvcihtZXRob2QsIHJlcXVlc3RIZWFkZXJzLCByZXF1ZXN0LCBoZWFkZXJzLCByZXNwb25zZSwgc3RhdHVzLCB0cmFpbGVycykge1xuICAgICAgICB0aGlzLm1ldGhvZCA9IG1ldGhvZDtcbiAgICAgICAgdGhpcy5yZXF1ZXN0SGVhZGVycyA9IHJlcXVlc3RIZWFkZXJzO1xuICAgICAgICB0aGlzLnJlcXVlc3RzID0gcmVxdWVzdDtcbiAgICAgICAgdGhpcy5oZWFkZXJzID0gaGVhZGVycztcbiAgICAgICAgdGhpcy5yZXNwb25zZXMgPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zdGF0dXMgPSBzdGF0dXM7XG4gICAgICAgIHRoaXMudHJhaWxlcnMgPSB0cmFpbGVycztcbiAgICB9XG4gICAgLyoqXG4gICAgICogSW5zdGVhZCBvZiBhd2FpdGluZyB0aGUgcmVzcG9uc2Ugc3RhdHVzIGFuZCB0cmFpbGVycywgeW91IGNhblxuICAgICAqIGp1c3QgYXMgd2VsbCBhd2FpdCB0aGlzIGNhbGwgaXRzZWxmIHRvIHJlY2VpdmUgdGhlIHNlcnZlciBvdXRjb21lLlxuICAgICAqIE5vdGUgdGhhdCBpdCBtYXkgc3RpbGwgYmUgdmFsaWQgdG8gc2VuZCBtb3JlIHJlcXVlc3QgbWVzc2FnZXMuXG4gICAgICovXG4gICAgdGhlbihvbmZ1bGZpbGxlZCwgb25yZWplY3RlZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9taXNlRmluaXNoZWQoKS50aGVuKHZhbHVlID0+IG9uZnVsZmlsbGVkID8gUHJvbWlzZS5yZXNvbHZlKG9uZnVsZmlsbGVkKHZhbHVlKSkgOiB2YWx1ZSwgcmVhc29uID0+IG9ucmVqZWN0ZWQgPyBQcm9taXNlLnJlc29sdmUob25yZWplY3RlZChyZWFzb24pKSA6IFByb21pc2UucmVqZWN0KHJlYXNvbikpO1xuICAgIH1cbiAgICBwcm9taXNlRmluaXNoZWQoKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBsZXQgW2hlYWRlcnMsIHN0YXR1cywgdHJhaWxlcnNdID0geWllbGQgUHJvbWlzZS5hbGwoW3RoaXMuaGVhZGVycywgdGhpcy5zdGF0dXMsIHRoaXMudHJhaWxlcnNdKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiB0aGlzLm1ldGhvZCxcbiAgICAgICAgICAgICAgICByZXF1ZXN0SGVhZGVyczogdGhpcy5yZXF1ZXN0SGVhZGVycyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgICAgICAgIHN0YXR1cyxcbiAgICAgICAgICAgICAgICB0cmFpbGVycyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuRHVwbGV4U3RyZWFtaW5nQ2FsbCA9IER1cGxleFN0cmVhbWluZ0NhbGw7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlRlc3RUcmFuc3BvcnQgPSB2b2lkIDA7XG5jb25zdCBycGNfZXJyb3JfMSA9IHJlcXVpcmUoXCIuL3JwYy1lcnJvclwiKTtcbmNvbnN0IHJ1bnRpbWVfMSA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbmNvbnN0IHJwY19vdXRwdXRfc3RyZWFtXzEgPSByZXF1aXJlKFwiLi9ycGMtb3V0cHV0LXN0cmVhbVwiKTtcbmNvbnN0IHJwY19vcHRpb25zXzEgPSByZXF1aXJlKFwiLi9ycGMtb3B0aW9uc1wiKTtcbmNvbnN0IHVuYXJ5X2NhbGxfMSA9IHJlcXVpcmUoXCIuL3VuYXJ5LWNhbGxcIik7XG5jb25zdCBzZXJ2ZXJfc3RyZWFtaW5nX2NhbGxfMSA9IHJlcXVpcmUoXCIuL3NlcnZlci1zdHJlYW1pbmctY2FsbFwiKTtcbmNvbnN0IGNsaWVudF9zdHJlYW1pbmdfY2FsbF8xID0gcmVxdWlyZShcIi4vY2xpZW50LXN0cmVhbWluZy1jYWxsXCIpO1xuY29uc3QgZHVwbGV4X3N0cmVhbWluZ19jYWxsXzEgPSByZXF1aXJlKFwiLi9kdXBsZXgtc3RyZWFtaW5nLWNhbGxcIik7XG4vKipcbiAqIFRyYW5zcG9ydCBmb3IgdGVzdGluZy5cbiAqL1xuY2xhc3MgVGVzdFRyYW5zcG9ydCB7XG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZSB3aXRoIG1vY2sgZGF0YS4gT21pdHRlZCBmaWVsZHMgaGF2ZSBkZWZhdWx0IHZhbHVlLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGRhdGEpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFN1cHByZXNzIHdhcm5pbmcgLyBlcnJvciBhYm91dCB1bmNhdWdodCByZWplY3Rpb25zIG9mXG4gICAgICAgICAqIFwic3RhdHVzXCIgYW5kIFwidHJhaWxlcnNcIi5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuc3VwcHJlc3NVbmNhdWdodFJlamVjdGlvbnMgPSB0cnVlO1xuICAgICAgICB0aGlzLmhlYWRlckRlbGF5ID0gMTA7XG4gICAgICAgIHRoaXMucmVzcG9uc2VEZWxheSA9IDUwO1xuICAgICAgICB0aGlzLmJldHdlZW5SZXNwb25zZURlbGF5ID0gMTA7XG4gICAgICAgIHRoaXMuYWZ0ZXJSZXNwb25zZURlbGF5ID0gMTA7XG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGEgIT09IG51bGwgJiYgZGF0YSAhPT0gdm9pZCAwID8gZGF0YSA6IHt9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZW50IG1lc3NhZ2UocykgZHVyaW5nIHRoZSBsYXN0IG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBnZXQgc2VudE1lc3NhZ2VzKCkge1xuICAgICAgICBpZiAodGhpcy5sYXN0SW5wdXQgaW5zdGFuY2VvZiBUZXN0SW5wdXRTdHJlYW0pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxhc3RJbnB1dC5zZW50O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiB0aGlzLmxhc3RJbnB1dCA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gW3RoaXMubGFzdElucHV0LnNpbmdsZV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZW5kaW5nIG1lc3NhZ2UocykgY29tcGxldGVkP1xuICAgICAqL1xuICAgIGdldCBzZW5kQ29tcGxldGUoKSB7XG4gICAgICAgIGlmICh0aGlzLmxhc3RJbnB1dCBpbnN0YW5jZW9mIFRlc3RJbnB1dFN0cmVhbSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubGFzdElucHV0LmNvbXBsZXRlZDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgdGhpcy5sYXN0SW5wdXQgPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBDcmVhdGVzIGEgcHJvbWlzZSBmb3IgcmVzcG9uc2UgaGVhZGVycyBmcm9tIHRoZSBtb2NrIGRhdGEuXG4gICAgcHJvbWlzZUhlYWRlcnMoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgaGVhZGVycyA9IChfYSA9IHRoaXMuZGF0YS5oZWFkZXJzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBUZXN0VHJhbnNwb3J0LmRlZmF1bHRIZWFkZXJzO1xuICAgICAgICByZXR1cm4gaGVhZGVycyBpbnN0YW5jZW9mIHJwY19lcnJvcl8xLlJwY0Vycm9yXG4gICAgICAgICAgICA/IFByb21pc2UucmVqZWN0KGhlYWRlcnMpXG4gICAgICAgICAgICA6IFByb21pc2UucmVzb2x2ZShoZWFkZXJzKTtcbiAgICB9XG4gICAgLy8gQ3JlYXRlcyBhIHByb21pc2UgZm9yIGEgc2luZ2xlLCB2YWxpZCwgbWVzc2FnZSBmcm9tIHRoZSBtb2NrIGRhdGEuXG4gICAgcHJvbWlzZVNpbmdsZVJlc3BvbnNlKG1ldGhvZCkge1xuICAgICAgICBpZiAodGhpcy5kYXRhLnJlc3BvbnNlIGluc3RhbmNlb2YgcnBjX2Vycm9yXzEuUnBjRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCh0aGlzLmRhdGEucmVzcG9uc2UpO1xuICAgICAgICB9XG4gICAgICAgIGxldCByO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmRhdGEucmVzcG9uc2UpKSB7XG4gICAgICAgICAgICBydW50aW1lXzEuYXNzZXJ0KHRoaXMuZGF0YS5yZXNwb25zZS5sZW5ndGggPiAwKTtcbiAgICAgICAgICAgIHIgPSB0aGlzLmRhdGEucmVzcG9uc2VbMF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5kYXRhLnJlc3BvbnNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHIgPSB0aGlzLmRhdGEucmVzcG9uc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByID0gbWV0aG9kLk8uY3JlYXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcnVudGltZV8xLmFzc2VydChtZXRob2QuTy5pcyhyKSk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFB1c2hlcyByZXNwb25zZSBtZXNzYWdlcyBmcm9tIHRoZSBtb2NrIGRhdGEgdG8gdGhlIG91dHB1dCBzdHJlYW0uXG4gICAgICogSWYgYW4gZXJyb3IgcmVzcG9uc2UsIHN0YXR1cyBvciB0cmFpbGVycyBhcmUgbW9ja2VkLCB0aGUgc3RyZWFtIGlzXG4gICAgICogY2xvc2VkIHdpdGggdGhlIHJlc3BlY3RpdmUgZXJyb3IuXG4gICAgICogT3RoZXJ3aXNlLCBzdHJlYW0gaXMgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5cbiAgICAgKlxuICAgICAqIFRoZSByZXR1cm5lZCBwcm9taXNlIHJlc29sdmVzIHdoZW4gdGhlIHN0cmVhbSBpcyBjbG9zZWQuIEl0IHNob3VsZFxuICAgICAqIG5vdCByZWplY3QuIElmIGl0IGRvZXMsIGNvZGUgaXMgYnJva2VuLlxuICAgICAqL1xuICAgIHN0cmVhbVJlc3BvbnNlcyhtZXRob2QsIHN0cmVhbSwgYWJvcnQpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIC8vIG5vcm1hbGl6ZSBcImRhdGEucmVzcG9uc2VcIiBpbnRvIGFuIGFycmF5IG9mIHZhbGlkIG91dHB1dCBtZXNzYWdlc1xuICAgICAgICAgICAgY29uc3QgbWVzc2FnZXMgPSBbXTtcbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGEucmVzcG9uc2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2VzLnB1c2gobWV0aG9kLk8uY3JlYXRlKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmRhdGEucmVzcG9uc2UpKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgbXNnIG9mIHRoaXMuZGF0YS5yZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICBydW50aW1lXzEuYXNzZXJ0KG1ldGhvZC5PLmlzKG1zZykpO1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlcy5wdXNoKG1zZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoISh0aGlzLmRhdGEucmVzcG9uc2UgaW5zdGFuY2VvZiBycGNfZXJyb3JfMS5ScGNFcnJvcikpIHtcbiAgICAgICAgICAgICAgICBydW50aW1lXzEuYXNzZXJ0KG1ldGhvZC5PLmlzKHRoaXMuZGF0YS5yZXNwb25zZSkpO1xuICAgICAgICAgICAgICAgIG1lc3NhZ2VzLnB1c2godGhpcy5kYXRhLnJlc3BvbnNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHN0YXJ0IHRoZSBzdHJlYW0gd2l0aCBhbiBpbml0aWFsIGRlbGF5LlxuICAgICAgICAgICAgLy8gaWYgdGhlIHJlcXVlc3QgaXMgY2FuY2VsbGVkLCBub3RpZnkoKSBlcnJvciBhbmQgZXhpdC5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgeWllbGQgZGVsYXkodGhpcy5yZXNwb25zZURlbGF5LCBhYm9ydCkodW5kZWZpbmVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHN0cmVhbS5ub3RpZnlFcnJvcihlcnJvcik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgZXJyb3IgcmVzcG9uc2Ugd2FzIG1vY2tlZCwgbm90aWZ5KCkgZXJyb3IgKHN0cmVhbSBpcyBub3cgY2xvc2VkIHdpdGggZXJyb3IpIGFuZCBleGl0LlxuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YS5yZXNwb25zZSBpbnN0YW5jZW9mIHJwY19lcnJvcl8xLlJwY0Vycm9yKSB7XG4gICAgICAgICAgICAgICAgc3RyZWFtLm5vdGlmeUVycm9yKHRoaXMuZGF0YS5yZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gcmVndWxhciByZXNwb25zZSBtZXNzYWdlcyB3ZXJlIG1vY2tlZC4gbm90aWZ5KCkgdGhlbS5cbiAgICAgICAgICAgIGZvciAobGV0IG1zZyBvZiBtZXNzYWdlcykge1xuICAgICAgICAgICAgICAgIHN0cmVhbS5ub3RpZnlNZXNzYWdlKG1zZyk7XG4gICAgICAgICAgICAgICAgLy8gYWRkIGEgc2hvcnQgZGVsYXkgYmV0d2VlbiByZXNwb25zZXNcbiAgICAgICAgICAgICAgICAvLyBpZiB0aGUgcmVxdWVzdCBpcyBjYW5jZWxsZWQsIG5vdGlmeSgpIGVycm9yIGFuZCBleGl0LlxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIGRlbGF5KHRoaXMuYmV0d2VlblJlc3BvbnNlRGVsYXksIGFib3J0KSh1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyZWFtLm5vdGlmeUVycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGVycm9yIHN0YXR1cyB3YXMgbW9ja2VkLCBub3RpZnkoKSBlcnJvciAoc3RyZWFtIGlzIG5vdyBjbG9zZWQgd2l0aCBlcnJvcikgYW5kIGV4aXQuXG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhLnN0YXR1cyBpbnN0YW5jZW9mIHJwY19lcnJvcl8xLlJwY0Vycm9yKSB7XG4gICAgICAgICAgICAgICAgc3RyZWFtLm5vdGlmeUVycm9yKHRoaXMuZGF0YS5zdGF0dXMpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGVycm9yIHRyYWlsZXJzIHdlcmUgbW9ja2VkLCBub3RpZnkoKSBlcnJvciAoc3RyZWFtIGlzIG5vdyBjbG9zZWQgd2l0aCBlcnJvcikgYW5kIGV4aXQuXG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhLnRyYWlsZXJzIGluc3RhbmNlb2YgcnBjX2Vycm9yXzEuUnBjRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBzdHJlYW0ubm90aWZ5RXJyb3IodGhpcy5kYXRhLnRyYWlsZXJzKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBzdHJlYW0gY29tcGxldGVkIHN1Y2Nlc3NmdWxseVxuICAgICAgICAgICAgc3RyZWFtLm5vdGlmeUNvbXBsZXRlKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBDcmVhdGVzIGEgcHJvbWlzZSBmb3IgcmVzcG9uc2Ugc3RhdHVzIGZyb20gdGhlIG1vY2sgZGF0YS5cbiAgICBwcm9taXNlU3RhdHVzKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IChfYSA9IHRoaXMuZGF0YS5zdGF0dXMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFRlc3RUcmFuc3BvcnQuZGVmYXVsdFN0YXR1cztcbiAgICAgICAgcmV0dXJuIHN0YXR1cyBpbnN0YW5jZW9mIHJwY19lcnJvcl8xLlJwY0Vycm9yXG4gICAgICAgICAgICA/IFByb21pc2UucmVqZWN0KHN0YXR1cylcbiAgICAgICAgICAgIDogUHJvbWlzZS5yZXNvbHZlKHN0YXR1cyk7XG4gICAgfVxuICAgIC8vIENyZWF0ZXMgYSBwcm9taXNlIGZvciByZXNwb25zZSB0cmFpbGVycyBmcm9tIHRoZSBtb2NrIGRhdGEuXG4gICAgcHJvbWlzZVRyYWlsZXJzKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IHRyYWlsZXJzID0gKF9hID0gdGhpcy5kYXRhLnRyYWlsZXJzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBUZXN0VHJhbnNwb3J0LmRlZmF1bHRUcmFpbGVycztcbiAgICAgICAgcmV0dXJuIHRyYWlsZXJzIGluc3RhbmNlb2YgcnBjX2Vycm9yXzEuUnBjRXJyb3JcbiAgICAgICAgICAgID8gUHJvbWlzZS5yZWplY3QodHJhaWxlcnMpXG4gICAgICAgICAgICA6IFByb21pc2UucmVzb2x2ZSh0cmFpbGVycyk7XG4gICAgfVxuICAgIG1heWJlU3VwcHJlc3NVbmNhdWdodCguLi5wcm9taXNlKSB7XG4gICAgICAgIGlmICh0aGlzLnN1cHByZXNzVW5jYXVnaHRSZWplY3Rpb25zKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBwIG9mIHByb21pc2UpIHtcbiAgICAgICAgICAgICAgICBwLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBtZXJnZU9wdGlvbnMob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gcnBjX29wdGlvbnNfMS5tZXJnZVJwY09wdGlvbnMoe30sIG9wdGlvbnMpO1xuICAgIH1cbiAgICB1bmFyeShtZXRob2QsIGlucHV0LCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgcmVxdWVzdEhlYWRlcnMgPSAoX2EgPSBvcHRpb25zLm1ldGEpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHt9LCBoZWFkZXJzUHJvbWlzZSA9IHRoaXMucHJvbWlzZUhlYWRlcnMoKVxuICAgICAgICAgICAgLnRoZW4oZGVsYXkodGhpcy5oZWFkZXJEZWxheSwgb3B0aW9ucy5hYm9ydCkpLCByZXNwb25zZVByb21pc2UgPSBoZWFkZXJzUHJvbWlzZVxuICAgICAgICAgICAgLmNhdGNoKF8gPT4ge1xuICAgICAgICB9KVxuICAgICAgICAgICAgLnRoZW4oZGVsYXkodGhpcy5yZXNwb25zZURlbGF5LCBvcHRpb25zLmFib3J0KSlcbiAgICAgICAgICAgIC50aGVuKF8gPT4gdGhpcy5wcm9taXNlU2luZ2xlUmVzcG9uc2UobWV0aG9kKSksIHN0YXR1c1Byb21pc2UgPSByZXNwb25zZVByb21pc2VcbiAgICAgICAgICAgIC5jYXRjaChfID0+IHtcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuKGRlbGF5KHRoaXMuYWZ0ZXJSZXNwb25zZURlbGF5LCBvcHRpb25zLmFib3J0KSlcbiAgICAgICAgICAgIC50aGVuKF8gPT4gdGhpcy5wcm9taXNlU3RhdHVzKCkpLCB0cmFpbGVyc1Byb21pc2UgPSByZXNwb25zZVByb21pc2VcbiAgICAgICAgICAgIC5jYXRjaChfID0+IHtcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuKGRlbGF5KHRoaXMuYWZ0ZXJSZXNwb25zZURlbGF5LCBvcHRpb25zLmFib3J0KSlcbiAgICAgICAgICAgIC50aGVuKF8gPT4gdGhpcy5wcm9taXNlVHJhaWxlcnMoKSk7XG4gICAgICAgIHRoaXMubWF5YmVTdXBwcmVzc1VuY2F1Z2h0KHN0YXR1c1Byb21pc2UsIHRyYWlsZXJzUHJvbWlzZSk7XG4gICAgICAgIHRoaXMubGFzdElucHV0ID0geyBzaW5nbGU6IGlucHV0IH07XG4gICAgICAgIHJldHVybiBuZXcgdW5hcnlfY2FsbF8xLlVuYXJ5Q2FsbChtZXRob2QsIHJlcXVlc3RIZWFkZXJzLCBpbnB1dCwgaGVhZGVyc1Byb21pc2UsIHJlc3BvbnNlUHJvbWlzZSwgc3RhdHVzUHJvbWlzZSwgdHJhaWxlcnNQcm9taXNlKTtcbiAgICB9XG4gICAgc2VydmVyU3RyZWFtaW5nKG1ldGhvZCwgaW5wdXQsIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCByZXF1ZXN0SGVhZGVycyA9IChfYSA9IG9wdGlvbnMubWV0YSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoge30sIGhlYWRlcnNQcm9taXNlID0gdGhpcy5wcm9taXNlSGVhZGVycygpXG4gICAgICAgICAgICAudGhlbihkZWxheSh0aGlzLmhlYWRlckRlbGF5LCBvcHRpb25zLmFib3J0KSksIG91dHB1dFN0cmVhbSA9IG5ldyBycGNfb3V0cHV0X3N0cmVhbV8xLlJwY091dHB1dFN0cmVhbUNvbnRyb2xsZXIoKSwgcmVzcG9uc2VTdHJlYW1DbG9zZWRQcm9taXNlID0gaGVhZGVyc1Byb21pc2VcbiAgICAgICAgICAgIC50aGVuKGRlbGF5KHRoaXMucmVzcG9uc2VEZWxheSwgb3B0aW9ucy5hYm9ydCkpXG4gICAgICAgICAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgICB9KVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5zdHJlYW1SZXNwb25zZXMobWV0aG9kLCBvdXRwdXRTdHJlYW0sIG9wdGlvbnMuYWJvcnQpKVxuICAgICAgICAgICAgLnRoZW4oZGVsYXkodGhpcy5hZnRlclJlc3BvbnNlRGVsYXksIG9wdGlvbnMuYWJvcnQpKSwgc3RhdHVzUHJvbWlzZSA9IHJlc3BvbnNlU3RyZWFtQ2xvc2VkUHJvbWlzZVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5wcm9taXNlU3RhdHVzKCkpLCB0cmFpbGVyc1Byb21pc2UgPSByZXNwb25zZVN0cmVhbUNsb3NlZFByb21pc2VcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHRoaXMucHJvbWlzZVRyYWlsZXJzKCkpO1xuICAgICAgICB0aGlzLm1heWJlU3VwcHJlc3NVbmNhdWdodChzdGF0dXNQcm9taXNlLCB0cmFpbGVyc1Byb21pc2UpO1xuICAgICAgICB0aGlzLmxhc3RJbnB1dCA9IHsgc2luZ2xlOiBpbnB1dCB9O1xuICAgICAgICByZXR1cm4gbmV3IHNlcnZlcl9zdHJlYW1pbmdfY2FsbF8xLlNlcnZlclN0cmVhbWluZ0NhbGwobWV0aG9kLCByZXF1ZXN0SGVhZGVycywgaW5wdXQsIGhlYWRlcnNQcm9taXNlLCBvdXRwdXRTdHJlYW0sIHN0YXR1c1Byb21pc2UsIHRyYWlsZXJzUHJvbWlzZSk7XG4gICAgfVxuICAgIGNsaWVudFN0cmVhbWluZyhtZXRob2QsIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCByZXF1ZXN0SGVhZGVycyA9IChfYSA9IG9wdGlvbnMubWV0YSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoge30sIGhlYWRlcnNQcm9taXNlID0gdGhpcy5wcm9taXNlSGVhZGVycygpXG4gICAgICAgICAgICAudGhlbihkZWxheSh0aGlzLmhlYWRlckRlbGF5LCBvcHRpb25zLmFib3J0KSksIHJlc3BvbnNlUHJvbWlzZSA9IGhlYWRlcnNQcm9taXNlXG4gICAgICAgICAgICAuY2F0Y2goXyA9PiB7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbihkZWxheSh0aGlzLnJlc3BvbnNlRGVsYXksIG9wdGlvbnMuYWJvcnQpKVxuICAgICAgICAgICAgLnRoZW4oXyA9PiB0aGlzLnByb21pc2VTaW5nbGVSZXNwb25zZShtZXRob2QpKSwgc3RhdHVzUHJvbWlzZSA9IHJlc3BvbnNlUHJvbWlzZVxuICAgICAgICAgICAgLmNhdGNoKF8gPT4ge1xuICAgICAgICB9KVxuICAgICAgICAgICAgLnRoZW4oZGVsYXkodGhpcy5hZnRlclJlc3BvbnNlRGVsYXksIG9wdGlvbnMuYWJvcnQpKVxuICAgICAgICAgICAgLnRoZW4oXyA9PiB0aGlzLnByb21pc2VTdGF0dXMoKSksIHRyYWlsZXJzUHJvbWlzZSA9IHJlc3BvbnNlUHJvbWlzZVxuICAgICAgICAgICAgLmNhdGNoKF8gPT4ge1xuICAgICAgICB9KVxuICAgICAgICAgICAgLnRoZW4oZGVsYXkodGhpcy5hZnRlclJlc3BvbnNlRGVsYXksIG9wdGlvbnMuYWJvcnQpKVxuICAgICAgICAgICAgLnRoZW4oXyA9PiB0aGlzLnByb21pc2VUcmFpbGVycygpKTtcbiAgICAgICAgdGhpcy5tYXliZVN1cHByZXNzVW5jYXVnaHQoc3RhdHVzUHJvbWlzZSwgdHJhaWxlcnNQcm9taXNlKTtcbiAgICAgICAgdGhpcy5sYXN0SW5wdXQgPSBuZXcgVGVzdElucHV0U3RyZWFtKHRoaXMuZGF0YSwgb3B0aW9ucy5hYm9ydCk7XG4gICAgICAgIHJldHVybiBuZXcgY2xpZW50X3N0cmVhbWluZ19jYWxsXzEuQ2xpZW50U3RyZWFtaW5nQ2FsbChtZXRob2QsIHJlcXVlc3RIZWFkZXJzLCB0aGlzLmxhc3RJbnB1dCwgaGVhZGVyc1Byb21pc2UsIHJlc3BvbnNlUHJvbWlzZSwgc3RhdHVzUHJvbWlzZSwgdHJhaWxlcnNQcm9taXNlKTtcbiAgICB9XG4gICAgZHVwbGV4KG1ldGhvZCwgb3B0aW9ucykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzID0gKF9hID0gb3B0aW9ucy5tZXRhKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB7fSwgaGVhZGVyc1Byb21pc2UgPSB0aGlzLnByb21pc2VIZWFkZXJzKClcbiAgICAgICAgICAgIC50aGVuKGRlbGF5KHRoaXMuaGVhZGVyRGVsYXksIG9wdGlvbnMuYWJvcnQpKSwgb3V0cHV0U3RyZWFtID0gbmV3IHJwY19vdXRwdXRfc3RyZWFtXzEuUnBjT3V0cHV0U3RyZWFtQ29udHJvbGxlcigpLCByZXNwb25zZVN0cmVhbUNsb3NlZFByb21pc2UgPSBoZWFkZXJzUHJvbWlzZVxuICAgICAgICAgICAgLnRoZW4oZGVsYXkodGhpcy5yZXNwb25zZURlbGF5LCBvcHRpb25zLmFib3J0KSlcbiAgICAgICAgICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbigoKSA9PiB0aGlzLnN0cmVhbVJlc3BvbnNlcyhtZXRob2QsIG91dHB1dFN0cmVhbSwgb3B0aW9ucy5hYm9ydCkpXG4gICAgICAgICAgICAudGhlbihkZWxheSh0aGlzLmFmdGVyUmVzcG9uc2VEZWxheSwgb3B0aW9ucy5hYm9ydCkpLCBzdGF0dXNQcm9taXNlID0gcmVzcG9uc2VTdHJlYW1DbG9zZWRQcm9taXNlXG4gICAgICAgICAgICAudGhlbigoKSA9PiB0aGlzLnByb21pc2VTdGF0dXMoKSksIHRyYWlsZXJzUHJvbWlzZSA9IHJlc3BvbnNlU3RyZWFtQ2xvc2VkUHJvbWlzZVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5wcm9taXNlVHJhaWxlcnMoKSk7XG4gICAgICAgIHRoaXMubWF5YmVTdXBwcmVzc1VuY2F1Z2h0KHN0YXR1c1Byb21pc2UsIHRyYWlsZXJzUHJvbWlzZSk7XG4gICAgICAgIHRoaXMubGFzdElucHV0ID0gbmV3IFRlc3RJbnB1dFN0cmVhbSh0aGlzLmRhdGEsIG9wdGlvbnMuYWJvcnQpO1xuICAgICAgICByZXR1cm4gbmV3IGR1cGxleF9zdHJlYW1pbmdfY2FsbF8xLkR1cGxleFN0cmVhbWluZ0NhbGwobWV0aG9kLCByZXF1ZXN0SGVhZGVycywgdGhpcy5sYXN0SW5wdXQsIGhlYWRlcnNQcm9taXNlLCBvdXRwdXRTdHJlYW0sIHN0YXR1c1Byb21pc2UsIHRyYWlsZXJzUHJvbWlzZSk7XG4gICAgfVxufVxuZXhwb3J0cy5UZXN0VHJhbnNwb3J0ID0gVGVzdFRyYW5zcG9ydDtcblRlc3RUcmFuc3BvcnQuZGVmYXVsdEhlYWRlcnMgPSB7XG4gICAgcmVzcG9uc2VIZWFkZXI6IFwidGVzdFwiXG59O1xuVGVzdFRyYW5zcG9ydC5kZWZhdWx0U3RhdHVzID0ge1xuICAgIGNvZGU6IFwiT0tcIiwgZGV0YWlsOiBcImFsbCBnb29kXCJcbn07XG5UZXN0VHJhbnNwb3J0LmRlZmF1bHRUcmFpbGVycyA9IHtcbiAgICByZXNwb25zZVRyYWlsZXI6IFwidGVzdFwiXG59O1xuZnVuY3Rpb24gZGVsYXkobXMsIGFib3J0KSB7XG4gICAgcmV0dXJuICh2KSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGlmIChhYm9ydCA9PT0gbnVsbCB8fCBhYm9ydCA9PT0gdm9pZCAwID8gdm9pZCAwIDogYWJvcnQuYWJvcnRlZCkge1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBycGNfZXJyb3JfMS5ScGNFcnJvcihcInVzZXIgY2FuY2VsXCIsIFwiQ0FOQ0VMTEVEXCIpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGlkID0gc2V0VGltZW91dCgoKSA9PiByZXNvbHZlKHYpLCBtcyk7XG4gICAgICAgICAgICBpZiAoYWJvcnQpIHtcbiAgICAgICAgICAgICAgICBhYm9ydC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgZXYgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoaWQpO1xuICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IHJwY19lcnJvcl8xLlJwY0Vycm9yKFwidXNlciBjYW5jZWxcIiwgXCJDQU5DRUxMRURcIikpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59XG5jbGFzcyBUZXN0SW5wdXRTdHJlYW0ge1xuICAgIGNvbnN0cnVjdG9yKGRhdGEsIGFib3J0KSB7XG4gICAgICAgIHRoaXMuX2NvbXBsZXRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zZW50ID0gW107XG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgICAgIHRoaXMuYWJvcnQgPSBhYm9ydDtcbiAgICB9XG4gICAgZ2V0IHNlbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZW50O1xuICAgIH1cbiAgICBnZXQgY29tcGxldGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29tcGxldGVkO1xuICAgIH1cbiAgICBzZW5kKG1lc3NhZ2UpIHtcbiAgICAgICAgaWYgKHRoaXMuZGF0YS5pbnB1dE1lc3NhZ2UgaW5zdGFuY2VvZiBycGNfZXJyb3JfMS5ScGNFcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHRoaXMuZGF0YS5pbnB1dE1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRlbGF5TXMgPSB0aGlzLmRhdGEuaW5wdXRNZXNzYWdlID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gMTBcbiAgICAgICAgICAgIDogdGhpcy5kYXRhLmlucHV0TWVzc2FnZTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9zZW50LnB1c2gobWVzc2FnZSk7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbihkZWxheShkZWxheU1zLCB0aGlzLmFib3J0KSk7XG4gICAgfVxuICAgIGNvbXBsZXRlKCkge1xuICAgICAgICBpZiAodGhpcy5kYXRhLmlucHV0Q29tcGxldGUgaW5zdGFuY2VvZiBycGNfZXJyb3JfMS5ScGNFcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHRoaXMuZGF0YS5pbnB1dENvbXBsZXRlKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkZWxheU1zID0gdGhpcy5kYXRhLmlucHV0Q29tcGxldGUgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyAxMFxuICAgICAgICAgICAgOiB0aGlzLmRhdGEuaW5wdXRDb21wbGV0ZTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9jb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICB9KVxuICAgICAgICAgICAgLnRoZW4oZGVsYXkoZGVsYXlNcywgdGhpcy5hYm9ydCkpO1xuICAgIH1cbn1cbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnN0YWNrRHVwbGV4U3RyZWFtaW5nSW50ZXJjZXB0b3JzID0gZXhwb3J0cy5zdGFja0NsaWVudFN0cmVhbWluZ0ludGVyY2VwdG9ycyA9IGV4cG9ydHMuc3RhY2tTZXJ2ZXJTdHJlYW1pbmdJbnRlcmNlcHRvcnMgPSBleHBvcnRzLnN0YWNrVW5hcnlJbnRlcmNlcHRvcnMgPSBleHBvcnRzLnN0YWNrSW50ZXJjZXB0ID0gdm9pZCAwO1xuY29uc3QgcnVudGltZV8xID0gcmVxdWlyZShcIkBwcm90b2J1Zi10cy9ydW50aW1lXCIpO1xuLyoqXG4gKiBDcmVhdGVzIGEgXCJzdGFja1wiIG9mIG9mIGFsbCBpbnRlcmNlcHRvcnMgc3BlY2lmaWVkIGluIHRoZSBnaXZlbiBgUnBjT3B0aW9uc2AuXG4gKiBVc2VkIGJ5IGdlbmVyYXRlZCBjbGllbnQgaW1wbGVtZW50YXRpb25zLlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIHN0YWNrSW50ZXJjZXB0KGtpbmQsIHRyYW5zcG9ydCwgbWV0aG9kLCBvcHRpb25zLCBpbnB1dCkge1xuICAgIHZhciBfYSwgX2IsIF9jLCBfZDtcbiAgICBpZiAoa2luZCA9PSBcInVuYXJ5XCIpIHtcbiAgICAgICAgbGV0IHRhaWwgPSAobXRkLCBpbnAsIG9wdCkgPT4gdHJhbnNwb3J0LnVuYXJ5KG10ZCwgaW5wLCBvcHQpO1xuICAgICAgICBmb3IgKGNvbnN0IGN1cnIgb2YgKChfYSA9IG9wdGlvbnMuaW50ZXJjZXB0b3JzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBbXSkuZmlsdGVyKGkgPT4gaS5pbnRlcmNlcHRVbmFyeSkucmV2ZXJzZSgpKSB7XG4gICAgICAgICAgICBjb25zdCBuZXh0ID0gdGFpbDtcbiAgICAgICAgICAgIHRhaWwgPSAobXRkLCBpbnAsIG9wdCkgPT4gY3Vyci5pbnRlcmNlcHRVbmFyeShuZXh0LCBtdGQsIGlucCwgb3B0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFpbChtZXRob2QsIGlucHV0LCBvcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKGtpbmQgPT0gXCJzZXJ2ZXJTdHJlYW1pbmdcIikge1xuICAgICAgICBsZXQgdGFpbCA9IChtdGQsIGlucCwgb3B0KSA9PiB0cmFuc3BvcnQuc2VydmVyU3RyZWFtaW5nKG10ZCwgaW5wLCBvcHQpO1xuICAgICAgICBmb3IgKGNvbnN0IGN1cnIgb2YgKChfYiA9IG9wdGlvbnMuaW50ZXJjZXB0b3JzKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBbXSkuZmlsdGVyKGkgPT4gaS5pbnRlcmNlcHRTZXJ2ZXJTdHJlYW1pbmcpLnJldmVyc2UoKSkge1xuICAgICAgICAgICAgY29uc3QgbmV4dCA9IHRhaWw7XG4gICAgICAgICAgICB0YWlsID0gKG10ZCwgaW5wLCBvcHQpID0+IGN1cnIuaW50ZXJjZXB0U2VydmVyU3RyZWFtaW5nKG5leHQsIG10ZCwgaW5wLCBvcHQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0YWlsKG1ldGhvZCwgaW5wdXQsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBpZiAoa2luZCA9PSBcImNsaWVudFN0cmVhbWluZ1wiKSB7XG4gICAgICAgIGxldCB0YWlsID0gKG10ZCwgb3B0KSA9PiB0cmFuc3BvcnQuY2xpZW50U3RyZWFtaW5nKG10ZCwgb3B0KTtcbiAgICAgICAgZm9yIChjb25zdCBjdXJyIG9mICgoX2MgPSBvcHRpb25zLmludGVyY2VwdG9ycykgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogW10pLmZpbHRlcihpID0+IGkuaW50ZXJjZXB0Q2xpZW50U3RyZWFtaW5nKS5yZXZlcnNlKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IG5leHQgPSB0YWlsO1xuICAgICAgICAgICAgdGFpbCA9IChtdGQsIG9wdCkgPT4gY3Vyci5pbnRlcmNlcHRDbGllbnRTdHJlYW1pbmcobmV4dCwgbXRkLCBvcHQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0YWlsKG1ldGhvZCwgb3B0aW9ucyk7XG4gICAgfVxuICAgIGlmIChraW5kID09IFwiZHVwbGV4XCIpIHtcbiAgICAgICAgbGV0IHRhaWwgPSAobXRkLCBvcHQpID0+IHRyYW5zcG9ydC5kdXBsZXgobXRkLCBvcHQpO1xuICAgICAgICBmb3IgKGNvbnN0IGN1cnIgb2YgKChfZCA9IG9wdGlvbnMuaW50ZXJjZXB0b3JzKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiBbXSkuZmlsdGVyKGkgPT4gaS5pbnRlcmNlcHREdXBsZXgpLnJldmVyc2UoKSkge1xuICAgICAgICAgICAgY29uc3QgbmV4dCA9IHRhaWw7XG4gICAgICAgICAgICB0YWlsID0gKG10ZCwgb3B0KSA9PiBjdXJyLmludGVyY2VwdER1cGxleChuZXh0LCBtdGQsIG9wdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRhaWwobWV0aG9kLCBvcHRpb25zKTtcbiAgICB9XG4gICAgcnVudGltZV8xLmFzc2VydE5ldmVyKGtpbmQpO1xufVxuZXhwb3J0cy5zdGFja0ludGVyY2VwdCA9IHN0YWNrSW50ZXJjZXB0O1xuLyoqXG4gKiBAZGVwcmVjYXRlZCByZXBsYWNlZCBieSBgc3RhY2tJbnRlcmNlcHQoKWAsIHN0aWxsIGhlcmUgdG8gc3VwcG9ydCBvbGRlciBnZW5lcmF0ZWQgY29kZVxuICovXG5mdW5jdGlvbiBzdGFja1VuYXJ5SW50ZXJjZXB0b3JzKHRyYW5zcG9ydCwgbWV0aG9kLCBpbnB1dCwgb3B0aW9ucykge1xuICAgIHJldHVybiBzdGFja0ludGVyY2VwdChcInVuYXJ5XCIsIHRyYW5zcG9ydCwgbWV0aG9kLCBvcHRpb25zLCBpbnB1dCk7XG59XG5leHBvcnRzLnN0YWNrVW5hcnlJbnRlcmNlcHRvcnMgPSBzdGFja1VuYXJ5SW50ZXJjZXB0b3JzO1xuLyoqXG4gKiBAZGVwcmVjYXRlZCByZXBsYWNlZCBieSBgc3RhY2tJbnRlcmNlcHQoKWAsIHN0aWxsIGhlcmUgdG8gc3VwcG9ydCBvbGRlciBnZW5lcmF0ZWQgY29kZVxuICovXG5mdW5jdGlvbiBzdGFja1NlcnZlclN0cmVhbWluZ0ludGVyY2VwdG9ycyh0cmFuc3BvcnQsIG1ldGhvZCwgaW5wdXQsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gc3RhY2tJbnRlcmNlcHQoXCJzZXJ2ZXJTdHJlYW1pbmdcIiwgdHJhbnNwb3J0LCBtZXRob2QsIG9wdGlvbnMsIGlucHV0KTtcbn1cbmV4cG9ydHMuc3RhY2tTZXJ2ZXJTdHJlYW1pbmdJbnRlcmNlcHRvcnMgPSBzdGFja1NlcnZlclN0cmVhbWluZ0ludGVyY2VwdG9ycztcbi8qKlxuICogQGRlcHJlY2F0ZWQgcmVwbGFjZWQgYnkgYHN0YWNrSW50ZXJjZXB0KClgLCBzdGlsbCBoZXJlIHRvIHN1cHBvcnQgb2xkZXIgZ2VuZXJhdGVkIGNvZGVcbiAqL1xuZnVuY3Rpb24gc3RhY2tDbGllbnRTdHJlYW1pbmdJbnRlcmNlcHRvcnModHJhbnNwb3J0LCBtZXRob2QsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gc3RhY2tJbnRlcmNlcHQoXCJjbGllbnRTdHJlYW1pbmdcIiwgdHJhbnNwb3J0LCBtZXRob2QsIG9wdGlvbnMpO1xufVxuZXhwb3J0cy5zdGFja0NsaWVudFN0cmVhbWluZ0ludGVyY2VwdG9ycyA9IHN0YWNrQ2xpZW50U3RyZWFtaW5nSW50ZXJjZXB0b3JzO1xuLyoqXG4gKiBAZGVwcmVjYXRlZCByZXBsYWNlZCBieSBgc3RhY2tJbnRlcmNlcHQoKWAsIHN0aWxsIGhlcmUgdG8gc3VwcG9ydCBvbGRlciBnZW5lcmF0ZWQgY29kZVxuICovXG5mdW5jdGlvbiBzdGFja0R1cGxleFN0cmVhbWluZ0ludGVyY2VwdG9ycyh0cmFuc3BvcnQsIG1ldGhvZCwgb3B0aW9ucykge1xuICAgIHJldHVybiBzdGFja0ludGVyY2VwdChcImR1cGxleFwiLCB0cmFuc3BvcnQsIG1ldGhvZCwgb3B0aW9ucyk7XG59XG5leHBvcnRzLnN0YWNrRHVwbGV4U3RyZWFtaW5nSW50ZXJjZXB0b3JzID0gc3RhY2tEdXBsZXhTdHJlYW1pbmdJbnRlcmNlcHRvcnM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TZXJ2ZXJDYWxsQ29udGV4dENvbnRyb2xsZXIgPSB2b2lkIDA7XG5jbGFzcyBTZXJ2ZXJDYWxsQ29udGV4dENvbnRyb2xsZXIge1xuICAgIGNvbnN0cnVjdG9yKG1ldGhvZCwgaGVhZGVycywgZGVhZGxpbmUsIHNlbmRSZXNwb25zZUhlYWRlcnNGbiwgZGVmYXVsdFN0YXR1cyA9IHsgY29kZTogJ09LJywgZGV0YWlsOiAnJyB9KSB7XG4gICAgICAgIHRoaXMuX2NhbmNlbGxlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9saXN0ZW5lcnMgPSBbXTtcbiAgICAgICAgdGhpcy5tZXRob2QgPSBtZXRob2Q7XG4gICAgICAgIHRoaXMuaGVhZGVycyA9IGhlYWRlcnM7XG4gICAgICAgIHRoaXMuZGVhZGxpbmUgPSBkZWFkbGluZTtcbiAgICAgICAgdGhpcy50cmFpbGVycyA9IHt9O1xuICAgICAgICB0aGlzLl9zZW5kUkggPSBzZW5kUmVzcG9uc2VIZWFkZXJzRm47XG4gICAgICAgIHRoaXMuc3RhdHVzID0gZGVmYXVsdFN0YXR1cztcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBjYWxsIGNhbmNlbGxlZC5cbiAgICAgKlxuICAgICAqIEludm9rZXMgYWxsIGNhbGxiYWNrcyByZWdpc3RlcmVkIHdpdGggb25DYW5jZWwoKSBhbmRcbiAgICAgKiBzZXRzIGBjYW5jZWxsZWQgPSB0cnVlYC5cbiAgICAgKi9cbiAgICBub3RpZnlDYW5jZWxsZWQoKSB7XG4gICAgICAgIGlmICghdGhpcy5fY2FuY2VsbGVkKSB7XG4gICAgICAgICAgICB0aGlzLl9jYW5jZWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgZm9yIChsZXQgbCBvZiB0aGlzLl9saXN0ZW5lcnMpIHtcbiAgICAgICAgICAgICAgICBsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogU2VuZCByZXNwb25zZSBoZWFkZXJzLlxuICAgICAqL1xuICAgIHNlbmRSZXNwb25zZUhlYWRlcnMoZGF0YSkge1xuICAgICAgICB0aGlzLl9zZW5kUkgoZGF0YSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElzIHRoZSBjYWxsIGNhbmNlbGxlZD9cbiAgICAgKlxuICAgICAqIFdoZW4gdGhlIGNsaWVudCBjbG9zZXMgdGhlIGNvbm5lY3Rpb24gYmVmb3JlIHRoZSBzZXJ2ZXJcbiAgICAgKiBpcyBkb25lLCB0aGUgY2FsbCBpcyBjYW5jZWxsZWQuXG4gICAgICpcbiAgICAgKiBJZiB5b3Ugd2FudCB0byBjYW5jZWwgYSByZXF1ZXN0IG9uIHRoZSBzZXJ2ZXIsIHRocm93IGFcbiAgICAgKiBScGNFcnJvciB3aXRoIHRoZSBDQU5DRUxMRUQgc3RhdHVzIGNvZGUuXG4gICAgICovXG4gICAgZ2V0IGNhbmNlbGxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhbmNlbGxlZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkIGEgY2FsbGJhY2sgZm9yIGNhbmNlbGxhdGlvbi5cbiAgICAgKi9cbiAgICBvbkNhbmNlbChjYWxsYmFjaykge1xuICAgICAgICBjb25zdCBsID0gdGhpcy5fbGlzdGVuZXJzO1xuICAgICAgICBsLnB1c2goY2FsbGJhY2spO1xuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgbGV0IGkgPSBsLmluZGV4T2YoY2FsbGJhY2spO1xuICAgICAgICAgICAgaWYgKGkgPj0gMClcbiAgICAgICAgICAgICAgICBsLnNwbGljZShpLCAxKTtcbiAgICAgICAgfTtcbiAgICB9XG59XG5leHBvcnRzLlNlcnZlckNhbGxDb250ZXh0Q29udHJvbGxlciA9IFNlcnZlckNhbGxDb250ZXh0Q29udHJvbGxlcjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBQdWJsaWMgQVBJIG9mIHRoZSBycGMgcnVudGltZS5cbi8vIE5vdGU6IHdlIGRvIG5vdCB1c2UgYGV4cG9ydCAqIGZyb20gLi4uYCB0byBoZWxwIHRyZWUgc2hha2Vycyxcbi8vIHdlYnBhY2sgdmVyYm9zZSBvdXRwdXQgaGludHMgdGhhdCB0aGlzIHNob3VsZCBiZSB1c2VmdWxcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBzZXJ2aWNlX3R5cGVfMSA9IHJlcXVpcmUoXCIuL3NlcnZpY2UtdHlwZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlNlcnZpY2VUeXBlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZXJ2aWNlX3R5cGVfMS5TZXJ2aWNlVHlwZTsgfSB9KTtcbnZhciByZWZsZWN0aW9uX2luZm9fMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24taW5mb1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlYWRNZXRob2RPcHRpb25zXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZWZsZWN0aW9uX2luZm9fMS5yZWFkTWV0aG9kT3B0aW9uczsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlYWRNZXRob2RPcHRpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlZmxlY3Rpb25faW5mb18xLnJlYWRNZXRob2RPcHRpb247IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyZWFkU2VydmljZU9wdGlvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVmbGVjdGlvbl9pbmZvXzEucmVhZFNlcnZpY2VPcHRpb247IH0gfSk7XG52YXIgcnBjX2Vycm9yXzEgPSByZXF1aXJlKFwiLi9ycGMtZXJyb3JcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJScGNFcnJvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcnBjX2Vycm9yXzEuUnBjRXJyb3I7IH0gfSk7XG52YXIgcnBjX29wdGlvbnNfMSA9IHJlcXVpcmUoXCIuL3JwYy1vcHRpb25zXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibWVyZ2VScGNPcHRpb25zXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBycGNfb3B0aW9uc18xLm1lcmdlUnBjT3B0aW9uczsgfSB9KTtcbnZhciBycGNfb3V0cHV0X3N0cmVhbV8xID0gcmVxdWlyZShcIi4vcnBjLW91dHB1dC1zdHJlYW1cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJScGNPdXRwdXRTdHJlYW1Db250cm9sbGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBycGNfb3V0cHV0X3N0cmVhbV8xLlJwY091dHB1dFN0cmVhbUNvbnRyb2xsZXI7IH0gfSk7XG52YXIgdGVzdF90cmFuc3BvcnRfMSA9IHJlcXVpcmUoXCIuL3Rlc3QtdHJhbnNwb3J0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVGVzdFRyYW5zcG9ydFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGVzdF90cmFuc3BvcnRfMS5UZXN0VHJhbnNwb3J0OyB9IH0pO1xudmFyIGRlZmVycmVkXzEgPSByZXF1aXJlKFwiLi9kZWZlcnJlZFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkRlZmVycmVkXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkZWZlcnJlZF8xLkRlZmVycmVkOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRGVmZXJyZWRTdGF0ZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZGVmZXJyZWRfMS5EZWZlcnJlZFN0YXRlOyB9IH0pO1xudmFyIGR1cGxleF9zdHJlYW1pbmdfY2FsbF8xID0gcmVxdWlyZShcIi4vZHVwbGV4LXN0cmVhbWluZy1jYWxsXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRHVwbGV4U3RyZWFtaW5nQ2FsbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZHVwbGV4X3N0cmVhbWluZ19jYWxsXzEuRHVwbGV4U3RyZWFtaW5nQ2FsbDsgfSB9KTtcbnZhciBjbGllbnRfc3RyZWFtaW5nX2NhbGxfMSA9IHJlcXVpcmUoXCIuL2NsaWVudC1zdHJlYW1pbmctY2FsbFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkNsaWVudFN0cmVhbWluZ0NhbGxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNsaWVudF9zdHJlYW1pbmdfY2FsbF8xLkNsaWVudFN0cmVhbWluZ0NhbGw7IH0gfSk7XG52YXIgc2VydmVyX3N0cmVhbWluZ19jYWxsXzEgPSByZXF1aXJlKFwiLi9zZXJ2ZXItc3RyZWFtaW5nLWNhbGxcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJTZXJ2ZXJTdHJlYW1pbmdDYWxsXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZXJ2ZXJfc3RyZWFtaW5nX2NhbGxfMS5TZXJ2ZXJTdHJlYW1pbmdDYWxsOyB9IH0pO1xudmFyIHVuYXJ5X2NhbGxfMSA9IHJlcXVpcmUoXCIuL3VuYXJ5LWNhbGxcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJVbmFyeUNhbGxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHVuYXJ5X2NhbGxfMS5VbmFyeUNhbGw7IH0gfSk7XG52YXIgcnBjX2ludGVyY2VwdG9yXzEgPSByZXF1aXJlKFwiLi9ycGMtaW50ZXJjZXB0b3JcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdGFja0ludGVyY2VwdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcnBjX2ludGVyY2VwdG9yXzEuc3RhY2tJbnRlcmNlcHQ7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdGFja0R1cGxleFN0cmVhbWluZ0ludGVyY2VwdG9yc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcnBjX2ludGVyY2VwdG9yXzEuc3RhY2tEdXBsZXhTdHJlYW1pbmdJbnRlcmNlcHRvcnM7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdGFja0NsaWVudFN0cmVhbWluZ0ludGVyY2VwdG9yc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcnBjX2ludGVyY2VwdG9yXzEuc3RhY2tDbGllbnRTdHJlYW1pbmdJbnRlcmNlcHRvcnM7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdGFja1NlcnZlclN0cmVhbWluZ0ludGVyY2VwdG9yc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcnBjX2ludGVyY2VwdG9yXzEuc3RhY2tTZXJ2ZXJTdHJlYW1pbmdJbnRlcmNlcHRvcnM7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdGFja1VuYXJ5SW50ZXJjZXB0b3JzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBycGNfaW50ZXJjZXB0b3JfMS5zdGFja1VuYXJ5SW50ZXJjZXB0b3JzOyB9IH0pO1xudmFyIHNlcnZlcl9jYWxsX2NvbnRleHRfMSA9IHJlcXVpcmUoXCIuL3NlcnZlci1jYWxsLWNvbnRleHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJTZXJ2ZXJDYWxsQ29udGV4dENvbnRyb2xsZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNlcnZlcl9jYWxsX2NvbnRleHRfMS5TZXJ2ZXJDYWxsQ29udGV4dENvbnRyb2xsZXI7IH0gfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5BcnRpZmFjdFNlcnZpY2UgPSBleHBvcnRzLkRlbGV0ZUFydGlmYWN0UmVzcG9uc2UgPSBleHBvcnRzLkRlbGV0ZUFydGlmYWN0UmVxdWVzdCA9IGV4cG9ydHMuR2V0U2lnbmVkQXJ0aWZhY3RVUkxSZXNwb25zZSA9IGV4cG9ydHMuR2V0U2lnbmVkQXJ0aWZhY3RVUkxSZXF1ZXN0ID0gZXhwb3J0cy5MaXN0QXJ0aWZhY3RzUmVzcG9uc2VfTW9ub2xpdGhBcnRpZmFjdCA9IGV4cG9ydHMuTGlzdEFydGlmYWN0c1Jlc3BvbnNlID0gZXhwb3J0cy5MaXN0QXJ0aWZhY3RzUmVxdWVzdCA9IGV4cG9ydHMuRmluYWxpemVBcnRpZmFjdFJlc3BvbnNlID0gZXhwb3J0cy5GaW5hbGl6ZUFydGlmYWN0UmVxdWVzdCA9IGV4cG9ydHMuQ3JlYXRlQXJ0aWZhY3RSZXNwb25zZSA9IGV4cG9ydHMuQ3JlYXRlQXJ0aWZhY3RSZXF1ZXN0ID0gdm9pZCAwO1xuLy8gQGdlbmVyYXRlZCBieSBwcm90b2J1Zi10cyAyLjkuMSB3aXRoIHBhcmFtZXRlciBsb25nX3R5cGVfc3RyaW5nLGNsaWVudF9ub25lLGdlbmVyYXRlX2RlcGVuZGVuY2llc1xuLy8gQGdlbmVyYXRlZCBmcm9tIHByb3RvYnVmIGZpbGUgXCJyZXN1bHRzL2FwaS92MS9hcnRpZmFjdC5wcm90b1wiIChwYWNrYWdlIFwiZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjFcIiwgc3ludGF4IHByb3RvMylcbi8vIHRzbGludDpkaXNhYmxlXG5jb25zdCBydW50aW1lX3JwY18xID0gcmVxdWlyZShcIkBwcm90b2J1Zi10cy9ydW50aW1lLXJwY1wiKTtcbmNvbnN0IHJ1bnRpbWVfMSA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbmNvbnN0IHJ1bnRpbWVfMiA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbmNvbnN0IHJ1bnRpbWVfMyA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbmNvbnN0IHJ1bnRpbWVfNCA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbmNvbnN0IHJ1bnRpbWVfNSA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbmNvbnN0IHdyYXBwZXJzXzEgPSByZXF1aXJlKFwiLi4vLi4vLi4vZ29vZ2xlL3Byb3RvYnVmL3dyYXBwZXJzXCIpO1xuY29uc3Qgd3JhcHBlcnNfMiA9IHJlcXVpcmUoXCIuLi8uLi8uLi9nb29nbGUvcHJvdG9idWYvd3JhcHBlcnNcIik7XG5jb25zdCB0aW1lc3RhbXBfMSA9IHJlcXVpcmUoXCIuLi8uLi8uLi9nb29nbGUvcHJvdG9idWYvdGltZXN0YW1wXCIpO1xuLy8gQGdlbmVyYXRlZCBtZXNzYWdlIHR5cGUgd2l0aCByZWZsZWN0aW9uIGluZm9ybWF0aW9uLCBtYXkgcHJvdmlkZSBzcGVlZCBvcHRpbWl6ZWQgbWV0aG9kc1xuY2xhc3MgQ3JlYXRlQXJ0aWZhY3RSZXF1ZXN0JFR5cGUgZXh0ZW5kcyBydW50aW1lXzUuTWVzc2FnZVR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcImdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkNyZWF0ZUFydGlmYWN0UmVxdWVzdFwiLCBbXG4gICAgICAgICAgICB7IG5vOiAxLCBuYW1lOiBcIndvcmtmbG93X3J1bl9iYWNrZW5kX2lkXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDkgLypTY2FsYXJUeXBlLlNUUklORyovIH0sXG4gICAgICAgICAgICB7IG5vOiAyLCBuYW1lOiBcIndvcmtmbG93X2pvYl9ydW5fYmFja2VuZF9pZFwiLCBraW5kOiBcInNjYWxhclwiLCBUOiA5IC8qU2NhbGFyVHlwZS5TVFJJTkcqLyB9LFxuICAgICAgICAgICAgeyBubzogMywgbmFtZTogXCJuYW1lXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDkgLypTY2FsYXJUeXBlLlNUUklORyovIH0sXG4gICAgICAgICAgICB7IG5vOiA0LCBuYW1lOiBcImV4cGlyZXNfYXRcIiwga2luZDogXCJtZXNzYWdlXCIsIFQ6ICgpID0+IHRpbWVzdGFtcF8xLlRpbWVzdGFtcCB9LFxuICAgICAgICAgICAgeyBubzogNSwgbmFtZTogXCJ2ZXJzaW9uXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDUgLypTY2FsYXJUeXBlLklOVDMyKi8gfVxuICAgICAgICBdKTtcbiAgICB9XG4gICAgY3JlYXRlKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7IHdvcmtmbG93UnVuQmFja2VuZElkOiBcIlwiLCB3b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZDogXCJcIiwgbmFtZTogXCJcIiwgdmVyc2lvbjogMCB9O1xuICAgICAgICBnbG9iYWxUaGlzLk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZXNzYWdlLCBydW50aW1lXzQuTUVTU0FHRV9UWVBFLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdGhpcyB9KTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAoMCwgcnVudGltZV8zLnJlZmxlY3Rpb25NZXJnZVBhcnRpYWwpKHRoaXMsIG1lc3NhZ2UsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5UmVhZChyZWFkZXIsIGxlbmd0aCwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGxldCBtZXNzYWdlID0gdGFyZ2V0ICE9PSBudWxsICYmIHRhcmdldCAhPT0gdm9pZCAwID8gdGFyZ2V0IDogdGhpcy5jcmVhdGUoKSwgZW5kID0gcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgIGxldCBbZmllbGRObywgd2lyZVR5cGVdID0gcmVhZGVyLnRhZygpO1xuICAgICAgICAgICAgc3dpdGNoIChmaWVsZE5vKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBzdHJpbmcgd29ya2Zsb3dfcnVuX2JhY2tlbmRfaWQgKi8gMTpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS53b3JrZmxvd1J1bkJhY2tlbmRJZCA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBzdHJpbmcgd29ya2Zsb3dfam9iX3J1bl9iYWNrZW5kX2lkICovIDI6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uud29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgLyogc3RyaW5nIG5hbWUgKi8gMzpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5uYW1lID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIC8qIGdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAgZXhwaXJlc19hdCAqLyA0OlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmV4cGlyZXNBdCA9IHRpbWVzdGFtcF8xLlRpbWVzdGFtcC5pbnRlcm5hbEJpbmFyeVJlYWQocmVhZGVyLCByZWFkZXIudWludDMyKCksIG9wdGlvbnMsIG1lc3NhZ2UuZXhwaXJlc0F0KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBpbnQzMiB2ZXJzaW9uICovIDU6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudmVyc2lvbiA9IHJlYWRlci5pbnQzMigpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBsZXQgdSA9IG9wdGlvbnMucmVhZFVua25vd25GaWVsZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgPT09IFwidGhyb3dcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBnbG9iYWxUaGlzLkVycm9yKGBVbmtub3duIGZpZWxkICR7ZmllbGROb30gKHdpcmUgdHlwZSAke3dpcmVUeXBlfSkgZm9yICR7dGhpcy50eXBlTmFtZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGQgPSByZWFkZXIuc2tpcCh3aXJlVHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICh1ID09PSB0cnVlID8gcnVudGltZV8yLlVua25vd25GaWVsZEhhbmRsZXIub25SZWFkIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgZmllbGRObywgd2lyZVR5cGUsIGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVdyaXRlKG1lc3NhZ2UsIHdyaXRlciwgb3B0aW9ucykge1xuICAgICAgICAvKiBzdHJpbmcgd29ya2Zsb3dfcnVuX2JhY2tlbmRfaWQgPSAxOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS53b3JrZmxvd1J1bkJhY2tlbmRJZCAhPT0gXCJcIilcbiAgICAgICAgICAgIHdyaXRlci50YWcoMSwgcnVudGltZV8xLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCkuc3RyaW5nKG1lc3NhZ2Uud29ya2Zsb3dSdW5CYWNrZW5kSWQpO1xuICAgICAgICAvKiBzdHJpbmcgd29ya2Zsb3dfam9iX3J1bl9iYWNrZW5kX2lkID0gMjsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2Uud29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQgIT09IFwiXCIpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDIsIHJ1bnRpbWVfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLnN0cmluZyhtZXNzYWdlLndvcmtmbG93Sm9iUnVuQmFja2VuZElkKTtcbiAgICAgICAgLyogc3RyaW5nIG5hbWUgPSAzOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS5uYW1lICE9PSBcIlwiKVxuICAgICAgICAgICAgd3JpdGVyLnRhZygzLCBydW50aW1lXzEuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKS5zdHJpbmcobWVzc2FnZS5uYW1lKTtcbiAgICAgICAgLyogZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCBleHBpcmVzX2F0ID0gNDsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2UuZXhwaXJlc0F0KVxuICAgICAgICAgICAgdGltZXN0YW1wXzEuVGltZXN0YW1wLmludGVybmFsQmluYXJ5V3JpdGUobWVzc2FnZS5leHBpcmVzQXQsIHdyaXRlci50YWcoNCwgcnVudGltZV8xLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCkuZm9yaygpLCBvcHRpb25zKS5qb2luKCk7XG4gICAgICAgIC8qIGludDMyIHZlcnNpb24gPSA1OyAqL1xuICAgICAgICBpZiAobWVzc2FnZS52ZXJzaW9uICE9PSAwKVxuICAgICAgICAgICAgd3JpdGVyLnRhZyg1LCBydW50aW1lXzEuV2lyZVR5cGUuVmFyaW50KS5pbnQzMihtZXNzYWdlLnZlcnNpb24pO1xuICAgICAgICBsZXQgdSA9IG9wdGlvbnMud3JpdGVVbmtub3duRmllbGRzO1xuICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAodSA9PSB0cnVlID8gcnVudGltZV8yLlVua25vd25GaWVsZEhhbmRsZXIub25Xcml0ZSA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIHdyaXRlcik7XG4gICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgfVxufVxuLyoqXG4gKiBAZ2VuZXJhdGVkIE1lc3NhZ2VUeXBlIGZvciBwcm90b2J1ZiBtZXNzYWdlIGdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkNyZWF0ZUFydGlmYWN0UmVxdWVzdFxuICovXG5leHBvcnRzLkNyZWF0ZUFydGlmYWN0UmVxdWVzdCA9IG5ldyBDcmVhdGVBcnRpZmFjdFJlcXVlc3QkVHlwZSgpO1xuLy8gQGdlbmVyYXRlZCBtZXNzYWdlIHR5cGUgd2l0aCByZWZsZWN0aW9uIGluZm9ybWF0aW9uLCBtYXkgcHJvdmlkZSBzcGVlZCBvcHRpbWl6ZWQgbWV0aG9kc1xuY2xhc3MgQ3JlYXRlQXJ0aWZhY3RSZXNwb25zZSRUeXBlIGV4dGVuZHMgcnVudGltZV81Lk1lc3NhZ2VUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoXCJnaXRodWIuYWN0aW9ucy5yZXN1bHRzLmFwaS52MS5DcmVhdGVBcnRpZmFjdFJlc3BvbnNlXCIsIFtcbiAgICAgICAgICAgIHsgbm86IDEsIG5hbWU6IFwib2tcIiwga2luZDogXCJzY2FsYXJcIiwgVDogOCAvKlNjYWxhclR5cGUuQk9PTCovIH0sXG4gICAgICAgICAgICB7IG5vOiAyLCBuYW1lOiBcInNpZ25lZF91cGxvYWRfdXJsXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDkgLypTY2FsYXJUeXBlLlNUUklORyovIH1cbiAgICAgICAgXSk7XG4gICAgfVxuICAgIGNyZWF0ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0geyBvazogZmFsc2UsIHNpZ25lZFVwbG9hZFVybDogXCJcIiB9O1xuICAgICAgICBnbG9iYWxUaGlzLk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZXNzYWdlLCBydW50aW1lXzQuTUVTU0FHRV9UWVBFLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdGhpcyB9KTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAoMCwgcnVudGltZV8zLnJlZmxlY3Rpb25NZXJnZVBhcnRpYWwpKHRoaXMsIG1lc3NhZ2UsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5UmVhZChyZWFkZXIsIGxlbmd0aCwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGxldCBtZXNzYWdlID0gdGFyZ2V0ICE9PSBudWxsICYmIHRhcmdldCAhPT0gdm9pZCAwID8gdGFyZ2V0IDogdGhpcy5jcmVhdGUoKSwgZW5kID0gcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgIGxldCBbZmllbGRObywgd2lyZVR5cGVdID0gcmVhZGVyLnRhZygpO1xuICAgICAgICAgICAgc3dpdGNoIChmaWVsZE5vKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBib29sIG9rICovIDE6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uub2sgPSByZWFkZXIuYm9vbCgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIC8qIHN0cmluZyBzaWduZWRfdXBsb2FkX3VybCAqLyAyOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnNpZ25lZFVwbG9hZFVybCA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBvcHRpb25zLnJlYWRVbmtub3duRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ID09PSBcInRocm93XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZ2xvYmFsVGhpcy5FcnJvcihgVW5rbm93biBmaWVsZCAke2ZpZWxkTm99ICh3aXJlIHR5cGUgJHt3aXJlVHlwZX0pIGZvciAke3RoaXMudHlwZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkID0gcmVhZGVyLnNraXAod2lyZVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAodSA9PT0gdHJ1ZSA/IHJ1bnRpbWVfMi5Vbmtub3duRmllbGRIYW5kbGVyLm9uUmVhZCA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIGZpZWxkTm8sIHdpcmVUeXBlLCBkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLCB3cml0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgLyogYm9vbCBvayA9IDE7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLm9rICE9PSBmYWxzZSlcbiAgICAgICAgICAgIHdyaXRlci50YWcoMSwgcnVudGltZV8xLldpcmVUeXBlLlZhcmludCkuYm9vbChtZXNzYWdlLm9rKTtcbiAgICAgICAgLyogc3RyaW5nIHNpZ25lZF91cGxvYWRfdXJsID0gMjsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2Uuc2lnbmVkVXBsb2FkVXJsICE9PSBcIlwiKVxuICAgICAgICAgICAgd3JpdGVyLnRhZygyLCBydW50aW1lXzEuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKS5zdHJpbmcobWVzc2FnZS5zaWduZWRVcGxvYWRVcmwpO1xuICAgICAgICBsZXQgdSA9IG9wdGlvbnMud3JpdGVVbmtub3duRmllbGRzO1xuICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAodSA9PSB0cnVlID8gcnVudGltZV8yLlVua25vd25GaWVsZEhhbmRsZXIub25Xcml0ZSA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIHdyaXRlcik7XG4gICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgfVxufVxuLyoqXG4gKiBAZ2VuZXJhdGVkIE1lc3NhZ2VUeXBlIGZvciBwcm90b2J1ZiBtZXNzYWdlIGdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkNyZWF0ZUFydGlmYWN0UmVzcG9uc2VcbiAqL1xuZXhwb3J0cy5DcmVhdGVBcnRpZmFjdFJlc3BvbnNlID0gbmV3IENyZWF0ZUFydGlmYWN0UmVzcG9uc2UkVHlwZSgpO1xuLy8gQGdlbmVyYXRlZCBtZXNzYWdlIHR5cGUgd2l0aCByZWZsZWN0aW9uIGluZm9ybWF0aW9uLCBtYXkgcHJvdmlkZSBzcGVlZCBvcHRpbWl6ZWQgbWV0aG9kc1xuY2xhc3MgRmluYWxpemVBcnRpZmFjdFJlcXVlc3QkVHlwZSBleHRlbmRzIHJ1bnRpbWVfNS5NZXNzYWdlVHlwZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuRmluYWxpemVBcnRpZmFjdFJlcXVlc3RcIiwgW1xuICAgICAgICAgICAgeyBubzogMSwgbmFtZTogXCJ3b3JrZmxvd19ydW5fYmFja2VuZF9pZFwiLCBraW5kOiBcInNjYWxhclwiLCBUOiA5IC8qU2NhbGFyVHlwZS5TVFJJTkcqLyB9LFxuICAgICAgICAgICAgeyBubzogMiwgbmFtZTogXCJ3b3JrZmxvd19qb2JfcnVuX2JhY2tlbmRfaWRcIiwga2luZDogXCJzY2FsYXJcIiwgVDogOSAvKlNjYWxhclR5cGUuU1RSSU5HKi8gfSxcbiAgICAgICAgICAgIHsgbm86IDMsIG5hbWU6IFwibmFtZVwiLCBraW5kOiBcInNjYWxhclwiLCBUOiA5IC8qU2NhbGFyVHlwZS5TVFJJTkcqLyB9LFxuICAgICAgICAgICAgeyBubzogNCwgbmFtZTogXCJzaXplXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDMgLypTY2FsYXJUeXBlLklOVDY0Ki8gfSxcbiAgICAgICAgICAgIHsgbm86IDUsIG5hbWU6IFwiaGFzaFwiLCBraW5kOiBcIm1lc3NhZ2VcIiwgVDogKCkgPT4gd3JhcHBlcnNfMi5TdHJpbmdWYWx1ZSB9XG4gICAgICAgIF0pO1xuICAgIH1cbiAgICBjcmVhdGUodmFsdWUpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IHsgd29ya2Zsb3dSdW5CYWNrZW5kSWQ6IFwiXCIsIHdvcmtmbG93Sm9iUnVuQmFja2VuZElkOiBcIlwiLCBuYW1lOiBcIlwiLCBzaXplOiBcIjBcIiB9O1xuICAgICAgICBnbG9iYWxUaGlzLk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZXNzYWdlLCBydW50aW1lXzQuTUVTU0FHRV9UWVBFLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdGhpcyB9KTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAoMCwgcnVudGltZV8zLnJlZmxlY3Rpb25NZXJnZVBhcnRpYWwpKHRoaXMsIG1lc3NhZ2UsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5UmVhZChyZWFkZXIsIGxlbmd0aCwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGxldCBtZXNzYWdlID0gdGFyZ2V0ICE9PSBudWxsICYmIHRhcmdldCAhPT0gdm9pZCAwID8gdGFyZ2V0IDogdGhpcy5jcmVhdGUoKSwgZW5kID0gcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgIGxldCBbZmllbGRObywgd2lyZVR5cGVdID0gcmVhZGVyLnRhZygpO1xuICAgICAgICAgICAgc3dpdGNoIChmaWVsZE5vKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBzdHJpbmcgd29ya2Zsb3dfcnVuX2JhY2tlbmRfaWQgKi8gMTpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS53b3JrZmxvd1J1bkJhY2tlbmRJZCA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBzdHJpbmcgd29ya2Zsb3dfam9iX3J1bl9iYWNrZW5kX2lkICovIDI6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uud29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgLyogc3RyaW5nIG5hbWUgKi8gMzpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5uYW1lID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIC8qIGludDY0IHNpemUgKi8gNDpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zaXplID0gcmVhZGVyLmludDY0KCkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBnb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUgaGFzaCAqLyA1OlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmhhc2ggPSB3cmFwcGVyc18yLlN0cmluZ1ZhbHVlLmludGVybmFsQmluYXJ5UmVhZChyZWFkZXIsIHJlYWRlci51aW50MzIoKSwgb3B0aW9ucywgbWVzc2FnZS5oYXNoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBvcHRpb25zLnJlYWRVbmtub3duRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ID09PSBcInRocm93XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZ2xvYmFsVGhpcy5FcnJvcihgVW5rbm93biBmaWVsZCAke2ZpZWxkTm99ICh3aXJlIHR5cGUgJHt3aXJlVHlwZX0pIGZvciAke3RoaXMudHlwZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkID0gcmVhZGVyLnNraXAod2lyZVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAodSA9PT0gdHJ1ZSA/IHJ1bnRpbWVfMi5Vbmtub3duRmllbGRIYW5kbGVyLm9uUmVhZCA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIGZpZWxkTm8sIHdpcmVUeXBlLCBkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLCB3cml0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgLyogc3RyaW5nIHdvcmtmbG93X3J1bl9iYWNrZW5kX2lkID0gMTsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2Uud29ya2Zsb3dSdW5CYWNrZW5kSWQgIT09IFwiXCIpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDEsIHJ1bnRpbWVfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLnN0cmluZyhtZXNzYWdlLndvcmtmbG93UnVuQmFja2VuZElkKTtcbiAgICAgICAgLyogc3RyaW5nIHdvcmtmbG93X2pvYl9ydW5fYmFja2VuZF9pZCA9IDI7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLndvcmtmbG93Sm9iUnVuQmFja2VuZElkICE9PSBcIlwiKVxuICAgICAgICAgICAgd3JpdGVyLnRhZygyLCBydW50aW1lXzEuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKS5zdHJpbmcobWVzc2FnZS53b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZCk7XG4gICAgICAgIC8qIHN0cmluZyBuYW1lID0gMzsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2UubmFtZSAhPT0gXCJcIilcbiAgICAgICAgICAgIHdyaXRlci50YWcoMywgcnVudGltZV8xLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCkuc3RyaW5nKG1lc3NhZ2UubmFtZSk7XG4gICAgICAgIC8qIGludDY0IHNpemUgPSA0OyAqL1xuICAgICAgICBpZiAobWVzc2FnZS5zaXplICE9PSBcIjBcIilcbiAgICAgICAgICAgIHdyaXRlci50YWcoNCwgcnVudGltZV8xLldpcmVUeXBlLlZhcmludCkuaW50NjQobWVzc2FnZS5zaXplKTtcbiAgICAgICAgLyogZ29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlIGhhc2ggPSA1OyAqL1xuICAgICAgICBpZiAobWVzc2FnZS5oYXNoKVxuICAgICAgICAgICAgd3JhcHBlcnNfMi5TdHJpbmdWYWx1ZS5pbnRlcm5hbEJpbmFyeVdyaXRlKG1lc3NhZ2UuaGFzaCwgd3JpdGVyLnRhZyg1LCBydW50aW1lXzEuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKS5mb3JrKCksIG9wdGlvbnMpLmpvaW4oKTtcbiAgICAgICAgbGV0IHUgPSBvcHRpb25zLndyaXRlVW5rbm93bkZpZWxkcztcbiAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgKHUgPT0gdHJ1ZSA/IHJ1bnRpbWVfMi5Vbmtub3duRmllbGRIYW5kbGVyLm9uV3JpdGUgOiB1KSh0aGlzLnR5cGVOYW1lLCBtZXNzYWdlLCB3cml0ZXIpO1xuICAgICAgICByZXR1cm4gd3JpdGVyO1xuICAgIH1cbn1cbi8qKlxuICogQGdlbmVyYXRlZCBNZXNzYWdlVHlwZSBmb3IgcHJvdG9idWYgbWVzc2FnZSBnaXRodWIuYWN0aW9ucy5yZXN1bHRzLmFwaS52MS5GaW5hbGl6ZUFydGlmYWN0UmVxdWVzdFxuICovXG5leHBvcnRzLkZpbmFsaXplQXJ0aWZhY3RSZXF1ZXN0ID0gbmV3IEZpbmFsaXplQXJ0aWZhY3RSZXF1ZXN0JFR5cGUoKTtcbi8vIEBnZW5lcmF0ZWQgbWVzc2FnZSB0eXBlIHdpdGggcmVmbGVjdGlvbiBpbmZvcm1hdGlvbiwgbWF5IHByb3ZpZGUgc3BlZWQgb3B0aW1pemVkIG1ldGhvZHNcbmNsYXNzIEZpbmFsaXplQXJ0aWZhY3RSZXNwb25zZSRUeXBlIGV4dGVuZHMgcnVudGltZV81Lk1lc3NhZ2VUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoXCJnaXRodWIuYWN0aW9ucy5yZXN1bHRzLmFwaS52MS5GaW5hbGl6ZUFydGlmYWN0UmVzcG9uc2VcIiwgW1xuICAgICAgICAgICAgeyBubzogMSwgbmFtZTogXCJva1wiLCBraW5kOiBcInNjYWxhclwiLCBUOiA4IC8qU2NhbGFyVHlwZS5CT09MKi8gfSxcbiAgICAgICAgICAgIHsgbm86IDIsIG5hbWU6IFwiYXJ0aWZhY3RfaWRcIiwga2luZDogXCJzY2FsYXJcIiwgVDogMyAvKlNjYWxhclR5cGUuSU5UNjQqLyB9XG4gICAgICAgIF0pO1xuICAgIH1cbiAgICBjcmVhdGUodmFsdWUpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IHsgb2s6IGZhbHNlLCBhcnRpZmFjdElkOiBcIjBcIiB9O1xuICAgICAgICBnbG9iYWxUaGlzLk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZXNzYWdlLCBydW50aW1lXzQuTUVTU0FHRV9UWVBFLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdGhpcyB9KTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAoMCwgcnVudGltZV8zLnJlZmxlY3Rpb25NZXJnZVBhcnRpYWwpKHRoaXMsIG1lc3NhZ2UsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5UmVhZChyZWFkZXIsIGxlbmd0aCwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGxldCBtZXNzYWdlID0gdGFyZ2V0ICE9PSBudWxsICYmIHRhcmdldCAhPT0gdm9pZCAwID8gdGFyZ2V0IDogdGhpcy5jcmVhdGUoKSwgZW5kID0gcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgIGxldCBbZmllbGRObywgd2lyZVR5cGVdID0gcmVhZGVyLnRhZygpO1xuICAgICAgICAgICAgc3dpdGNoIChmaWVsZE5vKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBib29sIG9rICovIDE6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uub2sgPSByZWFkZXIuYm9vbCgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIC8qIGludDY0IGFydGlmYWN0X2lkICovIDI6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYXJ0aWZhY3RJZCA9IHJlYWRlci5pbnQ2NCgpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGxldCB1ID0gb3B0aW9ucy5yZWFkVW5rbm93bkZpZWxkO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSA9PT0gXCJ0aHJvd1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGdsb2JhbFRoaXMuRXJyb3IoYFVua25vd24gZmllbGQgJHtmaWVsZE5vfSAod2lyZSB0eXBlICR7d2lyZVR5cGV9KSBmb3IgJHt0aGlzLnR5cGVOYW1lfWApO1xuICAgICAgICAgICAgICAgICAgICBsZXQgZCA9IHJlYWRlci5za2lwKHdpcmVUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgKHUgPT09IHRydWUgPyBydW50aW1lXzIuVW5rbm93bkZpZWxkSGFuZGxlci5vblJlYWQgOiB1KSh0aGlzLnR5cGVOYW1lLCBtZXNzYWdlLCBmaWVsZE5vLCB3aXJlVHlwZSwgZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5V3JpdGUobWVzc2FnZSwgd3JpdGVyLCBvcHRpb25zKSB7XG4gICAgICAgIC8qIGJvb2wgb2sgPSAxOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS5vayAhPT0gZmFsc2UpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDEsIHJ1bnRpbWVfMS5XaXJlVHlwZS5WYXJpbnQpLmJvb2wobWVzc2FnZS5vayk7XG4gICAgICAgIC8qIGludDY0IGFydGlmYWN0X2lkID0gMjsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2UuYXJ0aWZhY3RJZCAhPT0gXCIwXCIpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDIsIHJ1bnRpbWVfMS5XaXJlVHlwZS5WYXJpbnQpLmludDY0KG1lc3NhZ2UuYXJ0aWZhY3RJZCk7XG4gICAgICAgIGxldCB1ID0gb3B0aW9ucy53cml0ZVVua25vd25GaWVsZHM7XG4gICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICh1ID09IHRydWUgPyBydW50aW1lXzIuVW5rbm93bkZpZWxkSGFuZGxlci5vbldyaXRlIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgd3JpdGVyKTtcbiAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICB9XG59XG4vKipcbiAqIEBnZW5lcmF0ZWQgTWVzc2FnZVR5cGUgZm9yIHByb3RvYnVmIG1lc3NhZ2UgZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuRmluYWxpemVBcnRpZmFjdFJlc3BvbnNlXG4gKi9cbmV4cG9ydHMuRmluYWxpemVBcnRpZmFjdFJlc3BvbnNlID0gbmV3IEZpbmFsaXplQXJ0aWZhY3RSZXNwb25zZSRUeXBlKCk7XG4vLyBAZ2VuZXJhdGVkIG1lc3NhZ2UgdHlwZSB3aXRoIHJlZmxlY3Rpb24gaW5mb3JtYXRpb24sIG1heSBwcm92aWRlIHNwZWVkIG9wdGltaXplZCBtZXRob2RzXG5jbGFzcyBMaXN0QXJ0aWZhY3RzUmVxdWVzdCRUeXBlIGV4dGVuZHMgcnVudGltZV81Lk1lc3NhZ2VUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoXCJnaXRodWIuYWN0aW9ucy5yZXN1bHRzLmFwaS52MS5MaXN0QXJ0aWZhY3RzUmVxdWVzdFwiLCBbXG4gICAgICAgICAgICB7IG5vOiAxLCBuYW1lOiBcIndvcmtmbG93X3J1bl9iYWNrZW5kX2lkXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDkgLypTY2FsYXJUeXBlLlNUUklORyovIH0sXG4gICAgICAgICAgICB7IG5vOiAyLCBuYW1lOiBcIndvcmtmbG93X2pvYl9ydW5fYmFja2VuZF9pZFwiLCBraW5kOiBcInNjYWxhclwiLCBUOiA5IC8qU2NhbGFyVHlwZS5TVFJJTkcqLyB9LFxuICAgICAgICAgICAgeyBubzogMywgbmFtZTogXCJuYW1lX2ZpbHRlclwiLCBraW5kOiBcIm1lc3NhZ2VcIiwgVDogKCkgPT4gd3JhcHBlcnNfMi5TdHJpbmdWYWx1ZSB9LFxuICAgICAgICAgICAgeyBubzogNCwgbmFtZTogXCJpZF9maWx0ZXJcIiwga2luZDogXCJtZXNzYWdlXCIsIFQ6ICgpID0+IHdyYXBwZXJzXzEuSW50NjRWYWx1ZSB9XG4gICAgICAgIF0pO1xuICAgIH1cbiAgICBjcmVhdGUodmFsdWUpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IHsgd29ya2Zsb3dSdW5CYWNrZW5kSWQ6IFwiXCIsIHdvcmtmbG93Sm9iUnVuQmFja2VuZElkOiBcIlwiIH07XG4gICAgICAgIGdsb2JhbFRoaXMuT2JqZWN0LmRlZmluZVByb3BlcnR5KG1lc3NhZ2UsIHJ1bnRpbWVfNC5NRVNTQUdFX1RZUEUsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0aGlzIH0pO1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICgwLCBydW50aW1lXzMucmVmbGVjdGlvbk1lcmdlUGFydGlhbCkodGhpcywgbWVzc2FnZSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlSZWFkKHJlYWRlciwgbGVuZ3RoLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSB0YXJnZXQgIT09IG51bGwgJiYgdGFyZ2V0ICE9PSB2b2lkIDAgPyB0YXJnZXQgOiB0aGlzLmNyZWF0ZSgpLCBlbmQgPSByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgbGV0IFtmaWVsZE5vLCB3aXJlVHlwZV0gPSByZWFkZXIudGFnKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkTm8pIHtcbiAgICAgICAgICAgICAgICBjYXNlIC8qIHN0cmluZyB3b3JrZmxvd19ydW5fYmFja2VuZF9pZCAqLyAxOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLndvcmtmbG93UnVuQmFja2VuZElkID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIC8qIHN0cmluZyB3b3JrZmxvd19qb2JfcnVuX2JhY2tlbmRfaWQgKi8gMjpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS53b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZCA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBnb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUgbmFtZV9maWx0ZXIgKi8gMzpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5uYW1lRmlsdGVyID0gd3JhcHBlcnNfMi5TdHJpbmdWYWx1ZS5pbnRlcm5hbEJpbmFyeVJlYWQocmVhZGVyLCByZWFkZXIudWludDMyKCksIG9wdGlvbnMsIG1lc3NhZ2UubmFtZUZpbHRlcik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgLyogZ29vZ2xlLnByb3RvYnVmLkludDY0VmFsdWUgaWRfZmlsdGVyICovIDQ6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuaWRGaWx0ZXIgPSB3cmFwcGVyc18xLkludDY0VmFsdWUuaW50ZXJuYWxCaW5hcnlSZWFkKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpLCBvcHRpb25zLCBtZXNzYWdlLmlkRmlsdGVyKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBvcHRpb25zLnJlYWRVbmtub3duRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ID09PSBcInRocm93XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZ2xvYmFsVGhpcy5FcnJvcihgVW5rbm93biBmaWVsZCAke2ZpZWxkTm99ICh3aXJlIHR5cGUgJHt3aXJlVHlwZX0pIGZvciAke3RoaXMudHlwZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkID0gcmVhZGVyLnNraXAod2lyZVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAodSA9PT0gdHJ1ZSA/IHJ1bnRpbWVfMi5Vbmtub3duRmllbGRIYW5kbGVyLm9uUmVhZCA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIGZpZWxkTm8sIHdpcmVUeXBlLCBkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLCB3cml0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgLyogc3RyaW5nIHdvcmtmbG93X3J1bl9iYWNrZW5kX2lkID0gMTsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2Uud29ya2Zsb3dSdW5CYWNrZW5kSWQgIT09IFwiXCIpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDEsIHJ1bnRpbWVfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLnN0cmluZyhtZXNzYWdlLndvcmtmbG93UnVuQmFja2VuZElkKTtcbiAgICAgICAgLyogc3RyaW5nIHdvcmtmbG93X2pvYl9ydW5fYmFja2VuZF9pZCA9IDI7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLndvcmtmbG93Sm9iUnVuQmFja2VuZElkICE9PSBcIlwiKVxuICAgICAgICAgICAgd3JpdGVyLnRhZygyLCBydW50aW1lXzEuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKS5zdHJpbmcobWVzc2FnZS53b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZCk7XG4gICAgICAgIC8qIGdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZSBuYW1lX2ZpbHRlciA9IDM7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLm5hbWVGaWx0ZXIpXG4gICAgICAgICAgICB3cmFwcGVyc18yLlN0cmluZ1ZhbHVlLmludGVybmFsQmluYXJ5V3JpdGUobWVzc2FnZS5uYW1lRmlsdGVyLCB3cml0ZXIudGFnKDMsIHJ1bnRpbWVfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLmZvcmsoKSwgb3B0aW9ucykuam9pbigpO1xuICAgICAgICAvKiBnb29nbGUucHJvdG9idWYuSW50NjRWYWx1ZSBpZF9maWx0ZXIgPSA0OyAqL1xuICAgICAgICBpZiAobWVzc2FnZS5pZEZpbHRlcilcbiAgICAgICAgICAgIHdyYXBwZXJzXzEuSW50NjRWYWx1ZS5pbnRlcm5hbEJpbmFyeVdyaXRlKG1lc3NhZ2UuaWRGaWx0ZXIsIHdyaXRlci50YWcoNCwgcnVudGltZV8xLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCkuZm9yaygpLCBvcHRpb25zKS5qb2luKCk7XG4gICAgICAgIGxldCB1ID0gb3B0aW9ucy53cml0ZVVua25vd25GaWVsZHM7XG4gICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICh1ID09IHRydWUgPyBydW50aW1lXzIuVW5rbm93bkZpZWxkSGFuZGxlci5vbldyaXRlIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgd3JpdGVyKTtcbiAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICB9XG59XG4vKipcbiAqIEBnZW5lcmF0ZWQgTWVzc2FnZVR5cGUgZm9yIHByb3RvYnVmIG1lc3NhZ2UgZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuTGlzdEFydGlmYWN0c1JlcXVlc3RcbiAqL1xuZXhwb3J0cy5MaXN0QXJ0aWZhY3RzUmVxdWVzdCA9IG5ldyBMaXN0QXJ0aWZhY3RzUmVxdWVzdCRUeXBlKCk7XG4vLyBAZ2VuZXJhdGVkIG1lc3NhZ2UgdHlwZSB3aXRoIHJlZmxlY3Rpb24gaW5mb3JtYXRpb24sIG1heSBwcm92aWRlIHNwZWVkIG9wdGltaXplZCBtZXRob2RzXG5jbGFzcyBMaXN0QXJ0aWZhY3RzUmVzcG9uc2UkVHlwZSBleHRlbmRzIHJ1bnRpbWVfNS5NZXNzYWdlVHlwZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuTGlzdEFydGlmYWN0c1Jlc3BvbnNlXCIsIFtcbiAgICAgICAgICAgIHsgbm86IDEsIG5hbWU6IFwiYXJ0aWZhY3RzXCIsIGtpbmQ6IFwibWVzc2FnZVwiLCByZXBlYXQ6IDEgLypSZXBlYXRUeXBlLlBBQ0tFRCovLCBUOiAoKSA9PiBleHBvcnRzLkxpc3RBcnRpZmFjdHNSZXNwb25zZV9Nb25vbGl0aEFydGlmYWN0IH1cbiAgICAgICAgXSk7XG4gICAgfVxuICAgIGNyZWF0ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0geyBhcnRpZmFjdHM6IFtdIH07XG4gICAgICAgIGdsb2JhbFRoaXMuT2JqZWN0LmRlZmluZVByb3BlcnR5KG1lc3NhZ2UsIHJ1bnRpbWVfNC5NRVNTQUdFX1RZUEUsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0aGlzIH0pO1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICgwLCBydW50aW1lXzMucmVmbGVjdGlvbk1lcmdlUGFydGlhbCkodGhpcywgbWVzc2FnZSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlSZWFkKHJlYWRlciwgbGVuZ3RoLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSB0YXJnZXQgIT09IG51bGwgJiYgdGFyZ2V0ICE9PSB2b2lkIDAgPyB0YXJnZXQgOiB0aGlzLmNyZWF0ZSgpLCBlbmQgPSByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgbGV0IFtmaWVsZE5vLCB3aXJlVHlwZV0gPSByZWFkZXIudGFnKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkTm8pIHtcbiAgICAgICAgICAgICAgICBjYXNlIC8qIHJlcGVhdGVkIGdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkxpc3RBcnRpZmFjdHNSZXNwb25zZS5Nb25vbGl0aEFydGlmYWN0IGFydGlmYWN0cyAqLyAxOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmFydGlmYWN0cy5wdXNoKGV4cG9ydHMuTGlzdEFydGlmYWN0c1Jlc3BvbnNlX01vbm9saXRoQXJ0aWZhY3QuaW50ZXJuYWxCaW5hcnlSZWFkKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpLCBvcHRpb25zKSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGxldCB1ID0gb3B0aW9ucy5yZWFkVW5rbm93bkZpZWxkO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSA9PT0gXCJ0aHJvd1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGdsb2JhbFRoaXMuRXJyb3IoYFVua25vd24gZmllbGQgJHtmaWVsZE5vfSAod2lyZSB0eXBlICR7d2lyZVR5cGV9KSBmb3IgJHt0aGlzLnR5cGVOYW1lfWApO1xuICAgICAgICAgICAgICAgICAgICBsZXQgZCA9IHJlYWRlci5za2lwKHdpcmVUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgKHUgPT09IHRydWUgPyBydW50aW1lXzIuVW5rbm93bkZpZWxkSGFuZGxlci5vblJlYWQgOiB1KSh0aGlzLnR5cGVOYW1lLCBtZXNzYWdlLCBmaWVsZE5vLCB3aXJlVHlwZSwgZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5V3JpdGUobWVzc2FnZSwgd3JpdGVyLCBvcHRpb25zKSB7XG4gICAgICAgIC8qIHJlcGVhdGVkIGdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkxpc3RBcnRpZmFjdHNSZXNwb25zZS5Nb25vbGl0aEFydGlmYWN0IGFydGlmYWN0cyA9IDE7ICovXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWVzc2FnZS5hcnRpZmFjdHMubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICBleHBvcnRzLkxpc3RBcnRpZmFjdHNSZXNwb25zZV9Nb25vbGl0aEFydGlmYWN0LmludGVybmFsQmluYXJ5V3JpdGUobWVzc2FnZS5hcnRpZmFjdHNbaV0sIHdyaXRlci50YWcoMSwgcnVudGltZV8xLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCkuZm9yaygpLCBvcHRpb25zKS5qb2luKCk7XG4gICAgICAgIGxldCB1ID0gb3B0aW9ucy53cml0ZVVua25vd25GaWVsZHM7XG4gICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICh1ID09IHRydWUgPyBydW50aW1lXzIuVW5rbm93bkZpZWxkSGFuZGxlci5vbldyaXRlIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgd3JpdGVyKTtcbiAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICB9XG59XG4vKipcbiAqIEBnZW5lcmF0ZWQgTWVzc2FnZVR5cGUgZm9yIHByb3RvYnVmIG1lc3NhZ2UgZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuTGlzdEFydGlmYWN0c1Jlc3BvbnNlXG4gKi9cbmV4cG9ydHMuTGlzdEFydGlmYWN0c1Jlc3BvbnNlID0gbmV3IExpc3RBcnRpZmFjdHNSZXNwb25zZSRUeXBlKCk7XG4vLyBAZ2VuZXJhdGVkIG1lc3NhZ2UgdHlwZSB3aXRoIHJlZmxlY3Rpb24gaW5mb3JtYXRpb24sIG1heSBwcm92aWRlIHNwZWVkIG9wdGltaXplZCBtZXRob2RzXG5jbGFzcyBMaXN0QXJ0aWZhY3RzUmVzcG9uc2VfTW9ub2xpdGhBcnRpZmFjdCRUeXBlIGV4dGVuZHMgcnVudGltZV81Lk1lc3NhZ2VUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoXCJnaXRodWIuYWN0aW9ucy5yZXN1bHRzLmFwaS52MS5MaXN0QXJ0aWZhY3RzUmVzcG9uc2UuTW9ub2xpdGhBcnRpZmFjdFwiLCBbXG4gICAgICAgICAgICB7IG5vOiAxLCBuYW1lOiBcIndvcmtmbG93X3J1bl9iYWNrZW5kX2lkXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDkgLypTY2FsYXJUeXBlLlNUUklORyovIH0sXG4gICAgICAgICAgICB7IG5vOiAyLCBuYW1lOiBcIndvcmtmbG93X2pvYl9ydW5fYmFja2VuZF9pZFwiLCBraW5kOiBcInNjYWxhclwiLCBUOiA5IC8qU2NhbGFyVHlwZS5TVFJJTkcqLyB9LFxuICAgICAgICAgICAgeyBubzogMywgbmFtZTogXCJkYXRhYmFzZV9pZFwiLCBraW5kOiBcInNjYWxhclwiLCBUOiAzIC8qU2NhbGFyVHlwZS5JTlQ2NCovIH0sXG4gICAgICAgICAgICB7IG5vOiA0LCBuYW1lOiBcIm5hbWVcIiwga2luZDogXCJzY2FsYXJcIiwgVDogOSAvKlNjYWxhclR5cGUuU1RSSU5HKi8gfSxcbiAgICAgICAgICAgIHsgbm86IDUsIG5hbWU6IFwic2l6ZVwiLCBraW5kOiBcInNjYWxhclwiLCBUOiAzIC8qU2NhbGFyVHlwZS5JTlQ2NCovIH0sXG4gICAgICAgICAgICB7IG5vOiA2LCBuYW1lOiBcImNyZWF0ZWRfYXRcIiwga2luZDogXCJtZXNzYWdlXCIsIFQ6ICgpID0+IHRpbWVzdGFtcF8xLlRpbWVzdGFtcCB9XG4gICAgICAgIF0pO1xuICAgIH1cbiAgICBjcmVhdGUodmFsdWUpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IHsgd29ya2Zsb3dSdW5CYWNrZW5kSWQ6IFwiXCIsIHdvcmtmbG93Sm9iUnVuQmFja2VuZElkOiBcIlwiLCBkYXRhYmFzZUlkOiBcIjBcIiwgbmFtZTogXCJcIiwgc2l6ZTogXCIwXCIgfTtcbiAgICAgICAgZ2xvYmFsVGhpcy5PYmplY3QuZGVmaW5lUHJvcGVydHkobWVzc2FnZSwgcnVudGltZV80Lk1FU1NBR0VfVFlQRSwgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRoaXMgfSk7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgKDAsIHJ1bnRpbWVfMy5yZWZsZWN0aW9uTWVyZ2VQYXJ0aWFsKSh0aGlzLCBtZXNzYWdlLCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVJlYWQocmVhZGVyLCBsZW5ndGgsIG9wdGlvbnMsIHRhcmdldCkge1xuICAgICAgICBsZXQgbWVzc2FnZSA9IHRhcmdldCAhPT0gbnVsbCAmJiB0YXJnZXQgIT09IHZvaWQgMCA/IHRhcmdldCA6IHRoaXMuY3JlYXRlKCksIGVuZCA9IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICBsZXQgW2ZpZWxkTm8sIHdpcmVUeXBlXSA9IHJlYWRlci50YWcoKTtcbiAgICAgICAgICAgIHN3aXRjaCAoZmllbGRObykge1xuICAgICAgICAgICAgICAgIGNhc2UgLyogc3RyaW5nIHdvcmtmbG93X3J1bl9iYWNrZW5kX2lkICovIDE6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uud29ya2Zsb3dSdW5CYWNrZW5kSWQgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgLyogc3RyaW5nIHdvcmtmbG93X2pvYl9ydW5fYmFja2VuZF9pZCAqLyAyOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLndvcmtmbG93Sm9iUnVuQmFja2VuZElkID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIC8qIGludDY0IGRhdGFiYXNlX2lkICovIDM6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZGF0YWJhc2VJZCA9IHJlYWRlci5pbnQ2NCgpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgLyogc3RyaW5nIG5hbWUgKi8gNDpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5uYW1lID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIC8qIGludDY0IHNpemUgKi8gNTpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zaXplID0gcmVhZGVyLmludDY0KCkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBnb29nbGUucHJvdG9idWYuVGltZXN0YW1wIGNyZWF0ZWRfYXQgKi8gNjpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5jcmVhdGVkQXQgPSB0aW1lc3RhbXBfMS5UaW1lc3RhbXAuaW50ZXJuYWxCaW5hcnlSZWFkKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpLCBvcHRpb25zLCBtZXNzYWdlLmNyZWF0ZWRBdCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGxldCB1ID0gb3B0aW9ucy5yZWFkVW5rbm93bkZpZWxkO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSA9PT0gXCJ0aHJvd1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGdsb2JhbFRoaXMuRXJyb3IoYFVua25vd24gZmllbGQgJHtmaWVsZE5vfSAod2lyZSB0eXBlICR7d2lyZVR5cGV9KSBmb3IgJHt0aGlzLnR5cGVOYW1lfWApO1xuICAgICAgICAgICAgICAgICAgICBsZXQgZCA9IHJlYWRlci5za2lwKHdpcmVUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgKHUgPT09IHRydWUgPyBydW50aW1lXzIuVW5rbm93bkZpZWxkSGFuZGxlci5vblJlYWQgOiB1KSh0aGlzLnR5cGVOYW1lLCBtZXNzYWdlLCBmaWVsZE5vLCB3aXJlVHlwZSwgZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5V3JpdGUobWVzc2FnZSwgd3JpdGVyLCBvcHRpb25zKSB7XG4gICAgICAgIC8qIHN0cmluZyB3b3JrZmxvd19ydW5fYmFja2VuZF9pZCA9IDE7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLndvcmtmbG93UnVuQmFja2VuZElkICE9PSBcIlwiKVxuICAgICAgICAgICAgd3JpdGVyLnRhZygxLCBydW50aW1lXzEuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKS5zdHJpbmcobWVzc2FnZS53b3JrZmxvd1J1bkJhY2tlbmRJZCk7XG4gICAgICAgIC8qIHN0cmluZyB3b3JrZmxvd19qb2JfcnVuX2JhY2tlbmRfaWQgPSAyOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS53b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZCAhPT0gXCJcIilcbiAgICAgICAgICAgIHdyaXRlci50YWcoMiwgcnVudGltZV8xLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCkuc3RyaW5nKG1lc3NhZ2Uud29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQpO1xuICAgICAgICAvKiBpbnQ2NCBkYXRhYmFzZV9pZCA9IDM7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLmRhdGFiYXNlSWQgIT09IFwiMFwiKVxuICAgICAgICAgICAgd3JpdGVyLnRhZygzLCBydW50aW1lXzEuV2lyZVR5cGUuVmFyaW50KS5pbnQ2NChtZXNzYWdlLmRhdGFiYXNlSWQpO1xuICAgICAgICAvKiBzdHJpbmcgbmFtZSA9IDQ7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLm5hbWUgIT09IFwiXCIpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDQsIHJ1bnRpbWVfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLnN0cmluZyhtZXNzYWdlLm5hbWUpO1xuICAgICAgICAvKiBpbnQ2NCBzaXplID0gNTsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2Uuc2l6ZSAhPT0gXCIwXCIpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDUsIHJ1bnRpbWVfMS5XaXJlVHlwZS5WYXJpbnQpLmludDY0KG1lc3NhZ2Uuc2l6ZSk7XG4gICAgICAgIC8qIGdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAgY3JlYXRlZF9hdCA9IDY7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLmNyZWF0ZWRBdClcbiAgICAgICAgICAgIHRpbWVzdGFtcF8xLlRpbWVzdGFtcC5pbnRlcm5hbEJpbmFyeVdyaXRlKG1lc3NhZ2UuY3JlYXRlZEF0LCB3cml0ZXIudGFnKDYsIHJ1bnRpbWVfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLmZvcmsoKSwgb3B0aW9ucykuam9pbigpO1xuICAgICAgICBsZXQgdSA9IG9wdGlvbnMud3JpdGVVbmtub3duRmllbGRzO1xuICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAodSA9PSB0cnVlID8gcnVudGltZV8yLlVua25vd25GaWVsZEhhbmRsZXIub25Xcml0ZSA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIHdyaXRlcik7XG4gICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgfVxufVxuLyoqXG4gKiBAZ2VuZXJhdGVkIE1lc3NhZ2VUeXBlIGZvciBwcm90b2J1ZiBtZXNzYWdlIGdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkxpc3RBcnRpZmFjdHNSZXNwb25zZS5Nb25vbGl0aEFydGlmYWN0XG4gKi9cbmV4cG9ydHMuTGlzdEFydGlmYWN0c1Jlc3BvbnNlX01vbm9saXRoQXJ0aWZhY3QgPSBuZXcgTGlzdEFydGlmYWN0c1Jlc3BvbnNlX01vbm9saXRoQXJ0aWZhY3QkVHlwZSgpO1xuLy8gQGdlbmVyYXRlZCBtZXNzYWdlIHR5cGUgd2l0aCByZWZsZWN0aW9uIGluZm9ybWF0aW9uLCBtYXkgcHJvdmlkZSBzcGVlZCBvcHRpbWl6ZWQgbWV0aG9kc1xuY2xhc3MgR2V0U2lnbmVkQXJ0aWZhY3RVUkxSZXF1ZXN0JFR5cGUgZXh0ZW5kcyBydW50aW1lXzUuTWVzc2FnZVR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcImdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkdldFNpZ25lZEFydGlmYWN0VVJMUmVxdWVzdFwiLCBbXG4gICAgICAgICAgICB7IG5vOiAxLCBuYW1lOiBcIndvcmtmbG93X3J1bl9iYWNrZW5kX2lkXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDkgLypTY2FsYXJUeXBlLlNUUklORyovIH0sXG4gICAgICAgICAgICB7IG5vOiAyLCBuYW1lOiBcIndvcmtmbG93X2pvYl9ydW5fYmFja2VuZF9pZFwiLCBraW5kOiBcInNjYWxhclwiLCBUOiA5IC8qU2NhbGFyVHlwZS5TVFJJTkcqLyB9LFxuICAgICAgICAgICAgeyBubzogMywgbmFtZTogXCJuYW1lXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDkgLypTY2FsYXJUeXBlLlNUUklORyovIH1cbiAgICAgICAgXSk7XG4gICAgfVxuICAgIGNyZWF0ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0geyB3b3JrZmxvd1J1bkJhY2tlbmRJZDogXCJcIiwgd29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQ6IFwiXCIsIG5hbWU6IFwiXCIgfTtcbiAgICAgICAgZ2xvYmFsVGhpcy5PYmplY3QuZGVmaW5lUHJvcGVydHkobWVzc2FnZSwgcnVudGltZV80Lk1FU1NBR0VfVFlQRSwgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRoaXMgfSk7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgKDAsIHJ1bnRpbWVfMy5yZWZsZWN0aW9uTWVyZ2VQYXJ0aWFsKSh0aGlzLCBtZXNzYWdlLCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVJlYWQocmVhZGVyLCBsZW5ndGgsIG9wdGlvbnMsIHRhcmdldCkge1xuICAgICAgICBsZXQgbWVzc2FnZSA9IHRhcmdldCAhPT0gbnVsbCAmJiB0YXJnZXQgIT09IHZvaWQgMCA/IHRhcmdldCA6IHRoaXMuY3JlYXRlKCksIGVuZCA9IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICBsZXQgW2ZpZWxkTm8sIHdpcmVUeXBlXSA9IHJlYWRlci50YWcoKTtcbiAgICAgICAgICAgIHN3aXRjaCAoZmllbGRObykge1xuICAgICAgICAgICAgICAgIGNhc2UgLyogc3RyaW5nIHdvcmtmbG93X3J1bl9iYWNrZW5kX2lkICovIDE6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uud29ya2Zsb3dSdW5CYWNrZW5kSWQgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgLyogc3RyaW5nIHdvcmtmbG93X2pvYl9ydW5fYmFja2VuZF9pZCAqLyAyOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLndvcmtmbG93Sm9iUnVuQmFja2VuZElkID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIC8qIHN0cmluZyBuYW1lICovIDM6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UubmFtZSA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBvcHRpb25zLnJlYWRVbmtub3duRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ID09PSBcInRocm93XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZ2xvYmFsVGhpcy5FcnJvcihgVW5rbm93biBmaWVsZCAke2ZpZWxkTm99ICh3aXJlIHR5cGUgJHt3aXJlVHlwZX0pIGZvciAke3RoaXMudHlwZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkID0gcmVhZGVyLnNraXAod2lyZVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAodSA9PT0gdHJ1ZSA/IHJ1bnRpbWVfMi5Vbmtub3duRmllbGRIYW5kbGVyLm9uUmVhZCA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIGZpZWxkTm8sIHdpcmVUeXBlLCBkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLCB3cml0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgLyogc3RyaW5nIHdvcmtmbG93X3J1bl9iYWNrZW5kX2lkID0gMTsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2Uud29ya2Zsb3dSdW5CYWNrZW5kSWQgIT09IFwiXCIpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDEsIHJ1bnRpbWVfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLnN0cmluZyhtZXNzYWdlLndvcmtmbG93UnVuQmFja2VuZElkKTtcbiAgICAgICAgLyogc3RyaW5nIHdvcmtmbG93X2pvYl9ydW5fYmFja2VuZF9pZCA9IDI7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLndvcmtmbG93Sm9iUnVuQmFja2VuZElkICE9PSBcIlwiKVxuICAgICAgICAgICAgd3JpdGVyLnRhZygyLCBydW50aW1lXzEuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKS5zdHJpbmcobWVzc2FnZS53b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZCk7XG4gICAgICAgIC8qIHN0cmluZyBuYW1lID0gMzsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2UubmFtZSAhPT0gXCJcIilcbiAgICAgICAgICAgIHdyaXRlci50YWcoMywgcnVudGltZV8xLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCkuc3RyaW5nKG1lc3NhZ2UubmFtZSk7XG4gICAgICAgIGxldCB1ID0gb3B0aW9ucy53cml0ZVVua25vd25GaWVsZHM7XG4gICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICh1ID09IHRydWUgPyBydW50aW1lXzIuVW5rbm93bkZpZWxkSGFuZGxlci5vbldyaXRlIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgd3JpdGVyKTtcbiAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICB9XG59XG4vKipcbiAqIEBnZW5lcmF0ZWQgTWVzc2FnZVR5cGUgZm9yIHByb3RvYnVmIG1lc3NhZ2UgZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuR2V0U2lnbmVkQXJ0aWZhY3RVUkxSZXF1ZXN0XG4gKi9cbmV4cG9ydHMuR2V0U2lnbmVkQXJ0aWZhY3RVUkxSZXF1ZXN0ID0gbmV3IEdldFNpZ25lZEFydGlmYWN0VVJMUmVxdWVzdCRUeXBlKCk7XG4vLyBAZ2VuZXJhdGVkIG1lc3NhZ2UgdHlwZSB3aXRoIHJlZmxlY3Rpb24gaW5mb3JtYXRpb24sIG1heSBwcm92aWRlIHNwZWVkIG9wdGltaXplZCBtZXRob2RzXG5jbGFzcyBHZXRTaWduZWRBcnRpZmFjdFVSTFJlc3BvbnNlJFR5cGUgZXh0ZW5kcyBydW50aW1lXzUuTWVzc2FnZVR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcImdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkdldFNpZ25lZEFydGlmYWN0VVJMUmVzcG9uc2VcIiwgW1xuICAgICAgICAgICAgeyBubzogMSwgbmFtZTogXCJzaWduZWRfdXJsXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDkgLypTY2FsYXJUeXBlLlNUUklORyovIH1cbiAgICAgICAgXSk7XG4gICAgfVxuICAgIGNyZWF0ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0geyBzaWduZWRVcmw6IFwiXCIgfTtcbiAgICAgICAgZ2xvYmFsVGhpcy5PYmplY3QuZGVmaW5lUHJvcGVydHkobWVzc2FnZSwgcnVudGltZV80Lk1FU1NBR0VfVFlQRSwgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRoaXMgfSk7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgKDAsIHJ1bnRpbWVfMy5yZWZsZWN0aW9uTWVyZ2VQYXJ0aWFsKSh0aGlzLCBtZXNzYWdlLCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVJlYWQocmVhZGVyLCBsZW5ndGgsIG9wdGlvbnMsIHRhcmdldCkge1xuICAgICAgICBsZXQgbWVzc2FnZSA9IHRhcmdldCAhPT0gbnVsbCAmJiB0YXJnZXQgIT09IHZvaWQgMCA/IHRhcmdldCA6IHRoaXMuY3JlYXRlKCksIGVuZCA9IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICBsZXQgW2ZpZWxkTm8sIHdpcmVUeXBlXSA9IHJlYWRlci50YWcoKTtcbiAgICAgICAgICAgIHN3aXRjaCAoZmllbGRObykge1xuICAgICAgICAgICAgICAgIGNhc2UgLyogc3RyaW5nIHNpZ25lZF91cmwgKi8gMTpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zaWduZWRVcmwgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGxldCB1ID0gb3B0aW9ucy5yZWFkVW5rbm93bkZpZWxkO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSA9PT0gXCJ0aHJvd1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGdsb2JhbFRoaXMuRXJyb3IoYFVua25vd24gZmllbGQgJHtmaWVsZE5vfSAod2lyZSB0eXBlICR7d2lyZVR5cGV9KSBmb3IgJHt0aGlzLnR5cGVOYW1lfWApO1xuICAgICAgICAgICAgICAgICAgICBsZXQgZCA9IHJlYWRlci5za2lwKHdpcmVUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgKHUgPT09IHRydWUgPyBydW50aW1lXzIuVW5rbm93bkZpZWxkSGFuZGxlci5vblJlYWQgOiB1KSh0aGlzLnR5cGVOYW1lLCBtZXNzYWdlLCBmaWVsZE5vLCB3aXJlVHlwZSwgZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5V3JpdGUobWVzc2FnZSwgd3JpdGVyLCBvcHRpb25zKSB7XG4gICAgICAgIC8qIHN0cmluZyBzaWduZWRfdXJsID0gMTsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2Uuc2lnbmVkVXJsICE9PSBcIlwiKVxuICAgICAgICAgICAgd3JpdGVyLnRhZygxLCBydW50aW1lXzEuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKS5zdHJpbmcobWVzc2FnZS5zaWduZWRVcmwpO1xuICAgICAgICBsZXQgdSA9IG9wdGlvbnMud3JpdGVVbmtub3duRmllbGRzO1xuICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAodSA9PSB0cnVlID8gcnVudGltZV8yLlVua25vd25GaWVsZEhhbmRsZXIub25Xcml0ZSA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIHdyaXRlcik7XG4gICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgfVxufVxuLyoqXG4gKiBAZ2VuZXJhdGVkIE1lc3NhZ2VUeXBlIGZvciBwcm90b2J1ZiBtZXNzYWdlIGdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkdldFNpZ25lZEFydGlmYWN0VVJMUmVzcG9uc2VcbiAqL1xuZXhwb3J0cy5HZXRTaWduZWRBcnRpZmFjdFVSTFJlc3BvbnNlID0gbmV3IEdldFNpZ25lZEFydGlmYWN0VVJMUmVzcG9uc2UkVHlwZSgpO1xuLy8gQGdlbmVyYXRlZCBtZXNzYWdlIHR5cGUgd2l0aCByZWZsZWN0aW9uIGluZm9ybWF0aW9uLCBtYXkgcHJvdmlkZSBzcGVlZCBvcHRpbWl6ZWQgbWV0aG9kc1xuY2xhc3MgRGVsZXRlQXJ0aWZhY3RSZXF1ZXN0JFR5cGUgZXh0ZW5kcyBydW50aW1lXzUuTWVzc2FnZVR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcImdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkRlbGV0ZUFydGlmYWN0UmVxdWVzdFwiLCBbXG4gICAgICAgICAgICB7IG5vOiAxLCBuYW1lOiBcIndvcmtmbG93X3J1bl9iYWNrZW5kX2lkXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDkgLypTY2FsYXJUeXBlLlNUUklORyovIH0sXG4gICAgICAgICAgICB7IG5vOiAyLCBuYW1lOiBcIndvcmtmbG93X2pvYl9ydW5fYmFja2VuZF9pZFwiLCBraW5kOiBcInNjYWxhclwiLCBUOiA5IC8qU2NhbGFyVHlwZS5TVFJJTkcqLyB9LFxuICAgICAgICAgICAgeyBubzogMywgbmFtZTogXCJuYW1lXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDkgLypTY2FsYXJUeXBlLlNUUklORyovIH1cbiAgICAgICAgXSk7XG4gICAgfVxuICAgIGNyZWF0ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0geyB3b3JrZmxvd1J1bkJhY2tlbmRJZDogXCJcIiwgd29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQ6IFwiXCIsIG5hbWU6IFwiXCIgfTtcbiAgICAgICAgZ2xvYmFsVGhpcy5PYmplY3QuZGVmaW5lUHJvcGVydHkobWVzc2FnZSwgcnVudGltZV80Lk1FU1NBR0VfVFlQRSwgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRoaXMgfSk7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgKDAsIHJ1bnRpbWVfMy5yZWZsZWN0aW9uTWVyZ2VQYXJ0aWFsKSh0aGlzLCBtZXNzYWdlLCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVJlYWQocmVhZGVyLCBsZW5ndGgsIG9wdGlvbnMsIHRhcmdldCkge1xuICAgICAgICBsZXQgbWVzc2FnZSA9IHRhcmdldCAhPT0gbnVsbCAmJiB0YXJnZXQgIT09IHZvaWQgMCA/IHRhcmdldCA6IHRoaXMuY3JlYXRlKCksIGVuZCA9IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICBsZXQgW2ZpZWxkTm8sIHdpcmVUeXBlXSA9IHJlYWRlci50YWcoKTtcbiAgICAgICAgICAgIHN3aXRjaCAoZmllbGRObykge1xuICAgICAgICAgICAgICAgIGNhc2UgLyogc3RyaW5nIHdvcmtmbG93X3J1bl9iYWNrZW5kX2lkICovIDE6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uud29ya2Zsb3dSdW5CYWNrZW5kSWQgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgLyogc3RyaW5nIHdvcmtmbG93X2pvYl9ydW5fYmFja2VuZF9pZCAqLyAyOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLndvcmtmbG93Sm9iUnVuQmFja2VuZElkID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIC8qIHN0cmluZyBuYW1lICovIDM6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UubmFtZSA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBvcHRpb25zLnJlYWRVbmtub3duRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ID09PSBcInRocm93XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZ2xvYmFsVGhpcy5FcnJvcihgVW5rbm93biBmaWVsZCAke2ZpZWxkTm99ICh3aXJlIHR5cGUgJHt3aXJlVHlwZX0pIGZvciAke3RoaXMudHlwZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkID0gcmVhZGVyLnNraXAod2lyZVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAodSA9PT0gdHJ1ZSA/IHJ1bnRpbWVfMi5Vbmtub3duRmllbGRIYW5kbGVyLm9uUmVhZCA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIGZpZWxkTm8sIHdpcmVUeXBlLCBkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLCB3cml0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgLyogc3RyaW5nIHdvcmtmbG93X3J1bl9iYWNrZW5kX2lkID0gMTsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2Uud29ya2Zsb3dSdW5CYWNrZW5kSWQgIT09IFwiXCIpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDEsIHJ1bnRpbWVfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLnN0cmluZyhtZXNzYWdlLndvcmtmbG93UnVuQmFja2VuZElkKTtcbiAgICAgICAgLyogc3RyaW5nIHdvcmtmbG93X2pvYl9ydW5fYmFja2VuZF9pZCA9IDI7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLndvcmtmbG93Sm9iUnVuQmFja2VuZElkICE9PSBcIlwiKVxuICAgICAgICAgICAgd3JpdGVyLnRhZygyLCBydW50aW1lXzEuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKS5zdHJpbmcobWVzc2FnZS53b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZCk7XG4gICAgICAgIC8qIHN0cmluZyBuYW1lID0gMzsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2UubmFtZSAhPT0gXCJcIilcbiAgICAgICAgICAgIHdyaXRlci50YWcoMywgcnVudGltZV8xLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCkuc3RyaW5nKG1lc3NhZ2UubmFtZSk7XG4gICAgICAgIGxldCB1ID0gb3B0aW9ucy53cml0ZVVua25vd25GaWVsZHM7XG4gICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICh1ID09IHRydWUgPyBydW50aW1lXzIuVW5rbm93bkZpZWxkSGFuZGxlci5vbldyaXRlIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgd3JpdGVyKTtcbiAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICB9XG59XG4vKipcbiAqIEBnZW5lcmF0ZWQgTWVzc2FnZVR5cGUgZm9yIHByb3RvYnVmIG1lc3NhZ2UgZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuRGVsZXRlQXJ0aWZhY3RSZXF1ZXN0XG4gKi9cbmV4cG9ydHMuRGVsZXRlQXJ0aWZhY3RSZXF1ZXN0ID0gbmV3IERlbGV0ZUFydGlmYWN0UmVxdWVzdCRUeXBlKCk7XG4vLyBAZ2VuZXJhdGVkIG1lc3NhZ2UgdHlwZSB3aXRoIHJlZmxlY3Rpb24gaW5mb3JtYXRpb24sIG1heSBwcm92aWRlIHNwZWVkIG9wdGltaXplZCBtZXRob2RzXG5jbGFzcyBEZWxldGVBcnRpZmFjdFJlc3BvbnNlJFR5cGUgZXh0ZW5kcyBydW50aW1lXzUuTWVzc2FnZVR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcImdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkRlbGV0ZUFydGlmYWN0UmVzcG9uc2VcIiwgW1xuICAgICAgICAgICAgeyBubzogMSwgbmFtZTogXCJva1wiLCBraW5kOiBcInNjYWxhclwiLCBUOiA4IC8qU2NhbGFyVHlwZS5CT09MKi8gfSxcbiAgICAgICAgICAgIHsgbm86IDIsIG5hbWU6IFwiYXJ0aWZhY3RfaWRcIiwga2luZDogXCJzY2FsYXJcIiwgVDogMyAvKlNjYWxhclR5cGUuSU5UNjQqLyB9XG4gICAgICAgIF0pO1xuICAgIH1cbiAgICBjcmVhdGUodmFsdWUpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IHsgb2s6IGZhbHNlLCBhcnRpZmFjdElkOiBcIjBcIiB9O1xuICAgICAgICBnbG9iYWxUaGlzLk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZXNzYWdlLCBydW50aW1lXzQuTUVTU0FHRV9UWVBFLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdGhpcyB9KTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAoMCwgcnVudGltZV8zLnJlZmxlY3Rpb25NZXJnZVBhcnRpYWwpKHRoaXMsIG1lc3NhZ2UsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5UmVhZChyZWFkZXIsIGxlbmd0aCwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGxldCBtZXNzYWdlID0gdGFyZ2V0ICE9PSBudWxsICYmIHRhcmdldCAhPT0gdm9pZCAwID8gdGFyZ2V0IDogdGhpcy5jcmVhdGUoKSwgZW5kID0gcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgIGxldCBbZmllbGRObywgd2lyZVR5cGVdID0gcmVhZGVyLnRhZygpO1xuICAgICAgICAgICAgc3dpdGNoIChmaWVsZE5vKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBib29sIG9rICovIDE6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uub2sgPSByZWFkZXIuYm9vbCgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIC8qIGludDY0IGFydGlmYWN0X2lkICovIDI6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYXJ0aWZhY3RJZCA9IHJlYWRlci5pbnQ2NCgpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGxldCB1ID0gb3B0aW9ucy5yZWFkVW5rbm93bkZpZWxkO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSA9PT0gXCJ0aHJvd1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGdsb2JhbFRoaXMuRXJyb3IoYFVua25vd24gZmllbGQgJHtmaWVsZE5vfSAod2lyZSB0eXBlICR7d2lyZVR5cGV9KSBmb3IgJHt0aGlzLnR5cGVOYW1lfWApO1xuICAgICAgICAgICAgICAgICAgICBsZXQgZCA9IHJlYWRlci5za2lwKHdpcmVUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgKHUgPT09IHRydWUgPyBydW50aW1lXzIuVW5rbm93bkZpZWxkSGFuZGxlci5vblJlYWQgOiB1KSh0aGlzLnR5cGVOYW1lLCBtZXNzYWdlLCBmaWVsZE5vLCB3aXJlVHlwZSwgZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5V3JpdGUobWVzc2FnZSwgd3JpdGVyLCBvcHRpb25zKSB7XG4gICAgICAgIC8qIGJvb2wgb2sgPSAxOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS5vayAhPT0gZmFsc2UpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDEsIHJ1bnRpbWVfMS5XaXJlVHlwZS5WYXJpbnQpLmJvb2wobWVzc2FnZS5vayk7XG4gICAgICAgIC8qIGludDY0IGFydGlmYWN0X2lkID0gMjsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2UuYXJ0aWZhY3RJZCAhPT0gXCIwXCIpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDIsIHJ1bnRpbWVfMS5XaXJlVHlwZS5WYXJpbnQpLmludDY0KG1lc3NhZ2UuYXJ0aWZhY3RJZCk7XG4gICAgICAgIGxldCB1ID0gb3B0aW9ucy53cml0ZVVua25vd25GaWVsZHM7XG4gICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICh1ID09IHRydWUgPyBydW50aW1lXzIuVW5rbm93bkZpZWxkSGFuZGxlci5vbldyaXRlIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgd3JpdGVyKTtcbiAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICB9XG59XG4vKipcbiAqIEBnZW5lcmF0ZWQgTWVzc2FnZVR5cGUgZm9yIHByb3RvYnVmIG1lc3NhZ2UgZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuRGVsZXRlQXJ0aWZhY3RSZXNwb25zZVxuICovXG5leHBvcnRzLkRlbGV0ZUFydGlmYWN0UmVzcG9uc2UgPSBuZXcgRGVsZXRlQXJ0aWZhY3RSZXNwb25zZSRUeXBlKCk7XG4vKipcbiAqIEBnZW5lcmF0ZWQgU2VydmljZVR5cGUgZm9yIHByb3RvYnVmIHNlcnZpY2UgZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuQXJ0aWZhY3RTZXJ2aWNlXG4gKi9cbmV4cG9ydHMuQXJ0aWZhY3RTZXJ2aWNlID0gbmV3IHJ1bnRpbWVfcnBjXzEuU2VydmljZVR5cGUoXCJnaXRodWIuYWN0aW9ucy5yZXN1bHRzLmFwaS52MS5BcnRpZmFjdFNlcnZpY2VcIiwgW1xuICAgIHsgbmFtZTogXCJDcmVhdGVBcnRpZmFjdFwiLCBvcHRpb25zOiB7fSwgSTogZXhwb3J0cy5DcmVhdGVBcnRpZmFjdFJlcXVlc3QsIE86IGV4cG9ydHMuQ3JlYXRlQXJ0aWZhY3RSZXNwb25zZSB9LFxuICAgIHsgbmFtZTogXCJGaW5hbGl6ZUFydGlmYWN0XCIsIG9wdGlvbnM6IHt9LCBJOiBleHBvcnRzLkZpbmFsaXplQXJ0aWZhY3RSZXF1ZXN0LCBPOiBleHBvcnRzLkZpbmFsaXplQXJ0aWZhY3RSZXNwb25zZSB9LFxuICAgIHsgbmFtZTogXCJMaXN0QXJ0aWZhY3RzXCIsIG9wdGlvbnM6IHt9LCBJOiBleHBvcnRzLkxpc3RBcnRpZmFjdHNSZXF1ZXN0LCBPOiBleHBvcnRzLkxpc3RBcnRpZmFjdHNSZXNwb25zZSB9LFxuICAgIHsgbmFtZTogXCJHZXRTaWduZWRBcnRpZmFjdFVSTFwiLCBvcHRpb25zOiB7fSwgSTogZXhwb3J0cy5HZXRTaWduZWRBcnRpZmFjdFVSTFJlcXVlc3QsIE86IGV4cG9ydHMuR2V0U2lnbmVkQXJ0aWZhY3RVUkxSZXNwb25zZSB9LFxuICAgIHsgbmFtZTogXCJEZWxldGVBcnRpZmFjdFwiLCBvcHRpb25zOiB7fSwgSTogZXhwb3J0cy5EZWxldGVBcnRpZmFjdFJlcXVlc3QsIE86IGV4cG9ydHMuRGVsZXRlQXJ0aWZhY3RSZXNwb25zZSB9XG5dKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFydGlmYWN0LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlzSG9vayA9IGV4cG9ydHMuY2hhaW5Ib29rcyA9IHZvaWQgMDtcbi8vIENoYWluSG9va3MgY3JlYXRlcyBhIG5ldyBTZXJ2ZXJIb29rIHdoaWNoIGNoYWlucyB0aGUgY2FsbGJhY2tzIGluXG4vLyBlYWNoIG9mIHRoZSBjb25zdGl0dWVudCBob29rcyBwYXNzZWQgaW4uIEVhY2ggaG9vayBmdW5jdGlvbiB3aWxsIGJlXG4vLyBjYWxsZWQgaW4gdGhlIG9yZGVyIG9mIHRoZSBTZXJ2ZXJIb29rcyB2YWx1ZXMgcGFzc2VkIGluLlxuLy9cbi8vIEZvciB0aGUgZXJyb3JpbmcgaG9va3MsIFJlcXVlc3RSZWNlaXZlZCBhbmQgUmVxdWVzdFJvdXRlZCwgYW55IHJldHVybmVkXG4vLyBlcnJvcnMgcHJldmVudCBwcm9jZXNzaW5nIGJ5IGxhdGVyIGhvb2tzLlxuZnVuY3Rpb24gY2hhaW5Ib29rcyguLi5ob29rcykge1xuICAgIGlmIChob29rcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChob29rcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGhvb2tzWzBdO1xuICAgIH1cbiAgICBjb25zdCBzZXJ2ZXJIb29rID0ge1xuICAgICAgICByZXF1ZXN0UmVjZWl2ZWQoY3R4KSB7XG4gICAgICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaG9vayBvZiBob29rcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWhvb2sucmVxdWVzdFJlY2VpdmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB5aWVsZCBob29rLnJlcXVlc3RSZWNlaXZlZChjdHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICByZXF1ZXN0UHJlcGFyZWQoY3R4KSB7XG4gICAgICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaG9vayBvZiBob29rcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWhvb2sucmVxdWVzdFByZXBhcmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXCJob29rIHJlcXVlc3RQcmVwYXJlZCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgcmVsZWFzZS4gXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJQbGVhc2UgdXNlIHJlc3BvbnNlUHJlcGFyZWQgaW5zdGVhZC5cIik7XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIGhvb2sucmVxdWVzdFByZXBhcmVkKGN0eCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlc3BvbnNlUHJlcGFyZWQoY3R4KSB7XG4gICAgICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaG9vayBvZiBob29rcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWhvb2sucmVzcG9uc2VQcmVwYXJlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgeWllbGQgaG9vay5yZXNwb25zZVByZXBhcmVkKGN0eCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlcXVlc3RTZW50KGN0eCkge1xuICAgICAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGhvb2sgb2YgaG9va3MpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFob29rLnJlcXVlc3RTZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXCJob29rIHJlcXVlc3RTZW50IGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCByZWxlYXNlLiBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlBsZWFzZSB1c2UgcmVzcG9uc2VTZW50IGluc3RlYWQuXCIpO1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCBob29rLnJlcXVlc3RTZW50KGN0eCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlc3BvbnNlU2VudChjdHgpIHtcbiAgICAgICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBob29rIG9mIGhvb2tzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaG9vay5yZXNwb25zZVNlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIGhvb2sucmVzcG9uc2VTZW50KGN0eCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlcXVlc3RSb3V0ZWQoY3R4KSB7XG4gICAgICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaG9vayBvZiBob29rcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWhvb2sucmVxdWVzdFJvdXRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgeWllbGQgaG9vay5yZXF1ZXN0Um91dGVkKGN0eCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yKGN0eCwgZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaG9vayBvZiBob29rcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWhvb2suZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIGhvb2suZXJyb3IoY3R4LCBlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgIH07XG4gICAgcmV0dXJuIHNlcnZlckhvb2s7XG59XG5leHBvcnRzLmNoYWluSG9va3MgPSBjaGFpbkhvb2tzO1xuZnVuY3Rpb24gaXNIb29rKG9iamVjdCkge1xuICAgIHJldHVybiAoXCJyZXF1ZXN0UmVjZWl2ZWRcIiBpbiBvYmplY3QgfHxcbiAgICAgICAgXCJyZXF1ZXN0UHJlcGFyZWRcIiBpbiBvYmplY3QgfHxcbiAgICAgICAgXCJyZXF1ZXN0U2VudFwiIGluIG9iamVjdCB8fFxuICAgICAgICBcInJlcXVlc3RSb3V0ZWRcIiBpbiBvYmplY3QgfHxcbiAgICAgICAgXCJyZXNwb25zZVByZXBhcmVkXCIgaW4gb2JqZWN0IHx8XG4gICAgICAgIFwicmVzcG9uc2VTZW50XCIgaW4gb2JqZWN0IHx8XG4gICAgICAgIFwiZXJyb3JcIiBpbiBvYmplY3QpO1xufVxuZXhwb3J0cy5pc0hvb2sgPSBpc0hvb2s7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc1ZhbGlkRXJyb3JDb2RlID0gZXhwb3J0cy5odHRwU3RhdHVzRnJvbUVycm9yQ29kZSA9IGV4cG9ydHMuVHdpcnBFcnJvckNvZGUgPSBleHBvcnRzLkJhZFJvdXRlRXJyb3IgPSBleHBvcnRzLkludGVybmFsU2VydmVyRXJyb3JXaXRoID0gZXhwb3J0cy5JbnRlcm5hbFNlcnZlckVycm9yID0gZXhwb3J0cy5SZXF1aXJlZEFyZ3VtZW50RXJyb3IgPSBleHBvcnRzLkludmFsaWRBcmd1bWVudEVycm9yID0gZXhwb3J0cy5Ob3RGb3VuZEVycm9yID0gZXhwb3J0cy5Ud2lycEVycm9yID0gdm9pZCAwO1xuLyoqXG4gKiBSZXByZXNlbnRzIGEgdHdpcnAgZXJyb3JcbiAqL1xuY2xhc3MgVHdpcnBFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3Rvcihjb2RlLCBtc2cpIHtcbiAgICAgICAgc3VwZXIobXNnKTtcbiAgICAgICAgdGhpcy5jb2RlID0gVHdpcnBFcnJvckNvZGUuSW50ZXJuYWw7XG4gICAgICAgIHRoaXMubWV0YSA9IHt9O1xuICAgICAgICB0aGlzLmNvZGUgPSBjb2RlO1xuICAgICAgICB0aGlzLm1zZyA9IG1zZztcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIFR3aXJwRXJyb3IucHJvdG90eXBlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhIG1ldGFkYXRhIGt2IHRvIHRoZSBlcnJvclxuICAgICAqIEBwYXJhbSBrZXlcbiAgICAgKiBAcGFyYW0gdmFsdWVcbiAgICAgKi9cbiAgICB3aXRoTWV0YShrZXksIHZhbHVlKSB7XG4gICAgICAgIHRoaXMubWV0YVtrZXldID0gdmFsdWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgc2luZ2xlIG1ldGFkYXRhIHZhbHVlXG4gICAgICogcmV0dXJuIFwiXCIgaWYgbm90IGZvdW5kXG4gICAgICogQHBhcmFtIGtleVxuICAgICAqL1xuICAgIGdldE1ldGEoa2V5KSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1ldGFba2V5XSB8fCBcIlwiO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGQgdGhlIG9yaWdpbmFsIGVycm9yIGNhdXNlXG4gICAgICogQHBhcmFtIGVyclxuICAgICAqIEBwYXJhbSBhZGRNZXRhXG4gICAgICovXG4gICAgd2l0aENhdXNlKGVyciwgYWRkTWV0YSA9IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuX29yaWdpbmFsQ2F1c2UgPSBlcnI7XG4gICAgICAgIGlmIChhZGRNZXRhKSB7XG4gICAgICAgICAgICB0aGlzLndpdGhNZXRhKFwiY2F1c2VcIiwgZXJyLm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBjYXVzZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29yaWdpbmFsQ2F1c2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGVycm9yIHJlcHJlc2VudGF0aW9uIHRvIEpTT05cbiAgICAgKi9cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgIGNvZGU6IHRoaXMuY29kZSxcbiAgICAgICAgICAgICAgICBtc2c6IHRoaXMubXNnLFxuICAgICAgICAgICAgICAgIG1ldGE6IHRoaXMubWV0YSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gYHtcImNvZGVcIjogXCJpbnRlcm5hbFwiLCBcIm1zZ1wiOiBcIlRoZXJlIHdhcyBhbiBlcnJvciBidXQgaXQgY291bGQgbm90IGJlIHNlcmlhbGl6ZWQgaW50byBKU09OXCJ9YDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSB0d2lycCBlcnJvciBmcm9tIGFuIG9iamVjdFxuICAgICAqIEBwYXJhbSBvYmpcbiAgICAgKi9cbiAgICBzdGF0aWMgZnJvbU9iamVjdChvYmopIHtcbiAgICAgICAgY29uc3QgY29kZSA9IG9ialtcImNvZGVcIl0gfHwgVHdpcnBFcnJvckNvZGUuVW5rbm93bjtcbiAgICAgICAgY29uc3QgbXNnID0gb2JqW1wibXNnXCJdIHx8IFwidW5rbm93blwiO1xuICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBUd2lycEVycm9yKGNvZGUsIG1zZyk7XG4gICAgICAgIGlmIChvYmpbXCJtZXRhXCJdKSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhvYmpbXCJtZXRhXCJdKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICBlcnJvci53aXRoTWV0YShrZXksIG9ialtcIm1ldGFcIl1ba2V5XSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgfVxufVxuZXhwb3J0cy5Ud2lycEVycm9yID0gVHdpcnBFcnJvcjtcbi8qKlxuICogTm90Rm91bmRFcnJvciBjb25zdHJ1Y3RvciBmb3IgdGhlIGNvbW1vbiBOb3RGb3VuZCBlcnJvci5cbiAqL1xuY2xhc3MgTm90Rm91bmRFcnJvciBleHRlbmRzIFR3aXJwRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKG1zZykge1xuICAgICAgICBzdXBlcihUd2lycEVycm9yQ29kZS5Ob3RGb3VuZCwgbXNnKTtcbiAgICB9XG59XG5leHBvcnRzLk5vdEZvdW5kRXJyb3IgPSBOb3RGb3VuZEVycm9yO1xuLyoqXG4gKiBJbnZhbGlkQXJndW1lbnRFcnJvciBjb25zdHJ1Y3RvciBmb3IgdGhlIGNvbW1vbiBJbnZhbGlkQXJndW1lbnQgZXJyb3IuIENhbiBiZVxuICogdXNlZCB3aGVuIGFuIGFyZ3VtZW50IGhhcyBpbnZhbGlkIGZvcm1hdCwgaXMgYSBudW1iZXIgb3V0IG9mIHJhbmdlLCBpcyBhIGJhZFxuICogb3B0aW9uLCBldGMpLlxuICovXG5jbGFzcyBJbnZhbGlkQXJndW1lbnRFcnJvciBleHRlbmRzIFR3aXJwRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKGFyZ3VtZW50LCB2YWxpZGF0aW9uTXNnKSB7XG4gICAgICAgIHN1cGVyKFR3aXJwRXJyb3JDb2RlLkludmFsaWRBcmd1bWVudCwgYXJndW1lbnQgKyBcIiBcIiArIHZhbGlkYXRpb25Nc2cpO1xuICAgICAgICB0aGlzLndpdGhNZXRhKFwiYXJndW1lbnRcIiwgYXJndW1lbnQpO1xuICAgIH1cbn1cbmV4cG9ydHMuSW52YWxpZEFyZ3VtZW50RXJyb3IgPSBJbnZhbGlkQXJndW1lbnRFcnJvcjtcbi8qKlxuICogUmVxdWlyZWRBcmd1bWVudEVycm9yIGlzIGEgbW9yZSBzcGVjaWZpYyBjb25zdHJ1Y3RvciBmb3IgSW52YWxpZEFyZ3VtZW50XG4gKiBlcnJvci4gU2hvdWxkIGJlIHVzZWQgd2hlbiB0aGUgYXJndW1lbnQgaXMgcmVxdWlyZWQgKGV4cGVjdGVkIHRvIGhhdmUgYVxuICogbm9uLXplcm8gdmFsdWUpLlxuICovXG5jbGFzcyBSZXF1aXJlZEFyZ3VtZW50RXJyb3IgZXh0ZW5kcyBJbnZhbGlkQXJndW1lbnRFcnJvciB7XG4gICAgY29uc3RydWN0b3IoYXJndW1lbnQpIHtcbiAgICAgICAgc3VwZXIoYXJndW1lbnQsIFwiaXMgcmVxdWlyZWRcIik7XG4gICAgfVxufVxuZXhwb3J0cy5SZXF1aXJlZEFyZ3VtZW50RXJyb3IgPSBSZXF1aXJlZEFyZ3VtZW50RXJyb3I7XG4vKipcbiAqIEludGVybmFsRXJyb3IgY29uc3RydWN0b3IgZm9yIHRoZSBjb21tb24gSW50ZXJuYWwgZXJyb3IuIFNob3VsZCBiZSB1c2VkIHRvXG4gKiBzcGVjaWZ5IHRoYXQgc29tZXRoaW5nIGJhZCBvciB1bmV4cGVjdGVkIGhhcHBlbmVkLlxuICovXG5jbGFzcyBJbnRlcm5hbFNlcnZlckVycm9yIGV4dGVuZHMgVHdpcnBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobXNnKSB7XG4gICAgICAgIHN1cGVyKFR3aXJwRXJyb3JDb2RlLkludGVybmFsLCBtc2cpO1xuICAgIH1cbn1cbmV4cG9ydHMuSW50ZXJuYWxTZXJ2ZXJFcnJvciA9IEludGVybmFsU2VydmVyRXJyb3I7XG4vKipcbiAqIEludGVybmFsRXJyb3JXaXRoIG1ha2VzIGFuIGludGVybmFsIGVycm9yLCB3cmFwcGluZyB0aGUgb3JpZ2luYWwgZXJyb3IgYW5kIHVzaW5nIGl0XG4gKiBmb3IgdGhlIGVycm9yIG1lc3NhZ2UsIGFuZCB3aXRoIG1ldGFkYXRhIFwiY2F1c2VcIiB3aXRoIHRoZSBvcmlnaW5hbCBlcnJvciB0eXBlLlxuICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGJ5IFR3aXJwIHNlcnZpY2VzIHRvIHdyYXAgbm9uLVR3aXJwIGVycm9ycyBhcyBpbnRlcm5hbCBlcnJvcnMuXG4gKiBUaGUgd3JhcHBlZCBlcnJvciBjYW4gYmUgZXh0cmFjdGVkIGxhdGVyIHdpdGggZXJyLmNhdXNlKClcbiAqL1xuY2xhc3MgSW50ZXJuYWxTZXJ2ZXJFcnJvcldpdGggZXh0ZW5kcyBJbnRlcm5hbFNlcnZlckVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihlcnIpIHtcbiAgICAgICAgc3VwZXIoZXJyLm1lc3NhZ2UpO1xuICAgICAgICB0aGlzLndpdGhNZXRhKFwiY2F1c2VcIiwgZXJyLm5hbWUpO1xuICAgICAgICB0aGlzLndpdGhDYXVzZShlcnIpO1xuICAgIH1cbn1cbmV4cG9ydHMuSW50ZXJuYWxTZXJ2ZXJFcnJvcldpdGggPSBJbnRlcm5hbFNlcnZlckVycm9yV2l0aDtcbi8qKlxuICogQSBzdGFuZGFyZCBCYWRSb3V0ZSBFcnJvclxuICovXG5jbGFzcyBCYWRSb3V0ZUVycm9yIGV4dGVuZHMgVHdpcnBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobXNnLCBtZXRob2QsIHVybCkge1xuICAgICAgICBzdXBlcihUd2lycEVycm9yQ29kZS5CYWRSb3V0ZSwgbXNnKTtcbiAgICAgICAgdGhpcy53aXRoTWV0YShcInR3aXJwX2ludmFsaWRfcm91dGVcIiwgbWV0aG9kICsgXCIgXCIgKyB1cmwpO1xuICAgIH1cbn1cbmV4cG9ydHMuQmFkUm91dGVFcnJvciA9IEJhZFJvdXRlRXJyb3I7XG52YXIgVHdpcnBFcnJvckNvZGU7XG4oZnVuY3Rpb24gKFR3aXJwRXJyb3JDb2RlKSB7XG4gICAgLy8gQ2FuY2VsZWQgaW5kaWNhdGVzIHRoZSBvcGVyYXRpb24gd2FzIGNhbmNlbGxlZCAodHlwaWNhbGx5IGJ5IHRoZSBjYWxsZXIpLlxuICAgIFR3aXJwRXJyb3JDb2RlW1wiQ2FuY2VsZWRcIl0gPSBcImNhbmNlbGVkXCI7XG4gICAgLy8gVW5rbm93biBlcnJvci4gRm9yIGV4YW1wbGUgd2hlbiBoYW5kbGluZyBlcnJvcnMgcmFpc2VkIGJ5IEFQSXMgdGhhdCBkbyBub3RcbiAgICAvLyByZXR1cm4gZW5vdWdoIGVycm9yIGluZm9ybWF0aW9uLlxuICAgIFR3aXJwRXJyb3JDb2RlW1wiVW5rbm93blwiXSA9IFwidW5rbm93blwiO1xuICAgIC8vIEludmFsaWRBcmd1bWVudCBpbmRpY2F0ZXMgY2xpZW50IHNwZWNpZmllZCBhbiBpbnZhbGlkIGFyZ3VtZW50LiBJdFxuICAgIC8vIGluZGljYXRlcyBhcmd1bWVudHMgdGhhdCBhcmUgcHJvYmxlbWF0aWMgcmVnYXJkbGVzcyBvZiB0aGUgc3RhdGUgb2YgdGhlXG4gICAgLy8gc3lzdGVtIChpLmUuIGEgbWFsZm9ybWVkIGZpbGUgbmFtZSwgcmVxdWlyZWQgYXJndW1lbnQsIG51bWJlciBvdXQgb2YgcmFuZ2UsXG4gICAgLy8gZXRjLikuXG4gICAgVHdpcnBFcnJvckNvZGVbXCJJbnZhbGlkQXJndW1lbnRcIl0gPSBcImludmFsaWRfYXJndW1lbnRcIjtcbiAgICAvLyBNYWxmb3JtZWQgaW5kaWNhdGVzIGFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGRlY29kaW5nIHRoZSBjbGllbnQncyByZXF1ZXN0LlxuICAgIC8vIFRoaXMgbWF5IG1lYW4gdGhhdCB0aGUgbWVzc2FnZSB3YXMgZW5jb2RlZCBpbXByb3Blcmx5LCBvciB0aGF0IHRoZXJlIGlzIGFcbiAgICAvLyBkaXNhZ3JlZW1lbnQgaW4gbWVzc2FnZSBmb3JtYXQgYmV0d2VlbiB0aGUgY2xpZW50IGFuZCBzZXJ2ZXIuXG4gICAgVHdpcnBFcnJvckNvZGVbXCJNYWxmb3JtZWRcIl0gPSBcIm1hbGZvcm1lZFwiO1xuICAgIC8vIERlYWRsaW5lRXhjZWVkZWQgbWVhbnMgb3BlcmF0aW9uIGV4cGlyZWQgYmVmb3JlIGNvbXBsZXRpb24uIEZvciBvcGVyYXRpb25zXG4gICAgLy8gdGhhdCBjaGFuZ2UgdGhlIHN0YXRlIG9mIHRoZSBzeXN0ZW0sIHRoaXMgZXJyb3IgbWF5IGJlIHJldHVybmVkIGV2ZW4gaWYgdGhlXG4gICAgLy8gb3BlcmF0aW9uIGhhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5ICh0aW1lb3V0KS5cbiAgICBUd2lycEVycm9yQ29kZVtcIkRlYWRsaW5lRXhjZWVkZWRcIl0gPSBcImRlYWRsaW5lX2V4Y2VlZGVkXCI7XG4gICAgLy8gTm90Rm91bmQgbWVhbnMgc29tZSByZXF1ZXN0ZWQgZW50aXR5IHdhcyBub3QgZm91bmQuXG4gICAgVHdpcnBFcnJvckNvZGVbXCJOb3RGb3VuZFwiXSA9IFwibm90X2ZvdW5kXCI7XG4gICAgLy8gQmFkUm91dGUgbWVhbnMgdGhhdCB0aGUgcmVxdWVzdGVkIFVSTCBwYXRoIHdhc24ndCByb3V0YWJsZSB0byBhIFR3aXJwXG4gICAgLy8gc2VydmljZSBhbmQgbWV0aG9kLiBUaGlzIGlzIHJldHVybmVkIGJ5IHRoZSBnZW5lcmF0ZWQgc2VydmVyLCBhbmQgdXN1YWxseVxuICAgIC8vIHNob3VsZG4ndCBiZSByZXR1cm5lZCBieSBhcHBsaWNhdGlvbnMuIEluc3RlYWQsIGFwcGxpY2F0aW9ucyBzaG91bGQgdXNlXG4gICAgLy8gTm90Rm91bmQgb3IgVW5pbXBsZW1lbnRlZC5cbiAgICBUd2lycEVycm9yQ29kZVtcIkJhZFJvdXRlXCJdID0gXCJiYWRfcm91dGVcIjtcbiAgICAvLyBBbHJlYWR5RXhpc3RzIG1lYW5zIGFuIGF0dGVtcHQgdG8gY3JlYXRlIGFuIGVudGl0eSBmYWlsZWQgYmVjYXVzZSBvbmVcbiAgICAvLyBhbHJlYWR5IGV4aXN0cy5cbiAgICBUd2lycEVycm9yQ29kZVtcIkFscmVhZHlFeGlzdHNcIl0gPSBcImFscmVhZHlfZXhpc3RzXCI7XG4gICAgLy8gUGVybWlzc2lvbkRlbmllZCBpbmRpY2F0ZXMgdGhlIGNhbGxlciBkb2VzIG5vdCBoYXZlIHBlcm1pc3Npb24gdG8gZXhlY3V0ZVxuICAgIC8vIHRoZSBzcGVjaWZpZWQgb3BlcmF0aW9uLiBJdCBtdXN0IG5vdCBiZSB1c2VkIGlmIHRoZSBjYWxsZXIgY2Fubm90IGJlXG4gICAgLy8gaWRlbnRpZmllZCAoVW5hdXRoZW50aWNhdGVkKS5cbiAgICBUd2lycEVycm9yQ29kZVtcIlBlcm1pc3Npb25EZW5pZWRcIl0gPSBcInBlcm1pc3Npb25fZGVuaWVkXCI7XG4gICAgLy8gVW5hdXRoZW50aWNhdGVkIGluZGljYXRlcyB0aGUgcmVxdWVzdCBkb2VzIG5vdCBoYXZlIHZhbGlkIGF1dGhlbnRpY2F0aW9uXG4gICAgLy8gY3JlZGVudGlhbHMgZm9yIHRoZSBvcGVyYXRpb24uXG4gICAgVHdpcnBFcnJvckNvZGVbXCJVbmF1dGhlbnRpY2F0ZWRcIl0gPSBcInVuYXV0aGVudGljYXRlZFwiO1xuICAgIC8vIFJlc291cmNlRXhoYXVzdGVkIGluZGljYXRlcyBzb21lIHJlc291cmNlIGhhcyBiZWVuIGV4aGF1c3RlZCwgcGVyaGFwcyBhXG4gICAgLy8gcGVyLXVzZXIgcXVvdGEsIG9yIHBlcmhhcHMgdGhlIGVudGlyZSBmaWxlIHN5c3RlbSBpcyBvdXQgb2Ygc3BhY2UuXG4gICAgVHdpcnBFcnJvckNvZGVbXCJSZXNvdXJjZUV4aGF1c3RlZFwiXSA9IFwicmVzb3VyY2VfZXhoYXVzdGVkXCI7XG4gICAgLy8gRmFpbGVkUHJlY29uZGl0aW9uIGluZGljYXRlcyBvcGVyYXRpb24gd2FzIHJlamVjdGVkIGJlY2F1c2UgdGhlIHN5c3RlbSBpc1xuICAgIC8vIG5vdCBpbiBhIHN0YXRlIHJlcXVpcmVkIGZvciB0aGUgb3BlcmF0aW9uJ3MgZXhlY3V0aW9uLiBGb3IgZXhhbXBsZSwgZG9pbmdcbiAgICAvLyBhbiBybWRpciBvcGVyYXRpb24gb24gYSBkaXJlY3RvcnkgdGhhdCBpcyBub24tZW1wdHksIG9yIG9uIGEgbm9uLWRpcmVjdG9yeVxuICAgIC8vIG9iamVjdCwgb3Igd2hlbiBoYXZpbmcgY29uZmxpY3RpbmcgcmVhZC1tb2RpZnktd3JpdGUgb24gdGhlIHNhbWUgcmVzb3VyY2UuXG4gICAgVHdpcnBFcnJvckNvZGVbXCJGYWlsZWRQcmVjb25kaXRpb25cIl0gPSBcImZhaWxlZF9wcmVjb25kaXRpb25cIjtcbiAgICAvLyBBYm9ydGVkIGluZGljYXRlcyB0aGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLCB0eXBpY2FsbHkgZHVlIHRvIGEgY29uY3VycmVuY3lcbiAgICAvLyBpc3N1ZSBsaWtlIHNlcXVlbmNlciBjaGVjayBmYWlsdXJlcywgdHJhbnNhY3Rpb24gYWJvcnRzLCBldGMuXG4gICAgVHdpcnBFcnJvckNvZGVbXCJBYm9ydGVkXCJdID0gXCJhYm9ydGVkXCI7XG4gICAgLy8gT3V0T2ZSYW5nZSBtZWFucyBvcGVyYXRpb24gd2FzIGF0dGVtcHRlZCBwYXN0IHRoZSB2YWxpZCByYW5nZS4gRm9yIGV4YW1wbGUsXG4gICAgLy8gc2Vla2luZyBvciByZWFkaW5nIHBhc3QgZW5kIG9mIGEgcGFnaW5hdGVkIGNvbGxlY3Rpb24uXG4gICAgLy9cbiAgICAvLyBVbmxpa2UgSW52YWxpZEFyZ3VtZW50LCB0aGlzIGVycm9yIGluZGljYXRlcyBhIHByb2JsZW0gdGhhdCBtYXkgYmUgZml4ZWQgaWZcbiAgICAvLyB0aGUgc3lzdGVtIHN0YXRlIGNoYW5nZXMgKGkuZS4gYWRkaW5nIG1vcmUgaXRlbXMgdG8gdGhlIGNvbGxlY3Rpb24pLlxuICAgIC8vXG4gICAgLy8gVGhlcmUgaXMgYSBmYWlyIGJpdCBvZiBvdmVybGFwIGJldHdlZW4gRmFpbGVkUHJlY29uZGl0aW9uIGFuZCBPdXRPZlJhbmdlLlxuICAgIC8vIFdlIHJlY29tbWVuZCB1c2luZyBPdXRPZlJhbmdlICh0aGUgbW9yZSBzcGVjaWZpYyBlcnJvcikgd2hlbiBpdCBhcHBsaWVzIHNvXG4gICAgLy8gdGhhdCBjYWxsZXJzIHdobyBhcmUgaXRlcmF0aW5nIHRocm91Z2ggYSBzcGFjZSBjYW4gZWFzaWx5IGxvb2sgZm9yIGFuXG4gICAgLy8gT3V0T2ZSYW5nZSBlcnJvciB0byBkZXRlY3Qgd2hlbiB0aGV5IGFyZSBkb25lLlxuICAgIFR3aXJwRXJyb3JDb2RlW1wiT3V0T2ZSYW5nZVwiXSA9IFwib3V0X29mX3JhbmdlXCI7XG4gICAgLy8gVW5pbXBsZW1lbnRlZCBpbmRpY2F0ZXMgb3BlcmF0aW9uIGlzIG5vdCBpbXBsZW1lbnRlZCBvciBub3RcbiAgICAvLyBzdXBwb3J0ZWQvZW5hYmxlZCBpbiB0aGlzIHNlcnZpY2UuXG4gICAgVHdpcnBFcnJvckNvZGVbXCJVbmltcGxlbWVudGVkXCJdID0gXCJ1bmltcGxlbWVudGVkXCI7XG4gICAgLy8gSW50ZXJuYWwgZXJyb3JzLiBXaGVuIHNvbWUgaW52YXJpYW50cyBleHBlY3RlZCBieSB0aGUgdW5kZXJseWluZyBzeXN0ZW1cbiAgICAvLyBoYXZlIGJlZW4gYnJva2VuLiBJbiBvdGhlciB3b3Jkcywgc29tZXRoaW5nIGJhZCBoYXBwZW5lZCBpbiB0aGUgbGlicmFyeSBvclxuICAgIC8vIGJhY2tlbmQgc2VydmljZS4gRG8gbm90IGNvbmZ1c2Ugd2l0aCBIVFRQIEludGVybmFsIFNlcnZlciBFcnJvcjsgYW5cbiAgICAvLyBJbnRlcm5hbCBlcnJvciBjb3VsZCBhbHNvIGhhcHBlbiBvbiB0aGUgY2xpZW50IGNvZGUsIGkuZS4gd2hlbiBwYXJzaW5nIGFcbiAgICAvLyBzZXJ2ZXIgcmVzcG9uc2UuXG4gICAgVHdpcnBFcnJvckNvZGVbXCJJbnRlcm5hbFwiXSA9IFwiaW50ZXJuYWxcIjtcbiAgICAvLyBVbmF2YWlsYWJsZSBpbmRpY2F0ZXMgdGhlIHNlcnZpY2UgaXMgY3VycmVudGx5IHVuYXZhaWxhYmxlLiBUaGlzIGlzIGEgbW9zdFxuICAgIC8vIGxpa2VseSBhIHRyYW5zaWVudCBjb25kaXRpb24gYW5kIG1heSBiZSBjb3JyZWN0ZWQgYnkgcmV0cnlpbmcgd2l0aCBhXG4gICAgLy8gYmFja29mZi5cbiAgICBUd2lycEVycm9yQ29kZVtcIlVuYXZhaWxhYmxlXCJdID0gXCJ1bmF2YWlsYWJsZVwiO1xuICAgIC8vIERhdGFMb3NzIGluZGljYXRlcyB1bnJlY292ZXJhYmxlIGRhdGEgbG9zcyBvciBjb3JydXB0aW9uLlxuICAgIFR3aXJwRXJyb3JDb2RlW1wiRGF0YUxvc3NcIl0gPSBcImRhdGFfbG9zc1wiO1xufSkoVHdpcnBFcnJvckNvZGUgPSBleHBvcnRzLlR3aXJwRXJyb3JDb2RlIHx8IChleHBvcnRzLlR3aXJwRXJyb3JDb2RlID0ge30pKTtcbi8vIFNlcnZlckhUVFBTdGF0dXNGcm9tRXJyb3JDb2RlIG1hcHMgYSBUd2lycCBlcnJvciB0eXBlIGludG8gYSBzaW1pbGFyIEhUVFBcbi8vIHJlc3BvbnNlIHN0YXR1cy4gSXQgaXMgdXNlZCBieSB0aGUgVHdpcnAgc2VydmVyIGhhbmRsZXIgdG8gc2V0IHRoZSBIVFRQXG4vLyByZXNwb25zZSBzdGF0dXMgY29kZS4gUmV0dXJucyAwIGlmIHRoZSBFcnJvckNvZGUgaXMgaW52YWxpZC5cbmZ1bmN0aW9uIGh0dHBTdGF0dXNGcm9tRXJyb3JDb2RlKGNvZGUpIHtcbiAgICBzd2l0Y2ggKGNvZGUpIHtcbiAgICAgICAgY2FzZSBUd2lycEVycm9yQ29kZS5DYW5jZWxlZDpcbiAgICAgICAgICAgIHJldHVybiA0MDg7IC8vIFJlcXVlc3RUaW1lb3V0XG4gICAgICAgIGNhc2UgVHdpcnBFcnJvckNvZGUuVW5rbm93bjpcbiAgICAgICAgICAgIHJldHVybiA1MDA7IC8vIEludGVybmFsIFNlcnZlciBFcnJvclxuICAgICAgICBjYXNlIFR3aXJwRXJyb3JDb2RlLkludmFsaWRBcmd1bWVudDpcbiAgICAgICAgICAgIHJldHVybiA0MDA7IC8vIEJhZFJlcXVlc3RcbiAgICAgICAgY2FzZSBUd2lycEVycm9yQ29kZS5NYWxmb3JtZWQ6XG4gICAgICAgICAgICByZXR1cm4gNDAwOyAvLyBCYWRSZXF1ZXN0XG4gICAgICAgIGNhc2UgVHdpcnBFcnJvckNvZGUuRGVhZGxpbmVFeGNlZWRlZDpcbiAgICAgICAgICAgIHJldHVybiA0MDg7IC8vIFJlcXVlc3RUaW1lb3V0XG4gICAgICAgIGNhc2UgVHdpcnBFcnJvckNvZGUuTm90Rm91bmQ6XG4gICAgICAgICAgICByZXR1cm4gNDA0OyAvLyBOb3QgRm91bmRcbiAgICAgICAgY2FzZSBUd2lycEVycm9yQ29kZS5CYWRSb3V0ZTpcbiAgICAgICAgICAgIHJldHVybiA0MDQ7IC8vIE5vdCBGb3VuZFxuICAgICAgICBjYXNlIFR3aXJwRXJyb3JDb2RlLkFscmVhZHlFeGlzdHM6XG4gICAgICAgICAgICByZXR1cm4gNDA5OyAvLyBDb25mbGljdFxuICAgICAgICBjYXNlIFR3aXJwRXJyb3JDb2RlLlBlcm1pc3Npb25EZW5pZWQ6XG4gICAgICAgICAgICByZXR1cm4gNDAzOyAvLyBGb3JiaWRkZW5cbiAgICAgICAgY2FzZSBUd2lycEVycm9yQ29kZS5VbmF1dGhlbnRpY2F0ZWQ6XG4gICAgICAgICAgICByZXR1cm4gNDAxOyAvLyBVbmF1dGhvcml6ZWRcbiAgICAgICAgY2FzZSBUd2lycEVycm9yQ29kZS5SZXNvdXJjZUV4aGF1c3RlZDpcbiAgICAgICAgICAgIHJldHVybiA0Mjk7IC8vIFRvbyBNYW55IFJlcXVlc3RzXG4gICAgICAgIGNhc2UgVHdpcnBFcnJvckNvZGUuRmFpbGVkUHJlY29uZGl0aW9uOlxuICAgICAgICAgICAgcmV0dXJuIDQxMjsgLy8gUHJlY29uZGl0aW9uIEZhaWxlZFxuICAgICAgICBjYXNlIFR3aXJwRXJyb3JDb2RlLkFib3J0ZWQ6XG4gICAgICAgICAgICByZXR1cm4gNDA5OyAvLyBDb25mbGljdFxuICAgICAgICBjYXNlIFR3aXJwRXJyb3JDb2RlLk91dE9mUmFuZ2U6XG4gICAgICAgICAgICByZXR1cm4gNDAwOyAvLyBCYWQgUmVxdWVzdFxuICAgICAgICBjYXNlIFR3aXJwRXJyb3JDb2RlLlVuaW1wbGVtZW50ZWQ6XG4gICAgICAgICAgICByZXR1cm4gNTAxOyAvLyBOb3QgSW1wbGVtZW50ZWRcbiAgICAgICAgY2FzZSBUd2lycEVycm9yQ29kZS5JbnRlcm5hbDpcbiAgICAgICAgICAgIHJldHVybiA1MDA7IC8vIEludGVybmFsIFNlcnZlciBFcnJvclxuICAgICAgICBjYXNlIFR3aXJwRXJyb3JDb2RlLlVuYXZhaWxhYmxlOlxuICAgICAgICAgICAgcmV0dXJuIDUwMzsgLy8gU2VydmljZSBVbmF2YWlsYWJsZVxuICAgICAgICBjYXNlIFR3aXJwRXJyb3JDb2RlLkRhdGFMb3NzOlxuICAgICAgICAgICAgcmV0dXJuIDUwMDsgLy8gSW50ZXJuYWwgU2VydmVyIEVycm9yXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gMDsgLy8gSW52YWxpZCFcbiAgICB9XG59XG5leHBvcnRzLmh0dHBTdGF0dXNGcm9tRXJyb3JDb2RlID0gaHR0cFN0YXR1c0Zyb21FcnJvckNvZGU7XG4vLyBJc1ZhbGlkRXJyb3JDb2RlIHJldHVybnMgdHJ1ZSBpZiBpcyBvbmUgb2YgdGhlIHZhbGlkIHByZWRlZmluZWQgY29uc3RhbnRzLlxuZnVuY3Rpb24gaXNWYWxpZEVycm9yQ29kZShjb2RlKSB7XG4gICAgcmV0dXJuIGh0dHBTdGF0dXNGcm9tRXJyb3JDb2RlKGNvZGUpICE9IDA7XG59XG5leHBvcnRzLmlzVmFsaWRFcnJvckNvZGUgPSBpc1ZhbGlkRXJyb3JDb2RlO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5wYXJzZVR3aXJwUGF0aCA9IGV4cG9ydHMuZ2V0UmVxdWVzdERhdGEgPSBleHBvcnRzLnZhbGlkYXRlUmVxdWVzdCA9IGV4cG9ydHMuZ2V0Q29udGVudFR5cGUgPSBleHBvcnRzLlR3aXJwQ29udGVudFR5cGUgPSB2b2lkIDA7XG5jb25zdCBlcnJvcnNfMSA9IHJlcXVpcmUoXCIuL2Vycm9yc1wiKTtcbi8qKlxuICogU3VwcG9ydGVkIFR3aXJwIENvbnRlbnQtVHlwZVxuICovXG52YXIgVHdpcnBDb250ZW50VHlwZTtcbihmdW5jdGlvbiAoVHdpcnBDb250ZW50VHlwZSkge1xuICAgIFR3aXJwQ29udGVudFR5cGVbVHdpcnBDb250ZW50VHlwZVtcIlByb3RvYnVmXCJdID0gMF0gPSBcIlByb3RvYnVmXCI7XG4gICAgVHdpcnBDb250ZW50VHlwZVtUd2lycENvbnRlbnRUeXBlW1wiSlNPTlwiXSA9IDFdID0gXCJKU09OXCI7XG4gICAgVHdpcnBDb250ZW50VHlwZVtUd2lycENvbnRlbnRUeXBlW1wiVW5rbm93blwiXSA9IDJdID0gXCJVbmtub3duXCI7XG59KShUd2lycENvbnRlbnRUeXBlID0gZXhwb3J0cy5Ud2lycENvbnRlbnRUeXBlIHx8IChleHBvcnRzLlR3aXJwQ29udGVudFR5cGUgPSB7fSkpO1xuLyoqXG4gKiBHZXQgc3VwcG9ydGVkIGNvbnRlbnQtdHlwZVxuICogQHBhcmFtIG1pbWVUeXBlXG4gKi9cbmZ1bmN0aW9uIGdldENvbnRlbnRUeXBlKG1pbWVUeXBlKSB7XG4gICAgc3dpdGNoIChtaW1lVHlwZSkge1xuICAgICAgICBjYXNlIFwiYXBwbGljYXRpb24vcHJvdG9idWZcIjpcbiAgICAgICAgICAgIHJldHVybiBUd2lycENvbnRlbnRUeXBlLlByb3RvYnVmO1xuICAgICAgICBjYXNlIFwiYXBwbGljYXRpb24vanNvblwiOlxuICAgICAgICAgICAgcmV0dXJuIFR3aXJwQ29udGVudFR5cGUuSlNPTjtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBUd2lycENvbnRlbnRUeXBlLlVua25vd247XG4gICAgfVxufVxuZXhwb3J0cy5nZXRDb250ZW50VHlwZSA9IGdldENvbnRlbnRUeXBlO1xuLyoqXG4gKiBWYWxpZGF0ZSBhIHR3aXJwIHJlcXVlc3RcbiAqIEBwYXJhbSBjdHhcbiAqIEBwYXJhbSByZXF1ZXN0XG4gKiBAcGFyYW0gcGF0aFByZWZpeFxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVJlcXVlc3QoY3R4LCByZXF1ZXN0LCBwYXRoUHJlZml4KSB7XG4gICAgaWYgKHJlcXVlc3QubWV0aG9kICE9PSBcIlBPU1RcIikge1xuICAgICAgICBjb25zdCBtc2cgPSBgdW5zdXBwb3J0ZWQgbWV0aG9kICR7cmVxdWVzdC5tZXRob2R9IChvbmx5IFBPU1QgaXMgYWxsb3dlZClgO1xuICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuQmFkUm91dGVFcnJvcihtc2csIHJlcXVlc3QubWV0aG9kIHx8IFwiXCIsIHJlcXVlc3QudXJsIHx8IFwiXCIpO1xuICAgIH1cbiAgICBjb25zdCBwYXRoID0gcGFyc2VUd2lycFBhdGgocmVxdWVzdC51cmwgfHwgXCJcIik7XG4gICAgaWYgKHBhdGgucGtnU2VydmljZSAhPT1cbiAgICAgICAgKGN0eC5wYWNrYWdlTmFtZSA/IGN0eC5wYWNrYWdlTmFtZSArIFwiLlwiIDogXCJcIikgKyBjdHguc2VydmljZU5hbWUpIHtcbiAgICAgICAgY29uc3QgbXNnID0gYG5vIGhhbmRsZXIgZm9yIHBhdGggJHtyZXF1ZXN0LnVybH1gO1xuICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuQmFkUm91dGVFcnJvcihtc2csIHJlcXVlc3QubWV0aG9kIHx8IFwiXCIsIHJlcXVlc3QudXJsIHx8IFwiXCIpO1xuICAgIH1cbiAgICBpZiAocGF0aC5wcmVmaXggIT09IHBhdGhQcmVmaXgpIHtcbiAgICAgICAgY29uc3QgbXNnID0gYGludmFsaWQgcGF0aCBwcmVmaXggJHtwYXRoLnByZWZpeH0sIGV4cGVjdGVkICR7cGF0aFByZWZpeH0sIG9uIHBhdGggJHtyZXF1ZXN0LnVybH1gO1xuICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuQmFkUm91dGVFcnJvcihtc2csIHJlcXVlc3QubWV0aG9kIHx8IFwiXCIsIHJlcXVlc3QudXJsIHx8IFwiXCIpO1xuICAgIH1cbiAgICBjb25zdCBtaW1lQ29udGVudFR5cGUgPSByZXF1ZXN0LmhlYWRlcnNbXCJjb250ZW50LXR5cGVcIl0gfHwgXCJcIjtcbiAgICBpZiAoY3R4LmNvbnRlbnRUeXBlID09PSBUd2lycENvbnRlbnRUeXBlLlVua25vd24pIHtcbiAgICAgICAgY29uc3QgbXNnID0gYHVuZXhwZWN0ZWQgQ29udGVudC1UeXBlOiAke3JlcXVlc3QuaGVhZGVyc1tcImNvbnRlbnQtdHlwZVwiXX1gO1xuICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuQmFkUm91dGVFcnJvcihtc2csIHJlcXVlc3QubWV0aG9kIHx8IFwiXCIsIHJlcXVlc3QudXJsIHx8IFwiXCIpO1xuICAgIH1cbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwYXRoKSwgeyBtaW1lQ29udGVudFR5cGUsIGNvbnRlbnRUeXBlOiBjdHguY29udGVudFR5cGUgfSk7XG59XG5leHBvcnRzLnZhbGlkYXRlUmVxdWVzdCA9IHZhbGlkYXRlUmVxdWVzdDtcbi8qKlxuICogR2V0IHJlcXVlc3QgZGF0YSBmcm9tIHRoZSBib2R5XG4gKiBAcGFyYW0gcmVxXG4gKi9cbmZ1bmN0aW9uIGdldFJlcXVlc3REYXRhKHJlcSkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlcVdpdGhSYXdCb2R5ID0gcmVxO1xuICAgICAgICBpZiAocmVxV2l0aFJhd0JvZHkucmF3Qm9keSBpbnN0YW5jZW9mIEJ1ZmZlcikge1xuICAgICAgICAgICAgcmVzb2x2ZShyZXFXaXRoUmF3Qm9keS5yYXdCb2R5KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjaHVua3MgPSBbXTtcbiAgICAgICAgcmVxLm9uKFwiZGF0YVwiLCAoY2h1bmspID0+IGNodW5rcy5wdXNoKGNodW5rKSk7XG4gICAgICAgIHJlcS5vbihcImVuZFwiLCAoKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gQnVmZmVyLmNvbmNhdChjaHVua3MpO1xuICAgICAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgfSkpO1xuICAgICAgICByZXEub24oXCJlcnJvclwiLCAoZXJyKSA9PiB7XG4gICAgICAgICAgICBpZiAocmVxLmFib3J0ZWQpIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IGVycm9yc18xLlR3aXJwRXJyb3IoZXJyb3JzXzEuVHdpcnBFcnJvckNvZGUuRGVhZGxpbmVFeGNlZWRlZCwgXCJmYWlsZWQgdG8gcmVhZCByZXF1ZXN0OiBkZWFkbGluZSBleGNlZWRlZFwiKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IGVycm9yc18xLlR3aXJwRXJyb3IoZXJyb3JzXzEuVHdpcnBFcnJvckNvZGUuTWFsZm9ybWVkLCBlcnIubWVzc2FnZSkud2l0aENhdXNlKGVycikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmVxLm9uKFwiY2xvc2VcIiwgKCkgPT4ge1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBlcnJvcnNfMS5Ud2lycEVycm9yKGVycm9yc18xLlR3aXJwRXJyb3JDb2RlLkNhbmNlbGVkLCBcImZhaWxlZCB0byByZWFkIHJlcXVlc3Q6IGNvbnRleHQgY2FuY2VsZWRcIikpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZ2V0UmVxdWVzdERhdGEgPSBnZXRSZXF1ZXN0RGF0YTtcbi8qKlxuICogUGFyc2VzIHR3aXJwIHVybCBwYXRoXG4gKiBAcGFyYW0gcGF0aFxuICovXG5mdW5jdGlvbiBwYXJzZVR3aXJwUGF0aChwYXRoKSB7XG4gICAgY29uc3QgcGFydHMgPSBwYXRoLnNwbGl0KFwiL1wiKTtcbiAgICBpZiAocGFydHMubGVuZ3RoIDwgMikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcGtnU2VydmljZTogXCJcIixcbiAgICAgICAgICAgIG1ldGhvZDogXCJcIixcbiAgICAgICAgICAgIHByZWZpeDogXCJcIixcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbWV0aG9kOiBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXSxcbiAgICAgICAgcGtnU2VydmljZTogcGFydHNbcGFydHMubGVuZ3RoIC0gMl0sXG4gICAgICAgIHByZWZpeDogcGFydHMuc2xpY2UoMCwgcGFydHMubGVuZ3RoIC0gMikuam9pbihcIi9cIiksXG4gICAgfTtcbn1cbmV4cG9ydHMucGFyc2VUd2lycFBhdGggPSBwYXJzZVR3aXJwUGF0aDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMud3JpdGVFcnJvciA9IGV4cG9ydHMuVHdpcnBTZXJ2ZXIgPSB2b2lkIDA7XG5jb25zdCBob29rc18xID0gcmVxdWlyZShcIi4vaG9va3NcIik7XG5jb25zdCByZXF1ZXN0XzEgPSByZXF1aXJlKFwiLi9yZXF1ZXN0XCIpO1xuY29uc3QgZXJyb3JzXzEgPSByZXF1aXJlKFwiLi9lcnJvcnNcIik7XG4vKipcbiAqIFJ1bnRpbWUgc2VydmVyIGltcGxlbWVudGF0aW9uIG9mIGEgVHdpcnBTZXJ2ZXJcbiAqL1xuY2xhc3MgVHdpcnBTZXJ2ZXIge1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5wYXRoUHJlZml4ID0gXCIvdHdpcnBcIjtcbiAgICAgICAgdGhpcy5ob29rcyA9IFtdO1xuICAgICAgICB0aGlzLmludGVyY2VwdG9ycyA9IFtdO1xuICAgICAgICB0aGlzLnBhY2thZ2VOYW1lID0gb3B0aW9ucy5wYWNrYWdlTmFtZTtcbiAgICAgICAgdGhpcy5zZXJ2aWNlTmFtZSA9IG9wdGlvbnMuc2VydmljZU5hbWU7XG4gICAgICAgIHRoaXMubWV0aG9kTGlzdCA9IG9wdGlvbnMubWV0aG9kTGlzdDtcbiAgICAgICAgdGhpcy5tYXRjaFJvdXRlID0gb3B0aW9ucy5tYXRjaFJvdXRlO1xuICAgICAgICB0aGlzLnNlcnZpY2UgPSBvcHRpb25zLnNlcnZpY2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHByZWZpeCBmb3IgdGhpcyBzZXJ2ZXJcbiAgICAgKi9cbiAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXRoUHJlZml4O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgaHR0cCBoYW5kbGVyIGZvciB0d2lycCBjb21wbGFpbnQgZW5kcG9pbnRzXG4gICAgICogQHBhcmFtIG9wdGlvbnNcbiAgICAgKi9cbiAgICBodHRwSGFuZGxlcihvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiAocmVxLCByZXNwKSA9PiB7XG4gICAgICAgICAgICAvLyBzZXR1cCBwcmVmaXhcbiAgICAgICAgICAgIGlmICgob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnByZWZpeCkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRoaXMud2l0aFByZWZpeChvcHRpb25zLnByZWZpeCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faHR0cEhhbmRsZXIocmVxLCByZXNwKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBpbnRlcmNlcHRvcnMgb3IgaG9va3MgdG8gdGhlIHJlcXVlc3Qgc3RhY2tcbiAgICAgKiBAcGFyYW0gbWlkZGxld2FyZXNcbiAgICAgKi9cbiAgICB1c2UoLi4ubWlkZGxld2FyZXMpIHtcbiAgICAgICAgbWlkZGxld2FyZXMuZm9yRWFjaCgobWlkZGxld2FyZSkgPT4ge1xuICAgICAgICAgICAgaWYgKGhvb2tzXzEuaXNIb29rKG1pZGRsZXdhcmUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ob29rcy5wdXNoKG1pZGRsZXdhcmUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5pbnRlcmNlcHRvcnMucHVzaChtaWRkbGV3YXJlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgcHJlZml4IHRvIHRoZSBzZXJ2aWNlIHVybCBwYXRoXG4gICAgICogQHBhcmFtIHByZWZpeFxuICAgICAqL1xuICAgIHdpdGhQcmVmaXgocHJlZml4KSB7XG4gICAgICAgIGlmIChwcmVmaXggPT09IGZhbHNlKSB7XG4gICAgICAgICAgICB0aGlzLnBhdGhQcmVmaXggPSBcIlwiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wYXRoUHJlZml4ID0gcHJlZml4O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSByZWdleCBtYXRjaGluZyBwYXRoIGZvciB0aGlzIHR3aXJwIHNlcnZlclxuICAgICAqL1xuICAgIG1hdGNoaW5nUGF0aCgpIHtcbiAgICAgICAgY29uc3QgYmFzZVJlZ2V4ID0gdGhpcy5iYXNlVVJJKCkucmVwbGFjZSgvXFwuL2csIFwiXFxcXC5cIik7XG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKGAke2Jhc2VSZWdleH1cXC8oJHt0aGlzLm1ldGhvZExpc3Quam9pbihcInxcIil9KWApO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBiYXNlIFVSSSBmb3IgdGhpcyB0d2lycCBzZXJ2ZXJcbiAgICAgKi9cbiAgICBiYXNlVVJJKCkge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5wYXRoUHJlZml4fS8ke3RoaXMucGFja2FnZU5hbWUgPyB0aGlzLnBhY2thZ2VOYW1lICsgXCIuXCIgOiBcIlwifSR7dGhpcy5zZXJ2aWNlTmFtZX1gO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSB0d2lycCBjb250ZXh0XG4gICAgICogQHBhcmFtIHJlcVxuICAgICAqIEBwYXJhbSByZXNcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGNyZWF0ZUNvbnRleHQocmVxLCByZXMpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBhY2thZ2VOYW1lOiB0aGlzLnBhY2thZ2VOYW1lLFxuICAgICAgICAgICAgc2VydmljZU5hbWU6IHRoaXMuc2VydmljZU5hbWUsXG4gICAgICAgICAgICBtZXRob2ROYW1lOiBcIlwiLFxuICAgICAgICAgICAgY29udGVudFR5cGU6IHJlcXVlc3RfMS5nZXRDb250ZW50VHlwZShyZXEuaGVhZGVyc1tcImNvbnRlbnQtdHlwZVwiXSksXG4gICAgICAgICAgICByZXE6IHJlcSxcbiAgICAgICAgICAgIHJlczogcmVzLFxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUd3JpcCBzZXJ2ZXIgaHR0cCBoYW5kbGVyIGltcGxlbWVudGF0aW9uXG4gICAgICogQHBhcmFtIHJlcVxuICAgICAqIEBwYXJhbSByZXNwXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfaHR0cEhhbmRsZXIocmVxLCByZXNwKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCBjdHggPSB0aGlzLmNyZWF0ZUNvbnRleHQocmVxLCByZXNwKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgeWllbGQgdGhpcy5pbnZva2VIb29rKFwicmVxdWVzdFJlY2VpdmVkXCIsIGN0eCk7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBtZXRob2QsIG1pbWVDb250ZW50VHlwZSB9ID0gcmVxdWVzdF8xLnZhbGlkYXRlUmVxdWVzdChjdHgsIHJlcSwgdGhpcy5wYXRoUHJlZml4IHx8IFwiXCIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzLm1hdGNoUm91dGUobWV0aG9kLCB7XG4gICAgICAgICAgICAgICAgICAgIG9uTWF0Y2g6IChjdHgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmludm9rZUhvb2soXCJyZXF1ZXN0Um91dGVkXCIsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIG9uTm90Rm91bmQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1zZyA9IGBubyBoYW5kbGVyIGZvciBwYXRoICR7cmVxLnVybH1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGVycm9yc18xLkJhZFJvdXRlRXJyb3IobXNnLCByZXEubWV0aG9kIHx8IFwiXCIsIHJlcS51cmwgfHwgXCJcIik7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgYm9keSA9IHlpZWxkIHJlcXVlc3RfMS5nZXRSZXF1ZXN0RGF0YShyZXEpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0geWllbGQgaGFuZGxlcihjdHgsIHRoaXMuc2VydmljZSwgYm9keSwgdGhpcy5pbnRlcmNlcHRvcnMpO1xuICAgICAgICAgICAgICAgIHlpZWxkIFByb21pc2UuYWxsKFtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZva2VIb29rKFwicmVzcG9uc2VQcmVwYXJlZFwiLCBjdHgpLFxuICAgICAgICAgICAgICAgICAgICAvLyBrZWVwIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHRpbGwgbmV4dCByZWxlYXNlXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlSG9vayhcInJlcXVlc3RQcmVwYXJlZFwiLCBjdHgpLFxuICAgICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgICAgIHJlc3Auc3RhdHVzQ29kZSA9IDIwMDtcbiAgICAgICAgICAgICAgICByZXNwLnNldEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBtaW1lQ29udGVudFR5cGUpO1xuICAgICAgICAgICAgICAgIHJlc3AuZW5kKHJlc3BvbnNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgeWllbGQgdGhpcy5pbnZva2VIb29rKFwiZXJyb3JcIiwgY3R4LCBtdXN0QmVUd2lycEVycm9yKGUpKTtcbiAgICAgICAgICAgICAgICBpZiAoIXJlc3AuaGVhZGVyc1NlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVFcnJvcihyZXNwLCBlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICB5aWVsZCBQcm9taXNlLmFsbChbXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlSG9vayhcInJlc3BvbnNlU2VudFwiLCBjdHgpLFxuICAgICAgICAgICAgICAgICAgICAvLyBrZWVwIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHRpbGwgbmV4dCByZWxlYXNlXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlSG9vayhcInJlcXVlc3RTZW50XCIsIGN0eCksXG4gICAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbnZva2UgYSBob29rXG4gICAgICogQHBhcmFtIGhvb2tOYW1lXG4gICAgICogQHBhcmFtIGN0eFxuICAgICAqIEBwYXJhbSBlcnJcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG4gICAgaW52b2tlSG9vayhob29rTmFtZSwgY3R4LCBlcnIpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmhvb2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNoYWluZWRIb29rcyA9IGhvb2tzXzEuY2hhaW5Ib29rcyguLi50aGlzLmhvb2tzKTtcbiAgICAgICAgICAgIGNvbnN0IGhvb2sgPSBjaGFpbmVkSG9va3MgPT09IG51bGwgfHwgY2hhaW5lZEhvb2tzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjaGFpbmVkSG9va3NbaG9va05hbWVdO1xuICAgICAgICAgICAgaWYgKGhvb2spIHtcbiAgICAgICAgICAgICAgICB5aWVsZCBob29rKGN0eCwgZXJyIHx8IG5ldyBlcnJvcnNfMS5JbnRlcm5hbFNlcnZlckVycm9yKFwiaW50ZXJuYWwgc2VydmVyIGVycm9yXCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0cy5Ud2lycFNlcnZlciA9IFR3aXJwU2VydmVyO1xuLyoqXG4gKiBXcml0ZSBodHRwIGVycm9yIHJlc3BvbnNlXG4gKiBAcGFyYW0gcmVzXG4gKiBAcGFyYW0gZXJyb3JcbiAqL1xuZnVuY3Rpb24gd3JpdGVFcnJvcihyZXMsIGVycm9yKSB7XG4gICAgY29uc3QgdHdpcnBFcnJvciA9IG11c3RCZVR3aXJwRXJyb3IoZXJyb3IpO1xuICAgIHJlcy5zZXRIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIpO1xuICAgIHJlcy5zdGF0dXNDb2RlID0gZXJyb3JzXzEuaHR0cFN0YXR1c0Zyb21FcnJvckNvZGUodHdpcnBFcnJvci5jb2RlKTtcbiAgICByZXMuZW5kKHR3aXJwRXJyb3IudG9KU09OKCkpO1xufVxuZXhwb3J0cy53cml0ZUVycm9yID0gd3JpdGVFcnJvcjtcbi8qKlxuICogTWFrZSBzdXJlIHRoYXQgdGhlIGVycm9yIHBhc3NlZCBpcyBhIFR3aXJwRXJyb3JcbiAqIG90aGVyd2lzZSBpdCB3aWxsIHdyYXAgaXQgaW50byBhbiBJbnRlcm5hbEVycm9yXG4gKiBAcGFyYW0gZXJyXG4gKi9cbmZ1bmN0aW9uIG11c3RCZVR3aXJwRXJyb3IoZXJyKSB7XG4gICAgaWYgKGVyciBpbnN0YW5jZW9mIGVycm9yc18xLlR3aXJwRXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIGVycjtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBlcnJvcnNfMS5JbnRlcm5hbFNlcnZlckVycm9yV2l0aChlcnIpO1xufVxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jaGFpbkludGVyY2VwdG9ycyA9IHZvaWQgMDtcbi8vIGNoYWlucyBtdWx0aXBsZSBJbnRlcmNlcHRvcnMgaW50byBhIHNpbmdsZSBJbnRlcmNlcHRvci5cbi8vIFRoZSBmaXJzdCBpbnRlcmNlcHRvciB3cmFwcyB0aGUgc2Vjb25kIG9uZSwgYW5kIHNvIG9uLlxuLy8gUmV0dXJucyBudWxsIGlmIGludGVyY2VwdG9ycyBpcyBlbXB0eS5cbmZ1bmN0aW9uIGNoYWluSW50ZXJjZXB0b3JzKC4uLmludGVyY2VwdG9ycykge1xuICAgIGlmIChpbnRlcmNlcHRvcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGludGVyY2VwdG9ycy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGludGVyY2VwdG9yc1swXTtcbiAgICB9XG4gICAgY29uc3QgZmlyc3QgPSBpbnRlcmNlcHRvcnNbMF07XG4gICAgcmV0dXJuIChjdHgsIHJlcXVlc3QsIGhhbmRsZXIpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgbGV0IG5leHQgPSBoYW5kbGVyO1xuICAgICAgICBmb3IgKGxldCBpID0gaW50ZXJjZXB0b3JzLmxlbmd0aCAtIDE7IGkgPiAwOyBpLS0pIHtcbiAgICAgICAgICAgIG5leHQgPSAoKG5leHQpID0+IChjdHgsIHR5cGVkUmVxdWVzdCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcmNlcHRvcnNbaV0oY3R4LCB0eXBlZFJlcXVlc3QsIG5leHQpO1xuICAgICAgICAgICAgfSkobmV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpcnN0KGN0eCwgcmVxdWVzdCwgbmV4dCk7XG4gICAgfSk7XG59XG5leHBvcnRzLmNoYWluSW50ZXJjZXB0b3JzID0gY2hhaW5JbnRlcmNlcHRvcnM7XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5mdW5jdGlvbiBfcHJvY2VzcyAodiwgbW9kKSB7XG4gIHZhciBpXG4gIHZhciByXG5cbiAgaWYgKHR5cGVvZiBtb2QgPT09ICdmdW5jdGlvbicpIHtcbiAgICByID0gbW9kKHYpXG4gICAgaWYgKHIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdiA9IHJcbiAgICB9XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShtb2QpKSB7XG4gICAgZm9yIChpID0gMDsgaSA8IG1vZC5sZW5ndGg7IGkrKykge1xuICAgICAgciA9IG1vZFtpXSh2KVxuICAgICAgaWYgKHIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2ID0gclxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB2XG59XG5cbmZ1bmN0aW9uIHBhcnNlS2V5IChrZXksIHZhbCkge1xuICAvLyBkZXRlY3QgbmVnYXRpdmUgaW5kZXggbm90YXRpb25cbiAgaWYgKGtleVswXSA9PT0gJy0nICYmIEFycmF5LmlzQXJyYXkodmFsKSAmJiAvXi1cXGQrJC8udGVzdChrZXkpKSB7XG4gICAgcmV0dXJuIHZhbC5sZW5ndGggKyBwYXJzZUludChrZXksIDEwKVxuICB9XG4gIHJldHVybiBrZXlcbn1cblxuZnVuY3Rpb24gaXNJbmRleCAoaykge1xuICByZXR1cm4gL15cXGQrJC8udGVzdChrKVxufVxuXG5mdW5jdGlvbiBpc09iamVjdCAodmFsKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgT2JqZWN0XSdcbn1cblxuZnVuY3Rpb24gaXNBcnJheU9yT2JqZWN0ICh2YWwpIHtcbiAgcmV0dXJuIE9iamVjdCh2YWwpID09PSB2YWxcbn1cblxuZnVuY3Rpb24gaXNFbXB0eU9iamVjdCAodmFsKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyh2YWwpLmxlbmd0aCA9PT0gMFxufVxuXG52YXIgYmxhY2tsaXN0ID0gWydfX3Byb3RvX18nLCAncHJvdG90eXBlJywgJ2NvbnN0cnVjdG9yJ11cbnZhciBibGFja2xpc3RGaWx0ZXIgPSBmdW5jdGlvbiAocGFydCkgeyByZXR1cm4gYmxhY2tsaXN0LmluZGV4T2YocGFydCkgPT09IC0xIH1cblxuZnVuY3Rpb24gcGFyc2VQYXRoIChwYXRoLCBzZXApIHtcbiAgaWYgKHBhdGguaW5kZXhPZignWycpID49IDApIHtcbiAgICBwYXRoID0gcGF0aC5yZXBsYWNlKC9cXFsvZywgc2VwKS5yZXBsYWNlKC9dL2csICcnKVxuICB9XG5cbiAgdmFyIHBhcnRzID0gcGF0aC5zcGxpdChzZXApXG5cbiAgdmFyIGNoZWNrID0gcGFydHMuZmlsdGVyKGJsYWNrbGlzdEZpbHRlcilcblxuICBpZiAoY2hlY2subGVuZ3RoICE9PSBwYXJ0cy5sZW5ndGgpIHtcbiAgICB0aHJvdyBFcnJvcignUmVmdXNpbmcgdG8gdXBkYXRlIGJsYWNrbGlzdGVkIHByb3BlcnR5ICcgKyBwYXRoKVxuICB9XG5cbiAgcmV0dXJuIHBhcnRzXG59XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHlcblxuZnVuY3Rpb24gRG90T2JqZWN0IChzZXBhcmF0b3IsIG92ZXJyaWRlLCB1c2VBcnJheSwgdXNlQnJhY2tldHMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIERvdE9iamVjdCkpIHtcbiAgICByZXR1cm4gbmV3IERvdE9iamVjdChzZXBhcmF0b3IsIG92ZXJyaWRlLCB1c2VBcnJheSwgdXNlQnJhY2tldHMpXG4gIH1cblxuICBpZiAodHlwZW9mIG92ZXJyaWRlID09PSAndW5kZWZpbmVkJykgb3ZlcnJpZGUgPSBmYWxzZVxuICBpZiAodHlwZW9mIHVzZUFycmF5ID09PSAndW5kZWZpbmVkJykgdXNlQXJyYXkgPSB0cnVlXG4gIGlmICh0eXBlb2YgdXNlQnJhY2tldHMgPT09ICd1bmRlZmluZWQnKSB1c2VCcmFja2V0cyA9IHRydWVcbiAgdGhpcy5zZXBhcmF0b3IgPSBzZXBhcmF0b3IgfHwgJy4nXG4gIHRoaXMub3ZlcnJpZGUgPSBvdmVycmlkZVxuICB0aGlzLnVzZUFycmF5ID0gdXNlQXJyYXlcbiAgdGhpcy51c2VCcmFja2V0cyA9IHVzZUJyYWNrZXRzXG4gIHRoaXMua2VlcEFycmF5ID0gZmFsc2VcblxuICAvLyBjb250YWlucyB0b3VjaGVkIGFycmF5c1xuICB0aGlzLmNsZWFudXAgPSBbXVxufVxuXG52YXIgZG90RGVmYXVsdCA9IG5ldyBEb3RPYmplY3QoJy4nLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSlcbmZ1bmN0aW9uIHdyYXAgKG1ldGhvZCkge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBkb3REZWZhdWx0W21ldGhvZF0uYXBwbHkoZG90RGVmYXVsdCwgYXJndW1lbnRzKVxuICB9XG59XG5cbkRvdE9iamVjdC5wcm90b3R5cGUuX2ZpbGwgPSBmdW5jdGlvbiAoYSwgb2JqLCB2LCBtb2QpIHtcbiAgdmFyIGsgPSBhLnNoaWZ0KClcblxuICBpZiAoYS5sZW5ndGggPiAwKSB7XG4gICAgb2JqW2tdID0gb2JqW2tdIHx8ICh0aGlzLnVzZUFycmF5ICYmIGlzSW5kZXgoYVswXSkgPyBbXSA6IHt9KVxuXG4gICAgaWYgKCFpc0FycmF5T3JPYmplY3Qob2JqW2tdKSkge1xuICAgICAgaWYgKHRoaXMub3ZlcnJpZGUpIHtcbiAgICAgICAgb2JqW2tdID0ge31cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICghKGlzQXJyYXlPck9iamVjdCh2KSAmJiBpc0VtcHR5T2JqZWN0KHYpKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICdUcnlpbmcgdG8gcmVkZWZpbmUgYCcgKyBrICsgJ2Agd2hpY2ggaXMgYSAnICsgdHlwZW9mIG9ialtrXVxuICAgICAgICAgIClcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX2ZpbGwoYSwgb2JqW2tdLCB2LCBtb2QpXG4gIH0gZWxzZSB7XG4gICAgaWYgKCF0aGlzLm92ZXJyaWRlICYmIGlzQXJyYXlPck9iamVjdChvYmpba10pICYmICFpc0VtcHR5T2JqZWN0KG9ialtrXSkpIHtcbiAgICAgIGlmICghKGlzQXJyYXlPck9iamVjdCh2KSAmJiBpc0VtcHR5T2JqZWN0KHYpKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUcnlpbmcgdG8gcmVkZWZpbmUgbm9uLWVtcHR5IG9ialsnXCIgKyBrICsgXCInXVwiKVxuICAgICAgfVxuXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBvYmpba10gPSBfcHJvY2Vzcyh2LCBtb2QpXG4gIH1cbn1cblxuLyoqXG4gKlxuICogQ29udmVydHMgYW4gb2JqZWN0IHdpdGggZG90dGVkLWtleS92YWx1ZSBwYWlycyB0byBpdCdzIGV4cGFuZGVkIHZlcnNpb25cbiAqXG4gKiBPcHRpb25hbGx5IHRyYW5zZm9ybWVkIGJ5IGEgc2V0IG9mIG1vZGlmaWVycy5cbiAqXG4gKiBVc2FnZTpcbiAqXG4gKiAgIHZhciByb3cgPSB7XG4gKiAgICAgJ25yJzogMjAwLFxuICogICAgICdkb2MubmFtZSc6ICcgIE15IERvY3VtZW50ICAnXG4gKiAgIH1cbiAqXG4gKiAgIHZhciBtb2RzID0ge1xuICogICAgICdkb2MubmFtZSc6IFtfcy50cmltLCBfcy51bmRlcnNjb3JlZF1cbiAqICAgfVxuICpcbiAqICAgZG90Lm9iamVjdChyb3csIG1vZHMpXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHBhcmFtIHtPYmplY3R9IG1vZHNcbiAqL1xuRG90T2JqZWN0LnByb3RvdHlwZS5vYmplY3QgPSBmdW5jdGlvbiAob2JqLCBtb2RzKSB7XG4gIHZhciBzZWxmID0gdGhpc1xuXG4gIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgIHZhciBtb2QgPSBtb2RzID09PSB1bmRlZmluZWQgPyBudWxsIDogbW9kc1trXVxuICAgIC8vIG5vcm1hbGl6ZSBhcnJheSBub3RhdGlvbi5cbiAgICB2YXIgb2sgPSBwYXJzZVBhdGgoaywgc2VsZi5zZXBhcmF0b3IpLmpvaW4oc2VsZi5zZXBhcmF0b3IpXG5cbiAgICBpZiAob2suaW5kZXhPZihzZWxmLnNlcGFyYXRvcikgIT09IC0xKSB7XG4gICAgICBzZWxmLl9maWxsKG9rLnNwbGl0KHNlbGYuc2VwYXJhdG9yKSwgb2JqLCBvYmpba10sIG1vZClcbiAgICAgIGRlbGV0ZSBvYmpba11cbiAgICB9IGVsc2Uge1xuICAgICAgb2JqW2tdID0gX3Byb2Nlc3Mob2JqW2tdLCBtb2QpXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiBvYmpcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1N0cmluZ30gcGF0aCBkb3R0ZWQgcGF0aFxuICogQHBhcmFtIHtTdHJpbmd9IHYgdmFsdWUgdG8gYmUgc2V0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqIG9iamVjdCB0byBiZSBtb2RpZmllZFxuICogQHBhcmFtIHtGdW5jdGlvbnxBcnJheX0gbW9kIG9wdGlvbmFsIG1vZGlmaWVyXG4gKi9cbkRvdE9iamVjdC5wcm90b3R5cGUuc3RyID0gZnVuY3Rpb24gKHBhdGgsIHYsIG9iaiwgbW9kKSB7XG4gIHZhciBvayA9IHBhcnNlUGF0aChwYXRoLCB0aGlzLnNlcGFyYXRvcikuam9pbih0aGlzLnNlcGFyYXRvcilcblxuICBpZiAocGF0aC5pbmRleE9mKHRoaXMuc2VwYXJhdG9yKSAhPT0gLTEpIHtcbiAgICB0aGlzLl9maWxsKG9rLnNwbGl0KHRoaXMuc2VwYXJhdG9yKSwgb2JqLCB2LCBtb2QpXG4gIH0gZWxzZSB7XG4gICAgb2JqW3BhdGhdID0gX3Byb2Nlc3ModiwgbW9kKVxuICB9XG5cbiAgcmV0dXJuIG9ialxufVxuXG4vKipcbiAqXG4gKiBQaWNrIGEgdmFsdWUgZnJvbSBhbiBvYmplY3QgdXNpbmcgZG90IG5vdGF0aW9uLlxuICpcbiAqIE9wdGlvbmFsbHkgcmVtb3ZlIHRoZSB2YWx1ZVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBwYXRoXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcGFyYW0ge0Jvb2xlYW59IHJlbW92ZVxuICovXG5Eb3RPYmplY3QucHJvdG90eXBlLnBpY2sgPSBmdW5jdGlvbiAocGF0aCwgb2JqLCByZW1vdmUsIHJlaW5kZXhBcnJheSkge1xuICB2YXIgaVxuICB2YXIga2V5c1xuICB2YXIgdmFsXG4gIHZhciBrZXlcbiAgdmFyIGNwXG5cbiAga2V5cyA9IHBhcnNlUGF0aChwYXRoLCB0aGlzLnNlcGFyYXRvcilcbiAgZm9yIChpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBrZXkgPSBwYXJzZUtleShrZXlzW2ldLCBvYmopXG4gICAgaWYgKG9iaiAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBrZXkgaW4gb2JqKSB7XG4gICAgICBpZiAoaSA9PT0ga2V5cy5sZW5ndGggLSAxKSB7XG4gICAgICAgIGlmIChyZW1vdmUpIHtcbiAgICAgICAgICB2YWwgPSBvYmpba2V5XVxuICAgICAgICAgIGlmIChyZWluZGV4QXJyYXkgJiYgQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgICAgICAgICBvYmouc3BsaWNlKGtleSwgMSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGVsZXRlIG9ialtrZXldXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgICAgICAgIGNwID0ga2V5cy5zbGljZSgwLCAtMSkuam9pbignLicpXG4gICAgICAgICAgICBpZiAodGhpcy5jbGVhbnVwLmluZGV4T2YoY3ApID09PSAtMSkge1xuICAgICAgICAgICAgICB0aGlzLmNsZWFudXAucHVzaChjcClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHZhbFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBvYmpba2V5XVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvYmogPSBvYmpba2V5XVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuICB9XG4gIGlmIChyZW1vdmUgJiYgQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgb2JqID0gb2JqLmZpbHRlcihmdW5jdGlvbiAobikge1xuICAgICAgcmV0dXJuIG4gIT09IHVuZGVmaW5lZFxuICAgIH0pXG4gIH1cbiAgcmV0dXJuIG9ialxufVxuLyoqXG4gKlxuICogRGVsZXRlIHZhbHVlIGZyb20gYW4gb2JqZWN0IHVzaW5nIGRvdCBub3RhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gcGF0aFxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHJldHVybiB7YW55fSBUaGUgcmVtb3ZlZCB2YWx1ZVxuICovXG5Eb3RPYmplY3QucHJvdG90eXBlLmRlbGV0ZSA9IGZ1bmN0aW9uIChwYXRoLCBvYmopIHtcbiAgcmV0dXJuIHRoaXMucmVtb3ZlKHBhdGgsIG9iaiwgdHJ1ZSlcbn1cblxuLyoqXG4gKlxuICogUmVtb3ZlIHZhbHVlIGZyb20gYW4gb2JqZWN0IHVzaW5nIGRvdCBub3RhdGlvbi5cbiAqXG4gKiBXaWxsIHJlbW92ZSBtdWx0aXBsZSBpdGVtcyBpZiBwYXRoIGlzIGFuIGFycmF5LlxuICogSW4gdGhpcyBjYXNlIGFycmF5IGluZGV4ZXMgd2lsbCBiZSByZXRhaW5lZCB1bnRpbCBhbGxcbiAqIHJlbW92YWxzIGhhdmUgYmVlbiBwcm9jZXNzZWQuXG4gKlxuICogVXNlIGRvdC5kZWxldGUoKSB0byBhdXRvbWF0aWNhbGx5ICByZS1pbmRleCBhcnJheXMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd8QXJyYXk8U3RyaW5nPn0gcGF0aFxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHBhcmFtIHtCb29sZWFufSByZWluZGV4QXJyYXlcbiAqIEByZXR1cm4ge2FueX0gVGhlIHJlbW92ZWQgdmFsdWVcbiAqL1xuRG90T2JqZWN0LnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAocGF0aCwgb2JqLCByZWluZGV4QXJyYXkpIHtcbiAgdmFyIGlcblxuICB0aGlzLmNsZWFudXAgPSBbXVxuICBpZiAoQXJyYXkuaXNBcnJheShwYXRoKSkge1xuICAgIGZvciAoaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLnBpY2socGF0aFtpXSwgb2JqLCB0cnVlLCByZWluZGV4QXJyYXkpXG4gICAgfVxuICAgIGlmICghcmVpbmRleEFycmF5KSB7XG4gICAgICB0aGlzLl9jbGVhbnVwKG9iailcbiAgICB9XG4gICAgcmV0dXJuIG9ialxuICB9IGVsc2Uge1xuICAgIHJldHVybiB0aGlzLnBpY2socGF0aCwgb2JqLCB0cnVlLCByZWluZGV4QXJyYXkpXG4gIH1cbn1cblxuRG90T2JqZWN0LnByb3RvdHlwZS5fY2xlYW51cCA9IGZ1bmN0aW9uIChvYmopIHtcbiAgdmFyIHJldFxuICB2YXIgaVxuICB2YXIga2V5c1xuICB2YXIgcm9vdFxuICBpZiAodGhpcy5jbGVhbnVwLmxlbmd0aCkge1xuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmNsZWFudXAubGVuZ3RoOyBpKyspIHtcbiAgICAgIGtleXMgPSB0aGlzLmNsZWFudXBbaV0uc3BsaXQoJy4nKVxuICAgICAgcm9vdCA9IGtleXMuc3BsaWNlKDAsIC0xKS5qb2luKCcuJylcbiAgICAgIHJldCA9IHJvb3QgPyB0aGlzLnBpY2socm9vdCwgb2JqKSA6IG9ialxuICAgICAgcmV0ID0gcmV0W2tleXNbMF1dLmZpbHRlcihmdW5jdGlvbiAodikge1xuICAgICAgICByZXR1cm4gdiAhPT0gdW5kZWZpbmVkXG4gICAgICB9KVxuICAgICAgdGhpcy5zZXQodGhpcy5jbGVhbnVwW2ldLCByZXQsIG9iailcbiAgICB9XG4gICAgdGhpcy5jbGVhbnVwID0gW11cbiAgfVxufVxuXG4vKipcbiAqIEFsaWFzIG1ldGhvZCAgZm9yIGBkb3QucmVtb3ZlYFxuICpcbiAqIE5vdGU6IHRoaXMgaXMgbm90IGFuIGFsaWFzIGZvciBkb3QuZGVsZXRlKClcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ3xBcnJheTxTdHJpbmc+fSBwYXRoXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcGFyYW0ge0Jvb2xlYW59IHJlaW5kZXhBcnJheVxuICogQHJldHVybiB7YW55fSBUaGUgcmVtb3ZlZCB2YWx1ZVxuICovXG5Eb3RPYmplY3QucHJvdG90eXBlLmRlbCA9IERvdE9iamVjdC5wcm90b3R5cGUucmVtb3ZlXG5cbi8qKlxuICpcbiAqIE1vdmUgYSBwcm9wZXJ0eSBmcm9tIG9uZSBwbGFjZSB0byB0aGUgb3RoZXIuXG4gKlxuICogSWYgdGhlIHNvdXJjZSBwYXRoIGRvZXMgbm90IGV4aXN0ICh1bmRlZmluZWQpXG4gKiB0aGUgdGFyZ2V0IHByb3BlcnR5IHdpbGwgbm90IGJlIHNldC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc291cmNlXG4gKiBAcGFyYW0ge1N0cmluZ30gdGFyZ2V0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufEFycmF5fSBtb2RzXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG1lcmdlXG4gKi9cbkRvdE9iamVjdC5wcm90b3R5cGUubW92ZSA9IGZ1bmN0aW9uIChzb3VyY2UsIHRhcmdldCwgb2JqLCBtb2RzLCBtZXJnZSkge1xuICBpZiAodHlwZW9mIG1vZHMgPT09ICdmdW5jdGlvbicgfHwgQXJyYXkuaXNBcnJheShtb2RzKSkge1xuICAgIHRoaXMuc2V0KHRhcmdldCwgX3Byb2Nlc3ModGhpcy5waWNrKHNvdXJjZSwgb2JqLCB0cnVlKSwgbW9kcyksIG9iaiwgbWVyZ2UpXG4gIH0gZWxzZSB7XG4gICAgbWVyZ2UgPSBtb2RzXG4gICAgdGhpcy5zZXQodGFyZ2V0LCB0aGlzLnBpY2soc291cmNlLCBvYmosIHRydWUpLCBvYmosIG1lcmdlKVxuICB9XG5cbiAgcmV0dXJuIG9ialxufVxuXG4vKipcbiAqXG4gKiBUcmFuc2ZlciBhIHByb3BlcnR5IGZyb20gb25lIG9iamVjdCB0byBhbm90aGVyIG9iamVjdC5cbiAqXG4gKiBJZiB0aGUgc291cmNlIHBhdGggZG9lcyBub3QgZXhpc3QgKHVuZGVmaW5lZClcbiAqIHRoZSBwcm9wZXJ0eSBvbiB0aGUgb3RoZXIgb2JqZWN0IHdpbGwgbm90IGJlIHNldC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc291cmNlXG4gKiBAcGFyYW0ge1N0cmluZ30gdGFyZ2V0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqMVxuICogQHBhcmFtIHtPYmplY3R9IG9iajJcbiAqIEBwYXJhbSB7RnVuY3Rpb258QXJyYXl9IG1vZHNcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gbWVyZ2VcbiAqL1xuRG90T2JqZWN0LnByb3RvdHlwZS50cmFuc2ZlciA9IGZ1bmN0aW9uIChcbiAgc291cmNlLFxuICB0YXJnZXQsXG4gIG9iajEsXG4gIG9iajIsXG4gIG1vZHMsXG4gIG1lcmdlXG4pIHtcbiAgaWYgKHR5cGVvZiBtb2RzID09PSAnZnVuY3Rpb24nIHx8IEFycmF5LmlzQXJyYXkobW9kcykpIHtcbiAgICB0aGlzLnNldChcbiAgICAgIHRhcmdldCxcbiAgICAgIF9wcm9jZXNzKHRoaXMucGljayhzb3VyY2UsIG9iajEsIHRydWUpLCBtb2RzKSxcbiAgICAgIG9iajIsXG4gICAgICBtZXJnZVxuICAgIClcbiAgfSBlbHNlIHtcbiAgICBtZXJnZSA9IG1vZHNcbiAgICB0aGlzLnNldCh0YXJnZXQsIHRoaXMucGljayhzb3VyY2UsIG9iajEsIHRydWUpLCBvYmoyLCBtZXJnZSlcbiAgfVxuXG4gIHJldHVybiBvYmoyXG59XG5cbi8qKlxuICpcbiAqIENvcHkgYSBwcm9wZXJ0eSBmcm9tIG9uZSBvYmplY3QgdG8gYW5vdGhlciBvYmplY3QuXG4gKlxuICogSWYgdGhlIHNvdXJjZSBwYXRoIGRvZXMgbm90IGV4aXN0ICh1bmRlZmluZWQpXG4gKiB0aGUgcHJvcGVydHkgb24gdGhlIG90aGVyIG9iamVjdCB3aWxsIG5vdCBiZSBzZXQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHNvdXJjZVxuICogQHBhcmFtIHtTdHJpbmd9IHRhcmdldFxuICogQHBhcmFtIHtPYmplY3R9IG9iajFcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmoyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufEFycmF5fSBtb2RzXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG1lcmdlXG4gKi9cbkRvdE9iamVjdC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIChzb3VyY2UsIHRhcmdldCwgb2JqMSwgb2JqMiwgbW9kcywgbWVyZ2UpIHtcbiAgaWYgKHR5cGVvZiBtb2RzID09PSAnZnVuY3Rpb24nIHx8IEFycmF5LmlzQXJyYXkobW9kcykpIHtcbiAgICB0aGlzLnNldChcbiAgICAgIHRhcmdldCxcbiAgICAgIF9wcm9jZXNzKFxuICAgICAgICAvLyBjbG9uZSB3aGF0IGlzIHBpY2tlZFxuICAgICAgICBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMucGljayhzb3VyY2UsIG9iajEsIGZhbHNlKSkpLFxuICAgICAgICBtb2RzXG4gICAgICApLFxuICAgICAgb2JqMixcbiAgICAgIG1lcmdlXG4gICAgKVxuICB9IGVsc2Uge1xuICAgIG1lcmdlID0gbW9kc1xuICAgIHRoaXMuc2V0KHRhcmdldCwgdGhpcy5waWNrKHNvdXJjZSwgb2JqMSwgZmFsc2UpLCBvYmoyLCBtZXJnZSlcbiAgfVxuXG4gIHJldHVybiBvYmoyXG59XG5cbi8qKlxuICpcbiAqIFNldCBhIHByb3BlcnR5IG9uIGFuIG9iamVjdCB1c2luZyBkb3Qgbm90YXRpb24uXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHBhdGhcbiAqIEBwYXJhbSB7YW55fSB2YWxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gbWVyZ2VcbiAqL1xuRG90T2JqZWN0LnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAocGF0aCwgdmFsLCBvYmosIG1lcmdlKSB7XG4gIHZhciBpXG4gIHZhciBrXG4gIHZhciBrZXlzXG4gIHZhciBrZXlcblxuICAvLyBEbyBub3Qgb3BlcmF0ZSBpZiB0aGUgdmFsdWUgaXMgdW5kZWZpbmVkLlxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gb2JqXG4gIH1cbiAga2V5cyA9IHBhcnNlUGF0aChwYXRoLCB0aGlzLnNlcGFyYXRvcilcblxuICBmb3IgKGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGtleSA9IGtleXNbaV1cbiAgICBpZiAoaSA9PT0ga2V5cy5sZW5ndGggLSAxKSB7XG4gICAgICBpZiAobWVyZ2UgJiYgaXNPYmplY3QodmFsKSAmJiBpc09iamVjdChvYmpba2V5XSkpIHtcbiAgICAgICAgZm9yIChrIGluIHZhbCkge1xuICAgICAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbCwgaykpIHtcbiAgICAgICAgICAgIG9ialtrZXldW2tdID0gdmFsW2tdXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKG1lcmdlICYmIEFycmF5LmlzQXJyYXkob2JqW2tleV0pICYmIEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHZhbC5sZW5ndGg7IGorKykge1xuICAgICAgICAgIG9ialtrZXlzW2ldXS5wdXNoKHZhbFtqXSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2JqW2tleV0gPSB2YWxcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFxuICAgICAgLy8gZm9yY2UgdGhlIHZhbHVlIHRvIGJlIGFuIG9iamVjdFxuICAgICAgIWhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpIHx8XG4gICAgICAoIWlzT2JqZWN0KG9ialtrZXldKSAmJiAhQXJyYXkuaXNBcnJheShvYmpba2V5XSkpXG4gICAgKSB7XG4gICAgICAvLyBpbml0aWFsaXplIGFzIGFycmF5IGlmIG5leHQga2V5IGlzIG51bWVyaWNcbiAgICAgIGlmICgvXlxcZCskLy50ZXN0KGtleXNbaSArIDFdKSkge1xuICAgICAgICBvYmpba2V5XSA9IFtdXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvYmpba2V5XSA9IHt9XG4gICAgICB9XG4gICAgfVxuICAgIG9iaiA9IG9ialtrZXldXG4gIH1cbiAgcmV0dXJuIG9ialxufVxuXG4vKipcbiAqXG4gKiBUcmFuc2Zvcm0gYW4gb2JqZWN0XG4gKlxuICogVXNhZ2U6XG4gKlxuICogICB2YXIgb2JqID0ge1xuICogICAgIFwiaWRcIjogMSxcbiAqICAgIFwic29tZVwiOiB7XG4gKiAgICAgIFwidGhpbmdcIjogXCJlbHNlXCJcbiAqICAgIH1cbiAqICAgfVxuICpcbiAqICAgdmFyIHRyYW5zZm9ybSA9IHtcbiAqICAgICBcImlkXCI6IFwibnJcIixcbiAqICAgIFwic29tZS50aGluZ1wiOiBcIm5hbWVcIlxuICogICB9XG4gKlxuICogICB2YXIgdGd0ID0gZG90LnRyYW5zZm9ybSh0cmFuc2Zvcm0sIG9iailcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcmVjaXBlIFRyYW5zZm9ybSByZWNpcGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogT2JqZWN0IHRvIGJlIHRyYW5zZm9ybWVkXG4gKiBAcGFyYW0ge0FycmF5fSBtb2RzIG1vZGlmaWVycyBmb3IgdGhlIHRhcmdldFxuICovXG5Eb3RPYmplY3QucHJvdG90eXBlLnRyYW5zZm9ybSA9IGZ1bmN0aW9uIChyZWNpcGUsIG9iaiwgdGd0KSB7XG4gIG9iaiA9IG9iaiB8fCB7fVxuICB0Z3QgPSB0Z3QgfHwge31cbiAgT2JqZWN0LmtleXMocmVjaXBlKS5mb3JFYWNoKFxuICAgIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHRoaXMuc2V0KHJlY2lwZVtrZXldLCB0aGlzLnBpY2soa2V5LCBvYmopLCB0Z3QpXG4gICAgfS5iaW5kKHRoaXMpXG4gIClcbiAgcmV0dXJuIHRndFxufVxuXG4vKipcbiAqXG4gKiBDb252ZXJ0IG9iamVjdCB0byBkb3R0ZWQta2V5L3ZhbHVlIHBhaXJcbiAqXG4gKiBVc2FnZTpcbiAqXG4gKiAgIHZhciB0Z3QgPSBkb3QuZG90KG9iailcbiAqXG4gKiAgIG9yXG4gKlxuICogICB2YXIgdGd0ID0ge31cbiAqICAgZG90LmRvdChvYmosIHRndClcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqIHNvdXJjZSBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSB0Z3QgdGFyZ2V0IG9iamVjdFxuICogQHBhcmFtIHtBcnJheX0gcGF0aCBwYXRoIGFycmF5IChpbnRlcm5hbClcbiAqL1xuRG90T2JqZWN0LnByb3RvdHlwZS5kb3QgPSBmdW5jdGlvbiAob2JqLCB0Z3QsIHBhdGgpIHtcbiAgdGd0ID0gdGd0IHx8IHt9XG4gIHBhdGggPSBwYXRoIHx8IFtdXG4gIHZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheShvYmopXG5cbiAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKFxuICAgIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHZhciBpbmRleCA9IGlzQXJyYXkgJiYgdGhpcy51c2VCcmFja2V0cyA/ICdbJyArIGtleSArICddJyA6IGtleVxuICAgICAgaWYgKFxuICAgICAgICBpc0FycmF5T3JPYmplY3Qob2JqW2tleV0pICYmXG4gICAgICAgICgoaXNPYmplY3Qob2JqW2tleV0pICYmICFpc0VtcHR5T2JqZWN0KG9ialtrZXldKSkgfHxcbiAgICAgICAgICAoQXJyYXkuaXNBcnJheShvYmpba2V5XSkgJiYgIXRoaXMua2VlcEFycmF5ICYmIG9ialtrZXldLmxlbmd0aCAhPT0gMCkpXG4gICAgICApIHtcbiAgICAgICAgaWYgKGlzQXJyYXkgJiYgdGhpcy51c2VCcmFja2V0cykge1xuICAgICAgICAgIHZhciBwcmV2aW91c0tleSA9IHBhdGhbcGF0aC5sZW5ndGggLSAxXSB8fCAnJ1xuICAgICAgICAgIHJldHVybiB0aGlzLmRvdChcbiAgICAgICAgICAgIG9ialtrZXldLFxuICAgICAgICAgICAgdGd0LFxuICAgICAgICAgICAgcGF0aC5zbGljZSgwLCAtMSkuY29uY2F0KHByZXZpb3VzS2V5ICsgaW5kZXgpXG4gICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmRvdChvYmpba2V5XSwgdGd0LCBwYXRoLmNvbmNhdChpbmRleCkpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpc0FycmF5ICYmIHRoaXMudXNlQnJhY2tldHMpIHtcbiAgICAgICAgICB0Z3RbcGF0aC5qb2luKHRoaXMuc2VwYXJhdG9yKS5jb25jYXQoJ1snICsga2V5ICsgJ10nKV0gPSBvYmpba2V5XVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRndFtwYXRoLmNvbmNhdChpbmRleCkuam9pbih0aGlzLnNlcGFyYXRvcildID0gb2JqW2tleV1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0uYmluZCh0aGlzKVxuICApXG4gIHJldHVybiB0Z3Rcbn1cblxuRG90T2JqZWN0LnBpY2sgPSB3cmFwKCdwaWNrJylcbkRvdE9iamVjdC5tb3ZlID0gd3JhcCgnbW92ZScpXG5Eb3RPYmplY3QudHJhbnNmZXIgPSB3cmFwKCd0cmFuc2ZlcicpXG5Eb3RPYmplY3QudHJhbnNmb3JtID0gd3JhcCgndHJhbnNmb3JtJylcbkRvdE9iamVjdC5jb3B5ID0gd3JhcCgnY29weScpXG5Eb3RPYmplY3Qub2JqZWN0ID0gd3JhcCgnb2JqZWN0JylcbkRvdE9iamVjdC5zdHIgPSB3cmFwKCdzdHInKVxuRG90T2JqZWN0LnNldCA9IHdyYXAoJ3NldCcpXG5Eb3RPYmplY3QuZGVsZXRlID0gd3JhcCgnZGVsZXRlJylcbkRvdE9iamVjdC5kZWwgPSBEb3RPYmplY3QucmVtb3ZlID0gd3JhcCgncmVtb3ZlJylcbkRvdE9iamVjdC5kb3QgPSB3cmFwKCdkb3QnKTtcblsnb3ZlcnJpZGUnLCAnb3ZlcndyaXRlJ10uZm9yRWFjaChmdW5jdGlvbiAocHJvcCkge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRG90T2JqZWN0LCBwcm9wLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZG90RGVmYXVsdC5vdmVycmlkZVxuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICBkb3REZWZhdWx0Lm92ZXJyaWRlID0gISF2YWxcbiAgICB9XG4gIH0pXG59KTtcblsndXNlQXJyYXknLCAna2VlcEFycmF5JywgJ3VzZUJyYWNrZXRzJ10uZm9yRWFjaChmdW5jdGlvbiAocHJvcCkge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRG90T2JqZWN0LCBwcm9wLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZG90RGVmYXVsdFtwcm9wXVxuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICBkb3REZWZhdWx0W3Byb3BdID0gdmFsXG4gICAgfVxuICB9KVxufSlcblxuRG90T2JqZWN0Ll9wcm9jZXNzID0gX3Byb2Nlc3NcblxubW9kdWxlLmV4cG9ydHMgPSBEb3RPYmplY3RcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfSk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5GZXRjaFJQQyA9IGV4cG9ydHMud3JhcEVycm9yUmVzcG9uc2VUb1R3aXJwRXJyb3IgPSBleHBvcnRzLk5vZGVIdHRwUlBDID0gdm9pZCAwO1xuY29uc3QgaHR0cCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiaHR0cFwiKSk7XG5jb25zdCBodHRwcyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiaHR0cHNcIikpO1xuY29uc3QgdXJsXzEgPSByZXF1aXJlKFwidXJsXCIpO1xuY29uc3QgZXJyb3JzXzEgPSByZXF1aXJlKFwiLi9lcnJvcnNcIik7XG4vKipcbiAqIGEgbm9kZSBIVFRQIFJQQyBpbXBsZW1lbnRhdGlvblxuICogQHBhcmFtIG9wdGlvbnNcbiAqIEBjb25zdHJ1Y3RvclxuICovXG5jb25zdCBOb2RlSHR0cFJQQyA9IChvcHRpb25zKSA9PiAoe1xuICAgIHJlcXVlc3Qoc2VydmljZSwgbWV0aG9kLCBjb250ZW50VHlwZSwgZGF0YSkge1xuICAgICAgICBsZXQgY2xpZW50O1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdGVkKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZUNodW5rcyA9IFtdO1xuICAgICAgICAgICAgY29uc3QgcmVxdWVzdERhdGEgPSBjb250ZW50VHlwZSA9PT0gXCJhcHBsaWNhdGlvbi9wcm90b2J1ZlwiXG4gICAgICAgICAgICAgICAgPyBCdWZmZXIuZnJvbShkYXRhKVxuICAgICAgICAgICAgICAgIDogSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG4gICAgICAgICAgICBjb25zdCB1cmwgPSBuZXcgdXJsXzEuVVJMKG9wdGlvbnMuYmFzZVVybCk7XG4gICAgICAgICAgICBjb25zdCBpc0h0dHBzID0gdXJsLnByb3RvY29sID09PSBcImh0dHBzOlwiO1xuICAgICAgICAgICAgaWYgKGlzSHR0cHMpIHtcbiAgICAgICAgICAgICAgICBjbGllbnQgPSBodHRwcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNsaWVudCA9IGh0dHA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwcmVmaXggPSB1cmwucGF0aG5hbWUgIT09IFwiL1wiID8gdXJsLnBhdGhuYW1lIDogXCJcIjtcbiAgICAgICAgICAgIGNvbnN0IHJlcSA9IGNsaWVudFxuICAgICAgICAgICAgICAgIC5yZXF1ZXN0KE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgKG9wdGlvbnMgPyBvcHRpb25zIDoge30pKSwgeyBtZXRob2Q6IFwiUE9TVFwiLCBwcm90b2NvbDogdXJsLnByb3RvY29sLCBob3N0OiB1cmwuaG9zdG5hbWUsIHBvcnQ6IHVybC5wb3J0ID8gdXJsLnBvcnQgOiBpc0h0dHBzID8gNDQzIDogODAsIHBhdGg6IGAke3ByZWZpeH0vJHtzZXJ2aWNlfS8ke21ldGhvZH1gLCBoZWFkZXJzOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIChvcHRpb25zLmhlYWRlcnMgPyBvcHRpb25zLmhlYWRlcnMgOiB7fSkpLCB7IFwiQ29udGVudC1UeXBlXCI6IGNvbnRlbnRUeXBlLCBcIkNvbnRlbnQtTGVuZ3RoXCI6IGNvbnRlbnRUeXBlID09PSBcImFwcGxpY2F0aW9uL3Byb3RvYnVmXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gQnVmZmVyLmJ5dGVMZW5ndGgocmVxdWVzdERhdGEpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IEJ1ZmZlci5mcm9tKHJlcXVlc3REYXRhKS5ieXRlTGVuZ3RoIH0pIH0pLCAocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzLm9uKFwiZGF0YVwiLCAoY2h1bmspID0+IHJlc3BvbnNlQ2h1bmtzLnB1c2goY2h1bmspKTtcbiAgICAgICAgICAgICAgICByZXMub24oXCJlbmRcIiwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gQnVmZmVyLmNvbmNhdChyZXNwb25zZUNodW5rcyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXMuc3RhdHVzQ29kZSAhPSAyMDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdGVkKHdyYXBFcnJvclJlc3BvbnNlVG9Ud2lycEVycm9yKGRhdGEudG9TdHJpbmcoKSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRUeXBlID09PSBcImFwcGxpY2F0aW9uL2pzb25cIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoSlNPTi5wYXJzZShkYXRhLnRvU3RyaW5nKCkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXMub24oXCJlcnJvclwiLCAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdGVkKGVycik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5vbihcImVycm9yXCIsIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICByZWplY3RlZChlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXEuZW5kKHJlcXVlc3REYXRhKTtcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuZXhwb3J0cy5Ob2RlSHR0cFJQQyA9IE5vZGVIdHRwUlBDO1xuZnVuY3Rpb24gd3JhcEVycm9yUmVzcG9uc2VUb1R3aXJwRXJyb3IoZXJyb3JSZXNwb25zZSkge1xuICAgIHJldHVybiBlcnJvcnNfMS5Ud2lycEVycm9yLmZyb21PYmplY3QoSlNPTi5wYXJzZShlcnJvclJlc3BvbnNlKSk7XG59XG5leHBvcnRzLndyYXBFcnJvclJlc3BvbnNlVG9Ud2lycEVycm9yID0gd3JhcEVycm9yUmVzcG9uc2VUb1R3aXJwRXJyb3I7XG4vKipcbiAqIGEgYnJvd3NlciBmZXRjaCBSUEMgaW1wbGVtZW50YXRpb25cbiAqL1xuY29uc3QgRmV0Y2hSUEMgPSAob3B0aW9ucykgPT4gKHtcbiAgICByZXF1ZXN0KHNlcnZpY2UsIG1ldGhvZCwgY29udGVudFR5cGUsIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSGVhZGVycyhvcHRpb25zLmhlYWRlcnMpO1xuICAgICAgICAgICAgaGVhZGVycy5zZXQoXCJjb250ZW50LXR5cGVcIiwgY29udGVudFR5cGUpO1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSB5aWVsZCBmZXRjaChgJHtvcHRpb25zLmJhc2VVcmx9LyR7c2VydmljZX0vJHttZXRob2R9YCwgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKSwgeyBtZXRob2Q6IFwiUE9TVFwiLCBoZWFkZXJzLCBib2R5OiBkYXRhIGluc3RhbmNlb2YgVWludDhBcnJheSA/IGRhdGEgOiBKU09OLnN0cmluZ2lmeShkYXRhKSB9KSk7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgICAgICBpZiAoY29udGVudFR5cGUgPT09IFwiYXBwbGljYXRpb24vanNvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB5aWVsZCByZXNwb25zZS5qc29uKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheSh5aWVsZCByZXNwb25zZS5hcnJheUJ1ZmZlcigpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yc18xLlR3aXJwRXJyb3IuZnJvbU9iamVjdCh5aWVsZCByZXNwb25zZS5qc29uKCkpO1xuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG5leHBvcnRzLkZldGNoUlBDID0gRmV0Y2hSUEM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH0pO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbnZhciBfX3Jlc3QgPSAodGhpcyAmJiB0aGlzLl9fcmVzdCkgfHwgZnVuY3Rpb24gKHMsIGUpIHtcbiAgICB2YXIgdCA9IHt9O1xuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgICB0W3BdID0gc1twXTtcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgICAgfVxuICAgIHJldHVybiB0O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuR2F0ZXdheSA9IGV4cG9ydHMuUGF0dGVybiA9IHZvaWQgMDtcbmNvbnN0IHF1ZXJ5c3RyaW5nXzEgPSByZXF1aXJlKFwicXVlcnlzdHJpbmdcIik7XG5jb25zdCBkb3RPYmplY3QgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcImRvdC1vYmplY3RcIikpO1xuY29uc3QgcmVxdWVzdF8xID0gcmVxdWlyZShcIi4vcmVxdWVzdFwiKTtcbmNvbnN0IGVycm9yc18xID0gcmVxdWlyZShcIi4vZXJyb3JzXCIpO1xuY29uc3QgaHR0cF9jbGllbnRfMSA9IHJlcXVpcmUoXCIuL2h0dHAuY2xpZW50XCIpO1xuY29uc3Qgc2VydmVyXzEgPSByZXF1aXJlKFwiLi9zZXJ2ZXJcIik7XG52YXIgUGF0dGVybjtcbihmdW5jdGlvbiAoUGF0dGVybikge1xuICAgIFBhdHRlcm5bXCJQT1NUXCJdID0gXCJwb3N0XCI7XG4gICAgUGF0dGVybltcIkdFVFwiXSA9IFwiZ2V0XCI7XG4gICAgUGF0dGVybltcIlBBVENIXCJdID0gXCJwYXRjaFwiO1xuICAgIFBhdHRlcm5bXCJQVVRcIl0gPSBcInB1dFwiO1xuICAgIFBhdHRlcm5bXCJERUxFVEVcIl0gPSBcImRlbGV0ZVwiO1xufSkoUGF0dGVybiA9IGV4cG9ydHMuUGF0dGVybiB8fCAoZXhwb3J0cy5QYXR0ZXJuID0ge30pKTtcbi8qKlxuICogVGhlIEdhdGV3YXkgcHJveGllcyBodHRwIHJlcXVlc3RzIHRvIFR3aXJwIENvbXBsaWFudFxuICogaGFuZGxlcnNcbiAqL1xuY2xhc3MgR2F0ZXdheSB7XG4gICAgY29uc3RydWN0b3Iocm91dGVzKSB7XG4gICAgICAgIHRoaXMucm91dGVzID0gcm91dGVzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBNaWRkbGV3YXJlIHRoYXQgcmV3cml0ZSB0aGUgY3VycmVudCByZXF1ZXN0XG4gICAgICogdG8gYSBUd2lycCBjb21wbGlhbnQgcmVxdWVzdFxuICAgICAqL1xuICAgIHR3aXJwUmV3cml0ZShwcmVmaXggPSBcIi90d2lycFwiKSB7XG4gICAgICAgIHJldHVybiAocmVxLCByZXNwLCBuZXh0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJld3JpdGUocmVxLCByZXNwLCBwcmVmaXgpXG4gICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4gbmV4dCgpKVxuICAgICAgICAgICAgICAgIC5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgZXJyb3JzXzEuVHdpcnBFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZS5jb2RlICE9PSBlcnJvcnNfMS5Ud2lycEVycm9yQ29kZS5Ob3RGb3VuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyXzEud3JpdGVFcnJvcihyZXNwLCBlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXdyaXRlIGFuIGluY29taW5nIHJlcXVlc3QgdG8gYSBUd2lycCBjb21wbGlhbnQgcmVxdWVzdFxuICAgICAqIEBwYXJhbSByZXFcbiAgICAgKiBAcGFyYW0gcmVzcFxuICAgICAqIEBwYXJhbSBwcmVmaXhcbiAgICAgKi9cbiAgICByZXdyaXRlKHJlcSwgcmVzcCwgcHJlZml4ID0gXCIvdHdpcnBcIikge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgY29uc3QgW21hdGNoLCByb3V0ZV0gPSB0aGlzLm1hdGNoUm91dGUocmVxKTtcbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSB5aWVsZCB0aGlzLnByZXBhcmVUd2lycEJvZHkocmVxLCBtYXRjaCwgcm91dGUpO1xuICAgICAgICAgICAgY29uc3QgdHdpcnBVcmwgPSBgJHtwcmVmaXh9LyR7cm91dGUucGFja2FnZU5hbWV9LiR7cm91dGUuc2VydmljZU5hbWV9LyR7cm91dGUubWV0aG9kTmFtZX1gO1xuICAgICAgICAgICAgcmVxLnVybCA9IHR3aXJwVXJsO1xuICAgICAgICAgICAgcmVxLm9yaWdpbmFsVXJsID0gdHdpcnBVcmw7XG4gICAgICAgICAgICByZXEubWV0aG9kID0gXCJQT1NUXCI7XG4gICAgICAgICAgICByZXEuaGVhZGVyc1tcImNvbnRlbnQtdHlwZVwiXSA9IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgICAgICAgICAgcmVxLnJhd0JvZHkgPSBCdWZmZXIuZnJvbShKU09OLnN0cmluZ2lmeShib2R5KSk7XG4gICAgICAgICAgICBpZiAocm91dGUucmVzcG9uc2VCb2R5S2V5KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5kRm4gPSByZXNwLmVuZC5iaW5kKHJlc3ApO1xuICAgICAgICAgICAgICAgIHJlc3AuZW5kID0gZnVuY3Rpb24gKGNodW5rKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwLnN0YXR1c0NvZGUgPT09IDIwMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZW5kRm4oYHsgXCIke3JvdXRlLnJlc3BvbnNlQm9keUtleX1cIjogJHtjaHVua30gfWApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZW5kRm4oY2h1bmspO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIHJldmVyc2UgcHJveHkgaGFuZGxlciB0b1xuICAgICAqIHByb3h5IGh0dHAgcmVxdWVzdHMgdG8gVHdpcnAgQ29tcGxpYW50IGhhbmRsZXJzXG4gICAgICogQHBhcmFtIGh0dHBDbGllbnRPcHRpb25cbiAgICAgKi9cbiAgICByZXZlcnNlUHJveHkoaHR0cENsaWVudE9wdGlvbikge1xuICAgICAgICBjb25zdCBjbGllbnQgPSBodHRwX2NsaWVudF8xLk5vZGVIdHRwUlBDKGh0dHBDbGllbnRPcHRpb24pO1xuICAgICAgICByZXR1cm4gKHJlcSwgcmVzKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IFttYXRjaCwgcm91dGVdID0gdGhpcy5tYXRjaFJvdXRlKHJlcSk7XG4gICAgICAgICAgICAgICAgY29uc3QgYm9keSA9IHlpZWxkIHRoaXMucHJlcGFyZVR3aXJwQm9keShyZXEsIG1hdGNoLCByb3V0ZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSB5aWVsZCBjbGllbnQucmVxdWVzdChgJHtyb3V0ZS5wYWNrYWdlTmFtZX0uJHtyb3V0ZS5zZXJ2aWNlTmFtZX1gLCByb3V0ZS5tZXRob2ROYW1lLCBcImFwcGxpY2F0aW9uL2pzb25cIiwgYm9keSk7XG4gICAgICAgICAgICAgICAgcmVzLnN0YXR1c0NvZGUgPSAyMDA7XG4gICAgICAgICAgICAgICAgcmVzLnNldEhlYWRlcihcImNvbnRlbnQtdHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb25cIik7XG4gICAgICAgICAgICAgICAgbGV0IGpzb25SZXNwb25zZTtcbiAgICAgICAgICAgICAgICBpZiAocm91dGUucmVzcG9uc2VCb2R5S2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIGpzb25SZXNwb25zZSA9IEpTT04uc3RyaW5naWZ5KHsgW3JvdXRlLnJlc3BvbnNlQm9keUtleV06IHJlc3BvbnNlIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAganNvblJlc3BvbnNlID0gSlNPTi5zdHJpbmdpZnkocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXMuZW5kKGpzb25SZXNwb25zZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHNlcnZlcl8xLndyaXRlRXJyb3IocmVzLCBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFByZXBhcmVzIHR3aXJwIGJvZHkgcmVxdWVzdHMgdXNpbmcgaHR0cC5nb29nbGUuYW5ub3Rpb25zXG4gICAgICogY29tcGxpYW50IHNwZWNcbiAgICAgKlxuICAgICAqIEBwYXJhbSByZXFcbiAgICAgKiBAcGFyYW0gbWF0Y2hcbiAgICAgKiBAcGFyYW0gcm91dGVcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG4gICAgcHJlcGFyZVR3aXJwQm9keShyZXEsIG1hdGNoLCByb3V0ZSkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgY29uc3QgX2EgPSBtYXRjaC5wYXJhbXMsIHsgcXVlcnlfc3RyaW5nIH0gPSBfYSwgcGFyYW1zID0gX19yZXN0KF9hLCBbXCJxdWVyeV9zdHJpbmdcIl0pO1xuICAgICAgICAgICAgbGV0IHJlcXVlc3RCb2R5ID0gT2JqZWN0LmFzc2lnbih7fSwgcGFyYW1zKTtcbiAgICAgICAgICAgIGlmIChxdWVyeV9zdHJpbmcgJiYgcm91dGUuYm9keUtleSAhPT0gXCIqXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHRoaXMucGFyc2VRdWVyeVN0cmluZyhxdWVyeV9zdHJpbmcpO1xuICAgICAgICAgICAgICAgIHJlcXVlc3RCb2R5ID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBxdWVyeVBhcmFtcyksIHJlcXVlc3RCb2R5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBib2R5ID0ge307XG4gICAgICAgICAgICBpZiAocm91dGUuYm9keUtleSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB5aWVsZCByZXF1ZXN0XzEuZ2V0UmVxdWVzdERhdGEocmVxKTtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBqc29uQm9keSA9IEpTT04ucGFyc2UoZGF0YS50b1N0cmluZygpIHx8IFwie31cIik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyb3V0ZS5ib2R5S2V5ID09PSBcIipcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYm9keSA9IGpzb25Cb2R5O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYm9keVtyb3V0ZS5ib2R5S2V5XSA9IGpzb25Cb2R5O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1zZyA9IFwidGhlIGpzb24gcmVxdWVzdCBjb3VsZCBub3QgYmUgZGVjb2RlZFwiO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuVHdpcnBFcnJvcihlcnJvcnNfMS5Ud2lycEVycm9yQ29kZS5NYWxmb3JtZWQsIG1zZykud2l0aENhdXNlKGUsIHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGJvZHkpLCByZXF1ZXN0Qm9keSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBNYXRjaGVzIGEgcm91dGVcbiAgICAgKiBAcGFyYW0gcmVxXG4gICAgICovXG4gICAgbWF0Y2hSb3V0ZShyZXEpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBodHRwTWV0aG9kID0gKF9hID0gcmVxLm1ldGhvZCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmICghaHR0cE1ldGhvZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGVycm9yc18xLkJhZFJvdXRlRXJyb3IoYG1ldGhvZCBub3QgYWxsb3dlZGAsIHJlcS5tZXRob2QgfHwgXCJcIiwgcmVxLnVybCB8fCBcIlwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByb3V0ZXMgPSB0aGlzLnJvdXRlc1todHRwTWV0aG9kXTtcbiAgICAgICAgZm9yIChjb25zdCByb3V0ZSBvZiByb3V0ZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gcm91dGUubWF0Y2hlcihyZXEudXJsIHx8IFwiL1wiKTtcbiAgICAgICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbbWF0Y2gsIHJvdXRlXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuTm90Rm91bmRFcnJvcihgdXJsICR7cmVxLnVybH0gbm90IGZvdW5kYCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFBhcnNlIHF1ZXJ5IHN0cmluZ1xuICAgICAqIEBwYXJhbSBxdWVyeVN0cmluZ1xuICAgICAqL1xuICAgIHBhcnNlUXVlcnlTdHJpbmcocXVlcnlTdHJpbmcpIHtcbiAgICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSBxdWVyeXN0cmluZ18xLnBhcnNlKHF1ZXJ5U3RyaW5nLnJlcGxhY2UoXCI/XCIsIFwiXCIpKTtcbiAgICAgICAgcmV0dXJuIGRvdE9iamVjdC5vYmplY3QocXVlcnlQYXJhbXMpO1xuICAgIH1cbn1cbmV4cG9ydHMuR2F0ZXdheSA9IEdhdGV3YXk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH0pO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX2V4cG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9fZXhwb3J0U3RhcikgfHwgZnVuY3Rpb24obSwgZXhwb3J0cykge1xuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZXhwb3J0cywgcCkpIF9fY3JlYXRlQmluZGluZyhleHBvcnRzLCBtLCBwKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlR3aXJwQ29udGVudFR5cGUgPSB2b2lkIDA7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vY29udGV4dFwiKSwgZXhwb3J0cyk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vc2VydmVyXCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9pbnRlcmNlcHRvcnNcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2hvb2tzXCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9lcnJvcnNcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2dhdGV3YXlcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2h0dHAuY2xpZW50XCIpLCBleHBvcnRzKTtcbnZhciByZXF1ZXN0XzEgPSByZXF1aXJlKFwiLi9yZXF1ZXN0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVHdpcnBDb250ZW50VHlwZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVxdWVzdF8xLlR3aXJwQ29udGVudFR5cGU7IH0gfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNyZWF0ZUFydGlmYWN0U2VydmljZVNlcnZlciA9IGV4cG9ydHMuQXJ0aWZhY3RTZXJ2aWNlTWV0aG9kTGlzdCA9IGV4cG9ydHMuQXJ0aWZhY3RTZXJ2aWNlTWV0aG9kID0gZXhwb3J0cy5BcnRpZmFjdFNlcnZpY2VDbGllbnRQcm90b2J1ZiA9IGV4cG9ydHMuQXJ0aWZhY3RTZXJ2aWNlQ2xpZW50SlNPTiA9IHZvaWQgMDtcbmNvbnN0IHR3aXJwX3RzXzEgPSByZXF1aXJlKFwidHdpcnAtdHNcIik7XG5jb25zdCBhcnRpZmFjdF8xID0gcmVxdWlyZShcIi4vYXJ0aWZhY3RcIik7XG5jbGFzcyBBcnRpZmFjdFNlcnZpY2VDbGllbnRKU09OIHtcbiAgICBjb25zdHJ1Y3RvcihycGMpIHtcbiAgICAgICAgdGhpcy5ycGMgPSBycGM7XG4gICAgICAgIHRoaXMuQ3JlYXRlQXJ0aWZhY3QuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5GaW5hbGl6ZUFydGlmYWN0LmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuTGlzdEFydGlmYWN0cy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLkdldFNpZ25lZEFydGlmYWN0VVJMLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuRGVsZXRlQXJ0aWZhY3QuYmluZCh0aGlzKTtcbiAgICB9XG4gICAgQ3JlYXRlQXJ0aWZhY3QocmVxdWVzdCkge1xuICAgICAgICBjb25zdCBkYXRhID0gYXJ0aWZhY3RfMS5DcmVhdGVBcnRpZmFjdFJlcXVlc3QudG9Kc29uKHJlcXVlc3QsIHtcbiAgICAgICAgICAgIHVzZVByb3RvRmllbGROYW1lOiB0cnVlLFxuICAgICAgICAgICAgZW1pdERlZmF1bHRWYWx1ZXM6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcHJvbWlzZSA9IHRoaXMucnBjLnJlcXVlc3QoXCJnaXRodWIuYWN0aW9ucy5yZXN1bHRzLmFwaS52MS5BcnRpZmFjdFNlcnZpY2VcIiwgXCJDcmVhdGVBcnRpZmFjdFwiLCBcImFwcGxpY2F0aW9uL2pzb25cIiwgZGF0YSk7XG4gICAgICAgIHJldHVybiBwcm9taXNlLnRoZW4oKGRhdGEpID0+IGFydGlmYWN0XzEuQ3JlYXRlQXJ0aWZhY3RSZXNwb25zZS5mcm9tSnNvbihkYXRhLCB7XG4gICAgICAgICAgICBpZ25vcmVVbmtub3duRmllbGRzOiB0cnVlLFxuICAgICAgICB9KSk7XG4gICAgfVxuICAgIEZpbmFsaXplQXJ0aWZhY3QocmVxdWVzdCkge1xuICAgICAgICBjb25zdCBkYXRhID0gYXJ0aWZhY3RfMS5GaW5hbGl6ZUFydGlmYWN0UmVxdWVzdC50b0pzb24ocmVxdWVzdCwge1xuICAgICAgICAgICAgdXNlUHJvdG9GaWVsZE5hbWU6IHRydWUsXG4gICAgICAgICAgICBlbWl0RGVmYXVsdFZhbHVlczogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBwcm9taXNlID0gdGhpcy5ycGMucmVxdWVzdChcImdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkFydGlmYWN0U2VydmljZVwiLCBcIkZpbmFsaXplQXJ0aWZhY3RcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIsIGRhdGEpO1xuICAgICAgICByZXR1cm4gcHJvbWlzZS50aGVuKChkYXRhKSA9PiBhcnRpZmFjdF8xLkZpbmFsaXplQXJ0aWZhY3RSZXNwb25zZS5mcm9tSnNvbihkYXRhLCB7XG4gICAgICAgICAgICBpZ25vcmVVbmtub3duRmllbGRzOiB0cnVlLFxuICAgICAgICB9KSk7XG4gICAgfVxuICAgIExpc3RBcnRpZmFjdHMocmVxdWVzdCkge1xuICAgICAgICBjb25zdCBkYXRhID0gYXJ0aWZhY3RfMS5MaXN0QXJ0aWZhY3RzUmVxdWVzdC50b0pzb24ocmVxdWVzdCwge1xuICAgICAgICAgICAgdXNlUHJvdG9GaWVsZE5hbWU6IHRydWUsXG4gICAgICAgICAgICBlbWl0RGVmYXVsdFZhbHVlczogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBwcm9taXNlID0gdGhpcy5ycGMucmVxdWVzdChcImdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkFydGlmYWN0U2VydmljZVwiLCBcIkxpc3RBcnRpZmFjdHNcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIsIGRhdGEpO1xuICAgICAgICByZXR1cm4gcHJvbWlzZS50aGVuKChkYXRhKSA9PiBhcnRpZmFjdF8xLkxpc3RBcnRpZmFjdHNSZXNwb25zZS5mcm9tSnNvbihkYXRhLCB7IGlnbm9yZVVua25vd25GaWVsZHM6IHRydWUgfSkpO1xuICAgIH1cbiAgICBHZXRTaWduZWRBcnRpZmFjdFVSTChyZXF1ZXN0KSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhcnRpZmFjdF8xLkdldFNpZ25lZEFydGlmYWN0VVJMUmVxdWVzdC50b0pzb24ocmVxdWVzdCwge1xuICAgICAgICAgICAgdXNlUHJvdG9GaWVsZE5hbWU6IHRydWUsXG4gICAgICAgICAgICBlbWl0RGVmYXVsdFZhbHVlczogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBwcm9taXNlID0gdGhpcy5ycGMucmVxdWVzdChcImdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkFydGlmYWN0U2VydmljZVwiLCBcIkdldFNpZ25lZEFydGlmYWN0VVJMXCIsIFwiYXBwbGljYXRpb24vanNvblwiLCBkYXRhKTtcbiAgICAgICAgcmV0dXJuIHByb21pc2UudGhlbigoZGF0YSkgPT4gYXJ0aWZhY3RfMS5HZXRTaWduZWRBcnRpZmFjdFVSTFJlc3BvbnNlLmZyb21Kc29uKGRhdGEsIHtcbiAgICAgICAgICAgIGlnbm9yZVVua25vd25GaWVsZHM6IHRydWUsXG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgRGVsZXRlQXJ0aWZhY3QocmVxdWVzdCkge1xuICAgICAgICBjb25zdCBkYXRhID0gYXJ0aWZhY3RfMS5EZWxldGVBcnRpZmFjdFJlcXVlc3QudG9Kc29uKHJlcXVlc3QsIHtcbiAgICAgICAgICAgIHVzZVByb3RvRmllbGROYW1lOiB0cnVlLFxuICAgICAgICAgICAgZW1pdERlZmF1bHRWYWx1ZXM6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcHJvbWlzZSA9IHRoaXMucnBjLnJlcXVlc3QoXCJnaXRodWIuYWN0aW9ucy5yZXN1bHRzLmFwaS52MS5BcnRpZmFjdFNlcnZpY2VcIiwgXCJEZWxldGVBcnRpZmFjdFwiLCBcImFwcGxpY2F0aW9uL2pzb25cIiwgZGF0YSk7XG4gICAgICAgIHJldHVybiBwcm9taXNlLnRoZW4oKGRhdGEpID0+IGFydGlmYWN0XzEuRGVsZXRlQXJ0aWZhY3RSZXNwb25zZS5mcm9tSnNvbihkYXRhLCB7XG4gICAgICAgICAgICBpZ25vcmVVbmtub3duRmllbGRzOiB0cnVlLFxuICAgICAgICB9KSk7XG4gICAgfVxufVxuZXhwb3J0cy5BcnRpZmFjdFNlcnZpY2VDbGllbnRKU09OID0gQXJ0aWZhY3RTZXJ2aWNlQ2xpZW50SlNPTjtcbmNsYXNzIEFydGlmYWN0U2VydmljZUNsaWVudFByb3RvYnVmIHtcbiAgICBjb25zdHJ1Y3RvcihycGMpIHtcbiAgICAgICAgdGhpcy5ycGMgPSBycGM7XG4gICAgICAgIHRoaXMuQ3JlYXRlQXJ0aWZhY3QuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5GaW5hbGl6ZUFydGlmYWN0LmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuTGlzdEFydGlmYWN0cy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLkdldFNpZ25lZEFydGlmYWN0VVJMLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuRGVsZXRlQXJ0aWZhY3QuYmluZCh0aGlzKTtcbiAgICB9XG4gICAgQ3JlYXRlQXJ0aWZhY3QocmVxdWVzdCkge1xuICAgICAgICBjb25zdCBkYXRhID0gYXJ0aWZhY3RfMS5DcmVhdGVBcnRpZmFjdFJlcXVlc3QudG9CaW5hcnkocmVxdWVzdCk7XG4gICAgICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLnJwYy5yZXF1ZXN0KFwiZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuQXJ0aWZhY3RTZXJ2aWNlXCIsIFwiQ3JlYXRlQXJ0aWZhY3RcIiwgXCJhcHBsaWNhdGlvbi9wcm90b2J1ZlwiLCBkYXRhKTtcbiAgICAgICAgcmV0dXJuIHByb21pc2UudGhlbigoZGF0YSkgPT4gYXJ0aWZhY3RfMS5DcmVhdGVBcnRpZmFjdFJlc3BvbnNlLmZyb21CaW5hcnkoZGF0YSkpO1xuICAgIH1cbiAgICBGaW5hbGl6ZUFydGlmYWN0KHJlcXVlc3QpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGFydGlmYWN0XzEuRmluYWxpemVBcnRpZmFjdFJlcXVlc3QudG9CaW5hcnkocmVxdWVzdCk7XG4gICAgICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLnJwYy5yZXF1ZXN0KFwiZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuQXJ0aWZhY3RTZXJ2aWNlXCIsIFwiRmluYWxpemVBcnRpZmFjdFwiLCBcImFwcGxpY2F0aW9uL3Byb3RvYnVmXCIsIGRhdGEpO1xuICAgICAgICByZXR1cm4gcHJvbWlzZS50aGVuKChkYXRhKSA9PiBhcnRpZmFjdF8xLkZpbmFsaXplQXJ0aWZhY3RSZXNwb25zZS5mcm9tQmluYXJ5KGRhdGEpKTtcbiAgICB9XG4gICAgTGlzdEFydGlmYWN0cyhyZXF1ZXN0KSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhcnRpZmFjdF8xLkxpc3RBcnRpZmFjdHNSZXF1ZXN0LnRvQmluYXJ5KHJlcXVlc3QpO1xuICAgICAgICBjb25zdCBwcm9taXNlID0gdGhpcy5ycGMucmVxdWVzdChcImdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkFydGlmYWN0U2VydmljZVwiLCBcIkxpc3RBcnRpZmFjdHNcIiwgXCJhcHBsaWNhdGlvbi9wcm90b2J1ZlwiLCBkYXRhKTtcbiAgICAgICAgcmV0dXJuIHByb21pc2UudGhlbigoZGF0YSkgPT4gYXJ0aWZhY3RfMS5MaXN0QXJ0aWZhY3RzUmVzcG9uc2UuZnJvbUJpbmFyeShkYXRhKSk7XG4gICAgfVxuICAgIEdldFNpZ25lZEFydGlmYWN0VVJMKHJlcXVlc3QpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGFydGlmYWN0XzEuR2V0U2lnbmVkQXJ0aWZhY3RVUkxSZXF1ZXN0LnRvQmluYXJ5KHJlcXVlc3QpO1xuICAgICAgICBjb25zdCBwcm9taXNlID0gdGhpcy5ycGMucmVxdWVzdChcImdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkFydGlmYWN0U2VydmljZVwiLCBcIkdldFNpZ25lZEFydGlmYWN0VVJMXCIsIFwiYXBwbGljYXRpb24vcHJvdG9idWZcIiwgZGF0YSk7XG4gICAgICAgIHJldHVybiBwcm9taXNlLnRoZW4oKGRhdGEpID0+IGFydGlmYWN0XzEuR2V0U2lnbmVkQXJ0aWZhY3RVUkxSZXNwb25zZS5mcm9tQmluYXJ5KGRhdGEpKTtcbiAgICB9XG4gICAgRGVsZXRlQXJ0aWZhY3QocmVxdWVzdCkge1xuICAgICAgICBjb25zdCBkYXRhID0gYXJ0aWZhY3RfMS5EZWxldGVBcnRpZmFjdFJlcXVlc3QudG9CaW5hcnkocmVxdWVzdCk7XG4gICAgICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLnJwYy5yZXF1ZXN0KFwiZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuQXJ0aWZhY3RTZXJ2aWNlXCIsIFwiRGVsZXRlQXJ0aWZhY3RcIiwgXCJhcHBsaWNhdGlvbi9wcm90b2J1ZlwiLCBkYXRhKTtcbiAgICAgICAgcmV0dXJuIHByb21pc2UudGhlbigoZGF0YSkgPT4gYXJ0aWZhY3RfMS5EZWxldGVBcnRpZmFjdFJlc3BvbnNlLmZyb21CaW5hcnkoZGF0YSkpO1xuICAgIH1cbn1cbmV4cG9ydHMuQXJ0aWZhY3RTZXJ2aWNlQ2xpZW50UHJvdG9idWYgPSBBcnRpZmFjdFNlcnZpY2VDbGllbnRQcm90b2J1ZjtcbnZhciBBcnRpZmFjdFNlcnZpY2VNZXRob2Q7XG4oZnVuY3Rpb24gKEFydGlmYWN0U2VydmljZU1ldGhvZCkge1xuICAgIEFydGlmYWN0U2VydmljZU1ldGhvZFtcIkNyZWF0ZUFydGlmYWN0XCJdID0gXCJDcmVhdGVBcnRpZmFjdFwiO1xuICAgIEFydGlmYWN0U2VydmljZU1ldGhvZFtcIkZpbmFsaXplQXJ0aWZhY3RcIl0gPSBcIkZpbmFsaXplQXJ0aWZhY3RcIjtcbiAgICBBcnRpZmFjdFNlcnZpY2VNZXRob2RbXCJMaXN0QXJ0aWZhY3RzXCJdID0gXCJMaXN0QXJ0aWZhY3RzXCI7XG4gICAgQXJ0aWZhY3RTZXJ2aWNlTWV0aG9kW1wiR2V0U2lnbmVkQXJ0aWZhY3RVUkxcIl0gPSBcIkdldFNpZ25lZEFydGlmYWN0VVJMXCI7XG4gICAgQXJ0aWZhY3RTZXJ2aWNlTWV0aG9kW1wiRGVsZXRlQXJ0aWZhY3RcIl0gPSBcIkRlbGV0ZUFydGlmYWN0XCI7XG59KShBcnRpZmFjdFNlcnZpY2VNZXRob2QgfHwgKGV4cG9ydHMuQXJ0aWZhY3RTZXJ2aWNlTWV0aG9kID0gQXJ0aWZhY3RTZXJ2aWNlTWV0aG9kID0ge30pKTtcbmV4cG9ydHMuQXJ0aWZhY3RTZXJ2aWNlTWV0aG9kTGlzdCA9IFtcbiAgICBBcnRpZmFjdFNlcnZpY2VNZXRob2QuQ3JlYXRlQXJ0aWZhY3QsXG4gICAgQXJ0aWZhY3RTZXJ2aWNlTWV0aG9kLkZpbmFsaXplQXJ0aWZhY3QsXG4gICAgQXJ0aWZhY3RTZXJ2aWNlTWV0aG9kLkxpc3RBcnRpZmFjdHMsXG4gICAgQXJ0aWZhY3RTZXJ2aWNlTWV0aG9kLkdldFNpZ25lZEFydGlmYWN0VVJMLFxuICAgIEFydGlmYWN0U2VydmljZU1ldGhvZC5EZWxldGVBcnRpZmFjdCxcbl07XG5mdW5jdGlvbiBjcmVhdGVBcnRpZmFjdFNlcnZpY2VTZXJ2ZXIoc2VydmljZSkge1xuICAgIHJldHVybiBuZXcgdHdpcnBfdHNfMS5Ud2lycFNlcnZlcih7XG4gICAgICAgIHNlcnZpY2UsXG4gICAgICAgIHBhY2thZ2VOYW1lOiBcImdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxXCIsXG4gICAgICAgIHNlcnZpY2VOYW1lOiBcIkFydGlmYWN0U2VydmljZVwiLFxuICAgICAgICBtZXRob2RMaXN0OiBleHBvcnRzLkFydGlmYWN0U2VydmljZU1ldGhvZExpc3QsXG4gICAgICAgIG1hdGNoUm91dGU6IG1hdGNoQXJ0aWZhY3RTZXJ2aWNlUm91dGUsXG4gICAgfSk7XG59XG5leHBvcnRzLmNyZWF0ZUFydGlmYWN0U2VydmljZVNlcnZlciA9IGNyZWF0ZUFydGlmYWN0U2VydmljZVNlcnZlcjtcbmZ1bmN0aW9uIG1hdGNoQXJ0aWZhY3RTZXJ2aWNlUm91dGUobWV0aG9kLCBldmVudHMpIHtcbiAgICBzd2l0Y2ggKG1ldGhvZCkge1xuICAgICAgICBjYXNlIFwiQ3JlYXRlQXJ0aWZhY3RcIjpcbiAgICAgICAgICAgIHJldHVybiAoY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICBjdHggPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGN0eCksIHsgbWV0aG9kTmFtZTogXCJDcmVhdGVBcnRpZmFjdFwiIH0pO1xuICAgICAgICAgICAgICAgIHlpZWxkIGV2ZW50cy5vbk1hdGNoKGN0eCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUFydGlmYWN0U2VydmljZUNyZWF0ZUFydGlmYWN0UmVxdWVzdChjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgY2FzZSBcIkZpbmFsaXplQXJ0aWZhY3RcIjpcbiAgICAgICAgICAgIHJldHVybiAoY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICBjdHggPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGN0eCksIHsgbWV0aG9kTmFtZTogXCJGaW5hbGl6ZUFydGlmYWN0XCIgfSk7XG4gICAgICAgICAgICAgICAgeWllbGQgZXZlbnRzLm9uTWF0Y2goY3R4KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlRmluYWxpemVBcnRpZmFjdFJlcXVlc3QoY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIGNhc2UgXCJMaXN0QXJ0aWZhY3RzXCI6XG4gICAgICAgICAgICByZXR1cm4gKGN0eCwgc2VydmljZSwgZGF0YSwgaW50ZXJjZXB0b3JzKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICAgICAgY3R4ID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBjdHgpLCB7IG1ldGhvZE5hbWU6IFwiTGlzdEFydGlmYWN0c1wiIH0pO1xuICAgICAgICAgICAgICAgIHlpZWxkIGV2ZW50cy5vbk1hdGNoKGN0eCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUFydGlmYWN0U2VydmljZUxpc3RBcnRpZmFjdHNSZXF1ZXN0KGN0eCwgc2VydmljZSwgZGF0YSwgaW50ZXJjZXB0b3JzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICBjYXNlIFwiR2V0U2lnbmVkQXJ0aWZhY3RVUkxcIjpcbiAgICAgICAgICAgIHJldHVybiAoY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICBjdHggPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGN0eCksIHsgbWV0aG9kTmFtZTogXCJHZXRTaWduZWRBcnRpZmFjdFVSTFwiIH0pO1xuICAgICAgICAgICAgICAgIHlpZWxkIGV2ZW50cy5vbk1hdGNoKGN0eCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUFydGlmYWN0U2VydmljZUdldFNpZ25lZEFydGlmYWN0VVJMUmVxdWVzdChjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgY2FzZSBcIkRlbGV0ZUFydGlmYWN0XCI6XG4gICAgICAgICAgICByZXR1cm4gKGN0eCwgc2VydmljZSwgZGF0YSwgaW50ZXJjZXB0b3JzKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICAgICAgY3R4ID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBjdHgpLCB7IG1ldGhvZE5hbWU6IFwiRGVsZXRlQXJ0aWZhY3RcIiB9KTtcbiAgICAgICAgICAgICAgICB5aWVsZCBldmVudHMub25NYXRjaChjdHgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGVBcnRpZmFjdFNlcnZpY2VEZWxldGVBcnRpZmFjdFJlcXVlc3QoY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBldmVudHMub25Ob3RGb3VuZCgpO1xuICAgICAgICAgICAgY29uc3QgbXNnID0gYG5vIGhhbmRsZXIgZm91bmRgO1xuICAgICAgICAgICAgdGhyb3cgbmV3IHR3aXJwX3RzXzEuVHdpcnBFcnJvcih0d2lycF90c18xLlR3aXJwRXJyb3JDb2RlLkJhZFJvdXRlLCBtc2cpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGhhbmRsZUFydGlmYWN0U2VydmljZUNyZWF0ZUFydGlmYWN0UmVxdWVzdChjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycykge1xuICAgIHN3aXRjaCAoY3R4LmNvbnRlbnRUeXBlKSB7XG4gICAgICAgIGNhc2UgdHdpcnBfdHNfMS5Ud2lycENvbnRlbnRUeXBlLkpTT046XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlQ3JlYXRlQXJ0aWZhY3RKU09OKGN0eCwgc2VydmljZSwgZGF0YSwgaW50ZXJjZXB0b3JzKTtcbiAgICAgICAgY2FzZSB0d2lycF90c18xLlR3aXJwQ29udGVudFR5cGUuUHJvdG9idWY6XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlQ3JlYXRlQXJ0aWZhY3RQcm90b2J1ZihjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycyk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zdCBtc2cgPSBcInVuZXhwZWN0ZWQgQ29udGVudC1UeXBlXCI7XG4gICAgICAgICAgICB0aHJvdyBuZXcgdHdpcnBfdHNfMS5Ud2lycEVycm9yKHR3aXJwX3RzXzEuVHdpcnBFcnJvckNvZGUuQmFkUm91dGUsIG1zZyk7XG4gICAgfVxufVxuZnVuY3Rpb24gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlRmluYWxpemVBcnRpZmFjdFJlcXVlc3QoY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpIHtcbiAgICBzd2l0Y2ggKGN0eC5jb250ZW50VHlwZSkge1xuICAgICAgICBjYXNlIHR3aXJwX3RzXzEuVHdpcnBDb250ZW50VHlwZS5KU09OOlxuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUFydGlmYWN0U2VydmljZUZpbmFsaXplQXJ0aWZhY3RKU09OKGN0eCwgc2VydmljZSwgZGF0YSwgaW50ZXJjZXB0b3JzKTtcbiAgICAgICAgY2FzZSB0d2lycF90c18xLlR3aXJwQ29udGVudFR5cGUuUHJvdG9idWY6XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlRmluYWxpemVBcnRpZmFjdFByb3RvYnVmKGN0eCwgc2VydmljZSwgZGF0YSwgaW50ZXJjZXB0b3JzKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNvbnN0IG1zZyA9IFwidW5leHBlY3RlZCBDb250ZW50LVR5cGVcIjtcbiAgICAgICAgICAgIHRocm93IG5ldyB0d2lycF90c18xLlR3aXJwRXJyb3IodHdpcnBfdHNfMS5Ud2lycEVycm9yQ29kZS5CYWRSb3V0ZSwgbXNnKTtcbiAgICB9XG59XG5mdW5jdGlvbiBoYW5kbGVBcnRpZmFjdFNlcnZpY2VMaXN0QXJ0aWZhY3RzUmVxdWVzdChjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycykge1xuICAgIHN3aXRjaCAoY3R4LmNvbnRlbnRUeXBlKSB7XG4gICAgICAgIGNhc2UgdHdpcnBfdHNfMS5Ud2lycENvbnRlbnRUeXBlLkpTT046XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlTGlzdEFydGlmYWN0c0pTT04oY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpO1xuICAgICAgICBjYXNlIHR3aXJwX3RzXzEuVHdpcnBDb250ZW50VHlwZS5Qcm90b2J1ZjpcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVBcnRpZmFjdFNlcnZpY2VMaXN0QXJ0aWZhY3RzUHJvdG9idWYoY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgY29uc3QgbXNnID0gXCJ1bmV4cGVjdGVkIENvbnRlbnQtVHlwZVwiO1xuICAgICAgICAgICAgdGhyb3cgbmV3IHR3aXJwX3RzXzEuVHdpcnBFcnJvcih0d2lycF90c18xLlR3aXJwRXJyb3JDb2RlLkJhZFJvdXRlLCBtc2cpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGhhbmRsZUFydGlmYWN0U2VydmljZUdldFNpZ25lZEFydGlmYWN0VVJMUmVxdWVzdChjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycykge1xuICAgIHN3aXRjaCAoY3R4LmNvbnRlbnRUeXBlKSB7XG4gICAgICAgIGNhc2UgdHdpcnBfdHNfMS5Ud2lycENvbnRlbnRUeXBlLkpTT046XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlR2V0U2lnbmVkQXJ0aWZhY3RVUkxKU09OKGN0eCwgc2VydmljZSwgZGF0YSwgaW50ZXJjZXB0b3JzKTtcbiAgICAgICAgY2FzZSB0d2lycF90c18xLlR3aXJwQ29udGVudFR5cGUuUHJvdG9idWY6XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlR2V0U2lnbmVkQXJ0aWZhY3RVUkxQcm90b2J1ZihjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycyk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zdCBtc2cgPSBcInVuZXhwZWN0ZWQgQ29udGVudC1UeXBlXCI7XG4gICAgICAgICAgICB0aHJvdyBuZXcgdHdpcnBfdHNfMS5Ud2lycEVycm9yKHR3aXJwX3RzXzEuVHdpcnBFcnJvckNvZGUuQmFkUm91dGUsIG1zZyk7XG4gICAgfVxufVxuZnVuY3Rpb24gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlRGVsZXRlQXJ0aWZhY3RSZXF1ZXN0KGN0eCwgc2VydmljZSwgZGF0YSwgaW50ZXJjZXB0b3JzKSB7XG4gICAgc3dpdGNoIChjdHguY29udGVudFR5cGUpIHtcbiAgICAgICAgY2FzZSB0d2lycF90c18xLlR3aXJwQ29udGVudFR5cGUuSlNPTjpcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVBcnRpZmFjdFNlcnZpY2VEZWxldGVBcnRpZmFjdEpTT04oY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpO1xuICAgICAgICBjYXNlIHR3aXJwX3RzXzEuVHdpcnBDb250ZW50VHlwZS5Qcm90b2J1ZjpcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVBcnRpZmFjdFNlcnZpY2VEZWxldGVBcnRpZmFjdFByb3RvYnVmKGN0eCwgc2VydmljZSwgZGF0YSwgaW50ZXJjZXB0b3JzKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNvbnN0IG1zZyA9IFwidW5leHBlY3RlZCBDb250ZW50LVR5cGVcIjtcbiAgICAgICAgICAgIHRocm93IG5ldyB0d2lycF90c18xLlR3aXJwRXJyb3IodHdpcnBfdHNfMS5Ud2lycEVycm9yQ29kZS5CYWRSb3V0ZSwgbXNnKTtcbiAgICB9XG59XG5mdW5jdGlvbiBoYW5kbGVBcnRpZmFjdFNlcnZpY2VDcmVhdGVBcnRpZmFjdEpTT04oY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBsZXQgcmVxdWVzdDtcbiAgICAgICAgbGV0IHJlc3BvbnNlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgYm9keSA9IEpTT04ucGFyc2UoZGF0YS50b1N0cmluZygpIHx8IFwie31cIik7XG4gICAgICAgICAgICByZXF1ZXN0ID0gYXJ0aWZhY3RfMS5DcmVhdGVBcnRpZmFjdFJlcXVlc3QuZnJvbUpzb24oYm9keSwge1xuICAgICAgICAgICAgICAgIGlnbm9yZVVua25vd25GaWVsZHM6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1zZyA9IFwidGhlIGpzb24gcmVxdWVzdCBjb3VsZCBub3QgYmUgZGVjb2RlZFwiO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyB0d2lycF90c18xLlR3aXJwRXJyb3IodHdpcnBfdHNfMS5Ud2lycEVycm9yQ29kZS5NYWxmb3JtZWQsIG1zZykud2l0aENhdXNlKGUsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpbnRlcmNlcHRvcnMgJiYgaW50ZXJjZXB0b3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGludGVyY2VwdG9yID0gKDAsIHR3aXJwX3RzXzEuY2hhaW5JbnRlcmNlcHRvcnMpKC4uLmludGVyY2VwdG9ycyk7XG4gICAgICAgICAgICByZXNwb25zZSA9IHlpZWxkIGludGVyY2VwdG9yKGN0eCwgcmVxdWVzdCwgKGN0eCwgaW5wdXRSZXEpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VydmljZS5DcmVhdGVBcnRpZmFjdChjdHgsIGlucHV0UmVxKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzcG9uc2UgPSB5aWVsZCBzZXJ2aWNlLkNyZWF0ZUFydGlmYWN0KGN0eCwgcmVxdWVzdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGFydGlmYWN0XzEuQ3JlYXRlQXJ0aWZhY3RSZXNwb25zZS50b0pzb24ocmVzcG9uc2UsIHtcbiAgICAgICAgICAgIHVzZVByb3RvRmllbGROYW1lOiB0cnVlLFxuICAgICAgICAgICAgZW1pdERlZmF1bHRWYWx1ZXM6IGZhbHNlLFxuICAgICAgICB9KSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBoYW5kbGVBcnRpZmFjdFNlcnZpY2VGaW5hbGl6ZUFydGlmYWN0SlNPTihjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGxldCByZXF1ZXN0O1xuICAgICAgICBsZXQgcmVzcG9uc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5wYXJzZShkYXRhLnRvU3RyaW5nKCkgfHwgXCJ7fVwiKTtcbiAgICAgICAgICAgIHJlcXVlc3QgPSBhcnRpZmFjdF8xLkZpbmFsaXplQXJ0aWZhY3RSZXF1ZXN0LmZyb21Kc29uKGJvZHksIHtcbiAgICAgICAgICAgICAgICBpZ25vcmVVbmtub3duRmllbGRzOiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtc2cgPSBcInRoZSBqc29uIHJlcXVlc3QgY291bGQgbm90IGJlIGRlY29kZWRcIjtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgdHdpcnBfdHNfMS5Ud2lycEVycm9yKHR3aXJwX3RzXzEuVHdpcnBFcnJvckNvZGUuTWFsZm9ybWVkLCBtc2cpLndpdGhDYXVzZShlLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaW50ZXJjZXB0b3JzICYmIGludGVyY2VwdG9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBpbnRlcmNlcHRvciA9ICgwLCB0d2lycF90c18xLmNoYWluSW50ZXJjZXB0b3JzKSguLi5pbnRlcmNlcHRvcnMpO1xuICAgICAgICAgICAgcmVzcG9uc2UgPSB5aWVsZCBpbnRlcmNlcHRvcihjdHgsIHJlcXVlc3QsIChjdHgsIGlucHV0UmVxKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlcnZpY2UuRmluYWxpemVBcnRpZmFjdChjdHgsIGlucHV0UmVxKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzcG9uc2UgPSB5aWVsZCBzZXJ2aWNlLkZpbmFsaXplQXJ0aWZhY3QoY3R4LCByZXF1ZXN0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoYXJ0aWZhY3RfMS5GaW5hbGl6ZUFydGlmYWN0UmVzcG9uc2UudG9Kc29uKHJlc3BvbnNlLCB7XG4gICAgICAgICAgICB1c2VQcm90b0ZpZWxkTmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGVtaXREZWZhdWx0VmFsdWVzOiBmYWxzZSxcbiAgICAgICAgfSkpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlTGlzdEFydGlmYWN0c0pTT04oY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBsZXQgcmVxdWVzdDtcbiAgICAgICAgbGV0IHJlc3BvbnNlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgYm9keSA9IEpTT04ucGFyc2UoZGF0YS50b1N0cmluZygpIHx8IFwie31cIik7XG4gICAgICAgICAgICByZXF1ZXN0ID0gYXJ0aWZhY3RfMS5MaXN0QXJ0aWZhY3RzUmVxdWVzdC5mcm9tSnNvbihib2R5LCB7XG4gICAgICAgICAgICAgICAgaWdub3JlVW5rbm93bkZpZWxkczogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbXNnID0gXCJ0aGUganNvbiByZXF1ZXN0IGNvdWxkIG5vdCBiZSBkZWNvZGVkXCI7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IHR3aXJwX3RzXzEuVHdpcnBFcnJvcih0d2lycF90c18xLlR3aXJwRXJyb3JDb2RlLk1hbGZvcm1lZCwgbXNnKS53aXRoQ2F1c2UoZSwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGludGVyY2VwdG9ycyAmJiBpbnRlcmNlcHRvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgaW50ZXJjZXB0b3IgPSAoMCwgdHdpcnBfdHNfMS5jaGFpbkludGVyY2VwdG9ycykoLi4uaW50ZXJjZXB0b3JzKTtcbiAgICAgICAgICAgIHJlc3BvbnNlID0geWllbGQgaW50ZXJjZXB0b3IoY3R4LCByZXF1ZXN0LCAoY3R4LCBpbnB1dFJlcSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBzZXJ2aWNlLkxpc3RBcnRpZmFjdHMoY3R4LCBpbnB1dFJlcSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3BvbnNlID0geWllbGQgc2VydmljZS5MaXN0QXJ0aWZhY3RzKGN0eCwgcmVxdWVzdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGFydGlmYWN0XzEuTGlzdEFydGlmYWN0c1Jlc3BvbnNlLnRvSnNvbihyZXNwb25zZSwge1xuICAgICAgICAgICAgdXNlUHJvdG9GaWVsZE5hbWU6IHRydWUsXG4gICAgICAgICAgICBlbWl0RGVmYXVsdFZhbHVlczogZmFsc2UsXG4gICAgICAgIH0pKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGhhbmRsZUFydGlmYWN0U2VydmljZUdldFNpZ25lZEFydGlmYWN0VVJMSlNPTihjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGxldCByZXF1ZXN0O1xuICAgICAgICBsZXQgcmVzcG9uc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5wYXJzZShkYXRhLnRvU3RyaW5nKCkgfHwgXCJ7fVwiKTtcbiAgICAgICAgICAgIHJlcXVlc3QgPSBhcnRpZmFjdF8xLkdldFNpZ25lZEFydGlmYWN0VVJMUmVxdWVzdC5mcm9tSnNvbihib2R5LCB7XG4gICAgICAgICAgICAgICAgaWdub3JlVW5rbm93bkZpZWxkczogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbXNnID0gXCJ0aGUganNvbiByZXF1ZXN0IGNvdWxkIG5vdCBiZSBkZWNvZGVkXCI7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IHR3aXJwX3RzXzEuVHdpcnBFcnJvcih0d2lycF90c18xLlR3aXJwRXJyb3JDb2RlLk1hbGZvcm1lZCwgbXNnKS53aXRoQ2F1c2UoZSwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGludGVyY2VwdG9ycyAmJiBpbnRlcmNlcHRvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgaW50ZXJjZXB0b3IgPSAoMCwgdHdpcnBfdHNfMS5jaGFpbkludGVyY2VwdG9ycykoLi4uaW50ZXJjZXB0b3JzKTtcbiAgICAgICAgICAgIHJlc3BvbnNlID0geWllbGQgaW50ZXJjZXB0b3IoY3R4LCByZXF1ZXN0LCAoY3R4LCBpbnB1dFJlcSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBzZXJ2aWNlLkdldFNpZ25lZEFydGlmYWN0VVJMKGN0eCwgaW5wdXRSZXEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXNwb25zZSA9IHlpZWxkIHNlcnZpY2UuR2V0U2lnbmVkQXJ0aWZhY3RVUkwoY3R4LCByZXF1ZXN0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoYXJ0aWZhY3RfMS5HZXRTaWduZWRBcnRpZmFjdFVSTFJlc3BvbnNlLnRvSnNvbihyZXNwb25zZSwge1xuICAgICAgICAgICAgdXNlUHJvdG9GaWVsZE5hbWU6IHRydWUsXG4gICAgICAgICAgICBlbWl0RGVmYXVsdFZhbHVlczogZmFsc2UsXG4gICAgICAgIH0pKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGhhbmRsZUFydGlmYWN0U2VydmljZURlbGV0ZUFydGlmYWN0SlNPTihjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGxldCByZXF1ZXN0O1xuICAgICAgICBsZXQgcmVzcG9uc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5wYXJzZShkYXRhLnRvU3RyaW5nKCkgfHwgXCJ7fVwiKTtcbiAgICAgICAgICAgIHJlcXVlc3QgPSBhcnRpZmFjdF8xLkRlbGV0ZUFydGlmYWN0UmVxdWVzdC5mcm9tSnNvbihib2R5LCB7XG4gICAgICAgICAgICAgICAgaWdub3JlVW5rbm93bkZpZWxkczogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbXNnID0gXCJ0aGUganNvbiByZXF1ZXN0IGNvdWxkIG5vdCBiZSBkZWNvZGVkXCI7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IHR3aXJwX3RzXzEuVHdpcnBFcnJvcih0d2lycF90c18xLlR3aXJwRXJyb3JDb2RlLk1hbGZvcm1lZCwgbXNnKS53aXRoQ2F1c2UoZSwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGludGVyY2VwdG9ycyAmJiBpbnRlcmNlcHRvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgaW50ZXJjZXB0b3IgPSAoMCwgdHdpcnBfdHNfMS5jaGFpbkludGVyY2VwdG9ycykoLi4uaW50ZXJjZXB0b3JzKTtcbiAgICAgICAgICAgIHJlc3BvbnNlID0geWllbGQgaW50ZXJjZXB0b3IoY3R4LCByZXF1ZXN0LCAoY3R4LCBpbnB1dFJlcSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBzZXJ2aWNlLkRlbGV0ZUFydGlmYWN0KGN0eCwgaW5wdXRSZXEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXNwb25zZSA9IHlpZWxkIHNlcnZpY2UuRGVsZXRlQXJ0aWZhY3QoY3R4LCByZXF1ZXN0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoYXJ0aWZhY3RfMS5EZWxldGVBcnRpZmFjdFJlc3BvbnNlLnRvSnNvbihyZXNwb25zZSwge1xuICAgICAgICAgICAgdXNlUHJvdG9GaWVsZE5hbWU6IHRydWUsXG4gICAgICAgICAgICBlbWl0RGVmYXVsdFZhbHVlczogZmFsc2UsXG4gICAgICAgIH0pKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGhhbmRsZUFydGlmYWN0U2VydmljZUNyZWF0ZUFydGlmYWN0UHJvdG9idWYoY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBsZXQgcmVxdWVzdDtcbiAgICAgICAgbGV0IHJlc3BvbnNlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmVxdWVzdCA9IGFydGlmYWN0XzEuQ3JlYXRlQXJ0aWZhY3RSZXF1ZXN0LmZyb21CaW5hcnkoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtc2cgPSBcInRoZSBwcm90b2J1ZiByZXF1ZXN0IGNvdWxkIG5vdCBiZSBkZWNvZGVkXCI7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IHR3aXJwX3RzXzEuVHdpcnBFcnJvcih0d2lycF90c18xLlR3aXJwRXJyb3JDb2RlLk1hbGZvcm1lZCwgbXNnKS53aXRoQ2F1c2UoZSwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGludGVyY2VwdG9ycyAmJiBpbnRlcmNlcHRvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgaW50ZXJjZXB0b3IgPSAoMCwgdHdpcnBfdHNfMS5jaGFpbkludGVyY2VwdG9ycykoLi4uaW50ZXJjZXB0b3JzKTtcbiAgICAgICAgICAgIHJlc3BvbnNlID0geWllbGQgaW50ZXJjZXB0b3IoY3R4LCByZXF1ZXN0LCAoY3R4LCBpbnB1dFJlcSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBzZXJ2aWNlLkNyZWF0ZUFydGlmYWN0KGN0eCwgaW5wdXRSZXEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXNwb25zZSA9IHlpZWxkIHNlcnZpY2UuQ3JlYXRlQXJ0aWZhY3QoY3R4LCByZXF1ZXN0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oYXJ0aWZhY3RfMS5DcmVhdGVBcnRpZmFjdFJlc3BvbnNlLnRvQmluYXJ5KHJlc3BvbnNlKSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBoYW5kbGVBcnRpZmFjdFNlcnZpY2VGaW5hbGl6ZUFydGlmYWN0UHJvdG9idWYoY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBsZXQgcmVxdWVzdDtcbiAgICAgICAgbGV0IHJlc3BvbnNlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmVxdWVzdCA9IGFydGlmYWN0XzEuRmluYWxpemVBcnRpZmFjdFJlcXVlc3QuZnJvbUJpbmFyeShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1zZyA9IFwidGhlIHByb3RvYnVmIHJlcXVlc3QgY291bGQgbm90IGJlIGRlY29kZWRcIjtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgdHdpcnBfdHNfMS5Ud2lycEVycm9yKHR3aXJwX3RzXzEuVHdpcnBFcnJvckNvZGUuTWFsZm9ybWVkLCBtc2cpLndpdGhDYXVzZShlLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaW50ZXJjZXB0b3JzICYmIGludGVyY2VwdG9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBpbnRlcmNlcHRvciA9ICgwLCB0d2lycF90c18xLmNoYWluSW50ZXJjZXB0b3JzKSguLi5pbnRlcmNlcHRvcnMpO1xuICAgICAgICAgICAgcmVzcG9uc2UgPSB5aWVsZCBpbnRlcmNlcHRvcihjdHgsIHJlcXVlc3QsIChjdHgsIGlucHV0UmVxKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlcnZpY2UuRmluYWxpemVBcnRpZmFjdChjdHgsIGlucHV0UmVxKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzcG9uc2UgPSB5aWVsZCBzZXJ2aWNlLkZpbmFsaXplQXJ0aWZhY3QoY3R4LCByZXF1ZXN0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oYXJ0aWZhY3RfMS5GaW5hbGl6ZUFydGlmYWN0UmVzcG9uc2UudG9CaW5hcnkocmVzcG9uc2UpKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGhhbmRsZUFydGlmYWN0U2VydmljZUxpc3RBcnRpZmFjdHNQcm90b2J1ZihjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGxldCByZXF1ZXN0O1xuICAgICAgICBsZXQgcmVzcG9uc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXF1ZXN0ID0gYXJ0aWZhY3RfMS5MaXN0QXJ0aWZhY3RzUmVxdWVzdC5mcm9tQmluYXJ5KGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbXNnID0gXCJ0aGUgcHJvdG9idWYgcmVxdWVzdCBjb3VsZCBub3QgYmUgZGVjb2RlZFwiO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyB0d2lycF90c18xLlR3aXJwRXJyb3IodHdpcnBfdHNfMS5Ud2lycEVycm9yQ29kZS5NYWxmb3JtZWQsIG1zZykud2l0aENhdXNlKGUsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpbnRlcmNlcHRvcnMgJiYgaW50ZXJjZXB0b3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGludGVyY2VwdG9yID0gKDAsIHR3aXJwX3RzXzEuY2hhaW5JbnRlcmNlcHRvcnMpKC4uLmludGVyY2VwdG9ycyk7XG4gICAgICAgICAgICByZXNwb25zZSA9IHlpZWxkIGludGVyY2VwdG9yKGN0eCwgcmVxdWVzdCwgKGN0eCwgaW5wdXRSZXEpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VydmljZS5MaXN0QXJ0aWZhY3RzKGN0eCwgaW5wdXRSZXEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXNwb25zZSA9IHlpZWxkIHNlcnZpY2UuTGlzdEFydGlmYWN0cyhjdHgsIHJlcXVlc3QpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShhcnRpZmFjdF8xLkxpc3RBcnRpZmFjdHNSZXNwb25zZS50b0JpbmFyeShyZXNwb25zZSkpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlR2V0U2lnbmVkQXJ0aWZhY3RVUkxQcm90b2J1ZihjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGxldCByZXF1ZXN0O1xuICAgICAgICBsZXQgcmVzcG9uc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXF1ZXN0ID0gYXJ0aWZhY3RfMS5HZXRTaWduZWRBcnRpZmFjdFVSTFJlcXVlc3QuZnJvbUJpbmFyeShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1zZyA9IFwidGhlIHByb3RvYnVmIHJlcXVlc3QgY291bGQgbm90IGJlIGRlY29kZWRcIjtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgdHdpcnBfdHNfMS5Ud2lycEVycm9yKHR3aXJwX3RzXzEuVHdpcnBFcnJvckNvZGUuTWFsZm9ybWVkLCBtc2cpLndpdGhDYXVzZShlLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaW50ZXJjZXB0b3JzICYmIGludGVyY2VwdG9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBpbnRlcmNlcHRvciA9ICgwLCB0d2lycF90c18xLmNoYWluSW50ZXJjZXB0b3JzKSguLi5pbnRlcmNlcHRvcnMpO1xuICAgICAgICAgICAgcmVzcG9uc2UgPSB5aWVsZCBpbnRlcmNlcHRvcihjdHgsIHJlcXVlc3QsIChjdHgsIGlucHV0UmVxKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlcnZpY2UuR2V0U2lnbmVkQXJ0aWZhY3RVUkwoY3R4LCBpbnB1dFJlcSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3BvbnNlID0geWllbGQgc2VydmljZS5HZXRTaWduZWRBcnRpZmFjdFVSTChjdHgsIHJlcXVlc3QpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShhcnRpZmFjdF8xLkdldFNpZ25lZEFydGlmYWN0VVJMUmVzcG9uc2UudG9CaW5hcnkocmVzcG9uc2UpKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGhhbmRsZUFydGlmYWN0U2VydmljZURlbGV0ZUFydGlmYWN0UHJvdG9idWYoY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBsZXQgcmVxdWVzdDtcbiAgICAgICAgbGV0IHJlc3BvbnNlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmVxdWVzdCA9IGFydGlmYWN0XzEuRGVsZXRlQXJ0aWZhY3RSZXF1ZXN0LmZyb21CaW5hcnkoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtc2cgPSBcInRoZSBwcm90b2J1ZiByZXF1ZXN0IGNvdWxkIG5vdCBiZSBkZWNvZGVkXCI7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IHR3aXJwX3RzXzEuVHdpcnBFcnJvcih0d2lycF90c18xLlR3aXJwRXJyb3JDb2RlLk1hbGZvcm1lZCwgbXNnKS53aXRoQ2F1c2UoZSwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGludGVyY2VwdG9ycyAmJiBpbnRlcmNlcHRvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgaW50ZXJjZXB0b3IgPSAoMCwgdHdpcnBfdHNfMS5jaGFpbkludGVyY2VwdG9ycykoLi4uaW50ZXJjZXB0b3JzKTtcbiAgICAgICAgICAgIHJlc3BvbnNlID0geWllbGQgaW50ZXJjZXB0b3IoY3R4LCByZXF1ZXN0LCAoY3R4LCBpbnB1dFJlcSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBzZXJ2aWNlLkRlbGV0ZUFydGlmYWN0KGN0eCwgaW5wdXRSZXEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXNwb25zZSA9IHlpZWxkIHNlcnZpY2UuRGVsZXRlQXJ0aWZhY3QoY3R4LCByZXF1ZXN0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oYXJ0aWZhY3RfMS5EZWxldGVBcnRpZmFjdFJlc3BvbnNlLnRvQmluYXJ5KHJlc3BvbnNlKSk7XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hcnRpZmFjdC50d2lycC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX2V4cG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9fZXhwb3J0U3RhcikgfHwgZnVuY3Rpb24obSwgZXhwb3J0cykge1xuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZXhwb3J0cywgcCkpIF9fY3JlYXRlQmluZGluZyhleHBvcnRzLCBtLCBwKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vZ29vZ2xlL3Byb3RvYnVmL3RpbWVzdGFtcFwiKSwgZXhwb3J0cyk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vZ29vZ2xlL3Byb3RvYnVmL3dyYXBwZXJzXCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9yZXN1bHRzL2FwaS92MS9hcnRpZmFjdFwiKSwgZXhwb3J0cyk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vcmVzdWx0cy9hcGkvdjEvYXJ0aWZhY3QudHdpcnBcIiksIGV4cG9ydHMpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRFeHBpcmF0aW9uID0gdm9pZCAwO1xuY29uc3QgZ2VuZXJhdGVkXzEgPSByZXF1aXJlKFwiLi4vLi4vZ2VuZXJhdGVkXCIpO1xuY29uc3QgY29yZSA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiQGFjdGlvbnMvY29yZVwiKSk7XG5mdW5jdGlvbiBnZXRFeHBpcmF0aW9uKHJldGVudGlvbkRheXMpIHtcbiAgICBpZiAoIXJldGVudGlvbkRheXMpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgbWF4UmV0ZW50aW9uRGF5cyA9IGdldFJldGVudGlvbkRheXMoKTtcbiAgICBpZiAobWF4UmV0ZW50aW9uRGF5cyAmJiBtYXhSZXRlbnRpb25EYXlzIDwgcmV0ZW50aW9uRGF5cykge1xuICAgICAgICBjb3JlLndhcm5pbmcoYFJldGVudGlvbiBkYXlzIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gdGhlIG1heGltdW0gYWxsb3dlZCByZXRlbnRpb24gc2V0IHdpdGhpbiB0aGUgcmVwb3NpdG9yeS4gVXNpbmcgJHttYXhSZXRlbnRpb25EYXlzfSBpbnN0ZWFkLmApO1xuICAgICAgICByZXRlbnRpb25EYXlzID0gbWF4UmV0ZW50aW9uRGF5cztcbiAgICB9XG4gICAgY29uc3QgZXhwaXJhdGlvbkRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgIGV4cGlyYXRpb25EYXRlLnNldERhdGUoZXhwaXJhdGlvbkRhdGUuZ2V0RGF0ZSgpICsgcmV0ZW50aW9uRGF5cyk7XG4gICAgcmV0dXJuIGdlbmVyYXRlZF8xLlRpbWVzdGFtcC5mcm9tRGF0ZShleHBpcmF0aW9uRGF0ZSk7XG59XG5leHBvcnRzLmdldEV4cGlyYXRpb24gPSBnZXRFeHBpcmF0aW9uO1xuZnVuY3Rpb24gZ2V0UmV0ZW50aW9uRGF5cygpIHtcbiAgICBjb25zdCByZXRlbnRpb25EYXlzID0gcHJvY2Vzcy5lbnZbJ0dJVEhVQl9SRVRFTlRJT05fREFZUyddO1xuICAgIGlmICghcmV0ZW50aW9uRGF5cykge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBkYXlzID0gcGFyc2VJbnQocmV0ZW50aW9uRGF5cyk7XG4gICAgaWYgKGlzTmFOKGRheXMpKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiBkYXlzO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmV0ZW50aW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnZhbGlkYXRlRmlsZVBhdGggPSBleHBvcnRzLnZhbGlkYXRlQXJ0aWZhY3ROYW1lID0gdm9pZCAwO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIkBhY3Rpb25zL2NvcmVcIik7XG4vKipcbiAqIEludmFsaWQgY2hhcmFjdGVycyB0aGF0IGNhbm5vdCBiZSBpbiB0aGUgYXJ0aWZhY3QgbmFtZSBvciBhbiB1cGxvYWRlZCBmaWxlLiBXaWxsIGJlIHJlamVjdGVkXG4gKiBmcm9tIHRoZSBzZXJ2ZXIgaWYgYXR0ZW1wdGVkIHRvIGJlIHNlbnQgb3Zlci4gVGhlc2UgY2hhcmFjdGVycyBhcmUgbm90IGFsbG93ZWQgZHVlIHRvIGxpbWl0YXRpb25zIHdpdGggY2VydGFpblxuICogZmlsZSBzeXN0ZW1zIHN1Y2ggYXMgTlRGUy4gVG8gbWFpbnRhaW4gcGxhdGZvcm0tYWdub3N0aWMgYmVoYXZpb3IsIGFsbCBjaGFyYWN0ZXJzIHRoYXQgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgYW5cbiAqIGluZGl2aWR1YWwgZmlsZXN5c3RlbS9wbGF0Zm9ybSB3aWxsIG5vdCBiZSBzdXBwb3J0ZWQgb24gYWxsIGZpbGVTeXN0ZW1zL3BsYXRmb3Jtc1xuICpcbiAqIEZpbGVQYXRocyBjYW4gaW5jbHVkZSBjaGFyYWN0ZXJzIHN1Y2ggYXMgXFwgYW5kIC8gd2hpY2ggYXJlIG5vdCBwZXJtaXR0ZWQgaW4gdGhlIGFydGlmYWN0IG5hbWUgYWxvbmVcbiAqL1xuY29uc3QgaW52YWxpZEFydGlmYWN0RmlsZVBhdGhDaGFyYWN0ZXJzID0gbmV3IE1hcChbXG4gICAgWydcIicsICcgRG91YmxlIHF1b3RlIFwiJ10sXG4gICAgWyc6JywgJyBDb2xvbiA6J10sXG4gICAgWyc8JywgJyBMZXNzIHRoYW4gPCddLFxuICAgIFsnPicsICcgR3JlYXRlciB0aGFuID4nXSxcbiAgICBbJ3wnLCAnIFZlcnRpY2FsIGJhciB8J10sXG4gICAgWycqJywgJyBBc3RlcmlzayAqJ10sXG4gICAgWyc/JywgJyBRdWVzdGlvbiBtYXJrID8nXSxcbiAgICBbJ1xccicsICcgQ2FycmlhZ2UgcmV0dXJuIFxcXFxyJ10sXG4gICAgWydcXG4nLCAnIExpbmUgZmVlZCBcXFxcbiddXG5dKTtcbmNvbnN0IGludmFsaWRBcnRpZmFjdE5hbWVDaGFyYWN0ZXJzID0gbmV3IE1hcChbXG4gICAgLi4uaW52YWxpZEFydGlmYWN0RmlsZVBhdGhDaGFyYWN0ZXJzLFxuICAgIFsnXFxcXCcsICcgQmFja3NsYXNoIFxcXFwnXSxcbiAgICBbJy8nLCAnIEZvcndhcmQgc2xhc2ggLyddXG5dKTtcbi8qKlxuICogVmFsaWRhdGVzIHRoZSBuYW1lIG9mIHRoZSBhcnRpZmFjdCB0byBjaGVjayB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIGlsbGVnYWwgY2hhcmFjdGVyc1xuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUFydGlmYWN0TmFtZShuYW1lKSB7XG4gICAgaWYgKCFuYW1lKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgUHJvdmlkZWQgYXJ0aWZhY3QgbmFtZSBpbnB1dCBkdXJpbmcgdmFsaWRhdGlvbiBpcyBlbXB0eWApO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IFtpbnZhbGlkQ2hhcmFjdGVyS2V5LCBlcnJvck1lc3NhZ2VGb3JDaGFyYWN0ZXJdIG9mIGludmFsaWRBcnRpZmFjdE5hbWVDaGFyYWN0ZXJzKSB7XG4gICAgICAgIGlmIChuYW1lLmluY2x1ZGVzKGludmFsaWRDaGFyYWN0ZXJLZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBhcnRpZmFjdCBuYW1lIGlzIG5vdCB2YWxpZDogJHtuYW1lfS4gQ29udGFpbnMgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXI6ICR7ZXJyb3JNZXNzYWdlRm9yQ2hhcmFjdGVyfVxuICAgICAgICAgIFxuSW52YWxpZCBjaGFyYWN0ZXJzIGluY2x1ZGU6ICR7QXJyYXkuZnJvbShpbnZhbGlkQXJ0aWZhY3ROYW1lQ2hhcmFjdGVycy52YWx1ZXMoKSkudG9TdHJpbmcoKX1cbiAgICAgICAgICBcblRoZXNlIGNoYXJhY3RlcnMgYXJlIG5vdCBhbGxvd2VkIGluIHRoZSBhcnRpZmFjdCBuYW1lIGR1ZSB0byBsaW1pdGF0aW9ucyB3aXRoIGNlcnRhaW4gZmlsZSBzeXN0ZW1zIHN1Y2ggYXMgTlRGUy4gVG8gbWFpbnRhaW4gZmlsZSBzeXN0ZW0gYWdub3N0aWMgYmVoYXZpb3IsIHRoZXNlIGNoYXJhY3RlcnMgYXJlIGludGVudGlvbmFsbHkgbm90IGFsbG93ZWQgdG8gcHJldmVudCBwb3RlbnRpYWwgcHJvYmxlbXMgd2l0aCBkb3dubG9hZHMgb24gZGlmZmVyZW50IGZpbGUgc3lzdGVtcy5gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAoMCwgY29yZV8xLmluZm8pKGBBcnRpZmFjdCBuYW1lIGlzIHZhbGlkIWApO1xufVxuZXhwb3J0cy52YWxpZGF0ZUFydGlmYWN0TmFtZSA9IHZhbGlkYXRlQXJ0aWZhY3ROYW1lO1xuLyoqXG4gKiBWYWxpZGF0ZXMgZmlsZSBwYXRocyB0byBjaGVjayBmb3IgYW55IGlsbGVnYWwgY2hhcmFjdGVycyB0aGF0IGNhbiBjYXVzZSBwcm9ibGVtcyBvbiBkaWZmZXJlbnQgZmlsZSBzeXN0ZW1zXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlRmlsZVBhdGgocGF0aCkge1xuICAgIGlmICghcGF0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFByb3ZpZGVkIGZpbGUgcGF0aCBpbnB1dCBkdXJpbmcgdmFsaWRhdGlvbiBpcyBlbXB0eWApO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IFtpbnZhbGlkQ2hhcmFjdGVyS2V5LCBlcnJvck1lc3NhZ2VGb3JDaGFyYWN0ZXJdIG9mIGludmFsaWRBcnRpZmFjdEZpbGVQYXRoQ2hhcmFjdGVycykge1xuICAgICAgICBpZiAocGF0aC5pbmNsdWRlcyhpbnZhbGlkQ2hhcmFjdGVyS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgcGF0aCBmb3Igb25lIG9mIHRoZSBmaWxlcyBpbiBhcnRpZmFjdCBpcyBub3QgdmFsaWQ6ICR7cGF0aH0uIENvbnRhaW5zIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyOiAke2Vycm9yTWVzc2FnZUZvckNoYXJhY3Rlcn1cbiAgICAgICAgICBcbkludmFsaWQgY2hhcmFjdGVycyBpbmNsdWRlOiAke0FycmF5LmZyb20oaW52YWxpZEFydGlmYWN0RmlsZVBhdGhDaGFyYWN0ZXJzLnZhbHVlcygpKS50b1N0cmluZygpfVxuICAgICAgICAgIFxuVGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJzIGFyZSBub3QgYWxsb3dlZCBpbiBmaWxlcyB0aGF0IGFyZSB1cGxvYWRlZCBkdWUgdG8gbGltaXRhdGlvbnMgd2l0aCBjZXJ0YWluIGZpbGUgc3lzdGVtcyBzdWNoIGFzIE5URlMuIFRvIG1haW50YWluIGZpbGUgc3lzdGVtIGFnbm9zdGljIGJlaGF2aW9yLCB0aGVzZSBjaGFyYWN0ZXJzIGFyZSBpbnRlbnRpb25hbGx5IG5vdCBhbGxvd2VkIHRvIHByZXZlbnQgcG90ZW50aWFsIHByb2JsZW1zIHdpdGggZG93bmxvYWRzIG9uIGRpZmZlcmVudCBmaWxlIHN5c3RlbXMuXG4gICAgICAgICAgYCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLnZhbGlkYXRlRmlsZVBhdGggPSB2YWxpZGF0ZUZpbGVQYXRoO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGF0aC1hbmQtYXJ0aWZhY3QtbmFtZS12YWxpZGF0aW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldFVzZXJBZ2VudFN0cmluZyA9IHZvaWQgMDtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzLCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzXG5jb25zdCBwYWNrYWdlSnNvbiA9IHJlcXVpcmUoJy4uLy4uLy4uL3BhY2thZ2UuanNvbicpO1xuLyoqXG4gKiBFbnN1cmUgdGhhdCB0aGlzIFVzZXIgQWdlbnQgU3RyaW5nIGlzIHVzZWQgaW4gYWxsIEhUVFAgY2FsbHMgc28gdGhhdCB3ZSBjYW4gbW9uaXRvciB0ZWxlbWV0cnkgYmV0d2VlbiBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgdGhpcyBwYWNrYWdlXG4gKi9cbmZ1bmN0aW9uIGdldFVzZXJBZ2VudFN0cmluZygpIHtcbiAgICByZXR1cm4gYEBhY3Rpb25zL2FydGlmYWN0LSR7cGFja2FnZUpzb24udmVyc2lvbn1gO1xufVxuZXhwb3J0cy5nZXRVc2VyQWdlbnRTdHJpbmcgPSBnZXRVc2VyQWdlbnRTdHJpbmc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11c2VyLWFnZW50LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlVzYWdlRXJyb3IgPSBleHBvcnRzLk5ldHdvcmtFcnJvciA9IGV4cG9ydHMuR0hFU05vdFN1cHBvcnRlZEVycm9yID0gZXhwb3J0cy5BcnRpZmFjdE5vdEZvdW5kRXJyb3IgPSBleHBvcnRzLkludmFsaWRSZXNwb25zZUVycm9yID0gZXhwb3J0cy5GaWxlc05vdEZvdW5kRXJyb3IgPSB2b2lkIDA7XG5jbGFzcyBGaWxlc05vdEZvdW5kRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IoZmlsZXMgPSBbXSkge1xuICAgICAgICBsZXQgbWVzc2FnZSA9ICdObyBmaWxlcyB3ZXJlIGZvdW5kIHRvIHVwbG9hZCc7XG4gICAgICAgIGlmIChmaWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBtZXNzYWdlICs9IGA6ICR7ZmlsZXMuam9pbignLCAnKX1gO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLmZpbGVzID0gZmlsZXM7XG4gICAgICAgIHRoaXMubmFtZSA9ICdGaWxlc05vdEZvdW5kRXJyb3InO1xuICAgIH1cbn1cbmV4cG9ydHMuRmlsZXNOb3RGb3VuZEVycm9yID0gRmlsZXNOb3RGb3VuZEVycm9yO1xuY2xhc3MgSW52YWxpZFJlc3BvbnNlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZSkge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5uYW1lID0gJ0ludmFsaWRSZXNwb25zZUVycm9yJztcbiAgICB9XG59XG5leHBvcnRzLkludmFsaWRSZXNwb25zZUVycm9yID0gSW52YWxpZFJlc3BvbnNlRXJyb3I7XG5jbGFzcyBBcnRpZmFjdE5vdEZvdW5kRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZSA9ICdBcnRpZmFjdCBub3QgZm91bmQnKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLm5hbWUgPSAnQXJ0aWZhY3ROb3RGb3VuZEVycm9yJztcbiAgICB9XG59XG5leHBvcnRzLkFydGlmYWN0Tm90Rm91bmRFcnJvciA9IEFydGlmYWN0Tm90Rm91bmRFcnJvcjtcbmNsYXNzIEdIRVNOb3RTdXBwb3J0ZWRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlID0gJ0BhY3Rpb25zL2FydGlmYWN0IHYyLjAuMCssIHVwbG9hZC1hcnRpZmFjdEB2NCsgYW5kIGRvd25sb2FkLWFydGlmYWN0QHY0KyBhcmUgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQgb24gR0hFUy4nKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLm5hbWUgPSAnR0hFU05vdFN1cHBvcnRlZEVycm9yJztcbiAgICB9XG59XG5leHBvcnRzLkdIRVNOb3RTdXBwb3J0ZWRFcnJvciA9IEdIRVNOb3RTdXBwb3J0ZWRFcnJvcjtcbmNsYXNzIE5ldHdvcmtFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3Rvcihjb2RlKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgVW5hYmxlIHRvIG1ha2UgcmVxdWVzdDogJHtjb2RlfVxcbklmIHlvdSBhcmUgdXNpbmcgc2VsZi1ob3N0ZWQgcnVubmVycywgcGxlYXNlIG1ha2Ugc3VyZSB5b3VyIHJ1bm5lciBoYXMgYWNjZXNzIHRvIGFsbCBHaXRIdWIgZW5kcG9pbnRzOiBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9lbi9hY3Rpb25zL2hvc3RpbmcteW91ci1vd24tcnVubmVycy9tYW5hZ2luZy1zZWxmLWhvc3RlZC1ydW5uZXJzL2Fib3V0LXNlbGYtaG9zdGVkLXJ1bm5lcnMjY29tbXVuaWNhdGlvbi1iZXR3ZWVuLXNlbGYtaG9zdGVkLXJ1bm5lcnMtYW5kLWdpdGh1YmA7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLmNvZGUgPSBjb2RlO1xuICAgICAgICB0aGlzLm5hbWUgPSAnTmV0d29ya0Vycm9yJztcbiAgICB9XG59XG5leHBvcnRzLk5ldHdvcmtFcnJvciA9IE5ldHdvcmtFcnJvcjtcbk5ldHdvcmtFcnJvci5pc05ldHdvcmtFcnJvckNvZGUgPSAoY29kZSkgPT4ge1xuICAgIGlmICghY29kZSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBbXG4gICAgICAgICdFQ09OTlJFU0VUJyxcbiAgICAgICAgJ0VOT1RGT1VORCcsXG4gICAgICAgICdFVElNRURPVVQnLFxuICAgICAgICAnRUNPTk5SRUZVU0VEJyxcbiAgICAgICAgJ0VIT1NUVU5SRUFDSCdcbiAgICBdLmluY2x1ZGVzKGNvZGUpO1xufTtcbmNsYXNzIFVzYWdlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgQXJ0aWZhY3Qgc3RvcmFnZSBxdW90YSBoYXMgYmVlbiBoaXQuIFVuYWJsZSB0byB1cGxvYWQgYW55IG5ldyBhcnRpZmFjdHMuIFVzYWdlIGlzIHJlY2FsY3VsYXRlZCBldmVyeSA2LTEyIGhvdXJzLlxcbk1vcmUgaW5mbyBvbiBzdG9yYWdlIGxpbWl0czogaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vZW4vYmlsbGluZy9tYW5hZ2luZy1iaWxsaW5nLWZvci1naXRodWItYWN0aW9ucy9hYm91dC1iaWxsaW5nLWZvci1naXRodWItYWN0aW9ucyNjYWxjdWxhdGluZy1taW51dGUtYW5kLXN0b3JhZ2Utc3BlbmRpbmdgO1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5uYW1lID0gJ1VzYWdlRXJyb3InO1xuICAgIH1cbn1cbmV4cG9ydHMuVXNhZ2VFcnJvciA9IFVzYWdlRXJyb3I7XG5Vc2FnZUVycm9yLmlzVXNhZ2VFcnJvck1lc3NhZ2UgPSAobXNnKSA9PiB7XG4gICAgaWYgKCFtc2cpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gbXNnLmluY2x1ZGVzKCdpbnN1ZmZpY2llbnQgdXNhZ2UnKTtcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1lcnJvcnMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pbnRlcm5hbEFydGlmYWN0VHdpcnBDbGllbnQgPSB2b2lkIDA7XG5jb25zdCBodHRwX2NsaWVudF8xID0gcmVxdWlyZShcIkBhY3Rpb25zL2h0dHAtY2xpZW50XCIpO1xuY29uc3QgYXV0aF8xID0gcmVxdWlyZShcIkBhY3Rpb25zL2h0dHAtY2xpZW50L2xpYi9hdXRoXCIpO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIkBhY3Rpb25zL2NvcmVcIik7XG5jb25zdCBnZW5lcmF0ZWRfMSA9IHJlcXVpcmUoXCIuLi8uLi9nZW5lcmF0ZWRcIik7XG5jb25zdCBjb25maWdfMSA9IHJlcXVpcmUoXCIuL2NvbmZpZ1wiKTtcbmNvbnN0IHVzZXJfYWdlbnRfMSA9IHJlcXVpcmUoXCIuL3VzZXItYWdlbnRcIik7XG5jb25zdCBlcnJvcnNfMSA9IHJlcXVpcmUoXCIuL2Vycm9yc1wiKTtcbmNsYXNzIEFydGlmYWN0SHR0cENsaWVudCB7XG4gICAgY29uc3RydWN0b3IodXNlckFnZW50LCBtYXhBdHRlbXB0cywgYmFzZVJldHJ5SW50ZXJ2YWxNaWxsaXNlY29uZHMsIHJldHJ5TXVsdGlwbGllcikge1xuICAgICAgICB0aGlzLm1heEF0dGVtcHRzID0gNTtcbiAgICAgICAgdGhpcy5iYXNlUmV0cnlJbnRlcnZhbE1pbGxpc2Vjb25kcyA9IDMwMDA7XG4gICAgICAgIHRoaXMucmV0cnlNdWx0aXBsaWVyID0gMS41O1xuICAgICAgICBjb25zdCB0b2tlbiA9ICgwLCBjb25maWdfMS5nZXRSdW50aW1lVG9rZW4pKCk7XG4gICAgICAgIHRoaXMuYmFzZVVybCA9ICgwLCBjb25maWdfMS5nZXRSZXN1bHRzU2VydmljZVVybCkoKTtcbiAgICAgICAgaWYgKG1heEF0dGVtcHRzKSB7XG4gICAgICAgICAgICB0aGlzLm1heEF0dGVtcHRzID0gbWF4QXR0ZW1wdHM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJhc2VSZXRyeUludGVydmFsTWlsbGlzZWNvbmRzKSB7XG4gICAgICAgICAgICB0aGlzLmJhc2VSZXRyeUludGVydmFsTWlsbGlzZWNvbmRzID0gYmFzZVJldHJ5SW50ZXJ2YWxNaWxsaXNlY29uZHM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJldHJ5TXVsdGlwbGllcikge1xuICAgICAgICAgICAgdGhpcy5yZXRyeU11bHRpcGxpZXIgPSByZXRyeU11bHRpcGxpZXI7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5odHRwQ2xpZW50ID0gbmV3IGh0dHBfY2xpZW50XzEuSHR0cENsaWVudCh1c2VyQWdlbnQsIFtcbiAgICAgICAgICAgIG5ldyBhdXRoXzEuQmVhcmVyQ3JlZGVudGlhbEhhbmRsZXIodG9rZW4pXG4gICAgICAgIF0pO1xuICAgIH1cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIHNhdGlzZmllcyB0aGUgUnBjIGludGVyZmFjZS4gSXQgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBKU09OXG4gICAgLy8gSlNPTiBnZW5lcmF0ZWQgY2xpZW50LlxuICAgIHJlcXVlc3Qoc2VydmljZSwgbWV0aG9kLCBjb250ZW50VHlwZSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgY29uc3QgdXJsID0gbmV3IFVSTChgL3R3aXJwLyR7c2VydmljZX0vJHttZXRob2R9YCwgdGhpcy5iYXNlVXJsKS5ocmVmO1xuICAgICAgICAgICAgKDAsIGNvcmVfMS5kZWJ1ZykoYFtSZXF1ZXN0XSAke21ldGhvZH0gJHt1cmx9YCk7XG4gICAgICAgICAgICBjb25zdCBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiBjb250ZW50VHlwZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBib2R5IH0gPSB5aWVsZCB0aGlzLnJldHJ5YWJsZVJlcXVlc3QoKCkgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkgeyByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3QodXJsLCBKU09OLnN0cmluZ2lmeShkYXRhKSwgaGVhZGVycyk7IH0pKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYm9keTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvICR7bWV0aG9kfTogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0cnlhYmxlUmVxdWVzdChvcGVyYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGxldCBhdHRlbXB0ID0gMDtcbiAgICAgICAgICAgIGxldCBlcnJvck1lc3NhZ2UgPSAnJztcbiAgICAgICAgICAgIGxldCByYXdCb2R5ID0gJyc7XG4gICAgICAgICAgICB3aGlsZSAoYXR0ZW1wdCA8IHRoaXMubWF4QXR0ZW1wdHMpIHtcbiAgICAgICAgICAgICAgICBsZXQgaXNSZXRyeWFibGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IHlpZWxkIG9wZXJhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGF0dXNDb2RlID0gcmVzcG9uc2UubWVzc2FnZS5zdGF0dXNDb2RlO1xuICAgICAgICAgICAgICAgICAgICByYXdCb2R5ID0geWllbGQgcmVzcG9uc2UucmVhZEJvZHkoKTtcbiAgICAgICAgICAgICAgICAgICAgKDAsIGNvcmVfMS5kZWJ1ZykoYFtSZXNwb25zZV0gLSAke3Jlc3BvbnNlLm1lc3NhZ2Uuc3RhdHVzQ29kZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgKDAsIGNvcmVfMS5kZWJ1ZykoYEhlYWRlcnM6ICR7SlNPTi5zdHJpbmdpZnkocmVzcG9uc2UubWVzc2FnZS5oZWFkZXJzLCBudWxsLCAyKX1gKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9keSA9IEpTT04ucGFyc2UocmF3Qm9keSk7XG4gICAgICAgICAgICAgICAgICAgICgwLCBjb3JlXzEuZGVidWcpKGBCb2R5OiAke0pTT04uc3RyaW5naWZ5KGJvZHksIG51bGwsIDIpfWApO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1N1Y2Nlc3NTdGF0dXNDb2RlKHN0YXR1c0NvZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyByZXNwb25zZSwgYm9keSB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlzUmV0cnlhYmxlID0gdGhpcy5pc1JldHJ5YWJsZUh0dHBTdGF0dXNDb2RlKHN0YXR1c0NvZGUpO1xuICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBgRmFpbGVkIHJlcXVlc3Q6ICgke3N0YXR1c0NvZGV9KSAke3Jlc3BvbnNlLm1lc3NhZ2Uuc3RhdHVzTWVzc2FnZX1gO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYm9keS5tc2cpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcnNfMS5Vc2FnZUVycm9yLmlzVXNhZ2VFcnJvck1lc3NhZ2UoYm9keS5tc2cpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGVycm9yc18xLlVzYWdlRXJyb3IoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGAke2Vycm9yTWVzc2FnZX06ICR7Ym9keS5tc2d9YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgU3ludGF4RXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICgwLCBjb3JlXzEuZGVidWcpKGBSYXcgQm9keTogJHtyYXdCb2R5fWApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIGVycm9yc18xLlVzYWdlRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcnNfMS5OZXR3b3JrRXJyb3IuaXNOZXR3b3JrRXJyb3JDb2RlKGVycm9yID09PSBudWxsIHx8IGVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlcnJvci5jb2RlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGVycm9yc18xLk5ldHdvcmtFcnJvcihlcnJvciA9PT0gbnVsbCB8fCBlcnJvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogZXJyb3IuY29kZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaXNSZXRyeWFibGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBlcnJvci5tZXNzYWdlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIWlzUmV0cnlhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUmVjZWl2ZWQgbm9uLXJldHJ5YWJsZSBlcnJvcjogJHtlcnJvck1lc3NhZ2V9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChhdHRlbXB0ICsgMSA9PT0gdGhpcy5tYXhBdHRlbXB0cykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBtYWtlIHJlcXVlc3QgYWZ0ZXIgJHt0aGlzLm1heEF0dGVtcHRzfSBhdHRlbXB0czogJHtlcnJvck1lc3NhZ2V9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHJldHJ5VGltZU1pbGxpc2Vjb25kcyA9IHRoaXMuZ2V0RXhwb25lbnRpYWxSZXRyeVRpbWVNaWxsaXNlY29uZHMoYXR0ZW1wdCk7XG4gICAgICAgICAgICAgICAgKDAsIGNvcmVfMS5pbmZvKShgQXR0ZW1wdCAke2F0dGVtcHQgKyAxfSBvZiAke3RoaXMubWF4QXR0ZW1wdHN9IGZhaWxlZCB3aXRoIGVycm9yOiAke2Vycm9yTWVzc2FnZX0uIFJldHJ5aW5nIHJlcXVlc3QgaW4gJHtyZXRyeVRpbWVNaWxsaXNlY29uZHN9IG1zLi4uYCk7XG4gICAgICAgICAgICAgICAgeWllbGQgdGhpcy5zbGVlcChyZXRyeVRpbWVNaWxsaXNlY29uZHMpO1xuICAgICAgICAgICAgICAgIGF0dGVtcHQrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUmVxdWVzdCBmYWlsZWRgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGlzU3VjY2Vzc1N0YXR1c0NvZGUoc3RhdHVzQ29kZSkge1xuICAgICAgICBpZiAoIXN0YXR1c0NvZGUpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiBzdGF0dXNDb2RlID49IDIwMCAmJiBzdGF0dXNDb2RlIDwgMzAwO1xuICAgIH1cbiAgICBpc1JldHJ5YWJsZUh0dHBTdGF0dXNDb2RlKHN0YXR1c0NvZGUpIHtcbiAgICAgICAgaWYgKCFzdGF0dXNDb2RlKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb25zdCByZXRyeWFibGVTdGF0dXNDb2RlcyA9IFtcbiAgICAgICAgICAgIGh0dHBfY2xpZW50XzEuSHR0cENvZGVzLkJhZEdhdGV3YXksXG4gICAgICAgICAgICBodHRwX2NsaWVudF8xLkh0dHBDb2Rlcy5HYXRld2F5VGltZW91dCxcbiAgICAgICAgICAgIGh0dHBfY2xpZW50XzEuSHR0cENvZGVzLkludGVybmFsU2VydmVyRXJyb3IsXG4gICAgICAgICAgICBodHRwX2NsaWVudF8xLkh0dHBDb2Rlcy5TZXJ2aWNlVW5hdmFpbGFibGUsXG4gICAgICAgICAgICBodHRwX2NsaWVudF8xLkh0dHBDb2Rlcy5Ub29NYW55UmVxdWVzdHNcbiAgICAgICAgXTtcbiAgICAgICAgcmV0dXJuIHJldHJ5YWJsZVN0YXR1c0NvZGVzLmluY2x1ZGVzKHN0YXR1c0NvZGUpO1xuICAgIH1cbiAgICBzbGVlcChtaWxsaXNlY29uZHMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbWlsbGlzZWNvbmRzKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBnZXRFeHBvbmVudGlhbFJldHJ5VGltZU1pbGxpc2Vjb25kcyhhdHRlbXB0KSB7XG4gICAgICAgIGlmIChhdHRlbXB0IDwgMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdhdHRlbXB0IHNob3VsZCBiZSBhIHBvc2l0aXZlIGludGVnZXInKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXR0ZW1wdCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmFzZVJldHJ5SW50ZXJ2YWxNaWxsaXNlY29uZHM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWluVGltZSA9IHRoaXMuYmFzZVJldHJ5SW50ZXJ2YWxNaWxsaXNlY29uZHMgKiBNYXRoLnBvdyh0aGlzLnJldHJ5TXVsdGlwbGllciwgYXR0ZW1wdCk7XG4gICAgICAgIGNvbnN0IG1heFRpbWUgPSBtaW5UaW1lICogdGhpcy5yZXRyeU11bHRpcGxpZXI7XG4gICAgICAgIC8vIHJldHVybnMgYSByYW5kb20gbnVtYmVyIGJldHdlZW4gbWluVGltZSBhbmQgbWF4VGltZSAoZXhjbHVzaXZlKVxuICAgICAgICByZXR1cm4gTWF0aC50cnVuYyhNYXRoLnJhbmRvbSgpICogKG1heFRpbWUgLSBtaW5UaW1lKSArIG1pblRpbWUpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGludGVybmFsQXJ0aWZhY3RUd2lycENsaWVudChvcHRpb25zKSB7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IEFydGlmYWN0SHR0cENsaWVudCgoMCwgdXNlcl9hZ2VudF8xLmdldFVzZXJBZ2VudFN0cmluZykoKSwgb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLm1heEF0dGVtcHRzLCBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMucmV0cnlJbnRlcnZhbE1zLCBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMucmV0cnlNdWx0aXBsaWVyKTtcbiAgICByZXR1cm4gbmV3IGdlbmVyYXRlZF8xLkFydGlmYWN0U2VydmljZUNsaWVudEpTT04oY2xpZW50KTtcbn1cbmV4cG9ydHMuaW50ZXJuYWxBcnRpZmFjdFR3aXJwQ2xpZW50ID0gaW50ZXJuYWxBcnRpZmFjdFR3aXJwQ2xpZW50O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXJ0aWZhY3QtdHdpcnAtY2xpZW50LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0VXBsb2FkWmlwU3BlY2lmaWNhdGlvbiA9IGV4cG9ydHMudmFsaWRhdGVSb290RGlyZWN0b3J5ID0gdm9pZCAwO1xuY29uc3QgZnMgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcImZzXCIpKTtcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCJAYWN0aW9ucy9jb3JlXCIpO1xuY29uc3QgcGF0aF8xID0gcmVxdWlyZShcInBhdGhcIik7XG5jb25zdCBwYXRoX2FuZF9hcnRpZmFjdF9uYW1lX3ZhbGlkYXRpb25fMSA9IHJlcXVpcmUoXCIuL3BhdGgtYW5kLWFydGlmYWN0LW5hbWUtdmFsaWRhdGlvblwiKTtcbi8qKlxuICogQ2hlY2tzIGlmIGEgcm9vdCBkaXJlY3RvcnkgZXhpc3RzIGFuZCBpcyB2YWxpZFxuICogQHBhcmFtIHJvb3REaXJlY3RvcnkgYW4gYWJzb2x1dGUgcm9vdCBkaXJlY3RvcnkgcGF0aCBjb21tb24gdG8gYWxsIGlucHV0IGZpbGVzIHRoYXQgdGhhdCB3aWxsIGJlIHRyaW1tZWQgZnJvbSB0aGUgZmluYWwgemlwIHN0cnVjdHVyZVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVJvb3REaXJlY3Rvcnkocm9vdERpcmVjdG9yeSkge1xuICAgIGlmICghZnMuZXhpc3RzU3luYyhyb290RGlyZWN0b3J5KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBwcm92aWRlZCByb290RGlyZWN0b3J5ICR7cm9vdERpcmVjdG9yeX0gZG9lcyBub3QgZXhpc3RgKTtcbiAgICB9XG4gICAgaWYgKCFmcy5zdGF0U3luYyhyb290RGlyZWN0b3J5KS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIHByb3ZpZGVkIHJvb3REaXJlY3RvcnkgJHtyb290RGlyZWN0b3J5fSBpcyBub3QgYSB2YWxpZCBkaXJlY3RvcnlgKTtcbiAgICB9XG4gICAgKDAsIGNvcmVfMS5pbmZvKShgUm9vdCBkaXJlY3RvcnkgaW5wdXQgaXMgdmFsaWQhYCk7XG59XG5leHBvcnRzLnZhbGlkYXRlUm9vdERpcmVjdG9yeSA9IHZhbGlkYXRlUm9vdERpcmVjdG9yeTtcbi8qKlxuICogQ3JlYXRlcyBhIHNwZWNpZmljYXRpb24gdGhhdCBkZXNjcmliZXMgaG93IGEgemlwIGZpbGUgd2lsbCBiZSBjcmVhdGVkIGZvciBhIHNldCBvZiBpbnB1dCBmaWxlc1xuICogQHBhcmFtIGZpbGVzVG9aaXAgYSBsaXN0IG9mIGZpbGUgdGhhdCBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlIHppcFxuICogQHBhcmFtIHJvb3REaXJlY3RvcnkgYW4gYWJzb2x1dGUgcm9vdCBkaXJlY3RvcnkgcGF0aCBjb21tb24gdG8gYWxsIGlucHV0IGZpbGVzIHRoYXQgdGhhdCB3aWxsIGJlIHRyaW1tZWQgZnJvbSB0aGUgZmluYWwgemlwIHN0cnVjdHVyZVxuICovXG5mdW5jdGlvbiBnZXRVcGxvYWRaaXBTcGVjaWZpY2F0aW9uKGZpbGVzVG9aaXAsIHJvb3REaXJlY3RvcnkpIHtcbiAgICBjb25zdCBzcGVjaWZpY2F0aW9uID0gW107XG4gICAgLy8gTm9ybWFsaXplIGFuZCByZXNvbHZlLCB0aGlzIGFsbG93cyBmb3IgZWl0aGVyIGFic29sdXRlIG9yIHJlbGF0aXZlIHBhdGhzIHRvIGJlIHVzZWRcbiAgICByb290RGlyZWN0b3J5ID0gKDAsIHBhdGhfMS5ub3JtYWxpemUpKHJvb3REaXJlY3RvcnkpO1xuICAgIHJvb3REaXJlY3RvcnkgPSAoMCwgcGF0aF8xLnJlc29sdmUpKHJvb3REaXJlY3RvcnkpO1xuICAgIC8qXG4gICAgICAgRXhhbXBsZVxuICAgICAgIFxuICAgICAgIElucHV0OlxuICAgICAgICAgcm9vdERpcmVjdG9yeTogJy9ob21lL3VzZXIvZmlsZXMvcGx6LXVwbG9hZCdcbiAgICAgICAgIGFydGlmYWN0RmlsZXM6IFtcbiAgICAgICAgICAgJy9ob21lL3VzZXIvZmlsZXMvcGx6LXVwbG9hZC9maWxlMS50eHQnLFxuICAgICAgICAgICAnL2hvbWUvdXNlci9maWxlcy9wbHotdXBsb2FkL2ZpbGUyLnR4dCcsXG4gICAgICAgICAgICcvaG9tZS91c2VyL2ZpbGVzL3Bsei11cGxvYWQvZGlyL2ZpbGUzLnR4dCdcbiAgICAgICAgIF1cbiAgICAgICBcbiAgICAgICBPdXRwdXQ6XG4gICAgICAgICBzcGVjaWZpY2F0aW9uczogW1xuICAgICAgICAgICBbJy9ob21lL3VzZXIvZmlsZXMvcGx6LXVwbG9hZC9maWxlMS50eHQnLCAnL2ZpbGUxLnR4dCddLFxuICAgICAgICAgICBbJy9ob21lL3VzZXIvZmlsZXMvcGx6LXVwbG9hZC9maWxlMS50eHQnLCAnL2ZpbGUyLnR4dCddLFxuICAgICAgICAgICBbJy9ob21lL3VzZXIvZmlsZXMvcGx6LXVwbG9hZC9maWxlMS50eHQnLCAnL2Rpci9maWxlMy50eHQnXVxuICAgICAgICAgXVxuICBcbiAgICAgICAgVGhlIGZpbmFsIHppcCB0aGF0IGlzIGxhdGVyIHVwbG9hZGVkIHdpbGwgbG9vayBsaWtlIHRoaXM6XG4gIFxuICAgICAgICBteS1hcnRpZmFjdC56aXBcbiAgICAgICAgICAtIGZpbGUudHh0XG4gICAgICAgICAgLSBmaWxlMi50eHRcbiAgICAgICAgICAtIGRpci9cbiAgICAgICAgICAgIC0gZmlsZTMudHh0XG4gICAgKi9cbiAgICBmb3IgKGxldCBmaWxlIG9mIGZpbGVzVG9aaXApIHtcbiAgICAgICAgY29uc3Qgc3RhdHMgPSBmcy5sc3RhdFN5bmMoZmlsZSwgeyB0aHJvd0lmTm9FbnRyeTogZmFsc2UgfSk7XG4gICAgICAgIGlmICghc3RhdHMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmlsZSAke2ZpbGV9IGRvZXMgbm90IGV4aXN0YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgICAgICAvLyBOb3JtYWxpemUgYW5kIHJlc29sdmUsIHRoaXMgYWxsb3dzIGZvciBlaXRoZXIgYWJzb2x1dGUgb3IgcmVsYXRpdmUgcGF0aHMgdG8gYmUgdXNlZFxuICAgICAgICAgICAgZmlsZSA9ICgwLCBwYXRoXzEubm9ybWFsaXplKShmaWxlKTtcbiAgICAgICAgICAgIGZpbGUgPSAoMCwgcGF0aF8xLnJlc29sdmUpKGZpbGUpO1xuICAgICAgICAgICAgaWYgKCFmaWxlLnN0YXJ0c1dpdGgocm9vdERpcmVjdG9yeSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSByb290RGlyZWN0b3J5OiAke3Jvb3REaXJlY3Rvcnl9IGlzIG5vdCBhIHBhcmVudCBkaXJlY3Rvcnkgb2YgdGhlIGZpbGU6ICR7ZmlsZX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIENoZWNrIGZvciBmb3JiaWRkZW4gY2hhcmFjdGVycyBpbiBmaWxlIHBhdGhzIHRoYXQgbWF5IGNhdXNlIGFtYmlndW91cyBiZWhhdmlvciBpZiBkb3dubG9hZGVkIG9uIGRpZmZlcmVudCBmaWxlIHN5c3RlbXNcbiAgICAgICAgICAgIGNvbnN0IHVwbG9hZFBhdGggPSBmaWxlLnJlcGxhY2Uocm9vdERpcmVjdG9yeSwgJycpO1xuICAgICAgICAgICAgKDAsIHBhdGhfYW5kX2FydGlmYWN0X25hbWVfdmFsaWRhdGlvbl8xLnZhbGlkYXRlRmlsZVBhdGgpKHVwbG9hZFBhdGgpO1xuICAgICAgICAgICAgc3BlY2lmaWNhdGlvbi5wdXNoKHtcbiAgICAgICAgICAgICAgICBzb3VyY2VQYXRoOiBmaWxlLFxuICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uUGF0aDogdXBsb2FkUGF0aCxcbiAgICAgICAgICAgICAgICBzdGF0c1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBFbXB0eSBkaXJlY3RvcnlcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdG9yeVBhdGggPSBmaWxlLnJlcGxhY2Uocm9vdERpcmVjdG9yeSwgJycpO1xuICAgICAgICAgICAgKDAsIHBhdGhfYW5kX2FydGlmYWN0X25hbWVfdmFsaWRhdGlvbl8xLnZhbGlkYXRlRmlsZVBhdGgpKGRpcmVjdG9yeVBhdGgpO1xuICAgICAgICAgICAgc3BlY2lmaWNhdGlvbi5wdXNoKHtcbiAgICAgICAgICAgICAgICBzb3VyY2VQYXRoOiBudWxsLFxuICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uUGF0aDogZGlyZWN0b3J5UGF0aCxcbiAgICAgICAgICAgICAgICBzdGF0c1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHNwZWNpZmljYXRpb247XG59XG5leHBvcnRzLmdldFVwbG9hZFppcFNwZWNpZmljYXRpb24gPSBnZXRVcGxvYWRaaXBTcGVjaWZpY2F0aW9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXBsb2FkLXppcC1zcGVjaWZpY2F0aW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZShlKXt0aGlzLm1lc3NhZ2U9ZX1lLnByb3RvdHlwZT1uZXcgRXJyb3IsZS5wcm90b3R5cGUubmFtZT1cIkludmFsaWRDaGFyYWN0ZXJFcnJvclwiO3ZhciByPVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvdy5hdG9iJiZ3aW5kb3cuYXRvYi5iaW5kKHdpbmRvdyl8fGZ1bmN0aW9uKHIpe3ZhciB0PVN0cmluZyhyKS5yZXBsYWNlKC89KyQvLFwiXCIpO2lmKHQubGVuZ3RoJTQ9PTEpdGhyb3cgbmV3IGUoXCInYXRvYicgZmFpbGVkOiBUaGUgc3RyaW5nIHRvIGJlIGRlY29kZWQgaXMgbm90IGNvcnJlY3RseSBlbmNvZGVkLlwiKTtmb3IodmFyIG4sbyxhPTAsaT0wLGM9XCJcIjtvPXQuY2hhckF0KGkrKyk7fm8mJihuPWElND82NCpuK286byxhKyslNCk/Yys9U3RyaW5nLmZyb21DaGFyQ29kZSgyNTUmbj4+KC0yKmEmNikpOjApbz1cIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89XCIuaW5kZXhPZihvKTtyZXR1cm4gY307ZnVuY3Rpb24gdChlKXt2YXIgdD1lLnJlcGxhY2UoLy0vZyxcIitcIikucmVwbGFjZSgvXy9nLFwiL1wiKTtzd2l0Y2godC5sZW5ndGglNCl7Y2FzZSAwOmJyZWFrO2Nhc2UgMjp0Kz1cIj09XCI7YnJlYWs7Y2FzZSAzOnQrPVwiPVwiO2JyZWFrO2RlZmF1bHQ6dGhyb3dcIklsbGVnYWwgYmFzZTY0dXJsIHN0cmluZyFcIn10cnl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQocihlKS5yZXBsYWNlKC8oLikvZywoZnVuY3Rpb24oZSxyKXt2YXIgdD1yLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7cmV0dXJuIHQubGVuZ3RoPDImJih0PVwiMFwiK3QpLFwiJVwiK3R9KSkpfSh0KX1jYXRjaChlKXtyZXR1cm4gcih0KX19ZnVuY3Rpb24gbihlKXt0aGlzLm1lc3NhZ2U9ZX1mdW5jdGlvbiBvKGUscil7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGUpdGhyb3cgbmV3IG4oXCJJbnZhbGlkIHRva2VuIHNwZWNpZmllZFwiKTt2YXIgbz0hMD09PShyPXJ8fHt9KS5oZWFkZXI/MDoxO3RyeXtyZXR1cm4gSlNPTi5wYXJzZSh0KGUuc3BsaXQoXCIuXCIpW29dKSl9Y2F0Y2goZSl7dGhyb3cgbmV3IG4oXCJJbnZhbGlkIHRva2VuIHNwZWNpZmllZDogXCIrZS5tZXNzYWdlKX19bi5wcm90b3R5cGU9bmV3IEVycm9yLG4ucHJvdG90eXBlLm5hbWU9XCJJbnZhbGlkVG9rZW5FcnJvclwiO2NvbnN0IGE9bzthLmRlZmF1bHQ9byxhLkludmFsaWRUb2tlbkVycm9yPW4sbW9kdWxlLmV4cG9ydHM9YTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWp3dC1kZWNvZGUuY2pzLmpzLm1hcFxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRCYWNrZW5kSWRzRnJvbVRva2VuID0gdm9pZCAwO1xuY29uc3QgY29yZSA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiQGFjdGlvbnMvY29yZVwiKSk7XG5jb25zdCBjb25maWdfMSA9IHJlcXVpcmUoXCIuL2NvbmZpZ1wiKTtcbmNvbnN0IGp3dF9kZWNvZGVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiand0LWRlY29kZVwiKSk7XG5jb25zdCBJbnZhbGlkSnd0RXJyb3IgPSBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBnZXQgYmFja2VuZCBJRHM6IFRoZSBwcm92aWRlZCBKV1QgdG9rZW4gaXMgaW52YWxpZCBhbmQvb3IgbWlzc2luZyBjbGFpbXMnKTtcbi8vIHVzZXMgdGhlIEpXVCB0b2tlbiBjbGFpbXMgdG8gZ2V0IHRoZVxuLy8gd29ya2Zsb3cgcnVuIGFuZCB3b3JrZmxvdyBqb2IgcnVuIGJhY2tlbmQgaWRzXG5mdW5jdGlvbiBnZXRCYWNrZW5kSWRzRnJvbVRva2VuKCkge1xuICAgIGNvbnN0IHRva2VuID0gKDAsIGNvbmZpZ18xLmdldFJ1bnRpbWVUb2tlbikoKTtcbiAgICBjb25zdCBkZWNvZGVkID0gKDAsIGp3dF9kZWNvZGVfMS5kZWZhdWx0KSh0b2tlbik7XG4gICAgaWYgKCFkZWNvZGVkLnNjcCkge1xuICAgICAgICB0aHJvdyBJbnZhbGlkSnd0RXJyb3I7XG4gICAgfVxuICAgIC8qXG4gICAgICogZXhhbXBsZSBkZWNvZGVkOlxuICAgICAqIHtcbiAgICAgKiAgIHNjcDogXCJBY3Rpb25zLkV4YW1wbGVTY29wZSBBY3Rpb25zLlJlc3VsdHM6Y2U3ZjU0YzctNjFjNy00YWFlLTg4N2YtMzBkYTQ3NWY1ZjFhOmNhMzk1MDg1LTA0MGEtNTI2Yi0yY2U4LWJkYzg1ZjY5Mjc3NFwiXG4gICAgICogfVxuICAgICAqL1xuICAgIGNvbnN0IHNjcFBhcnRzID0gZGVjb2RlZC5zY3Auc3BsaXQoJyAnKTtcbiAgICBpZiAoc2NwUGFydHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRocm93IEludmFsaWRKd3RFcnJvcjtcbiAgICB9XG4gICAgLypcbiAgICAgKiBleGFtcGxlIHNjcFBhcnRzOlxuICAgICAqIFtcIkFjdGlvbnMuRXhhbXBsZVNjb3BlXCIsIFwiQWN0aW9ucy5SZXN1bHRzOmNlN2Y1NGM3LTYxYzctNGFhZS04ODdmLTMwZGE0NzVmNWYxYTpjYTM5NTA4NS0wNDBhLTUyNmItMmNlOC1iZGM4NWY2OTI3NzRcIl1cbiAgICAgKi9cbiAgICBmb3IgKGNvbnN0IHNjb3BlcyBvZiBzY3BQYXJ0cykge1xuICAgICAgICBjb25zdCBzY29wZVBhcnRzID0gc2NvcGVzLnNwbGl0KCc6Jyk7XG4gICAgICAgIGlmICgoc2NvcGVQYXJ0cyA9PT0gbnVsbCB8fCBzY29wZVBhcnRzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzY29wZVBhcnRzWzBdKSAhPT0gJ0FjdGlvbnMuUmVzdWx0cycpIHtcbiAgICAgICAgICAgIC8vIG5vdCB0aGUgQWN0aW9ucy5SZXN1bHRzIHNjb3BlXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICAvKlxuICAgICAgICAgKiBleGFtcGxlIHNjb3BlUGFydHM6XG4gICAgICAgICAqIFtcIkFjdGlvbnMuUmVzdWx0c1wiLCBcImNlN2Y1NGM3LTYxYzctNGFhZS04ODdmLTMwZGE0NzVmNWYxYVwiLCBcImNhMzk1MDg1LTA0MGEtNTI2Yi0yY2U4LWJkYzg1ZjY5Mjc3NFwiXVxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKHNjb3BlUGFydHMubGVuZ3RoICE9PSAzKSB7XG4gICAgICAgICAgICAvLyBtaXNzaW5nIGV4cGVjdGVkIG51bWJlciBvZiBjbGFpbXNcbiAgICAgICAgICAgIHRocm93IEludmFsaWRKd3RFcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpZHMgPSB7XG4gICAgICAgICAgICB3b3JrZmxvd1J1bkJhY2tlbmRJZDogc2NvcGVQYXJ0c1sxXSxcbiAgICAgICAgICAgIHdvcmtmbG93Sm9iUnVuQmFja2VuZElkOiBzY29wZVBhcnRzWzJdXG4gICAgICAgIH07XG4gICAgICAgIGNvcmUuZGVidWcoYFdvcmtmbG93IFJ1biBCYWNrZW5kIElEOiAke2lkcy53b3JrZmxvd1J1bkJhY2tlbmRJZH1gKTtcbiAgICAgICAgY29yZS5kZWJ1ZyhgV29ya2Zsb3cgSm9iIFJ1biBCYWNrZW5kIElEOiAke2lkcy53b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZH1gKTtcbiAgICAgICAgcmV0dXJuIGlkcztcbiAgICB9XG4gICAgdGhyb3cgSW52YWxpZEp3dEVycm9yO1xufVxuZXhwb3J0cy5nZXRCYWNrZW5kSWRzRnJvbVRva2VuID0gZ2V0QmFja2VuZElkc0Zyb21Ub2tlbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWwuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jcmVhdGVFbXB0eVBpcGVsaW5lID0gY3JlYXRlRW1wdHlQaXBlbGluZTtcbmNvbnN0IFZhbGlkUGhhc2VOYW1lcyA9IG5ldyBTZXQoW1wiRGVzZXJpYWxpemVcIiwgXCJTZXJpYWxpemVcIiwgXCJSZXRyeVwiLCBcIlNpZ25cIl0pO1xuLyoqXG4gKiBBIHByaXZhdGUgaW1wbGVtZW50YXRpb24gb2YgUGlwZWxpbmUuXG4gKiBEbyBub3QgZXhwb3J0IHRoaXMgY2xhc3MgZnJvbSB0aGUgcGFja2FnZS5cbiAqIEBpbnRlcm5hbFxuICovXG5jbGFzcyBIdHRwUGlwZWxpbmUge1xuICAgIGNvbnN0cnVjdG9yKHBvbGljaWVzKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdGhpcy5fcG9saWNpZXMgPSBbXTtcbiAgICAgICAgdGhpcy5fcG9saWNpZXMgPSAoX2EgPSBwb2xpY2llcyA9PT0gbnVsbCB8fCBwb2xpY2llcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcG9saWNpZXMuc2xpY2UoMCkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFtdO1xuICAgICAgICB0aGlzLl9vcmRlcmVkUG9saWNpZXMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGFkZFBvbGljeShwb2xpY3ksIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBpZiAob3B0aW9ucy5waGFzZSAmJiBvcHRpb25zLmFmdGVyUGhhc2UpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBvbGljaWVzIGluc2lkZSBhIHBoYXNlIGNhbm5vdCBzcGVjaWZ5IGFmdGVyUGhhc2UuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLnBoYXNlICYmICFWYWxpZFBoYXNlTmFtZXMuaGFzKG9wdGlvbnMucGhhc2UpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcGhhc2UgbmFtZTogJHtvcHRpb25zLnBoYXNlfWApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmFmdGVyUGhhc2UgJiYgIVZhbGlkUGhhc2VOYW1lcy5oYXMob3B0aW9ucy5hZnRlclBoYXNlKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGFmdGVyUGhhc2UgbmFtZTogJHtvcHRpb25zLmFmdGVyUGhhc2V9YCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcG9saWNpZXMucHVzaCh7XG4gICAgICAgICAgICBwb2xpY3ksXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fb3JkZXJlZFBvbGljaWVzID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZW1vdmVQb2xpY3kob3B0aW9ucykge1xuICAgICAgICBjb25zdCByZW1vdmVkUG9saWNpZXMgPSBbXTtcbiAgICAgICAgdGhpcy5fcG9saWNpZXMgPSB0aGlzLl9wb2xpY2llcy5maWx0ZXIoKHBvbGljeURlc2NyaXB0b3IpID0+IHtcbiAgICAgICAgICAgIGlmICgob3B0aW9ucy5uYW1lICYmIHBvbGljeURlc2NyaXB0b3IucG9saWN5Lm5hbWUgPT09IG9wdGlvbnMubmFtZSkgfHxcbiAgICAgICAgICAgICAgICAob3B0aW9ucy5waGFzZSAmJiBwb2xpY3lEZXNjcmlwdG9yLm9wdGlvbnMucGhhc2UgPT09IG9wdGlvbnMucGhhc2UpKSB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlZFBvbGljaWVzLnB1c2gocG9saWN5RGVzY3JpcHRvci5wb2xpY3kpO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fb3JkZXJlZFBvbGljaWVzID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gcmVtb3ZlZFBvbGljaWVzO1xuICAgIH1cbiAgICBzZW5kUmVxdWVzdChodHRwQ2xpZW50LCByZXF1ZXN0KSB7XG4gICAgICAgIGNvbnN0IHBvbGljaWVzID0gdGhpcy5nZXRPcmRlcmVkUG9saWNpZXMoKTtcbiAgICAgICAgY29uc3QgcGlwZWxpbmUgPSBwb2xpY2llcy5yZWR1Y2VSaWdodCgobmV4dCwgcG9saWN5KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gKHJlcSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBwb2xpY3kuc2VuZFJlcXVlc3QocmVxLCBuZXh0KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sIChyZXEpID0+IGh0dHBDbGllbnQuc2VuZFJlcXVlc3QocmVxKSk7XG4gICAgICAgIHJldHVybiBwaXBlbGluZShyZXF1ZXN0KTtcbiAgICB9XG4gICAgZ2V0T3JkZXJlZFBvbGljaWVzKCkge1xuICAgICAgICBpZiAoIXRoaXMuX29yZGVyZWRQb2xpY2llcykge1xuICAgICAgICAgICAgdGhpcy5fb3JkZXJlZFBvbGljaWVzID0gdGhpcy5vcmRlclBvbGljaWVzKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX29yZGVyZWRQb2xpY2llcztcbiAgICB9XG4gICAgY2xvbmUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgSHR0cFBpcGVsaW5lKHRoaXMuX3BvbGljaWVzKTtcbiAgICB9XG4gICAgc3RhdGljIGNyZWF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBIdHRwUGlwZWxpbmUoKTtcbiAgICB9XG4gICAgb3JkZXJQb2xpY2llcygpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBnb2FsIG9mIHRoaXMgbWV0aG9kIGlzIHRvIHJlbGlhYmx5IG9yZGVyIHBpcGVsaW5lIHBvbGljaWVzXG4gICAgICAgICAqIGJhc2VkIG9uIHRoZWlyIGRlY2xhcmVkIHJlcXVpcmVtZW50cyB3aGVuIHRoZXkgd2VyZSBhZGRlZC5cbiAgICAgICAgICpcbiAgICAgICAgICogT3JkZXIgaXMgZmlyc3QgZGV0ZXJtaW5lZCBieSBwaGFzZTpcbiAgICAgICAgICpcbiAgICAgICAgICogMS4gU2VyaWFsaXplIFBoYXNlXG4gICAgICAgICAqIDIuIFBvbGljaWVzIG5vdCBpbiBhIHBoYXNlXG4gICAgICAgICAqIDMuIERlc2VyaWFsaXplIFBoYXNlXG4gICAgICAgICAqIDQuIFJldHJ5IFBoYXNlXG4gICAgICAgICAqIDUuIFNpZ24gUGhhc2VcbiAgICAgICAgICpcbiAgICAgICAgICogV2l0aGluIGVhY2ggcGhhc2UsIHBvbGljaWVzIGFyZSBleGVjdXRlZCBpbiB0aGUgb3JkZXJcbiAgICAgICAgICogdGhleSB3ZXJlIGFkZGVkIHVubGVzcyB0aGV5IHdlcmUgc3BlY2lmaWVkIHRvIGV4ZWN1dGVcbiAgICAgICAgICogYmVmb3JlL2FmdGVyIG90aGVyIHBvbGljaWVzIG9yIGFmdGVyIGEgcGFydGljdWxhciBwaGFzZS5cbiAgICAgICAgICpcbiAgICAgICAgICogVG8gZGV0ZXJtaW5lIHRoZSBmaW5hbCBvcmRlciwgd2Ugd2lsbCB3YWxrIHRoZSBwb2xpY3kgbGlzdFxuICAgICAgICAgKiBpbiBwaGFzZSBvcmRlciBtdWx0aXBsZSB0aW1lcyB1bnRpbCBhbGwgZGVwZW5kZW5jaWVzIGFyZVxuICAgICAgICAgKiBzYXRpc2ZpZWQuXG4gICAgICAgICAqXG4gICAgICAgICAqIGBhZnRlclBvbGljaWVzYCBhcmUgdGhlIHNldCBvZiBwb2xpY2llcyB0aGF0IG11c3QgYmVcbiAgICAgICAgICogZXhlY3V0ZWQgYmVmb3JlIGEgZ2l2ZW4gcG9saWN5LiBUaGlzIHJlcXVpcmVtZW50IGlzXG4gICAgICAgICAqIGNvbnNpZGVyZWQgc2F0aXNmaWVkIHdoZW4gZWFjaCBvZiB0aGUgbGlzdGVkIHBvbGljaWVzXG4gICAgICAgICAqIGhhdmUgYmVlbiBzY2hlZHVsZWQuXG4gICAgICAgICAqXG4gICAgICAgICAqIGBiZWZvcmVQb2xpY2llc2AgYXJlIHRoZSBzZXQgb2YgcG9saWNpZXMgdGhhdCBtdXN0IGJlXG4gICAgICAgICAqIGV4ZWN1dGVkIGFmdGVyIGEgZ2l2ZW4gcG9saWN5LiBTaW5jZSB0aGlzIGRlcGVuZGVuY3lcbiAgICAgICAgICogY2FuIGJlIGV4cHJlc3NlZCBieSBjb252ZXJ0aW5nIGl0IGludG8gYSBlcXVpdmFsZW50XG4gICAgICAgICAqIGBhZnRlclBvbGljaWVzYCBkZWNsYXJhdGlvbnMsIHRoZXkgYXJlIG5vcm1hbGl6ZWRcbiAgICAgICAgICogaW50byB0aGF0IGZvcm0gZm9yIHNpbXBsaWNpdHkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEFuIGBhZnRlclBoYXNlYCBkZXBlbmRlbmN5IGlzIGNvbnNpZGVyZWQgc2F0aXNmaWVkIHdoZW4gYWxsXG4gICAgICAgICAqIHBvbGljaWVzIGluIHRoYXQgcGhhc2UgaGF2ZSBzY2hlZHVsZWQuXG4gICAgICAgICAqXG4gICAgICAgICAqL1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgLy8gVHJhY2sgYWxsIHBvbGljaWVzIHdlIGtub3cgYWJvdXQuXG4gICAgICAgIGNvbnN0IHBvbGljeU1hcCA9IG5ldyBNYXAoKTtcbiAgICAgICAgZnVuY3Rpb24gY3JlYXRlUGhhc2UobmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgIHBvbGljaWVzOiBuZXcgU2V0KCksXG4gICAgICAgICAgICAgICAgaGFzUnVuOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBoYXNBZnRlclBvbGljaWVzOiBmYWxzZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgLy8gVHJhY2sgcG9saWNpZXMgZm9yIGVhY2ggcGhhc2UuXG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZVBoYXNlID0gY3JlYXRlUGhhc2UoXCJTZXJpYWxpemVcIik7XG4gICAgICAgIGNvbnN0IG5vUGhhc2UgPSBjcmVhdGVQaGFzZShcIk5vbmVcIik7XG4gICAgICAgIGNvbnN0IGRlc2VyaWFsaXplUGhhc2UgPSBjcmVhdGVQaGFzZShcIkRlc2VyaWFsaXplXCIpO1xuICAgICAgICBjb25zdCByZXRyeVBoYXNlID0gY3JlYXRlUGhhc2UoXCJSZXRyeVwiKTtcbiAgICAgICAgY29uc3Qgc2lnblBoYXNlID0gY3JlYXRlUGhhc2UoXCJTaWduXCIpO1xuICAgICAgICAvLyBhIGxpc3Qgb2YgcGhhc2VzIGluIG9yZGVyXG4gICAgICAgIGNvbnN0IG9yZGVyZWRQaGFzZXMgPSBbc2VyaWFsaXplUGhhc2UsIG5vUGhhc2UsIGRlc2VyaWFsaXplUGhhc2UsIHJldHJ5UGhhc2UsIHNpZ25QaGFzZV07XG4gICAgICAgIC8vIFNtYWxsIGhlbHBlciBmdW5jdGlvbiB0byBtYXAgcGhhc2UgbmFtZSB0byBlYWNoIFBoYXNlXG4gICAgICAgIGZ1bmN0aW9uIGdldFBoYXNlKHBoYXNlKSB7XG4gICAgICAgICAgICBpZiAocGhhc2UgPT09IFwiUmV0cnlcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXRyeVBoYXNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAocGhhc2UgPT09IFwiU2VyaWFsaXplXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VyaWFsaXplUGhhc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChwaGFzZSA9PT0gXCJEZXNlcmlhbGl6ZVwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlc2VyaWFsaXplUGhhc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChwaGFzZSA9PT0gXCJTaWduXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2lnblBoYXNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vUGhhc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gRmlyc3Qgd2FsayBlYWNoIHBvbGljeSBhbmQgY3JlYXRlIGEgbm9kZSB0byB0cmFjayBtZXRhZGF0YS5cbiAgICAgICAgZm9yIChjb25zdCBkZXNjcmlwdG9yIG9mIHRoaXMuX3BvbGljaWVzKSB7XG4gICAgICAgICAgICBjb25zdCBwb2xpY3kgPSBkZXNjcmlwdG9yLnBvbGljeTtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSBkZXNjcmlwdG9yLm9wdGlvbnM7XG4gICAgICAgICAgICBjb25zdCBwb2xpY3lOYW1lID0gcG9saWN5Lm5hbWU7XG4gICAgICAgICAgICBpZiAocG9saWN5TWFwLmhhcyhwb2xpY3lOYW1lKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkR1cGxpY2F0ZSBwb2xpY3kgbmFtZXMgbm90IGFsbG93ZWQgaW4gcGlwZWxpbmVcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBub2RlID0ge1xuICAgICAgICAgICAgICAgIHBvbGljeSxcbiAgICAgICAgICAgICAgICBkZXBlbmRzT246IG5ldyBTZXQoKSxcbiAgICAgICAgICAgICAgICBkZXBlbmRhbnRzOiBuZXcgU2V0KCksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuYWZ0ZXJQaGFzZSkge1xuICAgICAgICAgICAgICAgIG5vZGUuYWZ0ZXJQaGFzZSA9IGdldFBoYXNlKG9wdGlvbnMuYWZ0ZXJQaGFzZSk7XG4gICAgICAgICAgICAgICAgbm9kZS5hZnRlclBoYXNlLmhhc0FmdGVyUG9saWNpZXMgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcG9saWN5TWFwLnNldChwb2xpY3lOYW1lLCBub2RlKTtcbiAgICAgICAgICAgIGNvbnN0IHBoYXNlID0gZ2V0UGhhc2Uob3B0aW9ucy5waGFzZSk7XG4gICAgICAgICAgICBwaGFzZS5wb2xpY2llcy5hZGQobm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gTm93IHRoYXQgZWFjaCBwb2xpY3kgaGFzIGEgbm9kZSwgY29ubmVjdCBkZXBlbmRlbmN5IHJlZmVyZW5jZXMuXG4gICAgICAgIGZvciAoY29uc3QgZGVzY3JpcHRvciBvZiB0aGlzLl9wb2xpY2llcykge1xuICAgICAgICAgICAgY29uc3QgeyBwb2xpY3ksIG9wdGlvbnMgfSA9IGRlc2NyaXB0b3I7XG4gICAgICAgICAgICBjb25zdCBwb2xpY3lOYW1lID0gcG9saWN5Lm5hbWU7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gcG9saWN5TWFwLmdldChwb2xpY3lOYW1lKTtcbiAgICAgICAgICAgIGlmICghbm9kZSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBub2RlIGZvciBwb2xpY3kgJHtwb2xpY3lOYW1lfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuYWZ0ZXJQb2xpY2llcykge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYWZ0ZXJQb2xpY3lOYW1lIG9mIG9wdGlvbnMuYWZ0ZXJQb2xpY2llcykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhZnRlck5vZGUgPSBwb2xpY3lNYXAuZ2V0KGFmdGVyUG9saWN5TmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhZnRlck5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIExpbmtpbmcgaW4gYm90aCBkaXJlY3Rpb25zIGhlbHBzIGxhdGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB3aGVuIHdlIHdhbnQgdG8gbm90aWZ5IGRlcGVuZGFudHMuXG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLmRlcGVuZHNPbi5hZGQoYWZ0ZXJOb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyTm9kZS5kZXBlbmRhbnRzLmFkZChub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHRpb25zLmJlZm9yZVBvbGljaWVzKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBiZWZvcmVQb2xpY3lOYW1lIG9mIG9wdGlvbnMuYmVmb3JlUG9saWNpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYmVmb3JlTm9kZSA9IHBvbGljeU1hcC5nZXQoYmVmb3JlUG9saWN5TmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChiZWZvcmVOb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUbyBleGVjdXRlIGJlZm9yZSBhbm90aGVyIG5vZGUsIG1ha2UgaXRcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlcGVuZCBvbiB0aGUgY3VycmVudCBub2RlLlxuICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlTm9kZS5kZXBlbmRzT24uYWRkKG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5kZXBlbmRhbnRzLmFkZChiZWZvcmVOb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB3YWxrUGhhc2UocGhhc2UpIHtcbiAgICAgICAgICAgIHBoYXNlLmhhc1J1biA9IHRydWU7XG4gICAgICAgICAgICAvLyBTZXRzIGl0ZXJhdGUgaW4gaW5zZXJ0aW9uIG9yZGVyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG5vZGUgb2YgcGhhc2UucG9saWNpZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAobm9kZS5hZnRlclBoYXNlICYmICghbm9kZS5hZnRlclBoYXNlLmhhc1J1biB8fCBub2RlLmFmdGVyUGhhc2UucG9saWNpZXMuc2l6ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBub2RlIGlzIHdhaXRpbmcgb24gYSBwaGFzZSB0byBjb21wbGV0ZSxcbiAgICAgICAgICAgICAgICAgICAgLy8gd2UgbmVlZCB0byBza2lwIGl0IGZvciBub3cuXG4gICAgICAgICAgICAgICAgICAgIC8vIEV2ZW4gaWYgdGhlIHBoYXNlIGlzIGVtcHR5LCB3ZSBzaG91bGQgd2FpdCBmb3IgaXRcbiAgICAgICAgICAgICAgICAgICAgLy8gdG8gYmUgd2Fsa2VkIHRvIGF2b2lkIHJlLW9yZGVyaW5nIHBvbGljaWVzLlxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG5vZGUuZGVwZW5kc09uLnNpemUgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUncyBub3RoaW5nIGVsc2Ugd2UncmUgd2FpdGluZyBmb3IsIHdlIGNhblxuICAgICAgICAgICAgICAgICAgICAvLyBhZGQgdGhpcyBwb2xpY3kgdG8gdGhlIHJlc3VsdCBsaXN0LlxuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChub2RlLnBvbGljeSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIE5vdGlmeSBhbnl0aGluZyB0aGF0IGRlcGVuZHMgb24gdGhpcyBwb2xpY3kgdGhhdFxuICAgICAgICAgICAgICAgICAgICAvLyB0aGUgcG9saWN5IGhhcyBiZWVuIHNjaGVkdWxlZC5cbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBkZXBlbmRhbnQgb2Ygbm9kZS5kZXBlbmRhbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRhbnQuZGVwZW5kc09uLmRlbGV0ZShub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBwb2xpY3lNYXAuZGVsZXRlKG5vZGUucG9saWN5Lm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBwaGFzZS5wb2xpY2llcy5kZWxldGUobm9kZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHdhbGtQaGFzZXMoKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBoYXNlIG9mIG9yZGVyZWRQaGFzZXMpIHtcbiAgICAgICAgICAgICAgICB3YWxrUGhhc2UocGhhc2UpO1xuICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBwaGFzZSBpc24ndCBjb21wbGV0ZVxuICAgICAgICAgICAgICAgIGlmIChwaGFzZS5wb2xpY2llcy5zaXplID4gMCAmJiBwaGFzZSAhPT0gbm9QaGFzZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIW5vUGhhc2UuaGFzUnVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUcnkgcnVubmluZyBub1BoYXNlIHRvIHNlZSBpZiB0aGF0IHVuYmxvY2tzIHRoaXMgcGhhc2UgbmV4dCB0aWNrLlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBjYW4gaGFwcGVuIGlmIGEgcGhhc2UgdGhhdCBoYXBwZW5zIGJlZm9yZSBub1BoYXNlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpcyB3YWl0aW5nIG9uIGEgbm9QaGFzZSBwb2xpY3kgdG8gY29tcGxldGUuXG4gICAgICAgICAgICAgICAgICAgICAgICB3YWxrUGhhc2Uobm9QaGFzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgcHJvY2VlZCB0byB0aGUgbmV4dCBwaGFzZSB1bnRpbCB0aGlzIHBoYXNlIGZpbmlzaGVzLlxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwaGFzZS5oYXNBZnRlclBvbGljaWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFJ1biBhbnkgcG9saWNpZXMgdW5ibG9ja2VkIGJ5IHRoaXMgcGhhc2VcbiAgICAgICAgICAgICAgICAgICAgd2Fsa1BoYXNlKG5vUGhhc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBJdGVyYXRlIHVudGlsIHdlJ3ZlIHB1dCBldmVyeSBub2RlIGluIHRoZSByZXN1bHQgbGlzdC5cbiAgICAgICAgbGV0IGl0ZXJhdGlvbiA9IDA7XG4gICAgICAgIHdoaWxlIChwb2xpY3lNYXAuc2l6ZSA+IDApIHtcbiAgICAgICAgICAgIGl0ZXJhdGlvbisrO1xuICAgICAgICAgICAgY29uc3QgaW5pdGlhbFJlc3VsdExlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XG4gICAgICAgICAgICAvLyBLZWVwIHdhbGtpbmcgZWFjaCBwaGFzZSBpbiBvcmRlciB1bnRpbCB3ZSBjYW4gb3JkZXIgZXZlcnkgbm9kZS5cbiAgICAgICAgICAgIHdhbGtQaGFzZXMoKTtcbiAgICAgICAgICAgIC8vIFRoZSByZXN1bHQgbGlzdCAqc2hvdWxkKiBnZXQgYXQgbGVhc3Qgb25lIGxhcmdlciBlYWNoIHRpbWVcbiAgICAgICAgICAgIC8vIGFmdGVyIHRoZSBmaXJzdCBmdWxsIHBhc3MuXG4gICAgICAgICAgICAvLyBPdGhlcndpc2UsIHdlJ3JlIGdvaW5nIHRvIGxvb3AgZm9yZXZlci5cbiAgICAgICAgICAgIGlmIChyZXN1bHQubGVuZ3RoIDw9IGluaXRpYWxSZXN1bHRMZW5ndGggJiYgaXRlcmF0aW9uID4gMSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBzYXRpc2Z5IHBvbGljeSBkZXBlbmRlbmNpZXMgZHVlIHRvIHJlcXVpcmVtZW50cyBjeWNsZS5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vKipcbiAqIENyZWF0ZXMgYSB0b3RhbGx5IGVtcHR5IHBpcGVsaW5lLlxuICogVXNlZnVsIGZvciB0ZXN0aW5nIG9yIGNyZWF0aW5nIGEgY3VzdG9tIG9uZS5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRW1wdHlQaXBlbGluZSgpIHtcbiAgICByZXR1cm4gSHR0cFBpcGVsaW5lLmNyZWF0ZSgpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGlwZWxpbmUuanMubWFwIiwKICAgICIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxyXG5cclxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XHJcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cclxuXHJcblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcclxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXHJcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcclxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXHJcbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXHJcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcclxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuLyogZ2xvYmFsIGdsb2JhbCwgZGVmaW5lLCBTeW1ib2wsIFJlZmxlY3QsIFByb21pc2UsIFN1cHByZXNzZWRFcnJvciwgSXRlcmF0b3IgKi9cclxudmFyIF9fZXh0ZW5kcztcclxudmFyIF9fYXNzaWduO1xyXG52YXIgX19yZXN0O1xyXG52YXIgX19kZWNvcmF0ZTtcclxudmFyIF9fcGFyYW07XHJcbnZhciBfX2VzRGVjb3JhdGU7XHJcbnZhciBfX3J1bkluaXRpYWxpemVycztcclxudmFyIF9fcHJvcEtleTtcclxudmFyIF9fc2V0RnVuY3Rpb25OYW1lO1xyXG52YXIgX19tZXRhZGF0YTtcclxudmFyIF9fYXdhaXRlcjtcclxudmFyIF9fZ2VuZXJhdG9yO1xyXG52YXIgX19leHBvcnRTdGFyO1xyXG52YXIgX192YWx1ZXM7XHJcbnZhciBfX3JlYWQ7XHJcbnZhciBfX3NwcmVhZDtcclxudmFyIF9fc3ByZWFkQXJyYXlzO1xyXG52YXIgX19zcHJlYWRBcnJheTtcclxudmFyIF9fYXdhaXQ7XHJcbnZhciBfX2FzeW5jR2VuZXJhdG9yO1xyXG52YXIgX19hc3luY0RlbGVnYXRvcjtcclxudmFyIF9fYXN5bmNWYWx1ZXM7XHJcbnZhciBfX21ha2VUZW1wbGF0ZU9iamVjdDtcclxudmFyIF9faW1wb3J0U3RhcjtcclxudmFyIF9faW1wb3J0RGVmYXVsdDtcclxudmFyIF9fY2xhc3NQcml2YXRlRmllbGRHZXQ7XHJcbnZhciBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0O1xyXG52YXIgX19jbGFzc1ByaXZhdGVGaWVsZEluO1xyXG52YXIgX19jcmVhdGVCaW5kaW5nO1xyXG52YXIgX19hZGREaXNwb3NhYmxlUmVzb3VyY2U7XHJcbnZhciBfX2Rpc3Bvc2VSZXNvdXJjZXM7XHJcbnZhciBfX3Jld3JpdGVSZWxhdGl2ZUltcG9ydEV4dGVuc2lvbjtcclxuKGZ1bmN0aW9uIChmYWN0b3J5KSB7XHJcbiAgICB2YXIgcm9vdCA9IHR5cGVvZiBnbG9iYWwgPT09IFwib2JqZWN0XCIgPyBnbG9iYWwgOiB0eXBlb2Ygc2VsZiA9PT0gXCJvYmplY3RcIiA/IHNlbGYgOiB0eXBlb2YgdGhpcyA9PT0gXCJvYmplY3RcIiA/IHRoaXMgOiB7fTtcclxuICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xyXG4gICAgICAgIGRlZmluZShcInRzbGliXCIsIFtcImV4cG9ydHNcIl0sIGZ1bmN0aW9uIChleHBvcnRzKSB7IGZhY3RvcnkoY3JlYXRlRXhwb3J0ZXIocm9vdCwgY3JlYXRlRXhwb3J0ZXIoZXhwb3J0cykpKTsgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUuZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgIGZhY3RvcnkoY3JlYXRlRXhwb3J0ZXIocm9vdCwgY3JlYXRlRXhwb3J0ZXIobW9kdWxlLmV4cG9ydHMpKSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBmYWN0b3J5KGNyZWF0ZUV4cG9ydGVyKHJvb3QpKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGNyZWF0ZUV4cG9ydGVyKGV4cG9ydHMsIHByZXZpb3VzKSB7XHJcbiAgICAgICAgaWYgKGV4cG9ydHMgIT09IHJvb3QpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChpZCwgdikgeyByZXR1cm4gZXhwb3J0c1tpZF0gPSBwcmV2aW91cyA/IHByZXZpb3VzKGlkLCB2KSA6IHY7IH07XHJcbiAgICB9XHJcbn0pXHJcbihmdW5jdGlvbiAoZXhwb3J0ZXIpIHtcclxuICAgIHZhciBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XHJcbiAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxyXG4gICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XHJcblxyXG4gICAgX19leHRlbmRzID0gZnVuY3Rpb24gKGQsIGIpIHtcclxuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XHJcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cclxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodCkge1xyXG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH07XHJcblxyXG4gICAgX19yZXN0ID0gZnVuY3Rpb24gKHMsIGUpIHtcclxuICAgICAgICB2YXIgdCA9IHt9O1xyXG4gICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxyXG4gICAgICAgICAgICB0W3BdID0gc1twXTtcclxuICAgICAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcclxuICAgICAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2RlY29yYXRlID0gZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XHJcbiAgICAgICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgICAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XHJcbiAgICAgICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxuICAgIH07XHJcblxyXG4gICAgX19wYXJhbSA9IGZ1bmN0aW9uIChwYXJhbUluZGV4LCBkZWNvcmF0b3IpIHtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cclxuICAgIH07XHJcblxyXG4gICAgX19lc0RlY29yYXRlID0gZnVuY3Rpb24gKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7XHJcbiAgICAgICAgZnVuY3Rpb24gYWNjZXB0KGYpIHsgaWYgKGYgIT09IHZvaWQgMCAmJiB0eXBlb2YgZiAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRnVuY3Rpb24gZXhwZWN0ZWRcIik7IHJldHVybiBmOyB9XHJcbiAgICAgICAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5ID0ga2luZCA9PT0gXCJnZXR0ZXJcIiA/IFwiZ2V0XCIgOiBraW5kID09PSBcInNldHRlclwiID8gXCJzZXRcIiA6IFwidmFsdWVcIjtcclxuICAgICAgICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluW1wic3RhdGljXCJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDtcclxuICAgICAgICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTtcclxuICAgICAgICB2YXIgXywgZG9uZSA9IGZhbHNlO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgIHZhciBjb250ZXh0ID0ge307XHJcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gY29udGV4dEluKSBjb250ZXh0W3BdID0gcCA9PT0gXCJhY2Nlc3NcIiA/IHt9IDogY29udGV4dEluW3BdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQuYWNjZXNzW3BdID0gY29udGV4dEluLmFjY2Vzc1twXTtcclxuICAgICAgICAgICAgY29udGV4dC5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uIChmKSB7IGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkXCIpOyBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmIHx8IG51bGwpKTsgfTtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2ldKShraW5kID09PSBcImFjY2Vzc29yXCIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5XSwgY29udGV4dCk7XHJcbiAgICAgICAgICAgIGlmIChraW5kID09PSBcImFjY2Vzc29yXCIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09IFwib2JqZWN0XCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3QgZXhwZWN0ZWRcIik7XHJcbiAgICAgICAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfO1xyXG4gICAgICAgICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXztcclxuICAgICAgICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoXyA9IGFjY2VwdChyZXN1bHQpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoa2luZCA9PT0gXCJmaWVsZFwiKSBpbml0aWFsaXplcnMudW5zaGlmdChfKTtcclxuICAgICAgICAgICAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXldID0gXztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7XHJcbiAgICAgICAgZG9uZSA9IHRydWU7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fcnVuSW5pdGlhbGl6ZXJzID0gZnVuY3Rpb24gKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUpIHtcclxuICAgICAgICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZywgdmFsdWUpIDogaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlIDogdm9pZCAwO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX3Byb3BLZXkgPSBmdW5jdGlvbiAoeCkge1xyXG4gICAgICAgIHJldHVybiB0eXBlb2YgeCA9PT0gXCJzeW1ib2xcIiA/IHggOiBcIlwiLmNvbmNhdCh4KTtcclxuICAgIH07XHJcblxyXG4gICAgX19zZXRGdW5jdGlvbk5hbWUgPSBmdW5jdGlvbiAoZiwgbmFtZSwgcHJlZml4KSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBuYW1lID09PSBcInN5bWJvbFwiKSBuYW1lID0gbmFtZS5kZXNjcmlwdGlvbiA/IFwiW1wiLmNvbmNhdChuYW1lLmRlc2NyaXB0aW9uLCBcIl1cIikgOiBcIlwiO1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZiwgXCJuYW1lXCIsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogcHJlZml4ID8gXCJcIi5jb25jYXQocHJlZml4LCBcIiBcIiwgbmFtZSkgOiBuYW1lIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX21ldGFkYXRhID0gZnVuY3Rpb24gKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKTtcclxuICAgIH07XHJcblxyXG4gICAgX19hd2FpdGVyID0gZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxyXG4gICAgICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxyXG4gICAgICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fZ2VuZXJhdG9yID0gZnVuY3Rpb24gKHRoaXNBcmcsIGJvZHkpIHtcclxuICAgICAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEl0ZXJhdG9yID09PSBcImZ1bmN0aW9uXCIgPyBJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKTtcclxuICAgICAgICByZXR1cm4gZy5uZXh0ID0gdmVyYigwKSwgZ1tcInRocm93XCJdID0gdmVyYigxKSwgZ1tcInJldHVyblwiXSA9IHZlcmIoMiksIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcclxuICAgICAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cclxuICAgICAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XHJcbiAgICAgICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcclxuICAgICAgICAgICAgd2hpbGUgKGcgJiYgKGcgPSAwLCBvcFswXSAmJiAoXyA9IDApKSwgXykgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcclxuICAgICAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XHJcbiAgICAgICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgX19leHBvcnRTdGFyID0gZnVuY3Rpb24obSwgbykge1xyXG4gICAgICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobywgcCkpIF9fY3JlYXRlQmluZGluZyhvLCBtLCBwKTtcclxuICAgIH07XHJcblxyXG4gICAgX19jcmVhdGVCaW5kaW5nID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICAgICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xyXG4gICAgICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XHJcbiAgICAgICAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XHJcbiAgICB9KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICAgICAgb1trMl0gPSBtW2tdO1xyXG4gICAgfSk7XHJcblxyXG4gICAgX192YWx1ZXMgPSBmdW5jdGlvbiAobykge1xyXG4gICAgICAgIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XHJcbiAgICAgICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XHJcbiAgICAgICAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xyXG4gICAgICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fcmVhZCA9IGZ1bmN0aW9uIChvLCBuKSB7XHJcbiAgICAgICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xyXG4gICAgICAgIGlmICghbSkgcmV0dXJuIG87XHJcbiAgICAgICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxyXG4gICAgICAgIGZpbmFsbHkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhcjtcclxuICAgIH07XHJcblxyXG4gICAgLyoqIEBkZXByZWNhdGVkICovXHJcbiAgICBfX3NwcmVhZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBmb3IgKHZhciBhciA9IFtdLCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xyXG4gICAgICAgIHJldHVybiBhcjtcclxuICAgIH07XHJcblxyXG4gICAgLyoqIEBkZXByZWNhdGVkICovXHJcbiAgICBfX3NwcmVhZEFycmF5cyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBmb3IgKHZhciBzID0gMCwgaSA9IDAsIGlsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHMgKz0gYXJndW1lbnRzW2ldLmxlbmd0aDtcclxuICAgICAgICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXHJcbiAgICAgICAgICAgIGZvciAodmFyIGEgPSBhcmd1bWVudHNbaV0sIGogPSAwLCBqbCA9IGEubGVuZ3RoOyBqIDwgamw7IGorKywgaysrKVxyXG4gICAgICAgICAgICAgICAgcltrXSA9IGFbal07XHJcbiAgICAgICAgcmV0dXJuIHI7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fc3ByZWFkQXJyYXkgPSBmdW5jdGlvbiAodG8sIGZyb20sIHBhY2spIHtcclxuICAgICAgICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWFyKSBhciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20sIDAsIGkpO1xyXG4gICAgICAgICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2F3YWl0ID0gZnVuY3Rpb24gKHYpIHtcclxuICAgICAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcclxuICAgIH07XHJcblxyXG4gICAgX19hc3luY0dlbmVyYXRvciA9IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcclxuICAgICAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgICAgIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XHJcbiAgICAgICAgcmV0dXJuIGkgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgQXN5bmNJdGVyYXRvciA9PT0gXCJmdW5jdGlvblwiID8gQXN5bmNJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiLCBhd2FpdFJldHVybiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgICAgICBmdW5jdGlvbiBhd2FpdFJldHVybihmKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZiwgcmVqZWN0KTsgfTsgfVxyXG4gICAgICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpZiAoZ1tuXSkgeyBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyBpZiAoZikgaVtuXSA9IGYoaVtuXSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxyXG4gICAgICAgIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cclxuICAgIH07XHJcblxyXG4gICAgX19hc3luY0RlbGVnYXRvciA9IGZ1bmN0aW9uIChvKSB7XHJcbiAgICAgICAgdmFyIGksIHA7XHJcbiAgICAgICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgICAgICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaVtuXSA9IG9bbl0gPyBmdW5jdGlvbiAodikgeyByZXR1cm4gKHAgPSAhcCkgPyB7IHZhbHVlOiBfX2F3YWl0KG9bbl0odikpLCBkb25lOiBmYWxzZSB9IDogZiA/IGYodikgOiB2OyB9IDogZjsgfVxyXG4gICAgfTtcclxuXHJcbiAgICBfX2FzeW5jVmFsdWVzID0gZnVuY3Rpb24gKG8pIHtcclxuICAgICAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgICAgIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XHJcbiAgICAgICAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xyXG4gICAgICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cclxuICAgICAgICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XHJcbiAgICB9O1xyXG5cclxuICAgIF9fbWFrZVRlbXBsYXRlT2JqZWN0ID0gZnVuY3Rpb24gKGNvb2tlZCwgcmF3KSB7XHJcbiAgICAgICAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cclxuICAgICAgICByZXR1cm4gY29va2VkO1xyXG4gICAgfTtcclxuXHJcbiAgICB2YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xyXG4gICAgfSkgOiBmdW5jdGlvbihvLCB2KSB7XHJcbiAgICAgICAgb1tcImRlZmF1bHRcIl0gPSB2O1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2ltcG9ydFN0YXIgPSBmdW5jdGlvbiAobW9kKSB7XHJcbiAgICAgICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcclxuICAgICAgICB2YXIgcmVzdWx0ID0ge307XHJcbiAgICAgICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xyXG4gICAgICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH07XHJcblxyXG4gICAgX19pbXBvcnREZWZhdWx0ID0gZnVuY3Rpb24gKG1vZCkge1xyXG4gICAgICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0ID0gZnVuY3Rpb24gKHJlY2VpdmVyLCBzdGF0ZSwga2luZCwgZikge1xyXG4gICAgICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtcclxuICAgICAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcclxuICAgICAgICByZXR1cm4ga2luZCA9PT0gXCJtXCIgPyBmIDoga2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIpIDogZiA/IGYudmFsdWUgOiBzdGF0ZS5nZXQocmVjZWl2ZXIpO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0ID0gZnVuY3Rpb24gKHJlY2VpdmVyLCBzdGF0ZSwgdmFsdWUsIGtpbmQsIGYpIHtcclxuICAgICAgICBpZiAoa2luZCA9PT0gXCJtXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7XHJcbiAgICAgICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyXCIpO1xyXG4gICAgICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XHJcbiAgICAgICAgcmV0dXJuIChraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlciwgdmFsdWUpIDogZiA/IGYudmFsdWUgPSB2YWx1ZSA6IHN0YXRlLnNldChyZWNlaXZlciwgdmFsdWUpKSwgdmFsdWU7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fY2xhc3NQcml2YXRlRmllbGRJbiA9IGZ1bmN0aW9uIChzdGF0ZSwgcmVjZWl2ZXIpIHtcclxuICAgICAgICBpZiAocmVjZWl2ZXIgPT09IG51bGwgfHwgKHR5cGVvZiByZWNlaXZlciAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgcmVjZWl2ZXIgIT09IFwiZnVuY3Rpb25cIikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgdXNlICdpbicgb3BlcmF0b3Igb24gbm9uLW9iamVjdFwiKTtcclxuICAgICAgICByZXR1cm4gdHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciA9PT0gc3RhdGUgOiBzdGF0ZS5oYXMocmVjZWl2ZXIpO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2FkZERpc3Bvc2FibGVSZXNvdXJjZSA9IGZ1bmN0aW9uIChlbnYsIHZhbHVlLCBhc3luYykge1xyXG4gICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdm9pZCAwKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3QgZXhwZWN0ZWQuXCIpO1xyXG4gICAgICAgICAgICB2YXIgZGlzcG9zZSwgaW5uZXI7XHJcbiAgICAgICAgICAgIGlmIChhc3luYykge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFTeW1ib2wuYXN5bmNEaXNwb3NlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jRGlzcG9zZSBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICAgICAgICAgICAgICBkaXNwb3NlID0gdmFsdWVbU3ltYm9sLmFzeW5jRGlzcG9zZV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGRpc3Bvc2UgPT09IHZvaWQgMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFTeW1ib2wuZGlzcG9zZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5kaXNwb3NlIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgICAgICAgICAgICAgIGRpc3Bvc2UgPSB2YWx1ZVtTeW1ib2wuZGlzcG9zZV07XHJcbiAgICAgICAgICAgICAgICBpZiAoYXN5bmMpIGlubmVyID0gZGlzcG9zZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGRpc3Bvc2UgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBub3QgZGlzcG9zYWJsZS5cIik7XHJcbiAgICAgICAgICAgIGlmIChpbm5lcikgZGlzcG9zZSA9IGZ1bmN0aW9uKCkgeyB0cnkgeyBpbm5lci5jYWxsKHRoaXMpOyB9IGNhdGNoIChlKSB7IHJldHVybiBQcm9taXNlLnJlamVjdChlKTsgfSB9O1xyXG4gICAgICAgICAgICBlbnYuc3RhY2sucHVzaCh7IHZhbHVlOiB2YWx1ZSwgZGlzcG9zZTogZGlzcG9zZSwgYXN5bmM6IGFzeW5jIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChhc3luYykge1xyXG4gICAgICAgICAgICBlbnYuc3RhY2sucHVzaCh7IGFzeW5jOiB0cnVlIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9O1xyXG5cclxuICAgIHZhciBfU3VwcHJlc3NlZEVycm9yID0gdHlwZW9mIFN1cHByZXNzZWRFcnJvciA9PT0gXCJmdW5jdGlvblwiID8gU3VwcHJlc3NlZEVycm9yIDogZnVuY3Rpb24gKGVycm9yLCBzdXBwcmVzc2VkLCBtZXNzYWdlKSB7XHJcbiAgICAgICAgdmFyIGUgPSBuZXcgRXJyb3IobWVzc2FnZSk7XHJcbiAgICAgICAgcmV0dXJuIGUubmFtZSA9IFwiU3VwcHJlc3NlZEVycm9yXCIsIGUuZXJyb3IgPSBlcnJvciwgZS5zdXBwcmVzc2VkID0gc3VwcHJlc3NlZCwgZTtcclxuICAgIH07XHJcblxyXG4gICAgX19kaXNwb3NlUmVzb3VyY2VzID0gZnVuY3Rpb24gKGVudikge1xyXG4gICAgICAgIGZ1bmN0aW9uIGZhaWwoZSkge1xyXG4gICAgICAgICAgICBlbnYuZXJyb3IgPSBlbnYuaGFzRXJyb3IgPyBuZXcgX1N1cHByZXNzZWRFcnJvcihlLCBlbnYuZXJyb3IsIFwiQW4gZXJyb3Igd2FzIHN1cHByZXNzZWQgZHVyaW5nIGRpc3Bvc2FsLlwiKSA6IGU7XHJcbiAgICAgICAgICAgIGVudi5oYXNFcnJvciA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciByLCBzID0gMDtcclxuICAgICAgICBmdW5jdGlvbiBuZXh0KCkge1xyXG4gICAgICAgICAgICB3aGlsZSAociA9IGVudi5zdGFjay5wb3AoKSkge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXIuYXN5bmMgJiYgcyA9PT0gMSkgcmV0dXJuIHMgPSAwLCBlbnYuc3RhY2sucHVzaChyKSwgUHJvbWlzZS5yZXNvbHZlKCkudGhlbihuZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoci5kaXNwb3NlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSByLmRpc3Bvc2UuY2FsbChyLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIuYXN5bmMpIHJldHVybiBzIHw9IDIsIFByb21pc2UucmVzb2x2ZShyZXN1bHQpLnRoZW4obmV4dCwgZnVuY3Rpb24oZSkgeyBmYWlsKGUpOyByZXR1cm4gbmV4dCgpOyB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBzIHw9IDE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZhaWwoZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHMgPT09IDEpIHJldHVybiBlbnYuaGFzRXJyb3IgPyBQcm9taXNlLnJlamVjdChlbnYuZXJyb3IpIDogUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIGlmIChlbnYuaGFzRXJyb3IpIHRocm93IGVudi5lcnJvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5leHQoKTtcclxuICAgIH07XHJcblxyXG4gICAgX19yZXdyaXRlUmVsYXRpdmVJbXBvcnRFeHRlbnNpb24gPSBmdW5jdGlvbiAocGF0aCwgcHJlc2VydmVKc3gpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHBhdGggPT09IFwic3RyaW5nXCIgJiYgL15cXC5cXC4/XFwvLy50ZXN0KHBhdGgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBwYXRoLnJlcGxhY2UoL1xcLih0c3gpJHwoKD86XFwuZCk/KSgoPzpcXC5bXi4vXSs/KT8pXFwuKFtjbV0/KXRzJC9pLCBmdW5jdGlvbiAobSwgdHN4LCBkLCBleHQsIGNtKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHN4ID8gcHJlc2VydmVKc3ggPyBcIi5qc3hcIiA6IFwiLmpzXCIgOiBkICYmICghZXh0IHx8ICFjbSkgPyBtIDogKGQgKyBleHQgKyBcIi5cIiArIGNtLnRvTG93ZXJDYXNlKCkgKyBcImpzXCIpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHBhdGg7XHJcbiAgICB9O1xyXG5cclxuICAgIGV4cG9ydGVyKFwiX19leHRlbmRzXCIsIF9fZXh0ZW5kcyk7XHJcbiAgICBleHBvcnRlcihcIl9fYXNzaWduXCIsIF9fYXNzaWduKTtcclxuICAgIGV4cG9ydGVyKFwiX19yZXN0XCIsIF9fcmVzdCk7XHJcbiAgICBleHBvcnRlcihcIl9fZGVjb3JhdGVcIiwgX19kZWNvcmF0ZSk7XHJcbiAgICBleHBvcnRlcihcIl9fcGFyYW1cIiwgX19wYXJhbSk7XHJcbiAgICBleHBvcnRlcihcIl9fZXNEZWNvcmF0ZVwiLCBfX2VzRGVjb3JhdGUpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX3J1bkluaXRpYWxpemVyc1wiLCBfX3J1bkluaXRpYWxpemVycyk7XHJcbiAgICBleHBvcnRlcihcIl9fcHJvcEtleVwiLCBfX3Byb3BLZXkpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX3NldEZ1bmN0aW9uTmFtZVwiLCBfX3NldEZ1bmN0aW9uTmFtZSk7XHJcbiAgICBleHBvcnRlcihcIl9fbWV0YWRhdGFcIiwgX19tZXRhZGF0YSk7XHJcbiAgICBleHBvcnRlcihcIl9fYXdhaXRlclwiLCBfX2F3YWl0ZXIpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2dlbmVyYXRvclwiLCBfX2dlbmVyYXRvcik7XHJcbiAgICBleHBvcnRlcihcIl9fZXhwb3J0U3RhclwiLCBfX2V4cG9ydFN0YXIpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2NyZWF0ZUJpbmRpbmdcIiwgX19jcmVhdGVCaW5kaW5nKTtcclxuICAgIGV4cG9ydGVyKFwiX192YWx1ZXNcIiwgX192YWx1ZXMpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX3JlYWRcIiwgX19yZWFkKTtcclxuICAgIGV4cG9ydGVyKFwiX19zcHJlYWRcIiwgX19zcHJlYWQpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX3NwcmVhZEFycmF5c1wiLCBfX3NwcmVhZEFycmF5cyk7XHJcbiAgICBleHBvcnRlcihcIl9fc3ByZWFkQXJyYXlcIiwgX19zcHJlYWRBcnJheSk7XHJcbiAgICBleHBvcnRlcihcIl9fYXdhaXRcIiwgX19hd2FpdCk7XHJcbiAgICBleHBvcnRlcihcIl9fYXN5bmNHZW5lcmF0b3JcIiwgX19hc3luY0dlbmVyYXRvcik7XHJcbiAgICBleHBvcnRlcihcIl9fYXN5bmNEZWxlZ2F0b3JcIiwgX19hc3luY0RlbGVnYXRvcik7XHJcbiAgICBleHBvcnRlcihcIl9fYXN5bmNWYWx1ZXNcIiwgX19hc3luY1ZhbHVlcyk7XHJcbiAgICBleHBvcnRlcihcIl9fbWFrZVRlbXBsYXRlT2JqZWN0XCIsIF9fbWFrZVRlbXBsYXRlT2JqZWN0KTtcclxuICAgIGV4cG9ydGVyKFwiX19pbXBvcnRTdGFyXCIsIF9faW1wb3J0U3Rhcik7XHJcbiAgICBleHBvcnRlcihcIl9faW1wb3J0RGVmYXVsdFwiLCBfX2ltcG9ydERlZmF1bHQpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0XCIsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0XCIsIF9fY2xhc3NQcml2YXRlRmllbGRTZXQpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2NsYXNzUHJpdmF0ZUZpZWxkSW5cIiwgX19jbGFzc1ByaXZhdGVGaWVsZEluKTtcclxuICAgIGV4cG9ydGVyKFwiX19hZGREaXNwb3NhYmxlUmVzb3VyY2VcIiwgX19hZGREaXNwb3NhYmxlUmVzb3VyY2UpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2Rpc3Bvc2VSZXNvdXJjZXNcIiwgX19kaXNwb3NlUmVzb3VyY2VzKTtcclxuICAgIGV4cG9ydGVyKFwiX19yZXdyaXRlUmVsYXRpdmVJbXBvcnRFeHRlbnNpb25cIiwgX19yZXdyaXRlUmVsYXRpdmVJbXBvcnRFeHRlbnNpb24pO1xyXG59KTtcclxuXHJcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xyXG4gICAgX19leHRlbmRzLFxyXG4gICAgX19hc3NpZ24sXHJcbiAgICBfX3Jlc3QsXHJcbiAgICBfX2RlY29yYXRlLFxyXG4gICAgX19wYXJhbSxcclxuICAgIF9fZXNEZWNvcmF0ZSxcclxuICAgIF9fcnVuSW5pdGlhbGl6ZXJzLFxyXG4gICAgX19wcm9wS2V5LFxyXG4gICAgX19zZXRGdW5jdGlvbk5hbWUsXHJcbiAgICBfX21ldGFkYXRhLFxyXG4gICAgX19hd2FpdGVyLFxyXG4gICAgX19nZW5lcmF0b3IsXHJcbiAgICBfX2V4cG9ydFN0YXIsXHJcbiAgICBfX2NyZWF0ZUJpbmRpbmcsXHJcbiAgICBfX3ZhbHVlcyxcclxuICAgIF9fcmVhZCxcclxuICAgIF9fc3ByZWFkLFxyXG4gICAgX19zcHJlYWRBcnJheXMsXHJcbiAgICBfX3NwcmVhZEFycmF5LFxyXG4gICAgX19hd2FpdCxcclxuICAgIF9fYXN5bmNHZW5lcmF0b3IsXHJcbiAgICBfX2FzeW5jRGVsZWdhdG9yLFxyXG4gICAgX19hc3luY1ZhbHVlcyxcclxuICAgIF9fbWFrZVRlbXBsYXRlT2JqZWN0LFxyXG4gICAgX19pbXBvcnRTdGFyLFxyXG4gICAgX19pbXBvcnREZWZhdWx0LFxyXG4gICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCxcclxuICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQsXHJcbiAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkSW4sXHJcbiAgICBfX2FkZERpc3Bvc2FibGVSZXNvdXJjZSxcclxuICAgIF9fZGlzcG9zZVJlc291cmNlcyxcclxuICAgIF9fcmV3cml0ZVJlbGF0aXZlSW1wb3J0RXh0ZW5zaW9uLFxyXG59KTtcclxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5sb2cgPSBsb2c7XG5jb25zdCB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xuY29uc3Qgbm9kZV9vc18xID0gcmVxdWlyZShcIm5vZGU6b3NcIik7XG5jb25zdCBub2RlX3V0aWxfMSA9IHRzbGliXzEuX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJub2RlOnV0aWxcIikpO1xuY29uc3QgcHJvY2VzcyA9IHRzbGliXzEuX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJub2RlOnByb2Nlc3NcIikpO1xuZnVuY3Rpb24gbG9nKG1lc3NhZ2UsIC4uLmFyZ3MpIHtcbiAgICBwcm9jZXNzLnN0ZGVyci53cml0ZShgJHtub2RlX3V0aWxfMS5kZWZhdWx0LmZvcm1hdChtZXNzYWdlLCAuLi5hcmdzKX0ke25vZGVfb3NfMS5FT0x9YCk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1sb2cuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgbG9nX2pzXzEgPSByZXF1aXJlKFwiLi9sb2cuanNcIik7XG5jb25zdCBkZWJ1Z0VudlZhcmlhYmxlID0gKHR5cGVvZiBwcm9jZXNzICE9PSBcInVuZGVmaW5lZFwiICYmIHByb2Nlc3MuZW52ICYmIHByb2Nlc3MuZW52LkRFQlVHKSB8fCB1bmRlZmluZWQ7XG5sZXQgZW5hYmxlZFN0cmluZztcbmxldCBlbmFibGVkTmFtZXNwYWNlcyA9IFtdO1xubGV0IHNraXBwZWROYW1lc3BhY2VzID0gW107XG5jb25zdCBkZWJ1Z2dlcnMgPSBbXTtcbmlmIChkZWJ1Z0VudlZhcmlhYmxlKSB7XG4gICAgZW5hYmxlKGRlYnVnRW52VmFyaWFibGUpO1xufVxuY29uc3QgZGVidWdPYmogPSBPYmplY3QuYXNzaWduKChuYW1lc3BhY2UpID0+IHtcbiAgICByZXR1cm4gY3JlYXRlRGVidWdnZXIobmFtZXNwYWNlKTtcbn0sIHtcbiAgICBlbmFibGUsXG4gICAgZW5hYmxlZCxcbiAgICBkaXNhYmxlLFxuICAgIGxvZzogbG9nX2pzXzEubG9nLFxufSk7XG5mdW5jdGlvbiBlbmFibGUobmFtZXNwYWNlcykge1xuICAgIGVuYWJsZWRTdHJpbmcgPSBuYW1lc3BhY2VzO1xuICAgIGVuYWJsZWROYW1lc3BhY2VzID0gW107XG4gICAgc2tpcHBlZE5hbWVzcGFjZXMgPSBbXTtcbiAgICBjb25zdCB3aWxkY2FyZCA9IC9cXCovZztcbiAgICBjb25zdCBuYW1lc3BhY2VMaXN0ID0gbmFtZXNwYWNlcy5zcGxpdChcIixcIikubWFwKChucykgPT4gbnMudHJpbSgpLnJlcGxhY2Uod2lsZGNhcmQsIFwiLio/XCIpKTtcbiAgICBmb3IgKGNvbnN0IG5zIG9mIG5hbWVzcGFjZUxpc3QpIHtcbiAgICAgICAgaWYgKG5zLnN0YXJ0c1dpdGgoXCItXCIpKSB7XG4gICAgICAgICAgICBza2lwcGVkTmFtZXNwYWNlcy5wdXNoKG5ldyBSZWdFeHAoYF4ke25zLnN1YnN0cigxKX0kYCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZW5hYmxlZE5hbWVzcGFjZXMucHVzaChuZXcgUmVnRXhwKGBeJHtuc30kYCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvciAoY29uc3QgaW5zdGFuY2Ugb2YgZGVidWdnZXJzKSB7XG4gICAgICAgIGluc3RhbmNlLmVuYWJsZWQgPSBlbmFibGVkKGluc3RhbmNlLm5hbWVzcGFjZSk7XG4gICAgfVxufVxuZnVuY3Rpb24gZW5hYmxlZChuYW1lc3BhY2UpIHtcbiAgICBpZiAobmFtZXNwYWNlLmVuZHNXaXRoKFwiKlwiKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBza2lwcGVkIG9mIHNraXBwZWROYW1lc3BhY2VzKSB7XG4gICAgICAgIGlmIChza2lwcGVkLnRlc3QobmFtZXNwYWNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvciAoY29uc3QgZW5hYmxlZE5hbWVzcGFjZSBvZiBlbmFibGVkTmFtZXNwYWNlcykge1xuICAgICAgICBpZiAoZW5hYmxlZE5hbWVzcGFjZS50ZXN0KG5hbWVzcGFjZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGRpc2FibGUoKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gZW5hYmxlZFN0cmluZyB8fCBcIlwiO1xuICAgIGVuYWJsZShcIlwiKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gY3JlYXRlRGVidWdnZXIobmFtZXNwYWNlKSB7XG4gICAgY29uc3QgbmV3RGVidWdnZXIgPSBPYmplY3QuYXNzaWduKGRlYnVnLCB7XG4gICAgICAgIGVuYWJsZWQ6IGVuYWJsZWQobmFtZXNwYWNlKSxcbiAgICAgICAgZGVzdHJveSxcbiAgICAgICAgbG9nOiBkZWJ1Z09iai5sb2csXG4gICAgICAgIG5hbWVzcGFjZSxcbiAgICAgICAgZXh0ZW5kLFxuICAgIH0pO1xuICAgIGZ1bmN0aW9uIGRlYnVnKC4uLmFyZ3MpIHtcbiAgICAgICAgaWYgKCFuZXdEZWJ1Z2dlci5lbmFibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgYXJnc1swXSA9IGAke25hbWVzcGFjZX0gJHthcmdzWzBdfWA7XG4gICAgICAgIH1cbiAgICAgICAgbmV3RGVidWdnZXIubG9nKC4uLmFyZ3MpO1xuICAgIH1cbiAgICBkZWJ1Z2dlcnMucHVzaChuZXdEZWJ1Z2dlcik7XG4gICAgcmV0dXJuIG5ld0RlYnVnZ2VyO1xufVxuZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICBjb25zdCBpbmRleCA9IGRlYnVnZ2Vycy5pbmRleE9mKHRoaXMpO1xuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgIGRlYnVnZ2Vycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gZXh0ZW5kKG5hbWVzcGFjZSkge1xuICAgIGNvbnN0IG5ld0RlYnVnZ2VyID0gY3JlYXRlRGVidWdnZXIoYCR7dGhpcy5uYW1lc3BhY2V9OiR7bmFtZXNwYWNlfWApO1xuICAgIG5ld0RlYnVnZ2VyLmxvZyA9IHRoaXMubG9nO1xuICAgIHJldHVybiBuZXdEZWJ1Z2dlcjtcbn1cbmV4cG9ydHMuZGVmYXVsdCA9IGRlYnVnT2JqO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGVidWcuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5BenVyZUxvZ2dlciA9IHZvaWQgMDtcbmV4cG9ydHMuc2V0TG9nTGV2ZWwgPSBzZXRMb2dMZXZlbDtcbmV4cG9ydHMuZ2V0TG9nTGV2ZWwgPSBnZXRMb2dMZXZlbDtcbmV4cG9ydHMuY3JlYXRlQ2xpZW50TG9nZ2VyID0gY3JlYXRlQ2xpZW50TG9nZ2VyO1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbmNvbnN0IGRlYnVnX2pzXzEgPSB0c2xpYl8xLl9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9kZWJ1Zy5qc1wiKSk7XG5jb25zdCByZWdpc3RlcmVkTG9nZ2VycyA9IG5ldyBTZXQoKTtcbmNvbnN0IGxvZ0xldmVsRnJvbUVudiA9ICh0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIiAmJiBwcm9jZXNzLmVudiAmJiBwcm9jZXNzLmVudi5BWlVSRV9MT0dfTEVWRUwpIHx8IHVuZGVmaW5lZDtcbmxldCBhenVyZUxvZ0xldmVsO1xuLyoqXG4gKiBUaGUgQXp1cmVMb2dnZXIgcHJvdmlkZXMgYSBtZWNoYW5pc20gZm9yIG92ZXJyaWRpbmcgd2hlcmUgbG9ncyBhcmUgb3V0cHV0IHRvLlxuICogQnkgZGVmYXVsdCwgbG9ncyBhcmUgc2VudCB0byBzdGRlcnIuXG4gKiBPdmVycmlkZSB0aGUgYGxvZ2AgbWV0aG9kIHRvIHJlZGlyZWN0IGxvZ3MgdG8gYW5vdGhlciBsb2NhdGlvbi5cbiAqL1xuZXhwb3J0cy5BenVyZUxvZ2dlciA9ICgwLCBkZWJ1Z19qc18xLmRlZmF1bHQpKFwiYXp1cmVcIik7XG5leHBvcnRzLkF6dXJlTG9nZ2VyLmxvZyA9ICguLi5hcmdzKSA9PiB7XG4gICAgZGVidWdfanNfMS5kZWZhdWx0LmxvZyguLi5hcmdzKTtcbn07XG5jb25zdCBBWlVSRV9MT0dfTEVWRUxTID0gW1widmVyYm9zZVwiLCBcImluZm9cIiwgXCJ3YXJuaW5nXCIsIFwiZXJyb3JcIl07XG5pZiAobG9nTGV2ZWxGcm9tRW52KSB7XG4gICAgLy8gYXZvaWQgY2FsbGluZyBzZXRMb2dMZXZlbCBiZWNhdXNlIHdlIGRvbid0IHdhbnQgYSBtaXMtc2V0IGVudmlyb25tZW50IHZhcmlhYmxlIHRvIGNyYXNoXG4gICAgaWYgKGlzQXp1cmVMb2dMZXZlbChsb2dMZXZlbEZyb21FbnYpKSB7XG4gICAgICAgIHNldExvZ0xldmVsKGxvZ0xldmVsRnJvbUVudik7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBBWlVSRV9MT0dfTEVWRUwgc2V0IHRvIHVua25vd24gbG9nIGxldmVsICcke2xvZ0xldmVsRnJvbUVudn0nOyBsb2dnaW5nIGlzIG5vdCBlbmFibGVkLiBBY2NlcHRhYmxlIHZhbHVlczogJHtBWlVSRV9MT0dfTEVWRUxTLmpvaW4oXCIsIFwiKX0uYCk7XG4gICAgfVxufVxuLyoqXG4gKiBJbW1lZGlhdGVseSBlbmFibGVzIGxvZ2dpbmcgYXQgdGhlIHNwZWNpZmllZCBsb2cgbGV2ZWwuIElmIG5vIGxldmVsIGlzIHNwZWNpZmllZCwgbG9nZ2luZyBpcyBkaXNhYmxlZC5cbiAqIEBwYXJhbSBsZXZlbCAtIFRoZSBsb2cgbGV2ZWwgdG8gZW5hYmxlIGZvciBsb2dnaW5nLlxuICogT3B0aW9ucyBmcm9tIG1vc3QgdmVyYm9zZSB0byBsZWFzdCB2ZXJib3NlIGFyZTpcbiAqIC0gdmVyYm9zZVxuICogLSBpbmZvXG4gKiAtIHdhcm5pbmdcbiAqIC0gZXJyb3JcbiAqL1xuZnVuY3Rpb24gc2V0TG9nTGV2ZWwobGV2ZWwpIHtcbiAgICBpZiAobGV2ZWwgJiYgIWlzQXp1cmVMb2dMZXZlbChsZXZlbCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGxvZyBsZXZlbCAnJHtsZXZlbH0nLiBBY2NlcHRhYmxlIHZhbHVlczogJHtBWlVSRV9MT0dfTEVWRUxTLmpvaW4oXCIsXCIpfWApO1xuICAgIH1cbiAgICBhenVyZUxvZ0xldmVsID0gbGV2ZWw7XG4gICAgY29uc3QgZW5hYmxlZE5hbWVzcGFjZXMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGxvZ2dlciBvZiByZWdpc3RlcmVkTG9nZ2Vycykge1xuICAgICAgICBpZiAoc2hvdWxkRW5hYmxlKGxvZ2dlcikpIHtcbiAgICAgICAgICAgIGVuYWJsZWROYW1lc3BhY2VzLnB1c2gobG9nZ2VyLm5hbWVzcGFjZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZGVidWdfanNfMS5kZWZhdWx0LmVuYWJsZShlbmFibGVkTmFtZXNwYWNlcy5qb2luKFwiLFwiKSk7XG59XG4vKipcbiAqIFJldHJpZXZlcyB0aGUgY3VycmVudGx5IHNwZWNpZmllZCBsb2cgbGV2ZWwuXG4gKi9cbmZ1bmN0aW9uIGdldExvZ0xldmVsKCkge1xuICAgIHJldHVybiBhenVyZUxvZ0xldmVsO1xufVxuY29uc3QgbGV2ZWxNYXAgPSB7XG4gICAgdmVyYm9zZTogNDAwLFxuICAgIGluZm86IDMwMCxcbiAgICB3YXJuaW5nOiAyMDAsXG4gICAgZXJyb3I6IDEwMCxcbn07XG4vKipcbiAqIENyZWF0ZXMgYSBsb2dnZXIgZm9yIHVzZSBieSB0aGUgQXp1cmUgU0RLcyB0aGF0IGluaGVyaXRzIGZyb20gYEF6dXJlTG9nZ2VyYC5cbiAqIEBwYXJhbSBuYW1lc3BhY2UgLSBUaGUgbmFtZSBvZiB0aGUgU0RLIHBhY2thZ2UuXG4gKiBAaGlkZGVuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNsaWVudExvZ2dlcihuYW1lc3BhY2UpIHtcbiAgICBjb25zdCBjbGllbnRSb290TG9nZ2VyID0gZXhwb3J0cy5BenVyZUxvZ2dlci5leHRlbmQobmFtZXNwYWNlKTtcbiAgICBwYXRjaExvZ01ldGhvZChleHBvcnRzLkF6dXJlTG9nZ2VyLCBjbGllbnRSb290TG9nZ2VyKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBlcnJvcjogY3JlYXRlTG9nZ2VyKGNsaWVudFJvb3RMb2dnZXIsIFwiZXJyb3JcIiksXG4gICAgICAgIHdhcm5pbmc6IGNyZWF0ZUxvZ2dlcihjbGllbnRSb290TG9nZ2VyLCBcIndhcm5pbmdcIiksXG4gICAgICAgIGluZm86IGNyZWF0ZUxvZ2dlcihjbGllbnRSb290TG9nZ2VyLCBcImluZm9cIiksXG4gICAgICAgIHZlcmJvc2U6IGNyZWF0ZUxvZ2dlcihjbGllbnRSb290TG9nZ2VyLCBcInZlcmJvc2VcIiksXG4gICAgfTtcbn1cbmZ1bmN0aW9uIHBhdGNoTG9nTWV0aG9kKHBhcmVudCwgY2hpbGQpIHtcbiAgICBjaGlsZC5sb2cgPSAoLi4uYXJncykgPT4ge1xuICAgICAgICBwYXJlbnQubG9nKC4uLmFyZ3MpO1xuICAgIH07XG59XG5mdW5jdGlvbiBjcmVhdGVMb2dnZXIocGFyZW50LCBsZXZlbCkge1xuICAgIGNvbnN0IGxvZ2dlciA9IE9iamVjdC5hc3NpZ24ocGFyZW50LmV4dGVuZChsZXZlbCksIHtcbiAgICAgICAgbGV2ZWwsXG4gICAgfSk7XG4gICAgcGF0Y2hMb2dNZXRob2QocGFyZW50LCBsb2dnZXIpO1xuICAgIGlmIChzaG91bGRFbmFibGUobG9nZ2VyKSkge1xuICAgICAgICBjb25zdCBlbmFibGVkTmFtZXNwYWNlcyA9IGRlYnVnX2pzXzEuZGVmYXVsdC5kaXNhYmxlKCk7XG4gICAgICAgIGRlYnVnX2pzXzEuZGVmYXVsdC5lbmFibGUoZW5hYmxlZE5hbWVzcGFjZXMgKyBcIixcIiArIGxvZ2dlci5uYW1lc3BhY2UpO1xuICAgIH1cbiAgICByZWdpc3RlcmVkTG9nZ2Vycy5hZGQobG9nZ2VyKTtcbiAgICByZXR1cm4gbG9nZ2VyO1xufVxuZnVuY3Rpb24gc2hvdWxkRW5hYmxlKGxvZ2dlcikge1xuICAgIHJldHVybiBCb29sZWFuKGF6dXJlTG9nTGV2ZWwgJiYgbGV2ZWxNYXBbbG9nZ2VyLmxldmVsXSA8PSBsZXZlbE1hcFthenVyZUxvZ0xldmVsXSk7XG59XG5mdW5jdGlvbiBpc0F6dXJlTG9nTGV2ZWwobG9nTGV2ZWwpIHtcbiAgICByZXR1cm4gQVpVUkVfTE9HX0xFVkVMUy5pbmNsdWRlcyhsb2dMZXZlbCk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmxvZ2dlciA9IHZvaWQgMDtcbmNvbnN0IGxvZ2dlcl8xID0gcmVxdWlyZShcIkBhenVyZS9sb2dnZXJcIik7XG5leHBvcnRzLmxvZ2dlciA9ICgwLCBsb2dnZXJfMS5jcmVhdGVDbGllbnRMb2dnZXIpKFwiY29yZS1yZXN0LXBpcGVsaW5lXCIpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bG9nLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQWJvcnRFcnJvciA9IHZvaWQgMDtcbi8qKlxuICogVGhpcyBlcnJvciBpcyB0aHJvd24gd2hlbiBhbiBhc3luY2hyb25vdXMgb3BlcmF0aW9uIGhhcyBiZWVuIGFib3J0ZWQuXG4gKiBDaGVjayBmb3IgdGhpcyBlcnJvciBieSB0ZXN0aW5nIHRoZSBgbmFtZWAgdGhhdCB0aGUgbmFtZSBwcm9wZXJ0eSBvZiB0aGVcbiAqIGVycm9yIG1hdGNoZXMgYFwiQWJvcnRFcnJvclwiYC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gKiBjb250cm9sbGVyLmFib3J0KCk7XG4gKiB0cnkge1xuICogICBkb0FzeW5jV29yayhjb250cm9sbGVyLnNpZ25hbClcbiAqIH0gY2F0Y2ggKGUpIHtcbiAqICAgaWYgKGUubmFtZSA9PT0gJ0Fib3J0RXJyb3InKSB7XG4gKiAgICAgLy8gaGFuZGxlIGFib3J0IGVycm9yIGhlcmUuXG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICovXG5jbGFzcyBBYm9ydEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2UpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiQWJvcnRFcnJvclwiO1xuICAgIH1cbn1cbmV4cG9ydHMuQWJvcnRFcnJvciA9IEFib3J0RXJyb3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1BYm9ydEVycm9yLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQWJvcnRFcnJvciA9IHZvaWQgMDtcbnZhciBBYm9ydEVycm9yX2pzXzEgPSByZXF1aXJlKFwiLi9BYm9ydEVycm9yLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQWJvcnRFcnJvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gQWJvcnRFcnJvcl9qc18xLkFib3J0RXJyb3I7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNyZWF0ZUFib3J0YWJsZVByb21pc2UgPSBjcmVhdGVBYm9ydGFibGVQcm9taXNlO1xuY29uc3QgYWJvcnRfY29udHJvbGxlcl8xID0gcmVxdWlyZShcIkBhenVyZS9hYm9ydC1jb250cm9sbGVyXCIpO1xuLyoqXG4gKiBDcmVhdGVzIGFuIGFib3J0YWJsZSBwcm9taXNlLlxuICogQHBhcmFtIGJ1aWxkUHJvbWlzZSAtIEEgZnVuY3Rpb24gdGhhdCB0YWtlcyB0aGUgcmVzb2x2ZSBhbmQgcmVqZWN0IGZ1bmN0aW9ucyBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIGFib3J0YWJsZSBwcm9taXNlLlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgY2FuIGJlIGFib3J0ZWQuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUFib3J0YWJsZVByb21pc2UoYnVpbGRQcm9taXNlLCBvcHRpb25zKSB7XG4gICAgY29uc3QgeyBjbGVhbnVwQmVmb3JlQWJvcnQsIGFib3J0U2lnbmFsLCBhYm9ydEVycm9yTXNnIH0gPSBvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCA/IG9wdGlvbnMgOiB7fTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBmdW5jdGlvbiByZWplY3RPbkFib3J0KCkge1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBhYm9ydF9jb250cm9sbGVyXzEuQWJvcnRFcnJvcihhYm9ydEVycm9yTXNnICE9PSBudWxsICYmIGFib3J0RXJyb3JNc2cgIT09IHZvaWQgMCA/IGFib3J0RXJyb3JNc2cgOiBcIlRoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQuXCIpKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcnMoKSB7XG4gICAgICAgICAgICBhYm9ydFNpZ25hbCA9PT0gbnVsbCB8fCBhYm9ydFNpZ25hbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogYWJvcnRTaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uQWJvcnQpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIG9uQWJvcnQoKSB7XG4gICAgICAgICAgICBjbGVhbnVwQmVmb3JlQWJvcnQgPT09IG51bGwgfHwgY2xlYW51cEJlZm9yZUFib3J0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjbGVhbnVwQmVmb3JlQWJvcnQoKTtcbiAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVycygpO1xuICAgICAgICAgICAgcmVqZWN0T25BYm9ydCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhYm9ydFNpZ25hbCA9PT0gbnVsbCB8fCBhYm9ydFNpZ25hbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogYWJvcnRTaWduYWwuYWJvcnRlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdE9uQWJvcnQoKTtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYnVpbGRQcm9taXNlKCh4KSA9PiB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlTGlzdGVuZXJzKCk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh4KTtcbiAgICAgICAgICAgIH0sICh4KSA9PiB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlTGlzdGVuZXJzKCk7XG4gICAgICAgICAgICAgICAgcmVqZWN0KHgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICAgICAgYWJvcnRTaWduYWwgPT09IG51bGwgfHwgYWJvcnRTaWduYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGFib3J0U2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0KTtcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNyZWF0ZUFib3J0YWJsZVByb21pc2UuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRSYW5kb21JbnRlZ2VySW5jbHVzaXZlID0gZ2V0UmFuZG9tSW50ZWdlckluY2x1c2l2ZTtcbi8qKlxuICogUmV0dXJucyBhIHJhbmRvbSBpbnRlZ2VyIHZhbHVlIGJldHdlZW4gYSBsb3dlciBhbmQgdXBwZXIgYm91bmQsXG4gKiBpbmNsdXNpdmUgb2YgYm90aCBib3VuZHMuXG4gKiBOb3RlIHRoYXQgdGhpcyB1c2VzIE1hdGgucmFuZG9tIGFuZCBpc24ndCBzZWN1cmUuIElmIHlvdSBuZWVkIHRvIHVzZVxuICogdGhpcyBmb3IgYW55IGtpbmQgb2Ygc2VjdXJpdHkgcHVycG9zZSwgZmluZCBhIGJldHRlciBzb3VyY2Ugb2YgcmFuZG9tLlxuICogQHBhcmFtIG1pbiAtIFRoZSBzbWFsbGVzdCBpbnRlZ2VyIHZhbHVlIGFsbG93ZWQuXG4gKiBAcGFyYW0gbWF4IC0gVGhlIGxhcmdlc3QgaW50ZWdlciB2YWx1ZSBhbGxvd2VkLlxuICovXG5mdW5jdGlvbiBnZXRSYW5kb21JbnRlZ2VySW5jbHVzaXZlKG1pbiwgbWF4KSB7XG4gICAgLy8gTWFrZSBzdXJlIGlucHV0cyBhcmUgaW50ZWdlcnMuXG4gICAgbWluID0gTWF0aC5jZWlsKG1pbik7XG4gICAgbWF4ID0gTWF0aC5mbG9vcihtYXgpO1xuICAgIC8vIFBpY2sgYSByYW5kb20gb2Zmc2V0IGZyb20gemVybyB0byB0aGUgc2l6ZSBvZiB0aGUgcmFuZ2UuXG4gICAgLy8gU2luY2UgTWF0aC5yYW5kb20oKSBjYW4gbmV2ZXIgcmV0dXJuIDEsIHdlIGhhdmUgdG8gbWFrZSB0aGUgcmFuZ2Ugb25lIGxhcmdlclxuICAgIC8vIGluIG9yZGVyIHRvIGJlIGluY2x1c2l2ZSBvZiB0aGUgbWF4aW11bSB2YWx1ZSBhZnRlciB3ZSB0YWtlIHRoZSBmbG9vci5cbiAgICBjb25zdCBvZmZzZXQgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluICsgMSkpO1xuICAgIHJldHVybiBvZmZzZXQgKyBtaW47XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yYW5kb20uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZWxheSA9IGRlbGF5O1xuZXhwb3J0cy5jYWxjdWxhdGVSZXRyeURlbGF5ID0gY2FsY3VsYXRlUmV0cnlEZWxheTtcbmNvbnN0IGNyZWF0ZUFib3J0YWJsZVByb21pc2VfanNfMSA9IHJlcXVpcmUoXCIuL2NyZWF0ZUFib3J0YWJsZVByb21pc2UuanNcIik7XG5jb25zdCByYW5kb21fanNfMSA9IHJlcXVpcmUoXCIuL3JhbmRvbS5qc1wiKTtcbmNvbnN0IFN0YW5kYXJkQWJvcnRNZXNzYWdlID0gXCJUaGUgZGVsYXkgd2FzIGFib3J0ZWQuXCI7XG4vKipcbiAqIEEgd3JhcHBlciBmb3Igc2V0VGltZW91dCB0aGF0IHJlc29sdmVzIGEgcHJvbWlzZSBhZnRlciB0aW1lSW5NcyBtaWxsaXNlY29uZHMuXG4gKiBAcGFyYW0gdGltZUluTXMgLSBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byBiZSBkZWxheWVkLlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgZGVsYXkgLSBjdXJyZW50bHkgYWJvcnQgb3B0aW9uc1xuICogQHJldHVybnMgUHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIGFmdGVyIHRpbWVJbk1zXG4gKi9cbmZ1bmN0aW9uIGRlbGF5KHRpbWVJbk1zLCBvcHRpb25zKSB7XG4gICAgbGV0IHRva2VuO1xuICAgIGNvbnN0IHsgYWJvcnRTaWduYWwsIGFib3J0RXJyb3JNc2cgfSA9IG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwID8gb3B0aW9ucyA6IHt9O1xuICAgIHJldHVybiAoMCwgY3JlYXRlQWJvcnRhYmxlUHJvbWlzZV9qc18xLmNyZWF0ZUFib3J0YWJsZVByb21pc2UpKChyZXNvbHZlKSA9PiB7XG4gICAgICAgIHRva2VuID0gc2V0VGltZW91dChyZXNvbHZlLCB0aW1lSW5Ncyk7XG4gICAgfSwge1xuICAgICAgICBjbGVhbnVwQmVmb3JlQWJvcnQ6ICgpID0+IGNsZWFyVGltZW91dCh0b2tlbiksXG4gICAgICAgIGFib3J0U2lnbmFsLFxuICAgICAgICBhYm9ydEVycm9yTXNnOiBhYm9ydEVycm9yTXNnICE9PSBudWxsICYmIGFib3J0RXJyb3JNc2cgIT09IHZvaWQgMCA/IGFib3J0RXJyb3JNc2cgOiBTdGFuZGFyZEFib3J0TWVzc2FnZSxcbiAgICB9KTtcbn1cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgZGVsYXkgaW50ZXJ2YWwgZm9yIHJldHJ5IGF0dGVtcHRzIHVzaW5nIGV4cG9uZW50aWFsIGRlbGF5IHdpdGggaml0dGVyLlxuICogQHBhcmFtIHJldHJ5QXR0ZW1wdCAtIFRoZSBjdXJyZW50IHJldHJ5IGF0dGVtcHQgbnVtYmVyLlxuICogQHBhcmFtIGNvbmZpZyAtIFRoZSBleHBvbmVudGlhbCByZXRyeSBjb25maWd1cmF0aW9uLlxuICogQHJldHVybnMgQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGNhbGN1bGF0ZWQgcmV0cnkgZGVsYXkuXG4gKi9cbmZ1bmN0aW9uIGNhbGN1bGF0ZVJldHJ5RGVsYXkocmV0cnlBdHRlbXB0LCBjb25maWcpIHtcbiAgICAvLyBFeHBvbmVudGlhbGx5IGluY3JlYXNlIHRoZSBkZWxheSBlYWNoIHRpbWVcbiAgICBjb25zdCBleHBvbmVudGlhbERlbGF5ID0gY29uZmlnLnJldHJ5RGVsYXlJbk1zICogTWF0aC5wb3coMiwgcmV0cnlBdHRlbXB0KTtcbiAgICAvLyBEb24ndCBsZXQgdGhlIGRlbGF5IGV4Y2VlZCB0aGUgbWF4aW11bVxuICAgIGNvbnN0IGNsYW1wZWREZWxheSA9IE1hdGgubWluKGNvbmZpZy5tYXhSZXRyeURlbGF5SW5NcywgZXhwb25lbnRpYWxEZWxheSk7XG4gICAgLy8gQWxsb3cgdGhlIGZpbmFsIHZhbHVlIHRvIGhhdmUgc29tZSBcImppdHRlclwiICh3aXRoaW4gNTAlIG9mIHRoZSBkZWxheSBzaXplKSBzb1xuICAgIC8vIHRoYXQgcmV0cmllcyBhY3Jvc3MgbXVsdGlwbGUgY2xpZW50cyBkb24ndCBvY2N1ciBzaW11bHRhbmVvdXNseS5cbiAgICBjb25zdCByZXRyeUFmdGVySW5NcyA9IGNsYW1wZWREZWxheSAvIDIgKyAoMCwgcmFuZG9tX2pzXzEuZ2V0UmFuZG9tSW50ZWdlckluY2x1c2l2ZSkoMCwgY2xhbXBlZERlbGF5IC8gMik7XG4gICAgcmV0dXJuIHsgcmV0cnlBZnRlckluTXMgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlbGF5LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY2FuY2VsYWJsZVByb21pc2VSYWNlID0gY2FuY2VsYWJsZVByb21pc2VSYWNlO1xuLyoqXG4gKiBwcm9taXNlLnJhY2UoKSB3cmFwcGVyIHRoYXQgYWJvcnRzIHJlc3Qgb2YgcHJvbWlzZXMgYXMgc29vbiBhcyB0aGUgZmlyc3QgcHJvbWlzZSBzZXR0bGVzLlxuICovXG5hc3luYyBmdW5jdGlvbiBjYW5jZWxhYmxlUHJvbWlzZVJhY2UoYWJvcnRhYmxlUHJvbWlzZUJ1aWxkZXJzLCBvcHRpb25zKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICBjb25zdCBhYm9ydGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIGZ1bmN0aW9uIGFib3J0SGFuZGxlcigpIHtcbiAgICAgICAgYWJvcnRlci5hYm9ydCgpO1xuICAgIH1cbiAgICAoX2EgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuYWJvcnRTaWduYWwpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgYWJvcnRIYW5kbGVyKTtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gYXdhaXQgUHJvbWlzZS5yYWNlKGFib3J0YWJsZVByb21pc2VCdWlsZGVycy5tYXAoKHApID0+IHAoeyBhYm9ydFNpZ25hbDogYWJvcnRlci5zaWduYWwgfSkpKTtcbiAgICB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIGFib3J0ZXIuYWJvcnQoKTtcbiAgICAgICAgKF9iID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmFib3J0U2lnbmFsKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIGFib3J0SGFuZGxlcik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YWJvcnRlclV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNPYmplY3QgPSBpc09iamVjdDtcbi8qKlxuICogSGVscGVyIHRvIGRldGVybWluZSB3aGVuIGFuIGlucHV0IGlzIGEgZ2VuZXJpYyBKUyBvYmplY3QuXG4gKiBAcmV0dXJucyB0cnVlIHdoZW4gaW5wdXQgaXMgYW4gb2JqZWN0IHR5cGUgdGhhdCBpcyBub3QgbnVsbCwgQXJyYXksIFJlZ0V4cCwgb3IgRGF0ZS5cbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QoaW5wdXQpIHtcbiAgICByZXR1cm4gKHR5cGVvZiBpbnB1dCA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICBpbnB1dCAhPT0gbnVsbCAmJlxuICAgICAgICAhQXJyYXkuaXNBcnJheShpbnB1dCkgJiZcbiAgICAgICAgIShpbnB1dCBpbnN0YW5jZW9mIFJlZ0V4cCkgJiZcbiAgICAgICAgIShpbnB1dCBpbnN0YW5jZW9mIERhdGUpKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW9iamVjdC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlzRXJyb3IgPSBpc0Vycm9yO1xuZXhwb3J0cy5nZXRFcnJvck1lc3NhZ2UgPSBnZXRFcnJvck1lc3NhZ2U7XG5jb25zdCBvYmplY3RfanNfMSA9IHJlcXVpcmUoXCIuL29iamVjdC5qc1wiKTtcbi8qKlxuICogVHlwZWd1YXJkIGZvciBhbiBlcnJvciBvYmplY3Qgc2hhcGUgKGhhcyBuYW1lIGFuZCBtZXNzYWdlKVxuICogQHBhcmFtIGUgLSBTb21ldGhpbmcgY2F1Z2h0IGJ5IGEgY2F0Y2ggY2xhdXNlLlxuICovXG5mdW5jdGlvbiBpc0Vycm9yKGUpIHtcbiAgICBpZiAoKDAsIG9iamVjdF9qc18xLmlzT2JqZWN0KShlKSkge1xuICAgICAgICBjb25zdCBoYXNOYW1lID0gdHlwZW9mIGUubmFtZSA9PT0gXCJzdHJpbmdcIjtcbiAgICAgICAgY29uc3QgaGFzTWVzc2FnZSA9IHR5cGVvZiBlLm1lc3NhZ2UgPT09IFwic3RyaW5nXCI7XG4gICAgICAgIHJldHVybiBoYXNOYW1lICYmIGhhc01lc3NhZ2U7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbi8qKlxuICogR2l2ZW4gd2hhdCBpcyB0aG91Z2h0IHRvIGJlIGFuIGVycm9yIG9iamVjdCwgcmV0dXJuIHRoZSBtZXNzYWdlIGlmIHBvc3NpYmxlLlxuICogSWYgdGhlIG1lc3NhZ2UgaXMgbWlzc2luZywgcmV0dXJucyBhIHN0cmluZ2lmaWVkIHZlcnNpb24gb2YgdGhlIGlucHV0LlxuICogQHBhcmFtIGUgLSBTb21ldGhpbmcgdGhyb3duIGZyb20gYSB0cnkgYmxvY2tcbiAqIEByZXR1cm5zIFRoZSBlcnJvciBtZXNzYWdlIG9yIGEgc3RyaW5nIG9mIHRoZSBpbnB1dFxuICovXG5mdW5jdGlvbiBnZXRFcnJvck1lc3NhZ2UoZSkge1xuICAgIGlmIChpc0Vycm9yKGUpKSB7XG4gICAgICAgIHJldHVybiBlLm1lc3NhZ2U7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBsZXQgc3RyaW5naWZpZWQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGUgPT09IFwib2JqZWN0XCIgJiYgZSkge1xuICAgICAgICAgICAgICAgIHN0cmluZ2lmaWVkID0gSlNPTi5zdHJpbmdpZnkoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdHJpbmdpZmllZCA9IFN0cmluZyhlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBzdHJpbmdpZmllZCA9IFwiW3VuYWJsZSB0byBzdHJpbmdpZnkgaW5wdXRdXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGBVbmtub3duIGVycm9yICR7c3RyaW5naWZpZWR9YDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1lcnJvci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNvbXB1dGVTaGEyNTZIbWFjID0gY29tcHV0ZVNoYTI1NkhtYWM7XG5leHBvcnRzLmNvbXB1dGVTaGEyNTZIYXNoID0gY29tcHV0ZVNoYTI1Nkhhc2g7XG5jb25zdCBjcnlwdG9fMSA9IHJlcXVpcmUoXCJjcnlwdG9cIik7XG4vKipcbiAqIEdlbmVyYXRlcyBhIFNIQS0yNTYgSE1BQyBzaWduYXR1cmUuXG4gKiBAcGFyYW0ga2V5IC0gVGhlIEhNQUMga2V5IHJlcHJlc2VudGVkIGFzIGEgYmFzZTY0IHN0cmluZywgdXNlZCB0byBnZW5lcmF0ZSB0aGUgY3J5cHRvZ3JhcGhpYyBITUFDIGhhc2guXG4gKiBAcGFyYW0gc3RyaW5nVG9TaWduIC0gVGhlIGRhdGEgdG8gYmUgc2lnbmVkLlxuICogQHBhcmFtIGVuY29kaW5nIC0gVGhlIHRleHR1YWwgZW5jb2RpbmcgdG8gdXNlIGZvciB0aGUgcmV0dXJuZWQgSE1BQyBkaWdlc3QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNvbXB1dGVTaGEyNTZIbWFjKGtleSwgc3RyaW5nVG9TaWduLCBlbmNvZGluZykge1xuICAgIGNvbnN0IGRlY29kZWRLZXkgPSBCdWZmZXIuZnJvbShrZXksIFwiYmFzZTY0XCIpO1xuICAgIHJldHVybiAoMCwgY3J5cHRvXzEuY3JlYXRlSG1hYykoXCJzaGEyNTZcIiwgZGVjb2RlZEtleSkudXBkYXRlKHN0cmluZ1RvU2lnbikuZGlnZXN0KGVuY29kaW5nKTtcbn1cbi8qKlxuICogR2VuZXJhdGVzIGEgU0hBLTI1NiBoYXNoLlxuICogQHBhcmFtIGNvbnRlbnQgLSBUaGUgZGF0YSB0byBiZSBpbmNsdWRlZCBpbiB0aGUgaGFzaC5cbiAqIEBwYXJhbSBlbmNvZGluZyAtIFRoZSB0ZXh0dWFsIGVuY29kaW5nIHRvIHVzZSBmb3IgdGhlIHJldHVybmVkIGhhc2guXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNvbXB1dGVTaGEyNTZIYXNoKGNvbnRlbnQsIGVuY29kaW5nKSB7XG4gICAgcmV0dXJuICgwLCBjcnlwdG9fMS5jcmVhdGVIYXNoKShcInNoYTI1NlwiKS51cGRhdGUoY29udGVudCkuZGlnZXN0KGVuY29kaW5nKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNoYTI1Ni5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlzRGVmaW5lZCA9IGlzRGVmaW5lZDtcbmV4cG9ydHMuaXNPYmplY3RXaXRoUHJvcGVydGllcyA9IGlzT2JqZWN0V2l0aFByb3BlcnRpZXM7XG5leHBvcnRzLm9iamVjdEhhc1Byb3BlcnR5ID0gb2JqZWN0SGFzUHJvcGVydHk7XG4vKipcbiAqIEhlbHBlciBUeXBlR3VhcmQgdGhhdCBjaGVja3MgaWYgc29tZXRoaW5nIGlzIGRlZmluZWQgb3Igbm90LlxuICogQHBhcmFtIHRoaW5nIC0gQW55dGhpbmdcbiAqL1xuZnVuY3Rpb24gaXNEZWZpbmVkKHRoaW5nKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGluZyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0aGluZyAhPT0gbnVsbDtcbn1cbi8qKlxuICogSGVscGVyIFR5cGVHdWFyZCB0aGF0IGNoZWNrcyBpZiB0aGUgaW5wdXQgaXMgYW4gb2JqZWN0IHdpdGggdGhlIHNwZWNpZmllZCBwcm9wZXJ0aWVzLlxuICogQHBhcmFtIHRoaW5nIC0gQW55dGhpbmcuXG4gKiBAcGFyYW0gcHJvcGVydGllcyAtIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0aWVzIHRoYXQgc2hvdWxkIGFwcGVhciBpbiB0aGUgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBpc09iamVjdFdpdGhQcm9wZXJ0aWVzKHRoaW5nLCBwcm9wZXJ0aWVzKSB7XG4gICAgaWYgKCFpc0RlZmluZWQodGhpbmcpIHx8IHR5cGVvZiB0aGluZyAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgcHJvcGVydGllcykge1xuICAgICAgICBpZiAoIW9iamVjdEhhc1Byb3BlcnR5KHRoaW5nLCBwcm9wZXJ0eSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cbi8qKlxuICogSGVscGVyIFR5cGVHdWFyZCB0aGF0IGNoZWNrcyBpZiB0aGUgaW5wdXQgaXMgYW4gb2JqZWN0IHdpdGggdGhlIHNwZWNpZmllZCBwcm9wZXJ0eS5cbiAqIEBwYXJhbSB0aGluZyAtIEFueSBvYmplY3QuXG4gKiBAcGFyYW0gcHJvcGVydHkgLSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBzaG91bGQgYXBwZWFyIGluIHRoZSBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIG9iamVjdEhhc1Byb3BlcnR5KHRoaW5nLCBwcm9wZXJ0eSkge1xuICAgIHJldHVybiAoaXNEZWZpbmVkKHRoaW5nKSAmJiB0eXBlb2YgdGhpbmcgPT09IFwib2JqZWN0XCIgJiYgcHJvcGVydHkgaW4gdGhpbmcpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dHlwZUd1YXJkcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG52YXIgX2E7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJhbmRvbVVVSUQgPSByYW5kb21VVUlEO1xuY29uc3QgY3J5cHRvXzEgPSByZXF1aXJlKFwiY3J5cHRvXCIpO1xuLy8gTk9URTogVGhpcyBpcyBhIHdvcmthcm91bmQgdW50aWwgd2UgY2FuIHVzZSBgZ2xvYmFsVGhpcy5jcnlwdG8ucmFuZG9tVVVJRGAgaW4gTm9kZS5qcyAxOSsuXG5jb25zdCB1dWlkRnVuY3Rpb24gPSB0eXBlb2YgKChfYSA9IGdsb2JhbFRoaXMgPT09IG51bGwgfHwgZ2xvYmFsVGhpcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogZ2xvYmFsVGhpcy5jcnlwdG8pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5yYW5kb21VVUlEKSA9PT0gXCJmdW5jdGlvblwiXG4gICAgPyBnbG9iYWxUaGlzLmNyeXB0by5yYW5kb21VVUlELmJpbmQoZ2xvYmFsVGhpcy5jcnlwdG8pXG4gICAgOiBjcnlwdG9fMS5yYW5kb21VVUlEO1xuLyoqXG4gKiBHZW5lcmF0ZWQgVW5pdmVyc2FsbHkgVW5pcXVlIElkZW50aWZpZXJcbiAqXG4gKiBAcmV0dXJucyBSRkM0MTIyIHY0IFVVSUQuXG4gKi9cbmZ1bmN0aW9uIHJhbmRvbVVVSUQoKSB7XG4gICAgcmV0dXJuIHV1aWRGdW5jdGlvbigpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXVpZFV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbnZhciBfYSwgX2IsIF9jLCBfZDtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNSZWFjdE5hdGl2ZSA9IGV4cG9ydHMuaXNOb2RlUnVudGltZSA9IGV4cG9ydHMuaXNOb2RlID0gZXhwb3J0cy5pc05vZGVMaWtlID0gZXhwb3J0cy5pc0J1biA9IGV4cG9ydHMuaXNEZW5vID0gZXhwb3J0cy5pc1dlYldvcmtlciA9IGV4cG9ydHMuaXNCcm93c2VyID0gdm9pZCAwO1xuLyoqXG4gKiBBIGNvbnN0YW50IHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGVudmlyb25tZW50IHRoZSBjb2RlIGlzIHJ1bm5pbmcgaXMgYSBXZWIgQnJvd3Nlci5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhenVyZS9henVyZS1zZGsvdHMtbm8td2luZG93XG5leHBvcnRzLmlzQnJvd3NlciA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIjtcbi8qKlxuICogQSBjb25zdGFudCB0aGF0IGluZGljYXRlcyB3aGV0aGVyIHRoZSBlbnZpcm9ubWVudCB0aGUgY29kZSBpcyBydW5uaW5nIGlzIGEgV2ViIFdvcmtlci5cbiAqL1xuZXhwb3J0cy5pc1dlYldvcmtlciA9IHR5cGVvZiBzZWxmID09PSBcIm9iamVjdFwiICYmXG4gICAgdHlwZW9mIChzZWxmID09PSBudWxsIHx8IHNlbGYgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlbGYuaW1wb3J0U2NyaXB0cykgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgICgoKF9hID0gc2VsZi5jb25zdHJ1Y3RvcikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm5hbWUpID09PSBcIkRlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlXCIgfHxcbiAgICAgICAgKChfYiA9IHNlbGYuY29uc3RydWN0b3IpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5uYW1lKSA9PT0gXCJTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVcIiB8fFxuICAgICAgICAoKF9jID0gc2VsZi5jb25zdHJ1Y3RvcikgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLm5hbWUpID09PSBcIlNoYXJlZFdvcmtlckdsb2JhbFNjb3BlXCIpO1xuLyoqXG4gKiBBIGNvbnN0YW50IHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGVudmlyb25tZW50IHRoZSBjb2RlIGlzIHJ1bm5pbmcgaXMgRGVuby5cbiAqL1xuZXhwb3J0cy5pc0Rlbm8gPSB0eXBlb2YgRGVubyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgIHR5cGVvZiBEZW5vLnZlcnNpb24gIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICB0eXBlb2YgRGVuby52ZXJzaW9uLmRlbm8gIT09IFwidW5kZWZpbmVkXCI7XG4vKipcbiAqIEEgY29uc3RhbnQgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgZW52aXJvbm1lbnQgdGhlIGNvZGUgaXMgcnVubmluZyBpcyBCdW4uc2guXG4gKi9cbmV4cG9ydHMuaXNCdW4gPSB0eXBlb2YgQnVuICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiBCdW4udmVyc2lvbiAhPT0gXCJ1bmRlZmluZWRcIjtcbi8qKlxuICogQSBjb25zdGFudCB0aGF0IGluZGljYXRlcyB3aGV0aGVyIHRoZSBlbnZpcm9ubWVudCB0aGUgY29kZSBpcyBydW5uaW5nIGlzIGEgTm9kZS5qcyBjb21wYXRpYmxlIGVudmlyb25tZW50LlxuICovXG5leHBvcnRzLmlzTm9kZUxpa2UgPSB0eXBlb2YgZ2xvYmFsVGhpcy5wcm9jZXNzICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgQm9vbGVhbihnbG9iYWxUaGlzLnByb2Nlc3MudmVyc2lvbikgJiZcbiAgICBCb29sZWFuKChfZCA9IGdsb2JhbFRoaXMucHJvY2Vzcy52ZXJzaW9ucykgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLm5vZGUpO1xuLyoqXG4gKiBBIGNvbnN0YW50IHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGVudmlyb25tZW50IHRoZSBjb2RlIGlzIHJ1bm5pbmcgaXMgYSBOb2RlLmpzIGNvbXBhdGlibGUgZW52aXJvbm1lbnQuXG4gKiBAZGVwcmVjYXRlZCBVc2UgYGlzTm9kZUxpa2VgIGluc3RlYWQuXG4gKi9cbmV4cG9ydHMuaXNOb2RlID0gZXhwb3J0cy5pc05vZGVMaWtlO1xuLyoqXG4gKiBBIGNvbnN0YW50IHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGVudmlyb25tZW50IHRoZSBjb2RlIGlzIHJ1bm5pbmcgaXMgTm9kZS5KUy5cbiAqL1xuZXhwb3J0cy5pc05vZGVSdW50aW1lID0gZXhwb3J0cy5pc05vZGVMaWtlICYmICFleHBvcnRzLmlzQnVuICYmICFleHBvcnRzLmlzRGVubztcbi8qKlxuICogQSBjb25zdGFudCB0aGF0IGluZGljYXRlcyB3aGV0aGVyIHRoZSBlbnZpcm9ubWVudCB0aGUgY29kZSBpcyBydW5uaW5nIGlzIGluIFJlYWN0LU5hdGl2ZS5cbiAqL1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0LW5hdGl2ZS9ibG9iL21haW4vcGFja2FnZXMvcmVhY3QtbmF0aXZlL0xpYnJhcmllcy9Db3JlL3NldFVwTmF2aWdhdG9yLmpzXG5leHBvcnRzLmlzUmVhY3ROYXRpdmUgPSB0eXBlb2YgbmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiICYmIChuYXZpZ2F0b3IgPT09IG51bGwgfHwgbmF2aWdhdG9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBuYXZpZ2F0b3IucHJvZHVjdCkgPT09IFwiUmVhY3ROYXRpdmVcIjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNoZWNrRW52aXJvbm1lbnQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy51aW50OEFycmF5VG9TdHJpbmcgPSB1aW50OEFycmF5VG9TdHJpbmc7XG5leHBvcnRzLnN0cmluZ1RvVWludDhBcnJheSA9IHN0cmluZ1RvVWludDhBcnJheTtcbi8qKlxuICogVGhlIGhlbHBlciB0aGF0IHRyYW5zZm9ybXMgYnl0ZXMgd2l0aCBzcGVjaWZpYyBjaGFyYWN0ZXIgZW5jb2RpbmcgaW50byBzdHJpbmdcbiAqIEBwYXJhbSBieXRlcyAtIHRoZSB1aW50OGFycmF5IGJ5dGVzXG4gKiBAcGFyYW0gZm9ybWF0IC0gdGhlIGZvcm1hdCB3ZSB1c2UgdG8gZW5jb2RlIHRoZSBieXRlXG4gKiBAcmV0dXJucyBhIHN0cmluZyBvZiB0aGUgZW5jb2RlZCBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gdWludDhBcnJheVRvU3RyaW5nKGJ5dGVzLCBmb3JtYXQpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oYnl0ZXMpLnRvU3RyaW5nKGZvcm1hdCk7XG59XG4vKipcbiAqIFRoZSBoZWxwZXIgdGhhdCB0cmFuc2Zvcm1zIHN0cmluZyB0byBzcGVjaWZpYyBjaGFyYWN0ZXIgZW5jb2RlZCBieXRlcyBhcnJheS5cbiAqIEBwYXJhbSB2YWx1ZSAtIHRoZSBzdHJpbmcgdG8gYmUgY29udmVydGVkXG4gKiBAcGFyYW0gZm9ybWF0IC0gdGhlIGZvcm1hdCB3ZSB1c2UgdG8gZGVjb2RlIHRoZSB2YWx1ZVxuICogQHJldHVybnMgYSB1aW50OGFycmF5XG4gKi9cbmZ1bmN0aW9uIHN0cmluZ1RvVWludDhBcnJheSh2YWx1ZSwgZm9ybWF0KSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHZhbHVlLCBmb3JtYXQpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Ynl0ZXNFbmNvZGluZy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnN0cmluZ1RvVWludDhBcnJheSA9IGV4cG9ydHMudWludDhBcnJheVRvU3RyaW5nID0gZXhwb3J0cy5pc1dlYldvcmtlciA9IGV4cG9ydHMuaXNSZWFjdE5hdGl2ZSA9IGV4cG9ydHMuaXNEZW5vID0gZXhwb3J0cy5pc05vZGVSdW50aW1lID0gZXhwb3J0cy5pc05vZGVMaWtlID0gZXhwb3J0cy5pc05vZGUgPSBleHBvcnRzLmlzQnVuID0gZXhwb3J0cy5pc0Jyb3dzZXIgPSBleHBvcnRzLnJhbmRvbVVVSUQgPSBleHBvcnRzLm9iamVjdEhhc1Byb3BlcnR5ID0gZXhwb3J0cy5pc09iamVjdFdpdGhQcm9wZXJ0aWVzID0gZXhwb3J0cy5pc0RlZmluZWQgPSBleHBvcnRzLmNvbXB1dGVTaGEyNTZIbWFjID0gZXhwb3J0cy5jb21wdXRlU2hhMjU2SGFzaCA9IGV4cG9ydHMuZ2V0RXJyb3JNZXNzYWdlID0gZXhwb3J0cy5pc0Vycm9yID0gZXhwb3J0cy5pc09iamVjdCA9IGV4cG9ydHMuZ2V0UmFuZG9tSW50ZWdlckluY2x1c2l2ZSA9IGV4cG9ydHMuY3JlYXRlQWJvcnRhYmxlUHJvbWlzZSA9IGV4cG9ydHMuY2FuY2VsYWJsZVByb21pc2VSYWNlID0gZXhwb3J0cy5jYWxjdWxhdGVSZXRyeURlbGF5ID0gZXhwb3J0cy5kZWxheSA9IHZvaWQgMDtcbnZhciBkZWxheV9qc18xID0gcmVxdWlyZShcIi4vZGVsYXkuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZWxheVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZGVsYXlfanNfMS5kZWxheTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNhbGN1bGF0ZVJldHJ5RGVsYXlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRlbGF5X2pzXzEuY2FsY3VsYXRlUmV0cnlEZWxheTsgfSB9KTtcbnZhciBhYm9ydGVyVXRpbHNfanNfMSA9IHJlcXVpcmUoXCIuL2Fib3J0ZXJVdGlscy5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNhbmNlbGFibGVQcm9taXNlUmFjZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYWJvcnRlclV0aWxzX2pzXzEuY2FuY2VsYWJsZVByb21pc2VSYWNlOyB9IH0pO1xudmFyIGNyZWF0ZUFib3J0YWJsZVByb21pc2VfanNfMSA9IHJlcXVpcmUoXCIuL2NyZWF0ZUFib3J0YWJsZVByb21pc2UuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVBYm9ydGFibGVQcm9taXNlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjcmVhdGVBYm9ydGFibGVQcm9taXNlX2pzXzEuY3JlYXRlQWJvcnRhYmxlUHJvbWlzZTsgfSB9KTtcbnZhciByYW5kb21fanNfMSA9IHJlcXVpcmUoXCIuL3JhbmRvbS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImdldFJhbmRvbUludGVnZXJJbmNsdXNpdmVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJhbmRvbV9qc18xLmdldFJhbmRvbUludGVnZXJJbmNsdXNpdmU7IH0gfSk7XG52YXIgb2JqZWN0X2pzXzEgPSByZXF1aXJlKFwiLi9vYmplY3QuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc09iamVjdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gb2JqZWN0X2pzXzEuaXNPYmplY3Q7IH0gfSk7XG52YXIgZXJyb3JfanNfMSA9IHJlcXVpcmUoXCIuL2Vycm9yLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNFcnJvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZXJyb3JfanNfMS5pc0Vycm9yOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZ2V0RXJyb3JNZXNzYWdlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBlcnJvcl9qc18xLmdldEVycm9yTWVzc2FnZTsgfSB9KTtcbnZhciBzaGEyNTZfanNfMSA9IHJlcXVpcmUoXCIuL3NoYTI1Ni5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNvbXB1dGVTaGEyNTZIYXNoXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzaGEyNTZfanNfMS5jb21wdXRlU2hhMjU2SGFzaDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNvbXB1dGVTaGEyNTZIbWFjXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzaGEyNTZfanNfMS5jb21wdXRlU2hhMjU2SG1hYzsgfSB9KTtcbnZhciB0eXBlR3VhcmRzX2pzXzEgPSByZXF1aXJlKFwiLi90eXBlR3VhcmRzLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNEZWZpbmVkXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0eXBlR3VhcmRzX2pzXzEuaXNEZWZpbmVkOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNPYmplY3RXaXRoUHJvcGVydGllc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZUd1YXJkc19qc18xLmlzT2JqZWN0V2l0aFByb3BlcnRpZXM7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJvYmplY3RIYXNQcm9wZXJ0eVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZUd1YXJkc19qc18xLm9iamVjdEhhc1Byb3BlcnR5OyB9IH0pO1xudmFyIHV1aWRVdGlsc19qc18xID0gcmVxdWlyZShcIi4vdXVpZFV0aWxzLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmFuZG9tVVVJRFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdXVpZFV0aWxzX2pzXzEucmFuZG9tVVVJRDsgfSB9KTtcbnZhciBjaGVja0Vudmlyb25tZW50X2pzXzEgPSByZXF1aXJlKFwiLi9jaGVja0Vudmlyb25tZW50LmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNCcm93c2VyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjaGVja0Vudmlyb25tZW50X2pzXzEuaXNCcm93c2VyOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNCdW5cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNoZWNrRW52aXJvbm1lbnRfanNfMS5pc0J1bjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzTm9kZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY2hlY2tFbnZpcm9ubWVudF9qc18xLmlzTm9kZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzTm9kZUxpa2VcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNoZWNrRW52aXJvbm1lbnRfanNfMS5pc05vZGVMaWtlOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNOb2RlUnVudGltZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY2hlY2tFbnZpcm9ubWVudF9qc18xLmlzTm9kZVJ1bnRpbWU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0Rlbm9cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNoZWNrRW52aXJvbm1lbnRfanNfMS5pc0Rlbm87IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc1JlYWN0TmF0aXZlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjaGVja0Vudmlyb25tZW50X2pzXzEuaXNSZWFjdE5hdGl2ZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzV2ViV29ya2VyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjaGVja0Vudmlyb25tZW50X2pzXzEuaXNXZWJXb3JrZXI7IH0gfSk7XG52YXIgYnl0ZXNFbmNvZGluZ19qc18xID0gcmVxdWlyZShcIi4vYnl0ZXNFbmNvZGluZy5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInVpbnQ4QXJyYXlUb1N0cmluZ1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYnl0ZXNFbmNvZGluZ19qc18xLnVpbnQ4QXJyYXlUb1N0cmluZzsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0cmluZ1RvVWludDhBcnJheVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYnl0ZXNFbmNvZGluZ19qc18xLnN0cmluZ1RvVWludDhBcnJheTsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU2FuaXRpemVyID0gdm9pZCAwO1xuY29uc3QgY29yZV91dGlsXzEgPSByZXF1aXJlKFwiQGF6dXJlL2NvcmUtdXRpbFwiKTtcbmNvbnN0IFJlZGFjdGVkU3RyaW5nID0gXCJSRURBQ1RFRFwiO1xuLy8gTWFrZSBzdXJlIHRoaXMgbGlzdCBpcyB1cC10by1kYXRlIHdpdGggdGhlIG9uZSB1bmRlciBjb3JlL2xvZ2dlci9SZWFkbWUjS2V5Y29uY2VwdHNcbmNvbnN0IGRlZmF1bHRBbGxvd2VkSGVhZGVyTmFtZXMgPSBbXG4gICAgXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgXCJ4LW1zLXJldHVybi1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgIFwieC1tcy11c2VyYWdlbnRcIixcbiAgICBcIngtbXMtY29ycmVsYXRpb24tcmVxdWVzdC1pZFwiLFxuICAgIFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgXCJjbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgIFwibXMtY3ZcIixcbiAgICBcInJldHVybi1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgIFwidHJhY2VwYXJlbnRcIixcbiAgICBcIkFjY2Vzcy1Db250cm9sLUFsbG93LUNyZWRlbnRpYWxzXCIsXG4gICAgXCJBY2Nlc3MtQ29udHJvbC1BbGxvdy1IZWFkZXJzXCIsXG4gICAgXCJBY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzXCIsXG4gICAgXCJBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW5cIixcbiAgICBcIkFjY2Vzcy1Db250cm9sLUV4cG9zZS1IZWFkZXJzXCIsXG4gICAgXCJBY2Nlc3MtQ29udHJvbC1NYXgtQWdlXCIsXG4gICAgXCJBY2Nlc3MtQ29udHJvbC1SZXF1ZXN0LUhlYWRlcnNcIixcbiAgICBcIkFjY2Vzcy1Db250cm9sLVJlcXVlc3QtTWV0aG9kXCIsXG4gICAgXCJPcmlnaW5cIixcbiAgICBcIkFjY2VwdFwiLFxuICAgIFwiQWNjZXB0LUVuY29kaW5nXCIsXG4gICAgXCJDYWNoZS1Db250cm9sXCIsXG4gICAgXCJDb25uZWN0aW9uXCIsXG4gICAgXCJDb250ZW50LUxlbmd0aFwiLFxuICAgIFwiQ29udGVudC1UeXBlXCIsXG4gICAgXCJEYXRlXCIsXG4gICAgXCJFVGFnXCIsXG4gICAgXCJFeHBpcmVzXCIsXG4gICAgXCJJZi1NYXRjaFwiLFxuICAgIFwiSWYtTW9kaWZpZWQtU2luY2VcIixcbiAgICBcIklmLU5vbmUtTWF0Y2hcIixcbiAgICBcIklmLVVubW9kaWZpZWQtU2luY2VcIixcbiAgICBcIkxhc3QtTW9kaWZpZWRcIixcbiAgICBcIlByYWdtYVwiLFxuICAgIFwiUmVxdWVzdC1JZFwiLFxuICAgIFwiUmV0cnktQWZ0ZXJcIixcbiAgICBcIlNlcnZlclwiLFxuICAgIFwiVHJhbnNmZXItRW5jb2RpbmdcIixcbiAgICBcIlVzZXItQWdlbnRcIixcbiAgICBcIldXVy1BdXRoZW50aWNhdGVcIixcbl07XG5jb25zdCBkZWZhdWx0QWxsb3dlZFF1ZXJ5UGFyYW1ldGVycyA9IFtcImFwaS12ZXJzaW9uXCJdO1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuY2xhc3MgU2FuaXRpemVyIHtcbiAgICBjb25zdHJ1Y3Rvcih7IGFkZGl0aW9uYWxBbGxvd2VkSGVhZGVyTmFtZXM6IGFsbG93ZWRIZWFkZXJOYW1lcyA9IFtdLCBhZGRpdGlvbmFsQWxsb3dlZFF1ZXJ5UGFyYW1ldGVyczogYWxsb3dlZFF1ZXJ5UGFyYW1ldGVycyA9IFtdLCB9ID0ge30pIHtcbiAgICAgICAgYWxsb3dlZEhlYWRlck5hbWVzID0gZGVmYXVsdEFsbG93ZWRIZWFkZXJOYW1lcy5jb25jYXQoYWxsb3dlZEhlYWRlck5hbWVzKTtcbiAgICAgICAgYWxsb3dlZFF1ZXJ5UGFyYW1ldGVycyA9IGRlZmF1bHRBbGxvd2VkUXVlcnlQYXJhbWV0ZXJzLmNvbmNhdChhbGxvd2VkUXVlcnlQYXJhbWV0ZXJzKTtcbiAgICAgICAgdGhpcy5hbGxvd2VkSGVhZGVyTmFtZXMgPSBuZXcgU2V0KGFsbG93ZWRIZWFkZXJOYW1lcy5tYXAoKG4pID0+IG4udG9Mb3dlckNhc2UoKSkpO1xuICAgICAgICB0aGlzLmFsbG93ZWRRdWVyeVBhcmFtZXRlcnMgPSBuZXcgU2V0KGFsbG93ZWRRdWVyeVBhcmFtZXRlcnMubWFwKChwKSA9PiBwLnRvTG93ZXJDYXNlKCkpKTtcbiAgICB9XG4gICAgc2FuaXRpemUob2JqKSB7XG4gICAgICAgIGNvbnN0IHNlZW4gPSBuZXcgU2V0KCk7XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShvYmosIChrZXksIHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAvLyBFbnN1cmUgRXJyb3JzIGluY2x1ZGUgdGhlaXIgaW50ZXJlc3Rpbmcgbm9uLWVudW1lcmFibGUgbWVtYmVyc1xuICAgICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCB2YWx1ZSksIHsgbmFtZTogdmFsdWUubmFtZSwgbWVzc2FnZTogdmFsdWUubWVzc2FnZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChrZXkgPT09IFwiaGVhZGVyc1wiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2FuaXRpemVIZWFkZXJzKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSA9PT0gXCJ1cmxcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNhbml0aXplVXJsKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSA9PT0gXCJxdWVyeVwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2FuaXRpemVRdWVyeSh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChrZXkgPT09IFwiYm9keVwiKSB7XG4gICAgICAgICAgICAgICAgLy8gRG9uJ3QgbG9nIHRoZSByZXF1ZXN0IGJvZHlcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoa2V5ID09PSBcInJlc3BvbnNlXCIpIHtcbiAgICAgICAgICAgICAgICAvLyBEb24ndCBsb2cgcmVzcG9uc2UgYWdhaW5cbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoa2V5ID09PSBcIm9wZXJhdGlvblNwZWNcIikge1xuICAgICAgICAgICAgICAgIC8vIFdoZW4gdXNpbmcgc2VuZE9wZXJhdGlvblJlcXVlc3QsIHRoZSByZXF1ZXN0IGNhcnJpZXMgYSBtYXNzaXZlXG4gICAgICAgICAgICAgICAgLy8gZmllbGQgd2l0aCB0aGUgYXV0b3Jlc3Qgc3BlYy4gTm8gbmVlZCB0byBsb2cgaXQuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpIHx8ICgwLCBjb3JlX3V0aWxfMS5pc09iamVjdCkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNlZW4uaGFzKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJbQ2lyY3VsYXJdXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNlZW4uYWRkKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSwgMik7XG4gICAgfVxuICAgIHNhbml0aXplVXJsKHZhbHVlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIgfHwgdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IFwiXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHZhbHVlKTtcbiAgICAgICAgaWYgKCF1cmwuc2VhcmNoKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBba2V5XSBvZiB1cmwuc2VhcmNoUGFyYW1zKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuYWxsb3dlZFF1ZXJ5UGFyYW1ldGVycy5oYXMoa2V5LnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICAgICAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoa2V5LCBSZWRhY3RlZFN0cmluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVybC50b1N0cmluZygpO1xuICAgIH1cbiAgICBzYW5pdGl6ZUhlYWRlcnMob2JqKSB7XG4gICAgICAgIGNvbnN0IHNhbml0aXplZCA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhvYmopKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5hbGxvd2VkSGVhZGVyTmFtZXMuaGFzKGtleS50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgICAgICAgICAgIHNhbml0aXplZFtrZXldID0gb2JqW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzYW5pdGl6ZWRba2V5XSA9IFJlZGFjdGVkU3RyaW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzYW5pdGl6ZWQ7XG4gICAgfVxuICAgIHNhbml0aXplUXVlcnkodmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNhbml0aXplZCA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGsgb2YgT2JqZWN0LmtleXModmFsdWUpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5hbGxvd2VkUXVlcnlQYXJhbWV0ZXJzLmhhcyhrLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICAgICAgc2FuaXRpemVkW2tdID0gdmFsdWVba107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzYW5pdGl6ZWRba10gPSBSZWRhY3RlZFN0cmluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2FuaXRpemVkO1xuICAgIH1cbn1cbmV4cG9ydHMuU2FuaXRpemVyID0gU2FuaXRpemVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2FuaXRpemVyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubG9nUG9saWN5TmFtZSA9IHZvaWQgMDtcbmV4cG9ydHMubG9nUG9saWN5ID0gbG9nUG9saWN5O1xuY29uc3QgbG9nX2pzXzEgPSByZXF1aXJlKFwiLi4vbG9nLmpzXCIpO1xuY29uc3Qgc2FuaXRpemVyX2pzXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9zYW5pdGl6ZXIuanNcIik7XG4vKipcbiAqIFRoZSBwcm9ncmFtbWF0aWMgaWRlbnRpZmllciBvZiB0aGUgbG9nUG9saWN5LlxuICovXG5leHBvcnRzLmxvZ1BvbGljeU5hbWUgPSBcImxvZ1BvbGljeVwiO1xuLyoqXG4gKiBBIHBvbGljeSB0aGF0IGxvZ3MgYWxsIHJlcXVlc3RzIGFuZCByZXNwb25zZXMuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gY29uZmlndXJlIGxvZ1BvbGljeS5cbiAqL1xuZnVuY3Rpb24gbG9nUG9saWN5KG9wdGlvbnMgPSB7fSkge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCBsb2dnZXIgPSAoX2EgPSBvcHRpb25zLmxvZ2dlcikgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogbG9nX2pzXzEubG9nZ2VyLmluZm87XG4gICAgY29uc3Qgc2FuaXRpemVyID0gbmV3IHNhbml0aXplcl9qc18xLlNhbml0aXplcih7XG4gICAgICAgIGFkZGl0aW9uYWxBbGxvd2VkSGVhZGVyTmFtZXM6IG9wdGlvbnMuYWRkaXRpb25hbEFsbG93ZWRIZWFkZXJOYW1lcyxcbiAgICAgICAgYWRkaXRpb25hbEFsbG93ZWRRdWVyeVBhcmFtZXRlcnM6IG9wdGlvbnMuYWRkaXRpb25hbEFsbG93ZWRRdWVyeVBhcmFtZXRlcnMsXG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogZXhwb3J0cy5sb2dQb2xpY3lOYW1lLFxuICAgICAgICBhc3luYyBzZW5kUmVxdWVzdChyZXF1ZXN0LCBuZXh0KSB7XG4gICAgICAgICAgICBpZiAoIWxvZ2dlci5lbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5leHQocmVxdWVzdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsb2dnZXIoYFJlcXVlc3Q6ICR7c2FuaXRpemVyLnNhbml0aXplKHJlcXVlc3QpfWApO1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBuZXh0KHJlcXVlc3QpO1xuICAgICAgICAgICAgbG9nZ2VyKGBSZXNwb25zZSBzdGF0dXMgY29kZTogJHtyZXNwb25zZS5zdGF0dXN9YCk7XG4gICAgICAgICAgICBsb2dnZXIoYEhlYWRlcnM6ICR7c2FuaXRpemVyLnNhbml0aXplKHJlc3BvbnNlLmhlYWRlcnMpfWApO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgICB9LFxuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1sb2dQb2xpY3kuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yZWRpcmVjdFBvbGljeU5hbWUgPSB2b2lkIDA7XG5leHBvcnRzLnJlZGlyZWN0UG9saWN5ID0gcmVkaXJlY3RQb2xpY3k7XG4vKipcbiAqIFRoZSBwcm9ncmFtbWF0aWMgaWRlbnRpZmllciBvZiB0aGUgcmVkaXJlY3RQb2xpY3kuXG4gKi9cbmV4cG9ydHMucmVkaXJlY3RQb2xpY3lOYW1lID0gXCJyZWRpcmVjdFBvbGljeVwiO1xuLyoqXG4gKiBNZXRob2RzIHRoYXQgYXJlIGFsbG93ZWQgdG8gZm9sbG93IHJlZGlyZWN0cyAzMDEgYW5kIDMwMlxuICovXG5jb25zdCBhbGxvd2VkUmVkaXJlY3QgPSBbXCJHRVRcIiwgXCJIRUFEXCJdO1xuLyoqXG4gKiBBIHBvbGljeSB0byBmb2xsb3cgTG9jYXRpb24gaGVhZGVycyBmcm9tIHRoZSBzZXJ2ZXIgaW4gb3JkZXJcbiAqIHRvIHN1cHBvcnQgc2VydmVyLXNpZGUgcmVkaXJlY3Rpb24uXG4gKiBJbiB0aGUgYnJvd3NlciwgdGhpcyBwb2xpY3kgaXMgbm90IHVzZWQuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gY29udHJvbCBwb2xpY3kgYmVoYXZpb3IuXG4gKi9cbmZ1bmN0aW9uIHJlZGlyZWN0UG9saWN5KG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHsgbWF4UmV0cmllcyA9IDIwIH0gPSBvcHRpb25zO1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGV4cG9ydHMucmVkaXJlY3RQb2xpY3lOYW1lLFxuICAgICAgICBhc3luYyBzZW5kUmVxdWVzdChyZXF1ZXN0LCBuZXh0KSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG5leHQocmVxdWVzdCk7XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlUmVkaXJlY3QobmV4dCwgcmVzcG9uc2UsIG1heFJldHJpZXMpO1xuICAgICAgICB9LFxuICAgIH07XG59XG5hc3luYyBmdW5jdGlvbiBoYW5kbGVSZWRpcmVjdChuZXh0LCByZXNwb25zZSwgbWF4UmV0cmllcywgY3VycmVudFJldHJpZXMgPSAwKSB7XG4gICAgY29uc3QgeyByZXF1ZXN0LCBzdGF0dXMsIGhlYWRlcnMgfSA9IHJlc3BvbnNlO1xuICAgIGNvbnN0IGxvY2F0aW9uSGVhZGVyID0gaGVhZGVycy5nZXQoXCJsb2NhdGlvblwiKTtcbiAgICBpZiAobG9jYXRpb25IZWFkZXIgJiZcbiAgICAgICAgKHN0YXR1cyA9PT0gMzAwIHx8XG4gICAgICAgICAgICAoc3RhdHVzID09PSAzMDEgJiYgYWxsb3dlZFJlZGlyZWN0LmluY2x1ZGVzKHJlcXVlc3QubWV0aG9kKSkgfHxcbiAgICAgICAgICAgIChzdGF0dXMgPT09IDMwMiAmJiBhbGxvd2VkUmVkaXJlY3QuaW5jbHVkZXMocmVxdWVzdC5tZXRob2QpKSB8fFxuICAgICAgICAgICAgKHN0YXR1cyA9PT0gMzAzICYmIHJlcXVlc3QubWV0aG9kID09PSBcIlBPU1RcIikgfHxcbiAgICAgICAgICAgIHN0YXR1cyA9PT0gMzA3KSAmJlxuICAgICAgICBjdXJyZW50UmV0cmllcyA8IG1heFJldHJpZXMpIHtcbiAgICAgICAgY29uc3QgdXJsID0gbmV3IFVSTChsb2NhdGlvbkhlYWRlciwgcmVxdWVzdC51cmwpO1xuICAgICAgICByZXF1ZXN0LnVybCA9IHVybC50b1N0cmluZygpO1xuICAgICAgICAvLyBQT1NUIHJlcXVlc3Qgd2l0aCBTdGF0dXMgY29kZSAzMDMgc2hvdWxkIGJlIGNvbnZlcnRlZCBpbnRvIGFcbiAgICAgICAgLy8gcmVkaXJlY3RlZCBHRVQgcmVxdWVzdCBpZiB0aGUgcmVkaXJlY3QgdXJsIGlzIHByZXNlbnQgaW4gdGhlIGxvY2F0aW9uIGhlYWRlclxuICAgICAgICBpZiAoc3RhdHVzID09PSAzMDMpIHtcbiAgICAgICAgICAgIHJlcXVlc3QubWV0aG9kID0gXCJHRVRcIjtcbiAgICAgICAgICAgIHJlcXVlc3QuaGVhZGVycy5kZWxldGUoXCJDb250ZW50LUxlbmd0aFwiKTtcbiAgICAgICAgICAgIGRlbGV0ZSByZXF1ZXN0LmJvZHk7XG4gICAgICAgIH1cbiAgICAgICAgcmVxdWVzdC5oZWFkZXJzLmRlbGV0ZShcIkF1dGhvcml6YXRpb25cIik7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IG5leHQocmVxdWVzdCk7XG4gICAgICAgIHJldHVybiBoYW5kbGVSZWRpcmVjdChuZXh0LCByZXMsIG1heFJldHJpZXMsIGN1cnJlbnRSZXRyaWVzICsgMSk7XG4gICAgfVxuICAgIHJldHVybiByZXNwb25zZTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlZGlyZWN0UG9saWN5LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0SGVhZGVyTmFtZSA9IGdldEhlYWRlck5hbWU7XG5leHBvcnRzLnNldFBsYXRmb3JtU3BlY2lmaWNEYXRhID0gc2V0UGxhdGZvcm1TcGVjaWZpY0RhdGE7XG5jb25zdCB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xuY29uc3Qgb3MgPSB0c2xpYl8xLl9faW1wb3J0U3RhcihyZXF1aXJlKFwibm9kZTpvc1wiKSk7XG5jb25zdCBwcm9jZXNzID0gdHNsaWJfMS5fX2ltcG9ydFN0YXIocmVxdWlyZShcIm5vZGU6cHJvY2Vzc1wiKSk7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBnZXRIZWFkZXJOYW1lKCkge1xuICAgIHJldHVybiBcIlVzZXItQWdlbnRcIjtcbn1cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNldFBsYXRmb3JtU3BlY2lmaWNEYXRhKG1hcCkge1xuICAgIGlmIChwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnMpIHtcbiAgICAgICAgY29uc3QgdmVyc2lvbnMgPSBwcm9jZXNzLnZlcnNpb25zO1xuICAgICAgICBpZiAodmVyc2lvbnMuYnVuKSB7XG4gICAgICAgICAgICBtYXAuc2V0KFwiQnVuXCIsIHZlcnNpb25zLmJ1bik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodmVyc2lvbnMuZGVubykge1xuICAgICAgICAgICAgbWFwLnNldChcIkRlbm9cIiwgdmVyc2lvbnMuZGVubyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodmVyc2lvbnMubm9kZSkge1xuICAgICAgICAgICAgbWFwLnNldChcIk5vZGVcIiwgdmVyc2lvbnMubm9kZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbWFwLnNldChcIk9TXCIsIGAoJHtvcy5hcmNoKCl9LSR7b3MudHlwZSgpfS0ke29zLnJlbGVhc2UoKX0pYCk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD11c2VyQWdlbnRQbGF0Zm9ybS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkRFRkFVTFRfUkVUUllfUE9MSUNZX0NPVU5UID0gZXhwb3J0cy5TREtfVkVSU0lPTiA9IHZvaWQgMDtcbmV4cG9ydHMuU0RLX1ZFUlNJT04gPSBcIjEuMTcuMFwiO1xuZXhwb3J0cy5ERUZBVUxUX1JFVFJZX1BPTElDWV9DT1VOVCA9IDM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25zdGFudHMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRVc2VyQWdlbnRIZWFkZXJOYW1lID0gZ2V0VXNlckFnZW50SGVhZGVyTmFtZTtcbmV4cG9ydHMuZ2V0VXNlckFnZW50VmFsdWUgPSBnZXRVc2VyQWdlbnRWYWx1ZTtcbmNvbnN0IHVzZXJBZ2VudFBsYXRmb3JtX2pzXzEgPSByZXF1aXJlKFwiLi91c2VyQWdlbnRQbGF0Zm9ybS5qc1wiKTtcbmNvbnN0IGNvbnN0YW50c19qc18xID0gcmVxdWlyZShcIi4uL2NvbnN0YW50cy5qc1wiKTtcbmZ1bmN0aW9uIGdldFVzZXJBZ2VudFN0cmluZyh0ZWxlbWV0cnlJbmZvKSB7XG4gICAgY29uc3QgcGFydHMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiB0ZWxlbWV0cnlJbmZvKSB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gdmFsdWUgPyBgJHtrZXl9LyR7dmFsdWV9YCA6IGtleTtcbiAgICAgICAgcGFydHMucHVzaCh0b2tlbik7XG4gICAgfVxuICAgIHJldHVybiBwYXJ0cy5qb2luKFwiIFwiKTtcbn1cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIGdldFVzZXJBZ2VudEhlYWRlck5hbWUoKSB7XG4gICAgcmV0dXJuICgwLCB1c2VyQWdlbnRQbGF0Zm9ybV9qc18xLmdldEhlYWRlck5hbWUpKCk7XG59XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRVc2VyQWdlbnRWYWx1ZShwcmVmaXgpIHtcbiAgICBjb25zdCBydW50aW1lSW5mbyA9IG5ldyBNYXAoKTtcbiAgICBydW50aW1lSW5mby5zZXQoXCJjb3JlLXJlc3QtcGlwZWxpbmVcIiwgY29uc3RhbnRzX2pzXzEuU0RLX1ZFUlNJT04pO1xuICAgIGF3YWl0ICgwLCB1c2VyQWdlbnRQbGF0Zm9ybV9qc18xLnNldFBsYXRmb3JtU3BlY2lmaWNEYXRhKShydW50aW1lSW5mbyk7XG4gICAgY29uc3QgZGVmYXVsdEFnZW50ID0gZ2V0VXNlckFnZW50U3RyaW5nKHJ1bnRpbWVJbmZvKTtcbiAgICBjb25zdCB1c2VyQWdlbnRWYWx1ZSA9IHByZWZpeCA/IGAke3ByZWZpeH0gJHtkZWZhdWx0QWdlbnR9YCA6IGRlZmF1bHRBZ2VudDtcbiAgICByZXR1cm4gdXNlckFnZW50VmFsdWU7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD11c2VyQWdlbnQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy51c2VyQWdlbnRQb2xpY3lOYW1lID0gdm9pZCAwO1xuZXhwb3J0cy51c2VyQWdlbnRQb2xpY3kgPSB1c2VyQWdlbnRQb2xpY3k7XG5jb25zdCB1c2VyQWdlbnRfanNfMSA9IHJlcXVpcmUoXCIuLi91dGlsL3VzZXJBZ2VudC5qc1wiKTtcbmNvbnN0IFVzZXJBZ2VudEhlYWRlck5hbWUgPSAoMCwgdXNlckFnZW50X2pzXzEuZ2V0VXNlckFnZW50SGVhZGVyTmFtZSkoKTtcbi8qKlxuICogVGhlIHByb2dyYW1tYXRpYyBpZGVudGlmaWVyIG9mIHRoZSB1c2VyQWdlbnRQb2xpY3kuXG4gKi9cbmV4cG9ydHMudXNlckFnZW50UG9saWN5TmFtZSA9IFwidXNlckFnZW50UG9saWN5XCI7XG4vKipcbiAqIEEgcG9saWN5IHRoYXQgc2V0cyB0aGUgVXNlci1BZ2VudCBoZWFkZXIgKG9yIGVxdWl2YWxlbnQpIHRvIHJlZmxlY3RcbiAqIHRoZSBsaWJyYXJ5IHZlcnNpb24uXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gY3VzdG9taXplIHRoZSB1c2VyIGFnZW50IHZhbHVlLlxuICovXG5mdW5jdGlvbiB1c2VyQWdlbnRQb2xpY3kob3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgdXNlckFnZW50VmFsdWUgPSAoMCwgdXNlckFnZW50X2pzXzEuZ2V0VXNlckFnZW50VmFsdWUpKG9wdGlvbnMudXNlckFnZW50UHJlZml4KTtcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBleHBvcnRzLnVzZXJBZ2VudFBvbGljeU5hbWUsXG4gICAgICAgIGFzeW5jIHNlbmRSZXF1ZXN0KHJlcXVlc3QsIG5leHQpIHtcbiAgICAgICAgICAgIGlmICghcmVxdWVzdC5oZWFkZXJzLmhhcyhVc2VyQWdlbnRIZWFkZXJOYW1lKSkge1xuICAgICAgICAgICAgICAgIHJlcXVlc3QuaGVhZGVycy5zZXQoVXNlckFnZW50SGVhZGVyTmFtZSwgYXdhaXQgdXNlckFnZW50VmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5leHQocmVxdWVzdCk7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzZXJBZ2VudFBvbGljeS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlzTm9kZVJlYWRhYmxlU3RyZWFtID0gaXNOb2RlUmVhZGFibGVTdHJlYW07XG5leHBvcnRzLmlzV2ViUmVhZGFibGVTdHJlYW0gPSBpc1dlYlJlYWRhYmxlU3RyZWFtO1xuZXhwb3J0cy5pc1JlYWRhYmxlU3RyZWFtID0gaXNSZWFkYWJsZVN0cmVhbTtcbmV4cG9ydHMuaXNCbG9iID0gaXNCbG9iO1xuZnVuY3Rpb24gaXNOb2RlUmVhZGFibGVTdHJlYW0oeCkge1xuICAgIHJldHVybiBCb29sZWFuKHggJiYgdHlwZW9mIHhbXCJwaXBlXCJdID09PSBcImZ1bmN0aW9uXCIpO1xufVxuZnVuY3Rpb24gaXNXZWJSZWFkYWJsZVN0cmVhbSh4KSB7XG4gICAgcmV0dXJuIEJvb2xlYW4oeCAmJlxuICAgICAgICB0eXBlb2YgeC5nZXRSZWFkZXIgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgICAgICB0eXBlb2YgeC50ZWUgPT09IFwiZnVuY3Rpb25cIik7XG59XG5mdW5jdGlvbiBpc1JlYWRhYmxlU3RyZWFtKHgpIHtcbiAgICByZXR1cm4gaXNOb2RlUmVhZGFibGVTdHJlYW0oeCkgfHwgaXNXZWJSZWFkYWJsZVN0cmVhbSh4KTtcbn1cbmZ1bmN0aW9uIGlzQmxvYih4KSB7XG4gICAgcmV0dXJuIHR5cGVvZiB4LnN0cmVhbSA9PT0gXCJmdW5jdGlvblwiO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dHlwZUd1YXJkcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldFJhd0NvbnRlbnQgPSBnZXRSYXdDb250ZW50O1xuZXhwb3J0cy5jcmVhdGVGaWxlRnJvbVN0cmVhbSA9IGNyZWF0ZUZpbGVGcm9tU3RyZWFtO1xuZXhwb3J0cy5jcmVhdGVGaWxlID0gY3JlYXRlRmlsZTtcbmNvbnN0IGNvcmVfdXRpbF8xID0gcmVxdWlyZShcIkBhenVyZS9jb3JlLXV0aWxcIik7XG5jb25zdCB0eXBlR3VhcmRzX2pzXzEgPSByZXF1aXJlKFwiLi90eXBlR3VhcmRzLmpzXCIpO1xuY29uc3QgdW5pbXBsZW1lbnRlZE1ldGhvZHMgPSB7XG4gICAgYXJyYXlCdWZmZXI6ICgpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm90IGltcGxlbWVudGVkXCIpO1xuICAgIH0sXG4gICAgc2xpY2U6ICgpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm90IGltcGxlbWVudGVkXCIpO1xuICAgIH0sXG4gICAgdGV4dDogKCkgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJOb3QgaW1wbGVtZW50ZWRcIik7XG4gICAgfSxcbn07XG4vKipcbiAqIFByaXZhdGUgc3ltYm9sIHVzZWQgYXMga2V5IG9uIG9iamVjdHMgY3JlYXRlZCB1c2luZyBjcmVhdGVGaWxlIGNvbnRhaW5pbmcgdGhlXG4gKiBvcmlnaW5hbCBzb3VyY2Ugb2YgdGhlIGZpbGUgb2JqZWN0LlxuICpcbiAqIFRoaXMgaXMgdXNlZCBpbiBOb2RlIHRvIGFjY2VzcyB0aGUgb3JpZ2luYWwgTm9kZSBzdHJlYW0gd2l0aG91dCB1c2luZyBCbG9iI3N0cmVhbSwgd2hpY2hcbiAqIHJldHVybnMgYSB3ZWIgc3RyZWFtLiBUaGlzIGlzIGRvbmUgdG8gYXZvaWQgYSBjb3VwbGUgb2YgYnVncyB0byBkbyB3aXRoIEJsb2Ijc3RyZWFtIGFuZFxuICogUmVhZGFibGUjdG8vZnJvbVdlYiBpbiBOb2RlIHZlcnNpb25zIHdlIHN1cHBvcnQ6XG4gKiAtIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9pc3N1ZXMvNDI2OTQgKGZpeGVkIGluIE5vZGUgMTguMTQpXG4gKiAtIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9pc3N1ZXMvNDg5MTYgKGZpeGVkIGluIE5vZGUgMjAuNilcbiAqXG4gKiBPbmNlIHRoZXNlIHZlcnNpb25zIGFyZSBubyBsb25nZXIgc3VwcG9ydGVkLCB3ZSBtYXkgYmUgYWJsZSB0byBzdG9wIGRvaW5nIHRoaXMuXG4gKlxuICogQGludGVybmFsXG4gKi9cbmNvbnN0IHJhd0NvbnRlbnQgPSBTeW1ib2woXCJyYXdDb250ZW50XCIpO1xuZnVuY3Rpb24gaGFzUmF3Q29udGVudCh4KSB7XG4gICAgcmV0dXJuIHR5cGVvZiB4W3Jhd0NvbnRlbnRdID09PSBcImZ1bmN0aW9uXCI7XG59XG4vKipcbiAqIEV4dHJhY3QgdGhlIHJhdyBjb250ZW50IGZyb20gYSBnaXZlbiBibG9iLWxpa2Ugb2JqZWN0LiBJZiB0aGUgaW5wdXQgd2FzIGNyZWF0ZWQgdXNpbmcgY3JlYXRlRmlsZVxuICogb3IgY3JlYXRlRmlsZUZyb21TdHJlYW0sIHRoZSBleGFjdCBjb250ZW50IHBhc3NlZCBpbnRvIGNyZWF0ZUZpbGUvY3JlYXRlRmlsZUZyb21TdHJlYW0gd2lsbCBiZSB1c2VkLlxuICogRm9yIHRydWUgaW5zdGFuY2VzIG9mIEJsb2IgYW5kIEZpbGUsIHJldHVybnMgdGhlIGJsb2IncyBjb250ZW50IGFzIGEgV2ViIFJlYWRhYmxlU3RyZWFtPFVpbnQ4QXJyYXk+LlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBnZXRSYXdDb250ZW50KGJsb2IpIHtcbiAgICBpZiAoaGFzUmF3Q29udGVudChibG9iKSkge1xuICAgICAgICByZXR1cm4gYmxvYltyYXdDb250ZW50XSgpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGJsb2Iuc3RyZWFtKCk7XG4gICAgfVxufVxuLyoqXG4gKiBDcmVhdGUgYW4gb2JqZWN0IHRoYXQgaW1wbGVtZW50cyB0aGUgRmlsZSBpbnRlcmZhY2UuIFRoaXMgb2JqZWN0IGlzIGludGVuZGVkIHRvIGJlXG4gKiBwYXNzZWQgaW50byBSZXF1ZXN0Qm9keVR5cGUuZm9ybURhdGEsIGFuZCBpcyBub3QgZ3VhcmFudGVlZCB0byB3b3JrIGFzIGV4cGVjdGVkIGluXG4gKiBvdGhlciBzaXR1YXRpb25zLlxuICpcbiAqIFVzZSB0aGlzIGZ1bmN0aW9uIHRvOlxuICogLSBDcmVhdGUgYSBGaWxlIG9iamVjdCBmb3IgdXNlIGluIFJlcXVlc3RCb2R5VHlwZS5mb3JtRGF0YSBpbiBlbnZpcm9ubWVudHMgd2hlcmUgdGhlXG4gKiAgIGdsb2JhbCBGaWxlIG9iamVjdCBpcyB1bmF2YWlsYWJsZS5cbiAqIC0gQ3JlYXRlIGEgRmlsZS1saWtlIG9iamVjdCBmcm9tIGEgcmVhZGFibGUgc3RyZWFtIHdpdGhvdXQgcmVhZGluZyB0aGUgc3RyZWFtIGludG8gbWVtb3J5LlxuICpcbiAqIEBwYXJhbSBzdHJlYW0gLSB0aGUgY29udGVudCBvZiB0aGUgZmlsZSBhcyBhIGNhbGxiYWNrIHJldHVybmluZyBhIHN0cmVhbS4gV2hlbiBhIEZpbGUgb2JqZWN0IG1hZGUgdXNpbmcgY3JlYXRlRmlsZSBpc1xuICogICAgICAgICAgICAgICAgICBwYXNzZWQgaW4gYSByZXF1ZXN0J3MgZm9ybSBkYXRhIG1hcCwgdGhlIHN0cmVhbSB3aWxsIG5vdCBiZSByZWFkIGludG8gbWVtb3J5XG4gKiAgICAgICAgICAgICAgICAgIGFuZCBpbnN0ZWFkIHdpbGwgYmUgc3RyZWFtZWQgd2hlbiB0aGUgcmVxdWVzdCBpcyBtYWRlLiBJbiB0aGUgZXZlbnQgb2YgYSByZXRyeSwgdGhlXG4gKiAgICAgICAgICAgICAgICAgIHN0cmVhbSBuZWVkcyB0byBiZSByZWFkIGFnYWluLCBzbyB0aGlzIGNhbGxiYWNrIFNIT1VMRCByZXR1cm4gYSBmcmVzaCBzdHJlYW0gaWYgcG9zc2libGUuXG4gKiBAcGFyYW0gbmFtZSAtIHRoZSBuYW1lIG9mIHRoZSBmaWxlLlxuICogQHBhcmFtIG9wdGlvbnMgLSBvcHRpb25hbCBtZXRhZGF0YSBhYm91dCB0aGUgZmlsZSwgZS5nLiBmaWxlIG5hbWUsIGZpbGUgc2l6ZSwgTUlNRSB0eXBlLlxuICovXG5mdW5jdGlvbiBjcmVhdGVGaWxlRnJvbVN0cmVhbShzdHJlYW0sIG5hbWUsIG9wdGlvbnMgPSB7fSkge1xuICAgIHZhciBfYSwgX2IsIF9jLCBfZDtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCB1bmltcGxlbWVudGVkTWV0aG9kcyksIHsgdHlwZTogKF9hID0gb3B0aW9ucy50eXBlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBcIlwiLCBsYXN0TW9kaWZpZWQ6IChfYiA9IG9wdGlvbnMubGFzdE1vZGlmaWVkKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBuZXcgRGF0ZSgpLmdldFRpbWUoKSwgd2Via2l0UmVsYXRpdmVQYXRoOiAoX2MgPSBvcHRpb25zLndlYmtpdFJlbGF0aXZlUGF0aCkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogXCJcIiwgc2l6ZTogKF9kID0gb3B0aW9ucy5zaXplKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiAtMSwgbmFtZSwgc3RyZWFtOiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzID0gc3RyZWFtKCk7XG4gICAgICAgICAgICBpZiAoKDAsIHR5cGVHdWFyZHNfanNfMS5pc05vZGVSZWFkYWJsZVN0cmVhbSkocykpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJOb3Qgc3VwcG9ydGVkOiBhIE5vZGUgc3RyZWFtIHdhcyBwcm92aWRlZCBhcyBpbnB1dCB0byBjcmVhdGVGaWxlRnJvbVN0cmVhbS5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcztcbiAgICAgICAgfSwgW3Jhd0NvbnRlbnRdOiBzdHJlYW0gfSk7XG59XG4vKipcbiAqIENyZWF0ZSBhbiBvYmplY3QgdGhhdCBpbXBsZW1lbnRzIHRoZSBGaWxlIGludGVyZmFjZS4gVGhpcyBvYmplY3QgaXMgaW50ZW5kZWQgdG8gYmVcbiAqIHBhc3NlZCBpbnRvIFJlcXVlc3RCb2R5VHlwZS5mb3JtRGF0YSwgYW5kIGlzIG5vdCBndWFyYW50ZWVkIHRvIHdvcmsgYXMgZXhwZWN0ZWQgaW5cbiAqIG90aGVyIHNpdHVhdGlvbnMuXG4gKlxuICogVXNlIHRoaXMgZnVuY3Rpb24gY3JlYXRlIGEgRmlsZSBvYmplY3QgZm9yIHVzZSBpbiBSZXF1ZXN0Qm9keVR5cGUuZm9ybURhdGEgaW4gZW52aXJvbm1lbnRzIHdoZXJlIHRoZSBnbG9iYWwgRmlsZSBvYmplY3QgaXMgdW5hdmFpbGFibGUuXG4gKlxuICogQHBhcmFtIGNvbnRlbnQgLSB0aGUgY29udGVudCBvZiB0aGUgZmlsZSBhcyBhIFVpbnQ4QXJyYXkgaW4gbWVtb3J5LlxuICogQHBhcmFtIG5hbWUgLSB0aGUgbmFtZSBvZiB0aGUgZmlsZS5cbiAqIEBwYXJhbSBvcHRpb25zIC0gb3B0aW9uYWwgbWV0YWRhdGEgYWJvdXQgdGhlIGZpbGUsIGUuZy4gZmlsZSBuYW1lLCBmaWxlIHNpemUsIE1JTUUgdHlwZS5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRmlsZShjb250ZW50LCBuYW1lLCBvcHRpb25zID0ge30pIHtcbiAgICB2YXIgX2EsIF9iLCBfYztcbiAgICBpZiAoY29yZV91dGlsXzEuaXNOb2RlTGlrZSkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCB1bmltcGxlbWVudGVkTWV0aG9kcyksIHsgdHlwZTogKF9hID0gb3B0aW9ucy50eXBlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBcIlwiLCBsYXN0TW9kaWZpZWQ6IChfYiA9IG9wdGlvbnMubGFzdE1vZGlmaWVkKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBuZXcgRGF0ZSgpLmdldFRpbWUoKSwgd2Via2l0UmVsYXRpdmVQYXRoOiAoX2MgPSBvcHRpb25zLndlYmtpdFJlbGF0aXZlUGF0aCkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogXCJcIiwgc2l6ZTogY29udGVudC5ieXRlTGVuZ3RoLCBuYW1lLCBhcnJheUJ1ZmZlcjogYXN5bmMgKCkgPT4gY29udGVudC5idWZmZXIsIHN0cmVhbTogKCkgPT4gbmV3IEJsb2IoW2NvbnRlbnRdKS5zdHJlYW0oKSwgW3Jhd0NvbnRlbnRdOiAoKSA9PiBjb250ZW50IH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGaWxlKFtjb250ZW50XSwgbmFtZSwgb3B0aW9ucyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZmlsZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNvbmNhdCA9IGNvbmNhdDtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG5jb25zdCBub2RlX3N0cmVhbV8xID0gcmVxdWlyZShcIm5vZGU6c3RyZWFtXCIpO1xuY29uc3QgdHlwZUd1YXJkc19qc18xID0gcmVxdWlyZShcIi4vdHlwZUd1YXJkcy5qc1wiKTtcbmNvbnN0IGZpbGVfanNfMSA9IHJlcXVpcmUoXCIuL2ZpbGUuanNcIik7XG5mdW5jdGlvbiBzdHJlYW1Bc3luY0l0ZXJhdG9yKCkge1xuICAgIHJldHVybiB0c2xpYl8xLl9fYXN5bmNHZW5lcmF0b3IodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiogc3RyZWFtQXN5bmNJdGVyYXRvcl8xKCkge1xuICAgICAgICBjb25zdCByZWFkZXIgPSB0aGlzLmdldFJlYWRlcigpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSB5aWVsZCB0c2xpYl8xLl9fYXdhaXQocmVhZGVyLnJlYWQoKSk7XG4gICAgICAgICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHlpZWxkIHRzbGliXzEuX19hd2FpdCh2b2lkIDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB5aWVsZCB5aWVsZCB0c2xpYl8xLl9fYXdhaXQodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgcmVhZGVyLnJlbGVhc2VMb2NrKCk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbmZ1bmN0aW9uIG1ha2VBc3luY0l0ZXJhYmxlKHdlYlN0cmVhbSkge1xuICAgIGlmICghd2ViU3RyZWFtW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSkge1xuICAgICAgICB3ZWJTdHJlYW1bU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gc3RyZWFtQXN5bmNJdGVyYXRvci5iaW5kKHdlYlN0cmVhbSk7XG4gICAgfVxuICAgIGlmICghd2ViU3RyZWFtLnZhbHVlcykge1xuICAgICAgICB3ZWJTdHJlYW0udmFsdWVzID0gc3RyZWFtQXN5bmNJdGVyYXRvci5iaW5kKHdlYlN0cmVhbSk7XG4gICAgfVxufVxuZnVuY3Rpb24gZW5zdXJlTm9kZVN0cmVhbShzdHJlYW0pIHtcbiAgICBpZiAoc3RyZWFtIGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW0pIHtcbiAgICAgICAgbWFrZUFzeW5jSXRlcmFibGUoc3RyZWFtKTtcbiAgICAgICAgcmV0dXJuIG5vZGVfc3RyZWFtXzEuUmVhZGFibGUuZnJvbVdlYihzdHJlYW0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHN0cmVhbTtcbiAgICB9XG59XG5mdW5jdGlvbiB0b1N0cmVhbShzb3VyY2UpIHtcbiAgICBpZiAoc291cmNlIGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuICAgICAgICByZXR1cm4gbm9kZV9zdHJlYW1fMS5SZWFkYWJsZS5mcm9tKEJ1ZmZlci5mcm9tKHNvdXJjZSkpO1xuICAgIH1cbiAgICBlbHNlIGlmICgoMCwgdHlwZUd1YXJkc19qc18xLmlzQmxvYikoc291cmNlKSkge1xuICAgICAgICByZXR1cm4gdG9TdHJlYW0oKDAsIGZpbGVfanNfMS5nZXRSYXdDb250ZW50KShzb3VyY2UpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBlbnN1cmVOb2RlU3RyZWFtKHNvdXJjZSk7XG4gICAgfVxufVxuLyoqXG4gKiBVdGlsaXR5IGZ1bmN0aW9uIHRoYXQgY29uY2F0ZW5hdGVzIGEgc2V0IG9mIGJpbmFyeSBpbnB1dHMgaW50byBvbmUgY29tYmluZWQgb3V0cHV0LlxuICpcbiAqIEBwYXJhbSBzb3VyY2VzIC0gYXJyYXkgb2Ygc291cmNlcyBmb3IgdGhlIGNvbmNhdGVuYXRpb25cbiAqIEByZXR1cm5zIC0gaW4gTm9kZSwgYSAoKCkgPVxcPiBOb2RlSlMuUmVhZGFibGVTdHJlYW0pIHdoaWNoLCB3aGVuIHJlYWQsIHByb2R1Y2VzIGEgY29uY2F0ZW5hdGlvbiBvZiBhbGwgdGhlIGlucHV0cy5cbiAqICAgICAgICAgICBJbiBicm93c2VyLCByZXR1cm5zIGEgYEJsb2JgIHJlcHJlc2VudGluZyBhbGwgdGhlIGNvbmNhdGVuYXRlZCBpbnB1dHMuXG4gKlxuICogQGludGVybmFsXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNvbmNhdChzb3VyY2VzKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3Qgc3RyZWFtcyA9IHNvdXJjZXMubWFwKCh4KSA9PiAodHlwZW9mIHggPT09IFwiZnVuY3Rpb25cIiA/IHgoKSA6IHgpKS5tYXAodG9TdHJlYW0pO1xuICAgICAgICByZXR1cm4gbm9kZV9zdHJlYW1fMS5SZWFkYWJsZS5mcm9tKChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdHNsaWJfMS5fX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2EsIGVfMSwgX2IsIF9jO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc3RyZWFtIG9mIHN0cmVhbXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9kID0gdHJ1ZSwgc3RyZWFtXzEgPSAoZV8xID0gdm9pZCAwLCB0c2xpYl8xLl9fYXN5bmNWYWx1ZXMoc3RyZWFtKSksIHN0cmVhbV8xXzE7IHN0cmVhbV8xXzEgPSB5aWVsZCB0c2xpYl8xLl9fYXdhaXQoc3RyZWFtXzEubmV4dCgpKSwgX2EgPSBzdHJlYW1fMV8xLmRvbmUsICFfYTsgX2QgPSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MgPSBzdHJlYW1fMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2h1bmsgPSBfYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCB5aWVsZCB0c2xpYl8xLl9fYXdhaXQoY2h1bmspO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIV9kICYmICFfYSAmJiAoX2IgPSBzdHJlYW1fMS5yZXR1cm4pKSB5aWVsZCB0c2xpYl8xLl9fYXdhaXQoX2IuY2FsbChzdHJlYW1fMSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pKCkpO1xuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25jYXQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5tdWx0aXBhcnRQb2xpY3lOYW1lID0gdm9pZCAwO1xuZXhwb3J0cy5tdWx0aXBhcnRQb2xpY3kgPSBtdWx0aXBhcnRQb2xpY3k7XG5jb25zdCBjb3JlX3V0aWxfMSA9IHJlcXVpcmUoXCJAYXp1cmUvY29yZS11dGlsXCIpO1xuY29uc3QgY29uY2F0X2pzXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9jb25jYXQuanNcIik7XG5jb25zdCB0eXBlR3VhcmRzX2pzXzEgPSByZXF1aXJlKFwiLi4vdXRpbC90eXBlR3VhcmRzLmpzXCIpO1xuZnVuY3Rpb24gZ2VuZXJhdGVCb3VuZGFyeSgpIHtcbiAgICByZXR1cm4gYC0tLS1BelNES0Zvcm1Cb3VuZGFyeSR7KDAsIGNvcmVfdXRpbF8xLnJhbmRvbVVVSUQpKCl9YDtcbn1cbmZ1bmN0aW9uIGVuY29kZUhlYWRlcnMoaGVhZGVycykge1xuICAgIGxldCByZXN1bHQgPSBcIlwiO1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIGhlYWRlcnMpIHtcbiAgICAgICAgcmVzdWx0ICs9IGAke2tleX06ICR7dmFsdWV9XFxyXFxuYDtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIGdldExlbmd0aChzb3VyY2UpIHtcbiAgICBpZiAoc291cmNlIGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuICAgICAgICByZXR1cm4gc291cmNlLmJ5dGVMZW5ndGg7XG4gICAgfVxuICAgIGVsc2UgaWYgKCgwLCB0eXBlR3VhcmRzX2pzXzEuaXNCbG9iKShzb3VyY2UpKSB7XG4gICAgICAgIC8vIGlmIHdhcyBjcmVhdGVkIHVzaW5nIGNyZWF0ZUZpbGUgdGhlbiAtMSBtZWFucyB3ZSBoYXZlIGFuIHVua25vd24gc2l6ZVxuICAgICAgICByZXR1cm4gc291cmNlLnNpemUgPT09IC0xID8gdW5kZWZpbmVkIDogc291cmNlLnNpemU7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdldFRvdGFsTGVuZ3RoKHNvdXJjZXMpIHtcbiAgICBsZXQgdG90YWwgPSAwO1xuICAgIGZvciAoY29uc3Qgc291cmNlIG9mIHNvdXJjZXMpIHtcbiAgICAgICAgY29uc3QgcGFydExlbmd0aCA9IGdldExlbmd0aChzb3VyY2UpO1xuICAgICAgICBpZiAocGFydExlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdG90YWwgKz0gcGFydExlbmd0aDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdG90YWw7XG59XG5hc3luYyBmdW5jdGlvbiBidWlsZFJlcXVlc3RCb2R5KHJlcXVlc3QsIHBhcnRzLCBib3VuZGFyeSkge1xuICAgIGNvbnN0IHNvdXJjZXMgPSBbXG4gICAgICAgICgwLCBjb3JlX3V0aWxfMS5zdHJpbmdUb1VpbnQ4QXJyYXkpKGAtLSR7Ym91bmRhcnl9YCwgXCJ1dGYtOFwiKSxcbiAgICAgICAgLi4ucGFydHMuZmxhdE1hcCgocGFydCkgPT4gW1xuICAgICAgICAgICAgKDAsIGNvcmVfdXRpbF8xLnN0cmluZ1RvVWludDhBcnJheSkoXCJcXHJcXG5cIiwgXCJ1dGYtOFwiKSxcbiAgICAgICAgICAgICgwLCBjb3JlX3V0aWxfMS5zdHJpbmdUb1VpbnQ4QXJyYXkpKGVuY29kZUhlYWRlcnMocGFydC5oZWFkZXJzKSwgXCJ1dGYtOFwiKSxcbiAgICAgICAgICAgICgwLCBjb3JlX3V0aWxfMS5zdHJpbmdUb1VpbnQ4QXJyYXkpKFwiXFxyXFxuXCIsIFwidXRmLThcIiksXG4gICAgICAgICAgICBwYXJ0LmJvZHksXG4gICAgICAgICAgICAoMCwgY29yZV91dGlsXzEuc3RyaW5nVG9VaW50OEFycmF5KShgXFxyXFxuLS0ke2JvdW5kYXJ5fWAsIFwidXRmLThcIiksXG4gICAgICAgIF0pLFxuICAgICAgICAoMCwgY29yZV91dGlsXzEuc3RyaW5nVG9VaW50OEFycmF5KShcIi0tXFxyXFxuXFxyXFxuXCIsIFwidXRmLThcIiksXG4gICAgXTtcbiAgICBjb25zdCBjb250ZW50TGVuZ3RoID0gZ2V0VG90YWxMZW5ndGgoc291cmNlcyk7XG4gICAgaWYgKGNvbnRlbnRMZW5ndGgpIHtcbiAgICAgICAgcmVxdWVzdC5oZWFkZXJzLnNldChcIkNvbnRlbnQtTGVuZ3RoXCIsIGNvbnRlbnRMZW5ndGgpO1xuICAgIH1cbiAgICByZXF1ZXN0LmJvZHkgPSBhd2FpdCAoMCwgY29uY2F0X2pzXzEuY29uY2F0KShzb3VyY2VzKTtcbn1cbi8qKlxuICogTmFtZSBvZiBtdWx0aXBhcnQgcG9saWN5XG4gKi9cbmV4cG9ydHMubXVsdGlwYXJ0UG9saWN5TmFtZSA9IFwibXVsdGlwYXJ0UG9saWN5XCI7XG5jb25zdCBtYXhCb3VuZGFyeUxlbmd0aCA9IDcwO1xuY29uc3QgdmFsaWRCb3VuZGFyeUNoYXJhY3RlcnMgPSBuZXcgU2V0KGBhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaMDEyMzQ1Njc4OScoKSssLS4vOj0/YCk7XG5mdW5jdGlvbiBhc3NlcnRWYWxpZEJvdW5kYXJ5KGJvdW5kYXJ5KSB7XG4gICAgaWYgKGJvdW5kYXJ5Lmxlbmd0aCA+IG1heEJvdW5kYXJ5TGVuZ3RoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTXVsdGlwYXJ0IGJvdW5kYXJ5IFwiJHtib3VuZGFyeX1cIiBleGNlZWRzIG1heGltdW0gbGVuZ3RoIG9mIDcwIGNoYXJhY3RlcnNgKTtcbiAgICB9XG4gICAgaWYgKEFycmF5LmZyb20oYm91bmRhcnkpLnNvbWUoKHgpID0+ICF2YWxpZEJvdW5kYXJ5Q2hhcmFjdGVycy5oYXMoeCkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTXVsdGlwYXJ0IGJvdW5kYXJ5IFwiJHtib3VuZGFyeX1cIiBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnNgKTtcbiAgICB9XG59XG4vKipcbiAqIFBpcGVsaW5lIHBvbGljeSBmb3IgbXVsdGlwYXJ0IHJlcXVlc3RzXG4gKi9cbmZ1bmN0aW9uIG11bHRpcGFydFBvbGljeSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBleHBvcnRzLm11bHRpcGFydFBvbGljeU5hbWUsXG4gICAgICAgIGFzeW5jIHNlbmRSZXF1ZXN0KHJlcXVlc3QsIG5leHQpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGlmICghcmVxdWVzdC5tdWx0aXBhcnRCb2R5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5leHQocmVxdWVzdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVxdWVzdC5ib2R5KSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibXVsdGlwYXJ0Qm9keSBhbmQgcmVndWxhciBib2R5IGNhbm5vdCBiZSBzZXQgYXQgdGhlIHNhbWUgdGltZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBib3VuZGFyeSA9IHJlcXVlc3QubXVsdGlwYXJ0Qm9keS5ib3VuZGFyeTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRUeXBlSGVhZGVyID0gKF9hID0gcmVxdWVzdC5oZWFkZXJzLmdldChcIkNvbnRlbnQtVHlwZVwiKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogXCJtdWx0aXBhcnQvbWl4ZWRcIjtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZEhlYWRlciA9IGNvbnRlbnRUeXBlSGVhZGVyLm1hdGNoKC9eKG11bHRpcGFydFxcL1teIDtdKykoPzo7ICpib3VuZGFyeT0oLispKT8kLyk7XG4gICAgICAgICAgICBpZiAoIXBhcnNlZEhlYWRlcikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgR290IG11bHRpcGFydCByZXF1ZXN0IGJvZHksIGJ1dCBjb250ZW50LXR5cGUgaGVhZGVyIHdhcyBub3QgbXVsdGlwYXJ0OiAke2NvbnRlbnRUeXBlSGVhZGVyfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgWywgY29udGVudFR5cGUsIHBhcnNlZEJvdW5kYXJ5XSA9IHBhcnNlZEhlYWRlcjtcbiAgICAgICAgICAgIGlmIChwYXJzZWRCb3VuZGFyeSAmJiBib3VuZGFyeSAmJiBwYXJzZWRCb3VuZGFyeSAhPT0gYm91bmRhcnkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE11bHRpcGFydCBib3VuZGFyeSB3YXMgc3BlY2lmaWVkIGFzICR7cGFyc2VkQm91bmRhcnl9IGluIHRoZSBoZWFkZXIsIGJ1dCBnb3QgJHtib3VuZGFyeX0gaW4gdGhlIHJlcXVlc3QgYm9keWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYm91bmRhcnkgIT09IG51bGwgJiYgYm91bmRhcnkgIT09IHZvaWQgMCA/IGJvdW5kYXJ5IDogKGJvdW5kYXJ5ID0gcGFyc2VkQm91bmRhcnkpO1xuICAgICAgICAgICAgaWYgKGJvdW5kYXJ5KSB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0VmFsaWRCb3VuZGFyeShib3VuZGFyeSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBib3VuZGFyeSA9IGdlbmVyYXRlQm91bmRhcnkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlcXVlc3QuaGVhZGVycy5zZXQoXCJDb250ZW50LVR5cGVcIiwgYCR7Y29udGVudFR5cGV9OyBib3VuZGFyeT0ke2JvdW5kYXJ5fWApO1xuICAgICAgICAgICAgYXdhaXQgYnVpbGRSZXF1ZXN0Qm9keShyZXF1ZXN0LCByZXF1ZXN0Lm11bHRpcGFydEJvZHkucGFydHMsIGJvdW5kYXJ5KTtcbiAgICAgICAgICAgIHJlcXVlc3QubXVsdGlwYXJ0Qm9keSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KHJlcXVlc3QpO1xuICAgICAgICB9LFxuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tdWx0aXBhcnRQb2xpY3kuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZWNvbXByZXNzUmVzcG9uc2VQb2xpY3lOYW1lID0gdm9pZCAwO1xuZXhwb3J0cy5kZWNvbXByZXNzUmVzcG9uc2VQb2xpY3kgPSBkZWNvbXByZXNzUmVzcG9uc2VQb2xpY3k7XG4vKipcbiAqIFRoZSBwcm9ncmFtbWF0aWMgaWRlbnRpZmllciBvZiB0aGUgZGVjb21wcmVzc1Jlc3BvbnNlUG9saWN5LlxuICovXG5leHBvcnRzLmRlY29tcHJlc3NSZXNwb25zZVBvbGljeU5hbWUgPSBcImRlY29tcHJlc3NSZXNwb25zZVBvbGljeVwiO1xuLyoqXG4gKiBBIHBvbGljeSB0byBlbmFibGUgcmVzcG9uc2UgZGVjb21wcmVzc2lvbiBhY2NvcmRpbmcgdG8gQWNjZXB0LUVuY29kaW5nIGhlYWRlclxuICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9IZWFkZXJzL0FjY2VwdC1FbmNvZGluZ1xuICovXG5mdW5jdGlvbiBkZWNvbXByZXNzUmVzcG9uc2VQb2xpY3koKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogZXhwb3J0cy5kZWNvbXByZXNzUmVzcG9uc2VQb2xpY3lOYW1lLFxuICAgICAgICBhc3luYyBzZW5kUmVxdWVzdChyZXF1ZXN0LCBuZXh0KSB7XG4gICAgICAgICAgICAvLyBIRUFEIHJlcXVlc3RzIGhhdmUgbm8gYm9keVxuICAgICAgICAgICAgaWYgKHJlcXVlc3QubWV0aG9kICE9PSBcIkhFQURcIikge1xuICAgICAgICAgICAgICAgIHJlcXVlc3QuaGVhZGVycy5zZXQoXCJBY2NlcHQtRW5jb2RpbmdcIiwgXCJnemlwLGRlZmxhdGVcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV4dChyZXF1ZXN0KTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGVjb21wcmVzc1Jlc3BvbnNlUG9saWN5LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZGVsYXkgPSBkZWxheTtcbmV4cG9ydHMucGFyc2VIZWFkZXJWYWx1ZUFzTnVtYmVyID0gcGFyc2VIZWFkZXJWYWx1ZUFzTnVtYmVyO1xuY29uc3QgYWJvcnRfY29udHJvbGxlcl8xID0gcmVxdWlyZShcIkBhenVyZS9hYm9ydC1jb250cm9sbGVyXCIpO1xuY29uc3QgU3RhbmRhcmRBYm9ydE1lc3NhZ2UgPSBcIlRoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQuXCI7XG4vKipcbiAqIEEgd3JhcHBlciBmb3Igc2V0VGltZW91dCB0aGF0IHJlc29sdmVzIGEgcHJvbWlzZSBhZnRlciBkZWxheUluTXMgbWlsbGlzZWNvbmRzLlxuICogQHBhcmFtIGRlbGF5SW5NcyAtIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIGJlIGRlbGF5ZWQuXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gYmUgcmVzb2x2ZWQgd2l0aCBhZnRlciBhIHRpbWVvdXQgb2YgdCBtaWxsaXNlY29uZHMuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciBkZWxheSAtIGN1cnJlbnRseSBhYm9ydCBvcHRpb25zXG4gKiAgICAgICAgICAgICAgICAgIC0gYWJvcnRTaWduYWwgLSBUaGUgYWJvcnRTaWduYWwgYXNzb2NpYXRlZCB3aXRoIGNvbnRhaW5pbmcgb3BlcmF0aW9uLlxuICogICAgICAgICAgICAgICAgICAtIGFib3J0RXJyb3JNc2cgLSBUaGUgYWJvcnQgZXJyb3IgbWVzc2FnZSBhc3NvY2lhdGVkIHdpdGggY29udGFpbmluZyBvcGVyYXRpb24uXG4gKiBAcmV0dXJucyBSZXNvbHZlZCBwcm9taXNlXG4gKi9cbmZ1bmN0aW9uIGRlbGF5KGRlbGF5SW5NcywgdmFsdWUsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBsZXQgdGltZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgIGxldCBvbkFib3J0ZWQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IHJlamVjdE9uQWJvcnQgPSAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBhYm9ydF9jb250cm9sbGVyXzEuQWJvcnRFcnJvcigob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmFib3J0RXJyb3JNc2cpID8gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmFib3J0RXJyb3JNc2cgOiBTdGFuZGFyZEFib3J0TWVzc2FnZSkpO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZW1vdmVMaXN0ZW5lcnMgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5hYm9ydFNpZ25hbCkgJiYgb25BYm9ydGVkKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5hYm9ydFNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgb25BYm9ydGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgb25BYm9ydGVkID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRpbWVyKSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVycygpO1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdE9uQWJvcnQoKTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuYWJvcnRTaWduYWwpICYmIG9wdGlvbnMuYWJvcnRTaWduYWwuYWJvcnRlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdE9uQWJvcnQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgcmVtb3ZlTGlzdGVuZXJzKCk7XG4gICAgICAgICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgfSwgZGVsYXlJbk1zKTtcbiAgICAgICAgaWYgKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5hYm9ydFNpZ25hbCkge1xuICAgICAgICAgICAgb3B0aW9ucy5hYm9ydFNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgb25BYm9ydGVkKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqIEByZXR1cm5zIHRoZSBwYXJzZWQgdmFsdWUgb3IgdW5kZWZpbmVkIGlmIHRoZSBwYXJzZWQgdmFsdWUgaXMgaW52YWxpZC5cbiAqL1xuZnVuY3Rpb24gcGFyc2VIZWFkZXJWYWx1ZUFzTnVtYmVyKHJlc3BvbnNlLCBoZWFkZXJOYW1lKSB7XG4gICAgY29uc3QgdmFsdWUgPSByZXNwb25zZS5oZWFkZXJzLmdldChoZWFkZXJOYW1lKTtcbiAgICBpZiAoIXZhbHVlKVxuICAgICAgICByZXR1cm47XG4gICAgY29uc3QgdmFsdWVBc051bSA9IE51bWJlcih2YWx1ZSk7XG4gICAgaWYgKE51bWJlci5pc05hTih2YWx1ZUFzTnVtKSlcbiAgICAgICAgcmV0dXJuO1xuICAgIHJldHVybiB2YWx1ZUFzTnVtO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aGVscGVycy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlzVGhyb3R0bGluZ1JldHJ5UmVzcG9uc2UgPSBpc1Rocm90dGxpbmdSZXRyeVJlc3BvbnNlO1xuZXhwb3J0cy50aHJvdHRsaW5nUmV0cnlTdHJhdGVneSA9IHRocm90dGxpbmdSZXRyeVN0cmF0ZWd5O1xuY29uc3QgaGVscGVyc19qc18xID0gcmVxdWlyZShcIi4uL3V0aWwvaGVscGVycy5qc1wiKTtcbi8qKlxuICogVGhlIGhlYWRlciB0aGF0IGNvbWVzIGJhY2sgZnJvbSBBenVyZSBzZXJ2aWNlcyByZXByZXNlbnRpbmdcbiAqIHRoZSBhbW91bnQgb2YgdGltZSAobWluaW11bSkgdG8gd2FpdCB0byByZXRyeSAoaW4gc2Vjb25kcyBvciB0aW1lc3RhbXAgYWZ0ZXIgd2hpY2ggd2UgY2FuIHJldHJ5KS5cbiAqL1xuY29uc3QgUmV0cnlBZnRlckhlYWRlciA9IFwiUmV0cnktQWZ0ZXJcIjtcbi8qKlxuICogVGhlIGhlYWRlcnMgdGhhdCBjb21lIGJhY2sgZnJvbSBBenVyZSBzZXJ2aWNlcyByZXByZXNlbnRpbmdcbiAqIHRoZSBhbW91bnQgb2YgdGltZSAobWluaW11bSkgdG8gd2FpdCB0byByZXRyeS5cbiAqXG4gKiBcInJldHJ5LWFmdGVyLW1zXCIsIFwieC1tcy1yZXRyeS1hZnRlci1tc1wiIDogbWlsbGlzZWNvbmRzXG4gKiBcIlJldHJ5LUFmdGVyXCIgOiBzZWNvbmRzIG9yIHRpbWVzdGFtcFxuICovXG5jb25zdCBBbGxSZXRyeUFmdGVySGVhZGVycyA9IFtcInJldHJ5LWFmdGVyLW1zXCIsIFwieC1tcy1yZXRyeS1hZnRlci1tc1wiLCBSZXRyeUFmdGVySGVhZGVyXTtcbi8qKlxuICogQSByZXNwb25zZSBpcyBhIHRocm90dGxpbmcgcmV0cnkgcmVzcG9uc2UgaWYgaXQgaGFzIGEgdGhyb3R0bGluZyBzdGF0dXMgY29kZSAoNDI5IG9yIDUwMyksXG4gKiBhcyBsb25nIGFzIG9uZSBvZiB0aGUgWyBcIlJldHJ5LUFmdGVyXCIgb3IgXCJyZXRyeS1hZnRlci1tc1wiIG9yIFwieC1tcy1yZXRyeS1hZnRlci1tc1wiIF0gaGVhZGVycyBoYXMgYSB2YWxpZCB2YWx1ZS5cbiAqXG4gKiBSZXR1cm5zIHRoZSBgcmV0cnlBZnRlckluTXNgIHZhbHVlIGlmIHRoZSByZXNwb25zZSBpcyBhIHRocm90dGxpbmcgcmV0cnkgcmVzcG9uc2UuXG4gKiBJZiBub3QgdGhyb3R0bGluZyByZXRyeSByZXNwb25zZSwgcmV0dXJucyBgdW5kZWZpbmVkYC5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gZ2V0UmV0cnlBZnRlckluTXMocmVzcG9uc2UpIHtcbiAgICBpZiAoIShyZXNwb25zZSAmJiBbNDI5LCA1MDNdLmluY2x1ZGVzKHJlc3BvbnNlLnN0YXR1cykpKVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICAgIC8vIEhlYWRlcnM6IFwicmV0cnktYWZ0ZXItbXNcIiwgXCJ4LW1zLXJldHJ5LWFmdGVyLW1zXCIsIFwiUmV0cnktQWZ0ZXJcIlxuICAgICAgICBmb3IgKGNvbnN0IGhlYWRlciBvZiBBbGxSZXRyeUFmdGVySGVhZGVycykge1xuICAgICAgICAgICAgY29uc3QgcmV0cnlBZnRlclZhbHVlID0gKDAsIGhlbHBlcnNfanNfMS5wYXJzZUhlYWRlclZhbHVlQXNOdW1iZXIpKHJlc3BvbnNlLCBoZWFkZXIpO1xuICAgICAgICAgICAgaWYgKHJldHJ5QWZ0ZXJWYWx1ZSA9PT0gMCB8fCByZXRyeUFmdGVyVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAvLyBcIlJldHJ5LUFmdGVyXCIgaGVhZGVyID09PiBzZWNvbmRzXG4gICAgICAgICAgICAgICAgLy8gXCJyZXRyeS1hZnRlci1tc1wiLCBcIngtbXMtcmV0cnktYWZ0ZXItbXNcIiBoZWFkZXJzID09PiBtaWxsaS1zZWNvbmRzXG4gICAgICAgICAgICAgICAgY29uc3QgbXVsdGlwbHlpbmdGYWN0b3IgPSBoZWFkZXIgPT09IFJldHJ5QWZ0ZXJIZWFkZXIgPyAxMDAwIDogMTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV0cnlBZnRlclZhbHVlICogbXVsdGlwbHlpbmdGYWN0b3I7IC8vIGluIG1pbGxpLXNlY29uZHNcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBSZXRyeUFmdGVySGVhZGVyIChcIlJldHJ5LUFmdGVyXCIpIGhhcyBhIHNwZWNpYWwgY2FzZSB3aGVyZSBpdCBtaWdodCBiZSBmb3JtYXR0ZWQgYXMgYSBkYXRlIGluc3RlYWQgb2YgYSBudW1iZXIgb2Ygc2Vjb25kc1xuICAgICAgICBjb25zdCByZXRyeUFmdGVySGVhZGVyID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoUmV0cnlBZnRlckhlYWRlcik7XG4gICAgICAgIGlmICghcmV0cnlBZnRlckhlYWRlcilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgZGF0ZSA9IERhdGUucGFyc2UocmV0cnlBZnRlckhlYWRlcik7XG4gICAgICAgIGNvbnN0IGRpZmYgPSBkYXRlIC0gRGF0ZS5ub3coKTtcbiAgICAgICAgLy8gbmVnYXRpdmUgZGlmZiB3b3VsZCBtZWFuIGEgZGF0ZSBpbiB0aGUgcGFzdCwgc28gcmV0cnkgYXNhcCB3aXRoIDAgbWlsbGlzZWNvbmRzXG4gICAgICAgIHJldHVybiBOdW1iZXIuaXNGaW5pdGUoZGlmZikgPyBNYXRoLm1heCgwLCBkaWZmKSA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufVxuLyoqXG4gKiBBIHJlc3BvbnNlIGlzIGEgcmV0cnkgcmVzcG9uc2UgaWYgaXQgaGFzIGEgdGhyb3R0bGluZyBzdGF0dXMgY29kZSAoNDI5IG9yIDUwMyksXG4gKiBhcyBsb25nIGFzIG9uZSBvZiB0aGUgWyBcIlJldHJ5LUFmdGVyXCIgb3IgXCJyZXRyeS1hZnRlci1tc1wiIG9yIFwieC1tcy1yZXRyeS1hZnRlci1tc1wiIF0gaGVhZGVycyBoYXMgYSB2YWxpZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gaXNUaHJvdHRsaW5nUmV0cnlSZXNwb25zZShyZXNwb25zZSkge1xuICAgIHJldHVybiBOdW1iZXIuaXNGaW5pdGUoZ2V0UmV0cnlBZnRlckluTXMocmVzcG9uc2UpKTtcbn1cbmZ1bmN0aW9uIHRocm90dGxpbmdSZXRyeVN0cmF0ZWd5KCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IFwidGhyb3R0bGluZ1JldHJ5U3RyYXRlZ3lcIixcbiAgICAgICAgcmV0cnkoeyByZXNwb25zZSB9KSB7XG4gICAgICAgICAgICBjb25zdCByZXRyeUFmdGVySW5NcyA9IGdldFJldHJ5QWZ0ZXJJbk1zKHJlc3BvbnNlKTtcbiAgICAgICAgICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHJldHJ5QWZ0ZXJJbk1zKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHNraXBTdHJhdGVneTogdHJ1ZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICByZXRyeUFmdGVySW5NcyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRocm90dGxpbmdSZXRyeVN0cmF0ZWd5LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZXhwb25lbnRpYWxSZXRyeVN0cmF0ZWd5ID0gZXhwb25lbnRpYWxSZXRyeVN0cmF0ZWd5O1xuZXhwb3J0cy5pc0V4cG9uZW50aWFsUmV0cnlSZXNwb25zZSA9IGlzRXhwb25lbnRpYWxSZXRyeVJlc3BvbnNlO1xuZXhwb3J0cy5pc1N5c3RlbUVycm9yID0gaXNTeXN0ZW1FcnJvcjtcbmNvbnN0IGNvcmVfdXRpbF8xID0gcmVxdWlyZShcIkBhenVyZS9jb3JlLXV0aWxcIik7XG5jb25zdCB0aHJvdHRsaW5nUmV0cnlTdHJhdGVneV9qc18xID0gcmVxdWlyZShcIi4vdGhyb3R0bGluZ1JldHJ5U3RyYXRlZ3kuanNcIik7XG4vLyBpbnRlcnZhbHMgYXJlIGluIG1pbGxpc2Vjb25kc1xuY29uc3QgREVGQVVMVF9DTElFTlRfUkVUUllfSU5URVJWQUwgPSAxMDAwO1xuY29uc3QgREVGQVVMVF9DTElFTlRfTUFYX1JFVFJZX0lOVEVSVkFMID0gMTAwMCAqIDY0O1xuLyoqXG4gKiBBIHJldHJ5IHN0cmF0ZWd5IHRoYXQgcmV0cmllcyB3aXRoIGFuIGV4cG9uZW50aWFsbHkgaW5jcmVhc2luZyBkZWxheSBpbiB0aGVzZSB0d28gY2FzZXM6XG4gKiAtIFdoZW4gdGhlcmUgYXJlIGVycm9ycyBpbiB0aGUgdW5kZXJseWluZyB0cmFuc3BvcnQgbGF5ZXIgKGUuZy4gRE5TIGxvb2t1cCBmYWlsdXJlcykuXG4gKiAtIE9yIG90aGVyd2lzZSBpZiB0aGUgb3V0Z29pbmcgcmVxdWVzdCBmYWlscyAoNDA4LCBncmVhdGVyIG9yIGVxdWFsIHRoYW4gNTAwLCBleGNlcHQgZm9yIDUwMSBhbmQgNTA1KS5cbiAqL1xuZnVuY3Rpb24gZXhwb25lbnRpYWxSZXRyeVN0cmF0ZWd5KG9wdGlvbnMgPSB7fSkge1xuICAgIHZhciBfYSwgX2I7XG4gICAgY29uc3QgcmV0cnlJbnRlcnZhbCA9IChfYSA9IG9wdGlvbnMucmV0cnlEZWxheUluTXMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IERFRkFVTFRfQ0xJRU5UX1JFVFJZX0lOVEVSVkFMO1xuICAgIGNvbnN0IG1heFJldHJ5SW50ZXJ2YWwgPSAoX2IgPSBvcHRpb25zLm1heFJldHJ5RGVsYXlJbk1zKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBERUZBVUxUX0NMSUVOVF9NQVhfUkVUUllfSU5URVJWQUw7XG4gICAgbGV0IHJldHJ5QWZ0ZXJJbk1zID0gcmV0cnlJbnRlcnZhbDtcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBcImV4cG9uZW50aWFsUmV0cnlTdHJhdGVneVwiLFxuICAgICAgICByZXRyeSh7IHJldHJ5Q291bnQsIHJlc3BvbnNlLCByZXNwb25zZUVycm9yIH0pIHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZWRTeXN0ZW1FcnJvciA9IGlzU3lzdGVtRXJyb3IocmVzcG9uc2VFcnJvcik7XG4gICAgICAgICAgICBjb25zdCBpZ25vcmVTeXN0ZW1FcnJvcnMgPSBtYXRjaGVkU3lzdGVtRXJyb3IgJiYgb3B0aW9ucy5pZ25vcmVTeXN0ZW1FcnJvcnM7XG4gICAgICAgICAgICBjb25zdCBpc0V4cG9uZW50aWFsID0gaXNFeHBvbmVudGlhbFJldHJ5UmVzcG9uc2UocmVzcG9uc2UpO1xuICAgICAgICAgICAgY29uc3QgaWdub3JlRXhwb25lbnRpYWxSZXNwb25zZSA9IGlzRXhwb25lbnRpYWwgJiYgb3B0aW9ucy5pZ25vcmVIdHRwU3RhdHVzQ29kZXM7XG4gICAgICAgICAgICBjb25zdCB1bmtub3duUmVzcG9uc2UgPSByZXNwb25zZSAmJiAoKDAsIHRocm90dGxpbmdSZXRyeVN0cmF0ZWd5X2pzXzEuaXNUaHJvdHRsaW5nUmV0cnlSZXNwb25zZSkocmVzcG9uc2UpIHx8ICFpc0V4cG9uZW50aWFsKTtcbiAgICAgICAgICAgIGlmICh1bmtub3duUmVzcG9uc2UgfHwgaWdub3JlRXhwb25lbnRpYWxSZXNwb25zZSB8fCBpZ25vcmVTeXN0ZW1FcnJvcnMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBza2lwU3RyYXRlZ3k6IHRydWUgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXNwb25zZUVycm9yICYmICFtYXRjaGVkU3lzdGVtRXJyb3IgJiYgIWlzRXhwb25lbnRpYWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBlcnJvclRvVGhyb3c6IHJlc3BvbnNlRXJyb3IgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEV4cG9uZW50aWFsbHkgaW5jcmVhc2UgdGhlIGRlbGF5IGVhY2ggdGltZVxuICAgICAgICAgICAgY29uc3QgZXhwb25lbnRpYWxEZWxheSA9IHJldHJ5QWZ0ZXJJbk1zICogTWF0aC5wb3coMiwgcmV0cnlDb3VudCk7XG4gICAgICAgICAgICAvLyBEb24ndCBsZXQgdGhlIGRlbGF5IGV4Y2VlZCB0aGUgbWF4aW11bVxuICAgICAgICAgICAgY29uc3QgY2xhbXBlZEV4cG9uZW50aWFsRGVsYXkgPSBNYXRoLm1pbihtYXhSZXRyeUludGVydmFsLCBleHBvbmVudGlhbERlbGF5KTtcbiAgICAgICAgICAgIC8vIEFsbG93IHRoZSBmaW5hbCB2YWx1ZSB0byBoYXZlIHNvbWUgXCJqaXR0ZXJcIiAod2l0aGluIDUwJSBvZiB0aGUgZGVsYXkgc2l6ZSkgc29cbiAgICAgICAgICAgIC8vIHRoYXQgcmV0cmllcyBhY3Jvc3MgbXVsdGlwbGUgY2xpZW50cyBkb24ndCBvY2N1ciBzaW11bHRhbmVvdXNseS5cbiAgICAgICAgICAgIHJldHJ5QWZ0ZXJJbk1zID1cbiAgICAgICAgICAgICAgICBjbGFtcGVkRXhwb25lbnRpYWxEZWxheSAvIDIgKyAoMCwgY29yZV91dGlsXzEuZ2V0UmFuZG9tSW50ZWdlckluY2x1c2l2ZSkoMCwgY2xhbXBlZEV4cG9uZW50aWFsRGVsYXkgLyAyKTtcbiAgICAgICAgICAgIHJldHVybiB7IHJldHJ5QWZ0ZXJJbk1zIH07XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbi8qKlxuICogQSByZXNwb25zZSBpcyBhIHJldHJ5IHJlc3BvbnNlIGlmIGl0IGhhcyBzdGF0dXMgY29kZXM6XG4gKiAtIDQwOCwgb3JcbiAqIC0gR3JlYXRlciBvciBlcXVhbCB0aGFuIDUwMCwgZXhjZXB0IGZvciA1MDEgYW5kIDUwNS5cbiAqL1xuZnVuY3Rpb24gaXNFeHBvbmVudGlhbFJldHJ5UmVzcG9uc2UocmVzcG9uc2UpIHtcbiAgICByZXR1cm4gQm9vbGVhbihyZXNwb25zZSAmJlxuICAgICAgICByZXNwb25zZS5zdGF0dXMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAocmVzcG9uc2Uuc3RhdHVzID49IDUwMCB8fCByZXNwb25zZS5zdGF0dXMgPT09IDQwOCkgJiZcbiAgICAgICAgcmVzcG9uc2Uuc3RhdHVzICE9PSA1MDEgJiZcbiAgICAgICAgcmVzcG9uc2Uuc3RhdHVzICE9PSA1MDUpO1xufVxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgYW4gZXJyb3IgZnJvbSBhIHBpcGVsaW5lIHJlc3BvbnNlIHdhcyB0cmlnZ2VyZWQgaW4gdGhlIG5ldHdvcmsgbGF5ZXIuXG4gKi9cbmZ1bmN0aW9uIGlzU3lzdGVtRXJyb3IoZXJyKSB7XG4gICAgaWYgKCFlcnIpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gKGVyci5jb2RlID09PSBcIkVUSU1FRE9VVFwiIHx8XG4gICAgICAgIGVyci5jb2RlID09PSBcIkVTT0NLRVRUSU1FRE9VVFwiIHx8XG4gICAgICAgIGVyci5jb2RlID09PSBcIkVDT05OUkVGVVNFRFwiIHx8XG4gICAgICAgIGVyci5jb2RlID09PSBcIkVDT05OUkVTRVRcIiB8fFxuICAgICAgICBlcnIuY29kZSA9PT0gXCJFTk9FTlRcIiB8fFxuICAgICAgICBlcnIuY29kZSA9PT0gXCJFTk9URk9VTkRcIik7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1leHBvbmVudGlhbFJldHJ5U3RyYXRlZ3kuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yZXRyeVBvbGljeSA9IHJldHJ5UG9saWN5O1xuY29uc3QgaGVscGVyc19qc18xID0gcmVxdWlyZShcIi4uL3V0aWwvaGVscGVycy5qc1wiKTtcbmNvbnN0IGxvZ2dlcl8xID0gcmVxdWlyZShcIkBhenVyZS9sb2dnZXJcIik7XG5jb25zdCBhYm9ydF9jb250cm9sbGVyXzEgPSByZXF1aXJlKFwiQGF6dXJlL2Fib3J0LWNvbnRyb2xsZXJcIik7XG5jb25zdCBjb25zdGFudHNfanNfMSA9IHJlcXVpcmUoXCIuLi9jb25zdGFudHMuanNcIik7XG5jb25zdCByZXRyeVBvbGljeUxvZ2dlciA9ICgwLCBsb2dnZXJfMS5jcmVhdGVDbGllbnRMb2dnZXIpKFwiY29yZS1yZXN0LXBpcGVsaW5lIHJldHJ5UG9saWN5XCIpO1xuLyoqXG4gKiBUaGUgcHJvZ3JhbW1hdGljIGlkZW50aWZpZXIgb2YgdGhlIHJldHJ5UG9saWN5LlxuICovXG5jb25zdCByZXRyeVBvbGljeU5hbWUgPSBcInJldHJ5UG9saWN5XCI7XG4vKipcbiAqIHJldHJ5UG9saWN5IGlzIGEgZ2VuZXJpYyBwb2xpY3kgdG8gZW5hYmxlIHJldHJ5aW5nIHJlcXVlc3RzIHdoZW4gY2VydGFpbiBjb25kaXRpb25zIGFyZSBtZXRcbiAqL1xuZnVuY3Rpb24gcmV0cnlQb2xpY3koc3RyYXRlZ2llcywgb3B0aW9ucyA9IHsgbWF4UmV0cmllczogY29uc3RhbnRzX2pzXzEuREVGQVVMVF9SRVRSWV9QT0xJQ1lfQ09VTlQgfSkge1xuICAgIGNvbnN0IGxvZ2dlciA9IG9wdGlvbnMubG9nZ2VyIHx8IHJldHJ5UG9saWN5TG9nZ2VyO1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IHJldHJ5UG9saWN5TmFtZSxcbiAgICAgICAgYXN5bmMgc2VuZFJlcXVlc3QocmVxdWVzdCwgbmV4dCkge1xuICAgICAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgICAgIGxldCByZXNwb25zZTtcbiAgICAgICAgICAgIGxldCByZXNwb25zZUVycm9yO1xuICAgICAgICAgICAgbGV0IHJldHJ5Q291bnQgPSAtMTtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zdGFudC1jb25kaXRpb25cbiAgICAgICAgICAgIHJldHJ5UmVxdWVzdDogd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgICAgICByZXRyeUNvdW50ICs9IDE7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2UgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VFcnJvciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhgUmV0cnkgJHtyZXRyeUNvdW50fTogQXR0ZW1wdGluZyB0byBzZW5kIHJlcXVlc3RgLCByZXF1ZXN0LnJlcXVlc3RJZCk7XG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gYXdhaXQgbmV4dChyZXF1ZXN0KTtcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYFJldHJ5ICR7cmV0cnlDb3VudH06IFJlY2VpdmVkIGEgcmVzcG9uc2UgZnJvbSByZXF1ZXN0YCwgcmVxdWVzdC5yZXF1ZXN0SWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoYFJldHJ5ICR7cmV0cnlDb3VudH06IFJlY2VpdmVkIGFuIGVycm9yIGZyb20gcmVxdWVzdGAsIHJlcXVlc3QucmVxdWVzdElkKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gUmVzdEVycm9ycyBhcmUgdmFsaWQgdGFyZ2V0cyBmb3IgdGhlIHJldHJ5IHN0cmF0ZWdpZXMuXG4gICAgICAgICAgICAgICAgICAgIC8vIElmIG5vbmUgb2YgdGhlIHJldHJ5IHN0cmF0ZWdpZXMgY2FuIHdvcmsgd2l0aCB0aGVtLCB0aGV5IHdpbGwgYmUgdGhyb3duIGxhdGVyIGluIHRoaXMgcG9saWN5LlxuICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcmVjZWl2ZWQgZXJyb3IgaXMgbm90IGEgUmVzdEVycm9yLCBpdCBpcyBpbW1lZGlhdGVseSB0aHJvd24uXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlRXJyb3IgPSBlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWUgfHwgcmVzcG9uc2VFcnJvci5uYW1lICE9PSBcIlJlc3RFcnJvclwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gcmVzcG9uc2VFcnJvci5yZXNwb25zZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKChfYSA9IHJlcXVlc3QuYWJvcnRTaWduYWwpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5hYm9ydGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihgUmV0cnkgJHtyZXRyeUNvdW50fTogUmVxdWVzdCBhYm9ydGVkLmApO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhYm9ydEVycm9yID0gbmV3IGFib3J0X2NvbnRyb2xsZXJfMS5BYm9ydEVycm9yKCk7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGFib3J0RXJyb3I7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyZXRyeUNvdW50ID49ICgoX2IgPSBvcHRpb25zLm1heFJldHJpZXMpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IGNvbnN0YW50c19qc18xLkRFRkFVTFRfUkVUUllfUE9MSUNZX0NPVU5UKSkge1xuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhgUmV0cnkgJHtyZXRyeUNvdW50fTogTWF4aW11bSByZXRyaWVzIHJlYWNoZWQuIFJldHVybmluZyB0aGUgbGFzdCByZWNlaXZlZCByZXNwb25zZSwgb3IgdGhyb3dpbmcgdGhlIGxhc3QgcmVjZWl2ZWQgZXJyb3IuYCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZUVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyByZXNwb25zZUVycm9yO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNYXhpbXVtIHJldHJpZXMgcmVhY2hlZCB3aXRoIG5vIHJlc3BvbnNlIG9yIGVycm9yIHRvIHRocm93XCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBSZXRyeSAke3JldHJ5Q291bnR9OiBQcm9jZXNzaW5nICR7c3RyYXRlZ2llcy5sZW5ndGh9IHJldHJ5IHN0cmF0ZWdpZXMuYCk7XG4gICAgICAgICAgICAgICAgc3RyYXRlZ2llc0xvb3A6IGZvciAoY29uc3Qgc3RyYXRlZ3kgb2Ygc3RyYXRlZ2llcykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJhdGVneUxvZ2dlciA9IHN0cmF0ZWd5LmxvZ2dlciB8fCByZXRyeVBvbGljeUxvZ2dlcjtcbiAgICAgICAgICAgICAgICAgICAgc3RyYXRlZ3lMb2dnZXIuaW5mbyhgUmV0cnkgJHtyZXRyeUNvdW50fTogUHJvY2Vzc2luZyByZXRyeSBzdHJhdGVneSAke3N0cmF0ZWd5Lm5hbWV9LmApO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtb2RpZmllcnMgPSBzdHJhdGVneS5yZXRyeSh7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXRyeUNvdW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZUVycm9yLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1vZGlmaWVycy5za2lwU3RyYXRlZ3kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmF0ZWd5TG9nZ2VyLmluZm8oYFJldHJ5ICR7cmV0cnlDb3VudH06IFNraXBwZWQuYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSBzdHJhdGVnaWVzTG9vcDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGVycm9yVG9UaHJvdywgcmV0cnlBZnRlckluTXMsIHJlZGlyZWN0VG8gfSA9IG1vZGlmaWVycztcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yVG9UaHJvdykge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyYXRlZ3lMb2dnZXIuZXJyb3IoYFJldHJ5ICR7cmV0cnlDb3VudH06IFJldHJ5IHN0cmF0ZWd5ICR7c3RyYXRlZ3kubmFtZX0gdGhyb3dzIGVycm9yOmAsIGVycm9yVG9UaHJvdyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvclRvVGhyb3c7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHJldHJ5QWZ0ZXJJbk1zIHx8IHJldHJ5QWZ0ZXJJbk1zID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJhdGVneUxvZ2dlci5pbmZvKGBSZXRyeSAke3JldHJ5Q291bnR9OiBSZXRyeSBzdHJhdGVneSAke3N0cmF0ZWd5Lm5hbWV9IHJldHJpZXMgYWZ0ZXIgJHtyZXRyeUFmdGVySW5Nc31gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0ICgwLCBoZWxwZXJzX2pzXzEuZGVsYXkpKHJldHJ5QWZ0ZXJJbk1zLCB1bmRlZmluZWQsIHsgYWJvcnRTaWduYWw6IHJlcXVlc3QuYWJvcnRTaWduYWwgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSByZXRyeVJlcXVlc3Q7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZGlyZWN0VG8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmF0ZWd5TG9nZ2VyLmluZm8oYFJldHJ5ICR7cmV0cnlDb3VudH06IFJldHJ5IHN0cmF0ZWd5ICR7c3RyYXRlZ3kubmFtZX0gcmVkaXJlY3RzIHRvICR7cmVkaXJlY3RUb31gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QudXJsID0gcmVkaXJlY3RUbztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIHJldHJ5UmVxdWVzdDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2VFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhgTm9uZSBvZiB0aGUgcmV0cnkgc3RyYXRlZ2llcyBjb3VsZCB3b3JrIHdpdGggdGhlIHJlY2VpdmVkIGVycm9yLiBUaHJvd2luZyBpdC5gKTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgcmVzcG9uc2VFcnJvcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBOb25lIG9mIHRoZSByZXRyeSBzdHJhdGVnaWVzIGNvdWxkIHdvcmsgd2l0aCB0aGUgcmVjZWl2ZWQgcmVzcG9uc2UuIFJldHVybmluZyBpdC5gKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBJZiBhbGwgdGhlIHJldHJpZXMgc2tpcCBhbmQgdGhlcmUncyBubyByZXNwb25zZSxcbiAgICAgICAgICAgICAgICAvLyB3ZSdyZSBzdGlsbCBpbiB0aGUgcmV0cnkgbG9vcCwgc28gYSBuZXcgcmVxdWVzdCB3aWxsIGJlIHNlbnRcbiAgICAgICAgICAgICAgICAvLyB1bnRpbCBgbWF4UmV0cmllc2AgaXMgcmVhY2hlZC5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmV0cnlQb2xpY3kuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZWZhdWx0UmV0cnlQb2xpY3lOYW1lID0gdm9pZCAwO1xuZXhwb3J0cy5kZWZhdWx0UmV0cnlQb2xpY3kgPSBkZWZhdWx0UmV0cnlQb2xpY3k7XG5jb25zdCBleHBvbmVudGlhbFJldHJ5U3RyYXRlZ3lfanNfMSA9IHJlcXVpcmUoXCIuLi9yZXRyeVN0cmF0ZWdpZXMvZXhwb25lbnRpYWxSZXRyeVN0cmF0ZWd5LmpzXCIpO1xuY29uc3QgdGhyb3R0bGluZ1JldHJ5U3RyYXRlZ3lfanNfMSA9IHJlcXVpcmUoXCIuLi9yZXRyeVN0cmF0ZWdpZXMvdGhyb3R0bGluZ1JldHJ5U3RyYXRlZ3kuanNcIik7XG5jb25zdCByZXRyeVBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcmV0cnlQb2xpY3kuanNcIik7XG5jb25zdCBjb25zdGFudHNfanNfMSA9IHJlcXVpcmUoXCIuLi9jb25zdGFudHMuanNcIik7XG4vKipcbiAqIE5hbWUgb2YgdGhlIHtAbGluayBkZWZhdWx0UmV0cnlQb2xpY3l9XG4gKi9cbmV4cG9ydHMuZGVmYXVsdFJldHJ5UG9saWN5TmFtZSA9IFwiZGVmYXVsdFJldHJ5UG9saWN5XCI7XG4vKipcbiAqIEEgcG9saWN5IHRoYXQgcmV0cmllcyBhY2NvcmRpbmcgdG8gdGhyZWUgc3RyYXRlZ2llczpcbiAqIC0gV2hlbiB0aGUgc2VydmVyIHNlbmRzIGEgNDI5IHJlc3BvbnNlIHdpdGggYSBSZXRyeS1BZnRlciBoZWFkZXIuXG4gKiAtIFdoZW4gdGhlcmUgYXJlIGVycm9ycyBpbiB0aGUgdW5kZXJseWluZyB0cmFuc3BvcnQgbGF5ZXIgKGUuZy4gRE5TIGxvb2t1cCBmYWlsdXJlcykuXG4gKiAtIE9yIG90aGVyd2lzZSBpZiB0aGUgb3V0Z29pbmcgcmVxdWVzdCBmYWlscywgaXQgd2lsbCByZXRyeSB3aXRoIGFuIGV4cG9uZW50aWFsbHkgaW5jcmVhc2luZyBkZWxheS5cbiAqL1xuZnVuY3Rpb24gZGVmYXVsdFJldHJ5UG9saWN5KG9wdGlvbnMgPSB7fSkge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBleHBvcnRzLmRlZmF1bHRSZXRyeVBvbGljeU5hbWUsXG4gICAgICAgIHNlbmRSZXF1ZXN0OiAoMCwgcmV0cnlQb2xpY3lfanNfMS5yZXRyeVBvbGljeSkoWygwLCB0aHJvdHRsaW5nUmV0cnlTdHJhdGVneV9qc18xLnRocm90dGxpbmdSZXRyeVN0cmF0ZWd5KSgpLCAoMCwgZXhwb25lbnRpYWxSZXRyeVN0cmF0ZWd5X2pzXzEuZXhwb25lbnRpYWxSZXRyeVN0cmF0ZWd5KShvcHRpb25zKV0sIHtcbiAgICAgICAgICAgIG1heFJldHJpZXM6IChfYSA9IG9wdGlvbnMubWF4UmV0cmllcykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogY29uc3RhbnRzX2pzXzEuREVGQVVMVF9SRVRSWV9QT0xJQ1lfQ09VTlQsXG4gICAgICAgIH0pLnNlbmRSZXF1ZXN0LFxuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZWZhdWx0UmV0cnlQb2xpY3kuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jcmVhdGVIdHRwSGVhZGVycyA9IGNyZWF0ZUh0dHBIZWFkZXJzO1xuZnVuY3Rpb24gbm9ybWFsaXplTmFtZShuYW1lKSB7XG4gICAgcmV0dXJuIG5hbWUudG9Mb3dlckNhc2UoKTtcbn1cbmZ1bmN0aW9uKiBoZWFkZXJJdGVyYXRvcihtYXApIHtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIG1hcC52YWx1ZXMoKSkge1xuICAgICAgICB5aWVsZCBbZW50cnkubmFtZSwgZW50cnkudmFsdWVdO1xuICAgIH1cbn1cbmNsYXNzIEh0dHBIZWFkZXJzSW1wbCB7XG4gICAgY29uc3RydWN0b3IocmF3SGVhZGVycykge1xuICAgICAgICB0aGlzLl9oZWFkZXJzTWFwID0gbmV3IE1hcCgpO1xuICAgICAgICBpZiAocmF3SGVhZGVycykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBoZWFkZXJOYW1lIG9mIE9iamVjdC5rZXlzKHJhd0hlYWRlcnMpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXQoaGVhZGVyTmFtZSwgcmF3SGVhZGVyc1toZWFkZXJOYW1lXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0IGEgaGVhZGVyIGluIHRoaXMgY29sbGVjdGlvbiB3aXRoIHRoZSBwcm92aWRlZCBuYW1lIGFuZCB2YWx1ZS4gVGhlIG5hbWUgaXNcbiAgICAgKiBjYXNlLWluc2Vuc2l0aXZlLlxuICAgICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGhlYWRlciB0byBzZXQuIFRoaXMgdmFsdWUgaXMgY2FzZS1pbnNlbnNpdGl2ZS5cbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgb2YgdGhlIGhlYWRlciB0byBzZXQuXG4gICAgICovXG4gICAgc2V0KG5hbWUsIHZhbHVlKSB7XG4gICAgICAgIHRoaXMuX2hlYWRlcnNNYXAuc2V0KG5vcm1hbGl6ZU5hbWUobmFtZSksIHsgbmFtZSwgdmFsdWU6IFN0cmluZyh2YWx1ZSkudHJpbSgpIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGhlYWRlciB2YWx1ZSBmb3IgdGhlIHByb3ZpZGVkIGhlYWRlciBuYW1lLCBvciB1bmRlZmluZWQgaWYgbm8gaGVhZGVyIGV4aXN0cyBpbiB0aGlzXG4gICAgICogY29sbGVjdGlvbiB3aXRoIHRoZSBwcm92aWRlZCBuYW1lLlxuICAgICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGhlYWRlci4gVGhpcyB2YWx1ZSBpcyBjYXNlLWluc2Vuc2l0aXZlLlxuICAgICAqL1xuICAgIGdldChuYW1lKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIChfYSA9IHRoaXMuX2hlYWRlcnNNYXAuZ2V0KG5vcm1hbGl6ZU5hbWUobmFtZSkpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCB3aGV0aGVyIG9yIG5vdCB0aGlzIGhlYWRlciBjb2xsZWN0aW9uIGNvbnRhaW5zIGEgaGVhZGVyIGVudHJ5IGZvciB0aGUgcHJvdmlkZWQgaGVhZGVyIG5hbWUuXG4gICAgICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgaGVhZGVyIHRvIHNldC4gVGhpcyB2YWx1ZSBpcyBjYXNlLWluc2Vuc2l0aXZlLlxuICAgICAqL1xuICAgIGhhcyhuYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oZWFkZXJzTWFwLmhhcyhub3JtYWxpemVOYW1lKG5hbWUpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVtb3ZlIHRoZSBoZWFkZXIgd2l0aCB0aGUgcHJvdmlkZWQgaGVhZGVyTmFtZS5cbiAgICAgKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBoZWFkZXIgdG8gcmVtb3ZlLlxuICAgICAqL1xuICAgIGRlbGV0ZShuYW1lKSB7XG4gICAgICAgIHRoaXMuX2hlYWRlcnNNYXAuZGVsZXRlKG5vcm1hbGl6ZU5hbWUobmFtZSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIEpTT04gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgSFRUUCBoZWFkZXIgY29sbGVjdGlvbi5cbiAgICAgKi9cbiAgICB0b0pTT04ob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgICAgICBpZiAob3B0aW9ucy5wcmVzZXJ2ZUNhc2UpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5faGVhZGVyc01hcC52YWx1ZXMoKSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdFtlbnRyeS5uYW1lXSA9IGVudHJ5LnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZm9yIChjb25zdCBbbm9ybWFsaXplZE5hbWUsIGVudHJ5XSBvZiB0aGlzLl9oZWFkZXJzTWFwKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0W25vcm1hbGl6ZWROYW1lXSA9IGVudHJ5LnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgSFRUUCBoZWFkZXIgY29sbGVjdGlvbi5cbiAgICAgKi9cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMudG9KU09OKHsgcHJlc2VydmVDYXNlOiB0cnVlIH0pKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSXRlcmF0ZSBvdmVyIHR1cGxlcyBvZiBoZWFkZXIgW25hbWUsIHZhbHVlXSBwYWlycy5cbiAgICAgKi9cbiAgICBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICAgICAgcmV0dXJuIGhlYWRlckl0ZXJhdG9yKHRoaXMuX2hlYWRlcnNNYXApO1xuICAgIH1cbn1cbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgdGhhdCBzYXRpc2ZpZXMgdGhlIGBIdHRwSGVhZGVyc2AgaW50ZXJmYWNlLlxuICogQHBhcmFtIHJhd0hlYWRlcnMgLSBBIHNpbXBsZSBvYmplY3QgcmVwcmVzZW50aW5nIGluaXRpYWwgaGVhZGVyc1xuICovXG5mdW5jdGlvbiBjcmVhdGVIdHRwSGVhZGVycyhyYXdIZWFkZXJzKSB7XG4gICAgcmV0dXJuIG5ldyBIdHRwSGVhZGVyc0ltcGwocmF3SGVhZGVycyk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1odHRwSGVhZGVycy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmZvcm1EYXRhUG9saWN5TmFtZSA9IHZvaWQgMDtcbmV4cG9ydHMuZm9ybURhdGFQb2xpY3kgPSBmb3JtRGF0YVBvbGljeTtcbmNvbnN0IGNvcmVfdXRpbF8xID0gcmVxdWlyZShcIkBhenVyZS9jb3JlLXV0aWxcIik7XG5jb25zdCBodHRwSGVhZGVyc19qc18xID0gcmVxdWlyZShcIi4uL2h0dHBIZWFkZXJzLmpzXCIpO1xuLyoqXG4gKiBUaGUgcHJvZ3JhbW1hdGljIGlkZW50aWZpZXIgb2YgdGhlIGZvcm1EYXRhUG9saWN5LlxuICovXG5leHBvcnRzLmZvcm1EYXRhUG9saWN5TmFtZSA9IFwiZm9ybURhdGFQb2xpY3lcIjtcbmZ1bmN0aW9uIGZvcm1EYXRhVG9Gb3JtRGF0YU1hcChmb3JtRGF0YSkge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCBmb3JtRGF0YU1hcCA9IHt9O1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIGZvcm1EYXRhLmVudHJpZXMoKSkge1xuICAgICAgICAoX2EgPSBmb3JtRGF0YU1hcFtrZXldKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAoZm9ybURhdGFNYXBba2V5XSA9IFtdKTtcbiAgICAgICAgZm9ybURhdGFNYXBba2V5XS5wdXNoKHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIGZvcm1EYXRhTWFwO1xufVxuLyoqXG4gKiBBIHBvbGljeSB0aGF0IGVuY29kZXMgRm9ybURhdGEgb24gdGhlIHJlcXVlc3QgaW50byB0aGUgYm9keS5cbiAqL1xuZnVuY3Rpb24gZm9ybURhdGFQb2xpY3koKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogZXhwb3J0cy5mb3JtRGF0YVBvbGljeU5hbWUsXG4gICAgICAgIGFzeW5jIHNlbmRSZXF1ZXN0KHJlcXVlc3QsIG5leHQpIHtcbiAgICAgICAgICAgIGlmIChjb3JlX3V0aWxfMS5pc05vZGVMaWtlICYmIHR5cGVvZiBGb3JtRGF0YSAhPT0gXCJ1bmRlZmluZWRcIiAmJiByZXF1ZXN0LmJvZHkgaW5zdGFuY2VvZiBGb3JtRGF0YSkge1xuICAgICAgICAgICAgICAgIHJlcXVlc3QuZm9ybURhdGEgPSBmb3JtRGF0YVRvRm9ybURhdGFNYXAocmVxdWVzdC5ib2R5KTtcbiAgICAgICAgICAgICAgICByZXF1ZXN0LmJvZHkgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVxdWVzdC5mb3JtRGF0YSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcmVxdWVzdC5oZWFkZXJzLmdldChcIkNvbnRlbnQtVHlwZVwiKTtcbiAgICAgICAgICAgICAgICBpZiAoY29udGVudFR5cGUgJiYgY29udGVudFR5cGUuaW5kZXhPZihcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5ib2R5ID0gd3d3Rm9ybVVybEVuY29kZShyZXF1ZXN0LmZvcm1EYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHByZXBhcmVGb3JtRGF0YShyZXF1ZXN0LmZvcm1EYXRhLCByZXF1ZXN0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVxdWVzdC5mb3JtRGF0YSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXh0KHJlcXVlc3QpO1xuICAgICAgICB9LFxuICAgIH07XG59XG5mdW5jdGlvbiB3d3dGb3JtVXJsRW5jb2RlKGZvcm1EYXRhKSB7XG4gICAgY29uc3QgdXJsU2VhcmNoUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGZvcm1EYXRhKSkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc3ViVmFsdWUgb2YgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICB1cmxTZWFyY2hQYXJhbXMuYXBwZW5kKGtleSwgc3ViVmFsdWUudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB1cmxTZWFyY2hQYXJhbXMuYXBwZW5kKGtleSwgdmFsdWUudG9TdHJpbmcoKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVybFNlYXJjaFBhcmFtcy50b1N0cmluZygpO1xufVxuYXN5bmMgZnVuY3Rpb24gcHJlcGFyZUZvcm1EYXRhKGZvcm1EYXRhLCByZXF1ZXN0KSB7XG4gICAgLy8gdmFsaWRhdGUgY29udGVudCB0eXBlIChtdWx0aXBhcnQvZm9ybS1kYXRhKVxuICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcmVxdWVzdC5oZWFkZXJzLmdldChcIkNvbnRlbnQtVHlwZVwiKTtcbiAgICBpZiAoY29udGVudFR5cGUgJiYgIWNvbnRlbnRUeXBlLnN0YXJ0c1dpdGgoXCJtdWx0aXBhcnQvZm9ybS1kYXRhXCIpKSB7XG4gICAgICAgIC8vIGNvbnRlbnQgdHlwZSBpcyBzcGVjaWZpZWQgYW5kIGlzIG5vdCBtdWx0aXBhcnQvZm9ybS1kYXRhLiBFeGl0LlxuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHJlcXVlc3QuaGVhZGVycy5zZXQoXCJDb250ZW50LVR5cGVcIiwgY29udGVudFR5cGUgIT09IG51bGwgJiYgY29udGVudFR5cGUgIT09IHZvaWQgMCA/IGNvbnRlbnRUeXBlIDogXCJtdWx0aXBhcnQvZm9ybS1kYXRhXCIpO1xuICAgIC8vIHNldCBib2R5IHRvIE11bHRpcGFydFJlcXVlc3RCb2R5IHVzaW5nIGNvbnRlbnQgZnJvbSBGb3JtRGF0YU1hcFxuICAgIGNvbnN0IHBhcnRzID0gW107XG4gICAgZm9yIChjb25zdCBbZmllbGROYW1lLCB2YWx1ZXNdIG9mIE9iamVjdC5lbnRyaWVzKGZvcm1EYXRhKSkge1xuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIEFycmF5LmlzQXJyYXkodmFsdWVzKSA/IHZhbHVlcyA6IFt2YWx1ZXNdKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgcGFydHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6ICgwLCBodHRwSGVhZGVyc19qc18xLmNyZWF0ZUh0dHBIZWFkZXJzKSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBcIkNvbnRlbnQtRGlzcG9zaXRpb25cIjogYGZvcm0tZGF0YTsgbmFtZT1cIiR7ZmllbGROYW1lfVwiYCxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIGJvZHk6ICgwLCBjb3JlX3V0aWxfMS5zdHJpbmdUb1VpbnQ4QXJyYXkpKHZhbHVlLCBcInV0Zi04XCIpLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgdmFsdWUgZm9yIGtleSAke2ZpZWxkTmFtZX06ICR7dmFsdWV9LiBWYWx1ZSBzaG91bGQgYmUgc2VyaWFsaXplZCB0byBzdHJpbmcgZmlyc3QuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyB1c2luZyB8fCBpbnN0ZWFkIG9mID8/IGhlcmUgc2luY2UgaWYgdmFsdWUubmFtZSBpcyBlbXB0eSB3ZSBzaG91bGQgY3JlYXRlIGEgZmlsZSBuYW1lXG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZU5hbWUgPSB2YWx1ZS5uYW1lIHx8IFwiYmxvYlwiO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSAoMCwgaHR0cEhlYWRlcnNfanNfMS5jcmVhdGVIdHRwSGVhZGVycykoKTtcbiAgICAgICAgICAgICAgICBoZWFkZXJzLnNldChcIkNvbnRlbnQtRGlzcG9zaXRpb25cIiwgYGZvcm0tZGF0YTsgbmFtZT1cIiR7ZmllbGROYW1lfVwiOyBmaWxlbmFtZT1cIiR7ZmlsZU5hbWV9XCJgKTtcbiAgICAgICAgICAgICAgICAvLyBhZ2FpbiwgfHwgaXMgdXNlZCBzaW5jZSBhbiBlbXB0eSB2YWx1ZS50eXBlIG1lYW5zIHRoZSBjb250ZW50IHR5cGUgaXMgdW5zZXRcbiAgICAgICAgICAgICAgICBoZWFkZXJzLnNldChcIkNvbnRlbnQtVHlwZVwiLCB2YWx1ZS50eXBlIHx8IFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCIpO1xuICAgICAgICAgICAgICAgIHBhcnRzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICBib2R5OiB2YWx1ZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXF1ZXN0Lm11bHRpcGFydEJvZHkgPSB7IHBhcnRzIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1mb3JtRGF0YVBvbGljeS5qcy5tYXAiLAogICAgIi8qKlxuICogSGVscGVycy5cbiAqL1xuXG52YXIgcyA9IDEwMDA7XG52YXIgbSA9IHMgKiA2MDtcbnZhciBoID0gbSAqIDYwO1xudmFyIGQgPSBoICogMjQ7XG52YXIgdyA9IGQgKiA3O1xudmFyIHkgPSBkICogMzY1LjI1O1xuXG4vKipcbiAqIFBhcnNlIG9yIGZvcm1hdCB0aGUgZ2l2ZW4gYHZhbGAuXG4gKlxuICogT3B0aW9uczpcbiAqXG4gKiAgLSBgbG9uZ2AgdmVyYm9zZSBmb3JtYXR0aW5nIFtmYWxzZV1cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ3xOdW1iZXJ9IHZhbFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQHRocm93cyB7RXJyb3J9IHRocm93IGFuIGVycm9yIGlmIHZhbCBpcyBub3QgYSBub24tZW1wdHkgc3RyaW5nIG9yIGEgbnVtYmVyXG4gKiBAcmV0dXJuIHtTdHJpbmd8TnVtYmVyfVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWwsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbDtcbiAgaWYgKHR5cGUgPT09ICdzdHJpbmcnICYmIHZhbC5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHBhcnNlKHZhbCk7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUodmFsKSkge1xuICAgIHJldHVybiBvcHRpb25zLmxvbmcgPyBmbXRMb25nKHZhbCkgOiBmbXRTaG9ydCh2YWwpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihcbiAgICAndmFsIGlzIG5vdCBhIG5vbi1lbXB0eSBzdHJpbmcgb3IgYSB2YWxpZCBudW1iZXIuIHZhbD0nICtcbiAgICAgIEpTT04uc3RyaW5naWZ5KHZhbClcbiAgKTtcbn07XG5cbi8qKlxuICogUGFyc2UgdGhlIGdpdmVuIGBzdHJgIGFuZCByZXR1cm4gbWlsbGlzZWNvbmRzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge051bWJlcn1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHBhcnNlKHN0cikge1xuICBzdHIgPSBTdHJpbmcoc3RyKTtcbiAgaWYgKHN0ci5sZW5ndGggPiAxMDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIG1hdGNoID0gL14oLT8oPzpcXGQrKT9cXC4/XFxkKykgKihtaWxsaXNlY29uZHM/fG1zZWNzP3xtc3xzZWNvbmRzP3xzZWNzP3xzfG1pbnV0ZXM/fG1pbnM/fG18aG91cnM/fGhycz98aHxkYXlzP3xkfHdlZWtzP3x3fHllYXJzP3x5cnM/fHkpPyQvaS5leGVjKFxuICAgIHN0clxuICApO1xuICBpZiAoIW1hdGNoKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBuID0gcGFyc2VGbG9hdChtYXRjaFsxXSk7XG4gIHZhciB0eXBlID0gKG1hdGNoWzJdIHx8ICdtcycpLnRvTG93ZXJDYXNlKCk7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ3llYXJzJzpcbiAgICBjYXNlICd5ZWFyJzpcbiAgICBjYXNlICd5cnMnOlxuICAgIGNhc2UgJ3lyJzpcbiAgICBjYXNlICd5JzpcbiAgICAgIHJldHVybiBuICogeTtcbiAgICBjYXNlICd3ZWVrcyc6XG4gICAgY2FzZSAnd2Vlayc6XG4gICAgY2FzZSAndyc6XG4gICAgICByZXR1cm4gbiAqIHc7XG4gICAgY2FzZSAnZGF5cyc6XG4gICAgY2FzZSAnZGF5JzpcbiAgICBjYXNlICdkJzpcbiAgICAgIHJldHVybiBuICogZDtcbiAgICBjYXNlICdob3Vycyc6XG4gICAgY2FzZSAnaG91cic6XG4gICAgY2FzZSAnaHJzJzpcbiAgICBjYXNlICdocic6XG4gICAgY2FzZSAnaCc6XG4gICAgICByZXR1cm4gbiAqIGg7XG4gICAgY2FzZSAnbWludXRlcyc6XG4gICAgY2FzZSAnbWludXRlJzpcbiAgICBjYXNlICdtaW5zJzpcbiAgICBjYXNlICdtaW4nOlxuICAgIGNhc2UgJ20nOlxuICAgICAgcmV0dXJuIG4gKiBtO1xuICAgIGNhc2UgJ3NlY29uZHMnOlxuICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgY2FzZSAnc2Vjcyc6XG4gICAgY2FzZSAnc2VjJzpcbiAgICBjYXNlICdzJzpcbiAgICAgIHJldHVybiBuICogcztcbiAgICBjYXNlICdtaWxsaXNlY29uZHMnOlxuICAgIGNhc2UgJ21pbGxpc2Vjb25kJzpcbiAgICBjYXNlICdtc2Vjcyc6XG4gICAgY2FzZSAnbXNlYyc6XG4gICAgY2FzZSAnbXMnOlxuICAgICAgcmV0dXJuIG47XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBTaG9ydCBmb3JtYXQgZm9yIGBtc2AuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IG1zXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBmbXRTaG9ydChtcykge1xuICB2YXIgbXNBYnMgPSBNYXRoLmFicyhtcyk7XG4gIGlmIChtc0FicyA+PSBkKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBkKSArICdkJztcbiAgfVxuICBpZiAobXNBYnMgPj0gaCkge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gaCkgKyAnaCc7XG4gIH1cbiAgaWYgKG1zQWJzID49IG0pIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIG0pICsgJ20nO1xuICB9XG4gIGlmIChtc0FicyA+PSBzKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBzKSArICdzJztcbiAgfVxuICByZXR1cm4gbXMgKyAnbXMnO1xufVxuXG4vKipcbiAqIExvbmcgZm9ybWF0IGZvciBgbXNgLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBtc1xuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gZm10TG9uZyhtcykge1xuICB2YXIgbXNBYnMgPSBNYXRoLmFicyhtcyk7XG4gIGlmIChtc0FicyA+PSBkKSB7XG4gICAgcmV0dXJuIHBsdXJhbChtcywgbXNBYnMsIGQsICdkYXknKTtcbiAgfVxuICBpZiAobXNBYnMgPj0gaCkge1xuICAgIHJldHVybiBwbHVyYWwobXMsIG1zQWJzLCBoLCAnaG91cicpO1xuICB9XG4gIGlmIChtc0FicyA+PSBtKSB7XG4gICAgcmV0dXJuIHBsdXJhbChtcywgbXNBYnMsIG0sICdtaW51dGUnKTtcbiAgfVxuICBpZiAobXNBYnMgPj0gcykge1xuICAgIHJldHVybiBwbHVyYWwobXMsIG1zQWJzLCBzLCAnc2Vjb25kJyk7XG4gIH1cbiAgcmV0dXJuIG1zICsgJyBtcyc7XG59XG5cbi8qKlxuICogUGx1cmFsaXphdGlvbiBoZWxwZXIuXG4gKi9cblxuZnVuY3Rpb24gcGx1cmFsKG1zLCBtc0FicywgbiwgbmFtZSkge1xuICB2YXIgaXNQbHVyYWwgPSBtc0FicyA+PSBuICogMS41O1xuICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIG4pICsgJyAnICsgbmFtZSArIChpc1BsdXJhbCA/ICdzJyA6ICcnKTtcbn1cbiIsCiAgICAiXG4vKipcbiAqIFRoaXMgaXMgdGhlIGNvbW1vbiBsb2dpYyBmb3IgYm90aCB0aGUgTm9kZS5qcyBhbmQgd2ViIGJyb3dzZXJcbiAqIGltcGxlbWVudGF0aW9ucyBvZiBgZGVidWcoKWAuXG4gKi9cblxuZnVuY3Rpb24gc2V0dXAoZW52KSB7XG5cdGNyZWF0ZURlYnVnLmRlYnVnID0gY3JlYXRlRGVidWc7XG5cdGNyZWF0ZURlYnVnLmRlZmF1bHQgPSBjcmVhdGVEZWJ1Zztcblx0Y3JlYXRlRGVidWcuY29lcmNlID0gY29lcmNlO1xuXHRjcmVhdGVEZWJ1Zy5kaXNhYmxlID0gZGlzYWJsZTtcblx0Y3JlYXRlRGVidWcuZW5hYmxlID0gZW5hYmxlO1xuXHRjcmVhdGVEZWJ1Zy5lbmFibGVkID0gZW5hYmxlZDtcblx0Y3JlYXRlRGVidWcuaHVtYW5pemUgPSByZXF1aXJlKCdtcycpO1xuXHRjcmVhdGVEZWJ1Zy5kZXN0cm95ID0gZGVzdHJveTtcblxuXHRPYmplY3Qua2V5cyhlbnYpLmZvckVhY2goa2V5ID0+IHtcblx0XHRjcmVhdGVEZWJ1Z1trZXldID0gZW52W2tleV07XG5cdH0pO1xuXG5cdC8qKlxuXHQqIFRoZSBjdXJyZW50bHkgYWN0aXZlIGRlYnVnIG1vZGUgbmFtZXMsIGFuZCBuYW1lcyB0byBza2lwLlxuXHQqL1xuXG5cdGNyZWF0ZURlYnVnLm5hbWVzID0gW107XG5cdGNyZWF0ZURlYnVnLnNraXBzID0gW107XG5cblx0LyoqXG5cdCogTWFwIG9mIHNwZWNpYWwgXCIlblwiIGhhbmRsaW5nIGZ1bmN0aW9ucywgZm9yIHRoZSBkZWJ1ZyBcImZvcm1hdFwiIGFyZ3VtZW50LlxuXHQqXG5cdCogVmFsaWQga2V5IG5hbWVzIGFyZSBhIHNpbmdsZSwgbG93ZXIgb3IgdXBwZXItY2FzZSBsZXR0ZXIsIGkuZS4gXCJuXCIgYW5kIFwiTlwiLlxuXHQqL1xuXHRjcmVhdGVEZWJ1Zy5mb3JtYXR0ZXJzID0ge307XG5cblx0LyoqXG5cdCogU2VsZWN0cyBhIGNvbG9yIGZvciBhIGRlYnVnIG5hbWVzcGFjZVxuXHQqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2UgVGhlIG5hbWVzcGFjZSBzdHJpbmcgZm9yIHRoZSBkZWJ1ZyBpbnN0YW5jZSB0byBiZSBjb2xvcmVkXG5cdCogQHJldHVybiB7TnVtYmVyfFN0cmluZ30gQW4gQU5TSSBjb2xvciBjb2RlIGZvciB0aGUgZ2l2ZW4gbmFtZXNwYWNlXG5cdCogQGFwaSBwcml2YXRlXG5cdCovXG5cdGZ1bmN0aW9uIHNlbGVjdENvbG9yKG5hbWVzcGFjZSkge1xuXHRcdGxldCBoYXNoID0gMDtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbmFtZXNwYWNlLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRoYXNoID0gKChoYXNoIDw8IDUpIC0gaGFzaCkgKyBuYW1lc3BhY2UuY2hhckNvZGVBdChpKTtcblx0XHRcdGhhc2ggfD0gMDsgLy8gQ29udmVydCB0byAzMmJpdCBpbnRlZ2VyXG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNyZWF0ZURlYnVnLmNvbG9yc1tNYXRoLmFicyhoYXNoKSAlIGNyZWF0ZURlYnVnLmNvbG9ycy5sZW5ndGhdO1xuXHR9XG5cdGNyZWF0ZURlYnVnLnNlbGVjdENvbG9yID0gc2VsZWN0Q29sb3I7XG5cblx0LyoqXG5cdCogQ3JlYXRlIGEgZGVidWdnZXIgd2l0aCB0aGUgZ2l2ZW4gYG5hbWVzcGFjZWAuXG5cdCpcblx0KiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlXG5cdCogQHJldHVybiB7RnVuY3Rpb259XG5cdCogQGFwaSBwdWJsaWNcblx0Ki9cblx0ZnVuY3Rpb24gY3JlYXRlRGVidWcobmFtZXNwYWNlKSB7XG5cdFx0bGV0IHByZXZUaW1lO1xuXHRcdGxldCBlbmFibGVPdmVycmlkZSA9IG51bGw7XG5cdFx0bGV0IG5hbWVzcGFjZXNDYWNoZTtcblx0XHRsZXQgZW5hYmxlZENhY2hlO1xuXG5cdFx0ZnVuY3Rpb24gZGVidWcoLi4uYXJncykge1xuXHRcdFx0Ly8gRGlzYWJsZWQ/XG5cdFx0XHRpZiAoIWRlYnVnLmVuYWJsZWQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBzZWxmID0gZGVidWc7XG5cblx0XHRcdC8vIFNldCBgZGlmZmAgdGltZXN0YW1wXG5cdFx0XHRjb25zdCBjdXJyID0gTnVtYmVyKG5ldyBEYXRlKCkpO1xuXHRcdFx0Y29uc3QgbXMgPSBjdXJyIC0gKHByZXZUaW1lIHx8IGN1cnIpO1xuXHRcdFx0c2VsZi5kaWZmID0gbXM7XG5cdFx0XHRzZWxmLnByZXYgPSBwcmV2VGltZTtcblx0XHRcdHNlbGYuY3VyciA9IGN1cnI7XG5cdFx0XHRwcmV2VGltZSA9IGN1cnI7XG5cblx0XHRcdGFyZ3NbMF0gPSBjcmVhdGVEZWJ1Zy5jb2VyY2UoYXJnc1swXSk7XG5cblx0XHRcdGlmICh0eXBlb2YgYXJnc1swXSAhPT0gJ3N0cmluZycpIHtcblx0XHRcdFx0Ly8gQW55dGhpbmcgZWxzZSBsZXQncyBpbnNwZWN0IHdpdGggJU9cblx0XHRcdFx0YXJncy51bnNoaWZ0KCclTycpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBcHBseSBhbnkgYGZvcm1hdHRlcnNgIHRyYW5zZm9ybWF0aW9uc1xuXHRcdFx0bGV0IGluZGV4ID0gMDtcblx0XHRcdGFyZ3NbMF0gPSBhcmdzWzBdLnJlcGxhY2UoLyUoW2EtekEtWiVdKS9nLCAobWF0Y2gsIGZvcm1hdCkgPT4ge1xuXHRcdFx0XHQvLyBJZiB3ZSBlbmNvdW50ZXIgYW4gZXNjYXBlZCAlIHRoZW4gZG9uJ3QgaW5jcmVhc2UgdGhlIGFycmF5IGluZGV4XG5cdFx0XHRcdGlmIChtYXRjaCA9PT0gJyUlJykge1xuXHRcdFx0XHRcdHJldHVybiAnJSc7XG5cdFx0XHRcdH1cblx0XHRcdFx0aW5kZXgrKztcblx0XHRcdFx0Y29uc3QgZm9ybWF0dGVyID0gY3JlYXRlRGVidWcuZm9ybWF0dGVyc1tmb3JtYXRdO1xuXHRcdFx0XHRpZiAodHlwZW9mIGZvcm1hdHRlciA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRcdGNvbnN0IHZhbCA9IGFyZ3NbaW5kZXhdO1xuXHRcdFx0XHRcdG1hdGNoID0gZm9ybWF0dGVyLmNhbGwoc2VsZiwgdmFsKTtcblxuXHRcdFx0XHRcdC8vIE5vdyB3ZSBuZWVkIHRvIHJlbW92ZSBgYXJnc1tpbmRleF1gIHNpbmNlIGl0J3MgaW5saW5lZCBpbiB0aGUgYGZvcm1hdGBcblx0XHRcdFx0XHRhcmdzLnNwbGljZShpbmRleCwgMSk7XG5cdFx0XHRcdFx0aW5kZXgtLTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gbWF0Y2g7XG5cdFx0XHR9KTtcblxuXHRcdFx0Ly8gQXBwbHkgZW52LXNwZWNpZmljIGZvcm1hdHRpbmcgKGNvbG9ycywgZXRjLilcblx0XHRcdGNyZWF0ZURlYnVnLmZvcm1hdEFyZ3MuY2FsbChzZWxmLCBhcmdzKTtcblxuXHRcdFx0Y29uc3QgbG9nRm4gPSBzZWxmLmxvZyB8fCBjcmVhdGVEZWJ1Zy5sb2c7XG5cdFx0XHRsb2dGbi5hcHBseShzZWxmLCBhcmdzKTtcblx0XHR9XG5cblx0XHRkZWJ1Zy5uYW1lc3BhY2UgPSBuYW1lc3BhY2U7XG5cdFx0ZGVidWcudXNlQ29sb3JzID0gY3JlYXRlRGVidWcudXNlQ29sb3JzKCk7XG5cdFx0ZGVidWcuY29sb3IgPSBjcmVhdGVEZWJ1Zy5zZWxlY3RDb2xvcihuYW1lc3BhY2UpO1xuXHRcdGRlYnVnLmV4dGVuZCA9IGV4dGVuZDtcblx0XHRkZWJ1Zy5kZXN0cm95ID0gY3JlYXRlRGVidWcuZGVzdHJveTsgLy8gWFhYIFRlbXBvcmFyeS4gV2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2UuXG5cblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZGVidWcsICdlbmFibGVkJywge1xuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG5cdFx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdFx0aWYgKGVuYWJsZU92ZXJyaWRlICE9PSBudWxsKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGVuYWJsZU92ZXJyaWRlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChuYW1lc3BhY2VzQ2FjaGUgIT09IGNyZWF0ZURlYnVnLm5hbWVzcGFjZXMpIHtcblx0XHRcdFx0XHRuYW1lc3BhY2VzQ2FjaGUgPSBjcmVhdGVEZWJ1Zy5uYW1lc3BhY2VzO1xuXHRcdFx0XHRcdGVuYWJsZWRDYWNoZSA9IGNyZWF0ZURlYnVnLmVuYWJsZWQobmFtZXNwYWNlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBlbmFibGVkQ2FjaGU7XG5cdFx0XHR9LFxuXHRcdFx0c2V0OiB2ID0+IHtcblx0XHRcdFx0ZW5hYmxlT3ZlcnJpZGUgPSB2O1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0Ly8gRW52LXNwZWNpZmljIGluaXRpYWxpemF0aW9uIGxvZ2ljIGZvciBkZWJ1ZyBpbnN0YW5jZXNcblx0XHRpZiAodHlwZW9mIGNyZWF0ZURlYnVnLmluaXQgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdGNyZWF0ZURlYnVnLmluaXQoZGVidWcpO1xuXHRcdH1cblxuXHRcdHJldHVybiBkZWJ1Zztcblx0fVxuXG5cdGZ1bmN0aW9uIGV4dGVuZChuYW1lc3BhY2UsIGRlbGltaXRlcikge1xuXHRcdGNvbnN0IG5ld0RlYnVnID0gY3JlYXRlRGVidWcodGhpcy5uYW1lc3BhY2UgKyAodHlwZW9mIGRlbGltaXRlciA9PT0gJ3VuZGVmaW5lZCcgPyAnOicgOiBkZWxpbWl0ZXIpICsgbmFtZXNwYWNlKTtcblx0XHRuZXdEZWJ1Zy5sb2cgPSB0aGlzLmxvZztcblx0XHRyZXR1cm4gbmV3RGVidWc7XG5cdH1cblxuXHQvKipcblx0KiBFbmFibGVzIGEgZGVidWcgbW9kZSBieSBuYW1lc3BhY2VzLiBUaGlzIGNhbiBpbmNsdWRlIG1vZGVzXG5cdCogc2VwYXJhdGVkIGJ5IGEgY29sb24gYW5kIHdpbGRjYXJkcy5cblx0KlxuXHQqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2VzXG5cdCogQGFwaSBwdWJsaWNcblx0Ki9cblx0ZnVuY3Rpb24gZW5hYmxlKG5hbWVzcGFjZXMpIHtcblx0XHRjcmVhdGVEZWJ1Zy5zYXZlKG5hbWVzcGFjZXMpO1xuXHRcdGNyZWF0ZURlYnVnLm5hbWVzcGFjZXMgPSBuYW1lc3BhY2VzO1xuXG5cdFx0Y3JlYXRlRGVidWcubmFtZXMgPSBbXTtcblx0XHRjcmVhdGVEZWJ1Zy5za2lwcyA9IFtdO1xuXG5cdFx0bGV0IGk7XG5cdFx0Y29uc3Qgc3BsaXQgPSAodHlwZW9mIG5hbWVzcGFjZXMgPT09ICdzdHJpbmcnID8gbmFtZXNwYWNlcyA6ICcnKS5zcGxpdCgvW1xccyxdKy8pO1xuXHRcdGNvbnN0IGxlbiA9IHNwbGl0Lmxlbmd0aDtcblxuXHRcdGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuXHRcdFx0aWYgKCFzcGxpdFtpXSkge1xuXHRcdFx0XHQvLyBpZ25vcmUgZW1wdHkgc3RyaW5nc1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0bmFtZXNwYWNlcyA9IHNwbGl0W2ldLnJlcGxhY2UoL1xcKi9nLCAnLio/Jyk7XG5cblx0XHRcdGlmIChuYW1lc3BhY2VzWzBdID09PSAnLScpIHtcblx0XHRcdFx0Y3JlYXRlRGVidWcuc2tpcHMucHVzaChuZXcgUmVnRXhwKCdeJyArIG5hbWVzcGFjZXMuc2xpY2UoMSkgKyAnJCcpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNyZWF0ZURlYnVnLm5hbWVzLnB1c2gobmV3IFJlZ0V4cCgnXicgKyBuYW1lc3BhY2VzICsgJyQnKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCogRGlzYWJsZSBkZWJ1ZyBvdXRwdXQuXG5cdCpcblx0KiBAcmV0dXJuIHtTdHJpbmd9IG5hbWVzcGFjZXNcblx0KiBAYXBpIHB1YmxpY1xuXHQqL1xuXHRmdW5jdGlvbiBkaXNhYmxlKCkge1xuXHRcdGNvbnN0IG5hbWVzcGFjZXMgPSBbXG5cdFx0XHQuLi5jcmVhdGVEZWJ1Zy5uYW1lcy5tYXAodG9OYW1lc3BhY2UpLFxuXHRcdFx0Li4uY3JlYXRlRGVidWcuc2tpcHMubWFwKHRvTmFtZXNwYWNlKS5tYXAobmFtZXNwYWNlID0+ICctJyArIG5hbWVzcGFjZSlcblx0XHRdLmpvaW4oJywnKTtcblx0XHRjcmVhdGVEZWJ1Zy5lbmFibGUoJycpO1xuXHRcdHJldHVybiBuYW1lc3BhY2VzO1xuXHR9XG5cblx0LyoqXG5cdCogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBtb2RlIG5hbWUgaXMgZW5hYmxlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuXHQqXG5cdCogQHBhcmFtIHtTdHJpbmd9IG5hbWVcblx0KiBAcmV0dXJuIHtCb29sZWFufVxuXHQqIEBhcGkgcHVibGljXG5cdCovXG5cdGZ1bmN0aW9uIGVuYWJsZWQobmFtZSkge1xuXHRcdGlmIChuYW1lW25hbWUubGVuZ3RoIC0gMV0gPT09ICcqJykge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0bGV0IGk7XG5cdFx0bGV0IGxlbjtcblxuXHRcdGZvciAoaSA9IDAsIGxlbiA9IGNyZWF0ZURlYnVnLnNraXBzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0XHRpZiAoY3JlYXRlRGVidWcuc2tpcHNbaV0udGVzdChuYW1lKSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Zm9yIChpID0gMCwgbGVuID0gY3JlYXRlRGVidWcubmFtZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcblx0XHRcdGlmIChjcmVhdGVEZWJ1Zy5uYW1lc1tpXS50ZXN0KG5hbWUpKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQqIENvbnZlcnQgcmVnZXhwIHRvIG5hbWVzcGFjZVxuXHQqXG5cdCogQHBhcmFtIHtSZWdFeHB9IHJlZ3hlcFxuXHQqIEByZXR1cm4ge1N0cmluZ30gbmFtZXNwYWNlXG5cdCogQGFwaSBwcml2YXRlXG5cdCovXG5cdGZ1bmN0aW9uIHRvTmFtZXNwYWNlKHJlZ2V4cCkge1xuXHRcdHJldHVybiByZWdleHAudG9TdHJpbmcoKVxuXHRcdFx0LnN1YnN0cmluZygyLCByZWdleHAudG9TdHJpbmcoKS5sZW5ndGggLSAyKVxuXHRcdFx0LnJlcGxhY2UoL1xcLlxcKlxcPyQvLCAnKicpO1xuXHR9XG5cblx0LyoqXG5cdCogQ29lcmNlIGB2YWxgLlxuXHQqXG5cdCogQHBhcmFtIHtNaXhlZH0gdmFsXG5cdCogQHJldHVybiB7TWl4ZWR9XG5cdCogQGFwaSBwcml2YXRlXG5cdCovXG5cdGZ1bmN0aW9uIGNvZXJjZSh2YWwpIHtcblx0XHRpZiAodmFsIGluc3RhbmNlb2YgRXJyb3IpIHtcblx0XHRcdHJldHVybiB2YWwuc3RhY2sgfHwgdmFsLm1lc3NhZ2U7XG5cdFx0fVxuXHRcdHJldHVybiB2YWw7XG5cdH1cblxuXHQvKipcblx0KiBYWFggRE8gTk9UIFVTRS4gVGhpcyBpcyBhIHRlbXBvcmFyeSBzdHViIGZ1bmN0aW9uLlxuXHQqIFhYWCBJdCBXSUxMIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZS5cblx0Ki9cblx0ZnVuY3Rpb24gZGVzdHJveSgpIHtcblx0XHRjb25zb2xlLndhcm4oJ0luc3RhbmNlIG1ldGhvZCBgZGVidWcuZGVzdHJveSgpYCBpcyBkZXByZWNhdGVkIGFuZCBubyBsb25nZXIgZG9lcyBhbnl0aGluZy4gSXQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24gb2YgYGRlYnVnYC4nKTtcblx0fVxuXG5cdGNyZWF0ZURlYnVnLmVuYWJsZShjcmVhdGVEZWJ1Zy5sb2FkKCkpO1xuXG5cdHJldHVybiBjcmVhdGVEZWJ1Zztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXR1cDtcbiIsCiAgICAiLyogZXNsaW50LWVudiBicm93c2VyICovXG5cbi8qKlxuICogVGhpcyBpcyB0aGUgd2ViIGJyb3dzZXIgaW1wbGVtZW50YXRpb24gb2YgYGRlYnVnKClgLlxuICovXG5cbmV4cG9ydHMuZm9ybWF0QXJncyA9IGZvcm1hdEFyZ3M7XG5leHBvcnRzLnNhdmUgPSBzYXZlO1xuZXhwb3J0cy5sb2FkID0gbG9hZDtcbmV4cG9ydHMudXNlQ29sb3JzID0gdXNlQ29sb3JzO1xuZXhwb3J0cy5zdG9yYWdlID0gbG9jYWxzdG9yYWdlKCk7XG5leHBvcnRzLmRlc3Ryb3kgPSAoKCkgPT4ge1xuXHRsZXQgd2FybmVkID0gZmFsc2U7XG5cblx0cmV0dXJuICgpID0+IHtcblx0XHRpZiAoIXdhcm5lZCkge1xuXHRcdFx0d2FybmVkID0gdHJ1ZTtcblx0XHRcdGNvbnNvbGUud2FybignSW5zdGFuY2UgbWV0aG9kIGBkZWJ1Zy5kZXN0cm95KClgIGlzIGRlcHJlY2F0ZWQgYW5kIG5vIGxvbmdlciBkb2VzIGFueXRoaW5nLiBJdCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbiBvZiBgZGVidWdgLicpO1xuXHRcdH1cblx0fTtcbn0pKCk7XG5cbi8qKlxuICogQ29sb3JzLlxuICovXG5cbmV4cG9ydHMuY29sb3JzID0gW1xuXHQnIzAwMDBDQycsXG5cdCcjMDAwMEZGJyxcblx0JyMwMDMzQ0MnLFxuXHQnIzAwMzNGRicsXG5cdCcjMDA2NkNDJyxcblx0JyMwMDY2RkYnLFxuXHQnIzAwOTlDQycsXG5cdCcjMDA5OUZGJyxcblx0JyMwMENDMDAnLFxuXHQnIzAwQ0MzMycsXG5cdCcjMDBDQzY2Jyxcblx0JyMwMENDOTknLFxuXHQnIzAwQ0NDQycsXG5cdCcjMDBDQ0ZGJyxcblx0JyMzMzAwQ0MnLFxuXHQnIzMzMDBGRicsXG5cdCcjMzMzM0NDJyxcblx0JyMzMzMzRkYnLFxuXHQnIzMzNjZDQycsXG5cdCcjMzM2NkZGJyxcblx0JyMzMzk5Q0MnLFxuXHQnIzMzOTlGRicsXG5cdCcjMzNDQzAwJyxcblx0JyMzM0NDMzMnLFxuXHQnIzMzQ0M2NicsXG5cdCcjMzNDQzk5Jyxcblx0JyMzM0NDQ0MnLFxuXHQnIzMzQ0NGRicsXG5cdCcjNjYwMENDJyxcblx0JyM2NjAwRkYnLFxuXHQnIzY2MzNDQycsXG5cdCcjNjYzM0ZGJyxcblx0JyM2NkNDMDAnLFxuXHQnIzY2Q0MzMycsXG5cdCcjOTkwMENDJyxcblx0JyM5OTAwRkYnLFxuXHQnIzk5MzNDQycsXG5cdCcjOTkzM0ZGJyxcblx0JyM5OUNDMDAnLFxuXHQnIzk5Q0MzMycsXG5cdCcjQ0MwMDAwJyxcblx0JyNDQzAwMzMnLFxuXHQnI0NDMDA2NicsXG5cdCcjQ0MwMDk5Jyxcblx0JyNDQzAwQ0MnLFxuXHQnI0NDMDBGRicsXG5cdCcjQ0MzMzAwJyxcblx0JyNDQzMzMzMnLFxuXHQnI0NDMzM2NicsXG5cdCcjQ0MzMzk5Jyxcblx0JyNDQzMzQ0MnLFxuXHQnI0NDMzNGRicsXG5cdCcjQ0M2NjAwJyxcblx0JyNDQzY2MzMnLFxuXHQnI0NDOTkwMCcsXG5cdCcjQ0M5OTMzJyxcblx0JyNDQ0NDMDAnLFxuXHQnI0NDQ0MzMycsXG5cdCcjRkYwMDAwJyxcblx0JyNGRjAwMzMnLFxuXHQnI0ZGMDA2NicsXG5cdCcjRkYwMDk5Jyxcblx0JyNGRjAwQ0MnLFxuXHQnI0ZGMDBGRicsXG5cdCcjRkYzMzAwJyxcblx0JyNGRjMzMzMnLFxuXHQnI0ZGMzM2NicsXG5cdCcjRkYzMzk5Jyxcblx0JyNGRjMzQ0MnLFxuXHQnI0ZGMzNGRicsXG5cdCcjRkY2NjAwJyxcblx0JyNGRjY2MzMnLFxuXHQnI0ZGOTkwMCcsXG5cdCcjRkY5OTMzJyxcblx0JyNGRkNDMDAnLFxuXHQnI0ZGQ0MzMydcbl07XG5cbi8qKlxuICogQ3VycmVudGx5IG9ubHkgV2ViS2l0LWJhc2VkIFdlYiBJbnNwZWN0b3JzLCBGaXJlZm94ID49IHYzMSxcbiAqIGFuZCB0aGUgRmlyZWJ1ZyBleHRlbnNpb24gKGFueSBGaXJlZm94IHZlcnNpb24pIGFyZSBrbm93blxuICogdG8gc3VwcG9ydCBcIiVjXCIgQ1NTIGN1c3RvbWl6YXRpb25zLlxuICpcbiAqIFRPRE86IGFkZCBhIGBsb2NhbFN0b3JhZ2VgIHZhcmlhYmxlIHRvIGV4cGxpY2l0bHkgZW5hYmxlL2Rpc2FibGUgY29sb3JzXG4gKi9cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmZ1bmN0aW9uIHVzZUNvbG9ycygpIHtcblx0Ly8gTkI6IEluIGFuIEVsZWN0cm9uIHByZWxvYWQgc2NyaXB0LCBkb2N1bWVudCB3aWxsIGJlIGRlZmluZWQgYnV0IG5vdCBmdWxseVxuXHQvLyBpbml0aWFsaXplZC4gU2luY2Ugd2Uga25vdyB3ZSdyZSBpbiBDaHJvbWUsIHdlJ2xsIGp1c3QgZGV0ZWN0IHRoaXMgY2FzZVxuXHQvLyBleHBsaWNpdGx5XG5cdGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cucHJvY2VzcyAmJiAod2luZG93LnByb2Nlc3MudHlwZSA9PT0gJ3JlbmRlcmVyJyB8fCB3aW5kb3cucHJvY2Vzcy5fX253anMpKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvLyBJbnRlcm5ldCBFeHBsb3JlciBhbmQgRWRnZSBkbyBub3Qgc3VwcG9ydCBjb2xvcnMuXG5cdGlmICh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IudXNlckFnZW50ICYmIG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvKGVkZ2V8dHJpZGVudClcXC8oXFxkKykvKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGxldCBtO1xuXG5cdC8vIElzIHdlYmtpdD8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMTY0NTk2MDYvMzc2NzczXG5cdC8vIGRvY3VtZW50IGlzIHVuZGVmaW5lZCBpbiByZWFjdC1uYXRpdmU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC1uYXRpdmUvcHVsbC8xNjMyXG5cdHJldHVybiAodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5XZWJraXRBcHBlYXJhbmNlKSB8fFxuXHRcdC8vIElzIGZpcmVidWc/IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzM5ODEyMC8zNzY3NzNcblx0XHQodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmNvbnNvbGUgJiYgKHdpbmRvdy5jb25zb2xlLmZpcmVidWcgfHwgKHdpbmRvdy5jb25zb2xlLmV4Y2VwdGlvbiAmJiB3aW5kb3cuY29uc29sZS50YWJsZSkpKSB8fFxuXHRcdC8vIElzIGZpcmVmb3ggPj0gdjMxP1xuXHRcdC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvVG9vbHMvV2ViX0NvbnNvbGUjU3R5bGluZ19tZXNzYWdlc1xuXHRcdCh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IudXNlckFnZW50ICYmIChtID0gbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC9maXJlZm94XFwvKFxcZCspLykpICYmIHBhcnNlSW50KG1bMV0sIDEwKSA+PSAzMSkgfHxcblx0XHQvLyBEb3VibGUgY2hlY2sgd2Via2l0IGluIHVzZXJBZ2VudCBqdXN0IGluIGNhc2Ugd2UgYXJlIGluIGEgd29ya2VyXG5cdFx0KHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci51c2VyQWdlbnQgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC9hcHBsZXdlYmtpdFxcLyhcXGQrKS8pKTtcbn1cblxuLyoqXG4gKiBDb2xvcml6ZSBsb2cgYXJndW1lbnRzIGlmIGVuYWJsZWQuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBmb3JtYXRBcmdzKGFyZ3MpIHtcblx0YXJnc1swXSA9ICh0aGlzLnVzZUNvbG9ycyA/ICclYycgOiAnJykgK1xuXHRcdHRoaXMubmFtZXNwYWNlICtcblx0XHQodGhpcy51c2VDb2xvcnMgPyAnICVjJyA6ICcgJykgK1xuXHRcdGFyZ3NbMF0gK1xuXHRcdCh0aGlzLnVzZUNvbG9ycyA/ICclYyAnIDogJyAnKSArXG5cdFx0JysnICsgbW9kdWxlLmV4cG9ydHMuaHVtYW5pemUodGhpcy5kaWZmKTtcblxuXHRpZiAoIXRoaXMudXNlQ29sb3JzKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y29uc3QgYyA9ICdjb2xvcjogJyArIHRoaXMuY29sb3I7XG5cdGFyZ3Muc3BsaWNlKDEsIDAsIGMsICdjb2xvcjogaW5oZXJpdCcpO1xuXG5cdC8vIFRoZSBmaW5hbCBcIiVjXCIgaXMgc29tZXdoYXQgdHJpY2t5LCBiZWNhdXNlIHRoZXJlIGNvdWxkIGJlIG90aGVyXG5cdC8vIGFyZ3VtZW50cyBwYXNzZWQgZWl0aGVyIGJlZm9yZSBvciBhZnRlciB0aGUgJWMsIHNvIHdlIG5lZWQgdG9cblx0Ly8gZmlndXJlIG91dCB0aGUgY29ycmVjdCBpbmRleCB0byBpbnNlcnQgdGhlIENTUyBpbnRvXG5cdGxldCBpbmRleCA9IDA7XG5cdGxldCBsYXN0QyA9IDA7XG5cdGFyZ3NbMF0ucmVwbGFjZSgvJVthLXpBLVolXS9nLCBtYXRjaCA9PiB7XG5cdFx0aWYgKG1hdGNoID09PSAnJSUnKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGluZGV4Kys7XG5cdFx0aWYgKG1hdGNoID09PSAnJWMnKSB7XG5cdFx0XHQvLyBXZSBvbmx5IGFyZSBpbnRlcmVzdGVkIGluIHRoZSAqbGFzdCogJWNcblx0XHRcdC8vICh0aGUgdXNlciBtYXkgaGF2ZSBwcm92aWRlZCB0aGVpciBvd24pXG5cdFx0XHRsYXN0QyA9IGluZGV4O1xuXHRcdH1cblx0fSk7XG5cblx0YXJncy5zcGxpY2UobGFzdEMsIDAsIGMpO1xufVxuXG4vKipcbiAqIEludm9rZXMgYGNvbnNvbGUuZGVidWcoKWAgd2hlbiBhdmFpbGFibGUuXG4gKiBOby1vcCB3aGVuIGBjb25zb2xlLmRlYnVnYCBpcyBub3QgYSBcImZ1bmN0aW9uXCIuXG4gKiBJZiBgY29uc29sZS5kZWJ1Z2AgaXMgbm90IGF2YWlsYWJsZSwgZmFsbHMgYmFja1xuICogdG8gYGNvbnNvbGUubG9nYC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5leHBvcnRzLmxvZyA9IGNvbnNvbGUuZGVidWcgfHwgY29uc29sZS5sb2cgfHwgKCgpID0+IHt9KTtcblxuLyoqXG4gKiBTYXZlIGBuYW1lc3BhY2VzYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlc1xuICogQGFwaSBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNhdmUobmFtZXNwYWNlcykge1xuXHR0cnkge1xuXHRcdGlmIChuYW1lc3BhY2VzKSB7XG5cdFx0XHRleHBvcnRzLnN0b3JhZ2Uuc2V0SXRlbSgnZGVidWcnLCBuYW1lc3BhY2VzKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZXhwb3J0cy5zdG9yYWdlLnJlbW92ZUl0ZW0oJ2RlYnVnJyk7XG5cdFx0fVxuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdC8vIFN3YWxsb3dcblx0XHQvLyBYWFggKEBRaXgtKSBzaG91bGQgd2UgYmUgbG9nZ2luZyB0aGVzZT9cblx0fVxufVxuXG4vKipcbiAqIExvYWQgYG5hbWVzcGFjZXNgLlxuICpcbiAqIEByZXR1cm4ge1N0cmluZ30gcmV0dXJucyB0aGUgcHJldmlvdXNseSBwZXJzaXN0ZWQgZGVidWcgbW9kZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBsb2FkKCkge1xuXHRsZXQgcjtcblx0dHJ5IHtcblx0XHRyID0gZXhwb3J0cy5zdG9yYWdlLmdldEl0ZW0oJ2RlYnVnJyk7XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0Ly8gU3dhbGxvd1xuXHRcdC8vIFhYWCAoQFFpeC0pIHNob3VsZCB3ZSBiZSBsb2dnaW5nIHRoZXNlP1xuXHR9XG5cblx0Ly8gSWYgZGVidWcgaXNuJ3Qgc2V0IGluIExTLCBhbmQgd2UncmUgaW4gRWxlY3Ryb24sIHRyeSB0byBsb2FkICRERUJVR1xuXHRpZiAoIXIgJiYgdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmICdlbnYnIGluIHByb2Nlc3MpIHtcblx0XHRyID0gcHJvY2Vzcy5lbnYuREVCVUc7XG5cdH1cblxuXHRyZXR1cm4gcjtcbn1cblxuLyoqXG4gKiBMb2NhbHN0b3JhZ2UgYXR0ZW1wdHMgdG8gcmV0dXJuIHRoZSBsb2NhbHN0b3JhZ2UuXG4gKlxuICogVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBzYWZhcmkgdGhyb3dzXG4gKiB3aGVuIGEgdXNlciBkaXNhYmxlcyBjb29raWVzL2xvY2Fsc3RvcmFnZVxuICogYW5kIHlvdSBhdHRlbXB0IHRvIGFjY2VzcyBpdC5cbiAqXG4gKiBAcmV0dXJuIHtMb2NhbFN0b3JhZ2V9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBsb2NhbHN0b3JhZ2UoKSB7XG5cdHRyeSB7XG5cdFx0Ly8gVFZNTEtpdCAoQXBwbGUgVFYgSlMgUnVudGltZSkgZG9lcyBub3QgaGF2ZSBhIHdpbmRvdyBvYmplY3QsIGp1c3QgbG9jYWxTdG9yYWdlIGluIHRoZSBnbG9iYWwgY29udGV4dFxuXHRcdC8vIFRoZSBCcm93c2VyIGFsc28gaGFzIGxvY2FsU3RvcmFnZSBpbiB0aGUgZ2xvYmFsIGNvbnRleHQuXG5cdFx0cmV0dXJuIGxvY2FsU3RvcmFnZTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHQvLyBTd2FsbG93XG5cdFx0Ly8gWFhYIChAUWl4LSkgc2hvdWxkIHdlIGJlIGxvZ2dpbmcgdGhlc2U/XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2NvbW1vbicpKGV4cG9ydHMpO1xuXG5jb25zdCB7Zm9ybWF0dGVyc30gPSBtb2R1bGUuZXhwb3J0cztcblxuLyoqXG4gKiBNYXAgJWogdG8gYEpTT04uc3RyaW5naWZ5KClgLCBzaW5jZSBubyBXZWIgSW5zcGVjdG9ycyBkbyB0aGF0IGJ5IGRlZmF1bHQuXG4gKi9cblxuZm9ybWF0dGVycy5qID0gZnVuY3Rpb24gKHYpIHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkodik7XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0cmV0dXJuICdbVW5leHBlY3RlZEpTT05QYXJzZUVycm9yXTogJyArIGVycm9yLm1lc3NhZ2U7XG5cdH1cbn07XG4iLAogICAgIi8qKlxuICogTW9kdWxlIGRlcGVuZGVuY2llcy5cbiAqL1xuXG5jb25zdCB0dHkgPSByZXF1aXJlKCd0dHknKTtcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgTm9kZS5qcyBpbXBsZW1lbnRhdGlvbiBvZiBgZGVidWcoKWAuXG4gKi9cblxuZXhwb3J0cy5pbml0ID0gaW5pdDtcbmV4cG9ydHMubG9nID0gbG9nO1xuZXhwb3J0cy5mb3JtYXRBcmdzID0gZm9ybWF0QXJncztcbmV4cG9ydHMuc2F2ZSA9IHNhdmU7XG5leHBvcnRzLmxvYWQgPSBsb2FkO1xuZXhwb3J0cy51c2VDb2xvcnMgPSB1c2VDb2xvcnM7XG5leHBvcnRzLmRlc3Ryb3kgPSB1dGlsLmRlcHJlY2F0ZShcblx0KCkgPT4ge30sXG5cdCdJbnN0YW5jZSBtZXRob2QgYGRlYnVnLmRlc3Ryb3koKWAgaXMgZGVwcmVjYXRlZCBhbmQgbm8gbG9uZ2VyIGRvZXMgYW55dGhpbmcuIEl0IHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIGBkZWJ1Z2AuJ1xuKTtcblxuLyoqXG4gKiBDb2xvcnMuXG4gKi9cblxuZXhwb3J0cy5jb2xvcnMgPSBbNiwgMiwgMywgNCwgNSwgMV07XG5cbnRyeSB7XG5cdC8vIE9wdGlvbmFsIGRlcGVuZGVuY3kgKGFzIGluLCBkb2Vzbid0IG5lZWQgdG8gYmUgaW5zdGFsbGVkLCBOT1QgbGlrZSBvcHRpb25hbERlcGVuZGVuY2llcyBpbiBwYWNrYWdlLmpzb24pXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXNcblx0Y29uc3Qgc3VwcG9ydHNDb2xvciA9IHJlcXVpcmUoJ3N1cHBvcnRzLWNvbG9yJyk7XG5cblx0aWYgKHN1cHBvcnRzQ29sb3IgJiYgKHN1cHBvcnRzQ29sb3Iuc3RkZXJyIHx8IHN1cHBvcnRzQ29sb3IpLmxldmVsID49IDIpIHtcblx0XHRleHBvcnRzLmNvbG9ycyA9IFtcblx0XHRcdDIwLFxuXHRcdFx0MjEsXG5cdFx0XHQyNixcblx0XHRcdDI3LFxuXHRcdFx0MzIsXG5cdFx0XHQzMyxcblx0XHRcdDM4LFxuXHRcdFx0MzksXG5cdFx0XHQ0MCxcblx0XHRcdDQxLFxuXHRcdFx0NDIsXG5cdFx0XHQ0Myxcblx0XHRcdDQ0LFxuXHRcdFx0NDUsXG5cdFx0XHQ1Nixcblx0XHRcdDU3LFxuXHRcdFx0NjIsXG5cdFx0XHQ2Myxcblx0XHRcdDY4LFxuXHRcdFx0NjksXG5cdFx0XHQ3NCxcblx0XHRcdDc1LFxuXHRcdFx0NzYsXG5cdFx0XHQ3Nyxcblx0XHRcdDc4LFxuXHRcdFx0NzksXG5cdFx0XHQ4MCxcblx0XHRcdDgxLFxuXHRcdFx0OTIsXG5cdFx0XHQ5Myxcblx0XHRcdDk4LFxuXHRcdFx0OTksXG5cdFx0XHQxMTIsXG5cdFx0XHQxMTMsXG5cdFx0XHQxMjgsXG5cdFx0XHQxMjksXG5cdFx0XHQxMzQsXG5cdFx0XHQxMzUsXG5cdFx0XHQxNDgsXG5cdFx0XHQxNDksXG5cdFx0XHQxNjAsXG5cdFx0XHQxNjEsXG5cdFx0XHQxNjIsXG5cdFx0XHQxNjMsXG5cdFx0XHQxNjQsXG5cdFx0XHQxNjUsXG5cdFx0XHQxNjYsXG5cdFx0XHQxNjcsXG5cdFx0XHQxNjgsXG5cdFx0XHQxNjksXG5cdFx0XHQxNzAsXG5cdFx0XHQxNzEsXG5cdFx0XHQxNzIsXG5cdFx0XHQxNzMsXG5cdFx0XHQxNzgsXG5cdFx0XHQxNzksXG5cdFx0XHQxODQsXG5cdFx0XHQxODUsXG5cdFx0XHQxOTYsXG5cdFx0XHQxOTcsXG5cdFx0XHQxOTgsXG5cdFx0XHQxOTksXG5cdFx0XHQyMDAsXG5cdFx0XHQyMDEsXG5cdFx0XHQyMDIsXG5cdFx0XHQyMDMsXG5cdFx0XHQyMDQsXG5cdFx0XHQyMDUsXG5cdFx0XHQyMDYsXG5cdFx0XHQyMDcsXG5cdFx0XHQyMDgsXG5cdFx0XHQyMDksXG5cdFx0XHQyMTQsXG5cdFx0XHQyMTUsXG5cdFx0XHQyMjAsXG5cdFx0XHQyMjFcblx0XHRdO1xuXHR9XG59IGNhdGNoIChlcnJvcikge1xuXHQvLyBTd2FsbG93IC0gd2Ugb25seSBjYXJlIGlmIGBzdXBwb3J0cy1jb2xvcmAgaXMgYXZhaWxhYmxlOyBpdCBkb2Vzbid0IGhhdmUgdG8gYmUuXG59XG5cbi8qKlxuICogQnVpbGQgdXAgdGhlIGRlZmF1bHQgYGluc3BlY3RPcHRzYCBvYmplY3QgZnJvbSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuICpcbiAqICAgJCBERUJVR19DT0xPUlM9bm8gREVCVUdfREVQVEg9MTAgREVCVUdfU0hPV19ISURERU49ZW5hYmxlZCBub2RlIHNjcmlwdC5qc1xuICovXG5cbmV4cG9ydHMuaW5zcGVjdE9wdHMgPSBPYmplY3Qua2V5cyhwcm9jZXNzLmVudikuZmlsdGVyKGtleSA9PiB7XG5cdHJldHVybiAvXmRlYnVnXy9pLnRlc3Qoa2V5KTtcbn0pLnJlZHVjZSgob2JqLCBrZXkpID0+IHtcblx0Ly8gQ2FtZWwtY2FzZVxuXHRjb25zdCBwcm9wID0ga2V5XG5cdFx0LnN1YnN0cmluZyg2KVxuXHRcdC50b0xvd2VyQ2FzZSgpXG5cdFx0LnJlcGxhY2UoL18oW2Etel0pL2csIChfLCBrKSA9PiB7XG5cdFx0XHRyZXR1cm4gay50b1VwcGVyQ2FzZSgpO1xuXHRcdH0pO1xuXG5cdC8vIENvZXJjZSBzdHJpbmcgdmFsdWUgaW50byBKUyB2YWx1ZVxuXHRsZXQgdmFsID0gcHJvY2Vzcy5lbnZba2V5XTtcblx0aWYgKC9eKHllc3xvbnx0cnVlfGVuYWJsZWQpJC9pLnRlc3QodmFsKSkge1xuXHRcdHZhbCA9IHRydWU7XG5cdH0gZWxzZSBpZiAoL14obm98b2ZmfGZhbHNlfGRpc2FibGVkKSQvaS50ZXN0KHZhbCkpIHtcblx0XHR2YWwgPSBmYWxzZTtcblx0fSBlbHNlIGlmICh2YWwgPT09ICdudWxsJykge1xuXHRcdHZhbCA9IG51bGw7XG5cdH0gZWxzZSB7XG5cdFx0dmFsID0gTnVtYmVyKHZhbCk7XG5cdH1cblxuXHRvYmpbcHJvcF0gPSB2YWw7XG5cdHJldHVybiBvYmo7XG59LCB7fSk7XG5cbi8qKlxuICogSXMgc3Rkb3V0IGEgVFRZPyBDb2xvcmVkIG91dHB1dCBpcyBlbmFibGVkIHdoZW4gYHRydWVgLlxuICovXG5cbmZ1bmN0aW9uIHVzZUNvbG9ycygpIHtcblx0cmV0dXJuICdjb2xvcnMnIGluIGV4cG9ydHMuaW5zcGVjdE9wdHMgP1xuXHRcdEJvb2xlYW4oZXhwb3J0cy5pbnNwZWN0T3B0cy5jb2xvcnMpIDpcblx0XHR0dHkuaXNhdHR5KHByb2Nlc3Muc3RkZXJyLmZkKTtcbn1cblxuLyoqXG4gKiBBZGRzIEFOU0kgY29sb3IgZXNjYXBlIGNvZGVzIGlmIGVuYWJsZWQuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBmb3JtYXRBcmdzKGFyZ3MpIHtcblx0Y29uc3Qge25hbWVzcGFjZTogbmFtZSwgdXNlQ29sb3JzfSA9IHRoaXM7XG5cblx0aWYgKHVzZUNvbG9ycykge1xuXHRcdGNvbnN0IGMgPSB0aGlzLmNvbG9yO1xuXHRcdGNvbnN0IGNvbG9yQ29kZSA9ICdcXHUwMDFCWzMnICsgKGMgPCA4ID8gYyA6ICc4OzU7JyArIGMpO1xuXHRcdGNvbnN0IHByZWZpeCA9IGAgICR7Y29sb3JDb2RlfTsxbSR7bmFtZX0gXFx1MDAxQlswbWA7XG5cblx0XHRhcmdzWzBdID0gcHJlZml4ICsgYXJnc1swXS5zcGxpdCgnXFxuJykuam9pbignXFxuJyArIHByZWZpeCk7XG5cdFx0YXJncy5wdXNoKGNvbG9yQ29kZSArICdtKycgKyBtb2R1bGUuZXhwb3J0cy5odW1hbml6ZSh0aGlzLmRpZmYpICsgJ1xcdTAwMUJbMG0nKTtcblx0fSBlbHNlIHtcblx0XHRhcmdzWzBdID0gZ2V0RGF0ZSgpICsgbmFtZSArICcgJyArIGFyZ3NbMF07XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0RGF0ZSgpIHtcblx0aWYgKGV4cG9ydHMuaW5zcGVjdE9wdHMuaGlkZURhdGUpIHtcblx0XHRyZXR1cm4gJyc7XG5cdH1cblx0cmV0dXJuIG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSArICcgJztcbn1cblxuLyoqXG4gKiBJbnZva2VzIGB1dGlsLmZvcm1hdFdpdGhPcHRpb25zKClgIHdpdGggdGhlIHNwZWNpZmllZCBhcmd1bWVudHMgYW5kIHdyaXRlcyB0byBzdGRlcnIuXG4gKi9cblxuZnVuY3Rpb24gbG9nKC4uLmFyZ3MpIHtcblx0cmV0dXJuIHByb2Nlc3Muc3RkZXJyLndyaXRlKHV0aWwuZm9ybWF0V2l0aE9wdGlvbnMoZXhwb3J0cy5pbnNwZWN0T3B0cywgLi4uYXJncykgKyAnXFxuJyk7XG59XG5cbi8qKlxuICogU2F2ZSBgbmFtZXNwYWNlc2AuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzYXZlKG5hbWVzcGFjZXMpIHtcblx0aWYgKG5hbWVzcGFjZXMpIHtcblx0XHRwcm9jZXNzLmVudi5ERUJVRyA9IG5hbWVzcGFjZXM7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gSWYgeW91IHNldCBhIHByb2Nlc3MuZW52IGZpZWxkIHRvIG51bGwgb3IgdW5kZWZpbmVkLCBpdCBnZXRzIGNhc3QgdG8gdGhlXG5cdFx0Ly8gc3RyaW5nICdudWxsJyBvciAndW5kZWZpbmVkJy4gSnVzdCBkZWxldGUgaW5zdGVhZC5cblx0XHRkZWxldGUgcHJvY2Vzcy5lbnYuREVCVUc7XG5cdH1cbn1cblxuLyoqXG4gKiBMb2FkIGBuYW1lc3BhY2VzYC5cbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd9IHJldHVybnMgdGhlIHByZXZpb3VzbHkgcGVyc2lzdGVkIGRlYnVnIG1vZGVzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBsb2FkKCkge1xuXHRyZXR1cm4gcHJvY2Vzcy5lbnYuREVCVUc7XG59XG5cbi8qKlxuICogSW5pdCBsb2dpYyBmb3IgYGRlYnVnYCBpbnN0YW5jZXMuXG4gKlxuICogQ3JlYXRlIGEgbmV3IGBpbnNwZWN0T3B0c2Agb2JqZWN0IGluIGNhc2UgYHVzZUNvbG9yc2AgaXMgc2V0XG4gKiBkaWZmZXJlbnRseSBmb3IgYSBwYXJ0aWN1bGFyIGBkZWJ1Z2AgaW5zdGFuY2UuXG4gKi9cblxuZnVuY3Rpb24gaW5pdChkZWJ1Zykge1xuXHRkZWJ1Zy5pbnNwZWN0T3B0cyA9IHt9O1xuXG5cdGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhleHBvcnRzLmluc3BlY3RPcHRzKTtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG5cdFx0ZGVidWcuaW5zcGVjdE9wdHNba2V5c1tpXV0gPSBleHBvcnRzLmluc3BlY3RPcHRzW2tleXNbaV1dO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9jb21tb24nKShleHBvcnRzKTtcblxuY29uc3Qge2Zvcm1hdHRlcnN9ID0gbW9kdWxlLmV4cG9ydHM7XG5cbi8qKlxuICogTWFwICVvIHRvIGB1dGlsLmluc3BlY3QoKWAsIGFsbCBvbiBhIHNpbmdsZSBsaW5lLlxuICovXG5cbmZvcm1hdHRlcnMubyA9IGZ1bmN0aW9uICh2KSB7XG5cdHRoaXMuaW5zcGVjdE9wdHMuY29sb3JzID0gdGhpcy51c2VDb2xvcnM7XG5cdHJldHVybiB1dGlsLmluc3BlY3QodiwgdGhpcy5pbnNwZWN0T3B0cylcblx0XHQuc3BsaXQoJ1xcbicpXG5cdFx0Lm1hcChzdHIgPT4gc3RyLnRyaW0oKSlcblx0XHQuam9pbignICcpO1xufTtcblxuLyoqXG4gKiBNYXAgJU8gdG8gYHV0aWwuaW5zcGVjdCgpYCwgYWxsb3dpbmcgbXVsdGlwbGUgbGluZXMgaWYgbmVlZGVkLlxuICovXG5cbmZvcm1hdHRlcnMuTyA9IGZ1bmN0aW9uICh2KSB7XG5cdHRoaXMuaW5zcGVjdE9wdHMuY29sb3JzID0gdGhpcy51c2VDb2xvcnM7XG5cdHJldHVybiB1dGlsLmluc3BlY3QodiwgdGhpcy5pbnNwZWN0T3B0cyk7XG59O1xuIiwKICAgICIvKipcbiAqIERldGVjdCBFbGVjdHJvbiByZW5kZXJlciAvIG53anMgcHJvY2Vzcywgd2hpY2ggaXMgbm9kZSwgYnV0IHdlIHNob3VsZFxuICogdHJlYXQgYXMgYSBicm93c2VyLlxuICovXG5cbmlmICh0eXBlb2YgcHJvY2VzcyA9PT0gJ3VuZGVmaW5lZCcgfHwgcHJvY2Vzcy50eXBlID09PSAncmVuZGVyZXInIHx8IHByb2Nlc3MuYnJvd3NlciA9PT0gdHJ1ZSB8fCBwcm9jZXNzLl9fbndqcykge1xuXHRtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vYnJvd3Nlci5qcycpO1xufSBlbHNlIHtcblx0bW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL25vZGUuanMnKTtcbn1cbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVxID0gZXhwb3J0cy5qc29uID0gZXhwb3J0cy50b0J1ZmZlciA9IHZvaWQgMDtcbmNvbnN0IGh0dHAgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcImh0dHBcIikpO1xuY29uc3QgaHR0cHMgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcImh0dHBzXCIpKTtcbmFzeW5jIGZ1bmN0aW9uIHRvQnVmZmVyKHN0cmVhbSkge1xuICAgIGxldCBsZW5ndGggPSAwO1xuICAgIGNvbnN0IGNodW5rcyA9IFtdO1xuICAgIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2Ygc3RyZWFtKSB7XG4gICAgICAgIGxlbmd0aCArPSBjaHVuay5sZW5ndGg7XG4gICAgICAgIGNodW5rcy5wdXNoKGNodW5rKTtcbiAgICB9XG4gICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoY2h1bmtzLCBsZW5ndGgpO1xufVxuZXhwb3J0cy50b0J1ZmZlciA9IHRvQnVmZmVyO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmFzeW5jIGZ1bmN0aW9uIGpzb24oc3RyZWFtKSB7XG4gICAgY29uc3QgYnVmID0gYXdhaXQgdG9CdWZmZXIoc3RyZWFtKTtcbiAgICBjb25zdCBzdHIgPSBidWYudG9TdHJpbmcoJ3V0ZjgnKTtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShzdHIpO1xuICAgIH1cbiAgICBjYXRjaCAoX2Vycikge1xuICAgICAgICBjb25zdCBlcnIgPSBfZXJyO1xuICAgICAgICBlcnIubWVzc2FnZSArPSBgIChpbnB1dDogJHtzdHJ9KWA7XG4gICAgICAgIHRocm93IGVycjtcbiAgICB9XG59XG5leHBvcnRzLmpzb24gPSBqc29uO1xuZnVuY3Rpb24gcmVxKHVybCwgb3B0cyA9IHt9KSB7XG4gICAgY29uc3QgaHJlZiA9IHR5cGVvZiB1cmwgPT09ICdzdHJpbmcnID8gdXJsIDogdXJsLmhyZWY7XG4gICAgY29uc3QgcmVxID0gKGhyZWYuc3RhcnRzV2l0aCgnaHR0cHM6JykgPyBodHRwcyA6IGh0dHApLnJlcXVlc3QodXJsLCBvcHRzKTtcbiAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICByZXFcbiAgICAgICAgICAgIC5vbmNlKCdyZXNwb25zZScsIHJlc29sdmUpXG4gICAgICAgICAgICAub25jZSgnZXJyb3InLCByZWplY3QpXG4gICAgICAgICAgICAuZW5kKCk7XG4gICAgfSk7XG4gICAgcmVxLnRoZW4gPSBwcm9taXNlLnRoZW4uYmluZChwcm9taXNlKTtcbiAgICByZXR1cm4gcmVxO1xufVxuZXhwb3J0cy5yZXEgPSByZXE7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1oZWxwZXJzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2V4cG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9fZXhwb3J0U3RhcikgfHwgZnVuY3Rpb24obSwgZXhwb3J0cykge1xuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZXhwb3J0cywgcCkpIF9fY3JlYXRlQmluZGluZyhleHBvcnRzLCBtLCBwKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkFnZW50ID0gdm9pZCAwO1xuY29uc3QgbmV0ID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJuZXRcIikpO1xuY29uc3QgaHR0cCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiaHR0cFwiKSk7XG5jb25zdCBodHRwc18xID0gcmVxdWlyZShcImh0dHBzXCIpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2hlbHBlcnNcIiksIGV4cG9ydHMpO1xuY29uc3QgSU5URVJOQUwgPSBTeW1ib2woJ0FnZW50QmFzZUludGVybmFsU3RhdGUnKTtcbmNsYXNzIEFnZW50IGV4dGVuZHMgaHR0cC5BZ2VudCB7XG4gICAgY29uc3RydWN0b3Iob3B0cykge1xuICAgICAgICBzdXBlcihvcHRzKTtcbiAgICAgICAgdGhpc1tJTlRFUk5BTF0gPSB7fTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBpcyBhbiBgaHR0cGAgb3IgYGh0dHBzYCByZXF1ZXN0LlxuICAgICAqL1xuICAgIGlzU2VjdXJlRW5kcG9pbnQob3B0aW9ucykge1xuICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgLy8gRmlyc3QgY2hlY2sgdGhlIGBzZWN1cmVFbmRwb2ludGAgcHJvcGVydHkgZXhwbGljaXRseSwgc2luY2UgdGhpc1xuICAgICAgICAgICAgLy8gbWVhbnMgdGhhdCBhIHBhcmVudCBgQWdlbnRgIGlzIFwicGFzc2luZyB0aHJvdWdoXCIgdG8gdGhpcyBpbnN0YW5jZS5cbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuc2VjdXJlRW5kcG9pbnQgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBvcHRpb25zLnNlY3VyZUVuZHBvaW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSWYgbm8gZXhwbGljaXQgYHNlY3VyZWAgZW5kcG9pbnQsIGNoZWNrIGlmIGBwcm90b2NvbGAgcHJvcGVydHkgaXNcbiAgICAgICAgICAgIC8vIHNldC4gVGhpcyB3aWxsIHVzdWFsbHkgYmUgdGhlIGNhc2Ugc2luY2UgdXNpbmcgYSBmdWxsIHN0cmluZyBVUkxcbiAgICAgICAgICAgIC8vIG9yIGBVUkxgIGluc3RhbmNlIHNob3VsZCBiZSB0aGUgbW9zdCBjb21tb24gdXNhZ2UuXG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMucHJvdG9jb2wgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMucHJvdG9jb2wgPT09ICdodHRwczonO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIEZpbmFsbHksIGlmIG5vIGBwcm90b2NvbGAgcHJvcGVydHkgd2FzIHNldCwgdGhlbiBmYWxsIGJhY2sgdG9cbiAgICAgICAgLy8gY2hlY2tpbmcgdGhlIHN0YWNrIHRyYWNlIG9mIHRoZSBjdXJyZW50IGNhbGwgc3RhY2ssIGFuZCB0cnkgdG9cbiAgICAgICAgLy8gZGV0ZWN0IHRoZSBcImh0dHBzXCIgbW9kdWxlLlxuICAgICAgICBjb25zdCB7IHN0YWNrIH0gPSBuZXcgRXJyb3IoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBzdGFjayAhPT0gJ3N0cmluZycpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiBzdGFja1xuICAgICAgICAgICAgLnNwbGl0KCdcXG4nKVxuICAgICAgICAgICAgLnNvbWUoKGwpID0+IGwuaW5kZXhPZignKGh0dHBzLmpzOicpICE9PSAtMSB8fFxuICAgICAgICAgICAgbC5pbmRleE9mKCdub2RlOmh0dHBzOicpICE9PSAtMSk7XG4gICAgfVxuICAgIC8vIEluIG9yZGVyIHRvIHN1cHBvcnQgYXN5bmMgc2lnbmF0dXJlcyBpbiBgY29ubmVjdCgpYCBhbmQgTm9kZSdzIG5hdGl2ZVxuICAgIC8vIGNvbm5lY3Rpb24gcG9vbGluZyBpbiBgaHR0cC5BZ2VudGAsIHRoZSBhcnJheSBvZiBzb2NrZXRzIGZvciBlYWNoIG9yaWdpblxuICAgIC8vIGhhcyB0byBiZSB1cGRhdGVkIHN5bmNocm9ub3VzbHkuIFRoaXMgaXMgc28gdGhlIGxlbmd0aCBvZiB0aGUgYXJyYXkgaXNcbiAgICAvLyBhY2N1cmF0ZSB3aGVuIGBhZGRSZXF1ZXN0KClgIGlzIG5leHQgY2FsbGVkLiBXZSBhY2hpZXZlIHRoaXMgYnkgY3JlYXRpbmcgYVxuICAgIC8vIGZha2Ugc29ja2V0IGFuZCBhZGRpbmcgaXQgdG8gYHNvY2tldHNbb3JpZ2luXWAgYW5kIGluY3JlbWVudGluZ1xuICAgIC8vIGB0b3RhbFNvY2tldENvdW50YC5cbiAgICBpbmNyZW1lbnRTb2NrZXRzKG5hbWUpIHtcbiAgICAgICAgLy8gSWYgYG1heFNvY2tldHNgIGFuZCBgbWF4VG90YWxTb2NrZXRzYCBhcmUgYm90aCBJbmZpbml0eSB0aGVuIHRoZXJlIGlzIG5vXG4gICAgICAgIC8vIG5lZWQgdG8gY3JlYXRlIGEgZmFrZSBzb2NrZXQgYmVjYXVzZSBOb2RlLmpzIG5hdGl2ZSBjb25uZWN0aW9uIHBvb2xpbmdcbiAgICAgICAgLy8gd2lsbCBuZXZlciBiZSBpbnZva2VkLlxuICAgICAgICBpZiAodGhpcy5tYXhTb2NrZXRzID09PSBJbmZpbml0eSAmJiB0aGlzLm1heFRvdGFsU29ja2V0cyA9PT0gSW5maW5pdHkpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIC8vIEFsbCBpbnN0YW5jZXMgb2YgYHNvY2tldHNgIGFyZSBleHBlY3RlZCBUeXBlU2NyaXB0IGVycm9ycy4gVGhlXG4gICAgICAgIC8vIGFsdGVybmF0aXZlIGlzIHRvIGFkZCBpdCBhcyBhIHByaXZhdGUgcHJvcGVydHkgb2YgdGhpcyBjbGFzcyBidXQgdGhhdFxuICAgICAgICAvLyB3aWxsIGJyZWFrIFR5cGVTY3JpcHQgc3ViY2xhc3NpbmcuXG4gICAgICAgIGlmICghdGhpcy5zb2NrZXRzW25hbWVdKSB7XG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGBzb2NrZXRzYCBpcyByZWFkb25seSBpbiBgQHR5cGVzL25vZGVgXG4gICAgICAgICAgICB0aGlzLnNvY2tldHNbbmFtZV0gPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmYWtlU29ja2V0ID0gbmV3IG5ldC5Tb2NrZXQoeyB3cml0YWJsZTogZmFsc2UgfSk7XG4gICAgICAgIHRoaXMuc29ja2V0c1tuYW1lXS5wdXNoKGZha2VTb2NrZXQpO1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGB0b3RhbFNvY2tldENvdW50YCBpc24ndCBkZWZpbmVkIGluIGBAdHlwZXMvbm9kZWBcbiAgICAgICAgdGhpcy50b3RhbFNvY2tldENvdW50Kys7XG4gICAgICAgIHJldHVybiBmYWtlU29ja2V0O1xuICAgIH1cbiAgICBkZWNyZW1lbnRTb2NrZXRzKG5hbWUsIHNvY2tldCkge1xuICAgICAgICBpZiAoIXRoaXMuc29ja2V0c1tuYW1lXSB8fCBzb2NrZXQgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzb2NrZXRzID0gdGhpcy5zb2NrZXRzW25hbWVdO1xuICAgICAgICBjb25zdCBpbmRleCA9IHNvY2tldHMuaW5kZXhPZihzb2NrZXQpO1xuICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICBzb2NrZXRzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yICBgdG90YWxTb2NrZXRDb3VudGAgaXNuJ3QgZGVmaW5lZCBpbiBgQHR5cGVzL25vZGVgXG4gICAgICAgICAgICB0aGlzLnRvdGFsU29ja2V0Q291bnQtLTtcbiAgICAgICAgICAgIGlmIChzb2NrZXRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgYHNvY2tldHNgIGlzIHJlYWRvbmx5IGluIGBAdHlwZXMvbm9kZWBcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5zb2NrZXRzW25hbWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIEluIG9yZGVyIHRvIHByb3Blcmx5IHVwZGF0ZSB0aGUgc29ja2V0IHBvb2wsIHdlIG5lZWQgdG8gY2FsbCBgZ2V0TmFtZSgpYCBvblxuICAgIC8vIHRoZSBjb3JlIGBodHRwcy5BZ2VudGAgaWYgaXQgaXMgYSBzZWN1cmVFbmRwb2ludC5cbiAgICBnZXROYW1lKG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3Qgc2VjdXJlRW5kcG9pbnQgPSB0eXBlb2Ygb3B0aW9ucy5zZWN1cmVFbmRwb2ludCA9PT0gJ2Jvb2xlYW4nXG4gICAgICAgICAgICA/IG9wdGlvbnMuc2VjdXJlRW5kcG9pbnRcbiAgICAgICAgICAgIDogdGhpcy5pc1NlY3VyZUVuZHBvaW50KG9wdGlvbnMpO1xuICAgICAgICBpZiAoc2VjdXJlRW5kcG9pbnQpIHtcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgYGdldE5hbWUoKWAgaXNuJ3QgZGVmaW5lZCBpbiBgQHR5cGVzL25vZGVgXG4gICAgICAgICAgICByZXR1cm4gaHR0cHNfMS5BZ2VudC5wcm90b3R5cGUuZ2V0TmFtZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgYGdldE5hbWUoKWAgaXNuJ3QgZGVmaW5lZCBpbiBgQHR5cGVzL25vZGVgXG4gICAgICAgIHJldHVybiBzdXBlci5nZXROYW1lKG9wdGlvbnMpO1xuICAgIH1cbiAgICBjcmVhdGVTb2NrZXQocmVxLCBvcHRpb25zLCBjYikge1xuICAgICAgICBjb25zdCBjb25uZWN0T3B0cyA9IHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBzZWN1cmVFbmRwb2ludDogdGhpcy5pc1NlY3VyZUVuZHBvaW50KG9wdGlvbnMpLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5nZXROYW1lKGNvbm5lY3RPcHRzKTtcbiAgICAgICAgY29uc3QgZmFrZVNvY2tldCA9IHRoaXMuaW5jcmVtZW50U29ja2V0cyhuYW1lKTtcbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKClcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHRoaXMuY29ubmVjdChyZXEsIGNvbm5lY3RPcHRzKSlcbiAgICAgICAgICAgIC50aGVuKChzb2NrZXQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZGVjcmVtZW50U29ja2V0cyhuYW1lLCBmYWtlU29ja2V0KTtcbiAgICAgICAgICAgIGlmIChzb2NrZXQgaW5zdGFuY2VvZiBodHRwLkFnZW50KSB7XG4gICAgICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBgYWRkUmVxdWVzdCgpYCBpc24ndCBkZWZpbmVkIGluIGBAdHlwZXMvbm9kZWBcbiAgICAgICAgICAgICAgICByZXR1cm4gc29ja2V0LmFkZFJlcXVlc3QocmVxLCBjb25uZWN0T3B0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzW0lOVEVSTkFMXS5jdXJyZW50U29ja2V0ID0gc29ja2V0O1xuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBgY3JlYXRlU29ja2V0KClgIGlzbid0IGRlZmluZWQgaW4gYEB0eXBlcy9ub2RlYFxuICAgICAgICAgICAgc3VwZXIuY3JlYXRlU29ja2V0KHJlcSwgb3B0aW9ucywgY2IpO1xuICAgICAgICB9LCAoZXJyKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRlY3JlbWVudFNvY2tldHMobmFtZSwgZmFrZVNvY2tldCk7XG4gICAgICAgICAgICBjYihlcnIpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgY3JlYXRlQ29ubmVjdGlvbigpIHtcbiAgICAgICAgY29uc3Qgc29ja2V0ID0gdGhpc1tJTlRFUk5BTF0uY3VycmVudFNvY2tldDtcbiAgICAgICAgdGhpc1tJTlRFUk5BTF0uY3VycmVudFNvY2tldCA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKCFzb2NrZXQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gc29ja2V0IHdhcyByZXR1cm5lZCBpbiB0aGUgYGNvbm5lY3QoKWAgZnVuY3Rpb24nKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc29ja2V0O1xuICAgIH1cbiAgICBnZXQgZGVmYXVsdFBvcnQoKSB7XG4gICAgICAgIHJldHVybiAodGhpc1tJTlRFUk5BTF0uZGVmYXVsdFBvcnQgPz9cbiAgICAgICAgICAgICh0aGlzLnByb3RvY29sID09PSAnaHR0cHM6JyA/IDQ0MyA6IDgwKSk7XG4gICAgfVxuICAgIHNldCBkZWZhdWx0UG9ydCh2KSB7XG4gICAgICAgIGlmICh0aGlzW0lOVEVSTkFMXSkge1xuICAgICAgICAgICAgdGhpc1tJTlRFUk5BTF0uZGVmYXVsdFBvcnQgPSB2O1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBwcm90b2NvbCgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzW0lOVEVSTkFMXS5wcm90b2NvbCA/P1xuICAgICAgICAgICAgKHRoaXMuaXNTZWN1cmVFbmRwb2ludCgpID8gJ2h0dHBzOicgOiAnaHR0cDonKSk7XG4gICAgfVxuICAgIHNldCBwcm90b2NvbCh2KSB7XG4gICAgICAgIGlmICh0aGlzW0lOVEVSTkFMXSkge1xuICAgICAgICAgICAgdGhpc1tJTlRFUk5BTF0ucHJvdG9jb2wgPSB2O1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5BZ2VudCA9IEFnZW50O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucGFyc2VQcm94eVJlc3BvbnNlID0gdm9pZCAwO1xuY29uc3QgZGVidWdfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiZGVidWdcIikpO1xuY29uc3QgZGVidWcgPSAoMCwgZGVidWdfMS5kZWZhdWx0KSgnaHR0cHMtcHJveHktYWdlbnQ6cGFyc2UtcHJveHktcmVzcG9uc2UnKTtcbmZ1bmN0aW9uIHBhcnNlUHJveHlSZXNwb25zZShzb2NrZXQpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAvLyB3ZSBuZWVkIHRvIGJ1ZmZlciBhbnkgSFRUUCB0cmFmZmljIHRoYXQgaGFwcGVucyB3aXRoIHRoZSBwcm94eSBiZWZvcmUgd2UgZ2V0XG4gICAgICAgIC8vIHRoZSBDT05ORUNUIHJlc3BvbnNlLCBzbyB0aGF0IGlmIHRoZSByZXNwb25zZSBpcyBhbnl0aGluZyBvdGhlciB0aGFuIGFuIFwiMjAwXCJcbiAgICAgICAgLy8gcmVzcG9uc2UgY29kZSwgdGhlbiB3ZSBjYW4gcmUtcGxheSB0aGUgXCJkYXRhXCIgZXZlbnRzIG9uIHRoZSBzb2NrZXQgb25jZSB0aGVcbiAgICAgICAgLy8gSFRUUCBwYXJzZXIgaXMgaG9va2VkIHVwLi4uXG4gICAgICAgIGxldCBidWZmZXJzTGVuZ3RoID0gMDtcbiAgICAgICAgY29uc3QgYnVmZmVycyA9IFtdO1xuICAgICAgICBmdW5jdGlvbiByZWFkKCkge1xuICAgICAgICAgICAgY29uc3QgYiA9IHNvY2tldC5yZWFkKCk7XG4gICAgICAgICAgICBpZiAoYilcbiAgICAgICAgICAgICAgICBvbmRhdGEoYik7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgc29ja2V0Lm9uY2UoJ3JlYWRhYmxlJywgcmVhZCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY2xlYW51cCgpIHtcbiAgICAgICAgICAgIHNvY2tldC5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25lbmQpO1xuICAgICAgICAgICAgc29ja2V0LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uZXJyb3IpO1xuICAgICAgICAgICAgc29ja2V0LnJlbW92ZUxpc3RlbmVyKCdyZWFkYWJsZScsIHJlYWQpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIG9uZW5kKCkge1xuICAgICAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICAgICAgZGVidWcoJ29uZW5kJyk7XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdQcm94eSBjb25uZWN0aW9uIGVuZGVkIGJlZm9yZSByZWNlaXZpbmcgQ09OTkVDVCByZXNwb25zZScpKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBvbmVycm9yKGVycikge1xuICAgICAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICAgICAgZGVidWcoJ29uZXJyb3IgJW8nLCBlcnIpO1xuICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gb25kYXRhKGIpIHtcbiAgICAgICAgICAgIGJ1ZmZlcnMucHVzaChiKTtcbiAgICAgICAgICAgIGJ1ZmZlcnNMZW5ndGggKz0gYi5sZW5ndGg7XG4gICAgICAgICAgICBjb25zdCBidWZmZXJlZCA9IEJ1ZmZlci5jb25jYXQoYnVmZmVycywgYnVmZmVyc0xlbmd0aCk7XG4gICAgICAgICAgICBjb25zdCBlbmRPZkhlYWRlcnMgPSBidWZmZXJlZC5pbmRleE9mKCdcXHJcXG5cXHJcXG4nKTtcbiAgICAgICAgICAgIGlmIChlbmRPZkhlYWRlcnMgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgLy8ga2VlcCBidWZmZXJpbmdcbiAgICAgICAgICAgICAgICBkZWJ1ZygnaGF2ZSBub3QgcmVjZWl2ZWQgZW5kIG9mIEhUVFAgaGVhZGVycyB5ZXQuLi4nKTtcbiAgICAgICAgICAgICAgICByZWFkKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaGVhZGVyUGFydHMgPSBidWZmZXJlZFxuICAgICAgICAgICAgICAgIC5zbGljZSgwLCBlbmRPZkhlYWRlcnMpXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKCdhc2NpaScpXG4gICAgICAgICAgICAgICAgLnNwbGl0KCdcXHJcXG4nKTtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0TGluZSA9IGhlYWRlclBhcnRzLnNoaWZ0KCk7XG4gICAgICAgICAgICBpZiAoIWZpcnN0TGluZSkge1xuICAgICAgICAgICAgICAgIHNvY2tldC5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoJ05vIGhlYWRlciByZWNlaXZlZCBmcm9tIHByb3h5IENPTk5FQ1QgcmVzcG9uc2UnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBmaXJzdExpbmVQYXJ0cyA9IGZpcnN0TGluZS5zcGxpdCgnICcpO1xuICAgICAgICAgICAgY29uc3Qgc3RhdHVzQ29kZSA9ICtmaXJzdExpbmVQYXJ0c1sxXTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXR1c1RleHQgPSBmaXJzdExpbmVQYXJ0cy5zbGljZSgyKS5qb2luKCcgJyk7XG4gICAgICAgICAgICBjb25zdCBoZWFkZXJzID0ge307XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGhlYWRlciBvZiBoZWFkZXJQYXJ0cykge1xuICAgICAgICAgICAgICAgIGlmICghaGVhZGVyKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBmaXJzdENvbG9uID0gaGVhZGVyLmluZGV4T2YoJzonKTtcbiAgICAgICAgICAgICAgICBpZiAoZmlyc3RDb2xvbiA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgc29ja2V0LmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoYEludmFsaWQgaGVhZGVyIGZyb20gcHJveHkgQ09OTkVDVCByZXNwb25zZTogXCIke2hlYWRlcn1cImApKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gaGVhZGVyLnNsaWNlKDAsIGZpcnN0Q29sb24pLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBoZWFkZXIuc2xpY2UoZmlyc3RDb2xvbiArIDEpLnRyaW1TdGFydCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSBoZWFkZXJzW2tleV07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjdXJyZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzW2tleV0gPSBbY3VycmVudCwgdmFsdWVdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGN1cnJlbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWJ1ZygnZ290IHByb3h5IHNlcnZlciByZXNwb25zZTogJW8gJW8nLCBmaXJzdExpbmUsIGhlYWRlcnMpO1xuICAgICAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgY29ubmVjdDoge1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXNDb2RlLFxuICAgICAgICAgICAgICAgICAgICBzdGF0dXNUZXh0LFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYnVmZmVyZWQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBzb2NrZXQub24oJ2Vycm9yJywgb25lcnJvcik7XG4gICAgICAgIHNvY2tldC5vbignZW5kJywgb25lbmQpO1xuICAgICAgICByZWFkKCk7XG4gICAgfSk7XG59XG5leHBvcnRzLnBhcnNlUHJveHlSZXNwb25zZSA9IHBhcnNlUHJveHlSZXNwb25zZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBhcnNlLXByb3h5LXJlc3BvbnNlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuSHR0cHNQcm94eUFnZW50ID0gdm9pZCAwO1xuY29uc3QgbmV0ID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJuZXRcIikpO1xuY29uc3QgdGxzID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJ0bHNcIikpO1xuY29uc3QgYXNzZXJ0XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImFzc2VydFwiKSk7XG5jb25zdCBkZWJ1Z18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJkZWJ1Z1wiKSk7XG5jb25zdCBhZ2VudF9iYXNlXzEgPSByZXF1aXJlKFwiYWdlbnQtYmFzZVwiKTtcbmNvbnN0IHVybF8xID0gcmVxdWlyZShcInVybFwiKTtcbmNvbnN0IHBhcnNlX3Byb3h5X3Jlc3BvbnNlXzEgPSByZXF1aXJlKFwiLi9wYXJzZS1wcm94eS1yZXNwb25zZVwiKTtcbmNvbnN0IGRlYnVnID0gKDAsIGRlYnVnXzEuZGVmYXVsdCkoJ2h0dHBzLXByb3h5LWFnZW50Jyk7XG4vKipcbiAqIFRoZSBgSHR0cHNQcm94eUFnZW50YCBpbXBsZW1lbnRzIGFuIEhUVFAgQWdlbnQgc3ViY2xhc3MgdGhhdCBjb25uZWN0cyB0b1xuICogdGhlIHNwZWNpZmllZCBcIkhUVFAocykgcHJveHkgc2VydmVyXCIgaW4gb3JkZXIgdG8gcHJveHkgSFRUUFMgcmVxdWVzdHMuXG4gKlxuICogT3V0Z29pbmcgSFRUUCByZXF1ZXN0cyBhcmUgZmlyc3QgdHVubmVsZWQgdGhyb3VnaCB0aGUgcHJveHkgc2VydmVyIHVzaW5nIHRoZVxuICogYENPTk5FQ1RgIEhUVFAgcmVxdWVzdCBtZXRob2QgdG8gZXN0YWJsaXNoIGEgY29ubmVjdGlvbiB0byB0aGUgcHJveHkgc2VydmVyLFxuICogYW5kIHRoZW4gdGhlIHByb3h5IHNlcnZlciBjb25uZWN0cyB0byB0aGUgZGVzdGluYXRpb24gdGFyZ2V0IGFuZCBpc3N1ZXMgdGhlXG4gKiBIVFRQIHJlcXVlc3QgZnJvbSB0aGUgcHJveHkgc2VydmVyLlxuICpcbiAqIGBodHRwczpgIHJlcXVlc3RzIGhhdmUgdGhlaXIgc29ja2V0IGNvbm5lY3Rpb24gdXBncmFkZWQgdG8gVExTIG9uY2VcbiAqIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBwcm94eSBzZXJ2ZXIgaGFzIGJlZW4gZXN0YWJsaXNoZWQuXG4gKi9cbmNsYXNzIEh0dHBzUHJveHlBZ2VudCBleHRlbmRzIGFnZW50X2Jhc2VfMS5BZ2VudCB7XG4gICAgY29uc3RydWN0b3IocHJveHksIG9wdHMpIHtcbiAgICAgICAgc3VwZXIob3B0cyk7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IHsgcGF0aDogdW5kZWZpbmVkIH07XG4gICAgICAgIHRoaXMucHJveHkgPSB0eXBlb2YgcHJveHkgPT09ICdzdHJpbmcnID8gbmV3IHVybF8xLlVSTChwcm94eSkgOiBwcm94eTtcbiAgICAgICAgdGhpcy5wcm94eUhlYWRlcnMgPSBvcHRzPy5oZWFkZXJzID8/IHt9O1xuICAgICAgICBkZWJ1ZygnQ3JlYXRpbmcgbmV3IEh0dHBzUHJveHlBZ2VudCBpbnN0YW5jZTogJW8nLCB0aGlzLnByb3h5LmhyZWYpO1xuICAgICAgICAvLyBUcmltIG9mZiB0aGUgYnJhY2tldHMgZnJvbSBJUHY2IGFkZHJlc3Nlc1xuICAgICAgICBjb25zdCBob3N0ID0gKHRoaXMucHJveHkuaG9zdG5hbWUgfHwgdGhpcy5wcm94eS5ob3N0KS5yZXBsYWNlKC9eXFxbfFxcXSQvZywgJycpO1xuICAgICAgICBjb25zdCBwb3J0ID0gdGhpcy5wcm94eS5wb3J0XG4gICAgICAgICAgICA/IHBhcnNlSW50KHRoaXMucHJveHkucG9ydCwgMTApXG4gICAgICAgICAgICA6IHRoaXMucHJveHkucHJvdG9jb2wgPT09ICdodHRwczonXG4gICAgICAgICAgICAgICAgPyA0NDNcbiAgICAgICAgICAgICAgICA6IDgwO1xuICAgICAgICB0aGlzLmNvbm5lY3RPcHRzID0ge1xuICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBuZWdvdGlhdGUgaHR0cC8xLjEgZm9yIHByb3h5IHNlcnZlcnMgdGhhdCBzdXBwb3J0IGh0dHAvMlxuICAgICAgICAgICAgQUxQTlByb3RvY29sczogWydodHRwLzEuMSddLFxuICAgICAgICAgICAgLi4uKG9wdHMgPyBvbWl0KG9wdHMsICdoZWFkZXJzJykgOiBudWxsKSxcbiAgICAgICAgICAgIGhvc3QsXG4gICAgICAgICAgICBwb3J0LFxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDYWxsZWQgd2hlbiB0aGUgbm9kZS1jb3JlIEhUVFAgY2xpZW50IGxpYnJhcnkgaXMgY3JlYXRpbmcgYVxuICAgICAqIG5ldyBIVFRQIHJlcXVlc3QuXG4gICAgICovXG4gICAgYXN5bmMgY29ubmVjdChyZXEsIG9wdHMpIHtcbiAgICAgICAgY29uc3QgeyBwcm94eSB9ID0gdGhpcztcbiAgICAgICAgaWYgKCFvcHRzLmhvc3QpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIFwiaG9zdFwiIHByb3ZpZGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ3JlYXRlIGEgc29ja2V0IGNvbm5lY3Rpb24gdG8gdGhlIHByb3h5IHNlcnZlci5cbiAgICAgICAgbGV0IHNvY2tldDtcbiAgICAgICAgaWYgKHByb3h5LnByb3RvY29sID09PSAnaHR0cHM6Jykge1xuICAgICAgICAgICAgZGVidWcoJ0NyZWF0aW5nIGB0bHMuU29ja2V0YDogJW8nLCB0aGlzLmNvbm5lY3RPcHRzKTtcbiAgICAgICAgICAgIGNvbnN0IHNlcnZlcm5hbWUgPSB0aGlzLmNvbm5lY3RPcHRzLnNlcnZlcm5hbWUgfHwgdGhpcy5jb25uZWN0T3B0cy5ob3N0O1xuICAgICAgICAgICAgc29ja2V0ID0gdGxzLmNvbm5lY3Qoe1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuY29ubmVjdE9wdHMsXG4gICAgICAgICAgICAgICAgc2VydmVybmFtZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZGVidWcoJ0NyZWF0aW5nIGBuZXQuU29ja2V0YDogJW8nLCB0aGlzLmNvbm5lY3RPcHRzKTtcbiAgICAgICAgICAgIHNvY2tldCA9IG5ldC5jb25uZWN0KHRoaXMuY29ubmVjdE9wdHMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB0eXBlb2YgdGhpcy5wcm94eUhlYWRlcnMgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICAgID8gdGhpcy5wcm94eUhlYWRlcnMoKVxuICAgICAgICAgICAgOiB7IC4uLnRoaXMucHJveHlIZWFkZXJzIH07XG4gICAgICAgIGNvbnN0IGhvc3QgPSBuZXQuaXNJUHY2KG9wdHMuaG9zdCkgPyBgWyR7b3B0cy5ob3N0fV1gIDogb3B0cy5ob3N0O1xuICAgICAgICBsZXQgcGF5bG9hZCA9IGBDT05ORUNUICR7aG9zdH06JHtvcHRzLnBvcnR9IEhUVFAvMS4xXFxyXFxuYDtcbiAgICAgICAgLy8gSW5qZWN0IHRoZSBgUHJveHktQXV0aG9yaXphdGlvbmAgaGVhZGVyIGlmIG5lY2Vzc2FyeS5cbiAgICAgICAgaWYgKHByb3h5LnVzZXJuYW1lIHx8IHByb3h5LnBhc3N3b3JkKSB7XG4gICAgICAgICAgICBjb25zdCBhdXRoID0gYCR7ZGVjb2RlVVJJQ29tcG9uZW50KHByb3h5LnVzZXJuYW1lKX06JHtkZWNvZGVVUklDb21wb25lbnQocHJveHkucGFzc3dvcmQpfWA7XG4gICAgICAgICAgICBoZWFkZXJzWydQcm94eS1BdXRob3JpemF0aW9uJ10gPSBgQmFzaWMgJHtCdWZmZXIuZnJvbShhdXRoKS50b1N0cmluZygnYmFzZTY0Jyl9YDtcbiAgICAgICAgfVxuICAgICAgICBoZWFkZXJzLkhvc3QgPSBgJHtob3N0fToke29wdHMucG9ydH1gO1xuICAgICAgICBpZiAoIWhlYWRlcnNbJ1Byb3h5LUNvbm5lY3Rpb24nXSkge1xuICAgICAgICAgICAgaGVhZGVyc1snUHJveHktQ29ubmVjdGlvbiddID0gdGhpcy5rZWVwQWxpdmVcbiAgICAgICAgICAgICAgICA/ICdLZWVwLUFsaXZlJ1xuICAgICAgICAgICAgICAgIDogJ2Nsb3NlJztcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmtleXMoaGVhZGVycykpIHtcbiAgICAgICAgICAgIHBheWxvYWQgKz0gYCR7bmFtZX06ICR7aGVhZGVyc1tuYW1lXX1cXHJcXG5gO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHByb3h5UmVzcG9uc2VQcm9taXNlID0gKDAsIHBhcnNlX3Byb3h5X3Jlc3BvbnNlXzEucGFyc2VQcm94eVJlc3BvbnNlKShzb2NrZXQpO1xuICAgICAgICBzb2NrZXQud3JpdGUoYCR7cGF5bG9hZH1cXHJcXG5gKTtcbiAgICAgICAgY29uc3QgeyBjb25uZWN0LCBidWZmZXJlZCB9ID0gYXdhaXQgcHJveHlSZXNwb25zZVByb21pc2U7XG4gICAgICAgIHJlcS5lbWl0KCdwcm94eUNvbm5lY3QnLCBjb25uZWN0KTtcbiAgICAgICAgdGhpcy5lbWl0KCdwcm94eUNvbm5lY3QnLCBjb25uZWN0LCByZXEpO1xuICAgICAgICBpZiAoY29ubmVjdC5zdGF0dXNDb2RlID09PSAyMDApIHtcbiAgICAgICAgICAgIHJlcS5vbmNlKCdzb2NrZXQnLCByZXN1bWUpO1xuICAgICAgICAgICAgaWYgKG9wdHMuc2VjdXJlRW5kcG9pbnQpIHtcbiAgICAgICAgICAgICAgICAvLyBUaGUgcHJveHkgaXMgY29ubmVjdGluZyB0byBhIFRMUyBzZXJ2ZXIsIHNvIHVwZ3JhZGVcbiAgICAgICAgICAgICAgICAvLyB0aGlzIHNvY2tldCBjb25uZWN0aW9uIHRvIGEgVExTIGNvbm5lY3Rpb24uXG4gICAgICAgICAgICAgICAgZGVidWcoJ1VwZ3JhZGluZyBzb2NrZXQgY29ubmVjdGlvbiB0byBUTFMnKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzZXJ2ZXJuYW1lID0gb3B0cy5zZXJ2ZXJuYW1lIHx8IG9wdHMuaG9zdDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGxzLmNvbm5lY3Qoe1xuICAgICAgICAgICAgICAgICAgICAuLi5vbWl0KG9wdHMsICdob3N0JywgJ3BhdGgnLCAncG9ydCcpLFxuICAgICAgICAgICAgICAgICAgICBzb2NrZXQsXG4gICAgICAgICAgICAgICAgICAgIHNlcnZlcm5hbWUsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc29ja2V0O1xuICAgICAgICB9XG4gICAgICAgIC8vIFNvbWUgb3RoZXIgc3RhdHVzIGNvZGUgdGhhdCdzIG5vdCAyMDAuLi4gbmVlZCB0byByZS1wbGF5IHRoZSBIVFRQXG4gICAgICAgIC8vIGhlYWRlciBcImRhdGFcIiBldmVudHMgb250byB0aGUgc29ja2V0IG9uY2UgdGhlIEhUVFAgbWFjaGluZXJ5IGlzXG4gICAgICAgIC8vIGF0dGFjaGVkIHNvIHRoYXQgdGhlIG5vZGUgY29yZSBgaHR0cGAgY2FuIHBhcnNlIGFuZCBoYW5kbGUgdGhlXG4gICAgICAgIC8vIGVycm9yIHN0YXR1cyBjb2RlLlxuICAgICAgICAvLyBDbG9zZSB0aGUgb3JpZ2luYWwgc29ja2V0LCBhbmQgYSBuZXcgXCJmYWtlXCIgc29ja2V0IGlzIHJldHVybmVkXG4gICAgICAgIC8vIGluc3RlYWQsIHNvIHRoYXQgdGhlIHByb3h5IGRvZXNuJ3QgZ2V0IHRoZSBIVFRQIHJlcXVlc3RcbiAgICAgICAgLy8gd3JpdHRlbiB0byBpdCAod2hpY2ggbWF5IGNvbnRhaW4gYEF1dGhvcml6YXRpb25gIGhlYWRlcnMgb3Igb3RoZXJcbiAgICAgICAgLy8gc2Vuc2l0aXZlIGRhdGEpLlxuICAgICAgICAvL1xuICAgICAgICAvLyBTZWU6IGh0dHBzOi8vaGFja2Vyb25lLmNvbS9yZXBvcnRzLzU0MTUwMlxuICAgICAgICBzb2NrZXQuZGVzdHJveSgpO1xuICAgICAgICBjb25zdCBmYWtlU29ja2V0ID0gbmV3IG5ldC5Tb2NrZXQoeyB3cml0YWJsZTogZmFsc2UgfSk7XG4gICAgICAgIGZha2VTb2NrZXQucmVhZGFibGUgPSB0cnVlO1xuICAgICAgICAvLyBOZWVkIHRvIHdhaXQgZm9yIHRoZSBcInNvY2tldFwiIGV2ZW50IHRvIHJlLXBsYXkgdGhlIFwiZGF0YVwiIGV2ZW50cy5cbiAgICAgICAgcmVxLm9uY2UoJ3NvY2tldCcsIChzKSA9PiB7XG4gICAgICAgICAgICBkZWJ1ZygnUmVwbGF5aW5nIHByb3h5IGJ1ZmZlciBmb3IgZmFpbGVkIHJlcXVlc3QnKTtcbiAgICAgICAgICAgICgwLCBhc3NlcnRfMS5kZWZhdWx0KShzLmxpc3RlbmVyQ291bnQoJ2RhdGEnKSA+IDApO1xuICAgICAgICAgICAgLy8gUmVwbGF5IHRoZSBcImJ1ZmZlcmVkXCIgQnVmZmVyIG9udG8gdGhlIGZha2UgYHNvY2tldGAsIHNpbmNlIGF0XG4gICAgICAgICAgICAvLyB0aGlzIHBvaW50IHRoZSBIVFRQIG1vZHVsZSBtYWNoaW5lcnkgaGFzIGJlZW4gaG9va2VkIHVwIGZvclxuICAgICAgICAgICAgLy8gdGhlIHVzZXIuXG4gICAgICAgICAgICBzLnB1c2goYnVmZmVyZWQpO1xuICAgICAgICAgICAgcy5wdXNoKG51bGwpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGZha2VTb2NrZXQ7XG4gICAgfVxufVxuSHR0cHNQcm94eUFnZW50LnByb3RvY29scyA9IFsnaHR0cCcsICdodHRwcyddO1xuZXhwb3J0cy5IdHRwc1Byb3h5QWdlbnQgPSBIdHRwc1Byb3h5QWdlbnQ7XG5mdW5jdGlvbiByZXN1bWUoc29ja2V0KSB7XG4gICAgc29ja2V0LnJlc3VtZSgpO1xufVxuZnVuY3Rpb24gb21pdChvYmosIC4uLmtleXMpIHtcbiAgICBjb25zdCByZXQgPSB7fTtcbiAgICBsZXQga2V5O1xuICAgIGZvciAoa2V5IGluIG9iaikge1xuICAgICAgICBpZiAoIWtleXMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgcmV0W2tleV0gPSBvYmpba2V5XTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmV0O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5IdHRwUHJveHlBZ2VudCA9IHZvaWQgMDtcbmNvbnN0IG5ldCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwibmV0XCIpKTtcbmNvbnN0IHRscyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwidGxzXCIpKTtcbmNvbnN0IGRlYnVnXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImRlYnVnXCIpKTtcbmNvbnN0IGV2ZW50c18xID0gcmVxdWlyZShcImV2ZW50c1wiKTtcbmNvbnN0IGFnZW50X2Jhc2VfMSA9IHJlcXVpcmUoXCJhZ2VudC1iYXNlXCIpO1xuY29uc3QgdXJsXzEgPSByZXF1aXJlKFwidXJsXCIpO1xuY29uc3QgZGVidWcgPSAoMCwgZGVidWdfMS5kZWZhdWx0KSgnaHR0cC1wcm94eS1hZ2VudCcpO1xuLyoqXG4gKiBUaGUgYEh0dHBQcm94eUFnZW50YCBpbXBsZW1lbnRzIGFuIEhUVFAgQWdlbnQgc3ViY2xhc3MgdGhhdCBjb25uZWN0c1xuICogdG8gdGhlIHNwZWNpZmllZCBcIkhUVFAgcHJveHkgc2VydmVyXCIgaW4gb3JkZXIgdG8gcHJveHkgSFRUUCByZXF1ZXN0cy5cbiAqL1xuY2xhc3MgSHR0cFByb3h5QWdlbnQgZXh0ZW5kcyBhZ2VudF9iYXNlXzEuQWdlbnQge1xuICAgIGNvbnN0cnVjdG9yKHByb3h5LCBvcHRzKSB7XG4gICAgICAgIHN1cGVyKG9wdHMpO1xuICAgICAgICB0aGlzLnByb3h5ID0gdHlwZW9mIHByb3h5ID09PSAnc3RyaW5nJyA/IG5ldyB1cmxfMS5VUkwocHJveHkpIDogcHJveHk7XG4gICAgICAgIHRoaXMucHJveHlIZWFkZXJzID0gb3B0cz8uaGVhZGVycyA/PyB7fTtcbiAgICAgICAgZGVidWcoJ0NyZWF0aW5nIG5ldyBIdHRwUHJveHlBZ2VudCBpbnN0YW5jZTogJW8nLCB0aGlzLnByb3h5LmhyZWYpO1xuICAgICAgICAvLyBUcmltIG9mZiB0aGUgYnJhY2tldHMgZnJvbSBJUHY2IGFkZHJlc3Nlc1xuICAgICAgICBjb25zdCBob3N0ID0gKHRoaXMucHJveHkuaG9zdG5hbWUgfHwgdGhpcy5wcm94eS5ob3N0KS5yZXBsYWNlKC9eXFxbfFxcXSQvZywgJycpO1xuICAgICAgICBjb25zdCBwb3J0ID0gdGhpcy5wcm94eS5wb3J0XG4gICAgICAgICAgICA/IHBhcnNlSW50KHRoaXMucHJveHkucG9ydCwgMTApXG4gICAgICAgICAgICA6IHRoaXMucHJveHkucHJvdG9jb2wgPT09ICdodHRwczonXG4gICAgICAgICAgICAgICAgPyA0NDNcbiAgICAgICAgICAgICAgICA6IDgwO1xuICAgICAgICB0aGlzLmNvbm5lY3RPcHRzID0ge1xuICAgICAgICAgICAgLi4uKG9wdHMgPyBvbWl0KG9wdHMsICdoZWFkZXJzJykgOiBudWxsKSxcbiAgICAgICAgICAgIGhvc3QsXG4gICAgICAgICAgICBwb3J0LFxuICAgICAgICB9O1xuICAgIH1cbiAgICBhZGRSZXF1ZXN0KHJlcSwgb3B0cykge1xuICAgICAgICByZXEuX2hlYWRlciA9IG51bGw7XG4gICAgICAgIHRoaXMuc2V0UmVxdWVzdFByb3BzKHJlcSwgb3B0cyk7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgYGFkZFJlcXVlc3QoKWAgaXNuJ3QgZGVmaW5lZCBpbiBgQHR5cGVzL25vZGVgXG4gICAgICAgIHN1cGVyLmFkZFJlcXVlc3QocmVxLCBvcHRzKTtcbiAgICB9XG4gICAgc2V0UmVxdWVzdFByb3BzKHJlcSwgb3B0cykge1xuICAgICAgICBjb25zdCB7IHByb3h5IH0gPSB0aGlzO1xuICAgICAgICBjb25zdCBwcm90b2NvbCA9IG9wdHMuc2VjdXJlRW5kcG9pbnQgPyAnaHR0cHM6JyA6ICdodHRwOic7XG4gICAgICAgIGNvbnN0IGhvc3RuYW1lID0gcmVxLmdldEhlYWRlcignaG9zdCcpIHx8ICdsb2NhbGhvc3QnO1xuICAgICAgICBjb25zdCBiYXNlID0gYCR7cHJvdG9jb2x9Ly8ke2hvc3RuYW1lfWA7XG4gICAgICAgIGNvbnN0IHVybCA9IG5ldyB1cmxfMS5VUkwocmVxLnBhdGgsIGJhc2UpO1xuICAgICAgICBpZiAob3B0cy5wb3J0ICE9PSA4MCkge1xuICAgICAgICAgICAgdXJsLnBvcnQgPSBTdHJpbmcob3B0cy5wb3J0KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBDaGFuZ2UgdGhlIGBodHRwLkNsaWVudFJlcXVlc3RgIGluc3RhbmNlJ3MgXCJwYXRoXCIgZmllbGRcbiAgICAgICAgLy8gdG8gdGhlIGFic29sdXRlIHBhdGggb2YgdGhlIFVSTCB0aGF0IHdpbGwgYmUgcmVxdWVzdGVkLlxuICAgICAgICByZXEucGF0aCA9IFN0cmluZyh1cmwpO1xuICAgICAgICAvLyBJbmplY3QgdGhlIGBQcm94eS1BdXRob3JpemF0aW9uYCBoZWFkZXIgaWYgbmVjZXNzYXJ5LlxuICAgICAgICBjb25zdCBoZWFkZXJzID0gdHlwZW9mIHRoaXMucHJveHlIZWFkZXJzID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICA/IHRoaXMucHJveHlIZWFkZXJzKClcbiAgICAgICAgICAgIDogeyAuLi50aGlzLnByb3h5SGVhZGVycyB9O1xuICAgICAgICBpZiAocHJveHkudXNlcm5hbWUgfHwgcHJveHkucGFzc3dvcmQpIHtcbiAgICAgICAgICAgIGNvbnN0IGF1dGggPSBgJHtkZWNvZGVVUklDb21wb25lbnQocHJveHkudXNlcm5hbWUpfToke2RlY29kZVVSSUNvbXBvbmVudChwcm94eS5wYXNzd29yZCl9YDtcbiAgICAgICAgICAgIGhlYWRlcnNbJ1Byb3h5LUF1dGhvcml6YXRpb24nXSA9IGBCYXNpYyAke0J1ZmZlci5mcm9tKGF1dGgpLnRvU3RyaW5nKCdiYXNlNjQnKX1gO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaGVhZGVyc1snUHJveHktQ29ubmVjdGlvbiddKSB7XG4gICAgICAgICAgICBoZWFkZXJzWydQcm94eS1Db25uZWN0aW9uJ10gPSB0aGlzLmtlZXBBbGl2ZVxuICAgICAgICAgICAgICAgID8gJ0tlZXAtQWxpdmUnXG4gICAgICAgICAgICAgICAgOiAnY2xvc2UnO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3Qua2V5cyhoZWFkZXJzKSkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBoZWFkZXJzW25hbWVdO1xuICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmVxLnNldEhlYWRlcihuYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgY29ubmVjdChyZXEsIG9wdHMpIHtcbiAgICAgICAgcmVxLl9oZWFkZXIgPSBudWxsO1xuICAgICAgICBpZiAoIXJlcS5wYXRoLmluY2x1ZGVzKCc6Ly8nKSkge1xuICAgICAgICAgICAgdGhpcy5zZXRSZXF1ZXN0UHJvcHMocmVxLCBvcHRzKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBBdCB0aGlzIHBvaW50LCB0aGUgaHR0cCBDbGllbnRSZXF1ZXN0J3MgaW50ZXJuYWwgYF9oZWFkZXJgIGZpZWxkXG4gICAgICAgIC8vIG1pZ2h0IGhhdmUgYWxyZWFkeSBiZWVuIHNldC4gSWYgdGhpcyBpcyB0aGUgY2FzZSB0aGVuIHdlJ2xsIG5lZWRcbiAgICAgICAgLy8gdG8gcmUtZ2VuZXJhdGUgdGhlIHN0cmluZyBzaW5jZSB3ZSBqdXN0IGNoYW5nZWQgdGhlIGByZXEucGF0aGAuXG4gICAgICAgIGxldCBmaXJzdDtcbiAgICAgICAgbGV0IGVuZE9mSGVhZGVycztcbiAgICAgICAgZGVidWcoJ1JlZ2VuZXJhdGluZyBzdG9yZWQgSFRUUCBoZWFkZXIgc3RyaW5nIGZvciByZXF1ZXN0Jyk7XG4gICAgICAgIHJlcS5faW1wbGljaXRIZWFkZXIoKTtcbiAgICAgICAgaWYgKHJlcS5vdXRwdXREYXRhICYmIHJlcS5vdXRwdXREYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGRlYnVnKCdQYXRjaGluZyBjb25uZWN0aW9uIHdyaXRlKCkgb3V0cHV0IGJ1ZmZlciB3aXRoIHVwZGF0ZWQgaGVhZGVyJyk7XG4gICAgICAgICAgICBmaXJzdCA9IHJlcS5vdXRwdXREYXRhWzBdLmRhdGE7XG4gICAgICAgICAgICBlbmRPZkhlYWRlcnMgPSBmaXJzdC5pbmRleE9mKCdcXHJcXG5cXHJcXG4nKSArIDQ7XG4gICAgICAgICAgICByZXEub3V0cHV0RGF0YVswXS5kYXRhID1cbiAgICAgICAgICAgICAgICByZXEuX2hlYWRlciArIGZpcnN0LnN1YnN0cmluZyhlbmRPZkhlYWRlcnMpO1xuICAgICAgICAgICAgZGVidWcoJ091dHB1dCBidWZmZXI6ICVvJywgcmVxLm91dHB1dERhdGFbMF0uZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ3JlYXRlIGEgc29ja2V0IGNvbm5lY3Rpb24gdG8gdGhlIHByb3h5IHNlcnZlci5cbiAgICAgICAgbGV0IHNvY2tldDtcbiAgICAgICAgaWYgKHRoaXMucHJveHkucHJvdG9jb2wgPT09ICdodHRwczonKSB7XG4gICAgICAgICAgICBkZWJ1ZygnQ3JlYXRpbmcgYHRscy5Tb2NrZXRgOiAlbycsIHRoaXMuY29ubmVjdE9wdHMpO1xuICAgICAgICAgICAgc29ja2V0ID0gdGxzLmNvbm5lY3QodGhpcy5jb25uZWN0T3B0cyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkZWJ1ZygnQ3JlYXRpbmcgYG5ldC5Tb2NrZXRgOiAlbycsIHRoaXMuY29ubmVjdE9wdHMpO1xuICAgICAgICAgICAgc29ja2V0ID0gbmV0LmNvbm5lY3QodGhpcy5jb25uZWN0T3B0cyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gV2FpdCBmb3IgdGhlIHNvY2tldCdzIGBjb25uZWN0YCBldmVudCwgc28gdGhhdCB0aGlzIGBjYWxsYmFjaygpYFxuICAgICAgICAvLyBmdW5jdGlvbiB0aHJvd3MgaW5zdGVhZCBvZiB0aGUgYGh0dHBgIHJlcXVlc3QgbWFjaGluZXJ5LiBUaGlzIGlzXG4gICAgICAgIC8vIGltcG9ydGFudCBmb3IgaS5lLiBgUGFjUHJveHlBZ2VudGAgd2hpY2ggZGV0ZXJtaW5lcyBhIGZhaWxlZCBwcm94eVxuICAgICAgICAvLyBjb25uZWN0aW9uIHZpYSB0aGUgYGNhbGxiYWNrKClgIGZ1bmN0aW9uIHRocm93aW5nLlxuICAgICAgICBhd2FpdCAoMCwgZXZlbnRzXzEub25jZSkoc29ja2V0LCAnY29ubmVjdCcpO1xuICAgICAgICByZXR1cm4gc29ja2V0O1xuICAgIH1cbn1cbkh0dHBQcm94eUFnZW50LnByb3RvY29scyA9IFsnaHR0cCcsICdodHRwcyddO1xuZXhwb3J0cy5IdHRwUHJveHlBZ2VudCA9IEh0dHBQcm94eUFnZW50O1xuZnVuY3Rpb24gb21pdChvYmosIC4uLmtleXMpIHtcbiAgICBjb25zdCByZXQgPSB7fTtcbiAgICBsZXQga2V5O1xuICAgIGZvciAoa2V5IGluIG9iaikge1xuICAgICAgICBpZiAoIWtleXMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgcmV0W2tleV0gPSBvYmpba2V5XTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmV0O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nbG9iYWxOb1Byb3h5TGlzdCA9IGV4cG9ydHMucHJveHlQb2xpY3lOYW1lID0gdm9pZCAwO1xuZXhwb3J0cy5sb2FkTm9Qcm94eSA9IGxvYWROb1Byb3h5O1xuZXhwb3J0cy5nZXREZWZhdWx0UHJveHlTZXR0aW5ncyA9IGdldERlZmF1bHRQcm94eVNldHRpbmdzO1xuZXhwb3J0cy5wcm94eVBvbGljeSA9IHByb3h5UG9saWN5O1xuY29uc3QgaHR0cHNfcHJveHlfYWdlbnRfMSA9IHJlcXVpcmUoXCJodHRwcy1wcm94eS1hZ2VudFwiKTtcbmNvbnN0IGh0dHBfcHJveHlfYWdlbnRfMSA9IHJlcXVpcmUoXCJodHRwLXByb3h5LWFnZW50XCIpO1xuY29uc3QgbG9nX2pzXzEgPSByZXF1aXJlKFwiLi4vbG9nLmpzXCIpO1xuY29uc3QgSFRUUFNfUFJPWFkgPSBcIkhUVFBTX1BST1hZXCI7XG5jb25zdCBIVFRQX1BST1hZID0gXCJIVFRQX1BST1hZXCI7XG5jb25zdCBBTExfUFJPWFkgPSBcIkFMTF9QUk9YWVwiO1xuY29uc3QgTk9fUFJPWFkgPSBcIk5PX1BST1hZXCI7XG4vKipcbiAqIFRoZSBwcm9ncmFtbWF0aWMgaWRlbnRpZmllciBvZiB0aGUgcHJveHlQb2xpY3kuXG4gKi9cbmV4cG9ydHMucHJveHlQb2xpY3lOYW1lID0gXCJwcm94eVBvbGljeVwiO1xuLyoqXG4gKiBTdG9yZXMgdGhlIHBhdHRlcm5zIHNwZWNpZmllZCBpbiBOT19QUk9YWSBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnRzLmdsb2JhbE5vUHJveHlMaXN0ID0gW107XG5sZXQgbm9Qcm94eUxpc3RMb2FkZWQgPSBmYWxzZTtcbi8qKiBBIGNhY2hlIG9mIHdoZXRoZXIgYSBob3N0IHNob3VsZCBieXBhc3MgdGhlIHByb3h5LiAqL1xuY29uc3QgZ2xvYmFsQnlwYXNzZWRNYXAgPSBuZXcgTWFwKCk7XG5mdW5jdGlvbiBnZXRFbnZpcm9ubWVudFZhbHVlKG5hbWUpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnZbbmFtZV0pIHtcbiAgICAgICAgcmV0dXJuIHByb2Nlc3MuZW52W25hbWVdO1xuICAgIH1cbiAgICBlbHNlIGlmIChwcm9jZXNzLmVudltuYW1lLnRvTG93ZXJDYXNlKCldKSB7XG4gICAgICAgIHJldHVybiBwcm9jZXNzLmVudltuYW1lLnRvTG93ZXJDYXNlKCldO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gbG9hZEVudmlyb25tZW50UHJveHlWYWx1ZSgpIHtcbiAgICBpZiAoIXByb2Nlc3MpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgaHR0cHNQcm94eSA9IGdldEVudmlyb25tZW50VmFsdWUoSFRUUFNfUFJPWFkpO1xuICAgIGNvbnN0IGFsbFByb3h5ID0gZ2V0RW52aXJvbm1lbnRWYWx1ZShBTExfUFJPWFkpO1xuICAgIGNvbnN0IGh0dHBQcm94eSA9IGdldEVudmlyb25tZW50VmFsdWUoSFRUUF9QUk9YWSk7XG4gICAgcmV0dXJuIGh0dHBzUHJveHkgfHwgYWxsUHJveHkgfHwgaHR0cFByb3h5O1xufVxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIHRoZSBob3N0IG9mIGEgZ2l2ZW4gYHVyaWAgbWF0Y2hlcyBhbnkgcGF0dGVybiBpbiB0aGUgbm8gcHJveHkgbGlzdC5cbiAqIElmIHRoZXJlJ3MgYSBtYXRjaCwgYW55IHJlcXVlc3Qgc2VudCB0byB0aGUgc2FtZSBob3N0IHNob3VsZG4ndCBoYXZlIHRoZSBwcm94eSBzZXR0aW5ncyBzZXQuXG4gKiBUaGlzIGltcGxlbWVudGF0aW9uIGlzIGEgcG9ydCBvZiBodHRwczovL2dpdGh1Yi5jb20vQXp1cmUvYXp1cmUtc2RrLWZvci1uZXQvYmxvYi84Y2NhODExMzcxMTU5ZTUyNzE1OWM3ZWI2NTYwMjQ3Nzg5ODY4M2UyL3Nkay9jb3JlL0F6dXJlLkNvcmUvc3JjL1BpcGVsaW5lL0ludGVybmFsL0h0dHBFbnZpcm9ubWVudFByb3h5LmNzI0wyMTBcbiAqL1xuZnVuY3Rpb24gaXNCeXBhc3NlZCh1cmksIG5vUHJveHlMaXN0LCBieXBhc3NlZE1hcCkge1xuICAgIGlmIChub1Byb3h5TGlzdC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBob3N0ID0gbmV3IFVSTCh1cmkpLmhvc3RuYW1lO1xuICAgIGlmIChieXBhc3NlZE1hcCA9PT0gbnVsbCB8fCBieXBhc3NlZE1hcCA9PT0gdm9pZCAwID8gdm9pZCAwIDogYnlwYXNzZWRNYXAuaGFzKGhvc3QpKSB7XG4gICAgICAgIHJldHVybiBieXBhc3NlZE1hcC5nZXQoaG9zdCk7XG4gICAgfVxuICAgIGxldCBpc0J5cGFzc2VkRmxhZyA9IGZhbHNlO1xuICAgIGZvciAoY29uc3QgcGF0dGVybiBvZiBub1Byb3h5TGlzdCkge1xuICAgICAgICBpZiAocGF0dGVyblswXSA9PT0gXCIuXCIpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgc2hvdWxkIG1hdGNoIGVpdGhlciBkb21haW4gaXQgc2VsZiBvciBhbnkgc3ViZG9tYWluIG9yIGhvc3RcbiAgICAgICAgICAgIC8vIC5mb28uY29tIHdpbGwgbWF0Y2ggZm9vLmNvbSBpdCBzZWxmIG9yICouZm9vLmNvbVxuICAgICAgICAgICAgaWYgKGhvc3QuZW5kc1dpdGgocGF0dGVybikpIHtcbiAgICAgICAgICAgICAgICBpc0J5cGFzc2VkRmxhZyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoaG9zdC5sZW5ndGggPT09IHBhdHRlcm4ubGVuZ3RoIC0gMSAmJiBob3N0ID09PSBwYXR0ZXJuLnNsaWNlKDEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlzQnlwYXNzZWRGbGFnID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoaG9zdCA9PT0gcGF0dGVybikge1xuICAgICAgICAgICAgICAgIGlzQnlwYXNzZWRGbGFnID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBieXBhc3NlZE1hcCA9PT0gbnVsbCB8fCBieXBhc3NlZE1hcCA9PT0gdm9pZCAwID8gdm9pZCAwIDogYnlwYXNzZWRNYXAuc2V0KGhvc3QsIGlzQnlwYXNzZWRGbGFnKTtcbiAgICByZXR1cm4gaXNCeXBhc3NlZEZsYWc7XG59XG5mdW5jdGlvbiBsb2FkTm9Qcm94eSgpIHtcbiAgICBjb25zdCBub1Byb3h5ID0gZ2V0RW52aXJvbm1lbnRWYWx1ZShOT19QUk9YWSk7XG4gICAgbm9Qcm94eUxpc3RMb2FkZWQgPSB0cnVlO1xuICAgIGlmIChub1Byb3h5KSB7XG4gICAgICAgIHJldHVybiBub1Byb3h5XG4gICAgICAgICAgICAuc3BsaXQoXCIsXCIpXG4gICAgICAgICAgICAubWFwKChpdGVtKSA9PiBpdGVtLnRyaW0oKSlcbiAgICAgICAgICAgIC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0ubGVuZ3RoKTtcbiAgICB9XG4gICAgcmV0dXJuIFtdO1xufVxuLyoqXG4gKiBUaGlzIG1ldGhvZCBjb252ZXJ0cyBhIHByb3h5IHVybCBpbnRvIGBQcm94eVNldHRpbmdzYCBmb3IgdXNlIHdpdGggUHJveHlQb2xpY3kuXG4gKiBJZiBubyBhcmd1bWVudCBpcyBnaXZlbiwgaXQgYXR0ZW1wdHMgdG8gcGFyc2UgYSBwcm94eSBVUkwgZnJvbSB0aGUgZW52aXJvbm1lbnRcbiAqIHZhcmlhYmxlcyBgSFRUUFNfUFJPWFlgIG9yIGBIVFRQX1BST1hZYC5cbiAqIEBwYXJhbSBwcm94eVVybCAtIFRoZSB1cmwgb2YgdGhlIHByb3h5IHRvIHVzZS4gTWF5IGNvbnRhaW4gYXV0aGVudGljYXRpb24gaW5mb3JtYXRpb24uXG4gKiBAZGVwcmVjYXRlZCAtIEludGVybmFsbHkgdGhpcyBtZXRob2QgaXMgbm8gbG9uZ2VyIG5lY2Vzc2FyeSB3aGVuIHNldHRpbmcgcHJveHkgaW5mb3JtYXRpb24uXG4gKi9cbmZ1bmN0aW9uIGdldERlZmF1bHRQcm94eVNldHRpbmdzKHByb3h5VXJsKSB7XG4gICAgaWYgKCFwcm94eVVybCkge1xuICAgICAgICBwcm94eVVybCA9IGxvYWRFbnZpcm9ubWVudFByb3h5VmFsdWUoKTtcbiAgICAgICAgaWYgKCFwcm94eVVybCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBwYXJzZWRVcmwgPSBuZXcgVVJMKHByb3h5VXJsKTtcbiAgICBjb25zdCBzY2hlbWEgPSBwYXJzZWRVcmwucHJvdG9jb2wgPyBwYXJzZWRVcmwucHJvdG9jb2wgKyBcIi8vXCIgOiBcIlwiO1xuICAgIHJldHVybiB7XG4gICAgICAgIGhvc3Q6IHNjaGVtYSArIHBhcnNlZFVybC5ob3N0bmFtZSxcbiAgICAgICAgcG9ydDogTnVtYmVyLnBhcnNlSW50KHBhcnNlZFVybC5wb3J0IHx8IFwiODBcIiksXG4gICAgICAgIHVzZXJuYW1lOiBwYXJzZWRVcmwudXNlcm5hbWUsXG4gICAgICAgIHBhc3N3b3JkOiBwYXJzZWRVcmwucGFzc3dvcmQsXG4gICAgfTtcbn1cbi8qKlxuICogVGhpcyBtZXRob2QgYXR0ZW1wdHMgdG8gcGFyc2UgYSBwcm94eSBVUkwgZnJvbSB0aGUgZW52aXJvbm1lbnRcbiAqIHZhcmlhYmxlcyBgSFRUUFNfUFJPWFlgIG9yIGBIVFRQX1BST1hZYC5cbiAqL1xuZnVuY3Rpb24gZ2V0RGVmYXVsdFByb3h5U2V0dGluZ3NJbnRlcm5hbCgpIHtcbiAgICBjb25zdCBlbnZQcm94eSA9IGxvYWRFbnZpcm9ubWVudFByb3h5VmFsdWUoKTtcbiAgICByZXR1cm4gZW52UHJveHkgPyBuZXcgVVJMKGVudlByb3h5KSA6IHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGdldFVybEZyb21Qcm94eVNldHRpbmdzKHNldHRpbmdzKSB7XG4gICAgbGV0IHBhcnNlZFByb3h5VXJsO1xuICAgIHRyeSB7XG4gICAgICAgIHBhcnNlZFByb3h5VXJsID0gbmV3IFVSTChzZXR0aW5ncy5ob3N0KTtcbiAgICB9XG4gICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0aW5nIGEgdmFsaWQgaG9zdCBzdHJpbmcgaW4gcHJveHkgc2V0dGluZ3MsIGJ1dCBmb3VuZCBcIiR7c2V0dGluZ3MuaG9zdH1cIi5gKTtcbiAgICB9XG4gICAgcGFyc2VkUHJveHlVcmwucG9ydCA9IFN0cmluZyhzZXR0aW5ncy5wb3J0KTtcbiAgICBpZiAoc2V0dGluZ3MudXNlcm5hbWUpIHtcbiAgICAgICAgcGFyc2VkUHJveHlVcmwudXNlcm5hbWUgPSBzZXR0aW5ncy51c2VybmFtZTtcbiAgICB9XG4gICAgaWYgKHNldHRpbmdzLnBhc3N3b3JkKSB7XG4gICAgICAgIHBhcnNlZFByb3h5VXJsLnBhc3N3b3JkID0gc2V0dGluZ3MucGFzc3dvcmQ7XG4gICAgfVxuICAgIHJldHVybiBwYXJzZWRQcm94eVVybDtcbn1cbmZ1bmN0aW9uIHNldFByb3h5QWdlbnRPblJlcXVlc3QocmVxdWVzdCwgY2FjaGVkQWdlbnRzLCBwcm94eVVybCkge1xuICAgIC8vIEN1c3RvbSBBZ2VudCBzaG91bGQgdGFrZSBwcmVjZWRlbmNlIHNvIGlmIG9uZSBpcyBwcmVzZW50XG4gICAgLy8gd2Ugc2hvdWxkIHNraXAgdG8gYXZvaWQgb3ZlcndyaXRpbmcgaXQuXG4gICAgaWYgKHJlcXVlc3QuYWdlbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHJlcXVlc3QudXJsKTtcbiAgICBjb25zdCBpc0luc2VjdXJlID0gdXJsLnByb3RvY29sICE9PSBcImh0dHBzOlwiO1xuICAgIGlmIChyZXF1ZXN0LnRsc1NldHRpbmdzKSB7XG4gICAgICAgIGxvZ19qc18xLmxvZ2dlci53YXJuaW5nKFwiVExTIHNldHRpbmdzIGFyZSBub3Qgc3VwcG9ydGVkIGluIGNvbWJpbmF0aW9uIHdpdGggY3VzdG9tIFByb3h5LCBjZXJ0aWZpY2F0ZXMgcHJvdmlkZWQgdG8gdGhlIGNsaWVudCB3aWxsIGJlIGlnbm9yZWQuXCIpO1xuICAgIH1cbiAgICBjb25zdCBoZWFkZXJzID0gcmVxdWVzdC5oZWFkZXJzLnRvSlNPTigpO1xuICAgIGlmIChpc0luc2VjdXJlKSB7XG4gICAgICAgIGlmICghY2FjaGVkQWdlbnRzLmh0dHBQcm94eUFnZW50KSB7XG4gICAgICAgICAgICBjYWNoZWRBZ2VudHMuaHR0cFByb3h5QWdlbnQgPSBuZXcgaHR0cF9wcm94eV9hZ2VudF8xLkh0dHBQcm94eUFnZW50KHByb3h5VXJsLCB7IGhlYWRlcnMgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVxdWVzdC5hZ2VudCA9IGNhY2hlZEFnZW50cy5odHRwUHJveHlBZ2VudDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGlmICghY2FjaGVkQWdlbnRzLmh0dHBzUHJveHlBZ2VudCkge1xuICAgICAgICAgICAgY2FjaGVkQWdlbnRzLmh0dHBzUHJveHlBZ2VudCA9IG5ldyBodHRwc19wcm94eV9hZ2VudF8xLkh0dHBzUHJveHlBZ2VudChwcm94eVVybCwgeyBoZWFkZXJzIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJlcXVlc3QuYWdlbnQgPSBjYWNoZWRBZ2VudHMuaHR0cHNQcm94eUFnZW50O1xuICAgIH1cbn1cbi8qKlxuICogQSBwb2xpY3kgdGhhdCBhbGxvd3Mgb25lIHRvIGFwcGx5IHByb3h5IHNldHRpbmdzIHRvIGFsbCByZXF1ZXN0cy5cbiAqIElmIG5vdCBwYXNzZWQgc3RhdGljIHNldHRpbmdzLCB0aGV5IHdpbGwgYmUgcmV0cmlldmVkIGZyb20gdGhlIEhUVFBTX1BST1hZXG4gKiBvciBIVFRQX1BST1hZIGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiAqIEBwYXJhbSBwcm94eVNldHRpbmdzIC0gUHJveHlTZXR0aW5ncyB0byB1c2Ugb24gZWFjaCByZXF1ZXN0LlxuICogQHBhcmFtIG9wdGlvbnMgLSBhZGRpdGlvbmFsIHNldHRpbmdzLCBmb3IgZXhhbXBsZSwgY3VzdG9tIE5PX1BST1hZIHBhdHRlcm5zXG4gKi9cbmZ1bmN0aW9uIHByb3h5UG9saWN5KHByb3h5U2V0dGluZ3MsIG9wdGlvbnMpIHtcbiAgICBpZiAoIW5vUHJveHlMaXN0TG9hZGVkKSB7XG4gICAgICAgIGV4cG9ydHMuZ2xvYmFsTm9Qcm94eUxpc3QucHVzaCguLi5sb2FkTm9Qcm94eSgpKTtcbiAgICB9XG4gICAgY29uc3QgZGVmYXVsdFByb3h5ID0gcHJveHlTZXR0aW5nc1xuICAgICAgICA/IGdldFVybEZyb21Qcm94eVNldHRpbmdzKHByb3h5U2V0dGluZ3MpXG4gICAgICAgIDogZ2V0RGVmYXVsdFByb3h5U2V0dGluZ3NJbnRlcm5hbCgpO1xuICAgIGNvbnN0IGNhY2hlZEFnZW50cyA9IHt9O1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGV4cG9ydHMucHJveHlQb2xpY3lOYW1lLFxuICAgICAgICBhc3luYyBzZW5kUmVxdWVzdChyZXF1ZXN0LCBuZXh0KSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBpZiAoIXJlcXVlc3QucHJveHlTZXR0aW5ncyAmJlxuICAgICAgICAgICAgICAgIGRlZmF1bHRQcm94eSAmJlxuICAgICAgICAgICAgICAgICFpc0J5cGFzc2VkKHJlcXVlc3QudXJsLCAoX2EgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY3VzdG9tTm9Qcm94eUxpc3QpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGV4cG9ydHMuZ2xvYmFsTm9Qcm94eUxpc3QsIChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY3VzdG9tTm9Qcm94eUxpc3QpID8gdW5kZWZpbmVkIDogZ2xvYmFsQnlwYXNzZWRNYXApKSB7XG4gICAgICAgICAgICAgICAgc2V0UHJveHlBZ2VudE9uUmVxdWVzdChyZXF1ZXN0LCBjYWNoZWRBZ2VudHMsIGRlZmF1bHRQcm94eSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChyZXF1ZXN0LnByb3h5U2V0dGluZ3MpIHtcbiAgICAgICAgICAgICAgICBzZXRQcm94eUFnZW50T25SZXF1ZXN0KHJlcXVlc3QsIGNhY2hlZEFnZW50cywgZ2V0VXJsRnJvbVByb3h5U2V0dGluZ3MocmVxdWVzdC5wcm94eVNldHRpbmdzKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV4dChyZXF1ZXN0KTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cHJveHlQb2xpY3kuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5zZXRDbGllbnRSZXF1ZXN0SWRQb2xpY3lOYW1lID0gdm9pZCAwO1xuZXhwb3J0cy5zZXRDbGllbnRSZXF1ZXN0SWRQb2xpY3kgPSBzZXRDbGllbnRSZXF1ZXN0SWRQb2xpY3k7XG4vKipcbiAqIFRoZSBwcm9ncmFtbWF0aWMgaWRlbnRpZmllciBvZiB0aGUgc2V0Q2xpZW50UmVxdWVzdElkUG9saWN5LlxuICovXG5leHBvcnRzLnNldENsaWVudFJlcXVlc3RJZFBvbGljeU5hbWUgPSBcInNldENsaWVudFJlcXVlc3RJZFBvbGljeVwiO1xuLyoqXG4gKiBFYWNoIFBpcGVsaW5lUmVxdWVzdCBnZXRzIGEgdW5pcXVlIGlkIHVwb24gY3JlYXRpb24uXG4gKiBUaGlzIHBvbGljeSBwYXNzZXMgdGhhdCB1bmlxdWUgaWQgYWxvbmcgdmlhIGFuIEhUVFAgaGVhZGVyIHRvIGVuYWJsZSBiZXR0ZXJcbiAqIHRlbGVtZXRyeSBhbmQgdHJhY2luZy5cbiAqIEBwYXJhbSByZXF1ZXN0SWRIZWFkZXJOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGhlYWRlciB0byBwYXNzIHRoZSByZXF1ZXN0IElEIHRvLlxuICovXG5mdW5jdGlvbiBzZXRDbGllbnRSZXF1ZXN0SWRQb2xpY3kocmVxdWVzdElkSGVhZGVyTmFtZSA9IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogZXhwb3J0cy5zZXRDbGllbnRSZXF1ZXN0SWRQb2xpY3lOYW1lLFxuICAgICAgICBhc3luYyBzZW5kUmVxdWVzdChyZXF1ZXN0LCBuZXh0KSB7XG4gICAgICAgICAgICBpZiAoIXJlcXVlc3QuaGVhZGVycy5oYXMocmVxdWVzdElkSGVhZGVyTmFtZSkpIHtcbiAgICAgICAgICAgICAgICByZXF1ZXN0LmhlYWRlcnMuc2V0KHJlcXVlc3RJZEhlYWRlck5hbWUsIHJlcXVlc3QucmVxdWVzdElkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXh0KHJlcXVlc3QpO1xuICAgICAgICB9LFxuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zZXRDbGllbnRSZXF1ZXN0SWRQb2xpY3kuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50bHNQb2xpY3lOYW1lID0gdm9pZCAwO1xuZXhwb3J0cy50bHNQb2xpY3kgPSB0bHNQb2xpY3k7XG4vKipcbiAqIE5hbWUgb2YgdGhlIFRMUyBQb2xpY3lcbiAqL1xuZXhwb3J0cy50bHNQb2xpY3lOYW1lID0gXCJ0bHNQb2xpY3lcIjtcbi8qKlxuICogR2V0cyBhIHBpcGVsaW5lIHBvbGljeSB0aGF0IGFkZHMgdGhlIGNsaWVudCBjZXJ0aWZpY2F0ZSB0byB0aGUgSHR0cENsaWVudCBhZ2VudCBmb3IgYXV0aGVudGljYXRpb24uXG4gKi9cbmZ1bmN0aW9uIHRsc1BvbGljeSh0bHNTZXR0aW5ncykge1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGV4cG9ydHMudGxzUG9saWN5TmFtZSxcbiAgICAgICAgc2VuZFJlcXVlc3Q6IGFzeW5jIChyZXEsIG5leHQpID0+IHtcbiAgICAgICAgICAgIC8vIFVzZXJzIG1heSBkZWZpbmUgYSByZXF1ZXN0IHRsc1NldHRpbmdzLCBob25vciB0aG9zZSBvdmVyIHRoZSBjbGllbnQgbGV2ZWwgb25lXG4gICAgICAgICAgICBpZiAoIXJlcS50bHNTZXR0aW5ncykge1xuICAgICAgICAgICAgICAgIHJlcS50bHNTZXR0aW5ncyA9IHRsc1NldHRpbmdzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5leHQocmVxKTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGxzUG9saWN5LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVHJhY2luZ0NvbnRleHRJbXBsID0gZXhwb3J0cy5rbm93bkNvbnRleHRLZXlzID0gdm9pZCAwO1xuZXhwb3J0cy5jcmVhdGVUcmFjaW5nQ29udGV4dCA9IGNyZWF0ZVRyYWNpbmdDb250ZXh0O1xuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0cy5rbm93bkNvbnRleHRLZXlzID0ge1xuICAgIHNwYW46IFN5bWJvbC5mb3IoXCJAYXp1cmUvY29yZS10cmFjaW5nIHNwYW5cIiksXG4gICAgbmFtZXNwYWNlOiBTeW1ib2wuZm9yKFwiQGF6dXJlL2NvcmUtdHJhY2luZyBuYW1lc3BhY2VcIiksXG59O1xuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHtAbGluayBUcmFjaW5nQ29udGV4dH0gd2l0aCB0aGUgZ2l2ZW4gb3B0aW9ucy5cbiAqIEBwYXJhbSBvcHRpb25zIC0gQSBzZXQgb2Yga25vd24ga2V5cyB0aGF0IG1heSBiZSBzZXQgb24gdGhlIGNvbnRleHQuXG4gKiBAcmV0dXJucyBBIG5ldyB7QGxpbmsgVHJhY2luZ0NvbnRleHR9IHdpdGggdGhlIGdpdmVuIG9wdGlvbnMuXG4gKlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVRyYWNpbmdDb250ZXh0KG9wdGlvbnMgPSB7fSkge1xuICAgIGxldCBjb250ZXh0ID0gbmV3IFRyYWNpbmdDb250ZXh0SW1wbChvcHRpb25zLnBhcmVudENvbnRleHQpO1xuICAgIGlmIChvcHRpb25zLnNwYW4pIHtcbiAgICAgICAgY29udGV4dCA9IGNvbnRleHQuc2V0VmFsdWUoZXhwb3J0cy5rbm93bkNvbnRleHRLZXlzLnNwYW4sIG9wdGlvbnMuc3Bhbik7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLm5hbWVzcGFjZSkge1xuICAgICAgICBjb250ZXh0ID0gY29udGV4dC5zZXRWYWx1ZShleHBvcnRzLmtub3duQ29udGV4dEtleXMubmFtZXNwYWNlLCBvcHRpb25zLm5hbWVzcGFjZSk7XG4gICAgfVxuICAgIHJldHVybiBjb250ZXh0O1xufVxuLyoqIEBpbnRlcm5hbCAqL1xuY2xhc3MgVHJhY2luZ0NvbnRleHRJbXBsIHtcbiAgICBjb25zdHJ1Y3Rvcihpbml0aWFsQ29udGV4dCkge1xuICAgICAgICB0aGlzLl9jb250ZXh0TWFwID1cbiAgICAgICAgICAgIGluaXRpYWxDb250ZXh0IGluc3RhbmNlb2YgVHJhY2luZ0NvbnRleHRJbXBsXG4gICAgICAgICAgICAgICAgPyBuZXcgTWFwKGluaXRpYWxDb250ZXh0Ll9jb250ZXh0TWFwKVxuICAgICAgICAgICAgICAgIDogbmV3IE1hcCgpO1xuICAgIH1cbiAgICBzZXRWYWx1ZShrZXksIHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG5ld0NvbnRleHQgPSBuZXcgVHJhY2luZ0NvbnRleHRJbXBsKHRoaXMpO1xuICAgICAgICBuZXdDb250ZXh0Ll9jb250ZXh0TWFwLnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG5ld0NvbnRleHQ7XG4gICAgfVxuICAgIGdldFZhbHVlKGtleSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29udGV4dE1hcC5nZXQoa2V5KTtcbiAgICB9XG4gICAgZGVsZXRlVmFsdWUoa2V5KSB7XG4gICAgICAgIGNvbnN0IG5ld0NvbnRleHQgPSBuZXcgVHJhY2luZ0NvbnRleHRJbXBsKHRoaXMpO1xuICAgICAgICBuZXdDb250ZXh0Ll9jb250ZXh0TWFwLmRlbGV0ZShrZXkpO1xuICAgICAgICByZXR1cm4gbmV3Q29udGV4dDtcbiAgICB9XG59XG5leHBvcnRzLlRyYWNpbmdDb250ZXh0SW1wbCA9IFRyYWNpbmdDb250ZXh0SW1wbDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRyYWNpbmdDb250ZXh0LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc3RhdGUgPSB2b2lkIDA7XG4vKipcbiAqIEBpbnRlcm5hbFxuICpcbiAqIEhvbGRzIHRoZSBzaW5nbGV0b24gaW5zdHJ1bWVudGVyLCB0byBiZSBzaGFyZWQgYWNyb3NzIENKUyBhbmQgRVNNIGltcG9ydHMuXG4gKi9cbmV4cG9ydHMuc3RhdGUgPSB7XG4gICAgaW5zdHJ1bWVudGVySW1wbGVtZW50YXRpb246IHVuZGVmaW5lZCxcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zdGF0ZS1janMuY2pzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlRGVmYXVsdFRyYWNpbmdTcGFuID0gY3JlYXRlRGVmYXVsdFRyYWNpbmdTcGFuO1xuZXhwb3J0cy5jcmVhdGVEZWZhdWx0SW5zdHJ1bWVudGVyID0gY3JlYXRlRGVmYXVsdEluc3RydW1lbnRlcjtcbmV4cG9ydHMudXNlSW5zdHJ1bWVudGVyID0gdXNlSW5zdHJ1bWVudGVyO1xuZXhwb3J0cy5nZXRJbnN0cnVtZW50ZXIgPSBnZXRJbnN0cnVtZW50ZXI7XG5jb25zdCB0cmFjaW5nQ29udGV4dF9qc18xID0gcmVxdWlyZShcIi4vdHJhY2luZ0NvbnRleHQuanNcIik7XG5jb25zdCBzdGF0ZV9qc18xID0gcmVxdWlyZShcIi4vc3RhdGUuanNcIik7XG5mdW5jdGlvbiBjcmVhdGVEZWZhdWx0VHJhY2luZ1NwYW4oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZW5kOiAoKSA9PiB7XG4gICAgICAgICAgICAvLyBub29wXG4gICAgICAgIH0sXG4gICAgICAgIGlzUmVjb3JkaW5nOiAoKSA9PiBmYWxzZSxcbiAgICAgICAgcmVjb3JkRXhjZXB0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgICAvLyBub29wXG4gICAgICAgIH0sXG4gICAgICAgIHNldEF0dHJpYnV0ZTogKCkgPT4ge1xuICAgICAgICAgICAgLy8gbm9vcFxuICAgICAgICB9LFxuICAgICAgICBzZXRTdGF0dXM6ICgpID0+IHtcbiAgICAgICAgICAgIC8vIG5vb3BcbiAgICAgICAgfSxcbiAgICAgICAgYWRkRXZlbnQ6ICgpID0+IHtcbiAgICAgICAgICAgIC8vIG5vb3BcbiAgICAgICAgfSxcbiAgICB9O1xufVxuZnVuY3Rpb24gY3JlYXRlRGVmYXVsdEluc3RydW1lbnRlcigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBjcmVhdGVSZXF1ZXN0SGVhZGVyczogKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9LFxuICAgICAgICBwYXJzZVRyYWNlcGFyZW50SGVhZGVyOiAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9LFxuICAgICAgICBzdGFydFNwYW46IChfbmFtZSwgc3Bhbk9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgc3BhbjogY3JlYXRlRGVmYXVsdFRyYWNpbmdTcGFuKCksXG4gICAgICAgICAgICAgICAgdHJhY2luZ0NvbnRleHQ6ICgwLCB0cmFjaW5nQ29udGV4dF9qc18xLmNyZWF0ZVRyYWNpbmdDb250ZXh0KSh7IHBhcmVudENvbnRleHQ6IHNwYW5PcHRpb25zLnRyYWNpbmdDb250ZXh0IH0pLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgd2l0aENvbnRleHQoX2NvbnRleHQsIGNhbGxiYWNrLCAuLi5jYWxsYmFja0FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayguLi5jYWxsYmFja0FyZ3MpO1xuICAgICAgICB9LFxuICAgIH07XG59XG4vKipcbiAqIEV4dGVuZHMgdGhlIEF6dXJlIFNESyB3aXRoIHN1cHBvcnQgZm9yIGEgZ2l2ZW4gaW5zdHJ1bWVudGVyIGltcGxlbWVudGF0aW9uLlxuICpcbiAqIEBwYXJhbSBpbnN0cnVtZW50ZXIgLSBUaGUgaW5zdHJ1bWVudGVyIGltcGxlbWVudGF0aW9uIHRvIHVzZS5cbiAqL1xuZnVuY3Rpb24gdXNlSW5zdHJ1bWVudGVyKGluc3RydW1lbnRlcikge1xuICAgIHN0YXRlX2pzXzEuc3RhdGUuaW5zdHJ1bWVudGVySW1wbGVtZW50YXRpb24gPSBpbnN0cnVtZW50ZXI7XG59XG4vKipcbiAqIEdldHMgdGhlIGN1cnJlbnRseSBzZXQgaW5zdHJ1bWVudGVyLCBhIE5vLU9wIGluc3RydW1lbnRlciBieSBkZWZhdWx0LlxuICpcbiAqIEByZXR1cm5zIFRoZSBjdXJyZW50bHkgc2V0IGluc3RydW1lbnRlclxuICovXG5mdW5jdGlvbiBnZXRJbnN0cnVtZW50ZXIoKSB7XG4gICAgaWYgKCFzdGF0ZV9qc18xLnN0YXRlLmluc3RydW1lbnRlckltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHN0YXRlX2pzXzEuc3RhdGUuaW5zdHJ1bWVudGVySW1wbGVtZW50YXRpb24gPSBjcmVhdGVEZWZhdWx0SW5zdHJ1bWVudGVyKCk7XG4gICAgfVxuICAgIHJldHVybiBzdGF0ZV9qc18xLnN0YXRlLmluc3RydW1lbnRlckltcGxlbWVudGF0aW9uO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5zdHJ1bWVudGVyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlVHJhY2luZ0NsaWVudCA9IGNyZWF0ZVRyYWNpbmdDbGllbnQ7XG5jb25zdCBpbnN0cnVtZW50ZXJfanNfMSA9IHJlcXVpcmUoXCIuL2luc3RydW1lbnRlci5qc1wiKTtcbmNvbnN0IHRyYWNpbmdDb250ZXh0X2pzXzEgPSByZXF1aXJlKFwiLi90cmFjaW5nQ29udGV4dC5qc1wiKTtcbi8qKlxuICogQ3JlYXRlcyBhIG5ldyB0cmFjaW5nIGNsaWVudC5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdXNlZCB0byBjb25maWd1cmUgdGhlIHRyYWNpbmcgY2xpZW50LlxuICogQHJldHVybnMgLSBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgVHJhY2luZ0NsaWVudH0uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVRyYWNpbmdDbGllbnQob3B0aW9ucykge1xuICAgIGNvbnN0IHsgbmFtZXNwYWNlLCBwYWNrYWdlTmFtZSwgcGFja2FnZVZlcnNpb24gfSA9IG9wdGlvbnM7XG4gICAgZnVuY3Rpb24gc3RhcnRTcGFuKG5hbWUsIG9wZXJhdGlvbk9wdGlvbnMsIHNwYW5PcHRpb25zKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3Qgc3RhcnRTcGFuUmVzdWx0ID0gKDAsIGluc3RydW1lbnRlcl9qc18xLmdldEluc3RydW1lbnRlcikoKS5zdGFydFNwYW4obmFtZSwgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBzcGFuT3B0aW9ucyksIHsgcGFja2FnZU5hbWU6IHBhY2thZ2VOYW1lLCBwYWNrYWdlVmVyc2lvbjogcGFja2FnZVZlcnNpb24sIHRyYWNpbmdDb250ZXh0OiAoX2EgPSBvcGVyYXRpb25PcHRpb25zID09PSBudWxsIHx8IG9wZXJhdGlvbk9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wZXJhdGlvbk9wdGlvbnMudHJhY2luZ09wdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50cmFjaW5nQ29udGV4dCB9KSk7XG4gICAgICAgIGxldCB0cmFjaW5nQ29udGV4dCA9IHN0YXJ0U3BhblJlc3VsdC50cmFjaW5nQ29udGV4dDtcbiAgICAgICAgY29uc3Qgc3BhbiA9IHN0YXJ0U3BhblJlc3VsdC5zcGFuO1xuICAgICAgICBpZiAoIXRyYWNpbmdDb250ZXh0LmdldFZhbHVlKHRyYWNpbmdDb250ZXh0X2pzXzEua25vd25Db250ZXh0S2V5cy5uYW1lc3BhY2UpKSB7XG4gICAgICAgICAgICB0cmFjaW5nQ29udGV4dCA9IHRyYWNpbmdDb250ZXh0LnNldFZhbHVlKHRyYWNpbmdDb250ZXh0X2pzXzEua25vd25Db250ZXh0S2V5cy5uYW1lc3BhY2UsIG5hbWVzcGFjZSk7XG4gICAgICAgIH1cbiAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoXCJhei5uYW1lc3BhY2VcIiwgdHJhY2luZ0NvbnRleHQuZ2V0VmFsdWUodHJhY2luZ0NvbnRleHRfanNfMS5rbm93bkNvbnRleHRLZXlzLm5hbWVzcGFjZSkpO1xuICAgICAgICBjb25zdCB1cGRhdGVkT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG9wZXJhdGlvbk9wdGlvbnMsIHtcbiAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wZXJhdGlvbk9wdGlvbnMgPT09IG51bGwgfHwgb3BlcmF0aW9uT3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3BlcmF0aW9uT3B0aW9ucy50cmFjaW5nT3B0aW9ucyksIHsgdHJhY2luZ0NvbnRleHQgfSksXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3BhbixcbiAgICAgICAgICAgIHVwZGF0ZWRPcHRpb25zLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBhc3luYyBmdW5jdGlvbiB3aXRoU3BhbihuYW1lLCBvcGVyYXRpb25PcHRpb25zLCBjYWxsYmFjaywgc3Bhbk9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgeyBzcGFuLCB1cGRhdGVkT3B0aW9ucyB9ID0gc3RhcnRTcGFuKG5hbWUsIG9wZXJhdGlvbk9wdGlvbnMsIHNwYW5PcHRpb25zKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHdpdGhDb250ZXh0KHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLnRyYWNpbmdDb250ZXh0LCAoKSA9PiBQcm9taXNlLnJlc29sdmUoY2FsbGJhY2sodXBkYXRlZE9wdGlvbnMsIHNwYW4pKSk7XG4gICAgICAgICAgICBzcGFuLnNldFN0YXR1cyh7IHN0YXR1czogXCJzdWNjZXNzXCIgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHNwYW4uc2V0U3RhdHVzKHsgc3RhdHVzOiBcImVycm9yXCIsIGVycm9yOiBlcnIgfSk7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBzcGFuLmVuZCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdpdGhDb250ZXh0KGNvbnRleHQsIGNhbGxiYWNrLCAuLi5jYWxsYmFja0FyZ3MpIHtcbiAgICAgICAgcmV0dXJuICgwLCBpbnN0cnVtZW50ZXJfanNfMS5nZXRJbnN0cnVtZW50ZXIpKCkud2l0aENvbnRleHQoY29udGV4dCwgY2FsbGJhY2ssIC4uLmNhbGxiYWNrQXJncyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFBhcnNlcyBhIHRyYWNlcGFyZW50IGhlYWRlciB2YWx1ZSBpbnRvIGEgc3BhbiBpZGVudGlmaWVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRyYWNlcGFyZW50SGVhZGVyIC0gVGhlIHRyYWNlcGFyZW50IGhlYWRlciB0byBwYXJzZS5cbiAgICAgKiBAcmV0dXJucyBBbiBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYyBpZGVudGlmaWVyIGZvciB0aGUgc3Bhbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBwYXJzZVRyYWNlcGFyZW50SGVhZGVyKHRyYWNlcGFyZW50SGVhZGVyKSB7XG4gICAgICAgIHJldHVybiAoMCwgaW5zdHJ1bWVudGVyX2pzXzEuZ2V0SW5zdHJ1bWVudGVyKSgpLnBhcnNlVHJhY2VwYXJlbnRIZWFkZXIodHJhY2VwYXJlbnRIZWFkZXIpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgc2V0IG9mIHJlcXVlc3QgaGVhZGVycyB0byBwcm9wYWdhdGUgdHJhY2luZyBpbmZvcm1hdGlvbiB0byBhIGJhY2tlbmQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdHJhY2luZ0NvbnRleHQgLSBUaGUgY29udGV4dCBjb250YWluaW5nIHRoZSBzcGFuIHRvIHNlcmlhbGl6ZS5cbiAgICAgKiBAcmV0dXJucyBUaGUgc2V0IG9mIGhlYWRlcnMgdG8gYWRkIHRvIGEgcmVxdWVzdC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVSZXF1ZXN0SGVhZGVycyh0cmFjaW5nQ29udGV4dCkge1xuICAgICAgICByZXR1cm4gKDAsIGluc3RydW1lbnRlcl9qc18xLmdldEluc3RydW1lbnRlcikoKS5jcmVhdGVSZXF1ZXN0SGVhZGVycyh0cmFjaW5nQ29udGV4dCk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHN0YXJ0U3BhbixcbiAgICAgICAgd2l0aFNwYW4sXG4gICAgICAgIHdpdGhDb250ZXh0LFxuICAgICAgICBwYXJzZVRyYWNlcGFyZW50SGVhZGVyLFxuICAgICAgICBjcmVhdGVSZXF1ZXN0SGVhZGVycyxcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dHJhY2luZ0NsaWVudC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNyZWF0ZVRyYWNpbmdDbGllbnQgPSBleHBvcnRzLnVzZUluc3RydW1lbnRlciA9IHZvaWQgMDtcbnZhciBpbnN0cnVtZW50ZXJfanNfMSA9IHJlcXVpcmUoXCIuL2luc3RydW1lbnRlci5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInVzZUluc3RydW1lbnRlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gaW5zdHJ1bWVudGVyX2pzXzEudXNlSW5zdHJ1bWVudGVyOyB9IH0pO1xudmFyIHRyYWNpbmdDbGllbnRfanNfMSA9IHJlcXVpcmUoXCIuL3RyYWNpbmdDbGllbnQuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVUcmFjaW5nQ2xpZW50XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0cmFjaW5nQ2xpZW50X2pzXzEuY3JlYXRlVHJhY2luZ0NsaWVudDsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3VzdG9tID0gdm9pZCAwO1xuY29uc3Qgbm9kZV91dGlsXzEgPSByZXF1aXJlKFwibm9kZTp1dGlsXCIpO1xuZXhwb3J0cy5jdXN0b20gPSBub2RlX3V0aWxfMS5pbnNwZWN0LmN1c3RvbTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluc3BlY3QuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5SZXN0RXJyb3IgPSB2b2lkIDA7XG5leHBvcnRzLmlzUmVzdEVycm9yID0gaXNSZXN0RXJyb3I7XG5jb25zdCBjb3JlX3V0aWxfMSA9IHJlcXVpcmUoXCJAYXp1cmUvY29yZS11dGlsXCIpO1xuY29uc3QgaW5zcGVjdF9qc18xID0gcmVxdWlyZShcIi4vdXRpbC9pbnNwZWN0LmpzXCIpO1xuY29uc3Qgc2FuaXRpemVyX2pzXzEgPSByZXF1aXJlKFwiLi91dGlsL3Nhbml0aXplci5qc1wiKTtcbmNvbnN0IGVycm9yU2FuaXRpemVyID0gbmV3IHNhbml0aXplcl9qc18xLlNhbml0aXplcigpO1xuLyoqXG4gKiBBIGN1c3RvbSBlcnJvciB0eXBlIGZvciBmYWlsZWQgcGlwZWxpbmUgcmVxdWVzdHMuXG4gKi9cbmNsYXNzIFJlc3RFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiUmVzdEVycm9yXCI7XG4gICAgICAgIHRoaXMuY29kZSA9IG9wdGlvbnMuY29kZTtcbiAgICAgICAgdGhpcy5zdGF0dXNDb2RlID0gb3B0aW9ucy5zdGF0dXNDb2RlO1xuICAgICAgICAvLyBUaGUgcmVxdWVzdCBhbmQgcmVzcG9uc2UgbWF5IGNvbnRhaW4gc2Vuc2l0aXZlIGluZm9ybWF0aW9uIGluIHRoZSBoZWFkZXJzIG9yIGJvZHkuXG4gICAgICAgIC8vIFRvIGhlbHAgcHJldmVudCB0aGlzIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbiBiZWluZyBhY2NpZGVudGFsbHkgbG9nZ2VkLCB0aGUgcmVxdWVzdCBhbmQgcmVzcG9uc2VcbiAgICAgICAgLy8gcHJvcGVydGllcyBhcmUgbWFya2VkIGFzIG5vbi1lbnVtZXJhYmxlIGhlcmUuIFRoaXMgcHJldmVudHMgdGhlbSBzaG93aW5nIHVwIGluIHRoZSBvdXRwdXQgb2ZcbiAgICAgICAgLy8gSlNPTi5zdHJpbmdpZnkgYW5kIGNvbnNvbGUubG9nLlxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJyZXF1ZXN0XCIsIHsgdmFsdWU6IG9wdGlvbnMucmVxdWVzdCwgZW51bWVyYWJsZTogZmFsc2UgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInJlc3BvbnNlXCIsIHsgdmFsdWU6IG9wdGlvbnMucmVzcG9uc2UsIGVudW1lcmFibGU6IGZhbHNlIH0pO1xuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgUmVzdEVycm9yLnByb3RvdHlwZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIExvZ2dpbmcgbWV0aG9kIGZvciB1dGlsLmluc3BlY3QgaW4gTm9kZVxuICAgICAqL1xuICAgIFtpbnNwZWN0X2pzXzEuY3VzdG9tXSgpIHtcbiAgICAgICAgLy8gRXh0cmFjdCBub24tZW51bWVyYWJsZSBwcm9wZXJ0aWVzIGFuZCBhZGQgdGhlbSBiYWNrLiBUaGlzIGlzIE9LIHNpbmNlIGluIHRoaXMgb3V0cHV0IHRoZSByZXF1ZXN0IGFuZFxuICAgICAgICAvLyByZXNwb25zZSBnZXQgc2FuaXRpemVkLlxuICAgICAgICByZXR1cm4gYFJlc3RFcnJvcjogJHt0aGlzLm1lc3NhZ2V9IFxcbiAke2Vycm9yU2FuaXRpemVyLnNhbml0aXplKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgdGhpcyksIHsgcmVxdWVzdDogdGhpcy5yZXF1ZXN0LCByZXNwb25zZTogdGhpcy5yZXNwb25zZSB9KSl9YDtcbiAgICB9XG59XG5leHBvcnRzLlJlc3RFcnJvciA9IFJlc3RFcnJvcjtcbi8qKlxuICogU29tZXRoaW5nIHdlbnQgd3Jvbmcgd2hlbiBtYWtpbmcgdGhlIHJlcXVlc3QuXG4gKiBUaGlzIG1lYW5zIHRoZSBhY3R1YWwgcmVxdWVzdCBmYWlsZWQgZm9yIHNvbWUgcmVhc29uLFxuICogc3VjaCBhcyBhIEROUyBpc3N1ZSBvciB0aGUgY29ubmVjdGlvbiBiZWluZyBsb3N0LlxuICovXG5SZXN0RXJyb3IuUkVRVUVTVF9TRU5EX0VSUk9SID0gXCJSRVFVRVNUX1NFTkRfRVJST1JcIjtcbi8qKlxuICogVGhpcyBtZWFucyB0aGF0IHBhcnNpbmcgdGhlIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZlciBmYWlsZWQuXG4gKiBJdCBtYXkgaGF2ZSBiZWVuIG1hbGZvcm1lZC5cbiAqL1xuUmVzdEVycm9yLlBBUlNFX0VSUk9SID0gXCJQQVJTRV9FUlJPUlwiO1xuLyoqXG4gKiBUeXBlZ3VhcmQgZm9yIFJlc3RFcnJvclxuICogQHBhcmFtIGUgLSBTb21ldGhpbmcgY2F1Z2h0IGJ5IGEgY2F0Y2ggY2xhdXNlLlxuICovXG5mdW5jdGlvbiBpc1Jlc3RFcnJvcihlKSB7XG4gICAgaWYgKGUgaW5zdGFuY2VvZiBSZXN0RXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiAoMCwgY29yZV91dGlsXzEuaXNFcnJvcikoZSkgJiYgZS5uYW1lID09PSBcIlJlc3RFcnJvclwiO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVzdEVycm9yLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhY2luZ1BvbGljeU5hbWUgPSB2b2lkIDA7XG5leHBvcnRzLnRyYWNpbmdQb2xpY3kgPSB0cmFjaW5nUG9saWN5O1xuY29uc3QgY29yZV90cmFjaW5nXzEgPSByZXF1aXJlKFwiQGF6dXJlL2NvcmUtdHJhY2luZ1wiKTtcbmNvbnN0IGNvbnN0YW50c19qc18xID0gcmVxdWlyZShcIi4uL2NvbnN0YW50cy5qc1wiKTtcbmNvbnN0IHVzZXJBZ2VudF9qc18xID0gcmVxdWlyZShcIi4uL3V0aWwvdXNlckFnZW50LmpzXCIpO1xuY29uc3QgbG9nX2pzXzEgPSByZXF1aXJlKFwiLi4vbG9nLmpzXCIpO1xuY29uc3QgY29yZV91dGlsXzEgPSByZXF1aXJlKFwiQGF6dXJlL2NvcmUtdXRpbFwiKTtcbmNvbnN0IHJlc3RFcnJvcl9qc18xID0gcmVxdWlyZShcIi4uL3Jlc3RFcnJvci5qc1wiKTtcbmNvbnN0IHNhbml0aXplcl9qc18xID0gcmVxdWlyZShcIi4uL3V0aWwvc2FuaXRpemVyLmpzXCIpO1xuLyoqXG4gKiBUaGUgcHJvZ3JhbW1hdGljIGlkZW50aWZpZXIgb2YgdGhlIHRyYWNpbmdQb2xpY3kuXG4gKi9cbmV4cG9ydHMudHJhY2luZ1BvbGljeU5hbWUgPSBcInRyYWNpbmdQb2xpY3lcIjtcbi8qKlxuICogQSBzaW1wbGUgcG9saWN5IHRvIGNyZWF0ZSBPcGVuVGVsZW1ldHJ5IFNwYW5zIGZvciBlYWNoIHJlcXVlc3QgbWFkZSBieSB0aGUgcGlwZWxpbmVcbiAqIHRoYXQgaGFzIFNwYW5PcHRpb25zIHdpdGggYSBwYXJlbnQuXG4gKiBSZXF1ZXN0cyBtYWRlIHdpdGhvdXQgYSBwYXJlbnQgU3BhbiB3aWxsIG5vdCBiZSByZWNvcmRlZC5cbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBjb25maWd1cmUgdGhlIHRlbGVtZXRyeSBsb2dnZWQgYnkgdGhlIHRyYWNpbmcgcG9saWN5LlxuICovXG5mdW5jdGlvbiB0cmFjaW5nUG9saWN5KG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHVzZXJBZ2VudFByb21pc2UgPSAoMCwgdXNlckFnZW50X2pzXzEuZ2V0VXNlckFnZW50VmFsdWUpKG9wdGlvbnMudXNlckFnZW50UHJlZml4KTtcbiAgICBjb25zdCBzYW5pdGl6ZXIgPSBuZXcgc2FuaXRpemVyX2pzXzEuU2FuaXRpemVyKHtcbiAgICAgICAgYWRkaXRpb25hbEFsbG93ZWRRdWVyeVBhcmFtZXRlcnM6IG9wdGlvbnMuYWRkaXRpb25hbEFsbG93ZWRRdWVyeVBhcmFtZXRlcnMsXG4gICAgfSk7XG4gICAgY29uc3QgdHJhY2luZ0NsaWVudCA9IHRyeUNyZWF0ZVRyYWNpbmdDbGllbnQoKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBleHBvcnRzLnRyYWNpbmdQb2xpY3lOYW1lLFxuICAgICAgICBhc3luYyBzZW5kUmVxdWVzdChyZXF1ZXN0LCBuZXh0KSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBpZiAoIXRyYWNpbmdDbGllbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dChyZXF1ZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHVzZXJBZ2VudCA9IGF3YWl0IHVzZXJBZ2VudFByb21pc2U7XG4gICAgICAgICAgICBjb25zdCBzcGFuQXR0cmlidXRlcyA9IHtcbiAgICAgICAgICAgICAgICBcImh0dHAudXJsXCI6IHNhbml0aXplci5zYW5pdGl6ZVVybChyZXF1ZXN0LnVybCksXG4gICAgICAgICAgICAgICAgXCJodHRwLm1ldGhvZFwiOiByZXF1ZXN0Lm1ldGhvZCxcbiAgICAgICAgICAgICAgICBcImh0dHAudXNlcl9hZ2VudFwiOiB1c2VyQWdlbnQsXG4gICAgICAgICAgICAgICAgcmVxdWVzdElkOiByZXF1ZXN0LnJlcXVlc3RJZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAodXNlckFnZW50KSB7XG4gICAgICAgICAgICAgICAgc3BhbkF0dHJpYnV0ZXNbXCJodHRwLnVzZXJfYWdlbnRcIl0gPSB1c2VyQWdlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB7IHNwYW4sIHRyYWNpbmdDb250ZXh0IH0gPSAoX2EgPSB0cnlDcmVhdGVTcGFuKHRyYWNpbmdDbGllbnQsIHJlcXVlc3QsIHNwYW5BdHRyaWJ1dGVzKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoge307XG4gICAgICAgICAgICBpZiAoIXNwYW4gfHwgIXRyYWNpbmdDb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5leHQocmVxdWVzdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdHJhY2luZ0NsaWVudC53aXRoQ29udGV4dCh0cmFjaW5nQ29udGV4dCwgbmV4dCwgcmVxdWVzdCk7XG4gICAgICAgICAgICAgICAgdHJ5UHJvY2Vzc1Jlc3BvbnNlKHNwYW4sIHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgdHJ5UHJvY2Vzc0Vycm9yKHNwYW4sIGVycik7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgIH07XG59XG5mdW5jdGlvbiB0cnlDcmVhdGVUcmFjaW5nQ2xpZW50KCkge1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiAoMCwgY29yZV90cmFjaW5nXzEuY3JlYXRlVHJhY2luZ0NsaWVudCkoe1xuICAgICAgICAgICAgbmFtZXNwYWNlOiBcIlwiLFxuICAgICAgICAgICAgcGFja2FnZU5hbWU6IFwiQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZVwiLFxuICAgICAgICAgICAgcGFja2FnZVZlcnNpb246IGNvbnN0YW50c19qc18xLlNES19WRVJTSU9OLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nX2pzXzEubG9nZ2VyLndhcm5pbmcoYEVycm9yIHdoZW4gY3JlYXRpbmcgdGhlIFRyYWNpbmdDbGllbnQ6ICR7KDAsIGNvcmVfdXRpbF8xLmdldEVycm9yTWVzc2FnZSkoZSl9YCk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufVxuZnVuY3Rpb24gdHJ5Q3JlYXRlU3Bhbih0cmFjaW5nQ2xpZW50LCByZXF1ZXN0LCBzcGFuQXR0cmlidXRlcykge1xuICAgIHRyeSB7XG4gICAgICAgIC8vIEFzIHBlciBzcGVjLCB3ZSBkbyBub3QgbmVlZCB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gSFRUUCBhbmQgSFRUUFMgaW4gc3BhbiBuYW1lLlxuICAgICAgICBjb25zdCB7IHNwYW4sIHVwZGF0ZWRPcHRpb25zIH0gPSB0cmFjaW5nQ2xpZW50LnN0YXJ0U3BhbihgSFRUUCAke3JlcXVlc3QubWV0aG9kfWAsIHsgdHJhY2luZ09wdGlvbnM6IHJlcXVlc3QudHJhY2luZ09wdGlvbnMgfSwge1xuICAgICAgICAgICAgc3BhbktpbmQ6IFwiY2xpZW50XCIsXG4gICAgICAgICAgICBzcGFuQXR0cmlidXRlcyxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIElmIHRoZSBzcGFuIGlzIG5vdCByZWNvcmRpbmcsIGRvbid0IGRvIGFueSBtb3JlIHdvcmsuXG4gICAgICAgIGlmICghc3Bhbi5pc1JlY29yZGluZygpKSB7XG4gICAgICAgICAgICBzcGFuLmVuZCgpO1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICAvLyBzZXQgaGVhZGVyc1xuICAgICAgICBjb25zdCBoZWFkZXJzID0gdHJhY2luZ0NsaWVudC5jcmVhdGVSZXF1ZXN0SGVhZGVycyh1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucy50cmFjaW5nQ29udGV4dCk7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGhlYWRlcnMpKSB7XG4gICAgICAgICAgICByZXF1ZXN0LmhlYWRlcnMuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHNwYW4sIHRyYWNpbmdDb250ZXh0OiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucy50cmFjaW5nQ29udGV4dCB9O1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBsb2dfanNfMS5sb2dnZXIud2FybmluZyhgU2tpcHBpbmcgY3JlYXRpbmcgYSB0cmFjaW5nIHNwYW4gZHVlIHRvIGFuIGVycm9yOiAkeygwLCBjb3JlX3V0aWxfMS5nZXRFcnJvck1lc3NhZ2UpKGUpfWApO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHRyeVByb2Nlc3NFcnJvcihzcGFuLCBlcnJvcikge1xuICAgIHRyeSB7XG4gICAgICAgIHNwYW4uc2V0U3RhdHVzKHtcbiAgICAgICAgICAgIHN0YXR1czogXCJlcnJvclwiLFxuICAgICAgICAgICAgZXJyb3I6ICgwLCBjb3JlX3V0aWxfMS5pc0Vycm9yKShlcnJvcikgPyBlcnJvciA6IHVuZGVmaW5lZCxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICgoMCwgcmVzdEVycm9yX2pzXzEuaXNSZXN0RXJyb3IpKGVycm9yKSAmJiBlcnJvci5zdGF0dXNDb2RlKSB7XG4gICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShcImh0dHAuc3RhdHVzX2NvZGVcIiwgZXJyb3Iuc3RhdHVzQ29kZSk7XG4gICAgICAgIH1cbiAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nX2pzXzEubG9nZ2VyLndhcm5pbmcoYFNraXBwaW5nIHRyYWNpbmcgc3BhbiBwcm9jZXNzaW5nIGR1ZSB0byBhbiBlcnJvcjogJHsoMCwgY29yZV91dGlsXzEuZ2V0RXJyb3JNZXNzYWdlKShlKX1gKTtcbiAgICB9XG59XG5mdW5jdGlvbiB0cnlQcm9jZXNzUmVzcG9uc2Uoc3BhbiwgcmVzcG9uc2UpIHtcbiAgICB0cnkge1xuICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShcImh0dHAuc3RhdHVzX2NvZGVcIiwgcmVzcG9uc2Uuc3RhdHVzKTtcbiAgICAgICAgY29uc3Qgc2VydmljZVJlcXVlc3RJZCA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFwieC1tcy1yZXF1ZXN0LWlkXCIpO1xuICAgICAgICBpZiAoc2VydmljZVJlcXVlc3RJZCkge1xuICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoXCJzZXJ2aWNlUmVxdWVzdElkXCIsIHNlcnZpY2VSZXF1ZXN0SWQpO1xuICAgICAgICB9XG4gICAgICAgIHNwYW4uc2V0U3RhdHVzKHtcbiAgICAgICAgICAgIHN0YXR1czogXCJzdWNjZXNzXCIsXG4gICAgICAgIH0pO1xuICAgICAgICBzcGFuLmVuZCgpO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBsb2dfanNfMS5sb2dnZXIud2FybmluZyhgU2tpcHBpbmcgdHJhY2luZyBzcGFuIHByb2Nlc3NpbmcgZHVlIHRvIGFuIGVycm9yOiAkeygwLCBjb3JlX3V0aWxfMS5nZXRFcnJvck1lc3NhZ2UpKGUpfWApO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRyYWNpbmdQb2xpY3kuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jcmVhdGVQaXBlbGluZUZyb21PcHRpb25zID0gY3JlYXRlUGlwZWxpbmVGcm9tT3B0aW9ucztcbmNvbnN0IGxvZ1BvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvbG9nUG9saWN5LmpzXCIpO1xuY29uc3QgcGlwZWxpbmVfanNfMSA9IHJlcXVpcmUoXCIuL3BpcGVsaW5lLmpzXCIpO1xuY29uc3QgcmVkaXJlY3RQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL3JlZGlyZWN0UG9saWN5LmpzXCIpO1xuY29uc3QgdXNlckFnZW50UG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9wb2xpY2llcy91c2VyQWdlbnRQb2xpY3kuanNcIik7XG5jb25zdCBtdWx0aXBhcnRQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL211bHRpcGFydFBvbGljeS5qc1wiKTtcbmNvbnN0IGRlY29tcHJlc3NSZXNwb25zZVBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvZGVjb21wcmVzc1Jlc3BvbnNlUG9saWN5LmpzXCIpO1xuY29uc3QgZGVmYXVsdFJldHJ5UG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9wb2xpY2llcy9kZWZhdWx0UmV0cnlQb2xpY3kuanNcIik7XG5jb25zdCBmb3JtRGF0YVBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvZm9ybURhdGFQb2xpY3kuanNcIik7XG5jb25zdCBjb3JlX3V0aWxfMSA9IHJlcXVpcmUoXCJAYXp1cmUvY29yZS11dGlsXCIpO1xuY29uc3QgcHJveHlQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL3Byb3h5UG9saWN5LmpzXCIpO1xuY29uc3Qgc2V0Q2xpZW50UmVxdWVzdElkUG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9wb2xpY2llcy9zZXRDbGllbnRSZXF1ZXN0SWRQb2xpY3kuanNcIik7XG5jb25zdCB0bHNQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL3Rsc1BvbGljeS5qc1wiKTtcbmNvbnN0IHRyYWNpbmdQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL3RyYWNpbmdQb2xpY3kuanNcIik7XG4vKipcbiAqIENyZWF0ZSBhIG5ldyBwaXBlbGluZSB3aXRoIGEgZGVmYXVsdCBzZXQgb2YgY3VzdG9taXphYmxlIHBvbGljaWVzLlxuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIGNvbmZpZ3VyZSBhIGN1c3RvbSBwaXBlbGluZS5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlUGlwZWxpbmVGcm9tT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IHBpcGVsaW5lID0gKDAsIHBpcGVsaW5lX2pzXzEuY3JlYXRlRW1wdHlQaXBlbGluZSkoKTtcbiAgICBpZiAoY29yZV91dGlsXzEuaXNOb2RlTGlrZSkge1xuICAgICAgICBpZiAob3B0aW9ucy50bHNPcHRpb25zKSB7XG4gICAgICAgICAgICBwaXBlbGluZS5hZGRQb2xpY3koKDAsIHRsc1BvbGljeV9qc18xLnRsc1BvbGljeSkob3B0aW9ucy50bHNPcHRpb25zKSk7XG4gICAgICAgIH1cbiAgICAgICAgcGlwZWxpbmUuYWRkUG9saWN5KCgwLCBwcm94eVBvbGljeV9qc18xLnByb3h5UG9saWN5KShvcHRpb25zLnByb3h5T3B0aW9ucykpO1xuICAgICAgICBwaXBlbGluZS5hZGRQb2xpY3koKDAsIGRlY29tcHJlc3NSZXNwb25zZVBvbGljeV9qc18xLmRlY29tcHJlc3NSZXNwb25zZVBvbGljeSkoKSk7XG4gICAgfVxuICAgIHBpcGVsaW5lLmFkZFBvbGljeSgoMCwgZm9ybURhdGFQb2xpY3lfanNfMS5mb3JtRGF0YVBvbGljeSkoKSwgeyBiZWZvcmVQb2xpY2llczogW211bHRpcGFydFBvbGljeV9qc18xLm11bHRpcGFydFBvbGljeU5hbWVdIH0pO1xuICAgIHBpcGVsaW5lLmFkZFBvbGljeSgoMCwgdXNlckFnZW50UG9saWN5X2pzXzEudXNlckFnZW50UG9saWN5KShvcHRpb25zLnVzZXJBZ2VudE9wdGlvbnMpKTtcbiAgICBwaXBlbGluZS5hZGRQb2xpY3koKDAsIHNldENsaWVudFJlcXVlc3RJZFBvbGljeV9qc18xLnNldENsaWVudFJlcXVlc3RJZFBvbGljeSkoKF9hID0gb3B0aW9ucy50ZWxlbWV0cnlPcHRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2xpZW50UmVxdWVzdElkSGVhZGVyTmFtZSkpO1xuICAgIC8vIFRoZSBtdWx0aXBhcnQgcG9saWN5IGlzIGFkZGVkIGFmdGVyIHBvbGljaWVzIHdpdGggbm8gcGhhc2UsIHNvIHRoYXRcbiAgICAvLyBwb2xpY2llcyBjYW4gYmUgYWRkZWQgYmV0d2VlbiBpdCBhbmQgZm9ybURhdGFQb2xpY3kgdG8gbW9kaWZ5XG4gICAgLy8gcHJvcGVydGllcyAoZS5nLiwgbWFraW5nIHRoZSBib3VuZGFyeSBjb25zdGFudCBpbiByZWNvcmRlZCB0ZXN0cykuXG4gICAgcGlwZWxpbmUuYWRkUG9saWN5KCgwLCBtdWx0aXBhcnRQb2xpY3lfanNfMS5tdWx0aXBhcnRQb2xpY3kpKCksIHsgYWZ0ZXJQaGFzZTogXCJEZXNlcmlhbGl6ZVwiIH0pO1xuICAgIHBpcGVsaW5lLmFkZFBvbGljeSgoMCwgZGVmYXVsdFJldHJ5UG9saWN5X2pzXzEuZGVmYXVsdFJldHJ5UG9saWN5KShvcHRpb25zLnJldHJ5T3B0aW9ucyksIHsgcGhhc2U6IFwiUmV0cnlcIiB9KTtcbiAgICBwaXBlbGluZS5hZGRQb2xpY3koKDAsIHRyYWNpbmdQb2xpY3lfanNfMS50cmFjaW5nUG9saWN5KShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMudXNlckFnZW50T3B0aW9ucyksIG9wdGlvbnMubG9nZ2luZ09wdGlvbnMpKSwge1xuICAgICAgICBhZnRlclBoYXNlOiBcIlJldHJ5XCIsXG4gICAgfSk7XG4gICAgaWYgKGNvcmVfdXRpbF8xLmlzTm9kZUxpa2UpIHtcbiAgICAgICAgLy8gQm90aCBYSFIgYW5kIEZldGNoIGV4cGVjdCB0byBoYW5kbGUgcmVkaXJlY3RzIGF1dG9tYXRpY2FsbHksXG4gICAgICAgIC8vIHNvIG9ubHkgaW5jbHVkZSB0aGlzIHBvbGljeSB3aGVuIHdlJ3JlIGluIE5vZGUuXG4gICAgICAgIHBpcGVsaW5lLmFkZFBvbGljeSgoMCwgcmVkaXJlY3RQb2xpY3lfanNfMS5yZWRpcmVjdFBvbGljeSkob3B0aW9ucy5yZWRpcmVjdE9wdGlvbnMpLCB7IGFmdGVyUGhhc2U6IFwiUmV0cnlcIiB9KTtcbiAgICB9XG4gICAgcGlwZWxpbmUuYWRkUG9saWN5KCgwLCBsb2dQb2xpY3lfanNfMS5sb2dQb2xpY3kpKG9wdGlvbnMubG9nZ2luZ09wdGlvbnMpLCB7IGFmdGVyUGhhc2U6IFwiU2lnblwiIH0pO1xuICAgIHJldHVybiBwaXBlbGluZTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNyZWF0ZVBpcGVsaW5lRnJvbU9wdGlvbnMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRCb2R5TGVuZ3RoID0gZ2V0Qm9keUxlbmd0aDtcbmV4cG9ydHMuY3JlYXRlTm9kZUh0dHBDbGllbnQgPSBjcmVhdGVOb2RlSHR0cENsaWVudDtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG5jb25zdCBodHRwID0gdHNsaWJfMS5fX2ltcG9ydFN0YXIocmVxdWlyZShcIm5vZGU6aHR0cFwiKSk7XG5jb25zdCBodHRwcyA9IHRzbGliXzEuX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJub2RlOmh0dHBzXCIpKTtcbmNvbnN0IHpsaWIgPSB0c2xpYl8xLl9faW1wb3J0U3RhcihyZXF1aXJlKFwibm9kZTp6bGliXCIpKTtcbmNvbnN0IG5vZGVfc3RyZWFtXzEgPSByZXF1aXJlKFwibm9kZTpzdHJlYW1cIik7XG5jb25zdCBhYm9ydF9jb250cm9sbGVyXzEgPSByZXF1aXJlKFwiQGF6dXJlL2Fib3J0LWNvbnRyb2xsZXJcIik7XG5jb25zdCBodHRwSGVhZGVyc19qc18xID0gcmVxdWlyZShcIi4vaHR0cEhlYWRlcnMuanNcIik7XG5jb25zdCByZXN0RXJyb3JfanNfMSA9IHJlcXVpcmUoXCIuL3Jlc3RFcnJvci5qc1wiKTtcbmNvbnN0IGxvZ19qc18xID0gcmVxdWlyZShcIi4vbG9nLmpzXCIpO1xuY29uc3QgREVGQVVMVF9UTFNfU0VUVElOR1MgPSB7fTtcbmZ1bmN0aW9uIGlzUmVhZGFibGVTdHJlYW0oYm9keSkge1xuICAgIHJldHVybiBib2R5ICYmIHR5cGVvZiBib2R5LnBpcGUgPT09IFwiZnVuY3Rpb25cIjtcbn1cbmZ1bmN0aW9uIGlzU3RyZWFtQ29tcGxldGUoc3RyZWFtKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoXCJjbG9zZVwiLCBoYW5kbGVyKTtcbiAgICAgICAgICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcihcImVuZFwiLCBoYW5kbGVyKTtcbiAgICAgICAgICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcihcImVycm9yXCIsIGhhbmRsZXIpO1xuICAgICAgICB9O1xuICAgICAgICBzdHJlYW0ub24oXCJjbG9zZVwiLCBoYW5kbGVyKTtcbiAgICAgICAgc3RyZWFtLm9uKFwiZW5kXCIsIGhhbmRsZXIpO1xuICAgICAgICBzdHJlYW0ub24oXCJlcnJvclwiLCBoYW5kbGVyKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGlzQXJyYXlCdWZmZXIoYm9keSkge1xuICAgIHJldHVybiBib2R5ICYmIHR5cGVvZiBib2R5LmJ5dGVMZW5ndGggPT09IFwibnVtYmVyXCI7XG59XG5jbGFzcyBSZXBvcnRUcmFuc2Zvcm0gZXh0ZW5kcyBub2RlX3N0cmVhbV8xLlRyYW5zZm9ybSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtZnVuY3Rpb24tdHlwZVxuICAgIF90cmFuc2Zvcm0oY2h1bmssIF9lbmNvZGluZywgY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5wdXNoKGNodW5rKTtcbiAgICAgICAgdGhpcy5sb2FkZWRCeXRlcyArPSBjaHVuay5sZW5ndGg7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLnByb2dyZXNzQ2FsbGJhY2soeyBsb2FkZWRCeXRlczogdGhpcy5sb2FkZWRCeXRlcyB9KTtcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKHByb2dyZXNzQ2FsbGJhY2spIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5sb2FkZWRCeXRlcyA9IDA7XG4gICAgICAgIHRoaXMucHJvZ3Jlc3NDYWxsYmFjayA9IHByb2dyZXNzQ2FsbGJhY2s7XG4gICAgfVxufVxuLyoqXG4gKiBBIEh0dHBDbGllbnQgaW1wbGVtZW50YXRpb24gdGhhdCB1c2VzIE5vZGUncyBcImh0dHBzXCIgbW9kdWxlIHRvIHNlbmQgSFRUUFMgcmVxdWVzdHMuXG4gKiBAaW50ZXJuYWxcbiAqL1xuY2xhc3MgTm9kZUh0dHBDbGllbnQge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmNhY2hlZEh0dHBzQWdlbnRzID0gbmV3IFdlYWtNYXAoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTWFrZXMgYSByZXF1ZXN0IG92ZXIgYW4gdW5kZXJseWluZyB0cmFuc3BvcnQgbGF5ZXIgYW5kIHJldHVybnMgdGhlIHJlc3BvbnNlLlxuICAgICAqIEBwYXJhbSByZXF1ZXN0IC0gVGhlIHJlcXVlc3QgdG8gYmUgbWFkZS5cbiAgICAgKi9cbiAgICBhc3luYyBzZW5kUmVxdWVzdChyZXF1ZXN0KSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jO1xuICAgICAgICBjb25zdCBhYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgICAgIGxldCBhYm9ydExpc3RlbmVyO1xuICAgICAgICBpZiAocmVxdWVzdC5hYm9ydFNpZ25hbCkge1xuICAgICAgICAgICAgaWYgKHJlcXVlc3QuYWJvcnRTaWduYWwuYWJvcnRlZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBhYm9ydF9jb250cm9sbGVyXzEuQWJvcnRFcnJvcihcIlRoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWJvcnRMaXN0ZW5lciA9IChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChldmVudC50eXBlID09PSBcImFib3J0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgYWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlcXVlc3QuYWJvcnRTaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIGFib3J0TGlzdGVuZXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXF1ZXN0LnRpbWVvdXQgPiAwKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBhYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICAgICAgICAgIH0sIHJlcXVlc3QudGltZW91dCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWNjZXB0RW5jb2RpbmcgPSByZXF1ZXN0LmhlYWRlcnMuZ2V0KFwiQWNjZXB0LUVuY29kaW5nXCIpO1xuICAgICAgICBjb25zdCBzaG91bGREZWNvbXByZXNzID0gKGFjY2VwdEVuY29kaW5nID09PSBudWxsIHx8IGFjY2VwdEVuY29kaW5nID09PSB2b2lkIDAgPyB2b2lkIDAgOiBhY2NlcHRFbmNvZGluZy5pbmNsdWRlcyhcImd6aXBcIikpIHx8IChhY2NlcHRFbmNvZGluZyA9PT0gbnVsbCB8fCBhY2NlcHRFbmNvZGluZyA9PT0gdm9pZCAwID8gdm9pZCAwIDogYWNjZXB0RW5jb2RpbmcuaW5jbHVkZXMoXCJkZWZsYXRlXCIpKTtcbiAgICAgICAgbGV0IGJvZHkgPSB0eXBlb2YgcmVxdWVzdC5ib2R5ID09PSBcImZ1bmN0aW9uXCIgPyByZXF1ZXN0LmJvZHkoKSA6IHJlcXVlc3QuYm9keTtcbiAgICAgICAgaWYgKGJvZHkgJiYgIXJlcXVlc3QuaGVhZGVycy5oYXMoXCJDb250ZW50LUxlbmd0aFwiKSkge1xuICAgICAgICAgICAgY29uc3QgYm9keUxlbmd0aCA9IGdldEJvZHlMZW5ndGgoYm9keSk7XG4gICAgICAgICAgICBpZiAoYm9keUxlbmd0aCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJlcXVlc3QuaGVhZGVycy5zZXQoXCJDb250ZW50LUxlbmd0aFwiLCBib2R5TGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzcG9uc2VTdHJlYW07XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoYm9keSAmJiByZXF1ZXN0Lm9uVXBsb2FkUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvblVwbG9hZFByb2dyZXNzID0gcmVxdWVzdC5vblVwbG9hZFByb2dyZXNzO1xuICAgICAgICAgICAgICAgIGNvbnN0IHVwbG9hZFJlcG9ydFN0cmVhbSA9IG5ldyBSZXBvcnRUcmFuc2Zvcm0ob25VcGxvYWRQcm9ncmVzcyk7XG4gICAgICAgICAgICAgICAgdXBsb2FkUmVwb3J0U3RyZWFtLm9uKFwiZXJyb3JcIiwgKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbG9nX2pzXzEubG9nZ2VyLmVycm9yKFwiRXJyb3IgaW4gdXBsb2FkIHByb2dyZXNzXCIsIGUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChpc1JlYWRhYmxlU3RyZWFtKGJvZHkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGJvZHkucGlwZSh1cGxvYWRSZXBvcnRTdHJlYW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdXBsb2FkUmVwb3J0U3RyZWFtLmVuZChib2R5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYm9keSA9IHVwbG9hZFJlcG9ydFN0cmVhbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMubWFrZVJlcXVlc3QocmVxdWVzdCwgYWJvcnRDb250cm9sbGVyLCBib2R5KTtcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSBnZXRSZXNwb25zZUhlYWRlcnMocmVzKTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXR1cyA9IChfYSA9IHJlcy5zdGF0dXNDb2RlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAwO1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSB7XG4gICAgICAgICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBSZXNwb25zZXMgdG8gSEVBRCBtdXN0IG5vdCBoYXZlIGEgYm9keS5cbiAgICAgICAgICAgIC8vIElmIHRoZXkgZG8gcmV0dXJuIGEgYm9keSwgdGhhdCBib2R5IG11c3QgYmUgaWdub3JlZC5cbiAgICAgICAgICAgIGlmIChyZXF1ZXN0Lm1ldGhvZCA9PT0gXCJIRUFEXCIpIHtcbiAgICAgICAgICAgICAgICAvLyBjYWxsIHJlc3VtZSgpIGFuZCBub3QgZGVzdHJveSgpIHRvIGF2b2lkIGNsb3NpbmcgdGhlIHNvY2tldFxuICAgICAgICAgICAgICAgIC8vIGFuZCBsb3Npbmcga2VlcCBhbGl2ZVxuICAgICAgICAgICAgICAgIHJlcy5yZXN1bWUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNwb25zZVN0cmVhbSA9IHNob3VsZERlY29tcHJlc3MgPyBnZXREZWNvZGVkUmVzcG9uc2VTdHJlYW0ocmVzLCBoZWFkZXJzKSA6IHJlcztcbiAgICAgICAgICAgIGNvbnN0IG9uRG93bmxvYWRQcm9ncmVzcyA9IHJlcXVlc3Qub25Eb3dubG9hZFByb2dyZXNzO1xuICAgICAgICAgICAgaWYgKG9uRG93bmxvYWRQcm9ncmVzcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRvd25sb2FkUmVwb3J0U3RyZWFtID0gbmV3IFJlcG9ydFRyYW5zZm9ybShvbkRvd25sb2FkUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgICAgIGRvd25sb2FkUmVwb3J0U3RyZWFtLm9uKFwiZXJyb3JcIiwgKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbG9nX2pzXzEubG9nZ2VyLmVycm9yKFwiRXJyb3IgaW4gZG93bmxvYWQgcHJvZ3Jlc3NcIiwgZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VTdHJlYW0ucGlwZShkb3dubG9hZFJlcG9ydFN0cmVhbSk7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VTdHJlYW0gPSBkb3dubG9hZFJlcG9ydFN0cmVhbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIC8vIFZhbHVlIG9mIFBPU0lUSVZFX0lORklOSVRZIGluIHN0cmVhbVJlc3BvbnNlU3RhdHVzQ29kZXMgaXMgY29uc2lkZXJlZCBhcyBhbnkgc3RhdHVzIGNvZGVcbiAgICAgICAgICAgICgoX2IgPSByZXF1ZXN0LnN0cmVhbVJlc3BvbnNlU3RhdHVzQ29kZXMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5oYXMoTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSkgfHxcbiAgICAgICAgICAgICAgICAoKF9jID0gcmVxdWVzdC5zdHJlYW1SZXNwb25zZVN0YXR1c0NvZGVzKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuaGFzKHJlc3BvbnNlLnN0YXR1cykpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2UucmVhZGFibGVTdHJlYW1Cb2R5ID0gcmVzcG9uc2VTdHJlYW07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZS5ib2R5QXNUZXh0ID0gYXdhaXQgc3RyZWFtVG9UZXh0KHJlc3BvbnNlU3RyZWFtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIC8vIGNsZWFuIHVwIGV2ZW50IGxpc3RlbmVyXG4gICAgICAgICAgICBpZiAocmVxdWVzdC5hYm9ydFNpZ25hbCAmJiBhYm9ydExpc3RlbmVyKSB7XG4gICAgICAgICAgICAgICAgbGV0IHVwbG9hZFN0cmVhbURvbmUgPSBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNSZWFkYWJsZVN0cmVhbShib2R5KSkge1xuICAgICAgICAgICAgICAgICAgICB1cGxvYWRTdHJlYW1Eb25lID0gaXNTdHJlYW1Db21wbGV0ZShib2R5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IGRvd25sb2FkU3RyZWFtRG9uZSA9IFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIGlmIChpc1JlYWRhYmxlU3RyZWFtKHJlc3BvbnNlU3RyZWFtKSkge1xuICAgICAgICAgICAgICAgICAgICBkb3dubG9hZFN0cmVhbURvbmUgPSBpc1N0cmVhbUNvbXBsZXRlKHJlc3BvbnNlU3RyZWFtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgUHJvbWlzZS5hbGwoW3VwbG9hZFN0cmVhbURvbmUsIGRvd25sb2FkU3RyZWFtRG9uZV0pXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJvbWlzZS9hbHdheXMtcmV0dXJuXG4gICAgICAgICAgICAgICAgICAgIGlmIChhYm9ydExpc3RlbmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAoX2EgPSByZXF1ZXN0LmFib3J0U2lnbmFsKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIGFib3J0TGlzdGVuZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ19qc18xLmxvZ2dlci53YXJuaW5nKFwiRXJyb3Igd2hlbiBjbGVhbmluZyB1cCBhYm9ydExpc3RlbmVyIG9uIGh0dHBSZXF1ZXN0XCIsIGUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIG1ha2VSZXF1ZXN0KHJlcXVlc3QsIGFib3J0Q29udHJvbGxlciwgYm9keSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwocmVxdWVzdC51cmwpO1xuICAgICAgICBjb25zdCBpc0luc2VjdXJlID0gdXJsLnByb3RvY29sICE9PSBcImh0dHBzOlwiO1xuICAgICAgICBpZiAoaXNJbnNlY3VyZSAmJiAhcmVxdWVzdC5hbGxvd0luc2VjdXJlQ29ubmVjdGlvbikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY29ubmVjdCB0byAke3JlcXVlc3QudXJsfSB3aGlsZSBhbGxvd0luc2VjdXJlQ29ubmVjdGlvbiBpcyBmYWxzZS5gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhZ2VudCA9IChfYSA9IHJlcXVlc3QuYWdlbnQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHRoaXMuZ2V0T3JDcmVhdGVBZ2VudChyZXF1ZXN0LCBpc0luc2VjdXJlKTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGFnZW50LFxuICAgICAgICAgICAgaG9zdG5hbWU6IHVybC5ob3N0bmFtZSxcbiAgICAgICAgICAgIHBhdGg6IGAke3VybC5wYXRobmFtZX0ke3VybC5zZWFyY2h9YCxcbiAgICAgICAgICAgIHBvcnQ6IHVybC5wb3J0LFxuICAgICAgICAgICAgbWV0aG9kOiByZXF1ZXN0Lm1ldGhvZCxcbiAgICAgICAgICAgIGhlYWRlcnM6IHJlcXVlc3QuaGVhZGVycy50b0pTT04oeyBwcmVzZXJ2ZUNhc2U6IHRydWUgfSksXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXEgPSBpc0luc2VjdXJlID8gaHR0cC5yZXF1ZXN0KG9wdGlvbnMsIHJlc29sdmUpIDogaHR0cHMucmVxdWVzdChvcHRpb25zLCByZXNvbHZlKTtcbiAgICAgICAgICAgIHJlcS5vbmNlKFwiZXJyb3JcIiwgKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IHJlc3RFcnJvcl9qc18xLlJlc3RFcnJvcihlcnIubWVzc2FnZSwgeyBjb2RlOiAoX2EgPSBlcnIuY29kZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogcmVzdEVycm9yX2pzXzEuUmVzdEVycm9yLlJFUVVFU1RfU0VORF9FUlJPUiwgcmVxdWVzdCB9KSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGFib3J0Q29udHJvbGxlci5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhYm9ydEVycm9yID0gbmV3IGFib3J0X2NvbnRyb2xsZXJfMS5BYm9ydEVycm9yKFwiVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC5cIik7XG4gICAgICAgICAgICAgICAgcmVxLmRlc3Ryb3koYWJvcnRFcnJvcik7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGFib3J0RXJyb3IpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoYm9keSAmJiBpc1JlYWRhYmxlU3RyZWFtKGJvZHkpKSB7XG4gICAgICAgICAgICAgICAgYm9keS5waXBlKHJlcSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChib2R5KSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBib2R5ID09PSBcInN0cmluZ1wiIHx8IEJ1ZmZlci5pc0J1ZmZlcihib2R5KSkge1xuICAgICAgICAgICAgICAgICAgICByZXEuZW5kKGJvZHkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChpc0FycmF5QnVmZmVyKGJvZHkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcS5lbmQoQXJyYXlCdWZmZXIuaXNWaWV3KGJvZHkpID8gQnVmZmVyLmZyb20oYm9keS5idWZmZXIpIDogQnVmZmVyLmZyb20oYm9keSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbG9nX2pzXzEubG9nZ2VyLmVycm9yKFwiVW5yZWNvZ25pemVkIGJvZHkgdHlwZVwiLCBib2R5KTtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyByZXN0RXJyb3JfanNfMS5SZXN0RXJyb3IoXCJVbnJlY29nbml6ZWQgYm9keSB0eXBlXCIpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBzdHJlYW1zIGRvbid0IGxpa2UgXCJ1bmRlZmluZWRcIiBiZWluZyBwYXNzZWQgYXMgZGF0YVxuICAgICAgICAgICAgICAgIHJlcS5lbmQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGdldE9yQ3JlYXRlQWdlbnQocmVxdWVzdCwgaXNJbnNlY3VyZSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IGRpc2FibGVLZWVwQWxpdmUgPSByZXF1ZXN0LmRpc2FibGVLZWVwQWxpdmU7XG4gICAgICAgIC8vIEhhbmRsZSBJbnNlY3VyZSByZXF1ZXN0cyBmaXJzdFxuICAgICAgICBpZiAoaXNJbnNlY3VyZSkge1xuICAgICAgICAgICAgaWYgKGRpc2FibGVLZWVwQWxpdmUpIHtcbiAgICAgICAgICAgICAgICAvLyBrZWVwQWxpdmU6ZmFsc2UgaXMgdGhlIGRlZmF1bHQgc28gd2UgZG9uJ3QgbmVlZCBhIGN1c3RvbSBBZ2VudFxuICAgICAgICAgICAgICAgIHJldHVybiBodHRwLmdsb2JhbEFnZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLmNhY2hlZEh0dHBBZ2VudCkge1xuICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGNhY2hlZCBhZ2VudCBjcmVhdGUgYSBuZXcgb25lIGFuZCBjYWNoZSBpdC5cbiAgICAgICAgICAgICAgICB0aGlzLmNhY2hlZEh0dHBBZ2VudCA9IG5ldyBodHRwLkFnZW50KHsga2VlcEFsaXZlOiB0cnVlIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGVkSHR0cEFnZW50O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGRpc2FibGVLZWVwQWxpdmUgJiYgIXJlcXVlc3QudGxzU2V0dGluZ3MpIHtcbiAgICAgICAgICAgICAgICAvLyBXaGVuIHRoZXJlIGFyZSBubyB0bHNTZXR0aW5ncyBhbmQga2VlcEFsaXZlIGlzIGZhbHNlXG4gICAgICAgICAgICAgICAgLy8gd2UgZG9uJ3QgbmVlZCBhIGN1c3RvbSBhZ2VudFxuICAgICAgICAgICAgICAgIHJldHVybiBodHRwcy5nbG9iYWxBZ2VudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFdlIHVzZSB0aGUgdGxzU2V0dGluZ3MgdG8gaW5kZXggY2FjaGVkIGNsaWVudHNcbiAgICAgICAgICAgIGNvbnN0IHRsc1NldHRpbmdzID0gKF9hID0gcmVxdWVzdC50bHNTZXR0aW5ncykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogREVGQVVMVF9UTFNfU0VUVElOR1M7XG4gICAgICAgICAgICAvLyBHZXQgdGhlIGNhY2hlZCBhZ2VudCBvciBjcmVhdGUgYSBuZXcgb25lIHdpdGggdGhlXG4gICAgICAgICAgICAvLyBwcm92aWRlZCB2YWx1ZXMgZm9yIGtlZXBBbGl2ZSBhbmQgdGxzU2V0dGluZ3NcbiAgICAgICAgICAgIGxldCBhZ2VudCA9IHRoaXMuY2FjaGVkSHR0cHNBZ2VudHMuZ2V0KHRsc1NldHRpbmdzKTtcbiAgICAgICAgICAgIGlmIChhZ2VudCAmJiBhZ2VudC5vcHRpb25zLmtlZXBBbGl2ZSA9PT0gIWRpc2FibGVLZWVwQWxpdmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWdlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsb2dfanNfMS5sb2dnZXIuaW5mbyhcIk5vIGNhY2hlZCBUTFMgQWdlbnQgZXhpc3QsIGNyZWF0aW5nIGEgbmV3IEFnZW50XCIpO1xuICAgICAgICAgICAgYWdlbnQgPSBuZXcgaHR0cHMuQWdlbnQoT2JqZWN0LmFzc2lnbih7IFxuICAgICAgICAgICAgICAgIC8vIGtlZXBBbGl2ZSBpcyB0cnVlIGlmIGRpc2FibGVLZWVwQWxpdmUgaXMgZmFsc2UuXG4gICAgICAgICAgICAgICAga2VlcEFsaXZlOiAhZGlzYWJsZUtlZXBBbGl2ZSB9LCB0bHNTZXR0aW5ncykpO1xuICAgICAgICAgICAgdGhpcy5jYWNoZWRIdHRwc0FnZW50cy5zZXQodGxzU2V0dGluZ3MsIGFnZW50KTtcbiAgICAgICAgICAgIHJldHVybiBhZ2VudDtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIGdldFJlc3BvbnNlSGVhZGVycyhyZXMpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gKDAsIGh0dHBIZWFkZXJzX2pzXzEuY3JlYXRlSHR0cEhlYWRlcnMpKCk7XG4gICAgZm9yIChjb25zdCBoZWFkZXIgb2YgT2JqZWN0LmtleXMocmVzLmhlYWRlcnMpKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gcmVzLmhlYWRlcnNbaGVhZGVyXTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGhlYWRlcnMuc2V0KGhlYWRlciwgdmFsdWVbMF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICBoZWFkZXJzLnNldChoZWFkZXIsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaGVhZGVycztcbn1cbmZ1bmN0aW9uIGdldERlY29kZWRSZXNwb25zZVN0cmVhbShzdHJlYW0sIGhlYWRlcnMpIHtcbiAgICBjb25zdCBjb250ZW50RW5jb2RpbmcgPSBoZWFkZXJzLmdldChcIkNvbnRlbnQtRW5jb2RpbmdcIik7XG4gICAgaWYgKGNvbnRlbnRFbmNvZGluZyA9PT0gXCJnemlwXCIpIHtcbiAgICAgICAgY29uc3QgdW56aXAgPSB6bGliLmNyZWF0ZUd1bnppcCgpO1xuICAgICAgICBzdHJlYW0ucGlwZSh1bnppcCk7XG4gICAgICAgIHJldHVybiB1bnppcDtcbiAgICB9XG4gICAgZWxzZSBpZiAoY29udGVudEVuY29kaW5nID09PSBcImRlZmxhdGVcIikge1xuICAgICAgICBjb25zdCBpbmZsYXRlID0gemxpYi5jcmVhdGVJbmZsYXRlKCk7XG4gICAgICAgIHN0cmVhbS5waXBlKGluZmxhdGUpO1xuICAgICAgICByZXR1cm4gaW5mbGF0ZTtcbiAgICB9XG4gICAgcmV0dXJuIHN0cmVhbTtcbn1cbmZ1bmN0aW9uIHN0cmVhbVRvVGV4dChzdHJlYW0pIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBidWZmZXIgPSBbXTtcbiAgICAgICAgc3RyZWFtLm9uKFwiZGF0YVwiLCAoY2h1bmspID0+IHtcbiAgICAgICAgICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoY2h1bmspKSB7XG4gICAgICAgICAgICAgICAgYnVmZmVyLnB1c2goY2h1bmspO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYnVmZmVyLnB1c2goQnVmZmVyLmZyb20oY2h1bmspKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHN0cmVhbS5vbihcImVuZFwiLCAoKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKEJ1ZmZlci5jb25jYXQoYnVmZmVyKS50b1N0cmluZyhcInV0ZjhcIikpO1xuICAgICAgICB9KTtcbiAgICAgICAgc3RyZWFtLm9uKFwiZXJyb3JcIiwgKGUpID0+IHtcbiAgICAgICAgICAgIGlmIChlICYmIChlID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGUubmFtZSkgPT09IFwiQWJvcnRFcnJvclwiKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyByZXN0RXJyb3JfanNfMS5SZXN0RXJyb3IoYEVycm9yIHJlYWRpbmcgcmVzcG9uc2UgYXMgdGV4dDogJHtlLm1lc3NhZ2V9YCwge1xuICAgICAgICAgICAgICAgICAgICBjb2RlOiByZXN0RXJyb3JfanNfMS5SZXN0RXJyb3IuUEFSU0VfRVJST1IsXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIGdldEJvZHlMZW5ndGgoYm9keSkge1xuICAgIGlmICghYm9keSkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgZWxzZSBpZiAoQnVmZmVyLmlzQnVmZmVyKGJvZHkpKSB7XG4gICAgICAgIHJldHVybiBib2R5Lmxlbmd0aDtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNSZWFkYWJsZVN0cmVhbShib2R5KSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNBcnJheUJ1ZmZlcihib2R5KSkge1xuICAgICAgICByZXR1cm4gYm9keS5ieXRlTGVuZ3RoO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgYm9keSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oYm9keSkubGVuZ3RoO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufVxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgSHR0cENsaWVudCBpbnN0YW5jZSBmb3IgdGhlIE5vZGVKUyBlbnZpcm9ubWVudC5cbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBjcmVhdGVOb2RlSHR0cENsaWVudCgpIHtcbiAgICByZXR1cm4gbmV3IE5vZGVIdHRwQ2xpZW50KCk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ub2RlSHR0cENsaWVudC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNyZWF0ZURlZmF1bHRIdHRwQ2xpZW50ID0gY3JlYXRlRGVmYXVsdEh0dHBDbGllbnQ7XG5jb25zdCBub2RlSHR0cENsaWVudF9qc18xID0gcmVxdWlyZShcIi4vbm9kZUh0dHBDbGllbnQuanNcIik7XG4vKipcbiAqIENyZWF0ZSB0aGUgY29ycmVjdCBIdHRwQ2xpZW50IGZvciB0aGUgY3VycmVudCBlbnZpcm9ubWVudC5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRGVmYXVsdEh0dHBDbGllbnQoKSB7XG4gICAgcmV0dXJuICgwLCBub2RlSHR0cENsaWVudF9qc18xLmNyZWF0ZU5vZGVIdHRwQ2xpZW50KSgpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGVmYXVsdEh0dHBDbGllbnQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jcmVhdGVQaXBlbGluZVJlcXVlc3QgPSBjcmVhdGVQaXBlbGluZVJlcXVlc3Q7XG5jb25zdCBodHRwSGVhZGVyc19qc18xID0gcmVxdWlyZShcIi4vaHR0cEhlYWRlcnMuanNcIik7XG5jb25zdCBjb3JlX3V0aWxfMSA9IHJlcXVpcmUoXCJAYXp1cmUvY29yZS11dGlsXCIpO1xuY2xhc3MgUGlwZWxpbmVSZXF1ZXN0SW1wbCB7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lLCBfZiwgX2c7XG4gICAgICAgIHRoaXMudXJsID0gb3B0aW9ucy51cmw7XG4gICAgICAgIHRoaXMuYm9keSA9IG9wdGlvbnMuYm9keTtcbiAgICAgICAgdGhpcy5oZWFkZXJzID0gKF9hID0gb3B0aW9ucy5oZWFkZXJzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAoMCwgaHR0cEhlYWRlcnNfanNfMS5jcmVhdGVIdHRwSGVhZGVycykoKTtcbiAgICAgICAgdGhpcy5tZXRob2QgPSAoX2IgPSBvcHRpb25zLm1ldGhvZCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogXCJHRVRcIjtcbiAgICAgICAgdGhpcy50aW1lb3V0ID0gKF9jID0gb3B0aW9ucy50aW1lb3V0KSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiAwO1xuICAgICAgICB0aGlzLm11bHRpcGFydEJvZHkgPSBvcHRpb25zLm11bHRpcGFydEJvZHk7XG4gICAgICAgIHRoaXMuZm9ybURhdGEgPSBvcHRpb25zLmZvcm1EYXRhO1xuICAgICAgICB0aGlzLmRpc2FibGVLZWVwQWxpdmUgPSAoX2QgPSBvcHRpb25zLmRpc2FibGVLZWVwQWxpdmUpICE9PSBudWxsICYmIF9kICE9PSB2b2lkIDAgPyBfZCA6IGZhbHNlO1xuICAgICAgICB0aGlzLnByb3h5U2V0dGluZ3MgPSBvcHRpb25zLnByb3h5U2V0dGluZ3M7XG4gICAgICAgIHRoaXMuc3RyZWFtUmVzcG9uc2VTdGF0dXNDb2RlcyA9IG9wdGlvbnMuc3RyZWFtUmVzcG9uc2VTdGF0dXNDb2RlcztcbiAgICAgICAgdGhpcy53aXRoQ3JlZGVudGlhbHMgPSAoX2UgPSBvcHRpb25zLndpdGhDcmVkZW50aWFscykgIT09IG51bGwgJiYgX2UgIT09IHZvaWQgMCA/IF9lIDogZmFsc2U7XG4gICAgICAgIHRoaXMuYWJvcnRTaWduYWwgPSBvcHRpb25zLmFib3J0U2lnbmFsO1xuICAgICAgICB0aGlzLnRyYWNpbmdPcHRpb25zID0gb3B0aW9ucy50cmFjaW5nT3B0aW9ucztcbiAgICAgICAgdGhpcy5vblVwbG9hZFByb2dyZXNzID0gb3B0aW9ucy5vblVwbG9hZFByb2dyZXNzO1xuICAgICAgICB0aGlzLm9uRG93bmxvYWRQcm9ncmVzcyA9IG9wdGlvbnMub25Eb3dubG9hZFByb2dyZXNzO1xuICAgICAgICB0aGlzLnJlcXVlc3RJZCA9IG9wdGlvbnMucmVxdWVzdElkIHx8ICgwLCBjb3JlX3V0aWxfMS5yYW5kb21VVUlEKSgpO1xuICAgICAgICB0aGlzLmFsbG93SW5zZWN1cmVDb25uZWN0aW9uID0gKF9mID0gb3B0aW9ucy5hbGxvd0luc2VjdXJlQ29ubmVjdGlvbikgIT09IG51bGwgJiYgX2YgIT09IHZvaWQgMCA/IF9mIDogZmFsc2U7XG4gICAgICAgIHRoaXMuZW5hYmxlQnJvd3NlclN0cmVhbXMgPSAoX2cgPSBvcHRpb25zLmVuYWJsZUJyb3dzZXJTdHJlYW1zKSAhPT0gbnVsbCAmJiBfZyAhPT0gdm9pZCAwID8gX2cgOiBmYWxzZTtcbiAgICB9XG59XG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgcGlwZWxpbmUgcmVxdWVzdCB3aXRoIHRoZSBnaXZlbiBvcHRpb25zLlxuICogVGhpcyBtZXRob2QgaXMgdG8gYWxsb3cgZm9yIHRoZSBlYXN5IHNldHRpbmcgb2YgZGVmYXVsdCB2YWx1ZXMgYW5kIG5vdCByZXF1aXJlZC5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgdG8gY3JlYXRlIHRoZSByZXF1ZXN0IHdpdGguXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVBpcGVsaW5lUmVxdWVzdChvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBQaXBlbGluZVJlcXVlc3RJbXBsKG9wdGlvbnMpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGlwZWxpbmVSZXF1ZXN0LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZXhwb25lbnRpYWxSZXRyeVBvbGljeU5hbWUgPSB2b2lkIDA7XG5leHBvcnRzLmV4cG9uZW50aWFsUmV0cnlQb2xpY3kgPSBleHBvbmVudGlhbFJldHJ5UG9saWN5O1xuY29uc3QgZXhwb25lbnRpYWxSZXRyeVN0cmF0ZWd5X2pzXzEgPSByZXF1aXJlKFwiLi4vcmV0cnlTdHJhdGVnaWVzL2V4cG9uZW50aWFsUmV0cnlTdHJhdGVneS5qc1wiKTtcbmNvbnN0IHJldHJ5UG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9yZXRyeVBvbGljeS5qc1wiKTtcbmNvbnN0IGNvbnN0YW50c19qc18xID0gcmVxdWlyZShcIi4uL2NvbnN0YW50cy5qc1wiKTtcbi8qKlxuICogVGhlIHByb2dyYW1tYXRpYyBpZGVudGlmaWVyIG9mIHRoZSBleHBvbmVudGlhbFJldHJ5UG9saWN5LlxuICovXG5leHBvcnRzLmV4cG9uZW50aWFsUmV0cnlQb2xpY3lOYW1lID0gXCJleHBvbmVudGlhbFJldHJ5UG9saWN5XCI7XG4vKipcbiAqIEEgcG9saWN5IHRoYXQgYXR0ZW1wdHMgdG8gcmV0cnkgcmVxdWVzdHMgd2hpbGUgaW50cm9kdWNpbmcgYW4gZXhwb25lbnRpYWxseSBpbmNyZWFzaW5nIGRlbGF5LlxuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRoYXQgY29uZmlndXJlIHJldHJ5IGxvZ2ljLlxuICovXG5mdW5jdGlvbiBleHBvbmVudGlhbFJldHJ5UG9saWN5KG9wdGlvbnMgPSB7fSkge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4gKDAsIHJldHJ5UG9saWN5X2pzXzEucmV0cnlQb2xpY3kpKFtcbiAgICAgICAgKDAsIGV4cG9uZW50aWFsUmV0cnlTdHJhdGVneV9qc18xLmV4cG9uZW50aWFsUmV0cnlTdHJhdGVneSkoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKSwgeyBpZ25vcmVTeXN0ZW1FcnJvcnM6IHRydWUgfSkpLFxuICAgIF0sIHtcbiAgICAgICAgbWF4UmV0cmllczogKF9hID0gb3B0aW9ucy5tYXhSZXRyaWVzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBjb25zdGFudHNfanNfMS5ERUZBVUxUX1JFVFJZX1BPTElDWV9DT1VOVCxcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWV4cG9uZW50aWFsUmV0cnlQb2xpY3kuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5zeXN0ZW1FcnJvclJldHJ5UG9saWN5TmFtZSA9IHZvaWQgMDtcbmV4cG9ydHMuc3lzdGVtRXJyb3JSZXRyeVBvbGljeSA9IHN5c3RlbUVycm9yUmV0cnlQb2xpY3k7XG5jb25zdCBleHBvbmVudGlhbFJldHJ5U3RyYXRlZ3lfanNfMSA9IHJlcXVpcmUoXCIuLi9yZXRyeVN0cmF0ZWdpZXMvZXhwb25lbnRpYWxSZXRyeVN0cmF0ZWd5LmpzXCIpO1xuY29uc3QgcmV0cnlQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3JldHJ5UG9saWN5LmpzXCIpO1xuY29uc3QgY29uc3RhbnRzX2pzXzEgPSByZXF1aXJlKFwiLi4vY29uc3RhbnRzLmpzXCIpO1xuLyoqXG4gKiBOYW1lIG9mIHRoZSB7QGxpbmsgc3lzdGVtRXJyb3JSZXRyeVBvbGljeX1cbiAqL1xuZXhwb3J0cy5zeXN0ZW1FcnJvclJldHJ5UG9saWN5TmFtZSA9IFwic3lzdGVtRXJyb3JSZXRyeVBvbGljeVwiO1xuLyoqXG4gKiBBIHJldHJ5IHBvbGljeSB0aGF0IHNwZWNpZmljYWxseSBzZWVrcyB0byBoYW5kbGUgZXJyb3JzIGluIHRoZVxuICogdW5kZXJseWluZyB0cmFuc3BvcnQgbGF5ZXIgKGUuZy4gRE5TIGxvb2t1cCBmYWlsdXJlcykgcmF0aGVyIHRoYW5cbiAqIHJldHJ5YWJsZSBlcnJvciBjb2RlcyBmcm9tIHRoZSBzZXJ2ZXIgaXRzZWxmLlxuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRoYXQgY3VzdG9taXplIHRoZSBwb2xpY3kuXG4gKi9cbmZ1bmN0aW9uIHN5c3RlbUVycm9yUmV0cnlQb2xpY3kob3B0aW9ucyA9IHt9KSB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGV4cG9ydHMuc3lzdGVtRXJyb3JSZXRyeVBvbGljeU5hbWUsXG4gICAgICAgIHNlbmRSZXF1ZXN0OiAoMCwgcmV0cnlQb2xpY3lfanNfMS5yZXRyeVBvbGljeSkoW1xuICAgICAgICAgICAgKDAsIGV4cG9uZW50aWFsUmV0cnlTdHJhdGVneV9qc18xLmV4cG9uZW50aWFsUmV0cnlTdHJhdGVneSkoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKSwgeyBpZ25vcmVIdHRwU3RhdHVzQ29kZXM6IHRydWUgfSkpLFxuICAgICAgICBdLCB7XG4gICAgICAgICAgICBtYXhSZXRyaWVzOiAoX2EgPSBvcHRpb25zLm1heFJldHJpZXMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGNvbnN0YW50c19qc18xLkRFRkFVTFRfUkVUUllfUE9MSUNZX0NPVU5ULFxuICAgICAgICB9KS5zZW5kUmVxdWVzdCxcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3lzdGVtRXJyb3JSZXRyeVBvbGljeS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRocm90dGxpbmdSZXRyeVBvbGljeU5hbWUgPSB2b2lkIDA7XG5leHBvcnRzLnRocm90dGxpbmdSZXRyeVBvbGljeSA9IHRocm90dGxpbmdSZXRyeVBvbGljeTtcbmNvbnN0IHRocm90dGxpbmdSZXRyeVN0cmF0ZWd5X2pzXzEgPSByZXF1aXJlKFwiLi4vcmV0cnlTdHJhdGVnaWVzL3Rocm90dGxpbmdSZXRyeVN0cmF0ZWd5LmpzXCIpO1xuY29uc3QgcmV0cnlQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3JldHJ5UG9saWN5LmpzXCIpO1xuY29uc3QgY29uc3RhbnRzX2pzXzEgPSByZXF1aXJlKFwiLi4vY29uc3RhbnRzLmpzXCIpO1xuLyoqXG4gKiBOYW1lIG9mIHRoZSB7QGxpbmsgdGhyb3R0bGluZ1JldHJ5UG9saWN5fVxuICovXG5leHBvcnRzLnRocm90dGxpbmdSZXRyeVBvbGljeU5hbWUgPSBcInRocm90dGxpbmdSZXRyeVBvbGljeVwiO1xuLyoqXG4gKiBBIHBvbGljeSB0aGF0IHJldHJpZXMgd2hlbiB0aGUgc2VydmVyIHNlbmRzIGEgNDI5IHJlc3BvbnNlIHdpdGggYSBSZXRyeS1BZnRlciBoZWFkZXIuXG4gKlxuICogVG8gbGVhcm4gbW9yZSwgcGxlYXNlIHJlZmVyIHRvXG4gKiBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9henVyZS9henVyZS1yZXNvdXJjZS1tYW5hZ2VyL3Jlc291cmNlLW1hbmFnZXItcmVxdWVzdC1saW1pdHMsXG4gKiBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9henVyZS9henVyZS1zdWJzY3JpcHRpb24tc2VydmljZS1saW1pdHMgYW5kXG4gKiBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9henVyZS92aXJ0dWFsLW1hY2hpbmVzL3Ryb3VibGVzaG9vdGluZy90cm91Ymxlc2hvb3RpbmctdGhyb3R0bGluZy1lcnJvcnNcbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdGhhdCBjb25maWd1cmUgcmV0cnkgbG9naWMuXG4gKi9cbmZ1bmN0aW9uIHRocm90dGxpbmdSZXRyeVBvbGljeShvcHRpb25zID0ge30pIHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogZXhwb3J0cy50aHJvdHRsaW5nUmV0cnlQb2xpY3lOYW1lLFxuICAgICAgICBzZW5kUmVxdWVzdDogKDAsIHJldHJ5UG9saWN5X2pzXzEucmV0cnlQb2xpY3kpKFsoMCwgdGhyb3R0bGluZ1JldHJ5U3RyYXRlZ3lfanNfMS50aHJvdHRsaW5nUmV0cnlTdHJhdGVneSkoKV0sIHtcbiAgICAgICAgICAgIG1heFJldHJpZXM6IChfYSA9IG9wdGlvbnMubWF4UmV0cmllcykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogY29uc3RhbnRzX2pzXzEuREVGQVVMVF9SRVRSWV9QT0xJQ1lfQ09VTlQsXG4gICAgICAgIH0pLnNlbmRSZXF1ZXN0LFxuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD10aHJvdHRsaW5nUmV0cnlQb2xpY3kuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5ERUZBVUxUX0NZQ0xFUl9PUFRJT05TID0gdm9pZCAwO1xuZXhwb3J0cy5jcmVhdGVUb2tlbkN5Y2xlciA9IGNyZWF0ZVRva2VuQ3ljbGVyO1xuY29uc3QgaGVscGVyc19qc18xID0gcmVxdWlyZShcIi4vaGVscGVycy5qc1wiKTtcbi8vIERlZmF1bHQgb3B0aW9ucyBmb3IgdGhlIGN5Y2xlciBpZiBub25lIGFyZSBwcm92aWRlZFxuZXhwb3J0cy5ERUZBVUxUX0NZQ0xFUl9PUFRJT05TID0ge1xuICAgIGZvcmNlZFJlZnJlc2hXaW5kb3dJbk1zOiAxMDAwLCAvLyBGb3JjZSB3YWl0aW5nIGZvciBhIHJlZnJlc2ggMXMgYmVmb3JlIHRoZSB0b2tlbiBleHBpcmVzXG4gICAgcmV0cnlJbnRlcnZhbEluTXM6IDMwMDAsIC8vIEFsbG93IHJlZnJlc2ggYXR0ZW1wdHMgZXZlcnkgM3NcbiAgICByZWZyZXNoV2luZG93SW5NczogMTAwMCAqIDYwICogMiwgLy8gU3RhcnQgcmVmcmVzaGluZyAybSBiZWZvcmUgZXhwaXJ5XG59O1xuLyoqXG4gKiBDb252ZXJ0cyBhbiBhbiB1bnJlbGlhYmxlIGFjY2VzcyB0b2tlbiBnZXR0ZXIgKHdoaWNoIG1heSByZXNvbHZlIHdpdGggbnVsbClcbiAqIGludG8gYW4gQWNjZXNzVG9rZW5HZXR0ZXIgYnkgcmV0cnlpbmcgdGhlIHVucmVsaWFibGUgZ2V0dGVyIGluIGEgcmVndWxhclxuICogaW50ZXJ2YWwuXG4gKlxuICogQHBhcmFtIGdldEFjY2Vzc1Rva2VuIC0gQSBmdW5jdGlvbiB0aGF0IHByb2R1Y2VzIGEgcHJvbWlzZSBvZiBhbiBhY2Nlc3MgdG9rZW4gdGhhdCBtYXkgZmFpbCBieSByZXR1cm5pbmcgbnVsbC5cbiAqIEBwYXJhbSByZXRyeUludGVydmFsSW5NcyAtIFRoZSB0aW1lIChpbiBtaWxsaXNlY29uZHMpIHRvIHdhaXQgYmV0d2VlbiByZXRyeSBhdHRlbXB0cy5cbiAqIEBwYXJhbSByZWZyZXNoVGltZW91dCAtIFRoZSB0aW1lc3RhbXAgYWZ0ZXIgd2hpY2ggdGhlIHJlZnJlc2ggYXR0ZW1wdCB3aWxsIGZhaWwsIHRocm93aW5nIGFuIGV4Y2VwdGlvbi5cbiAqIEByZXR1cm5zIC0gQSBwcm9taXNlIHRoYXQsIGlmIGl0IHJlc29sdmVzLCB3aWxsIHJlc29sdmUgd2l0aCBhbiBhY2Nlc3MgdG9rZW4uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGJlZ2luUmVmcmVzaChnZXRBY2Nlc3NUb2tlbiwgcmV0cnlJbnRlcnZhbEluTXMsIHJlZnJlc2hUaW1lb3V0KSB7XG4gICAgLy8gVGhpcyB3cmFwcGVyIGhhbmRsZXMgZXhjZXB0aW9ucyBncmFjZWZ1bGx5IGFzIGxvbmcgYXMgd2UgaGF2ZW4ndCBleGNlZWRlZFxuICAgIC8vIHRoZSB0aW1lb3V0LlxuICAgIGFzeW5jIGZ1bmN0aW9uIHRyeUdldEFjY2Vzc1Rva2VuKCkge1xuICAgICAgICBpZiAoRGF0ZS5ub3coKSA8IHJlZnJlc2hUaW1lb3V0KSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCBnZXRBY2Nlc3NUb2tlbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBmaW5hbFRva2VuID0gYXdhaXQgZ2V0QWNjZXNzVG9rZW4oKTtcbiAgICAgICAgICAgIC8vIFRpbWVvdXQgaXMgdXAsIHNvIHRocm93IGlmIGl0J3Mgc3RpbGwgbnVsbFxuICAgICAgICAgICAgaWYgKGZpbmFsVG9rZW4gPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gcmVmcmVzaCBhY2Nlc3MgdG9rZW4uXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZpbmFsVG9rZW47XG4gICAgICAgIH1cbiAgICB9XG4gICAgbGV0IHRva2VuID0gYXdhaXQgdHJ5R2V0QWNjZXNzVG9rZW4oKTtcbiAgICB3aGlsZSAodG9rZW4gPT09IG51bGwpIHtcbiAgICAgICAgYXdhaXQgKDAsIGhlbHBlcnNfanNfMS5kZWxheSkocmV0cnlJbnRlcnZhbEluTXMpO1xuICAgICAgICB0b2tlbiA9IGF3YWl0IHRyeUdldEFjY2Vzc1Rva2VuKCk7XG4gICAgfVxuICAgIHJldHVybiB0b2tlbjtcbn1cbi8qKlxuICogQ3JlYXRlcyBhIHRva2VuIGN5Y2xlciBmcm9tIGEgY3JlZGVudGlhbCwgc2NvcGVzLCBhbmQgb3B0aW9uYWwgc2V0dGluZ3MuXG4gKlxuICogQSB0b2tlbiBjeWNsZXIgcmVwcmVzZW50cyBhIHdheSB0byByZWxpYWJseSByZXRyaWV2ZSBhIHZhbGlkIGFjY2VzcyB0b2tlblxuICogZnJvbSBhIFRva2VuQ3JlZGVudGlhbC4gSXQgd2lsbCBoYW5kbGUgaW5pdGlhbGl6aW5nIHRoZSB0b2tlbiwgcmVmcmVzaGluZyBpdFxuICogd2hlbiBpdCBuZWFycyBleHBpcmF0aW9uLCBhbmQgc3luY2hyb25pemVzIHJlZnJlc2ggYXR0ZW1wdHMgdG8gYXZvaWRcbiAqIGNvbmN1cnJlbmN5IGhhemFyZHMuXG4gKlxuICogQHBhcmFtIGNyZWRlbnRpYWwgLSB0aGUgdW5kZXJseWluZyBUb2tlbkNyZWRlbnRpYWwgdGhhdCBwcm92aWRlcyB0aGUgYWNjZXNzXG4gKiB0b2tlblxuICogQHBhcmFtIHRva2VuQ3ljbGVyT3B0aW9ucyAtIG9wdGlvbmFsbHkgb3ZlcnJpZGUgZGVmYXVsdCBzZXR0aW5ncyBmb3IgdGhlIGN5Y2xlclxuICpcbiAqIEByZXR1cm5zIC0gYSBmdW5jdGlvbiB0aGF0IHJlbGlhYmx5IHByb2R1Y2VzIGEgdmFsaWQgYWNjZXNzIHRva2VuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVRva2VuQ3ljbGVyKGNyZWRlbnRpYWwsIHRva2VuQ3ljbGVyT3B0aW9ucykge1xuICAgIGxldCByZWZyZXNoV29ya2VyID0gbnVsbDtcbiAgICBsZXQgdG9rZW4gPSBudWxsO1xuICAgIGxldCB0ZW5hbnRJZDtcbiAgICBjb25zdCBvcHRpb25zID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBleHBvcnRzLkRFRkFVTFRfQ1lDTEVSX09QVElPTlMpLCB0b2tlbkN5Y2xlck9wdGlvbnMpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgbGl0dGxlIGhvbGRlciBkZWZpbmVzIHNldmVyYWwgcHJlZGljYXRlcyB0aGF0IHdlIHVzZSB0byBjb25zdHJ1Y3RcbiAgICAgKiB0aGUgcnVsZXMgb2YgcmVmcmVzaGluZyB0aGUgdG9rZW4uXG4gICAgICovXG4gICAgY29uc3QgY3ljbGVyID0ge1xuICAgICAgICAvKipcbiAgICAgICAgICogUHJvZHVjZXMgdHJ1ZSBpZiBhIHJlZnJlc2ggam9iIGlzIGN1cnJlbnRseSBpbiBwcm9ncmVzcy5cbiAgICAgICAgICovXG4gICAgICAgIGdldCBpc1JlZnJlc2hpbmcoKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVmcmVzaFdvcmtlciAhPT0gbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFByb2R1Y2VzIHRydWUgaWYgdGhlIGN5Y2xlciBTSE9VTEQgcmVmcmVzaCAod2UgYXJlIHdpdGhpbiB0aGUgcmVmcmVzaFxuICAgICAgICAgKiB3aW5kb3cgYW5kIG5vdCBhbHJlYWR5IHJlZnJlc2hpbmcpXG4gICAgICAgICAqL1xuICAgICAgICBnZXQgc2hvdWxkUmVmcmVzaCgpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGlmIChjeWNsZXIuaXNSZWZyZXNoaW5nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCh0b2tlbiA9PT0gbnVsbCB8fCB0b2tlbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdG9rZW4ucmVmcmVzaEFmdGVyVGltZXN0YW1wKSAmJiB0b2tlbi5yZWZyZXNoQWZ0ZXJUaW1lc3RhbXAgPCBEYXRlLm5vdygpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gKChfYSA9IHRva2VuID09PSBudWxsIHx8IHRva2VuID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0b2tlbi5leHBpcmVzT25UaW1lc3RhbXApICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IDApIC0gb3B0aW9ucy5yZWZyZXNoV2luZG93SW5NcyA8IERhdGUubm93KCk7XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQcm9kdWNlcyB0cnVlIGlmIHRoZSBjeWNsZXIgTVVTVCByZWZyZXNoIChudWxsIG9yIG5lYXJseS1leHBpcmVkXG4gICAgICAgICAqIHRva2VuKS5cbiAgICAgICAgICovXG4gICAgICAgIGdldCBtdXN0UmVmcmVzaCgpIHtcbiAgICAgICAgICAgIHJldHVybiAodG9rZW4gPT09IG51bGwgfHwgdG9rZW4uZXhwaXJlc09uVGltZXN0YW1wIC0gb3B0aW9ucy5mb3JjZWRSZWZyZXNoV2luZG93SW5NcyA8IERhdGUubm93KCkpO1xuICAgICAgICB9LFxuICAgIH07XG4gICAgLyoqXG4gICAgICogU3RhcnRzIGEgcmVmcmVzaCBqb2Igb3IgcmV0dXJucyB0aGUgZXhpc3Rpbmcgam9iIGlmIG9uZSBpcyBhbHJlYWR5XG4gICAgICogcnVubmluZy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiByZWZyZXNoKHNjb3BlcywgZ2V0VG9rZW5PcHRpb25zKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKCFjeWNsZXIuaXNSZWZyZXNoaW5nKSB7XG4gICAgICAgICAgICAvLyBXZSBiaW5kIGBzY29wZXNgIGhlcmUgdG8gYXZvaWQgcGFzc2luZyBpdCBhcm91bmQgYSBsb3RcbiAgICAgICAgICAgIGNvbnN0IHRyeUdldEFjY2Vzc1Rva2VuID0gKCkgPT4gY3JlZGVudGlhbC5nZXRUb2tlbihzY29wZXMsIGdldFRva2VuT3B0aW9ucyk7XG4gICAgICAgICAgICAvLyBUYWtlIGFkdmFudGFnZSBvZiBwcm9taXNlIGNoYWluaW5nIHRvIGluc2VydCBhbiBhc3NpZ25tZW50IHRvIGB0b2tlbmBcbiAgICAgICAgICAgIC8vIGJlZm9yZSB0aGUgcmVmcmVzaCBjYW4gYmUgY29uc2lkZXJlZCBkb25lLlxuICAgICAgICAgICAgcmVmcmVzaFdvcmtlciA9IGJlZ2luUmVmcmVzaCh0cnlHZXRBY2Nlc3NUb2tlbiwgb3B0aW9ucy5yZXRyeUludGVydmFsSW5NcywgXG4gICAgICAgICAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGEgdG9rZW4sIHRoZW4gd2Ugc2hvdWxkIHRpbWVvdXQgaW1tZWRpYXRlbHlcbiAgICAgICAgICAgIChfYSA9IHRva2VuID09PSBudWxsIHx8IHRva2VuID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0b2tlbi5leHBpcmVzT25UaW1lc3RhbXApICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IERhdGUubm93KCkpXG4gICAgICAgICAgICAgICAgLnRoZW4oKF90b2tlbikgPT4ge1xuICAgICAgICAgICAgICAgIHJlZnJlc2hXb3JrZXIgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRva2VuID0gX3Rva2VuO1xuICAgICAgICAgICAgICAgIHRlbmFudElkID0gZ2V0VG9rZW5PcHRpb25zLnRlbmFudElkO1xuICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKChyZWFzb24pID0+IHtcbiAgICAgICAgICAgICAgICAvLyBXZSBhbHNvIHNob3VsZCByZXNldCB0aGUgcmVmcmVzaGVyIGlmIHdlIGVudGVyIGEgZmFpbGVkIHN0YXRlLiAgQWxsXG4gICAgICAgICAgICAgICAgLy8gZXhpc3RpbmcgYXdhaXRlcnMgd2lsbCB0aHJvdywgYnV0IHN1YnNlcXVlbnQgcmVxdWVzdHMgd2lsbCBzdGFydCBhXG4gICAgICAgICAgICAgICAgLy8gbmV3IHJldHJ5IGNoYWluLlxuICAgICAgICAgICAgICAgIHJlZnJlc2hXb3JrZXIgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRva2VuID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0ZW5hbnRJZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB0aHJvdyByZWFzb247XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVmcmVzaFdvcmtlcjtcbiAgICB9XG4gICAgcmV0dXJuIGFzeW5jIChzY29wZXMsIHRva2VuT3B0aW9ucykgPT4ge1xuICAgICAgICAvL1xuICAgICAgICAvLyBTaW1wbGUgcnVsZXM6XG4gICAgICAgIC8vIC0gSWYgd2UgTVVTVCByZWZyZXNoLCB0aGVuIHJldHVybiB0aGUgcmVmcmVzaCB0YXNrLCBibG9ja2luZ1xuICAgICAgICAvLyAgIHRoZSBwaXBlbGluZSB1bnRpbCBhIHRva2VuIGlzIGF2YWlsYWJsZS5cbiAgICAgICAgLy8gLSBJZiB3ZSBTSE9VTEQgcmVmcmVzaCwgdGhlbiBydW4gcmVmcmVzaCBidXQgZG9uJ3QgcmV0dXJuIGl0XG4gICAgICAgIC8vICAgKHdlIGNhbiBzdGlsbCB1c2UgdGhlIGNhY2hlZCB0b2tlbikuXG4gICAgICAgIC8vIC0gUmV0dXJuIHRoZSB0b2tlbiwgc2luY2UgaXQncyBmaW5lIGlmIHdlIGRpZG4ndCByZXR1cm4gaW5cbiAgICAgICAgLy8gICBzdGVwIDEuXG4gICAgICAgIC8vXG4gICAgICAgIGNvbnN0IGhhc0NsYWltQ2hhbGxlbmdlID0gQm9vbGVhbih0b2tlbk9wdGlvbnMuY2xhaW1zKTtcbiAgICAgICAgY29uc3QgdGVuYW50SWRDaGFuZ2VkID0gdGVuYW50SWQgIT09IHRva2VuT3B0aW9ucy50ZW5hbnRJZDtcbiAgICAgICAgaWYgKGhhc0NsYWltQ2hhbGxlbmdlKSB7XG4gICAgICAgICAgICAvLyBJZiB3ZSd2ZSByZWNlaXZlZCBhIGNsYWltLCB3ZSBrbm93IHRoZSBleGlzdGluZyB0b2tlbiBpc24ndCB2YWxpZFxuICAgICAgICAgICAgLy8gV2Ugd2FudCB0byBjbGVhciBpdCBzbyB0aGF0IHRoYXQgcmVmcmVzaCB3b3JrZXIgd29uJ3QgdXNlIHRoZSBvbGQgZXhwaXJhdGlvbiB0aW1lIGFzIGEgdGltZW91dFxuICAgICAgICAgICAgdG9rZW4gPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIHRoZSB0ZW5hbnRJZCBwYXNzZWQgaW4gdG9rZW4gb3B0aW9ucyBpcyBkaWZmZXJlbnQgdG8gdGhlIG9uZSB3ZSBoYXZlXG4gICAgICAgIC8vIE9yIGlmIHdlIGFyZSBpbiBjbGFpbSBjaGFsbGVuZ2UgYW5kIHRoZSB0b2tlbiB3YXMgcmVqZWN0ZWQgYW5kIGEgbmV3IGFjY2VzcyB0b2tlbiBuZWVkIHRvIGJlIGlzc3VlZCwgd2UgbmVlZCB0b1xuICAgICAgICAvLyByZWZyZXNoIHRoZSB0b2tlbiB3aXRoIHRoZSBuZXcgdGVuYW50SWQgb3IgdG9rZW4uXG4gICAgICAgIGNvbnN0IG11c3RSZWZyZXNoID0gdGVuYW50SWRDaGFuZ2VkIHx8IGhhc0NsYWltQ2hhbGxlbmdlIHx8IGN5Y2xlci5tdXN0UmVmcmVzaDtcbiAgICAgICAgaWYgKG11c3RSZWZyZXNoKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVmcmVzaChzY29wZXMsIHRva2VuT3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN5Y2xlci5zaG91bGRSZWZyZXNoKSB7XG4gICAgICAgICAgICByZWZyZXNoKHNjb3BlcywgdG9rZW5PcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRva2VuQ3ljbGVyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYmVhcmVyVG9rZW5BdXRoZW50aWNhdGlvblBvbGljeU5hbWUgPSB2b2lkIDA7XG5leHBvcnRzLmJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3kgPSBiZWFyZXJUb2tlbkF1dGhlbnRpY2F0aW9uUG9saWN5O1xuY29uc3QgdG9rZW5DeWNsZXJfanNfMSA9IHJlcXVpcmUoXCIuLi91dGlsL3Rva2VuQ3ljbGVyLmpzXCIpO1xuY29uc3QgbG9nX2pzXzEgPSByZXF1aXJlKFwiLi4vbG9nLmpzXCIpO1xuLyoqXG4gKiBUaGUgcHJvZ3JhbW1hdGljIGlkZW50aWZpZXIgb2YgdGhlIGJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3kuXG4gKi9cbmV4cG9ydHMuYmVhcmVyVG9rZW5BdXRoZW50aWNhdGlvblBvbGljeU5hbWUgPSBcImJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3lcIjtcbi8qKlxuICogRGVmYXVsdCBhdXRob3JpemUgcmVxdWVzdCBoYW5kbGVyXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRlZmF1bHRBdXRob3JpemVSZXF1ZXN0KG9wdGlvbnMpIHtcbiAgICBjb25zdCB7IHNjb3BlcywgZ2V0QWNjZXNzVG9rZW4sIHJlcXVlc3QgfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgZ2V0VG9rZW5PcHRpb25zID0ge1xuICAgICAgICBhYm9ydFNpZ25hbDogcmVxdWVzdC5hYm9ydFNpZ25hbCxcbiAgICAgICAgdHJhY2luZ09wdGlvbnM6IHJlcXVlc3QudHJhY2luZ09wdGlvbnMsXG4gICAgfTtcbiAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IGF3YWl0IGdldEFjY2Vzc1Rva2VuKHNjb3BlcywgZ2V0VG9rZW5PcHRpb25zKTtcbiAgICBpZiAoYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgb3B0aW9ucy5yZXF1ZXN0LmhlYWRlcnMuc2V0KFwiQXV0aG9yaXphdGlvblwiLCBgQmVhcmVyICR7YWNjZXNzVG9rZW4udG9rZW59YCk7XG4gICAgfVxufVxuLyoqXG4gKiBXZSB3aWxsIHJldHJpZXZlIHRoZSBjaGFsbGVuZ2Ugb25seSBpZiB0aGUgcmVzcG9uc2Ugc3RhdHVzIGNvZGUgd2FzIDQwMSxcbiAqIGFuZCBpZiB0aGUgcmVzcG9uc2UgY29udGFpbmVkIHRoZSBoZWFkZXIgXCJXV1ctQXV0aGVudGljYXRlXCIgd2l0aCBhIG5vbi1lbXB0eSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZ2V0Q2hhbGxlbmdlKHJlc3BvbnNlKSB7XG4gICAgY29uc3QgY2hhbGxlbmdlID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoXCJXV1ctQXV0aGVudGljYXRlXCIpO1xuICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQwMSAmJiBjaGFsbGVuZ2UpIHtcbiAgICAgICAgcmV0dXJuIGNoYWxsZW5nZTtcbiAgICB9XG4gICAgcmV0dXJuO1xufVxuLyoqXG4gKiBBIHBvbGljeSB0aGF0IGNhbiByZXF1ZXN0IGEgdG9rZW4gZnJvbSBhIFRva2VuQ3JlZGVudGlhbCBpbXBsZW1lbnRhdGlvbiBhbmRcbiAqIHRoZW4gYXBwbHkgaXQgdG8gdGhlIEF1dGhvcml6YXRpb24gaGVhZGVyIG9mIGEgcmVxdWVzdCBhcyBhIEJlYXJlciB0b2tlbi5cbiAqL1xuZnVuY3Rpb24gYmVhcmVyVG9rZW5BdXRoZW50aWNhdGlvblBvbGljeShvcHRpb25zKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IHsgY3JlZGVudGlhbCwgc2NvcGVzLCBjaGFsbGVuZ2VDYWxsYmFja3MgfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgbG9nZ2VyID0gb3B0aW9ucy5sb2dnZXIgfHwgbG9nX2pzXzEubG9nZ2VyO1xuICAgIGNvbnN0IGNhbGxiYWNrcyA9IE9iamVjdC5hc3NpZ24oeyBhdXRob3JpemVSZXF1ZXN0OiAoX2EgPSBjaGFsbGVuZ2VDYWxsYmFja3MgPT09IG51bGwgfHwgY2hhbGxlbmdlQ2FsbGJhY2tzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjaGFsbGVuZ2VDYWxsYmFja3MuYXV0aG9yaXplUmVxdWVzdCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZGVmYXVsdEF1dGhvcml6ZVJlcXVlc3QsIGF1dGhvcml6ZVJlcXVlc3RPbkNoYWxsZW5nZTogY2hhbGxlbmdlQ2FsbGJhY2tzID09PSBudWxsIHx8IGNoYWxsZW5nZUNhbGxiYWNrcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY2hhbGxlbmdlQ2FsbGJhY2tzLmF1dGhvcml6ZVJlcXVlc3RPbkNoYWxsZW5nZSB9LCBjaGFsbGVuZ2VDYWxsYmFja3MpO1xuICAgIC8vIFRoaXMgZnVuY3Rpb24gZW5jYXBzdWxhdGVzIHRoZSBlbnRpcmUgcHJvY2VzcyBvZiByZWxpYWJseSByZXRyaWV2aW5nIHRoZSB0b2tlblxuICAgIC8vIFRoZSBvcHRpb25zIGFyZSBsZWZ0IG91dCBvZiB0aGUgcHVibGljIEFQSSB1bnRpbCB0aGVyZSdzIGRlbWFuZCB0byBjb25maWd1cmUgdGhpcy5cbiAgICAvLyBSZW1lbWJlciB0byBleHRlbmQgYEJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3lPcHRpb25zYCB3aXRoIGBUb2tlbkN5Y2xlck9wdGlvbnNgXG4gICAgLy8gaW4gb3JkZXIgdG8gcGFzcyB0aHJvdWdoIHRoZSBgb3B0aW9uc2Agb2JqZWN0LlxuICAgIGNvbnN0IGdldEFjY2Vzc1Rva2VuID0gY3JlZGVudGlhbFxuICAgICAgICA/ICgwLCB0b2tlbkN5Y2xlcl9qc18xLmNyZWF0ZVRva2VuQ3ljbGVyKShjcmVkZW50aWFsIC8qICwgb3B0aW9ucyAqLylcbiAgICAgICAgOiAoKSA9PiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogZXhwb3J0cy5iZWFyZXJUb2tlbkF1dGhlbnRpY2F0aW9uUG9saWN5TmFtZSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIElmIHRoZXJlJ3Mgbm8gY2hhbGxlbmdlIHBhcmFtZXRlcjpcbiAgICAgICAgICogLSBJdCB3aWxsIHRyeSB0byByZXRyaWV2ZSB0aGUgdG9rZW4gdXNpbmcgdGhlIGNhY2hlLCBvciB0aGUgY3JlZGVudGlhbCdzIGdldFRva2VuLlxuICAgICAgICAgKiAtIFRoZW4gaXQgd2lsbCB0cnkgdGhlIG5leHQgcG9saWN5IHdpdGggb3Igd2l0aG91dCB0aGUgcmV0cmlldmVkIHRva2VuLlxuICAgICAgICAgKlxuICAgICAgICAgKiBJdCB1c2VzIHRoZSBjaGFsbGVuZ2UgcGFyYW1ldGVycyB0bzpcbiAgICAgICAgICogLSBTa2lwIGEgZmlyc3QgYXR0ZW1wdCB0byBnZXQgdGhlIHRva2VuIGZyb20gdGhlIGNyZWRlbnRpYWwgaWYgdGhlcmUncyBubyBjYWNoZWQgdG9rZW4sXG4gICAgICAgICAqICAgc2luY2UgaXQgZXhwZWN0cyB0aGUgdG9rZW4gdG8gYmUgcmV0cmlldmFibGUgb25seSBhZnRlciB0aGUgY2hhbGxlbmdlLlxuICAgICAgICAgKiAtIFByZXBhcmUgdGhlIG91dGdvaW5nIHJlcXVlc3QgaWYgdGhlIGBwcmVwYXJlUmVxdWVzdGAgbWV0aG9kIGhhcyBiZWVuIHByb3ZpZGVkLlxuICAgICAgICAgKiAtIFNlbmQgYW4gaW5pdGlhbCByZXF1ZXN0IHRvIHJlY2VpdmUgdGhlIGNoYWxsZW5nZSBpZiBpdCBmYWlscy5cbiAgICAgICAgICogLSBQcm9jZXNzIGEgY2hhbGxlbmdlIGlmIHRoZSByZXNwb25zZSBjb250YWlucyBpdC5cbiAgICAgICAgICogLSBSZXRyaWV2ZSBhIHRva2VuIHdpdGggdGhlIGNoYWxsZW5nZSBpbmZvcm1hdGlvbiwgdGhlbiByZS1zZW5kIHRoZSByZXF1ZXN0LlxuICAgICAgICAgKi9cbiAgICAgICAgYXN5bmMgc2VuZFJlcXVlc3QocmVxdWVzdCwgbmV4dCkge1xuICAgICAgICAgICAgaWYgKCFyZXF1ZXN0LnVybC50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoXCJodHRwczovL1wiKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJlYXJlciB0b2tlbiBhdXRoZW50aWNhdGlvbiBpcyBub3QgcGVybWl0dGVkIGZvciBub24tVExTIHByb3RlY3RlZCAobm9uLWh0dHBzKSBVUkxzLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IGNhbGxiYWNrcy5hdXRob3JpemVSZXF1ZXN0KHtcbiAgICAgICAgICAgICAgICBzY29wZXM6IEFycmF5LmlzQXJyYXkoc2NvcGVzKSA/IHNjb3BlcyA6IFtzY29wZXNdLFxuICAgICAgICAgICAgICAgIHJlcXVlc3QsXG4gICAgICAgICAgICAgICAgZ2V0QWNjZXNzVG9rZW4sXG4gICAgICAgICAgICAgICAgbG9nZ2VyLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBsZXQgcmVzcG9uc2U7XG4gICAgICAgICAgICBsZXQgZXJyb3I7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gYXdhaXQgbmV4dChyZXF1ZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICBlcnJvciA9IGVycjtcbiAgICAgICAgICAgICAgICByZXNwb25zZSA9IGVyci5yZXNwb25zZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjYWxsYmFja3MuYXV0aG9yaXplUmVxdWVzdE9uQ2hhbGxlbmdlICYmXG4gICAgICAgICAgICAgICAgKHJlc3BvbnNlID09PSBudWxsIHx8IHJlc3BvbnNlID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZXNwb25zZS5zdGF0dXMpID09PSA0MDEgJiZcbiAgICAgICAgICAgICAgICBnZXRDaGFsbGVuZ2UocmVzcG9uc2UpKSB7XG4gICAgICAgICAgICAgICAgLy8gcHJvY2Vzc2VzIGNoYWxsZW5nZVxuICAgICAgICAgICAgICAgIGNvbnN0IHNob3VsZFNlbmRSZXF1ZXN0ID0gYXdhaXQgY2FsbGJhY2tzLmF1dGhvcml6ZVJlcXVlc3RPbkNoYWxsZW5nZSh7XG4gICAgICAgICAgICAgICAgICAgIHNjb3BlczogQXJyYXkuaXNBcnJheShzY29wZXMpID8gc2NvcGVzIDogW3Njb3Blc10sXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3QsXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLFxuICAgICAgICAgICAgICAgICAgICBnZXRBY2Nlc3NUb2tlbixcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChzaG91bGRTZW5kUmVxdWVzdCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV4dChyZXF1ZXN0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YmVhcmVyVG9rZW5BdXRoZW50aWNhdGlvblBvbGljeS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLm5kSnNvblBvbGljeU5hbWUgPSB2b2lkIDA7XG5leHBvcnRzLm5kSnNvblBvbGljeSA9IG5kSnNvblBvbGljeTtcbi8qKlxuICogVGhlIHByb2dyYW1tYXRpYyBpZGVudGlmaWVyIG9mIHRoZSBuZEpzb25Qb2xpY3kuXG4gKi9cbmV4cG9ydHMubmRKc29uUG9saWN5TmFtZSA9IFwibmRKc29uUG9saWN5XCI7XG4vKipcbiAqIG5kSnNvblBvbGljeSBpcyBhIHBvbGljeSB1c2VkIHRvIGNvbnRyb2wga2VlcCBhbGl2ZSBzZXR0aW5ncyBmb3IgZXZlcnkgcmVxdWVzdC5cbiAqL1xuZnVuY3Rpb24gbmRKc29uUG9saWN5KCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGV4cG9ydHMubmRKc29uUG9saWN5TmFtZSxcbiAgICAgICAgYXN5bmMgc2VuZFJlcXVlc3QocmVxdWVzdCwgbmV4dCkge1xuICAgICAgICAgICAgLy8gVGhlcmUgY3VycmVudGx5IGlzbid0IGEgZ29vZCB3YXkgdG8gYnlwYXNzIHRoZSBzZXJpYWxpemVyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHJlcXVlc3QuYm9keSA9PT0gXCJzdHJpbmdcIiAmJiByZXF1ZXN0LmJvZHkuc3RhcnRzV2l0aChcIltcIikpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5wYXJzZShyZXF1ZXN0LmJvZHkpO1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGJvZHkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuYm9keSA9IGJvZHkubWFwKChpdGVtKSA9PiBKU09OLnN0cmluZ2lmeShpdGVtKSArIFwiXFxuXCIpLmpvaW4oXCJcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5leHQocmVxdWVzdCk7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW5kSnNvblBvbGljeS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmF1eGlsaWFyeUF1dGhlbnRpY2F0aW9uSGVhZGVyUG9saWN5TmFtZSA9IHZvaWQgMDtcbmV4cG9ydHMuYXV4aWxpYXJ5QXV0aGVudGljYXRpb25IZWFkZXJQb2xpY3kgPSBhdXhpbGlhcnlBdXRoZW50aWNhdGlvbkhlYWRlclBvbGljeTtcbmNvbnN0IHRva2VuQ3ljbGVyX2pzXzEgPSByZXF1aXJlKFwiLi4vdXRpbC90b2tlbkN5Y2xlci5qc1wiKTtcbmNvbnN0IGxvZ19qc18xID0gcmVxdWlyZShcIi4uL2xvZy5qc1wiKTtcbi8qKlxuICogVGhlIHByb2dyYW1tYXRpYyBpZGVudGlmaWVyIG9mIHRoZSBhdXhpbGlhcnlBdXRoZW50aWNhdGlvbkhlYWRlclBvbGljeS5cbiAqL1xuZXhwb3J0cy5hdXhpbGlhcnlBdXRoZW50aWNhdGlvbkhlYWRlclBvbGljeU5hbWUgPSBcImF1eGlsaWFyeUF1dGhlbnRpY2F0aW9uSGVhZGVyUG9saWN5XCI7XG5jb25zdCBBVVRIT1JJWkFUSU9OX0FVWElMSUFSWV9IRUFERVIgPSBcIngtbXMtYXV0aG9yaXphdGlvbi1hdXhpbGlhcnlcIjtcbmFzeW5jIGZ1bmN0aW9uIHNlbmRBdXRob3JpemVSZXF1ZXN0KG9wdGlvbnMpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGNvbnN0IHsgc2NvcGVzLCBnZXRBY2Nlc3NUb2tlbiwgcmVxdWVzdCB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBnZXRUb2tlbk9wdGlvbnMgPSB7XG4gICAgICAgIGFib3J0U2lnbmFsOiByZXF1ZXN0LmFib3J0U2lnbmFsLFxuICAgICAgICB0cmFjaW5nT3B0aW9uczogcmVxdWVzdC50cmFjaW5nT3B0aW9ucyxcbiAgICB9O1xuICAgIHJldHVybiAoX2IgPSAoX2EgPSAoYXdhaXQgZ2V0QWNjZXNzVG9rZW4oc2NvcGVzLCBnZXRUb2tlbk9wdGlvbnMpKSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRva2VuKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBcIlwiO1xufVxuLyoqXG4gKiBBIHBvbGljeSBmb3IgZXh0ZXJuYWwgdG9rZW5zIHRvIGB4LW1zLWF1dGhvcml6YXRpb24tYXV4aWxpYXJ5YCBoZWFkZXIuXG4gKiBUaGlzIGhlYWRlciB3aWxsIGJlIHVzZWQgd2hlbiBjcmVhdGluZyBhIGNyb3NzLXRlbmFudCBhcHBsaWNhdGlvbiB3ZSBtYXkgbmVlZCB0byBoYW5kbGUgYXV0aGVudGljYXRpb24gcmVxdWVzdHNcbiAqIGZvciByZXNvdXJjZXMgdGhhdCBhcmUgaW4gZGlmZmVyZW50IHRlbmFudHMuXG4gKiBZb3UgY291bGQgc2VlIFtBUk0gZG9jc10oaHR0cHM6Ly9sZWFybi5taWNyb3NvZnQuY29tL2VuLXVzL2F6dXJlL2F6dXJlLXJlc291cmNlLW1hbmFnZXIvbWFuYWdlbWVudC9hdXRoZW50aWNhdGUtbXVsdGktdGVuYW50KSBmb3IgYSBydW5kb3duIG9mIGhvdyB0aGlzIGZlYXR1cmUgd29ya3NcbiAqL1xuZnVuY3Rpb24gYXV4aWxpYXJ5QXV0aGVudGljYXRpb25IZWFkZXJQb2xpY3kob3B0aW9ucykge1xuICAgIGNvbnN0IHsgY3JlZGVudGlhbHMsIHNjb3BlcyB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBsb2dnZXIgPSBvcHRpb25zLmxvZ2dlciB8fCBsb2dfanNfMS5sb2dnZXI7XG4gICAgY29uc3QgdG9rZW5DeWNsZXJNYXAgPSBuZXcgV2Vha01hcCgpO1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGV4cG9ydHMuYXV4aWxpYXJ5QXV0aGVudGljYXRpb25IZWFkZXJQb2xpY3lOYW1lLFxuICAgICAgICBhc3luYyBzZW5kUmVxdWVzdChyZXF1ZXN0LCBuZXh0KSB7XG4gICAgICAgICAgICBpZiAoIXJlcXVlc3QudXJsLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChcImh0dHBzOi8vXCIpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmVhcmVyIHRva2VuIGF1dGhlbnRpY2F0aW9uIGZvciBhdXhpbGlhcnkgaGVhZGVyIGlzIG5vdCBwZXJtaXR0ZWQgZm9yIG5vbi1UTFMgcHJvdGVjdGVkIChub24taHR0cHMpIFVSTHMuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFjcmVkZW50aWFscyB8fCBjcmVkZW50aWFscy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhgJHtleHBvcnRzLmF1eGlsaWFyeUF1dGhlbnRpY2F0aW9uSGVhZGVyUG9saWN5TmFtZX0gaGVhZGVyIHdpbGwgbm90IGJlIHNldCBkdWUgdG8gZW1wdHkgY3JlZGVudGlhbHMuYCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5leHQocmVxdWVzdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB0b2tlblByb21pc2VzID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNyZWRlbnRpYWwgb2YgY3JlZGVudGlhbHMpIHtcbiAgICAgICAgICAgICAgICBsZXQgZ2V0QWNjZXNzVG9rZW4gPSB0b2tlbkN5Y2xlck1hcC5nZXQoY3JlZGVudGlhbCk7XG4gICAgICAgICAgICAgICAgaWYgKCFnZXRBY2Nlc3NUb2tlbikge1xuICAgICAgICAgICAgICAgICAgICBnZXRBY2Nlc3NUb2tlbiA9ICgwLCB0b2tlbkN5Y2xlcl9qc18xLmNyZWF0ZVRva2VuQ3ljbGVyKShjcmVkZW50aWFsKTtcbiAgICAgICAgICAgICAgICAgICAgdG9rZW5DeWNsZXJNYXAuc2V0KGNyZWRlbnRpYWwsIGdldEFjY2Vzc1Rva2VuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdG9rZW5Qcm9taXNlcy5wdXNoKHNlbmRBdXRob3JpemVSZXF1ZXN0KHtcbiAgICAgICAgICAgICAgICAgICAgc2NvcGVzOiBBcnJheS5pc0FycmF5KHNjb3BlcykgPyBzY29wZXMgOiBbc2NvcGVzXSxcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgICAgICAgICAgICAgZ2V0QWNjZXNzVG9rZW4sXG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlcixcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBhdXhpbGlhcnlUb2tlbnMgPSAoYXdhaXQgUHJvbWlzZS5hbGwodG9rZW5Qcm9taXNlcykpLmZpbHRlcigodG9rZW4pID0+IEJvb2xlYW4odG9rZW4pKTtcbiAgICAgICAgICAgIGlmIChhdXhpbGlhcnlUb2tlbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoYE5vbmUgb2YgdGhlIGF1eGlsaWFyeSB0b2tlbnMgYXJlIHZhbGlkLiAke0FVVEhPUklaQVRJT05fQVVYSUxJQVJZX0hFQURFUn0gaGVhZGVyIHdpbGwgbm90IGJlIHNldC5gKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dChyZXF1ZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlcXVlc3QuaGVhZGVycy5zZXQoQVVUSE9SSVpBVElPTl9BVVhJTElBUllfSEVBREVSLCBhdXhpbGlhcnlUb2tlbnMubWFwKCh0b2tlbikgPT4gYEJlYXJlciAke3Rva2VufWApLmpvaW4oXCIsIFwiKSk7XG4gICAgICAgICAgICByZXR1cm4gbmV4dChyZXF1ZXN0KTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXV4aWxpYXJ5QXV0aGVudGljYXRpb25IZWFkZXJQb2xpY3kuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jcmVhdGVGaWxlRnJvbVN0cmVhbSA9IGV4cG9ydHMuY3JlYXRlRmlsZSA9IGV4cG9ydHMuYXV4aWxpYXJ5QXV0aGVudGljYXRpb25IZWFkZXJQb2xpY3lOYW1lID0gZXhwb3J0cy5hdXhpbGlhcnlBdXRoZW50aWNhdGlvbkhlYWRlclBvbGljeSA9IGV4cG9ydHMubmRKc29uUG9saWN5TmFtZSA9IGV4cG9ydHMubmRKc29uUG9saWN5ID0gZXhwb3J0cy5iZWFyZXJUb2tlbkF1dGhlbnRpY2F0aW9uUG9saWN5TmFtZSA9IGV4cG9ydHMuYmVhcmVyVG9rZW5BdXRoZW50aWNhdGlvblBvbGljeSA9IGV4cG9ydHMuZm9ybURhdGFQb2xpY3lOYW1lID0gZXhwb3J0cy5mb3JtRGF0YVBvbGljeSA9IGV4cG9ydHMudGxzUG9saWN5TmFtZSA9IGV4cG9ydHMudGxzUG9saWN5ID0gZXhwb3J0cy51c2VyQWdlbnRQb2xpY3lOYW1lID0gZXhwb3J0cy51c2VyQWdlbnRQb2xpY3kgPSBleHBvcnRzLmRlZmF1bHRSZXRyeVBvbGljeSA9IGV4cG9ydHMudHJhY2luZ1BvbGljeU5hbWUgPSBleHBvcnRzLnRyYWNpbmdQb2xpY3kgPSBleHBvcnRzLnJldHJ5UG9saWN5ID0gZXhwb3J0cy50aHJvdHRsaW5nUmV0cnlQb2xpY3lOYW1lID0gZXhwb3J0cy50aHJvdHRsaW5nUmV0cnlQb2xpY3kgPSBleHBvcnRzLnN5c3RlbUVycm9yUmV0cnlQb2xpY3lOYW1lID0gZXhwb3J0cy5zeXN0ZW1FcnJvclJldHJ5UG9saWN5ID0gZXhwb3J0cy5yZWRpcmVjdFBvbGljeU5hbWUgPSBleHBvcnRzLnJlZGlyZWN0UG9saWN5ID0gZXhwb3J0cy5nZXREZWZhdWx0UHJveHlTZXR0aW5ncyA9IGV4cG9ydHMucHJveHlQb2xpY3lOYW1lID0gZXhwb3J0cy5wcm94eVBvbGljeSA9IGV4cG9ydHMubXVsdGlwYXJ0UG9saWN5TmFtZSA9IGV4cG9ydHMubXVsdGlwYXJ0UG9saWN5ID0gZXhwb3J0cy5sb2dQb2xpY3lOYW1lID0gZXhwb3J0cy5sb2dQb2xpY3kgPSBleHBvcnRzLnNldENsaWVudFJlcXVlc3RJZFBvbGljeU5hbWUgPSBleHBvcnRzLnNldENsaWVudFJlcXVlc3RJZFBvbGljeSA9IGV4cG9ydHMuZXhwb25lbnRpYWxSZXRyeVBvbGljeU5hbWUgPSBleHBvcnRzLmV4cG9uZW50aWFsUmV0cnlQb2xpY3kgPSBleHBvcnRzLmRlY29tcHJlc3NSZXNwb25zZVBvbGljeU5hbWUgPSBleHBvcnRzLmRlY29tcHJlc3NSZXNwb25zZVBvbGljeSA9IGV4cG9ydHMuaXNSZXN0RXJyb3IgPSBleHBvcnRzLlJlc3RFcnJvciA9IGV4cG9ydHMuY3JlYXRlUGlwZWxpbmVSZXF1ZXN0ID0gZXhwb3J0cy5jcmVhdGVIdHRwSGVhZGVycyA9IGV4cG9ydHMuY3JlYXRlRGVmYXVsdEh0dHBDbGllbnQgPSBleHBvcnRzLmNyZWF0ZVBpcGVsaW5lRnJvbU9wdGlvbnMgPSBleHBvcnRzLmNyZWF0ZUVtcHR5UGlwZWxpbmUgPSB2b2lkIDA7XG52YXIgcGlwZWxpbmVfanNfMSA9IHJlcXVpcmUoXCIuL3BpcGVsaW5lLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRW1wdHlQaXBlbGluZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcGlwZWxpbmVfanNfMS5jcmVhdGVFbXB0eVBpcGVsaW5lOyB9IH0pO1xudmFyIGNyZWF0ZVBpcGVsaW5lRnJvbU9wdGlvbnNfanNfMSA9IHJlcXVpcmUoXCIuL2NyZWF0ZVBpcGVsaW5lRnJvbU9wdGlvbnMuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVQaXBlbGluZUZyb21PcHRpb25zXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjcmVhdGVQaXBlbGluZUZyb21PcHRpb25zX2pzXzEuY3JlYXRlUGlwZWxpbmVGcm9tT3B0aW9uczsgfSB9KTtcbnZhciBkZWZhdWx0SHR0cENsaWVudF9qc18xID0gcmVxdWlyZShcIi4vZGVmYXVsdEh0dHBDbGllbnQuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVEZWZhdWx0SHR0cENsaWVudFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZGVmYXVsdEh0dHBDbGllbnRfanNfMS5jcmVhdGVEZWZhdWx0SHR0cENsaWVudDsgfSB9KTtcbnZhciBodHRwSGVhZGVyc19qc18xID0gcmVxdWlyZShcIi4vaHR0cEhlYWRlcnMuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVIdHRwSGVhZGVyc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gaHR0cEhlYWRlcnNfanNfMS5jcmVhdGVIdHRwSGVhZGVyczsgfSB9KTtcbnZhciBwaXBlbGluZVJlcXVlc3RfanNfMSA9IHJlcXVpcmUoXCIuL3BpcGVsaW5lUmVxdWVzdC5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVBpcGVsaW5lUmVxdWVzdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcGlwZWxpbmVSZXF1ZXN0X2pzXzEuY3JlYXRlUGlwZWxpbmVSZXF1ZXN0OyB9IH0pO1xudmFyIHJlc3RFcnJvcl9qc18xID0gcmVxdWlyZShcIi4vcmVzdEVycm9yLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUmVzdEVycm9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZXN0RXJyb3JfanNfMS5SZXN0RXJyb3I7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc1Jlc3RFcnJvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVzdEVycm9yX2pzXzEuaXNSZXN0RXJyb3I7IH0gfSk7XG52YXIgZGVjb21wcmVzc1Jlc3BvbnNlUG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9wb2xpY2llcy9kZWNvbXByZXNzUmVzcG9uc2VQb2xpY3kuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZWNvbXByZXNzUmVzcG9uc2VQb2xpY3lcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRlY29tcHJlc3NSZXNwb25zZVBvbGljeV9qc18xLmRlY29tcHJlc3NSZXNwb25zZVBvbGljeTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlY29tcHJlc3NSZXNwb25zZVBvbGljeU5hbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRlY29tcHJlc3NSZXNwb25zZVBvbGljeV9qc18xLmRlY29tcHJlc3NSZXNwb25zZVBvbGljeU5hbWU7IH0gfSk7XG52YXIgZXhwb25lbnRpYWxSZXRyeVBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvZXhwb25lbnRpYWxSZXRyeVBvbGljeS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImV4cG9uZW50aWFsUmV0cnlQb2xpY3lcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGV4cG9uZW50aWFsUmV0cnlQb2xpY3lfanNfMS5leHBvbmVudGlhbFJldHJ5UG9saWN5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZXhwb25lbnRpYWxSZXRyeVBvbGljeU5hbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGV4cG9uZW50aWFsUmV0cnlQb2xpY3lfanNfMS5leHBvbmVudGlhbFJldHJ5UG9saWN5TmFtZTsgfSB9KTtcbnZhciBzZXRDbGllbnRSZXF1ZXN0SWRQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL3NldENsaWVudFJlcXVlc3RJZFBvbGljeS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNldENsaWVudFJlcXVlc3RJZFBvbGljeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2V0Q2xpZW50UmVxdWVzdElkUG9saWN5X2pzXzEuc2V0Q2xpZW50UmVxdWVzdElkUG9saWN5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2V0Q2xpZW50UmVxdWVzdElkUG9saWN5TmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2V0Q2xpZW50UmVxdWVzdElkUG9saWN5X2pzXzEuc2V0Q2xpZW50UmVxdWVzdElkUG9saWN5TmFtZTsgfSB9KTtcbnZhciBsb2dQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL2xvZ1BvbGljeS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImxvZ1BvbGljeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbG9nUG9saWN5X2pzXzEubG9nUG9saWN5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibG9nUG9saWN5TmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbG9nUG9saWN5X2pzXzEubG9nUG9saWN5TmFtZTsgfSB9KTtcbnZhciBtdWx0aXBhcnRQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL211bHRpcGFydFBvbGljeS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm11bHRpcGFydFBvbGljeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbXVsdGlwYXJ0UG9saWN5X2pzXzEubXVsdGlwYXJ0UG9saWN5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibXVsdGlwYXJ0UG9saWN5TmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbXVsdGlwYXJ0UG9saWN5X2pzXzEubXVsdGlwYXJ0UG9saWN5TmFtZTsgfSB9KTtcbnZhciBwcm94eVBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvcHJveHlQb2xpY3kuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwcm94eVBvbGljeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcHJveHlQb2xpY3lfanNfMS5wcm94eVBvbGljeTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInByb3h5UG9saWN5TmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcHJveHlQb2xpY3lfanNfMS5wcm94eVBvbGljeU5hbWU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnZXREZWZhdWx0UHJveHlTZXR0aW5nc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcHJveHlQb2xpY3lfanNfMS5nZXREZWZhdWx0UHJveHlTZXR0aW5nczsgfSB9KTtcbnZhciByZWRpcmVjdFBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvcmVkaXJlY3RQb2xpY3kuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyZWRpcmVjdFBvbGljeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVkaXJlY3RQb2xpY3lfanNfMS5yZWRpcmVjdFBvbGljeTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlZGlyZWN0UG9saWN5TmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVkaXJlY3RQb2xpY3lfanNfMS5yZWRpcmVjdFBvbGljeU5hbWU7IH0gfSk7XG52YXIgc3lzdGVtRXJyb3JSZXRyeVBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvc3lzdGVtRXJyb3JSZXRyeVBvbGljeS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN5c3RlbUVycm9yUmV0cnlQb2xpY3lcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN5c3RlbUVycm9yUmV0cnlQb2xpY3lfanNfMS5zeXN0ZW1FcnJvclJldHJ5UG9saWN5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3lzdGVtRXJyb3JSZXRyeVBvbGljeU5hbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN5c3RlbUVycm9yUmV0cnlQb2xpY3lfanNfMS5zeXN0ZW1FcnJvclJldHJ5UG9saWN5TmFtZTsgfSB9KTtcbnZhciB0aHJvdHRsaW5nUmV0cnlQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL3Rocm90dGxpbmdSZXRyeVBvbGljeS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRocm90dGxpbmdSZXRyeVBvbGljeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhyb3R0bGluZ1JldHJ5UG9saWN5X2pzXzEudGhyb3R0bGluZ1JldHJ5UG9saWN5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidGhyb3R0bGluZ1JldHJ5UG9saWN5TmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhyb3R0bGluZ1JldHJ5UG9saWN5X2pzXzEudGhyb3R0bGluZ1JldHJ5UG9saWN5TmFtZTsgfSB9KTtcbnZhciByZXRyeVBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvcmV0cnlQb2xpY3kuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyZXRyeVBvbGljeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmV0cnlQb2xpY3lfanNfMS5yZXRyeVBvbGljeTsgfSB9KTtcbnZhciB0cmFjaW5nUG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9wb2xpY2llcy90cmFjaW5nUG9saWN5LmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidHJhY2luZ1BvbGljeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHJhY2luZ1BvbGljeV9qc18xLnRyYWNpbmdQb2xpY3k7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0cmFjaW5nUG9saWN5TmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHJhY2luZ1BvbGljeV9qc18xLnRyYWNpbmdQb2xpY3lOYW1lOyB9IH0pO1xudmFyIGRlZmF1bHRSZXRyeVBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvZGVmYXVsdFJldHJ5UG9saWN5LmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVmYXVsdFJldHJ5UG9saWN5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkZWZhdWx0UmV0cnlQb2xpY3lfanNfMS5kZWZhdWx0UmV0cnlQb2xpY3k7IH0gfSk7XG52YXIgdXNlckFnZW50UG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9wb2xpY2llcy91c2VyQWdlbnRQb2xpY3kuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ1c2VyQWdlbnRQb2xpY3lcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHVzZXJBZ2VudFBvbGljeV9qc18xLnVzZXJBZ2VudFBvbGljeTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInVzZXJBZ2VudFBvbGljeU5hbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHVzZXJBZ2VudFBvbGljeV9qc18xLnVzZXJBZ2VudFBvbGljeU5hbWU7IH0gfSk7XG52YXIgdGxzUG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9wb2xpY2llcy90bHNQb2xpY3kuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0bHNQb2xpY3lcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRsc1BvbGljeV9qc18xLnRsc1BvbGljeTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRsc1BvbGljeU5hbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRsc1BvbGljeV9qc18xLnRsc1BvbGljeU5hbWU7IH0gfSk7XG52YXIgZm9ybURhdGFQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL2Zvcm1EYXRhUG9saWN5LmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZm9ybURhdGFQb2xpY3lcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZvcm1EYXRhUG9saWN5X2pzXzEuZm9ybURhdGFQb2xpY3k7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJmb3JtRGF0YVBvbGljeU5hbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZvcm1EYXRhUG9saWN5X2pzXzEuZm9ybURhdGFQb2xpY3lOYW1lOyB9IH0pO1xudmFyIGJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL2JlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3kuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJiZWFyZXJUb2tlbkF1dGhlbnRpY2F0aW9uUG9saWN5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBiZWFyZXJUb2tlbkF1dGhlbnRpY2F0aW9uUG9saWN5X2pzXzEuYmVhcmVyVG9rZW5BdXRoZW50aWNhdGlvblBvbGljeTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3lOYW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBiZWFyZXJUb2tlbkF1dGhlbnRpY2F0aW9uUG9saWN5X2pzXzEuYmVhcmVyVG9rZW5BdXRoZW50aWNhdGlvblBvbGljeU5hbWU7IH0gfSk7XG52YXIgbmRKc29uUG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9wb2xpY2llcy9uZEpzb25Qb2xpY3kuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJuZEpzb25Qb2xpY3lcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5kSnNvblBvbGljeV9qc18xLm5kSnNvblBvbGljeTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm5kSnNvblBvbGljeU5hbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5kSnNvblBvbGljeV9qc18xLm5kSnNvblBvbGljeU5hbWU7IH0gfSk7XG52YXIgYXV4aWxpYXJ5QXV0aGVudGljYXRpb25IZWFkZXJQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL2F1eGlsaWFyeUF1dGhlbnRpY2F0aW9uSGVhZGVyUG9saWN5LmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYXV4aWxpYXJ5QXV0aGVudGljYXRpb25IZWFkZXJQb2xpY3lcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGF1eGlsaWFyeUF1dGhlbnRpY2F0aW9uSGVhZGVyUG9saWN5X2pzXzEuYXV4aWxpYXJ5QXV0aGVudGljYXRpb25IZWFkZXJQb2xpY3k7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhdXhpbGlhcnlBdXRoZW50aWNhdGlvbkhlYWRlclBvbGljeU5hbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGF1eGlsaWFyeUF1dGhlbnRpY2F0aW9uSGVhZGVyUG9saWN5X2pzXzEuYXV4aWxpYXJ5QXV0aGVudGljYXRpb25IZWFkZXJQb2xpY3lOYW1lOyB9IH0pO1xudmFyIGZpbGVfanNfMSA9IHJlcXVpcmUoXCIuL3V0aWwvZmlsZS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUZpbGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZpbGVfanNfMS5jcmVhdGVGaWxlOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRmlsZUZyb21TdHJlYW1cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZpbGVfanNfMS5jcmVhdGVGaWxlRnJvbVN0cmVhbTsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQXp1cmVLZXlDcmVkZW50aWFsID0gdm9pZCAwO1xuLyoqXG4gKiBBIHN0YXRpYy1rZXktYmFzZWQgY3JlZGVudGlhbCB0aGF0IHN1cHBvcnRzIHVwZGF0aW5nXG4gKiB0aGUgdW5kZXJseWluZyBrZXkgdmFsdWUuXG4gKi9cbmNsYXNzIEF6dXJlS2V5Q3JlZGVudGlhbCB7XG4gICAgLyoqXG4gICAgICogVGhlIHZhbHVlIG9mIHRoZSBrZXkgdG8gYmUgdXNlZCBpbiBhdXRoZW50aWNhdGlvblxuICAgICAqL1xuICAgIGdldCBrZXkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9rZXk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBhbiBBenVyZUtleUNyZWRlbnRpYWwgZm9yIHVzZVxuICAgICAqIHdpdGggYSBzZXJ2aWNlIGNsaWVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBrZXkgLSBUaGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUga2V5IHRvIHVzZSBpbiBhdXRoZW50aWNhdGlvblxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGtleSkge1xuICAgICAgICBpZiAoIWtleSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwia2V5IG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2tleSA9IGtleTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2hhbmdlIHRoZSB2YWx1ZSBvZiB0aGUga2V5LlxuICAgICAqXG4gICAgICogVXBkYXRlcyB3aWxsIHRha2UgZWZmZWN0IHVwb24gdGhlIG5leHQgcmVxdWVzdCBhZnRlclxuICAgICAqIHVwZGF0aW5nIHRoZSBrZXkgdmFsdWUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmV3S2V5IC0gVGhlIG5ldyBrZXkgdmFsdWUgdG8gYmUgdXNlZFxuICAgICAqL1xuICAgIHVwZGF0ZShuZXdLZXkpIHtcbiAgICAgICAgdGhpcy5fa2V5ID0gbmV3S2V5O1xuICAgIH1cbn1cbmV4cG9ydHMuQXp1cmVLZXlDcmVkZW50aWFsID0gQXp1cmVLZXlDcmVkZW50aWFsO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXp1cmVLZXlDcmVkZW50aWFsLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNLZXlDcmVkZW50aWFsID0gaXNLZXlDcmVkZW50aWFsO1xuY29uc3QgY29yZV91dGlsXzEgPSByZXF1aXJlKFwiQGF6dXJlL2NvcmUtdXRpbFwiKTtcbi8qKlxuICogVGVzdHMgYW4gb2JqZWN0IHRvIGRldGVybWluZSB3aGV0aGVyIGl0IGltcGxlbWVudHMgS2V5Q3JlZGVudGlhbC5cbiAqXG4gKiBAcGFyYW0gY3JlZGVudGlhbCAtIFRoZSBhc3N1bWVkIEtleUNyZWRlbnRpYWwgdG8gYmUgdGVzdGVkLlxuICovXG5mdW5jdGlvbiBpc0tleUNyZWRlbnRpYWwoY3JlZGVudGlhbCkge1xuICAgIHJldHVybiAoMCwgY29yZV91dGlsXzEuaXNPYmplY3RXaXRoUHJvcGVydGllcykoY3JlZGVudGlhbCwgW1wia2V5XCJdKSAmJiB0eXBlb2YgY3JlZGVudGlhbC5rZXkgPT09IFwic3RyaW5nXCI7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1rZXlDcmVkZW50aWFsLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQXp1cmVOYW1lZEtleUNyZWRlbnRpYWwgPSB2b2lkIDA7XG5leHBvcnRzLmlzTmFtZWRLZXlDcmVkZW50aWFsID0gaXNOYW1lZEtleUNyZWRlbnRpYWw7XG5jb25zdCBjb3JlX3V0aWxfMSA9IHJlcXVpcmUoXCJAYXp1cmUvY29yZS11dGlsXCIpO1xuLyoqXG4gKiBBIHN0YXRpYyBuYW1lL2tleS1iYXNlZCBjcmVkZW50aWFsIHRoYXQgc3VwcG9ydHMgdXBkYXRpbmdcbiAqIHRoZSB1bmRlcmx5aW5nIG5hbWUgYW5kIGtleSB2YWx1ZXMuXG4gKi9cbmNsYXNzIEF6dXJlTmFtZWRLZXlDcmVkZW50aWFsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdmFsdWUgb2YgdGhlIGtleSB0byBiZSB1c2VkIGluIGF1dGhlbnRpY2F0aW9uLlxuICAgICAqL1xuICAgIGdldCBrZXkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9rZXk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSB2YWx1ZSBvZiB0aGUgbmFtZSB0byBiZSB1c2VkIGluIGF1dGhlbnRpY2F0aW9uLlxuICAgICAqL1xuICAgIGdldCBuYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbmFtZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIGFuIEF6dXJlTmFtZWRLZXlDcmVkZW50aWFsIGZvciB1c2VcbiAgICAgKiB3aXRoIGEgc2VydmljZSBjbGllbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmFtZSAtIFRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSBuYW1lIHRvIHVzZSBpbiBhdXRoZW50aWNhdGlvbi5cbiAgICAgKiBAcGFyYW0ga2V5IC0gVGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIGtleSB0byB1c2UgaW4gYXV0aGVudGljYXRpb24uXG4gICAgICovXG4gICAgY29uc3RydWN0b3IobmFtZSwga2V5KSB7XG4gICAgICAgIGlmICghbmFtZSB8fCAha2V5KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwibmFtZSBhbmQga2V5IG11c3QgYmUgbm9uLWVtcHR5IHN0cmluZ3NcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMuX2tleSA9IGtleTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2hhbmdlIHRoZSB2YWx1ZSBvZiB0aGUga2V5LlxuICAgICAqXG4gICAgICogVXBkYXRlcyB3aWxsIHRha2UgZWZmZWN0IHVwb24gdGhlIG5leHQgcmVxdWVzdCBhZnRlclxuICAgICAqIHVwZGF0aW5nIHRoZSBrZXkgdmFsdWUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmV3TmFtZSAtIFRoZSBuZXcgbmFtZSB2YWx1ZSB0byBiZSB1c2VkLlxuICAgICAqIEBwYXJhbSBuZXdLZXkgLSBUaGUgbmV3IGtleSB2YWx1ZSB0byBiZSB1c2VkLlxuICAgICAqL1xuICAgIHVwZGF0ZShuZXdOYW1lLCBuZXdLZXkpIHtcbiAgICAgICAgaWYgKCFuZXdOYW1lIHx8ICFuZXdLZXkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJuZXdOYW1lIGFuZCBuZXdLZXkgbXVzdCBiZSBub24tZW1wdHkgc3RyaW5nc1wiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9uYW1lID0gbmV3TmFtZTtcbiAgICAgICAgdGhpcy5fa2V5ID0gbmV3S2V5O1xuICAgIH1cbn1cbmV4cG9ydHMuQXp1cmVOYW1lZEtleUNyZWRlbnRpYWwgPSBBenVyZU5hbWVkS2V5Q3JlZGVudGlhbDtcbi8qKlxuICogVGVzdHMgYW4gb2JqZWN0IHRvIGRldGVybWluZSB3aGV0aGVyIGl0IGltcGxlbWVudHMgTmFtZWRLZXlDcmVkZW50aWFsLlxuICpcbiAqIEBwYXJhbSBjcmVkZW50aWFsIC0gVGhlIGFzc3VtZWQgTmFtZWRLZXlDcmVkZW50aWFsIHRvIGJlIHRlc3RlZC5cbiAqL1xuZnVuY3Rpb24gaXNOYW1lZEtleUNyZWRlbnRpYWwoY3JlZGVudGlhbCkge1xuICAgIHJldHVybiAoKDAsIGNvcmVfdXRpbF8xLmlzT2JqZWN0V2l0aFByb3BlcnRpZXMpKGNyZWRlbnRpYWwsIFtcIm5hbWVcIiwgXCJrZXlcIl0pICYmXG4gICAgICAgIHR5cGVvZiBjcmVkZW50aWFsLmtleSA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICB0eXBlb2YgY3JlZGVudGlhbC5uYW1lID09PSBcInN0cmluZ1wiKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWF6dXJlTmFtZWRLZXlDcmVkZW50aWFsLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQXp1cmVTQVNDcmVkZW50aWFsID0gdm9pZCAwO1xuZXhwb3J0cy5pc1NBU0NyZWRlbnRpYWwgPSBpc1NBU0NyZWRlbnRpYWw7XG5jb25zdCBjb3JlX3V0aWxfMSA9IHJlcXVpcmUoXCJAYXp1cmUvY29yZS11dGlsXCIpO1xuLyoqXG4gKiBBIHN0YXRpYy1zaWduYXR1cmUtYmFzZWQgY3JlZGVudGlhbCB0aGF0IHN1cHBvcnRzIHVwZGF0aW5nXG4gKiB0aGUgdW5kZXJseWluZyBzaWduYXR1cmUgdmFsdWUuXG4gKi9cbmNsYXNzIEF6dXJlU0FTQ3JlZGVudGlhbCB7XG4gICAgLyoqXG4gICAgICogVGhlIHZhbHVlIG9mIHRoZSBzaGFyZWQgYWNjZXNzIHNpZ25hdHVyZSB0byBiZSB1c2VkIGluIGF1dGhlbnRpY2F0aW9uXG4gICAgICovXG4gICAgZ2V0IHNpZ25hdHVyZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25hdHVyZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIGFuIEF6dXJlU0FTQ3JlZGVudGlhbCBmb3IgdXNlXG4gICAgICogd2l0aCBhIHNlcnZpY2UgY2xpZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIHNpZ25hdHVyZSAtIFRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSBzaGFyZWQgYWNjZXNzIHNpZ25hdHVyZSB0byB1c2UgaW4gYXV0aGVudGljYXRpb25cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihzaWduYXR1cmUpIHtcbiAgICAgICAgaWYgKCFzaWduYXR1cmUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInNoYXJlZCBhY2Nlc3Mgc2lnbmF0dXJlIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NpZ25hdHVyZSA9IHNpZ25hdHVyZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2hhbmdlIHRoZSB2YWx1ZSBvZiB0aGUgc2lnbmF0dXJlLlxuICAgICAqXG4gICAgICogVXBkYXRlcyB3aWxsIHRha2UgZWZmZWN0IHVwb24gdGhlIG5leHQgcmVxdWVzdCBhZnRlclxuICAgICAqIHVwZGF0aW5nIHRoZSBzaWduYXR1cmUgdmFsdWUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmV3U2lnbmF0dXJlIC0gVGhlIG5ldyBzaGFyZWQgYWNjZXNzIHNpZ25hdHVyZSB2YWx1ZSB0byBiZSB1c2VkXG4gICAgICovXG4gICAgdXBkYXRlKG5ld1NpZ25hdHVyZSkge1xuICAgICAgICBpZiAoIW5ld1NpZ25hdHVyZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwic2hhcmVkIGFjY2VzcyBzaWduYXR1cmUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmdcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2lnbmF0dXJlID0gbmV3U2lnbmF0dXJlO1xuICAgIH1cbn1cbmV4cG9ydHMuQXp1cmVTQVNDcmVkZW50aWFsID0gQXp1cmVTQVNDcmVkZW50aWFsO1xuLyoqXG4gKiBUZXN0cyBhbiBvYmplY3QgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgaXQgaW1wbGVtZW50cyBTQVNDcmVkZW50aWFsLlxuICpcbiAqIEBwYXJhbSBjcmVkZW50aWFsIC0gVGhlIGFzc3VtZWQgU0FTQ3JlZGVudGlhbCB0byBiZSB0ZXN0ZWQuXG4gKi9cbmZ1bmN0aW9uIGlzU0FTQ3JlZGVudGlhbChjcmVkZW50aWFsKSB7XG4gICAgcmV0dXJuICgoMCwgY29yZV91dGlsXzEuaXNPYmplY3RXaXRoUHJvcGVydGllcykoY3JlZGVudGlhbCwgW1wic2lnbmF0dXJlXCJdKSAmJiB0eXBlb2YgY3JlZGVudGlhbC5zaWduYXR1cmUgPT09IFwic3RyaW5nXCIpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXp1cmVTQVNDcmVkZW50aWFsLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNCZWFyZXJUb2tlbiA9IGlzQmVhcmVyVG9rZW47XG5leHBvcnRzLmlzUG9wVG9rZW4gPSBpc1BvcFRva2VuO1xuZXhwb3J0cy5pc1Rva2VuQ3JlZGVudGlhbCA9IGlzVG9rZW5DcmVkZW50aWFsO1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqIEBwYXJhbSBhY2Nlc3NUb2tlbiAtIEFjY2VzcyB0b2tlblxuICogQHJldHVybnMgV2hldGhlciBhIHRva2VuIGlzIGJlYXJlciB0eXBlIG9yIG5vdFxuICovXG5mdW5jdGlvbiBpc0JlYXJlclRva2VuKGFjY2Vzc1Rva2VuKSB7XG4gICAgcmV0dXJuICFhY2Nlc3NUb2tlbi50b2tlblR5cGUgfHwgYWNjZXNzVG9rZW4udG9rZW5UeXBlID09PSBcIkJlYXJlclwiO1xufVxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqIEBwYXJhbSBhY2Nlc3NUb2tlbiAtIEFjY2VzcyB0b2tlblxuICogQHJldHVybnMgV2hldGhlciBhIHRva2VuIGlzIFBvcCB0b2tlbiBvciBub3RcbiAqL1xuZnVuY3Rpb24gaXNQb3BUb2tlbihhY2Nlc3NUb2tlbikge1xuICAgIHJldHVybiBhY2Nlc3NUb2tlbi50b2tlblR5cGUgPT09IFwicG9wXCI7XG59XG4vKipcbiAqIFRlc3RzIGFuIG9iamVjdCB0byBkZXRlcm1pbmUgd2hldGhlciBpdCBpbXBsZW1lbnRzIFRva2VuQ3JlZGVudGlhbC5cbiAqXG4gKiBAcGFyYW0gY3JlZGVudGlhbCAtIFRoZSBhc3N1bWVkIFRva2VuQ3JlZGVudGlhbCB0byBiZSB0ZXN0ZWQuXG4gKi9cbmZ1bmN0aW9uIGlzVG9rZW5DcmVkZW50aWFsKGNyZWRlbnRpYWwpIHtcbiAgICAvLyBDaGVjayBmb3IgYW4gb2JqZWN0IHdpdGggYSAnZ2V0VG9rZW4nIGZ1bmN0aW9uIGFuZCBwb3NzaWJseSB3aXRoXG4gICAgLy8gYSAnc2lnblJlcXVlc3QnIGZ1bmN0aW9uLiAgV2UgZG8gdGhpcyBjaGVjayB0byBtYWtlIHN1cmUgdGhhdFxuICAgIC8vIGEgU2VydmljZUNsaWVudENyZWRlbnRpYWxzIGltcGxlbWVudG9yIChsaWtlIFRva2VuQ2xpZW50Q3JlZGVudGlhbHNcbiAgICAvLyBpbiBtcy1yZXN0LW5vZGVhdXRoKSBkb2Vzbid0IGdldCBtaXN0YWtlbiBmb3IgYSBUb2tlbkNyZWRlbnRpYWwgaWZcbiAgICAvLyBpdCBkb2Vzbid0IGFjdHVhbGx5IGltcGxlbWVudCBUb2tlbkNyZWRlbnRpYWwgYWxzby5cbiAgICBjb25zdCBjYXN0Q3JlZGVudGlhbCA9IGNyZWRlbnRpYWw7XG4gICAgcmV0dXJuIChjYXN0Q3JlZGVudGlhbCAmJlxuICAgICAgICB0eXBlb2YgY2FzdENyZWRlbnRpYWwuZ2V0VG9rZW4gPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgICAgICAoY2FzdENyZWRlbnRpYWwuc2lnblJlcXVlc3QgPT09IHVuZGVmaW5lZCB8fCBjYXN0Q3JlZGVudGlhbC5nZXRUb2tlbi5sZW5ndGggPiAwKSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD10b2tlbkNyZWRlbnRpYWwuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNUb2tlbkNyZWRlbnRpYWwgPSBleHBvcnRzLmlzU0FTQ3JlZGVudGlhbCA9IGV4cG9ydHMuQXp1cmVTQVNDcmVkZW50aWFsID0gZXhwb3J0cy5pc05hbWVkS2V5Q3JlZGVudGlhbCA9IGV4cG9ydHMuQXp1cmVOYW1lZEtleUNyZWRlbnRpYWwgPSBleHBvcnRzLmlzS2V5Q3JlZGVudGlhbCA9IGV4cG9ydHMuQXp1cmVLZXlDcmVkZW50aWFsID0gdm9pZCAwO1xudmFyIGF6dXJlS2V5Q3JlZGVudGlhbF9qc18xID0gcmVxdWlyZShcIi4vYXp1cmVLZXlDcmVkZW50aWFsLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQXp1cmVLZXlDcmVkZW50aWFsXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBhenVyZUtleUNyZWRlbnRpYWxfanNfMS5BenVyZUtleUNyZWRlbnRpYWw7IH0gfSk7XG52YXIga2V5Q3JlZGVudGlhbF9qc18xID0gcmVxdWlyZShcIi4va2V5Q3JlZGVudGlhbC5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzS2V5Q3JlZGVudGlhbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4ga2V5Q3JlZGVudGlhbF9qc18xLmlzS2V5Q3JlZGVudGlhbDsgfSB9KTtcbnZhciBhenVyZU5hbWVkS2V5Q3JlZGVudGlhbF9qc18xID0gcmVxdWlyZShcIi4vYXp1cmVOYW1lZEtleUNyZWRlbnRpYWwuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJBenVyZU5hbWVkS2V5Q3JlZGVudGlhbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYXp1cmVOYW1lZEtleUNyZWRlbnRpYWxfanNfMS5BenVyZU5hbWVkS2V5Q3JlZGVudGlhbDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzTmFtZWRLZXlDcmVkZW50aWFsXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBhenVyZU5hbWVkS2V5Q3JlZGVudGlhbF9qc18xLmlzTmFtZWRLZXlDcmVkZW50aWFsOyB9IH0pO1xudmFyIGF6dXJlU0FTQ3JlZGVudGlhbF9qc18xID0gcmVxdWlyZShcIi4vYXp1cmVTQVNDcmVkZW50aWFsLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQXp1cmVTQVNDcmVkZW50aWFsXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBhenVyZVNBU0NyZWRlbnRpYWxfanNfMS5BenVyZVNBU0NyZWRlbnRpYWw7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc1NBU0NyZWRlbnRpYWxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGF6dXJlU0FTQ3JlZGVudGlhbF9qc18xLmlzU0FTQ3JlZGVudGlhbDsgfSB9KTtcbnZhciB0b2tlbkNyZWRlbnRpYWxfanNfMSA9IHJlcXVpcmUoXCIuL3Rva2VuQ3JlZGVudGlhbC5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzVG9rZW5DcmVkZW50aWFsXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0b2tlbkNyZWRlbnRpYWxfanNfMS5pc1Rva2VuQ3JlZGVudGlhbDsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucGlwZWxpbmVDb250YWluc0Rpc2FibGVLZWVwQWxpdmVQb2xpY3kgPSBleHBvcnRzLmNyZWF0ZURpc2FibGVLZWVwQWxpdmVQb2xpY3kgPSBleHBvcnRzLmRpc2FibGVLZWVwQWxpdmVQb2xpY3lOYW1lID0gdm9pZCAwO1xuZXhwb3J0cy5kaXNhYmxlS2VlcEFsaXZlUG9saWN5TmFtZSA9IFwiRGlzYWJsZUtlZXBBbGl2ZVBvbGljeVwiO1xuZnVuY3Rpb24gY3JlYXRlRGlzYWJsZUtlZXBBbGl2ZVBvbGljeSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBleHBvcnRzLmRpc2FibGVLZWVwQWxpdmVQb2xpY3lOYW1lLFxuICAgICAgICBhc3luYyBzZW5kUmVxdWVzdChyZXF1ZXN0LCBuZXh0KSB7XG4gICAgICAgICAgICByZXF1ZXN0LmRpc2FibGVLZWVwQWxpdmUgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIG5leHQocmVxdWVzdCk7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbmV4cG9ydHMuY3JlYXRlRGlzYWJsZUtlZXBBbGl2ZVBvbGljeSA9IGNyZWF0ZURpc2FibGVLZWVwQWxpdmVQb2xpY3k7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBwaXBlbGluZUNvbnRhaW5zRGlzYWJsZUtlZXBBbGl2ZVBvbGljeShwaXBlbGluZSkge1xuICAgIHJldHVybiBwaXBlbGluZS5nZXRPcmRlcmVkUG9saWNpZXMoKS5zb21lKChwb2xpY3kpID0+IHBvbGljeS5uYW1lID09PSBleHBvcnRzLmRpc2FibGVLZWVwQWxpdmVQb2xpY3lOYW1lKTtcbn1cbmV4cG9ydHMucGlwZWxpbmVDb250YWluc0Rpc2FibGVLZWVwQWxpdmVQb2xpY3kgPSBwaXBlbGluZUNvbnRhaW5zRGlzYWJsZUtlZXBBbGl2ZVBvbGljeTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRpc2FibGVLZWVwQWxpdmVQb2xpY3kuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZWNvZGVTdHJpbmdUb1N0cmluZyA9IGV4cG9ydHMuZGVjb2RlU3RyaW5nID0gZXhwb3J0cy5lbmNvZGVCeXRlQXJyYXkgPSBleHBvcnRzLmVuY29kZVN0cmluZyA9IHZvaWQgMDtcbi8qKlxuICogRW5jb2RlcyBhIHN0cmluZyBpbiBiYXNlNjQgZm9ybWF0LlxuICogQHBhcmFtIHZhbHVlIC0gdGhlIHN0cmluZyB0byBlbmNvZGVcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBlbmNvZGVTdHJpbmcodmFsdWUpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20odmFsdWUpLnRvU3RyaW5nKFwiYmFzZTY0XCIpO1xufVxuZXhwb3J0cy5lbmNvZGVTdHJpbmcgPSBlbmNvZGVTdHJpbmc7XG4vKipcbiAqIEVuY29kZXMgYSBieXRlIGFycmF5IGluIGJhc2U2NCBmb3JtYXQuXG4gKiBAcGFyYW0gdmFsdWUgLSB0aGUgVWludDhBcmF5IHRvIGVuY29kZVxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIGVuY29kZUJ5dGVBcnJheSh2YWx1ZSkge1xuICAgIGNvbnN0IGJ1ZmZlclZhbHVlID0gdmFsdWUgaW5zdGFuY2VvZiBCdWZmZXIgPyB2YWx1ZSA6IEJ1ZmZlci5mcm9tKHZhbHVlLmJ1ZmZlcik7XG4gICAgcmV0dXJuIGJ1ZmZlclZhbHVlLnRvU3RyaW5nKFwiYmFzZTY0XCIpO1xufVxuZXhwb3J0cy5lbmNvZGVCeXRlQXJyYXkgPSBlbmNvZGVCeXRlQXJyYXk7XG4vKipcbiAqIERlY29kZXMgYSBiYXNlNjQgc3RyaW5nIGludG8gYSBieXRlIGFycmF5LlxuICogQHBhcmFtIHZhbHVlIC0gdGhlIGJhc2U2NCBzdHJpbmcgdG8gZGVjb2RlXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gZGVjb2RlU3RyaW5nKHZhbHVlKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHZhbHVlLCBcImJhc2U2NFwiKTtcbn1cbmV4cG9ydHMuZGVjb2RlU3RyaW5nID0gZGVjb2RlU3RyaW5nO1xuLyoqXG4gKiBEZWNvZGVzIGEgYmFzZTY0IHN0cmluZyBpbnRvIGEgc3RyaW5nLlxuICogQHBhcmFtIHZhbHVlIC0gdGhlIGJhc2U2NCBzdHJpbmcgdG8gZGVjb2RlXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gZGVjb2RlU3RyaW5nVG9TdHJpbmcodmFsdWUpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20odmFsdWUsIFwiYmFzZTY0XCIpLnRvU3RyaW5nKCk7XG59XG5leHBvcnRzLmRlY29kZVN0cmluZ1RvU3RyaW5nID0gZGVjb2RlU3RyaW5nVG9TdHJpbmc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1iYXNlNjQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5YTUxfQ0hBUktFWSA9IGV4cG9ydHMuWE1MX0FUVFJLRVkgPSB2b2lkIDA7XG4vKipcbiAqIERlZmF1bHQga2V5IHVzZWQgdG8gYWNjZXNzIHRoZSBYTUwgYXR0cmlidXRlcy5cbiAqL1xuZXhwb3J0cy5YTUxfQVRUUktFWSA9IFwiJFwiO1xuLyoqXG4gKiBEZWZhdWx0IGtleSB1c2VkIHRvIGFjY2VzcyB0aGUgWE1MIHZhbHVlIGNvbnRlbnQuXG4gKi9cbmV4cG9ydHMuWE1MX0NIQVJLRVkgPSBcIl9cIjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWludGVyZmFjZXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5mbGF0dGVuUmVzcG9uc2UgPSBleHBvcnRzLmlzVmFsaWRVdWlkID0gZXhwb3J0cy5pc0R1cmF0aW9uID0gZXhwb3J0cy5pc1ByaW1pdGl2ZUJvZHkgPSB2b2lkIDA7XG4vKipcbiAqIEEgdHlwZSBndWFyZCBmb3IgYSBwcmltaXRpdmUgcmVzcG9uc2UgYm9keS5cbiAqIEBwYXJhbSB2YWx1ZSAtIFZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gaXNQcmltaXRpdmVCb2R5KHZhbHVlLCBtYXBwZXJUeXBlTmFtZSkge1xuICAgIHJldHVybiAobWFwcGVyVHlwZU5hbWUgIT09IFwiQ29tcG9zaXRlXCIgJiZcbiAgICAgICAgbWFwcGVyVHlwZU5hbWUgIT09IFwiRGljdGlvbmFyeVwiICYmXG4gICAgICAgICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgfHxcbiAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIiB8fFxuICAgICAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIiB8fFxuICAgICAgICAgICAgKG1hcHBlclR5cGVOYW1lID09PSBudWxsIHx8IG1hcHBlclR5cGVOYW1lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBtYXBwZXJUeXBlTmFtZS5tYXRjaCgvXihEYXRlfERhdGVUaW1lfERhdGVUaW1lUmZjMTEyM3xVbml4VGltZXxCeXRlQXJyYXl8QmFzZTY0VXJsKSQvaSkpICE9PVxuICAgICAgICAgICAgICAgIG51bGwgfHxcbiAgICAgICAgICAgIHZhbHVlID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgIHZhbHVlID09PSBudWxsKSk7XG59XG5leHBvcnRzLmlzUHJpbWl0aXZlQm9keSA9IGlzUHJpbWl0aXZlQm9keTtcbmNvbnN0IHZhbGlkYXRlSVNPRHVyYXRpb24gPSAvXigtfFxcKyk/UCg/OihbLStdP1swLTksLl0qKVkpPyg/OihbLStdP1swLTksLl0qKU0pPyg/OihbLStdP1swLTksLl0qKVcpPyg/OihbLStdP1swLTksLl0qKUQpPyg/OlQoPzooWy0rXT9bMC05LC5dKilIKT8oPzooWy0rXT9bMC05LC5dKilNKT8oPzooWy0rXT9bMC05LC5dKilTKT8pPyQvO1xuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHN0cmluZyBpcyBpbiBJU08gODYwMSBmb3JtYXQuXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gYmUgdmFsaWRhdGVkIGZvciBJU08gODYwMSBkdXJhdGlvbiBmb3JtYXQuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gaXNEdXJhdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB2YWxpZGF0ZUlTT0R1cmF0aW9uLnRlc3QodmFsdWUpO1xufVxuZXhwb3J0cy5pc0R1cmF0aW9uID0gaXNEdXJhdGlvbjtcbmNvbnN0IHZhbGlkVXVpZFJlZ2V4ID0gL15bMC05YS1mQS1GXXs4fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXsxMn0kL2k7XG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcHJvdmlkZWQgdXVpZCBpcyB2YWxpZC5cbiAqXG4gKiBAcGFyYW0gdXVpZCAtIFRoZSB1dWlkIHRoYXQgbmVlZHMgdG8gYmUgdmFsaWRhdGVkLlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBpc1ZhbGlkVXVpZCh1dWlkKSB7XG4gICAgcmV0dXJuIHZhbGlkVXVpZFJlZ2V4LnRlc3QodXVpZCk7XG59XG5leHBvcnRzLmlzVmFsaWRVdWlkID0gaXNWYWxpZFV1aWQ7XG4vKipcbiAqIE1hcHMgdGhlIHJlc3BvbnNlIGFzIGZvbGxvd3M6XG4gKiAtIHdyYXBzIHRoZSByZXNwb25zZSBib2R5IGlmIG5lZWRlZCAodHlwaWNhbGx5IGlmIGl0cyB0eXBlIGlzIHByaW1pdGl2ZSkuXG4gKiAtIHJldHVybnMgbnVsbCBpZiB0aGUgY29tYmluYXRpb24gb2YgdGhlIGhlYWRlcnMgYW5kIHRoZSBib2R5IGlzIGVtcHR5LlxuICogLSBvdGhlcndpc2UsIHJldHVybnMgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBoZWFkZXJzIGFuZCB0aGUgYm9keS5cbiAqXG4gKiBAcGFyYW0gcmVzcG9uc2VPYmplY3QgLSBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBwYXJzZWQgcmVzcG9uc2VcbiAqIEByZXR1cm5zIHRoZSByZXNwb25zZSB0aGF0IHdpbGwgYmUgcmV0dXJuZWQgdG8gdGhlIHVzZXIgd2hpY2ggY2FuIGJlIG51bGwgYW5kL29yIHdyYXBwZWRcbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gaGFuZGxlTnVsbGFibGVSZXNwb25zZUFuZFdyYXBwYWJsZUJvZHkocmVzcG9uc2VPYmplY3QpIHtcbiAgICBjb25zdCBjb21iaW5lZEhlYWRlcnNBbmRCb2R5ID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCByZXNwb25zZU9iamVjdC5oZWFkZXJzKSwgcmVzcG9uc2VPYmplY3QuYm9keSk7XG4gICAgaWYgKHJlc3BvbnNlT2JqZWN0Lmhhc051bGxhYmxlVHlwZSAmJlxuICAgICAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhjb21iaW5lZEhlYWRlcnNBbmRCb2R5KS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlT2JqZWN0LnNob3VsZFdyYXBCb2R5ID8geyBib2R5OiBudWxsIH0gOiBudWxsO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlT2JqZWN0LnNob3VsZFdyYXBCb2R5XG4gICAgICAgICAgICA/IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcmVzcG9uc2VPYmplY3QuaGVhZGVycyksIHsgYm9keTogcmVzcG9uc2VPYmplY3QuYm9keSB9KSA6IGNvbWJpbmVkSGVhZGVyc0FuZEJvZHk7XG4gICAgfVxufVxuLyoqXG4gKiBUYWtlIGEgYEZ1bGxPcGVyYXRpb25SZXNwb25zZWAgYW5kIHR1cm4gaXQgaW50byBhIGZsYXRcbiAqIHJlc3BvbnNlIG9iamVjdCB0byBoYW5kIGJhY2sgdG8gdGhlIGNvbnN1bWVyLlxuICogQHBhcmFtIGZ1bGxSZXNwb25zZSAtIFRoZSBwcm9jZXNzZWQgcmVzcG9uc2UgZnJvbSB0aGUgb3BlcmF0aW9uIHJlcXVlc3RcbiAqIEBwYXJhbSByZXNwb25zZVNwZWMgLSBUaGUgcmVzcG9uc2UgbWFwIGZyb20gdGhlIE9wZXJhdGlvblNwZWNcbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gZmxhdHRlblJlc3BvbnNlKGZ1bGxSZXNwb25zZSwgcmVzcG9uc2VTcGVjKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICBjb25zdCBwYXJzZWRIZWFkZXJzID0gZnVsbFJlc3BvbnNlLnBhcnNlZEhlYWRlcnM7XG4gICAgLy8gaGVhZCBtZXRob2RzIG5ldmVyIGhhdmUgYSBib2R5LCBidXQgd2UgcmV0dXJuIGEgYm9vbGVhbiBzZXQgdG8gYm9keSBwcm9wZXJ0eVxuICAgIC8vIHRvIGluZGljYXRlIHByZXNlbmNlL2Fic2VuY2Ugb2YgdGhlIHJlc291cmNlXG4gICAgaWYgKGZ1bGxSZXNwb25zZS5yZXF1ZXN0Lm1ldGhvZCA9PT0gXCJIRUFEXCIpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcGFyc2VkSGVhZGVycyksIHsgYm9keTogZnVsbFJlc3BvbnNlLnBhcnNlZEJvZHkgfSk7XG4gICAgfVxuICAgIGNvbnN0IGJvZHlNYXBwZXIgPSByZXNwb25zZVNwZWMgJiYgcmVzcG9uc2VTcGVjLmJvZHlNYXBwZXI7XG4gICAgY29uc3QgaXNOdWxsYWJsZSA9IEJvb2xlYW4oYm9keU1hcHBlciA9PT0gbnVsbCB8fCBib2R5TWFwcGVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBib2R5TWFwcGVyLm51bGxhYmxlKTtcbiAgICBjb25zdCBleHBlY3RlZEJvZHlUeXBlTmFtZSA9IGJvZHlNYXBwZXIgPT09IG51bGwgfHwgYm9keU1hcHBlciA9PT0gdm9pZCAwID8gdm9pZCAwIDogYm9keU1hcHBlci50eXBlLm5hbWU7XG4gICAgLyoqIElmIHRoZSBib2R5IGlzIGFza2VkIGZvciwgd2UgbG9vayBhdCB0aGUgZXhwZWN0ZWQgYm9keSB0eXBlIHRvIGhhbmRsZSBpdCAqL1xuICAgIGlmIChleHBlY3RlZEJvZHlUeXBlTmFtZSA9PT0gXCJTdHJlYW1cIikge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwYXJzZWRIZWFkZXJzKSwgeyBibG9iQm9keTogZnVsbFJlc3BvbnNlLmJsb2JCb2R5LCByZWFkYWJsZVN0cmVhbUJvZHk6IGZ1bGxSZXNwb25zZS5yZWFkYWJsZVN0cmVhbUJvZHkgfSk7XG4gICAgfVxuICAgIGNvbnN0IG1vZGVsUHJvcGVydGllcyA9IChleHBlY3RlZEJvZHlUeXBlTmFtZSA9PT0gXCJDb21wb3NpdGVcIiAmJlxuICAgICAgICBib2R5TWFwcGVyLnR5cGUubW9kZWxQcm9wZXJ0aWVzKSB8fFxuICAgICAgICB7fTtcbiAgICBjb25zdCBpc1BhZ2VhYmxlUmVzcG9uc2UgPSBPYmplY3Qua2V5cyhtb2RlbFByb3BlcnRpZXMpLnNvbWUoKGspID0+IG1vZGVsUHJvcGVydGllc1trXS5zZXJpYWxpemVkTmFtZSA9PT0gXCJcIik7XG4gICAgaWYgKGV4cGVjdGVkQm9keVR5cGVOYW1lID09PSBcIlNlcXVlbmNlXCIgfHwgaXNQYWdlYWJsZVJlc3BvbnNlKSB7XG4gICAgICAgIGNvbnN0IGFycmF5UmVzcG9uc2UgPSAoX2EgPSBmdWxsUmVzcG9uc2UucGFyc2VkQm9keSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogW107XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG1vZGVsUHJvcGVydGllcykpIHtcbiAgICAgICAgICAgIGlmIChtb2RlbFByb3BlcnRpZXNba2V5XS5zZXJpYWxpemVkTmFtZSkge1xuICAgICAgICAgICAgICAgIGFycmF5UmVzcG9uc2Vba2V5XSA9IChfYiA9IGZ1bGxSZXNwb25zZS5wYXJzZWRCb2R5KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Jba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyc2VkSGVhZGVycykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocGFyc2VkSGVhZGVycykpIHtcbiAgICAgICAgICAgICAgICBhcnJheVJlc3BvbnNlW2tleV0gPSBwYXJzZWRIZWFkZXJzW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzTnVsbGFibGUgJiZcbiAgICAgICAgICAgICFmdWxsUmVzcG9uc2UucGFyc2VkQm9keSAmJlxuICAgICAgICAgICAgIXBhcnNlZEhlYWRlcnMgJiZcbiAgICAgICAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG1vZGVsUHJvcGVydGllcykubGVuZ3RoID09PSAwXG4gICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgIDogYXJyYXlSZXNwb25zZTtcbiAgICB9XG4gICAgcmV0dXJuIGhhbmRsZU51bGxhYmxlUmVzcG9uc2VBbmRXcmFwcGFibGVCb2R5KHtcbiAgICAgICAgYm9keTogZnVsbFJlc3BvbnNlLnBhcnNlZEJvZHksXG4gICAgICAgIGhlYWRlcnM6IHBhcnNlZEhlYWRlcnMsXG4gICAgICAgIGhhc051bGxhYmxlVHlwZTogaXNOdWxsYWJsZSxcbiAgICAgICAgc2hvdWxkV3JhcEJvZHk6IGlzUHJpbWl0aXZlQm9keShmdWxsUmVzcG9uc2UucGFyc2VkQm9keSwgZXhwZWN0ZWRCb2R5VHlwZU5hbWUpLFxuICAgIH0pO1xufVxuZXhwb3J0cy5mbGF0dGVuUmVzcG9uc2UgPSBmbGF0dGVuUmVzcG9uc2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11dGlscy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk1hcHBlclR5cGVOYW1lcyA9IGV4cG9ydHMuY3JlYXRlU2VyaWFsaXplciA9IHZvaWQgMDtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG5jb25zdCBiYXNlNjQgPSB0c2xpYl8xLl9faW1wb3J0U3RhcihyZXF1aXJlKFwiLi9iYXNlNjQuanNcIikpO1xuY29uc3QgaW50ZXJmYWNlc19qc18xID0gcmVxdWlyZShcIi4vaW50ZXJmYWNlcy5qc1wiKTtcbmNvbnN0IHV0aWxzX2pzXzEgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNsYXNzIFNlcmlhbGl6ZXJJbXBsIHtcbiAgICBjb25zdHJ1Y3Rvcihtb2RlbE1hcHBlcnMgPSB7fSwgaXNYTUwgPSBmYWxzZSkge1xuICAgICAgICB0aGlzLm1vZGVsTWFwcGVycyA9IG1vZGVsTWFwcGVycztcbiAgICAgICAgdGhpcy5pc1hNTCA9IGlzWE1MO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCBSZW1vdmluZyB0aGUgY29uc3RyYWludHMgdmFsaWRhdGlvbiBvbiBjbGllbnQgc2lkZS5cbiAgICAgKi9cbiAgICB2YWxpZGF0ZUNvbnN0cmFpbnRzKG1hcHBlciwgdmFsdWUsIG9iamVjdE5hbWUpIHtcbiAgICAgICAgY29uc3QgZmFpbFZhbGlkYXRpb24gPSAoY29uc3RyYWludE5hbWUsIGNvbnN0cmFpbnRWYWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBcIiR7b2JqZWN0TmFtZX1cIiB3aXRoIHZhbHVlIFwiJHt2YWx1ZX1cIiBzaG91bGQgc2F0aXNmeSB0aGUgY29uc3RyYWludCBcIiR7Y29uc3RyYWludE5hbWV9XCI6ICR7Y29uc3RyYWludFZhbHVlfS5gKTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKG1hcHBlci5jb25zdHJhaW50cyAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCB7IEV4Y2x1c2l2ZU1heGltdW0sIEV4Y2x1c2l2ZU1pbmltdW0sIEluY2x1c2l2ZU1heGltdW0sIEluY2x1c2l2ZU1pbmltdW0sIE1heEl0ZW1zLCBNYXhMZW5ndGgsIE1pbkl0ZW1zLCBNaW5MZW5ndGgsIE11bHRpcGxlT2YsIFBhdHRlcm4sIFVuaXF1ZUl0ZW1zLCB9ID0gbWFwcGVyLmNvbnN0cmFpbnRzO1xuICAgICAgICAgICAgaWYgKEV4Y2x1c2l2ZU1heGltdW0gIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSA+PSBFeGNsdXNpdmVNYXhpbXVtKSB7XG4gICAgICAgICAgICAgICAgZmFpbFZhbGlkYXRpb24oXCJFeGNsdXNpdmVNYXhpbXVtXCIsIEV4Y2x1c2l2ZU1heGltdW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKEV4Y2x1c2l2ZU1pbmltdW0gIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSA8PSBFeGNsdXNpdmVNaW5pbXVtKSB7XG4gICAgICAgICAgICAgICAgZmFpbFZhbGlkYXRpb24oXCJFeGNsdXNpdmVNaW5pbXVtXCIsIEV4Y2x1c2l2ZU1pbmltdW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKEluY2x1c2l2ZU1heGltdW0gIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSA+IEluY2x1c2l2ZU1heGltdW0pIHtcbiAgICAgICAgICAgICAgICBmYWlsVmFsaWRhdGlvbihcIkluY2x1c2l2ZU1heGltdW1cIiwgSW5jbHVzaXZlTWF4aW11bSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoSW5jbHVzaXZlTWluaW11bSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlIDwgSW5jbHVzaXZlTWluaW11bSkge1xuICAgICAgICAgICAgICAgIGZhaWxWYWxpZGF0aW9uKFwiSW5jbHVzaXZlTWluaW11bVwiLCBJbmNsdXNpdmVNaW5pbXVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChNYXhJdGVtcyAhPT0gdW5kZWZpbmVkICYmIHZhbHVlLmxlbmd0aCA+IE1heEl0ZW1zKSB7XG4gICAgICAgICAgICAgICAgZmFpbFZhbGlkYXRpb24oXCJNYXhJdGVtc1wiLCBNYXhJdGVtcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoTWF4TGVuZ3RoICE9PSB1bmRlZmluZWQgJiYgdmFsdWUubGVuZ3RoID4gTWF4TGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgZmFpbFZhbGlkYXRpb24oXCJNYXhMZW5ndGhcIiwgTWF4TGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChNaW5JdGVtcyAhPT0gdW5kZWZpbmVkICYmIHZhbHVlLmxlbmd0aCA8IE1pbkl0ZW1zKSB7XG4gICAgICAgICAgICAgICAgZmFpbFZhbGlkYXRpb24oXCJNaW5JdGVtc1wiLCBNaW5JdGVtcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoTWluTGVuZ3RoICE9PSB1bmRlZmluZWQgJiYgdmFsdWUubGVuZ3RoIDwgTWluTGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgZmFpbFZhbGlkYXRpb24oXCJNaW5MZW5ndGhcIiwgTWluTGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChNdWx0aXBsZU9mICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgJSBNdWx0aXBsZU9mICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgZmFpbFZhbGlkYXRpb24oXCJNdWx0aXBsZU9mXCIsIE11bHRpcGxlT2YpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFBhdHRlcm4pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXR0ZXJuID0gdHlwZW9mIFBhdHRlcm4gPT09IFwic3RyaW5nXCIgPyBuZXcgUmVnRXhwKFBhdHRlcm4pIDogUGF0dGVybjtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInN0cmluZ1wiIHx8IHZhbHVlLm1hdGNoKHBhdHRlcm4pID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGZhaWxWYWxpZGF0aW9uKFwiUGF0dGVyblwiLCBQYXR0ZXJuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoVW5pcXVlSXRlbXMgJiZcbiAgICAgICAgICAgICAgICB2YWx1ZS5zb21lKChpdGVtLCBpLCBhcikgPT4gYXIuaW5kZXhPZihpdGVtKSAhPT0gaSkpIHtcbiAgICAgICAgICAgICAgICBmYWlsVmFsaWRhdGlvbihcIlVuaXF1ZUl0ZW1zXCIsIFVuaXF1ZUl0ZW1zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXJpYWxpemUgdGhlIGdpdmVuIG9iamVjdCBiYXNlZCBvbiBpdHMgbWV0YWRhdGEgZGVmaW5lZCBpbiB0aGUgbWFwcGVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbWFwcGVyIC0gVGhlIG1hcHBlciB3aGljaCBkZWZpbmVzIHRoZSBtZXRhZGF0YSBvZiB0aGUgc2VyaWFsaXphYmxlIG9iamVjdFxuICAgICAqXG4gICAgICogQHBhcmFtIG9iamVjdCAtIEEgdmFsaWQgSmF2YXNjcmlwdCBvYmplY3QgdG8gYmUgc2VyaWFsaXplZFxuICAgICAqXG4gICAgICogQHBhcmFtIG9iamVjdE5hbWUgLSBOYW1lIG9mIHRoZSBzZXJpYWxpemVkIG9iamVjdFxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBhZGRpdGlvbmFsIG9wdGlvbnMgdG8gc2VyaWFsaXphdGlvblxuICAgICAqXG4gICAgICogQHJldHVybnMgQSB2YWxpZCBzZXJpYWxpemVkIEphdmFzY3JpcHQgb2JqZWN0XG4gICAgICovXG4gICAgc2VyaWFsaXplKG1hcHBlciwgb2JqZWN0LCBvYmplY3ROYW1lLCBvcHRpb25zID0geyB4bWw6IHt9IH0pIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRPcHRpb25zID0ge1xuICAgICAgICAgICAgeG1sOiB7XG4gICAgICAgICAgICAgICAgcm9vdE5hbWU6IChfYSA9IG9wdGlvbnMueG1sLnJvb3ROYW1lKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBcIlwiLFxuICAgICAgICAgICAgICAgIGluY2x1ZGVSb290OiAoX2IgPSBvcHRpb25zLnhtbC5pbmNsdWRlUm9vdCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogZmFsc2UsXG4gICAgICAgICAgICAgICAgeG1sQ2hhcktleTogKF9jID0gb3B0aW9ucy54bWwueG1sQ2hhcktleSkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogaW50ZXJmYWNlc19qc18xLlhNTF9DSEFSS0VZLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHBheWxvYWQgPSB7fTtcbiAgICAgICAgY29uc3QgbWFwcGVyVHlwZSA9IG1hcHBlci50eXBlLm5hbWU7XG4gICAgICAgIGlmICghb2JqZWN0TmFtZSkge1xuICAgICAgICAgICAgb2JqZWN0TmFtZSA9IG1hcHBlci5zZXJpYWxpemVkTmFtZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWFwcGVyVHlwZS5tYXRjaCgvXlNlcXVlbmNlJC9pKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcGF5bG9hZCA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXBwZXIuaXNDb25zdGFudCkge1xuICAgICAgICAgICAgb2JqZWN0ID0gbWFwcGVyLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUaGlzIHRhYmxlIG9mIGFsbG93ZWQgdmFsdWVzIHNob3VsZCBoZWxwIGV4cGxhaW5cbiAgICAgICAgLy8gdGhlIG1hcHBlci5yZXF1aXJlZCBhbmQgbWFwcGVyLm51bGxhYmxlIHByb3BlcnRpZXMuXG4gICAgICAgIC8vIFggbWVhbnMgXCJuZWl0aGVyIHVuZGVmaW5lZCBvciBudWxsIGFyZSBhbGxvd2VkXCIuXG4gICAgICAgIC8vICAgICAgICAgICB8fCByZXF1aXJlZFxuICAgICAgICAvLyAgICAgICAgICAgfHwgdHJ1ZSAgICAgIHwgZmFsc2VcbiAgICAgICAgLy8gIG51bGxhYmxlIHx8ID09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAgIC8vICAgICAgdHJ1ZSB8fCBudWxsICAgICAgfCB1bmRlZmluZWQvbnVsbFxuICAgICAgICAvLyAgICAgZmFsc2UgfHwgWCAgICAgICAgIHwgdW5kZWZpbmVkXG4gICAgICAgIC8vIHVuZGVmaW5lZCB8fCBYICAgICAgICAgfCB1bmRlZmluZWQvbnVsbFxuICAgICAgICBjb25zdCB7IHJlcXVpcmVkLCBudWxsYWJsZSB9ID0gbWFwcGVyO1xuICAgICAgICBpZiAocmVxdWlyZWQgJiYgbnVsbGFibGUgJiYgb2JqZWN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtvYmplY3ROYW1lfSBjYW5ub3QgYmUgdW5kZWZpbmVkLmApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXF1aXJlZCAmJiAhbnVsbGFibGUgJiYgKG9iamVjdCA9PT0gdW5kZWZpbmVkIHx8IG9iamVjdCA9PT0gbnVsbCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtvYmplY3ROYW1lfSBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFyZXF1aXJlZCAmJiBudWxsYWJsZSA9PT0gZmFsc2UgJiYgb2JqZWN0ID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7b2JqZWN0TmFtZX0gY2Fubm90IGJlIG51bGwuYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9iamVjdCA9PT0gdW5kZWZpbmVkIHx8IG9iamVjdCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcGF5bG9hZCA9IG9iamVjdDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChtYXBwZXJUeXBlLm1hdGNoKC9eYW55JC9pKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHBheWxvYWQgPSBvYmplY3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtYXBwZXJUeXBlLm1hdGNoKC9eKE51bWJlcnxTdHJpbmd8Qm9vbGVhbnxPYmplY3R8U3RyZWFtfFV1aWQpJC9pKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHBheWxvYWQgPSBzZXJpYWxpemVCYXNpY1R5cGVzKG1hcHBlclR5cGUsIG9iamVjdE5hbWUsIG9iamVjdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtYXBwZXJUeXBlLm1hdGNoKC9eRW51bSQvaSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbnVtTWFwcGVyID0gbWFwcGVyO1xuICAgICAgICAgICAgICAgIHBheWxvYWQgPSBzZXJpYWxpemVFbnVtVHlwZShvYmplY3ROYW1lLCBlbnVtTWFwcGVyLnR5cGUuYWxsb3dlZFZhbHVlcywgb2JqZWN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1hcHBlclR5cGUubWF0Y2goL14oRGF0ZXxEYXRlVGltZXxUaW1lU3BhbnxEYXRlVGltZVJmYzExMjN8VW5peFRpbWUpJC9pKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHBheWxvYWQgPSBzZXJpYWxpemVEYXRlVHlwZXMobWFwcGVyVHlwZSwgb2JqZWN0LCBvYmplY3ROYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1hcHBlclR5cGUubWF0Y2goL15CeXRlQXJyYXkkL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZCA9IHNlcmlhbGl6ZUJ5dGVBcnJheVR5cGUob2JqZWN0TmFtZSwgb2JqZWN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1hcHBlclR5cGUubWF0Y2goL15CYXNlNjRVcmwkL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZCA9IHNlcmlhbGl6ZUJhc2U2NFVybFR5cGUob2JqZWN0TmFtZSwgb2JqZWN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1hcHBlclR5cGUubWF0Y2goL15TZXF1ZW5jZSQvaSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBwYXlsb2FkID0gc2VyaWFsaXplU2VxdWVuY2VUeXBlKHRoaXMsIG1hcHBlciwgb2JqZWN0LCBvYmplY3ROYW1lLCBCb29sZWFuKHRoaXMuaXNYTUwpLCB1cGRhdGVkT3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtYXBwZXJUeXBlLm1hdGNoKC9eRGljdGlvbmFyeSQvaSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBwYXlsb2FkID0gc2VyaWFsaXplRGljdGlvbmFyeVR5cGUodGhpcywgbWFwcGVyLCBvYmplY3QsIG9iamVjdE5hbWUsIEJvb2xlYW4odGhpcy5pc1hNTCksIHVwZGF0ZWRPcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1hcHBlclR5cGUubWF0Y2goL15Db21wb3NpdGUkL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZCA9IHNlcmlhbGl6ZUNvbXBvc2l0ZVR5cGUodGhpcywgbWFwcGVyLCBvYmplY3QsIG9iamVjdE5hbWUsIEJvb2xlYW4odGhpcy5pc1hNTCksIHVwZGF0ZWRPcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVzZXJpYWxpemUgdGhlIGdpdmVuIG9iamVjdCBiYXNlZCBvbiBpdHMgbWV0YWRhdGEgZGVmaW5lZCBpbiB0aGUgbWFwcGVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbWFwcGVyIC0gVGhlIG1hcHBlciB3aGljaCBkZWZpbmVzIHRoZSBtZXRhZGF0YSBvZiB0aGUgc2VyaWFsaXphYmxlIG9iamVjdFxuICAgICAqXG4gICAgICogQHBhcmFtIHJlc3BvbnNlQm9keSAtIEEgdmFsaWQgSmF2YXNjcmlwdCBlbnRpdHkgdG8gYmUgZGVzZXJpYWxpemVkXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb2JqZWN0TmFtZSAtIE5hbWUgb2YgdGhlIGRlc2VyaWFsaXplZCBvYmplY3RcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gQ29udHJvbHMgYmVoYXZpb3Igb2YgWE1MIHBhcnNlciBhbmQgYnVpbGRlci5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIEEgdmFsaWQgZGVzZXJpYWxpemVkIEphdmFzY3JpcHQgb2JqZWN0XG4gICAgICovXG4gICAgZGVzZXJpYWxpemUobWFwcGVyLCByZXNwb25zZUJvZHksIG9iamVjdE5hbWUsIG9wdGlvbnMgPSB7IHhtbDoge30gfSkge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2Q7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRPcHRpb25zID0ge1xuICAgICAgICAgICAgeG1sOiB7XG4gICAgICAgICAgICAgICAgcm9vdE5hbWU6IChfYSA9IG9wdGlvbnMueG1sLnJvb3ROYW1lKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBcIlwiLFxuICAgICAgICAgICAgICAgIGluY2x1ZGVSb290OiAoX2IgPSBvcHRpb25zLnhtbC5pbmNsdWRlUm9vdCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogZmFsc2UsXG4gICAgICAgICAgICAgICAgeG1sQ2hhcktleTogKF9jID0gb3B0aW9ucy54bWwueG1sQ2hhcktleSkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogaW50ZXJmYWNlc19qc18xLlhNTF9DSEFSS0VZLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlnbm9yZVVua25vd25Qcm9wZXJ0aWVzOiAoX2QgPSBvcHRpb25zLmlnbm9yZVVua25vd25Qcm9wZXJ0aWVzKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHJlc3BvbnNlQm9keSA9PT0gdW5kZWZpbmVkIHx8IHJlc3BvbnNlQm9keSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNYTUwgJiYgbWFwcGVyLnR5cGUubmFtZSA9PT0gXCJTZXF1ZW5jZVwiICYmICFtYXBwZXIueG1sSXNXcmFwcGVkKSB7XG4gICAgICAgICAgICAgICAgLy8gRWRnZSBjYXNlIGZvciBlbXB0eSBYTUwgbm9uLXdyYXBwZWQgbGlzdHMuIHhtbDJqcyBjYW4ndCBkaXN0aW5ndWlzaFxuICAgICAgICAgICAgICAgIC8vIGJldHdlZW4gdGhlIGxpc3QgYmVpbmcgZW1wdHkgdmVyc3VzIGJlaW5nIG1pc3NpbmcsXG4gICAgICAgICAgICAgICAgLy8gc28gbGV0J3MgZG8gdGhlIG1vcmUgdXNlci1mcmllbmRseSB0aGluZyBhbmQgcmV0dXJuIGFuIGVtcHR5IGxpc3QuXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VCb2R5ID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBzcGVjaWZpY2FsbHkgY2hlY2sgZm9yIHVuZGVmaW5lZCBhcyBkZWZhdWx0IHZhbHVlIGNhbiBiZSBhIGZhbHNleSB2YWx1ZSBgMCwgXCJcIiwgZmFsc2UsIG51bGxgXG4gICAgICAgICAgICBpZiAobWFwcGVyLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VCb2R5ID0gbWFwcGVyLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZUJvZHk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHBheWxvYWQ7XG4gICAgICAgIGNvbnN0IG1hcHBlclR5cGUgPSBtYXBwZXIudHlwZS5uYW1lO1xuICAgICAgICBpZiAoIW9iamVjdE5hbWUpIHtcbiAgICAgICAgICAgIG9iamVjdE5hbWUgPSBtYXBwZXIuc2VyaWFsaXplZE5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hcHBlclR5cGUubWF0Y2goL15Db21wb3NpdGUkL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICBwYXlsb2FkID0gZGVzZXJpYWxpemVDb21wb3NpdGVUeXBlKHRoaXMsIG1hcHBlciwgcmVzcG9uc2VCb2R5LCBvYmplY3ROYW1lLCB1cGRhdGVkT3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1hNTCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXJLZXkgPSB1cGRhdGVkT3B0aW9ucy54bWwueG1sQ2hhcktleTtcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBJZiB0aGUgbWFwcGVyIHNwZWNpZmllcyB0aGlzIGFzIGEgbm9uLWNvbXBvc2l0ZSB0eXBlIHZhbHVlIGJ1dCB0aGUgcmVzcG9uc2VCb2R5IGNvbnRhaW5zXG4gICAgICAgICAgICAgICAgICogYm90aCBoZWFkZXIgKFwiJFwiIGkuZS4sIFhNTF9BVFRSS0VZKSBhbmQgYm9keSAoXCIjXCIgaS5lLiwgWE1MX0NIQVJLRVkpIHByb3BlcnRpZXMsXG4gICAgICAgICAgICAgICAgICogdGhlbiBqdXN0IHJlZHVjZSB0aGUgcmVzcG9uc2VCb2R5IHZhbHVlIHRvIHRoZSBib2R5IChcIiNcIiBpLmUuLCBYTUxfQ0hBUktFWSkgcHJvcGVydHkuXG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlQm9keVtpbnRlcmZhY2VzX2pzXzEuWE1MX0FUVFJLRVldICE9PSB1bmRlZmluZWQgJiYgcmVzcG9uc2VCb2R5W3htbENoYXJLZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VCb2R5ID0gcmVzcG9uc2VCb2R5W3htbENoYXJLZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXBwZXJUeXBlLm1hdGNoKC9eTnVtYmVyJC9pKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHBheWxvYWQgPSBwYXJzZUZsb2F0KHJlc3BvbnNlQm9keSk7XG4gICAgICAgICAgICAgICAgaWYgKGlzTmFOKHBheWxvYWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHBheWxvYWQgPSByZXNwb25zZUJvZHk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobWFwcGVyVHlwZS5tYXRjaCgvXkJvb2xlYW4kL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlQm9keSA9PT0gXCJ0cnVlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlc3BvbnNlQm9keSA9PT0gXCJmYWxzZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHBheWxvYWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBheWxvYWQgPSByZXNwb25zZUJvZHk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobWFwcGVyVHlwZS5tYXRjaCgvXihTdHJpbmd8RW51bXxPYmplY3R8U3RyZWFtfFV1aWR8VGltZVNwYW58YW55KSQvaSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBwYXlsb2FkID0gcmVzcG9uc2VCb2R5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobWFwcGVyVHlwZS5tYXRjaCgvXihEYXRlfERhdGVUaW1lfERhdGVUaW1lUmZjMTEyMykkL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZCA9IG5ldyBEYXRlKHJlc3BvbnNlQm9keSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtYXBwZXJUeXBlLm1hdGNoKC9eVW5peFRpbWUkL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZCA9IHVuaXhUaW1lVG9EYXRlKHJlc3BvbnNlQm9keSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtYXBwZXJUeXBlLm1hdGNoKC9eQnl0ZUFycmF5JC9pKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHBheWxvYWQgPSBiYXNlNjQuZGVjb2RlU3RyaW5nKHJlc3BvbnNlQm9keSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtYXBwZXJUeXBlLm1hdGNoKC9eQmFzZTY0VXJsJC9pKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHBheWxvYWQgPSBiYXNlNjRVcmxUb0J5dGVBcnJheShyZXNwb25zZUJvZHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobWFwcGVyVHlwZS5tYXRjaCgvXlNlcXVlbmNlJC9pKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHBheWxvYWQgPSBkZXNlcmlhbGl6ZVNlcXVlbmNlVHlwZSh0aGlzLCBtYXBwZXIsIHJlc3BvbnNlQm9keSwgb2JqZWN0TmFtZSwgdXBkYXRlZE9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobWFwcGVyVHlwZS5tYXRjaCgvXkRpY3Rpb25hcnkkL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZCA9IGRlc2VyaWFsaXplRGljdGlvbmFyeVR5cGUodGhpcywgbWFwcGVyLCByZXNwb25zZUJvZHksIG9iamVjdE5hbWUsIHVwZGF0ZWRPcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobWFwcGVyLmlzQ29uc3RhbnQpIHtcbiAgICAgICAgICAgIHBheWxvYWQgPSBtYXBwZXIuZGVmYXVsdFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgIH1cbn1cbi8qKlxuICogTWV0aG9kIHRoYXQgY3JlYXRlcyBhbmQgcmV0dXJucyBhIFNlcmlhbGl6ZXIuXG4gKiBAcGFyYW0gbW9kZWxNYXBwZXJzIC0gS25vd24gbW9kZWxzIHRvIG1hcFxuICogQHBhcmFtIGlzWE1MIC0gSWYgWE1MIHNob3VsZCBiZSBzdXBwb3J0ZWRcbiAqL1xuZnVuY3Rpb24gY3JlYXRlU2VyaWFsaXplcihtb2RlbE1hcHBlcnMgPSB7fSwgaXNYTUwgPSBmYWxzZSkge1xuICAgIHJldHVybiBuZXcgU2VyaWFsaXplckltcGwobW9kZWxNYXBwZXJzLCBpc1hNTCk7XG59XG5leHBvcnRzLmNyZWF0ZVNlcmlhbGl6ZXIgPSBjcmVhdGVTZXJpYWxpemVyO1xuZnVuY3Rpb24gdHJpbUVuZChzdHIsIGNoKSB7XG4gICAgbGV0IGxlbiA9IHN0ci5sZW5ndGg7XG4gICAgd2hpbGUgKGxlbiAtIDEgPj0gMCAmJiBzdHJbbGVuIC0gMV0gPT09IGNoKSB7XG4gICAgICAgIC0tbGVuO1xuICAgIH1cbiAgICByZXR1cm4gc3RyLnN1YnN0cigwLCBsZW4pO1xufVxuZnVuY3Rpb24gYnVmZmVyVG9CYXNlNjRVcmwoYnVmZmVyKSB7XG4gICAgaWYgKCFidWZmZXIpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKCEoYnVmZmVyIGluc3RhbmNlb2YgVWludDhBcnJheSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQbGVhc2UgcHJvdmlkZSBhbiBpbnB1dCBvZiB0eXBlIFVpbnQ4QXJyYXkgZm9yIGNvbnZlcnRpbmcgdG8gQmFzZTY0VXJsLmApO1xuICAgIH1cbiAgICAvLyBVaW50OEFycmF5IHRvIEJhc2U2NC5cbiAgICBjb25zdCBzdHIgPSBiYXNlNjQuZW5jb2RlQnl0ZUFycmF5KGJ1ZmZlcik7XG4gICAgLy8gQmFzZTY0IHRvIEJhc2U2NFVybC5cbiAgICByZXR1cm4gdHJpbUVuZChzdHIsIFwiPVwiKS5yZXBsYWNlKC9cXCsvZywgXCItXCIpLnJlcGxhY2UoL1xcLy9nLCBcIl9cIik7XG59XG5mdW5jdGlvbiBiYXNlNjRVcmxUb0J5dGVBcnJheShzdHIpIHtcbiAgICBpZiAoIXN0cikge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAoc3RyICYmIHR5cGVvZiBzdHIudmFsdWVPZigpICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBsZWFzZSBwcm92aWRlIGFuIGlucHV0IG9mIHR5cGUgc3RyaW5nIGZvciBjb252ZXJ0aW5nIHRvIFVpbnQ4QXJyYXlcIik7XG4gICAgfVxuICAgIC8vIEJhc2U2NFVybCB0byBCYXNlNjQuXG4gICAgc3RyID0gc3RyLnJlcGxhY2UoLy0vZywgXCIrXCIpLnJlcGxhY2UoL18vZywgXCIvXCIpO1xuICAgIC8vIEJhc2U2NCB0byBVaW50OEFycmF5LlxuICAgIHJldHVybiBiYXNlNjQuZGVjb2RlU3RyaW5nKHN0cik7XG59XG5mdW5jdGlvbiBzcGxpdFNlcmlhbGl6ZU5hbWUocHJvcCkge1xuICAgIGNvbnN0IGNsYXNzZXMgPSBbXTtcbiAgICBsZXQgcGFydGlhbGNsYXNzID0gXCJcIjtcbiAgICBpZiAocHJvcCkge1xuICAgICAgICBjb25zdCBzdWJ3b3JkcyA9IHByb3Auc3BsaXQoXCIuXCIpO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2Ygc3Vid29yZHMpIHtcbiAgICAgICAgICAgIGlmIChpdGVtLmNoYXJBdChpdGVtLmxlbmd0aCAtIDEpID09PSBcIlxcXFxcIikge1xuICAgICAgICAgICAgICAgIHBhcnRpYWxjbGFzcyArPSBpdGVtLnN1YnN0cigwLCBpdGVtLmxlbmd0aCAtIDEpICsgXCIuXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsY2xhc3MgKz0gaXRlbTtcbiAgICAgICAgICAgICAgICBjbGFzc2VzLnB1c2gocGFydGlhbGNsYXNzKTtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsY2xhc3MgPSBcIlwiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjbGFzc2VzO1xufVxuZnVuY3Rpb24gZGF0ZVRvVW5peFRpbWUoZCkge1xuICAgIGlmICghZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGQudmFsdWVPZigpID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGQgPSBuZXcgRGF0ZShkKTtcbiAgICB9XG4gICAgcmV0dXJuIE1hdGguZmxvb3IoZC5nZXRUaW1lKCkgLyAxMDAwKTtcbn1cbmZ1bmN0aW9uIHVuaXhUaW1lVG9EYXRlKG4pIHtcbiAgICBpZiAoIW4pIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBEYXRlKG4gKiAxMDAwKTtcbn1cbmZ1bmN0aW9uIHNlcmlhbGl6ZUJhc2ljVHlwZXModHlwZU5hbWUsIG9iamVjdE5hbWUsIHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVOYW1lLm1hdGNoKC9eTnVtYmVyJC9pKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtvYmplY3ROYW1lfSB3aXRoIHZhbHVlICR7dmFsdWV9IG11c3QgYmUgb2YgdHlwZSBudW1iZXIuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZU5hbWUubWF0Y2goL15TdHJpbmckL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlLnZhbHVlT2YoKSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtvYmplY3ROYW1lfSB3aXRoIHZhbHVlIFwiJHt2YWx1ZX1cIiBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVOYW1lLm1hdGNoKC9eVXVpZCQvaSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmICghKHR5cGVvZiB2YWx1ZS52YWx1ZU9mKCkgPT09IFwic3RyaW5nXCIgJiYgKDAsIHV0aWxzX2pzXzEuaXNWYWxpZFV1aWQpKHZhbHVlKSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7b2JqZWN0TmFtZX0gd2l0aCB2YWx1ZSBcIiR7dmFsdWV9XCIgbXVzdCBiZSBvZiB0eXBlIHN0cmluZyBhbmQgYSB2YWxpZCB1dWlkLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVOYW1lLm1hdGNoKC9eQm9vbGVhbiQvaSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke29iamVjdE5hbWV9IHdpdGggdmFsdWUgJHt2YWx1ZX0gbXVzdCBiZSBvZiB0eXBlIGJvb2xlYW4uYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZU5hbWUubWF0Y2goL15TdHJlYW0kL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBvYmplY3RUeXBlID0gdHlwZW9mIHZhbHVlO1xuICAgICAgICAgICAgaWYgKG9iamVjdFR5cGUgIT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgdmFsdWUucGlwZSAhPT0gXCJmdW5jdGlvblwiICYmIC8vIE5vZGVKUy5SZWFkYWJsZVN0cmVhbVxuICAgICAgICAgICAgICAgIHR5cGVvZiB2YWx1ZS50ZWUgIT09IFwiZnVuY3Rpb25cIiAmJiAvLyBicm93c2VyIFJlYWRhYmxlU3RyZWFtXG4gICAgICAgICAgICAgICAgISh2YWx1ZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSAmJlxuICAgICAgICAgICAgICAgICFBcnJheUJ1ZmZlci5pc1ZpZXcodmFsdWUpICYmXG4gICAgICAgICAgICAgICAgLy8gRmlsZSBvYmplY3RzIGNvdW50IGFzIGEgdHlwZSBvZiBCbG9iLCBzbyB3ZSB3YW50IHRvIHVzZSBpbnN0YW5jZW9mIGV4cGxpY2l0bHlcbiAgICAgICAgICAgICAgICAhKCh0eXBlb2YgQmxvYiA9PT0gXCJmdW5jdGlvblwiIHx8IHR5cGVvZiBCbG9iID09PSBcIm9iamVjdFwiKSAmJiB2YWx1ZSBpbnN0YW5jZW9mIEJsb2IpICYmXG4gICAgICAgICAgICAgICAgb2JqZWN0VHlwZSAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke29iamVjdE5hbWV9IG11c3QgYmUgYSBzdHJpbmcsIEJsb2IsIEFycmF5QnVmZmVyLCBBcnJheUJ1ZmZlclZpZXcsIFJlYWRhYmxlU3RyZWFtLCBvciAoKSA9PiBSZWFkYWJsZVN0cmVhbS5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59XG5mdW5jdGlvbiBzZXJpYWxpemVFbnVtVHlwZShvYmplY3ROYW1lLCBhbGxvd2VkVmFsdWVzLCB2YWx1ZSkge1xuICAgIGlmICghYWxsb3dlZFZhbHVlcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFBsZWFzZSBwcm92aWRlIGEgc2V0IG9mIGFsbG93ZWRWYWx1ZXMgdG8gdmFsaWRhdGUgJHtvYmplY3ROYW1lfSBhcyBhbiBFbnVtIFR5cGUuYCk7XG4gICAgfVxuICAgIGNvbnN0IGlzUHJlc2VudCA9IGFsbG93ZWRWYWx1ZXMuc29tZSgoaXRlbSkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIGl0ZW0udmFsdWVPZigpID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbS50b0xvd2VyQ2FzZSgpID09PSB2YWx1ZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpdGVtID09PSB2YWx1ZTtcbiAgICB9KTtcbiAgICBpZiAoIWlzUHJlc2VudCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dmFsdWV9IGlzIG5vdCBhIHZhbGlkIHZhbHVlIGZvciAke29iamVjdE5hbWV9LiBUaGUgdmFsaWQgdmFsdWVzIGFyZTogJHtKU09OLnN0cmluZ2lmeShhbGxvd2VkVmFsdWVzKX0uYCk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbn1cbmZ1bmN0aW9uIHNlcmlhbGl6ZUJ5dGVBcnJheVR5cGUob2JqZWN0TmFtZSwgdmFsdWUpIHtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoISh2YWx1ZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7b2JqZWN0TmFtZX0gbXVzdCBiZSBvZiB0eXBlIFVpbnQ4QXJyYXkuYCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFsdWUgPSBiYXNlNjQuZW5jb2RlQnl0ZUFycmF5KHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuZnVuY3Rpb24gc2VyaWFsaXplQmFzZTY0VXJsVHlwZShvYmplY3ROYW1lLCB2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIGlmICghKHZhbHVlIGluc3RhbmNlb2YgVWludDhBcnJheSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtvYmplY3ROYW1lfSBtdXN0IGJlIG9mIHR5cGUgVWludDhBcnJheS5gKTtcbiAgICAgICAgfVxuICAgICAgICB2YWx1ZSA9IGJ1ZmZlclRvQmFzZTY0VXJsKHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuZnVuY3Rpb24gc2VyaWFsaXplRGF0ZVR5cGVzKHR5cGVOYW1lLCB2YWx1ZSwgb2JqZWN0TmFtZSkge1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIGlmICh0eXBlTmFtZS5tYXRjaCgvXkRhdGUkL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoISh2YWx1ZSBpbnN0YW5jZW9mIERhdGUgfHxcbiAgICAgICAgICAgICAgICAodHlwZW9mIHZhbHVlLnZhbHVlT2YoKSA9PT0gXCJzdHJpbmdcIiAmJiAhaXNOYU4oRGF0ZS5wYXJzZSh2YWx1ZSkpKSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7b2JqZWN0TmFtZX0gbXVzdCBiZSBhbiBpbnN0YW5jZW9mIERhdGUgb3IgYSBzdHJpbmcgaW4gSVNPODYwMSBmb3JtYXQuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YWx1ZSA9XG4gICAgICAgICAgICAgICAgdmFsdWUgaW5zdGFuY2VvZiBEYXRlXG4gICAgICAgICAgICAgICAgICAgID8gdmFsdWUudG9JU09TdHJpbmcoKS5zdWJzdHJpbmcoMCwgMTApXG4gICAgICAgICAgICAgICAgICAgIDogbmV3IERhdGUodmFsdWUpLnRvSVNPU3RyaW5nKCkuc3Vic3RyaW5nKDAsIDEwKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlTmFtZS5tYXRjaCgvXkRhdGVUaW1lJC9pKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKCEodmFsdWUgaW5zdGFuY2VvZiBEYXRlIHx8XG4gICAgICAgICAgICAgICAgKHR5cGVvZiB2YWx1ZS52YWx1ZU9mKCkgPT09IFwic3RyaW5nXCIgJiYgIWlzTmFOKERhdGUucGFyc2UodmFsdWUpKSkpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke29iamVjdE5hbWV9IG11c3QgYmUgYW4gaW5zdGFuY2VvZiBEYXRlIG9yIGEgc3RyaW5nIGluIElTTzg2MDEgZm9ybWF0LmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSBpbnN0YW5jZW9mIERhdGUgPyB2YWx1ZS50b0lTT1N0cmluZygpIDogbmV3IERhdGUodmFsdWUpLnRvSVNPU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZU5hbWUubWF0Y2goL15EYXRlVGltZVJmYzExMjMkL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoISh2YWx1ZSBpbnN0YW5jZW9mIERhdGUgfHxcbiAgICAgICAgICAgICAgICAodHlwZW9mIHZhbHVlLnZhbHVlT2YoKSA9PT0gXCJzdHJpbmdcIiAmJiAhaXNOYU4oRGF0ZS5wYXJzZSh2YWx1ZSkpKSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7b2JqZWN0TmFtZX0gbXVzdCBiZSBhbiBpbnN0YW5jZW9mIERhdGUgb3IgYSBzdHJpbmcgaW4gUkZDLTExMjMgZm9ybWF0LmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSBpbnN0YW5jZW9mIERhdGUgPyB2YWx1ZS50b1VUQ1N0cmluZygpIDogbmV3IERhdGUodmFsdWUpLnRvVVRDU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZU5hbWUubWF0Y2goL15Vbml4VGltZSQvaSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmICghKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSB8fFxuICAgICAgICAgICAgICAgICh0eXBlb2YgdmFsdWUudmFsdWVPZigpID09PSBcInN0cmluZ1wiICYmICFpc05hTihEYXRlLnBhcnNlKHZhbHVlKSkpKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtvYmplY3ROYW1lfSBtdXN0IGJlIGFuIGluc3RhbmNlb2YgRGF0ZSBvciBhIHN0cmluZyBpbiBSRkMtMTEyMy9JU084NjAxIGZvcm1hdCBgICtcbiAgICAgICAgICAgICAgICAgICAgYGZvciBpdCB0byBiZSBzZXJpYWxpemVkIGluIFVuaXhUaW1lL0Vwb2NoIGZvcm1hdC5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhbHVlID0gZGF0ZVRvVW5peFRpbWUodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVOYW1lLm1hdGNoKC9eVGltZVNwYW4kL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoISgwLCB1dGlsc19qc18xLmlzRHVyYXRpb24pKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtvYmplY3ROYW1lfSBtdXN0IGJlIGEgc3RyaW5nIGluIElTTyA4NjAxIGZvcm1hdC4gSW5zdGVhZCB3YXMgXCIke3ZhbHVlfVwiLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbn1cbmZ1bmN0aW9uIHNlcmlhbGl6ZVNlcXVlbmNlVHlwZShzZXJpYWxpemVyLCBtYXBwZXIsIG9iamVjdCwgb2JqZWN0TmFtZSwgaXNYbWwsIG9wdGlvbnMpIHtcbiAgICB2YXIgX2E7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KG9iamVjdCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke29iamVjdE5hbWV9IG11c3QgYmUgb2YgdHlwZSBBcnJheS5gKTtcbiAgICB9XG4gICAgbGV0IGVsZW1lbnRUeXBlID0gbWFwcGVyLnR5cGUuZWxlbWVudDtcbiAgICBpZiAoIWVsZW1lbnRUeXBlIHx8IHR5cGVvZiBlbGVtZW50VHlwZSAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGVsZW1lbnRcIiBtZXRhZGF0YSBmb3IgYW4gQXJyYXkgbXVzdCBiZSBkZWZpbmVkIGluIHRoZSBgICtcbiAgICAgICAgICAgIGBtYXBwZXIgYW5kIGl0IG11c3Qgb2YgdHlwZSBcIm9iamVjdFwiIGluICR7b2JqZWN0TmFtZX0uYCk7XG4gICAgfVxuICAgIC8vIFF1aXJrOiBDb21wb3NpdGUgbWFwcGVycyByZWZlcmVuY2VkIGJ5IGBlbGVtZW50YCBtaWdodFxuICAgIC8vIG5vdCBoYXZlICphbGwqIHByb3BlcnRpZXMgZGVjbGFyZWQgKGxpa2UgdWJlclBhcmVudCksXG4gICAgLy8gc28gbGV0J3MgdHJ5IHRvIGxvb2sgdXAgdGhlIGZ1bGwgZGVmaW5pdGlvbiBieSBuYW1lLlxuICAgIGlmIChlbGVtZW50VHlwZS50eXBlLm5hbWUgPT09IFwiQ29tcG9zaXRlXCIgJiYgZWxlbWVudFR5cGUudHlwZS5jbGFzc05hbWUpIHtcbiAgICAgICAgZWxlbWVudFR5cGUgPSAoX2EgPSBzZXJpYWxpemVyLm1vZGVsTWFwcGVyc1tlbGVtZW50VHlwZS50eXBlLmNsYXNzTmFtZV0pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGVsZW1lbnRUeXBlO1xuICAgIH1cbiAgICBjb25zdCB0ZW1wQXJyYXkgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9iamVjdC5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBzZXJpYWxpemVkVmFsdWUgPSBzZXJpYWxpemVyLnNlcmlhbGl6ZShlbGVtZW50VHlwZSwgb2JqZWN0W2ldLCBvYmplY3ROYW1lLCBvcHRpb25zKTtcbiAgICAgICAgaWYgKGlzWG1sICYmIGVsZW1lbnRUeXBlLnhtbE5hbWVzcGFjZSkge1xuICAgICAgICAgICAgY29uc3QgeG1sbnNLZXkgPSBlbGVtZW50VHlwZS54bWxOYW1lc3BhY2VQcmVmaXhcbiAgICAgICAgICAgICAgICA/IGB4bWxuczoke2VsZW1lbnRUeXBlLnhtbE5hbWVzcGFjZVByZWZpeH1gXG4gICAgICAgICAgICAgICAgOiBcInhtbG5zXCI7XG4gICAgICAgICAgICBpZiAoZWxlbWVudFR5cGUudHlwZS5uYW1lID09PSBcIkNvbXBvc2l0ZVwiKSB7XG4gICAgICAgICAgICAgICAgdGVtcEFycmF5W2ldID0gT2JqZWN0LmFzc2lnbih7fSwgc2VyaWFsaXplZFZhbHVlKTtcbiAgICAgICAgICAgICAgICB0ZW1wQXJyYXlbaV1baW50ZXJmYWNlc19qc18xLlhNTF9BVFRSS0VZXSA9IHsgW3htbG5zS2V5XTogZWxlbWVudFR5cGUueG1sTmFtZXNwYWNlIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0ZW1wQXJyYXlbaV0gPSB7fTtcbiAgICAgICAgICAgICAgICB0ZW1wQXJyYXlbaV1bb3B0aW9ucy54bWwueG1sQ2hhcktleV0gPSBzZXJpYWxpemVkVmFsdWU7XG4gICAgICAgICAgICAgICAgdGVtcEFycmF5W2ldW2ludGVyZmFjZXNfanNfMS5YTUxfQVRUUktFWV0gPSB7IFt4bWxuc0tleV06IGVsZW1lbnRUeXBlLnhtbE5hbWVzcGFjZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGVtcEFycmF5W2ldID0gc2VyaWFsaXplZFZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0ZW1wQXJyYXk7XG59XG5mdW5jdGlvbiBzZXJpYWxpemVEaWN0aW9uYXJ5VHlwZShzZXJpYWxpemVyLCBtYXBwZXIsIG9iamVjdCwgb2JqZWN0TmFtZSwgaXNYbWwsIG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIG9iamVjdCAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7b2JqZWN0TmFtZX0gbXVzdCBiZSBvZiB0eXBlIG9iamVjdC5gKTtcbiAgICB9XG4gICAgY29uc3QgdmFsdWVUeXBlID0gbWFwcGVyLnR5cGUudmFsdWU7XG4gICAgaWYgKCF2YWx1ZVR5cGUgfHwgdHlwZW9mIHZhbHVlVHlwZSAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFwidmFsdWVcIiBtZXRhZGF0YSBmb3IgYSBEaWN0aW9uYXJ5IG11c3QgYmUgZGVmaW5lZCBpbiB0aGUgYCArXG4gICAgICAgICAgICBgbWFwcGVyIGFuZCBpdCBtdXN0IG9mIHR5cGUgXCJvYmplY3RcIiBpbiAke29iamVjdE5hbWV9LmApO1xuICAgIH1cbiAgICBjb25zdCB0ZW1wRGljdGlvbmFyeSA9IHt9O1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG9iamVjdCkpIHtcbiAgICAgICAgY29uc3Qgc2VyaWFsaXplZFZhbHVlID0gc2VyaWFsaXplci5zZXJpYWxpemUodmFsdWVUeXBlLCBvYmplY3Rba2V5XSwgb2JqZWN0TmFtZSwgb3B0aW9ucyk7XG4gICAgICAgIC8vIElmIHRoZSBlbGVtZW50IG5lZWRzIGFuIFhNTCBuYW1lc3BhY2Ugd2UgbmVlZCB0byBhZGQgaXQgd2l0aGluIHRoZSAkIHByb3BlcnR5XG4gICAgICAgIHRlbXBEaWN0aW9uYXJ5W2tleV0gPSBnZXRYbWxPYmplY3RWYWx1ZSh2YWx1ZVR5cGUsIHNlcmlhbGl6ZWRWYWx1ZSwgaXNYbWwsIG9wdGlvbnMpO1xuICAgIH1cbiAgICAvLyBBZGQgdGhlIG5hbWVzcGFjZSB0byB0aGUgcm9vdCBlbGVtZW50IGlmIG5lZWRlZFxuICAgIGlmIChpc1htbCAmJiBtYXBwZXIueG1sTmFtZXNwYWNlKSB7XG4gICAgICAgIGNvbnN0IHhtbG5zS2V5ID0gbWFwcGVyLnhtbE5hbWVzcGFjZVByZWZpeCA/IGB4bWxuczoke21hcHBlci54bWxOYW1lc3BhY2VQcmVmaXh9YCA6IFwieG1sbnNcIjtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGVtcERpY3Rpb25hcnk7XG4gICAgICAgIHJlc3VsdFtpbnRlcmZhY2VzX2pzXzEuWE1MX0FUVFJLRVldID0geyBbeG1sbnNLZXldOiBtYXBwZXIueG1sTmFtZXNwYWNlIH07XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIHJldHVybiB0ZW1wRGljdGlvbmFyeTtcbn1cbi8qKlxuICogUmVzb2x2ZXMgdGhlIGFkZGl0aW9uYWxQcm9wZXJ0aWVzIHByb3BlcnR5IGZyb20gYSByZWZlcmVuY2VkIG1hcHBlclxuICogQHBhcmFtIHNlcmlhbGl6ZXIgLSB0aGUgc2VyaWFsaXplciBjb250YWluaW5nIHRoZSBlbnRpcmUgc2V0IG9mIG1hcHBlcnNcbiAqIEBwYXJhbSBtYXBwZXIgLSB0aGUgY29tcG9zaXRlIG1hcHBlciB0byByZXNvbHZlXG4gKiBAcGFyYW0gb2JqZWN0TmFtZSAtIG5hbWUgb2YgdGhlIG9iamVjdCBiZWluZyBzZXJpYWxpemVkXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVBZGRpdGlvbmFsUHJvcGVydGllcyhzZXJpYWxpemVyLCBtYXBwZXIsIG9iamVjdE5hbWUpIHtcbiAgICBjb25zdCBhZGRpdGlvbmFsUHJvcGVydGllcyA9IG1hcHBlci50eXBlLmFkZGl0aW9uYWxQcm9wZXJ0aWVzO1xuICAgIGlmICghYWRkaXRpb25hbFByb3BlcnRpZXMgJiYgbWFwcGVyLnR5cGUuY2xhc3NOYW1lKSB7XG4gICAgICAgIGNvbnN0IG1vZGVsTWFwcGVyID0gcmVzb2x2ZVJlZmVyZW5jZWRNYXBwZXIoc2VyaWFsaXplciwgbWFwcGVyLCBvYmplY3ROYW1lKTtcbiAgICAgICAgcmV0dXJuIG1vZGVsTWFwcGVyID09PSBudWxsIHx8IG1vZGVsTWFwcGVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBtb2RlbE1hcHBlci50eXBlLmFkZGl0aW9uYWxQcm9wZXJ0aWVzO1xuICAgIH1cbiAgICByZXR1cm4gYWRkaXRpb25hbFByb3BlcnRpZXM7XG59XG4vKipcbiAqIEZpbmRzIHRoZSBtYXBwZXIgcmVmZXJlbmNlZCBieSBjbGFzc05hbWVcbiAqIEBwYXJhbSBzZXJpYWxpemVyIC0gdGhlIHNlcmlhbGl6ZXIgY29udGFpbmluZyB0aGUgZW50aXJlIHNldCBvZiBtYXBwZXJzXG4gKiBAcGFyYW0gbWFwcGVyIC0gdGhlIGNvbXBvc2l0ZSBtYXBwZXIgdG8gcmVzb2x2ZVxuICogQHBhcmFtIG9iamVjdE5hbWUgLSBuYW1lIG9mIHRoZSBvYmplY3QgYmVpbmcgc2VyaWFsaXplZFxuICovXG5mdW5jdGlvbiByZXNvbHZlUmVmZXJlbmNlZE1hcHBlcihzZXJpYWxpemVyLCBtYXBwZXIsIG9iamVjdE5hbWUpIHtcbiAgICBjb25zdCBjbGFzc05hbWUgPSBtYXBwZXIudHlwZS5jbGFzc05hbWU7XG4gICAgaWYgKCFjbGFzc05hbWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDbGFzcyBuYW1lIGZvciBtb2RlbCBcIiR7b2JqZWN0TmFtZX1cIiBpcyBub3QgcHJvdmlkZWQgaW4gdGhlIG1hcHBlciBcIiR7SlNPTi5zdHJpbmdpZnkobWFwcGVyLCB1bmRlZmluZWQsIDIpfVwiLmApO1xuICAgIH1cbiAgICByZXR1cm4gc2VyaWFsaXplci5tb2RlbE1hcHBlcnNbY2xhc3NOYW1lXTtcbn1cbi8qKlxuICogUmVzb2x2ZXMgYSBjb21wb3NpdGUgbWFwcGVyJ3MgbW9kZWxQcm9wZXJ0aWVzLlxuICogQHBhcmFtIHNlcmlhbGl6ZXIgLSB0aGUgc2VyaWFsaXplciBjb250YWluaW5nIHRoZSBlbnRpcmUgc2V0IG9mIG1hcHBlcnNcbiAqIEBwYXJhbSBtYXBwZXIgLSB0aGUgY29tcG9zaXRlIG1hcHBlciB0byByZXNvbHZlXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVNb2RlbFByb3BlcnRpZXMoc2VyaWFsaXplciwgbWFwcGVyLCBvYmplY3ROYW1lKSB7XG4gICAgbGV0IG1vZGVsUHJvcHMgPSBtYXBwZXIudHlwZS5tb2RlbFByb3BlcnRpZXM7XG4gICAgaWYgKCFtb2RlbFByb3BzKSB7XG4gICAgICAgIGNvbnN0IG1vZGVsTWFwcGVyID0gcmVzb2x2ZVJlZmVyZW5jZWRNYXBwZXIoc2VyaWFsaXplciwgbWFwcGVyLCBvYmplY3ROYW1lKTtcbiAgICAgICAgaWYgKCFtb2RlbE1hcHBlcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBtYXBwZXIoKSBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQgZm9yIG1vZGVsIFwiJHttYXBwZXIudHlwZS5jbGFzc05hbWV9XCIuYCk7XG4gICAgICAgIH1cbiAgICAgICAgbW9kZWxQcm9wcyA9IG1vZGVsTWFwcGVyID09PSBudWxsIHx8IG1vZGVsTWFwcGVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBtb2RlbE1hcHBlci50eXBlLm1vZGVsUHJvcGVydGllcztcbiAgICAgICAgaWYgKCFtb2RlbFByb3BzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYG1vZGVsUHJvcGVydGllcyBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQgaW4gdGhlIGAgK1xuICAgICAgICAgICAgICAgIGBtYXBwZXIgXCIke0pTT04uc3RyaW5naWZ5KG1vZGVsTWFwcGVyKX1cIiBvZiB0eXBlIFwiJHttYXBwZXIudHlwZS5jbGFzc05hbWV9XCIgZm9yIG9iamVjdCBcIiR7b2JqZWN0TmFtZX1cIi5gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbW9kZWxQcm9wcztcbn1cbmZ1bmN0aW9uIHNlcmlhbGl6ZUNvbXBvc2l0ZVR5cGUoc2VyaWFsaXplciwgbWFwcGVyLCBvYmplY3QsIG9iamVjdE5hbWUsIGlzWG1sLCBvcHRpb25zKSB7XG4gICAgaWYgKGdldFBvbHltb3JwaGljRGlzY3JpbWluYXRvclJlY3Vyc2l2ZWx5KHNlcmlhbGl6ZXIsIG1hcHBlcikpIHtcbiAgICAgICAgbWFwcGVyID0gZ2V0UG9seW1vcnBoaWNNYXBwZXIoc2VyaWFsaXplciwgbWFwcGVyLCBvYmplY3QsIFwiY2xpZW50TmFtZVwiKTtcbiAgICB9XG4gICAgaWYgKG9iamVjdCAhPT0gdW5kZWZpbmVkICYmIG9iamVjdCAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBwYXlsb2FkID0ge307XG4gICAgICAgIGNvbnN0IG1vZGVsUHJvcHMgPSByZXNvbHZlTW9kZWxQcm9wZXJ0aWVzKHNlcmlhbGl6ZXIsIG1hcHBlciwgb2JqZWN0TmFtZSk7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG1vZGVsUHJvcHMpKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0eU1hcHBlciA9IG1vZGVsUHJvcHNba2V5XTtcbiAgICAgICAgICAgIGlmIChwcm9wZXJ0eU1hcHBlci5yZWFkT25seSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHByb3BOYW1lO1xuICAgICAgICAgICAgbGV0IHBhcmVudE9iamVjdCA9IHBheWxvYWQ7XG4gICAgICAgICAgICBpZiAoc2VyaWFsaXplci5pc1hNTCkge1xuICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eU1hcHBlci54bWxJc1dyYXBwZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcE5hbWUgPSBwcm9wZXJ0eU1hcHBlci54bWxOYW1lO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcE5hbWUgPSBwcm9wZXJ0eU1hcHBlci54bWxFbGVtZW50TmFtZSB8fCBwcm9wZXJ0eU1hcHBlci54bWxOYW1lO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGhzID0gc3BsaXRTZXJpYWxpemVOYW1lKHByb3BlcnR5TWFwcGVyLnNlcmlhbGl6ZWROYW1lKTtcbiAgICAgICAgICAgICAgICBwcm9wTmFtZSA9IHBhdGhzLnBvcCgpO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcGF0aE5hbWUgb2YgcGF0aHMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGRPYmplY3QgPSBwYXJlbnRPYmplY3RbcGF0aE5hbWVdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGNoaWxkT2JqZWN0ID09PSB1bmRlZmluZWQgfHwgY2hpbGRPYmplY3QgPT09IG51bGwpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAoKG9iamVjdFtrZXldICE9PSB1bmRlZmluZWQgJiYgb2JqZWN0W2tleV0gIT09IG51bGwpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlNYXBwZXIuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRPYmplY3RbcGF0aE5hbWVdID0ge307XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcGFyZW50T2JqZWN0ID0gcGFyZW50T2JqZWN0W3BhdGhOYW1lXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocGFyZW50T2JqZWN0ICE9PSB1bmRlZmluZWQgJiYgcGFyZW50T2JqZWN0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzWG1sICYmIG1hcHBlci54bWxOYW1lc3BhY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeG1sbnNLZXkgPSBtYXBwZXIueG1sTmFtZXNwYWNlUHJlZml4XG4gICAgICAgICAgICAgICAgICAgICAgICA/IGB4bWxuczoke21hcHBlci54bWxOYW1lc3BhY2VQcmVmaXh9YFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBcInhtbG5zXCI7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudE9iamVjdFtpbnRlcmZhY2VzX2pzXzEuWE1MX0FUVFJLRVldID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwYXJlbnRPYmplY3RbaW50ZXJmYWNlc19qc18xLlhNTF9BVFRSS0VZXSksIHsgW3htbG5zS2V5XTogbWFwcGVyLnhtbE5hbWVzcGFjZSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvcGVydHlPYmplY3ROYW1lID0gcHJvcGVydHlNYXBwZXIuc2VyaWFsaXplZE5hbWUgIT09IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgPyBvYmplY3ROYW1lICsgXCIuXCIgKyBwcm9wZXJ0eU1hcHBlci5zZXJpYWxpemVkTmFtZVxuICAgICAgICAgICAgICAgICAgICA6IG9iamVjdE5hbWU7XG4gICAgICAgICAgICAgICAgbGV0IHRvU2VyaWFsaXplID0gb2JqZWN0W2tleV07XG4gICAgICAgICAgICAgICAgY29uc3QgcG9seW1vcnBoaWNEaXNjcmltaW5hdG9yID0gZ2V0UG9seW1vcnBoaWNEaXNjcmltaW5hdG9yUmVjdXJzaXZlbHkoc2VyaWFsaXplciwgbWFwcGVyKTtcbiAgICAgICAgICAgICAgICBpZiAocG9seW1vcnBoaWNEaXNjcmltaW5hdG9yICYmXG4gICAgICAgICAgICAgICAgICAgIHBvbHltb3JwaGljRGlzY3JpbWluYXRvci5jbGllbnROYW1lID09PSBrZXkgJiZcbiAgICAgICAgICAgICAgICAgICAgKHRvU2VyaWFsaXplID09PSB1bmRlZmluZWQgfHwgdG9TZXJpYWxpemUgPT09IG51bGwpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRvU2VyaWFsaXplID0gbWFwcGVyLnNlcmlhbGl6ZWROYW1lO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBzZXJpYWxpemVkVmFsdWUgPSBzZXJpYWxpemVyLnNlcmlhbGl6ZShwcm9wZXJ0eU1hcHBlciwgdG9TZXJpYWxpemUsIHByb3BlcnR5T2JqZWN0TmFtZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgaWYgKHNlcmlhbGl6ZWRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIHByb3BOYW1lICE9PSB1bmRlZmluZWQgJiYgcHJvcE5hbWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBnZXRYbWxPYmplY3RWYWx1ZShwcm9wZXJ0eU1hcHBlciwgc2VyaWFsaXplZFZhbHVlLCBpc1htbCwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1htbCAmJiBwcm9wZXJ0eU1hcHBlci54bWxJc0F0dHJpYnV0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gWE1MX0FUVFJLRVksIGkuZS4sICQgaXMgdGhlIGtleSBhdHRyaWJ1dGVzIGFyZSBrZXB0IHVuZGVyIGluIHhtbDJqcy5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMga2VlcHMgdGhpbmdzIHNpbXBsZSB3aGlsZSBwcmV2ZW50aW5nIG5hbWUgY29sbGlzaW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB3aXRoIG5hbWVzIGluIHVzZXIgZG9jdW1lbnRzLlxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50T2JqZWN0W2ludGVyZmFjZXNfanNfMS5YTUxfQVRUUktFWV0gPSBwYXJlbnRPYmplY3RbaW50ZXJmYWNlc19qc18xLlhNTF9BVFRSS0VZXSB8fCB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE9iamVjdFtpbnRlcmZhY2VzX2pzXzEuWE1MX0FUVFJLRVldW3Byb3BOYW1lXSA9IHNlcmlhbGl6ZWRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpc1htbCAmJiBwcm9wZXJ0eU1hcHBlci54bWxJc1dyYXBwZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE9iamVjdFtwcm9wTmFtZV0gPSB7IFtwcm9wZXJ0eU1hcHBlci54bWxFbGVtZW50TmFtZV06IHZhbHVlIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRPYmplY3RbcHJvcE5hbWVdID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWRkaXRpb25hbFByb3BlcnRpZXNNYXBwZXIgPSByZXNvbHZlQWRkaXRpb25hbFByb3BlcnRpZXMoc2VyaWFsaXplciwgbWFwcGVyLCBvYmplY3ROYW1lKTtcbiAgICAgICAgaWYgKGFkZGl0aW9uYWxQcm9wZXJ0aWVzTWFwcGVyKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9wTmFtZXMgPSBPYmplY3Qua2V5cyhtb2RlbFByb3BzKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY2xpZW50UHJvcE5hbWUgaW4gb2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNBZGRpdGlvbmFsUHJvcGVydHkgPSBwcm9wTmFtZXMuZXZlcnkoKHBuKSA9PiBwbiAhPT0gY2xpZW50UHJvcE5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChpc0FkZGl0aW9uYWxQcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkW2NsaWVudFByb3BOYW1lXSA9IHNlcmlhbGl6ZXIuc2VyaWFsaXplKGFkZGl0aW9uYWxQcm9wZXJ0aWVzTWFwcGVyLCBvYmplY3RbY2xpZW50UHJvcE5hbWVdLCBvYmplY3ROYW1lICsgJ1tcIicgKyBjbGllbnRQcm9wTmFtZSArICdcIl0nLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgfVxuICAgIHJldHVybiBvYmplY3Q7XG59XG5mdW5jdGlvbiBnZXRYbWxPYmplY3RWYWx1ZShwcm9wZXJ0eU1hcHBlciwgc2VyaWFsaXplZFZhbHVlLCBpc1htbCwgb3B0aW9ucykge1xuICAgIGlmICghaXNYbWwgfHwgIXByb3BlcnR5TWFwcGVyLnhtbE5hbWVzcGFjZSkge1xuICAgICAgICByZXR1cm4gc2VyaWFsaXplZFZhbHVlO1xuICAgIH1cbiAgICBjb25zdCB4bWxuc0tleSA9IHByb3BlcnR5TWFwcGVyLnhtbE5hbWVzcGFjZVByZWZpeFxuICAgICAgICA/IGB4bWxuczoke3Byb3BlcnR5TWFwcGVyLnhtbE5hbWVzcGFjZVByZWZpeH1gXG4gICAgICAgIDogXCJ4bWxuc1wiO1xuICAgIGNvbnN0IHhtbE5hbWVzcGFjZSA9IHsgW3htbG5zS2V5XTogcHJvcGVydHlNYXBwZXIueG1sTmFtZXNwYWNlIH07XG4gICAgaWYgKFtcIkNvbXBvc2l0ZVwiXS5pbmNsdWRlcyhwcm9wZXJ0eU1hcHBlci50eXBlLm5hbWUpKSB7XG4gICAgICAgIGlmIChzZXJpYWxpemVkVmFsdWVbaW50ZXJmYWNlc19qc18xLlhNTF9BVFRSS0VZXSkge1xuICAgICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZWRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IE9iamVjdC5hc3NpZ24oe30sIHNlcmlhbGl6ZWRWYWx1ZSk7XG4gICAgICAgICAgICByZXN1bHRbaW50ZXJmYWNlc19qc18xLlhNTF9BVFRSS0VZXSA9IHhtbE5hbWVzcGFjZTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgcmVzdWx0W29wdGlvbnMueG1sLnhtbENoYXJLZXldID0gc2VyaWFsaXplZFZhbHVlO1xuICAgIHJlc3VsdFtpbnRlcmZhY2VzX2pzXzEuWE1MX0FUVFJLRVldID0geG1sTmFtZXNwYWNlO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBpc1NwZWNpYWxYbWxQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gW2ludGVyZmFjZXNfanNfMS5YTUxfQVRUUktFWSwgb3B0aW9ucy54bWwueG1sQ2hhcktleV0uaW5jbHVkZXMocHJvcGVydHlOYW1lKTtcbn1cbmZ1bmN0aW9uIGRlc2VyaWFsaXplQ29tcG9zaXRlVHlwZShzZXJpYWxpemVyLCBtYXBwZXIsIHJlc3BvbnNlQm9keSwgb2JqZWN0TmFtZSwgb3B0aW9ucykge1xuICAgIHZhciBfYSwgX2I7XG4gICAgY29uc3QgeG1sQ2hhcktleSA9IChfYSA9IG9wdGlvbnMueG1sLnhtbENoYXJLZXkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGludGVyZmFjZXNfanNfMS5YTUxfQ0hBUktFWTtcbiAgICBpZiAoZ2V0UG9seW1vcnBoaWNEaXNjcmltaW5hdG9yUmVjdXJzaXZlbHkoc2VyaWFsaXplciwgbWFwcGVyKSkge1xuICAgICAgICBtYXBwZXIgPSBnZXRQb2x5bW9ycGhpY01hcHBlcihzZXJpYWxpemVyLCBtYXBwZXIsIHJlc3BvbnNlQm9keSwgXCJzZXJpYWxpemVkTmFtZVwiKTtcbiAgICB9XG4gICAgY29uc3QgbW9kZWxQcm9wcyA9IHJlc29sdmVNb2RlbFByb3BlcnRpZXMoc2VyaWFsaXplciwgbWFwcGVyLCBvYmplY3ROYW1lKTtcbiAgICBsZXQgaW5zdGFuY2UgPSB7fTtcbiAgICBjb25zdCBoYW5kbGVkUHJvcGVydHlOYW1lcyA9IFtdO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG1vZGVsUHJvcHMpKSB7XG4gICAgICAgIGNvbnN0IHByb3BlcnR5TWFwcGVyID0gbW9kZWxQcm9wc1trZXldO1xuICAgICAgICBjb25zdCBwYXRocyA9IHNwbGl0U2VyaWFsaXplTmFtZShtb2RlbFByb3BzW2tleV0uc2VyaWFsaXplZE5hbWUpO1xuICAgICAgICBoYW5kbGVkUHJvcGVydHlOYW1lcy5wdXNoKHBhdGhzWzBdKTtcbiAgICAgICAgY29uc3QgeyBzZXJpYWxpemVkTmFtZSwgeG1sTmFtZSwgeG1sRWxlbWVudE5hbWUgfSA9IHByb3BlcnR5TWFwcGVyO1xuICAgICAgICBsZXQgcHJvcGVydHlPYmplY3ROYW1lID0gb2JqZWN0TmFtZTtcbiAgICAgICAgaWYgKHNlcmlhbGl6ZWROYW1lICE9PSBcIlwiICYmIHNlcmlhbGl6ZWROYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHByb3BlcnR5T2JqZWN0TmFtZSA9IG9iamVjdE5hbWUgKyBcIi5cIiArIHNlcmlhbGl6ZWROYW1lO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhlYWRlckNvbGxlY3Rpb25QcmVmaXggPSBwcm9wZXJ0eU1hcHBlci5oZWFkZXJDb2xsZWN0aW9uUHJlZml4O1xuICAgICAgICBpZiAoaGVhZGVyQ29sbGVjdGlvblByZWZpeCkge1xuICAgICAgICAgICAgY29uc3QgZGljdGlvbmFyeSA9IHt9O1xuICAgICAgICAgICAgZm9yIChjb25zdCBoZWFkZXJLZXkgb2YgT2JqZWN0LmtleXMocmVzcG9uc2VCb2R5KSkge1xuICAgICAgICAgICAgICAgIGlmIChoZWFkZXJLZXkuc3RhcnRzV2l0aChoZWFkZXJDb2xsZWN0aW9uUHJlZml4KSkge1xuICAgICAgICAgICAgICAgICAgICBkaWN0aW9uYXJ5W2hlYWRlcktleS5zdWJzdHJpbmcoaGVhZGVyQ29sbGVjdGlvblByZWZpeC5sZW5ndGgpXSA9IHNlcmlhbGl6ZXIuZGVzZXJpYWxpemUocHJvcGVydHlNYXBwZXIudHlwZS52YWx1ZSwgcmVzcG9uc2VCb2R5W2hlYWRlcktleV0sIHByb3BlcnR5T2JqZWN0TmFtZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGhhbmRsZWRQcm9wZXJ0eU5hbWVzLnB1c2goaGVhZGVyS2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGluc3RhbmNlW2tleV0gPSBkaWN0aW9uYXJ5O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNlcmlhbGl6ZXIuaXNYTUwpIHtcbiAgICAgICAgICAgIGlmIChwcm9wZXJ0eU1hcHBlci54bWxJc0F0dHJpYnV0ZSAmJiByZXNwb25zZUJvZHlbaW50ZXJmYWNlc19qc18xLlhNTF9BVFRSS0VZXSkge1xuICAgICAgICAgICAgICAgIGluc3RhbmNlW2tleV0gPSBzZXJpYWxpemVyLmRlc2VyaWFsaXplKHByb3BlcnR5TWFwcGVyLCByZXNwb25zZUJvZHlbaW50ZXJmYWNlc19qc18xLlhNTF9BVFRSS0VZXVt4bWxOYW1lXSwgcHJvcGVydHlPYmplY3ROYW1lLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHByb3BlcnR5TWFwcGVyLnhtbElzTXNUZXh0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlQm9keVt4bWxDaGFyS2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGluc3RhbmNlW2tleV0gPSByZXNwb25zZUJvZHlbeG1sQ2hhcktleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiByZXNwb25zZUJvZHkgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHNwZWNpYWwgY2FzZSB3aGVyZSB4bWwgcGFyc2VyIHBhcnNlcyBcIjxOYW1lPmNvbnRlbnQ8L05hbWU+XCIgaW50byBKU09OIG9mXG4gICAgICAgICAgICAgICAgICAgIC8vICAgYHsgbmFtZTogXCJjb250ZW50XCJ9YCBpbnN0ZWFkIG9mIGB7IG5hbWU6IHsgXCJfXCI6IFwiY29udGVudFwiIH19YFxuICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZVtrZXldID0gcmVzcG9uc2VCb2R5O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5TmFtZSA9IHhtbEVsZW1lbnROYW1lIHx8IHhtbE5hbWUgfHwgc2VyaWFsaXplZE5hbWU7XG4gICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5TWFwcGVyLnhtbElzV3JhcHBlZCkge1xuICAgICAgICAgICAgICAgICAgICAvKiBhIGxpc3Qgb2YgPHhtbEVsZW1lbnROYW1lPiB3cmFwcGVkIGJ5IDx4bWxOYW1lPlxuICAgICAgICAgICAgICAgICAgICAgIEZvciB0aGUgeG1sIGV4YW1wbGUgYmVsb3dcbiAgICAgICAgICAgICAgICAgICAgICAgIDxDb3JzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8Q29yc1J1bGU+Li4uPC9Db3JzUnVsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPENvcnNSdWxlPi4uLjwvQ29yc1J1bGU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0NvcnM+XG4gICAgICAgICAgICAgICAgICAgICAgdGhlIHJlc3BvbnNlQm9keSBoYXNcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgQ29yczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcnNSdWxlOiBbey4uLn0sIHsuLi59XVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgeG1sTmFtZSBpcyBcIkNvcnNcIiBhbmQgeG1sRWxlbWVudE5hbWUgaXNcIkNvcnNSdWxlXCIuXG4gICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHdyYXBwZWQgPSByZXNwb25zZUJvZHlbeG1sTmFtZV07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRMaXN0ID0gKF9iID0gd3JhcHBlZCA9PT0gbnVsbCB8fCB3cmFwcGVkID09PSB2b2lkIDAgPyB2b2lkIDAgOiB3cmFwcGVkW3htbEVsZW1lbnROYW1lXSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogW107XG4gICAgICAgICAgICAgICAgICAgIGluc3RhbmNlW2tleV0gPSBzZXJpYWxpemVyLmRlc2VyaWFsaXplKHByb3BlcnR5TWFwcGVyLCBlbGVtZW50TGlzdCwgcHJvcGVydHlPYmplY3ROYW1lLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlZFByb3BlcnR5TmFtZXMucHVzaCh4bWxOYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5ID0gcmVzcG9uc2VCb2R5W3Byb3BlcnR5TmFtZV07XG4gICAgICAgICAgICAgICAgICAgIGluc3RhbmNlW2tleV0gPSBzZXJpYWxpemVyLmRlc2VyaWFsaXplKHByb3BlcnR5TWFwcGVyLCBwcm9wZXJ0eSwgcHJvcGVydHlPYmplY3ROYW1lLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlZFByb3BlcnR5TmFtZXMucHVzaChwcm9wZXJ0eU5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIGRlc2VyaWFsaXplIHRoZSBwcm9wZXJ0eSBpZiBpdCBpcyBwcmVzZW50IGluIHRoZSBwcm92aWRlZCByZXNwb25zZUJvZHkgaW5zdGFuY2VcbiAgICAgICAgICAgIGxldCBwcm9wZXJ0eUluc3RhbmNlO1xuICAgICAgICAgICAgbGV0IHJlcyA9IHJlc3BvbnNlQm9keTtcbiAgICAgICAgICAgIC8vIHRyYXZlcnNpbmcgdGhlIG9iamVjdCBzdGVwIGJ5IHN0ZXAuXG4gICAgICAgICAgICBsZXQgc3RlcHMgPSAwO1xuICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHBhdGhzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFyZXMpXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIHN0ZXBzKys7XG4gICAgICAgICAgICAgICAgcmVzID0gcmVzW2l0ZW1dO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gb25seSBhY2NlcHQgbnVsbCB3aGVuIHJlYWNoaW5nIHRoZSBsYXN0IHBvc2l0aW9uIG9mIG9iamVjdCBvdGhlcndpc2UgaXQgd291bGQgYmUgdW5kZWZpbmVkXG4gICAgICAgICAgICBpZiAocmVzID09PSBudWxsICYmIHN0ZXBzIDwgcGF0aHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmVzID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcHJvcGVydHlJbnN0YW5jZSA9IHJlcztcbiAgICAgICAgICAgIGNvbnN0IHBvbHltb3JwaGljRGlzY3JpbWluYXRvciA9IG1hcHBlci50eXBlLnBvbHltb3JwaGljRGlzY3JpbWluYXRvcjtcbiAgICAgICAgICAgIC8vIGNoZWNraW5nIHRoYXQgdGhlIG1vZGVsIHByb3BlcnR5IG5hbWUgKGtleSkoZXg6IFwiZmlzaHR5cGVcIikgYW5kIHRoZVxuICAgICAgICAgICAgLy8gY2xpZW50TmFtZSBvZiB0aGUgcG9seW1vcnBoaWNEaXNjcmltaW5hdG9yIHttZXRhZGF0YX0gKGV4OiBcImZpc2h0eXBlXCIpXG4gICAgICAgICAgICAvLyBpbnN0ZWFkIG9mIHRoZSBzZXJpYWxpemVkTmFtZSBvZiB0aGUgcG9seW1vcnBoaWNEaXNjcmltaW5hdG9yIChleDogXCJmaXNoLnR5cGVcIilcbiAgICAgICAgICAgIC8vIGlzIGEgYmV0dGVyIGFwcHJvYWNoLiBUaGUgZ2VuZXJhdG9yIGlzIG5vdCBjb25zaXN0ZW50IHdpdGggZXNjYXBpbmcgJ1xcLicgaW4gdGhlXG4gICAgICAgICAgICAvLyBzZXJpYWxpemVkTmFtZSBvZiB0aGUgcHJvcGVydHkgKGV4OiBcImZpc2hcXC50eXBlXCIpIHRoYXQgaXMgbWFya2VkIGFzIHBvbHltb3JwaGljIGRpc2NyaW1pbmF0b3JcbiAgICAgICAgICAgIC8vIGFuZCB0aGUgc2VyaWFsaXplZE5hbWUgb2YgdGhlIG1ldGFkYXRhIHBvbHltb3JwaGljRGlzY3JpbWluYXRvciAoZXg6IFwiZmlzaC50eXBlXCIpLiBIb3dldmVyLFxuICAgICAgICAgICAgLy8gdGhlIGNsaWVudE5hbWUgdHJhbnNmb3JtYXRpb24gb2YgdGhlIHBvbHltb3JwaGljRGlzY3JpbWluYXRvciAoZXg6IFwiZmlzaHR5cGVcIikgYW5kXG4gICAgICAgICAgICAvLyB0aGUgdHJhbnNmb3JtYXRpb24gb2YgbW9kZWwgcHJvcGVydHkgbmFtZSAoZXg6IFwiZmlzaHR5cGVcIikgaXMgZG9uZSBjb25zaXN0ZW50bHkuXG4gICAgICAgICAgICAvLyBIZW5jZSwgaXQgaXMgYSBzYWZlciBiZXQgdG8gcmVseSBvbiB0aGUgY2xpZW50TmFtZSBvZiB0aGUgcG9seW1vcnBoaWNEaXNjcmltaW5hdG9yLlxuICAgICAgICAgICAgaWYgKHBvbHltb3JwaGljRGlzY3JpbWluYXRvciAmJlxuICAgICAgICAgICAgICAgIGtleSA9PT0gcG9seW1vcnBoaWNEaXNjcmltaW5hdG9yLmNsaWVudE5hbWUgJiZcbiAgICAgICAgICAgICAgICAocHJvcGVydHlJbnN0YW5jZSA9PT0gdW5kZWZpbmVkIHx8IHByb3BlcnR5SW5zdGFuY2UgPT09IG51bGwpKSB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHlJbnN0YW5jZSA9IG1hcHBlci5zZXJpYWxpemVkTmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBzZXJpYWxpemVkVmFsdWU7XG4gICAgICAgICAgICAvLyBwYWdpbmdcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3BvbnNlQm9keVtrZXldKSAmJiBtb2RlbFByb3BzW2tleV0uc2VyaWFsaXplZE5hbWUgPT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eUluc3RhbmNlID0gcmVzcG9uc2VCb2R5W2tleV07XG4gICAgICAgICAgICAgICAgY29uc3QgYXJyYXlJbnN0YW5jZSA9IHNlcmlhbGl6ZXIuZGVzZXJpYWxpemUocHJvcGVydHlNYXBwZXIsIHByb3BlcnR5SW5zdGFuY2UsIHByb3BlcnR5T2JqZWN0TmFtZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgLy8gQ29weSBvdmVyIGFueSBwcm9wZXJ0aWVzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gYWRkZWQgaW50byB0aGUgaW5zdGFuY2UsIHdoZXJlIHRoZXkgZG9cbiAgICAgICAgICAgICAgICAvLyBub3QgZXhpc3Qgb24gdGhlIG5ld2x5IGRlLXNlcmlhbGl6ZWQgYXJyYXlcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhpbnN0YW5jZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYXJyYXlJbnN0YW5jZSwgaykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5SW5zdGFuY2Vba10gPSB2O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGluc3RhbmNlID0gYXJyYXlJbnN0YW5jZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHByb3BlcnR5SW5zdGFuY2UgIT09IHVuZGVmaW5lZCB8fCBwcm9wZXJ0eU1hcHBlci5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWRWYWx1ZSA9IHNlcmlhbGl6ZXIuZGVzZXJpYWxpemUocHJvcGVydHlNYXBwZXIsIHByb3BlcnR5SW5zdGFuY2UsIHByb3BlcnR5T2JqZWN0TmFtZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgaW5zdGFuY2Vba2V5XSA9IHNlcmlhbGl6ZWRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBhZGRpdGlvbmFsUHJvcGVydGllc01hcHBlciA9IG1hcHBlci50eXBlLmFkZGl0aW9uYWxQcm9wZXJ0aWVzO1xuICAgIGlmIChhZGRpdGlvbmFsUHJvcGVydGllc01hcHBlcikge1xuICAgICAgICBjb25zdCBpc0FkZGl0aW9uYWxQcm9wZXJ0eSA9IChyZXNwb25zZVByb3BOYW1lKSA9PiB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNsaWVudFByb3BOYW1lIGluIG1vZGVsUHJvcHMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXRocyA9IHNwbGl0U2VyaWFsaXplTmFtZShtb2RlbFByb3BzW2NsaWVudFByb3BOYW1lXS5zZXJpYWxpemVkTmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKHBhdGhzWzBdID09PSByZXNwb25zZVByb3BOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfTtcbiAgICAgICAgZm9yIChjb25zdCByZXNwb25zZVByb3BOYW1lIGluIHJlc3BvbnNlQm9keSkge1xuICAgICAgICAgICAgaWYgKGlzQWRkaXRpb25hbFByb3BlcnR5KHJlc3BvbnNlUHJvcE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgaW5zdGFuY2VbcmVzcG9uc2VQcm9wTmFtZV0gPSBzZXJpYWxpemVyLmRlc2VyaWFsaXplKGFkZGl0aW9uYWxQcm9wZXJ0aWVzTWFwcGVyLCByZXNwb25zZUJvZHlbcmVzcG9uc2VQcm9wTmFtZV0sIG9iamVjdE5hbWUgKyAnW1wiJyArIHJlc3BvbnNlUHJvcE5hbWUgKyAnXCJdJywgb3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAocmVzcG9uc2VCb2R5ICYmICFvcHRpb25zLmlnbm9yZVVua25vd25Qcm9wZXJ0aWVzKSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHJlc3BvbnNlQm9keSkpIHtcbiAgICAgICAgICAgIGlmIChpbnN0YW5jZVtrZXldID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAhaGFuZGxlZFByb3BlcnR5TmFtZXMuaW5jbHVkZXMoa2V5KSAmJlxuICAgICAgICAgICAgICAgICFpc1NwZWNpYWxYbWxQcm9wZXJ0eShrZXksIG9wdGlvbnMpKSB7XG4gICAgICAgICAgICAgICAgaW5zdGFuY2Vba2V5XSA9IHJlc3BvbnNlQm9keVtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpbnN0YW5jZTtcbn1cbmZ1bmN0aW9uIGRlc2VyaWFsaXplRGljdGlvbmFyeVR5cGUoc2VyaWFsaXplciwgbWFwcGVyLCByZXNwb25zZUJvZHksIG9iamVjdE5hbWUsIG9wdGlvbnMpIHtcbiAgICAvKiBqc2hpbnQgdmFsaWR0aGlzOiB0cnVlICovXG4gICAgY29uc3QgdmFsdWUgPSBtYXBwZXIudHlwZS52YWx1ZTtcbiAgICBpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFwidmFsdWVcIiBtZXRhZGF0YSBmb3IgYSBEaWN0aW9uYXJ5IG11c3QgYmUgZGVmaW5lZCBpbiB0aGUgYCArXG4gICAgICAgICAgICBgbWFwcGVyIGFuZCBpdCBtdXN0IG9mIHR5cGUgXCJvYmplY3RcIiBpbiAke29iamVjdE5hbWV9YCk7XG4gICAgfVxuICAgIGlmIChyZXNwb25zZUJvZHkpIHtcbiAgICAgICAgY29uc3QgdGVtcERpY3Rpb25hcnkgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocmVzcG9uc2VCb2R5KSkge1xuICAgICAgICAgICAgdGVtcERpY3Rpb25hcnlba2V5XSA9IHNlcmlhbGl6ZXIuZGVzZXJpYWxpemUodmFsdWUsIHJlc3BvbnNlQm9keVtrZXldLCBvYmplY3ROYW1lLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGVtcERpY3Rpb25hcnk7XG4gICAgfVxuICAgIHJldHVybiByZXNwb25zZUJvZHk7XG59XG5mdW5jdGlvbiBkZXNlcmlhbGl6ZVNlcXVlbmNlVHlwZShzZXJpYWxpemVyLCBtYXBwZXIsIHJlc3BvbnNlQm9keSwgb2JqZWN0TmFtZSwgb3B0aW9ucykge1xuICAgIHZhciBfYTtcbiAgICBsZXQgZWxlbWVudCA9IG1hcHBlci50eXBlLmVsZW1lbnQ7XG4gICAgaWYgKCFlbGVtZW50IHx8IHR5cGVvZiBlbGVtZW50ICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgZWxlbWVudFwiIG1ldGFkYXRhIGZvciBhbiBBcnJheSBtdXN0IGJlIGRlZmluZWQgaW4gdGhlIGAgK1xuICAgICAgICAgICAgYG1hcHBlciBhbmQgaXQgbXVzdCBvZiB0eXBlIFwib2JqZWN0XCIgaW4gJHtvYmplY3ROYW1lfWApO1xuICAgIH1cbiAgICBpZiAocmVzcG9uc2VCb2R5KSB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShyZXNwb25zZUJvZHkpKSB7XG4gICAgICAgICAgICAvLyB4bWwyanMgd2lsbCBpbnRlcnByZXQgYSBzaW5nbGUgZWxlbWVudCBhcnJheSBhcyBqdXN0IHRoZSBlbGVtZW50LCBzbyBmb3JjZSBpdCB0byBiZSBhbiBhcnJheVxuICAgICAgICAgICAgcmVzcG9uc2VCb2R5ID0gW3Jlc3BvbnNlQm9keV07XG4gICAgICAgIH1cbiAgICAgICAgLy8gUXVpcms6IENvbXBvc2l0ZSBtYXBwZXJzIHJlZmVyZW5jZWQgYnkgYGVsZW1lbnRgIG1pZ2h0XG4gICAgICAgIC8vIG5vdCBoYXZlICphbGwqIHByb3BlcnRpZXMgZGVjbGFyZWQgKGxpa2UgdWJlclBhcmVudCksXG4gICAgICAgIC8vIHNvIGxldCdzIHRyeSB0byBsb29rIHVwIHRoZSBmdWxsIGRlZmluaXRpb24gYnkgbmFtZS5cbiAgICAgICAgaWYgKGVsZW1lbnQudHlwZS5uYW1lID09PSBcIkNvbXBvc2l0ZVwiICYmIGVsZW1lbnQudHlwZS5jbGFzc05hbWUpIHtcbiAgICAgICAgICAgIGVsZW1lbnQgPSAoX2EgPSBzZXJpYWxpemVyLm1vZGVsTWFwcGVyc1tlbGVtZW50LnR5cGUuY2xhc3NOYW1lXSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZWxlbWVudDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0ZW1wQXJyYXkgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNwb25zZUJvZHkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRlbXBBcnJheVtpXSA9IHNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoZWxlbWVudCwgcmVzcG9uc2VCb2R5W2ldLCBgJHtvYmplY3ROYW1lfVske2l9XWAsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0ZW1wQXJyYXk7XG4gICAgfVxuICAgIHJldHVybiByZXNwb25zZUJvZHk7XG59XG5mdW5jdGlvbiBnZXRJbmRleERpc2NyaW1pbmF0b3IoZGlzY3JpbWluYXRvcnMsIGRpc2NyaW1pbmF0b3JWYWx1ZSwgdHlwZU5hbWUpIHtcbiAgICBjb25zdCB0eXBlTmFtZXNUb0NoZWNrID0gW3R5cGVOYW1lXTtcbiAgICB3aGlsZSAodHlwZU5hbWVzVG9DaGVjay5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgY3VycmVudE5hbWUgPSB0eXBlTmFtZXNUb0NoZWNrLnNoaWZ0KCk7XG4gICAgICAgIGNvbnN0IGluZGV4RGlzY3JpbWluYXRvciA9IGRpc2NyaW1pbmF0b3JWYWx1ZSA9PT0gY3VycmVudE5hbWVcbiAgICAgICAgICAgID8gZGlzY3JpbWluYXRvclZhbHVlXG4gICAgICAgICAgICA6IGN1cnJlbnROYW1lICsgXCIuXCIgKyBkaXNjcmltaW5hdG9yVmFsdWU7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZGlzY3JpbWluYXRvcnMsIGluZGV4RGlzY3JpbWluYXRvcikpIHtcbiAgICAgICAgICAgIHJldHVybiBkaXNjcmltaW5hdG9yc1tpbmRleERpc2NyaW1pbmF0b3JdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZm9yIChjb25zdCBbbmFtZSwgbWFwcGVyXSBvZiBPYmplY3QuZW50cmllcyhkaXNjcmltaW5hdG9ycykpIHtcbiAgICAgICAgICAgICAgICBpZiAobmFtZS5zdGFydHNXaXRoKGN1cnJlbnROYW1lICsgXCIuXCIpICYmXG4gICAgICAgICAgICAgICAgICAgIG1hcHBlci50eXBlLnViZXJQYXJlbnQgPT09IGN1cnJlbnROYW1lICYmXG4gICAgICAgICAgICAgICAgICAgIG1hcHBlci50eXBlLmNsYXNzTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICB0eXBlTmFtZXNUb0NoZWNrLnB1c2gobWFwcGVyLnR5cGUuY2xhc3NOYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGdldFBvbHltb3JwaGljTWFwcGVyKHNlcmlhbGl6ZXIsIG1hcHBlciwgb2JqZWN0LCBwb2x5bW9ycGhpY1Byb3BlcnR5TmFtZSkge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCBwb2x5bW9ycGhpY0Rpc2NyaW1pbmF0b3IgPSBnZXRQb2x5bW9ycGhpY0Rpc2NyaW1pbmF0b3JSZWN1cnNpdmVseShzZXJpYWxpemVyLCBtYXBwZXIpO1xuICAgIGlmIChwb2x5bW9ycGhpY0Rpc2NyaW1pbmF0b3IpIHtcbiAgICAgICAgbGV0IGRpc2NyaW1pbmF0b3JOYW1lID0gcG9seW1vcnBoaWNEaXNjcmltaW5hdG9yW3BvbHltb3JwaGljUHJvcGVydHlOYW1lXTtcbiAgICAgICAgaWYgKGRpc2NyaW1pbmF0b3JOYW1lKSB7XG4gICAgICAgICAgICAvLyBUaGUgc2VyaWFsaXplZE5hbWUgbWlnaHQgaGF2ZSBcXFxcLCB3aGljaCB3ZSBqdXN0IHdhbnQgdG8gaWdub3JlXG4gICAgICAgICAgICBpZiAocG9seW1vcnBoaWNQcm9wZXJ0eU5hbWUgPT09IFwic2VyaWFsaXplZE5hbWVcIikge1xuICAgICAgICAgICAgICAgIGRpc2NyaW1pbmF0b3JOYW1lID0gZGlzY3JpbWluYXRvck5hbWUucmVwbGFjZSgvXFxcXC9naSwgXCJcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBkaXNjcmltaW5hdG9yVmFsdWUgPSBvYmplY3RbZGlzY3JpbWluYXRvck5hbWVdO1xuICAgICAgICAgICAgY29uc3QgdHlwZU5hbWUgPSAoX2EgPSBtYXBwZXIudHlwZS51YmVyUGFyZW50KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBtYXBwZXIudHlwZS5jbGFzc05hbWU7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGRpc2NyaW1pbmF0b3JWYWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiB0eXBlTmFtZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvbHltb3JwaGljTWFwcGVyID0gZ2V0SW5kZXhEaXNjcmltaW5hdG9yKHNlcmlhbGl6ZXIubW9kZWxNYXBwZXJzLmRpc2NyaW1pbmF0b3JzLCBkaXNjcmltaW5hdG9yVmFsdWUsIHR5cGVOYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAocG9seW1vcnBoaWNNYXBwZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgbWFwcGVyID0gcG9seW1vcnBoaWNNYXBwZXI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtYXBwZXI7XG59XG5mdW5jdGlvbiBnZXRQb2x5bW9ycGhpY0Rpc2NyaW1pbmF0b3JSZWN1cnNpdmVseShzZXJpYWxpemVyLCBtYXBwZXIpIHtcbiAgICByZXR1cm4gKG1hcHBlci50eXBlLnBvbHltb3JwaGljRGlzY3JpbWluYXRvciB8fFxuICAgICAgICBnZXRQb2x5bW9ycGhpY0Rpc2NyaW1pbmF0b3JTYWZlbHkoc2VyaWFsaXplciwgbWFwcGVyLnR5cGUudWJlclBhcmVudCkgfHxcbiAgICAgICAgZ2V0UG9seW1vcnBoaWNEaXNjcmltaW5hdG9yU2FmZWx5KHNlcmlhbGl6ZXIsIG1hcHBlci50eXBlLmNsYXNzTmFtZSkpO1xufVxuZnVuY3Rpb24gZ2V0UG9seW1vcnBoaWNEaXNjcmltaW5hdG9yU2FmZWx5KHNlcmlhbGl6ZXIsIHR5cGVOYW1lKSB7XG4gICAgcmV0dXJuICh0eXBlTmFtZSAmJlxuICAgICAgICBzZXJpYWxpemVyLm1vZGVsTWFwcGVyc1t0eXBlTmFtZV0gJiZcbiAgICAgICAgc2VyaWFsaXplci5tb2RlbE1hcHBlcnNbdHlwZU5hbWVdLnR5cGUucG9seW1vcnBoaWNEaXNjcmltaW5hdG9yKTtcbn1cbi8qKlxuICogS25vd24gdHlwZXMgb2YgTWFwcGVyc1xuICovXG5leHBvcnRzLk1hcHBlclR5cGVOYW1lcyA9IHtcbiAgICBCYXNlNjRVcmw6IFwiQmFzZTY0VXJsXCIsXG4gICAgQm9vbGVhbjogXCJCb29sZWFuXCIsXG4gICAgQnl0ZUFycmF5OiBcIkJ5dGVBcnJheVwiLFxuICAgIENvbXBvc2l0ZTogXCJDb21wb3NpdGVcIixcbiAgICBEYXRlOiBcIkRhdGVcIixcbiAgICBEYXRlVGltZTogXCJEYXRlVGltZVwiLFxuICAgIERhdGVUaW1lUmZjMTEyMzogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICBEaWN0aW9uYXJ5OiBcIkRpY3Rpb25hcnlcIixcbiAgICBFbnVtOiBcIkVudW1cIixcbiAgICBOdW1iZXI6IFwiTnVtYmVyXCIsXG4gICAgT2JqZWN0OiBcIk9iamVjdFwiLFxuICAgIFNlcXVlbmNlOiBcIlNlcXVlbmNlXCIsXG4gICAgU3RyaW5nOiBcIlN0cmluZ1wiLFxuICAgIFN0cmVhbTogXCJTdHJlYW1cIixcbiAgICBUaW1lU3BhbjogXCJUaW1lU3BhblwiLFxuICAgIFVuaXhUaW1lOiBcIlVuaXhUaW1lXCIsXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2VyaWFsaXplci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnN0YXRlID0gdm9pZCAwO1xuLyoqXG4gKiBIb2xkcyB0aGUgc2luZ2xldG9uIG9wZXJhdGlvblJlcXVlc3RNYXAsIHRvIGJlIHNoYXJlZCBhY3Jvc3MgQ0pTIGFuZCBFU00gaW1wb3J0cy5cbiAqL1xuZXhwb3J0cy5zdGF0ZSA9IHtcbiAgICBvcGVyYXRpb25SZXF1ZXN0TWFwOiBuZXcgV2Vha01hcCgpLFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN0YXRlLWNqcy5janMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRPcGVyYXRpb25SZXF1ZXN0SW5mbyA9IGV4cG9ydHMuZ2V0T3BlcmF0aW9uQXJndW1lbnRWYWx1ZUZyb21QYXJhbWV0ZXIgPSB2b2lkIDA7XG5jb25zdCBzdGF0ZV9qc18xID0gcmVxdWlyZShcIi4vc3RhdGUuanNcIik7XG4vKipcbiAqIEBpbnRlcm5hbFxuICogUmV0cmlldmVzIHRoZSB2YWx1ZSB0byB1c2UgZm9yIGEgZ2l2ZW4gb3BlcmF0aW9uIGFyZ3VtZW50XG4gKiBAcGFyYW0gb3BlcmF0aW9uQXJndW1lbnRzIC0gVGhlIGFyZ3VtZW50cyBwYXNzZWQgZnJvbSB0aGUgZ2VuZXJhdGVkIGNsaWVudFxuICogQHBhcmFtIHBhcmFtZXRlciAtIFRoZSBwYXJhbWV0ZXIgZGVzY3JpcHRpb25cbiAqIEBwYXJhbSBmYWxsYmFja09iamVjdCAtIElmIHNvbWV0aGluZyBpc24ndCBmb3VuZCBpbiB0aGUgYXJndW1lbnRzIGJhZywgbG9vayBoZXJlLlxuICogIEdlbmVyYWxseSB1c2VkIHRvIGxvb2sgYXQgdGhlIHNlcnZpY2UgY2xpZW50IHByb3BlcnRpZXMuXG4gKi9cbmZ1bmN0aW9uIGdldE9wZXJhdGlvbkFyZ3VtZW50VmFsdWVGcm9tUGFyYW1ldGVyKG9wZXJhdGlvbkFyZ3VtZW50cywgcGFyYW1ldGVyLCBmYWxsYmFja09iamVjdCkge1xuICAgIGxldCBwYXJhbWV0ZXJQYXRoID0gcGFyYW1ldGVyLnBhcmFtZXRlclBhdGg7XG4gICAgY29uc3QgcGFyYW1ldGVyTWFwcGVyID0gcGFyYW1ldGVyLm1hcHBlcjtcbiAgICBsZXQgdmFsdWU7XG4gICAgaWYgKHR5cGVvZiBwYXJhbWV0ZXJQYXRoID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHBhcmFtZXRlclBhdGggPSBbcGFyYW1ldGVyUGF0aF07XG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KHBhcmFtZXRlclBhdGgpKSB7XG4gICAgICAgIGlmIChwYXJhbWV0ZXJQYXRoLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJNYXBwZXIuaXNDb25zdGFudCkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyYW1ldGVyTWFwcGVyLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCBwcm9wZXJ0eVNlYXJjaFJlc3VsdCA9IGdldFByb3BlcnR5RnJvbVBhcmFtZXRlclBhdGgob3BlcmF0aW9uQXJndW1lbnRzLCBwYXJhbWV0ZXJQYXRoKTtcbiAgICAgICAgICAgICAgICBpZiAoIXByb3BlcnR5U2VhcmNoUmVzdWx0LnByb3BlcnR5Rm91bmQgJiYgZmFsbGJhY2tPYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTZWFyY2hSZXN1bHQgPSBnZXRQcm9wZXJ0eUZyb21QYXJhbWV0ZXJQYXRoKGZhbGxiYWNrT2JqZWN0LCBwYXJhbWV0ZXJQYXRoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IHVzZURlZmF1bHRWYWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmICghcHJvcGVydHlTZWFyY2hSZXN1bHQucHJvcGVydHlGb3VuZCkge1xuICAgICAgICAgICAgICAgICAgICB1c2VEZWZhdWx0VmFsdWUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyTWFwcGVyLnJlcXVpcmVkIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhcmFtZXRlclBhdGhbMF0gPT09IFwib3B0aW9uc1wiICYmIHBhcmFtZXRlclBhdGgubGVuZ3RoID09PSAyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB1c2VEZWZhdWx0VmFsdWUgPyBwYXJhbWV0ZXJNYXBwZXIuZGVmYXVsdFZhbHVlIDogcHJvcGVydHlTZWFyY2hSZXN1bHQucHJvcGVydHlWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKHBhcmFtZXRlck1hcHBlci5yZXF1aXJlZCkge1xuICAgICAgICAgICAgdmFsdWUgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5TmFtZSBpbiBwYXJhbWV0ZXJQYXRoKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0eU1hcHBlciA9IHBhcmFtZXRlck1hcHBlci50eXBlLm1vZGVsUHJvcGVydGllc1twcm9wZXJ0eU5hbWVdO1xuICAgICAgICAgICAgY29uc3QgcHJvcGVydHlQYXRoID0gcGFyYW1ldGVyUGF0aFtwcm9wZXJ0eU5hbWVdO1xuICAgICAgICAgICAgY29uc3QgcHJvcGVydHlWYWx1ZSA9IGdldE9wZXJhdGlvbkFyZ3VtZW50VmFsdWVGcm9tUGFyYW1ldGVyKG9wZXJhdGlvbkFyZ3VtZW50cywge1xuICAgICAgICAgICAgICAgIHBhcmFtZXRlclBhdGg6IHByb3BlcnR5UGF0aCxcbiAgICAgICAgICAgICAgICBtYXBwZXI6IHByb3BlcnR5TWFwcGVyLFxuICAgICAgICAgICAgfSwgZmFsbGJhY2tPYmplY3QpO1xuICAgICAgICAgICAgaWYgKHByb3BlcnR5VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFsdWVbcHJvcGVydHlOYW1lXSA9IHByb3BlcnR5VmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuZXhwb3J0cy5nZXRPcGVyYXRpb25Bcmd1bWVudFZhbHVlRnJvbVBhcmFtZXRlciA9IGdldE9wZXJhdGlvbkFyZ3VtZW50VmFsdWVGcm9tUGFyYW1ldGVyO1xuZnVuY3Rpb24gZ2V0UHJvcGVydHlGcm9tUGFyYW1ldGVyUGF0aChwYXJlbnQsIHBhcmFtZXRlclBhdGgpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7IHByb3BlcnR5Rm91bmQ6IGZhbHNlIH07XG4gICAgbGV0IGkgPSAwO1xuICAgIGZvciAoOyBpIDwgcGFyYW1ldGVyUGF0aC5sZW5ndGg7ICsraSkge1xuICAgICAgICBjb25zdCBwYXJhbWV0ZXJQYXRoUGFydCA9IHBhcmFtZXRlclBhdGhbaV07XG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0byBjaGVjayBpbmhlcml0ZWQgcHJvcGVydGllcyB0b28sIHNvIGRvbid0IHVzZSBoYXNPd25Qcm9wZXJ0eSgpLlxuICAgICAgICBpZiAocGFyZW50ICYmIHBhcmFtZXRlclBhdGhQYXJ0IGluIHBhcmVudCkge1xuICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50W3BhcmFtZXRlclBhdGhQYXJ0XTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpID09PSBwYXJhbWV0ZXJQYXRoLmxlbmd0aCkge1xuICAgICAgICByZXN1bHQucHJvcGVydHlWYWx1ZSA9IHBhcmVudDtcbiAgICAgICAgcmVzdWx0LnByb3BlcnR5Rm91bmQgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuY29uc3Qgb3JpZ2luYWxSZXF1ZXN0U3ltYm9sID0gU3ltYm9sLmZvcihcIkBhenVyZS9jb3JlLWNsaWVudCBvcmlnaW5hbCByZXF1ZXN0XCIpO1xuZnVuY3Rpb24gaGFzT3JpZ2luYWxSZXF1ZXN0KHJlcXVlc3QpIHtcbiAgICByZXR1cm4gb3JpZ2luYWxSZXF1ZXN0U3ltYm9sIGluIHJlcXVlc3Q7XG59XG5mdW5jdGlvbiBnZXRPcGVyYXRpb25SZXF1ZXN0SW5mbyhyZXF1ZXN0KSB7XG4gICAgaWYgKGhhc09yaWdpbmFsUmVxdWVzdChyZXF1ZXN0KSkge1xuICAgICAgICByZXR1cm4gZ2V0T3BlcmF0aW9uUmVxdWVzdEluZm8ocmVxdWVzdFtvcmlnaW5hbFJlcXVlc3RTeW1ib2xdKTtcbiAgICB9XG4gICAgbGV0IGluZm8gPSBzdGF0ZV9qc18xLnN0YXRlLm9wZXJhdGlvblJlcXVlc3RNYXAuZ2V0KHJlcXVlc3QpO1xuICAgIGlmICghaW5mbykge1xuICAgICAgICBpbmZvID0ge307XG4gICAgICAgIHN0YXRlX2pzXzEuc3RhdGUub3BlcmF0aW9uUmVxdWVzdE1hcC5zZXQocmVxdWVzdCwgaW5mbyk7XG4gICAgfVxuICAgIHJldHVybiBpbmZvO1xufVxuZXhwb3J0cy5nZXRPcGVyYXRpb25SZXF1ZXN0SW5mbyA9IGdldE9wZXJhdGlvblJlcXVlc3RJbmZvO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9b3BlcmF0aW9uSGVscGVycy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlc2VyaWFsaXphdGlvblBvbGljeSA9IGV4cG9ydHMuZGVzZXJpYWxpemF0aW9uUG9saWN5TmFtZSA9IHZvaWQgMDtcbmNvbnN0IGludGVyZmFjZXNfanNfMSA9IHJlcXVpcmUoXCIuL2ludGVyZmFjZXMuanNcIik7XG5jb25zdCBjb3JlX3Jlc3RfcGlwZWxpbmVfMSA9IHJlcXVpcmUoXCJAYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lXCIpO1xuY29uc3Qgc2VyaWFsaXplcl9qc18xID0gcmVxdWlyZShcIi4vc2VyaWFsaXplci5qc1wiKTtcbmNvbnN0IG9wZXJhdGlvbkhlbHBlcnNfanNfMSA9IHJlcXVpcmUoXCIuL29wZXJhdGlvbkhlbHBlcnMuanNcIik7XG5jb25zdCBkZWZhdWx0SnNvbkNvbnRlbnRUeXBlcyA9IFtcImFwcGxpY2F0aW9uL2pzb25cIiwgXCJ0ZXh0L2pzb25cIl07XG5jb25zdCBkZWZhdWx0WG1sQ29udGVudFR5cGVzID0gW1wiYXBwbGljYXRpb24veG1sXCIsIFwiYXBwbGljYXRpb24vYXRvbSt4bWxcIl07XG4vKipcbiAqIFRoZSBwcm9ncmFtbWF0aWMgaWRlbnRpZmllciBvZiB0aGUgZGVzZXJpYWxpemF0aW9uUG9saWN5LlxuICovXG5leHBvcnRzLmRlc2VyaWFsaXphdGlvblBvbGljeU5hbWUgPSBcImRlc2VyaWFsaXphdGlvblBvbGljeVwiO1xuLyoqXG4gKiBUaGlzIHBvbGljeSBoYW5kbGVzIHBhcnNpbmcgb3V0IHJlc3BvbnNlcyBhY2NvcmRpbmcgdG8gT3BlcmF0aW9uU3BlY3Mgb24gdGhlIHJlcXVlc3QuXG4gKi9cbmZ1bmN0aW9uIGRlc2VyaWFsaXphdGlvblBvbGljeShvcHRpb25zID0ge30pIHtcbiAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lLCBfZiwgX2c7XG4gICAgY29uc3QganNvbkNvbnRlbnRUeXBlcyA9IChfYiA9IChfYSA9IG9wdGlvbnMuZXhwZWN0ZWRDb250ZW50VHlwZXMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5qc29uKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBkZWZhdWx0SnNvbkNvbnRlbnRUeXBlcztcbiAgICBjb25zdCB4bWxDb250ZW50VHlwZXMgPSAoX2QgPSAoX2MgPSBvcHRpb25zLmV4cGVjdGVkQ29udGVudFR5cGVzKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MueG1sKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiBkZWZhdWx0WG1sQ29udGVudFR5cGVzO1xuICAgIGNvbnN0IHBhcnNlWE1MID0gb3B0aW9ucy5wYXJzZVhNTDtcbiAgICBjb25zdCBzZXJpYWxpemVyT3B0aW9ucyA9IG9wdGlvbnMuc2VyaWFsaXplck9wdGlvbnM7XG4gICAgY29uc3QgdXBkYXRlZE9wdGlvbnMgPSB7XG4gICAgICAgIHhtbDoge1xuICAgICAgICAgICAgcm9vdE5hbWU6IChfZSA9IHNlcmlhbGl6ZXJPcHRpb25zID09PSBudWxsIHx8IHNlcmlhbGl6ZXJPcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZXJpYWxpemVyT3B0aW9ucy54bWwucm9vdE5hbWUpICE9PSBudWxsICYmIF9lICE9PSB2b2lkIDAgPyBfZSA6IFwiXCIsXG4gICAgICAgICAgICBpbmNsdWRlUm9vdDogKF9mID0gc2VyaWFsaXplck9wdGlvbnMgPT09IG51bGwgfHwgc2VyaWFsaXplck9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlcmlhbGl6ZXJPcHRpb25zLnhtbC5pbmNsdWRlUm9vdCkgIT09IG51bGwgJiYgX2YgIT09IHZvaWQgMCA/IF9mIDogZmFsc2UsXG4gICAgICAgICAgICB4bWxDaGFyS2V5OiAoX2cgPSBzZXJpYWxpemVyT3B0aW9ucyA9PT0gbnVsbCB8fCBzZXJpYWxpemVyT3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VyaWFsaXplck9wdGlvbnMueG1sLnhtbENoYXJLZXkpICE9PSBudWxsICYmIF9nICE9PSB2b2lkIDAgPyBfZyA6IGludGVyZmFjZXNfanNfMS5YTUxfQ0hBUktFWSxcbiAgICAgICAgfSxcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGV4cG9ydHMuZGVzZXJpYWxpemF0aW9uUG9saWN5TmFtZSxcbiAgICAgICAgYXN5bmMgc2VuZFJlcXVlc3QocmVxdWVzdCwgbmV4dCkge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBuZXh0KHJlcXVlc3QpO1xuICAgICAgICAgICAgcmV0dXJuIGRlc2VyaWFsaXplUmVzcG9uc2VCb2R5KGpzb25Db250ZW50VHlwZXMsIHhtbENvbnRlbnRUeXBlcywgcmVzcG9uc2UsIHVwZGF0ZWRPcHRpb25zLCBwYXJzZVhNTCk7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbmV4cG9ydHMuZGVzZXJpYWxpemF0aW9uUG9saWN5ID0gZGVzZXJpYWxpemF0aW9uUG9saWN5O1xuZnVuY3Rpb24gZ2V0T3BlcmF0aW9uUmVzcG9uc2VNYXAocGFyc2VkUmVzcG9uc2UpIHtcbiAgICBsZXQgcmVzdWx0O1xuICAgIGNvbnN0IHJlcXVlc3QgPSBwYXJzZWRSZXNwb25zZS5yZXF1ZXN0O1xuICAgIGNvbnN0IG9wZXJhdGlvbkluZm8gPSAoMCwgb3BlcmF0aW9uSGVscGVyc19qc18xLmdldE9wZXJhdGlvblJlcXVlc3RJbmZvKShyZXF1ZXN0KTtcbiAgICBjb25zdCBvcGVyYXRpb25TcGVjID0gb3BlcmF0aW9uSW5mbyA9PT0gbnVsbCB8fCBvcGVyYXRpb25JbmZvID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcGVyYXRpb25JbmZvLm9wZXJhdGlvblNwZWM7XG4gICAgaWYgKG9wZXJhdGlvblNwZWMpIHtcbiAgICAgICAgaWYgKCEob3BlcmF0aW9uSW5mbyA9PT0gbnVsbCB8fCBvcGVyYXRpb25JbmZvID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcGVyYXRpb25JbmZvLm9wZXJhdGlvblJlc3BvbnNlR2V0dGVyKSkge1xuICAgICAgICAgICAgcmVzdWx0ID0gb3BlcmF0aW9uU3BlYy5yZXNwb25zZXNbcGFyc2VkUmVzcG9uc2Uuc3RhdHVzXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IG9wZXJhdGlvbkluZm8gPT09IG51bGwgfHwgb3BlcmF0aW9uSW5mbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3BlcmF0aW9uSW5mby5vcGVyYXRpb25SZXNwb25zZUdldHRlcihvcGVyYXRpb25TcGVjLCBwYXJzZWRSZXNwb25zZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIHNob3VsZERlc2VyaWFsaXplUmVzcG9uc2UocGFyc2VkUmVzcG9uc2UpIHtcbiAgICBjb25zdCByZXF1ZXN0ID0gcGFyc2VkUmVzcG9uc2UucmVxdWVzdDtcbiAgICBjb25zdCBvcGVyYXRpb25JbmZvID0gKDAsIG9wZXJhdGlvbkhlbHBlcnNfanNfMS5nZXRPcGVyYXRpb25SZXF1ZXN0SW5mbykocmVxdWVzdCk7XG4gICAgY29uc3Qgc2hvdWxkRGVzZXJpYWxpemUgPSBvcGVyYXRpb25JbmZvID09PSBudWxsIHx8IG9wZXJhdGlvbkluZm8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wZXJhdGlvbkluZm8uc2hvdWxkRGVzZXJpYWxpemU7XG4gICAgbGV0IHJlc3VsdDtcbiAgICBpZiAoc2hvdWxkRGVzZXJpYWxpemUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXN1bHQgPSB0cnVlO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2Ygc2hvdWxkRGVzZXJpYWxpemUgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgIHJlc3VsdCA9IHNob3VsZERlc2VyaWFsaXplO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gc2hvdWxkRGVzZXJpYWxpemUocGFyc2VkUmVzcG9uc2UpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuYXN5bmMgZnVuY3Rpb24gZGVzZXJpYWxpemVSZXNwb25zZUJvZHkoanNvbkNvbnRlbnRUeXBlcywgeG1sQ29udGVudFR5cGVzLCByZXNwb25zZSwgb3B0aW9ucywgcGFyc2VYTUwpIHtcbiAgICBjb25zdCBwYXJzZWRSZXNwb25zZSA9IGF3YWl0IHBhcnNlKGpzb25Db250ZW50VHlwZXMsIHhtbENvbnRlbnRUeXBlcywgcmVzcG9uc2UsIG9wdGlvbnMsIHBhcnNlWE1MKTtcbiAgICBpZiAoIXNob3VsZERlc2VyaWFsaXplUmVzcG9uc2UocGFyc2VkUmVzcG9uc2UpKSB7XG4gICAgICAgIHJldHVybiBwYXJzZWRSZXNwb25zZTtcbiAgICB9XG4gICAgY29uc3Qgb3BlcmF0aW9uSW5mbyA9ICgwLCBvcGVyYXRpb25IZWxwZXJzX2pzXzEuZ2V0T3BlcmF0aW9uUmVxdWVzdEluZm8pKHBhcnNlZFJlc3BvbnNlLnJlcXVlc3QpO1xuICAgIGNvbnN0IG9wZXJhdGlvblNwZWMgPSBvcGVyYXRpb25JbmZvID09PSBudWxsIHx8IG9wZXJhdGlvbkluZm8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wZXJhdGlvbkluZm8ub3BlcmF0aW9uU3BlYztcbiAgICBpZiAoIW9wZXJhdGlvblNwZWMgfHwgIW9wZXJhdGlvblNwZWMucmVzcG9uc2VzKSB7XG4gICAgICAgIHJldHVybiBwYXJzZWRSZXNwb25zZTtcbiAgICB9XG4gICAgY29uc3QgcmVzcG9uc2VTcGVjID0gZ2V0T3BlcmF0aW9uUmVzcG9uc2VNYXAocGFyc2VkUmVzcG9uc2UpO1xuICAgIGNvbnN0IHsgZXJyb3IsIHNob3VsZFJldHVyblJlc3BvbnNlIH0gPSBoYW5kbGVFcnJvclJlc3BvbnNlKHBhcnNlZFJlc3BvbnNlLCBvcGVyYXRpb25TcGVjLCByZXNwb25zZVNwZWMsIG9wdGlvbnMpO1xuICAgIGlmIChlcnJvcikge1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gICAgZWxzZSBpZiAoc2hvdWxkUmV0dXJuUmVzcG9uc2UpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlZFJlc3BvbnNlO1xuICAgIH1cbiAgICAvLyBBbiBvcGVyYXRpb24gcmVzcG9uc2Ugc3BlYyBkb2VzIGV4aXN0IGZvciBjdXJyZW50IHN0YXR1cyBjb2RlLCBzb1xuICAgIC8vIHVzZSBpdCB0byBkZXNlcmlhbGl6ZSB0aGUgcmVzcG9uc2UuXG4gICAgaWYgKHJlc3BvbnNlU3BlYykge1xuICAgICAgICBpZiAocmVzcG9uc2VTcGVjLmJvZHlNYXBwZXIpIHtcbiAgICAgICAgICAgIGxldCB2YWx1ZVRvRGVzZXJpYWxpemUgPSBwYXJzZWRSZXNwb25zZS5wYXJzZWRCb2R5O1xuICAgICAgICAgICAgaWYgKG9wZXJhdGlvblNwZWMuaXNYTUwgJiYgcmVzcG9uc2VTcGVjLmJvZHlNYXBwZXIudHlwZS5uYW1lID09PSBzZXJpYWxpemVyX2pzXzEuTWFwcGVyVHlwZU5hbWVzLlNlcXVlbmNlKSB7XG4gICAgICAgICAgICAgICAgdmFsdWVUb0Rlc2VyaWFsaXplID1cbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHZhbHVlVG9EZXNlcmlhbGl6ZSA9PT0gXCJvYmplY3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPyB2YWx1ZVRvRGVzZXJpYWxpemVbcmVzcG9uc2VTcGVjLmJvZHlNYXBwZXIueG1sRWxlbWVudE5hbWVdXG4gICAgICAgICAgICAgICAgICAgICAgICA6IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXJzZWRSZXNwb25zZS5wYXJzZWRCb2R5ID0gb3BlcmF0aW9uU3BlYy5zZXJpYWxpemVyLmRlc2VyaWFsaXplKHJlc3BvbnNlU3BlYy5ib2R5TWFwcGVyLCB2YWx1ZVRvRGVzZXJpYWxpemUsIFwib3BlcmF0aW9uUmVzLnBhcnNlZEJvZHlcIiwgb3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZGVzZXJpYWxpemVFcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3RFcnJvciA9IG5ldyBjb3JlX3Jlc3RfcGlwZWxpbmVfMS5SZXN0RXJyb3IoYEVycm9yICR7ZGVzZXJpYWxpemVFcnJvcn0gb2NjdXJyZWQgaW4gZGVzZXJpYWxpemluZyB0aGUgcmVzcG9uc2VCb2R5IC0gJHtwYXJzZWRSZXNwb25zZS5ib2R5QXNUZXh0fWAsIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzQ29kZTogcGFyc2VkUmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0OiBwYXJzZWRSZXNwb25zZS5yZXF1ZXN0LFxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZTogcGFyc2VkUmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhyb3cgcmVzdEVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG9wZXJhdGlvblNwZWMuaHR0cE1ldGhvZCA9PT0gXCJIRUFEXCIpIHtcbiAgICAgICAgICAgIC8vIGhlYWQgbWV0aG9kcyBuZXZlciBoYXZlIGEgYm9keSwgYnV0IHdlIHJldHVybiBhIGJvb2xlYW4gdG8gaW5kaWNhdGUgcHJlc2VuY2UvYWJzZW5jZSBvZiB0aGUgcmVzb3VyY2VcbiAgICAgICAgICAgIHBhcnNlZFJlc3BvbnNlLnBhcnNlZEJvZHkgPSByZXNwb25zZS5zdGF0dXMgPj0gMjAwICYmIHJlc3BvbnNlLnN0YXR1cyA8IDMwMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzcG9uc2VTcGVjLmhlYWRlcnNNYXBwZXIpIHtcbiAgICAgICAgICAgIHBhcnNlZFJlc3BvbnNlLnBhcnNlZEhlYWRlcnMgPSBvcGVyYXRpb25TcGVjLnNlcmlhbGl6ZXIuZGVzZXJpYWxpemUocmVzcG9uc2VTcGVjLmhlYWRlcnNNYXBwZXIsIHBhcnNlZFJlc3BvbnNlLmhlYWRlcnMudG9KU09OKCksIFwib3BlcmF0aW9uUmVzLnBhcnNlZEhlYWRlcnNcIiwgeyB4bWw6IHt9LCBpZ25vcmVVbmtub3duUHJvcGVydGllczogdHJ1ZSB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcGFyc2VkUmVzcG9uc2U7XG59XG5mdW5jdGlvbiBpc09wZXJhdGlvblNwZWNFbXB0eShvcGVyYXRpb25TcGVjKSB7XG4gICAgY29uc3QgZXhwZWN0ZWRTdGF0dXNDb2RlcyA9IE9iamVjdC5rZXlzKG9wZXJhdGlvblNwZWMucmVzcG9uc2VzKTtcbiAgICByZXR1cm4gKGV4cGVjdGVkU3RhdHVzQ29kZXMubGVuZ3RoID09PSAwIHx8XG4gICAgICAgIChleHBlY3RlZFN0YXR1c0NvZGVzLmxlbmd0aCA9PT0gMSAmJiBleHBlY3RlZFN0YXR1c0NvZGVzWzBdID09PSBcImRlZmF1bHRcIikpO1xufVxuZnVuY3Rpb24gaGFuZGxlRXJyb3JSZXNwb25zZShwYXJzZWRSZXNwb25zZSwgb3BlcmF0aW9uU3BlYywgcmVzcG9uc2VTcGVjLCBvcHRpb25zKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IGlzU3VjY2Vzc0J5U3RhdHVzID0gMjAwIDw9IHBhcnNlZFJlc3BvbnNlLnN0YXR1cyAmJiBwYXJzZWRSZXNwb25zZS5zdGF0dXMgPCAzMDA7XG4gICAgY29uc3QgaXNFeHBlY3RlZFN0YXR1c0NvZGUgPSBpc09wZXJhdGlvblNwZWNFbXB0eShvcGVyYXRpb25TcGVjKVxuICAgICAgICA/IGlzU3VjY2Vzc0J5U3RhdHVzXG4gICAgICAgIDogISFyZXNwb25zZVNwZWM7XG4gICAgaWYgKGlzRXhwZWN0ZWRTdGF0dXNDb2RlKSB7XG4gICAgICAgIGlmIChyZXNwb25zZVNwZWMpIHtcbiAgICAgICAgICAgIGlmICghcmVzcG9uc2VTcGVjLmlzRXJyb3IpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBlcnJvcjogbnVsbCwgc2hvdWxkUmV0dXJuUmVzcG9uc2U6IGZhbHNlIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4geyBlcnJvcjogbnVsbCwgc2hvdWxkUmV0dXJuUmVzcG9uc2U6IGZhbHNlIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgZXJyb3JSZXNwb25zZVNwZWMgPSByZXNwb25zZVNwZWMgIT09IG51bGwgJiYgcmVzcG9uc2VTcGVjICE9PSB2b2lkIDAgPyByZXNwb25zZVNwZWMgOiBvcGVyYXRpb25TcGVjLnJlc3BvbnNlcy5kZWZhdWx0O1xuICAgIGNvbnN0IGluaXRpYWxFcnJvck1lc3NhZ2UgPSAoKF9hID0gcGFyc2VkUmVzcG9uc2UucmVxdWVzdC5zdHJlYW1SZXNwb25zZVN0YXR1c0NvZGVzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuaGFzKHBhcnNlZFJlc3BvbnNlLnN0YXR1cykpXG4gICAgICAgID8gYFVuZXhwZWN0ZWQgc3RhdHVzIGNvZGU6ICR7cGFyc2VkUmVzcG9uc2Uuc3RhdHVzfWBcbiAgICAgICAgOiBwYXJzZWRSZXNwb25zZS5ib2R5QXNUZXh0O1xuICAgIGNvbnN0IGVycm9yID0gbmV3IGNvcmVfcmVzdF9waXBlbGluZV8xLlJlc3RFcnJvcihpbml0aWFsRXJyb3JNZXNzYWdlLCB7XG4gICAgICAgIHN0YXR1c0NvZGU6IHBhcnNlZFJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgcmVxdWVzdDogcGFyc2VkUmVzcG9uc2UucmVxdWVzdCxcbiAgICAgICAgcmVzcG9uc2U6IHBhcnNlZFJlc3BvbnNlLFxuICAgIH0pO1xuICAgIC8vIElmIHRoZSBpdGVtIGZhaWxlZCBidXQgdGhlcmUncyBubyBlcnJvciBzcGVjIG9yIGRlZmF1bHQgc3BlYyB0byBkZXNlcmlhbGl6ZSB0aGUgZXJyb3IsXG4gICAgLy8gd2Ugc2hvdWxkIGZhaWwgc28gd2UganVzdCB0aHJvdyB0aGUgcGFyc2VkIHJlc3BvbnNlXG4gICAgaWYgKCFlcnJvclJlc3BvbnNlU3BlYykge1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gICAgY29uc3QgZGVmYXVsdEJvZHlNYXBwZXIgPSBlcnJvclJlc3BvbnNlU3BlYy5ib2R5TWFwcGVyO1xuICAgIGNvbnN0IGRlZmF1bHRIZWFkZXJzTWFwcGVyID0gZXJyb3JSZXNwb25zZVNwZWMuaGVhZGVyc01hcHBlcjtcbiAgICB0cnkge1xuICAgICAgICAvLyBJZiBlcnJvciByZXNwb25zZSBoYXMgYSBib2R5LCB0cnkgdG8gZGVzZXJpYWxpemUgaXQgdXNpbmcgZGVmYXVsdCBib2R5IG1hcHBlci5cbiAgICAgICAgLy8gVGhlbiB0cnkgdG8gZXh0cmFjdCBlcnJvciBjb2RlICYgbWVzc2FnZSBmcm9tIGl0XG4gICAgICAgIGlmIChwYXJzZWRSZXNwb25zZS5wYXJzZWRCb2R5KSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRCb2R5ID0gcGFyc2VkUmVzcG9uc2UucGFyc2VkQm9keTtcbiAgICAgICAgICAgIGxldCBkZXNlcmlhbGl6ZWRFcnJvcjtcbiAgICAgICAgICAgIGlmIChkZWZhdWx0Qm9keU1hcHBlcikge1xuICAgICAgICAgICAgICAgIGxldCB2YWx1ZVRvRGVzZXJpYWxpemUgPSBwYXJzZWRCb2R5O1xuICAgICAgICAgICAgICAgIGlmIChvcGVyYXRpb25TcGVjLmlzWE1MICYmIGRlZmF1bHRCb2R5TWFwcGVyLnR5cGUubmFtZSA9PT0gc2VyaWFsaXplcl9qc18xLk1hcHBlclR5cGVOYW1lcy5TZXF1ZW5jZSkge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZVRvRGVzZXJpYWxpemUgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudE5hbWUgPSBkZWZhdWx0Qm9keU1hcHBlci54bWxFbGVtZW50TmFtZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwYXJzZWRCb2R5ID09PSBcIm9iamVjdFwiICYmIGVsZW1lbnROYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVRvRGVzZXJpYWxpemUgPSBwYXJzZWRCb2R5W2VsZW1lbnROYW1lXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZXNlcmlhbGl6ZWRFcnJvciA9IG9wZXJhdGlvblNwZWMuc2VyaWFsaXplci5kZXNlcmlhbGl6ZShkZWZhdWx0Qm9keU1hcHBlciwgdmFsdWVUb0Rlc2VyaWFsaXplLCBcImVycm9yLnJlc3BvbnNlLnBhcnNlZEJvZHlcIiwgb3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBpbnRlcm5hbEVycm9yID0gcGFyc2VkQm9keS5lcnJvciB8fCBkZXNlcmlhbGl6ZWRFcnJvciB8fCBwYXJzZWRCb2R5O1xuICAgICAgICAgICAgZXJyb3IuY29kZSA9IGludGVybmFsRXJyb3IuY29kZTtcbiAgICAgICAgICAgIGlmIChpbnRlcm5hbEVycm9yLm1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICBlcnJvci5tZXNzYWdlID0gaW50ZXJuYWxFcnJvci5tZXNzYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRlZmF1bHRCb2R5TWFwcGVyKSB7XG4gICAgICAgICAgICAgICAgZXJyb3IucmVzcG9uc2UucGFyc2VkQm9keSA9IGRlc2VyaWFsaXplZEVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIElmIGVycm9yIHJlc3BvbnNlIGhhcyBoZWFkZXJzLCB0cnkgdG8gZGVzZXJpYWxpemUgaXQgdXNpbmcgZGVmYXVsdCBoZWFkZXIgbWFwcGVyXG4gICAgICAgIGlmIChwYXJzZWRSZXNwb25zZS5oZWFkZXJzICYmIGRlZmF1bHRIZWFkZXJzTWFwcGVyKSB7XG4gICAgICAgICAgICBlcnJvci5yZXNwb25zZS5wYXJzZWRIZWFkZXJzID1cbiAgICAgICAgICAgICAgICBvcGVyYXRpb25TcGVjLnNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoZGVmYXVsdEhlYWRlcnNNYXBwZXIsIHBhcnNlZFJlc3BvbnNlLmhlYWRlcnMudG9KU09OKCksIFwib3BlcmF0aW9uUmVzLnBhcnNlZEhlYWRlcnNcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2ggKGRlZmF1bHRFcnJvcikge1xuICAgICAgICBlcnJvci5tZXNzYWdlID0gYEVycm9yIFwiJHtkZWZhdWx0RXJyb3IubWVzc2FnZX1cIiBvY2N1cnJlZCBpbiBkZXNlcmlhbGl6aW5nIHRoZSByZXNwb25zZUJvZHkgLSBcIiR7cGFyc2VkUmVzcG9uc2UuYm9keUFzVGV4dH1cIiBmb3IgdGhlIGRlZmF1bHQgcmVzcG9uc2UuYDtcbiAgICB9XG4gICAgcmV0dXJuIHsgZXJyb3IsIHNob3VsZFJldHVyblJlc3BvbnNlOiBmYWxzZSB9O1xufVxuYXN5bmMgZnVuY3Rpb24gcGFyc2UoanNvbkNvbnRlbnRUeXBlcywgeG1sQ29udGVudFR5cGVzLCBvcGVyYXRpb25SZXNwb25zZSwgb3B0cywgcGFyc2VYTUwpIHtcbiAgICB2YXIgX2E7XG4gICAgaWYgKCEoKF9hID0gb3BlcmF0aW9uUmVzcG9uc2UucmVxdWVzdC5zdHJlYW1SZXNwb25zZVN0YXR1c0NvZGVzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuaGFzKG9wZXJhdGlvblJlc3BvbnNlLnN0YXR1cykpICYmXG4gICAgICAgIG9wZXJhdGlvblJlc3BvbnNlLmJvZHlBc1RleHQpIHtcbiAgICAgICAgY29uc3QgdGV4dCA9IG9wZXJhdGlvblJlc3BvbnNlLmJvZHlBc1RleHQ7XG4gICAgICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gb3BlcmF0aW9uUmVzcG9uc2UuaGVhZGVycy5nZXQoXCJDb250ZW50LVR5cGVcIikgfHwgXCJcIjtcbiAgICAgICAgY29uc3QgY29udGVudENvbXBvbmVudHMgPSAhY29udGVudFR5cGVcbiAgICAgICAgICAgID8gW11cbiAgICAgICAgICAgIDogY29udGVudFR5cGUuc3BsaXQoXCI7XCIpLm1hcCgoY29tcG9uZW50KSA9PiBjb21wb25lbnQudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoY29udGVudENvbXBvbmVudHMubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgICAgICAgY29udGVudENvbXBvbmVudHMuc29tZSgoY29tcG9uZW50KSA9PiBqc29uQ29udGVudFR5cGVzLmluZGV4T2YoY29tcG9uZW50KSAhPT0gLTEpKSB7XG4gICAgICAgICAgICAgICAgb3BlcmF0aW9uUmVzcG9uc2UucGFyc2VkQm9keSA9IEpTT04ucGFyc2UodGV4dCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblJlc3BvbnNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY29udGVudENvbXBvbmVudHMuc29tZSgoY29tcG9uZW50KSA9PiB4bWxDb250ZW50VHlwZXMuaW5kZXhPZihjb21wb25lbnQpICE9PSAtMSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXBhcnNlWE1MKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhcnNpbmcgWE1MIG5vdCBzdXBwb3J0ZWQuXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBib2R5ID0gYXdhaXQgcGFyc2VYTUwodGV4dCwgb3B0cy54bWwpO1xuICAgICAgICAgICAgICAgIG9wZXJhdGlvblJlc3BvbnNlLnBhcnNlZEJvZHkgPSBib2R5O1xuICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25SZXNwb25zZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBjb25zdCBtc2cgPSBgRXJyb3IgXCIke2Vycn1cIiBvY2N1cnJlZCB3aGlsZSBwYXJzaW5nIHRoZSByZXNwb25zZSBib2R5IC0gJHtvcGVyYXRpb25SZXNwb25zZS5ib2R5QXNUZXh0fS5gO1xuICAgICAgICAgICAgY29uc3QgZXJyQ29kZSA9IGVyci5jb2RlIHx8IGNvcmVfcmVzdF9waXBlbGluZV8xLlJlc3RFcnJvci5QQVJTRV9FUlJPUjtcbiAgICAgICAgICAgIGNvbnN0IGUgPSBuZXcgY29yZV9yZXN0X3BpcGVsaW5lXzEuUmVzdEVycm9yKG1zZywge1xuICAgICAgICAgICAgICAgIGNvZGU6IGVyckNvZGUsXG4gICAgICAgICAgICAgICAgc3RhdHVzQ29kZTogb3BlcmF0aW9uUmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgICAgICAgICAgIHJlcXVlc3Q6IG9wZXJhdGlvblJlc3BvbnNlLnJlcXVlc3QsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2U6IG9wZXJhdGlvblJlc3BvbnNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvcGVyYXRpb25SZXNwb25zZTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlc2VyaWFsaXphdGlvblBvbGljeS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldFBhdGhTdHJpbmdGcm9tUGFyYW1ldGVyID0gZXhwb3J0cy5nZXRTdHJlYW1pbmdSZXNwb25zZVN0YXR1c0NvZGVzID0gdm9pZCAwO1xuY29uc3Qgc2VyaWFsaXplcl9qc18xID0gcmVxdWlyZShcIi4vc2VyaWFsaXplci5qc1wiKTtcbi8qKlxuICogR2V0cyB0aGUgbGlzdCBvZiBzdGF0dXMgY29kZXMgZm9yIHN0cmVhbWluZyByZXNwb25zZXMuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gZ2V0U3RyZWFtaW5nUmVzcG9uc2VTdGF0dXNDb2RlcyhvcGVyYXRpb25TcGVjKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IFNldCgpO1xuICAgIGZvciAoY29uc3Qgc3RhdHVzQ29kZSBpbiBvcGVyYXRpb25TcGVjLnJlc3BvbnNlcykge1xuICAgICAgICBjb25zdCBvcGVyYXRpb25SZXNwb25zZSA9IG9wZXJhdGlvblNwZWMucmVzcG9uc2VzW3N0YXR1c0NvZGVdO1xuICAgICAgICBpZiAob3BlcmF0aW9uUmVzcG9uc2UuYm9keU1hcHBlciAmJlxuICAgICAgICAgICAgb3BlcmF0aW9uUmVzcG9uc2UuYm9keU1hcHBlci50eXBlLm5hbWUgPT09IHNlcmlhbGl6ZXJfanNfMS5NYXBwZXJUeXBlTmFtZXMuU3RyZWFtKSB7XG4gICAgICAgICAgICByZXN1bHQuYWRkKE51bWJlcihzdGF0dXNDb2RlKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmV4cG9ydHMuZ2V0U3RyZWFtaW5nUmVzcG9uc2VTdGF0dXNDb2RlcyA9IGdldFN0cmVhbWluZ1Jlc3BvbnNlU3RhdHVzQ29kZXM7XG4vKipcbiAqIEdldCB0aGUgcGF0aCB0byB0aGlzIHBhcmFtZXRlcidzIHZhbHVlIGFzIGEgZG90dGVkIHN0cmluZyAoYS5iLmMpLlxuICogQHBhcmFtIHBhcmFtZXRlciAtIFRoZSBwYXJhbWV0ZXIgdG8gZ2V0IHRoZSBwYXRoIHN0cmluZyBmb3IuXG4gKiBAcmV0dXJucyBUaGUgcGF0aCB0byB0aGlzIHBhcmFtZXRlcidzIHZhbHVlIGFzIGEgZG90dGVkIHN0cmluZy5cbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBnZXRQYXRoU3RyaW5nRnJvbVBhcmFtZXRlcihwYXJhbWV0ZXIpIHtcbiAgICBjb25zdCB7IHBhcmFtZXRlclBhdGgsIG1hcHBlciB9ID0gcGFyYW1ldGVyO1xuICAgIGxldCByZXN1bHQ7XG4gICAgaWYgKHR5cGVvZiBwYXJhbWV0ZXJQYXRoID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJlc3VsdCA9IHBhcmFtZXRlclBhdGg7XG4gICAgfVxuICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocGFyYW1ldGVyUGF0aCkpIHtcbiAgICAgICAgcmVzdWx0ID0gcGFyYW1ldGVyUGF0aC5qb2luKFwiLlwiKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IG1hcHBlci5zZXJpYWxpemVkTmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmV4cG9ydHMuZ2V0UGF0aFN0cmluZ0Zyb21QYXJhbWV0ZXIgPSBnZXRQYXRoU3RyaW5nRnJvbVBhcmFtZXRlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWludGVyZmFjZUhlbHBlcnMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5zZXJpYWxpemVSZXF1ZXN0Qm9keSA9IGV4cG9ydHMuc2VyaWFsaXplSGVhZGVycyA9IGV4cG9ydHMuc2VyaWFsaXphdGlvblBvbGljeSA9IGV4cG9ydHMuc2VyaWFsaXphdGlvblBvbGljeU5hbWUgPSB2b2lkIDA7XG5jb25zdCBpbnRlcmZhY2VzX2pzXzEgPSByZXF1aXJlKFwiLi9pbnRlcmZhY2VzLmpzXCIpO1xuY29uc3Qgb3BlcmF0aW9uSGVscGVyc19qc18xID0gcmVxdWlyZShcIi4vb3BlcmF0aW9uSGVscGVycy5qc1wiKTtcbmNvbnN0IHNlcmlhbGl6ZXJfanNfMSA9IHJlcXVpcmUoXCIuL3NlcmlhbGl6ZXIuanNcIik7XG5jb25zdCBpbnRlcmZhY2VIZWxwZXJzX2pzXzEgPSByZXF1aXJlKFwiLi9pbnRlcmZhY2VIZWxwZXJzLmpzXCIpO1xuLyoqXG4gKiBUaGUgcHJvZ3JhbW1hdGljIGlkZW50aWZpZXIgb2YgdGhlIHNlcmlhbGl6YXRpb25Qb2xpY3kuXG4gKi9cbmV4cG9ydHMuc2VyaWFsaXphdGlvblBvbGljeU5hbWUgPSBcInNlcmlhbGl6YXRpb25Qb2xpY3lcIjtcbi8qKlxuICogVGhpcyBwb2xpY3kgaGFuZGxlcyBhc3NlbWJsaW5nIHRoZSByZXF1ZXN0IGJvZHkgYW5kIGhlYWRlcnMgdXNpbmdcbiAqIGFuIE9wZXJhdGlvblNwZWMgYW5kIE9wZXJhdGlvbkFyZ3VtZW50cyBvbiB0aGUgcmVxdWVzdC5cbiAqL1xuZnVuY3Rpb24gc2VyaWFsaXphdGlvblBvbGljeShvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCBzdHJpbmdpZnlYTUwgPSBvcHRpb25zLnN0cmluZ2lmeVhNTDtcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBleHBvcnRzLnNlcmlhbGl6YXRpb25Qb2xpY3lOYW1lLFxuICAgICAgICBhc3luYyBzZW5kUmVxdWVzdChyZXF1ZXN0LCBuZXh0KSB7XG4gICAgICAgICAgICBjb25zdCBvcGVyYXRpb25JbmZvID0gKDAsIG9wZXJhdGlvbkhlbHBlcnNfanNfMS5nZXRPcGVyYXRpb25SZXF1ZXN0SW5mbykocmVxdWVzdCk7XG4gICAgICAgICAgICBjb25zdCBvcGVyYXRpb25TcGVjID0gb3BlcmF0aW9uSW5mbyA9PT0gbnVsbCB8fCBvcGVyYXRpb25JbmZvID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcGVyYXRpb25JbmZvLm9wZXJhdGlvblNwZWM7XG4gICAgICAgICAgICBjb25zdCBvcGVyYXRpb25Bcmd1bWVudHMgPSBvcGVyYXRpb25JbmZvID09PSBudWxsIHx8IG9wZXJhdGlvbkluZm8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wZXJhdGlvbkluZm8ub3BlcmF0aW9uQXJndW1lbnRzO1xuICAgICAgICAgICAgaWYgKG9wZXJhdGlvblNwZWMgJiYgb3BlcmF0aW9uQXJndW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplSGVhZGVycyhyZXF1ZXN0LCBvcGVyYXRpb25Bcmd1bWVudHMsIG9wZXJhdGlvblNwZWMpO1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZVJlcXVlc3RCb2R5KHJlcXVlc3QsIG9wZXJhdGlvbkFyZ3VtZW50cywgb3BlcmF0aW9uU3BlYywgc3RyaW5naWZ5WE1MKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXh0KHJlcXVlc3QpO1xuICAgICAgICB9LFxuICAgIH07XG59XG5leHBvcnRzLnNlcmlhbGl6YXRpb25Qb2xpY3kgPSBzZXJpYWxpemF0aW9uUG9saWN5O1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gc2VyaWFsaXplSGVhZGVycyhyZXF1ZXN0LCBvcGVyYXRpb25Bcmd1bWVudHMsIG9wZXJhdGlvblNwZWMpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGlmIChvcGVyYXRpb25TcGVjLmhlYWRlclBhcmFtZXRlcnMpIHtcbiAgICAgICAgZm9yIChjb25zdCBoZWFkZXJQYXJhbWV0ZXIgb2Ygb3BlcmF0aW9uU3BlYy5oZWFkZXJQYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgICBsZXQgaGVhZGVyVmFsdWUgPSAoMCwgb3BlcmF0aW9uSGVscGVyc19qc18xLmdldE9wZXJhdGlvbkFyZ3VtZW50VmFsdWVGcm9tUGFyYW1ldGVyKShvcGVyYXRpb25Bcmd1bWVudHMsIGhlYWRlclBhcmFtZXRlcik7XG4gICAgICAgICAgICBpZiAoKGhlYWRlclZhbHVlICE9PSBudWxsICYmIGhlYWRlclZhbHVlICE9PSB1bmRlZmluZWQpIHx8IGhlYWRlclBhcmFtZXRlci5tYXBwZXIucmVxdWlyZWQpIHtcbiAgICAgICAgICAgICAgICBoZWFkZXJWYWx1ZSA9IG9wZXJhdGlvblNwZWMuc2VyaWFsaXplci5zZXJpYWxpemUoaGVhZGVyUGFyYW1ldGVyLm1hcHBlciwgaGVhZGVyVmFsdWUsICgwLCBpbnRlcmZhY2VIZWxwZXJzX2pzXzEuZ2V0UGF0aFN0cmluZ0Zyb21QYXJhbWV0ZXIpKGhlYWRlclBhcmFtZXRlcikpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRlckNvbGxlY3Rpb25QcmVmaXggPSBoZWFkZXJQYXJhbWV0ZXIubWFwcGVyXG4gICAgICAgICAgICAgICAgICAgIC5oZWFkZXJDb2xsZWN0aW9uUHJlZml4O1xuICAgICAgICAgICAgICAgIGlmIChoZWFkZXJDb2xsZWN0aW9uUHJlZml4KSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGhlYWRlclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5oZWFkZXJzLnNldChoZWFkZXJDb2xsZWN0aW9uUHJlZml4ICsga2V5LCBoZWFkZXJWYWx1ZVtrZXldKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5oZWFkZXJzLnNldChoZWFkZXJQYXJhbWV0ZXIubWFwcGVyLnNlcmlhbGl6ZWROYW1lIHx8ICgwLCBpbnRlcmZhY2VIZWxwZXJzX2pzXzEuZ2V0UGF0aFN0cmluZ0Zyb21QYXJhbWV0ZXIpKGhlYWRlclBhcmFtZXRlciksIGhlYWRlclZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgY3VzdG9tSGVhZGVycyA9IChfYiA9IChfYSA9IG9wZXJhdGlvbkFyZ3VtZW50cy5vcHRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EucmVxdWVzdE9wdGlvbnMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jdXN0b21IZWFkZXJzO1xuICAgIGlmIChjdXN0b21IZWFkZXJzKSB7XG4gICAgICAgIGZvciAoY29uc3QgY3VzdG9tSGVhZGVyTmFtZSBvZiBPYmplY3Qua2V5cyhjdXN0b21IZWFkZXJzKSkge1xuICAgICAgICAgICAgcmVxdWVzdC5oZWFkZXJzLnNldChjdXN0b21IZWFkZXJOYW1lLCBjdXN0b21IZWFkZXJzW2N1c3RvbUhlYWRlck5hbWVdKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuc2VyaWFsaXplSGVhZGVycyA9IHNlcmlhbGl6ZUhlYWRlcnM7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBzZXJpYWxpemVSZXF1ZXN0Qm9keShyZXF1ZXN0LCBvcGVyYXRpb25Bcmd1bWVudHMsIG9wZXJhdGlvblNwZWMsIHN0cmluZ2lmeVhNTCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJYTUwgc2VyaWFsaXphdGlvbiB1bnN1cHBvcnRlZCFcIik7XG59KSB7XG4gICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZTtcbiAgICBjb25zdCBzZXJpYWxpemVyT3B0aW9ucyA9IChfYSA9IG9wZXJhdGlvbkFyZ3VtZW50cy5vcHRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2VyaWFsaXplck9wdGlvbnM7XG4gICAgY29uc3QgdXBkYXRlZE9wdGlvbnMgPSB7XG4gICAgICAgIHhtbDoge1xuICAgICAgICAgICAgcm9vdE5hbWU6IChfYiA9IHNlcmlhbGl6ZXJPcHRpb25zID09PSBudWxsIHx8IHNlcmlhbGl6ZXJPcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZXJpYWxpemVyT3B0aW9ucy54bWwucm9vdE5hbWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IFwiXCIsXG4gICAgICAgICAgICBpbmNsdWRlUm9vdDogKF9jID0gc2VyaWFsaXplck9wdGlvbnMgPT09IG51bGwgfHwgc2VyaWFsaXplck9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlcmlhbGl6ZXJPcHRpb25zLnhtbC5pbmNsdWRlUm9vdCkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogZmFsc2UsXG4gICAgICAgICAgICB4bWxDaGFyS2V5OiAoX2QgPSBzZXJpYWxpemVyT3B0aW9ucyA9PT0gbnVsbCB8fCBzZXJpYWxpemVyT3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VyaWFsaXplck9wdGlvbnMueG1sLnhtbENoYXJLZXkpICE9PSBudWxsICYmIF9kICE9PSB2b2lkIDAgPyBfZCA6IGludGVyZmFjZXNfanNfMS5YTUxfQ0hBUktFWSxcbiAgICAgICAgfSxcbiAgICB9O1xuICAgIGNvbnN0IHhtbENoYXJLZXkgPSB1cGRhdGVkT3B0aW9ucy54bWwueG1sQ2hhcktleTtcbiAgICBpZiAob3BlcmF0aW9uU3BlYy5yZXF1ZXN0Qm9keSAmJiBvcGVyYXRpb25TcGVjLnJlcXVlc3RCb2R5Lm1hcHBlcikge1xuICAgICAgICByZXF1ZXN0LmJvZHkgPSAoMCwgb3BlcmF0aW9uSGVscGVyc19qc18xLmdldE9wZXJhdGlvbkFyZ3VtZW50VmFsdWVGcm9tUGFyYW1ldGVyKShvcGVyYXRpb25Bcmd1bWVudHMsIG9wZXJhdGlvblNwZWMucmVxdWVzdEJvZHkpO1xuICAgICAgICBjb25zdCBib2R5TWFwcGVyID0gb3BlcmF0aW9uU3BlYy5yZXF1ZXN0Qm9keS5tYXBwZXI7XG4gICAgICAgIGNvbnN0IHsgcmVxdWlyZWQsIHNlcmlhbGl6ZWROYW1lLCB4bWxOYW1lLCB4bWxFbGVtZW50TmFtZSwgeG1sTmFtZXNwYWNlLCB4bWxOYW1lc3BhY2VQcmVmaXgsIG51bGxhYmxlLCB9ID0gYm9keU1hcHBlcjtcbiAgICAgICAgY29uc3QgdHlwZU5hbWUgPSBib2R5TWFwcGVyLnR5cGUubmFtZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICgocmVxdWVzdC5ib2R5ICE9PSB1bmRlZmluZWQgJiYgcmVxdWVzdC5ib2R5ICE9PSBudWxsKSB8fFxuICAgICAgICAgICAgICAgIChudWxsYWJsZSAmJiByZXF1ZXN0LmJvZHkgPT09IG51bGwpIHx8XG4gICAgICAgICAgICAgICAgcmVxdWlyZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXF1ZXN0Qm9keVBhcmFtZXRlclBhdGhTdHJpbmcgPSAoMCwgaW50ZXJmYWNlSGVscGVyc19qc18xLmdldFBhdGhTdHJpbmdGcm9tUGFyYW1ldGVyKShvcGVyYXRpb25TcGVjLnJlcXVlc3RCb2R5KTtcbiAgICAgICAgICAgICAgICByZXF1ZXN0LmJvZHkgPSBvcGVyYXRpb25TcGVjLnNlcmlhbGl6ZXIuc2VyaWFsaXplKGJvZHlNYXBwZXIsIHJlcXVlc3QuYm9keSwgcmVxdWVzdEJvZHlQYXJhbWV0ZXJQYXRoU3RyaW5nLCB1cGRhdGVkT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNTdHJlYW0gPSB0eXBlTmFtZSA9PT0gc2VyaWFsaXplcl9qc18xLk1hcHBlclR5cGVOYW1lcy5TdHJlYW07XG4gICAgICAgICAgICAgICAgaWYgKG9wZXJhdGlvblNwZWMuaXNYTUwpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeG1sbnNLZXkgPSB4bWxOYW1lc3BhY2VQcmVmaXggPyBgeG1sbnM6JHt4bWxOYW1lc3BhY2VQcmVmaXh9YCA6IFwieG1sbnNcIjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBnZXRYbWxWYWx1ZVdpdGhOYW1lc3BhY2UoeG1sTmFtZXNwYWNlLCB4bWxuc0tleSwgdHlwZU5hbWUsIHJlcXVlc3QuYm9keSwgdXBkYXRlZE9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZU5hbWUgPT09IHNlcmlhbGl6ZXJfanNfMS5NYXBwZXJUeXBlTmFtZXMuU2VxdWVuY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuYm9keSA9IHN0cmluZ2lmeVhNTChwcmVwYXJlWE1MUm9vdExpc3QodmFsdWUsIHhtbEVsZW1lbnROYW1lIHx8IHhtbE5hbWUgfHwgc2VyaWFsaXplZE5hbWUsIHhtbG5zS2V5LCB4bWxOYW1lc3BhY2UpLCB7IHJvb3ROYW1lOiB4bWxOYW1lIHx8IHNlcmlhbGl6ZWROYW1lLCB4bWxDaGFyS2V5IH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFpc1N0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5ib2R5ID0gc3RyaW5naWZ5WE1MKHZhbHVlLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vdE5hbWU6IHhtbE5hbWUgfHwgc2VyaWFsaXplZE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sQ2hhcktleSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVOYW1lID09PSBzZXJpYWxpemVyX2pzXzEuTWFwcGVyVHlwZU5hbWVzLlN0cmluZyAmJlxuICAgICAgICAgICAgICAgICAgICAoKChfZSA9IG9wZXJhdGlvblNwZWMuY29udGVudFR5cGUpID09PSBudWxsIHx8IF9lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZS5tYXRjaChcInRleHQvcGxhaW5cIikpIHx8IG9wZXJhdGlvblNwZWMubWVkaWFUeXBlID09PSBcInRleHRcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhlIFN0cmluZyBzZXJpYWxpemVyIGhhcyB2YWxpZGF0ZWQgdGhhdCByZXF1ZXN0IGJvZHkgaXMgYSBzdHJpbmdcbiAgICAgICAgICAgICAgICAgICAgLy8gc28ganVzdCBzZW5kIHRoZSBzdHJpbmcuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIWlzU3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuYm9keSA9IEpTT04uc3RyaW5naWZ5KHJlcXVlc3QuYm9keSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBcIiR7ZXJyb3IubWVzc2FnZX1cIiBvY2N1cnJlZCBpbiBzZXJpYWxpemluZyB0aGUgcGF5bG9hZCAtICR7SlNPTi5zdHJpbmdpZnkoc2VyaWFsaXplZE5hbWUsIHVuZGVmaW5lZCwgXCIgIFwiKX0uYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAob3BlcmF0aW9uU3BlYy5mb3JtRGF0YVBhcmFtZXRlcnMgJiYgb3BlcmF0aW9uU3BlYy5mb3JtRGF0YVBhcmFtZXRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXF1ZXN0LmZvcm1EYXRhID0ge307XG4gICAgICAgIGZvciAoY29uc3QgZm9ybURhdGFQYXJhbWV0ZXIgb2Ygb3BlcmF0aW9uU3BlYy5mb3JtRGF0YVBhcmFtZXRlcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1EYXRhUGFyYW1ldGVyVmFsdWUgPSAoMCwgb3BlcmF0aW9uSGVscGVyc19qc18xLmdldE9wZXJhdGlvbkFyZ3VtZW50VmFsdWVGcm9tUGFyYW1ldGVyKShvcGVyYXRpb25Bcmd1bWVudHMsIGZvcm1EYXRhUGFyYW1ldGVyKTtcbiAgICAgICAgICAgIGlmIChmb3JtRGF0YVBhcmFtZXRlclZhbHVlICE9PSB1bmRlZmluZWQgJiYgZm9ybURhdGFQYXJhbWV0ZXJWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1EYXRhUGFyYW1ldGVyUHJvcGVydHlOYW1lID0gZm9ybURhdGFQYXJhbWV0ZXIubWFwcGVyLnNlcmlhbGl6ZWROYW1lIHx8ICgwLCBpbnRlcmZhY2VIZWxwZXJzX2pzXzEuZ2V0UGF0aFN0cmluZ0Zyb21QYXJhbWV0ZXIpKGZvcm1EYXRhUGFyYW1ldGVyKTtcbiAgICAgICAgICAgICAgICByZXF1ZXN0LmZvcm1EYXRhW2Zvcm1EYXRhUGFyYW1ldGVyUHJvcGVydHlOYW1lXSA9IG9wZXJhdGlvblNwZWMuc2VyaWFsaXplci5zZXJpYWxpemUoZm9ybURhdGFQYXJhbWV0ZXIubWFwcGVyLCBmb3JtRGF0YVBhcmFtZXRlclZhbHVlLCAoMCwgaW50ZXJmYWNlSGVscGVyc19qc18xLmdldFBhdGhTdHJpbmdGcm9tUGFyYW1ldGVyKShmb3JtRGF0YVBhcmFtZXRlciksIHVwZGF0ZWRPcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuc2VyaWFsaXplUmVxdWVzdEJvZHkgPSBzZXJpYWxpemVSZXF1ZXN0Qm9keTtcbi8qKlxuICogQWRkcyBhbiB4bWwgbmFtZXNwYWNlIHRvIHRoZSB4bWwgc2VyaWFsaXplZCBvYmplY3QgaWYgbmVlZGVkLCBvdGhlcndpc2UgaXQganVzdCByZXR1cm5zIHRoZSB2YWx1ZSBpdHNlbGZcbiAqL1xuZnVuY3Rpb24gZ2V0WG1sVmFsdWVXaXRoTmFtZXNwYWNlKHhtbE5hbWVzcGFjZSwgeG1sbnNLZXksIHR5cGVOYW1lLCBzZXJpYWxpemVkVmFsdWUsIG9wdGlvbnMpIHtcbiAgICAvLyBDb21wb3NpdGUgYW5kIFNlcXVlbmNlIHNjaGVtYXMgYWxyZWFkeSBnb3QgdGhlaXIgcm9vdCBuYW1lc3BhY2Ugc2V0IGR1cmluZyBzZXJpYWxpemF0aW9uXG4gICAgLy8gV2UganVzdCBuZWVkIHRvIGFkZCB4bWxucyB0byB0aGUgb3RoZXIgc2NoZW1hIHR5cGVzXG4gICAgaWYgKHhtbE5hbWVzcGFjZSAmJiAhW1wiQ29tcG9zaXRlXCIsIFwiU2VxdWVuY2VcIiwgXCJEaWN0aW9uYXJ5XCJdLmluY2x1ZGVzKHR5cGVOYW1lKSkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICAgICAgcmVzdWx0W29wdGlvbnMueG1sLnhtbENoYXJLZXldID0gc2VyaWFsaXplZFZhbHVlO1xuICAgICAgICByZXN1bHRbaW50ZXJmYWNlc19qc18xLlhNTF9BVFRSS0VZXSA9IHsgW3htbG5zS2V5XTogeG1sTmFtZXNwYWNlIH07XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIHJldHVybiBzZXJpYWxpemVkVmFsdWU7XG59XG5mdW5jdGlvbiBwcmVwYXJlWE1MUm9vdExpc3Qob2JqLCBlbGVtZW50TmFtZSwgeG1sTmFtZXNwYWNlS2V5LCB4bWxOYW1lc3BhY2UpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgICBvYmogPSBbb2JqXTtcbiAgICB9XG4gICAgaWYgKCF4bWxOYW1lc3BhY2VLZXkgfHwgIXhtbE5hbWVzcGFjZSkge1xuICAgICAgICByZXR1cm4geyBbZWxlbWVudE5hbWVdOiBvYmogfTtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0geyBbZWxlbWVudE5hbWVdOiBvYmogfTtcbiAgICByZXN1bHRbaW50ZXJmYWNlc19qc18xLlhNTF9BVFRSS0VZXSA9IHsgW3htbE5hbWVzcGFjZUtleV06IHhtbE5hbWVzcGFjZSB9O1xuICAgIHJldHVybiByZXN1bHQ7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zZXJpYWxpemF0aW9uUG9saWN5LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlQ2xpZW50UGlwZWxpbmUgPSB2b2lkIDA7XG5jb25zdCBkZXNlcmlhbGl6YXRpb25Qb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL2Rlc2VyaWFsaXphdGlvblBvbGljeS5qc1wiKTtcbmNvbnN0IGNvcmVfcmVzdF9waXBlbGluZV8xID0gcmVxdWlyZShcIkBhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmVcIik7XG5jb25zdCBzZXJpYWxpemF0aW9uUG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9zZXJpYWxpemF0aW9uUG9saWN5LmpzXCIpO1xuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFBpcGVsaW5lIGZvciB1c2Ugd2l0aCBhIFNlcnZpY2UgQ2xpZW50LlxuICogQWRkcyBpbiBkZXNlcmlhbGl6YXRpb25Qb2xpY3kgYnkgZGVmYXVsdC5cbiAqIEFsc28gYWRkcyBpbiBiZWFyZXJUb2tlbkF1dGhlbnRpY2F0aW9uUG9saWN5IGlmIHBhc3NlZCBhIFRva2VuQ3JlZGVudGlhbC5cbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBjdXN0b21pemUgdGhlIGNyZWF0ZWQgcGlwZWxpbmUuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNsaWVudFBpcGVsaW5lKG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHBpcGVsaW5lID0gKDAsIGNvcmVfcmVzdF9waXBlbGluZV8xLmNyZWF0ZVBpcGVsaW5lRnJvbU9wdGlvbnMpKG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwID8gb3B0aW9ucyA6IHt9KTtcbiAgICBpZiAob3B0aW9ucy5jcmVkZW50aWFsT3B0aW9ucykge1xuICAgICAgICBwaXBlbGluZS5hZGRQb2xpY3koKDAsIGNvcmVfcmVzdF9waXBlbGluZV8xLmJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3kpKHtcbiAgICAgICAgICAgIGNyZWRlbnRpYWw6IG9wdGlvbnMuY3JlZGVudGlhbE9wdGlvbnMuY3JlZGVudGlhbCxcbiAgICAgICAgICAgIHNjb3Blczogb3B0aW9ucy5jcmVkZW50aWFsT3B0aW9ucy5jcmVkZW50aWFsU2NvcGVzLFxuICAgICAgICB9KSk7XG4gICAgfVxuICAgIHBpcGVsaW5lLmFkZFBvbGljeSgoMCwgc2VyaWFsaXphdGlvblBvbGljeV9qc18xLnNlcmlhbGl6YXRpb25Qb2xpY3kpKG9wdGlvbnMuc2VyaWFsaXphdGlvbk9wdGlvbnMpLCB7IHBoYXNlOiBcIlNlcmlhbGl6ZVwiIH0pO1xuICAgIHBpcGVsaW5lLmFkZFBvbGljeSgoMCwgZGVzZXJpYWxpemF0aW9uUG9saWN5X2pzXzEuZGVzZXJpYWxpemF0aW9uUG9saWN5KShvcHRpb25zLmRlc2VyaWFsaXphdGlvbk9wdGlvbnMpLCB7XG4gICAgICAgIHBoYXNlOiBcIkRlc2VyaWFsaXplXCIsXG4gICAgfSk7XG4gICAgcmV0dXJuIHBpcGVsaW5lO1xufVxuZXhwb3J0cy5jcmVhdGVDbGllbnRQaXBlbGluZSA9IGNyZWF0ZUNsaWVudFBpcGVsaW5lO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGlwZWxpbmUuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRDYWNoZWREZWZhdWx0SHR0cENsaWVudCA9IHZvaWQgMDtcbmNvbnN0IGNvcmVfcmVzdF9waXBlbGluZV8xID0gcmVxdWlyZShcIkBhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmVcIik7XG5sZXQgY2FjaGVkSHR0cENsaWVudDtcbmZ1bmN0aW9uIGdldENhY2hlZERlZmF1bHRIdHRwQ2xpZW50KCkge1xuICAgIGlmICghY2FjaGVkSHR0cENsaWVudCkge1xuICAgICAgICBjYWNoZWRIdHRwQ2xpZW50ID0gKDAsIGNvcmVfcmVzdF9waXBlbGluZV8xLmNyZWF0ZURlZmF1bHRIdHRwQ2xpZW50KSgpO1xuICAgIH1cbiAgICByZXR1cm4gY2FjaGVkSHR0cENsaWVudDtcbn1cbmV4cG9ydHMuZ2V0Q2FjaGVkRGVmYXVsdEh0dHBDbGllbnQgPSBnZXRDYWNoZWREZWZhdWx0SHR0cENsaWVudDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWh0dHBDbGllbnRDYWNoZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmFwcGVuZFF1ZXJ5UGFyYW1zID0gZXhwb3J0cy5nZXRSZXF1ZXN0VXJsID0gdm9pZCAwO1xuY29uc3Qgb3BlcmF0aW9uSGVscGVyc19qc18xID0gcmVxdWlyZShcIi4vb3BlcmF0aW9uSGVscGVycy5qc1wiKTtcbmNvbnN0IGludGVyZmFjZUhlbHBlcnNfanNfMSA9IHJlcXVpcmUoXCIuL2ludGVyZmFjZUhlbHBlcnMuanNcIik7XG5jb25zdCBDb2xsZWN0aW9uRm9ybWF0VG9EZWxpbWl0ZXJNYXAgPSB7XG4gICAgQ1NWOiBcIixcIixcbiAgICBTU1Y6IFwiIFwiLFxuICAgIE11bHRpOiBcIk11bHRpXCIsXG4gICAgVFNWOiBcIlxcdFwiLFxuICAgIFBpcGVzOiBcInxcIixcbn07XG5mdW5jdGlvbiBnZXRSZXF1ZXN0VXJsKGJhc2VVcmksIG9wZXJhdGlvblNwZWMsIG9wZXJhdGlvbkFyZ3VtZW50cywgZmFsbGJhY2tPYmplY3QpIHtcbiAgICBjb25zdCB1cmxSZXBsYWNlbWVudHMgPSBjYWxjdWxhdGVVcmxSZXBsYWNlbWVudHMob3BlcmF0aW9uU3BlYywgb3BlcmF0aW9uQXJndW1lbnRzLCBmYWxsYmFja09iamVjdCk7XG4gICAgbGV0IGlzQWJzb2x1dGVQYXRoID0gZmFsc2U7XG4gICAgbGV0IHJlcXVlc3RVcmwgPSByZXBsYWNlQWxsKGJhc2VVcmksIHVybFJlcGxhY2VtZW50cyk7XG4gICAgaWYgKG9wZXJhdGlvblNwZWMucGF0aCkge1xuICAgICAgICBsZXQgcGF0aCA9IHJlcGxhY2VBbGwob3BlcmF0aW9uU3BlYy5wYXRoLCB1cmxSZXBsYWNlbWVudHMpO1xuICAgICAgICAvLyBRVUlSSzogc29tZXRpbWVzIHdlIGdldCBhIHBhdGggY29tcG9uZW50IGxpa2UgL3tuZXh0TGlua31cbiAgICAgICAgLy8gd2hpY2ggbWF5IGJlIGEgZnVsbHkgZm9ybWVkIFVSTCB3aXRoIGEgbGVhZGluZyAvLiBJbiB0aGF0IGNhc2UsIHdlIHNob3VsZFxuICAgICAgICAvLyByZW1vdmUgdGhlIGxlYWRpbmcgL1xuICAgICAgICBpZiAob3BlcmF0aW9uU3BlYy5wYXRoID09PSBcIi97bmV4dExpbmt9XCIgJiYgcGF0aC5zdGFydHNXaXRoKFwiL1wiKSkge1xuICAgICAgICAgICAgcGF0aCA9IHBhdGguc3Vic3RyaW5nKDEpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFFVSVJLOiBzb21ldGltZXMgd2UgZ2V0IGEgcGF0aCBjb21wb25lbnQgbGlrZSB7bmV4dExpbmt9XG4gICAgICAgIC8vIHdoaWNoIG1heSBiZSBhIGZ1bGx5IGZvcm1lZCBVUkwuIEluIHRoYXQgY2FzZSwgd2Ugc2hvdWxkXG4gICAgICAgIC8vIGlnbm9yZSB0aGUgYmFzZVVyaS5cbiAgICAgICAgaWYgKGlzQWJzb2x1dGVVcmwocGF0aCkpIHtcbiAgICAgICAgICAgIHJlcXVlc3RVcmwgPSBwYXRoO1xuICAgICAgICAgICAgaXNBYnNvbHV0ZVBhdGggPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVxdWVzdFVybCA9IGFwcGVuZFBhdGgocmVxdWVzdFVybCwgcGF0aCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgeyBxdWVyeVBhcmFtcywgc2VxdWVuY2VQYXJhbXMgfSA9IGNhbGN1bGF0ZVF1ZXJ5UGFyYW1ldGVycyhvcGVyYXRpb25TcGVjLCBvcGVyYXRpb25Bcmd1bWVudHMsIGZhbGxiYWNrT2JqZWN0KTtcbiAgICAvKipcbiAgICAgKiBOb3RpY2UgdGhhdCB0aGlzIGNhbGwgc2V0cyB0aGUgYG5vT3ZlcndyaXRlYCBwYXJhbWV0ZXIgdG8gdHJ1ZSBpZiB0aGUgYHJlcXVlc3RVcmxgXG4gICAgICogaXMgYW4gYWJzb2x1dGUgcGF0aC4gVGhpcyBlbnN1cmVzIHRoYXQgZXhpc3RpbmcgcXVlcnkgcGFyYW1ldGVyIHZhbHVlcyBpbiBgcmVxdWVzdFVybGBcbiAgICAgKiBkbyBub3QgZ2V0IG92ZXJ3cml0dGVuLiBPbiB0aGUgb3RoZXIgaGFuZCB3aGVuIGByZXF1ZXN0VXJsYCBpcyBub3QgYWJzb2x1dGUgcGF0aCwgaXRcbiAgICAgKiBpcyBzdGlsbCBiZWluZyBidWlsdCBzbyB0aGVyZSBpcyBub3RoaW5nIHRvIG92ZXJ3cml0ZS5cbiAgICAgKi9cbiAgICByZXF1ZXN0VXJsID0gYXBwZW5kUXVlcnlQYXJhbXMocmVxdWVzdFVybCwgcXVlcnlQYXJhbXMsIHNlcXVlbmNlUGFyYW1zLCBpc0Fic29sdXRlUGF0aCk7XG4gICAgcmV0dXJuIHJlcXVlc3RVcmw7XG59XG5leHBvcnRzLmdldFJlcXVlc3RVcmwgPSBnZXRSZXF1ZXN0VXJsO1xuZnVuY3Rpb24gcmVwbGFjZUFsbChpbnB1dCwgcmVwbGFjZW1lbnRzKSB7XG4gICAgbGV0IHJlc3VsdCA9IGlucHV0O1xuICAgIGZvciAoY29uc3QgW3NlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWVdIG9mIHJlcGxhY2VtZW50cykge1xuICAgICAgICByZXN1bHQgPSByZXN1bHQuc3BsaXQoc2VhcmNoVmFsdWUpLmpvaW4ocmVwbGFjZVZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIGNhbGN1bGF0ZVVybFJlcGxhY2VtZW50cyhvcGVyYXRpb25TcGVjLCBvcGVyYXRpb25Bcmd1bWVudHMsIGZhbGxiYWNrT2JqZWN0KSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBNYXAoKTtcbiAgICBpZiAoKF9hID0gb3BlcmF0aW9uU3BlYy51cmxQYXJhbWV0ZXJzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubGVuZ3RoKSB7XG4gICAgICAgIGZvciAoY29uc3QgdXJsUGFyYW1ldGVyIG9mIG9wZXJhdGlvblNwZWMudXJsUGFyYW1ldGVycykge1xuICAgICAgICAgICAgbGV0IHVybFBhcmFtZXRlclZhbHVlID0gKDAsIG9wZXJhdGlvbkhlbHBlcnNfanNfMS5nZXRPcGVyYXRpb25Bcmd1bWVudFZhbHVlRnJvbVBhcmFtZXRlcikob3BlcmF0aW9uQXJndW1lbnRzLCB1cmxQYXJhbWV0ZXIsIGZhbGxiYWNrT2JqZWN0KTtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtZXRlclBhdGhTdHJpbmcgPSAoMCwgaW50ZXJmYWNlSGVscGVyc19qc18xLmdldFBhdGhTdHJpbmdGcm9tUGFyYW1ldGVyKSh1cmxQYXJhbWV0ZXIpO1xuICAgICAgICAgICAgdXJsUGFyYW1ldGVyVmFsdWUgPSBvcGVyYXRpb25TcGVjLnNlcmlhbGl6ZXIuc2VyaWFsaXplKHVybFBhcmFtZXRlci5tYXBwZXIsIHVybFBhcmFtZXRlclZhbHVlLCBwYXJhbWV0ZXJQYXRoU3RyaW5nKTtcbiAgICAgICAgICAgIGlmICghdXJsUGFyYW1ldGVyLnNraXBFbmNvZGluZykge1xuICAgICAgICAgICAgICAgIHVybFBhcmFtZXRlclZhbHVlID0gZW5jb2RlVVJJQ29tcG9uZW50KHVybFBhcmFtZXRlclZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdC5zZXQoYHske3VybFBhcmFtZXRlci5tYXBwZXIuc2VyaWFsaXplZE5hbWUgfHwgcGFyYW1ldGVyUGF0aFN0cmluZ319YCwgdXJsUGFyYW1ldGVyVmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBpc0Fic29sdXRlVXJsKHVybCkge1xuICAgIHJldHVybiB1cmwuaW5jbHVkZXMoXCI6Ly9cIik7XG59XG5mdW5jdGlvbiBhcHBlbmRQYXRoKHVybCwgcGF0aFRvQXBwZW5kKSB7XG4gICAgaWYgKCFwYXRoVG9BcHBlbmQpIHtcbiAgICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG4gICAgY29uc3QgcGFyc2VkVXJsID0gbmV3IFVSTCh1cmwpO1xuICAgIGxldCBuZXdQYXRoID0gcGFyc2VkVXJsLnBhdGhuYW1lO1xuICAgIGlmICghbmV3UGF0aC5lbmRzV2l0aChcIi9cIikpIHtcbiAgICAgICAgbmV3UGF0aCA9IGAke25ld1BhdGh9L2A7XG4gICAgfVxuICAgIGlmIChwYXRoVG9BcHBlbmQuc3RhcnRzV2l0aChcIi9cIikpIHtcbiAgICAgICAgcGF0aFRvQXBwZW5kID0gcGF0aFRvQXBwZW5kLnN1YnN0cmluZygxKTtcbiAgICB9XG4gICAgY29uc3Qgc2VhcmNoU3RhcnQgPSBwYXRoVG9BcHBlbmQuaW5kZXhPZihcIj9cIik7XG4gICAgaWYgKHNlYXJjaFN0YXJ0ICE9PSAtMSkge1xuICAgICAgICBjb25zdCBwYXRoID0gcGF0aFRvQXBwZW5kLnN1YnN0cmluZygwLCBzZWFyY2hTdGFydCk7XG4gICAgICAgIGNvbnN0IHNlYXJjaCA9IHBhdGhUb0FwcGVuZC5zdWJzdHJpbmcoc2VhcmNoU3RhcnQgKyAxKTtcbiAgICAgICAgbmV3UGF0aCA9IG5ld1BhdGggKyBwYXRoO1xuICAgICAgICBpZiAoc2VhcmNoKSB7XG4gICAgICAgICAgICBwYXJzZWRVcmwuc2VhcmNoID0gcGFyc2VkVXJsLnNlYXJjaCA/IGAke3BhcnNlZFVybC5zZWFyY2h9JiR7c2VhcmNofWAgOiBzZWFyY2g7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIG5ld1BhdGggPSBuZXdQYXRoICsgcGF0aFRvQXBwZW5kO1xuICAgIH1cbiAgICBwYXJzZWRVcmwucGF0aG5hbWUgPSBuZXdQYXRoO1xuICAgIHJldHVybiBwYXJzZWRVcmwudG9TdHJpbmcoKTtcbn1cbmZ1bmN0aW9uIGNhbGN1bGF0ZVF1ZXJ5UGFyYW1ldGVycyhvcGVyYXRpb25TcGVjLCBvcGVyYXRpb25Bcmd1bWVudHMsIGZhbGxiYWNrT2JqZWN0KSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBNYXAoKTtcbiAgICBjb25zdCBzZXF1ZW5jZVBhcmFtcyA9IG5ldyBTZXQoKTtcbiAgICBpZiAoKF9hID0gb3BlcmF0aW9uU3BlYy5xdWVyeVBhcmFtZXRlcnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5sZW5ndGgpIHtcbiAgICAgICAgZm9yIChjb25zdCBxdWVyeVBhcmFtZXRlciBvZiBvcGVyYXRpb25TcGVjLnF1ZXJ5UGFyYW1ldGVycykge1xuICAgICAgICAgICAgaWYgKHF1ZXJ5UGFyYW1ldGVyLm1hcHBlci50eXBlLm5hbWUgPT09IFwiU2VxdWVuY2VcIiAmJiBxdWVyeVBhcmFtZXRlci5tYXBwZXIuc2VyaWFsaXplZE5hbWUpIHtcbiAgICAgICAgICAgICAgICBzZXF1ZW5jZVBhcmFtcy5hZGQocXVlcnlQYXJhbWV0ZXIubWFwcGVyLnNlcmlhbGl6ZWROYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBxdWVyeVBhcmFtZXRlclZhbHVlID0gKDAsIG9wZXJhdGlvbkhlbHBlcnNfanNfMS5nZXRPcGVyYXRpb25Bcmd1bWVudFZhbHVlRnJvbVBhcmFtZXRlcikob3BlcmF0aW9uQXJndW1lbnRzLCBxdWVyeVBhcmFtZXRlciwgZmFsbGJhY2tPYmplY3QpO1xuICAgICAgICAgICAgaWYgKChxdWVyeVBhcmFtZXRlclZhbHVlICE9PSB1bmRlZmluZWQgJiYgcXVlcnlQYXJhbWV0ZXJWYWx1ZSAhPT0gbnVsbCkgfHxcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtZXRlci5tYXBwZXIucmVxdWlyZWQpIHtcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtZXRlclZhbHVlID0gb3BlcmF0aW9uU3BlYy5zZXJpYWxpemVyLnNlcmlhbGl6ZShxdWVyeVBhcmFtZXRlci5tYXBwZXIsIHF1ZXJ5UGFyYW1ldGVyVmFsdWUsICgwLCBpbnRlcmZhY2VIZWxwZXJzX2pzXzEuZ2V0UGF0aFN0cmluZ0Zyb21QYXJhbWV0ZXIpKHF1ZXJ5UGFyYW1ldGVyKSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVsaW1pdGVyID0gcXVlcnlQYXJhbWV0ZXIuY29sbGVjdGlvbkZvcm1hdFxuICAgICAgICAgICAgICAgICAgICA/IENvbGxlY3Rpb25Gb3JtYXRUb0RlbGltaXRlck1hcFtxdWVyeVBhcmFtZXRlci5jb2xsZWN0aW9uRm9ybWF0XVxuICAgICAgICAgICAgICAgICAgICA6IFwiXCI7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocXVlcnlQYXJhbWV0ZXJWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVwbGFjZSBudWxsIGFuZCB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJWYWx1ZSA9IHF1ZXJ5UGFyYW1ldGVyVmFsdWUubWFwKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbSA9PT0gbnVsbCB8fCBpdGVtID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHF1ZXJ5UGFyYW1ldGVyLmNvbGxlY3Rpb25Gb3JtYXQgPT09IFwiTXVsdGlcIiAmJiBxdWVyeVBhcmFtZXRlclZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShxdWVyeVBhcmFtZXRlclZhbHVlKSAmJlxuICAgICAgICAgICAgICAgICAgICAocXVlcnlQYXJhbWV0ZXIuY29sbGVjdGlvbkZvcm1hdCA9PT0gXCJTU1ZcIiB8fCBxdWVyeVBhcmFtZXRlci5jb2xsZWN0aW9uRm9ybWF0ID09PSBcIlRTVlwiKSkge1xuICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtZXRlclZhbHVlID0gcXVlcnlQYXJhbWV0ZXJWYWx1ZS5qb2luKGRlbGltaXRlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghcXVlcnlQYXJhbWV0ZXIuc2tpcEVuY29kaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHF1ZXJ5UGFyYW1ldGVyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtZXRlclZhbHVlID0gcXVlcnlQYXJhbWV0ZXJWYWx1ZS5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtZXRlclZhbHVlID0gZW5jb2RlVVJJQ29tcG9uZW50KHF1ZXJ5UGFyYW1ldGVyVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIEpvaW4gcGlwZXMgYW5kIENTViAqYWZ0ZXIqIGVuY29kaW5nLCBvciB0aGUgc2VydmVyIHdpbGwgYmUgdXBzZXQuXG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocXVlcnlQYXJhbWV0ZXJWYWx1ZSkgJiZcbiAgICAgICAgICAgICAgICAgICAgKHF1ZXJ5UGFyYW1ldGVyLmNvbGxlY3Rpb25Gb3JtYXQgPT09IFwiQ1NWXCIgfHwgcXVlcnlQYXJhbWV0ZXIuY29sbGVjdGlvbkZvcm1hdCA9PT0gXCJQaXBlc1wiKSkge1xuICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtZXRlclZhbHVlID0gcXVlcnlQYXJhbWV0ZXJWYWx1ZS5qb2luKGRlbGltaXRlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdC5zZXQocXVlcnlQYXJhbWV0ZXIubWFwcGVyLnNlcmlhbGl6ZWROYW1lIHx8ICgwLCBpbnRlcmZhY2VIZWxwZXJzX2pzXzEuZ2V0UGF0aFN0cmluZ0Zyb21QYXJhbWV0ZXIpKHF1ZXJ5UGFyYW1ldGVyKSwgcXVlcnlQYXJhbWV0ZXJWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcXVlcnlQYXJhbXM6IHJlc3VsdCxcbiAgICAgICAgc2VxdWVuY2VQYXJhbXMsXG4gICAgfTtcbn1cbmZ1bmN0aW9uIHNpbXBsZVBhcnNlUXVlcnlQYXJhbXMocXVlcnlTdHJpbmcpIHtcbiAgICBjb25zdCByZXN1bHQgPSBuZXcgTWFwKCk7XG4gICAgaWYgKCFxdWVyeVN0cmluZyB8fCBxdWVyeVN0cmluZ1swXSAhPT0gXCI/XCIpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgLy8gcmVtb3ZlIHRoZSBsZWFkaW5nID9cbiAgICBxdWVyeVN0cmluZyA9IHF1ZXJ5U3RyaW5nLnNsaWNlKDEpO1xuICAgIGNvbnN0IHBhaXJzID0gcXVlcnlTdHJpbmcuc3BsaXQoXCImXCIpO1xuICAgIGZvciAoY29uc3QgcGFpciBvZiBwYWlycykge1xuICAgICAgICBjb25zdCBbbmFtZSwgdmFsdWVdID0gcGFpci5zcGxpdChcIj1cIiwgMik7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nVmFsdWUgPSByZXN1bHQuZ2V0KG5hbWUpO1xuICAgICAgICBpZiAoZXhpc3RpbmdWYWx1ZSkge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZXhpc3RpbmdWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBleGlzdGluZ1ZhbHVlLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnNldChuYW1lLCBbZXhpc3RpbmdWYWx1ZSwgdmFsdWVdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdC5zZXQobmFtZSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4vKiogQGludGVybmFsICovXG5mdW5jdGlvbiBhcHBlbmRRdWVyeVBhcmFtcyh1cmwsIHF1ZXJ5UGFyYW1zLCBzZXF1ZW5jZVBhcmFtcywgbm9PdmVyd3JpdGUgPSBmYWxzZSkge1xuICAgIGlmIChxdWVyeVBhcmFtcy5zaXplID09PSAwKSB7XG4gICAgICAgIHJldHVybiB1cmw7XG4gICAgfVxuICAgIGNvbnN0IHBhcnNlZFVybCA9IG5ldyBVUkwodXJsKTtcbiAgICAvLyBRVUlSSzogcGFyc2VkVXJsLnNlYXJjaFBhcmFtcyB3aWxsIGhhdmUgdGhlaXIgbmFtZS92YWx1ZSBwYWlycyBkZWNvZGVkLCB3aGljaFxuICAgIC8vIGNhbiBjaGFuZ2UgdGhlaXIgbWVhbmluZyB0byB0aGUgc2VydmVyLCBzdWNoIGFzIGluIHRoZSBjYXNlIG9mIGEgU0FTIHNpZ25hdHVyZS5cbiAgICAvLyBUbyBhdm9pZCBhY2NpZGVudGFsbHkgdW4tZW5jb2RpbmcgYSBxdWVyeSBwYXJhbSwgd2UgcGFyc2UgdGhlIGtleS92YWx1ZXMgb3Vyc2VsdmVzXG4gICAgY29uc3QgY29tYmluZWRQYXJhbXMgPSBzaW1wbGVQYXJzZVF1ZXJ5UGFyYW1zKHBhcnNlZFVybC5zZWFyY2gpO1xuICAgIGZvciAoY29uc3QgW25hbWUsIHZhbHVlXSBvZiBxdWVyeVBhcmFtcykge1xuICAgICAgICBjb25zdCBleGlzdGluZ1ZhbHVlID0gY29tYmluZWRQYXJhbXMuZ2V0KG5hbWUpO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShleGlzdGluZ1ZhbHVlKSkge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgZXhpc3RpbmdWYWx1ZS5wdXNoKC4uLnZhbHVlKTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZVNldCA9IG5ldyBTZXQoZXhpc3RpbmdWYWx1ZSk7XG4gICAgICAgICAgICAgICAgY29tYmluZWRQYXJhbXMuc2V0KG5hbWUsIEFycmF5LmZyb20odmFsdWVTZXQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGV4aXN0aW5nVmFsdWUucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXhpc3RpbmdWYWx1ZSkge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUudW5zaGlmdChleGlzdGluZ1ZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHNlcXVlbmNlUGFyYW1zLmhhcyhuYW1lKSkge1xuICAgICAgICAgICAgICAgIGNvbWJpbmVkUGFyYW1zLnNldChuYW1lLCBbZXhpc3RpbmdWYWx1ZSwgdmFsdWVdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghbm9PdmVyd3JpdGUpIHtcbiAgICAgICAgICAgICAgICBjb21iaW5lZFBhcmFtcy5zZXQobmFtZSwgdmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29tYmluZWRQYXJhbXMuc2V0KG5hbWUsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBzZWFyY2hQaWVjZXMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2YgY29tYmluZWRQYXJhbXMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgc2VhcmNoUGllY2VzLnB1c2goYCR7bmFtZX09JHt2YWx1ZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgLy8gUVVJUks6IElmIHdlIGdldCBhbiBhcnJheSBvZiB2YWx1ZXMsIGluY2x1ZGUgbXVsdGlwbGUga2V5L3ZhbHVlIHBhaXJzXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHN1YlZhbHVlIG9mIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgc2VhcmNoUGllY2VzLnB1c2goYCR7bmFtZX09JHtzdWJWYWx1ZX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHNlYXJjaFBpZWNlcy5wdXNoKGAke25hbWV9PSR7dmFsdWV9YCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gUVVJUks6IHdlIGhhdmUgdG8gc2V0IHNlYXJjaCBtYW51YWxseSBhcyBzZWFyY2hQYXJhbXMgd2lsbCBlbmNvZGUgY29tbWEgd2hlbiBpdCBzaG91bGRuJ3QuXG4gICAgcGFyc2VkVXJsLnNlYXJjaCA9IHNlYXJjaFBpZWNlcy5sZW5ndGggPyBgPyR7c2VhcmNoUGllY2VzLmpvaW4oXCImXCIpfWAgOiBcIlwiO1xuICAgIHJldHVybiBwYXJzZWRVcmwudG9TdHJpbmcoKTtcbn1cbmV4cG9ydHMuYXBwZW5kUXVlcnlQYXJhbXMgPSBhcHBlbmRRdWVyeVBhcmFtcztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVybEhlbHBlcnMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5sb2dnZXIgPSB2b2lkIDA7XG5jb25zdCBsb2dnZXJfMSA9IHJlcXVpcmUoXCJAYXp1cmUvbG9nZ2VyXCIpO1xuZXhwb3J0cy5sb2dnZXIgPSAoMCwgbG9nZ2VyXzEuY3JlYXRlQ2xpZW50TG9nZ2VyKShcImNvcmUtY2xpZW50XCIpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bG9nLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU2VydmljZUNsaWVudCA9IHZvaWQgMDtcbmNvbnN0IGNvcmVfcmVzdF9waXBlbGluZV8xID0gcmVxdWlyZShcIkBhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmVcIik7XG5jb25zdCBwaXBlbGluZV9qc18xID0gcmVxdWlyZShcIi4vcGlwZWxpbmUuanNcIik7XG5jb25zdCB1dGlsc19qc18xID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBodHRwQ2xpZW50Q2FjaGVfanNfMSA9IHJlcXVpcmUoXCIuL2h0dHBDbGllbnRDYWNoZS5qc1wiKTtcbmNvbnN0IG9wZXJhdGlvbkhlbHBlcnNfanNfMSA9IHJlcXVpcmUoXCIuL29wZXJhdGlvbkhlbHBlcnMuanNcIik7XG5jb25zdCB1cmxIZWxwZXJzX2pzXzEgPSByZXF1aXJlKFwiLi91cmxIZWxwZXJzLmpzXCIpO1xuY29uc3QgaW50ZXJmYWNlSGVscGVyc19qc18xID0gcmVxdWlyZShcIi4vaW50ZXJmYWNlSGVscGVycy5qc1wiKTtcbmNvbnN0IGxvZ19qc18xID0gcmVxdWlyZShcIi4vbG9nLmpzXCIpO1xuLyoqXG4gKiBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgU2VydmljZUNsaWVudC5cbiAqL1xuY2xhc3MgU2VydmljZUNsaWVudCB7XG4gICAgLyoqXG4gICAgICogVGhlIFNlcnZpY2VDbGllbnQgY29uc3RydWN0b3JcbiAgICAgKiBAcGFyYW0gY3JlZGVudGlhbCAtIFRoZSBjcmVkZW50aWFscyB1c2VkIGZvciBhdXRoZW50aWNhdGlvbiB3aXRoIHRoZSBzZXJ2aWNlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHNlcnZpY2UgY2xpZW50IG9wdGlvbnMgdGhhdCBnb3Zlcm4gdGhlIGJlaGF2aW9yIG9mIHRoZSBjbGllbnQuXG4gICAgICovXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RDb250ZW50VHlwZSA9IG9wdGlvbnMucmVxdWVzdENvbnRlbnRUeXBlO1xuICAgICAgICB0aGlzLl9lbmRwb2ludCA9IChfYSA9IG9wdGlvbnMuZW5kcG9pbnQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IG9wdGlvbnMuYmFzZVVyaTtcbiAgICAgICAgaWYgKG9wdGlvbnMuYmFzZVVyaSkge1xuICAgICAgICAgICAgbG9nX2pzXzEubG9nZ2VyLndhcm5pbmcoXCJUaGUgYmFzZVVyaSBvcHRpb24gZm9yIFNESyBDbGllbnRzIGhhcyBiZWVuIGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgZW5kcG9pbnQgaW5zdGVhZC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fYWxsb3dJbnNlY3VyZUNvbm5lY3Rpb24gPSBvcHRpb25zLmFsbG93SW5zZWN1cmVDb25uZWN0aW9uO1xuICAgICAgICB0aGlzLl9odHRwQ2xpZW50ID0gb3B0aW9ucy5odHRwQ2xpZW50IHx8ICgwLCBodHRwQ2xpZW50Q2FjaGVfanNfMS5nZXRDYWNoZWREZWZhdWx0SHR0cENsaWVudCkoKTtcbiAgICAgICAgdGhpcy5waXBlbGluZSA9IG9wdGlvbnMucGlwZWxpbmUgfHwgY3JlYXRlRGVmYXVsdFBpcGVsaW5lKG9wdGlvbnMpO1xuICAgICAgICBpZiAoKF9iID0gb3B0aW9ucy5hZGRpdGlvbmFsUG9saWNpZXMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5sZW5ndGgpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgeyBwb2xpY3ksIHBvc2l0aW9uIH0gb2Ygb3B0aW9ucy5hZGRpdGlvbmFsUG9saWNpZXMpIHtcbiAgICAgICAgICAgICAgICAvLyBTaWduIGhhcHBlbnMgYWZ0ZXIgUmV0cnkgYW5kIGlzIGNvbW1vbmx5IG5lZWRlZCB0byBvY2N1clxuICAgICAgICAgICAgICAgIC8vIGJlZm9yZSBwb2xpY2llcyB0aGF0IGludGVyY2VwdCBwb3N0LXJldHJ5LlxuICAgICAgICAgICAgICAgIGNvbnN0IGFmdGVyUGhhc2UgPSBwb3NpdGlvbiA9PT0gXCJwZXJSZXRyeVwiID8gXCJTaWduXCIgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5waXBlbGluZS5hZGRQb2xpY3kocG9saWN5LCB7XG4gICAgICAgICAgICAgICAgICAgIGFmdGVyUGhhc2UsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogU2VuZCB0aGUgcHJvdmlkZWQgaHR0cFJlcXVlc3QuXG4gICAgICovXG4gICAgYXN5bmMgc2VuZFJlcXVlc3QocmVxdWVzdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5waXBlbGluZS5zZW5kUmVxdWVzdCh0aGlzLl9odHRwQ2xpZW50LCByZXF1ZXN0KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2VuZCBhbiBIVFRQIHJlcXVlc3QgdGhhdCBpcyBwb3B1bGF0ZWQgdXNpbmcgdGhlIHByb3ZpZGVkIE9wZXJhdGlvblNwZWMuXG4gICAgICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGVkIHJlc3VsdCBvZiB0aGUgcmVxdWVzdCwgYmFzZWQgb24gdGhlIE9wZXJhdGlvblNwZWMuXG4gICAgICogQHBhcmFtIG9wZXJhdGlvbkFyZ3VtZW50cyAtIFRoZSBhcmd1bWVudHMgdGhhdCB0aGUgSFRUUCByZXF1ZXN0J3MgdGVtcGxhdGVkIHZhbHVlcyB3aWxsIGJlIHBvcHVsYXRlZCBmcm9tLlxuICAgICAqIEBwYXJhbSBvcGVyYXRpb25TcGVjIC0gVGhlIE9wZXJhdGlvblNwZWMgdG8gdXNlIHRvIHBvcHVsYXRlIHRoZSBodHRwUmVxdWVzdC5cbiAgICAgKi9cbiAgICBhc3luYyBzZW5kT3BlcmF0aW9uUmVxdWVzdChvcGVyYXRpb25Bcmd1bWVudHMsIG9wZXJhdGlvblNwZWMpIHtcbiAgICAgICAgY29uc3QgZW5kcG9pbnQgPSBvcGVyYXRpb25TcGVjLmJhc2VVcmwgfHwgdGhpcy5fZW5kcG9pbnQ7XG4gICAgICAgIGlmICghZW5kcG9pbnQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIklmIG9wZXJhdGlvblNwZWMuYmFzZVVybCBpcyBub3Qgc3BlY2lmaWVkLCB0aGVuIHRoZSBTZXJ2aWNlQ2xpZW50IG11c3QgaGF2ZSBhIGVuZHBvaW50IHN0cmluZyBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIHRoZSBiYXNlIFVSTCB0byB1c2UuXCIpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRlbXBsYXRpemVkIFVSTHMgc29tZXRpbWVzIHJlZmVyZW5jZSBwcm9wZXJ0aWVzIG9uIHRoZSBTZXJ2aWNlQ2xpZW50IGNoaWxkIGNsYXNzLFxuICAgICAgICAvLyBzbyB3ZSBoYXZlIHRvIHBhc3MgYHRoaXNgIGJlbG93IGluIG9yZGVyIHRvIHNlYXJjaCB0aGVzZSBwcm9wZXJ0aWVzIGlmIHRoZXkncmVcbiAgICAgICAgLy8gbm90IHBhcnQgb2YgT3BlcmF0aW9uQXJndW1lbnRzXG4gICAgICAgIGNvbnN0IHVybCA9ICgwLCB1cmxIZWxwZXJzX2pzXzEuZ2V0UmVxdWVzdFVybCkoZW5kcG9pbnQsIG9wZXJhdGlvblNwZWMsIG9wZXJhdGlvbkFyZ3VtZW50cywgdGhpcyk7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSAoMCwgY29yZV9yZXN0X3BpcGVsaW5lXzEuY3JlYXRlUGlwZWxpbmVSZXF1ZXN0KSh7XG4gICAgICAgICAgICB1cmwsXG4gICAgICAgIH0pO1xuICAgICAgICByZXF1ZXN0Lm1ldGhvZCA9IG9wZXJhdGlvblNwZWMuaHR0cE1ldGhvZDtcbiAgICAgICAgY29uc3Qgb3BlcmF0aW9uSW5mbyA9ICgwLCBvcGVyYXRpb25IZWxwZXJzX2pzXzEuZ2V0T3BlcmF0aW9uUmVxdWVzdEluZm8pKHJlcXVlc3QpO1xuICAgICAgICBvcGVyYXRpb25JbmZvLm9wZXJhdGlvblNwZWMgPSBvcGVyYXRpb25TcGVjO1xuICAgICAgICBvcGVyYXRpb25JbmZvLm9wZXJhdGlvbkFyZ3VtZW50cyA9IG9wZXJhdGlvbkFyZ3VtZW50cztcbiAgICAgICAgY29uc3QgY29udGVudFR5cGUgPSBvcGVyYXRpb25TcGVjLmNvbnRlbnRUeXBlIHx8IHRoaXMuX3JlcXVlc3RDb250ZW50VHlwZTtcbiAgICAgICAgaWYgKGNvbnRlbnRUeXBlICYmIG9wZXJhdGlvblNwZWMucmVxdWVzdEJvZHkpIHtcbiAgICAgICAgICAgIHJlcXVlc3QuaGVhZGVycy5zZXQoXCJDb250ZW50LVR5cGVcIiwgY29udGVudFR5cGUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBvcGVyYXRpb25Bcmd1bWVudHMub3B0aW9ucztcbiAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zID0gb3B0aW9ucy5yZXF1ZXN0T3B0aW9ucztcbiAgICAgICAgICAgIGlmIChyZXF1ZXN0T3B0aW9ucykge1xuICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0T3B0aW9ucy50aW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3QudGltZW91dCA9IHJlcXVlc3RPcHRpb25zLnRpbWVvdXQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0T3B0aW9ucy5vblVwbG9hZFByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3Qub25VcGxvYWRQcm9ncmVzcyA9IHJlcXVlc3RPcHRpb25zLm9uVXBsb2FkUHJvZ3Jlc3M7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0T3B0aW9ucy5vbkRvd25sb2FkUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5vbkRvd25sb2FkUHJvZ3Jlc3MgPSByZXF1ZXN0T3B0aW9ucy5vbkRvd25sb2FkUHJvZ3Jlc3M7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0T3B0aW9ucy5zaG91bGREZXNlcmlhbGl6ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbkluZm8uc2hvdWxkRGVzZXJpYWxpemUgPSByZXF1ZXN0T3B0aW9ucy5zaG91bGREZXNlcmlhbGl6ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlcXVlc3RPcHRpb25zLmFsbG93SW5zZWN1cmVDb25uZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuYWxsb3dJbnNlY3VyZUNvbm5lY3Rpb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHRpb25zLmFib3J0U2lnbmFsKSB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdC5hYm9ydFNpZ25hbCA9IG9wdGlvbnMuYWJvcnRTaWduYWw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0aW9ucy50cmFjaW5nT3B0aW9ucykge1xuICAgICAgICAgICAgICAgIHJlcXVlc3QudHJhY2luZ09wdGlvbnMgPSBvcHRpb25zLnRyYWNpbmdPcHRpb25zO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9hbGxvd0luc2VjdXJlQ29ubmVjdGlvbikge1xuICAgICAgICAgICAgcmVxdWVzdC5hbGxvd0luc2VjdXJlQ29ubmVjdGlvbiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlcXVlc3Quc3RyZWFtUmVzcG9uc2VTdGF0dXNDb2RlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXF1ZXN0LnN0cmVhbVJlc3BvbnNlU3RhdHVzQ29kZXMgPSAoMCwgaW50ZXJmYWNlSGVscGVyc19qc18xLmdldFN0cmVhbWluZ1Jlc3BvbnNlU3RhdHVzQ29kZXMpKG9wZXJhdGlvblNwZWMpO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByYXdSZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VuZFJlcXVlc3QocmVxdWVzdCk7XG4gICAgICAgICAgICBjb25zdCBmbGF0UmVzcG9uc2UgPSAoMCwgdXRpbHNfanNfMS5mbGF0dGVuUmVzcG9uc2UpKHJhd1Jlc3BvbnNlLCBvcGVyYXRpb25TcGVjLnJlc3BvbnNlc1tyYXdSZXNwb25zZS5zdGF0dXNdKTtcbiAgICAgICAgICAgIGlmIChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMub25SZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMub25SZXNwb25zZShyYXdSZXNwb25zZSwgZmxhdFJlc3BvbnNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmbGF0UmVzcG9uc2U7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGVycm9yID09PSBcIm9iamVjdFwiICYmIChlcnJvciA9PT0gbnVsbCB8fCBlcnJvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogZXJyb3IucmVzcG9uc2UpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmF3UmVzcG9uc2UgPSBlcnJvci5yZXNwb25zZTtcbiAgICAgICAgICAgICAgICBjb25zdCBmbGF0UmVzcG9uc2UgPSAoMCwgdXRpbHNfanNfMS5mbGF0dGVuUmVzcG9uc2UpKHJhd1Jlc3BvbnNlLCBvcGVyYXRpb25TcGVjLnJlc3BvbnNlc1tlcnJvci5zdGF0dXNDb2RlXSB8fCBvcGVyYXRpb25TcGVjLnJlc3BvbnNlc1tcImRlZmF1bHRcIl0pO1xuICAgICAgICAgICAgICAgIGVycm9yLmRldGFpbHMgPSBmbGF0UmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5vblJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMub25SZXNwb25zZShyYXdSZXNwb25zZSwgZmxhdFJlc3BvbnNlLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLlNlcnZpY2VDbGllbnQgPSBTZXJ2aWNlQ2xpZW50O1xuZnVuY3Rpb24gY3JlYXRlRGVmYXVsdFBpcGVsaW5lKG9wdGlvbnMpIHtcbiAgICBjb25zdCBjcmVkZW50aWFsU2NvcGVzID0gZ2V0Q3JlZGVudGlhbFNjb3BlcyhvcHRpb25zKTtcbiAgICBjb25zdCBjcmVkZW50aWFsT3B0aW9ucyA9IG9wdGlvbnMuY3JlZGVudGlhbCAmJiBjcmVkZW50aWFsU2NvcGVzXG4gICAgICAgID8geyBjcmVkZW50aWFsU2NvcGVzLCBjcmVkZW50aWFsOiBvcHRpb25zLmNyZWRlbnRpYWwgfVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gKDAsIHBpcGVsaW5lX2pzXzEuY3JlYXRlQ2xpZW50UGlwZWxpbmUpKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyksIHsgY3JlZGVudGlhbE9wdGlvbnMgfSkpO1xufVxuZnVuY3Rpb24gZ2V0Q3JlZGVudGlhbFNjb3BlcyhvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMuY3JlZGVudGlhbFNjb3Blcykge1xuICAgICAgICByZXR1cm4gb3B0aW9ucy5jcmVkZW50aWFsU2NvcGVzO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5lbmRwb2ludCkge1xuICAgICAgICByZXR1cm4gYCR7b3B0aW9ucy5lbmRwb2ludH0vLmRlZmF1bHRgO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5iYXNlVXJpKSB7XG4gICAgICAgIHJldHVybiBgJHtvcHRpb25zLmJhc2VVcml9Ly5kZWZhdWx0YDtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuY3JlZGVudGlhbCAmJiAhb3B0aW9ucy5jcmVkZW50aWFsU2NvcGVzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgV2hlbiB1c2luZyBjcmVkZW50aWFscywgdGhlIFNlcnZpY2VDbGllbnRPcHRpb25zIG11c3QgY29udGFpbiBlaXRoZXIgYSBlbmRwb2ludCBvciBhIGNyZWRlbnRpYWxTY29wZXMuIFVuYWJsZSB0byBjcmVhdGUgYSBiZWFyZXJUb2tlbkF1dGhlbnRpY2F0aW9uUG9saWN5YCk7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zZXJ2aWNlQ2xpZW50LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYXV0aG9yaXplUmVxdWVzdE9uQ2xhaW1DaGFsbGVuZ2UgPSBleHBvcnRzLnBhcnNlQ0FFQ2hhbGxlbmdlID0gdm9pZCAwO1xuY29uc3QgbG9nX2pzXzEgPSByZXF1aXJlKFwiLi9sb2cuanNcIik7XG5jb25zdCBiYXNlNjRfanNfMSA9IHJlcXVpcmUoXCIuL2Jhc2U2NC5qc1wiKTtcbi8qKlxuICogQ29udmVydHM6IGBCZWFyZXIgYT1cImJcIiwgYz1cImRcIiwgQmVhcmVyIGQ9XCJlXCIsIGY9XCJnXCJgLlxuICogSW50bzogYFsgeyBhOiAnYicsIGM6ICdkJyB9LCB7IGQ6ICdlJywgZjogJ2cnIH0gXWAuXG4gKlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIHBhcnNlQ0FFQ2hhbGxlbmdlKGNoYWxsZW5nZXMpIHtcbiAgICBjb25zdCBiZWFyZXJDaGFsbGVuZ2VzID0gYCwgJHtjaGFsbGVuZ2VzLnRyaW0oKX1gLnNwbGl0KFwiLCBCZWFyZXIgXCIpLmZpbHRlcigoeCkgPT4geCk7XG4gICAgcmV0dXJuIGJlYXJlckNoYWxsZW5nZXMubWFwKChjaGFsbGVuZ2UpID0+IHtcbiAgICAgICAgY29uc3QgY2hhbGxlbmdlUGFydHMgPSBgJHtjaGFsbGVuZ2UudHJpbSgpfSwgYC5zcGxpdCgnXCIsICcpLmZpbHRlcigoeCkgPT4geCk7XG4gICAgICAgIGNvbnN0IGtleVZhbHVlUGFpcnMgPSBjaGFsbGVuZ2VQYXJ0cy5tYXAoKGtleVZhbHVlKSA9PiAoKFtrZXksIHZhbHVlXSkgPT4gKHsgW2tleV06IHZhbHVlIH0pKShrZXlWYWx1ZS50cmltKCkuc3BsaXQoJz1cIicpKSk7XG4gICAgICAgIC8vIEtleS12YWx1ZSBwYWlycyB0byBwbGFpbiBvYmplY3Q6XG4gICAgICAgIHJldHVybiBrZXlWYWx1ZVBhaXJzLnJlZHVjZSgoYSwgYikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYSksIGIpKSwge30pO1xuICAgIH0pO1xufVxuZXhwb3J0cy5wYXJzZUNBRUNoYWxsZW5nZSA9IHBhcnNlQ0FFQ2hhbGxlbmdlO1xuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGFzIGEgY2FsbGJhY2sgZm9yIHRoZSBgYmVhcmVyVG9rZW5BdXRoZW50aWNhdGlvblBvbGljeWAgb2YgYEBhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmVgLCB0byBzdXBwb3J0IENBRSBjaGFsbGVuZ2VzOlxuICogW0NvbnRpbnVvdXMgQWNjZXNzIEV2YWx1YXRpb25dKGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2F6dXJlL2FjdGl2ZS1kaXJlY3RvcnkvY29uZGl0aW9uYWwtYWNjZXNzL2NvbmNlcHQtY29udGludW91cy1hY2Nlc3MtZXZhbHVhdGlvbikuXG4gKlxuICogQ2FsbCB0aGUgYGJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3lgIHdpdGggdGhlIGZvbGxvd2luZyBvcHRpb25zOlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBiZWFyZXJUb2tlbkF1dGhlbnRpY2F0aW9uUG9saWN5IH0gZnJvbSBcIkBhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmVcIjtcbiAqIGltcG9ydCB7IGF1dGhvcml6ZVJlcXVlc3RPbkNsYWltQ2hhbGxlbmdlIH0gZnJvbSBcIkBhenVyZS9jb3JlLWNsaWVudFwiO1xuICpcbiAqIGNvbnN0IGJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3kgPSBiZWFyZXJUb2tlbkF1dGhlbnRpY2F0aW9uUG9saWN5KHtcbiAqICAgYXV0aG9yaXplUmVxdWVzdE9uQ2hhbGxlbmdlOiBhdXRob3JpemVSZXF1ZXN0T25DbGFpbUNoYWxsZW5nZVxuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBPbmNlIHByb3ZpZGVkLCB0aGUgYGJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3lgIHBvbGljeSB3aWxsIGludGVybmFsbHkgaGFuZGxlIENvbnRpbnVvdXMgQWNjZXNzIEV2YWx1YXRpb24gKENBRSkgY2hhbGxlbmdlcy5cbiAqIFdoZW4gaXQgY2FuJ3QgY29tcGxldGUgYSBjaGFsbGVuZ2UgaXQgd2lsbCByZXR1cm4gdGhlIDQwMSAodW5hdXRob3JpemVkKSByZXNwb25zZSBmcm9tIEFSTS5cbiAqXG4gKiBFeGFtcGxlIGNoYWxsZW5nZSB3aXRoIGNsYWltczpcbiAqXG4gKiBgYGBcbiAqIEJlYXJlciBhdXRob3JpemF0aW9uX3VyaT1cImh0dHBzOi8vbG9naW4ud2luZG93cy1wcGUubmV0L1wiLCBlcnJvcj1cImludmFsaWRfdG9rZW5cIixcbiAqIGVycm9yX2Rlc2NyaXB0aW9uPVwiVXNlciBzZXNzaW9uIGhhcyBiZWVuIHJldm9rZWRcIixcbiAqIGNsYWltcz1cImV5SmhZMk5sYzNOZmRHOXJaVzRpT25zaWJtSm1JanA3SW1WemMyVnVkR2xoYkNJNmRISjFaU3dnSW5aaGJIVmxJam9pTVRZd016YzBNamd3TUNKOWZYMD1cIlxuICogYGBgXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGF1dGhvcml6ZVJlcXVlc3RPbkNsYWltQ2hhbGxlbmdlKG9uQ2hhbGxlbmdlT3B0aW9ucykge1xuICAgIGNvbnN0IHsgc2NvcGVzLCByZXNwb25zZSB9ID0gb25DaGFsbGVuZ2VPcHRpb25zO1xuICAgIGNvbnN0IGxvZ2dlciA9IG9uQ2hhbGxlbmdlT3B0aW9ucy5sb2dnZXIgfHwgbG9nX2pzXzEubG9nZ2VyO1xuICAgIGNvbnN0IGNoYWxsZW5nZSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFwiV1dXLUF1dGhlbnRpY2F0ZVwiKTtcbiAgICBpZiAoIWNoYWxsZW5nZSkge1xuICAgICAgICBsb2dnZXIuaW5mbyhgVGhlIFdXVy1BdXRoZW50aWNhdGUgaGVhZGVyIHdhcyBtaXNzaW5nLiBGYWlsZWQgdG8gcGVyZm9ybSB0aGUgQ29udGludW91cyBBY2Nlc3MgRXZhbHVhdGlvbiBhdXRoZW50aWNhdGlvbiBmbG93LmApO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGNoYWxsZW5nZXMgPSBwYXJzZUNBRUNoYWxsZW5nZShjaGFsbGVuZ2UpIHx8IFtdO1xuICAgIGNvbnN0IHBhcnNlZENoYWxsZW5nZSA9IGNoYWxsZW5nZXMuZmluZCgoeCkgPT4geC5jbGFpbXMpO1xuICAgIGlmICghcGFyc2VkQ2hhbGxlbmdlKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKGBUaGUgV1dXLUF1dGhlbnRpY2F0ZSBoZWFkZXIgd2FzIG1pc3NpbmcgdGhlIG5lY2Vzc2FyeSBcImNsYWltc1wiIHRvIHBlcmZvcm0gdGhlIENvbnRpbnVvdXMgQWNjZXNzIEV2YWx1YXRpb24gYXV0aGVudGljYXRpb24gZmxvdy5gKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IGF3YWl0IG9uQ2hhbGxlbmdlT3B0aW9ucy5nZXRBY2Nlc3NUb2tlbihwYXJzZWRDaGFsbGVuZ2Uuc2NvcGUgPyBbcGFyc2VkQ2hhbGxlbmdlLnNjb3BlXSA6IHNjb3Blcywge1xuICAgICAgICBjbGFpbXM6ICgwLCBiYXNlNjRfanNfMS5kZWNvZGVTdHJpbmdUb1N0cmluZykocGFyc2VkQ2hhbGxlbmdlLmNsYWltcyksXG4gICAgfSk7XG4gICAgaWYgKCFhY2Nlc3NUb2tlbikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIG9uQ2hhbGxlbmdlT3B0aW9ucy5yZXF1ZXN0LmhlYWRlcnMuc2V0KFwiQXV0aG9yaXphdGlvblwiLCBgQmVhcmVyICR7YWNjZXNzVG9rZW4udG9rZW59YCk7XG4gICAgcmV0dXJuIHRydWU7XG59XG5leHBvcnRzLmF1dGhvcml6ZVJlcXVlc3RPbkNsYWltQ2hhbGxlbmdlID0gYXV0aG9yaXplUmVxdWVzdE9uQ2xhaW1DaGFsbGVuZ2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hdXRob3JpemVSZXF1ZXN0T25DbGFpbUNoYWxsZW5nZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmF1dGhvcml6ZVJlcXVlc3RPblRlbmFudENoYWxsZW5nZSA9IHZvaWQgMDtcbi8qKlxuICogQSBzZXQgb2YgY29uc3RhbnRzIHVzZWQgaW50ZXJuYWxseSB3aGVuIHByb2Nlc3NpbmcgcmVxdWVzdHMuXG4gKi9cbmNvbnN0IENvbnN0YW50cyA9IHtcbiAgICBEZWZhdWx0U2NvcGU6IFwiLy5kZWZhdWx0XCIsXG4gICAgLyoqXG4gICAgICogRGVmaW5lcyBjb25zdGFudHMgZm9yIHVzZSB3aXRoIEhUVFAgaGVhZGVycy5cbiAgICAgKi9cbiAgICBIZWFkZXJDb25zdGFudHM6IHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBBdXRob3JpemF0aW9uIGhlYWRlci5cbiAgICAgICAgICovXG4gICAgICAgIEFVVEhPUklaQVRJT046IFwiYXV0aG9yaXphdGlvblwiLFxuICAgIH0sXG59O1xuZnVuY3Rpb24gaXNVdWlkKHRleHQpIHtcbiAgICByZXR1cm4gL15bMC05YS1mQS1GXXs4fVxcYi1bMC05YS1mQS1GXXs0fVxcYi1bMC05YS1mQS1GXXs0fVxcYi1bMC05YS1mQS1GXXs0fVxcYi1bMC05YS1mQS1GXXsxMn0kLy50ZXN0KHRleHQpO1xufVxuLyoqXG4gKiBEZWZpbmVzIGEgY2FsbGJhY2sgdG8gaGFuZGxlIGF1dGggY2hhbGxlbmdlIGZvciBTdG9yYWdlIEFQSXMuXG4gKiBUaGlzIGltcGxlbWVudHMgdGhlIGJlYXJlciBjaGFsbGVuZ2UgcHJvY2VzcyBkZXNjcmliZWQgaGVyZTogaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2F1dGhvcml6ZS13aXRoLWF6dXJlLWFjdGl2ZS1kaXJlY3RvcnkjYmVhcmVyLWNoYWxsZW5nZVxuICogSGFuZGxpbmcgaGFzIHNwZWNpZmljIGZlYXR1cmVzIGZvciBzdG9yYWdlIHRoYXQgZGVwYXJ0cyB0byB0aGUgZ2VuZXJhbCBBQUQgY2hhbGxlbmdlIGRvY3MuXG4gKiovXG5jb25zdCBhdXRob3JpemVSZXF1ZXN0T25UZW5hbnRDaGFsbGVuZ2UgPSBhc3luYyAoY2hhbGxlbmdlT3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zID0gcmVxdWVzdFRvT3B0aW9ucyhjaGFsbGVuZ2VPcHRpb25zLnJlcXVlc3QpO1xuICAgIGNvbnN0IGNoYWxsZW5nZSA9IGdldENoYWxsZW5nZShjaGFsbGVuZ2VPcHRpb25zLnJlc3BvbnNlKTtcbiAgICBpZiAoY2hhbGxlbmdlKSB7XG4gICAgICAgIGNvbnN0IGNoYWxsZW5nZUluZm8gPSBwYXJzZUNoYWxsZW5nZShjaGFsbGVuZ2UpO1xuICAgICAgICBjb25zdCBjaGFsbGVuZ2VTY29wZXMgPSBidWlsZFNjb3BlcyhjaGFsbGVuZ2VPcHRpb25zLCBjaGFsbGVuZ2VJbmZvKTtcbiAgICAgICAgY29uc3QgdGVuYW50SWQgPSBleHRyYWN0VGVuYW50SWQoY2hhbGxlbmdlSW5mbyk7XG4gICAgICAgIGlmICghdGVuYW50SWQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IGF3YWl0IGNoYWxsZW5nZU9wdGlvbnMuZ2V0QWNjZXNzVG9rZW4oY2hhbGxlbmdlU2NvcGVzLCBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHJlcXVlc3RPcHRpb25zKSwgeyB0ZW5hbnRJZCB9KSk7XG4gICAgICAgIGlmICghYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjaGFsbGVuZ2VPcHRpb25zLnJlcXVlc3QuaGVhZGVycy5zZXQoQ29uc3RhbnRzLkhlYWRlckNvbnN0YW50cy5BVVRIT1JJWkFUSU9OLCBgQmVhcmVyICR7YWNjZXNzVG9rZW4udG9rZW59YCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuZXhwb3J0cy5hdXRob3JpemVSZXF1ZXN0T25UZW5hbnRDaGFsbGVuZ2UgPSBhdXRob3JpemVSZXF1ZXN0T25UZW5hbnRDaGFsbGVuZ2U7XG4vKipcbiAqIEV4dHJhY3RzIHRoZSB0ZW5hbnQgaWQgZnJvbSB0aGUgY2hhbGxlbmdlIGluZm9ybWF0aW9uXG4gKiBUaGUgdGVuYW50IGlkIGlzIGNvbnRhaW5lZCBpbiB0aGUgYXV0aG9yaXphdGlvbl91cmkgYXMgdGhlIGZpcnN0XG4gKiBwYXRoIHBhcnQuXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RUZW5hbnRJZChjaGFsbGVuZ2VJbmZvKSB7XG4gICAgY29uc3QgcGFyc2VkQXV0aFVyaSA9IG5ldyBVUkwoY2hhbGxlbmdlSW5mby5hdXRob3JpemF0aW9uX3VyaSk7XG4gICAgY29uc3QgcGF0aFNlZ21lbnRzID0gcGFyc2VkQXV0aFVyaS5wYXRobmFtZS5zcGxpdChcIi9cIik7XG4gICAgY29uc3QgdGVuYW50SWQgPSBwYXRoU2VnbWVudHNbMV07XG4gICAgaWYgKHRlbmFudElkICYmIGlzVXVpZCh0ZW5hbnRJZCkpIHtcbiAgICAgICAgcmV0dXJuIHRlbmFudElkO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuLyoqXG4gKiBCdWlsZHMgdGhlIGF1dGhlbnRpY2F0aW9uIHNjb3BlcyBiYXNlZCBvbiB0aGUgaW5mb3JtYXRpb24gdGhhdCBjb21lcyBpbiB0aGVcbiAqIGNoYWxsZW5nZSBpbmZvcm1hdGlvbi4gU2NvcGVzIHVybCBpcyBwcmVzZW50IGluIHRoZSByZXNvdXJjZV9pZCwgaWYgaXQgaXMgZW1wdHlcbiAqIHdlIGtlZXAgdXNpbmcgdGhlIG9yaWdpbmFsIHNjb3Blcy5cbiAqL1xuZnVuY3Rpb24gYnVpbGRTY29wZXMoY2hhbGxlbmdlT3B0aW9ucywgY2hhbGxlbmdlSW5mbykge1xuICAgIGlmICghY2hhbGxlbmdlSW5mby5yZXNvdXJjZV9pZCkge1xuICAgICAgICByZXR1cm4gY2hhbGxlbmdlT3B0aW9ucy5zY29wZXM7XG4gICAgfVxuICAgIGNvbnN0IGNoYWxsZW5nZVNjb3BlcyA9IG5ldyBVUkwoY2hhbGxlbmdlSW5mby5yZXNvdXJjZV9pZCk7XG4gICAgY2hhbGxlbmdlU2NvcGVzLnBhdGhuYW1lID0gQ29uc3RhbnRzLkRlZmF1bHRTY29wZTtcbiAgICBsZXQgc2NvcGUgPSBjaGFsbGVuZ2VTY29wZXMudG9TdHJpbmcoKTtcbiAgICBpZiAoc2NvcGUgPT09IFwiaHR0cHM6Ly9kaXNrLmF6dXJlLmNvbS8uZGVmYXVsdFwiKSB7XG4gICAgICAgIC8vIHRoZSBleHRyYSBzbGFzaCBpcyByZXF1aXJlZCBieSB0aGUgc2VydmljZVxuICAgICAgICBzY29wZSA9IFwiaHR0cHM6Ly9kaXNrLmF6dXJlLmNvbS8vLmRlZmF1bHRcIjtcbiAgICB9XG4gICAgcmV0dXJuIFtzY29wZV07XG59XG4vKipcbiAqIFdlIHdpbGwgcmV0cmlldmUgdGhlIGNoYWxsZW5nZSBvbmx5IGlmIHRoZSByZXNwb25zZSBzdGF0dXMgY29kZSB3YXMgNDAxLFxuICogYW5kIGlmIHRoZSByZXNwb25zZSBjb250YWluZWQgdGhlIGhlYWRlciBcIldXVy1BdXRoZW50aWNhdGVcIiB3aXRoIGEgbm9uLWVtcHR5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBnZXRDaGFsbGVuZ2UocmVzcG9uc2UpIHtcbiAgICBjb25zdCBjaGFsbGVuZ2UgPSByZXNwb25zZS5oZWFkZXJzLmdldChcIldXVy1BdXRoZW50aWNhdGVcIik7XG4gICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAxICYmIGNoYWxsZW5nZSkge1xuICAgICAgICByZXR1cm4gY2hhbGxlbmdlO1xuICAgIH1cbiAgICByZXR1cm47XG59XG4vKipcbiAqIENvbnZlcnRzOiBgQmVhcmVyIGE9XCJiXCIgYz1cImRcImAuXG4gKiBJbnRvOiBgWyB7IGE6ICdiJywgYzogJ2QnIH1dYC5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gcGFyc2VDaGFsbGVuZ2UoY2hhbGxlbmdlKSB7XG4gICAgY29uc3QgYmVhcmVyQ2hhbGxlbmdlID0gY2hhbGxlbmdlLnNsaWNlKFwiQmVhcmVyIFwiLmxlbmd0aCk7XG4gICAgY29uc3QgY2hhbGxlbmdlUGFydHMgPSBgJHtiZWFyZXJDaGFsbGVuZ2UudHJpbSgpfSBgLnNwbGl0KFwiIFwiKS5maWx0ZXIoKHgpID0+IHgpO1xuICAgIGNvbnN0IGtleVZhbHVlUGFpcnMgPSBjaGFsbGVuZ2VQYXJ0cy5tYXAoKGtleVZhbHVlKSA9PiAoKFtrZXksIHZhbHVlXSkgPT4gKHsgW2tleV06IHZhbHVlIH0pKShrZXlWYWx1ZS50cmltKCkuc3BsaXQoXCI9XCIpKSk7XG4gICAgLy8gS2V5LXZhbHVlIHBhaXJzIHRvIHBsYWluIG9iamVjdDpcbiAgICByZXR1cm4ga2V5VmFsdWVQYWlycy5yZWR1Y2UoKGEsIGIpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGEpLCBiKSksIHt9KTtcbn1cbi8qKlxuICogRXh0cmFjdHMgdGhlIG9wdGlvbnMgZm9ybSBhIFBpcGVsaW5lIFJlcXVlc3QgZm9yIGxhdGVyIHJlLXVzZVxuICovXG5mdW5jdGlvbiByZXF1ZXN0VG9PcHRpb25zKHJlcXVlc3QpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBhYm9ydFNpZ25hbDogcmVxdWVzdC5hYm9ydFNpZ25hbCxcbiAgICAgICAgcmVxdWVzdE9wdGlvbnM6IHtcbiAgICAgICAgICAgIHRpbWVvdXQ6IHJlcXVlc3QudGltZW91dCxcbiAgICAgICAgfSxcbiAgICAgICAgdHJhY2luZ09wdGlvbnM6IHJlcXVlc3QudHJhY2luZ09wdGlvbnMsXG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWF1dGhvcml6ZVJlcXVlc3RPblRlbmFudENoYWxsZW5nZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmF1dGhvcml6ZVJlcXVlc3RPblRlbmFudENoYWxsZW5nZSA9IGV4cG9ydHMuYXV0aG9yaXplUmVxdWVzdE9uQ2xhaW1DaGFsbGVuZ2UgPSBleHBvcnRzLnNlcmlhbGl6YXRpb25Qb2xpY3lOYW1lID0gZXhwb3J0cy5zZXJpYWxpemF0aW9uUG9saWN5ID0gZXhwb3J0cy5kZXNlcmlhbGl6YXRpb25Qb2xpY3lOYW1lID0gZXhwb3J0cy5kZXNlcmlhbGl6YXRpb25Qb2xpY3kgPSBleHBvcnRzLlhNTF9DSEFSS0VZID0gZXhwb3J0cy5YTUxfQVRUUktFWSA9IGV4cG9ydHMuY3JlYXRlQ2xpZW50UGlwZWxpbmUgPSBleHBvcnRzLlNlcnZpY2VDbGllbnQgPSBleHBvcnRzLk1hcHBlclR5cGVOYW1lcyA9IGV4cG9ydHMuY3JlYXRlU2VyaWFsaXplciA9IHZvaWQgMDtcbnZhciBzZXJpYWxpemVyX2pzXzEgPSByZXF1aXJlKFwiLi9zZXJpYWxpemVyLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU2VyaWFsaXplclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2VyaWFsaXplcl9qc18xLmNyZWF0ZVNlcmlhbGl6ZXI7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJNYXBwZXJUeXBlTmFtZXNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNlcmlhbGl6ZXJfanNfMS5NYXBwZXJUeXBlTmFtZXM7IH0gfSk7XG52YXIgc2VydmljZUNsaWVudF9qc18xID0gcmVxdWlyZShcIi4vc2VydmljZUNsaWVudC5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlNlcnZpY2VDbGllbnRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNlcnZpY2VDbGllbnRfanNfMS5TZXJ2aWNlQ2xpZW50OyB9IH0pO1xudmFyIHBpcGVsaW5lX2pzXzEgPSByZXF1aXJlKFwiLi9waXBlbGluZS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNsaWVudFBpcGVsaW5lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwaXBlbGluZV9qc18xLmNyZWF0ZUNsaWVudFBpcGVsaW5lOyB9IH0pO1xudmFyIGludGVyZmFjZXNfanNfMSA9IHJlcXVpcmUoXCIuL2ludGVyZmFjZXMuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJYTUxfQVRUUktFWVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gaW50ZXJmYWNlc19qc18xLlhNTF9BVFRSS0VZOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiWE1MX0NIQVJLRVlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGludGVyZmFjZXNfanNfMS5YTUxfQ0hBUktFWTsgfSB9KTtcbnZhciBkZXNlcmlhbGl6YXRpb25Qb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL2Rlc2VyaWFsaXphdGlvblBvbGljeS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlc2VyaWFsaXphdGlvblBvbGljeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZGVzZXJpYWxpemF0aW9uUG9saWN5X2pzXzEuZGVzZXJpYWxpemF0aW9uUG9saWN5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVzZXJpYWxpemF0aW9uUG9saWN5TmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZGVzZXJpYWxpemF0aW9uUG9saWN5X2pzXzEuZGVzZXJpYWxpemF0aW9uUG9saWN5TmFtZTsgfSB9KTtcbnZhciBzZXJpYWxpemF0aW9uUG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9zZXJpYWxpemF0aW9uUG9saWN5LmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2VyaWFsaXphdGlvblBvbGljeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2VyaWFsaXphdGlvblBvbGljeV9qc18xLnNlcmlhbGl6YXRpb25Qb2xpY3k7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzZXJpYWxpemF0aW9uUG9saWN5TmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2VyaWFsaXphdGlvblBvbGljeV9qc18xLnNlcmlhbGl6YXRpb25Qb2xpY3lOYW1lOyB9IH0pO1xudmFyIGF1dGhvcml6ZVJlcXVlc3RPbkNsYWltQ2hhbGxlbmdlX2pzXzEgPSByZXF1aXJlKFwiLi9hdXRob3JpemVSZXF1ZXN0T25DbGFpbUNoYWxsZW5nZS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImF1dGhvcml6ZVJlcXVlc3RPbkNsYWltQ2hhbGxlbmdlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBhdXRob3JpemVSZXF1ZXN0T25DbGFpbUNoYWxsZW5nZV9qc18xLmF1dGhvcml6ZVJlcXVlc3RPbkNsYWltQ2hhbGxlbmdlOyB9IH0pO1xudmFyIGF1dGhvcml6ZVJlcXVlc3RPblRlbmFudENoYWxsZW5nZV9qc18xID0gcmVxdWlyZShcIi4vYXV0aG9yaXplUmVxdWVzdE9uVGVuYW50Q2hhbGxlbmdlLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYXV0aG9yaXplUmVxdWVzdE9uVGVuYW50Q2hhbGxlbmdlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBhdXRob3JpemVSZXF1ZXN0T25UZW5hbnRDaGFsbGVuZ2VfanNfMS5hdXRob3JpemVSZXF1ZXN0T25UZW5hbnRDaGFsbGVuZ2U7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkh0dHBIZWFkZXJzID0gZXhwb3J0cy50b0h0dHBIZWFkZXJzTGlrZSA9IGV4cG9ydHMudG9XZWJSZXNvdXJjZUxpa2UgPSBleHBvcnRzLnRvUGlwZWxpbmVSZXF1ZXN0ID0gdm9pZCAwO1xuY29uc3QgY29yZV9yZXN0X3BpcGVsaW5lXzEgPSByZXF1aXJlKFwiQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZVwiKTtcbi8vIFdlIHVzZSBhIGN1c3RvbSBzeW1ib2wgdG8gY2FjaGUgYSByZWZlcmVuY2UgdG8gdGhlIG9yaWdpbmFsIHJlcXVlc3Qgd2l0aG91dFxuLy8gZXhwb3NpbmcgaXQgb24gdGhlIHB1YmxpYyBpbnRlcmZhY2UuXG5jb25zdCBvcmlnaW5hbFJlcXVlc3RTeW1ib2wgPSBTeW1ib2woXCJPcmlnaW5hbCBQaXBlbGluZVJlcXVlc3RcIik7XG4vLyBTeW1ib2wuZm9yKCkgd2lsbCByZXR1cm4gdGhlIHNhbWUgc3ltYm9sIGlmIGl0J3MgYWxyZWFkeSBiZWVuIGNyZWF0ZWRcbi8vIFRoaXMgcGFydGljdWxhciBvbmUgaXMgdXNlZCBpbiBjb3JlLWNsaWVudCB0byBoYW5kbGUgdGhlIGNhc2Ugb2Ygd2hlbiBhIHJlcXVlc3QgaXNcbi8vIGNsb25lZCBidXQgd2UgbmVlZCB0byByZXRyaWV2ZSB0aGUgT3BlcmF0aW9uU3BlYyBhbmQgT3BlcmF0aW9uQXJndW1lbnRzIGZyb20gdGhlXG4vLyBvcmlnaW5hbCByZXF1ZXN0LlxuY29uc3Qgb3JpZ2luYWxDbGllbnRSZXF1ZXN0U3ltYm9sID0gU3ltYm9sLmZvcihcIkBhenVyZS9jb3JlLWNsaWVudCBvcmlnaW5hbCByZXF1ZXN0XCIpO1xuZnVuY3Rpb24gdG9QaXBlbGluZVJlcXVlc3Qod2ViUmVzb3VyY2UsIG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IGNvbXBhdFdlYlJlc291cmNlID0gd2ViUmVzb3VyY2U7XG4gICAgY29uc3QgcmVxdWVzdCA9IGNvbXBhdFdlYlJlc291cmNlW29yaWdpbmFsUmVxdWVzdFN5bWJvbF07XG4gICAgY29uc3QgaGVhZGVycyA9ICgwLCBjb3JlX3Jlc3RfcGlwZWxpbmVfMS5jcmVhdGVIdHRwSGVhZGVycykod2ViUmVzb3VyY2UuaGVhZGVycy50b0pzb24oeyBwcmVzZXJ2ZUNhc2U6IHRydWUgfSkpO1xuICAgIGlmIChyZXF1ZXN0KSB7XG4gICAgICAgIHJlcXVlc3QuaGVhZGVycyA9IGhlYWRlcnM7XG4gICAgICAgIHJldHVybiByZXF1ZXN0O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgbmV3UmVxdWVzdCA9ICgwLCBjb3JlX3Jlc3RfcGlwZWxpbmVfMS5jcmVhdGVQaXBlbGluZVJlcXVlc3QpKHtcbiAgICAgICAgICAgIHVybDogd2ViUmVzb3VyY2UudXJsLFxuICAgICAgICAgICAgbWV0aG9kOiB3ZWJSZXNvdXJjZS5tZXRob2QsXG4gICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB3ZWJSZXNvdXJjZS53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICB0aW1lb3V0OiB3ZWJSZXNvdXJjZS50aW1lb3V0LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB3ZWJSZXNvdXJjZS5yZXF1ZXN0SWQsXG4gICAgICAgICAgICBhYm9ydFNpZ25hbDogd2ViUmVzb3VyY2UuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICBib2R5OiB3ZWJSZXNvdXJjZS5ib2R5LFxuICAgICAgICAgICAgZm9ybURhdGE6IHdlYlJlc291cmNlLmZvcm1EYXRhLFxuICAgICAgICAgICAgZGlzYWJsZUtlZXBBbGl2ZTogISF3ZWJSZXNvdXJjZS5rZWVwQWxpdmUsXG4gICAgICAgICAgICBvbkRvd25sb2FkUHJvZ3Jlc3M6IHdlYlJlc291cmNlLm9uRG93bmxvYWRQcm9ncmVzcyxcbiAgICAgICAgICAgIG9uVXBsb2FkUHJvZ3Jlc3M6IHdlYlJlc291cmNlLm9uVXBsb2FkUHJvZ3Jlc3MsXG4gICAgICAgICAgICBwcm94eVNldHRpbmdzOiB3ZWJSZXNvdXJjZS5wcm94eVNldHRpbmdzLFxuICAgICAgICAgICAgc3RyZWFtUmVzcG9uc2VTdGF0dXNDb2Rlczogd2ViUmVzb3VyY2Uuc3RyZWFtUmVzcG9uc2VTdGF0dXNDb2RlcyxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChvcHRpb25zLm9yaWdpbmFsUmVxdWVzdCkge1xuICAgICAgICAgICAgbmV3UmVxdWVzdFtvcmlnaW5hbENsaWVudFJlcXVlc3RTeW1ib2xdID1cbiAgICAgICAgICAgICAgICBvcHRpb25zLm9yaWdpbmFsUmVxdWVzdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3UmVxdWVzdDtcbiAgICB9XG59XG5leHBvcnRzLnRvUGlwZWxpbmVSZXF1ZXN0ID0gdG9QaXBlbGluZVJlcXVlc3Q7XG5mdW5jdGlvbiB0b1dlYlJlc291cmNlTGlrZShyZXF1ZXN0LCBvcHRpb25zKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IG9yaWdpbmFsUmVxdWVzdCA9IChfYSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5vcmlnaW5hbFJlcXVlc3QpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHJlcXVlc3Q7XG4gICAgY29uc3Qgd2ViUmVzb3VyY2UgPSB7XG4gICAgICAgIHVybDogcmVxdWVzdC51cmwsXG4gICAgICAgIG1ldGhvZDogcmVxdWVzdC5tZXRob2QsXG4gICAgICAgIGhlYWRlcnM6IHRvSHR0cEhlYWRlcnNMaWtlKHJlcXVlc3QuaGVhZGVycyksXG4gICAgICAgIHdpdGhDcmVkZW50aWFsczogcmVxdWVzdC53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgIHRpbWVvdXQ6IHJlcXVlc3QudGltZW91dCxcbiAgICAgICAgcmVxdWVzdElkOiByZXF1ZXN0LmhlYWRlcnMuZ2V0KFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiKSB8fCByZXF1ZXN0LnJlcXVlc3RJZCxcbiAgICAgICAgYWJvcnRTaWduYWw6IHJlcXVlc3QuYWJvcnRTaWduYWwsXG4gICAgICAgIGJvZHk6IHJlcXVlc3QuYm9keSxcbiAgICAgICAgZm9ybURhdGE6IHJlcXVlc3QuZm9ybURhdGEsXG4gICAgICAgIGtlZXBBbGl2ZTogISFyZXF1ZXN0LmRpc2FibGVLZWVwQWxpdmUsXG4gICAgICAgIG9uRG93bmxvYWRQcm9ncmVzczogcmVxdWVzdC5vbkRvd25sb2FkUHJvZ3Jlc3MsXG4gICAgICAgIG9uVXBsb2FkUHJvZ3Jlc3M6IHJlcXVlc3Qub25VcGxvYWRQcm9ncmVzcyxcbiAgICAgICAgcHJveHlTZXR0aW5nczogcmVxdWVzdC5wcm94eVNldHRpbmdzLFxuICAgICAgICBzdHJlYW1SZXNwb25zZVN0YXR1c0NvZGVzOiByZXF1ZXN0LnN0cmVhbVJlc3BvbnNlU3RhdHVzQ29kZXMsXG4gICAgICAgIGNsb25lKCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGNsb25lIGEgbm9uLXByb3hpZWQgV2ViUmVzb3VyY2VMaWtlXCIpO1xuICAgICAgICB9LFxuICAgICAgICBwcmVwYXJlKCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiV2ViUmVzb3VyY2VMaWtlLnByZXBhcmUoKSBpcyBub3Qgc3VwcG9ydGVkIGJ5IEBhenVyZS9jb3JlLWh0dHAtY29tcGF0XCIpO1xuICAgICAgICB9LFxuICAgICAgICB2YWxpZGF0ZVJlcXVlc3RQcm9wZXJ0aWVzKCkge1xuICAgICAgICAgICAgLyoqIGRvIG5vdGhpbmcgKi9cbiAgICAgICAgfSxcbiAgICB9O1xuICAgIGlmIChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY3JlYXRlUHJveHkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm94eSh3ZWJSZXNvdXJjZSwge1xuICAgICAgICAgICAgZ2V0KHRhcmdldCwgcHJvcCwgcmVjZWl2ZXIpIHtcbiAgICAgICAgICAgICAgICBpZiAocHJvcCA9PT0gb3JpZ2luYWxSZXF1ZXN0U3ltYm9sKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXF1ZXN0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChwcm9wID09PSBcImNsb25lXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0b1dlYlJlc291cmNlTGlrZSh0b1BpcGVsaW5lUmVxdWVzdCh3ZWJSZXNvdXJjZSwgeyBvcmlnaW5hbFJlcXVlc3QgfSksIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVQcm94eTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbFJlcXVlc3QsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0KHRhcmdldCwgcHJvcCwgcmVjZWl2ZXIpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldCh0YXJnZXQsIHByb3AsIHZhbHVlLCByZWNlaXZlcikge1xuICAgICAgICAgICAgICAgIGlmIChwcm9wID09PSBcImtlZXBBbGl2ZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuZGlzYWJsZUtlZXBBbGl2ZSA9ICF2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcGFzc1Rocm91Z2hQcm9wcyA9IFtcbiAgICAgICAgICAgICAgICAgICAgXCJ1cmxcIixcbiAgICAgICAgICAgICAgICAgICAgXCJtZXRob2RcIixcbiAgICAgICAgICAgICAgICAgICAgXCJ3aXRoQ3JlZGVudGlhbHNcIixcbiAgICAgICAgICAgICAgICAgICAgXCJ0aW1lb3V0XCIsXG4gICAgICAgICAgICAgICAgICAgIFwicmVxdWVzdElkXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiYWJvcnRTaWduYWxcIixcbiAgICAgICAgICAgICAgICAgICAgXCJib2R5XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZm9ybURhdGFcIixcbiAgICAgICAgICAgICAgICAgICAgXCJvbkRvd25sb2FkUHJvZ3Jlc3NcIixcbiAgICAgICAgICAgICAgICAgICAgXCJvblVwbG9hZFByb2dyZXNzXCIsXG4gICAgICAgICAgICAgICAgICAgIFwicHJveHlTZXR0aW5nc1wiLFxuICAgICAgICAgICAgICAgICAgICBcInN0cmVhbVJlc3BvbnNlU3RhdHVzQ29kZXNcIixcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcHJvcCA9PT0gXCJzdHJpbmdcIiAmJiBwYXNzVGhyb3VnaFByb3BzLmluY2x1ZGVzKHByb3ApKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3RbcHJvcF0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3Quc2V0KHRhcmdldCwgcHJvcCwgdmFsdWUsIHJlY2VpdmVyKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHdlYlJlc291cmNlO1xuICAgIH1cbn1cbmV4cG9ydHMudG9XZWJSZXNvdXJjZUxpa2UgPSB0b1dlYlJlc291cmNlTGlrZTtcbi8qKlxuICogQ29udmVydHMgSHR0cEhlYWRlcnMgZnJvbSBjb3JlLXJlc3QtcGlwZWxpbmUgdG8gbG9vayBsaWtlXG4gKiBIdHRwSGVhZGVycyBmcm9tIGNvcmUtaHR0cC5cbiAqIEBwYXJhbSBoZWFkZXJzIC0gSHR0cEhlYWRlcnMgZnJvbSBjb3JlLXJlc3QtcGlwZWxpbmVcbiAqIEByZXR1cm5zIEh0dHBIZWFkZXJzIGFzIHRoZXkgbG9va2VkIGluIGNvcmUtaHR0cFxuICovXG5mdW5jdGlvbiB0b0h0dHBIZWFkZXJzTGlrZShoZWFkZXJzKSB7XG4gICAgcmV0dXJuIG5ldyBIdHRwSGVhZGVycyhoZWFkZXJzLnRvSlNPTih7IHByZXNlcnZlQ2FzZTogdHJ1ZSB9KSk7XG59XG5leHBvcnRzLnRvSHR0cEhlYWRlcnNMaWtlID0gdG9IdHRwSGVhZGVyc0xpa2U7XG4vKipcbiAqIEEgY29sbGVjdGlvbiBvZiBIdHRwSGVhZGVycyB0aGF0IGNhbiBiZSBzZW50IHdpdGggYSBIVFRQIHJlcXVlc3QuXG4gKi9cbmZ1bmN0aW9uIGdldEhlYWRlcktleShoZWFkZXJOYW1lKSB7XG4gICAgcmV0dXJuIGhlYWRlck5hbWUudG9Mb3dlckNhc2UoKTtcbn1cbi8qKlxuICogQSBjb2xsZWN0aW9uIG9mIEhUVFAgaGVhZGVyIGtleS92YWx1ZSBwYWlycy5cbiAqL1xuY2xhc3MgSHR0cEhlYWRlcnMge1xuICAgIGNvbnN0cnVjdG9yKHJhd0hlYWRlcnMpIHtcbiAgICAgICAgdGhpcy5faGVhZGVyc01hcCA9IHt9O1xuICAgICAgICBpZiAocmF3SGVhZGVycykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBoZWFkZXJOYW1lIGluIHJhd0hlYWRlcnMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldChoZWFkZXJOYW1lLCByYXdIZWFkZXJzW2hlYWRlck5hbWVdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXQgYSBoZWFkZXIgaW4gdGhpcyBjb2xsZWN0aW9uIHdpdGggdGhlIHByb3ZpZGVkIG5hbWUgYW5kIHZhbHVlLiBUaGUgbmFtZSBpc1xuICAgICAqIGNhc2UtaW5zZW5zaXRpdmUuXG4gICAgICogQHBhcmFtIGhlYWRlck5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgaGVhZGVyIHRvIHNldC4gVGhpcyB2YWx1ZSBpcyBjYXNlLWluc2Vuc2l0aXZlLlxuICAgICAqIEBwYXJhbSBoZWFkZXJWYWx1ZSAtIFRoZSB2YWx1ZSBvZiB0aGUgaGVhZGVyIHRvIHNldC5cbiAgICAgKi9cbiAgICBzZXQoaGVhZGVyTmFtZSwgaGVhZGVyVmFsdWUpIHtcbiAgICAgICAgdGhpcy5faGVhZGVyc01hcFtnZXRIZWFkZXJLZXkoaGVhZGVyTmFtZSldID0ge1xuICAgICAgICAgICAgbmFtZTogaGVhZGVyTmFtZSxcbiAgICAgICAgICAgIHZhbHVlOiBoZWFkZXJWYWx1ZS50b1N0cmluZygpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGhlYWRlciB2YWx1ZSBmb3IgdGhlIHByb3ZpZGVkIGhlYWRlciBuYW1lLCBvciB1bmRlZmluZWQgaWYgbm8gaGVhZGVyIGV4aXN0cyBpbiB0aGlzXG4gICAgICogY29sbGVjdGlvbiB3aXRoIHRoZSBwcm92aWRlZCBuYW1lLlxuICAgICAqIEBwYXJhbSBoZWFkZXJOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGhlYWRlci5cbiAgICAgKi9cbiAgICBnZXQoaGVhZGVyTmFtZSkge1xuICAgICAgICBjb25zdCBoZWFkZXIgPSB0aGlzLl9oZWFkZXJzTWFwW2dldEhlYWRlcktleShoZWFkZXJOYW1lKV07XG4gICAgICAgIHJldHVybiAhaGVhZGVyID8gdW5kZWZpbmVkIDogaGVhZGVyLnZhbHVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgd2hldGhlciBvciBub3QgdGhpcyBoZWFkZXIgY29sbGVjdGlvbiBjb250YWlucyBhIGhlYWRlciBlbnRyeSBmb3IgdGhlIHByb3ZpZGVkIGhlYWRlciBuYW1lLlxuICAgICAqL1xuICAgIGNvbnRhaW5zKGhlYWRlck5hbWUpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5faGVhZGVyc01hcFtnZXRIZWFkZXJLZXkoaGVhZGVyTmFtZSldO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZW1vdmUgdGhlIGhlYWRlciB3aXRoIHRoZSBwcm92aWRlZCBoZWFkZXJOYW1lLiBSZXR1cm4gd2hldGhlciBvciBub3QgdGhlIGhlYWRlciBleGlzdGVkIGFuZFxuICAgICAqIHdhcyByZW1vdmVkLlxuICAgICAqIEBwYXJhbSBoZWFkZXJOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGhlYWRlciB0byByZW1vdmUuXG4gICAgICovXG4gICAgcmVtb3ZlKGhlYWRlck5hbWUpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5jb250YWlucyhoZWFkZXJOYW1lKTtcbiAgICAgICAgZGVsZXRlIHRoaXMuX2hlYWRlcnNNYXBbZ2V0SGVhZGVyS2V5KGhlYWRlck5hbWUpXTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBoZWFkZXJzIHRoYXQgYXJlIGNvbnRhaW5lZCB0aGlzIGNvbGxlY3Rpb24gYXMgYW4gb2JqZWN0LlxuICAgICAqL1xuICAgIHJhd0hlYWRlcnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvSnNvbih7IHByZXNlcnZlQ2FzZTogdHJ1ZSB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBoZWFkZXJzIHRoYXQgYXJlIGNvbnRhaW5lZCBpbiB0aGlzIGNvbGxlY3Rpb24gYXMgYW4gYXJyYXkuXG4gICAgICovXG4gICAgaGVhZGVyc0FycmF5KCkge1xuICAgICAgICBjb25zdCBoZWFkZXJzID0gW107XG4gICAgICAgIGZvciAoY29uc3QgaGVhZGVyS2V5IGluIHRoaXMuX2hlYWRlcnNNYXApIHtcbiAgICAgICAgICAgIGhlYWRlcnMucHVzaCh0aGlzLl9oZWFkZXJzTWFwW2hlYWRlcktleV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoZWFkZXJzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGhlYWRlciBuYW1lcyB0aGF0IGFyZSBjb250YWluZWQgaW4gdGhpcyBjb2xsZWN0aW9uLlxuICAgICAqL1xuICAgIGhlYWRlck5hbWVzKCkge1xuICAgICAgICBjb25zdCBoZWFkZXJOYW1lcyA9IFtdO1xuICAgICAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzQXJyYXkoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICBoZWFkZXJOYW1lcy5wdXNoKGhlYWRlcnNbaV0ubmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGhlYWRlck5hbWVzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGhlYWRlciB2YWx1ZXMgdGhhdCBhcmUgY29udGFpbmVkIGluIHRoaXMgY29sbGVjdGlvbi5cbiAgICAgKi9cbiAgICBoZWFkZXJWYWx1ZXMoKSB7XG4gICAgICAgIGNvbnN0IGhlYWRlclZhbHVlcyA9IFtdO1xuICAgICAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzQXJyYXkoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICBoZWFkZXJWYWx1ZXMucHVzaChoZWFkZXJzW2ldLnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGVhZGVyVmFsdWVzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIEpTT04gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgSFRUUCBoZWFkZXIgY29sbGVjdGlvbi5cbiAgICAgKi9cbiAgICB0b0pzb24ob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgICAgICBpZiAob3B0aW9ucy5wcmVzZXJ2ZUNhc2UpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaGVhZGVyS2V5IGluIHRoaXMuX2hlYWRlcnNNYXApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBoZWFkZXIgPSB0aGlzLl9oZWFkZXJzTWFwW2hlYWRlcktleV07XG4gICAgICAgICAgICAgICAgcmVzdWx0W2hlYWRlci5uYW1lXSA9IGhlYWRlci52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaGVhZGVyS2V5IGluIHRoaXMuX2hlYWRlcnNNYXApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBoZWFkZXIgPSB0aGlzLl9oZWFkZXJzTWFwW2hlYWRlcktleV07XG4gICAgICAgICAgICAgICAgcmVzdWx0W2dldEhlYWRlcktleShoZWFkZXIubmFtZSldID0gaGVhZGVyLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgSFRUUCBoZWFkZXIgY29sbGVjdGlvbi5cbiAgICAgKi9cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMudG9Kc29uKHsgcHJlc2VydmVDYXNlOiB0cnVlIH0pKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgZGVlcCBjbG9uZS9jb3B5IG9mIHRoaXMgSHR0cEhlYWRlcnMgY29sbGVjdGlvbi5cbiAgICAgKi9cbiAgICBjbG9uZSgpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0UHJlc2VydmluZ0Nhc2luZyA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGhlYWRlcktleSBpbiB0aGlzLl9oZWFkZXJzTWFwKSB7XG4gICAgICAgICAgICBjb25zdCBoZWFkZXIgPSB0aGlzLl9oZWFkZXJzTWFwW2hlYWRlcktleV07XG4gICAgICAgICAgICByZXN1bHRQcmVzZXJ2aW5nQ2FzaW5nW2hlYWRlci5uYW1lXSA9IGhlYWRlci52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IEh0dHBIZWFkZXJzKHJlc3VsdFByZXNlcnZpbmdDYXNpbmcpO1xuICAgIH1cbn1cbmV4cG9ydHMuSHR0cEhlYWRlcnMgPSBIdHRwSGVhZGVycztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWwuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50b1BpcGVsaW5lUmVzcG9uc2UgPSBleHBvcnRzLnRvQ29tcGF0UmVzcG9uc2UgPSB2b2lkIDA7XG5jb25zdCBjb3JlX3Jlc3RfcGlwZWxpbmVfMSA9IHJlcXVpcmUoXCJAYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lXCIpO1xuY29uc3QgdXRpbF9qc18xID0gcmVxdWlyZShcIi4vdXRpbC5qc1wiKTtcbmNvbnN0IG9yaWdpbmFsUmVzcG9uc2UgPSBTeW1ib2woXCJPcmlnaW5hbCBGdWxsT3BlcmF0aW9uUmVzcG9uc2VcIik7XG4vKipcbiAqIEEgaGVscGVyIHRvIGNvbnZlcnQgcmVzcG9uc2Ugb2JqZWN0cyBmcm9tIHRoZSBuZXcgcGlwZWxpbmUgYmFjayB0byB0aGUgb2xkIG9uZS5cbiAqIEBwYXJhbSByZXNwb25zZSAtIEEgcmVzcG9uc2Ugb2JqZWN0IGZyb20gY29yZS1jbGllbnQuXG4gKiBAcmV0dXJucyBBIHJlc3BvbnNlIGNvbXBhdGlibGUgd2l0aCBgSHR0cE9wZXJhdGlvblJlc3BvbnNlYCBmcm9tIGNvcmUtaHR0cC5cbiAqL1xuZnVuY3Rpb24gdG9Db21wYXRSZXNwb25zZShyZXNwb25zZSwgb3B0aW9ucykge1xuICAgIGxldCByZXF1ZXN0ID0gKDAsIHV0aWxfanNfMS50b1dlYlJlc291cmNlTGlrZSkocmVzcG9uc2UucmVxdWVzdCk7XG4gICAgbGV0IGhlYWRlcnMgPSAoMCwgdXRpbF9qc18xLnRvSHR0cEhlYWRlcnNMaWtlKShyZXNwb25zZS5oZWFkZXJzKTtcbiAgICBpZiAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmNyZWF0ZVByb3h5KSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJveHkocmVzcG9uc2UsIHtcbiAgICAgICAgICAgIGdldCh0YXJnZXQsIHByb3AsIHJlY2VpdmVyKSB7XG4gICAgICAgICAgICAgICAgaWYgKHByb3AgPT09IFwiaGVhZGVyc1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBoZWFkZXJzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChwcm9wID09PSBcInJlcXVlc3RcIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVxdWVzdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAocHJvcCA9PT0gb3JpZ2luYWxSZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBSZWZsZWN0LmdldCh0YXJnZXQsIHByb3AsIHJlY2VpdmVyKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXQodGFyZ2V0LCBwcm9wLCB2YWx1ZSwgcmVjZWl2ZXIpIHtcbiAgICAgICAgICAgICAgICBpZiAocHJvcCA9PT0gXCJoZWFkZXJzXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVycyA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChwcm9wID09PSBcInJlcXVlc3RcIikge1xuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0ID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBSZWZsZWN0LnNldCh0YXJnZXQsIHByb3AsIHZhbHVlLCByZWNlaXZlcik7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHJlc3BvbnNlKSwgeyByZXF1ZXN0LFxuICAgICAgICAgICAgaGVhZGVycyB9KTtcbiAgICB9XG59XG5leHBvcnRzLnRvQ29tcGF0UmVzcG9uc2UgPSB0b0NvbXBhdFJlc3BvbnNlO1xuLyoqXG4gKiBBIGhlbHBlciB0byBjb252ZXJ0IGJhY2sgdG8gYSBQaXBlbGluZVJlc3BvbnNlXG4gKiBAcGFyYW0gY29tcGF0UmVzcG9uc2UgLSBBIHJlc3BvbnNlIGNvbXBhdGlibGUgd2l0aCBgSHR0cE9wZXJhdGlvblJlc3BvbnNlYCBmcm9tIGNvcmUtaHR0cC5cbiAqL1xuZnVuY3Rpb24gdG9QaXBlbGluZVJlc3BvbnNlKGNvbXBhdFJlc3BvbnNlKSB7XG4gICAgY29uc3QgZXh0ZW5kZWRDb21wYXRSZXNwb25zZSA9IGNvbXBhdFJlc3BvbnNlO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gZXh0ZW5kZWRDb21wYXRSZXNwb25zZVtvcmlnaW5hbFJlc3BvbnNlXTtcbiAgICBjb25zdCBoZWFkZXJzID0gKDAsIGNvcmVfcmVzdF9waXBlbGluZV8xLmNyZWF0ZUh0dHBIZWFkZXJzKShjb21wYXRSZXNwb25zZS5oZWFkZXJzLnRvSnNvbih7IHByZXNlcnZlQ2FzZTogdHJ1ZSB9KSk7XG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgIHJlc3BvbnNlLmhlYWRlcnMgPSBoZWFkZXJzO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBjb21wYXRSZXNwb25zZSksIHsgaGVhZGVycywgcmVxdWVzdDogKDAsIHV0aWxfanNfMS50b1BpcGVsaW5lUmVxdWVzdCkoY29tcGF0UmVzcG9uc2UucmVxdWVzdCkgfSk7XG4gICAgfVxufVxuZXhwb3J0cy50b1BpcGVsaW5lUmVzcG9uc2UgPSB0b1BpcGVsaW5lUmVzcG9uc2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZXNwb25zZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkV4dGVuZGVkU2VydmljZUNsaWVudCA9IHZvaWQgMDtcbmNvbnN0IGRpc2FibGVLZWVwQWxpdmVQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL2Rpc2FibGVLZWVwQWxpdmVQb2xpY3kuanNcIik7XG5jb25zdCBjb3JlX3Jlc3RfcGlwZWxpbmVfMSA9IHJlcXVpcmUoXCJAYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lXCIpO1xuY29uc3QgY29yZV9jbGllbnRfMSA9IHJlcXVpcmUoXCJAYXp1cmUvY29yZS1jbGllbnRcIik7XG5jb25zdCByZXNwb25zZV9qc18xID0gcmVxdWlyZShcIi4vcmVzcG9uc2UuanNcIik7XG4vKipcbiAqIENsaWVudCB0byBwcm92aWRlIGNvbXBhdGFiaWxpdHkgYmV0d2VlbiBjb3JlIFYxICYgVjIuXG4gKi9cbmNsYXNzIEV4dGVuZGVkU2VydmljZUNsaWVudCBleHRlbmRzIGNvcmVfY2xpZW50XzEuU2VydmljZUNsaWVudCB7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBzdXBlcihvcHRpb25zKTtcbiAgICAgICAgaWYgKCgoX2EgPSBvcHRpb25zLmtlZXBBbGl2ZU9wdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5lbmFibGUpID09PSBmYWxzZSAmJlxuICAgICAgICAgICAgISgwLCBkaXNhYmxlS2VlcEFsaXZlUG9saWN5X2pzXzEucGlwZWxpbmVDb250YWluc0Rpc2FibGVLZWVwQWxpdmVQb2xpY3kpKHRoaXMucGlwZWxpbmUpKSB7XG4gICAgICAgICAgICB0aGlzLnBpcGVsaW5lLmFkZFBvbGljeSgoMCwgZGlzYWJsZUtlZXBBbGl2ZVBvbGljeV9qc18xLmNyZWF0ZURpc2FibGVLZWVwQWxpdmVQb2xpY3kpKCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICgoKF9iID0gb3B0aW9ucy5yZWRpcmVjdE9wdGlvbnMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5oYW5kbGVSZWRpcmVjdHMpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdGhpcy5waXBlbGluZS5yZW1vdmVQb2xpY3koe1xuICAgICAgICAgICAgICAgIG5hbWU6IGNvcmVfcmVzdF9waXBlbGluZV8xLnJlZGlyZWN0UG9saWN5TmFtZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbXBhdGlibGUgc2VuZCBvcGVyYXRpb24gcmVxdWVzdCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcGVyYXRpb25Bcmd1bWVudHMgLSBPcGVyYXRpb24gYXJndW1lbnRzXG4gICAgICogQHBhcmFtIG9wZXJhdGlvblNwZWMgLSBPcGVyYXRpb24gU3BlY1xuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgYXN5bmMgc2VuZE9wZXJhdGlvblJlcXVlc3Qob3BlcmF0aW9uQXJndW1lbnRzLCBvcGVyYXRpb25TcGVjKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgdXNlclByb3ZpZGVkQ2FsbEJhY2sgPSAoX2EgPSBvcGVyYXRpb25Bcmd1bWVudHMgPT09IG51bGwgfHwgb3BlcmF0aW9uQXJndW1lbnRzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcGVyYXRpb25Bcmd1bWVudHMub3B0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm9uUmVzcG9uc2U7XG4gICAgICAgIGxldCBsYXN0UmVzcG9uc2U7XG4gICAgICAgIGZ1bmN0aW9uIG9uUmVzcG9uc2UocmF3UmVzcG9uc2UsIGZsYXRSZXNwb25zZSwgZXJyb3IpIHtcbiAgICAgICAgICAgIGxhc3RSZXNwb25zZSA9IHJhd1Jlc3BvbnNlO1xuICAgICAgICAgICAgaWYgKHVzZXJQcm92aWRlZENhbGxCYWNrKSB7XG4gICAgICAgICAgICAgICAgdXNlclByb3ZpZGVkQ2FsbEJhY2socmF3UmVzcG9uc2UsIGZsYXRSZXNwb25zZSwgZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9wZXJhdGlvbkFyZ3VtZW50cy5vcHRpb25zID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcGVyYXRpb25Bcmd1bWVudHMub3B0aW9ucyksIHsgb25SZXNwb25zZSB9KTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3VwZXIuc2VuZE9wZXJhdGlvblJlcXVlc3Qob3BlcmF0aW9uQXJndW1lbnRzLCBvcGVyYXRpb25TcGVjKTtcbiAgICAgICAgaWYgKGxhc3RSZXNwb25zZSkge1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlc3VsdCwgXCJfcmVzcG9uc2VcIiwge1xuICAgICAgICAgICAgICAgIHZhbHVlOiAoMCwgcmVzcG9uc2VfanNfMS50b0NvbXBhdFJlc3BvbnNlKShsYXN0UmVzcG9uc2UpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5leHBvcnRzLkV4dGVuZGVkU2VydmljZUNsaWVudCA9IEV4dGVuZGVkU2VydmljZUNsaWVudDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWV4dGVuZGVkQ2xpZW50LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlUmVxdWVzdFBvbGljeUZhY3RvcnlQb2xpY3kgPSBleHBvcnRzLnJlcXVlc3RQb2xpY3lGYWN0b3J5UG9saWN5TmFtZSA9IGV4cG9ydHMuSHR0cFBpcGVsaW5lTG9nTGV2ZWwgPSB2b2lkIDA7XG5jb25zdCB1dGlsX2pzXzEgPSByZXF1aXJlKFwiLi4vdXRpbC5qc1wiKTtcbmNvbnN0IHJlc3BvbnNlX2pzXzEgPSByZXF1aXJlKFwiLi4vcmVzcG9uc2UuanNcIik7XG4vKipcbiAqIEFuIGVudW0gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBSZXF1ZXN0UG9saWN5XG4gKi9cbnZhciBIdHRwUGlwZWxpbmVMb2dMZXZlbDtcbihmdW5jdGlvbiAoSHR0cFBpcGVsaW5lTG9nTGV2ZWwpIHtcbiAgICBIdHRwUGlwZWxpbmVMb2dMZXZlbFtIdHRwUGlwZWxpbmVMb2dMZXZlbFtcIkVSUk9SXCJdID0gMV0gPSBcIkVSUk9SXCI7XG4gICAgSHR0cFBpcGVsaW5lTG9nTGV2ZWxbSHR0cFBpcGVsaW5lTG9nTGV2ZWxbXCJJTkZPXCJdID0gM10gPSBcIklORk9cIjtcbiAgICBIdHRwUGlwZWxpbmVMb2dMZXZlbFtIdHRwUGlwZWxpbmVMb2dMZXZlbFtcIk9GRlwiXSA9IDBdID0gXCJPRkZcIjtcbiAgICBIdHRwUGlwZWxpbmVMb2dMZXZlbFtIdHRwUGlwZWxpbmVMb2dMZXZlbFtcIldBUk5JTkdcIl0gPSAyXSA9IFwiV0FSTklOR1wiO1xufSkoSHR0cFBpcGVsaW5lTG9nTGV2ZWwgfHwgKGV4cG9ydHMuSHR0cFBpcGVsaW5lTG9nTGV2ZWwgPSBIdHRwUGlwZWxpbmVMb2dMZXZlbCA9IHt9KSk7XG5jb25zdCBtb2NrUmVxdWVzdFBvbGljeU9wdGlvbnMgPSB7XG4gICAgbG9nKF9sb2dMZXZlbCwgX21lc3NhZ2UpIHtcbiAgICAgICAgLyogZG8gbm90aGluZyAqL1xuICAgIH0sXG4gICAgc2hvdWxkTG9nKF9sb2dMZXZlbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcbn07XG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBSZXF1ZXN0UG9saWN5RmFjdG9yeVBvbGljeVxuICovXG5leHBvcnRzLnJlcXVlc3RQb2xpY3lGYWN0b3J5UG9saWN5TmFtZSA9IFwiUmVxdWVzdFBvbGljeUZhY3RvcnlQb2xpY3lcIjtcbi8qKlxuICogQSBwb2xpY3kgdGhhdCB3cmFwcyBwb2xpY2llcyB3cml0dGVuIGZvciBjb3JlLWh0dHAuXG4gKiBAcGFyYW0gZmFjdG9yaWVzIC0gQW4gYXJyYXkgb2YgYFJlcXVlc3RQb2xpY3lGYWN0b3J5YCBvYmplY3RzIGZyb20gYSBjb3JlLWh0dHAgcGlwZWxpbmVcbiAqL1xuZnVuY3Rpb24gY3JlYXRlUmVxdWVzdFBvbGljeUZhY3RvcnlQb2xpY3koZmFjdG9yaWVzKSB7XG4gICAgY29uc3Qgb3JkZXJlZEZhY3RvcmllcyA9IGZhY3Rvcmllcy5zbGljZSgpLnJldmVyc2UoKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBleHBvcnRzLnJlcXVlc3RQb2xpY3lGYWN0b3J5UG9saWN5TmFtZSxcbiAgICAgICAgYXN5bmMgc2VuZFJlcXVlc3QocmVxdWVzdCwgbmV4dCkge1xuICAgICAgICAgICAgbGV0IGh0dHBQaXBlbGluZSA9IHtcbiAgICAgICAgICAgICAgICBhc3luYyBzZW5kUmVxdWVzdChodHRwUmVxdWVzdCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG5leHQoKDAsIHV0aWxfanNfMS50b1BpcGVsaW5lUmVxdWVzdCkoaHR0cFJlcXVlc3QpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgwLCByZXNwb25zZV9qc18xLnRvQ29tcGF0UmVzcG9uc2UpKHJlc3BvbnNlLCB7IGNyZWF0ZVByb3h5OiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZm9yIChjb25zdCBmYWN0b3J5IG9mIG9yZGVyZWRGYWN0b3JpZXMpIHtcbiAgICAgICAgICAgICAgICBodHRwUGlwZWxpbmUgPSBmYWN0b3J5LmNyZWF0ZShodHRwUGlwZWxpbmUsIG1vY2tSZXF1ZXN0UG9saWN5T3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB3ZWJSZXNvdXJjZUxpa2UgPSAoMCwgdXRpbF9qc18xLnRvV2ViUmVzb3VyY2VMaWtlKShyZXF1ZXN0LCB7IGNyZWF0ZVByb3h5OiB0cnVlIH0pO1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBodHRwUGlwZWxpbmUuc2VuZFJlcXVlc3Qod2ViUmVzb3VyY2VMaWtlKTtcbiAgICAgICAgICAgIHJldHVybiAoMCwgcmVzcG9uc2VfanNfMS50b1BpcGVsaW5lUmVzcG9uc2UpKHJlc3BvbnNlKTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuZXhwb3J0cy5jcmVhdGVSZXF1ZXN0UG9saWN5RmFjdG9yeVBvbGljeSA9IGNyZWF0ZVJlcXVlc3RQb2xpY3lGYWN0b3J5UG9saWN5O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVxdWVzdFBvbGljeUZhY3RvcnlQb2xpY3kuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jb252ZXJ0SHR0cENsaWVudCA9IHZvaWQgMDtcbmNvbnN0IHJlc3BvbnNlX2pzXzEgPSByZXF1aXJlKFwiLi9yZXNwb25zZS5qc1wiKTtcbmNvbnN0IHV0aWxfanNfMSA9IHJlcXVpcmUoXCIuL3V0aWwuanNcIik7XG4vKipcbiAqIENvbnZlcnRzIGEgUmVxdWVzdFBvbGljeSBiYXNlZCBIdHRwQ2xpZW50IHRvIGEgUGlwZWxpbmVSZXF1ZXN0IGJhc2VkIEh0dHBDbGllbnQuXG4gKiBAcGFyYW0gcmVxdWVzdFBvbGljeUNsaWVudCAtIEEgSHR0cENsaWVudCBjb21wYXRpYmxlIHdpdGggY29yZS1odHRwXG4gKiBAcmV0dXJucyBBIEh0dHBDbGllbnQgY29tcGF0aWJsZSB3aXRoIGNvcmUtcmVzdC1waXBlbGluZVxuICovXG5mdW5jdGlvbiBjb252ZXJ0SHR0cENsaWVudChyZXF1ZXN0UG9saWN5Q2xpZW50KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc2VuZFJlcXVlc3Q6IGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcXVlc3RQb2xpY3lDbGllbnQuc2VuZFJlcXVlc3QoKDAsIHV0aWxfanNfMS50b1dlYlJlc291cmNlTGlrZSkocmVxdWVzdCwgeyBjcmVhdGVQcm94eTogdHJ1ZSB9KSk7XG4gICAgICAgICAgICByZXR1cm4gKDAsIHJlc3BvbnNlX2pzXzEudG9QaXBlbGluZVJlc3BvbnNlKShyZXNwb25zZSk7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbmV4cG9ydHMuY29udmVydEh0dHBDbGllbnQgPSBjb252ZXJ0SHR0cENsaWVudDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWh0dHBDbGllbnRBZGFwdGVyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudG9IdHRwSGVhZGVyc0xpa2UgPSBleHBvcnRzLmNvbnZlcnRIdHRwQ2xpZW50ID0gZXhwb3J0cy5kaXNhYmxlS2VlcEFsaXZlUG9saWN5TmFtZSA9IGV4cG9ydHMuSHR0cFBpcGVsaW5lTG9nTGV2ZWwgPSBleHBvcnRzLmNyZWF0ZVJlcXVlc3RQb2xpY3lGYWN0b3J5UG9saWN5ID0gZXhwb3J0cy5yZXF1ZXN0UG9saWN5RmFjdG9yeVBvbGljeU5hbWUgPSBleHBvcnRzLkV4dGVuZGVkU2VydmljZUNsaWVudCA9IHZvaWQgMDtcbi8qKlxuICogQSBTaGltIExpYnJhcnkgdGhhdCBwcm92aWRlcyBjb21wYXRpYmlsaXR5IGJldHdlZW4gQ29yZSBWMSAmIFYyIFBhY2thZ2VzLlxuICpcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICovXG52YXIgZXh0ZW5kZWRDbGllbnRfanNfMSA9IHJlcXVpcmUoXCIuL2V4dGVuZGVkQ2xpZW50LmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRXh0ZW5kZWRTZXJ2aWNlQ2xpZW50XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBleHRlbmRlZENsaWVudF9qc18xLkV4dGVuZGVkU2VydmljZUNsaWVudDsgfSB9KTtcbnZhciByZXF1ZXN0UG9saWN5RmFjdG9yeVBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvcmVxdWVzdFBvbGljeUZhY3RvcnlQb2xpY3kuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyZXF1ZXN0UG9saWN5RmFjdG9yeVBvbGljeU5hbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlcXVlc3RQb2xpY3lGYWN0b3J5UG9saWN5X2pzXzEucmVxdWVzdFBvbGljeUZhY3RvcnlQb2xpY3lOYW1lOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUmVxdWVzdFBvbGljeUZhY3RvcnlQb2xpY3lcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlcXVlc3RQb2xpY3lGYWN0b3J5UG9saWN5X2pzXzEuY3JlYXRlUmVxdWVzdFBvbGljeUZhY3RvcnlQb2xpY3k7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJIdHRwUGlwZWxpbmVMb2dMZXZlbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVxdWVzdFBvbGljeUZhY3RvcnlQb2xpY3lfanNfMS5IdHRwUGlwZWxpbmVMb2dMZXZlbDsgfSB9KTtcbnZhciBkaXNhYmxlS2VlcEFsaXZlUG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9wb2xpY2llcy9kaXNhYmxlS2VlcEFsaXZlUG9saWN5LmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGlzYWJsZUtlZXBBbGl2ZVBvbGljeU5hbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRpc2FibGVLZWVwQWxpdmVQb2xpY3lfanNfMS5kaXNhYmxlS2VlcEFsaXZlUG9saWN5TmFtZTsgfSB9KTtcbnZhciBodHRwQ2xpZW50QWRhcHRlcl9qc18xID0gcmVxdWlyZShcIi4vaHR0cENsaWVudEFkYXB0ZXIuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb252ZXJ0SHR0cENsaWVudFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gaHR0cENsaWVudEFkYXB0ZXJfanNfMS5jb252ZXJ0SHR0cENsaWVudDsgfSB9KTtcbnZhciB1dGlsX2pzXzEgPSByZXF1aXJlKFwiLi91dGlsLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidG9IdHRwSGVhZGVyc0xpa2VcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHV0aWxfanNfMS50b0h0dHBIZWFkZXJzTGlrZTsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBuYW1lU3RhcnRDaGFyID0gJzpBLVphLXpfXFxcXHUwMEMwLVxcXFx1MDBENlxcXFx1MDBEOC1cXFxcdTAwRjZcXFxcdTAwRjgtXFxcXHUwMkZGXFxcXHUwMzcwLVxcXFx1MDM3RFxcXFx1MDM3Ri1cXFxcdTFGRkZcXFxcdTIwMEMtXFxcXHUyMDBEXFxcXHUyMDcwLVxcXFx1MjE4RlxcXFx1MkMwMC1cXFxcdTJGRUZcXFxcdTMwMDEtXFxcXHVEN0ZGXFxcXHVGOTAwLVxcXFx1RkRDRlxcXFx1RkRGMC1cXFxcdUZGRkQnO1xuY29uc3QgbmFtZUNoYXIgPSBuYW1lU3RhcnRDaGFyICsgJ1xcXFwtLlxcXFxkXFxcXHUwMEI3XFxcXHUwMzAwLVxcXFx1MDM2RlxcXFx1MjAzRi1cXFxcdTIwNDAnO1xuY29uc3QgbmFtZVJlZ2V4cCA9ICdbJyArIG5hbWVTdGFydENoYXIgKyAnXVsnICsgbmFtZUNoYXIgKyAnXSonXG5jb25zdCByZWdleE5hbWUgPSBuZXcgUmVnRXhwKCdeJyArIG5hbWVSZWdleHAgKyAnJCcpO1xuXG5jb25zdCBnZXRBbGxNYXRjaGVzID0gZnVuY3Rpb24oc3RyaW5nLCByZWdleCkge1xuICBjb25zdCBtYXRjaGVzID0gW107XG4gIGxldCBtYXRjaCA9IHJlZ2V4LmV4ZWMoc3RyaW5nKTtcbiAgd2hpbGUgKG1hdGNoKSB7XG4gICAgY29uc3QgYWxsbWF0Y2hlcyA9IFtdO1xuICAgIGFsbG1hdGNoZXMuc3RhcnRJbmRleCA9IHJlZ2V4Lmxhc3RJbmRleCAtIG1hdGNoWzBdLmxlbmd0aDtcbiAgICBjb25zdCBsZW4gPSBtYXRjaC5sZW5ndGg7XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxlbjsgaW5kZXgrKykge1xuICAgICAgYWxsbWF0Y2hlcy5wdXNoKG1hdGNoW2luZGV4XSk7XG4gICAgfVxuICAgIG1hdGNoZXMucHVzaChhbGxtYXRjaGVzKTtcbiAgICBtYXRjaCA9IHJlZ2V4LmV4ZWMoc3RyaW5nKTtcbiAgfVxuICByZXR1cm4gbWF0Y2hlcztcbn07XG5cbmNvbnN0IGlzTmFtZSA9IGZ1bmN0aW9uKHN0cmluZykge1xuICBjb25zdCBtYXRjaCA9IHJlZ2V4TmFtZS5leGVjKHN0cmluZyk7XG4gIHJldHVybiAhKG1hdGNoID09PSBudWxsIHx8IHR5cGVvZiBtYXRjaCA9PT0gJ3VuZGVmaW5lZCcpO1xufTtcblxuZXhwb3J0cy5pc0V4aXN0ID0gZnVuY3Rpb24odikge1xuICByZXR1cm4gdHlwZW9mIHYgIT09ICd1bmRlZmluZWQnO1xufTtcblxuZXhwb3J0cy5pc0VtcHR5T2JqZWN0ID0gZnVuY3Rpb24ob2JqKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbn07XG5cbi8qKlxuICogQ29weSBhbGwgdGhlIHByb3BlcnRpZXMgb2YgYSBpbnRvIGIuXG4gKiBAcGFyYW0geyp9IHRhcmdldFxuICogQHBhcmFtIHsqfSBhXG4gKi9cbmV4cG9ydHMubWVyZ2UgPSBmdW5jdGlvbih0YXJnZXQsIGEsIGFycmF5TW9kZSkge1xuICBpZiAoYSkge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhhKTsgLy8gd2lsbCByZXR1cm4gYW4gYXJyYXkgb2Ygb3duIHByb3BlcnRpZXNcbiAgICBjb25zdCBsZW4gPSBrZXlzLmxlbmd0aDsgLy9kb24ndCBtYWtlIGl0IGlubGluZVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGlmIChhcnJheU1vZGUgPT09ICdzdHJpY3QnKSB7XG4gICAgICAgIHRhcmdldFtrZXlzW2ldXSA9IFsgYVtrZXlzW2ldXSBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0W2tleXNbaV1dID0gYVtrZXlzW2ldXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG4vKiBleHBvcnRzLm1lcmdlID1mdW5jdGlvbiAoYixhKXtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oYixhKTtcbn0gKi9cblxuZXhwb3J0cy5nZXRWYWx1ZSA9IGZ1bmN0aW9uKHYpIHtcbiAgaWYgKGV4cG9ydHMuaXNFeGlzdCh2KSkge1xuICAgIHJldHVybiB2O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAnJztcbiAgfVxufTtcblxuLy8gY29uc3QgZmFrZUNhbGwgPSBmdW5jdGlvbihhKSB7cmV0dXJuIGE7fTtcbi8vIGNvbnN0IGZha2VDYWxsTm9SZXR1cm4gPSBmdW5jdGlvbigpIHt9O1xuXG5leHBvcnRzLmlzTmFtZSA9IGlzTmFtZTtcbmV4cG9ydHMuZ2V0QWxsTWF0Y2hlcyA9IGdldEFsbE1hdGNoZXM7XG5leHBvcnRzLm5hbWVSZWdleHAgPSBuYW1lUmVnZXhwO1xuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcblxuY29uc3QgZGVmYXVsdE9wdGlvbnMgPSB7XG4gIGFsbG93Qm9vbGVhbkF0dHJpYnV0ZXM6IGZhbHNlLCAvL0EgdGFnIGNhbiBoYXZlIGF0dHJpYnV0ZXMgd2l0aG91dCBhbnkgdmFsdWVcbiAgdW5wYWlyZWRUYWdzOiBbXVxufTtcblxuLy9jb25zdCB0YWdzUGF0dGVybiA9IG5ldyBSZWdFeHAoXCI8XFxcXC8/KFtcXFxcdzpcXFxcLV9cXC5dKylcXFxccypcXC8/PlwiLFwiZ1wiKTtcbmV4cG9ydHMudmFsaWRhdGUgPSBmdW5jdGlvbiAoeG1sRGF0YSwgb3B0aW9ucykge1xuICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdE9wdGlvbnMsIG9wdGlvbnMpO1xuXG4gIC8veG1sRGF0YSA9IHhtbERhdGEucmVwbGFjZSgvKFxcclxcbnxcXG58XFxyKS9nbSxcIlwiKTsvL21ha2UgaXQgc2luZ2xlIGxpbmVcbiAgLy94bWxEYXRhID0geG1sRGF0YS5yZXBsYWNlKC8oXlxccyo8XFw/eG1sLio/XFw/PikvZyxcIlwiKTsvL1JlbW92ZSBYTUwgc3RhcnRpbmcgdGFnXG4gIC8veG1sRGF0YSA9IHhtbERhdGEucmVwbGFjZSgvKDwhRE9DVFlQRVtcXHNcXHdcXFwiXFwuXFwvXFwtXFw6XSsoXFxbLipcXF0pKlxccyo+KS9nLFwiXCIpOy8vUmVtb3ZlIERPQ1RZUEVcbiAgY29uc3QgdGFncyA9IFtdO1xuICBsZXQgdGFnRm91bmQgPSBmYWxzZTtcblxuICAvL2luZGljYXRlcyB0aGF0IHRoZSByb290IHRhZyBoYXMgYmVlbiBjbG9zZWQgKGFrYS4gZGVwdGggMCBoYXMgYmVlbiByZWFjaGVkKVxuICBsZXQgcmVhY2hlZFJvb3QgPSBmYWxzZTtcblxuICBpZiAoeG1sRGF0YVswXSA9PT0gJ1xcdWZlZmYnKSB7XG4gICAgLy8gY2hlY2sgZm9yIGJ5dGUgb3JkZXIgbWFyayAoQk9NKVxuICAgIHhtbERhdGEgPSB4bWxEYXRhLnN1YnN0cigxKTtcbiAgfVxuICBcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB4bWxEYXRhLmxlbmd0aDsgaSsrKSB7XG5cbiAgICBpZiAoeG1sRGF0YVtpXSA9PT0gJzwnICYmIHhtbERhdGFbaSsxXSA9PT0gJz8nKSB7XG4gICAgICBpKz0yO1xuICAgICAgaSA9IHJlYWRQSSh4bWxEYXRhLGkpO1xuICAgICAgaWYgKGkuZXJyKSByZXR1cm4gaTtcbiAgICB9ZWxzZSBpZiAoeG1sRGF0YVtpXSA9PT0gJzwnKSB7XG4gICAgICAvL3N0YXJ0aW5nIG9mIHRhZ1xuICAgICAgLy9yZWFkIHVudGlsIHlvdSByZWFjaCB0byAnPicgYXZvaWRpbmcgYW55ICc+JyBpbiBhdHRyaWJ1dGUgdmFsdWVcbiAgICAgIGxldCB0YWdTdGFydFBvcyA9IGk7XG4gICAgICBpKys7XG4gICAgICBcbiAgICAgIGlmICh4bWxEYXRhW2ldID09PSAnIScpIHtcbiAgICAgICAgaSA9IHJlYWRDb21tZW50QW5kQ0RBVEEoeG1sRGF0YSwgaSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IGNsb3NpbmdUYWcgPSBmYWxzZTtcbiAgICAgICAgaWYgKHhtbERhdGFbaV0gPT09ICcvJykge1xuICAgICAgICAgIC8vY2xvc2luZyB0YWdcbiAgICAgICAgICBjbG9zaW5nVGFnID0gdHJ1ZTtcbiAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICAgICAgLy9yZWFkIHRhZ25hbWVcbiAgICAgICAgbGV0IHRhZ05hbWUgPSAnJztcbiAgICAgICAgZm9yICg7IGkgPCB4bWxEYXRhLmxlbmd0aCAmJlxuICAgICAgICAgIHhtbERhdGFbaV0gIT09ICc+JyAmJlxuICAgICAgICAgIHhtbERhdGFbaV0gIT09ICcgJyAmJlxuICAgICAgICAgIHhtbERhdGFbaV0gIT09ICdcXHQnICYmXG4gICAgICAgICAgeG1sRGF0YVtpXSAhPT0gJ1xcbicgJiZcbiAgICAgICAgICB4bWxEYXRhW2ldICE9PSAnXFxyJzsgaSsrXG4gICAgICAgICkge1xuICAgICAgICAgIHRhZ05hbWUgKz0geG1sRGF0YVtpXTtcbiAgICAgICAgfVxuICAgICAgICB0YWdOYW1lID0gdGFnTmFtZS50cmltKCk7XG4gICAgICAgIC8vY29uc29sZS5sb2codGFnTmFtZSk7XG5cbiAgICAgICAgaWYgKHRhZ05hbWVbdGFnTmFtZS5sZW5ndGggLSAxXSA9PT0gJy8nKSB7XG4gICAgICAgICAgLy9zZWxmIGNsb3NpbmcgdGFnIHdpdGhvdXQgYXR0cmlidXRlc1xuICAgICAgICAgIHRhZ05hbWUgPSB0YWdOYW1lLnN1YnN0cmluZygwLCB0YWdOYW1lLmxlbmd0aCAtIDEpO1xuICAgICAgICAgIC8vY29udGludWU7XG4gICAgICAgICAgaS0tO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdmFsaWRhdGVUYWdOYW1lKHRhZ05hbWUpKSB7XG4gICAgICAgICAgbGV0IG1zZztcbiAgICAgICAgICBpZiAodGFnTmFtZS50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBtc2cgPSBcIkludmFsaWQgc3BhY2UgYWZ0ZXIgJzwnLlwiO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtc2cgPSBcIlRhZyAnXCIrdGFnTmFtZStcIicgaXMgYW4gaW52YWxpZCBuYW1lLlwiO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRUYWcnLCBtc2csIGdldExpbmVOdW1iZXJGb3JQb3NpdGlvbih4bWxEYXRhLCBpKSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQgPSByZWFkQXR0cmlidXRlU3RyKHhtbERhdGEsIGkpO1xuICAgICAgICBpZiAocmVzdWx0ID09PSBmYWxzZSkge1xuICAgICAgICAgIHJldHVybiBnZXRFcnJvck9iamVjdCgnSW52YWxpZEF0dHInLCBcIkF0dHJpYnV0ZXMgZm9yICdcIit0YWdOYW1lK1wiJyBoYXZlIG9wZW4gcXVvdGUuXCIsIGdldExpbmVOdW1iZXJGb3JQb3NpdGlvbih4bWxEYXRhLCBpKSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGF0dHJTdHIgPSByZXN1bHQudmFsdWU7XG4gICAgICAgIGkgPSByZXN1bHQuaW5kZXg7XG5cbiAgICAgICAgaWYgKGF0dHJTdHJbYXR0clN0ci5sZW5ndGggLSAxXSA9PT0gJy8nKSB7XG4gICAgICAgICAgLy9zZWxmIGNsb3NpbmcgdGFnXG4gICAgICAgICAgY29uc3QgYXR0clN0clN0YXJ0ID0gaSAtIGF0dHJTdHIubGVuZ3RoO1xuICAgICAgICAgIGF0dHJTdHIgPSBhdHRyU3RyLnN1YnN0cmluZygwLCBhdHRyU3RyLmxlbmd0aCAtIDEpO1xuICAgICAgICAgIGNvbnN0IGlzVmFsaWQgPSB2YWxpZGF0ZUF0dHJpYnV0ZVN0cmluZyhhdHRyU3RyLCBvcHRpb25zKTtcbiAgICAgICAgICBpZiAoaXNWYWxpZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgdGFnRm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgLy9jb250aW51ZTsgLy90ZXh0IG1heSBwcmVzZW50cyBhZnRlciBzZWxmIGNsb3NpbmcgdGFnXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vdGhlIHJlc3VsdCBmcm9tIHRoZSBuZXN0ZWQgZnVuY3Rpb24gcmV0dXJucyB0aGUgcG9zaXRpb24gb2YgdGhlIGVycm9yIHdpdGhpbiB0aGUgYXR0cmlidXRlXG4gICAgICAgICAgICAvL2luIG9yZGVyIHRvIGdldCB0aGUgJ3RydWUnIGVycm9yIGxpbmUsIHdlIG5lZWQgdG8gY2FsY3VsYXRlIHRoZSBwb3NpdGlvbiB3aGVyZSB0aGUgYXR0cmlidXRlIGJlZ2lucyAoaSAtIGF0dHJTdHIubGVuZ3RoKSBhbmQgdGhlbiBhZGQgdGhlIHBvc2l0aW9uIHdpdGhpbiB0aGUgYXR0cmlidXRlXG4gICAgICAgICAgICAvL3RoaXMgZ2l2ZXMgdXMgdGhlIGFic29sdXRlIGluZGV4IGluIHRoZSBlbnRpcmUgeG1sLCB3aGljaCB3ZSBjYW4gdXNlIHRvIGZpbmQgdGhlIGxpbmUgYXQgbGFzdFxuICAgICAgICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KGlzVmFsaWQuZXJyLmNvZGUsIGlzVmFsaWQuZXJyLm1zZywgZ2V0TGluZU51bWJlckZvclBvc2l0aW9uKHhtbERhdGEsIGF0dHJTdHJTdGFydCArIGlzVmFsaWQuZXJyLmxpbmUpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoY2xvc2luZ1RhZykge1xuICAgICAgICAgIGlmICghcmVzdWx0LnRhZ0Nsb3NlZCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KCdJbnZhbGlkVGFnJywgXCJDbG9zaW5nIHRhZyAnXCIrdGFnTmFtZStcIicgZG9lc24ndCBoYXZlIHByb3BlciBjbG9zaW5nLlwiLCBnZXRMaW5lTnVtYmVyRm9yUG9zaXRpb24oeG1sRGF0YSwgaSkpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoYXR0clN0ci50cmltKCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KCdJbnZhbGlkVGFnJywgXCJDbG9zaW5nIHRhZyAnXCIrdGFnTmFtZStcIicgY2FuJ3QgaGF2ZSBhdHRyaWJ1dGVzIG9yIGludmFsaWQgc3RhcnRpbmcuXCIsIGdldExpbmVOdW1iZXJGb3JQb3NpdGlvbih4bWxEYXRhLCB0YWdTdGFydFBvcykpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGFncy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRFcnJvck9iamVjdCgnSW52YWxpZFRhZycsIFwiQ2xvc2luZyB0YWcgJ1wiK3RhZ05hbWUrXCInIGhhcyBub3QgYmVlbiBvcGVuZWQuXCIsIGdldExpbmVOdW1iZXJGb3JQb3NpdGlvbih4bWxEYXRhLCB0YWdTdGFydFBvcykpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBvdGcgPSB0YWdzLnBvcCgpO1xuICAgICAgICAgICAgaWYgKHRhZ05hbWUgIT09IG90Zy50YWdOYW1lKSB7XG4gICAgICAgICAgICAgIGxldCBvcGVuUG9zID0gZ2V0TGluZU51bWJlckZvclBvc2l0aW9uKHhtbERhdGEsIG90Zy50YWdTdGFydFBvcyk7XG4gICAgICAgICAgICAgIHJldHVybiBnZXRFcnJvck9iamVjdCgnSW52YWxpZFRhZycsXG4gICAgICAgICAgICAgICAgXCJFeHBlY3RlZCBjbG9zaW5nIHRhZyAnXCIrb3RnLnRhZ05hbWUrXCInIChvcGVuZWQgaW4gbGluZSBcIitvcGVuUG9zLmxpbmUrXCIsIGNvbCBcIitvcGVuUG9zLmNvbCtcIikgaW5zdGVhZCBvZiBjbG9zaW5nIHRhZyAnXCIrdGFnTmFtZStcIicuXCIsXG4gICAgICAgICAgICAgICAgZ2V0TGluZU51bWJlckZvclBvc2l0aW9uKHhtbERhdGEsIHRhZ1N0YXJ0UG9zKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vd2hlbiB0aGVyZSBhcmUgbm8gbW9yZSB0YWdzLCB3ZSByZWFjaGVkIHRoZSByb290IGxldmVsLlxuICAgICAgICAgICAgaWYgKHRhZ3MubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgICAgcmVhY2hlZFJvb3QgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBpc1ZhbGlkID0gdmFsaWRhdGVBdHRyaWJ1dGVTdHJpbmcoYXR0clN0ciwgb3B0aW9ucyk7XG4gICAgICAgICAgaWYgKGlzVmFsaWQgIT09IHRydWUpIHtcbiAgICAgICAgICAgIC8vdGhlIHJlc3VsdCBmcm9tIHRoZSBuZXN0ZWQgZnVuY3Rpb24gcmV0dXJucyB0aGUgcG9zaXRpb24gb2YgdGhlIGVycm9yIHdpdGhpbiB0aGUgYXR0cmlidXRlXG4gICAgICAgICAgICAvL2luIG9yZGVyIHRvIGdldCB0aGUgJ3RydWUnIGVycm9yIGxpbmUsIHdlIG5lZWQgdG8gY2FsY3VsYXRlIHRoZSBwb3NpdGlvbiB3aGVyZSB0aGUgYXR0cmlidXRlIGJlZ2lucyAoaSAtIGF0dHJTdHIubGVuZ3RoKSBhbmQgdGhlbiBhZGQgdGhlIHBvc2l0aW9uIHdpdGhpbiB0aGUgYXR0cmlidXRlXG4gICAgICAgICAgICAvL3RoaXMgZ2l2ZXMgdXMgdGhlIGFic29sdXRlIGluZGV4IGluIHRoZSBlbnRpcmUgeG1sLCB3aGljaCB3ZSBjYW4gdXNlIHRvIGZpbmQgdGhlIGxpbmUgYXQgbGFzdFxuICAgICAgICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KGlzVmFsaWQuZXJyLmNvZGUsIGlzVmFsaWQuZXJyLm1zZywgZ2V0TGluZU51bWJlckZvclBvc2l0aW9uKHhtbERhdGEsIGkgLSBhdHRyU3RyLmxlbmd0aCArIGlzVmFsaWQuZXJyLmxpbmUpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvL2lmIHRoZSByb290IGxldmVsIGhhcyBiZWVuIHJlYWNoZWQgYmVmb3JlIC4uLlxuICAgICAgICAgIGlmIChyZWFjaGVkUm9vdCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KCdJbnZhbGlkWG1sJywgJ011bHRpcGxlIHBvc3NpYmxlIHJvb3Qgbm9kZXMgZm91bmQuJywgZ2V0TGluZU51bWJlckZvclBvc2l0aW9uKHhtbERhdGEsIGkpKTtcbiAgICAgICAgICB9IGVsc2UgaWYob3B0aW9ucy51bnBhaXJlZFRhZ3MuaW5kZXhPZih0YWdOYW1lKSAhPT0gLTEpe1xuICAgICAgICAgICAgLy9kb24ndCBwdXNoIGludG8gc3RhY2tcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGFncy5wdXNoKHt0YWdOYW1lLCB0YWdTdGFydFBvc30pO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0YWdGb3VuZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICAvL3NraXAgdGFnIHRleHQgdmFsdWVcbiAgICAgICAgLy9JdCBtYXkgaW5jbHVkZSBjb21tZW50cyBhbmQgQ0RBVEEgdmFsdWVcbiAgICAgICAgZm9yIChpKys7IGkgPCB4bWxEYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKHhtbERhdGFbaV0gPT09ICc8Jykge1xuICAgICAgICAgICAgaWYgKHhtbERhdGFbaSArIDFdID09PSAnIScpIHtcbiAgICAgICAgICAgICAgLy9jb21tZW50IG9yIENBREFUQVxuICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgIGkgPSByZWFkQ29tbWVudEFuZENEQVRBKHhtbERhdGEsIGkpO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoeG1sRGF0YVtpKzFdID09PSAnPycpIHtcbiAgICAgICAgICAgICAgaSA9IHJlYWRQSSh4bWxEYXRhLCArK2kpO1xuICAgICAgICAgICAgICBpZiAoaS5lcnIpIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNle1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKHhtbERhdGFbaV0gPT09ICcmJykge1xuICAgICAgICAgICAgY29uc3QgYWZ0ZXJBbXAgPSB2YWxpZGF0ZUFtcGVyc2FuZCh4bWxEYXRhLCBpKTtcbiAgICAgICAgICAgIGlmIChhZnRlckFtcCA9PSAtMSlcbiAgICAgICAgICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KCdJbnZhbGlkQ2hhcicsIFwiY2hhciAnJicgaXMgbm90IGV4cGVjdGVkLlwiLCBnZXRMaW5lTnVtYmVyRm9yUG9zaXRpb24oeG1sRGF0YSwgaSkpO1xuICAgICAgICAgICAgaSA9IGFmdGVyQW1wO1xuICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgaWYgKHJlYWNoZWRSb290ID09PSB0cnVlICYmICFpc1doaXRlU3BhY2UoeG1sRGF0YVtpXSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KCdJbnZhbGlkWG1sJywgXCJFeHRyYSB0ZXh0IGF0IHRoZSBlbmRcIiwgZ2V0TGluZU51bWJlckZvclBvc2l0aW9uKHhtbERhdGEsIGkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gLy9lbmQgb2YgcmVhZGluZyB0YWcgdGV4dCB2YWx1ZVxuICAgICAgICBpZiAoeG1sRGF0YVtpXSA9PT0gJzwnKSB7XG4gICAgICAgICAgaS0tO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICggaXNXaGl0ZVNwYWNlKHhtbERhdGFbaV0pKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KCdJbnZhbGlkQ2hhcicsIFwiY2hhciAnXCIreG1sRGF0YVtpXStcIicgaXMgbm90IGV4cGVjdGVkLlwiLCBnZXRMaW5lTnVtYmVyRm9yUG9zaXRpb24oeG1sRGF0YSwgaSkpO1xuICAgIH1cbiAgfVxuXG4gIGlmICghdGFnRm91bmQpIHtcbiAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRYbWwnLCAnU3RhcnQgdGFnIGV4cGVjdGVkLicsIDEpO1xuICB9ZWxzZSBpZiAodGFncy5sZW5ndGggPT0gMSkge1xuICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KCdJbnZhbGlkVGFnJywgXCJVbmNsb3NlZCB0YWcgJ1wiK3RhZ3NbMF0udGFnTmFtZStcIicuXCIsIGdldExpbmVOdW1iZXJGb3JQb3NpdGlvbih4bWxEYXRhLCB0YWdzWzBdLnRhZ1N0YXJ0UG9zKSk7XG4gIH1lbHNlIGlmICh0YWdzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBnZXRFcnJvck9iamVjdCgnSW52YWxpZFhtbCcsIFwiSW52YWxpZCAnXCIrXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGFncy5tYXAodCA9PiB0LnRhZ05hbWUpLCBudWxsLCA0KS5yZXBsYWNlKC9cXHI/XFxuL2csICcnKStcbiAgICAgICAgICBcIicgZm91bmQuXCIsIHtsaW5lOiAxLCBjb2w6IDF9KTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuZnVuY3Rpb24gaXNXaGl0ZVNwYWNlKGNoYXIpe1xuICByZXR1cm4gY2hhciA9PT0gJyAnIHx8IGNoYXIgPT09ICdcXHQnIHx8IGNoYXIgPT09ICdcXG4nICB8fCBjaGFyID09PSAnXFxyJztcbn1cbi8qKlxuICogUmVhZCBQcm9jZXNzaW5nIGluc3N0cnVjdGlvbnMgYW5kIHNraXBcbiAqIEBwYXJhbSB7Kn0geG1sRGF0YVxuICogQHBhcmFtIHsqfSBpXG4gKi9cbmZ1bmN0aW9uIHJlYWRQSSh4bWxEYXRhLCBpKSB7XG4gIGNvbnN0IHN0YXJ0ID0gaTtcbiAgZm9yICg7IGkgPCB4bWxEYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHhtbERhdGFbaV0gPT0gJz8nIHx8IHhtbERhdGFbaV0gPT0gJyAnKSB7XG4gICAgICAvL3RhZ25hbWVcbiAgICAgIGNvbnN0IHRhZ25hbWUgPSB4bWxEYXRhLnN1YnN0cihzdGFydCwgaSAtIHN0YXJ0KTtcbiAgICAgIGlmIChpID4gNSAmJiB0YWduYW1lID09PSAneG1sJykge1xuICAgICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRYbWwnLCAnWE1MIGRlY2xhcmF0aW9uIGFsbG93ZWQgb25seSBhdCB0aGUgc3RhcnQgb2YgdGhlIGRvY3VtZW50LicsIGdldExpbmVOdW1iZXJGb3JQb3NpdGlvbih4bWxEYXRhLCBpKSk7XG4gICAgICB9IGVsc2UgaWYgKHhtbERhdGFbaV0gPT0gJz8nICYmIHhtbERhdGFbaSArIDFdID09ICc+Jykge1xuICAgICAgICAvL2NoZWNrIGlmIHZhbGlkIGF0dHJpYnV0IHN0cmluZ1xuICAgICAgICBpKys7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBpO1xufVxuXG5mdW5jdGlvbiByZWFkQ29tbWVudEFuZENEQVRBKHhtbERhdGEsIGkpIHtcbiAgaWYgKHhtbERhdGEubGVuZ3RoID4gaSArIDUgJiYgeG1sRGF0YVtpICsgMV0gPT09ICctJyAmJiB4bWxEYXRhW2kgKyAyXSA9PT0gJy0nKSB7XG4gICAgLy9jb21tZW50XG4gICAgZm9yIChpICs9IDM7IGkgPCB4bWxEYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoeG1sRGF0YVtpXSA9PT0gJy0nICYmIHhtbERhdGFbaSArIDFdID09PSAnLScgJiYgeG1sRGF0YVtpICsgMl0gPT09ICc+Jykge1xuICAgICAgICBpICs9IDI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChcbiAgICB4bWxEYXRhLmxlbmd0aCA+IGkgKyA4ICYmXG4gICAgeG1sRGF0YVtpICsgMV0gPT09ICdEJyAmJlxuICAgIHhtbERhdGFbaSArIDJdID09PSAnTycgJiZcbiAgICB4bWxEYXRhW2kgKyAzXSA9PT0gJ0MnICYmXG4gICAgeG1sRGF0YVtpICsgNF0gPT09ICdUJyAmJlxuICAgIHhtbERhdGFbaSArIDVdID09PSAnWScgJiZcbiAgICB4bWxEYXRhW2kgKyA2XSA9PT0gJ1AnICYmXG4gICAgeG1sRGF0YVtpICsgN10gPT09ICdFJ1xuICApIHtcbiAgICBsZXQgYW5nbGVCcmFja2V0c0NvdW50ID0gMTtcbiAgICBmb3IgKGkgKz0gODsgaSA8IHhtbERhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh4bWxEYXRhW2ldID09PSAnPCcpIHtcbiAgICAgICAgYW5nbGVCcmFja2V0c0NvdW50Kys7XG4gICAgICB9IGVsc2UgaWYgKHhtbERhdGFbaV0gPT09ICc+Jykge1xuICAgICAgICBhbmdsZUJyYWNrZXRzQ291bnQtLTtcbiAgICAgICAgaWYgKGFuZ2xlQnJhY2tldHNDb3VudCA9PT0gMCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKFxuICAgIHhtbERhdGEubGVuZ3RoID4gaSArIDkgJiZcbiAgICB4bWxEYXRhW2kgKyAxXSA9PT0gJ1snICYmXG4gICAgeG1sRGF0YVtpICsgMl0gPT09ICdDJyAmJlxuICAgIHhtbERhdGFbaSArIDNdID09PSAnRCcgJiZcbiAgICB4bWxEYXRhW2kgKyA0XSA9PT0gJ0EnICYmXG4gICAgeG1sRGF0YVtpICsgNV0gPT09ICdUJyAmJlxuICAgIHhtbERhdGFbaSArIDZdID09PSAnQScgJiZcbiAgICB4bWxEYXRhW2kgKyA3XSA9PT0gJ1snXG4gICkge1xuICAgIGZvciAoaSArPSA4OyBpIDwgeG1sRGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHhtbERhdGFbaV0gPT09ICddJyAmJiB4bWxEYXRhW2kgKyAxXSA9PT0gJ10nICYmIHhtbERhdGFbaSArIDJdID09PSAnPicpIHtcbiAgICAgICAgaSArPSAyO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gaTtcbn1cblxuY29uc3QgZG91YmxlUXVvdGUgPSAnXCInO1xuY29uc3Qgc2luZ2xlUXVvdGUgPSBcIidcIjtcblxuLyoqXG4gKiBLZWVwIHJlYWRpbmcgeG1sRGF0YSB1bnRpbCAnPCcgaXMgZm91bmQgb3V0c2lkZSB0aGUgYXR0cmlidXRlIHZhbHVlLlxuICogQHBhcmFtIHtzdHJpbmd9IHhtbERhdGFcbiAqIEBwYXJhbSB7bnVtYmVyfSBpXG4gKi9cbmZ1bmN0aW9uIHJlYWRBdHRyaWJ1dGVTdHIoeG1sRGF0YSwgaSkge1xuICBsZXQgYXR0clN0ciA9ICcnO1xuICBsZXQgc3RhcnRDaGFyID0gJyc7XG4gIGxldCB0YWdDbG9zZWQgPSBmYWxzZTtcbiAgZm9yICg7IGkgPCB4bWxEYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHhtbERhdGFbaV0gPT09IGRvdWJsZVF1b3RlIHx8IHhtbERhdGFbaV0gPT09IHNpbmdsZVF1b3RlKSB7XG4gICAgICBpZiAoc3RhcnRDaGFyID09PSAnJykge1xuICAgICAgICBzdGFydENoYXIgPSB4bWxEYXRhW2ldO1xuICAgICAgfSBlbHNlIGlmIChzdGFydENoYXIgIT09IHhtbERhdGFbaV0pIHtcbiAgICAgICAgLy9pZiB2YXVlIGlzIGVuY2xvc2VkIHdpdGggZG91YmxlIHF1b3RlIHRoZW4gc2luZ2xlIHF1b3RlcyBhcmUgYWxsb3dlZCBpbnNpZGUgdGhlIHZhbHVlIGFuZCB2aWNlIHZlcnNhXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGFydENoYXIgPSAnJztcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHhtbERhdGFbaV0gPT09ICc+Jykge1xuICAgICAgaWYgKHN0YXJ0Q2hhciA9PT0gJycpIHtcbiAgICAgICAgdGFnQ2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGF0dHJTdHIgKz0geG1sRGF0YVtpXTtcbiAgfVxuICBpZiAoc3RhcnRDaGFyICE9PSAnJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdmFsdWU6IGF0dHJTdHIsXG4gICAgaW5kZXg6IGksXG4gICAgdGFnQ2xvc2VkOiB0YWdDbG9zZWRcbiAgfTtcbn1cblxuLyoqXG4gKiBTZWxlY3QgYWxsIHRoZSBhdHRyaWJ1dGVzIHdoZXRoZXIgdmFsaWQgb3IgaW52YWxpZC5cbiAqL1xuY29uc3QgdmFsaWRBdHRyU3RyUmVneHAgPSBuZXcgUmVnRXhwKCcoXFxcXHMqKShbXlxcXFxzPV0rKShcXFxccyo9KT8oXFxcXHMqKFtcXCdcIl0pKChbXFxcXHNcXFxcU10pKj8pXFxcXDUpPycsICdnJyk7XG5cbi8vYXR0ciwgPVwic2RcIiwgYT1cImFtaXQnc1wiLCBhPVwic2RcImI9XCJzYWZcIiwgYWIgIGNkPVwiXCJcblxuZnVuY3Rpb24gdmFsaWRhdGVBdHRyaWJ1dGVTdHJpbmcoYXR0clN0ciwgb3B0aW9ucykge1xuICAvL2NvbnNvbGUubG9nKFwic3RhcnQ6XCIrYXR0clN0citcIjplbmRcIik7XG5cbiAgLy9pZihhdHRyU3RyLnRyaW0oKS5sZW5ndGggPT09IDApIHJldHVybiB0cnVlOyAvL2VtcHR5IHN0cmluZ1xuXG4gIGNvbnN0IG1hdGNoZXMgPSB1dGlsLmdldEFsbE1hdGNoZXMoYXR0clN0ciwgdmFsaWRBdHRyU3RyUmVneHApO1xuICBjb25zdCBhdHRyTmFtZXMgPSB7fTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IG1hdGNoZXMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAobWF0Y2hlc1tpXVsxXS5sZW5ndGggPT09IDApIHtcbiAgICAgIC8vbm9zcGFjZSBiZWZvcmUgYXR0cmlidXRlIG5hbWU6IGE9XCJzZFwiYj1cInNhZlwiXG4gICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRBdHRyJywgXCJBdHRyaWJ1dGUgJ1wiK21hdGNoZXNbaV1bMl0rXCInIGhhcyBubyBzcGFjZSBpbiBzdGFydGluZy5cIiwgZ2V0UG9zaXRpb25Gcm9tTWF0Y2gobWF0Y2hlc1tpXSkpXG4gICAgfSBlbHNlIGlmIChtYXRjaGVzW2ldWzNdICE9PSB1bmRlZmluZWQgJiYgbWF0Y2hlc1tpXVs0XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRBdHRyJywgXCJBdHRyaWJ1dGUgJ1wiK21hdGNoZXNbaV1bMl0rXCInIGlzIHdpdGhvdXQgdmFsdWUuXCIsIGdldFBvc2l0aW9uRnJvbU1hdGNoKG1hdGNoZXNbaV0pKTtcbiAgICB9IGVsc2UgaWYgKG1hdGNoZXNbaV1bM10gPT09IHVuZGVmaW5lZCAmJiAhb3B0aW9ucy5hbGxvd0Jvb2xlYW5BdHRyaWJ1dGVzKSB7XG4gICAgICAvL2luZGVwZW5kZW50IGF0dHJpYnV0ZTogYWJcbiAgICAgIHJldHVybiBnZXRFcnJvck9iamVjdCgnSW52YWxpZEF0dHInLCBcImJvb2xlYW4gYXR0cmlidXRlICdcIittYXRjaGVzW2ldWzJdK1wiJyBpcyBub3QgYWxsb3dlZC5cIiwgZ2V0UG9zaXRpb25Gcm9tTWF0Y2gobWF0Y2hlc1tpXSkpO1xuICAgIH1cbiAgICAvKiBlbHNlIGlmKG1hdGNoZXNbaV1bNl0gPT09IHVuZGVmaW5lZCl7Ly9hdHRyaWJ1dGUgd2l0aG91dCB2YWx1ZTogYWI9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGVycjogeyBjb2RlOlwiSW52YWxpZEF0dHJcIixtc2c6XCJhdHRyaWJ1dGUgXCIgKyBtYXRjaGVzW2ldWzJdICsgXCIgaGFzIG5vIHZhbHVlIGFzc2lnbmVkLlwifX07XG4gICAgICAgICAgICAgICAgfSAqL1xuICAgIGNvbnN0IGF0dHJOYW1lID0gbWF0Y2hlc1tpXVsyXTtcbiAgICBpZiAoIXZhbGlkYXRlQXR0ck5hbWUoYXR0ck5hbWUpKSB7XG4gICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRBdHRyJywgXCJBdHRyaWJ1dGUgJ1wiK2F0dHJOYW1lK1wiJyBpcyBhbiBpbnZhbGlkIG5hbWUuXCIsIGdldFBvc2l0aW9uRnJvbU1hdGNoKG1hdGNoZXNbaV0pKTtcbiAgICB9XG4gICAgaWYgKCFhdHRyTmFtZXMuaGFzT3duUHJvcGVydHkoYXR0ck5hbWUpKSB7XG4gICAgICAvL2NoZWNrIGZvciBkdXBsaWNhdGUgYXR0cmlidXRlLlxuICAgICAgYXR0ck5hbWVzW2F0dHJOYW1lXSA9IDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBnZXRFcnJvck9iamVjdCgnSW52YWxpZEF0dHInLCBcIkF0dHJpYnV0ZSAnXCIrYXR0ck5hbWUrXCInIGlzIHJlcGVhdGVkLlwiLCBnZXRQb3NpdGlvbkZyb21NYXRjaChtYXRjaGVzW2ldKSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlTnVtYmVyQW1wZXJzYW5kKHhtbERhdGEsIGkpIHtcbiAgbGV0IHJlID0gL1xcZC87XG4gIGlmICh4bWxEYXRhW2ldID09PSAneCcpIHtcbiAgICBpKys7XG4gICAgcmUgPSAvW1xcZGEtZkEtRl0vO1xuICB9XG4gIGZvciAoOyBpIDwgeG1sRGF0YS5sZW5ndGg7IGkrKykge1xuICAgIGlmICh4bWxEYXRhW2ldID09PSAnOycpXG4gICAgICByZXR1cm4gaTtcbiAgICBpZiAoIXhtbERhdGFbaV0ubWF0Y2gocmUpKVxuICAgICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUFtcGVyc2FuZCh4bWxEYXRhLCBpKSB7XG4gIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi94bWwvI2R0LWNoYXJyZWZcbiAgaSsrO1xuICBpZiAoeG1sRGF0YVtpXSA9PT0gJzsnKVxuICAgIHJldHVybiAtMTtcbiAgaWYgKHhtbERhdGFbaV0gPT09ICcjJykge1xuICAgIGkrKztcbiAgICByZXR1cm4gdmFsaWRhdGVOdW1iZXJBbXBlcnNhbmQoeG1sRGF0YSwgaSk7XG4gIH1cbiAgbGV0IGNvdW50ID0gMDtcbiAgZm9yICg7IGkgPCB4bWxEYXRhLmxlbmd0aDsgaSsrLCBjb3VudCsrKSB7XG4gICAgaWYgKHhtbERhdGFbaV0ubWF0Y2goL1xcdy8pICYmIGNvdW50IDwgMjApXG4gICAgICBjb250aW51ZTtcbiAgICBpZiAoeG1sRGF0YVtpXSA9PT0gJzsnKVxuICAgICAgYnJlYWs7XG4gICAgcmV0dXJuIC0xO1xuICB9XG4gIHJldHVybiBpO1xufVxuXG5mdW5jdGlvbiBnZXRFcnJvck9iamVjdChjb2RlLCBtZXNzYWdlLCBsaW5lTnVtYmVyKSB7XG4gIHJldHVybiB7XG4gICAgZXJyOiB7XG4gICAgICBjb2RlOiBjb2RlLFxuICAgICAgbXNnOiBtZXNzYWdlLFxuICAgICAgbGluZTogbGluZU51bWJlci5saW5lIHx8IGxpbmVOdW1iZXIsXG4gICAgICBjb2w6IGxpbmVOdW1iZXIuY29sLFxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlQXR0ck5hbWUoYXR0ck5hbWUpIHtcbiAgcmV0dXJuIHV0aWwuaXNOYW1lKGF0dHJOYW1lKTtcbn1cblxuLy8gY29uc3Qgc3RhcnRzV2l0aFhNTCA9IC9eeG1sL2k7XG5cbmZ1bmN0aW9uIHZhbGlkYXRlVGFnTmFtZSh0YWduYW1lKSB7XG4gIHJldHVybiB1dGlsLmlzTmFtZSh0YWduYW1lKSAvKiAmJiAhdGFnbmFtZS5tYXRjaChzdGFydHNXaXRoWE1MKSAqLztcbn1cblxuLy90aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGxpbmUgbnVtYmVyIGZvciB0aGUgY2hhcmFjdGVyIGF0IHRoZSBnaXZlbiBpbmRleFxuZnVuY3Rpb24gZ2V0TGluZU51bWJlckZvclBvc2l0aW9uKHhtbERhdGEsIGluZGV4KSB7XG4gIGNvbnN0IGxpbmVzID0geG1sRGF0YS5zdWJzdHJpbmcoMCwgaW5kZXgpLnNwbGl0KC9cXHI/XFxuLyk7XG4gIHJldHVybiB7XG4gICAgbGluZTogbGluZXMubGVuZ3RoLFxuXG4gICAgLy8gY29sdW1uIG51bWJlciBpcyBsYXN0IGxpbmUncyBsZW5ndGggKyAxLCBiZWNhdXNlIGNvbHVtbiBudW1iZXJpbmcgc3RhcnRzIGF0IDE6XG4gICAgY29sOiBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXS5sZW5ndGggKyAxXG4gIH07XG59XG5cbi8vdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIG1hdGNoIHdpdGhpbiBhdHRyU3RyXG5mdW5jdGlvbiBnZXRQb3NpdGlvbkZyb21NYXRjaChtYXRjaCkge1xuICByZXR1cm4gbWF0Y2guc3RhcnRJbmRleCArIG1hdGNoWzFdLmxlbmd0aDtcbn1cbiIsCiAgICAiXG5jb25zdCBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgICBwcmVzZXJ2ZU9yZGVyOiBmYWxzZSxcbiAgICBhdHRyaWJ1dGVOYW1lUHJlZml4OiAnQF8nLFxuICAgIGF0dHJpYnV0ZXNHcm91cE5hbWU6IGZhbHNlLFxuICAgIHRleHROb2RlTmFtZTogJyN0ZXh0JyxcbiAgICBpZ25vcmVBdHRyaWJ1dGVzOiB0cnVlLFxuICAgIHJlbW92ZU5TUHJlZml4OiBmYWxzZSwgLy8gcmVtb3ZlIE5TIGZyb20gdGFnIG5hbWUgb3IgYXR0cmlidXRlIG5hbWUgaWYgdHJ1ZVxuICAgIGFsbG93Qm9vbGVhbkF0dHJpYnV0ZXM6IGZhbHNlLCAvL2EgdGFnIGNhbiBoYXZlIGF0dHJpYnV0ZXMgd2l0aG91dCBhbnkgdmFsdWVcbiAgICAvL2lnbm9yZVJvb3RFbGVtZW50IDogZmFsc2UsXG4gICAgcGFyc2VUYWdWYWx1ZTogdHJ1ZSxcbiAgICBwYXJzZUF0dHJpYnV0ZVZhbHVlOiBmYWxzZSxcbiAgICB0cmltVmFsdWVzOiB0cnVlLCAvL1RyaW0gc3RyaW5nIHZhbHVlcyBvZiB0YWcgYW5kIGF0dHJpYnV0ZXNcbiAgICBjZGF0YVByb3BOYW1lOiBmYWxzZSxcbiAgICBudW1iZXJQYXJzZU9wdGlvbnM6IHtcbiAgICAgIGhleDogdHJ1ZSxcbiAgICAgIGxlYWRpbmdaZXJvczogdHJ1ZSxcbiAgICAgIGVOb3RhdGlvbjogdHJ1ZVxuICAgIH0sXG4gICAgdGFnVmFsdWVQcm9jZXNzb3I6IGZ1bmN0aW9uKHRhZ05hbWUsIHZhbCkge1xuICAgICAgcmV0dXJuIHZhbDtcbiAgICB9LFxuICAgIGF0dHJpYnV0ZVZhbHVlUHJvY2Vzc29yOiBmdW5jdGlvbihhdHRyTmFtZSwgdmFsKSB7XG4gICAgICByZXR1cm4gdmFsO1xuICAgIH0sXG4gICAgc3RvcE5vZGVzOiBbXSwgLy9uZXN0ZWQgdGFncyB3aWxsIG5vdCBiZSBwYXJzZWQgZXZlbiBmb3IgZXJyb3JzXG4gICAgYWx3YXlzQ3JlYXRlVGV4dE5vZGU6IGZhbHNlLFxuICAgIGlzQXJyYXk6ICgpID0+IGZhbHNlLFxuICAgIGNvbW1lbnRQcm9wTmFtZTogZmFsc2UsXG4gICAgdW5wYWlyZWRUYWdzOiBbXSxcbiAgICBwcm9jZXNzRW50aXRpZXM6IHRydWUsXG4gICAgaHRtbEVudGl0aWVzOiBmYWxzZSxcbiAgICBpZ25vcmVEZWNsYXJhdGlvbjogZmFsc2UsXG4gICAgaWdub3JlUGlUYWdzOiBmYWxzZSxcbiAgICB0cmFuc2Zvcm1UYWdOYW1lOiBmYWxzZSxcbiAgICB0cmFuc2Zvcm1BdHRyaWJ1dGVOYW1lOiBmYWxzZSxcbiAgICB1cGRhdGVUYWc6IGZ1bmN0aW9uKHRhZ05hbWUsIGpQYXRoLCBhdHRycyl7XG4gICAgICByZXR1cm4gdGFnTmFtZVxuICAgIH0sXG4gICAgLy8gc2tpcEVtcHR5TGlzdEl0ZW06IGZhbHNlXG59O1xuICAgXG5jb25zdCBidWlsZE9wdGlvbnMgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRPcHRpb25zLCBvcHRpb25zKTtcbn07XG5cbmV4cG9ydHMuYnVpbGRPcHRpb25zID0gYnVpbGRPcHRpb25zO1xuZXhwb3J0cy5kZWZhdWx0T3B0aW9ucyA9IGRlZmF1bHRPcHRpb25zOyIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5jbGFzcyBYbWxOb2Rle1xuICBjb25zdHJ1Y3Rvcih0YWduYW1lKSB7XG4gICAgdGhpcy50YWduYW1lID0gdGFnbmFtZTtcbiAgICB0aGlzLmNoaWxkID0gW107IC8vbmVzdGVkIHRhZ3MsIHRleHQsIGNkYXRhLCBjb21tZW50cyBpbiBvcmRlclxuICAgIHRoaXNbXCI6QFwiXSA9IHt9OyAvL2F0dHJpYnV0ZXMgbWFwXG4gIH1cbiAgYWRkKGtleSx2YWwpe1xuICAgIC8vIHRoaXMuY2hpbGQucHVzaCgge25hbWUgOiBrZXksIHZhbDogdmFsLCBpc0NkYXRhOiBpc0NkYXRhIH0pO1xuICAgIGlmKGtleSA9PT0gXCJfX3Byb3RvX19cIikga2V5ID0gXCIjX19wcm90b19fXCI7XG4gICAgdGhpcy5jaGlsZC5wdXNoKCB7W2tleV06IHZhbCB9KTtcbiAgfVxuICBhZGRDaGlsZChub2RlKSB7XG4gICAgaWYobm9kZS50YWduYW1lID09PSBcIl9fcHJvdG9fX1wiKSBub2RlLnRhZ25hbWUgPSBcIiNfX3Byb3RvX19cIjtcbiAgICBpZihub2RlW1wiOkBcIl0gJiYgT2JqZWN0LmtleXMobm9kZVtcIjpAXCJdKS5sZW5ndGggPiAwKXtcbiAgICAgIHRoaXMuY2hpbGQucHVzaCggeyBbbm9kZS50YWduYW1lXTogbm9kZS5jaGlsZCwgW1wiOkBcIl06IG5vZGVbXCI6QFwiXSB9KTtcbiAgICB9ZWxzZXtcbiAgICAgIHRoaXMuY2hpbGQucHVzaCggeyBbbm9kZS50YWduYW1lXTogbm9kZS5jaGlsZCB9KTtcbiAgICB9XG4gIH07XG59O1xuXG5cbm1vZHVsZS5leHBvcnRzID0gWG1sTm9kZTsiLAogICAgImNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi91dGlsJyk7XG5cbi8vVE9ETzogaGFuZGxlIGNvbW1lbnRzXG5mdW5jdGlvbiByZWFkRG9jVHlwZSh4bWxEYXRhLCBpKXtcbiAgICBcbiAgICBjb25zdCBlbnRpdGllcyA9IHt9O1xuICAgIGlmKCB4bWxEYXRhW2kgKyAzXSA9PT0gJ08nICYmXG4gICAgICAgICB4bWxEYXRhW2kgKyA0XSA9PT0gJ0MnICYmXG4gICAgICAgICB4bWxEYXRhW2kgKyA1XSA9PT0gJ1QnICYmXG4gICAgICAgICB4bWxEYXRhW2kgKyA2XSA9PT0gJ1knICYmXG4gICAgICAgICB4bWxEYXRhW2kgKyA3XSA9PT0gJ1AnICYmXG4gICAgICAgICB4bWxEYXRhW2kgKyA4XSA9PT0gJ0UnKVxuICAgIHsgICAgXG4gICAgICAgIGkgPSBpKzk7XG4gICAgICAgIGxldCBhbmdsZUJyYWNrZXRzQ291bnQgPSAxO1xuICAgICAgICBsZXQgaGFzQm9keSA9IGZhbHNlLCBjb21tZW50ID0gZmFsc2U7XG4gICAgICAgIGxldCBleHAgPSBcIlwiO1xuICAgICAgICBmb3IoO2k8eG1sRGF0YS5sZW5ndGg7aSsrKXtcbiAgICAgICAgICAgIGlmICh4bWxEYXRhW2ldID09PSAnPCcgJiYgIWNvbW1lbnQpIHsgLy9EZXRlcm1pbmUgdGhlIHRhZyB0eXBlXG4gICAgICAgICAgICAgICAgaWYoIGhhc0JvZHkgJiYgaXNFbnRpdHkoeG1sRGF0YSwgaSkpe1xuICAgICAgICAgICAgICAgICAgICBpICs9IDc7IFxuICAgICAgICAgICAgICAgICAgICBbZW50aXR5TmFtZSwgdmFsLGldID0gcmVhZEVudGl0eUV4cCh4bWxEYXRhLGkrMSk7XG4gICAgICAgICAgICAgICAgICAgIGlmKHZhbC5pbmRleE9mKFwiJlwiKSA9PT0gLTEpIC8vUGFyYW1ldGVyIGVudGl0aWVzIGFyZSBub3Qgc3VwcG9ydGVkXG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdGllc1sgdmFsaWRhdGVFbnRpdHlOYW1lKGVudGl0eU5hbWUpIF0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVneCA6IFJlZ0V4cCggYCYke2VudGl0eU5hbWV9O2AsXCJnXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbDogdmFsXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmKCBoYXNCb2R5ICYmIGlzRWxlbWVudCh4bWxEYXRhLCBpKSkgIGkgKz0gODsvL05vdCBzdXBwb3J0ZWRcbiAgICAgICAgICAgICAgICBlbHNlIGlmKCBoYXNCb2R5ICYmIGlzQXR0bGlzdCh4bWxEYXRhLCBpKSkgIGkgKz0gODsvL05vdCBzdXBwb3J0ZWRcbiAgICAgICAgICAgICAgICBlbHNlIGlmKCBoYXNCb2R5ICYmIGlzTm90YXRpb24oeG1sRGF0YSwgaSkpIGkgKz0gOTsvL05vdCBzdXBwb3J0ZWRcbiAgICAgICAgICAgICAgICBlbHNlIGlmKCBpc0NvbW1lbnQpICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBET0NUWVBFXCIpO1xuXG4gICAgICAgICAgICAgICAgYW5nbGVCcmFja2V0c0NvdW50Kys7XG4gICAgICAgICAgICAgICAgZXhwID0gXCJcIjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoeG1sRGF0YVtpXSA9PT0gJz4nKSB7IC8vUmVhZCB0YWcgY29udGVudFxuICAgICAgICAgICAgICAgIGlmKGNvbW1lbnQpe1xuICAgICAgICAgICAgICAgICAgICBpZiggeG1sRGF0YVtpIC0gMV0gPT09IFwiLVwiICYmIHhtbERhdGFbaSAtIDJdID09PSBcIi1cIil7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBhbmdsZUJyYWNrZXRzQ291bnQtLTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICBhbmdsZUJyYWNrZXRzQ291bnQtLTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGFuZ2xlQnJhY2tldHNDb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfWVsc2UgaWYoIHhtbERhdGFbaV0gPT09ICdbJyl7XG4gICAgICAgICAgICAgICAgaGFzQm9keSA9IHRydWU7XG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICBleHAgKz0geG1sRGF0YVtpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZihhbmdsZUJyYWNrZXRzQ291bnQgIT09IDApe1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmNsb3NlZCBET0NUWVBFYCk7XG4gICAgICAgIH1cbiAgICB9ZWxzZXtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIFRhZyBpbnN0ZWFkIG9mIERPQ1RZUEVgKTtcbiAgICB9XG4gICAgcmV0dXJuIHtlbnRpdGllcywgaX07XG59XG5cbmZ1bmN0aW9uIHJlYWRFbnRpdHlFeHAoeG1sRGF0YSxpKXtcbiAgICAvL0V4dGVybmFsIGVudGl0aWVzIGFyZSBub3Qgc3VwcG9ydGVkXG4gICAgLy8gICAgPCFFTlRJVFkgZXh0IFNZU1RFTSBcImh0dHA6Ly9ub3JtYWwtd2Vic2l0ZS5jb21cIiA+XG5cbiAgICAvL1BhcmFtZXRlciBlbnRpdGllcyBhcmUgbm90IHN1cHBvcnRlZFxuICAgIC8vICAgIDwhRU5USVRZIGVudGl0eW5hbWUgXCImYW5vdGhlckVsZW1lbnQ7XCI+XG5cbiAgICAvL0ludGVybmFsIGVudGl0aWVzIGFyZSBzdXBwb3J0ZWRcbiAgICAvLyAgICA8IUVOVElUWSBlbnRpdHluYW1lIFwicmVwbGFjZW1lbnQgdGV4dFwiPlxuICAgIFxuICAgIC8vcmVhZCBFbnRpdHlOYW1lXG4gICAgbGV0IGVudGl0eU5hbWUgPSBcIlwiO1xuICAgIGZvciAoOyBpIDwgeG1sRGF0YS5sZW5ndGggJiYgKHhtbERhdGFbaV0gIT09IFwiJ1wiICYmIHhtbERhdGFbaV0gIT09ICdcIicgKTsgaSsrKSB7XG4gICAgICAgIC8vIGlmKHhtbERhdGFbaV0gPT09IFwiIFwiKSBjb250aW51ZTtcbiAgICAgICAgLy8gZWxzZSBcbiAgICAgICAgZW50aXR5TmFtZSArPSB4bWxEYXRhW2ldO1xuICAgIH1cbiAgICBlbnRpdHlOYW1lID0gZW50aXR5TmFtZS50cmltKCk7XG4gICAgaWYoZW50aXR5TmFtZS5pbmRleE9mKFwiIFwiKSAhPT0gLTEpIHRocm93IG5ldyBFcnJvcihcIkV4dGVybmFsIGVudGl0ZXMgYXJlIG5vdCBzdXBwb3J0ZWRcIik7XG5cbiAgICAvL3JlYWQgRW50aXR5IFZhbHVlXG4gICAgY29uc3Qgc3RhcnRDaGFyID0geG1sRGF0YVtpKytdO1xuICAgIGxldCB2YWwgPSBcIlwiXG4gICAgZm9yICg7IGkgPCB4bWxEYXRhLmxlbmd0aCAmJiB4bWxEYXRhW2ldICE9PSBzdGFydENoYXIgOyBpKyspIHtcbiAgICAgICAgdmFsICs9IHhtbERhdGFbaV07XG4gICAgfVxuICAgIHJldHVybiBbZW50aXR5TmFtZSwgdmFsLCBpXTtcbn1cblxuZnVuY3Rpb24gaXNDb21tZW50KHhtbERhdGEsIGkpe1xuICAgIGlmKHhtbERhdGFbaSsxXSA9PT0gJyEnICYmXG4gICAgeG1sRGF0YVtpKzJdID09PSAnLScgJiZcbiAgICB4bWxEYXRhW2krM10gPT09ICctJykgcmV0dXJuIHRydWVcbiAgICByZXR1cm4gZmFsc2Vcbn1cbmZ1bmN0aW9uIGlzRW50aXR5KHhtbERhdGEsIGkpe1xuICAgIGlmKHhtbERhdGFbaSsxXSA9PT0gJyEnICYmXG4gICAgeG1sRGF0YVtpKzJdID09PSAnRScgJiZcbiAgICB4bWxEYXRhW2krM10gPT09ICdOJyAmJlxuICAgIHhtbERhdGFbaSs0XSA9PT0gJ1QnICYmXG4gICAgeG1sRGF0YVtpKzVdID09PSAnSScgJiZcbiAgICB4bWxEYXRhW2krNl0gPT09ICdUJyAmJlxuICAgIHhtbERhdGFbaSs3XSA9PT0gJ1knKSByZXR1cm4gdHJ1ZVxuICAgIHJldHVybiBmYWxzZVxufVxuZnVuY3Rpb24gaXNFbGVtZW50KHhtbERhdGEsIGkpe1xuICAgIGlmKHhtbERhdGFbaSsxXSA9PT0gJyEnICYmXG4gICAgeG1sRGF0YVtpKzJdID09PSAnRScgJiZcbiAgICB4bWxEYXRhW2krM10gPT09ICdMJyAmJlxuICAgIHhtbERhdGFbaSs0XSA9PT0gJ0UnICYmXG4gICAgeG1sRGF0YVtpKzVdID09PSAnTScgJiZcbiAgICB4bWxEYXRhW2krNl0gPT09ICdFJyAmJlxuICAgIHhtbERhdGFbaSs3XSA9PT0gJ04nICYmXG4gICAgeG1sRGF0YVtpKzhdID09PSAnVCcpIHJldHVybiB0cnVlXG4gICAgcmV0dXJuIGZhbHNlXG59XG5cbmZ1bmN0aW9uIGlzQXR0bGlzdCh4bWxEYXRhLCBpKXtcbiAgICBpZih4bWxEYXRhW2krMV0gPT09ICchJyAmJlxuICAgIHhtbERhdGFbaSsyXSA9PT0gJ0EnICYmXG4gICAgeG1sRGF0YVtpKzNdID09PSAnVCcgJiZcbiAgICB4bWxEYXRhW2krNF0gPT09ICdUJyAmJlxuICAgIHhtbERhdGFbaSs1XSA9PT0gJ0wnICYmXG4gICAgeG1sRGF0YVtpKzZdID09PSAnSScgJiZcbiAgICB4bWxEYXRhW2krN10gPT09ICdTJyAmJlxuICAgIHhtbERhdGFbaSs4XSA9PT0gJ1QnKSByZXR1cm4gdHJ1ZVxuICAgIHJldHVybiBmYWxzZVxufVxuZnVuY3Rpb24gaXNOb3RhdGlvbih4bWxEYXRhLCBpKXtcbiAgICBpZih4bWxEYXRhW2krMV0gPT09ICchJyAmJlxuICAgIHhtbERhdGFbaSsyXSA9PT0gJ04nICYmXG4gICAgeG1sRGF0YVtpKzNdID09PSAnTycgJiZcbiAgICB4bWxEYXRhW2krNF0gPT09ICdUJyAmJlxuICAgIHhtbERhdGFbaSs1XSA9PT0gJ0EnICYmXG4gICAgeG1sRGF0YVtpKzZdID09PSAnVCcgJiZcbiAgICB4bWxEYXRhW2krN10gPT09ICdJJyAmJlxuICAgIHhtbERhdGFbaSs4XSA9PT0gJ08nICYmXG4gICAgeG1sRGF0YVtpKzldID09PSAnTicpIHJldHVybiB0cnVlXG4gICAgcmV0dXJuIGZhbHNlXG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlRW50aXR5TmFtZShuYW1lKXtcbiAgICBpZiAodXRpbC5pc05hbWUobmFtZSkpXG5cdHJldHVybiBuYW1lO1xuICAgIGVsc2VcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGVudGl0eSBuYW1lICR7bmFtZX1gKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZWFkRG9jVHlwZTtcbiIsCiAgICAiY29uc3QgaGV4UmVnZXggPSAvXlstK10/MHhbYS1mQS1GMC05XSskLztcbmNvbnN0IG51bVJlZ2V4ID0gL14oW1xcLVxcK10pPygwKikoXFwuWzAtOV0rKFtlRV1cXC0/WzAtOV0rKT98WzAtOV0rKFxcLlswLTldKyhbZUVdXFwtP1swLTldKyk/KT8pJC87XG4vLyBjb25zdCBvY3RSZWdleCA9IC8weFthLXowLTldKy87XG4vLyBjb25zdCBiaW5SZWdleCA9IC8weFthLXowLTldKy87XG5cblxuLy9wb2x5ZmlsbFxuaWYgKCFOdW1iZXIucGFyc2VJbnQgJiYgd2luZG93LnBhcnNlSW50KSB7XG4gICAgTnVtYmVyLnBhcnNlSW50ID0gd2luZG93LnBhcnNlSW50O1xufVxuaWYgKCFOdW1iZXIucGFyc2VGbG9hdCAmJiB3aW5kb3cucGFyc2VGbG9hdCkge1xuICAgIE51bWJlci5wYXJzZUZsb2F0ID0gd2luZG93LnBhcnNlRmxvYXQ7XG59XG5cbiAgXG5jb25zdCBjb25zaWRlciA9IHtcbiAgICBoZXggOiAgdHJ1ZSxcbiAgICBsZWFkaW5nWmVyb3M6IHRydWUsXG4gICAgZGVjaW1hbFBvaW50OiBcIlxcLlwiLFxuICAgIGVOb3RhdGlvbjogdHJ1ZVxuICAgIC8vc2tpcExpa2U6IC9yZWdleC9cbn07XG5cbmZ1bmN0aW9uIHRvTnVtYmVyKHN0ciwgb3B0aW9ucyA9IHt9KXtcbiAgICAvLyBjb25zdCBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgY29uc2lkZXIpO1xuICAgIC8vIGlmKG9wdC5sZWFkaW5nWmVyb3MgPT09IGZhbHNlKXtcbiAgICAvLyAgICAgb3B0aW9ucy5sZWFkaW5nWmVyb3MgPSBmYWxzZTtcbiAgICAvLyB9ZWxzZSBpZihvcHQuaGV4ID09PSBmYWxzZSl7XG4gICAgLy8gICAgIG9wdGlvbnMuaGV4ID0gZmFsc2U7XG4gICAgLy8gfVxuXG4gICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIGNvbnNpZGVyLCBvcHRpb25zICk7XG4gICAgaWYoIXN0ciB8fCB0eXBlb2Ygc3RyICE9PSBcInN0cmluZ1wiICkgcmV0dXJuIHN0cjtcbiAgICBcbiAgICBsZXQgdHJpbW1lZFN0ciAgPSBzdHIudHJpbSgpO1xuICAgIC8vIGlmKHRyaW1tZWRTdHIgPT09IFwiMC4wXCIpIHJldHVybiAwO1xuICAgIC8vIGVsc2UgaWYodHJpbW1lZFN0ciA9PT0gXCIrMC4wXCIpIHJldHVybiAwO1xuICAgIC8vIGVsc2UgaWYodHJpbW1lZFN0ciA9PT0gXCItMC4wXCIpIHJldHVybiAtMDtcblxuICAgIGlmKG9wdGlvbnMuc2tpcExpa2UgIT09IHVuZGVmaW5lZCAmJiBvcHRpb25zLnNraXBMaWtlLnRlc3QodHJpbW1lZFN0cikpIHJldHVybiBzdHI7XG4gICAgZWxzZSBpZiAob3B0aW9ucy5oZXggJiYgaGV4UmVnZXgudGVzdCh0cmltbWVkU3RyKSkge1xuICAgICAgICByZXR1cm4gTnVtYmVyLnBhcnNlSW50KHRyaW1tZWRTdHIsIDE2KTtcbiAgICAvLyB9IGVsc2UgaWYgKG9wdGlvbnMucGFyc2VPY3QgJiYgb2N0UmVnZXgudGVzdChzdHIpKSB7XG4gICAgLy8gICAgIHJldHVybiBOdW1iZXIucGFyc2VJbnQodmFsLCA4KTtcbiAgICAvLyB9ZWxzZSBpZiAob3B0aW9ucy5wYXJzZUJpbiAmJiBiaW5SZWdleC50ZXN0KHN0cikpIHtcbiAgICAvLyAgICAgcmV0dXJuIE51bWJlci5wYXJzZUludCh2YWwsIDIpO1xuICAgIH1lbHNle1xuICAgICAgICAvL3NlcGFyYXRlIG5lZ2F0aXZlIHNpZ24sIGxlYWRpbmcgemVyb3MsIGFuZCByZXN0IG51bWJlclxuICAgICAgICBjb25zdCBtYXRjaCA9IG51bVJlZ2V4LmV4ZWModHJpbW1lZFN0cik7XG4gICAgICAgIGlmKG1hdGNoKXtcbiAgICAgICAgICAgIGNvbnN0IHNpZ24gPSBtYXRjaFsxXTtcbiAgICAgICAgICAgIGNvbnN0IGxlYWRpbmdaZXJvcyA9IG1hdGNoWzJdO1xuICAgICAgICAgICAgbGV0IG51bVRyaW1tZWRCeVplcm9zID0gdHJpbVplcm9zKG1hdGNoWzNdKTsgLy9jb21wbGV0ZSBudW0gd2l0aG91dCBsZWFkaW5nIHplcm9zXG4gICAgICAgICAgICAvL3RyaW0gZW5kaW5nIHplcm9zIGZvciBmbG9hdGluZyBudW1iZXJcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgY29uc3QgZU5vdGF0aW9uID0gbWF0Y2hbNF0gfHwgbWF0Y2hbNl07XG4gICAgICAgICAgICBpZighb3B0aW9ucy5sZWFkaW5nWmVyb3MgJiYgbGVhZGluZ1plcm9zLmxlbmd0aCA+IDAgJiYgc2lnbiAmJiB0cmltbWVkU3RyWzJdICE9PSBcIi5cIikgcmV0dXJuIHN0cjsgLy8tMDEyM1xuICAgICAgICAgICAgZWxzZSBpZighb3B0aW9ucy5sZWFkaW5nWmVyb3MgJiYgbGVhZGluZ1plcm9zLmxlbmd0aCA+IDAgJiYgIXNpZ24gJiYgdHJpbW1lZFN0clsxXSAhPT0gXCIuXCIpIHJldHVybiBzdHI7IC8vMDEyM1xuICAgICAgICAgICAgZWxzZXsvL25vIGxlYWRpbmcgemVyb3Mgb3IgbGVhZGluZyB6ZXJvcyBhcmUgYWxsb3dlZFxuICAgICAgICAgICAgICAgIGNvbnN0IG51bSA9IE51bWJlcih0cmltbWVkU3RyKTtcbiAgICAgICAgICAgICAgICBjb25zdCBudW1TdHIgPSBcIlwiICsgbnVtO1xuICAgICAgICAgICAgICAgIGlmKG51bVN0ci5zZWFyY2goL1tlRV0vKSAhPT0gLTEpeyAvL2dpdmVuIG51bWJlciBpcyBsb25nIGFuZCBwYXJzZWQgdG8gZU5vdGF0aW9uXG4gICAgICAgICAgICAgICAgICAgIGlmKG9wdGlvbnMuZU5vdGF0aW9uKSByZXR1cm4gbnVtO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIHJldHVybiBzdHI7XG4gICAgICAgICAgICAgICAgfWVsc2UgaWYoZU5vdGF0aW9uKXsgLy9naXZlbiBudW1iZXIgaGFzIGVub3RhdGlvblxuICAgICAgICAgICAgICAgICAgICBpZihvcHRpb25zLmVOb3RhdGlvbikgcmV0dXJuIG51bTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gc3RyO1xuICAgICAgICAgICAgICAgIH1lbHNlIGlmKHRyaW1tZWRTdHIuaW5kZXhPZihcIi5cIikgIT09IC0xKXsgLy9mbG9hdGluZyBudW1iZXJcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc3QgZGVjaW1hbFBhcnQgPSBtYXRjaFs1XS5zdWJzdHIoMSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnN0IGludFBhcnQgPSB0cmltbWVkU3RyLnN1YnN0cigwLHRyaW1tZWRTdHIuaW5kZXhPZihcIi5cIikpO1xuXG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAvLyBjb25zdCBwID0gbnVtU3RyLmluZGV4T2YoXCIuXCIpO1xuICAgICAgICAgICAgICAgICAgICAvLyBjb25zdCBnaXZlbkludFBhcnQgPSBudW1TdHIuc3Vic3RyKDAscCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnN0IGdpdmVuRGVjUGFydCA9IG51bVN0ci5zdWJzdHIocCsxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYobnVtU3RyID09PSBcIjBcIiAmJiAobnVtVHJpbW1lZEJ5WmVyb3MgPT09IFwiXCIpICkgcmV0dXJuIG51bTsgLy8wLjBcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZihudW1TdHIgPT09IG51bVRyaW1tZWRCeVplcm9zKSByZXR1cm4gbnVtOyAvLzAuNDU2LiAwLjc5MDAwXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYoIHNpZ24gJiYgbnVtU3RyID09PSBcIi1cIitudW1UcmltbWVkQnlaZXJvcykgcmV0dXJuIG51bTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gc3RyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBpZihsZWFkaW5nWmVyb3Mpe1xuICAgICAgICAgICAgICAgICAgICAvLyBpZihudW1UcmltbWVkQnlaZXJvcyA9PT0gbnVtU3RyKXtcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgIGlmKG9wdGlvbnMubGVhZGluZ1plcm9zKSByZXR1cm4gbnVtO1xuICAgICAgICAgICAgICAgICAgICAvLyAgICAgZWxzZSByZXR1cm4gc3RyO1xuICAgICAgICAgICAgICAgICAgICAvLyB9ZWxzZSByZXR1cm4gc3RyO1xuICAgICAgICAgICAgICAgICAgICBpZihudW1UcmltbWVkQnlaZXJvcyA9PT0gbnVtU3RyKSByZXR1cm4gbnVtO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKHNpZ24rbnVtVHJpbW1lZEJ5WmVyb3MgPT09IG51bVN0cikgcmV0dXJuIG51bTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gc3RyO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmKHRyaW1tZWRTdHIgPT09IG51bVN0cikgcmV0dXJuIG51bTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmKHRyaW1tZWRTdHIgPT09IHNpZ24rbnVtU3RyKSByZXR1cm4gbnVtO1xuICAgICAgICAgICAgICAgIC8vIGVsc2V7XG4gICAgICAgICAgICAgICAgLy8gICAgIC8vbnVtYmVyIHdpdGggKy8tIHNpZ25cbiAgICAgICAgICAgICAgICAvLyAgICAgdHJpbW1lZFN0ci50ZXN0KC9bLStdWzAtOV0pO1xuXG4gICAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgICAgIHJldHVybiBzdHI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBlbHNlIGlmKCFlTm90YXRpb24gJiYgdHJpbW1lZFN0ciAmJiB0cmltbWVkU3RyICE9PSBOdW1iZXIodHJpbW1lZFN0cikgKSByZXR1cm4gc3RyO1xuICAgICAgICAgICAgXG4gICAgICAgIH1lbHNleyAvL25vbi1udW1lcmljIHN0cmluZ1xuICAgICAgICAgICAgcmV0dXJuIHN0cjtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqXG4gKiBcbiAqIEBwYXJhbSB7c3RyaW5nfSBudW1TdHIgd2l0aG91dCBsZWFkaW5nIHplcm9zXG4gKiBAcmV0dXJucyBcbiAqL1xuZnVuY3Rpb24gdHJpbVplcm9zKG51bVN0cil7XG4gICAgaWYobnVtU3RyICYmIG51bVN0ci5pbmRleE9mKFwiLlwiKSAhPT0gLTEpey8vZmxvYXRcbiAgICAgICAgbnVtU3RyID0gbnVtU3RyLnJlcGxhY2UoLzArJC8sIFwiXCIpOyAvL3JlbW92ZSBlbmRpbmcgemVyb3NcbiAgICAgICAgaWYobnVtU3RyID09PSBcIi5cIikgIG51bVN0ciA9IFwiMFwiO1xuICAgICAgICBlbHNlIGlmKG51bVN0clswXSA9PT0gXCIuXCIpICBudW1TdHIgPSBcIjBcIitudW1TdHI7XG4gICAgICAgIGVsc2UgaWYobnVtU3RyW251bVN0ci5sZW5ndGgtMV0gPT09IFwiLlwiKSAgbnVtU3RyID0gbnVtU3RyLnN1YnN0cigwLG51bVN0ci5sZW5ndGgtMSk7XG4gICAgICAgIHJldHVybiBudW1TdHI7XG4gICAgfVxuICAgIHJldHVybiBudW1TdHI7XG59XG5tb2R1bGUuZXhwb3J0cyA9IHRvTnVtYmVyXG4iLAogICAgImZ1bmN0aW9uIGdldElnbm9yZUF0dHJpYnV0ZXNGbihpZ25vcmVBdHRyaWJ1dGVzKSB7XG4gICAgaWYgKHR5cGVvZiBpZ25vcmVBdHRyaWJ1dGVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBpZ25vcmVBdHRyaWJ1dGVzXG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KGlnbm9yZUF0dHJpYnV0ZXMpKSB7XG4gICAgICAgIHJldHVybiAoYXR0ck5hbWUpID0+IHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcGF0dGVybiBvZiBpZ25vcmVBdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwYXR0ZXJuID09PSAnc3RyaW5nJyAmJiBhdHRyTmFtZSA9PT0gcGF0dGVybikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocGF0dGVybiBpbnN0YW5jZW9mIFJlZ0V4cCAmJiBwYXR0ZXJuLnRlc3QoYXR0ck5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiAoKSA9PiBmYWxzZVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldElnbm9yZUF0dHJpYnV0ZXNGbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuLy8vQHRzLWNoZWNrXG5cbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi91dGlsJyk7XG5jb25zdCB4bWxOb2RlID0gcmVxdWlyZSgnLi94bWxOb2RlJyk7XG5jb25zdCByZWFkRG9jVHlwZSA9IHJlcXVpcmUoXCIuL0RvY1R5cGVSZWFkZXJcIik7XG5jb25zdCB0b051bWJlciA9IHJlcXVpcmUoXCJzdHJudW1cIik7XG5jb25zdCBnZXRJZ25vcmVBdHRyaWJ1dGVzRm4gPSByZXF1aXJlKCcuLi9pZ25vcmVBdHRyaWJ1dGVzJylcblxuLy8gY29uc3QgcmVneCA9XG4vLyAgICc8KCghXFxcXFtDREFUQVxcXFxbKFtcXFxcc1xcXFxTXSo/KShdXT4pKXwoKE5BTUU6KT8oTkFNRSkpKFtePl0qKT58KChcXFxcLykoTkFNRSlcXFxccyo+KSkoW148XSopJ1xuLy8gICAucmVwbGFjZSgvTkFNRS9nLCB1dGlsLm5hbWVSZWdleHApO1xuXG4vL2NvbnN0IHRhZ3NSZWd4ID0gbmV3IFJlZ0V4cChcIjwoXFxcXC8/W1xcXFx3OlxcXFwtXFwuX10rKShbXj5dKik+KFxcXFxzKlwiK2NkYXRhUmVneCtcIikqKFtePF0rKT9cIixcImdcIik7XG4vL2NvbnN0IHRhZ3NSZWd4ID0gbmV3IFJlZ0V4cChcIjwoXFxcXC8/KSgoXFxcXHcqOik/KFtcXFxcdzpcXFxcLVxcLl9dKykpKFtePl0qKT4oW148XSopKFwiK2NkYXRhUmVneCtcIihbXjxdKikpKihbXjxdKyk/XCIsXCJnXCIpO1xuXG5jbGFzcyBPcmRlcmVkT2JqUGFyc2Vye1xuICBjb25zdHJ1Y3RvcihvcHRpb25zKXtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMuY3VycmVudE5vZGUgPSBudWxsO1xuICAgIHRoaXMudGFnc05vZGVTdGFjayA9IFtdO1xuICAgIHRoaXMuZG9jVHlwZUVudGl0aWVzID0ge307XG4gICAgdGhpcy5sYXN0RW50aXRpZXMgPSB7XG4gICAgICBcImFwb3NcIiA6IHsgcmVnZXg6IC8mKGFwb3N8IzM5fCN4MjcpOy9nLCB2YWwgOiBcIidcIn0sXG4gICAgICBcImd0XCIgOiB7IHJlZ2V4OiAvJihndHwjNjJ8I3gzRSk7L2csIHZhbCA6IFwiPlwifSxcbiAgICAgIFwibHRcIiA6IHsgcmVnZXg6IC8mKGx0fCM2MHwjeDNDKTsvZywgdmFsIDogXCI8XCJ9LFxuICAgICAgXCJxdW90XCIgOiB7IHJlZ2V4OiAvJihxdW90fCMzNHwjeDIyKTsvZywgdmFsIDogXCJcXFwiXCJ9LFxuICAgIH07XG4gICAgdGhpcy5hbXBFbnRpdHkgPSB7IHJlZ2V4OiAvJihhbXB8IzM4fCN4MjYpOy9nLCB2YWwgOiBcIiZcIn07XG4gICAgdGhpcy5odG1sRW50aXRpZXMgPSB7XG4gICAgICBcInNwYWNlXCI6IHsgcmVnZXg6IC8mKG5ic3B8IzE2MCk7L2csIHZhbDogXCIgXCIgfSxcbiAgICAgIC8vIFwibHRcIiA6IHsgcmVnZXg6IC8mKGx0fCM2MCk7L2csIHZhbDogXCI8XCIgfSxcbiAgICAgIC8vIFwiZ3RcIiA6IHsgcmVnZXg6IC8mKGd0fCM2Mik7L2csIHZhbDogXCI+XCIgfSxcbiAgICAgIC8vIFwiYW1wXCIgOiB7IHJlZ2V4OiAvJihhbXB8IzM4KTsvZywgdmFsOiBcIiZcIiB9LFxuICAgICAgLy8gXCJxdW90XCIgOiB7IHJlZ2V4OiAvJihxdW90fCMzNCk7L2csIHZhbDogXCJcXFwiXCIgfSxcbiAgICAgIC8vIFwiYXBvc1wiIDogeyByZWdleDogLyYoYXBvc3wjMzkpOy9nLCB2YWw6IFwiJ1wiIH0sXG4gICAgICBcImNlbnRcIiA6IHsgcmVnZXg6IC8mKGNlbnR8IzE2Mik7L2csIHZhbDogXCLColwiIH0sXG4gICAgICBcInBvdW5kXCIgOiB7IHJlZ2V4OiAvJihwb3VuZHwjMTYzKTsvZywgdmFsOiBcIsKjXCIgfSxcbiAgICAgIFwieWVuXCIgOiB7IHJlZ2V4OiAvJih5ZW58IzE2NSk7L2csIHZhbDogXCLCpVwiIH0sXG4gICAgICBcImV1cm9cIiA6IHsgcmVnZXg6IC8mKGV1cm98IzgzNjQpOy9nLCB2YWw6IFwi4oKsXCIgfSxcbiAgICAgIFwiY29weXJpZ2h0XCIgOiB7IHJlZ2V4OiAvJihjb3B5fCMxNjkpOy9nLCB2YWw6IFwiwqlcIiB9LFxuICAgICAgXCJyZWdcIiA6IHsgcmVnZXg6IC8mKHJlZ3wjMTc0KTsvZywgdmFsOiBcIsKuXCIgfSxcbiAgICAgIFwiaW5yXCIgOiB7IHJlZ2V4OiAvJihpbnJ8IzgzNzcpOy9nLCB2YWw6IFwi4oK5XCIgfSxcbiAgICAgIFwibnVtX2RlY1wiOiB7IHJlZ2V4OiAvJiMoWzAtOV17MSw3fSk7L2csIHZhbCA6IChfLCBzdHIpID0+IFN0cmluZy5mcm9tQ2hhckNvZGUoTnVtYmVyLnBhcnNlSW50KHN0ciwgMTApKSB9LFxuICAgICAgXCJudW1faGV4XCI6IHsgcmVnZXg6IC8mI3goWzAtOWEtZkEtRl17MSw2fSk7L2csIHZhbCA6IChfLCBzdHIpID0+IFN0cmluZy5mcm9tQ2hhckNvZGUoTnVtYmVyLnBhcnNlSW50KHN0ciwgMTYpKSB9LFxuICAgIH07XG4gICAgdGhpcy5hZGRFeHRlcm5hbEVudGl0aWVzID0gYWRkRXh0ZXJuYWxFbnRpdGllcztcbiAgICB0aGlzLnBhcnNlWG1sID0gcGFyc2VYbWw7XG4gICAgdGhpcy5wYXJzZVRleHREYXRhID0gcGFyc2VUZXh0RGF0YTtcbiAgICB0aGlzLnJlc29sdmVOYW1lU3BhY2UgPSByZXNvbHZlTmFtZVNwYWNlO1xuICAgIHRoaXMuYnVpbGRBdHRyaWJ1dGVzTWFwID0gYnVpbGRBdHRyaWJ1dGVzTWFwO1xuICAgIHRoaXMuaXNJdFN0b3BOb2RlID0gaXNJdFN0b3BOb2RlO1xuICAgIHRoaXMucmVwbGFjZUVudGl0aWVzVmFsdWUgPSByZXBsYWNlRW50aXRpZXNWYWx1ZTtcbiAgICB0aGlzLnJlYWRTdG9wTm9kZURhdGEgPSByZWFkU3RvcE5vZGVEYXRhO1xuICAgIHRoaXMuc2F2ZVRleHRUb1BhcmVudFRhZyA9IHNhdmVUZXh0VG9QYXJlbnRUYWc7XG4gICAgdGhpcy5hZGRDaGlsZCA9IGFkZENoaWxkO1xuICAgIHRoaXMuaWdub3JlQXR0cmlidXRlc0ZuID0gZ2V0SWdub3JlQXR0cmlidXRlc0ZuKHRoaXMub3B0aW9ucy5pZ25vcmVBdHRyaWJ1dGVzKVxuICB9XG5cbn1cblxuZnVuY3Rpb24gYWRkRXh0ZXJuYWxFbnRpdGllcyhleHRlcm5hbEVudGl0aWVzKXtcbiAgY29uc3QgZW50S2V5cyA9IE9iamVjdC5rZXlzKGV4dGVybmFsRW50aXRpZXMpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGVudEtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBlbnQgPSBlbnRLZXlzW2ldO1xuICAgIHRoaXMubGFzdEVudGl0aWVzW2VudF0gPSB7XG4gICAgICAgcmVnZXg6IG5ldyBSZWdFeHAoXCImXCIrZW50K1wiO1wiLFwiZ1wiKSxcbiAgICAgICB2YWwgOiBleHRlcm5hbEVudGl0aWVzW2VudF1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnTmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IGpQYXRoXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGRvbnRUcmltXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGhhc0F0dHJpYnV0ZXNcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNMZWFmTm9kZVxuICogQHBhcmFtIHtib29sZWFufSBlc2NhcGVFbnRpdGllc1xuICovXG5mdW5jdGlvbiBwYXJzZVRleHREYXRhKHZhbCwgdGFnTmFtZSwgalBhdGgsIGRvbnRUcmltLCBoYXNBdHRyaWJ1dGVzLCBpc0xlYWZOb2RlLCBlc2NhcGVFbnRpdGllcykge1xuICBpZiAodmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLnRyaW1WYWx1ZXMgJiYgIWRvbnRUcmltKSB7XG4gICAgICB2YWwgPSB2YWwudHJpbSgpO1xuICAgIH1cbiAgICBpZih2YWwubGVuZ3RoID4gMCl7XG4gICAgICBpZighZXNjYXBlRW50aXRpZXMpIHZhbCA9IHRoaXMucmVwbGFjZUVudGl0aWVzVmFsdWUodmFsKTtcbiAgICAgIFxuICAgICAgY29uc3QgbmV3dmFsID0gdGhpcy5vcHRpb25zLnRhZ1ZhbHVlUHJvY2Vzc29yKHRhZ05hbWUsIHZhbCwgalBhdGgsIGhhc0F0dHJpYnV0ZXMsIGlzTGVhZk5vZGUpO1xuICAgICAgaWYobmV3dmFsID09PSBudWxsIHx8IG5ld3ZhbCA9PT0gdW5kZWZpbmVkKXtcbiAgICAgICAgLy9kb24ndCBwYXJzZVxuICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgfWVsc2UgaWYodHlwZW9mIG5ld3ZhbCAhPT0gdHlwZW9mIHZhbCB8fCBuZXd2YWwgIT09IHZhbCl7XG4gICAgICAgIC8vb3ZlcndyaXRlXG4gICAgICAgIHJldHVybiBuZXd2YWw7XG4gICAgICB9ZWxzZSBpZih0aGlzLm9wdGlvbnMudHJpbVZhbHVlcyl7XG4gICAgICAgIHJldHVybiBwYXJzZVZhbHVlKHZhbCwgdGhpcy5vcHRpb25zLnBhcnNlVGFnVmFsdWUsIHRoaXMub3B0aW9ucy5udW1iZXJQYXJzZU9wdGlvbnMpO1xuICAgICAgfWVsc2V7XG4gICAgICAgIGNvbnN0IHRyaW1tZWRWYWwgPSB2YWwudHJpbSgpO1xuICAgICAgICBpZih0cmltbWVkVmFsID09PSB2YWwpe1xuICAgICAgICAgIHJldHVybiBwYXJzZVZhbHVlKHZhbCwgdGhpcy5vcHRpb25zLnBhcnNlVGFnVmFsdWUsIHRoaXMub3B0aW9ucy5udW1iZXJQYXJzZU9wdGlvbnMpO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVOYW1lU3BhY2UodGFnbmFtZSkge1xuICBpZiAodGhpcy5vcHRpb25zLnJlbW92ZU5TUHJlZml4KSB7XG4gICAgY29uc3QgdGFncyA9IHRhZ25hbWUuc3BsaXQoJzonKTtcbiAgICBjb25zdCBwcmVmaXggPSB0YWduYW1lLmNoYXJBdCgwKSA9PT0gJy8nID8gJy8nIDogJyc7XG4gICAgaWYgKHRhZ3NbMF0gPT09ICd4bWxucycpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgaWYgKHRhZ3MubGVuZ3RoID09PSAyKSB7XG4gICAgICB0YWduYW1lID0gcHJlZml4ICsgdGFnc1sxXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRhZ25hbWU7XG59XG5cbi8vVE9ETzogY2hhbmdlIHJlZ2V4IHRvIGNhcHR1cmUgTlNcbi8vY29uc3QgYXR0cnNSZWd4ID0gbmV3IFJlZ0V4cChcIihbXFxcXHdcXFxcLVxcXFwuXFxcXDpdKylcXFxccyo9XFxcXHMqKFsnXFxcIl0pKCgufFxcbikqPylcXFxcMlwiLFwiZ21cIik7XG5jb25zdCBhdHRyc1JlZ3ggPSBuZXcgUmVnRXhwKCcoW15cXFxccz1dKylcXFxccyooPVxcXFxzKihbXFwnXCJdKShbXFxcXHNcXFxcU10qPylcXFxcMyk/JywgJ2dtJyk7XG5cbmZ1bmN0aW9uIGJ1aWxkQXR0cmlidXRlc01hcChhdHRyU3RyLCBqUGF0aCwgdGFnTmFtZSkge1xuICBpZiAodGhpcy5vcHRpb25zLmlnbm9yZUF0dHJpYnV0ZXMgIT09IHRydWUgJiYgdHlwZW9mIGF0dHJTdHIgPT09ICdzdHJpbmcnKSB7XG4gICAgLy8gYXR0clN0ciA9IGF0dHJTdHIucmVwbGFjZSgvXFxyP1xcbi9nLCAnICcpO1xuICAgIC8vYXR0clN0ciA9IGF0dHJTdHIgfHwgYXR0clN0ci50cmltKCk7XG5cbiAgICBjb25zdCBtYXRjaGVzID0gdXRpbC5nZXRBbGxNYXRjaGVzKGF0dHJTdHIsIGF0dHJzUmVneCk7XG4gICAgY29uc3QgbGVuID0gbWF0Y2hlcy5sZW5ndGg7IC8vZG9uJ3QgbWFrZSBpdCBpbmxpbmVcbiAgICBjb25zdCBhdHRycyA9IHt9O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNvbnN0IGF0dHJOYW1lID0gdGhpcy5yZXNvbHZlTmFtZVNwYWNlKG1hdGNoZXNbaV1bMV0pO1xuICAgICAgaWYgKHRoaXMuaWdub3JlQXR0cmlidXRlc0ZuKGF0dHJOYW1lLCBqUGF0aCkpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGxldCBvbGRWYWwgPSBtYXRjaGVzW2ldWzRdO1xuICAgICAgbGV0IGFOYW1lID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZU5hbWVQcmVmaXggKyBhdHRyTmFtZTtcbiAgICAgIGlmIChhdHRyTmFtZS5sZW5ndGgpIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy50cmFuc2Zvcm1BdHRyaWJ1dGVOYW1lKSB7XG4gICAgICAgICAgYU5hbWUgPSB0aGlzLm9wdGlvbnMudHJhbnNmb3JtQXR0cmlidXRlTmFtZShhTmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYoYU5hbWUgPT09IFwiX19wcm90b19fXCIpIGFOYW1lICA9IFwiI19fcHJvdG9fX1wiO1xuICAgICAgICBpZiAob2xkVmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnRyaW1WYWx1ZXMpIHtcbiAgICAgICAgICAgIG9sZFZhbCA9IG9sZFZhbC50cmltKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9sZFZhbCA9IHRoaXMucmVwbGFjZUVudGl0aWVzVmFsdWUob2xkVmFsKTtcbiAgICAgICAgICBjb25zdCBuZXdWYWwgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlVmFsdWVQcm9jZXNzb3IoYXR0ck5hbWUsIG9sZFZhbCwgalBhdGgpO1xuICAgICAgICAgIGlmKG5ld1ZhbCA9PT0gbnVsbCB8fCBuZXdWYWwgPT09IHVuZGVmaW5lZCl7XG4gICAgICAgICAgICAvL2Rvbid0IHBhcnNlXG4gICAgICAgICAgICBhdHRyc1thTmFtZV0gPSBvbGRWYWw7XG4gICAgICAgICAgfWVsc2UgaWYodHlwZW9mIG5ld1ZhbCAhPT0gdHlwZW9mIG9sZFZhbCB8fCBuZXdWYWwgIT09IG9sZFZhbCl7XG4gICAgICAgICAgICAvL292ZXJ3cml0ZVxuICAgICAgICAgICAgYXR0cnNbYU5hbWVdID0gbmV3VmFsO1xuICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgLy9wYXJzZVxuICAgICAgICAgICAgYXR0cnNbYU5hbWVdID0gcGFyc2VWYWx1ZShcbiAgICAgICAgICAgICAgb2xkVmFsLFxuICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMucGFyc2VBdHRyaWJ1dGVWYWx1ZSxcbiAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLm51bWJlclBhcnNlT3B0aW9uc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5vcHRpb25zLmFsbG93Qm9vbGVhbkF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICBhdHRyc1thTmFtZV0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghT2JqZWN0LmtleXMoYXR0cnMpLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRpb25zLmF0dHJpYnV0ZXNHcm91cE5hbWUpIHtcbiAgICAgIGNvbnN0IGF0dHJDb2xsZWN0aW9uID0ge307XG4gICAgICBhdHRyQ29sbGVjdGlvblt0aGlzLm9wdGlvbnMuYXR0cmlidXRlc0dyb3VwTmFtZV0gPSBhdHRycztcbiAgICAgIHJldHVybiBhdHRyQ29sbGVjdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIGF0dHJzXG4gIH1cbn1cblxuY29uc3QgcGFyc2VYbWwgPSBmdW5jdGlvbih4bWxEYXRhKSB7XG4gIHhtbERhdGEgPSB4bWxEYXRhLnJlcGxhY2UoL1xcclxcbj8vZywgXCJcXG5cIik7IC8vVE9ETzogcmVtb3ZlIHRoaXMgbGluZVxuICBjb25zdCB4bWxPYmogPSBuZXcgeG1sTm9kZSgnIXhtbCcpO1xuICBsZXQgY3VycmVudE5vZGUgPSB4bWxPYmo7XG4gIGxldCB0ZXh0RGF0YSA9IFwiXCI7XG4gIGxldCBqUGF0aCA9IFwiXCI7XG4gIGZvcihsZXQgaT0wOyBpPCB4bWxEYXRhLmxlbmd0aDsgaSsrKXsvL2ZvciBlYWNoIGNoYXIgaW4gWE1MIGRhdGFcbiAgICBjb25zdCBjaCA9IHhtbERhdGFbaV07XG4gICAgaWYoY2ggPT09ICc8Jyl7XG4gICAgICAvLyBjb25zdCBuZXh0SW5kZXggPSBpKzE7XG4gICAgICAvLyBjb25zdCBfMm5kQ2hhciA9IHhtbERhdGFbbmV4dEluZGV4XTtcbiAgICAgIGlmKCB4bWxEYXRhW2krMV0gPT09ICcvJykgey8vQ2xvc2luZyBUYWdcbiAgICAgICAgY29uc3QgY2xvc2VJbmRleCA9IGZpbmRDbG9zaW5nSW5kZXgoeG1sRGF0YSwgXCI+XCIsIGksIFwiQ2xvc2luZyBUYWcgaXMgbm90IGNsb3NlZC5cIilcbiAgICAgICAgbGV0IHRhZ05hbWUgPSB4bWxEYXRhLnN1YnN0cmluZyhpKzIsY2xvc2VJbmRleCkudHJpbSgpO1xuXG4gICAgICAgIGlmKHRoaXMub3B0aW9ucy5yZW1vdmVOU1ByZWZpeCl7XG4gICAgICAgICAgY29uc3QgY29sb25JbmRleCA9IHRhZ05hbWUuaW5kZXhPZihcIjpcIik7XG4gICAgICAgICAgaWYoY29sb25JbmRleCAhPT0gLTEpe1xuICAgICAgICAgICAgdGFnTmFtZSA9IHRhZ05hbWUuc3Vic3RyKGNvbG9uSW5kZXgrMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYodGhpcy5vcHRpb25zLnRyYW5zZm9ybVRhZ05hbWUpIHtcbiAgICAgICAgICB0YWdOYW1lID0gdGhpcy5vcHRpb25zLnRyYW5zZm9ybVRhZ05hbWUodGFnTmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZihjdXJyZW50Tm9kZSl7XG4gICAgICAgICAgdGV4dERhdGEgPSB0aGlzLnNhdmVUZXh0VG9QYXJlbnRUYWcodGV4dERhdGEsIGN1cnJlbnROb2RlLCBqUGF0aCk7XG4gICAgICAgIH1cblxuICAgICAgICAvL2NoZWNrIGlmIGxhc3QgdGFnIG9mIG5lc3RlZCB0YWcgd2FzIHVucGFpcmVkIHRhZ1xuICAgICAgICBjb25zdCBsYXN0VGFnTmFtZSA9IGpQYXRoLnN1YnN0cmluZyhqUGF0aC5sYXN0SW5kZXhPZihcIi5cIikrMSk7XG4gICAgICAgIGlmKHRhZ05hbWUgJiYgdGhpcy5vcHRpb25zLnVucGFpcmVkVGFncy5pbmRleE9mKHRhZ05hbWUpICE9PSAtMSApe1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5wYWlyZWQgdGFnIGNhbiBub3QgYmUgdXNlZCBhcyBjbG9zaW5nIHRhZzogPC8ke3RhZ05hbWV9PmApO1xuICAgICAgICB9XG4gICAgICAgIGxldCBwcm9wSW5kZXggPSAwXG4gICAgICAgIGlmKGxhc3RUYWdOYW1lICYmIHRoaXMub3B0aW9ucy51bnBhaXJlZFRhZ3MuaW5kZXhPZihsYXN0VGFnTmFtZSkgIT09IC0xICl7XG4gICAgICAgICAgcHJvcEluZGV4ID0galBhdGgubGFzdEluZGV4T2YoJy4nLCBqUGF0aC5sYXN0SW5kZXhPZignLicpLTEpXG4gICAgICAgICAgdGhpcy50YWdzTm9kZVN0YWNrLnBvcCgpO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICBwcm9wSW5kZXggPSBqUGF0aC5sYXN0SW5kZXhPZihcIi5cIik7XG4gICAgICAgIH1cbiAgICAgICAgalBhdGggPSBqUGF0aC5zdWJzdHJpbmcoMCwgcHJvcEluZGV4KTtcblxuICAgICAgICBjdXJyZW50Tm9kZSA9IHRoaXMudGFnc05vZGVTdGFjay5wb3AoKTsvL2F2b2lkIHJlY3Vyc2lvbiwgc2V0IHRoZSBwYXJlbnQgdGFnIHNjb3BlXG4gICAgICAgIHRleHREYXRhID0gXCJcIjtcbiAgICAgICAgaSA9IGNsb3NlSW5kZXg7XG4gICAgICB9IGVsc2UgaWYoIHhtbERhdGFbaSsxXSA9PT0gJz8nKSB7XG5cbiAgICAgICAgbGV0IHRhZ0RhdGEgPSByZWFkVGFnRXhwKHhtbERhdGEsaSwgZmFsc2UsIFwiPz5cIik7XG4gICAgICAgIGlmKCF0YWdEYXRhKSB0aHJvdyBuZXcgRXJyb3IoXCJQaSBUYWcgaXMgbm90IGNsb3NlZC5cIik7XG5cbiAgICAgICAgdGV4dERhdGEgPSB0aGlzLnNhdmVUZXh0VG9QYXJlbnRUYWcodGV4dERhdGEsIGN1cnJlbnROb2RlLCBqUGF0aCk7XG4gICAgICAgIGlmKCAodGhpcy5vcHRpb25zLmlnbm9yZURlY2xhcmF0aW9uICYmIHRhZ0RhdGEudGFnTmFtZSA9PT0gXCI/eG1sXCIpIHx8IHRoaXMub3B0aW9ucy5pZ25vcmVQaVRhZ3Mpe1xuXG4gICAgICAgIH1lbHNle1xuICBcbiAgICAgICAgICBjb25zdCBjaGlsZE5vZGUgPSBuZXcgeG1sTm9kZSh0YWdEYXRhLnRhZ05hbWUpO1xuICAgICAgICAgIGNoaWxkTm9kZS5hZGQodGhpcy5vcHRpb25zLnRleHROb2RlTmFtZSwgXCJcIik7XG4gICAgICAgICAgXG4gICAgICAgICAgaWYodGFnRGF0YS50YWdOYW1lICE9PSB0YWdEYXRhLnRhZ0V4cCAmJiB0YWdEYXRhLmF0dHJFeHBQcmVzZW50KXtcbiAgICAgICAgICAgIGNoaWxkTm9kZVtcIjpAXCJdID0gdGhpcy5idWlsZEF0dHJpYnV0ZXNNYXAodGFnRGF0YS50YWdFeHAsIGpQYXRoLCB0YWdEYXRhLnRhZ05hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmFkZENoaWxkKGN1cnJlbnROb2RlLCBjaGlsZE5vZGUsIGpQYXRoKVxuXG4gICAgICAgIH1cblxuXG4gICAgICAgIGkgPSB0YWdEYXRhLmNsb3NlSW5kZXggKyAxO1xuICAgICAgfSBlbHNlIGlmKHhtbERhdGEuc3Vic3RyKGkgKyAxLCAzKSA9PT0gJyEtLScpIHtcbiAgICAgICAgY29uc3QgZW5kSW5kZXggPSBmaW5kQ2xvc2luZ0luZGV4KHhtbERhdGEsIFwiLS0+XCIsIGkrNCwgXCJDb21tZW50IGlzIG5vdCBjbG9zZWQuXCIpXG4gICAgICAgIGlmKHRoaXMub3B0aW9ucy5jb21tZW50UHJvcE5hbWUpe1xuICAgICAgICAgIGNvbnN0IGNvbW1lbnQgPSB4bWxEYXRhLnN1YnN0cmluZyhpICsgNCwgZW5kSW5kZXggLSAyKTtcblxuICAgICAgICAgIHRleHREYXRhID0gdGhpcy5zYXZlVGV4dFRvUGFyZW50VGFnKHRleHREYXRhLCBjdXJyZW50Tm9kZSwgalBhdGgpO1xuXG4gICAgICAgICAgY3VycmVudE5vZGUuYWRkKHRoaXMub3B0aW9ucy5jb21tZW50UHJvcE5hbWUsIFsgeyBbdGhpcy5vcHRpb25zLnRleHROb2RlTmFtZV0gOiBjb21tZW50IH0gXSk7XG4gICAgICAgIH1cbiAgICAgICAgaSA9IGVuZEluZGV4O1xuICAgICAgfSBlbHNlIGlmKCB4bWxEYXRhLnN1YnN0cihpICsgMSwgMikgPT09ICchRCcpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcmVhZERvY1R5cGUoeG1sRGF0YSwgaSk7XG4gICAgICAgIHRoaXMuZG9jVHlwZUVudGl0aWVzID0gcmVzdWx0LmVudGl0aWVzO1xuICAgICAgICBpID0gcmVzdWx0Lmk7XG4gICAgICB9ZWxzZSBpZih4bWxEYXRhLnN1YnN0cihpICsgMSwgMikgPT09ICchWycpIHtcbiAgICAgICAgY29uc3QgY2xvc2VJbmRleCA9IGZpbmRDbG9zaW5nSW5kZXgoeG1sRGF0YSwgXCJdXT5cIiwgaSwgXCJDREFUQSBpcyBub3QgY2xvc2VkLlwiKSAtIDI7XG4gICAgICAgIGNvbnN0IHRhZ0V4cCA9IHhtbERhdGEuc3Vic3RyaW5nKGkgKyA5LGNsb3NlSW5kZXgpO1xuXG4gICAgICAgIHRleHREYXRhID0gdGhpcy5zYXZlVGV4dFRvUGFyZW50VGFnKHRleHREYXRhLCBjdXJyZW50Tm9kZSwgalBhdGgpO1xuXG4gICAgICAgIGxldCB2YWwgPSB0aGlzLnBhcnNlVGV4dERhdGEodGFnRXhwLCBjdXJyZW50Tm9kZS50YWduYW1lLCBqUGF0aCwgdHJ1ZSwgZmFsc2UsIHRydWUsIHRydWUpO1xuICAgICAgICBpZih2YWwgPT0gdW5kZWZpbmVkKSB2YWwgPSBcIlwiO1xuXG4gICAgICAgIC8vY2RhdGEgc2hvdWxkIGJlIHNldCBldmVuIGlmIGl0IGlzIDAgbGVuZ3RoIHN0cmluZ1xuICAgICAgICBpZih0aGlzLm9wdGlvbnMuY2RhdGFQcm9wTmFtZSl7XG4gICAgICAgICAgY3VycmVudE5vZGUuYWRkKHRoaXMub3B0aW9ucy5jZGF0YVByb3BOYW1lLCBbIHsgW3RoaXMub3B0aW9ucy50ZXh0Tm9kZU5hbWVdIDogdGFnRXhwIH0gXSk7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgIGN1cnJlbnROb2RlLmFkZCh0aGlzLm9wdGlvbnMudGV4dE5vZGVOYW1lLCB2YWwpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBpID0gY2xvc2VJbmRleCArIDI7XG4gICAgICB9ZWxzZSB7Ly9PcGVuaW5nIHRhZ1xuICAgICAgICBsZXQgcmVzdWx0ID0gcmVhZFRhZ0V4cCh4bWxEYXRhLGksIHRoaXMub3B0aW9ucy5yZW1vdmVOU1ByZWZpeCk7XG4gICAgICAgIGxldCB0YWdOYW1lPSByZXN1bHQudGFnTmFtZTtcbiAgICAgICAgY29uc3QgcmF3VGFnTmFtZSA9IHJlc3VsdC5yYXdUYWdOYW1lO1xuICAgICAgICBsZXQgdGFnRXhwID0gcmVzdWx0LnRhZ0V4cDtcbiAgICAgICAgbGV0IGF0dHJFeHBQcmVzZW50ID0gcmVzdWx0LmF0dHJFeHBQcmVzZW50O1xuICAgICAgICBsZXQgY2xvc2VJbmRleCA9IHJlc3VsdC5jbG9zZUluZGV4O1xuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMudHJhbnNmb3JtVGFnTmFtZSkge1xuICAgICAgICAgIHRhZ05hbWUgPSB0aGlzLm9wdGlvbnMudHJhbnNmb3JtVGFnTmFtZSh0YWdOYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLy9zYXZlIHRleHQgYXMgY2hpbGQgbm9kZVxuICAgICAgICBpZiAoY3VycmVudE5vZGUgJiYgdGV4dERhdGEpIHtcbiAgICAgICAgICBpZihjdXJyZW50Tm9kZS50YWduYW1lICE9PSAnIXhtbCcpe1xuICAgICAgICAgICAgLy93aGVuIG5lc3RlZCB0YWcgaXMgZm91bmRcbiAgICAgICAgICAgIHRleHREYXRhID0gdGhpcy5zYXZlVGV4dFRvUGFyZW50VGFnKHRleHREYXRhLCBjdXJyZW50Tm9kZSwgalBhdGgsIGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvL2NoZWNrIGlmIGxhc3QgdGFnIHdhcyB1bnBhaXJlZCB0YWdcbiAgICAgICAgY29uc3QgbGFzdFRhZyA9IGN1cnJlbnROb2RlO1xuICAgICAgICBpZihsYXN0VGFnICYmIHRoaXMub3B0aW9ucy51bnBhaXJlZFRhZ3MuaW5kZXhPZihsYXN0VGFnLnRhZ25hbWUpICE9PSAtMSApe1xuICAgICAgICAgIGN1cnJlbnROb2RlID0gdGhpcy50YWdzTm9kZVN0YWNrLnBvcCgpO1xuICAgICAgICAgIGpQYXRoID0galBhdGguc3Vic3RyaW5nKDAsIGpQYXRoLmxhc3RJbmRleE9mKFwiLlwiKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYodGFnTmFtZSAhPT0geG1sT2JqLnRhZ25hbWUpe1xuICAgICAgICAgIGpQYXRoICs9IGpQYXRoID8gXCIuXCIgKyB0YWdOYW1lIDogdGFnTmFtZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc0l0U3RvcE5vZGUodGhpcy5vcHRpb25zLnN0b3BOb2RlcywgalBhdGgsIHRhZ05hbWUpKSB7XG4gICAgICAgICAgbGV0IHRhZ0NvbnRlbnQgPSBcIlwiO1xuICAgICAgICAgIC8vc2VsZi1jbG9zaW5nIHRhZ1xuICAgICAgICAgIGlmKHRhZ0V4cC5sZW5ndGggPiAwICYmIHRhZ0V4cC5sYXN0SW5kZXhPZihcIi9cIikgPT09IHRhZ0V4cC5sZW5ndGggLSAxKXtcbiAgICAgICAgICAgIGlmKHRhZ05hbWVbdGFnTmFtZS5sZW5ndGggLSAxXSA9PT0gXCIvXCIpeyAvL3JlbW92ZSB0cmFpbGluZyAnLydcbiAgICAgICAgICAgICAgdGFnTmFtZSA9IHRhZ05hbWUuc3Vic3RyKDAsIHRhZ05hbWUubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAgIGpQYXRoID0galBhdGguc3Vic3RyKDAsIGpQYXRoLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgICB0YWdFeHAgPSB0YWdOYW1lO1xuICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgIHRhZ0V4cCA9IHRhZ0V4cC5zdWJzdHIoMCwgdGFnRXhwLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaSA9IHJlc3VsdC5jbG9zZUluZGV4O1xuICAgICAgICAgIH1cbiAgICAgICAgICAvL3VucGFpcmVkIHRhZ1xuICAgICAgICAgIGVsc2UgaWYodGhpcy5vcHRpb25zLnVucGFpcmVkVGFncy5pbmRleE9mKHRhZ05hbWUpICE9PSAtMSl7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGkgPSByZXN1bHQuY2xvc2VJbmRleDtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy9ub3JtYWwgdGFnXG4gICAgICAgICAgZWxzZXtcbiAgICAgICAgICAgIC8vcmVhZCB1bnRpbCBjbG9zaW5nIHRhZyBpcyBmb3VuZFxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5yZWFkU3RvcE5vZGVEYXRhKHhtbERhdGEsIHJhd1RhZ05hbWUsIGNsb3NlSW5kZXggKyAxKTtcbiAgICAgICAgICAgIGlmKCFyZXN1bHQpIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCBlbmQgb2YgJHtyYXdUYWdOYW1lfWApO1xuICAgICAgICAgICAgaSA9IHJlc3VsdC5pO1xuICAgICAgICAgICAgdGFnQ29udGVudCA9IHJlc3VsdC50YWdDb250ZW50O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IG5ldyB4bWxOb2RlKHRhZ05hbWUpO1xuICAgICAgICAgIGlmKHRhZ05hbWUgIT09IHRhZ0V4cCAmJiBhdHRyRXhwUHJlc2VudCl7XG4gICAgICAgICAgICBjaGlsZE5vZGVbXCI6QFwiXSA9IHRoaXMuYnVpbGRBdHRyaWJ1dGVzTWFwKHRhZ0V4cCwgalBhdGgsIHRhZ05hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZih0YWdDb250ZW50KSB7XG4gICAgICAgICAgICB0YWdDb250ZW50ID0gdGhpcy5wYXJzZVRleHREYXRhKHRhZ0NvbnRlbnQsIHRhZ05hbWUsIGpQYXRoLCB0cnVlLCBhdHRyRXhwUHJlc2VudCwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIGpQYXRoID0galBhdGguc3Vic3RyKDAsIGpQYXRoLmxhc3RJbmRleE9mKFwiLlwiKSk7XG4gICAgICAgICAgY2hpbGROb2RlLmFkZCh0aGlzLm9wdGlvbnMudGV4dE5vZGVOYW1lLCB0YWdDb250ZW50KTtcbiAgICAgICAgICBcbiAgICAgICAgICB0aGlzLmFkZENoaWxkKGN1cnJlbnROb2RlLCBjaGlsZE5vZGUsIGpQYXRoKVxuICAgICAgICB9ZWxzZXtcbiAgLy9zZWxmQ2xvc2luZyB0YWdcbiAgICAgICAgICBpZih0YWdFeHAubGVuZ3RoID4gMCAmJiB0YWdFeHAubGFzdEluZGV4T2YoXCIvXCIpID09PSB0YWdFeHAubGVuZ3RoIC0gMSl7XG4gICAgICAgICAgICBpZih0YWdOYW1lW3RhZ05hbWUubGVuZ3RoIC0gMV0gPT09IFwiL1wiKXsgLy9yZW1vdmUgdHJhaWxpbmcgJy8nXG4gICAgICAgICAgICAgIHRhZ05hbWUgPSB0YWdOYW1lLnN1YnN0cigwLCB0YWdOYW1lLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgICBqUGF0aCA9IGpQYXRoLnN1YnN0cigwLCBqUGF0aC5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgICAgdGFnRXhwID0gdGFnTmFtZTtcbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICB0YWdFeHAgPSB0YWdFeHAuc3Vic3RyKDAsIHRhZ0V4cC5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYodGhpcy5vcHRpb25zLnRyYW5zZm9ybVRhZ05hbWUpIHtcbiAgICAgICAgICAgICAgdGFnTmFtZSA9IHRoaXMub3B0aW9ucy50cmFuc2Zvcm1UYWdOYW1lKHRhZ05hbWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjaGlsZE5vZGUgPSBuZXcgeG1sTm9kZSh0YWdOYW1lKTtcbiAgICAgICAgICAgIGlmKHRhZ05hbWUgIT09IHRhZ0V4cCAmJiBhdHRyRXhwUHJlc2VudCl7XG4gICAgICAgICAgICAgIGNoaWxkTm9kZVtcIjpAXCJdID0gdGhpcy5idWlsZEF0dHJpYnV0ZXNNYXAodGFnRXhwLCBqUGF0aCwgdGFnTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmFkZENoaWxkKGN1cnJlbnROb2RlLCBjaGlsZE5vZGUsIGpQYXRoKVxuICAgICAgICAgICAgalBhdGggPSBqUGF0aC5zdWJzdHIoMCwgalBhdGgubGFzdEluZGV4T2YoXCIuXCIpKTtcbiAgICAgICAgICB9XG4gICAgLy9vcGVuaW5nIHRhZ1xuICAgICAgICAgIGVsc2V7XG4gICAgICAgICAgICBjb25zdCBjaGlsZE5vZGUgPSBuZXcgeG1sTm9kZSggdGFnTmFtZSk7XG4gICAgICAgICAgICB0aGlzLnRhZ3NOb2RlU3RhY2sucHVzaChjdXJyZW50Tm9kZSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmKHRhZ05hbWUgIT09IHRhZ0V4cCAmJiBhdHRyRXhwUHJlc2VudCl7XG4gICAgICAgICAgICAgIGNoaWxkTm9kZVtcIjpAXCJdID0gdGhpcy5idWlsZEF0dHJpYnV0ZXNNYXAodGFnRXhwLCBqUGF0aCwgdGFnTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmFkZENoaWxkKGN1cnJlbnROb2RlLCBjaGlsZE5vZGUsIGpQYXRoKVxuICAgICAgICAgICAgY3VycmVudE5vZGUgPSBjaGlsZE5vZGU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRleHREYXRhID0gXCJcIjtcbiAgICAgICAgICBpID0gY2xvc2VJbmRleDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1lbHNle1xuICAgICAgdGV4dERhdGEgKz0geG1sRGF0YVtpXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHhtbE9iai5jaGlsZDtcbn1cblxuZnVuY3Rpb24gYWRkQ2hpbGQoY3VycmVudE5vZGUsIGNoaWxkTm9kZSwgalBhdGgpe1xuICBjb25zdCByZXN1bHQgPSB0aGlzLm9wdGlvbnMudXBkYXRlVGFnKGNoaWxkTm9kZS50YWduYW1lLCBqUGF0aCwgY2hpbGROb2RlW1wiOkBcIl0pXG4gIGlmKHJlc3VsdCA9PT0gZmFsc2Upe1xuICB9ZWxzZSBpZih0eXBlb2YgcmVzdWx0ID09PSBcInN0cmluZ1wiKXtcbiAgICBjaGlsZE5vZGUudGFnbmFtZSA9IHJlc3VsdFxuICAgIGN1cnJlbnROb2RlLmFkZENoaWxkKGNoaWxkTm9kZSk7XG4gIH1lbHNle1xuICAgIGN1cnJlbnROb2RlLmFkZENoaWxkKGNoaWxkTm9kZSk7XG4gIH1cbn1cblxuY29uc3QgcmVwbGFjZUVudGl0aWVzVmFsdWUgPSBmdW5jdGlvbih2YWwpe1xuXG4gIGlmKHRoaXMub3B0aW9ucy5wcm9jZXNzRW50aXRpZXMpe1xuICAgIGZvcihsZXQgZW50aXR5TmFtZSBpbiB0aGlzLmRvY1R5cGVFbnRpdGllcyl7XG4gICAgICBjb25zdCBlbnRpdHkgPSB0aGlzLmRvY1R5cGVFbnRpdGllc1tlbnRpdHlOYW1lXTtcbiAgICAgIHZhbCA9IHZhbC5yZXBsYWNlKCBlbnRpdHkucmVneCwgZW50aXR5LnZhbCk7XG4gICAgfVxuICAgIGZvcihsZXQgZW50aXR5TmFtZSBpbiB0aGlzLmxhc3RFbnRpdGllcyl7XG4gICAgICBjb25zdCBlbnRpdHkgPSB0aGlzLmxhc3RFbnRpdGllc1tlbnRpdHlOYW1lXTtcbiAgICAgIHZhbCA9IHZhbC5yZXBsYWNlKCBlbnRpdHkucmVnZXgsIGVudGl0eS52YWwpO1xuICAgIH1cbiAgICBpZih0aGlzLm9wdGlvbnMuaHRtbEVudGl0aWVzKXtcbiAgICAgIGZvcihsZXQgZW50aXR5TmFtZSBpbiB0aGlzLmh0bWxFbnRpdGllcyl7XG4gICAgICAgIGNvbnN0IGVudGl0eSA9IHRoaXMuaHRtbEVudGl0aWVzW2VudGl0eU5hbWVdO1xuICAgICAgICB2YWwgPSB2YWwucmVwbGFjZSggZW50aXR5LnJlZ2V4LCBlbnRpdHkudmFsKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdmFsID0gdmFsLnJlcGxhY2UoIHRoaXMuYW1wRW50aXR5LnJlZ2V4LCB0aGlzLmFtcEVudGl0eS52YWwpO1xuICB9XG4gIHJldHVybiB2YWw7XG59XG5mdW5jdGlvbiBzYXZlVGV4dFRvUGFyZW50VGFnKHRleHREYXRhLCBjdXJyZW50Tm9kZSwgalBhdGgsIGlzTGVhZk5vZGUpIHtcbiAgaWYgKHRleHREYXRhKSB7IC8vc3RvcmUgcHJldmlvdXNseSBjb2xsZWN0ZWQgZGF0YSBhcyB0ZXh0Tm9kZVxuICAgIGlmKGlzTGVhZk5vZGUgPT09IHVuZGVmaW5lZCkgaXNMZWFmTm9kZSA9IE9iamVjdC5rZXlzKGN1cnJlbnROb2RlLmNoaWxkKS5sZW5ndGggPT09IDBcbiAgICBcbiAgICB0ZXh0RGF0YSA9IHRoaXMucGFyc2VUZXh0RGF0YSh0ZXh0RGF0YSxcbiAgICAgIGN1cnJlbnROb2RlLnRhZ25hbWUsXG4gICAgICBqUGF0aCxcbiAgICAgIGZhbHNlLFxuICAgICAgY3VycmVudE5vZGVbXCI6QFwiXSA/IE9iamVjdC5rZXlzKGN1cnJlbnROb2RlW1wiOkBcIl0pLmxlbmd0aCAhPT0gMCA6IGZhbHNlLFxuICAgICAgaXNMZWFmTm9kZSk7XG5cbiAgICBpZiAodGV4dERhdGEgIT09IHVuZGVmaW5lZCAmJiB0ZXh0RGF0YSAhPT0gXCJcIilcbiAgICAgIGN1cnJlbnROb2RlLmFkZCh0aGlzLm9wdGlvbnMudGV4dE5vZGVOYW1lLCB0ZXh0RGF0YSk7XG4gICAgdGV4dERhdGEgPSBcIlwiO1xuICB9XG4gIHJldHVybiB0ZXh0RGF0YTtcbn1cblxuLy9UT0RPOiB1c2UgalBhdGggdG8gc2ltcGxpZnkgdGhlIGxvZ2ljXG4vKipcbiAqIFxuICogQHBhcmFtIHtzdHJpbmdbXX0gc3RvcE5vZGVzIFxuICogQHBhcmFtIHtzdHJpbmd9IGpQYXRoXG4gKiBAcGFyYW0ge3N0cmluZ30gY3VycmVudFRhZ05hbWUgXG4gKi9cbmZ1bmN0aW9uIGlzSXRTdG9wTm9kZShzdG9wTm9kZXMsIGpQYXRoLCBjdXJyZW50VGFnTmFtZSl7XG4gIGNvbnN0IGFsbE5vZGVzRXhwID0gXCIqLlwiICsgY3VycmVudFRhZ05hbWU7XG4gIGZvciAoY29uc3Qgc3RvcE5vZGVQYXRoIGluIHN0b3BOb2Rlcykge1xuICAgIGNvbnN0IHN0b3BOb2RlRXhwID0gc3RvcE5vZGVzW3N0b3BOb2RlUGF0aF07XG4gICAgaWYoIGFsbE5vZGVzRXhwID09PSBzdG9wTm9kZUV4cCB8fCBqUGF0aCA9PT0gc3RvcE5vZGVFeHAgICkgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHRhZyBFeHByZXNzaW9uIGFuZCB3aGVyZSBpdCBpcyBlbmRpbmcgaGFuZGxpbmcgc2luZ2xlLWRvdWJsZSBxdW90ZXMgc2l0dWF0aW9uXG4gKiBAcGFyYW0ge3N0cmluZ30geG1sRGF0YSBcbiAqIEBwYXJhbSB7bnVtYmVyfSBpIHN0YXJ0aW5nIGluZGV4XG4gKiBAcmV0dXJucyBcbiAqL1xuZnVuY3Rpb24gdGFnRXhwV2l0aENsb3NpbmdJbmRleCh4bWxEYXRhLCBpLCBjbG9zaW5nQ2hhciA9IFwiPlwiKXtcbiAgbGV0IGF0dHJCb3VuZGFyeTtcbiAgbGV0IHRhZ0V4cCA9IFwiXCI7XG4gIGZvciAobGV0IGluZGV4ID0gaTsgaW5kZXggPCB4bWxEYXRhLmxlbmd0aDsgaW5kZXgrKykge1xuICAgIGxldCBjaCA9IHhtbERhdGFbaW5kZXhdO1xuICAgIGlmIChhdHRyQm91bmRhcnkpIHtcbiAgICAgICAgaWYgKGNoID09PSBhdHRyQm91bmRhcnkpIGF0dHJCb3VuZGFyeSA9IFwiXCI7Ly9yZXNldFxuICAgIH0gZWxzZSBpZiAoY2ggPT09ICdcIicgfHwgY2ggPT09IFwiJ1wiKSB7XG4gICAgICAgIGF0dHJCb3VuZGFyeSA9IGNoO1xuICAgIH0gZWxzZSBpZiAoY2ggPT09IGNsb3NpbmdDaGFyWzBdKSB7XG4gICAgICBpZihjbG9zaW5nQ2hhclsxXSl7XG4gICAgICAgIGlmKHhtbERhdGFbaW5kZXggKyAxXSA9PT0gY2xvc2luZ0NoYXJbMV0pe1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkYXRhOiB0YWdFeHAsXG4gICAgICAgICAgICBpbmRleDogaW5kZXhcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1lbHNle1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRhdGE6IHRhZ0V4cCxcbiAgICAgICAgICBpbmRleDogaW5kZXhcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2ggPT09ICdcXHQnKSB7XG4gICAgICBjaCA9IFwiIFwiXG4gICAgfVxuICAgIHRhZ0V4cCArPSBjaDtcbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kQ2xvc2luZ0luZGV4KHhtbERhdGEsIHN0ciwgaSwgZXJyTXNnKXtcbiAgY29uc3QgY2xvc2luZ0luZGV4ID0geG1sRGF0YS5pbmRleE9mKHN0ciwgaSk7XG4gIGlmKGNsb3NpbmdJbmRleCA9PT0gLTEpe1xuICAgIHRocm93IG5ldyBFcnJvcihlcnJNc2cpXG4gIH1lbHNle1xuICAgIHJldHVybiBjbG9zaW5nSW5kZXggKyBzdHIubGVuZ3RoIC0gMTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZWFkVGFnRXhwKHhtbERhdGEsaSwgcmVtb3ZlTlNQcmVmaXgsIGNsb3NpbmdDaGFyID0gXCI+XCIpe1xuICBjb25zdCByZXN1bHQgPSB0YWdFeHBXaXRoQ2xvc2luZ0luZGV4KHhtbERhdGEsIGkrMSwgY2xvc2luZ0NoYXIpO1xuICBpZighcmVzdWx0KSByZXR1cm47XG4gIGxldCB0YWdFeHAgPSByZXN1bHQuZGF0YTtcbiAgY29uc3QgY2xvc2VJbmRleCA9IHJlc3VsdC5pbmRleDtcbiAgY29uc3Qgc2VwYXJhdG9ySW5kZXggPSB0YWdFeHAuc2VhcmNoKC9cXHMvKTtcbiAgbGV0IHRhZ05hbWUgPSB0YWdFeHA7XG4gIGxldCBhdHRyRXhwUHJlc2VudCA9IHRydWU7XG4gIGlmKHNlcGFyYXRvckluZGV4ICE9PSAtMSl7Ly9zZXBhcmF0ZSB0YWcgbmFtZSBhbmQgYXR0cmlidXRlcyBleHByZXNzaW9uXG4gICAgdGFnTmFtZSA9IHRhZ0V4cC5zdWJzdHJpbmcoMCwgc2VwYXJhdG9ySW5kZXgpO1xuICAgIHRhZ0V4cCA9IHRhZ0V4cC5zdWJzdHJpbmcoc2VwYXJhdG9ySW5kZXggKyAxKS50cmltU3RhcnQoKTtcbiAgfVxuXG4gIGNvbnN0IHJhd1RhZ05hbWUgPSB0YWdOYW1lO1xuICBpZihyZW1vdmVOU1ByZWZpeCl7XG4gICAgY29uc3QgY29sb25JbmRleCA9IHRhZ05hbWUuaW5kZXhPZihcIjpcIik7XG4gICAgaWYoY29sb25JbmRleCAhPT0gLTEpe1xuICAgICAgdGFnTmFtZSA9IHRhZ05hbWUuc3Vic3RyKGNvbG9uSW5kZXgrMSk7XG4gICAgICBhdHRyRXhwUHJlc2VudCA9IHRhZ05hbWUgIT09IHJlc3VsdC5kYXRhLnN1YnN0cihjb2xvbkluZGV4ICsgMSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0YWdOYW1lOiB0YWdOYW1lLFxuICAgIHRhZ0V4cDogdGFnRXhwLFxuICAgIGNsb3NlSW5kZXg6IGNsb3NlSW5kZXgsXG4gICAgYXR0ckV4cFByZXNlbnQ6IGF0dHJFeHBQcmVzZW50LFxuICAgIHJhd1RhZ05hbWU6IHJhd1RhZ05hbWUsXG4gIH1cbn1cbi8qKlxuICogZmluZCBwYWlyZWQgdGFnIGZvciBhIHN0b3Agbm9kZVxuICogQHBhcmFtIHtzdHJpbmd9IHhtbERhdGEgXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnTmFtZSBcbiAqIEBwYXJhbSB7bnVtYmVyfSBpIFxuICovXG5mdW5jdGlvbiByZWFkU3RvcE5vZGVEYXRhKHhtbERhdGEsIHRhZ05hbWUsIGkpe1xuICBjb25zdCBzdGFydEluZGV4ID0gaTtcbiAgLy8gU3RhcnRpbmcgYXQgMSBzaW5jZSB3ZSBhbHJlYWR5IGhhdmUgYW4gb3BlbiB0YWdcbiAgbGV0IG9wZW5UYWdDb3VudCA9IDE7XG5cbiAgZm9yICg7IGkgPCB4bWxEYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYoIHhtbERhdGFbaV0gPT09IFwiPFwiKXsgXG4gICAgICBpZiAoeG1sRGF0YVtpKzFdID09PSBcIi9cIikgey8vY2xvc2UgdGFnXG4gICAgICAgICAgY29uc3QgY2xvc2VJbmRleCA9IGZpbmRDbG9zaW5nSW5kZXgoeG1sRGF0YSwgXCI+XCIsIGksIGAke3RhZ05hbWV9IGlzIG5vdCBjbG9zZWRgKTtcbiAgICAgICAgICBsZXQgY2xvc2VUYWdOYW1lID0geG1sRGF0YS5zdWJzdHJpbmcoaSsyLGNsb3NlSW5kZXgpLnRyaW0oKTtcbiAgICAgICAgICBpZihjbG9zZVRhZ05hbWUgPT09IHRhZ05hbWUpe1xuICAgICAgICAgICAgb3BlblRhZ0NvdW50LS07XG4gICAgICAgICAgICBpZiAob3BlblRhZ0NvdW50ID09PSAwKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdGFnQ29udGVudDogeG1sRGF0YS5zdWJzdHJpbmcoc3RhcnRJbmRleCwgaSksXG4gICAgICAgICAgICAgICAgaSA6IGNsb3NlSW5kZXhcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpPWNsb3NlSW5kZXg7XG4gICAgICAgIH0gZWxzZSBpZih4bWxEYXRhW2krMV0gPT09ICc/JykgeyBcbiAgICAgICAgICBjb25zdCBjbG9zZUluZGV4ID0gZmluZENsb3NpbmdJbmRleCh4bWxEYXRhLCBcIj8+XCIsIGkrMSwgXCJTdG9wTm9kZSBpcyBub3QgY2xvc2VkLlwiKVxuICAgICAgICAgIGk9Y2xvc2VJbmRleDtcbiAgICAgICAgfSBlbHNlIGlmKHhtbERhdGEuc3Vic3RyKGkgKyAxLCAzKSA9PT0gJyEtLScpIHsgXG4gICAgICAgICAgY29uc3QgY2xvc2VJbmRleCA9IGZpbmRDbG9zaW5nSW5kZXgoeG1sRGF0YSwgXCItLT5cIiwgaSszLCBcIlN0b3BOb2RlIGlzIG5vdCBjbG9zZWQuXCIpXG4gICAgICAgICAgaT1jbG9zZUluZGV4O1xuICAgICAgICB9IGVsc2UgaWYoeG1sRGF0YS5zdWJzdHIoaSArIDEsIDIpID09PSAnIVsnKSB7IFxuICAgICAgICAgIGNvbnN0IGNsb3NlSW5kZXggPSBmaW5kQ2xvc2luZ0luZGV4KHhtbERhdGEsIFwiXV0+XCIsIGksIFwiU3RvcE5vZGUgaXMgbm90IGNsb3NlZC5cIikgLSAyO1xuICAgICAgICAgIGk9Y2xvc2VJbmRleDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCB0YWdEYXRhID0gcmVhZFRhZ0V4cCh4bWxEYXRhLCBpLCAnPicpXG5cbiAgICAgICAgICBpZiAodGFnRGF0YSkge1xuICAgICAgICAgICAgY29uc3Qgb3BlblRhZ05hbWUgPSB0YWdEYXRhICYmIHRhZ0RhdGEudGFnTmFtZTtcbiAgICAgICAgICAgIGlmIChvcGVuVGFnTmFtZSA9PT0gdGFnTmFtZSAmJiB0YWdEYXRhLnRhZ0V4cFt0YWdEYXRhLnRhZ0V4cC5sZW5ndGgtMV0gIT09IFwiL1wiKSB7XG4gICAgICAgICAgICAgIG9wZW5UYWdDb3VudCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaT10YWdEYXRhLmNsb3NlSW5kZXg7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gIH0vL2VuZCBmb3IgbG9vcFxufVxuXG5mdW5jdGlvbiBwYXJzZVZhbHVlKHZhbCwgc2hvdWxkUGFyc2UsIG9wdGlvbnMpIHtcbiAgaWYgKHNob3VsZFBhcnNlICYmIHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgLy9jb25zb2xlLmxvZyhvcHRpb25zKVxuICAgIGNvbnN0IG5ld3ZhbCA9IHZhbC50cmltKCk7XG4gICAgaWYobmV3dmFsID09PSAndHJ1ZScgKSByZXR1cm4gdHJ1ZTtcbiAgICBlbHNlIGlmKG5ld3ZhbCA9PT0gJ2ZhbHNlJyApIHJldHVybiBmYWxzZTtcbiAgICBlbHNlIHJldHVybiB0b051bWJlcih2YWwsIG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIGlmICh1dGlsLmlzRXhpc3QodmFsKSkge1xuICAgICAgcmV0dXJuIHZhbDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxufVxuXG5cbm1vZHVsZS5leHBvcnRzID0gT3JkZXJlZE9ialBhcnNlcjtcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFxuICogQHBhcmFtIHthcnJheX0gbm9kZSBcbiAqIEBwYXJhbSB7YW55fSBvcHRpb25zIFxuICogQHJldHVybnMgXG4gKi9cbmZ1bmN0aW9uIHByZXR0aWZ5KG5vZGUsIG9wdGlvbnMpe1xuICByZXR1cm4gY29tcHJlc3MoIG5vZGUsIG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIFxuICogQHBhcmFtIHthcnJheX0gYXJyIFxuICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgXG4gKiBAcGFyYW0ge3N0cmluZ30galBhdGggXG4gKiBAcmV0dXJucyBvYmplY3RcbiAqL1xuZnVuY3Rpb24gY29tcHJlc3MoYXJyLCBvcHRpb25zLCBqUGF0aCl7XG4gIGxldCB0ZXh0O1xuICBjb25zdCBjb21wcmVzc2VkT2JqID0ge307XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgdGFnT2JqID0gYXJyW2ldO1xuICAgIGNvbnN0IHByb3BlcnR5ID0gcHJvcE5hbWUodGFnT2JqKTtcbiAgICBsZXQgbmV3SnBhdGggPSBcIlwiO1xuICAgIGlmKGpQYXRoID09PSB1bmRlZmluZWQpIG5ld0pwYXRoID0gcHJvcGVydHk7XG4gICAgZWxzZSBuZXdKcGF0aCA9IGpQYXRoICsgXCIuXCIgKyBwcm9wZXJ0eTtcblxuICAgIGlmKHByb3BlcnR5ID09PSBvcHRpb25zLnRleHROb2RlTmFtZSl7XG4gICAgICBpZih0ZXh0ID09PSB1bmRlZmluZWQpIHRleHQgPSB0YWdPYmpbcHJvcGVydHldO1xuICAgICAgZWxzZSB0ZXh0ICs9IFwiXCIgKyB0YWdPYmpbcHJvcGVydHldO1xuICAgIH1lbHNlIGlmKHByb3BlcnR5ID09PSB1bmRlZmluZWQpe1xuICAgICAgY29udGludWU7XG4gICAgfWVsc2UgaWYodGFnT2JqW3Byb3BlcnR5XSl7XG4gICAgICBcbiAgICAgIGxldCB2YWwgPSBjb21wcmVzcyh0YWdPYmpbcHJvcGVydHldLCBvcHRpb25zLCBuZXdKcGF0aCk7XG4gICAgICBjb25zdCBpc0xlYWYgPSBpc0xlYWZUYWcodmFsLCBvcHRpb25zKTtcblxuICAgICAgaWYodGFnT2JqW1wiOkBcIl0pe1xuICAgICAgICBhc3NpZ25BdHRyaWJ1dGVzKCB2YWwsIHRhZ09ialtcIjpAXCJdLCBuZXdKcGF0aCwgb3B0aW9ucyk7XG4gICAgICB9ZWxzZSBpZihPYmplY3Qua2V5cyh2YWwpLmxlbmd0aCA9PT0gMSAmJiB2YWxbb3B0aW9ucy50ZXh0Tm9kZU5hbWVdICE9PSB1bmRlZmluZWQgJiYgIW9wdGlvbnMuYWx3YXlzQ3JlYXRlVGV4dE5vZGUpe1xuICAgICAgICB2YWwgPSB2YWxbb3B0aW9ucy50ZXh0Tm9kZU5hbWVdO1xuICAgICAgfWVsc2UgaWYoT2JqZWN0LmtleXModmFsKS5sZW5ndGggPT09IDApe1xuICAgICAgICBpZihvcHRpb25zLmFsd2F5c0NyZWF0ZVRleHROb2RlKSB2YWxbb3B0aW9ucy50ZXh0Tm9kZU5hbWVdID0gXCJcIjtcbiAgICAgICAgZWxzZSB2YWwgPSBcIlwiO1xuICAgICAgfVxuXG4gICAgICBpZihjb21wcmVzc2VkT2JqW3Byb3BlcnR5XSAhPT0gdW5kZWZpbmVkICYmIGNvbXByZXNzZWRPYmouaGFzT3duUHJvcGVydHkocHJvcGVydHkpKSB7XG4gICAgICAgIGlmKCFBcnJheS5pc0FycmF5KGNvbXByZXNzZWRPYmpbcHJvcGVydHldKSkge1xuICAgICAgICAgICAgY29tcHJlc3NlZE9ialtwcm9wZXJ0eV0gPSBbIGNvbXByZXNzZWRPYmpbcHJvcGVydHldIF07XG4gICAgICAgIH1cbiAgICAgICAgY29tcHJlc3NlZE9ialtwcm9wZXJ0eV0ucHVzaCh2YWwpO1xuICAgICAgfWVsc2V7XG4gICAgICAgIC8vVE9ETzogaWYgYSBub2RlIGlzIG5vdCBhbiBhcnJheSwgdGhlbiBjaGVjayBpZiBpdCBzaG91bGQgYmUgYW4gYXJyYXlcbiAgICAgICAgLy9hbHNvIGRldGVybWluZSBpZiBpdCBpcyBhIGxlYWYgbm9kZVxuICAgICAgICBpZiAob3B0aW9ucy5pc0FycmF5KHByb3BlcnR5LCBuZXdKcGF0aCwgaXNMZWFmICkpIHtcbiAgICAgICAgICBjb21wcmVzc2VkT2JqW3Byb3BlcnR5XSA9IFt2YWxdO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICBjb21wcmVzc2VkT2JqW3Byb3BlcnR5XSA9IHZhbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBcbiAgfVxuICAvLyBpZih0ZXh0ICYmIHRleHQubGVuZ3RoID4gMCkgY29tcHJlc3NlZE9ialtvcHRpb25zLnRleHROb2RlTmFtZV0gPSB0ZXh0O1xuICBpZih0eXBlb2YgdGV4dCA9PT0gXCJzdHJpbmdcIil7XG4gICAgaWYodGV4dC5sZW5ndGggPiAwKSBjb21wcmVzc2VkT2JqW29wdGlvbnMudGV4dE5vZGVOYW1lXSA9IHRleHQ7XG4gIH1lbHNlIGlmKHRleHQgIT09IHVuZGVmaW5lZCkgY29tcHJlc3NlZE9ialtvcHRpb25zLnRleHROb2RlTmFtZV0gPSB0ZXh0O1xuICByZXR1cm4gY29tcHJlc3NlZE9iajtcbn1cblxuZnVuY3Rpb24gcHJvcE5hbWUob2JqKXtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGtleSA9IGtleXNbaV07XG4gICAgaWYoa2V5ICE9PSBcIjpAXCIpIHJldHVybiBrZXk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXNzaWduQXR0cmlidXRlcyhvYmosIGF0dHJNYXAsIGpwYXRoLCBvcHRpb25zKXtcbiAgaWYgKGF0dHJNYXApIHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoYXR0ck1hcCk7XG4gICAgY29uc3QgbGVuID0ga2V5cy5sZW5ndGg7IC8vZG9uJ3QgbWFrZSBpdCBpbmxpbmVcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBjb25zdCBhdHJyTmFtZSA9IGtleXNbaV07XG4gICAgICBpZiAob3B0aW9ucy5pc0FycmF5KGF0cnJOYW1lLCBqcGF0aCArIFwiLlwiICsgYXRyck5hbWUsIHRydWUsIHRydWUpKSB7XG4gICAgICAgIG9ialthdHJyTmFtZV0gPSBbIGF0dHJNYXBbYXRyck5hbWVdIF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvYmpbYXRyck5hbWVdID0gYXR0ck1hcFthdHJyTmFtZV07XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzTGVhZlRhZyhvYmosIG9wdGlvbnMpe1xuICBjb25zdCB7IHRleHROb2RlTmFtZSB9ID0gb3B0aW9ucztcbiAgY29uc3QgcHJvcENvdW50ID0gT2JqZWN0LmtleXMob2JqKS5sZW5ndGg7XG4gIFxuICBpZiAocHJvcENvdW50ID09PSAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoXG4gICAgcHJvcENvdW50ID09PSAxICYmXG4gICAgKG9ialt0ZXh0Tm9kZU5hbWVdIHx8IHR5cGVvZiBvYmpbdGV4dE5vZGVOYW1lXSA9PT0gXCJib29sZWFuXCIgfHwgb2JqW3RleHROb2RlTmFtZV0gPT09IDApXG4gICkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuZXhwb3J0cy5wcmV0dGlmeSA9IHByZXR0aWZ5O1xuIiwKICAgICJjb25zdCB7IGJ1aWxkT3B0aW9uc30gPSByZXF1aXJlKFwiLi9PcHRpb25zQnVpbGRlclwiKTtcbmNvbnN0IE9yZGVyZWRPYmpQYXJzZXIgPSByZXF1aXJlKFwiLi9PcmRlcmVkT2JqUGFyc2VyXCIpO1xuY29uc3QgeyBwcmV0dGlmeX0gPSByZXF1aXJlKFwiLi9ub2RlMmpzb25cIik7XG5jb25zdCB2YWxpZGF0b3IgPSByZXF1aXJlKCcuLi92YWxpZGF0b3InKTtcblxuY2xhc3MgWE1MUGFyc2Vye1xuICAgIFxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpe1xuICAgICAgICB0aGlzLmV4dGVybmFsRW50aXRpZXMgPSB7fTtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gYnVpbGRPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgICBcbiAgICB9XG4gICAgLyoqXG4gICAgICogUGFyc2UgWE1MIGRhdHMgdG8gSlMgb2JqZWN0IFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfEJ1ZmZlcn0geG1sRGF0YSBcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW58T2JqZWN0fSB2YWxpZGF0aW9uT3B0aW9uIFxuICAgICAqL1xuICAgIHBhcnNlKHhtbERhdGEsdmFsaWRhdGlvbk9wdGlvbil7XG4gICAgICAgIGlmKHR5cGVvZiB4bWxEYXRhID09PSBcInN0cmluZ1wiKXtcbiAgICAgICAgfWVsc2UgaWYoIHhtbERhdGEudG9TdHJpbmcpe1xuICAgICAgICAgICAgeG1sRGF0YSA9IHhtbERhdGEudG9TdHJpbmcoKTtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJYTUwgZGF0YSBpcyBhY2NlcHRlZCBpbiBTdHJpbmcgb3IgQnl0ZXNbXSBmb3JtLlwiKVxuICAgICAgICB9XG4gICAgICAgIGlmKCB2YWxpZGF0aW9uT3B0aW9uKXtcbiAgICAgICAgICAgIGlmKHZhbGlkYXRpb25PcHRpb24gPT09IHRydWUpIHZhbGlkYXRpb25PcHRpb24gPSB7fTsgLy92YWxpZGF0ZSB3aXRoIGRlZmF1bHQgb3B0aW9uc1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB2YWxpZGF0b3IudmFsaWRhdGUoeG1sRGF0YSwgdmFsaWRhdGlvbk9wdGlvbik7XG4gICAgICAgICAgICBpZiAocmVzdWx0ICE9PSB0cnVlKSB7XG4gICAgICAgICAgICAgIHRocm93IEVycm9yKCBgJHtyZXN1bHQuZXJyLm1zZ306JHtyZXN1bHQuZXJyLmxpbmV9OiR7cmVzdWx0LmVyci5jb2x9YCApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBjb25zdCBvcmRlcmVkT2JqUGFyc2VyID0gbmV3IE9yZGVyZWRPYmpQYXJzZXIodGhpcy5vcHRpb25zKTtcbiAgICAgICAgb3JkZXJlZE9ialBhcnNlci5hZGRFeHRlcm5hbEVudGl0aWVzKHRoaXMuZXh0ZXJuYWxFbnRpdGllcyk7XG4gICAgICAgIGNvbnN0IG9yZGVyZWRSZXN1bHQgPSBvcmRlcmVkT2JqUGFyc2VyLnBhcnNlWG1sKHhtbERhdGEpO1xuICAgICAgICBpZih0aGlzLm9wdGlvbnMucHJlc2VydmVPcmRlciB8fCBvcmRlcmVkUmVzdWx0ID09PSB1bmRlZmluZWQpIHJldHVybiBvcmRlcmVkUmVzdWx0O1xuICAgICAgICBlbHNlIHJldHVybiBwcmV0dGlmeShvcmRlcmVkUmVzdWx0LCB0aGlzLm9wdGlvbnMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZCBFbnRpdHkgd2hpY2ggaXMgbm90IGJ5IGRlZmF1bHQgc3VwcG9ydGVkIGJ5IHRoaXMgbGlicmFyeVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIFxuICAgICAqL1xuICAgIGFkZEVudGl0eShrZXksIHZhbHVlKXtcbiAgICAgICAgaWYodmFsdWUuaW5kZXhPZihcIiZcIikgIT09IC0xKXtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkVudGl0eSB2YWx1ZSBjYW4ndCBoYXZlICcmJ1wiKVxuICAgICAgICB9ZWxzZSBpZihrZXkuaW5kZXhPZihcIiZcIikgIT09IC0xIHx8IGtleS5pbmRleE9mKFwiO1wiKSAhPT0gLTEpe1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQW4gZW50aXR5IG11c3QgYmUgc2V0IHdpdGhvdXQgJyYnIGFuZCAnOycuIEVnLiB1c2UgJyN4RCcgZm9yICcmI3hEOydcIilcbiAgICAgICAgfWVsc2UgaWYodmFsdWUgPT09IFwiJlwiKXtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFuIGVudGl0eSB3aXRoIHZhbHVlICcmJyBpcyBub3QgcGVybWl0dGVkXCIpO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIHRoaXMuZXh0ZXJuYWxFbnRpdGllc1trZXldID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gWE1MUGFyc2VyOyIsCiAgICAiY29uc3QgRU9MID0gXCJcXG5cIjtcblxuLyoqXG4gKiBcbiAqIEBwYXJhbSB7YXJyYXl9IGpBcnJheSBcbiAqIEBwYXJhbSB7YW55fSBvcHRpb25zIFxuICogQHJldHVybnMgXG4gKi9cbmZ1bmN0aW9uIHRvWG1sKGpBcnJheSwgb3B0aW9ucykge1xuICAgIGxldCBpbmRlbnRhdGlvbiA9IFwiXCI7XG4gICAgaWYgKG9wdGlvbnMuZm9ybWF0ICYmIG9wdGlvbnMuaW5kZW50QnkubGVuZ3RoID4gMCkge1xuICAgICAgICBpbmRlbnRhdGlvbiA9IEVPTDtcbiAgICB9XG4gICAgcmV0dXJuIGFyclRvU3RyKGpBcnJheSwgb3B0aW9ucywgXCJcIiwgaW5kZW50YXRpb24pO1xufVxuXG5mdW5jdGlvbiBhcnJUb1N0cihhcnIsIG9wdGlvbnMsIGpQYXRoLCBpbmRlbnRhdGlvbikge1xuICAgIGxldCB4bWxTdHIgPSBcIlwiO1xuICAgIGxldCBpc1ByZXZpb3VzRWxlbWVudFRhZyA9IGZhbHNlO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgdGFnT2JqID0gYXJyW2ldO1xuICAgICAgICBjb25zdCB0YWdOYW1lID0gcHJvcE5hbWUodGFnT2JqKTtcbiAgICAgICAgaWYodGFnTmFtZSA9PT0gdW5kZWZpbmVkKSBjb250aW51ZTtcblxuICAgICAgICBsZXQgbmV3SlBhdGggPSBcIlwiO1xuICAgICAgICBpZiAoalBhdGgubGVuZ3RoID09PSAwKSBuZXdKUGF0aCA9IHRhZ05hbWVcbiAgICAgICAgZWxzZSBuZXdKUGF0aCA9IGAke2pQYXRofS4ke3RhZ05hbWV9YDtcblxuICAgICAgICBpZiAodGFnTmFtZSA9PT0gb3B0aW9ucy50ZXh0Tm9kZU5hbWUpIHtcbiAgICAgICAgICAgIGxldCB0YWdUZXh0ID0gdGFnT2JqW3RhZ05hbWVdO1xuICAgICAgICAgICAgaWYgKCFpc1N0b3BOb2RlKG5ld0pQYXRoLCBvcHRpb25zKSkge1xuICAgICAgICAgICAgICAgIHRhZ1RleHQgPSBvcHRpb25zLnRhZ1ZhbHVlUHJvY2Vzc29yKHRhZ05hbWUsIHRhZ1RleHQpO1xuICAgICAgICAgICAgICAgIHRhZ1RleHQgPSByZXBsYWNlRW50aXRpZXNWYWx1ZSh0YWdUZXh0LCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1ByZXZpb3VzRWxlbWVudFRhZykge1xuICAgICAgICAgICAgICAgIHhtbFN0ciArPSBpbmRlbnRhdGlvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHhtbFN0ciArPSB0YWdUZXh0O1xuICAgICAgICAgICAgaXNQcmV2aW91c0VsZW1lbnRUYWcgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHRhZ05hbWUgPT09IG9wdGlvbnMuY2RhdGFQcm9wTmFtZSkge1xuICAgICAgICAgICAgaWYgKGlzUHJldmlvdXNFbGVtZW50VGFnKSB7XG4gICAgICAgICAgICAgICAgeG1sU3RyICs9IGluZGVudGF0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgeG1sU3RyICs9IGA8IVtDREFUQVske3RhZ09ialt0YWdOYW1lXVswXVtvcHRpb25zLnRleHROb2RlTmFtZV19XV0+YDtcbiAgICAgICAgICAgIGlzUHJldmlvdXNFbGVtZW50VGFnID0gZmFsc2U7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSBlbHNlIGlmICh0YWdOYW1lID09PSBvcHRpb25zLmNvbW1lbnRQcm9wTmFtZSkge1xuICAgICAgICAgICAgeG1sU3RyICs9IGluZGVudGF0aW9uICsgYDwhLS0ke3RhZ09ialt0YWdOYW1lXVswXVtvcHRpb25zLnRleHROb2RlTmFtZV19LS0+YDtcbiAgICAgICAgICAgIGlzUHJldmlvdXNFbGVtZW50VGFnID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHRhZ05hbWVbMF0gPT09IFwiP1wiKSB7XG4gICAgICAgICAgICBjb25zdCBhdHRTdHIgPSBhdHRyX3RvX3N0cih0YWdPYmpbXCI6QFwiXSwgb3B0aW9ucyk7XG4gICAgICAgICAgICBjb25zdCB0ZW1wSW5kID0gdGFnTmFtZSA9PT0gXCI/eG1sXCIgPyBcIlwiIDogaW5kZW50YXRpb247XG4gICAgICAgICAgICBsZXQgcGlUZXh0Tm9kZU5hbWUgPSB0YWdPYmpbdGFnTmFtZV1bMF1bb3B0aW9ucy50ZXh0Tm9kZU5hbWVdO1xuICAgICAgICAgICAgcGlUZXh0Tm9kZU5hbWUgPSBwaVRleHROb2RlTmFtZS5sZW5ndGggIT09IDAgPyBcIiBcIiArIHBpVGV4dE5vZGVOYW1lIDogXCJcIjsgLy9yZW1vdmUgZXh0cmEgc3BhY2luZ1xuICAgICAgICAgICAgeG1sU3RyICs9IHRlbXBJbmQgKyBgPCR7dGFnTmFtZX0ke3BpVGV4dE5vZGVOYW1lfSR7YXR0U3RyfT8+YDtcbiAgICAgICAgICAgIGlzUHJldmlvdXNFbGVtZW50VGFnID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGxldCBuZXdJZGVudGF0aW9uID0gaW5kZW50YXRpb247XG4gICAgICAgIGlmIChuZXdJZGVudGF0aW9uICE9PSBcIlwiKSB7XG4gICAgICAgICAgICBuZXdJZGVudGF0aW9uICs9IG9wdGlvbnMuaW5kZW50Qnk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYXR0U3RyID0gYXR0cl90b19zdHIodGFnT2JqW1wiOkBcIl0sIG9wdGlvbnMpO1xuICAgICAgICBjb25zdCB0YWdTdGFydCA9IGluZGVudGF0aW9uICsgYDwke3RhZ05hbWV9JHthdHRTdHJ9YDtcbiAgICAgICAgY29uc3QgdGFnVmFsdWUgPSBhcnJUb1N0cih0YWdPYmpbdGFnTmFtZV0sIG9wdGlvbnMsIG5ld0pQYXRoLCBuZXdJZGVudGF0aW9uKTtcbiAgICAgICAgaWYgKG9wdGlvbnMudW5wYWlyZWRUYWdzLmluZGV4T2YodGFnTmFtZSkgIT09IC0xKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5zdXBwcmVzc1VucGFpcmVkTm9kZSkgeG1sU3RyICs9IHRhZ1N0YXJ0ICsgXCI+XCI7XG4gICAgICAgICAgICBlbHNlIHhtbFN0ciArPSB0YWdTdGFydCArIFwiLz5cIjtcbiAgICAgICAgfSBlbHNlIGlmICgoIXRhZ1ZhbHVlIHx8IHRhZ1ZhbHVlLmxlbmd0aCA9PT0gMCkgJiYgb3B0aW9ucy5zdXBwcmVzc0VtcHR5Tm9kZSkge1xuICAgICAgICAgICAgeG1sU3RyICs9IHRhZ1N0YXJ0ICsgXCIvPlwiO1xuICAgICAgICB9IGVsc2UgaWYgKHRhZ1ZhbHVlICYmIHRhZ1ZhbHVlLmVuZHNXaXRoKFwiPlwiKSkge1xuICAgICAgICAgICAgeG1sU3RyICs9IHRhZ1N0YXJ0ICsgYD4ke3RhZ1ZhbHVlfSR7aW5kZW50YXRpb259PC8ke3RhZ05hbWV9PmA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB4bWxTdHIgKz0gdGFnU3RhcnQgKyBcIj5cIjtcbiAgICAgICAgICAgIGlmICh0YWdWYWx1ZSAmJiBpbmRlbnRhdGlvbiAhPT0gXCJcIiAmJiAodGFnVmFsdWUuaW5jbHVkZXMoXCIvPlwiKSB8fCB0YWdWYWx1ZS5pbmNsdWRlcyhcIjwvXCIpKSkge1xuICAgICAgICAgICAgICAgIHhtbFN0ciArPSBpbmRlbnRhdGlvbiArIG9wdGlvbnMuaW5kZW50QnkgKyB0YWdWYWx1ZSArIGluZGVudGF0aW9uO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB4bWxTdHIgKz0gdGFnVmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB4bWxTdHIgKz0gYDwvJHt0YWdOYW1lfT5gO1xuICAgICAgICB9XG4gICAgICAgIGlzUHJldmlvdXNFbGVtZW50VGFnID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4geG1sU3RyO1xufVxuXG5mdW5jdGlvbiBwcm9wTmFtZShvYmopIHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgaWYoIW9iai5oYXNPd25Qcm9wZXJ0eShrZXkpKSBjb250aW51ZTtcbiAgICAgICAgaWYgKGtleSAhPT0gXCI6QFwiKSByZXR1cm4ga2V5O1xuICAgIH1cbn1cblxuZnVuY3Rpb24gYXR0cl90b19zdHIoYXR0ck1hcCwgb3B0aW9ucykge1xuICAgIGxldCBhdHRyU3RyID0gXCJcIjtcbiAgICBpZiAoYXR0ck1hcCAmJiAhb3B0aW9ucy5pZ25vcmVBdHRyaWJ1dGVzKSB7XG4gICAgICAgIGZvciAobGV0IGF0dHIgaW4gYXR0ck1hcCkge1xuICAgICAgICAgICAgaWYoIWF0dHJNYXAuaGFzT3duUHJvcGVydHkoYXR0cikpIGNvbnRpbnVlO1xuICAgICAgICAgICAgbGV0IGF0dHJWYWwgPSBvcHRpb25zLmF0dHJpYnV0ZVZhbHVlUHJvY2Vzc29yKGF0dHIsIGF0dHJNYXBbYXR0cl0pO1xuICAgICAgICAgICAgYXR0clZhbCA9IHJlcGxhY2VFbnRpdGllc1ZhbHVlKGF0dHJWYWwsIG9wdGlvbnMpO1xuICAgICAgICAgICAgaWYgKGF0dHJWYWwgPT09IHRydWUgJiYgb3B0aW9ucy5zdXBwcmVzc0Jvb2xlYW5BdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICAgICAgYXR0clN0ciArPSBgICR7YXR0ci5zdWJzdHIob3B0aW9ucy5hdHRyaWJ1dGVOYW1lUHJlZml4Lmxlbmd0aCl9YDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYXR0clN0ciArPSBgICR7YXR0ci5zdWJzdHIob3B0aW9ucy5hdHRyaWJ1dGVOYW1lUHJlZml4Lmxlbmd0aCl9PVwiJHthdHRyVmFsfVwiYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYXR0clN0cjtcbn1cblxuZnVuY3Rpb24gaXNTdG9wTm9kZShqUGF0aCwgb3B0aW9ucykge1xuICAgIGpQYXRoID0galBhdGguc3Vic3RyKDAsIGpQYXRoLmxlbmd0aCAtIG9wdGlvbnMudGV4dE5vZGVOYW1lLmxlbmd0aCAtIDEpO1xuICAgIGxldCB0YWdOYW1lID0galBhdGguc3Vic3RyKGpQYXRoLmxhc3RJbmRleE9mKFwiLlwiKSArIDEpO1xuICAgIGZvciAobGV0IGluZGV4IGluIG9wdGlvbnMuc3RvcE5vZGVzKSB7XG4gICAgICAgIGlmIChvcHRpb25zLnN0b3BOb2Rlc1tpbmRleF0gPT09IGpQYXRoIHx8IG9wdGlvbnMuc3RvcE5vZGVzW2luZGV4XSA9PT0gXCIqLlwiICsgdGFnTmFtZSkgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZUVudGl0aWVzVmFsdWUodGV4dFZhbHVlLCBvcHRpb25zKSB7XG4gICAgaWYgKHRleHRWYWx1ZSAmJiB0ZXh0VmFsdWUubGVuZ3RoID4gMCAmJiBvcHRpb25zLnByb2Nlc3NFbnRpdGllcykge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMuZW50aXRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGVudGl0eSA9IG9wdGlvbnMuZW50aXRpZXNbaV07XG4gICAgICAgICAgICB0ZXh0VmFsdWUgPSB0ZXh0VmFsdWUucmVwbGFjZShlbnRpdHkucmVnZXgsIGVudGl0eS52YWwpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0ZXh0VmFsdWU7XG59XG5tb2R1bGUuZXhwb3J0cyA9IHRvWG1sO1xuIiwKICAgICIndXNlIHN0cmljdCc7XG4vL3BhcnNlIEVtcHR5IE5vZGUgYXMgc2VsZiBjbG9zaW5nIG5vZGVcbmNvbnN0IGJ1aWxkRnJvbU9yZGVyZWRKcyA9IHJlcXVpcmUoJy4vb3JkZXJlZEpzMlhtbCcpO1xuY29uc3QgZ2V0SWdub3JlQXR0cmlidXRlc0ZuID0gcmVxdWlyZSgnLi4vaWdub3JlQXR0cmlidXRlcycpXG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xuICBhdHRyaWJ1dGVOYW1lUHJlZml4OiAnQF8nLFxuICBhdHRyaWJ1dGVzR3JvdXBOYW1lOiBmYWxzZSxcbiAgdGV4dE5vZGVOYW1lOiAnI3RleHQnLFxuICBpZ25vcmVBdHRyaWJ1dGVzOiB0cnVlLFxuICBjZGF0YVByb3BOYW1lOiBmYWxzZSxcbiAgZm9ybWF0OiBmYWxzZSxcbiAgaW5kZW50Qnk6ICcgICcsXG4gIHN1cHByZXNzRW1wdHlOb2RlOiBmYWxzZSxcbiAgc3VwcHJlc3NVbnBhaXJlZE5vZGU6IHRydWUsXG4gIHN1cHByZXNzQm9vbGVhbkF0dHJpYnV0ZXM6IHRydWUsXG4gIHRhZ1ZhbHVlUHJvY2Vzc29yOiBmdW5jdGlvbihrZXksIGEpIHtcbiAgICByZXR1cm4gYTtcbiAgfSxcbiAgYXR0cmlidXRlVmFsdWVQcm9jZXNzb3I6IGZ1bmN0aW9uKGF0dHJOYW1lLCBhKSB7XG4gICAgcmV0dXJuIGE7XG4gIH0sXG4gIHByZXNlcnZlT3JkZXI6IGZhbHNlLFxuICBjb21tZW50UHJvcE5hbWU6IGZhbHNlLFxuICB1bnBhaXJlZFRhZ3M6IFtdLFxuICBlbnRpdGllczogW1xuICAgIHsgcmVnZXg6IG5ldyBSZWdFeHAoXCImXCIsIFwiZ1wiKSwgdmFsOiBcIiZhbXA7XCIgfSwvL2l0IG11c3QgYmUgb24gdG9wXG4gICAgeyByZWdleDogbmV3IFJlZ0V4cChcIj5cIiwgXCJnXCIpLCB2YWw6IFwiJmd0O1wiIH0sXG4gICAgeyByZWdleDogbmV3IFJlZ0V4cChcIjxcIiwgXCJnXCIpLCB2YWw6IFwiJmx0O1wiIH0sXG4gICAgeyByZWdleDogbmV3IFJlZ0V4cChcIlxcJ1wiLCBcImdcIiksIHZhbDogXCImYXBvcztcIiB9LFxuICAgIHsgcmVnZXg6IG5ldyBSZWdFeHAoXCJcXFwiXCIsIFwiZ1wiKSwgdmFsOiBcIiZxdW90O1wiIH1cbiAgXSxcbiAgcHJvY2Vzc0VudGl0aWVzOiB0cnVlLFxuICBzdG9wTm9kZXM6IFtdLFxuICAvLyB0cmFuc2Zvcm1UYWdOYW1lOiBmYWxzZSxcbiAgLy8gdHJhbnNmb3JtQXR0cmlidXRlTmFtZTogZmFsc2UsXG4gIG9uZUxpc3RHcm91cDogZmFsc2Vcbn07XG5cbmZ1bmN0aW9uIEJ1aWxkZXIob3B0aW9ucykge1xuICB0aGlzLm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0T3B0aW9ucywgb3B0aW9ucyk7XG4gIGlmICh0aGlzLm9wdGlvbnMuaWdub3JlQXR0cmlidXRlcyA9PT0gdHJ1ZSB8fCB0aGlzLm9wdGlvbnMuYXR0cmlidXRlc0dyb3VwTmFtZSkge1xuICAgIHRoaXMuaXNBdHRyaWJ1dGUgPSBmdW5jdGlvbigvKmEqLykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5pZ25vcmVBdHRyaWJ1dGVzRm4gPSBnZXRJZ25vcmVBdHRyaWJ1dGVzRm4odGhpcy5vcHRpb25zLmlnbm9yZUF0dHJpYnV0ZXMpXG4gICAgdGhpcy5hdHRyUHJlZml4TGVuID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZU5hbWVQcmVmaXgubGVuZ3RoO1xuICAgIHRoaXMuaXNBdHRyaWJ1dGUgPSBpc0F0dHJpYnV0ZTtcbiAgfVxuXG4gIHRoaXMucHJvY2Vzc1RleHRPck9iak5vZGUgPSBwcm9jZXNzVGV4dE9yT2JqTm9kZVxuXG4gIGlmICh0aGlzLm9wdGlvbnMuZm9ybWF0KSB7XG4gICAgdGhpcy5pbmRlbnRhdGUgPSBpbmRlbnRhdGU7XG4gICAgdGhpcy50YWdFbmRDaGFyID0gJz5cXG4nO1xuICAgIHRoaXMubmV3TGluZSA9ICdcXG4nO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuaW5kZW50YXRlID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfTtcbiAgICB0aGlzLnRhZ0VuZENoYXIgPSAnPic7XG4gICAgdGhpcy5uZXdMaW5lID0gJyc7XG4gIH1cbn1cblxuQnVpbGRlci5wcm90b3R5cGUuYnVpbGQgPSBmdW5jdGlvbihqT2JqKSB7XG4gIGlmKHRoaXMub3B0aW9ucy5wcmVzZXJ2ZU9yZGVyKXtcbiAgICByZXR1cm4gYnVpbGRGcm9tT3JkZXJlZEpzKGpPYmosIHRoaXMub3B0aW9ucyk7XG4gIH1lbHNlIHtcbiAgICBpZihBcnJheS5pc0FycmF5KGpPYmopICYmIHRoaXMub3B0aW9ucy5hcnJheU5vZGVOYW1lICYmIHRoaXMub3B0aW9ucy5hcnJheU5vZGVOYW1lLmxlbmd0aCA+IDEpe1xuICAgICAgak9iaiA9IHtcbiAgICAgICAgW3RoaXMub3B0aW9ucy5hcnJheU5vZGVOYW1lXSA6IGpPYmpcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuajJ4KGpPYmosIDAsIFtdKS52YWw7XG4gIH1cbn07XG5cbkJ1aWxkZXIucHJvdG90eXBlLmoyeCA9IGZ1bmN0aW9uKGpPYmosIGxldmVsLCBhalBhdGgpIHtcbiAgbGV0IGF0dHJTdHIgPSAnJztcbiAgbGV0IHZhbCA9ICcnO1xuICBjb25zdCBqUGF0aCA9IGFqUGF0aC5qb2luKCcuJylcbiAgZm9yIChsZXQga2V5IGluIGpPYmopIHtcbiAgICBpZighT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGpPYmosIGtleSkpIGNvbnRpbnVlO1xuICAgIGlmICh0eXBlb2Ygak9ialtrZXldID09PSAndW5kZWZpbmVkJykge1xuICAgICAgLy8gc3VwcmVzcyB1bmRlZmluZWQgbm9kZSBvbmx5IGlmIGl0IGlzIG5vdCBhbiBhdHRyaWJ1dGVcbiAgICAgIGlmICh0aGlzLmlzQXR0cmlidXRlKGtleSkpIHtcbiAgICAgICAgdmFsICs9ICcnO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoak9ialtrZXldID09PSBudWxsKSB7XG4gICAgICAvLyBudWxsIGF0dHJpYnV0ZSBzaG91bGQgYmUgaWdub3JlZCBieSB0aGUgYXR0cmlidXRlIGxpc3QsIGJ1dCBzaG91bGQgbm90IGNhdXNlIHRoZSB0YWcgY2xvc2luZ1xuICAgICAgaWYgKHRoaXMuaXNBdHRyaWJ1dGUoa2V5KSkge1xuICAgICAgICB2YWwgKz0gJyc7XG4gICAgICB9IGVsc2UgaWYgKGtleVswXSA9PT0gJz8nKSB7XG4gICAgICAgIHZhbCArPSB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyAnPCcgKyBrZXkgKyAnPycgKyB0aGlzLnRhZ0VuZENoYXI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWwgKz0gdGhpcy5pbmRlbnRhdGUobGV2ZWwpICsgJzwnICsga2V5ICsgJy8nICsgdGhpcy50YWdFbmRDaGFyO1xuICAgICAgfVxuICAgICAgLy8gdmFsICs9IHRoaXMuaW5kZW50YXRlKGxldmVsKSArICc8JyArIGtleSArICcvJyArIHRoaXMudGFnRW5kQ2hhcjtcbiAgICB9IGVsc2UgaWYgKGpPYmpba2V5XSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgIHZhbCArPSB0aGlzLmJ1aWxkVGV4dFZhbE5vZGUoak9ialtrZXldLCBrZXksICcnLCBsZXZlbCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygak9ialtrZXldICE9PSAnb2JqZWN0Jykge1xuICAgICAgLy9wcmVtaXRpdmUgdHlwZVxuICAgICAgY29uc3QgYXR0ciA9IHRoaXMuaXNBdHRyaWJ1dGUoa2V5KTtcbiAgICAgIGlmIChhdHRyICYmICF0aGlzLmlnbm9yZUF0dHJpYnV0ZXNGbihhdHRyLCBqUGF0aCkpIHtcbiAgICAgICAgYXR0clN0ciArPSB0aGlzLmJ1aWxkQXR0clBhaXJTdHIoYXR0ciwgJycgKyBqT2JqW2tleV0pO1xuICAgICAgfSBlbHNlIGlmICghYXR0cikge1xuICAgICAgICAvL3RhZyB2YWx1ZVxuICAgICAgICBpZiAoa2V5ID09PSB0aGlzLm9wdGlvbnMudGV4dE5vZGVOYW1lKSB7XG4gICAgICAgICAgbGV0IG5ld3ZhbCA9IHRoaXMub3B0aW9ucy50YWdWYWx1ZVByb2Nlc3NvcihrZXksICcnICsgak9ialtrZXldKTtcbiAgICAgICAgICB2YWwgKz0gdGhpcy5yZXBsYWNlRW50aXRpZXNWYWx1ZShuZXd2YWwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbCArPSB0aGlzLmJ1aWxkVGV4dFZhbE5vZGUoak9ialtrZXldLCBrZXksICcnLCBsZXZlbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoak9ialtrZXldKSkge1xuICAgICAgLy9yZXBlYXRlZCBub2Rlc1xuICAgICAgY29uc3QgYXJyTGVuID0gak9ialtrZXldLmxlbmd0aDtcbiAgICAgIGxldCBsaXN0VGFnVmFsID0gXCJcIjtcbiAgICAgIGxldCBsaXN0VGFnQXR0ciA9IFwiXCI7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGFyckxlbjsgaisrKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBqT2JqW2tleV1bal07XG4gICAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAvLyBzdXByZXNzIHVuZGVmaW5lZCBub2RlXG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbSA9PT0gbnVsbCkge1xuICAgICAgICAgIGlmKGtleVswXSA9PT0gXCI/XCIpIHZhbCArPSB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyAnPCcgKyBrZXkgKyAnPycgKyB0aGlzLnRhZ0VuZENoYXI7XG4gICAgICAgICAgZWxzZSB2YWwgKz0gdGhpcy5pbmRlbnRhdGUobGV2ZWwpICsgJzwnICsga2V5ICsgJy8nICsgdGhpcy50YWdFbmRDaGFyO1xuICAgICAgICAgIC8vIHZhbCArPSB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyAnPCcgKyBrZXkgKyAnLycgKyB0aGlzLnRhZ0VuZENoYXI7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGl0ZW0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgaWYodGhpcy5vcHRpb25zLm9uZUxpc3RHcm91cCl7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmoyeChpdGVtLCBsZXZlbCArIDEsIGFqUGF0aC5jb25jYXQoa2V5KSk7XG4gICAgICAgICAgICBsaXN0VGFnVmFsICs9IHJlc3VsdC52YWw7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmF0dHJpYnV0ZXNHcm91cE5hbWUgJiYgaXRlbS5oYXNPd25Qcm9wZXJ0eSh0aGlzLm9wdGlvbnMuYXR0cmlidXRlc0dyb3VwTmFtZSkpIHtcbiAgICAgICAgICAgICAgbGlzdFRhZ0F0dHIgKz0gcmVzdWx0LmF0dHJTdHJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIGxpc3RUYWdWYWwgKz0gdGhpcy5wcm9jZXNzVGV4dE9yT2JqTm9kZShpdGVtLCBrZXksIGxldmVsLCBhalBhdGgpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMub25lTGlzdEdyb3VwKSB7XG4gICAgICAgICAgICBsZXQgdGV4dFZhbHVlID0gdGhpcy5vcHRpb25zLnRhZ1ZhbHVlUHJvY2Vzc29yKGtleSwgaXRlbSk7XG4gICAgICAgICAgICB0ZXh0VmFsdWUgPSB0aGlzLnJlcGxhY2VFbnRpdGllc1ZhbHVlKHRleHRWYWx1ZSk7XG4gICAgICAgICAgICBsaXN0VGFnVmFsICs9IHRleHRWYWx1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGlzdFRhZ1ZhbCArPSB0aGlzLmJ1aWxkVGV4dFZhbE5vZGUoaXRlbSwga2V5LCAnJywgbGV2ZWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYodGhpcy5vcHRpb25zLm9uZUxpc3RHcm91cCl7XG4gICAgICAgIGxpc3RUYWdWYWwgPSB0aGlzLmJ1aWxkT2JqZWN0Tm9kZShsaXN0VGFnVmFsLCBrZXksIGxpc3RUYWdBdHRyLCBsZXZlbCk7XG4gICAgICB9XG4gICAgICB2YWwgKz0gbGlzdFRhZ1ZhbDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy9uZXN0ZWQgbm9kZVxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVzR3JvdXBOYW1lICYmIGtleSA9PT0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZXNHcm91cE5hbWUpIHtcbiAgICAgICAgY29uc3QgS3MgPSBPYmplY3Qua2V5cyhqT2JqW2tleV0pO1xuICAgICAgICBjb25zdCBMID0gS3MubGVuZ3RoO1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IEw7IGorKykge1xuICAgICAgICAgIGF0dHJTdHIgKz0gdGhpcy5idWlsZEF0dHJQYWlyU3RyKEtzW2pdLCAnJyArIGpPYmpba2V5XVtLc1tqXV0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWwgKz0gdGhpcy5wcm9jZXNzVGV4dE9yT2JqTm9kZShqT2JqW2tleV0sIGtleSwgbGV2ZWwsIGFqUGF0aClcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHthdHRyU3RyOiBhdHRyU3RyLCB2YWw6IHZhbH07XG59O1xuXG5CdWlsZGVyLnByb3RvdHlwZS5idWlsZEF0dHJQYWlyU3RyID0gZnVuY3Rpb24oYXR0ck5hbWUsIHZhbCl7XG4gIHZhbCA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVWYWx1ZVByb2Nlc3NvcihhdHRyTmFtZSwgJycgKyB2YWwpO1xuICB2YWwgPSB0aGlzLnJlcGxhY2VFbnRpdGllc1ZhbHVlKHZhbCk7XG4gIGlmICh0aGlzLm9wdGlvbnMuc3VwcHJlc3NCb29sZWFuQXR0cmlidXRlcyAmJiB2YWwgPT09IFwidHJ1ZVwiKSB7XG4gICAgcmV0dXJuICcgJyArIGF0dHJOYW1lO1xuICB9IGVsc2UgcmV0dXJuICcgJyArIGF0dHJOYW1lICsgJz1cIicgKyB2YWwgKyAnXCInO1xufVxuXG5mdW5jdGlvbiBwcm9jZXNzVGV4dE9yT2JqTm9kZSAob2JqZWN0LCBrZXksIGxldmVsLCBhalBhdGgpIHtcbiAgY29uc3QgcmVzdWx0ID0gdGhpcy5qMngob2JqZWN0LCBsZXZlbCArIDEsIGFqUGF0aC5jb25jYXQoa2V5KSk7XG4gIGlmIChvYmplY3RbdGhpcy5vcHRpb25zLnRleHROb2RlTmFtZV0gIT09IHVuZGVmaW5lZCAmJiBPYmplY3Qua2V5cyhvYmplY3QpLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiB0aGlzLmJ1aWxkVGV4dFZhbE5vZGUob2JqZWN0W3RoaXMub3B0aW9ucy50ZXh0Tm9kZU5hbWVdLCBrZXksIHJlc3VsdC5hdHRyU3RyLCBsZXZlbCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHRoaXMuYnVpbGRPYmplY3ROb2RlKHJlc3VsdC52YWwsIGtleSwgcmVzdWx0LmF0dHJTdHIsIGxldmVsKTtcbiAgfVxufVxuXG5CdWlsZGVyLnByb3RvdHlwZS5idWlsZE9iamVjdE5vZGUgPSBmdW5jdGlvbih2YWwsIGtleSwgYXR0clN0ciwgbGV2ZWwpIHtcbiAgaWYodmFsID09PSBcIlwiKXtcbiAgICBpZihrZXlbMF0gPT09IFwiP1wiKSByZXR1cm4gIHRoaXMuaW5kZW50YXRlKGxldmVsKSArICc8JyArIGtleSArIGF0dHJTdHIrICc/JyArIHRoaXMudGFnRW5kQ2hhcjtcbiAgICBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyAnPCcgKyBrZXkgKyBhdHRyU3RyICsgdGhpcy5jbG9zZVRhZyhrZXkpICsgdGhpcy50YWdFbmRDaGFyO1xuICAgIH1cbiAgfWVsc2V7XG5cbiAgICBsZXQgdGFnRW5kRXhwID0gJzwvJyArIGtleSArIHRoaXMudGFnRW5kQ2hhcjtcbiAgICBsZXQgcGlDbG9zaW5nQ2hhciA9IFwiXCI7XG4gICAgXG4gICAgaWYoa2V5WzBdID09PSBcIj9cIikge1xuICAgICAgcGlDbG9zaW5nQ2hhciA9IFwiP1wiO1xuICAgICAgdGFnRW5kRXhwID0gXCJcIjtcbiAgICB9XG4gIFxuICAgIC8vIGF0dHJTdHIgaXMgYW4gZW1wdHkgc3RyaW5nIGluIGNhc2UgdGhlIGF0dHJpYnV0ZSBjYW1lIGFzIHVuZGVmaW5lZCBvciBudWxsXG4gICAgaWYgKChhdHRyU3RyIHx8IGF0dHJTdHIgPT09ICcnKSAmJiB2YWwuaW5kZXhPZignPCcpID09PSAtMSkge1xuICAgICAgcmV0dXJuICggdGhpcy5pbmRlbnRhdGUobGV2ZWwpICsgJzwnICsgIGtleSArIGF0dHJTdHIgKyBwaUNsb3NpbmdDaGFyICsgJz4nICsgdmFsICsgdGFnRW5kRXhwICk7XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMuY29tbWVudFByb3BOYW1lICE9PSBmYWxzZSAmJiBrZXkgPT09IHRoaXMub3B0aW9ucy5jb21tZW50UHJvcE5hbWUgJiYgcGlDbG9zaW5nQ2hhci5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyBgPCEtLSR7dmFsfS0tPmAgKyB0aGlzLm5ld0xpbmU7XG4gICAgfWVsc2Uge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5pbmRlbnRhdGUobGV2ZWwpICsgJzwnICsga2V5ICsgYXR0clN0ciArIHBpQ2xvc2luZ0NoYXIgKyB0aGlzLnRhZ0VuZENoYXIgK1xuICAgICAgICB2YWwgK1xuICAgICAgICB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyB0YWdFbmRFeHAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuQnVpbGRlci5wcm90b3R5cGUuY2xvc2VUYWcgPSBmdW5jdGlvbihrZXkpe1xuICBsZXQgY2xvc2VUYWcgPSBcIlwiO1xuICBpZih0aGlzLm9wdGlvbnMudW5wYWlyZWRUYWdzLmluZGV4T2Yoa2V5KSAhPT0gLTEpeyAvL3VucGFpcmVkXG4gICAgaWYoIXRoaXMub3B0aW9ucy5zdXBwcmVzc1VucGFpcmVkTm9kZSkgY2xvc2VUYWcgPSBcIi9cIlxuICB9ZWxzZSBpZih0aGlzLm9wdGlvbnMuc3VwcHJlc3NFbXB0eU5vZGUpeyAvL2VtcHR5XG4gICAgY2xvc2VUYWcgPSBcIi9cIjtcbiAgfWVsc2V7XG4gICAgY2xvc2VUYWcgPSBgPjwvJHtrZXl9YFxuICB9XG4gIHJldHVybiBjbG9zZVRhZztcbn1cblxuZnVuY3Rpb24gYnVpbGRFbXB0eU9iak5vZGUodmFsLCBrZXksIGF0dHJTdHIsIGxldmVsKSB7XG4gIGlmICh2YWwgIT09ICcnKSB7XG4gICAgcmV0dXJuIHRoaXMuYnVpbGRPYmplY3ROb2RlKHZhbCwga2V5LCBhdHRyU3RyLCBsZXZlbCk7XG4gIH0gZWxzZSB7XG4gICAgaWYoa2V5WzBdID09PSBcIj9cIikgcmV0dXJuICB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyAnPCcgKyBrZXkgKyBhdHRyU3RyKyAnPycgKyB0aGlzLnRhZ0VuZENoYXI7XG4gICAgZWxzZSB7XG4gICAgICByZXR1cm4gIHRoaXMuaW5kZW50YXRlKGxldmVsKSArICc8JyArIGtleSArIGF0dHJTdHIgKyAnLycgKyB0aGlzLnRhZ0VuZENoYXI7XG4gICAgICAvLyByZXR1cm4gdGhpcy5idWlsZFRhZ1N0cihsZXZlbCxrZXksIGF0dHJTdHIpO1xuICAgIH1cbiAgfVxufVxuXG5CdWlsZGVyLnByb3RvdHlwZS5idWlsZFRleHRWYWxOb2RlID0gZnVuY3Rpb24odmFsLCBrZXksIGF0dHJTdHIsIGxldmVsKSB7XG4gIGlmICh0aGlzLm9wdGlvbnMuY2RhdGFQcm9wTmFtZSAhPT0gZmFsc2UgJiYga2V5ID09PSB0aGlzLm9wdGlvbnMuY2RhdGFQcm9wTmFtZSkge1xuICAgIHJldHVybiB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyBgPCFbQ0RBVEFbJHt2YWx9XV0+YCArICB0aGlzLm5ld0xpbmU7XG4gIH1lbHNlIGlmICh0aGlzLm9wdGlvbnMuY29tbWVudFByb3BOYW1lICE9PSBmYWxzZSAmJiBrZXkgPT09IHRoaXMub3B0aW9ucy5jb21tZW50UHJvcE5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5pbmRlbnRhdGUobGV2ZWwpICsgYDwhLS0ke3ZhbH0tLT5gICsgIHRoaXMubmV3TGluZTtcbiAgfWVsc2UgaWYoa2V5WzBdID09PSBcIj9cIikgey8vUEkgdGFnXG4gICAgcmV0dXJuICB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyAnPCcgKyBrZXkgKyBhdHRyU3RyKyAnPycgKyB0aGlzLnRhZ0VuZENoYXI7IFxuICB9ZWxzZXtcbiAgICBsZXQgdGV4dFZhbHVlID0gdGhpcy5vcHRpb25zLnRhZ1ZhbHVlUHJvY2Vzc29yKGtleSwgdmFsKTtcbiAgICB0ZXh0VmFsdWUgPSB0aGlzLnJlcGxhY2VFbnRpdGllc1ZhbHVlKHRleHRWYWx1ZSk7XG4gIFxuICAgIGlmKCB0ZXh0VmFsdWUgPT09ICcnKXtcbiAgICAgIHJldHVybiB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyAnPCcgKyBrZXkgKyBhdHRyU3RyICsgdGhpcy5jbG9zZVRhZyhrZXkpICsgdGhpcy50YWdFbmRDaGFyO1xuICAgIH1lbHNle1xuICAgICAgcmV0dXJuIHRoaXMuaW5kZW50YXRlKGxldmVsKSArICc8JyArIGtleSArIGF0dHJTdHIgKyAnPicgK1xuICAgICAgICAgdGV4dFZhbHVlICtcbiAgICAgICAgJzwvJyArIGtleSArIHRoaXMudGFnRW5kQ2hhcjtcbiAgICB9XG4gIH1cbn1cblxuQnVpbGRlci5wcm90b3R5cGUucmVwbGFjZUVudGl0aWVzVmFsdWUgPSBmdW5jdGlvbih0ZXh0VmFsdWUpe1xuICBpZih0ZXh0VmFsdWUgJiYgdGV4dFZhbHVlLmxlbmd0aCA+IDAgJiYgdGhpcy5vcHRpb25zLnByb2Nlc3NFbnRpdGllcyl7XG4gICAgZm9yIChsZXQgaT0wOyBpPHRoaXMub3B0aW9ucy5lbnRpdGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZW50aXR5ID0gdGhpcy5vcHRpb25zLmVudGl0aWVzW2ldO1xuICAgICAgdGV4dFZhbHVlID0gdGV4dFZhbHVlLnJlcGxhY2UoZW50aXR5LnJlZ2V4LCBlbnRpdHkudmFsKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRleHRWYWx1ZTtcbn1cblxuZnVuY3Rpb24gaW5kZW50YXRlKGxldmVsKSB7XG4gIHJldHVybiB0aGlzLm9wdGlvbnMuaW5kZW50QnkucmVwZWF0KGxldmVsKTtcbn1cblxuZnVuY3Rpb24gaXNBdHRyaWJ1dGUobmFtZSAvKiwgb3B0aW9ucyovKSB7XG4gIGlmIChuYW1lLnN0YXJ0c1dpdGgodGhpcy5vcHRpb25zLmF0dHJpYnV0ZU5hbWVQcmVmaXgpICYmIG5hbWUgIT09IHRoaXMub3B0aW9ucy50ZXh0Tm9kZU5hbWUpIHtcbiAgICByZXR1cm4gbmFtZS5zdWJzdHIodGhpcy5hdHRyUHJlZml4TGVuKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBCdWlsZGVyO1xuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbmNvbnN0IHZhbGlkYXRvciA9IHJlcXVpcmUoJy4vdmFsaWRhdG9yJyk7XG5jb25zdCBYTUxQYXJzZXIgPSByZXF1aXJlKCcuL3htbHBhcnNlci9YTUxQYXJzZXInKTtcbmNvbnN0IFhNTEJ1aWxkZXIgPSByZXF1aXJlKCcuL3htbGJ1aWxkZXIvanNvbjJ4bWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFhNTFBhcnNlcjogWE1MUGFyc2VyLFxuICBYTUxWYWxpZGF0b3I6IHZhbGlkYXRvcixcbiAgWE1MQnVpbGRlcjogWE1MQnVpbGRlclxufSIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuWE1MX0NIQVJLRVkgPSBleHBvcnRzLlhNTF9BVFRSS0VZID0gdm9pZCAwO1xuLyoqXG4gKiBEZWZhdWx0IGtleSB1c2VkIHRvIGFjY2VzcyB0aGUgWE1MIGF0dHJpYnV0ZXMuXG4gKi9cbmV4cG9ydHMuWE1MX0FUVFJLRVkgPSBcIiRcIjtcbi8qKlxuICogRGVmYXVsdCBrZXkgdXNlZCB0byBhY2Nlc3MgdGhlIFhNTCB2YWx1ZSBjb250ZW50LlxuICovXG5leHBvcnRzLlhNTF9DSEFSS0VZID0gXCJfXCI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD14bWwuY29tbW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc3RyaW5naWZ5WE1MID0gc3RyaW5naWZ5WE1MO1xuZXhwb3J0cy5wYXJzZVhNTCA9IHBhcnNlWE1MO1xuY29uc3QgZmFzdF94bWxfcGFyc2VyXzEgPSByZXF1aXJlKFwiZmFzdC14bWwtcGFyc2VyXCIpO1xuY29uc3QgeG1sX2NvbW1vbl9qc18xID0gcmVxdWlyZShcIi4veG1sLmNvbW1vbi5qc1wiKTtcbmZ1bmN0aW9uIGdldENvbW1vbk9wdGlvbnMob3B0aW9ucykge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4ge1xuICAgICAgICBhdHRyaWJ1dGVzR3JvdXBOYW1lOiB4bWxfY29tbW9uX2pzXzEuWE1MX0FUVFJLRVksXG4gICAgICAgIHRleHROb2RlTmFtZTogKF9hID0gb3B0aW9ucy54bWxDaGFyS2V5KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB4bWxfY29tbW9uX2pzXzEuWE1MX0NIQVJLRVksXG4gICAgICAgIGlnbm9yZUF0dHJpYnV0ZXM6IGZhbHNlLFxuICAgICAgICBzdXBwcmVzc0Jvb2xlYW5BdHRyaWJ1dGVzOiBmYWxzZSxcbiAgICB9O1xufVxuZnVuY3Rpb24gZ2V0U2VyaWFsaXplck9wdGlvbnMob3B0aW9ucyA9IHt9KSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBnZXRDb21tb25PcHRpb25zKG9wdGlvbnMpKSwgeyBhdHRyaWJ1dGVOYW1lUHJlZml4OiBcIkBfXCIsIGZvcm1hdDogdHJ1ZSwgc3VwcHJlc3NFbXB0eU5vZGU6IHRydWUsIGluZGVudEJ5OiBcIlwiLCByb290Tm9kZU5hbWU6IChfYSA9IG9wdGlvbnMucm9vdE5hbWUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFwicm9vdFwiLCBjZGF0YVByb3BOYW1lOiAoX2IgPSBvcHRpb25zLmNkYXRhUHJvcE5hbWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IFwiX19jZGF0YVwiIH0pO1xufVxuZnVuY3Rpb24gZ2V0UGFyc2VyT3B0aW9ucyhvcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBnZXRDb21tb25PcHRpb25zKG9wdGlvbnMpKSwgeyBwYXJzZUF0dHJpYnV0ZVZhbHVlOiBmYWxzZSwgcGFyc2VUYWdWYWx1ZTogZmFsc2UsIGF0dHJpYnV0ZU5hbWVQcmVmaXg6IFwiXCIsIHN0b3BOb2Rlczogb3B0aW9ucy5zdG9wTm9kZXMsIHByb2Nlc3NFbnRpdGllczogdHJ1ZSB9KTtcbn1cbi8qKlxuICogQ29udmVydHMgZ2l2ZW4gSlNPTiBvYmplY3QgdG8gWE1MIHN0cmluZ1xuICogQHBhcmFtIG9iaiAtIEpTT04gb2JqZWN0IHRvIGJlIGNvbnZlcnRlZCBpbnRvIFhNTCBzdHJpbmdcbiAqIEBwYXJhbSBvcHRzIC0gT3B0aW9ucyB0aGF0IGdvdmVybiB0aGUgWE1MIGJ1aWxkaW5nIG9mIGdpdmVuIEpTT04gb2JqZWN0XG4gKiBgcm9vdE5hbWVgIGluZGljYXRlcyB0aGUgbmFtZSBvZiB0aGUgcm9vdCBlbGVtZW50IGluIHRoZSByZXN1bHRpbmcgWE1MXG4gKi9cbmZ1bmN0aW9uIHN0cmluZ2lmeVhNTChvYmosIG9wdHMgPSB7fSkge1xuICAgIGNvbnN0IHBhcnNlck9wdGlvbnMgPSBnZXRTZXJpYWxpemVyT3B0aW9ucyhvcHRzKTtcbiAgICBjb25zdCBqMnggPSBuZXcgZmFzdF94bWxfcGFyc2VyXzEuWE1MQnVpbGRlcihwYXJzZXJPcHRpb25zKTtcbiAgICBjb25zdCBub2RlID0geyBbcGFyc2VyT3B0aW9ucy5yb290Tm9kZU5hbWVdOiBvYmogfTtcbiAgICBjb25zdCB4bWxEYXRhID0gajJ4LmJ1aWxkKG5vZGUpO1xuICAgIHJldHVybiBgPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiVVRGLThcIiBzdGFuZGFsb25lPVwieWVzXCI/PiR7eG1sRGF0YX1gLnJlcGxhY2UoL1xcbi9nLCBcIlwiKTtcbn1cbi8qKlxuICogQ29udmVydHMgZ2l2ZW4gWE1MIHN0cmluZyBpbnRvIEpTT05cbiAqIEBwYXJhbSBzdHIgLSBTdHJpbmcgY29udGFpbmluZyB0aGUgWE1MIGNvbnRlbnQgdG8gYmUgcGFyc2VkIGludG8gSlNPTlxuICogQHBhcmFtIG9wdHMgLSBPcHRpb25zIHRoYXQgZ292ZXJuIHRoZSBwYXJzaW5nIG9mIGdpdmVuIHhtbCBzdHJpbmdcbiAqIGBpbmNsdWRlUm9vdGAgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHJvb3QgZWxlbWVudCBpcyB0byBiZSBpbmNsdWRlZCBvciBub3QgaW4gdGhlIG91dHB1dFxuICovXG5hc3luYyBmdW5jdGlvbiBwYXJzZVhNTChzdHIsIG9wdHMgPSB7fSkge1xuICAgIGlmICghc3RyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkRvY3VtZW50IGlzIGVtcHR5XCIpO1xuICAgIH1cbiAgICBjb25zdCB2YWxpZGF0aW9uID0gZmFzdF94bWxfcGFyc2VyXzEuWE1MVmFsaWRhdG9yLnZhbGlkYXRlKHN0cik7XG4gICAgaWYgKHZhbGlkYXRpb24gIT09IHRydWUpIHtcbiAgICAgICAgdGhyb3cgdmFsaWRhdGlvbjtcbiAgICB9XG4gICAgY29uc3QgcGFyc2VyID0gbmV3IGZhc3RfeG1sX3BhcnNlcl8xLlhNTFBhcnNlcihnZXRQYXJzZXJPcHRpb25zKG9wdHMpKTtcbiAgICBjb25zdCBwYXJzZWRYbWwgPSBwYXJzZXIucGFyc2Uoc3RyKTtcbiAgICAvLyBSZW1vdmUgdGhlIDw/eG1sIHZlcnNpb249XCIuLi5cIiA/PiBub2RlLlxuICAgIC8vIFRoaXMgaXMgYSBjaGFuZ2UgaW4gYmVoYXZpb3Igb24gZnhwIHY0LiBJc3N1ZSAjNDI0XG4gICAgaWYgKHBhcnNlZFhtbFtcIj94bWxcIl0pIHtcbiAgICAgICAgZGVsZXRlIHBhcnNlZFhtbFtcIj94bWxcIl07XG4gICAgfVxuICAgIGlmICghb3B0cy5pbmNsdWRlUm9vdCkge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhwYXJzZWRYbWwpKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHBhcnNlZFhtbFtrZXldO1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiA/IE9iamVjdC5hc3NpZ24oe30sIHZhbHVlKSA6IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwYXJzZWRYbWw7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD14bWwuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5YTUxfQ0hBUktFWSA9IGV4cG9ydHMuWE1MX0FUVFJLRVkgPSBleHBvcnRzLnBhcnNlWE1MID0gZXhwb3J0cy5zdHJpbmdpZnlYTUwgPSB2b2lkIDA7XG52YXIgeG1sX2pzXzEgPSByZXF1aXJlKFwiLi94bWwuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdHJpbmdpZnlYTUxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHhtbF9qc18xLnN0cmluZ2lmeVhNTDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInBhcnNlWE1MXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB4bWxfanNfMS5wYXJzZVhNTDsgfSB9KTtcbnZhciB4bWxfY29tbW9uX2pzXzEgPSByZXF1aXJlKFwiLi94bWwuY29tbW9uLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiWE1MX0FUVFJLRVlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHhtbF9jb21tb25fanNfMS5YTUxfQVRUUktFWTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlhNTF9DSEFSS0VZXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB4bWxfY29tbW9uX2pzXzEuWE1MX0NIQVJLRVk7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmxvZ2dlciA9IHZvaWQgMDtcbmNvbnN0IGxvZ2dlcl8xID0gcmVxdWlyZShcIkBhenVyZS9sb2dnZXJcIik7XG4vKipcbiAqIFRoZSBgQGF6dXJlL2xvZ2dlcmAgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBwYWNrYWdlLlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydHMubG9nZ2VyID0gKDAsIGxvZ2dlcl8xLmNyZWF0ZUNsaWVudExvZ2dlcikoXCJjb3JlLWxyb1wiKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxvZ2dlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRlcm1pbmFsU3RhdGVzID0gZXhwb3J0cy5QT0xMX0lOVEVSVkFMX0lOX01TID0gdm9pZCAwO1xuLyoqXG4gKiBUaGUgZGVmYXVsdCB0aW1lIGludGVydmFsIHRvIHdhaXQgYmVmb3JlIHNlbmRpbmcgdGhlIG5leHQgcG9sbGluZyByZXF1ZXN0LlxuICovXG5leHBvcnRzLlBPTExfSU5URVJWQUxfSU5fTVMgPSAyMDAwO1xuLyoqXG4gKiBUaGUgY2xvc2VkIHNldCBvZiB0ZXJtaW5hbCBzdGF0ZXMuXG4gKi9cbmV4cG9ydHMudGVybWluYWxTdGF0ZXMgPSBbXCJzdWNjZWVkZWRcIiwgXCJjYW5jZWxlZFwiLCBcImZhaWxlZFwiXTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0YW50cy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnBvbGxPcGVyYXRpb24gPSBleHBvcnRzLmluaXRPcGVyYXRpb24gPSBleHBvcnRzLmRlc2VyaWFsaXplU3RhdGUgPSB2b2lkIDA7XG5jb25zdCBsb2dnZXJfanNfMSA9IHJlcXVpcmUoXCIuLi9sb2dnZXIuanNcIik7XG5jb25zdCBjb25zdGFudHNfanNfMSA9IHJlcXVpcmUoXCIuL2NvbnN0YW50cy5qc1wiKTtcbi8qKlxuICogRGVzZXJpYWxpemVzIHRoZSBzdGF0ZVxuICovXG5mdW5jdGlvbiBkZXNlcmlhbGl6ZVN0YXRlKHNlcmlhbGl6ZWRTdGF0ZSkge1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKHNlcmlhbGl6ZWRTdGF0ZSkuc3RhdGU7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGRlc2VyaWFsaXplIGlucHV0IHN0YXRlOiAke3NlcmlhbGl6ZWRTdGF0ZX1gKTtcbiAgICB9XG59XG5leHBvcnRzLmRlc2VyaWFsaXplU3RhdGUgPSBkZXNlcmlhbGl6ZVN0YXRlO1xuZnVuY3Rpb24gc2V0U3RhdGVFcnJvcihpbnB1dHMpIHtcbiAgICBjb25zdCB7IHN0YXRlLCBzdGF0ZVByb3h5LCBpc09wZXJhdGlvbkVycm9yIH0gPSBpbnB1dHM7XG4gICAgcmV0dXJuIChlcnJvcikgPT4ge1xuICAgICAgICBpZiAoaXNPcGVyYXRpb25FcnJvcihlcnJvcikpIHtcbiAgICAgICAgICAgIHN0YXRlUHJveHkuc2V0RXJyb3Ioc3RhdGUsIGVycm9yKTtcbiAgICAgICAgICAgIHN0YXRlUHJveHkuc2V0RmFpbGVkKHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICB9O1xufVxuZnVuY3Rpb24gYXBwZW5kUmVhZGFibGVFcnJvck1lc3NhZ2UoY3VycmVudE1lc3NhZ2UsIGlubmVyTWVzc2FnZSkge1xuICAgIGxldCBtZXNzYWdlID0gY3VycmVudE1lc3NhZ2U7XG4gICAgaWYgKG1lc3NhZ2Uuc2xpY2UoLTEpICE9PSBcIi5cIikge1xuICAgICAgICBtZXNzYWdlID0gbWVzc2FnZSArIFwiLlwiO1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZSArIFwiIFwiICsgaW5uZXJNZXNzYWdlO1xufVxuZnVuY3Rpb24gc2ltcGxpZnlFcnJvcihlcnIpIHtcbiAgICBsZXQgbWVzc2FnZSA9IGVyci5tZXNzYWdlO1xuICAgIGxldCBjb2RlID0gZXJyLmNvZGU7XG4gICAgbGV0IGN1ckVyciA9IGVycjtcbiAgICB3aGlsZSAoY3VyRXJyLmlubmVyZXJyb3IpIHtcbiAgICAgICAgY3VyRXJyID0gY3VyRXJyLmlubmVyZXJyb3I7XG4gICAgICAgIGNvZGUgPSBjdXJFcnIuY29kZTtcbiAgICAgICAgbWVzc2FnZSA9IGFwcGVuZFJlYWRhYmxlRXJyb3JNZXNzYWdlKG1lc3NhZ2UsIGN1ckVyci5tZXNzYWdlKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgY29kZSxcbiAgICAgICAgbWVzc2FnZSxcbiAgICB9O1xufVxuZnVuY3Rpb24gcHJvY2Vzc09wZXJhdGlvblN0YXR1cyhyZXN1bHQpIHtcbiAgICBjb25zdCB7IHN0YXRlLCBzdGF0ZVByb3h5LCBzdGF0dXMsIGlzRG9uZSwgcHJvY2Vzc1Jlc3VsdCwgZ2V0RXJyb3IsIHJlc3BvbnNlLCBzZXRFcnJvckFzUmVzdWx0IH0gPSByZXN1bHQ7XG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgICAgY2FzZSBcInN1Y2NlZWRlZFwiOiB7XG4gICAgICAgICAgICBzdGF0ZVByb3h5LnNldFN1Y2NlZWRlZChzdGF0ZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwiZmFpbGVkXCI6IHtcbiAgICAgICAgICAgIGNvbnN0IGVyciA9IGdldEVycm9yID09PSBudWxsIHx8IGdldEVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBnZXRFcnJvcihyZXNwb25zZSk7XG4gICAgICAgICAgICBsZXQgcG9zdGZpeCA9IFwiXCI7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBjb2RlLCBtZXNzYWdlIH0gPSBzaW1wbGlmeUVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgcG9zdGZpeCA9IGAuICR7Y29kZX0uICR7bWVzc2FnZX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZXJyU3RyID0gYFRoZSBsb25nLXJ1bm5pbmcgb3BlcmF0aW9uIGhhcyBmYWlsZWQke3Bvc3RmaXh9YDtcbiAgICAgICAgICAgIHN0YXRlUHJveHkuc2V0RXJyb3Ioc3RhdGUsIG5ldyBFcnJvcihlcnJTdHIpKTtcbiAgICAgICAgICAgIHN0YXRlUHJveHkuc2V0RmFpbGVkKHN0YXRlKTtcbiAgICAgICAgICAgIGxvZ2dlcl9qc18xLmxvZ2dlci53YXJuaW5nKGVyclN0cik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwiY2FuY2VsZWRcIjoge1xuICAgICAgICAgICAgc3RhdGVQcm94eS5zZXRDYW5jZWxlZChzdGF0ZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoKGlzRG9uZSA9PT0gbnVsbCB8fCBpc0RvbmUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGlzRG9uZShyZXNwb25zZSwgc3RhdGUpKSB8fFxuICAgICAgICAoaXNEb25lID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIFtcInN1Y2NlZWRlZFwiLCBcImNhbmNlbGVkXCJdLmNvbmNhdChzZXRFcnJvckFzUmVzdWx0ID8gW10gOiBbXCJmYWlsZWRcIl0pLmluY2x1ZGVzKHN0YXR1cykpKSB7XG4gICAgICAgIHN0YXRlUHJveHkuc2V0UmVzdWx0KHN0YXRlLCBidWlsZFJlc3VsdCh7XG4gICAgICAgICAgICByZXNwb25zZSxcbiAgICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgICAgcHJvY2Vzc1Jlc3VsdCxcbiAgICAgICAgfSkpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGJ1aWxkUmVzdWx0KGlucHV0cykge1xuICAgIGNvbnN0IHsgcHJvY2Vzc1Jlc3VsdCwgcmVzcG9uc2UsIHN0YXRlIH0gPSBpbnB1dHM7XG4gICAgcmV0dXJuIHByb2Nlc3NSZXN1bHQgPyBwcm9jZXNzUmVzdWx0KHJlc3BvbnNlLCBzdGF0ZSkgOiByZXNwb25zZTtcbn1cbi8qKlxuICogSW5pdGlhdGVzIHRoZSBsb25nLXJ1bm5pbmcgb3BlcmF0aW9uLlxuICovXG5hc3luYyBmdW5jdGlvbiBpbml0T3BlcmF0aW9uKGlucHV0cykge1xuICAgIGNvbnN0IHsgaW5pdCwgc3RhdGVQcm94eSwgcHJvY2Vzc1Jlc3VsdCwgZ2V0T3BlcmF0aW9uU3RhdHVzLCB3aXRoT3BlcmF0aW9uTG9jYXRpb24sIHNldEVycm9yQXNSZXN1bHQsIH0gPSBpbnB1dHM7XG4gICAgY29uc3QgeyBvcGVyYXRpb25Mb2NhdGlvbiwgcmVzb3VyY2VMb2NhdGlvbiwgbWV0YWRhdGEsIHJlc3BvbnNlIH0gPSBhd2FpdCBpbml0KCk7XG4gICAgaWYgKG9wZXJhdGlvbkxvY2F0aW9uKVxuICAgICAgICB3aXRoT3BlcmF0aW9uTG9jYXRpb24gPT09IG51bGwgfHwgd2l0aE9wZXJhdGlvbkxvY2F0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB3aXRoT3BlcmF0aW9uTG9jYXRpb24ob3BlcmF0aW9uTG9jYXRpb24sIGZhbHNlKTtcbiAgICBjb25zdCBjb25maWcgPSB7XG4gICAgICAgIG1ldGFkYXRhLFxuICAgICAgICBvcGVyYXRpb25Mb2NhdGlvbixcbiAgICAgICAgcmVzb3VyY2VMb2NhdGlvbixcbiAgICB9O1xuICAgIGxvZ2dlcl9qc18xLmxvZ2dlci52ZXJib3NlKGBMUk86IE9wZXJhdGlvbiBkZXNjcmlwdGlvbjpgLCBjb25maWcpO1xuICAgIGNvbnN0IHN0YXRlID0gc3RhdGVQcm94eS5pbml0U3RhdGUoY29uZmlnKTtcbiAgICBjb25zdCBzdGF0dXMgPSBnZXRPcGVyYXRpb25TdGF0dXMoeyByZXNwb25zZSwgc3RhdGUsIG9wZXJhdGlvbkxvY2F0aW9uIH0pO1xuICAgIHByb2Nlc3NPcGVyYXRpb25TdGF0dXMoeyBzdGF0ZSwgc3RhdHVzLCBzdGF0ZVByb3h5LCByZXNwb25zZSwgc2V0RXJyb3JBc1Jlc3VsdCwgcHJvY2Vzc1Jlc3VsdCB9KTtcbiAgICByZXR1cm4gc3RhdGU7XG59XG5leHBvcnRzLmluaXRPcGVyYXRpb24gPSBpbml0T3BlcmF0aW9uO1xuYXN5bmMgZnVuY3Rpb24gcG9sbE9wZXJhdGlvbkhlbHBlcihpbnB1dHMpIHtcbiAgICBjb25zdCB7IHBvbGwsIHN0YXRlLCBzdGF0ZVByb3h5LCBvcGVyYXRpb25Mb2NhdGlvbiwgZ2V0T3BlcmF0aW9uU3RhdHVzLCBnZXRSZXNvdXJjZUxvY2F0aW9uLCBpc09wZXJhdGlvbkVycm9yLCBvcHRpb25zLCB9ID0gaW5wdXRzO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcG9sbChvcGVyYXRpb25Mb2NhdGlvbiwgb3B0aW9ucykuY2F0Y2goc2V0U3RhdGVFcnJvcih7XG4gICAgICAgIHN0YXRlLFxuICAgICAgICBzdGF0ZVByb3h5LFxuICAgICAgICBpc09wZXJhdGlvbkVycm9yLFxuICAgIH0pKTtcbiAgICBjb25zdCBzdGF0dXMgPSBnZXRPcGVyYXRpb25TdGF0dXMocmVzcG9uc2UsIHN0YXRlKTtcbiAgICBsb2dnZXJfanNfMS5sb2dnZXIudmVyYm9zZShgTFJPOiBTdGF0dXM6XFxuXFx0UG9sbGluZyBmcm9tOiAke3N0YXRlLmNvbmZpZy5vcGVyYXRpb25Mb2NhdGlvbn1cXG5cXHRPcGVyYXRpb24gc3RhdHVzOiAke3N0YXR1c31cXG5cXHRQb2xsaW5nIHN0YXR1czogJHtjb25zdGFudHNfanNfMS50ZXJtaW5hbFN0YXRlcy5pbmNsdWRlcyhzdGF0dXMpID8gXCJTdG9wcGVkXCIgOiBcIlJ1bm5pbmdcIn1gKTtcbiAgICBpZiAoc3RhdHVzID09PSBcInN1Y2NlZWRlZFwiKSB7XG4gICAgICAgIGNvbnN0IHJlc291cmNlTG9jYXRpb24gPSBnZXRSZXNvdXJjZUxvY2F0aW9uKHJlc3BvbnNlLCBzdGF0ZSk7XG4gICAgICAgIGlmIChyZXNvdXJjZUxvY2F0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2U6IGF3YWl0IHBvbGwocmVzb3VyY2VMb2NhdGlvbikuY2F0Y2goc2V0U3RhdGVFcnJvcih7IHN0YXRlLCBzdGF0ZVByb3h5LCBpc09wZXJhdGlvbkVycm9yIH0pKSxcbiAgICAgICAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IHJlc3BvbnNlLCBzdGF0dXMgfTtcbn1cbi8qKiBQb2xscyB0aGUgbG9uZy1ydW5uaW5nIG9wZXJhdGlvbi4gKi9cbmFzeW5jIGZ1bmN0aW9uIHBvbGxPcGVyYXRpb24oaW5wdXRzKSB7XG4gICAgY29uc3QgeyBwb2xsLCBzdGF0ZSwgc3RhdGVQcm94eSwgb3B0aW9ucywgZ2V0T3BlcmF0aW9uU3RhdHVzLCBnZXRSZXNvdXJjZUxvY2F0aW9uLCBnZXRPcGVyYXRpb25Mb2NhdGlvbiwgaXNPcGVyYXRpb25FcnJvciwgd2l0aE9wZXJhdGlvbkxvY2F0aW9uLCBnZXRQb2xsaW5nSW50ZXJ2YWwsIHByb2Nlc3NSZXN1bHQsIGdldEVycm9yLCB1cGRhdGVTdGF0ZSwgc2V0RGVsYXksIGlzRG9uZSwgc2V0RXJyb3JBc1Jlc3VsdCwgfSA9IGlucHV0cztcbiAgICBjb25zdCB7IG9wZXJhdGlvbkxvY2F0aW9uIH0gPSBzdGF0ZS5jb25maWc7XG4gICAgaWYgKG9wZXJhdGlvbkxvY2F0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgeyByZXNwb25zZSwgc3RhdHVzIH0gPSBhd2FpdCBwb2xsT3BlcmF0aW9uSGVscGVyKHtcbiAgICAgICAgICAgIHBvbGwsXG4gICAgICAgICAgICBnZXRPcGVyYXRpb25TdGF0dXMsXG4gICAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICAgIHN0YXRlUHJveHksXG4gICAgICAgICAgICBvcGVyYXRpb25Mb2NhdGlvbixcbiAgICAgICAgICAgIGdldFJlc291cmNlTG9jYXRpb24sXG4gICAgICAgICAgICBpc09wZXJhdGlvbkVycm9yLFxuICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgfSk7XG4gICAgICAgIHByb2Nlc3NPcGVyYXRpb25TdGF0dXMoe1xuICAgICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICAgIHN0YXRlUHJveHksXG4gICAgICAgICAgICBpc0RvbmUsXG4gICAgICAgICAgICBwcm9jZXNzUmVzdWx0LFxuICAgICAgICAgICAgZ2V0RXJyb3IsXG4gICAgICAgICAgICBzZXRFcnJvckFzUmVzdWx0LFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFjb25zdGFudHNfanNfMS50ZXJtaW5hbFN0YXRlcy5pbmNsdWRlcyhzdGF0dXMpKSB7XG4gICAgICAgICAgICBjb25zdCBpbnRlcnZhbEluTXMgPSBnZXRQb2xsaW5nSW50ZXJ2YWwgPT09IG51bGwgfHwgZ2V0UG9sbGluZ0ludGVydmFsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBnZXRQb2xsaW5nSW50ZXJ2YWwocmVzcG9uc2UpO1xuICAgICAgICAgICAgaWYgKGludGVydmFsSW5NcylcbiAgICAgICAgICAgICAgICBzZXREZWxheShpbnRlcnZhbEluTXMpO1xuICAgICAgICAgICAgY29uc3QgbG9jYXRpb24gPSBnZXRPcGVyYXRpb25Mb2NhdGlvbiA9PT0gbnVsbCB8fCBnZXRPcGVyYXRpb25Mb2NhdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogZ2V0T3BlcmF0aW9uTG9jYXRpb24ocmVzcG9uc2UsIHN0YXRlKTtcbiAgICAgICAgICAgIGlmIChsb2NhdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNVcGRhdGVkID0gb3BlcmF0aW9uTG9jYXRpb24gIT09IGxvY2F0aW9uO1xuICAgICAgICAgICAgICAgIHN0YXRlLmNvbmZpZy5vcGVyYXRpb25Mb2NhdGlvbiA9IGxvY2F0aW9uO1xuICAgICAgICAgICAgICAgIHdpdGhPcGVyYXRpb25Mb2NhdGlvbiA9PT0gbnVsbCB8fCB3aXRoT3BlcmF0aW9uTG9jYXRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHdpdGhPcGVyYXRpb25Mb2NhdGlvbihsb2NhdGlvbiwgaXNVcGRhdGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB3aXRoT3BlcmF0aW9uTG9jYXRpb24gPT09IG51bGwgfHwgd2l0aE9wZXJhdGlvbkxvY2F0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB3aXRoT3BlcmF0aW9uTG9jYXRpb24ob3BlcmF0aW9uTG9jYXRpb24sIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICB1cGRhdGVTdGF0ZSA9PT0gbnVsbCB8fCB1cGRhdGVTdGF0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogdXBkYXRlU3RhdGUoc3RhdGUsIHJlc3BvbnNlKTtcbiAgICB9XG59XG5leHBvcnRzLnBvbGxPcGVyYXRpb24gPSBwb2xsT3BlcmF0aW9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9b3BlcmF0aW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucG9sbEh0dHBPcGVyYXRpb24gPSBleHBvcnRzLmlzT3BlcmF0aW9uRXJyb3IgPSBleHBvcnRzLmdldFJlc291cmNlTG9jYXRpb24gPSBleHBvcnRzLmdldE9wZXJhdGlvblN0YXR1cyA9IGV4cG9ydHMuZ2V0T3BlcmF0aW9uTG9jYXRpb24gPSBleHBvcnRzLmluaXRIdHRwT3BlcmF0aW9uID0gZXhwb3J0cy5nZXRTdGF0dXNGcm9tSW5pdGlhbFJlc3BvbnNlID0gZXhwb3J0cy5nZXRFcnJvckZyb21SZXNwb25zZSA9IGV4cG9ydHMucGFyc2VSZXRyeUFmdGVyID0gZXhwb3J0cy5pbmZlckxyb01vZGUgPSB2b2lkIDA7XG5jb25zdCBvcGVyYXRpb25fanNfMSA9IHJlcXVpcmUoXCIuLi9wb2xsZXIvb3BlcmF0aW9uLmpzXCIpO1xuY29uc3QgbG9nZ2VyX2pzXzEgPSByZXF1aXJlKFwiLi4vbG9nZ2VyLmpzXCIpO1xuZnVuY3Rpb24gZ2V0T3BlcmF0aW9uTG9jYXRpb25Qb2xsaW5nVXJsKGlucHV0cykge1xuICAgIGNvbnN0IHsgYXp1cmVBc3luY09wZXJhdGlvbiwgb3BlcmF0aW9uTG9jYXRpb24gfSA9IGlucHV0cztcbiAgICByZXR1cm4gb3BlcmF0aW9uTG9jYXRpb24gIT09IG51bGwgJiYgb3BlcmF0aW9uTG9jYXRpb24gIT09IHZvaWQgMCA/IG9wZXJhdGlvbkxvY2F0aW9uIDogYXp1cmVBc3luY09wZXJhdGlvbjtcbn1cbmZ1bmN0aW9uIGdldExvY2F0aW9uSGVhZGVyKHJhd1Jlc3BvbnNlKSB7XG4gICAgcmV0dXJuIHJhd1Jlc3BvbnNlLmhlYWRlcnNbXCJsb2NhdGlvblwiXTtcbn1cbmZ1bmN0aW9uIGdldE9wZXJhdGlvbkxvY2F0aW9uSGVhZGVyKHJhd1Jlc3BvbnNlKSB7XG4gICAgcmV0dXJuIHJhd1Jlc3BvbnNlLmhlYWRlcnNbXCJvcGVyYXRpb24tbG9jYXRpb25cIl07XG59XG5mdW5jdGlvbiBnZXRBenVyZUFzeW5jT3BlcmF0aW9uSGVhZGVyKHJhd1Jlc3BvbnNlKSB7XG4gICAgcmV0dXJuIHJhd1Jlc3BvbnNlLmhlYWRlcnNbXCJhenVyZS1hc3luY29wZXJhdGlvblwiXTtcbn1cbmZ1bmN0aW9uIGZpbmRSZXNvdXJjZUxvY2F0aW9uKGlucHV0cykge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCB7IGxvY2F0aW9uLCByZXF1ZXN0TWV0aG9kLCByZXF1ZXN0UGF0aCwgcmVzb3VyY2VMb2NhdGlvbkNvbmZpZyB9ID0gaW5wdXRzO1xuICAgIHN3aXRjaCAocmVxdWVzdE1ldGhvZCkge1xuICAgICAgICBjYXNlIFwiUFVUXCI6IHtcbiAgICAgICAgICAgIHJldHVybiByZXF1ZXN0UGF0aDtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwiREVMRVRFXCI6IHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcIlBBVENIXCI6IHtcbiAgICAgICAgICAgIHJldHVybiAoX2EgPSBnZXREZWZhdWx0KCkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHJlcXVlc3RQYXRoO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIHJldHVybiBnZXREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHtcbiAgICAgICAgc3dpdGNoIChyZXNvdXJjZUxvY2F0aW9uQ29uZmlnKSB7XG4gICAgICAgICAgICBjYXNlIFwiYXp1cmUtYXN5bmMtb3BlcmF0aW9uXCI6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcIm9yaWdpbmFsLXVyaVwiOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3RQYXRoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImxvY2F0aW9uXCI6XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxvY2F0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gaW5mZXJMcm9Nb2RlKGlucHV0cykge1xuICAgIGNvbnN0IHsgcmF3UmVzcG9uc2UsIHJlcXVlc3RNZXRob2QsIHJlcXVlc3RQYXRoLCByZXNvdXJjZUxvY2F0aW9uQ29uZmlnIH0gPSBpbnB1dHM7XG4gICAgY29uc3Qgb3BlcmF0aW9uTG9jYXRpb24gPSBnZXRPcGVyYXRpb25Mb2NhdGlvbkhlYWRlcihyYXdSZXNwb25zZSk7XG4gICAgY29uc3QgYXp1cmVBc3luY09wZXJhdGlvbiA9IGdldEF6dXJlQXN5bmNPcGVyYXRpb25IZWFkZXIocmF3UmVzcG9uc2UpO1xuICAgIGNvbnN0IHBvbGxpbmdVcmwgPSBnZXRPcGVyYXRpb25Mb2NhdGlvblBvbGxpbmdVcmwoeyBvcGVyYXRpb25Mb2NhdGlvbiwgYXp1cmVBc3luY09wZXJhdGlvbiB9KTtcbiAgICBjb25zdCBsb2NhdGlvbiA9IGdldExvY2F0aW9uSGVhZGVyKHJhd1Jlc3BvbnNlKTtcbiAgICBjb25zdCBub3JtYWxpemVkUmVxdWVzdE1ldGhvZCA9IHJlcXVlc3RNZXRob2QgPT09IG51bGwgfHwgcmVxdWVzdE1ldGhvZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogcmVxdWVzdE1ldGhvZC50b0xvY2FsZVVwcGVyQ2FzZSgpO1xuICAgIGlmIChwb2xsaW5nVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1vZGU6IFwiT3BlcmF0aW9uTG9jYXRpb25cIixcbiAgICAgICAgICAgIG9wZXJhdGlvbkxvY2F0aW9uOiBwb2xsaW5nVXJsLFxuICAgICAgICAgICAgcmVzb3VyY2VMb2NhdGlvbjogZmluZFJlc291cmNlTG9jYXRpb24oe1xuICAgICAgICAgICAgICAgIHJlcXVlc3RNZXRob2Q6IG5vcm1hbGl6ZWRSZXF1ZXN0TWV0aG9kLFxuICAgICAgICAgICAgICAgIGxvY2F0aW9uLFxuICAgICAgICAgICAgICAgIHJlcXVlc3RQYXRoLFxuICAgICAgICAgICAgICAgIHJlc291cmNlTG9jYXRpb25Db25maWcsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZWxzZSBpZiAobG9jYXRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbW9kZTogXCJSZXNvdXJjZUxvY2F0aW9uXCIsXG4gICAgICAgICAgICBvcGVyYXRpb25Mb2NhdGlvbjogbG9jYXRpb24sXG4gICAgICAgIH07XG4gICAgfVxuICAgIGVsc2UgaWYgKG5vcm1hbGl6ZWRSZXF1ZXN0TWV0aG9kID09PSBcIlBVVFwiICYmIHJlcXVlc3RQYXRoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBtb2RlOiBcIkJvZHlcIixcbiAgICAgICAgICAgIG9wZXJhdGlvbkxvY2F0aW9uOiByZXF1ZXN0UGF0aCxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufVxuZXhwb3J0cy5pbmZlckxyb01vZGUgPSBpbmZlckxyb01vZGU7XG5mdW5jdGlvbiB0cmFuc2Zvcm1TdGF0dXMoaW5wdXRzKSB7XG4gICAgY29uc3QgeyBzdGF0dXMsIHN0YXR1c0NvZGUgfSA9IGlucHV0cztcbiAgICBpZiAodHlwZW9mIHN0YXR1cyAhPT0gXCJzdHJpbmdcIiAmJiBzdGF0dXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFBvbGxpbmcgd2FzIHVuc3VjY2Vzc2Z1bC4gRXhwZWN0ZWQgc3RhdHVzIHRvIGhhdmUgYSBzdHJpbmcgdmFsdWUgb3Igbm8gdmFsdWUgYnV0IGl0IGhhcyBpbnN0ZWFkOiAke3N0YXR1c30uIFRoaXMgZG9lc24ndCBuZWNlc3NhcmlseSBpbmRpY2F0ZSB0aGUgb3BlcmF0aW9uIGhhcyBmYWlsZWQuIENoZWNrIHlvdXIgQXp1cmUgc3Vic2NyaXB0aW9uIG9yIHJlc291cmNlIHN0YXR1cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5gKTtcbiAgICB9XG4gICAgc3dpdGNoIChzdGF0dXMgPT09IG51bGwgfHwgc3RhdHVzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzdGF0dXMudG9Mb2NhbGVMb3dlckNhc2UoKSkge1xuICAgICAgICBjYXNlIHVuZGVmaW5lZDpcbiAgICAgICAgICAgIHJldHVybiB0b09wZXJhdGlvblN0YXR1cyhzdGF0dXNDb2RlKTtcbiAgICAgICAgY2FzZSBcInN1Y2NlZWRlZFwiOlxuICAgICAgICAgICAgcmV0dXJuIFwic3VjY2VlZGVkXCI7XG4gICAgICAgIGNhc2UgXCJmYWlsZWRcIjpcbiAgICAgICAgICAgIHJldHVybiBcImZhaWxlZFwiO1xuICAgICAgICBjYXNlIFwicnVubmluZ1wiOlxuICAgICAgICBjYXNlIFwiYWNjZXB0ZWRcIjpcbiAgICAgICAgY2FzZSBcInN0YXJ0ZWRcIjpcbiAgICAgICAgY2FzZSBcImNhbmNlbGluZ1wiOlxuICAgICAgICBjYXNlIFwiY2FuY2VsbGluZ1wiOlxuICAgICAgICAgICAgcmV0dXJuIFwicnVubmluZ1wiO1xuICAgICAgICBjYXNlIFwiY2FuY2VsZWRcIjpcbiAgICAgICAgY2FzZSBcImNhbmNlbGxlZFwiOlxuICAgICAgICAgICAgcmV0dXJuIFwiY2FuY2VsZWRcIjtcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgbG9nZ2VyX2pzXzEubG9nZ2VyLnZlcmJvc2UoYExSTzogdW5yZWNvZ25pemVkIG9wZXJhdGlvbiBzdGF0dXM6ICR7c3RhdHVzfWApO1xuICAgICAgICAgICAgcmV0dXJuIHN0YXR1cztcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIGdldFN0YXR1cyhyYXdSZXNwb25zZSkge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCB7IHN0YXR1cyB9ID0gKF9hID0gcmF3UmVzcG9uc2UuYm9keSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoge307XG4gICAgcmV0dXJuIHRyYW5zZm9ybVN0YXR1cyh7IHN0YXR1cywgc3RhdHVzQ29kZTogcmF3UmVzcG9uc2Uuc3RhdHVzQ29kZSB9KTtcbn1cbmZ1bmN0aW9uIGdldFByb3Zpc2lvbmluZ1N0YXRlKHJhd1Jlc3BvbnNlKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICBjb25zdCB7IHByb3BlcnRpZXMsIHByb3Zpc2lvbmluZ1N0YXRlIH0gPSAoX2EgPSByYXdSZXNwb25zZS5ib2R5KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB7fTtcbiAgICBjb25zdCBzdGF0dXMgPSAoX2IgPSBwcm9wZXJ0aWVzID09PSBudWxsIHx8IHByb3BlcnRpZXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHByb3BlcnRpZXMucHJvdmlzaW9uaW5nU3RhdGUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IHByb3Zpc2lvbmluZ1N0YXRlO1xuICAgIHJldHVybiB0cmFuc2Zvcm1TdGF0dXMoeyBzdGF0dXMsIHN0YXR1c0NvZGU6IHJhd1Jlc3BvbnNlLnN0YXR1c0NvZGUgfSk7XG59XG5mdW5jdGlvbiB0b09wZXJhdGlvblN0YXR1cyhzdGF0dXNDb2RlKSB7XG4gICAgaWYgKHN0YXR1c0NvZGUgPT09IDIwMikge1xuICAgICAgICByZXR1cm4gXCJydW5uaW5nXCI7XG4gICAgfVxuICAgIGVsc2UgaWYgKHN0YXR1c0NvZGUgPCAzMDApIHtcbiAgICAgICAgcmV0dXJuIFwic3VjY2VlZGVkXCI7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gXCJmYWlsZWRcIjtcbiAgICB9XG59XG5mdW5jdGlvbiBwYXJzZVJldHJ5QWZ0ZXIoeyByYXdSZXNwb25zZSB9KSB7XG4gICAgY29uc3QgcmV0cnlBZnRlciA9IHJhd1Jlc3BvbnNlLmhlYWRlcnNbXCJyZXRyeS1hZnRlclwiXTtcbiAgICBpZiAocmV0cnlBZnRlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIFJldHJ5LUFmdGVyIGhlYWRlciB2YWx1ZSBpcyBlaXRoZXIgaW4gSFRUUCBkYXRlIGZvcm1hdCwgb3IgaW4gc2Vjb25kc1xuICAgICAgICBjb25zdCByZXRyeUFmdGVySW5TZWNvbmRzID0gcGFyc2VJbnQocmV0cnlBZnRlcik7XG4gICAgICAgIHJldHVybiBpc05hTihyZXRyeUFmdGVySW5TZWNvbmRzKVxuICAgICAgICAgICAgPyBjYWxjdWxhdGVQb2xsaW5nSW50ZXJ2YWxGcm9tRGF0ZShuZXcgRGF0ZShyZXRyeUFmdGVyKSlcbiAgICAgICAgICAgIDogcmV0cnlBZnRlckluU2Vjb25kcyAqIDEwMDA7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG5leHBvcnRzLnBhcnNlUmV0cnlBZnRlciA9IHBhcnNlUmV0cnlBZnRlcjtcbmZ1bmN0aW9uIGdldEVycm9yRnJvbVJlc3BvbnNlKHJlc3BvbnNlKSB7XG4gICAgY29uc3QgZXJyb3IgPSBhY2Nlc3NCb2R5UHJvcGVydHkocmVzcG9uc2UsIFwiZXJyb3JcIik7XG4gICAgaWYgKCFlcnJvcikge1xuICAgICAgICBsb2dnZXJfanNfMS5sb2dnZXIud2FybmluZyhgVGhlIGxvbmctcnVubmluZyBvcGVyYXRpb24gZmFpbGVkIGJ1dCB0aGVyZSBpcyBubyBlcnJvciBwcm9wZXJ0eSBpbiB0aGUgcmVzcG9uc2UncyBib2R5YCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFlcnJvci5jb2RlIHx8ICFlcnJvci5tZXNzYWdlKSB7XG4gICAgICAgIGxvZ2dlcl9qc18xLmxvZ2dlci53YXJuaW5nKGBUaGUgbG9uZy1ydW5uaW5nIG9wZXJhdGlvbiBmYWlsZWQgYnV0IHRoZSBlcnJvciBwcm9wZXJ0eSBpbiB0aGUgcmVzcG9uc2UncyBib2R5IGRvZXNuJ3QgY29udGFpbiBjb2RlIG9yIG1lc3NhZ2VgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZXR1cm4gZXJyb3I7XG59XG5leHBvcnRzLmdldEVycm9yRnJvbVJlc3BvbnNlID0gZ2V0RXJyb3JGcm9tUmVzcG9uc2U7XG5mdW5jdGlvbiBjYWxjdWxhdGVQb2xsaW5nSW50ZXJ2YWxGcm9tRGF0ZShyZXRyeUFmdGVyRGF0ZSkge1xuICAgIGNvbnN0IHRpbWVOb3cgPSBNYXRoLmZsb29yKG5ldyBEYXRlKCkuZ2V0VGltZSgpKTtcbiAgICBjb25zdCByZXRyeUFmdGVyVGltZSA9IHJldHJ5QWZ0ZXJEYXRlLmdldFRpbWUoKTtcbiAgICBpZiAodGltZU5vdyA8IHJldHJ5QWZ0ZXJUaW1lKSB7XG4gICAgICAgIHJldHVybiByZXRyeUFmdGVyVGltZSAtIHRpbWVOb3c7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBnZXRTdGF0dXNGcm9tSW5pdGlhbFJlc3BvbnNlKGlucHV0cykge1xuICAgIGNvbnN0IHsgcmVzcG9uc2UsIHN0YXRlLCBvcGVyYXRpb25Mb2NhdGlvbiB9ID0gaW5wdXRzO1xuICAgIGZ1bmN0aW9uIGhlbHBlcigpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBtb2RlID0gKF9hID0gc3RhdGUuY29uZmlnLm1ldGFkYXRhKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2FbXCJtb2RlXCJdO1xuICAgICAgICBzd2l0Y2ggKG1vZGUpIHtcbiAgICAgICAgICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgICAgICAgICAgIHJldHVybiB0b09wZXJhdGlvblN0YXR1cyhyZXNwb25zZS5yYXdSZXNwb25zZS5zdGF0dXNDb2RlKTtcbiAgICAgICAgICAgIGNhc2UgXCJCb2R5XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldE9wZXJhdGlvblN0YXR1cyhyZXNwb25zZSwgc3RhdGUpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJydW5uaW5nXCI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgc3RhdHVzID0gaGVscGVyKCk7XG4gICAgcmV0dXJuIHN0YXR1cyA9PT0gXCJydW5uaW5nXCIgJiYgb3BlcmF0aW9uTG9jYXRpb24gPT09IHVuZGVmaW5lZCA/IFwic3VjY2VlZGVkXCIgOiBzdGF0dXM7XG59XG5leHBvcnRzLmdldFN0YXR1c0Zyb21Jbml0aWFsUmVzcG9uc2UgPSBnZXRTdGF0dXNGcm9tSW5pdGlhbFJlc3BvbnNlO1xuLyoqXG4gKiBJbml0aWF0ZXMgdGhlIGxvbmctcnVubmluZyBvcGVyYXRpb24uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGluaXRIdHRwT3BlcmF0aW9uKGlucHV0cykge1xuICAgIGNvbnN0IHsgc3RhdGVQcm94eSwgcmVzb3VyY2VMb2NhdGlvbkNvbmZpZywgcHJvY2Vzc1Jlc3VsdCwgbHJvLCBzZXRFcnJvckFzUmVzdWx0IH0gPSBpbnB1dHM7XG4gICAgcmV0dXJuICgwLCBvcGVyYXRpb25fanNfMS5pbml0T3BlcmF0aW9uKSh7XG4gICAgICAgIGluaXQ6IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgbHJvLnNlbmRJbml0aWFsUmVxdWVzdCgpO1xuICAgICAgICAgICAgY29uc3QgY29uZmlnID0gaW5mZXJMcm9Nb2RlKHtcbiAgICAgICAgICAgICAgICByYXdSZXNwb25zZTogcmVzcG9uc2UucmF3UmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgcmVxdWVzdFBhdGg6IGxyby5yZXF1ZXN0UGF0aCxcbiAgICAgICAgICAgICAgICByZXF1ZXN0TWV0aG9kOiBscm8ucmVxdWVzdE1ldGhvZCxcbiAgICAgICAgICAgICAgICByZXNvdXJjZUxvY2F0aW9uQ29uZmlnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7IHJlc3BvbnNlLCBvcGVyYXRpb25Mb2NhdGlvbjogY29uZmlnID09PSBudWxsIHx8IGNvbmZpZyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29uZmlnLm9wZXJhdGlvbkxvY2F0aW9uLCByZXNvdXJjZUxvY2F0aW9uOiBjb25maWcgPT09IG51bGwgfHwgY29uZmlnID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb25maWcucmVzb3VyY2VMb2NhdGlvbiB9LCAoKGNvbmZpZyA9PT0gbnVsbCB8fCBjb25maWcgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbmZpZy5tb2RlKSA/IHsgbWV0YWRhdGE6IHsgbW9kZTogY29uZmlnLm1vZGUgfSB9IDoge30pKTtcbiAgICAgICAgfSxcbiAgICAgICAgc3RhdGVQcm94eSxcbiAgICAgICAgcHJvY2Vzc1Jlc3VsdDogcHJvY2Vzc1Jlc3VsdFxuICAgICAgICAgICAgPyAoeyBmbGF0UmVzcG9uc2UgfSwgc3RhdGUpID0+IHByb2Nlc3NSZXN1bHQoZmxhdFJlc3BvbnNlLCBzdGF0ZSlcbiAgICAgICAgICAgIDogKHsgZmxhdFJlc3BvbnNlIH0pID0+IGZsYXRSZXNwb25zZSxcbiAgICAgICAgZ2V0T3BlcmF0aW9uU3RhdHVzOiBnZXRTdGF0dXNGcm9tSW5pdGlhbFJlc3BvbnNlLFxuICAgICAgICBzZXRFcnJvckFzUmVzdWx0LFxuICAgIH0pO1xufVxuZXhwb3J0cy5pbml0SHR0cE9wZXJhdGlvbiA9IGluaXRIdHRwT3BlcmF0aW9uO1xuZnVuY3Rpb24gZ2V0T3BlcmF0aW9uTG9jYXRpb24oeyByYXdSZXNwb25zZSB9LCBzdGF0ZSkge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCBtb2RlID0gKF9hID0gc3RhdGUuY29uZmlnLm1ldGFkYXRhKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2FbXCJtb2RlXCJdO1xuICAgIHN3aXRjaCAobW9kZSkge1xuICAgICAgICBjYXNlIFwiT3BlcmF0aW9uTG9jYXRpb25cIjoge1xuICAgICAgICAgICAgcmV0dXJuIGdldE9wZXJhdGlvbkxvY2F0aW9uUG9sbGluZ1VybCh7XG4gICAgICAgICAgICAgICAgb3BlcmF0aW9uTG9jYXRpb246IGdldE9wZXJhdGlvbkxvY2F0aW9uSGVhZGVyKHJhd1Jlc3BvbnNlKSxcbiAgICAgICAgICAgICAgICBhenVyZUFzeW5jT3BlcmF0aW9uOiBnZXRBenVyZUFzeW5jT3BlcmF0aW9uSGVhZGVyKHJhd1Jlc3BvbnNlKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJSZXNvdXJjZUxvY2F0aW9uXCI6IHtcbiAgICAgICAgICAgIHJldHVybiBnZXRMb2NhdGlvbkhlYWRlcihyYXdSZXNwb25zZSk7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcIkJvZHlcIjpcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuZ2V0T3BlcmF0aW9uTG9jYXRpb24gPSBnZXRPcGVyYXRpb25Mb2NhdGlvbjtcbmZ1bmN0aW9uIGdldE9wZXJhdGlvblN0YXR1cyh7IHJhd1Jlc3BvbnNlIH0sIHN0YXRlKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IG1vZGUgPSAoX2EgPSBzdGF0ZS5jb25maWcubWV0YWRhdGEpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVtcIm1vZGVcIl07XG4gICAgc3dpdGNoIChtb2RlKSB7XG4gICAgICAgIGNhc2UgXCJPcGVyYXRpb25Mb2NhdGlvblwiOiB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0U3RhdHVzKHJhd1Jlc3BvbnNlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwiUmVzb3VyY2VMb2NhdGlvblwiOiB7XG4gICAgICAgICAgICByZXR1cm4gdG9PcGVyYXRpb25TdGF0dXMocmF3UmVzcG9uc2Uuc3RhdHVzQ29kZSk7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcIkJvZHlcIjoge1xuICAgICAgICAgICAgcmV0dXJuIGdldFByb3Zpc2lvbmluZ1N0YXRlKHJhd1Jlc3BvbnNlKTtcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnRlcm5hbCBlcnJvcjogVW5leHBlY3RlZCBvcGVyYXRpb24gbW9kZTogJHttb2RlfWApO1xuICAgIH1cbn1cbmV4cG9ydHMuZ2V0T3BlcmF0aW9uU3RhdHVzID0gZ2V0T3BlcmF0aW9uU3RhdHVzO1xuZnVuY3Rpb24gYWNjZXNzQm9keVByb3BlcnR5KHsgZmxhdFJlc3BvbnNlLCByYXdSZXNwb25zZSB9LCBwcm9wKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICByZXR1cm4gKF9hID0gZmxhdFJlc3BvbnNlID09PSBudWxsIHx8IGZsYXRSZXNwb25zZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZmxhdFJlc3BvbnNlW3Byb3BdKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAoX2IgPSByYXdSZXNwb25zZS5ib2R5KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2JbcHJvcF07XG59XG5mdW5jdGlvbiBnZXRSZXNvdXJjZUxvY2F0aW9uKHJlcywgc3RhdGUpIHtcbiAgICBjb25zdCBsb2MgPSBhY2Nlc3NCb2R5UHJvcGVydHkocmVzLCBcInJlc291cmNlTG9jYXRpb25cIik7XG4gICAgaWYgKGxvYyAmJiB0eXBlb2YgbG9jID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHN0YXRlLmNvbmZpZy5yZXNvdXJjZUxvY2F0aW9uID0gbG9jO1xuICAgIH1cbiAgICByZXR1cm4gc3RhdGUuY29uZmlnLnJlc291cmNlTG9jYXRpb247XG59XG5leHBvcnRzLmdldFJlc291cmNlTG9jYXRpb24gPSBnZXRSZXNvdXJjZUxvY2F0aW9uO1xuZnVuY3Rpb24gaXNPcGVyYXRpb25FcnJvcihlKSB7XG4gICAgcmV0dXJuIGUubmFtZSA9PT0gXCJSZXN0RXJyb3JcIjtcbn1cbmV4cG9ydHMuaXNPcGVyYXRpb25FcnJvciA9IGlzT3BlcmF0aW9uRXJyb3I7XG4vKiogUG9sbHMgdGhlIGxvbmctcnVubmluZyBvcGVyYXRpb24uICovXG5hc3luYyBmdW5jdGlvbiBwb2xsSHR0cE9wZXJhdGlvbihpbnB1dHMpIHtcbiAgICBjb25zdCB7IGxybywgc3RhdGVQcm94eSwgb3B0aW9ucywgcHJvY2Vzc1Jlc3VsdCwgdXBkYXRlU3RhdGUsIHNldERlbGF5LCBzdGF0ZSwgc2V0RXJyb3JBc1Jlc3VsdCwgfSA9IGlucHV0cztcbiAgICByZXR1cm4gKDAsIG9wZXJhdGlvbl9qc18xLnBvbGxPcGVyYXRpb24pKHtcbiAgICAgICAgc3RhdGUsXG4gICAgICAgIHN0YXRlUHJveHksXG4gICAgICAgIHNldERlbGF5LFxuICAgICAgICBwcm9jZXNzUmVzdWx0OiBwcm9jZXNzUmVzdWx0XG4gICAgICAgICAgICA/ICh7IGZsYXRSZXNwb25zZSB9LCBpbnB1dFN0YXRlKSA9PiBwcm9jZXNzUmVzdWx0KGZsYXRSZXNwb25zZSwgaW5wdXRTdGF0ZSlcbiAgICAgICAgICAgIDogKHsgZmxhdFJlc3BvbnNlIH0pID0+IGZsYXRSZXNwb25zZSxcbiAgICAgICAgZ2V0RXJyb3I6IGdldEVycm9yRnJvbVJlc3BvbnNlLFxuICAgICAgICB1cGRhdGVTdGF0ZSxcbiAgICAgICAgZ2V0UG9sbGluZ0ludGVydmFsOiBwYXJzZVJldHJ5QWZ0ZXIsXG4gICAgICAgIGdldE9wZXJhdGlvbkxvY2F0aW9uLFxuICAgICAgICBnZXRPcGVyYXRpb25TdGF0dXMsXG4gICAgICAgIGlzT3BlcmF0aW9uRXJyb3IsXG4gICAgICAgIGdldFJlc291cmNlTG9jYXRpb24sXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgZXhwYW5zaW9uIGhlcmUgaXMgaW50ZW50aW9uYWwgYmVjYXVzZSBgbHJvYCBjb3VsZCBiZSBhbiBvYmplY3QgdGhhdFxuICAgICAgICAgKiByZWZlcmVuY2VzIGFuIGlubmVyIHRoaXMsIHNvIHdlIG5lZWQgdG8gcHJlc2VydmUgYSByZWZlcmVuY2UgdG8gaXQuXG4gICAgICAgICAqL1xuICAgICAgICBwb2xsOiBhc3luYyAobG9jYXRpb24sIGlucHV0T3B0aW9ucykgPT4gbHJvLnNlbmRQb2xsUmVxdWVzdChsb2NhdGlvbiwgaW5wdXRPcHRpb25zKSxcbiAgICAgICAgc2V0RXJyb3JBc1Jlc3VsdCxcbiAgICB9KTtcbn1cbmV4cG9ydHMucG9sbEh0dHBPcGVyYXRpb24gPSBwb2xsSHR0cE9wZXJhdGlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW9wZXJhdGlvbi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmJ1aWxkQ3JlYXRlUG9sbGVyID0gdm9pZCAwO1xuY29uc3Qgb3BlcmF0aW9uX2pzXzEgPSByZXF1aXJlKFwiLi9vcGVyYXRpb24uanNcIik7XG5jb25zdCBjb25zdGFudHNfanNfMSA9IHJlcXVpcmUoXCIuL2NvbnN0YW50cy5qc1wiKTtcbmNvbnN0IGNvcmVfdXRpbF8xID0gcmVxdWlyZShcIkBhenVyZS9jb3JlLXV0aWxcIik7XG5jb25zdCBjcmVhdGVTdGF0ZVByb3h5ID0gKCkgPT4gKHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RhdGUgYXQgdGhpcyBwb2ludCBpcyBjcmVhdGVkIHRvIGJlIG9mIHR5cGUgT3BlcmF0aW9uU3RhdGU8VFJlc3VsdD4uXG4gICAgICogSXQgd2lsbCBiZSB1cGRhdGVkIGxhdGVyIHRvIGJlIG9mIHR5cGUgVFN0YXRlIHdoZW4gdGhlXG4gICAgICogY3VzdG9tZXItcHJvdmlkZWQgY2FsbGJhY2ssIGB1cGRhdGVTdGF0ZWAsIGlzIGNhbGxlZCBkdXJpbmcgcG9sbGluZy5cbiAgICAgKi9cbiAgICBpbml0U3RhdGU6IChjb25maWcpID0+ICh7IHN0YXR1czogXCJydW5uaW5nXCIsIGNvbmZpZyB9KSxcbiAgICBzZXRDYW5jZWxlZDogKHN0YXRlKSA9PiAoc3RhdGUuc3RhdHVzID0gXCJjYW5jZWxlZFwiKSxcbiAgICBzZXRFcnJvcjogKHN0YXRlLCBlcnJvcikgPT4gKHN0YXRlLmVycm9yID0gZXJyb3IpLFxuICAgIHNldFJlc3VsdDogKHN0YXRlLCByZXN1bHQpID0+IChzdGF0ZS5yZXN1bHQgPSByZXN1bHQpLFxuICAgIHNldFJ1bm5pbmc6IChzdGF0ZSkgPT4gKHN0YXRlLnN0YXR1cyA9IFwicnVubmluZ1wiKSxcbiAgICBzZXRTdWNjZWVkZWQ6IChzdGF0ZSkgPT4gKHN0YXRlLnN0YXR1cyA9IFwic3VjY2VlZGVkXCIpLFxuICAgIHNldEZhaWxlZDogKHN0YXRlKSA9PiAoc3RhdGUuc3RhdHVzID0gXCJmYWlsZWRcIiksXG4gICAgZ2V0RXJyb3I6IChzdGF0ZSkgPT4gc3RhdGUuZXJyb3IsXG4gICAgZ2V0UmVzdWx0OiAoc3RhdGUpID0+IHN0YXRlLnJlc3VsdCxcbiAgICBpc0NhbmNlbGVkOiAoc3RhdGUpID0+IHN0YXRlLnN0YXR1cyA9PT0gXCJjYW5jZWxlZFwiLFxuICAgIGlzRmFpbGVkOiAoc3RhdGUpID0+IHN0YXRlLnN0YXR1cyA9PT0gXCJmYWlsZWRcIixcbiAgICBpc1J1bm5pbmc6IChzdGF0ZSkgPT4gc3RhdGUuc3RhdHVzID09PSBcInJ1bm5pbmdcIixcbiAgICBpc1N1Y2NlZWRlZDogKHN0YXRlKSA9PiBzdGF0ZS5zdGF0dXMgPT09IFwic3VjY2VlZGVkXCIsXG59KTtcbi8qKlxuICogUmV0dXJucyBhIHBvbGxlciBmYWN0b3J5LlxuICovXG5mdW5jdGlvbiBidWlsZENyZWF0ZVBvbGxlcihpbnB1dHMpIHtcbiAgICBjb25zdCB7IGdldE9wZXJhdGlvbkxvY2F0aW9uLCBnZXRTdGF0dXNGcm9tSW5pdGlhbFJlc3BvbnNlLCBnZXRTdGF0dXNGcm9tUG9sbFJlc3BvbnNlLCBpc09wZXJhdGlvbkVycm9yLCBnZXRSZXNvdXJjZUxvY2F0aW9uLCBnZXRQb2xsaW5nSW50ZXJ2YWwsIGdldEVycm9yLCByZXNvbHZlT25VbnN1Y2Nlc3NmdWwsIH0gPSBpbnB1dHM7XG4gICAgcmV0dXJuIGFzeW5jICh7IGluaXQsIHBvbGwgfSwgb3B0aW9ucykgPT4ge1xuICAgICAgICBjb25zdCB7IHByb2Nlc3NSZXN1bHQsIHVwZGF0ZVN0YXRlLCB3aXRoT3BlcmF0aW9uTG9jYXRpb246IHdpdGhPcGVyYXRpb25Mb2NhdGlvbkNhbGxiYWNrLCBpbnRlcnZhbEluTXMgPSBjb25zdGFudHNfanNfMS5QT0xMX0lOVEVSVkFMX0lOX01TLCByZXN0b3JlRnJvbSwgfSA9IG9wdGlvbnMgfHwge307XG4gICAgICAgIGNvbnN0IHN0YXRlUHJveHkgPSBjcmVhdGVTdGF0ZVByb3h5KCk7XG4gICAgICAgIGNvbnN0IHdpdGhPcGVyYXRpb25Mb2NhdGlvbiA9IHdpdGhPcGVyYXRpb25Mb2NhdGlvbkNhbGxiYWNrXG4gICAgICAgICAgICA/ICgoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGNhbGxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybiAob3BlcmF0aW9uTG9jYXRpb24sIGlzVXBkYXRlZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNVcGRhdGVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgd2l0aE9wZXJhdGlvbkxvY2F0aW9uQ2FsbGJhY2sob3BlcmF0aW9uTG9jYXRpb24pO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghY2FsbGVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgd2l0aE9wZXJhdGlvbkxvY2F0aW9uQ2FsbGJhY2sob3BlcmF0aW9uTG9jYXRpb24pO1xuICAgICAgICAgICAgICAgICAgICBjYWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KSgpXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSByZXN0b3JlRnJvbVxuICAgICAgICAgICAgPyAoMCwgb3BlcmF0aW9uX2pzXzEuZGVzZXJpYWxpemVTdGF0ZSkocmVzdG9yZUZyb20pXG4gICAgICAgICAgICA6IGF3YWl0ICgwLCBvcGVyYXRpb25fanNfMS5pbml0T3BlcmF0aW9uKSh7XG4gICAgICAgICAgICAgICAgaW5pdCxcbiAgICAgICAgICAgICAgICBzdGF0ZVByb3h5LFxuICAgICAgICAgICAgICAgIHByb2Nlc3NSZXN1bHQsXG4gICAgICAgICAgICAgICAgZ2V0T3BlcmF0aW9uU3RhdHVzOiBnZXRTdGF0dXNGcm9tSW5pdGlhbFJlc3BvbnNlLFxuICAgICAgICAgICAgICAgIHdpdGhPcGVyYXRpb25Mb2NhdGlvbixcbiAgICAgICAgICAgICAgICBzZXRFcnJvckFzUmVzdWx0OiAhcmVzb2x2ZU9uVW5zdWNjZXNzZnVsLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIGxldCByZXN1bHRQcm9taXNlO1xuICAgICAgICBjb25zdCBhYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgICAgIGNvbnN0IGhhbmRsZXJzID0gbmV3IE1hcCgpO1xuICAgICAgICBjb25zdCBoYW5kbGVQcm9ncmVzc0V2ZW50cyA9IGFzeW5jICgpID0+IGhhbmRsZXJzLmZvckVhY2goKGgpID0+IGgoc3RhdGUpKTtcbiAgICAgICAgY29uc3QgY2FuY2VsRXJyTXNnID0gXCJPcGVyYXRpb24gd2FzIGNhbmNlbGVkXCI7XG4gICAgICAgIGxldCBjdXJyZW50UG9sbEludGVydmFsSW5NcyA9IGludGVydmFsSW5NcztcbiAgICAgICAgY29uc3QgcG9sbGVyID0ge1xuICAgICAgICAgICAgZ2V0T3BlcmF0aW9uU3RhdGU6ICgpID0+IHN0YXRlLFxuICAgICAgICAgICAgZ2V0UmVzdWx0OiAoKSA9PiBzdGF0ZS5yZXN1bHQsXG4gICAgICAgICAgICBpc0RvbmU6ICgpID0+IFtcInN1Y2NlZWRlZFwiLCBcImZhaWxlZFwiLCBcImNhbmNlbGVkXCJdLmluY2x1ZGVzKHN0YXRlLnN0YXR1cyksXG4gICAgICAgICAgICBpc1N0b3BwZWQ6ICgpID0+IHJlc3VsdFByb21pc2UgPT09IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHN0b3BQb2xsaW5nOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgYWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdG9TdHJpbmc6ICgpID0+IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgb25Qcm9ncmVzczogKGNhbGxiYWNrKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcyA9IFN5bWJvbCgpO1xuICAgICAgICAgICAgICAgIGhhbmRsZXJzLnNldChzLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgcmV0dXJuICgpID0+IGhhbmRsZXJzLmRlbGV0ZShzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwb2xsVW50aWxEb25lOiAocG9sbE9wdGlvbnMpID0+IChyZXN1bHRQcm9taXNlICE9PSBudWxsICYmIHJlc3VsdFByb21pc2UgIT09IHZvaWQgMCA/IHJlc3VsdFByb21pc2UgOiAocmVzdWx0UHJvbWlzZSA9IChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBhYm9ydFNpZ25hbDogaW5wdXRBYm9ydFNpZ25hbCB9ID0gcG9sbE9wdGlvbnMgfHwge307XG4gICAgICAgICAgICAgICAgLy8gSW4gdGhlIGZ1dHVyZSB3ZSBjYW4gdXNlIEFib3J0U2lnbmFsLmFueSgpIGluc3RlYWRcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBhYm9ydExpc3RlbmVyKCkge1xuICAgICAgICAgICAgICAgICAgICBhYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgYWJvcnRTaWduYWwgPSBhYm9ydENvbnRyb2xsZXIuc2lnbmFsO1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dEFib3J0U2lnbmFsID09PSBudWxsIHx8IGlucHV0QWJvcnRTaWduYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGlucHV0QWJvcnRTaWduYWwuYWJvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICBhYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIWFib3J0U2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRBYm9ydFNpZ25hbCA9PT0gbnVsbCB8fCBpbnB1dEFib3J0U2lnbmFsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBpbnB1dEFib3J0U2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBhYm9ydExpc3RlbmVyLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcG9sbGVyLmlzRG9uZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBwb2xsZXIucG9sbCh7IGFib3J0U2lnbmFsIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCFwb2xsZXIuaXNEb25lKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCAoMCwgY29yZV91dGlsXzEuZGVsYXkpKGN1cnJlbnRQb2xsSW50ZXJ2YWxJbk1zLCB7IGFib3J0U2lnbmFsIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHBvbGxlci5wb2xsKHsgYWJvcnRTaWduYWwgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIGlucHV0QWJvcnRTaWduYWwgPT09IG51bGwgfHwgaW5wdXRBYm9ydFNpZ25hbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogaW5wdXRBYm9ydFNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgYWJvcnRMaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyZXNvbHZlT25VbnN1Y2Nlc3NmdWwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBvbGxlci5nZXRSZXN1bHQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoc3RhdGUuc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwic3VjY2VlZGVkXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBvbGxlci5nZXRSZXN1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJjYW5jZWxlZFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihjYW5jZWxFcnJNc2cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImZhaWxlZFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IHN0YXRlLmVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIm5vdFN0YXJ0ZWRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJydW5uaW5nXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQb2xsaW5nIGNvbXBsZXRlZCB3aXRob3V0IHN1Y2NlZWRpbmcgb3IgZmFpbGluZ2ApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkoKS5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICAgICAgICByZXN1bHRQcm9taXNlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfSkpKSxcbiAgICAgICAgICAgIGFzeW5jIHBvbGwocG9sbE9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzb2x2ZU9uVW5zdWNjZXNzZnVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwb2xsZXIuaXNEb25lKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHN0YXRlLnN0YXR1cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcInN1Y2NlZWRlZFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJjYW5jZWxlZFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihjYW5jZWxFcnJNc2cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImZhaWxlZFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IHN0YXRlLmVycm9yO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGF3YWl0ICgwLCBvcGVyYXRpb25fanNfMS5wb2xsT3BlcmF0aW9uKSh7XG4gICAgICAgICAgICAgICAgICAgIHBvbGwsXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgICAgICAgICAgICBzdGF0ZVByb3h5LFxuICAgICAgICAgICAgICAgICAgICBnZXRPcGVyYXRpb25Mb2NhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgaXNPcGVyYXRpb25FcnJvcixcbiAgICAgICAgICAgICAgICAgICAgd2l0aE9wZXJhdGlvbkxvY2F0aW9uLFxuICAgICAgICAgICAgICAgICAgICBnZXRQb2xsaW5nSW50ZXJ2YWwsXG4gICAgICAgICAgICAgICAgICAgIGdldE9wZXJhdGlvblN0YXR1czogZ2V0U3RhdHVzRnJvbVBvbGxSZXNwb25zZSxcbiAgICAgICAgICAgICAgICAgICAgZ2V0UmVzb3VyY2VMb2NhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc1Jlc3VsdCxcbiAgICAgICAgICAgICAgICAgICAgZ2V0RXJyb3IsXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZVN0YXRlLFxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBwb2xsT3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgc2V0RGVsYXk6IChwb2xsSW50ZXJ2YWxJbk1zKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UG9sbEludGVydmFsSW5NcyA9IHBvbGxJbnRlcnZhbEluTXM7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHNldEVycm9yQXNSZXN1bHQ6ICFyZXNvbHZlT25VbnN1Y2Nlc3NmdWwsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlUHJvZ3Jlc3NFdmVudHMoKTtcbiAgICAgICAgICAgICAgICBpZiAoIXJlc29sdmVPblVuc3VjY2Vzc2Z1bCkge1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHN0YXRlLnN0YXR1cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImNhbmNlbGVkXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGNhbmNlbEVyck1zZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZmFpbGVkXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgc3RhdGUuZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcG9sbGVyO1xuICAgIH07XG59XG5leHBvcnRzLmJ1aWxkQ3JlYXRlUG9sbGVyID0gYnVpbGRDcmVhdGVQb2xsZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wb2xsZXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jcmVhdGVIdHRwUG9sbGVyID0gdm9pZCAwO1xuY29uc3Qgb3BlcmF0aW9uX2pzXzEgPSByZXF1aXJlKFwiLi9vcGVyYXRpb24uanNcIik7XG5jb25zdCBwb2xsZXJfanNfMSA9IHJlcXVpcmUoXCIuLi9wb2xsZXIvcG9sbGVyLmpzXCIpO1xuLyoqXG4gKiBDcmVhdGVzIGEgcG9sbGVyIHRoYXQgY2FuIGJlIHVzZWQgdG8gcG9sbCBhIGxvbmctcnVubmluZyBvcGVyYXRpb24uXG4gKiBAcGFyYW0gbHJvIC0gRGVzY3JpcHRpb24gb2YgdGhlIGxvbmctcnVubmluZyBvcGVyYXRpb25cbiAqIEBwYXJhbSBvcHRpb25zIC0gb3B0aW9ucyB0byBjb25maWd1cmUgdGhlIHBvbGxlclxuICogQHJldHVybnMgYW4gaW5pdGlhbGl6ZWQgcG9sbGVyXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUh0dHBQb2xsZXIobHJvLCBvcHRpb25zKSB7XG4gICAgY29uc3QgeyByZXNvdXJjZUxvY2F0aW9uQ29uZmlnLCBpbnRlcnZhbEluTXMsIHByb2Nlc3NSZXN1bHQsIHJlc3RvcmVGcm9tLCB1cGRhdGVTdGF0ZSwgd2l0aE9wZXJhdGlvbkxvY2F0aW9uLCByZXNvbHZlT25VbnN1Y2Nlc3NmdWwgPSBmYWxzZSwgfSA9IG9wdGlvbnMgfHwge307XG4gICAgcmV0dXJuICgwLCBwb2xsZXJfanNfMS5idWlsZENyZWF0ZVBvbGxlcikoe1xuICAgICAgICBnZXRTdGF0dXNGcm9tSW5pdGlhbFJlc3BvbnNlOiBvcGVyYXRpb25fanNfMS5nZXRTdGF0dXNGcm9tSW5pdGlhbFJlc3BvbnNlLFxuICAgICAgICBnZXRTdGF0dXNGcm9tUG9sbFJlc3BvbnNlOiBvcGVyYXRpb25fanNfMS5nZXRPcGVyYXRpb25TdGF0dXMsXG4gICAgICAgIGlzT3BlcmF0aW9uRXJyb3I6IG9wZXJhdGlvbl9qc18xLmlzT3BlcmF0aW9uRXJyb3IsXG4gICAgICAgIGdldE9wZXJhdGlvbkxvY2F0aW9uOiBvcGVyYXRpb25fanNfMS5nZXRPcGVyYXRpb25Mb2NhdGlvbixcbiAgICAgICAgZ2V0UmVzb3VyY2VMb2NhdGlvbjogb3BlcmF0aW9uX2pzXzEuZ2V0UmVzb3VyY2VMb2NhdGlvbixcbiAgICAgICAgZ2V0UG9sbGluZ0ludGVydmFsOiBvcGVyYXRpb25fanNfMS5wYXJzZVJldHJ5QWZ0ZXIsXG4gICAgICAgIGdldEVycm9yOiBvcGVyYXRpb25fanNfMS5nZXRFcnJvckZyb21SZXNwb25zZSxcbiAgICAgICAgcmVzb2x2ZU9uVW5zdWNjZXNzZnVsLFxuICAgIH0pKHtcbiAgICAgICAgaW5pdDogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBscm8uc2VuZEluaXRpYWxSZXF1ZXN0KCk7XG4gICAgICAgICAgICBjb25zdCBjb25maWcgPSAoMCwgb3BlcmF0aW9uX2pzXzEuaW5mZXJMcm9Nb2RlKSh7XG4gICAgICAgICAgICAgICAgcmF3UmVzcG9uc2U6IHJlc3BvbnNlLnJhd1Jlc3BvbnNlLFxuICAgICAgICAgICAgICAgIHJlcXVlc3RQYXRoOiBscm8ucmVxdWVzdFBhdGgsXG4gICAgICAgICAgICAgICAgcmVxdWVzdE1ldGhvZDogbHJvLnJlcXVlc3RNZXRob2QsXG4gICAgICAgICAgICAgICAgcmVzb3VyY2VMb2NhdGlvbkNvbmZpZyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oeyByZXNwb25zZSwgb3BlcmF0aW9uTG9jYXRpb246IGNvbmZpZyA9PT0gbnVsbCB8fCBjb25maWcgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbmZpZy5vcGVyYXRpb25Mb2NhdGlvbiwgcmVzb3VyY2VMb2NhdGlvbjogY29uZmlnID09PSBudWxsIHx8IGNvbmZpZyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29uZmlnLnJlc291cmNlTG9jYXRpb24gfSwgKChjb25maWcgPT09IG51bGwgfHwgY29uZmlnID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb25maWcubW9kZSkgPyB7IG1ldGFkYXRhOiB7IG1vZGU6IGNvbmZpZy5tb2RlIH0gfSA6IHt9KSk7XG4gICAgICAgIH0sXG4gICAgICAgIHBvbGw6IGxyby5zZW5kUG9sbFJlcXVlc3QsXG4gICAgfSwge1xuICAgICAgICBpbnRlcnZhbEluTXMsXG4gICAgICAgIHdpdGhPcGVyYXRpb25Mb2NhdGlvbixcbiAgICAgICAgcmVzdG9yZUZyb20sXG4gICAgICAgIHVwZGF0ZVN0YXRlLFxuICAgICAgICBwcm9jZXNzUmVzdWx0OiBwcm9jZXNzUmVzdWx0XG4gICAgICAgICAgICA/ICh7IGZsYXRSZXNwb25zZSB9LCBzdGF0ZSkgPT4gcHJvY2Vzc1Jlc3VsdChmbGF0UmVzcG9uc2UsIHN0YXRlKVxuICAgICAgICAgICAgOiAoeyBmbGF0UmVzcG9uc2UgfSkgPT4gZmxhdFJlc3BvbnNlLFxuICAgIH0pO1xufVxuZXhwb3J0cy5jcmVhdGVIdHRwUG9sbGVyID0gY3JlYXRlSHR0cFBvbGxlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBvbGxlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkdlbmVyaWNQb2xsT3BlcmF0aW9uID0gdm9pZCAwO1xuY29uc3Qgb3BlcmF0aW9uX2pzXzEgPSByZXF1aXJlKFwiLi4vLi4vaHR0cC9vcGVyYXRpb24uanNcIik7XG5jb25zdCBsb2dnZXJfanNfMSA9IHJlcXVpcmUoXCIuLi8uLi9sb2dnZXIuanNcIik7XG5jb25zdCBjcmVhdGVTdGF0ZVByb3h5ID0gKCkgPT4gKHtcbiAgICBpbml0U3RhdGU6IChjb25maWcpID0+ICh7IGNvbmZpZywgaXNTdGFydGVkOiB0cnVlIH0pLFxuICAgIHNldENhbmNlbGVkOiAoc3RhdGUpID0+IChzdGF0ZS5pc0NhbmNlbGxlZCA9IHRydWUpLFxuICAgIHNldEVycm9yOiAoc3RhdGUsIGVycm9yKSA9PiAoc3RhdGUuZXJyb3IgPSBlcnJvciksXG4gICAgc2V0UmVzdWx0OiAoc3RhdGUsIHJlc3VsdCkgPT4gKHN0YXRlLnJlc3VsdCA9IHJlc3VsdCksXG4gICAgc2V0UnVubmluZzogKHN0YXRlKSA9PiAoc3RhdGUuaXNTdGFydGVkID0gdHJ1ZSksXG4gICAgc2V0U3VjY2VlZGVkOiAoc3RhdGUpID0+IChzdGF0ZS5pc0NvbXBsZXRlZCA9IHRydWUpLFxuICAgIHNldEZhaWxlZDogKCkgPT4ge1xuICAgICAgICAvKiogZW1wdHkgYm9keSAqL1xuICAgIH0sXG4gICAgZ2V0RXJyb3I6IChzdGF0ZSkgPT4gc3RhdGUuZXJyb3IsXG4gICAgZ2V0UmVzdWx0OiAoc3RhdGUpID0+IHN0YXRlLnJlc3VsdCxcbiAgICBpc0NhbmNlbGVkOiAoc3RhdGUpID0+ICEhc3RhdGUuaXNDYW5jZWxsZWQsXG4gICAgaXNGYWlsZWQ6IChzdGF0ZSkgPT4gISFzdGF0ZS5lcnJvcixcbiAgICBpc1J1bm5pbmc6IChzdGF0ZSkgPT4gISFzdGF0ZS5pc1N0YXJ0ZWQsXG4gICAgaXNTdWNjZWVkZWQ6IChzdGF0ZSkgPT4gQm9vbGVhbihzdGF0ZS5pc0NvbXBsZXRlZCAmJiAhc3RhdGUuaXNDYW5jZWxsZWQgJiYgIXN0YXRlLmVycm9yKSxcbn0pO1xuY2xhc3MgR2VuZXJpY1BvbGxPcGVyYXRpb24ge1xuICAgIGNvbnN0cnVjdG9yKHN0YXRlLCBscm8sIHNldEVycm9yQXNSZXN1bHQsIGxyb1Jlc291cmNlTG9jYXRpb25Db25maWcsIHByb2Nlc3NSZXN1bHQsIHVwZGF0ZVN0YXRlLCBpc0RvbmUpIHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICAgICAgICB0aGlzLmxybyA9IGxybztcbiAgICAgICAgdGhpcy5zZXRFcnJvckFzUmVzdWx0ID0gc2V0RXJyb3JBc1Jlc3VsdDtcbiAgICAgICAgdGhpcy5scm9SZXNvdXJjZUxvY2F0aW9uQ29uZmlnID0gbHJvUmVzb3VyY2VMb2NhdGlvbkNvbmZpZztcbiAgICAgICAgdGhpcy5wcm9jZXNzUmVzdWx0ID0gcHJvY2Vzc1Jlc3VsdDtcbiAgICAgICAgdGhpcy51cGRhdGVTdGF0ZSA9IHVwZGF0ZVN0YXRlO1xuICAgICAgICB0aGlzLmlzRG9uZSA9IGlzRG9uZTtcbiAgICB9XG4gICAgc2V0UG9sbGVyQ29uZmlnKHBvbGxlckNvbmZpZykge1xuICAgICAgICB0aGlzLnBvbGxlckNvbmZpZyA9IHBvbGxlckNvbmZpZztcbiAgICB9XG4gICAgYXN5bmMgdXBkYXRlKG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBzdGF0ZVByb3h5ID0gY3JlYXRlU3RhdGVQcm94eSgpO1xuICAgICAgICBpZiAoIXRoaXMuc3RhdGUuaXNTdGFydGVkKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCB0aGlzLnN0YXRlKSwgKGF3YWl0ICgwLCBvcGVyYXRpb25fanNfMS5pbml0SHR0cE9wZXJhdGlvbikoe1xuICAgICAgICAgICAgICAgIGxybzogdGhpcy5scm8sXG4gICAgICAgICAgICAgICAgc3RhdGVQcm94eSxcbiAgICAgICAgICAgICAgICByZXNvdXJjZUxvY2F0aW9uQ29uZmlnOiB0aGlzLmxyb1Jlc291cmNlTG9jYXRpb25Db25maWcsXG4gICAgICAgICAgICAgICAgcHJvY2Vzc1Jlc3VsdDogdGhpcy5wcm9jZXNzUmVzdWx0LFxuICAgICAgICAgICAgICAgIHNldEVycm9yQXNSZXN1bHQ6IHRoaXMuc2V0RXJyb3JBc1Jlc3VsdCxcbiAgICAgICAgICAgIH0pKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdXBkYXRlU3RhdGUgPSB0aGlzLnVwZGF0ZVN0YXRlO1xuICAgICAgICBjb25zdCBpc0RvbmUgPSB0aGlzLmlzRG9uZTtcbiAgICAgICAgaWYgKCF0aGlzLnN0YXRlLmlzQ29tcGxldGVkICYmIHRoaXMuc3RhdGUuZXJyb3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYXdhaXQgKDAsIG9wZXJhdGlvbl9qc18xLnBvbGxIdHRwT3BlcmF0aW9uKSh7XG4gICAgICAgICAgICAgICAgbHJvOiB0aGlzLmxybyxcbiAgICAgICAgICAgICAgICBzdGF0ZTogdGhpcy5zdGF0ZSxcbiAgICAgICAgICAgICAgICBzdGF0ZVByb3h5LFxuICAgICAgICAgICAgICAgIHByb2Nlc3NSZXN1bHQ6IHRoaXMucHJvY2Vzc1Jlc3VsdCxcbiAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZTogdXBkYXRlU3RhdGVcbiAgICAgICAgICAgICAgICAgICAgPyAoc3RhdGUsIHsgcmF3UmVzcG9uc2UgfSkgPT4gdXBkYXRlU3RhdGUoc3RhdGUsIHJhd1Jlc3BvbnNlKVxuICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBpc0RvbmU6IGlzRG9uZVxuICAgICAgICAgICAgICAgICAgICA/ICh7IGZsYXRSZXNwb25zZSB9LCBzdGF0ZSkgPT4gaXNEb25lKGZsYXRSZXNwb25zZSwgc3RhdGUpXG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICAgICAgc2V0RGVsYXk6IChpbnRlcnZhbEluTXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wb2xsZXJDb25maWcuaW50ZXJ2YWxJbk1zID0gaW50ZXJ2YWxJbk1zO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2V0RXJyb3JBc1Jlc3VsdDogdGhpcy5zZXRFcnJvckFzUmVzdWx0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgKF9hID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpcmVQcm9ncmVzcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwob3B0aW9ucywgdGhpcy5zdGF0ZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBhc3luYyBjYW5jZWwoKSB7XG4gICAgICAgIGxvZ2dlcl9qc18xLmxvZ2dlci5lcnJvcihcImBjYW5jZWxPcGVyYXRpb25gIGlzIGRlcHJlY2F0ZWQgYmVjYXVzZSBpdCB3YXNuJ3QgaW1wbGVtZW50ZWRcIik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXJpYWxpemVzIHRoZSBQb2xsZXIgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgc3RhdGU6IHRoaXMuc3RhdGUsXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuR2VuZXJpY1BvbGxPcGVyYXRpb24gPSBHZW5lcmljUG9sbE9wZXJhdGlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW9wZXJhdGlvbi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlBvbGxlciA9IGV4cG9ydHMuUG9sbGVyQ2FuY2VsbGVkRXJyb3IgPSBleHBvcnRzLlBvbGxlclN0b3BwZWRFcnJvciA9IHZvaWQgMDtcbi8qKlxuICogV2hlbiBhIHBvbGxlciBpcyBtYW51YWxseSBzdG9wcGVkIHRocm91Z2ggdGhlIGBzdG9wUG9sbGluZ2AgbWV0aG9kLFxuICogdGhlIHBvbGxlciB3aWxsIGJlIHJlamVjdGVkIHdpdGggYW4gaW5zdGFuY2Ugb2YgdGhlIFBvbGxlclN0b3BwZWRFcnJvci5cbiAqL1xuY2xhc3MgUG9sbGVyU3RvcHBlZEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2UpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiUG9sbGVyU3RvcHBlZEVycm9yXCI7XG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBQb2xsZXJTdG9wcGVkRXJyb3IucHJvdG90eXBlKTtcbiAgICB9XG59XG5leHBvcnRzLlBvbGxlclN0b3BwZWRFcnJvciA9IFBvbGxlclN0b3BwZWRFcnJvcjtcbi8qKlxuICogV2hlbiB0aGUgb3BlcmF0aW9uIGlzIGNhbmNlbGxlZCwgdGhlIHBvbGxlciB3aWxsIGJlIHJlamVjdGVkIHdpdGggYW4gaW5zdGFuY2VcbiAqIG9mIHRoZSBQb2xsZXJDYW5jZWxsZWRFcnJvci5cbiAqL1xuY2xhc3MgUG9sbGVyQ2FuY2VsbGVkRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZSkge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJQb2xsZXJDYW5jZWxsZWRFcnJvclwiO1xuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgUG9sbGVyQ2FuY2VsbGVkRXJyb3IucHJvdG90eXBlKTtcbiAgICB9XG59XG5leHBvcnRzLlBvbGxlckNhbmNlbGxlZEVycm9yID0gUG9sbGVyQ2FuY2VsbGVkRXJyb3I7XG4vKipcbiAqIEEgY2xhc3MgdGhhdCByZXByZXNlbnRzIHRoZSBkZWZpbml0aW9uIG9mIGEgcHJvZ3JhbSB0aGF0IHBvbGxzIHRocm91Z2ggY29uc2VjdXRpdmUgcmVxdWVzdHNcbiAqIHVudGlsIGl0IHJlYWNoZXMgYSBzdGF0ZSBvZiBjb21wbGV0aW9uLlxuICpcbiAqIEEgcG9sbGVyIGNhbiBiZSBleGVjdXRlZCBtYW51YWxseSwgYnkgcG9sbGluZyByZXF1ZXN0IGJ5IHJlcXVlc3QgYnkgY2FsbGluZyB0byB0aGUgYHBvbGwoKWAgbWV0aG9kIHJlcGVhdGVkbHksIHVudGlsIGl0cyBvcGVyYXRpb24gaXMgY29tcGxldGVkLlxuICogSXQgYWxzbyBwcm92aWRlcyBhIHdheSB0byB3YWl0IHVudGlsIHRoZSBvcGVyYXRpb24gY29tcGxldGVzLCBieSBjYWxsaW5nIGBwb2xsVW50aWxEb25lKClgIGFuZCB3YWl0aW5nIHVudGlsIHRoZSBvcGVyYXRpb24gZmluaXNoZXMuXG4gKiBQb2xsZXJzIGNhbiBhbHNvIHJlcXVlc3QgdGhlIGNhbmNlbGxhdGlvbiBvZiB0aGUgb25nb2luZyBwcm9jZXNzIHRvIHdob20gaXMgcHJvdmlkaW5nIHRoZSB1bmRlcmx5aW5nIGxvbmcgcnVubmluZyBvcGVyYXRpb24uXG4gKlxuICogYGBgdHNcbiAqIGNvbnN0IHBvbGxlciA9IG5ldyBNeVBvbGxlcigpO1xuICpcbiAqIC8vIFBvbGxpbmcganVzdCBvbmNlOlxuICogYXdhaXQgcG9sbGVyLnBvbGwoKTtcbiAqXG4gKiAvLyBXZSBjYW4gdHJ5IHRvIGNhbmNlbCB0aGUgcmVxdWVzdCBoZXJlLCBieSBjYWxsaW5nOlxuICogLy9cbiAqIC8vICAgICBhd2FpdCBwb2xsZXIuY2FuY2VsT3BlcmF0aW9uKCk7XG4gKiAvL1xuICpcbiAqIC8vIEdldHRpbmcgdGhlIGZpbmFsIHJlc3VsdDpcbiAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBvbGxlci5wb2xsVW50aWxEb25lKCk7XG4gKiBgYGBcbiAqXG4gKiBUaGUgUG9sbGVyIGlzIGRlZmluZWQgYnkgdHdvIHR5cGVzLCBhIHR5cGUgcmVwcmVzZW50aW5nIHRoZSBzdGF0ZSBvZiB0aGUgcG9sbGVyLCB3aGljaFxuICogbXVzdCBpbmNsdWRlIGEgYmFzaWMgc2V0IG9mIHByb3BlcnRpZXMgZnJvbSBgUG9sbE9wZXJhdGlvblN0YXRlPFRSZXN1bHQ+YCxcbiAqIGFuZCBhIHJldHVybiB0eXBlIGRlZmluZWQgYnkgYFRSZXN1bHRgLCB3aGljaCBjYW4gYmUgYW55dGhpbmcuXG4gKlxuICogVGhlIFBvbGxlciBjbGFzcyBpbXBsZW1lbnRzIHRoZSBgUG9sbGVyTGlrZWAgaW50ZXJmYWNlLCB3aGljaCBhbGxvd3MgcG9sbGVyIGltcGxlbWVudGF0aW9ucyB0byBhdm9pZCBoYXZpbmdcbiAqIHRvIGV4cG9ydCB0aGUgUG9sbGVyJ3MgY2xhc3MgZGlyZWN0bHksIGFuZCBpbnN0ZWFkIG9ubHkgZXhwb3J0IHRoZSBhbHJlYWR5IGluc3RhbnRpYXRlZCBwb2xsZXIgd2l0aCB0aGUgUG9sbGVyTGlrZSB0eXBlLlxuICpcbiAqIGBgYHRzXG4gKiBjbGFzcyBDbGllbnQge1xuICogICBwdWJsaWMgYXN5bmMgbWFrZVBvbGxlcjogUG9sbGVyTGlrZTxNeU9wZXJhdGlvblN0YXRlLCBNeVJlc3VsdD4ge1xuICogICAgIGNvbnN0IHBvbGxlciA9IG5ldyBNeVBvbGxlcih7fSk7XG4gKiAgICAgLy8gSXQgbWlnaHQgYmUgcHJlZmVycmVkIHRvIHJldHVybiB0aGUgcG9sbGVyIGFmdGVyIHRoZSBmaXJzdCByZXF1ZXN0IGlzIG1hZGUsXG4gKiAgICAgLy8gc28gdGhhdCBzb21lIGluZm9ybWF0aW9uIGNhbiBiZSBvYnRhaW5lZCByaWdodCBhd2F5LlxuICogICAgIGF3YWl0IHBvbGxlci5wb2xsKCk7XG4gKiAgICAgcmV0dXJuIHBvbGxlcjtcbiAqICAgfVxuICogfVxuICpcbiAqIGNvbnN0IHBvbGxlcjogUG9sbGVyTGlrZTxNeU9wZXJhdGlvblN0YXRlLCBNeVJlc3VsdD4gPSBteUNsaWVudC5tYWtlUG9sbGVyKCk7XG4gKiBgYGBcbiAqXG4gKiBBIHBvbGxlciBjYW4gYmUgY3JlYXRlZCB0aHJvdWdoIGl0cyBjb25zdHJ1Y3RvciwgdGhlbiBpdCBjYW4gYmUgcG9sbGVkIHVudGlsIGl0J3MgY29tcGxldGVkLlxuICogQXQgYW55IHBvaW50IGluIHRpbWUsIHRoZSBzdGF0ZSBvZiB0aGUgcG9sbGVyIGNhbiBiZSBvYnRhaW5lZCB3aXRob3V0IGRlbGF5IHRocm91Z2ggdGhlIGdldE9wZXJhdGlvblN0YXRlIG1ldGhvZC5cbiAqIEF0IGFueSBwb2ludCBpbiB0aW1lLCB0aGUgaW50ZXJtZWRpYXRlIGZvcm1zIG9mIHRoZSByZXN1bHQgdHlwZSBjYW4gYmUgcmVxdWVzdGVkIHdpdGhvdXQgZGVsYXkuXG4gKiBPbmNlIHRoZSB1bmRlcmx5aW5nIG9wZXJhdGlvbiBpcyBtYXJrZWQgYXMgY29tcGxldGVkLCB0aGUgcG9sbGVyIHdpbGwgc3RvcCBhbmQgdGhlIGZpbmFsIHZhbHVlIHdpbGwgYmUgcmV0dXJuZWQuXG4gKlxuICogYGBgdHNcbiAqIGNvbnN0IHBvbGxlciA9IG15Q2xpZW50Lm1ha2VQb2xsZXIoKTtcbiAqIGNvbnN0IHN0YXRlOiBNeU9wZXJhdGlvblN0YXRlID0gcG9sbGVyLmdldE9wZXJhdGlvblN0YXRlKCk7XG4gKlxuICogLy8gVGhlIGludGVybWVkaWF0ZSByZXN1bHQgY2FuIGJlIG9idGFpbmVkIGF0IGFueSB0aW1lLlxuICogY29uc3QgcmVzdWx0OiBNeVJlc3VsdCB8IHVuZGVmaW5lZCA9IHBvbGxlci5nZXRSZXN1bHQoKTtcbiAqXG4gKiAvLyBUaGUgZmluYWwgcmVzdWx0IGNhbiBvbmx5IGJlIG9idGFpbmVkIGFmdGVyIHRoZSBwb2xsZXIgZmluaXNoZXMuXG4gKiBjb25zdCByZXN1bHQ6IE15UmVzdWx0ID0gYXdhaXQgcG9sbGVyLnBvbGxVbnRpbERvbmUoKTtcbiAqIGBgYFxuICpcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG5jbGFzcyBQb2xsZXIge1xuICAgIC8qKlxuICAgICAqIEEgcG9sbGVyIG5lZWRzIHRvIGJlIGluaXRpYWxpemVkIGJ5IHBhc3NpbmcgaW4gYXQgbGVhc3QgdGhlIGJhc2ljIHByb3BlcnRpZXMgb2YgdGhlIGBQb2xsT3BlcmF0aW9uPFRTdGF0ZSwgVFJlc3VsdD5gLlxuICAgICAqXG4gICAgICogV2hlbiB3cml0aW5nIGFuIGltcGxlbWVudGF0aW9uIG9mIGEgUG9sbGVyLCB0aGlzIGltcGxlbWVudGF0aW9uIG5lZWRzIHRvIGRlYWwgd2l0aCB0aGUgaW5pdGlhbGl6YXRpb25cbiAgICAgKiBvZiBhbnkgY3VzdG9tIHN0YXRlIGJleW9uZCB0aGUgYmFzaWMgZGVmaW5pdGlvbiBvZiB0aGUgcG9sbGVyLiBUaGUgYmFzaWMgcG9sbGVyIGFzc3VtZXMgdGhhdCB0aGUgcG9sbGVyJ3NcbiAgICAgKiBvcGVyYXRpb24gaGFzIGFscmVhZHkgYmVlbiBkZWZpbmVkLCBhdCBsZWFzdCBpdHMgYmFzaWMgcHJvcGVydGllcy4gVGhlIGNvZGUgYmVsb3cgc2hvd3MgaG93IHRvIGFwcHJvYWNoXG4gICAgICogdGhlIGRlZmluaXRpb24gb2YgdGhlIGNvbnN0cnVjdG9yIG9mIGEgbmV3IGN1c3RvbSBwb2xsZXIuXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGV4cG9ydCBjbGFzcyBNeVBvbGxlciBleHRlbmRzIFBvbGxlcjxNeU9wZXJhdGlvblN0YXRlLCBzdHJpbmc+IHtcbiAgICAgKiAgIGNvbnN0cnVjdG9yKHtcbiAgICAgKiAgICAgLy8gQW55dGhpbmcgeW91IG1pZ2h0IG5lZWQgb3V0c2lkZSBvZiB0aGUgYmFzaWNzXG4gICAgICogICB9KSB7XG4gICAgICogICAgIGxldCBzdGF0ZTogTXlPcGVyYXRpb25TdGF0ZSA9IHtcbiAgICAgKiAgICAgICBwcml2YXRlUHJvcGVydHk6IHByaXZhdGUsXG4gICAgICogICAgICAgcHVibGljUHJvcGVydHk6IHB1YmxpYyxcbiAgICAgKiAgICAgfTtcbiAgICAgKlxuICAgICAqICAgICBjb25zdCBvcGVyYXRpb24gPSB7XG4gICAgICogICAgICAgc3RhdGUsXG4gICAgICogICAgICAgdXBkYXRlLFxuICAgICAqICAgICAgIGNhbmNlbCxcbiAgICAgKiAgICAgICB0b1N0cmluZ1xuICAgICAqICAgICB9XG4gICAgICpcbiAgICAgKiAgICAgLy8gU2VuZGluZyB0aGUgb3BlcmF0aW9uIHRvIHRoZSBwYXJlbnQncyBjb25zdHJ1Y3Rvci5cbiAgICAgKiAgICAgc3VwZXIob3BlcmF0aW9uKTtcbiAgICAgKlxuICAgICAqICAgICAvLyBZb3UgY2FuIGFzc2lnbiBtb3JlIGxvY2FsIHByb3BlcnRpZXMgaGVyZS5cbiAgICAgKiAgIH1cbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBJbnNpZGUgb2YgdGhpcyBjb25zdHJ1Y3RvciwgYSBuZXcgcHJvbWlzZSBpcyBjcmVhdGVkLiBUaGlzIHdpbGwgYmUgdXNlZCB0b1xuICAgICAqIHRlbGwgdGhlIHVzZXIgd2hlbiB0aGUgcG9sbGVyIGZpbmlzaGVzIChzZWUgYHBvbGxVbnRpbERvbmUoKWApLiBUaGUgcHJvbWlzZSdzXG4gICAgICogcmVzb2x2ZSBhbmQgcmVqZWN0IG1ldGhvZHMgYXJlIGFsc28gdXNlZCBpbnRlcm5hbGx5IHRvIGNvbnRyb2wgd2hlbiB0byByZXNvbHZlXG4gICAgICogb3IgcmVqZWN0IGFueW9uZSB3YWl0aW5nIGZvciB0aGUgcG9sbGVyIHRvIGZpbmlzaC5cbiAgICAgKlxuICAgICAqIFRoZSBjb25zdHJ1Y3RvciBvZiBhIGN1c3RvbSBpbXBsZW1lbnRhdGlvbiBvZiBhIHBvbGxlciBpcyB3aGVyZSBhbnkgc2VyaWFsaXplZCB2ZXJzaW9uIG9mXG4gICAgICogYSBwcmV2aW91cyBwb2xsZXIncyBvcGVyYXRpb24gc2hvdWxkIGJlIGRlc2VyaWFsaXplZCBpbnRvIHRoZSBvcGVyYXRpb24gc2VudCB0byB0aGVcbiAgICAgKiBiYXNlIGNvbnN0cnVjdG9yLiBGb3IgZXhhbXBsZTpcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogZXhwb3J0IGNsYXNzIE15UG9sbGVyIGV4dGVuZHMgUG9sbGVyPE15T3BlcmF0aW9uU3RhdGUsIHN0cmluZz4ge1xuICAgICAqICAgY29uc3RydWN0b3IoXG4gICAgICogICAgIGJhc2VPcGVyYXRpb246IHN0cmluZyB8IHVuZGVmaW5lZFxuICAgICAqICAgKSB7XG4gICAgICogICAgIGxldCBzdGF0ZTogTXlPcGVyYXRpb25TdGF0ZSA9IHt9O1xuICAgICAqICAgICBpZiAoYmFzZU9wZXJhdGlvbikge1xuICAgICAqICAgICAgIHN0YXRlID0ge1xuICAgICAqICAgICAgICAgLi4uSlNPTi5wYXJzZShiYXNlT3BlcmF0aW9uKS5zdGF0ZSxcbiAgICAgKiAgICAgICAgIC4uLnN0YXRlXG4gICAgICogICAgICAgfTtcbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjb25zdCBvcGVyYXRpb24gPSB7XG4gICAgICogICAgICAgc3RhdGUsXG4gICAgICogICAgICAgLy8gLi4uXG4gICAgICogICAgIH1cbiAgICAgKiAgICAgc3VwZXIob3BlcmF0aW9uKTtcbiAgICAgKiAgIH1cbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3BlcmF0aW9uIC0gTXVzdCBjb250YWluIHRoZSBiYXNpYyBwcm9wZXJ0aWVzIG9mIGBQb2xsT3BlcmF0aW9uPFN0YXRlLCBUUmVzdWx0PmAuXG4gICAgICovXG4gICAgY29uc3RydWN0b3Iob3BlcmF0aW9uKSB7XG4gICAgICAgIC8qKiBjb250cm9scyB3aGV0aGVyIHRvIHRocm93IGFuIGVycm9yIGlmIHRoZSBvcGVyYXRpb24gZmFpbGVkIG9yIHdhcyBjYW5jZWxlZC4gKi9cbiAgICAgICAgdGhpcy5yZXNvbHZlT25VbnN1Y2Nlc3NmdWwgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5wb2xsUHJvZ3Jlc3NDYWxsYmFja3MgPSBbXTtcbiAgICAgICAgdGhpcy5vcGVyYXRpb24gPSBvcGVyYXRpb247XG4gICAgICAgIHRoaXMucHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICAgICAgICB0aGlzLnJlamVjdCA9IHJlamVjdDtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIFRoaXMgcHJldmVudHMgdGhlIFVuaGFuZGxlZFByb21pc2VSZWplY3Rpb25XYXJuaW5nIGluIG5vZGUuanMgZnJvbSBiZWluZyB0aHJvd24uXG4gICAgICAgIC8vIFRoZSBhYm92ZSB3YXJuaW5nIHdvdWxkIGdldCB0aHJvd24gaWYgYHBvbGxlci5wb2xsYCBpcyBjYWxsZWQsIGl0IHJldHVybnMgYW4gZXJyb3IsXG4gICAgICAgIC8vIGFuZCBwdWxsVW50aWxEb25lIGRpZCBub3QgaGF2ZSBhIC5jYXRjaCBvciBhd2FpdCB0cnkvY2F0Y2ggb24gaXQncyByZXR1cm4gdmFsdWUuXG4gICAgICAgIHRoaXMucHJvbWlzZS5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgICAvKiBpbnRlbnRpb25hbGx5IGJsYW5rICovXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTdGFydHMgYSBsb29wIHRoYXQgd2lsbCBicmVhayBvbmx5IGlmIHRoZSBwb2xsZXIgaXMgZG9uZVxuICAgICAqIG9yIGlmIHRoZSBwb2xsZXIgaXMgc3RvcHBlZC5cbiAgICAgKi9cbiAgICBhc3luYyBzdGFydFBvbGxpbmcocG9sbE9wdGlvbnMgPSB7fSkge1xuICAgICAgICBpZiAodGhpcy5zdG9wcGVkKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3BwZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAoIXRoaXMuaXNTdG9wcGVkKCkgJiYgIXRoaXMuaXNEb25lKCkpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucG9sbChwb2xsT3B0aW9ucyk7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmRlbGF5KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogcG9sbE9uY2UgZG9lcyBvbmUgcG9sbGluZywgYnkgY2FsbGluZyB0byB0aGUgdXBkYXRlIG1ldGhvZCBvZiB0aGUgdW5kZXJseWluZ1xuICAgICAqIHBvbGwgb3BlcmF0aW9uIHRvIG1ha2UgYW55IHJlbGV2YW50IGNoYW5nZSBlZmZlY3RpdmUuXG4gICAgICpcbiAgICAgKiBJdCBvbmx5IG9wdGlvbmFsbHkgcmVjZWl2ZXMgYW4gb2JqZWN0IHdpdGggYW4gYWJvcnRTaWduYWwgcHJvcGVydHksIGZyb20gXFxAYXp1cmUvYWJvcnQtY29udHJvbGxlcidzIEFib3J0U2lnbmFsTGlrZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgcHJvcGVydGllcyBwYXNzZWQgdG8gdGhlIG9wZXJhdGlvbidzIHVwZGF0ZSBtZXRob2QuXG4gICAgICovXG4gICAgYXN5bmMgcG9sbE9uY2Uob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGlmICghdGhpcy5pc0RvbmUoKSkge1xuICAgICAgICAgICAgdGhpcy5vcGVyYXRpb24gPSBhd2FpdCB0aGlzLm9wZXJhdGlvbi51cGRhdGUoe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGZpcmVQcm9ncmVzczogdGhpcy5maXJlUHJvZ3Jlc3MuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJvY2Vzc1VwZGF0ZWRTdGF0ZSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBmaXJlUHJvZ3Jlc3MgY2FsbHMgdGhlIGZ1bmN0aW9ucyBwYXNzZWQgaW4gdmlhIG9uUHJvZ3Jlc3MgdGhlIG1ldGhvZCBvZiB0aGUgcG9sbGVyLlxuICAgICAqXG4gICAgICogSXQgbG9vcHMgb3ZlciBhbGwgb2YgdGhlIGNhbGxiYWNrcyByZWNlaXZlZCBmcm9tIG9uUHJvZ3Jlc3MsIGFuZCBleGVjdXRlcyB0aGVtLCBzZW5kaW5nIHRoZW1cbiAgICAgKiB0aGUgY3VycmVudCBvcGVyYXRpb24gc3RhdGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc3RhdGUgLSBUaGUgY3VycmVudCBvcGVyYXRpb24gc3RhdGUuXG4gICAgICovXG4gICAgZmlyZVByb2dyZXNzKHN0YXRlKSB7XG4gICAgICAgIGZvciAoY29uc3QgY2FsbGJhY2sgb2YgdGhpcy5wb2xsUHJvZ3Jlc3NDYWxsYmFja3MpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKHN0YXRlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbnZva2VzIHRoZSB1bmRlcmx5aW5nIG9wZXJhdGlvbidzIGNhbmNlbCBtZXRob2QuXG4gICAgICovXG4gICAgYXN5bmMgY2FuY2VsT25jZShvcHRpb25zID0ge30pIHtcbiAgICAgICAgdGhpcy5vcGVyYXRpb24gPSBhd2FpdCB0aGlzLm9wZXJhdGlvbi5jYW5jZWwob3B0aW9ucyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBwcm9taXNlIHRoYXQgd2lsbCByZXNvbHZlIG9uY2UgYSBzaW5nbGUgcG9sbGluZyByZXF1ZXN0IGZpbmlzaGVzLlxuICAgICAqIEl0IGRvZXMgdGhpcyBieSBjYWxsaW5nIHRoZSB1cGRhdGUgbWV0aG9kIG9mIHRoZSBQb2xsZXIncyBvcGVyYXRpb24uXG4gICAgICpcbiAgICAgKiBJdCBvbmx5IG9wdGlvbmFsbHkgcmVjZWl2ZXMgYW4gb2JqZWN0IHdpdGggYW4gYWJvcnRTaWduYWwgcHJvcGVydHksIGZyb20gXFxAYXp1cmUvYWJvcnQtY29udHJvbGxlcidzIEFib3J0U2lnbmFsTGlrZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgcHJvcGVydGllcyBwYXNzZWQgdG8gdGhlIG9wZXJhdGlvbidzIHVwZGF0ZSBtZXRob2QuXG4gICAgICovXG4gICAgcG9sbChvcHRpb25zID0ge30pIHtcbiAgICAgICAgaWYgKCF0aGlzLnBvbGxPbmNlUHJvbWlzZSkge1xuICAgICAgICAgICAgdGhpcy5wb2xsT25jZVByb21pc2UgPSB0aGlzLnBvbGxPbmNlKG9wdGlvbnMpO1xuICAgICAgICAgICAgY29uc3QgY2xlYXJQb2xsT25jZVByb21pc2UgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb2xsT25jZVByb21pc2UgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5wb2xsT25jZVByb21pc2UudGhlbihjbGVhclBvbGxPbmNlUHJvbWlzZSwgY2xlYXJQb2xsT25jZVByb21pc2UpLmNhdGNoKHRoaXMucmVqZWN0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5wb2xsT25jZVByb21pc2U7XG4gICAgfVxuICAgIHByb2Nlc3NVcGRhdGVkU3RhdGUoKSB7XG4gICAgICAgIGlmICh0aGlzLm9wZXJhdGlvbi5zdGF0ZS5lcnJvcikge1xuICAgICAgICAgICAgdGhpcy5zdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghdGhpcy5yZXNvbHZlT25VbnN1Y2Nlc3NmdWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlamVjdCh0aGlzLm9wZXJhdGlvbi5zdGF0ZS5lcnJvcik7XG4gICAgICAgICAgICAgICAgdGhyb3cgdGhpcy5vcGVyYXRpb24uc3RhdGUuZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3BlcmF0aW9uLnN0YXRlLmlzQ2FuY2VsbGVkKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCF0aGlzLnJlc29sdmVPblVuc3VjY2Vzc2Z1bCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IFBvbGxlckNhbmNlbGxlZEVycm9yKFwiT3BlcmF0aW9uIHdhcyBjYW5jZWxlZFwiKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNEb25lKCkgJiYgdGhpcy5yZXNvbHZlKSB7XG4gICAgICAgICAgICAvLyBJZiB0aGUgcG9sbGVyIGhhcyBmaW5pc2hlZCBwb2xsaW5nLCB0aGlzIG1lYW5zIHdlIG5vdyBoYXZlIGEgcmVzdWx0LlxuICAgICAgICAgICAgLy8gSG93ZXZlciwgaXQgY2FuIGJlIHRoZSBjYXNlIHRoYXQgVFJlc3VsdCBpcyBpbnN0YW50aWF0ZWQgdG8gdm9pZCwgc29cbiAgICAgICAgICAgIC8vIHdlIGFyZSBub3QgZXhwZWN0aW5nIGEgcmVzdWx0IGFueXdheS4gVG8gYXNzZXJ0IHRoYXQgd2UgbWlnaHQgbm90XG4gICAgICAgICAgICAvLyBoYXZlIGEgcmVzdWx0IGV2ZW50dWFsbHkgYWZ0ZXIgZmluaXNoaW5nIHBvbGxpbmcsIHdlIGNhc3QgdGhlIHJlc3VsdFxuICAgICAgICAgICAgLy8gdG8gVFJlc3VsdC5cbiAgICAgICAgICAgIHRoaXMucmVzb2x2ZSh0aGlzLmdldFJlc3VsdCgpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHdpbGwgcmVzb2x2ZSBvbmNlIHRoZSB1bmRlcmx5aW5nIG9wZXJhdGlvbiBpcyBjb21wbGV0ZWQuXG4gICAgICovXG4gICAgYXN5bmMgcG9sbFVudGlsRG9uZShwb2xsT3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGlmICh0aGlzLnN0b3BwZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRQb2xsaW5nKHBvbGxPcHRpb25zKS5jYXRjaCh0aGlzLnJlamVjdCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSB0aGUgc3RhdGUgY291bGQgaGF2ZSBiZWVuIHVwZGF0ZWQgYnlcbiAgICAgICAgLy8gYGNhbmNlbE9wZXJhdGlvbmAsIGUuZy4gdGhlIG9wZXJhdGlvbiBpcyBjYW5jZWxlZCBvciBhbiBlcnJvciBvY2N1cnJlZC5cbiAgICAgICAgdGhpcy5wcm9jZXNzVXBkYXRlZFN0YXRlKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnByb21pc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEludm9rZXMgdGhlIHByb3ZpZGVkIGNhbGxiYWNrIGFmdGVyIGVhY2ggcG9sbGluZyBpcyBjb21wbGV0ZWQsXG4gICAgICogc2VuZGluZyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgcG9sbGVyJ3Mgb3BlcmF0aW9uLlxuICAgICAqXG4gICAgICogSXQgcmV0dXJucyBhIG1ldGhvZCB0aGF0IGNhbiBiZSB1c2VkIHRvIHN0b3AgcmVjZWl2aW5nIHVwZGF0ZXMgb24gdGhlIGdpdmVuIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIG9uUHJvZ3Jlc3MoY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5wb2xsUHJvZ3Jlc3NDYWxsYmFja3MucHVzaChjYWxsYmFjayk7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnBvbGxQcm9ncmVzc0NhbGxiYWNrcyA9IHRoaXMucG9sbFByb2dyZXNzQ2FsbGJhY2tzLmZpbHRlcigoYykgPT4gYyAhPT0gY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHBvbGxlciBoYXMgZmluaXNoZWQgcG9sbGluZy5cbiAgICAgKi9cbiAgICBpc0RvbmUoKSB7XG4gICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5vcGVyYXRpb24uc3RhdGU7XG4gICAgICAgIHJldHVybiBCb29sZWFuKHN0YXRlLmlzQ29tcGxldGVkIHx8IHN0YXRlLmlzQ2FuY2VsbGVkIHx8IHN0YXRlLmVycm9yKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3RvcHMgdGhlIHBvbGxlciBmcm9tIGNvbnRpbnVpbmcgdG8gcG9sbC5cbiAgICAgKi9cbiAgICBzdG9wUG9sbGluZygpIHtcbiAgICAgICAgaWYgKCF0aGlzLnN0b3BwZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICBpZiAodGhpcy5yZWplY3QpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlamVjdChuZXcgUG9sbGVyU3RvcHBlZEVycm9yKFwiVGhpcyBwb2xsZXIgaXMgYWxyZWFkeSBzdG9wcGVkXCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHBvbGxlciBpcyBzdG9wcGVkLlxuICAgICAqL1xuICAgIGlzU3RvcHBlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RvcHBlZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQXR0ZW1wdHMgdG8gY2FuY2VsIHRoZSB1bmRlcmx5aW5nIG9wZXJhdGlvbi5cbiAgICAgKlxuICAgICAqIEl0IG9ubHkgb3B0aW9uYWxseSByZWNlaXZlcyBhbiBvYmplY3Qgd2l0aCBhbiBhYm9ydFNpZ25hbCBwcm9wZXJ0eSwgZnJvbSBcXEBhenVyZS9hYm9ydC1jb250cm9sbGVyJ3MgQWJvcnRTaWduYWxMaWtlLlxuICAgICAqXG4gICAgICogSWYgaXQncyBjYWxsZWQgYWdhaW4gYmVmb3JlIGl0IGZpbmlzaGVzLCBpdCB3aWxsIHRocm93IGFuIGVycm9yLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBwcm9wZXJ0aWVzIHBhc3NlZCB0byB0aGUgb3BlcmF0aW9uJ3MgdXBkYXRlIG1ldGhvZC5cbiAgICAgKi9cbiAgICBjYW5jZWxPcGVyYXRpb24ob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGlmICghdGhpcy5jYW5jZWxQcm9taXNlKSB7XG4gICAgICAgICAgICB0aGlzLmNhbmNlbFByb21pc2UgPSB0aGlzLmNhbmNlbE9uY2Uob3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAob3B0aW9ucy5hYm9ydFNpZ25hbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQSBjYW5jZWwgcmVxdWVzdCBpcyBjdXJyZW50bHkgcGVuZGluZ1wiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5jYW5jZWxQcm9taXNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBzdGF0ZSBvZiB0aGUgb3BlcmF0aW9uLlxuICAgICAqXG4gICAgICogRXZlbiB0aG91Z2ggVFN0YXRlIHdpbGwgYmUgdGhlIHNhbWUgdHlwZSBpbnNpZGUgYW55IG9mIHRoZSBtZXRob2RzIG9mIGFueSBleHRlbnNpb24gb2YgdGhlIFBvbGxlciBjbGFzcyxcbiAgICAgKiBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIHBvbGxlcnMgY2FuIGN1c3RvbWl6ZSB3aGF0J3Mgc2hhcmVkIHdpdGggdGhlIHB1YmxpYyBieSB3cml0aW5nIHRoZWlyIG93blxuICAgICAqIHZlcnNpb24gb2YgdGhlIGBnZXRPcGVyYXRpb25TdGF0ZWAgbWV0aG9kLCBhbmQgYnkgZGVmaW5pbmcgdHdvIHR5cGVzLCBvbmUgcmVwcmVzZW50aW5nIHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgcG9sbGVyXG4gICAgICogYW5kIGEgcHVibGljIHR5cGUgcmVwcmVzZW50aW5nIGEgc2FmZSB0byBzaGFyZSBzdWJzZXQgb2YgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGludGVybmFsIHN0YXRlLlxuICAgICAqIFRoZWlyIGRlZmluaXRpb24gb2YgZ2V0T3BlcmF0aW9uU3RhdGUgY2FuIHRoZW4gcmV0dXJuIHRoZWlyIHB1YmxpYyB0eXBlLlxuICAgICAqXG4gICAgICogRXhhbXBsZTpcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogLy8gTGV0J3Mgc2F5IHdlIGhhdmUgb3VyIHBvbGxlcidzIG9wZXJhdGlvbiBzdGF0ZSBkZWZpbmVkIGFzOlxuICAgICAqIGludGVyZmFjZSBNeU9wZXJhdGlvblN0YXRlIGV4dGVuZHMgUG9sbE9wZXJhdGlvblN0YXRlPFJlc3VsdFR5cGU+IHtcbiAgICAgKiAgIHByaXZhdGVQcm9wZXJ0eT86IHN0cmluZztcbiAgICAgKiAgIHB1YmxpY1Byb3BlcnR5Pzogc3RyaW5nO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIC8vIFRvIGFsbG93IHVzIHRvIGhhdmUgYSB0cnVlIHNlcGFyYXRpb24gb2YgcHVibGljIGFuZCBwcml2YXRlIHN0YXRlLCB3ZSBoYXZlIHRvIGRlZmluZSBhbm90aGVyIGludGVyZmFjZTpcbiAgICAgKiBpbnRlcmZhY2UgUHVibGljU3RhdGUgZXh0ZW5kcyBQb2xsT3BlcmF0aW9uU3RhdGU8UmVzdWx0VHlwZT4ge1xuICAgICAqICAgcHVibGljUHJvcGVydHk/OiBzdHJpbmc7XG4gICAgICogfVxuICAgICAqXG4gICAgICogLy8gVGhlbiwgd2UgZGVmaW5lIG91ciBQb2xsZXIgYXMgZm9sbG93czpcbiAgICAgKiBleHBvcnQgY2xhc3MgTXlQb2xsZXIgZXh0ZW5kcyBQb2xsZXI8TXlPcGVyYXRpb25TdGF0ZSwgUmVzdWx0VHlwZT4ge1xuICAgICAqICAgLy8gLi4uIE1vcmUgY29udGVudCBpcyBuZWVkZWQgaGVyZSAuLi5cbiAgICAgKlxuICAgICAqICAgcHVibGljIGdldE9wZXJhdGlvblN0YXRlKCk6IFB1YmxpY1N0YXRlIHtcbiAgICAgKiAgICAgY29uc3Qgc3RhdGU6IFB1YmxpY1N0YXRlID0gdGhpcy5vcGVyYXRpb24uc3RhdGU7XG4gICAgICogICAgIHJldHVybiB7XG4gICAgICogICAgICAgLy8gUHJvcGVydGllcyBmcm9tIFBvbGxPcGVyYXRpb25TdGF0ZTxUUmVzdWx0PlxuICAgICAqICAgICAgIGlzU3RhcnRlZDogc3RhdGUuaXNTdGFydGVkLFxuICAgICAqICAgICAgIGlzQ29tcGxldGVkOiBzdGF0ZS5pc0NvbXBsZXRlZCxcbiAgICAgKiAgICAgICBpc0NhbmNlbGxlZDogc3RhdGUuaXNDYW5jZWxsZWQsXG4gICAgICogICAgICAgZXJyb3I6IHN0YXRlLmVycm9yLFxuICAgICAqICAgICAgIHJlc3VsdDogc3RhdGUucmVzdWx0LFxuICAgICAqXG4gICAgICogICAgICAgLy8gVGhlIG9ubHkgb3RoZXIgcHJvcGVydHkgbmVlZGVkIGJ5IFB1YmxpY1N0YXRlLlxuICAgICAqICAgICAgIHB1YmxpY1Byb3BlcnR5OiBzdGF0ZS5wdWJsaWNQcm9wZXJ0eVxuICAgICAqICAgICB9XG4gICAgICogICB9XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogWW91IGNhbiBzZWUgdGhpcyBpbiB0aGUgdGVzdHMgb2YgdGhpcyByZXBvc2l0b3J5LCBnbyB0byB0aGUgZmlsZTpcbiAgICAgKiBgLi4vdGVzdC91dGlscy90ZXN0UG9sbGVyLnRzYFxuICAgICAqIGFuZCBsb29rIGZvciB0aGUgZ2V0T3BlcmF0aW9uU3RhdGUgaW1wbGVtZW50YXRpb24uXG4gICAgICovXG4gICAgZ2V0T3BlcmF0aW9uU3RhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wZXJhdGlvbi5zdGF0ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgcmVzdWx0IHZhbHVlIG9mIHRoZSBvcGVyYXRpb24sXG4gICAgICogcmVnYXJkbGVzcyBvZiB0aGUgc3RhdGUgb2YgdGhlIHBvbGxlci5cbiAgICAgKiBJdCBjYW4gcmV0dXJuIHVuZGVmaW5lZCBvciBhbiBpbmNvbXBsZXRlIGZvcm0gb2YgdGhlIGZpbmFsIFRSZXN1bHQgdmFsdWVcbiAgICAgKiBkZXBlbmRpbmcgb24gdGhlIGltcGxlbWVudGF0aW9uLlxuICAgICAqL1xuICAgIGdldFJlc3VsdCgpIHtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLm9wZXJhdGlvbi5zdGF0ZTtcbiAgICAgICAgcmV0dXJuIHN0YXRlLnJlc3VsdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHNlcmlhbGl6ZWQgdmVyc2lvbiBvZiB0aGUgcG9sbGVyJ3Mgb3BlcmF0aW9uXG4gICAgICogYnkgaW52b2tpbmcgdGhlIG9wZXJhdGlvbidzIHRvU3RyaW5nIG1ldGhvZC5cbiAgICAgKi9cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3BlcmF0aW9uLnRvU3RyaW5nKCk7XG4gICAgfVxufVxuZXhwb3J0cy5Qb2xsZXIgPSBQb2xsZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wb2xsZXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Mcm9FbmdpbmUgPSB2b2lkIDA7XG5jb25zdCBvcGVyYXRpb25fanNfMSA9IHJlcXVpcmUoXCIuL29wZXJhdGlvbi5qc1wiKTtcbmNvbnN0IGNvbnN0YW50c19qc18xID0gcmVxdWlyZShcIi4uLy4uL3BvbGxlci9jb25zdGFudHMuanNcIik7XG5jb25zdCBwb2xsZXJfanNfMSA9IHJlcXVpcmUoXCIuLi9wb2xsZXIuanNcIik7XG5jb25zdCBvcGVyYXRpb25fanNfMiA9IHJlcXVpcmUoXCIuLi8uLi9wb2xsZXIvb3BlcmF0aW9uLmpzXCIpO1xuLyoqXG4gKiBUaGUgTFJPIEVuZ2luZSwgYSBjbGFzcyB0aGF0IHBlcmZvcm1zIHBvbGxpbmcuXG4gKi9cbmNsYXNzIExyb0VuZ2luZSBleHRlbmRzIHBvbGxlcl9qc18xLlBvbGxlciB7XG4gICAgY29uc3RydWN0b3IobHJvLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHsgaW50ZXJ2YWxJbk1zID0gY29uc3RhbnRzX2pzXzEuUE9MTF9JTlRFUlZBTF9JTl9NUywgcmVzdW1lRnJvbSwgcmVzb2x2ZU9uVW5zdWNjZXNzZnVsID0gZmFsc2UsIGlzRG9uZSwgbHJvUmVzb3VyY2VMb2NhdGlvbkNvbmZpZywgcHJvY2Vzc1Jlc3VsdCwgdXBkYXRlU3RhdGUsIH0gPSBvcHRpb25zIHx8IHt9O1xuICAgICAgICBjb25zdCBzdGF0ZSA9IHJlc3VtZUZyb21cbiAgICAgICAgICAgID8gKDAsIG9wZXJhdGlvbl9qc18yLmRlc2VyaWFsaXplU3RhdGUpKHJlc3VtZUZyb20pXG4gICAgICAgICAgICA6IHt9O1xuICAgICAgICBjb25zdCBvcGVyYXRpb24gPSBuZXcgb3BlcmF0aW9uX2pzXzEuR2VuZXJpY1BvbGxPcGVyYXRpb24oc3RhdGUsIGxybywgIXJlc29sdmVPblVuc3VjY2Vzc2Z1bCwgbHJvUmVzb3VyY2VMb2NhdGlvbkNvbmZpZywgcHJvY2Vzc1Jlc3VsdCwgdXBkYXRlU3RhdGUsIGlzRG9uZSk7XG4gICAgICAgIHN1cGVyKG9wZXJhdGlvbik7XG4gICAgICAgIHRoaXMucmVzb2x2ZU9uVW5zdWNjZXNzZnVsID0gcmVzb2x2ZU9uVW5zdWNjZXNzZnVsO1xuICAgICAgICB0aGlzLmNvbmZpZyA9IHsgaW50ZXJ2YWxJbk1zOiBpbnRlcnZhbEluTXMgfTtcbiAgICAgICAgb3BlcmF0aW9uLnNldFBvbGxlckNvbmZpZyh0aGlzLmNvbmZpZyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBtZXRob2QgdXNlZCBieSB0aGUgcG9sbGVyIHRvIHdhaXQgYmVmb3JlIGF0dGVtcHRpbmcgdG8gdXBkYXRlIGl0cyBvcGVyYXRpb24uXG4gICAgICovXG4gICAgZGVsYXkoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dCgoKSA9PiByZXNvbHZlKCksIHRoaXMuY29uZmlnLmludGVydmFsSW5NcykpO1xuICAgIH1cbn1cbmV4cG9ydHMuTHJvRW5naW5lID0gTHJvRW5naW5lO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bHJvRW5naW5lLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTHJvRW5naW5lID0gdm9pZCAwO1xudmFyIGxyb0VuZ2luZV9qc18xID0gcmVxdWlyZShcIi4vbHJvRW5naW5lLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTHJvRW5naW5lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBscm9FbmdpbmVfanNfMS5Mcm9FbmdpbmU7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wb2xsT3BlcmF0aW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlSHR0cFBvbGxlciA9IHZvaWQgMDtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG52YXIgcG9sbGVyX2pzXzEgPSByZXF1aXJlKFwiLi9odHRwL3BvbGxlci5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUh0dHBQb2xsZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBvbGxlcl9qc18xLmNyZWF0ZUh0dHBQb2xsZXI7IH0gfSk7XG4vKipcbiAqIFRoaXMgY2FuIGJlIHVuY29tbWVudGVkIHRvIGV4cG9zZSB0aGUgcHJvdG9jb2wtYWdub3N0aWMgcG9sbGVyXG4gKi9cbi8vIGV4cG9ydCB7XG4vLyAgIEJ1aWxkQ3JlYXRlUG9sbGVyT3B0aW9ucyxcbi8vICAgT3BlcmF0aW9uLFxuLy8gICBDcmVhdGVQb2xsZXJPcHRpb25zLFxuLy8gICBPcGVyYXRpb25Db25maWcsXG4vLyAgIFJlc3RvcmFibGVPcGVyYXRpb25TdGF0ZSxcbi8vIH0gZnJvbSBcIi4vcG9sbGVyL21vZGVsc1wiO1xuLy8gZXhwb3J0IHsgYnVpbGRDcmVhdGVQb2xsZXIgfSBmcm9tIFwiLi9wb2xsZXIvcG9sbGVyXCI7XG4vKiogbGVnYWN5ICovXG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9sZWdhY3kvbHJvRW5naW5lL2luZGV4LmpzXCIpLCBleHBvcnRzKTtcbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2xlZ2FjeS9wb2xsZXIuanNcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vbGVnYWN5L3BvbGxPcGVyYXRpb24uanNcIiksIGV4cG9ydHMpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbnZhciBjb3JlUmVzdFBpcGVsaW5lID0gcmVxdWlyZSgnQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZScpO1xudmFyIHRzbGliID0gcmVxdWlyZSgndHNsaWInKTtcbnZhciBjb3JlQXV0aCA9IHJlcXVpcmUoJ0BhenVyZS9jb3JlLWF1dGgnKTtcbnZhciBjb3JlVXRpbCA9IHJlcXVpcmUoJ0BhenVyZS9jb3JlLXV0aWwnKTtcbnZhciBjb3JlSHR0cENvbXBhdCA9IHJlcXVpcmUoJ0BhenVyZS9jb3JlLWh0dHAtY29tcGF0Jyk7XG52YXIgY29yZUNsaWVudCA9IHJlcXVpcmUoJ0BhenVyZS9jb3JlLWNsaWVudCcpO1xudmFyIGNvcmVYbWwgPSByZXF1aXJlKCdAYXp1cmUvY29yZS14bWwnKTtcbnZhciBsb2dnZXIkMSA9IHJlcXVpcmUoJ0BhenVyZS9sb2dnZXInKTtcbnZhciBhYm9ydENvbnRyb2xsZXIgPSByZXF1aXJlKCdAYXp1cmUvYWJvcnQtY29udHJvbGxlcicpO1xudmFyIGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpO1xudmFyIGNvcmVUcmFjaW5nID0gcmVxdWlyZSgnQGF6dXJlL2NvcmUtdHJhY2luZycpO1xudmFyIHN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpO1xudmFyIGNvcmVMcm8gPSByZXF1aXJlKCdAYXp1cmUvY29yZS1scm8nKTtcbnZhciBldmVudHMgPSByZXF1aXJlKCdldmVudHMnKTtcbnZhciBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbnZhciBidWZmZXIgPSByZXF1aXJlKCdidWZmZXInKTtcblxuZnVuY3Rpb24gX2ludGVyb3BOYW1lc3BhY2VEZWZhdWx0KGUpIHtcbiAgICB2YXIgbiA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgaWYgKGUpIHtcbiAgICAgICAgT2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgICAgICAgICAgaWYgKGsgIT09ICdkZWZhdWx0Jykge1xuICAgICAgICAgICAgICAgIHZhciBkID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCBrKTtcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobiwgaywgZC5nZXQgPyBkIDoge1xuICAgICAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGVba107IH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG4uZGVmYXVsdCA9IGU7XG4gICAgcmV0dXJuIE9iamVjdC5mcmVlemUobik7XG59XG5cbnZhciBjb3JlSHR0cENvbXBhdF9fbmFtZXNwYWNlID0gLyojX19QVVJFX18qL19pbnRlcm9wTmFtZXNwYWNlRGVmYXVsdChjb3JlSHR0cENvbXBhdCk7XG52YXIgY29yZUNsaWVudF9fbmFtZXNwYWNlID0gLyojX19QVVJFX18qL19pbnRlcm9wTmFtZXNwYWNlRGVmYXVsdChjb3JlQ2xpZW50KTtcbnZhciBmc19fbmFtZXNwYWNlID0gLyojX19QVVJFX18qL19pbnRlcm9wTmFtZXNwYWNlRGVmYXVsdChmcyk7XG52YXIgdXRpbF9fbmFtZXNwYWNlID0gLyojX19QVVJFX18qL19pbnRlcm9wTmFtZXNwYWNlRGVmYXVsdCh1dGlsKTtcblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIFRoZSBgQGF6dXJlL2xvZ2dlcmAgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBwYWNrYWdlLlxuICovXG5jb25zdCBsb2dnZXIgPSBsb2dnZXIkMS5jcmVhdGVDbGllbnRMb2dnZXIoXCJzdG9yYWdlLWJsb2JcIik7XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBUaGUgYmFzZSBjbGFzcyBmcm9tIHdoaWNoIGFsbCByZXF1ZXN0IHBvbGljaWVzIGRlcml2ZS5cbiAqL1xuY2xhc3MgQmFzZVJlcXVlc3RQb2xpY3kge1xuICAgIC8qKlxuICAgICAqIFRoZSBtYWluIG1ldGhvZCB0byBpbXBsZW1lbnQgdGhhdCBtYW5pcHVsYXRlcyBhIHJlcXVlc3QvcmVzcG9uc2UuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgLyoqXG4gICAgICogVGhlIG5leHQgcG9saWN5IGluIHRoZSBwaXBlbGluZS4gRWFjaCBwb2xpY3kgaXMgcmVzcG9uc2libGUgZm9yIGV4ZWN1dGluZyB0aGUgbmV4dCBvbmUgaWYgdGhlIHJlcXVlc3QgaXMgdG8gY29udGludWUgdGhyb3VnaCB0aGUgcGlwZWxpbmUuXG4gICAgICovXG4gICAgX25leHRQb2xpY3ksIFxuICAgIC8qKlxuICAgICAqIFRoZSBvcHRpb25zIHRoYXQgY2FuIGJlIHBhc3NlZCB0byBhIGdpdmVuIHJlcXVlc3QgcG9saWN5LlxuICAgICAqL1xuICAgIF9vcHRpb25zKSB7XG4gICAgICAgIHRoaXMuX25leHRQb2xpY3kgPSBfbmV4dFBvbGljeTtcbiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IF9vcHRpb25zO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgd2hldGhlciBvciBub3QgYSBsb2cgd2l0aCB0aGUgcHJvdmlkZWQgbG9nIGxldmVsIHNob3VsZCBiZSBsb2dnZWQuXG4gICAgICogQHBhcmFtIGxvZ0xldmVsIC0gVGhlIGxvZyBsZXZlbCBvZiB0aGUgbG9nIHRoYXQgd2lsbCBiZSBsb2dnZWQuXG4gICAgICogQHJldHVybnMgV2hldGhlciBvciBub3QgYSBsb2cgd2l0aCB0aGUgcHJvdmlkZWQgbG9nIGxldmVsIHNob3VsZCBiZSBsb2dnZWQuXG4gICAgICovXG4gICAgc2hvdWxkTG9nKGxvZ0xldmVsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vcHRpb25zLnNob3VsZExvZyhsb2dMZXZlbCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEF0dGVtcHQgdG8gbG9nIHRoZSBwcm92aWRlZCBtZXNzYWdlIHRvIHRoZSBwcm92aWRlZCBsb2dnZXIuIElmIG5vIGxvZ2dlciB3YXMgcHJvdmlkZWQgb3IgaWZcbiAgICAgKiB0aGUgbG9nIGxldmVsIGRvZXMgbm90IG1lYXQgdGhlIGxvZ2dlcidzIHRocmVzaG9sZCwgdGhlbiBub3RoaW5nIHdpbGwgYmUgbG9nZ2VkLlxuICAgICAqIEBwYXJhbSBsb2dMZXZlbCAtIFRoZSBsb2cgbGV2ZWwgb2YgdGhpcyBsb2cuXG4gICAgICogQHBhcmFtIG1lc3NhZ2UgLSBUaGUgbWVzc2FnZSBvZiB0aGlzIGxvZy5cbiAgICAgKi9cbiAgICBsb2cobG9nTGV2ZWwsIG1lc3NhZ2UpIHtcbiAgICAgICAgdGhpcy5fb3B0aW9ucy5sb2cobG9nTGV2ZWwsIG1lc3NhZ2UpO1xuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5jb25zdCBTREtfVkVSU0lPTiA9IFwiMTIuMjUuMFwiO1xuY29uc3QgU0VSVklDRV9WRVJTSU9OID0gXCIyMDI0LTExLTA0XCI7XG5jb25zdCBCTE9DS19CTE9CX01BWF9VUExPQURfQkxPQl9CWVRFUyA9IDI1NiAqIDEwMjQgKiAxMDI0OyAvLyAyNTZNQlxuY29uc3QgQkxPQ0tfQkxPQl9NQVhfU1RBR0VfQkxPQ0tfQllURVMgPSA0MDAwICogMTAyNCAqIDEwMjQ7IC8vIDQwMDBNQlxuY29uc3QgQkxPQ0tfQkxPQl9NQVhfQkxPQ0tTID0gNTAwMDA7XG5jb25zdCBERUZBVUxUX0JMT0NLX0JVRkZFUl9TSVpFX0JZVEVTID0gOCAqIDEwMjQgKiAxMDI0OyAvLyA4TUJcbmNvbnN0IERFRkFVTFRfQkxPQl9ET1dOTE9BRF9CTE9DS19CWVRFUyA9IDQgKiAxMDI0ICogMTAyNDsgLy8gNE1CXG5jb25zdCBERUZBVUxUX01BWF9ET1dOTE9BRF9SRVRSWV9SRVFVRVNUUyA9IDU7XG5jb25zdCBSRVFVRVNUX1RJTUVPVVQgPSAxMDAgKiAxMDAwOyAvLyBJbiBtc1xuLyoqXG4gKiBUaGUgT0F1dGggc2NvcGUgdG8gdXNlIHdpdGggQXp1cmUgU3RvcmFnZS5cbiAqL1xuY29uc3QgU3RvcmFnZU9BdXRoU2NvcGVzID0gXCJodHRwczovL3N0b3JhZ2UuYXp1cmUuY29tLy5kZWZhdWx0XCI7XG5jb25zdCBVUkxDb25zdGFudHMgPSB7XG4gICAgUGFyYW1ldGVyczoge1xuICAgICAgICBGT1JDRV9CUk9XU0VSX05PX0NBQ0hFOiBcIl9cIixcbiAgICAgICAgU0lHTkFUVVJFOiBcInNpZ1wiLFxuICAgICAgICBTTkFQU0hPVDogXCJzbmFwc2hvdFwiLFxuICAgICAgICBWRVJTSU9OSUQ6IFwidmVyc2lvbmlkXCIsXG4gICAgICAgIFRJTUVPVVQ6IFwidGltZW91dFwiLFxuICAgIH0sXG59O1xuY29uc3QgSFRUUFVSTENvbm5lY3Rpb24gPSB7XG4gICAgSFRUUF9BQ0NFUFRFRDogMjAyLFxuICAgIEhUVFBfQ09ORkxJQ1Q6IDQwOSxcbiAgICBIVFRQX05PVF9GT1VORDogNDA0LFxuICAgIEhUVFBfUFJFQ09OX0ZBSUxFRDogNDEyLFxuICAgIEhUVFBfUkFOR0VfTk9UX1NBVElTRklBQkxFOiA0MTYsXG59O1xuY29uc3QgSGVhZGVyQ29uc3RhbnRzID0ge1xuICAgIEFVVEhPUklaQVRJT046IFwiQXV0aG9yaXphdGlvblwiLFxuICAgIEFVVEhPUklaQVRJT05fU0NIRU1FOiBcIkJlYXJlclwiLFxuICAgIENPTlRFTlRfRU5DT0RJTkc6IFwiQ29udGVudC1FbmNvZGluZ1wiLFxuICAgIENPTlRFTlRfSUQ6IFwiQ29udGVudC1JRFwiLFxuICAgIENPTlRFTlRfTEFOR1VBR0U6IFwiQ29udGVudC1MYW5ndWFnZVwiLFxuICAgIENPTlRFTlRfTEVOR1RIOiBcIkNvbnRlbnQtTGVuZ3RoXCIsXG4gICAgQ09OVEVOVF9NRDU6IFwiQ29udGVudC1NZDVcIixcbiAgICBDT05URU5UX1RSQU5TRkVSX0VOQ09ESU5HOiBcIkNvbnRlbnQtVHJhbnNmZXItRW5jb2RpbmdcIixcbiAgICBDT05URU5UX1RZUEU6IFwiQ29udGVudC1UeXBlXCIsXG4gICAgQ09PS0lFOiBcIkNvb2tpZVwiLFxuICAgIERBVEU6IFwiZGF0ZVwiLFxuICAgIElGX01BVENIOiBcImlmLW1hdGNoXCIsXG4gICAgSUZfTU9ESUZJRURfU0lOQ0U6IFwiaWYtbW9kaWZpZWQtc2luY2VcIixcbiAgICBJRl9OT05FX01BVENIOiBcImlmLW5vbmUtbWF0Y2hcIixcbiAgICBJRl9VTk1PRElGSUVEX1NJTkNFOiBcImlmLXVubW9kaWZpZWQtc2luY2VcIixcbiAgICBQUkVGSVhfRk9SX1NUT1JBR0U6IFwieC1tcy1cIixcbiAgICBSQU5HRTogXCJSYW5nZVwiLFxuICAgIFVTRVJfQUdFTlQ6IFwiVXNlci1BZ2VudFwiLFxuICAgIFhfTVNfQ0xJRU5UX1JFUVVFU1RfSUQ6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgIFhfTVNfQ09QWV9TT1VSQ0U6IFwieC1tcy1jb3B5LXNvdXJjZVwiLFxuICAgIFhfTVNfREFURTogXCJ4LW1zLWRhdGVcIixcbiAgICBYX01TX0VSUk9SX0NPREU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgWF9NU19WRVJTSU9OOiBcIngtbXMtdmVyc2lvblwiLFxuICAgIFhfTVNfQ29weVNvdXJjZUVycm9yQ29kZTogXCJ4LW1zLWNvcHktc291cmNlLWVycm9yLWNvZGVcIixcbn07XG5jb25zdCBFVGFnTm9uZSA9IFwiXCI7XG5jb25zdCBFVGFnQW55ID0gXCIqXCI7XG5jb25zdCBTSVpFXzFfTUIgPSAxICogMTAyNCAqIDEwMjQ7XG5jb25zdCBCQVRDSF9NQVhfUkVRVUVTVCA9IDI1NjtcbmNvbnN0IEJBVENIX01BWF9QQVlMT0FEX0lOX0JZVEVTID0gNCAqIFNJWkVfMV9NQjtcbmNvbnN0IEhUVFBfTElORV9FTkRJTkcgPSBcIlxcclxcblwiO1xuY29uc3QgSFRUUF9WRVJTSU9OXzFfMSA9IFwiSFRUUC8xLjFcIjtcbmNvbnN0IEVuY3J5cHRpb25BbGdvcml0aG1BRVMyNSA9IFwiQUVTMjU2XCI7XG5jb25zdCBEZXZlbG9wbWVudENvbm5lY3Rpb25TdHJpbmcgPSBgRGVmYXVsdEVuZHBvaW50c1Byb3RvY29sPWh0dHA7QWNjb3VudE5hbWU9ZGV2c3RvcmVhY2NvdW50MTtBY2NvdW50S2V5PUVieTh2ZE0wMnhOT2NxRmxxVXdKUExsbUV0bENEWEoxT1V6RlQ1MHVTUlo2SUZzdUZxMlVWRXJDejRJNnRxL0sxU1pGUFRPdHIvS0JIQmVrc29HTUd3PT07QmxvYkVuZHBvaW50PWh0dHA6Ly8xMjcuMC4wLjE6MTAwMDAvZGV2c3RvcmVhY2NvdW50MTtgO1xuY29uc3QgU3RvcmFnZUJsb2JMb2dnaW5nQWxsb3dlZEhlYWRlck5hbWVzID0gW1xuICAgIFwiQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luXCIsXG4gICAgXCJDYWNoZS1Db250cm9sXCIsXG4gICAgXCJDb250ZW50LUxlbmd0aFwiLFxuICAgIFwiQ29udGVudC1UeXBlXCIsXG4gICAgXCJEYXRlXCIsXG4gICAgXCJSZXF1ZXN0LUlkXCIsXG4gICAgXCJ0cmFjZXBhcmVudFwiLFxuICAgIFwiVHJhbnNmZXItRW5jb2RpbmdcIixcbiAgICBcIlVzZXItQWdlbnRcIixcbiAgICBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICBcIngtbXMtZGF0ZVwiLFxuICAgIFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICBcIngtbXMtcmV0dXJuLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgXCJ4LW1zLXZlcnNpb25cIixcbiAgICBcIkFjY2VwdC1SYW5nZXNcIixcbiAgICBcIkNvbnRlbnQtRGlzcG9zaXRpb25cIixcbiAgICBcIkNvbnRlbnQtRW5jb2RpbmdcIixcbiAgICBcIkNvbnRlbnQtTGFuZ3VhZ2VcIixcbiAgICBcIkNvbnRlbnQtTUQ1XCIsXG4gICAgXCJDb250ZW50LVJhbmdlXCIsXG4gICAgXCJFVGFnXCIsXG4gICAgXCJMYXN0LU1vZGlmaWVkXCIsXG4gICAgXCJTZXJ2ZXJcIixcbiAgICBcIlZhcnlcIixcbiAgICBcIngtbXMtY29udGVudC1jcmM2NFwiLFxuICAgIFwieC1tcy1jb3B5LWFjdGlvblwiLFxuICAgIFwieC1tcy1jb3B5LWNvbXBsZXRpb24tdGltZVwiLFxuICAgIFwieC1tcy1jb3B5LWlkXCIsXG4gICAgXCJ4LW1zLWNvcHktcHJvZ3Jlc3NcIixcbiAgICBcIngtbXMtY29weS1zdGF0dXNcIixcbiAgICBcIngtbXMtaGFzLWltbXV0YWJpbGl0eS1wb2xpY3lcIixcbiAgICBcIngtbXMtaGFzLWxlZ2FsLWhvbGRcIixcbiAgICBcIngtbXMtbGVhc2Utc3RhdGVcIixcbiAgICBcIngtbXMtbGVhc2Utc3RhdHVzXCIsXG4gICAgXCJ4LW1zLXJhbmdlXCIsXG4gICAgXCJ4LW1zLXJlcXVlc3Qtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgIFwieC1tcy1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgXCJ4LW1zLXNuYXBzaG90XCIsXG4gICAgXCJ4LW1zLXNvdXJjZS1yYW5nZVwiLFxuICAgIFwiSWYtTWF0Y2hcIixcbiAgICBcIklmLU1vZGlmaWVkLVNpbmNlXCIsXG4gICAgXCJJZi1Ob25lLU1hdGNoXCIsXG4gICAgXCJJZi1Vbm1vZGlmaWVkLVNpbmNlXCIsXG4gICAgXCJ4LW1zLWFjY2Vzcy10aWVyXCIsXG4gICAgXCJ4LW1zLWFjY2Vzcy10aWVyLWNoYW5nZS10aW1lXCIsXG4gICAgXCJ4LW1zLWFjY2Vzcy10aWVyLWluZmVycmVkXCIsXG4gICAgXCJ4LW1zLWFjY291bnQta2luZFwiLFxuICAgIFwieC1tcy1hcmNoaXZlLXN0YXR1c1wiLFxuICAgIFwieC1tcy1ibG9iLWFwcGVuZC1vZmZzZXRcIixcbiAgICBcIngtbXMtYmxvYi1jYWNoZS1jb250cm9sXCIsXG4gICAgXCJ4LW1zLWJsb2ItY29tbWl0dGVkLWJsb2NrLWNvdW50XCIsXG4gICAgXCJ4LW1zLWJsb2ItY29uZGl0aW9uLWFwcGVuZHBvc1wiLFxuICAgIFwieC1tcy1ibG9iLWNvbmRpdGlvbi1tYXhzaXplXCIsXG4gICAgXCJ4LW1zLWJsb2ItY29udGVudC1kaXNwb3NpdGlvblwiLFxuICAgIFwieC1tcy1ibG9iLWNvbnRlbnQtZW5jb2RpbmdcIixcbiAgICBcIngtbXMtYmxvYi1jb250ZW50LWxhbmd1YWdlXCIsXG4gICAgXCJ4LW1zLWJsb2ItY29udGVudC1sZW5ndGhcIixcbiAgICBcIngtbXMtYmxvYi1jb250ZW50LW1kNVwiLFxuICAgIFwieC1tcy1ibG9iLWNvbnRlbnQtdHlwZVwiLFxuICAgIFwieC1tcy1ibG9iLXB1YmxpYy1hY2Nlc3NcIixcbiAgICBcIngtbXMtYmxvYi1zZXF1ZW5jZS1udW1iZXJcIixcbiAgICBcIngtbXMtYmxvYi10eXBlXCIsXG4gICAgXCJ4LW1zLWNvcHktZGVzdGluYXRpb24tc25hcHNob3RcIixcbiAgICBcIngtbXMtY3JlYXRpb24tdGltZVwiLFxuICAgIFwieC1tcy1kZWZhdWx0LWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICBcIngtbXMtZGVsZXRlLXNuYXBzaG90c1wiLFxuICAgIFwieC1tcy1kZWxldGUtdHlwZS1wZXJtYW5lbnRcIixcbiAgICBcIngtbXMtZGVueS1lbmNyeXB0aW9uLXNjb3BlLW92ZXJyaWRlXCIsXG4gICAgXCJ4LW1zLWVuY3J5cHRpb24tYWxnb3JpdGhtXCIsXG4gICAgXCJ4LW1zLWlmLXNlcXVlbmNlLW51bWJlci1lcVwiLFxuICAgIFwieC1tcy1pZi1zZXF1ZW5jZS1udW1iZXItbGVcIixcbiAgICBcIngtbXMtaWYtc2VxdWVuY2UtbnVtYmVyLWx0XCIsXG4gICAgXCJ4LW1zLWluY3JlbWVudGFsLWNvcHlcIixcbiAgICBcIngtbXMtbGVhc2UtYWN0aW9uXCIsXG4gICAgXCJ4LW1zLWxlYXNlLWJyZWFrLXBlcmlvZFwiLFxuICAgIFwieC1tcy1sZWFzZS1kdXJhdGlvblwiLFxuICAgIFwieC1tcy1sZWFzZS1pZFwiLFxuICAgIFwieC1tcy1sZWFzZS10aW1lXCIsXG4gICAgXCJ4LW1zLXBhZ2Utd3JpdGVcIixcbiAgICBcIngtbXMtcHJvcG9zZWQtbGVhc2UtaWRcIixcbiAgICBcIngtbXMtcmFuZ2UtZ2V0LWNvbnRlbnQtbWQ1XCIsXG4gICAgXCJ4LW1zLXJlaHlkcmF0ZS1wcmlvcml0eVwiLFxuICAgIFwieC1tcy1zZXF1ZW5jZS1udW1iZXItYWN0aW9uXCIsXG4gICAgXCJ4LW1zLXNrdS1uYW1lXCIsXG4gICAgXCJ4LW1zLXNvdXJjZS1jb250ZW50LW1kNVwiLFxuICAgIFwieC1tcy1zb3VyY2UtaWYtbWF0Y2hcIixcbiAgICBcIngtbXMtc291cmNlLWlmLW1vZGlmaWVkLXNpbmNlXCIsXG4gICAgXCJ4LW1zLXNvdXJjZS1pZi1ub25lLW1hdGNoXCIsXG4gICAgXCJ4LW1zLXNvdXJjZS1pZi11bm1vZGlmaWVkLXNpbmNlXCIsXG4gICAgXCJ4LW1zLXRhZy1jb3VudFwiLFxuICAgIFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICBcIngtbXMtY29weS1zb3VyY2UtZXJyb3ItY29kZVwiLFxuICAgIFwieC1tcy1jb3B5LXNvdXJjZS1zdGF0dXMtY29kZVwiLFxuICAgIFwieC1tcy1pZi10YWdzXCIsXG4gICAgXCJ4LW1zLXNvdXJjZS1pZi10YWdzXCIsXG5dO1xuY29uc3QgU3RvcmFnZUJsb2JMb2dnaW5nQWxsb3dlZFF1ZXJ5UGFyYW1ldGVycyA9IFtcbiAgICBcImNvbXBcIixcbiAgICBcIm1heHJlc3VsdHNcIixcbiAgICBcInJzY2NcIixcbiAgICBcInJzY2RcIixcbiAgICBcInJzY2VcIixcbiAgICBcInJzY2xcIixcbiAgICBcInJzY3RcIixcbiAgICBcInNlXCIsXG4gICAgXCJzaVwiLFxuICAgIFwic2lwXCIsXG4gICAgXCJzcFwiLFxuICAgIFwic3ByXCIsXG4gICAgXCJzclwiLFxuICAgIFwic3J0XCIsXG4gICAgXCJzc1wiLFxuICAgIFwic3RcIixcbiAgICBcInN2XCIsXG4gICAgXCJpbmNsdWRlXCIsXG4gICAgXCJtYXJrZXJcIixcbiAgICBcInByZWZpeFwiLFxuICAgIFwiY29weWlkXCIsXG4gICAgXCJyZXN0eXBlXCIsXG4gICAgXCJibG9ja2lkXCIsXG4gICAgXCJibG9ja2xpc3R0eXBlXCIsXG4gICAgXCJkZWxpbWl0ZXJcIixcbiAgICBcInByZXZzbmFwc2hvdFwiLFxuICAgIFwic2tlXCIsXG4gICAgXCJza29pZFwiLFxuICAgIFwic2tzXCIsXG4gICAgXCJza3RcIixcbiAgICBcInNrdGlkXCIsXG4gICAgXCJza3ZcIixcbiAgICBcInNuYXBzaG90XCIsXG5dO1xuY29uc3QgQmxvYlVzZXNDdXN0b21lclNwZWNpZmllZEVuY3J5cHRpb25Nc2cgPSBcIkJsb2JVc2VzQ3VzdG9tZXJTcGVjaWZpZWRFbmNyeXB0aW9uXCI7XG5jb25zdCBCbG9iRG9lc05vdFVzZUN1c3RvbWVyU3BlY2lmaWVkRW5jcnlwdGlvbiA9IFwiQmxvYkRvZXNOb3RVc2VDdXN0b21lclNwZWNpZmllZEVuY3J5cHRpb25cIjtcbi8vLyBMaXN0IG9mIHBvcnRzIHVzZWQgZm9yIHBhdGggc3R5bGUgYWRkcmVzc2luZy5cbi8vLyBQYXRoIHN0eWxlIGFkZHJlc3NpbmcgbWVhbnMgdGhhdCBzdG9yYWdlIGFjY291bnQgaXMgcHV0IGluIFVSSSdzIFBhdGggc2VnbWVudCBpbiBpbnN0ZWFkIG9mIGluIGhvc3QuXG5jb25zdCBQYXRoU3R5bGVQb3J0cyA9IFtcbiAgICBcIjEwMDAwXCIsXG4gICAgXCIxMDAwMVwiLFxuICAgIFwiMTAwMDJcIixcbiAgICBcIjEwMDAzXCIsXG4gICAgXCIxMDAwNFwiLFxuICAgIFwiMTAxMDBcIixcbiAgICBcIjEwMTAxXCIsXG4gICAgXCIxMDEwMlwiLFxuICAgIFwiMTAxMDNcIixcbiAgICBcIjEwMTA0XCIsXG4gICAgXCIxMTAwMFwiLFxuICAgIFwiMTEwMDFcIixcbiAgICBcIjExMDAyXCIsXG4gICAgXCIxMTAwM1wiLFxuICAgIFwiMTEwMDRcIixcbiAgICBcIjExMTAwXCIsXG4gICAgXCIxMTEwMVwiLFxuICAgIFwiMTExMDJcIixcbiAgICBcIjExMTAzXCIsXG4gICAgXCIxMTEwNFwiLFxuXTtcblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIFJlc2VydmVkIFVSTCBjaGFyYWN0ZXJzIG11c3QgYmUgcHJvcGVybHkgZXNjYXBlZCBmb3IgU3RvcmFnZSBzZXJ2aWNlcyBsaWtlIEJsb2Igb3IgRmlsZS5cbiAqXG4gKiAjIyBVUkwgZW5jb2RlIGFuZCBlc2NhcGUgc3RyYXRlZ3kgZm9yIEpTIFNES3NcbiAqXG4gKiBXaGVuIGN1c3RvbWVycyBwYXNzIGEgVVJMIHN0cmluZyBpbnRvIFh4eENsaWVudCBjbGFzc2VzIGNvbnN0cnVjdG9yLCB0aGUgVVJMIHN0cmluZyBtYXkgYWxyZWFkeSBiZSBVUkwgZW5jb2RlZCBvciBub3QuXG4gKiBCdXQgYmVmb3JlIHNlbmRpbmcgdG8gQXp1cmUgU3RvcmFnZSBzZXJ2ZXIsIHRoZSBVUkwgbXVzdCBiZSBlbmNvZGVkLiBIb3dldmVyLCBpdCdzIGhhcmQgZm9yIGEgU0RLIHRvIGd1ZXNzIHdoZXRoZXIgdGhlIFVSTFxuICogc3RyaW5nIGhhcyBiZWVuIGVuY29kZWQgb3Igbm90LiBXZSBoYXZlIDIgcG90ZW50aWFsIHN0cmF0ZWdpZXMsIGFuZCBjaG9zZSBzdHJhdGVneSB0d28gZm9yIHRoZSBYeHhDbGllbnQgY29uc3RydWN0b3JzLlxuICpcbiAqICMjIyBTdHJhdGVneSBPbmU6IEFzc3VtZSB0aGUgY3VzdG9tZXIgVVJMIHN0cmluZyBpcyBub3QgZW5jb2RlZCwgYW5kIGFsd2F5cyBlbmNvZGUgVVJMIHN0cmluZyBpbiBTREsuXG4gKlxuICogVGhpcyBpcyB3aGF0IGxlZ2FjeSBWMiBTREsgZG9lcywgc2ltcGxlIGFuZCB3b3JrcyBmb3IgbW9zdCBvZiB0aGUgY2FzZXMuXG4gKiAtIFdoZW4gY3VzdG9tZXIgVVJMIHN0cmluZyBpcyBcImh0dHA6Ly9hY2NvdW50LmJsb2IuY29yZS53aW5kb3dzLm5ldC9jb24vYjpcIixcbiAqICAgU0RLIHdpbGwgZW5jb2RlIGl0IHRvIFwiaHR0cDovL2FjY291bnQuYmxvYi5jb3JlLndpbmRvd3MubmV0L2Nvbi9iJTNBXCIgYW5kIHNlbmQgdG8gc2VydmVyLiBBIGJsb2IgbmFtZWQgXCJiOlwiIHdpbGwgYmUgY3JlYXRlZC5cbiAqIC0gV2hlbiBjdXN0b21lciBVUkwgc3RyaW5nIGlzIFwiaHR0cDovL2FjY291bnQuYmxvYi5jb3JlLndpbmRvd3MubmV0L2Nvbi9iJTNBXCIsXG4gKiAgIFNESyB3aWxsIGVuY29kZSBpdCB0byBcImh0dHA6Ly9hY2NvdW50LmJsb2IuY29yZS53aW5kb3dzLm5ldC9jb24vYiUyNTNBXCIgYW5kIHNlbmQgdG8gc2VydmVyLiBBIGJsb2IgbmFtZWQgXCJiJTNBXCIgd2lsbCBiZSBjcmVhdGVkLlxuICpcbiAqIEJ1dCB0aGlzIHN0cmF0ZWd5IHdpbGwgbWFrZSBpdCBub3QgcG9zc2libGUgdG8gY3JlYXRlIGEgYmxvYiB3aXRoIFwiP1wiIGluIGl0J3MgbmFtZS4gQmVjYXVzZSB3aGVuIGN1c3RvbWVyIFVSTCBzdHJpbmcgaXNcbiAqIFwiaHR0cDovL2FjY291bnQuYmxvYi5jb3JlLndpbmRvd3MubmV0L2Nvbi9ibG9iP25hbWVcIiwgdGhlIFwiP25hbWVcIiB3aWxsIGJlIHRyZWF0ZWQgYXMgVVJMIHBhcmFtdGVyIGluc3RlYWQgb2YgYmxvYiBuYW1lLlxuICogSWYgY3VzdG9tZXIgVVJMIHN0cmluZyBpcyBcImh0dHA6Ly9hY2NvdW50LmJsb2IuY29yZS53aW5kb3dzLm5ldC9jb24vYmxvYiUzRm5hbWVcIiwgYSBibG9iIG5hbWVkIFwiYmxvYiUzRm5hbWVcIiB3aWxsIGJlIGNyZWF0ZWQuXG4gKiBWMiBTREsgZG9lc24ndCBoYXZlIHRoaXMgaXNzdWUgYmVjYXVzZSBpdCBkb2Vzbid0IGFsbG93IGN1c3RvbWVyIHBhc3MgaW4gYSBmdWxsIFVSTCwgaXQgYWNjZXB0cyBhIHNlcGFyYXRlIGJsb2IgbmFtZSBhbmQgZW5jb2RlVVJJQ29tcG9uZW50IGZvciBpdC5cbiAqIFdlIGNhbm5vdCBhY2NlcHQgYSBTREsgY2Fubm90IGNyZWF0ZSBhIGJsb2IgbmFtZSB3aXRoIFwiP1wiLiBTbyB3ZSBpbXBsZW1lbnQgc3RyYXRlZ3kgdHdvOlxuICpcbiAqICMjIyBTdHJhdGVneSBUd286IFNESyBkb2Vzbid0IGFzc3VtZSB0aGUgVVJMIGhhcyBiZWVuIGVuY29kZWQgb3Igbm90LiBJdCB3aWxsIGp1c3QgZXNjYXBlIHRoZSBzcGVjaWFsIGNoYXJhY3RlcnMuXG4gKlxuICogVGhpcyBpcyB3aGF0IFYxMCBCbG9iIEdvIFNESyBkb2VzLiBJdCBhY2NlcHRzIGEgVVJMIHR5cGUgaW4gR28sIGFuZCBjYWxsIHVybC5Fc2NhcGVkUGF0aCgpIHRvIGVzY2FwZSB0aGUgc3BlY2lhbCBjaGFycyB1bmVzY2FwZWQuXG4gKiAtIFdoZW4gY3VzdG9tZXIgVVJMIHN0cmluZyBpcyBcImh0dHA6Ly9hY2NvdW50LmJsb2IuY29yZS53aW5kb3dzLm5ldC9jb24vYjpcIixcbiAqICAgU0RLIHdpbGwgZXNjYXBlIFwiOlwiIGxpa2UgXCJodHRwOi8vYWNjb3VudC5ibG9iLmNvcmUud2luZG93cy5uZXQvY29uL2IlM0FcIiBhbmQgc2VuZCB0byBzZXJ2ZXIuIEEgYmxvYiBuYW1lZCBcImI6XCIgd2lsbCBiZSBjcmVhdGVkLlxuICogLSBXaGVuIGN1c3RvbWVyIFVSTCBzdHJpbmcgaXMgXCJodHRwOi8vYWNjb3VudC5ibG9iLmNvcmUud2luZG93cy5uZXQvY29uL2IlM0FcIixcbiAqICAgVGhlcmUgaXMgbm8gc3BlY2lhbCBjaGFyYWN0ZXJzLCBzbyBzZW5kIFwiaHR0cDovL2FjY291bnQuYmxvYi5jb3JlLndpbmRvd3MubmV0L2Nvbi9iJTNBXCIgdG8gc2VydmVyLiBBIGJsb2IgbmFtZWQgXCJiOlwiIHdpbGwgYmUgY3JlYXRlZC5cbiAqIC0gV2hlbiBjdXN0b21lciBVUkwgc3RyaW5nIGlzIFwiaHR0cDovL2FjY291bnQuYmxvYi5jb3JlLndpbmRvd3MubmV0L2Nvbi9iJTI1M0FcIixcbiAqICAgVGhlcmUgaXMgbm8gc3BlY2lhbCBjaGFyYWN0ZXJzLCBzbyBzZW5kIFwiaHR0cDovL2FjY291bnQuYmxvYi5jb3JlLndpbmRvd3MubmV0L2Nvbi9iJTI1M0FcIiB0byBzZXJ2ZXIuIEEgYmxvYiBuYW1lZCBcImIlM0FcIiB3aWxsIGJlIGNyZWF0ZWQuXG4gKlxuICogVGhpcyBzdHJhdGVneSBnaXZlcyB1cyBmbGV4aWJpbGl0eSB0byBjcmVhdGUgd2l0aCBhbnkgc3BlY2lhbCBjaGFyYWN0ZXJzLiBCdXQgXCIlXCIgd2lsbCBiZSB0cmVhdGVkIGFzIGEgc3BlY2lhbCBjaGFyYWN0ZXJzLCBpZiB0aGUgVVJMIHN0cmluZ1xuICogaXMgbm90IGVuY29kZWQsIHRoZXJlIHNob3VsZG4ndCBhIFwiJVwiIGluIHRoZSBVUkwgc3RyaW5nLCBvdGhlcndpc2UgdGhlIFVSTCBpcyBub3QgYSB2YWxpZCBVUkwuXG4gKiBJZiBjdXN0b21lciBuZWVkcyB0byBjcmVhdGUgYSBibG9iIHdpdGggXCIlXCIgaW4gaXQncyBibG9iIG5hbWUsIHVzZSBcIiUyNVwiIGluc3RlYWQgb2YgXCIlXCIuIEp1c3QgbGlrZSBhYm92ZSAzcmQgc2FtcGxlLlxuICogQW5kIGZvbGxvd2luZyBVUkwgc3RyaW5ncyBhcmUgaW52YWxpZDpcbiAqIC0gXCJodHRwOi8vYWNjb3VudC5ibG9iLmNvcmUud2luZG93cy5uZXQvY29uL2IlXCJcbiAqIC0gXCJodHRwOi8vYWNjb3VudC5ibG9iLmNvcmUud2luZG93cy5uZXQvY29uL2IlMlwiXG4gKiAtIFwiaHR0cDovL2FjY291bnQuYmxvYi5jb3JlLndpbmRvd3MubmV0L2Nvbi9iJUdcIlxuICpcbiAqIEFub3RoZXIgc3BlY2lhbCBjaGFyYWN0ZXIgaXMgXCI/XCIsIHVzZSBcIiUyRlwiIHRvIHJlcHJlc2VudCBhIGJsb2IgbmFtZSB3aXRoIFwiP1wiIGluIGEgVVJMIHN0cmluZy5cbiAqXG4gKiAjIyMgU3RyYXRlZ3kgZm9yIGNvbnRhaW5lck5hbWUsIGJsb2JOYW1lIG9yIG90aGVyIHNwZWNpZmljIFhYWE5hbWUgcGFyYW1ldGVycyBpbiBtZXRob2RzIHN1Y2ggYXMgYGNvbnRhaW5lckNsaWVudC5nZXRCbG9iQ2xpZW50KGJsb2JOYW1lKWBcbiAqXG4gKiBXZSB3aWxsIGFwcGx5IHN0cmF0ZWd5IG9uZSwgYW5kIGNhbGwgZW5jb2RlVVJJQ29tcG9uZW50IGZvciB0aGVzZSBwYXJhbWV0ZXJzIGxpa2UgYmxvYk5hbWUuIEJlY2F1c2Ugd2hhdCBjdXN0b21lcnMgcGFzc2VzIGluIGlzIGEgcGxhaW4gbmFtZSBpbnN0ZWFkIG9mIGEgVVJMLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL25hbWluZy1hbmQtcmVmZXJlbmNpbmctY29udGFpbmVycy0tYmxvYnMtLWFuZC1tZXRhZGF0YVxuICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvbmFtaW5nLWFuZC1yZWZlcmVuY2luZy1zaGFyZXMtLWRpcmVjdG9yaWVzLS1maWxlcy0tYW5kLW1ldGFkYXRhXG4gKlxuICogQHBhcmFtIHVybCAtXG4gKi9cbmZ1bmN0aW9uIGVzY2FwZVVSTFBhdGgodXJsKSB7XG4gICAgY29uc3QgdXJsUGFyc2VkID0gbmV3IFVSTCh1cmwpO1xuICAgIGxldCBwYXRoID0gdXJsUGFyc2VkLnBhdGhuYW1lO1xuICAgIHBhdGggPSBwYXRoIHx8IFwiL1wiO1xuICAgIHBhdGggPSBlc2NhcGUocGF0aCk7XG4gICAgdXJsUGFyc2VkLnBhdGhuYW1lID0gcGF0aDtcbiAgICByZXR1cm4gdXJsUGFyc2VkLnRvU3RyaW5nKCk7XG59XG5mdW5jdGlvbiBnZXRQcm94eVVyaUZyb21EZXZDb25uU3RyaW5nKGNvbm5lY3Rpb25TdHJpbmcpIHtcbiAgICAvLyBEZXZlbG9wbWVudCBDb25uZWN0aW9uIFN0cmluZ1xuICAgIC8vIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL2F6dXJlL3N0b3JhZ2UvY29tbW9uL3N0b3JhZ2UtY29uZmlndXJlLWNvbm5lY3Rpb24tc3RyaW5nI2Nvbm5lY3QtdG8tdGhlLWVtdWxhdG9yLWFjY291bnQtdXNpbmctdGhlLXdlbGwta25vd24tYWNjb3VudC1uYW1lLWFuZC1rZXlcbiAgICBsZXQgcHJveHlVcmkgPSBcIlwiO1xuICAgIGlmIChjb25uZWN0aW9uU3RyaW5nLnNlYXJjaChcIkRldmVsb3BtZW50U3RvcmFnZVByb3h5VXJpPVwiKSAhPT0gLTEpIHtcbiAgICAgICAgLy8gQ09OTkVDVElPTl9TVFJJTkc9VXNlRGV2ZWxvcG1lbnRTdG9yYWdlPXRydWU7RGV2ZWxvcG1lbnRTdG9yYWdlUHJveHlVcmk9aHR0cDovL215UHJveHlVcmlcbiAgICAgICAgY29uc3QgbWF0Y2hDcmVkZW50aWFscyA9IGNvbm5lY3Rpb25TdHJpbmcuc3BsaXQoXCI7XCIpO1xuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgbWF0Y2hDcmVkZW50aWFscykge1xuICAgICAgICAgICAgaWYgKGVsZW1lbnQudHJpbSgpLnN0YXJ0c1dpdGgoXCJEZXZlbG9wbWVudFN0b3JhZ2VQcm94eVVyaT1cIikpIHtcbiAgICAgICAgICAgICAgICBwcm94eVVyaSA9IGVsZW1lbnQudHJpbSgpLm1hdGNoKFwiRGV2ZWxvcG1lbnRTdG9yYWdlUHJveHlVcmk9KC4qKVwiKVsxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcHJveHlVcmk7XG59XG5mdW5jdGlvbiBnZXRWYWx1ZUluQ29ublN0cmluZyhjb25uZWN0aW9uU3RyaW5nLCBhcmd1bWVudCkge1xuICAgIGNvbnN0IGVsZW1lbnRzID0gY29ubmVjdGlvblN0cmluZy5zcGxpdChcIjtcIik7XG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGVsZW1lbnRzKSB7XG4gICAgICAgIGlmIChlbGVtZW50LnRyaW0oKS5zdGFydHNXaXRoKGFyZ3VtZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQudHJpbSgpLm1hdGNoKGFyZ3VtZW50ICsgXCI9KC4qKVwiKVsxXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbn1cbi8qKlxuICogRXh0cmFjdHMgdGhlIHBhcnRzIG9mIGFuIEF6dXJlIFN0b3JhZ2UgYWNjb3VudCBjb25uZWN0aW9uIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gY29ubmVjdGlvblN0cmluZyAtIENvbm5lY3Rpb24gc3RyaW5nLlxuICogQHJldHVybnMgU3RyaW5nIGtleSB2YWx1ZSBwYWlycyBvZiB0aGUgc3RvcmFnZSBhY2NvdW50J3MgdXJsIGFuZCBjcmVkZW50aWFscy5cbiAqL1xuZnVuY3Rpb24gZXh0cmFjdENvbm5lY3Rpb25TdHJpbmdQYXJ0cyhjb25uZWN0aW9uU3RyaW5nKSB7XG4gICAgbGV0IHByb3h5VXJpID0gXCJcIjtcbiAgICBpZiAoY29ubmVjdGlvblN0cmluZy5zdGFydHNXaXRoKFwiVXNlRGV2ZWxvcG1lbnRTdG9yYWdlPXRydWVcIikpIHtcbiAgICAgICAgLy8gRGV2ZWxvcG1lbnQgY29ubmVjdGlvbiBzdHJpbmdcbiAgICAgICAgcHJveHlVcmkgPSBnZXRQcm94eVVyaUZyb21EZXZDb25uU3RyaW5nKGNvbm5lY3Rpb25TdHJpbmcpO1xuICAgICAgICBjb25uZWN0aW9uU3RyaW5nID0gRGV2ZWxvcG1lbnRDb25uZWN0aW9uU3RyaW5nO1xuICAgIH1cbiAgICAvLyBNYXRjaGluZyBCbG9iRW5kcG9pbnQgaW4gdGhlIEFjY291bnQgY29ubmVjdGlvbiBzdHJpbmdcbiAgICBsZXQgYmxvYkVuZHBvaW50ID0gZ2V0VmFsdWVJbkNvbm5TdHJpbmcoY29ubmVjdGlvblN0cmluZywgXCJCbG9iRW5kcG9pbnRcIik7XG4gICAgLy8gU2xpY2luZyBvZmYgJy8nIGF0IHRoZSBlbmQgaWYgZXhpc3RzXG4gICAgLy8gKFRoZSBtZXRob2RzIHRoYXQgdXNlIGBleHRyYWN0Q29ubmVjdGlvblN0cmluZ1BhcnRzYCBleHBlY3QgdGhlIHVybCB0byBub3QgaGF2ZSBgL2AgYXQgdGhlIGVuZClcbiAgICBibG9iRW5kcG9pbnQgPSBibG9iRW5kcG9pbnQuZW5kc1dpdGgoXCIvXCIpID8gYmxvYkVuZHBvaW50LnNsaWNlKDAsIC0xKSA6IGJsb2JFbmRwb2ludDtcbiAgICBpZiAoY29ubmVjdGlvblN0cmluZy5zZWFyY2goXCJEZWZhdWx0RW5kcG9pbnRzUHJvdG9jb2w9XCIpICE9PSAtMSAmJlxuICAgICAgICBjb25uZWN0aW9uU3RyaW5nLnNlYXJjaChcIkFjY291bnRLZXk9XCIpICE9PSAtMSkge1xuICAgICAgICAvLyBBY2NvdW50IGNvbm5lY3Rpb24gc3RyaW5nXG4gICAgICAgIGxldCBkZWZhdWx0RW5kcG9pbnRzUHJvdG9jb2wgPSBcIlwiO1xuICAgICAgICBsZXQgYWNjb3VudE5hbWUgPSBcIlwiO1xuICAgICAgICBsZXQgYWNjb3VudEtleSA9IEJ1ZmZlci5mcm9tKFwiYWNjb3VudEtleVwiLCBcImJhc2U2NFwiKTtcbiAgICAgICAgbGV0IGVuZHBvaW50U3VmZml4ID0gXCJcIjtcbiAgICAgICAgLy8gR2V0IGFjY291bnQgbmFtZSBhbmQga2V5XG4gICAgICAgIGFjY291bnROYW1lID0gZ2V0VmFsdWVJbkNvbm5TdHJpbmcoY29ubmVjdGlvblN0cmluZywgXCJBY2NvdW50TmFtZVwiKTtcbiAgICAgICAgYWNjb3VudEtleSA9IEJ1ZmZlci5mcm9tKGdldFZhbHVlSW5Db25uU3RyaW5nKGNvbm5lY3Rpb25TdHJpbmcsIFwiQWNjb3VudEtleVwiKSwgXCJiYXNlNjRcIik7XG4gICAgICAgIGlmICghYmxvYkVuZHBvaW50KSB7XG4gICAgICAgICAgICAvLyBCbG9iRW5kcG9pbnQgaXMgbm90IHByZXNlbnQgaW4gdGhlIEFjY291bnQgY29ubmVjdGlvbiBzdHJpbmdcbiAgICAgICAgICAgIC8vIENhbiBiZSBvYnRhaW5lZCBmcm9tIGAke2RlZmF1bHRFbmRwb2ludHNQcm90b2NvbH06Ly8ke2FjY291bnROYW1lfS5ibG9iLiR7ZW5kcG9pbnRTdWZmaXh9YFxuICAgICAgICAgICAgZGVmYXVsdEVuZHBvaW50c1Byb3RvY29sID0gZ2V0VmFsdWVJbkNvbm5TdHJpbmcoY29ubmVjdGlvblN0cmluZywgXCJEZWZhdWx0RW5kcG9pbnRzUHJvdG9jb2xcIik7XG4gICAgICAgICAgICBjb25zdCBwcm90b2NvbCA9IGRlZmF1bHRFbmRwb2ludHNQcm90b2NvbC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgaWYgKHByb3RvY29sICE9PSBcImh0dHBzXCIgJiYgcHJvdG9jb2wgIT09IFwiaHR0cFwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBEZWZhdWx0RW5kcG9pbnRzUHJvdG9jb2wgaW4gdGhlIHByb3ZpZGVkIENvbm5lY3Rpb24gU3RyaW5nLiBFeHBlY3RpbmcgJ2h0dHBzJyBvciAnaHR0cCdcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbmRwb2ludFN1ZmZpeCA9IGdldFZhbHVlSW5Db25uU3RyaW5nKGNvbm5lY3Rpb25TdHJpbmcsIFwiRW5kcG9pbnRTdWZmaXhcIik7XG4gICAgICAgICAgICBpZiAoIWVuZHBvaW50U3VmZml4KSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBFbmRwb2ludFN1ZmZpeCBpbiB0aGUgcHJvdmlkZWQgQ29ubmVjdGlvbiBTdHJpbmdcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBibG9iRW5kcG9pbnQgPSBgJHtkZWZhdWx0RW5kcG9pbnRzUHJvdG9jb2x9Oi8vJHthY2NvdW50TmFtZX0uYmxvYi4ke2VuZHBvaW50U3VmZml4fWA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFhY2NvdW50TmFtZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBBY2NvdW50TmFtZSBpbiB0aGUgcHJvdmlkZWQgQ29ubmVjdGlvbiBTdHJpbmdcIik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYWNjb3VudEtleS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgQWNjb3VudEtleSBpbiB0aGUgcHJvdmlkZWQgQ29ubmVjdGlvbiBTdHJpbmdcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGtpbmQ6IFwiQWNjb3VudENvbm5TdHJpbmdcIixcbiAgICAgICAgICAgIHVybDogYmxvYkVuZHBvaW50LFxuICAgICAgICAgICAgYWNjb3VudE5hbWUsXG4gICAgICAgICAgICBhY2NvdW50S2V5LFxuICAgICAgICAgICAgcHJveHlVcmksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICAvLyBTQVMgY29ubmVjdGlvbiBzdHJpbmdcbiAgICAgICAgbGV0IGFjY291bnRTYXMgPSBnZXRWYWx1ZUluQ29ublN0cmluZyhjb25uZWN0aW9uU3RyaW5nLCBcIlNoYXJlZEFjY2Vzc1NpZ25hdHVyZVwiKTtcbiAgICAgICAgbGV0IGFjY291bnROYW1lID0gZ2V0VmFsdWVJbkNvbm5TdHJpbmcoY29ubmVjdGlvblN0cmluZywgXCJBY2NvdW50TmFtZVwiKTtcbiAgICAgICAgLy8gaWYgYWNjb3VudE5hbWUgaXMgZW1wdHksIHRyeSB0byByZWFkIGl0IGZyb20gQmxvYkVuZHBvaW50XG4gICAgICAgIGlmICghYWNjb3VudE5hbWUpIHtcbiAgICAgICAgICAgIGFjY291bnROYW1lID0gZ2V0QWNjb3VudE5hbWVGcm9tVXJsKGJsb2JFbmRwb2ludCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFibG9iRW5kcG9pbnQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgQmxvYkVuZHBvaW50IGluIHRoZSBwcm92aWRlZCBTQVMgQ29ubmVjdGlvbiBTdHJpbmdcIik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIWFjY291bnRTYXMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgU2hhcmVkQWNjZXNzU2lnbmF0dXJlIGluIHRoZSBwcm92aWRlZCBTQVMgQ29ubmVjdGlvbiBTdHJpbmdcIik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY2xpZW50IGNvbnN0cnVjdG9ycyBhc3N1bWUgYWNjb3VudFNhcyBkb2VzICpub3QqIHN0YXJ0IHdpdGggP1xuICAgICAgICBpZiAoYWNjb3VudFNhcy5zdGFydHNXaXRoKFwiP1wiKSkge1xuICAgICAgICAgICAgYWNjb3VudFNhcyA9IGFjY291bnRTYXMuc3Vic3RyaW5nKDEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGtpbmQ6IFwiU0FTQ29ublN0cmluZ1wiLCB1cmw6IGJsb2JFbmRwb2ludCwgYWNjb3VudE5hbWUsIGFjY291bnRTYXMgfTtcbiAgICB9XG59XG4vKipcbiAqIEludGVybmFsIGVzY2FwZSBtZXRob2QgaW1wbGVtZW50ZWQgU3RyYXRlZ3kgVHdvIG1lbnRpb25lZCBpbiBlc2NhcGVVUkwoKSBkZXNjcmlwdGlvbi5cbiAqXG4gKiBAcGFyYW0gdGV4dCAtXG4gKi9cbmZ1bmN0aW9uIGVzY2FwZSh0ZXh0KSB7XG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh0ZXh0KVxuICAgICAgICAucmVwbGFjZSgvJTJGL2csIFwiL1wiKSAvLyBEb24ndCBlc2NhcGUgZm9yIFwiL1wiXG4gICAgICAgIC5yZXBsYWNlKC8nL2csIFwiJTI3XCIpIC8vIEVzY2FwZSBmb3IgXCInXCJcbiAgICAgICAgLnJlcGxhY2UoL1xcKy9nLCBcIiUyMFwiKVxuICAgICAgICAucmVwbGFjZSgvJTI1L2csIFwiJVwiKTsgLy8gUmV2ZXJ0IGVuY29kZWQgXCIlXCJcbn1cbi8qKlxuICogQXBwZW5kIGEgc3RyaW5nIHRvIFVSTCBwYXRoLiBXaWxsIHJlbW92ZSBkdXBsaWNhdGVkIFwiL1wiIGluIGZyb250IG9mIHRoZSBzdHJpbmdcbiAqIHdoZW4gVVJMIHBhdGggZW5kcyB3aXRoIGEgXCIvXCIuXG4gKlxuICogQHBhcmFtIHVybCAtIFNvdXJjZSBVUkwgc3RyaW5nXG4gKiBAcGFyYW0gbmFtZSAtIFN0cmluZyB0byBiZSBhcHBlbmRlZCB0byBVUkxcbiAqIEByZXR1cm5zIEFuIHVwZGF0ZWQgVVJMIHN0cmluZ1xuICovXG5mdW5jdGlvbiBhcHBlbmRUb1VSTFBhdGgodXJsLCBuYW1lKSB7XG4gICAgY29uc3QgdXJsUGFyc2VkID0gbmV3IFVSTCh1cmwpO1xuICAgIGxldCBwYXRoID0gdXJsUGFyc2VkLnBhdGhuYW1lO1xuICAgIHBhdGggPSBwYXRoID8gKHBhdGguZW5kc1dpdGgoXCIvXCIpID8gYCR7cGF0aH0ke25hbWV9YCA6IGAke3BhdGh9LyR7bmFtZX1gKSA6IG5hbWU7XG4gICAgdXJsUGFyc2VkLnBhdGhuYW1lID0gcGF0aDtcbiAgICByZXR1cm4gdXJsUGFyc2VkLnRvU3RyaW5nKCk7XG59XG4vKipcbiAqIFNldCBVUkwgcGFyYW1ldGVyIG5hbWUgYW5kIHZhbHVlLiBJZiBuYW1lIGV4aXN0cyBpbiBVUkwgcGFyYW1ldGVycywgb2xkIHZhbHVlXG4gKiB3aWxsIGJlIHJlcGxhY2VkIGJ5IG5hbWUga2V5LiBJZiBub3QgcHJvdmlkZSB2YWx1ZSwgdGhlIHBhcmFtZXRlciB3aWxsIGJlIGRlbGV0ZWQuXG4gKlxuICogQHBhcmFtIHVybCAtIFNvdXJjZSBVUkwgc3RyaW5nXG4gKiBAcGFyYW0gbmFtZSAtIFBhcmFtZXRlciBuYW1lXG4gKiBAcGFyYW0gdmFsdWUgLSBQYXJhbWV0ZXIgdmFsdWVcbiAqIEByZXR1cm5zIEFuIHVwZGF0ZWQgVVJMIHN0cmluZ1xuICovXG5mdW5jdGlvbiBzZXRVUkxQYXJhbWV0ZXIodXJsLCBuYW1lLCB2YWx1ZSkge1xuICAgIGNvbnN0IHVybFBhcnNlZCA9IG5ldyBVUkwodXJsKTtcbiAgICBjb25zdCBlbmNvZGVkTmFtZSA9IGVuY29kZVVSSUNvbXBvbmVudChuYW1lKTtcbiAgICBjb25zdCBlbmNvZGVkVmFsdWUgPSB2YWx1ZSA/IGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkgOiB1bmRlZmluZWQ7XG4gICAgLy8gbXV0YXRpbmcgc2VhcmNoUGFyYW1zIHdpbGwgY2hhbmdlIHRoZSBlbmNvZGluZywgc28gd2UgaGF2ZSB0byBkbyB0aGlzIG91cnNlbHZlc1xuICAgIGNvbnN0IHNlYXJjaFN0cmluZyA9IHVybFBhcnNlZC5zZWFyY2ggPT09IFwiXCIgPyBcIj9cIiA6IHVybFBhcnNlZC5zZWFyY2g7XG4gICAgY29uc3Qgc2VhcmNoUGllY2VzID0gW107XG4gICAgZm9yIChjb25zdCBwYWlyIG9mIHNlYXJjaFN0cmluZy5zbGljZSgxKS5zcGxpdChcIiZcIikpIHtcbiAgICAgICAgaWYgKHBhaXIpIHtcbiAgICAgICAgICAgIGNvbnN0IFtrZXldID0gcGFpci5zcGxpdChcIj1cIiwgMik7XG4gICAgICAgICAgICBpZiAoa2V5ICE9PSBlbmNvZGVkTmFtZSkge1xuICAgICAgICAgICAgICAgIHNlYXJjaFBpZWNlcy5wdXNoKHBhaXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChlbmNvZGVkVmFsdWUpIHtcbiAgICAgICAgc2VhcmNoUGllY2VzLnB1c2goYCR7ZW5jb2RlZE5hbWV9PSR7ZW5jb2RlZFZhbHVlfWApO1xuICAgIH1cbiAgICB1cmxQYXJzZWQuc2VhcmNoID0gc2VhcmNoUGllY2VzLmxlbmd0aCA/IGA/JHtzZWFyY2hQaWVjZXMuam9pbihcIiZcIil9YCA6IFwiXCI7XG4gICAgcmV0dXJuIHVybFBhcnNlZC50b1N0cmluZygpO1xufVxuLyoqXG4gKiBHZXQgVVJMIHBhcmFtZXRlciBieSBuYW1lLlxuICpcbiAqIEBwYXJhbSB1cmwgLVxuICogQHBhcmFtIG5hbWUgLVxuICovXG5mdW5jdGlvbiBnZXRVUkxQYXJhbWV0ZXIodXJsLCBuYW1lKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IHVybFBhcnNlZCA9IG5ldyBVUkwodXJsKTtcbiAgICByZXR1cm4gKF9hID0gdXJsUGFyc2VkLnNlYXJjaFBhcmFtcy5nZXQobmFtZSkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHVuZGVmaW5lZDtcbn1cbi8qKlxuICogU2V0IFVSTCBob3N0LlxuICpcbiAqIEBwYXJhbSB1cmwgLSBTb3VyY2UgVVJMIHN0cmluZ1xuICogQHBhcmFtIGhvc3QgLSBOZXcgaG9zdCBzdHJpbmdcbiAqIEByZXR1cm5zIEFuIHVwZGF0ZWQgVVJMIHN0cmluZ1xuICovXG5mdW5jdGlvbiBzZXRVUkxIb3N0KHVybCwgaG9zdCkge1xuICAgIGNvbnN0IHVybFBhcnNlZCA9IG5ldyBVUkwodXJsKTtcbiAgICB1cmxQYXJzZWQuaG9zdG5hbWUgPSBob3N0O1xuICAgIHJldHVybiB1cmxQYXJzZWQudG9TdHJpbmcoKTtcbn1cbi8qKlxuICogR2V0IFVSTCBwYXRoIGZyb20gYW4gVVJMIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gdXJsIC0gU291cmNlIFVSTCBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gZ2V0VVJMUGF0aCh1cmwpIHtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCB1cmxQYXJzZWQgPSBuZXcgVVJMKHVybCk7XG4gICAgICAgIHJldHVybiB1cmxQYXJzZWQucGF0aG5hbWU7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufVxuLyoqXG4gKiBHZXQgVVJMIHNjaGVtZSBmcm9tIGFuIFVSTCBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHVybCAtIFNvdXJjZSBVUkwgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGdldFVSTFNjaGVtZSh1cmwpIHtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCB1cmxQYXJzZWQgPSBuZXcgVVJMKHVybCk7XG4gICAgICAgIHJldHVybiB1cmxQYXJzZWQucHJvdG9jb2wuZW5kc1dpdGgoXCI6XCIpID8gdXJsUGFyc2VkLnByb3RvY29sLnNsaWNlKDAsIC0xKSA6IHVybFBhcnNlZC5wcm90b2NvbDtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59XG4vKipcbiAqIEdldCBVUkwgcGF0aCBhbmQgcXVlcnkgZnJvbSBhbiBVUkwgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB1cmwgLSBTb3VyY2UgVVJMIHN0cmluZ1xuICovXG5mdW5jdGlvbiBnZXRVUkxQYXRoQW5kUXVlcnkodXJsKSB7XG4gICAgY29uc3QgdXJsUGFyc2VkID0gbmV3IFVSTCh1cmwpO1xuICAgIGNvbnN0IHBhdGhTdHJpbmcgPSB1cmxQYXJzZWQucGF0aG5hbWU7XG4gICAgaWYgKCFwYXRoU3RyaW5nKSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiSW52YWxpZCB1cmwgd2l0aG91dCB2YWxpZCBwYXRoLlwiKTtcbiAgICB9XG4gICAgbGV0IHF1ZXJ5U3RyaW5nID0gdXJsUGFyc2VkLnNlYXJjaCB8fCBcIlwiO1xuICAgIHF1ZXJ5U3RyaW5nID0gcXVlcnlTdHJpbmcudHJpbSgpO1xuICAgIGlmIChxdWVyeVN0cmluZyAhPT0gXCJcIikge1xuICAgICAgICBxdWVyeVN0cmluZyA9IHF1ZXJ5U3RyaW5nLnN0YXJ0c1dpdGgoXCI/XCIpID8gcXVlcnlTdHJpbmcgOiBgPyR7cXVlcnlTdHJpbmd9YDsgLy8gRW5zdXJlIHF1ZXJ5IHN0cmluZyBzdGFydCB3aXRoICc/J1xuICAgIH1cbiAgICByZXR1cm4gYCR7cGF0aFN0cmluZ30ke3F1ZXJ5U3RyaW5nfWA7XG59XG4vKipcbiAqIEdldCBVUkwgcXVlcnkga2V5IHZhbHVlIHBhaXJzIGZyb20gYW4gVVJMIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gdXJsIC1cbiAqL1xuZnVuY3Rpb24gZ2V0VVJMUXVlcmllcyh1cmwpIHtcbiAgICBsZXQgcXVlcnlTdHJpbmcgPSBuZXcgVVJMKHVybCkuc2VhcmNoO1xuICAgIGlmICghcXVlcnlTdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBxdWVyeVN0cmluZyA9IHF1ZXJ5U3RyaW5nLnRyaW0oKTtcbiAgICBxdWVyeVN0cmluZyA9IHF1ZXJ5U3RyaW5nLnN0YXJ0c1dpdGgoXCI/XCIpID8gcXVlcnlTdHJpbmcuc3Vic3RyaW5nKDEpIDogcXVlcnlTdHJpbmc7XG4gICAgbGV0IHF1ZXJ5U3ViU3RyaW5ncyA9IHF1ZXJ5U3RyaW5nLnNwbGl0KFwiJlwiKTtcbiAgICBxdWVyeVN1YlN0cmluZ3MgPSBxdWVyeVN1YlN0cmluZ3MuZmlsdGVyKCh2YWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCBpbmRleE9mRXF1YWwgPSB2YWx1ZS5pbmRleE9mKFwiPVwiKTtcbiAgICAgICAgY29uc3QgbGFzdEluZGV4T2ZFcXVhbCA9IHZhbHVlLmxhc3RJbmRleE9mKFwiPVwiKTtcbiAgICAgICAgcmV0dXJuIChpbmRleE9mRXF1YWwgPiAwICYmIGluZGV4T2ZFcXVhbCA9PT0gbGFzdEluZGV4T2ZFcXVhbCAmJiBsYXN0SW5kZXhPZkVxdWFsIDwgdmFsdWUubGVuZ3RoIC0gMSk7XG4gICAgfSk7XG4gICAgY29uc3QgcXVlcmllcyA9IHt9O1xuICAgIGZvciAoY29uc3QgcXVlcnlTdWJTdHJpbmcgb2YgcXVlcnlTdWJTdHJpbmdzKSB7XG4gICAgICAgIGNvbnN0IHNwbGl0UmVzdWx0cyA9IHF1ZXJ5U3ViU3RyaW5nLnNwbGl0KFwiPVwiKTtcbiAgICAgICAgY29uc3Qga2V5ID0gc3BsaXRSZXN1bHRzWzBdO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHNwbGl0UmVzdWx0c1sxXTtcbiAgICAgICAgcXVlcmllc1trZXldID0gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBxdWVyaWVzO1xufVxuLyoqXG4gKiBBcHBlbmQgYSBzdHJpbmcgdG8gVVJMIHF1ZXJ5LlxuICpcbiAqIEBwYXJhbSB1cmwgLSBTb3VyY2UgVVJMIHN0cmluZy5cbiAqIEBwYXJhbSBxdWVyeVBhcnRzIC0gU3RyaW5nIHRvIGJlIGFwcGVuZGVkIHRvIHRoZSBVUkwgcXVlcnkuXG4gKiBAcmV0dXJucyBBbiB1cGRhdGVkIFVSTCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGFwcGVuZFRvVVJMUXVlcnkodXJsLCBxdWVyeVBhcnRzKSB7XG4gICAgY29uc3QgdXJsUGFyc2VkID0gbmV3IFVSTCh1cmwpO1xuICAgIGxldCBxdWVyeSA9IHVybFBhcnNlZC5zZWFyY2g7XG4gICAgaWYgKHF1ZXJ5KSB7XG4gICAgICAgIHF1ZXJ5ICs9IFwiJlwiICsgcXVlcnlQYXJ0cztcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHF1ZXJ5ID0gcXVlcnlQYXJ0cztcbiAgICB9XG4gICAgdXJsUGFyc2VkLnNlYXJjaCA9IHF1ZXJ5O1xuICAgIHJldHVybiB1cmxQYXJzZWQudG9TdHJpbmcoKTtcbn1cbi8qKlxuICogUm91bmRzIGEgZGF0ZSBvZmYgdG8gc2Vjb25kcy5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtXG4gKiBAcGFyYW0gd2l0aE1pbGxpc2Vjb25kcyAtIElmIHRydWUsIFlZWVktTU0tRERUaGg6bW06c3MuZmZmZmZmZlogd2lsbCBiZSByZXR1cm5lZDtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgZmFsc2UsIFlZWVktTU0tRERUaGg6bW06c3NaIHdpbGwgYmUgcmV0dXJuZWQuXG4gKiBAcmV0dXJucyBEYXRlIHN0cmluZyBpbiBJU084MDYxIGZvcm1hdCwgd2l0aCBvciB3aXRob3V0IDcgbWlsbGlzZWNvbmRzIGNvbXBvbmVudFxuICovXG5mdW5jdGlvbiB0cnVuY2F0ZWRJU084MDYxRGF0ZShkYXRlLCB3aXRoTWlsbGlzZWNvbmRzID0gdHJ1ZSkge1xuICAgIC8vIERhdGUudG9JU09TdHJpbmcoKSB3aWxsIHJldHVybiBsaWtlIFwiMjAxOC0xMC0yOVQwNjozNDozNi4xMzlaXCJcbiAgICBjb25zdCBkYXRlU3RyaW5nID0gZGF0ZS50b0lTT1N0cmluZygpO1xuICAgIHJldHVybiB3aXRoTWlsbGlzZWNvbmRzXG4gICAgICAgID8gZGF0ZVN0cmluZy5zdWJzdHJpbmcoMCwgZGF0ZVN0cmluZy5sZW5ndGggLSAxKSArIFwiMDAwMFwiICsgXCJaXCJcbiAgICAgICAgOiBkYXRlU3RyaW5nLnN1YnN0cmluZygwLCBkYXRlU3RyaW5nLmxlbmd0aCAtIDUpICsgXCJaXCI7XG59XG4vKipcbiAqIEJhc2U2NCBlbmNvZGUuXG4gKlxuICogQHBhcmFtIGNvbnRlbnQgLVxuICovXG5mdW5jdGlvbiBiYXNlNjRlbmNvZGUoY29udGVudCkge1xuICAgIHJldHVybiAhY29yZVV0aWwuaXNOb2RlID8gYnRvYShjb250ZW50KSA6IEJ1ZmZlci5mcm9tKGNvbnRlbnQpLnRvU3RyaW5nKFwiYmFzZTY0XCIpO1xufVxuLyoqXG4gKiBHZW5lcmF0ZSBhIDY0IGJ5dGVzIGJhc2U2NCBibG9jayBJRCBzdHJpbmcuXG4gKlxuICogQHBhcmFtIGJsb2NrSW5kZXggLVxuICovXG5mdW5jdGlvbiBnZW5lcmF0ZUJsb2NrSUQoYmxvY2tJRFByZWZpeCwgYmxvY2tJbmRleCkge1xuICAgIC8vIFRvIGdlbmVyYXRlIGEgNjQgYnl0ZXMgYmFzZTY0IHN0cmluZywgc291cmNlIHN0cmluZyBzaG91bGQgYmUgNDhcbiAgICBjb25zdCBtYXhTb3VyY2VTdHJpbmdMZW5ndGggPSA0ODtcbiAgICAvLyBBIGJsb2IgY2FuIGhhdmUgYSBtYXhpbXVtIG9mIDEwMCwwMDAgdW5jb21taXR0ZWQgYmxvY2tzIGF0IGFueSBnaXZlbiB0aW1lXG4gICAgY29uc3QgbWF4QmxvY2tJbmRleExlbmd0aCA9IDY7XG4gICAgY29uc3QgbWF4QWxsb3dlZEJsb2NrSURQcmVmaXhMZW5ndGggPSBtYXhTb3VyY2VTdHJpbmdMZW5ndGggLSBtYXhCbG9ja0luZGV4TGVuZ3RoO1xuICAgIGlmIChibG9ja0lEUHJlZml4Lmxlbmd0aCA+IG1heEFsbG93ZWRCbG9ja0lEUHJlZml4TGVuZ3RoKSB7XG4gICAgICAgIGJsb2NrSURQcmVmaXggPSBibG9ja0lEUHJlZml4LnNsaWNlKDAsIG1heEFsbG93ZWRCbG9ja0lEUHJlZml4TGVuZ3RoKTtcbiAgICB9XG4gICAgY29uc3QgcmVzID0gYmxvY2tJRFByZWZpeCArXG4gICAgICAgIHBhZFN0YXJ0KGJsb2NrSW5kZXgudG9TdHJpbmcoKSwgbWF4U291cmNlU3RyaW5nTGVuZ3RoIC0gYmxvY2tJRFByZWZpeC5sZW5ndGgsIFwiMFwiKTtcbiAgICByZXR1cm4gYmFzZTY0ZW5jb2RlKHJlcyk7XG59XG4vKipcbiAqIERlbGF5IHNwZWNpZmllZCB0aW1lIGludGVydmFsLlxuICpcbiAqIEBwYXJhbSB0aW1lSW5NcyAtXG4gKiBAcGFyYW0gYWJvcnRlciAtXG4gKiBAcGFyYW0gYWJvcnRFcnJvciAtXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRlbGF5KHRpbWVJbk1zLCBhYm9ydGVyLCBhYm9ydEVycm9yKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdCAqL1xuICAgICAgICBsZXQgdGltZW91dDtcbiAgICAgICAgY29uc3QgYWJvcnRIYW5kbGVyID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlamVjdChhYm9ydEVycm9yKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmVzb2x2ZUhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoYWJvcnRlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgYWJvcnRlci5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgYWJvcnRIYW5kbGVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfTtcbiAgICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQocmVzb2x2ZUhhbmRsZXIsIHRpbWVJbk1zKTtcbiAgICAgICAgaWYgKGFib3J0ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYWJvcnRlci5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgYWJvcnRIYW5kbGVyKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuLyoqXG4gKiBTdHJpbmcucHJvdG90eXBlLnBhZFN0YXJ0KClcbiAqXG4gKiBAcGFyYW0gY3VycmVudFN0cmluZyAtXG4gKiBAcGFyYW0gdGFyZ2V0TGVuZ3RoIC1cbiAqIEBwYXJhbSBwYWRTdHJpbmcgLVxuICovXG5mdW5jdGlvbiBwYWRTdGFydChjdXJyZW50U3RyaW5nLCB0YXJnZXRMZW5ndGgsIHBhZFN0cmluZyA9IFwiIFwiKSB7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogVFMgZG9lc24ndCBrbm93IHRoaXMgY29kZSBuZWVkcyB0byBydW4gZG93bmxldmVsIHNvbWV0aW1lc1xuICAgIGlmIChTdHJpbmcucHJvdG90eXBlLnBhZFN0YXJ0KSB7XG4gICAgICAgIHJldHVybiBjdXJyZW50U3RyaW5nLnBhZFN0YXJ0KHRhcmdldExlbmd0aCwgcGFkU3RyaW5nKTtcbiAgICB9XG4gICAgcGFkU3RyaW5nID0gcGFkU3RyaW5nIHx8IFwiIFwiO1xuICAgIGlmIChjdXJyZW50U3RyaW5nLmxlbmd0aCA+IHRhcmdldExlbmd0aCkge1xuICAgICAgICByZXR1cm4gY3VycmVudFN0cmluZztcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRhcmdldExlbmd0aCA9IHRhcmdldExlbmd0aCAtIGN1cnJlbnRTdHJpbmcubGVuZ3RoO1xuICAgICAgICBpZiAodGFyZ2V0TGVuZ3RoID4gcGFkU3RyaW5nLmxlbmd0aCkge1xuICAgICAgICAgICAgcGFkU3RyaW5nICs9IHBhZFN0cmluZy5yZXBlYXQodGFyZ2V0TGVuZ3RoIC8gcGFkU3RyaW5nLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhZFN0cmluZy5zbGljZSgwLCB0YXJnZXRMZW5ndGgpICsgY3VycmVudFN0cmluZztcbiAgICB9XG59XG4vKipcbiAqIElmIHR3byBzdHJpbmdzIGFyZSBlcXVhbCB3aGVuIGNvbXBhcmVkIGNhc2UgaW5zZW5zaXRpdmUuXG4gKlxuICogQHBhcmFtIHN0cjEgLVxuICogQHBhcmFtIHN0cjIgLVxuICovXG5mdW5jdGlvbiBpRXF1YWwoc3RyMSwgc3RyMikge1xuICAgIHJldHVybiBzdHIxLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09IHN0cjIudG9Mb2NhbGVMb3dlckNhc2UoKTtcbn1cbi8qKlxuICogRXh0cmFjdHMgYWNjb3VudCBuYW1lIGZyb20gdGhlIHVybFxuICogQHBhcmFtIHVybCAtIHVybCB0byBleHRyYWN0IHRoZSBhY2NvdW50IG5hbWUgZnJvbVxuICogQHJldHVybnMgd2l0aCB0aGUgYWNjb3VudCBuYW1lXG4gKi9cbmZ1bmN0aW9uIGdldEFjY291bnROYW1lRnJvbVVybCh1cmwpIHtcbiAgICBjb25zdCBwYXJzZWRVcmwgPSBuZXcgVVJMKHVybCk7XG4gICAgbGV0IGFjY291bnROYW1lO1xuICAgIHRyeSB7XG4gICAgICAgIGlmIChwYXJzZWRVcmwuaG9zdG5hbWUuc3BsaXQoXCIuXCIpWzFdID09PSBcImJsb2JcIikge1xuICAgICAgICAgICAgLy8gYCR7ZGVmYXVsdEVuZHBvaW50c1Byb3RvY29sfTovLyR7YWNjb3VudE5hbWV9LmJsb2IuJHtlbmRwb2ludFN1ZmZpeH1gO1xuICAgICAgICAgICAgYWNjb3VudE5hbWUgPSBwYXJzZWRVcmwuaG9zdG5hbWUuc3BsaXQoXCIuXCIpWzBdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzSXBFbmRwb2ludFN0eWxlKHBhcnNlZFVybCkpIHtcbiAgICAgICAgICAgIC8vIElQdjQvSVB2NiBhZGRyZXNzIGhvc3RzLi4uIEV4YW1wbGUgLSBodHRwOi8vMTkyLjAuMC4xMDoxMDAwMS9kZXZzdG9yZWFjY291bnQxL1xuICAgICAgICAgICAgLy8gU2luZ2xlIHdvcmQgZG9tYWluIHdpdGhvdXQgYSBbZG90XSBpbiB0aGUgZW5kcG9pbnQuLi4gRXhhbXBsZSAtIGh0dHA6Ly9sb2NhbGhvc3Q6MTAwMDEvZGV2c3RvcmVhY2NvdW50MS9cbiAgICAgICAgICAgIC8vIC5nZXRQYXRoKCkgLT4gL2RldnN0b3JlYWNjb3VudDEvXG4gICAgICAgICAgICBhY2NvdW50TmFtZSA9IHBhcnNlZFVybC5wYXRobmFtZS5zcGxpdChcIi9cIilbMV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBDdXN0b20gZG9tYWluIGNhc2U6IFwiaHR0cHM6Ly9jdXN0b21kb21haW4uY29tL2NvbnRhaW5lcm5hbWUvYmxvYlwiLlxuICAgICAgICAgICAgYWNjb3VudE5hbWUgPSBcIlwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2NvdW50TmFtZTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBleHRyYWN0IGFjY291bnROYW1lIHdpdGggcHJvdmlkZWQgaW5mb3JtYXRpb24uXCIpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGlzSXBFbmRwb2ludFN0eWxlKHBhcnNlZFVybCkge1xuICAgIGNvbnN0IGhvc3QgPSBwYXJzZWRVcmwuaG9zdDtcbiAgICAvLyBDYXNlIDE6IElwdjYsIHVzZSBhIGJyb2FkIHJlZ2V4IHRvIGZpbmQgb3V0IGNhbmRpZGF0ZXMgd2hvc2UgaG9zdCBjb250YWlucyB0d28gJzonLlxuICAgIC8vIENhc2UgMjogbG9jYWxob3N0KDpwb3J0KSBvciBob3N0LmRvY2tlci5pbnRlcm5hbCwgdXNlIGJyb2FkIHJlZ2V4IHRvIG1hdGNoIHBvcnQgcGFydC5cbiAgICAvLyBDYXNlIDM6IElwdjQsIHVzZSBicm9hZCByZWdleCB3aGljaCBqdXN0IGNoZWNrIGlmIGhvc3QgY29udGFpbnMgSXB2NC5cbiAgICAvLyBGb3IgdmFsaWQgaG9zdCBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9tYW43Lm9yZy9saW51eC9tYW4tcGFnZXMvbWFuNy9ob3N0bmFtZS43Lmh0bWwuXG4gICAgcmV0dXJuICgvXi4qOi4qOi4qJHxeKGxvY2FsaG9zdHxob3N0LmRvY2tlci5pbnRlcm5hbCkoOlswLTldKyk/JHxeKFxcZHxbMS05XVxcZHwxXFxkXFxkfDJbMC00XVxcZHwyNVswLTVdKShcXC4oXFxkfFsxLTldXFxkfDFcXGRcXGR8MlswLTRdXFxkfDI1WzAtNV0pKXszfSg6WzAtOV0rKT8kLy50ZXN0KGhvc3QpIHx8XG4gICAgICAgIChCb29sZWFuKHBhcnNlZFVybC5wb3J0KSAmJiBQYXRoU3R5bGVQb3J0cy5pbmNsdWRlcyhwYXJzZWRVcmwucG9ydCkpKTtcbn1cbi8qKlxuICogQ29udmVydCBUYWdzIHRvIGVuY29kZWQgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB0YWdzIC1cbiAqL1xuZnVuY3Rpb24gdG9CbG9iVGFnc1N0cmluZyh0YWdzKSB7XG4gICAgaWYgKHRhZ3MgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCB0YWdQYWlycyA9IFtdO1xuICAgIGZvciAoY29uc3Qga2V5IGluIHRhZ3MpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0YWdzLCBrZXkpKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRhZ3Nba2V5XTtcbiAgICAgICAgICAgIHRhZ1BhaXJzLnB1c2goYCR7ZW5jb2RlVVJJQ29tcG9uZW50KGtleSl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKX1gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGFnUGFpcnMuam9pbihcIiZcIik7XG59XG4vKipcbiAqIENvbnZlcnQgVGFncyB0eXBlIHRvIEJsb2JUYWdzLlxuICpcbiAqIEBwYXJhbSB0YWdzIC1cbiAqL1xuZnVuY3Rpb24gdG9CbG9iVGFncyh0YWdzKSB7XG4gICAgaWYgKHRhZ3MgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCByZXMgPSB7XG4gICAgICAgIGJsb2JUYWdTZXQ6IFtdLFxuICAgIH07XG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGFncykge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRhZ3MsIGtleSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGFnc1trZXldO1xuICAgICAgICAgICAgcmVzLmJsb2JUYWdTZXQucHVzaCh7XG4gICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn1cbi8qKlxuICogQ292ZXJ0IEJsb2JUYWdzIHRvIFRhZ3MgdHlwZS5cbiAqXG4gKiBAcGFyYW0gdGFncyAtXG4gKi9cbmZ1bmN0aW9uIHRvVGFncyh0YWdzKSB7XG4gICAgaWYgKHRhZ3MgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCByZXMgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGJsb2JUYWcgb2YgdGFncy5ibG9iVGFnU2V0KSB7XG4gICAgICAgIHJlc1tibG9iVGFnLmtleV0gPSBibG9iVGFnLnZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuLyoqXG4gKiBDb252ZXJ0IEJsb2JRdWVyeVRleHRDb25maWd1cmF0aW9uIHRvIFF1ZXJ5U2VyaWFsaXphdGlvbiB0eXBlLlxuICpcbiAqIEBwYXJhbSB0ZXh0Q29uZmlndXJhdGlvbiAtXG4gKi9cbmZ1bmN0aW9uIHRvUXVlcnlTZXJpYWxpemF0aW9uKHRleHRDb25maWd1cmF0aW9uKSB7XG4gICAgaWYgKHRleHRDb25maWd1cmF0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgc3dpdGNoICh0ZXh0Q29uZmlndXJhdGlvbi5raW5kKSB7XG4gICAgICAgIGNhc2UgXCJjc3ZcIjpcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZm9ybWF0OiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiZGVsaW1pdGVkXCIsXG4gICAgICAgICAgICAgICAgICAgIGRlbGltaXRlZFRleHRDb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5TZXBhcmF0b3I6IHRleHRDb25maWd1cmF0aW9uLmNvbHVtblNlcGFyYXRvciB8fCBcIixcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkUXVvdGU6IHRleHRDb25maWd1cmF0aW9uLmZpZWxkUXVvdGUgfHwgXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZFNlcGFyYXRvcjogdGV4dENvbmZpZ3VyYXRpb24ucmVjb3JkU2VwYXJhdG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXNjYXBlQ2hhcjogdGV4dENvbmZpZ3VyYXRpb24uZXNjYXBlQ2hhcmFjdGVyIHx8IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzUHJlc2VudDogdGV4dENvbmZpZ3VyYXRpb24uaGFzSGVhZGVycyB8fCBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgY2FzZSBcImpzb25cIjpcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZm9ybWF0OiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwianNvblwiLFxuICAgICAgICAgICAgICAgICAgICBqc29uVGV4dENvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZFNlcGFyYXRvcjogdGV4dENvbmZpZ3VyYXRpb24ucmVjb3JkU2VwYXJhdG9yLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICBjYXNlIFwiYXJyb3dcIjpcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZm9ybWF0OiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYXJyb3dcIixcbiAgICAgICAgICAgICAgICAgICAgYXJyb3dDb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWE6IHRleHRDb25maWd1cmF0aW9uLnNjaGVtYSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgY2FzZSBcInBhcnF1ZXRcIjpcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZm9ybWF0OiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwicGFycXVldFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJJbnZhbGlkIEJsb2JRdWVyeVRleHRDb25maWd1cmF0aW9uLlwiKTtcbiAgICB9XG59XG5mdW5jdGlvbiBwYXJzZU9iamVjdFJlcGxpY2F0aW9uUmVjb3JkKG9iamVjdFJlcGxpY2F0aW9uUmVjb3JkKSB7XG4gICAgaWYgKCFvYmplY3RSZXBsaWNhdGlvblJlY29yZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAoXCJwb2xpY3ktaWRcIiBpbiBvYmplY3RSZXBsaWNhdGlvblJlY29yZCkge1xuICAgICAgICAvLyBJZiB0aGUgZGljdGlvbmFyeSBjb250YWlucyBhIGtleSB3aXRoIHBvbGljeSBpZCwgd2UgYXJlIG5vdCByZXF1aXJlZCB0byBkbyBhbnkgcGFyc2luZyBzaW5jZVxuICAgICAgICAvLyB0aGUgcG9saWN5IGlkIHNob3VsZCBhbHJlYWR5IGJlIHN0b3JlZCBpbiB0aGUgT2JqZWN0UmVwbGljYXRpb25EZXN0aW5hdGlvblBvbGljeUlkLlxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBvclByb3BlcnRpZXMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmplY3RSZXBsaWNhdGlvblJlY29yZCkge1xuICAgICAgICBjb25zdCBpZHMgPSBrZXkuc3BsaXQoXCJfXCIpO1xuICAgICAgICBjb25zdCBwb2xpY3lQcmVmaXggPSBcIm9yLVwiO1xuICAgICAgICBpZiAoaWRzWzBdLnN0YXJ0c1dpdGgocG9saWN5UHJlZml4KSkge1xuICAgICAgICAgICAgaWRzWzBdID0gaWRzWzBdLnN1YnN0cmluZyhwb2xpY3lQcmVmaXgubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBydWxlID0ge1xuICAgICAgICAgICAgcnVsZUlkOiBpZHNbMV0sXG4gICAgICAgICAgICByZXBsaWNhdGlvblN0YXR1czogb2JqZWN0UmVwbGljYXRpb25SZWNvcmRba2V5XSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcG9saWN5SW5kZXggPSBvclByb3BlcnRpZXMuZmluZEluZGV4KChwb2xpY3kpID0+IHBvbGljeS5wb2xpY3lJZCA9PT0gaWRzWzBdKTtcbiAgICAgICAgaWYgKHBvbGljeUluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIG9yUHJvcGVydGllc1twb2xpY3lJbmRleF0ucnVsZXMucHVzaChydWxlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG9yUHJvcGVydGllcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBwb2xpY3lJZDogaWRzWzBdLFxuICAgICAgICAgICAgICAgIHJ1bGVzOiBbcnVsZV0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3JQcm9wZXJ0aWVzO1xufVxuZnVuY3Rpb24gaHR0cEF1dGhvcml6YXRpb25Ub1N0cmluZyhodHRwQXV0aG9yaXphdGlvbikge1xuICAgIHJldHVybiBodHRwQXV0aG9yaXphdGlvbiA/IGh0dHBBdXRob3JpemF0aW9uLnNjaGVtZSArIFwiIFwiICsgaHR0cEF1dGhvcml6YXRpb24udmFsdWUgOiB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBCbG9iTmFtZVRvU3RyaW5nKG5hbWUpIHtcbiAgICBpZiAobmFtZS5lbmNvZGVkKSB7XG4gICAgICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQobmFtZS5jb250ZW50KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBuYW1lLmNvbnRlbnQ7XG4gICAgfVxufVxuZnVuY3Rpb24gQ29udmVydEludGVybmFsUmVzcG9uc2VPZkxpc3RCbG9iRmxhdChpbnRlcm5hbFJlc3BvbnNlKSB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgaW50ZXJuYWxSZXNwb25zZSksIHsgc2VnbWVudDoge1xuICAgICAgICAgICAgYmxvYkl0ZW1zOiBpbnRlcm5hbFJlc3BvbnNlLnNlZ21lbnQuYmxvYkl0ZW1zLm1hcCgoYmxvYkl0ZW1JbnRlcmFsKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmxvYkl0ZW0gPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGJsb2JJdGVtSW50ZXJhbCksIHsgbmFtZTogQmxvYk5hbWVUb1N0cmluZyhibG9iSXRlbUludGVyYWwubmFtZSkgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJsb2JJdGVtO1xuICAgICAgICAgICAgfSksXG4gICAgICAgIH0gfSk7XG59XG5mdW5jdGlvbiBDb252ZXJ0SW50ZXJuYWxSZXNwb25zZU9mTGlzdEJsb2JIaWVyYXJjaHkoaW50ZXJuYWxSZXNwb25zZSkge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBpbnRlcm5hbFJlc3BvbnNlKSwgeyBzZWdtZW50OiB7XG4gICAgICAgICAgICBibG9iUHJlZml4ZXM6IChfYSA9IGludGVybmFsUmVzcG9uc2Uuc2VnbWVudC5ibG9iUHJlZml4ZXMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5tYXAoKGJsb2JQcmVmaXhJbnRlcm5hbCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2JQcmVmaXggPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGJsb2JQcmVmaXhJbnRlcm5hbCksIHsgbmFtZTogQmxvYk5hbWVUb1N0cmluZyhibG9iUHJlZml4SW50ZXJuYWwubmFtZSkgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJsb2JQcmVmaXg7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGJsb2JJdGVtczogaW50ZXJuYWxSZXNwb25zZS5zZWdtZW50LmJsb2JJdGVtcy5tYXAoKGJsb2JJdGVtSW50ZXJhbCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2JJdGVtID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBibG9iSXRlbUludGVyYWwpLCB7IG5hbWU6IEJsb2JOYW1lVG9TdHJpbmcoYmxvYkl0ZW1JbnRlcmFsLm5hbWUpIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBibG9iSXRlbTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9IH0pO1xufVxuZnVuY3Rpb24qIEV4dHJhY3RQYWdlUmFuZ2VJbmZvSXRlbXMoZ2V0UGFnZVJhbmdlc1NlZ21lbnQpIHtcbiAgICBsZXQgcGFnZVJhbmdlID0gW107XG4gICAgbGV0IGNsZWFyUmFuZ2UgPSBbXTtcbiAgICBpZiAoZ2V0UGFnZVJhbmdlc1NlZ21lbnQucGFnZVJhbmdlKVxuICAgICAgICBwYWdlUmFuZ2UgPSBnZXRQYWdlUmFuZ2VzU2VnbWVudC5wYWdlUmFuZ2U7XG4gICAgaWYgKGdldFBhZ2VSYW5nZXNTZWdtZW50LmNsZWFyUmFuZ2UpXG4gICAgICAgIGNsZWFyUmFuZ2UgPSBnZXRQYWdlUmFuZ2VzU2VnbWVudC5jbGVhclJhbmdlO1xuICAgIGxldCBwYWdlUmFuZ2VJbmRleCA9IDA7XG4gICAgbGV0IGNsZWFyUmFuZ2VJbmRleCA9IDA7XG4gICAgd2hpbGUgKHBhZ2VSYW5nZUluZGV4IDwgcGFnZVJhbmdlLmxlbmd0aCAmJiBjbGVhclJhbmdlSW5kZXggPCBjbGVhclJhbmdlLmxlbmd0aCkge1xuICAgICAgICBpZiAocGFnZVJhbmdlW3BhZ2VSYW5nZUluZGV4XS5zdGFydCA8IGNsZWFyUmFuZ2VbY2xlYXJSYW5nZUluZGV4XS5zdGFydCkge1xuICAgICAgICAgICAgeWllbGQge1xuICAgICAgICAgICAgICAgIHN0YXJ0OiBwYWdlUmFuZ2VbcGFnZVJhbmdlSW5kZXhdLnN0YXJ0LFxuICAgICAgICAgICAgICAgIGVuZDogcGFnZVJhbmdlW3BhZ2VSYW5nZUluZGV4XS5lbmQsXG4gICAgICAgICAgICAgICAgaXNDbGVhcjogZmFsc2UsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgKytwYWdlUmFuZ2VJbmRleDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHlpZWxkIHtcbiAgICAgICAgICAgICAgICBzdGFydDogY2xlYXJSYW5nZVtjbGVhclJhbmdlSW5kZXhdLnN0YXJ0LFxuICAgICAgICAgICAgICAgIGVuZDogY2xlYXJSYW5nZVtjbGVhclJhbmdlSW5kZXhdLmVuZCxcbiAgICAgICAgICAgICAgICBpc0NsZWFyOiB0cnVlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICsrY2xlYXJSYW5nZUluZGV4O1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvciAoOyBwYWdlUmFuZ2VJbmRleCA8IHBhZ2VSYW5nZS5sZW5ndGg7ICsrcGFnZVJhbmdlSW5kZXgpIHtcbiAgICAgICAgeWllbGQge1xuICAgICAgICAgICAgc3RhcnQ6IHBhZ2VSYW5nZVtwYWdlUmFuZ2VJbmRleF0uc3RhcnQsXG4gICAgICAgICAgICBlbmQ6IHBhZ2VSYW5nZVtwYWdlUmFuZ2VJbmRleF0uZW5kLFxuICAgICAgICAgICAgaXNDbGVhcjogZmFsc2UsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGZvciAoOyBjbGVhclJhbmdlSW5kZXggPCBjbGVhclJhbmdlLmxlbmd0aDsgKytjbGVhclJhbmdlSW5kZXgpIHtcbiAgICAgICAgeWllbGQge1xuICAgICAgICAgICAgc3RhcnQ6IGNsZWFyUmFuZ2VbY2xlYXJSYW5nZUluZGV4XS5zdGFydCxcbiAgICAgICAgICAgIGVuZDogY2xlYXJSYW5nZVtjbGVhclJhbmdlSW5kZXhdLmVuZCxcbiAgICAgICAgICAgIGlzQ2xlYXI6IHRydWUsXG4gICAgICAgIH07XG4gICAgfVxufVxuLyoqXG4gKiBFc2NhcGUgdGhlIGJsb2JOYW1lIGJ1dCBrZWVwIHBhdGggc2VwYXJhdG9yICgnLycpLlxuICovXG5mdW5jdGlvbiBFc2NhcGVQYXRoKGJsb2JOYW1lKSB7XG4gICAgY29uc3Qgc3BsaXQgPSBibG9iTmFtZS5zcGxpdChcIi9cIik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcGxpdC5sZW5ndGg7IGkrKykge1xuICAgICAgICBzcGxpdFtpXSA9IGVuY29kZVVSSUNvbXBvbmVudChzcGxpdFtpXSk7XG4gICAgfVxuICAgIHJldHVybiBzcGxpdC5qb2luKFwiL1wiKTtcbn1cbi8qKlxuICogQSB0eXBlc2FmZSBoZWxwZXIgZm9yIGVuc3VyaW5nIHRoYXQgYSBnaXZlbiByZXNwb25zZSBvYmplY3QgaGFzXG4gKiB0aGUgb3JpZ2luYWwgX3Jlc3BvbnNlIGF0dGFjaGVkLlxuICogQHBhcmFtIHJlc3BvbnNlIC0gQSByZXNwb25zZSBvYmplY3QgZnJvbSBjYWxsaW5nIGEgY2xpZW50IG9wZXJhdGlvblxuICogQHJldHVybnMgVGhlIHNhbWUgb2JqZWN0LCBidXQgd2l0aCBrbm93biBfcmVzcG9uc2UgcHJvcGVydHlcbiAqL1xuZnVuY3Rpb24gYXNzZXJ0UmVzcG9uc2UocmVzcG9uc2UpIHtcbiAgICBpZiAoYF9yZXNwb25zZWAgaW4gcmVzcG9uc2UpIHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBVbmV4cGVjdGVkIHJlc3BvbnNlIG9iamVjdCAke3Jlc3BvbnNlfWApO1xufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogUmV0cnlQb2xpY3kgdHlwZXMuXG4gKi9cbmV4cG9ydHMuU3RvcmFnZVJldHJ5UG9saWN5VHlwZSA9IHZvaWQgMDtcbihmdW5jdGlvbiAoU3RvcmFnZVJldHJ5UG9saWN5VHlwZSkge1xuICAgIC8qKlxuICAgICAqIEV4cG9uZW50aWFsIHJldHJ5LiBSZXRyeSB0aW1lIGRlbGF5IGdyb3dzIGV4cG9uZW50aWFsbHkuXG4gICAgICovXG4gICAgU3RvcmFnZVJldHJ5UG9saWN5VHlwZVtTdG9yYWdlUmV0cnlQb2xpY3lUeXBlW1wiRVhQT05FTlRJQUxcIl0gPSAwXSA9IFwiRVhQT05FTlRJQUxcIjtcbiAgICAvKipcbiAgICAgKiBMaW5lYXIgcmV0cnkuIFJldHJ5IHRpbWUgZGVsYXkgZ3Jvd3MgbGluZWFybHkuXG4gICAgICovXG4gICAgU3RvcmFnZVJldHJ5UG9saWN5VHlwZVtTdG9yYWdlUmV0cnlQb2xpY3lUeXBlW1wiRklYRURcIl0gPSAxXSA9IFwiRklYRURcIjtcbn0pKGV4cG9ydHMuU3RvcmFnZVJldHJ5UG9saWN5VHlwZSB8fCAoZXhwb3J0cy5TdG9yYWdlUmV0cnlQb2xpY3lUeXBlID0ge30pKTtcbi8vIERlZmF1bHQgdmFsdWVzIG9mIFN0b3JhZ2VSZXRyeU9wdGlvbnNcbmNvbnN0IERFRkFVTFRfUkVUUllfT1BUSU9OUyQxID0ge1xuICAgIG1heFJldHJ5RGVsYXlJbk1zOiAxMjAgKiAxMDAwLFxuICAgIG1heFRyaWVzOiA0LFxuICAgIHJldHJ5RGVsYXlJbk1zOiA0ICogMTAwMCxcbiAgICByZXRyeVBvbGljeVR5cGU6IGV4cG9ydHMuU3RvcmFnZVJldHJ5UG9saWN5VHlwZS5FWFBPTkVOVElBTCxcbiAgICBzZWNvbmRhcnlIb3N0OiBcIlwiLFxuICAgIHRyeVRpbWVvdXRJbk1zOiB1bmRlZmluZWQsIC8vIFVzZSBzZXJ2ZXIgc2lkZSBkZWZhdWx0IHRpbWVvdXQgc3RyYXRlZ3lcbn07XG5jb25zdCBSRVRSWV9BQk9SVF9FUlJPUiQxID0gbmV3IGFib3J0Q29udHJvbGxlci5BYm9ydEVycm9yKFwiVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC5cIik7XG4vKipcbiAqIFJldHJ5IHBvbGljeSB3aXRoIGV4cG9uZW50aWFsIHJldHJ5IGFuZCBsaW5lYXIgcmV0cnkgaW1wbGVtZW50ZWQuXG4gKi9cbmNsYXNzIFN0b3JhZ2VSZXRyeVBvbGljeSBleHRlbmRzIEJhc2VSZXF1ZXN0UG9saWN5IHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIFJldHJ5UG9saWN5LlxuICAgICAqXG4gICAgICogQHBhcmFtIG5leHRQb2xpY3kgLVxuICAgICAqIEBwYXJhbSBvcHRpb25zIC1cbiAgICAgKiBAcGFyYW0gcmV0cnlPcHRpb25zIC1cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihuZXh0UG9saWN5LCBvcHRpb25zLCByZXRyeU9wdGlvbnMgPSBERUZBVUxUX1JFVFJZX09QVElPTlMkMSkge1xuICAgICAgICBzdXBlcihuZXh0UG9saWN5LCBvcHRpb25zKTtcbiAgICAgICAgLy8gSW5pdGlhbGl6ZSByZXRyeSBvcHRpb25zXG4gICAgICAgIHRoaXMucmV0cnlPcHRpb25zID0ge1xuICAgICAgICAgICAgcmV0cnlQb2xpY3lUeXBlOiByZXRyeU9wdGlvbnMucmV0cnlQb2xpY3lUeXBlXG4gICAgICAgICAgICAgICAgPyByZXRyeU9wdGlvbnMucmV0cnlQb2xpY3lUeXBlXG4gICAgICAgICAgICAgICAgOiBERUZBVUxUX1JFVFJZX09QVElPTlMkMS5yZXRyeVBvbGljeVR5cGUsXG4gICAgICAgICAgICBtYXhUcmllczogcmV0cnlPcHRpb25zLm1heFRyaWVzICYmIHJldHJ5T3B0aW9ucy5tYXhUcmllcyA+PSAxXG4gICAgICAgICAgICAgICAgPyBNYXRoLmZsb29yKHJldHJ5T3B0aW9ucy5tYXhUcmllcylcbiAgICAgICAgICAgICAgICA6IERFRkFVTFRfUkVUUllfT1BUSU9OUyQxLm1heFRyaWVzLFxuICAgICAgICAgICAgdHJ5VGltZW91dEluTXM6IHJldHJ5T3B0aW9ucy50cnlUaW1lb3V0SW5NcyAmJiByZXRyeU9wdGlvbnMudHJ5VGltZW91dEluTXMgPj0gMFxuICAgICAgICAgICAgICAgID8gcmV0cnlPcHRpb25zLnRyeVRpbWVvdXRJbk1zXG4gICAgICAgICAgICAgICAgOiBERUZBVUxUX1JFVFJZX09QVElPTlMkMS50cnlUaW1lb3V0SW5NcyxcbiAgICAgICAgICAgIHJldHJ5RGVsYXlJbk1zOiByZXRyeU9wdGlvbnMucmV0cnlEZWxheUluTXMgJiYgcmV0cnlPcHRpb25zLnJldHJ5RGVsYXlJbk1zID49IDBcbiAgICAgICAgICAgICAgICA/IE1hdGgubWluKHJldHJ5T3B0aW9ucy5yZXRyeURlbGF5SW5NcywgcmV0cnlPcHRpb25zLm1heFJldHJ5RGVsYXlJbk1zXG4gICAgICAgICAgICAgICAgICAgID8gcmV0cnlPcHRpb25zLm1heFJldHJ5RGVsYXlJbk1zXG4gICAgICAgICAgICAgICAgICAgIDogREVGQVVMVF9SRVRSWV9PUFRJT05TJDEubWF4UmV0cnlEZWxheUluTXMpXG4gICAgICAgICAgICAgICAgOiBERUZBVUxUX1JFVFJZX09QVElPTlMkMS5yZXRyeURlbGF5SW5NcyxcbiAgICAgICAgICAgIG1heFJldHJ5RGVsYXlJbk1zOiByZXRyeU9wdGlvbnMubWF4UmV0cnlEZWxheUluTXMgJiYgcmV0cnlPcHRpb25zLm1heFJldHJ5RGVsYXlJbk1zID49IDBcbiAgICAgICAgICAgICAgICA/IHJldHJ5T3B0aW9ucy5tYXhSZXRyeURlbGF5SW5Nc1xuICAgICAgICAgICAgICAgIDogREVGQVVMVF9SRVRSWV9PUFRJT05TJDEubWF4UmV0cnlEZWxheUluTXMsXG4gICAgICAgICAgICBzZWNvbmRhcnlIb3N0OiByZXRyeU9wdGlvbnMuc2Vjb25kYXJ5SG9zdFxuICAgICAgICAgICAgICAgID8gcmV0cnlPcHRpb25zLnNlY29uZGFyeUhvc3RcbiAgICAgICAgICAgICAgICA6IERFRkFVTFRfUkVUUllfT1BUSU9OUyQxLnNlY29uZGFyeUhvc3QsXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNlbmRzIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVxdWVzdCAtXG4gICAgICovXG4gICAgYXN5bmMgc2VuZFJlcXVlc3QocmVxdWVzdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hdHRlbXB0U2VuZFJlcXVlc3QocmVxdWVzdCwgZmFsc2UsIDEpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWNpZGUgYW5kIHBlcmZvcm0gbmV4dCByZXRyeS4gV29uJ3QgbXV0YXRlIHJlcXVlc3QgcGFyYW1ldGVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlcXVlc3QgLVxuICAgICAqIEBwYXJhbSBzZWNvbmRhcnlIYXM0MDQgLSAgSWYgYXR0ZW1wdCB3YXMgYWdhaW5zdCB0aGUgc2Vjb25kYXJ5ICYgaXQgcmV0dXJuZWQgYSBTdGF0dXNOb3RGb3VuZCAoNDA0KSwgdGhlblxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcmVzb3VyY2Ugd2FzIG5vdCBmb3VuZC4gVGhpcyBtYXkgYmUgZHVlIHRvIHJlcGxpY2F0aW9uIGRlbGF5LiBTbywgaW4gdGhpc1xuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlLCB3ZSdsbCBuZXZlciB0cnkgdGhlIHNlY29uZGFyeSBhZ2FpbiBmb3IgdGhpcyBvcGVyYXRpb24uXG4gICAgICogQHBhcmFtIGF0dGVtcHQgLSAgICAgICAgICAgSG93IG1hbnkgcmV0cmllcyBoYXMgYmVlbiBhdHRlbXB0ZWQgdG8gcGVyZm9ybWVkLCBzdGFydGluZyBmcm9tIDEsIHdoaWNoIGluY2x1ZGVzXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBhdHRlbXB0IHdpbGwgYmUgcGVyZm9ybWVkIGJ5IHRoaXMgbWV0aG9kIGNhbGwuXG4gICAgICovXG4gICAgYXN5bmMgYXR0ZW1wdFNlbmRSZXF1ZXN0KHJlcXVlc3QsIHNlY29uZGFyeUhhczQwNCwgYXR0ZW1wdCkge1xuICAgICAgICBjb25zdCBuZXdSZXF1ZXN0ID0gcmVxdWVzdC5jbG9uZSgpO1xuICAgICAgICBjb25zdCBpc1ByaW1hcnlSZXRyeSA9IHNlY29uZGFyeUhhczQwNCB8fFxuICAgICAgICAgICAgIXRoaXMucmV0cnlPcHRpb25zLnNlY29uZGFyeUhvc3QgfHxcbiAgICAgICAgICAgICEocmVxdWVzdC5tZXRob2QgPT09IFwiR0VUXCIgfHwgcmVxdWVzdC5tZXRob2QgPT09IFwiSEVBRFwiIHx8IHJlcXVlc3QubWV0aG9kID09PSBcIk9QVElPTlNcIikgfHxcbiAgICAgICAgICAgIGF0dGVtcHQgJSAyID09PSAxO1xuICAgICAgICBpZiAoIWlzUHJpbWFyeVJldHJ5KSB7XG4gICAgICAgICAgICBuZXdSZXF1ZXN0LnVybCA9IHNldFVSTEhvc3QobmV3UmVxdWVzdC51cmwsIHRoaXMucmV0cnlPcHRpb25zLnNlY29uZGFyeUhvc3QpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNldCB0aGUgc2VydmVyLXNpZGUgdGltZW91dCBxdWVyeSBwYXJhbWV0ZXIgXCJ0aW1lb3V0PVtzZWNvbmRzXVwiXG4gICAgICAgIGlmICh0aGlzLnJldHJ5T3B0aW9ucy50cnlUaW1lb3V0SW5Ncykge1xuICAgICAgICAgICAgbmV3UmVxdWVzdC51cmwgPSBzZXRVUkxQYXJhbWV0ZXIobmV3UmVxdWVzdC51cmwsIFVSTENvbnN0YW50cy5QYXJhbWV0ZXJzLlRJTUVPVVQsIE1hdGguZmxvb3IodGhpcy5yZXRyeU9wdGlvbnMudHJ5VGltZW91dEluTXMgLyAxMDAwKS50b1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzcG9uc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsb2dnZXIuaW5mbyhgUmV0cnlQb2xpY3k6ID09PT09PiBUcnk9JHthdHRlbXB0fSAke2lzUHJpbWFyeVJldHJ5ID8gXCJQcmltYXJ5XCIgOiBcIlNlY29uZGFyeVwifWApO1xuICAgICAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLl9uZXh0UG9saWN5LnNlbmRSZXF1ZXN0KG5ld1JlcXVlc3QpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLnNob3VsZFJldHJ5KGlzUHJpbWFyeVJldHJ5LCBhdHRlbXB0LCByZXNwb25zZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWNvbmRhcnlIYXM0MDQgPSBzZWNvbmRhcnlIYXM0MDQgfHwgKCFpc1ByaW1hcnlSZXRyeSAmJiByZXNwb25zZS5zdGF0dXMgPT09IDQwNCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGBSZXRyeVBvbGljeTogQ2F1Z2h0IGVycm9yLCBtZXNzYWdlOiAke2Vyci5tZXNzYWdlfSwgY29kZTogJHtlcnIuY29kZX1gKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5zaG91bGRSZXRyeShpc1ByaW1hcnlSZXRyeSwgYXR0ZW1wdCwgcmVzcG9uc2UsIGVycikpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5kZWxheShpc1ByaW1hcnlSZXRyeSwgYXR0ZW1wdCwgcmVxdWVzdC5hYm9ydFNpZ25hbCk7XG4gICAgICAgIHJldHVybiB0aGlzLmF0dGVtcHRTZW5kUmVxdWVzdChyZXF1ZXN0LCBzZWNvbmRhcnlIYXM0MDQsICsrYXR0ZW1wdCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlY2lkZSB3aGV0aGVyIHRvIHJldHJ5IGFjY29yZGluZyB0byBsYXN0IEhUVFAgcmVzcG9uc2UgYW5kIHJldHJ5IGNvdW50ZXJzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGlzUHJpbWFyeVJldHJ5IC1cbiAgICAgKiBAcGFyYW0gYXR0ZW1wdCAtXG4gICAgICogQHBhcmFtIHJlc3BvbnNlIC1cbiAgICAgKiBAcGFyYW0gZXJyIC1cbiAgICAgKi9cbiAgICBzaG91bGRSZXRyeShpc1ByaW1hcnlSZXRyeSwgYXR0ZW1wdCwgcmVzcG9uc2UsIGVycikge1xuICAgICAgICBpZiAoYXR0ZW1wdCA+PSB0aGlzLnJldHJ5T3B0aW9ucy5tYXhUcmllcykge1xuICAgICAgICAgICAgbG9nZ2VyLmluZm8oYFJldHJ5UG9saWN5OiBBdHRlbXB0KHMpICR7YXR0ZW1wdH0gPj0gbWF4VHJpZXMgJHt0aGlzLnJldHJ5T3B0aW9uc1xuICAgICAgICAgICAgICAgIC5tYXhUcmllc30sIG5vIGZ1cnRoZXIgdHJ5LmApO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIEhhbmRsZSBuZXR3b3JrIGZhaWx1cmVzLCB5b3UgbWF5IG5lZWQgdG8gY3VzdG9taXplIHRoZSBsaXN0IHdoZW4geW91IGltcGxlbWVudFxuICAgICAgICAvLyB5b3VyIG93biBodHRwIGNsaWVudFxuICAgICAgICBjb25zdCByZXRyaWFibGVFcnJvcnMgPSBbXG4gICAgICAgICAgICBcIkVUSU1FRE9VVFwiLFxuICAgICAgICAgICAgXCJFU09DS0VUVElNRURPVVRcIixcbiAgICAgICAgICAgIFwiRUNPTk5SRUZVU0VEXCIsXG4gICAgICAgICAgICBcIkVDT05OUkVTRVRcIixcbiAgICAgICAgICAgIFwiRU5PRU5UXCIsXG4gICAgICAgICAgICBcIkVOT1RGT1VORFwiLFxuICAgICAgICAgICAgXCJUSU1FT1VUXCIsXG4gICAgICAgICAgICBcIkVQSVBFXCIsXG4gICAgICAgICAgICBcIlJFUVVFU1RfU0VORF9FUlJPUlwiLCAvLyBGb3IgZGVmYXVsdCB4aHIgYmFzZWQgaHR0cCBjbGllbnQgcHJvdmlkZWQgaW4gbXMtcmVzdC1qc1xuICAgICAgICBdO1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJldHJpYWJsZUVycm9yIG9mIHJldHJpYWJsZUVycm9ycykge1xuICAgICAgICAgICAgICAgIGlmIChlcnIubmFtZS50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKHJldHJpYWJsZUVycm9yKSB8fFxuICAgICAgICAgICAgICAgICAgICBlcnIubWVzc2FnZS50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKHJldHJpYWJsZUVycm9yKSB8fFxuICAgICAgICAgICAgICAgICAgICAoZXJyLmNvZGUgJiYgZXJyLmNvZGUudG9TdHJpbmcoKS50b1VwcGVyQ2FzZSgpID09PSByZXRyaWFibGVFcnJvcikpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYFJldHJ5UG9saWN5OiBOZXR3b3JrIGVycm9yICR7cmV0cmlhYmxlRXJyb3J9IGZvdW5kLCB3aWxsIHJldHJ5LmApO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgYXR0ZW1wdCB3YXMgYWdhaW5zdCB0aGUgc2Vjb25kYXJ5ICYgaXQgcmV0dXJuZWQgYSBTdGF0dXNOb3RGb3VuZCAoNDA0KSwgdGhlblxuICAgICAgICAvLyB0aGUgcmVzb3VyY2Ugd2FzIG5vdCBmb3VuZC4gVGhpcyBtYXkgYmUgZHVlIHRvIHJlcGxpY2F0aW9uIGRlbGF5LiBTbywgaW4gdGhpc1xuICAgICAgICAvLyBjYXNlLCB3ZSdsbCBuZXZlciB0cnkgdGhlIHNlY29uZGFyeSBhZ2FpbiBmb3IgdGhpcyBvcGVyYXRpb24uXG4gICAgICAgIGlmIChyZXNwb25zZSB8fCBlcnIpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXR1c0NvZGUgPSByZXNwb25zZSA/IHJlc3BvbnNlLnN0YXR1cyA6IGVyciA/IGVyci5zdGF0dXNDb2RlIDogMDtcbiAgICAgICAgICAgIGlmICghaXNQcmltYXJ5UmV0cnkgJiYgc3RhdHVzQ29kZSA9PT0gNDA0KSB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYFJldHJ5UG9saWN5OiBTZWNvbmRhcnkgYWNjZXNzIHdpdGggNDA0LCB3aWxsIHJldHJ5LmApO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU2VydmVyIGludGVybmFsIGVycm9yIG9yIHNlcnZlciB0aW1lb3V0XG4gICAgICAgICAgICBpZiAoc3RhdHVzQ29kZSA9PT0gNTAzIHx8IHN0YXR1c0NvZGUgPT09IDUwMCkge1xuICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBSZXRyeVBvbGljeTogV2lsbCByZXRyeSBmb3Igc3RhdHVzIGNvZGUgJHtzdGF0dXNDb2RlfS5gKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBbQ29weSBzb3VyY2UgZXJyb3IgY29kZV0gRmVhdHVyZSBpcyBwZW5kaW5nIG9uIHNlcnZpY2Ugc2lkZSwgc2tpcCByZXRyeSBvbiBjb3B5IHNvdXJjZSBlcnJvciBmb3Igbm93LlxuICAgICAgICAvLyBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgLy8gICAvLyBSZXRyeSBzZWxlY3QgQ29weSBTb3VyY2UgRXJyb3IgQ29kZXMuXG4gICAgICAgIC8vICAgaWYgKHJlc3BvbnNlPy5zdGF0dXMgPj0gNDAwKSB7XG4gICAgICAgIC8vICAgICBjb25zdCBjb3B5U291cmNlRXJyb3IgPSByZXNwb25zZS5oZWFkZXJzLmdldChIZWFkZXJDb25zdGFudHMuWF9NU19Db3B5U291cmNlRXJyb3JDb2RlKTtcbiAgICAgICAgLy8gICAgIGlmIChjb3B5U291cmNlRXJyb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyAgICAgICBzd2l0Y2ggKGNvcHlTb3VyY2VFcnJvcikge1xuICAgICAgICAvLyAgICAgICAgIGNhc2UgXCJJbnRlcm5hbEVycm9yXCI6XG4gICAgICAgIC8vICAgICAgICAgY2FzZSBcIk9wZXJhdGlvblRpbWVkT3V0XCI6XG4gICAgICAgIC8vICAgICAgICAgY2FzZSBcIlNlcnZlckJ1c3lcIjpcbiAgICAgICAgLy8gICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAvLyAgICAgICB9XG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vICAgfVxuICAgICAgICAvLyB9XG4gICAgICAgIGlmICgoZXJyID09PSBudWxsIHx8IGVyciA9PT0gdm9pZCAwID8gdm9pZCAwIDogZXJyLmNvZGUpID09PSBcIlBBUlNFX0VSUk9SXCIgJiYgKGVyciA9PT0gbnVsbCB8fCBlcnIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGVyci5tZXNzYWdlLnN0YXJ0c1dpdGgoYEVycm9yIFwiRXJyb3I6IFVuY2xvc2VkIHJvb3QgdGFnYCkpKSB7XG4gICAgICAgICAgICBsb2dnZXIuaW5mbyhcIlJldHJ5UG9saWN5OiBJbmNvbXBsZXRlIFhNTCByZXNwb25zZSBsaWtlbHkgZHVlIHRvIHNlcnZpY2UgdGltZW91dCwgd2lsbCByZXRyeS5cIik7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlbGF5IGEgY2FsY3VsYXRlZCB0aW1lIGJldHdlZW4gcmV0cmllcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpc1ByaW1hcnlSZXRyeSAtXG4gICAgICogQHBhcmFtIGF0dGVtcHQgLVxuICAgICAqIEBwYXJhbSBhYm9ydFNpZ25hbCAtXG4gICAgICovXG4gICAgYXN5bmMgZGVsYXkoaXNQcmltYXJ5UmV0cnksIGF0dGVtcHQsIGFib3J0U2lnbmFsKSB7XG4gICAgICAgIGxldCBkZWxheVRpbWVJbk1zID0gMDtcbiAgICAgICAgaWYgKGlzUHJpbWFyeVJldHJ5KSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMucmV0cnlPcHRpb25zLnJldHJ5UG9saWN5VHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgZXhwb3J0cy5TdG9yYWdlUmV0cnlQb2xpY3lUeXBlLkVYUE9ORU5USUFMOlxuICAgICAgICAgICAgICAgICAgICBkZWxheVRpbWVJbk1zID0gTWF0aC5taW4oKE1hdGgucG93KDIsIGF0dGVtcHQgLSAxKSAtIDEpICogdGhpcy5yZXRyeU9wdGlvbnMucmV0cnlEZWxheUluTXMsIHRoaXMucmV0cnlPcHRpb25zLm1heFJldHJ5RGVsYXlJbk1zKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBleHBvcnRzLlN0b3JhZ2VSZXRyeVBvbGljeVR5cGUuRklYRUQ6XG4gICAgICAgICAgICAgICAgICAgIGRlbGF5VGltZUluTXMgPSB0aGlzLnJldHJ5T3B0aW9ucy5yZXRyeURlbGF5SW5NcztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkZWxheVRpbWVJbk1zID0gTWF0aC5yYW5kb20oKSAqIDEwMDA7XG4gICAgICAgIH1cbiAgICAgICAgbG9nZ2VyLmluZm8oYFJldHJ5UG9saWN5OiBEZWxheSBmb3IgJHtkZWxheVRpbWVJbk1zfW1zYCk7XG4gICAgICAgIHJldHVybiBkZWxheShkZWxheVRpbWVJbk1zLCBhYm9ydFNpZ25hbCwgUkVUUllfQUJPUlRfRVJST1IkMSk7XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogU3RvcmFnZVJldHJ5UG9saWN5RmFjdG9yeSBpcyBhIGZhY3RvcnkgY2xhc3MgaGVscGluZyBnZW5lcmF0aW5nIHtAbGluayBTdG9yYWdlUmV0cnlQb2xpY3l9IG9iamVjdHMuXG4gKi9cbmNsYXNzIFN0b3JhZ2VSZXRyeVBvbGljeUZhY3Rvcnkge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgU3RvcmFnZVJldHJ5UG9saWN5RmFjdG9yeS5cbiAgICAgKiBAcGFyYW0gcmV0cnlPcHRpb25zIC1cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihyZXRyeU9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5yZXRyeU9wdGlvbnMgPSByZXRyeU9wdGlvbnM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBTdG9yYWdlUmV0cnlQb2xpY3kgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIG5leHRQb2xpY3kgLVxuICAgICAqIEBwYXJhbSBvcHRpb25zIC1cbiAgICAgKi9cbiAgICBjcmVhdGUobmV4dFBvbGljeSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gbmV3IFN0b3JhZ2VSZXRyeVBvbGljeShuZXh0UG9saWN5LCBvcHRpb25zLCB0aGlzLnJldHJ5T3B0aW9ucyk7XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogQ3JlZGVudGlhbCBwb2xpY3kgdXNlZCB0byBzaWduIEhUVFAoUykgcmVxdWVzdHMgYmVmb3JlIHNlbmRpbmcuIFRoaXMgaXMgYW5cbiAqIGFic3RyYWN0IGNsYXNzLlxuICovXG5jbGFzcyBDcmVkZW50aWFsUG9saWN5IGV4dGVuZHMgQmFzZVJlcXVlc3RQb2xpY3kge1xuICAgIC8qKlxuICAgICAqIFNlbmRzIG91dCByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlcXVlc3QgLVxuICAgICAqL1xuICAgIHNlbmRSZXF1ZXN0KHJlcXVlc3QpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX25leHRQb2xpY3kuc2VuZFJlcXVlc3QodGhpcy5zaWduUmVxdWVzdChyZXF1ZXN0KSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENoaWxkIGNsYXNzZXMgbXVzdCBpbXBsZW1lbnQgdGhpcyBtZXRob2Qgd2l0aCByZXF1ZXN0IHNpZ25pbmcuIFRoaXMgbWV0aG9kXG4gICAgICogd2lsbCBiZSBleGVjdXRlZCBpbiB7QGxpbmsgc2VuZFJlcXVlc3R9LlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlcXVlc3QgLVxuICAgICAqL1xuICAgIHNpZ25SZXF1ZXN0KHJlcXVlc3QpIHtcbiAgICAgICAgLy8gQ2hpbGQgY2xhc3NlcyBtdXN0IG92ZXJyaWRlIHRoaXMgbWV0aG9kIHdpdGggcmVxdWVzdCBzaWduaW5nLiBUaGlzIG1ldGhvZFxuICAgICAgICAvLyB3aWxsIGJlIGV4ZWN1dGVkIGluIHNlbmRSZXF1ZXN0KCkuXG4gICAgICAgIHJldHVybiByZXF1ZXN0O1xuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKlxuICogV2UgbmVlZCB0byBpbWl0YXRlIC5OZXQgY3VsdHVyZS1hd2FyZSBzb3J0aW5nLCB3aGljaCBpcyB1c2VkIGluIHN0b3JhZ2Ugc2VydmljZS5cbiAqIEJlbG93IHRhYmxlcyBjb250YWluIHNvcnQta2V5cyBmb3IgZW4tVVMgY3VsdHVyZS5cbiAqL1xuY29uc3QgdGFibGVfbHYwID0gbmV3IFVpbnQzMkFycmF5KFtcbiAgICAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsXG4gICAgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4NzFjLCAweDAsIDB4NzFmLCAweDcyMSxcbiAgICAweDcyMywgMHg3MjUsIDB4MCwgMHgwLCAweDAsIDB4NzJkLCAweDgwMywgMHgwLCAweDAsIDB4NzMzLCAweDAsIDB4ZDAzLCAweGQxYSwgMHhkMWMsIDB4ZDFlLFxuICAgIDB4ZDIwLCAweGQyMiwgMHhkMjQsIDB4ZDI2LCAweGQyOCwgMHhkMmEsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHhlMDIsIDB4ZTA5LCAweGUwYSxcbiAgICAweGUxYSwgMHhlMjEsIDB4ZTIzLCAweGUyNSwgMHhlMmMsIDB4ZTMyLCAweGUzNSwgMHhlMzYsIDB4ZTQ4LCAweGU1MSwgMHhlNzAsIDB4ZTdjLCAweGU3ZSwgMHhlODksXG4gICAgMHhlOGEsIDB4ZTkxLCAweGU5OSwgMHhlOWYsIDB4ZWEyLCAweGVhNCwgMHhlYTYsIDB4ZWE3LCAweGVhOSwgMHgwLCAweDAsIDB4MCwgMHg3NDMsIDB4NzQ0LCAweDc0OCxcbiAgICAweGUwMiwgMHhlMDksIDB4ZTBhLCAweGUxYSwgMHhlMjEsIDB4ZTIzLCAweGUyNSwgMHhlMmMsIDB4ZTMyLCAweGUzNSwgMHhlMzYsIDB4ZTQ4LCAweGU1MSwgMHhlNzAsXG4gICAgMHhlN2MsIDB4ZTdlLCAweGU4OSwgMHhlOGEsIDB4ZTkxLCAweGU5OSwgMHhlOWYsIDB4ZWEyLCAweGVhNCwgMHhlYTYsIDB4ZWE3LCAweGVhOSwgMHgwLCAweDc0YyxcbiAgICAweDAsIDB4NzUwLCAweDAsXG5dKTtcbmNvbnN0IHRhYmxlX2x2MiA9IG5ldyBVaW50MzJBcnJheShbXG4gICAgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLFxuICAgIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCxcbiAgICAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsXG4gICAgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MTIsIDB4MTIsIDB4MTIsIDB4MTIsIDB4MTIsIDB4MTIsIDB4MTIsIDB4MTIsIDB4MTIsXG4gICAgMHgxMiwgMHgxMiwgMHgxMiwgMHgxMiwgMHgxMiwgMHgxMiwgMHgxMiwgMHgxMiwgMHgxMiwgMHgxMiwgMHgxMiwgMHgxMiwgMHgxMiwgMHgxMiwgMHgxMiwgMHgxMixcbiAgICAweDEyLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLFxuICAgIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCxcbl0pO1xuY29uc3QgdGFibGVfbHY0ID0gbmV3IFVpbnQzMkFycmF5KFtcbiAgICAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsXG4gICAgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLFxuICAgIDB4MCwgMHg4MDEyLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHg4MjEyLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsXG4gICAgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLFxuICAgIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCxcbiAgICAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsXG4gICAgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCxcbl0pO1xuZnVuY3Rpb24gY29tcGFyZUhlYWRlcihsaHMsIHJocykge1xuICAgIGlmIChpc0xlc3NUaGFuKGxocywgcmhzKSlcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIHJldHVybiAxO1xufVxuZnVuY3Rpb24gaXNMZXNzVGhhbihsaHMsIHJocykge1xuICAgIGNvbnN0IHRhYmxlcyA9IFt0YWJsZV9sdjAsIHRhYmxlX2x2MiwgdGFibGVfbHY0XTtcbiAgICBsZXQgY3Vycl9sZXZlbCA9IDA7XG4gICAgbGV0IGkgPSAwO1xuICAgIGxldCBqID0gMDtcbiAgICB3aGlsZSAoY3Vycl9sZXZlbCA8IHRhYmxlcy5sZW5ndGgpIHtcbiAgICAgICAgaWYgKGN1cnJfbGV2ZWwgPT09IHRhYmxlcy5sZW5ndGggLSAxICYmIGkgIT09IGopIHtcbiAgICAgICAgICAgIHJldHVybiBpID4gajtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB3ZWlnaHQxID0gaSA8IGxocy5sZW5ndGggPyB0YWJsZXNbY3Vycl9sZXZlbF1bbGhzW2ldLmNoYXJDb2RlQXQoMCldIDogMHgxO1xuICAgICAgICBjb25zdCB3ZWlnaHQyID0gaiA8IHJocy5sZW5ndGggPyB0YWJsZXNbY3Vycl9sZXZlbF1bcmhzW2pdLmNoYXJDb2RlQXQoMCldIDogMHgxO1xuICAgICAgICBpZiAod2VpZ2h0MSA9PT0gMHgxICYmIHdlaWdodDIgPT09IDB4MSkge1xuICAgICAgICAgICAgaSA9IDA7XG4gICAgICAgICAgICBqID0gMDtcbiAgICAgICAgICAgICsrY3Vycl9sZXZlbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh3ZWlnaHQxID09PSB3ZWlnaHQyKSB7XG4gICAgICAgICAgICArK2k7XG4gICAgICAgICAgICArK2o7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAod2VpZ2h0MSA9PT0gMCkge1xuICAgICAgICAgICAgKytpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHdlaWdodDIgPT09IDApIHtcbiAgICAgICAgICAgICsrajtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB3ZWlnaHQxIDwgd2VpZ2h0MjtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbFBvbGljeSBpcyBhIHBvbGljeSB1c2VkIHRvIHNpZ24gSFRUUCByZXF1ZXN0IHdpdGggYSBzaGFyZWQga2V5LlxuICovXG5jbGFzcyBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbFBvbGljeSBleHRlbmRzIENyZWRlbnRpYWxQb2xpY3kge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWxQb2xpY3kuXG4gICAgICogQHBhcmFtIG5leHRQb2xpY3kgLVxuICAgICAqIEBwYXJhbSBvcHRpb25zIC1cbiAgICAgKiBAcGFyYW0gZmFjdG9yeSAtXG4gICAgICovXG4gICAgY29uc3RydWN0b3IobmV4dFBvbGljeSwgb3B0aW9ucywgZmFjdG9yeSkge1xuICAgICAgICBzdXBlcihuZXh0UG9saWN5LCBvcHRpb25zKTtcbiAgICAgICAgdGhpcy5mYWN0b3J5ID0gZmFjdG9yeTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2lnbnMgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByZXF1ZXN0IC1cbiAgICAgKi9cbiAgICBzaWduUmVxdWVzdChyZXF1ZXN0KSB7XG4gICAgICAgIHJlcXVlc3QuaGVhZGVycy5zZXQoSGVhZGVyQ29uc3RhbnRzLlhfTVNfREFURSwgbmV3IERhdGUoKS50b1VUQ1N0cmluZygpKTtcbiAgICAgICAgaWYgKHJlcXVlc3QuYm9keSAmJlxuICAgICAgICAgICAgKHR5cGVvZiByZXF1ZXN0LmJvZHkgPT09IFwic3RyaW5nXCIgfHwgcmVxdWVzdC5ib2R5ICE9PSB1bmRlZmluZWQpICYmXG4gICAgICAgICAgICByZXF1ZXN0LmJvZHkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmVxdWVzdC5oZWFkZXJzLnNldChIZWFkZXJDb25zdGFudHMuQ09OVEVOVF9MRU5HVEgsIEJ1ZmZlci5ieXRlTGVuZ3RoKHJlcXVlc3QuYm9keSkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0cmluZ1RvU2lnbiA9IFtcbiAgICAgICAgICAgIHJlcXVlc3QubWV0aG9kLnRvVXBwZXJDYXNlKCksXG4gICAgICAgICAgICB0aGlzLmdldEhlYWRlclZhbHVlVG9TaWduKHJlcXVlc3QsIEhlYWRlckNvbnN0YW50cy5DT05URU5UX0xBTkdVQUdFKSxcbiAgICAgICAgICAgIHRoaXMuZ2V0SGVhZGVyVmFsdWVUb1NpZ24ocmVxdWVzdCwgSGVhZGVyQ29uc3RhbnRzLkNPTlRFTlRfRU5DT0RJTkcpLFxuICAgICAgICAgICAgdGhpcy5nZXRIZWFkZXJWYWx1ZVRvU2lnbihyZXF1ZXN0LCBIZWFkZXJDb25zdGFudHMuQ09OVEVOVF9MRU5HVEgpLFxuICAgICAgICAgICAgdGhpcy5nZXRIZWFkZXJWYWx1ZVRvU2lnbihyZXF1ZXN0LCBIZWFkZXJDb25zdGFudHMuQ09OVEVOVF9NRDUpLFxuICAgICAgICAgICAgdGhpcy5nZXRIZWFkZXJWYWx1ZVRvU2lnbihyZXF1ZXN0LCBIZWFkZXJDb25zdGFudHMuQ09OVEVOVF9UWVBFKSxcbiAgICAgICAgICAgIHRoaXMuZ2V0SGVhZGVyVmFsdWVUb1NpZ24ocmVxdWVzdCwgSGVhZGVyQ29uc3RhbnRzLkRBVEUpLFxuICAgICAgICAgICAgdGhpcy5nZXRIZWFkZXJWYWx1ZVRvU2lnbihyZXF1ZXN0LCBIZWFkZXJDb25zdGFudHMuSUZfTU9ESUZJRURfU0lOQ0UpLFxuICAgICAgICAgICAgdGhpcy5nZXRIZWFkZXJWYWx1ZVRvU2lnbihyZXF1ZXN0LCBIZWFkZXJDb25zdGFudHMuSUZfTUFUQ0gpLFxuICAgICAgICAgICAgdGhpcy5nZXRIZWFkZXJWYWx1ZVRvU2lnbihyZXF1ZXN0LCBIZWFkZXJDb25zdGFudHMuSUZfTk9ORV9NQVRDSCksXG4gICAgICAgICAgICB0aGlzLmdldEhlYWRlclZhbHVlVG9TaWduKHJlcXVlc3QsIEhlYWRlckNvbnN0YW50cy5JRl9VTk1PRElGSUVEX1NJTkNFKSxcbiAgICAgICAgICAgIHRoaXMuZ2V0SGVhZGVyVmFsdWVUb1NpZ24ocmVxdWVzdCwgSGVhZGVyQ29uc3RhbnRzLlJBTkdFKSxcbiAgICAgICAgXS5qb2luKFwiXFxuXCIpICtcbiAgICAgICAgICAgIFwiXFxuXCIgK1xuICAgICAgICAgICAgdGhpcy5nZXRDYW5vbmljYWxpemVkSGVhZGVyc1N0cmluZyhyZXF1ZXN0KSArXG4gICAgICAgICAgICB0aGlzLmdldENhbm9uaWNhbGl6ZWRSZXNvdXJjZVN0cmluZyhyZXF1ZXN0KTtcbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlID0gdGhpcy5mYWN0b3J5LmNvbXB1dGVITUFDU0hBMjU2KHN0cmluZ1RvU2lnbik7XG4gICAgICAgIHJlcXVlc3QuaGVhZGVycy5zZXQoSGVhZGVyQ29uc3RhbnRzLkFVVEhPUklaQVRJT04sIGBTaGFyZWRLZXkgJHt0aGlzLmZhY3RvcnkuYWNjb3VudE5hbWV9OiR7c2lnbmF0dXJlfWApO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhgW1VSTF06JHtyZXF1ZXN0LnVybH1gKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYFtIRUFERVJTXToke3JlcXVlc3QuaGVhZGVycy50b1N0cmluZygpfWApO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhgW1NUUklORyBUTyBTSUdOXToke0pTT04uc3RyaW5naWZ5KHN0cmluZ1RvU2lnbil9YCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGBbS0VZXTogJHtyZXF1ZXN0LmhlYWRlcnMuZ2V0KEhlYWRlckNvbnN0YW50cy5BVVRIT1JJWkFUSU9OKX1gKTtcbiAgICAgICAgcmV0dXJuIHJlcXVlc3Q7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlIGhlYWRlciB2YWx1ZSBhY2NvcmRpbmcgdG8gc2hhcmVkIGtleSBzaWduIHJ1bGVzLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2F1dGhlbnRpY2F0ZS13aXRoLXNoYXJlZC1rZXlcbiAgICAgKlxuICAgICAqIEBwYXJhbSByZXF1ZXN0IC1cbiAgICAgKiBAcGFyYW0gaGVhZGVyTmFtZSAtXG4gICAgICovXG4gICAgZ2V0SGVhZGVyVmFsdWVUb1NpZ24ocmVxdWVzdCwgaGVhZGVyTmFtZSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHJlcXVlc3QuaGVhZGVycy5nZXQoaGVhZGVyTmFtZSk7XG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICB9XG4gICAgICAgIC8vIFdoZW4gdXNpbmcgdmVyc2lvbiAyMDE1LTAyLTIxIG9yIGxhdGVyLCBpZiBDb250ZW50LUxlbmd0aCBpcyB6ZXJvLCB0aGVuXG4gICAgICAgIC8vIHNldCB0aGUgQ29udGVudC1MZW5ndGggcGFydCBvZiB0aGUgU3RyaW5nVG9TaWduIHRvIGFuIGVtcHR5IHN0cmluZy5cbiAgICAgICAgLy8gaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2F1dGhlbnRpY2F0ZS13aXRoLXNoYXJlZC1rZXlcbiAgICAgICAgaWYgKGhlYWRlck5hbWUgPT09IEhlYWRlckNvbnN0YW50cy5DT05URU5UX0xFTkdUSCAmJiB2YWx1ZSA9PT0gXCIwXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVG8gY29uc3RydWN0IHRoZSBDYW5vbmljYWxpemVkSGVhZGVycyBwb3J0aW9uIG9mIHRoZSBzaWduYXR1cmUgc3RyaW5nLCBmb2xsb3cgdGhlc2Ugc3RlcHM6XG4gICAgICogMS4gUmV0cmlldmUgYWxsIGhlYWRlcnMgZm9yIHRoZSByZXNvdXJjZSB0aGF0IGJlZ2luIHdpdGggeC1tcy0sIGluY2x1ZGluZyB0aGUgeC1tcy1kYXRlIGhlYWRlci5cbiAgICAgKiAyLiBDb252ZXJ0IGVhY2ggSFRUUCBoZWFkZXIgbmFtZSB0byBsb3dlcmNhc2UuXG4gICAgICogMy4gU29ydCB0aGUgaGVhZGVycyBsZXhpY29ncmFwaGljYWxseSBieSBoZWFkZXIgbmFtZSwgaW4gYXNjZW5kaW5nIG9yZGVyLlxuICAgICAqICAgIEVhY2ggaGVhZGVyIG1heSBhcHBlYXIgb25seSBvbmNlIGluIHRoZSBzdHJpbmcuXG4gICAgICogNC4gUmVwbGFjZSBhbnkgbGluZWFyIHdoaXRlc3BhY2UgaW4gdGhlIGhlYWRlciB2YWx1ZSB3aXRoIGEgc2luZ2xlIHNwYWNlLlxuICAgICAqIDUuIFRyaW0gYW55IHdoaXRlc3BhY2UgYXJvdW5kIHRoZSBjb2xvbiBpbiB0aGUgaGVhZGVyLlxuICAgICAqIDYuIEZpbmFsbHksIGFwcGVuZCBhIG5ldy1saW5lIGNoYXJhY3RlciB0byBlYWNoIGNhbm9uaWNhbGl6ZWQgaGVhZGVyIGluIHRoZSByZXN1bHRpbmcgbGlzdC5cbiAgICAgKiAgICBDb25zdHJ1Y3QgdGhlIENhbm9uaWNhbGl6ZWRIZWFkZXJzIHN0cmluZyBieSBjb25jYXRlbmF0aW5nIGFsbCBoZWFkZXJzIGluIHRoaXMgbGlzdCBpbnRvIGEgc2luZ2xlIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByZXF1ZXN0IC1cbiAgICAgKi9cbiAgICBnZXRDYW5vbmljYWxpemVkSGVhZGVyc1N0cmluZyhyZXF1ZXN0KSB7XG4gICAgICAgIGxldCBoZWFkZXJzQXJyYXkgPSByZXF1ZXN0LmhlYWRlcnMuaGVhZGVyc0FycmF5KCkuZmlsdGVyKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlLm5hbWUudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKEhlYWRlckNvbnN0YW50cy5QUkVGSVhfRk9SX1NUT1JBR0UpO1xuICAgICAgICB9KTtcbiAgICAgICAgaGVhZGVyc0FycmF5LnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBjb21wYXJlSGVhZGVyKGEubmFtZS50b0xvd2VyQ2FzZSgpLCBiLm5hbWUudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBSZW1vdmUgZHVwbGljYXRlIGhlYWRlcnNcbiAgICAgICAgaGVhZGVyc0FycmF5ID0gaGVhZGVyc0FycmF5LmZpbHRlcigodmFsdWUsIGluZGV4LCBhcnJheSkgPT4ge1xuICAgICAgICAgICAgaWYgKGluZGV4ID4gMCAmJiB2YWx1ZS5uYW1lLnRvTG93ZXJDYXNlKCkgPT09IGFycmF5W2luZGV4IC0gMV0ubmFtZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgY2Fub25pY2FsaXplZEhlYWRlcnNTdHJpbmdUb1NpZ24gPSBcIlwiO1xuICAgICAgICBoZWFkZXJzQXJyYXkuZm9yRWFjaCgoaGVhZGVyKSA9PiB7XG4gICAgICAgICAgICBjYW5vbmljYWxpemVkSGVhZGVyc1N0cmluZ1RvU2lnbiArPSBgJHtoZWFkZXIubmFtZVxuICAgICAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgICAgLnRyaW1SaWdodCgpfToke2hlYWRlci52YWx1ZS50cmltTGVmdCgpfVxcbmA7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gY2Fub25pY2FsaXplZEhlYWRlcnNTdHJpbmdUb1NpZ247XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyB0aGUgd2ViUmVzb3VyY2UgY2Fub25pY2FsaXplZCByZXNvdXJjZSBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVxdWVzdCAtXG4gICAgICovXG4gICAgZ2V0Q2Fub25pY2FsaXplZFJlc291cmNlU3RyaW5nKHJlcXVlc3QpIHtcbiAgICAgICAgY29uc3QgcGF0aCA9IGdldFVSTFBhdGgocmVxdWVzdC51cmwpIHx8IFwiL1wiO1xuICAgICAgICBsZXQgY2Fub25pY2FsaXplZFJlc291cmNlU3RyaW5nID0gXCJcIjtcbiAgICAgICAgY2Fub25pY2FsaXplZFJlc291cmNlU3RyaW5nICs9IGAvJHt0aGlzLmZhY3RvcnkuYWNjb3VudE5hbWV9JHtwYXRofWA7XG4gICAgICAgIGNvbnN0IHF1ZXJpZXMgPSBnZXRVUkxRdWVyaWVzKHJlcXVlc3QudXJsKTtcbiAgICAgICAgY29uc3QgbG93ZXJjYXNlUXVlcmllcyA9IHt9O1xuICAgICAgICBpZiAocXVlcmllcykge1xuICAgICAgICAgICAgY29uc3QgcXVlcnlLZXlzID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBxdWVyaWVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChxdWVyaWVzLCBrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxvd2VyY2FzZUtleSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgICAgICBsb3dlcmNhc2VRdWVyaWVzW2xvd2VyY2FzZUtleV0gPSBxdWVyaWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5S2V5cy5wdXNoKGxvd2VyY2FzZUtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcXVlcnlLZXlzLnNvcnQoKTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIHF1ZXJ5S2V5cykge1xuICAgICAgICAgICAgICAgIGNhbm9uaWNhbGl6ZWRSZXNvdXJjZVN0cmluZyArPSBgXFxuJHtrZXl9OiR7ZGVjb2RlVVJJQ29tcG9uZW50KGxvd2VyY2FzZVF1ZXJpZXNba2V5XSl9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2Fub25pY2FsaXplZFJlc291cmNlU3RyaW5nO1xuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIENyZWRlbnRpYWwgaXMgYW4gYWJzdHJhY3QgY2xhc3MgZm9yIEF6dXJlIFN0b3JhZ2UgSFRUUCByZXF1ZXN0cyBzaWduaW5nLiBUaGlzXG4gKiBjbGFzcyB3aWxsIGhvc3QgYW4gY3JlZGVudGlhbFBvbGljeUNyZWF0b3IgZmFjdG9yeSB3aGljaCBnZW5lcmF0ZXMgQ3JlZGVudGlhbFBvbGljeS5cbiAqL1xuY2xhc3MgQ3JlZGVudGlhbCB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIFJlcXVlc3RQb2xpY3kgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIF9uZXh0UG9saWN5IC1cbiAgICAgKiBAcGFyYW0gX29wdGlvbnMgLVxuICAgICAqL1xuICAgIGNyZWF0ZShfbmV4dFBvbGljeSwgX29wdGlvbnMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIHNob3VsZCBiZSBpbXBsZW1lbnRlZCBpbiBjaGlsZHJlbiBjbGFzc2VzLlwiKTtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBPTkxZIEFWQUlMQUJMRSBJTiBOT0RFLkpTIFJVTlRJTUUuXG4gKlxuICogU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwgZm9yIGFjY291bnQga2V5IGF1dGhvcml6YXRpb24gb2YgQXp1cmUgU3RvcmFnZSBzZXJ2aWNlLlxuICovXG5jbGFzcyBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbCBleHRlbmRzIENyZWRlbnRpYWwge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwuXG4gICAgICogQHBhcmFtIGFjY291bnROYW1lIC1cbiAgICAgKiBAcGFyYW0gYWNjb3VudEtleSAtXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoYWNjb3VudE5hbWUsIGFjY291bnRLZXkpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5hY2NvdW50TmFtZSA9IGFjY291bnROYW1lO1xuICAgICAgICB0aGlzLmFjY291bnRLZXkgPSBCdWZmZXIuZnJvbShhY2NvdW50S2V5LCBcImJhc2U2NFwiKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsUG9saWN5IG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBuZXh0UG9saWN5IC1cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtXG4gICAgICovXG4gICAgY3JlYXRlKG5leHRQb2xpY3ksIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbFBvbGljeShuZXh0UG9saWN5LCBvcHRpb25zLCB0aGlzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2VuZXJhdGVzIGEgaGFzaCBzaWduYXR1cmUgZm9yIGFuIEhUVFAgcmVxdWVzdCBvciBmb3IgYSBTQVMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc3RyaW5nVG9TaWduIC1cbiAgICAgKi9cbiAgICBjb21wdXRlSE1BQ1NIQTI1NihzdHJpbmdUb1NpZ24pIHtcbiAgICAgICAgcmV0dXJuIGNyeXB0by5jcmVhdGVIbWFjKFwic2hhMjU2XCIsIHRoaXMuYWNjb3VudEtleSkudXBkYXRlKHN0cmluZ1RvU2lnbiwgXCJ1dGY4XCIpLmRpZ2VzdChcImJhc2U2NFwiKTtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBBbm9ueW1vdXNDcmVkZW50aWFsUG9saWN5IGlzIHVzZWQgd2l0aCBIVFRQKFMpIHJlcXVlc3RzIHRoYXQgcmVhZCBwdWJsaWMgcmVzb3VyY2VzXG4gKiBvciBmb3IgdXNlIHdpdGggU2hhcmVkIEFjY2VzcyBTaWduYXR1cmVzIChTQVMpLlxuICovXG5jbGFzcyBBbm9ueW1vdXNDcmVkZW50aWFsUG9saWN5IGV4dGVuZHMgQ3JlZGVudGlhbFBvbGljeSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBBbm9ueW1vdXNDcmVkZW50aWFsUG9saWN5LlxuICAgICAqIEBwYXJhbSBuZXh0UG9saWN5IC1cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtXG4gICAgICovXG4gICAgLy8gVGhlIGJhc2UgY2xhc3MgaGFzIGEgcHJvdGVjdGVkIGNvbnN0cnVjdG9yLiBBZGRpbmcgYSBwdWJsaWMgb25lIHRvIGVuYWJsZSBjb25zdHJ1Y3Rpbmcgb2YgdGhpcyBjbGFzcy5cbiAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVzZWxlc3MtY29uc3RydWN0b3IqL1xuICAgIGNvbnN0cnVjdG9yKG5leHRQb2xpY3ksIG9wdGlvbnMpIHtcbiAgICAgICAgc3VwZXIobmV4dFBvbGljeSwgb3B0aW9ucyk7XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogQW5vbnltb3VzQ3JlZGVudGlhbCBwcm92aWRlcyBhIGNyZWRlbnRpYWxQb2xpY3lDcmVhdG9yIG1lbWJlciB1c2VkIHRvIGNyZWF0ZVxuICogQW5vbnltb3VzQ3JlZGVudGlhbFBvbGljeSBvYmplY3RzLiBBbm9ueW1vdXNDcmVkZW50aWFsUG9saWN5IGlzIHVzZWQgd2l0aFxuICogSFRUUChTKSByZXF1ZXN0cyB0aGF0IHJlYWQgcHVibGljIHJlc291cmNlcyBvciBmb3IgdXNlIHdpdGggU2hhcmVkIEFjY2Vzc1xuICogU2lnbmF0dXJlcyAoU0FTKS5cbiAqL1xuY2xhc3MgQW5vbnltb3VzQ3JlZGVudGlhbCBleHRlbmRzIENyZWRlbnRpYWwge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4ge0BsaW5rIEFub255bW91c0NyZWRlbnRpYWxQb2xpY3l9IG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBuZXh0UG9saWN5IC1cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtXG4gICAgICovXG4gICAgY3JlYXRlKG5leHRQb2xpY3ksIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBbm9ueW1vdXNDcmVkZW50aWFsUG9saWN5KG5leHRQb2xpY3ksIG9wdGlvbnMpO1xuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5sZXQgX2RlZmF1bHRIdHRwQ2xpZW50O1xuZnVuY3Rpb24gZ2V0Q2FjaGVkRGVmYXVsdEh0dHBDbGllbnQoKSB7XG4gICAgaWYgKCFfZGVmYXVsdEh0dHBDbGllbnQpIHtcbiAgICAgICAgX2RlZmF1bHRIdHRwQ2xpZW50ID0gY29yZVJlc3RQaXBlbGluZS5jcmVhdGVEZWZhdWx0SHR0cENsaWVudCgpO1xuICAgIH1cbiAgICByZXR1cm4gX2RlZmF1bHRIdHRwQ2xpZW50O1xufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogVGhlIHByb2dyYW1tYXRpYyBpZGVudGlmaWVyIG9mIHRoZSBTdG9yYWdlQnJvd3NlclBvbGljeS5cbiAqL1xuY29uc3Qgc3RvcmFnZUJyb3dzZXJQb2xpY3lOYW1lID0gXCJzdG9yYWdlQnJvd3NlclBvbGljeVwiO1xuLyoqXG4gKiBzdG9yYWdlQnJvd3NlclBvbGljeSBpcyBhIHBvbGljeSB1c2VkIHRvIHByZXZlbnQgYnJvd3NlcnMgZnJvbSBjYWNoaW5nIHJlcXVlc3RzXG4gKiBhbmQgdG8gcmVtb3ZlIGNvb2tpZXMgYW5kIGV4cGxpY2l0IGNvbnRlbnQtbGVuZ3RoIGhlYWRlcnMuXG4gKi9cbmZ1bmN0aW9uIHN0b3JhZ2VCcm93c2VyUG9saWN5KCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IHN0b3JhZ2VCcm93c2VyUG9saWN5TmFtZSxcbiAgICAgICAgYXN5bmMgc2VuZFJlcXVlc3QocmVxdWVzdCwgbmV4dCkge1xuICAgICAgICAgICAgaWYgKGNvcmVVdGlsLmlzTm9kZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0KHJlcXVlc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlcXVlc3QubWV0aG9kID09PSBcIkdFVFwiIHx8IHJlcXVlc3QubWV0aG9kID09PSBcIkhFQURcIikge1xuICAgICAgICAgICAgICAgIHJlcXVlc3QudXJsID0gc2V0VVJMUGFyYW1ldGVyKHJlcXVlc3QudXJsLCBVUkxDb25zdGFudHMuUGFyYW1ldGVycy5GT1JDRV9CUk9XU0VSX05PX0NBQ0hFLCBuZXcgRGF0ZSgpLmdldFRpbWUoKS50b1N0cmluZygpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlcXVlc3QuaGVhZGVycy5kZWxldGUoSGVhZGVyQ29uc3RhbnRzLkNPT0tJRSk7XG4gICAgICAgICAgICAvLyBBY2NvcmRpbmcgdG8gWEhSIHN0YW5kYXJkcywgY29udGVudC1sZW5ndGggc2hvdWxkIGJlIGZ1bGx5IGNvbnRyb2xsZWQgYnkgYnJvd3NlcnNcbiAgICAgICAgICAgIHJlcXVlc3QuaGVhZGVycy5kZWxldGUoSGVhZGVyQ29uc3RhbnRzLkNPTlRFTlRfTEVOR1RIKTtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KHJlcXVlc3QpO1xuICAgICAgICB9LFxuICAgIH07XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBOYW1lIG9mIHRoZSB7QGxpbmsgc3RvcmFnZVJldHJ5UG9saWN5fVxuICovXG5jb25zdCBzdG9yYWdlUmV0cnlQb2xpY3lOYW1lID0gXCJzdG9yYWdlUmV0cnlQb2xpY3lcIjtcbi8qKlxuICogUmV0cnlQb2xpY3kgdHlwZXMuXG4gKi9cbnZhciBTdG9yYWdlUmV0cnlQb2xpY3lUeXBlO1xuKGZ1bmN0aW9uIChTdG9yYWdlUmV0cnlQb2xpY3lUeXBlKSB7XG4gICAgLyoqXG4gICAgICogRXhwb25lbnRpYWwgcmV0cnkuIFJldHJ5IHRpbWUgZGVsYXkgZ3Jvd3MgZXhwb25lbnRpYWxseS5cbiAgICAgKi9cbiAgICBTdG9yYWdlUmV0cnlQb2xpY3lUeXBlW1N0b3JhZ2VSZXRyeVBvbGljeVR5cGVbXCJFWFBPTkVOVElBTFwiXSA9IDBdID0gXCJFWFBPTkVOVElBTFwiO1xuICAgIC8qKlxuICAgICAqIExpbmVhciByZXRyeS4gUmV0cnkgdGltZSBkZWxheSBncm93cyBsaW5lYXJseS5cbiAgICAgKi9cbiAgICBTdG9yYWdlUmV0cnlQb2xpY3lUeXBlW1N0b3JhZ2VSZXRyeVBvbGljeVR5cGVbXCJGSVhFRFwiXSA9IDFdID0gXCJGSVhFRFwiO1xufSkoU3RvcmFnZVJldHJ5UG9saWN5VHlwZSB8fCAoU3RvcmFnZVJldHJ5UG9saWN5VHlwZSA9IHt9KSk7XG4vLyBEZWZhdWx0IHZhbHVlcyBvZiBTdG9yYWdlUmV0cnlPcHRpb25zXG5jb25zdCBERUZBVUxUX1JFVFJZX09QVElPTlMgPSB7XG4gICAgbWF4UmV0cnlEZWxheUluTXM6IDEyMCAqIDEwMDAsXG4gICAgbWF4VHJpZXM6IDQsXG4gICAgcmV0cnlEZWxheUluTXM6IDQgKiAxMDAwLFxuICAgIHJldHJ5UG9saWN5VHlwZTogU3RvcmFnZVJldHJ5UG9saWN5VHlwZS5FWFBPTkVOVElBTCxcbiAgICBzZWNvbmRhcnlIb3N0OiBcIlwiLFxuICAgIHRyeVRpbWVvdXRJbk1zOiB1bmRlZmluZWQsIC8vIFVzZSBzZXJ2ZXIgc2lkZSBkZWZhdWx0IHRpbWVvdXQgc3RyYXRlZ3lcbn07XG5jb25zdCByZXRyaWFibGVFcnJvcnMgPSBbXG4gICAgXCJFVElNRURPVVRcIixcbiAgICBcIkVTT0NLRVRUSU1FRE9VVFwiLFxuICAgIFwiRUNPTk5SRUZVU0VEXCIsXG4gICAgXCJFQ09OTlJFU0VUXCIsXG4gICAgXCJFTk9FTlRcIixcbiAgICBcIkVOT1RGT1VORFwiLFxuICAgIFwiVElNRU9VVFwiLFxuICAgIFwiRVBJUEVcIixcbiAgICBcIlJFUVVFU1RfU0VORF9FUlJPUlwiLFxuXTtcbmNvbnN0IFJFVFJZX0FCT1JUX0VSUk9SID0gbmV3IGFib3J0Q29udHJvbGxlci5BYm9ydEVycm9yKFwiVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC5cIik7XG4vKipcbiAqIFJldHJ5IHBvbGljeSB3aXRoIGV4cG9uZW50aWFsIHJldHJ5IGFuZCBsaW5lYXIgcmV0cnkgaW1wbGVtZW50ZWQuXG4gKi9cbmZ1bmN0aW9uIHN0b3JhZ2VSZXRyeVBvbGljeShvcHRpb25zID0ge30pIHtcbiAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lLCBfZjtcbiAgICBjb25zdCByZXRyeVBvbGljeVR5cGUgPSAoX2EgPSBvcHRpb25zLnJldHJ5UG9saWN5VHlwZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogREVGQVVMVF9SRVRSWV9PUFRJT05TLnJldHJ5UG9saWN5VHlwZTtcbiAgICBjb25zdCBtYXhUcmllcyA9IChfYiA9IG9wdGlvbnMubWF4VHJpZXMpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IERFRkFVTFRfUkVUUllfT1BUSU9OUy5tYXhUcmllcztcbiAgICBjb25zdCByZXRyeURlbGF5SW5NcyA9IChfYyA9IG9wdGlvbnMucmV0cnlEZWxheUluTXMpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IERFRkFVTFRfUkVUUllfT1BUSU9OUy5yZXRyeURlbGF5SW5NcztcbiAgICBjb25zdCBtYXhSZXRyeURlbGF5SW5NcyA9IChfZCA9IG9wdGlvbnMubWF4UmV0cnlEZWxheUluTXMpICE9PSBudWxsICYmIF9kICE9PSB2b2lkIDAgPyBfZCA6IERFRkFVTFRfUkVUUllfT1BUSU9OUy5tYXhSZXRyeURlbGF5SW5NcztcbiAgICBjb25zdCBzZWNvbmRhcnlIb3N0ID0gKF9lID0gb3B0aW9ucy5zZWNvbmRhcnlIb3N0KSAhPT0gbnVsbCAmJiBfZSAhPT0gdm9pZCAwID8gX2UgOiBERUZBVUxUX1JFVFJZX09QVElPTlMuc2Vjb25kYXJ5SG9zdDtcbiAgICBjb25zdCB0cnlUaW1lb3V0SW5NcyA9IChfZiA9IG9wdGlvbnMudHJ5VGltZW91dEluTXMpICE9PSBudWxsICYmIF9mICE9PSB2b2lkIDAgPyBfZiA6IERFRkFVTFRfUkVUUllfT1BUSU9OUy50cnlUaW1lb3V0SW5NcztcbiAgICBmdW5jdGlvbiBzaG91bGRSZXRyeSh7IGlzUHJpbWFyeVJldHJ5LCBhdHRlbXB0LCByZXNwb25zZSwgZXJyb3IsIH0pIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgaWYgKGF0dGVtcHQgPj0gbWF4VHJpZXMpIHtcbiAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBSZXRyeVBvbGljeTogQXR0ZW1wdChzKSAke2F0dGVtcHR9ID49IG1heFRyaWVzICR7bWF4VHJpZXN9LCBubyBmdXJ0aGVyIHRyeS5gKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcmV0cmlhYmxlRXJyb3Igb2YgcmV0cmlhYmxlRXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yLm5hbWUudG9VcHBlckNhc2UoKS5pbmNsdWRlcyhyZXRyaWFibGVFcnJvcikgfHxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IubWVzc2FnZS50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKHJldHJpYWJsZUVycm9yKSB8fFxuICAgICAgICAgICAgICAgICAgICAoZXJyb3IuY29kZSAmJiBlcnJvci5jb2RlLnRvU3RyaW5nKCkudG9VcHBlckNhc2UoKSA9PT0gcmV0cmlhYmxlRXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBSZXRyeVBvbGljeTogTmV0d29yayBlcnJvciAke3JldHJpYWJsZUVycm9yfSBmb3VuZCwgd2lsbCByZXRyeS5gKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKChlcnJvciA9PT0gbnVsbCB8fCBlcnJvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogZXJyb3IuY29kZSkgPT09IFwiUEFSU0VfRVJST1JcIiAmJlxuICAgICAgICAgICAgICAgIChlcnJvciA9PT0gbnVsbCB8fCBlcnJvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogZXJyb3IubWVzc2FnZS5zdGFydHNXaXRoKGBFcnJvciBcIkVycm9yOiBVbmNsb3NlZCByb290IHRhZ2ApKSkge1xuICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKFwiUmV0cnlQb2xpY3k6IEluY29tcGxldGUgWE1MIHJlc3BvbnNlIGxpa2VseSBkdWUgdG8gc2VydmljZSB0aW1lb3V0LCB3aWxsIHJldHJ5LlwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBJZiBhdHRlbXB0IHdhcyBhZ2FpbnN0IHRoZSBzZWNvbmRhcnkgJiBpdCByZXR1cm5lZCBhIFN0YXR1c05vdEZvdW5kICg0MDQpLCB0aGVuXG4gICAgICAgIC8vIHRoZSByZXNvdXJjZSB3YXMgbm90IGZvdW5kLiBUaGlzIG1heSBiZSBkdWUgdG8gcmVwbGljYXRpb24gZGVsYXkuIFNvLCBpbiB0aGlzXG4gICAgICAgIC8vIGNhc2UsIHdlJ2xsIG5ldmVyIHRyeSB0aGUgc2Vjb25kYXJ5IGFnYWluIGZvciB0aGlzIG9wZXJhdGlvbi5cbiAgICAgICAgaWYgKHJlc3BvbnNlIHx8IGVycm9yKSB7XG4gICAgICAgICAgICBjb25zdCBzdGF0dXNDb2RlID0gKF9iID0gKF9hID0gcmVzcG9uc2UgPT09IG51bGwgfHwgcmVzcG9uc2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlc3BvbnNlLnN0YXR1cykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZXJyb3IgPT09IG51bGwgfHwgZXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGVycm9yLnN0YXR1c0NvZGUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IDA7XG4gICAgICAgICAgICBpZiAoIWlzUHJpbWFyeVJldHJ5ICYmIHN0YXR1c0NvZGUgPT09IDQwNCkge1xuICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBSZXRyeVBvbGljeTogU2Vjb25kYXJ5IGFjY2VzcyB3aXRoIDQwNCwgd2lsbCByZXRyeS5gKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFNlcnZlciBpbnRlcm5hbCBlcnJvciBvciBzZXJ2ZXIgdGltZW91dFxuICAgICAgICAgICAgaWYgKHN0YXR1c0NvZGUgPT09IDUwMyB8fCBzdGF0dXNDb2RlID09PSA1MDApIHtcbiAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhgUmV0cnlQb2xpY3k6IFdpbGwgcmV0cnkgZm9yIHN0YXR1cyBjb2RlICR7c3RhdHVzQ29kZX0uYCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gW0NvcHkgc291cmNlIGVycm9yIGNvZGVdIEZlYXR1cmUgaXMgcGVuZGluZyBvbiBzZXJ2aWNlIHNpZGUsIHNraXAgcmV0cnkgb24gY29weSBzb3VyY2UgZXJyb3IgZm9yIG5vdy5cbiAgICAgICAgLy8gaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgIC8vICAgLy8gUmV0cnkgc2VsZWN0IENvcHkgU291cmNlIEVycm9yIENvZGVzLlxuICAgICAgICAvLyAgIGlmIChyZXNwb25zZT8uc3RhdHVzID49IDQwMCkge1xuICAgICAgICAvLyAgICAgY29uc3QgY29weVNvdXJjZUVycm9yID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoSGVhZGVyQ29uc3RhbnRzLlhfTVNfQ29weVNvdXJjZUVycm9yQ29kZSk7XG4gICAgICAgIC8vICAgICBpZiAoY29weVNvdXJjZUVycm9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gICAgICAgc3dpdGNoIChjb3B5U291cmNlRXJyb3IpIHtcbiAgICAgICAgLy8gICAgICAgICBjYXNlIFwiSW50ZXJuYWxFcnJvclwiOlxuICAgICAgICAvLyAgICAgICAgIGNhc2UgXCJPcGVyYXRpb25UaW1lZE91dFwiOlxuICAgICAgICAvLyAgICAgICAgIGNhc2UgXCJTZXJ2ZXJCdXN5XCI6XG4gICAgICAgIC8vICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgLy8gICAgICAgfVxuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyAgIH1cbiAgICAgICAgLy8gfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNhbGN1bGF0ZURlbGF5KGlzUHJpbWFyeVJldHJ5LCBhdHRlbXB0KSB7XG4gICAgICAgIGxldCBkZWxheVRpbWVJbk1zID0gMDtcbiAgICAgICAgaWYgKGlzUHJpbWFyeVJldHJ5KSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHJldHJ5UG9saWN5VHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgU3RvcmFnZVJldHJ5UG9saWN5VHlwZS5FWFBPTkVOVElBTDpcbiAgICAgICAgICAgICAgICAgICAgZGVsYXlUaW1lSW5NcyA9IE1hdGgubWluKChNYXRoLnBvdygyLCBhdHRlbXB0IC0gMSkgLSAxKSAqIHJldHJ5RGVsYXlJbk1zLCBtYXhSZXRyeURlbGF5SW5Ncyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgU3RvcmFnZVJldHJ5UG9saWN5VHlwZS5GSVhFRDpcbiAgICAgICAgICAgICAgICAgICAgZGVsYXlUaW1lSW5NcyA9IHJldHJ5RGVsYXlJbk1zO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGRlbGF5VGltZUluTXMgPSBNYXRoLnJhbmRvbSgpICogMTAwMDtcbiAgICAgICAgfVxuICAgICAgICBsb2dnZXIuaW5mbyhgUmV0cnlQb2xpY3k6IERlbGF5IGZvciAke2RlbGF5VGltZUluTXN9bXNgKTtcbiAgICAgICAgcmV0dXJuIGRlbGF5VGltZUluTXM7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IHN0b3JhZ2VSZXRyeVBvbGljeU5hbWUsXG4gICAgICAgIGFzeW5jIHNlbmRSZXF1ZXN0KHJlcXVlc3QsIG5leHQpIHtcbiAgICAgICAgICAgIC8vIFNldCB0aGUgc2VydmVyLXNpZGUgdGltZW91dCBxdWVyeSBwYXJhbWV0ZXIgXCJ0aW1lb3V0PVtzZWNvbmRzXVwiXG4gICAgICAgICAgICBpZiAodHJ5VGltZW91dEluTXMpIHtcbiAgICAgICAgICAgICAgICByZXF1ZXN0LnVybCA9IHNldFVSTFBhcmFtZXRlcihyZXF1ZXN0LnVybCwgVVJMQ29uc3RhbnRzLlBhcmFtZXRlcnMuVElNRU9VVCwgU3RyaW5nKE1hdGguZmxvb3IodHJ5VGltZW91dEluTXMgLyAxMDAwKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcHJpbWFyeVVybCA9IHJlcXVlc3QudXJsO1xuICAgICAgICAgICAgY29uc3Qgc2Vjb25kYXJ5VXJsID0gc2Vjb25kYXJ5SG9zdCA/IHNldFVSTEhvc3QocmVxdWVzdC51cmwsIHNlY29uZGFyeUhvc3QpIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgbGV0IHNlY29uZGFyeUhhczQwNCA9IGZhbHNlO1xuICAgICAgICAgICAgbGV0IGF0dGVtcHQgPSAxO1xuICAgICAgICAgICAgbGV0IHJldHJ5QWdhaW4gPSB0cnVlO1xuICAgICAgICAgICAgbGV0IHJlc3BvbnNlO1xuICAgICAgICAgICAgbGV0IGVycm9yO1xuICAgICAgICAgICAgd2hpbGUgKHJldHJ5QWdhaW4pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc1ByaW1hcnlSZXRyeSA9IHNlY29uZGFyeUhhczQwNCB8fFxuICAgICAgICAgICAgICAgICAgICAhc2Vjb25kYXJ5VXJsIHx8XG4gICAgICAgICAgICAgICAgICAgICFbXCJHRVRcIiwgXCJIRUFEXCIsIFwiT1BUSU9OU1wiXS5pbmNsdWRlcyhyZXF1ZXN0Lm1ldGhvZCkgfHxcbiAgICAgICAgICAgICAgICAgICAgYXR0ZW1wdCAlIDIgPT09IDE7XG4gICAgICAgICAgICAgICAgcmVxdWVzdC51cmwgPSBpc1ByaW1hcnlSZXRyeSA/IHByaW1hcnlVcmwgOiBzZWNvbmRhcnlVcmw7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2UgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgZXJyb3IgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYFJldHJ5UG9saWN5OiA9PT09PT4gVHJ5PSR7YXR0ZW1wdH0gJHtpc1ByaW1hcnlSZXRyeSA/IFwiUHJpbWFyeVwiIDogXCJTZWNvbmRhcnlcIn1gKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCBuZXh0KHJlcXVlc3QpO1xuICAgICAgICAgICAgICAgICAgICBzZWNvbmRhcnlIYXM0MDQgPSBzZWNvbmRhcnlIYXM0MDQgfHwgKCFpc1ByaW1hcnlSZXRyeSAmJiByZXNwb25zZS5zdGF0dXMgPT09IDQwNCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb3JlUmVzdFBpcGVsaW5lLmlzUmVzdEVycm9yKGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoYFJldHJ5UG9saWN5OiBDYXVnaHQgZXJyb3IsIG1lc3NhZ2U6ICR7ZS5tZXNzYWdlfSwgY29kZTogJHtlLmNvZGV9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoYFJldHJ5UG9saWN5OiBDYXVnaHQgZXJyb3IsIG1lc3NhZ2U6ICR7Y29yZVV0aWwuZ2V0RXJyb3JNZXNzYWdlKGUpfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXRyeUFnYWluID0gc2hvdWxkUmV0cnkoeyBpc1ByaW1hcnlSZXRyeSwgYXR0ZW1wdCwgcmVzcG9uc2UsIGVycm9yIH0pO1xuICAgICAgICAgICAgICAgIGlmIChyZXRyeUFnYWluKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGRlbGF5KGNhbGN1bGF0ZURlbGF5KGlzUHJpbWFyeVJldHJ5LCBhdHRlbXB0KSwgcmVxdWVzdC5hYm9ydFNpZ25hbCwgUkVUUllfQUJPUlRfRVJST1IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhdHRlbXB0Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiBuZXcgY29yZVJlc3RQaXBlbGluZS5SZXN0RXJyb3IoXCJSZXRyeVBvbGljeSBmYWlsZWQgd2l0aG91dCBrbm93biBlcnJvci5cIik7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIFRoZSBwcm9ncmFtbWF0aWMgaWRlbnRpZmllciBvZiB0aGUgc3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWxQb2xpY3kuXG4gKi9cbmNvbnN0IHN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsUG9saWN5TmFtZSA9IFwic3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWxQb2xpY3lcIjtcbi8qKlxuICogc3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWxQb2xpY3kgaGFuZGxlcyBzaWduaW5nIHJlcXVlc3RzIHVzaW5nIHN0b3JhZ2UgYWNjb3VudCBrZXlzLlxuICovXG5mdW5jdGlvbiBzdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbFBvbGljeShvcHRpb25zKSB7XG4gICAgZnVuY3Rpb24gc2lnblJlcXVlc3QocmVxdWVzdCkge1xuICAgICAgICByZXF1ZXN0LmhlYWRlcnMuc2V0KEhlYWRlckNvbnN0YW50cy5YX01TX0RBVEUsIG5ldyBEYXRlKCkudG9VVENTdHJpbmcoKSk7XG4gICAgICAgIGlmIChyZXF1ZXN0LmJvZHkgJiZcbiAgICAgICAgICAgICh0eXBlb2YgcmVxdWVzdC5ib2R5ID09PSBcInN0cmluZ1wiIHx8IEJ1ZmZlci5pc0J1ZmZlcihyZXF1ZXN0LmJvZHkpKSAmJlxuICAgICAgICAgICAgcmVxdWVzdC5ib2R5Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJlcXVlc3QuaGVhZGVycy5zZXQoSGVhZGVyQ29uc3RhbnRzLkNPTlRFTlRfTEVOR1RILCBCdWZmZXIuYnl0ZUxlbmd0aChyZXF1ZXN0LmJvZHkpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdHJpbmdUb1NpZ24gPSBbXG4gICAgICAgICAgICByZXF1ZXN0Lm1ldGhvZC50b1VwcGVyQ2FzZSgpLFxuICAgICAgICAgICAgZ2V0SGVhZGVyVmFsdWVUb1NpZ24ocmVxdWVzdCwgSGVhZGVyQ29uc3RhbnRzLkNPTlRFTlRfTEFOR1VBR0UpLFxuICAgICAgICAgICAgZ2V0SGVhZGVyVmFsdWVUb1NpZ24ocmVxdWVzdCwgSGVhZGVyQ29uc3RhbnRzLkNPTlRFTlRfRU5DT0RJTkcpLFxuICAgICAgICAgICAgZ2V0SGVhZGVyVmFsdWVUb1NpZ24ocmVxdWVzdCwgSGVhZGVyQ29uc3RhbnRzLkNPTlRFTlRfTEVOR1RIKSxcbiAgICAgICAgICAgIGdldEhlYWRlclZhbHVlVG9TaWduKHJlcXVlc3QsIEhlYWRlckNvbnN0YW50cy5DT05URU5UX01ENSksXG4gICAgICAgICAgICBnZXRIZWFkZXJWYWx1ZVRvU2lnbihyZXF1ZXN0LCBIZWFkZXJDb25zdGFudHMuQ09OVEVOVF9UWVBFKSxcbiAgICAgICAgICAgIGdldEhlYWRlclZhbHVlVG9TaWduKHJlcXVlc3QsIEhlYWRlckNvbnN0YW50cy5EQVRFKSxcbiAgICAgICAgICAgIGdldEhlYWRlclZhbHVlVG9TaWduKHJlcXVlc3QsIEhlYWRlckNvbnN0YW50cy5JRl9NT0RJRklFRF9TSU5DRSksXG4gICAgICAgICAgICBnZXRIZWFkZXJWYWx1ZVRvU2lnbihyZXF1ZXN0LCBIZWFkZXJDb25zdGFudHMuSUZfTUFUQ0gpLFxuICAgICAgICAgICAgZ2V0SGVhZGVyVmFsdWVUb1NpZ24ocmVxdWVzdCwgSGVhZGVyQ29uc3RhbnRzLklGX05PTkVfTUFUQ0gpLFxuICAgICAgICAgICAgZ2V0SGVhZGVyVmFsdWVUb1NpZ24ocmVxdWVzdCwgSGVhZGVyQ29uc3RhbnRzLklGX1VOTU9ESUZJRURfU0lOQ0UpLFxuICAgICAgICAgICAgZ2V0SGVhZGVyVmFsdWVUb1NpZ24ocmVxdWVzdCwgSGVhZGVyQ29uc3RhbnRzLlJBTkdFKSxcbiAgICAgICAgXS5qb2luKFwiXFxuXCIpICtcbiAgICAgICAgICAgIFwiXFxuXCIgK1xuICAgICAgICAgICAgZ2V0Q2Fub25pY2FsaXplZEhlYWRlcnNTdHJpbmcocmVxdWVzdCkgK1xuICAgICAgICAgICAgZ2V0Q2Fub25pY2FsaXplZFJlc291cmNlU3RyaW5nKHJlcXVlc3QpO1xuICAgICAgICBjb25zdCBzaWduYXR1cmUgPSBjcnlwdG8uY3JlYXRlSG1hYyhcInNoYTI1NlwiLCBvcHRpb25zLmFjY291bnRLZXkpXG4gICAgICAgICAgICAudXBkYXRlKHN0cmluZ1RvU2lnbiwgXCJ1dGY4XCIpXG4gICAgICAgICAgICAuZGlnZXN0KFwiYmFzZTY0XCIpO1xuICAgICAgICByZXF1ZXN0LmhlYWRlcnMuc2V0KEhlYWRlckNvbnN0YW50cy5BVVRIT1JJWkFUSU9OLCBgU2hhcmVkS2V5ICR7b3B0aW9ucy5hY2NvdW50TmFtZX06JHtzaWduYXR1cmV9YCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGBbVVJMXToke3JlcXVlc3QudXJsfWApO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhgW0hFQURFUlNdOiR7cmVxdWVzdC5oZWFkZXJzLnRvU3RyaW5nKCl9YCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGBbU1RSSU5HIFRPIFNJR05dOiR7SlNPTi5zdHJpbmdpZnkoc3RyaW5nVG9TaWduKX1gKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYFtLRVldOiAke3JlcXVlc3QuaGVhZGVycy5nZXQoSGVhZGVyQ29uc3RhbnRzLkFVVEhPUklaQVRJT04pfWApO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZSBoZWFkZXIgdmFsdWUgYWNjb3JkaW5nIHRvIHNoYXJlZCBrZXkgc2lnbiBydWxlcy5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9hdXRoZW50aWNhdGUtd2l0aC1zaGFyZWQta2V5XG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0SGVhZGVyVmFsdWVUb1NpZ24ocmVxdWVzdCwgaGVhZGVyTmFtZSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHJlcXVlc3QuaGVhZGVycy5nZXQoaGVhZGVyTmFtZSk7XG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICB9XG4gICAgICAgIC8vIFdoZW4gdXNpbmcgdmVyc2lvbiAyMDE1LTAyLTIxIG9yIGxhdGVyLCBpZiBDb250ZW50LUxlbmd0aCBpcyB6ZXJvLCB0aGVuXG4gICAgICAgIC8vIHNldCB0aGUgQ29udGVudC1MZW5ndGggcGFydCBvZiB0aGUgU3RyaW5nVG9TaWduIHRvIGFuIGVtcHR5IHN0cmluZy5cbiAgICAgICAgLy8gaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2F1dGhlbnRpY2F0ZS13aXRoLXNoYXJlZC1rZXlcbiAgICAgICAgaWYgKGhlYWRlck5hbWUgPT09IEhlYWRlckNvbnN0YW50cy5DT05URU5UX0xFTkdUSCAmJiB2YWx1ZSA9PT0gXCIwXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVG8gY29uc3RydWN0IHRoZSBDYW5vbmljYWxpemVkSGVhZGVycyBwb3J0aW9uIG9mIHRoZSBzaWduYXR1cmUgc3RyaW5nLCBmb2xsb3cgdGhlc2Ugc3RlcHM6XG4gICAgICogMS4gUmV0cmlldmUgYWxsIGhlYWRlcnMgZm9yIHRoZSByZXNvdXJjZSB0aGF0IGJlZ2luIHdpdGggeC1tcy0sIGluY2x1ZGluZyB0aGUgeC1tcy1kYXRlIGhlYWRlci5cbiAgICAgKiAyLiBDb252ZXJ0IGVhY2ggSFRUUCBoZWFkZXIgbmFtZSB0byBsb3dlcmNhc2UuXG4gICAgICogMy4gU29ydCB0aGUgaGVhZGVycyBsZXhpY29ncmFwaGljYWxseSBieSBoZWFkZXIgbmFtZSwgaW4gYXNjZW5kaW5nIG9yZGVyLlxuICAgICAqICAgIEVhY2ggaGVhZGVyIG1heSBhcHBlYXIgb25seSBvbmNlIGluIHRoZSBzdHJpbmcuXG4gICAgICogNC4gUmVwbGFjZSBhbnkgbGluZWFyIHdoaXRlc3BhY2UgaW4gdGhlIGhlYWRlciB2YWx1ZSB3aXRoIGEgc2luZ2xlIHNwYWNlLlxuICAgICAqIDUuIFRyaW0gYW55IHdoaXRlc3BhY2UgYXJvdW5kIHRoZSBjb2xvbiBpbiB0aGUgaGVhZGVyLlxuICAgICAqIDYuIEZpbmFsbHksIGFwcGVuZCBhIG5ldy1saW5lIGNoYXJhY3RlciB0byBlYWNoIGNhbm9uaWNhbGl6ZWQgaGVhZGVyIGluIHRoZSByZXN1bHRpbmcgbGlzdC5cbiAgICAgKiAgICBDb25zdHJ1Y3QgdGhlIENhbm9uaWNhbGl6ZWRIZWFkZXJzIHN0cmluZyBieSBjb25jYXRlbmF0aW5nIGFsbCBoZWFkZXJzIGluIHRoaXMgbGlzdCBpbnRvIGEgc2luZ2xlIHN0cmluZy5cbiAgICAgKlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldENhbm9uaWNhbGl6ZWRIZWFkZXJzU3RyaW5nKHJlcXVlc3QpIHtcbiAgICAgICAgbGV0IGhlYWRlcnNBcnJheSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2YgcmVxdWVzdC5oZWFkZXJzKSB7XG4gICAgICAgICAgICBpZiAobmFtZS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoSGVhZGVyQ29uc3RhbnRzLlBSRUZJWF9GT1JfU1RPUkFHRSkpIHtcbiAgICAgICAgICAgICAgICBoZWFkZXJzQXJyYXkucHVzaCh7IG5hbWUsIHZhbHVlIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGhlYWRlcnNBcnJheS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gY29tcGFyZUhlYWRlcihhLm5hbWUudG9Mb3dlckNhc2UoKSwgYi5uYW1lLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gUmVtb3ZlIGR1cGxpY2F0ZSBoZWFkZXJzXG4gICAgICAgIGhlYWRlcnNBcnJheSA9IGhlYWRlcnNBcnJheS5maWx0ZXIoKHZhbHVlLCBpbmRleCwgYXJyYXkpID0+IHtcbiAgICAgICAgICAgIGlmIChpbmRleCA+IDAgJiYgdmFsdWUubmFtZS50b0xvd2VyQ2FzZSgpID09PSBhcnJheVtpbmRleCAtIDFdLm5hbWUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgICAgbGV0IGNhbm9uaWNhbGl6ZWRIZWFkZXJzU3RyaW5nVG9TaWduID0gXCJcIjtcbiAgICAgICAgaGVhZGVyc0FycmF5LmZvckVhY2goKGhlYWRlcikgPT4ge1xuICAgICAgICAgICAgY2Fub25pY2FsaXplZEhlYWRlcnNTdHJpbmdUb1NpZ24gKz0gYCR7aGVhZGVyLm5hbWVcbiAgICAgICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICAgIC50cmltUmlnaHQoKX06JHtoZWFkZXIudmFsdWUudHJpbUxlZnQoKX1cXG5gO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNhbm9uaWNhbGl6ZWRIZWFkZXJzU3RyaW5nVG9TaWduO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRDYW5vbmljYWxpemVkUmVzb3VyY2VTdHJpbmcocmVxdWVzdCkge1xuICAgICAgICBjb25zdCBwYXRoID0gZ2V0VVJMUGF0aChyZXF1ZXN0LnVybCkgfHwgXCIvXCI7XG4gICAgICAgIGxldCBjYW5vbmljYWxpemVkUmVzb3VyY2VTdHJpbmcgPSBcIlwiO1xuICAgICAgICBjYW5vbmljYWxpemVkUmVzb3VyY2VTdHJpbmcgKz0gYC8ke29wdGlvbnMuYWNjb3VudE5hbWV9JHtwYXRofWA7XG4gICAgICAgIGNvbnN0IHF1ZXJpZXMgPSBnZXRVUkxRdWVyaWVzKHJlcXVlc3QudXJsKTtcbiAgICAgICAgY29uc3QgbG93ZXJjYXNlUXVlcmllcyA9IHt9O1xuICAgICAgICBpZiAocXVlcmllcykge1xuICAgICAgICAgICAgY29uc3QgcXVlcnlLZXlzID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBxdWVyaWVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChxdWVyaWVzLCBrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxvd2VyY2FzZUtleSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgICAgICBsb3dlcmNhc2VRdWVyaWVzW2xvd2VyY2FzZUtleV0gPSBxdWVyaWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5S2V5cy5wdXNoKGxvd2VyY2FzZUtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcXVlcnlLZXlzLnNvcnQoKTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIHF1ZXJ5S2V5cykge1xuICAgICAgICAgICAgICAgIGNhbm9uaWNhbGl6ZWRSZXNvdXJjZVN0cmluZyArPSBgXFxuJHtrZXl9OiR7ZGVjb2RlVVJJQ29tcG9uZW50KGxvd2VyY2FzZVF1ZXJpZXNba2V5XSl9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2Fub25pY2FsaXplZFJlc291cmNlU3RyaW5nO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBzdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbFBvbGljeU5hbWUsXG4gICAgICAgIGFzeW5jIHNlbmRSZXF1ZXN0KHJlcXVlc3QsIG5leHQpIHtcbiAgICAgICAgICAgIHNpZ25SZXF1ZXN0KHJlcXVlc3QpO1xuICAgICAgICAgICAgcmV0dXJuIG5leHQocmVxdWVzdCk7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIFN0b3JhZ2VCcm93c2VyUG9saWN5IHdpbGwgaGFuZGxlIGRpZmZlcmVuY2VzIGJldHdlZW4gTm9kZS5qcyBhbmQgYnJvd3NlciBydW50aW1lLCBpbmNsdWRpbmc6XG4gKlxuICogMS4gQnJvd3NlcnMgY2FjaGUgR0VUL0hFQUQgcmVxdWVzdHMgYnkgYWRkaW5nIGNvbmRpdGlvbmFsIGhlYWRlcnMgc3VjaCBhcyAnSUZfTU9ESUZJRURfU0lOQ0UnLlxuICogU3RvcmFnZUJyb3dzZXJQb2xpY3kgaXMgYSBwb2xpY3kgdXNlZCB0byBhZGQgYSB0aW1lc3RhbXAgcXVlcnkgdG8gR0VUL0hFQUQgcmVxdWVzdCBVUkxcbiAqIHRodXMgYXZvaWQgdGhlIGJyb3dzZXIgY2FjaGUuXG4gKlxuICogMi4gUmVtb3ZlIGNvb2tpZSBoZWFkZXIgZm9yIHNlY3VyaXR5XG4gKlxuICogMy4gUmVtb3ZlIGNvbnRlbnQtbGVuZ3RoIGhlYWRlciB0byBhdm9pZCBicm93c2VycyB3YXJuaW5nXG4gKi9cbmNsYXNzIFN0b3JhZ2VCcm93c2VyUG9saWN5IGV4dGVuZHMgQmFzZVJlcXVlc3RQb2xpY3kge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgU3RvcmFnZUJyb3dzZXJQb2xpY3kuXG4gICAgICogQHBhcmFtIG5leHRQb2xpY3kgLVxuICAgICAqIEBwYXJhbSBvcHRpb25zIC1cbiAgICAgKi9cbiAgICAvLyBUaGUgYmFzZSBjbGFzcyBoYXMgYSBwcm90ZWN0ZWQgY29uc3RydWN0b3IuIEFkZGluZyBhIHB1YmxpYyBvbmUgdG8gZW5hYmxlIGNvbnN0cnVjdGluZyBvZiB0aGlzIGNsYXNzLlxuICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlbGVzcy1jb25zdHJ1Y3RvciovXG4gICAgY29uc3RydWN0b3IobmV4dFBvbGljeSwgb3B0aW9ucykge1xuICAgICAgICBzdXBlcihuZXh0UG9saWN5LCBvcHRpb25zKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2VuZHMgb3V0IHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVxdWVzdCAtXG4gICAgICovXG4gICAgYXN5bmMgc2VuZFJlcXVlc3QocmVxdWVzdCkge1xuICAgICAgICBpZiAoY29yZVV0aWwuaXNOb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbmV4dFBvbGljeS5zZW5kUmVxdWVzdChyZXF1ZXN0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVxdWVzdC5tZXRob2QudG9VcHBlckNhc2UoKSA9PT0gXCJHRVRcIiB8fCByZXF1ZXN0Lm1ldGhvZC50b1VwcGVyQ2FzZSgpID09PSBcIkhFQURcIikge1xuICAgICAgICAgICAgcmVxdWVzdC51cmwgPSBzZXRVUkxQYXJhbWV0ZXIocmVxdWVzdC51cmwsIFVSTENvbnN0YW50cy5QYXJhbWV0ZXJzLkZPUkNFX0JST1dTRVJfTk9fQ0FDSEUsIG5ldyBEYXRlKCkuZ2V0VGltZSgpLnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJlcXVlc3QuaGVhZGVycy5yZW1vdmUoSGVhZGVyQ29uc3RhbnRzLkNPT0tJRSk7XG4gICAgICAgIC8vIEFjY29yZGluZyB0byBYSFIgc3RhbmRhcmRzLCBjb250ZW50LWxlbmd0aCBzaG91bGQgYmUgZnVsbHkgY29udHJvbGxlZCBieSBicm93c2Vyc1xuICAgICAgICByZXF1ZXN0LmhlYWRlcnMucmVtb3ZlKEhlYWRlckNvbnN0YW50cy5DT05URU5UX0xFTkdUSCk7XG4gICAgICAgIHJldHVybiB0aGlzLl9uZXh0UG9saWN5LnNlbmRSZXF1ZXN0KHJlcXVlc3QpO1xuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIFN0b3JhZ2VCcm93c2VyUG9saWN5RmFjdG9yeSBpcyBhIGZhY3RvcnkgY2xhc3MgaGVscGluZyBnZW5lcmF0aW5nIFN0b3JhZ2VCcm93c2VyUG9saWN5IG9iamVjdHMuXG4gKi9cbmNsYXNzIFN0b3JhZ2VCcm93c2VyUG9saWN5RmFjdG9yeSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIFN0b3JhZ2VCcm93c2VyUG9saWN5RmFjdG9yeSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmV4dFBvbGljeSAtXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLVxuICAgICAqL1xuICAgIGNyZWF0ZShuZXh0UG9saWN5LCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBuZXcgU3RvcmFnZUJyb3dzZXJQb2xpY3kobmV4dFBvbGljeSwgb3B0aW9ucyk7XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogVGhlIHByb2dyYW1tYXRpYyBpZGVudGlmaWVyIG9mIHRoZSBzdG9yYWdlQ29ycmVjdENvbnRlbnRMZW5ndGhQb2xpY3kuXG4gKi9cbmNvbnN0IHN0b3JhZ2VDb3JyZWN0Q29udGVudExlbmd0aFBvbGljeU5hbWUgPSBcIlN0b3JhZ2VDb3JyZWN0Q29udGVudExlbmd0aFBvbGljeVwiO1xuLyoqXG4gKiBzdG9yYWdlQ29ycmVjdENvbnRlbnRMZW5ndGhQb2xpY3kgdG8gY29ycmVjdGx5IHNldCBDb250ZW50LUxlbmd0aCBoZWFkZXIgd2l0aCByZXF1ZXN0IGJvZHkgbGVuZ3RoLlxuICovXG5mdW5jdGlvbiBzdG9yYWdlQ29ycmVjdENvbnRlbnRMZW5ndGhQb2xpY3koKSB7XG4gICAgZnVuY3Rpb24gY29ycmVjdENvbnRlbnRMZW5ndGgocmVxdWVzdCkge1xuICAgICAgICBpZiAocmVxdWVzdC5ib2R5ICYmXG4gICAgICAgICAgICAodHlwZW9mIHJlcXVlc3QuYm9keSA9PT0gXCJzdHJpbmdcIiB8fCBCdWZmZXIuaXNCdWZmZXIocmVxdWVzdC5ib2R5KSkgJiZcbiAgICAgICAgICAgIHJlcXVlc3QuYm9keS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXF1ZXN0LmhlYWRlcnMuc2V0KEhlYWRlckNvbnN0YW50cy5DT05URU5UX0xFTkdUSCwgQnVmZmVyLmJ5dGVMZW5ndGgocmVxdWVzdC5ib2R5KSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogc3RvcmFnZUNvcnJlY3RDb250ZW50TGVuZ3RoUG9saWN5TmFtZSxcbiAgICAgICAgYXN5bmMgc2VuZFJlcXVlc3QocmVxdWVzdCwgbmV4dCkge1xuICAgICAgICAgICAgY29ycmVjdENvbnRlbnRMZW5ndGgocmVxdWVzdCk7XG4gICAgICAgICAgICByZXR1cm4gbmV4dChyZXF1ZXN0KTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogQSBoZWxwZXIgdG8gZGVjaWRlIGlmIGEgZ2l2ZW4gYXJndW1lbnQgc2F0aXNmaWVzIHRoZSBQaXBlbGluZSBjb250cmFjdFxuICogQHBhcmFtIHBpcGVsaW5lIC0gQW4gYXJndW1lbnQgdGhhdCBtYXkgYmUgYSBQaXBlbGluZVxuICogQHJldHVybnMgdHJ1ZSB3aGVuIHRoZSBhcmd1bWVudCBzYXRpc2ZpZXMgdGhlIFBpcGVsaW5lIGNvbnRyYWN0XG4gKi9cbmZ1bmN0aW9uIGlzUGlwZWxpbmVMaWtlKHBpcGVsaW5lKSB7XG4gICAgaWYgKCFwaXBlbGluZSB8fCB0eXBlb2YgcGlwZWxpbmUgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBjYXN0UGlwZWxpbmUgPSBwaXBlbGluZTtcbiAgICByZXR1cm4gKEFycmF5LmlzQXJyYXkoY2FzdFBpcGVsaW5lLmZhY3RvcmllcykgJiZcbiAgICAgICAgdHlwZW9mIGNhc3RQaXBlbGluZS5vcHRpb25zID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgIHR5cGVvZiBjYXN0UGlwZWxpbmUudG9TZXJ2aWNlQ2xpZW50T3B0aW9ucyA9PT0gXCJmdW5jdGlvblwiKTtcbn1cbi8qKlxuICogQSBQaXBlbGluZSBjbGFzcyBjb250YWluaW5nIEhUVFAgcmVxdWVzdCBwb2xpY2llcy5cbiAqIFlvdSBjYW4gY3JlYXRlIGEgZGVmYXVsdCBQaXBlbGluZSBieSBjYWxsaW5nIHtAbGluayBuZXdQaXBlbGluZX0uXG4gKiBPciB5b3UgY2FuIGNyZWF0ZSBhIFBpcGVsaW5lIHdpdGggeW91ciBvd24gcG9saWNpZXMgYnkgdGhlIGNvbnN0cnVjdG9yIG9mIFBpcGVsaW5lLlxuICpcbiAqIFJlZmVyIHRvIHtAbGluayBuZXdQaXBlbGluZX0gYW5kIHByb3ZpZGVkIHBvbGljaWVzIGJlZm9yZSBpbXBsZW1lbnRpbmcgeW91clxuICogY3VzdG9taXplZCBQaXBlbGluZS5cbiAqL1xuY2xhc3MgUGlwZWxpbmUge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgUGlwZWxpbmUuIEN1c3RvbWl6ZSBIVFRQQ2xpZW50IGJ5IGltcGxlbWVudGluZyBJSHR0cENsaWVudCBpbnRlcmZhY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZmFjdG9yaWVzIC1cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoZmFjdG9yaWVzLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgdGhpcy5mYWN0b3JpZXMgPSBmYWN0b3JpZXM7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRyYW5zZmVyIFBpcGVsaW5lIG9iamVjdCB0byBTZXJ2aWNlQ2xpZW50T3B0aW9ucyBvYmplY3Qgd2hpY2ggaXMgcmVxdWlyZWQgYnlcbiAgICAgKiBTZXJ2aWNlQ2xpZW50IGNvbnN0cnVjdG9yLlxuICAgICAqXG4gICAgICogQHJldHVybnMgVGhlIFNlcnZpY2VDbGllbnRPcHRpb25zIG9iamVjdCBmcm9tIHRoaXMgUGlwZWxpbmUuXG4gICAgICovXG4gICAgdG9TZXJ2aWNlQ2xpZW50T3B0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGh0dHBDbGllbnQ6IHRoaXMub3B0aW9ucy5odHRwQ2xpZW50LFxuICAgICAgICAgICAgcmVxdWVzdFBvbGljeUZhY3RvcmllczogdGhpcy5mYWN0b3JpZXMsXG4gICAgICAgIH07XG4gICAgfVxufVxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFBpcGVsaW5lIG9iamVjdCB3aXRoIENyZWRlbnRpYWwgcHJvdmlkZWQuXG4gKlxuICogQHBhcmFtIGNyZWRlbnRpYWwgLSAgU3VjaCBhcyBBbm9ueW1vdXNDcmVkZW50aWFsLCBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbCBvciBhbnkgY3JlZGVudGlhbCBmcm9tIHRoZSBgQGF6dXJlL2lkZW50aXR5YCBwYWNrYWdlIHRvIGF1dGhlbnRpY2F0ZSByZXF1ZXN0cyB0byB0aGUgc2VydmljZS4gWW91IGNhbiBhbHNvIHByb3ZpZGUgYW4gb2JqZWN0IHRoYXQgaW1wbGVtZW50cyB0aGUgVG9rZW5DcmVkZW50aWFsIGludGVyZmFjZS4gSWYgbm90IHNwZWNpZmllZCwgQW5vbnltb3VzQ3JlZGVudGlhbCBpcyB1c2VkLlxuICogQHBhcmFtIHBpcGVsaW5lT3B0aW9ucyAtIE9wdGlvbmFsLiBPcHRpb25zLlxuICogQHJldHVybnMgQSBuZXcgUGlwZWxpbmUgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBuZXdQaXBlbGluZShjcmVkZW50aWFsLCBwaXBlbGluZU9wdGlvbnMgPSB7fSkge1xuICAgIGlmICghY3JlZGVudGlhbCkge1xuICAgICAgICBjcmVkZW50aWFsID0gbmV3IEFub255bW91c0NyZWRlbnRpYWwoKTtcbiAgICB9XG4gICAgY29uc3QgcGlwZWxpbmUgPSBuZXcgUGlwZWxpbmUoW10sIHBpcGVsaW5lT3B0aW9ucyk7XG4gICAgcGlwZWxpbmUuX2NyZWRlbnRpYWwgPSBjcmVkZW50aWFsO1xuICAgIHJldHVybiBwaXBlbGluZTtcbn1cbmZ1bmN0aW9uIHByb2Nlc3NEb3dubGV2ZWxQaXBlbGluZShwaXBlbGluZSkge1xuICAgIGNvbnN0IGtub3duRmFjdG9yeUZ1bmN0aW9ucyA9IFtcbiAgICAgICAgaXNBbm9ueW1vdXNDcmVkZW50aWFsLFxuICAgICAgICBpc1N0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsLFxuICAgICAgICBpc0NvcmVIdHRwQmVhcmVyVG9rZW5GYWN0b3J5LFxuICAgICAgICBpc1N0b3JhZ2VCcm93c2VyUG9saWN5RmFjdG9yeSxcbiAgICAgICAgaXNTdG9yYWdlUmV0cnlQb2xpY3lGYWN0b3J5LFxuICAgICAgICBpc1N0b3JhZ2VUZWxlbWV0cnlQb2xpY3lGYWN0b3J5LFxuICAgICAgICBpc0NvcmVIdHRwUG9saWN5RmFjdG9yeSxcbiAgICBdO1xuICAgIGlmIChwaXBlbGluZS5mYWN0b3JpZXMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IG5vdmVsRmFjdG9yaWVzID0gcGlwZWxpbmUuZmFjdG9yaWVzLmZpbHRlcigoZmFjdG9yeSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuICFrbm93bkZhY3RvcnlGdW5jdGlvbnMuc29tZSgoa25vd25GYWN0b3J5KSA9PiBrbm93bkZhY3RvcnkoZmFjdG9yeSkpO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKG5vdmVsRmFjdG9yaWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgaGFzSW5qZWN0b3IgPSBub3ZlbEZhY3Rvcmllcy5zb21lKChmYWN0b3J5KSA9PiBpc0luamVjdG9yUG9saWN5RmFjdG9yeShmYWN0b3J5KSk7XG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBhcmUgYW55IGxlZnQgb3Zlciwgd3JhcCBpbiBhIHJlcXVlc3RQb2xpY3lGYWN0b3J5UG9saWN5XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHdyYXBwZWRQb2xpY2llczogY29yZUh0dHBDb21wYXQuY3JlYXRlUmVxdWVzdFBvbGljeUZhY3RvcnlQb2xpY3kobm92ZWxGYWN0b3JpZXMpLFxuICAgICAgICAgICAgICAgIGFmdGVyUmV0cnk6IGhhc0luamVjdG9yLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gZ2V0Q29yZUNsaWVudE9wdGlvbnMocGlwZWxpbmUpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3QgX2IgPSBwaXBlbGluZS5vcHRpb25zLCB7IGh0dHBDbGllbnQ6IHYxQ2xpZW50IH0gPSBfYiwgcmVzdE9wdGlvbnMgPSB0c2xpYi5fX3Jlc3QoX2IsIFtcImh0dHBDbGllbnRcIl0pO1xuICAgIGxldCBodHRwQ2xpZW50ID0gcGlwZWxpbmUuX2NvcmVIdHRwQ2xpZW50O1xuICAgIGlmICghaHR0cENsaWVudCkge1xuICAgICAgICBodHRwQ2xpZW50ID0gdjFDbGllbnQgPyBjb3JlSHR0cENvbXBhdC5jb252ZXJ0SHR0cENsaWVudCh2MUNsaWVudCkgOiBnZXRDYWNoZWREZWZhdWx0SHR0cENsaWVudCgpO1xuICAgICAgICBwaXBlbGluZS5fY29yZUh0dHBDbGllbnQgPSBodHRwQ2xpZW50O1xuICAgIH1cbiAgICBsZXQgY29yZVBpcGVsaW5lID0gcGlwZWxpbmUuX2NvcmVQaXBlbGluZTtcbiAgICBpZiAoIWNvcmVQaXBlbGluZSkge1xuICAgICAgICBjb25zdCBwYWNrYWdlRGV0YWlscyA9IGBhenNkay1qcy1henVyZS1zdG9yYWdlLWJsb2IvJHtTREtfVkVSU0lPTn1gO1xuICAgICAgICBjb25zdCB1c2VyQWdlbnRQcmVmaXggPSByZXN0T3B0aW9ucy51c2VyQWdlbnRPcHRpb25zICYmIHJlc3RPcHRpb25zLnVzZXJBZ2VudE9wdGlvbnMudXNlckFnZW50UHJlZml4XG4gICAgICAgICAgICA/IGAke3Jlc3RPcHRpb25zLnVzZXJBZ2VudE9wdGlvbnMudXNlckFnZW50UHJlZml4fSAke3BhY2thZ2VEZXRhaWxzfWBcbiAgICAgICAgICAgIDogYCR7cGFja2FnZURldGFpbHN9YDtcbiAgICAgICAgY29yZVBpcGVsaW5lID0gY29yZUNsaWVudC5jcmVhdGVDbGllbnRQaXBlbGluZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHJlc3RPcHRpb25zKSwgeyBsb2dnaW5nT3B0aW9uczoge1xuICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxBbGxvd2VkSGVhZGVyTmFtZXM6IFN0b3JhZ2VCbG9iTG9nZ2luZ0FsbG93ZWRIZWFkZXJOYW1lcyxcbiAgICAgICAgICAgICAgICBhZGRpdGlvbmFsQWxsb3dlZFF1ZXJ5UGFyYW1ldGVyczogU3RvcmFnZUJsb2JMb2dnaW5nQWxsb3dlZFF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgICAgICBsb2dnZXI6IGxvZ2dlci5pbmZvLFxuICAgICAgICAgICAgfSwgdXNlckFnZW50T3B0aW9uczoge1xuICAgICAgICAgICAgICAgIHVzZXJBZ2VudFByZWZpeCxcbiAgICAgICAgICAgIH0sIHNlcmlhbGl6YXRpb25PcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5WE1MOiBjb3JlWG1sLnN0cmluZ2lmeVhNTCxcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVyT3B0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICB4bWw6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVzZSBjdXN0b21pemVkIFhNTCBjaGFyIGtleSBvZiBcIiNcIiBzbyB3ZSBjYW4gZGVzZXJpYWxpemUgbWV0YWRhdGFcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpdGggXCJfXCIga2V5XG4gICAgICAgICAgICAgICAgICAgICAgICB4bWxDaGFyS2V5OiBcIiNcIixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSwgZGVzZXJpYWxpemF0aW9uT3B0aW9uczoge1xuICAgICAgICAgICAgICAgIHBhcnNlWE1MOiBjb3JlWG1sLnBhcnNlWE1MLFxuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZXJPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgIHhtbDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXNlIGN1c3RvbWl6ZWQgWE1MIGNoYXIga2V5IG9mIFwiI1wiIHNvIHdlIGNhbiBkZXNlcmlhbGl6ZSBtZXRhZGF0YVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2l0aCBcIl9cIiBrZXlcbiAgICAgICAgICAgICAgICAgICAgICAgIHhtbENoYXJLZXk6IFwiI1wiLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9IH0pKTtcbiAgICAgICAgY29yZVBpcGVsaW5lLnJlbW92ZVBvbGljeSh7IHBoYXNlOiBcIlJldHJ5XCIgfSk7XG4gICAgICAgIGNvcmVQaXBlbGluZS5yZW1vdmVQb2xpY3koeyBuYW1lOiBjb3JlUmVzdFBpcGVsaW5lLmRlY29tcHJlc3NSZXNwb25zZVBvbGljeU5hbWUgfSk7XG4gICAgICAgIGNvcmVQaXBlbGluZS5hZGRQb2xpY3koc3RvcmFnZUNvcnJlY3RDb250ZW50TGVuZ3RoUG9saWN5KCkpO1xuICAgICAgICBjb3JlUGlwZWxpbmUuYWRkUG9saWN5KHN0b3JhZ2VSZXRyeVBvbGljeShyZXN0T3B0aW9ucy5yZXRyeU9wdGlvbnMpLCB7IHBoYXNlOiBcIlJldHJ5XCIgfSk7XG4gICAgICAgIGNvcmVQaXBlbGluZS5hZGRQb2xpY3koc3RvcmFnZUJyb3dzZXJQb2xpY3koKSk7XG4gICAgICAgIGNvbnN0IGRvd25sZXZlbFJlc3VsdHMgPSBwcm9jZXNzRG93bmxldmVsUGlwZWxpbmUocGlwZWxpbmUpO1xuICAgICAgICBpZiAoZG93bmxldmVsUmVzdWx0cykge1xuICAgICAgICAgICAgY29yZVBpcGVsaW5lLmFkZFBvbGljeShkb3dubGV2ZWxSZXN1bHRzLndyYXBwZWRQb2xpY2llcywgZG93bmxldmVsUmVzdWx0cy5hZnRlclJldHJ5ID8geyBhZnRlclBoYXNlOiBcIlJldHJ5XCIgfSA6IHVuZGVmaW5lZCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3JlZGVudGlhbCA9IGdldENyZWRlbnRpYWxGcm9tUGlwZWxpbmUocGlwZWxpbmUpO1xuICAgICAgICBpZiAoY29yZUF1dGguaXNUb2tlbkNyZWRlbnRpYWwoY3JlZGVudGlhbCkpIHtcbiAgICAgICAgICAgIGNvcmVQaXBlbGluZS5hZGRQb2xpY3koY29yZVJlc3RQaXBlbGluZS5iZWFyZXJUb2tlbkF1dGhlbnRpY2F0aW9uUG9saWN5KHtcbiAgICAgICAgICAgICAgICBjcmVkZW50aWFsLFxuICAgICAgICAgICAgICAgIHNjb3BlczogKF9hID0gcmVzdE9wdGlvbnMuYXVkaWVuY2UpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFN0b3JhZ2VPQXV0aFNjb3BlcyxcbiAgICAgICAgICAgICAgICBjaGFsbGVuZ2VDYWxsYmFja3M6IHsgYXV0aG9yaXplUmVxdWVzdE9uQ2hhbGxlbmdlOiBjb3JlQ2xpZW50LmF1dGhvcml6ZVJlcXVlc3RPblRlbmFudENoYWxsZW5nZSB9LFxuICAgICAgICAgICAgfSksIHsgcGhhc2U6IFwiU2lnblwiIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNyZWRlbnRpYWwgaW5zdGFuY2VvZiBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbCkge1xuICAgICAgICAgICAgY29yZVBpcGVsaW5lLmFkZFBvbGljeShzdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbFBvbGljeSh7XG4gICAgICAgICAgICAgICAgYWNjb3VudE5hbWU6IGNyZWRlbnRpYWwuYWNjb3VudE5hbWUsXG4gICAgICAgICAgICAgICAgYWNjb3VudEtleTogY3JlZGVudGlhbC5hY2NvdW50S2V5LFxuICAgICAgICAgICAgfSksIHsgcGhhc2U6IFwiU2lnblwiIH0pO1xuICAgICAgICB9XG4gICAgICAgIHBpcGVsaW5lLl9jb3JlUGlwZWxpbmUgPSBjb3JlUGlwZWxpbmU7XG4gICAgfVxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHJlc3RPcHRpb25zKSwgeyBhbGxvd0luc2VjdXJlQ29ubmVjdGlvbjogdHJ1ZSwgaHR0cENsaWVudCwgcGlwZWxpbmU6IGNvcmVQaXBlbGluZSB9KTtcbn1cbmZ1bmN0aW9uIGdldENyZWRlbnRpYWxGcm9tUGlwZWxpbmUocGlwZWxpbmUpIHtcbiAgICAvLyBzZWUgaWYgd2Ugc3F1aXJyZWxlZCBvbmUgYXdheSBvbiB0aGUgdHlwZSBpdHNlbGZcbiAgICBpZiAocGlwZWxpbmUuX2NyZWRlbnRpYWwpIHtcbiAgICAgICAgcmV0dXJuIHBpcGVsaW5lLl9jcmVkZW50aWFsO1xuICAgIH1cbiAgICAvLyBpZiBpdCBjYW1lIGZyb20gYW5vdGhlciBwYWNrYWdlLCBsb29wIG92ZXIgdGhlIGZhY3RvcmllcyBhbmQgbG9vayBmb3Igb25lIGxpa2UgYmVmb3JlXG4gICAgbGV0IGNyZWRlbnRpYWwgPSBuZXcgQW5vbnltb3VzQ3JlZGVudGlhbCgpO1xuICAgIGZvciAoY29uc3QgZmFjdG9yeSBvZiBwaXBlbGluZS5mYWN0b3JpZXMpIHtcbiAgICAgICAgaWYgKGNvcmVBdXRoLmlzVG9rZW5DcmVkZW50aWFsKGZhY3RvcnkuY3JlZGVudGlhbCkpIHtcbiAgICAgICAgICAgIC8vIE9ubHkgd29ya3MgaWYgdGhlIGZhY3RvcnkgaGFzIGJlZW4gYXR0YWNoZWQgYSBcImNyZWRlbnRpYWxcIiBwcm9wZXJ0eS5cbiAgICAgICAgICAgIC8vIFdlIGRvIHRoYXQgaW4gbmV3UGlwZWxpbmUoKSB3aGVuIHVzaW5nIFRva2VuQ3JlZGVudGlhbC5cbiAgICAgICAgICAgIGNyZWRlbnRpYWwgPSBmYWN0b3J5LmNyZWRlbnRpYWw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbChmYWN0b3J5KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhY3Rvcnk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNyZWRlbnRpYWw7XG59XG5mdW5jdGlvbiBpc1N0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsKGZhY3RvcnkpIHtcbiAgICBpZiAoZmFjdG9yeSBpbnN0YW5jZW9mIFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFjdG9yeS5jb25zdHJ1Y3Rvci5uYW1lID09PSBcIlN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsXCI7XG59XG5mdW5jdGlvbiBpc0Fub255bW91c0NyZWRlbnRpYWwoZmFjdG9yeSkge1xuICAgIGlmIChmYWN0b3J5IGluc3RhbmNlb2YgQW5vbnltb3VzQ3JlZGVudGlhbCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhY3RvcnkuY29uc3RydWN0b3IubmFtZSA9PT0gXCJBbm9ueW1vdXNDcmVkZW50aWFsXCI7XG59XG5mdW5jdGlvbiBpc0NvcmVIdHRwQmVhcmVyVG9rZW5GYWN0b3J5KGZhY3RvcnkpIHtcbiAgICByZXR1cm4gY29yZUF1dGguaXNUb2tlbkNyZWRlbnRpYWwoZmFjdG9yeS5jcmVkZW50aWFsKTtcbn1cbmZ1bmN0aW9uIGlzU3RvcmFnZUJyb3dzZXJQb2xpY3lGYWN0b3J5KGZhY3RvcnkpIHtcbiAgICBpZiAoZmFjdG9yeSBpbnN0YW5jZW9mIFN0b3JhZ2VCcm93c2VyUG9saWN5RmFjdG9yeSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhY3RvcnkuY29uc3RydWN0b3IubmFtZSA9PT0gXCJTdG9yYWdlQnJvd3NlclBvbGljeUZhY3RvcnlcIjtcbn1cbmZ1bmN0aW9uIGlzU3RvcmFnZVJldHJ5UG9saWN5RmFjdG9yeShmYWN0b3J5KSB7XG4gICAgaWYgKGZhY3RvcnkgaW5zdGFuY2VvZiBTdG9yYWdlUmV0cnlQb2xpY3lGYWN0b3J5KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFjdG9yeS5jb25zdHJ1Y3Rvci5uYW1lID09PSBcIlN0b3JhZ2VSZXRyeVBvbGljeUZhY3RvcnlcIjtcbn1cbmZ1bmN0aW9uIGlzU3RvcmFnZVRlbGVtZXRyeVBvbGljeUZhY3RvcnkoZmFjdG9yeSkge1xuICAgIHJldHVybiBmYWN0b3J5LmNvbnN0cnVjdG9yLm5hbWUgPT09IFwiVGVsZW1ldHJ5UG9saWN5RmFjdG9yeVwiO1xufVxuZnVuY3Rpb24gaXNJbmplY3RvclBvbGljeUZhY3RvcnkoZmFjdG9yeSkge1xuICAgIHJldHVybiBmYWN0b3J5LmNvbnN0cnVjdG9yLm5hbWUgPT09IFwiSW5qZWN0b3JQb2xpY3lGYWN0b3J5XCI7XG59XG5mdW5jdGlvbiBpc0NvcmVIdHRwUG9saWN5RmFjdG9yeShmYWN0b3J5KSB7XG4gICAgY29uc3Qga25vd25Qb2xpY2llcyA9IFtcbiAgICAgICAgXCJHZW5lcmF0ZUNsaWVudFJlcXVlc3RJZFBvbGljeVwiLFxuICAgICAgICBcIlRyYWNpbmdQb2xpY3lcIixcbiAgICAgICAgXCJMb2dQb2xpY3lcIixcbiAgICAgICAgXCJQcm94eVBvbGljeVwiLFxuICAgICAgICBcIkRpc2FibGVSZXNwb25zZURlY29tcHJlc3Npb25Qb2xpY3lcIixcbiAgICAgICAgXCJLZWVwQWxpdmVQb2xpY3lcIixcbiAgICAgICAgXCJEZXNlcmlhbGl6YXRpb25Qb2xpY3lcIixcbiAgICBdO1xuICAgIGNvbnN0IG1vY2tIdHRwQ2xpZW50ID0ge1xuICAgICAgICBzZW5kUmVxdWVzdDogYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiByZXF1ZXN0LmhlYWRlcnMuY2xvbmUoKSxcbiAgICAgICAgICAgICAgICBzdGF0dXM6IDUwMCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgfTtcbiAgICBjb25zdCBtb2NrUmVxdWVzdFBvbGljeU9wdGlvbnMgPSB7XG4gICAgICAgIGxvZyhfbG9nTGV2ZWwsIF9tZXNzYWdlKSB7XG4gICAgICAgICAgICAvKiBkbyBub3RoaW5nICovXG4gICAgICAgIH0sXG4gICAgICAgIHNob3VsZExvZyhfbG9nTGV2ZWwpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSxcbiAgICB9O1xuICAgIGNvbnN0IHBvbGljeUluc3RhbmNlID0gZmFjdG9yeS5jcmVhdGUobW9ja0h0dHBDbGllbnQsIG1vY2tSZXF1ZXN0UG9saWN5T3B0aW9ucyk7XG4gICAgY29uc3QgcG9saWN5TmFtZSA9IHBvbGljeUluc3RhbmNlLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgLy8gYnVuZGxlcnMgc29tZXRpbWVzIGFkZCBhIGN1c3RvbSBzdWZmaXggdG8gdGhlIGNsYXNzIG5hbWUgdG8gbWFrZSBpdCB1bmlxdWVcbiAgICByZXR1cm4ga25vd25Qb2xpY2llcy5zb21lKChrbm93blBvbGljeU5hbWUpID0+IHtcbiAgICAgICAgcmV0dXJuIHBvbGljeU5hbWUuc3RhcnRzV2l0aChrbm93blBvbGljeU5hbWUpO1xuICAgIH0pO1xufVxuXG4vKlxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKlxuICogQ29kZSBnZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBBdXRvUmVzdCBDb2RlIEdlbmVyYXRvci5cbiAqIENoYW5nZXMgbWF5IGNhdXNlIGluY29ycmVjdCBiZWhhdmlvciBhbmQgd2lsbCBiZSBsb3N0IGlmIHRoZSBjb2RlIGlzIHJlZ2VuZXJhdGVkLlxuICovXG5jb25zdCBCbG9iU2VydmljZVByb3BlcnRpZXMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYlNlcnZpY2VQcm9wZXJ0aWVzXCIsXG4gICAgeG1sTmFtZTogXCJTdG9yYWdlU2VydmljZVByb3BlcnRpZXNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iU2VydmljZVByb3BlcnRpZXNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBibG9iQW5hbHl0aWNzTG9nZ2luZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkxvZ2dpbmdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkxvZ2dpbmdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJMb2dnaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBob3VyTWV0cmljczoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkhvdXJNZXRyaWNzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJIb3VyTWV0cmljc1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIk1ldHJpY3NcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1pbnV0ZU1ldHJpY3M6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJNaW51dGVNZXRyaWNzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJNaW51dGVNZXRyaWNzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiTWV0cmljc1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29yczoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvcnNcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkNvcnNcIixcbiAgICAgICAgICAgICAgICB4bWxJc1dyYXBwZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sRWxlbWVudE5hbWU6IFwiQ29yc1J1bGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU2VxdWVuY2VcIixcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIkNvcnNSdWxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVmYXVsdFNlcnZpY2VWZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRGVmYXVsdFNlcnZpY2VWZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJEZWZhdWx0U2VydmljZVZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZWxldGVSZXRlbnRpb25Qb2xpY3k6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJEZWxldGVSZXRlbnRpb25Qb2xpY3lcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkRlbGV0ZVJldGVudGlvblBvbGljeVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIlJldGVudGlvblBvbGljeVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3RhdGljV2Vic2l0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlN0YXRpY1dlYnNpdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlN0YXRpY1dlYnNpdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJTdGF0aWNXZWJzaXRlXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBMb2dnaW5nID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkxvZ2dpbmdcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJMb2dnaW5nXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlZlcnNpb25cIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZWxldGVQcm9wZXJ0eToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkRlbGV0ZVwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiRGVsZXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlYWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJSZWFkXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJSZWFkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHdyaXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiV3JpdGVcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIldyaXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJldGVudGlvblBvbGljeToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlJldGVudGlvblBvbGljeVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiUmV0ZW50aW9uUG9saWN5XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiUmV0ZW50aW9uUG9saWN5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBSZXRlbnRpb25Qb2xpY3kgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiUmV0ZW50aW9uUG9saWN5XCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiUmV0ZW50aW9uUG9saWN5XCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZW5hYmxlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkVuYWJsZWRcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkVuYWJsZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF5czoge1xuICAgICAgICAgICAgICAgIGNvbnN0cmFpbnRzOiB7XG4gICAgICAgICAgICAgICAgICAgIEluY2x1c2l2ZU1pbmltdW06IDEsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJEYXlzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJEYXlzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgTWV0cmljcyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJNZXRyaWNzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiTWV0cmljc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJWZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJWZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5hYmxlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkVuYWJsZWRcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkVuYWJsZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW5jbHVkZUFQSXM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJJbmNsdWRlQVBJc1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiSW5jbHVkZUFQSXNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmV0ZW50aW9uUG9saWN5OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiUmV0ZW50aW9uUG9saWN5XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJSZXRlbnRpb25Qb2xpY3lcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJSZXRlbnRpb25Qb2xpY3lcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvcnNSdWxlID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvcnNSdWxlXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29yc1J1bGVcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBhbGxvd2VkT3JpZ2luczoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkFsbG93ZWRPcmlnaW5zXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJBbGxvd2VkT3JpZ2luc1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFsbG93ZWRNZXRob2RzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQWxsb3dlZE1ldGhvZHNcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkFsbG93ZWRNZXRob2RzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWxsb3dlZEhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJBbGxvd2VkSGVhZGVyc1wiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQWxsb3dlZEhlYWRlcnNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBleHBvc2VkSGVhZGVyczoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkV4cG9zZWRIZWFkZXJzXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJFeHBvc2VkSGVhZGVyc1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1heEFnZUluU2Vjb25kczoge1xuICAgICAgICAgICAgICAgIGNvbnN0cmFpbnRzOiB7XG4gICAgICAgICAgICAgICAgICAgIEluY2x1c2l2ZU1pbmltdW06IDAsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJNYXhBZ2VJblNlY29uZHNcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIk1heEFnZUluU2Vjb25kc1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFN0YXRpY1dlYnNpdGUgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiU3RhdGljV2Vic2l0ZVwiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlN0YXRpY1dlYnNpdGVcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlbmFibGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRW5hYmxlZFwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiRW5hYmxlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpbmRleERvY3VtZW50OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiSW5kZXhEb2N1bWVudFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiSW5kZXhEb2N1bWVudFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yRG9jdW1lbnQ0MDRQYXRoOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRXJyb3JEb2N1bWVudDQwNFBhdGhcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkVycm9yRG9jdW1lbnQ0MDRQYXRoXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVmYXVsdEluZGV4RG9jdW1lbnRQYXRoOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRGVmYXVsdEluZGV4RG9jdW1lbnRQYXRoXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJEZWZhdWx0SW5kZXhEb2N1bWVudFBhdGhcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBTdG9yYWdlRXJyb3IgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiU3RvcmFnZUVycm9yXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiU3RvcmFnZUVycm9yXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgbWVzc2FnZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIk1lc3NhZ2VcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIk1lc3NhZ2VcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQ29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGF1dGhlbnRpY2F0aW9uRXJyb3JEZXRhaWw6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJBdXRoZW50aWNhdGlvbkVycm9yRGV0YWlsXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJBdXRoZW50aWNhdGlvbkVycm9yRGV0YWlsXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlNlcnZpY2VTdGF0aXN0aWNzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JTZXJ2aWNlU3RhdGlzdGljc1wiLFxuICAgIHhtbE5hbWU6IFwiU3RvcmFnZVNlcnZpY2VTdGF0c1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JTZXJ2aWNlU3RhdGlzdGljc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGdlb1JlcGxpY2F0aW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiR2VvUmVwbGljYXRpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkdlb1JlcGxpY2F0aW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiR2VvUmVwbGljYXRpb25cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEdlb1JlcGxpY2F0aW9uID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkdlb1JlcGxpY2F0aW9uXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiR2VvUmVwbGljYXRpb25cIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBzdGF0dXM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJTdGF0dXNcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcImxpdmVcIiwgXCJib290c3RyYXBcIiwgXCJ1bmF2YWlsYWJsZVwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RTeW5jT246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJMYXN0U3luY1RpbWVcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkxhc3RTeW5jVGltZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IExpc3RDb250YWluZXJzU2VnbWVudFJlc3BvbnNlID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkxpc3RDb250YWluZXJzU2VnbWVudFJlc3BvbnNlXCIsXG4gICAgeG1sTmFtZTogXCJFbnVtZXJhdGlvblJlc3VsdHNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJMaXN0Q29udGFpbmVyc1NlZ21lbnRSZXNwb25zZVwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHNlcnZpY2VFbmRwb2ludDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNlcnZpY2VFbmRwb2ludFwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiU2VydmljZUVuZHBvaW50XCIsXG4gICAgICAgICAgICAgICAgeG1sSXNBdHRyaWJ1dGU6IHRydWUsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJlZml4OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiUHJlZml4XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJQcmVmaXhcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtYXJrZXI6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJNYXJrZXJcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIk1hcmtlclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1heFBhZ2VTaXplOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTWF4UmVzdWx0c1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTWF4UmVzdWx0c1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRhaW5lckl0ZW1zOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVySXRlbXNcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkNvbnRhaW5lcnNcIixcbiAgICAgICAgICAgICAgICB4bWxJc1dyYXBwZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sRWxlbWVudE5hbWU6IFwiQ29udGFpbmVyXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlNlcXVlbmNlXCIsXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJJdGVtXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGludWF0aW9uVG9rZW46IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJOZXh0TWFya2VyXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJOZXh0TWFya2VyXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVySXRlbSA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJJdGVtXCIsXG4gICAgeG1sTmFtZTogXCJDb250YWluZXJcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJJdGVtXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgbmFtZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIk5hbWVcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIk5hbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZWxldGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRGVsZXRlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiRGVsZXRlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiVmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiVmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJQcm9wZXJ0aWVzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJQcm9wZXJ0aWVzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyUHJvcGVydGllc1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJNZXRhZGF0YVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTWV0YWRhdGFcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGljdGlvbmFyeVwiLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogeyB0eXBlOiB7IG5hbWU6IFwiU3RyaW5nXCIgfSB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyUHJvcGVydGllcyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJQcm9wZXJ0aWVzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyUHJvcGVydGllc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkxhc3QtTW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkxhc3QtTW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRXRhZ1wiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiRXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlYXNlU3RhdHVzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTGVhc2VTdGF0dXNcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkxlYXNlU3RhdHVzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wibG9ja2VkXCIsIFwidW5sb2NrZWRcIl0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZWFzZVN0YXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTGVhc2VTdGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTGVhc2VTdGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYXZhaWxhYmxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImxlYXNlZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJleHBpcmVkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImJyZWFraW5nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImJyb2tlblwiLFxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVhc2VEdXJhdGlvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkxlYXNlRHVyYXRpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkxlYXNlRHVyYXRpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJpbmZpbml0ZVwiLCBcImZpeGVkXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHVibGljQWNjZXNzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiUHVibGljQWNjZXNzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJQdWJsaWNBY2Nlc3NcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJjb250YWluZXJcIiwgXCJibG9iXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaGFzSW1tdXRhYmlsaXR5UG9saWN5OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiSGFzSW1tdXRhYmlsaXR5UG9saWN5XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJIYXNJbW11dGFiaWxpdHlQb2xpY3lcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaGFzTGVnYWxIb2xkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiSGFzTGVnYWxIb2xkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJIYXNMZWdhbEhvbGRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVmYXVsdEVuY3J5cHRpb25TY29wZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkRlZmF1bHRFbmNyeXB0aW9uU2NvcGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkRlZmF1bHRFbmNyeXB0aW9uU2NvcGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcmV2ZW50RW5jcnlwdGlvblNjb3BlT3ZlcnJpZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJEZW55RW5jcnlwdGlvblNjb3BlT3ZlcnJpZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkRlbnlFbmNyeXB0aW9uU2NvcGVPdmVycmlkZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZWxldGVkT246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJEZWxldGVkVGltZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiRGVsZXRlZFRpbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZW1haW5pbmdSZXRlbnRpb25EYXlzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiUmVtYWluaW5nUmV0ZW50aW9uRGF5c1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiUmVtYWluaW5nUmV0ZW50aW9uRGF5c1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzSW1tdXRhYmxlU3RvcmFnZVdpdGhWZXJzaW9uaW5nRW5hYmxlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkltbXV0YWJsZVN0b3JhZ2VXaXRoVmVyc2lvbmluZ0VuYWJsZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkltbXV0YWJsZVN0b3JhZ2VXaXRoVmVyc2lvbmluZ0VuYWJsZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgS2V5SW5mbyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJLZXlJbmZvXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiS2V5SW5mb1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHN0YXJ0c09uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiU3RhcnRcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlN0YXJ0XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXhwaXJlc09uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRXhwaXJ5XCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJFeHBpcnlcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBVc2VyRGVsZWdhdGlvbktleSA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJVc2VyRGVsZWdhdGlvbktleVwiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlVzZXJEZWxlZ2F0aW9uS2V5XCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgc2lnbmVkT2JqZWN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJTaWduZWRPaWRcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlNpZ25lZE9pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNpZ25lZFRlbmFudElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiU2lnbmVkVGlkXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJTaWduZWRUaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzaWduZWRTdGFydHNPbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNpZ25lZFN0YXJ0XCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJTaWduZWRTdGFydFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNpZ25lZEV4cGlyZXNPbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNpZ25lZEV4cGlyeVwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiU2lnbmVkRXhwaXJ5XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2lnbmVkU2VydmljZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNpZ25lZFNlcnZpY2VcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlNpZ25lZFNlcnZpY2VcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzaWduZWRWZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiU2lnbmVkVmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiU2lnbmVkVmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiVmFsdWVcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlZhbHVlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgRmlsdGVyQmxvYlNlZ21lbnQgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiRmlsdGVyQmxvYlNlZ21lbnRcIixcbiAgICB4bWxOYW1lOiBcIkVudW1lcmF0aW9uUmVzdWx0c1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkZpbHRlckJsb2JTZWdtZW50XCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgc2VydmljZUVuZHBvaW50OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiU2VydmljZUVuZHBvaW50XCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJTZXJ2aWNlRW5kcG9pbnRcIixcbiAgICAgICAgICAgICAgICB4bWxJc0F0dHJpYnV0ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB3aGVyZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIldoZXJlXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJXaGVyZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYnNcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkJsb2JzXCIsXG4gICAgICAgICAgICAgICAgeG1sSXNXcmFwcGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbEVsZW1lbnROYW1lOiBcIkJsb2JcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU2VxdWVuY2VcIixcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIkZpbHRlckJsb2JJdGVtXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGludWF0aW9uVG9rZW46IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJOZXh0TWFya2VyXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJOZXh0TWFya2VyXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgRmlsdGVyQmxvYkl0ZW0gPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiRmlsdGVyQmxvYkl0ZW1cIixcbiAgICB4bWxOYW1lOiBcIkJsb2JcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJGaWx0ZXJCbG9iSXRlbVwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIG5hbWU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJOYW1lXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJOYW1lXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGFpbmVyTmFtZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lck5hbWVcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkNvbnRhaW5lck5hbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0YWdzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiVGFnc1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiVGFnc1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JUYWdzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iVGFncyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iVGFnc1wiLFxuICAgIHhtbE5hbWU6IFwiVGFnc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JUYWdzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgYmxvYlRhZ1NldDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JUYWdTZXRcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlRhZ1NldFwiLFxuICAgICAgICAgICAgICAgIHhtbElzV3JhcHBlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxFbGVtZW50TmFtZTogXCJUYWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU2VxdWVuY2VcIixcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JUYWdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iVGFnID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JUYWdcIixcbiAgICB4bWxOYW1lOiBcIlRhZ1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JUYWdcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBrZXk6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJLZXlcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIktleVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiVmFsdWVcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlZhbHVlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgU2lnbmVkSWRlbnRpZmllciA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJTaWduZWRJZGVudGlmaWVyXCIsXG4gICAgeG1sTmFtZTogXCJTaWduZWRJZGVudGlmaWVyXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiU2lnbmVkSWRlbnRpZmllclwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGlkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiSWRcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIklkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWNjZXNzUG9saWN5OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQWNjZXNzUG9saWN5XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJBY2Nlc3NQb2xpY3lcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJBY2Nlc3NQb2xpY3lcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEFjY2Vzc1BvbGljeSA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJBY2Nlc3NQb2xpY3lcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJBY2Nlc3NQb2xpY3lcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBzdGFydHNPbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlN0YXJ0XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJTdGFydFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGV4cGlyZXNPbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkV4cGlyeVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiRXhwaXJ5XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGVybWlzc2lvbnM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJQZXJtaXNzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJQZXJtaXNzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgTGlzdEJsb2JzRmxhdFNlZ21lbnRSZXNwb25zZSA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJMaXN0QmxvYnNGbGF0U2VnbWVudFJlc3BvbnNlXCIsXG4gICAgeG1sTmFtZTogXCJFbnVtZXJhdGlvblJlc3VsdHNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJMaXN0QmxvYnNGbGF0U2VnbWVudFJlc3BvbnNlXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgc2VydmljZUVuZHBvaW50OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiU2VydmljZUVuZHBvaW50XCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJTZXJ2aWNlRW5kcG9pbnRcIixcbiAgICAgICAgICAgICAgICB4bWxJc0F0dHJpYnV0ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250YWluZXJOYW1lOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyTmFtZVwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQ29udGFpbmVyTmFtZVwiLFxuICAgICAgICAgICAgICAgIHhtbElzQXR0cmlidXRlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByZWZpeDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlByZWZpeFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiUHJlZml4XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbWFya2VyOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTWFya2VyXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJNYXJrZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtYXhQYWdlU2l6ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIk1heFJlc3VsdHNcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIk1heFJlc3VsdHNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZWdtZW50OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiU2VnbWVudFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQmxvYnNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJCbG9iRmxhdExpc3RTZWdtZW50XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250aW51YXRpb25Ub2tlbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIk5leHRNYXJrZXJcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIk5leHRNYXJrZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iRmxhdExpc3RTZWdtZW50ID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JGbGF0TGlzdFNlZ21lbnRcIixcbiAgICB4bWxOYW1lOiBcIkJsb2JzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYkZsYXRMaXN0U2VnbWVudFwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGJsb2JJdGVtczoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JJdGVtc1wiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQmxvYkl0ZW1zXCIsXG4gICAgICAgICAgICAgICAgeG1sRWxlbWVudE5hbWU6IFwiQmxvYlwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTZXF1ZW5jZVwiLFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiQmxvYkl0ZW1JbnRlcm5hbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JJdGVtSW50ZXJuYWwgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYkl0ZW1JbnRlcm5hbFwiLFxuICAgIHhtbE5hbWU6IFwiQmxvYlwiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JJdGVtSW50ZXJuYWxcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBuYW1lOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTmFtZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTmFtZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JOYW1lXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZWxldGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRGVsZXRlZFwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiRGVsZXRlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzbmFwc2hvdDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNuYXBzaG90XCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJTbmFwc2hvdFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb25JZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlZlcnNpb25JZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiVmVyc2lvbklkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNDdXJyZW50VmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIklzQ3VycmVudFZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIklzQ3VycmVudFZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlByb3BlcnRpZXNcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlByb3BlcnRpZXNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJCbG9iUHJvcGVydGllc0ludGVybmFsXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIk1ldGFkYXRhXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJNZXRhZGF0YVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEaWN0aW9uYXJ5XCIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB7IHR5cGU6IHsgbmFtZTogXCJTdHJpbmdcIiB9IH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBibG9iVGFnczoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JUYWdzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJUYWdzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiQmxvYlRhZ3NcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9iamVjdFJlcGxpY2F0aW9uTWV0YWRhdGE6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJPYmplY3RSZXBsaWNhdGlvbk1ldGFkYXRhXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJPck1ldGFkYXRhXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRpY3Rpb25hcnlcIixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHsgdHlwZTogeyBuYW1lOiBcIlN0cmluZ1wiIH0gfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhhc1ZlcnNpb25zT25seToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkhhc1ZlcnNpb25zT25seVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiSGFzVmVyc2lvbnNPbmx5XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JOYW1lID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JOYW1lXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYk5hbWVcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlbmNvZGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRW5jb2RlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiRW5jb2RlZFwiLFxuICAgICAgICAgICAgICAgIHhtbElzQXR0cmlidXRlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudFwiLFxuICAgICAgICAgICAgICAgIHhtbElzTXNUZXh0OiB0cnVlLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JQcm9wZXJ0aWVzSW50ZXJuYWwgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYlByb3BlcnRpZXNJbnRlcm5hbFwiLFxuICAgIHhtbE5hbWU6IFwiUHJvcGVydGllc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JQcm9wZXJ0aWVzSW50ZXJuYWxcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBjcmVhdGVkT246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJDcmVhdGlvbi1UaW1lXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJDcmVhdGlvbi1UaW1lXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTGFzdC1Nb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTGFzdC1Nb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJFdGFnXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJFdGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudExlbmd0aDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRlbnQtTGVuZ3RoXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJDb250ZW50LUxlbmd0aFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnRUeXBlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGVudC1UeXBlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJDb250ZW50LVR5cGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50RW5jb2Rpbmc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJDb250ZW50LUVuY29kaW5nXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJDb250ZW50LUVuY29kaW5nXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudExhbmd1YWdlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGVudC1MYW5ndWFnZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQ29udGVudC1MYW5ndWFnZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnRNRDU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJDb250ZW50LU1ENVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQ29udGVudC1NRDVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50RGlzcG9zaXRpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJDb250ZW50LURpc3Bvc2l0aW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJDb250ZW50LURpc3Bvc2l0aW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2FjaGVDb250cm9sOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ2FjaGUtQ29udHJvbFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQ2FjaGUtQ29udHJvbFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JTZXF1ZW5jZU51bWJlcjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1zZXF1ZW5jZS1udW1iZXJcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1zZXF1ZW5jZS1udW1iZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBibG9iVHlwZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JUeXBlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJCbG9iVHlwZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcIkJsb2NrQmxvYlwiLCBcIlBhZ2VCbG9iXCIsIFwiQXBwZW5kQmxvYlwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlYXNlU3RhdHVzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTGVhc2VTdGF0dXNcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkxlYXNlU3RhdHVzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wibG9ja2VkXCIsIFwidW5sb2NrZWRcIl0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZWFzZVN0YXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTGVhc2VTdGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTGVhc2VTdGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYXZhaWxhYmxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImxlYXNlZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJleHBpcmVkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImJyZWFraW5nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImJyb2tlblwiLFxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVhc2VEdXJhdGlvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkxlYXNlRHVyYXRpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkxlYXNlRHVyYXRpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJpbmZpbml0ZVwiLCBcImZpeGVkXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29weUlkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ29weUlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJDb3B5SWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3B5U3RhdHVzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ29weVN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQ29weVN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcInBlbmRpbmdcIiwgXCJzdWNjZXNzXCIsIFwiYWJvcnRlZFwiLCBcImZhaWxlZFwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvcHlTb3VyY2U6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJDb3B5U291cmNlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJDb3B5U291cmNlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29weVByb2dyZXNzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ29weVByb2dyZXNzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJDb3B5UHJvZ3Jlc3NcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3B5Q29tcGxldGVkT246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJDb3B5Q29tcGxldGlvblRpbWVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkNvcHlDb21wbGV0aW9uVGltZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvcHlTdGF0dXNEZXNjcmlwdGlvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvcHlTdGF0dXNEZXNjcmlwdGlvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQ29weVN0YXR1c0Rlc2NyaXB0aW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2VydmVyRW5jcnlwdGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiU2VydmVyRW5jcnlwdGVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJTZXJ2ZXJFbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW5jcmVtZW50YWxDb3B5OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiSW5jcmVtZW50YWxDb3B5XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJJbmNyZW1lbnRhbENvcHlcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVzdGluYXRpb25TbmFwc2hvdDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkRlc3RpbmF0aW9uU25hcHNob3RcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkRlc3RpbmF0aW9uU25hcHNob3RcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZWxldGVkT246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJEZWxldGVkVGltZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiRGVsZXRlZFRpbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZW1haW5pbmdSZXRlbnRpb25EYXlzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiUmVtYWluaW5nUmV0ZW50aW9uRGF5c1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiUmVtYWluaW5nUmV0ZW50aW9uRGF5c1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFjY2Vzc1RpZXI6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJBY2Nlc3NUaWVyXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJBY2Nlc3NUaWVyXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJQNFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJQNlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJQMTBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiUDE1XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlAyMFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJQMzBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiUDQwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlA1MFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJQNjBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiUDcwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlA4MFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJIb3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiQ29vbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJBcmNoaXZlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkNvbGRcIixcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFjY2Vzc1RpZXJJbmZlcnJlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkFjY2Vzc1RpZXJJbmZlcnJlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQWNjZXNzVGllckluZmVycmVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFyY2hpdmVTdGF0dXM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJBcmNoaXZlU3RhdHVzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJBcmNoaXZlU3RhdHVzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJyZWh5ZHJhdGUtcGVuZGluZy10by1ob3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwicmVoeWRyYXRlLXBlbmRpbmctdG8tY29vbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJyZWh5ZHJhdGUtcGVuZGluZy10by1jb2xkXCIsXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjdXN0b21lclByb3ZpZGVkS2V5U2hhMjU2OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ3VzdG9tZXJQcm92aWRlZEtleVNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQ3VzdG9tZXJQcm92aWRlZEtleVNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25TY29wZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkVuY3J5cHRpb25TY29wZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiRW5jcnlwdGlvblNjb3BlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWNjZXNzVGllckNoYW5nZWRPbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkFjY2Vzc1RpZXJDaGFuZ2VUaW1lXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJBY2Nlc3NUaWVyQ2hhbmdlVGltZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRhZ0NvdW50OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiVGFnQ291bnRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlRhZ0NvdW50XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXhwaXJlc09uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRXhwaXJ5LVRpbWVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkV4cGlyeS1UaW1lXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNTZWFsZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJTZWFsZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlNlYWxlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZWh5ZHJhdGVQcmlvcml0eToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlJlaHlkcmF0ZVByaW9yaXR5XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJSZWh5ZHJhdGVQcmlvcml0eVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcIkhpZ2hcIiwgXCJTdGFuZGFyZFwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RBY2Nlc3NlZE9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTGFzdEFjY2Vzc1RpbWVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkxhc3RBY2Nlc3NUaW1lXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5RXhwaXJlc09uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiSW1tdXRhYmlsaXR5UG9saWN5VW50aWxEYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJJbW11dGFiaWxpdHlQb2xpY3lVbnRpbERhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpbW11dGFiaWxpdHlQb2xpY3lNb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiSW1tdXRhYmlsaXR5UG9saWN5TW9kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiSW1tdXRhYmlsaXR5UG9saWN5TW9kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcIk11dGFibGVcIiwgXCJVbmxvY2tlZFwiLCBcIkxvY2tlZFwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlZ2FsSG9sZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkxlZ2FsSG9sZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTGVnYWxIb2xkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IExpc3RCbG9ic0hpZXJhcmNoeVNlZ21lbnRSZXNwb25zZSA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJMaXN0QmxvYnNIaWVyYXJjaHlTZWdtZW50UmVzcG9uc2VcIixcbiAgICB4bWxOYW1lOiBcIkVudW1lcmF0aW9uUmVzdWx0c1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkxpc3RCbG9ic0hpZXJhcmNoeVNlZ21lbnRSZXNwb25zZVwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHNlcnZpY2VFbmRwb2ludDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNlcnZpY2VFbmRwb2ludFwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiU2VydmljZUVuZHBvaW50XCIsXG4gICAgICAgICAgICAgICAgeG1sSXNBdHRyaWJ1dGU6IHRydWUsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGFpbmVyTmFtZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lck5hbWVcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkNvbnRhaW5lck5hbWVcIixcbiAgICAgICAgICAgICAgICB4bWxJc0F0dHJpYnV0ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcmVmaXg6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJQcmVmaXhcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlByZWZpeFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1hcmtlcjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIk1hcmtlclwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTWFya2VyXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbWF4UGFnZVNpemU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJNYXhSZXN1bHRzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJNYXhSZXN1bHRzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVsaW1pdGVyOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRGVsaW1pdGVyXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJEZWxpbWl0ZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZWdtZW50OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiU2VnbWVudFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQmxvYnNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJCbG9iSGllcmFyY2h5TGlzdFNlZ21lbnRcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRpbnVhdGlvblRva2VuOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTmV4dE1hcmtlclwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTmV4dE1hcmtlclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JIaWVyYXJjaHlMaXN0U2VnbWVudCA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iSGllcmFyY2h5TGlzdFNlZ21lbnRcIixcbiAgICB4bWxOYW1lOiBcIkJsb2JzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYkhpZXJhcmNoeUxpc3RTZWdtZW50XCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgYmxvYlByZWZpeGVzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYlByZWZpeGVzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJCbG9iUHJlZml4ZXNcIixcbiAgICAgICAgICAgICAgICB4bWxFbGVtZW50TmFtZTogXCJCbG9iUHJlZml4XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlNlcXVlbmNlXCIsXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJCbG9iUHJlZml4XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmxvYkl0ZW1zOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYkl0ZW1zXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJCbG9iSXRlbXNcIixcbiAgICAgICAgICAgICAgICB4bWxFbGVtZW50TmFtZTogXCJCbG9iXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlNlcXVlbmNlXCIsXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJCbG9iSXRlbUludGVybmFsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlByZWZpeCA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iUHJlZml4XCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYlByZWZpeFwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIG5hbWU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJOYW1lXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJOYW1lXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiQmxvYk5hbWVcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2NrTG9va3VwTGlzdCA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9ja0xvb2t1cExpc3RcIixcbiAgICB4bWxOYW1lOiBcIkJsb2NrTGlzdFwiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2NrTG9va3VwTGlzdFwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNvbW1pdHRlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbW1pdHRlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQ29tbWl0dGVkXCIsXG4gICAgICAgICAgICAgICAgeG1sRWxlbWVudE5hbWU6IFwiQ29tbWl0dGVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlNlcXVlbmNlXCIsXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVuY29tbWl0dGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiVW5jb21taXR0ZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlVuY29tbWl0dGVkXCIsXG4gICAgICAgICAgICAgICAgeG1sRWxlbWVudE5hbWU6IFwiVW5jb21taXR0ZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU2VxdWVuY2VcIixcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGF0ZXN0OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTGF0ZXN0XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJMYXRlc3RcIixcbiAgICAgICAgICAgICAgICB4bWxFbGVtZW50TmFtZTogXCJMYXRlc3RcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU2VxdWVuY2VcIixcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvY2tMaXN0ID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2NrTGlzdFwiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2NrTGlzdFwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNvbW1pdHRlZEJsb2Nrczoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbW1pdHRlZEJsb2Nrc1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQ29tbWl0dGVkQmxvY2tzXCIsXG4gICAgICAgICAgICAgICAgeG1sSXNXcmFwcGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbEVsZW1lbnROYW1lOiBcIkJsb2NrXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlNlcXVlbmNlXCIsXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJCbG9ja1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVuY29tbWl0dGVkQmxvY2tzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiVW5jb21taXR0ZWRCbG9ja3NcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlVuY29tbWl0dGVkQmxvY2tzXCIsXG4gICAgICAgICAgICAgICAgeG1sSXNXcmFwcGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbEVsZW1lbnROYW1lOiBcIkJsb2NrXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlNlcXVlbmNlXCIsXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJCbG9ja1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2NrID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2NrXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvY2tcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBuYW1lOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTmFtZVwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTmFtZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNpemU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJTaXplXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJTaXplXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgUGFnZUxpc3QgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiUGFnZUxpc3RcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJQYWdlTGlzdFwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHBhZ2VSYW5nZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlBhZ2VSYW5nZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiUGFnZVJhbmdlXCIsXG4gICAgICAgICAgICAgICAgeG1sRWxlbWVudE5hbWU6IFwiUGFnZVJhbmdlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlNlcXVlbmNlXCIsXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJQYWdlUmFuZ2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGVhclJhbmdlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ2xlYXJSYW5nZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQ2xlYXJSYW5nZVwiLFxuICAgICAgICAgICAgICAgIHhtbEVsZW1lbnROYW1lOiBcIkNsZWFyUmFuZ2VcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU2VxdWVuY2VcIixcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIkNsZWFyUmFuZ2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250aW51YXRpb25Ub2tlbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIk5leHRNYXJrZXJcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIk5leHRNYXJrZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBQYWdlUmFuZ2UgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiUGFnZVJhbmdlXCIsXG4gICAgeG1sTmFtZTogXCJQYWdlUmFuZ2VcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJQYWdlUmFuZ2VcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBzdGFydDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlN0YXJ0XCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJTdGFydFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkVuZFwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiRW5kXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ2xlYXJSYW5nZSA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDbGVhclJhbmdlXCIsXG4gICAgeG1sTmFtZTogXCJDbGVhclJhbmdlXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ2xlYXJSYW5nZVwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHN0YXJ0OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiU3RhcnRcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlN0YXJ0XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5kOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRW5kXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJFbmRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBRdWVyeVJlcXVlc3QgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiUXVlcnlSZXF1ZXN0XCIsXG4gICAgeG1sTmFtZTogXCJRdWVyeVJlcXVlc3RcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJRdWVyeVJlcXVlc3RcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBxdWVyeVR5cGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJRdWVyeVR5cGVcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlF1ZXJ5VHlwZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGV4cHJlc3Npb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJFeHByZXNzaW9uXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJFeHByZXNzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW5wdXRTZXJpYWxpemF0aW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiSW5wdXRTZXJpYWxpemF0aW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJJbnB1dFNlcmlhbGl6YXRpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJRdWVyeVNlcmlhbGl6YXRpb25cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG91dHB1dFNlcmlhbGl6YXRpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJPdXRwdXRTZXJpYWxpemF0aW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJPdXRwdXRTZXJpYWxpemF0aW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiUXVlcnlTZXJpYWxpemF0aW9uXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBRdWVyeVNlcmlhbGl6YXRpb24gPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiUXVlcnlTZXJpYWxpemF0aW9uXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiUXVlcnlTZXJpYWxpemF0aW9uXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZm9ybWF0OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRm9ybWF0XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJGb3JtYXRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJRdWVyeUZvcm1hdFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgUXVlcnlGb3JtYXQgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiUXVlcnlGb3JtYXRcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJRdWVyeUZvcm1hdFwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJUeXBlXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJUeXBlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wiZGVsaW1pdGVkXCIsIFwianNvblwiLCBcImFycm93XCIsIFwicGFycXVldFwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlbGltaXRlZFRleHRDb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRGVsaW1pdGVkVGV4dENvbmZpZ3VyYXRpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkRlbGltaXRlZFRleHRDb25maWd1cmF0aW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiRGVsaW1pdGVkVGV4dENvbmZpZ3VyYXRpb25cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGpzb25UZXh0Q29uZmlndXJhdGlvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkpzb25UZXh0Q29uZmlndXJhdGlvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiSnNvblRleHRDb25maWd1cmF0aW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiSnNvblRleHRDb25maWd1cmF0aW9uXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhcnJvd0NvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJBcnJvd0NvbmZpZ3VyYXRpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkFycm93Q29uZmlndXJhdGlvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIkFycm93Q29uZmlndXJhdGlvblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGFycXVldFRleHRDb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiUGFycXVldFRleHRDb25maWd1cmF0aW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJQYXJxdWV0VGV4dENvbmZpZ3VyYXRpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGljdGlvbmFyeVwiLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogeyB0eXBlOiB7IG5hbWU6IFwiYW55XCIgfSB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgRGVsaW1pdGVkVGV4dENvbmZpZ3VyYXRpb24gPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiRGVsaW1pdGVkVGV4dENvbmZpZ3VyYXRpb25cIixcbiAgICB4bWxOYW1lOiBcIkRlbGltaXRlZFRleHRDb25maWd1cmF0aW9uXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiRGVsaW1pdGVkVGV4dENvbmZpZ3VyYXRpb25cIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBjb2x1bW5TZXBhcmF0b3I6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJDb2x1bW5TZXBhcmF0b3JcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkNvbHVtblNlcGFyYXRvclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZpZWxkUXVvdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJGaWVsZFF1b3RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJGaWVsZFF1b3RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVjb3JkU2VwYXJhdG9yOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiUmVjb3JkU2VwYXJhdG9yXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJSZWNvcmRTZXBhcmF0b3JcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlc2NhcGVDaGFyOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRXNjYXBlQ2hhclwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiRXNjYXBlQ2hhclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhlYWRlcnNQcmVzZW50OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiSGVhZGVyc1ByZXNlbnRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkhhc0hlYWRlcnNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgSnNvblRleHRDb25maWd1cmF0aW9uID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkpzb25UZXh0Q29uZmlndXJhdGlvblwiLFxuICAgIHhtbE5hbWU6IFwiSnNvblRleHRDb25maWd1cmF0aW9uXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiSnNvblRleHRDb25maWd1cmF0aW9uXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgcmVjb3JkU2VwYXJhdG9yOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiUmVjb3JkU2VwYXJhdG9yXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJSZWNvcmRTZXBhcmF0b3JcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBBcnJvd0NvbmZpZ3VyYXRpb24gPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQXJyb3dDb25maWd1cmF0aW9uXCIsXG4gICAgeG1sTmFtZTogXCJBcnJvd0NvbmZpZ3VyYXRpb25cIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJBcnJvd0NvbmZpZ3VyYXRpb25cIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBzY2hlbWE6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJTY2hlbWFcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlNjaGVtYVwiLFxuICAgICAgICAgICAgICAgIHhtbElzV3JhcHBlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxFbGVtZW50TmFtZTogXCJGaWVsZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTZXF1ZW5jZVwiLFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiQXJyb3dGaWVsZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEFycm93RmllbGQgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQXJyb3dGaWVsZFwiLFxuICAgIHhtbE5hbWU6IFwiRmllbGRcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJBcnJvd0ZpZWxkXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlR5cGVcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlR5cGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuYW1lOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTmFtZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTmFtZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByZWNpc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlByZWNpc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiUHJlY2lzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2NhbGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJTY2FsZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiU2NhbGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBTZXJ2aWNlU2V0UHJvcGVydGllc0hlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiU2VydmljZV9zZXRQcm9wZXJ0aWVzSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlNlcnZpY2VTZXRQcm9wZXJ0aWVzSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgU2VydmljZVNldFByb3BlcnRpZXNFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNlcnZpY2Vfc2V0UHJvcGVydGllc0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJTZXJ2aWNlU2V0UHJvcGVydGllc0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFNlcnZpY2VHZXRQcm9wZXJ0aWVzSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJTZXJ2aWNlX2dldFByb3BlcnRpZXNIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiU2VydmljZUdldFByb3BlcnRpZXNIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBTZXJ2aWNlR2V0UHJvcGVydGllc0V4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiU2VydmljZV9nZXRQcm9wZXJ0aWVzRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlNlcnZpY2VHZXRQcm9wZXJ0aWVzRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgU2VydmljZUdldFN0YXRpc3RpY3NIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNlcnZpY2VfZ2V0U3RhdGlzdGljc0hlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJTZXJ2aWNlR2V0U3RhdGlzdGljc0hlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgU2VydmljZUdldFN0YXRpc3RpY3NFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNlcnZpY2VfZ2V0U3RhdGlzdGljc0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJTZXJ2aWNlR2V0U3RhdGlzdGljc0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFNlcnZpY2VMaXN0Q29udGFpbmVyc1NlZ21lbnRIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNlcnZpY2VfbGlzdENvbnRhaW5lcnNTZWdtZW50SGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlNlcnZpY2VMaXN0Q29udGFpbmVyc1NlZ21lbnRIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBTZXJ2aWNlTGlzdENvbnRhaW5lcnNTZWdtZW50RXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJTZXJ2aWNlX2xpc3RDb250YWluZXJzU2VnbWVudEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJTZXJ2aWNlTGlzdENvbnRhaW5lcnNTZWdtZW50RXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgU2VydmljZUdldFVzZXJEZWxlZ2F0aW9uS2V5SGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJTZXJ2aWNlX2dldFVzZXJEZWxlZ2F0aW9uS2V5SGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlNlcnZpY2VHZXRVc2VyRGVsZWdhdGlvbktleUhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgU2VydmljZUdldFVzZXJEZWxlZ2F0aW9uS2V5RXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJTZXJ2aWNlX2dldFVzZXJEZWxlZ2F0aW9uS2V5RXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlNlcnZpY2VHZXRVc2VyRGVsZWdhdGlvbktleUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFNlcnZpY2VHZXRBY2NvdW50SW5mb0hlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiU2VydmljZV9nZXRBY2NvdW50SW5mb0hlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJTZXJ2aWNlR2V0QWNjb3VudEluZm9IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBza3VOYW1lOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1za3UtbmFtZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1za3UtbmFtZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiU3RhbmRhcmRfTFJTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlN0YW5kYXJkX0dSU1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJTdGFuZGFyZF9SQUdSU1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJTdGFuZGFyZF9aUlNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiUHJlbWl1bV9MUlNcIixcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFjY291bnRLaW5kOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1hY2NvdW50LWtpbmRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYWNjb3VudC1raW5kXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJTdG9yYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkJsb2JTdG9yYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlN0b3JhZ2VWMlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJGaWxlU3RvcmFnZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJCbG9ja0Jsb2JTdG9yYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc0hpZXJhcmNoaWNhbE5hbWVzcGFjZUVuYWJsZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWlzLWhucy1lbmFibGVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWlzLWhucy1lbmFibGVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgU2VydmljZUdldEFjY291bnRJbmZvRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJTZXJ2aWNlX2dldEFjY291bnRJbmZvRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlNlcnZpY2VHZXRBY2NvdW50SW5mb0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFNlcnZpY2VTdWJtaXRCYXRjaEhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiU2VydmljZV9zdWJtaXRCYXRjaEhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJTZXJ2aWNlU3VibWl0QmF0Y2hIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgY29udGVudFR5cGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LXR5cGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtdHlwZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgU2VydmljZVN1Ym1pdEJhdGNoRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJTZXJ2aWNlX3N1Ym1pdEJhdGNoRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlNlcnZpY2VTdWJtaXRCYXRjaEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFNlcnZpY2VGaWx0ZXJCbG9ic0hlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiU2VydmljZV9maWx0ZXJCbG9ic0hlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJTZXJ2aWNlRmlsdGVyQmxvYnNIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFNlcnZpY2VGaWx0ZXJCbG9ic0V4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiU2VydmljZV9maWx0ZXJCbG9ic0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJTZXJ2aWNlRmlsdGVyQmxvYnNFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJDcmVhdGVIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9jcmVhdGVIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyQ3JlYXRlSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJDcmVhdGVFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9jcmVhdGVFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyQ3JlYXRlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyR2V0UHJvcGVydGllc0hlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX2dldFByb3BlcnRpZXNIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyR2V0UHJvcGVydGllc0hlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbWV0YVwiLFxuICAgICAgICAgICAgICAgIGhlYWRlckNvbGxlY3Rpb25QcmVmaXg6IFwieC1tcy1tZXRhLVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1tZXRhXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRpY3Rpb25hcnlcIixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHsgdHlwZTogeyBuYW1lOiBcIlN0cmluZ1wiIH0gfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlYXNlRHVyYXRpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxlYXNlLWR1cmF0aW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWxlYXNlLWR1cmF0aW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wiaW5maW5pdGVcIiwgXCJmaXhlZFwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlYXNlU3RhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxlYXNlLXN0YXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWxlYXNlLXN0YXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJhdmFpbGFibGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibGVhc2VkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImV4cGlyZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYnJlYWtpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYnJva2VuXCIsXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZWFzZVN0YXR1czoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVhc2Utc3RhdHVzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWxlYXNlLXN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcImxvY2tlZFwiLCBcInVubG9ja2VkXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBibG9iUHVibGljQWNjZXNzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLXB1YmxpYy1hY2Nlc3NcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1wdWJsaWMtYWNjZXNzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wiY29udGFpbmVyXCIsIFwiYmxvYlwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhhc0ltbXV0YWJpbGl0eVBvbGljeToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtaGFzLWltbXV0YWJpbGl0eS1wb2xpY3lcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtaGFzLWltbXV0YWJpbGl0eS1wb2xpY3lcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaGFzTGVnYWxIb2xkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1oYXMtbGVnYWwtaG9sZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1oYXMtbGVnYWwtaG9sZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZWZhdWx0RW5jcnlwdGlvblNjb3BlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1kZWZhdWx0LWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZGVmYXVsdC1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVueUVuY3J5cHRpb25TY29wZU92ZXJyaWRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1kZW55LWVuY3J5cHRpb24tc2NvcGUtb3ZlcnJpZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZGVueS1lbmNyeXB0aW9uLXNjb3BlLW92ZXJyaWRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzSW1tdXRhYmxlU3RvcmFnZVdpdGhWZXJzaW9uaW5nRW5hYmxlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtaW1tdXRhYmxlLXN0b3JhZ2Utd2l0aC12ZXJzaW9uaW5nLWVuYWJsZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtaW1tdXRhYmxlLXN0b3JhZ2Utd2l0aC12ZXJzaW9uaW5nLWVuYWJsZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJHZXRQcm9wZXJ0aWVzRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfZ2V0UHJvcGVydGllc0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJHZXRQcm9wZXJ0aWVzRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyRGVsZXRlSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfZGVsZXRlSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lckRlbGV0ZUhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyRGVsZXRlRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfZGVsZXRlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lckRlbGV0ZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lclNldE1ldGFkYXRhSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfc2V0TWV0YWRhdGFIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyU2V0TWV0YWRhdGFIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lclNldE1ldGFkYXRhRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfc2V0TWV0YWRhdGFFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyU2V0TWV0YWRhdGFFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJHZXRBY2Nlc3NQb2xpY3lIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9nZXRBY2Nlc3NQb2xpY3lIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyR2V0QWNjZXNzUG9saWN5SGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGJsb2JQdWJsaWNBY2Nlc3M6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2ItcHVibGljLWFjY2Vzc1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLXB1YmxpYy1hY2Nlc3NcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJjb250YWluZXJcIiwgXCJibG9iXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lckdldEFjY2Vzc1BvbGljeUV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX2dldEFjY2Vzc1BvbGljeUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJHZXRBY2Nlc3NQb2xpY3lFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJTZXRBY2Nlc3NQb2xpY3lIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9zZXRBY2Nlc3NQb2xpY3lIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyU2V0QWNjZXNzUG9saWN5SGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJTZXRBY2Nlc3NQb2xpY3lFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9zZXRBY2Nlc3NQb2xpY3lFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyU2V0QWNjZXNzUG9saWN5RXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyUmVzdG9yZUhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX3Jlc3RvcmVIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyUmVzdG9yZUhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyUmVzdG9yZUV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX3Jlc3RvcmVFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyUmVzdG9yZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lclJlbmFtZUhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX3JlbmFtZUhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJSZW5hbWVIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lclJlbmFtZUV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX3JlbmFtZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJSZW5hbWVFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJTdWJtaXRCYXRjaEhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX3N1Ym1pdEJhdGNoSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lclN1Ym1pdEJhdGNoSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNvbnRlbnRUeXBlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC10eXBlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LXR5cGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lclN1Ym1pdEJhdGNoRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfc3VibWl0QmF0Y2hFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyU3VibWl0QmF0Y2hFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJGaWx0ZXJCbG9ic0hlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX2ZpbHRlckJsb2JzSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lckZpbHRlckJsb2JzSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyRmlsdGVyQmxvYnNFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9maWx0ZXJCbG9ic0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJGaWx0ZXJCbG9ic0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lckFjcXVpcmVMZWFzZUhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX2FjcXVpcmVMZWFzZUhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJBY3F1aXJlTGVhc2VIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVhc2VJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVhc2UtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGVhc2UtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lckFjcXVpcmVMZWFzZUV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX2FjcXVpcmVMZWFzZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJBY3F1aXJlTGVhc2VFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJSZWxlYXNlTGVhc2VIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9yZWxlYXNlTGVhc2VIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyUmVsZWFzZUxlYXNlSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyUmVsZWFzZUxlYXNlRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfcmVsZWFzZUxlYXNlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lclJlbGVhc2VMZWFzZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lclJlbmV3TGVhc2VIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9yZW5ld0xlYXNlSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lclJlbmV3TGVhc2VIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVhc2VJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVhc2UtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGVhc2UtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lclJlbmV3TGVhc2VFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9yZW5ld0xlYXNlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lclJlbmV3TGVhc2VFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJCcmVha0xlYXNlSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfYnJlYWtMZWFzZUhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJCcmVha0xlYXNlSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlYXNlVGltZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVhc2UtdGltZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1sZWFzZS10aW1lXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJCcmVha0xlYXNlRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfYnJlYWtMZWFzZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJCcmVha0xlYXNlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyQ2hhbmdlTGVhc2VIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9jaGFuZ2VMZWFzZUhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJDaGFuZ2VMZWFzZUhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZWFzZUlkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWFzZS1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1sZWFzZS1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyQ2hhbmdlTGVhc2VFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9jaGFuZ2VMZWFzZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJDaGFuZ2VMZWFzZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lckxpc3RCbG9iRmxhdFNlZ21lbnRIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9saXN0QmxvYkZsYXRTZWdtZW50SGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lckxpc3RCbG9iRmxhdFNlZ21lbnRIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgY29udGVudFR5cGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LXR5cGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtdHlwZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJMaXN0QmxvYkZsYXRTZWdtZW50RXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfbGlzdEJsb2JGbGF0U2VnbWVudEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJMaXN0QmxvYkZsYXRTZWdtZW50RXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyTGlzdEJsb2JIaWVyYXJjaHlTZWdtZW50SGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfbGlzdEJsb2JIaWVyYXJjaHlTZWdtZW50SGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lckxpc3RCbG9iSGllcmFyY2h5U2VnbWVudEhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBjb250ZW50VHlwZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtdHlwZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC10eXBlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lckxpc3RCbG9iSGllcmFyY2h5U2VnbWVudEV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX2xpc3RCbG9iSGllcmFyY2h5U2VnbWVudEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJMaXN0QmxvYkhpZXJhcmNoeVNlZ21lbnRFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJHZXRBY2NvdW50SW5mb0hlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX2dldEFjY291bnRJbmZvSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lckdldEFjY291bnRJbmZvSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2t1TmFtZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtc2t1LW5hbWVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtc2t1LW5hbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlN0YW5kYXJkX0xSU1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJTdGFuZGFyZF9HUlNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiU3RhbmRhcmRfUkFHUlNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiU3RhbmRhcmRfWlJTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlByZW1pdW1fTFJTXCIsXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhY2NvdW50S2luZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYWNjb3VudC1raW5kXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWFjY291bnQta2luZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiU3RvcmFnZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJCbG9iU3RvcmFnZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJTdG9yYWdlVjJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiRmlsZVN0b3JhZ2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiQmxvY2tCbG9iU3RvcmFnZVwiLFxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNIaWVyYXJjaGljYWxOYW1lc3BhY2VFbmFibGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1pcy1obnMtZW5hYmxlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1pcy1obnMtZW5hYmxlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJHZXRBY2NvdW50SW5mb0V4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX2dldEFjY291bnRJbmZvRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lckdldEFjY291bnRJbmZvRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYkRvd25sb2FkSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX2Rvd25sb2FkSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JEb3dubG9hZEhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY3JlYXRlZE9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jcmVhdGlvbi10aW1lXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNyZWF0aW9uLXRpbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbWV0YVwiLFxuICAgICAgICAgICAgICAgIGhlYWRlckNvbGxlY3Rpb25QcmVmaXg6IFwieC1tcy1tZXRhLVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1tZXRhXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRpY3Rpb25hcnlcIixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHsgdHlwZTogeyBuYW1lOiBcIlN0cmluZ1wiIH0gfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9iamVjdFJlcGxpY2F0aW9uUG9saWN5SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLW9yLXBvbGljeS1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1vci1wb2xpY3ktaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvYmplY3RSZXBsaWNhdGlvblJ1bGVzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1vclwiLFxuICAgICAgICAgICAgICAgIGhlYWRlckNvbGxlY3Rpb25QcmVmaXg6IFwieC1tcy1vci1cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtb3JcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGljdGlvbmFyeVwiLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogeyB0eXBlOiB7IG5hbWU6IFwiU3RyaW5nXCIgfSB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudExlbmd0aDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtbGVuZ3RoXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LWxlbmd0aFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnRUeXBlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC10eXBlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LXR5cGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50UmFuZ2U6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LXJhbmdlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LXJhbmdlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50TUQ1OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudEVuY29kaW5nOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC1lbmNvZGluZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC1lbmNvZGluZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNhY2hlQ29udHJvbDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNhY2hlLWNvbnRyb2xcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNhY2hlLWNvbnRyb2xcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50RGlzcG9zaXRpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LWRpc3Bvc2l0aW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LWRpc3Bvc2l0aW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudExhbmd1YWdlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC1sYW5ndWFnZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC1sYW5ndWFnZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JTZXF1ZW5jZU51bWJlcjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1zZXF1ZW5jZS1udW1iZXJcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1zZXF1ZW5jZS1udW1iZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBibG9iVHlwZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi10eXBlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2ItdHlwZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcIkJsb2NrQmxvYlwiLCBcIlBhZ2VCbG9iXCIsIFwiQXBwZW5kQmxvYlwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvcHlDb21wbGV0ZWRPbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1jb21wbGV0aW9uLXRpbWVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29weS1jb21wbGV0aW9uLXRpbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3B5U3RhdHVzRGVzY3JpcHRpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvcHktc3RhdHVzLWRlc2NyaXB0aW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvcHktc3RhdHVzLWRlc2NyaXB0aW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29weUlkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvcHktaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3B5UHJvZ3Jlc3M6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvcHktcHJvZ3Jlc3NcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29weS1wcm9ncmVzc1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvcHlTb3VyY2U6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvcHktc291cmNlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvcHktc291cmNlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29weVN0YXR1czoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1zdGF0dXNcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29weS1zdGF0dXNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJwZW5kaW5nXCIsIFwic3VjY2Vzc1wiLCBcImFib3J0ZWRcIiwgXCJmYWlsZWRcIl0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZWFzZUR1cmF0aW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWFzZS1kdXJhdGlvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1sZWFzZS1kdXJhdGlvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcImluZmluaXRlXCIsIFwiZml4ZWRcIl0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZWFzZVN0YXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWFzZS1zdGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1sZWFzZS1zdGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYXZhaWxhYmxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImxlYXNlZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJleHBpcmVkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImJyZWFraW5nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImJyb2tlblwiLFxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVhc2VTdGF0dXM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxlYXNlLXN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1sZWFzZS1zdGF0dXNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJsb2NrZWRcIiwgXCJ1bmxvY2tlZFwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb25JZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvbi1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uLWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNDdXJyZW50VmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtaXMtY3VycmVudC12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWlzLWN1cnJlbnQtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhY2NlcHRSYW5nZXM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJhY2NlcHQtcmFuZ2VzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJhY2NlcHQtcmFuZ2VzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBibG9iQ29tbWl0dGVkQmxvY2tDb3VudDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1jb21taXR0ZWQtYmxvY2stY291bnRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1jb21taXR0ZWQtYmxvY2stY291bnRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc1NlcnZlckVuY3J5cHRlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25LZXlTaGEyNTY6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uU2NvcGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JDb250ZW50TUQ1OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLWNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2ItY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0YWdDb3VudDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdGFnLWNvdW50XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXRhZy1jb3VudFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzU2VhbGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLXNlYWxlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLXNlYWxlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0QWNjZXNzZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxhc3QtYWNjZXNzLXRpbWVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGFzdC1hY2Nlc3MtdGltZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGltbXV0YWJpbGl0eVBvbGljeUV4cGlyZXNPbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtaW1tdXRhYmlsaXR5LXBvbGljeS11bnRpbC1kYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWltbXV0YWJpbGl0eS1wb2xpY3ktdW50aWwtZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGltbXV0YWJpbGl0eVBvbGljeU1vZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWltbXV0YWJpbGl0eS1wb2xpY3ktbW9kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1pbW11dGFiaWxpdHktcG9saWN5LW1vZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJNdXRhYmxlXCIsIFwiVW5sb2NrZWRcIiwgXCJMb2NrZWRcIl0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZWdhbEhvbGQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxlZ2FsLWhvbGRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGVnYWwtaG9sZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnRDcmM2NDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29udGVudC1jcmM2NFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb250ZW50LWNyYzY0XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYkRvd25sb2FkRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX2Rvd25sb2FkRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JEb3dubG9hZEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JHZXRQcm9wZXJ0aWVzSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX2dldFByb3BlcnRpZXNIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYkdldFByb3BlcnRpZXNIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNyZWF0ZWRPbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY3JlYXRpb24tdGltZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jcmVhdGlvbi10aW1lXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLW1ldGFcIixcbiAgICAgICAgICAgICAgICBoZWFkZXJDb2xsZWN0aW9uUHJlZml4OiBcIngtbXMtbWV0YS1cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtbWV0YVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEaWN0aW9uYXJ5XCIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB7IHR5cGU6IHsgbmFtZTogXCJTdHJpbmdcIiB9IH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvYmplY3RSZXBsaWNhdGlvblBvbGljeUlkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1vci1wb2xpY3ktaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtb3ItcG9saWN5LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb2JqZWN0UmVwbGljYXRpb25SdWxlczoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtb3JcIixcbiAgICAgICAgICAgICAgICBoZWFkZXJDb2xsZWN0aW9uUHJlZml4OiBcIngtbXMtb3ItXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLW9yXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRpY3Rpb25hcnlcIixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHsgdHlwZTogeyBuYW1lOiBcIlN0cmluZ1wiIH0gfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JUeXBlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLXR5cGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi10eXBlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wiQmxvY2tCbG9iXCIsIFwiUGFnZUJsb2JcIiwgXCJBcHBlbmRCbG9iXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29weUNvbXBsZXRlZE9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LWNvbXBsZXRpb24tdGltZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LWNvbXBsZXRpb24tdGltZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvcHlTdGF0dXNEZXNjcmlwdGlvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1zdGF0dXMtZGVzY3JpcHRpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29weS1zdGF0dXMtZGVzY3JpcHRpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3B5SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvcHktaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29weS1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvcHlQcm9ncmVzczoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1wcm9ncmVzc1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LXByb2dyZXNzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29weVNvdXJjZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1zb3VyY2VcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29weS1zb3VyY2VcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3B5U3RhdHVzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LXN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LXN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcInBlbmRpbmdcIiwgXCJzdWNjZXNzXCIsIFwiYWJvcnRlZFwiLCBcImZhaWxlZFwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzSW5jcmVtZW50YWxDb3B5OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1pbmNyZW1lbnRhbC1jb3B5XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWluY3JlbWVudGFsLWNvcHlcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVzdGluYXRpb25TbmFwc2hvdDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1kZXN0aW5hdGlvbi1zbmFwc2hvdFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LWRlc3RpbmF0aW9uLXNuYXBzaG90XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVhc2VEdXJhdGlvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVhc2UtZHVyYXRpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGVhc2UtZHVyYXRpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJpbmZpbml0ZVwiLCBcImZpeGVkXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVhc2VTdGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVhc2Utc3RhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGVhc2Utc3RhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICBcImF2YWlsYWJsZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJsZWFzZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZXhwaXJlZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJicmVha2luZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJicm9rZW5cIixcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlYXNlU3RhdHVzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWFzZS1zdGF0dXNcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGVhc2Utc3RhdHVzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wibG9ja2VkXCIsIFwidW5sb2NrZWRcIl0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50TGVuZ3RoOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC1sZW5ndGhcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtbGVuZ3RoXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudFR5cGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LXR5cGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtdHlwZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudE1ENToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnRFbmNvZGluZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtZW5jb2RpbmdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtZW5jb2RpbmdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50RGlzcG9zaXRpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LWRpc3Bvc2l0aW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LWRpc3Bvc2l0aW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudExhbmd1YWdlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC1sYW5ndWFnZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC1sYW5ndWFnZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNhY2hlQ29udHJvbDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNhY2hlLWNvbnRyb2xcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNhY2hlLWNvbnRyb2xcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBibG9iU2VxdWVuY2VOdW1iZXI6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2Itc2VxdWVuY2UtbnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2Itc2VxdWVuY2UtbnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhY2NlcHRSYW5nZXM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJhY2NlcHQtcmFuZ2VzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJhY2NlcHQtcmFuZ2VzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmxvYkNvbW1pdHRlZEJsb2NrQ291bnQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2ItY29tbWl0dGVkLWJsb2NrLWNvdW50XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2ItY29tbWl0dGVkLWJsb2NrLWNvdW50XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNTZXJ2ZXJFbmNyeXB0ZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uS2V5U2hhMjU2OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1rZXktc2hhMjU2XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhY2Nlc3NUaWVyOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1hY2Nlc3MtdGllclwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1hY2Nlc3MtdGllclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFjY2Vzc1RpZXJJbmZlcnJlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYWNjZXNzLXRpZXItaW5mZXJyZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYWNjZXNzLXRpZXItaW5mZXJyZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYXJjaGl2ZVN0YXR1czoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYXJjaGl2ZS1zdGF0dXNcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYXJjaGl2ZS1zdGF0dXNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhY2Nlc3NUaWVyQ2hhbmdlZE9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1hY2Nlc3MtdGllci1jaGFuZ2UtdGltZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1hY2Nlc3MtdGllci1jaGFuZ2UtdGltZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb25JZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvbi1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uLWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNDdXJyZW50VmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtaXMtY3VycmVudC12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWlzLWN1cnJlbnQtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0YWdDb3VudDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdGFnLWNvdW50XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXRhZy1jb3VudFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGV4cGlyZXNPbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXhwaXJ5LXRpbWVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXhwaXJ5LXRpbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc1NlYWxlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1zZWFsZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1zZWFsZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVoeWRyYXRlUHJpb3JpdHk6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlaHlkcmF0ZS1wcmlvcml0eVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZWh5ZHJhdGUtcHJpb3JpdHlcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJIaWdoXCIsIFwiU3RhbmRhcmRcIl0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0QWNjZXNzZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxhc3QtYWNjZXNzLXRpbWVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGFzdC1hY2Nlc3MtdGltZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGltbXV0YWJpbGl0eVBvbGljeUV4cGlyZXNPbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtaW1tdXRhYmlsaXR5LXBvbGljeS11bnRpbC1kYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWltbXV0YWJpbGl0eS1wb2xpY3ktdW50aWwtZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGltbXV0YWJpbGl0eVBvbGljeU1vZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWltbXV0YWJpbGl0eS1wb2xpY3ktbW9kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1pbW11dGFiaWxpdHktcG9saWN5LW1vZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJNdXRhYmxlXCIsIFwiVW5sb2NrZWRcIiwgXCJMb2NrZWRcIl0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZWdhbEhvbGQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxlZ2FsLWhvbGRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGVnYWwtaG9sZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JHZXRQcm9wZXJ0aWVzRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX2dldFByb3BlcnRpZXNFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYkdldFByb3BlcnRpZXNFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iRGVsZXRlSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX2RlbGV0ZUhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iRGVsZXRlSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iRGVsZXRlRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX2RlbGV0ZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iRGVsZXRlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlVuZGVsZXRlSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX3VuZGVsZXRlSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JVbmRlbGV0ZUhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlVuZGVsZXRlRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX3VuZGVsZXRlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JVbmRlbGV0ZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JTZXRFeHBpcnlIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2Jfc2V0RXhwaXJ5SGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JTZXRFeHBpcnlIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iU2V0RXhwaXJ5RXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX3NldEV4cGlyeUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iU2V0RXhwaXJ5RXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlNldEh0dHBIZWFkZXJzSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX3NldEh0dHBIZWFkZXJzSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JTZXRIdHRwSGVhZGVyc0hlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBibG9iU2VxdWVuY2VOdW1iZXI6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2Itc2VxdWVuY2UtbnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2Itc2VxdWVuY2UtbnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JTZXRIdHRwSGVhZGVyc0V4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9zZXRIdHRwSGVhZGVyc0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iU2V0SHR0cEhlYWRlcnNFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iU2V0SW1tdXRhYmlsaXR5UG9saWN5SGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX3NldEltbXV0YWJpbGl0eVBvbGljeUhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iU2V0SW1tdXRhYmlsaXR5UG9saWN5SGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5RXhwaXJ5OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1pbW11dGFiaWxpdHktcG9saWN5LXVudGlsLWRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtaW1tdXRhYmlsaXR5LXBvbGljeS11bnRpbC1kYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5TW9kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtaW1tdXRhYmlsaXR5LXBvbGljeS1tb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWltbXV0YWJpbGl0eS1wb2xpY3ktbW9kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcIk11dGFibGVcIiwgXCJVbmxvY2tlZFwiLCBcIkxvY2tlZFwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JTZXRJbW11dGFiaWxpdHlQb2xpY3lFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2Jfc2V0SW1tdXRhYmlsaXR5UG9saWN5RXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JTZXRJbW11dGFiaWxpdHlQb2xpY3lFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iRGVsZXRlSW1tdXRhYmlsaXR5UG9saWN5SGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX2RlbGV0ZUltbXV0YWJpbGl0eVBvbGljeUhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iRGVsZXRlSW1tdXRhYmlsaXR5UG9saWN5SGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYkRlbGV0ZUltbXV0YWJpbGl0eVBvbGljeUV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9kZWxldGVJbW11dGFiaWxpdHlQb2xpY3lFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYkRlbGV0ZUltbXV0YWJpbGl0eVBvbGljeUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JTZXRMZWdhbEhvbGRIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2Jfc2V0TGVnYWxIb2xkSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JTZXRMZWdhbEhvbGRIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZWdhbEhvbGQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxlZ2FsLWhvbGRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGVnYWwtaG9sZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iU2V0TGVnYWxIb2xkRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX3NldExlZ2FsSG9sZEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iU2V0TGVnYWxIb2xkRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlNldE1ldGFkYXRhSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX3NldE1ldGFkYXRhSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JTZXRNZXRhZGF0YUhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uSWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb24taWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvbi1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNTZXJ2ZXJFbmNyeXB0ZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3Qtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1Njoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1rZXktc2hhMjU2XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25TY29wZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iU2V0TWV0YWRhdGFFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2Jfc2V0TWV0YWRhdGFFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYlNldE1ldGFkYXRhRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYkFjcXVpcmVMZWFzZUhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9hY3F1aXJlTGVhc2VIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYkFjcXVpcmVMZWFzZUhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZWFzZUlkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWFzZS1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1sZWFzZS1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYkFjcXVpcmVMZWFzZUV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9hY3F1aXJlTGVhc2VFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYkFjcXVpcmVMZWFzZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JSZWxlYXNlTGVhc2VIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JfcmVsZWFzZUxlYXNlSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JSZWxlYXNlTGVhc2VIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iUmVsZWFzZUxlYXNlRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX3JlbGVhc2VMZWFzZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iUmVsZWFzZUxlYXNlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlJlbmV3TGVhc2VIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JfcmVuZXdMZWFzZUhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iUmVuZXdMZWFzZUhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZWFzZUlkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWFzZS1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1sZWFzZS1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlJlbmV3TGVhc2VFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JfcmVuZXdMZWFzZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iUmVuZXdMZWFzZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JDaGFuZ2VMZWFzZUhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9jaGFuZ2VMZWFzZUhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iQ2hhbmdlTGVhc2VIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVhc2VJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVhc2UtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGVhc2UtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JDaGFuZ2VMZWFzZUV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9jaGFuZ2VMZWFzZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iQ2hhbmdlTGVhc2VFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iQnJlYWtMZWFzZUhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9icmVha0xlYXNlSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JCcmVha0xlYXNlSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlYXNlVGltZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVhc2UtdGltZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1sZWFzZS10aW1lXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iQnJlYWtMZWFzZUV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9icmVha0xlYXNlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JCcmVha0xlYXNlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYkNyZWF0ZVNuYXBzaG90SGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX2NyZWF0ZVNuYXBzaG90SGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JDcmVhdGVTbmFwc2hvdEhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBzbmFwc2hvdDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtc25hcHNob3RcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtc25hcHNob3RcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uSWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb24taWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvbi1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNTZXJ2ZXJFbmNyeXB0ZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3Qtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iQ3JlYXRlU25hcHNob3RFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JfY3JlYXRlU25hcHNob3RFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYkNyZWF0ZVNuYXBzaG90RXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlN0YXJ0Q29weUZyb21VUkxIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2Jfc3RhcnRDb3B5RnJvbVVSTEhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iU3RhcnRDb3B5RnJvbVVSTEhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uSWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb24taWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvbi1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29weUlkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvcHktaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3B5U3RhdHVzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LXN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LXN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcInBlbmRpbmdcIiwgXCJzdWNjZXNzXCIsIFwiYWJvcnRlZFwiLCBcImZhaWxlZFwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlN0YXJ0Q29weUZyb21VUkxFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2Jfc3RhcnRDb3B5RnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iU3RhcnRDb3B5RnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JDb3B5RnJvbVVSTEhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9jb3B5RnJvbVVSTEhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iQ29weUZyb21VUkxIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbklkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uLWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb24taWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvcHlJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29weVN0YXR1czoge1xuICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogXCJzdWNjZXNzXCIsXG4gICAgICAgICAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvcHktc3RhdHVzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudE1ENToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHhNc0NvbnRlbnRDcmM2NDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29udGVudC1jcmM2NFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb250ZW50LWNyYzY0XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JDb3B5RnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9jb3B5RnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iQ29weUZyb21VUkxFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iQWJvcnRDb3B5RnJvbVVSTEhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9hYm9ydENvcHlGcm9tVVJMSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JBYm9ydENvcHlGcm9tVVJMSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iQWJvcnRDb3B5RnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9hYm9ydENvcHlGcm9tVVJMRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JBYm9ydENvcHlGcm9tVVJMRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlNldFRpZXJIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2Jfc2V0VGllckhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iU2V0VGllckhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JTZXRUaWVyRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX3NldFRpZXJFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYlNldFRpZXJFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iR2V0QWNjb3VudEluZm9IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JfZ2V0QWNjb3VudEluZm9IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYkdldEFjY291bnRJbmZvSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2t1TmFtZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtc2t1LW5hbWVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtc2t1LW5hbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlN0YW5kYXJkX0xSU1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJTdGFuZGFyZF9HUlNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiU3RhbmRhcmRfUkFHUlNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiU3RhbmRhcmRfWlJTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlByZW1pdW1fTFJTXCIsXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhY2NvdW50S2luZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYWNjb3VudC1raW5kXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWFjY291bnQta2luZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiU3RvcmFnZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJCbG9iU3RvcmFnZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJTdG9yYWdlVjJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiRmlsZVN0b3JhZ2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiQmxvY2tCbG9iU3RvcmFnZVwiLFxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNIaWVyYXJjaGljYWxOYW1lc3BhY2VFbmFibGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1pcy1obnMtZW5hYmxlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1pcy1obnMtZW5hYmxlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iR2V0QWNjb3VudEluZm9FeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JfZ2V0QWNjb3VudEluZm9FeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYkdldEFjY291bnRJbmZvRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlF1ZXJ5SGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX3F1ZXJ5SGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JRdWVyeUhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLW1ldGFcIixcbiAgICAgICAgICAgICAgICBoZWFkZXJDb2xsZWN0aW9uUHJlZml4OiBcIngtbXMtbWV0YS1cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtbWV0YVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEaWN0aW9uYXJ5XCIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB7IHR5cGU6IHsgbmFtZTogXCJTdHJpbmdcIiB9IH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50TGVuZ3RoOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC1sZW5ndGhcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtbGVuZ3RoXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudFR5cGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LXR5cGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtdHlwZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnRSYW5nZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtcmFuZ2VcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtcmFuZ2VcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnRNRDU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50RW5jb2Rpbmc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LWVuY29kaW5nXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LWVuY29kaW5nXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2FjaGVDb250cm9sOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY2FjaGUtY29udHJvbFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY2FjaGUtY29udHJvbFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnREaXNwb3NpdGlvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtZGlzcG9zaXRpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtZGlzcG9zaXRpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50TGFuZ3VhZ2U6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LWxhbmd1YWdlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LWxhbmd1YWdlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmxvYlNlcXVlbmNlTnVtYmVyOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLXNlcXVlbmNlLW51bWJlclwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLXNlcXVlbmNlLW51bWJlclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JUeXBlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLXR5cGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi10eXBlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wiQmxvY2tCbG9iXCIsIFwiUGFnZUJsb2JcIiwgXCJBcHBlbmRCbG9iXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29weUNvbXBsZXRpb25UaW1lOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LWNvbXBsZXRpb24tdGltZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LWNvbXBsZXRpb24tdGltZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvcHlTdGF0dXNEZXNjcmlwdGlvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1zdGF0dXMtZGVzY3JpcHRpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29weS1zdGF0dXMtZGVzY3JpcHRpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3B5SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvcHktaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29weS1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvcHlQcm9ncmVzczoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1wcm9ncmVzc1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LXByb2dyZXNzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29weVNvdXJjZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1zb3VyY2VcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29weS1zb3VyY2VcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3B5U3RhdHVzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LXN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LXN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcInBlbmRpbmdcIiwgXCJzdWNjZXNzXCIsIFwiYWJvcnRlZFwiLCBcImZhaWxlZFwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlYXNlRHVyYXRpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxlYXNlLWR1cmF0aW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWxlYXNlLWR1cmF0aW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wiaW5maW5pdGVcIiwgXCJmaXhlZFwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlYXNlU3RhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxlYXNlLXN0YXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWxlYXNlLXN0YXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJhdmFpbGFibGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibGVhc2VkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImV4cGlyZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYnJlYWtpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYnJva2VuXCIsXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZWFzZVN0YXR1czoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVhc2Utc3RhdHVzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWxlYXNlLXN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcImxvY2tlZFwiLCBcInVubG9ja2VkXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWNjZXB0UmFuZ2VzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiYWNjZXB0LXJhbmdlc1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiYWNjZXB0LXJhbmdlc1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmxvYkNvbW1pdHRlZEJsb2NrQ291bnQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2ItY29tbWl0dGVkLWJsb2NrLWNvdW50XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2ItY29tbWl0dGVkLWJsb2NrLWNvdW50XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNTZXJ2ZXJFbmNyeXB0ZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uS2V5U2hhMjU2OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1rZXktc2hhMjU2XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBibG9iQ29udGVudE1ENToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1jb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLWNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50Q3JjNjQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvbnRlbnQtY3JjNjRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29udGVudC1jcmM2NFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JRdWVyeUV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9xdWVyeUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iUXVlcnlFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iR2V0VGFnc0hlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9nZXRUYWdzSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JHZXRUYWdzSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iR2V0VGFnc0V4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9nZXRUYWdzRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JHZXRUYWdzRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlNldFRhZ3NIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2Jfc2V0VGFnc0hlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iU2V0VGFnc0hlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlNldFRhZ3NFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2Jfc2V0VGFnc0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iU2V0VGFnc0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFBhZ2VCbG9iQ3JlYXRlSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJQYWdlQmxvYl9jcmVhdGVIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiUGFnZUJsb2JDcmVhdGVIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudE1ENToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb25JZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvbi1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uLWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc1NlcnZlckVuY3J5cHRlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3Qtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uS2V5U2hhMjU2OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1rZXktc2hhMjU2XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFBhZ2VCbG9iQ3JlYXRlRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJQYWdlQmxvYl9jcmVhdGVFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiUGFnZUJsb2JDcmVhdGVFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBQYWdlQmxvYlVwbG9hZFBhZ2VzSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJQYWdlQmxvYl91cGxvYWRQYWdlc0hlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJQYWdlQmxvYlVwbG9hZFBhZ2VzSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnRNRDU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB4TXNDb250ZW50Q3JjNjQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvbnRlbnQtY3JjNjRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29udGVudC1jcmM2NFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JTZXF1ZW5jZU51bWJlcjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1zZXF1ZW5jZS1udW1iZXJcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1zZXF1ZW5jZS1udW1iZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzU2VydmVyRW5jcnlwdGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25LZXlTaGEyNTY6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uU2NvcGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgUGFnZUJsb2JVcGxvYWRQYWdlc0V4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiUGFnZUJsb2JfdXBsb2FkUGFnZXNFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiUGFnZUJsb2JVcGxvYWRQYWdlc0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFBhZ2VCbG9iQ2xlYXJQYWdlc0hlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiUGFnZUJsb2JfY2xlYXJQYWdlc0hlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJQYWdlQmxvYkNsZWFyUGFnZXNIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudE1ENToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHhNc0NvbnRlbnRDcmM2NDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29udGVudC1jcmM2NFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb250ZW50LWNyYzY0XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmxvYlNlcXVlbmNlTnVtYmVyOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLXNlcXVlbmNlLW51bWJlclwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLXNlcXVlbmNlLW51bWJlclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBQYWdlQmxvYkNsZWFyUGFnZXNFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlBhZ2VCbG9iX2NsZWFyUGFnZXNFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiUGFnZUJsb2JDbGVhclBhZ2VzRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgUGFnZUJsb2JVcGxvYWRQYWdlc0Zyb21VUkxIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlBhZ2VCbG9iX3VwbG9hZFBhZ2VzRnJvbVVSTEhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJQYWdlQmxvYlVwbG9hZFBhZ2VzRnJvbVVSTEhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50TUQ1OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeE1zQ29udGVudENyYzY0OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb250ZW50LWNyYzY0XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvbnRlbnQtY3JjNjRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBibG9iU2VxdWVuY2VOdW1iZXI6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2Itc2VxdWVuY2UtbnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2Itc2VxdWVuY2UtbnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzU2VydmVyRW5jcnlwdGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25LZXlTaGEyNTY6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uU2NvcGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgUGFnZUJsb2JVcGxvYWRQYWdlc0Zyb21VUkxFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlBhZ2VCbG9iX3VwbG9hZFBhZ2VzRnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJQYWdlQmxvYlVwbG9hZFBhZ2VzRnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFBhZ2VCbG9iR2V0UGFnZVJhbmdlc0hlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiUGFnZUJsb2JfZ2V0UGFnZVJhbmdlc0hlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJQYWdlQmxvYkdldFBhZ2VSYW5nZXNIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmxvYkNvbnRlbnRMZW5ndGg6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2ItY29udGVudC1sZW5ndGhcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1jb250ZW50LWxlbmd0aFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBQYWdlQmxvYkdldFBhZ2VSYW5nZXNFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlBhZ2VCbG9iX2dldFBhZ2VSYW5nZXNFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiUGFnZUJsb2JHZXRQYWdlUmFuZ2VzRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgUGFnZUJsb2JHZXRQYWdlUmFuZ2VzRGlmZkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiUGFnZUJsb2JfZ2V0UGFnZVJhbmdlc0RpZmZIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiUGFnZUJsb2JHZXRQYWdlUmFuZ2VzRGlmZkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBibG9iQ29udGVudExlbmd0aDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1jb250ZW50LWxlbmd0aFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLWNvbnRlbnQtbGVuZ3RoXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFBhZ2VCbG9iR2V0UGFnZVJhbmdlc0RpZmZFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlBhZ2VCbG9iX2dldFBhZ2VSYW5nZXNEaWZmRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlBhZ2VCbG9iR2V0UGFnZVJhbmdlc0RpZmZFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBQYWdlQmxvYlJlc2l6ZUhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiUGFnZUJsb2JfcmVzaXplSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlBhZ2VCbG9iUmVzaXplSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JTZXF1ZW5jZU51bWJlcjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1zZXF1ZW5jZS1udW1iZXJcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1zZXF1ZW5jZS1udW1iZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgUGFnZUJsb2JSZXNpemVFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlBhZ2VCbG9iX3Jlc2l6ZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJQYWdlQmxvYlJlc2l6ZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFBhZ2VCbG9iVXBkYXRlU2VxdWVuY2VOdW1iZXJIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlBhZ2VCbG9iX3VwZGF0ZVNlcXVlbmNlTnVtYmVySGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlBhZ2VCbG9iVXBkYXRlU2VxdWVuY2VOdW1iZXJIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmxvYlNlcXVlbmNlTnVtYmVyOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLXNlcXVlbmNlLW51bWJlclwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLXNlcXVlbmNlLW51bWJlclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBQYWdlQmxvYlVwZGF0ZVNlcXVlbmNlTnVtYmVyRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJQYWdlQmxvYl91cGRhdGVTZXF1ZW5jZU51bWJlckV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJQYWdlQmxvYlVwZGF0ZVNlcXVlbmNlTnVtYmVyRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgUGFnZUJsb2JDb3B5SW5jcmVtZW50YWxIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlBhZ2VCbG9iX2NvcHlJbmNyZW1lbnRhbEhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJQYWdlQmxvYkNvcHlJbmNyZW1lbnRhbEhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvcHlJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29weVN0YXR1czoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1zdGF0dXNcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29weS1zdGF0dXNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJwZW5kaW5nXCIsIFwic3VjY2Vzc1wiLCBcImFib3J0ZWRcIiwgXCJmYWlsZWRcIl0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFBhZ2VCbG9iQ29weUluY3JlbWVudGFsRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJQYWdlQmxvYl9jb3B5SW5jcmVtZW50YWxFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiUGFnZUJsb2JDb3B5SW5jcmVtZW50YWxFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBBcHBlbmRCbG9iQ3JlYXRlSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJBcHBlbmRCbG9iX2NyZWF0ZUhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJBcHBlbmRCbG9iQ3JlYXRlSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnRNRDU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uSWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb24taWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvbi1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNTZXJ2ZXJFbmNyeXB0ZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3Qtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1Njoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1rZXktc2hhMjU2XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25TY29wZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBBcHBlbmRCbG9iQ3JlYXRlRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJBcHBlbmRCbG9iX2NyZWF0ZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJBcHBlbmRCbG9iQ3JlYXRlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQXBwZW5kQmxvYkFwcGVuZEJsb2NrSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJBcHBlbmRCbG9iX2FwcGVuZEJsb2NrSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkFwcGVuZEJsb2JBcHBlbmRCbG9ja0hlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50TUQ1OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeE1zQ29udGVudENyYzY0OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb250ZW50LWNyYzY0XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvbnRlbnQtY3JjNjRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JBcHBlbmRPZmZzZXQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2ItYXBwZW5kLW9mZnNldFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLWFwcGVuZC1vZmZzZXRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBibG9iQ29tbWl0dGVkQmxvY2tDb3VudDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1jb21taXR0ZWQtYmxvY2stY291bnRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1jb21taXR0ZWQtYmxvY2stY291bnRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc1NlcnZlckVuY3J5cHRlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3Qtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uS2V5U2hhMjU2OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1rZXktc2hhMjU2XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEFwcGVuZEJsb2JBcHBlbmRCbG9ja0V4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQXBwZW5kQmxvYl9hcHBlbmRCbG9ja0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJBcHBlbmRCbG9iQXBwZW5kQmxvY2tFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBBcHBlbmRCbG9iQXBwZW5kQmxvY2tGcm9tVXJsSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJBcHBlbmRCbG9iX2FwcGVuZEJsb2NrRnJvbVVybEhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJBcHBlbmRCbG9iQXBwZW5kQmxvY2tGcm9tVXJsSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnRNRDU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB4TXNDb250ZW50Q3JjNjQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvbnRlbnQtY3JjNjRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29udGVudC1jcmM2NFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBibG9iQXBwZW5kT2Zmc2V0OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLWFwcGVuZC1vZmZzZXRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1hcHBlbmQtb2Zmc2V0XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmxvYkNvbW1pdHRlZEJsb2NrQ291bnQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2ItY29tbWl0dGVkLWJsb2NrLWNvdW50XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2ItY29tbWl0dGVkLWJsb2NrLWNvdW50XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1Njoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1rZXktc2hhMjU2XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25TY29wZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNTZXJ2ZXJFbmNyeXB0ZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3Qtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBBcHBlbmRCbG9iQXBwZW5kQmxvY2tGcm9tVXJsRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJBcHBlbmRCbG9iX2FwcGVuZEJsb2NrRnJvbVVybEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJBcHBlbmRCbG9iQXBwZW5kQmxvY2tGcm9tVXJsRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQXBwZW5kQmxvYlNlYWxIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkFwcGVuZEJsb2Jfc2VhbEhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJBcHBlbmRCbG9iU2VhbEhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzU2VhbGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLXNlYWxlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLXNlYWxlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBBcHBlbmRCbG9iU2VhbEV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQXBwZW5kQmxvYl9zZWFsRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkFwcGVuZEJsb2JTZWFsRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvY2tCbG9iVXBsb2FkSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9ja0Jsb2JfdXBsb2FkSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2NrQmxvYlVwbG9hZEhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50TUQ1OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbklkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uLWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb24taWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzU2VydmVyRW5jcnlwdGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25LZXlTaGEyNTY6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uU2NvcGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvY2tCbG9iVXBsb2FkRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9ja0Jsb2JfdXBsb2FkRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2NrQmxvYlVwbG9hZEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2NrQmxvYlB1dEJsb2JGcm9tVXJsSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9ja0Jsb2JfcHV0QmxvYkZyb21VcmxIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvY2tCbG9iUHV0QmxvYkZyb21VcmxIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudE1ENToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb25JZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvbi1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uLWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc1NlcnZlckVuY3J5cHRlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3Qtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uS2V5U2hhMjU2OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1rZXktc2hhMjU2XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2NrQmxvYlB1dEJsb2JGcm9tVXJsRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9ja0Jsb2JfcHV0QmxvYkZyb21VcmxFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvY2tCbG9iUHV0QmxvYkZyb21VcmxFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9ja0Jsb2JTdGFnZUJsb2NrSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9ja0Jsb2Jfc3RhZ2VCbG9ja0hlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9ja0Jsb2JTdGFnZUJsb2NrSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNvbnRlbnRNRDU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHhNc0NvbnRlbnRDcmM2NDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29udGVudC1jcmM2NFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb250ZW50LWNyYzY0XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNTZXJ2ZXJFbmNyeXB0ZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3Qtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1Njoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1rZXktc2hhMjU2XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25TY29wZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9ja0Jsb2JTdGFnZUJsb2NrRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9ja0Jsb2Jfc3RhZ2VCbG9ja0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9ja0Jsb2JTdGFnZUJsb2NrRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvY2tCbG9iU3RhZ2VCbG9ja0Zyb21VUkxIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2NrQmxvYl9zdGFnZUJsb2NrRnJvbVVSTEhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9ja0Jsb2JTdGFnZUJsb2NrRnJvbVVSTEhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBjb250ZW50TUQ1OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeE1zQ29udGVudENyYzY0OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb250ZW50LWNyYzY0XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvbnRlbnQtY3JjNjRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzU2VydmVyRW5jcnlwdGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25LZXlTaGEyNTY6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uU2NvcGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvY2tCbG9iU3RhZ2VCbG9ja0Zyb21VUkxFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2NrQmxvYl9zdGFnZUJsb2NrRnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9ja0Jsb2JTdGFnZUJsb2NrRnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2NrQmxvYkNvbW1pdEJsb2NrTGlzdEhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvY2tCbG9iX2NvbW1pdEJsb2NrTGlzdEhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9ja0Jsb2JDb21taXRCbG9ja0xpc3RIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudE1ENToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHhNc0NvbnRlbnRDcmM2NDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29udGVudC1jcmM2NFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb250ZW50LWNyYzY0XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbklkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uLWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb24taWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzU2VydmVyRW5jcnlwdGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25LZXlTaGEyNTY6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uU2NvcGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvY2tCbG9iQ29tbWl0QmxvY2tMaXN0RXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9ja0Jsb2JfY29tbWl0QmxvY2tMaXN0RXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2NrQmxvYkNvbW1pdEJsb2NrTGlzdEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2NrQmxvYkdldEJsb2NrTGlzdEhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvY2tCbG9iX2dldEJsb2NrTGlzdEhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9ja0Jsb2JHZXRCbG9ja0xpc3RIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudFR5cGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LXR5cGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtdHlwZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JDb250ZW50TGVuZ3RoOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLWNvbnRlbnQtbGVuZ3RoXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2ItY29udGVudC1sZW5ndGhcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvY2tCbG9iR2V0QmxvY2tMaXN0RXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9ja0Jsb2JfZ2V0QmxvY2tMaXN0RXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2NrQmxvYkdldEJsb2NrTGlzdEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcblxudmFyIE1hcHBlcnMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIEFjY2Vzc1BvbGljeTogQWNjZXNzUG9saWN5LFxuICAgIEFwcGVuZEJsb2JBcHBlbmRCbG9ja0V4Y2VwdGlvbkhlYWRlcnM6IEFwcGVuZEJsb2JBcHBlbmRCbG9ja0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQXBwZW5kQmxvYkFwcGVuZEJsb2NrRnJvbVVybEV4Y2VwdGlvbkhlYWRlcnM6IEFwcGVuZEJsb2JBcHBlbmRCbG9ja0Zyb21VcmxFeGNlcHRpb25IZWFkZXJzLFxuICAgIEFwcGVuZEJsb2JBcHBlbmRCbG9ja0Zyb21VcmxIZWFkZXJzOiBBcHBlbmRCbG9iQXBwZW5kQmxvY2tGcm9tVXJsSGVhZGVycyxcbiAgICBBcHBlbmRCbG9iQXBwZW5kQmxvY2tIZWFkZXJzOiBBcHBlbmRCbG9iQXBwZW5kQmxvY2tIZWFkZXJzLFxuICAgIEFwcGVuZEJsb2JDcmVhdGVFeGNlcHRpb25IZWFkZXJzOiBBcHBlbmRCbG9iQ3JlYXRlRXhjZXB0aW9uSGVhZGVycyxcbiAgICBBcHBlbmRCbG9iQ3JlYXRlSGVhZGVyczogQXBwZW5kQmxvYkNyZWF0ZUhlYWRlcnMsXG4gICAgQXBwZW5kQmxvYlNlYWxFeGNlcHRpb25IZWFkZXJzOiBBcHBlbmRCbG9iU2VhbEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQXBwZW5kQmxvYlNlYWxIZWFkZXJzOiBBcHBlbmRCbG9iU2VhbEhlYWRlcnMsXG4gICAgQXJyb3dDb25maWd1cmF0aW9uOiBBcnJvd0NvbmZpZ3VyYXRpb24sXG4gICAgQXJyb3dGaWVsZDogQXJyb3dGaWVsZCxcbiAgICBCbG9iQWJvcnRDb3B5RnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnM6IEJsb2JBYm9ydENvcHlGcm9tVVJMRXhjZXB0aW9uSGVhZGVycyxcbiAgICBCbG9iQWJvcnRDb3B5RnJvbVVSTEhlYWRlcnM6IEJsb2JBYm9ydENvcHlGcm9tVVJMSGVhZGVycyxcbiAgICBCbG9iQWNxdWlyZUxlYXNlRXhjZXB0aW9uSGVhZGVyczogQmxvYkFjcXVpcmVMZWFzZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQmxvYkFjcXVpcmVMZWFzZUhlYWRlcnM6IEJsb2JBY3F1aXJlTGVhc2VIZWFkZXJzLFxuICAgIEJsb2JCcmVha0xlYXNlRXhjZXB0aW9uSGVhZGVyczogQmxvYkJyZWFrTGVhc2VFeGNlcHRpb25IZWFkZXJzLFxuICAgIEJsb2JCcmVha0xlYXNlSGVhZGVyczogQmxvYkJyZWFrTGVhc2VIZWFkZXJzLFxuICAgIEJsb2JDaGFuZ2VMZWFzZUV4Y2VwdGlvbkhlYWRlcnM6IEJsb2JDaGFuZ2VMZWFzZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQmxvYkNoYW5nZUxlYXNlSGVhZGVyczogQmxvYkNoYW5nZUxlYXNlSGVhZGVycyxcbiAgICBCbG9iQ29weUZyb21VUkxFeGNlcHRpb25IZWFkZXJzOiBCbG9iQ29weUZyb21VUkxFeGNlcHRpb25IZWFkZXJzLFxuICAgIEJsb2JDb3B5RnJvbVVSTEhlYWRlcnM6IEJsb2JDb3B5RnJvbVVSTEhlYWRlcnMsXG4gICAgQmxvYkNyZWF0ZVNuYXBzaG90RXhjZXB0aW9uSGVhZGVyczogQmxvYkNyZWF0ZVNuYXBzaG90RXhjZXB0aW9uSGVhZGVycyxcbiAgICBCbG9iQ3JlYXRlU25hcHNob3RIZWFkZXJzOiBCbG9iQ3JlYXRlU25hcHNob3RIZWFkZXJzLFxuICAgIEJsb2JEZWxldGVFeGNlcHRpb25IZWFkZXJzOiBCbG9iRGVsZXRlRXhjZXB0aW9uSGVhZGVycyxcbiAgICBCbG9iRGVsZXRlSGVhZGVyczogQmxvYkRlbGV0ZUhlYWRlcnMsXG4gICAgQmxvYkRlbGV0ZUltbXV0YWJpbGl0eVBvbGljeUV4Y2VwdGlvbkhlYWRlcnM6IEJsb2JEZWxldGVJbW11dGFiaWxpdHlQb2xpY3lFeGNlcHRpb25IZWFkZXJzLFxuICAgIEJsb2JEZWxldGVJbW11dGFiaWxpdHlQb2xpY3lIZWFkZXJzOiBCbG9iRGVsZXRlSW1tdXRhYmlsaXR5UG9saWN5SGVhZGVycyxcbiAgICBCbG9iRG93bmxvYWRFeGNlcHRpb25IZWFkZXJzOiBCbG9iRG93bmxvYWRFeGNlcHRpb25IZWFkZXJzLFxuICAgIEJsb2JEb3dubG9hZEhlYWRlcnM6IEJsb2JEb3dubG9hZEhlYWRlcnMsXG4gICAgQmxvYkZsYXRMaXN0U2VnbWVudDogQmxvYkZsYXRMaXN0U2VnbWVudCxcbiAgICBCbG9iR2V0QWNjb3VudEluZm9FeGNlcHRpb25IZWFkZXJzOiBCbG9iR2V0QWNjb3VudEluZm9FeGNlcHRpb25IZWFkZXJzLFxuICAgIEJsb2JHZXRBY2NvdW50SW5mb0hlYWRlcnM6IEJsb2JHZXRBY2NvdW50SW5mb0hlYWRlcnMsXG4gICAgQmxvYkdldFByb3BlcnRpZXNFeGNlcHRpb25IZWFkZXJzOiBCbG9iR2V0UHJvcGVydGllc0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQmxvYkdldFByb3BlcnRpZXNIZWFkZXJzOiBCbG9iR2V0UHJvcGVydGllc0hlYWRlcnMsXG4gICAgQmxvYkdldFRhZ3NFeGNlcHRpb25IZWFkZXJzOiBCbG9iR2V0VGFnc0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQmxvYkdldFRhZ3NIZWFkZXJzOiBCbG9iR2V0VGFnc0hlYWRlcnMsXG4gICAgQmxvYkhpZXJhcmNoeUxpc3RTZWdtZW50OiBCbG9iSGllcmFyY2h5TGlzdFNlZ21lbnQsXG4gICAgQmxvYkl0ZW1JbnRlcm5hbDogQmxvYkl0ZW1JbnRlcm5hbCxcbiAgICBCbG9iTmFtZTogQmxvYk5hbWUsXG4gICAgQmxvYlByZWZpeDogQmxvYlByZWZpeCxcbiAgICBCbG9iUHJvcGVydGllc0ludGVybmFsOiBCbG9iUHJvcGVydGllc0ludGVybmFsLFxuICAgIEJsb2JRdWVyeUV4Y2VwdGlvbkhlYWRlcnM6IEJsb2JRdWVyeUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQmxvYlF1ZXJ5SGVhZGVyczogQmxvYlF1ZXJ5SGVhZGVycyxcbiAgICBCbG9iUmVsZWFzZUxlYXNlRXhjZXB0aW9uSGVhZGVyczogQmxvYlJlbGVhc2VMZWFzZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQmxvYlJlbGVhc2VMZWFzZUhlYWRlcnM6IEJsb2JSZWxlYXNlTGVhc2VIZWFkZXJzLFxuICAgIEJsb2JSZW5ld0xlYXNlRXhjZXB0aW9uSGVhZGVyczogQmxvYlJlbmV3TGVhc2VFeGNlcHRpb25IZWFkZXJzLFxuICAgIEJsb2JSZW5ld0xlYXNlSGVhZGVyczogQmxvYlJlbmV3TGVhc2VIZWFkZXJzLFxuICAgIEJsb2JTZXJ2aWNlUHJvcGVydGllczogQmxvYlNlcnZpY2VQcm9wZXJ0aWVzLFxuICAgIEJsb2JTZXJ2aWNlU3RhdGlzdGljczogQmxvYlNlcnZpY2VTdGF0aXN0aWNzLFxuICAgIEJsb2JTZXRFeHBpcnlFeGNlcHRpb25IZWFkZXJzOiBCbG9iU2V0RXhwaXJ5RXhjZXB0aW9uSGVhZGVycyxcbiAgICBCbG9iU2V0RXhwaXJ5SGVhZGVyczogQmxvYlNldEV4cGlyeUhlYWRlcnMsXG4gICAgQmxvYlNldEh0dHBIZWFkZXJzRXhjZXB0aW9uSGVhZGVyczogQmxvYlNldEh0dHBIZWFkZXJzRXhjZXB0aW9uSGVhZGVycyxcbiAgICBCbG9iU2V0SHR0cEhlYWRlcnNIZWFkZXJzOiBCbG9iU2V0SHR0cEhlYWRlcnNIZWFkZXJzLFxuICAgIEJsb2JTZXRJbW11dGFiaWxpdHlQb2xpY3lFeGNlcHRpb25IZWFkZXJzOiBCbG9iU2V0SW1tdXRhYmlsaXR5UG9saWN5RXhjZXB0aW9uSGVhZGVycyxcbiAgICBCbG9iU2V0SW1tdXRhYmlsaXR5UG9saWN5SGVhZGVyczogQmxvYlNldEltbXV0YWJpbGl0eVBvbGljeUhlYWRlcnMsXG4gICAgQmxvYlNldExlZ2FsSG9sZEV4Y2VwdGlvbkhlYWRlcnM6IEJsb2JTZXRMZWdhbEhvbGRFeGNlcHRpb25IZWFkZXJzLFxuICAgIEJsb2JTZXRMZWdhbEhvbGRIZWFkZXJzOiBCbG9iU2V0TGVnYWxIb2xkSGVhZGVycyxcbiAgICBCbG9iU2V0TWV0YWRhdGFFeGNlcHRpb25IZWFkZXJzOiBCbG9iU2V0TWV0YWRhdGFFeGNlcHRpb25IZWFkZXJzLFxuICAgIEJsb2JTZXRNZXRhZGF0YUhlYWRlcnM6IEJsb2JTZXRNZXRhZGF0YUhlYWRlcnMsXG4gICAgQmxvYlNldFRhZ3NFeGNlcHRpb25IZWFkZXJzOiBCbG9iU2V0VGFnc0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQmxvYlNldFRhZ3NIZWFkZXJzOiBCbG9iU2V0VGFnc0hlYWRlcnMsXG4gICAgQmxvYlNldFRpZXJFeGNlcHRpb25IZWFkZXJzOiBCbG9iU2V0VGllckV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQmxvYlNldFRpZXJIZWFkZXJzOiBCbG9iU2V0VGllckhlYWRlcnMsXG4gICAgQmxvYlN0YXJ0Q29weUZyb21VUkxFeGNlcHRpb25IZWFkZXJzOiBCbG9iU3RhcnRDb3B5RnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQmxvYlN0YXJ0Q29weUZyb21VUkxIZWFkZXJzOiBCbG9iU3RhcnRDb3B5RnJvbVVSTEhlYWRlcnMsXG4gICAgQmxvYlRhZzogQmxvYlRhZyxcbiAgICBCbG9iVGFnczogQmxvYlRhZ3MsXG4gICAgQmxvYlVuZGVsZXRlRXhjZXB0aW9uSGVhZGVyczogQmxvYlVuZGVsZXRlRXhjZXB0aW9uSGVhZGVycyxcbiAgICBCbG9iVW5kZWxldGVIZWFkZXJzOiBCbG9iVW5kZWxldGVIZWFkZXJzLFxuICAgIEJsb2NrOiBCbG9jayxcbiAgICBCbG9ja0Jsb2JDb21taXRCbG9ja0xpc3RFeGNlcHRpb25IZWFkZXJzOiBCbG9ja0Jsb2JDb21taXRCbG9ja0xpc3RFeGNlcHRpb25IZWFkZXJzLFxuICAgIEJsb2NrQmxvYkNvbW1pdEJsb2NrTGlzdEhlYWRlcnM6IEJsb2NrQmxvYkNvbW1pdEJsb2NrTGlzdEhlYWRlcnMsXG4gICAgQmxvY2tCbG9iR2V0QmxvY2tMaXN0RXhjZXB0aW9uSGVhZGVyczogQmxvY2tCbG9iR2V0QmxvY2tMaXN0RXhjZXB0aW9uSGVhZGVycyxcbiAgICBCbG9ja0Jsb2JHZXRCbG9ja0xpc3RIZWFkZXJzOiBCbG9ja0Jsb2JHZXRCbG9ja0xpc3RIZWFkZXJzLFxuICAgIEJsb2NrQmxvYlB1dEJsb2JGcm9tVXJsRXhjZXB0aW9uSGVhZGVyczogQmxvY2tCbG9iUHV0QmxvYkZyb21VcmxFeGNlcHRpb25IZWFkZXJzLFxuICAgIEJsb2NrQmxvYlB1dEJsb2JGcm9tVXJsSGVhZGVyczogQmxvY2tCbG9iUHV0QmxvYkZyb21VcmxIZWFkZXJzLFxuICAgIEJsb2NrQmxvYlN0YWdlQmxvY2tFeGNlcHRpb25IZWFkZXJzOiBCbG9ja0Jsb2JTdGFnZUJsb2NrRXhjZXB0aW9uSGVhZGVycyxcbiAgICBCbG9ja0Jsb2JTdGFnZUJsb2NrRnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnM6IEJsb2NrQmxvYlN0YWdlQmxvY2tGcm9tVVJMRXhjZXB0aW9uSGVhZGVycyxcbiAgICBCbG9ja0Jsb2JTdGFnZUJsb2NrRnJvbVVSTEhlYWRlcnM6IEJsb2NrQmxvYlN0YWdlQmxvY2tGcm9tVVJMSGVhZGVycyxcbiAgICBCbG9ja0Jsb2JTdGFnZUJsb2NrSGVhZGVyczogQmxvY2tCbG9iU3RhZ2VCbG9ja0hlYWRlcnMsXG4gICAgQmxvY2tCbG9iVXBsb2FkRXhjZXB0aW9uSGVhZGVyczogQmxvY2tCbG9iVXBsb2FkRXhjZXB0aW9uSGVhZGVycyxcbiAgICBCbG9ja0Jsb2JVcGxvYWRIZWFkZXJzOiBCbG9ja0Jsb2JVcGxvYWRIZWFkZXJzLFxuICAgIEJsb2NrTGlzdDogQmxvY2tMaXN0LFxuICAgIEJsb2NrTG9va3VwTGlzdDogQmxvY2tMb29rdXBMaXN0LFxuICAgIENsZWFyUmFuZ2U6IENsZWFyUmFuZ2UsXG4gICAgQ29udGFpbmVyQWNxdWlyZUxlYXNlRXhjZXB0aW9uSGVhZGVyczogQ29udGFpbmVyQWNxdWlyZUxlYXNlRXhjZXB0aW9uSGVhZGVycyxcbiAgICBDb250YWluZXJBY3F1aXJlTGVhc2VIZWFkZXJzOiBDb250YWluZXJBY3F1aXJlTGVhc2VIZWFkZXJzLFxuICAgIENvbnRhaW5lckJyZWFrTGVhc2VFeGNlcHRpb25IZWFkZXJzOiBDb250YWluZXJCcmVha0xlYXNlRXhjZXB0aW9uSGVhZGVycyxcbiAgICBDb250YWluZXJCcmVha0xlYXNlSGVhZGVyczogQ29udGFpbmVyQnJlYWtMZWFzZUhlYWRlcnMsXG4gICAgQ29udGFpbmVyQ2hhbmdlTGVhc2VFeGNlcHRpb25IZWFkZXJzOiBDb250YWluZXJDaGFuZ2VMZWFzZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQ29udGFpbmVyQ2hhbmdlTGVhc2VIZWFkZXJzOiBDb250YWluZXJDaGFuZ2VMZWFzZUhlYWRlcnMsXG4gICAgQ29udGFpbmVyQ3JlYXRlRXhjZXB0aW9uSGVhZGVyczogQ29udGFpbmVyQ3JlYXRlRXhjZXB0aW9uSGVhZGVycyxcbiAgICBDb250YWluZXJDcmVhdGVIZWFkZXJzOiBDb250YWluZXJDcmVhdGVIZWFkZXJzLFxuICAgIENvbnRhaW5lckRlbGV0ZUV4Y2VwdGlvbkhlYWRlcnM6IENvbnRhaW5lckRlbGV0ZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQ29udGFpbmVyRGVsZXRlSGVhZGVyczogQ29udGFpbmVyRGVsZXRlSGVhZGVycyxcbiAgICBDb250YWluZXJGaWx0ZXJCbG9ic0V4Y2VwdGlvbkhlYWRlcnM6IENvbnRhaW5lckZpbHRlckJsb2JzRXhjZXB0aW9uSGVhZGVycyxcbiAgICBDb250YWluZXJGaWx0ZXJCbG9ic0hlYWRlcnM6IENvbnRhaW5lckZpbHRlckJsb2JzSGVhZGVycyxcbiAgICBDb250YWluZXJHZXRBY2Nlc3NQb2xpY3lFeGNlcHRpb25IZWFkZXJzOiBDb250YWluZXJHZXRBY2Nlc3NQb2xpY3lFeGNlcHRpb25IZWFkZXJzLFxuICAgIENvbnRhaW5lckdldEFjY2Vzc1BvbGljeUhlYWRlcnM6IENvbnRhaW5lckdldEFjY2Vzc1BvbGljeUhlYWRlcnMsXG4gICAgQ29udGFpbmVyR2V0QWNjb3VudEluZm9FeGNlcHRpb25IZWFkZXJzOiBDb250YWluZXJHZXRBY2NvdW50SW5mb0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQ29udGFpbmVyR2V0QWNjb3VudEluZm9IZWFkZXJzOiBDb250YWluZXJHZXRBY2NvdW50SW5mb0hlYWRlcnMsXG4gICAgQ29udGFpbmVyR2V0UHJvcGVydGllc0V4Y2VwdGlvbkhlYWRlcnM6IENvbnRhaW5lckdldFByb3BlcnRpZXNFeGNlcHRpb25IZWFkZXJzLFxuICAgIENvbnRhaW5lckdldFByb3BlcnRpZXNIZWFkZXJzOiBDb250YWluZXJHZXRQcm9wZXJ0aWVzSGVhZGVycyxcbiAgICBDb250YWluZXJJdGVtOiBDb250YWluZXJJdGVtLFxuICAgIENvbnRhaW5lckxpc3RCbG9iRmxhdFNlZ21lbnRFeGNlcHRpb25IZWFkZXJzOiBDb250YWluZXJMaXN0QmxvYkZsYXRTZWdtZW50RXhjZXB0aW9uSGVhZGVycyxcbiAgICBDb250YWluZXJMaXN0QmxvYkZsYXRTZWdtZW50SGVhZGVyczogQ29udGFpbmVyTGlzdEJsb2JGbGF0U2VnbWVudEhlYWRlcnMsXG4gICAgQ29udGFpbmVyTGlzdEJsb2JIaWVyYXJjaHlTZWdtZW50RXhjZXB0aW9uSGVhZGVyczogQ29udGFpbmVyTGlzdEJsb2JIaWVyYXJjaHlTZWdtZW50RXhjZXB0aW9uSGVhZGVycyxcbiAgICBDb250YWluZXJMaXN0QmxvYkhpZXJhcmNoeVNlZ21lbnRIZWFkZXJzOiBDb250YWluZXJMaXN0QmxvYkhpZXJhcmNoeVNlZ21lbnRIZWFkZXJzLFxuICAgIENvbnRhaW5lclByb3BlcnRpZXM6IENvbnRhaW5lclByb3BlcnRpZXMsXG4gICAgQ29udGFpbmVyUmVsZWFzZUxlYXNlRXhjZXB0aW9uSGVhZGVyczogQ29udGFpbmVyUmVsZWFzZUxlYXNlRXhjZXB0aW9uSGVhZGVycyxcbiAgICBDb250YWluZXJSZWxlYXNlTGVhc2VIZWFkZXJzOiBDb250YWluZXJSZWxlYXNlTGVhc2VIZWFkZXJzLFxuICAgIENvbnRhaW5lclJlbmFtZUV4Y2VwdGlvbkhlYWRlcnM6IENvbnRhaW5lclJlbmFtZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQ29udGFpbmVyUmVuYW1lSGVhZGVyczogQ29udGFpbmVyUmVuYW1lSGVhZGVycyxcbiAgICBDb250YWluZXJSZW5ld0xlYXNlRXhjZXB0aW9uSGVhZGVyczogQ29udGFpbmVyUmVuZXdMZWFzZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQ29udGFpbmVyUmVuZXdMZWFzZUhlYWRlcnM6IENvbnRhaW5lclJlbmV3TGVhc2VIZWFkZXJzLFxuICAgIENvbnRhaW5lclJlc3RvcmVFeGNlcHRpb25IZWFkZXJzOiBDb250YWluZXJSZXN0b3JlRXhjZXB0aW9uSGVhZGVycyxcbiAgICBDb250YWluZXJSZXN0b3JlSGVhZGVyczogQ29udGFpbmVyUmVzdG9yZUhlYWRlcnMsXG4gICAgQ29udGFpbmVyU2V0QWNjZXNzUG9saWN5RXhjZXB0aW9uSGVhZGVyczogQ29udGFpbmVyU2V0QWNjZXNzUG9saWN5RXhjZXB0aW9uSGVhZGVycyxcbiAgICBDb250YWluZXJTZXRBY2Nlc3NQb2xpY3lIZWFkZXJzOiBDb250YWluZXJTZXRBY2Nlc3NQb2xpY3lIZWFkZXJzLFxuICAgIENvbnRhaW5lclNldE1ldGFkYXRhRXhjZXB0aW9uSGVhZGVyczogQ29udGFpbmVyU2V0TWV0YWRhdGFFeGNlcHRpb25IZWFkZXJzLFxuICAgIENvbnRhaW5lclNldE1ldGFkYXRhSGVhZGVyczogQ29udGFpbmVyU2V0TWV0YWRhdGFIZWFkZXJzLFxuICAgIENvbnRhaW5lclN1Ym1pdEJhdGNoRXhjZXB0aW9uSGVhZGVyczogQ29udGFpbmVyU3VibWl0QmF0Y2hFeGNlcHRpb25IZWFkZXJzLFxuICAgIENvbnRhaW5lclN1Ym1pdEJhdGNoSGVhZGVyczogQ29udGFpbmVyU3VibWl0QmF0Y2hIZWFkZXJzLFxuICAgIENvcnNSdWxlOiBDb3JzUnVsZSxcbiAgICBEZWxpbWl0ZWRUZXh0Q29uZmlndXJhdGlvbjogRGVsaW1pdGVkVGV4dENvbmZpZ3VyYXRpb24sXG4gICAgRmlsdGVyQmxvYkl0ZW06IEZpbHRlckJsb2JJdGVtLFxuICAgIEZpbHRlckJsb2JTZWdtZW50OiBGaWx0ZXJCbG9iU2VnbWVudCxcbiAgICBHZW9SZXBsaWNhdGlvbjogR2VvUmVwbGljYXRpb24sXG4gICAgSnNvblRleHRDb25maWd1cmF0aW9uOiBKc29uVGV4dENvbmZpZ3VyYXRpb24sXG4gICAgS2V5SW5mbzogS2V5SW5mbyxcbiAgICBMaXN0QmxvYnNGbGF0U2VnbWVudFJlc3BvbnNlOiBMaXN0QmxvYnNGbGF0U2VnbWVudFJlc3BvbnNlLFxuICAgIExpc3RCbG9ic0hpZXJhcmNoeVNlZ21lbnRSZXNwb25zZTogTGlzdEJsb2JzSGllcmFyY2h5U2VnbWVudFJlc3BvbnNlLFxuICAgIExpc3RDb250YWluZXJzU2VnbWVudFJlc3BvbnNlOiBMaXN0Q29udGFpbmVyc1NlZ21lbnRSZXNwb25zZSxcbiAgICBMb2dnaW5nOiBMb2dnaW5nLFxuICAgIE1ldHJpY3M6IE1ldHJpY3MsXG4gICAgUGFnZUJsb2JDbGVhclBhZ2VzRXhjZXB0aW9uSGVhZGVyczogUGFnZUJsb2JDbGVhclBhZ2VzRXhjZXB0aW9uSGVhZGVycyxcbiAgICBQYWdlQmxvYkNsZWFyUGFnZXNIZWFkZXJzOiBQYWdlQmxvYkNsZWFyUGFnZXNIZWFkZXJzLFxuICAgIFBhZ2VCbG9iQ29weUluY3JlbWVudGFsRXhjZXB0aW9uSGVhZGVyczogUGFnZUJsb2JDb3B5SW5jcmVtZW50YWxFeGNlcHRpb25IZWFkZXJzLFxuICAgIFBhZ2VCbG9iQ29weUluY3JlbWVudGFsSGVhZGVyczogUGFnZUJsb2JDb3B5SW5jcmVtZW50YWxIZWFkZXJzLFxuICAgIFBhZ2VCbG9iQ3JlYXRlRXhjZXB0aW9uSGVhZGVyczogUGFnZUJsb2JDcmVhdGVFeGNlcHRpb25IZWFkZXJzLFxuICAgIFBhZ2VCbG9iQ3JlYXRlSGVhZGVyczogUGFnZUJsb2JDcmVhdGVIZWFkZXJzLFxuICAgIFBhZ2VCbG9iR2V0UGFnZVJhbmdlc0RpZmZFeGNlcHRpb25IZWFkZXJzOiBQYWdlQmxvYkdldFBhZ2VSYW5nZXNEaWZmRXhjZXB0aW9uSGVhZGVycyxcbiAgICBQYWdlQmxvYkdldFBhZ2VSYW5nZXNEaWZmSGVhZGVyczogUGFnZUJsb2JHZXRQYWdlUmFuZ2VzRGlmZkhlYWRlcnMsXG4gICAgUGFnZUJsb2JHZXRQYWdlUmFuZ2VzRXhjZXB0aW9uSGVhZGVyczogUGFnZUJsb2JHZXRQYWdlUmFuZ2VzRXhjZXB0aW9uSGVhZGVycyxcbiAgICBQYWdlQmxvYkdldFBhZ2VSYW5nZXNIZWFkZXJzOiBQYWdlQmxvYkdldFBhZ2VSYW5nZXNIZWFkZXJzLFxuICAgIFBhZ2VCbG9iUmVzaXplRXhjZXB0aW9uSGVhZGVyczogUGFnZUJsb2JSZXNpemVFeGNlcHRpb25IZWFkZXJzLFxuICAgIFBhZ2VCbG9iUmVzaXplSGVhZGVyczogUGFnZUJsb2JSZXNpemVIZWFkZXJzLFxuICAgIFBhZ2VCbG9iVXBkYXRlU2VxdWVuY2VOdW1iZXJFeGNlcHRpb25IZWFkZXJzOiBQYWdlQmxvYlVwZGF0ZVNlcXVlbmNlTnVtYmVyRXhjZXB0aW9uSGVhZGVycyxcbiAgICBQYWdlQmxvYlVwZGF0ZVNlcXVlbmNlTnVtYmVySGVhZGVyczogUGFnZUJsb2JVcGRhdGVTZXF1ZW5jZU51bWJlckhlYWRlcnMsXG4gICAgUGFnZUJsb2JVcGxvYWRQYWdlc0V4Y2VwdGlvbkhlYWRlcnM6IFBhZ2VCbG9iVXBsb2FkUGFnZXNFeGNlcHRpb25IZWFkZXJzLFxuICAgIFBhZ2VCbG9iVXBsb2FkUGFnZXNGcm9tVVJMRXhjZXB0aW9uSGVhZGVyczogUGFnZUJsb2JVcGxvYWRQYWdlc0Zyb21VUkxFeGNlcHRpb25IZWFkZXJzLFxuICAgIFBhZ2VCbG9iVXBsb2FkUGFnZXNGcm9tVVJMSGVhZGVyczogUGFnZUJsb2JVcGxvYWRQYWdlc0Zyb21VUkxIZWFkZXJzLFxuICAgIFBhZ2VCbG9iVXBsb2FkUGFnZXNIZWFkZXJzOiBQYWdlQmxvYlVwbG9hZFBhZ2VzSGVhZGVycyxcbiAgICBQYWdlTGlzdDogUGFnZUxpc3QsXG4gICAgUGFnZVJhbmdlOiBQYWdlUmFuZ2UsXG4gICAgUXVlcnlGb3JtYXQ6IFF1ZXJ5Rm9ybWF0LFxuICAgIFF1ZXJ5UmVxdWVzdDogUXVlcnlSZXF1ZXN0LFxuICAgIFF1ZXJ5U2VyaWFsaXphdGlvbjogUXVlcnlTZXJpYWxpemF0aW9uLFxuICAgIFJldGVudGlvblBvbGljeTogUmV0ZW50aW9uUG9saWN5LFxuICAgIFNlcnZpY2VGaWx0ZXJCbG9ic0V4Y2VwdGlvbkhlYWRlcnM6IFNlcnZpY2VGaWx0ZXJCbG9ic0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgU2VydmljZUZpbHRlckJsb2JzSGVhZGVyczogU2VydmljZUZpbHRlckJsb2JzSGVhZGVycyxcbiAgICBTZXJ2aWNlR2V0QWNjb3VudEluZm9FeGNlcHRpb25IZWFkZXJzOiBTZXJ2aWNlR2V0QWNjb3VudEluZm9FeGNlcHRpb25IZWFkZXJzLFxuICAgIFNlcnZpY2VHZXRBY2NvdW50SW5mb0hlYWRlcnM6IFNlcnZpY2VHZXRBY2NvdW50SW5mb0hlYWRlcnMsXG4gICAgU2VydmljZUdldFByb3BlcnRpZXNFeGNlcHRpb25IZWFkZXJzOiBTZXJ2aWNlR2V0UHJvcGVydGllc0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgU2VydmljZUdldFByb3BlcnRpZXNIZWFkZXJzOiBTZXJ2aWNlR2V0UHJvcGVydGllc0hlYWRlcnMsXG4gICAgU2VydmljZUdldFN0YXRpc3RpY3NFeGNlcHRpb25IZWFkZXJzOiBTZXJ2aWNlR2V0U3RhdGlzdGljc0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgU2VydmljZUdldFN0YXRpc3RpY3NIZWFkZXJzOiBTZXJ2aWNlR2V0U3RhdGlzdGljc0hlYWRlcnMsXG4gICAgU2VydmljZUdldFVzZXJEZWxlZ2F0aW9uS2V5RXhjZXB0aW9uSGVhZGVyczogU2VydmljZUdldFVzZXJEZWxlZ2F0aW9uS2V5RXhjZXB0aW9uSGVhZGVycyxcbiAgICBTZXJ2aWNlR2V0VXNlckRlbGVnYXRpb25LZXlIZWFkZXJzOiBTZXJ2aWNlR2V0VXNlckRlbGVnYXRpb25LZXlIZWFkZXJzLFxuICAgIFNlcnZpY2VMaXN0Q29udGFpbmVyc1NlZ21lbnRFeGNlcHRpb25IZWFkZXJzOiBTZXJ2aWNlTGlzdENvbnRhaW5lcnNTZWdtZW50RXhjZXB0aW9uSGVhZGVycyxcbiAgICBTZXJ2aWNlTGlzdENvbnRhaW5lcnNTZWdtZW50SGVhZGVyczogU2VydmljZUxpc3RDb250YWluZXJzU2VnbWVudEhlYWRlcnMsXG4gICAgU2VydmljZVNldFByb3BlcnRpZXNFeGNlcHRpb25IZWFkZXJzOiBTZXJ2aWNlU2V0UHJvcGVydGllc0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgU2VydmljZVNldFByb3BlcnRpZXNIZWFkZXJzOiBTZXJ2aWNlU2V0UHJvcGVydGllc0hlYWRlcnMsXG4gICAgU2VydmljZVN1Ym1pdEJhdGNoRXhjZXB0aW9uSGVhZGVyczogU2VydmljZVN1Ym1pdEJhdGNoRXhjZXB0aW9uSGVhZGVycyxcbiAgICBTZXJ2aWNlU3VibWl0QmF0Y2hIZWFkZXJzOiBTZXJ2aWNlU3VibWl0QmF0Y2hIZWFkZXJzLFxuICAgIFNpZ25lZElkZW50aWZpZXI6IFNpZ25lZElkZW50aWZpZXIsXG4gICAgU3RhdGljV2Vic2l0ZTogU3RhdGljV2Vic2l0ZSxcbiAgICBTdG9yYWdlRXJyb3I6IFN0b3JhZ2VFcnJvcixcbiAgICBVc2VyRGVsZWdhdGlvbktleTogVXNlckRlbGVnYXRpb25LZXlcbn0pO1xuXG4vKlxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKlxuICogQ29kZSBnZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBBdXRvUmVzdCBDb2RlIEdlbmVyYXRvci5cbiAqIENoYW5nZXMgbWF5IGNhdXNlIGluY29ycmVjdCBiZWhhdmlvciBhbmQgd2lsbCBiZSBsb3N0IGlmIHRoZSBjb2RlIGlzIHJlZ2VuZXJhdGVkLlxuICovXG5jb25zdCBjb250ZW50VHlwZSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiY29udGVudFR5cGVcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJhcHBsaWNhdGlvbi94bWxcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGVudC1UeXBlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBibG9iU2VydmljZVByb3BlcnRpZXMgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJibG9iU2VydmljZVByb3BlcnRpZXNcIixcbiAgICBtYXBwZXI6IEJsb2JTZXJ2aWNlUHJvcGVydGllcyxcbn07XG5jb25zdCBhY2NlcHQgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJhY2NlcHRcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcImFwcGxpY2F0aW9uL3htbFwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJBY2NlcHRcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHVybCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcInVybFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ1cmxcIixcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIHhtbE5hbWU6IFwidXJsXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBza2lwRW5jb2Rpbmc6IHRydWUsXG59O1xuY29uc3QgcmVzdHlwZSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcInJlc3R5cGVcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcInNlcnZpY2VcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwicmVzdHlwZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgY29tcCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImNvbXBcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcInByb3BlcnRpZXNcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29tcFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgdGltZW91dEluU2Vjb25kcyA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwidGltZW91dEluU2Vjb25kc1wiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgY29uc3RyYWludHM6IHtcbiAgICAgICAgICAgIEluY2x1c2l2ZU1pbmltdW06IDAsXG4gICAgICAgIH0sXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcInRpbWVvdXRcIixcbiAgICAgICAgeG1sTmFtZTogXCJ0aW1lb3V0XCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCB2ZXJzaW9uID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwidmVyc2lvblwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwiMjAyNC0xMS0wNFwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHJlcXVlc3RJZCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwicmVxdWVzdElkXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgYWNjZXB0MSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImFjY2VwdFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwiYXBwbGljYXRpb24veG1sXCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkFjY2VwdFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgY29tcDEgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb21wXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJzdGF0c1wiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb21wXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb21wMiA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImNvbXBcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcImxpc3RcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29tcFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgcHJlZml4ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJwcmVmaXhcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcInByZWZpeFwiLFxuICAgICAgICB4bWxOYW1lOiBcInByZWZpeFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgbWFya2VyID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJtYXJrZXJcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIm1hcmtlclwiLFxuICAgICAgICB4bWxOYW1lOiBcIm1hcmtlclwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgbWF4UGFnZVNpemUgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcIm1heFBhZ2VTaXplXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBjb25zdHJhaW50czoge1xuICAgICAgICAgICAgSW5jbHVzaXZlTWluaW11bTogMSxcbiAgICAgICAgfSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibWF4cmVzdWx0c1wiLFxuICAgICAgICB4bWxOYW1lOiBcIm1heHJlc3VsdHNcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGluY2x1ZGUgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcImluY2x1ZGVcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImluY2x1ZGVcIixcbiAgICAgICAgeG1sTmFtZTogXCJpbmNsdWRlXCIsXG4gICAgICAgIHhtbEVsZW1lbnROYW1lOiBcIkxpc3RDb250YWluZXJzSW5jbHVkZVR5cGVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTZXF1ZW5jZVwiLFxuICAgICAgICAgICAgZWxlbWVudDoge1xuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcIm1ldGFkYXRhXCIsIFwiZGVsZXRlZFwiLCBcInN5c3RlbVwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIGNvbGxlY3Rpb25Gb3JtYXQ6IFwiQ1NWXCIsXG59O1xuY29uc3Qga2V5SW5mbyA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImtleUluZm9cIixcbiAgICBtYXBwZXI6IEtleUluZm8sXG59O1xuY29uc3QgY29tcDMgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb21wXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJ1c2VyZGVsZWdhdGlvbmtleVwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb21wXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCByZXN0eXBlMSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcInJlc3R5cGVcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcImFjY291bnRcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwicmVzdHlwZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgYm9keSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImJvZHlcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiYm9keVwiLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgeG1sTmFtZTogXCJib2R5XCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyZWFtXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb21wNCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImNvbXBcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcImJhdGNoXCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbXBcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGNvbnRlbnRMZW5ndGggPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb250ZW50TGVuZ3RoXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRlbnQtTGVuZ3RoXCIsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB4bWxOYW1lOiBcIkNvbnRlbnQtTGVuZ3RoXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBtdWx0aXBhcnRDb250ZW50VHlwZSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcIm11bHRpcGFydENvbnRlbnRUeXBlXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRlbnQtVHlwZVwiLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgeG1sTmFtZTogXCJDb250ZW50LVR5cGVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGNvbXA1ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiY29tcFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwiYmxvYnNcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29tcFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3Qgd2hlcmUgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcIndoZXJlXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ3aGVyZVwiLFxuICAgICAgICB4bWxOYW1lOiBcIndoZXJlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCByZXN0eXBlMiA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcInJlc3R5cGVcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcImNvbnRhaW5lclwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJyZXN0eXBlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBtZXRhZGF0YSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwibWV0YWRhdGFcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbWV0YVwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtbWV0YVwiLFxuICAgICAgICBoZWFkZXJDb2xsZWN0aW9uUHJlZml4OiBcIngtbXMtbWV0YS1cIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJEaWN0aW9uYXJ5XCIsXG4gICAgICAgICAgICB2YWx1ZTogeyB0eXBlOiB7IG5hbWU6IFwiU3RyaW5nXCIgfSB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgYWNjZXNzID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJhY2Nlc3NcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1wdWJsaWMtYWNjZXNzXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLXB1YmxpYy1hY2Nlc3NcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJjb250YWluZXJcIiwgXCJibG9iXCJdLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgZGVmYXVsdEVuY3J5cHRpb25TY29wZSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXG4gICAgICAgIFwib3B0aW9uc1wiLFxuICAgICAgICBcImNvbnRhaW5lckVuY3J5cHRpb25TY29wZVwiLFxuICAgICAgICBcImRlZmF1bHRFbmNyeXB0aW9uU2NvcGVcIixcbiAgICBdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWRlZmF1bHQtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtZGVmYXVsdC1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBwcmV2ZW50RW5jcnlwdGlvblNjb3BlT3ZlcnJpZGUgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1xuICAgICAgICBcIm9wdGlvbnNcIixcbiAgICAgICAgXCJjb250YWluZXJFbmNyeXB0aW9uU2NvcGVcIixcbiAgICAgICAgXCJwcmV2ZW50RW5jcnlwdGlvblNjb3BlT3ZlcnJpZGVcIixcbiAgICBdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWRlbnktZW5jcnlwdGlvbi1zY29wZS1vdmVycmlkZVwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtZGVueS1lbmNyeXB0aW9uLXNjb3BlLW92ZXJyaWRlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgbGVhc2VJZCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwibGVhc2VBY2Nlc3NDb25kaXRpb25zXCIsIFwibGVhc2VJZFwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWFzZS1pZFwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGVhc2UtaWRcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGlmTW9kaWZpZWRTaW5jZSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwibW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zXCIsIFwiaWZNb2RpZmllZFNpbmNlXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJJZi1Nb2RpZmllZC1TaW5jZVwiLFxuICAgICAgICB4bWxOYW1lOiBcIklmLU1vZGlmaWVkLVNpbmNlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBpZlVubW9kaWZpZWRTaW5jZSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwibW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zXCIsIFwiaWZVbm1vZGlmaWVkU2luY2VcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIklmLVVubW9kaWZpZWQtU2luY2VcIixcbiAgICAgICAgeG1sTmFtZTogXCJJZi1Vbm1vZGlmaWVkLVNpbmNlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb21wNiA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImNvbXBcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcIm1ldGFkYXRhXCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbXBcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGNvbXA3ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiY29tcFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwiYWNsXCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbXBcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGNvbnRhaW5lckFjbCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiY29udGFpbmVyQWNsXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250YWluZXJBY2xcIixcbiAgICAgICAgeG1sTmFtZTogXCJTaWduZWRJZGVudGlmaWVyc1wiLFxuICAgICAgICB4bWxJc1dyYXBwZWQ6IHRydWUsXG4gICAgICAgIHhtbEVsZW1lbnROYW1lOiBcIlNpZ25lZElkZW50aWZpZXJcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTZXF1ZW5jZVwiLFxuICAgICAgICAgICAgZWxlbWVudDoge1xuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIlNpZ25lZElkZW50aWZpZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGNvbXA4ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiY29tcFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwidW5kZWxldGVcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29tcFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgZGVsZXRlZENvbnRhaW5lck5hbWUgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcImRlbGV0ZWRDb250YWluZXJOYW1lXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWRlbGV0ZWQtY29udGFpbmVyLW5hbWVcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWRlbGV0ZWQtY29udGFpbmVyLW5hbWVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGRlbGV0ZWRDb250YWluZXJWZXJzaW9uID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJkZWxldGVkQ29udGFpbmVyVmVyc2lvblwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1kZWxldGVkLWNvbnRhaW5lci12ZXJzaW9uXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1kZWxldGVkLWNvbnRhaW5lci12ZXJzaW9uXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb21wOSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImNvbXBcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcInJlbmFtZVwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb21wXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBzb3VyY2VDb250YWluZXJOYW1lID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwic291cmNlQ29udGFpbmVyTmFtZVwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXNvdXJjZS1jb250YWluZXItbmFtZVwiLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXNvdXJjZS1jb250YWluZXItbmFtZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3Qgc291cmNlTGVhc2VJZCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwic291cmNlTGVhc2VJZFwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1zb3VyY2UtbGVhc2UtaWRcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXNvdXJjZS1sZWFzZS1pZFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgY29tcDEwID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiY29tcFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwibGVhc2VcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29tcFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgYWN0aW9uID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiYWN0aW9uXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJhY3F1aXJlXCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVhc2UtYWN0aW9uXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBkdXJhdGlvbiA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiZHVyYXRpb25cIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVhc2UtZHVyYXRpb25cIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWxlYXNlLWR1cmF0aW9uXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBwcm9wb3NlZExlYXNlSWQgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcInByb3Bvc2VkTGVhc2VJZFwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1wcm9wb3NlZC1sZWFzZS1pZFwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtcHJvcG9zZWQtbGVhc2UtaWRcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGFjdGlvbjEgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJhY3Rpb25cIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcInJlbGVhc2VcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWFzZS1hY3Rpb25cIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGxlYXNlSWQxID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwibGVhc2VJZFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxlYXNlLWlkXCIsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGVhc2UtaWRcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGFjdGlvbjIgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJhY3Rpb25cIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcInJlbmV3XCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVhc2UtYWN0aW9uXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBhY3Rpb24zID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiYWN0aW9uXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJicmVha1wiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxlYXNlLWFjdGlvblwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgYnJlYWtQZXJpb2QgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcImJyZWFrUGVyaW9kXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxlYXNlLWJyZWFrLXBlcmlvZFwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGVhc2UtYnJlYWstcGVyaW9kXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBhY3Rpb240ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiYWN0aW9uXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJjaGFuZ2VcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWFzZS1hY3Rpb25cIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHByb3Bvc2VkTGVhc2VJZDEgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJwcm9wb3NlZExlYXNlSWRcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1wcm9wb3NlZC1sZWFzZS1pZFwiLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXByb3Bvc2VkLWxlYXNlLWlkXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBpbmNsdWRlMSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiaW5jbHVkZVwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiaW5jbHVkZVwiLFxuICAgICAgICB4bWxOYW1lOiBcImluY2x1ZGVcIixcbiAgICAgICAgeG1sRWxlbWVudE5hbWU6IFwiTGlzdEJsb2JzSW5jbHVkZUl0ZW1cIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTZXF1ZW5jZVwiLFxuICAgICAgICAgICAgZWxlbWVudDoge1xuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiY29weVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkZWxldGVkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm1ldGFkYXRhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInNuYXBzaG90c1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJ1bmNvbW1pdHRlZGJsb2JzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInZlcnNpb25zXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInRhZ3NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaW1tdXRhYmlsaXR5cG9saWN5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImxlZ2FsaG9sZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkZWxldGVkd2l0aHZlcnNpb25zXCIsXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBjb2xsZWN0aW9uRm9ybWF0OiBcIkNTVlwiLFxufTtcbmNvbnN0IGRlbGltaXRlciA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImRlbGltaXRlclwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkZWxpbWl0ZXJcIixcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIHhtbE5hbWU6IFwiZGVsaW1pdGVyXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBzbmFwc2hvdCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwic25hcHNob3RcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcInNuYXBzaG90XCIsXG4gICAgICAgIHhtbE5hbWU6IFwic25hcHNob3RcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHZlcnNpb25JZCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwidmVyc2lvbklkXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ2ZXJzaW9uaWRcIixcbiAgICAgICAgeG1sTmFtZTogXCJ2ZXJzaW9uaWRcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHJhbmdlID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJyYW5nZVwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yYW5nZVwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmFuZ2VcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHJhbmdlR2V0Q29udGVudE1ENSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwicmFuZ2VHZXRDb250ZW50TUQ1XCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJhbmdlLWdldC1jb250ZW50LW1kNVwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmFuZ2UtZ2V0LWNvbnRlbnQtbWQ1XCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgcmFuZ2VHZXRDb250ZW50Q1JDNjQgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcInJhbmdlR2V0Q29udGVudENSQzY0XCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJhbmdlLWdldC1jb250ZW50LWNyYzY0XCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1yYW5nZS1nZXQtY29udGVudC1jcmM2NFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGVuY3J5cHRpb25LZXkgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcImNwa0luZm9cIiwgXCJlbmNyeXB0aW9uS2V5XCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5XCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgZW5jcnlwdGlvbktleVNoYTI1NiA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiY3BrSW5mb1wiLCBcImVuY3J5cHRpb25LZXlTaGEyNTZcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1rZXktc2hhMjU2XCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGVuY3J5cHRpb25BbGdvcml0aG0gPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcImNwa0luZm9cIiwgXCJlbmNyeXB0aW9uQWxnb3JpdGhtXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tYWxnb3JpdGhtXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWFsZ29yaXRobVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgaWZNYXRjaCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwibW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zXCIsIFwiaWZNYXRjaFwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiSWYtTWF0Y2hcIixcbiAgICAgICAgeG1sTmFtZTogXCJJZi1NYXRjaFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgaWZOb25lTWF0Y2ggPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcIm1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uc1wiLCBcImlmTm9uZU1hdGNoXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJJZi1Ob25lLU1hdGNoXCIsXG4gICAgICAgIHhtbE5hbWU6IFwiSWYtTm9uZS1NYXRjaFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgaWZUYWdzID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnNcIiwgXCJpZlRhZ3NcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtaWYtdGFnc1wiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtaWYtdGFnc1wiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgZGVsZXRlU25hcHNob3RzID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJkZWxldGVTbmFwc2hvdHNcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZGVsZXRlLXNuYXBzaG90c1wiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtZGVsZXRlLXNuYXBzaG90c1wiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcImluY2x1ZGVcIiwgXCJvbmx5XCJdLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgYmxvYkRlbGV0ZVR5cGUgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcImJsb2JEZWxldGVUeXBlXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkZWxldGV0eXBlXCIsXG4gICAgICAgIHhtbE5hbWU6IFwiZGVsZXRldHlwZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgY29tcDExID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiY29tcFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwiZXhwaXJ5XCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbXBcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGV4cGlyeU9wdGlvbnMgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJleHBpcnlPcHRpb25zXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXhwaXJ5LW9wdGlvblwiLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWV4cGlyeS1vcHRpb25cIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGV4cGlyZXNPbiA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiZXhwaXJlc09uXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWV4cGlyeS10aW1lXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1leHBpcnktdGltZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgYmxvYkNhY2hlQ29udHJvbCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiYmxvYkh0dHBIZWFkZXJzXCIsIFwiYmxvYkNhY2hlQ29udHJvbFwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLWNhY2hlLWNvbnRyb2xcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2ItY2FjaGUtY29udHJvbFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgYmxvYkNvbnRlbnRUeXBlID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJibG9iSHR0cEhlYWRlcnNcIiwgXCJibG9iQ29udGVudFR5cGVcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1jb250ZW50LXR5cGVcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2ItY29udGVudC10eXBlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBibG9iQ29udGVudE1ENSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiYmxvYkh0dHBIZWFkZXJzXCIsIFwiYmxvYkNvbnRlbnRNRDVcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1jb250ZW50LW1kNVwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1jb250ZW50LW1kNVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgYmxvYkNvbnRlbnRFbmNvZGluZyA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiYmxvYkh0dHBIZWFkZXJzXCIsIFwiYmxvYkNvbnRlbnRFbmNvZGluZ1wiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLWNvbnRlbnQtZW5jb2RpbmdcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2ItY29udGVudC1lbmNvZGluZ1wiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgYmxvYkNvbnRlbnRMYW5ndWFnZSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiYmxvYkh0dHBIZWFkZXJzXCIsIFwiYmxvYkNvbnRlbnRMYW5ndWFnZVwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLWNvbnRlbnQtbGFuZ3VhZ2VcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2ItY29udGVudC1sYW5ndWFnZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgYmxvYkNvbnRlbnREaXNwb3NpdGlvbiA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiYmxvYkh0dHBIZWFkZXJzXCIsIFwiYmxvYkNvbnRlbnREaXNwb3NpdGlvblwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLWNvbnRlbnQtZGlzcG9zaXRpb25cIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2ItY29udGVudC1kaXNwb3NpdGlvblwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgY29tcDEyID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiY29tcFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwiaW1tdXRhYmlsaXR5UG9saWNpZXNcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29tcFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgaW1tdXRhYmlsaXR5UG9saWN5RXhwaXJ5ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJpbW11dGFiaWxpdHlQb2xpY3lFeHBpcnlcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtaW1tdXRhYmlsaXR5LXBvbGljeS11bnRpbC1kYXRlXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1pbW11dGFiaWxpdHktcG9saWN5LXVudGlsLWRhdGVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGltbXV0YWJpbGl0eVBvbGljeU1vZGUgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcImltbXV0YWJpbGl0eVBvbGljeU1vZGVcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtaW1tdXRhYmlsaXR5LXBvbGljeS1tb2RlXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1pbW11dGFiaWxpdHktcG9saWN5LW1vZGVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJNdXRhYmxlXCIsIFwiVW5sb2NrZWRcIiwgXCJMb2NrZWRcIl0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb21wMTMgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb21wXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJsZWdhbGhvbGRcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29tcFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgbGVnYWxIb2xkID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwibGVnYWxIb2xkXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVnYWwtaG9sZFwiLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWxlZ2FsLWhvbGRcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBlbmNyeXB0aW9uU2NvcGUgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcImVuY3J5cHRpb25TY29wZVwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb21wMTQgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb21wXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJzbmFwc2hvdFwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb21wXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCB0aWVyID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJ0aWVyXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWFjY2Vzcy10aWVyXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1hY2Nlc3MtdGllclwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcbiAgICAgICAgICAgICAgICBcIlA0XCIsXG4gICAgICAgICAgICAgICAgXCJQNlwiLFxuICAgICAgICAgICAgICAgIFwiUDEwXCIsXG4gICAgICAgICAgICAgICAgXCJQMTVcIixcbiAgICAgICAgICAgICAgICBcIlAyMFwiLFxuICAgICAgICAgICAgICAgIFwiUDMwXCIsXG4gICAgICAgICAgICAgICAgXCJQNDBcIixcbiAgICAgICAgICAgICAgICBcIlA1MFwiLFxuICAgICAgICAgICAgICAgIFwiUDYwXCIsXG4gICAgICAgICAgICAgICAgXCJQNzBcIixcbiAgICAgICAgICAgICAgICBcIlA4MFwiLFxuICAgICAgICAgICAgICAgIFwiSG90XCIsXG4gICAgICAgICAgICAgICAgXCJDb29sXCIsXG4gICAgICAgICAgICAgICAgXCJBcmNoaXZlXCIsXG4gICAgICAgICAgICAgICAgXCJDb2xkXCIsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgcmVoeWRyYXRlUHJpb3JpdHkgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcInJlaHlkcmF0ZVByaW9yaXR5XCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlaHlkcmF0ZS1wcmlvcml0eVwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVoeWRyYXRlLXByaW9yaXR5XCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wiSGlnaFwiLCBcIlN0YW5kYXJkXCJdLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3Qgc291cmNlSWZNb2RpZmllZFNpbmNlID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcbiAgICAgICAgXCJvcHRpb25zXCIsXG4gICAgICAgIFwic291cmNlTW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zXCIsXG4gICAgICAgIFwic291cmNlSWZNb2RpZmllZFNpbmNlXCIsXG4gICAgXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1zb3VyY2UtaWYtbW9kaWZpZWQtc2luY2VcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXNvdXJjZS1pZi1tb2RpZmllZC1zaW5jZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3Qgc291cmNlSWZVbm1vZGlmaWVkU2luY2UgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1xuICAgICAgICBcIm9wdGlvbnNcIixcbiAgICAgICAgXCJzb3VyY2VNb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnNcIixcbiAgICAgICAgXCJzb3VyY2VJZlVubW9kaWZpZWRTaW5jZVwiLFxuICAgIF0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtc291cmNlLWlmLXVubW9kaWZpZWQtc2luY2VcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXNvdXJjZS1pZi11bm1vZGlmaWVkLXNpbmNlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBzb3VyY2VJZk1hdGNoID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJzb3VyY2VNb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnNcIiwgXCJzb3VyY2VJZk1hdGNoXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXNvdXJjZS1pZi1tYXRjaFwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtc291cmNlLWlmLW1hdGNoXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBzb3VyY2VJZk5vbmVNYXRjaCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXG4gICAgICAgIFwib3B0aW9uc1wiLFxuICAgICAgICBcInNvdXJjZU1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uc1wiLFxuICAgICAgICBcInNvdXJjZUlmTm9uZU1hdGNoXCIsXG4gICAgXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1zb3VyY2UtaWYtbm9uZS1tYXRjaFwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtc291cmNlLWlmLW5vbmUtbWF0Y2hcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHNvdXJjZUlmVGFncyA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwic291cmNlTW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zXCIsIFwic291cmNlSWZUYWdzXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXNvdXJjZS1pZi10YWdzXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1zb3VyY2UtaWYtdGFnc1wiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgY29weVNvdXJjZSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImNvcHlTb3VyY2VcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LXNvdXJjZVwiLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvcHktc291cmNlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBibG9iVGFnc1N0cmluZyA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiYmxvYlRhZ3NTdHJpbmdcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdGFnc1wiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtdGFnc1wiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3Qgc2VhbEJsb2IgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcInNlYWxCbG9iXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXNlYWwtYmxvYlwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtc2VhbC1ibG9iXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgbGVnYWxIb2xkMSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwibGVnYWxIb2xkXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxlZ2FsLWhvbGRcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWxlZ2FsLWhvbGRcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCB4TXNSZXF1aXJlc1N5bmMgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJ4TXNSZXF1aXJlc1N5bmNcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcInRydWVcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1aXJlcy1zeW5jXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBzb3VyY2VDb250ZW50TUQ1ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJzb3VyY2VDb250ZW50TUQ1XCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXNvdXJjZS1jb250ZW50LW1kNVwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtc291cmNlLWNvbnRlbnQtbWQ1XCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb3B5U291cmNlQXV0aG9yaXphdGlvbiA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiY29weVNvdXJjZUF1dGhvcml6YXRpb25cIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1zb3VyY2UtYXV0aG9yaXphdGlvblwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29weS1zb3VyY2UtYXV0aG9yaXphdGlvblwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgY29weVNvdXJjZVRhZ3MgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcImNvcHlTb3VyY2VUYWdzXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvcHktc291cmNlLXRhZy1vcHRpb25cIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvcHktc291cmNlLXRhZy1vcHRpb25cIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJSRVBMQUNFXCIsIFwiQ09QWVwiXSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGNvbXAxNSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImNvbXBcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcImNvcHlcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29tcFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgY29weUFjdGlvbkFib3J0Q29uc3RhbnQgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb3B5QWN0aW9uQWJvcnRDb25zdGFudFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwiYWJvcnRcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LWFjdGlvblwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgY29weUlkID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiY29weUlkXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvcHlpZFwiLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgeG1sTmFtZTogXCJjb3B5aWRcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGNvbXAxNiA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImNvbXBcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcInRpZXJcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29tcFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgdGllcjEgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJ0aWVyXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYWNjZXNzLXRpZXJcIixcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1hY2Nlc3MtdGllclwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcbiAgICAgICAgICAgICAgICBcIlA0XCIsXG4gICAgICAgICAgICAgICAgXCJQNlwiLFxuICAgICAgICAgICAgICAgIFwiUDEwXCIsXG4gICAgICAgICAgICAgICAgXCJQMTVcIixcbiAgICAgICAgICAgICAgICBcIlAyMFwiLFxuICAgICAgICAgICAgICAgIFwiUDMwXCIsXG4gICAgICAgICAgICAgICAgXCJQNDBcIixcbiAgICAgICAgICAgICAgICBcIlA1MFwiLFxuICAgICAgICAgICAgICAgIFwiUDYwXCIsXG4gICAgICAgICAgICAgICAgXCJQNzBcIixcbiAgICAgICAgICAgICAgICBcIlA4MFwiLFxuICAgICAgICAgICAgICAgIFwiSG90XCIsXG4gICAgICAgICAgICAgICAgXCJDb29sXCIsXG4gICAgICAgICAgICAgICAgXCJBcmNoaXZlXCIsXG4gICAgICAgICAgICAgICAgXCJDb2xkXCIsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgcXVlcnlSZXF1ZXN0ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJxdWVyeVJlcXVlc3RcIl0sXG4gICAgbWFwcGVyOiBRdWVyeVJlcXVlc3QsXG59O1xuY29uc3QgY29tcDE3ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiY29tcFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwicXVlcnlcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29tcFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgY29tcDE4ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiY29tcFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwidGFnc1wiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb21wXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCB0YWdzID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJ0YWdzXCJdLFxuICAgIG1hcHBlcjogQmxvYlRhZ3MsXG59O1xuY29uc3QgdHJhbnNhY3Rpb25hbENvbnRlbnRNRDUgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcInRyYW5zYWN0aW9uYWxDb250ZW50TUQ1XCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJDb250ZW50LU1ENVwiLFxuICAgICAgICB4bWxOYW1lOiBcIkNvbnRlbnQtTUQ1XCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCB0cmFuc2FjdGlvbmFsQ29udGVudENyYzY0ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJ0cmFuc2FjdGlvbmFsQ29udGVudENyYzY0XCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvbnRlbnQtY3JjNjRcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvbnRlbnQtY3JjNjRcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGJsb2JUeXBlID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiYmxvYlR5cGVcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcIlBhZ2VCbG9iXCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi10eXBlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBibG9iQ29udGVudExlbmd0aCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImJsb2JDb250ZW50TGVuZ3RoXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1jb250ZW50LWxlbmd0aFwiLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2ItY29udGVudC1sZW5ndGhcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGJsb2JTZXF1ZW5jZU51bWJlciA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiYmxvYlNlcXVlbmNlTnVtYmVyXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IDAsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1zZXF1ZW5jZS1udW1iZXJcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2Itc2VxdWVuY2UtbnVtYmVyXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb250ZW50VHlwZTEgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcImNvbnRlbnRUeXBlXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRlbnQtVHlwZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgYm9keTEgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJib2R5XCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImJvZHlcIixcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIHhtbE5hbWU6IFwiYm9keVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmVhbVwiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgYWNjZXB0MiA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImFjY2VwdFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwiYXBwbGljYXRpb24veG1sXCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkFjY2VwdFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgY29tcDE5ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiY29tcFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwicGFnZVwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb21wXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBwYWdlV3JpdGUgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJwYWdlV3JpdGVcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcInVwZGF0ZVwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXBhZ2Utd3JpdGVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGlmU2VxdWVuY2VOdW1iZXJMZXNzVGhhbk9yRXF1YWxUbyA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXG4gICAgICAgIFwib3B0aW9uc1wiLFxuICAgICAgICBcInNlcXVlbmNlTnVtYmVyQWNjZXNzQ29uZGl0aW9uc1wiLFxuICAgICAgICBcImlmU2VxdWVuY2VOdW1iZXJMZXNzVGhhbk9yRXF1YWxUb1wiLFxuICAgIF0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtaWYtc2VxdWVuY2UtbnVtYmVyLWxlXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1pZi1zZXF1ZW5jZS1udW1iZXItbGVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGlmU2VxdWVuY2VOdW1iZXJMZXNzVGhhbiA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXG4gICAgICAgIFwib3B0aW9uc1wiLFxuICAgICAgICBcInNlcXVlbmNlTnVtYmVyQWNjZXNzQ29uZGl0aW9uc1wiLFxuICAgICAgICBcImlmU2VxdWVuY2VOdW1iZXJMZXNzVGhhblwiLFxuICAgIF0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtaWYtc2VxdWVuY2UtbnVtYmVyLWx0XCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1pZi1zZXF1ZW5jZS1udW1iZXItbHRcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGlmU2VxdWVuY2VOdW1iZXJFcXVhbFRvID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcbiAgICAgICAgXCJvcHRpb25zXCIsXG4gICAgICAgIFwic2VxdWVuY2VOdW1iZXJBY2Nlc3NDb25kaXRpb25zXCIsXG4gICAgICAgIFwiaWZTZXF1ZW5jZU51bWJlckVxdWFsVG9cIixcbiAgICBdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWlmLXNlcXVlbmNlLW51bWJlci1lcVwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtaWYtc2VxdWVuY2UtbnVtYmVyLWVxXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBwYWdlV3JpdGUxID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwicGFnZVdyaXRlXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJjbGVhclwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXBhZ2Utd3JpdGVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHNvdXJjZVVybCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcInNvdXJjZVVybFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvcHktc291cmNlXCIsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29weS1zb3VyY2VcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHNvdXJjZVJhbmdlID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwic291cmNlUmFuZ2VcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1zb3VyY2UtcmFuZ2VcIixcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1zb3VyY2UtcmFuZ2VcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHNvdXJjZUNvbnRlbnRDcmM2NCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwic291cmNlQ29udGVudENyYzY0XCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXNvdXJjZS1jb250ZW50LWNyYzY0XCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1zb3VyY2UtY29udGVudC1jcmM2NFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgcmFuZ2UxID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwicmFuZ2VcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yYW5nZVwiLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJhbmdlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb21wMjAgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb21wXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJwYWdlbGlzdFwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb21wXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBwcmV2c25hcHNob3QgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcInByZXZzbmFwc2hvdFwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwicHJldnNuYXBzaG90XCIsXG4gICAgICAgIHhtbE5hbWU6IFwicHJldnNuYXBzaG90XCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBwcmV2U25hcHNob3RVcmwgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcInByZXZTbmFwc2hvdFVybFwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1wcmV2aW91cy1zbmFwc2hvdC11cmxcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXByZXZpb3VzLXNuYXBzaG90LXVybFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3Qgc2VxdWVuY2VOdW1iZXJBY3Rpb24gPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJzZXF1ZW5jZU51bWJlckFjdGlvblwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXNlcXVlbmNlLW51bWJlci1hY3Rpb25cIixcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1zZXF1ZW5jZS1udW1iZXItYWN0aW9uXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wibWF4XCIsIFwidXBkYXRlXCIsIFwiaW5jcmVtZW50XCJdLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgY29tcDIxID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiY29tcFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwiaW5jcmVtZW50YWxjb3B5XCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbXBcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGJsb2JUeXBlMSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImJsb2JUeXBlXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJBcHBlbmRCbG9iXCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi10eXBlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb21wMjIgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb21wXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJhcHBlbmRibG9ja1wiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb21wXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBtYXhTaXplID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJhcHBlbmRQb3NpdGlvbkFjY2Vzc0NvbmRpdGlvbnNcIiwgXCJtYXhTaXplXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2ItY29uZGl0aW9uLW1heHNpemVcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2ItY29uZGl0aW9uLW1heHNpemVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGFwcGVuZFBvc2l0aW9uID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcbiAgICAgICAgXCJvcHRpb25zXCIsXG4gICAgICAgIFwiYXBwZW5kUG9zaXRpb25BY2Nlc3NDb25kaXRpb25zXCIsXG4gICAgICAgIFwiYXBwZW5kUG9zaXRpb25cIixcbiAgICBdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2ItY29uZGl0aW9uLWFwcGVuZHBvc1wiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1jb25kaXRpb24tYXBwZW5kcG9zXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBzb3VyY2VSYW5nZTEgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcInNvdXJjZVJhbmdlXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXNvdXJjZS1yYW5nZVwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtc291cmNlLXJhbmdlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb21wMjMgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb21wXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJzZWFsXCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbXBcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGJsb2JUeXBlMiA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImJsb2JUeXBlXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJCbG9ja0Jsb2JcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLXR5cGVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGNvcHlTb3VyY2VCbG9iUHJvcGVydGllcyA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiY29weVNvdXJjZUJsb2JQcm9wZXJ0aWVzXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvcHktc291cmNlLWJsb2ItcHJvcGVydGllc1wiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29weS1zb3VyY2UtYmxvYi1wcm9wZXJ0aWVzXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgY29tcDI0ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiY29tcFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwiYmxvY2tcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29tcFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgYmxvY2tJZCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImJsb2NrSWRcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiYmxvY2tpZFwiLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgeG1sTmFtZTogXCJibG9ja2lkXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBibG9ja3MgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJibG9ja3NcIixcbiAgICBtYXBwZXI6IEJsb2NrTG9va3VwTGlzdCxcbn07XG5jb25zdCBjb21wMjUgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb21wXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJibG9ja2xpc3RcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29tcFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgbGlzdFR5cGUgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJsaXN0VHlwZVwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwiY29tbWl0dGVkXCIsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImJsb2NrbGlzdHR5cGVcIixcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIHhtbE5hbWU6IFwiYmxvY2tsaXN0dHlwZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcImNvbW1pdHRlZFwiLCBcInVuY29tbWl0dGVkXCIsIFwiYWxsXCJdLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuXG4vKlxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKlxuICogQ29kZSBnZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBBdXRvUmVzdCBDb2RlIEdlbmVyYXRvci5cbiAqIENoYW5nZXMgbWF5IGNhdXNlIGluY29ycmVjdCBiZWhhdmlvciBhbmQgd2lsbCBiZSBsb3N0IGlmIHRoZSBjb2RlIGlzIHJlZ2VuZXJhdGVkLlxuICovXG4vKiogQ2xhc3MgY29udGFpbmluZyBTZXJ2aWNlIG9wZXJhdGlvbnMuICovXG5jbGFzcyBTZXJ2aWNlSW1wbCB7XG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgY2xhc3MgU2VydmljZSBjbGFzcy5cbiAgICAgKiBAcGFyYW0gY2xpZW50IFJlZmVyZW5jZSB0byB0aGUgc2VydmljZSBjbGllbnRcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihjbGllbnQpIHtcbiAgICAgICAgdGhpcy5jbGllbnQgPSBjbGllbnQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldHMgcHJvcGVydGllcyBmb3IgYSBzdG9yYWdlIGFjY291bnQncyBCbG9iIHNlcnZpY2UgZW5kcG9pbnQsIGluY2x1ZGluZyBwcm9wZXJ0aWVzIGZvciBTdG9yYWdlXG4gICAgICogQW5hbHl0aWNzIGFuZCBDT1JTIChDcm9zcy1PcmlnaW4gUmVzb3VyY2UgU2hhcmluZykgcnVsZXNcbiAgICAgKiBAcGFyYW0gYmxvYlNlcnZpY2VQcm9wZXJ0aWVzIFRoZSBTdG9yYWdlU2VydmljZSBwcm9wZXJ0aWVzLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgc2V0UHJvcGVydGllcyhibG9iU2VydmljZVByb3BlcnRpZXMsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgYmxvYlNlcnZpY2VQcm9wZXJ0aWVzLCBvcHRpb25zIH0sIHNldFByb3BlcnRpZXNPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogZ2V0cyB0aGUgcHJvcGVydGllcyBvZiBhIHN0b3JhZ2UgYWNjb3VudCdzIEJsb2Igc2VydmljZSwgaW5jbHVkaW5nIHByb3BlcnRpZXMgZm9yIFN0b3JhZ2UgQW5hbHl0aWNzXG4gICAgICogYW5kIENPUlMgKENyb3NzLU9yaWdpbiBSZXNvdXJjZSBTaGFyaW5nKSBydWxlcy5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGdldFByb3BlcnRpZXMob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIGdldFByb3BlcnRpZXNPcGVyYXRpb25TcGVjJDIpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgc3RhdGlzdGljcyByZWxhdGVkIHRvIHJlcGxpY2F0aW9uIGZvciB0aGUgQmxvYiBzZXJ2aWNlLiBJdCBpcyBvbmx5IGF2YWlsYWJsZSBvbiB0aGVcbiAgICAgKiBzZWNvbmRhcnkgbG9jYXRpb24gZW5kcG9pbnQgd2hlbiByZWFkLWFjY2VzcyBnZW8tcmVkdW5kYW50IHJlcGxpY2F0aW9uIGlzIGVuYWJsZWQgZm9yIHRoZSBzdG9yYWdlXG4gICAgICogYWNjb3VudC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGdldFN0YXRpc3RpY3Mob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIGdldFN0YXRpc3RpY3NPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIExpc3QgQ29udGFpbmVycyBTZWdtZW50IG9wZXJhdGlvbiByZXR1cm5zIGEgbGlzdCBvZiB0aGUgY29udGFpbmVycyB1bmRlciB0aGUgc3BlY2lmaWVkIGFjY291bnRcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGxpc3RDb250YWluZXJzU2VnbWVudChvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgbGlzdENvbnRhaW5lcnNTZWdtZW50T3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyBhIHVzZXIgZGVsZWdhdGlvbiBrZXkgZm9yIHRoZSBCbG9iIHNlcnZpY2UuIFRoaXMgaXMgb25seSBhIHZhbGlkIG9wZXJhdGlvbiB3aGVuIHVzaW5nXG4gICAgICogYmVhcmVyIHRva2VuIGF1dGhlbnRpY2F0aW9uLlxuICAgICAqIEBwYXJhbSBrZXlJbmZvIEtleSBpbmZvcm1hdGlvblxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgZ2V0VXNlckRlbGVnYXRpb25LZXkoa2V5SW5mbywgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBrZXlJbmZvLCBvcHRpb25zIH0sIGdldFVzZXJEZWxlZ2F0aW9uS2V5T3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHNrdSBuYW1lIGFuZCBhY2NvdW50IGtpbmRcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGdldEFjY291bnRJbmZvKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgb3B0aW9ucyB9LCBnZXRBY2NvdW50SW5mb09wZXJhdGlvblNwZWMkMik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBCYXRjaCBvcGVyYXRpb24gYWxsb3dzIG11bHRpcGxlIEFQSSBjYWxscyB0byBiZSBlbWJlZGRlZCBpbnRvIGEgc2luZ2xlIEhUVFAgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gY29udGVudExlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBtdWx0aXBhcnRDb250ZW50VHlwZSBSZXF1aXJlZC4gVGhlIHZhbHVlIG9mIHRoaXMgaGVhZGVyIG11c3QgYmUgbXVsdGlwYXJ0L21peGVkIHdpdGggYSBiYXRjaFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3VuZGFyeS4gRXhhbXBsZSBoZWFkZXIgdmFsdWU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9YmF0Y2hfPEdVSUQ+XG4gICAgICogQHBhcmFtIGJvZHkgSW5pdGlhbCBkYXRhXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBzdWJtaXRCYXRjaChjb250ZW50TGVuZ3RoLCBtdWx0aXBhcnRDb250ZW50VHlwZSwgYm9keSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBjb250ZW50TGVuZ3RoLCBtdWx0aXBhcnRDb250ZW50VHlwZSwgYm9keSwgb3B0aW9ucyB9LCBzdWJtaXRCYXRjaE9wZXJhdGlvblNwZWMkMSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBGaWx0ZXIgQmxvYnMgb3BlcmF0aW9uIGVuYWJsZXMgY2FsbGVycyB0byBsaXN0IGJsb2JzIGFjcm9zcyBhbGwgY29udGFpbmVycyB3aG9zZSB0YWdzIG1hdGNoIGFcbiAgICAgKiBnaXZlbiBzZWFyY2ggZXhwcmVzc2lvbi4gIEZpbHRlciBibG9icyBzZWFyY2hlcyBhY3Jvc3MgYWxsIGNvbnRhaW5lcnMgd2l0aGluIGEgc3RvcmFnZSBhY2NvdW50IGJ1dFxuICAgICAqIGNhbiBiZSBzY29wZWQgd2l0aGluIHRoZSBleHByZXNzaW9uIHRvIGEgc2luZ2xlIGNvbnRhaW5lci5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGZpbHRlckJsb2JzKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgb3B0aW9ucyB9LCBmaWx0ZXJCbG9ic09wZXJhdGlvblNwZWMkMSk7XG4gICAgfVxufVxuLy8gT3BlcmF0aW9uIFNwZWNpZmljYXRpb25zXG5jb25zdCB4bWxTZXJpYWxpemVyJDUgPSBjb3JlQ2xpZW50X19uYW1lc3BhY2UuY3JlYXRlU2VyaWFsaXplcihNYXBwZXJzLCAvKiBpc1htbCAqLyB0cnVlKTtcbmNvbnN0IHNldFByb3BlcnRpZXNPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL1wiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMjoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogU2VydmljZVNldFByb3BlcnRpZXNIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBTZXJ2aWNlU2V0UHJvcGVydGllc0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICByZXF1ZXN0Qm9keTogYmxvYlNlcnZpY2VQcm9wZXJ0aWVzLFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICByZXN0eXBlLFxuICAgICAgICBjb21wLFxuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgIF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICBjb250ZW50VHlwZSxcbiAgICAgICAgYWNjZXB0LFxuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi94bWw7IGNoYXJzZXQ9dXRmLThcIixcbiAgICBtZWRpYVR5cGU6IFwieG1sXCIsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQ1LFxufTtcbmNvbnN0IGdldFByb3BlcnRpZXNPcGVyYXRpb25TcGVjJDIgPSB7XG4gICAgcGF0aDogXCIvXCIsXG4gICAgaHR0cE1ldGhvZDogXCJHRVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBCbG9iU2VydmljZVByb3BlcnRpZXMsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBTZXJ2aWNlR2V0UHJvcGVydGllc0hlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFNlcnZpY2VHZXRQcm9wZXJ0aWVzRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICByZXN0eXBlLFxuICAgICAgICBjb21wLFxuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgIF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDUsXG59O1xuY29uc3QgZ2V0U3RhdGlzdGljc09wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIvXCIsXG4gICAgaHR0cE1ldGhvZDogXCJHRVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBCbG9iU2VydmljZVN0YXRpc3RpY3MsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBTZXJ2aWNlR2V0U3RhdGlzdGljc0hlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFNlcnZpY2VHZXRTdGF0aXN0aWNzRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICByZXN0eXBlLFxuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgICAgICBjb21wMSxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQ1LFxufTtcbmNvbnN0IGxpc3RDb250YWluZXJzU2VnbWVudE9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIvXCIsXG4gICAgaHR0cE1ldGhvZDogXCJHRVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBMaXN0Q29udGFpbmVyc1NlZ21lbnRSZXNwb25zZSxcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFNlcnZpY2VMaXN0Q29udGFpbmVyc1NlZ21lbnRIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBTZXJ2aWNlTGlzdENvbnRhaW5lcnNTZWdtZW50RXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgICAgICBjb21wMixcbiAgICAgICAgcHJlZml4LFxuICAgICAgICBtYXJrZXIsXG4gICAgICAgIG1heFBhZ2VTaXplLFxuICAgICAgICBpbmNsdWRlLFxuICAgIF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDUsXG59O1xuY29uc3QgZ2V0VXNlckRlbGVnYXRpb25LZXlPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL1wiLFxuICAgIGh0dHBNZXRob2Q6IFwiUE9TVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFVzZXJEZWxlZ2F0aW9uS2V5LFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogU2VydmljZUdldFVzZXJEZWxlZ2F0aW9uS2V5SGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogU2VydmljZUdldFVzZXJEZWxlZ2F0aW9uS2V5RXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHJlcXVlc3RCb2R5OiBrZXlJbmZvLFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICByZXN0eXBlLFxuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgICAgICBjb21wMyxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgY29udGVudFR5cGUsXG4gICAgICAgIGFjY2VwdCxcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgY29udGVudFR5cGU6IFwiYXBwbGljYXRpb24veG1sOyBjaGFyc2V0PXV0Zi04XCIsXG4gICAgbWVkaWFUeXBlOiBcInhtbFwiLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkNSxcbn07XG5jb25zdCBnZXRBY2NvdW50SW5mb09wZXJhdGlvblNwZWMkMiA9IHtcbiAgICBwYXRoOiBcIi9cIixcbiAgICBodHRwTWV0aG9kOiBcIkdFVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFNlcnZpY2VHZXRBY2NvdW50SW5mb0hlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFNlcnZpY2VHZXRBY2NvdW50SW5mb0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFtcbiAgICAgICAgY29tcCxcbiAgICAgICAgdGltZW91dEluU2Vjb25kcyxcbiAgICAgICAgcmVzdHlwZTEsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkNSxcbn07XG5jb25zdCBzdWJtaXRCYXRjaE9wZXJhdGlvblNwZWMkMSA9IHtcbiAgICBwYXRoOiBcIi9cIixcbiAgICBodHRwTWV0aG9kOiBcIlBPU1RcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAyOiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogeyBuYW1lOiBcIlN0cmVhbVwiIH0sXG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwicGFyc2VkUmVzcG9uc2VcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBTZXJ2aWNlU3VibWl0QmF0Y2hIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBTZXJ2aWNlU3VibWl0QmF0Y2hFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcmVxdWVzdEJvZHk6IGJvZHksXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbdGltZW91dEluU2Vjb25kcywgY29tcDRdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgYWNjZXB0LFxuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGNvbnRlbnRMZW5ndGgsXG4gICAgICAgIG11bHRpcGFydENvbnRlbnRUeXBlLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgY29udGVudFR5cGU6IFwiYXBwbGljYXRpb24veG1sOyBjaGFyc2V0PXV0Zi04XCIsXG4gICAgbWVkaWFUeXBlOiBcInhtbFwiLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkNSxcbn07XG5jb25zdCBmaWx0ZXJCbG9ic09wZXJhdGlvblNwZWMkMSA9IHtcbiAgICBwYXRoOiBcIi9cIixcbiAgICBodHRwTWV0aG9kOiBcIkdFVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IEZpbHRlckJsb2JTZWdtZW50LFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogU2VydmljZUZpbHRlckJsb2JzSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogU2VydmljZUZpbHRlckJsb2JzRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgICAgICBtYXJrZXIsXG4gICAgICAgIG1heFBhZ2VTaXplLFxuICAgICAgICBjb21wNSxcbiAgICAgICAgd2hlcmUsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkNSxcbn07XG5cbi8qXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAqXG4gKiBDb2RlIGdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEF1dG9SZXN0IENvZGUgR2VuZXJhdG9yLlxuICogQ2hhbmdlcyBtYXkgY2F1c2UgaW5jb3JyZWN0IGJlaGF2aW9yIGFuZCB3aWxsIGJlIGxvc3QgaWYgdGhlIGNvZGUgaXMgcmVnZW5lcmF0ZWQuXG4gKi9cbi8qKiBDbGFzcyBjb250YWluaW5nIENvbnRhaW5lciBvcGVyYXRpb25zLiAqL1xuY2xhc3MgQ29udGFpbmVySW1wbCB7XG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgY2xhc3MgQ29udGFpbmVyIGNsYXNzLlxuICAgICAqIEBwYXJhbSBjbGllbnQgUmVmZXJlbmNlIHRvIHRoZSBzZXJ2aWNlIGNsaWVudFxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGNsaWVudCkge1xuICAgICAgICB0aGlzLmNsaWVudCA9IGNsaWVudDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogY3JlYXRlcyBhIG5ldyBjb250YWluZXIgdW5kZXIgdGhlIHNwZWNpZmllZCBhY2NvdW50LiBJZiB0aGUgY29udGFpbmVyIHdpdGggdGhlIHNhbWUgbmFtZSBhbHJlYWR5XG4gICAgICogZXhpc3RzLCB0aGUgb3BlcmF0aW9uIGZhaWxzXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBjcmVhdGUob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIGNyZWF0ZU9wZXJhdGlvblNwZWMkMik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHJldHVybnMgYWxsIHVzZXItZGVmaW5lZCBtZXRhZGF0YSBhbmQgc3lzdGVtIHByb3BlcnRpZXMgZm9yIHRoZSBzcGVjaWZpZWQgY29udGFpbmVyLiBUaGUgZGF0YVxuICAgICAqIHJldHVybmVkIGRvZXMgbm90IGluY2x1ZGUgdGhlIGNvbnRhaW5lcidzIGxpc3Qgb2YgYmxvYnNcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGdldFByb3BlcnRpZXMob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIGdldFByb3BlcnRpZXNPcGVyYXRpb25TcGVjJDEpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBvcGVyYXRpb24gbWFya3MgdGhlIHNwZWNpZmllZCBjb250YWluZXIgZm9yIGRlbGV0aW9uLiBUaGUgY29udGFpbmVyIGFuZCBhbnkgYmxvYnMgY29udGFpbmVkIHdpdGhpblxuICAgICAqIGl0IGFyZSBsYXRlciBkZWxldGVkIGR1cmluZyBnYXJiYWdlIGNvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGRlbGV0ZShvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgZGVsZXRlT3BlcmF0aW9uU3BlYyQxKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogb3BlcmF0aW9uIHNldHMgb25lIG9yIG1vcmUgdXNlci1kZWZpbmVkIG5hbWUtdmFsdWUgcGFpcnMgZm9yIHRoZSBzcGVjaWZpZWQgY29udGFpbmVyLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgc2V0TWV0YWRhdGEob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIHNldE1ldGFkYXRhT3BlcmF0aW9uU3BlYyQxKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogZ2V0cyB0aGUgcGVybWlzc2lvbnMgZm9yIHRoZSBzcGVjaWZpZWQgY29udGFpbmVyLiBUaGUgcGVybWlzc2lvbnMgaW5kaWNhdGUgd2hldGhlciBjb250YWluZXIgZGF0YVxuICAgICAqIG1heSBiZSBhY2Nlc3NlZCBwdWJsaWNseS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGdldEFjY2Vzc1BvbGljeShvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgZ2V0QWNjZXNzUG9saWN5T3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHNldHMgdGhlIHBlcm1pc3Npb25zIGZvciB0aGUgc3BlY2lmaWVkIGNvbnRhaW5lci4gVGhlIHBlcm1pc3Npb25zIGluZGljYXRlIHdoZXRoZXIgYmxvYnMgaW4gYVxuICAgICAqIGNvbnRhaW5lciBtYXkgYmUgYWNjZXNzZWQgcHVibGljbHkuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBzZXRBY2Nlc3NQb2xpY3kob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIHNldEFjY2Vzc1BvbGljeU9wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXN0b3JlcyBhIHByZXZpb3VzbHktZGVsZXRlZCBjb250YWluZXIuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICByZXN0b3JlKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgb3B0aW9ucyB9LCByZXN0b3JlT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlbmFtZXMgYW4gZXhpc3RpbmcgY29udGFpbmVyLlxuICAgICAqIEBwYXJhbSBzb3VyY2VDb250YWluZXJOYW1lIFJlcXVpcmVkLiAgU3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBjb250YWluZXIgdG8gcmVuYW1lLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgcmVuYW1lKHNvdXJjZUNvbnRhaW5lck5hbWUsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgc291cmNlQ29udGFpbmVyTmFtZSwgb3B0aW9ucyB9LCByZW5hbWVPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIEJhdGNoIG9wZXJhdGlvbiBhbGxvd3MgbXVsdGlwbGUgQVBJIGNhbGxzIHRvIGJlIGVtYmVkZGVkIGludG8gYSBzaW5nbGUgSFRUUCByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBjb250ZW50TGVuZ3RoIFRoZSBsZW5ndGggb2YgdGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIG11bHRpcGFydENvbnRlbnRUeXBlIFJlcXVpcmVkLiBUaGUgdmFsdWUgb2YgdGhpcyBoZWFkZXIgbXVzdCBiZSBtdWx0aXBhcnQvbWl4ZWQgd2l0aCBhIGJhdGNoXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kYXJ5LiBFeGFtcGxlIGhlYWRlciB2YWx1ZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT1iYXRjaF88R1VJRD5cbiAgICAgKiBAcGFyYW0gYm9keSBJbml0aWFsIGRhdGFcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIHN1Ym1pdEJhdGNoKGNvbnRlbnRMZW5ndGgsIG11bHRpcGFydENvbnRlbnRUeXBlLCBib2R5LCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IGNvbnRlbnRMZW5ndGgsIG11bHRpcGFydENvbnRlbnRUeXBlLCBib2R5LCBvcHRpb25zIH0sIHN1Ym1pdEJhdGNoT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBGaWx0ZXIgQmxvYnMgb3BlcmF0aW9uIGVuYWJsZXMgY2FsbGVycyB0byBsaXN0IGJsb2JzIGluIGEgY29udGFpbmVyIHdob3NlIHRhZ3MgbWF0Y2ggYSBnaXZlblxuICAgICAqIHNlYXJjaCBleHByZXNzaW9uLiAgRmlsdGVyIGJsb2JzIHNlYXJjaGVzIHdpdGhpbiB0aGUgZ2l2ZW4gY29udGFpbmVyLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgZmlsdGVyQmxvYnMob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIGZpbHRlckJsb2JzT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFtVcGRhdGVdIGVzdGFibGlzaGVzIGFuZCBtYW5hZ2VzIGEgbG9jayBvbiBhIGNvbnRhaW5lciBmb3IgZGVsZXRlIG9wZXJhdGlvbnMuIFRoZSBsb2NrIGR1cmF0aW9uIGNhblxuICAgICAqIGJlIDE1IHRvIDYwIHNlY29uZHMsIG9yIGNhbiBiZSBpbmZpbml0ZVxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgYWNxdWlyZUxlYXNlKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgb3B0aW9ucyB9LCBhY3F1aXJlTGVhc2VPcGVyYXRpb25TcGVjJDEpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBbVXBkYXRlXSBlc3RhYmxpc2hlcyBhbmQgbWFuYWdlcyBhIGxvY2sgb24gYSBjb250YWluZXIgZm9yIGRlbGV0ZSBvcGVyYXRpb25zLiBUaGUgbG9jayBkdXJhdGlvbiBjYW5cbiAgICAgKiBiZSAxNSB0byA2MCBzZWNvbmRzLCBvciBjYW4gYmUgaW5maW5pdGVcbiAgICAgKiBAcGFyYW0gbGVhc2VJZCBTcGVjaWZpZXMgdGhlIGN1cnJlbnQgbGVhc2UgSUQgb24gdGhlIHJlc291cmNlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgcmVsZWFzZUxlYXNlKGxlYXNlSWQsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgbGVhc2VJZCwgb3B0aW9ucyB9LCByZWxlYXNlTGVhc2VPcGVyYXRpb25TcGVjJDEpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBbVXBkYXRlXSBlc3RhYmxpc2hlcyBhbmQgbWFuYWdlcyBhIGxvY2sgb24gYSBjb250YWluZXIgZm9yIGRlbGV0ZSBvcGVyYXRpb25zLiBUaGUgbG9jayBkdXJhdGlvbiBjYW5cbiAgICAgKiBiZSAxNSB0byA2MCBzZWNvbmRzLCBvciBjYW4gYmUgaW5maW5pdGVcbiAgICAgKiBAcGFyYW0gbGVhc2VJZCBTcGVjaWZpZXMgdGhlIGN1cnJlbnQgbGVhc2UgSUQgb24gdGhlIHJlc291cmNlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgcmVuZXdMZWFzZShsZWFzZUlkLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IGxlYXNlSWQsIG9wdGlvbnMgfSwgcmVuZXdMZWFzZU9wZXJhdGlvblNwZWMkMSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFtVcGRhdGVdIGVzdGFibGlzaGVzIGFuZCBtYW5hZ2VzIGEgbG9jayBvbiBhIGNvbnRhaW5lciBmb3IgZGVsZXRlIG9wZXJhdGlvbnMuIFRoZSBsb2NrIGR1cmF0aW9uIGNhblxuICAgICAqIGJlIDE1IHRvIDYwIHNlY29uZHMsIG9yIGNhbiBiZSBpbmZpbml0ZVxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgYnJlYWtMZWFzZShvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgYnJlYWtMZWFzZU9wZXJhdGlvblNwZWMkMSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFtVcGRhdGVdIGVzdGFibGlzaGVzIGFuZCBtYW5hZ2VzIGEgbG9jayBvbiBhIGNvbnRhaW5lciBmb3IgZGVsZXRlIG9wZXJhdGlvbnMuIFRoZSBsb2NrIGR1cmF0aW9uIGNhblxuICAgICAqIGJlIDE1IHRvIDYwIHNlY29uZHMsIG9yIGNhbiBiZSBpbmZpbml0ZVxuICAgICAqIEBwYXJhbSBsZWFzZUlkIFNwZWNpZmllcyB0aGUgY3VycmVudCBsZWFzZSBJRCBvbiB0aGUgcmVzb3VyY2UuXG4gICAgICogQHBhcmFtIHByb3Bvc2VkTGVhc2VJZCBQcm9wb3NlZCBsZWFzZSBJRCwgaW4gYSBHVUlEIHN0cmluZyBmb3JtYXQuIFRoZSBCbG9iIHNlcnZpY2UgcmV0dXJucyA0MDBcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIChJbnZhbGlkIHJlcXVlc3QpIGlmIHRoZSBwcm9wb3NlZCBsZWFzZSBJRCBpcyBub3QgaW4gdGhlIGNvcnJlY3QgZm9ybWF0LiBTZWUgR3VpZCBDb25zdHJ1Y3RvclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgKFN0cmluZykgZm9yIGEgbGlzdCBvZiB2YWxpZCBHVUlEIHN0cmluZyBmb3JtYXRzLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgY2hhbmdlTGVhc2UobGVhc2VJZCwgcHJvcG9zZWRMZWFzZUlkLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IGxlYXNlSWQsIHByb3Bvc2VkTGVhc2VJZCwgb3B0aW9ucyB9LCBjaGFuZ2VMZWFzZU9wZXJhdGlvblNwZWMkMSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFtVcGRhdGVdIFRoZSBMaXN0IEJsb2JzIG9wZXJhdGlvbiByZXR1cm5zIGEgbGlzdCBvZiB0aGUgYmxvYnMgdW5kZXIgdGhlIHNwZWNpZmllZCBjb250YWluZXJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGxpc3RCbG9iRmxhdFNlZ21lbnQob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIGxpc3RCbG9iRmxhdFNlZ21lbnRPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogW1VwZGF0ZV0gVGhlIExpc3QgQmxvYnMgb3BlcmF0aW9uIHJldHVybnMgYSBsaXN0IG9mIHRoZSBibG9icyB1bmRlciB0aGUgc3BlY2lmaWVkIGNvbnRhaW5lclxuICAgICAqIEBwYXJhbSBkZWxpbWl0ZXIgV2hlbiB0aGUgcmVxdWVzdCBpbmNsdWRlcyB0aGlzIHBhcmFtZXRlciwgdGhlIG9wZXJhdGlvbiByZXR1cm5zIGEgQmxvYlByZWZpeFxuICAgICAqICAgICAgICAgICAgICAgICAgZWxlbWVudCBpbiB0aGUgcmVzcG9uc2UgYm9keSB0aGF0IGFjdHMgYXMgYSBwbGFjZWhvbGRlciBmb3IgYWxsIGJsb2JzIHdob3NlIG5hbWVzIGJlZ2luIHdpdGggdGhlXG4gICAgICogICAgICAgICAgICAgICAgICBzYW1lIHN1YnN0cmluZyB1cCB0byB0aGUgYXBwZWFyYW5jZSBvZiB0aGUgZGVsaW1pdGVyIGNoYXJhY3Rlci4gVGhlIGRlbGltaXRlciBtYXkgYmUgYSBzaW5nbGVcbiAgICAgKiAgICAgICAgICAgICAgICAgIGNoYXJhY3RlciBvciBhIHN0cmluZy5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGxpc3RCbG9iSGllcmFyY2h5U2VnbWVudChkZWxpbWl0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgZGVsaW1pdGVyLCBvcHRpb25zIH0sIGxpc3RCbG9iSGllcmFyY2h5U2VnbWVudE9wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBza3UgbmFtZSBhbmQgYWNjb3VudCBraW5kXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBnZXRBY2NvdW50SW5mbyhvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgZ2V0QWNjb3VudEluZm9PcGVyYXRpb25TcGVjJDEpO1xuICAgIH1cbn1cbi8vIE9wZXJhdGlvbiBTcGVjaWZpY2F0aW9uc1xuY29uc3QgeG1sU2VyaWFsaXplciQ0ID0gY29yZUNsaWVudF9fbmFtZXNwYWNlLmNyZWF0ZVNlcmlhbGl6ZXIoTWFwcGVycywgLyogaXNYbWwgKi8gdHJ1ZSk7XG5jb25zdCBjcmVhdGVPcGVyYXRpb25TcGVjJDIgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAxOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJDcmVhdGVIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJDcmVhdGVFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbdGltZW91dEluU2Vjb25kcywgcmVzdHlwZTJdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBtZXRhZGF0YSxcbiAgICAgICAgYWNjZXNzLFxuICAgICAgICBkZWZhdWx0RW5jcnlwdGlvblNjb3BlLFxuICAgICAgICBwcmV2ZW50RW5jcnlwdGlvblNjb3BlT3ZlcnJpZGUsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDQsXG59O1xuY29uc3QgZ2V0UHJvcGVydGllc09wZXJhdGlvblNwZWMkMSA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX1cIixcbiAgICBodHRwTWV0aG9kOiBcIkdFVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lckdldFByb3BlcnRpZXNIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJHZXRQcm9wZXJ0aWVzRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW3RpbWVvdXRJblNlY29uZHMsIHJlc3R5cGUyXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgbGVhc2VJZCxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkNCxcbn07XG5jb25zdCBkZWxldGVPcGVyYXRpb25TcGVjJDEgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJERUxFVEVcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAyOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJEZWxldGVIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJEZWxldGVFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbdGltZW91dEluU2Vjb25kcywgcmVzdHlwZTJdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQ0LFxufTtcbmNvbnN0IHNldE1ldGFkYXRhT3BlcmF0aW9uU3BlYyQxID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQ29udGFpbmVyU2V0TWV0YWRhdGFIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJTZXRNZXRhZGF0YUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFtcbiAgICAgICAgdGltZW91dEluU2Vjb25kcyxcbiAgICAgICAgcmVzdHlwZTIsXG4gICAgICAgIGNvbXA2LFxuICAgIF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIG1ldGFkYXRhLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDQsXG59O1xuY29uc3QgZ2V0QWNjZXNzUG9saWN5T3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX1cIixcbiAgICBodHRwTWV0aG9kOiBcIkdFVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU2VxdWVuY2VcIixcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogeyBuYW1lOiBcIkNvbXBvc2l0ZVwiLCBjbGFzc05hbWU6IFwiU2lnbmVkSWRlbnRpZmllclwiIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJTaWduZWRJZGVudGlmaWVyc1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiU2lnbmVkSWRlbnRpZmllcnNcIixcbiAgICAgICAgICAgICAgICB4bWxJc1dyYXBwZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sRWxlbWVudE5hbWU6IFwiU2lnbmVkSWRlbnRpZmllclwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lckdldEFjY2Vzc1BvbGljeUhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lckdldEFjY2Vzc1BvbGljeUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFtcbiAgICAgICAgdGltZW91dEluU2Vjb25kcyxcbiAgICAgICAgcmVzdHlwZTIsXG4gICAgICAgIGNvbXA3LFxuICAgIF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIGxlYXNlSWQsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDQsXG59O1xuY29uc3Qgc2V0QWNjZXNzUG9saWN5T3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lclNldEFjY2Vzc1BvbGljeUhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lclNldEFjY2Vzc1BvbGljeUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICByZXF1ZXN0Qm9keTogY29udGFpbmVyQWNsLFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgICAgICByZXN0eXBlMixcbiAgICAgICAgY29tcDcsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIGNvbnRlbnRUeXBlLFxuICAgICAgICBhY2NlcHQsXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXNzLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgY29udGVudFR5cGU6IFwiYXBwbGljYXRpb24veG1sOyBjaGFyc2V0PXV0Zi04XCIsXG4gICAgbWVkaWFUeXBlOiBcInhtbFwiLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkNCxcbn07XG5jb25zdCByZXN0b3JlT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDE6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lclJlc3RvcmVIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJSZXN0b3JlRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgICAgICByZXN0eXBlMixcbiAgICAgICAgY29tcDgsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgZGVsZXRlZENvbnRhaW5lck5hbWUsXG4gICAgICAgIGRlbGV0ZWRDb250YWluZXJWZXJzaW9uLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQ0LFxufTtcbmNvbnN0IHJlbmFtZU9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJSZW5hbWVIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJSZW5hbWVFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIHJlc3R5cGUyLFxuICAgICAgICBjb21wOSxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBzb3VyY2VDb250YWluZXJOYW1lLFxuICAgICAgICBzb3VyY2VMZWFzZUlkLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQ0LFxufTtcbmNvbnN0IHN1Ym1pdEJhdGNoT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBPU1RcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAyOiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogeyBuYW1lOiBcIlN0cmVhbVwiIH0sXG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwicGFyc2VkUmVzcG9uc2VcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJTdWJtaXRCYXRjaEhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lclN1Ym1pdEJhdGNoRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHJlcXVlc3RCb2R5OiBib2R5LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgICAgICBjb21wNCxcbiAgICAgICAgcmVzdHlwZTIsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIGFjY2VwdCxcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBjb250ZW50TGVuZ3RoLFxuICAgICAgICBtdWx0aXBhcnRDb250ZW50VHlwZSxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3htbDsgY2hhcnNldD11dGYtOFwiLFxuICAgIG1lZGlhVHlwZTogXCJ4bWxcIixcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDQsXG59O1xuY29uc3QgZmlsdGVyQmxvYnNPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiR0VUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogRmlsdGVyQmxvYlNlZ21lbnQsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJGaWx0ZXJCbG9ic0hlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lckZpbHRlckJsb2JzRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgICAgICBtYXJrZXIsXG4gICAgICAgIG1heFBhZ2VTaXplLFxuICAgICAgICBjb21wNSxcbiAgICAgICAgd2hlcmUsXG4gICAgICAgIHJlc3R5cGUyLFxuICAgIF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDQsXG59O1xuY29uc3QgYWNxdWlyZUxlYXNlT3BlcmF0aW9uU3BlYyQxID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMToge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQ29udGFpbmVyQWNxdWlyZUxlYXNlSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQ29udGFpbmVyQWNxdWlyZUxlYXNlRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgICAgICByZXN0eXBlMixcbiAgICAgICAgY29tcDEwLFxuICAgIF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgZHVyYXRpb24sXG4gICAgICAgIHByb3Bvc2VkTGVhc2VJZCxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkNCxcbn07XG5jb25zdCByZWxlYXNlTGVhc2VPcGVyYXRpb25TcGVjJDEgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJSZWxlYXNlTGVhc2VIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJSZWxlYXNlTGVhc2VFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIHJlc3R5cGUyLFxuICAgICAgICBjb21wMTAsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgYWN0aW9uMSxcbiAgICAgICAgbGVhc2VJZDEsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDQsXG59O1xuY29uc3QgcmVuZXdMZWFzZU9wZXJhdGlvblNwZWMkMSA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lclJlbmV3TGVhc2VIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJSZW5ld0xlYXNlRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgICAgICByZXN0eXBlMixcbiAgICAgICAgY29tcDEwLFxuICAgIF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIGxlYXNlSWQxLFxuICAgICAgICBhY3Rpb24yLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQ0LFxufTtcbmNvbnN0IGJyZWFrTGVhc2VPcGVyYXRpb25TcGVjJDEgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAyOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJCcmVha0xlYXNlSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQ29udGFpbmVyQnJlYWtMZWFzZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFtcbiAgICAgICAgdGltZW91dEluU2Vjb25kcyxcbiAgICAgICAgcmVzdHlwZTIsXG4gICAgICAgIGNvbXAxMCxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBhY3Rpb24zLFxuICAgICAgICBicmVha1BlcmlvZCxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkNCxcbn07XG5jb25zdCBjaGFuZ2VMZWFzZU9wZXJhdGlvblNwZWMkMSA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lckNoYW5nZUxlYXNlSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQ29udGFpbmVyQ2hhbmdlTGVhc2VFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIHJlc3R5cGUyLFxuICAgICAgICBjb21wMTAsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgbGVhc2VJZDEsXG4gICAgICAgIGFjdGlvbjQsXG4gICAgICAgIHByb3Bvc2VkTGVhc2VJZDEsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDQsXG59O1xuY29uc3QgbGlzdEJsb2JGbGF0U2VnbWVudE9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJHRVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBMaXN0QmxvYnNGbGF0U2VnbWVudFJlc3BvbnNlLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQ29udGFpbmVyTGlzdEJsb2JGbGF0U2VnbWVudEhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lckxpc3RCbG9iRmxhdFNlZ21lbnRFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIGNvbXAyLFxuICAgICAgICBwcmVmaXgsXG4gICAgICAgIG1hcmtlcixcbiAgICAgICAgbWF4UGFnZVNpemUsXG4gICAgICAgIHJlc3R5cGUyLFxuICAgICAgICBpbmNsdWRlMSxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQ0LFxufTtcbmNvbnN0IGxpc3RCbG9iSGllcmFyY2h5U2VnbWVudE9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJHRVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBMaXN0QmxvYnNIaWVyYXJjaHlTZWdtZW50UmVzcG9uc2UsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJMaXN0QmxvYkhpZXJhcmNoeVNlZ21lbnRIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJMaXN0QmxvYkhpZXJhcmNoeVNlZ21lbnRFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIGNvbXAyLFxuICAgICAgICBwcmVmaXgsXG4gICAgICAgIG1hcmtlcixcbiAgICAgICAgbWF4UGFnZVNpemUsXG4gICAgICAgIHJlc3R5cGUyLFxuICAgICAgICBpbmNsdWRlMSxcbiAgICAgICAgZGVsaW1pdGVyLFxuICAgIF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDQsXG59O1xuY29uc3QgZ2V0QWNjb3VudEluZm9PcGVyYXRpb25TcGVjJDEgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJHRVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJHZXRBY2NvdW50SW5mb0hlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lckdldEFjY291bnRJbmZvRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICBjb21wLFxuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgICAgICByZXN0eXBlMSxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQ0LFxufTtcblxuLypcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuICpcbiAqIENvZGUgZ2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgQXV0b1Jlc3QgQ29kZSBHZW5lcmF0b3IuXG4gKiBDaGFuZ2VzIG1heSBjYXVzZSBpbmNvcnJlY3QgYmVoYXZpb3IgYW5kIHdpbGwgYmUgbG9zdCBpZiB0aGUgY29kZSBpcyByZWdlbmVyYXRlZC5cbiAqL1xuLyoqIENsYXNzIGNvbnRhaW5pbmcgQmxvYiBvcGVyYXRpb25zLiAqL1xuY2xhc3MgQmxvYkltcGwge1xuICAgIC8qKlxuICAgICAqIEluaXRpYWxpemUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIGNsYXNzIEJsb2IgY2xhc3MuXG4gICAgICogQHBhcmFtIGNsaWVudCBSZWZlcmVuY2UgdG8gdGhlIHNlcnZpY2UgY2xpZW50XG4gICAgICovXG4gICAgY29uc3RydWN0b3IoY2xpZW50KSB7XG4gICAgICAgIHRoaXMuY2xpZW50ID0gY2xpZW50O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgRG93bmxvYWQgb3BlcmF0aW9uIHJlYWRzIG9yIGRvd25sb2FkcyBhIGJsb2IgZnJvbSB0aGUgc3lzdGVtLCBpbmNsdWRpbmcgaXRzIG1ldGFkYXRhIGFuZFxuICAgICAqIHByb3BlcnRpZXMuIFlvdSBjYW4gYWxzbyBjYWxsIERvd25sb2FkIHRvIHJlYWQgYSBzbmFwc2hvdC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGRvd25sb2FkKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgb3B0aW9ucyB9LCBkb3dubG9hZE9wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgR2V0IFByb3BlcnRpZXMgb3BlcmF0aW9uIHJldHVybnMgYWxsIHVzZXItZGVmaW5lZCBtZXRhZGF0YSwgc3RhbmRhcmQgSFRUUCBwcm9wZXJ0aWVzLCBhbmQgc3lzdGVtXG4gICAgICogcHJvcGVydGllcyBmb3IgdGhlIGJsb2IuIEl0IGRvZXMgbm90IHJldHVybiB0aGUgY29udGVudCBvZiB0aGUgYmxvYi5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGdldFByb3BlcnRpZXMob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIGdldFByb3BlcnRpZXNPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSWYgdGhlIHN0b3JhZ2UgYWNjb3VudCdzIHNvZnQgZGVsZXRlIGZlYXR1cmUgaXMgZGlzYWJsZWQgdGhlbiwgd2hlbiBhIGJsb2IgaXMgZGVsZXRlZCwgaXQgaXNcbiAgICAgKiBwZXJtYW5lbnRseSByZW1vdmVkIGZyb20gdGhlIHN0b3JhZ2UgYWNjb3VudC4gSWYgdGhlIHN0b3JhZ2UgYWNjb3VudCdzIHNvZnQgZGVsZXRlIGZlYXR1cmUgaXNcbiAgICAgKiBlbmFibGVkLCB0aGVuLCB3aGVuIGEgYmxvYiBpcyBkZWxldGVkLCBpdCBpcyBtYXJrZWQgZm9yIGRlbGV0aW9uIGFuZCBiZWNvbWVzIGluYWNjZXNzaWJsZVxuICAgICAqIGltbWVkaWF0ZWx5LiBIb3dldmVyLCB0aGUgYmxvYiBzZXJ2aWNlIHJldGFpbnMgdGhlIGJsb2Igb3Igc25hcHNob3QgZm9yIHRoZSBudW1iZXIgb2YgZGF5cyBzcGVjaWZpZWRcbiAgICAgKiBieSB0aGUgRGVsZXRlUmV0ZW50aW9uUG9saWN5IHNlY3Rpb24gb2YgW1N0b3JhZ2Ugc2VydmljZSBwcm9wZXJ0aWVzXVxuICAgICAqIChTZXQtQmxvYi1TZXJ2aWNlLVByb3BlcnRpZXMubWQpLiBBZnRlciB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBkYXlzIGhhcyBwYXNzZWQsIHRoZSBibG9iJ3MgZGF0YSBpc1xuICAgICAqIHBlcm1hbmVudGx5IHJlbW92ZWQgZnJvbSB0aGUgc3RvcmFnZSBhY2NvdW50LiBOb3RlIHRoYXQgeW91IGNvbnRpbnVlIHRvIGJlIGNoYXJnZWQgZm9yIHRoZVxuICAgICAqIHNvZnQtZGVsZXRlZCBibG9iJ3Mgc3RvcmFnZSB1bnRpbCBpdCBpcyBwZXJtYW5lbnRseSByZW1vdmVkLiBVc2UgdGhlIExpc3QgQmxvYnMgQVBJIGFuZCBzcGVjaWZ5IHRoZVxuICAgICAqIFwiaW5jbHVkZT1kZWxldGVkXCIgcXVlcnkgcGFyYW1ldGVyIHRvIGRpc2NvdmVyIHdoaWNoIGJsb2JzIGFuZCBzbmFwc2hvdHMgaGF2ZSBiZWVuIHNvZnQgZGVsZXRlZC4gWW91XG4gICAgICogY2FuIHRoZW4gdXNlIHRoZSBVbmRlbGV0ZSBCbG9iIEFQSSB0byByZXN0b3JlIGEgc29mdC1kZWxldGVkIGJsb2IuIEFsbCBvdGhlciBvcGVyYXRpb25zIG9uIGFcbiAgICAgKiBzb2Z0LWRlbGV0ZWQgYmxvYiBvciBzbmFwc2hvdCBjYXVzZXMgdGhlIHNlcnZpY2UgdG8gcmV0dXJuIGFuIEhUVFAgc3RhdHVzIGNvZGUgb2YgNDA0XG4gICAgICogKFJlc291cmNlTm90Rm91bmQpLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgZGVsZXRlKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgb3B0aW9ucyB9LCBkZWxldGVPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVW5kZWxldGUgYSBibG9iIHRoYXQgd2FzIHByZXZpb3VzbHkgc29mdCBkZWxldGVkXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICB1bmRlbGV0ZShvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgdW5kZWxldGVPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgdGltZSBhIGJsb2Igd2lsbCBleHBpcmUgYW5kIGJlIGRlbGV0ZWQuXG4gICAgICogQHBhcmFtIGV4cGlyeU9wdGlvbnMgUmVxdWlyZWQuIEluZGljYXRlcyBtb2RlIG9mIHRoZSBleHBpcnkgdGltZVxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgc2V0RXhwaXJ5KGV4cGlyeU9wdGlvbnMsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgZXhwaXJ5T3B0aW9ucywgb3B0aW9ucyB9LCBzZXRFeHBpcnlPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIFNldCBIVFRQIEhlYWRlcnMgb3BlcmF0aW9uIHNldHMgc3lzdGVtIHByb3BlcnRpZXMgb24gdGhlIGJsb2JcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIHNldEh0dHBIZWFkZXJzKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgb3B0aW9ucyB9LCBzZXRIdHRwSGVhZGVyc09wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgU2V0IEltbXV0YWJpbGl0eSBQb2xpY3kgb3BlcmF0aW9uIHNldHMgdGhlIGltbXV0YWJpbGl0eSBwb2xpY3kgb24gdGhlIGJsb2JcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIHNldEltbXV0YWJpbGl0eVBvbGljeShvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgc2V0SW1tdXRhYmlsaXR5UG9saWN5T3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBEZWxldGUgSW1tdXRhYmlsaXR5IFBvbGljeSBvcGVyYXRpb24gZGVsZXRlcyB0aGUgaW1tdXRhYmlsaXR5IHBvbGljeSBvbiB0aGUgYmxvYlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgZGVsZXRlSW1tdXRhYmlsaXR5UG9saWN5KG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgb3B0aW9ucyB9LCBkZWxldGVJbW11dGFiaWxpdHlQb2xpY3lPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIFNldCBMZWdhbCBIb2xkIG9wZXJhdGlvbiBzZXRzIGEgbGVnYWwgaG9sZCBvbiB0aGUgYmxvYi5cbiAgICAgKiBAcGFyYW0gbGVnYWxIb2xkIFNwZWNpZmllZCBpZiBhIGxlZ2FsIGhvbGQgc2hvdWxkIGJlIHNldCBvbiB0aGUgYmxvYi5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIHNldExlZ2FsSG9sZChsZWdhbEhvbGQsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgbGVnYWxIb2xkLCBvcHRpb25zIH0sIHNldExlZ2FsSG9sZE9wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgU2V0IEJsb2IgTWV0YWRhdGEgb3BlcmF0aW9uIHNldHMgdXNlci1kZWZpbmVkIG1ldGFkYXRhIGZvciB0aGUgc3BlY2lmaWVkIGJsb2IgYXMgb25lIG9yIG1vcmVcbiAgICAgKiBuYW1lLXZhbHVlIHBhaXJzXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBzZXRNZXRhZGF0YShvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgc2V0TWV0YWRhdGFPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogW1VwZGF0ZV0gVGhlIExlYXNlIEJsb2Igb3BlcmF0aW9uIGVzdGFibGlzaGVzIGFuZCBtYW5hZ2VzIGEgbG9jayBvbiBhIGJsb2IgZm9yIHdyaXRlIGFuZCBkZWxldGVcbiAgICAgKiBvcGVyYXRpb25zXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBhY3F1aXJlTGVhc2Uob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIGFjcXVpcmVMZWFzZU9wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBbVXBkYXRlXSBUaGUgTGVhc2UgQmxvYiBvcGVyYXRpb24gZXN0YWJsaXNoZXMgYW5kIG1hbmFnZXMgYSBsb2NrIG9uIGEgYmxvYiBmb3Igd3JpdGUgYW5kIGRlbGV0ZVxuICAgICAqIG9wZXJhdGlvbnNcbiAgICAgKiBAcGFyYW0gbGVhc2VJZCBTcGVjaWZpZXMgdGhlIGN1cnJlbnQgbGVhc2UgSUQgb24gdGhlIHJlc291cmNlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgcmVsZWFzZUxlYXNlKGxlYXNlSWQsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgbGVhc2VJZCwgb3B0aW9ucyB9LCByZWxlYXNlTGVhc2VPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogW1VwZGF0ZV0gVGhlIExlYXNlIEJsb2Igb3BlcmF0aW9uIGVzdGFibGlzaGVzIGFuZCBtYW5hZ2VzIGEgbG9jayBvbiBhIGJsb2IgZm9yIHdyaXRlIGFuZCBkZWxldGVcbiAgICAgKiBvcGVyYXRpb25zXG4gICAgICogQHBhcmFtIGxlYXNlSWQgU3BlY2lmaWVzIHRoZSBjdXJyZW50IGxlYXNlIElEIG9uIHRoZSByZXNvdXJjZS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIHJlbmV3TGVhc2UobGVhc2VJZCwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBsZWFzZUlkLCBvcHRpb25zIH0sIHJlbmV3TGVhc2VPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogW1VwZGF0ZV0gVGhlIExlYXNlIEJsb2Igb3BlcmF0aW9uIGVzdGFibGlzaGVzIGFuZCBtYW5hZ2VzIGEgbG9jayBvbiBhIGJsb2IgZm9yIHdyaXRlIGFuZCBkZWxldGVcbiAgICAgKiBvcGVyYXRpb25zXG4gICAgICogQHBhcmFtIGxlYXNlSWQgU3BlY2lmaWVzIHRoZSBjdXJyZW50IGxlYXNlIElEIG9uIHRoZSByZXNvdXJjZS5cbiAgICAgKiBAcGFyYW0gcHJvcG9zZWRMZWFzZUlkIFByb3Bvc2VkIGxlYXNlIElELCBpbiBhIEdVSUQgc3RyaW5nIGZvcm1hdC4gVGhlIEJsb2Igc2VydmljZSByZXR1cm5zIDQwMFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgKEludmFsaWQgcmVxdWVzdCkgaWYgdGhlIHByb3Bvc2VkIGxlYXNlIElEIGlzIG5vdCBpbiB0aGUgY29ycmVjdCBmb3JtYXQuIFNlZSBHdWlkIENvbnN0cnVjdG9yXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAoU3RyaW5nKSBmb3IgYSBsaXN0IG9mIHZhbGlkIEdVSUQgc3RyaW5nIGZvcm1hdHMuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBjaGFuZ2VMZWFzZShsZWFzZUlkLCBwcm9wb3NlZExlYXNlSWQsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgbGVhc2VJZCwgcHJvcG9zZWRMZWFzZUlkLCBvcHRpb25zIH0sIGNoYW5nZUxlYXNlT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFtVcGRhdGVdIFRoZSBMZWFzZSBCbG9iIG9wZXJhdGlvbiBlc3RhYmxpc2hlcyBhbmQgbWFuYWdlcyBhIGxvY2sgb24gYSBibG9iIGZvciB3cml0ZSBhbmQgZGVsZXRlXG4gICAgICogb3BlcmF0aW9uc1xuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgYnJlYWtMZWFzZShvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgYnJlYWtMZWFzZU9wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgQ3JlYXRlIFNuYXBzaG90IG9wZXJhdGlvbiBjcmVhdGVzIGEgcmVhZC1vbmx5IHNuYXBzaG90IG9mIGEgYmxvYlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgY3JlYXRlU25hcHNob3Qob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIGNyZWF0ZVNuYXBzaG90T3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBTdGFydCBDb3B5IEZyb20gVVJMIG9wZXJhdGlvbiBjb3BpZXMgYSBibG9iIG9yIGFuIGludGVybmV0IHJlc291cmNlIHRvIGEgbmV3IGJsb2IuXG4gICAgICogQHBhcmFtIGNvcHlTb3VyY2UgU3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBzb3VyY2UgcGFnZSBibG9iIHNuYXBzaG90LiBUaGlzIHZhbHVlIGlzIGEgVVJMIG9mIHVwIHRvXG4gICAgICogICAgICAgICAgICAgICAgICAgMiBLQiBpbiBsZW5ndGggdGhhdCBzcGVjaWZpZXMgYSBwYWdlIGJsb2Igc25hcHNob3QuIFRoZSB2YWx1ZSBzaG91bGQgYmUgVVJMLWVuY29kZWQgYXMgaXQgd291bGRcbiAgICAgKiAgICAgICAgICAgICAgICAgICBhcHBlYXIgaW4gYSByZXF1ZXN0IFVSSS4gVGhlIHNvdXJjZSBibG9iIG11c3QgZWl0aGVyIGJlIHB1YmxpYyBvciBtdXN0IGJlIGF1dGhlbnRpY2F0ZWQgdmlhIGEgc2hhcmVkXG4gICAgICogICAgICAgICAgICAgICAgICAgYWNjZXNzIHNpZ25hdHVyZS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIHN0YXJ0Q29weUZyb21VUkwoY29weVNvdXJjZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBjb3B5U291cmNlLCBvcHRpb25zIH0sIHN0YXJ0Q29weUZyb21VUkxPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIENvcHkgRnJvbSBVUkwgb3BlcmF0aW9uIGNvcGllcyBhIGJsb2Igb3IgYW4gaW50ZXJuZXQgcmVzb3VyY2UgdG8gYSBuZXcgYmxvYi4gSXQgd2lsbCBub3QgcmV0dXJuXG4gICAgICogYSByZXNwb25zZSB1bnRpbCB0aGUgY29weSBpcyBjb21wbGV0ZS5cbiAgICAgKiBAcGFyYW0gY29weVNvdXJjZSBTcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIHNvdXJjZSBwYWdlIGJsb2Igc25hcHNob3QuIFRoaXMgdmFsdWUgaXMgYSBVUkwgb2YgdXAgdG9cbiAgICAgKiAgICAgICAgICAgICAgICAgICAyIEtCIGluIGxlbmd0aCB0aGF0IHNwZWNpZmllcyBhIHBhZ2UgYmxvYiBzbmFwc2hvdC4gVGhlIHZhbHVlIHNob3VsZCBiZSBVUkwtZW5jb2RlZCBhcyBpdCB3b3VsZFxuICAgICAqICAgICAgICAgICAgICAgICAgIGFwcGVhciBpbiBhIHJlcXVlc3QgVVJJLiBUaGUgc291cmNlIGJsb2IgbXVzdCBlaXRoZXIgYmUgcHVibGljIG9yIG11c3QgYmUgYXV0aGVudGljYXRlZCB2aWEgYSBzaGFyZWRcbiAgICAgKiAgICAgICAgICAgICAgICAgICBhY2Nlc3Mgc2lnbmF0dXJlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgY29weUZyb21VUkwoY29weVNvdXJjZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBjb3B5U291cmNlLCBvcHRpb25zIH0sIGNvcHlGcm9tVVJMT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBBYm9ydCBDb3B5IEZyb20gVVJMIG9wZXJhdGlvbiBhYm9ydHMgYSBwZW5kaW5nIENvcHkgRnJvbSBVUkwgb3BlcmF0aW9uLCBhbmQgbGVhdmVzIGEgZGVzdGluYXRpb25cbiAgICAgKiBibG9iIHdpdGggemVybyBsZW5ndGggYW5kIGZ1bGwgbWV0YWRhdGEuXG4gICAgICogQHBhcmFtIGNvcHlJZCBUaGUgY29weSBpZGVudGlmaWVyIHByb3ZpZGVkIGluIHRoZSB4LW1zLWNvcHktaWQgaGVhZGVyIG9mIHRoZSBvcmlnaW5hbCBDb3B5IEJsb2JcbiAgICAgKiAgICAgICAgICAgICAgIG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGFib3J0Q29weUZyb21VUkwoY29weUlkLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IGNvcHlJZCwgb3B0aW9ucyB9LCBhYm9ydENvcHlGcm9tVVJMT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBTZXQgVGllciBvcGVyYXRpb24gc2V0cyB0aGUgdGllciBvbiBhIGJsb2IuIFRoZSBvcGVyYXRpb24gaXMgYWxsb3dlZCBvbiBhIHBhZ2UgYmxvYiBpbiBhIHByZW1pdW1cbiAgICAgKiBzdG9yYWdlIGFjY291bnQgYW5kIG9uIGEgYmxvY2sgYmxvYiBpbiBhIGJsb2Igc3RvcmFnZSBhY2NvdW50IChsb2NhbGx5IHJlZHVuZGFudCBzdG9yYWdlIG9ubHkpLiBBXG4gICAgICogcHJlbWl1bSBwYWdlIGJsb2IncyB0aWVyIGRldGVybWluZXMgdGhlIGFsbG93ZWQgc2l6ZSwgSU9QUywgYW5kIGJhbmR3aWR0aCBvZiB0aGUgYmxvYi4gQSBibG9ja1xuICAgICAqIGJsb2IncyB0aWVyIGRldGVybWluZXMgSG90L0Nvb2wvQXJjaGl2ZSBzdG9yYWdlIHR5cGUuIFRoaXMgb3BlcmF0aW9uIGRvZXMgbm90IHVwZGF0ZSB0aGUgYmxvYidzXG4gICAgICogRVRhZy5cbiAgICAgKiBAcGFyYW0gdGllciBJbmRpY2F0ZXMgdGhlIHRpZXIgdG8gYmUgc2V0IG9uIHRoZSBibG9iLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgc2V0VGllcih0aWVyLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IHRpZXIsIG9wdGlvbnMgfSwgc2V0VGllck9wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBza3UgbmFtZSBhbmQgYWNjb3VudCBraW5kXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBnZXRBY2NvdW50SW5mbyhvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgZ2V0QWNjb3VudEluZm9PcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIFF1ZXJ5IG9wZXJhdGlvbiBlbmFibGVzIHVzZXJzIHRvIHNlbGVjdC9wcm9qZWN0IG9uIGJsb2IgZGF0YSBieSBwcm92aWRpbmcgc2ltcGxlIHF1ZXJ5XG4gICAgICogZXhwcmVzc2lvbnMuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBxdWVyeShvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgcXVlcnlPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIEdldCBUYWdzIG9wZXJhdGlvbiBlbmFibGVzIHVzZXJzIHRvIGdldCB0aGUgdGFncyBhc3NvY2lhdGVkIHdpdGggYSBibG9iLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgZ2V0VGFncyhvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgZ2V0VGFnc09wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgU2V0IFRhZ3Mgb3BlcmF0aW9uIGVuYWJsZXMgdXNlcnMgdG8gc2V0IHRhZ3Mgb24gYSBibG9iLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgc2V0VGFncyhvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgc2V0VGFnc09wZXJhdGlvblNwZWMpO1xuICAgIH1cbn1cbi8vIE9wZXJhdGlvbiBTcGVjaWZpY2F0aW9uc1xuY29uc3QgeG1sU2VyaWFsaXplciQzID0gY29yZUNsaWVudF9fbmFtZXNwYWNlLmNyZWF0ZVNlcmlhbGl6ZXIoTWFwcGVycywgLyogaXNYbWwgKi8gdHJ1ZSk7XG5jb25zdCBkb3dubG9hZE9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiR0VUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjoge1xuICAgICAgICAgICAgICAgIHR5cGU6IHsgbmFtZTogXCJTdHJlYW1cIiB9LFxuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcInBhcnNlZFJlc3BvbnNlXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYkRvd25sb2FkSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgMjA2OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogeyBuYW1lOiBcIlN0cmVhbVwiIH0sXG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwicGFyc2VkUmVzcG9uc2VcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iRG93bmxvYWRIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iRG93bmxvYWRFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIHNuYXBzaG90LFxuICAgICAgICB2ZXJzaW9uSWQsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgcmFuZ2UsXG4gICAgICAgIHJhbmdlR2V0Q29udGVudE1ENSxcbiAgICAgICAgcmFuZ2VHZXRDb250ZW50Q1JDNjQsXG4gICAgICAgIGVuY3J5cHRpb25LZXksXG4gICAgICAgIGVuY3J5cHRpb25LZXlTaGEyNTYsXG4gICAgICAgIGVuY3J5cHRpb25BbGdvcml0aG0sXG4gICAgICAgIGlmTWF0Y2gsXG4gICAgICAgIGlmTm9uZU1hdGNoLFxuICAgICAgICBpZlRhZ3MsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDMsXG59O1xuY29uc3QgZ2V0UHJvcGVydGllc09wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiSEVBRFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JHZXRQcm9wZXJ0aWVzSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYkdldFByb3BlcnRpZXNFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIHNuYXBzaG90LFxuICAgICAgICB2ZXJzaW9uSWQsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgZW5jcnlwdGlvbktleSxcbiAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1NixcbiAgICAgICAgZW5jcnlwdGlvbkFsZ29yaXRobSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMyxcbn07XG5jb25zdCBkZWxldGVPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIkRFTEVURVwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDI6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JEZWxldGVIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iRGVsZXRlRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgICAgICBzbmFwc2hvdCxcbiAgICAgICAgdmVyc2lvbklkLFxuICAgICAgICBibG9iRGVsZXRlVHlwZSxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBpZk1hdGNoLFxuICAgICAgICBpZk5vbmVNYXRjaCxcbiAgICAgICAgaWZUYWdzLFxuICAgICAgICBkZWxldGVTbmFwc2hvdHMsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDMsXG59O1xuY29uc3QgdW5kZWxldGVPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JVbmRlbGV0ZUhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JVbmRlbGV0ZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzLCBjb21wOF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDMsXG59O1xuY29uc3Qgc2V0RXhwaXJ5T3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iU2V0RXhwaXJ5SGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYlNldEV4cGlyeUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzLCBjb21wMTFdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBleHBpcnlPcHRpb25zLFxuICAgICAgICBleHBpcmVzT24sXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDMsXG59O1xuY29uc3Qgc2V0SHR0cEhlYWRlcnNPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JTZXRIdHRwSGVhZGVyc0hlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JTZXRIdHRwSGVhZGVyc0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFtjb21wLCB0aW1lb3V0SW5TZWNvbmRzXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICAgICAgYmxvYkNhY2hlQ29udHJvbCxcbiAgICAgICAgYmxvYkNvbnRlbnRUeXBlLFxuICAgICAgICBibG9iQ29udGVudE1ENSxcbiAgICAgICAgYmxvYkNvbnRlbnRFbmNvZGluZyxcbiAgICAgICAgYmxvYkNvbnRlbnRMYW5ndWFnZSxcbiAgICAgICAgYmxvYkNvbnRlbnREaXNwb3NpdGlvbixcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMyxcbn07XG5jb25zdCBzZXRJbW11dGFiaWxpdHlQb2xpY3lPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JTZXRJbW11dGFiaWxpdHlQb2xpY3lIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iU2V0SW1tdXRhYmlsaXR5UG9saWN5RXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW3RpbWVvdXRJblNlY29uZHMsIGNvbXAxMl0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBpbW11dGFiaWxpdHlQb2xpY3lFeHBpcnksXG4gICAgICAgIGltbXV0YWJpbGl0eVBvbGljeU1vZGUsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDMsXG59O1xuY29uc3QgZGVsZXRlSW1tdXRhYmlsaXR5UG9saWN5T3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJERUxFVEVcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iRGVsZXRlSW1tdXRhYmlsaXR5UG9saWN5SGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYkRlbGV0ZUltbXV0YWJpbGl0eVBvbGljeUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzLCBjb21wMTJdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQzLFxufTtcbmNvbnN0IHNldExlZ2FsSG9sZE9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYlNldExlZ2FsSG9sZEhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JTZXRMZWdhbEhvbGRFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbdGltZW91dEluU2Vjb25kcywgY29tcDEzXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgbGVnYWxIb2xkLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQzLFxufTtcbmNvbnN0IHNldE1ldGFkYXRhT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iU2V0TWV0YWRhdGFIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iU2V0TWV0YWRhdGFFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbdGltZW91dEluU2Vjb25kcywgY29tcDZdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBtZXRhZGF0YSxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgZW5jcnlwdGlvbktleSxcbiAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1NixcbiAgICAgICAgZW5jcnlwdGlvbkFsZ29yaXRobSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICAgICAgZW5jcnlwdGlvblNjb3BlLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQzLFxufTtcbmNvbnN0IGFjcXVpcmVMZWFzZU9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMToge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYkFjcXVpcmVMZWFzZUhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JBY3F1aXJlTGVhc2VFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbdGltZW91dEluU2Vjb25kcywgY29tcDEwXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBkdXJhdGlvbixcbiAgICAgICAgcHJvcG9zZWRMZWFzZUlkLFxuICAgICAgICBpZk1hdGNoLFxuICAgICAgICBpZk5vbmVNYXRjaCxcbiAgICAgICAgaWZUYWdzLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQzLFxufTtcbmNvbnN0IHJlbGVhc2VMZWFzZU9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYlJlbGVhc2VMZWFzZUhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JSZWxlYXNlTGVhc2VFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbdGltZW91dEluU2Vjb25kcywgY29tcDEwXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgYWN0aW9uMSxcbiAgICAgICAgbGVhc2VJZDEsXG4gICAgICAgIGlmTWF0Y2gsXG4gICAgICAgIGlmTm9uZU1hdGNoLFxuICAgICAgICBpZlRhZ3MsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDMsXG59O1xuY29uc3QgcmVuZXdMZWFzZU9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYlJlbmV3TGVhc2VIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iUmVuZXdMZWFzZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzLCBjb21wMTBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBsZWFzZUlkMSxcbiAgICAgICAgYWN0aW9uMixcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMyxcbn07XG5jb25zdCBjaGFuZ2VMZWFzZU9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYkNoYW5nZUxlYXNlSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYkNoYW5nZUxlYXNlRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW3RpbWVvdXRJblNlY29uZHMsIGNvbXAxMF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIGxlYXNlSWQxLFxuICAgICAgICBhY3Rpb240LFxuICAgICAgICBwcm9wb3NlZExlYXNlSWQxLFxuICAgICAgICBpZk1hdGNoLFxuICAgICAgICBpZk5vbmVNYXRjaCxcbiAgICAgICAgaWZUYWdzLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQzLFxufTtcbmNvbnN0IGJyZWFrTGVhc2VPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDI6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JCcmVha0xlYXNlSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYkJyZWFrTGVhc2VFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbdGltZW91dEluU2Vjb25kcywgY29tcDEwXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgYWN0aW9uMyxcbiAgICAgICAgYnJlYWtQZXJpb2QsXG4gICAgICAgIGlmTWF0Y2gsXG4gICAgICAgIGlmTm9uZU1hdGNoLFxuICAgICAgICBpZlRhZ3MsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDMsXG59O1xuY29uc3QgY3JlYXRlU25hcHNob3RPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDE6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JDcmVhdGVTbmFwc2hvdEhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JDcmVhdGVTbmFwc2hvdEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzLCBjb21wMTRdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBtZXRhZGF0YSxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgZW5jcnlwdGlvbktleSxcbiAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1NixcbiAgICAgICAgZW5jcnlwdGlvbkFsZ29yaXRobSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICAgICAgZW5jcnlwdGlvblNjb3BlLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQzLFxufTtcbmNvbnN0IHN0YXJ0Q29weUZyb21VUkxPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDI6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JTdGFydENvcHlGcm9tVVJMSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYlN0YXJ0Q29weUZyb21VUkxFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbdGltZW91dEluU2Vjb25kc10sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIG1ldGFkYXRhLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBpZk1hdGNoLFxuICAgICAgICBpZk5vbmVNYXRjaCxcbiAgICAgICAgaWZUYWdzLFxuICAgICAgICBpbW11dGFiaWxpdHlQb2xpY3lFeHBpcnksXG4gICAgICAgIGltbXV0YWJpbGl0eVBvbGljeU1vZGUsXG4gICAgICAgIHRpZXIsXG4gICAgICAgIHJlaHlkcmF0ZVByaW9yaXR5LFxuICAgICAgICBzb3VyY2VJZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIHNvdXJjZUlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBzb3VyY2VJZk1hdGNoLFxuICAgICAgICBzb3VyY2VJZk5vbmVNYXRjaCxcbiAgICAgICAgc291cmNlSWZUYWdzLFxuICAgICAgICBjb3B5U291cmNlLFxuICAgICAgICBibG9iVGFnc1N0cmluZyxcbiAgICAgICAgc2VhbEJsb2IsXG4gICAgICAgIGxlZ2FsSG9sZDEsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDMsXG59O1xuY29uc3QgY29weUZyb21VUkxPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDI6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JDb3B5RnJvbVVSTEhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JDb3B5RnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgbWV0YWRhdGEsXG4gICAgICAgIGxlYXNlSWQsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmTWF0Y2gsXG4gICAgICAgIGlmTm9uZU1hdGNoLFxuICAgICAgICBpZlRhZ3MsXG4gICAgICAgIGltbXV0YWJpbGl0eVBvbGljeUV4cGlyeSxcbiAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5TW9kZSxcbiAgICAgICAgZW5jcnlwdGlvblNjb3BlLFxuICAgICAgICB0aWVyLFxuICAgICAgICBzb3VyY2VJZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIHNvdXJjZUlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBzb3VyY2VJZk1hdGNoLFxuICAgICAgICBzb3VyY2VJZk5vbmVNYXRjaCxcbiAgICAgICAgY29weVNvdXJjZSxcbiAgICAgICAgYmxvYlRhZ3NTdHJpbmcsXG4gICAgICAgIGxlZ2FsSG9sZDEsXG4gICAgICAgIHhNc1JlcXVpcmVzU3luYyxcbiAgICAgICAgc291cmNlQ29udGVudE1ENSxcbiAgICAgICAgY29weVNvdXJjZUF1dGhvcml6YXRpb24sXG4gICAgICAgIGNvcHlTb3VyY2VUYWdzLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQzLFxufTtcbmNvbnN0IGFib3J0Q29weUZyb21VUkxPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDQ6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JBYm9ydENvcHlGcm9tVVJMSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYkFib3J0Q29weUZyb21VUkxFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIGNvbXAxNSxcbiAgICAgICAgY29weUlkLFxuICAgIF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIGxlYXNlSWQsXG4gICAgICAgIGNvcHlBY3Rpb25BYm9ydENvbnN0YW50LFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQzLFxufTtcbmNvbnN0IHNldFRpZXJPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JTZXRUaWVySGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgMjAyOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iU2V0VGllckhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JTZXRUaWVyRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgICAgICBzbmFwc2hvdCxcbiAgICAgICAgdmVyc2lvbklkLFxuICAgICAgICBjb21wMTYsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgaWZUYWdzLFxuICAgICAgICByZWh5ZHJhdGVQcmlvcml0eSxcbiAgICAgICAgdGllcjEsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDMsXG59O1xuY29uc3QgZ2V0QWNjb3VudEluZm9PcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIkdFVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JHZXRBY2NvdW50SW5mb0hlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JHZXRBY2NvdW50SW5mb0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFtcbiAgICAgICAgY29tcCxcbiAgICAgICAgdGltZW91dEluU2Vjb25kcyxcbiAgICAgICAgcmVzdHlwZTEsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMyxcbn07XG5jb25zdCBxdWVyeU9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUE9TVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiB7IG5hbWU6IFwiU3RyZWFtXCIgfSxcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJwYXJzZWRSZXNwb25zZVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JRdWVyeUhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIDIwNjoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjoge1xuICAgICAgICAgICAgICAgIHR5cGU6IHsgbmFtZTogXCJTdHJlYW1cIiB9LFxuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcInBhcnNlZFJlc3BvbnNlXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYlF1ZXJ5SGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYlF1ZXJ5RXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHJlcXVlc3RCb2R5OiBxdWVyeVJlcXVlc3QsXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIHNuYXBzaG90LFxuICAgICAgICBjb21wMTcsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIGNvbnRlbnRUeXBlLFxuICAgICAgICBhY2NlcHQsXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgZW5jcnlwdGlvbktleSxcbiAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1NixcbiAgICAgICAgZW5jcnlwdGlvbkFsZ29yaXRobSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3htbDsgY2hhcnNldD11dGYtOFwiLFxuICAgIG1lZGlhVHlwZTogXCJ4bWxcIixcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDMsXG59O1xuY29uc3QgZ2V0VGFnc09wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiR0VUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogQmxvYlRhZ3MsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iR2V0VGFnc0hlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JHZXRUYWdzRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgICAgICBzbmFwc2hvdCxcbiAgICAgICAgdmVyc2lvbklkLFxuICAgICAgICBjb21wMTgsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgaWZUYWdzLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQzLFxufTtcbmNvbnN0IHNldFRhZ3NPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDQ6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JTZXRUYWdzSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYlNldFRhZ3NFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcmVxdWVzdEJvZHk6IHRhZ3MsXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIHZlcnNpb25JZCxcbiAgICAgICAgY29tcDE4LFxuICAgIF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICBjb250ZW50VHlwZSxcbiAgICAgICAgYWNjZXB0LFxuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGxlYXNlSWQsXG4gICAgICAgIGlmVGFncyxcbiAgICAgICAgdHJhbnNhY3Rpb25hbENvbnRlbnRNRDUsXG4gICAgICAgIHRyYW5zYWN0aW9uYWxDb250ZW50Q3JjNjQsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi94bWw7IGNoYXJzZXQ9dXRmLThcIixcbiAgICBtZWRpYVR5cGU6IFwieG1sXCIsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQzLFxufTtcblxuLypcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuICpcbiAqIENvZGUgZ2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgQXV0b1Jlc3QgQ29kZSBHZW5lcmF0b3IuXG4gKiBDaGFuZ2VzIG1heSBjYXVzZSBpbmNvcnJlY3QgYmVoYXZpb3IgYW5kIHdpbGwgYmUgbG9zdCBpZiB0aGUgY29kZSBpcyByZWdlbmVyYXRlZC5cbiAqL1xuLyoqIENsYXNzIGNvbnRhaW5pbmcgUGFnZUJsb2Igb3BlcmF0aW9ucy4gKi9cbmNsYXNzIFBhZ2VCbG9iSW1wbCB7XG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgY2xhc3MgUGFnZUJsb2IgY2xhc3MuXG4gICAgICogQHBhcmFtIGNsaWVudCBSZWZlcmVuY2UgdG8gdGhlIHNlcnZpY2UgY2xpZW50XG4gICAgICovXG4gICAgY29uc3RydWN0b3IoY2xpZW50KSB7XG4gICAgICAgIHRoaXMuY2xpZW50ID0gY2xpZW50O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgQ3JlYXRlIG9wZXJhdGlvbiBjcmVhdGVzIGEgbmV3IHBhZ2UgYmxvYi5cbiAgICAgKiBAcGFyYW0gY29udGVudExlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBibG9iQ29udGVudExlbmd0aCBUaGlzIGhlYWRlciBzcGVjaWZpZXMgdGhlIG1heGltdW0gc2l6ZSBmb3IgdGhlIHBhZ2UgYmxvYiwgdXAgdG8gMSBUQi4gVGhlXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2UgYmxvYiBzaXplIG11c3QgYmUgYWxpZ25lZCB0byBhIDUxMi1ieXRlIGJvdW5kYXJ5LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgY3JlYXRlKGNvbnRlbnRMZW5ndGgsIGJsb2JDb250ZW50TGVuZ3RoLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IGNvbnRlbnRMZW5ndGgsIGJsb2JDb250ZW50TGVuZ3RoLCBvcHRpb25zIH0sIGNyZWF0ZU9wZXJhdGlvblNwZWMkMSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBVcGxvYWQgUGFnZXMgb3BlcmF0aW9uIHdyaXRlcyBhIHJhbmdlIG9mIHBhZ2VzIHRvIGEgcGFnZSBibG9iXG4gICAgICogQHBhcmFtIGNvbnRlbnRMZW5ndGggVGhlIGxlbmd0aCBvZiB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gYm9keSBJbml0aWFsIGRhdGFcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIHVwbG9hZFBhZ2VzKGNvbnRlbnRMZW5ndGgsIGJvZHksIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgY29udGVudExlbmd0aCwgYm9keSwgb3B0aW9ucyB9LCB1cGxvYWRQYWdlc09wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgQ2xlYXIgUGFnZXMgb3BlcmF0aW9uIGNsZWFycyBhIHNldCBvZiBwYWdlcyBmcm9tIGEgcGFnZSBibG9iXG4gICAgICogQHBhcmFtIGNvbnRlbnRMZW5ndGggVGhlIGxlbmd0aCBvZiB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGNsZWFyUGFnZXMoY29udGVudExlbmd0aCwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBjb250ZW50TGVuZ3RoLCBvcHRpb25zIH0sIGNsZWFyUGFnZXNPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIFVwbG9hZCBQYWdlcyBvcGVyYXRpb24gd3JpdGVzIGEgcmFuZ2Ugb2YgcGFnZXMgdG8gYSBwYWdlIGJsb2Igd2hlcmUgdGhlIGNvbnRlbnRzIGFyZSByZWFkIGZyb20gYVxuICAgICAqIFVSTFxuICAgICAqIEBwYXJhbSBzb3VyY2VVcmwgU3BlY2lmeSBhIFVSTCB0byB0aGUgY29weSBzb3VyY2UuXG4gICAgICogQHBhcmFtIHNvdXJjZVJhbmdlIEJ5dGVzIG9mIHNvdXJjZSBkYXRhIGluIHRoZSBzcGVjaWZpZWQgcmFuZ2UuIFRoZSBsZW5ndGggb2YgdGhpcyByYW5nZSBzaG91bGRcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgbWF0Y2ggdGhlIENvbnRlbnRMZW5ndGggaGVhZGVyIGFuZCB4LW1zLXJhbmdlL1JhbmdlIGRlc3RpbmF0aW9uIHJhbmdlIGhlYWRlci5cbiAgICAgKiBAcGFyYW0gY29udGVudExlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSByYW5nZSBUaGUgcmFuZ2Ugb2YgYnl0ZXMgdG8gd2hpY2ggdGhlIHNvdXJjZSByYW5nZSB3b3VsZCBiZSB3cml0dGVuLiBUaGUgcmFuZ2Ugc2hvdWxkIGJlIDUxMlxuICAgICAqICAgICAgICAgICAgICBhbGlnbmVkIGFuZCByYW5nZS1lbmQgaXMgcmVxdWlyZWQuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICB1cGxvYWRQYWdlc0Zyb21VUkwoc291cmNlVXJsLCBzb3VyY2VSYW5nZSwgY29udGVudExlbmd0aCwgcmFuZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgc291cmNlVXJsLCBzb3VyY2VSYW5nZSwgY29udGVudExlbmd0aCwgcmFuZ2UsIG9wdGlvbnMgfSwgdXBsb2FkUGFnZXNGcm9tVVJMT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBHZXQgUGFnZSBSYW5nZXMgb3BlcmF0aW9uIHJldHVybnMgdGhlIGxpc3Qgb2YgdmFsaWQgcGFnZSByYW5nZXMgZm9yIGEgcGFnZSBibG9iIG9yIHNuYXBzaG90IG9mIGFcbiAgICAgKiBwYWdlIGJsb2JcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGdldFBhZ2VSYW5nZXMob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIGdldFBhZ2VSYW5nZXNPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIEdldCBQYWdlIFJhbmdlcyBEaWZmIG9wZXJhdGlvbiByZXR1cm5zIHRoZSBsaXN0IG9mIHZhbGlkIHBhZ2UgcmFuZ2VzIGZvciBhIHBhZ2UgYmxvYiB0aGF0IHdlcmVcbiAgICAgKiBjaGFuZ2VkIGJldHdlZW4gdGFyZ2V0IGJsb2IgYW5kIHByZXZpb3VzIHNuYXBzaG90LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgZ2V0UGFnZVJhbmdlc0RpZmYob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIGdldFBhZ2VSYW5nZXNEaWZmT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlc2l6ZSB0aGUgQmxvYlxuICAgICAqIEBwYXJhbSBibG9iQ29udGVudExlbmd0aCBUaGlzIGhlYWRlciBzcGVjaWZpZXMgdGhlIG1heGltdW0gc2l6ZSBmb3IgdGhlIHBhZ2UgYmxvYiwgdXAgdG8gMSBUQi4gVGhlXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2UgYmxvYiBzaXplIG11c3QgYmUgYWxpZ25lZCB0byBhIDUxMi1ieXRlIGJvdW5kYXJ5LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgcmVzaXplKGJsb2JDb250ZW50TGVuZ3RoLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IGJsb2JDb250ZW50TGVuZ3RoLCBvcHRpb25zIH0sIHJlc2l6ZU9wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBVcGRhdGUgdGhlIHNlcXVlbmNlIG51bWJlciBvZiB0aGUgYmxvYlxuICAgICAqIEBwYXJhbSBzZXF1ZW5jZU51bWJlckFjdGlvbiBSZXF1aXJlZCBpZiB0aGUgeC1tcy1ibG9iLXNlcXVlbmNlLW51bWJlciBoZWFkZXIgaXMgc2V0IGZvciB0aGUgcmVxdWVzdC5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwcm9wZXJ0eSBhcHBsaWVzIHRvIHBhZ2UgYmxvYnMgb25seS4gVGhpcyBwcm9wZXJ0eSBpbmRpY2F0ZXMgaG93IHRoZSBzZXJ2aWNlIHNob3VsZCBtb2RpZnkgdGhlXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2IncyBzZXF1ZW5jZSBudW1iZXJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIHVwZGF0ZVNlcXVlbmNlTnVtYmVyKHNlcXVlbmNlTnVtYmVyQWN0aW9uLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IHNlcXVlbmNlTnVtYmVyQWN0aW9uLCBvcHRpb25zIH0sIHVwZGF0ZVNlcXVlbmNlTnVtYmVyT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBDb3B5IEluY3JlbWVudGFsIG9wZXJhdGlvbiBjb3BpZXMgYSBzbmFwc2hvdCBvZiB0aGUgc291cmNlIHBhZ2UgYmxvYiB0byBhIGRlc3RpbmF0aW9uIHBhZ2UgYmxvYi5cbiAgICAgKiBUaGUgc25hcHNob3QgaXMgY29waWVkIHN1Y2ggdGhhdCBvbmx5IHRoZSBkaWZmZXJlbnRpYWwgY2hhbmdlcyBiZXR3ZWVuIHRoZSBwcmV2aW91c2x5IGNvcGllZFxuICAgICAqIHNuYXBzaG90IGFyZSB0cmFuc2ZlcnJlZCB0byB0aGUgZGVzdGluYXRpb24uIFRoZSBjb3BpZWQgc25hcHNob3RzIGFyZSBjb21wbGV0ZSBjb3BpZXMgb2YgdGhlXG4gICAgICogb3JpZ2luYWwgc25hcHNob3QgYW5kIGNhbiBiZSByZWFkIG9yIGNvcGllZCBmcm9tIGFzIHVzdWFsLiBUaGlzIEFQSSBpcyBzdXBwb3J0ZWQgc2luY2UgUkVTVCB2ZXJzaW9uXG4gICAgICogMjAxNi0wNS0zMS5cbiAgICAgKiBAcGFyYW0gY29weVNvdXJjZSBTcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIHNvdXJjZSBwYWdlIGJsb2Igc25hcHNob3QuIFRoaXMgdmFsdWUgaXMgYSBVUkwgb2YgdXAgdG9cbiAgICAgKiAgICAgICAgICAgICAgICAgICAyIEtCIGluIGxlbmd0aCB0aGF0IHNwZWNpZmllcyBhIHBhZ2UgYmxvYiBzbmFwc2hvdC4gVGhlIHZhbHVlIHNob3VsZCBiZSBVUkwtZW5jb2RlZCBhcyBpdCB3b3VsZFxuICAgICAqICAgICAgICAgICAgICAgICAgIGFwcGVhciBpbiBhIHJlcXVlc3QgVVJJLiBUaGUgc291cmNlIGJsb2IgbXVzdCBlaXRoZXIgYmUgcHVibGljIG9yIG11c3QgYmUgYXV0aGVudGljYXRlZCB2aWEgYSBzaGFyZWRcbiAgICAgKiAgICAgICAgICAgICAgICAgICBhY2Nlc3Mgc2lnbmF0dXJlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgY29weUluY3JlbWVudGFsKGNvcHlTb3VyY2UsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgY29weVNvdXJjZSwgb3B0aW9ucyB9LCBjb3B5SW5jcmVtZW50YWxPcGVyYXRpb25TcGVjKTtcbiAgICB9XG59XG4vLyBPcGVyYXRpb24gU3BlY2lmaWNhdGlvbnNcbmNvbnN0IHhtbFNlcmlhbGl6ZXIkMiA9IGNvcmVDbGllbnRfX25hbWVzcGFjZS5jcmVhdGVTZXJpYWxpemVyKE1hcHBlcnMsIC8qIGlzWG1sICovIHRydWUpO1xuY29uc3QgY3JlYXRlT3BlcmF0aW9uU3BlYyQxID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDE6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFBhZ2VCbG9iQ3JlYXRlSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogUGFnZUJsb2JDcmVhdGVFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbdGltZW91dEluU2Vjb25kc10sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIGNvbnRlbnRMZW5ndGgsXG4gICAgICAgIG1ldGFkYXRhLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBlbmNyeXB0aW9uS2V5LFxuICAgICAgICBlbmNyeXB0aW9uS2V5U2hhMjU2LFxuICAgICAgICBlbmNyeXB0aW9uQWxnb3JpdGhtLFxuICAgICAgICBpZk1hdGNoLFxuICAgICAgICBpZk5vbmVNYXRjaCxcbiAgICAgICAgaWZUYWdzLFxuICAgICAgICBibG9iQ2FjaGVDb250cm9sLFxuICAgICAgICBibG9iQ29udGVudFR5cGUsXG4gICAgICAgIGJsb2JDb250ZW50TUQ1LFxuICAgICAgICBibG9iQ29udGVudEVuY29kaW5nLFxuICAgICAgICBibG9iQ29udGVudExhbmd1YWdlLFxuICAgICAgICBibG9iQ29udGVudERpc3Bvc2l0aW9uLFxuICAgICAgICBpbW11dGFiaWxpdHlQb2xpY3lFeHBpcnksXG4gICAgICAgIGltbXV0YWJpbGl0eVBvbGljeU1vZGUsXG4gICAgICAgIGVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgdGllcixcbiAgICAgICAgYmxvYlRhZ3NTdHJpbmcsXG4gICAgICAgIGxlZ2FsSG9sZDEsXG4gICAgICAgIGJsb2JUeXBlLFxuICAgICAgICBibG9iQ29udGVudExlbmd0aCxcbiAgICAgICAgYmxvYlNlcXVlbmNlTnVtYmVyLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQyLFxufTtcbmNvbnN0IHVwbG9hZFBhZ2VzT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAxOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBQYWdlQmxvYlVwbG9hZFBhZ2VzSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogUGFnZUJsb2JVcGxvYWRQYWdlc0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICByZXF1ZXN0Qm9keTogYm9keTEsXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbdGltZW91dEluU2Vjb25kcywgY29tcDE5XSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgcmFuZ2UsXG4gICAgICAgIGVuY3J5cHRpb25LZXksXG4gICAgICAgIGVuY3J5cHRpb25LZXlTaGEyNTYsXG4gICAgICAgIGVuY3J5cHRpb25BbGdvcml0aG0sXG4gICAgICAgIGlmTWF0Y2gsXG4gICAgICAgIGlmTm9uZU1hdGNoLFxuICAgICAgICBpZlRhZ3MsXG4gICAgICAgIGVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgdHJhbnNhY3Rpb25hbENvbnRlbnRNRDUsXG4gICAgICAgIHRyYW5zYWN0aW9uYWxDb250ZW50Q3JjNjQsXG4gICAgICAgIGNvbnRlbnRUeXBlMSxcbiAgICAgICAgYWNjZXB0MixcbiAgICAgICAgcGFnZVdyaXRlLFxuICAgICAgICBpZlNlcXVlbmNlTnVtYmVyTGVzc1RoYW5PckVxdWFsVG8sXG4gICAgICAgIGlmU2VxdWVuY2VOdW1iZXJMZXNzVGhhbixcbiAgICAgICAgaWZTZXF1ZW5jZU51bWJlckVxdWFsVG8sXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi94bWw7IGNoYXJzZXQ9dXRmLThcIixcbiAgICBtZWRpYVR5cGU6IFwiYmluYXJ5XCIsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQyLFxufTtcbmNvbnN0IGNsZWFyUGFnZXNPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDE6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFBhZ2VCbG9iQ2xlYXJQYWdlc0hlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFBhZ2VCbG9iQ2xlYXJQYWdlc0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzLCBjb21wMTldLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBjb250ZW50TGVuZ3RoLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICByYW5nZSxcbiAgICAgICAgZW5jcnlwdGlvbktleSxcbiAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1NixcbiAgICAgICAgZW5jcnlwdGlvbkFsZ29yaXRobSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICAgICAgZW5jcnlwdGlvblNjb3BlLFxuICAgICAgICBpZlNlcXVlbmNlTnVtYmVyTGVzc1RoYW5PckVxdWFsVG8sXG4gICAgICAgIGlmU2VxdWVuY2VOdW1iZXJMZXNzVGhhbixcbiAgICAgICAgaWZTZXF1ZW5jZU51bWJlckVxdWFsVG8sXG4gICAgICAgIHBhZ2VXcml0ZTEsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDIsXG59O1xuY29uc3QgdXBsb2FkUGFnZXNGcm9tVVJMT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAxOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBQYWdlQmxvYlVwbG9hZFBhZ2VzRnJvbVVSTEhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFBhZ2VCbG9iVXBsb2FkUGFnZXNGcm9tVVJMRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW3RpbWVvdXRJblNlY29uZHMsIGNvbXAxOV0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIGNvbnRlbnRMZW5ndGgsXG4gICAgICAgIGxlYXNlSWQsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIGVuY3J5cHRpb25LZXksXG4gICAgICAgIGVuY3J5cHRpb25LZXlTaGEyNTYsXG4gICAgICAgIGVuY3J5cHRpb25BbGdvcml0aG0sXG4gICAgICAgIGlmTWF0Y2gsXG4gICAgICAgIGlmTm9uZU1hdGNoLFxuICAgICAgICBpZlRhZ3MsXG4gICAgICAgIGVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgc291cmNlSWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBzb3VyY2VJZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgc291cmNlSWZNYXRjaCxcbiAgICAgICAgc291cmNlSWZOb25lTWF0Y2gsXG4gICAgICAgIHNvdXJjZUNvbnRlbnRNRDUsXG4gICAgICAgIGNvcHlTb3VyY2VBdXRob3JpemF0aW9uLFxuICAgICAgICBwYWdlV3JpdGUsXG4gICAgICAgIGlmU2VxdWVuY2VOdW1iZXJMZXNzVGhhbk9yRXF1YWxUbyxcbiAgICAgICAgaWZTZXF1ZW5jZU51bWJlckxlc3NUaGFuLFxuICAgICAgICBpZlNlcXVlbmNlTnVtYmVyRXF1YWxUbyxcbiAgICAgICAgc291cmNlVXJsLFxuICAgICAgICBzb3VyY2VSYW5nZSxcbiAgICAgICAgc291cmNlQ29udGVudENyYzY0LFxuICAgICAgICByYW5nZTEsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDIsXG59O1xuY29uc3QgZ2V0UGFnZVJhbmdlc09wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiR0VUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogUGFnZUxpc3QsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBQYWdlQmxvYkdldFBhZ2VSYW5nZXNIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBQYWdlQmxvYkdldFBhZ2VSYW5nZXNFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIG1hcmtlcixcbiAgICAgICAgbWF4UGFnZVNpemUsXG4gICAgICAgIHNuYXBzaG90LFxuICAgICAgICBjb21wMjAsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgcmFuZ2UsXG4gICAgICAgIGlmTWF0Y2gsXG4gICAgICAgIGlmTm9uZU1hdGNoLFxuICAgICAgICBpZlRhZ3MsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDIsXG59O1xuY29uc3QgZ2V0UGFnZVJhbmdlc0RpZmZPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIkdFVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFBhZ2VMaXN0LFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogUGFnZUJsb2JHZXRQYWdlUmFuZ2VzRGlmZkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFBhZ2VCbG9iR2V0UGFnZVJhbmdlc0RpZmZFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIG1hcmtlcixcbiAgICAgICAgbWF4UGFnZVNpemUsXG4gICAgICAgIHNuYXBzaG90LFxuICAgICAgICBjb21wMjAsXG4gICAgICAgIHByZXZzbmFwc2hvdCxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICByYW5nZSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICAgICAgcHJldlNuYXBzaG90VXJsLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQyLFxufTtcbmNvbnN0IHJlc2l6ZU9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogUGFnZUJsb2JSZXNpemVIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBQYWdlQmxvYlJlc2l6ZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFtjb21wLCB0aW1lb3V0SW5TZWNvbmRzXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgZW5jcnlwdGlvbktleSxcbiAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1NixcbiAgICAgICAgZW5jcnlwdGlvbkFsZ29yaXRobSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICAgICAgZW5jcnlwdGlvblNjb3BlLFxuICAgICAgICBibG9iQ29udGVudExlbmd0aCxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMixcbn07XG5jb25zdCB1cGRhdGVTZXF1ZW5jZU51bWJlck9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogUGFnZUJsb2JVcGRhdGVTZXF1ZW5jZU51bWJlckhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFBhZ2VCbG9iVXBkYXRlU2VxdWVuY2VOdW1iZXJFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbY29tcCwgdGltZW91dEluU2Vjb25kc10sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIGxlYXNlSWQsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmTWF0Y2gsXG4gICAgICAgIGlmTm9uZU1hdGNoLFxuICAgICAgICBpZlRhZ3MsXG4gICAgICAgIGJsb2JTZXF1ZW5jZU51bWJlcixcbiAgICAgICAgc2VxdWVuY2VOdW1iZXJBY3Rpb24sXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDIsXG59O1xuY29uc3QgY29weUluY3JlbWVudGFsT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAyOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBQYWdlQmxvYkNvcHlJbmNyZW1lbnRhbEhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFBhZ2VCbG9iQ29weUluY3JlbWVudGFsRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW3RpbWVvdXRJblNlY29uZHMsIGNvbXAyMV0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmTWF0Y2gsXG4gICAgICAgIGlmTm9uZU1hdGNoLFxuICAgICAgICBpZlRhZ3MsXG4gICAgICAgIGNvcHlTb3VyY2UsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDIsXG59O1xuXG4vKlxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKlxuICogQ29kZSBnZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBBdXRvUmVzdCBDb2RlIEdlbmVyYXRvci5cbiAqIENoYW5nZXMgbWF5IGNhdXNlIGluY29ycmVjdCBiZWhhdmlvciBhbmQgd2lsbCBiZSBsb3N0IGlmIHRoZSBjb2RlIGlzIHJlZ2VuZXJhdGVkLlxuICovXG4vKiogQ2xhc3MgY29udGFpbmluZyBBcHBlbmRCbG9iIG9wZXJhdGlvbnMuICovXG5jbGFzcyBBcHBlbmRCbG9iSW1wbCB7XG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgY2xhc3MgQXBwZW5kQmxvYiBjbGFzcy5cbiAgICAgKiBAcGFyYW0gY2xpZW50IFJlZmVyZW5jZSB0byB0aGUgc2VydmljZSBjbGllbnRcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihjbGllbnQpIHtcbiAgICAgICAgdGhpcy5jbGllbnQgPSBjbGllbnQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBDcmVhdGUgQXBwZW5kIEJsb2Igb3BlcmF0aW9uIGNyZWF0ZXMgYSBuZXcgYXBwZW5kIGJsb2IuXG4gICAgICogQHBhcmFtIGNvbnRlbnRMZW5ndGggVGhlIGxlbmd0aCBvZiB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGNyZWF0ZShjb250ZW50TGVuZ3RoLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IGNvbnRlbnRMZW5ndGgsIG9wdGlvbnMgfSwgY3JlYXRlT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBBcHBlbmQgQmxvY2sgb3BlcmF0aW9uIGNvbW1pdHMgYSBuZXcgYmxvY2sgb2YgZGF0YSB0byB0aGUgZW5kIG9mIGFuIGV4aXN0aW5nIGFwcGVuZCBibG9iLiBUaGVcbiAgICAgKiBBcHBlbmQgQmxvY2sgb3BlcmF0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGlmIHRoZSBibG9iIHdhcyBjcmVhdGVkIHdpdGggeC1tcy1ibG9iLXR5cGUgc2V0IHRvXG4gICAgICogQXBwZW5kQmxvYi4gQXBwZW5kIEJsb2NrIGlzIHN1cHBvcnRlZCBvbmx5IG9uIHZlcnNpb24gMjAxNS0wMi0yMSB2ZXJzaW9uIG9yIGxhdGVyLlxuICAgICAqIEBwYXJhbSBjb250ZW50TGVuZ3RoIFRoZSBsZW5ndGggb2YgdGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIGJvZHkgSW5pdGlhbCBkYXRhXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBhcHBlbmRCbG9jayhjb250ZW50TGVuZ3RoLCBib2R5LCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IGNvbnRlbnRMZW5ndGgsIGJvZHksIG9wdGlvbnMgfSwgYXBwZW5kQmxvY2tPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIEFwcGVuZCBCbG9jayBvcGVyYXRpb24gY29tbWl0cyBhIG5ldyBibG9jayBvZiBkYXRhIHRvIHRoZSBlbmQgb2YgYW4gZXhpc3RpbmcgYXBwZW5kIGJsb2Igd2hlcmVcbiAgICAgKiB0aGUgY29udGVudHMgYXJlIHJlYWQgZnJvbSBhIHNvdXJjZSB1cmwuIFRoZSBBcHBlbmQgQmxvY2sgb3BlcmF0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGlmIHRoZSBibG9iXG4gICAgICogd2FzIGNyZWF0ZWQgd2l0aCB4LW1zLWJsb2ItdHlwZSBzZXQgdG8gQXBwZW5kQmxvYi4gQXBwZW5kIEJsb2NrIGlzIHN1cHBvcnRlZCBvbmx5IG9uIHZlcnNpb25cbiAgICAgKiAyMDE1LTAyLTIxIHZlcnNpb24gb3IgbGF0ZXIuXG4gICAgICogQHBhcmFtIHNvdXJjZVVybCBTcGVjaWZ5IGEgVVJMIHRvIHRoZSBjb3B5IHNvdXJjZS5cbiAgICAgKiBAcGFyYW0gY29udGVudExlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgYXBwZW5kQmxvY2tGcm9tVXJsKHNvdXJjZVVybCwgY29udGVudExlbmd0aCwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBzb3VyY2VVcmwsIGNvbnRlbnRMZW5ndGgsIG9wdGlvbnMgfSwgYXBwZW5kQmxvY2tGcm9tVXJsT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBTZWFsIG9wZXJhdGlvbiBzZWFscyB0aGUgQXBwZW5kIEJsb2IgdG8gbWFrZSBpdCByZWFkLW9ubHkuIFNlYWwgaXMgc3VwcG9ydGVkIG9ubHkgb24gdmVyc2lvblxuICAgICAqIDIwMTktMTItMTIgdmVyc2lvbiBvciBsYXRlci5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIHNlYWwob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIHNlYWxPcGVyYXRpb25TcGVjKTtcbiAgICB9XG59XG4vLyBPcGVyYXRpb24gU3BlY2lmaWNhdGlvbnNcbmNvbnN0IHhtbFNlcmlhbGl6ZXIkMSA9IGNvcmVDbGllbnRfX25hbWVzcGFjZS5jcmVhdGVTZXJpYWxpemVyKE1hcHBlcnMsIC8qIGlzWG1sICovIHRydWUpO1xuY29uc3QgY3JlYXRlT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAxOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBBcHBlbmRCbG9iQ3JlYXRlSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQXBwZW5kQmxvYkNyZWF0ZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgbWV0YWRhdGEsXG4gICAgICAgIGxlYXNlSWQsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIGVuY3J5cHRpb25LZXksXG4gICAgICAgIGVuY3J5cHRpb25LZXlTaGEyNTYsXG4gICAgICAgIGVuY3J5cHRpb25BbGdvcml0aG0sXG4gICAgICAgIGlmTWF0Y2gsXG4gICAgICAgIGlmTm9uZU1hdGNoLFxuICAgICAgICBpZlRhZ3MsXG4gICAgICAgIGJsb2JDYWNoZUNvbnRyb2wsXG4gICAgICAgIGJsb2JDb250ZW50VHlwZSxcbiAgICAgICAgYmxvYkNvbnRlbnRNRDUsXG4gICAgICAgIGJsb2JDb250ZW50RW5jb2RpbmcsXG4gICAgICAgIGJsb2JDb250ZW50TGFuZ3VhZ2UsXG4gICAgICAgIGJsb2JDb250ZW50RGlzcG9zaXRpb24sXG4gICAgICAgIGltbXV0YWJpbGl0eVBvbGljeUV4cGlyeSxcbiAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5TW9kZSxcbiAgICAgICAgZW5jcnlwdGlvblNjb3BlLFxuICAgICAgICBibG9iVGFnc1N0cmluZyxcbiAgICAgICAgbGVnYWxIb2xkMSxcbiAgICAgICAgYmxvYlR5cGUxLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQxLFxufTtcbmNvbnN0IGFwcGVuZEJsb2NrT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAxOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBBcHBlbmRCbG9iQXBwZW5kQmxvY2tIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBBcHBlbmRCbG9iQXBwZW5kQmxvY2tFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcmVxdWVzdEJvZHk6IGJvZHkxLFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW3RpbWVvdXRJblNlY29uZHMsIGNvbXAyMl0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGNvbnRlbnRMZW5ndGgsXG4gICAgICAgIGxlYXNlSWQsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIGVuY3J5cHRpb25LZXksXG4gICAgICAgIGVuY3J5cHRpb25LZXlTaGEyNTYsXG4gICAgICAgIGVuY3J5cHRpb25BbGdvcml0aG0sXG4gICAgICAgIGlmTWF0Y2gsXG4gICAgICAgIGlmTm9uZU1hdGNoLFxuICAgICAgICBpZlRhZ3MsXG4gICAgICAgIGVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgdHJhbnNhY3Rpb25hbENvbnRlbnRNRDUsXG4gICAgICAgIHRyYW5zYWN0aW9uYWxDb250ZW50Q3JjNjQsXG4gICAgICAgIGNvbnRlbnRUeXBlMSxcbiAgICAgICAgYWNjZXB0MixcbiAgICAgICAgbWF4U2l6ZSxcbiAgICAgICAgYXBwZW5kUG9zaXRpb24sXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi94bWw7IGNoYXJzZXQ9dXRmLThcIixcbiAgICBtZWRpYVR5cGU6IFwiYmluYXJ5XCIsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQxLFxufTtcbmNvbnN0IGFwcGVuZEJsb2NrRnJvbVVybE9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMToge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQXBwZW5kQmxvYkFwcGVuZEJsb2NrRnJvbVVybEhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEFwcGVuZEJsb2JBcHBlbmRCbG9ja0Zyb21VcmxFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbdGltZW91dEluU2Vjb25kcywgY29tcDIyXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgZW5jcnlwdGlvbktleSxcbiAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1NixcbiAgICAgICAgZW5jcnlwdGlvbkFsZ29yaXRobSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICAgICAgZW5jcnlwdGlvblNjb3BlLFxuICAgICAgICBzb3VyY2VJZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIHNvdXJjZUlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBzb3VyY2VJZk1hdGNoLFxuICAgICAgICBzb3VyY2VJZk5vbmVNYXRjaCxcbiAgICAgICAgc291cmNlQ29udGVudE1ENSxcbiAgICAgICAgY29weVNvdXJjZUF1dGhvcml6YXRpb24sXG4gICAgICAgIHRyYW5zYWN0aW9uYWxDb250ZW50TUQ1LFxuICAgICAgICBzb3VyY2VVcmwsXG4gICAgICAgIHNvdXJjZUNvbnRlbnRDcmM2NCxcbiAgICAgICAgbWF4U2l6ZSxcbiAgICAgICAgYXBwZW5kUG9zaXRpb24sXG4gICAgICAgIHNvdXJjZVJhbmdlMSxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMSxcbn07XG5jb25zdCBzZWFsT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBBcHBlbmRCbG9iU2VhbEhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEFwcGVuZEJsb2JTZWFsRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW3RpbWVvdXRJblNlY29uZHMsIGNvbXAyM10sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIGxlYXNlSWQsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmTWF0Y2gsXG4gICAgICAgIGlmTm9uZU1hdGNoLFxuICAgICAgICBhcHBlbmRQb3NpdGlvbixcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMSxcbn07XG5cbi8qXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAqXG4gKiBDb2RlIGdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEF1dG9SZXN0IENvZGUgR2VuZXJhdG9yLlxuICogQ2hhbmdlcyBtYXkgY2F1c2UgaW5jb3JyZWN0IGJlaGF2aW9yIGFuZCB3aWxsIGJlIGxvc3QgaWYgdGhlIGNvZGUgaXMgcmVnZW5lcmF0ZWQuXG4gKi9cbi8qKiBDbGFzcyBjb250YWluaW5nIEJsb2NrQmxvYiBvcGVyYXRpb25zLiAqL1xuY2xhc3MgQmxvY2tCbG9iSW1wbCB7XG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgY2xhc3MgQmxvY2tCbG9iIGNsYXNzLlxuICAgICAqIEBwYXJhbSBjbGllbnQgUmVmZXJlbmNlIHRvIHRoZSBzZXJ2aWNlIGNsaWVudFxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGNsaWVudCkge1xuICAgICAgICB0aGlzLmNsaWVudCA9IGNsaWVudDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIFVwbG9hZCBCbG9jayBCbG9iIG9wZXJhdGlvbiB1cGRhdGVzIHRoZSBjb250ZW50IG9mIGFuIGV4aXN0aW5nIGJsb2NrIGJsb2IuIFVwZGF0aW5nIGFuIGV4aXN0aW5nXG4gICAgICogYmxvY2sgYmxvYiBvdmVyd3JpdGVzIGFueSBleGlzdGluZyBtZXRhZGF0YSBvbiB0aGUgYmxvYi4gUGFydGlhbCB1cGRhdGVzIGFyZSBub3Qgc3VwcG9ydGVkIHdpdGggUHV0XG4gICAgICogQmxvYjsgdGhlIGNvbnRlbnQgb2YgdGhlIGV4aXN0aW5nIGJsb2IgaXMgb3ZlcndyaXR0ZW4gd2l0aCB0aGUgY29udGVudCBvZiB0aGUgbmV3IGJsb2IuIFRvIHBlcmZvcm0gYVxuICAgICAqIHBhcnRpYWwgdXBkYXRlIG9mIHRoZSBjb250ZW50IG9mIGEgYmxvY2sgYmxvYiwgdXNlIHRoZSBQdXQgQmxvY2sgTGlzdCBvcGVyYXRpb24uXG4gICAgICogQHBhcmFtIGNvbnRlbnRMZW5ndGggVGhlIGxlbmd0aCBvZiB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gYm9keSBJbml0aWFsIGRhdGFcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIHVwbG9hZChjb250ZW50TGVuZ3RoLCBib2R5LCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IGNvbnRlbnRMZW5ndGgsIGJvZHksIG9wdGlvbnMgfSwgdXBsb2FkT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBQdXQgQmxvYiBmcm9tIFVSTCBvcGVyYXRpb24gY3JlYXRlcyBhIG5ldyBCbG9jayBCbG9iIHdoZXJlIHRoZSBjb250ZW50cyBvZiB0aGUgYmxvYiBhcmUgcmVhZFxuICAgICAqIGZyb20gYSBnaXZlbiBVUkwuICBUaGlzIEFQSSBpcyBzdXBwb3J0ZWQgYmVnaW5uaW5nIHdpdGggdGhlIDIwMjAtMDQtMDggdmVyc2lvbi4gUGFydGlhbCB1cGRhdGVzIGFyZVxuICAgICAqIG5vdCBzdXBwb3J0ZWQgd2l0aCBQdXQgQmxvYiBmcm9tIFVSTDsgdGhlIGNvbnRlbnQgb2YgYW4gZXhpc3RpbmcgYmxvYiBpcyBvdmVyd3JpdHRlbiB3aXRoIHRoZVxuICAgICAqIGNvbnRlbnQgb2YgdGhlIG5ldyBibG9iLiAgVG8gcGVyZm9ybSBwYXJ0aWFsIHVwZGF0ZXMgdG8gYSBibG9jayBibG9i4oCZcyBjb250ZW50cyB1c2luZyBhIHNvdXJjZSBVUkwsXG4gICAgICogdXNlIHRoZSBQdXQgQmxvY2sgZnJvbSBVUkwgQVBJIGluIGNvbmp1bmN0aW9uIHdpdGggUHV0IEJsb2NrIExpc3QuXG4gICAgICogQHBhcmFtIGNvbnRlbnRMZW5ndGggVGhlIGxlbmd0aCBvZiB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gY29weVNvdXJjZSBTcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIHNvdXJjZSBwYWdlIGJsb2Igc25hcHNob3QuIFRoaXMgdmFsdWUgaXMgYSBVUkwgb2YgdXAgdG9cbiAgICAgKiAgICAgICAgICAgICAgICAgICAyIEtCIGluIGxlbmd0aCB0aGF0IHNwZWNpZmllcyBhIHBhZ2UgYmxvYiBzbmFwc2hvdC4gVGhlIHZhbHVlIHNob3VsZCBiZSBVUkwtZW5jb2RlZCBhcyBpdCB3b3VsZFxuICAgICAqICAgICAgICAgICAgICAgICAgIGFwcGVhciBpbiBhIHJlcXVlc3QgVVJJLiBUaGUgc291cmNlIGJsb2IgbXVzdCBlaXRoZXIgYmUgcHVibGljIG9yIG11c3QgYmUgYXV0aGVudGljYXRlZCB2aWEgYSBzaGFyZWRcbiAgICAgKiAgICAgICAgICAgICAgICAgICBhY2Nlc3Mgc2lnbmF0dXJlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgcHV0QmxvYkZyb21VcmwoY29udGVudExlbmd0aCwgY29weVNvdXJjZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBjb250ZW50TGVuZ3RoLCBjb3B5U291cmNlLCBvcHRpb25zIH0sIHB1dEJsb2JGcm9tVXJsT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBTdGFnZSBCbG9jayBvcGVyYXRpb24gY3JlYXRlcyBhIG5ldyBibG9jayB0byBiZSBjb21taXR0ZWQgYXMgcGFydCBvZiBhIGJsb2JcbiAgICAgKiBAcGFyYW0gYmxvY2tJZCBBIHZhbGlkIEJhc2U2NCBzdHJpbmcgdmFsdWUgdGhhdCBpZGVudGlmaWVzIHRoZSBibG9jay4gUHJpb3IgdG8gZW5jb2RpbmcsIHRoZSBzdHJpbmdcbiAgICAgKiAgICAgICAgICAgICAgICBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byA2NCBieXRlcyBpbiBzaXplLiBGb3IgYSBnaXZlbiBibG9iLCB0aGUgbGVuZ3RoIG9mIHRoZSB2YWx1ZSBzcGVjaWZpZWRcbiAgICAgKiAgICAgICAgICAgICAgICBmb3IgdGhlIGJsb2NraWQgcGFyYW1ldGVyIG11c3QgYmUgdGhlIHNhbWUgc2l6ZSBmb3IgZWFjaCBibG9jay5cbiAgICAgKiBAcGFyYW0gY29udGVudExlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBib2R5IEluaXRpYWwgZGF0YVxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgc3RhZ2VCbG9jayhibG9ja0lkLCBjb250ZW50TGVuZ3RoLCBib2R5LCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IGJsb2NrSWQsIGNvbnRlbnRMZW5ndGgsIGJvZHksIG9wdGlvbnMgfSwgc3RhZ2VCbG9ja09wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgU3RhZ2UgQmxvY2sgb3BlcmF0aW9uIGNyZWF0ZXMgYSBuZXcgYmxvY2sgdG8gYmUgY29tbWl0dGVkIGFzIHBhcnQgb2YgYSBibG9iIHdoZXJlIHRoZSBjb250ZW50c1xuICAgICAqIGFyZSByZWFkIGZyb20gYSBVUkwuXG4gICAgICogQHBhcmFtIGJsb2NrSWQgQSB2YWxpZCBCYXNlNjQgc3RyaW5nIHZhbHVlIHRoYXQgaWRlbnRpZmllcyB0aGUgYmxvY2suIFByaW9yIHRvIGVuY29kaW5nLCB0aGUgc3RyaW5nXG4gICAgICogICAgICAgICAgICAgICAgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gNjQgYnl0ZXMgaW4gc2l6ZS4gRm9yIGEgZ2l2ZW4gYmxvYiwgdGhlIGxlbmd0aCBvZiB0aGUgdmFsdWUgc3BlY2lmaWVkXG4gICAgICogICAgICAgICAgICAgICAgZm9yIHRoZSBibG9ja2lkIHBhcmFtZXRlciBtdXN0IGJlIHRoZSBzYW1lIHNpemUgZm9yIGVhY2ggYmxvY2suXG4gICAgICogQHBhcmFtIGNvbnRlbnRMZW5ndGggVGhlIGxlbmd0aCBvZiB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gc291cmNlVXJsIFNwZWNpZnkgYSBVUkwgdG8gdGhlIGNvcHkgc291cmNlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgc3RhZ2VCbG9ja0Zyb21VUkwoYmxvY2tJZCwgY29udGVudExlbmd0aCwgc291cmNlVXJsLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IGJsb2NrSWQsIGNvbnRlbnRMZW5ndGgsIHNvdXJjZVVybCwgb3B0aW9ucyB9LCBzdGFnZUJsb2NrRnJvbVVSTE9wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgQ29tbWl0IEJsb2NrIExpc3Qgb3BlcmF0aW9uIHdyaXRlcyBhIGJsb2IgYnkgc3BlY2lmeWluZyB0aGUgbGlzdCBvZiBibG9jayBJRHMgdGhhdCBtYWtlIHVwIHRoZVxuICAgICAqIGJsb2IuIEluIG9yZGVyIHRvIGJlIHdyaXR0ZW4gYXMgcGFydCBvZiBhIGJsb2IsIGEgYmxvY2sgbXVzdCBoYXZlIGJlZW4gc3VjY2Vzc2Z1bGx5IHdyaXR0ZW4gdG8gdGhlXG4gICAgICogc2VydmVyIGluIGEgcHJpb3IgUHV0IEJsb2NrIG9wZXJhdGlvbi4gWW91IGNhbiBjYWxsIFB1dCBCbG9jayBMaXN0IHRvIHVwZGF0ZSBhIGJsb2IgYnkgdXBsb2FkaW5nXG4gICAgICogb25seSB0aG9zZSBibG9ja3MgdGhhdCBoYXZlIGNoYW5nZWQsIHRoZW4gY29tbWl0dGluZyB0aGUgbmV3IGFuZCBleGlzdGluZyBibG9ja3MgdG9nZXRoZXIuIFlvdSBjYW5cbiAgICAgKiBkbyB0aGlzIGJ5IHNwZWNpZnlpbmcgd2hldGhlciB0byBjb21taXQgYSBibG9jayBmcm9tIHRoZSBjb21taXR0ZWQgYmxvY2sgbGlzdCBvciBmcm9tIHRoZVxuICAgICAqIHVuY29tbWl0dGVkIGJsb2NrIGxpc3QsIG9yIHRvIGNvbW1pdCB0aGUgbW9zdCByZWNlbnRseSB1cGxvYWRlZCB2ZXJzaW9uIG9mIHRoZSBibG9jaywgd2hpY2hldmVyIGxpc3RcbiAgICAgKiBpdCBtYXkgYmVsb25nIHRvLlxuICAgICAqIEBwYXJhbSBibG9ja3MgQmxvYiBCbG9ja3MuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBjb21taXRCbG9ja0xpc3QoYmxvY2tzLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IGJsb2Nrcywgb3B0aW9ucyB9LCBjb21taXRCbG9ja0xpc3RPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIEdldCBCbG9jayBMaXN0IG9wZXJhdGlvbiByZXRyaWV2ZXMgdGhlIGxpc3Qgb2YgYmxvY2tzIHRoYXQgaGF2ZSBiZWVuIHVwbG9hZGVkIGFzIHBhcnQgb2YgYSBibG9ja1xuICAgICAqIGJsb2JcbiAgICAgKiBAcGFyYW0gbGlzdFR5cGUgU3BlY2lmaWVzIHdoZXRoZXIgdG8gcmV0dXJuIHRoZSBsaXN0IG9mIGNvbW1pdHRlZCBibG9ja3MsIHRoZSBsaXN0IG9mIHVuY29tbWl0dGVkXG4gICAgICogICAgICAgICAgICAgICAgIGJsb2Nrcywgb3IgYm90aCBsaXN0cyB0b2dldGhlci5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGdldEJsb2NrTGlzdChsaXN0VHlwZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBsaXN0VHlwZSwgb3B0aW9ucyB9LCBnZXRCbG9ja0xpc3RPcGVyYXRpb25TcGVjKTtcbiAgICB9XG59XG4vLyBPcGVyYXRpb24gU3BlY2lmaWNhdGlvbnNcbmNvbnN0IHhtbFNlcmlhbGl6ZXIgPSBjb3JlQ2xpZW50X19uYW1lc3BhY2UuY3JlYXRlU2VyaWFsaXplcihNYXBwZXJzLCAvKiBpc1htbCAqLyB0cnVlKTtcbmNvbnN0IHVwbG9hZE9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMToge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvY2tCbG9iVXBsb2FkSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvY2tCbG9iVXBsb2FkRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHJlcXVlc3RCb2R5OiBib2R5MSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgbWV0YWRhdGEsXG4gICAgICAgIGxlYXNlSWQsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIGVuY3J5cHRpb25LZXksXG4gICAgICAgIGVuY3J5cHRpb25LZXlTaGEyNTYsXG4gICAgICAgIGVuY3J5cHRpb25BbGdvcml0aG0sXG4gICAgICAgIGlmTWF0Y2gsXG4gICAgICAgIGlmTm9uZU1hdGNoLFxuICAgICAgICBpZlRhZ3MsXG4gICAgICAgIGJsb2JDYWNoZUNvbnRyb2wsXG4gICAgICAgIGJsb2JDb250ZW50VHlwZSxcbiAgICAgICAgYmxvYkNvbnRlbnRNRDUsXG4gICAgICAgIGJsb2JDb250ZW50RW5jb2RpbmcsXG4gICAgICAgIGJsb2JDb250ZW50TGFuZ3VhZ2UsXG4gICAgICAgIGJsb2JDb250ZW50RGlzcG9zaXRpb24sXG4gICAgICAgIGltbXV0YWJpbGl0eVBvbGljeUV4cGlyeSxcbiAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5TW9kZSxcbiAgICAgICAgZW5jcnlwdGlvblNjb3BlLFxuICAgICAgICB0aWVyLFxuICAgICAgICBibG9iVGFnc1N0cmluZyxcbiAgICAgICAgbGVnYWxIb2xkMSxcbiAgICAgICAgdHJhbnNhY3Rpb25hbENvbnRlbnRNRDUsXG4gICAgICAgIHRyYW5zYWN0aW9uYWxDb250ZW50Q3JjNjQsXG4gICAgICAgIGNvbnRlbnRUeXBlMSxcbiAgICAgICAgYWNjZXB0MixcbiAgICAgICAgYmxvYlR5cGUyLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgY29udGVudFR5cGU6IFwiYXBwbGljYXRpb24veG1sOyBjaGFyc2V0PXV0Zi04XCIsXG4gICAgbWVkaWFUeXBlOiBcImJpbmFyeVwiLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIsXG59O1xuY29uc3QgcHV0QmxvYkZyb21VcmxPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDE6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2NrQmxvYlB1dEJsb2JGcm9tVXJsSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvY2tCbG9iUHV0QmxvYkZyb21VcmxFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbdGltZW91dEluU2Vjb25kc10sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIGNvbnRlbnRMZW5ndGgsXG4gICAgICAgIG1ldGFkYXRhLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBlbmNyeXB0aW9uS2V5LFxuICAgICAgICBlbmNyeXB0aW9uS2V5U2hhMjU2LFxuICAgICAgICBlbmNyeXB0aW9uQWxnb3JpdGhtLFxuICAgICAgICBpZk1hdGNoLFxuICAgICAgICBpZk5vbmVNYXRjaCxcbiAgICAgICAgaWZUYWdzLFxuICAgICAgICBibG9iQ2FjaGVDb250cm9sLFxuICAgICAgICBibG9iQ29udGVudFR5cGUsXG4gICAgICAgIGJsb2JDb250ZW50TUQ1LFxuICAgICAgICBibG9iQ29udGVudEVuY29kaW5nLFxuICAgICAgICBibG9iQ29udGVudExhbmd1YWdlLFxuICAgICAgICBibG9iQ29udGVudERpc3Bvc2l0aW9uLFxuICAgICAgICBlbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgIHRpZXIsXG4gICAgICAgIHNvdXJjZUlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgc291cmNlSWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIHNvdXJjZUlmTWF0Y2gsXG4gICAgICAgIHNvdXJjZUlmTm9uZU1hdGNoLFxuICAgICAgICBzb3VyY2VJZlRhZ3MsXG4gICAgICAgIGNvcHlTb3VyY2UsXG4gICAgICAgIGJsb2JUYWdzU3RyaW5nLFxuICAgICAgICBzb3VyY2VDb250ZW50TUQ1LFxuICAgICAgICBjb3B5U291cmNlQXV0aG9yaXphdGlvbixcbiAgICAgICAgY29weVNvdXJjZVRhZ3MsXG4gICAgICAgIHRyYW5zYWN0aW9uYWxDb250ZW50TUQ1LFxuICAgICAgICBibG9iVHlwZTIsXG4gICAgICAgIGNvcHlTb3VyY2VCbG9iUHJvcGVydGllcyxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIsXG59O1xuY29uc3Qgc3RhZ2VCbG9ja09wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMToge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvY2tCbG9iU3RhZ2VCbG9ja0hlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2NrQmxvYlN0YWdlQmxvY2tFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcmVxdWVzdEJvZHk6IGJvZHkxLFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgICAgICBjb21wMjQsXG4gICAgICAgIGJsb2NrSWQsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgZW5jcnlwdGlvbktleSxcbiAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1NixcbiAgICAgICAgZW5jcnlwdGlvbkFsZ29yaXRobSxcbiAgICAgICAgZW5jcnlwdGlvblNjb3BlLFxuICAgICAgICB0cmFuc2FjdGlvbmFsQ29udGVudE1ENSxcbiAgICAgICAgdHJhbnNhY3Rpb25hbENvbnRlbnRDcmM2NCxcbiAgICAgICAgY29udGVudFR5cGUxLFxuICAgICAgICBhY2NlcHQyLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgY29udGVudFR5cGU6IFwiYXBwbGljYXRpb24veG1sOyBjaGFyc2V0PXV0Zi04XCIsXG4gICAgbWVkaWFUeXBlOiBcImJpbmFyeVwiLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIsXG59O1xuY29uc3Qgc3RhZ2VCbG9ja0Zyb21VUkxPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDE6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2NrQmxvYlN0YWdlQmxvY2tGcm9tVVJMSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvY2tCbG9iU3RhZ2VCbG9ja0Zyb21VUkxFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIGNvbXAyNCxcbiAgICAgICAgYmxvY2tJZCxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBjb250ZW50TGVuZ3RoLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBlbmNyeXB0aW9uS2V5LFxuICAgICAgICBlbmNyeXB0aW9uS2V5U2hhMjU2LFxuICAgICAgICBlbmNyeXB0aW9uQWxnb3JpdGhtLFxuICAgICAgICBlbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgIHNvdXJjZUlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgc291cmNlSWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIHNvdXJjZUlmTWF0Y2gsXG4gICAgICAgIHNvdXJjZUlmTm9uZU1hdGNoLFxuICAgICAgICBzb3VyY2VDb250ZW50TUQ1LFxuICAgICAgICBjb3B5U291cmNlQXV0aG9yaXphdGlvbixcbiAgICAgICAgc291cmNlVXJsLFxuICAgICAgICBzb3VyY2VDb250ZW50Q3JjNjQsXG4gICAgICAgIHNvdXJjZVJhbmdlMSxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIsXG59O1xuY29uc3QgY29tbWl0QmxvY2tMaXN0T3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAxOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9ja0Jsb2JDb21taXRCbG9ja0xpc3RIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9ja0Jsb2JDb21taXRCbG9ja0xpc3RFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcmVxdWVzdEJvZHk6IGJsb2NrcyxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzLCBjb21wMjVdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgY29udGVudFR5cGUsXG4gICAgICAgIGFjY2VwdCxcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBtZXRhZGF0YSxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgZW5jcnlwdGlvbktleSxcbiAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1NixcbiAgICAgICAgZW5jcnlwdGlvbkFsZ29yaXRobSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICAgICAgYmxvYkNhY2hlQ29udHJvbCxcbiAgICAgICAgYmxvYkNvbnRlbnRUeXBlLFxuICAgICAgICBibG9iQ29udGVudE1ENSxcbiAgICAgICAgYmxvYkNvbnRlbnRFbmNvZGluZyxcbiAgICAgICAgYmxvYkNvbnRlbnRMYW5ndWFnZSxcbiAgICAgICAgYmxvYkNvbnRlbnREaXNwb3NpdGlvbixcbiAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5RXhwaXJ5LFxuICAgICAgICBpbW11dGFiaWxpdHlQb2xpY3lNb2RlLFxuICAgICAgICBlbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgIHRpZXIsXG4gICAgICAgIGJsb2JUYWdzU3RyaW5nLFxuICAgICAgICBsZWdhbEhvbGQxLFxuICAgICAgICB0cmFuc2FjdGlvbmFsQ29udGVudE1ENSxcbiAgICAgICAgdHJhbnNhY3Rpb25hbENvbnRlbnRDcmM2NCxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3htbDsgY2hhcnNldD11dGYtOFwiLFxuICAgIG1lZGlhVHlwZTogXCJ4bWxcIixcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyLFxufTtcbmNvbnN0IGdldEJsb2NrTGlzdE9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiR0VUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogQmxvY2tMaXN0LFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvY2tCbG9iR2V0QmxvY2tMaXN0SGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvY2tCbG9iR2V0QmxvY2tMaXN0RXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgICAgICBzbmFwc2hvdCxcbiAgICAgICAgY29tcDI1LFxuICAgICAgICBsaXN0VHlwZSxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZlRhZ3MsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyLFxufTtcblxuLypcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuICpcbiAqIENvZGUgZ2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgQXV0b1Jlc3QgQ29kZSBHZW5lcmF0b3IuXG4gKiBDaGFuZ2VzIG1heSBjYXVzZSBpbmNvcnJlY3QgYmVoYXZpb3IgYW5kIHdpbGwgYmUgbG9zdCBpZiB0aGUgY29kZSBpcyByZWdlbmVyYXRlZC5cbiAqL1xubGV0IFN0b3JhZ2VDbGllbnQkMSA9IGNsYXNzIFN0b3JhZ2VDbGllbnQgZXh0ZW5kcyBjb3JlSHR0cENvbXBhdF9fbmFtZXNwYWNlLkV4dGVuZGVkU2VydmljZUNsaWVudCB7XG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIFN0b3JhZ2VDbGllbnQgY2xhc3MuXG4gICAgICogQHBhcmFtIHVybCBUaGUgVVJMIG9mIHRoZSBzZXJ2aWNlIGFjY291bnQsIGNvbnRhaW5lciwgb3IgYmxvYiB0aGF0IGlzIHRoZSB0YXJnZXQgb2YgdGhlIGRlc2lyZWRcbiAgICAgKiAgICAgICAgICAgIG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgcGFyYW1ldGVyIG9wdGlvbnNcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcih1cmwsIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgaWYgKHVybCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCIndXJsJyBjYW5ub3QgYmUgbnVsbFwiKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBJbml0aWFsaXppbmcgZGVmYXVsdCB2YWx1ZXMgZm9yIG9wdGlvbnNcbiAgICAgICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICAgICAgICBvcHRpb25zID0ge307XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGVmYXVsdHMgPSB7XG4gICAgICAgICAgICByZXF1ZXN0Q29udGVudFR5cGU6IFwiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOFwiLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBwYWNrYWdlRGV0YWlscyA9IGBhenNkay1qcy1henVyZS1zdG9yYWdlLWJsb2IvMTIuMjUuMGA7XG4gICAgICAgIGNvbnN0IHVzZXJBZ2VudFByZWZpeCA9IG9wdGlvbnMudXNlckFnZW50T3B0aW9ucyAmJiBvcHRpb25zLnVzZXJBZ2VudE9wdGlvbnMudXNlckFnZW50UHJlZml4XG4gICAgICAgICAgICA/IGAke29wdGlvbnMudXNlckFnZW50T3B0aW9ucy51c2VyQWdlbnRQcmVmaXh9ICR7cGFja2FnZURldGFpbHN9YFxuICAgICAgICAgICAgOiBgJHtwYWNrYWdlRGV0YWlsc31gO1xuICAgICAgICBjb25zdCBvcHRpb25zV2l0aERlZmF1bHRzID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRzKSwgb3B0aW9ucyksIHsgdXNlckFnZW50T3B0aW9uczoge1xuICAgICAgICAgICAgICAgIHVzZXJBZ2VudFByZWZpeCxcbiAgICAgICAgICAgIH0sIGVuZHBvaW50OiAoX2IgPSAoX2EgPSBvcHRpb25zLmVuZHBvaW50KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBvcHRpb25zLmJhc2VVcmkpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IFwie3VybH1cIiB9KTtcbiAgICAgICAgc3VwZXIob3B0aW9uc1dpdGhEZWZhdWx0cyk7XG4gICAgICAgIC8vIFBhcmFtZXRlciBhc3NpZ25tZW50c1xuICAgICAgICB0aGlzLnVybCA9IHVybDtcbiAgICAgICAgLy8gQXNzaWduaW5nIHZhbHVlcyB0byBDb25zdGFudCBwYXJhbWV0ZXJzXG4gICAgICAgIHRoaXMudmVyc2lvbiA9IG9wdGlvbnMudmVyc2lvbiB8fCBcIjIwMjQtMTEtMDRcIjtcbiAgICAgICAgdGhpcy5zZXJ2aWNlID0gbmV3IFNlcnZpY2VJbXBsKHRoaXMpO1xuICAgICAgICB0aGlzLmNvbnRhaW5lciA9IG5ldyBDb250YWluZXJJbXBsKHRoaXMpO1xuICAgICAgICB0aGlzLmJsb2IgPSBuZXcgQmxvYkltcGwodGhpcyk7XG4gICAgICAgIHRoaXMucGFnZUJsb2IgPSBuZXcgUGFnZUJsb2JJbXBsKHRoaXMpO1xuICAgICAgICB0aGlzLmFwcGVuZEJsb2IgPSBuZXcgQXBwZW5kQmxvYkltcGwodGhpcyk7XG4gICAgICAgIHRoaXMuYmxvY2tCbG9iID0gbmV3IEJsb2NrQmxvYkltcGwodGhpcyk7XG4gICAgfVxufTtcblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5jbGFzcyBTdG9yYWdlQ29udGV4dENsaWVudCBleHRlbmRzIFN0b3JhZ2VDbGllbnQkMSB7XG4gICAgYXN5bmMgc2VuZE9wZXJhdGlvblJlcXVlc3Qob3BlcmF0aW9uQXJndW1lbnRzLCBvcGVyYXRpb25TcGVjKSB7XG4gICAgICAgIGNvbnN0IG9wZXJhdGlvblNwZWNUb1NlbmQgPSBPYmplY3QuYXNzaWduKHt9LCBvcGVyYXRpb25TcGVjKTtcbiAgICAgICAgaWYgKG9wZXJhdGlvblNwZWNUb1NlbmQucGF0aCA9PT0gXCIve2NvbnRhaW5lck5hbWV9XCIgfHxcbiAgICAgICAgICAgIG9wZXJhdGlvblNwZWNUb1NlbmQucGF0aCA9PT0gXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiKSB7XG4gICAgICAgICAgICBvcGVyYXRpb25TcGVjVG9TZW5kLnBhdGggPSBcIlwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdXBlci5zZW5kT3BlcmF0aW9uUmVxdWVzdChvcGVyYXRpb25Bcmd1bWVudHMsIG9wZXJhdGlvblNwZWNUb1NlbmQpO1xuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIEEgU3RvcmFnZUNsaWVudCByZXByZXNlbnRzIGEgYmFzZWQgVVJMIGNsYXNzIGZvciB7QGxpbmsgQmxvYlNlcnZpY2VDbGllbnR9LCB7QGxpbmsgQ29udGFpbmVyQ2xpZW50fVxuICogYW5kIGV0Yy5cbiAqL1xuY2xhc3MgU3RvcmFnZUNsaWVudCB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBTdG9yYWdlQ2xpZW50LlxuICAgICAqIEBwYXJhbSB1cmwgLSB1cmwgdG8gcmVzb3VyY2VcbiAgICAgKiBAcGFyYW0gcGlwZWxpbmUgLSByZXF1ZXN0IHBvbGljeSBwaXBlbGluZS5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcih1cmwsIHBpcGVsaW5lKSB7XG4gICAgICAgIC8vIFVSTCBzaG91bGQgYmUgZW5jb2RlZCBhbmQgb25seSBvbmNlLCBwcm90b2NvbCBsYXllciBzaG91bGRuJ3QgZW5jb2RlIFVSTCBhZ2FpblxuICAgICAgICB0aGlzLnVybCA9IGVzY2FwZVVSTFBhdGgodXJsKTtcbiAgICAgICAgdGhpcy5hY2NvdW50TmFtZSA9IGdldEFjY291bnROYW1lRnJvbVVybCh1cmwpO1xuICAgICAgICB0aGlzLnBpcGVsaW5lID0gcGlwZWxpbmU7XG4gICAgICAgIHRoaXMuc3RvcmFnZUNsaWVudENvbnRleHQgPSBuZXcgU3RvcmFnZUNvbnRleHRDbGllbnQodGhpcy51cmwsIGdldENvcmVDbGllbnRPcHRpb25zKHBpcGVsaW5lKSk7XG4gICAgICAgIHRoaXMuaXNIdHRwcyA9IGlFcXVhbChnZXRVUkxTY2hlbWUodGhpcy51cmwpIHx8IFwiXCIsIFwiaHR0cHNcIik7XG4gICAgICAgIHRoaXMuY3JlZGVudGlhbCA9IGdldENyZWRlbnRpYWxGcm9tUGlwZWxpbmUocGlwZWxpbmUpO1xuICAgICAgICAvLyBPdmVycmlkZSBwcm90b2NvbCBsYXllcidzIGRlZmF1bHQgY29udGVudC10eXBlXG4gICAgICAgIGNvbnN0IHN0b3JhZ2VDbGllbnRDb250ZXh0ID0gdGhpcy5zdG9yYWdlQ2xpZW50Q29udGV4dDtcbiAgICAgICAgc3RvcmFnZUNsaWVudENvbnRleHQucmVxdWVzdENvbnRlbnRUeXBlID0gdW5kZWZpbmVkO1xuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIENyZWF0ZXMgYSBzcGFuIHVzaW5nIHRoZSBnbG9iYWwgdHJhY2VyLlxuICogQGludGVybmFsXG4gKi9cbmNvbnN0IHRyYWNpbmdDbGllbnQgPSBjb3JlVHJhY2luZy5jcmVhdGVUcmFjaW5nQ2xpZW50KHtcbiAgICBwYWNrYWdlTmFtZTogXCJAYXp1cmUvc3RvcmFnZS1ibG9iXCIsXG4gICAgcGFja2FnZVZlcnNpb246IFNES19WRVJTSU9OLFxuICAgIG5hbWVzcGFjZTogXCJNaWNyb3NvZnQuU3RvcmFnZVwiLFxufSk7XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBPTkxZIEFWQUlMQUJMRSBJTiBOT0RFLkpTIFJVTlRJTUUuXG4gKlxuICogVGhpcyBpcyBhIGhlbHBlciBjbGFzcyB0byBjb25zdHJ1Y3QgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBwZXJtaXNzaW9ucyBncmFudGVkIGJ5IGEgU2VydmljZVNBUyB0byBhIGJsb2IuIFNldHRpbmdcbiAqIGEgdmFsdWUgdG8gdHJ1ZSBtZWFucyB0aGF0IGFueSBTQVMgd2hpY2ggdXNlcyB0aGVzZSBwZXJtaXNzaW9ucyB3aWxsIGdyYW50IHBlcm1pc3Npb25zIGZvciB0aGF0IG9wZXJhdGlvbi4gT25jZSBhbGxcbiAqIHRoZSB2YWx1ZXMgYXJlIHNldCwgdGhpcyBzaG91bGQgYmUgc2VyaWFsaXplZCB3aXRoIHRvU3RyaW5nIGFuZCBzZXQgYXMgdGhlIHBlcm1pc3Npb25zIGZpZWxkIG9uIGFcbiAqIHtAbGluayBCbG9iU0FTU2lnbmF0dXJlVmFsdWVzfSBvYmplY3QuIEl0IGlzIHBvc3NpYmxlIHRvIGNvbnN0cnVjdCB0aGUgcGVybWlzc2lvbnMgc3RyaW5nIHdpdGhvdXQgdGhpcyBjbGFzcywgYnV0XG4gKiB0aGUgb3JkZXIgb2YgdGhlIHBlcm1pc3Npb25zIGlzIHBhcnRpY3VsYXIgYW5kIHRoaXMgY2xhc3MgZ3VhcmFudGVlcyBjb3JyZWN0bmVzcy5cbiAqL1xuY2xhc3MgQmxvYlNBU1Blcm1pc3Npb25zIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyBSZWFkIGFjY2VzcyBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5yZWFkID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgQWRkIGFjY2VzcyBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5hZGQgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyBDcmVhdGUgYWNjZXNzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmNyZWF0ZSA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIFdyaXRlIGFjY2VzcyBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy53cml0ZSA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIERlbGV0ZSBhY2Nlc3MgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZGVsZXRlID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgRGVsZXRlIHZlcnNpb24gYWNjZXNzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmRlbGV0ZVZlcnNpb24gPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNmaWVzIFRhZyBhY2Nlc3MgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudGFnID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgTW92ZSBhY2Nlc3MgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMubW92ZSA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIEV4ZWN1dGUgYWNjZXNzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmV4ZWN1dGUgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyBTZXRJbW11dGFiaWxpdHlQb2xpY3kgYWNjZXNzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnNldEltbXV0YWJpbGl0eVBvbGljeSA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHRoYXQgUGVybWFuZW50IERlbGV0ZSBpcyBwZXJtaXR0ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnBlcm1hbmVudERlbGV0ZSA9IGZhbHNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEge0BsaW5rIEJsb2JTQVNQZXJtaXNzaW9uc30gZnJvbSB0aGUgc3BlY2lmaWVkIHBlcm1pc3Npb25zIHN0cmluZy4gVGhpcyBtZXRob2Qgd2lsbCB0aHJvdyBhblxuICAgICAqIEVycm9yIGlmIGl0IGVuY291bnRlcnMgYSBjaGFyYWN0ZXIgdGhhdCBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGEgdmFsaWQgcGVybWlzc2lvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwZXJtaXNzaW9ucyAtXG4gICAgICovXG4gICAgc3RhdGljIHBhcnNlKHBlcm1pc3Npb25zKSB7XG4gICAgICAgIGNvbnN0IGJsb2JTQVNQZXJtaXNzaW9ucyA9IG5ldyBCbG9iU0FTUGVybWlzc2lvbnMoKTtcbiAgICAgICAgZm9yIChjb25zdCBjaGFyIG9mIHBlcm1pc3Npb25zKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGNoYXIpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwiclwiOlxuICAgICAgICAgICAgICAgICAgICBibG9iU0FTUGVybWlzc2lvbnMucmVhZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJhXCI6XG4gICAgICAgICAgICAgICAgICAgIGJsb2JTQVNQZXJtaXNzaW9ucy5hZGQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiY1wiOlxuICAgICAgICAgICAgICAgICAgICBibG9iU0FTUGVybWlzc2lvbnMuY3JlYXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIndcIjpcbiAgICAgICAgICAgICAgICAgICAgYmxvYlNBU1Blcm1pc3Npb25zLndyaXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImRcIjpcbiAgICAgICAgICAgICAgICAgICAgYmxvYlNBU1Blcm1pc3Npb25zLmRlbGV0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJ4XCI6XG4gICAgICAgICAgICAgICAgICAgIGJsb2JTQVNQZXJtaXNzaW9ucy5kZWxldGVWZXJzaW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInRcIjpcbiAgICAgICAgICAgICAgICAgICAgYmxvYlNBU1Blcm1pc3Npb25zLnRhZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJtXCI6XG4gICAgICAgICAgICAgICAgICAgIGJsb2JTQVNQZXJtaXNzaW9ucy5tb3ZlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImVcIjpcbiAgICAgICAgICAgICAgICAgICAgYmxvYlNBU1Blcm1pc3Npb25zLmV4ZWN1dGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiaVwiOlxuICAgICAgICAgICAgICAgICAgICBibG9iU0FTUGVybWlzc2lvbnMuc2V0SW1tdXRhYmlsaXR5UG9saWN5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInlcIjpcbiAgICAgICAgICAgICAgICAgICAgYmxvYlNBU1Blcm1pc3Npb25zLnBlcm1hbmVudERlbGV0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBJbnZhbGlkIHBlcm1pc3Npb246ICR7Y2hhcn1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYmxvYlNBU1Blcm1pc3Npb25zO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEge0BsaW5rIEJsb2JTQVNQZXJtaXNzaW9uc30gZnJvbSBhIHJhdyBvYmplY3Qgd2hpY2ggY29udGFpbnMgc2FtZSBrZXlzIGFzIGl0XG4gICAgICogYW5kIGJvb2xlYW4gdmFsdWVzIGZvciB0aGVtLlxuICAgICAqXG4gICAgICogQHBhcmFtIHBlcm1pc3Npb25MaWtlIC1cbiAgICAgKi9cbiAgICBzdGF0aWMgZnJvbShwZXJtaXNzaW9uTGlrZSkge1xuICAgICAgICBjb25zdCBibG9iU0FTUGVybWlzc2lvbnMgPSBuZXcgQmxvYlNBU1Blcm1pc3Npb25zKCk7XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS5yZWFkKSB7XG4gICAgICAgICAgICBibG9iU0FTUGVybWlzc2lvbnMucmVhZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLmFkZCkge1xuICAgICAgICAgICAgYmxvYlNBU1Blcm1pc3Npb25zLmFkZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLmNyZWF0ZSkge1xuICAgICAgICAgICAgYmxvYlNBU1Blcm1pc3Npb25zLmNyZWF0ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLndyaXRlKSB7XG4gICAgICAgICAgICBibG9iU0FTUGVybWlzc2lvbnMud3JpdGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS5kZWxldGUpIHtcbiAgICAgICAgICAgIGJsb2JTQVNQZXJtaXNzaW9ucy5kZWxldGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS5kZWxldGVWZXJzaW9uKSB7XG4gICAgICAgICAgICBibG9iU0FTUGVybWlzc2lvbnMuZGVsZXRlVmVyc2lvbiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLnRhZykge1xuICAgICAgICAgICAgYmxvYlNBU1Blcm1pc3Npb25zLnRhZyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLm1vdmUpIHtcbiAgICAgICAgICAgIGJsb2JTQVNQZXJtaXNzaW9ucy5tb3ZlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2UuZXhlY3V0ZSkge1xuICAgICAgICAgICAgYmxvYlNBU1Blcm1pc3Npb25zLmV4ZWN1dGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS5zZXRJbW11dGFiaWxpdHlQb2xpY3kpIHtcbiAgICAgICAgICAgIGJsb2JTQVNQZXJtaXNzaW9ucy5zZXRJbW11dGFiaWxpdHlQb2xpY3kgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS5wZXJtYW5lbnREZWxldGUpIHtcbiAgICAgICAgICAgIGJsb2JTQVNQZXJtaXNzaW9ucy5wZXJtYW5lbnREZWxldGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBibG9iU0FTUGVybWlzc2lvbnM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIHRoZSBnaXZlbiBwZXJtaXNzaW9ucyB0byBhIHN0cmluZy4gVXNpbmcgdGhpcyBtZXRob2Qgd2lsbCBndWFyYW50ZWUgdGhlIHBlcm1pc3Npb25zIGFyZSBpbiBhblxuICAgICAqIG9yZGVyIGFjY2VwdGVkIGJ5IHRoZSBzZXJ2aWNlLlxuICAgICAqXG4gICAgICogQHJldHVybnMgQSBzdHJpbmcgd2hpY2ggcmVwcmVzZW50cyB0aGUgQmxvYlNBU1Blcm1pc3Npb25zXG4gICAgICovXG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIGNvbnN0IHBlcm1pc3Npb25zID0gW107XG4gICAgICAgIGlmICh0aGlzLnJlYWQpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJyXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmFkZCkge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcImFcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY3JlYXRlKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwiY1wiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy53cml0ZSkge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcIndcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZGVsZXRlKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwiZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kZWxldGVWZXJzaW9uKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwieFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy50YWcpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJ0XCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1vdmUpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJtXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmV4ZWN1dGUpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJlXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNldEltbXV0YWJpbGl0eVBvbGljeSkge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcImlcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucGVybWFuZW50RGVsZXRlKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwieVwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGVybWlzc2lvbnMuam9pbihcIlwiKTtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBUaGlzIGlzIGEgaGVscGVyIGNsYXNzIHRvIGNvbnN0cnVjdCBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHBlcm1pc3Npb25zIGdyYW50ZWQgYnkgYSBTZXJ2aWNlU0FTIHRvIGEgY29udGFpbmVyLlxuICogU2V0dGluZyBhIHZhbHVlIHRvIHRydWUgbWVhbnMgdGhhdCBhbnkgU0FTIHdoaWNoIHVzZXMgdGhlc2UgcGVybWlzc2lvbnMgd2lsbCBncmFudCBwZXJtaXNzaW9ucyBmb3IgdGhhdCBvcGVyYXRpb24uXG4gKiBPbmNlIGFsbCB0aGUgdmFsdWVzIGFyZSBzZXQsIHRoaXMgc2hvdWxkIGJlIHNlcmlhbGl6ZWQgd2l0aCB0b1N0cmluZyBhbmQgc2V0IGFzIHRoZSBwZXJtaXNzaW9ucyBmaWVsZCBvbiBhXG4gKiB7QGxpbmsgQmxvYlNBU1NpZ25hdHVyZVZhbHVlc30gb2JqZWN0LiBJdCBpcyBwb3NzaWJsZSB0byBjb25zdHJ1Y3QgdGhlIHBlcm1pc3Npb25zIHN0cmluZyB3aXRob3V0IHRoaXMgY2xhc3MsIGJ1dFxuICogdGhlIG9yZGVyIG9mIHRoZSBwZXJtaXNzaW9ucyBpcyBwYXJ0aWN1bGFyIGFuZCB0aGlzIGNsYXNzIGd1YXJhbnRlZXMgY29ycmVjdG5lc3MuXG4gKi9cbmNsYXNzIENvbnRhaW5lclNBU1Blcm1pc3Npb25zIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyBSZWFkIGFjY2VzcyBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5yZWFkID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgQWRkIGFjY2VzcyBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5hZGQgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyBDcmVhdGUgYWNjZXNzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmNyZWF0ZSA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIFdyaXRlIGFjY2VzcyBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy53cml0ZSA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIERlbGV0ZSBhY2Nlc3MgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZGVsZXRlID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgRGVsZXRlIHZlcnNpb24gYWNjZXNzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmRlbGV0ZVZlcnNpb24gPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyBMaXN0IGFjY2VzcyBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5saXN0ID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjZmllcyBUYWcgYWNjZXNzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnRhZyA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIE1vdmUgYWNjZXNzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLm1vdmUgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyBFeGVjdXRlIGFjY2VzcyBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5leGVjdXRlID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgU2V0SW1tdXRhYmlsaXR5UG9saWN5IGFjY2VzcyBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5zZXRJbW11dGFiaWxpdHlQb2xpY3kgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB0aGF0IFBlcm1hbmVudCBEZWxldGUgaXMgcGVybWl0dGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5wZXJtYW5lbnREZWxldGUgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB0aGF0IEZpbHRlciBCbG9icyBieSBUYWdzIGlzIHBlcm1pdHRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZmlsdGVyQnlUYWdzID0gZmFsc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4ge0BsaW5rIENvbnRhaW5lclNBU1Blcm1pc3Npb25zfSBmcm9tIHRoZSBzcGVjaWZpZWQgcGVybWlzc2lvbnMgc3RyaW5nLiBUaGlzIG1ldGhvZCB3aWxsIHRocm93IGFuXG4gICAgICogRXJyb3IgaWYgaXQgZW5jb3VudGVycyBhIGNoYXJhY3RlciB0aGF0IGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSB2YWxpZCBwZXJtaXNzaW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIHBlcm1pc3Npb25zIC1cbiAgICAgKi9cbiAgICBzdGF0aWMgcGFyc2UocGVybWlzc2lvbnMpIHtcbiAgICAgICAgY29uc3QgY29udGFpbmVyU0FTUGVybWlzc2lvbnMgPSBuZXcgQ29udGFpbmVyU0FTUGVybWlzc2lvbnMoKTtcbiAgICAgICAgZm9yIChjb25zdCBjaGFyIG9mIHBlcm1pc3Npb25zKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGNoYXIpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwiclwiOlxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJTQVNQZXJtaXNzaW9ucy5yZWFkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImFcIjpcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyU0FTUGVybWlzc2lvbnMuYWRkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImNcIjpcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyU0FTUGVybWlzc2lvbnMuY3JlYXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIndcIjpcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyU0FTUGVybWlzc2lvbnMud3JpdGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiZFwiOlxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJTQVNQZXJtaXNzaW9ucy5kZWxldGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwibFwiOlxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJTQVNQZXJtaXNzaW9ucy5saXN0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInRcIjpcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyU0FTUGVybWlzc2lvbnMudGFnID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInhcIjpcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyU0FTUGVybWlzc2lvbnMuZGVsZXRlVmVyc2lvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJtXCI6XG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lclNBU1Blcm1pc3Npb25zLm1vdmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiZVwiOlxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJTQVNQZXJtaXNzaW9ucy5leGVjdXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImlcIjpcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyU0FTUGVybWlzc2lvbnMuc2V0SW1tdXRhYmlsaXR5UG9saWN5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInlcIjpcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyU0FTUGVybWlzc2lvbnMucGVybWFuZW50RGVsZXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImZcIjpcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyU0FTUGVybWlzc2lvbnMuZmlsdGVyQnlUYWdzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEludmFsaWQgcGVybWlzc2lvbiAke2NoYXJ9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRhaW5lclNBU1Blcm1pc3Npb25zO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEge0BsaW5rIENvbnRhaW5lclNBU1Blcm1pc3Npb25zfSBmcm9tIGEgcmF3IG9iamVjdCB3aGljaCBjb250YWlucyBzYW1lIGtleXMgYXMgaXRcbiAgICAgKiBhbmQgYm9vbGVhbiB2YWx1ZXMgZm9yIHRoZW0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGVybWlzc2lvbkxpa2UgLVxuICAgICAqL1xuICAgIHN0YXRpYyBmcm9tKHBlcm1pc3Npb25MaWtlKSB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lclNBU1Blcm1pc3Npb25zID0gbmV3IENvbnRhaW5lclNBU1Blcm1pc3Npb25zKCk7XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS5yZWFkKSB7XG4gICAgICAgICAgICBjb250YWluZXJTQVNQZXJtaXNzaW9ucy5yZWFkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2UuYWRkKSB7XG4gICAgICAgICAgICBjb250YWluZXJTQVNQZXJtaXNzaW9ucy5hZGQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS5jcmVhdGUpIHtcbiAgICAgICAgICAgIGNvbnRhaW5lclNBU1Blcm1pc3Npb25zLmNyZWF0ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLndyaXRlKSB7XG4gICAgICAgICAgICBjb250YWluZXJTQVNQZXJtaXNzaW9ucy53cml0ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLmRlbGV0ZSkge1xuICAgICAgICAgICAgY29udGFpbmVyU0FTUGVybWlzc2lvbnMuZGVsZXRlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2UubGlzdCkge1xuICAgICAgICAgICAgY29udGFpbmVyU0FTUGVybWlzc2lvbnMubGlzdCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLmRlbGV0ZVZlcnNpb24pIHtcbiAgICAgICAgICAgIGNvbnRhaW5lclNBU1Blcm1pc3Npb25zLmRlbGV0ZVZlcnNpb24gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS50YWcpIHtcbiAgICAgICAgICAgIGNvbnRhaW5lclNBU1Blcm1pc3Npb25zLnRhZyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLm1vdmUpIHtcbiAgICAgICAgICAgIGNvbnRhaW5lclNBU1Blcm1pc3Npb25zLm1vdmUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS5leGVjdXRlKSB7XG4gICAgICAgICAgICBjb250YWluZXJTQVNQZXJtaXNzaW9ucy5leGVjdXRlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2Uuc2V0SW1tdXRhYmlsaXR5UG9saWN5KSB7XG4gICAgICAgICAgICBjb250YWluZXJTQVNQZXJtaXNzaW9ucy5zZXRJbW11dGFiaWxpdHlQb2xpY3kgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS5wZXJtYW5lbnREZWxldGUpIHtcbiAgICAgICAgICAgIGNvbnRhaW5lclNBU1Blcm1pc3Npb25zLnBlcm1hbmVudERlbGV0ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLmZpbHRlckJ5VGFncykge1xuICAgICAgICAgICAgY29udGFpbmVyU0FTUGVybWlzc2lvbnMuZmlsdGVyQnlUYWdzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29udGFpbmVyU0FTUGVybWlzc2lvbnM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIHRoZSBnaXZlbiBwZXJtaXNzaW9ucyB0byBhIHN0cmluZy4gVXNpbmcgdGhpcyBtZXRob2Qgd2lsbCBndWFyYW50ZWUgdGhlIHBlcm1pc3Npb25zIGFyZSBpbiBhblxuICAgICAqIG9yZGVyIGFjY2VwdGVkIGJ5IHRoZSBzZXJ2aWNlLlxuICAgICAqXG4gICAgICogVGhlIG9yZGVyIG9mIHRoZSBjaGFyYWN0ZXJzIHNob3VsZCBiZSBhcyBzcGVjaWZpZWQgaGVyZSB0byBlbnN1cmUgY29ycmVjdG5lc3MuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvY29uc3RydWN0aW5nLWEtc2VydmljZS1zYXNcbiAgICAgKlxuICAgICAqL1xuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICBjb25zdCBwZXJtaXNzaW9ucyA9IFtdO1xuICAgICAgICBpZiAodGhpcy5yZWFkKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwiclwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5hZGQpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJhXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNyZWF0ZSkge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcImNcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMud3JpdGUpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJ3XCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmRlbGV0ZSkge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcImRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZGVsZXRlVmVyc2lvbikge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcInhcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubGlzdCkge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcImxcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMudGFnKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwidFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5tb3ZlKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwibVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5leGVjdXRlKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwiZVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zZXRJbW11dGFiaWxpdHlQb2xpY3kpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJpXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnBlcm1hbmVudERlbGV0ZSkge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcInlcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyQnlUYWdzKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwiZlwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGVybWlzc2lvbnMuam9pbihcIlwiKTtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBPTkxZIEFWQUlMQUJMRSBJTiBOT0RFLkpTIFJVTlRJTUUuXG4gKlxuICogVXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsIGlzIG9ubHkgdXNlZCBmb3IgZ2VuZXJhdGlvbiBvZiB1c2VyIGRlbGVnYXRpb24gU0FTLlxuICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvY3JlYXRlLXVzZXItZGVsZWdhdGlvbi1zYXNcbiAqL1xuY2xhc3MgVXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIFVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC5cbiAgICAgKiBAcGFyYW0gYWNjb3VudE5hbWUgLVxuICAgICAqIEBwYXJhbSB1c2VyRGVsZWdhdGlvbktleSAtXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoYWNjb3VudE5hbWUsIHVzZXJEZWxlZ2F0aW9uS2V5KSB7XG4gICAgICAgIHRoaXMuYWNjb3VudE5hbWUgPSBhY2NvdW50TmFtZTtcbiAgICAgICAgdGhpcy51c2VyRGVsZWdhdGlvbktleSA9IHVzZXJEZWxlZ2F0aW9uS2V5O1xuICAgICAgICB0aGlzLmtleSA9IEJ1ZmZlci5mcm9tKHVzZXJEZWxlZ2F0aW9uS2V5LnZhbHVlLCBcImJhc2U2NFwiKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2VuZXJhdGVzIGEgaGFzaCBzaWduYXR1cmUgZm9yIGFuIEhUVFAgcmVxdWVzdCBvciBmb3IgYSBTQVMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc3RyaW5nVG9TaWduIC1cbiAgICAgKi9cbiAgICBjb21wdXRlSE1BQ1NIQTI1NihzdHJpbmdUb1NpZ24pIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYHN0cmluZ1RvU2lnbjogJHtKU09OLnN0cmluZ2lmeShzdHJpbmdUb1NpZ24pfWApO1xuICAgICAgICByZXR1cm4gY3J5cHRvLmNyZWF0ZUhtYWMoXCJzaGEyNTZcIiwgdGhpcy5rZXkpLnVwZGF0ZShzdHJpbmdUb1NpZ24sIFwidXRmOFwiKS5kaWdlc3QoXCJiYXNlNjRcIik7XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogR2VuZXJhdGUgU2FzSVBSYW5nZSBmb3JtYXQgc3RyaW5nLiBGb3IgZXhhbXBsZTpcbiAqXG4gKiBcIjguOC44LjhcIiBvciBcIjEuMS4xLjEtMjU1LjI1NS4yNTUuMjU1XCJcbiAqXG4gKiBAcGFyYW0gaXBSYW5nZSAtXG4gKi9cbmZ1bmN0aW9uIGlwUmFuZ2VUb1N0cmluZyhpcFJhbmdlKSB7XG4gICAgcmV0dXJuIGlwUmFuZ2UuZW5kID8gYCR7aXBSYW5nZS5zdGFydH0tJHtpcFJhbmdlLmVuZH1gIDogaXBSYW5nZS5zdGFydDtcbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIFByb3RvY29scyBmb3IgZ2VuZXJhdGVkIFNBUy5cbiAqL1xuZXhwb3J0cy5TQVNQcm90b2NvbCA9IHZvaWQgMDtcbihmdW5jdGlvbiAoU0FTUHJvdG9jb2wpIHtcbiAgICAvKipcbiAgICAgKiBQcm90b2NvbCB0aGF0IGFsbG93cyBIVFRQUyBvbmx5XG4gICAgICovXG4gICAgU0FTUHJvdG9jb2xbXCJIdHRwc1wiXSA9IFwiaHR0cHNcIjtcbiAgICAvKipcbiAgICAgKiBQcm90b2NvbCB0aGF0IGFsbG93cyBib3RoIEhUVFBTIGFuZCBIVFRQXG4gICAgICovXG4gICAgU0FTUHJvdG9jb2xbXCJIdHRwc0FuZEh0dHBcIl0gPSBcImh0dHBzLGh0dHBcIjtcbn0pKGV4cG9ydHMuU0FTUHJvdG9jb2wgfHwgKGV4cG9ydHMuU0FTUHJvdG9jb2wgPSB7fSkpO1xuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBjb21wb25lbnRzIHRoYXQgbWFrZSB1cCBhbiBBenVyZSBTdG9yYWdlIFNBUycgcXVlcnkgcGFyYW1ldGVycy4gVGhpcyB0eXBlIGlzIG5vdCBjb25zdHJ1Y3RlZCBkaXJlY3RseVxuICogYnkgdGhlIHVzZXI7IGl0IGlzIG9ubHkgZ2VuZXJhdGVkIGJ5IHRoZSB7QGxpbmsgQWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlc30gYW5kIHtAbGluayBCbG9iU0FTU2lnbmF0dXJlVmFsdWVzfVxuICogdHlwZXMuIE9uY2UgZ2VuZXJhdGVkLCBpdCBjYW4gYmUgZW5jb2RlZCBpbnRvIGEge0BsaW5rIFN0cmluZ30gYW5kIGFwcGVuZGVkIHRvIGEgVVJMIGRpcmVjdGx5ICh0aG91Z2ggY2F1dGlvbiBzaG91bGRcbiAqIGJlIHRha2VuIGhlcmUgaW4gY2FzZSB0aGVyZSBhcmUgZXhpc3RpbmcgcXVlcnkgcGFyYW1ldGVycywgd2hpY2ggbWlnaHQgYWZmZWN0IHRoZSBhcHByb3ByaWF0ZSBtZWFucyBvZiBhcHBlbmRpbmdcbiAqIHRoZXNlIHF1ZXJ5IHBhcmFtZXRlcnMpLlxuICpcbiAqIE5PVEU6IEluc3RhbmNlcyBvZiB0aGlzIGNsYXNzIGFyZSBpbW11dGFibGUuXG4gKi9cbmNsYXNzIFNBU1F1ZXJ5UGFyYW1ldGVycyB7XG4gICAgLyoqXG4gICAgICogT3B0aW9uYWwuIElQIHJhbmdlIGFsbG93ZWQgZm9yIHRoaXMgU0FTLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGlwUmFuZ2UoKSB7XG4gICAgICAgIGlmICh0aGlzLmlwUmFuZ2VJbm5lcikge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBlbmQ6IHRoaXMuaXBSYW5nZUlubmVyLmVuZCxcbiAgICAgICAgICAgICAgICBzdGFydDogdGhpcy5pcFJhbmdlSW5uZXIuc3RhcnQsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKHZlcnNpb24sIHNpZ25hdHVyZSwgcGVybWlzc2lvbnNPck9wdGlvbnMsIHNlcnZpY2VzLCByZXNvdXJjZVR5cGVzLCBwcm90b2NvbCwgc3RhcnRzT24sIGV4cGlyZXNPbiwgaXBSYW5nZSwgaWRlbnRpZmllciwgcmVzb3VyY2UsIGNhY2hlQ29udHJvbCwgY29udGVudERpc3Bvc2l0aW9uLCBjb250ZW50RW5jb2RpbmcsIGNvbnRlbnRMYW5ndWFnZSwgY29udGVudFR5cGUsIHVzZXJEZWxlZ2F0aW9uS2V5LCBwcmVhdXRob3JpemVkQWdlbnRPYmplY3RJZCwgY29ycmVsYXRpb25JZCwgZW5jcnlwdGlvblNjb3BlKSB7XG4gICAgICAgIHRoaXMudmVyc2lvbiA9IHZlcnNpb247XG4gICAgICAgIHRoaXMuc2lnbmF0dXJlID0gc2lnbmF0dXJlO1xuICAgICAgICBpZiAocGVybWlzc2lvbnNPck9wdGlvbnMgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgcGVybWlzc2lvbnNPck9wdGlvbnMgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIC8vIFNBU1F1ZXJ5UGFyYW1ldGVyc09wdGlvbnNcbiAgICAgICAgICAgIHRoaXMucGVybWlzc2lvbnMgPSBwZXJtaXNzaW9uc09yT3B0aW9ucy5wZXJtaXNzaW9ucztcbiAgICAgICAgICAgIHRoaXMuc2VydmljZXMgPSBwZXJtaXNzaW9uc09yT3B0aW9ucy5zZXJ2aWNlcztcbiAgICAgICAgICAgIHRoaXMucmVzb3VyY2VUeXBlcyA9IHBlcm1pc3Npb25zT3JPcHRpb25zLnJlc291cmNlVHlwZXM7XG4gICAgICAgICAgICB0aGlzLnByb3RvY29sID0gcGVybWlzc2lvbnNPck9wdGlvbnMucHJvdG9jb2w7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0c09uID0gcGVybWlzc2lvbnNPck9wdGlvbnMuc3RhcnRzT247XG4gICAgICAgICAgICB0aGlzLmV4cGlyZXNPbiA9IHBlcm1pc3Npb25zT3JPcHRpb25zLmV4cGlyZXNPbjtcbiAgICAgICAgICAgIHRoaXMuaXBSYW5nZUlubmVyID0gcGVybWlzc2lvbnNPck9wdGlvbnMuaXBSYW5nZTtcbiAgICAgICAgICAgIHRoaXMuaWRlbnRpZmllciA9IHBlcm1pc3Npb25zT3JPcHRpb25zLmlkZW50aWZpZXI7XG4gICAgICAgICAgICB0aGlzLmVuY3J5cHRpb25TY29wZSA9IHBlcm1pc3Npb25zT3JPcHRpb25zLmVuY3J5cHRpb25TY29wZTtcbiAgICAgICAgICAgIHRoaXMucmVzb3VyY2UgPSBwZXJtaXNzaW9uc09yT3B0aW9ucy5yZXNvdXJjZTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVDb250cm9sID0gcGVybWlzc2lvbnNPck9wdGlvbnMuY2FjaGVDb250cm9sO1xuICAgICAgICAgICAgdGhpcy5jb250ZW50RGlzcG9zaXRpb24gPSBwZXJtaXNzaW9uc09yT3B0aW9ucy5jb250ZW50RGlzcG9zaXRpb247XG4gICAgICAgICAgICB0aGlzLmNvbnRlbnRFbmNvZGluZyA9IHBlcm1pc3Npb25zT3JPcHRpb25zLmNvbnRlbnRFbmNvZGluZztcbiAgICAgICAgICAgIHRoaXMuY29udGVudExhbmd1YWdlID0gcGVybWlzc2lvbnNPck9wdGlvbnMuY29udGVudExhbmd1YWdlO1xuICAgICAgICAgICAgdGhpcy5jb250ZW50VHlwZSA9IHBlcm1pc3Npb25zT3JPcHRpb25zLmNvbnRlbnRUeXBlO1xuICAgICAgICAgICAgaWYgKHBlcm1pc3Npb25zT3JPcHRpb25zLnVzZXJEZWxlZ2F0aW9uS2V5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaWduZWRPaWQgPSBwZXJtaXNzaW9uc09yT3B0aW9ucy51c2VyRGVsZWdhdGlvbktleS5zaWduZWRPYmplY3RJZDtcbiAgICAgICAgICAgICAgICB0aGlzLnNpZ25lZFRlbmFudElkID0gcGVybWlzc2lvbnNPck9wdGlvbnMudXNlckRlbGVnYXRpb25LZXkuc2lnbmVkVGVuYW50SWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5zaWduZWRTdGFydHNPbiA9IHBlcm1pc3Npb25zT3JPcHRpb25zLnVzZXJEZWxlZ2F0aW9uS2V5LnNpZ25lZFN0YXJ0c09uO1xuICAgICAgICAgICAgICAgIHRoaXMuc2lnbmVkRXhwaXJlc09uID0gcGVybWlzc2lvbnNPck9wdGlvbnMudXNlckRlbGVnYXRpb25LZXkuc2lnbmVkRXhwaXJlc09uO1xuICAgICAgICAgICAgICAgIHRoaXMuc2lnbmVkU2VydmljZSA9IHBlcm1pc3Npb25zT3JPcHRpb25zLnVzZXJEZWxlZ2F0aW9uS2V5LnNpZ25lZFNlcnZpY2U7XG4gICAgICAgICAgICAgICAgdGhpcy5zaWduZWRWZXJzaW9uID0gcGVybWlzc2lvbnNPck9wdGlvbnMudXNlckRlbGVnYXRpb25LZXkuc2lnbmVkVmVyc2lvbjtcbiAgICAgICAgICAgICAgICB0aGlzLnByZWF1dGhvcml6ZWRBZ2VudE9iamVjdElkID0gcGVybWlzc2lvbnNPck9wdGlvbnMucHJlYXV0aG9yaXplZEFnZW50T2JqZWN0SWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5jb3JyZWxhdGlvbklkID0gcGVybWlzc2lvbnNPck9wdGlvbnMuY29ycmVsYXRpb25JZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VydmljZXMgPSBzZXJ2aWNlcztcbiAgICAgICAgICAgIHRoaXMucmVzb3VyY2VUeXBlcyA9IHJlc291cmNlVHlwZXM7XG4gICAgICAgICAgICB0aGlzLmV4cGlyZXNPbiA9IGV4cGlyZXNPbjtcbiAgICAgICAgICAgIHRoaXMucGVybWlzc2lvbnMgPSBwZXJtaXNzaW9uc09yT3B0aW9ucztcbiAgICAgICAgICAgIHRoaXMucHJvdG9jb2wgPSBwcm90b2NvbDtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRzT24gPSBzdGFydHNPbjtcbiAgICAgICAgICAgIHRoaXMuaXBSYW5nZUlubmVyID0gaXBSYW5nZTtcbiAgICAgICAgICAgIHRoaXMuZW5jcnlwdGlvblNjb3BlID0gZW5jcnlwdGlvblNjb3BlO1xuICAgICAgICAgICAgdGhpcy5pZGVudGlmaWVyID0gaWRlbnRpZmllcjtcbiAgICAgICAgICAgIHRoaXMucmVzb3VyY2UgPSByZXNvdXJjZTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVDb250cm9sID0gY2FjaGVDb250cm9sO1xuICAgICAgICAgICAgdGhpcy5jb250ZW50RGlzcG9zaXRpb24gPSBjb250ZW50RGlzcG9zaXRpb247XG4gICAgICAgICAgICB0aGlzLmNvbnRlbnRFbmNvZGluZyA9IGNvbnRlbnRFbmNvZGluZztcbiAgICAgICAgICAgIHRoaXMuY29udGVudExhbmd1YWdlID0gY29udGVudExhbmd1YWdlO1xuICAgICAgICAgICAgdGhpcy5jb250ZW50VHlwZSA9IGNvbnRlbnRUeXBlO1xuICAgICAgICAgICAgaWYgKHVzZXJEZWxlZ2F0aW9uS2V5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaWduZWRPaWQgPSB1c2VyRGVsZWdhdGlvbktleS5zaWduZWRPYmplY3RJZDtcbiAgICAgICAgICAgICAgICB0aGlzLnNpZ25lZFRlbmFudElkID0gdXNlckRlbGVnYXRpb25LZXkuc2lnbmVkVGVuYW50SWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5zaWduZWRTdGFydHNPbiA9IHVzZXJEZWxlZ2F0aW9uS2V5LnNpZ25lZFN0YXJ0c09uO1xuICAgICAgICAgICAgICAgIHRoaXMuc2lnbmVkRXhwaXJlc09uID0gdXNlckRlbGVnYXRpb25LZXkuc2lnbmVkRXhwaXJlc09uO1xuICAgICAgICAgICAgICAgIHRoaXMuc2lnbmVkU2VydmljZSA9IHVzZXJEZWxlZ2F0aW9uS2V5LnNpZ25lZFNlcnZpY2U7XG4gICAgICAgICAgICAgICAgdGhpcy5zaWduZWRWZXJzaW9uID0gdXNlckRlbGVnYXRpb25LZXkuc2lnbmVkVmVyc2lvbjtcbiAgICAgICAgICAgICAgICB0aGlzLnByZWF1dGhvcml6ZWRBZ2VudE9iamVjdElkID0gcHJlYXV0aG9yaXplZEFnZW50T2JqZWN0SWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5jb3JyZWxhdGlvbklkID0gY29ycmVsYXRpb25JZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBFbmNvZGVzIGFsbCBTQVMgcXVlcnkgcGFyYW1ldGVycyBpbnRvIGEgc3RyaW5nIHRoYXQgY2FuIGJlIGFwcGVuZGVkIHRvIGEgVVJMLlxuICAgICAqXG4gICAgICovXG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IFtcbiAgICAgICAgICAgIFwic3ZcIixcbiAgICAgICAgICAgIFwic3NcIixcbiAgICAgICAgICAgIFwic3J0XCIsXG4gICAgICAgICAgICBcInNwclwiLFxuICAgICAgICAgICAgXCJzdFwiLFxuICAgICAgICAgICAgXCJzZVwiLFxuICAgICAgICAgICAgXCJzaXBcIixcbiAgICAgICAgICAgIFwic2lcIixcbiAgICAgICAgICAgIFwic2VzXCIsXG4gICAgICAgICAgICBcInNrb2lkXCIsIC8vIFNpZ25lZCBvYmplY3QgSURcbiAgICAgICAgICAgIFwic2t0aWRcIiwgLy8gU2lnbmVkIHRlbmFudCBJRFxuICAgICAgICAgICAgXCJza3RcIiwgLy8gU2lnbmVkIGtleSBzdGFydCB0aW1lXG4gICAgICAgICAgICBcInNrZVwiLCAvLyBTaWduZWQga2V5IGV4cGlyeSB0aW1lXG4gICAgICAgICAgICBcInNrc1wiLCAvLyBTaWduZWQga2V5IHNlcnZpY2VcbiAgICAgICAgICAgIFwic2t2XCIsIC8vIFNpZ25lZCBrZXkgdmVyc2lvblxuICAgICAgICAgICAgXCJzclwiLFxuICAgICAgICAgICAgXCJzcFwiLFxuICAgICAgICAgICAgXCJzaWdcIixcbiAgICAgICAgICAgIFwicnNjY1wiLFxuICAgICAgICAgICAgXCJyc2NkXCIsXG4gICAgICAgICAgICBcInJzY2VcIixcbiAgICAgICAgICAgIFwicnNjbFwiLFxuICAgICAgICAgICAgXCJyc2N0XCIsXG4gICAgICAgICAgICBcInNhb2lkXCIsXG4gICAgICAgICAgICBcInNjaWRcIixcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgcXVlcmllcyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHBhcmFtIG9mIHBhcmFtcykge1xuICAgICAgICAgICAgc3dpdGNoIChwYXJhbSkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzdlwiOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIHBhcmFtLCB0aGlzLnZlcnNpb24pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwic3NcIjpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cnlBcHBlbmRRdWVyeVBhcmFtZXRlcihxdWVyaWVzLCBwYXJhbSwgdGhpcy5zZXJ2aWNlcyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzcnRcIjpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cnlBcHBlbmRRdWVyeVBhcmFtZXRlcihxdWVyaWVzLCBwYXJhbSwgdGhpcy5yZXNvdXJjZVR5cGVzKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNwclwiOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIHBhcmFtLCB0aGlzLnByb3RvY29sKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInN0XCI6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJ5QXBwZW5kUXVlcnlQYXJhbWV0ZXIocXVlcmllcywgcGFyYW0sIHRoaXMuc3RhcnRzT24gPyB0cnVuY2F0ZWRJU084MDYxRGF0ZSh0aGlzLnN0YXJ0c09uLCBmYWxzZSkgOiB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwic2VcIjpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cnlBcHBlbmRRdWVyeVBhcmFtZXRlcihxdWVyaWVzLCBwYXJhbSwgdGhpcy5leHBpcmVzT24gPyB0cnVuY2F0ZWRJU084MDYxRGF0ZSh0aGlzLmV4cGlyZXNPbiwgZmFsc2UpIDogdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNpcFwiOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIHBhcmFtLCB0aGlzLmlwUmFuZ2UgPyBpcFJhbmdlVG9TdHJpbmcodGhpcy5pcFJhbmdlKSA6IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzaVwiOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIHBhcmFtLCB0aGlzLmlkZW50aWZpZXIpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwic2VzXCI6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJ5QXBwZW5kUXVlcnlQYXJhbWV0ZXIocXVlcmllcywgcGFyYW0sIHRoaXMuZW5jcnlwdGlvblNjb3BlKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNrb2lkXCI6IC8vIFNpZ25lZCBvYmplY3QgSURcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cnlBcHBlbmRRdWVyeVBhcmFtZXRlcihxdWVyaWVzLCBwYXJhbSwgdGhpcy5zaWduZWRPaWQpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwic2t0aWRcIjogLy8gU2lnbmVkIHRlbmFudCBJRFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIHBhcmFtLCB0aGlzLnNpZ25lZFRlbmFudElkKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNrdFwiOiAvLyBTaWduZWQga2V5IHN0YXJ0IHRpbWVcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cnlBcHBlbmRRdWVyeVBhcmFtZXRlcihxdWVyaWVzLCBwYXJhbSwgdGhpcy5zaWduZWRTdGFydHNPbiA/IHRydW5jYXRlZElTTzgwNjFEYXRlKHRoaXMuc2lnbmVkU3RhcnRzT24sIGZhbHNlKSA6IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJza2VcIjogLy8gU2lnbmVkIGtleSBleHBpcnkgdGltZVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIHBhcmFtLCB0aGlzLnNpZ25lZEV4cGlyZXNPbiA/IHRydW5jYXRlZElTTzgwNjFEYXRlKHRoaXMuc2lnbmVkRXhwaXJlc09uLCBmYWxzZSkgOiB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwic2tzXCI6IC8vIFNpZ25lZCBrZXkgc2VydmljZVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIHBhcmFtLCB0aGlzLnNpZ25lZFNlcnZpY2UpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwic2t2XCI6IC8vIFNpZ25lZCBrZXkgdmVyc2lvblxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIHBhcmFtLCB0aGlzLnNpZ25lZFZlcnNpb24pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwic3JcIjpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cnlBcHBlbmRRdWVyeVBhcmFtZXRlcihxdWVyaWVzLCBwYXJhbSwgdGhpcy5yZXNvdXJjZSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzcFwiOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIHBhcmFtLCB0aGlzLnBlcm1pc3Npb25zKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNpZ1wiOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIHBhcmFtLCB0aGlzLnNpZ25hdHVyZSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJyc2NjXCI6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJ5QXBwZW5kUXVlcnlQYXJhbWV0ZXIocXVlcmllcywgcGFyYW0sIHRoaXMuY2FjaGVDb250cm9sKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInJzY2RcIjpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cnlBcHBlbmRRdWVyeVBhcmFtZXRlcihxdWVyaWVzLCBwYXJhbSwgdGhpcy5jb250ZW50RGlzcG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwicnNjZVwiOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIHBhcmFtLCB0aGlzLmNvbnRlbnRFbmNvZGluZyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJyc2NsXCI6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJ5QXBwZW5kUXVlcnlQYXJhbWV0ZXIocXVlcmllcywgcGFyYW0sIHRoaXMuY29udGVudExhbmd1YWdlKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInJzY3RcIjpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cnlBcHBlbmRRdWVyeVBhcmFtZXRlcihxdWVyaWVzLCBwYXJhbSwgdGhpcy5jb250ZW50VHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzYW9pZFwiOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIHBhcmFtLCB0aGlzLnByZWF1dGhvcml6ZWRBZ2VudE9iamVjdElkKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNjaWRcIjpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cnlBcHBlbmRRdWVyeVBhcmFtZXRlcihxdWVyaWVzLCBwYXJhbSwgdGhpcy5jb3JyZWxhdGlvbklkKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHF1ZXJpZXMuam9pbihcIiZcIik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEEgcHJpdmF0ZSBoZWxwZXIgbWV0aG9kIHVzZWQgdG8gZmlsdGVyIGFuZCBhcHBlbmQgcXVlcnkga2V5L3ZhbHVlIHBhaXJzIGludG8gYW4gYXJyYXkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcXVlcmllcyAtXG4gICAgICogQHBhcmFtIGtleSAtXG4gICAgICogQHBhcmFtIHZhbHVlIC1cbiAgICAgKi9cbiAgICB0cnlBcHBlbmRRdWVyeVBhcmFtZXRlcihxdWVyaWVzLCBrZXksIHZhbHVlKSB7XG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBrZXkgPSBlbmNvZGVVUklDb21wb25lbnQoa2V5KTtcbiAgICAgICAgdmFsdWUgPSBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpO1xuICAgICAgICBpZiAoa2V5Lmxlbmd0aCA+IDAgJiYgdmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcXVlcmllcy5wdXNoKGAke2tleX09JHt2YWx1ZX1gKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5mdW5jdGlvbiBnZW5lcmF0ZUJsb2JTQVNRdWVyeVBhcmFtZXRlcnMoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcywgc2hhcmVkS2V5Q3JlZGVudGlhbE9yVXNlckRlbGVnYXRpb25LZXksIGFjY291bnROYW1lKSB7XG4gICAgcmV0dXJuIGdlbmVyYXRlQmxvYlNBU1F1ZXJ5UGFyYW1ldGVyc0ludGVybmFsKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMsIHNoYXJlZEtleUNyZWRlbnRpYWxPclVzZXJEZWxlZ2F0aW9uS2V5LCBhY2NvdW50TmFtZSkuc2FzUXVlcnlQYXJhbWV0ZXJzO1xufVxuZnVuY3Rpb24gZ2VuZXJhdGVCbG9iU0FTUXVlcnlQYXJhbWV0ZXJzSW50ZXJuYWwoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcywgc2hhcmVkS2V5Q3JlZGVudGlhbE9yVXNlckRlbGVnYXRpb25LZXksIGFjY291bnROYW1lKSB7XG4gICAgY29uc3QgdmVyc2lvbiA9IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMudmVyc2lvbiA/IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMudmVyc2lvbiA6IFNFUlZJQ0VfVkVSU0lPTjtcbiAgICBjb25zdCBzaGFyZWRLZXlDcmVkZW50aWFsID0gc2hhcmVkS2V5Q3JlZGVudGlhbE9yVXNlckRlbGVnYXRpb25LZXkgaW5zdGFuY2VvZiBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbFxuICAgICAgICA/IHNoYXJlZEtleUNyZWRlbnRpYWxPclVzZXJEZWxlZ2F0aW9uS2V5XG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgIGxldCB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWw7XG4gICAgaWYgKHNoYXJlZEtleUNyZWRlbnRpYWwgPT09IHVuZGVmaW5lZCAmJiBhY2NvdW50TmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbCA9IG5ldyBVc2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwoYWNjb3VudE5hbWUsIHNoYXJlZEtleUNyZWRlbnRpYWxPclVzZXJEZWxlZ2F0aW9uS2V5KTtcbiAgICB9XG4gICAgaWYgKHNoYXJlZEtleUNyZWRlbnRpYWwgPT09IHVuZGVmaW5lZCAmJiB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCJJbnZhbGlkIHNoYXJlZEtleUNyZWRlbnRpYWwsIHVzZXJEZWxlZ2F0aW9uS2V5IG9yIGFjY291bnROYW1lLlwiKTtcbiAgICB9XG4gICAgLy8gVmVyc2lvbiAyMDIwLTEyLTA2IGFkZHMgc3VwcG9ydCBmb3IgZW5jcnlwdGlvbnNjb3BlIGluIFNBUy5cbiAgICBpZiAodmVyc2lvbiA+PSBcIjIwMjAtMTItMDZcIikge1xuICAgICAgICBpZiAoc2hhcmVkS2V5Q3JlZGVudGlhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2VuZXJhdGVCbG9iU0FTUXVlcnlQYXJhbWV0ZXJzMjAyMDEyMDYoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcywgc2hhcmVkS2V5Q3JlZGVudGlhbCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZ2VuZXJhdGVCbG9iU0FTUXVlcnlQYXJhbWV0ZXJzVURLMjAyMDEyMDYoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcywgdXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBWZXJzaW9uIDIwMTktMTItMTIgYWRkcyBzdXBwb3J0IGZvciB0aGUgYmxvYiB0YWdzIHBlcm1pc3Npb24uXG4gICAgLy8gVmVyc2lvbiAyMDE4LTExLTA5IGFkZHMgc3VwcG9ydCBmb3IgdGhlIHNpZ25lZCByZXNvdXJjZSBhbmQgc2lnbmVkIGJsb2Igc25hcHNob3QgdGltZSBmaWVsZHMuXG4gICAgLy8gaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2NvbnN0cnVjdGluZy1hLXNlcnZpY2Utc2FzI2NvbnN0cnVjdGluZy10aGUtc2lnbmF0dXJlLXN0cmluZ1xuICAgIGlmICh2ZXJzaW9uID49IFwiMjAxOC0xMS0wOVwiKSB7XG4gICAgICAgIGlmIChzaGFyZWRLZXlDcmVkZW50aWFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBnZW5lcmF0ZUJsb2JTQVNRdWVyeVBhcmFtZXRlcnMyMDE4MTEwOShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLCBzaGFyZWRLZXlDcmVkZW50aWFsKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIFZlcnNpb24gMjAyMC0wMi0xMCBkZWxlZ2F0aW9uIFNBUyBzaWduYXR1cmUgY29uc3RydWN0aW9uIGluY2x1ZGVzIHByZWF1dGhvcml6ZWRBZ2VudE9iamVjdElkLCBhZ2VudE9iamVjdElkLCBjb3JyZWxhdGlvbklkLlxuICAgICAgICAgICAgaWYgKHZlcnNpb24gPj0gXCIyMDIwLTAyLTEwXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2VuZXJhdGVCbG9iU0FTUXVlcnlQYXJhbWV0ZXJzVURLMjAyMDAyMTAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcywgdXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBnZW5lcmF0ZUJsb2JTQVNRdWVyeVBhcmFtZXRlcnNVREsyMDE4MTEwOShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLCB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh2ZXJzaW9uID49IFwiMjAxNS0wNC0wNVwiKSB7XG4gICAgICAgIGlmIChzaGFyZWRLZXlDcmVkZW50aWFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBnZW5lcmF0ZUJsb2JTQVNRdWVyeVBhcmFtZXRlcnMyMDE1MDQwNShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLCBzaGFyZWRLZXlDcmVkZW50aWFsKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiJ3ZlcnNpb24nIG11c3QgYmUgPj0gJzIwMTgtMTEtMDknIHdoZW4gZ2VuZXJhdGluZyB1c2VyIGRlbGVnYXRpb24gU0FTIHVzaW5nIHVzZXIgZGVsZWdhdGlvbiBrZXkuXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiJ3ZlcnNpb24nIG11c3QgYmUgPj0gJzIwMTUtMDQtMDUnLlwiKTtcbn1cbi8qKlxuICogT05MWSBBVkFJTEFCTEUgSU4gTk9ERS5KUyBSVU5USU1FLlxuICogSU1QTEVNRU5UQVRJT04gRk9SIEFQSSBWRVJTSU9OIEZST00gMjAxNS0wNC0wNSBBTkQgQkVGT1JFIDIwMTgtMTEtMDkuXG4gKlxuICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBTQVNRdWVyeVBhcmFtZXRlcnMuXG4gKlxuICogT25seSBhY2NlcHRzIHJlcXVpcmVkIHNldHRpbmdzIG5lZWRlZCB0byBjcmVhdGUgYSBTQVMuIEZvciBvcHRpb25hbCBzZXR0aW5ncyBwbGVhc2VcbiAqIHNldCBjb3JyZXNwb25kaW5nIHByb3BlcnRpZXMgZGlyZWN0bHksIHN1Y2ggYXMgcGVybWlzc2lvbnMsIHN0YXJ0c09uIGFuZCBpZGVudGlmaWVyLlxuICpcbiAqIFdBUk5JTkc6IFdoZW4gaWRlbnRpZmllciBpcyBub3QgcHJvdmlkZWQsIHBlcm1pc3Npb25zIGFuZCBleHBpcmVzT24gYXJlIHJlcXVpcmVkLlxuICogWW91IE1VU1QgYXNzaWduIHZhbHVlIHRvIGlkZW50aWZpZXIgb3IgZXhwaXJlc09uICYgcGVybWlzc2lvbnMgbWFudWFsbHkgaWYgeW91IGluaXRpYWwgd2l0aFxuICogdGhpcyBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcyAtXG4gKiBAcGFyYW0gc2hhcmVkS2V5Q3JlZGVudGlhbCAtXG4gKi9cbmZ1bmN0aW9uIGdlbmVyYXRlQmxvYlNBU1F1ZXJ5UGFyYW1ldGVyczIwMTUwNDA1KGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMsIHNoYXJlZEtleUNyZWRlbnRpYWwpIHtcbiAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzID0gU0FTU2lnbmF0dXJlVmFsdWVzU2FuaXR5Q2hlY2tBbmRBdXRvZmlsbChibG9iU0FTU2lnbmF0dXJlVmFsdWVzKTtcbiAgICBpZiAoIWJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuaWRlbnRpZmllciAmJlxuICAgICAgICAhKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMgJiYgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5leHBpcmVzT24pKSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiTXVzdCBwcm92aWRlICdwZXJtaXNzaW9ucycgYW5kICdleHBpcmVzT24nIGZvciBCbG9iIFNBUyBnZW5lcmF0aW9uIHdoZW4gJ2lkZW50aWZpZXInIGlzIG5vdCBwcm92aWRlZC5cIik7XG4gICAgfVxuICAgIGxldCByZXNvdXJjZSA9IFwiY1wiO1xuICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmJsb2JOYW1lKSB7XG4gICAgICAgIHJlc291cmNlID0gXCJiXCI7XG4gICAgfVxuICAgIC8vIENhbGxpbmcgcGFyc2UgYW5kIHRvU3RyaW5nIGd1YXJhbnRlZXMgdGhlIHByb3BlciBvcmRlcmluZyBhbmQgdGhyb3dzIG9uIGludmFsaWQgY2hhcmFjdGVycy5cbiAgICBsZXQgdmVyaWZpZWRQZXJtaXNzaW9ucztcbiAgICBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucykge1xuICAgICAgICBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5ibG9iTmFtZSkge1xuICAgICAgICAgICAgdmVyaWZpZWRQZXJtaXNzaW9ucyA9IEJsb2JTQVNQZXJtaXNzaW9ucy5wYXJzZShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zLnRvU3RyaW5nKCkpLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2ZXJpZmllZFBlcm1pc3Npb25zID0gQ29udGFpbmVyU0FTUGVybWlzc2lvbnMucGFyc2UoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucy50b1N0cmluZygpKS50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFNpZ25hdHVyZSBpcyBnZW5lcmF0ZWQgb24gdGhlIHVuLXVybC1lbmNvZGVkIHZhbHVlcy5cbiAgICBjb25zdCBzdHJpbmdUb1NpZ24gPSBbXG4gICAgICAgIHZlcmlmaWVkUGVybWlzc2lvbnMgPyB2ZXJpZmllZFBlcm1pc3Npb25zIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5zdGFydHNPblxuICAgICAgICAgICAgPyB0cnVuY2F0ZWRJU084MDYxRGF0ZShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnN0YXJ0c09uLCBmYWxzZSlcbiAgICAgICAgICAgIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5leHBpcmVzT25cbiAgICAgICAgICAgID8gdHJ1bmNhdGVkSVNPODA2MURhdGUoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5leHBpcmVzT24sIGZhbHNlKVxuICAgICAgICAgICAgOiBcIlwiLFxuICAgICAgICBnZXRDYW5vbmljYWxOYW1lKHNoYXJlZEtleUNyZWRlbnRpYWwuYWNjb3VudE5hbWUsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGFpbmVyTmFtZSwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5ibG9iTmFtZSksXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuaWRlbnRpZmllcixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5pcFJhbmdlID8gaXBSYW5nZVRvU3RyaW5nKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuaXBSYW5nZSkgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnByb3RvY29sID8gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wcm90b2NvbCA6IFwiXCIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMudmVyc2lvbixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jYWNoZUNvbnRyb2wgPyBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNhY2hlQ29udHJvbCA6IFwiXCIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudERpc3Bvc2l0aW9uID8gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50RGlzcG9zaXRpb24gOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRFbmNvZGluZyA/IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudEVuY29kaW5nIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50TGFuZ3VhZ2UgPyBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRMYW5ndWFnZSA6IFwiXCIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudFR5cGUgPyBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRUeXBlIDogXCJcIixcbiAgICBdLmpvaW4oXCJcXG5cIik7XG4gICAgY29uc3Qgc2lnbmF0dXJlID0gc2hhcmVkS2V5Q3JlZGVudGlhbC5jb21wdXRlSE1BQ1NIQTI1NihzdHJpbmdUb1NpZ24pO1xuICAgIHJldHVybiB7XG4gICAgICAgIHNhc1F1ZXJ5UGFyYW1ldGVyczogbmV3IFNBU1F1ZXJ5UGFyYW1ldGVycyhibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnZlcnNpb24sIHNpZ25hdHVyZSwgdmVyaWZpZWRQZXJtaXNzaW9ucywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucHJvdG9jb2wsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuc3RhcnRzT24sIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuZXhwaXJlc09uLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmlwUmFuZ2UsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuaWRlbnRpZmllciwgcmVzb3VyY2UsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY2FjaGVDb250cm9sLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnREaXNwb3NpdGlvbiwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50RW5jb2RpbmcsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudExhbmd1YWdlLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRUeXBlKSxcbiAgICAgICAgc3RyaW5nVG9TaWduOiBzdHJpbmdUb1NpZ24sXG4gICAgfTtcbn1cbi8qKlxuICogT05MWSBBVkFJTEFCTEUgSU4gTk9ERS5KUyBSVU5USU1FLlxuICogSU1QTEVNRU5UQVRJT04gRk9SIEFQSSBWRVJTSU9OIEZST00gMjAxOC0xMS0wOS5cbiAqXG4gKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIFNBU1F1ZXJ5UGFyYW1ldGVycy5cbiAqXG4gKiBPbmx5IGFjY2VwdHMgcmVxdWlyZWQgc2V0dGluZ3MgbmVlZGVkIHRvIGNyZWF0ZSBhIFNBUy4gRm9yIG9wdGlvbmFsIHNldHRpbmdzIHBsZWFzZVxuICogc2V0IGNvcnJlc3BvbmRpbmcgcHJvcGVydGllcyBkaXJlY3RseSwgc3VjaCBhcyBwZXJtaXNzaW9ucywgc3RhcnRzT24gYW5kIGlkZW50aWZpZXIuXG4gKlxuICogV0FSTklORzogV2hlbiBpZGVudGlmaWVyIGlzIG5vdCBwcm92aWRlZCwgcGVybWlzc2lvbnMgYW5kIGV4cGlyZXNPbiBhcmUgcmVxdWlyZWQuXG4gKiBZb3UgTVVTVCBhc3NpZ24gdmFsdWUgdG8gaWRlbnRpZmllciBvciBleHBpcmVzT24gJiBwZXJtaXNzaW9ucyBtYW51YWxseSBpZiB5b3UgaW5pdGlhbCB3aXRoXG4gKiB0aGlzIGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBibG9iU0FTU2lnbmF0dXJlVmFsdWVzIC1cbiAqIEBwYXJhbSBzaGFyZWRLZXlDcmVkZW50aWFsIC1cbiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGVCbG9iU0FTUXVlcnlQYXJhbWV0ZXJzMjAxODExMDkoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcywgc2hhcmVkS2V5Q3JlZGVudGlhbCkge1xuICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMgPSBTQVNTaWduYXR1cmVWYWx1ZXNTYW5pdHlDaGVja0FuZEF1dG9maWxsKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMpO1xuICAgIGlmICghYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5pZGVudGlmaWVyICYmXG4gICAgICAgICEoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucyAmJiBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmV4cGlyZXNPbikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJNdXN0IHByb3ZpZGUgJ3Blcm1pc3Npb25zJyBhbmQgJ2V4cGlyZXNPbicgZm9yIEJsb2IgU0FTIGdlbmVyYXRpb24gd2hlbiAnaWRlbnRpZmllcicgaXMgbm90IHByb3ZpZGVkLlwiKTtcbiAgICB9XG4gICAgbGV0IHJlc291cmNlID0gXCJjXCI7XG4gICAgbGV0IHRpbWVzdGFtcCA9IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuc25hcHNob3RUaW1lO1xuICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmJsb2JOYW1lKSB7XG4gICAgICAgIHJlc291cmNlID0gXCJiXCI7XG4gICAgICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnNuYXBzaG90VGltZSkge1xuICAgICAgICAgICAgcmVzb3VyY2UgPSBcImJzXCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uSWQpIHtcbiAgICAgICAgICAgIHJlc291cmNlID0gXCJidlwiO1xuICAgICAgICAgICAgdGltZXN0YW1wID0gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uSWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gQ2FsbGluZyBwYXJzZSBhbmQgdG9TdHJpbmcgZ3VhcmFudGVlcyB0aGUgcHJvcGVyIG9yZGVyaW5nIGFuZCB0aHJvd3Mgb24gaW52YWxpZCBjaGFyYWN0ZXJzLlxuICAgIGxldCB2ZXJpZmllZFBlcm1pc3Npb25zO1xuICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zKSB7XG4gICAgICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmJsb2JOYW1lKSB7XG4gICAgICAgICAgICB2ZXJpZmllZFBlcm1pc3Npb25zID0gQmxvYlNBU1Blcm1pc3Npb25zLnBhcnNlKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMudG9TdHJpbmcoKSkudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZlcmlmaWVkUGVybWlzc2lvbnMgPSBDb250YWluZXJTQVNQZXJtaXNzaW9ucy5wYXJzZShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zLnRvU3RyaW5nKCkpLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gU2lnbmF0dXJlIGlzIGdlbmVyYXRlZCBvbiB0aGUgdW4tdXJsLWVuY29kZWQgdmFsdWVzLlxuICAgIGNvbnN0IHN0cmluZ1RvU2lnbiA9IFtcbiAgICAgICAgdmVyaWZpZWRQZXJtaXNzaW9ucyA/IHZlcmlmaWVkUGVybWlzc2lvbnMgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnN0YXJ0c09uXG4gICAgICAgICAgICA/IHRydW5jYXRlZElTTzgwNjFEYXRlKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuc3RhcnRzT24sIGZhbHNlKVxuICAgICAgICAgICAgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmV4cGlyZXNPblxuICAgICAgICAgICAgPyB0cnVuY2F0ZWRJU084MDYxRGF0ZShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmV4cGlyZXNPbiwgZmFsc2UpXG4gICAgICAgICAgICA6IFwiXCIsXG4gICAgICAgIGdldENhbm9uaWNhbE5hbWUoc2hhcmVkS2V5Q3JlZGVudGlhbC5hY2NvdW50TmFtZSwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250YWluZXJOYW1lLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmJsb2JOYW1lKSxcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5pZGVudGlmaWVyLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmlwUmFuZ2UgPyBpcFJhbmdlVG9TdHJpbmcoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5pcFJhbmdlKSA6IFwiXCIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucHJvdG9jb2wgPyBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnByb3RvY29sIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uLFxuICAgICAgICByZXNvdXJjZSxcbiAgICAgICAgdGltZXN0YW1wLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNhY2hlQ29udHJvbCA/IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY2FjaGVDb250cm9sIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50RGlzcG9zaXRpb24gPyBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnREaXNwb3NpdGlvbiA6IFwiXCIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudEVuY29kaW5nID8gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50RW5jb2RpbmcgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRMYW5ndWFnZSA/IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudExhbmd1YWdlIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50VHlwZSA/IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudFR5cGUgOiBcIlwiLFxuICAgIF0uam9pbihcIlxcblwiKTtcbiAgICBjb25zdCBzaWduYXR1cmUgPSBzaGFyZWRLZXlDcmVkZW50aWFsLmNvbXB1dGVITUFDU0hBMjU2KHN0cmluZ1RvU2lnbik7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc2FzUXVlcnlQYXJhbWV0ZXJzOiBuZXcgU0FTUXVlcnlQYXJhbWV0ZXJzKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMudmVyc2lvbiwgc2lnbmF0dXJlLCB2ZXJpZmllZFBlcm1pc3Npb25zLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wcm90b2NvbCwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5zdGFydHNPbiwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5leHBpcmVzT24sIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuaXBSYW5nZSwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5pZGVudGlmaWVyLCByZXNvdXJjZSwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jYWNoZUNvbnRyb2wsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudERpc3Bvc2l0aW9uLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRFbmNvZGluZywgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50TGFuZ3VhZ2UsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudFR5cGUpLFxuICAgICAgICBzdHJpbmdUb1NpZ246IHN0cmluZ1RvU2lnbixcbiAgICB9O1xufVxuLyoqXG4gKiBPTkxZIEFWQUlMQUJMRSBJTiBOT0RFLkpTIFJVTlRJTUUuXG4gKiBJTVBMRU1FTlRBVElPTiBGT1IgQVBJIFZFUlNJT04gRlJPTSAyMDIwLTEyLTA2LlxuICpcbiAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgU0FTUXVlcnlQYXJhbWV0ZXJzLlxuICpcbiAqIE9ubHkgYWNjZXB0cyByZXF1aXJlZCBzZXR0aW5ncyBuZWVkZWQgdG8gY3JlYXRlIGEgU0FTLiBGb3Igb3B0aW9uYWwgc2V0dGluZ3MgcGxlYXNlXG4gKiBzZXQgY29ycmVzcG9uZGluZyBwcm9wZXJ0aWVzIGRpcmVjdGx5LCBzdWNoIGFzIHBlcm1pc3Npb25zLCBzdGFydHNPbiBhbmQgaWRlbnRpZmllci5cbiAqXG4gKiBXQVJOSU5HOiBXaGVuIGlkZW50aWZpZXIgaXMgbm90IHByb3ZpZGVkLCBwZXJtaXNzaW9ucyBhbmQgZXhwaXJlc09uIGFyZSByZXF1aXJlZC5cbiAqIFlvdSBNVVNUIGFzc2lnbiB2YWx1ZSB0byBpZGVudGlmaWVyIG9yIGV4cGlyZXNPbiAmIHBlcm1pc3Npb25zIG1hbnVhbGx5IGlmIHlvdSBpbml0aWFsIHdpdGhcbiAqIHRoaXMgY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMgLVxuICogQHBhcmFtIHNoYXJlZEtleUNyZWRlbnRpYWwgLVxuICovXG5mdW5jdGlvbiBnZW5lcmF0ZUJsb2JTQVNRdWVyeVBhcmFtZXRlcnMyMDIwMTIwNihibG9iU0FTU2lnbmF0dXJlVmFsdWVzLCBzaGFyZWRLZXlDcmVkZW50aWFsKSB7XG4gICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcyA9IFNBU1NpZ25hdHVyZVZhbHVlc1Nhbml0eUNoZWNrQW5kQXV0b2ZpbGwoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcyk7XG4gICAgaWYgKCFibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmlkZW50aWZpZXIgJiZcbiAgICAgICAgIShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zICYmIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuZXhwaXJlc09uKSkge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIk11c3QgcHJvdmlkZSAncGVybWlzc2lvbnMnIGFuZCAnZXhwaXJlc09uJyBmb3IgQmxvYiBTQVMgZ2VuZXJhdGlvbiB3aGVuICdpZGVudGlmaWVyJyBpcyBub3QgcHJvdmlkZWQuXCIpO1xuICAgIH1cbiAgICBsZXQgcmVzb3VyY2UgPSBcImNcIjtcbiAgICBsZXQgdGltZXN0YW1wID0gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5zbmFwc2hvdFRpbWU7XG4gICAgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuYmxvYk5hbWUpIHtcbiAgICAgICAgcmVzb3VyY2UgPSBcImJcIjtcbiAgICAgICAgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuc25hcHNob3RUaW1lKSB7XG4gICAgICAgICAgICByZXNvdXJjZSA9IFwiYnNcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnZlcnNpb25JZCkge1xuICAgICAgICAgICAgcmVzb3VyY2UgPSBcImJ2XCI7XG4gICAgICAgICAgICB0aW1lc3RhbXAgPSBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnZlcnNpb25JZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBDYWxsaW5nIHBhcnNlIGFuZCB0b1N0cmluZyBndWFyYW50ZWVzIHRoZSBwcm9wZXIgb3JkZXJpbmcgYW5kIHRocm93cyBvbiBpbnZhbGlkIGNoYXJhY3RlcnMuXG4gICAgbGV0IHZlcmlmaWVkUGVybWlzc2lvbnM7XG4gICAgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMpIHtcbiAgICAgICAgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuYmxvYk5hbWUpIHtcbiAgICAgICAgICAgIHZlcmlmaWVkUGVybWlzc2lvbnMgPSBCbG9iU0FTUGVybWlzc2lvbnMucGFyc2UoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucy50b1N0cmluZygpKS50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmVyaWZpZWRQZXJtaXNzaW9ucyA9IENvbnRhaW5lclNBU1Blcm1pc3Npb25zLnBhcnNlKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMudG9TdHJpbmcoKSkudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBTaWduYXR1cmUgaXMgZ2VuZXJhdGVkIG9uIHRoZSB1bi11cmwtZW5jb2RlZCB2YWx1ZXMuXG4gICAgY29uc3Qgc3RyaW5nVG9TaWduID0gW1xuICAgICAgICB2ZXJpZmllZFBlcm1pc3Npb25zID8gdmVyaWZpZWRQZXJtaXNzaW9ucyA6IFwiXCIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuc3RhcnRzT25cbiAgICAgICAgICAgID8gdHJ1bmNhdGVkSVNPODA2MURhdGUoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5zdGFydHNPbiwgZmFsc2UpXG4gICAgICAgICAgICA6IFwiXCIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuZXhwaXJlc09uXG4gICAgICAgICAgICA/IHRydW5jYXRlZElTTzgwNjFEYXRlKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuZXhwaXJlc09uLCBmYWxzZSlcbiAgICAgICAgICAgIDogXCJcIixcbiAgICAgICAgZ2V0Q2Fub25pY2FsTmFtZShzaGFyZWRLZXlDcmVkZW50aWFsLmFjY291bnROYW1lLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRhaW5lck5hbWUsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuYmxvYk5hbWUpLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmlkZW50aWZpZXIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuaXBSYW5nZSA/IGlwUmFuZ2VUb1N0cmluZyhibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmlwUmFuZ2UpIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wcm90b2NvbCA/IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucHJvdG9jb2wgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnZlcnNpb24sXG4gICAgICAgIHJlc291cmNlLFxuICAgICAgICB0aW1lc3RhbXAsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuZW5jcnlwdGlvblNjb3BlLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNhY2hlQ29udHJvbCA/IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY2FjaGVDb250cm9sIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50RGlzcG9zaXRpb24gPyBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnREaXNwb3NpdGlvbiA6IFwiXCIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudEVuY29kaW5nID8gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50RW5jb2RpbmcgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRMYW5ndWFnZSA/IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudExhbmd1YWdlIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50VHlwZSA/IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudFR5cGUgOiBcIlwiLFxuICAgIF0uam9pbihcIlxcblwiKTtcbiAgICBjb25zdCBzaWduYXR1cmUgPSBzaGFyZWRLZXlDcmVkZW50aWFsLmNvbXB1dGVITUFDU0hBMjU2KHN0cmluZ1RvU2lnbik7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc2FzUXVlcnlQYXJhbWV0ZXJzOiBuZXcgU0FTUXVlcnlQYXJhbWV0ZXJzKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMudmVyc2lvbiwgc2lnbmF0dXJlLCB2ZXJpZmllZFBlcm1pc3Npb25zLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wcm90b2NvbCwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5zdGFydHNPbiwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5leHBpcmVzT24sIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuaXBSYW5nZSwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5pZGVudGlmaWVyLCByZXNvdXJjZSwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jYWNoZUNvbnRyb2wsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudERpc3Bvc2l0aW9uLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRFbmNvZGluZywgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50TGFuZ3VhZ2UsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudFR5cGUsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuZW5jcnlwdGlvblNjb3BlKSxcbiAgICAgICAgc3RyaW5nVG9TaWduOiBzdHJpbmdUb1NpZ24sXG4gICAgfTtcbn1cbi8qKlxuICogT05MWSBBVkFJTEFCTEUgSU4gTk9ERS5KUyBSVU5USU1FLlxuICogSU1QTEVNRU5UQVRJT04gRk9SIEFQSSBWRVJTSU9OIEZST00gMjAxOC0xMS0wOS5cbiAqXG4gKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIFNBU1F1ZXJ5UGFyYW1ldGVycy5cbiAqXG4gKiBPbmx5IGFjY2VwdHMgcmVxdWlyZWQgc2V0dGluZ3MgbmVlZGVkIHRvIGNyZWF0ZSBhIFNBUy4gRm9yIG9wdGlvbmFsIHNldHRpbmdzIHBsZWFzZVxuICogc2V0IGNvcnJlc3BvbmRpbmcgcHJvcGVydGllcyBkaXJlY3RseSwgc3VjaCBhcyBwZXJtaXNzaW9ucywgc3RhcnRzT24uXG4gKlxuICogV0FSTklORzogaWRlbnRpZmllciB3aWxsIGJlIGlnbm9yZWQsIHBlcm1pc3Npb25zIGFuZCBleHBpcmVzT24gYXJlIHJlcXVpcmVkLlxuICpcbiAqIEBwYXJhbSBibG9iU0FTU2lnbmF0dXJlVmFsdWVzIC1cbiAqIEBwYXJhbSB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwgLVxuICovXG5mdW5jdGlvbiBnZW5lcmF0ZUJsb2JTQVNRdWVyeVBhcmFtZXRlcnNVREsyMDE4MTEwOShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLCB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwpIHtcbiAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzID0gU0FTU2lnbmF0dXJlVmFsdWVzU2FuaXR5Q2hlY2tBbmRBdXRvZmlsbChibG9iU0FTU2lnbmF0dXJlVmFsdWVzKTtcbiAgICAvLyBTdG9yZWQgYWNjZXNzIHBvbGljaWVzIGFyZSBub3Qgc3VwcG9ydGVkIGZvciBhIHVzZXIgZGVsZWdhdGlvbiBTQVMuXG4gICAgaWYgKCFibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zIHx8ICFibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmV4cGlyZXNPbikge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIk11c3QgcHJvdmlkZSAncGVybWlzc2lvbnMnIGFuZCAnZXhwaXJlc09uJyBmb3IgQmxvYiBTQVMgZ2VuZXJhdGlvbiB3aGVuIGdlbmVyYXRpbmcgdXNlciBkZWxlZ2F0aW9uIFNBUy5cIik7XG4gICAgfVxuICAgIGxldCByZXNvdXJjZSA9IFwiY1wiO1xuICAgIGxldCB0aW1lc3RhbXAgPSBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnNuYXBzaG90VGltZTtcbiAgICBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5ibG9iTmFtZSkge1xuICAgICAgICByZXNvdXJjZSA9IFwiYlwiO1xuICAgICAgICBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5zbmFwc2hvdFRpbWUpIHtcbiAgICAgICAgICAgIHJlc291cmNlID0gXCJic1wiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMudmVyc2lvbklkKSB7XG4gICAgICAgICAgICByZXNvdXJjZSA9IFwiYnZcIjtcbiAgICAgICAgICAgIHRpbWVzdGFtcCA9IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMudmVyc2lvbklkO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIENhbGxpbmcgcGFyc2UgYW5kIHRvU3RyaW5nIGd1YXJhbnRlZXMgdGhlIHByb3BlciBvcmRlcmluZyBhbmQgdGhyb3dzIG9uIGludmFsaWQgY2hhcmFjdGVycy5cbiAgICBsZXQgdmVyaWZpZWRQZXJtaXNzaW9ucztcbiAgICBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucykge1xuICAgICAgICBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5ibG9iTmFtZSkge1xuICAgICAgICAgICAgdmVyaWZpZWRQZXJtaXNzaW9ucyA9IEJsb2JTQVNQZXJtaXNzaW9ucy5wYXJzZShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zLnRvU3RyaW5nKCkpLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2ZXJpZmllZFBlcm1pc3Npb25zID0gQ29udGFpbmVyU0FTUGVybWlzc2lvbnMucGFyc2UoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucy50b1N0cmluZygpKS50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFNpZ25hdHVyZSBpcyBnZW5lcmF0ZWQgb24gdGhlIHVuLXVybC1lbmNvZGVkIHZhbHVlcy5cbiAgICBjb25zdCBzdHJpbmdUb1NpZ24gPSBbXG4gICAgICAgIHZlcmlmaWVkUGVybWlzc2lvbnMgPyB2ZXJpZmllZFBlcm1pc3Npb25zIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5zdGFydHNPblxuICAgICAgICAgICAgPyB0cnVuY2F0ZWRJU084MDYxRGF0ZShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnN0YXJ0c09uLCBmYWxzZSlcbiAgICAgICAgICAgIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5leHBpcmVzT25cbiAgICAgICAgICAgID8gdHJ1bmNhdGVkSVNPODA2MURhdGUoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5leHBpcmVzT24sIGZhbHNlKVxuICAgICAgICAgICAgOiBcIlwiLFxuICAgICAgICBnZXRDYW5vbmljYWxOYW1lKHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC5hY2NvdW50TmFtZSwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250YWluZXJOYW1lLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmJsb2JOYW1lKSxcbiAgICAgICAgdXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsLnVzZXJEZWxlZ2F0aW9uS2V5LnNpZ25lZE9iamVjdElkLFxuICAgICAgICB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwudXNlckRlbGVnYXRpb25LZXkuc2lnbmVkVGVuYW50SWQsXG4gICAgICAgIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC51c2VyRGVsZWdhdGlvbktleS5zaWduZWRTdGFydHNPblxuICAgICAgICAgICAgPyB0cnVuY2F0ZWRJU084MDYxRGF0ZSh1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwudXNlckRlbGVnYXRpb25LZXkuc2lnbmVkU3RhcnRzT24sIGZhbHNlKVxuICAgICAgICAgICAgOiBcIlwiLFxuICAgICAgICB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwudXNlckRlbGVnYXRpb25LZXkuc2lnbmVkRXhwaXJlc09uXG4gICAgICAgICAgICA/IHRydW5jYXRlZElTTzgwNjFEYXRlKHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC51c2VyRGVsZWdhdGlvbktleS5zaWduZWRFeHBpcmVzT24sIGZhbHNlKVxuICAgICAgICAgICAgOiBcIlwiLFxuICAgICAgICB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwudXNlckRlbGVnYXRpb25LZXkuc2lnbmVkU2VydmljZSxcbiAgICAgICAgdXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsLnVzZXJEZWxlZ2F0aW9uS2V5LnNpZ25lZFZlcnNpb24sXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuaXBSYW5nZSA/IGlwUmFuZ2VUb1N0cmluZyhibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmlwUmFuZ2UpIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wcm90b2NvbCA/IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucHJvdG9jb2wgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnZlcnNpb24sXG4gICAgICAgIHJlc291cmNlLFxuICAgICAgICB0aW1lc3RhbXAsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY2FjaGVDb250cm9sLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnREaXNwb3NpdGlvbixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50RW5jb2RpbmcsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudExhbmd1YWdlLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRUeXBlLFxuICAgIF0uam9pbihcIlxcblwiKTtcbiAgICBjb25zdCBzaWduYXR1cmUgPSB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwuY29tcHV0ZUhNQUNTSEEyNTYoc3RyaW5nVG9TaWduKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBzYXNRdWVyeVBhcmFtZXRlcnM6IG5ldyBTQVNRdWVyeVBhcmFtZXRlcnMoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uLCBzaWduYXR1cmUsIHZlcmlmaWVkUGVybWlzc2lvbnMsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnByb3RvY29sLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnN0YXJ0c09uLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmV4cGlyZXNPbiwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5pcFJhbmdlLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmlkZW50aWZpZXIsIHJlc291cmNlLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNhY2hlQ29udHJvbCwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50RGlzcG9zaXRpb24sIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudEVuY29kaW5nLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRMYW5ndWFnZSwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50VHlwZSwgdXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsLnVzZXJEZWxlZ2F0aW9uS2V5KSxcbiAgICAgICAgc3RyaW5nVG9TaWduOiBzdHJpbmdUb1NpZ24sXG4gICAgfTtcbn1cbi8qKlxuICogT05MWSBBVkFJTEFCTEUgSU4gTk9ERS5KUyBSVU5USU1FLlxuICogSU1QTEVNRU5UQVRJT04gRk9SIEFQSSBWRVJTSU9OIEZST00gMjAyMC0wMi0xMC5cbiAqXG4gKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIFNBU1F1ZXJ5UGFyYW1ldGVycy5cbiAqXG4gKiBPbmx5IGFjY2VwdHMgcmVxdWlyZWQgc2V0dGluZ3MgbmVlZGVkIHRvIGNyZWF0ZSBhIFNBUy4gRm9yIG9wdGlvbmFsIHNldHRpbmdzIHBsZWFzZVxuICogc2V0IGNvcnJlc3BvbmRpbmcgcHJvcGVydGllcyBkaXJlY3RseSwgc3VjaCBhcyBwZXJtaXNzaW9ucywgc3RhcnRzT24uXG4gKlxuICogV0FSTklORzogaWRlbnRpZmllciB3aWxsIGJlIGlnbm9yZWQsIHBlcm1pc3Npb25zIGFuZCBleHBpcmVzT24gYXJlIHJlcXVpcmVkLlxuICpcbiAqIEBwYXJhbSBibG9iU0FTU2lnbmF0dXJlVmFsdWVzIC1cbiAqIEBwYXJhbSB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwgLVxuICovXG5mdW5jdGlvbiBnZW5lcmF0ZUJsb2JTQVNRdWVyeVBhcmFtZXRlcnNVREsyMDIwMDIxMChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLCB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwpIHtcbiAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzID0gU0FTU2lnbmF0dXJlVmFsdWVzU2FuaXR5Q2hlY2tBbmRBdXRvZmlsbChibG9iU0FTU2lnbmF0dXJlVmFsdWVzKTtcbiAgICAvLyBTdG9yZWQgYWNjZXNzIHBvbGljaWVzIGFyZSBub3Qgc3VwcG9ydGVkIGZvciBhIHVzZXIgZGVsZWdhdGlvbiBTQVMuXG4gICAgaWYgKCFibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zIHx8ICFibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmV4cGlyZXNPbikge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIk11c3QgcHJvdmlkZSAncGVybWlzc2lvbnMnIGFuZCAnZXhwaXJlc09uJyBmb3IgQmxvYiBTQVMgZ2VuZXJhdGlvbiB3aGVuIGdlbmVyYXRpbmcgdXNlciBkZWxlZ2F0aW9uIFNBUy5cIik7XG4gICAgfVxuICAgIGxldCByZXNvdXJjZSA9IFwiY1wiO1xuICAgIGxldCB0aW1lc3RhbXAgPSBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnNuYXBzaG90VGltZTtcbiAgICBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5ibG9iTmFtZSkge1xuICAgICAgICByZXNvdXJjZSA9IFwiYlwiO1xuICAgICAgICBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5zbmFwc2hvdFRpbWUpIHtcbiAgICAgICAgICAgIHJlc291cmNlID0gXCJic1wiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMudmVyc2lvbklkKSB7XG4gICAgICAgICAgICByZXNvdXJjZSA9IFwiYnZcIjtcbiAgICAgICAgICAgIHRpbWVzdGFtcCA9IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMudmVyc2lvbklkO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIENhbGxpbmcgcGFyc2UgYW5kIHRvU3RyaW5nIGd1YXJhbnRlZXMgdGhlIHByb3BlciBvcmRlcmluZyBhbmQgdGhyb3dzIG9uIGludmFsaWQgY2hhcmFjdGVycy5cbiAgICBsZXQgdmVyaWZpZWRQZXJtaXNzaW9ucztcbiAgICBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucykge1xuICAgICAgICBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5ibG9iTmFtZSkge1xuICAgICAgICAgICAgdmVyaWZpZWRQZXJtaXNzaW9ucyA9IEJsb2JTQVNQZXJtaXNzaW9ucy5wYXJzZShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zLnRvU3RyaW5nKCkpLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2ZXJpZmllZFBlcm1pc3Npb25zID0gQ29udGFpbmVyU0FTUGVybWlzc2lvbnMucGFyc2UoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucy50b1N0cmluZygpKS50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFNpZ25hdHVyZSBpcyBnZW5lcmF0ZWQgb24gdGhlIHVuLXVybC1lbmNvZGVkIHZhbHVlcy5cbiAgICBjb25zdCBzdHJpbmdUb1NpZ24gPSBbXG4gICAgICAgIHZlcmlmaWVkUGVybWlzc2lvbnMgPyB2ZXJpZmllZFBlcm1pc3Npb25zIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5zdGFydHNPblxuICAgICAgICAgICAgPyB0cnVuY2F0ZWRJU084MDYxRGF0ZShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnN0YXJ0c09uLCBmYWxzZSlcbiAgICAgICAgICAgIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5leHBpcmVzT25cbiAgICAgICAgICAgID8gdHJ1bmNhdGVkSVNPODA2MURhdGUoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5leHBpcmVzT24sIGZhbHNlKVxuICAgICAgICAgICAgOiBcIlwiLFxuICAgICAgICBnZXRDYW5vbmljYWxOYW1lKHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC5hY2NvdW50TmFtZSwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250YWluZXJOYW1lLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmJsb2JOYW1lKSxcbiAgICAgICAgdXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsLnVzZXJEZWxlZ2F0aW9uS2V5LnNpZ25lZE9iamVjdElkLFxuICAgICAgICB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwudXNlckRlbGVnYXRpb25LZXkuc2lnbmVkVGVuYW50SWQsXG4gICAgICAgIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC51c2VyRGVsZWdhdGlvbktleS5zaWduZWRTdGFydHNPblxuICAgICAgICAgICAgPyB0cnVuY2F0ZWRJU084MDYxRGF0ZSh1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwudXNlckRlbGVnYXRpb25LZXkuc2lnbmVkU3RhcnRzT24sIGZhbHNlKVxuICAgICAgICAgICAgOiBcIlwiLFxuICAgICAgICB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwudXNlckRlbGVnYXRpb25LZXkuc2lnbmVkRXhwaXJlc09uXG4gICAgICAgICAgICA/IHRydW5jYXRlZElTTzgwNjFEYXRlKHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC51c2VyRGVsZWdhdGlvbktleS5zaWduZWRFeHBpcmVzT24sIGZhbHNlKVxuICAgICAgICAgICAgOiBcIlwiLFxuICAgICAgICB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwudXNlckRlbGVnYXRpb25LZXkuc2lnbmVkU2VydmljZSxcbiAgICAgICAgdXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsLnVzZXJEZWxlZ2F0aW9uS2V5LnNpZ25lZFZlcnNpb24sXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucHJlYXV0aG9yaXplZEFnZW50T2JqZWN0SWQsXG4gICAgICAgIHVuZGVmaW5lZCwgLy8gYWdlbnRPYmplY3RJZFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvcnJlbGF0aW9uSWQsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuaXBSYW5nZSA/IGlwUmFuZ2VUb1N0cmluZyhibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmlwUmFuZ2UpIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wcm90b2NvbCA/IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucHJvdG9jb2wgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnZlcnNpb24sXG4gICAgICAgIHJlc291cmNlLFxuICAgICAgICB0aW1lc3RhbXAsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY2FjaGVDb250cm9sLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnREaXNwb3NpdGlvbixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50RW5jb2RpbmcsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudExhbmd1YWdlLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRUeXBlLFxuICAgIF0uam9pbihcIlxcblwiKTtcbiAgICBjb25zdCBzaWduYXR1cmUgPSB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwuY29tcHV0ZUhNQUNTSEEyNTYoc3RyaW5nVG9TaWduKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBzYXNRdWVyeVBhcmFtZXRlcnM6IG5ldyBTQVNRdWVyeVBhcmFtZXRlcnMoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uLCBzaWduYXR1cmUsIHZlcmlmaWVkUGVybWlzc2lvbnMsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnByb3RvY29sLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnN0YXJ0c09uLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmV4cGlyZXNPbiwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5pcFJhbmdlLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmlkZW50aWZpZXIsIHJlc291cmNlLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNhY2hlQ29udHJvbCwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50RGlzcG9zaXRpb24sIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudEVuY29kaW5nLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRMYW5ndWFnZSwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50VHlwZSwgdXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsLnVzZXJEZWxlZ2F0aW9uS2V5LCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnByZWF1dGhvcml6ZWRBZ2VudE9iamVjdElkLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvcnJlbGF0aW9uSWQpLFxuICAgICAgICBzdHJpbmdUb1NpZ246IHN0cmluZ1RvU2lnbixcbiAgICB9O1xufVxuLyoqXG4gKiBPTkxZIEFWQUlMQUJMRSBJTiBOT0RFLkpTIFJVTlRJTUUuXG4gKiBJTVBMRU1FTlRBVElPTiBGT1IgQVBJIFZFUlNJT04gRlJPTSAyMDIwLTEyLTA2LlxuICpcbiAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgU0FTUXVlcnlQYXJhbWV0ZXJzLlxuICpcbiAqIE9ubHkgYWNjZXB0cyByZXF1aXJlZCBzZXR0aW5ncyBuZWVkZWQgdG8gY3JlYXRlIGEgU0FTLiBGb3Igb3B0aW9uYWwgc2V0dGluZ3MgcGxlYXNlXG4gKiBzZXQgY29ycmVzcG9uZGluZyBwcm9wZXJ0aWVzIGRpcmVjdGx5LCBzdWNoIGFzIHBlcm1pc3Npb25zLCBzdGFydHNPbi5cbiAqXG4gKiBXQVJOSU5HOiBpZGVudGlmaWVyIHdpbGwgYmUgaWdub3JlZCwgcGVybWlzc2lvbnMgYW5kIGV4cGlyZXNPbiBhcmUgcmVxdWlyZWQuXG4gKlxuICogQHBhcmFtIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMgLVxuICogQHBhcmFtIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbCAtXG4gKi9cbmZ1bmN0aW9uIGdlbmVyYXRlQmxvYlNBU1F1ZXJ5UGFyYW1ldGVyc1VESzIwMjAxMjA2KGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMsIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbCkge1xuICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMgPSBTQVNTaWduYXR1cmVWYWx1ZXNTYW5pdHlDaGVja0FuZEF1dG9maWxsKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMpO1xuICAgIC8vIFN0b3JlZCBhY2Nlc3MgcG9saWNpZXMgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIGEgdXNlciBkZWxlZ2F0aW9uIFNBUy5cbiAgICBpZiAoIWJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMgfHwgIWJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuZXhwaXJlc09uKSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiTXVzdCBwcm92aWRlICdwZXJtaXNzaW9ucycgYW5kICdleHBpcmVzT24nIGZvciBCbG9iIFNBUyBnZW5lcmF0aW9uIHdoZW4gZ2VuZXJhdGluZyB1c2VyIGRlbGVnYXRpb24gU0FTLlwiKTtcbiAgICB9XG4gICAgbGV0IHJlc291cmNlID0gXCJjXCI7XG4gICAgbGV0IHRpbWVzdGFtcCA9IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuc25hcHNob3RUaW1lO1xuICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmJsb2JOYW1lKSB7XG4gICAgICAgIHJlc291cmNlID0gXCJiXCI7XG4gICAgICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnNuYXBzaG90VGltZSkge1xuICAgICAgICAgICAgcmVzb3VyY2UgPSBcImJzXCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uSWQpIHtcbiAgICAgICAgICAgIHJlc291cmNlID0gXCJidlwiO1xuICAgICAgICAgICAgdGltZXN0YW1wID0gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uSWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gQ2FsbGluZyBwYXJzZSBhbmQgdG9TdHJpbmcgZ3VhcmFudGVlcyB0aGUgcHJvcGVyIG9yZGVyaW5nIGFuZCB0aHJvd3Mgb24gaW52YWxpZCBjaGFyYWN0ZXJzLlxuICAgIGxldCB2ZXJpZmllZFBlcm1pc3Npb25zO1xuICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zKSB7XG4gICAgICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmJsb2JOYW1lKSB7XG4gICAgICAgICAgICB2ZXJpZmllZFBlcm1pc3Npb25zID0gQmxvYlNBU1Blcm1pc3Npb25zLnBhcnNlKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMudG9TdHJpbmcoKSkudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZlcmlmaWVkUGVybWlzc2lvbnMgPSBDb250YWluZXJTQVNQZXJtaXNzaW9ucy5wYXJzZShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zLnRvU3RyaW5nKCkpLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gU2lnbmF0dXJlIGlzIGdlbmVyYXRlZCBvbiB0aGUgdW4tdXJsLWVuY29kZWQgdmFsdWVzLlxuICAgIGNvbnN0IHN0cmluZ1RvU2lnbiA9IFtcbiAgICAgICAgdmVyaWZpZWRQZXJtaXNzaW9ucyA/IHZlcmlmaWVkUGVybWlzc2lvbnMgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnN0YXJ0c09uXG4gICAgICAgICAgICA/IHRydW5jYXRlZElTTzgwNjFEYXRlKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuc3RhcnRzT24sIGZhbHNlKVxuICAgICAgICAgICAgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmV4cGlyZXNPblxuICAgICAgICAgICAgPyB0cnVuY2F0ZWRJU084MDYxRGF0ZShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmV4cGlyZXNPbiwgZmFsc2UpXG4gICAgICAgICAgICA6IFwiXCIsXG4gICAgICAgIGdldENhbm9uaWNhbE5hbWUodXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsLmFjY291bnROYW1lLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRhaW5lck5hbWUsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuYmxvYk5hbWUpLFxuICAgICAgICB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwudXNlckRlbGVnYXRpb25LZXkuc2lnbmVkT2JqZWN0SWQsXG4gICAgICAgIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC51c2VyRGVsZWdhdGlvbktleS5zaWduZWRUZW5hbnRJZCxcbiAgICAgICAgdXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsLnVzZXJEZWxlZ2F0aW9uS2V5LnNpZ25lZFN0YXJ0c09uXG4gICAgICAgICAgICA/IHRydW5jYXRlZElTTzgwNjFEYXRlKHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC51c2VyRGVsZWdhdGlvbktleS5zaWduZWRTdGFydHNPbiwgZmFsc2UpXG4gICAgICAgICAgICA6IFwiXCIsXG4gICAgICAgIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC51c2VyRGVsZWdhdGlvbktleS5zaWduZWRFeHBpcmVzT25cbiAgICAgICAgICAgID8gdHJ1bmNhdGVkSVNPODA2MURhdGUodXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsLnVzZXJEZWxlZ2F0aW9uS2V5LnNpZ25lZEV4cGlyZXNPbiwgZmFsc2UpXG4gICAgICAgICAgICA6IFwiXCIsXG4gICAgICAgIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC51c2VyRGVsZWdhdGlvbktleS5zaWduZWRTZXJ2aWNlLFxuICAgICAgICB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwudXNlckRlbGVnYXRpb25LZXkuc2lnbmVkVmVyc2lvbixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wcmVhdXRob3JpemVkQWdlbnRPYmplY3RJZCxcbiAgICAgICAgdW5kZWZpbmVkLCAvLyBhZ2VudE9iamVjdElkXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29ycmVsYXRpb25JZCxcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5pcFJhbmdlID8gaXBSYW5nZVRvU3RyaW5nKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuaXBSYW5nZSkgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnByb3RvY29sID8gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wcm90b2NvbCA6IFwiXCIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMudmVyc2lvbixcbiAgICAgICAgcmVzb3VyY2UsXG4gICAgICAgIHRpbWVzdGFtcCxcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5lbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY2FjaGVDb250cm9sLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnREaXNwb3NpdGlvbixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50RW5jb2RpbmcsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudExhbmd1YWdlLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRUeXBlLFxuICAgIF0uam9pbihcIlxcblwiKTtcbiAgICBjb25zdCBzaWduYXR1cmUgPSB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwuY29tcHV0ZUhNQUNTSEEyNTYoc3RyaW5nVG9TaWduKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBzYXNRdWVyeVBhcmFtZXRlcnM6IG5ldyBTQVNRdWVyeVBhcmFtZXRlcnMoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uLCBzaWduYXR1cmUsIHZlcmlmaWVkUGVybWlzc2lvbnMsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnByb3RvY29sLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnN0YXJ0c09uLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmV4cGlyZXNPbiwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5pcFJhbmdlLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmlkZW50aWZpZXIsIHJlc291cmNlLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNhY2hlQ29udHJvbCwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50RGlzcG9zaXRpb24sIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudEVuY29kaW5nLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRMYW5ndWFnZSwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50VHlwZSwgdXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsLnVzZXJEZWxlZ2F0aW9uS2V5LCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnByZWF1dGhvcml6ZWRBZ2VudE9iamVjdElkLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvcnJlbGF0aW9uSWQsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuZW5jcnlwdGlvblNjb3BlKSxcbiAgICAgICAgc3RyaW5nVG9TaWduOiBzdHJpbmdUb1NpZ24sXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGdldENhbm9uaWNhbE5hbWUoYWNjb3VudE5hbWUsIGNvbnRhaW5lck5hbWUsIGJsb2JOYW1lKSB7XG4gICAgLy8gQ29udGFpbmVyOiBcIi9ibG9iL2FjY291bnQvY29udGFpbmVyTmFtZVwiXG4gICAgLy8gQmxvYjogICAgICBcIi9ibG9iL2FjY291bnQvY29udGFpbmVyTmFtZS9ibG9iTmFtZVwiXG4gICAgY29uc3QgZWxlbWVudHMgPSBbYC9ibG9iLyR7YWNjb3VudE5hbWV9LyR7Y29udGFpbmVyTmFtZX1gXTtcbiAgICBpZiAoYmxvYk5hbWUpIHtcbiAgICAgICAgZWxlbWVudHMucHVzaChgLyR7YmxvYk5hbWV9YCk7XG4gICAgfVxuICAgIHJldHVybiBlbGVtZW50cy5qb2luKFwiXCIpO1xufVxuZnVuY3Rpb24gU0FTU2lnbmF0dXJlVmFsdWVzU2FuaXR5Q2hlY2tBbmRBdXRvZmlsbChibG9iU0FTU2lnbmF0dXJlVmFsdWVzKSB7XG4gICAgY29uc3QgdmVyc2lvbiA9IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMudmVyc2lvbiA/IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMudmVyc2lvbiA6IFNFUlZJQ0VfVkVSU0lPTjtcbiAgICBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5zbmFwc2hvdFRpbWUgJiYgdmVyc2lvbiA8IFwiMjAxOC0xMS0wOVwiKSB7XG4gICAgICAgIHRocm93IFJhbmdlRXJyb3IoXCIndmVyc2lvbicgbXVzdCBiZSA+PSAnMjAxOC0xMS0wOScgd2hlbiBwcm92aWRpbmcgJ3NuYXBzaG90VGltZScuXCIpO1xuICAgIH1cbiAgICBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5ibG9iTmFtZSA9PT0gdW5kZWZpbmVkICYmIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuc25hcHNob3RUaW1lKSB7XG4gICAgICAgIHRocm93IFJhbmdlRXJyb3IoXCJNdXN0IHByb3ZpZGUgJ2Jsb2JOYW1lJyB3aGVuIHByb3ZpZGluZyAnc25hcHNob3RUaW1lJy5cIik7XG4gICAgfVxuICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnZlcnNpb25JZCAmJiB2ZXJzaW9uIDwgXCIyMDE5LTEwLTEwXCIpIHtcbiAgICAgICAgdGhyb3cgUmFuZ2VFcnJvcihcIid2ZXJzaW9uJyBtdXN0IGJlID49ICcyMDE5LTEwLTEwJyB3aGVuIHByb3ZpZGluZyAndmVyc2lvbklkJy5cIik7XG4gICAgfVxuICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmJsb2JOYW1lID09PSB1bmRlZmluZWQgJiYgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uSWQpIHtcbiAgICAgICAgdGhyb3cgUmFuZ2VFcnJvcihcIk11c3QgcHJvdmlkZSAnYmxvYk5hbWUnIHdoZW4gcHJvdmlkaW5nICd2ZXJzaW9uSWQnLlwiKTtcbiAgICB9XG4gICAgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMgJiZcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucy5zZXRJbW11dGFiaWxpdHlQb2xpY3kgJiZcbiAgICAgICAgdmVyc2lvbiA8IFwiMjAyMC0wOC0wNFwiKSB7XG4gICAgICAgIHRocm93IFJhbmdlRXJyb3IoXCIndmVyc2lvbicgbXVzdCBiZSA+PSAnMjAyMC0wOC0wNCcgd2hlbiBwcm92aWRlZCAnaScgcGVybWlzc2lvbi5cIik7XG4gICAgfVxuICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zICYmXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMuZGVsZXRlVmVyc2lvbiAmJlxuICAgICAgICB2ZXJzaW9uIDwgXCIyMDE5LTEwLTEwXCIpIHtcbiAgICAgICAgdGhyb3cgUmFuZ2VFcnJvcihcIid2ZXJzaW9uJyBtdXN0IGJlID49ICcyMDE5LTEwLTEwJyB3aGVuIHByb3ZpZGluZyAneCcgcGVybWlzc2lvbi5cIik7XG4gICAgfVxuICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zICYmXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMucGVybWFuZW50RGVsZXRlICYmXG4gICAgICAgIHZlcnNpb24gPCBcIjIwMTktMTAtMTBcIikge1xuICAgICAgICB0aHJvdyBSYW5nZUVycm9yKFwiJ3ZlcnNpb24nIG11c3QgYmUgPj0gJzIwMTktMTAtMTAnIHdoZW4gcHJvdmlkaW5nICd5JyBwZXJtaXNzaW9uLlwiKTtcbiAgICB9XG4gICAgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMgJiZcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucy50YWcgJiZcbiAgICAgICAgdmVyc2lvbiA8IFwiMjAxOS0xMi0xMlwiKSB7XG4gICAgICAgIHRocm93IFJhbmdlRXJyb3IoXCIndmVyc2lvbicgbXVzdCBiZSA+PSAnMjAxOS0xMi0xMicgd2hlbiBwcm92aWRpbmcgJ3QnIHBlcm1pc3Npb24uXCIpO1xuICAgIH1cbiAgICBpZiAodmVyc2lvbiA8IFwiMjAyMC0wMi0xMFwiICYmXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMgJiZcbiAgICAgICAgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMubW92ZSB8fCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zLmV4ZWN1dGUpKSB7XG4gICAgICAgIHRocm93IFJhbmdlRXJyb3IoXCIndmVyc2lvbicgbXVzdCBiZSA+PSAnMjAyMC0wMi0xMCcgd2hlbiBwcm92aWRpbmcgdGhlICdtJyBvciAnZScgcGVybWlzc2lvbi5cIik7XG4gICAgfVxuICAgIGlmICh2ZXJzaW9uIDwgXCIyMDIxLTA0LTEwXCIgJiZcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucyAmJlxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zLmZpbHRlckJ5VGFncykge1xuICAgICAgICB0aHJvdyBSYW5nZUVycm9yKFwiJ3ZlcnNpb24nIG11c3QgYmUgPj0gJzIwMjEtMDQtMTAnIHdoZW4gcHJvdmlkaW5nIHRoZSAnZicgcGVybWlzc2lvbi5cIik7XG4gICAgfVxuICAgIGlmICh2ZXJzaW9uIDwgXCIyMDIwLTAyLTEwXCIgJiZcbiAgICAgICAgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucHJlYXV0aG9yaXplZEFnZW50T2JqZWN0SWQgfHwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb3JyZWxhdGlvbklkKSkge1xuICAgICAgICB0aHJvdyBSYW5nZUVycm9yKFwiJ3ZlcnNpb24nIG11c3QgYmUgPj0gJzIwMjAtMDItMTAnIHdoZW4gcHJvdmlkaW5nICdwcmVhdXRob3JpemVkQWdlbnRPYmplY3RJZCcgb3IgJ2NvcnJlbGF0aW9uSWQnLlwiKTtcbiAgICB9XG4gICAgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuZW5jcnlwdGlvblNjb3BlICYmIHZlcnNpb24gPCBcIjIwMjAtMTItMDZcIikge1xuICAgICAgICB0aHJvdyBSYW5nZUVycm9yKFwiJ3ZlcnNpb24nIG11c3QgYmUgPj0gJzIwMjAtMTItMDYnIHdoZW4gcHJvdmlkZWQgJ2VuY3J5cHRpb25TY29wZScgaW4gU0FTLlwiKTtcbiAgICB9XG4gICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uID0gdmVyc2lvbjtcbiAgICByZXR1cm4gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcztcbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIEEgY2xpZW50IHRoYXQgbWFuYWdlcyBsZWFzZXMgZm9yIGEge0BsaW5rIENvbnRhaW5lckNsaWVudH0gb3IgYSB7QGxpbmsgQmxvYkNsaWVudH0uXG4gKi9cbmNsYXNzIEJsb2JMZWFzZUNsaWVudCB7XG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgbGVhc2UgSWQuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgbGVhc2VJZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xlYXNlSWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHVybC5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCB1cmwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl91cmw7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgQmxvYkxlYXNlQ2xpZW50LlxuICAgICAqIEBwYXJhbSBjbGllbnQgLSBUaGUgY2xpZW50IHRvIG1ha2UgdGhlIGxlYXNlIG9wZXJhdGlvbiByZXF1ZXN0cy5cbiAgICAgKiBAcGFyYW0gbGVhc2VJZCAtIEluaXRpYWwgcHJvcG9zZWQgbGVhc2UgaWQuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoY2xpZW50LCBsZWFzZUlkKSB7XG4gICAgICAgIGNvbnN0IGNsaWVudENvbnRleHQgPSBjbGllbnQuc3RvcmFnZUNsaWVudENvbnRleHQ7XG4gICAgICAgIHRoaXMuX3VybCA9IGNsaWVudC51cmw7XG4gICAgICAgIGlmIChjbGllbnQubmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLl9pc0NvbnRhaW5lciA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXJPckJsb2JPcGVyYXRpb24gPSBjbGllbnRDb250ZXh0LmNvbnRhaW5lcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2lzQ29udGFpbmVyID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXJPckJsb2JPcGVyYXRpb24gPSBjbGllbnRDb250ZXh0LmJsb2I7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFsZWFzZUlkKSB7XG4gICAgICAgICAgICBsZWFzZUlkID0gY29yZVV0aWwucmFuZG9tVVVJRCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2xlYXNlSWQgPSBsZWFzZUlkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFc3RhYmxpc2hlcyBhbmQgbWFuYWdlcyBhIGxvY2sgb24gYSBjb250YWluZXIgZm9yIGRlbGV0ZSBvcGVyYXRpb25zLCBvciBvbiBhIGJsb2JcbiAgICAgKiBmb3Igd3JpdGUgYW5kIGRlbGV0ZSBvcGVyYXRpb25zLlxuICAgICAqIFRoZSBsb2NrIGR1cmF0aW9uIGNhbiBiZSAxNSB0byA2MCBzZWNvbmRzLCBvciBjYW4gYmUgaW5maW5pdGUuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvbGVhc2UtY29udGFpbmVyXG4gICAgICogYW5kXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvbGVhc2UtYmxvYlxuICAgICAqXG4gICAgICogQHBhcmFtIGR1cmF0aW9uIC0gTXVzdCBiZSBiZXR3ZWVuIDE1IHRvIDYwIHNlY29uZHMsIG9yIGluZmluaXRlICgtMSlcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIG9wdGlvbiB0byBjb25maWd1cmUgbGVhc2UgbWFuYWdlbWVudCBvcGVyYXRpb25zLlxuICAgICAqIEByZXR1cm5zIFJlc3BvbnNlIGRhdGEgZm9yIGFjcXVpcmUgbGVhc2Ugb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGFjcXVpcmVMZWFzZShkdXJhdGlvbiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2U7XG4gICAgICAgIGlmICh0aGlzLl9pc0NvbnRhaW5lciAmJlxuICAgICAgICAgICAgKCgoKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuaWZNYXRjaCkgJiYgKChfYiA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmlmTWF0Y2gpICE9PSBFVGFnTm9uZSkgfHxcbiAgICAgICAgICAgICAgICAoKChfYyA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmlmTm9uZU1hdGNoKSAmJiAoKF9kID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuaWZOb25lTWF0Y2gpICE9PSBFVGFnTm9uZSkgfHxcbiAgICAgICAgICAgICAgICAoKF9lID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2UudGFnQ29uZGl0aW9ucykpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlRoZSBJZk1hdGNoLCBJZk5vbmVNYXRjaCBhbmQgdGFncyBhY2Nlc3MgY29uZGl0aW9ucyBhcmUgaWdub3JlZCBieSB0aGUgc2VydmljZS4gVmFsdWVzIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIHRoZWlyIGRlZmF1bHQgdmFsdWVzIGFyZSBub3QgYWNjZXB0YWJsZS5cIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iTGVhc2VDbGllbnQtYWNxdWlyZUxlYXNlXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuX2NvbnRhaW5lck9yQmxvYk9wZXJhdGlvbi5hY3F1aXJlTGVhc2Uoe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGR1cmF0aW9uLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICBwcm9wb3NlZExlYXNlSWQ6IHRoaXMuX2xlYXNlSWQsXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVG8gY2hhbmdlIHRoZSBJRCBvZiB0aGUgbGVhc2UuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvbGVhc2UtY29udGFpbmVyXG4gICAgICogYW5kXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvbGVhc2UtYmxvYlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3Bvc2VkTGVhc2VJZCAtIHRoZSBwcm9wb3NlZCBuZXcgbGVhc2UgSWQuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBvcHRpb24gdG8gY29uZmlndXJlIGxlYXNlIG1hbmFnZW1lbnQgb3BlcmF0aW9ucy5cbiAgICAgKiBAcmV0dXJucyBSZXNwb25zZSBkYXRhIGZvciBjaGFuZ2UgbGVhc2Ugb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGNoYW5nZUxlYXNlKHByb3Bvc2VkTGVhc2VJZCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2U7XG4gICAgICAgIGlmICh0aGlzLl9pc0NvbnRhaW5lciAmJlxuICAgICAgICAgICAgKCgoKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuaWZNYXRjaCkgJiYgKChfYiA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmlmTWF0Y2gpICE9PSBFVGFnTm9uZSkgfHxcbiAgICAgICAgICAgICAgICAoKChfYyA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmlmTm9uZU1hdGNoKSAmJiAoKF9kID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuaWZOb25lTWF0Y2gpICE9PSBFVGFnTm9uZSkgfHxcbiAgICAgICAgICAgICAgICAoKF9lID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2UudGFnQ29uZGl0aW9ucykpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlRoZSBJZk1hdGNoLCBJZk5vbmVNYXRjaCBhbmQgdGFncyBhY2Nlc3MgY29uZGl0aW9ucyBhcmUgaWdub3JlZCBieSB0aGUgc2VydmljZS4gVmFsdWVzIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIHRoZWlyIGRlZmF1bHQgdmFsdWVzIGFyZSBub3QgYWNjZXB0YWJsZS5cIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iTGVhc2VDbGllbnQtY2hhbmdlTGVhc2VcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuX2NvbnRhaW5lck9yQmxvYk9wZXJhdGlvbi5jaGFuZ2VMZWFzZSh0aGlzLl9sZWFzZUlkLCBwcm9wb3NlZExlYXNlSWQsIHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgdGhpcy5fbGVhc2VJZCA9IHByb3Bvc2VkTGVhc2VJZDtcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRvIGZyZWUgdGhlIGxlYXNlIGlmIGl0IGlzIG5vIGxvbmdlciBuZWVkZWQgc28gdGhhdCBhbm90aGVyIGNsaWVudCBtYXlcbiAgICAgKiBpbW1lZGlhdGVseSBhY3F1aXJlIGEgbGVhc2UgYWdhaW5zdCB0aGUgY29udGFpbmVyIG9yIHRoZSBibG9iLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2xlYXNlLWNvbnRhaW5lclxuICAgICAqIGFuZFxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2xlYXNlLWJsb2JcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gb3B0aW9uIHRvIGNvbmZpZ3VyZSBsZWFzZSBtYW5hZ2VtZW50IG9wZXJhdGlvbnMuXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgcmVsZWFzZSBsZWFzZSBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgcmVsZWFzZUxlYXNlKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lO1xuICAgICAgICBpZiAodGhpcy5faXNDb250YWluZXIgJiZcbiAgICAgICAgICAgICgoKChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmlmTWF0Y2gpICYmICgoX2IgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5pZk1hdGNoKSAhPT0gRVRhZ05vbmUpIHx8XG4gICAgICAgICAgICAgICAgKCgoX2MgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5pZk5vbmVNYXRjaCkgJiYgKChfZCA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLmlmTm9uZU1hdGNoKSAhPT0gRVRhZ05vbmUpIHx8XG4gICAgICAgICAgICAgICAgKChfZSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9lLnRhZ0NvbmRpdGlvbnMpKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJUaGUgSWZNYXRjaCwgSWZOb25lTWF0Y2ggYW5kIHRhZ3MgYWNjZXNzIGNvbmRpdGlvbnMgYXJlIGlnbm9yZWQgYnkgdGhlIHNlcnZpY2UuIFZhbHVlcyBvdGhlciB0aGFuIHVuZGVmaW5lZCBvciB0aGVpciBkZWZhdWx0IHZhbHVlcyBhcmUgbm90IGFjY2VwdGFibGUuXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYkxlYXNlQ2xpZW50LXJlbGVhc2VMZWFzZVwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLl9jb250YWluZXJPckJsb2JPcGVyYXRpb24ucmVsZWFzZUxlYXNlKHRoaXMuX2xlYXNlSWQsIHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVG8gcmVuZXcgdGhlIGxlYXNlLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2xlYXNlLWNvbnRhaW5lclxuICAgICAqIGFuZFxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2xlYXNlLWJsb2JcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgb3B0aW9uIHRvIGNvbmZpZ3VyZSBsZWFzZSBtYW5hZ2VtZW50IG9wZXJhdGlvbnMuXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgcmVuZXcgbGVhc2Ugb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIHJlbmV3TGVhc2Uob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2U7XG4gICAgICAgIGlmICh0aGlzLl9pc0NvbnRhaW5lciAmJlxuICAgICAgICAgICAgKCgoKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuaWZNYXRjaCkgJiYgKChfYiA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmlmTWF0Y2gpICE9PSBFVGFnTm9uZSkgfHxcbiAgICAgICAgICAgICAgICAoKChfYyA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmlmTm9uZU1hdGNoKSAmJiAoKF9kID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuaWZOb25lTWF0Y2gpICE9PSBFVGFnTm9uZSkgfHxcbiAgICAgICAgICAgICAgICAoKF9lID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2UudGFnQ29uZGl0aW9ucykpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlRoZSBJZk1hdGNoLCBJZk5vbmVNYXRjaCBhbmQgdGFncyBhY2Nlc3MgY29uZGl0aW9ucyBhcmUgaWdub3JlZCBieSB0aGUgc2VydmljZS4gVmFsdWVzIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIHRoZWlyIGRlZmF1bHQgdmFsdWVzIGFyZSBub3QgYWNjZXB0YWJsZS5cIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iTGVhc2VDbGllbnQtcmVuZXdMZWFzZVwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb250YWluZXJPckJsb2JPcGVyYXRpb24ucmVuZXdMZWFzZSh0aGlzLl9sZWFzZUlkLCB7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVG8gZW5kIHRoZSBsZWFzZSBidXQgZW5zdXJlIHRoYXQgYW5vdGhlciBjbGllbnQgY2Fubm90IGFjcXVpcmUgYSBuZXcgbGVhc2VcbiAgICAgKiB1bnRpbCB0aGUgY3VycmVudCBsZWFzZSBwZXJpb2QgaGFzIGV4cGlyZWQuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvbGVhc2UtY29udGFpbmVyXG4gICAgICogYW5kXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvbGVhc2UtYmxvYlxuICAgICAqXG4gICAgICogQHBhcmFtIGJyZWFrUGVyaW9kIC0gQnJlYWsgcGVyaW9kXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBvcHRpb25zIHRvIGNvbmZpZ3VyZSBsZWFzZSBtYW5hZ2VtZW50IG9wZXJhdGlvbnMuXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgYnJlYWsgbGVhc2Ugb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGJyZWFrTGVhc2UoYnJlYWtQZXJpb2QsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lO1xuICAgICAgICBpZiAodGhpcy5faXNDb250YWluZXIgJiZcbiAgICAgICAgICAgICgoKChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmlmTWF0Y2gpICYmICgoX2IgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5pZk1hdGNoKSAhPT0gRVRhZ05vbmUpIHx8XG4gICAgICAgICAgICAgICAgKCgoX2MgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5pZk5vbmVNYXRjaCkgJiYgKChfZCA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLmlmTm9uZU1hdGNoKSAhPT0gRVRhZ05vbmUpIHx8XG4gICAgICAgICAgICAgICAgKChfZSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9lLnRhZ0NvbmRpdGlvbnMpKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJUaGUgSWZNYXRjaCwgSWZOb25lTWF0Y2ggYW5kIHRhZ3MgYWNjZXNzIGNvbmRpdGlvbnMgYXJlIGlnbm9yZWQgYnkgdGhlIHNlcnZpY2UuIFZhbHVlcyBvdGhlciB0aGFuIHVuZGVmaW5lZCBvciB0aGVpciBkZWZhdWx0IHZhbHVlcyBhcmUgbm90IGFjY2VwdGFibGUuXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYkxlYXNlQ2xpZW50LWJyZWFrTGVhc2VcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBjb25zdCBvcGVyYXRpb25PcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGJyZWFrUGVyaW9kLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuX2NvbnRhaW5lck9yQmxvYk9wZXJhdGlvbi5icmVha0xlYXNlKG9wZXJhdGlvbk9wdGlvbnMpKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogT05MWSBBVkFJTEFCTEUgSU4gTk9ERS5KUyBSVU5USU1FLlxuICpcbiAqIEEgTm9kZS5qcyBSZWFkYWJsZVN0cmVhbSB3aWxsIGludGVybmFsbHkgcmV0cnkgd2hlbiBpbnRlcm5hbCBSZWFkYWJsZVN0cmVhbSB1bmV4cGVjdGVkIGVuZHMuXG4gKi9cbmNsYXNzIFJldHJpYWJsZVJlYWRhYmxlU3RyZWFtIGV4dGVuZHMgc3RyZWFtLlJlYWRhYmxlIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIFJldHJpYWJsZVJlYWRhYmxlU3RyZWFtLlxuICAgICAqXG4gICAgICogQHBhcmFtIHNvdXJjZSAtIFRoZSBjdXJyZW50IFJlYWRhYmxlU3RyZWFtIHJldHVybmVkIGZyb20gZ2V0dGVyXG4gICAgICogQHBhcmFtIGdldHRlciAtIEEgbWV0aG9kIGNhbGxpbmcgZG93bmxvYWRpbmcgcmVxdWVzdCByZXR1cm5pbmdcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBuZXcgUmVhZGFibGVTdHJlYW0gZnJvbSBzcGVjaWZpZWQgb2Zmc2V0XG4gICAgICogQHBhcmFtIG9mZnNldCAtIE9mZnNldCBwb3NpdGlvbiBpbiBvcmlnaW5hbCBkYXRhIHNvdXJjZSB0byByZWFkXG4gICAgICogQHBhcmFtIGNvdW50IC0gSG93IG11Y2ggZGF0YSBpbiBvcmlnaW5hbCBkYXRhIHNvdXJjZSB0byByZWFkXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHNvdXJjZSwgZ2V0dGVyLCBvZmZzZXQsIGNvdW50LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgc3VwZXIoeyBoaWdoV2F0ZXJNYXJrOiBvcHRpb25zLmhpZ2hXYXRlck1hcmsgfSk7XG4gICAgICAgIHRoaXMucmV0cmllcyA9IDA7XG4gICAgICAgIHRoaXMuc291cmNlRGF0YUhhbmRsZXIgPSAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5kb0luamVjdEVycm9yT25jZSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5kb0luamVjdEVycm9yT25jZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB0aGlzLnNvdXJjZS5wYXVzZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc291cmNlRXJyb3JPckVuZEhhbmRsZXIoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNvdXJjZS5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXG4gICAgICAgICAgICAvLyAgIGBPZmZzZXQ6ICR7dGhpcy5vZmZzZXR9LCBSZWNlaXZlZCAke2RhdGEubGVuZ3RofSBmcm9tIGludGVybmFsIHN0cmVhbWBcbiAgICAgICAgICAgIC8vICk7XG4gICAgICAgICAgICB0aGlzLm9mZnNldCArPSBkYXRhLmxlbmd0aDtcbiAgICAgICAgICAgIGlmICh0aGlzLm9uUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uUHJvZ3Jlc3MoeyBsb2FkZWRCeXRlczogdGhpcy5vZmZzZXQgLSB0aGlzLnN0YXJ0IH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLnB1c2goZGF0YSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNvdXJjZS5wYXVzZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnNvdXJjZUFib3J0ZWRIYW5kbGVyID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYWJvcnRFcnJvciA9IG5ldyBhYm9ydENvbnRyb2xsZXIuQWJvcnRFcnJvcihcIlRoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQuXCIpO1xuICAgICAgICAgICAgdGhpcy5kZXN0cm95KGFib3J0RXJyb3IpO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLnNvdXJjZUVycm9yT3JFbmRIYW5kbGVyID0gKGVycikgPT4ge1xuICAgICAgICAgICAgaWYgKGVyciAmJiBlcnIubmFtZSA9PT0gXCJBYm9ydEVycm9yXCIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3koZXJyKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIC8vICAgYFNvdXJjZSBzdHJlYW0gZW1pdHMgZW5kIG9yIGVycm9yLCBvZmZzZXQ6ICR7XG4gICAgICAgICAgICAvLyAgICAgdGhpcy5vZmZzZXRcbiAgICAgICAgICAgIC8vICAgfSwgZGVzdCBlbmQgOiAke3RoaXMuZW5kfWBcbiAgICAgICAgICAgIC8vICk7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZVNvdXJjZUV2ZW50SGFuZGxlcnMoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLm9mZnNldCAtIDEgPT09IHRoaXMuZW5kKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wdXNoKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5vZmZzZXQgPD0gdGhpcy5lbmQpIHtcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAvLyAgIGByZXRyaWVzOiAke3RoaXMucmV0cmllc30sIG1heCByZXRyaWVzOiAke3RoaXMubWF4UmV0cmllc31gXG4gICAgICAgICAgICAgICAgLy8gKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5yZXRyaWVzIDwgdGhpcy5tYXhSZXRyeVJlcXVlc3RzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmV0cmllcyArPSAxO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldHRlcih0aGlzLm9mZnNldClcbiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKChuZXdTb3VyY2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc291cmNlID0gbmV3U291cmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTb3VyY2VFdmVudEhhbmRsZXJzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3koZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveShuZXcgRXJyb3IoYERhdGEgY29ycnVwdGlvbiBmYWlsdXJlOiByZWNlaXZlZCBsZXNzIGRhdGEgdGhhbiByZXF1aXJlZCBhbmQgcmVhY2hlZCBtYXhSZXRpcmVzIGxpbWl0YXRpb24uIFJlY2VpdmVkIGRhdGEgb2Zmc2V0OiAke3RoaXMub2Zmc2V0IC0gMX0sIGRhdGEgbmVlZGVkIG9mZnNldDogJHt0aGlzLmVuZH0sIHJldHJpZXM6ICR7dGhpcy5yZXRyaWVzfSwgbWF4IHJldHJpZXM6ICR7dGhpcy5tYXhSZXRyeVJlcXVlc3RzfWApKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3kobmV3IEVycm9yKGBEYXRhIGNvcnJ1cHRpb24gZmFpbHVyZTogUmVjZWl2ZWQgbW9yZSBkYXRhIHRoYW4gb3JpZ2luYWwgcmVxdWVzdCwgZGF0YSBuZWVkZWQgb2Zmc2V0IGlzICR7dGhpcy5lbmR9LCByZWNlaXZlZCBvZmZzZXQ6ICR7dGhpcy5vZmZzZXQgLSAxfWApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5nZXR0ZXIgPSBnZXR0ZXI7XG4gICAgICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuICAgICAgICB0aGlzLnN0YXJ0ID0gb2Zmc2V0O1xuICAgICAgICB0aGlzLm9mZnNldCA9IG9mZnNldDtcbiAgICAgICAgdGhpcy5lbmQgPSBvZmZzZXQgKyBjb3VudCAtIDE7XG4gICAgICAgIHRoaXMubWF4UmV0cnlSZXF1ZXN0cyA9XG4gICAgICAgICAgICBvcHRpb25zLm1heFJldHJ5UmVxdWVzdHMgJiYgb3B0aW9ucy5tYXhSZXRyeVJlcXVlc3RzID49IDAgPyBvcHRpb25zLm1heFJldHJ5UmVxdWVzdHMgOiAwO1xuICAgICAgICB0aGlzLm9uUHJvZ3Jlc3MgPSBvcHRpb25zLm9uUHJvZ3Jlc3M7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgIHRoaXMuc2V0U291cmNlRXZlbnRIYW5kbGVycygpO1xuICAgIH1cbiAgICBfcmVhZCgpIHtcbiAgICAgICAgdGhpcy5zb3VyY2UucmVzdW1lKCk7XG4gICAgfVxuICAgIHNldFNvdXJjZUV2ZW50SGFuZGxlcnMoKSB7XG4gICAgICAgIHRoaXMuc291cmNlLm9uKFwiZGF0YVwiLCB0aGlzLnNvdXJjZURhdGFIYW5kbGVyKTtcbiAgICAgICAgdGhpcy5zb3VyY2Uub24oXCJlbmRcIiwgdGhpcy5zb3VyY2VFcnJvck9yRW5kSGFuZGxlcik7XG4gICAgICAgIHRoaXMuc291cmNlLm9uKFwiZXJyb3JcIiwgdGhpcy5zb3VyY2VFcnJvck9yRW5kSGFuZGxlcik7XG4gICAgICAgIC8vIG5lZWRlZCBmb3IgTm9kZTE0XG4gICAgICAgIHRoaXMuc291cmNlLm9uKFwiYWJvcnRlZFwiLCB0aGlzLnNvdXJjZUFib3J0ZWRIYW5kbGVyKTtcbiAgICB9XG4gICAgcmVtb3ZlU291cmNlRXZlbnRIYW5kbGVycygpIHtcbiAgICAgICAgdGhpcy5zb3VyY2UucmVtb3ZlTGlzdGVuZXIoXCJkYXRhXCIsIHRoaXMuc291cmNlRGF0YUhhbmRsZXIpO1xuICAgICAgICB0aGlzLnNvdXJjZS5yZW1vdmVMaXN0ZW5lcihcImVuZFwiLCB0aGlzLnNvdXJjZUVycm9yT3JFbmRIYW5kbGVyKTtcbiAgICAgICAgdGhpcy5zb3VyY2UucmVtb3ZlTGlzdGVuZXIoXCJlcnJvclwiLCB0aGlzLnNvdXJjZUVycm9yT3JFbmRIYW5kbGVyKTtcbiAgICAgICAgdGhpcy5zb3VyY2UucmVtb3ZlTGlzdGVuZXIoXCJhYm9ydGVkXCIsIHRoaXMuc291cmNlQWJvcnRlZEhhbmRsZXIpO1xuICAgIH1cbiAgICBfZGVzdHJveShlcnJvciwgY2FsbGJhY2spIHtcbiAgICAgICAgLy8gcmVtb3ZlIGxpc3RlbmVyIGZyb20gc291cmNlIGFuZCByZWxlYXNlIHNvdXJjZVxuICAgICAgICB0aGlzLnJlbW92ZVNvdXJjZUV2ZW50SGFuZGxlcnMoKTtcbiAgICAgICAgdGhpcy5zb3VyY2UuZGVzdHJveSgpO1xuICAgICAgICBjYWxsYmFjayhlcnJvciA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IGVycm9yKTtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBPTkxZIEFWQUlMQUJMRSBJTiBOT0RFLkpTIFJVTlRJTUUuXG4gKlxuICogQmxvYkRvd25sb2FkUmVzcG9uc2UgaW1wbGVtZW50cyBCbG9iRG93bmxvYWRSZXNwb25zZVBhcnNlZCBpbnRlcmZhY2UsIGFuZCBpbiBOb2RlLmpzIHJ1bnRpbWUgaXQgd2lsbFxuICogYXV0b21hdGljYWxseSByZXRyeSB3aGVuIGludGVybmFsIHJlYWQgc3RyZWFtIHVuZXhwZWN0ZWQgZW5kcy4gKFRoaXMga2luZCBvZiB1bmV4cGVjdGVkIGVuZHMgY2Fubm90XG4gKiB0cmlnZ2VyIHJldHJpZXMgZGVmaW5lZCBpbiBwaXBlbGluZSByZXRyeSBwb2xpY3kuKVxuICpcbiAqIFRoZSB7QGxpbmsgcmVhZGFibGVTdHJlYW1Cb2R5fSBzdHJlYW0gd2lsbCByZXRyeSB1bmRlcmxheWVyLCB5b3UgY2FuIGp1c3QgdXNlIGl0IGFzIGEgbm9ybWFsIE5vZGUuanNcbiAqIFJlYWRhYmxlIHN0cmVhbS5cbiAqL1xuY2xhc3MgQmxvYkRvd25sb2FkUmVzcG9uc2Uge1xuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB0aGF0IHRoZSBzZXJ2aWNlIHN1cHBvcnRzXG4gICAgICogcmVxdWVzdHMgZm9yIHBhcnRpYWwgZmlsZSBjb250ZW50LlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGFjY2VwdFJhbmdlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5hY2NlcHRSYW5nZXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgaWYgaXQgd2FzIHByZXZpb3VzbHkgc3BlY2lmaWVkXG4gICAgICogZm9yIHRoZSBmaWxlLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNhY2hlQ29udHJvbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5jYWNoZUNvbnRyb2w7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHZhbHVlIHRoYXQgd2FzIHNwZWNpZmllZFxuICAgICAqIGZvciB0aGUgJ3gtbXMtY29udGVudC1kaXNwb3NpdGlvbicgaGVhZGVyIGFuZCBzcGVjaWZpZXMgaG93IHRvIHByb2Nlc3MgdGhlXG4gICAgICogcmVzcG9uc2UuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY29udGVudERpc3Bvc2l0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNvbnRlbnREaXNwb3NpdGlvbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgdmFsdWUgdGhhdCB3YXMgc3BlY2lmaWVkXG4gICAgICogZm9yIHRoZSBDb250ZW50LUVuY29kaW5nIHJlcXVlc3QgaGVhZGVyLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNvbnRlbnRFbmNvZGluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5jb250ZW50RW5jb2Rpbmc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHZhbHVlIHRoYXQgd2FzIHNwZWNpZmllZFxuICAgICAqIGZvciB0aGUgQ29udGVudC1MYW5ndWFnZSByZXF1ZXN0IGhlYWRlci5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBjb250ZW50TGFuZ3VhZ2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuY29udGVudExhbmd1YWdlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBzZXF1ZW5jZSBudW1iZXIgZm9yIGFcbiAgICAgKiBwYWdlIGJsb2IuIFRoaXMgaGVhZGVyIGlzIG5vdCByZXR1cm5lZCBmb3IgYmxvY2sgYmxvYnMgb3IgYXBwZW5kIGJsb2JzLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGJsb2JTZXF1ZW5jZU51bWJlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5ibG9iU2VxdWVuY2VOdW1iZXI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBibG9iJ3MgdHlwZS4gUG9zc2libGUgdmFsdWVzIGluY2x1ZGU6XG4gICAgICogJ0Jsb2NrQmxvYicsICdQYWdlQmxvYicsICdBcHBlbmRCbG9iJy5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBibG9iVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5ibG9iVHlwZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBieXRlcyBwcmVzZW50IGluIHRoZVxuICAgICAqIHJlc3BvbnNlIGJvZHkuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY29udGVudExlbmd0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5jb250ZW50TGVuZ3RoO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJZiB0aGUgZmlsZSBoYXMgYW4gTUQ1IGhhc2ggYW5kIHRoZVxuICAgICAqIHJlcXVlc3QgaXMgdG8gcmVhZCB0aGUgZnVsbCBmaWxlLCB0aGlzIHJlc3BvbnNlIGhlYWRlciBpcyByZXR1cm5lZCBzbyB0aGF0XG4gICAgICogdGhlIGNsaWVudCBjYW4gY2hlY2sgZm9yIG1lc3NhZ2UgY29udGVudCBpbnRlZ3JpdHkuIElmIHRoZSByZXF1ZXN0IGlzIHRvXG4gICAgICogcmVhZCBhIHNwZWNpZmllZCByYW5nZSBhbmQgdGhlICd4LW1zLXJhbmdlLWdldC1jb250ZW50LW1kNScgaXMgc2V0IHRvXG4gICAgICogdHJ1ZSwgdGhlbiB0aGUgcmVxdWVzdCByZXR1cm5zIGFuIE1ENSBoYXNoIGZvciB0aGUgcmFuZ2UsIGFzIGxvbmcgYXMgdGhlXG4gICAgICogcmFuZ2Ugc2l6ZSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gNCBNQi4gSWYgbmVpdGhlciBvZiB0aGVzZSBzZXRzIG9mXG4gICAgICogY29uZGl0aW9ucyBpcyB0cnVlLCB0aGVuIG5vIHZhbHVlIGlzIHJldHVybmVkIGZvciB0aGUgJ0NvbnRlbnQtTUQ1J1xuICAgICAqIGhlYWRlci5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBjb250ZW50TUQ1KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNvbnRlbnRNRDU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB0aGUgcmFuZ2Ugb2YgYnl0ZXMgcmV0dXJuZWQgaWZcbiAgICAgKiB0aGUgY2xpZW50IHJlcXVlc3RlZCBhIHN1YnNldCBvZiB0aGUgZmlsZSBieSBzZXR0aW5nIHRoZSBSYW5nZSByZXF1ZXN0XG4gICAgICogaGVhZGVyLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNvbnRlbnRSYW5nZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5jb250ZW50UmFuZ2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBjb250ZW50IHR5cGUgc3BlY2lmaWVkIGZvciB0aGUgZmlsZS5cbiAgICAgKiBUaGUgZGVmYXVsdCBjb250ZW50IHR5cGUgaXMgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSdcbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBjb250ZW50VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5jb250ZW50VHlwZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29uY2x1c2lvbiB0aW1lIG9mIHRoZSBsYXN0IGF0dGVtcHRlZFxuICAgICAqIENvcHkgRmlsZSBvcGVyYXRpb24gd2hlcmUgdGhpcyBmaWxlIHdhcyB0aGUgZGVzdGluYXRpb24gZmlsZS4gVGhpcyB2YWx1ZVxuICAgICAqIGNhbiBzcGVjaWZ5IHRoZSB0aW1lIG9mIGEgY29tcGxldGVkLCBhYm9ydGVkLCBvciBmYWlsZWQgY29weSBhdHRlbXB0LlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNvcHlDb21wbGV0ZWRPbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5jb3B5Q29tcGxldGVkT247XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN0cmluZyBpZGVudGlmaWVyIGZvciB0aGUgbGFzdCBhdHRlbXB0ZWQgQ29weVxuICAgICAqIEZpbGUgb3BlcmF0aW9uIHdoZXJlIHRoaXMgZmlsZSB3YXMgdGhlIGRlc3RpbmF0aW9uIGZpbGUuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY29weUlkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNvcHlJZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29udGFpbnMgdGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQgYW5kXG4gICAgICogdGhlIHRvdGFsIGJ5dGVzIGluIHRoZSBzb3VyY2UgaW4gdGhlIGxhc3QgYXR0ZW1wdGVkIENvcHkgRmlsZSBvcGVyYXRpb25cbiAgICAgKiB3aGVyZSB0aGlzIGZpbGUgd2FzIHRoZSBkZXN0aW5hdGlvbiBmaWxlLiBDYW4gc2hvdyBiZXR3ZWVuIDAgYW5kXG4gICAgICogQ29udGVudC1MZW5ndGggYnl0ZXMgY29waWVkLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNvcHlQcm9ncmVzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5jb3B5UHJvZ3Jlc3M7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFVSTCB1cCB0byAyS0IgaW4gbGVuZ3RoIHRoYXQgc3BlY2lmaWVzIHRoZVxuICAgICAqIHNvdXJjZSBmaWxlIHVzZWQgaW4gdGhlIGxhc3QgYXR0ZW1wdGVkIENvcHkgRmlsZSBvcGVyYXRpb24gd2hlcmUgdGhpcyBmaWxlXG4gICAgICogd2FzIHRoZSBkZXN0aW5hdGlvbiBmaWxlLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNvcHlTb3VyY2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuY29weVNvdXJjZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3RhdGUgb2YgdGhlIGNvcHkgb3BlcmF0aW9uXG4gICAgICogaWRlbnRpZmllZCBieSAneC1tcy1jb3B5LWlkJy4gUG9zc2libGUgdmFsdWVzIGluY2x1ZGU6ICdwZW5kaW5nJyxcbiAgICAgKiAnc3VjY2VzcycsICdhYm9ydGVkJywgJ2ZhaWxlZCdcbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBjb3B5U3RhdHVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNvcHlTdGF0dXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE9ubHkgYXBwZWFycyB3aGVuXG4gICAgICogeC1tcy1jb3B5LXN0YXR1cyBpcyBmYWlsZWQgb3IgcGVuZGluZy4gRGVzY3JpYmVzIGNhdXNlIG9mIGZhdGFsIG9yXG4gICAgICogbm9uLWZhdGFsIGNvcHkgb3BlcmF0aW9uIGZhaWx1cmUuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY29weVN0YXR1c0Rlc2NyaXB0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNvcHlTdGF0dXNEZXNjcmlwdGlvbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogV2hlbiBhIGJsb2IgaXMgbGVhc2VkLFxuICAgICAqIHNwZWNpZmllcyB3aGV0aGVyIHRoZSBsZWFzZSBpcyBvZiBpbmZpbml0ZSBvciBmaXhlZCBkdXJhdGlvbi4gUG9zc2libGVcbiAgICAgKiB2YWx1ZXMgaW5jbHVkZTogJ2luZmluaXRlJywgJ2ZpeGVkJy5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBsZWFzZUR1cmF0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmxlYXNlRHVyYXRpb247XG4gICAgfVxuICAgIC8qKlxuICAgICAqIExlYXNlIHN0YXRlIG9mIHRoZSBibG9iLiBQb3NzaWJsZVxuICAgICAqIHZhbHVlcyBpbmNsdWRlOiAnYXZhaWxhYmxlJywgJ2xlYXNlZCcsICdleHBpcmVkJywgJ2JyZWFraW5nJywgJ2Jyb2tlbicuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgbGVhc2VTdGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5sZWFzZVN0YXRlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBsZWFzZSBzdGF0dXMgb2YgdGhlXG4gICAgICogYmxvYi4gUG9zc2libGUgdmFsdWVzIGluY2x1ZGU6ICdsb2NrZWQnLCAndW5sb2NrZWQnLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGxlYXNlU3RhdHVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmxlYXNlU3RhdHVzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBIFVUQyBkYXRlL3RpbWUgdmFsdWUgZ2VuZXJhdGVkIGJ5IHRoZSBzZXJ2aWNlIHRoYXRcbiAgICAgKiBpbmRpY2F0ZXMgdGhlIHRpbWUgYXQgd2hpY2ggdGhlIHJlc3BvbnNlIHdhcyBpbml0aWF0ZWQuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgZGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5kYXRlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIGNvbW1pdHRlZCBibG9ja3NcbiAgICAgKiBwcmVzZW50IGluIHRoZSBibG9iLiBUaGlzIGhlYWRlciBpcyByZXR1cm5lZCBvbmx5IGZvciBhcHBlbmQgYmxvYnMuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgYmxvYkNvbW1pdHRlZEJsb2NrQ291bnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuYmxvYkNvbW1pdHRlZEJsb2NrQ291bnQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBFVGFnIGNvbnRhaW5zIGEgdmFsdWUgdGhhdCB5b3UgY2FuIHVzZSB0b1xuICAgICAqIHBlcmZvcm0gb3BlcmF0aW9ucyBjb25kaXRpb25hbGx5LCBpbiBxdW90ZXMuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgZXRhZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5ldGFnO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIHRhZ3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBibG9iXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgdGFnQ291bnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UudGFnQ291bnQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBlcnJvciBjb2RlLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGVycm9yQ29kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5lcnJvckNvZGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSB2YWx1ZSBvZiB0aGlzIGhlYWRlciBpcyBzZXQgdG9cbiAgICAgKiB0cnVlIGlmIHRoZSBmaWxlIGRhdGEgYW5kIGFwcGxpY2F0aW9uIG1ldGFkYXRhIGFyZSBjb21wbGV0ZWx5IGVuY3J5cHRlZFxuICAgICAqIHVzaW5nIHRoZSBzcGVjaWZpZWQgYWxnb3JpdGhtLiBPdGhlcndpc2UsIHRoZSB2YWx1ZSBpcyBzZXQgdG8gZmFsc2UgKHdoZW5cbiAgICAgKiB0aGUgZmlsZSBpcyB1bmVuY3J5cHRlZCwgb3IgaWYgb25seSBwYXJ0cyBvZiB0aGUgZmlsZS9hcHBsaWNhdGlvbiBtZXRhZGF0YVxuICAgICAqIGFyZSBlbmNyeXB0ZWQpLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGlzU2VydmVyRW5jcnlwdGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmlzU2VydmVyRW5jcnlwdGVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJZiB0aGUgYmxvYiBoYXMgYSBNRDUgaGFzaCwgYW5kIGlmXG4gICAgICogcmVxdWVzdCBjb250YWlucyByYW5nZSBoZWFkZXIgKFJhbmdlIG9yIHgtbXMtcmFuZ2UpLCB0aGlzIHJlc3BvbnNlIGhlYWRlclxuICAgICAqIGlzIHJldHVybmVkIHdpdGggdGhlIHZhbHVlIG9mIHRoZSB3aG9sZSBibG9iJ3MgTUQ1IHZhbHVlLiBUaGlzIHZhbHVlIG1heVxuICAgICAqIG9yIG1heSBub3QgYmUgZXF1YWwgdG8gdGhlIHZhbHVlIHJldHVybmVkIGluIENvbnRlbnQtTUQ1IGhlYWRlciwgd2l0aCB0aGVcbiAgICAgKiBsYXR0ZXIgY2FsY3VsYXRlZCBmcm9tIHRoZSByZXF1ZXN0ZWQgcmFuZ2UuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgYmxvYkNvbnRlbnRNRDUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuYmxvYkNvbnRlbnRNRDU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGRhdGUgYW5kIHRpbWUgdGhlIGZpbGUgd2FzIGxhc3RcbiAgICAgKiBtb2RpZmllZC4gQW55IG9wZXJhdGlvbiB0aGF0IG1vZGlmaWVzIHRoZSBmaWxlIG9yIGl0cyBwcm9wZXJ0aWVzIHVwZGF0ZXNcbiAgICAgKiB0aGUgbGFzdCBtb2RpZmllZCB0aW1lLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGxhc3RNb2RpZmllZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5sYXN0TW9kaWZpZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIFVUQyBkYXRlIGFuZCB0aW1lIGdlbmVyYXRlZCBieSB0aGUgc2VydmljZSB0aGF0IGluZGljYXRlcyB0aGUgdGltZSBhdCB3aGljaCB0aGUgYmxvYiB3YXNcbiAgICAgKiBsYXN0IHJlYWQgb3Igd3JpdHRlbiB0by5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBsYXN0QWNjZXNzZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UubGFzdEFjY2Vzc2VkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBkYXRlIGFuZCB0aW1lIHRoZSBibG9iIHdhcyBjcmVhdGVkLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNyZWF0ZWRPbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5jcmVhdGVkT247XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEEgbmFtZS12YWx1ZSBwYWlyXG4gICAgICogdG8gYXNzb2NpYXRlIHdpdGggYSBmaWxlIHN0b3JhZ2Ugb2JqZWN0LlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IG1ldGFkYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLm1ldGFkYXRhO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGlzIGhlYWRlciB1bmlxdWVseSBpZGVudGlmaWVzIHRoZSByZXF1ZXN0XG4gICAgICogdGhhdCB3YXMgbWFkZSBhbmQgY2FuIGJlIHVzZWQgZm9yIHRyb3VibGVzaG9vdGluZyB0aGUgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCByZXF1ZXN0SWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UucmVxdWVzdElkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJZiBhIGNsaWVudCByZXF1ZXN0IGlkIGhlYWRlciBpcyBzZW50IGluIHRoZSByZXF1ZXN0LCB0aGlzIGhlYWRlciB3aWxsIGJlIHByZXNlbnQgaW4gdGhlXG4gICAgICogcmVzcG9uc2Ugd2l0aCB0aGUgc2FtZSB2YWx1ZS5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBjbGllbnRSZXF1ZXN0SWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuY2xpZW50UmVxdWVzdElkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgdGhlIHZlcnNpb24gb2YgdGhlIEJsb2Igc2VydmljZSB1c2VkXG4gICAgICogdG8gZXhlY3V0ZSB0aGUgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCB2ZXJzaW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLnZlcnNpb247XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB0aGUgdmVyc2lvbklkIG9mIHRoZSBkb3dubG9hZGVkIGJsb2IgdmVyc2lvbi5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCB2ZXJzaW9uSWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UudmVyc2lvbklkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB2ZXJzaW9uIG9mIHRoaXMgYmxvYiBpcyBhIGN1cnJlbnQgdmVyc2lvbi5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBpc0N1cnJlbnRWZXJzaW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmlzQ3VycmVudFZlcnNpb247XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBTSEEtMjU2IGhhc2ggb2YgdGhlIGVuY3J5cHRpb24ga2V5IHVzZWQgdG8gZW5jcnlwdCB0aGUgYmxvYi4gVGhpcyB2YWx1ZSBpcyBvbmx5IHJldHVybmVkXG4gICAgICogd2hlbiB0aGUgYmxvYiB3YXMgZW5jcnlwdGVkIHdpdGggYSBjdXN0b21lci1wcm92aWRlZCBrZXkuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgZW5jcnlwdGlvbktleVNoYTI1NigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5lbmNyeXB0aW9uS2V5U2hhMjU2O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJZiB0aGUgcmVxdWVzdCBpcyB0byByZWFkIGEgc3BlY2lmaWVkIHJhbmdlIGFuZCB0aGUgeC1tcy1yYW5nZS1nZXQtY29udGVudC1jcmM2NCBpcyBzZXQgdG9cbiAgICAgKiB0cnVlLCB0aGVuIHRoZSByZXF1ZXN0IHJldHVybnMgYSBjcmM2NCBmb3IgdGhlIHJhbmdlLCBhcyBsb25nIGFzIHRoZSByYW5nZSBzaXplIGlzIGxlc3MgdGhhblxuICAgICAqIG9yIGVxdWFsIHRvIDQgTUIuIElmIGJvdGggeC1tcy1yYW5nZS1nZXQtY29udGVudC1jcmM2NCAmIHgtbXMtcmFuZ2UtZ2V0LWNvbnRlbnQtbWQ1IGlzXG4gICAgICogc3BlY2lmaWVkIGluIHRoZSBzYW1lIHJlcXVlc3QsIGl0IHdpbGwgZmFpbCB3aXRoIDQwMChCYWQgUmVxdWVzdClcbiAgICAgKi9cbiAgICBnZXQgY29udGVudENyYzY0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNvbnRlbnRDcmM2NDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogT2JqZWN0IFJlcGxpY2F0aW9uIFBvbGljeSBJZCBvZiB0aGUgZGVzdGluYXRpb24gYmxvYi5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBvYmplY3RSZXBsaWNhdGlvbkRlc3RpbmF0aW9uUG9saWN5SWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2Uub2JqZWN0UmVwbGljYXRpb25EZXN0aW5hdGlvblBvbGljeUlkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQYXJzZWQgT2JqZWN0IFJlcGxpY2F0aW9uIFBvbGljeSBJZCwgUnVsZSBJZChzKSBhbmQgc3RhdHVzIG9mIHRoZSBzb3VyY2UgYmxvYi5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBvYmplY3RSZXBsaWNhdGlvblNvdXJjZVByb3BlcnRpZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2Uub2JqZWN0UmVwbGljYXRpb25Tb3VyY2VQcm9wZXJ0aWVzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJZiB0aGlzIGJsb2IgaGFzIGJlZW4gc2VhbGVkLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGlzU2VhbGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmlzU2VhbGVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBVVEMgZGF0ZS90aW1lIHZhbHVlIGdlbmVyYXRlZCBieSB0aGUgc2VydmljZSB0aGF0IGluZGljYXRlcyB0aGUgdGltZSBhdCB3aGljaCB0aGUgYmxvYiBpbW11dGFiaWxpdHkgcG9saWN5IHdpbGwgZXhwaXJlLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGltbXV0YWJpbGl0eVBvbGljeUV4cGlyZXNPbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5pbW11dGFiaWxpdHlQb2xpY3lFeHBpcmVzT247XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyBpbW11dGFiaWxpdHkgcG9saWN5IG1vZGUuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgaW1tdXRhYmlsaXR5UG9saWN5TW9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5pbW11dGFiaWxpdHlQb2xpY3lNb2RlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgYSBsZWdhbCBob2xkIGlzIHByZXNlbnQgb24gdGhlIGJsb2IuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgbGVnYWxIb2xkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmxlZ2FsSG9sZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIHJlc3BvbnNlIGJvZHkgYXMgYSBicm93c2VyIEJsb2IuXG4gICAgICogQWx3YXlzIHVuZGVmaW5lZCBpbiBub2RlLmpzLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNvbnRlbnRBc0Jsb2IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuYmxvYkJvZHk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSByZXNwb25zZSBib2R5IGFzIGEgbm9kZS5qcyBSZWFkYWJsZSBzdHJlYW0uXG4gICAgICogQWx3YXlzIHVuZGVmaW5lZCBpbiB0aGUgYnJvd3Nlci5cbiAgICAgKlxuICAgICAqIEl0IHdpbGwgYXV0b21hdGljYWxseSByZXRyeSB3aGVuIGludGVybmFsIHJlYWQgc3RyZWFtIHVuZXhwZWN0ZWQgZW5kcy5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCByZWFkYWJsZVN0cmVhbUJvZHkoKSB7XG4gICAgICAgIHJldHVybiBjb3JlVXRpbC5pc05vZGUgPyB0aGlzLmJsb2JEb3dubG9hZFN0cmVhbSA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIEhUVFAgcmVzcG9uc2UuXG4gICAgICovXG4gICAgZ2V0IF9yZXNwb25zZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5fcmVzcG9uc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgQmxvYkRvd25sb2FkUmVzcG9uc2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3JpZ2luYWxSZXNwb25zZSAtXG4gICAgICogQHBhcmFtIGdldHRlciAtXG4gICAgICogQHBhcmFtIG9mZnNldCAtXG4gICAgICogQHBhcmFtIGNvdW50IC1cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtXG4gICAgICovXG4gICAgY29uc3RydWN0b3Iob3JpZ2luYWxSZXNwb25zZSwgZ2V0dGVyLCBvZmZzZXQsIGNvdW50LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgdGhpcy5vcmlnaW5hbFJlc3BvbnNlID0gb3JpZ2luYWxSZXNwb25zZTtcbiAgICAgICAgdGhpcy5ibG9iRG93bmxvYWRTdHJlYW0gPSBuZXcgUmV0cmlhYmxlUmVhZGFibGVTdHJlYW0odGhpcy5vcmlnaW5hbFJlc3BvbnNlLnJlYWRhYmxlU3RyZWFtQm9keSwgZ2V0dGVyLCBvZmZzZXQsIGNvdW50LCBvcHRpb25zKTtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuY29uc3QgQVZST19TWU5DX01BUktFUl9TSVpFID0gMTY7XG5jb25zdCBBVlJPX0lOSVRfQllURVMgPSBuZXcgVWludDhBcnJheShbNzksIDk4LCAxMDYsIDFdKTtcbmNvbnN0IEFWUk9fQ09ERUNfS0VZID0gXCJhdnJvLmNvZGVjXCI7XG5jb25zdCBBVlJPX1NDSEVNQV9LRVkgPSBcImF2cm8uc2NoZW1hXCI7XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuY2xhc3MgQXZyb1BhcnNlciB7XG4gICAgLyoqXG4gICAgICogUmVhZHMgYSBmaXhlZCBudW1iZXIgb2YgYnl0ZXMgZnJvbSB0aGUgc3RyZWFtLlxuICAgICAqXG4gICAgICogQHBhcmFtIHN0cmVhbSAtXG4gICAgICogQHBhcmFtIGxlbmd0aCAtXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLVxuICAgICAqL1xuICAgIHN0YXRpYyBhc3luYyByZWFkRml4ZWRCeXRlcyhzdHJlYW0sIGxlbmd0aCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IGJ5dGVzID0gYXdhaXQgc3RyZWFtLnJlYWQobGVuZ3RoLCB7IGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsIH0pO1xuICAgICAgICBpZiAoYnl0ZXMubGVuZ3RoICE9PSBsZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkhpdCBzdHJlYW0gZW5kLlwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYnl0ZXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWRzIGEgc2luZ2xlIGJ5dGUgZnJvbSB0aGUgc3RyZWFtLlxuICAgICAqXG4gICAgICogQHBhcmFtIHN0cmVhbSAtXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLVxuICAgICAqL1xuICAgIHN0YXRpYyBhc3luYyByZWFkQnl0ZShzdHJlYW0sIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCBidWYgPSBhd2FpdCBBdnJvUGFyc2VyLnJlYWRGaXhlZEJ5dGVzKHN0cmVhbSwgMSwgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBidWZbMF07XG4gICAgfVxuICAgIC8vIGludCBhbmQgbG9uZyBhcmUgc3RvcmVkIGluIHZhcmlhYmxlLWxlbmd0aCB6aWctemFnIGNvZGluZy5cbiAgICAvLyB2YXJpYWJsZS1sZW5ndGg6IGh0dHBzOi8vbHVjZW5lLmFwYWNoZS5vcmcvY29yZS8zXzVfMC9maWxlZm9ybWF0cy5odG1sI1ZJbnRcbiAgICAvLyB6aWctemFnOiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzL2RvY3MvZW5jb2Rpbmc/Y3N3PTEjdHlwZXNcbiAgICBzdGF0aWMgYXN5bmMgcmVhZFppZ1phZ0xvbmcoc3RyZWFtLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgbGV0IHppZ1phZ0VuY29kZWQgPSAwO1xuICAgICAgICBsZXQgc2lnbmlmaWNhbmNlSW5CaXQgPSAwO1xuICAgICAgICBsZXQgYnl0ZSwgaGF2ZU1vcmVCeXRlLCBzaWduaWZpY2FuY2VJbkZsb2F0O1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICBieXRlID0gYXdhaXQgQXZyb1BhcnNlci5yZWFkQnl0ZShzdHJlYW0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgaGF2ZU1vcmVCeXRlID0gYnl0ZSAmIDB4ODA7XG4gICAgICAgICAgICB6aWdaYWdFbmNvZGVkIHw9IChieXRlICYgMHg3ZikgPDwgc2lnbmlmaWNhbmNlSW5CaXQ7XG4gICAgICAgICAgICBzaWduaWZpY2FuY2VJbkJpdCArPSA3O1xuICAgICAgICB9IHdoaWxlIChoYXZlTW9yZUJ5dGUgJiYgc2lnbmlmaWNhbmNlSW5CaXQgPCAyOCk7IC8vIGJpdHdpc2Ugb3BlcmF0aW9uIG9ubHkgd29ya3MgZm9yIDMyLWJpdCBpbnRlZ2Vyc1xuICAgICAgICBpZiAoaGF2ZU1vcmVCeXRlKSB7XG4gICAgICAgICAgICAvLyBTd2l0Y2ggdG8gZmxvYXQgYXJpdGhtZXRpY1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtYXNzaWduXG4gICAgICAgICAgICB6aWdaYWdFbmNvZGVkID0gemlnWmFnRW5jb2RlZDtcbiAgICAgICAgICAgIHNpZ25pZmljYW5jZUluRmxvYXQgPSAyNjg0MzU0NTY7IC8vIDIgKiogMjguXG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgYnl0ZSA9IGF3YWl0IEF2cm9QYXJzZXIucmVhZEJ5dGUoc3RyZWFtLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICB6aWdaYWdFbmNvZGVkICs9IChieXRlICYgMHg3ZikgKiBzaWduaWZpY2FuY2VJbkZsb2F0O1xuICAgICAgICAgICAgICAgIHNpZ25pZmljYW5jZUluRmxvYXQgKj0gMTI4OyAvLyAyICoqIDdcbiAgICAgICAgICAgIH0gd2hpbGUgKGJ5dGUgJiAweDgwKTtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9ICh6aWdaYWdFbmNvZGVkICUgMiA/IC0oemlnWmFnRW5jb2RlZCArIDEpIDogemlnWmFnRW5jb2RlZCkgLyAyO1xuICAgICAgICAgICAgaWYgKHJlcyA8IE51bWJlci5NSU5fU0FGRV9JTlRFR0VSIHx8IHJlcyA+IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW50ZWdlciBvdmVyZmxvdy5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoemlnWmFnRW5jb2RlZCA+PiAxKSBeIC0oemlnWmFnRW5jb2RlZCAmIDEpO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgcmVhZExvbmcoc3RyZWFtLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIEF2cm9QYXJzZXIucmVhZFppZ1phZ0xvbmcoc3RyZWFtLCBvcHRpb25zKTtcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIHJlYWRJbnQoc3RyZWFtLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIEF2cm9QYXJzZXIucmVhZFppZ1phZ0xvbmcoc3RyZWFtLCBvcHRpb25zKTtcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIHJlYWROdWxsKCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIHJlYWRCb29sZWFuKHN0cmVhbSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IGIgPSBhd2FpdCBBdnJvUGFyc2VyLnJlYWRCeXRlKHN0cmVhbSwgb3B0aW9ucyk7XG4gICAgICAgIGlmIChiID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChiID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCeXRlIHdhcyBub3QgYSBib29sZWFuLlwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgcmVhZEZsb2F0KHN0cmVhbSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHU4YXJyID0gYXdhaXQgQXZyb1BhcnNlci5yZWFkRml4ZWRCeXRlcyhzdHJlYW0sIDQsIG9wdGlvbnMpO1xuICAgICAgICBjb25zdCB2aWV3ID0gbmV3IERhdGFWaWV3KHU4YXJyLmJ1ZmZlciwgdThhcnIuYnl0ZU9mZnNldCwgdThhcnIuYnl0ZUxlbmd0aCk7XG4gICAgICAgIHJldHVybiB2aWV3LmdldEZsb2F0MzIoMCwgdHJ1ZSk7IC8vIGxpdHRsZUVuZGlhbiA9IHRydWVcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIHJlYWREb3VibGUoc3RyZWFtLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgdThhcnIgPSBhd2FpdCBBdnJvUGFyc2VyLnJlYWRGaXhlZEJ5dGVzKHN0cmVhbSwgOCwgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHZpZXcgPSBuZXcgRGF0YVZpZXcodThhcnIuYnVmZmVyLCB1OGFyci5ieXRlT2Zmc2V0LCB1OGFyci5ieXRlTGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIHZpZXcuZ2V0RmxvYXQ2NCgwLCB0cnVlKTsgLy8gbGl0dGxlRW5kaWFuID0gdHJ1ZVxuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgcmVhZEJ5dGVzKHN0cmVhbSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHNpemUgPSBhd2FpdCBBdnJvUGFyc2VyLnJlYWRMb25nKHN0cmVhbSwgb3B0aW9ucyk7XG4gICAgICAgIGlmIChzaXplIDwgMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQnl0ZXMgc2l6ZSB3YXMgbmVnYXRpdmUuXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdHJlYW0ucmVhZChzaXplLCB7IGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsIH0pO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgcmVhZFN0cmluZyhzdHJlYW0sIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCB1OGFyciA9IGF3YWl0IEF2cm9QYXJzZXIucmVhZEJ5dGVzKHN0cmVhbSwgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHV0ZjhkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCk7XG4gICAgICAgIHJldHVybiB1dGY4ZGVjb2Rlci5kZWNvZGUodThhcnIpO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgcmVhZE1hcFBhaXIoc3RyZWFtLCByZWFkSXRlbU1ldGhvZCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IEF2cm9QYXJzZXIucmVhZFN0cmluZyhzdHJlYW0sIG9wdGlvbnMpO1xuICAgICAgICAvLyBGVVRVUkU6IHRoaXMgd29uJ3Qgd29yayB3aXRoIHJlYWRGaXhlZCAoY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQpIHdoaWNoIG5lZWRzIGEgbGVuZ3RoIGFzIHRoZSBwYXJhbWV0ZXIuXG4gICAgICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgcmVhZEl0ZW1NZXRob2Qoc3RyZWFtLCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHsga2V5LCB2YWx1ZSB9O1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgcmVhZE1hcChzdHJlYW0sIHJlYWRJdGVtTWV0aG9kLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgcmVhZFBhaXJNZXRob2QgPSAocywgb3B0cyA9IHt9KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gQXZyb1BhcnNlci5yZWFkTWFwUGFpcihzLCByZWFkSXRlbU1ldGhvZCwgb3B0cyk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHBhaXJzID0gYXdhaXQgQXZyb1BhcnNlci5yZWFkQXJyYXkoc3RyZWFtLCByZWFkUGFpck1ldGhvZCwgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGRpY3QgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBwYWlyIG9mIHBhaXJzKSB7XG4gICAgICAgICAgICBkaWN0W3BhaXIua2V5XSA9IHBhaXIudmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRpY3Q7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyByZWFkQXJyYXkoc3RyZWFtLCByZWFkSXRlbU1ldGhvZCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gW107XG4gICAgICAgIGZvciAobGV0IGNvdW50ID0gYXdhaXQgQXZyb1BhcnNlci5yZWFkTG9uZyhzdHJlYW0sIG9wdGlvbnMpOyBjb3VudCAhPT0gMDsgY291bnQgPSBhd2FpdCBBdnJvUGFyc2VyLnJlYWRMb25nKHN0cmVhbSwgb3B0aW9ucykpIHtcbiAgICAgICAgICAgIGlmIChjb3VudCA8IDApIHtcbiAgICAgICAgICAgICAgICAvLyBJZ25vcmUgYmxvY2sgc2l6ZXNcbiAgICAgICAgICAgICAgICBhd2FpdCBBdnJvUGFyc2VyLnJlYWRMb25nKHN0cmVhbSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgY291bnQgPSAtY291bnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3aGlsZSAoY291bnQtLSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBhd2FpdCByZWFkSXRlbU1ldGhvZChzdHJlYW0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH1cbn1cbnZhciBBdnJvQ29tcGxleDtcbihmdW5jdGlvbiAoQXZyb0NvbXBsZXgpIHtcbiAgICBBdnJvQ29tcGxleFtcIlJFQ09SRFwiXSA9IFwicmVjb3JkXCI7XG4gICAgQXZyb0NvbXBsZXhbXCJFTlVNXCJdID0gXCJlbnVtXCI7XG4gICAgQXZyb0NvbXBsZXhbXCJBUlJBWVwiXSA9IFwiYXJyYXlcIjtcbiAgICBBdnJvQ29tcGxleFtcIk1BUFwiXSA9IFwibWFwXCI7XG4gICAgQXZyb0NvbXBsZXhbXCJVTklPTlwiXSA9IFwidW5pb25cIjtcbiAgICBBdnJvQ29tcGxleFtcIkZJWEVEXCJdID0gXCJmaXhlZFwiO1xufSkoQXZyb0NvbXBsZXggfHwgKEF2cm9Db21wbGV4ID0ge30pKTtcbnZhciBBdnJvUHJpbWl0aXZlO1xuKGZ1bmN0aW9uIChBdnJvUHJpbWl0aXZlKSB7XG4gICAgQXZyb1ByaW1pdGl2ZVtcIk5VTExcIl0gPSBcIm51bGxcIjtcbiAgICBBdnJvUHJpbWl0aXZlW1wiQk9PTEVBTlwiXSA9IFwiYm9vbGVhblwiO1xuICAgIEF2cm9QcmltaXRpdmVbXCJJTlRcIl0gPSBcImludFwiO1xuICAgIEF2cm9QcmltaXRpdmVbXCJMT05HXCJdID0gXCJsb25nXCI7XG4gICAgQXZyb1ByaW1pdGl2ZVtcIkZMT0FUXCJdID0gXCJmbG9hdFwiO1xuICAgIEF2cm9QcmltaXRpdmVbXCJET1VCTEVcIl0gPSBcImRvdWJsZVwiO1xuICAgIEF2cm9QcmltaXRpdmVbXCJCWVRFU1wiXSA9IFwiYnl0ZXNcIjtcbiAgICBBdnJvUHJpbWl0aXZlW1wiU1RSSU5HXCJdID0gXCJzdHJpbmdcIjtcbn0pKEF2cm9QcmltaXRpdmUgfHwgKEF2cm9QcmltaXRpdmUgPSB7fSkpO1xuY2xhc3MgQXZyb1R5cGUge1xuICAgIC8qKlxuICAgICAqIERldGVybWluZXMgdGhlIEF2cm9UeXBlIGZyb20gdGhlIEF2cm8gU2NoZW1hLlxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8td3JhcHBlci1vYmplY3QtdHlwZXNcbiAgICBzdGF0aWMgZnJvbVNjaGVtYShzY2hlbWEpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBBdnJvVHlwZS5mcm9tU3RyaW5nU2NoZW1hKHNjaGVtYSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShzY2hlbWEpKSB7XG4gICAgICAgICAgICByZXR1cm4gQXZyb1R5cGUuZnJvbUFycmF5U2NoZW1hKHNjaGVtYSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gQXZyb1R5cGUuZnJvbU9iamVjdFNjaGVtYShzY2hlbWEpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBmcm9tU3RyaW5nU2NoZW1hKHNjaGVtYSkge1xuICAgICAgICBzd2l0Y2ggKHNjaGVtYSkge1xuICAgICAgICAgICAgY2FzZSBBdnJvUHJpbWl0aXZlLk5VTEw6XG4gICAgICAgICAgICBjYXNlIEF2cm9QcmltaXRpdmUuQk9PTEVBTjpcbiAgICAgICAgICAgIGNhc2UgQXZyb1ByaW1pdGl2ZS5JTlQ6XG4gICAgICAgICAgICBjYXNlIEF2cm9QcmltaXRpdmUuTE9ORzpcbiAgICAgICAgICAgIGNhc2UgQXZyb1ByaW1pdGl2ZS5GTE9BVDpcbiAgICAgICAgICAgIGNhc2UgQXZyb1ByaW1pdGl2ZS5ET1VCTEU6XG4gICAgICAgICAgICBjYXNlIEF2cm9QcmltaXRpdmUuQllURVM6XG4gICAgICAgICAgICBjYXNlIEF2cm9QcmltaXRpdmUuU1RSSU5HOlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQXZyb1ByaW1pdGl2ZVR5cGUoc2NoZW1hKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIEF2cm8gdHlwZSAke3NjaGVtYX1gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgZnJvbUFycmF5U2NoZW1hKHNjaGVtYSkge1xuICAgICAgICByZXR1cm4gbmV3IEF2cm9VbmlvblR5cGUoc2NoZW1hLm1hcChBdnJvVHlwZS5mcm9tU2NoZW1hKSk7XG4gICAgfVxuICAgIHN0YXRpYyBmcm9tT2JqZWN0U2NoZW1hKHNjaGVtYSkge1xuICAgICAgICBjb25zdCB0eXBlID0gc2NoZW1hLnR5cGU7XG4gICAgICAgIC8vIFByaW1pdGl2ZXMgY2FuIGJlIGRlZmluZWQgYXMgc3RyaW5ncyBvciBvYmplY3RzXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gQXZyb1R5cGUuZnJvbVN0cmluZ1NjaGVtYSh0eXBlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoX2EpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgQXZyb0NvbXBsZXguUkVDT1JEOlxuICAgICAgICAgICAgICAgIGlmIChzY2hlbWEuYWxpYXNlcykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGFsaWFzZXMgY3VycmVudGx5IGlzIG5vdCBzdXBwb3J0ZWQsIHNjaGVtYTogJHtzY2hlbWF9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghc2NoZW1hLm5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBSZXF1aXJlZCBhdHRyaWJ1dGUgJ25hbWUnIGRvZXNuJ3QgZXhpc3Qgb24gc2NoZW1hOiAke3NjaGVtYX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNhc2UtZGVjbGFyYXRpb25zXG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGRzID0ge307XG4gICAgICAgICAgICAgICAgaWYgKCFzY2hlbWEuZmllbGRzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUmVxdWlyZWQgYXR0cmlidXRlICdmaWVsZHMnIGRvZXNuJ3QgZXhpc3Qgb24gc2NoZW1hOiAke3NjaGVtYX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBzY2hlbWEuZmllbGRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkc1tmaWVsZC5uYW1lXSA9IEF2cm9UeXBlLmZyb21TY2hlbWEoZmllbGQudHlwZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQXZyb1JlY29yZFR5cGUoZmllbGRzLCBzY2hlbWEubmFtZSk7XG4gICAgICAgICAgICBjYXNlIEF2cm9Db21wbGV4LkVOVU06XG4gICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5hbGlhc2VzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgYWxpYXNlcyBjdXJyZW50bHkgaXMgbm90IHN1cHBvcnRlZCwgc2NoZW1hOiAke3NjaGVtYX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFzY2hlbWEuc3ltYm9scykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFJlcXVpcmVkIGF0dHJpYnV0ZSAnc3ltYm9scycgZG9lc24ndCBleGlzdCBvbiBzY2hlbWE6ICR7c2NoZW1hfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEF2cm9FbnVtVHlwZShzY2hlbWEuc3ltYm9scyk7XG4gICAgICAgICAgICBjYXNlIEF2cm9Db21wbGV4Lk1BUDpcbiAgICAgICAgICAgICAgICBpZiAoIXNjaGVtYS52YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBSZXF1aXJlZCBhdHRyaWJ1dGUgJ3ZhbHVlcycgZG9lc24ndCBleGlzdCBvbiBzY2hlbWE6ICR7c2NoZW1hfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEF2cm9NYXBUeXBlKEF2cm9UeXBlLmZyb21TY2hlbWEoc2NoZW1hLnZhbHVlcykpO1xuICAgICAgICAgICAgY2FzZSBBdnJvQ29tcGxleC5BUlJBWTogLy8gVW51c2VkIHRvZGF5XG4gICAgICAgICAgICBjYXNlIEF2cm9Db21wbGV4LkZJWEVEOiAvLyBVbnVzZWQgdG9kYXlcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIEF2cm8gdHlwZSAke3R5cGV9IGluICR7c2NoZW1hfWApO1xuICAgICAgICB9XG4gICAgfVxufVxuY2xhc3MgQXZyb1ByaW1pdGl2ZVR5cGUgZXh0ZW5kcyBBdnJvVHlwZSB7XG4gICAgY29uc3RydWN0b3IocHJpbWl0aXZlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuX3ByaW1pdGl2ZSA9IHByaW1pdGl2ZTtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby13cmFwcGVyLW9iamVjdC10eXBlc1xuICAgIHJlYWQoc3RyZWFtLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgc3dpdGNoICh0aGlzLl9wcmltaXRpdmUpIHtcbiAgICAgICAgICAgIGNhc2UgQXZyb1ByaW1pdGl2ZS5OVUxMOlxuICAgICAgICAgICAgICAgIHJldHVybiBBdnJvUGFyc2VyLnJlYWROdWxsKCk7XG4gICAgICAgICAgICBjYXNlIEF2cm9QcmltaXRpdmUuQk9PTEVBTjpcbiAgICAgICAgICAgICAgICByZXR1cm4gQXZyb1BhcnNlci5yZWFkQm9vbGVhbihzdHJlYW0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgY2FzZSBBdnJvUHJpbWl0aXZlLklOVDpcbiAgICAgICAgICAgICAgICByZXR1cm4gQXZyb1BhcnNlci5yZWFkSW50KHN0cmVhbSwgb3B0aW9ucyk7XG4gICAgICAgICAgICBjYXNlIEF2cm9QcmltaXRpdmUuTE9ORzpcbiAgICAgICAgICAgICAgICByZXR1cm4gQXZyb1BhcnNlci5yZWFkTG9uZyhzdHJlYW0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgY2FzZSBBdnJvUHJpbWl0aXZlLkZMT0FUOlxuICAgICAgICAgICAgICAgIHJldHVybiBBdnJvUGFyc2VyLnJlYWRGbG9hdChzdHJlYW0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgY2FzZSBBdnJvUHJpbWl0aXZlLkRPVUJMRTpcbiAgICAgICAgICAgICAgICByZXR1cm4gQXZyb1BhcnNlci5yZWFkRG91YmxlKHN0cmVhbSwgb3B0aW9ucyk7XG4gICAgICAgICAgICBjYXNlIEF2cm9QcmltaXRpdmUuQllURVM6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEF2cm9QYXJzZXIucmVhZEJ5dGVzKHN0cmVhbSwgb3B0aW9ucyk7XG4gICAgICAgICAgICBjYXNlIEF2cm9QcmltaXRpdmUuU1RSSU5HOlxuICAgICAgICAgICAgICAgIHJldHVybiBBdnJvUGFyc2VyLnJlYWRTdHJpbmcoc3RyZWFtLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBBdnJvIFByaW1pdGl2ZVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmNsYXNzIEF2cm9FbnVtVHlwZSBleHRlbmRzIEF2cm9UeXBlIHtcbiAgICBjb25zdHJ1Y3RvcihzeW1ib2xzKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuX3N5bWJvbHMgPSBzeW1ib2xzO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXdyYXBwZXItb2JqZWN0LXR5cGVzXG4gICAgYXN5bmMgcmVhZChzdHJlYW0sIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IEF2cm9QYXJzZXIucmVhZEludChzdHJlYW0sIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gdGhpcy5fc3ltYm9sc1t2YWx1ZV07XG4gICAgfVxufVxuY2xhc3MgQXZyb1VuaW9uVHlwZSBleHRlbmRzIEF2cm9UeXBlIHtcbiAgICBjb25zdHJ1Y3Rvcih0eXBlcykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLl90eXBlcyA9IHR5cGVzO1xuICAgIH1cbiAgICBhc3luYyByZWFkKHN0cmVhbSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHR5cGVJbmRleCA9IGF3YWl0IEF2cm9QYXJzZXIucmVhZEludChzdHJlYW0sIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gdGhpcy5fdHlwZXNbdHlwZUluZGV4XS5yZWFkKHN0cmVhbSwgb3B0aW9ucyk7XG4gICAgfVxufVxuY2xhc3MgQXZyb01hcFR5cGUgZXh0ZW5kcyBBdnJvVHlwZSB7XG4gICAgY29uc3RydWN0b3IoaXRlbVR5cGUpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5faXRlbVR5cGUgPSBpdGVtVHlwZTtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby13cmFwcGVyLW9iamVjdC10eXBlc1xuICAgIHJlYWQoc3RyZWFtLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgcmVhZEl0ZW1NZXRob2QgPSAocywgb3B0cykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2l0ZW1UeXBlLnJlYWQocywgb3B0cyk7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBBdnJvUGFyc2VyLnJlYWRNYXAoc3RyZWFtLCByZWFkSXRlbU1ldGhvZCwgb3B0aW9ucyk7XG4gICAgfVxufVxuY2xhc3MgQXZyb1JlY29yZFR5cGUgZXh0ZW5kcyBBdnJvVHlwZSB7XG4gICAgY29uc3RydWN0b3IoZmllbGRzLCBuYW1lKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuX2ZpZWxkcyA9IGZpZWxkcztcbiAgICAgICAgdGhpcy5fbmFtZSA9IG5hbWU7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8td3JhcHBlci1vYmplY3QtdHlwZXNcbiAgICBhc3luYyByZWFkKHN0cmVhbSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8td3JhcHBlci1vYmplY3QtdHlwZXNcbiAgICAgICAgY29uc3QgcmVjb3JkID0ge307XG4gICAgICAgIHJlY29yZFtcIiRzY2hlbWFcIl0gPSB0aGlzLl9uYW1lO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLl9maWVsZHMpIHtcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5fZmllbGRzLCBrZXkpKSB7XG4gICAgICAgICAgICAgICAgcmVjb3JkW2tleV0gPSBhd2FpdCB0aGlzLl9maWVsZHNba2V5XS5yZWFkKHN0cmVhbSwgb3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlY29yZDtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuZnVuY3Rpb24gYXJyYXlzRXF1YWwoYSwgYikge1xuICAgIGlmIChhID09PSBiKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG4gICAgaWYgKGEgPT0gbnVsbCB8fCBiID09IG51bGwpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChhW2ldICE9PSBiW2ldKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5jbGFzcyBBdnJvUmVhZGVyIHtcbiAgICBnZXQgYmxvY2tPZmZzZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ibG9ja09mZnNldDtcbiAgICB9XG4gICAgZ2V0IG9iamVjdEluZGV4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fb2JqZWN0SW5kZXg7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKGRhdGFTdHJlYW0sIGhlYWRlclN0cmVhbSwgY3VycmVudEJsb2NrT2Zmc2V0LCBpbmRleFdpdGhpbkN1cnJlbnRCbG9jaykge1xuICAgICAgICB0aGlzLl9kYXRhU3RyZWFtID0gZGF0YVN0cmVhbTtcbiAgICAgICAgdGhpcy5faGVhZGVyU3RyZWFtID0gaGVhZGVyU3RyZWFtIHx8IGRhdGFTdHJlYW07XG4gICAgICAgIHRoaXMuX2luaXRpYWxpemVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2Jsb2NrT2Zmc2V0ID0gY3VycmVudEJsb2NrT2Zmc2V0IHx8IDA7XG4gICAgICAgIHRoaXMuX29iamVjdEluZGV4ID0gaW5kZXhXaXRoaW5DdXJyZW50QmxvY2sgfHwgMDtcbiAgICAgICAgdGhpcy5faW5pdGlhbEJsb2NrT2Zmc2V0ID0gY3VycmVudEJsb2NrT2Zmc2V0IHx8IDA7XG4gICAgfVxuICAgIGFzeW5jIGluaXRpYWxpemUob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IGhlYWRlciA9IGF3YWl0IEF2cm9QYXJzZXIucmVhZEZpeGVkQnl0ZXModGhpcy5faGVhZGVyU3RyZWFtLCBBVlJPX0lOSVRfQllURVMubGVuZ3RoLCB7XG4gICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghYXJyYXlzRXF1YWwoaGVhZGVyLCBBVlJPX0lOSVRfQllURVMpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTdHJlYW0gaXMgbm90IGFuIEF2cm8gZmlsZS5cIik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRmlsZSBtZXRhZGF0YSBpcyB3cml0dGVuIGFzIGlmIGRlZmluZWQgYnkgdGhlIGZvbGxvd2luZyBtYXAgc2NoZW1hOlxuICAgICAgICAvLyB7IFwidHlwZVwiOiBcIm1hcFwiLCBcInZhbHVlc1wiOiBcImJ5dGVzXCJ9XG4gICAgICAgIHRoaXMuX21ldGFkYXRhID0gYXdhaXQgQXZyb1BhcnNlci5yZWFkTWFwKHRoaXMuX2hlYWRlclN0cmVhbSwgQXZyb1BhcnNlci5yZWFkU3RyaW5nLCB7XG4gICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIFZhbGlkYXRlIGNvZGVjXG4gICAgICAgIGNvbnN0IGNvZGVjID0gdGhpcy5fbWV0YWRhdGFbQVZST19DT0RFQ19LRVldO1xuICAgICAgICBpZiAoIShjb2RlYyA9PT0gdW5kZWZpbmVkIHx8IGNvZGVjID09PSBudWxsIHx8IGNvZGVjID09PSBcIm51bGxcIikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvZGVjcyBhcmUgbm90IHN1cHBvcnRlZFwiKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUaGUgMTYtYnl0ZSwgcmFuZG9tbHktZ2VuZXJhdGVkIHN5bmMgbWFya2VyIGZvciB0aGlzIGZpbGUuXG4gICAgICAgIHRoaXMuX3N5bmNNYXJrZXIgPSBhd2FpdCBBdnJvUGFyc2VyLnJlYWRGaXhlZEJ5dGVzKHRoaXMuX2hlYWRlclN0cmVhbSwgQVZST19TWU5DX01BUktFUl9TSVpFLCB7XG4gICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIFBhcnNlIHRoZSBzY2hlbWFcbiAgICAgICAgY29uc3Qgc2NoZW1hID0gSlNPTi5wYXJzZSh0aGlzLl9tZXRhZGF0YVtBVlJPX1NDSEVNQV9LRVldKTtcbiAgICAgICAgdGhpcy5faXRlbVR5cGUgPSBBdnJvVHlwZS5mcm9tU2NoZW1hKHNjaGVtYSk7XG4gICAgICAgIGlmICh0aGlzLl9ibG9ja09mZnNldCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5fYmxvY2tPZmZzZXQgPSB0aGlzLl9pbml0aWFsQmxvY2tPZmZzZXQgKyB0aGlzLl9kYXRhU3RyZWFtLnBvc2l0aW9uO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2l0ZW1zUmVtYWluaW5nSW5CbG9jayA9IGF3YWl0IEF2cm9QYXJzZXIucmVhZExvbmcodGhpcy5fZGF0YVN0cmVhbSwge1xuICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBza2lwIGJsb2NrIGxlbmd0aFxuICAgICAgICBhd2FpdCBBdnJvUGFyc2VyLnJlYWRMb25nKHRoaXMuX2RhdGFTdHJlYW0sIHsgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwgfSk7XG4gICAgICAgIHRoaXMuX2luaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMuX29iamVjdEluZGV4ICYmIHRoaXMuX29iamVjdEluZGV4ID4gMCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9vYmplY3RJbmRleDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5faXRlbVR5cGUucmVhZCh0aGlzLl9kYXRhU3RyZWFtLCB7IGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuX2l0ZW1zUmVtYWluaW5nSW5CbG9jay0tO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGhhc05leHQoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5faW5pdGlhbGl6ZWQgfHwgdGhpcy5faXRlbXNSZW1haW5pbmdJbkJsb2NrID4gMDtcbiAgICB9XG4gICAgcGFyc2VPYmplY3RzKCkge1xuICAgICAgICByZXR1cm4gdHNsaWIuX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKiBwYXJzZU9iamVjdHNfMShvcHRpb25zID0ge30pIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5faW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgICAgICB5aWVsZCB0c2xpYi5fX2F3YWl0KHRoaXMuaW5pdGlhbGl6ZShvcHRpb25zKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3aGlsZSAodGhpcy5oYXNOZXh0KCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSB5aWVsZCB0c2xpYi5fX2F3YWl0KHRoaXMuX2l0ZW1UeXBlLnJlYWQodGhpcy5fZGF0YVN0cmVhbSwge1xuICAgICAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgdGhpcy5faXRlbXNSZW1haW5pbmdJbkJsb2NrLS07XG4gICAgICAgICAgICAgICAgdGhpcy5fb2JqZWN0SW5kZXgrKztcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5faXRlbXNSZW1haW5pbmdJbkJsb2NrID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcmtlciA9IHlpZWxkIHRzbGliLl9fYXdhaXQoQXZyb1BhcnNlci5yZWFkRml4ZWRCeXRlcyh0aGlzLl9kYXRhU3RyZWFtLCBBVlJPX1NZTkNfTUFSS0VSX1NJWkUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Jsb2NrT2Zmc2V0ID0gdGhpcy5faW5pdGlhbEJsb2NrT2Zmc2V0ICsgdGhpcy5fZGF0YVN0cmVhbS5wb3NpdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fb2JqZWN0SW5kZXggPSAwO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWFycmF5c0VxdWFsKHRoaXMuX3N5bmNNYXJrZXIsIG1hcmtlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlN0cmVhbSBpcyBub3QgYSB2YWxpZCBBdnJvIGZpbGUuXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pdGVtc1JlbWFpbmluZ0luQmxvY2sgPSB5aWVsZCB0c2xpYi5fX2F3YWl0KEF2cm9QYXJzZXIucmVhZExvbmcodGhpcy5fZGF0YVN0cmVhbSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChfYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGl0IHRoZSBlbmQgb2YgdGhlIHN0cmVhbS5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2l0ZW1zUmVtYWluaW5nSW5CbG9jayA9IDA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2l0ZW1zUmVtYWluaW5nSW5CbG9jayA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElnbm9yZSBibG9jayBzaXplXG4gICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCB0c2xpYi5fX2F3YWl0KEF2cm9QYXJzZXIucmVhZExvbmcodGhpcy5fZGF0YVN0cmVhbSwgeyBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCB9KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgeWllbGQgeWllbGQgdHNsaWIuX19hd2FpdChyZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuY2xhc3MgQXZyb1JlYWRhYmxlIHtcbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5jb25zdCBBQk9SVF9FUlJPUiA9IG5ldyBhYm9ydENvbnRyb2xsZXIuQWJvcnRFcnJvcihcIlJlYWRpbmcgZnJvbSB0aGUgYXZybyBzdHJlYW0gd2FzIGFib3J0ZWQuXCIpO1xuY2xhc3MgQXZyb1JlYWRhYmxlRnJvbVN0cmVhbSBleHRlbmRzIEF2cm9SZWFkYWJsZSB7XG4gICAgdG9VaW50OEFycmF5KGRhdGEpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKHJlYWRhYmxlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuX3JlYWRhYmxlID0gcmVhZGFibGU7XG4gICAgICAgIHRoaXMuX3Bvc2l0aW9uID0gMDtcbiAgICB9XG4gICAgZ2V0IHBvc2l0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcG9zaXRpb247XG4gICAgfVxuICAgIGFzeW5jIHJlYWQoc2l6ZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKChfYSA9IG9wdGlvbnMuYWJvcnRTaWduYWwpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5hYm9ydGVkKSB7XG4gICAgICAgICAgICB0aHJvdyBBQk9SVF9FUlJPUjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2l6ZSA8IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgc2l6ZSBwYXJhbWV0ZXIgc2hvdWxkIGJlIHBvc2l0aXZlOiAke3NpemV9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNpemUgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5fcmVhZGFibGUucmVhZGFibGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlN0cmVhbSBubyBsb25nZXIgcmVhZGFibGUuXCIpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNlZSBpZiB0aGVyZSBpcyBhbHJlYWR5IGVub3VnaCBkYXRhLlxuICAgICAgICBjb25zdCBjaHVuayA9IHRoaXMuX3JlYWRhYmxlLnJlYWQoc2l6ZSk7XG4gICAgICAgIGlmIChjaHVuaykge1xuICAgICAgICAgICAgdGhpcy5fcG9zaXRpb24gKz0gY2h1bmsubGVuZ3RoO1xuICAgICAgICAgICAgLy8gY2h1bmsubGVuZ3RoIG1heWJlIGxlc3MgdGhhbiBkZXNpcmVkIHNpemUgaWYgdGhlIHN0cmVhbSBlbmRzLlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9VaW50OEFycmF5KGNodW5rKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIHJlZ2lzdGVyIGNhbGxiYWNrIHRvIHdhaXQgZm9yIGVub3VnaCBkYXRhIHRvIHJlYWRcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVzZS1iZWZvcmUtZGVmaW5lICovXG4gICAgICAgICAgICAgICAgY29uc3QgY2xlYW5VcCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZGFibGUucmVtb3ZlTGlzdGVuZXIoXCJyZWFkYWJsZVwiLCByZWFkYWJsZUNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZGFibGUucmVtb3ZlTGlzdGVuZXIoXCJlcnJvclwiLCByZWplY3RDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRhYmxlLnJlbW92ZUxpc3RlbmVyKFwiZW5kXCIsIHJlamVjdENhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZGFibGUucmVtb3ZlTGlzdGVuZXIoXCJjbG9zZVwiLCByZWplY3RDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmFib3J0U2lnbmFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmFib3J0U2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBhYm9ydEhhbmRsZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb25zdCByZWFkYWJsZUNhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYWxsYmFja0NodW5rID0gdGhpcy5fcmVhZGFibGUucmVhZChzaXplKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrQ2h1bmspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Bvc2l0aW9uICs9IGNhbGxiYWNrQ2h1bmsubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYW5VcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FsbGJhY2tDaHVuay5sZW5ndGggbWF5YmUgbGVzcyB0aGFuIGRlc2lyZWQgc2l6ZSBpZiB0aGUgc3RyZWFtIGVuZHMuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMudG9VaW50OEFycmF5KGNhbGxiYWNrQ2h1bmspKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY29uc3QgcmVqZWN0Q2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFuVXAoKTtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb25zdCBhYm9ydEhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFuVXAoKTtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KEFCT1JUX0VSUk9SKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRhYmxlLm9uKFwicmVhZGFibGVcIiwgcmVhZGFibGVDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVhZGFibGUub25jZShcImVycm9yXCIsIHJlamVjdENhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWFkYWJsZS5vbmNlKFwiZW5kXCIsIHJlamVjdENhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWFkYWJsZS5vbmNlKFwiY2xvc2VcIiwgcmVqZWN0Q2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmFib3J0U2lnbmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuYWJvcnRTaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIGFib3J0SGFuZGxlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVzZS1iZWZvcmUtZGVmaW5lICovXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIE9OTFkgQVZBSUxBQkxFIElOIE5PREUuSlMgUlVOVElNRS5cbiAqXG4gKiBBIE5vZGUuanMgQmxvYlF1aWNrUXVlcnlTdHJlYW0gd2lsbCBpbnRlcm5hbGx5IHBhcnNlIGF2cm8gZGF0YSBzdHJlYW0gZm9yIGJsb2IgcXVlcnkuXG4gKi9cbmNsYXNzIEJsb2JRdWlja1F1ZXJ5U3RyZWFtIGV4dGVuZHMgc3RyZWFtLlJlYWRhYmxlIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIEJsb2JRdWlja1F1ZXJ5U3RyZWFtLlxuICAgICAqXG4gICAgICogQHBhcmFtIHNvdXJjZSAtIFRoZSBjdXJyZW50IFJlYWRhYmxlU3RyZWFtIHJldHVybmVkIGZyb20gZ2V0dGVyXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHNvdXJjZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuYXZyb1BhdXNlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuICAgICAgICB0aGlzLm9uUHJvZ3Jlc3MgPSBvcHRpb25zLm9uUHJvZ3Jlc3M7XG4gICAgICAgIHRoaXMub25FcnJvciA9IG9wdGlvbnMub25FcnJvcjtcbiAgICAgICAgdGhpcy5hdnJvUmVhZGVyID0gbmV3IEF2cm9SZWFkZXIobmV3IEF2cm9SZWFkYWJsZUZyb21TdHJlYW0odGhpcy5zb3VyY2UpKTtcbiAgICAgICAgdGhpcy5hdnJvSXRlciA9IHRoaXMuYXZyb1JlYWRlci5wYXJzZU9iamVjdHMoeyBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCB9KTtcbiAgICB9XG4gICAgX3JlYWQoKSB7XG4gICAgICAgIGlmICh0aGlzLmF2cm9QYXVzZWQpIHtcbiAgICAgICAgICAgIHRoaXMucmVhZEludGVybmFsKCkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdChcImVycm9yXCIsIGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyByZWFkSW50ZXJuYWwoKSB7XG4gICAgICAgIHRoaXMuYXZyb1BhdXNlZCA9IGZhbHNlO1xuICAgICAgICBsZXQgYXZyb05leHQ7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGF2cm9OZXh0ID0gYXdhaXQgdGhpcy5hdnJvSXRlci5uZXh0KCk7XG4gICAgICAgICAgICBpZiAoYXZyb05leHQuZG9uZSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgb2JqID0gYXZyb05leHQudmFsdWU7XG4gICAgICAgICAgICBjb25zdCBzY2hlbWEgPSBvYmouJHNjaGVtYTtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJNaXNzaW5nIHNjaGVtYSBpbiBhdnJvIHJlY29yZC5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzd2l0Y2ggKHNjaGVtYSkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJjb20ubWljcm9zb2Z0LmF6dXJlLnN0b3JhZ2UucXVlcnlCbG9iQ29udGVudHMucmVzdWx0RGF0YVwiOlxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gb2JqLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJJbnZhbGlkIGRhdGEgaW4gYXZybyByZXN1bHQgcmVjb3JkLlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5wdXNoKEJ1ZmZlci5mcm9tKGRhdGEpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXZyb1BhdXNlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImNvbS5taWNyb3NvZnQuYXp1cmUuc3RvcmFnZS5xdWVyeUJsb2JDb250ZW50cy5wcm9ncmVzc1wiOlxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBieXRlc1NjYW5uZWQgPSBvYmouYnl0ZXNTY2FubmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBieXRlc1NjYW5uZWQgIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcIkludmFsaWQgYnl0ZXNTY2FubmVkIGluIGF2cm8gcHJvZ3Jlc3MgcmVjb3JkLlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9uUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uUHJvZ3Jlc3MoeyBsb2FkZWRCeXRlczogYnl0ZXNTY2FubmVkIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJjb20ubWljcm9zb2Z0LmF6dXJlLnN0b3JhZ2UucXVlcnlCbG9iQ29udGVudHMuZW5kXCI6XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9uUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRvdGFsQnl0ZXMgPSBvYmoudG90YWxCeXRlcztcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdG90YWxCeXRlcyAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFwiSW52YWxpZCB0b3RhbEJ5dGVzIGluIGF2cm8gZW5kIHJlY29yZC5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uUHJvZ3Jlc3MoeyBsb2FkZWRCeXRlczogdG90YWxCeXRlcyB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnB1c2gobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJjb20ubWljcm9zb2Z0LmF6dXJlLnN0b3JhZ2UucXVlcnlCbG9iQ29udGVudHMuZXJyb3JcIjpcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub25FcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmF0YWwgPSBvYmouZmF0YWw7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZhdGFsICE9PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFwiSW52YWxpZCBmYXRhbCBpbiBhdnJvIGVycm9yIHJlY29yZC5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuYW1lID0gb2JqLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG5hbWUgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcIkludmFsaWQgbmFtZSBpbiBhdnJvIGVycm9yIHJlY29yZC5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZXNjcmlwdGlvbiA9IG9iai5kZXNjcmlwdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZGVzY3JpcHRpb24gIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcIkludmFsaWQgZGVzY3JpcHRpb24gaW4gYXZybyBlcnJvciByZWNvcmQuXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcG9zaXRpb24gPSBvYmoucG9zaXRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHBvc2l0aW9uICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJJbnZhbGlkIHBvc2l0aW9uIGluIGF2cm8gZXJyb3IgcmVjb3JkLlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25FcnJvcih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0ZhdGFsOiBmYXRhbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKGBVbmtub3duIHNjaGVtYSAke3NjaGVtYX0gaW4gYXZybyBwcm9ncmVzcyByZWNvcmQuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gd2hpbGUgKCFhdnJvTmV4dC5kb25lICYmICF0aGlzLmF2cm9QYXVzZWQpO1xuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIE9OTFkgQVZBSUxBQkxFIElOIE5PREUuSlMgUlVOVElNRS5cbiAqXG4gKiBCbG9iUXVlcnlSZXNwb25zZSBpbXBsZW1lbnRzIEJsb2JEb3dubG9hZFJlc3BvbnNlTW9kZWwgaW50ZXJmYWNlLCBhbmQgaW4gTm9kZS5qcyBydW50aW1lIGl0IHdpbGxcbiAqIHBhcnNlIGF2b3IgZGF0YSByZXR1cm5lZCBieSBibG9iIHF1ZXJ5LlxuICovXG5jbGFzcyBCbG9iUXVlcnlSZXNwb25zZSB7XG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHRoYXQgdGhlIHNlcnZpY2Ugc3VwcG9ydHNcbiAgICAgKiByZXF1ZXN0cyBmb3IgcGFydGlhbCBmaWxlIGNvbnRlbnQuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgYWNjZXB0UmFuZ2VzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmFjY2VwdFJhbmdlcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBpZiBpdCB3YXMgcHJldmlvdXNseSBzcGVjaWZpZWRcbiAgICAgKiBmb3IgdGhlIGZpbGUuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY2FjaGVDb250cm9sKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNhY2hlQ29udHJvbDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgdmFsdWUgdGhhdCB3YXMgc3BlY2lmaWVkXG4gICAgICogZm9yIHRoZSAneC1tcy1jb250ZW50LWRpc3Bvc2l0aW9uJyBoZWFkZXIgYW5kIHNwZWNpZmllcyBob3cgdG8gcHJvY2VzcyB0aGVcbiAgICAgKiByZXNwb25zZS5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBjb250ZW50RGlzcG9zaXRpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuY29udGVudERpc3Bvc2l0aW9uO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSB0aGF0IHdhcyBzcGVjaWZpZWRcbiAgICAgKiBmb3IgdGhlIENvbnRlbnQtRW5jb2RpbmcgcmVxdWVzdCBoZWFkZXIuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY29udGVudEVuY29kaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNvbnRlbnRFbmNvZGluZztcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgdmFsdWUgdGhhdCB3YXMgc3BlY2lmaWVkXG4gICAgICogZm9yIHRoZSBDb250ZW50LUxhbmd1YWdlIHJlcXVlc3QgaGVhZGVyLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNvbnRlbnRMYW5ndWFnZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5jb250ZW50TGFuZ3VhZ2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IHNlcXVlbmNlIG51bWJlciBmb3IgYVxuICAgICAqIHBhZ2UgYmxvYi4gVGhpcyBoZWFkZXIgaXMgbm90IHJldHVybmVkIGZvciBibG9jayBibG9icyBvciBhcHBlbmQgYmxvYnMuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgYmxvYlNlcXVlbmNlTnVtYmVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmJsb2JTZXF1ZW5jZU51bWJlcjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGJsb2IncyB0eXBlLiBQb3NzaWJsZSB2YWx1ZXMgaW5jbHVkZTpcbiAgICAgKiAnQmxvY2tCbG9iJywgJ1BhZ2VCbG9iJywgJ0FwcGVuZEJsb2InLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGJsb2JUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmJsb2JUeXBlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIHByZXNlbnQgaW4gdGhlXG4gICAgICogcmVzcG9uc2UgYm9keS5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBjb250ZW50TGVuZ3RoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNvbnRlbnRMZW5ndGg7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElmIHRoZSBmaWxlIGhhcyBhbiBNRDUgaGFzaCBhbmQgdGhlXG4gICAgICogcmVxdWVzdCBpcyB0byByZWFkIHRoZSBmdWxsIGZpbGUsIHRoaXMgcmVzcG9uc2UgaGVhZGVyIGlzIHJldHVybmVkIHNvIHRoYXRcbiAgICAgKiB0aGUgY2xpZW50IGNhbiBjaGVjayBmb3IgbWVzc2FnZSBjb250ZW50IGludGVncml0eS4gSWYgdGhlIHJlcXVlc3QgaXMgdG9cbiAgICAgKiByZWFkIGEgc3BlY2lmaWVkIHJhbmdlIGFuZCB0aGUgJ3gtbXMtcmFuZ2UtZ2V0LWNvbnRlbnQtbWQ1JyBpcyBzZXQgdG9cbiAgICAgKiB0cnVlLCB0aGVuIHRoZSByZXF1ZXN0IHJldHVybnMgYW4gTUQ1IGhhc2ggZm9yIHRoZSByYW5nZSwgYXMgbG9uZyBhcyB0aGVcbiAgICAgKiByYW5nZSBzaXplIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byA0IE1CLiBJZiBuZWl0aGVyIG9mIHRoZXNlIHNldHMgb2ZcbiAgICAgKiBjb25kaXRpb25zIGlzIHRydWUsIHRoZW4gbm8gdmFsdWUgaXMgcmV0dXJuZWQgZm9yIHRoZSAnQ29udGVudC1NRDUnXG4gICAgICogaGVhZGVyLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNvbnRlbnRNRDUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuY29udGVudE1ENTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHRoZSByYW5nZSBvZiBieXRlcyByZXR1cm5lZCBpZlxuICAgICAqIHRoZSBjbGllbnQgcmVxdWVzdGVkIGEgc3Vic2V0IG9mIHRoZSBmaWxlIGJ5IHNldHRpbmcgdGhlIFJhbmdlIHJlcXVlc3RcbiAgICAgKiBoZWFkZXIuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY29udGVudFJhbmdlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNvbnRlbnRSYW5nZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGNvbnRlbnQgdHlwZSBzcGVjaWZpZWQgZm9yIHRoZSBmaWxlLlxuICAgICAqIFRoZSBkZWZhdWx0IGNvbnRlbnQgdHlwZSBpcyAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJ1xuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNvbnRlbnRUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNvbnRlbnRUeXBlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb25jbHVzaW9uIHRpbWUgb2YgdGhlIGxhc3QgYXR0ZW1wdGVkXG4gICAgICogQ29weSBGaWxlIG9wZXJhdGlvbiB3aGVyZSB0aGlzIGZpbGUgd2FzIHRoZSBkZXN0aW5hdGlvbiBmaWxlLiBUaGlzIHZhbHVlXG4gICAgICogY2FuIHNwZWNpZnkgdGhlIHRpbWUgb2YgYSBjb21wbGV0ZWQsIGFib3J0ZWQsIG9yIGZhaWxlZCBjb3B5IGF0dGVtcHQuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY29weUNvbXBsZXRlZE9uKCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTdHJpbmcgaWRlbnRpZmllciBmb3IgdGhlIGxhc3QgYXR0ZW1wdGVkIENvcHlcbiAgICAgKiBGaWxlIG9wZXJhdGlvbiB3aGVyZSB0aGlzIGZpbGUgd2FzIHRoZSBkZXN0aW5hdGlvbiBmaWxlLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNvcHlJZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5jb3B5SWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbnRhaW5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgY29waWVkIGFuZFxuICAgICAqIHRoZSB0b3RhbCBieXRlcyBpbiB0aGUgc291cmNlIGluIHRoZSBsYXN0IGF0dGVtcHRlZCBDb3B5IEZpbGUgb3BlcmF0aW9uXG4gICAgICogd2hlcmUgdGhpcyBmaWxlIHdhcyB0aGUgZGVzdGluYXRpb24gZmlsZS4gQ2FuIHNob3cgYmV0d2VlbiAwIGFuZFxuICAgICAqIENvbnRlbnQtTGVuZ3RoIGJ5dGVzIGNvcGllZC5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBjb3B5UHJvZ3Jlc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuY29weVByb2dyZXNzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBVUkwgdXAgdG8gMktCIGluIGxlbmd0aCB0aGF0IHNwZWNpZmllcyB0aGVcbiAgICAgKiBzb3VyY2UgZmlsZSB1c2VkIGluIHRoZSBsYXN0IGF0dGVtcHRlZCBDb3B5IEZpbGUgb3BlcmF0aW9uIHdoZXJlIHRoaXMgZmlsZVxuICAgICAqIHdhcyB0aGUgZGVzdGluYXRpb24gZmlsZS5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBjb3B5U291cmNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNvcHlTb3VyY2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN0YXRlIG9mIHRoZSBjb3B5IG9wZXJhdGlvblxuICAgICAqIGlkZW50aWZpZWQgYnkgJ3gtbXMtY29weS1pZCcuIFBvc3NpYmxlIHZhbHVlcyBpbmNsdWRlOiAncGVuZGluZycsXG4gICAgICogJ3N1Y2Nlc3MnLCAnYWJvcnRlZCcsICdmYWlsZWQnXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY29weVN0YXR1cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5jb3B5U3RhdHVzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBPbmx5IGFwcGVhcnMgd2hlblxuICAgICAqIHgtbXMtY29weS1zdGF0dXMgaXMgZmFpbGVkIG9yIHBlbmRpbmcuIERlc2NyaWJlcyBjYXVzZSBvZiBmYXRhbCBvclxuICAgICAqIG5vbi1mYXRhbCBjb3B5IG9wZXJhdGlvbiBmYWlsdXJlLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNvcHlTdGF0dXNEZXNjcmlwdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5jb3B5U3RhdHVzRGVzY3JpcHRpb247XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdoZW4gYSBibG9iIGlzIGxlYXNlZCxcbiAgICAgKiBzcGVjaWZpZXMgd2hldGhlciB0aGUgbGVhc2UgaXMgb2YgaW5maW5pdGUgb3IgZml4ZWQgZHVyYXRpb24uIFBvc3NpYmxlXG4gICAgICogdmFsdWVzIGluY2x1ZGU6ICdpbmZpbml0ZScsICdmaXhlZCcuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgbGVhc2VEdXJhdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5sZWFzZUR1cmF0aW9uO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBMZWFzZSBzdGF0ZSBvZiB0aGUgYmxvYi4gUG9zc2libGVcbiAgICAgKiB2YWx1ZXMgaW5jbHVkZTogJ2F2YWlsYWJsZScsICdsZWFzZWQnLCAnZXhwaXJlZCcsICdicmVha2luZycsICdicm9rZW4nLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGxlYXNlU3RhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UubGVhc2VTdGF0ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgbGVhc2Ugc3RhdHVzIG9mIHRoZVxuICAgICAqIGJsb2IuIFBvc3NpYmxlIHZhbHVlcyBpbmNsdWRlOiAnbG9ja2VkJywgJ3VubG9ja2VkJy5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBsZWFzZVN0YXR1cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5sZWFzZVN0YXR1cztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQSBVVEMgZGF0ZS90aW1lIHZhbHVlIGdlbmVyYXRlZCBieSB0aGUgc2VydmljZSB0aGF0XG4gICAgICogaW5kaWNhdGVzIHRoZSB0aW1lIGF0IHdoaWNoIHRoZSByZXNwb25zZSB3YXMgaW5pdGlhdGVkLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGRhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuZGF0ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBjb21taXR0ZWQgYmxvY2tzXG4gICAgICogcHJlc2VudCBpbiB0aGUgYmxvYi4gVGhpcyBoZWFkZXIgaXMgcmV0dXJuZWQgb25seSBmb3IgYXBwZW5kIGJsb2JzLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGJsb2JDb21taXR0ZWRCbG9ja0NvdW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmJsb2JDb21taXR0ZWRCbG9ja0NvdW50O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgRVRhZyBjb250YWlucyBhIHZhbHVlIHRoYXQgeW91IGNhbiB1c2UgdG9cbiAgICAgKiBwZXJmb3JtIG9wZXJhdGlvbnMgY29uZGl0aW9uYWxseSwgaW4gcXVvdGVzLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGV0YWcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuZXRhZztcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGVycm9yIGNvZGUuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgZXJyb3JDb2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmVycm9yQ29kZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIHZhbHVlIG9mIHRoaXMgaGVhZGVyIGlzIHNldCB0b1xuICAgICAqIHRydWUgaWYgdGhlIGZpbGUgZGF0YSBhbmQgYXBwbGljYXRpb24gbWV0YWRhdGEgYXJlIGNvbXBsZXRlbHkgZW5jcnlwdGVkXG4gICAgICogdXNpbmcgdGhlIHNwZWNpZmllZCBhbGdvcml0aG0uIE90aGVyd2lzZSwgdGhlIHZhbHVlIGlzIHNldCB0byBmYWxzZSAod2hlblxuICAgICAqIHRoZSBmaWxlIGlzIHVuZW5jcnlwdGVkLCBvciBpZiBvbmx5IHBhcnRzIG9mIHRoZSBmaWxlL2FwcGxpY2F0aW9uIG1ldGFkYXRhXG4gICAgICogYXJlIGVuY3J5cHRlZCkuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgaXNTZXJ2ZXJFbmNyeXB0ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuaXNTZXJ2ZXJFbmNyeXB0ZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElmIHRoZSBibG9iIGhhcyBhIE1ENSBoYXNoLCBhbmQgaWZcbiAgICAgKiByZXF1ZXN0IGNvbnRhaW5zIHJhbmdlIGhlYWRlciAoUmFuZ2Ugb3IgeC1tcy1yYW5nZSksIHRoaXMgcmVzcG9uc2UgaGVhZGVyXG4gICAgICogaXMgcmV0dXJuZWQgd2l0aCB0aGUgdmFsdWUgb2YgdGhlIHdob2xlIGJsb2IncyBNRDUgdmFsdWUuIFRoaXMgdmFsdWUgbWF5XG4gICAgICogb3IgbWF5IG5vdCBiZSBlcXVhbCB0byB0aGUgdmFsdWUgcmV0dXJuZWQgaW4gQ29udGVudC1NRDUgaGVhZGVyLCB3aXRoIHRoZVxuICAgICAqIGxhdHRlciBjYWxjdWxhdGVkIGZyb20gdGhlIHJlcXVlc3RlZCByYW5nZS5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBibG9iQ29udGVudE1ENSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5ibG9iQ29udGVudE1ENTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZGF0ZSBhbmQgdGltZSB0aGUgZmlsZSB3YXMgbGFzdFxuICAgICAqIG1vZGlmaWVkLiBBbnkgb3BlcmF0aW9uIHRoYXQgbW9kaWZpZXMgdGhlIGZpbGUgb3IgaXRzIHByb3BlcnRpZXMgdXBkYXRlc1xuICAgICAqIHRoZSBsYXN0IG1vZGlmaWVkIHRpbWUuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgbGFzdE1vZGlmaWVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmxhc3RNb2RpZmllZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQSBuYW1lLXZhbHVlIHBhaXJcbiAgICAgKiB0byBhc3NvY2lhdGUgd2l0aCBhIGZpbGUgc3RvcmFnZSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgbWV0YWRhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UubWV0YWRhdGE7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoaXMgaGVhZGVyIHVuaXF1ZWx5IGlkZW50aWZpZXMgdGhlIHJlcXVlc3RcbiAgICAgKiB0aGF0IHdhcyBtYWRlIGFuZCBjYW4gYmUgdXNlZCBmb3IgdHJvdWJsZXNob290aW5nIHRoZSByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IHJlcXVlc3RJZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5yZXF1ZXN0SWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElmIGEgY2xpZW50IHJlcXVlc3QgaWQgaGVhZGVyIGlzIHNlbnQgaW4gdGhlIHJlcXVlc3QsIHRoaXMgaGVhZGVyIHdpbGwgYmUgcHJlc2VudCBpbiB0aGVcbiAgICAgKiByZXNwb25zZSB3aXRoIHRoZSBzYW1lIHZhbHVlLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNsaWVudFJlcXVlc3RJZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5jbGllbnRSZXF1ZXN0SWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB0aGUgdmVyc2lvbiBvZiB0aGUgRmlsZSBzZXJ2aWNlIHVzZWRcbiAgICAgKiB0byBleGVjdXRlIHRoZSByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IHZlcnNpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UudmVyc2lvbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIFNIQS0yNTYgaGFzaCBvZiB0aGUgZW5jcnlwdGlvbiBrZXkgdXNlZCB0byBlbmNyeXB0IHRoZSBibG9iLiBUaGlzIHZhbHVlIGlzIG9ubHkgcmV0dXJuZWRcbiAgICAgKiB3aGVuIHRoZSBibG9iIHdhcyBlbmNyeXB0ZWQgd2l0aCBhIGN1c3RvbWVyLXByb3ZpZGVkIGtleS5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBlbmNyeXB0aW9uS2V5U2hhMjU2KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmVuY3J5cHRpb25LZXlTaGEyNTY7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElmIHRoZSByZXF1ZXN0IGlzIHRvIHJlYWQgYSBzcGVjaWZpZWQgcmFuZ2UgYW5kIHRoZSB4LW1zLXJhbmdlLWdldC1jb250ZW50LWNyYzY0IGlzIHNldCB0b1xuICAgICAqIHRydWUsIHRoZW4gdGhlIHJlcXVlc3QgcmV0dXJucyBhIGNyYzY0IGZvciB0aGUgcmFuZ2UsIGFzIGxvbmcgYXMgdGhlIHJhbmdlIHNpemUgaXMgbGVzcyB0aGFuXG4gICAgICogb3IgZXF1YWwgdG8gNCBNQi4gSWYgYm90aCB4LW1zLXJhbmdlLWdldC1jb250ZW50LWNyYzY0ICYgeC1tcy1yYW5nZS1nZXQtY29udGVudC1tZDUgaXNcbiAgICAgKiBzcGVjaWZpZWQgaW4gdGhlIHNhbWUgcmVxdWVzdCwgaXQgd2lsbCBmYWlsIHdpdGggNDAwKEJhZCBSZXF1ZXN0KVxuICAgICAqL1xuICAgIGdldCBjb250ZW50Q3JjNjQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuY29udGVudENyYzY0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzcG9uc2UgYm9keSBhcyBhIGJyb3dzZXIgQmxvYi5cbiAgICAgKiBBbHdheXMgdW5kZWZpbmVkIGluIG5vZGUuanMuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgYmxvYkJvZHkoKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSByZXNwb25zZSBib2R5IGFzIGEgbm9kZS5qcyBSZWFkYWJsZSBzdHJlYW0uXG4gICAgICogQWx3YXlzIHVuZGVmaW5lZCBpbiB0aGUgYnJvd3Nlci5cbiAgICAgKlxuICAgICAqIEl0IHdpbGwgcGFyc2UgYXZvciBkYXRhIHJldHVybmVkIGJ5IGJsb2IgcXVlcnkuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgcmVhZGFibGVTdHJlYW1Cb2R5KCkge1xuICAgICAgICByZXR1cm4gY29yZVV0aWwuaXNOb2RlID8gdGhpcy5ibG9iRG93bmxvYWRTdHJlYW0gOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBIVFRQIHJlc3BvbnNlLlxuICAgICAqL1xuICAgIGdldCBfcmVzcG9uc2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuX3Jlc3BvbnNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIEJsb2JRdWVyeVJlc3BvbnNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9yaWdpbmFsUmVzcG9uc2UgLVxuICAgICAqIEBwYXJhbSBvcHRpb25zIC1cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihvcmlnaW5hbFJlc3BvbnNlLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgdGhpcy5vcmlnaW5hbFJlc3BvbnNlID0gb3JpZ2luYWxSZXNwb25zZTtcbiAgICAgICAgdGhpcy5ibG9iRG93bmxvYWRTdHJlYW0gPSBuZXcgQmxvYlF1aWNrUXVlcnlTdHJlYW0odGhpcy5vcmlnaW5hbFJlc3BvbnNlLnJlYWRhYmxlU3RyZWFtQm9keSwgb3B0aW9ucyk7XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgYWNjZXNzIHRpZXIgb24gYSBibG9iLlxuICogRm9yIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IGJsb2NrIGJsb2IgbGV2ZWwgdGllcmluZyBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2F6dXJlL3N0b3JhZ2UvYmxvYnMvc3RvcmFnZS1ibG9iLXN0b3JhZ2UtdGllcnN8SG90LCBjb29sIGFuZCBhcmNoaXZlIHN0b3JhZ2UgdGllcnMufVxuICovXG5leHBvcnRzLkJsb2NrQmxvYlRpZXIgPSB2b2lkIDA7XG4oZnVuY3Rpb24gKEJsb2NrQmxvYlRpZXIpIHtcbiAgICAvKipcbiAgICAgKiBPcHRpbWl6ZWQgZm9yIHN0b3JpbmcgZGF0YSB0aGF0IGlzIGFjY2Vzc2VkIGZyZXF1ZW50bHkuXG4gICAgICovXG4gICAgQmxvY2tCbG9iVGllcltcIkhvdFwiXSA9IFwiSG90XCI7XG4gICAgLyoqXG4gICAgICogT3B0aW1pemVkIGZvciBzdG9yaW5nIGRhdGEgdGhhdCBpcyBpbmZyZXF1ZW50bHkgYWNjZXNzZWQgYW5kIHN0b3JlZCBmb3IgYXQgbGVhc3QgMzAgZGF5cy5cbiAgICAgKi9cbiAgICBCbG9ja0Jsb2JUaWVyW1wiQ29vbFwiXSA9IFwiQ29vbFwiO1xuICAgIC8qKlxuICAgICAqIE9wdGltaXplZCBmb3Igc3RvcmluZyBkYXRhIHRoYXQgaXMgcmFyZWx5IGFjY2Vzc2VkLlxuICAgICAqL1xuICAgIEJsb2NrQmxvYlRpZXJbXCJDb2xkXCJdID0gXCJDb2xkXCI7XG4gICAgLyoqXG4gICAgICogT3B0aW1pemVkIGZvciBzdG9yaW5nIGRhdGEgdGhhdCBpcyByYXJlbHkgYWNjZXNzZWQgYW5kIHN0b3JlZCBmb3IgYXQgbGVhc3QgMTgwIGRheXNcbiAgICAgKiB3aXRoIGZsZXhpYmxlIGxhdGVuY3kgcmVxdWlyZW1lbnRzIChvbiB0aGUgb3JkZXIgb2YgaG91cnMpLlxuICAgICAqL1xuICAgIEJsb2NrQmxvYlRpZXJbXCJBcmNoaXZlXCJdID0gXCJBcmNoaXZlXCI7XG59KShleHBvcnRzLkJsb2NrQmxvYlRpZXIgfHwgKGV4cG9ydHMuQmxvY2tCbG9iVGllciA9IHt9KSk7XG4vKipcbiAqIFNwZWNpZmllcyB0aGUgcGFnZSBibG9iIHRpZXIgdG8gc2V0IHRoZSBibG9iIHRvLiBUaGlzIGlzIG9ubHkgYXBwbGljYWJsZSB0byBwYWdlIGJsb2JzIG9uIHByZW1pdW0gc3RvcmFnZSBhY2NvdW50cy5cbiAqIFBsZWFzZSBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2F6dXJlL3N0b3JhZ2Uvc3RvcmFnZS1wcmVtaXVtLXN0b3JhZ2Ujc2NhbGFiaWxpdHktYW5kLXBlcmZvcm1hbmNlLXRhcmdldHN8aGVyZX1cbiAqIGZvciBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiB0aGUgY29ycmVzcG9uZGluZyBJT1BTIGFuZCB0aHJvdWdocHV0IHBlciBQYWdlQmxvYlRpZXIuXG4gKi9cbmV4cG9ydHMuUHJlbWl1bVBhZ2VCbG9iVGllciA9IHZvaWQgMDtcbihmdW5jdGlvbiAoUHJlbWl1bVBhZ2VCbG9iVGllcikge1xuICAgIC8qKlxuICAgICAqIFA0IFRpZXIuXG4gICAgICovXG4gICAgUHJlbWl1bVBhZ2VCbG9iVGllcltcIlA0XCJdID0gXCJQNFwiO1xuICAgIC8qKlxuICAgICAqIFA2IFRpZXIuXG4gICAgICovXG4gICAgUHJlbWl1bVBhZ2VCbG9iVGllcltcIlA2XCJdID0gXCJQNlwiO1xuICAgIC8qKlxuICAgICAqIFAxMCBUaWVyLlxuICAgICAqL1xuICAgIFByZW1pdW1QYWdlQmxvYlRpZXJbXCJQMTBcIl0gPSBcIlAxMFwiO1xuICAgIC8qKlxuICAgICAqIFAxNSBUaWVyLlxuICAgICAqL1xuICAgIFByZW1pdW1QYWdlQmxvYlRpZXJbXCJQMTVcIl0gPSBcIlAxNVwiO1xuICAgIC8qKlxuICAgICAqIFAyMCBUaWVyLlxuICAgICAqL1xuICAgIFByZW1pdW1QYWdlQmxvYlRpZXJbXCJQMjBcIl0gPSBcIlAyMFwiO1xuICAgIC8qKlxuICAgICAqIFAzMCBUaWVyLlxuICAgICAqL1xuICAgIFByZW1pdW1QYWdlQmxvYlRpZXJbXCJQMzBcIl0gPSBcIlAzMFwiO1xuICAgIC8qKlxuICAgICAqIFA0MCBUaWVyLlxuICAgICAqL1xuICAgIFByZW1pdW1QYWdlQmxvYlRpZXJbXCJQNDBcIl0gPSBcIlA0MFwiO1xuICAgIC8qKlxuICAgICAqIFA1MCBUaWVyLlxuICAgICAqL1xuICAgIFByZW1pdW1QYWdlQmxvYlRpZXJbXCJQNTBcIl0gPSBcIlA1MFwiO1xuICAgIC8qKlxuICAgICAqIFA2MCBUaWVyLlxuICAgICAqL1xuICAgIFByZW1pdW1QYWdlQmxvYlRpZXJbXCJQNjBcIl0gPSBcIlA2MFwiO1xuICAgIC8qKlxuICAgICAqIFA3MCBUaWVyLlxuICAgICAqL1xuICAgIFByZW1pdW1QYWdlQmxvYlRpZXJbXCJQNzBcIl0gPSBcIlA3MFwiO1xuICAgIC8qKlxuICAgICAqIFA4MCBUaWVyLlxuICAgICAqL1xuICAgIFByZW1pdW1QYWdlQmxvYlRpZXJbXCJQODBcIl0gPSBcIlA4MFwiO1xufSkoZXhwb3J0cy5QcmVtaXVtUGFnZUJsb2JUaWVyIHx8IChleHBvcnRzLlByZW1pdW1QYWdlQmxvYlRpZXIgPSB7fSkpO1xuZnVuY3Rpb24gdG9BY2Nlc3NUaWVyKHRpZXIpIHtcbiAgICBpZiAodGllciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiB0aWVyOyAvLyBObyBtb3JlIGNoZWNrIGlmIHN0cmluZyBpcyBhIHZhbGlkIEFjY2Vzc1RpZXIsIGFuZCBsZWZ0IHRoaXMgdG8gdW5kZXJsYXkgbG9naWMgdG8gZGVjaWRlKHNlcnZpY2UpLlxufVxuZnVuY3Rpb24gZW5zdXJlQ3BrSWZTcGVjaWZpZWQoY3BrLCBpc0h0dHBzKSB7XG4gICAgaWYgKGNwayAmJiAhaXNIdHRwcykge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkN1c3RvbWVyLXByb3ZpZGVkIGVuY3J5cHRpb24ga2V5IG11c3QgYmUgdXNlZCBvdmVyIEhUVFBTLlwiKTtcbiAgICB9XG4gICAgaWYgKGNwayAmJiAhY3BrLmVuY3J5cHRpb25BbGdvcml0aG0pIHtcbiAgICAgICAgY3BrLmVuY3J5cHRpb25BbGdvcml0aG0gPSBFbmNyeXB0aW9uQWxnb3JpdGhtQUVTMjU7XG4gICAgfVxufVxuLyoqXG4gKiBEZWZpbmVzIHRoZSBrbm93biBjbG91ZCBhdWRpZW5jZXMgZm9yIFN0b3JhZ2UuXG4gKi9cbmV4cG9ydHMuU3RvcmFnZUJsb2JBdWRpZW5jZSA9IHZvaWQgMDtcbihmdW5jdGlvbiAoU3RvcmFnZUJsb2JBdWRpZW5jZSkge1xuICAgIC8qKlxuICAgICAqIFRoZSBPQXV0aCBzY29wZSB0byB1c2UgdG8gcmV0cmlldmUgYW4gQUFEIHRva2VuIGZvciBBenVyZSBTdG9yYWdlLlxuICAgICAqL1xuICAgIFN0b3JhZ2VCbG9iQXVkaWVuY2VbXCJTdG9yYWdlT0F1dGhTY29wZXNcIl0gPSBcImh0dHBzOi8vc3RvcmFnZS5henVyZS5jb20vLmRlZmF1bHRcIjtcbiAgICAvKipcbiAgICAgKiBUaGUgT0F1dGggc2NvcGUgdG8gdXNlIHRvIHJldHJpZXZlIGFuIEFBRCB0b2tlbiBmb3IgQXp1cmUgRGlzay5cbiAgICAgKi9cbiAgICBTdG9yYWdlQmxvYkF1ZGllbmNlW1wiRGlza0NvbXB1dGVPQXV0aFNjb3Blc1wiXSA9IFwiaHR0cHM6Ly9kaXNrLmNvbXB1dGUuYXp1cmUuY29tLy5kZWZhdWx0XCI7XG59KShleHBvcnRzLlN0b3JhZ2VCbG9iQXVkaWVuY2UgfHwgKGV4cG9ydHMuU3RvcmFnZUJsb2JBdWRpZW5jZSA9IHt9KSk7XG4vKipcbiAqXG4gKiBUbyBnZXQgT0F1dGggYXVkaWVuY2UgZm9yIGEgc3RvcmFnZSBhY2NvdW50IGZvciBibG9iIHNlcnZpY2UuXG4gKi9cbmZ1bmN0aW9uIGdldEJsb2JTZXJ2aWNlQWNjb3VudEF1ZGllbmNlKHN0b3JhZ2VBY2NvdW50TmFtZSkge1xuICAgIHJldHVybiBgaHR0cHM6Ly8ke3N0b3JhZ2VBY2NvdW50TmFtZX0uYmxvYi5jb3JlLndpbmRvd3MubmV0Ly5kZWZhdWx0YDtcbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIEZ1bmN0aW9uIHRoYXQgY29udmVydHMgUGFnZVJhbmdlIGFuZCBDbGVhclJhbmdlIHRvIGEgY29tbW9uIFJhbmdlIG9iamVjdC5cbiAqIFBhZ2VSYW5nZSBhbmQgQ2xlYXJSYW5nZSBoYXZlIHN0YXJ0IGFuZCBlbmQgd2hpbGUgUmFuZ2Ugb2Zmc2V0IGFuZCBjb3VudFxuICogdGhpcyBmdW5jdGlvbiBub3JtYWxpemVzIHRvIFJhbmdlLlxuICogQHBhcmFtIHJlc3BvbnNlIC0gTW9kZWwgUGFnZUJsb2IgUmFuZ2UgcmVzcG9uc2VcbiAqL1xuZnVuY3Rpb24gcmFuZ2VSZXNwb25zZUZyb21Nb2RlbChyZXNwb25zZSkge1xuICAgIGNvbnN0IHBhZ2VSYW5nZSA9IChyZXNwb25zZS5fcmVzcG9uc2UucGFyc2VkQm9keS5wYWdlUmFuZ2UgfHwgW10pLm1hcCgoeCkgPT4gKHtcbiAgICAgICAgb2Zmc2V0OiB4LnN0YXJ0LFxuICAgICAgICBjb3VudDogeC5lbmQgLSB4LnN0YXJ0LFxuICAgIH0pKTtcbiAgICBjb25zdCBjbGVhclJhbmdlID0gKHJlc3BvbnNlLl9yZXNwb25zZS5wYXJzZWRCb2R5LmNsZWFyUmFuZ2UgfHwgW10pLm1hcCgoeCkgPT4gKHtcbiAgICAgICAgb2Zmc2V0OiB4LnN0YXJ0LFxuICAgICAgICBjb3VudDogeC5lbmQgLSB4LnN0YXJ0LFxuICAgIH0pKTtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCByZXNwb25zZSksIHsgcGFnZVJhbmdlLFxuICAgICAgICBjbGVhclJhbmdlLCBfcmVzcG9uc2U6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcmVzcG9uc2UuX3Jlc3BvbnNlKSwgeyBwYXJzZWRCb2R5OiB7XG4gICAgICAgICAgICAgICAgcGFnZVJhbmdlLFxuICAgICAgICAgICAgICAgIGNsZWFyUmFuZ2UsXG4gICAgICAgICAgICB9IH0pIH0pO1xufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogVGhpcyBpcyB0aGUgcG9sbGVyIHJldHVybmVkIGJ5IHtAbGluayBCbG9iQ2xpZW50LmJlZ2luQ29weUZyb21VUkx9LlxuICogVGhpcyBjYW4gbm90IGJlIGluc3RhbnRpYXRlZCBkaXJlY3RseSBvdXRzaWRlIG9mIHRoaXMgcGFja2FnZS5cbiAqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIEJsb2JCZWdpbkNvcHlGcm9tVXJsUG9sbGVyIGV4dGVuZHMgY29yZUxyby5Qb2xsZXIge1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgeyBibG9iQ2xpZW50LCBjb3B5U291cmNlLCBpbnRlcnZhbEluTXMgPSAxNTAwMCwgb25Qcm9ncmVzcywgcmVzdW1lRnJvbSwgc3RhcnRDb3B5RnJvbVVSTE9wdGlvbnMsIH0gPSBvcHRpb25zO1xuICAgICAgICBsZXQgc3RhdGU7XG4gICAgICAgIGlmIChyZXN1bWVGcm9tKSB7XG4gICAgICAgICAgICBzdGF0ZSA9IEpTT04ucGFyc2UocmVzdW1lRnJvbSkuc3RhdGU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3BlcmF0aW9uID0gbWFrZUJsb2JCZWdpbkNvcHlGcm9tVVJMUG9sbE9wZXJhdGlvbihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHN0YXRlKSwgeyBibG9iQ2xpZW50LFxuICAgICAgICAgICAgY29weVNvdXJjZSxcbiAgICAgICAgICAgIHN0YXJ0Q29weUZyb21VUkxPcHRpb25zIH0pKTtcbiAgICAgICAgc3VwZXIob3BlcmF0aW9uKTtcbiAgICAgICAgaWYgKHR5cGVvZiBvblByb2dyZXNzID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHRoaXMub25Qcm9ncmVzcyhvblByb2dyZXNzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmludGVydmFsSW5NcyA9IGludGVydmFsSW5NcztcbiAgICB9XG4gICAgZGVsYXkoKSB7XG4gICAgICAgIHJldHVybiBjb3JlVXRpbC5kZWxheSh0aGlzLmludGVydmFsSW5Ncyk7XG4gICAgfVxufVxuLyoqXG4gKiBOb3RlOiBJbnRlbnRpb25hbGx5IHVzaW5nIGZ1bmN0aW9uIGV4cHJlc3Npb24gb3ZlciBhcnJvdyBmdW5jdGlvbiBleHByZXNzaW9uXG4gKiBzbyB0aGF0IHRoZSBmdW5jdGlvbiBjYW4gYmUgaW52b2tlZCB3aXRoIGEgZGlmZmVyZW50IGNvbnRleHQuXG4gKiBUaGlzIGFmZmVjdHMgd2hhdCBgdGhpc2AgcmVmZXJzIHRvLlxuICogQGhpZGRlblxuICovXG5jb25zdCBjYW5jZWwgPSBhc3luYyBmdW5jdGlvbiBjYW5jZWwob3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IHsgY29weUlkIH0gPSBzdGF0ZTtcbiAgICBpZiAoc3RhdGUuaXNDb21wbGV0ZWQpIHtcbiAgICAgICAgcmV0dXJuIG1ha2VCbG9iQmVnaW5Db3B5RnJvbVVSTFBvbGxPcGVyYXRpb24oc3RhdGUpO1xuICAgIH1cbiAgICBpZiAoIWNvcHlJZCkge1xuICAgICAgICBzdGF0ZS5pc0NhbmNlbGxlZCA9IHRydWU7XG4gICAgICAgIHJldHVybiBtYWtlQmxvYkJlZ2luQ29weUZyb21VUkxQb2xsT3BlcmF0aW9uKHN0YXRlKTtcbiAgICB9XG4gICAgLy8gaWYgYWJvcnRDb3B5RnJvbVVSTCB0aHJvd3MsIGl0IHdpbGwgYnViYmxlIHVwIHRvIHVzZXIncyBwb2xsZXIuY2FuY2VsT3BlcmF0aW9uIGNhbGxcbiAgICBhd2FpdCBzdGF0ZS5ibG9iQ2xpZW50LmFib3J0Q29weUZyb21VUkwoY29weUlkLCB7XG4gICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgIH0pO1xuICAgIHN0YXRlLmlzQ2FuY2VsbGVkID0gdHJ1ZTtcbiAgICByZXR1cm4gbWFrZUJsb2JCZWdpbkNvcHlGcm9tVVJMUG9sbE9wZXJhdGlvbihzdGF0ZSk7XG59O1xuLyoqXG4gKiBOb3RlOiBJbnRlbnRpb25hbGx5IHVzaW5nIGZ1bmN0aW9uIGV4cHJlc3Npb24gb3ZlciBhcnJvdyBmdW5jdGlvbiBleHByZXNzaW9uXG4gKiBzbyB0aGF0IHRoZSBmdW5jdGlvbiBjYW4gYmUgaW52b2tlZCB3aXRoIGEgZGlmZmVyZW50IGNvbnRleHQuXG4gKiBUaGlzIGFmZmVjdHMgd2hhdCBgdGhpc2AgcmVmZXJzIHRvLlxuICogQGhpZGRlblxuICovXG5jb25zdCB1cGRhdGUgPSBhc3luYyBmdW5jdGlvbiB1cGRhdGUob3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IHsgYmxvYkNsaWVudCwgY29weVNvdXJjZSwgc3RhcnRDb3B5RnJvbVVSTE9wdGlvbnMgfSA9IHN0YXRlO1xuICAgIGlmICghc3RhdGUuaXNTdGFydGVkKSB7XG4gICAgICAgIHN0YXRlLmlzU3RhcnRlZCA9IHRydWU7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJsb2JDbGllbnQuc3RhcnRDb3B5RnJvbVVSTChjb3B5U291cmNlLCBzdGFydENvcHlGcm9tVVJMT3B0aW9ucyk7XG4gICAgICAgIC8vIGNvcHlJZCBpcyBuZWVkZWQgdG8gYWJvcnRcbiAgICAgICAgc3RhdGUuY29weUlkID0gcmVzdWx0LmNvcHlJZDtcbiAgICAgICAgaWYgKHJlc3VsdC5jb3B5U3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICAgICAgc3RhdGUucmVzdWx0ID0gcmVzdWx0O1xuICAgICAgICAgICAgc3RhdGUuaXNDb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKCFzdGF0ZS5pc0NvbXBsZXRlZCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3RhdGUuYmxvYkNsaWVudC5nZXRQcm9wZXJ0aWVzKHsgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwgfSk7XG4gICAgICAgICAgICBjb25zdCB7IGNvcHlTdGF0dXMsIGNvcHlQcm9ncmVzcyB9ID0gcmVzdWx0O1xuICAgICAgICAgICAgY29uc3QgcHJldkNvcHlQcm9ncmVzcyA9IHN0YXRlLmNvcHlQcm9ncmVzcztcbiAgICAgICAgICAgIGlmIChjb3B5UHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICBzdGF0ZS5jb3B5UHJvZ3Jlc3MgPSBjb3B5UHJvZ3Jlc3M7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY29weVN0YXR1cyA9PT0gXCJwZW5kaW5nXCIgJiZcbiAgICAgICAgICAgICAgICBjb3B5UHJvZ3Jlc3MgIT09IHByZXZDb3B5UHJvZ3Jlc3MgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2Ygb3B0aW9ucy5maXJlUHJvZ3Jlc3MgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIC8vIHRyaWdnZXIgaW4gc2V0VGltZW91dCwgb3Igc3dhbGxvdyBlcnJvcj9cbiAgICAgICAgICAgICAgICBvcHRpb25zLmZpcmVQcm9ncmVzcyhzdGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjb3B5U3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICAgICAgICAgIHN0YXRlLnJlc3VsdCA9IHJlc3VsdDtcbiAgICAgICAgICAgICAgICBzdGF0ZS5pc0NvbXBsZXRlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjb3B5U3RhdHVzID09PSBcImZhaWxlZFwiKSB7XG4gICAgICAgICAgICAgICAgc3RhdGUuZXJyb3IgPSBuZXcgRXJyb3IoYEJsb2IgY29weSBmYWlsZWQgd2l0aCByZWFzb246IFwiJHtyZXN1bHQuY29weVN0YXR1c0Rlc2NyaXB0aW9uIHx8IFwidW5rbm93blwifVwiYCk7XG4gICAgICAgICAgICAgICAgc3RhdGUuaXNDb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHN0YXRlLmVycm9yID0gZXJyO1xuICAgICAgICAgICAgc3RhdGUuaXNDb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtYWtlQmxvYkJlZ2luQ29weUZyb21VUkxQb2xsT3BlcmF0aW9uKHN0YXRlKTtcbn07XG4vKipcbiAqIE5vdGU6IEludGVudGlvbmFsbHkgdXNpbmcgZnVuY3Rpb24gZXhwcmVzc2lvbiBvdmVyIGFycm93IGZ1bmN0aW9uIGV4cHJlc3Npb25cbiAqIHNvIHRoYXQgdGhlIGZ1bmN0aW9uIGNhbiBiZSBpbnZva2VkIHdpdGggYSBkaWZmZXJlbnQgY29udGV4dC5cbiAqIFRoaXMgYWZmZWN0cyB3aGF0IGB0aGlzYCByZWZlcnMgdG8uXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IHRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHsgc3RhdGU6IHRoaXMuc3RhdGUgfSwgKGtleSwgdmFsdWUpID0+IHtcbiAgICAgICAgLy8gcmVtb3ZlIGJsb2JDbGllbnQgZnJvbSBzZXJpYWxpemVkIHN0YXRlIHNpbmNlIGEgY2xpZW50IGNhbid0IGJlIGh5ZHJhdGVkIGZyb20gdGhpcyBpbmZvLlxuICAgICAgICBpZiAoa2V5ID09PSBcImJsb2JDbGllbnRcIikge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSk7XG59O1xuLyoqXG4gKiBDcmVhdGVzIGEgcG9sbCBvcGVyYXRpb24gZ2l2ZW4gdGhlIHByb3ZpZGVkIHN0YXRlLlxuICogQGhpZGRlblxuICovXG5mdW5jdGlvbiBtYWtlQmxvYkJlZ2luQ29weUZyb21VUkxQb2xsT3BlcmF0aW9uKHN0YXRlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdGU6IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlKSxcbiAgICAgICAgY2FuY2VsLFxuICAgICAgICB0b1N0cmluZyxcbiAgICAgICAgdXBkYXRlLFxuICAgIH07XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBHZW5lcmF0ZSBhIHJhbmdlIHN0cmluZy4gRm9yIGV4YW1wbGU6XG4gKlxuICogXCJieXRlcz0yNTUtXCIgb3IgXCJieXRlcz0wLTUxMVwiXG4gKlxuICogQHBhcmFtIGlSYW5nZSAtXG4gKi9cbmZ1bmN0aW9uIHJhbmdlVG9TdHJpbmcoaVJhbmdlKSB7XG4gICAgaWYgKGlSYW5nZS5vZmZzZXQgPCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBSYW5nZS5vZmZzZXQgY2Fubm90IGJlIHNtYWxsZXIgdGhhbiAwLmApO1xuICAgIH1cbiAgICBpZiAoaVJhbmdlLmNvdW50ICYmIGlSYW5nZS5jb3VudCA8PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBSYW5nZS5jb3VudCBtdXN0IGJlIGxhcmdlciB0aGFuIDAuIExlYXZlIGl0IHVuZGVmaW5lZCBpZiB5b3Ugd2FudCBhIHJhbmdlIGZyb20gb2Zmc2V0IHRvIHRoZSBlbmQuYCk7XG4gICAgfVxuICAgIHJldHVybiBpUmFuZ2UuY291bnRcbiAgICAgICAgPyBgYnl0ZXM9JHtpUmFuZ2Uub2Zmc2V0fS0ke2lSYW5nZS5vZmZzZXQgKyBpUmFuZ2UuY291bnQgLSAxfWBcbiAgICAgICAgOiBgYnl0ZXM9JHtpUmFuZ2Uub2Zmc2V0fS1gO1xufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8vIEluIGJyb3dzZXIsIGR1cmluZyB3ZWJwYWNrIG9yIGJyb3dzZXJpZnkgYnVuZGxpbmcsIHRoaXMgbW9kdWxlIHdpbGwgYmUgcmVwbGFjZWQgYnkgJ2V2ZW50cydcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9Hb3phbGEvZXZlbnRzXG4vKipcbiAqIFN0YXRlcyBmb3IgQmF0Y2guXG4gKi9cbnZhciBCYXRjaFN0YXRlcztcbihmdW5jdGlvbiAoQmF0Y2hTdGF0ZXMpIHtcbiAgICBCYXRjaFN0YXRlc1tCYXRjaFN0YXRlc1tcIkdvb2RcIl0gPSAwXSA9IFwiR29vZFwiO1xuICAgIEJhdGNoU3RhdGVzW0JhdGNoU3RhdGVzW1wiRXJyb3JcIl0gPSAxXSA9IFwiRXJyb3JcIjtcbn0pKEJhdGNoU3RhdGVzIHx8IChCYXRjaFN0YXRlcyA9IHt9KSk7XG4vKipcbiAqIEJhdGNoIHByb3ZpZGVzIGJhc2ljIHBhcmFsbGVsIGV4ZWN1dGlvbiB3aXRoIGNvbmN1cnJlbmN5IGxpbWl0cy5cbiAqIFdpbGwgc3RvcCBleGVjdXRlIGxlZnQgb3BlcmF0aW9ucyB3aGVuIG9uZSBvZiB0aGUgZXhlY3V0ZWQgb3BlcmF0aW9uIHRocm93cyBhbiBlcnJvci5cbiAqIEJ1dCBCYXRjaCBjYW5ub3QgY2FuY2VsIG9uZ29pbmcgb3BlcmF0aW9ucywgeW91IG5lZWQgdG8gY2FuY2VsIHRoZW0gYnkgeW91cnNlbGYuXG4gKi9cbmNsYXNzIEJhdGNoIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIEJhdGNoLlxuICAgICAqIEBwYXJhbSBjb25jdXJyZW5jeSAtXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoY29uY3VycmVuY3kgPSA1KSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBOdW1iZXIgb2YgYWN0aXZlIG9wZXJhdGlvbnMgdW5kZXIgZXhlY3V0aW9uLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5hY3RpdmVzID0gMDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIE51bWJlciBvZiBjb21wbGV0ZWQgb3BlcmF0aW9ucyB1bmRlciBleGVjdXRpb24uXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmNvbXBsZXRlZCA9IDA7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBPZmZzZXQgb2YgbmV4dCBvcGVyYXRpb24gdG8gYmUgZXhlY3V0ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLm9mZnNldCA9IDA7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBPcGVyYXRpb24gYXJyYXkgdG8gYmUgZXhlY3V0ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLm9wZXJhdGlvbnMgPSBbXTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFN0YXRlcyBvZiBCYXRjaC4gV2hlbiBhbiBlcnJvciBoYXBwZW5zLCBzdGF0ZSB3aWxsIHR1cm4gaW50byBlcnJvci5cbiAgICAgICAgICogQmF0Y2ggd2lsbCBzdG9wIGV4ZWN1dGUgbGVmdCBvcGVyYXRpb25zLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5zdGF0ZSA9IEJhdGNoU3RhdGVzLkdvb2Q7XG4gICAgICAgIGlmIChjb25jdXJyZW5jeSA8IDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiY29uY3VycmVuY3kgbXVzdCBiZSBsYXJnZXIgdGhhbiAwXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29uY3VycmVuY3kgPSBjb25jdXJyZW5jeTtcbiAgICAgICAgdGhpcy5lbWl0dGVyID0gbmV3IGV2ZW50cy5FdmVudEVtaXR0ZXIoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkIGEgb3BlcmF0aW9uIGludG8gcXVldWUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3BlcmF0aW9uIC1cbiAgICAgKi9cbiAgICBhZGRPcGVyYXRpb24ob3BlcmF0aW9uKSB7XG4gICAgICAgIHRoaXMub3BlcmF0aW9ucy5wdXNoKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVzKys7XG4gICAgICAgICAgICAgICAgYXdhaXQgb3BlcmF0aW9uKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVzLS07XG4gICAgICAgICAgICAgICAgdGhpcy5jb21wbGV0ZWQrKztcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmFsbGVsRXhlY3V0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoXCJlcnJvclwiLCBlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTdGFydCBleGVjdXRlIG9wZXJhdGlvbnMgaW4gdGhlIHF1ZXVlLlxuICAgICAqXG4gICAgICovXG4gICAgYXN5bmMgZG8oKSB7XG4gICAgICAgIGlmICh0aGlzLm9wZXJhdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wYXJhbGxlbEV4ZWN1dGUoKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5vbihcImZpbmlzaFwiLCByZXNvbHZlKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5vbihcImVycm9yXCIsIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBCYXRjaFN0YXRlcy5FcnJvcjtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgbmV4dCBvcGVyYXRpb24gdG8gYmUgZXhlY3V0ZWQuIFJldHVybiBudWxsIHdoZW4gcmVhY2hpbmcgZW5kcy5cbiAgICAgKlxuICAgICAqL1xuICAgIG5leHRPcGVyYXRpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLm9mZnNldCA8IHRoaXMub3BlcmF0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZXJhdGlvbnNbdGhpcy5vZmZzZXQrK107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN0YXJ0IGV4ZWN1dGUgb3BlcmF0aW9ucy4gT25lIG9uZSB0aGUgbW9zdCBpbXBvcnRhbnQgZGlmZmVyZW5jZSBiZXR3ZWVuXG4gICAgICogdGhpcyBtZXRob2Qgd2l0aCBkbygpIGlzIHRoYXQgZG8oKSB3cmFwcyBhcyBhbiBzeW5jIG1ldGhvZC5cbiAgICAgKlxuICAgICAqL1xuICAgIHBhcmFsbGVsRXhlY3V0ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgPT09IEJhdGNoU3RhdGVzLkVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY29tcGxldGVkID49IHRoaXMub3BlcmF0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KFwiZmluaXNoXCIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlICh0aGlzLmFjdGl2ZXMgPCB0aGlzLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICBjb25zdCBvcGVyYXRpb24gPSB0aGlzLm5leHRPcGVyYXRpb24oKTtcbiAgICAgICAgICAgIGlmIChvcGVyYXRpb24pIHtcbiAgICAgICAgICAgICAgICBvcGVyYXRpb24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIFRoaXMgY2xhc3MgZ2VuZXJhdGVzIGEgcmVhZGFibGUgc3RyZWFtIGZyb20gdGhlIGRhdGEgaW4gYW4gYXJyYXkgb2YgYnVmZmVycy5cbiAqL1xuY2xhc3MgQnVmZmVyc1N0cmVhbSBleHRlbmRzIHN0cmVhbS5SZWFkYWJsZSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBCdWZmZXJzU3RyZWFtIHRoYXQgd2lsbCBlbWl0IHRoZSBkYXRhXG4gICAgICogY29udGFpbmVkIGluIHRoZSBhcnJheSBvZiBidWZmZXJzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGJ1ZmZlcnMgLSBBcnJheSBvZiBidWZmZXJzIGNvbnRhaW5pbmcgdGhlIGRhdGFcbiAgICAgKiBAcGFyYW0gYnl0ZUxlbmd0aCAtIFRoZSB0b3RhbCBsZW5ndGggb2YgZGF0YSBjb250YWluZWQgaW4gdGhlIGJ1ZmZlcnNcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihidWZmZXJzLCBieXRlTGVuZ3RoLCBvcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKG9wdGlvbnMpO1xuICAgICAgICB0aGlzLmJ1ZmZlcnMgPSBidWZmZXJzO1xuICAgICAgICB0aGlzLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoO1xuICAgICAgICB0aGlzLmJ5dGVPZmZzZXRJbkN1cnJlbnRCdWZmZXIgPSAwO1xuICAgICAgICB0aGlzLmJ1ZmZlckluZGV4ID0gMDtcbiAgICAgICAgdGhpcy5wdXNoZWRCeXRlc0xlbmd0aCA9IDA7XG4gICAgICAgIC8vIGNoZWNrIGJ5dGVMZW5ndGggaXMgbm8gbGFyZ2VyIHRoYW4gYnVmZmVyc1tdIHRvdGFsIGxlbmd0aFxuICAgICAgICBsZXQgYnVmZmVyc0xlbmd0aCA9IDA7XG4gICAgICAgIGZvciAoY29uc3QgYnVmIG9mIHRoaXMuYnVmZmVycykge1xuICAgICAgICAgICAgYnVmZmVyc0xlbmd0aCArPSBidWYuYnl0ZUxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYnVmZmVyc0xlbmd0aCA8IHRoaXMuYnl0ZUxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGF0YSBzaXplIHNob3VsZG4ndCBiZSBsYXJnZXIgdGhhbiB0aGUgdG90YWwgbGVuZ3RoIG9mIGJ1ZmZlcnMuXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEludGVybmFsIF9yZWFkKCkgdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBzdHJlYW0gd2FudHMgdG8gcHVsbCBtb3JlIGRhdGEgaW4uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc2l6ZSAtIE9wdGlvbmFsLiBUaGUgc2l6ZSBvZiBkYXRhIHRvIGJlIHJlYWRcbiAgICAgKi9cbiAgICBfcmVhZChzaXplKSB7XG4gICAgICAgIGlmICh0aGlzLnB1c2hlZEJ5dGVzTGVuZ3RoID49IHRoaXMuYnl0ZUxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5wdXNoKG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghc2l6ZSkge1xuICAgICAgICAgICAgc2l6ZSA9IHRoaXMucmVhZGFibGVIaWdoV2F0ZXJNYXJrO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG91dEJ1ZmZlcnMgPSBbXTtcbiAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICB3aGlsZSAoaSA8IHNpemUgJiYgdGhpcy5wdXNoZWRCeXRlc0xlbmd0aCA8IHRoaXMuYnl0ZUxlbmd0aCkge1xuICAgICAgICAgICAgLy8gVGhlIGxhc3QgYnVmZmVyIG1heSBiZSBsb25nZXIgdGhhbiB0aGUgZGF0YSBpdCBjb250YWlucy5cbiAgICAgICAgICAgIGNvbnN0IHJlbWFpbmluZ0RhdGFJbkFsbEJ1ZmZlcnMgPSB0aGlzLmJ5dGVMZW5ndGggLSB0aGlzLnB1c2hlZEJ5dGVzTGVuZ3RoO1xuICAgICAgICAgICAgY29uc3QgcmVtYWluaW5nQ2FwYWNpdHlJblRoaXNCdWZmZXIgPSB0aGlzLmJ1ZmZlcnNbdGhpcy5idWZmZXJJbmRleF0uYnl0ZUxlbmd0aCAtIHRoaXMuYnl0ZU9mZnNldEluQ3VycmVudEJ1ZmZlcjtcbiAgICAgICAgICAgIGNvbnN0IHJlbWFpbmluZyA9IE1hdGgubWluKHJlbWFpbmluZ0NhcGFjaXR5SW5UaGlzQnVmZmVyLCByZW1haW5pbmdEYXRhSW5BbGxCdWZmZXJzKTtcbiAgICAgICAgICAgIGlmIChyZW1haW5pbmcgPiBzaXplIC0gaSkge1xuICAgICAgICAgICAgICAgIC8vIGNodW5rU2l6ZSA9IHNpemUgLSBpXG4gICAgICAgICAgICAgICAgY29uc3QgZW5kID0gdGhpcy5ieXRlT2Zmc2V0SW5DdXJyZW50QnVmZmVyICsgc2l6ZSAtIGk7XG4gICAgICAgICAgICAgICAgb3V0QnVmZmVycy5wdXNoKHRoaXMuYnVmZmVyc1t0aGlzLmJ1ZmZlckluZGV4XS5zbGljZSh0aGlzLmJ5dGVPZmZzZXRJbkN1cnJlbnRCdWZmZXIsIGVuZCkpO1xuICAgICAgICAgICAgICAgIHRoaXMucHVzaGVkQnl0ZXNMZW5ndGggKz0gc2l6ZSAtIGk7XG4gICAgICAgICAgICAgICAgdGhpcy5ieXRlT2Zmc2V0SW5DdXJyZW50QnVmZmVyID0gZW5kO1xuICAgICAgICAgICAgICAgIGkgPSBzaXplO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gY2h1bmtTaXplID0gcmVtYWluaW5nXG4gICAgICAgICAgICAgICAgY29uc3QgZW5kID0gdGhpcy5ieXRlT2Zmc2V0SW5DdXJyZW50QnVmZmVyICsgcmVtYWluaW5nO1xuICAgICAgICAgICAgICAgIG91dEJ1ZmZlcnMucHVzaCh0aGlzLmJ1ZmZlcnNbdGhpcy5idWZmZXJJbmRleF0uc2xpY2UodGhpcy5ieXRlT2Zmc2V0SW5DdXJyZW50QnVmZmVyLCBlbmQpKTtcbiAgICAgICAgICAgICAgICBpZiAocmVtYWluaW5nID09PSByZW1haW5pbmdDYXBhY2l0eUluVGhpc0J1ZmZlcikge1xuICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLmJ1ZmZlcnNbdGhpcy5idWZmZXJJbmRleF0gdXNlZCB1cCwgc2hpZnQgdG8gbmV4dCBvbmVcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ieXRlT2Zmc2V0SW5DdXJyZW50QnVmZmVyID0gMDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5idWZmZXJJbmRleCsrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ieXRlT2Zmc2V0SW5DdXJyZW50QnVmZmVyID0gZW5kO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnB1c2hlZEJ5dGVzTGVuZ3RoICs9IHJlbWFpbmluZztcbiAgICAgICAgICAgICAgICBpICs9IHJlbWFpbmluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAob3V0QnVmZmVycy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICB0aGlzLnB1c2goQnVmZmVyLmNvbmNhdChvdXRCdWZmZXJzKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAob3V0QnVmZmVycy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHRoaXMucHVzaChvdXRCdWZmZXJzWzBdKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5jb25zdCBtYXhCdWZmZXJMZW5ndGggPSBidWZmZXIuY29uc3RhbnRzLk1BWF9MRU5HVEg7XG4vKipcbiAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgYSBidWZmZXIgY29udGFpbmVyIHdoaWNoIGNvbmNlcHR1YWxseSBoYXMgbm8gaGFyZCBzaXplIGxpbWl0LlxuICogSXQgYWNjZXB0cyBhIGNhcGFjaXR5LCBhbiBhcnJheSBvZiBpbnB1dCBidWZmZXJzIGFuZCB0aGUgdG90YWwgbGVuZ3RoIG9mIGlucHV0IGRhdGEuXG4gKiBJdCB3aWxsIGFsbG9jYXRlIGFuIGludGVybmFsIFwiYnVmZmVyXCIgb2YgdGhlIGNhcGFjaXR5IGFuZCBmaWxsIHRoZSBkYXRhIGluIHRoZSBpbnB1dCBidWZmZXJzXG4gKiBpbnRvIHRoZSBpbnRlcm5hbCBcImJ1ZmZlclwiIHNlcmlhbGx5IHdpdGggcmVzcGVjdCB0byB0aGUgdG90YWwgbGVuZ3RoLlxuICogVGhlbiBieSBjYWxsaW5nIFBvb2xlZEJ1ZmZlci5nZXRSZWFkYWJsZVN0cmVhbSgpLCB5b3UgY2FuIGdldCBhIHJlYWRhYmxlIHN0cmVhbVxuICogYXNzZW1ibGVkIGZyb20gYWxsIHRoZSBkYXRhIGluIHRoZSBpbnRlcm5hbCBcImJ1ZmZlclwiLlxuICovXG5jbGFzcyBQb29sZWRCdWZmZXIge1xuICAgIC8qKlxuICAgICAqIFRoZSBzaXplIG9mIHRoZSBkYXRhIGNvbnRhaW5lZCBpbiB0aGUgcG9vbGVkIGJ1ZmZlcnMuXG4gICAgICovXG4gICAgZ2V0IHNpemUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaXplO1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihjYXBhY2l0eSwgYnVmZmVycywgdG90YWxMZW5ndGgpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEludGVybmFsIGJ1ZmZlcnMgdXNlZCB0byBrZWVwIHRoZSBkYXRhLlxuICAgICAgICAgKiBFYWNoIGJ1ZmZlciBoYXMgYSBsZW5ndGggb2YgdGhlIG1heEJ1ZmZlckxlbmd0aCBleGNlcHQgbGFzdCBvbmUuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmJ1ZmZlcnMgPSBbXTtcbiAgICAgICAgdGhpcy5jYXBhY2l0eSA9IGNhcGFjaXR5O1xuICAgICAgICB0aGlzLl9zaXplID0gMDtcbiAgICAgICAgLy8gYWxsb2NhdGVcbiAgICAgICAgY29uc3QgYnVmZmVyTnVtID0gTWF0aC5jZWlsKGNhcGFjaXR5IC8gbWF4QnVmZmVyTGVuZ3RoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWZmZXJOdW07IGkrKykge1xuICAgICAgICAgICAgbGV0IGxlbiA9IGkgPT09IGJ1ZmZlck51bSAtIDEgPyBjYXBhY2l0eSAlIG1heEJ1ZmZlckxlbmd0aCA6IG1heEJ1ZmZlckxlbmd0aDtcbiAgICAgICAgICAgIGlmIChsZW4gPT09IDApIHtcbiAgICAgICAgICAgICAgICBsZW4gPSBtYXhCdWZmZXJMZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmJ1ZmZlcnMucHVzaChCdWZmZXIuYWxsb2NVbnNhZmUobGVuKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJ1ZmZlcnMpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsbChidWZmZXJzLCB0b3RhbExlbmd0aCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogRmlsbCB0aGUgaW50ZXJuYWwgYnVmZmVycyB3aXRoIGRhdGEgaW4gdGhlIGlucHV0IGJ1ZmZlcnMgc2VyaWFsbHlcbiAgICAgKiB3aXRoIHJlc3BlY3QgdG8gdGhlIHRvdGFsIGxlbmd0aCBhbmQgdGhlIHRvdGFsIGNhcGFjaXR5IG9mIHRoZSBpbnRlcm5hbCBidWZmZXJzLlxuICAgICAqIERhdGEgY29waWVkIHdpbGwgYmUgc2hpZnQgb3V0IG9mIHRoZSBpbnB1dCBidWZmZXJzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGJ1ZmZlcnMgLSBJbnB1dCBidWZmZXJzIGNvbnRhaW5pbmcgdGhlIGRhdGEgdG8gYmUgZmlsbGVkIGluIHRoZSBwb29sZWQgYnVmZmVyXG4gICAgICogQHBhcmFtIHRvdGFsTGVuZ3RoIC0gVG90YWwgbGVuZ3RoIG9mIHRoZSBkYXRhIHRvIGJlIGZpbGxlZCBpbi5cbiAgICAgKlxuICAgICAqL1xuICAgIGZpbGwoYnVmZmVycywgdG90YWxMZW5ndGgpIHtcbiAgICAgICAgdGhpcy5fc2l6ZSA9IE1hdGgubWluKHRoaXMuY2FwYWNpdHksIHRvdGFsTGVuZ3RoKTtcbiAgICAgICAgbGV0IGkgPSAwLCBqID0gMCwgdGFyZ2V0T2Zmc2V0ID0gMCwgc291cmNlT2Zmc2V0ID0gMCwgdG90YWxDb3BpZWROdW0gPSAwO1xuICAgICAgICB3aGlsZSAodG90YWxDb3BpZWROdW0gPCB0aGlzLl9zaXplKSB7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2UgPSBidWZmZXJzW2ldO1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5idWZmZXJzW2pdO1xuICAgICAgICAgICAgY29uc3QgY29waWVkTnVtID0gc291cmNlLmNvcHkodGFyZ2V0LCB0YXJnZXRPZmZzZXQsIHNvdXJjZU9mZnNldCk7XG4gICAgICAgICAgICB0b3RhbENvcGllZE51bSArPSBjb3BpZWROdW07XG4gICAgICAgICAgICBzb3VyY2VPZmZzZXQgKz0gY29waWVkTnVtO1xuICAgICAgICAgICAgdGFyZ2V0T2Zmc2V0ICs9IGNvcGllZE51bTtcbiAgICAgICAgICAgIGlmIChzb3VyY2VPZmZzZXQgPT09IHNvdXJjZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgc291cmNlT2Zmc2V0ID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0YXJnZXRPZmZzZXQgPT09IHRhcmdldC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBqKys7XG4gICAgICAgICAgICAgICAgdGFyZ2V0T2Zmc2V0ID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBjbGVhciBjb3BpZWQgZnJvbSBzb3VyY2UgYnVmZmVyc1xuICAgICAgICBidWZmZXJzLnNwbGljZSgwLCBpKTtcbiAgICAgICAgaWYgKGJ1ZmZlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgYnVmZmVyc1swXSA9IGJ1ZmZlcnNbMF0uc2xpY2Uoc291cmNlT2Zmc2V0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIHJlYWRhYmxlIHN0cmVhbSBhc3NlbWJsZWQgZnJvbSBhbGwgdGhlIGRhdGEgaW4gdGhlIGludGVybmFsIGJ1ZmZlcnMuXG4gICAgICpcbiAgICAgKi9cbiAgICBnZXRSZWFkYWJsZVN0cmVhbSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBCdWZmZXJzU3RyZWFtKHRoaXMuYnVmZmVycywgdGhpcy5zaXplKTtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBUaGlzIGNsYXNzIGFjY2VwdHMgYSBOb2RlLmpzIFJlYWRhYmxlIHN0cmVhbSBhcyBpbnB1dCwgYW5kIGtlZXBzIHJlYWRpbmcgZGF0YVxuICogZnJvbSB0aGUgc3RyZWFtIGludG8gdGhlIGludGVybmFsIGJ1ZmZlciBzdHJ1Y3R1cmUsIHVudGlsIGl0IHJlYWNoZXMgbWF4QnVmZmVycy5cbiAqIEV2ZXJ5IGF2YWlsYWJsZSBidWZmZXIgd2lsbCB0cnkgdG8gdHJpZ2dlciBvdXRnb2luZ0hhbmRsZXIuXG4gKlxuICogVGhlIGludGVybmFsIGJ1ZmZlciBzdHJ1Y3R1cmUgaW5jbHVkZXMgYW4gaW5jb21pbmcgYnVmZmVyIGFycmF5LCBhbmQgYSBvdXRnb2luZ1xuICogYnVmZmVyIGFycmF5LiBUaGUgaW5jb21pbmcgYnVmZmVyIGFycmF5IGluY2x1ZGVzIHRoZSBcImVtcHR5XCIgYnVmZmVycyBjYW4gYmUgZmlsbGVkXG4gKiB3aXRoIG5ldyBpbmNvbWluZyBkYXRhLiBUaGUgb3V0Z29pbmcgYXJyYXkgaW5jbHVkZXMgdGhlIGZpbGxlZCBidWZmZXJzIHRvIGJlXG4gKiBoYW5kbGVkIGJ5IG91dGdvaW5nSGFuZGxlci4gRXZlcnkgYWJvdmUgYnVmZmVyIHNpemUgaXMgZGVmaW5lZCBieSBwYXJhbWV0ZXIgYnVmZmVyU2l6ZS5cbiAqXG4gKiBOVU1fT0ZfQUxMX0JVRkZFUlMgPSBCVUZGRVJTX0lOX0lOQ09NSU5HICsgQlVGRkVSU19JTl9PVVRHT0lORyArIEJVRkZFUlNfVU5ERVJfSEFORExJTkdcbiAqXG4gKiBOVU1fT0ZfQUxMX0JVRkZFUlMgbGVzc2VyIHRoYW4gb3IgZXF1YWwgdG8gbWF4QnVmZmVyc1xuICpcbiAqIFBFUkZPUk1BTkNFIElNUFJPVkVNRU5UIFRJUFM6XG4gKiAxLiBJbnB1dCBzdHJlYW0gaGlnaFdhdGVyTWFyayBpcyBiZXR0ZXIgdG8gc2V0IGEgc2FtZSB2YWx1ZSB3aXRoIGJ1ZmZlclNpemVcbiAqICAgIHBhcmFtZXRlciwgd2hpY2ggd2lsbCBhdm9pZCBCdWZmZXIuY29uY2F0KCkgb3BlcmF0aW9ucy5cbiAqIDIuIGNvbmN1cnJlbmN5IHNob3VsZCBzZXQgYSBzbWFsbGVyIHZhbHVlIHRoYW4gbWF4QnVmZmVycywgd2hpY2ggaXMgaGVscGZ1bCB0b1xuICogICAgcmVkdWNlIHRoZSBwb3NzaWJpbGl0eSB3aGVuIGEgb3V0Z29pbmcgaGFuZGxlciB3YWl0cyBmb3IgdGhlIHN0cmVhbSBkYXRhLlxuICogICAgaW4gdGhpcyBzaXR1YXRpb24sIG91dGdvaW5nIGhhbmRsZXJzIGFyZSBibG9ja2VkLlxuICogICAgT3V0Z29pbmcgcXVldWUgc2hvdWxkbid0IGJlIGVtcHR5LlxuICovXG5jbGFzcyBCdWZmZXJTY2hlZHVsZXIge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgQnVmZmVyU2NoZWR1bGVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlYWRhYmxlIC0gQSBOb2RlLmpzIFJlYWRhYmxlIHN0cmVhbVxuICAgICAqIEBwYXJhbSBidWZmZXJTaXplIC0gQnVmZmVyIHNpemUgb2YgZXZlcnkgbWFpbnRhaW5lZCBidWZmZXJcbiAgICAgKiBAcGFyYW0gbWF4QnVmZmVycyAtIEhvdyBtYW55IGJ1ZmZlcnMgY2FuIGJlIGFsbG9jYXRlZFxuICAgICAqIEBwYXJhbSBvdXRnb2luZ0hhbmRsZXIgLSBBbiBhc3luYyBmdW5jdGlvbiBzY2hlZHVsZWQgdG8gYmVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXJlZCB3aGVuIGEgYnVmZmVyIGZ1bGx5IGZpbGxlZFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBzdHJlYW0gZGF0YVxuICAgICAqIEBwYXJhbSBjb25jdXJyZW5jeSAtIENvbmN1cnJlbmN5IG9mIGV4ZWN1dGluZyBvdXRnb2luZ0hhbmRsZXJzICg+MClcbiAgICAgKiBAcGFyYW0gZW5jb2RpbmcgLSBbT3B0aW9uYWxdIEVuY29kaW5nIG9mIFJlYWRhYmxlIHN0cmVhbSB3aGVuIGl0J3MgYSBzdHJpbmcgc3RyZWFtXG4gICAgICovXG4gICAgY29uc3RydWN0b3IocmVhZGFibGUsIGJ1ZmZlclNpemUsIG1heEJ1ZmZlcnMsIG91dGdvaW5nSGFuZGxlciwgY29uY3VycmVuY3ksIGVuY29kaW5nKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBbiBpbnRlcm5hbCBldmVudCBlbWl0dGVyLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5lbWl0dGVyID0gbmV3IGV2ZW50cy5FdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFuIGludGVybmFsIG9mZnNldCBtYXJrZXIgdG8gdHJhY2sgZGF0YSBvZmZzZXQgaW4gYnl0ZXMgb2YgbmV4dCBvdXRnb2luZ0hhbmRsZXIuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLm9mZnNldCA9IDA7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBbiBpbnRlcm5hbCBtYXJrZXIgdG8gdHJhY2sgd2hldGhlciBzdHJlYW0gaXMgZW5kLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5pc1N0cmVhbUVuZCA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogQW4gaW50ZXJuYWwgbWFya2VyIHRvIHRyYWNrIHdoZXRoZXIgc3RyZWFtIG9yIG91dGdvaW5nSGFuZGxlciByZXR1cm5zIGVycm9yLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5pc0Vycm9yID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBIb3cgbWFueSBoYW5kbGVycyBhcmUgZXhlY3V0aW5nLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5leGVjdXRpbmdPdXRnb2luZ0hhbmRsZXJzID0gMDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEhvdyBtYW55IGJ1ZmZlcnMgaGF2ZSBiZWVuIGFsbG9jYXRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMubnVtQnVmZmVycyA9IDA7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBCZWNhdXNlIHRoaXMgY2xhc3MgZG9lc24ndCBrbm93IGhvdyBtdWNoIGRhdGEgZXZlcnkgdGltZSBzdHJlYW0gcG9wcywgd2hpY2hcbiAgICAgICAgICogaXMgZGVmaW5lZCBieSBoaWdoV2F0ZXJNYXJrZXIgb2YgdGhlIHN0cmVhbS4gU28gQnVmZmVyU2NoZWR1bGVyIHdpbGwgY2FjaGVcbiAgICAgICAgICogZGF0YSByZWNlaXZlZCBmcm9tIHRoZSBzdHJlYW0sIHdoZW4gZGF0YSBpbiB1bnJlc29sdmVkRGF0YUFycmF5IGV4Y2VlZHMgdGhlXG4gICAgICAgICAqIGJsb2NrU2l6ZSBkZWZpbmVkLCBpdCB3aWxsIHRyeSB0byBjb25jYXQgYSBibG9ja1NpemUgb2YgYnVmZmVyLCBmaWxsIGludG8gYXZhaWxhYmxlXG4gICAgICAgICAqIGJ1ZmZlcnMgZnJvbSBpbmNvbWluZyBhbmQgcHVzaCB0byBvdXRnb2luZyBhcnJheS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudW5yZXNvbHZlZERhdGFBcnJheSA9IFtdO1xuICAgICAgICAvKipcbiAgICAgICAgICogSG93IG11Y2ggZGF0YSBjb25zaXN0ZWQgaW4gdW5yZXNvbHZlZERhdGFBcnJheS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudW5yZXNvbHZlZExlbmd0aCA9IDA7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgYXJyYXkgaW5jbHVkZXMgYWxsIHRoZSBhdmFpbGFibGUgYnVmZmVycyBjYW4gYmUgdXNlZCB0byBmaWxsIGRhdGEgZnJvbSBzdHJlYW0uXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmluY29taW5nID0gW107XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgYXJyYXkgKHF1ZXVlKSBpbmNsdWRlcyBhbGwgdGhlIGJ1ZmZlcnMgZmlsbGVkIGZyb20gc3RyZWFtIGRhdGEuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLm91dGdvaW5nID0gW107XG4gICAgICAgIGlmIChidWZmZXJTaXplIDw9IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBidWZmZXJTaXplIG11c3QgYmUgbGFyZ2VyIHRoYW4gMCwgY3VycmVudCBpcyAke2J1ZmZlclNpemV9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1heEJ1ZmZlcnMgPD0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYG1heEJ1ZmZlcnMgbXVzdCBiZSBsYXJnZXIgdGhhbiAwLCBjdXJyZW50IGlzICR7bWF4QnVmZmVyc31gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uY3VycmVuY3kgPD0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYGNvbmN1cnJlbmN5IG11c3QgYmUgbGFyZ2VyIHRoYW4gMCwgY3VycmVudCBpcyAke2NvbmN1cnJlbmN5fWApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYnVmZmVyU2l6ZSA9IGJ1ZmZlclNpemU7XG4gICAgICAgIHRoaXMubWF4QnVmZmVycyA9IG1heEJ1ZmZlcnM7XG4gICAgICAgIHRoaXMucmVhZGFibGUgPSByZWFkYWJsZTtcbiAgICAgICAgdGhpcy5vdXRnb2luZ0hhbmRsZXIgPSBvdXRnb2luZ0hhbmRsZXI7XG4gICAgICAgIHRoaXMuY29uY3VycmVuY3kgPSBjb25jdXJyZW5jeTtcbiAgICAgICAgdGhpcy5lbmNvZGluZyA9IGVuY29kaW5nO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTdGFydCB0aGUgc2NoZWR1bGVyLCB3aWxsIHJldHVybiBlcnJvciB3aGVuIHN0cmVhbSBvZiBhbnkgb2YgdGhlIG91dGdvaW5nSGFuZGxlcnNcbiAgICAgKiByZXR1cm5zIGVycm9yLlxuICAgICAqXG4gICAgICovXG4gICAgYXN5bmMgZG8oKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlYWRhYmxlLm9uKFwiZGF0YVwiLCAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIiA/IEJ1ZmZlci5mcm9tKGRhdGEsIHRoaXMuZW5jb2RpbmcpIDogZGF0YTtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZFVucmVzb2x2ZWREYXRhKGRhdGEpO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5yZXNvbHZlRGF0YSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVhZGFibGUucGF1c2UoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMucmVhZGFibGUub24oXCJlcnJvclwiLCAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoXCJlcnJvclwiLCBlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnJlYWRhYmxlLm9uKFwiZW5kXCIsICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzU3RyZWFtRW5kID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdChcImNoZWNrRW5kXCIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIub24oXCJlcnJvclwiLCAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0Vycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlYWRhYmxlLnBhdXNlKCk7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5vbihcImNoZWNrRW5kXCIsICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vdXRnb2luZy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlck91dGdvaW5nSGFuZGxlcnMoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1N0cmVhbUVuZCAmJiB0aGlzLmV4ZWN1dGluZ091dGdvaW5nSGFuZGxlcnMgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudW5yZXNvbHZlZExlbmd0aCA+IDAgJiYgdGhpcy51bnJlc29sdmVkTGVuZ3RoIDwgdGhpcy5idWZmZXJTaXplKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBidWZmZXIgPSB0aGlzLnNoaWZ0QnVmZmVyRnJvbVVucmVzb2x2ZWREYXRhQXJyYXkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3V0Z29pbmdIYW5kbGVyKCgpID0+IGJ1ZmZlci5nZXRSZWFkYWJsZVN0cmVhbSgpLCBidWZmZXIuc2l6ZSwgdGhpcy5vZmZzZXQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzb2x2ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY2F0Y2gocmVqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLnVucmVzb2x2ZWRMZW5ndGggPj0gdGhpcy5idWZmZXJTaXplKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEluc2VydCBhIG5ldyBkYXRhIGludG8gdW5yZXNvbHZlZCBhcnJheS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkYXRhIC1cbiAgICAgKi9cbiAgICBhcHBlbmRVbnJlc29sdmVkRGF0YShkYXRhKSB7XG4gICAgICAgIHRoaXMudW5yZXNvbHZlZERhdGFBcnJheS5wdXNoKGRhdGEpO1xuICAgICAgICB0aGlzLnVucmVzb2x2ZWRMZW5ndGggKz0gZGF0YS5sZW5ndGg7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRyeSB0byBzaGlmdCBhIGJ1ZmZlciB3aXRoIHNpemUgaW4gYmxvY2tTaXplLiBUaGUgYnVmZmVyIHJldHVybmVkIG1heSBiZSBsZXNzXG4gICAgICogdGhhbiBibG9ja1NpemUgd2hlbiBkYXRhIGluIHVucmVzb2x2ZWREYXRhQXJyYXkgaXMgbGVzcyB0aGFuIGJ1ZmZlclNpemUuXG4gICAgICpcbiAgICAgKi9cbiAgICBzaGlmdEJ1ZmZlckZyb21VbnJlc29sdmVkRGF0YUFycmF5KGJ1ZmZlcikge1xuICAgICAgICBpZiAoIWJ1ZmZlcikge1xuICAgICAgICAgICAgYnVmZmVyID0gbmV3IFBvb2xlZEJ1ZmZlcih0aGlzLmJ1ZmZlclNpemUsIHRoaXMudW5yZXNvbHZlZERhdGFBcnJheSwgdGhpcy51bnJlc29sdmVkTGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGJ1ZmZlci5maWxsKHRoaXMudW5yZXNvbHZlZERhdGFBcnJheSwgdGhpcy51bnJlc29sdmVkTGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVucmVzb2x2ZWRMZW5ndGggLT0gYnVmZmVyLnNpemU7XG4gICAgICAgIHJldHVybiBidWZmZXI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlc29sdmUgZGF0YSBpbiB1bnJlc29sdmVkRGF0YUFycmF5LiBGb3IgZXZlcnkgYnVmZmVyIHdpdGggc2l6ZSBpbiBibG9ja1NpemVcbiAgICAgKiBzaGlmdGVkLCBpdCB3aWxsIHRyeSB0byBnZXQgKG9yIGFsbG9jYXRlIGEgYnVmZmVyKSBmcm9tIGluY29taW5nLCBhbmQgZmlsbCBpdCxcbiAgICAgKiB0aGVuIHB1c2ggaXQgaW50byBvdXRnb2luZyB0byBiZSBoYW5kbGVkIGJ5IG91dGdvaW5nIGhhbmRsZXIuXG4gICAgICpcbiAgICAgKiBSZXR1cm4gZmFsc2Ugd2hlbiBhdmFpbGFibGUgYnVmZmVycyBpbiBpbmNvbWluZyBhcmUgbm90IGVub3VnaCwgZWxzZSB0cnVlLlxuICAgICAqXG4gICAgICogQHJldHVybnMgUmV0dXJuIGZhbHNlIHdoZW4gYnVmZmVycyBpbiBpbmNvbWluZyBhcmUgbm90IGVub3VnaCwgZWxzZSB0cnVlLlxuICAgICAqL1xuICAgIHJlc29sdmVEYXRhKCkge1xuICAgICAgICB3aGlsZSAodGhpcy51bnJlc29sdmVkTGVuZ3RoID49IHRoaXMuYnVmZmVyU2l6ZSkge1xuICAgICAgICAgICAgbGV0IGJ1ZmZlcjtcbiAgICAgICAgICAgIGlmICh0aGlzLmluY29taW5nLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBidWZmZXIgPSB0aGlzLmluY29taW5nLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zaGlmdEJ1ZmZlckZyb21VbnJlc29sdmVkRGF0YUFycmF5KGJ1ZmZlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5udW1CdWZmZXJzIDwgdGhpcy5tYXhCdWZmZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1ZmZlciA9IHRoaXMuc2hpZnRCdWZmZXJGcm9tVW5yZXNvbHZlZERhdGFBcnJheSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm51bUJ1ZmZlcnMrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIE5vIGF2YWlsYWJsZSBidWZmZXIsIHdhaXQgZm9yIGJ1ZmZlciByZXR1cm5lZFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5vdXRnb2luZy5wdXNoKGJ1ZmZlcik7XG4gICAgICAgICAgICB0aGlzLnRyaWdnZXJPdXRnb2luZ0hhbmRsZXJzKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRyeSB0byB0cmlnZ2VyIGEgb3V0Z29pbmcgaGFuZGxlciBmb3IgZXZlcnkgYnVmZmVyIGluIG91dGdvaW5nLiBTdG9wIHdoZW5cbiAgICAgKiBjb25jdXJyZW5jeSByZWFjaGVzLlxuICAgICAqL1xuICAgIGFzeW5jIHRyaWdnZXJPdXRnb2luZ0hhbmRsZXJzKCkge1xuICAgICAgICBsZXQgYnVmZmVyO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICBpZiAodGhpcy5leGVjdXRpbmdPdXRnb2luZ0hhbmRsZXJzID49IHRoaXMuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBidWZmZXIgPSB0aGlzLm91dGdvaW5nLnNoaWZ0KCk7XG4gICAgICAgICAgICBpZiAoYnVmZmVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyT3V0Z29pbmdIYW5kbGVyKGJ1ZmZlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gd2hpbGUgKGJ1ZmZlcik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgYSBvdXRnb2luZyBoYW5kbGVyIGZvciBhIGJ1ZmZlciBzaGlmdGVkIGZyb20gb3V0Z29pbmcuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYnVmZmVyIC1cbiAgICAgKi9cbiAgICBhc3luYyB0cmlnZ2VyT3V0Z29pbmdIYW5kbGVyKGJ1ZmZlcikge1xuICAgICAgICBjb25zdCBidWZmZXJMZW5ndGggPSBidWZmZXIuc2l6ZTtcbiAgICAgICAgdGhpcy5leGVjdXRpbmdPdXRnb2luZ0hhbmRsZXJzKys7XG4gICAgICAgIHRoaXMub2Zmc2V0ICs9IGJ1ZmZlckxlbmd0aDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMub3V0Z29pbmdIYW5kbGVyKCgpID0+IGJ1ZmZlci5nZXRSZWFkYWJsZVN0cmVhbSgpLCBidWZmZXJMZW5ndGgsIHRoaXMub2Zmc2V0IC0gYnVmZmVyTGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdChcImVycm9yXCIsIGVycik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5leGVjdXRpbmdPdXRnb2luZ0hhbmRsZXJzLS07XG4gICAgICAgIHRoaXMucmV1c2VCdWZmZXIoYnVmZmVyKTtcbiAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoXCJjaGVja0VuZFwiKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIGJ1ZmZlciB1c2VkIGJ5IG91dGdvaW5nIGhhbmRsZXIgaW50byBpbmNvbWluZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBidWZmZXIgLVxuICAgICAqL1xuICAgIHJldXNlQnVmZmVyKGJ1ZmZlcikge1xuICAgICAgICB0aGlzLmluY29taW5nLnB1c2goYnVmZmVyKTtcbiAgICAgICAgaWYgKCF0aGlzLmlzRXJyb3IgJiYgdGhpcy5yZXNvbHZlRGF0YSgpICYmICF0aGlzLmlzU3RyZWFtRW5kKSB7XG4gICAgICAgICAgICB0aGlzLnJlYWRhYmxlLnJlc3VtZSgpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogUmVhZHMgYSByZWFkYWJsZSBzdHJlYW0gaW50byBidWZmZXIuIEZpbGwgdGhlIGJ1ZmZlciBmcm9tIG9mZnNldCB0byBlbmQuXG4gKlxuICogQHBhcmFtIHN0cmVhbSAtIEEgTm9kZS5qcyBSZWFkYWJsZSBzdHJlYW1cbiAqIEBwYXJhbSBidWZmZXIgLSBCdWZmZXIgdG8gYmUgZmlsbGVkLCBsZW5ndGggbXVzdCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gb2Zmc2V0XG4gKiBAcGFyYW0gb2Zmc2V0IC0gRnJvbSB3aGljaCBwb3NpdGlvbiBpbiB0aGUgYnVmZmVyIHRvIGJlIGZpbGxlZCwgaW5jbHVzaXZlXG4gKiBAcGFyYW0gZW5kIC0gVG8gd2hpY2ggcG9zaXRpb24gaW4gdGhlIGJ1ZmZlciB0byBiZSBmaWxsZWQsIGV4Y2x1c2l2ZVxuICogQHBhcmFtIGVuY29kaW5nIC0gRW5jb2Rpbmcgb2YgdGhlIFJlYWRhYmxlIHN0cmVhbVxuICovXG5hc3luYyBmdW5jdGlvbiBzdHJlYW1Ub0J1ZmZlcihzdHJlYW0sIGJ1ZmZlciwgb2Zmc2V0LCBlbmQsIGVuY29kaW5nKSB7XG4gICAgbGV0IHBvcyA9IDA7IC8vIFBvc2l0aW9uIGluIHN0cmVhbVxuICAgIGNvbnN0IGNvdW50ID0gZW5kIC0gb2Zmc2V0OyAvLyBUb3RhbCBhbW91bnQgb2YgZGF0YSBuZWVkZWQgaW4gc3RyZWFtXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihgVGhlIG9wZXJhdGlvbiBjYW5ub3QgYmUgY29tcGxldGVkIGluIHRpbWVvdXQuYCkpLCBSRVFVRVNUX1RJTUVPVVQpO1xuICAgICAgICBzdHJlYW0ub24oXCJyZWFkYWJsZVwiLCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAocG9zID49IGNvdW50KSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgY2h1bmsgPSBzdHJlYW0ucmVhZCgpO1xuICAgICAgICAgICAgaWYgKCFjaHVuaykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgY2h1bmsgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBjaHVuayA9IEJ1ZmZlci5mcm9tKGNodW5rLCBlbmNvZGluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBIb3cgbXVjaCBkYXRhIG5lZWRlZCBpbiB0aGlzIGNodW5rXG4gICAgICAgICAgICBjb25zdCBjaHVua0xlbmd0aCA9IHBvcyArIGNodW5rLmxlbmd0aCA+IGNvdW50ID8gY291bnQgLSBwb3MgOiBjaHVuay5sZW5ndGg7XG4gICAgICAgICAgICBidWZmZXIuZmlsbChjaHVuay5zbGljZSgwLCBjaHVua0xlbmd0aCksIG9mZnNldCArIHBvcywgb2Zmc2V0ICsgcG9zICsgY2h1bmtMZW5ndGgpO1xuICAgICAgICAgICAgcG9zICs9IGNodW5rTGVuZ3RoO1xuICAgICAgICB9KTtcbiAgICAgICAgc3RyZWFtLm9uKFwiZW5kXCIsICgpID0+IHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICAgIGlmIChwb3MgPCBjb3VudCkge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYFN0cmVhbSBkcmFpbnMgYmVmb3JlIGdldHRpbmcgZW5vdWdoIGRhdGEgbmVlZGVkLiBEYXRhIHJlYWQ6ICR7cG9zfSwgZGF0YSBuZWVkOiAke2NvdW50fWApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHN0cmVhbS5vbihcImVycm9yXCIsIChtc2cpID0+IHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICAgIHJlamVjdChtc2cpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbi8qKlxuICogUmVhZHMgYSByZWFkYWJsZSBzdHJlYW0gaW50byBidWZmZXIgZW50aXJlbHkuXG4gKlxuICogQHBhcmFtIHN0cmVhbSAtIEEgTm9kZS5qcyBSZWFkYWJsZSBzdHJlYW1cbiAqIEBwYXJhbSBidWZmZXIgLSBCdWZmZXIgdG8gYmUgZmlsbGVkLCBsZW5ndGggbXVzdCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gb2Zmc2V0XG4gKiBAcGFyYW0gZW5jb2RpbmcgLSBFbmNvZGluZyBvZiB0aGUgUmVhZGFibGUgc3RyZWFtXG4gKiBAcmV0dXJucyB3aXRoIHRoZSBjb3VudCBvZiBieXRlcyByZWFkLlxuICogQHRocm93cyBgUmFuZ2VFcnJvcmAgSWYgYnVmZmVyIHNpemUgaXMgbm90IGJpZyBlbm91Z2guXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHN0cmVhbVRvQnVmZmVyMihzdHJlYW0sIGJ1ZmZlciwgZW5jb2RpbmcpIHtcbiAgICBsZXQgcG9zID0gMDsgLy8gUG9zaXRpb24gaW4gc3RyZWFtXG4gICAgY29uc3QgYnVmZmVyU2l6ZSA9IGJ1ZmZlci5sZW5ndGg7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgc3RyZWFtLm9uKFwicmVhZGFibGVcIiwgKCkgPT4ge1xuICAgICAgICAgICAgbGV0IGNodW5rID0gc3RyZWFtLnJlYWQoKTtcbiAgICAgICAgICAgIGlmICghY2h1bmspIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNodW5rID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgY2h1bmsgPSBCdWZmZXIuZnJvbShjaHVuaywgZW5jb2RpbmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBvcyArIGNodW5rLmxlbmd0aCA+IGJ1ZmZlclNpemUpIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGBTdHJlYW0gZXhjZWVkcyBidWZmZXIgc2l6ZS4gQnVmZmVyIHNpemU6ICR7YnVmZmVyU2l6ZX1gKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnVmZmVyLmZpbGwoY2h1bmssIHBvcywgcG9zICsgY2h1bmsubGVuZ3RoKTtcbiAgICAgICAgICAgIHBvcyArPSBjaHVuay5sZW5ndGg7XG4gICAgICAgIH0pO1xuICAgICAgICBzdHJlYW0ub24oXCJlbmRcIiwgKCkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZShwb3MpO1xuICAgICAgICB9KTtcbiAgICAgICAgc3RyZWFtLm9uKFwiZXJyb3JcIiwgcmVqZWN0KTtcbiAgICB9KTtcbn1cbi8qKlxuICogT05MWSBBVkFJTEFCTEUgSU4gTk9ERS5KUyBSVU5USU1FLlxuICpcbiAqIFdyaXRlcyB0aGUgY29udGVudCBvZiBhIHJlYWRzdHJlYW0gdG8gYSBsb2NhbCBmaWxlLiBSZXR1cm5zIGEgUHJvbWlzZSB3aGljaCBpcyBjb21wbGV0ZWQgYWZ0ZXIgdGhlIGZpbGUgaGFuZGxlIGlzIGNsb3NlZC5cbiAqXG4gKiBAcGFyYW0gcnMgLSBUaGUgcmVhZCBzdHJlYW0uXG4gKiBAcGFyYW0gZmlsZSAtIERlc3RpbmF0aW9uIGZpbGUgcGF0aC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVhZFN0cmVhbVRvTG9jYWxGaWxlKHJzLCBmaWxlKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3Qgd3MgPSBmc19fbmFtZXNwYWNlLmNyZWF0ZVdyaXRlU3RyZWFtKGZpbGUpO1xuICAgICAgICBycy5vbihcImVycm9yXCIsIChlcnIpID0+IHtcbiAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9KTtcbiAgICAgICAgd3Mub24oXCJlcnJvclwiLCAoZXJyKSA9PiB7XG4gICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHdzLm9uKFwiY2xvc2VcIiwgcmVzb2x2ZSk7XG4gICAgICAgIHJzLnBpcGUod3MpO1xuICAgIH0pO1xufVxuLyoqXG4gKiBPTkxZIEFWQUlMQUJMRSBJTiBOT0RFLkpTIFJVTlRJTUUuXG4gKlxuICogUHJvbWlzaWZpZWQgdmVyc2lvbiBvZiBmcy5zdGF0KCkuXG4gKi9cbmNvbnN0IGZzU3RhdCA9IHV0aWxfX25hbWVzcGFjZS5wcm9taXNpZnkoZnNfX25hbWVzcGFjZS5zdGF0KTtcbmNvbnN0IGZzQ3JlYXRlUmVhZFN0cmVhbSA9IGZzX19uYW1lc3BhY2UuY3JlYXRlUmVhZFN0cmVhbTtcblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIEEgQmxvYkNsaWVudCByZXByZXNlbnRzIGEgVVJMIHRvIGFuIEF6dXJlIFN0b3JhZ2UgYmxvYjsgdGhlIGJsb2IgbWF5IGJlIGEgYmxvY2sgYmxvYixcbiAqIGFwcGVuZCBibG9iLCBvciBwYWdlIGJsb2IuXG4gKi9cbmNsYXNzIEJsb2JDbGllbnQgZXh0ZW5kcyBTdG9yYWdlQ2xpZW50IHtcbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGUgYmxvYi5cbiAgICAgKi9cbiAgICBnZXQgbmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX25hbWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBuYW1lIG9mIHRoZSBzdG9yYWdlIGNvbnRhaW5lciB0aGUgYmxvYiBpcyBhc3NvY2lhdGVkIHdpdGguXG4gICAgICovXG4gICAgZ2V0IGNvbnRhaW5lck5hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb250YWluZXJOYW1lO1xuICAgIH1cbiAgICBjb25zdHJ1Y3Rvcih1cmxPckNvbm5lY3Rpb25TdHJpbmcsIGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lLCBibG9iTmFtZU9yT3B0aW9ucywgXG4gICAgLy8gTGVnYWN5LCBubyBmaXggZm9yIGVzbGludCBlcnJvciB3aXRob3V0IGJyZWFraW5nLiBEaXNhYmxlIGl0IGZvciB0aGlzIGludGVyZmFjZS5cbiAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGF6dXJlL2F6dXJlLXNkay90cy1uYW1pbmctb3B0aW9ucyovXG4gICAgb3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgbGV0IHBpcGVsaW5lO1xuICAgICAgICBsZXQgdXJsO1xuICAgICAgICBpZiAoaXNQaXBlbGluZUxpa2UoY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUpKSB7XG4gICAgICAgICAgICAvLyAodXJsOiBzdHJpbmcsIHBpcGVsaW5lOiBQaXBlbGluZSlcbiAgICAgICAgICAgIHVybCA9IHVybE9yQ29ubmVjdGlvblN0cmluZztcbiAgICAgICAgICAgIHBpcGVsaW5lID0gY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoKGNvcmVVdGlsLmlzTm9kZSAmJiBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSBpbnN0YW5jZW9mIFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsKSB8fFxuICAgICAgICAgICAgY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUgaW5zdGFuY2VvZiBBbm9ueW1vdXNDcmVkZW50aWFsIHx8XG4gICAgICAgICAgICBjb3JlQXV0aC5pc1Rva2VuQ3JlZGVudGlhbChjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSkpIHtcbiAgICAgICAgICAgIC8vICh1cmw6IHN0cmluZywgY3JlZGVudGlhbD86IFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsIHwgQW5vbnltb3VzQ3JlZGVudGlhbCB8IFRva2VuQ3JlZGVudGlhbCwgb3B0aW9ucz86IFN0b3JhZ2VQaXBlbGluZU9wdGlvbnMpXG4gICAgICAgICAgICB1cmwgPSB1cmxPckNvbm5lY3Rpb25TdHJpbmc7XG4gICAgICAgICAgICBvcHRpb25zID0gYmxvYk5hbWVPck9wdGlvbnM7XG4gICAgICAgICAgICBwaXBlbGluZSA9IG5ld1BpcGVsaW5lKGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUgJiZcbiAgICAgICAgICAgIHR5cGVvZiBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgLy8gKHVybDogc3RyaW5nLCBjcmVkZW50aWFsPzogU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwgfCBBbm9ueW1vdXNDcmVkZW50aWFsIHwgVG9rZW5DcmVkZW50aWFsLCBvcHRpb25zPzogU3RvcmFnZVBpcGVsaW5lT3B0aW9ucylcbiAgICAgICAgICAgIC8vIFRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZC4gVXNlIGFub255bW91cyBjcmVkZW50aWFsLlxuICAgICAgICAgICAgdXJsID0gdXJsT3JDb25uZWN0aW9uU3RyaW5nO1xuICAgICAgICAgICAgaWYgKGJsb2JOYW1lT3JPcHRpb25zICYmIHR5cGVvZiBibG9iTmFtZU9yT3B0aW9ucyAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMgPSBibG9iTmFtZU9yT3B0aW9ucztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBpcGVsaW5lID0gbmV3UGlwZWxpbmUobmV3IEFub255bW91c0NyZWRlbnRpYWwoKSwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUgJiZcbiAgICAgICAgICAgIHR5cGVvZiBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgYmxvYk5hbWVPck9wdGlvbnMgJiZcbiAgICAgICAgICAgIHR5cGVvZiBibG9iTmFtZU9yT3B0aW9ucyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgLy8gKGNvbm5lY3Rpb25TdHJpbmc6IHN0cmluZywgY29udGFpbmVyTmFtZTogc3RyaW5nLCBibG9iTmFtZTogc3RyaW5nLCBvcHRpb25zPzogU3RvcmFnZVBpcGVsaW5lT3B0aW9ucylcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lck5hbWUgPSBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZTtcbiAgICAgICAgICAgIGNvbnN0IGJsb2JOYW1lID0gYmxvYk5hbWVPck9wdGlvbnM7XG4gICAgICAgICAgICBjb25zdCBleHRyYWN0ZWRDcmVkcyA9IGV4dHJhY3RDb25uZWN0aW9uU3RyaW5nUGFydHModXJsT3JDb25uZWN0aW9uU3RyaW5nKTtcbiAgICAgICAgICAgIGlmIChleHRyYWN0ZWRDcmVkcy5raW5kID09PSBcIkFjY291bnRDb25uU3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29yZVV0aWwuaXNOb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNoYXJlZEtleUNyZWRlbnRpYWwgPSBuZXcgU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwoZXh0cmFjdGVkQ3JlZHMuYWNjb3VudE5hbWUsIGV4dHJhY3RlZENyZWRzLmFjY291bnRLZXkpO1xuICAgICAgICAgICAgICAgICAgICB1cmwgPSBhcHBlbmRUb1VSTFBhdGgoYXBwZW5kVG9VUkxQYXRoKGV4dHJhY3RlZENyZWRzLnVybCwgZW5jb2RlVVJJQ29tcG9uZW50KGNvbnRhaW5lck5hbWUpKSwgZW5jb2RlVVJJQ29tcG9uZW50KGJsb2JOYW1lKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucy5wcm94eU9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMucHJveHlPcHRpb25zID0gY29yZVJlc3RQaXBlbGluZS5nZXREZWZhdWx0UHJveHlTZXR0aW5ncyhleHRyYWN0ZWRDcmVkcy5wcm94eVVyaSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcGlwZWxpbmUgPSBuZXdQaXBlbGluZShzaGFyZWRLZXlDcmVkZW50aWFsLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFjY291bnQgY29ubmVjdGlvbiBzdHJpbmcgaXMgb25seSBzdXBwb3J0ZWQgaW4gTm9kZS5qcyBlbnZpcm9ubWVudFwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChleHRyYWN0ZWRDcmVkcy5raW5kID09PSBcIlNBU0Nvbm5TdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIHVybCA9XG4gICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvVVJMUGF0aChhcHBlbmRUb1VSTFBhdGgoZXh0cmFjdGVkQ3JlZHMudXJsLCBlbmNvZGVVUklDb21wb25lbnQoY29udGFpbmVyTmFtZSkpLCBlbmNvZGVVUklDb21wb25lbnQoYmxvYk5hbWUpKSArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIj9cIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYWN0ZWRDcmVkcy5hY2NvdW50U2FzO1xuICAgICAgICAgICAgICAgIHBpcGVsaW5lID0gbmV3UGlwZWxpbmUobmV3IEFub255bW91c0NyZWRlbnRpYWwoKSwgb3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb25uZWN0aW9uIHN0cmluZyBtdXN0IGJlIGVpdGhlciBhbiBBY2NvdW50IGNvbm5lY3Rpb24gc3RyaW5nIG9yIGEgU0FTIGNvbm5lY3Rpb24gc3RyaW5nXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0aW5nIG5vbi1lbXB0eSBzdHJpbmdzIGZvciBjb250YWluZXJOYW1lIGFuZCBibG9iTmFtZSBwYXJhbWV0ZXJzXCIpO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyKHVybCwgcGlwZWxpbmUpO1xuICAgICAgICAoeyBibG9iTmFtZTogdGhpcy5fbmFtZSwgY29udGFpbmVyTmFtZTogdGhpcy5fY29udGFpbmVyTmFtZSB9ID1cbiAgICAgICAgICAgIHRoaXMuZ2V0QmxvYkFuZENvbnRhaW5lck5hbWVzRnJvbVVybCgpKTtcbiAgICAgICAgdGhpcy5ibG9iQ29udGV4dCA9IHRoaXMuc3RvcmFnZUNsaWVudENvbnRleHQuYmxvYjtcbiAgICAgICAgdGhpcy5fc25hcHNob3QgPSBnZXRVUkxQYXJhbWV0ZXIodGhpcy51cmwsIFVSTENvbnN0YW50cy5QYXJhbWV0ZXJzLlNOQVBTSE9UKTtcbiAgICAgICAgdGhpcy5fdmVyc2lvbklkID0gZ2V0VVJMUGFyYW1ldGVyKHRoaXMudXJsLCBVUkxDb25zdGFudHMuUGFyYW1ldGVycy5WRVJTSU9OSUQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IEJsb2JDbGllbnQgb2JqZWN0IGlkZW50aWNhbCB0byB0aGUgc291cmNlIGJ1dCB3aXRoIHRoZSBzcGVjaWZpZWQgc25hcHNob3QgdGltZXN0YW1wLlxuICAgICAqIFByb3ZpZGUgXCJcIiB3aWxsIHJlbW92ZSB0aGUgc25hcHNob3QgYW5kIHJldHVybiBhIENsaWVudCB0byB0aGUgYmFzZSBibG9iLlxuICAgICAqXG4gICAgICogQHBhcmFtIHNuYXBzaG90IC0gVGhlIHNuYXBzaG90IHRpbWVzdGFtcC5cbiAgICAgKiBAcmV0dXJucyBBIG5ldyBCbG9iQ2xpZW50IG9iamVjdCBpZGVudGljYWwgdG8gdGhlIHNvdXJjZSBidXQgd2l0aCB0aGUgc3BlY2lmaWVkIHNuYXBzaG90IHRpbWVzdGFtcFxuICAgICAqL1xuICAgIHdpdGhTbmFwc2hvdChzbmFwc2hvdCkge1xuICAgICAgICByZXR1cm4gbmV3IEJsb2JDbGllbnQoc2V0VVJMUGFyYW1ldGVyKHRoaXMudXJsLCBVUkxDb25zdGFudHMuUGFyYW1ldGVycy5TTkFQU0hPVCwgc25hcHNob3QubGVuZ3RoID09PSAwID8gdW5kZWZpbmVkIDogc25hcHNob3QpLCB0aGlzLnBpcGVsaW5lKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBCbG9iQ2xpZW50IG9iamVjdCBwb2ludGluZyB0byBhIHZlcnNpb24gb2YgdGhpcyBibG9iLlxuICAgICAqIFByb3ZpZGUgXCJcIiB3aWxsIHJlbW92ZSB0aGUgdmVyc2lvbklkIGFuZCByZXR1cm4gYSBDbGllbnQgdG8gdGhlIGJhc2UgYmxvYi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB2ZXJzaW9uSWQgLSBUaGUgdmVyc2lvbklkLlxuICAgICAqIEByZXR1cm5zIEEgbmV3IEJsb2JDbGllbnQgb2JqZWN0IHBvaW50aW5nIHRvIHRoZSB2ZXJzaW9uIG9mIHRoaXMgYmxvYi5cbiAgICAgKi9cbiAgICB3aXRoVmVyc2lvbih2ZXJzaW9uSWQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBCbG9iQ2xpZW50KHNldFVSTFBhcmFtZXRlcih0aGlzLnVybCwgVVJMQ29uc3RhbnRzLlBhcmFtZXRlcnMuVkVSU0lPTklELCB2ZXJzaW9uSWQubGVuZ3RoID09PSAwID8gdW5kZWZpbmVkIDogdmVyc2lvbklkKSwgdGhpcy5waXBlbGluZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBBcHBlbmRCbG9iQ2xpZW50IG9iamVjdC5cbiAgICAgKlxuICAgICAqL1xuICAgIGdldEFwcGVuZEJsb2JDbGllbnQoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQXBwZW5kQmxvYkNsaWVudCh0aGlzLnVybCwgdGhpcy5waXBlbGluZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBCbG9ja0Jsb2JDbGllbnQgb2JqZWN0LlxuICAgICAqXG4gICAgICovXG4gICAgZ2V0QmxvY2tCbG9iQ2xpZW50KCkge1xuICAgICAgICByZXR1cm4gbmV3IEJsb2NrQmxvYkNsaWVudCh0aGlzLnVybCwgdGhpcy5waXBlbGluZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBQYWdlQmxvYkNsaWVudCBvYmplY3QuXG4gICAgICpcbiAgICAgKi9cbiAgICBnZXRQYWdlQmxvYkNsaWVudCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQYWdlQmxvYkNsaWVudCh0aGlzLnVybCwgdGhpcy5waXBlbGluZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWRzIG9yIGRvd25sb2FkcyBhIGJsb2IgZnJvbSB0aGUgc3lzdGVtLCBpbmNsdWRpbmcgaXRzIG1ldGFkYXRhIGFuZCBwcm9wZXJ0aWVzLlxuICAgICAqIFlvdSBjYW4gYWxzbyBjYWxsIEdldCBCbG9iIHRvIHJlYWQgYSBzbmFwc2hvdC5cbiAgICAgKlxuICAgICAqICogSW4gTm9kZS5qcywgZGF0YSByZXR1cm5zIGluIGEgUmVhZGFibGUgc3RyZWFtIHJlYWRhYmxlU3RyZWFtQm9keVxuICAgICAqICogSW4gYnJvd3NlcnMsIGRhdGEgcmV0dXJucyBpbiBhIHByb21pc2UgYmxvYkJvZHlcbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2dldC1ibG9iXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb2Zmc2V0IC0gRnJvbSB3aGljaCBwb3NpdGlvbiBvZiB0aGUgYmxvYiB0byBkb3dubG9hZCwgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDBcbiAgICAgKiBAcGFyYW0gY291bnQgLSBIb3cgbXVjaCBkYXRhIHRvIGJlIGRvd25sb2FkZWQsIGdyZWF0ZXIgdGhhbiAwLiBXaWxsIGRvd25sb2FkIHRvIHRoZSBlbmQgd2hlbiB1bmRlZmluZWRcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIG9wdGlvbnMgdG8gQmxvYiBEb3dubG9hZCBvcGVyYXRpb24uXG4gICAgICpcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNhZ2UgKE5vZGUuanMpOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiAvLyBEb3dubG9hZCBhbmQgY29udmVydCBhIGJsb2IgdG8gYSBzdHJpbmdcbiAgICAgKiBjb25zdCBkb3dubG9hZEJsb2NrQmxvYlJlc3BvbnNlID0gYXdhaXQgYmxvYkNsaWVudC5kb3dubG9hZCgpO1xuICAgICAqIGNvbnN0IGRvd25sb2FkZWQgPSBhd2FpdCBzdHJlYW1Ub0J1ZmZlcihkb3dubG9hZEJsb2NrQmxvYlJlc3BvbnNlLnJlYWRhYmxlU3RyZWFtQm9keSk7XG4gICAgICogY29uc29sZS5sb2coXCJEb3dubG9hZGVkIGJsb2IgY29udGVudDpcIiwgZG93bmxvYWRlZC50b1N0cmluZygpKTtcbiAgICAgKlxuICAgICAqIGFzeW5jIGZ1bmN0aW9uIHN0cmVhbVRvQnVmZmVyKHJlYWRhYmxlU3RyZWFtKSB7XG4gICAgICogcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgKiBjb25zdCBjaHVua3MgPSBbXTtcbiAgICAgKiByZWFkYWJsZVN0cmVhbS5vbihcImRhdGFcIiwgKGRhdGEpID0+IHtcbiAgICAgKiBjaHVua3MucHVzaChkYXRhIGluc3RhbmNlb2YgQnVmZmVyID8gZGF0YSA6IEJ1ZmZlci5mcm9tKGRhdGEpKTtcbiAgICAgKiB9KTtcbiAgICAgKiByZWFkYWJsZVN0cmVhbS5vbihcImVuZFwiLCAoKSA9PiB7XG4gICAgICogcmVzb2x2ZShCdWZmZXIuY29uY2F0KGNodW5rcykpO1xuICAgICAqIH0pO1xuICAgICAqIHJlYWRhYmxlU3RyZWFtLm9uKFwiZXJyb3JcIiwgcmVqZWN0KTtcbiAgICAgKiB9KTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzYWdlIChicm93c2VyKTpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogLy8gRG93bmxvYWQgYW5kIGNvbnZlcnQgYSBibG9iIHRvIGEgc3RyaW5nXG4gICAgICogY29uc3QgZG93bmxvYWRCbG9ja0Jsb2JSZXNwb25zZSA9IGF3YWl0IGJsb2JDbGllbnQuZG93bmxvYWQoKTtcbiAgICAgKiBjb25zdCBkb3dubG9hZGVkID0gYXdhaXQgYmxvYlRvU3RyaW5nKGF3YWl0IGRvd25sb2FkQmxvY2tCbG9iUmVzcG9uc2UuYmxvYkJvZHkpO1xuICAgICAqIGNvbnNvbGUubG9nKFxuICAgICAqICAgXCJEb3dubG9hZGVkIGJsb2IgY29udGVudFwiLFxuICAgICAqICAgZG93bmxvYWRlZFxuICAgICAqICk7XG4gICAgICpcbiAgICAgKiBhc3luYyBmdW5jdGlvbiBibG9iVG9TdHJpbmcoYmxvYjogQmxvYik6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICogICBjb25zdCBmaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgKiAgIHJldHVybiBuZXcgUHJvbWlzZTxzdHJpbmc+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgKiAgICAgZmlsZVJlYWRlci5vbmxvYWRlbmQgPSAoZXY6IGFueSkgPT4ge1xuICAgICAqICAgICAgIHJlc29sdmUoZXYudGFyZ2V0IS5yZXN1bHQpO1xuICAgICAqICAgICB9O1xuICAgICAqICAgICBmaWxlUmVhZGVyLm9uZXJyb3IgPSByZWplY3Q7XG4gICAgICogICAgIGZpbGVSZWFkZXIucmVhZEFzVGV4dChibG9iKTtcbiAgICAgKiAgIH0pO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBhc3luYyBkb3dubG9hZChvZmZzZXQgPSAwLCBjb3VudCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIG9wdGlvbnMuY29uZGl0aW9ucyA9IG9wdGlvbnMuY29uZGl0aW9ucyB8fCB7fTtcbiAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0gb3B0aW9ucy5jb25kaXRpb25zIHx8IHt9O1xuICAgICAgICBlbnN1cmVDcGtJZlNwZWNpZmllZChvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksIHRoaXMuaXNIdHRwcyk7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYkNsaWVudC1kb3dubG9hZFwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuYmxvYkNvbnRleHQuZG93bmxvYWQoe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICByZXF1ZXN0T3B0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICBvbkRvd25sb2FkUHJvZ3Jlc3M6IGNvcmVVdGlsLmlzTm9kZSA/IHVuZGVmaW5lZCA6IG9wdGlvbnMub25Qcm9ncmVzcywgLy8gZm9yIE5vZGUuanMsIHByb2dyZXNzIGlzIHJlcG9ydGVkIGJ5IFJldHJpYWJsZVJlYWRhYmxlU3RyZWFtXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICByYW5nZTogb2Zmc2V0ID09PSAwICYmICFjb3VudCA/IHVuZGVmaW5lZCA6IHJhbmdlVG9TdHJpbmcoeyBvZmZzZXQsIGNvdW50IH0pLFxuICAgICAgICAgICAgICAgIHJhbmdlR2V0Q29udGVudE1ENTogb3B0aW9ucy5yYW5nZUdldENvbnRlbnRNRDUsXG4gICAgICAgICAgICAgICAgcmFuZ2VHZXRDb250ZW50Q1JDNjQ6IG9wdGlvbnMucmFuZ2VHZXRDb250ZW50Q3JjNjQsXG4gICAgICAgICAgICAgICAgc25hcHNob3Q6IG9wdGlvbnMuc25hcHNob3QsXG4gICAgICAgICAgICAgICAgY3BrSW5mbzogb3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIGNvbnN0IHdyYXBwZWRSZXMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHJlcyksIHsgX3Jlc3BvbnNlOiByZXMuX3Jlc3BvbnNlLCBvYmplY3RSZXBsaWNhdGlvbkRlc3RpbmF0aW9uUG9saWN5SWQ6IHJlcy5vYmplY3RSZXBsaWNhdGlvblBvbGljeUlkLCBvYmplY3RSZXBsaWNhdGlvblNvdXJjZVByb3BlcnRpZXM6IHBhcnNlT2JqZWN0UmVwbGljYXRpb25SZWNvcmQocmVzLm9iamVjdFJlcGxpY2F0aW9uUnVsZXMpIH0pO1xuICAgICAgICAgICAgLy8gUmV0dXJuIGJyb3dzZXIgcmVzcG9uc2UgaW1tZWRpYXRlbHlcbiAgICAgICAgICAgIGlmICghY29yZVV0aWwuaXNOb2RlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWRSZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBXZSBzdXBwb3J0IHJldHJ5aW5nIHdoZW4gZG93bmxvYWQgc3RyZWFtIHVuZXhwZWN0ZWQgZW5kcyBpbiBOb2RlLmpzIHJ1bnRpbWVcbiAgICAgICAgICAgIC8vIEZvbGxvd2luZyBjb2RlIHNob3VsZG4ndCBiZSBidW5kbGVkIGludG8gYnJvd3NlciBidWlsZCwgaG93ZXZlciBzb21lXG4gICAgICAgICAgICAvLyBidW5kbGVycyBtYXkgdHJ5IHRvIGJ1bmRsZSBmb2xsb3dpbmcgY29kZSBhbmQgXCJGaWxlUmVhZFJlc3BvbnNlLnRzXCIuXG4gICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIFwiRmlsZURvd25sb2FkUmVzcG9uc2UuYnJvd3Nlci50c1wiIHdpbGwgYmUgdXNlZCBhcyBhIHNoaW0gb2YgXCJGaWxlRG93bmxvYWRSZXNwb25zZS50c1wiXG4gICAgICAgICAgICAvLyBUaGUgY29uZmlnIGlzIGluIHBhY2thZ2UuanNvbiBcImJyb3dzZXJcIiBmaWVsZFxuICAgICAgICAgICAgaWYgKG9wdGlvbnMubWF4UmV0cnlSZXF1ZXN0cyA9PT0gdW5kZWZpbmVkIHx8IG9wdGlvbnMubWF4UmV0cnlSZXF1ZXN0cyA8IDApIHtcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBEZWZhdWx0IHZhbHVlIG9yIG1ha2UgaXQgYSByZXF1aXJlZCBwYXJhbWV0ZXI/XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5tYXhSZXRyeVJlcXVlc3RzID0gREVGQVVMVF9NQVhfRE9XTkxPQURfUkVUUllfUkVRVUVTVFM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVzLmNvbnRlbnRMZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBGaWxlIGRvd25sb2FkIHJlc3BvbnNlIGRvZXNuJ3QgY29udGFpbiB2YWxpZCBjb250ZW50IGxlbmd0aCBoZWFkZXJgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghcmVzLmV0YWcpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgRmlsZSBkb3dubG9hZCByZXNwb25zZSBkb2Vzbid0IGNvbnRhaW4gdmFsaWQgZXRhZyBoZWFkZXJgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXcgQmxvYkRvd25sb2FkUmVzcG9uc2Uod3JhcHBlZFJlcywgYXN5bmMgKHN0YXJ0KSA9PiB7XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWREb3dubG9hZE9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmTWF0Y2g6IG9wdGlvbnMuY29uZGl0aW9ucy5pZk1hdGNoIHx8IHJlcy5ldGFnLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWZNb2RpZmllZFNpbmNlOiBvcHRpb25zLmNvbmRpdGlvbnMuaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWZOb25lTWF0Y2g6IG9wdGlvbnMuY29uZGl0aW9ucy5pZk5vbmVNYXRjaCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmVW5tb2RpZmllZFNpbmNlOiBvcHRpb25zLmNvbmRpdGlvbnMuaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHJhbmdlOiByYW5nZVRvU3RyaW5nKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OiBvZmZzZXQgKyByZXMuY29udGVudExlbmd0aCAtIHN0YXJ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiBzdGFydCxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIHJhbmdlR2V0Q29udGVudE1ENTogb3B0aW9ucy5yYW5nZUdldENvbnRlbnRNRDUsXG4gICAgICAgICAgICAgICAgICAgIHJhbmdlR2V0Q29udGVudENSQzY0OiBvcHRpb25zLnJhbmdlR2V0Q29udGVudENyYzY0LFxuICAgICAgICAgICAgICAgICAgICBzbmFwc2hvdDogb3B0aW9ucy5zbmFwc2hvdCxcbiAgICAgICAgICAgICAgICAgICAgY3BrSW5mbzogb3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgLy8gRGVidWcgcHVycG9zZSBvbmx5XG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgLy8gICBgUmVhZCBmcm9tIGludGVybmFsIHN0cmVhbSwgcmFuZ2U6ICR7XG4gICAgICAgICAgICAgICAgLy8gICAgIHVwZGF0ZWRPcHRpb25zLnJhbmdlXG4gICAgICAgICAgICAgICAgLy8gICB9LCBvcHRpb25zOiAke0pTT04uc3RyaW5naWZ5KHVwZGF0ZWRPcHRpb25zKX1gXG4gICAgICAgICAgICAgICAgLy8gKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gKGF3YWl0IHRoaXMuYmxvYkNvbnRleHQuZG93bmxvYWQoT2JqZWN0LmFzc2lnbih7IGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsIH0sIHVwZGF0ZWREb3dubG9hZE9wdGlvbnMpKSkucmVhZGFibGVTdHJlYW1Cb2R5O1xuICAgICAgICAgICAgfSwgb2Zmc2V0LCByZXMuY29udGVudExlbmd0aCwge1xuICAgICAgICAgICAgICAgIG1heFJldHJ5UmVxdWVzdHM6IG9wdGlvbnMubWF4UmV0cnlSZXF1ZXN0cyxcbiAgICAgICAgICAgICAgICBvblByb2dyZXNzOiBvcHRpb25zLm9uUHJvZ3Jlc3MsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgQXp1cmUgYmxvYiByZXNvdXJjZSByZXByZXNlbnRlZCBieSB0aGlzIGNsaWVudCBleGlzdHM7IGZhbHNlIG90aGVyd2lzZS5cbiAgICAgKlxuICAgICAqIE5PVEU6IHVzZSB0aGlzIGZ1bmN0aW9uIHdpdGggY2FyZSBzaW5jZSBhbiBleGlzdGluZyBibG9iIG1pZ2h0IGJlIGRlbGV0ZWQgYnkgb3RoZXIgY2xpZW50cyBvclxuICAgICAqIGFwcGxpY2F0aW9ucy4gVmljZSB2ZXJzYSBuZXcgYmxvYnMgbWlnaHQgYmUgYWRkZWQgYnkgb3RoZXIgY2xpZW50cyBvciBhcHBsaWNhdGlvbnMgYWZ0ZXIgdGhpc1xuICAgICAqIGZ1bmN0aW9uIGNvbXBsZXRlcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gb3B0aW9ucyB0byBFeGlzdHMgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGV4aXN0cyhvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iQ2xpZW50LWV4aXN0c1wiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZW5zdXJlQ3BrSWZTcGVjaWZpZWQob3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LCB0aGlzLmlzSHR0cHMpO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZ2V0UHJvcGVydGllcyh7XG4gICAgICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgICAgICBjdXN0b21lclByb3ZpZGVkS2V5OiBvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksXG4gICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoZS5zdGF0dXNDb2RlID09PSA0MDQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gRXhwZWN0ZWQgZXhjZXB0aW9uIHdoZW4gY2hlY2tpbmcgYmxvYiBleGlzdGVuY2VcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChlLnN0YXR1c0NvZGUgPT09IDQwOSAmJlxuICAgICAgICAgICAgICAgICAgICAoZS5kZXRhaWxzLmVycm9yQ29kZSA9PT0gQmxvYlVzZXNDdXN0b21lclNwZWNpZmllZEVuY3J5cHRpb25Nc2cgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuZGV0YWlscy5lcnJvckNvZGUgPT09IEJsb2JEb2VzTm90VXNlQ3VzdG9tZXJTcGVjaWZpZWRFbmNyeXB0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBFeHBlY3RlZCBleGNlcHRpb24gd2hlbiBjaGVja2luZyBibG9iIGV4aXN0ZW5jZVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYWxsIHVzZXItZGVmaW5lZCBtZXRhZGF0YSwgc3RhbmRhcmQgSFRUUCBwcm9wZXJ0aWVzLCBhbmQgc3lzdGVtIHByb3BlcnRpZXNcbiAgICAgKiBmb3IgdGhlIGJsb2IuIEl0IGRvZXMgbm90IHJldHVybiB0aGUgY29udGVudCBvZiB0aGUgYmxvYi5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9nZXQtYmxvYi1wcm9wZXJ0aWVzXG4gICAgICpcbiAgICAgKiBXQVJOSU5HOiBUaGUgYG1ldGFkYXRhYCBvYmplY3QgcmV0dXJuZWQgaW4gdGhlIHJlc3BvbnNlIHdpbGwgaGF2ZSBpdHMga2V5cyBpbiBsb3dlcmNhc2UsIGV2ZW4gaWZcbiAgICAgKiB0aGV5IG9yaWdpbmFsbHkgY29udGFpbmVkIHVwcGVyY2FzZSBjaGFyYWN0ZXJzLiBUaGlzIGRpZmZlcnMgZnJvbSB0aGUgbWV0YWRhdGEga2V5cyByZXR1cm5lZCBieVxuICAgICAqIHRoZSBtZXRob2RzIG9mIHtAbGluayBDb250YWluZXJDbGllbnR9IHRoYXQgbGlzdCBibG9icyB1c2luZyB0aGUgYGluY2x1ZGVNZXRhZGF0YWAgb3B0aW9uLCB3aGljaFxuICAgICAqIHdpbGwgcmV0YWluIHRoZWlyIG9yaWdpbmFsIGNhc2luZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgb3B0aW9ucyB0byBHZXQgUHJvcGVydGllcyBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgZ2V0UHJvcGVydGllcyhvcHRpb25zID0ge30pIHtcbiAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0gb3B0aW9ucy5jb25kaXRpb25zIHx8IHt9O1xuICAgICAgICBlbnN1cmVDcGtJZlNwZWNpZmllZChvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksIHRoaXMuaXNIdHRwcyk7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYkNsaWVudC1nZXRQcm9wZXJ0aWVzXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgY29uc3QgcmVzID0gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5ibG9iQ29udGV4dC5nZXRQcm9wZXJ0aWVzKHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgY3BrSW5mbzogb3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHJlcyksIHsgX3Jlc3BvbnNlOiByZXMuX3Jlc3BvbnNlLCBvYmplY3RSZXBsaWNhdGlvbkRlc3RpbmF0aW9uUG9saWN5SWQ6IHJlcy5vYmplY3RSZXBsaWNhdGlvblBvbGljeUlkLCBvYmplY3RSZXBsaWNhdGlvblNvdXJjZVByb3BlcnRpZXM6IHBhcnNlT2JqZWN0UmVwbGljYXRpb25SZWNvcmQocmVzLm9iamVjdFJlcGxpY2F0aW9uUnVsZXMpIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTWFya3MgdGhlIHNwZWNpZmllZCBibG9iIG9yIHNuYXBzaG90IGZvciBkZWxldGlvbi4gVGhlIGJsb2IgaXMgbGF0ZXIgZGVsZXRlZFxuICAgICAqIGR1cmluZyBnYXJiYWdlIGNvbGxlY3Rpb24uIE5vdGUgdGhhdCBpbiBvcmRlciB0byBkZWxldGUgYSBibG9iLCB5b3UgbXVzdCBkZWxldGVcbiAgICAgKiBhbGwgb2YgaXRzIHNuYXBzaG90cy4gWW91IGNhbiBkZWxldGUgYm90aCBhdCB0aGUgc2FtZSB0aW1lIHdpdGggdGhlIERlbGV0ZVxuICAgICAqIEJsb2Igb3BlcmF0aW9uLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2RlbGV0ZS1ibG9iXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIG9wdGlvbnMgdG8gQmxvYiBEZWxldGUgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGRlbGV0ZShvcHRpb25zID0ge30pIHtcbiAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0gb3B0aW9ucy5jb25kaXRpb25zIHx8IHt9O1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JDbGllbnQtZGVsZXRlXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuYmxvYkNvbnRleHQuZGVsZXRlKHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBkZWxldGVTbmFwc2hvdHM6IG9wdGlvbnMuZGVsZXRlU25hcHNob3RzLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBNYXJrcyB0aGUgc3BlY2lmaWVkIGJsb2Igb3Igc25hcHNob3QgZm9yIGRlbGV0aW9uIGlmIGl0IGV4aXN0cy4gVGhlIGJsb2IgaXMgbGF0ZXIgZGVsZXRlZFxuICAgICAqIGR1cmluZyBnYXJiYWdlIGNvbGxlY3Rpb24uIE5vdGUgdGhhdCBpbiBvcmRlciB0byBkZWxldGUgYSBibG9iLCB5b3UgbXVzdCBkZWxldGVcbiAgICAgKiBhbGwgb2YgaXRzIHNuYXBzaG90cy4gWW91IGNhbiBkZWxldGUgYm90aCBhdCB0aGUgc2FtZSB0aW1lIHdpdGggdGhlIERlbGV0ZVxuICAgICAqIEJsb2Igb3BlcmF0aW9uLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2RlbGV0ZS1ibG9iXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIG9wdGlvbnMgdG8gQmxvYiBEZWxldGUgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGRlbGV0ZUlmRXhpc3RzKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JDbGllbnQtZGVsZXRlSWZFeGlzdHNcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLmRlbGV0ZSh1cGRhdGVkT3B0aW9ucykpO1xuICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oeyBzdWNjZWVkZWQ6IHRydWUgfSwgcmVzKSwgeyBfcmVzcG9uc2U6IHJlcy5fcmVzcG9uc2UgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGlmICgoKF9hID0gZS5kZXRhaWxzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZXJyb3JDb2RlKSA9PT0gXCJCbG9iTm90Rm91bmRcIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHsgc3VjY2VlZGVkOiBmYWxzZSB9LCAoX2IgPSBlLnJlc3BvbnNlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IucGFyc2VkSGVhZGVycyksIHsgX3Jlc3BvbnNlOiBlLnJlc3BvbnNlIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVzdG9yZXMgdGhlIGNvbnRlbnRzIGFuZCBtZXRhZGF0YSBvZiBzb2Z0IGRlbGV0ZWQgYmxvYiBhbmQgYW55IGFzc29jaWF0ZWRcbiAgICAgKiBzb2Z0IGRlbGV0ZWQgc25hcHNob3RzLiBVbmRlbGV0ZSBCbG9iIGlzIHN1cHBvcnRlZCBvbmx5IG9uIHZlcnNpb24gMjAxNy0wNy0yOVxuICAgICAqIG9yIGxhdGVyLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL3VuZGVsZXRlLWJsb2JcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgb3B0aW9ucyB0byBCbG9iIFVuZGVsZXRlIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyB1bmRlbGV0ZShvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iQ2xpZW50LXVuZGVsZXRlXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuYmxvYkNvbnRleHQudW5kZWxldGUoe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldHMgc3lzdGVtIHByb3BlcnRpZXMgb24gdGhlIGJsb2IuXG4gICAgICpcbiAgICAgKiBJZiBubyB2YWx1ZSBwcm92aWRlZCwgb3Igbm8gdmFsdWUgcHJvdmlkZWQgZm9yIHRoZSBzcGVjaWZpZWQgYmxvYiBIVFRQIGhlYWRlcnMsXG4gICAgICogdGhlc2UgYmxvYiBIVFRQIGhlYWRlcnMgd2l0aG91dCBhIHZhbHVlIHdpbGwgYmUgY2xlYXJlZC5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9zZXQtYmxvYi1wcm9wZXJ0aWVzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYmxvYkhUVFBIZWFkZXJzIC0gSWYgbm8gdmFsdWUgcHJvdmlkZWQsIG9yIG5vIHZhbHVlIHByb3ZpZGVkIGZvclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHNwZWNpZmllZCBibG9iIEhUVFAgaGVhZGVycywgdGhlc2UgYmxvYiBIVFRQXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzIHdpdGhvdXQgYSB2YWx1ZSB3aWxsIGJlIGNsZWFyZWQuXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBIGNvbW1vbiBoZWFkZXIgdG8gc2V0IGlzIGBibG9iQ29udGVudFR5cGVgXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGluZyB0aGUgYnJvd3NlciB0byBwcm92aWRlIGZ1bmN0aW9uYWxpdHlcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VkIG9uIGZpbGUgdHlwZS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIG9wdGlvbnMgdG8gQmxvYiBTZXQgSFRUUCBIZWFkZXJzIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBzZXRIVFRQSGVhZGVycyhibG9iSFRUUEhlYWRlcnMsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIGVuc3VyZUNwa0lmU3BlY2lmaWVkKG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSwgdGhpcy5pc0h0dHBzKTtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iQ2xpZW50LXNldEhUVFBIZWFkZXJzXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuYmxvYkNvbnRleHQuc2V0SHR0cEhlYWRlcnMoe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGJsb2JIdHRwSGVhZGVyczogYmxvYkhUVFBIZWFkZXJzLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICAvLyBjcGtJbmZvOiBvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksIC8vIENQSyBpcyBub3QgaW5jbHVkZWQgaW4gU3dhZ2dlciwgc2hvdWxkIGNoYW5nZSB0aGlzIGJhY2sgd2hlbiB0aGlzIGlzc3VlIGlzIGZpeGVkIGluIFN3YWdnZXIuXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyB1c2VyLWRlZmluZWQgbWV0YWRhdGEgZm9yIHRoZSBzcGVjaWZpZWQgYmxvYiBhcyBvbmUgb3IgbW9yZSBuYW1lLXZhbHVlIHBhaXJzLlxuICAgICAqXG4gICAgICogSWYgbm8gb3B0aW9uIHByb3ZpZGVkLCBvciBubyBtZXRhZGF0YSBkZWZpbmVkIGluIHRoZSBwYXJhbWV0ZXIsIHRoZSBibG9iXG4gICAgICogbWV0YWRhdGEgd2lsbCBiZSByZW1vdmVkLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL3NldC1ibG9iLW1ldGFkYXRhXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbWV0YWRhdGEgLSBSZXBsYWNlIGV4aXN0aW5nIG1ldGFkYXRhIHdpdGggdGhpcyB2YWx1ZS5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBubyB2YWx1ZSBwcm92aWRlZCB0aGUgZXhpc3RpbmcgbWV0YWRhdGEgd2lsbCBiZSByZW1vdmVkLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgb3B0aW9ucyB0byBTZXQgTWV0YWRhdGEgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIHNldE1ldGFkYXRhKG1ldGFkYXRhLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0gb3B0aW9ucy5jb25kaXRpb25zIHx8IHt9O1xuICAgICAgICBlbnN1cmVDcGtJZlNwZWNpZmllZChvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksIHRoaXMuaXNIdHRwcyk7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYkNsaWVudC1zZXRNZXRhZGF0YVwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLmJsb2JDb250ZXh0LnNldE1ldGFkYXRhKHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBtZXRhZGF0YSxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgY3BrSW5mbzogb3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LFxuICAgICAgICAgICAgICAgIGVuY3J5cHRpb25TY29wZTogb3B0aW9ucy5lbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyB0YWdzIG9uIHRoZSB1bmRlcmx5aW5nIGJsb2IuXG4gICAgICogQSBibG9iIGNhbiBoYXZlIHVwIHRvIDEwIHRhZ3MuIFRhZyBrZXlzIG11c3QgYmUgYmV0d2VlbiAxIGFuZCAxMjggY2hhcmFjdGVycy4gIFRhZyB2YWx1ZXMgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDI1NiBjaGFyYWN0ZXJzLlxuICAgICAqIFZhbGlkIHRhZyBrZXkgYW5kIHZhbHVlIGNoYXJhY3RlcnMgaW5jbHVkZSBsb3dlciBhbmQgdXBwZXIgY2FzZSBsZXR0ZXJzLCBkaWdpdHMgKDAtOSksXG4gICAgICogc3BhY2UgKCcgJyksIHBsdXMgKCcrJyksIG1pbnVzICgnLScpLCBwZXJpb2QgKCcuJyksIGZvd2FyZCBzbGFzaCAoJy8nKSwgY29sb24gKCc6JyksIGVxdWFscyAoJz0nKSwgYW5kIHVuZGVyc2NvcmUgKCdfJykuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGFncyAtXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLVxuICAgICAqL1xuICAgIGFzeW5jIHNldFRhZ3ModGFncywgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYkNsaWVudC1zZXRUYWdzXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuYmxvYkNvbnRleHQuc2V0VGFncyh7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgICAgICB0YWdzOiB0b0Jsb2JUYWdzKHRhZ3MpLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgdGFncyBhc3NvY2lhdGVkIHdpdGggdGhlIHVuZGVybHlpbmcgYmxvYi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC1cbiAgICAgKi9cbiAgICBhc3luYyBnZXRUYWdzKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JDbGllbnQtZ2V0VGFnc1wiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5ibG9iQ29udGV4dC5nZXRUYWdzKHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgY29uc3Qgd3JhcHBlZFJlc3BvbnNlID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCByZXNwb25zZSksIHsgX3Jlc3BvbnNlOiByZXNwb25zZS5fcmVzcG9uc2UsIHRhZ3M6IHRvVGFncyh7IGJsb2JUYWdTZXQ6IHJlc3BvbnNlLmJsb2JUYWdTZXQgfSkgfHwge30gfSk7XG4gICAgICAgICAgICByZXR1cm4gd3JhcHBlZFJlc3BvbnNlO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IGEge0BsaW5rIEJsb2JMZWFzZUNsaWVudH0gdGhhdCBtYW5hZ2VzIGxlYXNlcyBvbiB0aGUgYmxvYi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wb3NlTGVhc2VJZCAtIEluaXRpYWwgcHJvcG9zZWQgbGVhc2UgSWQuXG4gICAgICogQHJldHVybnMgQSBuZXcgQmxvYkxlYXNlQ2xpZW50IG9iamVjdCBmb3IgbWFuYWdpbmcgbGVhc2VzIG9uIHRoZSBibG9iLlxuICAgICAqL1xuICAgIGdldEJsb2JMZWFzZUNsaWVudChwcm9wb3NlTGVhc2VJZCkge1xuICAgICAgICByZXR1cm4gbmV3IEJsb2JMZWFzZUNsaWVudCh0aGlzLCBwcm9wb3NlTGVhc2VJZCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSByZWFkLW9ubHkgc25hcHNob3Qgb2YgYSBibG9iLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL3NuYXBzaG90LWJsb2JcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgb3B0aW9ucyB0byB0aGUgQmxvYiBDcmVhdGUgU25hcHNob3Qgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGNyZWF0ZVNuYXBzaG90KG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIGVuc3VyZUNwa0lmU3BlY2lmaWVkKG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSwgdGhpcy5pc0h0dHBzKTtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iQ2xpZW50LWNyZWF0ZVNuYXBzaG90XCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuYmxvYkNvbnRleHQuY3JlYXRlU25hcHNob3Qoe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIG1ldGFkYXRhOiBvcHRpb25zLm1ldGFkYXRhLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICBjcGtJbmZvOiBvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksXG4gICAgICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiBvcHRpb25zLmVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBc3luY2hyb25vdXNseSBjb3BpZXMgYSBibG9iIHRvIGEgZGVzdGluYXRpb24gd2l0aGluIHRoZSBzdG9yYWdlIGFjY291bnQuXG4gICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIGxvbmcgcnVubmluZyBvcGVyYXRpb24gcG9sbGVyIHRoYXQgYWxsb3dzIHlvdSB0byB3YWl0XG4gICAgICogaW5kZWZpbml0ZWx5IHVudGlsIHRoZSBjb3B5IGlzIGNvbXBsZXRlZC5cbiAgICAgKiBZb3UgY2FuIGFsc28gY2FuY2VsIGEgY29weSBiZWZvcmUgaXQgaXMgY29tcGxldGVkIGJ5IGNhbGxpbmcgYGNhbmNlbE9wZXJhdGlvbmAgb24gdGhlIHBvbGxlci5cbiAgICAgKiBOb3RlIHRoYXQgdGhlIG9uUHJvZ3Jlc3MgY2FsbGJhY2sgd2lsbCBub3QgYmUgaW52b2tlZCBpZiB0aGUgb3BlcmF0aW9uIGNvbXBsZXRlcyBpbiB0aGUgZmlyc3RcbiAgICAgKiByZXF1ZXN0LCBhbmQgYXR0ZW1wdGluZyB0byBjYW5jZWwgYSBjb21wbGV0ZWQgY29weSB3aWxsIHJlc3VsdCBpbiBhbiBlcnJvciBiZWluZyB0aHJvd24uXG4gICAgICpcbiAgICAgKiBJbiB2ZXJzaW9uIDIwMTItMDItMTIgYW5kIGxhdGVyLCB0aGUgc291cmNlIGZvciBhIENvcHkgQmxvYiBvcGVyYXRpb24gY2FuIGJlXG4gICAgICogYSBjb21taXR0ZWQgYmxvYiBpbiBhbnkgQXp1cmUgc3RvcmFnZSBhY2NvdW50LlxuICAgICAqIEJlZ2lubmluZyB3aXRoIHZlcnNpb24gMjAxNS0wMi0yMSwgdGhlIHNvdXJjZSBmb3IgYSBDb3B5IEJsb2Igb3BlcmF0aW9uIGNhbiBiZVxuICAgICAqIGFuIEF6dXJlIGZpbGUgaW4gYW55IEF6dXJlIHN0b3JhZ2UgYWNjb3VudC5cbiAgICAgKiBPbmx5IHN0b3JhZ2UgYWNjb3VudHMgY3JlYXRlZCBvbiBvciBhZnRlciBKdW5lIDd0aCwgMjAxMiBhbGxvdyB0aGUgQ29weSBCbG9iXG4gICAgICogb3BlcmF0aW9uIHRvIGNvcHkgZnJvbSBhbm90aGVyIHN0b3JhZ2UgYWNjb3VudC5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9jb3B5LWJsb2JcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNpbmcgYXV0b21hdGljIHBvbGxpbmc6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnN0IGNvcHlQb2xsZXIgPSBhd2FpdCBibG9iQ2xpZW50LmJlZ2luQ29weUZyb21VUkwoJ3VybCcpO1xuICAgICAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvcHlQb2xsZXIucG9sbFVudGlsRG9uZSgpO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBtYW51YWwgcG9sbGluZzpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogY29uc3QgY29weVBvbGxlciA9IGF3YWl0IGJsb2JDbGllbnQuYmVnaW5Db3B5RnJvbVVSTCgndXJsJyk7XG4gICAgICogd2hpbGUgKCFwb2xsZXIuaXNEb25lKCkpIHtcbiAgICAgKiAgICBhd2FpdCBwb2xsZXIucG9sbCgpO1xuICAgICAqIH1cbiAgICAgKiBjb25zdCByZXN1bHQgPSBjb3B5UG9sbGVyLmdldFJlc3VsdCgpO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBwcm9ncmVzcyB1cGRhdGVzOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBjb25zdCBjb3B5UG9sbGVyID0gYXdhaXQgYmxvYkNsaWVudC5iZWdpbkNvcHlGcm9tVVJMKCd1cmwnLCB7XG4gICAgICogICBvblByb2dyZXNzKHN0YXRlKSB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGBQcm9ncmVzczogJHtzdGF0ZS5jb3B5UHJvZ3Jlc3N9YCk7XG4gICAgICogICB9XG4gICAgICogfSk7XG4gICAgICogY29uc3QgcmVzdWx0ID0gYXdhaXQgY29weVBvbGxlci5wb2xsVW50aWxEb25lKCk7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIGEgY2hhbmdpbmcgcG9sbGluZyBpbnRlcnZhbCAoZGVmYXVsdCAxNSBzZWNvbmRzKTpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogY29uc3QgY29weVBvbGxlciA9IGF3YWl0IGJsb2JDbGllbnQuYmVnaW5Db3B5RnJvbVVSTCgndXJsJywge1xuICAgICAqICAgaW50ZXJ2YWxJbk1zOiAxMDAwIC8vIHBvbGwgYmxvYiBldmVyeSAxIHNlY29uZCBmb3IgY29weSBwcm9ncmVzc1xuICAgICAqIH0pO1xuICAgICAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvcHlQb2xsZXIucG9sbFVudGlsRG9uZSgpO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBjb3B5IGNhbmNlbGxhdGlvbjpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogY29uc3QgY29weVBvbGxlciA9IGF3YWl0IGJsb2JDbGllbnQuYmVnaW5Db3B5RnJvbVVSTCgndXJsJyk7XG4gICAgICogLy8gY2FuY2VsIG9wZXJhdGlvbiBhZnRlciBzdGFydGluZyBpdC5cbiAgICAgKiB0cnkge1xuICAgICAqICAgYXdhaXQgY29weVBvbGxlci5jYW5jZWxPcGVyYXRpb24oKTtcbiAgICAgKiAgIC8vIGNhbGxzIHRvIGdldCB0aGUgcmVzdWx0IG5vdyB0aHJvdyBQb2xsZXJDYW5jZWxsZWRFcnJvclxuICAgICAqICAgYXdhaXQgY29weVBvbGxlci5nZXRSZXN1bHQoKTtcbiAgICAgKiB9IGNhdGNoIChlcnIpIHtcbiAgICAgKiAgIGlmIChlcnIubmFtZSA9PT0gJ1BvbGxlckNhbmNlbGxlZEVycm9yJykge1xuICAgICAqICAgICBjb25zb2xlLmxvZygnVGhlIGNvcHkgd2FzIGNhbmNlbGxlZC4nKTtcbiAgICAgKiAgIH1cbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29weVNvdXJjZSAtIHVybCB0byB0aGUgc291cmNlIEF6dXJlIEJsb2IvRmlsZS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIG9wdGlvbnMgdG8gdGhlIEJsb2IgU3RhcnQgQ29weSBGcm9tIFVSTCBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgYmVnaW5Db3B5RnJvbVVSTChjb3B5U291cmNlLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgY2xpZW50ID0ge1xuICAgICAgICAgICAgYWJvcnRDb3B5RnJvbVVSTDogKC4uLmFyZ3MpID0+IHRoaXMuYWJvcnRDb3B5RnJvbVVSTCguLi5hcmdzKSxcbiAgICAgICAgICAgIGdldFByb3BlcnRpZXM6ICguLi5hcmdzKSA9PiB0aGlzLmdldFByb3BlcnRpZXMoLi4uYXJncyksXG4gICAgICAgICAgICBzdGFydENvcHlGcm9tVVJMOiAoLi4uYXJncykgPT4gdGhpcy5zdGFydENvcHlGcm9tVVJMKC4uLmFyZ3MpLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBwb2xsZXIgPSBuZXcgQmxvYkJlZ2luQ29weUZyb21VcmxQb2xsZXIoe1xuICAgICAgICAgICAgYmxvYkNsaWVudDogY2xpZW50LFxuICAgICAgICAgICAgY29weVNvdXJjZSxcbiAgICAgICAgICAgIGludGVydmFsSW5Nczogb3B0aW9ucy5pbnRlcnZhbEluTXMsXG4gICAgICAgICAgICBvblByb2dyZXNzOiBvcHRpb25zLm9uUHJvZ3Jlc3MsXG4gICAgICAgICAgICByZXN1bWVGcm9tOiBvcHRpb25zLnJlc3VtZUZyb20sXG4gICAgICAgICAgICBzdGFydENvcHlGcm9tVVJMT3B0aW9uczogb3B0aW9ucyxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIFRyaWdnZXIgdGhlIHN0YXJ0Q29weUZyb21VUkwgY2FsbCBieSBjYWxsaW5nIHBvbGwuXG4gICAgICAgIC8vIEFueSBlcnJvcnMgZnJvbSB0aGlzIG1ldGhvZCBzaG91bGQgYmUgc3VyZmFjZWQgdG8gdGhlIHVzZXIuXG4gICAgICAgIGF3YWl0IHBvbGxlci5wb2xsKCk7XG4gICAgICAgIHJldHVybiBwb2xsZXI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFib3J0cyBhIHBlbmRpbmcgYXN5bmNocm9ub3VzIENvcHkgQmxvYiBvcGVyYXRpb24sIGFuZCBsZWF2ZXMgYSBkZXN0aW5hdGlvbiBibG9iIHdpdGggemVyb1xuICAgICAqIGxlbmd0aCBhbmQgZnVsbCBtZXRhZGF0YS4gVmVyc2lvbiAyMDEyLTAyLTEyIGFuZCBuZXdlci5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9hYm9ydC1jb3B5LWJsb2JcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb3B5SWQgLSBJZCBvZiB0aGUgQ29weSBGcm9tIFVSTCBvcGVyYXRpb24uXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBvcHRpb25zIHRvIHRoZSBCbG9iIEFib3J0IENvcHkgRnJvbSBVUkwgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGFib3J0Q29weUZyb21VUkwoY29weUlkLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iQ2xpZW50LWFib3J0Q29weUZyb21VUkxcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5ibG9iQ29udGV4dC5hYm9ydENvcHlGcm9tVVJMKGNvcHlJZCwge1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBzeW5jaHJvbm91cyBDb3B5IEZyb20gVVJMIG9wZXJhdGlvbiBjb3BpZXMgYSBibG9iIG9yIGFuIGludGVybmV0IHJlc291cmNlIHRvIGEgbmV3IGJsb2IuIEl0IHdpbGwgbm90XG4gICAgICogcmV0dXJuIGEgcmVzcG9uc2UgdW50aWwgdGhlIGNvcHkgaXMgY29tcGxldGUuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvY29weS1ibG9iLWZyb20tdXJsXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29weVNvdXJjZSAtIFRoZSBzb3VyY2UgVVJMIHRvIGNvcHkgZnJvbSwgU2hhcmVkIEFjY2VzcyBTaWduYXR1cmUoU0FTKSBtYXliZSBuZWVkZWQgZm9yIGF1dGhlbnRpY2F0aW9uXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLVxuICAgICAqL1xuICAgIGFzeW5jIHN5bmNDb3B5RnJvbVVSTChjb3B5U291cmNlLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0gb3B0aW9ucy5jb25kaXRpb25zIHx8IHt9O1xuICAgICAgICBvcHRpb25zLnNvdXJjZUNvbmRpdGlvbnMgPSBvcHRpb25zLnNvdXJjZUNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYkNsaWVudC1zeW5jQ29weUZyb21VUkxcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lLCBfZiwgX2c7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5ibG9iQ29udGV4dC5jb3B5RnJvbVVSTChjb3B5U291cmNlLCB7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgbWV0YWRhdGE6IG9wdGlvbnMubWV0YWRhdGEsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIHNvdXJjZU1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICBzb3VyY2VJZk1hdGNoOiAoX2IgPSBvcHRpb25zLnNvdXJjZUNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5pZk1hdGNoLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VJZk1vZGlmaWVkU2luY2U6IChfYyA9IG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlSWZOb25lTWF0Y2g6IChfZCA9IG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucykgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLmlmTm9uZU1hdGNoLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VJZlVubW9kaWZpZWRTaW5jZTogKF9lID0gb3B0aW9ucy5zb3VyY2VDb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2UuaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzb3VyY2VDb250ZW50TUQ1OiBvcHRpb25zLnNvdXJjZUNvbnRlbnRNRDUsXG4gICAgICAgICAgICAgICAgY29weVNvdXJjZUF1dGhvcml6YXRpb246IGh0dHBBdXRob3JpemF0aW9uVG9TdHJpbmcob3B0aW9ucy5zb3VyY2VBdXRob3JpemF0aW9uKSxcbiAgICAgICAgICAgICAgICB0aWVyOiB0b0FjY2Vzc1RpZXIob3B0aW9ucy50aWVyKSxcbiAgICAgICAgICAgICAgICBibG9iVGFnc1N0cmluZzogdG9CbG9iVGFnc1N0cmluZyhvcHRpb25zLnRhZ3MpLFxuICAgICAgICAgICAgICAgIGltbXV0YWJpbGl0eVBvbGljeUV4cGlyeTogKF9mID0gb3B0aW9ucy5pbW11dGFiaWxpdHlQb2xpY3kpID09PSBudWxsIHx8IF9mID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZi5leHBpcmllc09uLFxuICAgICAgICAgICAgICAgIGltbXV0YWJpbGl0eVBvbGljeU1vZGU6IChfZyA9IG9wdGlvbnMuaW1tdXRhYmlsaXR5UG9saWN5KSA9PT0gbnVsbCB8fCBfZyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2cucG9saWN5TW9kZSxcbiAgICAgICAgICAgICAgICBsZWdhbEhvbGQ6IG9wdGlvbnMubGVnYWxIb2xkLFxuICAgICAgICAgICAgICAgIGVuY3J5cHRpb25TY29wZTogb3B0aW9ucy5lbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgICAgICAgICAgY29weVNvdXJjZVRhZ3M6IG9wdGlvbnMuY29weVNvdXJjZVRhZ3MsXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgdGllciBvbiBhIGJsb2IuIFRoZSBvcGVyYXRpb24gaXMgYWxsb3dlZCBvbiBhIHBhZ2UgYmxvYiBpbiBhIHByZW1pdW1cbiAgICAgKiBzdG9yYWdlIGFjY291bnQgYW5kIG9uIGEgYmxvY2sgYmxvYiBpbiBhIGJsb2Igc3RvcmFnZSBhY2NvdW50IChsb2NhbGx5IHJlZHVuZGFudFxuICAgICAqIHN0b3JhZ2Ugb25seSkuIEEgcHJlbWl1bSBwYWdlIGJsb2IncyB0aWVyIGRldGVybWluZXMgdGhlIGFsbG93ZWQgc2l6ZSwgSU9QUyxcbiAgICAgKiBhbmQgYmFuZHdpZHRoIG9mIHRoZSBibG9iLiBBIGJsb2NrIGJsb2IncyB0aWVyIGRldGVybWluZXMgSG90L0Nvb2wvQXJjaGl2ZVxuICAgICAqIHN0b3JhZ2UgdHlwZS4gVGhpcyBvcGVyYXRpb24gZG9lcyBub3QgdXBkYXRlIHRoZSBibG9iJ3MgRVRhZy5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9zZXQtYmxvYi10aWVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGllciAtIFRoZSB0aWVyIHRvIGJlIHNldCBvbiB0aGUgYmxvYi4gVmFsaWQgdmFsdWVzIGFyZSBIb3QsIENvb2wsIG9yIEFyY2hpdmUuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBvcHRpb25zIHRvIHRoZSBCbG9iIFNldCBUaWVyIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBzZXRBY2Nlc3NUaWVyKHRpZXIsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JDbGllbnQtc2V0QWNjZXNzVGllclwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLmJsb2JDb250ZXh0LnNldFRpZXIodG9BY2Nlc3NUaWVyKHRpZXIpLCB7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIHJlaHlkcmF0ZVByaW9yaXR5OiBvcHRpb25zLnJlaHlkcmF0ZVByaW9yaXR5LFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFzeW5jIGRvd25sb2FkVG9CdWZmZXIocGFyYW0xLCBwYXJhbTIsIHBhcmFtMywgcGFyYW00ID0ge30pIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBsZXQgYnVmZmVyO1xuICAgICAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICAgICAgbGV0IGNvdW50ID0gMDtcbiAgICAgICAgbGV0IG9wdGlvbnMgPSBwYXJhbTQ7XG4gICAgICAgIGlmIChwYXJhbTEgaW5zdGFuY2VvZiBCdWZmZXIpIHtcbiAgICAgICAgICAgIGJ1ZmZlciA9IHBhcmFtMTtcbiAgICAgICAgICAgIG9mZnNldCA9IHBhcmFtMiB8fCAwO1xuICAgICAgICAgICAgY291bnQgPSB0eXBlb2YgcGFyYW0zID09PSBcIm51bWJlclwiID8gcGFyYW0zIDogMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG9mZnNldCA9IHR5cGVvZiBwYXJhbTEgPT09IFwibnVtYmVyXCIgPyBwYXJhbTEgOiAwO1xuICAgICAgICAgICAgY291bnQgPSB0eXBlb2YgcGFyYW0yID09PSBcIm51bWJlclwiID8gcGFyYW0yIDogMDtcbiAgICAgICAgICAgIG9wdGlvbnMgPSBwYXJhbTMgfHwge307XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGJsb2NrU2l6ZSA9IChfYSA9IG9wdGlvbnMuYmxvY2tTaXplKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAwO1xuICAgICAgICBpZiAoYmxvY2tTaXplIDwgMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJibG9ja1NpemUgb3B0aW9uIG11c3QgYmUgPj0gMFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYmxvY2tTaXplID09PSAwKSB7XG4gICAgICAgICAgICBibG9ja1NpemUgPSBERUZBVUxUX0JMT0JfRE9XTkxPQURfQkxPQ0tfQllURVM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9mZnNldCA8IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwib2Zmc2V0IG9wdGlvbiBtdXN0IGJlID49IDBcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvdW50ICYmIGNvdW50IDw9IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiY291bnQgb3B0aW9uIG11c3QgYmUgZ3JlYXRlciB0aGFuIDBcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFvcHRpb25zLmNvbmRpdGlvbnMpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuY29uZGl0aW9ucyA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYkNsaWVudC1kb3dubG9hZFRvQnVmZmVyXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgLy8gQ3VzdG9tZXIgZG9lc24ndCBzcGVjaWZ5IGxlbmd0aCwgZ2V0IGl0XG4gICAgICAgICAgICBpZiAoIWNvdW50KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldFByb3BlcnRpZXMoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKSwgeyB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMgfSkpO1xuICAgICAgICAgICAgICAgIGNvdW50ID0gcmVzcG9uc2UuY29udGVudExlbmd0aCAtIG9mZnNldDtcbiAgICAgICAgICAgICAgICBpZiAoY291bnQgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBvZmZzZXQgJHtvZmZzZXR9IHNob3VsZG4ndCBiZSBsYXJnZXIgdGhhbiBibG9iIHNpemUgJHtyZXNwb25zZS5jb250ZW50TGVuZ3RofWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEFsbG9jYXRlIHRoZSBidWZmZXIgb2Ygc2l6ZSA9IGNvdW50IGlmIHRoZSBidWZmZXIgaXMgbm90IHByb3ZpZGVkXG4gICAgICAgICAgICBpZiAoIWJ1ZmZlcikge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1ZmZlciA9IEJ1ZmZlci5hbGxvYyhjb3VudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBhbGxvY2F0ZSB0aGUgYnVmZmVyIG9mIHNpemU6ICR7Y291bnR9KGluIGJ5dGVzKS4gUGxlYXNlIHRyeSBwYXNzaW5nIHlvdXIgb3duIGJ1ZmZlciB0byB0aGUgXCJkb3dubG9hZFRvQnVmZmVyXCIgbWV0aG9kIG9yIHRyeSB1c2luZyBvdGhlciBtZXRob2RzIGxpa2UgXCJkb3dubG9hZFwiIG9yIFwiZG93bmxvYWRUb0ZpbGVcIi5cXHQgJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChidWZmZXIubGVuZ3RoIDwgY291bnQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgVGhlIGJ1ZmZlcidzIHNpemUgc2hvdWxkIGJlIGVxdWFsIHRvIG9yIGxhcmdlciB0aGFuIHRoZSByZXF1ZXN0IGNvdW50IG9mIGJ5dGVzOiAke2NvdW50fWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHRyYW5zZmVyUHJvZ3Jlc3MgPSAwO1xuICAgICAgICAgICAgY29uc3QgYmF0Y2ggPSBuZXcgQmF0Y2gob3B0aW9ucy5jb25jdXJyZW5jeSk7XG4gICAgICAgICAgICBmb3IgKGxldCBvZmYgPSBvZmZzZXQ7IG9mZiA8IG9mZnNldCArIGNvdW50OyBvZmYgPSBvZmYgKyBibG9ja1NpemUpIHtcbiAgICAgICAgICAgICAgICBiYXRjaC5hZGRPcGVyYXRpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBFeGNsdXNpdmUgY2h1bmsgZW5kIHBvc2l0aW9uXG4gICAgICAgICAgICAgICAgICAgIGxldCBjaHVua0VuZCA9IG9mZnNldCArIGNvdW50O1xuICAgICAgICAgICAgICAgICAgICBpZiAob2ZmICsgYmxvY2tTaXplIDwgY2h1bmtFbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rRW5kID0gb2ZmICsgYmxvY2tTaXplO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5kb3dubG9hZChvZmYsIGNodW5rRW5kIC0gb2ZmLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heFJldHJ5UmVxdWVzdHM6IG9wdGlvbnMubWF4UmV0cnlSZXF1ZXN0c1BlckJsb2NrLFxuICAgICAgICAgICAgICAgICAgICAgICAgY3VzdG9tZXJQcm92aWRlZEtleTogb3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyZWFtID0gcmVzcG9uc2UucmVhZGFibGVTdHJlYW1Cb2R5O1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBzdHJlYW1Ub0J1ZmZlcihzdHJlYW0sIGJ1ZmZlciwgb2ZmIC0gb2Zmc2V0LCBjaHVua0VuZCAtIG9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBwcm9ncmVzcyBhZnRlciBibG9jayBpcyBkb3dubG9hZGVkLCBpbiBjYXNlIG9mIGJsb2NrIHRyeWluZ1xuICAgICAgICAgICAgICAgICAgICAvLyBDb3VsZCBwcm92aWRlIGZpbmVyIGdyYWluZWQgcHJvZ3Jlc3MgdXBkYXRpbmcgaW5zaWRlIEhUVFAgcmVxdWVzdHMsXG4gICAgICAgICAgICAgICAgICAgIC8vIG9ubHkgaWYgY29udmVuaWVuY2UgbGF5ZXIgZG93bmxvYWQgdHJ5IGlzIGVuYWJsZWRcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmZXJQcm9ncmVzcyArPSBjaHVua0VuZCAtIG9mZjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMub25Qcm9ncmVzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5vblByb2dyZXNzKHsgbG9hZGVkQnl0ZXM6IHRyYW5zZmVyUHJvZ3Jlc3MgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IGJhdGNoLmRvKCk7XG4gICAgICAgICAgICByZXR1cm4gYnVmZmVyO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogT05MWSBBVkFJTEFCTEUgSU4gTk9ERS5KUyBSVU5USU1FLlxuICAgICAqXG4gICAgICogRG93bmxvYWRzIGFuIEF6dXJlIEJsb2IgdG8gYSBsb2NhbCBmaWxlLlxuICAgICAqIEZhaWxzIGlmIHRoZSB0aGUgZ2l2ZW4gZmlsZSBwYXRoIGFscmVhZHkgZXhpdHMuXG4gICAgICogT2Zmc2V0IGFuZCBjb3VudCBhcmUgb3B0aW9uYWwsIHBhc3MgMCBhbmQgdW5kZWZpbmVkIHJlc3BlY3RpdmVseSB0byBkb3dubG9hZCB0aGUgZW50aXJlIGJsb2IuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZmlsZVBhdGggLVxuICAgICAqIEBwYXJhbSBvZmZzZXQgLSBGcm9tIHdoaWNoIHBvc2l0aW9uIG9mIHRoZSBibG9jayBibG9iIHRvIGRvd25sb2FkLlxuICAgICAqIEBwYXJhbSBjb3VudCAtIEhvdyBtdWNoIGRhdGEgdG8gYmUgZG93bmxvYWRlZC4gV2lsbCBkb3dubG9hZCB0byB0aGUgZW5kIHdoZW4gcGFzc2luZyB1bmRlZmluZWQuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIEJsb2IgZG93bmxvYWQgb3B0aW9ucy5cbiAgICAgKiBAcmV0dXJucyBUaGUgcmVzcG9uc2UgZGF0YSBmb3IgYmxvYiBkb3dubG9hZCBvcGVyYXRpb24sXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0IHdpdGggcmVhZGFibGVTdHJlYW1Cb2R5IHNldCB0byB1bmRlZmluZWQgc2luY2UgaXRzXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudCBpcyBhbHJlYWR5IHJlYWQgYW5kIHdyaXR0ZW4gaW50byBhIGxvY2FsIGZpbGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdCB0aGUgc3BlY2lmaWVkIHBhdGguXG4gICAgICovXG4gICAgYXN5bmMgZG93bmxvYWRUb0ZpbGUoZmlsZVBhdGgsIG9mZnNldCA9IDAsIGNvdW50LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iQ2xpZW50LWRvd25sb2FkVG9GaWxlXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmRvd25sb2FkKG9mZnNldCwgY291bnQsIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyksIHsgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zIH0pKTtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5yZWFkYWJsZVN0cmVhbUJvZHkpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCByZWFkU3RyZWFtVG9Mb2NhbEZpbGUocmVzcG9uc2UucmVhZGFibGVTdHJlYW1Cb2R5LCBmaWxlUGF0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBUaGUgc3RyZWFtIGlzIG5vIGxvbmdlciBhY2Nlc3NpYmxlIHNvIHNldHRpbmcgaXQgdG8gdW5kZWZpbmVkLlxuICAgICAgICAgICAgcmVzcG9uc2UuYmxvYkRvd25sb2FkU3RyZWFtID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZ2V0QmxvYkFuZENvbnRhaW5lck5hbWVzRnJvbVVybCgpIHtcbiAgICAgICAgbGV0IGNvbnRhaW5lck5hbWU7XG4gICAgICAgIGxldCBibG9iTmFtZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vICBVUkwgbWF5IGxvb2sgbGlrZSB0aGUgZm9sbG93aW5nXG4gICAgICAgICAgICAvLyBcImh0dHBzOi8vbXlhY2NvdW50LmJsb2IuY29yZS53aW5kb3dzLm5ldC9teWNvbnRhaW5lci9ibG9iP3Nhc1N0cmluZ1wiO1xuICAgICAgICAgICAgLy8gXCJodHRwczovL215YWNjb3VudC5ibG9iLmNvcmUud2luZG93cy5uZXQvbXljb250YWluZXIvYmxvYlwiO1xuICAgICAgICAgICAgLy8gXCJodHRwczovL215YWNjb3VudC5ibG9iLmNvcmUud2luZG93cy5uZXQvbXljb250YWluZXIvYmxvYi9hLnR4dD9zYXNTdHJpbmdcIjtcbiAgICAgICAgICAgIC8vIFwiaHR0cHM6Ly9teWFjY291bnQuYmxvYi5jb3JlLndpbmRvd3MubmV0L215Y29udGFpbmVyL2Jsb2IvYS50eHRcIjtcbiAgICAgICAgICAgIC8vIElQdjQvSVB2NiBhZGRyZXNzIGhvc3RzLCBFbmRwb2ludHMgLSBgaHR0cDovLzEyNy4wLjAuMToxMDAwMC9kZXZzdG9yZWFjY291bnQxL2NvbnRhaW5lcm5hbWUvYmxvYmBcbiAgICAgICAgICAgIC8vIGh0dHA6Ly9sb2NhbGhvc3Q6MTAwMDEvZGV2c3RvcmVhY2NvdW50MS9jb250YWluZXJuYW1lL2Jsb2JcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZFVybCA9IG5ldyBVUkwodGhpcy51cmwpO1xuICAgICAgICAgICAgaWYgKHBhcnNlZFVybC5ob3N0LnNwbGl0KFwiLlwiKVsxXSA9PT0gXCJibG9iXCIpIHtcbiAgICAgICAgICAgICAgICAvLyBcImh0dHBzOi8vbXlhY2NvdW50LmJsb2IuY29yZS53aW5kb3dzLm5ldC9jb250YWluZXJuYW1lL2Jsb2JcIi5cbiAgICAgICAgICAgICAgICAvLyAuZ2V0UGF0aCgpIC0+IC9jb250YWluZXJuYW1lL2Jsb2JcbiAgICAgICAgICAgICAgICBjb25zdCBwYXRoQ29tcG9uZW50cyA9IHBhcnNlZFVybC5wYXRobmFtZS5tYXRjaChcIi8oW14vXSopKC8oLiopKT9cIik7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyTmFtZSA9IHBhdGhDb21wb25lbnRzWzFdO1xuICAgICAgICAgICAgICAgIGJsb2JOYW1lID0gcGF0aENvbXBvbmVudHNbM107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpc0lwRW5kcG9pbnRTdHlsZShwYXJzZWRVcmwpKSB7XG4gICAgICAgICAgICAgICAgLy8gSVB2NC9JUHY2IGFkZHJlc3MgaG9zdHMuLi4gRXhhbXBsZSAtIGh0dHA6Ly8xOTIuMC4wLjEwOjEwMDAxL2RldnN0b3JlYWNjb3VudDEvY29udGFpbmVybmFtZS9ibG9iXG4gICAgICAgICAgICAgICAgLy8gU2luZ2xlIHdvcmQgZG9tYWluIHdpdGhvdXQgYSBbZG90XSBpbiB0aGUgZW5kcG9pbnQuLi4gRXhhbXBsZSAtIGh0dHA6Ly9sb2NhbGhvc3Q6MTAwMDEvZGV2c3RvcmVhY2NvdW50MS9jb250YWluZXJuYW1lL2Jsb2JcbiAgICAgICAgICAgICAgICAvLyAuZ2V0UGF0aCgpIC0+IC9kZXZzdG9yZWFjY291bnQxL2NvbnRhaW5lcm5hbWUvYmxvYlxuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGhDb21wb25lbnRzID0gcGFyc2VkVXJsLnBhdGhuYW1lLm1hdGNoKFwiLyhbXi9dKikvKFteL10qKSgvKC4qKSk/XCIpO1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lck5hbWUgPSBwYXRoQ29tcG9uZW50c1syXTtcbiAgICAgICAgICAgICAgICBibG9iTmFtZSA9IHBhdGhDb21wb25lbnRzWzRdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gXCJodHRwczovL2N1c3RvbWRvbWFpbi5jb20vY29udGFpbmVybmFtZS9ibG9iXCIuXG4gICAgICAgICAgICAgICAgLy8gLmdldFBhdGgoKSAtPiAvY29udGFpbmVybmFtZS9ibG9iXG4gICAgICAgICAgICAgICAgY29uc3QgcGF0aENvbXBvbmVudHMgPSBwYXJzZWRVcmwucGF0aG5hbWUubWF0Y2goXCIvKFteL10qKSgvKC4qKSk/XCIpO1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lck5hbWUgPSBwYXRoQ29tcG9uZW50c1sxXTtcbiAgICAgICAgICAgICAgICBibG9iTmFtZSA9IHBhdGhDb21wb25lbnRzWzNdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZGVjb2RlIHRoZSBlbmNvZGVkIGJsb2JOYW1lLCBjb250YWluZXJOYW1lIC0gdG8gZ2V0IGFsbCB0aGUgc3BlY2lhbCBjaGFyYWN0ZXJzIHRoYXQgbWlnaHQgYmUgcHJlc2VudCBpbiB0aGVtXG4gICAgICAgICAgICBjb250YWluZXJOYW1lID0gZGVjb2RlVVJJQ29tcG9uZW50KGNvbnRhaW5lck5hbWUpO1xuICAgICAgICAgICAgYmxvYk5hbWUgPSBkZWNvZGVVUklDb21wb25lbnQoYmxvYk5hbWUpO1xuICAgICAgICAgICAgLy8gQXp1cmUgU3RvcmFnZSBTZXJ2ZXIgd2lsbCByZXBsYWNlIFwiXFxcIiB3aXRoIFwiL1wiIGluIHRoZSBibG9iIG5hbWVzXG4gICAgICAgICAgICAvLyAgIGRvaW5nIHRoZSBzYW1lIGluIHRoZSBTREsgc2lkZSBzbyB0aGF0IHRoZSB1c2VyIGRvZXNuJ3QgaGF2ZSB0byByZXBsYWNlIFwiXFxcIiBpbnN0YW5jZXMgaW4gdGhlIGJsb2JOYW1lXG4gICAgICAgICAgICBibG9iTmFtZSA9IGJsb2JOYW1lLnJlcGxhY2UoL1xcXFwvZywgXCIvXCIpO1xuICAgICAgICAgICAgaWYgKCFjb250YWluZXJOYW1lKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUHJvdmlkZWQgY29udGFpbmVyTmFtZSBpcyBpbnZhbGlkLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IGJsb2JOYW1lLCBjb250YWluZXJOYW1lIH07XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gZXh0cmFjdCBibG9iTmFtZSBhbmQgY29udGFpbmVyTmFtZSB3aXRoIHByb3ZpZGVkIGluZm9ybWF0aW9uLlwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBBc3luY2hyb25vdXNseSBjb3BpZXMgYSBibG9iIHRvIGEgZGVzdGluYXRpb24gd2l0aGluIHRoZSBzdG9yYWdlIGFjY291bnQuXG4gICAgICogSW4gdmVyc2lvbiAyMDEyLTAyLTEyIGFuZCBsYXRlciwgdGhlIHNvdXJjZSBmb3IgYSBDb3B5IEJsb2Igb3BlcmF0aW9uIGNhbiBiZVxuICAgICAqIGEgY29tbWl0dGVkIGJsb2IgaW4gYW55IEF6dXJlIHN0b3JhZ2UgYWNjb3VudC5cbiAgICAgKiBCZWdpbm5pbmcgd2l0aCB2ZXJzaW9uIDIwMTUtMDItMjEsIHRoZSBzb3VyY2UgZm9yIGEgQ29weSBCbG9iIG9wZXJhdGlvbiBjYW4gYmVcbiAgICAgKiBhbiBBenVyZSBmaWxlIGluIGFueSBBenVyZSBzdG9yYWdlIGFjY291bnQuXG4gICAgICogT25seSBzdG9yYWdlIGFjY291bnRzIGNyZWF0ZWQgb24gb3IgYWZ0ZXIgSnVuZSA3dGgsIDIwMTIgYWxsb3cgdGhlIENvcHkgQmxvYlxuICAgICAqIG9wZXJhdGlvbiB0byBjb3B5IGZyb20gYW5vdGhlciBzdG9yYWdlIGFjY291bnQuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvY29weS1ibG9iXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29weVNvdXJjZSAtIHVybCB0byB0aGUgc291cmNlIEF6dXJlIEJsb2IvRmlsZS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIG9wdGlvbnMgdG8gdGhlIEJsb2IgU3RhcnQgQ29weSBGcm9tIFVSTCBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgc3RhcnRDb3B5RnJvbVVSTChjb3B5U291cmNlLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iQ2xpZW50LXN0YXJ0Q29weUZyb21VUkxcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcbiAgICAgICAgICAgIG9wdGlvbnMuY29uZGl0aW9ucyA9IG9wdGlvbnMuY29uZGl0aW9ucyB8fCB7fTtcbiAgICAgICAgICAgIG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucyA9IG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucyB8fCB7fTtcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLmJsb2JDb250ZXh0LnN0YXJ0Q29weUZyb21VUkwoY29weVNvdXJjZSwge1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIG1ldGFkYXRhOiBvcHRpb25zLm1ldGFkYXRhLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICBzb3VyY2VNb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgc291cmNlSWZNYXRjaDogb3B0aW9ucy5zb3VyY2VDb25kaXRpb25zLmlmTWF0Y2gsXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUlmTW9kaWZpZWRTaW5jZTogb3B0aW9ucy5zb3VyY2VDb25kaXRpb25zLmlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlSWZOb25lTWF0Y2g6IG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucy5pZk5vbmVNYXRjaCxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlSWZVbm1vZGlmaWVkU2luY2U6IG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucy5pZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlSWZUYWdzOiBvcHRpb25zLnNvdXJjZUNvbmRpdGlvbnMudGFnQ29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGltbXV0YWJpbGl0eVBvbGljeUV4cGlyeTogKF9iID0gb3B0aW9ucy5pbW11dGFiaWxpdHlQb2xpY3kpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5leHBpcmllc09uLFxuICAgICAgICAgICAgICAgIGltbXV0YWJpbGl0eVBvbGljeU1vZGU6IChfYyA9IG9wdGlvbnMuaW1tdXRhYmlsaXR5UG9saWN5KSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MucG9saWN5TW9kZSxcbiAgICAgICAgICAgICAgICBsZWdhbEhvbGQ6IG9wdGlvbnMubGVnYWxIb2xkLFxuICAgICAgICAgICAgICAgIHJlaHlkcmF0ZVByaW9yaXR5OiBvcHRpb25zLnJlaHlkcmF0ZVByaW9yaXR5LFxuICAgICAgICAgICAgICAgIHRpZXI6IHRvQWNjZXNzVGllcihvcHRpb25zLnRpZXIpLFxuICAgICAgICAgICAgICAgIGJsb2JUYWdzU3RyaW5nOiB0b0Jsb2JUYWdzU3RyaW5nKG9wdGlvbnMudGFncyksXG4gICAgICAgICAgICAgICAgc2VhbEJsb2I6IG9wdGlvbnMuc2VhbEJsb2IsXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogT25seSBhdmFpbGFibGUgZm9yIEJsb2JDbGllbnQgY29uc3RydWN0ZWQgd2l0aCBhIHNoYXJlZCBrZXkgY3JlZGVudGlhbC5cbiAgICAgKlxuICAgICAqIEdlbmVyYXRlcyBhIEJsb2IgU2VydmljZSBTaGFyZWQgQWNjZXNzIFNpZ25hdHVyZSAoU0FTKSBVUkkgYmFzZWQgb24gdGhlIGNsaWVudCBwcm9wZXJ0aWVzXG4gICAgICogYW5kIHBhcmFtZXRlcnMgcGFzc2VkIGluLiBUaGUgU0FTIGlzIHNpZ25lZCBieSB0aGUgc2hhcmVkIGtleSBjcmVkZW50aWFsIG9mIHRoZSBjbGllbnQuXG4gICAgICpcbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9jb25zdHJ1Y3RpbmctYS1zZXJ2aWNlLXNhc1xuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBwYXJhbWV0ZXJzLlxuICAgICAqIEByZXR1cm5zIFRoZSBTQVMgVVJJIGNvbnNpc3Rpbmcgb2YgdGhlIFVSSSB0byB0aGUgcmVzb3VyY2UgcmVwcmVzZW50ZWQgYnkgdGhpcyBjbGllbnQsIGZvbGxvd2VkIGJ5IHRoZSBnZW5lcmF0ZWQgU0FTIHRva2VuLlxuICAgICAqL1xuICAgIGdlbmVyYXRlU2FzVXJsKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICBpZiAoISh0aGlzLmNyZWRlbnRpYWwgaW5zdGFuY2VvZiBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbCkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkNhbiBvbmx5IGdlbmVyYXRlIHRoZSBTQVMgd2hlbiB0aGUgY2xpZW50IGlzIGluaXRpYWxpemVkIHdpdGggYSBzaGFyZWQga2V5IGNyZWRlbnRpYWxcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzYXMgPSBnZW5lcmF0ZUJsb2JTQVNRdWVyeVBhcmFtZXRlcnMoT2JqZWN0LmFzc2lnbih7IGNvbnRhaW5lck5hbWU6IHRoaXMuX2NvbnRhaW5lck5hbWUsIGJsb2JOYW1lOiB0aGlzLl9uYW1lLCBzbmFwc2hvdFRpbWU6IHRoaXMuX3NuYXBzaG90LCB2ZXJzaW9uSWQ6IHRoaXMuX3ZlcnNpb25JZCB9LCBvcHRpb25zKSwgdGhpcy5jcmVkZW50aWFsKS50b1N0cmluZygpO1xuICAgICAgICAgICAgcmVzb2x2ZShhcHBlbmRUb1VSTFF1ZXJ5KHRoaXMudXJsLCBzYXMpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE9ubHkgYXZhaWxhYmxlIGZvciBCbG9iQ2xpZW50IGNvbnN0cnVjdGVkIHdpdGggYSBzaGFyZWQga2V5IGNyZWRlbnRpYWwuXG4gICAgICpcbiAgICAgKiBHZW5lcmF0ZXMgc3RyaW5nIHRvIHNpZ24gZm9yIGEgQmxvYiBTZXJ2aWNlIFNoYXJlZCBBY2Nlc3MgU2lnbmF0dXJlIChTQVMpIFVSSSBiYXNlZCBvblxuICAgICAqIHRoZSBjbGllbnQgcHJvcGVydGllcyBhbmQgcGFyYW1ldGVycyBwYXNzZWQgaW4uIFRoZSBTQVMgaXMgc2lnbmVkIGJ5IHRoZSBzaGFyZWQga2V5IGNyZWRlbnRpYWwgb2YgdGhlIGNsaWVudC5cbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2NvbnN0cnVjdGluZy1hLXNlcnZpY2Utc2FzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIHBhcmFtZXRlcnMuXG4gICAgICogQHJldHVybnMgVGhlIFNBUyBVUkkgY29uc2lzdGluZyBvZiB0aGUgVVJJIHRvIHRoZSByZXNvdXJjZSByZXByZXNlbnRlZCBieSB0aGlzIGNsaWVudCwgZm9sbG93ZWQgYnkgdGhlIGdlbmVyYXRlZCBTQVMgdG9rZW4uXG4gICAgICovXG4gICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhenVyZS9henVyZS1zZGsvdHMtbmFtaW5nLW9wdGlvbnMqL1xuICAgIGdlbmVyYXRlU2FzU3RyaW5nVG9TaWduKG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKCEodGhpcy5jcmVkZW50aWFsIGluc3RhbmNlb2YgU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkNhbiBvbmx5IGdlbmVyYXRlIHRoZSBTQVMgd2hlbiB0aGUgY2xpZW50IGlzIGluaXRpYWxpemVkIHdpdGggYSBzaGFyZWQga2V5IGNyZWRlbnRpYWxcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdlbmVyYXRlQmxvYlNBU1F1ZXJ5UGFyYW1ldGVyc0ludGVybmFsKE9iamVjdC5hc3NpZ24oeyBjb250YWluZXJOYW1lOiB0aGlzLl9jb250YWluZXJOYW1lLCBibG9iTmFtZTogdGhpcy5fbmFtZSwgc25hcHNob3RUaW1lOiB0aGlzLl9zbmFwc2hvdCwgdmVyc2lvbklkOiB0aGlzLl92ZXJzaW9uSWQgfSwgb3B0aW9ucyksIHRoaXMuY3JlZGVudGlhbCkuc3RyaW5nVG9TaWduO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWxldGUgdGhlIGltbXV0YWJsaWxpdHkgcG9saWN5IG9uIHRoZSBibG9iLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBvcHRpb25zIHRvIGRlbGV0ZSBpbW11dGFiaWxpdHkgcG9saWN5IG9uIHRoZSBibG9iLlxuICAgICAqL1xuICAgIGFzeW5jIGRlbGV0ZUltbXV0YWJpbGl0eVBvbGljeShvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iQ2xpZW50LWRlbGV0ZUltbXV0YWJpbGl0eVBvbGljeVwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLmJsb2JDb250ZXh0LmRlbGV0ZUltbXV0YWJpbGl0eVBvbGljeSh7XG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0IGltbXV0YWJpbGl0eSBwb2xpY3kgb24gdGhlIGJsb2IuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIG9wdGlvbnMgdG8gc2V0IGltbXV0YWJpbGl0eSBwb2xpY3kgb24gdGhlIGJsb2IuXG4gICAgICovXG4gICAgYXN5bmMgc2V0SW1tdXRhYmlsaXR5UG9saWN5KGltbXV0YWJpbGl0eVBvbGljeSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYkNsaWVudC1zZXRJbW11dGFiaWxpdHlQb2xpY3lcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5ibG9iQ29udGV4dC5zZXRJbW11dGFiaWxpdHlQb2xpY3koe1xuICAgICAgICAgICAgICAgIGltbXV0YWJpbGl0eVBvbGljeUV4cGlyeTogaW1tdXRhYmlsaXR5UG9saWN5LmV4cGlyaWVzT24sXG4gICAgICAgICAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5TW9kZTogaW1tdXRhYmlsaXR5UG9saWN5LnBvbGljeU1vZGUsXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0IGxlZ2FsIGhvbGQgb24gdGhlIGJsb2IuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIG9wdGlvbnMgdG8gc2V0IGxlZ2FsIGhvbGQgb24gdGhlIGJsb2IuXG4gICAgICovXG4gICAgYXN5bmMgc2V0TGVnYWxIb2xkKGxlZ2FsSG9sZEVuYWJsZWQsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JDbGllbnQtc2V0TGVnYWxIb2xkXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuYmxvYkNvbnRleHQuc2V0TGVnYWxIb2xkKGxlZ2FsSG9sZEVuYWJsZWQsIHtcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgR2V0IEFjY291bnQgSW5mb3JtYXRpb24gb3BlcmF0aW9uIHJldHVybnMgdGhlIHNrdSBuYW1lIGFuZCBhY2NvdW50IGtpbmRcbiAgICAgKiBmb3IgdGhlIHNwZWNpZmllZCBhY2NvdW50LlxuICAgICAqIFRoZSBHZXQgQWNjb3VudCBJbmZvcm1hdGlvbiBvcGVyYXRpb24gaXMgYXZhaWxhYmxlIG9uIHNlcnZpY2UgdmVyc2lvbnMgYmVnaW5uaW5nXG4gICAgICogd2l0aCB2ZXJzaW9uIDIwMTgtMDMtMjguXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvZ2V0LWFjY291bnQtaW5mb3JtYXRpb25cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB0aGUgU2VydmljZSBHZXQgQWNjb3VudCBJbmZvIG9wZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyBSZXNwb25zZSBkYXRhIGZvciB0aGUgU2VydmljZSBHZXQgQWNjb3VudCBJbmZvIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBnZXRBY2NvdW50SW5mbyhvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iQ2xpZW50LWdldEFjY291bnRJbmZvXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuYmxvYkNvbnRleHQuZ2V0QWNjb3VudEluZm8oe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuLyoqXG4gKiBBcHBlbmRCbG9iQ2xpZW50IGRlZmluZXMgYSBzZXQgb2Ygb3BlcmF0aW9ucyBhcHBsaWNhYmxlIHRvIGFwcGVuZCBibG9icy5cbiAqL1xuY2xhc3MgQXBwZW5kQmxvYkNsaWVudCBleHRlbmRzIEJsb2JDbGllbnQge1xuICAgIGNvbnN0cnVjdG9yKHVybE9yQ29ubmVjdGlvblN0cmluZywgY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUsIGJsb2JOYW1lT3JPcHRpb25zLCBcbiAgICAvLyBMZWdhY3ksIG5vIGZpeCBmb3IgZXNsaW50IGVycm9yIHdpdGhvdXQgYnJlYWtpbmcuIERpc2FibGUgaXQgZm9yIHRoaXMgaW50ZXJmYWNlLlxuICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYXp1cmUvYXp1cmUtc2RrL3RzLW5hbWluZy1vcHRpb25zKi9cbiAgICBvcHRpb25zKSB7XG4gICAgICAgIC8vIEluIFR5cGVTY3JpcHQgd2UgY2Fubm90IHNpbXBseSBwYXNzIGFsbCBwYXJhbWV0ZXJzIHRvIHN1cGVyKCkgbGlrZSBiZWxvdyBzbyBoYXZlIHRvIGR1cGxpY2F0ZSB0aGUgY29kZSBpbnN0ZWFkLlxuICAgICAgICAvLyAgIHN1cGVyKHMsIGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lT3JPcHRpb25zLCBibG9iTmFtZU9yT3B0aW9ucywgb3B0aW9ucyk7XG4gICAgICAgIGxldCBwaXBlbGluZTtcbiAgICAgICAgbGV0IHVybDtcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgICAgIGlmIChpc1BpcGVsaW5lTGlrZShjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSkpIHtcbiAgICAgICAgICAgIC8vICh1cmw6IHN0cmluZywgcGlwZWxpbmU6IFBpcGVsaW5lKVxuICAgICAgICAgICAgdXJsID0gdXJsT3JDb25uZWN0aW9uU3RyaW5nO1xuICAgICAgICAgICAgcGlwZWxpbmUgPSBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICgoY29yZVV0aWwuaXNOb2RlICYmIGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lIGluc3RhbmNlb2YgU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwpIHx8XG4gICAgICAgICAgICBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSBpbnN0YW5jZW9mIEFub255bW91c0NyZWRlbnRpYWwgfHxcbiAgICAgICAgICAgIGNvcmVBdXRoLmlzVG9rZW5DcmVkZW50aWFsKGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lKSkge1xuICAgICAgICAgICAgLy8gKHVybDogc3RyaW5nLCBjcmVkZW50aWFsPzogU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwgfCBBbm9ueW1vdXNDcmVkZW50aWFsIHwgVG9rZW5DcmVkZW50aWFsLCBvcHRpb25zPzogU3RvcmFnZVBpcGVsaW5lT3B0aW9ucykgICAgICB1cmwgPSB1cmxPckNvbm5lY3Rpb25TdHJpbmc7XG4gICAgICAgICAgICB1cmwgPSB1cmxPckNvbm5lY3Rpb25TdHJpbmc7XG4gICAgICAgICAgICBvcHRpb25zID0gYmxvYk5hbWVPck9wdGlvbnM7XG4gICAgICAgICAgICBwaXBlbGluZSA9IG5ld1BpcGVsaW5lKGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUgJiZcbiAgICAgICAgICAgIHR5cGVvZiBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgLy8gKHVybDogc3RyaW5nLCBjcmVkZW50aWFsPzogU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwgfCBBbm9ueW1vdXNDcmVkZW50aWFsIHwgVG9rZW5DcmVkZW50aWFsLCBvcHRpb25zPzogU3RvcmFnZVBpcGVsaW5lT3B0aW9ucylcbiAgICAgICAgICAgIHVybCA9IHVybE9yQ29ubmVjdGlvblN0cmluZztcbiAgICAgICAgICAgIC8vIFRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZC4gVXNlIGFub255bW91cyBjcmVkZW50aWFsLlxuICAgICAgICAgICAgcGlwZWxpbmUgPSBuZXdQaXBlbGluZShuZXcgQW5vbnltb3VzQ3JlZGVudGlhbCgpLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSAmJlxuICAgICAgICAgICAgdHlwZW9mIGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lID09PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICBibG9iTmFtZU9yT3B0aW9ucyAmJlxuICAgICAgICAgICAgdHlwZW9mIGJsb2JOYW1lT3JPcHRpb25zID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAvLyAoY29ubmVjdGlvblN0cmluZzogc3RyaW5nLCBjb250YWluZXJOYW1lOiBzdHJpbmcsIGJsb2JOYW1lOiBzdHJpbmcsIG9wdGlvbnM/OiBTdG9yYWdlUGlwZWxpbmVPcHRpb25zKVxuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyTmFtZSA9IGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lO1xuICAgICAgICAgICAgY29uc3QgYmxvYk5hbWUgPSBibG9iTmFtZU9yT3B0aW9ucztcbiAgICAgICAgICAgIGNvbnN0IGV4dHJhY3RlZENyZWRzID0gZXh0cmFjdENvbm5lY3Rpb25TdHJpbmdQYXJ0cyh1cmxPckNvbm5lY3Rpb25TdHJpbmcpO1xuICAgICAgICAgICAgaWYgKGV4dHJhY3RlZENyZWRzLmtpbmQgPT09IFwiQWNjb3VudENvbm5TdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIGlmIChjb3JlVXRpbC5pc05vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2hhcmVkS2V5Q3JlZGVudGlhbCA9IG5ldyBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbChleHRyYWN0ZWRDcmVkcy5hY2NvdW50TmFtZSwgZXh0cmFjdGVkQ3JlZHMuYWNjb3VudEtleSk7XG4gICAgICAgICAgICAgICAgICAgIHVybCA9IGFwcGVuZFRvVVJMUGF0aChhcHBlbmRUb1VSTFBhdGgoZXh0cmFjdGVkQ3JlZHMudXJsLCBlbmNvZGVVUklDb21wb25lbnQoY29udGFpbmVyTmFtZSkpLCBlbmNvZGVVUklDb21wb25lbnQoYmxvYk5hbWUpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zLnByb3h5T3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5wcm94eU9wdGlvbnMgPSBjb3JlUmVzdFBpcGVsaW5lLmdldERlZmF1bHRQcm94eVNldHRpbmdzKGV4dHJhY3RlZENyZWRzLnByb3h5VXJpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBwaXBlbGluZSA9IG5ld1BpcGVsaW5lKHNoYXJlZEtleUNyZWRlbnRpYWwsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQWNjb3VudCBjb25uZWN0aW9uIHN0cmluZyBpcyBvbmx5IHN1cHBvcnRlZCBpbiBOb2RlLmpzIGVudmlyb25tZW50XCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGV4dHJhY3RlZENyZWRzLmtpbmQgPT09IFwiU0FTQ29ublN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgdXJsID1cbiAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG9VUkxQYXRoKGFwcGVuZFRvVVJMUGF0aChleHRyYWN0ZWRDcmVkcy51cmwsIGVuY29kZVVSSUNvbXBvbmVudChjb250YWluZXJOYW1lKSksIGVuY29kZVVSSUNvbXBvbmVudChibG9iTmFtZSkpICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiP1wiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhY3RlZENyZWRzLmFjY291bnRTYXM7XG4gICAgICAgICAgICAgICAgcGlwZWxpbmUgPSBuZXdQaXBlbGluZShuZXcgQW5vbnltb3VzQ3JlZGVudGlhbCgpLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbm5lY3Rpb24gc3RyaW5nIG11c3QgYmUgZWl0aGVyIGFuIEFjY291bnQgY29ubmVjdGlvbiBzdHJpbmcgb3IgYSBTQVMgY29ubmVjdGlvbiBzdHJpbmdcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3Rpbmcgbm9uLWVtcHR5IHN0cmluZ3MgZm9yIGNvbnRhaW5lck5hbWUgYW5kIGJsb2JOYW1lIHBhcmFtZXRlcnNcIik7XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIodXJsLCBwaXBlbGluZSk7XG4gICAgICAgIHRoaXMuYXBwZW5kQmxvYkNvbnRleHQgPSB0aGlzLnN0b3JhZ2VDbGllbnRDb250ZXh0LmFwcGVuZEJsb2I7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgQXBwZW5kQmxvYkNsaWVudCBvYmplY3QgaWRlbnRpY2FsIHRvIHRoZSBzb3VyY2UgYnV0IHdpdGggdGhlXG4gICAgICogc3BlY2lmaWVkIHNuYXBzaG90IHRpbWVzdGFtcC5cbiAgICAgKiBQcm92aWRlIFwiXCIgd2lsbCByZW1vdmUgdGhlIHNuYXBzaG90IGFuZCByZXR1cm4gYSBDbGllbnQgdG8gdGhlIGJhc2UgYmxvYi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzbmFwc2hvdCAtIFRoZSBzbmFwc2hvdCB0aW1lc3RhbXAuXG4gICAgICogQHJldHVybnMgQSBuZXcgQXBwZW5kQmxvYkNsaWVudCBvYmplY3QgaWRlbnRpY2FsIHRvIHRoZSBzb3VyY2UgYnV0IHdpdGggdGhlIHNwZWNpZmllZCBzbmFwc2hvdCB0aW1lc3RhbXAuXG4gICAgICovXG4gICAgd2l0aFNuYXBzaG90KHNuYXBzaG90KSB7XG4gICAgICAgIHJldHVybiBuZXcgQXBwZW5kQmxvYkNsaWVudChzZXRVUkxQYXJhbWV0ZXIodGhpcy51cmwsIFVSTENvbnN0YW50cy5QYXJhbWV0ZXJzLlNOQVBTSE9ULCBzbmFwc2hvdC5sZW5ndGggPT09IDAgPyB1bmRlZmluZWQgOiBzbmFwc2hvdCksIHRoaXMucGlwZWxpbmUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgMC1sZW5ndGggYXBwZW5kIGJsb2IuIENhbGwgQXBwZW5kQmxvY2sgdG8gYXBwZW5kIGRhdGEgdG8gYW4gYXBwZW5kIGJsb2IuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvcHV0LWJsb2JcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB0aGUgQXBwZW5kIEJsb2NrIENyZWF0ZSBvcGVyYXRpb24uXG4gICAgICpcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNhZ2U6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnN0IGFwcGVuZEJsb2JDbGllbnQgPSBjb250YWluZXJDbGllbnQuZ2V0QXBwZW5kQmxvYkNsaWVudChcIjxibG9iIG5hbWU+XCIpO1xuICAgICAqIGF3YWl0IGFwcGVuZEJsb2JDbGllbnQuY3JlYXRlKCk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgYXN5bmMgY3JlYXRlKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIGVuc3VyZUNwa0lmU3BlY2lmaWVkKG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSwgdGhpcy5pc0h0dHBzKTtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJBcHBlbmRCbG9iQ2xpZW50LWNyZWF0ZVwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYSwgX2IsIF9jO1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuYXBwZW5kQmxvYkNvbnRleHQuY3JlYXRlKDAsIHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBibG9iSHR0cEhlYWRlcnM6IG9wdGlvbnMuYmxvYkhUVFBIZWFkZXJzLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIG1ldGFkYXRhOiBvcHRpb25zLm1ldGFkYXRhLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICBjcGtJbmZvOiBvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksXG4gICAgICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiBvcHRpb25zLmVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgICAgICAgICBpbW11dGFiaWxpdHlQb2xpY3lFeHBpcnk6IChfYiA9IG9wdGlvbnMuaW1tdXRhYmlsaXR5UG9saWN5KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuZXhwaXJpZXNPbixcbiAgICAgICAgICAgICAgICBpbW11dGFiaWxpdHlQb2xpY3lNb2RlOiAoX2MgPSBvcHRpb25zLmltbXV0YWJpbGl0eVBvbGljeSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLnBvbGljeU1vZGUsXG4gICAgICAgICAgICAgICAgbGVnYWxIb2xkOiBvcHRpb25zLmxlZ2FsSG9sZCxcbiAgICAgICAgICAgICAgICBibG9iVGFnc1N0cmluZzogdG9CbG9iVGFnc1N0cmluZyhvcHRpb25zLnRhZ3MpLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSAwLWxlbmd0aCBhcHBlbmQgYmxvYi4gQ2FsbCBBcHBlbmRCbG9jayB0byBhcHBlbmQgZGF0YSB0byBhbiBhcHBlbmQgYmxvYi5cbiAgICAgKiBJZiB0aGUgYmxvYiB3aXRoIHRoZSBzYW1lIG5hbWUgYWxyZWFkeSBleGlzdHMsIHRoZSBjb250ZW50IG9mIHRoZSBleGlzdGluZyBibG9iIHdpbGwgcmVtYWluIHVuY2hhbmdlZC5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9wdXQtYmxvYlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLVxuICAgICAqL1xuICAgIGFzeW5jIGNyZWF0ZUlmTm90RXhpc3RzKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCBjb25kaXRpb25zID0geyBpZk5vbmVNYXRjaDogRVRhZ0FueSB9O1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkFwcGVuZEJsb2JDbGllbnQtY3JlYXRlSWZOb3RFeGlzdHNcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLmNyZWF0ZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHVwZGF0ZWRPcHRpb25zKSwgeyBjb25kaXRpb25zIH0pKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7IHN1Y2NlZWRlZDogdHJ1ZSB9LCByZXMpLCB7IF9yZXNwb25zZTogcmVzLl9yZXNwb25zZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCgoX2EgPSBlLmRldGFpbHMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5lcnJvckNvZGUpID09PSBcIkJsb2JBbHJlYWR5RXhpc3RzXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7IHN1Y2NlZWRlZDogZmFsc2UgfSwgKF9iID0gZS5yZXNwb25zZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnBhcnNlZEhlYWRlcnMpLCB7IF9yZXNwb25zZTogZS5yZXNwb25zZSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNlYWxzIHRoZSBhcHBlbmQgYmxvYiwgbWFraW5nIGl0IHJlYWQgb25seS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC1cbiAgICAgKi9cbiAgICBhc3luYyBzZWFsKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQXBwZW5kQmxvYkNsaWVudC1zZWFsXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuYXBwZW5kQmxvYkNvbnRleHQuc2VhbCh7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgYXBwZW5kUG9zaXRpb25BY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbW1pdHMgYSBuZXcgYmxvY2sgb2YgZGF0YSB0byB0aGUgZW5kIG9mIHRoZSBleGlzdGluZyBhcHBlbmQgYmxvYi5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9hcHBlbmQtYmxvY2tcbiAgICAgKlxuICAgICAqIEBwYXJhbSBib2R5IC0gRGF0YSB0byBiZSBhcHBlbmRlZC5cbiAgICAgKiBAcGFyYW0gY29udGVudExlbmd0aCAtIExlbmd0aCBvZiB0aGUgYm9keSBpbiBieXRlcy5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gdGhlIEFwcGVuZCBCbG9jayBvcGVyYXRpb24uXG4gICAgICpcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNhZ2U6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnN0IGNvbnRlbnQgPSBcIkhlbGxvIFdvcmxkIVwiO1xuICAgICAqXG4gICAgICogLy8gQ3JlYXRlIGEgbmV3IGFwcGVuZCBibG9iIGFuZCBhcHBlbmQgZGF0YSB0byB0aGUgYmxvYi5cbiAgICAgKiBjb25zdCBuZXdBcHBlbmRCbG9iQ2xpZW50ID0gY29udGFpbmVyQ2xpZW50LmdldEFwcGVuZEJsb2JDbGllbnQoXCI8YmxvYiBuYW1lPlwiKTtcbiAgICAgKiBhd2FpdCBuZXdBcHBlbmRCbG9iQ2xpZW50LmNyZWF0ZSgpO1xuICAgICAqIGF3YWl0IG5ld0FwcGVuZEJsb2JDbGllbnQuYXBwZW5kQmxvY2soY29udGVudCwgY29udGVudC5sZW5ndGgpO1xuICAgICAqXG4gICAgICogLy8gQXBwZW5kIGRhdGEgdG8gYW4gZXhpc3RpbmcgYXBwZW5kIGJsb2IuXG4gICAgICogY29uc3QgZXhpc3RpbmdBcHBlbmRCbG9iQ2xpZW50ID0gY29udGFpbmVyQ2xpZW50LmdldEFwcGVuZEJsb2JDbGllbnQoXCI8YmxvYiBuYW1lPlwiKTtcbiAgICAgKiBhd2FpdCBleGlzdGluZ0FwcGVuZEJsb2JDbGllbnQuYXBwZW5kQmxvY2soY29udGVudCwgY29udGVudC5sZW5ndGgpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGFzeW5jIGFwcGVuZEJsb2NrKGJvZHksIGNvbnRlbnRMZW5ndGgsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIGVuc3VyZUNwa0lmU3BlY2lmaWVkKG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSwgdGhpcy5pc0h0dHBzKTtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJBcHBlbmRCbG9iQ2xpZW50LWFwcGVuZEJsb2NrXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuYXBwZW5kQmxvYkNvbnRleHQuYXBwZW5kQmxvY2soY29udGVudExlbmd0aCwgYm9keSwge1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGFwcGVuZFBvc2l0aW9uQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICByZXF1ZXN0T3B0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICBvblVwbG9hZFByb2dyZXNzOiBvcHRpb25zLm9uUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbmFsQ29udGVudE1ENTogb3B0aW9ucy50cmFuc2FjdGlvbmFsQ29udGVudE1ENSxcbiAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbmFsQ29udGVudENyYzY0OiBvcHRpb25zLnRyYW5zYWN0aW9uYWxDb250ZW50Q3JjNjQsXG4gICAgICAgICAgICAgICAgY3BrSW5mbzogb3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LFxuICAgICAgICAgICAgICAgIGVuY3J5cHRpb25TY29wZTogb3B0aW9ucy5lbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIEFwcGVuZCBCbG9jayBvcGVyYXRpb24gY29tbWl0cyBhIG5ldyBibG9jayBvZiBkYXRhIHRvIHRoZSBlbmQgb2YgYW4gZXhpc3RpbmcgYXBwZW5kIGJsb2JcbiAgICAgKiB3aGVyZSB0aGUgY29udGVudHMgYXJlIHJlYWQgZnJvbSBhIHNvdXJjZSB1cmwuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvYXBwZW5kLWJsb2NrLWZyb20tdXJsXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc291cmNlVVJMIC1cbiAgICAgKiAgICAgICAgICAgICAgICAgVGhlIHVybCB0byB0aGUgYmxvYiB0aGF0IHdpbGwgYmUgdGhlIHNvdXJjZSBvZiB0aGUgY29weS4gQSBzb3VyY2UgYmxvYiBpbiB0aGUgc2FtZSBzdG9yYWdlIGFjY291bnQgY2FuXG4gICAgICogICAgICAgICAgICAgICAgIGJlIGF1dGhlbnRpY2F0ZWQgdmlhIFNoYXJlZCBLZXkuIEhvd2V2ZXIsIGlmIHRoZSBzb3VyY2UgaXMgYSBibG9iIGluIGFub3RoZXIgYWNjb3VudCwgdGhlIHNvdXJjZSBibG9iXG4gICAgICogICAgICAgICAgICAgICAgIG11c3QgZWl0aGVyIGJlIHB1YmxpYyBvciBtdXN0IGJlIGF1dGhlbnRpY2F0ZWQgdmlhIGEgc2hhcmVkIGFjY2VzcyBzaWduYXR1cmUuIElmIHRoZSBzb3VyY2UgYmxvYiBpc1xuICAgICAqICAgICAgICAgICAgICAgICBwdWJsaWMsIG5vIGF1dGhlbnRpY2F0aW9uIGlzIHJlcXVpcmVkIHRvIHBlcmZvcm0gdGhlIG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0gc291cmNlT2Zmc2V0IC0gT2Zmc2V0IGluIHNvdXJjZSB0byBiZSBhcHBlbmRlZFxuICAgICAqIEBwYXJhbSBjb3VudCAtIE51bWJlciBvZiBieXRlcyB0byBiZSBhcHBlbmRlZCBhcyBhIGJsb2NrXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLVxuICAgICAqL1xuICAgIGFzeW5jIGFwcGVuZEJsb2NrRnJvbVVSTChzb3VyY2VVUkwsIHNvdXJjZU9mZnNldCwgY291bnQsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucyA9IG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucyB8fCB7fTtcbiAgICAgICAgZW5zdXJlQ3BrSWZTcGVjaWZpZWQob3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LCB0aGlzLmlzSHR0cHMpO1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkFwcGVuZEJsb2JDbGllbnQtYXBwZW5kQmxvY2tGcm9tVVJMXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZTtcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLmFwcGVuZEJsb2JDb250ZXh0LmFwcGVuZEJsb2NrRnJvbVVybChzb3VyY2VVUkwsIDAsIHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBzb3VyY2VSYW5nZTogcmFuZ2VUb1N0cmluZyh7IG9mZnNldDogc291cmNlT2Zmc2V0LCBjb3VudCB9KSxcbiAgICAgICAgICAgICAgICBzb3VyY2VDb250ZW50TUQ1OiBvcHRpb25zLnNvdXJjZUNvbnRlbnRNRDUsXG4gICAgICAgICAgICAgICAgc291cmNlQ29udGVudENyYzY0OiBvcHRpb25zLnNvdXJjZUNvbnRlbnRDcmM2NCxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBhcHBlbmRQb3NpdGlvbkFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgc291cmNlTW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUlmTWF0Y2g6IChfYiA9IG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmlmTWF0Y2gsXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUlmTW9kaWZpZWRTaW5jZTogKF9jID0gb3B0aW9ucy5zb3VyY2VDb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VJZk5vbmVNYXRjaDogKF9kID0gb3B0aW9ucy5zb3VyY2VDb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuaWZOb25lTWF0Y2gsXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUlmVW5tb2RpZmllZFNpbmNlOiAoX2UgPSBvcHRpb25zLnNvdXJjZUNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZS5pZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNvcHlTb3VyY2VBdXRob3JpemF0aW9uOiBodHRwQXV0aG9yaXphdGlvblRvU3RyaW5nKG9wdGlvbnMuc291cmNlQXV0aG9yaXphdGlvbiksXG4gICAgICAgICAgICAgICAgY3BrSW5mbzogb3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LFxuICAgICAgICAgICAgICAgIGVuY3J5cHRpb25TY29wZTogb3B0aW9ucy5lbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4vKipcbiAqIEJsb2NrQmxvYkNsaWVudCBkZWZpbmVzIGEgc2V0IG9mIG9wZXJhdGlvbnMgYXBwbGljYWJsZSB0byBibG9jayBibG9icy5cbiAqL1xuY2xhc3MgQmxvY2tCbG9iQ2xpZW50IGV4dGVuZHMgQmxvYkNsaWVudCB7XG4gICAgY29uc3RydWN0b3IodXJsT3JDb25uZWN0aW9uU3RyaW5nLCBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSwgYmxvYk5hbWVPck9wdGlvbnMsIFxuICAgIC8vIExlZ2FjeSwgbm8gZml4IGZvciBlc2xpbnQgZXJyb3Igd2l0aG91dCBicmVha2luZy4gRGlzYWJsZSBpdCBmb3IgdGhpcyBpbnRlcmZhY2UuXG4gICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhenVyZS9henVyZS1zZGsvdHMtbmFtaW5nLW9wdGlvbnMqL1xuICAgIG9wdGlvbnMpIHtcbiAgICAgICAgLy8gSW4gVHlwZVNjcmlwdCB3ZSBjYW5ub3Qgc2ltcGx5IHBhc3MgYWxsIHBhcmFtZXRlcnMgdG8gc3VwZXIoKSBsaWtlIGJlbG93IHNvIGhhdmUgdG8gZHVwbGljYXRlIHRoZSBjb2RlIGluc3RlYWQuXG4gICAgICAgIC8vICAgc3VwZXIocywgY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWVPck9wdGlvbnMsIGJsb2JOYW1lT3JPcHRpb25zLCBvcHRpb25zKTtcbiAgICAgICAgbGV0IHBpcGVsaW5lO1xuICAgICAgICBsZXQgdXJsO1xuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgaWYgKGlzUGlwZWxpbmVMaWtlKGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lKSkge1xuICAgICAgICAgICAgLy8gKHVybDogc3RyaW5nLCBwaXBlbGluZTogUGlwZWxpbmUpXG4gICAgICAgICAgICB1cmwgPSB1cmxPckNvbm5lY3Rpb25TdHJpbmc7XG4gICAgICAgICAgICBwaXBlbGluZSA9IGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKChjb3JlVXRpbC5pc05vZGUgJiYgY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUgaW5zdGFuY2VvZiBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbCkgfHxcbiAgICAgICAgICAgIGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lIGluc3RhbmNlb2YgQW5vbnltb3VzQ3JlZGVudGlhbCB8fFxuICAgICAgICAgICAgY29yZUF1dGguaXNUb2tlbkNyZWRlbnRpYWwoY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUpKSB7XG4gICAgICAgICAgICAvLyAodXJsOiBzdHJpbmcsIGNyZWRlbnRpYWw/OiBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbCB8IEFub255bW91c0NyZWRlbnRpYWwgfCBUb2tlbkNyZWRlbnRpYWwsIG9wdGlvbnM/OiBTdG9yYWdlUGlwZWxpbmVPcHRpb25zKVxuICAgICAgICAgICAgdXJsID0gdXJsT3JDb25uZWN0aW9uU3RyaW5nO1xuICAgICAgICAgICAgb3B0aW9ucyA9IGJsb2JOYW1lT3JPcHRpb25zO1xuICAgICAgICAgICAgcGlwZWxpbmUgPSBuZXdQaXBlbGluZShjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIWNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lICYmXG4gICAgICAgICAgICB0eXBlb2YgY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIC8vICh1cmw6IHN0cmluZywgY3JlZGVudGlhbD86IFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsIHwgQW5vbnltb3VzQ3JlZGVudGlhbCB8IFRva2VuQ3JlZGVudGlhbCwgb3B0aW9ucz86IFN0b3JhZ2VQaXBlbGluZU9wdGlvbnMpXG4gICAgICAgICAgICAvLyBUaGUgc2Vjb25kIHBhcmFtZXRlciBpcyB1bmRlZmluZWQuIFVzZSBhbm9ueW1vdXMgY3JlZGVudGlhbC5cbiAgICAgICAgICAgIHVybCA9IHVybE9yQ29ubmVjdGlvblN0cmluZztcbiAgICAgICAgICAgIGlmIChibG9iTmFtZU9yT3B0aW9ucyAmJiB0eXBlb2YgYmxvYk5hbWVPck9wdGlvbnMgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zID0gYmxvYk5hbWVPck9wdGlvbnM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwaXBlbGluZSA9IG5ld1BpcGVsaW5lKG5ldyBBbm9ueW1vdXNDcmVkZW50aWFsKCksIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lICYmXG4gICAgICAgICAgICB0eXBlb2YgY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICAgIGJsb2JOYW1lT3JPcHRpb25zICYmXG4gICAgICAgICAgICB0eXBlb2YgYmxvYk5hbWVPck9wdGlvbnMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIC8vIChjb25uZWN0aW9uU3RyaW5nOiBzdHJpbmcsIGNvbnRhaW5lck5hbWU6IHN0cmluZywgYmxvYk5hbWU6IHN0cmluZywgb3B0aW9ucz86IFN0b3JhZ2VQaXBlbGluZU9wdGlvbnMpXG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJOYW1lID0gY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWU7XG4gICAgICAgICAgICBjb25zdCBibG9iTmFtZSA9IGJsb2JOYW1lT3JPcHRpb25zO1xuICAgICAgICAgICAgY29uc3QgZXh0cmFjdGVkQ3JlZHMgPSBleHRyYWN0Q29ubmVjdGlvblN0cmluZ1BhcnRzKHVybE9yQ29ubmVjdGlvblN0cmluZyk7XG4gICAgICAgICAgICBpZiAoZXh0cmFjdGVkQ3JlZHMua2luZCA9PT0gXCJBY2NvdW50Q29ublN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvcmVVdGlsLmlzTm9kZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaGFyZWRLZXlDcmVkZW50aWFsID0gbmV3IFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsKGV4dHJhY3RlZENyZWRzLmFjY291bnROYW1lLCBleHRyYWN0ZWRDcmVkcy5hY2NvdW50S2V5KTtcbiAgICAgICAgICAgICAgICAgICAgdXJsID0gYXBwZW5kVG9VUkxQYXRoKGFwcGVuZFRvVVJMUGF0aChleHRyYWN0ZWRDcmVkcy51cmwsIGVuY29kZVVSSUNvbXBvbmVudChjb250YWluZXJOYW1lKSksIGVuY29kZVVSSUNvbXBvbmVudChibG9iTmFtZSkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMucHJveHlPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnByb3h5T3B0aW9ucyA9IGNvcmVSZXN0UGlwZWxpbmUuZ2V0RGVmYXVsdFByb3h5U2V0dGluZ3MoZXh0cmFjdGVkQ3JlZHMucHJveHlVcmkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHBpcGVsaW5lID0gbmV3UGlwZWxpbmUoc2hhcmVkS2V5Q3JlZGVudGlhbCwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBY2NvdW50IGNvbm5lY3Rpb24gc3RyaW5nIGlzIG9ubHkgc3VwcG9ydGVkIGluIE5vZGUuanMgZW52aXJvbm1lbnRcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZXh0cmFjdGVkQ3JlZHMua2luZCA9PT0gXCJTQVNDb25uU3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICB1cmwgPVxuICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb1VSTFBhdGgoYXBwZW5kVG9VUkxQYXRoKGV4dHJhY3RlZENyZWRzLnVybCwgZW5jb2RlVVJJQ29tcG9uZW50KGNvbnRhaW5lck5hbWUpKSwgZW5jb2RlVVJJQ29tcG9uZW50KGJsb2JOYW1lKSkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCI/XCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFjdGVkQ3JlZHMuYWNjb3VudFNhcztcbiAgICAgICAgICAgICAgICBwaXBlbGluZSA9IG5ld1BpcGVsaW5lKG5ldyBBbm9ueW1vdXNDcmVkZW50aWFsKCksIG9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29ubmVjdGlvbiBzdHJpbmcgbXVzdCBiZSBlaXRoZXIgYW4gQWNjb3VudCBjb25uZWN0aW9uIHN0cmluZyBvciBhIFNBUyBjb25uZWN0aW9uIHN0cmluZ1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGluZyBub24tZW1wdHkgc3RyaW5ncyBmb3IgY29udGFpbmVyTmFtZSBhbmQgYmxvYk5hbWUgcGFyYW1ldGVyc1wiKTtcbiAgICAgICAgfVxuICAgICAgICBzdXBlcih1cmwsIHBpcGVsaW5lKTtcbiAgICAgICAgdGhpcy5ibG9ja0Jsb2JDb250ZXh0ID0gdGhpcy5zdG9yYWdlQ2xpZW50Q29udGV4dC5ibG9ja0Jsb2I7XG4gICAgICAgIHRoaXMuX2Jsb2JDb250ZXh0ID0gdGhpcy5zdG9yYWdlQ2xpZW50Q29udGV4dC5ibG9iO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IEJsb2NrQmxvYkNsaWVudCBvYmplY3QgaWRlbnRpY2FsIHRvIHRoZSBzb3VyY2UgYnV0IHdpdGggdGhlXG4gICAgICogc3BlY2lmaWVkIHNuYXBzaG90IHRpbWVzdGFtcC5cbiAgICAgKiBQcm92aWRlIFwiXCIgd2lsbCByZW1vdmUgdGhlIHNuYXBzaG90IGFuZCByZXR1cm4gYSBVUkwgdG8gdGhlIGJhc2UgYmxvYi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzbmFwc2hvdCAtIFRoZSBzbmFwc2hvdCB0aW1lc3RhbXAuXG4gICAgICogQHJldHVybnMgQSBuZXcgQmxvY2tCbG9iQ2xpZW50IG9iamVjdCBpZGVudGljYWwgdG8gdGhlIHNvdXJjZSBidXQgd2l0aCB0aGUgc3BlY2lmaWVkIHNuYXBzaG90IHRpbWVzdGFtcC5cbiAgICAgKi9cbiAgICB3aXRoU25hcHNob3Qoc25hcHNob3QpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBCbG9ja0Jsb2JDbGllbnQoc2V0VVJMUGFyYW1ldGVyKHRoaXMudXJsLCBVUkxDb25zdGFudHMuUGFyYW1ldGVycy5TTkFQU0hPVCwgc25hcHNob3QubGVuZ3RoID09PSAwID8gdW5kZWZpbmVkIDogc25hcHNob3QpLCB0aGlzLnBpcGVsaW5lKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogT05MWSBBVkFJTEFCTEUgSU4gTk9ERS5KUyBSVU5USU1FLlxuICAgICAqXG4gICAgICogUXVpY2sgcXVlcnkgZm9yIGEgSlNPTiBvciBDU1YgZm9ybWF0dGVkIGJsb2IuXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzYWdlIChOb2RlLmpzKTpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogLy8gUXVlcnkgYW5kIGNvbnZlcnQgYSBibG9iIHRvIGEgc3RyaW5nXG4gICAgICogY29uc3QgcXVlcnlCbG9ja0Jsb2JSZXNwb25zZSA9IGF3YWl0IGJsb2NrQmxvYkNsaWVudC5xdWVyeShcInNlbGVjdCAqIGZyb20gQmxvYlN0b3JhZ2VcIik7XG4gICAgICogY29uc3QgZG93bmxvYWRlZCA9IChhd2FpdCBzdHJlYW1Ub0J1ZmZlcihxdWVyeUJsb2NrQmxvYlJlc3BvbnNlLnJlYWRhYmxlU3RyZWFtQm9keSkpLnRvU3RyaW5nKCk7XG4gICAgICogY29uc29sZS5sb2coXCJRdWVyeSBibG9iIGNvbnRlbnQ6XCIsIGRvd25sb2FkZWQpO1xuICAgICAqXG4gICAgICogYXN5bmMgZnVuY3Rpb24gc3RyZWFtVG9CdWZmZXIocmVhZGFibGVTdHJlYW0pIHtcbiAgICAgKiAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICogICAgIGNvbnN0IGNodW5rcyA9IFtdO1xuICAgICAqICAgICByZWFkYWJsZVN0cmVhbS5vbihcImRhdGFcIiwgKGRhdGEpID0+IHtcbiAgICAgKiAgICAgICBjaHVua3MucHVzaChkYXRhIGluc3RhbmNlb2YgQnVmZmVyID8gZGF0YSA6IEJ1ZmZlci5mcm9tKGRhdGEpKTtcbiAgICAgKiAgICAgfSk7XG4gICAgICogICAgIHJlYWRhYmxlU3RyZWFtLm9uKFwiZW5kXCIsICgpID0+IHtcbiAgICAgKiAgICAgICByZXNvbHZlKEJ1ZmZlci5jb25jYXQoY2h1bmtzKSk7XG4gICAgICogICAgIH0pO1xuICAgICAqICAgICByZWFkYWJsZVN0cmVhbS5vbihcImVycm9yXCIsIHJlamVjdCk7XG4gICAgICogICB9KTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcXVlcnkgLVxuICAgICAqIEBwYXJhbSBvcHRpb25zIC1cbiAgICAgKi9cbiAgICBhc3luYyBxdWVyeShxdWVyeSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGVuc3VyZUNwa0lmU3BlY2lmaWVkKG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSwgdGhpcy5pc0h0dHBzKTtcbiAgICAgICAgaWYgKCFjb3JlVXRpbC5pc05vZGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgb3BlcmF0aW9uIGN1cnJlbnRseSBpcyBvbmx5IHN1cHBvcnRlZCBpbiBOb2RlLmpzLlwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2NrQmxvYkNsaWVudC1xdWVyeVwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5fYmxvYkNvbnRleHQucXVlcnkoe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIHF1ZXJ5UmVxdWVzdDoge1xuICAgICAgICAgICAgICAgICAgICBxdWVyeVR5cGU6IFwiU1FMXCIsXG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IHF1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICBpbnB1dFNlcmlhbGl6YXRpb246IHRvUXVlcnlTZXJpYWxpemF0aW9uKG9wdGlvbnMuaW5wdXRUZXh0Q29uZmlndXJhdGlvbiksXG4gICAgICAgICAgICAgICAgICAgIG91dHB1dFNlcmlhbGl6YXRpb246IHRvUXVlcnlTZXJpYWxpemF0aW9uKG9wdGlvbnMub3V0cHV0VGV4dENvbmZpZ3VyYXRpb24pLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIGNwa0luZm86IG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEJsb2JRdWVyeVJlc3BvbnNlKHJlc3BvbnNlLCB7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgb25Qcm9ncmVzczogb3B0aW9ucy5vblByb2dyZXNzLFxuICAgICAgICAgICAgICAgIG9uRXJyb3I6IG9wdGlvbnMub25FcnJvcixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBibG9jayBibG9iLCBvciB1cGRhdGVzIHRoZSBjb250ZW50IG9mIGFuIGV4aXN0aW5nIGJsb2NrIGJsb2IuXG4gICAgICogVXBkYXRpbmcgYW4gZXhpc3RpbmcgYmxvY2sgYmxvYiBvdmVyd3JpdGVzIGFueSBleGlzdGluZyBtZXRhZGF0YSBvbiB0aGUgYmxvYi5cbiAgICAgKiBQYXJ0aWFsIHVwZGF0ZXMgYXJlIG5vdCBzdXBwb3J0ZWQ7IHRoZSBjb250ZW50IG9mIHRoZSBleGlzdGluZyBibG9iIGlzXG4gICAgICogb3ZlcndyaXR0ZW4gd2l0aCB0aGUgbmV3IGNvbnRlbnQuIFRvIHBlcmZvcm0gYSBwYXJ0aWFsIHVwZGF0ZSBvZiBhIGJsb2NrIGJsb2IncyxcbiAgICAgKiB1c2Uge0BsaW5rIHN0YWdlQmxvY2t9IGFuZCB7QGxpbmsgY29tbWl0QmxvY2tMaXN0fS5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgYSBub24tcGFyYWxsZWwgdXBsb2FkaW5nIG1ldGhvZCwgcGxlYXNlIHVzZSB7QGxpbmsgdXBsb2FkRmlsZX0sXG4gICAgICoge0BsaW5rIHVwbG9hZFN0cmVhbX0gb3Ige0BsaW5rIHVwbG9hZEJyb3dzZXJEYXRhfSBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlXG4gICAgICogd2l0aCBjb25jdXJyZW5jeSB1cGxvYWRpbmcuXG4gICAgICpcbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9wdXQtYmxvYlxuICAgICAqXG4gICAgICogQHBhcmFtIGJvZHkgLSBCbG9iLCBzdHJpbmcsIEFycmF5QnVmZmVyLCBBcnJheUJ1ZmZlclZpZXcgb3IgYSBmdW5jdGlvblxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIHJldHVybnMgYSBuZXcgUmVhZGFibGUgc3RyZWFtIHdob3NlIG9mZnNldCBpcyBmcm9tIGRhdGEgc291cmNlIGJlZ2lubmluZy5cbiAgICAgKiBAcGFyYW0gY29udGVudExlbmd0aCAtIExlbmd0aCBvZiBib2R5IGluIGJ5dGVzLiBVc2UgQnVmZmVyLmJ5dGVMZW5ndGgoKSB0byBjYWxjdWxhdGUgYm9keSBsZW5ndGggZm9yIGFcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcgaW5jbHVkaW5nIG5vbiBub24tQmFzZTY0L0hleC1lbmNvZGVkIGNoYXJhY3RlcnMuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHRoZSBCbG9jayBCbG9iIFVwbG9hZCBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgdGhlIEJsb2NrIEJsb2IgVXBsb2FkIG9wZXJhdGlvbi5cbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNhZ2U6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnN0IGNvbnRlbnQgPSBcIkhlbGxvIHdvcmxkIVwiO1xuICAgICAqIGNvbnN0IHVwbG9hZEJsb2JSZXNwb25zZSA9IGF3YWl0IGJsb2NrQmxvYkNsaWVudC51cGxvYWQoY29udGVudCwgY29udGVudC5sZW5ndGgpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGFzeW5jIHVwbG9hZChib2R5LCBjb250ZW50TGVuZ3RoLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0gb3B0aW9ucy5jb25kaXRpb25zIHx8IHt9O1xuICAgICAgICBlbnN1cmVDcGtJZlNwZWNpZmllZChvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksIHRoaXMuaXNIdHRwcyk7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvY2tCbG9iQ2xpZW50LXVwbG9hZFwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYSwgX2IsIF9jO1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuYmxvY2tCbG9iQ29udGV4dC51cGxvYWQoY29udGVudExlbmd0aCwgYm9keSwge1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGJsb2JIdHRwSGVhZGVyczogb3B0aW9ucy5ibG9iSFRUUEhlYWRlcnMsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbWV0YWRhdGE6IG9wdGlvbnMubWV0YWRhdGEsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIHJlcXVlc3RPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgIG9uVXBsb2FkUHJvZ3Jlc3M6IG9wdGlvbnMub25Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNwa0luZm86IG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSxcbiAgICAgICAgICAgICAgICBlbmNyeXB0aW9uU2NvcGU6IG9wdGlvbnMuZW5jcnlwdGlvblNjb3BlLFxuICAgICAgICAgICAgICAgIGltbXV0YWJpbGl0eVBvbGljeUV4cGlyeTogKF9iID0gb3B0aW9ucy5pbW11dGFiaWxpdHlQb2xpY3kpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5leHBpcmllc09uLFxuICAgICAgICAgICAgICAgIGltbXV0YWJpbGl0eVBvbGljeU1vZGU6IChfYyA9IG9wdGlvbnMuaW1tdXRhYmlsaXR5UG9saWN5KSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MucG9saWN5TW9kZSxcbiAgICAgICAgICAgICAgICBsZWdhbEhvbGQ6IG9wdGlvbnMubGVnYWxIb2xkLFxuICAgICAgICAgICAgICAgIHRpZXI6IHRvQWNjZXNzVGllcihvcHRpb25zLnRpZXIpLFxuICAgICAgICAgICAgICAgIGJsb2JUYWdzU3RyaW5nOiB0b0Jsb2JUYWdzU3RyaW5nKG9wdGlvbnMudGFncyksXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBCbG9jayBCbG9iIHdoZXJlIHRoZSBjb250ZW50cyBvZiB0aGUgYmxvYiBhcmUgcmVhZCBmcm9tIGEgZ2l2ZW4gVVJMLlxuICAgICAqIFRoaXMgQVBJIGlzIHN1cHBvcnRlZCBiZWdpbm5pbmcgd2l0aCB0aGUgMjAyMC0wNC0wOCB2ZXJzaW9uLiBQYXJ0aWFsIHVwZGF0ZXNcbiAgICAgKiBhcmUgbm90IHN1cHBvcnRlZCB3aXRoIFB1dCBCbG9iIGZyb20gVVJMOyB0aGUgY29udGVudCBvZiBhbiBleGlzdGluZyBibG9iIGlzIG92ZXJ3cml0dGVuIHdpdGhcbiAgICAgKiB0aGUgY29udGVudCBvZiB0aGUgbmV3IGJsb2IuICBUbyBwZXJmb3JtIHBhcnRpYWwgdXBkYXRlcyB0byBhIGJsb2NrIGJsb2LigJlzIGNvbnRlbnRzIHVzaW5nIGFcbiAgICAgKiBzb3VyY2UgVVJMLCB1c2Uge0BsaW5rIHN0YWdlQmxvY2tGcm9tVVJMfSBhbmQge0BsaW5rIGNvbW1pdEJsb2NrTGlzdH0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc291cmNlVVJMIC0gU3BlY2lmaWVzIHRoZSBVUkwgb2YgdGhlIGJsb2IuIFRoZSB2YWx1ZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF5IGJlIGEgVVJMIG9mIHVwIHRvIDIgS0IgaW4gbGVuZ3RoIHRoYXQgc3BlY2lmaWVzIGEgYmxvYi5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB2YWx1ZSBzaG91bGQgYmUgVVJMLWVuY29kZWQgYXMgaXQgd291bGQgYXBwZWFyXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBhIHJlcXVlc3QgVVJJLiBUaGUgc291cmNlIGJsb2IgbXVzdCBlaXRoZXIgYmUgcHVibGljXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBvciBtdXN0IGJlIGF1dGhlbnRpY2F0ZWQgdmlhIGEgc2hhcmVkIGFjY2VzcyBzaWduYXR1cmUuXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB0aGUgc291cmNlIGJsb2IgaXMgcHVibGljLCBubyBhdXRoZW50aWNhdGlvbiBpcyByZXF1aXJlZFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gcGVyZm9ybSB0aGUgb3BlcmF0aW9uLiBIZXJlIGFyZSBzb21lIGV4YW1wbGVzIG9mIHNvdXJjZSBvYmplY3QgVVJMczpcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gaHR0cHM6Ly9teWFjY291bnQuYmxvYi5jb3JlLndpbmRvd3MubmV0L215Y29udGFpbmVyL215YmxvYlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBodHRwczovL215YWNjb3VudC5ibG9iLmNvcmUud2luZG93cy5uZXQvbXljb250YWluZXIvbXlibG9iP3NuYXBzaG90PTxEYXRlVGltZT5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgYXN5bmMgc3luY1VwbG9hZEZyb21VUkwoc291cmNlVVJMLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0gb3B0aW9ucy5jb25kaXRpb25zIHx8IHt9O1xuICAgICAgICBlbnN1cmVDcGtJZlNwZWNpZmllZChvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksIHRoaXMuaXNIdHRwcyk7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvY2tCbG9iQ2xpZW50LXN5bmNVcGxvYWRGcm9tVVJMXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZSwgX2Y7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5ibG9ja0Jsb2JDb250ZXh0LnB1dEJsb2JGcm9tVXJsKDAsIHNvdXJjZVVSTCwgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKSwgeyBibG9iSHR0cEhlYWRlcnM6IG9wdGlvbnMuYmxvYkhUVFBIZWFkZXJzLCBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucywgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLCBzb3VyY2VNb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgc291cmNlSWZNYXRjaDogKF9iID0gb3B0aW9ucy5zb3VyY2VDb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaWZNYXRjaCxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlSWZNb2RpZmllZFNpbmNlOiAoX2MgPSBvcHRpb25zLnNvdXJjZUNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5pZk1vZGlmaWVkU2luY2UsXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUlmTm9uZU1hdGNoOiAoX2QgPSBvcHRpb25zLnNvdXJjZUNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZC5pZk5vbmVNYXRjaCxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlSWZVbm1vZGlmaWVkU2luY2U6IChfZSA9IG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucykgPT09IG51bGwgfHwgX2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9lLmlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VJZlRhZ3M6IChfZiA9IG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucykgPT09IG51bGwgfHwgX2YgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9mLnRhZ0NvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgfSwgY3BrSW5mbzogb3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LCBjb3B5U291cmNlQXV0aG9yaXphdGlvbjogaHR0cEF1dGhvcml6YXRpb25Ub1N0cmluZyhvcHRpb25zLnNvdXJjZUF1dGhvcml6YXRpb24pLCB0aWVyOiB0b0FjY2Vzc1RpZXIob3B0aW9ucy50aWVyKSwgYmxvYlRhZ3NTdHJpbmc6IHRvQmxvYlRhZ3NTdHJpbmcob3B0aW9ucy50YWdzKSwgY29weVNvdXJjZVRhZ3M6IG9wdGlvbnMuY29weVNvdXJjZVRhZ3MsIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyB9KSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVXBsb2FkcyB0aGUgc3BlY2lmaWVkIGJsb2NrIHRvIHRoZSBibG9jayBibG9iJ3MgXCJzdGFnaW5nIGFyZWFcIiB0byBiZSBsYXRlclxuICAgICAqIGNvbW1pdHRlZCBieSBhIGNhbGwgdG8gY29tbWl0QmxvY2tMaXN0LlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL3B1dC1ibG9ja1xuICAgICAqXG4gICAgICogQHBhcmFtIGJsb2NrSWQgLSBBIDY0LWJ5dGUgdmFsdWUgdGhhdCBpcyBiYXNlNjQtZW5jb2RlZFxuICAgICAqIEBwYXJhbSBib2R5IC0gRGF0YSB0byB1cGxvYWQgdG8gdGhlIHN0YWdpbmcgYXJlYS5cbiAgICAgKiBAcGFyYW0gY29udGVudExlbmd0aCAtIE51bWJlciBvZiBieXRlcyB0byB1cGxvYWQuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHRoZSBCbG9jayBCbG9iIFN0YWdlIEJsb2NrIG9wZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyBSZXNwb25zZSBkYXRhIGZvciB0aGUgQmxvY2sgQmxvYiBTdGFnZSBCbG9jayBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgc3RhZ2VCbG9jayhibG9ja0lkLCBib2R5LCBjb250ZW50TGVuZ3RoLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgZW5zdXJlQ3BrSWZTcGVjaWZpZWQob3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LCB0aGlzLmlzSHR0cHMpO1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2NrQmxvYkNsaWVudC1zdGFnZUJsb2NrXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuYmxvY2tCbG9iQ29udGV4dC5zdGFnZUJsb2NrKGJsb2NrSWQsIGNvbnRlbnRMZW5ndGgsIGJvZHksIHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICByZXF1ZXN0T3B0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICBvblVwbG9hZFByb2dyZXNzOiBvcHRpb25zLm9uUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbmFsQ29udGVudE1ENTogb3B0aW9ucy50cmFuc2FjdGlvbmFsQ29udGVudE1ENSxcbiAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbmFsQ29udGVudENyYzY0OiBvcHRpb25zLnRyYW5zYWN0aW9uYWxDb250ZW50Q3JjNjQsXG4gICAgICAgICAgICAgICAgY3BrSW5mbzogb3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LFxuICAgICAgICAgICAgICAgIGVuY3J5cHRpb25TY29wZTogb3B0aW9ucy5lbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIFN0YWdlIEJsb2NrIEZyb20gVVJMIG9wZXJhdGlvbiBjcmVhdGVzIGEgbmV3IGJsb2NrIHRvIGJlIGNvbW1pdHRlZCBhcyBwYXJ0XG4gICAgICogb2YgYSBibG9iIHdoZXJlIHRoZSBjb250ZW50cyBhcmUgcmVhZCBmcm9tIGEgVVJMLlxuICAgICAqIFRoaXMgQVBJIGlzIGF2YWlsYWJsZSBzdGFydGluZyBpbiB2ZXJzaW9uIDIwMTgtMDMtMjguXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvcHV0LWJsb2NrLWZyb20tdXJsXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYmxvY2tJZCAtIEEgNjQtYnl0ZSB2YWx1ZSB0aGF0IGlzIGJhc2U2NC1lbmNvZGVkXG4gICAgICogQHBhcmFtIHNvdXJjZVVSTCAtIFNwZWNpZmllcyB0aGUgVVJMIG9mIHRoZSBibG9iLiBUaGUgdmFsdWVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heSBiZSBhIFVSTCBvZiB1cCB0byAyIEtCIGluIGxlbmd0aCB0aGF0IHNwZWNpZmllcyBhIGJsb2IuXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgdmFsdWUgc2hvdWxkIGJlIFVSTC1lbmNvZGVkIGFzIGl0IHdvdWxkIGFwcGVhclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gYSByZXF1ZXN0IFVSSS4gVGhlIHNvdXJjZSBibG9iIG11c3QgZWl0aGVyIGJlIHB1YmxpY1xuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgbXVzdCBiZSBhdXRoZW50aWNhdGVkIHZpYSBhIHNoYXJlZCBhY2Nlc3Mgc2lnbmF0dXJlLlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgdGhlIHNvdXJjZSBibG9iIGlzIHB1YmxpYywgbm8gYXV0aGVudGljYXRpb24gaXMgcmVxdWlyZWRcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHBlcmZvcm0gdGhlIG9wZXJhdGlvbi4gSGVyZSBhcmUgc29tZSBleGFtcGxlcyBvZiBzb3VyY2Ugb2JqZWN0IFVSTHM6XG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAtIGh0dHBzOi8vbXlhY2NvdW50LmJsb2IuY29yZS53aW5kb3dzLm5ldC9teWNvbnRhaW5lci9teWJsb2JcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gaHR0cHM6Ly9teWFjY291bnQuYmxvYi5jb3JlLndpbmRvd3MubmV0L215Y29udGFpbmVyL215YmxvYj9zbmFwc2hvdD08RGF0ZVRpbWU+XG4gICAgICogQHBhcmFtIG9mZnNldCAtIEZyb20gd2hpY2ggcG9zaXRpb24gb2YgdGhlIGJsb2IgdG8gZG93bmxvYWQsIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAwXG4gICAgICogQHBhcmFtIGNvdW50IC0gSG93IG11Y2ggZGF0YSB0byBiZSBkb3dubG9hZGVkLCBncmVhdGVyIHRoYW4gMC4gV2lsbCBkb3dubG9hZCB0byB0aGUgZW5kIHdoZW4gdW5kZWZpbmVkXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHRoZSBCbG9jayBCbG9iIFN0YWdlIEJsb2NrIEZyb20gVVJMIG9wZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyBSZXNwb25zZSBkYXRhIGZvciB0aGUgQmxvY2sgQmxvYiBTdGFnZSBCbG9jayBGcm9tIFVSTCBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgc3RhZ2VCbG9ja0Zyb21VUkwoYmxvY2tJZCwgc291cmNlVVJMLCBvZmZzZXQgPSAwLCBjb3VudCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGVuc3VyZUNwa0lmU3BlY2lmaWVkKG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSwgdGhpcy5pc0h0dHBzKTtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9ja0Jsb2JDbGllbnQtc3RhZ2VCbG9ja0Zyb21VUkxcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5ibG9ja0Jsb2JDb250ZXh0LnN0YWdlQmxvY2tGcm9tVVJMKGJsb2NrSWQsIDAsIHNvdXJjZVVSTCwge1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIHNvdXJjZUNvbnRlbnRNRDU6IG9wdGlvbnMuc291cmNlQ29udGVudE1ENSxcbiAgICAgICAgICAgICAgICBzb3VyY2VDb250ZW50Q3JjNjQ6IG9wdGlvbnMuc291cmNlQ29udGVudENyYzY0LFxuICAgICAgICAgICAgICAgIHNvdXJjZVJhbmdlOiBvZmZzZXQgPT09IDAgJiYgIWNvdW50ID8gdW5kZWZpbmVkIDogcmFuZ2VUb1N0cmluZyh7IG9mZnNldCwgY291bnQgfSksXG4gICAgICAgICAgICAgICAgY3BrSW5mbzogb3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LFxuICAgICAgICAgICAgICAgIGVuY3J5cHRpb25TY29wZTogb3B0aW9ucy5lbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgICAgICAgICAgY29weVNvdXJjZUF1dGhvcml6YXRpb246IGh0dHBBdXRob3JpemF0aW9uVG9TdHJpbmcob3B0aW9ucy5zb3VyY2VBdXRob3JpemF0aW9uKSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXcml0ZXMgYSBibG9iIGJ5IHNwZWNpZnlpbmcgdGhlIGxpc3Qgb2YgYmxvY2sgSURzIHRoYXQgbWFrZSB1cCB0aGUgYmxvYi5cbiAgICAgKiBJbiBvcmRlciB0byBiZSB3cml0dGVuIGFzIHBhcnQgb2YgYSBibG9iLCBhIGJsb2NrIG11c3QgaGF2ZSBiZWVuIHN1Y2Nlc3NmdWxseSB3cml0dGVuXG4gICAgICogdG8gdGhlIHNlcnZlciBpbiBhIHByaW9yIHtAbGluayBzdGFnZUJsb2NrfSBvcGVyYXRpb24uIFlvdSBjYW4gY2FsbCB7QGxpbmsgY29tbWl0QmxvY2tMaXN0fSB0b1xuICAgICAqIHVwZGF0ZSBhIGJsb2IgYnkgdXBsb2FkaW5nIG9ubHkgdGhvc2UgYmxvY2tzIHRoYXQgaGF2ZSBjaGFuZ2VkLCB0aGVuIGNvbW1pdHRpbmcgdGhlIG5ldyBhbmQgZXhpc3RpbmdcbiAgICAgKiBibG9ja3MgdG9nZXRoZXIuIEFueSBibG9ja3Mgbm90IHNwZWNpZmllZCBpbiB0aGUgYmxvY2sgbGlzdCBhbmQgcGVybWFuZW50bHkgZGVsZXRlZC5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9wdXQtYmxvY2stbGlzdFxuICAgICAqXG4gICAgICogQHBhcmFtIGJsb2NrcyAtICBBcnJheSBvZiA2NC1ieXRlIHZhbHVlIHRoYXQgaXMgYmFzZTY0LWVuY29kZWRcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gdGhlIEJsb2NrIEJsb2IgQ29tbWl0IEJsb2NrIExpc3Qgb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIFJlc3BvbnNlIGRhdGEgZm9yIHRoZSBCbG9jayBCbG9iIENvbW1pdCBCbG9jayBMaXN0IG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBjb21taXRCbG9ja0xpc3QoYmxvY2tzLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0gb3B0aW9ucy5jb25kaXRpb25zIHx8IHt9O1xuICAgICAgICBlbnN1cmVDcGtJZlNwZWNpZmllZChvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksIHRoaXMuaXNIdHRwcyk7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvY2tCbG9iQ2xpZW50LWNvbW1pdEJsb2NrTGlzdFwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYSwgX2IsIF9jO1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuYmxvY2tCbG9iQ29udGV4dC5jb21taXRCbG9ja0xpc3QoeyBsYXRlc3Q6IGJsb2NrcyB9LCB7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgYmxvYkh0dHBIZWFkZXJzOiBvcHRpb25zLmJsb2JIVFRQSGVhZGVycyxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBtZXRhZGF0YTogb3B0aW9ucy5tZXRhZGF0YSxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgY3BrSW5mbzogb3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LFxuICAgICAgICAgICAgICAgIGVuY3J5cHRpb25TY29wZTogb3B0aW9ucy5lbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgICAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5RXhwaXJ5OiAoX2IgPSBvcHRpb25zLmltbXV0YWJpbGl0eVBvbGljeSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmV4cGlyaWVzT24sXG4gICAgICAgICAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5TW9kZTogKF9jID0gb3B0aW9ucy5pbW11dGFiaWxpdHlQb2xpY3kpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5wb2xpY3lNb2RlLFxuICAgICAgICAgICAgICAgIGxlZ2FsSG9sZDogb3B0aW9ucy5sZWdhbEhvbGQsXG4gICAgICAgICAgICAgICAgdGllcjogdG9BY2Nlc3NUaWVyKG9wdGlvbnMudGllciksXG4gICAgICAgICAgICAgICAgYmxvYlRhZ3NTdHJpbmc6IHRvQmxvYlRhZ3NTdHJpbmcob3B0aW9ucy50YWdzKSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBsaXN0IG9mIGJsb2NrcyB0aGF0IGhhdmUgYmVlbiB1cGxvYWRlZCBhcyBwYXJ0IG9mIGEgYmxvY2sgYmxvYlxuICAgICAqIHVzaW5nIHRoZSBzcGVjaWZpZWQgYmxvY2sgbGlzdCBmaWx0ZXIuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvZ2V0LWJsb2NrLWxpc3RcbiAgICAgKlxuICAgICAqIEBwYXJhbSBsaXN0VHlwZSAtIFNwZWNpZmllcyB3aGV0aGVyIHRvIHJldHVybiB0aGUgbGlzdCBvZiBjb21taXR0ZWQgYmxvY2tzLFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBsaXN0IG9mIHVuY29tbWl0dGVkIGJsb2Nrcywgb3IgYm90aCBsaXN0cyB0b2dldGhlci5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gdGhlIEJsb2NrIEJsb2IgR2V0IEJsb2NrIExpc3Qgb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIFJlc3BvbnNlIGRhdGEgZm9yIHRoZSBCbG9jayBCbG9iIEdldCBCbG9jayBMaXN0IG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBnZXRCbG9ja0xpc3QobGlzdFR5cGUsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2NrQmxvYkNsaWVudC1nZXRCbG9ja0xpc3RcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBjb25zdCByZXMgPSBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLmJsb2NrQmxvYkNvbnRleHQuZ2V0QmxvY2tMaXN0KGxpc3RUeXBlLCB7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIGlmICghcmVzLmNvbW1pdHRlZEJsb2Nrcykge1xuICAgICAgICAgICAgICAgIHJlcy5jb21taXR0ZWRCbG9ja3MgPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghcmVzLnVuY29tbWl0dGVkQmxvY2tzKSB7XG4gICAgICAgICAgICAgICAgcmVzLnVuY29tbWl0dGVkQmxvY2tzID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gSGlnaCBsZXZlbCBmdW5jdGlvbnNcbiAgICAvKipcbiAgICAgKiBVcGxvYWRzIGEgQnVmZmVyKE5vZGUuanMpL0Jsb2IoYnJvd3NlcnMpL0FycmF5QnVmZmVyL0FycmF5QnVmZmVyVmlldyBvYmplY3QgdG8gYSBCbG9ja0Jsb2IuXG4gICAgICpcbiAgICAgKiBXaGVuIGRhdGEgbGVuZ3RoIGlzIG5vIG1vcmUgdGhhbiB0aGUgc3BlY2lmaWxlZCB7QGxpbmsgQmxvY2tCbG9iUGFyYWxsZWxVcGxvYWRPcHRpb25zLm1heFNpbmdsZVNob3RTaXplfSAoZGVmYXVsdCBpc1xuICAgICAqIHtAbGluayBCTE9DS19CTE9CX01BWF9VUExPQURfQkxPQl9CWVRFU30pLCB0aGlzIG1ldGhvZCB3aWxsIHVzZSAxIHtAbGluayB1cGxvYWR9IGNhbGwgdG8gZmluaXNoIHRoZSB1cGxvYWQuXG4gICAgICogT3RoZXJ3aXNlLCB0aGlzIG1ldGhvZCB3aWxsIGNhbGwge0BsaW5rIHN0YWdlQmxvY2t9IHRvIHVwbG9hZCBibG9ja3MsIGFuZCBmaW5hbGx5IGNhbGwge0BsaW5rIGNvbW1pdEJsb2NrTGlzdH1cbiAgICAgKiB0byBjb21taXQgdGhlIGJsb2NrIGxpc3QuXG4gICAgICpcbiAgICAgKiBBIGNvbW1vbiB7QGxpbmsgQmxvY2tCbG9iUGFyYWxsZWxVcGxvYWRPcHRpb25zLmJsb2JIVFRQSGVhZGVyc30gb3B0aW9uIHRvIHNldCBpc1xuICAgICAqIGBibG9iQ29udGVudFR5cGVgLCBlbmFibGluZyB0aGUgYnJvd3NlciB0byBwcm92aWRlXG4gICAgICogZnVuY3Rpb25hbGl0eSBiYXNlZCBvbiBmaWxlIHR5cGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGF0YSAtIEJ1ZmZlcihOb2RlLmpzKSwgQmxvYiwgQXJyYXlCdWZmZXIgb3IgQXJyYXlCdWZmZXJWaWV3XG4gICAgICogQHBhcmFtIG9wdGlvbnMgLVxuICAgICAqL1xuICAgIGFzeW5jIHVwbG9hZERhdGEoZGF0YSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvY2tCbG9iQ2xpZW50LXVwbG9hZERhdGFcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBpZiAoY29yZVV0aWwuaXNOb2RlKSB7XG4gICAgICAgICAgICAgICAgbGV0IGJ1ZmZlcjtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIEJ1ZmZlcikge1xuICAgICAgICAgICAgICAgICAgICBidWZmZXIgPSBkYXRhO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChkYXRhIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgYnVmZmVyID0gQnVmZmVyLmZyb20oZGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkYXRhID0gZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgYnVmZmVyID0gQnVmZmVyLmZyb20oZGF0YS5idWZmZXIsIGRhdGEuYnl0ZU9mZnNldCwgZGF0YS5ieXRlTGVuZ3RoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudXBsb2FkU2Vla2FibGVJbnRlcm5hbCgob2Zmc2V0LCBzaXplKSA9PiBidWZmZXIuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBzaXplKSwgYnVmZmVyLmJ5dGVMZW5ndGgsIHVwZGF0ZWRPcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJyb3dzZXJCbG9iID0gbmV3IEJsb2IoW2RhdGFdKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy51cGxvYWRTZWVrYWJsZUludGVybmFsKChvZmZzZXQsIHNpemUpID0+IGJyb3dzZXJCbG9iLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgc2l6ZSksIGJyb3dzZXJCbG9iLnNpemUsIHVwZGF0ZWRPcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE9OTFkgQVZBSUxBQkxFIElOIEJST1dTRVJTLlxuICAgICAqXG4gICAgICogVXBsb2FkcyBhIGJyb3dzZXIgQmxvYi9GaWxlL0FycmF5QnVmZmVyL0FycmF5QnVmZmVyVmlldyBvYmplY3QgdG8gYmxvY2sgYmxvYi5cbiAgICAgKlxuICAgICAqIFdoZW4gYnVmZmVyIGxlbmd0aCBsZXNzZXIgdGhhbiBvciBlcXVhbCB0byAyNTZNQiwgdGhpcyBtZXRob2Qgd2lsbCB1c2UgMSB1cGxvYWQgY2FsbCB0byBmaW5pc2ggdGhlIHVwbG9hZC5cbiAgICAgKiBPdGhlcndpc2UsIHRoaXMgbWV0aG9kIHdpbGwgY2FsbCB7QGxpbmsgc3RhZ2VCbG9ja30gdG8gdXBsb2FkIGJsb2NrcywgYW5kIGZpbmFsbHkgY2FsbFxuICAgICAqIHtAbGluayBjb21taXRCbG9ja0xpc3R9IHRvIGNvbW1pdCB0aGUgYmxvY2sgbGlzdC5cbiAgICAgKlxuICAgICAqIEEgY29tbW9uIHtAbGluayBCbG9ja0Jsb2JQYXJhbGxlbFVwbG9hZE9wdGlvbnMuYmxvYkhUVFBIZWFkZXJzfSBvcHRpb24gdG8gc2V0IGlzXG4gICAgICogYGJsb2JDb250ZW50VHlwZWAsIGVuYWJsaW5nIHRoZSBicm93c2VyIHRvIHByb3ZpZGVcbiAgICAgKiBmdW5jdGlvbmFsaXR5IGJhc2VkIG9uIGZpbGUgdHlwZS5cbiAgICAgKlxuICAgICAqIEBkZXByZWNhdGVkIFVzZSB7QGxpbmsgdXBsb2FkRGF0YX0gaW5zdGVhZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBicm93c2VyRGF0YSAtIEJsb2IsIEZpbGUsIEFycmF5QnVmZmVyIG9yIEFycmF5QnVmZmVyVmlld1xuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB1cGxvYWQgYnJvd3NlciBkYXRhLlxuICAgICAqIEByZXR1cm5zIFJlc3BvbnNlIGRhdGEgZm9yIHRoZSBCbG9iIFVwbG9hZCBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgdXBsb2FkQnJvd3NlckRhdGEoYnJvd3NlckRhdGEsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2NrQmxvYkNsaWVudC11cGxvYWRCcm93c2VyRGF0YVwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJyb3dzZXJCbG9iID0gbmV3IEJsb2IoW2Jyb3dzZXJEYXRhXSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51cGxvYWRTZWVrYWJsZUludGVybmFsKChvZmZzZXQsIHNpemUpID0+IGJyb3dzZXJCbG9iLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgc2l6ZSksIGJyb3dzZXJCbG9iLnNpemUsIHVwZGF0ZWRPcHRpb25zKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqXG4gICAgICogVXBsb2FkcyBkYXRhIHRvIGJsb2NrIGJsb2IuIFJlcXVpcmVzIGEgYm9keUZhY3RvcnkgYXMgdGhlIGRhdGEgc291cmNlLFxuICAgICAqIHdoaWNoIG5lZWQgdG8gcmV0dXJuIGEge0BsaW5rIEh0dHBSZXF1ZXN0Qm9keX0gb2JqZWN0IHdpdGggdGhlIG9mZnNldCBhbmQgc2l6ZSBwcm92aWRlZC5cbiAgICAgKlxuICAgICAqIFdoZW4gZGF0YSBsZW5ndGggaXMgbm8gbW9yZSB0aGFuIHRoZSBzcGVjaWZpZWQge0BsaW5rIEJsb2NrQmxvYlBhcmFsbGVsVXBsb2FkT3B0aW9ucy5tYXhTaW5nbGVTaG90U2l6ZX0gKGRlZmF1bHQgaXNcbiAgICAgKiB7QGxpbmsgQkxPQ0tfQkxPQl9NQVhfVVBMT0FEX0JMT0JfQllURVN9KSwgdGhpcyBtZXRob2Qgd2lsbCB1c2UgMSB7QGxpbmsgdXBsb2FkfSBjYWxsIHRvIGZpbmlzaCB0aGUgdXBsb2FkLlxuICAgICAqIE90aGVyd2lzZSwgdGhpcyBtZXRob2Qgd2lsbCBjYWxsIHtAbGluayBzdGFnZUJsb2NrfSB0byB1cGxvYWQgYmxvY2tzLCBhbmQgZmluYWxseSBjYWxsIHtAbGluayBjb21taXRCbG9ja0xpc3R9XG4gICAgICogdG8gY29tbWl0IHRoZSBibG9jayBsaXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIGJvZHlGYWN0b3J5IC1cbiAgICAgKiBAcGFyYW0gc2l6ZSAtIHNpemUgb2YgdGhlIGRhdGEgdG8gdXBsb2FkLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBVcGxvYWQgdG8gQmxvY2sgQmxvYiBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgdGhlIEJsb2IgVXBsb2FkIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyB1cGxvYWRTZWVrYWJsZUludGVybmFsKGJvZHlGYWN0b3J5LCBzaXplLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgbGV0IGJsb2NrU2l6ZSA9IChfYSA9IG9wdGlvbnMuYmxvY2tTaXplKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAwO1xuICAgICAgICBpZiAoYmxvY2tTaXplIDwgMCB8fCBibG9ja1NpemUgPiBCTE9DS19CTE9CX01BWF9TVEFHRV9CTE9DS19CWVRFUykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYGJsb2NrU2l6ZSBvcHRpb24gbXVzdCBiZSA+PSAwIGFuZCA8PSAke0JMT0NLX0JMT0JfTUFYX1NUQUdFX0JMT0NLX0JZVEVTfWApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1heFNpbmdsZVNob3RTaXplID0gKF9iID0gb3B0aW9ucy5tYXhTaW5nbGVTaG90U2l6ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogQkxPQ0tfQkxPQl9NQVhfVVBMT0FEX0JMT0JfQllURVM7XG4gICAgICAgIGlmIChtYXhTaW5nbGVTaG90U2l6ZSA8IDAgfHwgbWF4U2luZ2xlU2hvdFNpemUgPiBCTE9DS19CTE9CX01BWF9VUExPQURfQkxPQl9CWVRFUykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYG1heFNpbmdsZVNob3RTaXplIG9wdGlvbiBtdXN0IGJlID49IDAgYW5kIDw9ICR7QkxPQ0tfQkxPQl9NQVhfVVBMT0FEX0JMT0JfQllURVN9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJsb2NrU2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgaWYgKHNpemUgPiBCTE9DS19CTE9CX01BWF9TVEFHRV9CTE9DS19CWVRFUyAqIEJMT0NLX0JMT0JfTUFYX0JMT0NLUykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGAke3NpemV9IGlzIHRvbyBsYXJnZXIgdG8gdXBsb2FkIHRvIGEgYmxvY2sgYmxvYi5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzaXplID4gbWF4U2luZ2xlU2hvdFNpemUpIHtcbiAgICAgICAgICAgICAgICBibG9ja1NpemUgPSBNYXRoLmNlaWwoc2l6ZSAvIEJMT0NLX0JMT0JfTUFYX0JMT0NLUyk7XG4gICAgICAgICAgICAgICAgaWYgKGJsb2NrU2l6ZSA8IERFRkFVTFRfQkxPQl9ET1dOTE9BRF9CTE9DS19CWVRFUykge1xuICAgICAgICAgICAgICAgICAgICBibG9ja1NpemUgPSBERUZBVUxUX0JMT0JfRE9XTkxPQURfQkxPQ0tfQllURVM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghb3B0aW9ucy5ibG9iSFRUUEhlYWRlcnMpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuYmxvYkhUVFBIZWFkZXJzID0ge307XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFvcHRpb25zLmNvbmRpdGlvbnMpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuY29uZGl0aW9ucyA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvY2tCbG9iQ2xpZW50LXVwbG9hZFNlZWthYmxlSW50ZXJuYWxcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBpZiAoc2l6ZSA8PSBtYXhTaW5nbGVTaG90U2l6ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLnVwbG9hZChib2R5RmFjdG9yeSgwLCBzaXplKSwgc2l6ZSwgdXBkYXRlZE9wdGlvbnMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG51bUJsb2NrcyA9IE1hdGguZmxvb3IoKHNpemUgLSAxKSAvIGJsb2NrU2l6ZSkgKyAxO1xuICAgICAgICAgICAgaWYgKG51bUJsb2NrcyA+IEJMT0NLX0JMT0JfTUFYX0JMT0NLUykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBUaGUgYnVmZmVyJ3Mgc2l6ZSBpcyB0b28gYmlnIG9yIHRoZSBCbG9ja1NpemUgaXMgdG9vIHNtYWxsO2AgK1xuICAgICAgICAgICAgICAgICAgICBgdGhlIG51bWJlciBvZiBibG9ja3MgbXVzdCBiZSA8PSAke0JMT0NLX0JMT0JfTUFYX0JMT0NLU31gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGJsb2NrTGlzdCA9IFtdO1xuICAgICAgICAgICAgY29uc3QgYmxvY2tJRFByZWZpeCA9IGNvcmVVdGlsLnJhbmRvbVVVSUQoKTtcbiAgICAgICAgICAgIGxldCB0cmFuc2ZlclByb2dyZXNzID0gMDtcbiAgICAgICAgICAgIGNvbnN0IGJhdGNoID0gbmV3IEJhdGNoKG9wdGlvbnMuY29uY3VycmVuY3kpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1CbG9ja3M7IGkrKykge1xuICAgICAgICAgICAgICAgIGJhdGNoLmFkZE9wZXJhdGlvbihhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrSUQgPSBnZW5lcmF0ZUJsb2NrSUQoYmxvY2tJRFByZWZpeCwgaSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gYmxvY2tTaXplICogaTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kID0gaSA9PT0gbnVtQmxvY2tzIC0gMSA/IHNpemUgOiBzdGFydCArIGJsb2NrU2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGVudExlbmd0aCA9IGVuZCAtIHN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICBibG9ja0xpc3QucHVzaChibG9ja0lEKTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zdGFnZUJsb2NrKGJsb2NrSUQsIGJvZHlGYWN0b3J5KHN0YXJ0LCBjb250ZW50TGVuZ3RoKSwgY29udGVudExlbmd0aCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmNyeXB0aW9uU2NvcGU6IG9wdGlvbnMuZW5jcnlwdGlvblNjb3BlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIHByb2dyZXNzIGFmdGVyIGJsb2NrIGlzIHN1Y2Nlc3NmdWxseSB1cGxvYWRlZCB0byBzZXJ2ZXIsIGluIGNhc2Ugb2YgYmxvY2sgdHJ5aW5nXG4gICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IEhvb2sgd2l0aCBjb252ZW5pZW5jZSBsYXllciBwcm9ncmVzcyBldmVudCBpbiBmaW5lciBsZXZlbFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2ZlclByb2dyZXNzICs9IGNvbnRlbnRMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLm9uUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMub25Qcm9ncmVzcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVkQnl0ZXM6IHRyYW5zZmVyUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXdhaXQgYmF0Y2guZG8oKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbW1pdEJsb2NrTGlzdChibG9ja0xpc3QsIHVwZGF0ZWRPcHRpb25zKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE9OTFkgQVZBSUxBQkxFIElOIE5PREUuSlMgUlVOVElNRS5cbiAgICAgKlxuICAgICAqIFVwbG9hZHMgYSBsb2NhbCBmaWxlIGluIGJsb2NrcyB0byBhIGJsb2NrIGJsb2IuXG4gICAgICpcbiAgICAgKiBXaGVuIGZpbGUgc2l6ZSBsZXNzZXIgdGhhbiBvciBlcXVhbCB0byAyNTZNQiwgdGhpcyBtZXRob2Qgd2lsbCB1c2UgMSB1cGxvYWQgY2FsbCB0byBmaW5pc2ggdGhlIHVwbG9hZC5cbiAgICAgKiBPdGhlcndpc2UsIHRoaXMgbWV0aG9kIHdpbGwgY2FsbCBzdGFnZUJsb2NrIHRvIHVwbG9hZCBibG9ja3MsIGFuZCBmaW5hbGx5IGNhbGwgY29tbWl0QmxvY2tMaXN0XG4gICAgICogdG8gY29tbWl0IHRoZSBibG9jayBsaXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIGZpbGVQYXRoIC0gRnVsbCBwYXRoIG9mIGxvY2FsIGZpbGVcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gVXBsb2FkIHRvIEJsb2NrIEJsb2Igb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIFJlc3BvbnNlIGRhdGEgZm9yIHRoZSBCbG9iIFVwbG9hZCBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgdXBsb2FkRmlsZShmaWxlUGF0aCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvY2tCbG9iQ2xpZW50LXVwbG9hZEZpbGVcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzaXplID0gKGF3YWl0IGZzU3RhdChmaWxlUGF0aCkpLnNpemU7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51cGxvYWRTZWVrYWJsZUludGVybmFsKChvZmZzZXQsIGNvdW50KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICgpID0+IGZzQ3JlYXRlUmVhZFN0cmVhbShmaWxlUGF0aCwge1xuICAgICAgICAgICAgICAgICAgICBhdXRvQ2xvc2U6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGVuZDogY291bnQgPyBvZmZzZXQgKyBjb3VudCAtIDEgOiBJbmZpbml0eSxcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IG9mZnNldCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIHNpemUsIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyksIHsgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE9OTFkgQVZBSUxBQkxFIElOIE5PREUuSlMgUlVOVElNRS5cbiAgICAgKlxuICAgICAqIFVwbG9hZHMgYSBOb2RlLmpzIFJlYWRhYmxlIHN0cmVhbSBpbnRvIGJsb2NrIGJsb2IuXG4gICAgICpcbiAgICAgKiBQRVJGT1JNQU5DRSBJTVBST1ZFTUVOVCBUSVBTOlxuICAgICAqICogSW5wdXQgc3RyZWFtIGhpZ2hXYXRlck1hcmsgaXMgYmV0dGVyIHRvIHNldCBhIHNhbWUgdmFsdWUgd2l0aCBidWZmZXJTaXplXG4gICAgICogICAgcGFyYW1ldGVyLCB3aGljaCB3aWxsIGF2b2lkIEJ1ZmZlci5jb25jYXQoKSBvcGVyYXRpb25zLlxuICAgICAqXG4gICAgICogQHBhcmFtIHN0cmVhbSAtIE5vZGUuanMgUmVhZGFibGUgc3RyZWFtXG4gICAgICogQHBhcmFtIGJ1ZmZlclNpemUgLSBTaXplIG9mIGV2ZXJ5IGJ1ZmZlciBhbGxvY2F0ZWQsIGFsc28gdGhlIGJsb2NrIHNpemUgaW4gdGhlIHVwbG9hZGVkIGJsb2NrIGJsb2IuIERlZmF1bHQgdmFsdWUgaXMgOE1CXG4gICAgICogQHBhcmFtIG1heENvbmN1cnJlbmN5IC0gIE1heCBjb25jdXJyZW5jeSBpbmRpY2F0ZXMgdGhlIG1heCBudW1iZXIgb2YgYnVmZmVycyB0aGF0IGNhbiBiZSBhbGxvY2F0ZWQsXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGl2ZSBjb3JyZWxhdGlvbiB3aXRoIG1heCB1cGxvYWRpbmcgY29uY3VycmVuY3kuIERlZmF1bHQgdmFsdWUgaXMgNVxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBVcGxvYWQgU3RyZWFtIHRvIEJsb2NrIEJsb2Igb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIFJlc3BvbnNlIGRhdGEgZm9yIHRoZSBCbG9iIFVwbG9hZCBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgdXBsb2FkU3RyZWFtKHN0cmVhbSwgYnVmZmVyU2l6ZSA9IERFRkFVTFRfQkxPQ0tfQlVGRkVSX1NJWkVfQllURVMsIG1heENvbmN1cnJlbmN5ID0gNSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGlmICghb3B0aW9ucy5ibG9iSFRUUEhlYWRlcnMpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuYmxvYkhUVFBIZWFkZXJzID0ge307XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFvcHRpb25zLmNvbmRpdGlvbnMpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuY29uZGl0aW9ucyA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvY2tCbG9iQ2xpZW50LXVwbG9hZFN0cmVhbVwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGxldCBibG9ja051bSA9IDA7XG4gICAgICAgICAgICBjb25zdCBibG9ja0lEUHJlZml4ID0gY29yZVV0aWwucmFuZG9tVVVJRCgpO1xuICAgICAgICAgICAgbGV0IHRyYW5zZmVyUHJvZ3Jlc3MgPSAwO1xuICAgICAgICAgICAgY29uc3QgYmxvY2tMaXN0ID0gW107XG4gICAgICAgICAgICBjb25zdCBzY2hlZHVsZXIgPSBuZXcgQnVmZmVyU2NoZWR1bGVyKHN0cmVhbSwgYnVmZmVyU2l6ZSwgbWF4Q29uY3VycmVuY3ksIGFzeW5jIChib2R5LCBsZW5ndGgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBibG9ja0lEID0gZ2VuZXJhdGVCbG9ja0lEKGJsb2NrSURQcmVmaXgsIGJsb2NrTnVtKTtcbiAgICAgICAgICAgICAgICBibG9ja0xpc3QucHVzaChibG9ja0lEKTtcbiAgICAgICAgICAgICAgICBibG9ja051bSsrO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc3RhZ2VCbG9jayhibG9ja0lELCBib2R5LCBsZW5ndGgsIHtcbiAgICAgICAgICAgICAgICAgICAgY3VzdG9tZXJQcm92aWRlZEtleTogb3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LFxuICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgIGVuY3J5cHRpb25TY29wZTogb3B0aW9ucy5lbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAvLyBVcGRhdGUgcHJvZ3Jlc3MgYWZ0ZXIgYmxvY2sgaXMgc3VjY2Vzc2Z1bGx5IHVwbG9hZGVkIHRvIHNlcnZlciwgaW4gY2FzZSBvZiBibG9jayB0cnlpbmdcbiAgICAgICAgICAgICAgICB0cmFuc2ZlclByb2dyZXNzICs9IGxlbmd0aDtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5vblByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMub25Qcm9ncmVzcyh7IGxvYWRlZEJ5dGVzOiB0cmFuc2ZlclByb2dyZXNzIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIFxuICAgICAgICAgICAgLy8gY29uY3VycmVuY3kgc2hvdWxkIHNldCBhIHNtYWxsZXIgdmFsdWUgdGhhbiBtYXhDb25jdXJyZW5jeSwgd2hpY2ggaXMgaGVscGZ1bCB0b1xuICAgICAgICAgICAgLy8gcmVkdWNlIHRoZSBwb3NzaWJpbGl0eSB3aGVuIGEgb3V0Z29pbmcgaGFuZGxlciB3YWl0cyBmb3Igc3RyZWFtIGRhdGEsIGluXG4gICAgICAgICAgICAvLyB0aGlzIHNpdHVhdGlvbiwgb3V0Z29pbmcgaGFuZGxlcnMgYXJlIGJsb2NrZWQuXG4gICAgICAgICAgICAvLyBPdXRnb2luZyBxdWV1ZSBzaG91bGRuJ3QgYmUgZW1wdHkuXG4gICAgICAgICAgICBNYXRoLmNlaWwoKG1heENvbmN1cnJlbmN5IC8gNCkgKiAzKSk7XG4gICAgICAgICAgICBhd2FpdCBzY2hlZHVsZXIuZG8oKTtcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLmNvbW1pdEJsb2NrTGlzdChibG9ja0xpc3QsIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyksIHsgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zIH0pKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbi8qKlxuICogUGFnZUJsb2JDbGllbnQgZGVmaW5lcyBhIHNldCBvZiBvcGVyYXRpb25zIGFwcGxpY2FibGUgdG8gcGFnZSBibG9icy5cbiAqL1xuY2xhc3MgUGFnZUJsb2JDbGllbnQgZXh0ZW5kcyBCbG9iQ2xpZW50IHtcbiAgICBjb25zdHJ1Y3Rvcih1cmxPckNvbm5lY3Rpb25TdHJpbmcsIGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lLCBibG9iTmFtZU9yT3B0aW9ucywgXG4gICAgLy8gTGVnYWN5LCBubyBmaXggZm9yIGVzbGludCBlcnJvciB3aXRob3V0IGJyZWFraW5nLiBEaXNhYmxlIGl0IGZvciB0aGlzIGludGVyZmFjZS5cbiAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGF6dXJlL2F6dXJlLXNkay90cy1uYW1pbmctb3B0aW9ucyovXG4gICAgb3B0aW9ucykge1xuICAgICAgICAvLyBJbiBUeXBlU2NyaXB0IHdlIGNhbm5vdCBzaW1wbHkgcGFzcyBhbGwgcGFyYW1ldGVycyB0byBzdXBlcigpIGxpa2UgYmVsb3cgc28gaGF2ZSB0byBkdXBsaWNhdGUgdGhlIGNvZGUgaW5zdGVhZC5cbiAgICAgICAgLy8gICBzdXBlcihzLCBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZU9yT3B0aW9ucywgYmxvYk5hbWVPck9wdGlvbnMsIG9wdGlvbnMpO1xuICAgICAgICBsZXQgcGlwZWxpbmU7XG4gICAgICAgIGxldCB1cmw7XG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgICAgICBpZiAoaXNQaXBlbGluZUxpa2UoY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUpKSB7XG4gICAgICAgICAgICAvLyAodXJsOiBzdHJpbmcsIHBpcGVsaW5lOiBQaXBlbGluZSlcbiAgICAgICAgICAgIHVybCA9IHVybE9yQ29ubmVjdGlvblN0cmluZztcbiAgICAgICAgICAgIHBpcGVsaW5lID0gY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoKGNvcmVVdGlsLmlzTm9kZSAmJiBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSBpbnN0YW5jZW9mIFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsKSB8fFxuICAgICAgICAgICAgY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUgaW5zdGFuY2VvZiBBbm9ueW1vdXNDcmVkZW50aWFsIHx8XG4gICAgICAgICAgICBjb3JlQXV0aC5pc1Rva2VuQ3JlZGVudGlhbChjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSkpIHtcbiAgICAgICAgICAgIC8vICh1cmw6IHN0cmluZywgY3JlZGVudGlhbD86IFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsIHwgQW5vbnltb3VzQ3JlZGVudGlhbCB8IFRva2VuQ3JlZGVudGlhbCwgb3B0aW9ucz86IFN0b3JhZ2VQaXBlbGluZU9wdGlvbnMpXG4gICAgICAgICAgICB1cmwgPSB1cmxPckNvbm5lY3Rpb25TdHJpbmc7XG4gICAgICAgICAgICBvcHRpb25zID0gYmxvYk5hbWVPck9wdGlvbnM7XG4gICAgICAgICAgICBwaXBlbGluZSA9IG5ld1BpcGVsaW5lKGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUgJiZcbiAgICAgICAgICAgIHR5cGVvZiBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgLy8gKHVybDogc3RyaW5nLCBjcmVkZW50aWFsPzogU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwgfCBBbm9ueW1vdXNDcmVkZW50aWFsIHwgVG9rZW5DcmVkZW50aWFsLCBvcHRpb25zPzogU3RvcmFnZVBpcGVsaW5lT3B0aW9ucylcbiAgICAgICAgICAgIC8vIFRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZC4gVXNlIGFub255bW91cyBjcmVkZW50aWFsLlxuICAgICAgICAgICAgdXJsID0gdXJsT3JDb25uZWN0aW9uU3RyaW5nO1xuICAgICAgICAgICAgcGlwZWxpbmUgPSBuZXdQaXBlbGluZShuZXcgQW5vbnltb3VzQ3JlZGVudGlhbCgpLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSAmJlxuICAgICAgICAgICAgdHlwZW9mIGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lID09PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICBibG9iTmFtZU9yT3B0aW9ucyAmJlxuICAgICAgICAgICAgdHlwZW9mIGJsb2JOYW1lT3JPcHRpb25zID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAvLyAoY29ubmVjdGlvblN0cmluZzogc3RyaW5nLCBjb250YWluZXJOYW1lOiBzdHJpbmcsIGJsb2JOYW1lOiBzdHJpbmcsIG9wdGlvbnM/OiBTdG9yYWdlUGlwZWxpbmVPcHRpb25zKVxuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyTmFtZSA9IGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lO1xuICAgICAgICAgICAgY29uc3QgYmxvYk5hbWUgPSBibG9iTmFtZU9yT3B0aW9ucztcbiAgICAgICAgICAgIGNvbnN0IGV4dHJhY3RlZENyZWRzID0gZXh0cmFjdENvbm5lY3Rpb25TdHJpbmdQYXJ0cyh1cmxPckNvbm5lY3Rpb25TdHJpbmcpO1xuICAgICAgICAgICAgaWYgKGV4dHJhY3RlZENyZWRzLmtpbmQgPT09IFwiQWNjb3VudENvbm5TdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIGlmIChjb3JlVXRpbC5pc05vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2hhcmVkS2V5Q3JlZGVudGlhbCA9IG5ldyBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbChleHRyYWN0ZWRDcmVkcy5hY2NvdW50TmFtZSwgZXh0cmFjdGVkQ3JlZHMuYWNjb3VudEtleSk7XG4gICAgICAgICAgICAgICAgICAgIHVybCA9IGFwcGVuZFRvVVJMUGF0aChhcHBlbmRUb1VSTFBhdGgoZXh0cmFjdGVkQ3JlZHMudXJsLCBlbmNvZGVVUklDb21wb25lbnQoY29udGFpbmVyTmFtZSkpLCBlbmNvZGVVUklDb21wb25lbnQoYmxvYk5hbWUpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zLnByb3h5T3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5wcm94eU9wdGlvbnMgPSBjb3JlUmVzdFBpcGVsaW5lLmdldERlZmF1bHRQcm94eVNldHRpbmdzKGV4dHJhY3RlZENyZWRzLnByb3h5VXJpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBwaXBlbGluZSA9IG5ld1BpcGVsaW5lKHNoYXJlZEtleUNyZWRlbnRpYWwsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQWNjb3VudCBjb25uZWN0aW9uIHN0cmluZyBpcyBvbmx5IHN1cHBvcnRlZCBpbiBOb2RlLmpzIGVudmlyb25tZW50XCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGV4dHJhY3RlZENyZWRzLmtpbmQgPT09IFwiU0FTQ29ublN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgdXJsID1cbiAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG9VUkxQYXRoKGFwcGVuZFRvVVJMUGF0aChleHRyYWN0ZWRDcmVkcy51cmwsIGVuY29kZVVSSUNvbXBvbmVudChjb250YWluZXJOYW1lKSksIGVuY29kZVVSSUNvbXBvbmVudChibG9iTmFtZSkpICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiP1wiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhY3RlZENyZWRzLmFjY291bnRTYXM7XG4gICAgICAgICAgICAgICAgcGlwZWxpbmUgPSBuZXdQaXBlbGluZShuZXcgQW5vbnltb3VzQ3JlZGVudGlhbCgpLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbm5lY3Rpb24gc3RyaW5nIG11c3QgYmUgZWl0aGVyIGFuIEFjY291bnQgY29ubmVjdGlvbiBzdHJpbmcgb3IgYSBTQVMgY29ubmVjdGlvbiBzdHJpbmdcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3Rpbmcgbm9uLWVtcHR5IHN0cmluZ3MgZm9yIGNvbnRhaW5lck5hbWUgYW5kIGJsb2JOYW1lIHBhcmFtZXRlcnNcIik7XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIodXJsLCBwaXBlbGluZSk7XG4gICAgICAgIHRoaXMucGFnZUJsb2JDb250ZXh0ID0gdGhpcy5zdG9yYWdlQ2xpZW50Q29udGV4dC5wYWdlQmxvYjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBQYWdlQmxvYkNsaWVudCBvYmplY3QgaWRlbnRpY2FsIHRvIHRoZSBzb3VyY2UgYnV0IHdpdGggdGhlXG4gICAgICogc3BlY2lmaWVkIHNuYXBzaG90IHRpbWVzdGFtcC5cbiAgICAgKiBQcm92aWRlIFwiXCIgd2lsbCByZW1vdmUgdGhlIHNuYXBzaG90IGFuZCByZXR1cm4gYSBDbGllbnQgdG8gdGhlIGJhc2UgYmxvYi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzbmFwc2hvdCAtIFRoZSBzbmFwc2hvdCB0aW1lc3RhbXAuXG4gICAgICogQHJldHVybnMgQSBuZXcgUGFnZUJsb2JDbGllbnQgb2JqZWN0IGlkZW50aWNhbCB0byB0aGUgc291cmNlIGJ1dCB3aXRoIHRoZSBzcGVjaWZpZWQgc25hcHNob3QgdGltZXN0YW1wLlxuICAgICAqL1xuICAgIHdpdGhTbmFwc2hvdChzbmFwc2hvdCkge1xuICAgICAgICByZXR1cm4gbmV3IFBhZ2VCbG9iQ2xpZW50KHNldFVSTFBhcmFtZXRlcih0aGlzLnVybCwgVVJMQ29uc3RhbnRzLlBhcmFtZXRlcnMuU05BUFNIT1QsIHNuYXBzaG90Lmxlbmd0aCA9PT0gMCA/IHVuZGVmaW5lZCA6IHNuYXBzaG90KSwgdGhpcy5waXBlbGluZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBwYWdlIGJsb2Igb2YgdGhlIHNwZWNpZmllZCBsZW5ndGguIENhbGwgdXBsb2FkUGFnZXMgdG8gdXBsb2FkIGRhdGFcbiAgICAgKiBkYXRhIHRvIGEgcGFnZSBibG9iLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL3B1dC1ibG9iXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc2l6ZSAtIHNpemUgb2YgdGhlIHBhZ2UgYmxvYi5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gdGhlIFBhZ2UgQmxvYiBDcmVhdGUgb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIFJlc3BvbnNlIGRhdGEgZm9yIHRoZSBQYWdlIEJsb2IgQ3JlYXRlIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBjcmVhdGUoc2l6ZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIG9wdGlvbnMuY29uZGl0aW9ucyA9IG9wdGlvbnMuY29uZGl0aW9ucyB8fCB7fTtcbiAgICAgICAgZW5zdXJlQ3BrSWZTcGVjaWZpZWQob3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LCB0aGlzLmlzSHR0cHMpO1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIlBhZ2VCbG9iQ2xpZW50LWNyZWF0ZVwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYSwgX2IsIF9jO1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMucGFnZUJsb2JDb250ZXh0LmNyZWF0ZSgwLCBzaXplLCB7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgYmxvYkh0dHBIZWFkZXJzOiBvcHRpb25zLmJsb2JIVFRQSGVhZGVycyxcbiAgICAgICAgICAgICAgICBibG9iU2VxdWVuY2VOdW1iZXI6IG9wdGlvbnMuYmxvYlNlcXVlbmNlTnVtYmVyLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIG1ldGFkYXRhOiBvcHRpb25zLm1ldGFkYXRhLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICBjcGtJbmZvOiBvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksXG4gICAgICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiBvcHRpb25zLmVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgICAgICAgICBpbW11dGFiaWxpdHlQb2xpY3lFeHBpcnk6IChfYiA9IG9wdGlvbnMuaW1tdXRhYmlsaXR5UG9saWN5KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuZXhwaXJpZXNPbixcbiAgICAgICAgICAgICAgICBpbW11dGFiaWxpdHlQb2xpY3lNb2RlOiAoX2MgPSBvcHRpb25zLmltbXV0YWJpbGl0eVBvbGljeSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLnBvbGljeU1vZGUsXG4gICAgICAgICAgICAgICAgbGVnYWxIb2xkOiBvcHRpb25zLmxlZ2FsSG9sZCxcbiAgICAgICAgICAgICAgICB0aWVyOiB0b0FjY2Vzc1RpZXIob3B0aW9ucy50aWVyKSxcbiAgICAgICAgICAgICAgICBibG9iVGFnc1N0cmluZzogdG9CbG9iVGFnc1N0cmluZyhvcHRpb25zLnRhZ3MpLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBwYWdlIGJsb2Igb2YgdGhlIHNwZWNpZmllZCBsZW5ndGguIENhbGwgdXBsb2FkUGFnZXMgdG8gdXBsb2FkIGRhdGFcbiAgICAgKiBkYXRhIHRvIGEgcGFnZSBibG9iLiBJZiB0aGUgYmxvYiB3aXRoIHRoZSBzYW1lIG5hbWUgYWxyZWFkeSBleGlzdHMsIHRoZSBjb250ZW50XG4gICAgICogb2YgdGhlIGV4aXN0aW5nIGJsb2Igd2lsbCByZW1haW4gdW5jaGFuZ2VkLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL3B1dC1ibG9iXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc2l6ZSAtIHNpemUgb2YgdGhlIHBhZ2UgYmxvYi5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtXG4gICAgICovXG4gICAgYXN5bmMgY3JlYXRlSWZOb3RFeGlzdHMoc2l6ZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiUGFnZUJsb2JDbGllbnQtY3JlYXRlSWZOb3RFeGlzdHNcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb25kaXRpb25zID0geyBpZk5vbmVNYXRjaDogRVRhZ0FueSB9O1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuY3JlYXRlKHNpemUsIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyksIHsgY29uZGl0aW9ucywgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zIH0pKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7IHN1Y2NlZWRlZDogdHJ1ZSB9LCByZXMpLCB7IF9yZXNwb25zZTogcmVzLl9yZXNwb25zZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCgoX2EgPSBlLmRldGFpbHMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5lcnJvckNvZGUpID09PSBcIkJsb2JBbHJlYWR5RXhpc3RzXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7IHN1Y2NlZWRlZDogZmFsc2UgfSwgKF9iID0gZS5yZXNwb25zZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnBhcnNlZEhlYWRlcnMpLCB7IF9yZXNwb25zZTogZS5yZXNwb25zZSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyaXRlcyAxIG9yIG1vcmUgcGFnZXMgdG8gdGhlIHBhZ2UgYmxvYi4gVGhlIHN0YXJ0IGFuZCBlbmQgb2Zmc2V0cyBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNTEyLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL3B1dC1wYWdlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYm9keSAtIERhdGEgdG8gdXBsb2FkXG4gICAgICogQHBhcmFtIG9mZnNldCAtIE9mZnNldCBvZiBkZXN0aW5hdGlvbiBwYWdlIGJsb2JcbiAgICAgKiBAcGFyYW0gY291bnQgLSBDb250ZW50IGxlbmd0aCBvZiB0aGUgYm9keSwgYWxzbyBudW1iZXIgb2YgYnl0ZXMgdG8gYmUgdXBsb2FkZWRcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gdGhlIFBhZ2UgQmxvYiBVcGxvYWQgUGFnZXMgb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIFJlc3BvbnNlIGRhdGEgZm9yIHRoZSBQYWdlIEJsb2IgVXBsb2FkIFBhZ2VzIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyB1cGxvYWRQYWdlcyhib2R5LCBvZmZzZXQsIGNvdW50LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0gb3B0aW9ucy5jb25kaXRpb25zIHx8IHt9O1xuICAgICAgICBlbnN1cmVDcGtJZlNwZWNpZmllZChvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksIHRoaXMuaXNIdHRwcyk7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiUGFnZUJsb2JDbGllbnQtdXBsb2FkUGFnZXNcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5wYWdlQmxvYkNvbnRleHQudXBsb2FkUGFnZXMoY291bnQsIGJvZHksIHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgcmVxdWVzdE9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgb25VcGxvYWRQcm9ncmVzczogb3B0aW9ucy5vblByb2dyZXNzLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcmFuZ2U6IHJhbmdlVG9TdHJpbmcoeyBvZmZzZXQsIGNvdW50IH0pLFxuICAgICAgICAgICAgICAgIHNlcXVlbmNlTnVtYmVyQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uYWxDb250ZW50TUQ1OiBvcHRpb25zLnRyYW5zYWN0aW9uYWxDb250ZW50TUQ1LFxuICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uYWxDb250ZW50Q3JjNjQ6IG9wdGlvbnMudHJhbnNhY3Rpb25hbENvbnRlbnRDcmM2NCxcbiAgICAgICAgICAgICAgICBjcGtJbmZvOiBvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksXG4gICAgICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiBvcHRpb25zLmVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgVXBsb2FkIFBhZ2VzIG9wZXJhdGlvbiB3cml0ZXMgYSByYW5nZSBvZiBwYWdlcyB0byBhIHBhZ2UgYmxvYiB3aGVyZSB0aGVcbiAgICAgKiBjb250ZW50cyBhcmUgcmVhZCBmcm9tIGEgVVJMLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL3B1dC1wYWdlLWZyb20tdXJsXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc291cmNlVVJMIC0gU3BlY2lmeSBhIFVSTCB0byB0aGUgY29weSBzb3VyY2UsIFNoYXJlZCBBY2Nlc3MgU2lnbmF0dXJlKFNBUykgbWF5YmUgbmVlZGVkIGZvciBhdXRoZW50aWNhdGlvblxuICAgICAqIEBwYXJhbSBzb3VyY2VPZmZzZXQgLSBUaGUgc291cmNlIG9mZnNldCB0byBjb3B5IGZyb20uIFBhc3MgMCB0byBjb3B5IGZyb20gdGhlIGJlZ2lubmluZyBvZiBzb3VyY2UgcGFnZSBibG9iXG4gICAgICogQHBhcmFtIGRlc3RPZmZzZXQgLSBPZmZzZXQgb2YgZGVzdGluYXRpb24gcGFnZSBibG9iXG4gICAgICogQHBhcmFtIGNvdW50IC0gTnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHVwbG9hZGVkIGZyb20gc291cmNlIHBhZ2UgYmxvYlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC1cbiAgICAgKi9cbiAgICBhc3luYyB1cGxvYWRQYWdlc0Zyb21VUkwoc291cmNlVVJMLCBzb3VyY2VPZmZzZXQsIGRlc3RPZmZzZXQsIGNvdW50LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0gb3B0aW9ucy5jb25kaXRpb25zIHx8IHt9O1xuICAgICAgICBvcHRpb25zLnNvdXJjZUNvbmRpdGlvbnMgPSBvcHRpb25zLnNvdXJjZUNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIGVuc3VyZUNwa0lmU3BlY2lmaWVkKG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSwgdGhpcy5pc0h0dHBzKTtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJQYWdlQmxvYkNsaWVudC11cGxvYWRQYWdlc0Zyb21VUkxcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lO1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMucGFnZUJsb2JDb250ZXh0LnVwbG9hZFBhZ2VzRnJvbVVSTChzb3VyY2VVUkwsIHJhbmdlVG9TdHJpbmcoeyBvZmZzZXQ6IHNvdXJjZU9mZnNldCwgY291bnQgfSksIDAsIHJhbmdlVG9TdHJpbmcoeyBvZmZzZXQ6IGRlc3RPZmZzZXQsIGNvdW50IH0pLCB7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgc291cmNlQ29udGVudE1ENTogb3B0aW9ucy5zb3VyY2VDb250ZW50TUQ1LFxuICAgICAgICAgICAgICAgIHNvdXJjZUNvbnRlbnRDcmM2NDogb3B0aW9ucy5zb3VyY2VDb250ZW50Q3JjNjQsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgc2VxdWVuY2VOdW1iZXJBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIHNvdXJjZU1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICBzb3VyY2VJZk1hdGNoOiAoX2IgPSBvcHRpb25zLnNvdXJjZUNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5pZk1hdGNoLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VJZk1vZGlmaWVkU2luY2U6IChfYyA9IG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlSWZOb25lTWF0Y2g6IChfZCA9IG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucykgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLmlmTm9uZU1hdGNoLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VJZlVubW9kaWZpZWRTaW5jZTogKF9lID0gb3B0aW9ucy5zb3VyY2VDb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2UuaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBjcGtJbmZvOiBvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksXG4gICAgICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiBvcHRpb25zLmVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgICAgICAgICBjb3B5U291cmNlQXV0aG9yaXphdGlvbjogaHR0cEF1dGhvcml6YXRpb25Ub1N0cmluZyhvcHRpb25zLnNvdXJjZUF1dGhvcml6YXRpb24pLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEZyZWVzIHRoZSBzcGVjaWZpZWQgcGFnZXMgZnJvbSB0aGUgcGFnZSBibG9iLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL3B1dC1wYWdlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb2Zmc2V0IC0gU3RhcnRpbmcgYnl0ZSBwb3NpdGlvbiBvZiB0aGUgcGFnZXMgdG8gY2xlYXIuXG4gICAgICogQHBhcmFtIGNvdW50IC0gTnVtYmVyIG9mIGJ5dGVzIHRvIGNsZWFyLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB0aGUgUGFnZSBCbG9iIENsZWFyIFBhZ2VzIG9wZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyBSZXNwb25zZSBkYXRhIGZvciB0aGUgUGFnZSBCbG9iIENsZWFyIFBhZ2VzIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBjbGVhclBhZ2VzKG9mZnNldCA9IDAsIGNvdW50LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0gb3B0aW9ucy5jb25kaXRpb25zIHx8IHt9O1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIlBhZ2VCbG9iQ2xpZW50LWNsZWFyUGFnZXNcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5wYWdlQmxvYkNvbnRleHQuY2xlYXJQYWdlcygwLCB7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIHJhbmdlOiByYW5nZVRvU3RyaW5nKHsgb2Zmc2V0LCBjb3VudCB9KSxcbiAgICAgICAgICAgICAgICBzZXF1ZW5jZU51bWJlckFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBjcGtJbmZvOiBvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksXG4gICAgICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiBvcHRpb25zLmVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBsaXN0IG9mIHZhbGlkIHBhZ2UgcmFuZ2VzIGZvciBhIHBhZ2UgYmxvYiBvciBzbmFwc2hvdCBvZiBhIHBhZ2UgYmxvYi5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9nZXQtcGFnZS1yYW5nZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvZmZzZXQgLSBTdGFydGluZyBieXRlIHBvc2l0aW9uIG9mIHRoZSBwYWdlIHJhbmdlcy5cbiAgICAgKiBAcGFyYW0gY291bnQgLSBOdW1iZXIgb2YgYnl0ZXMgdG8gZ2V0LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB0aGUgUGFnZSBCbG9iIEdldCBSYW5nZXMgb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIFJlc3BvbnNlIGRhdGEgZm9yIHRoZSBQYWdlIEJsb2IgR2V0IFJhbmdlcyBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgZ2V0UGFnZVJhbmdlcyhvZmZzZXQgPSAwLCBjb3VudCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIG9wdGlvbnMuY29uZGl0aW9ucyA9IG9wdGlvbnMuY29uZGl0aW9ucyB8fCB7fTtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJQYWdlQmxvYkNsaWVudC1nZXRQYWdlUmFuZ2VzXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLnBhZ2VCbG9iQ29udGV4dC5nZXRQYWdlUmFuZ2VzKHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgcmFuZ2U6IHJhbmdlVG9TdHJpbmcoeyBvZmZzZXQsIGNvdW50IH0pLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHJldHVybiByYW5nZVJlc3BvbnNlRnJvbU1vZGVsKHJlc3BvbnNlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIGdldFBhZ2VSYW5nZXNTZWdtZW50IHJldHVybnMgYSBzaW5nbGUgc2VnbWVudCBvZiBwYWdlIHJhbmdlcyBzdGFydGluZyBmcm9tIHRoZVxuICAgICAqIHNwZWNpZmllZCBNYXJrZXIuIFVzZSBhbiBlbXB0eSBNYXJrZXIgdG8gc3RhcnQgZW51bWVyYXRpb24gZnJvbSB0aGUgYmVnaW5uaW5nLlxuICAgICAqIEFmdGVyIGdldHRpbmcgYSBzZWdtZW50LCBwcm9jZXNzIGl0LCBhbmQgdGhlbiBjYWxsIGdldFBhZ2VSYW5nZXNTZWdtZW50IGFnYWluXG4gICAgICogKHBhc3NpbmcgdGhlIHRoZSBwcmV2aW91c2x5LXJldHVybmVkIE1hcmtlcikgdG8gZ2V0IHRoZSBuZXh0IHNlZ21lbnQuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvZ2V0LXBhZ2UtcmFuZ2VzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb2Zmc2V0IC0gU3RhcnRpbmcgYnl0ZSBwb3NpdGlvbiBvZiB0aGUgcGFnZSByYW5nZXMuXG4gICAgICogQHBhcmFtIGNvdW50IC0gTnVtYmVyIG9mIGJ5dGVzIHRvIGdldC5cbiAgICAgKiBAcGFyYW0gbWFya2VyIC0gQSBzdHJpbmcgdmFsdWUgdGhhdCBpZGVudGlmaWVzIHRoZSBwb3J0aW9uIG9mIHRoZSBsaXN0IHRvIGJlIHJldHVybmVkIHdpdGggdGhlIG5leHQgbGlzdCBvcGVyYXRpb24uXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIFBhZ2VCbG9iIEdldCBQYWdlIFJhbmdlcyBTZWdtZW50IG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBsaXN0UGFnZVJhbmdlc1NlZ21lbnQob2Zmc2V0ID0gMCwgY291bnQsIG1hcmtlciwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiUGFnZUJsb2JDbGllbnQtZ2V0UGFnZVJhbmdlc1NlZ21lbnRcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5wYWdlQmxvYkNvbnRleHQuZ2V0UGFnZVJhbmdlcyh7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIHJhbmdlOiByYW5nZVRvU3RyaW5nKHsgb2Zmc2V0LCBjb3VudCB9KSxcbiAgICAgICAgICAgICAgICBtYXJrZXI6IG1hcmtlcixcbiAgICAgICAgICAgICAgICBtYXhQYWdlU2l6ZTogb3B0aW9ucy5tYXhQYWdlU2l6ZSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIEFzeW5jSXRlcmFibGVJdGVyYXRvciBmb3Ige0BsaW5rIFBhZ2VCbG9iR2V0UGFnZVJhbmdlc1Jlc3BvbnNlTW9kZWx9XG4gICAgICpcbiAgICAgKiBAcGFyYW0gb2Zmc2V0IC0gU3RhcnRpbmcgYnl0ZSBwb3NpdGlvbiBvZiB0aGUgcGFnZSByYW5nZXMuXG4gICAgICogQHBhcmFtIGNvdW50IC0gTnVtYmVyIG9mIGJ5dGVzIHRvIGdldC5cbiAgICAgKiBAcGFyYW0gbWFya2VyIC0gQSBzdHJpbmcgdmFsdWUgdGhhdCBpZGVudGlmaWVzIHRoZSBwb3J0aW9uIG9mXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBnZXQgb2YgcGFnZSByYW5nZXMgdG8gYmUgcmV0dXJuZWQgd2l0aCB0aGUgbmV4dCBnZXR0aW5nIG9wZXJhdGlvbi4gVGhlXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiByZXR1cm5zIHRoZSBDb250aW51YXRpb25Ub2tlbiB2YWx1ZSB3aXRoaW4gdGhlIHJlc3BvbnNlIGJvZHkgaWYgdGhlXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGdldHRpbmcgb3BlcmF0aW9uIGRpZCBub3QgcmV0dXJuIGFsbCBwYWdlIHJhbmdlcyByZW1haW5pbmcgd2l0aGluIHRoZSBjdXJyZW50IHBhZ2UuXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBDb250aW51YXRpb25Ub2tlbiB2YWx1ZSBjYW4gYmUgdXNlZCBhcyB0aGUgdmFsdWUgZm9yXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBtYXJrZXIgcGFyYW1ldGVyIGluIGEgc3Vic2VxdWVudCBjYWxsIHRvIHJlcXVlc3QgdGhlIG5leHQgcGFnZSBvZiBnZXRcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMuIFRoZSBtYXJrZXIgdmFsdWUgaXMgb3BhcXVlIHRvIHRoZSBjbGllbnQuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIExpc3QgUGFnZSBSYW5nZXMgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGxpc3RQYWdlUmFuZ2VJdGVtU2VnbWVudHMoKSB7XG4gICAgICAgIHJldHVybiB0c2xpYi5fX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24qIGxpc3RQYWdlUmFuZ2VJdGVtU2VnbWVudHNfMShvZmZzZXQgPSAwLCBjb3VudCwgbWFya2VyLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgICAgIGxldCBnZXRQYWdlUmFuZ2VJdGVtU2VnbWVudHNSZXNwb25zZTtcbiAgICAgICAgICAgIGlmICghIW1hcmtlciB8fCBtYXJrZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0UGFnZVJhbmdlSXRlbVNlZ21lbnRzUmVzcG9uc2UgPSB5aWVsZCB0c2xpYi5fX2F3YWl0KHRoaXMubGlzdFBhZ2VSYW5nZXNTZWdtZW50KG9mZnNldCwgY291bnQsIG1hcmtlciwgb3B0aW9ucykpO1xuICAgICAgICAgICAgICAgICAgICBtYXJrZXIgPSBnZXRQYWdlUmFuZ2VJdGVtU2VnbWVudHNSZXNwb25zZS5jb250aW51YXRpb25Ub2tlbjtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgeWllbGQgdHNsaWIuX19hd2FpdCh5aWVsZCB0c2xpYi5fX2F3YWl0KGdldFBhZ2VSYW5nZUl0ZW1TZWdtZW50c1Jlc3BvbnNlKSk7XG4gICAgICAgICAgICAgICAgfSB3aGlsZSAobWFya2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIG9mIHtAbGluayBQYWdlUmFuZ2VJbmZvfSBvYmplY3RzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb2Zmc2V0IC0gU3RhcnRpbmcgYnl0ZSBwb3NpdGlvbiBvZiB0aGUgcGFnZSByYW5nZXMuXG4gICAgICogQHBhcmFtIGNvdW50IC0gTnVtYmVyIG9mIGJ5dGVzIHRvIGdldC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gTGlzdCBQYWdlIFJhbmdlcyBvcGVyYXRpb24uXG4gICAgICovXG4gICAgbGlzdFBhZ2VSYW5nZUl0ZW1zKCkge1xuICAgICAgICByZXR1cm4gdHNsaWIuX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKiBsaXN0UGFnZVJhbmdlSXRlbXNfMShvZmZzZXQgPSAwLCBjb3VudCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgICAgICB2YXIgX2EsIGVfMSwgX2IsIF9jO1xuICAgICAgICAgICAgbGV0IG1hcmtlcjtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgX2QgPSB0cnVlLCBfZSA9IHRzbGliLl9fYXN5bmNWYWx1ZXModGhpcy5saXN0UGFnZVJhbmdlSXRlbVNlZ21lbnRzKG9mZnNldCwgY291bnQsIG1hcmtlciwgb3B0aW9ucykpLCBfZjsgX2YgPSB5aWVsZCB0c2xpYi5fX2F3YWl0KF9lLm5leHQoKSksIF9hID0gX2YuZG9uZSwgIV9hOyBfZCA9IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgX2MgPSBfZi52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgX2QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2V0UGFnZVJhbmdlc1NlZ21lbnQgPSBfYztcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgdHNsaWIuX19hd2FpdCh5aWVsZCogdHNsaWIuX19hc3luY0RlbGVnYXRvcih0c2xpYi5fX2FzeW5jVmFsdWVzKEV4dHJhY3RQYWdlUmFuZ2VJbmZvSXRlbXMoZ2V0UGFnZVJhbmdlc1NlZ21lbnQpKSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIV9kICYmICFfYSAmJiAoX2IgPSBfZS5yZXR1cm4pKSB5aWVsZCB0c2xpYi5fX2F3YWl0KF9iLmNhbGwoX2UpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBhc3luYyBpdGVyYWJsZSBpdGVyYXRvciB0byBsaXN0IG9mIHBhZ2UgcmFuZ2VzIGZvciBhIHBhZ2UgYmxvYi5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9nZXQtcGFnZS1yYW5nZXNcbiAgICAgKlxuICAgICAqICAuYnlQYWdlKCkgcmV0dXJucyBhbiBhc3luYyBpdGVyYWJsZSBpdGVyYXRvciB0byBsaXN0IG9mIHBhZ2UgcmFuZ2VzIGZvciBhIHBhZ2UgYmxvYi5cbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNpbmcgYGZvciBhd2FpdGAgc3ludGF4OlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiAvLyBHZXQgdGhlIHBhZ2VCbG9iQ2xpZW50IGJlZm9yZSB5b3UgcnVuIHRoZXNlIHNuaXBwZXRzLFxuICAgICAqIC8vIENhbiBiZSBvYnRhaW5lZCBmcm9tIGBibG9iU2VydmljZUNsaWVudC5nZXRDb250YWluZXJDbGllbnQoXCI8eW91ci1jb250YWluZXItbmFtZT5cIikuZ2V0UGFnZUJsb2JDbGllbnQoXCI8eW91ci1ibG9iLW5hbWU+XCIpO2BcbiAgICAgKiBsZXQgaSA9IDE7XG4gICAgICogZm9yIGF3YWl0IChjb25zdCBwYWdlUmFuZ2Ugb2YgcGFnZUJsb2JDbGllbnQubGlzdFBhZ2VSYW5nZXMoKSkge1xuICAgICAqICAgY29uc29sZS5sb2coYFBhZ2UgcmFuZ2UgJHtpKyt9OiAke3BhZ2VSYW5nZS5zdGFydH0gLSAke3BhZ2VSYW5nZS5lbmR9YCk7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBgaXRlci5uZXh0KClgOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBsZXQgaSA9IDE7XG4gICAgICogbGV0IGl0ZXIgPSBwYWdlQmxvYkNsaWVudC5saXN0UGFnZVJhbmdlcygpO1xuICAgICAqIGxldCBwYWdlUmFuZ2VJdGVtID0gYXdhaXQgaXRlci5uZXh0KCk7XG4gICAgICogd2hpbGUgKCFwYWdlUmFuZ2VJdGVtLmRvbmUpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKGBQYWdlIHJhbmdlICR7aSsrfTogJHtwYWdlUmFuZ2VJdGVtLnZhbHVlLnN0YXJ0fSAtICR7cGFnZVJhbmdlSXRlbS52YWx1ZS5lbmR9LCBJc0NsZWFyOiAke3BhZ2VSYW5nZUl0ZW0udmFsdWUuaXNDbGVhcn1gKTtcbiAgICAgKiAgIHBhZ2VSYW5nZUl0ZW0gPSBhd2FpdCBpdGVyLm5leHQoKTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIGBieVBhZ2UoKWA6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIHBhc3Npbmcgb3B0aW9uYWwgbWF4UGFnZVNpemUgaW4gdGhlIHBhZ2Ugc2V0dGluZ3NcbiAgICAgKiBsZXQgaSA9IDE7XG4gICAgICogZm9yIGF3YWl0IChjb25zdCByZXNwb25zZSBvZiBwYWdlQmxvYkNsaWVudC5saXN0UGFnZVJhbmdlcygpLmJ5UGFnZSh7IG1heFBhZ2VTaXplOiAyMCB9KSkge1xuICAgICAqICAgZm9yIChjb25zdCBwYWdlUmFuZ2Ugb2YgcmVzcG9uc2UpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coYFBhZ2UgcmFuZ2UgJHtpKyt9OiAke3BhZ2VSYW5nZS5zdGFydH0gLSAke3BhZ2VSYW5nZS5lbmR9YCk7XG4gICAgICogICB9XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBwYWdpbmcgd2l0aCBhIG1hcmtlcjpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogbGV0IGkgPSAxO1xuICAgICAqIGxldCBpdGVyYXRvciA9IHBhZ2VCbG9iQ2xpZW50Lmxpc3RQYWdlUmFuZ2VzKCkuYnlQYWdlKHsgbWF4UGFnZVNpemU6IDIgfSk7XG4gICAgICogbGV0IHJlc3BvbnNlID0gKGF3YWl0IGl0ZXJhdG9yLm5leHQoKSkudmFsdWU7XG4gICAgICpcbiAgICAgKiAvLyBQcmludHMgMiBwYWdlIHJhbmdlc1xuICAgICAqIGZvciAoY29uc3QgcGFnZVJhbmdlIG9mIHJlc3BvbnNlKSB7XG4gICAgICogICBjb25zb2xlLmxvZyhgUGFnZSByYW5nZSAke2krK306ICR7cGFnZVJhbmdlLnN0YXJ0fSAtICR7cGFnZVJhbmdlLmVuZH1gKTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBHZXRzIG5leHQgbWFya2VyXG4gICAgICogbGV0IG1hcmtlciA9IHJlc3BvbnNlLmNvbnRpbnVhdGlvblRva2VuO1xuICAgICAqXG4gICAgICogLy8gUGFzc2luZyBuZXh0IG1hcmtlciBhcyBjb250aW51YXRpb25Ub2tlblxuICAgICAqXG4gICAgICogaXRlcmF0b3IgPSBwYWdlQmxvYkNsaWVudC5saXN0UGFnZVJhbmdlcygpLmJ5UGFnZSh7IGNvbnRpbnVhdGlvblRva2VuOiBtYXJrZXIsIG1heFBhZ2VTaXplOiAxMCB9KTtcbiAgICAgKiByZXNwb25zZSA9IChhd2FpdCBpdGVyYXRvci5uZXh0KCkpLnZhbHVlO1xuICAgICAqXG4gICAgICogLy8gUHJpbnRzIDEwIHBhZ2UgcmFuZ2VzXG4gICAgICogZm9yIChjb25zdCBibG9iIG9mIHJlc3BvbnNlKSB7XG4gICAgICogICBjb25zb2xlLmxvZyhgUGFnZSByYW5nZSAke2krK306ICR7cGFnZVJhbmdlLnN0YXJ0fSAtICR7cGFnZVJhbmdlLmVuZH1gKTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICogQHBhcmFtIG9mZnNldCAtIFN0YXJ0aW5nIGJ5dGUgcG9zaXRpb24gb2YgdGhlIHBhZ2UgcmFuZ2VzLlxuICAgICAqIEBwYXJhbSBjb3VudCAtIE51bWJlciBvZiBieXRlcyB0byBnZXQuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHRoZSBQYWdlIEJsb2IgR2V0IFJhbmdlcyBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgQW4gYXN5bmNJdGVyYWJsZUl0ZXJhdG9yIHRoYXQgc3VwcG9ydHMgcGFnaW5nLlxuICAgICAqL1xuICAgIGxpc3RQYWdlUmFuZ2VzKG9mZnNldCA9IDAsIGNvdW50LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0gb3B0aW9ucy5jb25kaXRpb25zIHx8IHt9O1xuICAgICAgICAvLyBBc3luY0l0ZXJhYmxlSXRlcmF0b3IgdG8gaXRlcmF0ZSBvdmVyIGJsb2JzXG4gICAgICAgIGNvbnN0IGl0ZXIgPSB0aGlzLmxpc3RQYWdlUmFuZ2VJdGVtcyhvZmZzZXQsIGNvdW50LCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVGhlIG5leHQgbWV0aG9kLCBwYXJ0IG9mIHRoZSBpdGVyYXRpb24gcHJvdG9jb2xcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgbmV4dCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlci5uZXh0KCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBUaGUgY29ubmVjdGlvbiB0byB0aGUgYXN5bmMgaXRlcmF0b3IsIHBhcnQgb2YgdGhlIGl0ZXJhdGlvbiBwcm90b2NvbFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogUmV0dXJuIGFuIEFzeW5jSXRlcmFibGVJdGVyYXRvciB0aGF0IHdvcmtzIGEgcGFnZSBhdCBhIHRpbWVcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgYnlQYWdlOiAoc2V0dGluZ3MgPSB7fSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxpc3RQYWdlUmFuZ2VJdGVtU2VnbWVudHMob2Zmc2V0LCBjb3VudCwgc2V0dGluZ3MuY29udGludWF0aW9uVG9rZW4sIE9iamVjdC5hc3NpZ24oeyBtYXhQYWdlU2l6ZTogc2V0dGluZ3MubWF4UGFnZVNpemUgfSwgb3B0aW9ucykpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgY29sbGVjdGlvbiBvZiBwYWdlIHJhbmdlcyB0aGF0IGRpZmZlciBiZXR3ZWVuIGEgc3BlY2lmaWVkIHNuYXBzaG90IGFuZCB0aGlzIHBhZ2UgYmxvYi5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9nZXQtcGFnZS1yYW5nZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvZmZzZXQgLSBTdGFydGluZyBieXRlIHBvc2l0aW9uIG9mIHRoZSBwYWdlIGJsb2JcbiAgICAgKiBAcGFyYW0gY291bnQgLSBOdW1iZXIgb2YgYnl0ZXMgdG8gZ2V0IHJhbmdlcyBkaWZmLlxuICAgICAqIEBwYXJhbSBwcmV2U25hcHNob3QgLSBUaW1lc3RhbXAgb2Ygc25hcHNob3QgdG8gcmV0cmlldmUgdGhlIGRpZmZlcmVuY2UuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHRoZSBQYWdlIEJsb2IgR2V0IFBhZ2UgUmFuZ2VzIERpZmYgb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIFJlc3BvbnNlIGRhdGEgZm9yIHRoZSBQYWdlIEJsb2IgR2V0IFBhZ2UgUmFuZ2UgRGlmZiBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgZ2V0UGFnZVJhbmdlc0RpZmYob2Zmc2V0LCBjb3VudCwgcHJldlNuYXBzaG90LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0gb3B0aW9ucy5jb25kaXRpb25zIHx8IHt9O1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIlBhZ2VCbG9iQ2xpZW50LWdldFBhZ2VSYW5nZXNEaWZmXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5wYWdlQmxvYkNvbnRleHQuZ2V0UGFnZVJhbmdlc0RpZmYoe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICBwcmV2c25hcHNob3Q6IHByZXZTbmFwc2hvdCxcbiAgICAgICAgICAgICAgICByYW5nZTogcmFuZ2VUb1N0cmluZyh7IG9mZnNldCwgY291bnQgfSksXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgcmV0dXJuIHJhbmdlUmVzcG9uc2VGcm9tTW9kZWwocmVzdWx0KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIGdldFBhZ2VSYW5nZXNEaWZmU2VnbWVudCByZXR1cm5zIGEgc2luZ2xlIHNlZ21lbnQgb2YgcGFnZSByYW5nZXMgc3RhcnRpbmcgZnJvbSB0aGVcbiAgICAgKiBzcGVjaWZpZWQgTWFya2VyIGZvciBkaWZmZXJlbmNlIGJldHdlZW4gcHJldmlvdXMgc25hcHNob3QgYW5kIHRoZSB0YXJnZXQgcGFnZSBibG9iLlxuICAgICAqIFVzZSBhbiBlbXB0eSBNYXJrZXIgdG8gc3RhcnQgZW51bWVyYXRpb24gZnJvbSB0aGUgYmVnaW5uaW5nLlxuICAgICAqIEFmdGVyIGdldHRpbmcgYSBzZWdtZW50LCBwcm9jZXNzIGl0LCBhbmQgdGhlbiBjYWxsIGdldFBhZ2VSYW5nZXNEaWZmU2VnbWVudCBhZ2FpblxuICAgICAqIChwYXNzaW5nIHRoZSB0aGUgcHJldmlvdXNseS1yZXR1cm5lZCBNYXJrZXIpIHRvIGdldCB0aGUgbmV4dCBzZWdtZW50LlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2dldC1wYWdlLXJhbmdlc1xuICAgICAqXG4gICAgICogQHBhcmFtIG9mZnNldCAtIFN0YXJ0aW5nIGJ5dGUgcG9zaXRpb24gb2YgdGhlIHBhZ2UgcmFuZ2VzLlxuICAgICAqIEBwYXJhbSBjb3VudCAtIE51bWJlciBvZiBieXRlcyB0byBnZXQuXG4gICAgICogQHBhcmFtIHByZXZTbmFwc2hvdE9yVXJsIC0gVGltZXN0YW1wIG9mIHNuYXBzaG90IHRvIHJldHJpZXZlIHRoZSBkaWZmZXJlbmNlIG9yIFVSTCBvZiBzbmFwc2hvdCB0byByZXRyaWV2ZSB0aGUgZGlmZmVyZW5jZS5cbiAgICAgKiBAcGFyYW0gbWFya2VyIC0gQSBzdHJpbmcgdmFsdWUgdGhhdCBpZGVudGlmaWVzIHRoZSBwb3J0aW9uIG9mIHRoZSBnZXQgdG8gYmUgcmV0dXJuZWQgd2l0aCB0aGUgbmV4dCBnZXQgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB0aGUgUGFnZSBCbG9iIEdldCBQYWdlIFJhbmdlcyBEaWZmIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBsaXN0UGFnZVJhbmdlc0RpZmZTZWdtZW50KG9mZnNldCwgY291bnQsIHByZXZTbmFwc2hvdE9yVXJsLCBtYXJrZXIsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIlBhZ2VCbG9iQ2xpZW50LWdldFBhZ2VSYW5nZXNEaWZmU2VnbWVudFwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLnBhZ2VCbG9iQ29udGV4dC5nZXRQYWdlUmFuZ2VzRGlmZih7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgcHJldnNuYXBzaG90OiBwcmV2U25hcHNob3RPclVybCxcbiAgICAgICAgICAgICAgICByYW5nZTogcmFuZ2VUb1N0cmluZyh7XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldDogb2Zmc2V0LFxuICAgICAgICAgICAgICAgICAgICBjb3VudDogY291bnQsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgbWFya2VyOiBtYXJrZXIsXG4gICAgICAgICAgICAgICAgbWF4UGFnZVNpemU6IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5tYXhQYWdlU2l6ZSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIEFzeW5jSXRlcmFibGVJdGVyYXRvciBmb3Ige0BsaW5rIFBhZ2VCbG9iR2V0UGFnZVJhbmdlc0RpZmZSZXNwb25zZU1vZGVsfVxuICAgICAqXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb2Zmc2V0IC0gU3RhcnRpbmcgYnl0ZSBwb3NpdGlvbiBvZiB0aGUgcGFnZSByYW5nZXMuXG4gICAgICogQHBhcmFtIGNvdW50IC0gTnVtYmVyIG9mIGJ5dGVzIHRvIGdldC5cbiAgICAgKiBAcGFyYW0gcHJldlNuYXBzaG90T3JVcmwgLSBUaW1lc3RhbXAgb2Ygc25hcHNob3QgdG8gcmV0cmlldmUgdGhlIGRpZmZlcmVuY2Ugb3IgVVJMIG9mIHNuYXBzaG90IHRvIHJldHJpZXZlIHRoZSBkaWZmZXJlbmNlLlxuICAgICAqIEBwYXJhbSBtYXJrZXIgLSBBIHN0cmluZyB2YWx1ZSB0aGF0IGlkZW50aWZpZXMgdGhlIHBvcnRpb24gb2ZcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGdldCBvZiBwYWdlIHJhbmdlcyB0byBiZSByZXR1cm5lZCB3aXRoIHRoZSBuZXh0IGdldHRpbmcgb3BlcmF0aW9uLiBUaGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uIHJldHVybnMgdGhlIENvbnRpbnVhdGlvblRva2VuIHZhbHVlIHdpdGhpbiB0aGUgcmVzcG9uc2UgYm9keSBpZiB0aGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0dGluZyBvcGVyYXRpb24gZGlkIG5vdCByZXR1cm4gYWxsIHBhZ2UgcmFuZ2VzIHJlbWFpbmluZyB3aXRoaW4gdGhlIGN1cnJlbnQgcGFnZS5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIENvbnRpbnVhdGlvblRva2VuIHZhbHVlIGNhbiBiZSB1c2VkIGFzIHRoZSB2YWx1ZSBmb3JcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1hcmtlciBwYXJhbWV0ZXIgaW4gYSBzdWJzZXF1ZW50IGNhbGwgdG8gcmVxdWVzdCB0aGUgbmV4dCBwYWdlIG9mIGdldFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy4gVGhlIG1hcmtlciB2YWx1ZSBpcyBvcGFxdWUgdG8gdGhlIGNsaWVudC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gdGhlIFBhZ2UgQmxvYiBHZXQgUGFnZSBSYW5nZXMgRGlmZiBvcGVyYXRpb24uXG4gICAgICovXG4gICAgbGlzdFBhZ2VSYW5nZURpZmZJdGVtU2VnbWVudHMob2Zmc2V0LCBjb3VudCwgcHJldlNuYXBzaG90T3JVcmwsIG1hcmtlciwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdHNsaWIuX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKiBsaXN0UGFnZVJhbmdlRGlmZkl0ZW1TZWdtZW50c18xKCkge1xuICAgICAgICAgICAgbGV0IGdldFBhZ2VSYW5nZUl0ZW1TZWdtZW50c1Jlc3BvbnNlO1xuICAgICAgICAgICAgaWYgKCEhbWFya2VyIHx8IG1hcmtlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICBnZXRQYWdlUmFuZ2VJdGVtU2VnbWVudHNSZXNwb25zZSA9IHlpZWxkIHRzbGliLl9fYXdhaXQodGhpcy5saXN0UGFnZVJhbmdlc0RpZmZTZWdtZW50KG9mZnNldCwgY291bnQsIHByZXZTbmFwc2hvdE9yVXJsLCBtYXJrZXIsIG9wdGlvbnMpKTtcbiAgICAgICAgICAgICAgICAgICAgbWFya2VyID0gZ2V0UGFnZVJhbmdlSXRlbVNlZ21lbnRzUmVzcG9uc2UuY29udGludWF0aW9uVG9rZW47XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIHlpZWxkIHRzbGliLl9fYXdhaXQoeWllbGQgdHNsaWIuX19hd2FpdChnZXRQYWdlUmFuZ2VJdGVtU2VnbWVudHNSZXNwb25zZSkpO1xuICAgICAgICAgICAgICAgIH0gd2hpbGUgKG1hcmtlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIEFzeW5jSXRlcmFibGVJdGVyYXRvciBvZiB7QGxpbmsgUGFnZVJhbmdlSW5mb30gb2JqZWN0c1xuICAgICAqXG4gICAgICogQHBhcmFtIG9mZnNldCAtIFN0YXJ0aW5nIGJ5dGUgcG9zaXRpb24gb2YgdGhlIHBhZ2UgcmFuZ2VzLlxuICAgICAqIEBwYXJhbSBjb3VudCAtIE51bWJlciBvZiBieXRlcyB0byBnZXQuXG4gICAgICogQHBhcmFtIHByZXZTbmFwc2hvdE9yVXJsIC0gVGltZXN0YW1wIG9mIHNuYXBzaG90IHRvIHJldHJpZXZlIHRoZSBkaWZmZXJlbmNlIG9yIFVSTCBvZiBzbmFwc2hvdCB0byByZXRyaWV2ZSB0aGUgZGlmZmVyZW5jZS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gdGhlIFBhZ2UgQmxvYiBHZXQgUGFnZSBSYW5nZXMgRGlmZiBvcGVyYXRpb24uXG4gICAgICovXG4gICAgbGlzdFBhZ2VSYW5nZURpZmZJdGVtcyhvZmZzZXQsIGNvdW50LCBwcmV2U25hcHNob3RPclVybCwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdHNsaWIuX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKiBsaXN0UGFnZVJhbmdlRGlmZkl0ZW1zXzEoKSB7XG4gICAgICAgICAgICB2YXIgX2EsIGVfMiwgX2IsIF9jO1xuICAgICAgICAgICAgbGV0IG1hcmtlcjtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgX2QgPSB0cnVlLCBfZSA9IHRzbGliLl9fYXN5bmNWYWx1ZXModGhpcy5saXN0UGFnZVJhbmdlRGlmZkl0ZW1TZWdtZW50cyhvZmZzZXQsIGNvdW50LCBwcmV2U25hcHNob3RPclVybCwgbWFya2VyLCBvcHRpb25zKSksIF9mOyBfZiA9IHlpZWxkIHRzbGliLl9fYXdhaXQoX2UubmV4dCgpKSwgX2EgPSBfZi5kb25lLCAhX2E7IF9kID0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICBfYyA9IF9mLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBfZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBnZXRQYWdlUmFuZ2VzU2VnbWVudCA9IF9jO1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCB0c2xpYi5fX2F3YWl0KHlpZWxkKiB0c2xpYi5fX2FzeW5jRGVsZWdhdG9yKHRzbGliLl9fYXN5bmNWYWx1ZXMoRXh0cmFjdFBhZ2VSYW5nZUluZm9JdGVtcyhnZXRQYWdlUmFuZ2VzU2VnbWVudCkpKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVfMl8xKSB7IGVfMiA9IHsgZXJyb3I6IGVfMl8xIH07IH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghX2QgJiYgIV9hICYmIChfYiA9IF9lLnJldHVybikpIHlpZWxkIHRzbGliLl9fYXdhaXQoX2IuY2FsbChfZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMikgdGhyb3cgZV8yLmVycm9yOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIGFzeW5jIGl0ZXJhYmxlIGl0ZXJhdG9yIHRvIGxpc3Qgb2YgcGFnZSByYW5nZXMgdGhhdCBkaWZmZXIgYmV0d2VlbiBhIHNwZWNpZmllZCBzbmFwc2hvdCBhbmQgdGhpcyBwYWdlIGJsb2IuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvZ2V0LXBhZ2UtcmFuZ2VzXG4gICAgICpcbiAgICAgKiAgLmJ5UGFnZSgpIHJldHVybnMgYW4gYXN5bmMgaXRlcmFibGUgaXRlcmF0b3IgdG8gbGlzdCBvZiBwYWdlIHJhbmdlcyB0aGF0IGRpZmZlciBiZXR3ZWVuIGEgc3BlY2lmaWVkIHNuYXBzaG90IGFuZCB0aGlzIHBhZ2UgYmxvYi5cbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNpbmcgYGZvciBhd2FpdGAgc3ludGF4OlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiAvLyBHZXQgdGhlIHBhZ2VCbG9iQ2xpZW50IGJlZm9yZSB5b3UgcnVuIHRoZXNlIHNuaXBwZXRzLFxuICAgICAqIC8vIENhbiBiZSBvYnRhaW5lZCBmcm9tIGBibG9iU2VydmljZUNsaWVudC5nZXRDb250YWluZXJDbGllbnQoXCI8eW91ci1jb250YWluZXItbmFtZT5cIikuZ2V0UGFnZUJsb2JDbGllbnQoXCI8eW91ci1ibG9iLW5hbWU+XCIpO2BcbiAgICAgKiBsZXQgaSA9IDE7XG4gICAgICogZm9yIGF3YWl0IChjb25zdCBwYWdlUmFuZ2Ugb2YgcGFnZUJsb2JDbGllbnQubGlzdFBhZ2VSYW5nZXNEaWZmKCkpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKGBQYWdlIHJhbmdlICR7aSsrfTogJHtwYWdlUmFuZ2Uuc3RhcnR9IC0gJHtwYWdlUmFuZ2UuZW5kfWApO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNpbmcgYGl0ZXIubmV4dCgpYDpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogbGV0IGkgPSAxO1xuICAgICAqIGxldCBpdGVyID0gcGFnZUJsb2JDbGllbnQubGlzdFBhZ2VSYW5nZXNEaWZmKCk7XG4gICAgICogbGV0IHBhZ2VSYW5nZUl0ZW0gPSBhd2FpdCBpdGVyLm5leHQoKTtcbiAgICAgKiB3aGlsZSAoIXBhZ2VSYW5nZUl0ZW0uZG9uZSkge1xuICAgICAqICAgY29uc29sZS5sb2coYFBhZ2UgcmFuZ2UgJHtpKyt9OiAke3BhZ2VSYW5nZUl0ZW0udmFsdWUuc3RhcnR9IC0gJHtwYWdlUmFuZ2VJdGVtLnZhbHVlLmVuZH0sIElzQ2xlYXI6ICR7cGFnZVJhbmdlSXRlbS52YWx1ZS5pc0NsZWFyfWApO1xuICAgICAqICAgcGFnZVJhbmdlSXRlbSA9IGF3YWl0IGl0ZXIubmV4dCgpO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNpbmcgYGJ5UGFnZSgpYDpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogLy8gcGFzc2luZyBvcHRpb25hbCBtYXhQYWdlU2l6ZSBpbiB0aGUgcGFnZSBzZXR0aW5nc1xuICAgICAqIGxldCBpID0gMTtcbiAgICAgKiBmb3IgYXdhaXQgKGNvbnN0IHJlc3BvbnNlIG9mIHBhZ2VCbG9iQ2xpZW50Lmxpc3RQYWdlUmFuZ2VzRGlmZigpLmJ5UGFnZSh7IG1heFBhZ2VTaXplOiAyMCB9KSkge1xuICAgICAqICAgZm9yIChjb25zdCBwYWdlUmFuZ2Ugb2YgcmVzcG9uc2UpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coYFBhZ2UgcmFuZ2UgJHtpKyt9OiAke3BhZ2VSYW5nZS5zdGFydH0gLSAke3BhZ2VSYW5nZS5lbmR9YCk7XG4gICAgICogICB9XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBwYWdpbmcgd2l0aCBhIG1hcmtlcjpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogbGV0IGkgPSAxO1xuICAgICAqIGxldCBpdGVyYXRvciA9IHBhZ2VCbG9iQ2xpZW50Lmxpc3RQYWdlUmFuZ2VzRGlmZigpLmJ5UGFnZSh7IG1heFBhZ2VTaXplOiAyIH0pO1xuICAgICAqIGxldCByZXNwb25zZSA9IChhd2FpdCBpdGVyYXRvci5uZXh0KCkpLnZhbHVlO1xuICAgICAqXG4gICAgICogLy8gUHJpbnRzIDIgcGFnZSByYW5nZXNcbiAgICAgKiBmb3IgKGNvbnN0IHBhZ2VSYW5nZSBvZiByZXNwb25zZSkge1xuICAgICAqICAgY29uc29sZS5sb2coYFBhZ2UgcmFuZ2UgJHtpKyt9OiAke3BhZ2VSYW5nZS5zdGFydH0gLSAke3BhZ2VSYW5nZS5lbmR9YCk7XG4gICAgICogfVxuICAgICAqXG4gICAgICogLy8gR2V0cyBuZXh0IG1hcmtlclxuICAgICAqIGxldCBtYXJrZXIgPSByZXNwb25zZS5jb250aW51YXRpb25Ub2tlbjtcbiAgICAgKlxuICAgICAqIC8vIFBhc3NpbmcgbmV4dCBtYXJrZXIgYXMgY29udGludWF0aW9uVG9rZW5cbiAgICAgKlxuICAgICAqIGl0ZXJhdG9yID0gcGFnZUJsb2JDbGllbnQubGlzdFBhZ2VSYW5nZXNEaWZmKCkuYnlQYWdlKHsgY29udGludWF0aW9uVG9rZW46IG1hcmtlciwgbWF4UGFnZVNpemU6IDEwIH0pO1xuICAgICAqIHJlc3BvbnNlID0gKGF3YWl0IGl0ZXJhdG9yLm5leHQoKSkudmFsdWU7XG4gICAgICpcbiAgICAgKiAvLyBQcmludHMgMTAgcGFnZSByYW5nZXNcbiAgICAgKiBmb3IgKGNvbnN0IGJsb2Igb2YgcmVzcG9uc2UpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKGBQYWdlIHJhbmdlICR7aSsrfTogJHtwYWdlUmFuZ2Uuc3RhcnR9IC0gJHtwYWdlUmFuZ2UuZW5kfWApO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKiBAcGFyYW0gb2Zmc2V0IC0gU3RhcnRpbmcgYnl0ZSBwb3NpdGlvbiBvZiB0aGUgcGFnZSByYW5nZXMuXG4gICAgICogQHBhcmFtIGNvdW50IC0gTnVtYmVyIG9mIGJ5dGVzIHRvIGdldC5cbiAgICAgKiBAcGFyYW0gcHJldlNuYXBzaG90IC0gVGltZXN0YW1wIG9mIHNuYXBzaG90IHRvIHJldHJpZXZlIHRoZSBkaWZmZXJlbmNlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB0aGUgUGFnZSBCbG9iIEdldCBSYW5nZXMgb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIEFuIGFzeW5jSXRlcmFibGVJdGVyYXRvciB0aGF0IHN1cHBvcnRzIHBhZ2luZy5cbiAgICAgKi9cbiAgICBsaXN0UGFnZVJhbmdlc0RpZmYob2Zmc2V0LCBjb3VudCwgcHJldlNuYXBzaG90LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0gb3B0aW9ucy5jb25kaXRpb25zIHx8IHt9O1xuICAgICAgICAvLyBBc3luY0l0ZXJhYmxlSXRlcmF0b3IgdG8gaXRlcmF0ZSBvdmVyIGJsb2JzXG4gICAgICAgIGNvbnN0IGl0ZXIgPSB0aGlzLmxpc3RQYWdlUmFuZ2VEaWZmSXRlbXMob2Zmc2V0LCBjb3VudCwgcHJldlNuYXBzaG90LCBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFRoZSBuZXh0IG1ldGhvZCwgcGFydCBvZiB0aGUgaXRlcmF0aW9uIHByb3RvY29sXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIG5leHQoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZXIubmV4dCgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVGhlIGNvbm5lY3Rpb24gdG8gdGhlIGFzeW5jIGl0ZXJhdG9yLCBwYXJ0IG9mIHRoZSBpdGVyYXRpb24gcHJvdG9jb2xcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFJldHVybiBhbiBBc3luY0l0ZXJhYmxlSXRlcmF0b3IgdGhhdCB3b3JrcyBhIHBhZ2UgYXQgYSB0aW1lXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGJ5UGFnZTogKHNldHRpbmdzID0ge30pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5saXN0UGFnZVJhbmdlRGlmZkl0ZW1TZWdtZW50cyhvZmZzZXQsIGNvdW50LCBwcmV2U25hcHNob3QsIHNldHRpbmdzLmNvbnRpbnVhdGlvblRva2VuLCBPYmplY3QuYXNzaWduKHsgbWF4UGFnZVNpemU6IHNldHRpbmdzLm1heFBhZ2VTaXplIH0sIG9wdGlvbnMpKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGNvbGxlY3Rpb24gb2YgcGFnZSByYW5nZXMgdGhhdCBkaWZmZXIgYmV0d2VlbiBhIHNwZWNpZmllZCBzbmFwc2hvdCBhbmQgdGhpcyBwYWdlIGJsb2IgZm9yIG1hbmFnZWQgZGlza3MuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvZ2V0LXBhZ2UtcmFuZ2VzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb2Zmc2V0IC0gU3RhcnRpbmcgYnl0ZSBwb3NpdGlvbiBvZiB0aGUgcGFnZSBibG9iXG4gICAgICogQHBhcmFtIGNvdW50IC0gTnVtYmVyIG9mIGJ5dGVzIHRvIGdldCByYW5nZXMgZGlmZi5cbiAgICAgKiBAcGFyYW0gcHJldlNuYXBzaG90VXJsIC0gVVJMIG9mIHNuYXBzaG90IHRvIHJldHJpZXZlIHRoZSBkaWZmZXJlbmNlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB0aGUgUGFnZSBCbG9iIEdldCBQYWdlIFJhbmdlcyBEaWZmIG9wZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyBSZXNwb25zZSBkYXRhIGZvciB0aGUgUGFnZSBCbG9iIEdldCBQYWdlIFJhbmdlIERpZmYgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGdldFBhZ2VSYW5nZXNEaWZmRm9yTWFuYWdlZERpc2tzKG9mZnNldCwgY291bnQsIHByZXZTbmFwc2hvdFVybCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIG9wdGlvbnMuY29uZGl0aW9ucyA9IG9wdGlvbnMuY29uZGl0aW9ucyB8fCB7fTtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJQYWdlQmxvYkNsaWVudC1HZXRQYWdlUmFuZ2VzRGlmZkZvck1hbmFnZWREaXNrc1wiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5wYWdlQmxvYkNvbnRleHQuZ2V0UGFnZVJhbmdlc0RpZmYoe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICBwcmV2U25hcHNob3RVcmwsXG4gICAgICAgICAgICAgICAgcmFuZ2U6IHJhbmdlVG9TdHJpbmcoeyBvZmZzZXQsIGNvdW50IH0pLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHJldHVybiByYW5nZVJlc3BvbnNlRnJvbU1vZGVsKHJlc3BvbnNlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlc2l6ZXMgdGhlIHBhZ2UgYmxvYiB0byB0aGUgc3BlY2lmaWVkIHNpemUgKHdoaWNoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA1MTIpLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL3NldC1ibG9iLXByb3BlcnRpZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBzaXplIC0gVGFyZ2V0IHNpemVcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gdGhlIFBhZ2UgQmxvYiBSZXNpemUgb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIFJlc3BvbnNlIGRhdGEgZm9yIHRoZSBQYWdlIEJsb2IgUmVzaXplIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyByZXNpemUoc2l6ZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIG9wdGlvbnMuY29uZGl0aW9ucyA9IG9wdGlvbnMuY29uZGl0aW9ucyB8fCB7fTtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJQYWdlQmxvYkNsaWVudC1yZXNpemVcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5wYWdlQmxvYkNvbnRleHQucmVzaXplKHNpemUsIHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiBvcHRpb25zLmVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIGEgcGFnZSBibG9iJ3Mgc2VxdWVuY2UgbnVtYmVyLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL3NldC1ibG9iLXByb3BlcnRpZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBzZXF1ZW5jZU51bWJlckFjdGlvbiAtIEluZGljYXRlcyBob3cgdGhlIHNlcnZpY2Ugc2hvdWxkIG1vZGlmeSB0aGUgYmxvYidzIHNlcXVlbmNlIG51bWJlci5cbiAgICAgKiBAcGFyYW0gc2VxdWVuY2VOdW1iZXIgLSBSZXF1aXJlZCBpZiBzZXF1ZW5jZU51bWJlckFjdGlvbiBpcyBtYXggb3IgdXBkYXRlXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHRoZSBQYWdlIEJsb2IgVXBkYXRlIFNlcXVlbmNlIE51bWJlciBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgdGhlIFBhZ2UgQmxvYiBVcGRhdGUgU2VxdWVuY2UgTnVtYmVyIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyB1cGRhdGVTZXF1ZW5jZU51bWJlcihzZXF1ZW5jZU51bWJlckFjdGlvbiwgc2VxdWVuY2VOdW1iZXIsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiUGFnZUJsb2JDbGllbnQtdXBkYXRlU2VxdWVuY2VOdW1iZXJcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5wYWdlQmxvYkNvbnRleHQudXBkYXRlU2VxdWVuY2VOdW1iZXIoc2VxdWVuY2VOdW1iZXJBY3Rpb24sIHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBibG9iU2VxdWVuY2VOdW1iZXI6IHNlcXVlbmNlTnVtYmVyLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBCZWdpbnMgYW4gb3BlcmF0aW9uIHRvIHN0YXJ0IGFuIGluY3JlbWVudGFsIGNvcHkgZnJvbSBvbmUgcGFnZSBibG9iJ3Mgc25hcHNob3QgdG8gdGhpcyBwYWdlIGJsb2IuXG4gICAgICogVGhlIHNuYXBzaG90IGlzIGNvcGllZCBzdWNoIHRoYXQgb25seSB0aGUgZGlmZmVyZW50aWFsIGNoYW5nZXMgYmV0d2VlbiB0aGUgcHJldmlvdXNseVxuICAgICAqIGNvcGllZCBzbmFwc2hvdCBhcmUgdHJhbnNmZXJyZWQgdG8gdGhlIGRlc3RpbmF0aW9uLlxuICAgICAqIFRoZSBjb3BpZWQgc25hcHNob3RzIGFyZSBjb21wbGV0ZSBjb3BpZXMgb2YgdGhlIG9yaWdpbmFsIHNuYXBzaG90IGFuZCBjYW4gYmUgcmVhZCBvciBjb3BpZWQgZnJvbSBhcyB1c3VhbC5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9pbmNyZW1lbnRhbC1jb3B5LWJsb2JcbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL2F6dXJlL3ZpcnR1YWwtbWFjaGluZXMvd2luZG93cy9pbmNyZW1lbnRhbC1zbmFwc2hvdHNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb3B5U291cmNlIC0gU3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBzb3VyY2UgcGFnZSBibG9iIHNuYXBzaG90LiBGb3IgZXhhbXBsZSxcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL215YWNjb3VudC5ibG9iLmNvcmUud2luZG93cy5uZXQvbXljb250YWluZXIvbXlibG9iP3NuYXBzaG90PTxEYXRlVGltZT5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gdGhlIFBhZ2UgQmxvYiBDb3B5IEluY3JlbWVudGFsIG9wZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyBSZXNwb25zZSBkYXRhIGZvciB0aGUgUGFnZSBCbG9iIENvcHkgSW5jcmVtZW50YWwgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIHN0YXJ0Q29weUluY3JlbWVudGFsKGNvcHlTb3VyY2UsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIlBhZ2VCbG9iQ2xpZW50LXN0YXJ0Q29weUluY3JlbWVudGFsXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMucGFnZUJsb2JDb250ZXh0LmNvcHlJbmNyZW1lbnRhbChjb3B5U291cmNlLCB7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbmFzeW5jIGZ1bmN0aW9uIGdldEJvZHlBc1RleHQoYmF0Y2hSZXNwb25zZSkge1xuICAgIGxldCBidWZmZXIgPSBCdWZmZXIuYWxsb2MoQkFUQ0hfTUFYX1BBWUxPQURfSU5fQllURVMpO1xuICAgIGNvbnN0IHJlc3BvbnNlTGVuZ3RoID0gYXdhaXQgc3RyZWFtVG9CdWZmZXIyKGJhdGNoUmVzcG9uc2UucmVhZGFibGVTdHJlYW1Cb2R5LCBidWZmZXIpO1xuICAgIC8vIFNsaWNlIHRoZSBidWZmZXIgdG8gdHJpbSB0aGUgZW1wdHkgZW5kaW5nLlxuICAgIGJ1ZmZlciA9IGJ1ZmZlci5zbGljZSgwLCByZXNwb25zZUxlbmd0aCk7XG4gICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpO1xufVxuZnVuY3Rpb24gdXRmOEJ5dGVMZW5ndGgoc3RyKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5ieXRlTGVuZ3RoKHN0cik7XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuY29uc3QgSFRUUF9IRUFERVJfREVMSU1JVEVSID0gXCI6IFwiO1xuY29uc3QgU1BBQ0VfREVMSU1JVEVSID0gXCIgXCI7XG5jb25zdCBOT1RfRk9VTkQgPSAtMTtcbi8qKlxuICogVXRpbCBjbGFzcyBmb3IgcGFyc2luZyBiYXRjaCByZXNwb25zZS5cbiAqL1xuY2xhc3MgQmF0Y2hSZXNwb25zZVBhcnNlciB7XG4gICAgY29uc3RydWN0b3IoYmF0Y2hSZXNwb25zZSwgc3ViUmVxdWVzdHMpIHtcbiAgICAgICAgaWYgKCFiYXRjaFJlc3BvbnNlIHx8ICFiYXRjaFJlc3BvbnNlLmNvbnRlbnRUeXBlKSB7XG4gICAgICAgICAgICAvLyBJbiBzcGVjaWFsIGNhc2UocmVwb3J0ZWQpLCBzZXJ2ZXIgbWF5IHJldHVybiBpbnZhbGlkIGNvbnRlbnQtdHlwZSB3aGljaCBjb3VsZCBub3QgYmUgcGFyc2VkLlxuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJiYXRjaFJlc3BvbnNlIGlzIG1hbGZvcm1lZCBvciBkb2Vzbid0IGNvbnRhaW4gdmFsaWQgY29udGVudC10eXBlLlwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXN1YlJlcXVlc3RzIHx8IHN1YlJlcXVlc3RzLnNpemUgPT09IDApIHtcbiAgICAgICAgICAgIC8vIFRoaXMgc2hvdWxkIGJlIHByZXZlbnQgZHVyaW5nIGNvZGluZy5cbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiSW52YWxpZCBzdGF0ZTogc3ViUmVxdWVzdHMgaXMgbm90IHByb3ZpZGVkIG9yIHNpemUgaXMgMC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5iYXRjaFJlc3BvbnNlID0gYmF0Y2hSZXNwb25zZTtcbiAgICAgICAgdGhpcy5zdWJSZXF1ZXN0cyA9IHN1YlJlcXVlc3RzO1xuICAgICAgICB0aGlzLnJlc3BvbnNlQmF0Y2hCb3VuZGFyeSA9IHRoaXMuYmF0Y2hSZXNwb25zZS5jb250ZW50VHlwZS5zcGxpdChcIj1cIilbMV07XG4gICAgICAgIHRoaXMucGVyUmVzcG9uc2VQcmVmaXggPSBgLS0ke3RoaXMucmVzcG9uc2VCYXRjaEJvdW5kYXJ5fSR7SFRUUF9MSU5FX0VORElOR31gO1xuICAgICAgICB0aGlzLmJhdGNoUmVzcG9uc2VFbmRpbmcgPSBgLS0ke3RoaXMucmVzcG9uc2VCYXRjaEJvdW5kYXJ5fS0tYDtcbiAgICB9XG4gICAgLy8gRm9yIGV4YW1wbGUgb2YgcmVzcG9uc2UsIHBsZWFzZSByZWZlciB0byBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvYmxvYi1iYXRjaCNyZXNwb25zZVxuICAgIGFzeW5jIHBhcnNlQmF0Y2hSZXNwb25zZSgpIHtcbiAgICAgICAgLy8gV2hlbiBsb2dpYyByZWFjaCBoZXJlLCBzdXBwb3NlIGJhdGNoIHJlcXVlc3QgaGFzIGFscmVhZHkgc3VjY2VlZGVkIHdpdGggMjAyLCBzbyB3ZSBjYW4gZnVydGhlciBwYXJzZVxuICAgICAgICAvLyBzdWIgcmVxdWVzdCdzIHJlc3BvbnNlLlxuICAgICAgICBpZiAodGhpcy5iYXRjaFJlc3BvbnNlLl9yZXNwb25zZS5zdGF0dXMgIT09IEhUVFBVUkxDb25uZWN0aW9uLkhUVFBfQUNDRVBURUQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBzdGF0ZTogYmF0Y2ggcmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXM6ICcke3RoaXMuYmF0Y2hSZXNwb25zZS5fcmVzcG9uc2Uuc3RhdHVzfScuYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzcG9uc2VCb2R5QXNUZXh0ID0gYXdhaXQgZ2V0Qm9keUFzVGV4dCh0aGlzLmJhdGNoUmVzcG9uc2UpO1xuICAgICAgICBjb25zdCBzdWJSZXNwb25zZXMgPSByZXNwb25zZUJvZHlBc1RleHRcbiAgICAgICAgICAgIC5zcGxpdCh0aGlzLmJhdGNoUmVzcG9uc2VFbmRpbmcpWzBdIC8vIHN0cmluZyBhZnRlciBlbmRpbmcgaXMgdXNlbGVzc1xuICAgICAgICAgICAgLnNwbGl0KHRoaXMucGVyUmVzcG9uc2VQcmVmaXgpXG4gICAgICAgICAgICAuc2xpY2UoMSk7IC8vIHN0cmluZyBiZWZvcmUgZmlyc3QgcmVzcG9uc2UgYm91bmRhcnkgaXMgdXNlbGVzc1xuICAgICAgICBjb25zdCBzdWJSZXNwb25zZUNvdW50ID0gc3ViUmVzcG9uc2VzLmxlbmd0aDtcbiAgICAgICAgLy8gRGVmZW5zaXZlIGNvZGluZyBpbiBjYXNlIG9mIHBvdGVudGlhbCBlcnJvciBwYXJzaW5nLlxuICAgICAgICAvLyBOb3RlOiBzdWJSZXNwb25zZUNvdW50ID09IDEgaXMgc3BlY2lhbCBjYXNlIHdoZXJlIHN1YiByZXF1ZXN0IGlzIGludmFsaWQuXG4gICAgICAgIC8vIFdlIHRyeSB0byBwcmV2ZW50IHN1Y2ggY2FzZXMgdGhyb3VnaCBlYXJseSB2YWxpZGF0aW9uLCBlLmcuIHZhbGlkYXRlIHN1YiByZXF1ZXN0IGNvdW50ID49IDEuXG4gICAgICAgIC8vIFdoaWxlIGluIHVuZXhwZWN0ZWQgc3ViIHJlcXVlc3QgaW52YWxpZCBjYXNlLCB3ZSBhbGxvdyBzdWIgcmVzcG9uc2UgdG8gYmUgcGFyc2VkIGFuZCByZXR1cm4gdG8gdXNlci5cbiAgICAgICAgaWYgKHN1YlJlc3BvbnNlQ291bnQgIT09IHRoaXMuc3ViUmVxdWVzdHMuc2l6ZSAmJiBzdWJSZXNwb25zZUNvdW50ICE9PSAxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBzdWIgcmVzcG9uc2VzJyBjb3VudCBpcyBub3QgZXF1YWwgdG8gc3ViIHJlcXVlc3RzJyBjb3VudC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGVzZXJpYWxpemVkU3ViUmVzcG9uc2VzID0gbmV3IEFycmF5KHN1YlJlc3BvbnNlQ291bnQpO1xuICAgICAgICBsZXQgc3ViUmVzcG9uc2VzU3VjY2VlZGVkQ291bnQgPSAwO1xuICAgICAgICBsZXQgc3ViUmVzcG9uc2VzRmFpbGVkQ291bnQgPSAwO1xuICAgICAgICAvLyBQYXJzZSBzdWIgc3ViUmVzcG9uc2VzLlxuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgc3ViUmVzcG9uc2VDb3VudDsgaW5kZXgrKykge1xuICAgICAgICAgICAgY29uc3Qgc3ViUmVzcG9uc2UgPSBzdWJSZXNwb25zZXNbaW5kZXhdO1xuICAgICAgICAgICAgY29uc3QgZGVzZXJpYWxpemVkU3ViUmVzcG9uc2UgPSB7fTtcbiAgICAgICAgICAgIGRlc2VyaWFsaXplZFN1YlJlc3BvbnNlLmhlYWRlcnMgPSBjb3JlSHR0cENvbXBhdC50b0h0dHBIZWFkZXJzTGlrZShjb3JlUmVzdFBpcGVsaW5lLmNyZWF0ZUh0dHBIZWFkZXJzKCkpO1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2VMaW5lcyA9IHN1YlJlc3BvbnNlLnNwbGl0KGAke0hUVFBfTElORV9FTkRJTkd9YCk7XG4gICAgICAgICAgICBsZXQgc3ViUmVzcEhlYWRlclN0YXJ0Rm91bmQgPSBmYWxzZTtcbiAgICAgICAgICAgIGxldCBzdWJSZXNwSGVhZGVyRW5kRm91bmQgPSBmYWxzZTtcbiAgICAgICAgICAgIGxldCBzdWJSZXNwRmFpbGVkID0gZmFsc2U7XG4gICAgICAgICAgICBsZXQgY29udGVudElkID0gTk9UX0ZPVU5EO1xuICAgICAgICAgICAgZm9yIChjb25zdCByZXNwb25zZUxpbmUgb2YgcmVzcG9uc2VMaW5lcykge1xuICAgICAgICAgICAgICAgIGlmICghc3ViUmVzcEhlYWRlclN0YXJ0Rm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ29udmVudGlvbiBsaW5lIHRvIGluZGljYXRlIGNvbnRlbnQgSURcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlTGluZS5zdGFydHNXaXRoKEhlYWRlckNvbnN0YW50cy5DT05URU5UX0lEKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudElkID0gcGFyc2VJbnQocmVzcG9uc2VMaW5lLnNwbGl0KEhUVFBfSEVBREVSX0RFTElNSVRFUilbMV0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIEh0dHAgdmVyc2lvbiBsaW5lIHdpdGggc3RhdHVzIGNvZGUgaW5kaWNhdGVzIHRoZSBzdGFydCBvZiBzdWIgcmVxdWVzdCdzIHJlc3BvbnNlLlxuICAgICAgICAgICAgICAgICAgICAvLyBFeGFtcGxlOiBIVFRQLzEuMSAyMDIgQWNjZXB0ZWRcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlTGluZS5zdGFydHNXaXRoKEhUVFBfVkVSU0lPTl8xXzEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJSZXNwSGVhZGVyU3RhcnRGb3VuZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0b2tlbnMgPSByZXNwb25zZUxpbmUuc3BsaXQoU1BBQ0VfREVMSU1JVEVSKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2VyaWFsaXplZFN1YlJlc3BvbnNlLnN0YXR1cyA9IHBhcnNlSW50KHRva2Vuc1sxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNlcmlhbGl6ZWRTdWJSZXNwb25zZS5zdGF0dXNNZXNzYWdlID0gdG9rZW5zLnNsaWNlKDIpLmpvaW4oU1BBQ0VfREVMSU1JVEVSKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgLy8gU2tpcCBjb252ZW50aW9uIGhlYWRlcnMgbm90IHNwZWNpZmljYWxseSBmb3Igc3ViIHJlcXVlc3QgaS5lLiBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2h0dHAgYW5kIENvbnRlbnQtSUQ6ICpcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlTGluZS50cmltKCkgPT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gU3ViIHJlc3BvbnNlJ3MgaGVhZGVyIHN0YXJ0IGxpbmUgYWxyZWFkeSBmb3VuZCwgYW5kIHRoZSBmaXJzdCBlbXB0eSBsaW5lIGluZGljYXRlcyBoZWFkZXIgZW5kIGxpbmUgZm91bmQuXG4gICAgICAgICAgICAgICAgICAgIGlmICghc3ViUmVzcEhlYWRlckVuZEZvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJSZXNwSGVhZGVyRW5kRm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBTa2lwIGVtcHR5IGxpbmVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gTm90ZTogd2hlbiBjb2RlIHJlYWNoIGhlcmUsIGl0IGluZGljYXRlcyBzdWJSZXNwSGVhZGVyU3RhcnRGb3VuZCA9PSB0cnVlXG4gICAgICAgICAgICAgICAgaWYgKCFzdWJSZXNwSGVhZGVyRW5kRm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlTGluZS5pbmRleE9mKEhUVFBfSEVBREVSX0RFTElNSVRFUikgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWZlbnNpdmUgY29kaW5nIHRvIHByZXZlbnQgZnJvbSBtaXNzaW5nIHZhbHVhYmxlIGxpbmVzLlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHN0YXRlOiBmaW5kIG5vbi1lbXB0eSBsaW5lICcke3Jlc3BvbnNlTGluZX0nIHdpdGhvdXQgSFRUUCBoZWFkZXIgZGVsaW1pdGVyICcke0hUVFBfSEVBREVSX0RFTElNSVRFUn0nLmApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIFBhcnNlIGhlYWRlcnMgb2Ygc3ViIHJlc3BvbnNlLlxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0b2tlbnMgPSByZXNwb25zZUxpbmUuc3BsaXQoSFRUUF9IRUFERVJfREVMSU1JVEVSKTtcbiAgICAgICAgICAgICAgICAgICAgZGVzZXJpYWxpemVkU3ViUmVzcG9uc2UuaGVhZGVycy5zZXQodG9rZW5zWzBdLCB0b2tlbnNbMV0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW5zWzBdID09PSBIZWFkZXJDb25zdGFudHMuWF9NU19FUlJPUl9DT0RFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNlcmlhbGl6ZWRTdWJSZXNwb25zZS5lcnJvckNvZGUgPSB0b2tlbnNbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJSZXNwRmFpbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQXNzZW1ibGUgYm9keSBvZiBzdWIgcmVzcG9uc2UuXG4gICAgICAgICAgICAgICAgICAgIGlmICghZGVzZXJpYWxpemVkU3ViUmVzcG9uc2UuYm9keUFzVGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVzZXJpYWxpemVkU3ViUmVzcG9uc2UuYm9keUFzVGV4dCA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZGVzZXJpYWxpemVkU3ViUmVzcG9uc2UuYm9keUFzVGV4dCArPSByZXNwb25zZUxpbmU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSAvLyBJbm5lciBmb3IgZW5kXG4gICAgICAgICAgICAvLyBUaGUgcmVzcG9uc2Ugd2lsbCBjb250YWluIHRoZSBDb250ZW50LUlEIGhlYWRlciBmb3IgZWFjaCBjb3JyZXNwb25kaW5nIHN1YnJlcXVlc3QgcmVzcG9uc2UgdG8gdXNlIGZvciB0cmFja2luZy5cbiAgICAgICAgICAgIC8vIFRoZSBDb250ZW50LUlEcyBhcmUgc2V0IHRvIGEgdmFsaWQgaW5kZXggaW4gdGhlIHN1YnJlcXVlc3RzIHdlIHNlbnQuIEluIHRoZSBzdGF0dXMgY29kZSAyMDIgcGF0aCwgd2UgY291bGQgZXhwZWN0IGl0XG4gICAgICAgICAgICAvLyB0byBiZSAxLTEgbWFwcGluZyBmcm9tIHRoZSBbMCwgc3ViUmVxdWVzdHMuc2l6ZSkgdG8gdGhlIENvbnRlbnQtSURzIHJldHVybmVkLiBJZiBub3QsIHdlIHNpbXBseSBkb24ndCByZXR1cm4gdGhhdFxuICAgICAgICAgICAgLy8gdW5leHBlY3RlZCBzdWJSZXNwb25zZSBpbiB0aGUgcGFyc2VkIHJlcG9uc2UgYW5kIHdlIGNhbiBhbHdheXMgbG9vayBpdCB1cCBpbiB0aGUgcmF3IHJlc3BvbnNlIGZvciBkZWJ1Z2dpbmcgcHVycG9zZS5cbiAgICAgICAgICAgIGlmIChjb250ZW50SWQgIT09IE5PVF9GT1VORCAmJlxuICAgICAgICAgICAgICAgIE51bWJlci5pc0ludGVnZXIoY29udGVudElkKSAmJlxuICAgICAgICAgICAgICAgIGNvbnRlbnRJZCA+PSAwICYmXG4gICAgICAgICAgICAgICAgY29udGVudElkIDwgdGhpcy5zdWJSZXF1ZXN0cy5zaXplICYmXG4gICAgICAgICAgICAgICAgZGVzZXJpYWxpemVkU3ViUmVzcG9uc2VzW2NvbnRlbnRJZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGRlc2VyaWFsaXplZFN1YlJlc3BvbnNlLl9yZXF1ZXN0ID0gdGhpcy5zdWJSZXF1ZXN0cy5nZXQoY29udGVudElkKTtcbiAgICAgICAgICAgICAgICBkZXNlcmlhbGl6ZWRTdWJSZXNwb25zZXNbY29udGVudElkXSA9IGRlc2VyaWFsaXplZFN1YlJlc3BvbnNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGBzdWJSZXNwb25zZXNbJHtpbmRleH1dIGlzIGRyb3BwZWQgYXMgdGhlIENvbnRlbnQtSUQgaXMgbm90IGZvdW5kIG9yIGludmFsaWQsIENvbnRlbnQtSUQ6ICR7Y29udGVudElkfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHN1YlJlc3BGYWlsZWQpIHtcbiAgICAgICAgICAgICAgICBzdWJSZXNwb25zZXNGYWlsZWRDb3VudCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc3ViUmVzcG9uc2VzU3VjY2VlZGVkQ291bnQrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3ViUmVzcG9uc2VzOiBkZXNlcmlhbGl6ZWRTdWJSZXNwb25zZXMsXG4gICAgICAgICAgICBzdWJSZXNwb25zZXNTdWNjZWVkZWRDb3VudDogc3ViUmVzcG9uc2VzU3VjY2VlZGVkQ291bnQsXG4gICAgICAgICAgICBzdWJSZXNwb25zZXNGYWlsZWRDb3VudDogc3ViUmVzcG9uc2VzRmFpbGVkQ291bnQsXG4gICAgICAgIH07XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbnZhciBNdXRleExvY2tTdGF0dXM7XG4oZnVuY3Rpb24gKE11dGV4TG9ja1N0YXR1cykge1xuICAgIE11dGV4TG9ja1N0YXR1c1tNdXRleExvY2tTdGF0dXNbXCJMT0NLRURcIl0gPSAwXSA9IFwiTE9DS0VEXCI7XG4gICAgTXV0ZXhMb2NrU3RhdHVzW011dGV4TG9ja1N0YXR1c1tcIlVOTE9DS0VEXCJdID0gMV0gPSBcIlVOTE9DS0VEXCI7XG59KShNdXRleExvY2tTdGF0dXMgfHwgKE11dGV4TG9ja1N0YXR1cyA9IHt9KSk7XG4vKipcbiAqIEFuIGFzeW5jIG11dGV4IGxvY2suXG4gKi9cbmNsYXNzIE11dGV4IHtcbiAgICAvKipcbiAgICAgKiBMb2NrIGZvciBhIHNwZWNpZmljIGtleS4gSWYgdGhlIGxvY2sgaGFzIGJlZW4gYWNxdWlyZWQgYnkgYW5vdGhlciBjdXN0b21lciwgdGhlblxuICAgICAqIHdpbGwgd2FpdCB1bnRpbCBnZXR0aW5nIHRoZSBsb2NrLlxuICAgICAqXG4gICAgICogQHBhcmFtIGtleSAtIGxvY2sga2V5XG4gICAgICovXG4gICAgc3RhdGljIGFzeW5jIGxvY2soa2V5KSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMua2V5c1trZXldID09PSB1bmRlZmluZWQgfHwgdGhpcy5rZXlzW2tleV0gPT09IE11dGV4TG9ja1N0YXR1cy5VTkxPQ0tFRCkge1xuICAgICAgICAgICAgICAgIHRoaXMua2V5c1trZXldID0gTXV0ZXhMb2NrU3RhdHVzLkxPQ0tFRDtcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uVW5sb2NrRXZlbnQoa2V5LCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMua2V5c1trZXldID0gTXV0ZXhMb2NrU3RhdHVzLkxPQ0tFRDtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVW5sb2NrIGEga2V5LlxuICAgICAqXG4gICAgICogQHBhcmFtIGtleSAtXG4gICAgICovXG4gICAgc3RhdGljIGFzeW5jIHVubG9jayhrZXkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5rZXlzW2tleV0gPT09IE11dGV4TG9ja1N0YXR1cy5MT0NLRUQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRVbmxvY2tFdmVudChrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVsZXRlIHRoaXMua2V5c1trZXldO1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgc3RhdGljIG9uVW5sb2NrRXZlbnQoa2V5LCBoYW5kbGVyKSB7XG4gICAgICAgIGlmICh0aGlzLmxpc3RlbmVyc1trZXldID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzW2tleV0gPSBbaGFuZGxlcl07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmxpc3RlbmVyc1trZXldLnB1c2goaGFuZGxlcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGVtaXRVbmxvY2tFdmVudChrZXkpIHtcbiAgICAgICAgaWYgKHRoaXMubGlzdGVuZXJzW2tleV0gIT09IHVuZGVmaW5lZCAmJiB0aGlzLmxpc3RlbmVyc1trZXldLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzLmxpc3RlbmVyc1trZXldLnNoaWZ0KCk7XG4gICAgICAgICAgICBzZXRJbW1lZGlhdGUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGhhbmRsZXIuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxufVxuTXV0ZXgua2V5cyA9IHt9O1xuTXV0ZXgubGlzdGVuZXJzID0ge307XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBBIEJsb2JCYXRjaCByZXByZXNlbnRzIGFuIGFnZ3JlZ2F0ZWQgc2V0IG9mIG9wZXJhdGlvbnMgb24gYmxvYnMuXG4gKiBDdXJyZW50bHksIG9ubHkgYGRlbGV0ZWAgYW5kIGBzZXRBY2Nlc3NUaWVyYCBhcmUgc3VwcG9ydGVkLlxuICovXG5jbGFzcyBCbG9iQmF0Y2gge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmJhdGNoID0gXCJiYXRjaFwiO1xuICAgICAgICB0aGlzLmJhdGNoUmVxdWVzdCA9IG5ldyBJbm5lckJhdGNoUmVxdWVzdCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIHZhbHVlIG9mIENvbnRlbnQtVHlwZSBmb3IgYSBiYXRjaCByZXF1ZXN0LlxuICAgICAqIFRoZSB2YWx1ZSBtdXN0IGJlIG11bHRpcGFydC9taXhlZCB3aXRoIGEgYmF0Y2ggYm91bmRhcnkuXG4gICAgICogRXhhbXBsZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT1iYXRjaF9hODE3ODZjOC1lMzAxLTRlNDItYTcyOS1hMzJjYTI0YWUyNTJcbiAgICAgKi9cbiAgICBnZXRNdWx0aVBhcnRDb250ZW50VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmF0Y2hSZXF1ZXN0LmdldE11bHRpcGFydENvbnRlbnRUeXBlKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCBhc3NlbWJsZWQgSFRUUCByZXF1ZXN0IGJvZHkgZm9yIHN1YiByZXF1ZXN0cy5cbiAgICAgKi9cbiAgICBnZXRIdHRwUmVxdWVzdEJvZHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhdGNoUmVxdWVzdC5nZXRIdHRwUmVxdWVzdEJvZHkoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IHN1YiByZXF1ZXN0cyB0aGF0IGFyZSBhZGRlZCBpbnRvIHRoZSBiYXRjaCByZXF1ZXN0LlxuICAgICAqL1xuICAgIGdldFN1YlJlcXVlc3RzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5iYXRjaFJlcXVlc3QuZ2V0U3ViUmVxdWVzdHMoKTtcbiAgICB9XG4gICAgYXN5bmMgYWRkU3ViUmVxdWVzdEludGVybmFsKHN1YlJlcXVlc3QsIGFzc2VtYmxlU3ViUmVxdWVzdEZ1bmMpIHtcbiAgICAgICAgYXdhaXQgTXV0ZXgubG9jayh0aGlzLmJhdGNoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuYmF0Y2hSZXF1ZXN0LnByZUFkZFN1YlJlcXVlc3Qoc3ViUmVxdWVzdCk7XG4gICAgICAgICAgICBhd2FpdCBhc3NlbWJsZVN1YlJlcXVlc3RGdW5jKCk7XG4gICAgICAgICAgICB0aGlzLmJhdGNoUmVxdWVzdC5wb3N0QWRkU3ViUmVxdWVzdChzdWJSZXF1ZXN0KTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIGF3YWl0IE11dGV4LnVubG9jayh0aGlzLmJhdGNoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzZXRCYXRjaFR5cGUoYmF0Y2hUeXBlKSB7XG4gICAgICAgIGlmICghdGhpcy5iYXRjaFR5cGUpIHtcbiAgICAgICAgICAgIHRoaXMuYmF0Y2hUeXBlID0gYmF0Y2hUeXBlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmJhdGNoVHlwZSAhPT0gYmF0Y2hUeXBlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgQmxvYkJhdGNoIG9ubHkgc3VwcG9ydHMgb25lIG9wZXJhdGlvbiB0eXBlIHBlciBiYXRjaCBhbmQgaXQgYWxyZWFkeSBpcyBiZWluZyB1c2VkIGZvciAke3RoaXMuYmF0Y2hUeXBlfSBvcGVyYXRpb25zLmApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIGRlbGV0ZUJsb2IodXJsT3JCbG9iQ2xpZW50LCBjcmVkZW50aWFsT3JPcHRpb25zLCBvcHRpb25zKSB7XG4gICAgICAgIGxldCB1cmw7XG4gICAgICAgIGxldCBjcmVkZW50aWFsO1xuICAgICAgICBpZiAodHlwZW9mIHVybE9yQmxvYkNsaWVudCA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgKChjb3JlVXRpbC5pc05vZGUgJiYgY3JlZGVudGlhbE9yT3B0aW9ucyBpbnN0YW5jZW9mIFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsKSB8fFxuICAgICAgICAgICAgICAgIGNyZWRlbnRpYWxPck9wdGlvbnMgaW5zdGFuY2VvZiBBbm9ueW1vdXNDcmVkZW50aWFsIHx8XG4gICAgICAgICAgICAgICAgY29yZUF1dGguaXNUb2tlbkNyZWRlbnRpYWwoY3JlZGVudGlhbE9yT3B0aW9ucykpKSB7XG4gICAgICAgICAgICAvLyBGaXJzdCBvdmVybG9hZFxuICAgICAgICAgICAgdXJsID0gdXJsT3JCbG9iQ2xpZW50O1xuICAgICAgICAgICAgY3JlZGVudGlhbCA9IGNyZWRlbnRpYWxPck9wdGlvbnM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodXJsT3JCbG9iQ2xpZW50IGluc3RhbmNlb2YgQmxvYkNsaWVudCkge1xuICAgICAgICAgICAgLy8gU2Vjb25kIG92ZXJsb2FkXG4gICAgICAgICAgICB1cmwgPSB1cmxPckJsb2JDbGllbnQudXJsO1xuICAgICAgICAgICAgY3JlZGVudGlhbCA9IHVybE9yQmxvYkNsaWVudC5jcmVkZW50aWFsO1xuICAgICAgICAgICAgb3B0aW9ucyA9IGNyZWRlbnRpYWxPck9wdGlvbnM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkludmFsaWQgYXJndW1lbnRzLiBFaXRoZXIgdXJsIGFuZCBjcmVkZW50aWFsLCBvciBCbG9iQ2xpZW50IG5lZWQgYmUgcHJvdmlkZWQuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghb3B0aW9ucykge1xuICAgICAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmF0Y2hEZWxldGVSZXF1ZXN0LWFkZFN1YlJlcXVlc3RcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldEJhdGNoVHlwZShcImRlbGV0ZVwiKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuYWRkU3ViUmVxdWVzdEludGVybmFsKHtcbiAgICAgICAgICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgICAgICAgICBjcmVkZW50aWFsOiBjcmVkZW50aWFsLFxuICAgICAgICAgICAgfSwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGF3YWl0IG5ldyBCbG9iQ2xpZW50KHVybCwgdGhpcy5iYXRjaFJlcXVlc3QuY3JlYXRlUGlwZWxpbmUoY3JlZGVudGlhbCkpLmRlbGV0ZSh1cGRhdGVkT3B0aW9ucyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFzeW5jIHNldEJsb2JBY2Nlc3NUaWVyKHVybE9yQmxvYkNsaWVudCwgY3JlZGVudGlhbE9yVGllciwgdGllck9yT3B0aW9ucywgb3B0aW9ucykge1xuICAgICAgICBsZXQgdXJsO1xuICAgICAgICBsZXQgY3JlZGVudGlhbDtcbiAgICAgICAgbGV0IHRpZXI7XG4gICAgICAgIGlmICh0eXBlb2YgdXJsT3JCbG9iQ2xpZW50ID09PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICAoKGNvcmVVdGlsLmlzTm9kZSAmJiBjcmVkZW50aWFsT3JUaWVyIGluc3RhbmNlb2YgU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwpIHx8XG4gICAgICAgICAgICAgICAgY3JlZGVudGlhbE9yVGllciBpbnN0YW5jZW9mIEFub255bW91c0NyZWRlbnRpYWwgfHxcbiAgICAgICAgICAgICAgICBjb3JlQXV0aC5pc1Rva2VuQ3JlZGVudGlhbChjcmVkZW50aWFsT3JUaWVyKSkpIHtcbiAgICAgICAgICAgIC8vIEZpcnN0IG92ZXJsb2FkXG4gICAgICAgICAgICB1cmwgPSB1cmxPckJsb2JDbGllbnQ7XG4gICAgICAgICAgICBjcmVkZW50aWFsID0gY3JlZGVudGlhbE9yVGllcjtcbiAgICAgICAgICAgIHRpZXIgPSB0aWVyT3JPcHRpb25zO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHVybE9yQmxvYkNsaWVudCBpbnN0YW5jZW9mIEJsb2JDbGllbnQpIHtcbiAgICAgICAgICAgIC8vIFNlY29uZCBvdmVybG9hZFxuICAgICAgICAgICAgdXJsID0gdXJsT3JCbG9iQ2xpZW50LnVybDtcbiAgICAgICAgICAgIGNyZWRlbnRpYWwgPSB1cmxPckJsb2JDbGllbnQuY3JlZGVudGlhbDtcbiAgICAgICAgICAgIHRpZXIgPSBjcmVkZW50aWFsT3JUaWVyO1xuICAgICAgICAgICAgb3B0aW9ucyA9IHRpZXJPck9wdGlvbnM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkludmFsaWQgYXJndW1lbnRzLiBFaXRoZXIgdXJsIGFuZCBjcmVkZW50aWFsLCBvciBCbG9iQ2xpZW50IG5lZWQgYmUgcHJvdmlkZWQuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghb3B0aW9ucykge1xuICAgICAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmF0Y2hTZXRUaWVyUmVxdWVzdC1hZGRTdWJSZXF1ZXN0XCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRCYXRjaFR5cGUoXCJzZXRBY2Nlc3NUaWVyXCIpO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5hZGRTdWJSZXF1ZXN0SW50ZXJuYWwoe1xuICAgICAgICAgICAgICAgIHVybDogdXJsLFxuICAgICAgICAgICAgICAgIGNyZWRlbnRpYWw6IGNyZWRlbnRpYWwsXG4gICAgICAgICAgICB9LCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgYXdhaXQgbmV3IEJsb2JDbGllbnQodXJsLCB0aGlzLmJhdGNoUmVxdWVzdC5jcmVhdGVQaXBlbGluZShjcmVkZW50aWFsKSkuc2V0QWNjZXNzVGllcih0aWVyLCB1cGRhdGVkT3B0aW9ucyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuLyoqXG4gKiBJbm5lciBiYXRjaCByZXF1ZXN0IGNsYXNzIHdoaWNoIGlzIHJlc3BvbnNpYmxlIGZvciBhc3NlbWJsaW5nIGFuZCBzZXJpYWxpemluZyBzdWIgcmVxdWVzdHMuXG4gKiBTZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2Jsb2ItYmF0Y2gjcmVxdWVzdC1ib2R5IGZvciBob3cgcmVxdWVzdHMgYXJlIGFzc2VtYmxlZC5cbiAqL1xuY2xhc3MgSW5uZXJCYXRjaFJlcXVlc3Qge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLm9wZXJhdGlvbkNvdW50ID0gMDtcbiAgICAgICAgdGhpcy5ib2R5ID0gXCJcIjtcbiAgICAgICAgY29uc3QgdGVtcEd1aWQgPSBjb3JlVXRpbC5yYW5kb21VVUlEKCk7XG4gICAgICAgIC8vIGJhdGNoX3tiYXRjaGlkfVxuICAgICAgICB0aGlzLmJvdW5kYXJ5ID0gYGJhdGNoXyR7dGVtcEd1aWR9YDtcbiAgICAgICAgLy8gLS1iYXRjaF97YmF0Y2hpZH1cbiAgICAgICAgLy8gQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9odHRwXG4gICAgICAgIC8vIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJpbmFyeVxuICAgICAgICB0aGlzLnN1YlJlcXVlc3RQcmVmaXggPSBgLS0ke3RoaXMuYm91bmRhcnl9JHtIVFRQX0xJTkVfRU5ESU5HfSR7SGVhZGVyQ29uc3RhbnRzLkNPTlRFTlRfVFlQRX06IGFwcGxpY2F0aW9uL2h0dHAke0hUVFBfTElORV9FTkRJTkd9JHtIZWFkZXJDb25zdGFudHMuQ09OVEVOVF9UUkFOU0ZFUl9FTkNPRElOR306IGJpbmFyeWA7XG4gICAgICAgIC8vIG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9YmF0Y2hfe2JhdGNoaWR9XG4gICAgICAgIHRoaXMubXVsdGlwYXJ0Q29udGVudFR5cGUgPSBgbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0ke3RoaXMuYm91bmRhcnl9YDtcbiAgICAgICAgLy8gLS1iYXRjaF97YmF0Y2hpZH0tLVxuICAgICAgICB0aGlzLmJhdGNoUmVxdWVzdEVuZGluZyA9IGAtLSR7dGhpcy5ib3VuZGFyeX0tLWA7XG4gICAgICAgIHRoaXMuc3ViUmVxdWVzdHMgPSBuZXcgTWFwKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBwaXBlbGluZSB0byBhc3NlbWJsZSBzdWIgcmVxdWVzdHMuIFRoZSBpZGVhIGhlcmUgaXMgdG8gdXNlIGV4aXN0aW5nXG4gICAgICogY3JlZGVudGlhbCBhbmQgc2VyaWFsaXphdGlvbi9kZXNlcmlhbGl6YXRpb24gY29tcG9uZW50cywgd2l0aCBhZGRpdGlvbmFsIHBvbGljaWVzIHRvXG4gICAgICogZmlsdGVyIHVubmVjZXNzYXJ5IGhlYWRlcnMsIGFzc2VtYmxlIHN1YiByZXF1ZXN0cyBpbnRvIHJlcXVlc3QncyBib2R5XG4gICAgICogYW5kIGludGVyY2VwdCByZXF1ZXN0IGZyb20gZ29pbmcgdG8gd2lyZS5cbiAgICAgKiBAcGFyYW0gY3JlZGVudGlhbCAtICBTdWNoIGFzIEFub255bW91c0NyZWRlbnRpYWwsIFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsIG9yIGFueSBjcmVkZW50aWFsIGZyb20gdGhlIGBAYXp1cmUvaWRlbnRpdHlgIHBhY2thZ2UgdG8gYXV0aGVudGljYXRlIHJlcXVlc3RzIHRvIHRoZSBzZXJ2aWNlLiBZb3UgY2FuIGFsc28gcHJvdmlkZSBhbiBvYmplY3QgdGhhdCBpbXBsZW1lbnRzIHRoZSBUb2tlbkNyZWRlbnRpYWwgaW50ZXJmYWNlLiBJZiBub3Qgc3BlY2lmaWVkLCBBbm9ueW1vdXNDcmVkZW50aWFsIGlzIHVzZWQuXG4gICAgICovXG4gICAgY3JlYXRlUGlwZWxpbmUoY3JlZGVudGlhbCkge1xuICAgICAgICBjb25zdCBjb3JlUGlwZWxpbmUgPSBjb3JlUmVzdFBpcGVsaW5lLmNyZWF0ZUVtcHR5UGlwZWxpbmUoKTtcbiAgICAgICAgY29yZVBpcGVsaW5lLmFkZFBvbGljeShjb3JlQ2xpZW50LnNlcmlhbGl6YXRpb25Qb2xpY3koe1xuICAgICAgICAgICAgc3RyaW5naWZ5WE1MOiBjb3JlWG1sLnN0cmluZ2lmeVhNTCxcbiAgICAgICAgICAgIHNlcmlhbGl6ZXJPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgeG1sOiB7XG4gICAgICAgICAgICAgICAgICAgIHhtbENoYXJLZXk6IFwiI1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KSwgeyBwaGFzZTogXCJTZXJpYWxpemVcIiB9KTtcbiAgICAgICAgLy8gVXNlIGJhdGNoIGhlYWRlciBmaWx0ZXIgcG9saWN5IHRvIGV4Y2x1ZGUgdW5uZWNlc3NhcnkgaGVhZGVyc1xuICAgICAgICBjb3JlUGlwZWxpbmUuYWRkUG9saWN5KGJhdGNoSGVhZGVyRmlsdGVyUG9saWN5KCkpO1xuICAgICAgICAvLyBVc2UgYmF0Y2ggYXNzZW1ibGUgcG9saWN5IHRvIGFzc2VtYmxlIHJlcXVlc3QgYW5kIGludGVyY2VwdCByZXF1ZXN0IGZyb20gZ29pbmcgdG8gd2lyZVxuICAgICAgICBjb3JlUGlwZWxpbmUuYWRkUG9saWN5KGJhdGNoUmVxdWVzdEFzc2VtYmxlUG9saWN5KHRoaXMpLCB7IGFmdGVyUGhhc2U6IFwiU2lnblwiIH0pO1xuICAgICAgICBpZiAoY29yZUF1dGguaXNUb2tlbkNyZWRlbnRpYWwoY3JlZGVudGlhbCkpIHtcbiAgICAgICAgICAgIGNvcmVQaXBlbGluZS5hZGRQb2xpY3koY29yZVJlc3RQaXBlbGluZS5iZWFyZXJUb2tlbkF1dGhlbnRpY2F0aW9uUG9saWN5KHtcbiAgICAgICAgICAgICAgICBjcmVkZW50aWFsLFxuICAgICAgICAgICAgICAgIHNjb3BlczogU3RvcmFnZU9BdXRoU2NvcGVzLFxuICAgICAgICAgICAgICAgIGNoYWxsZW5nZUNhbGxiYWNrczogeyBhdXRob3JpemVSZXF1ZXN0T25DaGFsbGVuZ2U6IGNvcmVDbGllbnQuYXV0aG9yaXplUmVxdWVzdE9uVGVuYW50Q2hhbGxlbmdlIH0sXG4gICAgICAgICAgICB9KSwgeyBwaGFzZTogXCJTaWduXCIgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY3JlZGVudGlhbCBpbnN0YW5jZW9mIFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsKSB7XG4gICAgICAgICAgICBjb3JlUGlwZWxpbmUuYWRkUG9saWN5KHN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsUG9saWN5KHtcbiAgICAgICAgICAgICAgICBhY2NvdW50TmFtZTogY3JlZGVudGlhbC5hY2NvdW50TmFtZSxcbiAgICAgICAgICAgICAgICBhY2NvdW50S2V5OiBjcmVkZW50aWFsLmFjY291bnRLZXksXG4gICAgICAgICAgICB9KSwgeyBwaGFzZTogXCJTaWduXCIgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGlwZWxpbmUgPSBuZXcgUGlwZWxpbmUoW10pO1xuICAgICAgICAvLyBhdHRhY2ggdGhlIHYyIHBpcGVsaW5lIHRvIHRoaXMgb25lXG4gICAgICAgIHBpcGVsaW5lLl9jcmVkZW50aWFsID0gY3JlZGVudGlhbDtcbiAgICAgICAgcGlwZWxpbmUuX2NvcmVQaXBlbGluZSA9IGNvcmVQaXBlbGluZTtcbiAgICAgICAgcmV0dXJuIHBpcGVsaW5lO1xuICAgIH1cbiAgICBhcHBlbmRTdWJSZXF1ZXN0VG9Cb2R5KHJlcXVlc3QpIHtcbiAgICAgICAgLy8gU3RhcnQgdG8gYXNzZW1ibGUgc3ViIHJlcXVlc3RcbiAgICAgICAgdGhpcy5ib2R5ICs9IFtcbiAgICAgICAgICAgIHRoaXMuc3ViUmVxdWVzdFByZWZpeCwgLy8gc3ViIHJlcXVlc3QgY29uc3RhbnQgcHJlZml4XG4gICAgICAgICAgICBgJHtIZWFkZXJDb25zdGFudHMuQ09OVEVOVF9JRH06ICR7dGhpcy5vcGVyYXRpb25Db3VudH1gLCAvLyBzdWIgcmVxdWVzdCdzIGNvbnRlbnQgSURcbiAgICAgICAgICAgIFwiXCIsIC8vIGVtcHR5IGxpbmUgYWZ0ZXIgc3ViIHJlcXVlc3QncyBjb250ZW50IElEXG4gICAgICAgICAgICBgJHtyZXF1ZXN0Lm1ldGhvZC50b1N0cmluZygpfSAke2dldFVSTFBhdGhBbmRRdWVyeShyZXF1ZXN0LnVybCl9ICR7SFRUUF9WRVJTSU9OXzFfMX0ke0hUVFBfTElORV9FTkRJTkd9YCwgLy8gc3ViIHJlcXVlc3Qgc3RhcnQgbGluZSB3aXRoIG1ldGhvZFxuICAgICAgICBdLmpvaW4oSFRUUF9MSU5FX0VORElORyk7XG4gICAgICAgIGZvciAoY29uc3QgW25hbWUsIHZhbHVlXSBvZiByZXF1ZXN0LmhlYWRlcnMpIHtcbiAgICAgICAgICAgIHRoaXMuYm9keSArPSBgJHtuYW1lfTogJHt2YWx1ZX0ke0hUVFBfTElORV9FTkRJTkd9YDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJvZHkgKz0gSFRUUF9MSU5FX0VORElORzsgLy8gc3ViIHJlcXVlc3QncyBoZWFkZXJzIG5lZWQgYmUgZW5kaW5nIHdpdGggYW4gZW1wdHkgbGluZVxuICAgICAgICAvLyBObyBib2R5IHRvIGFzc2VtYmxlIGZvciBjdXJyZW50IGJhdGNoIHJlcXVlc3Qgc3VwcG9ydFxuICAgICAgICAvLyBFbmQgdG8gYXNzZW1ibGUgc3ViIHJlcXVlc3RcbiAgICB9XG4gICAgcHJlQWRkU3ViUmVxdWVzdChzdWJSZXF1ZXN0KSB7XG4gICAgICAgIGlmICh0aGlzLm9wZXJhdGlvbkNvdW50ID49IEJBVENIX01BWF9SRVFVRVNUKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgQ2Fubm90IGV4Y2VlZCAke0JBVENIX01BWF9SRVFVRVNUfSBzdWIgcmVxdWVzdHMgaW4gYSBzaW5nbGUgYmF0Y2hgKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBGYXN0IGZhaWwgaWYgdXJsIGZvciBzdWIgcmVxdWVzdCBpcyBpbnZhbGlkXG4gICAgICAgIGNvbnN0IHBhdGggPSBnZXRVUkxQYXRoKHN1YlJlcXVlc3QudXJsKTtcbiAgICAgICAgaWYgKCFwYXRoIHx8IHBhdGggPT09IFwiXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBJbnZhbGlkIHVybCBmb3Igc3ViIHJlcXVlc3Q6ICcke3N1YlJlcXVlc3QudXJsfSdgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwb3N0QWRkU3ViUmVxdWVzdChzdWJSZXF1ZXN0KSB7XG4gICAgICAgIHRoaXMuc3ViUmVxdWVzdHMuc2V0KHRoaXMub3BlcmF0aW9uQ291bnQsIHN1YlJlcXVlc3QpO1xuICAgICAgICB0aGlzLm9wZXJhdGlvbkNvdW50Kys7XG4gICAgfVxuICAgIC8vIFJldHVybiB0aGUgaHR0cCByZXF1ZXN0IGJvZHkgd2l0aCBhc3NlbWJsaW5nIHRoZSBlbmRpbmcgbGluZSB0byB0aGUgc3ViIHJlcXVlc3QgYm9keS5cbiAgICBnZXRIdHRwUmVxdWVzdEJvZHkoKSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmJvZHl9JHt0aGlzLmJhdGNoUmVxdWVzdEVuZGluZ30ke0hUVFBfTElORV9FTkRJTkd9YDtcbiAgICB9XG4gICAgZ2V0TXVsdGlwYXJ0Q29udGVudFR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm11bHRpcGFydENvbnRlbnRUeXBlO1xuICAgIH1cbiAgICBnZXRTdWJSZXF1ZXN0cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3ViUmVxdWVzdHM7XG4gICAgfVxufVxuZnVuY3Rpb24gYmF0Y2hSZXF1ZXN0QXNzZW1ibGVQb2xpY3koYmF0Y2hSZXF1ZXN0KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogXCJiYXRjaFJlcXVlc3RBc3NlbWJsZVBvbGljeVwiLFxuICAgICAgICBhc3luYyBzZW5kUmVxdWVzdChyZXF1ZXN0KSB7XG4gICAgICAgICAgICBiYXRjaFJlcXVlc3QuYXBwZW5kU3ViUmVxdWVzdFRvQm9keShyZXF1ZXN0KTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgICAgICAgICBzdGF0dXM6IDIwMCxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBjb3JlUmVzdFBpcGVsaW5lLmNyZWF0ZUh0dHBIZWFkZXJzKCksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgIH07XG59XG5mdW5jdGlvbiBiYXRjaEhlYWRlckZpbHRlclBvbGljeSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBcImJhdGNoSGVhZGVyRmlsdGVyUG9saWN5XCIsXG4gICAgICAgIGFzeW5jIHNlbmRSZXF1ZXN0KHJlcXVlc3QsIG5leHQpIHtcbiAgICAgICAgICAgIGxldCB4TXNIZWFkZXJOYW1lID0gXCJcIjtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW25hbWVdIG9mIHJlcXVlc3QuaGVhZGVycykge1xuICAgICAgICAgICAgICAgIGlmIChpRXF1YWwobmFtZSwgSGVhZGVyQ29uc3RhbnRzLlhfTVNfVkVSU0lPTikpIHtcbiAgICAgICAgICAgICAgICAgICAgeE1zSGVhZGVyTmFtZSA9IG5hbWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHhNc0hlYWRlck5hbWUgIT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICByZXF1ZXN0LmhlYWRlcnMuZGVsZXRlKHhNc0hlYWRlck5hbWUpOyAvLyBUaGUgc3VicmVxdWVzdHMgc2hvdWxkIG5vdCBoYXZlIHRoZSB4LW1zLXZlcnNpb24gaGVhZGVyLlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5leHQocmVxdWVzdCk7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIEEgQmxvYkJhdGNoQ2xpZW50IGFsbG93cyB5b3UgdG8gbWFrZSBiYXRjaGVkIHJlcXVlc3RzIHRvIHRoZSBBenVyZSBTdG9yYWdlIEJsb2Igc2VydmljZS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9ibG9iLWJhdGNoXG4gKi9cbmNsYXNzIEJsb2JCYXRjaENsaWVudCB7XG4gICAgY29uc3RydWN0b3IodXJsLCBjcmVkZW50aWFsT3JQaXBlbGluZSwgXG4gICAgLy8gTGVnYWN5LCBubyBmaXggZm9yIGVzbGludCBlcnJvciB3aXRob3V0IGJyZWFraW5nLiBEaXNhYmxlIGl0IGZvciB0aGlzIGludGVyZmFjZS5cbiAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGF6dXJlL2F6dXJlLXNkay90cy1uYW1pbmctb3B0aW9ucyovXG4gICAgb3B0aW9ucykge1xuICAgICAgICBsZXQgcGlwZWxpbmU7XG4gICAgICAgIGlmIChpc1BpcGVsaW5lTGlrZShjcmVkZW50aWFsT3JQaXBlbGluZSkpIHtcbiAgICAgICAgICAgIHBpcGVsaW5lID0gY3JlZGVudGlhbE9yUGlwZWxpbmU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIWNyZWRlbnRpYWxPclBpcGVsaW5lKSB7XG4gICAgICAgICAgICAvLyBubyBjcmVkZW50aWFsIHByb3ZpZGVkXG4gICAgICAgICAgICBwaXBlbGluZSA9IG5ld1BpcGVsaW5lKG5ldyBBbm9ueW1vdXNDcmVkZW50aWFsKCksIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcGlwZWxpbmUgPSBuZXdQaXBlbGluZShjcmVkZW50aWFsT3JQaXBlbGluZSwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RvcmFnZUNsaWVudENvbnRleHQgPSBuZXcgU3RvcmFnZUNvbnRleHRDbGllbnQodXJsLCBnZXRDb3JlQ2xpZW50T3B0aW9ucyhwaXBlbGluZSkpO1xuICAgICAgICBjb25zdCBwYXRoID0gZ2V0VVJMUGF0aCh1cmwpO1xuICAgICAgICBpZiAocGF0aCAmJiBwYXRoICE9PSBcIi9cIikge1xuICAgICAgICAgICAgLy8gQ29udGFpbmVyIHNjb3BlZC5cbiAgICAgICAgICAgIHRoaXMuc2VydmljZU9yQ29udGFpbmVyQ29udGV4dCA9IHN0b3JhZ2VDbGllbnRDb250ZXh0LmNvbnRhaW5lcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VydmljZU9yQ29udGFpbmVyQ29udGV4dCA9IHN0b3JhZ2VDbGllbnRDb250ZXh0LnNlcnZpY2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHtAbGluayBCbG9iQmF0Y2h9LlxuICAgICAqIEEgQmxvYkJhdGNoIHJlcHJlc2VudHMgYW4gYWdncmVnYXRlZCBzZXQgb2Ygb3BlcmF0aW9ucyBvbiBibG9icy5cbiAgICAgKi9cbiAgICBjcmVhdGVCYXRjaCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBCbG9iQmF0Y2goKTtcbiAgICB9XG4gICAgYXN5bmMgZGVsZXRlQmxvYnModXJsc09yQmxvYkNsaWVudHMsIGNyZWRlbnRpYWxPck9wdGlvbnMsIFxuICAgIC8vIExlZ2FjeSwgbm8gZml4IGZvciBlc2xpbnQgZXJyb3Igd2l0aG91dCBicmVha2luZy4gRGlzYWJsZSBpdCBmb3IgdGhpcyBpbnRlcmZhY2UuXG4gICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhenVyZS9henVyZS1zZGsvdHMtbmFtaW5nLW9wdGlvbnMqL1xuICAgIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgYmF0Y2ggPSBuZXcgQmxvYkJhdGNoKCk7XG4gICAgICAgIGZvciAoY29uc3QgdXJsT3JCbG9iQ2xpZW50IG9mIHVybHNPckJsb2JDbGllbnRzKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHVybE9yQmxvYkNsaWVudCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIGF3YWl0IGJhdGNoLmRlbGV0ZUJsb2IodXJsT3JCbG9iQ2xpZW50LCBjcmVkZW50aWFsT3JPcHRpb25zLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGF3YWl0IGJhdGNoLmRlbGV0ZUJsb2IodXJsT3JCbG9iQ2xpZW50LCBjcmVkZW50aWFsT3JPcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5zdWJtaXRCYXRjaChiYXRjaCk7XG4gICAgfVxuICAgIGFzeW5jIHNldEJsb2JzQWNjZXNzVGllcih1cmxzT3JCbG9iQ2xpZW50cywgY3JlZGVudGlhbE9yVGllciwgdGllck9yT3B0aW9ucywgXG4gICAgLy8gTGVnYWN5LCBubyBmaXggZm9yIGVzbGludCBlcnJvciB3aXRob3V0IGJyZWFraW5nLiBEaXNhYmxlIGl0IGZvciB0aGlzIGludGVyZmFjZS5cbiAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGF6dXJlL2F6dXJlLXNkay90cy1uYW1pbmctb3B0aW9ucyovXG4gICAgb3B0aW9ucykge1xuICAgICAgICBjb25zdCBiYXRjaCA9IG5ldyBCbG9iQmF0Y2goKTtcbiAgICAgICAgZm9yIChjb25zdCB1cmxPckJsb2JDbGllbnQgb2YgdXJsc09yQmxvYkNsaWVudHMpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdXJsT3JCbG9iQ2xpZW50ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgYmF0Y2guc2V0QmxvYkFjY2Vzc1RpZXIodXJsT3JCbG9iQ2xpZW50LCBjcmVkZW50aWFsT3JUaWVyLCB0aWVyT3JPcHRpb25zLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGF3YWl0IGJhdGNoLnNldEJsb2JBY2Nlc3NUaWVyKHVybE9yQmxvYkNsaWVudCwgY3JlZGVudGlhbE9yVGllciwgdGllck9yT3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuc3VibWl0QmF0Y2goYmF0Y2gpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTdWJtaXQgYmF0Y2ggcmVxdWVzdCB3aGljaCBjb25zaXN0cyBvZiBtdWx0aXBsZSBzdWJyZXF1ZXN0cy5cbiAgICAgKlxuICAgICAqIEdldCBgYmxvYkJhdGNoQ2xpZW50YCBhbmQgb3RoZXIgZGV0YWlscyBiZWZvcmUgcnVubmluZyB0aGUgc25pcHBldHMuXG4gICAgICogYGJsb2JTZXJ2aWNlQ2xpZW50LmdldEJsb2JCYXRjaENsaWVudCgpYCBnaXZlcyB0aGUgYGJsb2JCYXRjaENsaWVudGBcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNhZ2U6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGxldCBiYXRjaFJlcXVlc3QgPSBuZXcgQmxvYkJhdGNoKCk7XG4gICAgICogYXdhaXQgYmF0Y2hSZXF1ZXN0LmRlbGV0ZUJsb2IodXJsSW5TdHJpbmcwLCBjcmVkZW50aWFsMCk7XG4gICAgICogYXdhaXQgYmF0Y2hSZXF1ZXN0LmRlbGV0ZUJsb2IodXJsSW5TdHJpbmcxLCBjcmVkZW50aWFsMSwge1xuICAgICAqICBkZWxldGVTbmFwc2hvdHM6IFwiaW5jbHVkZVwiXG4gICAgICogfSk7XG4gICAgICogY29uc3QgYmF0Y2hSZXNwID0gYXdhaXQgYmxvYkJhdGNoQ2xpZW50LnN1Ym1pdEJhdGNoKGJhdGNoUmVxdWVzdCk7XG4gICAgICogY29uc29sZS5sb2coYmF0Y2hSZXNwLnN1YlJlc3BvbnNlc1N1Y2NlZWRlZENvdW50KTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNpbmcgYSBsZWFzZTpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogbGV0IGJhdGNoUmVxdWVzdCA9IG5ldyBCbG9iQmF0Y2goKTtcbiAgICAgKiBhd2FpdCBiYXRjaFJlcXVlc3Quc2V0QmxvYkFjY2Vzc1RpZXIoYmxvY2tCbG9iQ2xpZW50MCwgXCJDb29sXCIpO1xuICAgICAqIGF3YWl0IGJhdGNoUmVxdWVzdC5zZXRCbG9iQWNjZXNzVGllcihibG9ja0Jsb2JDbGllbnQxLCBcIkNvb2xcIiwge1xuICAgICAqICBjb25kaXRpb25zOiB7IGxlYXNlSWQ6IGxlYXNlSWQgfVxuICAgICAqIH0pO1xuICAgICAqIGNvbnN0IGJhdGNoUmVzcCA9IGF3YWl0IGJsb2JCYXRjaENsaWVudC5zdWJtaXRCYXRjaChiYXRjaFJlcXVlc3QpO1xuICAgICAqIGNvbnNvbGUubG9nKGJhdGNoUmVzcC5zdWJSZXNwb25zZXNTdWNjZWVkZWRDb3VudCk7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9ibG9iLWJhdGNoXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYmF0Y2hSZXF1ZXN0IC0gQSBzZXQgb2YgRGVsZXRlIG9yIFNldFRpZXIgb3BlcmF0aW9ucy5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtXG4gICAgICovXG4gICAgYXN5bmMgc3VibWl0QmF0Y2goYmF0Y2hSZXF1ZXN0LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgaWYgKCFiYXRjaFJlcXVlc3QgfHwgYmF0Y2hSZXF1ZXN0LmdldFN1YlJlcXVlc3RzKCkuc2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJCYXRjaCByZXF1ZXN0IHNob3VsZCBjb250YWluIG9uZSBvciBtb3JlIHN1YiByZXF1ZXN0cy5cIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iQmF0Y2hDbGllbnQtc3VibWl0QmF0Y2hcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBiYXRjaFJlcXVlc3RCb2R5ID0gYmF0Y2hSZXF1ZXN0LmdldEh0dHBSZXF1ZXN0Qm9keSgpO1xuICAgICAgICAgICAgLy8gU2VydmljZVN1Ym1pdEJhdGNoUmVzcG9uc2VNb2RlbCBhbmQgQ29udGFpbmVyU3VibWl0QmF0Y2hSZXNwb25zZSBhcmUgY29tcGF0aWJsZSBmb3Igbm93LlxuICAgICAgICAgICAgY29uc3QgcmF3QmF0Y2hSZXNwb25zZSA9IGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuc2VydmljZU9yQ29udGFpbmVyQ29udGV4dC5zdWJtaXRCYXRjaCh1dGY4Qnl0ZUxlbmd0aChiYXRjaFJlcXVlc3RCb2R5KSwgYmF0Y2hSZXF1ZXN0LmdldE11bHRpUGFydENvbnRlbnRUeXBlKCksIGJhdGNoUmVxdWVzdEJvZHksIE9iamVjdC5hc3NpZ24oe30sIHVwZGF0ZWRPcHRpb25zKSkpO1xuICAgICAgICAgICAgLy8gUGFyc2UgdGhlIHN1YiByZXNwb25zZXMgcmVzdWx0LCBpZiBsb2dpYyByZWFjaGVzIGhlcmUoaS5lLiB0aGUgYmF0Y2ggcmVxdWVzdCBzdWNjZWVkZWQgd2l0aCBzdGF0dXMgY29kZSAyMDIpLlxuICAgICAgICAgICAgY29uc3QgYmF0Y2hSZXNwb25zZVBhcnNlciA9IG5ldyBCYXRjaFJlc3BvbnNlUGFyc2VyKHJhd0JhdGNoUmVzcG9uc2UsIGJhdGNoUmVxdWVzdC5nZXRTdWJSZXF1ZXN0cygpKTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlU3VtbWFyeSA9IGF3YWl0IGJhdGNoUmVzcG9uc2VQYXJzZXIucGFyc2VCYXRjaFJlc3BvbnNlKCk7XG4gICAgICAgICAgICBjb25zdCByZXMgPSB7XG4gICAgICAgICAgICAgICAgX3Jlc3BvbnNlOiByYXdCYXRjaFJlc3BvbnNlLl9yZXNwb25zZSxcbiAgICAgICAgICAgICAgICBjb250ZW50VHlwZTogcmF3QmF0Y2hSZXNwb25zZS5jb250ZW50VHlwZSxcbiAgICAgICAgICAgICAgICBlcnJvckNvZGU6IHJhd0JhdGNoUmVzcG9uc2UuZXJyb3JDb2RlLFxuICAgICAgICAgICAgICAgIHJlcXVlc3RJZDogcmF3QmF0Y2hSZXNwb25zZS5yZXF1ZXN0SWQsXG4gICAgICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiByYXdCYXRjaFJlc3BvbnNlLmNsaWVudFJlcXVlc3RJZCxcbiAgICAgICAgICAgICAgICB2ZXJzaW9uOiByYXdCYXRjaFJlc3BvbnNlLnZlcnNpb24sXG4gICAgICAgICAgICAgICAgc3ViUmVzcG9uc2VzOiByZXNwb25zZVN1bW1hcnkuc3ViUmVzcG9uc2VzLFxuICAgICAgICAgICAgICAgIHN1YlJlc3BvbnNlc1N1Y2NlZWRlZENvdW50OiByZXNwb25zZVN1bW1hcnkuc3ViUmVzcG9uc2VzU3VjY2VlZGVkQ291bnQsXG4gICAgICAgICAgICAgICAgc3ViUmVzcG9uc2VzRmFpbGVkQ291bnQ6IHJlc3BvbnNlU3VtbWFyeS5zdWJSZXNwb25zZXNGYWlsZWRDb3VudCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbi8qKlxuICogQSBDb250YWluZXJDbGllbnQgcmVwcmVzZW50cyBhIFVSTCB0byB0aGUgQXp1cmUgU3RvcmFnZSBjb250YWluZXIgYWxsb3dpbmcgeW91IHRvIG1hbmlwdWxhdGUgaXRzIGJsb2JzLlxuICovXG5jbGFzcyBDb250YWluZXJDbGllbnQgZXh0ZW5kcyBTdG9yYWdlQ2xpZW50IHtcbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGUgY29udGFpbmVyLlxuICAgICAqL1xuICAgIGdldCBjb250YWluZXJOYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29udGFpbmVyTmFtZTtcbiAgICB9XG4gICAgY29uc3RydWN0b3IodXJsT3JDb25uZWN0aW9uU3RyaW5nLCBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSwgXG4gICAgLy8gTGVnYWN5LCBubyBmaXggZm9yIGVzbGludCBlcnJvciB3aXRob3V0IGJyZWFraW5nLiBEaXNhYmxlIGl0IGZvciB0aGlzIGludGVyZmFjZS5cbiAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGF6dXJlL2F6dXJlLXNkay90cy1uYW1pbmctb3B0aW9ucyovXG4gICAgb3B0aW9ucykge1xuICAgICAgICBsZXQgcGlwZWxpbmU7XG4gICAgICAgIGxldCB1cmw7XG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgICAgICBpZiAoaXNQaXBlbGluZUxpa2UoY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUpKSB7XG4gICAgICAgICAgICAvLyAodXJsOiBzdHJpbmcsIHBpcGVsaW5lOiBQaXBlbGluZSlcbiAgICAgICAgICAgIHVybCA9IHVybE9yQ29ubmVjdGlvblN0cmluZztcbiAgICAgICAgICAgIHBpcGVsaW5lID0gY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoKGNvcmVVdGlsLmlzTm9kZSAmJiBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSBpbnN0YW5jZW9mIFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsKSB8fFxuICAgICAgICAgICAgY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUgaW5zdGFuY2VvZiBBbm9ueW1vdXNDcmVkZW50aWFsIHx8XG4gICAgICAgICAgICBjb3JlQXV0aC5pc1Rva2VuQ3JlZGVudGlhbChjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSkpIHtcbiAgICAgICAgICAgIC8vICh1cmw6IHN0cmluZywgY3JlZGVudGlhbD86IFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsIHwgQW5vbnltb3VzQ3JlZGVudGlhbCB8IFRva2VuQ3JlZGVudGlhbCwgb3B0aW9ucz86IFN0b3JhZ2VQaXBlbGluZU9wdGlvbnMpXG4gICAgICAgICAgICB1cmwgPSB1cmxPckNvbm5lY3Rpb25TdHJpbmc7XG4gICAgICAgICAgICBwaXBlbGluZSA9IG5ld1BpcGVsaW5lKGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUgJiZcbiAgICAgICAgICAgIHR5cGVvZiBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgLy8gKHVybDogc3RyaW5nLCBjcmVkZW50aWFsPzogU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwgfCBBbm9ueW1vdXNDcmVkZW50aWFsIHwgVG9rZW5DcmVkZW50aWFsLCBvcHRpb25zPzogU3RvcmFnZVBpcGVsaW5lT3B0aW9ucylcbiAgICAgICAgICAgIC8vIFRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZC4gVXNlIGFub255bW91cyBjcmVkZW50aWFsLlxuICAgICAgICAgICAgdXJsID0gdXJsT3JDb25uZWN0aW9uU3RyaW5nO1xuICAgICAgICAgICAgcGlwZWxpbmUgPSBuZXdQaXBlbGluZShuZXcgQW5vbnltb3VzQ3JlZGVudGlhbCgpLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSAmJlxuICAgICAgICAgICAgdHlwZW9mIGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAvLyAoY29ubmVjdGlvblN0cmluZzogc3RyaW5nLCBjb250YWluZXJOYW1lOiBzdHJpbmcsIGJsb2JOYW1lOiBzdHJpbmcsIG9wdGlvbnM/OiBTdG9yYWdlUGlwZWxpbmVPcHRpb25zKVxuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyTmFtZSA9IGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lO1xuICAgICAgICAgICAgY29uc3QgZXh0cmFjdGVkQ3JlZHMgPSBleHRyYWN0Q29ubmVjdGlvblN0cmluZ1BhcnRzKHVybE9yQ29ubmVjdGlvblN0cmluZyk7XG4gICAgICAgICAgICBpZiAoZXh0cmFjdGVkQ3JlZHMua2luZCA9PT0gXCJBY2NvdW50Q29ublN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvcmVVdGlsLmlzTm9kZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaGFyZWRLZXlDcmVkZW50aWFsID0gbmV3IFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsKGV4dHJhY3RlZENyZWRzLmFjY291bnROYW1lLCBleHRyYWN0ZWRDcmVkcy5hY2NvdW50S2V5KTtcbiAgICAgICAgICAgICAgICAgICAgdXJsID0gYXBwZW5kVG9VUkxQYXRoKGV4dHJhY3RlZENyZWRzLnVybCwgZW5jb2RlVVJJQ29tcG9uZW50KGNvbnRhaW5lck5hbWUpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zLnByb3h5T3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5wcm94eU9wdGlvbnMgPSBjb3JlUmVzdFBpcGVsaW5lLmdldERlZmF1bHRQcm94eVNldHRpbmdzKGV4dHJhY3RlZENyZWRzLnByb3h5VXJpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBwaXBlbGluZSA9IG5ld1BpcGVsaW5lKHNoYXJlZEtleUNyZWRlbnRpYWwsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQWNjb3VudCBjb25uZWN0aW9uIHN0cmluZyBpcyBvbmx5IHN1cHBvcnRlZCBpbiBOb2RlLmpzIGVudmlyb25tZW50XCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGV4dHJhY3RlZENyZWRzLmtpbmQgPT09IFwiU0FTQ29ublN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgdXJsID1cbiAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG9VUkxQYXRoKGV4dHJhY3RlZENyZWRzLnVybCwgZW5jb2RlVVJJQ29tcG9uZW50KGNvbnRhaW5lck5hbWUpKSArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIj9cIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYWN0ZWRDcmVkcy5hY2NvdW50U2FzO1xuICAgICAgICAgICAgICAgIHBpcGVsaW5lID0gbmV3UGlwZWxpbmUobmV3IEFub255bW91c0NyZWRlbnRpYWwoKSwgb3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb25uZWN0aW9uIHN0cmluZyBtdXN0IGJlIGVpdGhlciBhbiBBY2NvdW50IGNvbm5lY3Rpb24gc3RyaW5nIG9yIGEgU0FTIGNvbm5lY3Rpb24gc3RyaW5nXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0aW5nIG5vbi1lbXB0eSBzdHJpbmdzIGZvciBjb250YWluZXJOYW1lIHBhcmFtZXRlclwiKTtcbiAgICAgICAgfVxuICAgICAgICBzdXBlcih1cmwsIHBpcGVsaW5lKTtcbiAgICAgICAgdGhpcy5fY29udGFpbmVyTmFtZSA9IHRoaXMuZ2V0Q29udGFpbmVyTmFtZUZyb21VcmwoKTtcbiAgICAgICAgdGhpcy5jb250YWluZXJDb250ZXh0ID0gdGhpcy5zdG9yYWdlQ2xpZW50Q29udGV4dC5jb250YWluZXI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgY29udGFpbmVyIHVuZGVyIHRoZSBzcGVjaWZpZWQgYWNjb3VudC4gSWYgdGhlIGNvbnRhaW5lciB3aXRoXG4gICAgICogdGhlIHNhbWUgbmFtZSBhbHJlYWR5IGV4aXN0cywgdGhlIG9wZXJhdGlvbiBmYWlscy5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9jcmVhdGUtY29udGFpbmVyXG4gICAgICogTmFtaW5nIHJ1bGVzOiBAc2VlIGh0dHBzOi8vbGVhcm4ubWljcm9zb2Z0LmNvbS9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvbmFtaW5nLWFuZC1yZWZlcmVuY2luZy1jb250YWluZXJzLS1ibG9icy0tYW5kLW1ldGFkYXRhXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gQ29udGFpbmVyIENyZWF0ZSBvcGVyYXRpb24uXG4gICAgICpcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNhZ2U6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnN0IGNvbnRhaW5lckNsaWVudCA9IGJsb2JTZXJ2aWNlQ2xpZW50LmdldENvbnRhaW5lckNsaWVudChcIjxjb250YWluZXIgbmFtZT5cIik7XG4gICAgICogY29uc3QgY3JlYXRlQ29udGFpbmVyUmVzcG9uc2UgPSBhd2FpdCBjb250YWluZXJDbGllbnQuY3JlYXRlKCk7XG4gICAgICogY29uc29sZS5sb2coXCJDb250YWluZXIgd2FzIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5XCIsIGNyZWF0ZUNvbnRhaW5lclJlc3BvbnNlLnJlcXVlc3RJZCk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgYXN5bmMgY3JlYXRlKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkNvbnRhaW5lckNsaWVudC1jcmVhdGVcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5jb250YWluZXJDb250ZXh0LmNyZWF0ZSh1cGRhdGVkT3B0aW9ucykpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBjb250YWluZXIgdW5kZXIgdGhlIHNwZWNpZmllZCBhY2NvdW50LiBJZiB0aGUgY29udGFpbmVyIHdpdGhcbiAgICAgKiB0aGUgc2FtZSBuYW1lIGFscmVhZHkgZXhpc3RzLCBpdCBpcyBub3QgY2hhbmdlZC5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9jcmVhdGUtY29udGFpbmVyXG4gICAgICogTmFtaW5nIHJ1bGVzOiBAc2VlIGh0dHBzOi8vbGVhcm4ubWljcm9zb2Z0LmNvbS9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvbmFtaW5nLWFuZC1yZWZlcmVuY2luZy1jb250YWluZXJzLS1ibG9icy0tYW5kLW1ldGFkYXRhXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtXG4gICAgICovXG4gICAgYXN5bmMgY3JlYXRlSWZOb3RFeGlzdHMob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQ29udGFpbmVyQ2xpZW50LWNyZWF0ZUlmTm90RXhpc3RzXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5jcmVhdGUodXBkYXRlZE9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oeyBzdWNjZWVkZWQ6IHRydWUgfSwgcmVzKSwgeyBfcmVzcG9uc2U6IHJlcy5fcmVzcG9uc2UgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGlmICgoKF9hID0gZS5kZXRhaWxzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZXJyb3JDb2RlKSA9PT0gXCJDb250YWluZXJBbHJlYWR5RXhpc3RzXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7IHN1Y2NlZWRlZDogZmFsc2UgfSwgKF9iID0gZS5yZXNwb25zZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnBhcnNlZEhlYWRlcnMpLCB7IF9yZXNwb25zZTogZS5yZXNwb25zZSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBBenVyZSBjb250YWluZXIgcmVzb3VyY2UgcmVwcmVzZW50ZWQgYnkgdGhpcyBjbGllbnQgZXhpc3RzOyBmYWxzZSBvdGhlcndpc2UuXG4gICAgICpcbiAgICAgKiBOT1RFOiB1c2UgdGhpcyBmdW5jdGlvbiB3aXRoIGNhcmUgc2luY2UgYW4gZXhpc3RpbmcgY29udGFpbmVyIG1pZ2h0IGJlIGRlbGV0ZWQgYnkgb3RoZXIgY2xpZW50cyBvclxuICAgICAqIGFwcGxpY2F0aW9ucy4gVmljZSB2ZXJzYSBuZXcgY29udGFpbmVycyB3aXRoIHRoZSBzYW1lIG5hbWUgbWlnaHQgYmUgYWRkZWQgYnkgb3RoZXIgY2xpZW50cyBvclxuICAgICAqIGFwcGxpY2F0aW9ucyBhZnRlciB0aGlzIGZ1bmN0aW9uIGNvbXBsZXRlcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC1cbiAgICAgKi9cbiAgICBhc3luYyBleGlzdHMob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQ29udGFpbmVyQ2xpZW50LWV4aXN0c1wiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5nZXRQcm9wZXJ0aWVzKHtcbiAgICAgICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGUuc3RhdHVzQ29kZSA9PT0gNDA0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSB7QGxpbmsgQmxvYkNsaWVudH1cbiAgICAgKlxuICAgICAqIEBwYXJhbSBibG9iTmFtZSAtIEEgYmxvYiBuYW1lXG4gICAgICogQHJldHVybnMgQSBuZXcgQmxvYkNsaWVudCBvYmplY3QgZm9yIHRoZSBnaXZlbiBibG9iIG5hbWUuXG4gICAgICovXG4gICAgZ2V0QmxvYkNsaWVudChibG9iTmFtZSkge1xuICAgICAgICByZXR1cm4gbmV3IEJsb2JDbGllbnQoYXBwZW5kVG9VUkxQYXRoKHRoaXMudXJsLCBFc2NhcGVQYXRoKGJsb2JOYW1lKSksIHRoaXMucGlwZWxpbmUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIHtAbGluayBBcHBlbmRCbG9iQ2xpZW50fVxuICAgICAqXG4gICAgICogQHBhcmFtIGJsb2JOYW1lIC0gQW4gYXBwZW5kIGJsb2IgbmFtZVxuICAgICAqL1xuICAgIGdldEFwcGVuZEJsb2JDbGllbnQoYmxvYk5hbWUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBcHBlbmRCbG9iQ2xpZW50KGFwcGVuZFRvVVJMUGF0aCh0aGlzLnVybCwgRXNjYXBlUGF0aChibG9iTmFtZSkpLCB0aGlzLnBpcGVsaW5lKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHtAbGluayBCbG9ja0Jsb2JDbGllbnR9XG4gICAgICpcbiAgICAgKiBAcGFyYW0gYmxvYk5hbWUgLSBBIGJsb2NrIGJsb2IgbmFtZVxuICAgICAqXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzYWdlOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBjb25zdCBjb250ZW50ID0gXCJIZWxsbyB3b3JsZCFcIjtcbiAgICAgKlxuICAgICAqIGNvbnN0IGJsb2NrQmxvYkNsaWVudCA9IGNvbnRhaW5lckNsaWVudC5nZXRCbG9ja0Jsb2JDbGllbnQoXCI8YmxvYiBuYW1lPlwiKTtcbiAgICAgKiBjb25zdCB1cGxvYWRCbG9iUmVzcG9uc2UgPSBhd2FpdCBibG9ja0Jsb2JDbGllbnQudXBsb2FkKGNvbnRlbnQsIGNvbnRlbnQubGVuZ3RoKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBnZXRCbG9ja0Jsb2JDbGllbnQoYmxvYk5hbWUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBCbG9ja0Jsb2JDbGllbnQoYXBwZW5kVG9VUkxQYXRoKHRoaXMudXJsLCBFc2NhcGVQYXRoKGJsb2JOYW1lKSksIHRoaXMucGlwZWxpbmUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEge0BsaW5rIFBhZ2VCbG9iQ2xpZW50fVxuICAgICAqXG4gICAgICogQHBhcmFtIGJsb2JOYW1lIC0gQSBwYWdlIGJsb2IgbmFtZVxuICAgICAqL1xuICAgIGdldFBhZ2VCbG9iQ2xpZW50KGJsb2JOYW1lKSB7XG4gICAgICAgIHJldHVybiBuZXcgUGFnZUJsb2JDbGllbnQoYXBwZW5kVG9VUkxQYXRoKHRoaXMudXJsLCBFc2NhcGVQYXRoKGJsb2JOYW1lKSksIHRoaXMucGlwZWxpbmUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFsbCB1c2VyLWRlZmluZWQgbWV0YWRhdGEgYW5kIHN5c3RlbSBwcm9wZXJ0aWVzIGZvciB0aGUgc3BlY2lmaWVkXG4gICAgICogY29udGFpbmVyLiBUaGUgZGF0YSByZXR1cm5lZCBkb2VzIG5vdCBpbmNsdWRlIHRoZSBjb250YWluZXIncyBsaXN0IG9mIGJsb2JzLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2dldC1jb250YWluZXItcHJvcGVydGllc1xuICAgICAqXG4gICAgICogV0FSTklORzogVGhlIGBtZXRhZGF0YWAgb2JqZWN0IHJldHVybmVkIGluIHRoZSByZXNwb25zZSB3aWxsIGhhdmUgaXRzIGtleXMgaW4gbG93ZXJjYXNlLCBldmVuIGlmXG4gICAgICogdGhleSBvcmlnaW5hbGx5IGNvbnRhaW5lZCB1cHBlcmNhc2UgY2hhcmFjdGVycy4gVGhpcyBkaWZmZXJzIGZyb20gdGhlIG1ldGFkYXRhIGtleXMgcmV0dXJuZWQgYnlcbiAgICAgKiB0aGUgYGxpc3RDb250YWluZXJzYCBtZXRob2Qgb2Yge0BsaW5rIEJsb2JTZXJ2aWNlQ2xpZW50fSB1c2luZyB0aGUgYGluY2x1ZGVNZXRhZGF0YWAgb3B0aW9uLCB3aGljaFxuICAgICAqIHdpbGwgcmV0YWluIHRoZWlyIG9yaWdpbmFsIGNhc2luZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBDb250YWluZXIgR2V0IFByb3BlcnRpZXMgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGdldFByb3BlcnRpZXMob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGlmICghb3B0aW9ucy5jb25kaXRpb25zKSB7XG4gICAgICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkNvbnRhaW5lckNsaWVudC1nZXRQcm9wZXJ0aWVzXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuY29udGFpbmVyQ29udGV4dC5nZXRQcm9wZXJ0aWVzKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7IGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsIH0sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zIH0pKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBNYXJrcyB0aGUgc3BlY2lmaWVkIGNvbnRhaW5lciBmb3IgZGVsZXRpb24uIFRoZSBjb250YWluZXIgYW5kIGFueSBibG9ic1xuICAgICAqIGNvbnRhaW5lZCB3aXRoaW4gaXQgYXJlIGxhdGVyIGRlbGV0ZWQgZHVyaW5nIGdhcmJhZ2UgY29sbGVjdGlvbi5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9kZWxldGUtY29udGFpbmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gQ29udGFpbmVyIERlbGV0ZSBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgZGVsZXRlKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBpZiAoIW9wdGlvbnMuY29uZGl0aW9ucykge1xuICAgICAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0ge307XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJDb250YWluZXJDbGllbnQtZGVsZXRlXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuY29udGFpbmVyQ29udGV4dC5kZWxldGUoe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1hcmtzIHRoZSBzcGVjaWZpZWQgY29udGFpbmVyIGZvciBkZWxldGlvbiBpZiBpdCBleGlzdHMuIFRoZSBjb250YWluZXIgYW5kIGFueSBibG9ic1xuICAgICAqIGNvbnRhaW5lZCB3aXRoaW4gaXQgYXJlIGxhdGVyIGRlbGV0ZWQgZHVyaW5nIGdhcmJhZ2UgY29sbGVjdGlvbi5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9kZWxldGUtY29udGFpbmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gQ29udGFpbmVyIERlbGV0ZSBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgZGVsZXRlSWZFeGlzdHMob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQ29udGFpbmVyQ2xpZW50LWRlbGV0ZUlmRXhpc3RzXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5kZWxldGUodXBkYXRlZE9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oeyBzdWNjZWVkZWQ6IHRydWUgfSwgcmVzKSwgeyBfcmVzcG9uc2U6IHJlcy5fcmVzcG9uc2UgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGlmICgoKF9hID0gZS5kZXRhaWxzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZXJyb3JDb2RlKSA9PT0gXCJDb250YWluZXJOb3RGb3VuZFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oeyBzdWNjZWVkZWQ6IGZhbHNlIH0sIChfYiA9IGUucmVzcG9uc2UpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5wYXJzZWRIZWFkZXJzKSwgeyBfcmVzcG9uc2U6IGUucmVzcG9uc2UgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIG9uZSBvciBtb3JlIHVzZXItZGVmaW5lZCBuYW1lLXZhbHVlIHBhaXJzIGZvciB0aGUgc3BlY2lmaWVkIGNvbnRhaW5lci5cbiAgICAgKlxuICAgICAqIElmIG5vIG9wdGlvbiBwcm92aWRlZCwgb3Igbm8gbWV0YWRhdGEgZGVmaW5lZCBpbiB0aGUgcGFyYW1ldGVyLCB0aGUgY29udGFpbmVyXG4gICAgICogbWV0YWRhdGEgd2lsbCBiZSByZW1vdmVkLlxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvc2V0LWNvbnRhaW5lci1tZXRhZGF0YVxuICAgICAqXG4gICAgICogQHBhcmFtIG1ldGFkYXRhIC0gUmVwbGFjZSBleGlzdGluZyBtZXRhZGF0YSB3aXRoIHRoaXMgdmFsdWUuXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgbm8gdmFsdWUgcHJvdmlkZWQgdGhlIGV4aXN0aW5nIG1ldGFkYXRhIHdpbGwgYmUgcmVtb3ZlZC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gQ29udGFpbmVyIFNldCBNZXRhZGF0YSBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgc2V0TWV0YWRhdGEobWV0YWRhdGEsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBpZiAoIW9wdGlvbnMuY29uZGl0aW9ucykge1xuICAgICAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0ge307XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuY29uZGl0aW9ucy5pZlVubW9kaWZpZWRTaW5jZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJ0aGUgSWZVbm1vZGlmaWVkU2luY2UgbXVzdCBoYXZlIHRoZWlyIGRlZmF1bHQgdmFsdWVzIGJlY2F1c2UgdGhleSBhcmUgaWdub3JlZCBieSB0aGUgYmxvYiBzZXJ2aWNlXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQ29udGFpbmVyQ2xpZW50LXNldE1ldGFkYXRhXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuY29udGFpbmVyQ29udGV4dC5zZXRNZXRhZGF0YSh7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbWV0YWRhdGEsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgcGVybWlzc2lvbnMgZm9yIHRoZSBzcGVjaWZpZWQgY29udGFpbmVyLiBUaGUgcGVybWlzc2lvbnMgaW5kaWNhdGVcbiAgICAgKiB3aGV0aGVyIGNvbnRhaW5lciBkYXRhIG1heSBiZSBhY2Nlc3NlZCBwdWJsaWNseS5cbiAgICAgKlxuICAgICAqIFdBUk5JTkc6IEphdmFTY3JpcHQgRGF0ZSB3aWxsIHBvdGVudGlhbGx5IGxvc2UgcHJlY2lzaW9uIHdoZW4gcGFyc2luZyBzdGFydHNPbiBhbmQgZXhwaXJlc09uIHN0cmluZ3MuXG4gICAgICogRm9yIGV4YW1wbGUsIG5ldyBEYXRlKFwiMjAxOC0xMi0zMVQwMzo0NDoyMy44ODI3ODkxWlwiKS50b0lTT1N0cmluZygpIHdpbGwgZ2V0IFwiMjAxOC0xMi0zMVQwMzo0NDoyMy44ODJaXCIuXG4gICAgICpcbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9nZXQtY29udGFpbmVyLWFjbFxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIENvbnRhaW5lciBHZXQgQWNjZXNzIFBvbGljeSBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgZ2V0QWNjZXNzUG9saWN5KG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBpZiAoIW9wdGlvbnMuY29uZGl0aW9ucykge1xuICAgICAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0ge307XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJDb250YWluZXJDbGllbnQtZ2V0QWNjZXNzUG9saWN5XCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLmNvbnRhaW5lckNvbnRleHQuZ2V0QWNjZXNzUG9saWN5KHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICBjb25zdCByZXMgPSB7XG4gICAgICAgICAgICAgICAgX3Jlc3BvbnNlOiByZXNwb25zZS5fcmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgYmxvYlB1YmxpY0FjY2VzczogcmVzcG9uc2UuYmxvYlB1YmxpY0FjY2VzcyxcbiAgICAgICAgICAgICAgICBkYXRlOiByZXNwb25zZS5kYXRlLFxuICAgICAgICAgICAgICAgIGV0YWc6IHJlc3BvbnNlLmV0YWcsXG4gICAgICAgICAgICAgICAgZXJyb3JDb2RlOiByZXNwb25zZS5lcnJvckNvZGUsXG4gICAgICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiByZXNwb25zZS5sYXN0TW9kaWZpZWQsXG4gICAgICAgICAgICAgICAgcmVxdWVzdElkOiByZXNwb25zZS5yZXF1ZXN0SWQsXG4gICAgICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiByZXNwb25zZS5jbGllbnRSZXF1ZXN0SWQsXG4gICAgICAgICAgICAgICAgc2lnbmVkSWRlbnRpZmllcnM6IFtdLFxuICAgICAgICAgICAgICAgIHZlcnNpb246IHJlc3BvbnNlLnZlcnNpb24sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZm9yIChjb25zdCBpZGVudGlmaWVyIG9mIHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgbGV0IGFjY2Vzc1BvbGljeSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBpZiAoaWRlbnRpZmllci5hY2Nlc3NQb2xpY3kpIHtcbiAgICAgICAgICAgICAgICAgICAgYWNjZXNzUG9saWN5ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGVybWlzc2lvbnM6IGlkZW50aWZpZXIuYWNjZXNzUG9saWN5LnBlcm1pc3Npb25zLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBpZiAoaWRlbnRpZmllci5hY2Nlc3NQb2xpY3kuZXhwaXJlc09uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3NQb2xpY3kuZXhwaXJlc09uID0gbmV3IERhdGUoaWRlbnRpZmllci5hY2Nlc3NQb2xpY3kuZXhwaXJlc09uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoaWRlbnRpZmllci5hY2Nlc3NQb2xpY3kuc3RhcnRzT24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjY2Vzc1BvbGljeS5zdGFydHNPbiA9IG5ldyBEYXRlKGlkZW50aWZpZXIuYWNjZXNzUG9saWN5LnN0YXJ0c09uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXMuc2lnbmVkSWRlbnRpZmllcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGFjY2Vzc1BvbGljeSxcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGlkZW50aWZpZXIuaWQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgcGVybWlzc2lvbnMgZm9yIHRoZSBzcGVjaWZpZWQgY29udGFpbmVyLiBUaGUgcGVybWlzc2lvbnMgaW5kaWNhdGVcbiAgICAgKiB3aGV0aGVyIGJsb2JzIGluIGEgY29udGFpbmVyIG1heSBiZSBhY2Nlc3NlZCBwdWJsaWNseS5cbiAgICAgKlxuICAgICAqIFdoZW4geW91IHNldCBwZXJtaXNzaW9ucyBmb3IgYSBjb250YWluZXIsIHRoZSBleGlzdGluZyBwZXJtaXNzaW9ucyBhcmUgcmVwbGFjZWQuXG4gICAgICogSWYgbm8gYWNjZXNzIG9yIGNvbnRhaW5lckFjbCBwcm92aWRlZCwgdGhlIGV4aXN0aW5nIGNvbnRhaW5lciBBQ0wgd2lsbCBiZVxuICAgICAqIHJlbW92ZWQuXG4gICAgICpcbiAgICAgKiBXaGVuIHlvdSBlc3RhYmxpc2ggYSBzdG9yZWQgYWNjZXNzIHBvbGljeSBvbiBhIGNvbnRhaW5lciwgaXQgbWF5IHRha2UgdXAgdG8gMzAgc2Vjb25kcyB0byB0YWtlIGVmZmVjdC5cbiAgICAgKiBEdXJpbmcgdGhpcyBpbnRlcnZhbCwgYSBzaGFyZWQgYWNjZXNzIHNpZ25hdHVyZSB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3RvcmVkIGFjY2VzcyBwb2xpY3kgd2lsbFxuICAgICAqIGZhaWwgd2l0aCBzdGF0dXMgY29kZSA0MDMgKEZvcmJpZGRlbiksIHVudGlsIHRoZSBhY2Nlc3MgcG9saWN5IGJlY29tZXMgYWN0aXZlLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL3NldC1jb250YWluZXItYWNsXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYWNjZXNzIC0gVGhlIGxldmVsIG9mIHB1YmxpYyBhY2Nlc3MgdG8gZGF0YSBpbiB0aGUgY29udGFpbmVyLlxuICAgICAqIEBwYXJhbSBjb250YWluZXJBY2wgLSBBcnJheSBvZiBlbGVtZW50cyBlYWNoIGhhdmluZyBhIHVuaXF1ZSBJZCBhbmQgZGV0YWlscyBvZiB0aGUgYWNjZXNzIHBvbGljeS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gQ29udGFpbmVyIFNldCBBY2Nlc3MgUG9saWN5IG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBzZXRBY2Nlc3NQb2xpY3koYWNjZXNzLCBjb250YWluZXJBY2wsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQ29udGFpbmVyQ2xpZW50LXNldEFjY2Vzc1BvbGljeVwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFjbCA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBpZGVudGlmaWVyIG9mIGNvbnRhaW5lckFjbCB8fCBbXSkge1xuICAgICAgICAgICAgICAgIGFjbC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgYWNjZXNzUG9saWN5OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBpcmVzT246IGlkZW50aWZpZXIuYWNjZXNzUG9saWN5LmV4cGlyZXNPblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdHJ1bmNhdGVkSVNPODA2MURhdGUoaWRlbnRpZmllci5hY2Nlc3NQb2xpY3kuZXhwaXJlc09uKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb25zOiBpZGVudGlmaWVyLmFjY2Vzc1BvbGljeS5wZXJtaXNzaW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0c09uOiBpZGVudGlmaWVyLmFjY2Vzc1BvbGljeS5zdGFydHNPblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdHJ1bmNhdGVkSVNPODA2MURhdGUoaWRlbnRpZmllci5hY2Nlc3NQb2xpY3kuc3RhcnRzT24pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBpZDogaWRlbnRpZmllci5pZCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLmNvbnRhaW5lckNvbnRleHQuc2V0QWNjZXNzUG9saWN5KHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBhY2Nlc3MsXG4gICAgICAgICAgICAgICAgY29udGFpbmVyQWNsOiBhY2wsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IGEge0BsaW5rIEJsb2JMZWFzZUNsaWVudH0gdGhhdCBtYW5hZ2VzIGxlYXNlcyBvbiB0aGUgY29udGFpbmVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3Bvc2VMZWFzZUlkIC0gSW5pdGlhbCBwcm9wb3NlZCBsZWFzZSBJZC5cbiAgICAgKiBAcmV0dXJucyBBIG5ldyBCbG9iTGVhc2VDbGllbnQgb2JqZWN0IGZvciBtYW5hZ2luZyBsZWFzZXMgb24gdGhlIGNvbnRhaW5lci5cbiAgICAgKi9cbiAgICBnZXRCbG9iTGVhc2VDbGllbnQocHJvcG9zZUxlYXNlSWQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBCbG9iTGVhc2VDbGllbnQodGhpcywgcHJvcG9zZUxlYXNlSWQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IGJsb2NrIGJsb2IsIG9yIHVwZGF0ZXMgdGhlIGNvbnRlbnQgb2YgYW4gZXhpc3RpbmcgYmxvY2sgYmxvYi5cbiAgICAgKlxuICAgICAqIFVwZGF0aW5nIGFuIGV4aXN0aW5nIGJsb2NrIGJsb2Igb3ZlcndyaXRlcyBhbnkgZXhpc3RpbmcgbWV0YWRhdGEgb24gdGhlIGJsb2IuXG4gICAgICogUGFydGlhbCB1cGRhdGVzIGFyZSBub3Qgc3VwcG9ydGVkOyB0aGUgY29udGVudCBvZiB0aGUgZXhpc3RpbmcgYmxvYiBpc1xuICAgICAqIG92ZXJ3cml0dGVuIHdpdGggdGhlIG5ldyBjb250ZW50LiBUbyBwZXJmb3JtIGEgcGFydGlhbCB1cGRhdGUgb2YgYSBibG9jayBibG9iJ3MsXG4gICAgICogdXNlIHtAbGluayBCbG9ja0Jsb2JDbGllbnQuc3RhZ2VCbG9ja30gYW5kIHtAbGluayBCbG9ja0Jsb2JDbGllbnQuY29tbWl0QmxvY2tMaXN0fS5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgYSBub24tcGFyYWxsZWwgdXBsb2FkaW5nIG1ldGhvZCwgcGxlYXNlIHVzZSB7QGxpbmsgQmxvY2tCbG9iQ2xpZW50LnVwbG9hZEZpbGV9LFxuICAgICAqIHtAbGluayBCbG9ja0Jsb2JDbGllbnQudXBsb2FkU3RyZWFtfSBvciB7QGxpbmsgQmxvY2tCbG9iQ2xpZW50LnVwbG9hZEJyb3dzZXJEYXRhfSBmb3IgYmV0dGVyXG4gICAgICogcGVyZm9ybWFuY2Ugd2l0aCBjb25jdXJyZW5jeSB1cGxvYWRpbmcuXG4gICAgICpcbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9wdXQtYmxvYlxuICAgICAqXG4gICAgICogQHBhcmFtIGJsb2JOYW1lIC0gTmFtZSBvZiB0aGUgYmxvY2sgYmxvYiB0byBjcmVhdGUgb3IgdXBkYXRlLlxuICAgICAqIEBwYXJhbSBib2R5IC0gQmxvYiwgc3RyaW5nLCBBcnJheUJ1ZmZlciwgQXJyYXlCdWZmZXJWaWV3IG9yIGEgZnVuY3Rpb25cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCByZXR1cm5zIGEgbmV3IFJlYWRhYmxlIHN0cmVhbSB3aG9zZSBvZmZzZXQgaXMgZnJvbSBkYXRhIHNvdXJjZSBiZWdpbm5pbmcuXG4gICAgICogQHBhcmFtIGNvbnRlbnRMZW5ndGggLSBMZW5ndGggb2YgYm9keSBpbiBieXRlcy4gVXNlIEJ1ZmZlci5ieXRlTGVuZ3RoKCkgdG8gY2FsY3VsYXRlIGJvZHkgbGVuZ3RoIGZvciBhXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nIGluY2x1ZGluZyBub24gbm9uLUJhc2U2NC9IZXgtZW5jb2RlZCBjaGFyYWN0ZXJzLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBjb25maWd1cmUgdGhlIEJsb2NrIEJsb2IgVXBsb2FkIG9wZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyBCbG9jayBCbG9iIHVwbG9hZCByZXNwb25zZSBkYXRhIGFuZCB0aGUgY29ycmVzcG9uZGluZyBCbG9ja0Jsb2JDbGllbnQgaW5zdGFuY2UuXG4gICAgICovXG4gICAgYXN5bmMgdXBsb2FkQmxvY2tCbG9iKGJsb2JOYW1lLCBib2R5LCBjb250ZW50TGVuZ3RoLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJDb250YWluZXJDbGllbnQtdXBsb2FkQmxvY2tCbG9iXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgY29uc3QgYmxvY2tCbG9iQ2xpZW50ID0gdGhpcy5nZXRCbG9ja0Jsb2JDbGllbnQoYmxvYk5hbWUpO1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBibG9ja0Jsb2JDbGllbnQudXBsb2FkKGJvZHksIGNvbnRlbnRMZW5ndGgsIHVwZGF0ZWRPcHRpb25zKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgYmxvY2tCbG9iQ2xpZW50LFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1hcmtzIHRoZSBzcGVjaWZpZWQgYmxvYiBvciBzbmFwc2hvdCBmb3IgZGVsZXRpb24uIFRoZSBibG9iIGlzIGxhdGVyIGRlbGV0ZWRcbiAgICAgKiBkdXJpbmcgZ2FyYmFnZSBjb2xsZWN0aW9uLiBOb3RlIHRoYXQgaW4gb3JkZXIgdG8gZGVsZXRlIGEgYmxvYiwgeW91IG11c3QgZGVsZXRlXG4gICAgICogYWxsIG9mIGl0cyBzbmFwc2hvdHMuIFlvdSBjYW4gZGVsZXRlIGJvdGggYXQgdGhlIHNhbWUgdGltZSB3aXRoIHRoZSBEZWxldGVcbiAgICAgKiBCbG9iIG9wZXJhdGlvbi5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9kZWxldGUtYmxvYlxuICAgICAqXG4gICAgICogQHBhcmFtIGJsb2JOYW1lIC1cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gQmxvYiBEZWxldGUgb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIEJsb2NrIGJsb2IgZGVsZXRpb24gcmVzcG9uc2UgZGF0YS5cbiAgICAgKi9cbiAgICBhc3luYyBkZWxldGVCbG9iKGJsb2JOYW1lLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJDb250YWluZXJDbGllbnQtZGVsZXRlQmxvYlwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGxldCBibG9iQ2xpZW50ID0gdGhpcy5nZXRCbG9iQ2xpZW50KGJsb2JOYW1lKTtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcnNpb25JZCkge1xuICAgICAgICAgICAgICAgIGJsb2JDbGllbnQgPSBibG9iQ2xpZW50LndpdGhWZXJzaW9uKG9wdGlvbnMudmVyc2lvbklkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBibG9iQ2xpZW50LmRlbGV0ZSh1cGRhdGVkT3B0aW9ucyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBsaXN0QmxvYkZsYXRTZWdtZW50IHJldHVybnMgYSBzaW5nbGUgc2VnbWVudCBvZiBibG9icyBzdGFydGluZyBmcm9tIHRoZVxuICAgICAqIHNwZWNpZmllZCBNYXJrZXIuIFVzZSBhbiBlbXB0eSBNYXJrZXIgdG8gc3RhcnQgZW51bWVyYXRpb24gZnJvbSB0aGUgYmVnaW5uaW5nLlxuICAgICAqIEFmdGVyIGdldHRpbmcgYSBzZWdtZW50LCBwcm9jZXNzIGl0LCBhbmQgdGhlbiBjYWxsIGxpc3RCbG9ic0ZsYXRTZWdtZW50IGFnYWluXG4gICAgICogKHBhc3NpbmcgdGhlIHRoZSBwcmV2aW91c2x5LXJldHVybmVkIE1hcmtlcikgdG8gZ2V0IHRoZSBuZXh0IHNlZ21lbnQuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvbGlzdC1ibG9ic1xuICAgICAqXG4gICAgICogQHBhcmFtIG1hcmtlciAtIEEgc3RyaW5nIHZhbHVlIHRoYXQgaWRlbnRpZmllcyB0aGUgcG9ydGlvbiBvZiB0aGUgbGlzdCB0byBiZSByZXR1cm5lZCB3aXRoIHRoZSBuZXh0IGxpc3Qgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBDb250YWluZXIgTGlzdCBCbG9iIEZsYXQgU2VnbWVudCBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgbGlzdEJsb2JGbGF0U2VnbWVudChtYXJrZXIsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkNvbnRhaW5lckNsaWVudC1saXN0QmxvYkZsYXRTZWdtZW50XCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLmNvbnRhaW5lckNvbnRleHQubGlzdEJsb2JGbGF0U2VnbWVudChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oeyBtYXJrZXIgfSwgb3B0aW9ucyksIHsgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zIH0pKSk7XG4gICAgICAgICAgICBjb25zdCB3cmFwcGVkUmVzcG9uc2UgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHJlc3BvbnNlKSwgeyBfcmVzcG9uc2U6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcmVzcG9uc2UuX3Jlc3BvbnNlKSwgeyBwYXJzZWRCb2R5OiBDb252ZXJ0SW50ZXJuYWxSZXNwb25zZU9mTGlzdEJsb2JGbGF0KHJlc3BvbnNlLl9yZXNwb25zZS5wYXJzZWRCb2R5KSB9KSwgc2VnbWVudDogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCByZXNwb25zZS5zZWdtZW50KSwgeyBibG9iSXRlbXM6IHJlc3BvbnNlLnNlZ21lbnQuYmxvYkl0ZW1zLm1hcCgoYmxvYkl0ZW1JbnRlcm5hbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvYkl0ZW0gPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGJsb2JJdGVtSW50ZXJuYWwpLCB7IG5hbWU6IEJsb2JOYW1lVG9TdHJpbmcoYmxvYkl0ZW1JbnRlcm5hbC5uYW1lKSwgdGFnczogdG9UYWdzKGJsb2JJdGVtSW50ZXJuYWwuYmxvYlRhZ3MpLCBvYmplY3RSZXBsaWNhdGlvblNvdXJjZVByb3BlcnRpZXM6IHBhcnNlT2JqZWN0UmVwbGljYXRpb25SZWNvcmQoYmxvYkl0ZW1JbnRlcm5hbC5vYmplY3RSZXBsaWNhdGlvbk1ldGFkYXRhKSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBibG9iSXRlbTtcbiAgICAgICAgICAgICAgICAgICAgfSkgfSkgfSk7XG4gICAgICAgICAgICByZXR1cm4gd3JhcHBlZFJlc3BvbnNlO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogbGlzdEJsb2JIaWVyYXJjaHlTZWdtZW50IHJldHVybnMgYSBzaW5nbGUgc2VnbWVudCBvZiBibG9icyBzdGFydGluZyBmcm9tXG4gICAgICogdGhlIHNwZWNpZmllZCBNYXJrZXIuIFVzZSBhbiBlbXB0eSBNYXJrZXIgdG8gc3RhcnQgZW51bWVyYXRpb24gZnJvbSB0aGVcbiAgICAgKiBiZWdpbm5pbmcuIEFmdGVyIGdldHRpbmcgYSBzZWdtZW50LCBwcm9jZXNzIGl0LCBhbmQgdGhlbiBjYWxsIGxpc3RCbG9ic0hpZXJhcmNoaWNhbFNlZ21lbnRcbiAgICAgKiBhZ2FpbiAocGFzc2luZyB0aGUgdGhlIHByZXZpb3VzbHktcmV0dXJuZWQgTWFya2VyKSB0byBnZXQgdGhlIG5leHQgc2VnbWVudC5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9saXN0LWJsb2JzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGVsaW1pdGVyIC0gVGhlIGNoYXJhY3RlciBvciBzdHJpbmcgdXNlZCB0byBkZWZpbmUgdGhlIHZpcnR1YWwgaGllcmFyY2h5XG4gICAgICogQHBhcmFtIG1hcmtlciAtIEEgc3RyaW5nIHZhbHVlIHRoYXQgaWRlbnRpZmllcyB0aGUgcG9ydGlvbiBvZiB0aGUgbGlzdCB0byBiZSByZXR1cm5lZCB3aXRoIHRoZSBuZXh0IGxpc3Qgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBDb250YWluZXIgTGlzdCBCbG9iIEhpZXJhcmNoeSBTZWdtZW50IG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBsaXN0QmxvYkhpZXJhcmNoeVNlZ21lbnQoZGVsaW1pdGVyLCBtYXJrZXIsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkNvbnRhaW5lckNsaWVudC1saXN0QmxvYkhpZXJhcmNoeVNlZ21lbnRcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuY29udGFpbmVyQ29udGV4dC5saXN0QmxvYkhpZXJhcmNoeVNlZ21lbnQoZGVsaW1pdGVyLCBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oeyBtYXJrZXIgfSwgb3B0aW9ucyksIHsgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zIH0pKSk7XG4gICAgICAgICAgICBjb25zdCB3cmFwcGVkUmVzcG9uc2UgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHJlc3BvbnNlKSwgeyBfcmVzcG9uc2U6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcmVzcG9uc2UuX3Jlc3BvbnNlKSwgeyBwYXJzZWRCb2R5OiBDb252ZXJ0SW50ZXJuYWxSZXNwb25zZU9mTGlzdEJsb2JIaWVyYXJjaHkocmVzcG9uc2UuX3Jlc3BvbnNlLnBhcnNlZEJvZHkpIH0pLCBzZWdtZW50OiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHJlc3BvbnNlLnNlZ21lbnQpLCB7IGJsb2JJdGVtczogcmVzcG9uc2Uuc2VnbWVudC5ibG9iSXRlbXMubWFwKChibG9iSXRlbUludGVybmFsKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9iSXRlbSA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYmxvYkl0ZW1JbnRlcm5hbCksIHsgbmFtZTogQmxvYk5hbWVUb1N0cmluZyhibG9iSXRlbUludGVybmFsLm5hbWUpLCB0YWdzOiB0b1RhZ3MoYmxvYkl0ZW1JbnRlcm5hbC5ibG9iVGFncyksIG9iamVjdFJlcGxpY2F0aW9uU291cmNlUHJvcGVydGllczogcGFyc2VPYmplY3RSZXBsaWNhdGlvblJlY29yZChibG9iSXRlbUludGVybmFsLm9iamVjdFJlcGxpY2F0aW9uTWV0YWRhdGEpIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJsb2JJdGVtO1xuICAgICAgICAgICAgICAgICAgICB9KSwgYmxvYlByZWZpeGVzOiAoX2EgPSByZXNwb25zZS5zZWdtZW50LmJsb2JQcmVmaXhlcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm1hcCgoYmxvYlByZWZpeEludGVybmFsKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9iUHJlZml4ID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBibG9iUHJlZml4SW50ZXJuYWwpLCB7IG5hbWU6IEJsb2JOYW1lVG9TdHJpbmcoYmxvYlByZWZpeEludGVybmFsLm5hbWUpIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJsb2JQcmVmaXg7XG4gICAgICAgICAgICAgICAgICAgIH0pIH0pIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWRSZXNwb25zZTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIGZvciBDb250YWluZXJMaXN0QmxvYkZsYXRTZWdtZW50UmVzcG9uc2VcbiAgICAgKlxuICAgICAqIEBwYXJhbSBtYXJrZXIgLSBBIHN0cmluZyB2YWx1ZSB0aGF0IGlkZW50aWZpZXMgdGhlIHBvcnRpb24gb2ZcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGxpc3Qgb2YgYmxvYnMgdG8gYmUgcmV0dXJuZWQgd2l0aCB0aGUgbmV4dCBsaXN0aW5nIG9wZXJhdGlvbi4gVGhlXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiByZXR1cm5zIHRoZSBDb250aW51YXRpb25Ub2tlbiB2YWx1ZSB3aXRoaW4gdGhlIHJlc3BvbnNlIGJvZHkgaWYgdGhlXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3Rpbmcgb3BlcmF0aW9uIGRpZCBub3QgcmV0dXJuIGFsbCBibG9icyByZW1haW5pbmcgdG8gYmUgbGlzdGVkXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIGN1cnJlbnQgcGFnZS4gVGhlIENvbnRpbnVhdGlvblRva2VuIHZhbHVlIGNhbiBiZSB1c2VkIGFzIHRoZSB2YWx1ZSBmb3JcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1hcmtlciBwYXJhbWV0ZXIgaW4gYSBzdWJzZXF1ZW50IGNhbGwgdG8gcmVxdWVzdCB0aGUgbmV4dCBwYWdlIG9mIGxpc3RcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMuIFRoZSBtYXJrZXIgdmFsdWUgaXMgb3BhcXVlIHRvIHRoZSBjbGllbnQuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIGxpc3QgYmxvYnMgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGxpc3RTZWdtZW50cyhtYXJrZXJfMSkge1xuICAgICAgICByZXR1cm4gdHNsaWIuX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKiBsaXN0U2VnbWVudHNfMShtYXJrZXIsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICAgICAgbGV0IGxpc3RCbG9ic0ZsYXRTZWdtZW50UmVzcG9uc2U7XG4gICAgICAgICAgICBpZiAoISFtYXJrZXIgfHwgbWFya2VyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RCbG9ic0ZsYXRTZWdtZW50UmVzcG9uc2UgPSB5aWVsZCB0c2xpYi5fX2F3YWl0KHRoaXMubGlzdEJsb2JGbGF0U2VnbWVudChtYXJrZXIsIG9wdGlvbnMpKTtcbiAgICAgICAgICAgICAgICAgICAgbWFya2VyID0gbGlzdEJsb2JzRmxhdFNlZ21lbnRSZXNwb25zZS5jb250aW51YXRpb25Ub2tlbjtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgeWllbGQgdHNsaWIuX19hd2FpdCh5aWVsZCB0c2xpYi5fX2F3YWl0KGxpc3RCbG9ic0ZsYXRTZWdtZW50UmVzcG9uc2UpKTtcbiAgICAgICAgICAgICAgICB9IHdoaWxlIChtYXJrZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBBc3luY0l0ZXJhYmxlSXRlcmF0b3Igb2Yge0BsaW5rIEJsb2JJdGVtfSBvYmplY3RzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gbGlzdCBibG9icyBvcGVyYXRpb24uXG4gICAgICovXG4gICAgbGlzdEl0ZW1zKCkge1xuICAgICAgICByZXR1cm4gdHNsaWIuX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKiBsaXN0SXRlbXNfMShvcHRpb25zID0ge30pIHtcbiAgICAgICAgICAgIHZhciBfYSwgZV8xLCBfYiwgX2M7XG4gICAgICAgICAgICBsZXQgbWFya2VyO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBfZCA9IHRydWUsIF9lID0gdHNsaWIuX19hc3luY1ZhbHVlcyh0aGlzLmxpc3RTZWdtZW50cyhtYXJrZXIsIG9wdGlvbnMpKSwgX2Y7IF9mID0geWllbGQgdHNsaWIuX19hd2FpdChfZS5uZXh0KCkpLCBfYSA9IF9mLmRvbmUsICFfYTsgX2QgPSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgIF9jID0gX2YudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIF9kID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpc3RCbG9ic0ZsYXRTZWdtZW50UmVzcG9uc2UgPSBfYztcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgdHNsaWIuX19hd2FpdCh5aWVsZCogdHNsaWIuX19hc3luY0RlbGVnYXRvcih0c2xpYi5fX2FzeW5jVmFsdWVzKGxpc3RCbG9ic0ZsYXRTZWdtZW50UmVzcG9uc2Uuc2VnbWVudC5ibG9iSXRlbXMpKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghX2QgJiYgIV9hICYmIChfYiA9IF9lLnJldHVybikpIHlpZWxkIHRzbGliLl9fYXdhaXQoX2IuY2FsbChfZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIGFzeW5jIGl0ZXJhYmxlIGl0ZXJhdG9yIHRvIGxpc3QgYWxsIHRoZSBibG9ic1xuICAgICAqIHVuZGVyIHRoZSBzcGVjaWZpZWQgYWNjb3VudC5cbiAgICAgKlxuICAgICAqIC5ieVBhZ2UoKSByZXR1cm5zIGFuIGFzeW5jIGl0ZXJhYmxlIGl0ZXJhdG9yIHRvIGxpc3QgdGhlIGJsb2JzIGluIHBhZ2VzLlxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBgZm9yIGF3YWl0YCBzeW50YXg6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIEdldCB0aGUgY29udGFpbmVyQ2xpZW50IGJlZm9yZSB5b3UgcnVuIHRoZXNlIHNuaXBwZXRzLFxuICAgICAqIC8vIENhbiBiZSBvYnRhaW5lZCBmcm9tIGBibG9iU2VydmljZUNsaWVudC5nZXRDb250YWluZXJDbGllbnQoXCI8eW91ci1jb250YWluZXItbmFtZT5cIik7YFxuICAgICAqIGxldCBpID0gMTtcbiAgICAgKiBmb3IgYXdhaXQgKGNvbnN0IGJsb2Igb2YgY29udGFpbmVyQ2xpZW50Lmxpc3RCbG9ic0ZsYXQoKSkge1xuICAgICAqICAgY29uc29sZS5sb2coYEJsb2IgJHtpKyt9OiAke2Jsb2IubmFtZX1gKTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIGBpdGVyLm5leHQoKWA6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGxldCBpID0gMTtcbiAgICAgKiBsZXQgaXRlciA9IGNvbnRhaW5lckNsaWVudC5saXN0QmxvYnNGbGF0KCk7XG4gICAgICogbGV0IGJsb2JJdGVtID0gYXdhaXQgaXRlci5uZXh0KCk7XG4gICAgICogd2hpbGUgKCFibG9iSXRlbS5kb25lKSB7XG4gICAgICogICBjb25zb2xlLmxvZyhgQmxvYiAke2krK306ICR7YmxvYkl0ZW0udmFsdWUubmFtZX1gKTtcbiAgICAgKiAgIGJsb2JJdGVtID0gYXdhaXQgaXRlci5uZXh0KCk7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBgYnlQYWdlKClgOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiAvLyBwYXNzaW5nIG9wdGlvbmFsIG1heFBhZ2VTaXplIGluIHRoZSBwYWdlIHNldHRpbmdzXG4gICAgICogbGV0IGkgPSAxO1xuICAgICAqIGZvciBhd2FpdCAoY29uc3QgcmVzcG9uc2Ugb2YgY29udGFpbmVyQ2xpZW50Lmxpc3RCbG9ic0ZsYXQoKS5ieVBhZ2UoeyBtYXhQYWdlU2l6ZTogMjAgfSkpIHtcbiAgICAgKiAgIGZvciAoY29uc3QgYmxvYiBvZiByZXNwb25zZS5zZWdtZW50LmJsb2JJdGVtcykge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhgQmxvYiAke2krK306ICR7YmxvYi5uYW1lfWApO1xuICAgICAqICAgfVxuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNpbmcgcGFnaW5nIHdpdGggYSBtYXJrZXI6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGxldCBpID0gMTtcbiAgICAgKiBsZXQgaXRlcmF0b3IgPSBjb250YWluZXJDbGllbnQubGlzdEJsb2JzRmxhdCgpLmJ5UGFnZSh7IG1heFBhZ2VTaXplOiAyIH0pO1xuICAgICAqIGxldCByZXNwb25zZSA9IChhd2FpdCBpdGVyYXRvci5uZXh0KCkpLnZhbHVlO1xuICAgICAqXG4gICAgICogLy8gUHJpbnRzIDIgYmxvYiBuYW1lc1xuICAgICAqIGZvciAoY29uc3QgYmxvYiBvZiByZXNwb25zZS5zZWdtZW50LmJsb2JJdGVtcykge1xuICAgICAqICAgY29uc29sZS5sb2coYEJsb2IgJHtpKyt9OiAke2Jsb2IubmFtZX1gKTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBHZXRzIG5leHQgbWFya2VyXG4gICAgICogbGV0IG1hcmtlciA9IHJlc3BvbnNlLmNvbnRpbnVhdGlvblRva2VuO1xuICAgICAqXG4gICAgICogLy8gUGFzc2luZyBuZXh0IG1hcmtlciBhcyBjb250aW51YXRpb25Ub2tlblxuICAgICAqXG4gICAgICogaXRlcmF0b3IgPSBjb250YWluZXJDbGllbnQubGlzdEJsb2JzRmxhdCgpLmJ5UGFnZSh7IGNvbnRpbnVhdGlvblRva2VuOiBtYXJrZXIsIG1heFBhZ2VTaXplOiAxMCB9KTtcbiAgICAgKiByZXNwb25zZSA9IChhd2FpdCBpdGVyYXRvci5uZXh0KCkpLnZhbHVlO1xuICAgICAqXG4gICAgICogLy8gUHJpbnRzIDEwIGJsb2IgbmFtZXNcbiAgICAgKiBmb3IgKGNvbnN0IGJsb2Igb2YgcmVzcG9uc2Uuc2VnbWVudC5ibG9iSXRlbXMpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKGBCbG9iICR7aSsrfTogJHtibG9iLm5hbWV9YCk7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIGxpc3QgYmxvYnMuXG4gICAgICogQHJldHVybnMgQW4gYXN5bmNJdGVyYWJsZUl0ZXJhdG9yIHRoYXQgc3VwcG9ydHMgcGFnaW5nLlxuICAgICAqL1xuICAgIGxpc3RCbG9ic0ZsYXQob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IGluY2x1ZGUgPSBbXTtcbiAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZUNvcHkpIHtcbiAgICAgICAgICAgIGluY2x1ZGUucHVzaChcImNvcHlcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZURlbGV0ZWQpIHtcbiAgICAgICAgICAgIGluY2x1ZGUucHVzaChcImRlbGV0ZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZU1ldGFkYXRhKSB7XG4gICAgICAgICAgICBpbmNsdWRlLnB1c2goXCJtZXRhZGF0YVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5pbmNsdWRlU25hcHNob3RzKSB7XG4gICAgICAgICAgICBpbmNsdWRlLnB1c2goXCJzbmFwc2hvdHNcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZVZlcnNpb25zKSB7XG4gICAgICAgICAgICBpbmNsdWRlLnB1c2goXCJ2ZXJzaW9uc1wiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5pbmNsdWRlVW5jb21taXRlZEJsb2JzKSB7XG4gICAgICAgICAgICBpbmNsdWRlLnB1c2goXCJ1bmNvbW1pdHRlZGJsb2JzXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVUYWdzKSB7XG4gICAgICAgICAgICBpbmNsdWRlLnB1c2goXCJ0YWdzXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVEZWxldGVkV2l0aFZlcnNpb25zKSB7XG4gICAgICAgICAgICBpbmNsdWRlLnB1c2goXCJkZWxldGVkd2l0aHZlcnNpb25zXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVJbW11dGFiaWxpdHlQb2xpY3kpIHtcbiAgICAgICAgICAgIGluY2x1ZGUucHVzaChcImltbXV0YWJpbGl0eXBvbGljeVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5pbmNsdWRlTGVnYWxIb2xkKSB7XG4gICAgICAgICAgICBpbmNsdWRlLnB1c2goXCJsZWdhbGhvbGRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMucHJlZml4ID09PSBcIlwiKSB7XG4gICAgICAgICAgICBvcHRpb25zLnByZWZpeCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1cGRhdGVkT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyksIChpbmNsdWRlLmxlbmd0aCA+IDAgPyB7IGluY2x1ZGU6IGluY2x1ZGUgfSA6IHt9KSk7XG4gICAgICAgIC8vIEFzeW5jSXRlcmFibGVJdGVyYXRvciB0byBpdGVyYXRlIG92ZXIgYmxvYnNcbiAgICAgICAgY29uc3QgaXRlciA9IHRoaXMubGlzdEl0ZW1zKHVwZGF0ZWRPcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVGhlIG5leHQgbWV0aG9kLCBwYXJ0IG9mIHRoZSBpdGVyYXRpb24gcHJvdG9jb2xcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgbmV4dCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlci5uZXh0KCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBUaGUgY29ubmVjdGlvbiB0byB0aGUgYXN5bmMgaXRlcmF0b3IsIHBhcnQgb2YgdGhlIGl0ZXJhdGlvbiBwcm90b2NvbFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogUmV0dXJuIGFuIEFzeW5jSXRlcmFibGVJdGVyYXRvciB0aGF0IHdvcmtzIGEgcGFnZSBhdCBhIHRpbWVcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgYnlQYWdlOiAoc2V0dGluZ3MgPSB7fSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxpc3RTZWdtZW50cyhzZXR0aW5ncy5jb250aW51YXRpb25Ub2tlbiwgT2JqZWN0LmFzc2lnbih7IG1heFBhZ2VTaXplOiBzZXR0aW5ncy5tYXhQYWdlU2l6ZSB9LCB1cGRhdGVkT3B0aW9ucykpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBBc3luY0l0ZXJhYmxlSXRlcmF0b3IgZm9yIENvbnRhaW5lckxpc3RCbG9iSGllcmFyY2h5U2VnbWVudFJlc3BvbnNlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGVsaW1pdGVyIC0gVGhlIGNoYXJhY3RlciBvciBzdHJpbmcgdXNlZCB0byBkZWZpbmUgdGhlIHZpcnR1YWwgaGllcmFyY2h5XG4gICAgICogQHBhcmFtIG1hcmtlciAtIEEgc3RyaW5nIHZhbHVlIHRoYXQgaWRlbnRpZmllcyB0aGUgcG9ydGlvbiBvZlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbGlzdCBvZiBibG9icyB0byBiZSByZXR1cm5lZCB3aXRoIHRoZSBuZXh0IGxpc3Rpbmcgb3BlcmF0aW9uLiBUaGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uIHJldHVybnMgdGhlIENvbnRpbnVhdGlvblRva2VuIHZhbHVlIHdpdGhpbiB0aGUgcmVzcG9uc2UgYm9keSBpZiB0aGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGluZyBvcGVyYXRpb24gZGlkIG5vdCByZXR1cm4gYWxsIGJsb2JzIHJlbWFpbmluZyB0byBiZSBsaXN0ZWRcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgY3VycmVudCBwYWdlLiBUaGUgQ29udGludWF0aW9uVG9rZW4gdmFsdWUgY2FuIGJlIHVzZWQgYXMgdGhlIHZhbHVlIGZvclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWFya2VyIHBhcmFtZXRlciBpbiBhIHN1YnNlcXVlbnQgY2FsbCB0byByZXF1ZXN0IHRoZSBuZXh0IHBhZ2Ugb2YgbGlzdFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy4gVGhlIG1hcmtlciB2YWx1ZSBpcyBvcGFxdWUgdG8gdGhlIGNsaWVudC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gbGlzdCBibG9icyBvcGVyYXRpb24uXG4gICAgICovXG4gICAgbGlzdEhpZXJhcmNoeVNlZ21lbnRzKGRlbGltaXRlcl8xLCBtYXJrZXJfMSkge1xuICAgICAgICByZXR1cm4gdHNsaWIuX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKiBsaXN0SGllcmFyY2h5U2VnbWVudHNfMShkZWxpbWl0ZXIsIG1hcmtlciwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgICAgICBsZXQgbGlzdEJsb2JzSGllcmFyY2h5U2VnbWVudFJlc3BvbnNlO1xuICAgICAgICAgICAgaWYgKCEhbWFya2VyIHx8IG1hcmtlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICBsaXN0QmxvYnNIaWVyYXJjaHlTZWdtZW50UmVzcG9uc2UgPSB5aWVsZCB0c2xpYi5fX2F3YWl0KHRoaXMubGlzdEJsb2JIaWVyYXJjaHlTZWdtZW50KGRlbGltaXRlciwgbWFya2VyLCBvcHRpb25zKSk7XG4gICAgICAgICAgICAgICAgICAgIG1hcmtlciA9IGxpc3RCbG9ic0hpZXJhcmNoeVNlZ21lbnRSZXNwb25zZS5jb250aW51YXRpb25Ub2tlbjtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgeWllbGQgdHNsaWIuX19hd2FpdCh5aWVsZCB0c2xpYi5fX2F3YWl0KGxpc3RCbG9ic0hpZXJhcmNoeVNlZ21lbnRSZXNwb25zZSkpO1xuICAgICAgICAgICAgICAgIH0gd2hpbGUgKG1hcmtlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIEFzeW5jSXRlcmFibGVJdGVyYXRvciBmb3Ige0BsaW5rIEJsb2JQcmVmaXh9IGFuZCB7QGxpbmsgQmxvYkl0ZW19IG9iamVjdHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGVsaW1pdGVyIC0gVGhlIGNoYXJhY3RlciBvciBzdHJpbmcgdXNlZCB0byBkZWZpbmUgdGhlIHZpcnR1YWwgaGllcmFyY2h5XG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIGxpc3QgYmxvYnMgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGxpc3RJdGVtc0J5SGllcmFyY2h5KGRlbGltaXRlcl8xKSB7XG4gICAgICAgIHJldHVybiB0c2xpYi5fX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24qIGxpc3RJdGVtc0J5SGllcmFyY2h5XzEoZGVsaW1pdGVyLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgICAgIHZhciBfYSwgZV8yLCBfYiwgX2M7XG4gICAgICAgICAgICBsZXQgbWFya2VyO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBfZCA9IHRydWUsIF9lID0gdHNsaWIuX19hc3luY1ZhbHVlcyh0aGlzLmxpc3RIaWVyYXJjaHlTZWdtZW50cyhkZWxpbWl0ZXIsIG1hcmtlciwgb3B0aW9ucykpLCBfZjsgX2YgPSB5aWVsZCB0c2xpYi5fX2F3YWl0KF9lLm5leHQoKSksIF9hID0gX2YuZG9uZSwgIV9hOyBfZCA9IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgX2MgPSBfZi52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgX2QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlzdEJsb2JzSGllcmFyY2h5U2VnbWVudFJlc3BvbnNlID0gX2M7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlZ21lbnQgPSBsaXN0QmxvYnNIaWVyYXJjaHlTZWdtZW50UmVzcG9uc2Uuc2VnbWVudDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlZ21lbnQuYmxvYlByZWZpeGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHByZWZpeCBvZiBzZWdtZW50LmJsb2JQcmVmaXhlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIHlpZWxkIHRzbGliLl9fYXdhaXQoT2JqZWN0LmFzc2lnbih7IGtpbmQ6IFwicHJlZml4XCIgfSwgcHJlZml4KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBibG9iIG9mIHNlZ21lbnQuYmxvYkl0ZW1zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCB5aWVsZCB0c2xpYi5fX2F3YWl0KE9iamVjdC5hc3NpZ24oeyBraW5kOiBcImJsb2JcIiB9LCBibG9iKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZV8yXzEpIHsgZV8yID0geyBlcnJvcjogZV8yXzEgfTsgfVxuICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFfZCAmJiAhX2EgJiYgKF9iID0gX2UucmV0dXJuKSkgeWllbGQgdHNsaWIuX19hd2FpdChfYi5jYWxsKF9lKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8yKSB0aHJvdyBlXzIuZXJyb3I7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gYXN5bmMgaXRlcmFibGUgaXRlcmF0b3IgdG8gbGlzdCBhbGwgdGhlIGJsb2JzIGJ5IGhpZXJhcmNoeS5cbiAgICAgKiB1bmRlciB0aGUgc3BlY2lmaWVkIGFjY291bnQuXG4gICAgICpcbiAgICAgKiAuYnlQYWdlKCkgcmV0dXJucyBhbiBhc3luYyBpdGVyYWJsZSBpdGVyYXRvciB0byBsaXN0IHRoZSBibG9icyBieSBoaWVyYXJjaHkgaW4gcGFnZXMuXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIGBmb3IgYXdhaXRgIHN5bnRheDpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogZm9yIGF3YWl0IChjb25zdCBpdGVtIG9mIGNvbnRhaW5lckNsaWVudC5saXN0QmxvYnNCeUhpZXJhcmNoeShcIi9cIikpIHtcbiAgICAgKiAgIGlmIChpdGVtLmtpbmQgPT09IFwicHJlZml4XCIpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coYFxcdEJsb2JQcmVmaXg6ICR7aXRlbS5uYW1lfWApO1xuICAgICAqICAgfSBlbHNlIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coYFxcdEJsb2JJdGVtOiBuYW1lIC0gJHtpdGVtLm5hbWV9YCk7XG4gICAgICogICB9XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBgaXRlci5uZXh0KClgOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBsZXQgaXRlciA9IGNvbnRhaW5lckNsaWVudC5saXN0QmxvYnNCeUhpZXJhcmNoeShcIi9cIiwgeyBwcmVmaXg6IFwicHJlZml4MS9cIiB9KTtcbiAgICAgKiBsZXQgZW50aXR5ID0gYXdhaXQgaXRlci5uZXh0KCk7XG4gICAgICogd2hpbGUgKCFlbnRpdHkuZG9uZSkge1xuICAgICAqICAgbGV0IGl0ZW0gPSBlbnRpdHkudmFsdWU7XG4gICAgICogICBpZiAoaXRlbS5raW5kID09PSBcInByZWZpeFwiKSB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGBcXHRCbG9iUHJlZml4OiAke2l0ZW0ubmFtZX1gKTtcbiAgICAgKiAgIH0gZWxzZSB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGBcXHRCbG9iSXRlbTogbmFtZSAtICR7aXRlbS5uYW1lfWApO1xuICAgICAqICAgfVxuICAgICAqICAgZW50aXR5ID0gYXdhaXQgaXRlci5uZXh0KCk7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBgYnlQYWdlKClgOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBjb25zb2xlLmxvZyhcIkxpc3RpbmcgYmxvYnMgYnkgaGllcmFyY2h5IGJ5IHBhZ2VcIik7XG4gICAgICogZm9yIGF3YWl0IChjb25zdCByZXNwb25zZSBvZiBjb250YWluZXJDbGllbnQubGlzdEJsb2JzQnlIaWVyYXJjaHkoXCIvXCIpLmJ5UGFnZSgpKSB7XG4gICAgICogICBjb25zdCBzZWdtZW50ID0gcmVzcG9uc2Uuc2VnbWVudDtcbiAgICAgKiAgIGlmIChzZWdtZW50LmJsb2JQcmVmaXhlcykge1xuICAgICAqICAgICBmb3IgKGNvbnN0IHByZWZpeCBvZiBzZWdtZW50LmJsb2JQcmVmaXhlcykge1xuICAgICAqICAgICAgIGNvbnNvbGUubG9nKGBcXHRCbG9iUHJlZml4OiAke3ByZWZpeC5uYW1lfWApO1xuICAgICAqICAgICB9XG4gICAgICogICB9XG4gICAgICogICBmb3IgKGNvbnN0IGJsb2Igb2YgcmVzcG9uc2Uuc2VnbWVudC5ibG9iSXRlbXMpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coYFxcdEJsb2JJdGVtOiBuYW1lIC0gJHtibG9iLm5hbWV9YCk7XG4gICAgICogICB9XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBwYWdpbmcgd2l0aCBhIG1heCBwYWdlIHNpemU6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnNvbGUubG9nKFwiTGlzdGluZyBibG9icyBieSBoaWVyYXJjaHkgYnkgcGFnZSwgc3BlY2lmeWluZyBhIHByZWZpeCBhbmQgYSBtYXggcGFnZSBzaXplXCIpO1xuICAgICAqXG4gICAgICogbGV0IGkgPSAxO1xuICAgICAqIGZvciBhd2FpdCAoY29uc3QgcmVzcG9uc2Ugb2YgY29udGFpbmVyQ2xpZW50XG4gICAgICogICAubGlzdEJsb2JzQnlIaWVyYXJjaHkoXCIvXCIsIHsgcHJlZml4OiBcInByZWZpeDIvc3ViMS9cIiB9KVxuICAgICAqICAgLmJ5UGFnZSh7IG1heFBhZ2VTaXplOiAyIH0pKSB7XG4gICAgICogICBjb25zb2xlLmxvZyhgUGFnZSAke2krK31gKTtcbiAgICAgKiAgIGNvbnN0IHNlZ21lbnQgPSByZXNwb25zZS5zZWdtZW50O1xuICAgICAqXG4gICAgICogICBpZiAoc2VnbWVudC5ibG9iUHJlZml4ZXMpIHtcbiAgICAgKiAgICAgZm9yIChjb25zdCBwcmVmaXggb2Ygc2VnbWVudC5ibG9iUHJlZml4ZXMpIHtcbiAgICAgKiAgICAgICBjb25zb2xlLmxvZyhgXFx0QmxvYlByZWZpeDogJHtwcmVmaXgubmFtZX1gKTtcbiAgICAgKiAgICAgfVxuICAgICAqICAgfVxuICAgICAqXG4gICAgICogICBmb3IgKGNvbnN0IGJsb2Igb2YgcmVzcG9uc2Uuc2VnbWVudC5ibG9iSXRlbXMpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coYFxcdEJsb2JJdGVtOiBuYW1lIC0gJHtibG9iLm5hbWV9YCk7XG4gICAgICogICB9XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQHBhcmFtIGRlbGltaXRlciAtIFRoZSBjaGFyYWN0ZXIgb3Igc3RyaW5nIHVzZWQgdG8gZGVmaW5lIHRoZSB2aXJ0dWFsIGhpZXJhcmNoeVxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBsaXN0IGJsb2JzIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBsaXN0QmxvYnNCeUhpZXJhcmNoeShkZWxpbWl0ZXIsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBpZiAoZGVsaW1pdGVyID09PSBcIlwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcImRlbGltaXRlciBzaG91bGQgY29udGFpbiBvbmUgb3IgbW9yZSBjaGFyYWN0ZXJzXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluY2x1ZGUgPSBbXTtcbiAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZUNvcHkpIHtcbiAgICAgICAgICAgIGluY2x1ZGUucHVzaChcImNvcHlcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZURlbGV0ZWQpIHtcbiAgICAgICAgICAgIGluY2x1ZGUucHVzaChcImRlbGV0ZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZU1ldGFkYXRhKSB7XG4gICAgICAgICAgICBpbmNsdWRlLnB1c2goXCJtZXRhZGF0YVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5pbmNsdWRlU25hcHNob3RzKSB7XG4gICAgICAgICAgICBpbmNsdWRlLnB1c2goXCJzbmFwc2hvdHNcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZVZlcnNpb25zKSB7XG4gICAgICAgICAgICBpbmNsdWRlLnB1c2goXCJ2ZXJzaW9uc1wiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5pbmNsdWRlVW5jb21taXRlZEJsb2JzKSB7XG4gICAgICAgICAgICBpbmNsdWRlLnB1c2goXCJ1bmNvbW1pdHRlZGJsb2JzXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVUYWdzKSB7XG4gICAgICAgICAgICBpbmNsdWRlLnB1c2goXCJ0YWdzXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVEZWxldGVkV2l0aFZlcnNpb25zKSB7XG4gICAgICAgICAgICBpbmNsdWRlLnB1c2goXCJkZWxldGVkd2l0aHZlcnNpb25zXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVJbW11dGFiaWxpdHlQb2xpY3kpIHtcbiAgICAgICAgICAgIGluY2x1ZGUucHVzaChcImltbXV0YWJpbGl0eXBvbGljeVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5pbmNsdWRlTGVnYWxIb2xkKSB7XG4gICAgICAgICAgICBpbmNsdWRlLnB1c2goXCJsZWdhbGhvbGRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMucHJlZml4ID09PSBcIlwiKSB7XG4gICAgICAgICAgICBvcHRpb25zLnByZWZpeCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1cGRhdGVkT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyksIChpbmNsdWRlLmxlbmd0aCA+IDAgPyB7IGluY2x1ZGU6IGluY2x1ZGUgfSA6IHt9KSk7XG4gICAgICAgIC8vIEFzeW5jSXRlcmFibGVJdGVyYXRvciB0byBpdGVyYXRlIG92ZXIgYmxvYiBwcmVmaXhlcyBhbmQgYmxvYnNcbiAgICAgICAgY29uc3QgaXRlciA9IHRoaXMubGlzdEl0ZW1zQnlIaWVyYXJjaHkoZGVsaW1pdGVyLCB1cGRhdGVkT3B0aW9ucyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFRoZSBuZXh0IG1ldGhvZCwgcGFydCBvZiB0aGUgaXRlcmF0aW9uIHByb3RvY29sXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGFzeW5jIG5leHQoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZXIubmV4dCgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVGhlIGNvbm5lY3Rpb24gdG8gdGhlIGFzeW5jIGl0ZXJhdG9yLCBwYXJ0IG9mIHRoZSBpdGVyYXRpb24gcHJvdG9jb2xcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFJldHVybiBhbiBBc3luY0l0ZXJhYmxlSXRlcmF0b3IgdGhhdCB3b3JrcyBhIHBhZ2UgYXQgYSB0aW1lXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGJ5UGFnZTogKHNldHRpbmdzID0ge30pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5saXN0SGllcmFyY2h5U2VnbWVudHMoZGVsaW1pdGVyLCBzZXR0aW5ncy5jb250aW51YXRpb25Ub2tlbiwgT2JqZWN0LmFzc2lnbih7IG1heFBhZ2VTaXplOiBzZXR0aW5ncy5tYXhQYWdlU2l6ZSB9LCB1cGRhdGVkT3B0aW9ucykpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIEZpbHRlciBCbG9icyBvcGVyYXRpb24gZW5hYmxlcyBjYWxsZXJzIHRvIGxpc3QgYmxvYnMgaW4gdGhlIGNvbnRhaW5lciB3aG9zZSB0YWdzXG4gICAgICogbWF0Y2ggYSBnaXZlbiBzZWFyY2ggZXhwcmVzc2lvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0YWdGaWx0ZXJTcWxFeHByZXNzaW9uIC0gVGhlIHdoZXJlIHBhcmFtZXRlciBlbmFibGVzIHRoZSBjYWxsZXIgdG8gcXVlcnkgYmxvYnMgd2hvc2UgdGFncyBtYXRjaCBhIGdpdmVuIGV4cHJlc3Npb24uXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGdpdmVuIGV4cHJlc3Npb24gbXVzdCBldmFsdWF0ZSB0byB0cnVlIGZvciBhIGJsb2IgdG8gYmUgcmV0dXJuZWQgaW4gdGhlIHJlc3VsdHMuXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlW09EYXRhIC0gQUJORl0gZmlsdGVyIHN5bnRheCBydWxlIGRlZmluZXMgdGhlIGZvcm1hbCBncmFtbWFyIGZvciB0aGUgdmFsdWUgb2YgdGhlIHdoZXJlIHF1ZXJ5IHBhcmFtZXRlcjtcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3dldmVyLCBvbmx5IGEgc3Vic2V0IG9mIHRoZSBPRGF0YSBmaWx0ZXIgc3ludGF4IGlzIHN1cHBvcnRlZCBpbiB0aGUgQmxvYiBzZXJ2aWNlLlxuICAgICAqIEBwYXJhbSBtYXJrZXIgLSBBIHN0cmluZyB2YWx1ZSB0aGF0IGlkZW50aWZpZXMgdGhlIHBvcnRpb24gb2ZcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGxpc3Qgb2YgYmxvYnMgdG8gYmUgcmV0dXJuZWQgd2l0aCB0aGUgbmV4dCBsaXN0aW5nIG9wZXJhdGlvbi4gVGhlXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiByZXR1cm5zIHRoZSBjb250aW51YXRpb25Ub2tlbiB2YWx1ZSB3aXRoaW4gdGhlIHJlc3BvbnNlIGJvZHkgaWYgdGhlXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3Rpbmcgb3BlcmF0aW9uIGRpZCBub3QgcmV0dXJuIGFsbCBibG9icyByZW1haW5pbmcgdG8gYmUgbGlzdGVkXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIGN1cnJlbnQgcGFnZS4gVGhlIGNvbnRpbnVhdGlvblRva2VuIHZhbHVlIGNhbiBiZSB1c2VkIGFzIHRoZSB2YWx1ZSBmb3JcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1hcmtlciBwYXJhbWV0ZXIgaW4gYSBzdWJzZXF1ZW50IGNhbGwgdG8gcmVxdWVzdCB0aGUgbmV4dCBwYWdlIG9mIGxpc3RcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMuIFRoZSBtYXJrZXIgdmFsdWUgaXMgb3BhcXVlIHRvIHRoZSBjbGllbnQuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIGZpbmQgYmxvYnMgYnkgdGFncy5cbiAgICAgKi9cbiAgICBhc3luYyBmaW5kQmxvYnNCeVRhZ3NTZWdtZW50KHRhZ0ZpbHRlclNxbEV4cHJlc3Npb24sIG1hcmtlciwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQ29udGFpbmVyQ2xpZW50LWZpbmRCbG9ic0J5VGFnc1NlZ21lbnRcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuY29udGFpbmVyQ29udGV4dC5maWx0ZXJCbG9icyh7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgd2hlcmU6IHRhZ0ZpbHRlclNxbEV4cHJlc3Npb24sXG4gICAgICAgICAgICAgICAgbWFya2VyLFxuICAgICAgICAgICAgICAgIG1heFBhZ2VTaXplOiBvcHRpb25zLm1heFBhZ2VTaXplLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIGNvbnN0IHdyYXBwZWRSZXNwb25zZSA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcmVzcG9uc2UpLCB7IF9yZXNwb25zZTogcmVzcG9uc2UuX3Jlc3BvbnNlLCBibG9iczogcmVzcG9uc2UuYmxvYnMubWFwKChibG9iKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRhZ1ZhbHVlID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCgoX2EgPSBibG9iLnRhZ3MpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5ibG9iVGFnU2V0Lmxlbmd0aCkgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhZ1ZhbHVlID0gYmxvYi50YWdzLmJsb2JUYWdTZXRbMF0udmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYmxvYiksIHsgdGFnczogdG9UYWdzKGJsb2IudGFncyksIHRhZ1ZhbHVlIH0pO1xuICAgICAgICAgICAgICAgIH0pIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWRSZXNwb25zZTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIGZvciBDb250YWluZXJGaW5kQmxvYnNCeVRhZ3NTZWdtZW50UmVzcG9uc2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGFnRmlsdGVyU3FsRXhwcmVzc2lvbiAtICBUaGUgd2hlcmUgcGFyYW1ldGVyIGVuYWJsZXMgdGhlIGNhbGxlciB0byBxdWVyeSBibG9icyB3aG9zZSB0YWdzIG1hdGNoIGEgZ2l2ZW4gZXhwcmVzc2lvbi5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGdpdmVuIGV4cHJlc3Npb24gbXVzdCBldmFsdWF0ZSB0byB0cnVlIGZvciBhIGJsb2IgdG8gYmUgcmV0dXJuZWQgaW4gdGhlIHJlc3VsdHMuXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZVtPRGF0YSAtIEFCTkZdIGZpbHRlciBzeW50YXggcnVsZSBkZWZpbmVzIHRoZSBmb3JtYWwgZ3JhbW1hciBmb3IgdGhlIHZhbHVlIG9mIHRoZSB3aGVyZSBxdWVyeSBwYXJhbWV0ZXI7XG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvd2V2ZXIsIG9ubHkgYSBzdWJzZXQgb2YgdGhlIE9EYXRhIGZpbHRlciBzeW50YXggaXMgc3VwcG9ydGVkIGluIHRoZSBCbG9iIHNlcnZpY2UuXG4gICAgICogQHBhcmFtIG1hcmtlciAtIEEgc3RyaW5nIHZhbHVlIHRoYXQgaWRlbnRpZmllcyB0aGUgcG9ydGlvbiBvZlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbGlzdCBvZiBibG9icyB0byBiZSByZXR1cm5lZCB3aXRoIHRoZSBuZXh0IGxpc3Rpbmcgb3BlcmF0aW9uLiBUaGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uIHJldHVybnMgdGhlIGNvbnRpbnVhdGlvblRva2VuIHZhbHVlIHdpdGhpbiB0aGUgcmVzcG9uc2UgYm9keSBpZiB0aGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGluZyBvcGVyYXRpb24gZGlkIG5vdCByZXR1cm4gYWxsIGJsb2JzIHJlbWFpbmluZyB0byBiZSBsaXN0ZWRcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgY3VycmVudCBwYWdlLiBUaGUgY29udGludWF0aW9uVG9rZW4gdmFsdWUgY2FuIGJlIHVzZWQgYXMgdGhlIHZhbHVlIGZvclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWFya2VyIHBhcmFtZXRlciBpbiBhIHN1YnNlcXVlbnQgY2FsbCB0byByZXF1ZXN0IHRoZSBuZXh0IHBhZ2Ugb2YgbGlzdFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy4gVGhlIG1hcmtlciB2YWx1ZSBpcyBvcGFxdWUgdG8gdGhlIGNsaWVudC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gZmluZCBibG9icyBieSB0YWdzLlxuICAgICAqL1xuICAgIGZpbmRCbG9ic0J5VGFnc1NlZ21lbnRzKHRhZ0ZpbHRlclNxbEV4cHJlc3Npb25fMSwgbWFya2VyXzEpIHtcbiAgICAgICAgcmV0dXJuIHRzbGliLl9fYXN5bmNHZW5lcmF0b3IodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiogZmluZEJsb2JzQnlUYWdzU2VnbWVudHNfMSh0YWdGaWx0ZXJTcWxFeHByZXNzaW9uLCBtYXJrZXIsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICAgICAgbGV0IHJlc3BvbnNlO1xuICAgICAgICAgICAgaWYgKCEhbWFya2VyIHx8IG1hcmtlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IHlpZWxkIHRzbGliLl9fYXdhaXQodGhpcy5maW5kQmxvYnNCeVRhZ3NTZWdtZW50KHRhZ0ZpbHRlclNxbEV4cHJlc3Npb24sIG1hcmtlciwgb3B0aW9ucykpO1xuICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5ibG9icyA9IHJlc3BvbnNlLmJsb2JzIHx8IFtdO1xuICAgICAgICAgICAgICAgICAgICBtYXJrZXIgPSByZXNwb25zZS5jb250aW51YXRpb25Ub2tlbjtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgeWllbGQgdHNsaWIuX19hd2FpdChyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgfSB3aGlsZSAobWFya2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIGZvciBibG9icy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0YWdGaWx0ZXJTcWxFeHByZXNzaW9uIC0gIFRoZSB3aGVyZSBwYXJhbWV0ZXIgZW5hYmxlcyB0aGUgY2FsbGVyIHRvIHF1ZXJ5IGJsb2JzIHdob3NlIHRhZ3MgbWF0Y2ggYSBnaXZlbiBleHByZXNzaW9uLlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZ2l2ZW4gZXhwcmVzc2lvbiBtdXN0IGV2YWx1YXRlIHRvIHRydWUgZm9yIGEgYmxvYiB0byBiZSByZXR1cm5lZCBpbiB0aGUgcmVzdWx0cy5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlW09EYXRhIC0gQUJORl0gZmlsdGVyIHN5bnRheCBydWxlIGRlZmluZXMgdGhlIGZvcm1hbCBncmFtbWFyIGZvciB0aGUgdmFsdWUgb2YgdGhlIHdoZXJlIHF1ZXJ5IHBhcmFtZXRlcjtcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG93ZXZlciwgb25seSBhIHN1YnNldCBvZiB0aGUgT0RhdGEgZmlsdGVyIHN5bnRheCBpcyBzdXBwb3J0ZWQgaW4gdGhlIEJsb2Igc2VydmljZS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gZmluZEJsb2JzQnlUYWdzSXRlbXMuXG4gICAgICovXG4gICAgZmluZEJsb2JzQnlUYWdzSXRlbXModGFnRmlsdGVyU3FsRXhwcmVzc2lvbl8xKSB7XG4gICAgICAgIHJldHVybiB0c2xpYi5fX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24qIGZpbmRCbG9ic0J5VGFnc0l0ZW1zXzEodGFnRmlsdGVyU3FsRXhwcmVzc2lvbiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgICAgICB2YXIgX2EsIGVfMywgX2IsIF9jO1xuICAgICAgICAgICAgbGV0IG1hcmtlcjtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgX2QgPSB0cnVlLCBfZSA9IHRzbGliLl9fYXN5bmNWYWx1ZXModGhpcy5maW5kQmxvYnNCeVRhZ3NTZWdtZW50cyh0YWdGaWx0ZXJTcWxFeHByZXNzaW9uLCBtYXJrZXIsIG9wdGlvbnMpKSwgX2Y7IF9mID0geWllbGQgdHNsaWIuX19hd2FpdChfZS5uZXh0KCkpLCBfYSA9IF9mLmRvbmUsICFfYTsgX2QgPSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgIF9jID0gX2YudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIF9kID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlZ21lbnQgPSBfYztcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgdHNsaWIuX19hd2FpdCh5aWVsZCogdHNsaWIuX19hc3luY0RlbGVnYXRvcih0c2xpYi5fX2FzeW5jVmFsdWVzKHNlZ21lbnQuYmxvYnMpKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVfM18xKSB7IGVfMyA9IHsgZXJyb3I6IGVfM18xIH07IH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghX2QgJiYgIV9hICYmIChfYiA9IF9lLnJldHVybikpIHlpZWxkIHRzbGliLl9fYXdhaXQoX2IuY2FsbChfZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMykgdGhyb3cgZV8zLmVycm9yOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIGFzeW5jIGl0ZXJhYmxlIGl0ZXJhdG9yIHRvIGZpbmQgYWxsIGJsb2JzIHdpdGggc3BlY2lmaWVkIHRhZ1xuICAgICAqIHVuZGVyIHRoZSBzcGVjaWZpZWQgY29udGFpbmVyLlxuICAgICAqXG4gICAgICogLmJ5UGFnZSgpIHJldHVybnMgYW4gYXN5bmMgaXRlcmFibGUgaXRlcmF0b3IgdG8gbGlzdCB0aGUgYmxvYnMgaW4gcGFnZXMuXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIGBmb3IgYXdhaXRgIHN5bnRheDpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogbGV0IGkgPSAxO1xuICAgICAqIGZvciBhd2FpdCAoY29uc3QgYmxvYiBvZiBjb250YWluZXJDbGllbnQuZmluZEJsb2JzQnlUYWdzKFwidGFna2V5PSd0YWd2YWx1ZSdcIikpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKGBCbG9iICR7aSsrfTogJHtibG9iLm5hbWV9YCk7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBgaXRlci5uZXh0KClgOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBsZXQgaSA9IDE7XG4gICAgICogY29uc3QgaXRlciA9IGNvbnRhaW5lckNsaWVudC5maW5kQmxvYnNCeVRhZ3MoXCJ0YWdrZXk9J3RhZ3ZhbHVlJ1wiKTtcbiAgICAgKiBsZXQgYmxvYkl0ZW0gPSBhd2FpdCBpdGVyLm5leHQoKTtcbiAgICAgKiB3aGlsZSAoIWJsb2JJdGVtLmRvbmUpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKGBCbG9iICR7aSsrfTogJHtibG9iSXRlbS52YWx1ZS5uYW1lfWApO1xuICAgICAqICAgYmxvYkl0ZW0gPSBhd2FpdCBpdGVyLm5leHQoKTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIGBieVBhZ2UoKWA6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIHBhc3Npbmcgb3B0aW9uYWwgbWF4UGFnZVNpemUgaW4gdGhlIHBhZ2Ugc2V0dGluZ3NcbiAgICAgKiBsZXQgaSA9IDE7XG4gICAgICogZm9yIGF3YWl0IChjb25zdCByZXNwb25zZSBvZiBjb250YWluZXJDbGllbnQuZmluZEJsb2JzQnlUYWdzKFwidGFna2V5PSd0YWd2YWx1ZSdcIikuYnlQYWdlKHsgbWF4UGFnZVNpemU6IDIwIH0pKSB7XG4gICAgICogICBpZiAocmVzcG9uc2UuYmxvYnMpIHtcbiAgICAgKiAgICAgZm9yIChjb25zdCBibG9iIG9mIHJlc3BvbnNlLmJsb2JzKSB7XG4gICAgICogICAgICAgY29uc29sZS5sb2coYEJsb2IgJHtpKyt9OiAke2Jsb2IubmFtZX1gKTtcbiAgICAgKiAgICAgfVxuICAgICAqICAgfVxuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNpbmcgcGFnaW5nIHdpdGggYSBtYXJrZXI6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGxldCBpID0gMTtcbiAgICAgKiBsZXQgaXRlcmF0b3IgPSBjb250YWluZXJDbGllbnQuZmluZEJsb2JzQnlUYWdzKFwidGFna2V5PSd0YWd2YWx1ZSdcIikuYnlQYWdlKHsgbWF4UGFnZVNpemU6IDIgfSk7XG4gICAgICogbGV0IHJlc3BvbnNlID0gKGF3YWl0IGl0ZXJhdG9yLm5leHQoKSkudmFsdWU7XG4gICAgICpcbiAgICAgKiAvLyBQcmludHMgMiBibG9iIG5hbWVzXG4gICAgICogaWYgKHJlc3BvbnNlLmJsb2JzKSB7XG4gICAgICogICBmb3IgKGNvbnN0IGJsb2Igb2YgcmVzcG9uc2UuYmxvYnMpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coYEJsb2IgJHtpKyt9OiAke2Jsb2IubmFtZX1gKTtcbiAgICAgKiAgIH1cbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBHZXRzIG5leHQgbWFya2VyXG4gICAgICogbGV0IG1hcmtlciA9IHJlc3BvbnNlLmNvbnRpbnVhdGlvblRva2VuO1xuICAgICAqIC8vIFBhc3NpbmcgbmV4dCBtYXJrZXIgYXMgY29udGludWF0aW9uVG9rZW5cbiAgICAgKiBpdGVyYXRvciA9IGNvbnRhaW5lckNsaWVudFxuICAgICAqICAgLmZpbmRCbG9ic0J5VGFncyhcInRhZ2tleT0ndGFndmFsdWUnXCIpXG4gICAgICogICAuYnlQYWdlKHsgY29udGludWF0aW9uVG9rZW46IG1hcmtlciwgbWF4UGFnZVNpemU6IDEwIH0pO1xuICAgICAqIHJlc3BvbnNlID0gKGF3YWl0IGl0ZXJhdG9yLm5leHQoKSkudmFsdWU7XG4gICAgICpcbiAgICAgKiAvLyBQcmludHMgYmxvYiBuYW1lc1xuICAgICAqIGlmIChyZXNwb25zZS5ibG9icykge1xuICAgICAqICAgZm9yIChjb25zdCBibG9iIG9mIHJlc3BvbnNlLmJsb2JzKSB7XG4gICAgICogICAgICBjb25zb2xlLmxvZyhgQmxvYiAke2krK306ICR7YmxvYi5uYW1lfWApO1xuICAgICAqICAgfVxuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBwYXJhbSB0YWdGaWx0ZXJTcWxFeHByZXNzaW9uIC0gIFRoZSB3aGVyZSBwYXJhbWV0ZXIgZW5hYmxlcyB0aGUgY2FsbGVyIHRvIHF1ZXJ5IGJsb2JzIHdob3NlIHRhZ3MgbWF0Y2ggYSBnaXZlbiBleHByZXNzaW9uLlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZ2l2ZW4gZXhwcmVzc2lvbiBtdXN0IGV2YWx1YXRlIHRvIHRydWUgZm9yIGEgYmxvYiB0byBiZSByZXR1cm5lZCBpbiB0aGUgcmVzdWx0cy5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlW09EYXRhIC0gQUJORl0gZmlsdGVyIHN5bnRheCBydWxlIGRlZmluZXMgdGhlIGZvcm1hbCBncmFtbWFyIGZvciB0aGUgdmFsdWUgb2YgdGhlIHdoZXJlIHF1ZXJ5IHBhcmFtZXRlcjtcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG93ZXZlciwgb25seSBhIHN1YnNldCBvZiB0aGUgT0RhdGEgZmlsdGVyIHN5bnRheCBpcyBzdXBwb3J0ZWQgaW4gdGhlIEJsb2Igc2VydmljZS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gZmluZCBibG9icyBieSB0YWdzLlxuICAgICAqL1xuICAgIGZpbmRCbG9ic0J5VGFncyh0YWdGaWx0ZXJTcWxFeHByZXNzaW9uLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgLy8gQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIHRvIGl0ZXJhdGUgb3ZlciBibG9ic1xuICAgICAgICBjb25zdCBsaXN0U2VnbWVudE9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKTtcbiAgICAgICAgY29uc3QgaXRlciA9IHRoaXMuZmluZEJsb2JzQnlUYWdzSXRlbXModGFnRmlsdGVyU3FsRXhwcmVzc2lvbiwgbGlzdFNlZ21lbnRPcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVGhlIG5leHQgbWV0aG9kLCBwYXJ0IG9mIHRoZSBpdGVyYXRpb24gcHJvdG9jb2xcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgbmV4dCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlci5uZXh0KCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBUaGUgY29ubmVjdGlvbiB0byB0aGUgYXN5bmMgaXRlcmF0b3IsIHBhcnQgb2YgdGhlIGl0ZXJhdGlvbiBwcm90b2NvbFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogUmV0dXJuIGFuIEFzeW5jSXRlcmFibGVJdGVyYXRvciB0aGF0IHdvcmtzIGEgcGFnZSBhdCBhIHRpbWVcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgYnlQYWdlOiAoc2V0dGluZ3MgPSB7fSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmRCbG9ic0J5VGFnc1NlZ21lbnRzKHRhZ0ZpbHRlclNxbEV4cHJlc3Npb24sIHNldHRpbmdzLmNvbnRpbnVhdGlvblRva2VuLCBPYmplY3QuYXNzaWduKHsgbWF4UGFnZVNpemU6IHNldHRpbmdzLm1heFBhZ2VTaXplIH0sIGxpc3RTZWdtZW50T3B0aW9ucykpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIEdldCBBY2NvdW50IEluZm9ybWF0aW9uIG9wZXJhdGlvbiByZXR1cm5zIHRoZSBza3UgbmFtZSBhbmQgYWNjb3VudCBraW5kXG4gICAgICogZm9yIHRoZSBzcGVjaWZpZWQgYWNjb3VudC5cbiAgICAgKiBUaGUgR2V0IEFjY291bnQgSW5mb3JtYXRpb24gb3BlcmF0aW9uIGlzIGF2YWlsYWJsZSBvbiBzZXJ2aWNlIHZlcnNpb25zIGJlZ2lubmluZ1xuICAgICAqIHdpdGggdmVyc2lvbiAyMDE4LTAzLTI4LlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2dldC1hY2NvdW50LWluZm9ybWF0aW9uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gdGhlIFNlcnZpY2UgR2V0IEFjY291bnQgSW5mbyBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgdGhlIFNlcnZpY2UgR2V0IEFjY291bnQgSW5mbyBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgZ2V0QWNjb3VudEluZm8ob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQ29udGFpbmVyQ2xpZW50LWdldEFjY291bnRJbmZvXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuY29udGFpbmVyQ29udGV4dC5nZXRBY2NvdW50SW5mbyh7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZ2V0Q29udGFpbmVyTmFtZUZyb21VcmwoKSB7XG4gICAgICAgIGxldCBjb250YWluZXJOYW1lO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gIFVSTCBtYXkgbG9vayBsaWtlIHRoZSBmb2xsb3dpbmdcbiAgICAgICAgICAgIC8vIFwiaHR0cHM6Ly9teWFjY291bnQuYmxvYi5jb3JlLndpbmRvd3MubmV0L215Y29udGFpbmVyP3Nhc1N0cmluZ1wiO1xuICAgICAgICAgICAgLy8gXCJodHRwczovL215YWNjb3VudC5ibG9iLmNvcmUud2luZG93cy5uZXQvbXljb250YWluZXJcIjtcbiAgICAgICAgICAgIC8vIElQdjQvSVB2NiBhZGRyZXNzIGhvc3RzLCBFbmRwb2ludHMgLSBgaHR0cDovLzEyNy4wLjAuMToxMDAwMC9kZXZzdG9yZWFjY291bnQxL2NvbnRhaW5lcm5hbWVgXG4gICAgICAgICAgICAvLyBodHRwOi8vbG9jYWxob3N0OjEwMDAxL2RldnN0b3JlYWNjb3VudDEvY29udGFpbmVybmFtZVxuICAgICAgICAgICAgY29uc3QgcGFyc2VkVXJsID0gbmV3IFVSTCh0aGlzLnVybCk7XG4gICAgICAgICAgICBpZiAocGFyc2VkVXJsLmhvc3RuYW1lLnNwbGl0KFwiLlwiKVsxXSA9PT0gXCJibG9iXCIpIHtcbiAgICAgICAgICAgICAgICAvLyBcImh0dHBzOi8vbXlhY2NvdW50LmJsb2IuY29yZS53aW5kb3dzLm5ldC9jb250YWluZXJuYW1lXCIuXG4gICAgICAgICAgICAgICAgLy8gXCJodHRwczovL2N1c3RvbWRvbWFpbi5jb20vY29udGFpbmVybmFtZVwiLlxuICAgICAgICAgICAgICAgIC8vIC5nZXRQYXRoKCkgLT4gL2NvbnRhaW5lcm5hbWVcbiAgICAgICAgICAgICAgICBjb250YWluZXJOYW1lID0gcGFyc2VkVXJsLnBhdGhuYW1lLnNwbGl0KFwiL1wiKVsxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzSXBFbmRwb2ludFN0eWxlKHBhcnNlZFVybCkpIHtcbiAgICAgICAgICAgICAgICAvLyBJUHY0L0lQdjYgYWRkcmVzcyBob3N0cy4uLiBFeGFtcGxlIC0gaHR0cDovLzE5Mi4wLjAuMTA6MTAwMDEvZGV2c3RvcmVhY2NvdW50MS9jb250YWluZXJuYW1lXG4gICAgICAgICAgICAgICAgLy8gU2luZ2xlIHdvcmQgZG9tYWluIHdpdGhvdXQgYSBbZG90XSBpbiB0aGUgZW5kcG9pbnQuLi4gRXhhbXBsZSAtIGh0dHA6Ly9sb2NhbGhvc3Q6MTAwMDEvZGV2c3RvcmVhY2NvdW50MS9jb250YWluZXJuYW1lXG4gICAgICAgICAgICAgICAgLy8gLmdldFBhdGgoKSAtPiAvZGV2c3RvcmVhY2NvdW50MS9jb250YWluZXJuYW1lXG4gICAgICAgICAgICAgICAgY29udGFpbmVyTmFtZSA9IHBhcnNlZFVybC5wYXRobmFtZS5zcGxpdChcIi9cIilbMl07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBcImh0dHBzOi8vY3VzdG9tZG9tYWluLmNvbS9jb250YWluZXJuYW1lXCIuXG4gICAgICAgICAgICAgICAgLy8gLmdldFBhdGgoKSAtPiAvY29udGFpbmVybmFtZVxuICAgICAgICAgICAgICAgIGNvbnRhaW5lck5hbWUgPSBwYXJzZWRVcmwucGF0aG5hbWUuc3BsaXQoXCIvXCIpWzFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZGVjb2RlIHRoZSBlbmNvZGVkIGNvbnRhaW5lck5hbWUgLSB0byBnZXQgYWxsIHRoZSBzcGVjaWFsIGNoYXJhY3RlcnMgdGhhdCBtaWdodCBiZSBwcmVzZW50IGluIGl0XG4gICAgICAgICAgICBjb250YWluZXJOYW1lID0gZGVjb2RlVVJJQ29tcG9uZW50KGNvbnRhaW5lck5hbWUpO1xuICAgICAgICAgICAgaWYgKCFjb250YWluZXJOYW1lKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUHJvdmlkZWQgY29udGFpbmVyTmFtZSBpcyBpbnZhbGlkLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjb250YWluZXJOYW1lO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIGV4dHJhY3QgY29udGFpbmVyTmFtZSB3aXRoIHByb3ZpZGVkIGluZm9ybWF0aW9uLlwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBPbmx5IGF2YWlsYWJsZSBmb3IgQ29udGFpbmVyQ2xpZW50IGNvbnN0cnVjdGVkIHdpdGggYSBzaGFyZWQga2V5IGNyZWRlbnRpYWwuXG4gICAgICpcbiAgICAgKiBHZW5lcmF0ZXMgYSBCbG9iIENvbnRhaW5lciBTZXJ2aWNlIFNoYXJlZCBBY2Nlc3MgU2lnbmF0dXJlIChTQVMpIFVSSSBiYXNlZCBvbiB0aGUgY2xpZW50IHByb3BlcnRpZXNcbiAgICAgKiBhbmQgcGFyYW1ldGVycyBwYXNzZWQgaW4uIFRoZSBTQVMgaXMgc2lnbmVkIGJ5IHRoZSBzaGFyZWQga2V5IGNyZWRlbnRpYWwgb2YgdGhlIGNsaWVudC5cbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2NvbnN0cnVjdGluZy1hLXNlcnZpY2Utc2FzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIHBhcmFtZXRlcnMuXG4gICAgICogQHJldHVybnMgVGhlIFNBUyBVUkkgY29uc2lzdGluZyBvZiB0aGUgVVJJIHRvIHRoZSByZXNvdXJjZSByZXByZXNlbnRlZCBieSB0aGlzIGNsaWVudCwgZm9sbG93ZWQgYnkgdGhlIGdlbmVyYXRlZCBTQVMgdG9rZW4uXG4gICAgICovXG4gICAgZ2VuZXJhdGVTYXNVcmwob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIGlmICghKHRoaXMuY3JlZGVudGlhbCBpbnN0YW5jZW9mIFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiQ2FuIG9ubHkgZ2VuZXJhdGUgdGhlIFNBUyB3aGVuIHRoZSBjbGllbnQgaXMgaW5pdGlhbGl6ZWQgd2l0aCBhIHNoYXJlZCBrZXkgY3JlZGVudGlhbFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHNhcyA9IGdlbmVyYXRlQmxvYlNBU1F1ZXJ5UGFyYW1ldGVycyhPYmplY3QuYXNzaWduKHsgY29udGFpbmVyTmFtZTogdGhpcy5fY29udGFpbmVyTmFtZSB9LCBvcHRpb25zKSwgdGhpcy5jcmVkZW50aWFsKS50b1N0cmluZygpO1xuICAgICAgICAgICAgcmVzb2x2ZShhcHBlbmRUb1VSTFF1ZXJ5KHRoaXMudXJsLCBzYXMpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE9ubHkgYXZhaWxhYmxlIGZvciBDb250YWluZXJDbGllbnQgY29uc3RydWN0ZWQgd2l0aCBhIHNoYXJlZCBrZXkgY3JlZGVudGlhbC5cbiAgICAgKlxuICAgICAqIEdlbmVyYXRlcyBzdHJpbmcgdG8gc2lnbiBmb3IgYSBCbG9iIENvbnRhaW5lciBTZXJ2aWNlIFNoYXJlZCBBY2Nlc3MgU2lnbmF0dXJlIChTQVMpIFVSSVxuICAgICAqIGJhc2VkIG9uIHRoZSBjbGllbnQgcHJvcGVydGllcyBhbmQgcGFyYW1ldGVycyBwYXNzZWQgaW4uIFRoZSBTQVMgaXMgc2lnbmVkIGJ5IHRoZSBzaGFyZWQga2V5IGNyZWRlbnRpYWwgb2YgdGhlIGNsaWVudC5cbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2NvbnN0cnVjdGluZy1hLXNlcnZpY2Utc2FzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIHBhcmFtZXRlcnMuXG4gICAgICogQHJldHVybnMgVGhlIFNBUyBVUkkgY29uc2lzdGluZyBvZiB0aGUgVVJJIHRvIHRoZSByZXNvdXJjZSByZXByZXNlbnRlZCBieSB0aGlzIGNsaWVudCwgZm9sbG93ZWQgYnkgdGhlIGdlbmVyYXRlZCBTQVMgdG9rZW4uXG4gICAgICovXG4gICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhenVyZS9henVyZS1zZGsvdHMtbmFtaW5nLW9wdGlvbnMqL1xuICAgIGdlbmVyYXRlU2FzU3RyaW5nVG9TaWduKG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKCEodGhpcy5jcmVkZW50aWFsIGluc3RhbmNlb2YgU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkNhbiBvbmx5IGdlbmVyYXRlIHRoZSBTQVMgd2hlbiB0aGUgY2xpZW50IGlzIGluaXRpYWxpemVkIHdpdGggYSBzaGFyZWQga2V5IGNyZWRlbnRpYWxcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdlbmVyYXRlQmxvYlNBU1F1ZXJ5UGFyYW1ldGVyc0ludGVybmFsKE9iamVjdC5hc3NpZ24oeyBjb250YWluZXJOYW1lOiB0aGlzLl9jb250YWluZXJOYW1lIH0sIG9wdGlvbnMpLCB0aGlzLmNyZWRlbnRpYWwpLnN0cmluZ1RvU2lnbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIEJsb2JCYXRjaENsaWVudCBvYmplY3QgdG8gY29uZHVjdCBiYXRjaCBvcGVyYXRpb25zLlxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvYmxvYi1iYXRjaFxuICAgICAqXG4gICAgICogQHJldHVybnMgQSBuZXcgQmxvYkJhdGNoQ2xpZW50IG9iamVjdCBmb3IgdGhpcyBjb250YWluZXIuXG4gICAgICovXG4gICAgZ2V0QmxvYkJhdGNoQ2xpZW50KCkge1xuICAgICAgICByZXR1cm4gbmV3IEJsb2JCYXRjaENsaWVudCh0aGlzLnVybCwgdGhpcy5waXBlbGluZSk7XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogT05MWSBBVkFJTEFCTEUgSU4gTk9ERS5KUyBSVU5USU1FLlxuICpcbiAqIFRoaXMgaXMgYSBoZWxwZXIgY2xhc3MgdG8gY29uc3RydWN0IGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSBhbiBBY2NvdW50U0FTLiBTZXR0aW5nIGEgdmFsdWVcbiAqIHRvIHRydWUgbWVhbnMgdGhhdCBhbnkgU0FTIHdoaWNoIHVzZXMgdGhlc2UgcGVybWlzc2lvbnMgd2lsbCBncmFudCBwZXJtaXNzaW9ucyBmb3IgdGhhdCBvcGVyYXRpb24uIE9uY2UgYWxsIHRoZVxuICogdmFsdWVzIGFyZSBzZXQsIHRoaXMgc2hvdWxkIGJlIHNlcmlhbGl6ZWQgd2l0aCB0b1N0cmluZyBhbmQgc2V0IGFzIHRoZSBwZXJtaXNzaW9ucyBmaWVsZCBvbiBhblxuICoge0BsaW5rIEFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXN9IG9iamVjdC4gSXQgaXMgcG9zc2libGUgdG8gY29uc3RydWN0IHRoZSBwZXJtaXNzaW9ucyBzdHJpbmcgd2l0aG91dCB0aGlzIGNsYXNzLCBidXRcbiAqIHRoZSBvcmRlciBvZiB0aGUgcGVybWlzc2lvbnMgaXMgcGFydGljdWxhciBhbmQgdGhpcyBjbGFzcyBndWFyYW50ZWVzIGNvcnJlY3RuZXNzLlxuICovXG5jbGFzcyBBY2NvdW50U0FTUGVybWlzc2lvbnMge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAvKipcbiAgICAgICAgICogUGVybWlzc2lvbiB0byByZWFkIHJlc291cmNlcyBhbmQgbGlzdCBxdWV1ZXMgYW5kIHRhYmxlcyBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5yZWFkID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQZXJtaXNzaW9uIHRvIHdyaXRlIHJlc291cmNlcyBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy53cml0ZSA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogUGVybWlzc2lvbiB0byBkZWxldGUgYmxvYnMgYW5kIGZpbGVzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmRlbGV0ZSA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogUGVybWlzc2lvbiB0byBkZWxldGUgdmVyc2lvbnMgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZGVsZXRlVmVyc2lvbiA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogUGVybWlzc2lvbiB0byBsaXN0IGJsb2IgY29udGFpbmVycywgYmxvYnMsIHNoYXJlcywgZGlyZWN0b3JpZXMsIGFuZCBmaWxlcyBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5saXN0ID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQZXJtaXNzaW9uIHRvIGFkZCBtZXNzYWdlcywgdGFibGUgZW50aXRpZXMsIGFuZCBhcHBlbmQgdG8gYmxvYnMgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuYWRkID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQZXJtaXNzaW9uIHRvIGNyZWF0ZSBibG9icyBhbmQgZmlsZXMgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY3JlYXRlID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQZXJtaXNzaW9ucyB0byB1cGRhdGUgbWVzc2FnZXMgYW5kIHRhYmxlIGVudGl0aWVzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnVwZGF0ZSA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogUGVybWlzc2lvbiB0byBnZXQgYW5kIGRlbGV0ZSBtZXNzYWdlcyBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5wcm9jZXNzID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjZmllcyBUYWcgYWNjZXNzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnRhZyA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogUGVybWlzc2lvbiB0byBmaWx0ZXIgYmxvYnMuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmZpbHRlciA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogUGVybWlzc2lvbiB0byBzZXQgaW1tdXRhYmlsaXR5IHBvbGljeS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuc2V0SW1tdXRhYmlsaXR5UG9saWN5ID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgdGhhdCBQZXJtYW5lbnQgRGVsZXRlIGlzIHBlcm1pdHRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMucGVybWFuZW50RGVsZXRlID0gZmFsc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFBhcnNlIGluaXRpYWxpemVzIHRoZSBBY2NvdW50U0FTUGVybWlzc2lvbnMgZmllbGRzIGZyb20gYSBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGVybWlzc2lvbnMgLVxuICAgICAqL1xuICAgIHN0YXRpYyBwYXJzZShwZXJtaXNzaW9ucykge1xuICAgICAgICBjb25zdCBhY2NvdW50U0FTUGVybWlzc2lvbnMgPSBuZXcgQWNjb3VudFNBU1Blcm1pc3Npb25zKCk7XG4gICAgICAgIGZvciAoY29uc3QgYyBvZiBwZXJtaXNzaW9ucykge1xuICAgICAgICAgICAgc3dpdGNoIChjKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcInJcIjpcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudFNBU1Blcm1pc3Npb25zLnJlYWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwid1wiOlxuICAgICAgICAgICAgICAgICAgICBhY2NvdW50U0FTUGVybWlzc2lvbnMud3JpdGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiZFwiOlxuICAgICAgICAgICAgICAgICAgICBhY2NvdW50U0FTUGVybWlzc2lvbnMuZGVsZXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInhcIjpcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudFNBU1Blcm1pc3Npb25zLmRlbGV0ZVZlcnNpb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwibFwiOlxuICAgICAgICAgICAgICAgICAgICBhY2NvdW50U0FTUGVybWlzc2lvbnMubGlzdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJhXCI6XG4gICAgICAgICAgICAgICAgICAgIGFjY291bnRTQVNQZXJtaXNzaW9ucy5hZGQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiY1wiOlxuICAgICAgICAgICAgICAgICAgICBhY2NvdW50U0FTUGVybWlzc2lvbnMuY3JlYXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInVcIjpcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudFNBU1Blcm1pc3Npb25zLnVwZGF0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJwXCI6XG4gICAgICAgICAgICAgICAgICAgIGFjY291bnRTQVNQZXJtaXNzaW9ucy5wcm9jZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInRcIjpcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudFNBU1Blcm1pc3Npb25zLnRhZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJmXCI6XG4gICAgICAgICAgICAgICAgICAgIGFjY291bnRTQVNQZXJtaXNzaW9ucy5maWx0ZXIgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiaVwiOlxuICAgICAgICAgICAgICAgICAgICBhY2NvdW50U0FTUGVybWlzc2lvbnMuc2V0SW1tdXRhYmlsaXR5UG9saWN5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInlcIjpcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudFNBU1Blcm1pc3Npb25zLnBlcm1hbmVudERlbGV0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBJbnZhbGlkIHBlcm1pc3Npb24gY2hhcmFjdGVyOiAke2N9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjY291bnRTQVNQZXJtaXNzaW9ucztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHtAbGluayBBY2NvdW50U0FTUGVybWlzc2lvbnN9IGZyb20gYSByYXcgb2JqZWN0IHdoaWNoIGNvbnRhaW5zIHNhbWUga2V5cyBhcyBpdFxuICAgICAqIGFuZCBib29sZWFuIHZhbHVlcyBmb3IgdGhlbS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwZXJtaXNzaW9uTGlrZSAtXG4gICAgICovXG4gICAgc3RhdGljIGZyb20ocGVybWlzc2lvbkxpa2UpIHtcbiAgICAgICAgY29uc3QgYWNjb3VudFNBU1Blcm1pc3Npb25zID0gbmV3IEFjY291bnRTQVNQZXJtaXNzaW9ucygpO1xuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2UucmVhZCkge1xuICAgICAgICAgICAgYWNjb3VudFNBU1Blcm1pc3Npb25zLnJlYWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS53cml0ZSkge1xuICAgICAgICAgICAgYWNjb3VudFNBU1Blcm1pc3Npb25zLndyaXRlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2UuZGVsZXRlKSB7XG4gICAgICAgICAgICBhY2NvdW50U0FTUGVybWlzc2lvbnMuZGVsZXRlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2UuZGVsZXRlVmVyc2lvbikge1xuICAgICAgICAgICAgYWNjb3VudFNBU1Blcm1pc3Npb25zLmRlbGV0ZVZlcnNpb24gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS5maWx0ZXIpIHtcbiAgICAgICAgICAgIGFjY291bnRTQVNQZXJtaXNzaW9ucy5maWx0ZXIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS50YWcpIHtcbiAgICAgICAgICAgIGFjY291bnRTQVNQZXJtaXNzaW9ucy50YWcgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS5saXN0KSB7XG4gICAgICAgICAgICBhY2NvdW50U0FTUGVybWlzc2lvbnMubGlzdCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLmFkZCkge1xuICAgICAgICAgICAgYWNjb3VudFNBU1Blcm1pc3Npb25zLmFkZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLmNyZWF0ZSkge1xuICAgICAgICAgICAgYWNjb3VudFNBU1Blcm1pc3Npb25zLmNyZWF0ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLnVwZGF0ZSkge1xuICAgICAgICAgICAgYWNjb3VudFNBU1Blcm1pc3Npb25zLnVwZGF0ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLnByb2Nlc3MpIHtcbiAgICAgICAgICAgIGFjY291bnRTQVNQZXJtaXNzaW9ucy5wcm9jZXNzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2Uuc2V0SW1tdXRhYmlsaXR5UG9saWN5KSB7XG4gICAgICAgICAgICBhY2NvdW50U0FTUGVybWlzc2lvbnMuc2V0SW1tdXRhYmlsaXR5UG9saWN5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2UucGVybWFuZW50RGVsZXRlKSB7XG4gICAgICAgICAgICBhY2NvdW50U0FTUGVybWlzc2lvbnMucGVybWFuZW50RGVsZXRlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjb3VudFNBU1Blcm1pc3Npb25zO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQcm9kdWNlcyB0aGUgU0FTIHBlcm1pc3Npb25zIHN0cmluZyBmb3IgYW4gQXp1cmUgU3RvcmFnZSBhY2NvdW50LlxuICAgICAqIENhbGwgdGhpcyBtZXRob2QgdG8gc2V0IEFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMgUGVybWlzc2lvbnMgZmllbGQuXG4gICAgICpcbiAgICAgKiBVc2luZyB0aGlzIG1ldGhvZCB3aWxsIGd1YXJhbnRlZSB0aGUgcmVzb3VyY2UgdHlwZXMgYXJlIGluXG4gICAgICogYW4gb3JkZXIgYWNjZXB0ZWQgYnkgdGhlIHNlcnZpY2UuXG4gICAgICpcbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9jb25zdHJ1Y3RpbmctYW4tYWNjb3VudC1zYXNcbiAgICAgKlxuICAgICAqL1xuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICAvLyBUaGUgb3JkZXIgb2YgdGhlIGNoYXJhY3RlcnMgc2hvdWxkIGJlIGFzIHNwZWNpZmllZCBoZXJlIHRvIGVuc3VyZSBjb3JyZWN0bmVzczpcbiAgICAgICAgLy8gaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2NvbnN0cnVjdGluZy1hbi1hY2NvdW50LXNhc1xuICAgICAgICAvLyBVc2UgYSBzdHJpbmcgYXJyYXkgaW5zdGVhZCBvZiBzdHJpbmcgY29uY2F0ZW5hdGluZyArPSBvcGVyYXRvciBmb3IgcGVyZm9ybWFuY2VcbiAgICAgICAgY29uc3QgcGVybWlzc2lvbnMgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMucmVhZCkge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcInJcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMud3JpdGUpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJ3XCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmRlbGV0ZSkge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcImRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZGVsZXRlVmVyc2lvbikge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcInhcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwiZlwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy50YWcpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJ0XCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmxpc3QpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJsXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmFkZCkge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcImFcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY3JlYXRlKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwiY1wiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy51cGRhdGUpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJ1XCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnByb2Nlc3MpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJwXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNldEltbXV0YWJpbGl0eVBvbGljeSkge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcImlcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucGVybWFuZW50RGVsZXRlKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwieVwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGVybWlzc2lvbnMuam9pbihcIlwiKTtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBPTkxZIEFWQUlMQUJMRSBJTiBOT0RFLkpTIFJVTlRJTUUuXG4gKlxuICogVGhpcyBpcyBhIGhlbHBlciBjbGFzcyB0byBjb25zdHJ1Y3QgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSByZXNvdXJjZXMgYWNjZXNzaWJsZSBieSBhbiBBY2NvdW50U0FTLiBTZXR0aW5nIGEgdmFsdWVcbiAqIHRvIHRydWUgbWVhbnMgdGhhdCBhbnkgU0FTIHdoaWNoIHVzZXMgdGhlc2UgcGVybWlzc2lvbnMgd2lsbCBncmFudCBhY2Nlc3MgdG8gdGhhdCByZXNvdXJjZSB0eXBlLiBPbmNlIGFsbCB0aGVcbiAqIHZhbHVlcyBhcmUgc2V0LCB0aGlzIHNob3VsZCBiZSBzZXJpYWxpemVkIHdpdGggdG9TdHJpbmcgYW5kIHNldCBhcyB0aGUgcmVzb3VyY2VzIGZpZWxkIG9uIGFuXG4gKiB7QGxpbmsgQWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlc30gb2JqZWN0LiBJdCBpcyBwb3NzaWJsZSB0byBjb25zdHJ1Y3QgdGhlIHJlc291cmNlcyBzdHJpbmcgd2l0aG91dCB0aGlzIGNsYXNzLCBidXRcbiAqIHRoZSBvcmRlciBvZiB0aGUgcmVzb3VyY2VzIGlzIHBhcnRpY3VsYXIgYW5kIHRoaXMgY2xhc3MgZ3VhcmFudGVlcyBjb3JyZWN0bmVzcy5cbiAqL1xuY2xhc3MgQWNjb3VudFNBU1Jlc291cmNlVHlwZXMge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAvKipcbiAgICAgICAgICogUGVybWlzc2lvbiB0byBhY2Nlc3Mgc2VydmljZSBsZXZlbCBBUElzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnNlcnZpY2UgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFBlcm1pc3Npb24gdG8gYWNjZXNzIGNvbnRhaW5lciBsZXZlbCBBUElzIChCbG9iIENvbnRhaW5lcnMsIFRhYmxlcywgUXVldWVzLCBGaWxlIFNoYXJlcykgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY29udGFpbmVyID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQZXJtaXNzaW9uIHRvIGFjY2VzcyBvYmplY3QgbGV2ZWwgQVBJcyAoQmxvYnMsIFRhYmxlIEVudGl0aWVzLCBRdWV1ZSBNZXNzYWdlcywgRmlsZXMpIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLm9iamVjdCA9IGZhbHNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIHtAbGluayBBY2NvdW50U0FTUmVzb3VyY2VUeXBlc30gZnJvbSB0aGUgc3BlY2lmaWVkIHJlc291cmNlIHR5cGVzIHN0cmluZy4gVGhpcyBtZXRob2Qgd2lsbCB0aHJvdyBhblxuICAgICAqIEVycm9yIGlmIGl0IGVuY291bnRlcnMgYSBjaGFyYWN0ZXIgdGhhdCBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGEgdmFsaWQgcmVzb3VyY2UgdHlwZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByZXNvdXJjZVR5cGVzIC1cbiAgICAgKi9cbiAgICBzdGF0aWMgcGFyc2UocmVzb3VyY2VUeXBlcykge1xuICAgICAgICBjb25zdCBhY2NvdW50U0FTUmVzb3VyY2VUeXBlcyA9IG5ldyBBY2NvdW50U0FTUmVzb3VyY2VUeXBlcygpO1xuICAgICAgICBmb3IgKGNvbnN0IGMgb2YgcmVzb3VyY2VUeXBlcykge1xuICAgICAgICAgICAgc3dpdGNoIChjKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNcIjpcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudFNBU1Jlc291cmNlVHlwZXMuc2VydmljZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJjXCI6XG4gICAgICAgICAgICAgICAgICAgIGFjY291bnRTQVNSZXNvdXJjZVR5cGVzLmNvbnRhaW5lciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJvXCI6XG4gICAgICAgICAgICAgICAgICAgIGFjY291bnRTQVNSZXNvdXJjZVR5cGVzLm9iamVjdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBJbnZhbGlkIHJlc291cmNlIHR5cGU6ICR7Y31gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjb3VudFNBU1Jlc291cmNlVHlwZXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIHRoZSBnaXZlbiByZXNvdXJjZSB0eXBlcyB0byBhIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2NvbnN0cnVjdGluZy1hbi1hY2NvdW50LXNhc1xuICAgICAqXG4gICAgICovXG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIGNvbnN0IHJlc291cmNlVHlwZXMgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuc2VydmljZSkge1xuICAgICAgICAgICAgcmVzb3VyY2VUeXBlcy5wdXNoKFwic1wiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jb250YWluZXIpIHtcbiAgICAgICAgICAgIHJlc291cmNlVHlwZXMucHVzaChcImNcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub2JqZWN0KSB7XG4gICAgICAgICAgICByZXNvdXJjZVR5cGVzLnB1c2goXCJvXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNvdXJjZVR5cGVzLmpvaW4oXCJcIik7XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogT05MWSBBVkFJTEFCTEUgSU4gTk9ERS5KUyBSVU5USU1FLlxuICpcbiAqIFRoaXMgaXMgYSBoZWxwZXIgY2xhc3MgdG8gY29uc3RydWN0IGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgc2VydmljZXMgYWNjZXNzaWJsZSBieSBhbiBBY2NvdW50U0FTLiBTZXR0aW5nIGEgdmFsdWVcbiAqIHRvIHRydWUgbWVhbnMgdGhhdCBhbnkgU0FTIHdoaWNoIHVzZXMgdGhlc2UgcGVybWlzc2lvbnMgd2lsbCBncmFudCBhY2Nlc3MgdG8gdGhhdCBzZXJ2aWNlLiBPbmNlIGFsbCB0aGVcbiAqIHZhbHVlcyBhcmUgc2V0LCB0aGlzIHNob3VsZCBiZSBzZXJpYWxpemVkIHdpdGggdG9TdHJpbmcgYW5kIHNldCBhcyB0aGUgc2VydmljZXMgZmllbGQgb24gYW5cbiAqIHtAbGluayBBY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzfSBvYmplY3QuIEl0IGlzIHBvc3NpYmxlIHRvIGNvbnN0cnVjdCB0aGUgc2VydmljZXMgc3RyaW5nIHdpdGhvdXQgdGhpcyBjbGFzcywgYnV0XG4gKiB0aGUgb3JkZXIgb2YgdGhlIHNlcnZpY2VzIGlzIHBhcnRpY3VsYXIgYW5kIHRoaXMgY2xhc3MgZ3VhcmFudGVlcyBjb3JyZWN0bmVzcy5cbiAqL1xuY2xhc3MgQWNjb3VudFNBU1NlcnZpY2VzIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFBlcm1pc3Npb24gdG8gYWNjZXNzIGJsb2IgcmVzb3VyY2VzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmJsb2IgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFBlcm1pc3Npb24gdG8gYWNjZXNzIGZpbGUgcmVzb3VyY2VzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmZpbGUgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFBlcm1pc3Npb24gdG8gYWNjZXNzIHF1ZXVlIHJlc291cmNlcyBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5xdWV1ZSA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogUGVybWlzc2lvbiB0byBhY2Nlc3MgdGFibGUgcmVzb3VyY2VzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnRhYmxlID0gZmFsc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4ge0BsaW5rIEFjY291bnRTQVNTZXJ2aWNlc30gZnJvbSB0aGUgc3BlY2lmaWVkIHNlcnZpY2VzIHN0cmluZy4gVGhpcyBtZXRob2Qgd2lsbCB0aHJvdyBhblxuICAgICAqIEVycm9yIGlmIGl0IGVuY291bnRlcnMgYSBjaGFyYWN0ZXIgdGhhdCBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGEgdmFsaWQgc2VydmljZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzZXJ2aWNlcyAtXG4gICAgICovXG4gICAgc3RhdGljIHBhcnNlKHNlcnZpY2VzKSB7XG4gICAgICAgIGNvbnN0IGFjY291bnRTQVNTZXJ2aWNlcyA9IG5ldyBBY2NvdW50U0FTU2VydmljZXMoKTtcbiAgICAgICAgZm9yIChjb25zdCBjIG9mIHNlcnZpY2VzKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGMpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwiYlwiOlxuICAgICAgICAgICAgICAgICAgICBhY2NvdW50U0FTU2VydmljZXMuYmxvYiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJmXCI6XG4gICAgICAgICAgICAgICAgICAgIGFjY291bnRTQVNTZXJ2aWNlcy5maWxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInFcIjpcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudFNBU1NlcnZpY2VzLnF1ZXVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInRcIjpcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudFNBU1NlcnZpY2VzLnRhYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEludmFsaWQgc2VydmljZSBjaGFyYWN0ZXI6ICR7Y31gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjb3VudFNBU1NlcnZpY2VzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyB0aGUgZ2l2ZW4gc2VydmljZXMgdG8gYSBzdHJpbmcuXG4gICAgICpcbiAgICAgKi9cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgY29uc3Qgc2VydmljZXMgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuYmxvYikge1xuICAgICAgICAgICAgc2VydmljZXMucHVzaChcImJcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMudGFibGUpIHtcbiAgICAgICAgICAgIHNlcnZpY2VzLnB1c2goXCJ0XCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnF1ZXVlKSB7XG4gICAgICAgICAgICBzZXJ2aWNlcy5wdXNoKFwicVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5maWxlKSB7XG4gICAgICAgICAgICBzZXJ2aWNlcy5wdXNoKFwiZlwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VydmljZXMuam9pbihcIlwiKTtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBPTkxZIEFWQUlMQUJMRSBJTiBOT0RFLkpTIFJVTlRJTUUuXG4gKlxuICogR2VuZXJhdGVzIGEge0BsaW5rIFNBU1F1ZXJ5UGFyYW1ldGVyc30gb2JqZWN0IHdoaWNoIGNvbnRhaW5zIGFsbCBTQVMgcXVlcnkgcGFyYW1ldGVycyBuZWVkZWQgdG8gbWFrZSBhbiBhY3R1YWxcbiAqIFJFU1QgcmVxdWVzdC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9jb25zdHJ1Y3RpbmctYW4tYWNjb3VudC1zYXNcbiAqXG4gKiBAcGFyYW0gYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcyAtXG4gKiBAcGFyYW0gc2hhcmVkS2V5Q3JlZGVudGlhbCAtXG4gKi9cbmZ1bmN0aW9uIGdlbmVyYXRlQWNjb3VudFNBU1F1ZXJ5UGFyYW1ldGVycyhhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLCBzaGFyZWRLZXlDcmVkZW50aWFsKSB7XG4gICAgcmV0dXJuIGdlbmVyYXRlQWNjb3VudFNBU1F1ZXJ5UGFyYW1ldGVyc0ludGVybmFsKGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMsIHNoYXJlZEtleUNyZWRlbnRpYWwpXG4gICAgICAgIC5zYXNRdWVyeVBhcmFtZXRlcnM7XG59XG5mdW5jdGlvbiBnZW5lcmF0ZUFjY291bnRTQVNRdWVyeVBhcmFtZXRlcnNJbnRlcm5hbChhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLCBzaGFyZWRLZXlDcmVkZW50aWFsKSB7XG4gICAgY29uc3QgdmVyc2lvbiA9IGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMudmVyc2lvblxuICAgICAgICA/IGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMudmVyc2lvblxuICAgICAgICA6IFNFUlZJQ0VfVkVSU0lPTjtcbiAgICBpZiAoYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucyAmJlxuICAgICAgICBhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zLnNldEltbXV0YWJpbGl0eVBvbGljeSAmJlxuICAgICAgICB2ZXJzaW9uIDwgXCIyMDIwLTA4LTA0XCIpIHtcbiAgICAgICAgdGhyb3cgUmFuZ2VFcnJvcihcIid2ZXJzaW9uJyBtdXN0IGJlID49ICcyMDIwLTA4LTA0JyB3aGVuIHByb3ZpZGVkICdpJyBwZXJtaXNzaW9uLlwiKTtcbiAgICB9XG4gICAgaWYgKGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMgJiZcbiAgICAgICAgYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucy5kZWxldGVWZXJzaW9uICYmXG4gICAgICAgIHZlcnNpb24gPCBcIjIwMTktMTAtMTBcIikge1xuICAgICAgICB0aHJvdyBSYW5nZUVycm9yKFwiJ3ZlcnNpb24nIG11c3QgYmUgPj0gJzIwMTktMTAtMTAnIHdoZW4gcHJvdmlkZWQgJ3gnIHBlcm1pc3Npb24uXCIpO1xuICAgIH1cbiAgICBpZiAoYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucyAmJlxuICAgICAgICBhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zLnBlcm1hbmVudERlbGV0ZSAmJlxuICAgICAgICB2ZXJzaW9uIDwgXCIyMDE5LTEwLTEwXCIpIHtcbiAgICAgICAgdGhyb3cgUmFuZ2VFcnJvcihcIid2ZXJzaW9uJyBtdXN0IGJlID49ICcyMDE5LTEwLTEwJyB3aGVuIHByb3ZpZGVkICd5JyBwZXJtaXNzaW9uLlwiKTtcbiAgICB9XG4gICAgaWYgKGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMgJiZcbiAgICAgICAgYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucy50YWcgJiZcbiAgICAgICAgdmVyc2lvbiA8IFwiMjAxOS0xMi0xMlwiKSB7XG4gICAgICAgIHRocm93IFJhbmdlRXJyb3IoXCIndmVyc2lvbicgbXVzdCBiZSA+PSAnMjAxOS0xMi0xMicgd2hlbiBwcm92aWRlZCAndCcgcGVybWlzc2lvbi5cIik7XG4gICAgfVxuICAgIGlmIChhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zICYmXG4gICAgICAgIGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMuZmlsdGVyICYmXG4gICAgICAgIHZlcnNpb24gPCBcIjIwMTktMTItMTJcIikge1xuICAgICAgICB0aHJvdyBSYW5nZUVycm9yKFwiJ3ZlcnNpb24nIG11c3QgYmUgPj0gJzIwMTktMTItMTInIHdoZW4gcHJvdmlkZWQgJ2YnIHBlcm1pc3Npb24uXCIpO1xuICAgIH1cbiAgICBpZiAoYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5lbmNyeXB0aW9uU2NvcGUgJiYgdmVyc2lvbiA8IFwiMjAyMC0xMi0wNlwiKSB7XG4gICAgICAgIHRocm93IFJhbmdlRXJyb3IoXCIndmVyc2lvbicgbXVzdCBiZSA+PSAnMjAyMC0xMi0wNicgd2hlbiBwcm92aWRlZCAnZW5jcnlwdGlvblNjb3BlJyBpbiBTQVMuXCIpO1xuICAgIH1cbiAgICBjb25zdCBwYXJzZWRQZXJtaXNzaW9ucyA9IEFjY291bnRTQVNQZXJtaXNzaW9ucy5wYXJzZShhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zLnRvU3RyaW5nKCkpO1xuICAgIGNvbnN0IHBhcnNlZFNlcnZpY2VzID0gQWNjb3VudFNBU1NlcnZpY2VzLnBhcnNlKGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMuc2VydmljZXMpLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgcGFyc2VkUmVzb3VyY2VUeXBlcyA9IEFjY291bnRTQVNSZXNvdXJjZVR5cGVzLnBhcnNlKGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMucmVzb3VyY2VUeXBlcykudG9TdHJpbmcoKTtcbiAgICBsZXQgc3RyaW5nVG9TaWduO1xuICAgIGlmICh2ZXJzaW9uID49IFwiMjAyMC0xMi0wNlwiKSB7XG4gICAgICAgIHN0cmluZ1RvU2lnbiA9IFtcbiAgICAgICAgICAgIHNoYXJlZEtleUNyZWRlbnRpYWwuYWNjb3VudE5hbWUsXG4gICAgICAgICAgICBwYXJzZWRQZXJtaXNzaW9ucyxcbiAgICAgICAgICAgIHBhcnNlZFNlcnZpY2VzLFxuICAgICAgICAgICAgcGFyc2VkUmVzb3VyY2VUeXBlcyxcbiAgICAgICAgICAgIGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMuc3RhcnRzT25cbiAgICAgICAgICAgICAgICA/IHRydW5jYXRlZElTTzgwNjFEYXRlKGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMuc3RhcnRzT24sIGZhbHNlKVxuICAgICAgICAgICAgICAgIDogXCJcIixcbiAgICAgICAgICAgIHRydW5jYXRlZElTTzgwNjFEYXRlKGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMuZXhwaXJlc09uLCBmYWxzZSksXG4gICAgICAgICAgICBhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLmlwUmFuZ2UgPyBpcFJhbmdlVG9TdHJpbmcoYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5pcFJhbmdlKSA6IFwiXCIsXG4gICAgICAgICAgICBhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLnByb3RvY29sID8gYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5wcm90b2NvbCA6IFwiXCIsXG4gICAgICAgICAgICB2ZXJzaW9uLFxuICAgICAgICAgICAgYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5lbmNyeXB0aW9uU2NvcGUgPyBhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLmVuY3J5cHRpb25TY29wZSA6IFwiXCIsXG4gICAgICAgICAgICBcIlwiLCAvLyBBY2NvdW50IFNBUyByZXF1aXJlcyBhbiBhZGRpdGlvbmFsIG5ld2xpbmUgY2hhcmFjdGVyXG4gICAgICAgIF0uam9pbihcIlxcblwiKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHN0cmluZ1RvU2lnbiA9IFtcbiAgICAgICAgICAgIHNoYXJlZEtleUNyZWRlbnRpYWwuYWNjb3VudE5hbWUsXG4gICAgICAgICAgICBwYXJzZWRQZXJtaXNzaW9ucyxcbiAgICAgICAgICAgIHBhcnNlZFNlcnZpY2VzLFxuICAgICAgICAgICAgcGFyc2VkUmVzb3VyY2VUeXBlcyxcbiAgICAgICAgICAgIGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMuc3RhcnRzT25cbiAgICAgICAgICAgICAgICA/IHRydW5jYXRlZElTTzgwNjFEYXRlKGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMuc3RhcnRzT24sIGZhbHNlKVxuICAgICAgICAgICAgICAgIDogXCJcIixcbiAgICAgICAgICAgIHRydW5jYXRlZElTTzgwNjFEYXRlKGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMuZXhwaXJlc09uLCBmYWxzZSksXG4gICAgICAgICAgICBhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLmlwUmFuZ2UgPyBpcFJhbmdlVG9TdHJpbmcoYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5pcFJhbmdlKSA6IFwiXCIsXG4gICAgICAgICAgICBhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLnByb3RvY29sID8gYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5wcm90b2NvbCA6IFwiXCIsXG4gICAgICAgICAgICB2ZXJzaW9uLFxuICAgICAgICAgICAgXCJcIiwgLy8gQWNjb3VudCBTQVMgcmVxdWlyZXMgYW4gYWRkaXRpb25hbCBuZXdsaW5lIGNoYXJhY3RlclxuICAgICAgICBdLmpvaW4oXCJcXG5cIik7XG4gICAgfVxuICAgIGNvbnN0IHNpZ25hdHVyZSA9IHNoYXJlZEtleUNyZWRlbnRpYWwuY29tcHV0ZUhNQUNTSEEyNTYoc3RyaW5nVG9TaWduKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBzYXNRdWVyeVBhcmFtZXRlcnM6IG5ldyBTQVNRdWVyeVBhcmFtZXRlcnModmVyc2lvbiwgc2lnbmF0dXJlLCBwYXJzZWRQZXJtaXNzaW9ucy50b1N0cmluZygpLCBwYXJzZWRTZXJ2aWNlcywgcGFyc2VkUmVzb3VyY2VUeXBlcywgYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5wcm90b2NvbCwgYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5zdGFydHNPbiwgYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5leHBpcmVzT24sIGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMuaXBSYW5nZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLmVuY3J5cHRpb25TY29wZSksXG4gICAgICAgIHN0cmluZ1RvU2lnbjogc3RyaW5nVG9TaWduLFxuICAgIH07XG59XG5cbi8qKlxuICogQSBCbG9iU2VydmljZUNsaWVudCByZXByZXNlbnRzIGEgQ2xpZW50IHRvIHRoZSBBenVyZSBTdG9yYWdlIEJsb2Igc2VydmljZSBhbGxvd2luZyB5b3VcbiAqIHRvIG1hbmlwdWxhdGUgYmxvYiBjb250YWluZXJzLlxuICovXG5jbGFzcyBCbG9iU2VydmljZUNsaWVudCBleHRlbmRzIFN0b3JhZ2VDbGllbnQge1xuICAgIC8qKlxuICAgICAqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBCbG9iU2VydmljZUNsaWVudCBmcm9tIGNvbm5lY3Rpb24gc3RyaW5nLlxuICAgICAqXG4gICAgICogQHBhcmFtIGNvbm5lY3Rpb25TdHJpbmcgLSBBY2NvdW50IGNvbm5lY3Rpb24gc3RyaW5nIG9yIGEgU0FTIGNvbm5lY3Rpb24gc3RyaW5nIG9mIGFuIEF6dXJlIHN0b3JhZ2UgYWNjb3VudC5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbIE5vdGUgLSBBY2NvdW50IGNvbm5lY3Rpb24gc3RyaW5nIGNhbiBvbmx5IGJlIHVzZWQgaW4gTk9ERS5KUyBydW50aW1lLiBdXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWNjb3VudCBjb25uZWN0aW9uIHN0cmluZyBleGFtcGxlIC1cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgRGVmYXVsdEVuZHBvaW50c1Byb3RvY29sPWh0dHBzO0FjY291bnROYW1lPW15YWNjb3VudDtBY2NvdW50S2V5PWFjY291bnRLZXk7RW5kcG9pbnRTdWZmaXg9Y29yZS53aW5kb3dzLm5ldGBcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQVMgY29ubmVjdGlvbiBzdHJpbmcgZXhhbXBsZSAtXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYEJsb2JFbmRwb2ludD1odHRwczovL215YWNjb3VudC5ibG9iLmNvcmUud2luZG93cy5uZXQvO1F1ZXVlRW5kcG9pbnQ9aHR0cHM6Ly9teWFjY291bnQucXVldWUuY29yZS53aW5kb3dzLm5ldC87RmlsZUVuZHBvaW50PWh0dHBzOi8vbXlhY2NvdW50LmZpbGUuY29yZS53aW5kb3dzLm5ldC87VGFibGVFbmRwb2ludD1odHRwczovL215YWNjb3VudC50YWJsZS5jb3JlLndpbmRvd3MubmV0LztTaGFyZWRBY2Nlc3NTaWduYXR1cmU9c2FzU3RyaW5nYFxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwuIE9wdGlvbnMgdG8gY29uZmlndXJlIHRoZSBIVFRQIHBpcGVsaW5lLlxuICAgICAqL1xuICAgIHN0YXRpYyBmcm9tQ29ubmVjdGlvblN0cmluZyhjb25uZWN0aW9uU3RyaW5nLCBcbiAgICAvLyBMZWdhY3ksIG5vIGZpeCBmb3IgZXNsaW50IGVycm9yIHdpdGhvdXQgYnJlYWtpbmcuIERpc2FibGUgaXQgZm9yIHRoaXMgaW50ZXJmYWNlLlxuICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYXp1cmUvYXp1cmUtc2RrL3RzLW5hbWluZy1vcHRpb25zKi9cbiAgICBvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgICAgICBjb25zdCBleHRyYWN0ZWRDcmVkcyA9IGV4dHJhY3RDb25uZWN0aW9uU3RyaW5nUGFydHMoY29ubmVjdGlvblN0cmluZyk7XG4gICAgICAgIGlmIChleHRyYWN0ZWRDcmVkcy5raW5kID09PSBcIkFjY291bnRDb25uU3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGlmIChjb3JlVXRpbC5pc05vZGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzaGFyZWRLZXlDcmVkZW50aWFsID0gbmV3IFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsKGV4dHJhY3RlZENyZWRzLmFjY291bnROYW1lLCBleHRyYWN0ZWRDcmVkcy5hY2NvdW50S2V5KTtcbiAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMucHJveHlPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMucHJveHlPcHRpb25zID0gY29yZVJlc3RQaXBlbGluZS5nZXREZWZhdWx0UHJveHlTZXR0aW5ncyhleHRyYWN0ZWRDcmVkcy5wcm94eVVyaSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHBpcGVsaW5lID0gbmV3UGlwZWxpbmUoc2hhcmVkS2V5Q3JlZGVudGlhbCwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBCbG9iU2VydmljZUNsaWVudChleHRyYWN0ZWRDcmVkcy51cmwsIHBpcGVsaW5lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFjY291bnQgY29ubmVjdGlvbiBzdHJpbmcgaXMgb25seSBzdXBwb3J0ZWQgaW4gTm9kZS5qcyBlbnZpcm9ubWVudFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChleHRyYWN0ZWRDcmVkcy5raW5kID09PSBcIlNBU0Nvbm5TdHJpbmdcIikge1xuICAgICAgICAgICAgY29uc3QgcGlwZWxpbmUgPSBuZXdQaXBlbGluZShuZXcgQW5vbnltb3VzQ3JlZGVudGlhbCgpLCBvcHRpb25zKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQmxvYlNlcnZpY2VDbGllbnQoZXh0cmFjdGVkQ3JlZHMudXJsICsgXCI/XCIgKyBleHRyYWN0ZWRDcmVkcy5hY2NvdW50U2FzLCBwaXBlbGluZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb25uZWN0aW9uIHN0cmluZyBtdXN0IGJlIGVpdGhlciBhbiBBY2NvdW50IGNvbm5lY3Rpb24gc3RyaW5nIG9yIGEgU0FTIGNvbm5lY3Rpb24gc3RyaW5nXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKHVybCwgY3JlZGVudGlhbE9yUGlwZWxpbmUsIFxuICAgIC8vIExlZ2FjeSwgbm8gZml4IGZvciBlc2xpbnQgZXJyb3Igd2l0aG91dCBicmVha2luZy4gRGlzYWJsZSBpdCBmb3IgdGhpcyBpbnRlcmZhY2UuXG4gICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhenVyZS9henVyZS1zZGsvdHMtbmFtaW5nLW9wdGlvbnMqL1xuICAgIG9wdGlvbnMpIHtcbiAgICAgICAgbGV0IHBpcGVsaW5lO1xuICAgICAgICBpZiAoaXNQaXBlbGluZUxpa2UoY3JlZGVudGlhbE9yUGlwZWxpbmUpKSB7XG4gICAgICAgICAgICBwaXBlbGluZSA9IGNyZWRlbnRpYWxPclBpcGVsaW5lO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKChjb3JlVXRpbC5pc05vZGUgJiYgY3JlZGVudGlhbE9yUGlwZWxpbmUgaW5zdGFuY2VvZiBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbCkgfHxcbiAgICAgICAgICAgIGNyZWRlbnRpYWxPclBpcGVsaW5lIGluc3RhbmNlb2YgQW5vbnltb3VzQ3JlZGVudGlhbCB8fFxuICAgICAgICAgICAgY29yZUF1dGguaXNUb2tlbkNyZWRlbnRpYWwoY3JlZGVudGlhbE9yUGlwZWxpbmUpKSB7XG4gICAgICAgICAgICBwaXBlbGluZSA9IG5ld1BpcGVsaW5lKGNyZWRlbnRpYWxPclBpcGVsaW5lLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIFRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZC4gVXNlIGFub255bW91cyBjcmVkZW50aWFsXG4gICAgICAgICAgICBwaXBlbGluZSA9IG5ld1BpcGVsaW5lKG5ldyBBbm9ueW1vdXNDcmVkZW50aWFsKCksIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyKHVybCwgcGlwZWxpbmUpO1xuICAgICAgICB0aGlzLnNlcnZpY2VDb250ZXh0ID0gdGhpcy5zdG9yYWdlQ2xpZW50Q29udGV4dC5zZXJ2aWNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEge0BsaW5rIENvbnRhaW5lckNsaWVudH0gb2JqZWN0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29udGFpbmVyTmFtZSAtIEEgY29udGFpbmVyIG5hbWVcbiAgICAgKiBAcmV0dXJucyBBIG5ldyBDb250YWluZXJDbGllbnQgb2JqZWN0IGZvciB0aGUgZ2l2ZW4gY29udGFpbmVyIG5hbWUuXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzYWdlOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBjb25zdCBjb250YWluZXJDbGllbnQgPSBibG9iU2VydmljZUNsaWVudC5nZXRDb250YWluZXJDbGllbnQoXCI8Y29udGFpbmVyIG5hbWU+XCIpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGdldENvbnRhaW5lckNsaWVudChjb250YWluZXJOYW1lKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ29udGFpbmVyQ2xpZW50KGFwcGVuZFRvVVJMUGF0aCh0aGlzLnVybCwgZW5jb2RlVVJJQ29tcG9uZW50KGNvbnRhaW5lck5hbWUpKSwgdGhpcy5waXBlbGluZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIEJsb2IgY29udGFpbmVyLiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9jcmVhdGUtY29udGFpbmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29udGFpbmVyTmFtZSAtIE5hbWUgb2YgdGhlIGNvbnRhaW5lciB0byBjcmVhdGUuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIGNvbmZpZ3VyZSBDb250YWluZXIgQ3JlYXRlIG9wZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyBDb250YWluZXIgY3JlYXRpb24gcmVzcG9uc2UgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNvbnRhaW5lciBjbGllbnQuXG4gICAgICovXG4gICAgYXN5bmMgY3JlYXRlQ29udGFpbmVyKGNvbnRhaW5lck5hbWUsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JTZXJ2aWNlQ2xpZW50LWNyZWF0ZUNvbnRhaW5lclwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lckNsaWVudCA9IHRoaXMuZ2V0Q29udGFpbmVyQ2xpZW50KGNvbnRhaW5lck5hbWUpO1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyQ3JlYXRlUmVzcG9uc2UgPSBhd2FpdCBjb250YWluZXJDbGllbnQuY3JlYXRlKHVwZGF0ZWRPcHRpb25zKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyQ2xpZW50LFxuICAgICAgICAgICAgICAgIGNvbnRhaW5lckNyZWF0ZVJlc3BvbnNlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlbGV0ZXMgYSBCbG9iIGNvbnRhaW5lci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb250YWluZXJOYW1lIC0gTmFtZSBvZiB0aGUgY29udGFpbmVyIHRvIGRlbGV0ZS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gY29uZmlndXJlIENvbnRhaW5lciBEZWxldGUgb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIENvbnRhaW5lciBkZWxldGlvbiByZXNwb25zZS5cbiAgICAgKi9cbiAgICBhc3luYyBkZWxldGVDb250YWluZXIoY29udGFpbmVyTmFtZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYlNlcnZpY2VDbGllbnQtZGVsZXRlQ29udGFpbmVyXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyQ2xpZW50ID0gdGhpcy5nZXRDb250YWluZXJDbGllbnQoY29udGFpbmVyTmFtZSk7XG4gICAgICAgICAgICByZXR1cm4gY29udGFpbmVyQ2xpZW50LmRlbGV0ZSh1cGRhdGVkT3B0aW9ucyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXN0b3JlIGEgcHJldmlvdXNseSBkZWxldGVkIEJsb2IgY29udGFpbmVyLlxuICAgICAqIFRoaXMgQVBJIGlzIG9ubHkgZnVuY3Rpb25hbCBpZiBDb250YWluZXIgU29mdCBEZWxldGUgaXMgZW5hYmxlZCBmb3IgdGhlIHN0b3JhZ2UgYWNjb3VudCBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbnRhaW5lci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkZWxldGVkQ29udGFpbmVyTmFtZSAtIE5hbWUgb2YgdGhlIHByZXZpb3VzbHkgZGVsZXRlZCBjb250YWluZXIuXG4gICAgICogQHBhcmFtIGRlbGV0ZWRDb250YWluZXJWZXJzaW9uIC0gVmVyc2lvbiBvZiB0aGUgcHJldmlvdXNseSBkZWxldGVkIGNvbnRhaW5lciwgdXNlZCB0byB1bmlxdWVseSBpZGVudGlmeSB0aGUgZGVsZXRlZCBjb250YWluZXIuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIGNvbmZpZ3VyZSBDb250YWluZXIgUmVzdG9yZSBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgQ29udGFpbmVyIGRlbGV0aW9uIHJlc3BvbnNlLlxuICAgICAqL1xuICAgIGFzeW5jIHVuZGVsZXRlQ29udGFpbmVyKGRlbGV0ZWRDb250YWluZXJOYW1lLCBkZWxldGVkQ29udGFpbmVyVmVyc2lvbiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYlNlcnZpY2VDbGllbnQtdW5kZWxldGVDb250YWluZXJcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJDbGllbnQgPSB0aGlzLmdldENvbnRhaW5lckNsaWVudChvcHRpb25zLmRlc3RpbmF0aW9uQ29udGFpbmVyTmFtZSB8fCBkZWxldGVkQ29udGFpbmVyTmFtZSk7XG4gICAgICAgICAgICAvLyBIYWNrIHRvIGFjY2VzcyBhIHByb3RlY3RlZCBtZW1iZXIuXG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJDb250ZXh0ID0gY29udGFpbmVyQ2xpZW50W1wic3RvcmFnZUNsaWVudENvbnRleHRcIl0uY29udGFpbmVyO1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyVW5kZWxldGVSZXNwb25zZSA9IGFzc2VydFJlc3BvbnNlKGF3YWl0IGNvbnRhaW5lckNvbnRleHQucmVzdG9yZSh7XG4gICAgICAgICAgICAgICAgZGVsZXRlZENvbnRhaW5lck5hbWUsXG4gICAgICAgICAgICAgICAgZGVsZXRlZENvbnRhaW5lclZlcnNpb24sXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgcmV0dXJuIHsgY29udGFpbmVyQ2xpZW50LCBjb250YWluZXJVbmRlbGV0ZVJlc3BvbnNlIH07XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZW5hbWUgYW4gZXhpc3RpbmcgQmxvYiBDb250YWluZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc291cmNlQ29udGFpbmVyTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBzb3VyY2UgY29udGFpbmVyLlxuICAgICAqIEBwYXJhbSBkZXN0aW5hdGlvbkNvbnRhaW5lck5hbWUgLSBUaGUgbmV3IG5hbWUgb2YgdGhlIGNvbnRhaW5lci5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gY29uZmlndXJlIENvbnRhaW5lciBSZW5hbWUgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnQgKi9cbiAgICAvLyBAdHMtaWdub3JlIE5lZWQgdG8gaGlkZSB0aGlzIGludGVyZmFjZSBmb3Igbm93LiBNYWtlIGl0IHB1YmxpYyBhbmQgdHVybiBvbiB0aGUgbGl2ZSB0ZXN0cyBmb3IgaXQgd2hlbiB0aGUgc2VydmljZSBpcyByZWFkeS5cbiAgICBhc3luYyByZW5hbWVDb250YWluZXIoc291cmNlQ29udGFpbmVyTmFtZSwgZGVzdGluYXRpb25Db250YWluZXJOYW1lLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iU2VydmljZUNsaWVudC1yZW5hbWVDb250YWluZXJcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJDbGllbnQgPSB0aGlzLmdldENvbnRhaW5lckNsaWVudChkZXN0aW5hdGlvbkNvbnRhaW5lck5hbWUpO1xuICAgICAgICAgICAgLy8gSGFjayB0byBhY2Nlc3MgYSBwcm90ZWN0ZWQgbWVtYmVyLlxuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyQ29udGV4dCA9IGNvbnRhaW5lckNsaWVudFtcInN0b3JhZ2VDbGllbnRDb250ZXh0XCJdLmNvbnRhaW5lcjtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lclJlbmFtZVJlc3BvbnNlID0gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgY29udGFpbmVyQ29udGV4dC5yZW5hbWUoc291cmNlQ29udGFpbmVyTmFtZSwgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCB1cGRhdGVkT3B0aW9ucyksIHsgc291cmNlTGVhc2VJZDogKF9hID0gb3B0aW9ucy5zb3VyY2VDb25kaXRpb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5sZWFzZUlkIH0pKSk7XG4gICAgICAgICAgICByZXR1cm4geyBjb250YWluZXJDbGllbnQsIGNvbnRhaW5lclJlbmFtZVJlc3BvbnNlIH07XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBwcm9wZXJ0aWVzIG9mIGEgc3RvcmFnZSBhY2NvdW504oCZcyBCbG9iIHNlcnZpY2UsIGluY2x1ZGluZyBwcm9wZXJ0aWVzXG4gICAgICogZm9yIFN0b3JhZ2UgQW5hbHl0aWNzIGFuZCBDT1JTIChDcm9zcy1PcmlnaW4gUmVzb3VyY2UgU2hhcmluZykgcnVsZXMuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvZ2V0LWJsb2Itc2VydmljZS1wcm9wZXJ0aWVzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gdGhlIFNlcnZpY2UgR2V0IFByb3BlcnRpZXMgb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIFJlc3BvbnNlIGRhdGEgZm9yIHRoZSBTZXJ2aWNlIEdldCBQcm9wZXJ0aWVzIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBnZXRQcm9wZXJ0aWVzKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JTZXJ2aWNlQ2xpZW50LWdldFByb3BlcnRpZXNcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5zZXJ2aWNlQ29udGV4dC5nZXRQcm9wZXJ0aWVzKHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIHByb3BlcnRpZXMgZm9yIGEgc3RvcmFnZSBhY2NvdW504oCZcyBCbG9iIHNlcnZpY2UgZW5kcG9pbnQsIGluY2x1ZGluZyBwcm9wZXJ0aWVzXG4gICAgICogZm9yIFN0b3JhZ2UgQW5hbHl0aWNzLCBDT1JTIChDcm9zcy1PcmlnaW4gUmVzb3VyY2UgU2hhcmluZykgcnVsZXMgYW5kIHNvZnQgZGVsZXRlIHNldHRpbmdzLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL3NldC1ibG9iLXNlcnZpY2UtcHJvcGVydGllc1xuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnRpZXMgLVxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB0aGUgU2VydmljZSBTZXQgUHJvcGVydGllcyBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgdGhlIFNlcnZpY2UgU2V0IFByb3BlcnRpZXMgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIHNldFByb3BlcnRpZXMocHJvcGVydGllcywgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYlNlcnZpY2VDbGllbnQtc2V0UHJvcGVydGllc1wiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLnNlcnZpY2VDb250ZXh0LnNldFByb3BlcnRpZXMocHJvcGVydGllcywge1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyBzdGF0aXN0aWNzIHJlbGF0ZWQgdG8gcmVwbGljYXRpb24gZm9yIHRoZSBCbG9iIHNlcnZpY2UuIEl0IGlzIG9ubHlcbiAgICAgKiBhdmFpbGFibGUgb24gdGhlIHNlY29uZGFyeSBsb2NhdGlvbiBlbmRwb2ludCB3aGVuIHJlYWQtYWNjZXNzIGdlby1yZWR1bmRhbnRcbiAgICAgKiByZXBsaWNhdGlvbiBpcyBlbmFibGVkIGZvciB0aGUgc3RvcmFnZSBhY2NvdW50LlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2dldC1ibG9iLXNlcnZpY2Utc3RhdHNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB0aGUgU2VydmljZSBHZXQgU3RhdGlzdGljcyBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgdGhlIFNlcnZpY2UgR2V0IFN0YXRpc3RpY3Mgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGdldFN0YXRpc3RpY3Mob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYlNlcnZpY2VDbGllbnQtZ2V0U3RhdGlzdGljc1wiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLnNlcnZpY2VDb250ZXh0LmdldFN0YXRpc3RpY3Moe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBHZXQgQWNjb3VudCBJbmZvcm1hdGlvbiBvcGVyYXRpb24gcmV0dXJucyB0aGUgc2t1IG5hbWUgYW5kIGFjY291bnQga2luZFxuICAgICAqIGZvciB0aGUgc3BlY2lmaWVkIGFjY291bnQuXG4gICAgICogVGhlIEdldCBBY2NvdW50IEluZm9ybWF0aW9uIG9wZXJhdGlvbiBpcyBhdmFpbGFibGUgb24gc2VydmljZSB2ZXJzaW9ucyBiZWdpbm5pbmdcbiAgICAgKiB3aXRoIHZlcnNpb24gMjAxOC0wMy0yOC5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9nZXQtYWNjb3VudC1pbmZvcm1hdGlvblxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHRoZSBTZXJ2aWNlIEdldCBBY2NvdW50IEluZm8gb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIFJlc3BvbnNlIGRhdGEgZm9yIHRoZSBTZXJ2aWNlIEdldCBBY2NvdW50IEluZm8gb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGdldEFjY291bnRJbmZvKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JTZXJ2aWNlQ2xpZW50LWdldEFjY291bnRJbmZvXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuc2VydmljZUNvbnRleHQuZ2V0QWNjb3VudEluZm8oe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBsaXN0IG9mIHRoZSBjb250YWluZXJzIHVuZGVyIHRoZSBzcGVjaWZpZWQgYWNjb3VudC5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9saXN0LWNvbnRhaW5lcnMyXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbWFya2VyIC0gQSBzdHJpbmcgdmFsdWUgdGhhdCBpZGVudGlmaWVzIHRoZSBwb3J0aW9uIG9mXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICB0aGUgbGlzdCBvZiBjb250YWluZXJzIHRvIGJlIHJldHVybmVkIHdpdGggdGhlIG5leHQgbGlzdGluZyBvcGVyYXRpb24uIFRoZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uIHJldHVybnMgdGhlIGNvbnRpbnVhdGlvblRva2VuIHZhbHVlIHdpdGhpbiB0aGUgcmVzcG9uc2UgYm9keSBpZiB0aGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3Rpbmcgb3BlcmF0aW9uIGRpZCBub3QgcmV0dXJuIGFsbCBjb250YWluZXJzIHJlbWFpbmluZyB0byBiZSBsaXN0ZWRcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIGN1cnJlbnQgcGFnZS4gVGhlIGNvbnRpbnVhdGlvblRva2VuIHZhbHVlIGNhbiBiZSB1c2VkIGFzIHRoZSB2YWx1ZSBmb3JcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBtYXJrZXIgcGFyYW1ldGVyIGluIGEgc3Vic2VxdWVudCBjYWxsIHRvIHJlcXVlc3QgdGhlIG5leHQgcGFnZSBvZiBsaXN0XG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy4gVGhlIG1hcmtlciB2YWx1ZSBpcyBvcGFxdWUgdG8gdGhlIGNsaWVudC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gdGhlIFNlcnZpY2UgTGlzdCBDb250YWluZXIgU2VnbWVudCBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgdGhlIFNlcnZpY2UgTGlzdCBDb250YWluZXIgU2VnbWVudCBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgbGlzdENvbnRhaW5lcnNTZWdtZW50KG1hcmtlciwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYlNlcnZpY2VDbGllbnQtbGlzdENvbnRhaW5lcnNTZWdtZW50XCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuc2VydmljZUNvbnRleHQubGlzdENvbnRhaW5lcnNTZWdtZW50KE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7IGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLCBtYXJrZXIgfSwgb3B0aW9ucyksIHsgaW5jbHVkZTogdHlwZW9mIG9wdGlvbnMuaW5jbHVkZSA9PT0gXCJzdHJpbmdcIiA/IFtvcHRpb25zLmluY2x1ZGVdIDogb3B0aW9ucy5pbmNsdWRlLCB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMgfSkpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBGaWx0ZXIgQmxvYnMgb3BlcmF0aW9uIGVuYWJsZXMgY2FsbGVycyB0byBsaXN0IGJsb2JzIGFjcm9zcyBhbGwgY29udGFpbmVycyB3aG9zZSB0YWdzXG4gICAgICogbWF0Y2ggYSBnaXZlbiBzZWFyY2ggZXhwcmVzc2lvbi4gRmlsdGVyIGJsb2JzIHNlYXJjaGVzIGFjcm9zcyBhbGwgY29udGFpbmVycyB3aXRoaW4gYVxuICAgICAqIHN0b3JhZ2UgYWNjb3VudCBidXQgY2FuIGJlIHNjb3BlZCB3aXRoaW4gdGhlIGV4cHJlc3Npb24gdG8gYSBzaW5nbGUgY29udGFpbmVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRhZ0ZpbHRlclNxbEV4cHJlc3Npb24gLSBUaGUgd2hlcmUgcGFyYW1ldGVyIGVuYWJsZXMgdGhlIGNhbGxlciB0byBxdWVyeSBibG9icyB3aG9zZSB0YWdzIG1hdGNoIGEgZ2l2ZW4gZXhwcmVzc2lvbi5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZ2l2ZW4gZXhwcmVzc2lvbiBtdXN0IGV2YWx1YXRlIHRvIHRydWUgZm9yIGEgYmxvYiB0byBiZSByZXR1cm5lZCBpbiB0aGUgcmVzdWx0cy5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGVbT0RhdGEgLSBBQk5GXSBmaWx0ZXIgc3ludGF4IHJ1bGUgZGVmaW5lcyB0aGUgZm9ybWFsIGdyYW1tYXIgZm9yIHRoZSB2YWx1ZSBvZiB0aGUgd2hlcmUgcXVlcnkgcGFyYW1ldGVyO1xuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvd2V2ZXIsIG9ubHkgYSBzdWJzZXQgb2YgdGhlIE9EYXRhIGZpbHRlciBzeW50YXggaXMgc3VwcG9ydGVkIGluIHRoZSBCbG9iIHNlcnZpY2UuXG4gICAgICogQHBhcmFtIG1hcmtlciAtIEEgc3RyaW5nIHZhbHVlIHRoYXQgaWRlbnRpZmllcyB0aGUgcG9ydGlvbiBvZlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbGlzdCBvZiBibG9icyB0byBiZSByZXR1cm5lZCB3aXRoIHRoZSBuZXh0IGxpc3Rpbmcgb3BlcmF0aW9uLiBUaGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uIHJldHVybnMgdGhlIGNvbnRpbnVhdGlvblRva2VuIHZhbHVlIHdpdGhpbiB0aGUgcmVzcG9uc2UgYm9keSBpZiB0aGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGluZyBvcGVyYXRpb24gZGlkIG5vdCByZXR1cm4gYWxsIGJsb2JzIHJlbWFpbmluZyB0byBiZSBsaXN0ZWRcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgY3VycmVudCBwYWdlLiBUaGUgY29udGludWF0aW9uVG9rZW4gdmFsdWUgY2FuIGJlIHVzZWQgYXMgdGhlIHZhbHVlIGZvclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWFya2VyIHBhcmFtZXRlciBpbiBhIHN1YnNlcXVlbnQgY2FsbCB0byByZXF1ZXN0IHRoZSBuZXh0IHBhZ2Ugb2YgbGlzdFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy4gVGhlIG1hcmtlciB2YWx1ZSBpcyBvcGFxdWUgdG8gdGhlIGNsaWVudC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gZmluZCBibG9icyBieSB0YWdzLlxuICAgICAqL1xuICAgIGFzeW5jIGZpbmRCbG9ic0J5VGFnc1NlZ21lbnQodGFnRmlsdGVyU3FsRXhwcmVzc2lvbiwgbWFya2VyLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iU2VydmljZUNsaWVudC1maW5kQmxvYnNCeVRhZ3NTZWdtZW50XCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLnNlcnZpY2VDb250ZXh0LmZpbHRlckJsb2JzKHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICB3aGVyZTogdGFnRmlsdGVyU3FsRXhwcmVzc2lvbixcbiAgICAgICAgICAgICAgICBtYXJrZXIsXG4gICAgICAgICAgICAgICAgbWF4UGFnZVNpemU6IG9wdGlvbnMubWF4UGFnZVNpemUsXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgY29uc3Qgd3JhcHBlZFJlc3BvbnNlID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCByZXNwb25zZSksIHsgX3Jlc3BvbnNlOiByZXNwb25zZS5fcmVzcG9uc2UsIGJsb2JzOiByZXNwb25zZS5ibG9icy5tYXAoKGJsb2IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgICAgICBsZXQgdGFnVmFsdWUgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICBpZiAoKChfYSA9IGJsb2IudGFncykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmJsb2JUYWdTZXQubGVuZ3RoKSA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFnVmFsdWUgPSBibG9iLnRhZ3MuYmxvYlRhZ1NldFswXS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBibG9iKSwgeyB0YWdzOiB0b1RhZ3MoYmxvYi50YWdzKSwgdGFnVmFsdWUgfSk7XG4gICAgICAgICAgICAgICAgfSkgfSk7XG4gICAgICAgICAgICByZXR1cm4gd3JhcHBlZFJlc3BvbnNlO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBBc3luY0l0ZXJhYmxlSXRlcmF0b3IgZm9yIFNlcnZpY2VGaW5kQmxvYnNCeVRhZ3NTZWdtZW50UmVzcG9uc2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGFnRmlsdGVyU3FsRXhwcmVzc2lvbiAtICBUaGUgd2hlcmUgcGFyYW1ldGVyIGVuYWJsZXMgdGhlIGNhbGxlciB0byBxdWVyeSBibG9icyB3aG9zZSB0YWdzIG1hdGNoIGEgZ2l2ZW4gZXhwcmVzc2lvbi5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGdpdmVuIGV4cHJlc3Npb24gbXVzdCBldmFsdWF0ZSB0byB0cnVlIGZvciBhIGJsb2IgdG8gYmUgcmV0dXJuZWQgaW4gdGhlIHJlc3VsdHMuXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZVtPRGF0YSAtIEFCTkZdIGZpbHRlciBzeW50YXggcnVsZSBkZWZpbmVzIHRoZSBmb3JtYWwgZ3JhbW1hciBmb3IgdGhlIHZhbHVlIG9mIHRoZSB3aGVyZSBxdWVyeSBwYXJhbWV0ZXI7XG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvd2V2ZXIsIG9ubHkgYSBzdWJzZXQgb2YgdGhlIE9EYXRhIGZpbHRlciBzeW50YXggaXMgc3VwcG9ydGVkIGluIHRoZSBCbG9iIHNlcnZpY2UuXG4gICAgICogQHBhcmFtIG1hcmtlciAtIEEgc3RyaW5nIHZhbHVlIHRoYXQgaWRlbnRpZmllcyB0aGUgcG9ydGlvbiBvZlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbGlzdCBvZiBibG9icyB0byBiZSByZXR1cm5lZCB3aXRoIHRoZSBuZXh0IGxpc3Rpbmcgb3BlcmF0aW9uLiBUaGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uIHJldHVybnMgdGhlIGNvbnRpbnVhdGlvblRva2VuIHZhbHVlIHdpdGhpbiB0aGUgcmVzcG9uc2UgYm9keSBpZiB0aGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGluZyBvcGVyYXRpb24gZGlkIG5vdCByZXR1cm4gYWxsIGJsb2JzIHJlbWFpbmluZyB0byBiZSBsaXN0ZWRcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgY3VycmVudCBwYWdlLiBUaGUgY29udGludWF0aW9uVG9rZW4gdmFsdWUgY2FuIGJlIHVzZWQgYXMgdGhlIHZhbHVlIGZvclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWFya2VyIHBhcmFtZXRlciBpbiBhIHN1YnNlcXVlbnQgY2FsbCB0byByZXF1ZXN0IHRoZSBuZXh0IHBhZ2Ugb2YgbGlzdFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy4gVGhlIG1hcmtlciB2YWx1ZSBpcyBvcGFxdWUgdG8gdGhlIGNsaWVudC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gZmluZCBibG9icyBieSB0YWdzLlxuICAgICAqL1xuICAgIGZpbmRCbG9ic0J5VGFnc1NlZ21lbnRzKHRhZ0ZpbHRlclNxbEV4cHJlc3Npb25fMSwgbWFya2VyXzEpIHtcbiAgICAgICAgcmV0dXJuIHRzbGliLl9fYXN5bmNHZW5lcmF0b3IodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiogZmluZEJsb2JzQnlUYWdzU2VnbWVudHNfMSh0YWdGaWx0ZXJTcWxFeHByZXNzaW9uLCBtYXJrZXIsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICAgICAgbGV0IHJlc3BvbnNlO1xuICAgICAgICAgICAgaWYgKCEhbWFya2VyIHx8IG1hcmtlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IHlpZWxkIHRzbGliLl9fYXdhaXQodGhpcy5maW5kQmxvYnNCeVRhZ3NTZWdtZW50KHRhZ0ZpbHRlclNxbEV4cHJlc3Npb24sIG1hcmtlciwgb3B0aW9ucykpO1xuICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5ibG9icyA9IHJlc3BvbnNlLmJsb2JzIHx8IFtdO1xuICAgICAgICAgICAgICAgICAgICBtYXJrZXIgPSByZXNwb25zZS5jb250aW51YXRpb25Ub2tlbjtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgeWllbGQgdHNsaWIuX19hd2FpdChyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgfSB3aGlsZSAobWFya2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIGZvciBibG9icy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0YWdGaWx0ZXJTcWxFeHByZXNzaW9uIC0gIFRoZSB3aGVyZSBwYXJhbWV0ZXIgZW5hYmxlcyB0aGUgY2FsbGVyIHRvIHF1ZXJ5IGJsb2JzIHdob3NlIHRhZ3MgbWF0Y2ggYSBnaXZlbiBleHByZXNzaW9uLlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZ2l2ZW4gZXhwcmVzc2lvbiBtdXN0IGV2YWx1YXRlIHRvIHRydWUgZm9yIGEgYmxvYiB0byBiZSByZXR1cm5lZCBpbiB0aGUgcmVzdWx0cy5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlW09EYXRhIC0gQUJORl0gZmlsdGVyIHN5bnRheCBydWxlIGRlZmluZXMgdGhlIGZvcm1hbCBncmFtbWFyIGZvciB0aGUgdmFsdWUgb2YgdGhlIHdoZXJlIHF1ZXJ5IHBhcmFtZXRlcjtcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG93ZXZlciwgb25seSBhIHN1YnNldCBvZiB0aGUgT0RhdGEgZmlsdGVyIHN5bnRheCBpcyBzdXBwb3J0ZWQgaW4gdGhlIEJsb2Igc2VydmljZS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gZmluZEJsb2JzQnlUYWdzSXRlbXMuXG4gICAgICovXG4gICAgZmluZEJsb2JzQnlUYWdzSXRlbXModGFnRmlsdGVyU3FsRXhwcmVzc2lvbl8xKSB7XG4gICAgICAgIHJldHVybiB0c2xpYi5fX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24qIGZpbmRCbG9ic0J5VGFnc0l0ZW1zXzEodGFnRmlsdGVyU3FsRXhwcmVzc2lvbiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgICAgICB2YXIgX2EsIGVfMSwgX2IsIF9jO1xuICAgICAgICAgICAgbGV0IG1hcmtlcjtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgX2QgPSB0cnVlLCBfZSA9IHRzbGliLl9fYXN5bmNWYWx1ZXModGhpcy5maW5kQmxvYnNCeVRhZ3NTZWdtZW50cyh0YWdGaWx0ZXJTcWxFeHByZXNzaW9uLCBtYXJrZXIsIG9wdGlvbnMpKSwgX2Y7IF9mID0geWllbGQgdHNsaWIuX19hd2FpdChfZS5uZXh0KCkpLCBfYSA9IF9mLmRvbmUsICFfYTsgX2QgPSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgIF9jID0gX2YudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIF9kID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlZ21lbnQgPSBfYztcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgdHNsaWIuX19hd2FpdCh5aWVsZCogdHNsaWIuX19hc3luY0RlbGVnYXRvcih0c2xpYi5fX2FzeW5jVmFsdWVzKHNlZ21lbnQuYmxvYnMpKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghX2QgJiYgIV9hICYmIChfYiA9IF9lLnJldHVybikpIHlpZWxkIHRzbGliLl9fYXdhaXQoX2IuY2FsbChfZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIGFzeW5jIGl0ZXJhYmxlIGl0ZXJhdG9yIHRvIGZpbmQgYWxsIGJsb2JzIHdpdGggc3BlY2lmaWVkIHRhZ1xuICAgICAqIHVuZGVyIHRoZSBzcGVjaWZpZWQgYWNjb3VudC5cbiAgICAgKlxuICAgICAqIC5ieVBhZ2UoKSByZXR1cm5zIGFuIGFzeW5jIGl0ZXJhYmxlIGl0ZXJhdG9yIHRvIGxpc3QgdGhlIGJsb2JzIGluIHBhZ2VzLlxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvZ2V0LWJsb2Itc2VydmljZS1wcm9wZXJ0aWVzXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIGBmb3IgYXdhaXRgIHN5bnRheDpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogbGV0IGkgPSAxO1xuICAgICAqIGZvciBhd2FpdCAoY29uc3QgYmxvYiBvZiBibG9iU2VydmljZUNsaWVudC5maW5kQmxvYnNCeVRhZ3MoXCJ0YWdrZXk9J3RhZ3ZhbHVlJ1wiKSkge1xuICAgICAqICAgY29uc29sZS5sb2coYEJsb2IgJHtpKyt9OiAke2NvbnRhaW5lci5uYW1lfWApO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNpbmcgYGl0ZXIubmV4dCgpYDpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogbGV0IGkgPSAxO1xuICAgICAqIGNvbnN0IGl0ZXIgPSBibG9iU2VydmljZUNsaWVudC5maW5kQmxvYnNCeVRhZ3MoXCJ0YWdrZXk9J3RhZ3ZhbHVlJ1wiKTtcbiAgICAgKiBsZXQgYmxvYkl0ZW0gPSBhd2FpdCBpdGVyLm5leHQoKTtcbiAgICAgKiB3aGlsZSAoIWJsb2JJdGVtLmRvbmUpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKGBCbG9iICR7aSsrfTogJHtibG9iSXRlbS52YWx1ZS5uYW1lfWApO1xuICAgICAqICAgYmxvYkl0ZW0gPSBhd2FpdCBpdGVyLm5leHQoKTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIGBieVBhZ2UoKWA6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIHBhc3Npbmcgb3B0aW9uYWwgbWF4UGFnZVNpemUgaW4gdGhlIHBhZ2Ugc2V0dGluZ3NcbiAgICAgKiBsZXQgaSA9IDE7XG4gICAgICogZm9yIGF3YWl0IChjb25zdCByZXNwb25zZSBvZiBibG9iU2VydmljZUNsaWVudC5maW5kQmxvYnNCeVRhZ3MoXCJ0YWdrZXk9J3RhZ3ZhbHVlJ1wiKS5ieVBhZ2UoeyBtYXhQYWdlU2l6ZTogMjAgfSkpIHtcbiAgICAgKiAgIGlmIChyZXNwb25zZS5ibG9icykge1xuICAgICAqICAgICBmb3IgKGNvbnN0IGJsb2Igb2YgcmVzcG9uc2UuYmxvYnMpIHtcbiAgICAgKiAgICAgICBjb25zb2xlLmxvZyhgQmxvYiAke2krK306ICR7YmxvYi5uYW1lfWApO1xuICAgICAqICAgICB9XG4gICAgICogICB9XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBwYWdpbmcgd2l0aCBhIG1hcmtlcjpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogbGV0IGkgPSAxO1xuICAgICAqIGxldCBpdGVyYXRvciA9IGJsb2JTZXJ2aWNlQ2xpZW50LmZpbmRCbG9ic0J5VGFncyhcInRhZ2tleT0ndGFndmFsdWUnXCIpLmJ5UGFnZSh7IG1heFBhZ2VTaXplOiAyIH0pO1xuICAgICAqIGxldCByZXNwb25zZSA9IChhd2FpdCBpdGVyYXRvci5uZXh0KCkpLnZhbHVlO1xuICAgICAqXG4gICAgICogLy8gUHJpbnRzIDIgYmxvYiBuYW1lc1xuICAgICAqIGlmIChyZXNwb25zZS5ibG9icykge1xuICAgICAqICAgZm9yIChjb25zdCBibG9iIG9mIHJlc3BvbnNlLmJsb2JzKSB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGBCbG9iICR7aSsrfTogJHtibG9iLm5hbWV9YCk7XG4gICAgICogICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICogLy8gR2V0cyBuZXh0IG1hcmtlclxuICAgICAqIGxldCBtYXJrZXIgPSByZXNwb25zZS5jb250aW51YXRpb25Ub2tlbjtcbiAgICAgKiAvLyBQYXNzaW5nIG5leHQgbWFya2VyIGFzIGNvbnRpbnVhdGlvblRva2VuXG4gICAgICogaXRlcmF0b3IgPSBibG9iU2VydmljZUNsaWVudFxuICAgICAqICAgLmZpbmRCbG9ic0J5VGFncyhcInRhZ2tleT0ndGFndmFsdWUnXCIpXG4gICAgICogICAuYnlQYWdlKHsgY29udGludWF0aW9uVG9rZW46IG1hcmtlciwgbWF4UGFnZVNpemU6IDEwIH0pO1xuICAgICAqIHJlc3BvbnNlID0gKGF3YWl0IGl0ZXJhdG9yLm5leHQoKSkudmFsdWU7XG4gICAgICpcbiAgICAgKiAvLyBQcmludHMgYmxvYiBuYW1lc1xuICAgICAqIGlmIChyZXNwb25zZS5ibG9icykge1xuICAgICAqICAgZm9yIChjb25zdCBibG9iIG9mIHJlc3BvbnNlLmJsb2JzKSB7XG4gICAgICogICAgICBjb25zb2xlLmxvZyhgQmxvYiAke2krK306ICR7YmxvYi5uYW1lfWApO1xuICAgICAqICAgfVxuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBwYXJhbSB0YWdGaWx0ZXJTcWxFeHByZXNzaW9uIC0gIFRoZSB3aGVyZSBwYXJhbWV0ZXIgZW5hYmxlcyB0aGUgY2FsbGVyIHRvIHF1ZXJ5IGJsb2JzIHdob3NlIHRhZ3MgbWF0Y2ggYSBnaXZlbiBleHByZXNzaW9uLlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZ2l2ZW4gZXhwcmVzc2lvbiBtdXN0IGV2YWx1YXRlIHRvIHRydWUgZm9yIGEgYmxvYiB0byBiZSByZXR1cm5lZCBpbiB0aGUgcmVzdWx0cy5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlW09EYXRhIC0gQUJORl0gZmlsdGVyIHN5bnRheCBydWxlIGRlZmluZXMgdGhlIGZvcm1hbCBncmFtbWFyIGZvciB0aGUgdmFsdWUgb2YgdGhlIHdoZXJlIHF1ZXJ5IHBhcmFtZXRlcjtcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG93ZXZlciwgb25seSBhIHN1YnNldCBvZiB0aGUgT0RhdGEgZmlsdGVyIHN5bnRheCBpcyBzdXBwb3J0ZWQgaW4gdGhlIEJsb2Igc2VydmljZS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gZmluZCBibG9icyBieSB0YWdzLlxuICAgICAqL1xuICAgIGZpbmRCbG9ic0J5VGFncyh0YWdGaWx0ZXJTcWxFeHByZXNzaW9uLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgLy8gQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIHRvIGl0ZXJhdGUgb3ZlciBibG9ic1xuICAgICAgICBjb25zdCBsaXN0U2VnbWVudE9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKTtcbiAgICAgICAgY29uc3QgaXRlciA9IHRoaXMuZmluZEJsb2JzQnlUYWdzSXRlbXModGFnRmlsdGVyU3FsRXhwcmVzc2lvbiwgbGlzdFNlZ21lbnRPcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVGhlIG5leHQgbWV0aG9kLCBwYXJ0IG9mIHRoZSBpdGVyYXRpb24gcHJvdG9jb2xcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgbmV4dCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlci5uZXh0KCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBUaGUgY29ubmVjdGlvbiB0byB0aGUgYXN5bmMgaXRlcmF0b3IsIHBhcnQgb2YgdGhlIGl0ZXJhdGlvbiBwcm90b2NvbFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogUmV0dXJuIGFuIEFzeW5jSXRlcmFibGVJdGVyYXRvciB0aGF0IHdvcmtzIGEgcGFnZSBhdCBhIHRpbWVcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgYnlQYWdlOiAoc2V0dGluZ3MgPSB7fSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmRCbG9ic0J5VGFnc1NlZ21lbnRzKHRhZ0ZpbHRlclNxbEV4cHJlc3Npb24sIHNldHRpbmdzLmNvbnRpbnVhdGlvblRva2VuLCBPYmplY3QuYXNzaWduKHsgbWF4UGFnZVNpemU6IHNldHRpbmdzLm1heFBhZ2VTaXplIH0sIGxpc3RTZWdtZW50T3B0aW9ucykpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBBc3luY0l0ZXJhYmxlSXRlcmF0b3IgZm9yIFNlcnZpY2VMaXN0Q29udGFpbmVyc1NlZ21lbnRSZXNwb25zZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBtYXJrZXIgLSBBIHN0cmluZyB2YWx1ZSB0aGF0IGlkZW50aWZpZXMgdGhlIHBvcnRpb24gb2ZcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBsaXN0IG9mIGNvbnRhaW5lcnMgdG8gYmUgcmV0dXJuZWQgd2l0aCB0aGUgbmV4dCBsaXN0aW5nIG9wZXJhdGlvbi4gVGhlXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gcmV0dXJucyB0aGUgY29udGludWF0aW9uVG9rZW4gdmFsdWUgd2l0aGluIHRoZSByZXNwb25zZSBib2R5IGlmIHRoZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGluZyBvcGVyYXRpb24gZGlkIG5vdCByZXR1cm4gYWxsIGNvbnRhaW5lcnMgcmVtYWluaW5nIHRvIGJlIGxpc3RlZFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgY3VycmVudCBwYWdlLiBUaGUgY29udGludWF0aW9uVG9rZW4gdmFsdWUgY2FuIGJlIHVzZWQgYXMgdGhlIHZhbHVlIGZvclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1hcmtlciBwYXJhbWV0ZXIgaW4gYSBzdWJzZXF1ZW50IGNhbGwgdG8gcmVxdWVzdCB0aGUgbmV4dCBwYWdlIG9mIGxpc3RcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLiBUaGUgbWFya2VyIHZhbHVlIGlzIG9wYXF1ZSB0byB0aGUgY2xpZW50LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBsaXN0IGNvbnRhaW5lcnMgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGxpc3RTZWdtZW50cyhtYXJrZXJfMSkge1xuICAgICAgICByZXR1cm4gdHNsaWIuX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKiBsaXN0U2VnbWVudHNfMShtYXJrZXIsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICAgICAgbGV0IGxpc3RDb250YWluZXJzU2VnbWVudFJlc3BvbnNlO1xuICAgICAgICAgICAgaWYgKCEhbWFya2VyIHx8IG1hcmtlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICBsaXN0Q29udGFpbmVyc1NlZ21lbnRSZXNwb25zZSA9IHlpZWxkIHRzbGliLl9fYXdhaXQodGhpcy5saXN0Q29udGFpbmVyc1NlZ21lbnQobWFya2VyLCBvcHRpb25zKSk7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RDb250YWluZXJzU2VnbWVudFJlc3BvbnNlLmNvbnRhaW5lckl0ZW1zID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RDb250YWluZXJzU2VnbWVudFJlc3BvbnNlLmNvbnRhaW5lckl0ZW1zIHx8IFtdO1xuICAgICAgICAgICAgICAgICAgICBtYXJrZXIgPSBsaXN0Q29udGFpbmVyc1NlZ21lbnRSZXNwb25zZS5jb250aW51YXRpb25Ub2tlbjtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgeWllbGQgdHNsaWIuX19hd2FpdCh5aWVsZCB0c2xpYi5fX2F3YWl0KGxpc3RDb250YWluZXJzU2VnbWVudFJlc3BvbnNlKSk7XG4gICAgICAgICAgICAgICAgfSB3aGlsZSAobWFya2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIGZvciBDb250YWluZXIgSXRlbXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBsaXN0IGNvbnRhaW5lcnMgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGxpc3RJdGVtcygpIHtcbiAgICAgICAgcmV0dXJuIHRzbGliLl9fYXN5bmNHZW5lcmF0b3IodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiogbGlzdEl0ZW1zXzEob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgICAgICB2YXIgX2EsIGVfMiwgX2IsIF9jO1xuICAgICAgICAgICAgbGV0IG1hcmtlcjtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgX2QgPSB0cnVlLCBfZSA9IHRzbGliLl9fYXN5bmNWYWx1ZXModGhpcy5saXN0U2VnbWVudHMobWFya2VyLCBvcHRpb25zKSksIF9mOyBfZiA9IHlpZWxkIHRzbGliLl9fYXdhaXQoX2UubmV4dCgpKSwgX2EgPSBfZi5kb25lLCAhX2E7IF9kID0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICBfYyA9IF9mLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBfZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzZWdtZW50ID0gX2M7XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIHRzbGliLl9fYXdhaXQoeWllbGQqIHRzbGliLl9fYXN5bmNEZWxlZ2F0b3IodHNsaWIuX19hc3luY1ZhbHVlcyhzZWdtZW50LmNvbnRhaW5lckl0ZW1zKSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlXzJfMSkgeyBlXzIgPSB7IGVycm9yOiBlXzJfMSB9OyB9XG4gICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIV9kICYmICFfYSAmJiAoX2IgPSBfZS5yZXR1cm4pKSB5aWVsZCB0c2xpYi5fX2F3YWl0KF9iLmNhbGwoX2UpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzIpIHRocm93IGVfMi5lcnJvcjsgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBhc3luYyBpdGVyYWJsZSBpdGVyYXRvciB0byBsaXN0IGFsbCB0aGUgY29udGFpbmVyc1xuICAgICAqIHVuZGVyIHRoZSBzcGVjaWZpZWQgYWNjb3VudC5cbiAgICAgKlxuICAgICAqIC5ieVBhZ2UoKSByZXR1cm5zIGFuIGFzeW5jIGl0ZXJhYmxlIGl0ZXJhdG9yIHRvIGxpc3QgdGhlIGNvbnRhaW5lcnMgaW4gcGFnZXMuXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIGBmb3IgYXdhaXRgIHN5bnRheDpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogbGV0IGkgPSAxO1xuICAgICAqIGZvciBhd2FpdCAoY29uc3QgY29udGFpbmVyIG9mIGJsb2JTZXJ2aWNlQ2xpZW50Lmxpc3RDb250YWluZXJzKCkpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKGBDb250YWluZXIgJHtpKyt9OiAke2NvbnRhaW5lci5uYW1lfWApO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNpbmcgYGl0ZXIubmV4dCgpYDpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogbGV0IGkgPSAxO1xuICAgICAqIGNvbnN0IGl0ZXIgPSBibG9iU2VydmljZUNsaWVudC5saXN0Q29udGFpbmVycygpO1xuICAgICAqIGxldCBjb250YWluZXJJdGVtID0gYXdhaXQgaXRlci5uZXh0KCk7XG4gICAgICogd2hpbGUgKCFjb250YWluZXJJdGVtLmRvbmUpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKGBDb250YWluZXIgJHtpKyt9OiAke2NvbnRhaW5lckl0ZW0udmFsdWUubmFtZX1gKTtcbiAgICAgKiAgIGNvbnRhaW5lckl0ZW0gPSBhd2FpdCBpdGVyLm5leHQoKTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIGBieVBhZ2UoKWA6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIHBhc3Npbmcgb3B0aW9uYWwgbWF4UGFnZVNpemUgaW4gdGhlIHBhZ2Ugc2V0dGluZ3NcbiAgICAgKiBsZXQgaSA9IDE7XG4gICAgICogZm9yIGF3YWl0IChjb25zdCByZXNwb25zZSBvZiBibG9iU2VydmljZUNsaWVudC5saXN0Q29udGFpbmVycygpLmJ5UGFnZSh7IG1heFBhZ2VTaXplOiAyMCB9KSkge1xuICAgICAqICAgaWYgKHJlc3BvbnNlLmNvbnRhaW5lckl0ZW1zKSB7XG4gICAgICogICAgIGZvciAoY29uc3QgY29udGFpbmVyIG9mIHJlc3BvbnNlLmNvbnRhaW5lckl0ZW1zKSB7XG4gICAgICogICAgICAgY29uc29sZS5sb2coYENvbnRhaW5lciAke2krK306ICR7Y29udGFpbmVyLm5hbWV9YCk7XG4gICAgICogICAgIH1cbiAgICAgKiAgIH1cbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIHBhZ2luZyB3aXRoIGEgbWFya2VyOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBsZXQgaSA9IDE7XG4gICAgICogbGV0IGl0ZXJhdG9yID0gYmxvYlNlcnZpY2VDbGllbnQubGlzdENvbnRhaW5lcnMoKS5ieVBhZ2UoeyBtYXhQYWdlU2l6ZTogMiB9KTtcbiAgICAgKiBsZXQgcmVzcG9uc2UgPSAoYXdhaXQgaXRlcmF0b3IubmV4dCgpKS52YWx1ZTtcbiAgICAgKlxuICAgICAqIC8vIFByaW50cyAyIGNvbnRhaW5lciBuYW1lc1xuICAgICAqIGlmIChyZXNwb25zZS5jb250YWluZXJJdGVtcykge1xuICAgICAqICAgZm9yIChjb25zdCBjb250YWluZXIgb2YgcmVzcG9uc2UuY29udGFpbmVySXRlbXMpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coYENvbnRhaW5lciAke2krK306ICR7Y29udGFpbmVyLm5hbWV9YCk7XG4gICAgICogICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICogLy8gR2V0cyBuZXh0IG1hcmtlclxuICAgICAqIGxldCBtYXJrZXIgPSByZXNwb25zZS5jb250aW51YXRpb25Ub2tlbjtcbiAgICAgKiAvLyBQYXNzaW5nIG5leHQgbWFya2VyIGFzIGNvbnRpbnVhdGlvblRva2VuXG4gICAgICogaXRlcmF0b3IgPSBibG9iU2VydmljZUNsaWVudFxuICAgICAqICAgLmxpc3RDb250YWluZXJzKClcbiAgICAgKiAgIC5ieVBhZ2UoeyBjb250aW51YXRpb25Ub2tlbjogbWFya2VyLCBtYXhQYWdlU2l6ZTogMTAgfSk7XG4gICAgICogcmVzcG9uc2UgPSAoYXdhaXQgaXRlcmF0b3IubmV4dCgpKS52YWx1ZTtcbiAgICAgKlxuICAgICAqIC8vIFByaW50cyAxMCBjb250YWluZXIgbmFtZXNcbiAgICAgKiBpZiAocmVzcG9uc2UuY29udGFpbmVySXRlbXMpIHtcbiAgICAgKiAgIGZvciAoY29uc3QgY29udGFpbmVyIG9mIHJlc3BvbnNlLmNvbnRhaW5lckl0ZW1zKSB7XG4gICAgICogICAgICBjb25zb2xlLmxvZyhgQ29udGFpbmVyICR7aSsrfTogJHtjb250YWluZXIubmFtZX1gKTtcbiAgICAgKiAgIH1cbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gbGlzdCBjb250YWluZXJzLlxuICAgICAqIEByZXR1cm5zIEFuIGFzeW5jSXRlcmFibGVJdGVyYXRvciB0aGF0IHN1cHBvcnRzIHBhZ2luZy5cbiAgICAgKi9cbiAgICBsaXN0Q29udGFpbmVycyhvcHRpb25zID0ge30pIHtcbiAgICAgICAgaWYgKG9wdGlvbnMucHJlZml4ID09PSBcIlwiKSB7XG4gICAgICAgICAgICBvcHRpb25zLnByZWZpeCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbmNsdWRlID0gW107XG4gICAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVEZWxldGVkKSB7XG4gICAgICAgICAgICBpbmNsdWRlLnB1c2goXCJkZWxldGVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVNZXRhZGF0YSkge1xuICAgICAgICAgICAgaW5jbHVkZS5wdXNoKFwibWV0YWRhdGFcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZVN5c3RlbSkge1xuICAgICAgICAgICAgaW5jbHVkZS5wdXNoKFwic3lzdGVtXCIpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEFzeW5jSXRlcmFibGVJdGVyYXRvciB0byBpdGVyYXRlIG92ZXIgY29udGFpbmVyc1xuICAgICAgICBjb25zdCBsaXN0U2VnbWVudE9wdGlvbnMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMpLCAoaW5jbHVkZS5sZW5ndGggPiAwID8geyBpbmNsdWRlIH0gOiB7fSkpO1xuICAgICAgICBjb25zdCBpdGVyID0gdGhpcy5saXN0SXRlbXMobGlzdFNlZ21lbnRPcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVGhlIG5leHQgbWV0aG9kLCBwYXJ0IG9mIHRoZSBpdGVyYXRpb24gcHJvdG9jb2xcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgbmV4dCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlci5uZXh0KCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBUaGUgY29ubmVjdGlvbiB0byB0aGUgYXN5bmMgaXRlcmF0b3IsIHBhcnQgb2YgdGhlIGl0ZXJhdGlvbiBwcm90b2NvbFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogUmV0dXJuIGFuIEFzeW5jSXRlcmFibGVJdGVyYXRvciB0aGF0IHdvcmtzIGEgcGFnZSBhdCBhIHRpbWVcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgYnlQYWdlOiAoc2V0dGluZ3MgPSB7fSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxpc3RTZWdtZW50cyhzZXR0aW5ncy5jb250aW51YXRpb25Ub2tlbiwgT2JqZWN0LmFzc2lnbih7IG1heFBhZ2VTaXplOiBzZXR0aW5ncy5tYXhQYWdlU2l6ZSB9LCBsaXN0U2VnbWVudE9wdGlvbnMpKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE9OTFkgQVZBSUxBQkxFIFdIRU4gVVNJTkcgQkVBUkVSIFRPS0VOIEFVVEhFTlRJQ0FUSU9OIChUb2tlbkNyZWRlbnRpYWwpLlxuICAgICAqXG4gICAgICogUmV0cmlldmVzIGEgdXNlciBkZWxlZ2F0aW9uIGtleSBmb3IgdGhlIEJsb2Igc2VydmljZS4gVGhpcyBpcyBvbmx5IGEgdmFsaWQgb3BlcmF0aW9uIHdoZW4gdXNpbmdcbiAgICAgKiBiZWFyZXIgdG9rZW4gYXV0aGVudGljYXRpb24uXG4gICAgICpcbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9nZXQtdXNlci1kZWxlZ2F0aW9uLWtleVxuICAgICAqXG4gICAgICogQHBhcmFtIHN0YXJ0c09uIC0gICAgICBUaGUgc3RhcnQgdGltZSBmb3IgdGhlIHVzZXIgZGVsZWdhdGlvbiBTQVMuIE11c3QgYmUgd2l0aGluIDcgZGF5cyBvZiB0aGUgY3VycmVudCB0aW1lXG4gICAgICogQHBhcmFtIGV4cGlyZXNPbiAtICAgICBUaGUgZW5kIHRpbWUgZm9yIHRoZSB1c2VyIGRlbGVnYXRpb24gU0FTLiBNdXN0IGJlIHdpdGhpbiA3IGRheXMgb2YgdGhlIGN1cnJlbnQgdGltZVxuICAgICAqL1xuICAgIGFzeW5jIGdldFVzZXJEZWxlZ2F0aW9uS2V5KHN0YXJ0c09uLCBleHBpcmVzT24sIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JTZXJ2aWNlQ2xpZW50LWdldFVzZXJEZWxlZ2F0aW9uS2V5XCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLnNlcnZpY2VDb250ZXh0LmdldFVzZXJEZWxlZ2F0aW9uS2V5KHtcbiAgICAgICAgICAgICAgICBzdGFydHNPbjogdHJ1bmNhdGVkSVNPODA2MURhdGUoc3RhcnRzT24sIGZhbHNlKSxcbiAgICAgICAgICAgICAgICBleHBpcmVzT246IHRydW5jYXRlZElTTzgwNjFEYXRlKGV4cGlyZXNPbiwgZmFsc2UpLFxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIGNvbnN0IHVzZXJEZWxlZ2F0aW9uS2V5ID0ge1xuICAgICAgICAgICAgICAgIHNpZ25lZE9iamVjdElkOiByZXNwb25zZS5zaWduZWRPYmplY3RJZCxcbiAgICAgICAgICAgICAgICBzaWduZWRUZW5hbnRJZDogcmVzcG9uc2Uuc2lnbmVkVGVuYW50SWQsXG4gICAgICAgICAgICAgICAgc2lnbmVkU3RhcnRzT246IG5ldyBEYXRlKHJlc3BvbnNlLnNpZ25lZFN0YXJ0c09uKSxcbiAgICAgICAgICAgICAgICBzaWduZWRFeHBpcmVzT246IG5ldyBEYXRlKHJlc3BvbnNlLnNpZ25lZEV4cGlyZXNPbiksXG4gICAgICAgICAgICAgICAgc2lnbmVkU2VydmljZTogcmVzcG9uc2Uuc2lnbmVkU2VydmljZSxcbiAgICAgICAgICAgICAgICBzaWduZWRWZXJzaW9uOiByZXNwb25zZS5zaWduZWRWZXJzaW9uLFxuICAgICAgICAgICAgICAgIHZhbHVlOiByZXNwb25zZS52YWx1ZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCByZXMgPSBPYmplY3QuYXNzaWduKHsgX3Jlc3BvbnNlOiByZXNwb25zZS5fcmVzcG9uc2UsIHJlcXVlc3RJZDogcmVzcG9uc2UucmVxdWVzdElkLCBjbGllbnRSZXF1ZXN0SWQ6IHJlc3BvbnNlLmNsaWVudFJlcXVlc3RJZCwgdmVyc2lvbjogcmVzcG9uc2UudmVyc2lvbiwgZGF0ZTogcmVzcG9uc2UuZGF0ZSwgZXJyb3JDb2RlOiByZXNwb25zZS5lcnJvckNvZGUgfSwgdXNlckRlbGVnYXRpb25LZXkpO1xuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBCbG9iQmF0Y2hDbGllbnQgb2JqZWN0IHRvIGNvbmR1Y3QgYmF0Y2ggb3BlcmF0aW9ucy5cbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2Jsb2ItYmF0Y2hcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIEEgbmV3IEJsb2JCYXRjaENsaWVudCBvYmplY3QgZm9yIHRoaXMgc2VydmljZS5cbiAgICAgKi9cbiAgICBnZXRCbG9iQmF0Y2hDbGllbnQoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQmxvYkJhdGNoQ2xpZW50KHRoaXMudXJsLCB0aGlzLnBpcGVsaW5lKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogT25seSBhdmFpbGFibGUgZm9yIEJsb2JTZXJ2aWNlQ2xpZW50IGNvbnN0cnVjdGVkIHdpdGggYSBzaGFyZWQga2V5IGNyZWRlbnRpYWwuXG4gICAgICpcbiAgICAgKiBHZW5lcmF0ZXMgYSBCbG9iIGFjY291bnQgU2hhcmVkIEFjY2VzcyBTaWduYXR1cmUgKFNBUykgVVJJIGJhc2VkIG9uIHRoZSBjbGllbnQgcHJvcGVydGllc1xuICAgICAqIGFuZCBwYXJhbWV0ZXJzIHBhc3NlZCBpbi4gVGhlIFNBUyBpcyBzaWduZWQgYnkgdGhlIHNoYXJlZCBrZXkgY3JlZGVudGlhbCBvZiB0aGUgY2xpZW50LlxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvY3JlYXRlLWFjY291bnQtc2FzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXhwaXJlc09uIC0gT3B0aW9uYWwuIFRoZSB0aW1lIGF0IHdoaWNoIHRoZSBzaGFyZWQgYWNjZXNzIHNpZ25hdHVyZSBiZWNvbWVzIGludmFsaWQuIERlZmF1bHQgdG8gYW4gaG91ciBsYXRlciBpZiBub3QgcHJvdmlkZWQuXG4gICAgICogQHBhcmFtIHBlcm1pc3Npb25zIC0gU3BlY2lmaWVzIHRoZSBsaXN0IG9mIHBlcm1pc3Npb25zIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgU0FTLlxuICAgICAqIEBwYXJhbSByZXNvdXJjZVR5cGVzIC0gU3BlY2lmaWVzIHRoZSByZXNvdXJjZSB0eXBlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHNoYXJlZCBhY2Nlc3Mgc2lnbmF0dXJlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgcGFyYW1ldGVycy5cbiAgICAgKiBAcmV0dXJucyBBbiBhY2NvdW50IFNBUyBVUkkgY29uc2lzdGluZyBvZiB0aGUgVVJJIHRvIHRoZSByZXNvdXJjZSByZXByZXNlbnRlZCBieSB0aGlzIGNsaWVudCwgZm9sbG93ZWQgYnkgdGhlIGdlbmVyYXRlZCBTQVMgdG9rZW4uXG4gICAgICovXG4gICAgZ2VuZXJhdGVBY2NvdW50U2FzVXJsKGV4cGlyZXNPbiwgcGVybWlzc2lvbnMgPSBBY2NvdW50U0FTUGVybWlzc2lvbnMucGFyc2UoXCJyXCIpLCByZXNvdXJjZVR5cGVzID0gXCJzY29cIiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGlmICghKHRoaXMuY3JlZGVudGlhbCBpbnN0YW5jZW9mIFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsKSkge1xuICAgICAgICAgICAgdGhyb3cgUmFuZ2VFcnJvcihcIkNhbiBvbmx5IGdlbmVyYXRlIHRoZSBhY2NvdW50IFNBUyB3aGVuIHRoZSBjbGllbnQgaXMgaW5pdGlhbGl6ZWQgd2l0aCBhIHNoYXJlZCBrZXkgY3JlZGVudGlhbFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXhwaXJlc09uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgICAgICAgICBleHBpcmVzT24gPSBuZXcgRGF0ZShub3cuZ2V0VGltZSgpICsgMzYwMCAqIDEwMDApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNhcyA9IGdlbmVyYXRlQWNjb3VudFNBU1F1ZXJ5UGFyYW1ldGVycyhPYmplY3QuYXNzaWduKHsgcGVybWlzc2lvbnMsXG4gICAgICAgICAgICBleHBpcmVzT24sXG4gICAgICAgICAgICByZXNvdXJjZVR5cGVzLCBzZXJ2aWNlczogQWNjb3VudFNBU1NlcnZpY2VzLnBhcnNlKFwiYlwiKS50b1N0cmluZygpIH0sIG9wdGlvbnMpLCB0aGlzLmNyZWRlbnRpYWwpLnRvU3RyaW5nKCk7XG4gICAgICAgIHJldHVybiBhcHBlbmRUb1VSTFF1ZXJ5KHRoaXMudXJsLCBzYXMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBPbmx5IGF2YWlsYWJsZSBmb3IgQmxvYlNlcnZpY2VDbGllbnQgY29uc3RydWN0ZWQgd2l0aCBhIHNoYXJlZCBrZXkgY3JlZGVudGlhbC5cbiAgICAgKlxuICAgICAqIEdlbmVyYXRlcyBzdHJpbmcgdG8gc2lnbiBmb3IgYSBCbG9iIGFjY291bnQgU2hhcmVkIEFjY2VzcyBTaWduYXR1cmUgKFNBUykgVVJJIGJhc2VkIG9uXG4gICAgICogdGhlIGNsaWVudCBwcm9wZXJ0aWVzIGFuZCBwYXJhbWV0ZXJzIHBhc3NlZCBpbi4gVGhlIFNBUyBpcyBzaWduZWQgYnkgdGhlIHNoYXJlZCBrZXkgY3JlZGVudGlhbCBvZiB0aGUgY2xpZW50LlxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvY3JlYXRlLWFjY291bnQtc2FzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXhwaXJlc09uIC0gT3B0aW9uYWwuIFRoZSB0aW1lIGF0IHdoaWNoIHRoZSBzaGFyZWQgYWNjZXNzIHNpZ25hdHVyZSBiZWNvbWVzIGludmFsaWQuIERlZmF1bHQgdG8gYW4gaG91ciBsYXRlciBpZiBub3QgcHJvdmlkZWQuXG4gICAgICogQHBhcmFtIHBlcm1pc3Npb25zIC0gU3BlY2lmaWVzIHRoZSBsaXN0IG9mIHBlcm1pc3Npb25zIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgU0FTLlxuICAgICAqIEBwYXJhbSByZXNvdXJjZVR5cGVzIC0gU3BlY2lmaWVzIHRoZSByZXNvdXJjZSB0eXBlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHNoYXJlZCBhY2Nlc3Mgc2lnbmF0dXJlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgcGFyYW1ldGVycy5cbiAgICAgKiBAcmV0dXJucyBBbiBhY2NvdW50IFNBUyBVUkkgY29uc2lzdGluZyBvZiB0aGUgVVJJIHRvIHRoZSByZXNvdXJjZSByZXByZXNlbnRlZCBieSB0aGlzIGNsaWVudCwgZm9sbG93ZWQgYnkgdGhlIGdlbmVyYXRlZCBTQVMgdG9rZW4uXG4gICAgICovXG4gICAgZ2VuZXJhdGVTYXNTdHJpbmdUb1NpZ24oZXhwaXJlc09uLCBwZXJtaXNzaW9ucyA9IEFjY291bnRTQVNQZXJtaXNzaW9ucy5wYXJzZShcInJcIiksIHJlc291cmNlVHlwZXMgPSBcInNjb1wiLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgaWYgKCEodGhpcy5jcmVkZW50aWFsIGluc3RhbmNlb2YgU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwpKSB7XG4gICAgICAgICAgICB0aHJvdyBSYW5nZUVycm9yKFwiQ2FuIG9ubHkgZ2VuZXJhdGUgdGhlIGFjY291bnQgU0FTIHdoZW4gdGhlIGNsaWVudCBpcyBpbml0aWFsaXplZCB3aXRoIGEgc2hhcmVkIGtleSBjcmVkZW50aWFsXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChleHBpcmVzT24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICAgICAgICAgIGV4cGlyZXNPbiA9IG5ldyBEYXRlKG5vdy5nZXRUaW1lKCkgKyAzNjAwICogMTAwMCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdlbmVyYXRlQWNjb3VudFNBU1F1ZXJ5UGFyYW1ldGVyc0ludGVybmFsKE9iamVjdC5hc3NpZ24oeyBwZXJtaXNzaW9ucyxcbiAgICAgICAgICAgIGV4cGlyZXNPbixcbiAgICAgICAgICAgIHJlc291cmNlVHlwZXMsIHNlcnZpY2VzOiBBY2NvdW50U0FTU2VydmljZXMucGFyc2UoXCJiXCIpLnRvU3RyaW5nKCkgfSwgb3B0aW9ucyksIHRoaXMuY3JlZGVudGlhbCkuc3RyaW5nVG9TaWduO1xuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKiogS25vd24gdmFsdWVzIG9mIHtAbGluayBFbmNyeXB0aW9uQWxnb3JpdGhtVHlwZX0gdGhhdCB0aGUgc2VydmljZSBhY2NlcHRzLiAqL1xuZXhwb3J0cy5Lbm93bkVuY3J5cHRpb25BbGdvcml0aG1UeXBlID0gdm9pZCAwO1xuKGZ1bmN0aW9uIChLbm93bkVuY3J5cHRpb25BbGdvcml0aG1UeXBlKSB7XG4gICAgS25vd25FbmNyeXB0aW9uQWxnb3JpdGhtVHlwZVtcIkFFUzI1NlwiXSA9IFwiQUVTMjU2XCI7XG59KShleHBvcnRzLktub3duRW5jcnlwdGlvbkFsZ29yaXRobVR5cGUgfHwgKGV4cG9ydHMuS25vd25FbmNyeXB0aW9uQWxnb3JpdGhtVHlwZSA9IHt9KSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlJlc3RFcnJvclwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvcmVSZXN0UGlwZWxpbmUuUmVzdEVycm9yOyB9XG59KTtcbmV4cG9ydHMuQWNjb3VudFNBU1Blcm1pc3Npb25zID0gQWNjb3VudFNBU1Blcm1pc3Npb25zO1xuZXhwb3J0cy5BY2NvdW50U0FTUmVzb3VyY2VUeXBlcyA9IEFjY291bnRTQVNSZXNvdXJjZVR5cGVzO1xuZXhwb3J0cy5BY2NvdW50U0FTU2VydmljZXMgPSBBY2NvdW50U0FTU2VydmljZXM7XG5leHBvcnRzLkFub255bW91c0NyZWRlbnRpYWwgPSBBbm9ueW1vdXNDcmVkZW50aWFsO1xuZXhwb3J0cy5Bbm9ueW1vdXNDcmVkZW50aWFsUG9saWN5ID0gQW5vbnltb3VzQ3JlZGVudGlhbFBvbGljeTtcbmV4cG9ydHMuQXBwZW5kQmxvYkNsaWVudCA9IEFwcGVuZEJsb2JDbGllbnQ7XG5leHBvcnRzLkJhc2VSZXF1ZXN0UG9saWN5ID0gQmFzZVJlcXVlc3RQb2xpY3k7XG5leHBvcnRzLkJsb2JCYXRjaCA9IEJsb2JCYXRjaDtcbmV4cG9ydHMuQmxvYkJhdGNoQ2xpZW50ID0gQmxvYkJhdGNoQ2xpZW50O1xuZXhwb3J0cy5CbG9iQ2xpZW50ID0gQmxvYkNsaWVudDtcbmV4cG9ydHMuQmxvYkxlYXNlQ2xpZW50ID0gQmxvYkxlYXNlQ2xpZW50O1xuZXhwb3J0cy5CbG9iU0FTUGVybWlzc2lvbnMgPSBCbG9iU0FTUGVybWlzc2lvbnM7XG5leHBvcnRzLkJsb2JTZXJ2aWNlQ2xpZW50ID0gQmxvYlNlcnZpY2VDbGllbnQ7XG5leHBvcnRzLkJsb2NrQmxvYkNsaWVudCA9IEJsb2NrQmxvYkNsaWVudDtcbmV4cG9ydHMuQ29udGFpbmVyQ2xpZW50ID0gQ29udGFpbmVyQ2xpZW50O1xuZXhwb3J0cy5Db250YWluZXJTQVNQZXJtaXNzaW9ucyA9IENvbnRhaW5lclNBU1Blcm1pc3Npb25zO1xuZXhwb3J0cy5DcmVkZW50aWFsID0gQ3JlZGVudGlhbDtcbmV4cG9ydHMuQ3JlZGVudGlhbFBvbGljeSA9IENyZWRlbnRpYWxQb2xpY3k7XG5leHBvcnRzLlBhZ2VCbG9iQ2xpZW50ID0gUGFnZUJsb2JDbGllbnQ7XG5leHBvcnRzLlBpcGVsaW5lID0gUGlwZWxpbmU7XG5leHBvcnRzLlNBU1F1ZXJ5UGFyYW1ldGVycyA9IFNBU1F1ZXJ5UGFyYW1ldGVycztcbmV4cG9ydHMuU3RvcmFnZUJyb3dzZXJQb2xpY3kgPSBTdG9yYWdlQnJvd3NlclBvbGljeTtcbmV4cG9ydHMuU3RvcmFnZUJyb3dzZXJQb2xpY3lGYWN0b3J5ID0gU3RvcmFnZUJyb3dzZXJQb2xpY3lGYWN0b3J5O1xuZXhwb3J0cy5TdG9yYWdlT0F1dGhTY29wZXMgPSBTdG9yYWdlT0F1dGhTY29wZXM7XG5leHBvcnRzLlN0b3JhZ2VSZXRyeVBvbGljeSA9IFN0b3JhZ2VSZXRyeVBvbGljeTtcbmV4cG9ydHMuU3RvcmFnZVJldHJ5UG9saWN5RmFjdG9yeSA9IFN0b3JhZ2VSZXRyeVBvbGljeUZhY3Rvcnk7XG5leHBvcnRzLlN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsID0gU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWw7XG5leHBvcnRzLlN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsUG9saWN5ID0gU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWxQb2xpY3k7XG5leHBvcnRzLmdlbmVyYXRlQWNjb3VudFNBU1F1ZXJ5UGFyYW1ldGVycyA9IGdlbmVyYXRlQWNjb3VudFNBU1F1ZXJ5UGFyYW1ldGVycztcbmV4cG9ydHMuZ2VuZXJhdGVCbG9iU0FTUXVlcnlQYXJhbWV0ZXJzID0gZ2VuZXJhdGVCbG9iU0FTUXVlcnlQYXJhbWV0ZXJzO1xuZXhwb3J0cy5nZXRCbG9iU2VydmljZUFjY291bnRBdWRpZW5jZSA9IGdldEJsb2JTZXJ2aWNlQWNjb3VudEF1ZGllbmNlO1xuZXhwb3J0cy5pc1BpcGVsaW5lTGlrZSA9IGlzUGlwZWxpbmVMaWtlO1xuZXhwb3J0cy5sb2dnZXIgPSBsb2dnZXI7XG5leHBvcnRzLm5ld1BpcGVsaW5lID0gbmV3UGlwZWxpbmU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy51cGxvYWRaaXBUb0Jsb2JTdG9yYWdlID0gdm9pZCAwO1xuY29uc3Qgc3RvcmFnZV9ibG9iXzEgPSByZXF1aXJlKFwiQGF6dXJlL3N0b3JhZ2UtYmxvYlwiKTtcbmNvbnN0IGNvbmZpZ18xID0gcmVxdWlyZShcIi4uL3NoYXJlZC9jb25maWdcIik7XG5jb25zdCBjb3JlID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJAYWN0aW9ucy9jb3JlXCIpKTtcbmNvbnN0IGNyeXB0byA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiY3J5cHRvXCIpKTtcbmNvbnN0IHN0cmVhbSA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwic3RyZWFtXCIpKTtcbmNvbnN0IGVycm9yc18xID0gcmVxdWlyZShcIi4uL3NoYXJlZC9lcnJvcnNcIik7XG5mdW5jdGlvbiB1cGxvYWRaaXBUb0Jsb2JTdG9yYWdlKGF1dGhlbnRpY2F0ZWRVcGxvYWRVUkwsIHppcFVwbG9hZFN0cmVhbSkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGxldCB1cGxvYWRCeXRlQ291bnQgPSAwO1xuICAgICAgICBsZXQgbGFzdFByb2dyZXNzVGltZSA9IERhdGUubm93KCk7XG4gICAgICAgIGNvbnN0IGFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICAgICAgY29uc3QgY2h1bmtUaW1lciA9IChpbnRlcnZhbCkgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lciA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKERhdGUubm93KCkgLSBsYXN0UHJvZ3Jlc3NUaW1lID4gaW50ZXJ2YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ1VwbG9hZCBwcm9ncmVzcyBzdGFsbGVkLicpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIGludGVydmFsKTtcbiAgICAgICAgICAgICAgICBhYm9ydENvbnRyb2xsZXIuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKHRpbWVyKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBtYXhDb25jdXJyZW5jeSA9ICgwLCBjb25maWdfMS5nZXRDb25jdXJyZW5jeSkoKTtcbiAgICAgICAgY29uc3QgYnVmZmVyU2l6ZSA9ICgwLCBjb25maWdfMS5nZXRVcGxvYWRDaHVua1NpemUpKCk7XG4gICAgICAgIGNvbnN0IGJsb2JDbGllbnQgPSBuZXcgc3RvcmFnZV9ibG9iXzEuQmxvYkNsaWVudChhdXRoZW50aWNhdGVkVXBsb2FkVVJMKTtcbiAgICAgICAgY29uc3QgYmxvY2tCbG9iQ2xpZW50ID0gYmxvYkNsaWVudC5nZXRCbG9ja0Jsb2JDbGllbnQoKTtcbiAgICAgICAgY29yZS5kZWJ1ZyhgVXBsb2FkaW5nIGFydGlmYWN0IHppcCB0byBibG9iIHN0b3JhZ2Ugd2l0aCBtYXhDb25jdXJyZW5jeTogJHttYXhDb25jdXJyZW5jeX0sIGJ1ZmZlclNpemU6ICR7YnVmZmVyU2l6ZX1gKTtcbiAgICAgICAgY29uc3QgdXBsb2FkQ2FsbGJhY2sgPSAocHJvZ3Jlc3MpID0+IHtcbiAgICAgICAgICAgIGNvcmUuaW5mbyhgVXBsb2FkZWQgYnl0ZXMgJHtwcm9ncmVzcy5sb2FkZWRCeXRlc31gKTtcbiAgICAgICAgICAgIHVwbG9hZEJ5dGVDb3VudCA9IHByb2dyZXNzLmxvYWRlZEJ5dGVzO1xuICAgICAgICAgICAgbGFzdFByb2dyZXNzVGltZSA9IERhdGUubm93KCk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBibG9iSFRUUEhlYWRlcnM6IHsgYmxvYkNvbnRlbnRUeXBlOiAnemlwJyB9LFxuICAgICAgICAgICAgb25Qcm9ncmVzczogdXBsb2FkQ2FsbGJhY2ssXG4gICAgICAgICAgICBhYm9ydFNpZ25hbDogYWJvcnRDb250cm9sbGVyLnNpZ25hbFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2hhMjU2SGFzaCA9IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgdXBsb2FkU3RyZWFtID0gbmV3IHN0cmVhbS5QYXNzVGhyb3VnaCgpO1xuICAgICAgICBjb25zdCBoYXNoU3RyZWFtID0gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTI1NicpO1xuICAgICAgICB6aXBVcGxvYWRTdHJlYW0ucGlwZSh1cGxvYWRTdHJlYW0pOyAvLyBUaGlzIHN0cmVhbSBpcyB1c2VkIGZvciB0aGUgdXBsb2FkXG4gICAgICAgIHppcFVwbG9hZFN0cmVhbS5waXBlKGhhc2hTdHJlYW0pLnNldEVuY29kaW5nKCdoZXgnKTsgLy8gVGhpcyBzdHJlYW0gaXMgdXNlZCB0byBjb21wdXRlIGEgaGFzaCBvZiB0aGUgemlwIGNvbnRlbnQgdGhhdCBnZXRzIHVzZWQuIEludGVncml0eSBjaGVja1xuICAgICAgICBjb3JlLmluZm8oJ0JlZ2lubmluZyB1cGxvYWQgb2YgYXJ0aWZhY3QgY29udGVudCB0byBibG9iIHN0b3JhZ2UnKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHlpZWxkIFByb21pc2UucmFjZShbXG4gICAgICAgICAgICAgICAgYmxvY2tCbG9iQ2xpZW50LnVwbG9hZFN0cmVhbSh1cGxvYWRTdHJlYW0sIGJ1ZmZlclNpemUsIG1heENvbmN1cnJlbmN5LCBvcHRpb25zKSxcbiAgICAgICAgICAgICAgICBjaHVua1RpbWVyKCgwLCBjb25maWdfMS5nZXRVcGxvYWRDaHVua1RpbWVvdXQpKCkpXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChlcnJvcnNfMS5OZXR3b3JrRXJyb3IuaXNOZXR3b3JrRXJyb3JDb2RlKGVycm9yID09PSBudWxsIHx8IGVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlcnJvci5jb2RlKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBlcnJvcnNfMS5OZXR3b3JrRXJyb3IoZXJyb3IgPT09IG51bGwgfHwgZXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGVycm9yLmNvZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBhYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICAgICAgfVxuICAgICAgICBjb3JlLmluZm8oJ0ZpbmlzaGVkIHVwbG9hZGluZyBhcnRpZmFjdCBjb250ZW50IHRvIGJsb2Igc3RvcmFnZSEnKTtcbiAgICAgICAgaGFzaFN0cmVhbS5lbmQoKTtcbiAgICAgICAgc2hhMjU2SGFzaCA9IGhhc2hTdHJlYW0ucmVhZCgpO1xuICAgICAgICBjb3JlLmluZm8oYFNIQTI1NiBoYXNoIG9mIHVwbG9hZGVkIGFydGlmYWN0IHppcCBpcyAke3NoYTI1Nkhhc2h9YCk7XG4gICAgICAgIGlmICh1cGxvYWRCeXRlQ291bnQgPT09IDApIHtcbiAgICAgICAgICAgIGNvcmUud2FybmluZyhgTm8gZGF0YSB3YXMgdXBsb2FkZWQgdG8gYmxvYiBzdG9yYWdlLiBSZXBvcnRlZCB1cGxvYWQgYnl0ZSBjb3VudCBpcyAwLmApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB1cGxvYWRTaXplOiB1cGxvYWRCeXRlQ291bnQsXG4gICAgICAgICAgICBzaGEyNTZIYXNoXG4gICAgICAgIH07XG4gICAgfSk7XG59XG5leHBvcnRzLnVwbG9hZFppcFRvQmxvYlN0b3JhZ2UgPSB1cGxvYWRaaXBUb0Jsb2JTdG9yYWdlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YmxvYi11cGxvYWQuanMubWFwIiwKICAgICJjb25zdCBpc1dpbmRvd3MgPSB0eXBlb2YgcHJvY2VzcyA9PT0gJ29iamVjdCcgJiZcbiAgcHJvY2VzcyAmJlxuICBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInXG5tb2R1bGUuZXhwb3J0cyA9IGlzV2luZG93cyA/IHsgc2VwOiAnXFxcXCcgfSA6IHsgc2VwOiAnLycgfVxuIiwKICAgICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGJhbGFuY2VkO1xuZnVuY3Rpb24gYmFsYW5jZWQoYSwgYiwgc3RyKSB7XG4gIGlmIChhIGluc3RhbmNlb2YgUmVnRXhwKSBhID0gbWF5YmVNYXRjaChhLCBzdHIpO1xuICBpZiAoYiBpbnN0YW5jZW9mIFJlZ0V4cCkgYiA9IG1heWJlTWF0Y2goYiwgc3RyKTtcblxuICB2YXIgciA9IHJhbmdlKGEsIGIsIHN0cik7XG5cbiAgcmV0dXJuIHIgJiYge1xuICAgIHN0YXJ0OiByWzBdLFxuICAgIGVuZDogclsxXSxcbiAgICBwcmU6IHN0ci5zbGljZSgwLCByWzBdKSxcbiAgICBib2R5OiBzdHIuc2xpY2UoclswXSArIGEubGVuZ3RoLCByWzFdKSxcbiAgICBwb3N0OiBzdHIuc2xpY2UoclsxXSArIGIubGVuZ3RoKVxuICB9O1xufVxuXG5mdW5jdGlvbiBtYXliZU1hdGNoKHJlZywgc3RyKSB7XG4gIHZhciBtID0gc3RyLm1hdGNoKHJlZyk7XG4gIHJldHVybiBtID8gbVswXSA6IG51bGw7XG59XG5cbmJhbGFuY2VkLnJhbmdlID0gcmFuZ2U7XG5mdW5jdGlvbiByYW5nZShhLCBiLCBzdHIpIHtcbiAgdmFyIGJlZ3MsIGJlZywgbGVmdCwgcmlnaHQsIHJlc3VsdDtcbiAgdmFyIGFpID0gc3RyLmluZGV4T2YoYSk7XG4gIHZhciBiaSA9IHN0ci5pbmRleE9mKGIsIGFpICsgMSk7XG4gIHZhciBpID0gYWk7XG5cbiAgaWYgKGFpID49IDAgJiYgYmkgPiAwKSB7XG4gICAgaWYoYT09PWIpIHtcbiAgICAgIHJldHVybiBbYWksIGJpXTtcbiAgICB9XG4gICAgYmVncyA9IFtdO1xuICAgIGxlZnQgPSBzdHIubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGkgPj0gMCAmJiAhcmVzdWx0KSB7XG4gICAgICBpZiAoaSA9PSBhaSkge1xuICAgICAgICBiZWdzLnB1c2goaSk7XG4gICAgICAgIGFpID0gc3RyLmluZGV4T2YoYSwgaSArIDEpO1xuICAgICAgfSBlbHNlIGlmIChiZWdzLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgIHJlc3VsdCA9IFsgYmVncy5wb3AoKSwgYmkgXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJlZyA9IGJlZ3MucG9wKCk7XG4gICAgICAgIGlmIChiZWcgPCBsZWZ0KSB7XG4gICAgICAgICAgbGVmdCA9IGJlZztcbiAgICAgICAgICByaWdodCA9IGJpO1xuICAgICAgICB9XG5cbiAgICAgICAgYmkgPSBzdHIuaW5kZXhPZihiLCBpICsgMSk7XG4gICAgICB9XG5cbiAgICAgIGkgPSBhaSA8IGJpICYmIGFpID49IDAgPyBhaSA6IGJpO1xuICAgIH1cblxuICAgIGlmIChiZWdzLmxlbmd0aCkge1xuICAgICAgcmVzdWx0ID0gWyBsZWZ0LCByaWdodCBdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG4iLAogICAgInZhciBiYWxhbmNlZCA9IHJlcXVpcmUoJ2JhbGFuY2VkLW1hdGNoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZXhwYW5kVG9wO1xuXG52YXIgZXNjU2xhc2ggPSAnXFwwU0xBU0gnK01hdGgucmFuZG9tKCkrJ1xcMCc7XG52YXIgZXNjT3BlbiA9ICdcXDBPUEVOJytNYXRoLnJhbmRvbSgpKydcXDAnO1xudmFyIGVzY0Nsb3NlID0gJ1xcMENMT1NFJytNYXRoLnJhbmRvbSgpKydcXDAnO1xudmFyIGVzY0NvbW1hID0gJ1xcMENPTU1BJytNYXRoLnJhbmRvbSgpKydcXDAnO1xudmFyIGVzY1BlcmlvZCA9ICdcXDBQRVJJT0QnK01hdGgucmFuZG9tKCkrJ1xcMCc7XG5cbmZ1bmN0aW9uIG51bWVyaWMoc3RyKSB7XG4gIHJldHVybiBwYXJzZUludChzdHIsIDEwKSA9PSBzdHJcbiAgICA/IHBhcnNlSW50KHN0ciwgMTApXG4gICAgOiBzdHIuY2hhckNvZGVBdCgwKTtcbn1cblxuZnVuY3Rpb24gZXNjYXBlQnJhY2VzKHN0cikge1xuICByZXR1cm4gc3RyLnNwbGl0KCdcXFxcXFxcXCcpLmpvaW4oZXNjU2xhc2gpXG4gICAgICAgICAgICAuc3BsaXQoJ1xcXFx7Jykuam9pbihlc2NPcGVuKVxuICAgICAgICAgICAgLnNwbGl0KCdcXFxcfScpLmpvaW4oZXNjQ2xvc2UpXG4gICAgICAgICAgICAuc3BsaXQoJ1xcXFwsJykuam9pbihlc2NDb21tYSlcbiAgICAgICAgICAgIC5zcGxpdCgnXFxcXC4nKS5qb2luKGVzY1BlcmlvZCk7XG59XG5cbmZ1bmN0aW9uIHVuZXNjYXBlQnJhY2VzKHN0cikge1xuICByZXR1cm4gc3RyLnNwbGl0KGVzY1NsYXNoKS5qb2luKCdcXFxcJylcbiAgICAgICAgICAgIC5zcGxpdChlc2NPcGVuKS5qb2luKCd7JylcbiAgICAgICAgICAgIC5zcGxpdChlc2NDbG9zZSkuam9pbignfScpXG4gICAgICAgICAgICAuc3BsaXQoZXNjQ29tbWEpLmpvaW4oJywnKVxuICAgICAgICAgICAgLnNwbGl0KGVzY1BlcmlvZCkuam9pbignLicpO1xufVxuXG5cbi8vIEJhc2ljYWxseSBqdXN0IHN0ci5zcGxpdChcIixcIiksIGJ1dCBoYW5kbGluZyBjYXNlc1xuLy8gd2hlcmUgd2UgaGF2ZSBuZXN0ZWQgYnJhY2VkIHNlY3Rpb25zLCB3aGljaCBzaG91bGQgYmVcbi8vIHRyZWF0ZWQgYXMgaW5kaXZpZHVhbCBtZW1iZXJzLCBsaWtlIHthLHtiLGN9LGR9XG5mdW5jdGlvbiBwYXJzZUNvbW1hUGFydHMoc3RyKSB7XG4gIGlmICghc3RyKVxuICAgIHJldHVybiBbJyddO1xuXG4gIHZhciBwYXJ0cyA9IFtdO1xuICB2YXIgbSA9IGJhbGFuY2VkKCd7JywgJ30nLCBzdHIpO1xuXG4gIGlmICghbSlcbiAgICByZXR1cm4gc3RyLnNwbGl0KCcsJyk7XG5cbiAgdmFyIHByZSA9IG0ucHJlO1xuICB2YXIgYm9keSA9IG0uYm9keTtcbiAgdmFyIHBvc3QgPSBtLnBvc3Q7XG4gIHZhciBwID0gcHJlLnNwbGl0KCcsJyk7XG5cbiAgcFtwLmxlbmd0aC0xXSArPSAneycgKyBib2R5ICsgJ30nO1xuICB2YXIgcG9zdFBhcnRzID0gcGFyc2VDb21tYVBhcnRzKHBvc3QpO1xuICBpZiAocG9zdC5sZW5ndGgpIHtcbiAgICBwW3AubGVuZ3RoLTFdICs9IHBvc3RQYXJ0cy5zaGlmdCgpO1xuICAgIHAucHVzaC5hcHBseShwLCBwb3N0UGFydHMpO1xuICB9XG5cbiAgcGFydHMucHVzaC5hcHBseShwYXJ0cywgcCk7XG5cbiAgcmV0dXJuIHBhcnRzO1xufVxuXG5mdW5jdGlvbiBleHBhbmRUb3Aoc3RyKSB7XG4gIGlmICghc3RyKVxuICAgIHJldHVybiBbXTtcblxuICAvLyBJIGRvbid0IGtub3cgd2h5IEJhc2ggNC4zIGRvZXMgdGhpcywgYnV0IGl0IGRvZXMuXG4gIC8vIEFueXRoaW5nIHN0YXJ0aW5nIHdpdGgge30gd2lsbCBoYXZlIHRoZSBmaXJzdCB0d28gYnl0ZXMgcHJlc2VydmVkXG4gIC8vIGJ1dCAqb25seSogYXQgdGhlIHRvcCBsZXZlbCwgc28ge30sYX1iIHdpbGwgbm90IGV4cGFuZCB0byBhbnl0aGluZyxcbiAgLy8gYnV0IGF7fSxifWMgd2lsbCBiZSBleHBhbmRlZCB0byBbYX1jLGFiY10uXG4gIC8vIE9uZSBjb3VsZCBhcmd1ZSB0aGF0IHRoaXMgaXMgYSBidWcgaW4gQmFzaCwgYnV0IHNpbmNlIHRoZSBnb2FsIG9mXG4gIC8vIHRoaXMgbW9kdWxlIGlzIHRvIG1hdGNoIEJhc2gncyBydWxlcywgd2UgZXNjYXBlIGEgbGVhZGluZyB7fVxuICBpZiAoc3RyLnN1YnN0cigwLCAyKSA9PT0gJ3t9Jykge1xuICAgIHN0ciA9ICdcXFxce1xcXFx9JyArIHN0ci5zdWJzdHIoMik7XG4gIH1cblxuICByZXR1cm4gZXhwYW5kKGVzY2FwZUJyYWNlcyhzdHIpLCB0cnVlKS5tYXAodW5lc2NhcGVCcmFjZXMpO1xufVxuXG5mdW5jdGlvbiBlbWJyYWNlKHN0cikge1xuICByZXR1cm4gJ3snICsgc3RyICsgJ30nO1xufVxuZnVuY3Rpb24gaXNQYWRkZWQoZWwpIHtcbiAgcmV0dXJuIC9eLT8wXFxkLy50ZXN0KGVsKTtcbn1cblxuZnVuY3Rpb24gbHRlKGksIHkpIHtcbiAgcmV0dXJuIGkgPD0geTtcbn1cbmZ1bmN0aW9uIGd0ZShpLCB5KSB7XG4gIHJldHVybiBpID49IHk7XG59XG5cbmZ1bmN0aW9uIGV4cGFuZChzdHIsIGlzVG9wKSB7XG4gIHZhciBleHBhbnNpb25zID0gW107XG5cbiAgdmFyIG0gPSBiYWxhbmNlZCgneycsICd9Jywgc3RyKTtcbiAgaWYgKCFtKSByZXR1cm4gW3N0cl07XG5cbiAgLy8gbm8gbmVlZCB0byBleHBhbmQgcHJlLCBzaW5jZSBpdCBpcyBndWFyYW50ZWVkIHRvIGJlIGZyZWUgb2YgYnJhY2Utc2V0c1xuICB2YXIgcHJlID0gbS5wcmU7XG4gIHZhciBwb3N0ID0gbS5wb3N0Lmxlbmd0aFxuICAgID8gZXhwYW5kKG0ucG9zdCwgZmFsc2UpXG4gICAgOiBbJyddO1xuXG4gIGlmICgvXFwkJC8udGVzdChtLnByZSkpIHsgICAgXG4gICAgZm9yICh2YXIgayA9IDA7IGsgPCBwb3N0Lmxlbmd0aDsgaysrKSB7XG4gICAgICB2YXIgZXhwYW5zaW9uID0gcHJlKyAneycgKyBtLmJvZHkgKyAnfScgKyBwb3N0W2tdO1xuICAgICAgZXhwYW5zaW9ucy5wdXNoKGV4cGFuc2lvbik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBpc051bWVyaWNTZXF1ZW5jZSA9IC9eLT9cXGQrXFwuXFwuLT9cXGQrKD86XFwuXFwuLT9cXGQrKT8kLy50ZXN0KG0uYm9keSk7XG4gICAgdmFyIGlzQWxwaGFTZXF1ZW5jZSA9IC9eW2EtekEtWl1cXC5cXC5bYS16QS1aXSg/OlxcLlxcLi0/XFxkKyk/JC8udGVzdChtLmJvZHkpO1xuICAgIHZhciBpc1NlcXVlbmNlID0gaXNOdW1lcmljU2VxdWVuY2UgfHwgaXNBbHBoYVNlcXVlbmNlO1xuICAgIHZhciBpc09wdGlvbnMgPSBtLmJvZHkuaW5kZXhPZignLCcpID49IDA7XG4gICAgaWYgKCFpc1NlcXVlbmNlICYmICFpc09wdGlvbnMpIHtcbiAgICAgIC8vIHthfSxifVxuICAgICAgaWYgKG0ucG9zdC5tYXRjaCgvLC4qXFx9LykpIHtcbiAgICAgICAgc3RyID0gbS5wcmUgKyAneycgKyBtLmJvZHkgKyBlc2NDbG9zZSArIG0ucG9zdDtcbiAgICAgICAgcmV0dXJuIGV4cGFuZChzdHIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFtzdHJdO1xuICAgIH1cblxuICAgIHZhciBuO1xuICAgIGlmIChpc1NlcXVlbmNlKSB7XG4gICAgICBuID0gbS5ib2R5LnNwbGl0KC9cXC5cXC4vKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbiA9IHBhcnNlQ29tbWFQYXJ0cyhtLmJvZHkpO1xuICAgICAgaWYgKG4ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIC8vIHh7e2EsYn19eSA9PT4geHthfXkgeHtifXlcbiAgICAgICAgbiA9IGV4cGFuZChuWzBdLCBmYWxzZSkubWFwKGVtYnJhY2UpO1xuICAgICAgICBpZiAobi5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICByZXR1cm4gcG9zdC5tYXAoZnVuY3Rpb24ocCkge1xuICAgICAgICAgICAgcmV0dXJuIG0ucHJlICsgblswXSArIHA7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBhdCB0aGlzIHBvaW50LCBuIGlzIHRoZSBwYXJ0cywgYW5kIHdlIGtub3cgaXQncyBub3QgYSBjb21tYSBzZXRcbiAgICAvLyB3aXRoIGEgc2luZ2xlIGVudHJ5LlxuICAgIHZhciBOO1xuXG4gICAgaWYgKGlzU2VxdWVuY2UpIHtcbiAgICAgIHZhciB4ID0gbnVtZXJpYyhuWzBdKTtcbiAgICAgIHZhciB5ID0gbnVtZXJpYyhuWzFdKTtcbiAgICAgIHZhciB3aWR0aCA9IE1hdGgubWF4KG5bMF0ubGVuZ3RoLCBuWzFdLmxlbmd0aClcbiAgICAgIHZhciBpbmNyID0gbi5sZW5ndGggPT0gM1xuICAgICAgICA/IE1hdGguYWJzKG51bWVyaWMoblsyXSkpXG4gICAgICAgIDogMTtcbiAgICAgIHZhciB0ZXN0ID0gbHRlO1xuICAgICAgdmFyIHJldmVyc2UgPSB5IDwgeDtcbiAgICAgIGlmIChyZXZlcnNlKSB7XG4gICAgICAgIGluY3IgKj0gLTE7XG4gICAgICAgIHRlc3QgPSBndGU7XG4gICAgICB9XG4gICAgICB2YXIgcGFkID0gbi5zb21lKGlzUGFkZGVkKTtcblxuICAgICAgTiA9IFtdO1xuXG4gICAgICBmb3IgKHZhciBpID0geDsgdGVzdChpLCB5KTsgaSArPSBpbmNyKSB7XG4gICAgICAgIHZhciBjO1xuICAgICAgICBpZiAoaXNBbHBoYVNlcXVlbmNlKSB7XG4gICAgICAgICAgYyA9IFN0cmluZy5mcm9tQ2hhckNvZGUoaSk7XG4gICAgICAgICAgaWYgKGMgPT09ICdcXFxcJylcbiAgICAgICAgICAgIGMgPSAnJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjID0gU3RyaW5nKGkpO1xuICAgICAgICAgIGlmIChwYWQpIHtcbiAgICAgICAgICAgIHZhciBuZWVkID0gd2lkdGggLSBjLmxlbmd0aDtcbiAgICAgICAgICAgIGlmIChuZWVkID4gMCkge1xuICAgICAgICAgICAgICB2YXIgeiA9IG5ldyBBcnJheShuZWVkICsgMSkuam9pbignMCcpO1xuICAgICAgICAgICAgICBpZiAoaSA8IDApXG4gICAgICAgICAgICAgICAgYyA9ICctJyArIHogKyBjLnNsaWNlKDEpO1xuICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgYyA9IHogKyBjO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBOLnB1c2goYyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIE4gPSBbXTtcblxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBuLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIE4ucHVzaC5hcHBseShOLCBleHBhbmQobltqXSwgZmFsc2UpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IE4ubGVuZ3RoOyBqKyspIHtcbiAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgcG9zdC5sZW5ndGg7IGsrKykge1xuICAgICAgICB2YXIgZXhwYW5zaW9uID0gcHJlICsgTltqXSArIHBvc3Rba107XG4gICAgICAgIGlmICghaXNUb3AgfHwgaXNTZXF1ZW5jZSB8fCBleHBhbnNpb24pXG4gICAgICAgICAgZXhwYW5zaW9ucy5wdXNoKGV4cGFuc2lvbik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGV4cGFuc2lvbnM7XG59XG5cbiIsCiAgICAiY29uc3QgbWluaW1hdGNoID0gbW9kdWxlLmV4cG9ydHMgPSAocCwgcGF0dGVybiwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gIGFzc2VydFZhbGlkUGF0dGVybihwYXR0ZXJuKVxuXG4gIC8vIHNob3J0Y3V0OiBjb21tZW50cyBtYXRjaCBub3RoaW5nLlxuICBpZiAoIW9wdGlvbnMubm9jb21tZW50ICYmIHBhdHRlcm4uY2hhckF0KDApID09PSAnIycpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHJldHVybiBuZXcgTWluaW1hdGNoKHBhdHRlcm4sIG9wdGlvbnMpLm1hdGNoKHApXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWluaW1hdGNoXG5cbmNvbnN0IHBhdGggPSByZXF1aXJlKCcuL2xpYi9wYXRoLmpzJylcbm1pbmltYXRjaC5zZXAgPSBwYXRoLnNlcFxuXG5jb25zdCBHTE9CU1RBUiA9IFN5bWJvbCgnZ2xvYnN0YXIgKionKVxubWluaW1hdGNoLkdMT0JTVEFSID0gR0xPQlNUQVJcbmNvbnN0IGV4cGFuZCA9IHJlcXVpcmUoJ2JyYWNlLWV4cGFuc2lvbicpXG5cbmNvbnN0IHBsVHlwZXMgPSB7XG4gICchJzogeyBvcGVuOiAnKD86KD8hKD86JywgY2xvc2U6ICcpKVteL10qPyknfSxcbiAgJz8nOiB7IG9wZW46ICcoPzonLCBjbG9zZTogJyk/JyB9LFxuICAnKyc6IHsgb3BlbjogJyg/OicsIGNsb3NlOiAnKSsnIH0sXG4gICcqJzogeyBvcGVuOiAnKD86JywgY2xvc2U6ICcpKicgfSxcbiAgJ0AnOiB7IG9wZW46ICcoPzonLCBjbG9zZTogJyknIH1cbn1cblxuLy8gYW55IHNpbmdsZSB0aGluZyBvdGhlciB0aGFuIC9cbi8vIGRvbid0IG5lZWQgdG8gZXNjYXBlIC8gd2hlbiB1c2luZyBuZXcgUmVnRXhwKClcbmNvbnN0IHFtYXJrID0gJ1teL10nXG5cbi8vICogPT4gYW55IG51bWJlciBvZiBjaGFyYWN0ZXJzXG5jb25zdCBzdGFyID0gcW1hcmsgKyAnKj8nXG5cbi8vICoqIHdoZW4gZG90cyBhcmUgYWxsb3dlZC4gIEFueXRoaW5nIGdvZXMsIGV4Y2VwdCAuLiBhbmQgLlxuLy8gbm90ICheIG9yIC8gZm9sbG93ZWQgYnkgb25lIG9yIHR3byBkb3RzIGZvbGxvd2VkIGJ5ICQgb3IgLyksXG4vLyBmb2xsb3dlZCBieSBhbnl0aGluZywgYW55IG51bWJlciBvZiB0aW1lcy5cbmNvbnN0IHR3b1N0YXJEb3QgPSAnKD86KD8hKD86XFxcXFxcL3xeKSg/OlxcXFwuezEsMn0pKCR8XFxcXFxcLykpLikqPydcblxuLy8gbm90IGEgXiBvciAvIGZvbGxvd2VkIGJ5IGEgZG90LFxuLy8gZm9sbG93ZWQgYnkgYW55dGhpbmcsIGFueSBudW1iZXIgb2YgdGltZXMuXG5jb25zdCB0d29TdGFyTm9Eb3QgPSAnKD86KD8hKD86XFxcXFxcL3xeKVxcXFwuKS4pKj8nXG5cbi8vIFwiYWJjXCIgLT4geyBhOnRydWUsIGI6dHJ1ZSwgYzp0cnVlIH1cbmNvbnN0IGNoYXJTZXQgPSBzID0+IHMuc3BsaXQoJycpLnJlZHVjZSgoc2V0LCBjKSA9PiB7XG4gIHNldFtjXSA9IHRydWVcbiAgcmV0dXJuIHNldFxufSwge30pXG5cbi8vIGNoYXJhY3RlcnMgdGhhdCBuZWVkIHRvIGJlIGVzY2FwZWQgaW4gUmVnRXhwLlxuY29uc3QgcmVTcGVjaWFscyA9IGNoYXJTZXQoJygpLip7fSs/W11eJFxcXFwhJylcblxuLy8gY2hhcmFjdGVycyB0aGF0IGluZGljYXRlIHdlIGhhdmUgdG8gYWRkIHRoZSBwYXR0ZXJuIHN0YXJ0XG5jb25zdCBhZGRQYXR0ZXJuU3RhcnRTZXQgPSBjaGFyU2V0KCdbLignKVxuXG4vLyBub3JtYWxpemVzIHNsYXNoZXMuXG5jb25zdCBzbGFzaFNwbGl0ID0gL1xcLysvXG5cbm1pbmltYXRjaC5maWx0ZXIgPSAocGF0dGVybiwgb3B0aW9ucyA9IHt9KSA9PlxuICAocCwgaSwgbGlzdCkgPT4gbWluaW1hdGNoKHAsIHBhdHRlcm4sIG9wdGlvbnMpXG5cbmNvbnN0IGV4dCA9IChhLCBiID0ge30pID0+IHtcbiAgY29uc3QgdCA9IHt9XG4gIE9iamVjdC5rZXlzKGEpLmZvckVhY2goayA9PiB0W2tdID0gYVtrXSlcbiAgT2JqZWN0LmtleXMoYikuZm9yRWFjaChrID0+IHRba10gPSBiW2tdKVxuICByZXR1cm4gdFxufVxuXG5taW5pbWF0Y2guZGVmYXVsdHMgPSBkZWYgPT4ge1xuICBpZiAoIWRlZiB8fCB0eXBlb2YgZGVmICE9PSAnb2JqZWN0JyB8fCAhT2JqZWN0LmtleXMoZGVmKS5sZW5ndGgpIHtcbiAgICByZXR1cm4gbWluaW1hdGNoXG4gIH1cblxuICBjb25zdCBvcmlnID0gbWluaW1hdGNoXG5cbiAgY29uc3QgbSA9IChwLCBwYXR0ZXJuLCBvcHRpb25zKSA9PiBvcmlnKHAsIHBhdHRlcm4sIGV4dChkZWYsIG9wdGlvbnMpKVxuICBtLk1pbmltYXRjaCA9IGNsYXNzIE1pbmltYXRjaCBleHRlbmRzIG9yaWcuTWluaW1hdGNoIHtcbiAgICBjb25zdHJ1Y3RvciAocGF0dGVybiwgb3B0aW9ucykge1xuICAgICAgc3VwZXIocGF0dGVybiwgZXh0KGRlZiwgb3B0aW9ucykpXG4gICAgfVxuICB9XG4gIG0uTWluaW1hdGNoLmRlZmF1bHRzID0gb3B0aW9ucyA9PiBvcmlnLmRlZmF1bHRzKGV4dChkZWYsIG9wdGlvbnMpKS5NaW5pbWF0Y2hcbiAgbS5maWx0ZXIgPSAocGF0dGVybiwgb3B0aW9ucykgPT4gb3JpZy5maWx0ZXIocGF0dGVybiwgZXh0KGRlZiwgb3B0aW9ucykpXG4gIG0uZGVmYXVsdHMgPSBvcHRpb25zID0+IG9yaWcuZGVmYXVsdHMoZXh0KGRlZiwgb3B0aW9ucykpXG4gIG0ubWFrZVJlID0gKHBhdHRlcm4sIG9wdGlvbnMpID0+IG9yaWcubWFrZVJlKHBhdHRlcm4sIGV4dChkZWYsIG9wdGlvbnMpKVxuICBtLmJyYWNlRXhwYW5kID0gKHBhdHRlcm4sIG9wdGlvbnMpID0+IG9yaWcuYnJhY2VFeHBhbmQocGF0dGVybiwgZXh0KGRlZiwgb3B0aW9ucykpXG4gIG0ubWF0Y2ggPSAobGlzdCwgcGF0dGVybiwgb3B0aW9ucykgPT4gb3JpZy5tYXRjaChsaXN0LCBwYXR0ZXJuLCBleHQoZGVmLCBvcHRpb25zKSlcblxuICByZXR1cm4gbVxufVxuXG5cblxuXG5cbi8vIEJyYWNlIGV4cGFuc2lvbjpcbi8vIGF7YixjfWQgLT4gYWJkIGFjZFxuLy8gYXtiLH1jIC0+IGFiYyBhY1xuLy8gYXswLi4zfWQgLT4gYTBkIGExZCBhMmQgYTNkXG4vLyBhe2IsY3tkLGV9Zn1nIC0+IGFiZyBhY2RmZyBhY2VmZ1xuLy8gYXtiLGN9ZHtlLGZ9ZyAtPiBhYmRlZyBhY2RlZyBhYmRlZyBhYmRmZ1xuLy9cbi8vIEludmFsaWQgc2V0cyBhcmUgbm90IGV4cGFuZGVkLlxuLy8gYXsyLi59YiAtPiBhezIuLn1iXG4vLyBhe2J9YyAtPiBhe2J9Y1xubWluaW1hdGNoLmJyYWNlRXhwYW5kID0gKHBhdHRlcm4sIG9wdGlvbnMpID0+IGJyYWNlRXhwYW5kKHBhdHRlcm4sIG9wdGlvbnMpXG5cbmNvbnN0IGJyYWNlRXhwYW5kID0gKHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkgPT4ge1xuICBhc3NlcnRWYWxpZFBhdHRlcm4ocGF0dGVybilcblxuICAvLyBUaGFua3MgdG8gWWV0aW5nIExpIDxodHRwczovL2dpdGh1Yi5jb20veWV0aW5nbGk+IGZvclxuICAvLyBpbXByb3ZpbmcgdGhpcyByZWdleHAgdG8gYXZvaWQgYSBSZURPUyB2dWxuZXJhYmlsaXR5LlxuICBpZiAob3B0aW9ucy5ub2JyYWNlIHx8ICEvXFx7KD86KD8hXFx7KS4pKlxcfS8udGVzdChwYXR0ZXJuKSkge1xuICAgIC8vIHNob3J0Y3V0LiBubyBuZWVkIHRvIGV4cGFuZC5cbiAgICByZXR1cm4gW3BhdHRlcm5dXG4gIH1cblxuICByZXR1cm4gZXhwYW5kKHBhdHRlcm4pXG59XG5cbmNvbnN0IE1BWF9QQVRURVJOX0xFTkdUSCA9IDEwMjQgKiA2NFxuY29uc3QgYXNzZXJ0VmFsaWRQYXR0ZXJuID0gcGF0dGVybiA9PiB7XG4gIGlmICh0eXBlb2YgcGF0dGVybiAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnZhbGlkIHBhdHRlcm4nKVxuICB9XG5cbiAgaWYgKHBhdHRlcm4ubGVuZ3RoID4gTUFYX1BBVFRFUk5fTEVOR1RIKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncGF0dGVybiBpcyB0b28gbG9uZycpXG4gIH1cbn1cblxuLy8gcGFyc2UgYSBjb21wb25lbnQgb2YgdGhlIGV4cGFuZGVkIHNldC5cbi8vIEF0IHRoaXMgcG9pbnQsIG5vIHBhdHRlcm4gbWF5IGNvbnRhaW4gXCIvXCIgaW4gaXRcbi8vIHNvIHdlJ3JlIGdvaW5nIHRvIHJldHVybiBhIDJkIGFycmF5LCB3aGVyZSBlYWNoIGVudHJ5IGlzIHRoZSBmdWxsXG4vLyBwYXR0ZXJuLCBzcGxpdCBvbiAnLycsIGFuZCB0aGVuIHR1cm5lZCBpbnRvIGEgcmVndWxhciBleHByZXNzaW9uLlxuLy8gQSByZWdleHAgaXMgbWFkZSBhdCB0aGUgZW5kIHdoaWNoIGpvaW5zIGVhY2ggYXJyYXkgd2l0aCBhblxuLy8gZXNjYXBlZCAvLCBhbmQgYW5vdGhlciBmdWxsIG9uZSB3aGljaCBqb2lucyBlYWNoIHJlZ2V4cCB3aXRoIHwuXG4vL1xuLy8gRm9sbG93aW5nIHRoZSBsZWFkIG9mIEJhc2ggNC4xLCBub3RlIHRoYXQgXCIqKlwiIG9ubHkgaGFzIHNwZWNpYWwgbWVhbmluZ1xuLy8gd2hlbiBpdCBpcyB0aGUgKm9ubHkqIHRoaW5nIGluIGEgcGF0aCBwb3J0aW9uLiAgT3RoZXJ3aXNlLCBhbnkgc2VyaWVzXG4vLyBvZiAqIGlzIGVxdWl2YWxlbnQgdG8gYSBzaW5nbGUgKi4gIEdsb2JzdGFyIGJlaGF2aW9yIGlzIGVuYWJsZWQgYnlcbi8vIGRlZmF1bHQsIGFuZCBjYW4gYmUgZGlzYWJsZWQgYnkgc2V0dGluZyBvcHRpb25zLm5vZ2xvYnN0YXIuXG5jb25zdCBTVUJQQVJTRSA9IFN5bWJvbCgnc3VicGFyc2UnKVxuXG5taW5pbWF0Y2gubWFrZVJlID0gKHBhdHRlcm4sIG9wdGlvbnMpID0+XG4gIG5ldyBNaW5pbWF0Y2gocGF0dGVybiwgb3B0aW9ucyB8fCB7fSkubWFrZVJlKClcblxubWluaW1hdGNoLm1hdGNoID0gKGxpc3QsIHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCBtbSA9IG5ldyBNaW5pbWF0Y2gocGF0dGVybiwgb3B0aW9ucylcbiAgbGlzdCA9IGxpc3QuZmlsdGVyKGYgPT4gbW0ubWF0Y2goZikpXG4gIGlmIChtbS5vcHRpb25zLm5vbnVsbCAmJiAhbGlzdC5sZW5ndGgpIHtcbiAgICBsaXN0LnB1c2gocGF0dGVybilcbiAgfVxuICByZXR1cm4gbGlzdFxufVxuXG4vLyByZXBsYWNlIHN0dWZmIGxpa2UgXFwqIHdpdGggKlxuY29uc3QgZ2xvYlVuZXNjYXBlID0gcyA9PiBzLnJlcGxhY2UoL1xcXFwoLikvZywgJyQxJylcbmNvbnN0IGNoYXJVbmVzY2FwZSA9IHMgPT4gcy5yZXBsYWNlKC9cXFxcKFteLVxcXV0pL2csICckMScpXG5jb25zdCByZWdFeHBFc2NhcGUgPSBzID0+IHMucmVwbGFjZSgvWy1bXFxde30oKSorPy4sXFxcXF4kfCNcXHNdL2csICdcXFxcJCYnKVxuY29uc3QgYnJhRXhwRXNjYXBlID0gcyA9PiBzLnJlcGxhY2UoL1tbXFxdXFxcXF0vZywgJ1xcXFwkJicpXG5cbmNsYXNzIE1pbmltYXRjaCB7XG4gIGNvbnN0cnVjdG9yIChwYXR0ZXJuLCBvcHRpb25zKSB7XG4gICAgYXNzZXJ0VmFsaWRQYXR0ZXJuKHBhdHRlcm4pXG5cbiAgICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fVxuXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc1xuICAgIHRoaXMuc2V0ID0gW11cbiAgICB0aGlzLnBhdHRlcm4gPSBwYXR0ZXJuXG4gICAgdGhpcy53aW5kb3dzUGF0aHNOb0VzY2FwZSA9ICEhb3B0aW9ucy53aW5kb3dzUGF0aHNOb0VzY2FwZSB8fFxuICAgICAgb3B0aW9ucy5hbGxvd1dpbmRvd3NFc2NhcGUgPT09IGZhbHNlXG4gICAgaWYgKHRoaXMud2luZG93c1BhdGhzTm9Fc2NhcGUpIHtcbiAgICAgIHRoaXMucGF0dGVybiA9IHRoaXMucGF0dGVybi5yZXBsYWNlKC9cXFxcL2csICcvJylcbiAgICB9XG4gICAgdGhpcy5yZWdleHAgPSBudWxsXG4gICAgdGhpcy5uZWdhdGUgPSBmYWxzZVxuICAgIHRoaXMuY29tbWVudCA9IGZhbHNlXG4gICAgdGhpcy5lbXB0eSA9IGZhbHNlXG4gICAgdGhpcy5wYXJ0aWFsID0gISFvcHRpb25zLnBhcnRpYWxcblxuICAgIC8vIG1ha2UgdGhlIHNldCBvZiByZWdleHBzIGV0Yy5cbiAgICB0aGlzLm1ha2UoKVxuICB9XG5cbiAgZGVidWcgKCkge31cblxuICBtYWtlICgpIHtcbiAgICBjb25zdCBwYXR0ZXJuID0gdGhpcy5wYXR0ZXJuXG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9uc1xuXG4gICAgLy8gZW1wdHkgcGF0dGVybnMgYW5kIGNvbW1lbnRzIG1hdGNoIG5vdGhpbmcuXG4gICAgaWYgKCFvcHRpb25zLm5vY29tbWVudCAmJiBwYXR0ZXJuLmNoYXJBdCgwKSA9PT0gJyMnKSB7XG4gICAgICB0aGlzLmNvbW1lbnQgPSB0cnVlXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKCFwYXR0ZXJuKSB7XG4gICAgICB0aGlzLmVtcHR5ID0gdHJ1ZVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gc3RlcCAxOiBmaWd1cmUgb3V0IG5lZ2F0aW9uLCBldGMuXG4gICAgdGhpcy5wYXJzZU5lZ2F0ZSgpXG5cbiAgICAvLyBzdGVwIDI6IGV4cGFuZCBicmFjZXNcbiAgICBsZXQgc2V0ID0gdGhpcy5nbG9iU2V0ID0gdGhpcy5icmFjZUV4cGFuZCgpXG5cbiAgICBpZiAob3B0aW9ucy5kZWJ1ZykgdGhpcy5kZWJ1ZyA9ICguLi5hcmdzKSA9PiBjb25zb2xlLmVycm9yKC4uLmFyZ3MpXG5cbiAgICB0aGlzLmRlYnVnKHRoaXMucGF0dGVybiwgc2V0KVxuXG4gICAgLy8gc3RlcCAzOiBub3cgd2UgaGF2ZSBhIHNldCwgc28gdHVybiBlYWNoIG9uZSBpbnRvIGEgc2VyaWVzIG9mIHBhdGgtcG9ydGlvblxuICAgIC8vIG1hdGNoaW5nIHBhdHRlcm5zLlxuICAgIC8vIFRoZXNlIHdpbGwgYmUgcmVnZXhwcywgZXhjZXB0IGluIHRoZSBjYXNlIG9mIFwiKipcIiwgd2hpY2ggaXNcbiAgICAvLyBzZXQgdG8gdGhlIEdMT0JTVEFSIG9iamVjdCBmb3IgZ2xvYnN0YXIgYmVoYXZpb3IsXG4gICAgLy8gYW5kIHdpbGwgbm90IGNvbnRhaW4gYW55IC8gY2hhcmFjdGVyc1xuICAgIHNldCA9IHRoaXMuZ2xvYlBhcnRzID0gc2V0Lm1hcChzID0+IHMuc3BsaXQoc2xhc2hTcGxpdCkpXG5cbiAgICB0aGlzLmRlYnVnKHRoaXMucGF0dGVybiwgc2V0KVxuXG4gICAgLy8gZ2xvYiAtLT4gcmVnZXhwc1xuICAgIHNldCA9IHNldC5tYXAoKHMsIHNpLCBzZXQpID0+IHMubWFwKHRoaXMucGFyc2UsIHRoaXMpKVxuXG4gICAgdGhpcy5kZWJ1Zyh0aGlzLnBhdHRlcm4sIHNldClcblxuICAgIC8vIGZpbHRlciBvdXQgZXZlcnl0aGluZyB0aGF0IGRpZG4ndCBjb21waWxlIHByb3Blcmx5LlxuICAgIHNldCA9IHNldC5maWx0ZXIocyA9PiBzLmluZGV4T2YoZmFsc2UpID09PSAtMSlcblxuICAgIHRoaXMuZGVidWcodGhpcy5wYXR0ZXJuLCBzZXQpXG5cbiAgICB0aGlzLnNldCA9IHNldFxuICB9XG5cbiAgcGFyc2VOZWdhdGUgKCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMubm9uZWdhdGUpIHJldHVyblxuXG4gICAgY29uc3QgcGF0dGVybiA9IHRoaXMucGF0dGVyblxuICAgIGxldCBuZWdhdGUgPSBmYWxzZVxuICAgIGxldCBuZWdhdGVPZmZzZXQgPSAwXG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdHRlcm4ubGVuZ3RoICYmIHBhdHRlcm4uY2hhckF0KGkpID09PSAnISc7IGkrKykge1xuICAgICAgbmVnYXRlID0gIW5lZ2F0ZVxuICAgICAgbmVnYXRlT2Zmc2V0KytcbiAgICB9XG5cbiAgICBpZiAobmVnYXRlT2Zmc2V0KSB0aGlzLnBhdHRlcm4gPSBwYXR0ZXJuLnNsaWNlKG5lZ2F0ZU9mZnNldClcbiAgICB0aGlzLm5lZ2F0ZSA9IG5lZ2F0ZVxuICB9XG5cbiAgLy8gc2V0IHBhcnRpYWwgdG8gdHJ1ZSB0byB0ZXN0IGlmLCBmb3IgZXhhbXBsZSxcbiAgLy8gXCIvYS9iXCIgbWF0Y2hlcyB0aGUgc3RhcnQgb2YgXCIvKi9iLyovZFwiXG4gIC8vIFBhcnRpYWwgbWVhbnMsIGlmIHlvdSBydW4gb3V0IG9mIGZpbGUgYmVmb3JlIHlvdSBydW5cbiAgLy8gb3V0IG9mIHBhdHRlcm4sIHRoZW4gdGhhdCdzIGZpbmUsIGFzIGxvbmcgYXMgYWxsXG4gIC8vIHRoZSBwYXJ0cyBtYXRjaC5cbiAgbWF0Y2hPbmUgKGZpbGUsIHBhdHRlcm4sIHBhcnRpYWwpIHtcbiAgICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9uc1xuXG4gICAgdGhpcy5kZWJ1ZygnbWF0Y2hPbmUnLFxuICAgICAgeyAndGhpcyc6IHRoaXMsIGZpbGU6IGZpbGUsIHBhdHRlcm46IHBhdHRlcm4gfSlcblxuICAgIHRoaXMuZGVidWcoJ21hdGNoT25lJywgZmlsZS5sZW5ndGgsIHBhdHRlcm4ubGVuZ3RoKVxuXG4gICAgZm9yICh2YXIgZmkgPSAwLFxuICAgICAgICBwaSA9IDAsXG4gICAgICAgIGZsID0gZmlsZS5sZW5ndGgsXG4gICAgICAgIHBsID0gcGF0dGVybi5sZW5ndGhcbiAgICAgICAgOyAoZmkgPCBmbCkgJiYgKHBpIDwgcGwpXG4gICAgICAgIDsgZmkrKywgcGkrKykge1xuICAgICAgdGhpcy5kZWJ1ZygnbWF0Y2hPbmUgbG9vcCcpXG4gICAgICB2YXIgcCA9IHBhdHRlcm5bcGldXG4gICAgICB2YXIgZiA9IGZpbGVbZmldXG5cbiAgICAgIHRoaXMuZGVidWcocGF0dGVybiwgcCwgZilcblxuICAgICAgLy8gc2hvdWxkIGJlIGltcG9zc2libGUuXG4gICAgICAvLyBzb21lIGludmFsaWQgcmVnZXhwIHN0dWZmIGluIHRoZSBzZXQuXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmIChwID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlXG5cbiAgICAgIGlmIChwID09PSBHTE9CU1RBUikge1xuICAgICAgICB0aGlzLmRlYnVnKCdHTE9CU1RBUicsIFtwYXR0ZXJuLCBwLCBmXSlcblxuICAgICAgICAvLyBcIioqXCJcbiAgICAgICAgLy8gYS8qKi9iLyoqL2Mgd291bGQgbWF0Y2ggdGhlIGZvbGxvd2luZzpcbiAgICAgICAgLy8gYS9iL3gveS96L2NcbiAgICAgICAgLy8gYS94L3kvei9iL2NcbiAgICAgICAgLy8gYS9iL3gvYi94L2NcbiAgICAgICAgLy8gYS9iL2NcbiAgICAgICAgLy8gVG8gZG8gdGhpcywgdGFrZSB0aGUgcmVzdCBvZiB0aGUgcGF0dGVybiBhZnRlclxuICAgICAgICAvLyB0aGUgKiosIGFuZCBzZWUgaWYgaXQgd291bGQgbWF0Y2ggdGhlIGZpbGUgcmVtYWluZGVyLlxuICAgICAgICAvLyBJZiBzbywgcmV0dXJuIHN1Y2Nlc3MuXG4gICAgICAgIC8vIElmIG5vdCwgdGhlICoqIFwic3dhbGxvd3NcIiBhIHNlZ21lbnQsIGFuZCB0cnkgYWdhaW4uXG4gICAgICAgIC8vIFRoaXMgaXMgcmVjdXJzaXZlbHkgYXdmdWwuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIGEvKiovYi8qKi9jIG1hdGNoaW5nIGEvYi94L3kvei9jXG4gICAgICAgIC8vIC0gYSBtYXRjaGVzIGFcbiAgICAgICAgLy8gLSBkb3VibGVzdGFyXG4gICAgICAgIC8vICAgLSBtYXRjaE9uZShiL3gveS96L2MsIGIvKiovYylcbiAgICAgICAgLy8gICAgIC0gYiBtYXRjaGVzIGJcbiAgICAgICAgLy8gICAgIC0gZG91Ymxlc3RhclxuICAgICAgICAvLyAgICAgICAtIG1hdGNoT25lKHgveS96L2MsIGMpIC0+IG5vXG4gICAgICAgIC8vICAgICAgIC0gbWF0Y2hPbmUoeS96L2MsIGMpIC0+IG5vXG4gICAgICAgIC8vICAgICAgIC0gbWF0Y2hPbmUoei9jLCBjKSAtPiBub1xuICAgICAgICAvLyAgICAgICAtIG1hdGNoT25lKGMsIGMpIHllcywgaGl0XG4gICAgICAgIHZhciBmciA9IGZpXG4gICAgICAgIHZhciBwciA9IHBpICsgMVxuICAgICAgICBpZiAocHIgPT09IHBsKSB7XG4gICAgICAgICAgdGhpcy5kZWJ1ZygnKiogYXQgdGhlIGVuZCcpXG4gICAgICAgICAgLy8gYSAqKiBhdCB0aGUgZW5kIHdpbGwganVzdCBzd2FsbG93IHRoZSByZXN0LlxuICAgICAgICAgIC8vIFdlIGhhdmUgZm91bmQgYSBtYXRjaC5cbiAgICAgICAgICAvLyBob3dldmVyLCBpdCB3aWxsIG5vdCBzd2FsbG93IC8ueCwgdW5sZXNzXG4gICAgICAgICAgLy8gb3B0aW9ucy5kb3QgaXMgc2V0LlxuICAgICAgICAgIC8vIC4gYW5kIC4uIGFyZSAqbmV2ZXIqIG1hdGNoZWQgYnkgKiosIGZvciBleHBsb3NpdmVseVxuICAgICAgICAgIC8vIGV4cG9uZW50aWFsIHJlYXNvbnMuXG4gICAgICAgICAgZm9yICg7IGZpIDwgZmw7IGZpKyspIHtcbiAgICAgICAgICAgIGlmIChmaWxlW2ZpXSA9PT0gJy4nIHx8IGZpbGVbZmldID09PSAnLi4nIHx8XG4gICAgICAgICAgICAgICghb3B0aW9ucy5kb3QgJiYgZmlsZVtmaV0uY2hhckF0KDApID09PSAnLicpKSByZXR1cm4gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG9rLCBsZXQncyBzZWUgaWYgd2UgY2FuIHN3YWxsb3cgd2hhdGV2ZXIgd2UgY2FuLlxuICAgICAgICB3aGlsZSAoZnIgPCBmbCkge1xuICAgICAgICAgIHZhciBzd2FsbG93ZWUgPSBmaWxlW2ZyXVxuXG4gICAgICAgICAgdGhpcy5kZWJ1ZygnXFxuZ2xvYnN0YXIgd2hpbGUnLCBmaWxlLCBmciwgcGF0dGVybiwgcHIsIHN3YWxsb3dlZSlcblxuICAgICAgICAgIC8vIFhYWCByZW1vdmUgdGhpcyBzbGljZS4gIEp1c3QgcGFzcyB0aGUgc3RhcnQgaW5kZXguXG4gICAgICAgICAgaWYgKHRoaXMubWF0Y2hPbmUoZmlsZS5zbGljZShmciksIHBhdHRlcm4uc2xpY2UocHIpLCBwYXJ0aWFsKSkge1xuICAgICAgICAgICAgdGhpcy5kZWJ1ZygnZ2xvYnN0YXIgZm91bmQgbWF0Y2ghJywgZnIsIGZsLCBzd2FsbG93ZWUpXG4gICAgICAgICAgICAvLyBmb3VuZCBhIG1hdGNoLlxuICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gY2FuJ3Qgc3dhbGxvdyBcIi5cIiBvciBcIi4uXCIgZXZlci5cbiAgICAgICAgICAgIC8vIGNhbiBvbmx5IHN3YWxsb3cgXCIuZm9vXCIgd2hlbiBleHBsaWNpdGx5IGFza2VkLlxuICAgICAgICAgICAgaWYgKHN3YWxsb3dlZSA9PT0gJy4nIHx8IHN3YWxsb3dlZSA9PT0gJy4uJyB8fFxuICAgICAgICAgICAgICAoIW9wdGlvbnMuZG90ICYmIHN3YWxsb3dlZS5jaGFyQXQoMCkgPT09ICcuJykpIHtcbiAgICAgICAgICAgICAgdGhpcy5kZWJ1ZygnZG90IGRldGVjdGVkIScsIGZpbGUsIGZyLCBwYXR0ZXJuLCBwcilcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gKiogc3dhbGxvd3MgYSBzZWdtZW50LCBhbmQgY29udGludWUuXG4gICAgICAgICAgICB0aGlzLmRlYnVnKCdnbG9ic3RhciBzd2FsbG93IGEgc2VnbWVudCwgYW5kIGNvbnRpbnVlJylcbiAgICAgICAgICAgIGZyKytcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBubyBtYXRjaCB3YXMgZm91bmQuXG4gICAgICAgIC8vIEhvd2V2ZXIsIGluIHBhcnRpYWwgbW9kZSwgd2UgY2FuJ3Qgc2F5IHRoaXMgaXMgbmVjZXNzYXJpbHkgb3Zlci5cbiAgICAgICAgLy8gSWYgdGhlcmUncyBtb3JlICpwYXR0ZXJuKiBsZWZ0LCB0aGVuXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAocGFydGlhbCkge1xuICAgICAgICAgIC8vIHJhbiBvdXQgb2YgZmlsZVxuICAgICAgICAgIHRoaXMuZGVidWcoJ1xcbj4+PiBubyBtYXRjaCwgcGFydGlhbD8nLCBmaWxlLCBmciwgcGF0dGVybiwgcHIpXG4gICAgICAgICAgaWYgKGZyID09PSBmbCkgcmV0dXJuIHRydWVcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgLy8gc29tZXRoaW5nIG90aGVyIHRoYW4gKipcbiAgICAgIC8vIG5vbi1tYWdpYyBwYXR0ZXJucyBqdXN0IGhhdmUgdG8gbWF0Y2ggZXhhY3RseVxuICAgICAgLy8gcGF0dGVybnMgd2l0aCBtYWdpYyBoYXZlIGJlZW4gdHVybmVkIGludG8gcmVnZXhwcy5cbiAgICAgIHZhciBoaXRcbiAgICAgIGlmICh0eXBlb2YgcCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaGl0ID0gZiA9PT0gcFxuICAgICAgICB0aGlzLmRlYnVnKCdzdHJpbmcgbWF0Y2gnLCBwLCBmLCBoaXQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoaXQgPSBmLm1hdGNoKHApXG4gICAgICAgIHRoaXMuZGVidWcoJ3BhdHRlcm4gbWF0Y2gnLCBwLCBmLCBoaXQpXG4gICAgICB9XG5cbiAgICAgIGlmICghaGl0KSByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICAvLyBOb3RlOiBlbmRpbmcgaW4gLyBtZWFucyB0aGF0IHdlJ2xsIGdldCBhIGZpbmFsIFwiXCJcbiAgICAvLyBhdCB0aGUgZW5kIG9mIHRoZSBwYXR0ZXJuLiAgVGhpcyBjYW4gb25seSBtYXRjaCBhXG4gICAgLy8gY29ycmVzcG9uZGluZyBcIlwiIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUuXG4gICAgLy8gSWYgdGhlIGZpbGUgZW5kcyBpbiAvLCB0aGVuIGl0IGNhbiBvbmx5IG1hdGNoIGFcbiAgICAvLyBhIHBhdHRlcm4gdGhhdCBlbmRzIGluIC8sIHVubGVzcyB0aGUgcGF0dGVybiBqdXN0XG4gICAgLy8gZG9lc24ndCBoYXZlIGFueSBtb3JlIGZvciBpdC4gQnV0LCBhL2IvIHNob3VsZCAqbm90KlxuICAgIC8vIG1hdGNoIFwiYS9iLypcIiwgZXZlbiB0aG91Z2ggXCJcIiBtYXRjaGVzIGFnYWluc3QgdGhlXG4gICAgLy8gW14vXSo/IHBhdHRlcm4sIGV4Y2VwdCBpbiBwYXJ0aWFsIG1vZGUsIHdoZXJlIGl0IG1pZ2h0XG4gICAgLy8gc2ltcGx5IG5vdCBiZSByZWFjaGVkIHlldC5cbiAgICAvLyBIb3dldmVyLCBhL2IvIHNob3VsZCBzdGlsbCBzYXRpc2Z5IGEvKlxuXG4gICAgLy8gbm93IGVpdGhlciB3ZSBmZWxsIG9mZiB0aGUgZW5kIG9mIHRoZSBwYXR0ZXJuLCBvciB3ZSdyZSBkb25lLlxuICAgIGlmIChmaSA9PT0gZmwgJiYgcGkgPT09IHBsKSB7XG4gICAgICAvLyByYW4gb3V0IG9mIHBhdHRlcm4gYW5kIGZpbGVuYW1lIGF0IHRoZSBzYW1lIHRpbWUuXG4gICAgICAvLyBhbiBleGFjdCBoaXQhXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0gZWxzZSBpZiAoZmkgPT09IGZsKSB7XG4gICAgICAvLyByYW4gb3V0IG9mIGZpbGUsIGJ1dCBzdGlsbCBoYWQgcGF0dGVybiBsZWZ0LlxuICAgICAgLy8gdGhpcyBpcyBvayBpZiB3ZSdyZSBkb2luZyB0aGUgbWF0Y2ggYXMgcGFydCBvZlxuICAgICAgLy8gYSBnbG9iIGZzIHRyYXZlcnNhbC5cbiAgICAgIHJldHVybiBwYXJ0aWFsXG4gICAgfSBlbHNlIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovIGlmIChwaSA9PT0gcGwpIHtcbiAgICAgIC8vIHJhbiBvdXQgb2YgcGF0dGVybiwgc3RpbGwgaGF2ZSBmaWxlIGxlZnQuXG4gICAgICAvLyB0aGlzIGlzIG9ubHkgYWNjZXB0YWJsZSBpZiB3ZSdyZSBvbiB0aGUgdmVyeSBsYXN0XG4gICAgICAvLyBlbXB0eSBzZWdtZW50IG9mIGEgZmlsZSB3aXRoIGEgdHJhaWxpbmcgc2xhc2guXG4gICAgICAvLyBhLyogc2hvdWxkIG1hdGNoIGEvYi9cbiAgICAgIHJldHVybiAoZmkgPT09IGZsIC0gMSkgJiYgKGZpbGVbZmldID09PSAnJylcbiAgICB9XG5cbiAgICAvLyBzaG91bGQgYmUgdW5yZWFjaGFibGUuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3d0Zj8nKVxuICB9XG5cbiAgYnJhY2VFeHBhbmQgKCkge1xuICAgIHJldHVybiBicmFjZUV4cGFuZCh0aGlzLnBhdHRlcm4sIHRoaXMub3B0aW9ucylcbiAgfVxuXG4gIHBhcnNlIChwYXR0ZXJuLCBpc1N1Yikge1xuICAgIGFzc2VydFZhbGlkUGF0dGVybihwYXR0ZXJuKVxuXG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9uc1xuXG4gICAgLy8gc2hvcnRjdXRzXG4gICAgaWYgKHBhdHRlcm4gPT09ICcqKicpIHtcbiAgICAgIGlmICghb3B0aW9ucy5ub2dsb2JzdGFyKVxuICAgICAgICByZXR1cm4gR0xPQlNUQVJcbiAgICAgIGVsc2VcbiAgICAgICAgcGF0dGVybiA9ICcqJ1xuICAgIH1cbiAgICBpZiAocGF0dGVybiA9PT0gJycpIHJldHVybiAnJ1xuXG4gICAgbGV0IHJlID0gJydcbiAgICBsZXQgaGFzTWFnaWMgPSBmYWxzZVxuICAgIGxldCBlc2NhcGluZyA9IGZhbHNlXG4gICAgLy8gPyA9PiBvbmUgc2luZ2xlIGNoYXJhY3RlclxuICAgIGNvbnN0IHBhdHRlcm5MaXN0U3RhY2sgPSBbXVxuICAgIGNvbnN0IG5lZ2F0aXZlTGlzdHMgPSBbXVxuICAgIGxldCBzdGF0ZUNoYXJcbiAgICBsZXQgaW5DbGFzcyA9IGZhbHNlXG4gICAgbGV0IHJlQ2xhc3NTdGFydCA9IC0xXG4gICAgbGV0IGNsYXNzU3RhcnQgPSAtMVxuICAgIGxldCBjc1xuICAgIGxldCBwbFxuICAgIGxldCBzcFxuICAgIC8vIC4gYW5kIC4uIG5ldmVyIG1hdGNoIGFueXRoaW5nIHRoYXQgZG9lc24ndCBzdGFydCB3aXRoIC4sXG4gICAgLy8gZXZlbiB3aGVuIG9wdGlvbnMuZG90IGlzIHNldC4gIEhvd2V2ZXIsIGlmIHRoZSBwYXR0ZXJuXG4gICAgLy8gc3RhcnRzIHdpdGggLiwgdGhlbiB0cmF2ZXJzYWwgcGF0dGVybnMgY2FuIG1hdGNoLlxuICAgIGxldCBkb3RUcmF2QWxsb3dlZCA9IHBhdHRlcm4uY2hhckF0KDApID09PSAnLidcbiAgICBsZXQgZG90RmlsZUFsbG93ZWQgPSBvcHRpb25zLmRvdCB8fCBkb3RUcmF2QWxsb3dlZFxuICAgIGNvbnN0IHBhdHRlcm5TdGFydCA9ICgpID0+XG4gICAgICBkb3RUcmF2QWxsb3dlZFxuICAgICAgICA/ICcnXG4gICAgICAgIDogZG90RmlsZUFsbG93ZWRcbiAgICAgICAgPyAnKD8hKD86XnxcXFxcLylcXFxcLnsxLDJ9KD86JHxcXFxcLykpJ1xuICAgICAgICA6ICcoPyFcXFxcLiknXG4gICAgY29uc3Qgc3ViUGF0dGVyblN0YXJ0ID0gKHApID0+XG4gICAgICBwLmNoYXJBdCgwKSA9PT0gJy4nXG4gICAgICAgID8gJydcbiAgICAgICAgOiBvcHRpb25zLmRvdFxuICAgICAgICA/ICcoPyEoPzpefFxcXFwvKVxcXFwuezEsMn0oPzokfFxcXFwvKSknXG4gICAgICAgIDogJyg/IVxcXFwuKSdcblxuXG4gICAgY29uc3QgY2xlYXJTdGF0ZUNoYXIgPSAoKSA9PiB7XG4gICAgICBpZiAoc3RhdGVDaGFyKSB7XG4gICAgICAgIC8vIHdlIGhhZCBzb21lIHN0YXRlLXRyYWNraW5nIGNoYXJhY3RlclxuICAgICAgICAvLyB0aGF0IHdhc24ndCBjb25zdW1lZCBieSB0aGlzIHBhc3MuXG4gICAgICAgIHN3aXRjaCAoc3RhdGVDaGFyKSB7XG4gICAgICAgICAgY2FzZSAnKic6XG4gICAgICAgICAgICByZSArPSBzdGFyXG4gICAgICAgICAgICBoYXNNYWdpYyA9IHRydWVcbiAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgJz8nOlxuICAgICAgICAgICAgcmUgKz0gcW1hcmtcbiAgICAgICAgICAgIGhhc01hZ2ljID0gdHJ1ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJlICs9ICdcXFxcJyArIHN0YXRlQ2hhclxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kZWJ1ZygnY2xlYXJTdGF0ZUNoYXIgJWogJWonLCBzdGF0ZUNoYXIsIHJlKVxuICAgICAgICBzdGF0ZUNoYXIgPSBmYWxzZVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwLCBjOyAoaSA8IHBhdHRlcm4ubGVuZ3RoKSAmJiAoYyA9IHBhdHRlcm4uY2hhckF0KGkpKTsgaSsrKSB7XG4gICAgICB0aGlzLmRlYnVnKCclc1xcdCVzICVzICVqJywgcGF0dGVybiwgaSwgcmUsIGMpXG5cbiAgICAgIC8vIHNraXAgb3ZlciBhbnkgdGhhdCBhcmUgZXNjYXBlZC5cbiAgICAgIGlmIChlc2NhcGluZykge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAtIGNvbXBsZXRlbHkgbm90IGFsbG93ZWQsIGV2ZW4gZXNjYXBlZC4gKi9cbiAgICAgICAgaWYgKGMgPT09ICcvJykge1xuICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlU3BlY2lhbHNbY10pIHtcbiAgICAgICAgICByZSArPSAnXFxcXCdcbiAgICAgICAgfVxuICAgICAgICByZSArPSBjXG4gICAgICAgIGVzY2FwaW5nID0gZmFsc2VcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChjKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIGNhc2UgJy8nOiB7XG4gICAgICAgICAgLy8gU2hvdWxkIGFscmVhZHkgYmUgcGF0aC1zcGxpdCBieSBub3cuXG4gICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cblxuICAgICAgICBjYXNlICdcXFxcJzpcbiAgICAgICAgICBpZiAoaW5DbGFzcyAmJiBwYXR0ZXJuLmNoYXJBdChpICsgMSkgPT09ICctJykge1xuICAgICAgICAgICAgcmUgKz0gY1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjbGVhclN0YXRlQ2hhcigpXG4gICAgICAgICAgZXNjYXBpbmcgPSB0cnVlXG4gICAgICAgIGNvbnRpbnVlXG5cbiAgICAgICAgLy8gdGhlIHZhcmlvdXMgc3RhdGVDaGFyIHZhbHVlc1xuICAgICAgICAvLyBmb3IgdGhlIFwiZXh0Z2xvYlwiIHN0dWZmLlxuICAgICAgICBjYXNlICc/JzpcbiAgICAgICAgY2FzZSAnKic6XG4gICAgICAgIGNhc2UgJysnOlxuICAgICAgICBjYXNlICdAJzpcbiAgICAgICAgY2FzZSAnISc6XG4gICAgICAgICAgdGhpcy5kZWJ1ZygnJXNcXHQlcyAlcyAlaiA8LS0gc3RhdGVDaGFyJywgcGF0dGVybiwgaSwgcmUsIGMpXG5cbiAgICAgICAgICAvLyBhbGwgb2YgdGhvc2UgYXJlIGxpdGVyYWxzIGluc2lkZSBhIGNsYXNzLCBleGNlcHQgdGhhdFxuICAgICAgICAgIC8vIHRoZSBnbG9iIFshYV0gbWVhbnMgW15hXSBpbiByZWdleHBcbiAgICAgICAgICBpZiAoaW5DbGFzcykge1xuICAgICAgICAgICAgdGhpcy5kZWJ1ZygnICBpbiBjbGFzcycpXG4gICAgICAgICAgICBpZiAoYyA9PT0gJyEnICYmIGkgPT09IGNsYXNzU3RhcnQgKyAxKSBjID0gJ14nXG4gICAgICAgICAgICByZSArPSBjXG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGlmIHdlIGFscmVhZHkgaGF2ZSBhIHN0YXRlQ2hhciwgdGhlbiBpdCBtZWFuc1xuICAgICAgICAgIC8vIHRoYXQgdGhlcmUgd2FzIHNvbWV0aGluZyBsaWtlICoqIG9yICs/IGluIHRoZXJlLlxuICAgICAgICAgIC8vIEhhbmRsZSB0aGUgc3RhdGVDaGFyLCB0aGVuIHByb2NlZWQgd2l0aCB0aGlzIG9uZS5cbiAgICAgICAgICB0aGlzLmRlYnVnKCdjYWxsIGNsZWFyU3RhdGVDaGFyICVqJywgc3RhdGVDaGFyKVxuICAgICAgICAgIGNsZWFyU3RhdGVDaGFyKClcbiAgICAgICAgICBzdGF0ZUNoYXIgPSBjXG4gICAgICAgICAgLy8gaWYgZXh0Z2xvYiBpcyBkaXNhYmxlZCwgdGhlbiArKGFzZGZ8Zm9vKSBpc24ndCBhIHRoaW5nLlxuICAgICAgICAgIC8vIGp1c3QgY2xlYXIgdGhlIHN0YXRlY2hhciAqbm93KiwgcmF0aGVyIHRoYW4gZXZlbiBkaXZpbmcgaW50b1xuICAgICAgICAgIC8vIHRoZSBwYXR0ZXJuTGlzdCBzdHVmZi5cbiAgICAgICAgICBpZiAob3B0aW9ucy5ub2V4dCkgY2xlYXJTdGF0ZUNoYXIoKVxuICAgICAgICBjb250aW51ZVxuXG4gICAgICAgIGNhc2UgJygnOiB7XG4gICAgICAgICAgaWYgKGluQ2xhc3MpIHtcbiAgICAgICAgICAgIHJlICs9ICcoJ1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXN0YXRlQ2hhcikge1xuICAgICAgICAgICAgcmUgKz0gJ1xcXFwoJ1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBwbEVudHJ5ID0ge1xuICAgICAgICAgICAgdHlwZTogc3RhdGVDaGFyLFxuICAgICAgICAgICAgc3RhcnQ6IGkgLSAxLFxuICAgICAgICAgICAgcmVTdGFydDogcmUubGVuZ3RoLFxuICAgICAgICAgICAgb3BlbjogcGxUeXBlc1tzdGF0ZUNoYXJdLm9wZW4sXG4gICAgICAgICAgICBjbG9zZTogcGxUeXBlc1tzdGF0ZUNoYXJdLmNsb3NlLFxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmRlYnVnKHRoaXMucGF0dGVybiwgJ1xcdCcsIHBsRW50cnkpXG4gICAgICAgICAgcGF0dGVybkxpc3RTdGFjay5wdXNoKHBsRW50cnkpXG4gICAgICAgICAgLy8gbmVnYXRpb24gaXMgKD86KD8hKD86anMpKD86PHJlc3Q+KSlbXi9dKilcbiAgICAgICAgICByZSArPSBwbEVudHJ5Lm9wZW5cbiAgICAgICAgICAvLyBuZXh0IGVudHJ5IHN0YXJ0cyB3aXRoIGEgZG90IG1heWJlP1xuICAgICAgICAgIGlmIChwbEVudHJ5LnN0YXJ0ID09PSAwICYmIHBsRW50cnkudHlwZSAhPT0gJyEnKSB7XG4gICAgICAgICAgICBkb3RUcmF2QWxsb3dlZCA9IHRydWVcbiAgICAgICAgICAgIHJlICs9IHN1YlBhdHRlcm5TdGFydChwYXR0ZXJuLnNsaWNlKGkgKyAxKSlcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5kZWJ1ZygncGxUeXBlICVqICVqJywgc3RhdGVDaGFyLCByZSlcbiAgICAgICAgICBzdGF0ZUNoYXIgPSBmYWxzZVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICBjYXNlICcpJzoge1xuICAgICAgICAgIGNvbnN0IHBsRW50cnkgPSBwYXR0ZXJuTGlzdFN0YWNrW3BhdHRlcm5MaXN0U3RhY2subGVuZ3RoIC0gMV1cbiAgICAgICAgICBpZiAoaW5DbGFzcyB8fCAhcGxFbnRyeSkge1xuICAgICAgICAgICAgcmUgKz0gJ1xcXFwpJ1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9XG4gICAgICAgICAgcGF0dGVybkxpc3RTdGFjay5wb3AoKVxuXG4gICAgICAgICAgLy8gY2xvc2luZyBhbiBleHRnbG9iXG4gICAgICAgICAgY2xlYXJTdGF0ZUNoYXIoKVxuICAgICAgICAgIGhhc01hZ2ljID0gdHJ1ZVxuICAgICAgICAgIHBsID0gcGxFbnRyeVxuICAgICAgICAgIC8vIG5lZ2F0aW9uIGlzICg/Oig/IWpzKVteL10qKVxuICAgICAgICAgIC8vIFRoZSBvdGhlcnMgYXJlICg/OjxwYXR0ZXJuPik8dHlwZT5cbiAgICAgICAgICByZSArPSBwbC5jbG9zZVxuICAgICAgICAgIGlmIChwbC50eXBlID09PSAnIScpIHtcbiAgICAgICAgICAgIG5lZ2F0aXZlTGlzdHMucHVzaChPYmplY3QuYXNzaWduKHBsLCB7IHJlRW5kOiByZS5sZW5ndGggfSkpXG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICBjYXNlICd8Jzoge1xuICAgICAgICAgIGNvbnN0IHBsRW50cnkgPSBwYXR0ZXJuTGlzdFN0YWNrW3BhdHRlcm5MaXN0U3RhY2subGVuZ3RoIC0gMV1cbiAgICAgICAgICBpZiAoaW5DbGFzcyB8fCAhcGxFbnRyeSkge1xuICAgICAgICAgICAgcmUgKz0gJ1xcXFx8J1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjbGVhclN0YXRlQ2hhcigpXG4gICAgICAgICAgcmUgKz0gJ3wnXG4gICAgICAgICAgLy8gbmV4dCBzdWJwYXR0ZXJuIGNhbiBzdGFydCB3aXRoIGEgZG90P1xuICAgICAgICAgIGlmIChwbEVudHJ5LnN0YXJ0ID09PSAwICYmIHBsRW50cnkudHlwZSAhPT0gJyEnKSB7XG4gICAgICAgICAgICBkb3RUcmF2QWxsb3dlZCA9IHRydWVcbiAgICAgICAgICAgIHJlICs9IHN1YlBhdHRlcm5TdGFydChwYXR0ZXJuLnNsaWNlKGkgKyAxKSlcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRoZXNlIGFyZSBtb3N0bHkgdGhlIHNhbWUgaW4gcmVnZXhwIGFuZCBnbG9iXG4gICAgICAgIGNhc2UgJ1snOlxuICAgICAgICAgIC8vIHN3YWxsb3cgYW55IHN0YXRlLXRyYWNraW5nIGNoYXIgYmVmb3JlIHRoZSBbXG4gICAgICAgICAgY2xlYXJTdGF0ZUNoYXIoKVxuXG4gICAgICAgICAgaWYgKGluQ2xhc3MpIHtcbiAgICAgICAgICAgIHJlICs9ICdcXFxcJyArIGNcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaW5DbGFzcyA9IHRydWVcbiAgICAgICAgICBjbGFzc1N0YXJ0ID0gaVxuICAgICAgICAgIHJlQ2xhc3NTdGFydCA9IHJlLmxlbmd0aFxuICAgICAgICAgIHJlICs9IGNcbiAgICAgICAgY29udGludWVcblxuICAgICAgICBjYXNlICddJzpcbiAgICAgICAgICAvLyAgYSByaWdodCBicmFja2V0IHNoYWxsIGxvc2UgaXRzIHNwZWNpYWxcbiAgICAgICAgICAvLyAgbWVhbmluZyBhbmQgcmVwcmVzZW50IGl0c2VsZiBpblxuICAgICAgICAgIC8vICBhIGJyYWNrZXQgZXhwcmVzc2lvbiBpZiBpdCBvY2N1cnNcbiAgICAgICAgICAvLyAgZmlyc3QgaW4gdGhlIGxpc3QuICAtLSBQT1NJWC4yIDIuOC4zLjJcbiAgICAgICAgICBpZiAoaSA9PT0gY2xhc3NTdGFydCArIDEgfHwgIWluQ2xhc3MpIHtcbiAgICAgICAgICAgIHJlICs9ICdcXFxcJyArIGNcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gc3BsaXQgd2hlcmUgdGhlIGxhc3QgWyB3YXMsIG1ha2Ugc3VyZSB3ZSBkb24ndCBoYXZlXG4gICAgICAgICAgLy8gYW4gaW52YWxpZCByZS4gaWYgc28sIHJlLXdhbGsgdGhlIGNvbnRlbnRzIG9mIHRoZVxuICAgICAgICAgIC8vIHdvdWxkLWJlIGNsYXNzIHRvIHJlLXRyYW5zbGF0ZSBhbnkgY2hhcmFjdGVycyB0aGF0XG4gICAgICAgICAgLy8gd2VyZSBwYXNzZWQgdGhyb3VnaCBhcy1pc1xuICAgICAgICAgIC8vIFRPRE86IEl0IHdvdWxkIHByb2JhYmx5IGJlIGZhc3RlciB0byBkZXRlcm1pbmUgdGhpc1xuICAgICAgICAgIC8vIHdpdGhvdXQgYSB0cnkvY2F0Y2ggYW5kIGEgbmV3IFJlZ0V4cCwgYnV0IGl0J3MgdHJpY2t5XG4gICAgICAgICAgLy8gdG8gZG8gc2FmZWx5LiAgRm9yIG5vdywgdGhpcyBpcyBzYWZlIGFuZCB3b3Jrcy5cbiAgICAgICAgICBjcyA9IHBhdHRlcm4uc3Vic3RyaW5nKGNsYXNzU3RhcnQgKyAxLCBpKVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBSZWdFeHAoJ1snICsgYnJhRXhwRXNjYXBlKGNoYXJVbmVzY2FwZShjcykpICsgJ10nKVxuICAgICAgICAgICAgLy8gbG9va3MgZ29vZCwgZmluaXNoIHVwIHRoZSBjbGFzcy5cbiAgICAgICAgICAgIHJlICs9IGNcbiAgICAgICAgICB9IGNhdGNoIChlcikge1xuICAgICAgICAgICAgLy8gb3V0IG9mIG9yZGVyIHJhbmdlcyBpbiBKUyBhcmUgZXJyb3JzLCBidXQgaW4gZ2xvYiBzeW50YXgsXG4gICAgICAgICAgICAvLyB0aGV5J3JlIGp1c3QgYSByYW5nZSB0aGF0IG1hdGNoZXMgbm90aGluZy5cbiAgICAgICAgICAgIHJlID0gcmUuc3Vic3RyaW5nKDAsIHJlQ2xhc3NTdGFydCkgKyAnKD86JC4pJyAvLyBtYXRjaCBub3RoaW5nIGV2ZXJcbiAgICAgICAgICB9XG4gICAgICAgICAgaGFzTWFnaWMgPSB0cnVlXG4gICAgICAgICAgaW5DbGFzcyA9IGZhbHNlXG4gICAgICAgIGNvbnRpbnVlXG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAvLyBzd2FsbG93IGFueSBzdGF0ZSBjaGFyIHRoYXQgd2Fzbid0IGNvbnN1bWVkXG4gICAgICAgICAgY2xlYXJTdGF0ZUNoYXIoKVxuXG4gICAgICAgICAgaWYgKHJlU3BlY2lhbHNbY10gJiYgIShjID09PSAnXicgJiYgaW5DbGFzcykpIHtcbiAgICAgICAgICAgIHJlICs9ICdcXFxcJ1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJlICs9IGNcbiAgICAgICAgICBicmVha1xuXG4gICAgICB9IC8vIHN3aXRjaFxuICAgIH0gLy8gZm9yXG5cbiAgICAvLyBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgd2UgbGVmdCBhIGNsYXNzIG9wZW4uXG4gICAgLy8gXCJbYWJjXCIgaXMgdmFsaWQsIGVxdWl2YWxlbnQgdG8gXCJcXFthYmNcIlxuICAgIGlmIChpbkNsYXNzKSB7XG4gICAgICAvLyBzcGxpdCB3aGVyZSB0aGUgbGFzdCBbIHdhcywgYW5kIGVzY2FwZSBpdFxuICAgICAgLy8gdGhpcyBpcyBhIGh1Z2UgcGl0YS4gIFdlIG5vdyBoYXZlIHRvIHJlLXdhbGtcbiAgICAgIC8vIHRoZSBjb250ZW50cyBvZiB0aGUgd291bGQtYmUgY2xhc3MgdG8gcmUtdHJhbnNsYXRlXG4gICAgICAvLyBhbnkgY2hhcmFjdGVycyB0aGF0IHdlcmUgcGFzc2VkIHRocm91Z2ggYXMtaXNcbiAgICAgIGNzID0gcGF0dGVybi5zbGljZShjbGFzc1N0YXJ0ICsgMSlcbiAgICAgIHNwID0gdGhpcy5wYXJzZShjcywgU1VCUEFSU0UpXG4gICAgICByZSA9IHJlLnN1YnN0cmluZygwLCByZUNsYXNzU3RhcnQpICsgJ1xcXFxbJyArIHNwWzBdXG4gICAgICBoYXNNYWdpYyA9IGhhc01hZ2ljIHx8IHNwWzFdXG4gICAgfVxuXG4gICAgLy8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIHdlIGhhZCBhICsoIHRoaW5nIGF0IHRoZSAqZW5kKlxuICAgIC8vIG9mIHRoZSBwYXR0ZXJuLlxuICAgIC8vIGVhY2ggcGF0dGVybiBsaXN0IHN0YWNrIGFkZHMgMyBjaGFycywgYW5kIHdlIG5lZWQgdG8gZ28gdGhyb3VnaFxuICAgIC8vIGFuZCBlc2NhcGUgYW55IHwgY2hhcnMgdGhhdCB3ZXJlIHBhc3NlZCB0aHJvdWdoIGFzLWlzIGZvciB0aGUgcmVnZXhwLlxuICAgIC8vIEdvIHRocm91Z2ggYW5kIGVzY2FwZSB0aGVtLCB0YWtpbmcgY2FyZSBub3QgdG8gZG91YmxlLWVzY2FwZSBhbnlcbiAgICAvLyB8IGNoYXJzIHRoYXQgd2VyZSBhbHJlYWR5IGVzY2FwZWQuXG4gICAgZm9yIChwbCA9IHBhdHRlcm5MaXN0U3RhY2sucG9wKCk7IHBsOyBwbCA9IHBhdHRlcm5MaXN0U3RhY2sucG9wKCkpIHtcbiAgICAgIGxldCB0YWlsXG4gICAgICB0YWlsID0gcmUuc2xpY2UocGwucmVTdGFydCArIHBsLm9wZW4ubGVuZ3RoKVxuICAgICAgdGhpcy5kZWJ1Zygnc2V0dGluZyB0YWlsJywgcmUsIHBsKVxuICAgICAgLy8gbWF5YmUgc29tZSBldmVuIG51bWJlciBvZiBcXCwgdGhlbiBtYXliZSAxIFxcLCBmb2xsb3dlZCBieSBhIHxcbiAgICAgIHRhaWwgPSB0YWlsLnJlcGxhY2UoLygoPzpcXFxcezJ9KXswLDY0fSkoXFxcXD8pXFx8L2csIChfLCAkMSwgJDIpID0+IHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgLSBzaG91bGQgYWxyZWFkeSBiZSBkb25lICovXG4gICAgICAgIGlmICghJDIpIHtcbiAgICAgICAgICAvLyB0aGUgfCBpc24ndCBhbHJlYWR5IGVzY2FwZWQsIHNvIGVzY2FwZSBpdC5cbiAgICAgICAgICAkMiA9ICdcXFxcJ1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbmVlZCB0byBlc2NhcGUgYWxsIHRob3NlIHNsYXNoZXMgKmFnYWluKiwgd2l0aG91dCBlc2NhcGluZyB0aGVcbiAgICAgICAgLy8gb25lIHRoYXQgd2UgbmVlZCBmb3IgZXNjYXBpbmcgdGhlIHwgY2hhcmFjdGVyLiAgQXMgaXQgd29ya3Mgb3V0LFxuICAgICAgICAvLyBlc2NhcGluZyBhbiBldmVuIG51bWJlciBvZiBzbGFzaGVzIGNhbiBiZSBkb25lIGJ5IHNpbXBseSByZXBlYXRpbmdcbiAgICAgICAgLy8gaXQgZXhhY3RseSBhZnRlciBpdHNlbGYuICBUaGF0J3Mgd2h5IHRoaXMgdHJpY2sgd29ya3MuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIEkgYW0gc29ycnkgdGhhdCB5b3UgaGF2ZSB0byBzZWUgdGhpcy5cbiAgICAgICAgcmV0dXJuICQxICsgJDEgKyAkMiArICd8J1xuICAgICAgfSlcblxuICAgICAgdGhpcy5kZWJ1ZygndGFpbD0lalxcbiAgICVzJywgdGFpbCwgdGFpbCwgcGwsIHJlKVxuICAgICAgY29uc3QgdCA9IHBsLnR5cGUgPT09ICcqJyA/IHN0YXJcbiAgICAgICAgOiBwbC50eXBlID09PSAnPycgPyBxbWFya1xuICAgICAgICA6ICdcXFxcJyArIHBsLnR5cGVcblxuICAgICAgaGFzTWFnaWMgPSB0cnVlXG4gICAgICByZSA9IHJlLnNsaWNlKDAsIHBsLnJlU3RhcnQpICsgdCArICdcXFxcKCcgKyB0YWlsXG4gICAgfVxuXG4gICAgLy8gaGFuZGxlIHRyYWlsaW5nIHRoaW5ncyB0aGF0IG9ubHkgbWF0dGVyIGF0IHRoZSB2ZXJ5IGVuZC5cbiAgICBjbGVhclN0YXRlQ2hhcigpXG4gICAgaWYgKGVzY2FwaW5nKSB7XG4gICAgICAvLyB0cmFpbGluZyBcXFxcXG4gICAgICByZSArPSAnXFxcXFxcXFwnXG4gICAgfVxuXG4gICAgLy8gb25seSBuZWVkIHRvIGFwcGx5IHRoZSBub2RvdCBzdGFydCBpZiB0aGUgcmUgc3RhcnRzIHdpdGhcbiAgICAvLyBzb21ldGhpbmcgdGhhdCBjb3VsZCBjb25jZWl2YWJseSBjYXB0dXJlIGEgZG90XG4gICAgY29uc3QgYWRkUGF0dGVyblN0YXJ0ID0gYWRkUGF0dGVyblN0YXJ0U2V0W3JlLmNoYXJBdCgwKV1cblxuICAgIC8vIEhhY2sgdG8gd29yayBhcm91bmQgbGFjayBvZiBuZWdhdGl2ZSBsb29rYmVoaW5kIGluIEpTXG4gICAgLy8gQSBwYXR0ZXJuIGxpa2U6ICouISh4KS4hKHl8eikgbmVlZHMgdG8gZW5zdXJlIHRoYXQgYSBuYW1lXG4gICAgLy8gbGlrZSAnYS54eXoueXonIGRvZXNuJ3QgbWF0Y2guICBTbywgdGhlIGZpcnN0IG5lZ2F0aXZlXG4gICAgLy8gbG9va2FoZWFkLCBoYXMgdG8gbG9vayBBTEwgdGhlIHdheSBhaGVhZCwgdG8gdGhlIGVuZCBvZlxuICAgIC8vIHRoZSBwYXR0ZXJuLlxuICAgIGZvciAobGV0IG4gPSBuZWdhdGl2ZUxpc3RzLmxlbmd0aCAtIDE7IG4gPiAtMTsgbi0tKSB7XG4gICAgICBjb25zdCBubCA9IG5lZ2F0aXZlTGlzdHNbbl1cblxuICAgICAgY29uc3QgbmxCZWZvcmUgPSByZS5zbGljZSgwLCBubC5yZVN0YXJ0KVxuICAgICAgY29uc3QgbmxGaXJzdCA9IHJlLnNsaWNlKG5sLnJlU3RhcnQsIG5sLnJlRW5kIC0gOClcbiAgICAgIGxldCBubEFmdGVyID0gcmUuc2xpY2UobmwucmVFbmQpXG4gICAgICBjb25zdCBubExhc3QgPSByZS5zbGljZShubC5yZUVuZCAtIDgsIG5sLnJlRW5kKSArIG5sQWZ0ZXJcblxuICAgICAgLy8gSGFuZGxlIG5lc3RlZCBzdHVmZiBsaWtlICooKi5qc3whKCouanNvbikpLCB3aGVyZSBvcGVuIHBhcmVuc1xuICAgICAgLy8gbWVhbiB0aGF0IHdlIHNob3VsZCAqbm90KiBpbmNsdWRlIHRoZSApIGluIHRoZSBiaXQgdGhhdCBpcyBjb25zaWRlcmVkXG4gICAgICAvLyBcImFmdGVyXCIgdGhlIG5lZ2F0ZWQgc2VjdGlvbi5cbiAgICAgIGNvbnN0IGNsb3NlUGFyZW5zQmVmb3JlID0gbmxCZWZvcmUuc3BsaXQoJyknKS5sZW5ndGhcbiAgICAgIGNvbnN0IG9wZW5QYXJlbnNCZWZvcmUgPSBubEJlZm9yZS5zcGxpdCgnKCcpLmxlbmd0aCAtIGNsb3NlUGFyZW5zQmVmb3JlXG4gICAgICBsZXQgY2xlYW5BZnRlciA9IG5sQWZ0ZXJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3BlblBhcmVuc0JlZm9yZTsgaSsrKSB7XG4gICAgICAgIGNsZWFuQWZ0ZXIgPSBjbGVhbkFmdGVyLnJlcGxhY2UoL1xcKVsrKj9dPy8sICcnKVxuICAgICAgfVxuICAgICAgbmxBZnRlciA9IGNsZWFuQWZ0ZXJcblxuICAgICAgY29uc3QgZG9sbGFyID0gbmxBZnRlciA9PT0gJycgJiYgaXNTdWIgIT09IFNVQlBBUlNFID8gJyg/OiR8XFxcXC8pJyA6ICcnXG5cbiAgICAgIHJlID0gbmxCZWZvcmUgKyBubEZpcnN0ICsgbmxBZnRlciArIGRvbGxhciArIG5sTGFzdFxuICAgIH1cblxuICAgIC8vIGlmIHRoZSByZSBpcyBub3QgXCJcIiBhdCB0aGlzIHBvaW50LCB0aGVuIHdlIG5lZWQgdG8gbWFrZSBzdXJlXG4gICAgLy8gaXQgZG9lc24ndCBtYXRjaCBhZ2FpbnN0IGFuIGVtcHR5IHBhdGggcGFydC5cbiAgICAvLyBPdGhlcndpc2UgYS8qIHdpbGwgbWF0Y2ggYS8sIHdoaWNoIGl0IHNob3VsZCBub3QuXG4gICAgaWYgKHJlICE9PSAnJyAmJiBoYXNNYWdpYykge1xuICAgICAgcmUgPSAnKD89LiknICsgcmVcbiAgICB9XG5cbiAgICBpZiAoYWRkUGF0dGVyblN0YXJ0KSB7XG4gICAgICByZSA9IHBhdHRlcm5TdGFydCgpICsgcmVcbiAgICB9XG5cbiAgICAvLyBwYXJzaW5nIGp1c3QgYSBwaWVjZSBvZiBhIGxhcmdlciBwYXR0ZXJuLlxuICAgIGlmIChpc1N1YiA9PT0gU1VCUEFSU0UpIHtcbiAgICAgIHJldHVybiBbcmUsIGhhc01hZ2ljXVxuICAgIH1cblxuICAgIC8vIGlmIGl0J3Mgbm9jYXNlLCBhbmQgdGhlIGxjYXNlL3VwcGVyY2FzZSBkb24ndCBtYXRjaCwgaXQncyBtYWdpY1xuICAgIGlmIChvcHRpb25zLm5vY2FzZSAmJiAhaGFzTWFnaWMpIHtcbiAgICAgIGhhc01hZ2ljID0gcGF0dGVybi50b1VwcGVyQ2FzZSgpICE9PSBwYXR0ZXJuLnRvTG93ZXJDYXNlKClcbiAgICB9XG5cbiAgICAvLyBza2lwIHRoZSByZWdleHAgZm9yIG5vbi1tYWdpY2FsIHBhdHRlcm5zXG4gICAgLy8gdW5lc2NhcGUgYW55dGhpbmcgaW4gaXQsIHRob3VnaCwgc28gdGhhdCBpdCdsbCBiZVxuICAgIC8vIGFuIGV4YWN0IG1hdGNoIGFnYWluc3QgYSBmaWxlIGV0Yy5cbiAgICBpZiAoIWhhc01hZ2ljKSB7XG4gICAgICByZXR1cm4gZ2xvYlVuZXNjYXBlKHBhdHRlcm4pXG4gICAgfVxuXG4gICAgY29uc3QgZmxhZ3MgPSBvcHRpb25zLm5vY2FzZSA/ICdpJyA6ICcnXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKG5ldyBSZWdFeHAoJ14nICsgcmUgKyAnJCcsIGZsYWdzKSwge1xuICAgICAgICBfZ2xvYjogcGF0dGVybixcbiAgICAgICAgX3NyYzogcmUsXG4gICAgICB9KVxuICAgIH0gY2F0Y2ggKGVyKSAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAtIHNob3VsZCBiZSBpbXBvc3NpYmxlICovIHtcbiAgICAgIC8vIElmIGl0IHdhcyBhbiBpbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbiwgdGhlbiBpdCBjYW4ndCBtYXRjaFxuICAgICAgLy8gYW55dGhpbmcuICBUaGlzIHRyaWNrIGxvb2tzIGZvciBhIGNoYXJhY3RlciBhZnRlciB0aGUgZW5kIG9mXG4gICAgICAvLyB0aGUgc3RyaW5nLCB3aGljaCBpcyBvZiBjb3Vyc2UgaW1wb3NzaWJsZSwgZXhjZXB0IGluIG11bHRpLWxpbmVcbiAgICAgIC8vIG1vZGUsIGJ1dCBpdCdzIG5vdCBhIC9tIHJlZ2V4LlxuICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoJyQuJylcbiAgICB9XG4gIH1cblxuICBtYWtlUmUgKCkge1xuICAgIGlmICh0aGlzLnJlZ2V4cCB8fCB0aGlzLnJlZ2V4cCA9PT0gZmFsc2UpIHJldHVybiB0aGlzLnJlZ2V4cFxuXG4gICAgLy8gYXQgdGhpcyBwb2ludCwgdGhpcy5zZXQgaXMgYSAyZCBhcnJheSBvZiBwYXJ0aWFsXG4gICAgLy8gcGF0dGVybiBzdHJpbmdzLCBvciBcIioqXCIuXG4gICAgLy9cbiAgICAvLyBJdCdzIGJldHRlciB0byB1c2UgLm1hdGNoKCkuICBUaGlzIGZ1bmN0aW9uIHNob3VsZG4ndFxuICAgIC8vIGJlIHVzZWQsIHJlYWxseSwgYnV0IGl0J3MgcHJldHR5IGNvbnZlbmllbnQgc29tZXRpbWVzLFxuICAgIC8vIHdoZW4geW91IGp1c3Qgd2FudCB0byB3b3JrIHdpdGggYSByZWdleC5cbiAgICBjb25zdCBzZXQgPSB0aGlzLnNldFxuXG4gICAgaWYgKCFzZXQubGVuZ3RoKSB7XG4gICAgICB0aGlzLnJlZ2V4cCA9IGZhbHNlXG4gICAgICByZXR1cm4gdGhpcy5yZWdleHBcbiAgICB9XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9uc1xuXG4gICAgY29uc3QgdHdvU3RhciA9IG9wdGlvbnMubm9nbG9ic3RhciA/IHN0YXJcbiAgICAgIDogb3B0aW9ucy5kb3QgPyB0d29TdGFyRG90XG4gICAgICA6IHR3b1N0YXJOb0RvdFxuICAgIGNvbnN0IGZsYWdzID0gb3B0aW9ucy5ub2Nhc2UgPyAnaScgOiAnJ1xuXG4gICAgLy8gY29hbGVzY2UgZ2xvYnN0YXJzIGFuZCByZWdleHBpZnkgbm9uLWdsb2JzdGFyIHBhdHRlcm5zXG4gICAgLy8gaWYgaXQncyB0aGUgb25seSBpdGVtLCB0aGVuIHdlIGp1c3QgZG8gb25lIHR3b1N0YXJcbiAgICAvLyBpZiBpdCdzIHRoZSBmaXJzdCwgYW5kIHRoZXJlIGFyZSBtb3JlLCBwcmVwZW5kIChcXC98dHdvU3RhclxcLyk/IHRvIG5leHRcbiAgICAvLyBpZiBpdCdzIHRoZSBsYXN0LCBhcHBlbmQgKFxcL3R3b1N0YXJ8KSB0byBwcmV2aW91c1xuICAgIC8vIGlmIGl0J3MgaW4gdGhlIG1pZGRsZSwgYXBwZW5kIChcXC98XFwvdHdvU3RhclxcLykgdG8gcHJldmlvdXNcbiAgICAvLyB0aGVuIGZpbHRlciBvdXQgR0xPQlNUQVIgc3ltYm9sc1xuICAgIGxldCByZSA9IHNldC5tYXAocGF0dGVybiA9PiB7XG4gICAgICBwYXR0ZXJuID0gcGF0dGVybi5tYXAocCA9PlxuICAgICAgICB0eXBlb2YgcCA9PT0gJ3N0cmluZycgPyByZWdFeHBFc2NhcGUocClcbiAgICAgICAgOiBwID09PSBHTE9CU1RBUiA/IEdMT0JTVEFSXG4gICAgICAgIDogcC5fc3JjXG4gICAgICApLnJlZHVjZSgoc2V0LCBwKSA9PiB7XG4gICAgICAgIGlmICghKHNldFtzZXQubGVuZ3RoIC0gMV0gPT09IEdMT0JTVEFSICYmIHAgPT09IEdMT0JTVEFSKSkge1xuICAgICAgICAgIHNldC5wdXNoKHApXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNldFxuICAgICAgfSwgW10pXG4gICAgICBwYXR0ZXJuLmZvckVhY2goKHAsIGkpID0+IHtcbiAgICAgICAgaWYgKHAgIT09IEdMT0JTVEFSIHx8IHBhdHRlcm5baS0xXSA9PT0gR0xPQlNUQVIpIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgIGlmIChwYXR0ZXJuLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHBhdHRlcm5baSsxXSA9ICcoPzpcXFxcXFwvfCcgKyB0d29TdGFyICsgJ1xcXFxcXC8pPycgKyBwYXR0ZXJuW2krMV1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGF0dGVybltpXSA9IHR3b1N0YXJcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoaSA9PT0gcGF0dGVybi5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgcGF0dGVybltpLTFdICs9ICcoPzpcXFxcXFwvfCcgKyB0d29TdGFyICsgJyk/J1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhdHRlcm5baS0xXSArPSAnKD86XFxcXFxcL3xcXFxcXFwvJyArIHR3b1N0YXIgKyAnXFxcXFxcLyknICsgcGF0dGVybltpKzFdXG4gICAgICAgICAgcGF0dGVybltpKzFdID0gR0xPQlNUQVJcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIHJldHVybiBwYXR0ZXJuLmZpbHRlcihwID0+IHAgIT09IEdMT0JTVEFSKS5qb2luKCcvJylcbiAgICB9KS5qb2luKCd8JylcblxuICAgIC8vIG11c3QgbWF0Y2ggZW50aXJlIHBhdHRlcm5cbiAgICAvLyBlbmRpbmcgaW4gYSAqIG9yICoqIHdpbGwgbWFrZSBpdCBsZXNzIHN0cmljdC5cbiAgICByZSA9ICdeKD86JyArIHJlICsgJykkJ1xuXG4gICAgLy8gY2FuIG1hdGNoIGFueXRoaW5nLCBhcyBsb25nIGFzIGl0J3Mgbm90IHRoaXMuXG4gICAgaWYgKHRoaXMubmVnYXRlKSByZSA9ICdeKD8hJyArIHJlICsgJykuKiQnXG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5yZWdleHAgPSBuZXcgUmVnRXhwKHJlLCBmbGFncylcbiAgICB9IGNhdGNoIChleCkgLyogaXN0YW5idWwgaWdub3JlIG5leHQgLSBzaG91bGQgYmUgaW1wb3NzaWJsZSAqLyB7XG4gICAgICB0aGlzLnJlZ2V4cCA9IGZhbHNlXG4gICAgfVxuICAgIHJldHVybiB0aGlzLnJlZ2V4cFxuICB9XG5cbiAgbWF0Y2ggKGYsIHBhcnRpYWwgPSB0aGlzLnBhcnRpYWwpIHtcbiAgICB0aGlzLmRlYnVnKCdtYXRjaCcsIGYsIHRoaXMucGF0dGVybilcbiAgICAvLyBzaG9ydC1jaXJjdWl0IGluIHRoZSBjYXNlIG9mIGJ1c3RlZCB0aGluZ3MuXG4gICAgLy8gY29tbWVudHMsIGV0Yy5cbiAgICBpZiAodGhpcy5jb21tZW50KSByZXR1cm4gZmFsc2VcbiAgICBpZiAodGhpcy5lbXB0eSkgcmV0dXJuIGYgPT09ICcnXG5cbiAgICBpZiAoZiA9PT0gJy8nICYmIHBhcnRpYWwpIHJldHVybiB0cnVlXG5cbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zXG5cbiAgICAvLyB3aW5kb3dzOiBuZWVkIHRvIHVzZSAvLCBub3QgXFxcbiAgICBpZiAocGF0aC5zZXAgIT09ICcvJykge1xuICAgICAgZiA9IGYuc3BsaXQocGF0aC5zZXApLmpvaW4oJy8nKVxuICAgIH1cblxuICAgIC8vIHRyZWF0IHRoZSB0ZXN0IHBhdGggYXMgYSBzZXQgb2YgcGF0aHBhcnRzLlxuICAgIGYgPSBmLnNwbGl0KHNsYXNoU3BsaXQpXG4gICAgdGhpcy5kZWJ1Zyh0aGlzLnBhdHRlcm4sICdzcGxpdCcsIGYpXG5cbiAgICAvLyBqdXN0IE9ORSBvZiB0aGUgcGF0dGVybiBzZXRzIGluIHRoaXMuc2V0IG5lZWRzIHRvIG1hdGNoXG4gICAgLy8gaW4gb3JkZXIgZm9yIGl0IHRvIGJlIHZhbGlkLiAgSWYgbmVnYXRpbmcsIHRoZW4ganVzdCBvbmVcbiAgICAvLyBtYXRjaCBtZWFucyB0aGF0IHdlIGhhdmUgZmFpbGVkLlxuICAgIC8vIEVpdGhlciB3YXksIHJldHVybiBvbiB0aGUgZmlyc3QgaGl0LlxuXG4gICAgY29uc3Qgc2V0ID0gdGhpcy5zZXRcbiAgICB0aGlzLmRlYnVnKHRoaXMucGF0dGVybiwgJ3NldCcsIHNldClcblxuICAgIC8vIEZpbmQgdGhlIGJhc2VuYW1lIG9mIHRoZSBwYXRoIGJ5IGxvb2tpbmcgZm9yIHRoZSBsYXN0IG5vbi1lbXB0eSBzZWdtZW50XG4gICAgbGV0IGZpbGVuYW1lXG4gICAgZm9yIChsZXQgaSA9IGYubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGZpbGVuYW1lID0gZltpXVxuICAgICAgaWYgKGZpbGVuYW1lKSBicmVha1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2V0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBwYXR0ZXJuID0gc2V0W2ldXG4gICAgICBsZXQgZmlsZSA9IGZcbiAgICAgIGlmIChvcHRpb25zLm1hdGNoQmFzZSAmJiBwYXR0ZXJuLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBmaWxlID0gW2ZpbGVuYW1lXVxuICAgICAgfVxuICAgICAgY29uc3QgaGl0ID0gdGhpcy5tYXRjaE9uZShmaWxlLCBwYXR0ZXJuLCBwYXJ0aWFsKVxuICAgICAgaWYgKGhpdCkge1xuICAgICAgICBpZiAob3B0aW9ucy5mbGlwTmVnYXRlKSByZXR1cm4gdHJ1ZVxuICAgICAgICByZXR1cm4gIXRoaXMubmVnYXRlXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gZGlkbid0IGdldCBhbnkgaGl0cy4gIHRoaXMgaXMgc3VjY2VzcyBpZiBpdCdzIGEgbmVnYXRpdmVcbiAgICAvLyBwYXR0ZXJuLCBmYWlsdXJlIG90aGVyd2lzZS5cbiAgICBpZiAob3B0aW9ucy5mbGlwTmVnYXRlKSByZXR1cm4gZmFsc2VcbiAgICByZXR1cm4gdGhpcy5uZWdhdGVcbiAgfVxuXG4gIHN0YXRpYyBkZWZhdWx0cyAoZGVmKSB7XG4gICAgcmV0dXJuIG1pbmltYXRjaC5kZWZhdWx0cyhkZWYpLk1pbmltYXRjaFxuICB9XG59XG5cbm1pbmltYXRjaC5NaW5pbWF0Y2ggPSBNaW5pbWF0Y2hcbiIsCiAgICAibW9kdWxlLmV4cG9ydHMgPSByZWFkZGlyR2xvYjtcblxuY29uc3QgZnMgPSByZXF1aXJlKCdmcycpO1xuY29uc3QgeyBFdmVudEVtaXR0ZXIgfSA9IHJlcXVpcmUoJ2V2ZW50cycpO1xuY29uc3QgeyBNaW5pbWF0Y2ggfSA9IHJlcXVpcmUoJ21pbmltYXRjaCcpO1xuY29uc3QgeyByZXNvbHZlIH0gPSByZXF1aXJlKCdwYXRoJyk7XG5cbmZ1bmN0aW9uIHJlYWRkaXIoZGlyLCBzdHJpY3QpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBmcy5yZWFkZGlyKGRpciwge3dpdGhGaWxlVHlwZXM6IHRydWV9ICwoZXJyLCBmaWxlcykgPT4ge1xuICAgICAgaWYoZXJyKSB7XG4gICAgICAgIHN3aXRjaCAoZXJyLmNvZGUpIHtcbiAgICAgICAgICBjYXNlICdFTk9URElSJzogICAgICAvLyBOb3QgYSBkaXJlY3RvcnlcbiAgICAgICAgICAgIGlmKHN0cmljdCkge1xuICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlc29sdmUoW10pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnRU5PVFNVUCc6ICAgICAgLy8gT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWRcbiAgICAgICAgICBjYXNlICdFTk9FTlQnOiAgICAgICAvLyBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XG4gICAgICAgICAgY2FzZSAnRU5BTUVUT09MT05HJzogLy8gRmlsZW5hbWUgdG9vIGxvbmdcbiAgICAgICAgICBjYXNlICdVTktOT1dOJzpcbiAgICAgICAgICAgIHJlc29sdmUoW10pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnRUxPT1AnOiAgICAgICAgLy8gVG9vIG1hbnkgbGV2ZWxzIG9mIHN5bWJvbGljIGxpbmtzXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUoZmlsZXMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIHN0YXQoZmlsZSwgZm9sbG93U3ltbGlua3MpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBzdGF0RnVuYyA9IGZvbGxvd1N5bWxpbmtzID8gZnMuc3RhdCA6IGZzLmxzdGF0O1xuICAgIHN0YXRGdW5jKGZpbGUsIChlcnIsIHN0YXRzKSA9PiB7XG4gICAgICBpZihlcnIpIHtcbiAgICAgICAgc3dpdGNoIChlcnIuY29kZSkge1xuICAgICAgICAgIGNhc2UgJ0VOT0VOVCc6XG4gICAgICAgICAgICBpZihmb2xsb3dTeW1saW5rcykge1xuICAgICAgICAgICAgICAvLyBGYWxsYmFjayB0byBsc3RhdCB0byBoYW5kbGUgYnJva2VuIGxpbmtzIGFzIGZpbGVzXG4gICAgICAgICAgICAgIHJlc29sdmUoc3RhdChmaWxlLCBmYWxzZSkpOyBcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlc29sdmUobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNvbHZlKHN0YXRzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uKiBleHBsb3JlV2Fsa0FzeW5jKGRpciwgcGF0aCwgZm9sbG93U3ltbGlua3MsIHVzZVN0YXQsIHNob3VsZFNraXAsIHN0cmljdCkge1xuICBsZXQgZmlsZXMgPSBhd2FpdCByZWFkZGlyKHBhdGggKyBkaXIsIHN0cmljdCk7XG4gIGZvcihjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgbGV0IG5hbWUgPSBmaWxlLm5hbWU7XG4gICAgaWYobmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyB1bmRlZmluZWQgZmlsZS5uYW1lIG1lYW5zIHRoZSBgd2l0aEZpbGVUeXBlc2Agb3B0aW9ucyBpcyBub3Qgc3VwcG9ydGVkIGJ5IG5vZGVcbiAgICAgIC8vIHdlIGhhdmUgdG8gY2FsbCB0aGUgc3RhdCBmdW5jdGlvbiB0byBrbm93IGlmIGZpbGUgaXMgZGlyZWN0b3J5IG9yIG5vdC5cbiAgICAgIG5hbWUgPSBmaWxlO1xuICAgICAgdXNlU3RhdCA9IHRydWU7XG4gICAgfVxuICAgIGNvbnN0IGZpbGVuYW1lID0gZGlyICsgJy8nICsgbmFtZTtcbiAgICBjb25zdCByZWxhdGl2ZSA9IGZpbGVuYW1lLnNsaWNlKDEpOyAvLyBSZW1vdmUgdGhlIGxlYWRpbmcgL1xuICAgIGNvbnN0IGFic29sdXRlID0gcGF0aCArICcvJyArIHJlbGF0aXZlO1xuICAgIGxldCBzdGF0cyA9IG51bGw7XG4gICAgaWYodXNlU3RhdCB8fCBmb2xsb3dTeW1saW5rcykge1xuICAgICAgc3RhdHMgPSBhd2FpdCBzdGF0KGFic29sdXRlLCBmb2xsb3dTeW1saW5rcyk7XG4gICAgfVxuICAgIGlmKCFzdGF0cyAmJiBmaWxlLm5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgc3RhdHMgPSBmaWxlO1xuICAgIH1cbiAgICBpZihzdGF0cyA9PT0gbnVsbCkge1xuICAgICAgc3RhdHMgPSB7IGlzRGlyZWN0b3J5OiAoKSA9PiBmYWxzZSB9O1xuICAgIH1cblxuICAgIGlmKHN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIGlmKCFzaG91bGRTa2lwKHJlbGF0aXZlKSkge1xuICAgICAgICB5aWVsZCB7cmVsYXRpdmUsIGFic29sdXRlLCBzdGF0c307XG4gICAgICAgIHlpZWxkKiBleHBsb3JlV2Fsa0FzeW5jKGZpbGVuYW1lLCBwYXRoLCBmb2xsb3dTeW1saW5rcywgdXNlU3RhdCwgc2hvdWxkU2tpcCwgZmFsc2UpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB5aWVsZCB7cmVsYXRpdmUsIGFic29sdXRlLCBzdGF0c307XG4gICAgfVxuICB9XG59XG5hc3luYyBmdW5jdGlvbiogZXhwbG9yZShwYXRoLCBmb2xsb3dTeW1saW5rcywgdXNlU3RhdCwgc2hvdWxkU2tpcCkge1xuICB5aWVsZCogZXhwbG9yZVdhbGtBc3luYygnJywgcGF0aCwgZm9sbG93U3ltbGlua3MsIHVzZVN0YXQsIHNob3VsZFNraXAsIHRydWUpO1xufVxuXG5cbmZ1bmN0aW9uIHJlYWRPcHRpb25zKG9wdGlvbnMpIHtcbiAgcmV0dXJuIHtcbiAgICBwYXR0ZXJuOiBvcHRpb25zLnBhdHRlcm4sXG4gICAgZG90OiAhIW9wdGlvbnMuZG90LFxuICAgIG5vZ2xvYnN0YXI6ICEhb3B0aW9ucy5ub2dsb2JzdGFyLFxuICAgIG1hdGNoQmFzZTogISFvcHRpb25zLm1hdGNoQmFzZSxcbiAgICBub2Nhc2U6ICEhb3B0aW9ucy5ub2Nhc2UsXG4gICAgaWdub3JlOiBvcHRpb25zLmlnbm9yZSxcbiAgICBza2lwOiBvcHRpb25zLnNraXAsXG5cbiAgICBmb2xsb3c6ICEhb3B0aW9ucy5mb2xsb3csXG4gICAgc3RhdDogISFvcHRpb25zLnN0YXQsXG4gICAgbm9kaXI6ICEhb3B0aW9ucy5ub2RpcixcbiAgICBtYXJrOiAhIW9wdGlvbnMubWFyayxcbiAgICBzaWxlbnQ6ICEhb3B0aW9ucy5zaWxlbnQsXG4gICAgYWJzb2x1dGU6ICEhb3B0aW9ucy5hYnNvbHV0ZVxuICB9O1xufVxuXG5jbGFzcyBSZWFkZGlyR2xvYiBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gIGNvbnN0cnVjdG9yKGN3ZCwgb3B0aW9ucywgY2IpIHtcbiAgICBzdXBlcigpO1xuICAgIGlmKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjYiA9IG9wdGlvbnM7XG4gICAgICBvcHRpb25zID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLm9wdGlvbnMgPSByZWFkT3B0aW9ucyhvcHRpb25zIHx8wqB7fSk7XG4gIFxuICAgIHRoaXMubWF0Y2hlcnMgPSBbXTtcbiAgICBpZih0aGlzLm9wdGlvbnMucGF0dGVybikge1xuICAgICAgY29uc3QgbWF0Y2hlcnMgPSBBcnJheS5pc0FycmF5KHRoaXMub3B0aW9ucy5wYXR0ZXJuKSA/IHRoaXMub3B0aW9ucy5wYXR0ZXJuIDogW3RoaXMub3B0aW9ucy5wYXR0ZXJuXTtcbiAgICAgIHRoaXMubWF0Y2hlcnMgPSBtYXRjaGVycy5tYXAoIG0gPT5cbiAgICAgICAgbmV3IE1pbmltYXRjaChtLCB7XG4gICAgICAgICAgZG90OiB0aGlzLm9wdGlvbnMuZG90LFxuICAgICAgICAgIG5vZ2xvYnN0YXI6dGhpcy5vcHRpb25zLm5vZ2xvYnN0YXIsXG4gICAgICAgICAgbWF0Y2hCYXNlOnRoaXMub3B0aW9ucy5tYXRjaEJhc2UsXG4gICAgICAgICAgbm9jYXNlOnRoaXMub3B0aW9ucy5ub2Nhc2VcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICBcbiAgICB0aGlzLmlnbm9yZU1hdGNoZXJzID0gW107XG4gICAgaWYodGhpcy5vcHRpb25zLmlnbm9yZSkge1xuICAgICAgY29uc3QgaWdub3JlUGF0dGVybnMgPSBBcnJheS5pc0FycmF5KHRoaXMub3B0aW9ucy5pZ25vcmUpID8gdGhpcy5vcHRpb25zLmlnbm9yZSA6IFt0aGlzLm9wdGlvbnMuaWdub3JlXTtcbiAgICAgIHRoaXMuaWdub3JlTWF0Y2hlcnMgPSBpZ25vcmVQYXR0ZXJucy5tYXAoIGlnbm9yZSA9PlxuICAgICAgICBuZXcgTWluaW1hdGNoKGlnbm9yZSwge2RvdDogdHJ1ZX0pXG4gICAgICApO1xuICAgIH1cbiAgXG4gICAgdGhpcy5za2lwTWF0Y2hlcnMgPSBbXTtcbiAgICBpZih0aGlzLm9wdGlvbnMuc2tpcCkge1xuICAgICAgY29uc3Qgc2tpcFBhdHRlcm5zID0gQXJyYXkuaXNBcnJheSh0aGlzLm9wdGlvbnMuc2tpcCkgPyB0aGlzLm9wdGlvbnMuc2tpcCA6IFt0aGlzLm9wdGlvbnMuc2tpcF07XG4gICAgICB0aGlzLnNraXBNYXRjaGVycyA9IHNraXBQYXR0ZXJucy5tYXAoIHNraXAgPT5cbiAgICAgICAgbmV3IE1pbmltYXRjaChza2lwLCB7ZG90OiB0cnVlfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5pdGVyYXRvciA9IGV4cGxvcmUocmVzb2x2ZShjd2QgfHwgJy4nKSwgdGhpcy5vcHRpb25zLmZvbGxvdywgdGhpcy5vcHRpb25zLnN0YXQsIHRoaXMuX3Nob3VsZFNraXBEaXJlY3RvcnkuYmluZCh0aGlzKSk7XG4gICAgdGhpcy5wYXVzZWQgPSBmYWxzZTtcbiAgICB0aGlzLmluYWN0aXZlID0gZmFsc2U7XG4gICAgdGhpcy5hYm9ydGVkID0gZmFsc2U7XG4gIFxuICAgIGlmKGNiKSB7XG4gICAgICB0aGlzLl9tYXRjaGVzID0gW107IFxuICAgICAgdGhpcy5vbignbWF0Y2gnLCBtYXRjaCA9PiB0aGlzLl9tYXRjaGVzLnB1c2godGhpcy5vcHRpb25zLmFic29sdXRlID8gbWF0Y2guYWJzb2x1dGUgOiBtYXRjaC5yZWxhdGl2ZSkpO1xuICAgICAgdGhpcy5vbignZXJyb3InLCBlcnIgPT4gY2IoZXJyKSk7XG4gICAgICB0aGlzLm9uKCdlbmQnLCAoKSA9PiBjYihudWxsLCB0aGlzLl9tYXRjaGVzKSk7XG4gICAgfVxuXG4gICAgc2V0VGltZW91dCggKCkgPT4gdGhpcy5fbmV4dCgpLCAwKTtcbiAgfVxuXG4gIF9zaG91bGRTa2lwRGlyZWN0b3J5KHJlbGF0aXZlKSB7XG4gICAgLy9jb25zb2xlLmxvZyhyZWxhdGl2ZSwgdGhpcy5za2lwTWF0Y2hlcnMuc29tZShtID0+IG0ubWF0Y2gocmVsYXRpdmUpKSk7XG4gICAgcmV0dXJuIHRoaXMuc2tpcE1hdGNoZXJzLnNvbWUobSA9PiBtLm1hdGNoKHJlbGF0aXZlKSk7XG4gIH1cblxuICBfZmlsZU1hdGNoZXMocmVsYXRpdmUsIGlzRGlyZWN0b3J5KSB7XG4gICAgY29uc3QgZmlsZSA9IHJlbGF0aXZlICsgKGlzRGlyZWN0b3J5ID8gJy8nIDogJycpO1xuICAgIHJldHVybiAodGhpcy5tYXRjaGVycy5sZW5ndGggPT09IDAgfHwgdGhpcy5tYXRjaGVycy5zb21lKG0gPT4gbS5tYXRjaChmaWxlKSkpXG4gICAgICAmJiAhdGhpcy5pZ25vcmVNYXRjaGVycy5zb21lKG0gPT4gbS5tYXRjaChmaWxlKSlcbiAgICAgICYmICghdGhpcy5vcHRpb25zLm5vZGlyIHx8ICFpc0RpcmVjdG9yeSk7XG4gIH1cblxuICBfbmV4dCgpIHtcbiAgICBpZighdGhpcy5wYXVzZWQgJiYgIXRoaXMuYWJvcnRlZCkge1xuICAgICAgdGhpcy5pdGVyYXRvci5uZXh0KClcbiAgICAgIC50aGVuKChvYmopPT4ge1xuICAgICAgICBpZighb2JqLmRvbmUpIHtcbiAgICAgICAgICBjb25zdCBpc0RpcmVjdG9yeSA9IG9iai52YWx1ZS5zdGF0cy5pc0RpcmVjdG9yeSgpO1xuICAgICAgICAgIGlmKHRoaXMuX2ZpbGVNYXRjaGVzKG9iai52YWx1ZS5yZWxhdGl2ZSwgaXNEaXJlY3RvcnkgKSkge1xuICAgICAgICAgICAgbGV0IHJlbGF0aXZlID0gb2JqLnZhbHVlLnJlbGF0aXZlO1xuICAgICAgICAgICAgbGV0IGFic29sdXRlID0gb2JqLnZhbHVlLmFic29sdXRlO1xuICAgICAgICAgICAgaWYodGhpcy5vcHRpb25zLm1hcmsgJiYgaXNEaXJlY3RvcnkpIHtcbiAgICAgICAgICAgICAgcmVsYXRpdmUgKz0gJy8nO1xuICAgICAgICAgICAgICBhYnNvbHV0ZSArPSAnLyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZih0aGlzLm9wdGlvbnMuc3RhdCkge1xuICAgICAgICAgICAgICB0aGlzLmVtaXQoJ21hdGNoJywge3JlbGF0aXZlLCBhYnNvbHV0ZSwgc3RhdDpvYmoudmFsdWUuc3RhdHN9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuZW1pdCgnbWF0Y2gnLCB7cmVsYXRpdmUsIGFic29sdXRlfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuX25leHQodGhpcy5pdGVyYXRvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5lbWl0KCdlbmQnKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMuYWJvcnQoKTtcbiAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIGVycik7XG4gICAgICAgIGlmKCFlcnIuY29kZSAmJiAhdGhpcy5vcHRpb25zLnNpbGVudCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW5hY3RpdmUgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGFib3J0KCkge1xuICAgIHRoaXMuYWJvcnRlZCA9IHRydWU7XG4gIH1cblxuICBwYXVzZSgpIHtcbiAgICB0aGlzLnBhdXNlZCA9IHRydWU7XG4gIH1cblxuICByZXN1bWUoKSB7XG4gICAgdGhpcy5wYXVzZWQgPSBmYWxzZTtcbiAgICBpZih0aGlzLmluYWN0aXZlKSB7XG4gICAgICB0aGlzLmluYWN0aXZlID0gZmFsc2U7XG4gICAgICB0aGlzLl9uZXh0KCk7XG4gICAgfVxuICB9XG59XG5cblxuZnVuY3Rpb24gcmVhZGRpckdsb2IocGF0dGVybiwgb3B0aW9ucywgY2IpIHtcbiAgcmV0dXJuIG5ldyBSZWFkZGlyR2xvYihwYXR0ZXJuLCBvcHRpb25zLCBjYik7XG59XG5yZWFkZGlyR2xvYi5SZWFkZGlyR2xvYiA9IFJlYWRkaXJHbG9iOyIsCiAgICAiKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBmYWN0b3J5KGV4cG9ydHMpIDpcbiAgICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWydleHBvcnRzJ10sIGZhY3RvcnkpIDpcbiAgICAoZ2xvYmFsID0gdHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsVGhpcyA6IGdsb2JhbCB8fCBzZWxmLCBmYWN0b3J5KGdsb2JhbC5hc3luYyA9IHt9KSk7XG59KSh0aGlzLCAoZnVuY3Rpb24gKGV4cG9ydHMpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGNvbnRpbnVhdGlvbiBmdW5jdGlvbiB3aXRoIHNvbWUgYXJndW1lbnRzIGFscmVhZHkgYXBwbGllZC5cbiAgICAgKlxuICAgICAqIFVzZWZ1bCBhcyBhIHNob3J0aGFuZCB3aGVuIGNvbWJpbmVkIHdpdGggb3RoZXIgY29udHJvbCBmbG93IGZ1bmN0aW9ucy4gQW55XG4gICAgICogYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgcmV0dXJuZWQgZnVuY3Rpb24gYXJlIGFkZGVkIHRvIHRoZSBhcmd1bWVudHNcbiAgICAgKiBvcmlnaW5hbGx5IHBhc3NlZCB0byBhcHBseS5cbiAgICAgKlxuICAgICAqIEBuYW1lIGFwcGx5XG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6VXRpbHNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiAtIFRoZSBmdW5jdGlvbiB5b3Ugd2FudCB0byBldmVudHVhbGx5IGFwcGx5IGFsbFxuICAgICAqIGFyZ3VtZW50cyB0by4gSW52b2tlcyB3aXRoIChhcmd1bWVudHMuLi4pLlxuICAgICAqIEBwYXJhbSB7Li4uKn0gYXJndW1lbnRzLi4uIC0gQW55IG51bWJlciBvZiBhcmd1bWVudHMgdG8gYXV0b21hdGljYWxseSBhcHBseVxuICAgICAqIHdoZW4gdGhlIGNvbnRpbnVhdGlvbiBpcyBjYWxsZWQuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSB0aGUgcGFydGlhbGx5LWFwcGxpZWQgZnVuY3Rpb25cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gdXNpbmcgYXBwbHlcbiAgICAgKiBhc3luYy5wYXJhbGxlbChbXG4gICAgICogICAgIGFzeW5jLmFwcGx5KGZzLndyaXRlRmlsZSwgJ3Rlc3RmaWxlMScsICd0ZXN0MScpLFxuICAgICAqICAgICBhc3luYy5hcHBseShmcy53cml0ZUZpbGUsICd0ZXN0ZmlsZTInLCAndGVzdDInKVxuICAgICAqIF0pO1xuICAgICAqXG4gICAgICpcbiAgICAgKiAvLyB0aGUgc2FtZSBwcm9jZXNzIHdpdGhvdXQgdXNpbmcgYXBwbHlcbiAgICAgKiBhc3luYy5wYXJhbGxlbChbXG4gICAgICogICAgIGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBmcy53cml0ZUZpbGUoJ3Rlc3RmaWxlMScsICd0ZXN0MScsIGNhbGxiYWNrKTtcbiAgICAgKiAgICAgfSxcbiAgICAgKiAgICAgZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIGZzLndyaXRlRmlsZSgndGVzdGZpbGUyJywgJ3Rlc3QyJywgY2FsbGJhY2spO1xuICAgICAqICAgICB9XG4gICAgICogXSk7XG4gICAgICpcbiAgICAgKiAvLyBJdCdzIHBvc3NpYmxlIHRvIHBhc3MgYW55IG51bWJlciBvZiBhZGRpdGlvbmFsIGFyZ3VtZW50cyB3aGVuIGNhbGxpbmcgdGhlXG4gICAgICogLy8gY29udGludWF0aW9uOlxuICAgICAqXG4gICAgICogbm9kZT4gdmFyIGZuID0gYXN5bmMuYXBwbHkoc3lzLnB1dHMsICdvbmUnKTtcbiAgICAgKiBub2RlPiBmbigndHdvJywgJ3RocmVlJyk7XG4gICAgICogb25lXG4gICAgICogdHdvXG4gICAgICogdGhyZWVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBhcHBseShmbiwgLi4uYXJncykge1xuICAgICAgICByZXR1cm4gKC4uLmNhbGxBcmdzKSA9PiBmbiguLi5hcmdzLC4uLmNhbGxBcmdzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbml0aWFsUGFyYW1zIChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3MvKiwgY2FsbGJhY2sqLykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHJldHVybiBmbi5jYWxsKHRoaXMsIGFyZ3MsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZmlsZSAqL1xuXG4gICAgdmFyIGhhc1F1ZXVlTWljcm90YXNrID0gdHlwZW9mIHF1ZXVlTWljcm90YXNrID09PSAnZnVuY3Rpb24nICYmIHF1ZXVlTWljcm90YXNrO1xuICAgIHZhciBoYXNTZXRJbW1lZGlhdGUgPSB0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nICYmIHNldEltbWVkaWF0ZTtcbiAgICB2YXIgaGFzTmV4dFRpY2sgPSB0eXBlb2YgcHJvY2VzcyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHByb2Nlc3MubmV4dFRpY2sgPT09ICdmdW5jdGlvbic7XG5cbiAgICBmdW5jdGlvbiBmYWxsYmFjayhmbikge1xuICAgICAgICBzZXRUaW1lb3V0KGZuLCAwKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3cmFwKGRlZmVyKSB7XG4gICAgICAgIHJldHVybiAoZm4sIC4uLmFyZ3MpID0+IGRlZmVyKCgpID0+IGZuKC4uLmFyZ3MpKTtcbiAgICB9XG5cbiAgICB2YXIgX2RlZmVyJDE7XG5cbiAgICBpZiAoaGFzUXVldWVNaWNyb3Rhc2spIHtcbiAgICAgICAgX2RlZmVyJDEgPSBxdWV1ZU1pY3JvdGFzaztcbiAgICB9IGVsc2UgaWYgKGhhc1NldEltbWVkaWF0ZSkge1xuICAgICAgICBfZGVmZXIkMSA9IHNldEltbWVkaWF0ZTtcbiAgICB9IGVsc2UgaWYgKGhhc05leHRUaWNrKSB7XG4gICAgICAgIF9kZWZlciQxID0gcHJvY2Vzcy5uZXh0VGljaztcbiAgICB9IGVsc2Uge1xuICAgICAgICBfZGVmZXIkMSA9IGZhbGxiYWNrO1xuICAgIH1cblxuICAgIHZhciBzZXRJbW1lZGlhdGUkMSA9IHdyYXAoX2RlZmVyJDEpO1xuXG4gICAgLyoqXG4gICAgICogVGFrZSBhIHN5bmMgZnVuY3Rpb24gYW5kIG1ha2UgaXQgYXN5bmMsIHBhc3NpbmcgaXRzIHJldHVybiB2YWx1ZSB0byBhXG4gICAgICogY2FsbGJhY2suIFRoaXMgaXMgdXNlZnVsIGZvciBwbHVnZ2luZyBzeW5jIGZ1bmN0aW9ucyBpbnRvIGEgd2F0ZXJmYWxsLFxuICAgICAqIHNlcmllcywgb3Igb3RoZXIgYXN5bmMgZnVuY3Rpb25zLiBBbnkgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgZ2VuZXJhdGVkXG4gICAgICogZnVuY3Rpb24gd2lsbCBiZSBwYXNzZWQgdG8gdGhlIHdyYXBwZWQgZnVuY3Rpb24gKGV4Y2VwdCBmb3IgdGhlIGZpbmFsXG4gICAgICogY2FsbGJhY2sgYXJndW1lbnQpLiBFcnJvcnMgdGhyb3duIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBjYWxsYmFjay5cbiAgICAgKlxuICAgICAqIElmIHRoZSBmdW5jdGlvbiBwYXNzZWQgdG8gYGFzeW5jaWZ5YCByZXR1cm5zIGEgUHJvbWlzZSwgdGhhdCBwcm9taXNlcydzXG4gICAgICogcmVzb2x2ZWQvcmVqZWN0ZWQgc3RhdGUgd2lsbCBiZSB1c2VkIHRvIGNhbGwgdGhlIGNhbGxiYWNrLCByYXRoZXIgdGhhbiBzaW1wbHlcbiAgICAgKiB0aGUgc3luY2hyb25vdXMgcmV0dXJuIHZhbHVlLlxuICAgICAqXG4gICAgICogVGhpcyBhbHNvIG1lYW5zIHlvdSBjYW4gYXN5bmNpZnkgRVMyMDE3IGBhc3luY2AgZnVuY3Rpb25zLlxuICAgICAqXG4gICAgICogQG5hbWUgYXN5bmNpZnlcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpVdGlsc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAYWxpYXMgd3JhcFN5bmNcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgLSBUaGUgc3luY2hyb25vdXMgZnVuY3Rpb24sIG9yIFByb21pc2UtcmV0dXJuaW5nXG4gICAgICogZnVuY3Rpb24gdG8gY29udmVydCB0byBhbiB7QGxpbmsgQXN5bmNGdW5jdGlvbn0uXG4gICAgICogQHJldHVybnMge0FzeW5jRnVuY3Rpb259IEFuIGFzeW5jaHJvbm91cyB3cmFwcGVyIG9mIHRoZSBgZnVuY2AuIFRvIGJlXG4gICAgICogaW52b2tlZCB3aXRoIGAoYXJncy4uLiwgY2FsbGJhY2spYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gcGFzc2luZyBhIHJlZ3VsYXIgc3luY2hyb25vdXMgZnVuY3Rpb25cbiAgICAgKiBhc3luYy53YXRlcmZhbGwoW1xuICAgICAqICAgICBhc3luYy5hcHBseShmcy5yZWFkRmlsZSwgZmlsZW5hbWUsIFwidXRmOFwiKSxcbiAgICAgKiAgICAgYXN5bmMuYXN5bmNpZnkoSlNPTi5wYXJzZSksXG4gICAgICogICAgIGZ1bmN0aW9uIChkYXRhLCBuZXh0KSB7XG4gICAgICogICAgICAgICAvLyBkYXRhIGlzIHRoZSByZXN1bHQgb2YgcGFyc2luZyB0aGUgdGV4dC5cbiAgICAgKiAgICAgICAgIC8vIElmIHRoZXJlIHdhcyBhIHBhcnNpbmcgZXJyb3IsIGl0IHdvdWxkIGhhdmUgYmVlbiBjYXVnaHQuXG4gICAgICogICAgIH1cbiAgICAgKiBdLCBjYWxsYmFjayk7XG4gICAgICpcbiAgICAgKiAvLyBwYXNzaW5nIGEgZnVuY3Rpb24gcmV0dXJuaW5nIGEgcHJvbWlzZVxuICAgICAqIGFzeW5jLndhdGVyZmFsbChbXG4gICAgICogICAgIGFzeW5jLmFwcGx5KGZzLnJlYWRGaWxlLCBmaWxlbmFtZSwgXCJ1dGY4XCIpLFxuICAgICAqICAgICBhc3luYy5hc3luY2lmeShmdW5jdGlvbiAoY29udGVudHMpIHtcbiAgICAgKiAgICAgICAgIHJldHVybiBkYi5tb2RlbC5jcmVhdGUoY29udGVudHMpO1xuICAgICAqICAgICB9KSxcbiAgICAgKiAgICAgZnVuY3Rpb24gKG1vZGVsLCBuZXh0KSB7XG4gICAgICogICAgICAgICAvLyBgbW9kZWxgIGlzIHRoZSBpbnN0YW50aWF0ZWQgbW9kZWwgb2JqZWN0LlxuICAgICAqICAgICAgICAgLy8gSWYgdGhlcmUgd2FzIGFuIGVycm9yLCB0aGlzIGZ1bmN0aW9uIHdvdWxkIGJlIHNraXBwZWQuXG4gICAgICogICAgIH1cbiAgICAgKiBdLCBjYWxsYmFjayk7XG4gICAgICpcbiAgICAgKiAvLyBlczIwMTcgZXhhbXBsZSwgdGhvdWdoIGBhc3luY2lmeWAgaXMgbm90IG5lZWRlZCBpZiB5b3VyIEpTIGVudmlyb25tZW50XG4gICAgICogLy8gc3VwcG9ydHMgYXN5bmMgZnVuY3Rpb25zIG91dCBvZiB0aGUgYm94XG4gICAgICogdmFyIHEgPSBhc3luYy5xdWV1ZShhc3luYy5hc3luY2lmeShhc3luYyBmdW5jdGlvbihmaWxlKSB7XG4gICAgICogICAgIHZhciBpbnRlcm1lZGlhdGVTdGVwID0gYXdhaXQgcHJvY2Vzc0ZpbGUoZmlsZSk7XG4gICAgICogICAgIHJldHVybiBhd2FpdCBzb21lUHJvbWlzZShpbnRlcm1lZGlhdGVTdGVwKVxuICAgICAqIH0pKTtcbiAgICAgKlxuICAgICAqIHEucHVzaChmaWxlcyk7XG4gICAgICovXG4gICAgZnVuY3Rpb24gYXN5bmNpZnkoZnVuYykge1xuICAgICAgICBpZiAoaXNBc3luYyhmdW5jKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICguLi5hcmdzLyosIGNhbGxiYWNrKi8pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvbWlzZSA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVByb21pc2UocHJvbWlzZSwgY2FsbGJhY2spXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaW5pdGlhbFBhcmFtcyhmdW5jdGlvbiAoYXJncywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQ7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgcmVzdWx0IGlzIFByb21pc2Ugb2JqZWN0XG4gICAgICAgICAgICBpZiAocmVzdWx0ICYmIHR5cGVvZiByZXN1bHQudGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGVQcm9taXNlKHJlc3VsdCwgY2FsbGJhY2spXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhbmRsZVByb21pc2UocHJvbWlzZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIHByb21pc2UudGhlbih2YWx1ZSA9PiB7XG4gICAgICAgICAgICBpbnZva2VDYWxsYmFjayhjYWxsYmFjaywgbnVsbCwgdmFsdWUpO1xuICAgICAgICB9LCBlcnIgPT4ge1xuICAgICAgICAgICAgaW52b2tlQ2FsbGJhY2soY2FsbGJhY2ssIGVyciAmJiAoZXJyIGluc3RhbmNlb2YgRXJyb3IgfHwgZXJyLm1lc3NhZ2UpID8gZXJyIDogbmV3IEVycm9yKGVycikpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnZva2VDYWxsYmFjayhjYWxsYmFjaywgZXJyb3IsIHZhbHVlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnJvciwgdmFsdWUpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHNldEltbWVkaWF0ZSQxKGUgPT4geyB0aHJvdyBlIH0sIGVycik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0FzeW5jKGZuKSB7XG4gICAgICAgIHJldHVybiBmbltTeW1ib2wudG9TdHJpbmdUYWddID09PSAnQXN5bmNGdW5jdGlvbic7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNBc3luY0dlbmVyYXRvcihmbikge1xuICAgICAgICByZXR1cm4gZm5bU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ0FzeW5jR2VuZXJhdG9yJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0FzeW5jSXRlcmFibGUob2JqKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2Ygb2JqW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9PT0gJ2Z1bmN0aW9uJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3cmFwQXN5bmMoYXN5bmNGbikge1xuICAgICAgICBpZiAodHlwZW9mIGFzeW5jRm4gIT09ICdmdW5jdGlvbicpIHRocm93IG5ldyBFcnJvcignZXhwZWN0ZWQgYSBmdW5jdGlvbicpXG4gICAgICAgIHJldHVybiBpc0FzeW5jKGFzeW5jRm4pID8gYXN5bmNpZnkoYXN5bmNGbikgOiBhc3luY0ZuO1xuICAgIH1cblxuICAgIC8vIGNvbmRpdGlvbmFsbHkgcHJvbWlzaWZ5IGEgZnVuY3Rpb24uXG4gICAgLy8gb25seSByZXR1cm4gYSBwcm9taXNlIGlmIGEgY2FsbGJhY2sgaXMgb21pdHRlZFxuICAgIGZ1bmN0aW9uIGF3YWl0aWZ5IChhc3luY0ZuLCBhcml0eSkge1xuICAgICAgICBpZiAoIWFyaXR5KSBhcml0eSA9IGFzeW5jRm4ubGVuZ3RoO1xuICAgICAgICBpZiAoIWFyaXR5KSB0aHJvdyBuZXcgRXJyb3IoJ2FyaXR5IGlzIHVuZGVmaW5lZCcpXG4gICAgICAgIGZ1bmN0aW9uIGF3YWl0YWJsZSAoLi4uYXJncykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBhcmdzW2FyaXR5IC0gMV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXN5bmNGbi5hcHBseSh0aGlzLCBhcmdzKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgIGFyZ3NbYXJpdHkgLSAxXSA9IChlcnIsIC4uLmNiQXJncykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gcmVqZWN0KGVycilcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShjYkFyZ3MubGVuZ3RoID4gMSA/IGNiQXJncyA6IGNiQXJnc1swXSk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBhc3luY0ZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhd2FpdGFibGVcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhcHBseUVhY2gkMSAoZWFjaGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBhcHBseUVhY2goZm5zLCAuLi5jYWxsQXJncykge1xuICAgICAgICAgICAgY29uc3QgZ28gPSBhd2FpdGlmeShmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVhY2hmbihmbnMsIChmbiwgY2IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgd3JhcEFzeW5jKGZuKS5hcHBseSh0aGF0LCBjYWxsQXJncy5jb25jYXQoY2IpKTtcbiAgICAgICAgICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBnbztcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfYXN5bmNNYXAoZWFjaGZuLCBhcnIsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICBhcnIgPSBhcnIgfHwgW107XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIHZhciBjb3VudGVyID0gMDtcbiAgICAgICAgdmFyIF9pdGVyYXRlZSA9IHdyYXBBc3luYyhpdGVyYXRlZSk7XG5cbiAgICAgICAgcmV0dXJuIGVhY2hmbihhcnIsICh2YWx1ZSwgXywgaXRlckNiKSA9PiB7XG4gICAgICAgICAgICB2YXIgaW5kZXggPSBjb3VudGVyKys7XG4gICAgICAgICAgICBfaXRlcmF0ZWUodmFsdWUsIChlcnIsIHYpID0+IHtcbiAgICAgICAgICAgICAgICByZXN1bHRzW2luZGV4XSA9IHY7XG4gICAgICAgICAgICAgICAgaXRlckNiKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZXJyID0+IHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQXJyYXlMaWtlKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSAmJlxuICAgICAgICAgICAgdHlwZW9mIHZhbHVlLmxlbmd0aCA9PT0gJ251bWJlcicgJiZcbiAgICAgICAgICAgIHZhbHVlLmxlbmd0aCA+PSAwICYmXG4gICAgICAgICAgICB2YWx1ZS5sZW5ndGggJSAxID09PSAwO1xuICAgIH1cblxuICAgIC8vIEEgdGVtcG9yYXJ5IHZhbHVlIHVzZWQgdG8gaWRlbnRpZnkgaWYgdGhlIGxvb3Agc2hvdWxkIGJlIGJyb2tlbi5cbiAgICAvLyBTZWUgIzEwNjQsICMxMjkzXG4gICAgY29uc3QgYnJlYWtMb29wID0ge307XG5cbiAgICBmdW5jdGlvbiBvbmNlKGZuKSB7XG4gICAgICAgIGZ1bmN0aW9uIHdyYXBwZXIgKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIGlmIChmbiA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICAgICAgdmFyIGNhbGxGbiA9IGZuO1xuICAgICAgICAgICAgZm4gPSBudWxsO1xuICAgICAgICAgICAgY2FsbEZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24od3JhcHBlciwgZm4pO1xuICAgICAgICByZXR1cm4gd3JhcHBlclxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEl0ZXJhdG9yIChjb2xsKSB7XG4gICAgICAgIHJldHVybiBjb2xsW1N5bWJvbC5pdGVyYXRvcl0gJiYgY29sbFtTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlQXJyYXlJdGVyYXRvcihjb2xsKSB7XG4gICAgICAgIHZhciBpID0gLTE7XG4gICAgICAgIHZhciBsZW4gPSBjb2xsLmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgICByZXR1cm4gKytpIDwgbGVuID8ge3ZhbHVlOiBjb2xsW2ldLCBrZXk6IGl9IDogbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUVTMjAxNUl0ZXJhdG9yKGl0ZXJhdG9yKSB7XG4gICAgICAgIHZhciBpID0gLTE7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgdmFyIGl0ZW0gPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgICBpZiAoaXRlbS5kb25lKVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgcmV0dXJuIHt2YWx1ZTogaXRlbS52YWx1ZSwga2V5OiBpfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZU9iamVjdEl0ZXJhdG9yKG9iaikge1xuICAgICAgICB2YXIgb2tleXMgPSBvYmogPyBPYmplY3Qua2V5cyhvYmopIDogW107XG4gICAgICAgIHZhciBpID0gLTE7XG4gICAgICAgIHZhciBsZW4gPSBva2V5cy5sZW5ndGg7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgdmFyIGtleSA9IG9rZXlzWysraV07XG4gICAgICAgICAgICBpZiAoa2V5ID09PSAnX19wcm90b19fJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaSA8IGxlbiA/IHt2YWx1ZTogb2JqW2tleV0sIGtleX0gOiBudWxsO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUl0ZXJhdG9yKGNvbGwpIHtcbiAgICAgICAgaWYgKGlzQXJyYXlMaWtlKGNvbGwpKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlQXJyYXlJdGVyYXRvcihjb2xsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpdGVyYXRvciA9IGdldEl0ZXJhdG9yKGNvbGwpO1xuICAgICAgICByZXR1cm4gaXRlcmF0b3IgPyBjcmVhdGVFUzIwMTVJdGVyYXRvcihpdGVyYXRvcikgOiBjcmVhdGVPYmplY3RJdGVyYXRvcihjb2xsKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvbmx5T25jZShmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIGlmIChmbiA9PT0gbnVsbCkgdGhyb3cgbmV3IEVycm9yKFwiQ2FsbGJhY2sgd2FzIGFscmVhZHkgY2FsbGVkLlwiKTtcbiAgICAgICAgICAgIHZhciBjYWxsRm4gPSBmbjtcbiAgICAgICAgICAgIGZuID0gbnVsbDtcbiAgICAgICAgICAgIGNhbGxGbi5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBmb3IgYXN5bmMgZ2VuZXJhdG9yc1xuICAgIGZ1bmN0aW9uIGFzeW5jRWFjaE9mTGltaXQoZ2VuZXJhdG9yLCBsaW1pdCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIGxldCBkb25lID0gZmFsc2U7XG4gICAgICAgIGxldCBjYW5jZWxlZCA9IGZhbHNlO1xuICAgICAgICBsZXQgYXdhaXRpbmcgPSBmYWxzZTtcbiAgICAgICAgbGV0IHJ1bm5pbmcgPSAwO1xuICAgICAgICBsZXQgaWR4ID0gMDtcblxuICAgICAgICBmdW5jdGlvbiByZXBsZW5pc2goKSB7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdyZXBsZW5pc2gnKVxuICAgICAgICAgICAgaWYgKHJ1bm5pbmcgPj0gbGltaXQgfHwgYXdhaXRpbmcgfHwgZG9uZSkgcmV0dXJuXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdyZXBsZW5pc2ggYXdhaXRpbmcnKVxuICAgICAgICAgICAgYXdhaXRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgZ2VuZXJhdG9yLm5leHQoKS50aGVuKCh7dmFsdWUsIGRvbmU6IGl0ZXJEb25lfSkgPT4ge1xuICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ2dvdCB2YWx1ZScsIHZhbHVlKVxuICAgICAgICAgICAgICAgIGlmIChjYW5jZWxlZCB8fCBkb25lKSByZXR1cm5cbiAgICAgICAgICAgICAgICBhd2FpdGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmIChpdGVyRG9uZSkge1xuICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bm5pbmcgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnZG9uZSBuZXh0Q2InKVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBydW5uaW5nKys7XG4gICAgICAgICAgICAgICAgaXRlcmF0ZWUodmFsdWUsIGlkeCwgaXRlcmF0ZWVDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgaWR4Kys7XG4gICAgICAgICAgICAgICAgcmVwbGVuaXNoKCk7XG4gICAgICAgICAgICB9KS5jYXRjaChoYW5kbGVFcnJvcik7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBpdGVyYXRlZUNhbGxiYWNrKGVyciwgcmVzdWx0KSB7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdpdGVyYXRlZUNhbGxiYWNrJylcbiAgICAgICAgICAgIHJ1bm5pbmcgLT0gMTtcbiAgICAgICAgICAgIGlmIChjYW5jZWxlZCkgcmV0dXJuXG4gICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gaGFuZGxlRXJyb3IoZXJyKVxuXG4gICAgICAgICAgICBpZiAoZXJyID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNhbmNlbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gYnJlYWtMb29wIHx8IChkb25lICYmIHJ1bm5pbmcgPD0gMCkpIHtcbiAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdkb25lIGl0ZXJDYicpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVwbGVuaXNoKCk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBoYW5kbGVFcnJvcihlcnIpIHtcbiAgICAgICAgICAgIGlmIChjYW5jZWxlZCkgcmV0dXJuXG4gICAgICAgICAgICBhd2FpdGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVwbGVuaXNoKCk7XG4gICAgfVxuXG4gICAgdmFyIGVhY2hPZkxpbWl0JDIgPSAobGltaXQpID0+IHtcbiAgICAgICAgcmV0dXJuIChvYmosIGl0ZXJhdGVlLCBjYWxsYmFjaykgPT4ge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSBvbmNlKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIGlmIChsaW1pdCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2NvbmN1cnJlbmN5IGxpbWl0IGNhbm5vdCBiZSBsZXNzIHRoYW4gMScpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIW9iaikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc0FzeW5jR2VuZXJhdG9yKG9iaikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXN5bmNFYWNoT2ZMaW1pdChvYmosIGxpbWl0LCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNBc3luY0l0ZXJhYmxlKG9iaikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXN5bmNFYWNoT2ZMaW1pdChvYmpbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCksIGxpbWl0LCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgbmV4dEVsZW0gPSBjcmVhdGVJdGVyYXRvcihvYmopO1xuICAgICAgICAgICAgdmFyIGRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHZhciBjYW5jZWxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdmFyIHJ1bm5pbmcgPSAwO1xuICAgICAgICAgICAgdmFyIGxvb3BpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgZnVuY3Rpb24gaXRlcmF0ZWVDYWxsYmFjayhlcnIsIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbmNlbGVkKSByZXR1cm5cbiAgICAgICAgICAgICAgICBydW5uaW5nIC09IDE7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZXJyID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgY2FuY2VsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PT0gYnJlYWtMb29wIHx8IChkb25lICYmIHJ1bm5pbmcgPD0gMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIWxvb3BpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVwbGVuaXNoKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmdW5jdGlvbiByZXBsZW5pc2ggKCkge1xuICAgICAgICAgICAgICAgIGxvb3BpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHdoaWxlIChydW5uaW5nIDwgbGltaXQgJiYgIWRvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVsZW0gPSBuZXh0RWxlbSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocnVubmluZyA8PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcnVubmluZyArPSAxO1xuICAgICAgICAgICAgICAgICAgICBpdGVyYXRlZShlbGVtLnZhbHVlLCBlbGVtLmtleSwgb25seU9uY2UoaXRlcmF0ZWVDYWxsYmFjaykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsb29waW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlcGxlbmlzaCgpO1xuICAgICAgICB9O1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyBbYGVhY2hPZmBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5lYWNoT2Z9IGJ1dCBydW5zIGEgbWF4aW11bSBvZiBgbGltaXRgIGFzeW5jIG9wZXJhdGlvbnMgYXQgYVxuICAgICAqIHRpbWUuXG4gICAgICpcbiAgICAgKiBAbmFtZSBlYWNoT2ZMaW1pdFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLmVhY2hPZl17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmVhY2hPZn1cbiAgICAgKiBAYWxpYXMgZm9yRWFjaE9mTGltaXRcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW1pdCAtIFRoZSBtYXhpbXVtIG51bWJlciBvZiBhc3luYyBvcGVyYXRpb25zIGF0IGEgdGltZS5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQW4gYXN5bmMgZnVuY3Rpb24gdG8gYXBwbHkgdG8gZWFjaFxuICAgICAqIGl0ZW0gaW4gYGNvbGxgLiBUaGUgYGtleWAgaXMgdGhlIGl0ZW0ncyBrZXksIG9yIGluZGV4IGluIHRoZSBjYXNlIG9mIGFuXG4gICAgICogYXJyYXkuXG4gICAgICogSW52b2tlZCB3aXRoIChpdGVtLCBrZXksIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgd2hlbiBhbGxcbiAgICAgKiBgaXRlcmF0ZWVgIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLCBvciBhbiBlcnJvciBvY2N1cnMuIEludm9rZWQgd2l0aCAoZXJyKS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBhIGNhbGxiYWNrIGlzIG9taXR0ZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBlYWNoT2ZMaW1pdChjb2xsLCBsaW1pdCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBlYWNoT2ZMaW1pdCQyKGxpbWl0KShjb2xsLCB3cmFwQXN5bmMoaXRlcmF0ZWUpLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgdmFyIGVhY2hPZkxpbWl0JDEgPSBhd2FpdGlmeShlYWNoT2ZMaW1pdCwgNCk7XG5cbiAgICAvLyBlYWNoT2YgaW1wbGVtZW50YXRpb24gb3B0aW1pemVkIGZvciBhcnJheS1saWtlc1xuICAgIGZ1bmN0aW9uIGVhY2hPZkFycmF5TGlrZShjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBvbmNlKGNhbGxiYWNrKTtcbiAgICAgICAgdmFyIGluZGV4ID0gMCxcbiAgICAgICAgICAgIGNvbXBsZXRlZCA9IDAsXG4gICAgICAgICAgICB7bGVuZ3RofSA9IGNvbGwsXG4gICAgICAgICAgICBjYW5jZWxlZCA9IGZhbHNlO1xuICAgICAgICBpZiAobGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGl0ZXJhdG9yQ2FsbGJhY2soZXJyLCB2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKGVyciA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBjYW5jZWxlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2FuY2VsZWQgPT09IHRydWUpIHJldHVyblxuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCgrK2NvbXBsZXRlZCA9PT0gbGVuZ3RoKSB8fCB2YWx1ZSA9PT0gYnJlYWtMb29wKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgIGl0ZXJhdGVlKGNvbGxbaW5kZXhdLCBpbmRleCwgb25seU9uY2UoaXRlcmF0b3JDYWxsYmFjaykpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gYSBnZW5lcmljIHZlcnNpb24gb2YgZWFjaE9mIHdoaWNoIGNhbiBoYW5kbGUgYXJyYXksIG9iamVjdCwgYW5kIGl0ZXJhdG9yIGNhc2VzLlxuICAgIGZ1bmN0aW9uIGVhY2hPZkdlbmVyaWMgKGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gZWFjaE9mTGltaXQkMShjb2xsLCBJbmZpbml0eSwgaXRlcmF0ZWUsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMaWtlIFtgZWFjaGBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5lYWNofSwgZXhjZXB0IHRoYXQgaXQgcGFzc2VzIHRoZSBrZXkgKG9yIGluZGV4KSBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50XG4gICAgICogdG8gdGhlIGl0ZXJhdGVlLlxuICAgICAqXG4gICAgICogQG5hbWUgZWFjaE9mXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGFsaWFzIGZvckVhY2hPZlxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHNlZSBbYXN5bmMuZWFjaF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmVhY2h9XG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEEgZnVuY3Rpb24gdG8gYXBwbHkgdG8gZWFjaFxuICAgICAqIGl0ZW0gaW4gYGNvbGxgLlxuICAgICAqIFRoZSBga2V5YCBpcyB0aGUgaXRlbSdzIGtleSwgb3IgaW5kZXggaW4gdGhlIGNhc2Ugb2YgYW4gYXJyYXkuXG4gICAgICogSW52b2tlZCB3aXRoIChpdGVtLCBrZXksIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgd2hlbiBhbGxcbiAgICAgKiBgaXRlcmF0ZWVgIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLCBvciBhbiBlcnJvciBvY2N1cnMuIEludm9rZWQgd2l0aCAoZXJyKS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBhIGNhbGxiYWNrIGlzIG9taXR0ZWRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gZGV2Lmpzb24gaXMgYSBmaWxlIGNvbnRhaW5pbmcgYSB2YWxpZCBqc29uIG9iamVjdCBjb25maWcgZm9yIGRldiBlbnZpcm9ubWVudFxuICAgICAqIC8vIGRldi5qc29uIGlzIGEgZmlsZSBjb250YWluaW5nIGEgdmFsaWQganNvbiBvYmplY3QgY29uZmlnIGZvciB0ZXN0IGVudmlyb25tZW50XG4gICAgICogLy8gcHJvZC5qc29uIGlzIGEgZmlsZSBjb250YWluaW5nIGEgdmFsaWQganNvbiBvYmplY3QgY29uZmlnIGZvciBwcm9kIGVudmlyb25tZW50XG4gICAgICogLy8gaW52YWxpZC5qc29uIGlzIGEgZmlsZSB3aXRoIGEgbWFsZm9ybWVkIGpzb24gb2JqZWN0XG4gICAgICpcbiAgICAgKiBsZXQgY29uZmlncyA9IHt9OyAvL2dsb2JhbCB2YXJpYWJsZVxuICAgICAqIGxldCB2YWxpZENvbmZpZ0ZpbGVNYXAgPSB7ZGV2OiAnZGV2Lmpzb24nLCB0ZXN0OiAndGVzdC5qc29uJywgcHJvZDogJ3Byb2QuanNvbid9O1xuICAgICAqIGxldCBpbnZhbGlkQ29uZmlnRmlsZU1hcCA9IHtkZXY6ICdkZXYuanNvbicsIHRlc3Q6ICd0ZXN0Lmpzb24nLCBpbnZhbGlkOiAnaW52YWxpZC5qc29uJ307XG4gICAgICpcbiAgICAgKiAvLyBhc3luY2hyb25vdXMgZnVuY3Rpb24gdGhhdCByZWFkcyBhIGpzb24gZmlsZSBhbmQgcGFyc2VzIHRoZSBjb250ZW50cyBhcyBqc29uIG9iamVjdFxuICAgICAqIGZ1bmN0aW9uIHBhcnNlRmlsZShmaWxlLCBrZXksIGNhbGxiYWNrKSB7XG4gICAgICogICAgIGZzLnJlYWRGaWxlKGZpbGUsIFwidXRmOFwiLCBmdW5jdGlvbihlcnIsIGRhdGEpIHtcbiAgICAgKiAgICAgICAgIGlmIChlcnIpIHJldHVybiBjYWxiYWNrKGVycik7XG4gICAgICogICAgICAgICB0cnkge1xuICAgICAqICAgICAgICAgICAgIGNvbmZpZ3Nba2V5XSA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICogICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICogICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGUpO1xuICAgICAqICAgICAgICAgfVxuICAgICAqICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgKiAgICAgfSk7XG4gICAgICogfVxuICAgICAqXG4gICAgICogLy8gVXNpbmcgY2FsbGJhY2tzXG4gICAgICogYXN5bmMuZm9yRWFjaE9mKHZhbGlkQ29uZmlnRmlsZU1hcCwgcGFyc2VGaWxlLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICogICAgIGlmIChlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgKiAgICAgfSBlbHNlIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGNvbmZpZ3MpO1xuICAgICAqICAgICAgICAgLy8gY29uZmlncyBpcyBub3cgYSBtYXAgb2YgSlNPTiBkYXRhLCBlLmcuXG4gICAgICogICAgICAgICAvLyB7IGRldjogLy9wYXJzZWQgZGV2Lmpzb24sIHRlc3Q6IC8vcGFyc2VkIHRlc3QuanNvbiwgcHJvZDogLy9wYXJzZWQgcHJvZC5qc29ufVxuICAgICAqICAgICB9XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvL0Vycm9yIGhhbmRpbmdcbiAgICAgKiBhc3luYy5mb3JFYWNoT2YoaW52YWxpZENvbmZpZ0ZpbGVNYXAsIHBhcnNlRmlsZSwgZnVuY3Rpb24gKGVycikge1xuICAgICAqICAgICBpZiAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICogICAgICAgICAvLyBKU09OIHBhcnNlIGVycm9yIGV4Y2VwdGlvblxuICAgICAqICAgICB9IGVsc2Uge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coY29uZmlncyk7XG4gICAgICogICAgIH1cbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIFByb21pc2VzXG4gICAgICogYXN5bmMuZm9yRWFjaE9mKHZhbGlkQ29uZmlnRmlsZU1hcCwgcGFyc2VGaWxlKVxuICAgICAqIC50aGVuKCAoKSA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGNvbmZpZ3MpO1xuICAgICAqICAgICAvLyBjb25maWdzIGlzIG5vdyBhIG1hcCBvZiBKU09OIGRhdGEsIGUuZy5cbiAgICAgKiAgICAgLy8geyBkZXY6IC8vcGFyc2VkIGRldi5qc29uLCB0ZXN0OiAvL3BhcnNlZCB0ZXN0Lmpzb24sIHByb2Q6IC8vcGFyc2VkIHByb2QuanNvbn1cbiAgICAgKiB9KS5jYXRjaCggZXJyID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy9FcnJvciBoYW5kaW5nXG4gICAgICogYXN5bmMuZm9yRWFjaE9mKGludmFsaWRDb25maWdGaWxlTWFwLCBwYXJzZUZpbGUpXG4gICAgICogLnRoZW4oICgpID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coY29uZmlncyk7XG4gICAgICogfSkuY2F0Y2goIGVyciA9PiB7XG4gICAgICogICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgKiAgICAgLy8gSlNPTiBwYXJzZSBlcnJvciBleGNlcHRpb25cbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIGFzeW5jL2F3YWl0XG4gICAgICogYXN5bmMgKCkgPT4ge1xuICAgICAqICAgICB0cnkge1xuICAgICAqICAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IGFzeW5jLmZvckVhY2hPZih2YWxpZENvbmZpZ0ZpbGVNYXAsIHBhcnNlRmlsZSk7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhjb25maWdzKTtcbiAgICAgKiAgICAgICAgIC8vIGNvbmZpZ3MgaXMgbm93IGEgbWFwIG9mIEpTT04gZGF0YSwgZS5nLlxuICAgICAqICAgICAgICAgLy8geyBkZXY6IC8vcGFyc2VkIGRldi5qc29uLCB0ZXN0OiAvL3BhcnNlZCB0ZXN0Lmpzb24sIHByb2Q6IC8vcGFyc2VkIHByb2QuanNvbn1cbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICogLy9FcnJvciBoYW5kaW5nXG4gICAgICogYXN5bmMgKCkgPT4ge1xuICAgICAqICAgICB0cnkge1xuICAgICAqICAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IGFzeW5jLmZvckVhY2hPZihpbnZhbGlkQ29uZmlnRmlsZU1hcCwgcGFyc2VGaWxlKTtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGNvbmZpZ3MpO1xuICAgICAqICAgICB9XG4gICAgICogICAgIGNhdGNoIChlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgICAgICAvLyBKU09OIHBhcnNlIGVycm9yIGV4Y2VwdGlvblxuICAgICAqICAgICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICovXG4gICAgZnVuY3Rpb24gZWFjaE9mKGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgZWFjaE9mSW1wbGVtZW50YXRpb24gPSBpc0FycmF5TGlrZShjb2xsKSA/IGVhY2hPZkFycmF5TGlrZSA6IGVhY2hPZkdlbmVyaWM7XG4gICAgICAgIHJldHVybiBlYWNoT2ZJbXBsZW1lbnRhdGlvbihjb2xsLCB3cmFwQXN5bmMoaXRlcmF0ZWUpLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgdmFyIGVhY2hPZiQxID0gYXdhaXRpZnkoZWFjaE9mLCAzKTtcblxuICAgIC8qKlxuICAgICAqIFByb2R1Y2VzIGEgbmV3IGNvbGxlY3Rpb24gb2YgdmFsdWVzIGJ5IG1hcHBpbmcgZWFjaCB2YWx1ZSBpbiBgY29sbGAgdGhyb3VnaFxuICAgICAqIHRoZSBgaXRlcmF0ZWVgIGZ1bmN0aW9uLiBUaGUgYGl0ZXJhdGVlYCBpcyBjYWxsZWQgd2l0aCBhbiBpdGVtIGZyb20gYGNvbGxgXG4gICAgICogYW5kIGEgY2FsbGJhY2sgZm9yIHdoZW4gaXQgaGFzIGZpbmlzaGVkIHByb2Nlc3NpbmcuIEVhY2ggb2YgdGhlc2UgY2FsbGJhY2tzXG4gICAgICogdGFrZXMgMiBhcmd1bWVudHM6IGFuIGBlcnJvcmAsIGFuZCB0aGUgdHJhbnNmb3JtZWQgaXRlbSBmcm9tIGBjb2xsYC4gSWZcbiAgICAgKiBgaXRlcmF0ZWVgIHBhc3NlcyBhbiBlcnJvciB0byBpdHMgY2FsbGJhY2ssIHRoZSBtYWluIGBjYWxsYmFja2AgKGZvciB0aGVcbiAgICAgKiBgbWFwYCBmdW5jdGlvbikgaXMgaW1tZWRpYXRlbHkgY2FsbGVkIHdpdGggdGhlIGVycm9yLlxuICAgICAqXG4gICAgICogTm90ZSwgdGhhdCBzaW5jZSB0aGlzIGZ1bmN0aW9uIGFwcGxpZXMgdGhlIGBpdGVyYXRlZWAgdG8gZWFjaCBpdGVtIGluXG4gICAgICogcGFyYWxsZWwsIHRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IHRoZSBgaXRlcmF0ZWVgIGZ1bmN0aW9ucyB3aWxsIGNvbXBsZXRlXG4gICAgICogaW4gb3JkZXIuIEhvd2V2ZXIsIHRoZSByZXN1bHRzIGFycmF5IHdpbGwgYmUgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlXG4gICAgICogb3JpZ2luYWwgYGNvbGxgLlxuICAgICAqXG4gICAgICogSWYgYG1hcGAgaXMgcGFzc2VkIGFuIE9iamVjdCwgdGhlIHJlc3VsdHMgd2lsbCBiZSBhbiBBcnJheS4gIFRoZSByZXN1bHRzXG4gICAgICogd2lsbCByb3VnaGx5IGJlIGluIHRoZSBvcmRlciBvZiB0aGUgb3JpZ2luYWwgT2JqZWN0cycga2V5cyAoYnV0IHRoaXMgY2FuXG4gICAgICogdmFyeSBhY3Jvc3MgSmF2YVNjcmlwdCBlbmdpbmVzKS5cbiAgICAgKlxuICAgICAqIEBuYW1lIG1hcFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEFuIGFzeW5jIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggaXRlbSBpblxuICAgICAqIGBjb2xsYC5cbiAgICAgKiBUaGUgaXRlcmF0ZWUgc2hvdWxkIGNvbXBsZXRlIHdpdGggdGhlIHRyYW5zZm9ybWVkIGl0ZW0uXG4gICAgICogSW52b2tlZCB3aXRoIChpdGVtLCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIHdoZW4gYWxsIGBpdGVyYXRlZWBcbiAgICAgKiBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZCwgb3IgYW4gZXJyb3Igb2NjdXJzLiBSZXN1bHRzIGlzIGFuIEFycmF5IG9mIHRoZVxuICAgICAqIHRyYW5zZm9ybWVkIGl0ZW1zIGZyb20gdGhlIGBjb2xsYC4gSW52b2tlZCB3aXRoIChlcnIsIHJlc3VsdHMpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIG5vIGNhbGxiYWNrIGlzIHBhc3NlZFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBmaWxlMS50eHQgaXMgYSBmaWxlIHRoYXQgaXMgMTAwMCBieXRlcyBpbiBzaXplXG4gICAgICogLy8gZmlsZTIudHh0IGlzIGEgZmlsZSB0aGF0IGlzIDIwMDAgYnl0ZXMgaW4gc2l6ZVxuICAgICAqIC8vIGZpbGUzLnR4dCBpcyBhIGZpbGUgdGhhdCBpcyAzMDAwIGJ5dGVzIGluIHNpemVcbiAgICAgKiAvLyBmaWxlNC50eHQgZG9lcyBub3QgZXhpc3RcbiAgICAgKlxuICAgICAqIGNvbnN0IGZpbGVMaXN0ID0gWydmaWxlMS50eHQnLCdmaWxlMi50eHQnLCdmaWxlMy50eHQnXTtcbiAgICAgKiBjb25zdCB3aXRoTWlzc2luZ0ZpbGVMaXN0ID0gWydmaWxlMS50eHQnLCdmaWxlMi50eHQnLCdmaWxlNC50eHQnXTtcbiAgICAgKlxuICAgICAqIC8vIGFzeW5jaHJvbm91cyBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGZpbGUgc2l6ZSBpbiBieXRlc1xuICAgICAqIGZ1bmN0aW9uIGdldEZpbGVTaXplSW5CeXRlcyhmaWxlLCBjYWxsYmFjaykge1xuICAgICAqICAgICBmcy5zdGF0KGZpbGUsIGZ1bmN0aW9uKGVyciwgc3RhdCkge1xuICAgICAqICAgICAgICAgaWYgKGVycikge1xuICAgICAqICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAqICAgICAgICAgfVxuICAgICAqICAgICAgICAgY2FsbGJhY2sobnVsbCwgc3RhdC5zaXplKTtcbiAgICAgKiAgICAgfSk7XG4gICAgICogfVxuICAgICAqXG4gICAgICogLy8gVXNpbmcgY2FsbGJhY2tzXG4gICAgICogYXN5bmMubWFwKGZpbGVMaXN0LCBnZXRGaWxlU2l6ZUluQnl0ZXMsIGZ1bmN0aW9uKGVyciwgcmVzdWx0cykge1xuICAgICAqICAgICBpZiAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9IGVsc2Uge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgICAgICAvLyByZXN1bHRzIGlzIG5vdyBhbiBhcnJheSBvZiB0aGUgZmlsZSBzaXplIGluIGJ5dGVzIGZvciBlYWNoIGZpbGUsIGUuZy5cbiAgICAgKiAgICAgICAgIC8vIFsgMTAwMCwgMjAwMCwgMzAwMF1cbiAgICAgKiAgICAgfVxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gRXJyb3IgSGFuZGxpbmdcbiAgICAgKiBhc3luYy5tYXAod2l0aE1pc3NpbmdGaWxlTGlzdCwgZ2V0RmlsZVNpemVJbkJ5dGVzLCBmdW5jdGlvbihlcnIsIHJlc3VsdHMpIHtcbiAgICAgKiAgICAgaWYgKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgICAgIC8vIFsgRXJyb3I6IEVOT0VOVDogbm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSBdXG4gICAgICogICAgIH0gZWxzZSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgUHJvbWlzZXNcbiAgICAgKiBhc3luYy5tYXAoZmlsZUxpc3QsIGdldEZpbGVTaXplSW5CeXRlcylcbiAgICAgKiAudGhlbiggcmVzdWx0cyA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgICAvLyByZXN1bHRzIGlzIG5vdyBhbiBhcnJheSBvZiB0aGUgZmlsZSBzaXplIGluIGJ5dGVzIGZvciBlYWNoIGZpbGUsIGUuZy5cbiAgICAgKiAgICAgLy8gWyAxMDAwLCAyMDAwLCAzMDAwXVxuICAgICAqIH0pLmNhdGNoKCBlcnIgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gRXJyb3IgSGFuZGxpbmdcbiAgICAgKiBhc3luYy5tYXAod2l0aE1pc3NpbmdGaWxlTGlzdCwgZ2V0RmlsZVNpemVJbkJ5dGVzKVxuICAgICAqIC50aGVuKCByZXN1bHRzID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogfSkuY2F0Y2goIGVyciA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgIC8vIFsgRXJyb3I6IEVOT0VOVDogbm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSBdXG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBhc3luYy9hd2FpdFxuICAgICAqIGFzeW5jICgpID0+IHtcbiAgICAgKiAgICAgdHJ5IHtcbiAgICAgKiAgICAgICAgIGxldCByZXN1bHRzID0gYXdhaXQgYXN5bmMubWFwKGZpbGVMaXN0LCBnZXRGaWxlU2l6ZUluQnl0ZXMpO1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgICAgICAvLyByZXN1bHRzIGlzIG5vdyBhbiBhcnJheSBvZiB0aGUgZmlsZSBzaXplIGluIGJ5dGVzIGZvciBlYWNoIGZpbGUsIGUuZy5cbiAgICAgKiAgICAgICAgIC8vIFsgMTAwMCwgMjAwMCwgMzAwMF1cbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICogLy8gRXJyb3IgSGFuZGxpbmdcbiAgICAgKiBhc3luYyAoKSA9PiB7XG4gICAgICogICAgIHRyeSB7XG4gICAgICogICAgICAgICBsZXQgcmVzdWx0cyA9IGF3YWl0IGFzeW5jLm1hcCh3aXRoTWlzc2luZ0ZpbGVMaXN0LCBnZXRGaWxlU2l6ZUluQnl0ZXMpO1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgIH1cbiAgICAgKiAgICAgY2F0Y2ggKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgICAgIC8vIFsgRXJyb3I6IEVOT0VOVDogbm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSBdXG4gICAgICogICAgIH1cbiAgICAgKiB9XG4gICAgICpcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtYXAgKGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX2FzeW5jTWFwKGVhY2hPZiQxLCBjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuICAgIHZhciBtYXAkMSA9IGF3YWl0aWZ5KG1hcCwgMyk7XG5cbiAgICAvKipcbiAgICAgKiBBcHBsaWVzIHRoZSBwcm92aWRlZCBhcmd1bWVudHMgdG8gZWFjaCBmdW5jdGlvbiBpbiB0aGUgYXJyYXksIGNhbGxpbmdcbiAgICAgKiBgY2FsbGJhY2tgIGFmdGVyIGFsbCBmdW5jdGlvbnMgaGF2ZSBjb21wbGV0ZWQuIElmIHlvdSBvbmx5IHByb3ZpZGUgdGhlIGZpcnN0XG4gICAgICogYXJndW1lbnQsIGBmbnNgLCB0aGVuIGl0IHdpbGwgcmV0dXJuIGEgZnVuY3Rpb24gd2hpY2ggbGV0cyB5b3UgcGFzcyBpbiB0aGVcbiAgICAgKiBhcmd1bWVudHMgYXMgaWYgaXQgd2VyZSBhIHNpbmdsZSBmdW5jdGlvbiBjYWxsLiBJZiBtb3JlIGFyZ3VtZW50cyBhcmVcbiAgICAgKiBwcm92aWRlZCwgYGNhbGxiYWNrYCBpcyByZXF1aXJlZCB3aGlsZSBgYXJnc2AgaXMgc3RpbGwgb3B0aW9uYWwuIFRoZSByZXN1bHRzXG4gICAgICogZm9yIGVhY2ggb2YgdGhlIGFwcGxpZWQgYXN5bmMgZnVuY3Rpb25zIGFyZSBwYXNzZWQgdG8gdGhlIGZpbmFsIGNhbGxiYWNrXG4gICAgICogYXMgYW4gYXJyYXkuXG4gICAgICpcbiAgICAgKiBAbmFtZSBhcHBseUVhY2hcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb250cm9sRmxvd1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgQ29udHJvbCBGbG93XG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gZm5zIC0gQSBjb2xsZWN0aW9uIG9mIHtAbGluayBBc3luY0Z1bmN0aW9ufXNcbiAgICAgKiB0byBhbGwgY2FsbCB3aXRoIHRoZSBzYW1lIGFyZ3VtZW50c1xuICAgICAqIEBwYXJhbSB7Li4uKn0gW2FyZ3NdIC0gYW55IG51bWJlciBvZiBzZXBhcmF0ZSBhcmd1bWVudHMgdG8gcGFzcyB0byB0aGVcbiAgICAgKiBmdW5jdGlvbi5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gdGhlIGZpbmFsIGFyZ3VtZW50IHNob3VsZCBiZSB0aGUgY2FsbGJhY2ssXG4gICAgICogY2FsbGVkIHdoZW4gYWxsIGZ1bmN0aW9ucyBoYXZlIGNvbXBsZXRlZCBwcm9jZXNzaW5nLlxuICAgICAqIEByZXR1cm5zIHtBc3luY0Z1bmN0aW9ufSAtIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHRha2VzIG5vIGFyZ3Mgb3RoZXIgdGhhblxuICAgICAqIGFuIG9wdGlvbmFsIGNhbGxiYWNrLCB0aGF0IGlzIHRoZSByZXN1bHQgb2YgYXBwbHlpbmcgdGhlIGBhcmdzYCB0byBlYWNoXG4gICAgICogb2YgdGhlIGZ1bmN0aW9ucy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogY29uc3QgYXBwbGllZEZuID0gYXN5bmMuYXBwbHlFYWNoKFtlbmFibGVTZWFyY2gsIHVwZGF0ZVNjaGVtYV0sICdidWNrZXQnKVxuICAgICAqXG4gICAgICogYXBwbGllZEZuKChlcnIsIHJlc3VsdHMpID0+IHtcbiAgICAgKiAgICAgLy8gcmVzdWx0c1swXSBpcyB0aGUgcmVzdWx0cyBmb3IgYGVuYWJsZVNlYXJjaGBcbiAgICAgKiAgICAgLy8gcmVzdWx0c1sxXSBpcyB0aGUgcmVzdWx0cyBmb3IgYHVwZGF0ZVNjaGVtYWBcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIHBhcnRpYWwgYXBwbGljYXRpb24gZXhhbXBsZTpcbiAgICAgKiBhc3luYy5lYWNoKFxuICAgICAqICAgICBidWNrZXRzLFxuICAgICAqICAgICBhc3luYyAoYnVja2V0KSA9PiBhc3luYy5hcHBseUVhY2goW2VuYWJsZVNlYXJjaCwgdXBkYXRlU2NoZW1hXSwgYnVja2V0KSgpLFxuICAgICAqICAgICBjYWxsYmFja1xuICAgICAqICk7XG4gICAgICovXG4gICAgdmFyIGFwcGx5RWFjaCA9IGFwcGx5RWFjaCQxKG1hcCQxKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzYW1lIGFzIFtgZWFjaE9mYF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmVhY2hPZn0gYnV0IHJ1bnMgb25seSBhIHNpbmdsZSBhc3luYyBvcGVyYXRpb24gYXQgYSB0aW1lLlxuICAgICAqXG4gICAgICogQG5hbWUgZWFjaE9mU2VyaWVzXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMuZWFjaE9mXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZWFjaE9mfVxuICAgICAqIEBhbGlhcyBmb3JFYWNoT2ZTZXJpZXNcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBbiBhc3luYyBmdW5jdGlvbiB0byBhcHBseSB0byBlYWNoIGl0ZW0gaW5cbiAgICAgKiBgY29sbGAuXG4gICAgICogSW52b2tlZCB3aXRoIChpdGVtLCBrZXksIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgd2hlbiBhbGwgYGl0ZXJhdGVlYFxuICAgICAqIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLCBvciBhbiBlcnJvciBvY2N1cnMuIEludm9rZWQgd2l0aCAoZXJyKS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBhIGNhbGxiYWNrIGlzIG9taXR0ZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBlYWNoT2ZTZXJpZXMoY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBlYWNoT2ZMaW1pdCQxKGNvbGwsIDEsIGl0ZXJhdGVlLCBjYWxsYmFjaylcbiAgICB9XG4gICAgdmFyIGVhY2hPZlNlcmllcyQxID0gYXdhaXRpZnkoZWFjaE9mU2VyaWVzLCAzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzYW1lIGFzIFtgbWFwYF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLm1hcH0gYnV0IHJ1bnMgb25seSBhIHNpbmdsZSBhc3luYyBvcGVyYXRpb24gYXQgYSB0aW1lLlxuICAgICAqXG4gICAgICogQG5hbWUgbWFwU2VyaWVzXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMubWFwXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMubWFwfVxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEFuIGFzeW5jIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggaXRlbSBpblxuICAgICAqIGBjb2xsYC5cbiAgICAgKiBUaGUgaXRlcmF0ZWUgc2hvdWxkIGNvbXBsZXRlIHdpdGggdGhlIHRyYW5zZm9ybWVkIGl0ZW0uXG4gICAgICogSW52b2tlZCB3aXRoIChpdGVtLCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIHdoZW4gYWxsIGBpdGVyYXRlZWBcbiAgICAgKiBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZCwgb3IgYW4gZXJyb3Igb2NjdXJzLiBSZXN1bHRzIGlzIGFuIGFycmF5IG9mIHRoZVxuICAgICAqIHRyYW5zZm9ybWVkIGl0ZW1zIGZyb20gdGhlIGBjb2xsYC4gSW52b2tlZCB3aXRoIChlcnIsIHJlc3VsdHMpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIG5vIGNhbGxiYWNrIGlzIHBhc3NlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1hcFNlcmllcyAoY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBfYXN5bmNNYXAoZWFjaE9mU2VyaWVzJDEsIGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaylcbiAgICB9XG4gICAgdmFyIG1hcFNlcmllcyQxID0gYXdhaXRpZnkobWFwU2VyaWVzLCAzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzYW1lIGFzIFtgYXBwbHlFYWNoYF17QGxpbmsgbW9kdWxlOkNvbnRyb2xGbG93LmFwcGx5RWFjaH0gYnV0IHJ1bnMgb25seSBhIHNpbmdsZSBhc3luYyBvcGVyYXRpb24gYXQgYSB0aW1lLlxuICAgICAqXG4gICAgICogQG5hbWUgYXBwbHlFYWNoU2VyaWVzXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMuYXBwbHlFYWNoXXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cuYXBwbHlFYWNofVxuICAgICAqIEBjYXRlZ29yeSBDb250cm9sIEZsb3dcbiAgICAgKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfEFzeW5jSXRlcmFibGV8T2JqZWN0fSBmbnMgLSBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIEFzeW5jRnVuY3Rpb259cyB0byBhbGxcbiAgICAgKiBjYWxsIHdpdGggdGhlIHNhbWUgYXJndW1lbnRzXG4gICAgICogQHBhcmFtIHsuLi4qfSBbYXJnc10gLSBhbnkgbnVtYmVyIG9mIHNlcGFyYXRlIGFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZVxuICAgICAqIGZ1bmN0aW9uLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSB0aGUgZmluYWwgYXJndW1lbnQgc2hvdWxkIGJlIHRoZSBjYWxsYmFjayxcbiAgICAgKiBjYWxsZWQgd2hlbiBhbGwgZnVuY3Rpb25zIGhhdmUgY29tcGxldGVkIHByb2Nlc3NpbmcuXG4gICAgICogQHJldHVybnMge0FzeW5jRnVuY3Rpb259IC0gQSBmdW5jdGlvbiwgdGhhdCB3aGVuIGNhbGxlZCwgaXMgdGhlIHJlc3VsdCBvZlxuICAgICAqIGFwcGxpbmcgdGhlIGBhcmdzYCB0byB0aGUgbGlzdCBvZiBmdW5jdGlvbnMuICBJdCB0YWtlcyBubyBhcmdzLCBvdGhlciB0aGFuXG4gICAgICogYSBjYWxsYmFjay5cbiAgICAgKi9cbiAgICB2YXIgYXBwbHlFYWNoU2VyaWVzID0gYXBwbHlFYWNoJDEobWFwU2VyaWVzJDEpO1xuXG4gICAgY29uc3QgUFJPTUlTRV9TWU1CT0wgPSBTeW1ib2woJ3Byb21pc2VDYWxsYmFjaycpO1xuXG4gICAgZnVuY3Rpb24gcHJvbWlzZUNhbGxiYWNrICgpIHtcbiAgICAgICAgbGV0IHJlc29sdmUsIHJlamVjdDtcbiAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2sgKGVyciwgLi4uYXJncykge1xuICAgICAgICAgICAgaWYgKGVycikgcmV0dXJuIHJlamVjdChlcnIpXG4gICAgICAgICAgICByZXNvbHZlKGFyZ3MubGVuZ3RoID4gMSA/IGFyZ3MgOiBhcmdzWzBdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhbGxiYWNrW1BST01JU0VfU1lNQk9MXSA9IG5ldyBQcm9taXNlKChyZXMsIHJlaikgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZSA9IHJlcyxcbiAgICAgICAgICAgIHJlamVjdCA9IHJlajtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lcyB0aGUgYmVzdCBvcmRlciBmb3IgcnVubmluZyB0aGUge0BsaW5rIEFzeW5jRnVuY3Rpb259cyBpbiBgdGFza3NgLCBiYXNlZCBvblxuICAgICAqIHRoZWlyIHJlcXVpcmVtZW50cy4gRWFjaCBmdW5jdGlvbiBjYW4gb3B0aW9uYWxseSBkZXBlbmQgb24gb3RoZXIgZnVuY3Rpb25zXG4gICAgICogYmVpbmcgY29tcGxldGVkIGZpcnN0LCBhbmQgZWFjaCBmdW5jdGlvbiBpcyBydW4gYXMgc29vbiBhcyBpdHMgcmVxdWlyZW1lbnRzXG4gICAgICogYXJlIHNhdGlzZmllZC5cbiAgICAgKlxuICAgICAqIElmIGFueSBvZiB0aGUge0BsaW5rIEFzeW5jRnVuY3Rpb259cyBwYXNzIGFuIGVycm9yIHRvIHRoZWlyIGNhbGxiYWNrLCB0aGUgYGF1dG9gIHNlcXVlbmNlXG4gICAgICogd2lsbCBzdG9wLiBGdXJ0aGVyIHRhc2tzIHdpbGwgbm90IGV4ZWN1dGUgKHNvIGFueSBvdGhlciBmdW5jdGlvbnMgZGVwZW5kaW5nXG4gICAgICogb24gaXQgd2lsbCBub3QgcnVuKSwgYW5kIHRoZSBtYWluIGBjYWxsYmFja2AgaXMgaW1tZWRpYXRlbHkgY2FsbGVkIHdpdGggdGhlXG4gICAgICogZXJyb3IuXG4gICAgICpcbiAgICAgKiB7QGxpbmsgQXN5bmNGdW5jdGlvbn1zIGFsc28gcmVjZWl2ZSBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgcmVzdWx0cyBvZiBmdW5jdGlvbnMgd2hpY2hcbiAgICAgKiBoYXZlIGNvbXBsZXRlZCBzbyBmYXIgYXMgdGhlIGZpcnN0IGFyZ3VtZW50LCBpZiB0aGV5IGhhdmUgZGVwZW5kZW5jaWVzLiBJZiBhXG4gICAgICogdGFzayBmdW5jdGlvbiBoYXMgbm8gZGVwZW5kZW5jaWVzLCBpdCB3aWxsIG9ubHkgYmUgcGFzc2VkIGEgY2FsbGJhY2suXG4gICAgICpcbiAgICAgKiBAbmFtZSBhdXRvXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGNhdGVnb3J5IENvbnRyb2wgRmxvd1xuICAgICAqIEBwYXJhbSB7T2JqZWN0fSB0YXNrcyAtIEFuIG9iamVjdC4gRWFjaCBvZiBpdHMgcHJvcGVydGllcyBpcyBlaXRoZXIgYVxuICAgICAqIGZ1bmN0aW9uIG9yIGFuIGFycmF5IG9mIHJlcXVpcmVtZW50cywgd2l0aCB0aGUge0BsaW5rIEFzeW5jRnVuY3Rpb259IGl0c2VsZiB0aGUgbGFzdCBpdGVtXG4gICAgICogaW4gdGhlIGFycmF5LiBUaGUgb2JqZWN0J3Mga2V5IG9mIGEgcHJvcGVydHkgc2VydmVzIGFzIHRoZSBuYW1lIG9mIHRoZSB0YXNrXG4gICAgICogZGVmaW5lZCBieSB0aGF0IHByb3BlcnR5LCBpLmUuIGNhbiBiZSB1c2VkIHdoZW4gc3BlY2lmeWluZyByZXF1aXJlbWVudHMgZm9yXG4gICAgICogb3RoZXIgdGFza3MuIFRoZSBmdW5jdGlvbiByZWNlaXZlcyBvbmUgb3IgdHdvIGFyZ3VtZW50czpcbiAgICAgKiAqIGEgYHJlc3VsdHNgIG9iamVjdCwgY29udGFpbmluZyB0aGUgcmVzdWx0cyBvZiB0aGUgcHJldmlvdXNseSBleGVjdXRlZFxuICAgICAqICAgZnVuY3Rpb25zLCBvbmx5IHBhc3NlZCBpZiB0aGUgdGFzayBoYXMgYW55IGRlcGVuZGVuY2llcyxcbiAgICAgKiAqIGEgYGNhbGxiYWNrKGVyciwgcmVzdWx0KWAgZnVuY3Rpb24sIHdoaWNoIG11c3QgYmUgY2FsbGVkIHdoZW4gZmluaXNoZWQsXG4gICAgICogICBwYXNzaW5nIGFuIGBlcnJvcmAgKHdoaWNoIGNhbiBiZSBgbnVsbGApIGFuZCB0aGUgcmVzdWx0IG9mIHRoZSBmdW5jdGlvbidzXG4gICAgICogICBleGVjdXRpb24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtjb25jdXJyZW5jeT1JbmZpbml0eV0gLSBBbiBvcHRpb25hbCBgaW50ZWdlcmAgZm9yXG4gICAgICogZGV0ZXJtaW5pbmcgdGhlIG1heGltdW0gbnVtYmVyIG9mIHRhc2tzIHRoYXQgY2FuIGJlIHJ1biBpbiBwYXJhbGxlbC4gQnlcbiAgICAgKiBkZWZhdWx0LCBhcyBtYW55IGFzIHBvc3NpYmxlLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBbiBvcHRpb25hbCBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgd2hlbiBhbGxcbiAgICAgKiB0aGUgdGFza3MgaGF2ZSBiZWVuIGNvbXBsZXRlZC4gSXQgcmVjZWl2ZXMgdGhlIGBlcnJgIGFyZ3VtZW50IGlmIGFueSBgdGFza3NgXG4gICAgICogcGFzcyBhbiBlcnJvciB0byB0aGVpciBjYWxsYmFjay4gUmVzdWx0cyBhcmUgYWx3YXlzIHJldHVybmVkOyBob3dldmVyLCBpZiBhblxuICAgICAqIGVycm9yIG9jY3Vycywgbm8gZnVydGhlciBgdGFza3NgIHdpbGwgYmUgcGVyZm9ybWVkLCBhbmQgdGhlIHJlc3VsdHMgb2JqZWN0XG4gICAgICogd2lsbCBvbmx5IGNvbnRhaW4gcGFydGlhbCByZXN1bHRzLiBJbnZva2VkIHdpdGggKGVyciwgcmVzdWx0cykuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgYSBjYWxsYmFjayBpcyBub3QgcGFzc2VkXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vVXNpbmcgQ2FsbGJhY2tzXG4gICAgICogYXN5bmMuYXV0byh7XG4gICAgICogICAgIGdldF9kYXRhOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgLy8gYXN5bmMgY29kZSB0byBnZXQgc29tZSBkYXRhXG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCAnZGF0YScsICdjb252ZXJ0ZWQgdG8gYXJyYXknKTtcbiAgICAgKiAgICAgfSxcbiAgICAgKiAgICAgbWFrZV9mb2xkZXI6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAvLyBhc3luYyBjb2RlIHRvIGNyZWF0ZSBhIGRpcmVjdG9yeSB0byBzdG9yZSBhIGZpbGUgaW5cbiAgICAgKiAgICAgICAgIC8vIHRoaXMgaXMgcnVuIGF0IHRoZSBzYW1lIHRpbWUgYXMgZ2V0dGluZyB0aGUgZGF0YVxuICAgICAqICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ2ZvbGRlcicpO1xuICAgICAqICAgICB9LFxuICAgICAqICAgICB3cml0ZV9maWxlOiBbJ2dldF9kYXRhJywgJ21ha2VfZm9sZGVyJywgZnVuY3Rpb24ocmVzdWx0cywgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIC8vIG9uY2UgdGhlcmUgaXMgc29tZSBkYXRhIGFuZCB0aGUgZGlyZWN0b3J5IGV4aXN0cyxcbiAgICAgKiAgICAgICAgIC8vIHdyaXRlIHRoZSBkYXRhIHRvIGEgZmlsZSBpbiB0aGUgZGlyZWN0b3J5XG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCAnZmlsZW5hbWUnKTtcbiAgICAgKiAgICAgfV0sXG4gICAgICogICAgIGVtYWlsX2xpbms6IFsnd3JpdGVfZmlsZScsIGZ1bmN0aW9uKHJlc3VsdHMsIGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAvLyBvbmNlIHRoZSBmaWxlIGlzIHdyaXR0ZW4gbGV0J3MgZW1haWwgYSBsaW5rIHRvIGl0Li4uXG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCB7J2ZpbGUnOnJlc3VsdHMud3JpdGVfZmlsZSwgJ2VtYWlsJzondXNlckBleGFtcGxlLmNvbSd9KTtcbiAgICAgKiAgICAgfV1cbiAgICAgKiB9LCBmdW5jdGlvbihlcnIsIHJlc3VsdHMpIHtcbiAgICAgKiAgICAgaWYgKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coJ2VyciA9ICcsIGVycik7XG4gICAgICogICAgIH1cbiAgICAgKiAgICAgY29uc29sZS5sb2coJ3Jlc3VsdHMgPSAnLCByZXN1bHRzKTtcbiAgICAgKiAgICAgLy8gcmVzdWx0cyA9IHtcbiAgICAgKiAgICAgLy8gICAgIGdldF9kYXRhOiBbJ2RhdGEnLCAnY29udmVydGVkIHRvIGFycmF5J11cbiAgICAgKiAgICAgLy8gICAgIG1ha2VfZm9sZGVyOyAnZm9sZGVyJyxcbiAgICAgKiAgICAgLy8gICAgIHdyaXRlX2ZpbGU6ICdmaWxlbmFtZSdcbiAgICAgKiAgICAgLy8gICAgIGVtYWlsX2xpbms6IHsgZmlsZTogJ2ZpbGVuYW1lJywgZW1haWw6ICd1c2VyQGV4YW1wbGUuY29tJyB9XG4gICAgICogICAgIC8vIH1cbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vVXNpbmcgUHJvbWlzZXNcbiAgICAgKiBhc3luYy5hdXRvKHtcbiAgICAgKiAgICAgZ2V0X2RhdGE6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZygnaW4gZ2V0X2RhdGEnKTtcbiAgICAgKiAgICAgICAgIC8vIGFzeW5jIGNvZGUgdG8gZ2V0IHNvbWUgZGF0YVxuICAgICAqICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ2RhdGEnLCAnY29udmVydGVkIHRvIGFycmF5Jyk7XG4gICAgICogICAgIH0sXG4gICAgICogICAgIG1ha2VfZm9sZGVyOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coJ2luIG1ha2VfZm9sZGVyJyk7XG4gICAgICogICAgICAgICAvLyBhc3luYyBjb2RlIHRvIGNyZWF0ZSBhIGRpcmVjdG9yeSB0byBzdG9yZSBhIGZpbGUgaW5cbiAgICAgKiAgICAgICAgIC8vIHRoaXMgaXMgcnVuIGF0IHRoZSBzYW1lIHRpbWUgYXMgZ2V0dGluZyB0aGUgZGF0YVxuICAgICAqICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ2ZvbGRlcicpO1xuICAgICAqICAgICB9LFxuICAgICAqICAgICB3cml0ZV9maWxlOiBbJ2dldF9kYXRhJywgJ21ha2VfZm9sZGVyJywgZnVuY3Rpb24ocmVzdWx0cywgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIC8vIG9uY2UgdGhlcmUgaXMgc29tZSBkYXRhIGFuZCB0aGUgZGlyZWN0b3J5IGV4aXN0cyxcbiAgICAgKiAgICAgICAgIC8vIHdyaXRlIHRoZSBkYXRhIHRvIGEgZmlsZSBpbiB0aGUgZGlyZWN0b3J5XG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCAnZmlsZW5hbWUnKTtcbiAgICAgKiAgICAgfV0sXG4gICAgICogICAgIGVtYWlsX2xpbms6IFsnd3JpdGVfZmlsZScsIGZ1bmN0aW9uKHJlc3VsdHMsIGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAvLyBvbmNlIHRoZSBmaWxlIGlzIHdyaXR0ZW4gbGV0J3MgZW1haWwgYSBsaW5rIHRvIGl0Li4uXG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCB7J2ZpbGUnOnJlc3VsdHMud3JpdGVfZmlsZSwgJ2VtYWlsJzondXNlckBleGFtcGxlLmNvbSd9KTtcbiAgICAgKiAgICAgfV1cbiAgICAgKiB9KS50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZygncmVzdWx0cyA9ICcsIHJlc3VsdHMpO1xuICAgICAqICAgICAvLyByZXN1bHRzID0ge1xuICAgICAqICAgICAvLyAgICAgZ2V0X2RhdGE6IFsnZGF0YScsICdjb252ZXJ0ZWQgdG8gYXJyYXknXVxuICAgICAqICAgICAvLyAgICAgbWFrZV9mb2xkZXI7ICdmb2xkZXInLFxuICAgICAqICAgICAvLyAgICAgd3JpdGVfZmlsZTogJ2ZpbGVuYW1lJ1xuICAgICAqICAgICAvLyAgICAgZW1haWxfbGluazogeyBmaWxlOiAnZmlsZW5hbWUnLCBlbWFpbDogJ3VzZXJAZXhhbXBsZS5jb20nIH1cbiAgICAgKiAgICAgLy8gfVxuICAgICAqIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKCdlcnIgPSAnLCBlcnIpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy9Vc2luZyBhc3luYy9hd2FpdFxuICAgICAqIGFzeW5jICgpID0+IHtcbiAgICAgKiAgICAgdHJ5IHtcbiAgICAgKiAgICAgICAgIGxldCByZXN1bHRzID0gYXdhaXQgYXN5bmMuYXV0byh7XG4gICAgICogICAgICAgICAgICAgZ2V0X2RhdGE6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAgICAgICAgIC8vIGFzeW5jIGNvZGUgdG8gZ2V0IHNvbWUgZGF0YVxuICAgICAqICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCAnZGF0YScsICdjb252ZXJ0ZWQgdG8gYXJyYXknKTtcbiAgICAgKiAgICAgICAgICAgICB9LFxuICAgICAqICAgICAgICAgICAgIG1ha2VfZm9sZGVyOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgICAgICAgICAvLyBhc3luYyBjb2RlIHRvIGNyZWF0ZSBhIGRpcmVjdG9yeSB0byBzdG9yZSBhIGZpbGUgaW5cbiAgICAgKiAgICAgICAgICAgICAgICAgLy8gdGhpcyBpcyBydW4gYXQgdGhlIHNhbWUgdGltZSBhcyBnZXR0aW5nIHRoZSBkYXRhXG4gICAgICogICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsICdmb2xkZXInKTtcbiAgICAgKiAgICAgICAgICAgICB9LFxuICAgICAqICAgICAgICAgICAgIHdyaXRlX2ZpbGU6IFsnZ2V0X2RhdGEnLCAnbWFrZV9mb2xkZXInLCBmdW5jdGlvbihyZXN1bHRzLCBjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgICAgICAgICAvLyBvbmNlIHRoZXJlIGlzIHNvbWUgZGF0YSBhbmQgdGhlIGRpcmVjdG9yeSBleGlzdHMsXG4gICAgICogICAgICAgICAgICAgICAgIC8vIHdyaXRlIHRoZSBkYXRhIHRvIGEgZmlsZSBpbiB0aGUgZGlyZWN0b3J5XG4gICAgICogICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsICdmaWxlbmFtZScpO1xuICAgICAqICAgICAgICAgICAgIH1dLFxuICAgICAqICAgICAgICAgICAgIGVtYWlsX2xpbms6IFsnd3JpdGVfZmlsZScsIGZ1bmN0aW9uKHJlc3VsdHMsIGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAgICAgICAgIC8vIG9uY2UgdGhlIGZpbGUgaXMgd3JpdHRlbiBsZXQncyBlbWFpbCBhIGxpbmsgdG8gaXQuLi5cbiAgICAgKiAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgeydmaWxlJzpyZXN1bHRzLndyaXRlX2ZpbGUsICdlbWFpbCc6J3VzZXJAZXhhbXBsZS5jb20nfSk7XG4gICAgICogICAgICAgICAgICAgfV1cbiAgICAgKiAgICAgICAgIH0pO1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coJ3Jlc3VsdHMgPSAnLCByZXN1bHRzKTtcbiAgICAgKiAgICAgICAgIC8vIHJlc3VsdHMgPSB7XG4gICAgICogICAgICAgICAvLyAgICAgZ2V0X2RhdGE6IFsnZGF0YScsICdjb252ZXJ0ZWQgdG8gYXJyYXknXVxuICAgICAqICAgICAgICAgLy8gICAgIG1ha2VfZm9sZGVyOyAnZm9sZGVyJyxcbiAgICAgKiAgICAgICAgIC8vICAgICB3cml0ZV9maWxlOiAnZmlsZW5hbWUnXG4gICAgICogICAgICAgICAvLyAgICAgZW1haWxfbGluazogeyBmaWxlOiAnZmlsZW5hbWUnLCBlbWFpbDogJ3VzZXJAZXhhbXBsZS5jb20nIH1cbiAgICAgKiAgICAgICAgIC8vIH1cbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICovXG4gICAgZnVuY3Rpb24gYXV0byh0YXNrcywgY29uY3VycmVuY3ksIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uY3VycmVuY3kgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAvLyBjb25jdXJyZW5jeSBpcyBvcHRpb25hbCwgc2hpZnQgdGhlIGFyZ3MuXG4gICAgICAgICAgICBjYWxsYmFjayA9IGNvbmN1cnJlbmN5O1xuICAgICAgICAgICAgY29uY3VycmVuY3kgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNhbGxiYWNrID0gb25jZShjYWxsYmFjayB8fCBwcm9taXNlQ2FsbGJhY2soKSk7XG4gICAgICAgIHZhciBudW1UYXNrcyA9IE9iamVjdC5rZXlzKHRhc2tzKS5sZW5ndGg7XG4gICAgICAgIGlmICghbnVtVGFza3MpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IG51bVRhc2tzO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgdmFyIHJ1bm5pbmdUYXNrcyA9IDA7XG4gICAgICAgIHZhciBjYW5jZWxlZCA9IGZhbHNlO1xuICAgICAgICB2YXIgaGFzRXJyb3IgPSBmYWxzZTtcblxuICAgICAgICB2YXIgbGlzdGVuZXJzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgICAgICB2YXIgcmVhZHlUYXNrcyA9IFtdO1xuXG4gICAgICAgIC8vIGZvciBjeWNsZSBkZXRlY3Rpb246XG4gICAgICAgIHZhciByZWFkeVRvQ2hlY2sgPSBbXTsgLy8gdGFza3MgdGhhdCBoYXZlIGJlZW4gaWRlbnRpZmllZCBhcyByZWFjaGFibGVcbiAgICAgICAgLy8gd2l0aG91dCB0aGUgcG9zc2liaWxpdHkgb2YgcmV0dXJuaW5nIHRvIGFuIGFuY2VzdG9yIHRhc2tcbiAgICAgICAgdmFyIHVuY2hlY2tlZERlcGVuZGVuY2llcyA9IHt9O1xuXG4gICAgICAgIE9iamVjdC5rZXlzKHRhc2tzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IHRhc2tzW2tleV07XG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodGFzaykpIHtcbiAgICAgICAgICAgICAgICAvLyBubyBkZXBlbmRlbmNpZXNcbiAgICAgICAgICAgICAgICBlbnF1ZXVlVGFzayhrZXksIFt0YXNrXSk7XG4gICAgICAgICAgICAgICAgcmVhZHlUb0NoZWNrLnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBkZXBlbmRlbmNpZXMgPSB0YXNrLnNsaWNlKDAsIHRhc2subGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICB2YXIgcmVtYWluaW5nRGVwZW5kZW5jaWVzID0gZGVwZW5kZW5jaWVzLmxlbmd0aDtcbiAgICAgICAgICAgIGlmIChyZW1haW5pbmdEZXBlbmRlbmNpZXMgPT09IDApIHtcbiAgICAgICAgICAgICAgICBlbnF1ZXVlVGFzayhrZXksIHRhc2spO1xuICAgICAgICAgICAgICAgIHJlYWR5VG9DaGVjay5wdXNoKGtleSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdW5jaGVja2VkRGVwZW5kZW5jaWVzW2tleV0gPSByZW1haW5pbmdEZXBlbmRlbmNpZXM7XG5cbiAgICAgICAgICAgIGRlcGVuZGVuY2llcy5mb3JFYWNoKGRlcGVuZGVuY3lOYW1lID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRhc2tzW2RlcGVuZGVuY3lOYW1lXSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2FzeW5jLmF1dG8gdGFzayBgJyArIGtleSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnYCBoYXMgYSBub24tZXhpc3RlbnQgZGVwZW5kZW5jeSBgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbmN5TmFtZSArICdgIGluICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzLmpvaW4oJywgJykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhZGRMaXN0ZW5lcihkZXBlbmRlbmN5TmFtZSwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZW1haW5pbmdEZXBlbmRlbmNpZXMtLTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlbWFpbmluZ0RlcGVuZGVuY2llcyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZW5xdWV1ZVRhc2soa2V5LCB0YXNrKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNoZWNrRm9yRGVhZGxvY2tzKCk7XG4gICAgICAgIHByb2Nlc3NRdWV1ZSgpO1xuXG4gICAgICAgIGZ1bmN0aW9uIGVucXVldWVUYXNrKGtleSwgdGFzaykge1xuICAgICAgICAgICAgcmVhZHlUYXNrcy5wdXNoKCgpID0+IHJ1blRhc2soa2V5LCB0YXNrKSk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBwcm9jZXNzUXVldWUoKSB7XG4gICAgICAgICAgICBpZiAoY2FuY2VsZWQpIHJldHVyblxuICAgICAgICAgICAgaWYgKHJlYWR5VGFza3MubGVuZ3RoID09PSAwICYmIHJ1bm5pbmdUYXNrcyA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdoaWxlKHJlYWR5VGFza3MubGVuZ3RoICYmIHJ1bm5pbmdUYXNrcyA8IGNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgdmFyIHJ1biA9IHJlYWR5VGFza3Muc2hpZnQoKTtcbiAgICAgICAgICAgICAgICBydW4oKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gYWRkTGlzdGVuZXIodGFza05hbWUsIGZuKSB7XG4gICAgICAgICAgICB2YXIgdGFza0xpc3RlbmVycyA9IGxpc3RlbmVyc1t0YXNrTmFtZV07XG4gICAgICAgICAgICBpZiAoIXRhc2tMaXN0ZW5lcnMpIHtcbiAgICAgICAgICAgICAgICB0YXNrTGlzdGVuZXJzID0gbGlzdGVuZXJzW3Rhc2tOYW1lXSA9IFtdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0YXNrTGlzdGVuZXJzLnB1c2goZm4pO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gdGFza0NvbXBsZXRlKHRhc2tOYW1lKSB7XG4gICAgICAgICAgICB2YXIgdGFza0xpc3RlbmVycyA9IGxpc3RlbmVyc1t0YXNrTmFtZV0gfHwgW107XG4gICAgICAgICAgICB0YXNrTGlzdGVuZXJzLmZvckVhY2goZm4gPT4gZm4oKSk7XG4gICAgICAgICAgICBwcm9jZXNzUXVldWUoKTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgZnVuY3Rpb24gcnVuVGFzayhrZXksIHRhc2spIHtcbiAgICAgICAgICAgIGlmIChoYXNFcnJvcikgcmV0dXJuO1xuXG4gICAgICAgICAgICB2YXIgdGFza0NhbGxiYWNrID0gb25seU9uY2UoKGVyciwgLi4ucmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgcnVubmluZ1Rhc2tzLS07XG4gICAgICAgICAgICAgICAgaWYgKGVyciA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FuY2VsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICAgICAgICAgIFtyZXN1bHRdID0gcmVzdWx0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzYWZlUmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhyZXN1bHRzKS5mb3JFYWNoKHJrZXkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2FmZVJlc3VsdHNbcmtleV0gPSByZXN1bHRzW3JrZXldO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc2FmZVJlc3VsdHNba2V5XSA9IHJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2FuY2VsZWQpIHJldHVyblxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHNhZmVSZXN1bHRzKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW2tleV0gPSByZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tDb21wbGV0ZShrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBydW5uaW5nVGFza3MrKztcbiAgICAgICAgICAgIHZhciB0YXNrRm4gPSB3cmFwQXN5bmModGFza1t0YXNrLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgICAgIGlmICh0YXNrLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICB0YXNrRm4ocmVzdWx0cywgdGFza0NhbGxiYWNrKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGFza0ZuKHRhc2tDYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBjaGVja0ZvckRlYWRsb2NrcygpIHtcbiAgICAgICAgICAgIC8vIEthaG4ncyBhbGdvcml0aG1cbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1RvcG9sb2dpY2FsX3NvcnRpbmcjS2Fobi4yN3NfYWxnb3JpdGhtXG4gICAgICAgICAgICAvLyBodHRwOi8vY29ubmFsbGUuYmxvZ3Nwb3QuY29tLzIwMTMvMTAvdG9wb2xvZ2ljYWwtc29ydGluZ2thaG4tYWxnb3JpdGhtLmh0bWxcbiAgICAgICAgICAgIHZhciBjdXJyZW50VGFzaztcbiAgICAgICAgICAgIHZhciBjb3VudGVyID0gMDtcbiAgICAgICAgICAgIHdoaWxlIChyZWFkeVRvQ2hlY2subGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFRhc2sgPSByZWFkeVRvQ2hlY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgY291bnRlcisrO1xuICAgICAgICAgICAgICAgIGdldERlcGVuZGVudHMoY3VycmVudFRhc2spLmZvckVhY2goZGVwZW5kZW50ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKC0tdW5jaGVja2VkRGVwZW5kZW5jaWVzW2RlcGVuZGVudF0gPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWR5VG9DaGVjay5wdXNoKGRlcGVuZGVudCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvdW50ZXIgIT09IG51bVRhc2tzKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICAnYXN5bmMuYXV0byBjYW5ub3QgZXhlY3V0ZSB0YXNrcyBkdWUgdG8gYSByZWN1cnNpdmUgZGVwZW5kZW5jeSdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gZ2V0RGVwZW5kZW50cyh0YXNrTmFtZSkge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgICAgICAgICAgT2JqZWN0LmtleXModGFza3MpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB0YXNrID0gdGFza3Nba2V5XTtcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0YXNrKSAmJiB0YXNrLmluZGV4T2YodGFza05hbWUpID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2FsbGJhY2tbUFJPTUlTRV9TWU1CT0xdXG4gICAgfVxuXG4gICAgdmFyIEZOX0FSR1MgPSAvXig/OmFzeW5jXFxzKT8oPzpmdW5jdGlvbik/XFxzKig/OlxcdytcXHMqKT9cXCgoW14pXSspXFwpKD86XFxzKnspLztcbiAgICB2YXIgQVJST1dfRk5fQVJHUyA9IC9eKD86YXN5bmNcXHMpP1xccyooPzpcXChcXHMqKT8oKD86W14pPVxcc11cXHMqKSopKD86XFwpXFxzKik/PT4vO1xuICAgIHZhciBGTl9BUkdfU1BMSVQgPSAvLC87XG4gICAgdmFyIEZOX0FSRyA9IC8oPS4rKT8oXFxzKikkLztcblxuICAgIGZ1bmN0aW9uIHN0cmlwQ29tbWVudHMoc3RyaW5nKSB7XG4gICAgICAgIGxldCBzdHJpcHBlZCA9ICcnO1xuICAgICAgICBsZXQgaW5kZXggPSAwO1xuICAgICAgICBsZXQgZW5kQmxvY2tDb21tZW50ID0gc3RyaW5nLmluZGV4T2YoJyovJyk7XG4gICAgICAgIHdoaWxlIChpbmRleCA8IHN0cmluZy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChzdHJpbmdbaW5kZXhdID09PSAnLycgJiYgc3RyaW5nW2luZGV4KzFdID09PSAnLycpIHtcbiAgICAgICAgICAgICAgICAvLyBpbmxpbmUgY29tbWVudFxuICAgICAgICAgICAgICAgIGxldCBlbmRJbmRleCA9IHN0cmluZy5pbmRleE9mKCdcXG4nLCBpbmRleCk7XG4gICAgICAgICAgICAgICAgaW5kZXggPSAoZW5kSW5kZXggPT09IC0xKSA/IHN0cmluZy5sZW5ndGggOiBlbmRJbmRleDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoKGVuZEJsb2NrQ29tbWVudCAhPT0gLTEpICYmIChzdHJpbmdbaW5kZXhdID09PSAnLycpICYmIChzdHJpbmdbaW5kZXgrMV0gPT09ICcqJykpIHtcbiAgICAgICAgICAgICAgICAvLyBibG9jayBjb21tZW50XG4gICAgICAgICAgICAgICAgbGV0IGVuZEluZGV4ID0gc3RyaW5nLmluZGV4T2YoJyovJywgaW5kZXgpO1xuICAgICAgICAgICAgICAgIGlmIChlbmRJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBlbmRJbmRleCArIDI7XG4gICAgICAgICAgICAgICAgICAgIGVuZEJsb2NrQ29tbWVudCA9IHN0cmluZy5pbmRleE9mKCcqLycsIGluZGV4KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdHJpcHBlZCArPSBzdHJpbmdbaW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3RyaXBwZWQgKz0gc3RyaW5nW2luZGV4XTtcbiAgICAgICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdHJpcHBlZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZVBhcmFtcyhmdW5jKSB7XG4gICAgICAgIGNvbnN0IHNyYyA9IHN0cmlwQ29tbWVudHMoZnVuYy50b1N0cmluZygpKTtcbiAgICAgICAgbGV0IG1hdGNoID0gc3JjLm1hdGNoKEZOX0FSR1MpO1xuICAgICAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgICAgICBtYXRjaCA9IHNyYy5tYXRjaChBUlJPV19GTl9BUkdTKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW1hdGNoKSB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCBwYXJzZSBhcmdzIGluIGF1dG9JbmplY3RcXG5Tb3VyY2U6XFxuJyArIHNyYylcbiAgICAgICAgbGV0IFssIGFyZ3NdID0gbWF0Y2g7XG4gICAgICAgIHJldHVybiBhcmdzXG4gICAgICAgICAgICAucmVwbGFjZSgvXFxzL2csICcnKVxuICAgICAgICAgICAgLnNwbGl0KEZOX0FSR19TUExJVClcbiAgICAgICAgICAgIC5tYXAoKGFyZykgPT4gYXJnLnJlcGxhY2UoRk5fQVJHLCAnJykudHJpbSgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIGRlcGVuZGVuY3ktaW5qZWN0ZWQgdmVyc2lvbiBvZiB0aGUgW2FzeW5jLmF1dG9de0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy5hdXRvfSBmdW5jdGlvbi4gRGVwZW5kZW50XG4gICAgICogdGFza3MgYXJlIHNwZWNpZmllZCBhcyBwYXJhbWV0ZXJzIHRvIHRoZSBmdW5jdGlvbiwgYWZ0ZXIgdGhlIHVzdWFsIGNhbGxiYWNrXG4gICAgICogcGFyYW1ldGVyLCB3aXRoIHRoZSBwYXJhbWV0ZXIgbmFtZXMgbWF0Y2hpbmcgdGhlIG5hbWVzIG9mIHRoZSB0YXNrcyBpdFxuICAgICAqIGRlcGVuZHMgb24uIFRoaXMgY2FuIHByb3ZpZGUgZXZlbiBtb3JlIHJlYWRhYmxlIHRhc2sgZ3JhcGhzIHdoaWNoIGNhbiBiZVxuICAgICAqIGVhc2llciB0byBtYWludGFpbi5cbiAgICAgKlxuICAgICAqIElmIGEgZmluYWwgY2FsbGJhY2sgaXMgc3BlY2lmaWVkLCB0aGUgdGFzayByZXN1bHRzIGFyZSBzaW1pbGFybHkgaW5qZWN0ZWQsXG4gICAgICogc3BlY2lmaWVkIGFzIG5hbWVkIHBhcmFtZXRlcnMgYWZ0ZXIgdGhlIGluaXRpYWwgZXJyb3IgcGFyYW1ldGVyLlxuICAgICAqXG4gICAgICogVGhlIGF1dG9JbmplY3QgZnVuY3Rpb24gaXMgcHVyZWx5IHN5bnRhY3RpYyBzdWdhciBhbmQgaXRzIHNlbWFudGljcyBhcmVcbiAgICAgKiBvdGhlcndpc2UgZXF1aXZhbGVudCB0byBbYXN5bmMuYXV0b117QGxpbmsgbW9kdWxlOkNvbnRyb2xGbG93LmF1dG99LlxuICAgICAqXG4gICAgICogQG5hbWUgYXV0b0luamVjdFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbnRyb2xGbG93XG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLmF1dG9de0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy5hdXRvfVxuICAgICAqIEBjYXRlZ29yeSBDb250cm9sIEZsb3dcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gdGFza3MgLSBBbiBvYmplY3QsIGVhY2ggb2Ygd2hvc2UgcHJvcGVydGllcyBpcyBhbiB7QGxpbmsgQXN5bmNGdW5jdGlvbn0gb2ZcbiAgICAgKiB0aGUgZm9ybSAnZnVuYyhbZGVwZW5kZW5jaWVzLi4uXSwgY2FsbGJhY2spLiBUaGUgb2JqZWN0J3Mga2V5IG9mIGEgcHJvcGVydHlcbiAgICAgKiBzZXJ2ZXMgYXMgdGhlIG5hbWUgb2YgdGhlIHRhc2sgZGVmaW5lZCBieSB0aGF0IHByb3BlcnR5LCBpLmUuIGNhbiBiZSB1c2VkXG4gICAgICogd2hlbiBzcGVjaWZ5aW5nIHJlcXVpcmVtZW50cyBmb3Igb3RoZXIgdGFza3MuXG4gICAgICogKiBUaGUgYGNhbGxiYWNrYCBwYXJhbWV0ZXIgaXMgYSBgY2FsbGJhY2soZXJyLCByZXN1bHQpYCB3aGljaCBtdXN0IGJlIGNhbGxlZFxuICAgICAqICAgd2hlbiBmaW5pc2hlZCwgcGFzc2luZyBhbiBgZXJyb3JgICh3aGljaCBjYW4gYmUgYG51bGxgKSBhbmQgdGhlIHJlc3VsdCBvZlxuICAgICAqICAgdGhlIGZ1bmN0aW9uJ3MgZXhlY3V0aW9uLiBUaGUgcmVtYWluaW5nIHBhcmFtZXRlcnMgbmFtZSBvdGhlciB0YXNrcyBvblxuICAgICAqICAgd2hpY2ggdGhlIHRhc2sgaXMgZGVwZW5kZW50LCBhbmQgdGhlIHJlc3VsdHMgZnJvbSB0aG9zZSB0YXNrcyBhcmUgdGhlXG4gICAgICogICBhcmd1bWVudHMgb2YgdGhvc2UgcGFyYW1ldGVycy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQW4gb3B0aW9uYWwgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIHdoZW4gYWxsXG4gICAgICogdGhlIHRhc2tzIGhhdmUgYmVlbiBjb21wbGV0ZWQuIEl0IHJlY2VpdmVzIHRoZSBgZXJyYCBhcmd1bWVudCBpZiBhbnkgYHRhc2tzYFxuICAgICAqIHBhc3MgYW4gZXJyb3IgdG8gdGhlaXIgY2FsbGJhY2ssIGFuZCBhIGByZXN1bHRzYCBvYmplY3Qgd2l0aCBhbnkgY29tcGxldGVkXG4gICAgICogdGFzayByZXN1bHRzLCBzaW1pbGFyIHRvIGBhdXRvYC5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBpcyBwYXNzZWRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gIFRoZSBleGFtcGxlIGZyb20gYGF1dG9gIGNhbiBiZSByZXdyaXR0ZW4gYXMgZm9sbG93czpcbiAgICAgKiBhc3luYy5hdXRvSW5qZWN0KHtcbiAgICAgKiAgICAgZ2V0X2RhdGE6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAvLyBhc3luYyBjb2RlIHRvIGdldCBzb21lIGRhdGFcbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsICdkYXRhJywgJ2NvbnZlcnRlZCB0byBhcnJheScpO1xuICAgICAqICAgICB9LFxuICAgICAqICAgICBtYWtlX2ZvbGRlcjogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIC8vIGFzeW5jIGNvZGUgdG8gY3JlYXRlIGEgZGlyZWN0b3J5IHRvIHN0b3JlIGEgZmlsZSBpblxuICAgICAqICAgICAgICAgLy8gdGhpcyBpcyBydW4gYXQgdGhlIHNhbWUgdGltZSBhcyBnZXR0aW5nIHRoZSBkYXRhXG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCAnZm9sZGVyJyk7XG4gICAgICogICAgIH0sXG4gICAgICogICAgIHdyaXRlX2ZpbGU6IGZ1bmN0aW9uKGdldF9kYXRhLCBtYWtlX2ZvbGRlciwgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIC8vIG9uY2UgdGhlcmUgaXMgc29tZSBkYXRhIGFuZCB0aGUgZGlyZWN0b3J5IGV4aXN0cyxcbiAgICAgKiAgICAgICAgIC8vIHdyaXRlIHRoZSBkYXRhIHRvIGEgZmlsZSBpbiB0aGUgZGlyZWN0b3J5XG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCAnZmlsZW5hbWUnKTtcbiAgICAgKiAgICAgfSxcbiAgICAgKiAgICAgZW1haWxfbGluazogZnVuY3Rpb24od3JpdGVfZmlsZSwgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIC8vIG9uY2UgdGhlIGZpbGUgaXMgd3JpdHRlbiBsZXQncyBlbWFpbCBhIGxpbmsgdG8gaXQuLi5cbiAgICAgKiAgICAgICAgIC8vIHdyaXRlX2ZpbGUgY29udGFpbnMgdGhlIGZpbGVuYW1lIHJldHVybmVkIGJ5IHdyaXRlX2ZpbGUuXG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCB7J2ZpbGUnOndyaXRlX2ZpbGUsICdlbWFpbCc6J3VzZXJAZXhhbXBsZS5jb20nfSk7XG4gICAgICogICAgIH1cbiAgICAgKiB9LCBmdW5jdGlvbihlcnIsIHJlc3VsdHMpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coJ2VyciA9ICcsIGVycik7XG4gICAgICogICAgIGNvbnNvbGUubG9nKCdlbWFpbF9saW5rID0gJywgcmVzdWx0cy5lbWFpbF9saW5rKTtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIElmIHlvdSBhcmUgdXNpbmcgYSBKUyBtaW5pZmllciB0aGF0IG1hbmdsZXMgcGFyYW1ldGVyIG5hbWVzLCBgYXV0b0luamVjdGBcbiAgICAgKiAvLyB3aWxsIG5vdCB3b3JrIHdpdGggcGxhaW4gZnVuY3Rpb25zLCBzaW5jZSB0aGUgcGFyYW1ldGVyIG5hbWVzIHdpbGwgYmVcbiAgICAgKiAvLyBjb2xsYXBzZWQgdG8gYSBzaW5nbGUgbGV0dGVyIGlkZW50aWZpZXIuICBUbyB3b3JrIGFyb3VuZCB0aGlzLCB5b3UgY2FuXG4gICAgICogLy8gZXhwbGljaXRseSBzcGVjaWZ5IHRoZSBuYW1lcyBvZiB0aGUgcGFyYW1ldGVycyB5b3VyIHRhc2sgZnVuY3Rpb24gbmVlZHNcbiAgICAgKiAvLyBpbiBhbiBhcnJheSwgc2ltaWxhciB0byBBbmd1bGFyLmpzIGRlcGVuZGVuY3kgaW5qZWN0aW9uLlxuICAgICAqXG4gICAgICogLy8gVGhpcyBzdGlsbCBoYXMgYW4gYWR2YW50YWdlIG92ZXIgcGxhaW4gYGF1dG9gLCBzaW5jZSB0aGUgcmVzdWx0cyBhIHRhc2tcbiAgICAgKiAvLyBkZXBlbmRzIG9uIGFyZSBzdGlsbCBzcHJlYWQgaW50byBhcmd1bWVudHMuXG4gICAgICogYXN5bmMuYXV0b0luamVjdCh7XG4gICAgICogICAgIC8vLi4uXG4gICAgICogICAgIHdyaXRlX2ZpbGU6IFsnZ2V0X2RhdGEnLCAnbWFrZV9mb2xkZXInLCBmdW5jdGlvbihnZXRfZGF0YSwgbWFrZV9mb2xkZXIsIGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCAnZmlsZW5hbWUnKTtcbiAgICAgKiAgICAgfV0sXG4gICAgICogICAgIGVtYWlsX2xpbms6IFsnd3JpdGVfZmlsZScsIGZ1bmN0aW9uKHdyaXRlX2ZpbGUsIGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCB7J2ZpbGUnOndyaXRlX2ZpbGUsICdlbWFpbCc6J3VzZXJAZXhhbXBsZS5jb20nfSk7XG4gICAgICogICAgIH1dXG4gICAgICogICAgIC8vLi4uXG4gICAgICogfSwgZnVuY3Rpb24oZXJyLCByZXN1bHRzKSB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKCdlcnIgPSAnLCBlcnIpO1xuICAgICAqICAgICBjb25zb2xlLmxvZygnZW1haWxfbGluayA9ICcsIHJlc3VsdHMuZW1haWxfbGluayk7XG4gICAgICogfSk7XG4gICAgICovXG4gICAgZnVuY3Rpb24gYXV0b0luamVjdCh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIG5ld1Rhc2tzID0ge307XG5cbiAgICAgICAgT2JqZWN0LmtleXModGFza3MpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIHZhciB0YXNrRm4gPSB0YXNrc1trZXldO1xuICAgICAgICAgICAgdmFyIHBhcmFtcztcbiAgICAgICAgICAgIHZhciBmbklzQXN5bmMgPSBpc0FzeW5jKHRhc2tGbik7XG4gICAgICAgICAgICB2YXIgaGFzTm9EZXBzID1cbiAgICAgICAgICAgICAgICAoIWZuSXNBc3luYyAmJiB0YXNrRm4ubGVuZ3RoID09PSAxKSB8fFxuICAgICAgICAgICAgICAgIChmbklzQXN5bmMgJiYgdGFza0ZuLmxlbmd0aCA9PT0gMCk7XG5cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRhc2tGbikpIHtcbiAgICAgICAgICAgICAgICBwYXJhbXMgPSBbLi4udGFza0ZuXTtcbiAgICAgICAgICAgICAgICB0YXNrRm4gPSBwYXJhbXMucG9wKCk7XG5cbiAgICAgICAgICAgICAgICBuZXdUYXNrc1trZXldID0gcGFyYW1zLmNvbmNhdChwYXJhbXMubGVuZ3RoID4gMCA/IG5ld1Rhc2sgOiB0YXNrRm4pO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChoYXNOb0RlcHMpIHtcbiAgICAgICAgICAgICAgICAvLyBubyBkZXBlbmRlbmNpZXMsIHVzZSB0aGUgZnVuY3Rpb24gYXMtaXNcbiAgICAgICAgICAgICAgICBuZXdUYXNrc1trZXldID0gdGFza0ZuO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwYXJhbXMgPSBwYXJzZVBhcmFtcyh0YXNrRm4pO1xuICAgICAgICAgICAgICAgIGlmICgodGFza0ZuLmxlbmd0aCA9PT0gMCAmJiAhZm5Jc0FzeW5jKSAmJiBwYXJhbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImF1dG9JbmplY3QgdGFzayBmdW5jdGlvbnMgcmVxdWlyZSBleHBsaWNpdCBwYXJhbWV0ZXJzLlwiKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyByZW1vdmUgY2FsbGJhY2sgcGFyYW1cbiAgICAgICAgICAgICAgICBpZiAoIWZuSXNBc3luYykgcGFyYW1zLnBvcCgpO1xuXG4gICAgICAgICAgICAgICAgbmV3VGFza3Nba2V5XSA9IHBhcmFtcy5jb25jYXQobmV3VGFzayk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIG5ld1Rhc2socmVzdWx0cywgdGFza0NiKSB7XG4gICAgICAgICAgICAgICAgdmFyIG5ld0FyZ3MgPSBwYXJhbXMubWFwKG5hbWUgPT4gcmVzdWx0c1tuYW1lXSk7XG4gICAgICAgICAgICAgICAgbmV3QXJncy5wdXNoKHRhc2tDYik7XG4gICAgICAgICAgICAgICAgd3JhcEFzeW5jKHRhc2tGbikoLi4ubmV3QXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBhdXRvKG5ld1Rhc2tzLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgLy8gU2ltcGxlIGRvdWJseSBsaW5rZWQgbGlzdCAoaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRG91Ymx5X2xpbmtlZF9saXN0KSBpbXBsZW1lbnRhdGlvblxuICAgIC8vIHVzZWQgZm9yIHF1ZXVlcy4gVGhpcyBpbXBsZW1lbnRhdGlvbiBhc3N1bWVzIHRoYXQgdGhlIG5vZGUgcHJvdmlkZWQgYnkgdGhlIHVzZXIgY2FuIGJlIG1vZGlmaWVkXG4gICAgLy8gdG8gYWRqdXN0IHRoZSBuZXh0IGFuZCBsYXN0IHByb3BlcnRpZXMuIFdlIGltcGxlbWVudCBvbmx5IHRoZSBtaW5pbWFsIGZ1bmN0aW9uYWxpdHlcbiAgICAvLyBmb3IgcXVldWUgc3VwcG9ydC5cbiAgICBjbGFzcyBETEwge1xuICAgICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgICAgIHRoaXMuaGVhZCA9IHRoaXMudGFpbCA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmxlbmd0aCA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICByZW1vdmVMaW5rKG5vZGUpIHtcbiAgICAgICAgICAgIGlmIChub2RlLnByZXYpIG5vZGUucHJldi5uZXh0ID0gbm9kZS5uZXh0O1xuICAgICAgICAgICAgZWxzZSB0aGlzLmhlYWQgPSBub2RlLm5leHQ7XG4gICAgICAgICAgICBpZiAobm9kZS5uZXh0KSBub2RlLm5leHQucHJldiA9IG5vZGUucHJldjtcbiAgICAgICAgICAgIGVsc2UgdGhpcy50YWlsID0gbm9kZS5wcmV2O1xuXG4gICAgICAgICAgICBub2RlLnByZXYgPSBub2RlLm5leHQgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5sZW5ndGggLT0gMTtcbiAgICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9XG5cbiAgICAgICAgZW1wdHkgKCkge1xuICAgICAgICAgICAgd2hpbGUodGhpcy5oZWFkKSB0aGlzLnNoaWZ0KCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIGluc2VydEFmdGVyKG5vZGUsIG5ld05vZGUpIHtcbiAgICAgICAgICAgIG5ld05vZGUucHJldiA9IG5vZGU7XG4gICAgICAgICAgICBuZXdOb2RlLm5leHQgPSBub2RlLm5leHQ7XG4gICAgICAgICAgICBpZiAobm9kZS5uZXh0KSBub2RlLm5leHQucHJldiA9IG5ld05vZGU7XG4gICAgICAgICAgICBlbHNlIHRoaXMudGFpbCA9IG5ld05vZGU7XG4gICAgICAgICAgICBub2RlLm5leHQgPSBuZXdOb2RlO1xuICAgICAgICAgICAgdGhpcy5sZW5ndGggKz0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIGluc2VydEJlZm9yZShub2RlLCBuZXdOb2RlKSB7XG4gICAgICAgICAgICBuZXdOb2RlLnByZXYgPSBub2RlLnByZXY7XG4gICAgICAgICAgICBuZXdOb2RlLm5leHQgPSBub2RlO1xuICAgICAgICAgICAgaWYgKG5vZGUucHJldikgbm9kZS5wcmV2Lm5leHQgPSBuZXdOb2RlO1xuICAgICAgICAgICAgZWxzZSB0aGlzLmhlYWQgPSBuZXdOb2RlO1xuICAgICAgICAgICAgbm9kZS5wcmV2ID0gbmV3Tm9kZTtcbiAgICAgICAgICAgIHRoaXMubGVuZ3RoICs9IDE7XG4gICAgICAgIH1cblxuICAgICAgICB1bnNoaWZ0KG5vZGUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmhlYWQpIHRoaXMuaW5zZXJ0QmVmb3JlKHRoaXMuaGVhZCwgbm9kZSk7XG4gICAgICAgICAgICBlbHNlIHNldEluaXRpYWwodGhpcywgbm9kZSk7XG4gICAgICAgIH1cblxuICAgICAgICBwdXNoKG5vZGUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRhaWwpIHRoaXMuaW5zZXJ0QWZ0ZXIodGhpcy50YWlsLCBub2RlKTtcbiAgICAgICAgICAgIGVsc2Ugc2V0SW5pdGlhbCh0aGlzLCBub2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNoaWZ0KCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGVhZCAmJiB0aGlzLnJlbW92ZUxpbmsodGhpcy5oZWFkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBvcCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRhaWwgJiYgdGhpcy5yZW1vdmVMaW5rKHRoaXMudGFpbCk7XG4gICAgICAgIH1cblxuICAgICAgICB0b0FycmF5KCkge1xuICAgICAgICAgICAgcmV0dXJuIFsuLi50aGlzXVxuICAgICAgICB9XG5cbiAgICAgICAgKltTeW1ib2wuaXRlcmF0b3JdICgpIHtcbiAgICAgICAgICAgIHZhciBjdXIgPSB0aGlzLmhlYWQ7XG4gICAgICAgICAgICB3aGlsZSAoY3VyKSB7XG4gICAgICAgICAgICAgICAgeWllbGQgY3VyLmRhdGE7XG4gICAgICAgICAgICAgICAgY3VyID0gY3VyLm5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZW1vdmUgKHRlc3RGbikge1xuICAgICAgICAgICAgdmFyIGN1cnIgPSB0aGlzLmhlYWQ7XG4gICAgICAgICAgICB3aGlsZShjdXJyKSB7XG4gICAgICAgICAgICAgICAgdmFyIHtuZXh0fSA9IGN1cnI7XG4gICAgICAgICAgICAgICAgaWYgKHRlc3RGbihjdXJyKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUxpbmsoY3Vycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGN1cnIgPSBuZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRJbml0aWFsKGRsbCwgbm9kZSkge1xuICAgICAgICBkbGwubGVuZ3RoID0gMTtcbiAgICAgICAgZGxsLmhlYWQgPSBkbGwudGFpbCA9IG5vZGU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcXVldWUkMSh3b3JrZXIsIGNvbmN1cnJlbmN5LCBwYXlsb2FkKSB7XG4gICAgICAgIGlmIChjb25jdXJyZW5jeSA9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZihjb25jdXJyZW5jeSA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0NvbmN1cnJlbmN5IG11c3Qgbm90IGJlIHplcm8nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBfd29ya2VyID0gd3JhcEFzeW5jKHdvcmtlcik7XG4gICAgICAgIHZhciBudW1SdW5uaW5nID0gMDtcbiAgICAgICAgdmFyIHdvcmtlcnNMaXN0ID0gW107XG4gICAgICAgIGNvbnN0IGV2ZW50cyA9IHtcbiAgICAgICAgICAgIGVycm9yOiBbXSxcbiAgICAgICAgICAgIGRyYWluOiBbXSxcbiAgICAgICAgICAgIHNhdHVyYXRlZDogW10sXG4gICAgICAgICAgICB1bnNhdHVyYXRlZDogW10sXG4gICAgICAgICAgICBlbXB0eTogW11cbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiBvbiAoZXZlbnQsIGhhbmRsZXIpIHtcbiAgICAgICAgICAgIGV2ZW50c1tldmVudF0ucHVzaChoYW5kbGVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIG9uY2UgKGV2ZW50LCBoYW5kbGVyKSB7XG4gICAgICAgICAgICBjb25zdCBoYW5kbGVBbmRSZW1vdmUgPSAoLi4uYXJncykgPT4ge1xuICAgICAgICAgICAgICAgIG9mZihldmVudCwgaGFuZGxlQW5kUmVtb3ZlKTtcbiAgICAgICAgICAgICAgICBoYW5kbGVyKC4uLmFyZ3MpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGV2ZW50c1tldmVudF0ucHVzaChoYW5kbGVBbmRSZW1vdmUpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gb2ZmIChldmVudCwgaGFuZGxlcikge1xuICAgICAgICAgICAgaWYgKCFldmVudCkgcmV0dXJuIE9iamVjdC5rZXlzKGV2ZW50cykuZm9yRWFjaChldiA9PiBldmVudHNbZXZdID0gW10pXG4gICAgICAgICAgICBpZiAoIWhhbmRsZXIpIHJldHVybiBldmVudHNbZXZlbnRdID0gW11cbiAgICAgICAgICAgIGV2ZW50c1tldmVudF0gPSBldmVudHNbZXZlbnRdLmZpbHRlcihldiA9PiBldiAhPT0gaGFuZGxlcik7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiB0cmlnZ2VyIChldmVudCwgLi4uYXJncykge1xuICAgICAgICAgICAgZXZlbnRzW2V2ZW50XS5mb3JFYWNoKGhhbmRsZXIgPT4gaGFuZGxlciguLi5hcmdzKSk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcHJvY2Vzc2luZ1NjaGVkdWxlZCA9IGZhbHNlO1xuICAgICAgICBmdW5jdGlvbiBfaW5zZXJ0KGRhdGEsIGluc2VydEF0RnJvbnQsIHJlamVjdE9uRXJyb3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCAmJiB0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Rhc2sgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxLnN0YXJ0ZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICB2YXIgcmVzLCByZWo7XG4gICAgICAgICAgICBmdW5jdGlvbiBwcm9taXNlQ2FsbGJhY2sgKGVyciwgLi4uYXJncykge1xuICAgICAgICAgICAgICAgIC8vIHdlIGRvbid0IGNhcmUgYWJvdXQgdGhlIGVycm9yLCBsZXQgdGhlIGdsb2JhbCBlcnJvciBoYW5kbGVyXG4gICAgICAgICAgICAgICAgLy8gZGVhbCB3aXRoIGl0XG4gICAgICAgICAgICAgICAgaWYgKGVycikgcmV0dXJuIHJlamVjdE9uRXJyb3IgPyByZWooZXJyKSA6IHJlcygpXG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHJldHVybiByZXMoYXJnc1swXSlcbiAgICAgICAgICAgICAgICByZXMoYXJncyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBpdGVtID0gcS5fY3JlYXRlVGFza0l0ZW0oXG4gICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgICByZWplY3RPbkVycm9yID8gcHJvbWlzZUNhbGxiYWNrIDpcbiAgICAgICAgICAgICAgICAgICAgKGNhbGxiYWNrIHx8IHByb21pc2VDYWxsYmFjaylcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmIChpbnNlcnRBdEZyb250KSB7XG4gICAgICAgICAgICAgICAgcS5fdGFza3MudW5zaGlmdChpdGVtKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcS5fdGFza3MucHVzaChpdGVtKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFwcm9jZXNzaW5nU2NoZWR1bGVkKSB7XG4gICAgICAgICAgICAgICAgcHJvY2Vzc2luZ1NjaGVkdWxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlJDEoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzaW5nU2NoZWR1bGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHEucHJvY2VzcygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVqZWN0T25FcnJvciB8fCAhY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXMgPSByZXNvbHZlO1xuICAgICAgICAgICAgICAgICAgICByZWogPSByZWplY3Q7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIF9jcmVhdGVDQih0YXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChlcnIsIC4uLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICBudW1SdW5uaW5nIC09IDE7XG5cbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHRhc2tzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdGFzayA9IHRhc2tzW2ldO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IHdvcmtlcnNMaXN0LmluZGV4T2YodGFzayk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Vyc0xpc3Quc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnNMaXN0LnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0YXNrLmNhbGxiYWNrKGVyciwgLi4uYXJncyk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGVyciAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyKCdlcnJvcicsIGVyciwgdGFzay5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChudW1SdW5uaW5nIDw9IChxLmNvbmN1cnJlbmN5IC0gcS5idWZmZXIpICkge1xuICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyKCd1bnNhdHVyYXRlZCcpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChxLmlkbGUoKSkge1xuICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyKCdkcmFpbicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBxLnByb2Nlc3MoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBfbWF5YmVEcmFpbihkYXRhKSB7XG4gICAgICAgICAgICBpZiAoZGF0YS5sZW5ndGggPT09IDAgJiYgcS5pZGxlKCkpIHtcbiAgICAgICAgICAgICAgICAvLyBjYWxsIGRyYWluIGltbWVkaWF0ZWx5IGlmIHRoZXJlIGFyZSBubyB0YXNrc1xuICAgICAgICAgICAgICAgIHNldEltbWVkaWF0ZSQxKCgpID0+IHRyaWdnZXIoJ2RyYWluJykpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGV2ZW50TWV0aG9kID0gKG5hbWUpID0+IChoYW5kbGVyKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWhhbmRsZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBvbmNlKG5hbWUsIChlcnIsIGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiByZWplY3QoZXJyKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9mZihuYW1lKTtcbiAgICAgICAgICAgIG9uKG5hbWUsIGhhbmRsZXIpO1xuXG4gICAgICAgIH07XG5cbiAgICAgICAgdmFyIGlzUHJvY2Vzc2luZyA9IGZhbHNlO1xuICAgICAgICB2YXIgcSA9IHtcbiAgICAgICAgICAgIF90YXNrczogbmV3IERMTCgpLFxuICAgICAgICAgICAgX2NyZWF0ZVRhc2tJdGVtIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAqW1N5bWJvbC5pdGVyYXRvcl0gKCkge1xuICAgICAgICAgICAgICAgIHlpZWxkKiBxLl90YXNrc1tTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29uY3VycmVuY3ksXG4gICAgICAgICAgICBwYXlsb2FkLFxuICAgICAgICAgICAgYnVmZmVyOiBjb25jdXJyZW5jeSAvIDQsXG4gICAgICAgICAgICBzdGFydGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHBhdXNlZDogZmFsc2UsXG4gICAgICAgICAgICBwdXNoIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfbWF5YmVEcmFpbihkYXRhKSkgcmV0dXJuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhLm1hcChkYXR1bSA9PiBfaW5zZXJ0KGRhdHVtLCBmYWxzZSwgZmFsc2UsIGNhbGxiYWNrKSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9pbnNlcnQoZGF0YSwgZmFsc2UsIGZhbHNlLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHVzaEFzeW5jIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfbWF5YmVEcmFpbihkYXRhKSkgcmV0dXJuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhLm1hcChkYXR1bSA9PiBfaW5zZXJ0KGRhdHVtLCBmYWxzZSwgdHJ1ZSwgY2FsbGJhY2spKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gX2luc2VydChkYXRhLCBmYWxzZSwgdHJ1ZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGtpbGwgKCkge1xuICAgICAgICAgICAgICAgIG9mZigpO1xuICAgICAgICAgICAgICAgIHEuX3Rhc2tzLmVtcHR5KCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdW5zaGlmdCAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoX21heWJlRHJhaW4oZGF0YSkpIHJldHVyblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YS5tYXAoZGF0dW0gPT4gX2luc2VydChkYXR1bSwgdHJ1ZSwgZmFsc2UsIGNhbGxiYWNrKSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9pbnNlcnQoZGF0YSwgdHJ1ZSwgZmFsc2UsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bnNoaWZ0QXN5bmMgKGRhdGEsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9tYXliZURyYWluKGRhdGEpKSByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEubWFwKGRhdHVtID0+IF9pbnNlcnQoZGF0dW0sIHRydWUsIHRydWUsIGNhbGxiYWNrKSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9pbnNlcnQoZGF0YSwgdHJ1ZSwgdHJ1ZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlbW92ZSAodGVzdEZuKSB7XG4gICAgICAgICAgICAgICAgcS5fdGFza3MucmVtb3ZlKHRlc3RGbik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvY2VzcyAoKSB7XG4gICAgICAgICAgICAgICAgLy8gQXZvaWQgdHJ5aW5nIHRvIHN0YXJ0IHRvbyBtYW55IHByb2Nlc3Npbmcgb3BlcmF0aW9ucy4gVGhpcyBjYW4gb2NjdXJcbiAgICAgICAgICAgICAgICAvLyB3aGVuIGNhbGxiYWNrcyByZXNvbHZlIHN5bmNocm9ub3VzbHkgKCMxMjY3KS5cbiAgICAgICAgICAgICAgICBpZiAoaXNQcm9jZXNzaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaXNQcm9jZXNzaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB3aGlsZSghcS5wYXVzZWQgJiYgbnVtUnVubmluZyA8IHEuY29uY3VycmVuY3kgJiYgcS5fdGFza3MubGVuZ3RoKXtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRhc2tzID0gW10sIGRhdGEgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGwgPSBxLl90YXNrcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGlmIChxLnBheWxvYWQpIGwgPSBNYXRoLm1pbihsLCBxLnBheWxvYWQpO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5vZGUgPSBxLl90YXNrcy5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFza3MucHVzaChub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnNMaXN0LnB1c2gobm9kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnB1c2gobm9kZS5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIG51bVJ1bm5pbmcgKz0gMTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAocS5fdGFza3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyKCdlbXB0eScpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG51bVJ1bm5pbmcgPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXIoJ3NhdHVyYXRlZCcpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGNiID0gb25seU9uY2UoX2NyZWF0ZUNCKHRhc2tzKSk7XG4gICAgICAgICAgICAgICAgICAgIF93b3JrZXIoZGF0YSwgY2IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpc1Byb2Nlc3NpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGggKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBxLl90YXNrcy5sZW5ndGg7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcnVubmluZyAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bVJ1bm5pbmc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgd29ya2Vyc0xpc3QgKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzTGlzdDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpZGxlKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBxLl90YXNrcy5sZW5ndGggKyBudW1SdW5uaW5nID09PSAwO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhdXNlICgpIHtcbiAgICAgICAgICAgICAgICBxLnBhdXNlZCA9IHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdW1lICgpIHtcbiAgICAgICAgICAgICAgICBpZiAocS5wYXVzZWQgPT09IGZhbHNlKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgICAgIHEucGF1c2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlJDEocS5wcm9jZXNzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgLy8gZGVmaW5lIHRoZXNlIGFzIGZpeGVkIHByb3BlcnRpZXMsIHNvIHBlb3BsZSBnZXQgdXNlZnVsIGVycm9ycyB3aGVuIHVwZGF0aW5nXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHEsIHtcbiAgICAgICAgICAgIHNhdHVyYXRlZDoge1xuICAgICAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogZXZlbnRNZXRob2QoJ3NhdHVyYXRlZCcpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdW5zYXR1cmF0ZWQ6IHtcbiAgICAgICAgICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGV2ZW50TWV0aG9kKCd1bnNhdHVyYXRlZCcpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW1wdHk6IHtcbiAgICAgICAgICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGV2ZW50TWV0aG9kKCdlbXB0eScpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZHJhaW46IHtcbiAgICAgICAgICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGV2ZW50TWV0aG9kKCdkcmFpbicpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGV2ZW50TWV0aG9kKCdlcnJvcicpXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGBjYXJnb2Agb2JqZWN0IHdpdGggdGhlIHNwZWNpZmllZCBwYXlsb2FkLiBUYXNrcyBhZGRlZCB0byB0aGVcbiAgICAgKiBjYXJnbyB3aWxsIGJlIHByb2Nlc3NlZCBhbHRvZ2V0aGVyICh1cCB0byB0aGUgYHBheWxvYWRgIGxpbWl0KS4gSWYgdGhlXG4gICAgICogYHdvcmtlcmAgaXMgaW4gcHJvZ3Jlc3MsIHRoZSB0YXNrIGlzIHF1ZXVlZCB1bnRpbCBpdCBiZWNvbWVzIGF2YWlsYWJsZS4gT25jZVxuICAgICAqIHRoZSBgd29ya2VyYCBoYXMgY29tcGxldGVkIHNvbWUgdGFza3MsIGVhY2ggY2FsbGJhY2sgb2YgdGhvc2UgdGFza3MgaXNcbiAgICAgKiBjYWxsZWQuIENoZWNrIG91dCBbdGhlc2VdKGh0dHBzOi8vY2Ftby5naXRodWJ1c2VyY29udGVudC5jb20vNmJiZDM2ZjRjZjViMzVhMGYxMWE5NmRjZDJlOTc3MTFmZmMyZmIzNy82ODc0NzQ3MDczM2EyZjJmNjYyZTYzNmM2Zjc1NjQyZTY3Njk3NDY4NzU2MjJlNjM2ZjZkMmY2MTczNzM2NTc0NzMyZjMxMzYzNzM2MzgzNzMxMmYzNjM4MzEzMDM4MmY2MjYyNjMzMDYzNjY2MjMwMmQzNTY2MzIzOTJkMzEzMTY1MzIyZDM5MzczNDY2MmQzMzMzMzkzNzYzMzYzNDY0NjMzODM1MzgyZTY3Njk2NikgW2FuaW1hdGlvbnNdKGh0dHBzOi8vY2Ftby5naXRodWJ1c2VyY29udGVudC5jb20vZjQ4MTBlMDBlMWM1ZjVmOGFkZGJlM2U5ZjQ5MDY0ZmQ1ZDEwMjY5OS82ODc0NzQ3MDczM2EyZjJmNjYyZTYzNmM2Zjc1NjQyZTY3Njk3NDY4NzU2MjJlNjM2ZjZkMmY2MTczNzM2NTc0NzMyZjMxMzYzNzM2MzgzNzMxMmYzNjM4MzEzMDMxMmYzODM0NjMzOTMyMzAzNjM2MmQzNTY2MzIzOTJkMzEzMTY1MzIyZDM4MzEzNDY2MmQzOTY0MzM2NDMwMzIzNDMxMzM2MjY2NjQyZTY3Njk2NilcbiAgICAgKiBmb3IgaG93IGBjYXJnb2AgYW5kIGBxdWV1ZWAgd29yay5cbiAgICAgKlxuICAgICAqIFdoaWxlIFtgcXVldWVgXXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cucXVldWV9IHBhc3NlcyBvbmx5IG9uZSB0YXNrIHRvIG9uZSBvZiBhIGdyb3VwIG9mIHdvcmtlcnNcbiAgICAgKiBhdCBhIHRpbWUsIGNhcmdvIHBhc3NlcyBhbiBhcnJheSBvZiB0YXNrcyB0byBhIHNpbmdsZSB3b3JrZXIsIHJlcGVhdGluZ1xuICAgICAqIHdoZW4gdGhlIHdvcmtlciBpcyBmaW5pc2hlZC5cbiAgICAgKlxuICAgICAqIEBuYW1lIGNhcmdvXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMucXVldWVde0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy5xdWV1ZX1cbiAgICAgKiBAY2F0ZWdvcnkgQ29udHJvbCBGbG93XG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSB3b3JrZXIgLSBBbiBhc3luY2hyb25vdXMgZnVuY3Rpb24gZm9yIHByb2Nlc3NpbmcgYW4gYXJyYXlcbiAgICAgKiBvZiBxdWV1ZWQgdGFza3MuIEludm9rZWQgd2l0aCBgKHRhc2tzLCBjYWxsYmFjaylgLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbcGF5bG9hZD1JbmZpbml0eV0gLSBBbiBvcHRpb25hbCBgaW50ZWdlcmAgZm9yIGRldGVybWluaW5nXG4gICAgICogaG93IG1hbnkgdGFza3Mgc2hvdWxkIGJlIHByb2Nlc3NlZCBwZXIgcm91bmQ7IGlmIG9taXR0ZWQsIHRoZSBkZWZhdWx0IGlzXG4gICAgICogdW5saW1pdGVkLlxuICAgICAqIEByZXR1cm5zIHttb2R1bGU6Q29udHJvbEZsb3cuUXVldWVPYmplY3R9IEEgY2FyZ28gb2JqZWN0IHRvIG1hbmFnZSB0aGUgdGFza3MuIENhbGxiYWNrcyBjYW5cbiAgICAgKiBhdHRhY2hlZCBhcyBjZXJ0YWluIHByb3BlcnRpZXMgdG8gbGlzdGVuIGZvciBzcGVjaWZpYyBldmVudHMgZHVyaW5nIHRoZVxuICAgICAqIGxpZmVjeWNsZSBvZiB0aGUgY2FyZ28gYW5kIGlubmVyIHF1ZXVlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBjcmVhdGUgYSBjYXJnbyBvYmplY3Qgd2l0aCBwYXlsb2FkIDJcbiAgICAgKiB2YXIgY2FyZ28gPSBhc3luYy5jYXJnbyhmdW5jdGlvbih0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgZm9yICh2YXIgaT0wOyBpPHRhc2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZygnaGVsbG8gJyArIHRhc2tzW2ldLm5hbWUpO1xuICAgICAqICAgICB9XG4gICAgICogICAgIGNhbGxiYWNrKCk7XG4gICAgICogfSwgMik7XG4gICAgICpcbiAgICAgKiAvLyBhZGQgc29tZSBpdGVtc1xuICAgICAqIGNhcmdvLnB1c2goe25hbWU6ICdmb28nfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKCdmaW5pc2hlZCBwcm9jZXNzaW5nIGZvbycpO1xuICAgICAqIH0pO1xuICAgICAqIGNhcmdvLnB1c2goe25hbWU6ICdiYXInfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKCdmaW5pc2hlZCBwcm9jZXNzaW5nIGJhcicpO1xuICAgICAqIH0pO1xuICAgICAqIGF3YWl0IGNhcmdvLnB1c2goe25hbWU6ICdiYXonfSk7XG4gICAgICogY29uc29sZS5sb2coJ2ZpbmlzaGVkIHByb2Nlc3NpbmcgYmF6Jyk7XG4gICAgICovXG4gICAgZnVuY3Rpb24gY2FyZ28kMSh3b3JrZXIsIHBheWxvYWQpIHtcbiAgICAgICAgcmV0dXJuIHF1ZXVlJDEod29ya2VyLCAxLCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgYGNhcmdvUXVldWVgIG9iamVjdCB3aXRoIHRoZSBzcGVjaWZpZWQgcGF5bG9hZC4gVGFza3MgYWRkZWQgdG8gdGhlXG4gICAgICogY2FyZ29RdWV1ZSB3aWxsIGJlIHByb2Nlc3NlZCB0b2dldGhlciAodXAgdG8gdGhlIGBwYXlsb2FkYCBsaW1pdCkgaW4gYGNvbmN1cnJlbmN5YCBwYXJhbGxlbCB3b3JrZXJzLlxuICAgICAqIElmIHRoZSBhbGwgYHdvcmtlcnNgIGFyZSBpbiBwcm9ncmVzcywgdGhlIHRhc2sgaXMgcXVldWVkIHVudGlsIG9uZSBiZWNvbWVzIGF2YWlsYWJsZS4gT25jZVxuICAgICAqIGEgYHdvcmtlcmAgaGFzIGNvbXBsZXRlZCBzb21lIHRhc2tzLCBlYWNoIGNhbGxiYWNrIG9mIHRob3NlIHRhc2tzIGlzXG4gICAgICogY2FsbGVkLiBDaGVjayBvdXQgW3RoZXNlXShodHRwczovL2NhbW8uZ2l0aHVidXNlcmNvbnRlbnQuY29tLzZiYmQzNmY0Y2Y1YjM1YTBmMTFhOTZkY2QyZTk3NzExZmZjMmZiMzcvNjg3NDc0NzA3MzNhMmYyZjY2MmU2MzZjNmY3NTY0MmU2NzY5NzQ2ODc1NjIyZTYzNmY2ZDJmNjE3MzczNjU3NDczMmYzMTM2MzczNjM4MzczMTJmMzYzODMxMzAzODJmNjI2MjYzMzA2MzY2NjIzMDJkMzU2NjMyMzkyZDMxMzE2NTMyMmQzOTM3MzQ2NjJkMzMzMzM5Mzc2MzM2MzQ2NDYzMzgzNTM4MmU2NzY5NjYpIFthbmltYXRpb25zXShodHRwczovL2NhbW8uZ2l0aHVidXNlcmNvbnRlbnQuY29tL2Y0ODEwZTAwZTFjNWY1ZjhhZGRiZTNlOWY0OTA2NGZkNWQxMDI2OTkvNjg3NDc0NzA3MzNhMmYyZjY2MmU2MzZjNmY3NTY0MmU2NzY5NzQ2ODc1NjIyZTYzNmY2ZDJmNjE3MzczNjU3NDczMmYzMTM2MzczNjM4MzczMTJmMzYzODMxMzAzMTJmMzgzNDYzMzkzMjMwMzYzNjJkMzU2NjMyMzkyZDMxMzE2NTMyMmQzODMxMzQ2NjJkMzk2NDMzNjQzMDMyMzQzMTMzNjI2NjY0MmU2NzY5NjYpXG4gICAgICogZm9yIGhvdyBgY2FyZ29gIGFuZCBgcXVldWVgIHdvcmsuXG4gICAgICpcbiAgICAgKiBXaGlsZSBbYHF1ZXVlYF17QGxpbmsgbW9kdWxlOkNvbnRyb2xGbG93LnF1ZXVlfSBwYXNzZXMgb25seSBvbmUgdGFzayB0byBvbmUgb2YgYSBncm91cCBvZiB3b3JrZXJzXG4gICAgICogYXQgYSB0aW1lLCBhbmQgW2BjYXJnb2Bde0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy5jYXJnb30gcGFzc2VzIGFuIGFycmF5IG9mIHRhc2tzIHRvIGEgc2luZ2xlIHdvcmtlcixcbiAgICAgKiB0aGUgY2FyZ29RdWV1ZSBwYXNzZXMgYW4gYXJyYXkgb2YgdGFza3MgdG8gbXVsdGlwbGUgcGFyYWxsZWwgd29ya2Vycy5cbiAgICAgKlxuICAgICAqIEBuYW1lIGNhcmdvUXVldWVcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb250cm9sRmxvd1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5xdWV1ZV17QGxpbmsgbW9kdWxlOkNvbnRyb2xGbG93LnF1ZXVlfVxuICAgICAqIEBzZWUgW2FzeW5jLmNhcmdvXXtAbGluayBtb2R1bGU6Q29udHJvbEZMb3cuY2FyZ299XG4gICAgICogQGNhdGVnb3J5IENvbnRyb2wgRmxvd1xuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gd29ya2VyIC0gQW4gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIGZvciBwcm9jZXNzaW5nIGFuIGFycmF5XG4gICAgICogb2YgcXVldWVkIHRhc2tzLiBJbnZva2VkIHdpdGggYCh0YXNrcywgY2FsbGJhY2spYC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2NvbmN1cnJlbmN5PTFdIC0gQW4gYGludGVnZXJgIGZvciBkZXRlcm1pbmluZyBob3cgbWFueVxuICAgICAqIGB3b3JrZXJgIGZ1bmN0aW9ucyBzaG91bGQgYmUgcnVuIGluIHBhcmFsbGVsLiAgSWYgb21pdHRlZCwgdGhlIGNvbmN1cnJlbmN5XG4gICAgICogZGVmYXVsdHMgdG8gYDFgLiAgSWYgdGhlIGNvbmN1cnJlbmN5IGlzIGAwYCwgYW4gZXJyb3IgaXMgdGhyb3duLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbcGF5bG9hZD1JbmZpbml0eV0gLSBBbiBvcHRpb25hbCBgaW50ZWdlcmAgZm9yIGRldGVybWluaW5nXG4gICAgICogaG93IG1hbnkgdGFza3Mgc2hvdWxkIGJlIHByb2Nlc3NlZCBwZXIgcm91bmQ7IGlmIG9taXR0ZWQsIHRoZSBkZWZhdWx0IGlzXG4gICAgICogdW5saW1pdGVkLlxuICAgICAqIEByZXR1cm5zIHttb2R1bGU6Q29udHJvbEZsb3cuUXVldWVPYmplY3R9IEEgY2FyZ29RdWV1ZSBvYmplY3QgdG8gbWFuYWdlIHRoZSB0YXNrcy4gQ2FsbGJhY2tzIGNhblxuICAgICAqIGF0dGFjaGVkIGFzIGNlcnRhaW4gcHJvcGVydGllcyB0byBsaXN0ZW4gZm9yIHNwZWNpZmljIGV2ZW50cyBkdXJpbmcgdGhlXG4gICAgICogbGlmZWN5Y2xlIG9mIHRoZSBjYXJnb1F1ZXVlIGFuZCBpbm5lciBxdWV1ZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gY3JlYXRlIGEgY2FyZ29RdWV1ZSBvYmplY3Qgd2l0aCBwYXlsb2FkIDIgYW5kIGNvbmN1cnJlbmN5IDJcbiAgICAgKiB2YXIgY2FyZ29RdWV1ZSA9IGFzeW5jLmNhcmdvUXVldWUoZnVuY3Rpb24odGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICogICAgIGZvciAodmFyIGk9MDsgaTx0YXNrcy5sZW5ndGg7IGkrKykge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coJ2hlbGxvICcgKyB0YXNrc1tpXS5uYW1lKTtcbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjYWxsYmFjaygpO1xuICAgICAqIH0sIDIsIDIpO1xuICAgICAqXG4gICAgICogLy8gYWRkIHNvbWUgaXRlbXNcbiAgICAgKiBjYXJnb1F1ZXVlLnB1c2goe25hbWU6ICdmb28nfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKCdmaW5pc2hlZCBwcm9jZXNzaW5nIGZvbycpO1xuICAgICAqIH0pO1xuICAgICAqIGNhcmdvUXVldWUucHVzaCh7bmFtZTogJ2Jhcid9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coJ2ZpbmlzaGVkIHByb2Nlc3NpbmcgYmFyJyk7XG4gICAgICogfSk7XG4gICAgICogY2FyZ29RdWV1ZS5wdXNoKHtuYW1lOiAnYmF6J30sIGZ1bmN0aW9uKGVycikge1xuICAgICAqICAgICBjb25zb2xlLmxvZygnZmluaXNoZWQgcHJvY2Vzc2luZyBiYXonKTtcbiAgICAgKiB9KTtcbiAgICAgKiBjYXJnb1F1ZXVlLnB1c2goe25hbWU6ICdib28nfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKCdmaW5pc2hlZCBwcm9jZXNzaW5nIGJvbycpO1xuICAgICAqIH0pO1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNhcmdvKHdvcmtlciwgY29uY3VycmVuY3ksIHBheWxvYWQpIHtcbiAgICAgICAgcmV0dXJuIHF1ZXVlJDEod29ya2VyLCBjb25jdXJyZW5jeSwgcGF5bG9hZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVkdWNlcyBgY29sbGAgaW50byBhIHNpbmdsZSB2YWx1ZSB1c2luZyBhbiBhc3luYyBgaXRlcmF0ZWVgIHRvIHJldHVybiBlYWNoXG4gICAgICogc3VjY2Vzc2l2ZSBzdGVwLiBgbWVtb2AgaXMgdGhlIGluaXRpYWwgc3RhdGUgb2YgdGhlIHJlZHVjdGlvbi4gVGhpcyBmdW5jdGlvblxuICAgICAqIG9ubHkgb3BlcmF0ZXMgaW4gc2VyaWVzLlxuICAgICAqXG4gICAgICogRm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIGl0IG1heSBtYWtlIHNlbnNlIHRvIHNwbGl0IGEgY2FsbCB0byB0aGlzIGZ1bmN0aW9uXG4gICAgICogaW50byBhIHBhcmFsbGVsIG1hcCwgYW5kIHRoZW4gdXNlIHRoZSBub3JtYWwgYEFycmF5LnByb3RvdHlwZS5yZWR1Y2VgIG9uIHRoZVxuICAgICAqIHJlc3VsdHMuIFRoaXMgZnVuY3Rpb24gaXMgZm9yIHNpdHVhdGlvbnMgd2hlcmUgZWFjaCBzdGVwIGluIHRoZSByZWR1Y3Rpb25cbiAgICAgKiBuZWVkcyB0byBiZSBhc3luYzsgaWYgeW91IGNhbiBnZXQgdGhlIGRhdGEgYmVmb3JlIHJlZHVjaW5nIGl0LCB0aGVuIGl0J3NcbiAgICAgKiBwcm9iYWJseSBhIGdvb2QgaWRlYSB0byBkbyBzby5cbiAgICAgKlxuICAgICAqIEBuYW1lIHJlZHVjZVxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBhbGlhcyBpbmplY3RcbiAgICAgKiBAYWxpYXMgZm9sZGxcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7Kn0gbWVtbyAtIFRoZSBpbml0aWFsIHN0YXRlIG9mIHRoZSByZWR1Y3Rpb24uXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEEgZnVuY3Rpb24gYXBwbGllZCB0byBlYWNoIGl0ZW0gaW4gdGhlXG4gICAgICogYXJyYXkgdG8gcHJvZHVjZSB0aGUgbmV4dCBzdGVwIGluIHRoZSByZWR1Y3Rpb24uXG4gICAgICogVGhlIGBpdGVyYXRlZWAgc2hvdWxkIGNvbXBsZXRlIHdpdGggdGhlIG5leHQgc3RhdGUgb2YgdGhlIHJlZHVjdGlvbi5cbiAgICAgKiBJZiB0aGUgaXRlcmF0ZWUgY29tcGxldGVzIHdpdGggYW4gZXJyb3IsIHRoZSByZWR1Y3Rpb24gaXMgc3RvcHBlZCBhbmQgdGhlXG4gICAgICogbWFpbiBgY2FsbGJhY2tgIGlzIGltbWVkaWF0ZWx5IGNhbGxlZCB3aXRoIHRoZSBlcnJvci5cbiAgICAgKiBJbnZva2VkIHdpdGggKG1lbW8sIGl0ZW0sIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgYWZ0ZXIgYWxsIHRoZVxuICAgICAqIGBpdGVyYXRlZWAgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQuIFJlc3VsdCBpcyB0aGUgcmVkdWNlZCB2YWx1ZS4gSW52b2tlZCB3aXRoXG4gICAgICogKGVyciwgcmVzdWx0KS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBpcyBwYXNzZWRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gZmlsZTEudHh0IGlzIGEgZmlsZSB0aGF0IGlzIDEwMDAgYnl0ZXMgaW4gc2l6ZVxuICAgICAqIC8vIGZpbGUyLnR4dCBpcyBhIGZpbGUgdGhhdCBpcyAyMDAwIGJ5dGVzIGluIHNpemVcbiAgICAgKiAvLyBmaWxlMy50eHQgaXMgYSBmaWxlIHRoYXQgaXMgMzAwMCBieXRlcyBpbiBzaXplXG4gICAgICogLy8gZmlsZTQudHh0IGRvZXMgbm90IGV4aXN0XG4gICAgICpcbiAgICAgKiBjb25zdCBmaWxlTGlzdCA9IFsnZmlsZTEudHh0JywnZmlsZTIudHh0JywnZmlsZTMudHh0J107XG4gICAgICogY29uc3Qgd2l0aE1pc3NpbmdGaWxlTGlzdCA9IFsnZmlsZTEudHh0JywnZmlsZTIudHh0JywnZmlsZTMudHh0JywgJ2ZpbGU0LnR4dCddO1xuICAgICAqXG4gICAgICogLy8gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRoYXQgY29tcHV0ZXMgdGhlIGZpbGUgc2l6ZSBpbiBieXRlc1xuICAgICAqIC8vIGZpbGUgc2l6ZSBpcyBhZGRlZCB0byB0aGUgbWVtb2l6ZWQgdmFsdWUsIHRoZW4gcmV0dXJuZWRcbiAgICAgKiBmdW5jdGlvbiBnZXRGaWxlU2l6ZUluQnl0ZXMobWVtbywgZmlsZSwgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgZnMuc3RhdChmaWxlLCBmdW5jdGlvbihlcnIsIHN0YXQpIHtcbiAgICAgKiAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgKiAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgKiAgICAgICAgIH1cbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsIG1lbW8gKyBzdGF0LnNpemUpO1xuICAgICAqICAgICB9KTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBjYWxsYmFja3NcbiAgICAgKiBhc3luYy5yZWR1Y2UoZmlsZUxpc3QsIDAsIGdldEZpbGVTaXplSW5CeXRlcywgZnVuY3Rpb24oZXJyLCByZXN1bHQpIHtcbiAgICAgKiAgICAgaWYgKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgfSBlbHNlIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XG4gICAgICogICAgICAgICAvLyA2MDAwXG4gICAgICogICAgICAgICAvLyB3aGljaCBpcyB0aGUgc3VtIG9mIHRoZSBmaWxlIHNpemVzIG9mIHRoZSB0aHJlZSBmaWxlc1xuICAgICAqICAgICB9XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBFcnJvciBIYW5kbGluZ1xuICAgICAqIGFzeW5jLnJlZHVjZSh3aXRoTWlzc2luZ0ZpbGVMaXN0LCAwLCBnZXRGaWxlU2l6ZUluQnl0ZXMsIGZ1bmN0aW9uKGVyciwgcmVzdWx0KSB7XG4gICAgICogICAgIGlmIChlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgICAgICAvLyBbIEVycm9yOiBFTk9FTlQ6IG5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkgXVxuICAgICAqICAgICB9IGVsc2Uge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgfVxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgUHJvbWlzZXNcbiAgICAgKiBhc3luYy5yZWR1Y2UoZmlsZUxpc3QsIDAsIGdldEZpbGVTaXplSW5CeXRlcylcbiAgICAgKiAudGhlbiggcmVzdWx0ID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgLy8gNjAwMFxuICAgICAqICAgICAvLyB3aGljaCBpcyB0aGUgc3VtIG9mIHRoZSBmaWxlIHNpemVzIG9mIHRoZSB0aHJlZSBmaWxlc1xuICAgICAqIH0pLmNhdGNoKCBlcnIgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gRXJyb3IgSGFuZGxpbmdcbiAgICAgKiBhc3luYy5yZWR1Y2Uod2l0aE1pc3NpbmdGaWxlTGlzdCwgMCwgZ2V0RmlsZVNpemVJbkJ5dGVzKVxuICAgICAqIC50aGVuKCByZXN1bHQgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqIH0pLmNhdGNoKCBlcnIgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICAvLyBbIEVycm9yOiBFTk9FTlQ6IG5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkgXVxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgYXN5bmMvYXdhaXRcbiAgICAgKiBhc3luYyAoKSA9PiB7XG4gICAgICogICAgIHRyeSB7XG4gICAgICogICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgYXN5bmMucmVkdWNlKGZpbGVMaXN0LCAwLCBnZXRGaWxlU2l6ZUluQnl0ZXMpO1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgICAgIC8vIDYwMDBcbiAgICAgKiAgICAgICAgIC8vIHdoaWNoIGlzIHRoZSBzdW0gb2YgdGhlIGZpbGUgc2l6ZXMgb2YgdGhlIHRocmVlIGZpbGVzXG4gICAgICogICAgIH1cbiAgICAgKiAgICAgY2F0Y2ggKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIC8vIEVycm9yIEhhbmRsaW5nXG4gICAgICogYXN5bmMgKCkgPT4ge1xuICAgICAqICAgICB0cnkge1xuICAgICAqICAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IGFzeW5jLnJlZHVjZSh3aXRoTWlzc2luZ0ZpbGVMaXN0LCAwLCBnZXRGaWxlU2l6ZUluQnl0ZXMpO1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICAgICAgLy8gWyBFcnJvcjogRU5PRU5UOiBubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IF1cbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJlZHVjZShjb2xsLCBtZW1vLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBvbmNlKGNhbGxiYWNrKTtcbiAgICAgICAgdmFyIF9pdGVyYXRlZSA9IHdyYXBBc3luYyhpdGVyYXRlZSk7XG4gICAgICAgIHJldHVybiBlYWNoT2ZTZXJpZXMkMShjb2xsLCAoeCwgaSwgaXRlckNiKSA9PiB7XG4gICAgICAgICAgICBfaXRlcmF0ZWUobWVtbywgeCwgKGVyciwgdikgPT4ge1xuICAgICAgICAgICAgICAgIG1lbW8gPSB2O1xuICAgICAgICAgICAgICAgIGl0ZXJDYihlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGVyciA9PiBjYWxsYmFjayhlcnIsIG1lbW8pKTtcbiAgICB9XG4gICAgdmFyIHJlZHVjZSQxID0gYXdhaXRpZnkocmVkdWNlLCA0KTtcblxuICAgIC8qKlxuICAgICAqIFZlcnNpb24gb2YgdGhlIGNvbXBvc2UgZnVuY3Rpb24gdGhhdCBpcyBtb3JlIG5hdHVyYWwgdG8gcmVhZC4gRWFjaCBmdW5jdGlvblxuICAgICAqIGNvbnN1bWVzIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIHByZXZpb3VzIGZ1bmN0aW9uLiBJdCBpcyB0aGUgZXF1aXZhbGVudCBvZlxuICAgICAqIFtjb21wb3NlXXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cuY29tcG9zZX0gd2l0aCB0aGUgYXJndW1lbnRzIHJldmVyc2VkLlxuICAgICAqXG4gICAgICogRWFjaCBmdW5jdGlvbiBpcyBleGVjdXRlZCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiB0aGUgY29tcG9zZWQgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAbmFtZSBzZXFcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb250cm9sRmxvd1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5jb21wb3NlXXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cuY29tcG9zZX1cbiAgICAgKiBAY2F0ZWdvcnkgQ29udHJvbCBGbG93XG4gICAgICogQHBhcmFtIHsuLi5Bc3luY0Z1bmN0aW9ufSBmdW5jdGlvbnMgLSB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9ucyB0byBjb21wb3NlXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBhIGZ1bmN0aW9uIHRoYXQgY29tcG9zZXMgdGhlIGBmdW5jdGlvbnNgIGluIG9yZGVyXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vIFJlcXVpcmVzIGxvZGFzaCAob3IgdW5kZXJzY29yZSksIGV4cHJlc3MzIGFuZCBkcmVzZW5kZSdzIG9ybTIuXG4gICAgICogLy8gUGFydCBvZiBhbiBhcHAsIHRoYXQgZmV0Y2hlcyBjYXRzIG9mIHRoZSBsb2dnZWQgdXNlci5cbiAgICAgKiAvLyBUaGlzIGV4YW1wbGUgdXNlcyBgc2VxYCBmdW5jdGlvbiB0byBhdm9pZCBvdmVybmVzdGluZyBhbmQgZXJyb3JcbiAgICAgKiAvLyBoYW5kbGluZyBjbHV0dGVyLlxuICAgICAqIGFwcC5nZXQoJy9jYXRzJywgZnVuY3Rpb24ocmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgICAgKiAgICAgdmFyIFVzZXIgPSByZXF1ZXN0Lm1vZGVscy5Vc2VyO1xuICAgICAqICAgICBhc3luYy5zZXEoXG4gICAgICogICAgICAgICBVc2VyLmdldC5iaW5kKFVzZXIpLCAgLy8gJ1VzZXIuZ2V0JyBoYXMgc2lnbmF0dXJlIChpZCwgY2FsbGJhY2soZXJyLCBkYXRhKSlcbiAgICAgKiAgICAgICAgIGZ1bmN0aW9uKHVzZXIsIGZuKSB7XG4gICAgICogICAgICAgICAgICAgdXNlci5nZXRDYXRzKGZuKTsgICAgICAvLyAnZ2V0Q2F0cycgaGFzIHNpZ25hdHVyZSAoY2FsbGJhY2soZXJyLCBkYXRhKSlcbiAgICAgKiAgICAgICAgIH1cbiAgICAgKiAgICAgKShyZXEuc2Vzc2lvbi51c2VyX2lkLCBmdW5jdGlvbiAoZXJyLCBjYXRzKSB7XG4gICAgICogICAgICAgICBpZiAoZXJyKSB7XG4gICAgICogICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAqICAgICAgICAgICAgIHJlc3BvbnNlLmpzb24oeyBzdGF0dXM6ICdlcnJvcicsIG1lc3NhZ2U6IGVyci5tZXNzYWdlIH0pO1xuICAgICAqICAgICAgICAgfSBlbHNlIHtcbiAgICAgKiAgICAgICAgICAgICByZXNwb25zZS5qc29uKHsgc3RhdHVzOiAnb2snLCBtZXNzYWdlOiAnQ2F0cyBmb3VuZCcsIGRhdGE6IGNhdHMgfSk7XG4gICAgICogICAgICAgICB9XG4gICAgICogICAgIH0pO1xuICAgICAqIH0pO1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNlcSguLi5mdW5jdGlvbnMpIHtcbiAgICAgICAgdmFyIF9mdW5jdGlvbnMgPSBmdW5jdGlvbnMubWFwKHdyYXBBc3luYyk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuXG4gICAgICAgICAgICB2YXIgY2IgPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNiID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYiA9IHByb21pc2VDYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZWR1Y2UkMShfZnVuY3Rpb25zLCBhcmdzLCAobmV3YXJncywgZm4sIGl0ZXJDYikgPT4ge1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIG5ld2FyZ3MuY29uY2F0KChlcnIsIC4uLm5leHRhcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZXJDYihlcnIsIG5leHRhcmdzKTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgKGVyciwgcmVzdWx0cykgPT4gY2IoZXJyLCAuLi5yZXN1bHRzKSk7XG5cbiAgICAgICAgICAgIHJldHVybiBjYltQUk9NSVNFX1NZTUJPTF1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gd2hpY2ggaXMgYSBjb21wb3NpdGlvbiBvZiB0aGUgcGFzc2VkIGFzeW5jaHJvbm91c1xuICAgICAqIGZ1bmN0aW9ucy4gRWFjaCBmdW5jdGlvbiBjb25zdW1lcyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiB0aGF0XG4gICAgICogZm9sbG93cy4gQ29tcG9zaW5nIGZ1bmN0aW9ucyBgZigpYCwgYGcoKWAsIGFuZCBgaCgpYCB3b3VsZCBwcm9kdWNlIHRoZSByZXN1bHRcbiAgICAgKiBvZiBgZihnKGgoKSkpYCwgb25seSB0aGlzIHZlcnNpb24gdXNlcyBjYWxsYmFja3MgdG8gb2J0YWluIHRoZSByZXR1cm4gdmFsdWVzLlxuICAgICAqXG4gICAgICogSWYgdGhlIGxhc3QgYXJndW1lbnQgdG8gdGhlIGNvbXBvc2VkIGZ1bmN0aW9uIGlzIG5vdCBhIGZ1bmN0aW9uLCBhIHByb21pc2VcbiAgICAgKiBpcyByZXR1cm5lZCB3aGVuIHlvdSBjYWxsIGl0LlxuICAgICAqXG4gICAgICogRWFjaCBmdW5jdGlvbiBpcyBleGVjdXRlZCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiB0aGUgY29tcG9zZWQgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAbmFtZSBjb21wb3NlXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGNhdGVnb3J5IENvbnRyb2wgRmxvd1xuICAgICAqIEBwYXJhbSB7Li4uQXN5bmNGdW5jdGlvbn0gZnVuY3Rpb25zIC0gdGhlIGFzeW5jaHJvbm91cyBmdW5jdGlvbnMgdG8gY29tcG9zZVxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gYW4gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRoYXQgaXMgdGhlIGNvbXBvc2VkXG4gICAgICogYXN5bmNocm9ub3VzIGBmdW5jdGlvbnNgXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIGFkZDEobiwgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCBuICsgMSk7XG4gICAgICogICAgIH0sIDEwKTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBtdWwzKG4sIGNhbGxiYWNrKSB7XG4gICAgICogICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAqICAgICAgICAgY2FsbGJhY2sobnVsbCwgbiAqIDMpO1xuICAgICAqICAgICB9LCAxMCk7XG4gICAgICogfVxuICAgICAqXG4gICAgICogdmFyIGFkZDFtdWwzID0gYXN5bmMuY29tcG9zZShtdWwzLCBhZGQxKTtcbiAgICAgKiBhZGQxbXVsMyg0LCBmdW5jdGlvbiAoZXJyLCByZXN1bHQpIHtcbiAgICAgKiAgICAgLy8gcmVzdWx0IG5vdyBlcXVhbHMgMTVcbiAgICAgKiB9KTtcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb21wb3NlKC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIHNlcSguLi5hcmdzLnJldmVyc2UoKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIHNhbWUgYXMgW2BtYXBgXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMubWFwfSBidXQgcnVucyBhIG1heGltdW0gb2YgYGxpbWl0YCBhc3luYyBvcGVyYXRpb25zIGF0IGEgdGltZS5cbiAgICAgKlxuICAgICAqIEBuYW1lIG1hcExpbWl0XG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMubWFwXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMubWFwfVxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbWl0IC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGFzeW5jIG9wZXJhdGlvbnMgYXQgYSB0aW1lLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBbiBhc3luYyBmdW5jdGlvbiB0byBhcHBseSB0byBlYWNoIGl0ZW0gaW5cbiAgICAgKiBgY29sbGAuXG4gICAgICogVGhlIGl0ZXJhdGVlIHNob3VsZCBjb21wbGV0ZSB3aXRoIHRoZSB0cmFuc2Zvcm1lZCBpdGVtLlxuICAgICAqIEludm9rZWQgd2l0aCAoaXRlbSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCB3aGVuIGFsbCBgaXRlcmF0ZWVgXG4gICAgICogZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQsIG9yIGFuIGVycm9yIG9jY3Vycy4gUmVzdWx0cyBpcyBhbiBhcnJheSBvZiB0aGVcbiAgICAgKiB0cmFuc2Zvcm1lZCBpdGVtcyBmcm9tIHRoZSBgY29sbGAuIEludm9rZWQgd2l0aCAoZXJyLCByZXN1bHRzKS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBpcyBwYXNzZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtYXBMaW1pdCAoY29sbCwgbGltaXQsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX2FzeW5jTWFwKGVhY2hPZkxpbWl0JDIobGltaXQpLCBjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuICAgIHZhciBtYXBMaW1pdCQxID0gYXdhaXRpZnkobWFwTGltaXQsIDQpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNhbWUgYXMgW2Bjb25jYXRgXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuY29uY2F0fSBidXQgcnVucyBhIG1heGltdW0gb2YgYGxpbWl0YCBhc3luYyBvcGVyYXRpb25zIGF0IGEgdGltZS5cbiAgICAgKlxuICAgICAqIEBuYW1lIGNvbmNhdExpbWl0XG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMuY29uY2F0XXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuY29uY2F0fVxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQGFsaWFzIGZsYXRNYXBMaW1pdFxuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW1pdCAtIFRoZSBtYXhpbXVtIG51bWJlciBvZiBhc3luYyBvcGVyYXRpb25zIGF0IGEgdGltZS5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQSBmdW5jdGlvbiB0byBhcHBseSB0byBlYWNoIGl0ZW0gaW4gYGNvbGxgLFxuICAgICAqIHdoaWNoIHNob3VsZCB1c2UgYW4gYXJyYXkgYXMgaXRzIHJlc3VsdC4gSW52b2tlZCB3aXRoIChpdGVtLCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIGFmdGVyIGFsbCB0aGVcbiAgICAgKiBgaXRlcmF0ZWVgIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLCBvciBhbiBlcnJvciBvY2N1cnMuIFJlc3VsdHMgaXMgYW4gYXJyYXlcbiAgICAgKiBjb250YWluaW5nIHRoZSBjb25jYXRlbmF0ZWQgcmVzdWx0cyBvZiB0aGUgYGl0ZXJhdGVlYCBmdW5jdGlvbi4gSW52b2tlZCB3aXRoXG4gICAgICogKGVyciwgcmVzdWx0cykuXG4gICAgICogQHJldHVybnMgQSBQcm9taXNlLCBpZiBubyBjYWxsYmFjayBpcyBwYXNzZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb25jYXRMaW1pdChjb2xsLCBsaW1pdCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBfaXRlcmF0ZWUgPSB3cmFwQXN5bmMoaXRlcmF0ZWUpO1xuICAgICAgICByZXR1cm4gbWFwTGltaXQkMShjb2xsLCBsaW1pdCwgKHZhbCwgaXRlckNiKSA9PiB7XG4gICAgICAgICAgICBfaXRlcmF0ZWUodmFsLCAoZXJyLCAuLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikgcmV0dXJuIGl0ZXJDYihlcnIpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVyQ2IoZXJyLCBhcmdzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCAoZXJyLCBtYXBSZXN1bHRzKSA9PiB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1hcFJlc3VsdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAobWFwUmVzdWx0c1tpXSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KC4uLm1hcFJlc3VsdHNbaV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVyciwgcmVzdWx0KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHZhciBjb25jYXRMaW1pdCQxID0gYXdhaXRpZnkoY29uY2F0TGltaXQsIDQpO1xuXG4gICAgLyoqXG4gICAgICogQXBwbGllcyBgaXRlcmF0ZWVgIHRvIGVhY2ggaXRlbSBpbiBgY29sbGAsIGNvbmNhdGVuYXRpbmcgdGhlIHJlc3VsdHMuIFJldHVybnNcbiAgICAgKiB0aGUgY29uY2F0ZW5hdGVkIGxpc3QuIFRoZSBgaXRlcmF0ZWVgcyBhcmUgY2FsbGVkIGluIHBhcmFsbGVsLCBhbmQgdGhlXG4gICAgICogcmVzdWx0cyBhcmUgY29uY2F0ZW5hdGVkIGFzIHRoZXkgcmV0dXJuLiBUaGUgcmVzdWx0cyBhcnJheSB3aWxsIGJlIHJldHVybmVkIGluXG4gICAgICogdGhlIG9yaWdpbmFsIG9yZGVyIG9mIGBjb2xsYCBwYXNzZWQgdG8gdGhlIGBpdGVyYXRlZWAgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAbmFtZSBjb25jYXRcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBhbGlhcyBmbGF0TWFwXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEEgZnVuY3Rpb24gdG8gYXBwbHkgdG8gZWFjaCBpdGVtIGluIGBjb2xsYCxcbiAgICAgKiB3aGljaCBzaG91bGQgdXNlIGFuIGFycmF5IGFzIGl0cyByZXN1bHQuIEludm9rZWQgd2l0aCAoaXRlbSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCBhZnRlciBhbGwgdGhlXG4gICAgICogYGl0ZXJhdGVlYCBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZCwgb3IgYW4gZXJyb3Igb2NjdXJzLiBSZXN1bHRzIGlzIGFuIGFycmF5XG4gICAgICogY29udGFpbmluZyB0aGUgY29uY2F0ZW5hdGVkIHJlc3VsdHMgb2YgdGhlIGBpdGVyYXRlZWAgZnVuY3Rpb24uIEludm9rZWQgd2l0aFxuICAgICAqIChlcnIsIHJlc3VsdHMpLlxuICAgICAqIEByZXR1cm5zIEEgUHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgaXMgcGFzc2VkXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vIGRpcjEgaXMgYSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyBmaWxlMS50eHQsIGZpbGUyLnR4dFxuICAgICAqIC8vIGRpcjIgaXMgYSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyBmaWxlMy50eHQsIGZpbGU0LnR4dFxuICAgICAqIC8vIGRpcjMgaXMgYSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyBmaWxlNS50eHRcbiAgICAgKiAvLyBkaXI0IGRvZXMgbm90IGV4aXN0XG4gICAgICpcbiAgICAgKiBsZXQgZGlyZWN0b3J5TGlzdCA9IFsnZGlyMScsJ2RpcjInLCdkaXIzJ107XG4gICAgICogbGV0IHdpdGhNaXNzaW5nRGlyZWN0b3J5TGlzdCA9IFsnZGlyMScsJ2RpcjInLCdkaXIzJywgJ2RpcjQnXTtcbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIGNhbGxiYWNrc1xuICAgICAqIGFzeW5jLmNvbmNhdChkaXJlY3RvcnlMaXN0LCBmcy5yZWFkZGlyLCBmdW5jdGlvbihlcnIsIHJlc3VsdHMpIHtcbiAgICAgKiAgICBpZiAoZXJyKSB7XG4gICAgICogICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgfSBlbHNlIHtcbiAgICAgKiAgICAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgICAgIC8vIFsgJ2ZpbGUxLnR4dCcsICdmaWxlMi50eHQnLCAnZmlsZTMudHh0JywgJ2ZpbGU0LnR4dCcsIGZpbGU1LnR4dCBdXG4gICAgICogICAgfVxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gRXJyb3IgSGFuZGxpbmdcbiAgICAgKiBhc3luYy5jb25jYXQod2l0aE1pc3NpbmdEaXJlY3RvcnlMaXN0LCBmcy5yZWFkZGlyLCBmdW5jdGlvbihlcnIsIHJlc3VsdHMpIHtcbiAgICAgKiAgICBpZiAoZXJyKSB7XG4gICAgICogICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgICAgIC8vIFsgRXJyb3I6IEVOT0VOVDogbm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSBdXG4gICAgICogICAgICAgIC8vIHNpbmNlIGRpcjQgZG9lcyBub3QgZXhpc3RcbiAgICAgKiAgICB9IGVsc2Uge1xuICAgICAqICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiAgICB9XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBQcm9taXNlc1xuICAgICAqIGFzeW5jLmNvbmNhdChkaXJlY3RvcnlMaXN0LCBmcy5yZWFkZGlyKVxuICAgICAqIC50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiAgICAgLy8gWyAnZmlsZTEudHh0JywgJ2ZpbGUyLnR4dCcsICdmaWxlMy50eHQnLCAnZmlsZTQudHh0JywgZmlsZTUudHh0IF1cbiAgICAgKiB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAqICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIEVycm9yIEhhbmRsaW5nXG4gICAgICogYXN5bmMuY29uY2F0KHdpdGhNaXNzaW5nRGlyZWN0b3J5TGlzdCwgZnMucmVhZGRpcilcbiAgICAgKiAudGhlbihyZXN1bHRzID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgLy8gWyBFcnJvcjogRU5PRU5UOiBubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IF1cbiAgICAgKiAgICAgLy8gc2luY2UgZGlyNCBkb2VzIG5vdCBleGlzdFxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgYXN5bmMvYXdhaXRcbiAgICAgKiBhc3luYyAoKSA9PiB7XG4gICAgICogICAgIHRyeSB7XG4gICAgICogICAgICAgICBsZXQgcmVzdWx0cyA9IGF3YWl0IGFzeW5jLmNvbmNhdChkaXJlY3RvcnlMaXN0LCBmcy5yZWFkZGlyKTtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgICAgICAgLy8gWyAnZmlsZTEudHh0JywgJ2ZpbGUyLnR4dCcsICdmaWxlMy50eHQnLCAnZmlsZTQudHh0JywgZmlsZTUudHh0IF1cbiAgICAgKiAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICogLy8gRXJyb3IgSGFuZGxpbmdcbiAgICAgKiBhc3luYyAoKSA9PiB7XG4gICAgICogICAgIHRyeSB7XG4gICAgICogICAgICAgICBsZXQgcmVzdWx0cyA9IGF3YWl0IGFzeW5jLmNvbmNhdCh3aXRoTWlzc2luZ0RpcmVjdG9yeUxpc3QsIGZzLnJlYWRkaXIpO1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgICAgIC8vIFsgRXJyb3I6IEVOT0VOVDogbm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSBdXG4gICAgICogICAgICAgICAvLyBzaW5jZSBkaXI0IGRvZXMgbm90IGV4aXN0XG4gICAgICogICAgIH1cbiAgICAgKiB9XG4gICAgICpcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb25jYXQoY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBjb25jYXRMaW1pdCQxKGNvbGwsIEluZmluaXR5LCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuICAgIHZhciBjb25jYXQkMSA9IGF3YWl0aWZ5KGNvbmNhdCwgMyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyBbYGNvbmNhdGBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5jb25jYXR9IGJ1dCBydW5zIG9ubHkgYSBzaW5nbGUgYXN5bmMgb3BlcmF0aW9uIGF0IGEgdGltZS5cbiAgICAgKlxuICAgICAqIEBuYW1lIGNvbmNhdFNlcmllc1xuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLmNvbmNhdF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmNvbmNhdH1cbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBhbGlhcyBmbGF0TWFwU2VyaWVzXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEEgZnVuY3Rpb24gdG8gYXBwbHkgdG8gZWFjaCBpdGVtIGluIGBjb2xsYC5cbiAgICAgKiBUaGUgaXRlcmF0ZWUgc2hvdWxkIGNvbXBsZXRlIHdpdGggYW4gYXJyYXkgYW4gYXJyYXkgb2YgcmVzdWx0cy5cbiAgICAgKiBJbnZva2VkIHdpdGggKGl0ZW0sIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgYWZ0ZXIgYWxsIHRoZVxuICAgICAqIGBpdGVyYXRlZWAgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQsIG9yIGFuIGVycm9yIG9jY3Vycy4gUmVzdWx0cyBpcyBhbiBhcnJheVxuICAgICAqIGNvbnRhaW5pbmcgdGhlIGNvbmNhdGVuYXRlZCByZXN1bHRzIG9mIHRoZSBgaXRlcmF0ZWVgIGZ1bmN0aW9uLiBJbnZva2VkIHdpdGhcbiAgICAgKiAoZXJyLCByZXN1bHRzKS5cbiAgICAgKiBAcmV0dXJucyBBIFByb21pc2UsIGlmIG5vIGNhbGxiYWNrIGlzIHBhc3NlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbmNhdFNlcmllcyhjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGNvbmNhdExpbWl0JDEoY29sbCwgMSwgaXRlcmF0ZWUsIGNhbGxiYWNrKVxuICAgIH1cbiAgICB2YXIgY29uY2F0U2VyaWVzJDEgPSBhd2FpdGlmeShjb25jYXRTZXJpZXMsIDMpO1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2hlbiBjYWxsZWQsIGNhbGxzLWJhY2sgd2l0aCB0aGUgdmFsdWVzIHByb3ZpZGVkLlxuICAgICAqIFVzZWZ1bCBhcyB0aGUgZmlyc3QgZnVuY3Rpb24gaW4gYSBbYHdhdGVyZmFsbGBde0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy53YXRlcmZhbGx9LCBvciBmb3IgcGx1Z2dpbmcgdmFsdWVzIGluIHRvXG4gICAgICogW2BhdXRvYF17QGxpbmsgbW9kdWxlOkNvbnRyb2xGbG93LmF1dG99LlxuICAgICAqXG4gICAgICogQG5hbWUgY29uc3RhbnRcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpVdGlsc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7Li4uKn0gYXJndW1lbnRzLi4uIC0gQW55IG51bWJlciBvZiBhcmd1bWVudHMgdG8gYXV0b21hdGljYWxseSBpbnZva2VcbiAgICAgKiBjYWxsYmFjayB3aXRoLlxuICAgICAqIEByZXR1cm5zIHtBc3luY0Z1bmN0aW9ufSBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3aGVuIGludm9rZWQsIGF1dG9tYXRpY2FsbHlcbiAgICAgKiBpbnZva2VzIHRoZSBjYWxsYmFjayB3aXRoIHRoZSBwcmV2aW91cyBnaXZlbiBhcmd1bWVudHMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGFzeW5jLndhdGVyZmFsbChbXG4gICAgICogICAgIGFzeW5jLmNvbnN0YW50KDQyKSxcbiAgICAgKiAgICAgZnVuY3Rpb24gKHZhbHVlLCBuZXh0KSB7XG4gICAgICogICAgICAgICAvLyB2YWx1ZSA9PT0gNDJcbiAgICAgKiAgICAgfSxcbiAgICAgKiAgICAgLy8uLi5cbiAgICAgKiBdLCBjYWxsYmFjayk7XG4gICAgICpcbiAgICAgKiBhc3luYy53YXRlcmZhbGwoW1xuICAgICAqICAgICBhc3luYy5jb25zdGFudChmaWxlbmFtZSwgXCJ1dGY4XCIpLFxuICAgICAqICAgICBmcy5yZWFkRmlsZSxcbiAgICAgKiAgICAgZnVuY3Rpb24gKGZpbGVEYXRhLCBuZXh0KSB7XG4gICAgICogICAgICAgICAvLy4uLlxuICAgICAqICAgICB9XG4gICAgICogICAgIC8vLi4uXG4gICAgICogXSwgY2FsbGJhY2spO1xuICAgICAqXG4gICAgICogYXN5bmMuYXV0byh7XG4gICAgICogICAgIGhvc3RuYW1lOiBhc3luYy5jb25zdGFudChcImh0dHBzOi8vc2VydmVyLm5ldC9cIiksXG4gICAgICogICAgIHBvcnQ6IGZpbmRGcmVlUG9ydCxcbiAgICAgKiAgICAgbGF1bmNoU2VydmVyOiBbXCJob3N0bmFtZVwiLCBcInBvcnRcIiwgZnVuY3Rpb24gKG9wdGlvbnMsIGNiKSB7XG4gICAgICogICAgICAgICBzdGFydFNlcnZlcihvcHRpb25zLCBjYik7XG4gICAgICogICAgIH1dLFxuICAgICAqICAgICAvLy4uLlxuICAgICAqIH0sIGNhbGxiYWNrKTtcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb25zdGFudCQxKC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICguLi5pZ25vcmVkQXJncy8qLCBjYWxsYmFjayovKSB7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBpZ25vcmVkQXJncy5wb3AoKTtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsLCAuLi5hcmdzKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfY3JlYXRlVGVzdGVyKGNoZWNrLCBnZXRSZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIChlYWNoZm4sIGFyciwgX2l0ZXJhdGVlLCBjYikgPT4ge1xuICAgICAgICAgICAgdmFyIHRlc3RQYXNzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHZhciB0ZXN0UmVzdWx0O1xuICAgICAgICAgICAgY29uc3QgaXRlcmF0ZWUgPSB3cmFwQXN5bmMoX2l0ZXJhdGVlKTtcbiAgICAgICAgICAgIGVhY2hmbihhcnIsICh2YWx1ZSwgXywgY2FsbGJhY2spID0+IHtcbiAgICAgICAgICAgICAgICBpdGVyYXRlZSh2YWx1ZSwgKGVyciwgcmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIgfHwgZXJyID09PSBmYWxzZSkgcmV0dXJuIGNhbGxiYWNrKGVycik7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoZWNrKHJlc3VsdCkgJiYgIXRlc3RSZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RQYXNzZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGVzdFJlc3VsdCA9IGdldFJlc3VsdCh0cnVlLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCwgYnJlYWtMb29wKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgZXJyID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKTtcbiAgICAgICAgICAgICAgICBjYihudWxsLCB0ZXN0UGFzc2VkID8gdGVzdFJlc3VsdCA6IGdldFJlc3VsdChmYWxzZSkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZmlyc3QgdmFsdWUgaW4gYGNvbGxgIHRoYXQgcGFzc2VzIGFuIGFzeW5jIHRydXRoIHRlc3QuIFRoZVxuICAgICAqIGBpdGVyYXRlZWAgaXMgYXBwbGllZCBpbiBwYXJhbGxlbCwgbWVhbmluZyB0aGUgZmlyc3QgaXRlcmF0ZWUgdG8gcmV0dXJuXG4gICAgICogYHRydWVgIHdpbGwgZmlyZSB0aGUgZGV0ZWN0IGBjYWxsYmFja2Agd2l0aCB0aGF0IHJlc3VsdC4gVGhhdCBtZWFucyB0aGVcbiAgICAgKiByZXN1bHQgbWlnaHQgbm90IGJlIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBvcmlnaW5hbCBgY29sbGAgKGluIHRlcm1zIG9mIG9yZGVyKVxuICAgICAqIHRoYXQgcGFzc2VzIHRoZSB0ZXN0LlxuXG4gICAgICogSWYgb3JkZXIgd2l0aGluIHRoZSBvcmlnaW5hbCBgY29sbGAgaXMgaW1wb3J0YW50LCB0aGVuIGxvb2sgYXRcbiAgICAgKiBbYGRldGVjdFNlcmllc2Bde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5kZXRlY3RTZXJpZXN9LlxuICAgICAqXG4gICAgICogQG5hbWUgZGV0ZWN0XG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGFsaWFzIGZpbmRcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvbnNcbiAgICAgKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfEFzeW5jSXRlcmFibGV8T2JqZWN0fSBjb2xsIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQSB0cnV0aCB0ZXN0IHRvIGFwcGx5IHRvIGVhY2ggaXRlbSBpbiBgY29sbGAuXG4gICAgICogVGhlIGl0ZXJhdGVlIG11c3QgY29tcGxldGUgd2l0aCBhIGJvb2xlYW4gdmFsdWUgYXMgaXRzIHJlc3VsdC5cbiAgICAgKiBJbnZva2VkIHdpdGggKGl0ZW0sIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgYXMgc29vbiBhcyBhbnlcbiAgICAgKiBpdGVyYXRlZSByZXR1cm5zIGB0cnVlYCwgb3IgYWZ0ZXIgYWxsIHRoZSBgaXRlcmF0ZWVgIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLlxuICAgICAqIFJlc3VsdCB3aWxsIGJlIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBhcnJheSB0aGF0IHBhc3NlcyB0aGUgdHJ1dGggdGVzdFxuICAgICAqIChpdGVyYXRlZSkgb3IgdGhlIHZhbHVlIGB1bmRlZmluZWRgIGlmIG5vbmUgcGFzc2VkLiBJbnZva2VkIHdpdGhcbiAgICAgKiAoZXJyLCByZXN1bHQpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIGEgY2FsbGJhY2sgaXMgb21pdHRlZFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBkaXIxIGlzIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgZmlsZTEudHh0LCBmaWxlMi50eHRcbiAgICAgKiAvLyBkaXIyIGlzIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgZmlsZTMudHh0LCBmaWxlNC50eHRcbiAgICAgKiAvLyBkaXIzIGlzIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgZmlsZTUudHh0XG4gICAgICpcbiAgICAgKiAvLyBhc3luY2hyb25vdXMgZnVuY3Rpb24gdGhhdCBjaGVja3MgaWYgYSBmaWxlIGV4aXN0c1xuICAgICAqIGZ1bmN0aW9uIGZpbGVFeGlzdHMoZmlsZSwgY2FsbGJhY2spIHtcbiAgICAgKiAgICBmcy5hY2Nlc3MoZmlsZSwgZnMuY29uc3RhbnRzLkZfT0ssIChlcnIpID0+IHtcbiAgICAgKiAgICAgICAgY2FsbGJhY2sobnVsbCwgIWVycik7XG4gICAgICogICAgfSk7XG4gICAgICogfVxuICAgICAqXG4gICAgICogYXN5bmMuZGV0ZWN0KFsnZmlsZTMudHh0JywnZmlsZTIudHh0JywnZGlyMS9maWxlMS50eHQnXSwgZmlsZUV4aXN0cyxcbiAgICAgKiAgICBmdW5jdGlvbihlcnIsIHJlc3VsdCkge1xuICAgICAqICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAgICAvLyBkaXIxL2ZpbGUxLnR4dFxuICAgICAqICAgICAgICAvLyByZXN1bHQgbm93IGVxdWFscyB0aGUgZmlyc3QgZmlsZSBpbiB0aGUgbGlzdCB0aGF0IGV4aXN0c1xuICAgICAqICAgIH1cbiAgICAgKik7XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBQcm9taXNlc1xuICAgICAqIGFzeW5jLmRldGVjdChbJ2ZpbGUzLnR4dCcsJ2ZpbGUyLnR4dCcsJ2RpcjEvZmlsZTEudHh0J10sIGZpbGVFeGlzdHMpXG4gICAgICogLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgLy8gZGlyMS9maWxlMS50eHRcbiAgICAgKiAgICAgLy8gcmVzdWx0IG5vdyBlcXVhbHMgdGhlIGZpcnN0IGZpbGUgaW4gdGhlIGxpc3QgdGhhdCBleGlzdHNcbiAgICAgKiB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgYXN5bmMvYXdhaXRcbiAgICAgKiBhc3luYyAoKSA9PiB7XG4gICAgICogICAgIHRyeSB7XG4gICAgICogICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgYXN5bmMuZGV0ZWN0KFsnZmlsZTMudHh0JywnZmlsZTIudHh0JywnZGlyMS9maWxlMS50eHQnXSwgZmlsZUV4aXN0cyk7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAgICAgLy8gZGlyMS9maWxlMS50eHRcbiAgICAgKiAgICAgICAgIC8vIHJlc3VsdCBub3cgZXF1YWxzIHRoZSBmaWxlIGluIHRoZSBsaXN0IHRoYXQgZXhpc3RzXG4gICAgICogICAgIH1cbiAgICAgKiAgICAgY2F0Y2ggKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGRldGVjdChjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9jcmVhdGVUZXN0ZXIoYm9vbCA9PiBib29sLCAocmVzLCBpdGVtKSA9PiBpdGVtKShlYWNoT2YkMSwgY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKVxuICAgIH1cbiAgICB2YXIgZGV0ZWN0JDEgPSBhd2FpdGlmeShkZXRlY3QsIDMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNhbWUgYXMgW2BkZXRlY3RgXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZGV0ZWN0fSBidXQgcnVucyBhIG1heGltdW0gb2YgYGxpbWl0YCBhc3luYyBvcGVyYXRpb25zIGF0IGFcbiAgICAgKiB0aW1lLlxuICAgICAqXG4gICAgICogQG5hbWUgZGV0ZWN0TGltaXRcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5kZXRlY3Rde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5kZXRlY3R9XG4gICAgICogQGFsaWFzIGZpbmRMaW1pdFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uc1xuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW1pdCAtIFRoZSBtYXhpbXVtIG51bWJlciBvZiBhc3luYyBvcGVyYXRpb25zIGF0IGEgdGltZS5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQSB0cnV0aCB0ZXN0IHRvIGFwcGx5IHRvIGVhY2ggaXRlbSBpbiBgY29sbGAuXG4gICAgICogVGhlIGl0ZXJhdGVlIG11c3QgY29tcGxldGUgd2l0aCBhIGJvb2xlYW4gdmFsdWUgYXMgaXRzIHJlc3VsdC5cbiAgICAgKiBJbnZva2VkIHdpdGggKGl0ZW0sIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgYXMgc29vbiBhcyBhbnlcbiAgICAgKiBpdGVyYXRlZSByZXR1cm5zIGB0cnVlYCwgb3IgYWZ0ZXIgYWxsIHRoZSBgaXRlcmF0ZWVgIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLlxuICAgICAqIFJlc3VsdCB3aWxsIGJlIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBhcnJheSB0aGF0IHBhc3NlcyB0aGUgdHJ1dGggdGVzdFxuICAgICAqIChpdGVyYXRlZSkgb3IgdGhlIHZhbHVlIGB1bmRlZmluZWRgIGlmIG5vbmUgcGFzc2VkLiBJbnZva2VkIHdpdGhcbiAgICAgKiAoZXJyLCByZXN1bHQpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIGEgY2FsbGJhY2sgaXMgb21pdHRlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGRldGVjdExpbWl0KGNvbGwsIGxpbWl0LCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9jcmVhdGVUZXN0ZXIoYm9vbCA9PiBib29sLCAocmVzLCBpdGVtKSA9PiBpdGVtKShlYWNoT2ZMaW1pdCQyKGxpbWl0KSwgY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKVxuICAgIH1cbiAgICB2YXIgZGV0ZWN0TGltaXQkMSA9IGF3YWl0aWZ5KGRldGVjdExpbWl0LCA0KTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzYW1lIGFzIFtgZGV0ZWN0YF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmRldGVjdH0gYnV0IHJ1bnMgb25seSBhIHNpbmdsZSBhc3luYyBvcGVyYXRpb24gYXQgYSB0aW1lLlxuICAgICAqXG4gICAgICogQG5hbWUgZGV0ZWN0U2VyaWVzXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMuZGV0ZWN0XXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZGV0ZWN0fVxuICAgICAqIEBhbGlhcyBmaW5kU2VyaWVzXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25zXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEEgdHJ1dGggdGVzdCB0byBhcHBseSB0byBlYWNoIGl0ZW0gaW4gYGNvbGxgLlxuICAgICAqIFRoZSBpdGVyYXRlZSBtdXN0IGNvbXBsZXRlIHdpdGggYSBib29sZWFuIHZhbHVlIGFzIGl0cyByZXN1bHQuXG4gICAgICogSW52b2tlZCB3aXRoIChpdGVtLCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIGFzIHNvb24gYXMgYW55XG4gICAgICogaXRlcmF0ZWUgcmV0dXJucyBgdHJ1ZWAsIG9yIGFmdGVyIGFsbCB0aGUgYGl0ZXJhdGVlYCBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZC5cbiAgICAgKiBSZXN1bHQgd2lsbCBiZSB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgYXJyYXkgdGhhdCBwYXNzZXMgdGhlIHRydXRoIHRlc3RcbiAgICAgKiAoaXRlcmF0ZWUpIG9yIHRoZSB2YWx1ZSBgdW5kZWZpbmVkYCBpZiBub25lIHBhc3NlZC4gSW52b2tlZCB3aXRoXG4gICAgICogKGVyciwgcmVzdWx0KS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBhIGNhbGxiYWNrIGlzIG9taXR0ZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBkZXRlY3RTZXJpZXMoY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBfY3JlYXRlVGVzdGVyKGJvb2wgPT4gYm9vbCwgKHJlcywgaXRlbSkgPT4gaXRlbSkoZWFjaE9mTGltaXQkMigxKSwgY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKVxuICAgIH1cblxuICAgIHZhciBkZXRlY3RTZXJpZXMkMSA9IGF3YWl0aWZ5KGRldGVjdFNlcmllcywgMyk7XG5cbiAgICBmdW5jdGlvbiBjb25zb2xlRnVuYyhuYW1lKSB7XG4gICAgICAgIHJldHVybiAoZm4sIC4uLmFyZ3MpID0+IHdyYXBBc3luYyhmbikoLi4uYXJncywgKGVyciwgLi4ucmVzdWx0QXJncykgPT4ge1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICAgIGlmICh0eXBlb2YgY29uc29sZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnNvbGUuZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29uc29sZVtuYW1lXSkgeyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRBcmdzLmZvckVhY2goeCA9PiBjb25zb2xlW25hbWVdKHgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTG9ncyB0aGUgcmVzdWx0IG9mIGFuIFtgYXN5bmNgIGZ1bmN0aW9uXXtAbGluayBBc3luY0Z1bmN0aW9ufSB0byB0aGVcbiAgICAgKiBgY29uc29sZWAgdXNpbmcgYGNvbnNvbGUuZGlyYCB0byBkaXNwbGF5IHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSByZXN1bHRpbmcgb2JqZWN0LlxuICAgICAqIE9ubHkgd29ya3MgaW4gTm9kZS5qcyBvciBpbiBicm93c2VycyB0aGF0IHN1cHBvcnQgYGNvbnNvbGUuZGlyYCBhbmRcbiAgICAgKiBgY29uc29sZS5lcnJvcmAgKHN1Y2ggYXMgRkYgYW5kIENocm9tZSkuXG4gICAgICogSWYgbXVsdGlwbGUgYXJndW1lbnRzIGFyZSByZXR1cm5lZCBmcm9tIHRoZSBhc3luYyBmdW5jdGlvbixcbiAgICAgKiBgY29uc29sZS5kaXJgIGlzIGNhbGxlZCBvbiBlYWNoIGFyZ3VtZW50IGluIG9yZGVyLlxuICAgICAqXG4gICAgICogQG5hbWUgZGlyXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6VXRpbHNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGZ1bmN0aW9uIC0gVGhlIGZ1bmN0aW9uIHlvdSB3YW50IHRvIGV2ZW50dWFsbHkgYXBwbHlcbiAgICAgKiBhbGwgYXJndW1lbnRzIHRvLlxuICAgICAqIEBwYXJhbSB7Li4uKn0gYXJndW1lbnRzLi4uIC0gQW55IG51bWJlciBvZiBhcmd1bWVudHMgdG8gYXBwbHkgdG8gdGhlIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBpbiBhIG1vZHVsZVxuICAgICAqIHZhciBoZWxsbyA9IGZ1bmN0aW9uKG5hbWUsIGNhbGxiYWNrKSB7XG4gICAgICogICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCB7aGVsbG86IG5hbWV9KTtcbiAgICAgKiAgICAgfSwgMTAwMCk7XG4gICAgICogfTtcbiAgICAgKlxuICAgICAqIC8vIGluIHRoZSBub2RlIHJlcGxcbiAgICAgKiBub2RlPiBhc3luYy5kaXIoaGVsbG8sICd3b3JsZCcpO1xuICAgICAqIHtoZWxsbzogJ3dvcmxkJ31cbiAgICAgKi9cbiAgICB2YXIgZGlyID0gY29uc29sZUZ1bmMoJ2RpcicpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc3QtY2hlY2sgdmVyc2lvbiBvZiBbYHdoaWxzdGBde0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy53aGlsc3R9LiBUbyByZWZsZWN0IHRoZSBkaWZmZXJlbmNlIGluXG4gICAgICogdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMsIHRoZSBhcmd1bWVudHMgYHRlc3RgIGFuZCBgaXRlcmF0ZWVgIGFyZSBzd2l0Y2hlZC5cbiAgICAgKlxuICAgICAqIGBkb1doaWxzdGAgaXMgdG8gYHdoaWxzdGAgYXMgYGRvIHdoaWxlYCBpcyB0byBgd2hpbGVgIGluIHBsYWluIEphdmFTY3JpcHQuXG4gICAgICpcbiAgICAgKiBAbmFtZSBkb1doaWxzdFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbnRyb2xGbG93XG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLndoaWxzdF17QGxpbmsgbW9kdWxlOkNvbnRyb2xGbG93LndoaWxzdH1cbiAgICAgKiBAY2F0ZWdvcnkgQ29udHJvbCBGbG93XG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEEgZnVuY3Rpb24gd2hpY2ggaXMgY2FsbGVkIGVhY2ggdGltZSBgdGVzdGBcbiAgICAgKiBwYXNzZXMuIEludm9rZWQgd2l0aCAoY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gdGVzdCAtIGFzeW5jaHJvbm91cyB0cnV0aCB0ZXN0IHRvIHBlcmZvcm0gYWZ0ZXIgZWFjaFxuICAgICAqIGV4ZWN1dGlvbiBvZiBgaXRlcmF0ZWVgLiBJbnZva2VkIHdpdGggKC4uLmFyZ3MsIGNhbGxiYWNrKSwgd2hlcmUgYC4uLmFyZ3NgIGFyZSB0aGVcbiAgICAgKiBub24tZXJyb3IgYXJncyBmcm9tIHRoZSBwcmV2aW91cyBjYWxsYmFjayBvZiBgaXRlcmF0ZWVgLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCBhZnRlciB0aGUgdGVzdFxuICAgICAqIGZ1bmN0aW9uIGhhcyBmYWlsZWQgYW5kIHJlcGVhdGVkIGV4ZWN1dGlvbiBvZiBgaXRlcmF0ZWVgIGhhcyBzdG9wcGVkLlxuICAgICAqIGBjYWxsYmFja2Agd2lsbCBiZSBwYXNzZWQgYW4gZXJyb3IgYW5kIGFueSBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBmaW5hbFxuICAgICAqIGBpdGVyYXRlZWAncyBjYWxsYmFjay4gSW52b2tlZCB3aXRoIChlcnIsIFtyZXN1bHRzXSk7XG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgaXMgcGFzc2VkXG4gICAgICovXG4gICAgZnVuY3Rpb24gZG9XaGlsc3QoaXRlcmF0ZWUsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gb25seU9uY2UoY2FsbGJhY2spO1xuICAgICAgICB2YXIgX2ZuID0gd3JhcEFzeW5jKGl0ZXJhdGVlKTtcbiAgICAgICAgdmFyIF90ZXN0ID0gd3JhcEFzeW5jKHRlc3QpO1xuICAgICAgICB2YXIgcmVzdWx0cztcblxuICAgICAgICBmdW5jdGlvbiBuZXh0KGVyciwgLi4uYXJncykge1xuICAgICAgICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICBpZiAoZXJyID09PSBmYWxzZSkgcmV0dXJuO1xuICAgICAgICAgICAgcmVzdWx0cyA9IGFyZ3M7XG4gICAgICAgICAgICBfdGVzdCguLi5hcmdzLCBjaGVjayk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBjaGVjayhlcnIsIHRydXRoKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIGlmIChlcnIgPT09IGZhbHNlKSByZXR1cm47XG4gICAgICAgICAgICBpZiAoIXRydXRoKSByZXR1cm4gY2FsbGJhY2sobnVsbCwgLi4ucmVzdWx0cyk7XG4gICAgICAgICAgICBfZm4obmV4dCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2hlY2sobnVsbCwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgdmFyIGRvV2hpbHN0JDEgPSBhd2FpdGlmeShkb1doaWxzdCwgMyk7XG5cbiAgICAvKipcbiAgICAgKiBMaWtlIFsnZG9XaGlsc3QnXXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cuZG9XaGlsc3R9LCBleGNlcHQgdGhlIGB0ZXN0YCBpcyBpbnZlcnRlZC4gTm90ZSB0aGVcbiAgICAgKiBhcmd1bWVudCBvcmRlcmluZyBkaWZmZXJzIGZyb20gYHVudGlsYC5cbiAgICAgKlxuICAgICAqIEBuYW1lIGRvVW50aWxcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb250cm9sRmxvd1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5kb1doaWxzdF17QGxpbmsgbW9kdWxlOkNvbnRyb2xGbG93LmRvV2hpbHN0fVxuICAgICAqIEBjYXRlZ29yeSBDb250cm9sIEZsb3dcbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQW4gYXN5bmMgZnVuY3Rpb24gd2hpY2ggaXMgY2FsbGVkIGVhY2ggdGltZVxuICAgICAqIGB0ZXN0YCBmYWlscy4gSW52b2tlZCB3aXRoIChjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSB0ZXN0IC0gYXN5bmNocm9ub3VzIHRydXRoIHRlc3QgdG8gcGVyZm9ybSBhZnRlciBlYWNoXG4gICAgICogZXhlY3V0aW9uIG9mIGBpdGVyYXRlZWAuIEludm9rZWQgd2l0aCAoLi4uYXJncywgY2FsbGJhY2spLCB3aGVyZSBgLi4uYXJnc2AgYXJlIHRoZVxuICAgICAqIG5vbi1lcnJvciBhcmdzIGZyb20gdGhlIHByZXZpb3VzIGNhbGxiYWNrIG9mIGBpdGVyYXRlZWBcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgYWZ0ZXIgdGhlIHRlc3RcbiAgICAgKiBmdW5jdGlvbiBoYXMgcGFzc2VkIGFuZCByZXBlYXRlZCBleGVjdXRpb24gb2YgYGl0ZXJhdGVlYCBoYXMgc3RvcHBlZC4gYGNhbGxiYWNrYFxuICAgICAqIHdpbGwgYmUgcGFzc2VkIGFuIGVycm9yIGFuZCBhbnkgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgZmluYWwgYGl0ZXJhdGVlYCdzXG4gICAgICogY2FsbGJhY2suIEludm9rZWQgd2l0aCAoZXJyLCBbcmVzdWx0c10pO1xuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIG5vIGNhbGxiYWNrIGlzIHBhc3NlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGRvVW50aWwoaXRlcmF0ZWUsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IF90ZXN0ID0gd3JhcEFzeW5jKHRlc3QpO1xuICAgICAgICByZXR1cm4gZG9XaGlsc3QkMShpdGVyYXRlZSwgKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNiID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIF90ZXN0KC4uLmFyZ3MsIChlcnIsIHRydXRoKSA9PiBjYiAoZXJyLCAhdHJ1dGgpKTtcbiAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF93aXRob3V0SW5kZXgoaXRlcmF0ZWUpIHtcbiAgICAgICAgcmV0dXJuICh2YWx1ZSwgaW5kZXgsIGNhbGxiYWNrKSA9PiBpdGVyYXRlZSh2YWx1ZSwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFwcGxpZXMgdGhlIGZ1bmN0aW9uIGBpdGVyYXRlZWAgdG8gZWFjaCBpdGVtIGluIGBjb2xsYCwgaW4gcGFyYWxsZWwuXG4gICAgICogVGhlIGBpdGVyYXRlZWAgaXMgY2FsbGVkIHdpdGggYW4gaXRlbSBmcm9tIHRoZSBsaXN0LCBhbmQgYSBjYWxsYmFjayBmb3Igd2hlblxuICAgICAqIGl0IGhhcyBmaW5pc2hlZC4gSWYgdGhlIGBpdGVyYXRlZWAgcGFzc2VzIGFuIGVycm9yIHRvIGl0cyBgY2FsbGJhY2tgLCB0aGVcbiAgICAgKiBtYWluIGBjYWxsYmFja2AgKGZvciB0aGUgYGVhY2hgIGZ1bmN0aW9uKSBpcyBpbW1lZGlhdGVseSBjYWxsZWQgd2l0aCB0aGVcbiAgICAgKiBlcnJvci5cbiAgICAgKlxuICAgICAqIE5vdGUsIHRoYXQgc2luY2UgdGhpcyBmdW5jdGlvbiBhcHBsaWVzIGBpdGVyYXRlZWAgdG8gZWFjaCBpdGVtIGluIHBhcmFsbGVsLFxuICAgICAqIHRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IHRoZSBpdGVyYXRlZSBmdW5jdGlvbnMgd2lsbCBjb21wbGV0ZSBpbiBvcmRlci5cbiAgICAgKlxuICAgICAqIEBuYW1lIGVhY2hcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAYWxpYXMgZm9yRWFjaFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEFuIGFzeW5jIGZ1bmN0aW9uIHRvIGFwcGx5IHRvXG4gICAgICogZWFjaCBpdGVtIGluIGBjb2xsYC4gSW52b2tlZCB3aXRoIChpdGVtLCBjYWxsYmFjaykuXG4gICAgICogVGhlIGFycmF5IGluZGV4IGlzIG5vdCBwYXNzZWQgdG8gdGhlIGl0ZXJhdGVlLlxuICAgICAqIElmIHlvdSBuZWVkIHRoZSBpbmRleCwgdXNlIGBlYWNoT2ZgLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCB3aGVuIGFsbFxuICAgICAqIGBpdGVyYXRlZWAgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQsIG9yIGFuIGVycm9yIG9jY3Vycy4gSW52b2tlZCB3aXRoIChlcnIpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIGEgY2FsbGJhY2sgaXMgb21pdHRlZFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBkaXIxIGlzIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgZmlsZTEudHh0LCBmaWxlMi50eHRcbiAgICAgKiAvLyBkaXIyIGlzIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgZmlsZTMudHh0LCBmaWxlNC50eHRcbiAgICAgKiAvLyBkaXIzIGlzIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgZmlsZTUudHh0XG4gICAgICogLy8gZGlyNCBkb2VzIG5vdCBleGlzdFxuICAgICAqXG4gICAgICogY29uc3QgZmlsZUxpc3QgPSBbICdkaXIxL2ZpbGUyLnR4dCcsICdkaXIyL2ZpbGUzLnR4dCcsICdkaXIvZmlsZTUudHh0J107XG4gICAgICogY29uc3Qgd2l0aE1pc3NpbmdGaWxlTGlzdCA9IFsnZGlyMS9maWxlMS50eHQnLCAnZGlyNC9maWxlMi50eHQnXTtcbiAgICAgKlxuICAgICAqIC8vIGFzeW5jaHJvbm91cyBmdW5jdGlvbiB0aGF0IGRlbGV0ZXMgYSBmaWxlXG4gICAgICogY29uc3QgZGVsZXRlRmlsZSA9IGZ1bmN0aW9uKGZpbGUsIGNhbGxiYWNrKSB7XG4gICAgICogICAgIGZzLnVubGluayhmaWxlLCBjYWxsYmFjayk7XG4gICAgICogfTtcbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIGNhbGxiYWNrc1xuICAgICAqIGFzeW5jLmVhY2goZmlsZUxpc3QsIGRlbGV0ZUZpbGUsIGZ1bmN0aW9uKGVycikge1xuICAgICAqICAgICBpZiggZXJyICkge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgfSBlbHNlIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKCdBbGwgZmlsZXMgaGF2ZSBiZWVuIGRlbGV0ZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgICogICAgIH1cbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIEVycm9yIEhhbmRsaW5nXG4gICAgICogYXN5bmMuZWFjaCh3aXRoTWlzc2luZ0ZpbGVMaXN0LCBkZWxldGVGaWxlLCBmdW5jdGlvbihlcnIpe1xuICAgICAqICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICAvLyBbIEVycm9yOiBFTk9FTlQ6IG5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkgXVxuICAgICAqICAgICAvLyBzaW5jZSBkaXI0L2ZpbGUyLnR4dCBkb2VzIG5vdCBleGlzdFxuICAgICAqICAgICAvLyBkaXIxL2ZpbGUxLnR4dCBjb3VsZCBoYXZlIGJlZW4gZGVsZXRlZFxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgUHJvbWlzZXNcbiAgICAgKiBhc3luYy5lYWNoKGZpbGVMaXN0LCBkZWxldGVGaWxlKVxuICAgICAqIC50aGVuKCAoKSA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKCdBbGwgZmlsZXMgaGF2ZSBiZWVuIGRlbGV0ZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgICogfSkuY2F0Y2goIGVyciA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBFcnJvciBIYW5kbGluZ1xuICAgICAqIGFzeW5jLmVhY2goZmlsZUxpc3QsIGRlbGV0ZUZpbGUpXG4gICAgICogLnRoZW4oICgpID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coJ0FsbCBmaWxlcyBoYXZlIGJlZW4gZGVsZXRlZCBzdWNjZXNzZnVsbHknKTtcbiAgICAgKiB9KS5jYXRjaCggZXJyID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgLy8gWyBFcnJvcjogRU5PRU5UOiBubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IF1cbiAgICAgKiAgICAgLy8gc2luY2UgZGlyNC9maWxlMi50eHQgZG9lcyBub3QgZXhpc3RcbiAgICAgKiAgICAgLy8gZGlyMS9maWxlMS50eHQgY291bGQgaGF2ZSBiZWVuIGRlbGV0ZWRcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIGFzeW5jL2F3YWl0XG4gICAgICogYXN5bmMgKCkgPT4ge1xuICAgICAqICAgICB0cnkge1xuICAgICAqICAgICAgICAgYXdhaXQgYXN5bmMuZWFjaChmaWxlcywgZGVsZXRlRmlsZSk7XG4gICAgICogICAgIH1cbiAgICAgKiAgICAgY2F0Y2ggKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIC8vIEVycm9yIEhhbmRsaW5nXG4gICAgICogYXN5bmMgKCkgPT4ge1xuICAgICAqICAgICB0cnkge1xuICAgICAqICAgICAgICAgYXdhaXQgYXN5bmMuZWFjaCh3aXRoTWlzc2luZ0ZpbGVMaXN0LCBkZWxldGVGaWxlKTtcbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICAgICAgLy8gWyBFcnJvcjogRU5PRU5UOiBubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IF1cbiAgICAgKiAgICAgICAgIC8vIHNpbmNlIGRpcjQvZmlsZTIudHh0IGRvZXMgbm90IGV4aXN0XG4gICAgICogICAgICAgICAvLyBkaXIxL2ZpbGUxLnR4dCBjb3VsZCBoYXZlIGJlZW4gZGVsZXRlZFxuICAgICAqICAgICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICovXG4gICAgZnVuY3Rpb24gZWFjaExpbWl0JDIoY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBlYWNoT2YkMShjb2xsLCBfd2l0aG91dEluZGV4KHdyYXBBc3luYyhpdGVyYXRlZSkpLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgdmFyIGVhY2ggPSBhd2FpdGlmeShlYWNoTGltaXQkMiwgMyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyBbYGVhY2hgXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZWFjaH0gYnV0IHJ1bnMgYSBtYXhpbXVtIG9mIGBsaW1pdGAgYXN5bmMgb3BlcmF0aW9ucyBhdCBhIHRpbWUuXG4gICAgICpcbiAgICAgKiBAbmFtZSBlYWNoTGltaXRcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5lYWNoXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZWFjaH1cbiAgICAgKiBAYWxpYXMgZm9yRWFjaExpbWl0XG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfEFzeW5jSXRlcmFibGV8T2JqZWN0fSBjb2xsIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbGltaXQgLSBUaGUgbWF4aW11bSBudW1iZXIgb2YgYXN5bmMgb3BlcmF0aW9ucyBhdCBhIHRpbWUuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEFuIGFzeW5jIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggaXRlbSBpblxuICAgICAqIGBjb2xsYC5cbiAgICAgKiBUaGUgYXJyYXkgaW5kZXggaXMgbm90IHBhc3NlZCB0byB0aGUgaXRlcmF0ZWUuXG4gICAgICogSWYgeW91IG5lZWQgdGhlIGluZGV4LCB1c2UgYGVhY2hPZkxpbWl0YC5cbiAgICAgKiBJbnZva2VkIHdpdGggKGl0ZW0sIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgd2hlbiBhbGxcbiAgICAgKiBgaXRlcmF0ZWVgIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLCBvciBhbiBlcnJvciBvY2N1cnMuIEludm9rZWQgd2l0aCAoZXJyKS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBhIGNhbGxiYWNrIGlzIG9taXR0ZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBlYWNoTGltaXQoY29sbCwgbGltaXQsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gZWFjaE9mTGltaXQkMihsaW1pdCkoY29sbCwgX3dpdGhvdXRJbmRleCh3cmFwQXN5bmMoaXRlcmF0ZWUpKSwgY2FsbGJhY2spO1xuICAgIH1cbiAgICB2YXIgZWFjaExpbWl0JDEgPSBhd2FpdGlmeShlYWNoTGltaXQsIDQpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNhbWUgYXMgW2BlYWNoYF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmVhY2h9IGJ1dCBydW5zIG9ubHkgYSBzaW5nbGUgYXN5bmMgb3BlcmF0aW9uIGF0IGEgdGltZS5cbiAgICAgKlxuICAgICAqIE5vdGUsIHRoYXQgdW5saWtlIFtgZWFjaGBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5lYWNofSwgdGhpcyBmdW5jdGlvbiBhcHBsaWVzIGl0ZXJhdGVlIHRvIGVhY2ggaXRlbVxuICAgICAqIGluIHNlcmllcyBhbmQgdGhlcmVmb3JlIHRoZSBpdGVyYXRlZSBmdW5jdGlvbnMgd2lsbCBjb21wbGV0ZSBpbiBvcmRlci5cblxuICAgICAqIEBuYW1lIGVhY2hTZXJpZXNcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5lYWNoXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZWFjaH1cbiAgICAgKiBAYWxpYXMgZm9yRWFjaFNlcmllc1xuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEFuIGFzeW5jIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2hcbiAgICAgKiBpdGVtIGluIGBjb2xsYC5cbiAgICAgKiBUaGUgYXJyYXkgaW5kZXggaXMgbm90IHBhc3NlZCB0byB0aGUgaXRlcmF0ZWUuXG4gICAgICogSWYgeW91IG5lZWQgdGhlIGluZGV4LCB1c2UgYGVhY2hPZlNlcmllc2AuXG4gICAgICogSW52b2tlZCB3aXRoIChpdGVtLCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIHdoZW4gYWxsXG4gICAgICogYGl0ZXJhdGVlYCBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZCwgb3IgYW4gZXJyb3Igb2NjdXJzLiBJbnZva2VkIHdpdGggKGVycikuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgYSBjYWxsYmFjayBpcyBvbWl0dGVkXG4gICAgICovXG4gICAgZnVuY3Rpb24gZWFjaFNlcmllcyhjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGVhY2hMaW1pdCQxKGNvbGwsIDEsIGl0ZXJhdGVlLCBjYWxsYmFjaylcbiAgICB9XG4gICAgdmFyIGVhY2hTZXJpZXMkMSA9IGF3YWl0aWZ5KGVhY2hTZXJpZXMsIDMpO1xuXG4gICAgLyoqXG4gICAgICogV3JhcCBhbiBhc3luYyBmdW5jdGlvbiBhbmQgZW5zdXJlIGl0IGNhbGxzIGl0cyBjYWxsYmFjayBvbiBhIGxhdGVyIHRpY2sgb2ZcbiAgICAgKiB0aGUgZXZlbnQgbG9vcC4gIElmIHRoZSBmdW5jdGlvbiBhbHJlYWR5IGNhbGxzIGl0cyBjYWxsYmFjayBvbiBhIG5leHQgdGljayxcbiAgICAgKiBubyBleHRyYSBkZWZlcnJhbCBpcyBhZGRlZC4gVGhpcyBpcyB1c2VmdWwgZm9yIHByZXZlbnRpbmcgc3RhY2sgb3ZlcmZsb3dzXG4gICAgICogKGBSYW5nZUVycm9yOiBNYXhpbXVtIGNhbGwgc3RhY2sgc2l6ZSBleGNlZWRlZGApIGFuZCBnZW5lcmFsbHkga2VlcGluZ1xuICAgICAqIFtaYWxnb10oaHR0cDovL2Jsb2cuaXpzLm1lL3Bvc3QvNTkxNDI3NDIxNDMvZGVzaWduaW5nLWFwaXMtZm9yLWFzeW5jaHJvbnkpXG4gICAgICogY29udGFpbmVkLiBFUzIwMTcgYGFzeW5jYCBmdW5jdGlvbnMgYXJlIHJldHVybmVkIGFzLWlzIC0tIHRoZXkgYXJlIGltbXVuZVxuICAgICAqIHRvIFphbGdvJ3MgY29ycnVwdGluZyBpbmZsdWVuY2VzLCBhcyB0aGV5IGFsd2F5cyByZXNvbHZlIG9uIGEgbGF0ZXIgdGljay5cbiAgICAgKlxuICAgICAqIEBuYW1lIGVuc3VyZUFzeW5jXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6VXRpbHNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGZuIC0gYW4gYXN5bmMgZnVuY3Rpb24sIG9uZSB0aGF0IGV4cGVjdHMgYSBub2RlLXN0eWxlXG4gICAgICogY2FsbGJhY2sgYXMgaXRzIGxhc3QgYXJndW1lbnQuXG4gICAgICogQHJldHVybnMge0FzeW5jRnVuY3Rpb259IFJldHVybnMgYSB3cmFwcGVkIGZ1bmN0aW9uIHdpdGggdGhlIGV4YWN0IHNhbWUgY2FsbFxuICAgICAqIHNpZ25hdHVyZSBhcyB0aGUgZnVuY3Rpb24gcGFzc2VkIGluLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBzb21ldGltZXNBc3luYyhhcmcsIGNhbGxiYWNrKSB7XG4gICAgICogICAgIGlmIChjYWNoZVthcmddKSB7XG4gICAgICogICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCwgY2FjaGVbYXJnXSk7IC8vIHRoaXMgd291bGQgYmUgc3luY2hyb25vdXMhIVxuICAgICAqICAgICB9IGVsc2Uge1xuICAgICAqICAgICAgICAgZG9Tb21lSU8oYXJnLCBjYWxsYmFjayk7IC8vIHRoaXMgSU8gd291bGQgYmUgYXN5bmNocm9ub3VzXG4gICAgICogICAgIH1cbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyB0aGlzIGhhcyBhIHJpc2sgb2Ygc3RhY2sgb3ZlcmZsb3dzIGlmIG1hbnkgcmVzdWx0cyBhcmUgY2FjaGVkIGluIGEgcm93XG4gICAgICogYXN5bmMubWFwU2VyaWVzKGFyZ3MsIHNvbWV0aW1lc0FzeW5jLCBkb25lKTtcbiAgICAgKlxuICAgICAqIC8vIHRoaXMgd2lsbCBkZWZlciBzb21ldGltZXNBc3luYydzIGNhbGxiYWNrIGlmIG5lY2Vzc2FyeSxcbiAgICAgKiAvLyBwcmV2ZW50aW5nIHN0YWNrIG92ZXJmbG93c1xuICAgICAqIGFzeW5jLm1hcFNlcmllcyhhcmdzLCBhc3luYy5lbnN1cmVBc3luYyhzb21ldGltZXNBc3luYyksIGRvbmUpO1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGVuc3VyZUFzeW5jKGZuKSB7XG4gICAgICAgIGlmIChpc0FzeW5jKGZuKSkgcmV0dXJuIGZuO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3MvKiwgY2FsbGJhY2sqLykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciBzeW5jID0gdHJ1ZTtcbiAgICAgICAgICAgIGFyZ3MucHVzaCgoLi4uaW5uZXJBcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHN5bmMpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlJDEoKCkgPT4gY2FsbGJhY2soLi4uaW5uZXJBcmdzKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soLi4uaW5uZXJBcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgc3luYyA9IGZhbHNlO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYHRydWVgIGlmIGV2ZXJ5IGVsZW1lbnQgaW4gYGNvbGxgIHNhdGlzZmllcyBhbiBhc3luYyB0ZXN0LiBJZiBhbnlcbiAgICAgKiBpdGVyYXRlZSBjYWxsIHJldHVybnMgYGZhbHNlYCwgdGhlIG1haW4gYGNhbGxiYWNrYCBpcyBpbW1lZGlhdGVseSBjYWxsZWQuXG4gICAgICpcbiAgICAgKiBAbmFtZSBldmVyeVxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBhbGlhcyBhbGxcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBbiBhc3luYyB0cnV0aCB0ZXN0IHRvIGFwcGx5IHRvIGVhY2ggaXRlbVxuICAgICAqIGluIHRoZSBjb2xsZWN0aW9uIGluIHBhcmFsbGVsLlxuICAgICAqIFRoZSBpdGVyYXRlZSBtdXN0IGNvbXBsZXRlIHdpdGggYSBib29sZWFuIHJlc3VsdCB2YWx1ZS5cbiAgICAgKiBJbnZva2VkIHdpdGggKGl0ZW0sIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgYWZ0ZXIgYWxsIHRoZVxuICAgICAqIGBpdGVyYXRlZWAgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQuIFJlc3VsdCB3aWxsIGJlIGVpdGhlciBgdHJ1ZWAgb3IgYGZhbHNlYFxuICAgICAqIGRlcGVuZGluZyBvbiB0aGUgdmFsdWVzIG9mIHRoZSBhc3luYyB0ZXN0cy4gSW52b2tlZCB3aXRoIChlcnIsIHJlc3VsdCkuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgcHJvdmlkZWRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gZGlyMSBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGZpbGUxLnR4dCwgZmlsZTIudHh0XG4gICAgICogLy8gZGlyMiBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGZpbGUzLnR4dCwgZmlsZTQudHh0XG4gICAgICogLy8gZGlyMyBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGZpbGU1LnR4dFxuICAgICAqIC8vIGRpcjQgZG9lcyBub3QgZXhpc3RcbiAgICAgKlxuICAgICAqIGNvbnN0IGZpbGVMaXN0ID0gWydkaXIxL2ZpbGUxLnR4dCcsJ2RpcjIvZmlsZTMudHh0JywnZGlyMy9maWxlNS50eHQnXTtcbiAgICAgKiBjb25zdCB3aXRoTWlzc2luZ0ZpbGVMaXN0ID0gWydmaWxlMS50eHQnLCdmaWxlMi50eHQnLCdmaWxlNC50eHQnXTtcbiAgICAgKlxuICAgICAqIC8vIGFzeW5jaHJvbm91cyBmdW5jdGlvbiB0aGF0IGNoZWNrcyBpZiBhIGZpbGUgZXhpc3RzXG4gICAgICogZnVuY3Rpb24gZmlsZUV4aXN0cyhmaWxlLCBjYWxsYmFjaykge1xuICAgICAqICAgIGZzLmFjY2VzcyhmaWxlLCBmcy5jb25zdGFudHMuRl9PSywgKGVycikgPT4ge1xuICAgICAqICAgICAgICBjYWxsYmFjayhudWxsLCAhZXJyKTtcbiAgICAgKiAgICB9KTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBjYWxsYmFja3NcbiAgICAgKiBhc3luYy5ldmVyeShmaWxlTGlzdCwgZmlsZUV4aXN0cywgZnVuY3Rpb24oZXJyLCByZXN1bHQpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgLy8gdHJ1ZVxuICAgICAqICAgICAvLyByZXN1bHQgaXMgdHJ1ZSBzaW5jZSBldmVyeSBmaWxlIGV4aXN0c1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogYXN5bmMuZXZlcnkod2l0aE1pc3NpbmdGaWxlTGlzdCwgZmlsZUV4aXN0cywgZnVuY3Rpb24oZXJyLCByZXN1bHQpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgLy8gZmFsc2VcbiAgICAgKiAgICAgLy8gcmVzdWx0IGlzIGZhbHNlIHNpbmNlIE5PVCBldmVyeSBmaWxlIGV4aXN0c1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgUHJvbWlzZXNcbiAgICAgKiBhc3luYy5ldmVyeShmaWxlTGlzdCwgZmlsZUV4aXN0cylcbiAgICAgKiAudGhlbiggcmVzdWx0ID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgLy8gdHJ1ZVxuICAgICAqICAgICAvLyByZXN1bHQgaXMgdHJ1ZSBzaW5jZSBldmVyeSBmaWxlIGV4aXN0c1xuICAgICAqIH0pLmNhdGNoKCBlcnIgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogYXN5bmMuZXZlcnkod2l0aE1pc3NpbmdGaWxlTGlzdCwgZmlsZUV4aXN0cylcbiAgICAgKiAudGhlbiggcmVzdWx0ID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgLy8gZmFsc2VcbiAgICAgKiAgICAgLy8gcmVzdWx0IGlzIGZhbHNlIHNpbmNlIE5PVCBldmVyeSBmaWxlIGV4aXN0c1xuICAgICAqIH0pLmNhdGNoKCBlcnIgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgYXN5bmMvYXdhaXRcbiAgICAgKiBhc3luYyAoKSA9PiB7XG4gICAgICogICAgIHRyeSB7XG4gICAgICogICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgYXN5bmMuZXZlcnkoZmlsZUxpc3QsIGZpbGVFeGlzdHMpO1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgICAgIC8vIHRydWVcbiAgICAgKiAgICAgICAgIC8vIHJlc3VsdCBpcyB0cnVlIHNpbmNlIGV2ZXJ5IGZpbGUgZXhpc3RzXG4gICAgICogICAgIH1cbiAgICAgKiAgICAgY2F0Y2ggKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIGFzeW5jICgpID0+IHtcbiAgICAgKiAgICAgdHJ5IHtcbiAgICAgKiAgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBhc3luYy5ldmVyeSh3aXRoTWlzc2luZ0ZpbGVMaXN0LCBmaWxlRXhpc3RzKTtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XG4gICAgICogICAgICAgICAvLyBmYWxzZVxuICAgICAqICAgICAgICAgLy8gcmVzdWx0IGlzIGZhbHNlIHNpbmNlIE5PVCBldmVyeSBmaWxlIGV4aXN0c1xuICAgICAqICAgICB9XG4gICAgICogICAgIGNhdGNoIChlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgIH1cbiAgICAgKiB9XG4gICAgICpcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBldmVyeShjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9jcmVhdGVUZXN0ZXIoYm9vbCA9PiAhYm9vbCwgcmVzID0+ICFyZXMpKGVhY2hPZiQxLCBjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuICAgIHZhciBldmVyeSQxID0gYXdhaXRpZnkoZXZlcnksIDMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNhbWUgYXMgW2BldmVyeWBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5ldmVyeX0gYnV0IHJ1bnMgYSBtYXhpbXVtIG9mIGBsaW1pdGAgYXN5bmMgb3BlcmF0aW9ucyBhdCBhIHRpbWUuXG4gICAgICpcbiAgICAgKiBAbmFtZSBldmVyeUxpbWl0XG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMuZXZlcnlde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5ldmVyeX1cbiAgICAgKiBAYWxpYXMgYWxsTGltaXRcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW1pdCAtIFRoZSBtYXhpbXVtIG51bWJlciBvZiBhc3luYyBvcGVyYXRpb25zIGF0IGEgdGltZS5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQW4gYXN5bmMgdHJ1dGggdGVzdCB0byBhcHBseSB0byBlYWNoIGl0ZW1cbiAgICAgKiBpbiB0aGUgY29sbGVjdGlvbiBpbiBwYXJhbGxlbC5cbiAgICAgKiBUaGUgaXRlcmF0ZWUgbXVzdCBjb21wbGV0ZSB3aXRoIGEgYm9vbGVhbiByZXN1bHQgdmFsdWUuXG4gICAgICogSW52b2tlZCB3aXRoIChpdGVtLCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIGFmdGVyIGFsbCB0aGVcbiAgICAgKiBgaXRlcmF0ZWVgIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLiBSZXN1bHQgd2lsbCBiZSBlaXRoZXIgYHRydWVgIG9yIGBmYWxzZWBcbiAgICAgKiBkZXBlbmRpbmcgb24gdGhlIHZhbHVlcyBvZiB0aGUgYXN5bmMgdGVzdHMuIEludm9rZWQgd2l0aCAoZXJyLCByZXN1bHQpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIG5vIGNhbGxiYWNrIHByb3ZpZGVkXG4gICAgICovXG4gICAgZnVuY3Rpb24gZXZlcnlMaW1pdChjb2xsLCBsaW1pdCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBfY3JlYXRlVGVzdGVyKGJvb2wgPT4gIWJvb2wsIHJlcyA9PiAhcmVzKShlYWNoT2ZMaW1pdCQyKGxpbWl0KSwgY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKVxuICAgIH1cbiAgICB2YXIgZXZlcnlMaW1pdCQxID0gYXdhaXRpZnkoZXZlcnlMaW1pdCwgNCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyBbYGV2ZXJ5YF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmV2ZXJ5fSBidXQgcnVucyBvbmx5IGEgc2luZ2xlIGFzeW5jIG9wZXJhdGlvbiBhdCBhIHRpbWUuXG4gICAgICpcbiAgICAgKiBAbmFtZSBldmVyeVNlcmllc1xuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLmV2ZXJ5XXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZXZlcnl9XG4gICAgICogQGFsaWFzIGFsbFNlcmllc1xuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEFuIGFzeW5jIHRydXRoIHRlc3QgdG8gYXBwbHkgdG8gZWFjaCBpdGVtXG4gICAgICogaW4gdGhlIGNvbGxlY3Rpb24gaW4gc2VyaWVzLlxuICAgICAqIFRoZSBpdGVyYXRlZSBtdXN0IGNvbXBsZXRlIHdpdGggYSBib29sZWFuIHJlc3VsdCB2YWx1ZS5cbiAgICAgKiBJbnZva2VkIHdpdGggKGl0ZW0sIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgYWZ0ZXIgYWxsIHRoZVxuICAgICAqIGBpdGVyYXRlZWAgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQuIFJlc3VsdCB3aWxsIGJlIGVpdGhlciBgdHJ1ZWAgb3IgYGZhbHNlYFxuICAgICAqIGRlcGVuZGluZyBvbiB0aGUgdmFsdWVzIG9mIHRoZSBhc3luYyB0ZXN0cy4gSW52b2tlZCB3aXRoIChlcnIsIHJlc3VsdCkuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgcHJvdmlkZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBldmVyeVNlcmllcyhjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9jcmVhdGVUZXN0ZXIoYm9vbCA9PiAhYm9vbCwgcmVzID0+ICFyZXMpKGVhY2hPZlNlcmllcyQxLCBjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuICAgIHZhciBldmVyeVNlcmllcyQxID0gYXdhaXRpZnkoZXZlcnlTZXJpZXMsIDMpO1xuXG4gICAgZnVuY3Rpb24gZmlsdGVyQXJyYXkoZWFjaGZuLCBhcnIsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgdHJ1dGhWYWx1ZXMgPSBuZXcgQXJyYXkoYXJyLmxlbmd0aCk7XG4gICAgICAgIGVhY2hmbihhcnIsICh4LCBpbmRleCwgaXRlckNiKSA9PiB7XG4gICAgICAgICAgICBpdGVyYXRlZSh4LCAoZXJyLCB2KSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ1dGhWYWx1ZXNbaW5kZXhdID0gISF2O1xuICAgICAgICAgICAgICAgIGl0ZXJDYihlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGVyciA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICh0cnV0aFZhbHVlc1tpXSkgcmVzdWx0cy5wdXNoKGFycltpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXN1bHRzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZmlsdGVyR2VuZXJpYyhlYWNoZm4sIGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICBlYWNoZm4oY29sbCwgKHgsIGluZGV4LCBpdGVyQ2IpID0+IHtcbiAgICAgICAgICAgIGl0ZXJhdGVlKHgsIChlcnIsIHYpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gaXRlckNiKGVycik7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHtpbmRleCwgdmFsdWU6IHh9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaXRlckNiKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZXJyID0+IHtcbiAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzdWx0c1xuICAgICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmluZGV4IC0gYi5pbmRleClcbiAgICAgICAgICAgICAgICAubWFwKHYgPT4gdi52YWx1ZSkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfZmlsdGVyKGVhY2hmbiwgY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBmaWx0ZXIgPSBpc0FycmF5TGlrZShjb2xsKSA/IGZpbHRlckFycmF5IDogZmlsdGVyR2VuZXJpYztcbiAgICAgICAgcmV0dXJuIGZpbHRlcihlYWNoZm4sIGNvbGwsIHdyYXBBc3luYyhpdGVyYXRlZSksIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgbmV3IGFycmF5IG9mIGFsbCB0aGUgdmFsdWVzIGluIGBjb2xsYCB3aGljaCBwYXNzIGFuIGFzeW5jIHRydXRoXG4gICAgICogdGVzdC4gVGhpcyBvcGVyYXRpb24gaXMgcGVyZm9ybWVkIGluIHBhcmFsbGVsLCBidXQgdGhlIHJlc3VsdHMgYXJyYXkgd2lsbCBiZVxuICAgICAqIGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZSBvcmlnaW5hbC5cbiAgICAgKlxuICAgICAqIEBuYW1lIGZpbHRlclxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBhbGlhcyBzZWxlY3RcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIC0gQSB0cnV0aCB0ZXN0IHRvIGFwcGx5IHRvIGVhY2ggaXRlbSBpbiBgY29sbGAuXG4gICAgICogVGhlIGBpdGVyYXRlZWAgaXMgcGFzc2VkIGEgYGNhbGxiYWNrKGVyciwgdHJ1dGhWYWx1ZSlgLCB3aGljaCBtdXN0IGJlIGNhbGxlZFxuICAgICAqIHdpdGggYSBib29sZWFuIGFyZ3VtZW50IG9uY2UgaXQgaGFzIGNvbXBsZXRlZC4gSW52b2tlZCB3aXRoIChpdGVtLCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIGFmdGVyIGFsbCB0aGVcbiAgICAgKiBgaXRlcmF0ZWVgIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLiBJbnZva2VkIHdpdGggKGVyciwgcmVzdWx0cykuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgcHJvdmlkZWRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gZGlyMSBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGZpbGUxLnR4dCwgZmlsZTIudHh0XG4gICAgICogLy8gZGlyMiBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGZpbGUzLnR4dCwgZmlsZTQudHh0XG4gICAgICogLy8gZGlyMyBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGZpbGU1LnR4dFxuICAgICAqXG4gICAgICogY29uc3QgZmlsZXMgPSBbJ2RpcjEvZmlsZTEudHh0JywnZGlyMi9maWxlMy50eHQnLCdkaXIzL2ZpbGU2LnR4dCddO1xuICAgICAqXG4gICAgICogLy8gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIGlmIGEgZmlsZSBleGlzdHNcbiAgICAgKiBmdW5jdGlvbiBmaWxlRXhpc3RzKGZpbGUsIGNhbGxiYWNrKSB7XG4gICAgICogICAgZnMuYWNjZXNzKGZpbGUsIGZzLmNvbnN0YW50cy5GX09LLCAoZXJyKSA9PiB7XG4gICAgICogICAgICAgIGNhbGxiYWNrKG51bGwsICFlcnIpO1xuICAgICAqICAgIH0pO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIGNhbGxiYWNrc1xuICAgICAqIGFzeW5jLmZpbHRlcihmaWxlcywgZmlsZUV4aXN0cywgZnVuY3Rpb24oZXJyLCByZXN1bHRzKSB7XG4gICAgICogICAgaWYoZXJyKSB7XG4gICAgICogICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgfSBlbHNlIHtcbiAgICAgKiAgICAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgICAgIC8vIFsgJ2RpcjEvZmlsZTEudHh0JywgJ2RpcjIvZmlsZTMudHh0JyBdXG4gICAgICogICAgICAgIC8vIHJlc3VsdHMgaXMgbm93IGFuIGFycmF5IG9mIHRoZSBleGlzdGluZyBmaWxlc1xuICAgICAqICAgIH1cbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIFByb21pc2VzXG4gICAgICogYXN5bmMuZmlsdGVyKGZpbGVzLCBmaWxlRXhpc3RzKVxuICAgICAqIC50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiAgICAgLy8gWyAnZGlyMS9maWxlMS50eHQnLCAnZGlyMi9maWxlMy50eHQnIF1cbiAgICAgKiAgICAgLy8gcmVzdWx0cyBpcyBub3cgYW4gYXJyYXkgb2YgdGhlIGV4aXN0aW5nIGZpbGVzXG4gICAgICogfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIGFzeW5jL2F3YWl0XG4gICAgICogYXN5bmMgKCkgPT4ge1xuICAgICAqICAgICB0cnkge1xuICAgICAqICAgICAgICAgbGV0IHJlc3VsdHMgPSBhd2FpdCBhc3luYy5maWx0ZXIoZmlsZXMsIGZpbGVFeGlzdHMpO1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgICAgICAvLyBbICdkaXIxL2ZpbGUxLnR4dCcsICdkaXIyL2ZpbGUzLnR4dCcgXVxuICAgICAqICAgICAgICAgLy8gcmVzdWx0cyBpcyBub3cgYW4gYXJyYXkgb2YgdGhlIGV4aXN0aW5nIGZpbGVzXG4gICAgICogICAgIH1cbiAgICAgKiAgICAgY2F0Y2ggKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZpbHRlciAoY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBfZmlsdGVyKGVhY2hPZiQxLCBjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuICAgIHZhciBmaWx0ZXIkMSA9IGF3YWl0aWZ5KGZpbHRlciwgMyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyBbYGZpbHRlcmBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5maWx0ZXJ9IGJ1dCBydW5zIGEgbWF4aW11bSBvZiBgbGltaXRgIGFzeW5jIG9wZXJhdGlvbnMgYXQgYVxuICAgICAqIHRpbWUuXG4gICAgICpcbiAgICAgKiBAbmFtZSBmaWx0ZXJMaW1pdFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLmZpbHRlcl17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmZpbHRlcn1cbiAgICAgKiBAYWxpYXMgc2VsZWN0TGltaXRcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW1pdCAtIFRoZSBtYXhpbXVtIG51bWJlciBvZiBhc3luYyBvcGVyYXRpb25zIGF0IGEgdGltZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEEgdHJ1dGggdGVzdCB0byBhcHBseSB0byBlYWNoIGl0ZW0gaW4gYGNvbGxgLlxuICAgICAqIFRoZSBgaXRlcmF0ZWVgIGlzIHBhc3NlZCBhIGBjYWxsYmFjayhlcnIsIHRydXRoVmFsdWUpYCwgd2hpY2ggbXVzdCBiZSBjYWxsZWRcbiAgICAgKiB3aXRoIGEgYm9vbGVhbiBhcmd1bWVudCBvbmNlIGl0IGhhcyBjb21wbGV0ZWQuIEludm9rZWQgd2l0aCAoaXRlbSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCBhZnRlciBhbGwgdGhlXG4gICAgICogYGl0ZXJhdGVlYCBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZC4gSW52b2tlZCB3aXRoIChlcnIsIHJlc3VsdHMpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIG5vIGNhbGxiYWNrIHByb3ZpZGVkXG4gICAgICovXG4gICAgZnVuY3Rpb24gZmlsdGVyTGltaXQgKGNvbGwsIGxpbWl0LCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9maWx0ZXIoZWFjaE9mTGltaXQkMihsaW1pdCksIGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaylcbiAgICB9XG4gICAgdmFyIGZpbHRlckxpbWl0JDEgPSBhd2FpdGlmeShmaWx0ZXJMaW1pdCwgNCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyBbYGZpbHRlcmBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5maWx0ZXJ9IGJ1dCBydW5zIG9ubHkgYSBzaW5nbGUgYXN5bmMgb3BlcmF0aW9uIGF0IGEgdGltZS5cbiAgICAgKlxuICAgICAqIEBuYW1lIGZpbHRlclNlcmllc1xuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLmZpbHRlcl17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmZpbHRlcn1cbiAgICAgKiBAYWxpYXMgc2VsZWN0U2VyaWVzXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfEFzeW5jSXRlcmFibGV8T2JqZWN0fSBjb2xsIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEEgdHJ1dGggdGVzdCB0byBhcHBseSB0byBlYWNoIGl0ZW0gaW4gYGNvbGxgLlxuICAgICAqIFRoZSBgaXRlcmF0ZWVgIGlzIHBhc3NlZCBhIGBjYWxsYmFjayhlcnIsIHRydXRoVmFsdWUpYCwgd2hpY2ggbXVzdCBiZSBjYWxsZWRcbiAgICAgKiB3aXRoIGEgYm9vbGVhbiBhcmd1bWVudCBvbmNlIGl0IGhhcyBjb21wbGV0ZWQuIEludm9rZWQgd2l0aCAoaXRlbSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCBhZnRlciBhbGwgdGhlXG4gICAgICogYGl0ZXJhdGVlYCBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZC4gSW52b2tlZCB3aXRoIChlcnIsIHJlc3VsdHMpXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgcHJvdmlkZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmaWx0ZXJTZXJpZXMgKGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX2ZpbHRlcihlYWNoT2ZTZXJpZXMkMSwgY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKVxuICAgIH1cbiAgICB2YXIgZmlsdGVyU2VyaWVzJDEgPSBhd2FpdGlmeShmaWx0ZXJTZXJpZXMsIDMpO1xuXG4gICAgLyoqXG4gICAgICogQ2FsbHMgdGhlIGFzeW5jaHJvbm91cyBmdW5jdGlvbiBgZm5gIHdpdGggYSBjYWxsYmFjayBwYXJhbWV0ZXIgdGhhdCBhbGxvd3MgaXRcbiAgICAgKiB0byBjYWxsIGl0c2VsZiBhZ2FpbiwgaW4gc2VyaWVzLCBpbmRlZmluaXRlbHkuXG5cbiAgICAgKiBJZiBhbiBlcnJvciBpcyBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrIHRoZW4gYGVycmJhY2tgIGlzIGNhbGxlZCB3aXRoIHRoZVxuICAgICAqIGVycm9yLCBhbmQgZXhlY3V0aW9uIHN0b3BzLCBvdGhlcndpc2UgaXQgd2lsbCBuZXZlciBiZSBjYWxsZWQuXG4gICAgICpcbiAgICAgKiBAbmFtZSBmb3JldmVyXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGNhdGVnb3J5IENvbnRyb2wgRmxvd1xuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gZm4gLSBhbiBhc3luYyBmdW5jdGlvbiB0byBjYWxsIHJlcGVhdGVkbHkuXG4gICAgICogSW52b2tlZCB3aXRoIChuZXh0KS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbZXJyYmFja10gLSB3aGVuIGBmbmAgcGFzc2VzIGFuIGVycm9yIHRvIGl0J3MgY2FsbGJhY2ssXG4gICAgICogdGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCwgYW5kIGV4ZWN1dGlvbiBzdG9wcy4gSW52b2tlZCB3aXRoIChlcnIpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UgdGhhdCByZWplY3RzIGlmIGFuIGVycm9yIG9jY3VycyBhbmQgYW4gZXJyYmFja1xuICAgICAqIGlzIG5vdCBwYXNzZWRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogYXN5bmMuZm9yZXZlcihcbiAgICAgKiAgICAgZnVuY3Rpb24obmV4dCkge1xuICAgICAqICAgICAgICAgLy8gbmV4dCBpcyBzdWl0YWJsZSBmb3IgcGFzc2luZyB0byB0aGluZ3MgdGhhdCBuZWVkIGEgY2FsbGJhY2soZXJyIFssIHdoYXRldmVyXSk7XG4gICAgICogICAgICAgICAvLyBpdCB3aWxsIHJlc3VsdCBpbiB0aGlzIGZ1bmN0aW9uIGJlaW5nIGNhbGxlZCBhZ2Fpbi5cbiAgICAgKiAgICAgfSxcbiAgICAgKiAgICAgZnVuY3Rpb24oZXJyKSB7XG4gICAgICogICAgICAgICAvLyBpZiBuZXh0IGlzIGNhbGxlZCB3aXRoIGEgdmFsdWUgaW4gaXRzIGZpcnN0IHBhcmFtZXRlciwgaXQgd2lsbCBhcHBlYXJcbiAgICAgKiAgICAgICAgIC8vIGluIGhlcmUgYXMgJ2VycicsIGFuZCBleGVjdXRpb24gd2lsbCBzdG9wLlxuICAgICAqICAgICB9XG4gICAgICogKTtcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmb3JldmVyKGZuLCBlcnJiYWNrKSB7XG4gICAgICAgIHZhciBkb25lID0gb25seU9uY2UoZXJyYmFjayk7XG4gICAgICAgIHZhciB0YXNrID0gd3JhcEFzeW5jKGVuc3VyZUFzeW5jKGZuKSk7XG5cbiAgICAgICAgZnVuY3Rpb24gbmV4dChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBkb25lKGVycik7XG4gICAgICAgICAgICBpZiAoZXJyID09PSBmYWxzZSkgcmV0dXJuO1xuICAgICAgICAgICAgdGFzayhuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgIH1cbiAgICB2YXIgZm9yZXZlciQxID0gYXdhaXRpZnkoZm9yZXZlciwgMik7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyBbYGdyb3VwQnlgXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZ3JvdXBCeX0gYnV0IHJ1bnMgYSBtYXhpbXVtIG9mIGBsaW1pdGAgYXN5bmMgb3BlcmF0aW9ucyBhdCBhIHRpbWUuXG4gICAgICpcbiAgICAgKiBAbmFtZSBncm91cEJ5TGltaXRcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5ncm91cEJ5XXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZ3JvdXBCeX1cbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW1pdCAtIFRoZSBtYXhpbXVtIG51bWJlciBvZiBhc3luYyBvcGVyYXRpb25zIGF0IGEgdGltZS5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQW4gYXN5bmMgZnVuY3Rpb24gdG8gYXBwbHkgdG8gZWFjaCBpdGVtIGluXG4gICAgICogYGNvbGxgLlxuICAgICAqIFRoZSBpdGVyYXRlZSBzaG91bGQgY29tcGxldGUgd2l0aCBhIGBrZXlgIHRvIGdyb3VwIHRoZSB2YWx1ZSB1bmRlci5cbiAgICAgKiBJbnZva2VkIHdpdGggKHZhbHVlLCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIHdoZW4gYWxsIGBpdGVyYXRlZWBcbiAgICAgKiBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZCwgb3IgYW4gZXJyb3Igb2NjdXJzLiBSZXN1bHQgaXMgYW4gYE9iamVjdGAgd2hvc2VzXG4gICAgICogcHJvcGVydGllcyBhcmUgYXJyYXlzIG9mIHZhbHVlcyB3aGljaCByZXR1cm5lZCB0aGUgY29ycmVzcG9uZGluZyBrZXkuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgaXMgcGFzc2VkXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ3JvdXBCeUxpbWl0KGNvbGwsIGxpbWl0LCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIF9pdGVyYXRlZSA9IHdyYXBBc3luYyhpdGVyYXRlZSk7XG4gICAgICAgIHJldHVybiBtYXBMaW1pdCQxKGNvbGwsIGxpbWl0LCAodmFsLCBpdGVyQ2IpID0+IHtcbiAgICAgICAgICAgIF9pdGVyYXRlZSh2YWwsIChlcnIsIGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBpdGVyQ2IoZXJyKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlckNiKGVyciwge2tleSwgdmFsfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgKGVyciwgbWFwUmVzdWx0cykgPT4ge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgICAgICAgICAgLy8gZnJvbSBNRE4sIGhhbmRsZSBvYmplY3QgaGF2aW5nIGFuIGBoYXNPd25Qcm9wZXJ0eWAgcHJvcFxuICAgICAgICAgICAgdmFyIHtoYXNPd25Qcm9wZXJ0eX0gPSBPYmplY3QucHJvdG90eXBlO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1hcFJlc3VsdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAobWFwUmVzdWx0c1tpXSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIge2tleX0gPSBtYXBSZXN1bHRzW2ldO1xuICAgICAgICAgICAgICAgICAgICB2YXIge3ZhbH0gPSBtYXBSZXN1bHRzW2ldO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHJlc3VsdCwga2V5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2tleV0ucHVzaCh2YWwpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBbdmFsXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVyciwgcmVzdWx0KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdmFyIGdyb3VwQnlMaW1pdCQxID0gYXdhaXRpZnkoZ3JvdXBCeUxpbWl0LCA0KTtcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBuZXcgb2JqZWN0LCB3aGVyZSBlYWNoIHZhbHVlIGNvcnJlc3BvbmRzIHRvIGFuIGFycmF5IG9mIGl0ZW1zLCBmcm9tXG4gICAgICogYGNvbGxgLCB0aGF0IHJldHVybmVkIHRoZSBjb3JyZXNwb25kaW5nIGtleS4gVGhhdCBpcywgdGhlIGtleXMgb2YgdGhlIG9iamVjdFxuICAgICAqIGNvcnJlc3BvbmQgdG8gdGhlIHZhbHVlcyBwYXNzZWQgdG8gdGhlIGBpdGVyYXRlZWAgY2FsbGJhY2suXG4gICAgICpcbiAgICAgKiBOb3RlOiBTaW5jZSB0aGlzIGZ1bmN0aW9uIGFwcGxpZXMgdGhlIGBpdGVyYXRlZWAgdG8gZWFjaCBpdGVtIGluIHBhcmFsbGVsLFxuICAgICAqIHRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IHRoZSBgaXRlcmF0ZWVgIGZ1bmN0aW9ucyB3aWxsIGNvbXBsZXRlIGluIG9yZGVyLlxuICAgICAqIEhvd2V2ZXIsIHRoZSB2YWx1ZXMgZm9yIGVhY2gga2V5IGluIHRoZSBgcmVzdWx0YCB3aWxsIGJlIGluIHRoZSBzYW1lIG9yZGVyIGFzXG4gICAgICogdGhlIG9yaWdpbmFsIGBjb2xsYC4gRm9yIE9iamVjdHMsIHRoZSB2YWx1ZXMgd2lsbCByb3VnaGx5IGJlIGluIHRoZSBvcmRlciBvZlxuICAgICAqIHRoZSBvcmlnaW5hbCBPYmplY3RzJyBrZXlzIChidXQgdGhpcyBjYW4gdmFyeSBhY3Jvc3MgSmF2YVNjcmlwdCBlbmdpbmVzKS5cbiAgICAgKlxuICAgICAqIEBuYW1lIGdyb3VwQnlcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBbiBhc3luYyBmdW5jdGlvbiB0byBhcHBseSB0byBlYWNoIGl0ZW0gaW5cbiAgICAgKiBgY29sbGAuXG4gICAgICogVGhlIGl0ZXJhdGVlIHNob3VsZCBjb21wbGV0ZSB3aXRoIGEgYGtleWAgdG8gZ3JvdXAgdGhlIHZhbHVlIHVuZGVyLlxuICAgICAqIEludm9rZWQgd2l0aCAodmFsdWUsIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgd2hlbiBhbGwgYGl0ZXJhdGVlYFxuICAgICAqIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLCBvciBhbiBlcnJvciBvY2N1cnMuIFJlc3VsdCBpcyBhbiBgT2JqZWN0YCB3aG9zZXNcbiAgICAgKiBwcm9wZXJ0aWVzIGFyZSBhcnJheXMgb2YgdmFsdWVzIHdoaWNoIHJldHVybmVkIHRoZSBjb3JyZXNwb25kaW5nIGtleS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBpcyBwYXNzZWRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gZGlyMSBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGZpbGUxLnR4dCwgZmlsZTIudHh0XG4gICAgICogLy8gZGlyMiBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGZpbGUzLnR4dCwgZmlsZTQudHh0XG4gICAgICogLy8gZGlyMyBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGZpbGU1LnR4dFxuICAgICAqIC8vIGRpcjQgZG9lcyBub3QgZXhpc3RcbiAgICAgKlxuICAgICAqIGNvbnN0IGZpbGVzID0gWydkaXIxL2ZpbGUxLnR4dCcsJ2RpcjInLCdkaXI0J11cbiAgICAgKlxuICAgICAqIC8vIGFzeW5jaHJvbm91cyBmdW5jdGlvbiB0aGF0IGRldGVjdHMgZmlsZSB0eXBlIGFzIG5vbmUsIGZpbGUsIG9yIGRpcmVjdG9yeVxuICAgICAqIGZ1bmN0aW9uIGRldGVjdEZpbGUoZmlsZSwgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgZnMuc3RhdChmaWxlLCBmdW5jdGlvbihlcnIsIHN0YXQpIHtcbiAgICAgKiAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgKiAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCwgJ25vbmUnKTtcbiAgICAgKiAgICAgICAgIH1cbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsIHN0YXQuaXNEaXJlY3RvcnkoKSA/ICdkaXJlY3RvcnknIDogJ2ZpbGUnKTtcbiAgICAgKiAgICAgfSk7XG4gICAgICogfVxuICAgICAqXG4gICAgICogLy9Vc2luZyBjYWxsYmFja3NcbiAgICAgKiBhc3luYy5ncm91cEJ5KGZpbGVzLCBkZXRlY3RGaWxlLCBmdW5jdGlvbihlcnIsIHJlc3VsdCkge1xuICAgICAqICAgICBpZihlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgIH0gZWxzZSB7XG4gICAgICpcdCAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAgICAgLy8ge1xuICAgICAqICAgICAgICAgLy8gICAgIGZpbGU6IFsgJ2RpcjEvZmlsZTEudHh0JyBdLFxuICAgICAqICAgICAgICAgLy8gICAgIG5vbmU6IFsgJ2RpcjQnIF0sXG4gICAgICogICAgICAgICAvLyAgICAgZGlyZWN0b3J5OiBbICdkaXIyJ11cbiAgICAgKiAgICAgICAgIC8vIH1cbiAgICAgKiAgICAgICAgIC8vIHJlc3VsdCBpcyBvYmplY3QgY29udGFpbmluZyB0aGUgZmlsZXMgZ3JvdXBlZCBieSB0eXBlXG4gICAgICogICAgIH1cbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIFByb21pc2VzXG4gICAgICogYXN5bmMuZ3JvdXBCeShmaWxlcywgZGV0ZWN0RmlsZSlcbiAgICAgKiAudGhlbiggcmVzdWx0ID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgLy8ge1xuICAgICAqICAgICAvLyAgICAgZmlsZTogWyAnZGlyMS9maWxlMS50eHQnIF0sXG4gICAgICogICAgIC8vICAgICBub25lOiBbICdkaXI0JyBdLFxuICAgICAqICAgICAvLyAgICAgZGlyZWN0b3J5OiBbICdkaXIyJ11cbiAgICAgKiAgICAgLy8gfVxuICAgICAqICAgICAvLyByZXN1bHQgaXMgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGZpbGVzIGdyb3VwZWQgYnkgdHlwZVxuICAgICAqIH0pLmNhdGNoKCBlcnIgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgYXN5bmMvYXdhaXRcbiAgICAgKiBhc3luYyAoKSA9PiB7XG4gICAgICogICAgIHRyeSB7XG4gICAgICogICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgYXN5bmMuZ3JvdXBCeShmaWxlcywgZGV0ZWN0RmlsZSk7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAgICAgLy8ge1xuICAgICAqICAgICAgICAgLy8gICAgIGZpbGU6IFsgJ2RpcjEvZmlsZTEudHh0JyBdLFxuICAgICAqICAgICAgICAgLy8gICAgIG5vbmU6IFsgJ2RpcjQnIF0sXG4gICAgICogICAgICAgICAvLyAgICAgZGlyZWN0b3J5OiBbICdkaXIyJ11cbiAgICAgKiAgICAgICAgIC8vIH1cbiAgICAgKiAgICAgICAgIC8vIHJlc3VsdCBpcyBvYmplY3QgY29udGFpbmluZyB0aGUgZmlsZXMgZ3JvdXBlZCBieSB0eXBlXG4gICAgICogICAgIH1cbiAgICAgKiAgICAgY2F0Y2ggKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdyb3VwQnkgKGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gZ3JvdXBCeUxpbWl0JDEoY29sbCwgSW5maW5pdHksIGl0ZXJhdGVlLCBjYWxsYmFjaylcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyBbYGdyb3VwQnlgXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZ3JvdXBCeX0gYnV0IHJ1bnMgb25seSBhIHNpbmdsZSBhc3luYyBvcGVyYXRpb24gYXQgYSB0aW1lLlxuICAgICAqXG4gICAgICogQG5hbWUgZ3JvdXBCeVNlcmllc1xuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLmdyb3VwQnlde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5ncm91cEJ5fVxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEFuIGFzeW5jIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggaXRlbSBpblxuICAgICAqIGBjb2xsYC5cbiAgICAgKiBUaGUgaXRlcmF0ZWUgc2hvdWxkIGNvbXBsZXRlIHdpdGggYSBga2V5YCB0byBncm91cCB0aGUgdmFsdWUgdW5kZXIuXG4gICAgICogSW52b2tlZCB3aXRoICh2YWx1ZSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCB3aGVuIGFsbCBgaXRlcmF0ZWVgXG4gICAgICogZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQsIG9yIGFuIGVycm9yIG9jY3Vycy4gUmVzdWx0IGlzIGFuIGBPYmplY3RgIHdob3NlXG4gICAgICogcHJvcGVydGllcyBhcmUgYXJyYXlzIG9mIHZhbHVlcyB3aGljaCByZXR1cm5lZCB0aGUgY29ycmVzcG9uZGluZyBrZXkuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgaXMgcGFzc2VkXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ3JvdXBCeVNlcmllcyAoY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBncm91cEJ5TGltaXQkMShjb2xsLCAxLCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTG9ncyB0aGUgcmVzdWx0IG9mIGFuIGBhc3luY2AgZnVuY3Rpb24gdG8gdGhlIGBjb25zb2xlYC4gT25seSB3b3JrcyBpblxuICAgICAqIE5vZGUuanMgb3IgaW4gYnJvd3NlcnMgdGhhdCBzdXBwb3J0IGBjb25zb2xlLmxvZ2AgYW5kIGBjb25zb2xlLmVycm9yYCAoc3VjaFxuICAgICAqIGFzIEZGIGFuZCBDaHJvbWUpLiBJZiBtdWx0aXBsZSBhcmd1bWVudHMgYXJlIHJldHVybmVkIGZyb20gdGhlIGFzeW5jXG4gICAgICogZnVuY3Rpb24sIGBjb25zb2xlLmxvZ2AgaXMgY2FsbGVkIG9uIGVhY2ggYXJndW1lbnQgaW4gb3JkZXIuXG4gICAgICpcbiAgICAgKiBAbmFtZSBsb2dcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpVdGlsc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gZnVuY3Rpb24gLSBUaGUgZnVuY3Rpb24geW91IHdhbnQgdG8gZXZlbnR1YWxseSBhcHBseVxuICAgICAqIGFsbCBhcmd1bWVudHMgdG8uXG4gICAgICogQHBhcmFtIHsuLi4qfSBhcmd1bWVudHMuLi4gLSBBbnkgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBhcHBseSB0byB0aGUgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vIGluIGEgbW9kdWxlXG4gICAgICogdmFyIGhlbGxvID0gZnVuY3Rpb24obmFtZSwgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsICdoZWxsbyAnICsgbmFtZSk7XG4gICAgICogICAgIH0sIDEwMDApO1xuICAgICAqIH07XG4gICAgICpcbiAgICAgKiAvLyBpbiB0aGUgbm9kZSByZXBsXG4gICAgICogbm9kZT4gYXN5bmMubG9nKGhlbGxvLCAnd29ybGQnKTtcbiAgICAgKiAnaGVsbG8gd29ybGQnXG4gICAgICovXG4gICAgdmFyIGxvZyA9IGNvbnNvbGVGdW5jKCdsb2cnKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzYW1lIGFzIFtgbWFwVmFsdWVzYF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLm1hcFZhbHVlc30gYnV0IHJ1bnMgYSBtYXhpbXVtIG9mIGBsaW1pdGAgYXN5bmMgb3BlcmF0aW9ucyBhdCBhXG4gICAgICogdGltZS5cbiAgICAgKlxuICAgICAqIEBuYW1lIG1hcFZhbHVlc0xpbWl0XG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMubWFwVmFsdWVzXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMubWFwVmFsdWVzfVxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iaiAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbWl0IC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGFzeW5jIG9wZXJhdGlvbnMgYXQgYSB0aW1lLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggdmFsdWUgYW5kIGtleVxuICAgICAqIGluIGBjb2xsYC5cbiAgICAgKiBUaGUgaXRlcmF0ZWUgc2hvdWxkIGNvbXBsZXRlIHdpdGggdGhlIHRyYW5zZm9ybWVkIHZhbHVlIGFzIGl0cyByZXN1bHQuXG4gICAgICogSW52b2tlZCB3aXRoICh2YWx1ZSwga2V5LCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIHdoZW4gYWxsIGBpdGVyYXRlZWBcbiAgICAgKiBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZCwgb3IgYW4gZXJyb3Igb2NjdXJzLiBgcmVzdWx0YCBpcyBhIG5ldyBvYmplY3QgY29uc2lzdGluZ1xuICAgICAqIG9mIGVhY2gga2V5IGZyb20gYG9iamAsIHdpdGggZWFjaCB0cmFuc2Zvcm1lZCB2YWx1ZSBvbiB0aGUgcmlnaHQtaGFuZCBzaWRlLlxuICAgICAqIEludm9rZWQgd2l0aCAoZXJyLCByZXN1bHQpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIG5vIGNhbGxiYWNrIGlzIHBhc3NlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1hcFZhbHVlc0xpbWl0KG9iaiwgbGltaXQsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IG9uY2UoY2FsbGJhY2spO1xuICAgICAgICB2YXIgbmV3T2JqID0ge307XG4gICAgICAgIHZhciBfaXRlcmF0ZWUgPSB3cmFwQXN5bmMoaXRlcmF0ZWUpO1xuICAgICAgICByZXR1cm4gZWFjaE9mTGltaXQkMihsaW1pdCkob2JqLCAodmFsLCBrZXksIG5leHQpID0+IHtcbiAgICAgICAgICAgIF9pdGVyYXRlZSh2YWwsIGtleSwgKGVyciwgcmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikgcmV0dXJuIG5leHQoZXJyKTtcbiAgICAgICAgICAgICAgICBuZXdPYmpba2V5XSA9IHJlc3VsdDtcbiAgICAgICAgICAgICAgICBuZXh0KGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZXJyID0+IGNhbGxiYWNrKGVyciwgbmV3T2JqKSk7XG4gICAgfVxuXG4gICAgdmFyIG1hcFZhbHVlc0xpbWl0JDEgPSBhd2FpdGlmeShtYXBWYWx1ZXNMaW1pdCwgNCk7XG5cbiAgICAvKipcbiAgICAgKiBBIHJlbGF0aXZlIG9mIFtgbWFwYF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLm1hcH0sIGRlc2lnbmVkIGZvciB1c2Ugd2l0aCBvYmplY3RzLlxuICAgICAqXG4gICAgICogUHJvZHVjZXMgYSBuZXcgT2JqZWN0IGJ5IG1hcHBpbmcgZWFjaCB2YWx1ZSBvZiBgb2JqYCB0aHJvdWdoIHRoZSBgaXRlcmF0ZWVgXG4gICAgICogZnVuY3Rpb24uIFRoZSBgaXRlcmF0ZWVgIGlzIGNhbGxlZCBlYWNoIGB2YWx1ZWAgYW5kIGBrZXlgIGZyb20gYG9iamAgYW5kIGFcbiAgICAgKiBjYWxsYmFjayBmb3Igd2hlbiBpdCBoYXMgZmluaXNoZWQgcHJvY2Vzc2luZy4gRWFjaCBvZiB0aGVzZSBjYWxsYmFja3MgdGFrZXNcbiAgICAgKiB0d28gYXJndW1lbnRzOiBhbiBgZXJyb3JgLCBhbmQgdGhlIHRyYW5zZm9ybWVkIGl0ZW0gZnJvbSBgb2JqYC4gSWYgYGl0ZXJhdGVlYFxuICAgICAqIHBhc3NlcyBhbiBlcnJvciB0byBpdHMgY2FsbGJhY2ssIHRoZSBtYWluIGBjYWxsYmFja2AgKGZvciB0aGUgYG1hcFZhbHVlc2BcbiAgICAgKiBmdW5jdGlvbikgaXMgaW1tZWRpYXRlbHkgY2FsbGVkIHdpdGggdGhlIGVycm9yLlxuICAgICAqXG4gICAgICogTm90ZSwgdGhlIG9yZGVyIG9mIHRoZSBrZXlzIGluIHRoZSByZXN1bHQgaXMgbm90IGd1YXJhbnRlZWQuICBUaGUga2V5cyB3aWxsXG4gICAgICogYmUgcm91Z2hseSBpbiB0aGUgb3JkZXIgdGhleSBjb21wbGV0ZSwgKGJ1dCB0aGlzIGlzIHZlcnkgZW5naW5lLXNwZWNpZmljKVxuICAgICAqXG4gICAgICogQG5hbWUgbWFwVmFsdWVzXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQSBmdW5jdGlvbiB0byBhcHBseSB0byBlYWNoIHZhbHVlIGFuZCBrZXlcbiAgICAgKiBpbiBgY29sbGAuXG4gICAgICogVGhlIGl0ZXJhdGVlIHNob3VsZCBjb21wbGV0ZSB3aXRoIHRoZSB0cmFuc2Zvcm1lZCB2YWx1ZSBhcyBpdHMgcmVzdWx0LlxuICAgICAqIEludm9rZWQgd2l0aCAodmFsdWUsIGtleSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCB3aGVuIGFsbCBgaXRlcmF0ZWVgXG4gICAgICogZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQsIG9yIGFuIGVycm9yIG9jY3Vycy4gYHJlc3VsdGAgaXMgYSBuZXcgb2JqZWN0IGNvbnNpc3RpbmdcbiAgICAgKiBvZiBlYWNoIGtleSBmcm9tIGBvYmpgLCB3aXRoIGVhY2ggdHJhbnNmb3JtZWQgdmFsdWUgb24gdGhlIHJpZ2h0LWhhbmQgc2lkZS5cbiAgICAgKiBJbnZva2VkIHdpdGggKGVyciwgcmVzdWx0KS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBpcyBwYXNzZWRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gZmlsZTEudHh0IGlzIGEgZmlsZSB0aGF0IGlzIDEwMDAgYnl0ZXMgaW4gc2l6ZVxuICAgICAqIC8vIGZpbGUyLnR4dCBpcyBhIGZpbGUgdGhhdCBpcyAyMDAwIGJ5dGVzIGluIHNpemVcbiAgICAgKiAvLyBmaWxlMy50eHQgaXMgYSBmaWxlIHRoYXQgaXMgMzAwMCBieXRlcyBpbiBzaXplXG4gICAgICogLy8gZmlsZTQudHh0IGRvZXMgbm90IGV4aXN0XG4gICAgICpcbiAgICAgKiBjb25zdCBmaWxlTWFwID0ge1xuICAgICAqICAgICBmMTogJ2ZpbGUxLnR4dCcsXG4gICAgICogICAgIGYyOiAnZmlsZTIudHh0JyxcbiAgICAgKiAgICAgZjM6ICdmaWxlMy50eHQnXG4gICAgICogfTtcbiAgICAgKlxuICAgICAqIGNvbnN0IHdpdGhNaXNzaW5nRmlsZU1hcCA9IHtcbiAgICAgKiAgICAgZjE6ICdmaWxlMS50eHQnLFxuICAgICAqICAgICBmMjogJ2ZpbGUyLnR4dCcsXG4gICAgICogICAgIGYzOiAnZmlsZTQudHh0J1xuICAgICAqIH07XG4gICAgICpcbiAgICAgKiAvLyBhc3luY2hyb25vdXMgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBmaWxlIHNpemUgaW4gYnl0ZXNcbiAgICAgKiBmdW5jdGlvbiBnZXRGaWxlU2l6ZUluQnl0ZXMoZmlsZSwga2V5LCBjYWxsYmFjaykge1xuICAgICAqICAgICBmcy5zdGF0KGZpbGUsIGZ1bmN0aW9uKGVyciwgc3RhdCkge1xuICAgICAqICAgICAgICAgaWYgKGVycikge1xuICAgICAqICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAqICAgICAgICAgfVxuICAgICAqICAgICAgICAgY2FsbGJhY2sobnVsbCwgc3RhdC5zaXplKTtcbiAgICAgKiAgICAgfSk7XG4gICAgICogfVxuICAgICAqXG4gICAgICogLy8gVXNpbmcgY2FsbGJhY2tzXG4gICAgICogYXN5bmMubWFwVmFsdWVzKGZpbGVNYXAsIGdldEZpbGVTaXplSW5CeXRlcywgZnVuY3Rpb24oZXJyLCByZXN1bHQpIHtcbiAgICAgKiAgICAgaWYgKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgfSBlbHNlIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XG4gICAgICogICAgICAgICAvLyByZXN1bHQgaXMgbm93IGEgbWFwIG9mIGZpbGUgc2l6ZSBpbiBieXRlcyBmb3IgZWFjaCBmaWxlLCBlLmcuXG4gICAgICogICAgICAgICAvLyB7XG4gICAgICogICAgICAgICAvLyAgICAgZjE6IDEwMDAsXG4gICAgICogICAgICAgICAvLyAgICAgZjI6IDIwMDAsXG4gICAgICogICAgICAgICAvLyAgICAgZjM6IDMwMDBcbiAgICAgKiAgICAgICAgIC8vIH1cbiAgICAgKiAgICAgfVxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gRXJyb3IgaGFuZGxpbmdcbiAgICAgKiBhc3luYy5tYXBWYWx1ZXMod2l0aE1pc3NpbmdGaWxlTWFwLCBnZXRGaWxlU2l6ZUluQnl0ZXMsIGZ1bmN0aW9uKGVyciwgcmVzdWx0KSB7XG4gICAgICogICAgIGlmIChlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgICAgICAvLyBbIEVycm9yOiBFTk9FTlQ6IG5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkgXVxuICAgICAqICAgICB9IGVsc2Uge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgfVxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgUHJvbWlzZXNcbiAgICAgKiBhc3luYy5tYXBWYWx1ZXMoZmlsZU1hcCwgZ2V0RmlsZVNpemVJbkJ5dGVzKVxuICAgICAqIC50aGVuKCByZXN1bHQgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAvLyByZXN1bHQgaXMgbm93IGEgbWFwIG9mIGZpbGUgc2l6ZSBpbiBieXRlcyBmb3IgZWFjaCBmaWxlLCBlLmcuXG4gICAgICogICAgIC8vIHtcbiAgICAgKiAgICAgLy8gICAgIGYxOiAxMDAwLFxuICAgICAqICAgICAvLyAgICAgZjI6IDIwMDAsXG4gICAgICogICAgIC8vICAgICBmMzogMzAwMFxuICAgICAqICAgICAvLyB9XG4gICAgICogfSkuY2F0Y2ggKGVyciA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBFcnJvciBIYW5kbGluZ1xuICAgICAqIGFzeW5jLm1hcFZhbHVlcyh3aXRoTWlzc2luZ0ZpbGVNYXAsIGdldEZpbGVTaXplSW5CeXRlcylcbiAgICAgKiAudGhlbiggcmVzdWx0ID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiB9KS5jYXRjaCAoZXJyID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgLy8gWyBFcnJvcjogRU5PRU5UOiBubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IF1cbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIGFzeW5jL2F3YWl0XG4gICAgICogYXN5bmMgKCkgPT4ge1xuICAgICAqICAgICB0cnkge1xuICAgICAqICAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IGFzeW5jLm1hcFZhbHVlcyhmaWxlTWFwLCBnZXRGaWxlU2l6ZUluQnl0ZXMpO1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgICAgIC8vIHJlc3VsdCBpcyBub3cgYSBtYXAgb2YgZmlsZSBzaXplIGluIGJ5dGVzIGZvciBlYWNoIGZpbGUsIGUuZy5cbiAgICAgKiAgICAgICAgIC8vIHtcbiAgICAgKiAgICAgICAgIC8vICAgICBmMTogMTAwMCxcbiAgICAgKiAgICAgICAgIC8vICAgICBmMjogMjAwMCxcbiAgICAgKiAgICAgICAgIC8vICAgICBmMzogMzAwMFxuICAgICAqICAgICAgICAgLy8gfVxuICAgICAqICAgICB9XG4gICAgICogICAgIGNhdGNoIChlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgIH1cbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBFcnJvciBIYW5kbGluZ1xuICAgICAqIGFzeW5jICgpID0+IHtcbiAgICAgKiAgICAgdHJ5IHtcbiAgICAgKiAgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBhc3luYy5tYXBWYWx1ZXMod2l0aE1pc3NpbmdGaWxlTWFwLCBnZXRGaWxlU2l6ZUluQnl0ZXMpO1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICAgICAgLy8gWyBFcnJvcjogRU5PRU5UOiBubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IF1cbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1hcFZhbHVlcyhvYmosIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gbWFwVmFsdWVzTGltaXQkMShvYmosIEluZmluaXR5LCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIHNhbWUgYXMgW2BtYXBWYWx1ZXNgXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMubWFwVmFsdWVzfSBidXQgcnVucyBvbmx5IGEgc2luZ2xlIGFzeW5jIG9wZXJhdGlvbiBhdCBhIHRpbWUuXG4gICAgICpcbiAgICAgKiBAbmFtZSBtYXBWYWx1ZXNTZXJpZXNcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5tYXBWYWx1ZXNde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5tYXBWYWx1ZXN9XG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQSBmdW5jdGlvbiB0byBhcHBseSB0byBlYWNoIHZhbHVlIGFuZCBrZXlcbiAgICAgKiBpbiBgY29sbGAuXG4gICAgICogVGhlIGl0ZXJhdGVlIHNob3VsZCBjb21wbGV0ZSB3aXRoIHRoZSB0cmFuc2Zvcm1lZCB2YWx1ZSBhcyBpdHMgcmVzdWx0LlxuICAgICAqIEludm9rZWQgd2l0aCAodmFsdWUsIGtleSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCB3aGVuIGFsbCBgaXRlcmF0ZWVgXG4gICAgICogZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQsIG9yIGFuIGVycm9yIG9jY3Vycy4gYHJlc3VsdGAgaXMgYSBuZXcgb2JqZWN0IGNvbnNpc3RpbmdcbiAgICAgKiBvZiBlYWNoIGtleSBmcm9tIGBvYmpgLCB3aXRoIGVhY2ggdHJhbnNmb3JtZWQgdmFsdWUgb24gdGhlIHJpZ2h0LWhhbmQgc2lkZS5cbiAgICAgKiBJbnZva2VkIHdpdGggKGVyciwgcmVzdWx0KS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBpcyBwYXNzZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtYXBWYWx1ZXNTZXJpZXMob2JqLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIG1hcFZhbHVlc0xpbWl0JDEob2JqLCAxLCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FjaGVzIHRoZSByZXN1bHRzIG9mIGFuIGFzeW5jIGZ1bmN0aW9uLiBXaGVuIGNyZWF0aW5nIGEgaGFzaCB0byBzdG9yZVxuICAgICAqIGZ1bmN0aW9uIHJlc3VsdHMgYWdhaW5zdCwgdGhlIGNhbGxiYWNrIGlzIG9taXR0ZWQgZnJvbSB0aGUgaGFzaCBhbmQgYW5cbiAgICAgKiBvcHRpb25hbCBoYXNoIGZ1bmN0aW9uIGNhbiBiZSB1c2VkLlxuICAgICAqXG4gICAgICogKipOb3RlOiBpZiB0aGUgYXN5bmMgZnVuY3Rpb24gZXJycywgdGhlIHJlc3VsdCB3aWxsIG5vdCBiZSBjYWNoZWQgYW5kXG4gICAgICogc3Vic2VxdWVudCBjYWxscyB3aWxsIGNhbGwgdGhlIHdyYXBwZWQgZnVuY3Rpb24uKipcbiAgICAgKlxuICAgICAqIElmIG5vIGhhc2ggZnVuY3Rpb24gaXMgc3BlY2lmaWVkLCB0aGUgZmlyc3QgYXJndW1lbnQgaXMgdXNlZCBhcyBhIGhhc2gga2V5LFxuICAgICAqIHdoaWNoIG1heSB3b3JrIHJlYXNvbmFibHkgaWYgaXQgaXMgYSBzdHJpbmcgb3IgYSBkYXRhIHR5cGUgdGhhdCBjb252ZXJ0cyB0byBhXG4gICAgICogZGlzdGluY3Qgc3RyaW5nLiBOb3RlIHRoYXQgb2JqZWN0cyBhbmQgYXJyYXlzIHdpbGwgbm90IGJlaGF2ZSByZWFzb25hYmx5LlxuICAgICAqIE5laXRoZXIgd2lsbCBjYXNlcyB3aGVyZSB0aGUgb3RoZXIgYXJndW1lbnRzIGFyZSBzaWduaWZpY2FudC4gSW4gc3VjaCBjYXNlcyxcbiAgICAgKiBzcGVjaWZ5IHlvdXIgb3duIGhhc2ggZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBUaGUgY2FjaGUgb2YgcmVzdWx0cyBpcyBleHBvc2VkIGFzIHRoZSBgbWVtb2AgcHJvcGVydHkgb2YgdGhlIGZ1bmN0aW9uXG4gICAgICogcmV0dXJuZWQgYnkgYG1lbW9pemVgLlxuICAgICAqXG4gICAgICogQG5hbWUgbWVtb2l6ZVxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOlV0aWxzXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBmbiAtIFRoZSBhc3luYyBmdW5jdGlvbiB0byBwcm94eSBhbmQgY2FjaGUgcmVzdWx0cyBmcm9tLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGhhc2hlciAtIEFuIG9wdGlvbmFsIGZ1bmN0aW9uIGZvciBnZW5lcmF0aW5nIGEgY3VzdG9tIGhhc2hcbiAgICAgKiBmb3Igc3RvcmluZyByZXN1bHRzLiBJdCBoYXMgYWxsIHRoZSBhcmd1bWVudHMgYXBwbGllZCB0byBpdCBhcGFydCBmcm9tIHRoZVxuICAgICAqIGNhbGxiYWNrLCBhbmQgbXVzdCBiZSBzeW5jaHJvbm91cy5cbiAgICAgKiBAcmV0dXJucyB7QXN5bmNGdW5jdGlvbn0gYSBtZW1vaXplZCB2ZXJzaW9uIG9mIGBmbmBcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHNsb3dfZm4gPSBmdW5jdGlvbihuYW1lLCBjYWxsYmFjaykge1xuICAgICAqICAgICAvLyBkbyBzb21ldGhpbmdcbiAgICAgKiAgICAgY2FsbGJhY2sobnVsbCwgcmVzdWx0KTtcbiAgICAgKiB9O1xuICAgICAqIHZhciBmbiA9IGFzeW5jLm1lbW9pemUoc2xvd19mbik7XG4gICAgICpcbiAgICAgKiAvLyBmbiBjYW4gbm93IGJlIHVzZWQgYXMgaWYgaXQgd2VyZSBzbG93X2ZuXG4gICAgICogZm4oJ3NvbWUgbmFtZScsIGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAvLyBjYWxsYmFja1xuICAgICAqIH0pO1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1lbW9pemUoZm4sIGhhc2hlciA9IHYgPT4gdikge1xuICAgICAgICB2YXIgbWVtbyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIHZhciBxdWV1ZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICB2YXIgX2ZuID0gd3JhcEFzeW5jKGZuKTtcbiAgICAgICAgdmFyIG1lbW9pemVkID0gaW5pdGlhbFBhcmFtcygoYXJncywgY2FsbGJhY2spID0+IHtcbiAgICAgICAgICAgIHZhciBrZXkgPSBoYXNoZXIoLi4uYXJncyk7XG4gICAgICAgICAgICBpZiAoa2V5IGluIG1lbW8pIHtcbiAgICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUkMSgoKSA9PiBjYWxsYmFjayhudWxsLCAuLi5tZW1vW2tleV0pKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5IGluIHF1ZXVlcykge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XSA9IFtjYWxsYmFja107XG4gICAgICAgICAgICAgICAgX2ZuKC4uLmFyZ3MsIChlcnIsIC4uLnJlc3VsdEFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gIzE0NjUgZG9uJ3QgbWVtb2l6ZSBpZiBhbiBlcnJvciBvY2N1cnJlZFxuICAgICAgICAgICAgICAgICAgICBpZiAoIWVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWVtb1trZXldID0gcmVzdWx0QXJncztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB2YXIgcSA9IHF1ZXVlc1trZXldO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gcS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHFbaV0oZXJyLCAuLi5yZXN1bHRBcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbWVtb2l6ZWQubWVtbyA9IG1lbW87XG4gICAgICAgIG1lbW9pemVkLnVubWVtb2l6ZWQgPSBmbjtcbiAgICAgICAgcmV0dXJuIG1lbW9pemVkO1xuICAgIH1cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBmaWxlICovXG5cbiAgICAvKipcbiAgICAgKiBDYWxscyBgY2FsbGJhY2tgIG9uIGEgbGF0ZXIgbG9vcCBhcm91bmQgdGhlIGV2ZW50IGxvb3AuIEluIE5vZGUuanMgdGhpcyBqdXN0XG4gICAgICogY2FsbHMgYHByb2Nlc3MubmV4dFRpY2tgLiAgSW4gdGhlIGJyb3dzZXIgaXQgd2lsbCB1c2UgYHNldEltbWVkaWF0ZWAgaWZcbiAgICAgKiBhdmFpbGFibGUsIG90aGVyd2lzZSBgc2V0VGltZW91dChjYWxsYmFjaywgMClgLCB3aGljaCBtZWFucyBvdGhlciBoaWdoZXJcbiAgICAgKiBwcmlvcml0eSBldmVudHMgbWF5IHByZWNlZGUgdGhlIGV4ZWN1dGlvbiBvZiBgY2FsbGJhY2tgLlxuICAgICAqXG4gICAgICogVGhpcyBpcyB1c2VkIGludGVybmFsbHkgZm9yIGJyb3dzZXItY29tcGF0aWJpbGl0eSBwdXJwb3Nlcy5cbiAgICAgKlxuICAgICAqIEBuYW1lIG5leHRUaWNrXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6VXRpbHNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMuc2V0SW1tZWRpYXRlXXtAbGluayBtb2R1bGU6VXRpbHMuc2V0SW1tZWRpYXRlfVxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgLSBUaGUgZnVuY3Rpb24gdG8gY2FsbCBvbiBhIGxhdGVyIGxvb3AgYXJvdW5kXG4gICAgICogdGhlIGV2ZW50IGxvb3AuIEludm9rZWQgd2l0aCAoYXJncy4uLikuXG4gICAgICogQHBhcmFtIHsuLi4qfSBhcmdzLi4uIC0gYW55IG51bWJlciBvZiBhZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZVxuICAgICAqIGNhbGxiYWNrIG9uIHRoZSBuZXh0IHRpY2suXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBjYWxsX29yZGVyID0gW107XG4gICAgICogYXN5bmMubmV4dFRpY2soZnVuY3Rpb24oKSB7XG4gICAgICogICAgIGNhbGxfb3JkZXIucHVzaCgndHdvJyk7XG4gICAgICogICAgIC8vIGNhbGxfb3JkZXIgbm93IGVxdWFscyBbJ29uZScsJ3R3byddXG4gICAgICogfSk7XG4gICAgICogY2FsbF9vcmRlci5wdXNoKCdvbmUnKTtcbiAgICAgKlxuICAgICAqIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgICAqICAgICAvLyBhLCBiLCBhbmQgYyBlcXVhbCAxLCAyLCBhbmQgM1xuICAgICAqIH0sIDEsIDIsIDMpO1xuICAgICAqL1xuICAgIHZhciBfZGVmZXI7XG5cbiAgICBpZiAoaGFzTmV4dFRpY2spIHtcbiAgICAgICAgX2RlZmVyID0gcHJvY2Vzcy5uZXh0VGljaztcbiAgICB9IGVsc2UgaWYgKGhhc1NldEltbWVkaWF0ZSkge1xuICAgICAgICBfZGVmZXIgPSBzZXRJbW1lZGlhdGU7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgX2RlZmVyID0gZmFsbGJhY2s7XG4gICAgfVxuXG4gICAgdmFyIG5leHRUaWNrID0gd3JhcChfZGVmZXIpO1xuXG4gICAgdmFyIF9wYXJhbGxlbCA9IGF3YWl0aWZ5KChlYWNoZm4sIHRhc2tzLCBjYWxsYmFjaykgPT4ge1xuICAgICAgICB2YXIgcmVzdWx0cyA9IGlzQXJyYXlMaWtlKHRhc2tzKSA/IFtdIDoge307XG5cbiAgICAgICAgZWFjaGZuKHRhc2tzLCAodGFzaywga2V5LCB0YXNrQ2IpID0+IHtcbiAgICAgICAgICAgIHdyYXBBc3luYyh0YXNrKSgoZXJyLCAuLi5yZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgW3Jlc3VsdF0gPSByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdHNba2V5XSA9IHJlc3VsdDtcbiAgICAgICAgICAgICAgICB0YXNrQ2IoZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBlcnIgPT4gY2FsbGJhY2soZXJyLCByZXN1bHRzKSk7XG4gICAgfSwgMyk7XG5cbiAgICAvKipcbiAgICAgKiBSdW4gdGhlIGB0YXNrc2AgY29sbGVjdGlvbiBvZiBmdW5jdGlvbnMgaW4gcGFyYWxsZWwsIHdpdGhvdXQgd2FpdGluZyB1bnRpbFxuICAgICAqIHRoZSBwcmV2aW91cyBmdW5jdGlvbiBoYXMgY29tcGxldGVkLiBJZiBhbnkgb2YgdGhlIGZ1bmN0aW9ucyBwYXNzIGFuIGVycm9yIHRvXG4gICAgICogaXRzIGNhbGxiYWNrLCB0aGUgbWFpbiBgY2FsbGJhY2tgIGlzIGltbWVkaWF0ZWx5IGNhbGxlZCB3aXRoIHRoZSB2YWx1ZSBvZiB0aGVcbiAgICAgKiBlcnJvci4gT25jZSB0aGUgYHRhc2tzYCBoYXZlIGNvbXBsZXRlZCwgdGhlIHJlc3VsdHMgYXJlIHBhc3NlZCB0byB0aGUgZmluYWxcbiAgICAgKiBgY2FsbGJhY2tgIGFzIGFuIGFycmF5LlxuICAgICAqXG4gICAgICogKipOb3RlOioqIGBwYXJhbGxlbGAgaXMgYWJvdXQga2lja2luZy1vZmYgSS9PIHRhc2tzIGluIHBhcmFsbGVsLCBub3QgYWJvdXRcbiAgICAgKiBwYXJhbGxlbCBleGVjdXRpb24gb2YgY29kZS4gIElmIHlvdXIgdGFza3MgZG8gbm90IHVzZSBhbnkgdGltZXJzIG9yIHBlcmZvcm1cbiAgICAgKiBhbnkgSS9PLCB0aGV5IHdpbGwgYWN0dWFsbHkgYmUgZXhlY3V0ZWQgaW4gc2VyaWVzLiAgQW55IHN5bmNocm9ub3VzIHNldHVwXG4gICAgICogc2VjdGlvbnMgZm9yIGVhY2ggdGFzayB3aWxsIGhhcHBlbiBvbmUgYWZ0ZXIgdGhlIG90aGVyLiAgSmF2YVNjcmlwdCByZW1haW5zXG4gICAgICogc2luZ2xlLXRocmVhZGVkLlxuICAgICAqXG4gICAgICogKipIaW50OioqIFVzZSBbYHJlZmxlY3RgXXtAbGluayBtb2R1bGU6VXRpbHMucmVmbGVjdH0gdG8gY29udGludWUgdGhlXG4gICAgICogZXhlY3V0aW9uIG9mIG90aGVyIHRhc2tzIHdoZW4gYSB0YXNrIGZhaWxzLlxuICAgICAqXG4gICAgICogSXQgaXMgYWxzbyBwb3NzaWJsZSB0byB1c2UgYW4gb2JqZWN0IGluc3RlYWQgb2YgYW4gYXJyYXkuIEVhY2ggcHJvcGVydHkgd2lsbFxuICAgICAqIGJlIHJ1biBhcyBhIGZ1bmN0aW9uIGFuZCB0aGUgcmVzdWx0cyB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZmluYWwgYGNhbGxiYWNrYFxuICAgICAqIGFzIGFuIG9iamVjdCBpbnN0ZWFkIG9mIGFuIGFycmF5LiBUaGlzIGNhbiBiZSBhIG1vcmUgcmVhZGFibGUgd2F5IG9mIGhhbmRsaW5nXG4gICAgICogcmVzdWx0cyBmcm9tIHtAbGluayBhc3luYy5wYXJhbGxlbH0uXG4gICAgICpcbiAgICAgKiBAbmFtZSBwYXJhbGxlbFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbnRyb2xGbG93XG4gICAgICogQG1ldGhvZFxuICAgICAqIEBjYXRlZ29yeSBDb250cm9sIEZsb3dcbiAgICAgKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfEFzeW5jSXRlcmFibGV8T2JqZWN0fSB0YXNrcyAtIEEgY29sbGVjdGlvbiBvZlxuICAgICAqIFthc3luYyBmdW5jdGlvbnNde0BsaW5rIEFzeW5jRnVuY3Rpb259IHRvIHJ1bi5cbiAgICAgKiBFYWNoIGFzeW5jIGZ1bmN0aW9uIGNhbiBjb21wbGV0ZSB3aXRoIGFueSBudW1iZXIgb2Ygb3B0aW9uYWwgYHJlc3VsdGAgdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBbiBvcHRpb25hbCBjYWxsYmFjayB0byBydW4gb25jZSBhbGwgdGhlXG4gICAgICogZnVuY3Rpb25zIGhhdmUgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4gVGhpcyBmdW5jdGlvbiBnZXRzIGEgcmVzdWx0cyBhcnJheVxuICAgICAqIChvciBvYmplY3QpIGNvbnRhaW5pbmcgYWxsIHRoZSByZXN1bHQgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgdGFzayBjYWxsYmFja3MuXG4gICAgICogSW52b2tlZCB3aXRoIChlcnIsIHJlc3VsdHMpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIGEgY2FsbGJhY2sgaXMgbm90IHBhc3NlZFxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vVXNpbmcgQ2FsbGJhY2tzXG4gICAgICogYXN5bmMucGFyYWxsZWwoW1xuICAgICAqICAgICBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCAnb25lJyk7XG4gICAgICogICAgICAgICB9LCAyMDApO1xuICAgICAqICAgICB9LFxuICAgICAqICAgICBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCAndHdvJyk7XG4gICAgICogICAgICAgICB9LCAxMDApO1xuICAgICAqICAgICB9XG4gICAgICogXSwgZnVuY3Rpb24oZXJyLCByZXN1bHRzKSB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgICAvLyByZXN1bHRzIGlzIGVxdWFsIHRvIFsnb25lJywndHdvJ10gZXZlbiB0aG91Z2hcbiAgICAgKiAgICAgLy8gdGhlIHNlY29uZCBmdW5jdGlvbiBoYWQgYSBzaG9ydGVyIHRpbWVvdXQuXG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBhbiBleGFtcGxlIHVzaW5nIGFuIG9iamVjdCBpbnN0ZWFkIG9mIGFuIGFycmF5XG4gICAgICogYXN5bmMucGFyYWxsZWwoe1xuICAgICAqICAgICBvbmU6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIDEpO1xuICAgICAqICAgICAgICAgfSwgMjAwKTtcbiAgICAgKiAgICAgfSxcbiAgICAgKiAgICAgdHdvOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCAyKTtcbiAgICAgKiAgICAgICAgIH0sIDEwMCk7XG4gICAgICogICAgIH1cbiAgICAgKiB9LCBmdW5jdGlvbihlcnIsIHJlc3VsdHMpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgIC8vIHJlc3VsdHMgaXMgZXF1YWwgdG86IHsgb25lOiAxLCB0d286IDIgfVxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy9Vc2luZyBQcm9taXNlc1xuICAgICAqIGFzeW5jLnBhcmFsbGVsKFtcbiAgICAgKiAgICAgZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICogICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ29uZScpO1xuICAgICAqICAgICAgICAgfSwgMjAwKTtcbiAgICAgKiAgICAgfSxcbiAgICAgKiAgICAgZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICogICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ3R3bycpO1xuICAgICAqICAgICAgICAgfSwgMTAwKTtcbiAgICAgKiAgICAgfVxuICAgICAqIF0pLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgICAvLyByZXN1bHRzIGlzIGVxdWFsIHRvIFsnb25lJywndHdvJ10gZXZlbiB0aG91Z2hcbiAgICAgKiAgICAgLy8gdGhlIHNlY29uZCBmdW5jdGlvbiBoYWQgYSBzaG9ydGVyIHRpbWVvdXQuXG4gICAgICogfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIGFuIGV4YW1wbGUgdXNpbmcgYW4gb2JqZWN0IGluc3RlYWQgb2YgYW4gYXJyYXlcbiAgICAgKiBhc3luYy5wYXJhbGxlbCh7XG4gICAgICogICAgIG9uZTogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICogICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgMSk7XG4gICAgICogICAgICAgICB9LCAyMDApO1xuICAgICAqICAgICB9LFxuICAgICAqICAgICB0d286IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIDIpO1xuICAgICAqICAgICAgICAgfSwgMTAwKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH0pLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgICAvLyByZXN1bHRzIGlzIGVxdWFsIHRvOiB7IG9uZTogMSwgdHdvOiAyIH1cbiAgICAgKiB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy9Vc2luZyBhc3luYy9hd2FpdFxuICAgICAqIGFzeW5jICgpID0+IHtcbiAgICAgKiAgICAgdHJ5IHtcbiAgICAgKiAgICAgICAgIGxldCByZXN1bHRzID0gYXdhaXQgYXN5bmMucGFyYWxsZWwoW1xuICAgICAqICAgICAgICAgICAgIGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICogICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCAnb25lJyk7XG4gICAgICogICAgICAgICAgICAgICAgIH0sIDIwMCk7XG4gICAgICogICAgICAgICAgICAgfSxcbiAgICAgKiAgICAgICAgICAgICBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ3R3bycpO1xuICAgICAqICAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgICAqICAgICAgICAgICAgIH1cbiAgICAgKiAgICAgICAgIF0pO1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgICAgICAvLyByZXN1bHRzIGlzIGVxdWFsIHRvIFsnb25lJywndHdvJ10gZXZlbiB0aG91Z2hcbiAgICAgKiAgICAgICAgIC8vIHRoZSBzZWNvbmQgZnVuY3Rpb24gaGFkIGEgc2hvcnRlciB0aW1lb3V0LlxuICAgICAqICAgICB9XG4gICAgICogICAgIGNhdGNoIChlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgIH1cbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBhbiBleGFtcGxlIHVzaW5nIGFuIG9iamVjdCBpbnN0ZWFkIG9mIGFuIGFycmF5XG4gICAgICogYXN5bmMgKCkgPT4ge1xuICAgICAqICAgICB0cnkge1xuICAgICAqICAgICAgICAgbGV0IHJlc3VsdHMgPSBhd2FpdCBhc3luYy5wYXJhbGxlbCh7XG4gICAgICogICAgICAgICAgICAgb25lOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgMSk7XG4gICAgICogICAgICAgICAgICAgICAgIH0sIDIwMCk7XG4gICAgICogICAgICAgICAgICAgfSxcbiAgICAgKiAgICAgICAgICAgIHR3bzogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIDIpO1xuICAgICAqICAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgICAqICAgICAgICAgICAgfVxuICAgICAqICAgICAgICAgfSk7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiAgICAgICAgIC8vIHJlc3VsdHMgaXMgZXF1YWwgdG86IHsgb25lOiAxLCB0d286IDIgfVxuICAgICAqICAgICB9XG4gICAgICogICAgIGNhdGNoIChlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgIH1cbiAgICAgKiB9XG4gICAgICpcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBwYXJhbGxlbCh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9wYXJhbGxlbChlYWNoT2YkMSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyBbYHBhcmFsbGVsYF17QGxpbmsgbW9kdWxlOkNvbnRyb2xGbG93LnBhcmFsbGVsfSBidXQgcnVucyBhIG1heGltdW0gb2YgYGxpbWl0YCBhc3luYyBvcGVyYXRpb25zIGF0IGFcbiAgICAgKiB0aW1lLlxuICAgICAqXG4gICAgICogQG5hbWUgcGFyYWxsZWxMaW1pdFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbnRyb2xGbG93XG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLnBhcmFsbGVsXXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cucGFyYWxsZWx9XG4gICAgICogQGNhdGVnb3J5IENvbnRyb2wgRmxvd1xuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IHRhc2tzIC0gQSBjb2xsZWN0aW9uIG9mXG4gICAgICogW2FzeW5jIGZ1bmN0aW9uc117QGxpbmsgQXN5bmNGdW5jdGlvbn0gdG8gcnVuLlxuICAgICAqIEVhY2ggYXN5bmMgZnVuY3Rpb24gY2FuIGNvbXBsZXRlIHdpdGggYW55IG51bWJlciBvZiBvcHRpb25hbCBgcmVzdWx0YCB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbWl0IC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGFzeW5jIG9wZXJhdGlvbnMgYXQgYSB0aW1lLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBbiBvcHRpb25hbCBjYWxsYmFjayB0byBydW4gb25jZSBhbGwgdGhlXG4gICAgICogZnVuY3Rpb25zIGhhdmUgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4gVGhpcyBmdW5jdGlvbiBnZXRzIGEgcmVzdWx0cyBhcnJheVxuICAgICAqIChvciBvYmplY3QpIGNvbnRhaW5pbmcgYWxsIHRoZSByZXN1bHQgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgdGFzayBjYWxsYmFja3MuXG4gICAgICogSW52b2tlZCB3aXRoIChlcnIsIHJlc3VsdHMpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIGEgY2FsbGJhY2sgaXMgbm90IHBhc3NlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHBhcmFsbGVsTGltaXQodGFza3MsIGxpbWl0LCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX3BhcmFsbGVsKGVhY2hPZkxpbWl0JDIobGltaXQpLCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgcXVldWUgb2YgdGFza3MgZm9yIHRoZSB3b3JrZXIgZnVuY3Rpb24gdG8gY29tcGxldGUuXG4gICAgICogQHR5cGVkZWYge0l0ZXJhYmxlfSBRdWV1ZU9iamVjdFxuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAcHJvcGVydHkge0Z1bmN0aW9ufSBsZW5ndGggLSBhIGZ1bmN0aW9uIHJldHVybmluZyB0aGUgbnVtYmVyIG9mIGl0ZW1zXG4gICAgICogd2FpdGluZyB0byBiZSBwcm9jZXNzZWQuIEludm9rZSB3aXRoIGBxdWV1ZS5sZW5ndGgoKWAuXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBzdGFydGVkIC0gYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgYW55XG4gICAgICogaXRlbXMgaGF2ZSBiZWVuIHB1c2hlZCBhbmQgcHJvY2Vzc2VkIGJ5IHRoZSBxdWV1ZS5cbiAgICAgKiBAcHJvcGVydHkge0Z1bmN0aW9ufSBydW5uaW5nIC0gYSBmdW5jdGlvbiByZXR1cm5pbmcgdGhlIG51bWJlciBvZiBpdGVtc1xuICAgICAqIGN1cnJlbnRseSBiZWluZyBwcm9jZXNzZWQuIEludm9rZSB3aXRoIGBxdWV1ZS5ydW5uaW5nKClgLlxuICAgICAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IHdvcmtlcnNMaXN0IC0gYSBmdW5jdGlvbiByZXR1cm5pbmcgdGhlIGFycmF5IG9mIGl0ZW1zXG4gICAgICogY3VycmVudGx5IGJlaW5nIHByb2Nlc3NlZC4gSW52b2tlIHdpdGggYHF1ZXVlLndvcmtlcnNMaXN0KClgLlxuICAgICAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IGlkbGUgLSBhIGZ1bmN0aW9uIHJldHVybmluZyBmYWxzZSBpZiB0aGVyZSBhcmUgaXRlbXNcbiAgICAgKiB3YWl0aW5nIG9yIGJlaW5nIHByb2Nlc3NlZCwgb3IgdHJ1ZSBpZiBub3QuIEludm9rZSB3aXRoIGBxdWV1ZS5pZGxlKClgLlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBjb25jdXJyZW5jeSAtIGFuIGludGVnZXIgZm9yIGRldGVybWluaW5nIGhvdyBtYW55IGB3b3JrZXJgXG4gICAgICogZnVuY3Rpb25zIHNob3VsZCBiZSBydW4gaW4gcGFyYWxsZWwuIFRoaXMgcHJvcGVydHkgY2FuIGJlIGNoYW5nZWQgYWZ0ZXIgYVxuICAgICAqIGBxdWV1ZWAgaXMgY3JlYXRlZCB0byBhbHRlciB0aGUgY29uY3VycmVuY3kgb24tdGhlLWZseS5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gcGF5bG9hZCAtIGFuIGludGVnZXIgdGhhdCBzcGVjaWZpZXMgaG93IG1hbnkgaXRlbXMgYXJlXG4gICAgICogcGFzc2VkIHRvIHRoZSB3b3JrZXIgZnVuY3Rpb24gYXQgYSB0aW1lLiBvbmx5IGFwcGxpZXMgaWYgdGhpcyBpcyBhXG4gICAgICogW2NhcmdvXXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cuY2FyZ299IG9iamVjdFxuICAgICAqIEBwcm9wZXJ0eSB7QXN5bmNGdW5jdGlvbn0gcHVzaCAtIGFkZCBhIG5ldyB0YXNrIHRvIHRoZSBgcXVldWVgLiBDYWxscyBgY2FsbGJhY2tgXG4gICAgICogb25jZSB0aGUgYHdvcmtlcmAgaGFzIGZpbmlzaGVkIHByb2Nlc3NpbmcgdGhlIHRhc2suIEluc3RlYWQgb2YgYSBzaW5nbGUgdGFzayxcbiAgICAgKiBhIGB0YXNrc2AgYXJyYXkgY2FuIGJlIHN1Ym1pdHRlZC4gVGhlIHJlc3BlY3RpdmUgY2FsbGJhY2sgaXMgdXNlZCBmb3IgZXZlcnlcbiAgICAgKiB0YXNrIGluIHRoZSBsaXN0LiBJbnZva2Ugd2l0aCBgcXVldWUucHVzaCh0YXNrLCBbY2FsbGJhY2tdKWAsXG4gICAgICogQHByb3BlcnR5IHtBc3luY0Z1bmN0aW9ufSB1bnNoaWZ0IC0gYWRkIGEgbmV3IHRhc2sgdG8gdGhlIGZyb250IG9mIHRoZSBgcXVldWVgLlxuICAgICAqIEludm9rZSB3aXRoIGBxdWV1ZS51bnNoaWZ0KHRhc2ssIFtjYWxsYmFja10pYC5cbiAgICAgKiBAcHJvcGVydHkge0FzeW5jRnVuY3Rpb259IHB1c2hBc3luYyAtIHRoZSBzYW1lIGFzIGBxLnB1c2hgLCBleGNlcHQgdGhpcyByZXR1cm5zXG4gICAgICogYSBwcm9taXNlIHRoYXQgcmVqZWN0cyBpZiBhbiBlcnJvciBvY2N1cnMuXG4gICAgICogQHByb3BlcnR5IHtBc3luY0Z1bmN0aW9ufSB1bnNoaWZ0QXN5bmMgLSB0aGUgc2FtZSBhcyBgcS51bnNoaWZ0YCwgZXhjZXB0IHRoaXMgcmV0dXJuc1xuICAgICAqIGEgcHJvbWlzZSB0aGF0IHJlamVjdHMgaWYgYW4gZXJyb3Igb2NjdXJzLlxuICAgICAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IHJlbW92ZSAtIHJlbW92ZSBpdGVtcyBmcm9tIHRoZSBxdWV1ZSB0aGF0IG1hdGNoIGEgdGVzdFxuICAgICAqIGZ1bmN0aW9uLiAgVGhlIHRlc3QgZnVuY3Rpb24gd2lsbCBiZSBwYXNzZWQgYW4gb2JqZWN0IHdpdGggYSBgZGF0YWAgcHJvcGVydHksXG4gICAgICogYW5kIGEgYHByaW9yaXR5YCBwcm9wZXJ0eSwgaWYgdGhpcyBpcyBhXG4gICAgICogW3ByaW9yaXR5UXVldWVde0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy5wcmlvcml0eVF1ZXVlfSBvYmplY3QuXG4gICAgICogSW52b2tlZCB3aXRoIGBxdWV1ZS5yZW1vdmUodGVzdEZuKWAsIHdoZXJlIGB0ZXN0Rm5gIGlzIG9mIHRoZSBmb3JtXG4gICAgICogYGZ1bmN0aW9uICh7ZGF0YSwgcHJpb3JpdHl9KSB7fWAgYW5kIHJldHVybnMgYSBCb29sZWFuLlxuICAgICAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IHNhdHVyYXRlZCAtIGEgZnVuY3Rpb24gdGhhdCBzZXRzIGEgY2FsbGJhY2sgdGhhdCBpc1xuICAgICAqIGNhbGxlZCB3aGVuIHRoZSBudW1iZXIgb2YgcnVubmluZyB3b3JrZXJzIGhpdHMgdGhlIGBjb25jdXJyZW5jeWAgbGltaXQsIGFuZFxuICAgICAqIGZ1cnRoZXIgdGFza3Mgd2lsbCBiZSBxdWV1ZWQuICBJZiB0aGUgY2FsbGJhY2sgaXMgb21pdHRlZCwgYHEuc2F0dXJhdGVkKClgXG4gICAgICogcmV0dXJucyBhIHByb21pc2UgZm9yIHRoZSBuZXh0IG9jY3VycmVuY2UuXG4gICAgICogQHByb3BlcnR5IHtGdW5jdGlvbn0gdW5zYXR1cmF0ZWQgLSBhIGZ1bmN0aW9uIHRoYXQgc2V0cyBhIGNhbGxiYWNrIHRoYXQgaXNcbiAgICAgKiBjYWxsZWQgd2hlbiB0aGUgbnVtYmVyIG9mIHJ1bm5pbmcgd29ya2VycyBpcyBsZXNzIHRoYW4gdGhlIGBjb25jdXJyZW5jeWAgJlxuICAgICAqIGBidWZmZXJgIGxpbWl0cywgYW5kIGZ1cnRoZXIgdGFza3Mgd2lsbCBub3QgYmUgcXVldWVkLiBJZiB0aGUgY2FsbGJhY2sgaXNcbiAgICAgKiBvbWl0dGVkLCBgcS51bnNhdHVyYXRlZCgpYCByZXR1cm5zIGEgcHJvbWlzZSBmb3IgdGhlIG5leHQgb2NjdXJyZW5jZS5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gYnVmZmVyIC0gQSBtaW5pbXVtIHRocmVzaG9sZCBidWZmZXIgaW4gb3JkZXIgdG8gc2F5IHRoYXRcbiAgICAgKiB0aGUgYHF1ZXVlYCBpcyBgdW5zYXR1cmF0ZWRgLlxuICAgICAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IGVtcHR5IC0gYSBmdW5jdGlvbiB0aGF0IHNldHMgYSBjYWxsYmFjayB0aGF0IGlzIGNhbGxlZFxuICAgICAqIHdoZW4gdGhlIGxhc3QgaXRlbSBmcm9tIHRoZSBgcXVldWVgIGlzIGdpdmVuIHRvIGEgYHdvcmtlcmAuIElmIHRoZSBjYWxsYmFja1xuICAgICAqIGlzIG9taXR0ZWQsIGBxLmVtcHR5KClgIHJldHVybnMgYSBwcm9taXNlIGZvciB0aGUgbmV4dCBvY2N1cnJlbmNlLlxuICAgICAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IGRyYWluIC0gYSBmdW5jdGlvbiB0aGF0IHNldHMgYSBjYWxsYmFjayB0aGF0IGlzIGNhbGxlZFxuICAgICAqIHdoZW4gdGhlIGxhc3QgaXRlbSBmcm9tIHRoZSBgcXVldWVgIGhhcyByZXR1cm5lZCBmcm9tIHRoZSBgd29ya2VyYC4gSWYgdGhlXG4gICAgICogY2FsbGJhY2sgaXMgb21pdHRlZCwgYHEuZHJhaW4oKWAgcmV0dXJucyBhIHByb21pc2UgZm9yIHRoZSBuZXh0IG9jY3VycmVuY2UuXG4gICAgICogQHByb3BlcnR5IHtGdW5jdGlvbn0gZXJyb3IgLSBhIGZ1bmN0aW9uIHRoYXQgc2V0cyBhIGNhbGxiYWNrIHRoYXQgaXMgY2FsbGVkXG4gICAgICogd2hlbiBhIHRhc2sgZXJyb3JzLiBIYXMgdGhlIHNpZ25hdHVyZSBgZnVuY3Rpb24oZXJyb3IsIHRhc2spYC4gSWYgdGhlXG4gICAgICogY2FsbGJhY2sgaXMgb21pdHRlZCwgYGVycm9yKClgIHJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVqZWN0cyBvbiB0aGUgbmV4dFxuICAgICAqIGVycm9yLlxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gcGF1c2VkIC0gYSBib29sZWFuIGZvciBkZXRlcm1pbmluZyB3aGV0aGVyIHRoZSBxdWV1ZSBpc1xuICAgICAqIGluIGEgcGF1c2VkIHN0YXRlLlxuICAgICAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IHBhdXNlIC0gYSBmdW5jdGlvbiB0aGF0IHBhdXNlcyB0aGUgcHJvY2Vzc2luZyBvZiB0YXNrc1xuICAgICAqIHVudGlsIGByZXN1bWUoKWAgaXMgY2FsbGVkLiBJbnZva2Ugd2l0aCBgcXVldWUucGF1c2UoKWAuXG4gICAgICogQHByb3BlcnR5IHtGdW5jdGlvbn0gcmVzdW1lIC0gYSBmdW5jdGlvbiB0aGF0IHJlc3VtZXMgdGhlIHByb2Nlc3Npbmcgb2ZcbiAgICAgKiBxdWV1ZWQgdGFza3Mgd2hlbiB0aGUgcXVldWUgaXMgcGF1c2VkLiBJbnZva2Ugd2l0aCBgcXVldWUucmVzdW1lKClgLlxuICAgICAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IGtpbGwgLSBhIGZ1bmN0aW9uIHRoYXQgcmVtb3ZlcyB0aGUgYGRyYWluYCBjYWxsYmFjayBhbmRcbiAgICAgKiBlbXB0aWVzIHJlbWFpbmluZyB0YXNrcyBmcm9tIHRoZSBxdWV1ZSBmb3JjaW5nIGl0IHRvIGdvIGlkbGUuIE5vIG1vcmUgdGFza3NcbiAgICAgKiBzaG91bGQgYmUgcHVzaGVkIHRvIHRoZSBxdWV1ZSBhZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uIEludm9rZSB3aXRoIGBxdWV1ZS5raWxsKClgLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBjb25zdCBxID0gYXN5bmMucXVldWUod29ya2VyLCAyKVxuICAgICAqIHEucHVzaChpdGVtMSlcbiAgICAgKiBxLnB1c2goaXRlbTIpXG4gICAgICogcS5wdXNoKGl0ZW0zKVxuICAgICAqIC8vIHF1ZXVlcyBhcmUgaXRlcmFibGUsIHNwcmVhZCBpbnRvIGFuIGFycmF5IHRvIGluc3BlY3RcbiAgICAgKiBjb25zdCBpdGVtcyA9IFsuLi5xXSAvLyBbaXRlbTEsIGl0ZW0yLCBpdGVtM11cbiAgICAgKiAvLyBvciB1c2UgZm9yIG9mXG4gICAgICogZm9yIChsZXQgaXRlbSBvZiBxKSB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGl0ZW0pXG4gICAgICogfVxuICAgICAqXG4gICAgICogcS5kcmFpbigoKSA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKCdhbGwgZG9uZScpXG4gICAgICogfSlcbiAgICAgKiAvLyBvclxuICAgICAqIGF3YWl0IHEuZHJhaW4oKVxuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGBxdWV1ZWAgb2JqZWN0IHdpdGggdGhlIHNwZWNpZmllZCBgY29uY3VycmVuY3lgLiBUYXNrcyBhZGRlZCB0byB0aGVcbiAgICAgKiBgcXVldWVgIGFyZSBwcm9jZXNzZWQgaW4gcGFyYWxsZWwgKHVwIHRvIHRoZSBgY29uY3VycmVuY3lgIGxpbWl0KS4gSWYgYWxsXG4gICAgICogYHdvcmtlcmBzIGFyZSBpbiBwcm9ncmVzcywgdGhlIHRhc2sgaXMgcXVldWVkIHVudGlsIG9uZSBiZWNvbWVzIGF2YWlsYWJsZS5cbiAgICAgKiBPbmNlIGEgYHdvcmtlcmAgY29tcGxldGVzIGEgYHRhc2tgLCB0aGF0IGB0YXNrYCdzIGNhbGxiYWNrIGlzIGNhbGxlZC5cbiAgICAgKlxuICAgICAqIEBuYW1lIHF1ZXVlXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGNhdGVnb3J5IENvbnRyb2wgRmxvd1xuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gd29ya2VyIC0gQW4gYXN5bmMgZnVuY3Rpb24gZm9yIHByb2Nlc3NpbmcgYSBxdWV1ZWQgdGFzay5cbiAgICAgKiBJZiB5b3Ugd2FudCB0byBoYW5kbGUgZXJyb3JzIGZyb20gYW4gaW5kaXZpZHVhbCB0YXNrLCBwYXNzIGEgY2FsbGJhY2sgdG9cbiAgICAgKiBgcS5wdXNoKClgLiBJbnZva2VkIHdpdGggKHRhc2ssIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2NvbmN1cnJlbmN5PTFdIC0gQW4gYGludGVnZXJgIGZvciBkZXRlcm1pbmluZyBob3cgbWFueVxuICAgICAqIGB3b3JrZXJgIGZ1bmN0aW9ucyBzaG91bGQgYmUgcnVuIGluIHBhcmFsbGVsLiAgSWYgb21pdHRlZCwgdGhlIGNvbmN1cnJlbmN5XG4gICAgICogZGVmYXVsdHMgdG8gYDFgLiAgSWYgdGhlIGNvbmN1cnJlbmN5IGlzIGAwYCwgYW4gZXJyb3IgaXMgdGhyb3duLlxuICAgICAqIEByZXR1cm5zIHttb2R1bGU6Q29udHJvbEZsb3cuUXVldWVPYmplY3R9IEEgcXVldWUgb2JqZWN0IHRvIG1hbmFnZSB0aGUgdGFza3MuIENhbGxiYWNrcyBjYW4gYmVcbiAgICAgKiBhdHRhY2hlZCBhcyBjZXJ0YWluIHByb3BlcnRpZXMgdG8gbGlzdGVuIGZvciBzcGVjaWZpYyBldmVudHMgZHVyaW5nIHRoZVxuICAgICAqIGxpZmVjeWNsZSBvZiB0aGUgcXVldWUuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vIGNyZWF0ZSBhIHF1ZXVlIG9iamVjdCB3aXRoIGNvbmN1cnJlbmN5IDJcbiAgICAgKiB2YXIgcSA9IGFzeW5jLnF1ZXVlKGZ1bmN0aW9uKHRhc2ssIGNhbGxiYWNrKSB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKCdoZWxsbyAnICsgdGFzay5uYW1lKTtcbiAgICAgKiAgICAgY2FsbGJhY2soKTtcbiAgICAgKiB9LCAyKTtcbiAgICAgKlxuICAgICAqIC8vIGFzc2lnbiBhIGNhbGxiYWNrXG4gICAgICogcS5kcmFpbihmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coJ2FsbCBpdGVtcyBoYXZlIGJlZW4gcHJvY2Vzc2VkJyk7XG4gICAgICogfSk7XG4gICAgICogLy8gb3IgYXdhaXQgdGhlIGVuZFxuICAgICAqIGF3YWl0IHEuZHJhaW4oKVxuICAgICAqXG4gICAgICogLy8gYXNzaWduIGFuIGVycm9yIGNhbGxiYWNrXG4gICAgICogcS5lcnJvcihmdW5jdGlvbihlcnIsIHRhc2spIHtcbiAgICAgKiAgICAgY29uc29sZS5lcnJvcigndGFzayBleHBlcmllbmNlZCBhbiBlcnJvcicpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gYWRkIHNvbWUgaXRlbXMgdG8gdGhlIHF1ZXVlXG4gICAgICogcS5wdXNoKHtuYW1lOiAnZm9vJ30sIGZ1bmN0aW9uKGVycikge1xuICAgICAqICAgICBjb25zb2xlLmxvZygnZmluaXNoZWQgcHJvY2Vzc2luZyBmb28nKTtcbiAgICAgKiB9KTtcbiAgICAgKiAvLyBjYWxsYmFjayBpcyBvcHRpb25hbFxuICAgICAqIHEucHVzaCh7bmFtZTogJ2Jhcid9KTtcbiAgICAgKlxuICAgICAqIC8vIGFkZCBzb21lIGl0ZW1zIHRvIHRoZSBxdWV1ZSAoYmF0Y2gtd2lzZSlcbiAgICAgKiBxLnB1c2goW3tuYW1lOiAnYmF6J30se25hbWU6ICdiYXknfSx7bmFtZTogJ2JheCd9XSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKCdmaW5pc2hlZCBwcm9jZXNzaW5nIGl0ZW0nKTtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIGFkZCBzb21lIGl0ZW1zIHRvIHRoZSBmcm9udCBvZiB0aGUgcXVldWVcbiAgICAgKiBxLnVuc2hpZnQoe25hbWU6ICdiYXInfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAqICAgICBjb25zb2xlLmxvZygnZmluaXNoZWQgcHJvY2Vzc2luZyBiYXInKTtcbiAgICAgKiB9KTtcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBxdWV1ZSAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuICAgICAgICB2YXIgX3dvcmtlciA9IHdyYXBBc3luYyh3b3JrZXIpO1xuICAgICAgICByZXR1cm4gcXVldWUkMSgoaXRlbXMsIGNiKSA9PiB7XG4gICAgICAgICAgICBfd29ya2VyKGl0ZW1zWzBdLCBjYik7XG4gICAgICAgIH0sIGNvbmN1cnJlbmN5LCAxKTtcbiAgICB9XG5cbiAgICAvLyBCaW5hcnkgbWluLWhlYXAgaW1wbGVtZW50YXRpb24gdXNlZCBmb3IgcHJpb3JpdHkgcXVldWUuXG4gICAgLy8gSW1wbGVtZW50YXRpb24gaXMgc3RhYmxlLCBpLmUuIHB1c2ggdGltZSBpcyBjb25zaWRlcmVkIGZvciBlcXVhbCBwcmlvcml0aWVzXG4gICAgY2xhc3MgSGVhcCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgdGhpcy5oZWFwID0gW107XG4gICAgICAgICAgICB0aGlzLnB1c2hDb3VudCA9IE51bWJlci5NSU5fU0FGRV9JTlRFR0VSO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2V0IGxlbmd0aCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmhlYXAubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgZW1wdHkgKCkge1xuICAgICAgICAgICAgdGhpcy5oZWFwID0gW107XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIHBlcmNVcChpbmRleCkge1xuICAgICAgICAgICAgbGV0IHA7XG5cbiAgICAgICAgICAgIHdoaWxlIChpbmRleCA+IDAgJiYgc21hbGxlcih0aGlzLmhlYXBbaW5kZXhdLCB0aGlzLmhlYXBbcD1wYXJlbnQoaW5kZXgpXSkpIHtcbiAgICAgICAgICAgICAgICBsZXQgdCA9IHRoaXMuaGVhcFtpbmRleF07XG4gICAgICAgICAgICAgICAgdGhpcy5oZWFwW2luZGV4XSA9IHRoaXMuaGVhcFtwXTtcbiAgICAgICAgICAgICAgICB0aGlzLmhlYXBbcF0gPSB0O1xuXG4gICAgICAgICAgICAgICAgaW5kZXggPSBwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcGVyY0Rvd24oaW5kZXgpIHtcbiAgICAgICAgICAgIGxldCBsO1xuXG4gICAgICAgICAgICB3aGlsZSAoKGw9bGVmdENoaShpbmRleCkpIDwgdGhpcy5oZWFwLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGlmIChsKzEgPCB0aGlzLmhlYXAubGVuZ3RoICYmIHNtYWxsZXIodGhpcy5oZWFwW2wrMV0sIHRoaXMuaGVhcFtsXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgbCA9IGwrMTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoc21hbGxlcih0aGlzLmhlYXBbaW5kZXhdLCB0aGlzLmhlYXBbbF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCB0ID0gdGhpcy5oZWFwW2luZGV4XTtcbiAgICAgICAgICAgICAgICB0aGlzLmhlYXBbaW5kZXhdID0gdGhpcy5oZWFwW2xdO1xuICAgICAgICAgICAgICAgIHRoaXMuaGVhcFtsXSA9IHQ7XG5cbiAgICAgICAgICAgICAgICBpbmRleCA9IGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwdXNoKG5vZGUpIHtcbiAgICAgICAgICAgIG5vZGUucHVzaENvdW50ID0gKyt0aGlzLnB1c2hDb3VudDtcbiAgICAgICAgICAgIHRoaXMuaGVhcC5wdXNoKG5vZGUpO1xuICAgICAgICAgICAgdGhpcy5wZXJjVXAodGhpcy5oZWFwLmxlbmd0aC0xKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHVuc2hpZnQobm9kZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGVhcC5wdXNoKG5vZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgc2hpZnQoKSB7XG4gICAgICAgICAgICBsZXQgW3RvcF0gPSB0aGlzLmhlYXA7XG5cbiAgICAgICAgICAgIHRoaXMuaGVhcFswXSA9IHRoaXMuaGVhcFt0aGlzLmhlYXAubGVuZ3RoLTFdO1xuICAgICAgICAgICAgdGhpcy5oZWFwLnBvcCgpO1xuICAgICAgICAgICAgdGhpcy5wZXJjRG93bigwKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRvcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRvQXJyYXkoKSB7XG4gICAgICAgICAgICByZXR1cm4gWy4uLnRoaXNdO1xuICAgICAgICB9XG5cbiAgICAgICAgKltTeW1ib2wuaXRlcmF0b3JdICgpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5oZWFwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgeWllbGQgdGhpcy5oZWFwW2ldLmRhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZW1vdmUgKHRlc3RGbikge1xuICAgICAgICAgICAgbGV0IGogPSAwO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmhlYXAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRlc3RGbih0aGlzLmhlYXBbaV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGVhcFtqXSA9IHRoaXMuaGVhcFtpXTtcbiAgICAgICAgICAgICAgICAgICAgaisrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5oZWFwLnNwbGljZShqKTtcblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHBhcmVudCh0aGlzLmhlYXAubGVuZ3RoLTEpOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgICAgIHRoaXMucGVyY0Rvd24oaSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGVmdENoaShpKSB7XG4gICAgICAgIHJldHVybiAoaTw8MSkrMTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJlbnQoaSkge1xuICAgICAgICByZXR1cm4gKChpKzEpPj4xKS0xO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNtYWxsZXIoeCwgeSkge1xuICAgICAgICBpZiAoeC5wcmlvcml0eSAhPT0geS5wcmlvcml0eSkge1xuICAgICAgICAgICAgcmV0dXJuIHgucHJpb3JpdHkgPCB5LnByaW9yaXR5O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHgucHVzaENvdW50IDwgeS5wdXNoQ291bnQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyBbYXN5bmMucXVldWVde0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy5xdWV1ZX0gb25seSB0YXNrcyBhcmUgYXNzaWduZWQgYSBwcmlvcml0eSBhbmRcbiAgICAgKiBjb21wbGV0ZWQgaW4gYXNjZW5kaW5nIHByaW9yaXR5IG9yZGVyLlxuICAgICAqXG4gICAgICogQG5hbWUgcHJpb3JpdHlRdWV1ZVxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbnRyb2xGbG93XG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLnF1ZXVlXXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cucXVldWV9XG4gICAgICogQGNhdGVnb3J5IENvbnRyb2wgRmxvd1xuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gd29ya2VyIC0gQW4gYXN5bmMgZnVuY3Rpb24gZm9yIHByb2Nlc3NpbmcgYSBxdWV1ZWQgdGFzay5cbiAgICAgKiBJZiB5b3Ugd2FudCB0byBoYW5kbGUgZXJyb3JzIGZyb20gYW4gaW5kaXZpZHVhbCB0YXNrLCBwYXNzIGEgY2FsbGJhY2sgdG9cbiAgICAgKiBgcS5wdXNoKClgLlxuICAgICAqIEludm9rZWQgd2l0aCAodGFzaywgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjb25jdXJyZW5jeSAtIEFuIGBpbnRlZ2VyYCBmb3IgZGV0ZXJtaW5pbmcgaG93IG1hbnkgYHdvcmtlcmBcbiAgICAgKiBmdW5jdGlvbnMgc2hvdWxkIGJlIHJ1biBpbiBwYXJhbGxlbC4gIElmIG9taXR0ZWQsIHRoZSBjb25jdXJyZW5jeSBkZWZhdWx0cyB0b1xuICAgICAqIGAxYC4gIElmIHRoZSBjb25jdXJyZW5jeSBpcyBgMGAsIGFuIGVycm9yIGlzIHRocm93bi5cbiAgICAgKiBAcmV0dXJucyB7bW9kdWxlOkNvbnRyb2xGbG93LlF1ZXVlT2JqZWN0fSBBIHByaW9yaXR5UXVldWUgb2JqZWN0IHRvIG1hbmFnZSB0aGUgdGFza3MuIFRoZXJlIGFyZSB0aHJlZVxuICAgICAqIGRpZmZlcmVuY2VzIGJldHdlZW4gYHF1ZXVlYCBhbmQgYHByaW9yaXR5UXVldWVgIG9iamVjdHM6XG4gICAgICogKiBgcHVzaCh0YXNrLCBwcmlvcml0eSwgW2NhbGxiYWNrXSlgIC0gYHByaW9yaXR5YCBzaG91bGQgYmUgYSBudW1iZXIuIElmIGFuXG4gICAgICogICBhcnJheSBvZiBgdGFza3NgIGlzIGdpdmVuLCBhbGwgdGFza3Mgd2lsbCBiZSBhc3NpZ25lZCB0aGUgc2FtZSBwcmlvcml0eS5cbiAgICAgKiAqIGBwdXNoQXN5bmModGFzaywgcHJpb3JpdHksIFtjYWxsYmFja10pYCAtIHRoZSBzYW1lIGFzIGBwcmlvcml0eVF1ZXVlLnB1c2hgLFxuICAgICAqICAgZXhjZXB0IHRoaXMgcmV0dXJucyBhIHByb21pc2UgdGhhdCByZWplY3RzIGlmIGFuIGVycm9yIG9jY3Vycy5cbiAgICAgKiAqIFRoZSBgdW5zaGlmdGAgYW5kIGB1bnNoaWZ0QXN5bmNgIG1ldGhvZHMgd2VyZSByZW1vdmVkLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHByaW9yaXR5UXVldWUod29ya2VyLCBjb25jdXJyZW5jeSkge1xuICAgICAgICAvLyBTdGFydCB3aXRoIGEgbm9ybWFsIHF1ZXVlXG4gICAgICAgIHZhciBxID0gcXVldWUod29ya2VyLCBjb25jdXJyZW5jeSk7XG5cbiAgICAgICAgdmFyIHtcbiAgICAgICAgICAgIHB1c2gsXG4gICAgICAgICAgICBwdXNoQXN5bmNcbiAgICAgICAgfSA9IHE7XG5cbiAgICAgICAgcS5fdGFza3MgPSBuZXcgSGVhcCgpO1xuICAgICAgICBxLl9jcmVhdGVUYXNrSXRlbSA9ICh7ZGF0YSwgcHJpb3JpdHl9LCBjYWxsYmFjaykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICAgIHByaW9yaXR5LFxuICAgICAgICAgICAgICAgIGNhbGxiYWNrXG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuXG4gICAgICAgIGZ1bmN0aW9uIGNyZWF0ZURhdGFJdGVtcyh0YXNrcywgcHJpb3JpdHkpIHtcbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge2RhdGE6IHRhc2tzLCBwcmlvcml0eX07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGFza3MubWFwKGRhdGEgPT4geyByZXR1cm4ge2RhdGEsIHByaW9yaXR5fTsgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBPdmVycmlkZSBwdXNoIHRvIGFjY2VwdCBzZWNvbmQgcGFyYW1ldGVyIHJlcHJlc2VudGluZyBwcmlvcml0eVxuICAgICAgICBxLnB1c2ggPSBmdW5jdGlvbihkYXRhLCBwcmlvcml0eSA9IDAsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gcHVzaChjcmVhdGVEYXRhSXRlbXMoZGF0YSwgcHJpb3JpdHkpLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG5cbiAgICAgICAgcS5wdXNoQXN5bmMgPSBmdW5jdGlvbihkYXRhLCBwcmlvcml0eSA9IDAsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gcHVzaEFzeW5jKGNyZWF0ZURhdGFJdGVtcyhkYXRhLCBwcmlvcml0eSksIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBSZW1vdmUgdW5zaGlmdCBmdW5jdGlvbnNcbiAgICAgICAgZGVsZXRlIHEudW5zaGlmdDtcbiAgICAgICAgZGVsZXRlIHEudW5zaGlmdEFzeW5jO1xuXG4gICAgICAgIHJldHVybiBxO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJ1bnMgdGhlIGB0YXNrc2AgYXJyYXkgb2YgZnVuY3Rpb25zIGluIHBhcmFsbGVsLCB3aXRob3V0IHdhaXRpbmcgdW50aWwgdGhlXG4gICAgICogcHJldmlvdXMgZnVuY3Rpb24gaGFzIGNvbXBsZXRlZC4gT25jZSBhbnkgb2YgdGhlIGB0YXNrc2AgY29tcGxldGUgb3IgcGFzcyBhblxuICAgICAqIGVycm9yIHRvIGl0cyBjYWxsYmFjaywgdGhlIG1haW4gYGNhbGxiYWNrYCBpcyBpbW1lZGlhdGVseSBjYWxsZWQuIEl0J3NcbiAgICAgKiBlcXVpdmFsZW50IHRvIGBQcm9taXNlLnJhY2UoKWAuXG4gICAgICpcbiAgICAgKiBAbmFtZSByYWNlXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGNhdGVnb3J5IENvbnRyb2wgRmxvd1xuICAgICAqIEBwYXJhbSB7QXJyYXl9IHRhc2tzIC0gQW4gYXJyYXkgY29udGFpbmluZyBbYXN5bmMgZnVuY3Rpb25zXXtAbGluayBBc3luY0Z1bmN0aW9ufVxuICAgICAqIHRvIHJ1bi4gRWFjaCBmdW5jdGlvbiBjYW4gY29tcGxldGUgd2l0aCBhbiBvcHRpb25hbCBgcmVzdWx0YCB2YWx1ZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAtIEEgY2FsbGJhY2sgdG8gcnVuIG9uY2UgYW55IG9mIHRoZSBmdW5jdGlvbnMgaGF2ZVxuICAgICAqIGNvbXBsZXRlZC4gVGhpcyBmdW5jdGlvbiBnZXRzIGFuIGVycm9yIG9yIHJlc3VsdCBmcm9tIHRoZSBmaXJzdCBmdW5jdGlvbiB0aGF0XG4gICAgICogY29tcGxldGVkLiBJbnZva2VkIHdpdGggKGVyciwgcmVzdWx0KS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBhIGNhbGxiYWNrIGlzIG9taXR0ZWRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogYXN5bmMucmFjZShbXG4gICAgICogICAgIGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsICdvbmUnKTtcbiAgICAgKiAgICAgICAgIH0sIDIwMCk7XG4gICAgICogICAgIH0sXG4gICAgICogICAgIGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsICd0d28nKTtcbiAgICAgKiAgICAgICAgIH0sIDEwMCk7XG4gICAgICogICAgIH1cbiAgICAgKiBdLFxuICAgICAqIC8vIG1haW4gY2FsbGJhY2tcbiAgICAgKiBmdW5jdGlvbihlcnIsIHJlc3VsdCkge1xuICAgICAqICAgICAvLyB0aGUgcmVzdWx0IHdpbGwgYmUgZXF1YWwgdG8gJ3R3bycgYXMgaXQgZmluaXNoZXMgZWFybGllclxuICAgICAqIH0pO1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJhY2UodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gb25jZShjYWxsYmFjayk7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0YXNrcykpIHJldHVybiBjYWxsYmFjayhuZXcgVHlwZUVycm9yKCdGaXJzdCBhcmd1bWVudCB0byByYWNlIG11c3QgYmUgYW4gYXJyYXkgb2YgZnVuY3Rpb25zJykpO1xuICAgICAgICBpZiAoIXRhc2tzLmxlbmd0aCkgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gdGFza3MubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICB3cmFwQXN5bmModGFza3NbaV0pKGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciByYWNlJDEgPSBhd2FpdGlmeShyYWNlLCAyKTtcblxuICAgIC8qKlxuICAgICAqIFNhbWUgYXMgW2ByZWR1Y2VgXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMucmVkdWNlfSwgb25seSBvcGVyYXRlcyBvbiBgYXJyYXlgIGluIHJldmVyc2Ugb3JkZXIuXG4gICAgICpcbiAgICAgKiBAbmFtZSByZWR1Y2VSaWdodFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLnJlZHVjZV17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLnJlZHVjZX1cbiAgICAgKiBAYWxpYXMgZm9sZHJcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0geyp9IG1lbW8gLSBUaGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgcmVkdWN0aW9uLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBIGZ1bmN0aW9uIGFwcGxpZWQgdG8gZWFjaCBpdGVtIGluIHRoZVxuICAgICAqIGFycmF5IHRvIHByb2R1Y2UgdGhlIG5leHQgc3RlcCBpbiB0aGUgcmVkdWN0aW9uLlxuICAgICAqIFRoZSBgaXRlcmF0ZWVgIHNob3VsZCBjb21wbGV0ZSB3aXRoIHRoZSBuZXh0IHN0YXRlIG9mIHRoZSByZWR1Y3Rpb24uXG4gICAgICogSWYgdGhlIGl0ZXJhdGVlIGNvbXBsZXRlcyB3aXRoIGFuIGVycm9yLCB0aGUgcmVkdWN0aW9uIGlzIHN0b3BwZWQgYW5kIHRoZVxuICAgICAqIG1haW4gYGNhbGxiYWNrYCBpcyBpbW1lZGlhdGVseSBjYWxsZWQgd2l0aCB0aGUgZXJyb3IuXG4gICAgICogSW52b2tlZCB3aXRoIChtZW1vLCBpdGVtLCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIGFmdGVyIGFsbCB0aGVcbiAgICAgKiBgaXRlcmF0ZWVgIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLiBSZXN1bHQgaXMgdGhlIHJlZHVjZWQgdmFsdWUuIEludm9rZWQgd2l0aFxuICAgICAqIChlcnIsIHJlc3VsdCkuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgaXMgcGFzc2VkXG4gICAgICovXG4gICAgZnVuY3Rpb24gcmVkdWNlUmlnaHQgKGFycmF5LCBtZW1vLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJldmVyc2VkID0gWy4uLmFycmF5XS5yZXZlcnNlKCk7XG4gICAgICAgIHJldHVybiByZWR1Y2UkMShyZXZlcnNlZCwgbWVtbywgaXRlcmF0ZWUsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXcmFwcyB0aGUgYXN5bmMgZnVuY3Rpb24gaW4gYW5vdGhlciBmdW5jdGlvbiB0aGF0IGFsd2F5cyBjb21wbGV0ZXMgd2l0aCBhXG4gICAgICogcmVzdWx0IG9iamVjdCwgZXZlbiB3aGVuIGl0IGVycm9ycy5cbiAgICAgKlxuICAgICAqIFRoZSByZXN1bHQgb2JqZWN0IGhhcyBlaXRoZXIgdGhlIHByb3BlcnR5IGBlcnJvcmAgb3IgYHZhbHVlYC5cbiAgICAgKlxuICAgICAqIEBuYW1lIHJlZmxlY3RcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpVdGlsc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gZm4gLSBUaGUgYXN5bmMgZnVuY3Rpb24geW91IHdhbnQgdG8gd3JhcFxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gLSBBIGZ1bmN0aW9uIHRoYXQgYWx3YXlzIHBhc3NlcyBudWxsIHRvIGl0J3MgY2FsbGJhY2sgYXNcbiAgICAgKiB0aGUgZXJyb3IuIFRoZSBzZWNvbmQgYXJndW1lbnQgdG8gdGhlIGNhbGxiYWNrIHdpbGwgYmUgYW4gYG9iamVjdGAgd2l0aFxuICAgICAqIGVpdGhlciBhbiBgZXJyb3JgIG9yIGEgYHZhbHVlYCBwcm9wZXJ0eS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogYXN5bmMucGFyYWxsZWwoW1xuICAgICAqICAgICBhc3luYy5yZWZsZWN0KGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAvLyBkbyBzb21lIHN0dWZmIC4uLlxuICAgICAqICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ29uZScpO1xuICAgICAqICAgICB9KSxcbiAgICAgKiAgICAgYXN5bmMucmVmbGVjdChmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgLy8gZG8gc29tZSBtb3JlIHN0dWZmIGJ1dCBlcnJvciAuLi5cbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKCdiYWQgc3R1ZmYgaGFwcGVuZWQnKTtcbiAgICAgKiAgICAgfSksXG4gICAgICogICAgIGFzeW5jLnJlZmxlY3QoZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIC8vIGRvIHNvbWUgbW9yZSBzdHVmZiAuLi5cbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsICd0d28nKTtcbiAgICAgKiAgICAgfSlcbiAgICAgKiBdLFxuICAgICAqIC8vIG9wdGlvbmFsIGNhbGxiYWNrXG4gICAgICogZnVuY3Rpb24oZXJyLCByZXN1bHRzKSB7XG4gICAgICogICAgIC8vIHZhbHVlc1xuICAgICAqICAgICAvLyByZXN1bHRzWzBdLnZhbHVlID0gJ29uZSdcbiAgICAgKiAgICAgLy8gcmVzdWx0c1sxXS5lcnJvciA9ICdiYWQgc3R1ZmYgaGFwcGVuZWQnXG4gICAgICogICAgIC8vIHJlc3VsdHNbMl0udmFsdWUgPSAndHdvJ1xuICAgICAqIH0pO1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJlZmxlY3QoZm4pIHtcbiAgICAgICAgdmFyIF9mbiA9IHdyYXBBc3luYyhmbik7XG4gICAgICAgIHJldHVybiBpbml0aWFsUGFyYW1zKGZ1bmN0aW9uIHJlZmxlY3RPbihhcmdzLCByZWZsZWN0Q2FsbGJhY2spIHtcbiAgICAgICAgICAgIGFyZ3MucHVzaCgoZXJyb3IsIC4uLmNiQXJncykgPT4ge1xuICAgICAgICAgICAgICAgIGxldCByZXRWYWwgPSB7fTtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmVycm9yID0gZXJyb3I7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjYkFyZ3MubGVuZ3RoID4gMCl7XG4gICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGNiQXJncztcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNiQXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXSA9IGNiQXJncztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXRWYWwudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVmbGVjdENhbGxiYWNrKG51bGwsIHJldFZhbCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIF9mbi5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSBoZWxwZXIgZnVuY3Rpb24gdGhhdCB3cmFwcyBhbiBhcnJheSBvciBhbiBvYmplY3Qgb2YgZnVuY3Rpb25zIHdpdGggYHJlZmxlY3RgLlxuICAgICAqXG4gICAgICogQG5hbWUgcmVmbGVjdEFsbFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOlV0aWxzXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLnJlZmxlY3Rde0BsaW5rIG1vZHVsZTpVdGlscy5yZWZsZWN0fVxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R8SXRlcmFibGV9IHRhc2tzIC0gVGhlIGNvbGxlY3Rpb24gb2ZcbiAgICAgKiBbYXN5bmMgZnVuY3Rpb25zXXtAbGluayBBc3luY0Z1bmN0aW9ufSB0byB3cmFwIGluIGBhc3luYy5yZWZsZWN0YC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYW4gYXJyYXkgb2YgYXN5bmMgZnVuY3Rpb25zLCBlYWNoIHdyYXBwZWQgaW5cbiAgICAgKiBgYXN5bmMucmVmbGVjdGBcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogbGV0IHRhc2tzID0gW1xuICAgICAqICAgICBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCAnb25lJyk7XG4gICAgICogICAgICAgICB9LCAyMDApO1xuICAgICAqICAgICB9LFxuICAgICAqICAgICBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgLy8gZG8gc29tZSBtb3JlIHN0dWZmIGJ1dCBlcnJvciAuLi5cbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcignYmFkIHN0dWZmIGhhcHBlbmVkJykpO1xuICAgICAqICAgICB9LFxuICAgICAqICAgICBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCAndHdvJyk7XG4gICAgICogICAgICAgICB9LCAxMDApO1xuICAgICAqICAgICB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIGFzeW5jLnBhcmFsbGVsKGFzeW5jLnJlZmxlY3RBbGwodGFza3MpLFxuICAgICAqIC8vIG9wdGlvbmFsIGNhbGxiYWNrXG4gICAgICogZnVuY3Rpb24oZXJyLCByZXN1bHRzKSB7XG4gICAgICogICAgIC8vIHZhbHVlc1xuICAgICAqICAgICAvLyByZXN1bHRzWzBdLnZhbHVlID0gJ29uZSdcbiAgICAgKiAgICAgLy8gcmVzdWx0c1sxXS5lcnJvciA9IEVycm9yKCdiYWQgc3R1ZmYgaGFwcGVuZWQnKVxuICAgICAqICAgICAvLyByZXN1bHRzWzJdLnZhbHVlID0gJ3R3bydcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIGFuIGV4YW1wbGUgdXNpbmcgYW4gb2JqZWN0IGluc3RlYWQgb2YgYW4gYXJyYXlcbiAgICAgKiBsZXQgdGFza3MgPSB7XG4gICAgICogICAgIG9uZTogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICogICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ29uZScpO1xuICAgICAqICAgICAgICAgfSwgMjAwKTtcbiAgICAgKiAgICAgfSxcbiAgICAgKiAgICAgdHdvOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgY2FsbGJhY2soJ3R3bycpO1xuICAgICAqICAgICB9LFxuICAgICAqICAgICB0aHJlZTogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICogICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ3RocmVlJyk7XG4gICAgICogICAgICAgICB9LCAxMDApO1xuICAgICAqICAgICB9XG4gICAgICogfTtcbiAgICAgKlxuICAgICAqIGFzeW5jLnBhcmFsbGVsKGFzeW5jLnJlZmxlY3RBbGwodGFza3MpLFxuICAgICAqIC8vIG9wdGlvbmFsIGNhbGxiYWNrXG4gICAgICogZnVuY3Rpb24oZXJyLCByZXN1bHRzKSB7XG4gICAgICogICAgIC8vIHZhbHVlc1xuICAgICAqICAgICAvLyByZXN1bHRzLm9uZS52YWx1ZSA9ICdvbmUnXG4gICAgICogICAgIC8vIHJlc3VsdHMudHdvLmVycm9yID0gJ3R3bydcbiAgICAgKiAgICAgLy8gcmVzdWx0cy50aHJlZS52YWx1ZSA9ICd0aHJlZSdcbiAgICAgKiB9KTtcbiAgICAgKi9cbiAgICBmdW5jdGlvbiByZWZsZWN0QWxsKHRhc2tzKSB7XG4gICAgICAgIHZhciByZXN1bHRzO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIHJlc3VsdHMgPSB0YXNrcy5tYXAocmVmbGVjdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHRzID0ge307XG4gICAgICAgICAgICBPYmplY3Qua2V5cyh0YXNrcykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc3VsdHNba2V5XSA9IHJlZmxlY3QuY2FsbCh0aGlzLCB0YXNrc1trZXldKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlamVjdCQyKGVhY2hmbiwgYXJyLCBfaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IGl0ZXJhdGVlID0gd3JhcEFzeW5jKF9pdGVyYXRlZSk7XG4gICAgICAgIHJldHVybiBfZmlsdGVyKGVhY2hmbiwgYXJyLCAodmFsdWUsIGNiKSA9PiB7XG4gICAgICAgICAgICBpdGVyYXRlZSh2YWx1ZSwgKGVyciwgdikgPT4ge1xuICAgICAgICAgICAgICAgIGNiKGVyciwgIXYpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3Bwb3NpdGUgb2YgW2BmaWx0ZXJgXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZmlsdGVyfS4gUmVtb3ZlcyB2YWx1ZXMgdGhhdCBwYXNzIGFuIGBhc3luY2AgdHJ1dGggdGVzdC5cbiAgICAgKlxuICAgICAqIEBuYW1lIHJlamVjdFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLmZpbHRlcl17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmZpbHRlcn1cbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIC0gQW4gYXN5bmMgdHJ1dGggdGVzdCB0byBhcHBseSB0byBlYWNoIGl0ZW0gaW5cbiAgICAgKiBgY29sbGAuXG4gICAgICogVGhlIHNob3VsZCBjb21wbGV0ZSB3aXRoIGEgYm9vbGVhbiB2YWx1ZSBhcyBpdHMgYHJlc3VsdGAuXG4gICAgICogSW52b2tlZCB3aXRoIChpdGVtLCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIGFmdGVyIGFsbCB0aGVcbiAgICAgKiBgaXRlcmF0ZWVgIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLiBJbnZva2VkIHdpdGggKGVyciwgcmVzdWx0cykuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgaXMgcGFzc2VkXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vIGRpcjEgaXMgYSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyBmaWxlMS50eHQsIGZpbGUyLnR4dFxuICAgICAqIC8vIGRpcjIgaXMgYSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyBmaWxlMy50eHQsIGZpbGU0LnR4dFxuICAgICAqIC8vIGRpcjMgaXMgYSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyBmaWxlNS50eHRcbiAgICAgKlxuICAgICAqIGNvbnN0IGZpbGVMaXN0ID0gWydkaXIxL2ZpbGUxLnR4dCcsJ2RpcjIvZmlsZTMudHh0JywnZGlyMy9maWxlNi50eHQnXTtcbiAgICAgKlxuICAgICAqIC8vIGFzeW5jaHJvbm91cyBmdW5jdGlvbiB0aGF0IGNoZWNrcyBpZiBhIGZpbGUgZXhpc3RzXG4gICAgICogZnVuY3Rpb24gZmlsZUV4aXN0cyhmaWxlLCBjYWxsYmFjaykge1xuICAgICAqICAgIGZzLmFjY2VzcyhmaWxlLCBmcy5jb25zdGFudHMuRl9PSywgKGVycikgPT4ge1xuICAgICAqICAgICAgICBjYWxsYmFjayhudWxsLCAhZXJyKTtcbiAgICAgKiAgICB9KTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBjYWxsYmFja3NcbiAgICAgKiBhc3luYy5yZWplY3QoZmlsZUxpc3QsIGZpbGVFeGlzdHMsIGZ1bmN0aW9uKGVyciwgcmVzdWx0cykge1xuICAgICAqICAgIC8vIFsgJ2RpcjMvZmlsZTYudHh0JyBdXG4gICAgICogICAgLy8gcmVzdWx0cyBub3cgZXF1YWxzIGFuIGFycmF5IG9mIHRoZSBub24tZXhpc3RpbmcgZmlsZXNcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIFByb21pc2VzXG4gICAgICogYXN5bmMucmVqZWN0KGZpbGVMaXN0LCBmaWxlRXhpc3RzKVxuICAgICAqIC50aGVuKCByZXN1bHRzID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgIC8vIFsgJ2RpcjMvZmlsZTYudHh0JyBdXG4gICAgICogICAgIC8vIHJlc3VsdHMgbm93IGVxdWFscyBhbiBhcnJheSBvZiB0aGUgbm9uLWV4aXN0aW5nIGZpbGVzXG4gICAgICogfSkuY2F0Y2goIGVyciA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBhc3luYy9hd2FpdFxuICAgICAqIGFzeW5jICgpID0+IHtcbiAgICAgKiAgICAgdHJ5IHtcbiAgICAgKiAgICAgICAgIGxldCByZXN1bHRzID0gYXdhaXQgYXN5bmMucmVqZWN0KGZpbGVMaXN0LCBmaWxlRXhpc3RzKTtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgICAgICAgLy8gWyAnZGlyMy9maWxlNi50eHQnIF1cbiAgICAgKiAgICAgICAgIC8vIHJlc3VsdHMgbm93IGVxdWFscyBhbiBhcnJheSBvZiB0aGUgbm9uLWV4aXN0aW5nIGZpbGVzXG4gICAgICogICAgIH1cbiAgICAgKiAgICAgY2F0Y2ggKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJlamVjdCAoY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiByZWplY3QkMihlYWNoT2YkMSwgY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKVxuICAgIH1cbiAgICB2YXIgcmVqZWN0JDEgPSBhd2FpdGlmeShyZWplY3QsIDMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNhbWUgYXMgW2ByZWplY3RgXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMucmVqZWN0fSBidXQgcnVucyBhIG1heGltdW0gb2YgYGxpbWl0YCBhc3luYyBvcGVyYXRpb25zIGF0IGFcbiAgICAgKiB0aW1lLlxuICAgICAqXG4gICAgICogQG5hbWUgcmVqZWN0TGltaXRcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5yZWplY3Rde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5yZWplY3R9XG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfEFzeW5jSXRlcmFibGV8T2JqZWN0fSBjb2xsIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbGltaXQgLSBUaGUgbWF4aW11bSBudW1iZXIgb2YgYXN5bmMgb3BlcmF0aW9ucyBhdCBhIHRpbWUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBbiBhc3luYyB0cnV0aCB0ZXN0IHRvIGFwcGx5IHRvIGVhY2ggaXRlbSBpblxuICAgICAqIGBjb2xsYC5cbiAgICAgKiBUaGUgc2hvdWxkIGNvbXBsZXRlIHdpdGggYSBib29sZWFuIHZhbHVlIGFzIGl0cyBgcmVzdWx0YC5cbiAgICAgKiBJbnZva2VkIHdpdGggKGl0ZW0sIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgYWZ0ZXIgYWxsIHRoZVxuICAgICAqIGBpdGVyYXRlZWAgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQuIEludm9rZWQgd2l0aCAoZXJyLCByZXN1bHRzKS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBpcyBwYXNzZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiByZWplY3RMaW1pdCAoY29sbCwgbGltaXQsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gcmVqZWN0JDIoZWFjaE9mTGltaXQkMihsaW1pdCksIGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaylcbiAgICB9XG4gICAgdmFyIHJlamVjdExpbWl0JDEgPSBhd2FpdGlmeShyZWplY3RMaW1pdCwgNCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyBbYHJlamVjdGBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5yZWplY3R9IGJ1dCBydW5zIG9ubHkgYSBzaW5nbGUgYXN5bmMgb3BlcmF0aW9uIGF0IGEgdGltZS5cbiAgICAgKlxuICAgICAqIEBuYW1lIHJlamVjdFNlcmllc1xuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLnJlamVjdF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLnJlamVjdH1cbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIC0gQW4gYXN5bmMgdHJ1dGggdGVzdCB0byBhcHBseSB0byBlYWNoIGl0ZW0gaW5cbiAgICAgKiBgY29sbGAuXG4gICAgICogVGhlIHNob3VsZCBjb21wbGV0ZSB3aXRoIGEgYm9vbGVhbiB2YWx1ZSBhcyBpdHMgYHJlc3VsdGAuXG4gICAgICogSW52b2tlZCB3aXRoIChpdGVtLCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIGFmdGVyIGFsbCB0aGVcbiAgICAgKiBgaXRlcmF0ZWVgIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLiBJbnZva2VkIHdpdGggKGVyciwgcmVzdWx0cykuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgaXMgcGFzc2VkXG4gICAgICovXG4gICAgZnVuY3Rpb24gcmVqZWN0U2VyaWVzIChjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdCQyKGVhY2hPZlNlcmllcyQxLCBjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuICAgIHZhciByZWplY3RTZXJpZXMkMSA9IGF3YWl0aWZ5KHJlamVjdFNlcmllcywgMyk7XG5cbiAgICBmdW5jdGlvbiBjb25zdGFudCh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQXR0ZW1wdHMgdG8gZ2V0IGEgc3VjY2Vzc2Z1bCByZXNwb25zZSBmcm9tIGB0YXNrYCBubyBtb3JlIHRoYW4gYHRpbWVzYCB0aW1lc1xuICAgICAqIGJlZm9yZSByZXR1cm5pbmcgYW4gZXJyb3IuIElmIHRoZSB0YXNrIGlzIHN1Y2Nlc3NmdWwsIHRoZSBgY2FsbGJhY2tgIHdpbGwgYmVcbiAgICAgKiBwYXNzZWQgdGhlIHJlc3VsdCBvZiB0aGUgc3VjY2Vzc2Z1bCB0YXNrLiBJZiBhbGwgYXR0ZW1wdHMgZmFpbCwgdGhlIGNhbGxiYWNrXG4gICAgICogd2lsbCBiZSBwYXNzZWQgdGhlIGVycm9yIGFuZCByZXN1bHQgKGlmIGFueSkgb2YgdGhlIGZpbmFsIGF0dGVtcHQuXG4gICAgICpcbiAgICAgKiBAbmFtZSByZXRyeVxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbnRyb2xGbG93XG4gICAgICogQG1ldGhvZFxuICAgICAqIEBjYXRlZ29yeSBDb250cm9sIEZsb3dcbiAgICAgKiBAc2VlIFthc3luYy5yZXRyeWFibGVde0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy5yZXRyeWFibGV9XG4gICAgICogQHBhcmFtIHtPYmplY3R8bnVtYmVyfSBbb3B0cyA9IHt0aW1lczogNSwgaW50ZXJ2YWw6IDB9fCA1XSAtIENhbiBiZSBlaXRoZXIgYW5cbiAgICAgKiBvYmplY3Qgd2l0aCBgdGltZXNgIGFuZCBgaW50ZXJ2YWxgIG9yIGEgbnVtYmVyLlxuICAgICAqICogYHRpbWVzYCAtIFRoZSBudW1iZXIgb2YgYXR0ZW1wdHMgdG8gbWFrZSBiZWZvcmUgZ2l2aW5nIHVwLiAgVGhlIGRlZmF1bHRcbiAgICAgKiAgIGlzIGA1YC5cbiAgICAgKiAqIGBpbnRlcnZhbGAgLSBUaGUgdGltZSB0byB3YWl0IGJldHdlZW4gcmV0cmllcywgaW4gbWlsbGlzZWNvbmRzLiAgVGhlXG4gICAgICogICBkZWZhdWx0IGlzIGAwYC4gVGhlIGludGVydmFsIG1heSBhbHNvIGJlIHNwZWNpZmllZCBhcyBhIGZ1bmN0aW9uIG9mIHRoZVxuICAgICAqICAgcmV0cnkgY291bnQgKHNlZSBleGFtcGxlKS5cbiAgICAgKiAqIGBlcnJvckZpbHRlcmAgLSBBbiBvcHRpb25hbCBzeW5jaHJvbm91cyBmdW5jdGlvbiB0aGF0IGlzIGludm9rZWQgb25cbiAgICAgKiAgIGVycm9uZW91cyByZXN1bHQuIElmIGl0IHJldHVybnMgYHRydWVgIHRoZSByZXRyeSBhdHRlbXB0cyB3aWxsIGNvbnRpbnVlO1xuICAgICAqICAgaWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgYGZhbHNlYCB0aGUgcmV0cnkgZmxvdyBpcyBhYm9ydGVkIHdpdGggdGhlIGN1cnJlbnRcbiAgICAgKiAgIGF0dGVtcHQncyBlcnJvciBhbmQgcmVzdWx0IGJlaW5nIHJldHVybmVkIHRvIHRoZSBmaW5hbCBjYWxsYmFjay5cbiAgICAgKiAgIEludm9rZWQgd2l0aCAoZXJyKS5cbiAgICAgKiAqIElmIGBvcHRzYCBpcyBhIG51bWJlciwgdGhlIG51bWJlciBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiB0aW1lcyB0byByZXRyeSxcbiAgICAgKiAgIHdpdGggdGhlIGRlZmF1bHQgaW50ZXJ2YWwgb2YgYDBgLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gdGFzayAtIEFuIGFzeW5jIGZ1bmN0aW9uIHRvIHJldHJ5LlxuICAgICAqIEludm9rZWQgd2l0aCAoY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBbiBvcHRpb25hbCBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgd2hlbiB0aGVcbiAgICAgKiB0YXNrIGhhcyBzdWNjZWVkZWQsIG9yIGFmdGVyIHRoZSBmaW5hbCBmYWlsZWQgYXR0ZW1wdC4gSXQgcmVjZWl2ZXMgdGhlIGBlcnJgXG4gICAgICogYW5kIGByZXN1bHRgIGFyZ3VtZW50cyBvZiB0aGUgbGFzdCBhdHRlbXB0IGF0IGNvbXBsZXRpbmcgdGhlIGB0YXNrYC4gSW52b2tlZFxuICAgICAqIHdpdGggKGVyciwgcmVzdWx0cykuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSBpZiBubyBjYWxsYmFjayBwcm92aWRlZFxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgcmV0cnlgIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGFzIGEgc3RhbmQtYWxvbmUgY29udHJvbCBmbG93IGJ5IHBhc3NpbmdcbiAgICAgKiAvLyBhIGNhbGxiYWNrLCBhcyBzaG93biBiZWxvdzpcbiAgICAgKlxuICAgICAqIC8vIHRyeSBjYWxsaW5nIGFwaU1ldGhvZCAzIHRpbWVzXG4gICAgICogYXN5bmMucmV0cnkoMywgYXBpTWV0aG9kLCBmdW5jdGlvbihlcnIsIHJlc3VsdCkge1xuICAgICAqICAgICAvLyBkbyBzb21ldGhpbmcgd2l0aCB0aGUgcmVzdWx0XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyB0cnkgY2FsbGluZyBhcGlNZXRob2QgMyB0aW1lcywgd2FpdGluZyAyMDAgbXMgYmV0d2VlbiBlYWNoIHJldHJ5XG4gICAgICogYXN5bmMucmV0cnkoe3RpbWVzOiAzLCBpbnRlcnZhbDogMjAwfSwgYXBpTWV0aG9kLCBmdW5jdGlvbihlcnIsIHJlc3VsdCkge1xuICAgICAqICAgICAvLyBkbyBzb21ldGhpbmcgd2l0aCB0aGUgcmVzdWx0XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyB0cnkgY2FsbGluZyBhcGlNZXRob2QgMTAgdGltZXMgd2l0aCBleHBvbmVudGlhbCBiYWNrb2ZmXG4gICAgICogLy8gKGkuZS4gaW50ZXJ2YWxzIG9mIDEwMCwgMjAwLCA0MDAsIDgwMCwgMTYwMCwgLi4uIG1pbGxpc2Vjb25kcylcbiAgICAgKiBhc3luYy5yZXRyeSh7XG4gICAgICogICB0aW1lczogMTAsXG4gICAgICogICBpbnRlcnZhbDogZnVuY3Rpb24ocmV0cnlDb3VudCkge1xuICAgICAqICAgICByZXR1cm4gNTAgKiBNYXRoLnBvdygyLCByZXRyeUNvdW50KTtcbiAgICAgKiAgIH1cbiAgICAgKiB9LCBhcGlNZXRob2QsIGZ1bmN0aW9uKGVyciwgcmVzdWx0KSB7XG4gICAgICogICAgIC8vIGRvIHNvbWV0aGluZyB3aXRoIHRoZSByZXN1bHRcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIHRyeSBjYWxsaW5nIGFwaU1ldGhvZCB0aGUgZGVmYXVsdCA1IHRpbWVzIG5vIGRlbGF5IGJldHdlZW4gZWFjaCByZXRyeVxuICAgICAqIGFzeW5jLnJldHJ5KGFwaU1ldGhvZCwgZnVuY3Rpb24oZXJyLCByZXN1bHQpIHtcbiAgICAgKiAgICAgLy8gZG8gc29tZXRoaW5nIHdpdGggdGhlIHJlc3VsdFxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gdHJ5IGNhbGxpbmcgYXBpTWV0aG9kIG9ubHkgd2hlbiBlcnJvciBjb25kaXRpb24gc2F0aXNmaWVzLCBhbGwgb3RoZXJcbiAgICAgKiAvLyBlcnJvcnMgd2lsbCBhYm9ydCB0aGUgcmV0cnkgY29udHJvbCBmbG93IGFuZCByZXR1cm4gdG8gZmluYWwgY2FsbGJhY2tcbiAgICAgKiBhc3luYy5yZXRyeSh7XG4gICAgICogICBlcnJvckZpbHRlcjogZnVuY3Rpb24oZXJyKSB7XG4gICAgICogICAgIHJldHVybiBlcnIubWVzc2FnZSA9PT0gJ1RlbXBvcmFyeSBlcnJvcic7IC8vIG9ubHkgcmV0cnkgb24gYSBzcGVjaWZpYyBlcnJvclxuICAgICAqICAgfVxuICAgICAqIH0sIGFwaU1ldGhvZCwgZnVuY3Rpb24oZXJyLCByZXN1bHQpIHtcbiAgICAgKiAgICAgLy8gZG8gc29tZXRoaW5nIHdpdGggdGhlIHJlc3VsdFxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gdG8gcmV0cnkgaW5kaXZpZHVhbCBtZXRob2RzIHRoYXQgYXJlIG5vdCBhcyByZWxpYWJsZSB3aXRoaW4gb3RoZXJcbiAgICAgKiAvLyBjb250cm9sIGZsb3cgZnVuY3Rpb25zLCB1c2UgdGhlIGByZXRyeWFibGVgIHdyYXBwZXI6XG4gICAgICogYXN5bmMuYXV0byh7XG4gICAgICogICAgIHVzZXJzOiBhcGkuZ2V0VXNlcnMuYmluZChhcGkpLFxuICAgICAqICAgICBwYXltZW50czogYXN5bmMucmV0cnlhYmxlKDMsIGFwaS5nZXRQYXltZW50cy5iaW5kKGFwaSkpXG4gICAgICogfSwgZnVuY3Rpb24oZXJyLCByZXN1bHRzKSB7XG4gICAgICogICAgIC8vIGRvIHNvbWV0aGluZyB3aXRoIHRoZSByZXN1bHRzXG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKi9cbiAgICBjb25zdCBERUZBVUxUX1RJTUVTID0gNTtcbiAgICBjb25zdCBERUZBVUxUX0lOVEVSVkFMID0gMDtcblxuICAgIGZ1bmN0aW9uIHJldHJ5KG9wdHMsIHRhc2ssIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICAgICAgdGltZXM6IERFRkFVTFRfVElNRVMsXG4gICAgICAgICAgICBpbnRlcnZhbEZ1bmM6IGNvbnN0YW50KERFRkFVTFRfSU5URVJWQUwpXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAzICYmIHR5cGVvZiBvcHRzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IHRhc2sgfHwgcHJvbWlzZUNhbGxiYWNrKCk7XG4gICAgICAgICAgICB0YXNrID0gb3B0cztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcnNlVGltZXMob3B0aW9ucywgb3B0cyk7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IHByb21pc2VDYWxsYmFjaygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiB0YXNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGFyZ3VtZW50cyBmb3IgYXN5bmMucmV0cnlcIik7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgX3Rhc2sgPSB3cmFwQXN5bmModGFzayk7XG5cbiAgICAgICAgdmFyIGF0dGVtcHQgPSAxO1xuICAgICAgICBmdW5jdGlvbiByZXRyeUF0dGVtcHQoKSB7XG4gICAgICAgICAgICBfdGFzaygoZXJyLCAuLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVyciA9PT0gZmFsc2UpIHJldHVyblxuICAgICAgICAgICAgICAgIGlmIChlcnIgJiYgYXR0ZW1wdCsrIDwgb3B0aW9ucy50aW1lcyAmJlxuICAgICAgICAgICAgICAgICAgICAodHlwZW9mIG9wdGlvbnMuZXJyb3JGaWx0ZXIgIT0gJ2Z1bmN0aW9uJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5lcnJvckZpbHRlcihlcnIpKSkge1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KHJldHJ5QXR0ZW1wdCwgb3B0aW9ucy5pbnRlcnZhbEZ1bmMoYXR0ZW1wdCAtIDEpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIC4uLmFyZ3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0cnlBdHRlbXB0KCk7XG4gICAgICAgIHJldHVybiBjYWxsYmFja1tQUk9NSVNFX1NZTUJPTF1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZVRpbWVzKGFjYywgdCkge1xuICAgICAgICBpZiAodHlwZW9mIHQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBhY2MudGltZXMgPSArdC50aW1lcyB8fCBERUZBVUxUX1RJTUVTO1xuXG4gICAgICAgICAgICBhY2MuaW50ZXJ2YWxGdW5jID0gdHlwZW9mIHQuaW50ZXJ2YWwgPT09ICdmdW5jdGlvbicgP1xuICAgICAgICAgICAgICAgIHQuaW50ZXJ2YWwgOlxuICAgICAgICAgICAgICAgIGNvbnN0YW50KCt0LmludGVydmFsIHx8IERFRkFVTFRfSU5URVJWQUwpO1xuXG4gICAgICAgICAgICBhY2MuZXJyb3JGaWx0ZXIgPSB0LmVycm9yRmlsdGVyO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0ID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGFjYy50aW1lcyA9ICt0IHx8IERFRkFVTFRfVElNRVM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGFyZ3VtZW50cyBmb3IgYXN5bmMucmV0cnlcIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIGNsb3NlIHJlbGF0aXZlIG9mIFtgcmV0cnlgXXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cucmV0cnl9LiAgVGhpcyBtZXRob2RcbiAgICAgKiB3cmFwcyBhIHRhc2sgYW5kIG1ha2VzIGl0IHJldHJ5YWJsZSwgcmF0aGVyIHRoYW4gaW1tZWRpYXRlbHkgY2FsbGluZyBpdFxuICAgICAqIHdpdGggcmV0cmllcy5cbiAgICAgKlxuICAgICAqIEBuYW1lIHJldHJ5YWJsZVxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbnRyb2xGbG93XG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLnJldHJ5XXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cucmV0cnl9XG4gICAgICogQGNhdGVnb3J5IENvbnRyb2wgRmxvd1xuICAgICAqIEBwYXJhbSB7T2JqZWN0fG51bWJlcn0gW29wdHMgPSB7dGltZXM6IDUsIGludGVydmFsOiAwfXwgNV0gLSBvcHRpb25hbFxuICAgICAqIG9wdGlvbnMsIGV4YWN0bHkgdGhlIHNhbWUgYXMgZnJvbSBgcmV0cnlgLCBleGNlcHQgZm9yIGEgYG9wdHMuYXJpdHlgIHRoYXRcbiAgICAgKiBpcyB0aGUgYXJpdHkgb2YgdGhlIGB0YXNrYCBmdW5jdGlvbiwgZGVmYXVsdGluZyB0byBgdGFzay5sZW5ndGhgXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSB0YXNrIC0gdGhlIGFzeW5jaHJvbm91cyBmdW5jdGlvbiB0byB3cmFwLlxuICAgICAqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBwYXNzZWQgYW55IGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIHJldHVybmVkIHdyYXBwZXIuXG4gICAgICogSW52b2tlZCB3aXRoICguLi5hcmdzLCBjYWxsYmFjaykuXG4gICAgICogQHJldHVybnMge0FzeW5jRnVuY3Rpb259IFRoZSB3cmFwcGVkIGZ1bmN0aW9uLCB3aGljaCB3aGVuIGludm9rZWQsIHdpbGxcbiAgICAgKiByZXRyeSBvbiBhbiBlcnJvciwgYmFzZWQgb24gdGhlIHBhcmFtZXRlcnMgc3BlY2lmaWVkIGluIGBvcHRzYC5cbiAgICAgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWNjZXB0IHRoZSBzYW1lIHBhcmFtZXRlcnMgYXMgYHRhc2tgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBhc3luYy5hdXRvKHtcbiAgICAgKiAgICAgZGVwMTogYXN5bmMucmV0cnlhYmxlKDMsIGdldEZyb21GbGFreVNlcnZpY2UpLFxuICAgICAqICAgICBwcm9jZXNzOiBbXCJkZXAxXCIsIGFzeW5jLnJldHJ5YWJsZSgzLCBmdW5jdGlvbiAocmVzdWx0cywgY2IpIHtcbiAgICAgKiAgICAgICAgIG1heWJlUHJvY2Vzc0RhdGEocmVzdWx0cy5kZXAxLCBjYik7XG4gICAgICogICAgIH0pXVxuICAgICAqIH0sIGNhbGxiYWNrKTtcbiAgICAgKi9cbiAgICBmdW5jdGlvbiByZXRyeWFibGUgKG9wdHMsIHRhc2spIHtcbiAgICAgICAgaWYgKCF0YXNrKSB7XG4gICAgICAgICAgICB0YXNrID0gb3B0cztcbiAgICAgICAgICAgIG9wdHMgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGxldCBhcml0eSA9IChvcHRzICYmIG9wdHMuYXJpdHkpIHx8IHRhc2subGVuZ3RoO1xuICAgICAgICBpZiAoaXNBc3luYyh0YXNrKSkge1xuICAgICAgICAgICAgYXJpdHkgKz0gMTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgX3Rhc2sgPSB3cmFwQXN5bmModGFzayk7XG4gICAgICAgIHJldHVybiBpbml0aWFsUGFyYW1zKChhcmdzLCBjYWxsYmFjaykgPT4ge1xuICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgYXJpdHkgLSAxIHx8IGNhbGxiYWNrID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gcHJvbWlzZUNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiB0YXNrRm4oY2IpIHtcbiAgICAgICAgICAgICAgICBfdGFzayguLi5hcmdzLCBjYik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChvcHRzKSByZXRyeShvcHRzLCB0YXNrRm4sIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIGVsc2UgcmV0cnkodGFza0ZuLCBjYWxsYmFjayk7XG5cbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFja1tQUk9NSVNFX1NZTUJPTF1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUnVuIHRoZSBmdW5jdGlvbnMgaW4gdGhlIGB0YXNrc2AgY29sbGVjdGlvbiBpbiBzZXJpZXMsIGVhY2ggb25lIHJ1bm5pbmcgb25jZVxuICAgICAqIHRoZSBwcmV2aW91cyBmdW5jdGlvbiBoYXMgY29tcGxldGVkLiBJZiBhbnkgZnVuY3Rpb25zIGluIHRoZSBzZXJpZXMgcGFzcyBhblxuICAgICAqIGVycm9yIHRvIGl0cyBjYWxsYmFjaywgbm8gbW9yZSBmdW5jdGlvbnMgYXJlIHJ1biwgYW5kIGBjYWxsYmFja2AgaXNcbiAgICAgKiBpbW1lZGlhdGVseSBjYWxsZWQgd2l0aCB0aGUgdmFsdWUgb2YgdGhlIGVycm9yLiBPdGhlcndpc2UsIGBjYWxsYmFja2BcbiAgICAgKiByZWNlaXZlcyBhbiBhcnJheSBvZiByZXN1bHRzIHdoZW4gYHRhc2tzYCBoYXZlIGNvbXBsZXRlZC5cbiAgICAgKlxuICAgICAqIEl0IGlzIGFsc28gcG9zc2libGUgdG8gdXNlIGFuIG9iamVjdCBpbnN0ZWFkIG9mIGFuIGFycmF5LiBFYWNoIHByb3BlcnR5IHdpbGxcbiAgICAgKiBiZSBydW4gYXMgYSBmdW5jdGlvbiwgYW5kIHRoZSByZXN1bHRzIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBmaW5hbCBgY2FsbGJhY2tgXG4gICAgICogYXMgYW4gb2JqZWN0IGluc3RlYWQgb2YgYW4gYXJyYXkuIFRoaXMgY2FuIGJlIGEgbW9yZSByZWFkYWJsZSB3YXkgb2YgaGFuZGxpbmdcbiAgICAgKiAgcmVzdWx0cyBmcm9tIHtAbGluayBhc3luYy5zZXJpZXN9LlxuICAgICAqXG4gICAgICogKipOb3RlKiogdGhhdCB3aGlsZSBtYW55IGltcGxlbWVudGF0aW9ucyBwcmVzZXJ2ZSB0aGUgb3JkZXIgb2Ygb2JqZWN0XG4gICAgICogcHJvcGVydGllcywgdGhlIFtFQ01BU2NyaXB0IExhbmd1YWdlIFNwZWNpZmljYXRpb25dKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi81LjEvI3NlYy04LjYpXG4gICAgICogZXhwbGljaXRseSBzdGF0ZXMgdGhhdFxuICAgICAqXG4gICAgICogPiBUaGUgbWVjaGFuaWNzIGFuZCBvcmRlciBvZiBlbnVtZXJhdGluZyB0aGUgcHJvcGVydGllcyBpcyBub3Qgc3BlY2lmaWVkLlxuICAgICAqXG4gICAgICogU28gaWYgeW91IHJlbHkgb24gdGhlIG9yZGVyIGluIHdoaWNoIHlvdXIgc2VyaWVzIG9mIGZ1bmN0aW9ucyBhcmUgZXhlY3V0ZWQsXG4gICAgICogYW5kIHdhbnQgdGhpcyB0byB3b3JrIG9uIGFsbCBwbGF0Zm9ybXMsIGNvbnNpZGVyIHVzaW5nIGFuIGFycmF5LlxuICAgICAqXG4gICAgICogQG5hbWUgc2VyaWVzXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGNhdGVnb3J5IENvbnRyb2wgRmxvd1xuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IHRhc2tzIC0gQSBjb2xsZWN0aW9uIGNvbnRhaW5pbmdcbiAgICAgKiBbYXN5bmMgZnVuY3Rpb25zXXtAbGluayBBc3luY0Z1bmN0aW9ufSB0byBydW4gaW4gc2VyaWVzLlxuICAgICAqIEVhY2ggZnVuY3Rpb24gY2FuIGNvbXBsZXRlIHdpdGggYW55IG51bWJlciBvZiBvcHRpb25hbCBgcmVzdWx0YCB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEFuIG9wdGlvbmFsIGNhbGxiYWNrIHRvIHJ1biBvbmNlIGFsbCB0aGVcbiAgICAgKiBmdW5jdGlvbnMgaGF2ZSBjb21wbGV0ZWQuIFRoaXMgZnVuY3Rpb24gZ2V0cyBhIHJlc3VsdHMgYXJyYXkgKG9yIG9iamVjdClcbiAgICAgKiBjb250YWluaW5nIGFsbCB0aGUgcmVzdWx0IGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIGB0YXNrYCBjYWxsYmFja3MuIEludm9rZWRcbiAgICAgKiB3aXRoIChlcnIsIHJlc3VsdCkuXG4gICAgICogQHJldHVybiB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBpcyBwYXNzZWRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy9Vc2luZyBDYWxsYmFja3NcbiAgICAgKiBhc3luYy5zZXJpZXMoW1xuICAgICAqICAgICBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgICAgICAvLyBkbyBzb21lIGFzeW5jIHRhc2tcbiAgICAgKiAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCAnb25lJyk7XG4gICAgICogICAgICAgICB9LCAyMDApO1xuICAgICAqICAgICB9LFxuICAgICAqICAgICBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgICAgICAvLyB0aGVuIGRvIGFub3RoZXIgYXN5bmMgdGFza1xuICAgICAqICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsICd0d28nKTtcbiAgICAgKiAgICAgICAgIH0sIDEwMCk7XG4gICAgICogICAgIH1cbiAgICAgKiBdLCBmdW5jdGlvbihlcnIsIHJlc3VsdHMpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgIC8vIHJlc3VsdHMgaXMgZXF1YWwgdG8gWydvbmUnLCd0d28nXVxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gYW4gZXhhbXBsZSB1c2luZyBvYmplY3RzIGluc3RlYWQgb2YgYXJyYXlzXG4gICAgICogYXN5bmMuc2VyaWVzKHtcbiAgICAgKiAgICAgb25lOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgICAgICAvLyBkbyBzb21lIGFzeW5jIHRhc2tcbiAgICAgKiAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCAxKTtcbiAgICAgKiAgICAgICAgIH0sIDIwMCk7XG4gICAgICogICAgIH0sXG4gICAgICogICAgIHR3bzogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICogICAgICAgICAgICAgLy8gdGhlbiBkbyBhbm90aGVyIGFzeW5jIHRhc2tcbiAgICAgKiAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCAyKTtcbiAgICAgKiAgICAgICAgIH0sIDEwMCk7XG4gICAgICogICAgIH1cbiAgICAgKiB9LCBmdW5jdGlvbihlcnIsIHJlc3VsdHMpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgIC8vIHJlc3VsdHMgaXMgZXF1YWwgdG86IHsgb25lOiAxLCB0d286IDIgfVxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy9Vc2luZyBQcm9taXNlc1xuICAgICAqIGFzeW5jLnNlcmllcyhbXG4gICAgICogICAgIGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsICdvbmUnKTtcbiAgICAgKiAgICAgICAgIH0sIDIwMCk7XG4gICAgICogICAgIH0sXG4gICAgICogICAgIGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsICd0d28nKTtcbiAgICAgKiAgICAgICAgIH0sIDEwMCk7XG4gICAgICogICAgIH1cbiAgICAgKiBdKS50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiAgICAgLy8gcmVzdWx0cyBpcyBlcXVhbCB0byBbJ29uZScsJ3R3byddXG4gICAgICogfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIGFuIGV4YW1wbGUgdXNpbmcgYW4gb2JqZWN0IGluc3RlYWQgb2YgYW4gYXJyYXlcbiAgICAgKiBhc3luYy5zZXJpZXMoe1xuICAgICAqICAgICBvbmU6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgIC8vIGRvIHNvbWUgYXN5bmMgdGFza1xuICAgICAqICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIDEpO1xuICAgICAqICAgICAgICAgfSwgMjAwKTtcbiAgICAgKiAgICAgfSxcbiAgICAgKiAgICAgdHdvOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgICAgICAvLyB0aGVuIGRvIGFub3RoZXIgYXN5bmMgdGFza1xuICAgICAqICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIDIpO1xuICAgICAqICAgICAgICAgfSwgMTAwKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH0pLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgICAvLyByZXN1bHRzIGlzIGVxdWFsIHRvOiB7IG9uZTogMSwgdHdvOiAyIH1cbiAgICAgKiB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy9Vc2luZyBhc3luYy9hd2FpdFxuICAgICAqIGFzeW5jICgpID0+IHtcbiAgICAgKiAgICAgdHJ5IHtcbiAgICAgKiAgICAgICAgIGxldCByZXN1bHRzID0gYXdhaXQgYXN5bmMuc2VyaWVzKFtcbiAgICAgKiAgICAgICAgICAgICBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgICAgICAgICAgLy8gZG8gc29tZSBhc3luYyB0YXNrXG4gICAgICogICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCAnb25lJyk7XG4gICAgICogICAgICAgICAgICAgICAgIH0sIDIwMCk7XG4gICAgICogICAgICAgICAgICAgfSxcbiAgICAgKiAgICAgICAgICAgICBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgICAgICAgICAgLy8gdGhlbiBkbyBhbm90aGVyIGFzeW5jIHRhc2tcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsICd0d28nKTtcbiAgICAgKiAgICAgICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAgKiAgICAgICAgICAgICB9XG4gICAgICogICAgICAgICBdKTtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgICAgICAgLy8gcmVzdWx0cyBpcyBlcXVhbCB0byBbJ29uZScsJ3R3byddXG4gICAgICogICAgIH1cbiAgICAgKiAgICAgY2F0Y2ggKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIC8vIGFuIGV4YW1wbGUgdXNpbmcgYW4gb2JqZWN0IGluc3RlYWQgb2YgYW4gYXJyYXlcbiAgICAgKiBhc3luYyAoKSA9PiB7XG4gICAgICogICAgIHRyeSB7XG4gICAgICogICAgICAgICBsZXQgcmVzdWx0cyA9IGF3YWl0IGFzeW5jLnBhcmFsbGVsKHtcbiAgICAgKiAgICAgICAgICAgICBvbmU6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICogICAgICAgICAgICAgICAgICAgICAvLyBkbyBzb21lIGFzeW5jIHRhc2tcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIDEpO1xuICAgICAqICAgICAgICAgICAgICAgICB9LCAyMDApO1xuICAgICAqICAgICAgICAgICAgIH0sXG4gICAgICogICAgICAgICAgICB0d286IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICogICAgICAgICAgICAgICAgICAgICAvLyB0aGVuIGRvIGFub3RoZXIgYXN5bmMgdGFza1xuICAgICAqICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgMik7XG4gICAgICogICAgICAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgICogICAgICAgICAgICB9XG4gICAgICogICAgICAgICB9KTtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgICAgICAgLy8gcmVzdWx0cyBpcyBlcXVhbCB0bzogeyBvbmU6IDEsIHR3bzogMiB9XG4gICAgICogICAgIH1cbiAgICAgKiAgICAgY2F0Y2ggKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNlcmllcyh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9wYXJhbGxlbChlYWNoT2ZTZXJpZXMkMSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGB0cnVlYCBpZiBhdCBsZWFzdCBvbmUgZWxlbWVudCBpbiB0aGUgYGNvbGxgIHNhdGlzZmllcyBhbiBhc3luYyB0ZXN0LlxuICAgICAqIElmIGFueSBpdGVyYXRlZSBjYWxsIHJldHVybnMgYHRydWVgLCB0aGUgbWFpbiBgY2FsbGJhY2tgIGlzIGltbWVkaWF0ZWx5XG4gICAgICogY2FsbGVkLlxuICAgICAqXG4gICAgICogQG5hbWUgc29tZVxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBhbGlhcyBhbnlcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBbiBhc3luYyB0cnV0aCB0ZXN0IHRvIGFwcGx5IHRvIGVhY2ggaXRlbVxuICAgICAqIGluIHRoZSBjb2xsZWN0aW9ucyBpbiBwYXJhbGxlbC5cbiAgICAgKiBUaGUgaXRlcmF0ZWUgc2hvdWxkIGNvbXBsZXRlIHdpdGggYSBib29sZWFuIGByZXN1bHRgIHZhbHVlLlxuICAgICAqIEludm9rZWQgd2l0aCAoaXRlbSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCBhcyBzb29uIGFzIGFueVxuICAgICAqIGl0ZXJhdGVlIHJldHVybnMgYHRydWVgLCBvciBhZnRlciBhbGwgdGhlIGl0ZXJhdGVlIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLlxuICAgICAqIFJlc3VsdCB3aWxsIGJlIGVpdGhlciBgdHJ1ZWAgb3IgYGZhbHNlYCBkZXBlbmRpbmcgb24gdGhlIHZhbHVlcyBvZiB0aGUgYXN5bmNcbiAgICAgKiB0ZXN0cy4gSW52b2tlZCB3aXRoIChlcnIsIHJlc3VsdCkuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgcHJvdmlkZWRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gZGlyMSBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGZpbGUxLnR4dCwgZmlsZTIudHh0XG4gICAgICogLy8gZGlyMiBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGZpbGUzLnR4dCwgZmlsZTQudHh0XG4gICAgICogLy8gZGlyMyBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGZpbGU1LnR4dFxuICAgICAqIC8vIGRpcjQgZG9lcyBub3QgZXhpc3RcbiAgICAgKlxuICAgICAqIC8vIGFzeW5jaHJvbm91cyBmdW5jdGlvbiB0aGF0IGNoZWNrcyBpZiBhIGZpbGUgZXhpc3RzXG4gICAgICogZnVuY3Rpb24gZmlsZUV4aXN0cyhmaWxlLCBjYWxsYmFjaykge1xuICAgICAqICAgIGZzLmFjY2VzcyhmaWxlLCBmcy5jb25zdGFudHMuRl9PSywgKGVycikgPT4ge1xuICAgICAqICAgICAgICBjYWxsYmFjayhudWxsLCAhZXJyKTtcbiAgICAgKiAgICB9KTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBjYWxsYmFja3NcbiAgICAgKiBhc3luYy5zb21lKFsnZGlyMS9taXNzaW5nLnR4dCcsJ2RpcjIvbWlzc2luZy50eHQnLCdkaXIzL2ZpbGU1LnR4dCddLCBmaWxlRXhpc3RzLFxuICAgICAqICAgIGZ1bmN0aW9uKGVyciwgcmVzdWx0KSB7XG4gICAgICogICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XG4gICAgICogICAgICAgIC8vIHRydWVcbiAgICAgKiAgICAgICAgLy8gcmVzdWx0IGlzIHRydWUgc2luY2Ugc29tZSBmaWxlIGluIHRoZSBsaXN0IGV4aXN0c1xuICAgICAqICAgIH1cbiAgICAgKik7XG4gICAgICpcbiAgICAgKiBhc3luYy5zb21lKFsnZGlyMS9taXNzaW5nLnR4dCcsJ2RpcjIvbWlzc2luZy50eHQnLCdkaXI0L21pc3NpbmcudHh0J10sIGZpbGVFeGlzdHMsXG4gICAgICogICAgZnVuY3Rpb24oZXJyLCByZXN1bHQpIHtcbiAgICAgKiAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgICAgLy8gZmFsc2VcbiAgICAgKiAgICAgICAgLy8gcmVzdWx0IGlzIGZhbHNlIHNpbmNlIG5vbmUgb2YgdGhlIGZpbGVzIGV4aXN0c1xuICAgICAqICAgIH1cbiAgICAgKik7XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBQcm9taXNlc1xuICAgICAqIGFzeW5jLnNvbWUoWydkaXIxL21pc3NpbmcudHh0JywnZGlyMi9taXNzaW5nLnR4dCcsJ2RpcjMvZmlsZTUudHh0J10sIGZpbGVFeGlzdHMpXG4gICAgICogLnRoZW4oIHJlc3VsdCA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XG4gICAgICogICAgIC8vIHRydWVcbiAgICAgKiAgICAgLy8gcmVzdWx0IGlzIHRydWUgc2luY2Ugc29tZSBmaWxlIGluIHRoZSBsaXN0IGV4aXN0c1xuICAgICAqIH0pLmNhdGNoKCBlcnIgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogYXN5bmMuc29tZShbJ2RpcjEvbWlzc2luZy50eHQnLCdkaXIyL21pc3NpbmcudHh0JywnZGlyNC9taXNzaW5nLnR4dCddLCBmaWxlRXhpc3RzKVxuICAgICAqIC50aGVuKCByZXN1bHQgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAvLyBmYWxzZVxuICAgICAqICAgICAvLyByZXN1bHQgaXMgZmFsc2Ugc2luY2Ugbm9uZSBvZiB0aGUgZmlsZXMgZXhpc3RzXG4gICAgICogfSkuY2F0Y2goIGVyciA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBhc3luYy9hd2FpdFxuICAgICAqIGFzeW5jICgpID0+IHtcbiAgICAgKiAgICAgdHJ5IHtcbiAgICAgKiAgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBhc3luYy5zb21lKFsnZGlyMS9taXNzaW5nLnR4dCcsJ2RpcjIvbWlzc2luZy50eHQnLCdkaXIzL2ZpbGU1LnR4dCddLCBmaWxlRXhpc3RzKTtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XG4gICAgICogICAgICAgICAvLyB0cnVlXG4gICAgICogICAgICAgICAvLyByZXN1bHQgaXMgdHJ1ZSBzaW5jZSBzb21lIGZpbGUgaW4gdGhlIGxpc3QgZXhpc3RzXG4gICAgICogICAgIH1cbiAgICAgKiAgICAgY2F0Y2ggKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIGFzeW5jICgpID0+IHtcbiAgICAgKiAgICAgdHJ5IHtcbiAgICAgKiAgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBhc3luYy5zb21lKFsnZGlyMS9taXNzaW5nLnR4dCcsJ2RpcjIvbWlzc2luZy50eHQnLCdkaXI0L21pc3NpbmcudHh0J10sIGZpbGVFeGlzdHMpO1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgICAgIC8vIGZhbHNlXG4gICAgICogICAgICAgICAvLyByZXN1bHQgaXMgZmFsc2Ugc2luY2Ugbm9uZSBvZiB0aGUgZmlsZXMgZXhpc3RzXG4gICAgICogICAgIH1cbiAgICAgKiAgICAgY2F0Y2ggKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNvbWUoY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBfY3JlYXRlVGVzdGVyKEJvb2xlYW4sIHJlcyA9PiByZXMpKGVhY2hPZiQxLCBjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuICAgIHZhciBzb21lJDEgPSBhd2FpdGlmeShzb21lLCAzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzYW1lIGFzIFtgc29tZWBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5zb21lfSBidXQgcnVucyBhIG1heGltdW0gb2YgYGxpbWl0YCBhc3luYyBvcGVyYXRpb25zIGF0IGEgdGltZS5cbiAgICAgKlxuICAgICAqIEBuYW1lIHNvbWVMaW1pdFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLnNvbWVde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5zb21lfVxuICAgICAqIEBhbGlhcyBhbnlMaW1pdFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbWl0IC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGFzeW5jIG9wZXJhdGlvbnMgYXQgYSB0aW1lLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBbiBhc3luYyB0cnV0aCB0ZXN0IHRvIGFwcGx5IHRvIGVhY2ggaXRlbVxuICAgICAqIGluIHRoZSBjb2xsZWN0aW9ucyBpbiBwYXJhbGxlbC5cbiAgICAgKiBUaGUgaXRlcmF0ZWUgc2hvdWxkIGNvbXBsZXRlIHdpdGggYSBib29sZWFuIGByZXN1bHRgIHZhbHVlLlxuICAgICAqIEludm9rZWQgd2l0aCAoaXRlbSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCBhcyBzb29uIGFzIGFueVxuICAgICAqIGl0ZXJhdGVlIHJldHVybnMgYHRydWVgLCBvciBhZnRlciBhbGwgdGhlIGl0ZXJhdGVlIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLlxuICAgICAqIFJlc3VsdCB3aWxsIGJlIGVpdGhlciBgdHJ1ZWAgb3IgYGZhbHNlYCBkZXBlbmRpbmcgb24gdGhlIHZhbHVlcyBvZiB0aGUgYXN5bmNcbiAgICAgKiB0ZXN0cy4gSW52b2tlZCB3aXRoIChlcnIsIHJlc3VsdCkuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgcHJvdmlkZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzb21lTGltaXQoY29sbCwgbGltaXQsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX2NyZWF0ZVRlc3RlcihCb29sZWFuLCByZXMgPT4gcmVzKShlYWNoT2ZMaW1pdCQyKGxpbWl0KSwgY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKVxuICAgIH1cbiAgICB2YXIgc29tZUxpbWl0JDEgPSBhd2FpdGlmeShzb21lTGltaXQsIDQpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNhbWUgYXMgW2Bzb21lYF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLnNvbWV9IGJ1dCBydW5zIG9ubHkgYSBzaW5nbGUgYXN5bmMgb3BlcmF0aW9uIGF0IGEgdGltZS5cbiAgICAgKlxuICAgICAqIEBuYW1lIHNvbWVTZXJpZXNcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5zb21lXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuc29tZX1cbiAgICAgKiBAYWxpYXMgYW55U2VyaWVzXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfEFzeW5jSXRlcmFibGV8T2JqZWN0fSBjb2xsIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQW4gYXN5bmMgdHJ1dGggdGVzdCB0byBhcHBseSB0byBlYWNoIGl0ZW1cbiAgICAgKiBpbiB0aGUgY29sbGVjdGlvbnMgaW4gc2VyaWVzLlxuICAgICAqIFRoZSBpdGVyYXRlZSBzaG91bGQgY29tcGxldGUgd2l0aCBhIGJvb2xlYW4gYHJlc3VsdGAgdmFsdWUuXG4gICAgICogSW52b2tlZCB3aXRoIChpdGVtLCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIGFzIHNvb24gYXMgYW55XG4gICAgICogaXRlcmF0ZWUgcmV0dXJucyBgdHJ1ZWAsIG9yIGFmdGVyIGFsbCB0aGUgaXRlcmF0ZWUgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQuXG4gICAgICogUmVzdWx0IHdpbGwgYmUgZWl0aGVyIGB0cnVlYCBvciBgZmFsc2VgIGRlcGVuZGluZyBvbiB0aGUgdmFsdWVzIG9mIHRoZSBhc3luY1xuICAgICAqIHRlc3RzLiBJbnZva2VkIHdpdGggKGVyciwgcmVzdWx0KS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBwcm92aWRlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNvbWVTZXJpZXMoY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBfY3JlYXRlVGVzdGVyKEJvb2xlYW4sIHJlcyA9PiByZXMpKGVhY2hPZlNlcmllcyQxLCBjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuICAgIHZhciBzb21lU2VyaWVzJDEgPSBhd2FpdGlmeShzb21lU2VyaWVzLCAzKTtcblxuICAgIC8qKlxuICAgICAqIFNvcnRzIGEgbGlzdCBieSB0aGUgcmVzdWx0cyBvZiBydW5uaW5nIGVhY2ggYGNvbGxgIHZhbHVlIHRocm91Z2ggYW4gYXN5bmNcbiAgICAgKiBgaXRlcmF0ZWVgLlxuICAgICAqXG4gICAgICogQG5hbWUgc29ydEJ5XG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfEFzeW5jSXRlcmFibGV8T2JqZWN0fSBjb2xsIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQW4gYXN5bmMgZnVuY3Rpb24gdG8gYXBwbHkgdG8gZWFjaCBpdGVtIGluXG4gICAgICogYGNvbGxgLlxuICAgICAqIFRoZSBpdGVyYXRlZSBzaG91bGQgY29tcGxldGUgd2l0aCBhIHZhbHVlIHRvIHVzZSBhcyB0aGUgc29ydCBjcml0ZXJpYSBhc1xuICAgICAqIGl0cyBgcmVzdWx0YC5cbiAgICAgKiBJbnZva2VkIHdpdGggKGl0ZW0sIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIGFmdGVyIGFsbCB0aGVcbiAgICAgKiBgaXRlcmF0ZWVgIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLCBvciBhbiBlcnJvciBvY2N1cnMuIFJlc3VsdHMgaXMgdGhlIGl0ZW1zXG4gICAgICogZnJvbSB0aGUgb3JpZ2luYWwgYGNvbGxgIHNvcnRlZCBieSB0aGUgdmFsdWVzIHJldHVybmVkIGJ5IHRoZSBgaXRlcmF0ZWVgXG4gICAgICogY2FsbHMuIEludm9rZWQgd2l0aCAoZXJyLCByZXN1bHRzKS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBwYXNzZWRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gYmlnZmlsZS50eHQgaXMgYSBmaWxlIHRoYXQgaXMgMjUxMTAwIGJ5dGVzIGluIHNpemVcbiAgICAgKiAvLyBtZWRpdW1maWxlLnR4dCBpcyBhIGZpbGUgdGhhdCBpcyAxMTAwMCBieXRlcyBpbiBzaXplXG4gICAgICogLy8gc21hbGxmaWxlLnR4dCBpcyBhIGZpbGUgdGhhdCBpcyAxMjEgYnl0ZXMgaW4gc2l6ZVxuICAgICAqXG4gICAgICogLy8gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgZmlsZSBzaXplIGluIGJ5dGVzXG4gICAgICogZnVuY3Rpb24gZ2V0RmlsZVNpemVJbkJ5dGVzKGZpbGUsIGNhbGxiYWNrKSB7XG4gICAgICogICAgIGZzLnN0YXQoZmlsZSwgZnVuY3Rpb24oZXJyLCBzdGF0KSB7XG4gICAgICogICAgICAgICBpZiAoZXJyKSB7XG4gICAgICogICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICogICAgICAgICB9XG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCBzdGF0LnNpemUpO1xuICAgICAqICAgICB9KTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBjYWxsYmFja3NcbiAgICAgKiBhc3luYy5zb3J0QnkoWydtZWRpdW1maWxlLnR4dCcsJ3NtYWxsZmlsZS50eHQnLCdiaWdmaWxlLnR4dCddLCBnZXRGaWxlU2l6ZUluQnl0ZXMsXG4gICAgICogICAgIGZ1bmN0aW9uKGVyciwgcmVzdWx0cykge1xuICAgICAqICAgICAgICAgaWYgKGVycikge1xuICAgICAqICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgICAgICB9IGVsc2Uge1xuICAgICAqICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgICAgICAgICAgIC8vIHJlc3VsdHMgaXMgbm93IHRoZSBvcmlnaW5hbCBhcnJheSBvZiBmaWxlcyBzb3J0ZWQgYnlcbiAgICAgKiAgICAgICAgICAgICAvLyBmaWxlIHNpemUgKGFzY2VuZGluZyBieSBkZWZhdWx0KSwgZS5nLlxuICAgICAqICAgICAgICAgICAgIC8vIFsgJ3NtYWxsZmlsZS50eHQnLCAnbWVkaXVtZmlsZS50eHQnLCAnYmlnZmlsZS50eHQnXVxuICAgICAqICAgICAgICAgfVxuICAgICAqICAgICB9XG4gICAgICogKTtcbiAgICAgKlxuICAgICAqIC8vIEJ5IG1vZGlmeWluZyB0aGUgY2FsbGJhY2sgcGFyYW1ldGVyIHRoZVxuICAgICAqIC8vIHNvcnRpbmcgb3JkZXIgY2FuIGJlIGluZmx1ZW5jZWQ6XG4gICAgICpcbiAgICAgKiAvLyBhc2NlbmRpbmcgb3JkZXJcbiAgICAgKiBhc3luYy5zb3J0QnkoWydtZWRpdW1maWxlLnR4dCcsJ3NtYWxsZmlsZS50eHQnLCdiaWdmaWxlLnR4dCddLCBmdW5jdGlvbihmaWxlLCBjYWxsYmFjaykge1xuICAgICAqICAgICBnZXRGaWxlU2l6ZUluQnl0ZXMoZmlsZSwgZnVuY3Rpb24oZ2V0RmlsZVNpemVFcnIsIGZpbGVTaXplKSB7XG4gICAgICogICAgICAgICBpZiAoZ2V0RmlsZVNpemVFcnIpIHJldHVybiBjYWxsYmFjayhnZXRGaWxlU2l6ZUVycik7XG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCBmaWxlU2l6ZSk7XG4gICAgICogICAgIH0pO1xuICAgICAqIH0sIGZ1bmN0aW9uKGVyciwgcmVzdWx0cykge1xuICAgICAqICAgICAgICAgaWYgKGVycikge1xuICAgICAqICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgICAgICB9IGVsc2Uge1xuICAgICAqICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgICAgICAgICAgIC8vIHJlc3VsdHMgaXMgbm93IHRoZSBvcmlnaW5hbCBhcnJheSBvZiBmaWxlcyBzb3J0ZWQgYnlcbiAgICAgKiAgICAgICAgICAgICAvLyBmaWxlIHNpemUgKGFzY2VuZGluZyBieSBkZWZhdWx0KSwgZS5nLlxuICAgICAqICAgICAgICAgICAgIC8vIFsgJ3NtYWxsZmlsZS50eHQnLCAnbWVkaXVtZmlsZS50eHQnLCAnYmlnZmlsZS50eHQnXVxuICAgICAqICAgICAgICAgfVxuICAgICAqICAgICB9XG4gICAgICogKTtcbiAgICAgKlxuICAgICAqIC8vIGRlc2NlbmRpbmcgb3JkZXJcbiAgICAgKiBhc3luYy5zb3J0QnkoWydiaWdmaWxlLnR4dCcsJ21lZGl1bWZpbGUudHh0Jywnc21hbGxmaWxlLnR4dCddLCBmdW5jdGlvbihmaWxlLCBjYWxsYmFjaykge1xuICAgICAqICAgICBnZXRGaWxlU2l6ZUluQnl0ZXMoZmlsZSwgZnVuY3Rpb24oZ2V0RmlsZVNpemVFcnIsIGZpbGVTaXplKSB7XG4gICAgICogICAgICAgICBpZiAoZ2V0RmlsZVNpemVFcnIpIHtcbiAgICAgKiAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZ2V0RmlsZVNpemVFcnIpO1xuICAgICAqICAgICAgICAgfVxuICAgICAqICAgICAgICAgY2FsbGJhY2sobnVsbCwgZmlsZVNpemUgKiAtMSk7XG4gICAgICogICAgIH0pO1xuICAgICAqIH0sIGZ1bmN0aW9uKGVyciwgcmVzdWx0cykge1xuICAgICAqICAgICAgICAgaWYgKGVycikge1xuICAgICAqICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgICAgICB9IGVsc2Uge1xuICAgICAqICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgICAgICAgICAgIC8vIHJlc3VsdHMgaXMgbm93IHRoZSBvcmlnaW5hbCBhcnJheSBvZiBmaWxlcyBzb3J0ZWQgYnlcbiAgICAgKiAgICAgICAgICAgICAvLyBmaWxlIHNpemUgKGFzY2VuZGluZyBieSBkZWZhdWx0KSwgZS5nLlxuICAgICAqICAgICAgICAgICAgIC8vIFsgJ2JpZ2ZpbGUudHh0JywgJ21lZGl1bWZpbGUudHh0JywgJ3NtYWxsZmlsZS50eHQnXVxuICAgICAqICAgICAgICAgfVxuICAgICAqICAgICB9XG4gICAgICogKTtcbiAgICAgKlxuICAgICAqIC8vIEVycm9yIGhhbmRsaW5nXG4gICAgICogYXN5bmMuc29ydEJ5KFsnbWVkaXVtZmlsZS50eHQnLCdzbWFsbGZpbGUudHh0JywnbWlzc2luZ2ZpbGUudHh0J10sIGdldEZpbGVTaXplSW5CeXRlcyxcbiAgICAgKiAgICAgZnVuY3Rpb24oZXJyLCByZXN1bHRzKSB7XG4gICAgICogICAgICAgICBpZiAoZXJyKSB7XG4gICAgICogICAgICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgICAgICAgICAvLyBbIEVycm9yOiBFTk9FTlQ6IG5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkgXVxuICAgICAqICAgICAgICAgfSBlbHNlIHtcbiAgICAgKiAgICAgICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiAgICAgICAgIH1cbiAgICAgKiAgICAgfVxuICAgICAqICk7XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBQcm9taXNlc1xuICAgICAqIGFzeW5jLnNvcnRCeShbJ21lZGl1bWZpbGUudHh0Jywnc21hbGxmaWxlLnR4dCcsJ2JpZ2ZpbGUudHh0J10sIGdldEZpbGVTaXplSW5CeXRlcylcbiAgICAgKiAudGhlbiggcmVzdWx0cyA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgICAvLyByZXN1bHRzIGlzIG5vdyB0aGUgb3JpZ2luYWwgYXJyYXkgb2YgZmlsZXMgc29ydGVkIGJ5XG4gICAgICogICAgIC8vIGZpbGUgc2l6ZSAoYXNjZW5kaW5nIGJ5IGRlZmF1bHQpLCBlLmcuXG4gICAgICogICAgIC8vIFsgJ3NtYWxsZmlsZS50eHQnLCAnbWVkaXVtZmlsZS50eHQnLCAnYmlnZmlsZS50eHQnXVxuICAgICAqIH0pLmNhdGNoKCBlcnIgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gRXJyb3IgaGFuZGxpbmdcbiAgICAgKiBhc3luYy5zb3J0QnkoWydtZWRpdW1maWxlLnR4dCcsJ3NtYWxsZmlsZS50eHQnLCdtaXNzaW5nZmlsZS50eHQnXSwgZ2V0RmlsZVNpemVJbkJ5dGVzKVxuICAgICAqIC50aGVuKCByZXN1bHRzID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogfSkuY2F0Y2goIGVyciA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgIC8vIFsgRXJyb3I6IEVOT0VOVDogbm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSBdXG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBhc3luYy9hd2FpdFxuICAgICAqIChhc3luYyAoKSA9PiB7XG4gICAgICogICAgIHRyeSB7XG4gICAgICogICAgICAgICBsZXQgcmVzdWx0cyA9IGF3YWl0IGFzeW5jLnNvcnRCeShbJ2JpZ2ZpbGUudHh0JywnbWVkaXVtZmlsZS50eHQnLCdzbWFsbGZpbGUudHh0J10sIGdldEZpbGVTaXplSW5CeXRlcyk7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiAgICAgICAgIC8vIHJlc3VsdHMgaXMgbm93IHRoZSBvcmlnaW5hbCBhcnJheSBvZiBmaWxlcyBzb3J0ZWQgYnlcbiAgICAgKiAgICAgICAgIC8vIGZpbGUgc2l6ZSAoYXNjZW5kaW5nIGJ5IGRlZmF1bHQpLCBlLmcuXG4gICAgICogICAgICAgICAvLyBbICdzbWFsbGZpbGUudHh0JywgJ21lZGl1bWZpbGUudHh0JywgJ2JpZ2ZpbGUudHh0J11cbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9XG4gICAgICogfSkoKTtcbiAgICAgKlxuICAgICAqIC8vIEVycm9yIGhhbmRsaW5nXG4gICAgICogYXN5bmMgKCkgPT4ge1xuICAgICAqICAgICB0cnkge1xuICAgICAqICAgICAgICAgbGV0IHJlc3VsdHMgPSBhd2FpdCBhc3luYy5zb3J0QnkoWydtaXNzaW5nZmlsZS50eHQnLCdtZWRpdW1maWxlLnR4dCcsJ3NtYWxsZmlsZS50eHQnXSwgZ2V0RmlsZVNpemVJbkJ5dGVzKTtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgICB9XG4gICAgICogICAgIGNhdGNoIChlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgICAgICAvLyBbIEVycm9yOiBFTk9FTlQ6IG5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkgXVxuICAgICAqICAgICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICovXG4gICAgZnVuY3Rpb24gc29ydEJ5IChjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIF9pdGVyYXRlZSA9IHdyYXBBc3luYyhpdGVyYXRlZSk7XG4gICAgICAgIHJldHVybiBtYXAkMShjb2xsLCAoeCwgaXRlckNiKSA9PiB7XG4gICAgICAgICAgICBfaXRlcmF0ZWUoeCwgKGVyciwgY3JpdGVyaWEpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gaXRlckNiKGVycik7XG4gICAgICAgICAgICAgICAgaXRlckNiKGVyciwge3ZhbHVlOiB4LCBjcml0ZXJpYX0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIChlcnIsIHJlc3VsdHMpID0+IHtcbiAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzdWx0cy5zb3J0KGNvbXBhcmF0b3IpLm1hcCh2ID0+IHYudmFsdWUpKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZnVuY3Rpb24gY29tcGFyYXRvcihsZWZ0LCByaWdodCkge1xuICAgICAgICAgICAgdmFyIGEgPSBsZWZ0LmNyaXRlcmlhLCBiID0gcmlnaHQuY3JpdGVyaWE7XG4gICAgICAgICAgICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IDA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmFyIHNvcnRCeSQxID0gYXdhaXRpZnkoc29ydEJ5LCAzKTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgYSB0aW1lIGxpbWl0IG9uIGFuIGFzeW5jaHJvbm91cyBmdW5jdGlvbi4gSWYgdGhlIGZ1bmN0aW9uIGRvZXMgbm90IGNhbGxcbiAgICAgKiBpdHMgY2FsbGJhY2sgd2l0aGluIHRoZSBzcGVjaWZpZWQgbWlsbGlzZWNvbmRzLCBpdCB3aWxsIGJlIGNhbGxlZCB3aXRoIGFcbiAgICAgKiB0aW1lb3V0IGVycm9yLiBUaGUgY29kZSBwcm9wZXJ0eSBmb3IgdGhlIGVycm9yIG9iamVjdCB3aWxsIGJlIGAnRVRJTUVET1VUJ2AuXG4gICAgICpcbiAgICAgKiBAbmFtZSB0aW1lb3V0XG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6VXRpbHNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGFzeW5jRm4gLSBUaGUgYXN5bmMgZnVuY3Rpb24gdG8gbGltaXQgaW4gdGltZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbWlsbGlzZWNvbmRzIC0gVGhlIHNwZWNpZmllZCB0aW1lIGxpbWl0LlxuICAgICAqIEBwYXJhbSB7Kn0gW2luZm9dIC0gQW55IHZhcmlhYmxlIHlvdSB3YW50IGF0dGFjaGVkIChgc3RyaW5nYCwgYG9iamVjdGAsIGV0YylcbiAgICAgKiB0byB0aW1lb3V0IEVycm9yIGZvciBtb3JlIGluZm9ybWF0aW9uLi5cbiAgICAgKiBAcmV0dXJucyB7QXN5bmNGdW5jdGlvbn0gUmV0dXJucyBhIHdyYXBwZWQgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB3aXRoIGFueVxuICAgICAqIG9mIHRoZSBjb250cm9sIGZsb3cgZnVuY3Rpb25zLlxuICAgICAqIEludm9rZSB0aGlzIGZ1bmN0aW9uIHdpdGggdGhlIHNhbWUgcGFyYW1ldGVycyBhcyB5b3Ugd291bGQgYGFzeW5jRnVuY2AuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIG15RnVuY3Rpb24oZm9vLCBjYWxsYmFjaykge1xuICAgICAqICAgICBkb0FzeW5jVGFzayhmb28sIGZ1bmN0aW9uKGVyciwgZGF0YSkge1xuICAgICAqICAgICAgICAgLy8gaGFuZGxlIGVycm9yc1xuICAgICAqICAgICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICpcbiAgICAgKiAgICAgICAgIC8vIGRvIHNvbWUgc3R1ZmYgLi4uXG4gICAgICpcbiAgICAgKiAgICAgICAgIC8vIHJldHVybiBwcm9jZXNzZWQgZGF0YVxuICAgICAqICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIGRhdGEpO1xuICAgICAqICAgICB9KTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiB2YXIgd3JhcHBlZCA9IGFzeW5jLnRpbWVvdXQobXlGdW5jdGlvbiwgMTAwMCk7XG4gICAgICpcbiAgICAgKiAvLyBjYWxsIGB3cmFwcGVkYCBhcyB5b3Ugd291bGQgYG15RnVuY3Rpb25gXG4gICAgICogd3JhcHBlZCh7IGJhcjogJ2JhcicgfSwgZnVuY3Rpb24oZXJyLCBkYXRhKSB7XG4gICAgICogICAgIC8vIGlmIGBteUZ1bmN0aW9uYCB0YWtlcyA8IDEwMDAgbXMgdG8gZXhlY3V0ZSwgYGVycmBcbiAgICAgKiAgICAgLy8gYW5kIGBkYXRhYCB3aWxsIGhhdmUgdGhlaXIgZXhwZWN0ZWQgdmFsdWVzXG4gICAgICpcbiAgICAgKiAgICAgLy8gZWxzZSBgZXJyYCB3aWxsIGJlIGFuIEVycm9yIHdpdGggdGhlIGNvZGUgJ0VUSU1FRE9VVCdcbiAgICAgKiB9KTtcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0aW1lb3V0KGFzeW5jRm4sIG1pbGxpc2Vjb25kcywgaW5mbykge1xuICAgICAgICB2YXIgZm4gPSB3cmFwQXN5bmMoYXN5bmNGbik7XG5cbiAgICAgICAgcmV0dXJuIGluaXRpYWxQYXJhbXMoKGFyZ3MsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgICAgICB2YXIgdGltZWRPdXQgPSBmYWxzZTtcbiAgICAgICAgICAgIHZhciB0aW1lcjtcblxuICAgICAgICAgICAgZnVuY3Rpb24gdGltZW91dENhbGxiYWNrKCkge1xuICAgICAgICAgICAgICAgIHZhciBuYW1lID0gYXN5bmNGbi5uYW1lIHx8ICdhbm9ueW1vdXMnO1xuICAgICAgICAgICAgICAgIHZhciBlcnJvciAgPSBuZXcgRXJyb3IoJ0NhbGxiYWNrIGZ1bmN0aW9uIFwiJyArIG5hbWUgKyAnXCIgdGltZWQgb3V0LicpO1xuICAgICAgICAgICAgICAgIGVycm9yLmNvZGUgPSAnRVRJTUVET1VUJztcbiAgICAgICAgICAgICAgICBpZiAoaW5mbykge1xuICAgICAgICAgICAgICAgICAgICBlcnJvci5pbmZvID0gaW5mbztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGltZWRPdXQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYXJncy5wdXNoKCguLi5jYkFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRpbWVkT3V0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKC4uLmNiQXJncyk7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIHNldHVwIHRpbWVyIGFuZCBjYWxsIG9yaWdpbmFsIGZ1bmN0aW9uXG4gICAgICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQodGltZW91dENhbGxiYWNrLCBtaWxsaXNlY29uZHMpO1xuICAgICAgICAgICAgZm4oLi4uYXJncyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJhbmdlKHNpemUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IEFycmF5KHNpemUpO1xuICAgICAgICB3aGlsZSAoc2l6ZS0tKSB7XG4gICAgICAgICAgICByZXN1bHRbc2l6ZV0gPSBzaXplO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIHNhbWUgYXMgW3RpbWVzXXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cudGltZXN9IGJ1dCBydW5zIGEgbWF4aW11bSBvZiBgbGltaXRgIGFzeW5jIG9wZXJhdGlvbnMgYXQgYVxuICAgICAqIHRpbWUuXG4gICAgICpcbiAgICAgKiBAbmFtZSB0aW1lc0xpbWl0XG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMudGltZXNde0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy50aW1lc31cbiAgICAgKiBAY2F0ZWdvcnkgQ29udHJvbCBGbG93XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGNvdW50IC0gVGhlIG51bWJlciBvZiB0aW1lcyB0byBydW4gdGhlIGZ1bmN0aW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW1pdCAtIFRoZSBtYXhpbXVtIG51bWJlciBvZiBhc3luYyBvcGVyYXRpb25zIGF0IGEgdGltZS5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gVGhlIGFzeW5jIGZ1bmN0aW9uIHRvIGNhbGwgYG5gIHRpbWVzLlxuICAgICAqIEludm9rZWQgd2l0aCB0aGUgaXRlcmF0aW9uIGluZGV4IGFuZCBhIGNhbGxiYWNrOiAobiwgbmV4dCkuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgLSBzZWUgW2FzeW5jLm1hcF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLm1hcH0uXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgaXMgcHJvdmlkZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0aW1lc0xpbWl0KGNvdW50LCBsaW1pdCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBfaXRlcmF0ZWUgPSB3cmFwQXN5bmMoaXRlcmF0ZWUpO1xuICAgICAgICByZXR1cm4gbWFwTGltaXQkMShyYW5nZShjb3VudCksIGxpbWl0LCBfaXRlcmF0ZWUsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWxscyB0aGUgYGl0ZXJhdGVlYCBmdW5jdGlvbiBgbmAgdGltZXMsIGFuZCBhY2N1bXVsYXRlcyByZXN1bHRzIGluIHRoZSBzYW1lXG4gICAgICogbWFubmVyIHlvdSB3b3VsZCB1c2Ugd2l0aCBbbWFwXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMubWFwfS5cbiAgICAgKlxuICAgICAqIEBuYW1lIHRpbWVzXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMubWFwXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMubWFwfVxuICAgICAqIEBjYXRlZ29yeSBDb250cm9sIEZsb3dcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbiAtIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gcnVuIHRoZSBmdW5jdGlvbi5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gVGhlIGFzeW5jIGZ1bmN0aW9uIHRvIGNhbGwgYG5gIHRpbWVzLlxuICAgICAqIEludm9rZWQgd2l0aCB0aGUgaXRlcmF0aW9uIGluZGV4IGFuZCBhIGNhbGxiYWNrOiAobiwgbmV4dCkuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgLSBzZWUge0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5tYXB9LlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIG5vIGNhbGxiYWNrIGlzIHByb3ZpZGVkXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vIFByZXRlbmQgdGhpcyBpcyBzb21lIGNvbXBsaWNhdGVkIGFzeW5jIGZhY3RvcnlcbiAgICAgKiB2YXIgY3JlYXRlVXNlciA9IGZ1bmN0aW9uKGlkLCBjYWxsYmFjaykge1xuICAgICAqICAgICBjYWxsYmFjayhudWxsLCB7XG4gICAgICogICAgICAgICBpZDogJ3VzZXInICsgaWRcbiAgICAgKiAgICAgfSk7XG4gICAgICogfTtcbiAgICAgKlxuICAgICAqIC8vIGdlbmVyYXRlIDUgdXNlcnNcbiAgICAgKiBhc3luYy50aW1lcyg1LCBmdW5jdGlvbihuLCBuZXh0KSB7XG4gICAgICogICAgIGNyZWF0ZVVzZXIobiwgZnVuY3Rpb24oZXJyLCB1c2VyKSB7XG4gICAgICogICAgICAgICBuZXh0KGVyciwgdXNlcik7XG4gICAgICogICAgIH0pO1xuICAgICAqIH0sIGZ1bmN0aW9uKGVyciwgdXNlcnMpIHtcbiAgICAgKiAgICAgLy8gd2Ugc2hvdWxkIG5vdyBoYXZlIDUgdXNlcnNcbiAgICAgKiB9KTtcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0aW1lcyAobiwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiB0aW1lc0xpbWl0KG4sIEluZmluaXR5LCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIHNhbWUgYXMgW3RpbWVzXXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cudGltZXN9IGJ1dCBydW5zIG9ubHkgYSBzaW5nbGUgYXN5bmMgb3BlcmF0aW9uIGF0IGEgdGltZS5cbiAgICAgKlxuICAgICAqIEBuYW1lIHRpbWVzU2VyaWVzXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMudGltZXNde0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy50aW1lc31cbiAgICAgKiBAY2F0ZWdvcnkgQ29udHJvbCBGbG93XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG4gLSBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIHJ1biB0aGUgZnVuY3Rpb24uXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIFRoZSBhc3luYyBmdW5jdGlvbiB0byBjYWxsIGBuYCB0aW1lcy5cbiAgICAgKiBJbnZva2VkIHdpdGggdGhlIGl0ZXJhdGlvbiBpbmRleCBhbmQgYSBjYWxsYmFjazogKG4sIG5leHQpLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIC0gc2VlIHtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMubWFwfS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBpcyBwcm92aWRlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRpbWVzU2VyaWVzIChuLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIHRpbWVzTGltaXQobiwgMSwgaXRlcmF0ZWUsIGNhbGxiYWNrKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgcmVsYXRpdmUgb2YgYHJlZHVjZWAuICBUYWtlcyBhbiBPYmplY3Qgb3IgQXJyYXksIGFuZCBpdGVyYXRlcyBvdmVyIGVhY2hcbiAgICAgKiBlbGVtZW50IGluIHBhcmFsbGVsLCBlYWNoIHN0ZXAgcG90ZW50aWFsbHkgbXV0YXRpbmcgYW4gYGFjY3VtdWxhdG9yYCB2YWx1ZS5cbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgYWNjdW11bGF0b3IgZGVmYXVsdHMgdG8gdGhlIHR5cGUgb2YgY29sbGVjdGlvbiBwYXNzZWQgaW4uXG4gICAgICpcbiAgICAgKiBAbmFtZSB0cmFuc2Zvcm1cbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7Kn0gW2FjY3VtdWxhdG9yXSAtIFRoZSBpbml0aWFsIHN0YXRlIG9mIHRoZSB0cmFuc2Zvcm0uICBJZiBvbWl0dGVkLFxuICAgICAqIGl0IHdpbGwgZGVmYXVsdCB0byBhbiBlbXB0eSBPYmplY3Qgb3IgQXJyYXksIGRlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiBgY29sbGBcbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQSBmdW5jdGlvbiBhcHBsaWVkIHRvIGVhY2ggaXRlbSBpbiB0aGVcbiAgICAgKiBjb2xsZWN0aW9uIHRoYXQgcG90ZW50aWFsbHkgbW9kaWZpZXMgdGhlIGFjY3VtdWxhdG9yLlxuICAgICAqIEludm9rZWQgd2l0aCAoYWNjdW11bGF0b3IsIGl0ZW0sIGtleSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCBhZnRlciBhbGwgdGhlXG4gICAgICogYGl0ZXJhdGVlYCBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZC4gUmVzdWx0IGlzIHRoZSB0cmFuc2Zvcm1lZCBhY2N1bXVsYXRvci5cbiAgICAgKiBJbnZva2VkIHdpdGggKGVyciwgcmVzdWx0KS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBwcm92aWRlZFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBmaWxlMS50eHQgaXMgYSBmaWxlIHRoYXQgaXMgMTAwMCBieXRlcyBpbiBzaXplXG4gICAgICogLy8gZmlsZTIudHh0IGlzIGEgZmlsZSB0aGF0IGlzIDIwMDAgYnl0ZXMgaW4gc2l6ZVxuICAgICAqIC8vIGZpbGUzLnR4dCBpcyBhIGZpbGUgdGhhdCBpcyAzMDAwIGJ5dGVzIGluIHNpemVcbiAgICAgKlxuICAgICAqIC8vIGhlbHBlciBmdW5jdGlvbiB0aGF0IHJldHVybnMgaHVtYW4tcmVhZGFibGUgc2l6ZSBmb3JtYXQgZnJvbSBieXRlc1xuICAgICAqIGZ1bmN0aW9uIGZvcm1hdEJ5dGVzKGJ5dGVzLCBkZWNpbWFscyA9IDIpIHtcbiAgICAgKiAgIC8vIGltcGxlbWVudGF0aW9uIG5vdCBpbmNsdWRlZCBmb3IgYnJldml0eVxuICAgICAqICAgcmV0dXJuIGh1bWFuUmVhZGJsZUZpbGVzaXplO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIGNvbnN0IGZpbGVMaXN0ID0gWydmaWxlMS50eHQnLCdmaWxlMi50eHQnLCdmaWxlMy50eHQnXTtcbiAgICAgKlxuICAgICAqIC8vIGFzeW5jaHJvbm91cyBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGZpbGUgc2l6ZSwgdHJhbnNmb3JtZWQgdG8gaHVtYW4tcmVhZGFibGUgZm9ybWF0XG4gICAgICogLy8gZS5nLiAxMDI0IGJ5dGVzID0gMUtCLCAxMjM0IGJ5dGVzID0gMS4yMSBLQiwgMTA0ODU3NiBieXRlcyA9IDFNQiwgZXRjLlxuICAgICAqIGZ1bmN0aW9uIHRyYW5zZm9ybUZpbGVTaXplKGFjYywgdmFsdWUsIGtleSwgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgZnMuc3RhdCh2YWx1ZSwgZnVuY3Rpb24oZXJyLCBzdGF0KSB7XG4gICAgICogICAgICAgICBpZiAoZXJyKSB7XG4gICAgICogICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICogICAgICAgICB9XG4gICAgICogICAgICAgICBhY2Nba2V5XSA9IGZvcm1hdEJ5dGVzKHN0YXQuc2l6ZSk7XG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgKiAgICAgfSk7XG4gICAgICogfVxuICAgICAqXG4gICAgICogLy8gVXNpbmcgY2FsbGJhY2tzXG4gICAgICogYXN5bmMudHJhbnNmb3JtKGZpbGVMaXN0LCB0cmFuc2Zvcm1GaWxlU2l6ZSwgZnVuY3Rpb24oZXJyLCByZXN1bHQpIHtcbiAgICAgKiAgICAgaWYoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9IGVsc2Uge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgICAgIC8vIFsgJzEwMDAgQnl0ZXMnLCAnMS45NSBLQicsICcyLjkzIEtCJyBdXG4gICAgICogICAgIH1cbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIFByb21pc2VzXG4gICAgICogYXN5bmMudHJhbnNmb3JtKGZpbGVMaXN0LCB0cmFuc2Zvcm1GaWxlU2l6ZSlcbiAgICAgKiAudGhlbihyZXN1bHQgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAvLyBbICcxMDAwIEJ5dGVzJywgJzEuOTUgS0InLCAnMi45MyBLQicgXVxuICAgICAqIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBhc3luYy9hd2FpdFxuICAgICAqIChhc3luYyAoKSA9PiB7XG4gICAgICogICAgIHRyeSB7XG4gICAgICogICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgYXN5bmMudHJhbnNmb3JtKGZpbGVMaXN0LCB0cmFuc2Zvcm1GaWxlU2l6ZSk7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAgICAgLy8gWyAnMTAwMCBCeXRlcycsICcxLjk1IEtCJywgJzIuOTMgS0InIF1cbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9XG4gICAgICogfSkoKTtcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBmaWxlMS50eHQgaXMgYSBmaWxlIHRoYXQgaXMgMTAwMCBieXRlcyBpbiBzaXplXG4gICAgICogLy8gZmlsZTIudHh0IGlzIGEgZmlsZSB0aGF0IGlzIDIwMDAgYnl0ZXMgaW4gc2l6ZVxuICAgICAqIC8vIGZpbGUzLnR4dCBpcyBhIGZpbGUgdGhhdCBpcyAzMDAwIGJ5dGVzIGluIHNpemVcbiAgICAgKlxuICAgICAqIC8vIGhlbHBlciBmdW5jdGlvbiB0aGF0IHJldHVybnMgaHVtYW4tcmVhZGFibGUgc2l6ZSBmb3JtYXQgZnJvbSBieXRlc1xuICAgICAqIGZ1bmN0aW9uIGZvcm1hdEJ5dGVzKGJ5dGVzLCBkZWNpbWFscyA9IDIpIHtcbiAgICAgKiAgIC8vIGltcGxlbWVudGF0aW9uIG5vdCBpbmNsdWRlZCBmb3IgYnJldml0eVxuICAgICAqICAgcmV0dXJuIGh1bWFuUmVhZGJsZUZpbGVzaXplO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIGNvbnN0IGZpbGVNYXAgPSB7IGYxOiAnZmlsZTEudHh0JywgZjI6ICdmaWxlMi50eHQnLCBmMzogJ2ZpbGUzLnR4dCcgfTtcbiAgICAgKlxuICAgICAqIC8vIGFzeW5jaHJvbm91cyBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGZpbGUgc2l6ZSwgdHJhbnNmb3JtZWQgdG8gaHVtYW4tcmVhZGFibGUgZm9ybWF0XG4gICAgICogLy8gZS5nLiAxMDI0IGJ5dGVzID0gMUtCLCAxMjM0IGJ5dGVzID0gMS4yMSBLQiwgMTA0ODU3NiBieXRlcyA9IDFNQiwgZXRjLlxuICAgICAqIGZ1bmN0aW9uIHRyYW5zZm9ybUZpbGVTaXplKGFjYywgdmFsdWUsIGtleSwgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgZnMuc3RhdCh2YWx1ZSwgZnVuY3Rpb24oZXJyLCBzdGF0KSB7XG4gICAgICogICAgICAgICBpZiAoZXJyKSB7XG4gICAgICogICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICogICAgICAgICB9XG4gICAgICogICAgICAgICBhY2Nba2V5XSA9IGZvcm1hdEJ5dGVzKHN0YXQuc2l6ZSk7XG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgKiAgICAgfSk7XG4gICAgICogfVxuICAgICAqXG4gICAgICogLy8gVXNpbmcgY2FsbGJhY2tzXG4gICAgICogYXN5bmMudHJhbnNmb3JtKGZpbGVNYXAsIHRyYW5zZm9ybUZpbGVTaXplLCBmdW5jdGlvbihlcnIsIHJlc3VsdCkge1xuICAgICAqICAgICBpZihlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgIH0gZWxzZSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAgICAgLy8geyBmMTogJzEwMDAgQnl0ZXMnLCBmMjogJzEuOTUgS0InLCBmMzogJzIuOTMgS0InIH1cbiAgICAgKiAgICAgfVxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgUHJvbWlzZXNcbiAgICAgKiBhc3luYy50cmFuc2Zvcm0oZmlsZU1hcCwgdHJhbnNmb3JtRmlsZVNpemUpXG4gICAgICogLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgLy8geyBmMTogJzEwMDAgQnl0ZXMnLCBmMjogJzEuOTUgS0InLCBmMzogJzIuOTMgS0InIH1cbiAgICAgKiB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgYXN5bmMvYXdhaXRcbiAgICAgKiBhc3luYyAoKSA9PiB7XG4gICAgICogICAgIHRyeSB7XG4gICAgICogICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgYXN5bmMudHJhbnNmb3JtKGZpbGVNYXAsIHRyYW5zZm9ybUZpbGVTaXplKTtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XG4gICAgICogICAgICAgICAvLyB7IGYxOiAnMTAwMCBCeXRlcycsIGYyOiAnMS45NSBLQicsIGYzOiAnMi45MyBLQicgfVxuICAgICAqICAgICB9XG4gICAgICogICAgIGNhdGNoIChlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgIH1cbiAgICAgKiB9XG4gICAgICpcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0cmFuc2Zvcm0gKGNvbGwsIGFjY3VtdWxhdG9yLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPD0gMyAmJiB0eXBlb2YgYWNjdW11bGF0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gaXRlcmF0ZWU7XG4gICAgICAgICAgICBpdGVyYXRlZSA9IGFjY3VtdWxhdG9yO1xuICAgICAgICAgICAgYWNjdW11bGF0b3IgPSBBcnJheS5pc0FycmF5KGNvbGwpID8gW10gOiB7fTtcbiAgICAgICAgfVxuICAgICAgICBjYWxsYmFjayA9IG9uY2UoY2FsbGJhY2sgfHwgcHJvbWlzZUNhbGxiYWNrKCkpO1xuICAgICAgICB2YXIgX2l0ZXJhdGVlID0gd3JhcEFzeW5jKGl0ZXJhdGVlKTtcblxuICAgICAgICBlYWNoT2YkMShjb2xsLCAodiwgaywgY2IpID0+IHtcbiAgICAgICAgICAgIF9pdGVyYXRlZShhY2N1bXVsYXRvciwgdiwgaywgY2IpO1xuICAgICAgICB9LCBlcnIgPT4gY2FsbGJhY2soZXJyLCBhY2N1bXVsYXRvcikpO1xuICAgICAgICByZXR1cm4gY2FsbGJhY2tbUFJPTUlTRV9TWU1CT0xdXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSXQgcnVucyBlYWNoIHRhc2sgaW4gc2VyaWVzIGJ1dCBzdG9wcyB3aGVuZXZlciBhbnkgb2YgdGhlIGZ1bmN0aW9ucyB3ZXJlXG4gICAgICogc3VjY2Vzc2Z1bC4gSWYgb25lIG9mIHRoZSB0YXNrcyB3ZXJlIHN1Y2Nlc3NmdWwsIHRoZSBgY2FsbGJhY2tgIHdpbGwgYmVcbiAgICAgKiBwYXNzZWQgdGhlIHJlc3VsdCBvZiB0aGUgc3VjY2Vzc2Z1bCB0YXNrLiBJZiBhbGwgdGFza3MgZmFpbCwgdGhlIGNhbGxiYWNrXG4gICAgICogd2lsbCBiZSBwYXNzZWQgdGhlIGVycm9yIGFuZCByZXN1bHQgKGlmIGFueSkgb2YgdGhlIGZpbmFsIGF0dGVtcHQuXG4gICAgICpcbiAgICAgKiBAbmFtZSB0cnlFYWNoXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGNhdGVnb3J5IENvbnRyb2wgRmxvd1xuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IHRhc2tzIC0gQSBjb2xsZWN0aW9uIGNvbnRhaW5pbmcgZnVuY3Rpb25zIHRvXG4gICAgICogcnVuLCBlYWNoIGZ1bmN0aW9uIGlzIHBhc3NlZCBhIGBjYWxsYmFjayhlcnIsIHJlc3VsdClgIGl0IG11c3QgY2FsbCBvblxuICAgICAqIGNvbXBsZXRpb24gd2l0aCBhbiBlcnJvciBgZXJyYCAod2hpY2ggY2FuIGJlIGBudWxsYCkgYW5kIGFuIG9wdGlvbmFsIGByZXN1bHRgXG4gICAgICogdmFsdWUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEFuIG9wdGlvbmFsIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCB3aGVuIG9uZVxuICAgICAqIG9mIHRoZSB0YXNrcyBoYXMgc3VjY2VlZGVkLCBvciBhbGwgaGF2ZSBmYWlsZWQuIEl0IHJlY2VpdmVzIHRoZSBgZXJyYCBhbmRcbiAgICAgKiBgcmVzdWx0YCBhcmd1bWVudHMgb2YgdGhlIGxhc3QgYXR0ZW1wdCBhdCBjb21wbGV0aW5nIHRoZSBgdGFza2AuIEludm9rZWQgd2l0aFxuICAgICAqIChlcnIsIHJlc3VsdHMpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIG5vIGNhbGxiYWNrIGlzIHBhc3NlZFxuICAgICAqIEBleGFtcGxlXG4gICAgICogYXN5bmMudHJ5RWFjaChbXG4gICAgICogICAgIGZ1bmN0aW9uIGdldERhdGFGcm9tRmlyc3RXZWJzaXRlKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAvLyBUcnkgZ2V0dGluZyB0aGUgZGF0YSBmcm9tIHRoZSBmaXJzdCB3ZWJzaXRlXG4gICAgICogICAgICAgICBjYWxsYmFjayhlcnIsIGRhdGEpO1xuICAgICAqICAgICB9LFxuICAgICAqICAgICBmdW5jdGlvbiBnZXREYXRhRnJvbVNlY29uZFdlYnNpdGUoY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIC8vIEZpcnN0IHdlYnNpdGUgZmFpbGVkLFxuICAgICAqICAgICAgICAgLy8gVHJ5IGdldHRpbmcgdGhlIGRhdGEgZnJvbSB0aGUgYmFja3VwIHdlYnNpdGVcbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKGVyciwgZGF0YSk7XG4gICAgICogICAgIH1cbiAgICAgKiBdLFxuICAgICAqIC8vIG9wdGlvbmFsIGNhbGxiYWNrXG4gICAgICogZnVuY3Rpb24oZXJyLCByZXN1bHRzKSB7XG4gICAgICogICAgIE5vdyBkbyBzb21ldGhpbmcgd2l0aCB0aGUgZGF0YS5cbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRyeUVhY2godGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBlcnJvciA9IG51bGw7XG4gICAgICAgIHZhciByZXN1bHQ7XG4gICAgICAgIHJldHVybiBlYWNoU2VyaWVzJDEodGFza3MsICh0YXNrLCB0YXNrQ2IpID0+IHtcbiAgICAgICAgICAgIHdyYXBBc3luYyh0YXNrKSgoZXJyLCAuLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVyciA9PT0gZmFsc2UpIHJldHVybiB0YXNrQ2IoZXJyKTtcblxuICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgW3Jlc3VsdF0gPSBhcmdzO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVycm9yID0gZXJyO1xuICAgICAgICAgICAgICAgIHRhc2tDYihlcnIgPyBudWxsIDoge30pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sICgpID0+IGNhbGxiYWNrKGVycm9yLCByZXN1bHQpKTtcbiAgICB9XG5cbiAgICB2YXIgdHJ5RWFjaCQxID0gYXdhaXRpZnkodHJ5RWFjaCk7XG5cbiAgICAvKipcbiAgICAgKiBVbmRvZXMgYSBbbWVtb2l6ZV17QGxpbmsgbW9kdWxlOlV0aWxzLm1lbW9pemV9ZCBmdW5jdGlvbiwgcmV2ZXJ0aW5nIGl0IHRvIHRoZSBvcmlnaW5hbCxcbiAgICAgKiB1bm1lbW9pemVkIGZvcm0uIEhhbmR5IGZvciB0ZXN0aW5nLlxuICAgICAqXG4gICAgICogQG5hbWUgdW5tZW1vaXplXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6VXRpbHNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMubWVtb2l6ZV17QGxpbmsgbW9kdWxlOlV0aWxzLm1lbW9pemV9XG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGZuIC0gdGhlIG1lbW9pemVkIGZ1bmN0aW9uXG4gICAgICogQHJldHVybnMge0FzeW5jRnVuY3Rpb259IGEgZnVuY3Rpb24gdGhhdCBjYWxscyB0aGUgb3JpZ2luYWwgdW5tZW1vaXplZCBmdW5jdGlvblxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHVubWVtb2l6ZShmbikge1xuICAgICAgICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICAgIHJldHVybiAoZm4udW5tZW1vaXplZCB8fCBmbikoLi4uYXJncyk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVwZWF0ZWRseSBjYWxsIGBpdGVyYXRlZWAsIHdoaWxlIGB0ZXN0YCByZXR1cm5zIGB0cnVlYC4gQ2FsbHMgYGNhbGxiYWNrYCB3aGVuXG4gICAgICogc3RvcHBlZCwgb3IgYW4gZXJyb3Igb2NjdXJzLlxuICAgICAqXG4gICAgICogQG5hbWUgd2hpbHN0XG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGNhdGVnb3J5IENvbnRyb2wgRmxvd1xuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gdGVzdCAtIGFzeW5jaHJvbm91cyB0cnV0aCB0ZXN0IHRvIHBlcmZvcm0gYmVmb3JlIGVhY2hcbiAgICAgKiBleGVjdXRpb24gb2YgYGl0ZXJhdGVlYC4gSW52b2tlZCB3aXRoIChjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEFuIGFzeW5jIGZ1bmN0aW9uIHdoaWNoIGlzIGNhbGxlZCBlYWNoIHRpbWVcbiAgICAgKiBgdGVzdGAgcGFzc2VzLiBJbnZva2VkIHdpdGggKGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgYWZ0ZXIgdGhlIHRlc3RcbiAgICAgKiBmdW5jdGlvbiBoYXMgZmFpbGVkIGFuZCByZXBlYXRlZCBleGVjdXRpb24gb2YgYGl0ZXJhdGVlYCBoYXMgc3RvcHBlZC4gYGNhbGxiYWNrYFxuICAgICAqIHdpbGwgYmUgcGFzc2VkIGFuIGVycm9yIGFuZCBhbnkgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgZmluYWwgYGl0ZXJhdGVlYCdzXG4gICAgICogY2FsbGJhY2suIEludm9rZWQgd2l0aCAoZXJyLCBbcmVzdWx0c10pO1xuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIG5vIGNhbGxiYWNrIGlzIHBhc3NlZFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgY291bnQgPSAwO1xuICAgICAqIGFzeW5jLndoaWxzdChcbiAgICAgKiAgICAgZnVuY3Rpb24gdGVzdChjYikgeyBjYihudWxsLCBjb3VudCA8IDUpOyB9LFxuICAgICAqICAgICBmdW5jdGlvbiBpdGVyKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBjb3VudCsrO1xuICAgICAqICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBjb3VudCk7XG4gICAgICogICAgICAgICB9LCAxMDAwKTtcbiAgICAgKiAgICAgfSxcbiAgICAgKiAgICAgZnVuY3Rpb24gKGVyciwgbikge1xuICAgICAqICAgICAgICAgLy8gNSBzZWNvbmRzIGhhdmUgcGFzc2VkLCBuID0gNVxuICAgICAqICAgICB9XG4gICAgICogKTtcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB3aGlsc3QodGVzdCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gb25seU9uY2UoY2FsbGJhY2spO1xuICAgICAgICB2YXIgX2ZuID0gd3JhcEFzeW5jKGl0ZXJhdGVlKTtcbiAgICAgICAgdmFyIF90ZXN0ID0gd3JhcEFzeW5jKHRlc3QpO1xuICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuXG4gICAgICAgIGZ1bmN0aW9uIG5leHQoZXJyLCAuLi5yZXN0KSB7XG4gICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIHJlc3VsdHMgPSByZXN0O1xuICAgICAgICAgICAgaWYgKGVyciA9PT0gZmFsc2UpIHJldHVybjtcbiAgICAgICAgICAgIF90ZXN0KGNoZWNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGNoZWNrKGVyciwgdHJ1dGgpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgaWYgKGVyciA9PT0gZmFsc2UpIHJldHVybjtcbiAgICAgICAgICAgIGlmICghdHJ1dGgpIHJldHVybiBjYWxsYmFjayhudWxsLCAuLi5yZXN1bHRzKTtcbiAgICAgICAgICAgIF9mbihuZXh0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBfdGVzdChjaGVjayk7XG4gICAgfVxuICAgIHZhciB3aGlsc3QkMSA9IGF3YWl0aWZ5KHdoaWxzdCwgMyk7XG5cbiAgICAvKipcbiAgICAgKiBSZXBlYXRlZGx5IGNhbGwgYGl0ZXJhdGVlYCB1bnRpbCBgdGVzdGAgcmV0dXJucyBgdHJ1ZWAuIENhbGxzIGBjYWxsYmFja2Agd2hlblxuICAgICAqIHN0b3BwZWQsIG9yIGFuIGVycm9yIG9jY3Vycy4gYGNhbGxiYWNrYCB3aWxsIGJlIHBhc3NlZCBhbiBlcnJvciBhbmQgYW55XG4gICAgICogYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgZmluYWwgYGl0ZXJhdGVlYCdzIGNhbGxiYWNrLlxuICAgICAqXG4gICAgICogVGhlIGludmVyc2Ugb2YgW3doaWxzdF17QGxpbmsgbW9kdWxlOkNvbnRyb2xGbG93LndoaWxzdH0uXG4gICAgICpcbiAgICAgKiBAbmFtZSB1bnRpbFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbnRyb2xGbG93XG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLndoaWxzdF17QGxpbmsgbW9kdWxlOkNvbnRyb2xGbG93LndoaWxzdH1cbiAgICAgKiBAY2F0ZWdvcnkgQ29udHJvbCBGbG93XG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSB0ZXN0IC0gYXN5bmNocm9ub3VzIHRydXRoIHRlc3QgdG8gcGVyZm9ybSBiZWZvcmUgZWFjaFxuICAgICAqIGV4ZWN1dGlvbiBvZiBgaXRlcmF0ZWVgLiBJbnZva2VkIHdpdGggKGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQW4gYXN5bmMgZnVuY3Rpb24gd2hpY2ggaXMgY2FsbGVkIGVhY2ggdGltZVxuICAgICAqIGB0ZXN0YCBmYWlscy4gSW52b2tlZCB3aXRoIChjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIGFmdGVyIHRoZSB0ZXN0XG4gICAgICogZnVuY3Rpb24gaGFzIHBhc3NlZCBhbmQgcmVwZWF0ZWQgZXhlY3V0aW9uIG9mIGBpdGVyYXRlZWAgaGFzIHN0b3BwZWQuIGBjYWxsYmFja2BcbiAgICAgKiB3aWxsIGJlIHBhc3NlZCBhbiBlcnJvciBhbmQgYW55IGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIGZpbmFsIGBpdGVyYXRlZWAnc1xuICAgICAqIGNhbGxiYWNrLiBJbnZva2VkIHdpdGggKGVyciwgW3Jlc3VsdHNdKTtcbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBhIGNhbGxiYWNrIGlzIG5vdCBwYXNzZWRcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogY29uc3QgcmVzdWx0cyA9IFtdXG4gICAgICogbGV0IGZpbmlzaGVkID0gZmFsc2VcbiAgICAgKiBhc3luYy51bnRpbChmdW5jdGlvbiB0ZXN0KGNiKSB7XG4gICAgICogICAgIGNiKG51bGwsIGZpbmlzaGVkKVxuICAgICAqIH0sIGZ1bmN0aW9uIGl0ZXIobmV4dCkge1xuICAgICAqICAgICBmZXRjaFBhZ2UodXJsLCAoZXJyLCBib2R5KSA9PiB7XG4gICAgICogICAgICAgICBpZiAoZXJyKSByZXR1cm4gbmV4dChlcnIpXG4gICAgICogICAgICAgICByZXN1bHRzID0gcmVzdWx0cy5jb25jYXQoYm9keS5vYmplY3RzKVxuICAgICAqICAgICAgICAgZmluaXNoZWQgPSAhIWJvZHkubmV4dFxuICAgICAqICAgICAgICAgbmV4dChlcnIpXG4gICAgICogICAgIH0pXG4gICAgICogfSwgZnVuY3Rpb24gZG9uZSAoZXJyKSB7XG4gICAgICogICAgIC8vIGFsbCBwYWdlcyBoYXZlIGJlZW4gZmV0Y2hlZFxuICAgICAqIH0pXG4gICAgICovXG4gICAgZnVuY3Rpb24gdW50aWwodGVzdCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IF90ZXN0ID0gd3JhcEFzeW5jKHRlc3QpO1xuICAgICAgICByZXR1cm4gd2hpbHN0JDEoKGNiKSA9PiBfdGVzdCgoZXJyLCB0cnV0aCkgPT4gY2IgKGVyciwgIXRydXRoKSksIGl0ZXJhdGVlLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUnVucyB0aGUgYHRhc2tzYCBhcnJheSBvZiBmdW5jdGlvbnMgaW4gc2VyaWVzLCBlYWNoIHBhc3NpbmcgdGhlaXIgcmVzdWx0cyB0b1xuICAgICAqIHRoZSBuZXh0IGluIHRoZSBhcnJheS4gSG93ZXZlciwgaWYgYW55IG9mIHRoZSBgdGFza3NgIHBhc3MgYW4gZXJyb3IgdG8gdGhlaXJcbiAgICAgKiBvd24gY2FsbGJhY2ssIHRoZSBuZXh0IGZ1bmN0aW9uIGlzIG5vdCBleGVjdXRlZCwgYW5kIHRoZSBtYWluIGBjYWxsYmFja2AgaXNcbiAgICAgKiBpbW1lZGlhdGVseSBjYWxsZWQgd2l0aCB0aGUgZXJyb3IuXG4gICAgICpcbiAgICAgKiBAbmFtZSB3YXRlcmZhbGxcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb250cm9sRmxvd1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgQ29udHJvbCBGbG93XG4gICAgICogQHBhcmFtIHtBcnJheX0gdGFza3MgLSBBbiBhcnJheSBvZiBbYXN5bmMgZnVuY3Rpb25zXXtAbGluayBBc3luY0Z1bmN0aW9ufVxuICAgICAqIHRvIHJ1bi5cbiAgICAgKiBFYWNoIGZ1bmN0aW9uIHNob3VsZCBjb21wbGV0ZSB3aXRoIGFueSBudW1iZXIgb2YgYHJlc3VsdGAgdmFsdWVzLlxuICAgICAqIFRoZSBgcmVzdWx0YCB2YWx1ZXMgd2lsbCBiZSBwYXNzZWQgYXMgYXJndW1lbnRzLCBpbiBvcmRlciwgdG8gdGhlIG5leHQgdGFzay5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQW4gb3B0aW9uYWwgY2FsbGJhY2sgdG8gcnVuIG9uY2UgYWxsIHRoZVxuICAgICAqIGZ1bmN0aW9ucyBoYXZlIGNvbXBsZXRlZC4gVGhpcyB3aWxsIGJlIHBhc3NlZCB0aGUgcmVzdWx0cyBvZiB0aGUgbGFzdCB0YXNrJ3NcbiAgICAgKiBjYWxsYmFjay4gSW52b2tlZCB3aXRoIChlcnIsIFtyZXN1bHRzXSkuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgYSBjYWxsYmFjayBpcyBvbWl0dGVkXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGFzeW5jLndhdGVyZmFsbChbXG4gICAgICogICAgIGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCAnb25lJywgJ3R3bycpO1xuICAgICAqICAgICB9LFxuICAgICAqICAgICBmdW5jdGlvbihhcmcxLCBhcmcyLCBjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgLy8gYXJnMSBub3cgZXF1YWxzICdvbmUnIGFuZCBhcmcyIG5vdyBlcXVhbHMgJ3R3bydcbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsICd0aHJlZScpO1xuICAgICAqICAgICB9LFxuICAgICAqICAgICBmdW5jdGlvbihhcmcxLCBjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgLy8gYXJnMSBub3cgZXF1YWxzICd0aHJlZSdcbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsICdkb25lJyk7XG4gICAgICogICAgIH1cbiAgICAgKiBdLCBmdW5jdGlvbiAoZXJyLCByZXN1bHQpIHtcbiAgICAgKiAgICAgLy8gcmVzdWx0IG5vdyBlcXVhbHMgJ2RvbmUnXG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBPciwgd2l0aCBuYW1lZCBmdW5jdGlvbnM6XG4gICAgICogYXN5bmMud2F0ZXJmYWxsKFtcbiAgICAgKiAgICAgbXlGaXJzdEZ1bmN0aW9uLFxuICAgICAqICAgICBteVNlY29uZEZ1bmN0aW9uLFxuICAgICAqICAgICBteUxhc3RGdW5jdGlvbixcbiAgICAgKiBdLCBmdW5jdGlvbiAoZXJyLCByZXN1bHQpIHtcbiAgICAgKiAgICAgLy8gcmVzdWx0IG5vdyBlcXVhbHMgJ2RvbmUnXG4gICAgICogfSk7XG4gICAgICogZnVuY3Rpb24gbXlGaXJzdEZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgIGNhbGxiYWNrKG51bGwsICdvbmUnLCAndHdvJyk7XG4gICAgICogfVxuICAgICAqIGZ1bmN0aW9uIG15U2Vjb25kRnVuY3Rpb24oYXJnMSwgYXJnMiwgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgLy8gYXJnMSBub3cgZXF1YWxzICdvbmUnIGFuZCBhcmcyIG5vdyBlcXVhbHMgJ3R3bydcbiAgICAgKiAgICAgY2FsbGJhY2sobnVsbCwgJ3RocmVlJyk7XG4gICAgICogfVxuICAgICAqIGZ1bmN0aW9uIG15TGFzdEZ1bmN0aW9uKGFyZzEsIGNhbGxiYWNrKSB7XG4gICAgICogICAgIC8vIGFyZzEgbm93IGVxdWFscyAndGhyZWUnXG4gICAgICogICAgIGNhbGxiYWNrKG51bGwsICdkb25lJyk7XG4gICAgICogfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHdhdGVyZmFsbCAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gb25jZShjYWxsYmFjayk7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0YXNrcykpIHJldHVybiBjYWxsYmFjayhuZXcgRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IHRvIHdhdGVyZmFsbCBtdXN0IGJlIGFuIGFycmF5IG9mIGZ1bmN0aW9ucycpKTtcbiAgICAgICAgaWYgKCF0YXNrcy5sZW5ndGgpIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB2YXIgdGFza0luZGV4ID0gMDtcblxuICAgICAgICBmdW5jdGlvbiBuZXh0VGFzayhhcmdzKSB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IHdyYXBBc3luYyh0YXNrc1t0YXNrSW5kZXgrK10pO1xuICAgICAgICAgICAgdGFzayguLi5hcmdzLCBvbmx5T25jZShuZXh0KSk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBuZXh0KGVyciwgLi4uYXJncykge1xuICAgICAgICAgICAgaWYgKGVyciA9PT0gZmFsc2UpIHJldHVyblxuICAgICAgICAgICAgaWYgKGVyciB8fCB0YXNrSW5kZXggPT09IHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIsIC4uLmFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV4dFRhc2soYXJncyk7XG4gICAgICAgIH1cblxuICAgICAgICBuZXh0VGFzayhbXSk7XG4gICAgfVxuXG4gICAgdmFyIHdhdGVyZmFsbCQxID0gYXdhaXRpZnkod2F0ZXJmYWxsKTtcblxuICAgIC8qKlxuICAgICAqIEFuIFwiYXN5bmMgZnVuY3Rpb25cIiBpbiB0aGUgY29udGV4dCBvZiBBc3luYyBpcyBhbiBhc3luY2hyb25vdXMgZnVuY3Rpb24gd2l0aFxuICAgICAqIGEgdmFyaWFibGUgbnVtYmVyIG9mIHBhcmFtZXRlcnMsIHdpdGggdGhlIGZpbmFsIHBhcmFtZXRlciBiZWluZyBhIGNhbGxiYWNrLlxuICAgICAqIChgZnVuY3Rpb24gKGFyZzEsIGFyZzIsIC4uLiwgY2FsbGJhY2spIHt9YClcbiAgICAgKiBUaGUgZmluYWwgY2FsbGJhY2sgaXMgb2YgdGhlIGZvcm0gYGNhbGxiYWNrKGVyciwgcmVzdWx0cy4uLilgLCB3aGljaCBtdXN0IGJlXG4gICAgICogY2FsbGVkIG9uY2UgdGhlIGZ1bmN0aW9uIGlzIGNvbXBsZXRlZC4gIFRoZSBjYWxsYmFjayBzaG91bGQgYmUgY2FsbGVkIHdpdGggYVxuICAgICAqIEVycm9yIGFzIGl0cyBmaXJzdCBhcmd1bWVudCB0byBzaWduYWwgdGhhdCBhbiBlcnJvciBvY2N1cnJlZC5cbiAgICAgKiBPdGhlcndpc2UsIGlmIG5vIGVycm9yIG9jY3VycmVkLCBpdCBzaG91bGQgYmUgY2FsbGVkIHdpdGggYG51bGxgIGFzIHRoZSBmaXJzdFxuICAgICAqIGFyZ3VtZW50LCBhbmQgYW55IGFkZGl0aW9uYWwgYHJlc3VsdGAgYXJndW1lbnRzIHRoYXQgbWF5IGFwcGx5LCB0byBzaWduYWxcbiAgICAgKiBzdWNjZXNzZnVsIGNvbXBsZXRpb24uXG4gICAgICogVGhlIGNhbGxiYWNrIG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSwgaWRlYWxseSBvbiBhIGxhdGVyIHRpY2sgb2YgdGhlXG4gICAgICogSmF2YVNjcmlwdCBldmVudCBsb29wLlxuICAgICAqXG4gICAgICogVGhpcyB0eXBlIG9mIGZ1bmN0aW9uIGlzIGFsc28gcmVmZXJyZWQgdG8gYXMgYSBcIk5vZGUtc3R5bGUgYXN5bmMgZnVuY3Rpb25cIixcbiAgICAgKiBvciBhIFwiY29udGludWF0aW9uIHBhc3Npbmctc3R5bGUgZnVuY3Rpb25cIiAoQ1BTKS4gTW9zdCBvZiB0aGUgbWV0aG9kcyBvZiB0aGlzXG4gICAgICogbGlicmFyeSBhcmUgdGhlbXNlbHZlcyBDUFMvTm9kZS1zdHlsZSBhc3luYyBmdW5jdGlvbnMsIG9yIGZ1bmN0aW9ucyB0aGF0XG4gICAgICogcmV0dXJuIENQUy9Ob2RlLXN0eWxlIGFzeW5jIGZ1bmN0aW9ucy5cbiAgICAgKlxuICAgICAqIFdoZXJldmVyIHdlIGFjY2VwdCBhIE5vZGUtc3R5bGUgYXN5bmMgZnVuY3Rpb24sIHdlIGFsc28gZGlyZWN0bHkgYWNjZXB0IGFuXG4gICAgICogW0VTMjAxNyBgYXN5bmNgIGZ1bmN0aW9uXXtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9TdGF0ZW1lbnRzL2FzeW5jX2Z1bmN0aW9ufS5cbiAgICAgKiBJbiB0aGlzIGNhc2UsIHRoZSBgYXN5bmNgIGZ1bmN0aW9uIHdpbGwgbm90IGJlIHBhc3NlZCBhIGZpbmFsIGNhbGxiYWNrXG4gICAgICogYXJndW1lbnQsIGFuZCBhbnkgdGhyb3duIGVycm9yIHdpbGwgYmUgdXNlZCBhcyB0aGUgYGVycmAgYXJndW1lbnQgb2YgdGhlXG4gICAgICogaW1wbGljaXQgY2FsbGJhY2ssIGFuZCB0aGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgdXNlZCBhcyB0aGUgYHJlc3VsdGAgdmFsdWUuXG4gICAgICogKGkuZS4gYSBgcmVqZWN0ZWRgIG9mIHRoZSByZXR1cm5lZCBQcm9taXNlIGJlY29tZXMgdGhlIGBlcnJgIGNhbGxiYWNrXG4gICAgICogYXJndW1lbnQsIGFuZCBhIGByZXNvbHZlZGAgdmFsdWUgYmVjb21lcyB0aGUgYHJlc3VsdGAuKVxuICAgICAqXG4gICAgICogTm90ZSwgZHVlIHRvIEphdmFTY3JpcHQgbGltaXRhdGlvbnMsIHdlIGNhbiBvbmx5IGRldGVjdCBuYXRpdmUgYGFzeW5jYFxuICAgICAqIGZ1bmN0aW9ucyBhbmQgbm90IHRyYW5zcGlsaWVkIGltcGxlbWVudGF0aW9ucy5cbiAgICAgKiBZb3VyIGVudmlyb25tZW50IG11c3QgaGF2ZSBgYXN5bmNgL2Bhd2FpdGAgc3VwcG9ydCBmb3IgdGhpcyB0byB3b3JrLlxuICAgICAqIChlLmcuIE5vZGUgPiB2Ny42LCBvciBhIHJlY2VudCB2ZXJzaW9uIG9mIGEgbW9kZXJuIGJyb3dzZXIpLlxuICAgICAqIElmIHlvdSBhcmUgdXNpbmcgYGFzeW5jYCBmdW5jdGlvbnMgdGhyb3VnaCBhIHRyYW5zcGlsZXIgKGUuZy4gQmFiZWwpLCB5b3VcbiAgICAgKiBtdXN0IHN0aWxsIHdyYXAgdGhlIGZ1bmN0aW9uIHdpdGggW2FzeW5jaWZ5XXtAbGluayBtb2R1bGU6VXRpbHMuYXN5bmNpZnl9LFxuICAgICAqIGJlY2F1c2UgdGhlIGBhc3luYyBmdW5jdGlvbmAgd2lsbCBiZSBjb21waWxlZCB0byBhbiBvcmRpbmFyeSBmdW5jdGlvbiB0aGF0XG4gICAgICogcmV0dXJucyBhIHByb21pc2UuXG4gICAgICpcbiAgICAgKiBAdHlwZWRlZiB7RnVuY3Rpb259IEFzeW5jRnVuY3Rpb25cbiAgICAgKiBAc3RhdGljXG4gICAgICovXG5cblxuICAgIHZhciBpbmRleCA9IHtcbiAgICAgICAgYXBwbHksXG4gICAgICAgIGFwcGx5RWFjaCxcbiAgICAgICAgYXBwbHlFYWNoU2VyaWVzLFxuICAgICAgICBhc3luY2lmeSxcbiAgICAgICAgYXV0byxcbiAgICAgICAgYXV0b0luamVjdCxcbiAgICAgICAgY2FyZ286IGNhcmdvJDEsXG4gICAgICAgIGNhcmdvUXVldWU6IGNhcmdvLFxuICAgICAgICBjb21wb3NlLFxuICAgICAgICBjb25jYXQ6IGNvbmNhdCQxLFxuICAgICAgICBjb25jYXRMaW1pdDogY29uY2F0TGltaXQkMSxcbiAgICAgICAgY29uY2F0U2VyaWVzOiBjb25jYXRTZXJpZXMkMSxcbiAgICAgICAgY29uc3RhbnQ6IGNvbnN0YW50JDEsXG4gICAgICAgIGRldGVjdDogZGV0ZWN0JDEsXG4gICAgICAgIGRldGVjdExpbWl0OiBkZXRlY3RMaW1pdCQxLFxuICAgICAgICBkZXRlY3RTZXJpZXM6IGRldGVjdFNlcmllcyQxLFxuICAgICAgICBkaXIsXG4gICAgICAgIGRvVW50aWwsXG4gICAgICAgIGRvV2hpbHN0OiBkb1doaWxzdCQxLFxuICAgICAgICBlYWNoLFxuICAgICAgICBlYWNoTGltaXQ6IGVhY2hMaW1pdCQxLFxuICAgICAgICBlYWNoT2Y6IGVhY2hPZiQxLFxuICAgICAgICBlYWNoT2ZMaW1pdDogZWFjaE9mTGltaXQkMSxcbiAgICAgICAgZWFjaE9mU2VyaWVzOiBlYWNoT2ZTZXJpZXMkMSxcbiAgICAgICAgZWFjaFNlcmllczogZWFjaFNlcmllcyQxLFxuICAgICAgICBlbnN1cmVBc3luYyxcbiAgICAgICAgZXZlcnk6IGV2ZXJ5JDEsXG4gICAgICAgIGV2ZXJ5TGltaXQ6IGV2ZXJ5TGltaXQkMSxcbiAgICAgICAgZXZlcnlTZXJpZXM6IGV2ZXJ5U2VyaWVzJDEsXG4gICAgICAgIGZpbHRlcjogZmlsdGVyJDEsXG4gICAgICAgIGZpbHRlckxpbWl0OiBmaWx0ZXJMaW1pdCQxLFxuICAgICAgICBmaWx0ZXJTZXJpZXM6IGZpbHRlclNlcmllcyQxLFxuICAgICAgICBmb3JldmVyOiBmb3JldmVyJDEsXG4gICAgICAgIGdyb3VwQnksXG4gICAgICAgIGdyb3VwQnlMaW1pdDogZ3JvdXBCeUxpbWl0JDEsXG4gICAgICAgIGdyb3VwQnlTZXJpZXMsXG4gICAgICAgIGxvZyxcbiAgICAgICAgbWFwOiBtYXAkMSxcbiAgICAgICAgbWFwTGltaXQ6IG1hcExpbWl0JDEsXG4gICAgICAgIG1hcFNlcmllczogbWFwU2VyaWVzJDEsXG4gICAgICAgIG1hcFZhbHVlcyxcbiAgICAgICAgbWFwVmFsdWVzTGltaXQ6IG1hcFZhbHVlc0xpbWl0JDEsXG4gICAgICAgIG1hcFZhbHVlc1NlcmllcyxcbiAgICAgICAgbWVtb2l6ZSxcbiAgICAgICAgbmV4dFRpY2ssXG4gICAgICAgIHBhcmFsbGVsLFxuICAgICAgICBwYXJhbGxlbExpbWl0LFxuICAgICAgICBwcmlvcml0eVF1ZXVlLFxuICAgICAgICBxdWV1ZSxcbiAgICAgICAgcmFjZTogcmFjZSQxLFxuICAgICAgICByZWR1Y2U6IHJlZHVjZSQxLFxuICAgICAgICByZWR1Y2VSaWdodCxcbiAgICAgICAgcmVmbGVjdCxcbiAgICAgICAgcmVmbGVjdEFsbCxcbiAgICAgICAgcmVqZWN0OiByZWplY3QkMSxcbiAgICAgICAgcmVqZWN0TGltaXQ6IHJlamVjdExpbWl0JDEsXG4gICAgICAgIHJlamVjdFNlcmllczogcmVqZWN0U2VyaWVzJDEsXG4gICAgICAgIHJldHJ5LFxuICAgICAgICByZXRyeWFibGUsXG4gICAgICAgIHNlcSxcbiAgICAgICAgc2VyaWVzLFxuICAgICAgICBzZXRJbW1lZGlhdGU6IHNldEltbWVkaWF0ZSQxLFxuICAgICAgICBzb21lOiBzb21lJDEsXG4gICAgICAgIHNvbWVMaW1pdDogc29tZUxpbWl0JDEsXG4gICAgICAgIHNvbWVTZXJpZXM6IHNvbWVTZXJpZXMkMSxcbiAgICAgICAgc29ydEJ5OiBzb3J0QnkkMSxcbiAgICAgICAgdGltZW91dCxcbiAgICAgICAgdGltZXMsXG4gICAgICAgIHRpbWVzTGltaXQsXG4gICAgICAgIHRpbWVzU2VyaWVzLFxuICAgICAgICB0cmFuc2Zvcm0sXG4gICAgICAgIHRyeUVhY2g6IHRyeUVhY2gkMSxcbiAgICAgICAgdW5tZW1vaXplLFxuICAgICAgICB1bnRpbCxcbiAgICAgICAgd2F0ZXJmYWxsOiB3YXRlcmZhbGwkMSxcbiAgICAgICAgd2hpbHN0OiB3aGlsc3QkMSxcblxuICAgICAgICAvLyBhbGlhc2VzXG4gICAgICAgIGFsbDogZXZlcnkkMSxcbiAgICAgICAgYWxsTGltaXQ6IGV2ZXJ5TGltaXQkMSxcbiAgICAgICAgYWxsU2VyaWVzOiBldmVyeVNlcmllcyQxLFxuICAgICAgICBhbnk6IHNvbWUkMSxcbiAgICAgICAgYW55TGltaXQ6IHNvbWVMaW1pdCQxLFxuICAgICAgICBhbnlTZXJpZXM6IHNvbWVTZXJpZXMkMSxcbiAgICAgICAgZmluZDogZGV0ZWN0JDEsXG4gICAgICAgIGZpbmRMaW1pdDogZGV0ZWN0TGltaXQkMSxcbiAgICAgICAgZmluZFNlcmllczogZGV0ZWN0U2VyaWVzJDEsXG4gICAgICAgIGZsYXRNYXA6IGNvbmNhdCQxLFxuICAgICAgICBmbGF0TWFwTGltaXQ6IGNvbmNhdExpbWl0JDEsXG4gICAgICAgIGZsYXRNYXBTZXJpZXM6IGNvbmNhdFNlcmllcyQxLFxuICAgICAgICBmb3JFYWNoOiBlYWNoLFxuICAgICAgICBmb3JFYWNoU2VyaWVzOiBlYWNoU2VyaWVzJDEsXG4gICAgICAgIGZvckVhY2hMaW1pdDogZWFjaExpbWl0JDEsXG4gICAgICAgIGZvckVhY2hPZjogZWFjaE9mJDEsXG4gICAgICAgIGZvckVhY2hPZlNlcmllczogZWFjaE9mU2VyaWVzJDEsXG4gICAgICAgIGZvckVhY2hPZkxpbWl0OiBlYWNoT2ZMaW1pdCQxLFxuICAgICAgICBpbmplY3Q6IHJlZHVjZSQxLFxuICAgICAgICBmb2xkbDogcmVkdWNlJDEsXG4gICAgICAgIGZvbGRyOiByZWR1Y2VSaWdodCxcbiAgICAgICAgc2VsZWN0OiBmaWx0ZXIkMSxcbiAgICAgICAgc2VsZWN0TGltaXQ6IGZpbHRlckxpbWl0JDEsXG4gICAgICAgIHNlbGVjdFNlcmllczogZmlsdGVyU2VyaWVzJDEsXG4gICAgICAgIHdyYXBTeW5jOiBhc3luY2lmeSxcbiAgICAgICAgZHVyaW5nOiB3aGlsc3QkMSxcbiAgICAgICAgZG9EdXJpbmc6IGRvV2hpbHN0JDFcbiAgICB9O1xuXG4gICAgZXhwb3J0cy5hbGwgPSBldmVyeSQxO1xuICAgIGV4cG9ydHMuYWxsTGltaXQgPSBldmVyeUxpbWl0JDE7XG4gICAgZXhwb3J0cy5hbGxTZXJpZXMgPSBldmVyeVNlcmllcyQxO1xuICAgIGV4cG9ydHMuYW55ID0gc29tZSQxO1xuICAgIGV4cG9ydHMuYW55TGltaXQgPSBzb21lTGltaXQkMTtcbiAgICBleHBvcnRzLmFueVNlcmllcyA9IHNvbWVTZXJpZXMkMTtcbiAgICBleHBvcnRzLmFwcGx5ID0gYXBwbHk7XG4gICAgZXhwb3J0cy5hcHBseUVhY2ggPSBhcHBseUVhY2g7XG4gICAgZXhwb3J0cy5hcHBseUVhY2hTZXJpZXMgPSBhcHBseUVhY2hTZXJpZXM7XG4gICAgZXhwb3J0cy5hc3luY2lmeSA9IGFzeW5jaWZ5O1xuICAgIGV4cG9ydHMuYXV0byA9IGF1dG87XG4gICAgZXhwb3J0cy5hdXRvSW5qZWN0ID0gYXV0b0luamVjdDtcbiAgICBleHBvcnRzLmNhcmdvID0gY2FyZ28kMTtcbiAgICBleHBvcnRzLmNhcmdvUXVldWUgPSBjYXJnbztcbiAgICBleHBvcnRzLmNvbXBvc2UgPSBjb21wb3NlO1xuICAgIGV4cG9ydHMuY29uY2F0ID0gY29uY2F0JDE7XG4gICAgZXhwb3J0cy5jb25jYXRMaW1pdCA9IGNvbmNhdExpbWl0JDE7XG4gICAgZXhwb3J0cy5jb25jYXRTZXJpZXMgPSBjb25jYXRTZXJpZXMkMTtcbiAgICBleHBvcnRzLmNvbnN0YW50ID0gY29uc3RhbnQkMTtcbiAgICBleHBvcnRzLmRlZmF1bHQgPSBpbmRleDtcbiAgICBleHBvcnRzLmRldGVjdCA9IGRldGVjdCQxO1xuICAgIGV4cG9ydHMuZGV0ZWN0TGltaXQgPSBkZXRlY3RMaW1pdCQxO1xuICAgIGV4cG9ydHMuZGV0ZWN0U2VyaWVzID0gZGV0ZWN0U2VyaWVzJDE7XG4gICAgZXhwb3J0cy5kaXIgPSBkaXI7XG4gICAgZXhwb3J0cy5kb0R1cmluZyA9IGRvV2hpbHN0JDE7XG4gICAgZXhwb3J0cy5kb1VudGlsID0gZG9VbnRpbDtcbiAgICBleHBvcnRzLmRvV2hpbHN0ID0gZG9XaGlsc3QkMTtcbiAgICBleHBvcnRzLmR1cmluZyA9IHdoaWxzdCQxO1xuICAgIGV4cG9ydHMuZWFjaCA9IGVhY2g7XG4gICAgZXhwb3J0cy5lYWNoTGltaXQgPSBlYWNoTGltaXQkMTtcbiAgICBleHBvcnRzLmVhY2hPZiA9IGVhY2hPZiQxO1xuICAgIGV4cG9ydHMuZWFjaE9mTGltaXQgPSBlYWNoT2ZMaW1pdCQxO1xuICAgIGV4cG9ydHMuZWFjaE9mU2VyaWVzID0gZWFjaE9mU2VyaWVzJDE7XG4gICAgZXhwb3J0cy5lYWNoU2VyaWVzID0gZWFjaFNlcmllcyQxO1xuICAgIGV4cG9ydHMuZW5zdXJlQXN5bmMgPSBlbnN1cmVBc3luYztcbiAgICBleHBvcnRzLmV2ZXJ5ID0gZXZlcnkkMTtcbiAgICBleHBvcnRzLmV2ZXJ5TGltaXQgPSBldmVyeUxpbWl0JDE7XG4gICAgZXhwb3J0cy5ldmVyeVNlcmllcyA9IGV2ZXJ5U2VyaWVzJDE7XG4gICAgZXhwb3J0cy5maWx0ZXIgPSBmaWx0ZXIkMTtcbiAgICBleHBvcnRzLmZpbHRlckxpbWl0ID0gZmlsdGVyTGltaXQkMTtcbiAgICBleHBvcnRzLmZpbHRlclNlcmllcyA9IGZpbHRlclNlcmllcyQxO1xuICAgIGV4cG9ydHMuZmluZCA9IGRldGVjdCQxO1xuICAgIGV4cG9ydHMuZmluZExpbWl0ID0gZGV0ZWN0TGltaXQkMTtcbiAgICBleHBvcnRzLmZpbmRTZXJpZXMgPSBkZXRlY3RTZXJpZXMkMTtcbiAgICBleHBvcnRzLmZsYXRNYXAgPSBjb25jYXQkMTtcbiAgICBleHBvcnRzLmZsYXRNYXBMaW1pdCA9IGNvbmNhdExpbWl0JDE7XG4gICAgZXhwb3J0cy5mbGF0TWFwU2VyaWVzID0gY29uY2F0U2VyaWVzJDE7XG4gICAgZXhwb3J0cy5mb2xkbCA9IHJlZHVjZSQxO1xuICAgIGV4cG9ydHMuZm9sZHIgPSByZWR1Y2VSaWdodDtcbiAgICBleHBvcnRzLmZvckVhY2ggPSBlYWNoO1xuICAgIGV4cG9ydHMuZm9yRWFjaExpbWl0ID0gZWFjaExpbWl0JDE7XG4gICAgZXhwb3J0cy5mb3JFYWNoT2YgPSBlYWNoT2YkMTtcbiAgICBleHBvcnRzLmZvckVhY2hPZkxpbWl0ID0gZWFjaE9mTGltaXQkMTtcbiAgICBleHBvcnRzLmZvckVhY2hPZlNlcmllcyA9IGVhY2hPZlNlcmllcyQxO1xuICAgIGV4cG9ydHMuZm9yRWFjaFNlcmllcyA9IGVhY2hTZXJpZXMkMTtcbiAgICBleHBvcnRzLmZvcmV2ZXIgPSBmb3JldmVyJDE7XG4gICAgZXhwb3J0cy5ncm91cEJ5ID0gZ3JvdXBCeTtcbiAgICBleHBvcnRzLmdyb3VwQnlMaW1pdCA9IGdyb3VwQnlMaW1pdCQxO1xuICAgIGV4cG9ydHMuZ3JvdXBCeVNlcmllcyA9IGdyb3VwQnlTZXJpZXM7XG4gICAgZXhwb3J0cy5pbmplY3QgPSByZWR1Y2UkMTtcbiAgICBleHBvcnRzLmxvZyA9IGxvZztcbiAgICBleHBvcnRzLm1hcCA9IG1hcCQxO1xuICAgIGV4cG9ydHMubWFwTGltaXQgPSBtYXBMaW1pdCQxO1xuICAgIGV4cG9ydHMubWFwU2VyaWVzID0gbWFwU2VyaWVzJDE7XG4gICAgZXhwb3J0cy5tYXBWYWx1ZXMgPSBtYXBWYWx1ZXM7XG4gICAgZXhwb3J0cy5tYXBWYWx1ZXNMaW1pdCA9IG1hcFZhbHVlc0xpbWl0JDE7XG4gICAgZXhwb3J0cy5tYXBWYWx1ZXNTZXJpZXMgPSBtYXBWYWx1ZXNTZXJpZXM7XG4gICAgZXhwb3J0cy5tZW1vaXplID0gbWVtb2l6ZTtcbiAgICBleHBvcnRzLm5leHRUaWNrID0gbmV4dFRpY2s7XG4gICAgZXhwb3J0cy5wYXJhbGxlbCA9IHBhcmFsbGVsO1xuICAgIGV4cG9ydHMucGFyYWxsZWxMaW1pdCA9IHBhcmFsbGVsTGltaXQ7XG4gICAgZXhwb3J0cy5wcmlvcml0eVF1ZXVlID0gcHJpb3JpdHlRdWV1ZTtcbiAgICBleHBvcnRzLnF1ZXVlID0gcXVldWU7XG4gICAgZXhwb3J0cy5yYWNlID0gcmFjZSQxO1xuICAgIGV4cG9ydHMucmVkdWNlID0gcmVkdWNlJDE7XG4gICAgZXhwb3J0cy5yZWR1Y2VSaWdodCA9IHJlZHVjZVJpZ2h0O1xuICAgIGV4cG9ydHMucmVmbGVjdCA9IHJlZmxlY3Q7XG4gICAgZXhwb3J0cy5yZWZsZWN0QWxsID0gcmVmbGVjdEFsbDtcbiAgICBleHBvcnRzLnJlamVjdCA9IHJlamVjdCQxO1xuICAgIGV4cG9ydHMucmVqZWN0TGltaXQgPSByZWplY3RMaW1pdCQxO1xuICAgIGV4cG9ydHMucmVqZWN0U2VyaWVzID0gcmVqZWN0U2VyaWVzJDE7XG4gICAgZXhwb3J0cy5yZXRyeSA9IHJldHJ5O1xuICAgIGV4cG9ydHMucmV0cnlhYmxlID0gcmV0cnlhYmxlO1xuICAgIGV4cG9ydHMuc2VsZWN0ID0gZmlsdGVyJDE7XG4gICAgZXhwb3J0cy5zZWxlY3RMaW1pdCA9IGZpbHRlckxpbWl0JDE7XG4gICAgZXhwb3J0cy5zZWxlY3RTZXJpZXMgPSBmaWx0ZXJTZXJpZXMkMTtcbiAgICBleHBvcnRzLnNlcSA9IHNlcTtcbiAgICBleHBvcnRzLnNlcmllcyA9IHNlcmllcztcbiAgICBleHBvcnRzLnNldEltbWVkaWF0ZSA9IHNldEltbWVkaWF0ZSQxO1xuICAgIGV4cG9ydHMuc29tZSA9IHNvbWUkMTtcbiAgICBleHBvcnRzLnNvbWVMaW1pdCA9IHNvbWVMaW1pdCQxO1xuICAgIGV4cG9ydHMuc29tZVNlcmllcyA9IHNvbWVTZXJpZXMkMTtcbiAgICBleHBvcnRzLnNvcnRCeSA9IHNvcnRCeSQxO1xuICAgIGV4cG9ydHMudGltZW91dCA9IHRpbWVvdXQ7XG4gICAgZXhwb3J0cy50aW1lcyA9IHRpbWVzO1xuICAgIGV4cG9ydHMudGltZXNMaW1pdCA9IHRpbWVzTGltaXQ7XG4gICAgZXhwb3J0cy50aW1lc1NlcmllcyA9IHRpbWVzU2VyaWVzO1xuICAgIGV4cG9ydHMudHJhbnNmb3JtID0gdHJhbnNmb3JtO1xuICAgIGV4cG9ydHMudHJ5RWFjaCA9IHRyeUVhY2gkMTtcbiAgICBleHBvcnRzLnVubWVtb2l6ZSA9IHVubWVtb2l6ZTtcbiAgICBleHBvcnRzLnVudGlsID0gdW50aWw7XG4gICAgZXhwb3J0cy53YXRlcmZhbGwgPSB3YXRlcmZhbGwkMTtcbiAgICBleHBvcnRzLndoaWxzdCA9IHdoaWxzdCQxO1xuICAgIGV4cG9ydHMud3JhcFN5bmMgPSBhc3luY2lmeTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbn0pKTtcbiIsCiAgICAidmFyIGNvbnN0YW50cyA9IHJlcXVpcmUoJ2NvbnN0YW50cycpXG5cbnZhciBvcmlnQ3dkID0gcHJvY2Vzcy5jd2RcbnZhciBjd2QgPSBudWxsXG5cbnZhciBwbGF0Zm9ybSA9IHByb2Nlc3MuZW52LkdSQUNFRlVMX0ZTX1BMQVRGT1JNIHx8IHByb2Nlc3MucGxhdGZvcm1cblxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbigpIHtcbiAgaWYgKCFjd2QpXG4gICAgY3dkID0gb3JpZ0N3ZC5jYWxsKHByb2Nlc3MpXG4gIHJldHVybiBjd2Rcbn1cbnRyeSB7XG4gIHByb2Nlc3MuY3dkKClcbn0gY2F0Y2ggKGVyKSB7fVxuXG4vLyBUaGlzIGNoZWNrIGlzIG5lZWRlZCB1bnRpbCBub2RlLmpzIDEyIGlzIHJlcXVpcmVkXG5pZiAodHlwZW9mIHByb2Nlc3MuY2hkaXIgPT09ICdmdW5jdGlvbicpIHtcbiAgdmFyIGNoZGlyID0gcHJvY2Vzcy5jaGRpclxuICBwcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGQpIHtcbiAgICBjd2QgPSBudWxsXG4gICAgY2hkaXIuY2FsbChwcm9jZXNzLCBkKVxuICB9XG4gIGlmIChPYmplY3Quc2V0UHJvdG90eXBlT2YpIE9iamVjdC5zZXRQcm90b3R5cGVPZihwcm9jZXNzLmNoZGlyLCBjaGRpcilcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwYXRjaFxuXG5mdW5jdGlvbiBwYXRjaCAoZnMpIHtcbiAgLy8gKHJlLSlpbXBsZW1lbnQgc29tZSB0aGluZ3MgdGhhdCBhcmUga25vd24gYnVzdGVkIG9yIG1pc3NpbmcuXG5cbiAgLy8gbGNobW9kLCBicm9rZW4gcHJpb3IgdG8gMC42LjJcbiAgLy8gYmFjay1wb3J0IHRoZSBmaXggaGVyZS5cbiAgaWYgKGNvbnN0YW50cy5oYXNPd25Qcm9wZXJ0eSgnT19TWU1MSU5LJykgJiZcbiAgICAgIHByb2Nlc3MudmVyc2lvbi5tYXRjaCgvXnYwXFwuNlxcLlswLTJdfF52MFxcLjVcXC4vKSkge1xuICAgIHBhdGNoTGNobW9kKGZzKVxuICB9XG5cbiAgLy8gbHV0aW1lcyBpbXBsZW1lbnRhdGlvbiwgb3Igbm8tb3BcbiAgaWYgKCFmcy5sdXRpbWVzKSB7XG4gICAgcGF0Y2hMdXRpbWVzKGZzKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2lzYWFjcy9ub2RlLWdyYWNlZnVsLWZzL2lzc3Vlcy80XG4gIC8vIENob3duIHNob3VsZCBub3QgZmFpbCBvbiBlaW52YWwgb3IgZXBlcm0gaWYgbm9uLXJvb3QuXG4gIC8vIEl0IHNob3VsZCBub3QgZmFpbCBvbiBlbm9zeXMgZXZlciwgYXMgdGhpcyBqdXN0IGluZGljYXRlc1xuICAvLyB0aGF0IGEgZnMgZG9lc24ndCBzdXBwb3J0IHRoZSBpbnRlbmRlZCBvcGVyYXRpb24uXG5cbiAgZnMuY2hvd24gPSBjaG93bkZpeChmcy5jaG93bilcbiAgZnMuZmNob3duID0gY2hvd25GaXgoZnMuZmNob3duKVxuICBmcy5sY2hvd24gPSBjaG93bkZpeChmcy5sY2hvd24pXG5cbiAgZnMuY2htb2QgPSBjaG1vZEZpeChmcy5jaG1vZClcbiAgZnMuZmNobW9kID0gY2htb2RGaXgoZnMuZmNobW9kKVxuICBmcy5sY2htb2QgPSBjaG1vZEZpeChmcy5sY2htb2QpXG5cbiAgZnMuY2hvd25TeW5jID0gY2hvd25GaXhTeW5jKGZzLmNob3duU3luYylcbiAgZnMuZmNob3duU3luYyA9IGNob3duRml4U3luYyhmcy5mY2hvd25TeW5jKVxuICBmcy5sY2hvd25TeW5jID0gY2hvd25GaXhTeW5jKGZzLmxjaG93blN5bmMpXG5cbiAgZnMuY2htb2RTeW5jID0gY2htb2RGaXhTeW5jKGZzLmNobW9kU3luYylcbiAgZnMuZmNobW9kU3luYyA9IGNobW9kRml4U3luYyhmcy5mY2htb2RTeW5jKVxuICBmcy5sY2htb2RTeW5jID0gY2htb2RGaXhTeW5jKGZzLmxjaG1vZFN5bmMpXG5cbiAgZnMuc3RhdCA9IHN0YXRGaXgoZnMuc3RhdClcbiAgZnMuZnN0YXQgPSBzdGF0Rml4KGZzLmZzdGF0KVxuICBmcy5sc3RhdCA9IHN0YXRGaXgoZnMubHN0YXQpXG5cbiAgZnMuc3RhdFN5bmMgPSBzdGF0Rml4U3luYyhmcy5zdGF0U3luYylcbiAgZnMuZnN0YXRTeW5jID0gc3RhdEZpeFN5bmMoZnMuZnN0YXRTeW5jKVxuICBmcy5sc3RhdFN5bmMgPSBzdGF0Rml4U3luYyhmcy5sc3RhdFN5bmMpXG5cbiAgLy8gaWYgbGNobW9kL2xjaG93biBkbyBub3QgZXhpc3QsIHRoZW4gbWFrZSB0aGVtIG5vLW9wc1xuICBpZiAoZnMuY2htb2QgJiYgIWZzLmxjaG1vZCkge1xuICAgIGZzLmxjaG1vZCA9IGZ1bmN0aW9uIChwYXRoLCBtb2RlLCBjYikge1xuICAgICAgaWYgKGNiKSBwcm9jZXNzLm5leHRUaWNrKGNiKVxuICAgIH1cbiAgICBmcy5sY2htb2RTeW5jID0gZnVuY3Rpb24gKCkge31cbiAgfVxuICBpZiAoZnMuY2hvd24gJiYgIWZzLmxjaG93bikge1xuICAgIGZzLmxjaG93biA9IGZ1bmN0aW9uIChwYXRoLCB1aWQsIGdpZCwgY2IpIHtcbiAgICAgIGlmIChjYikgcHJvY2Vzcy5uZXh0VGljayhjYilcbiAgICB9XG4gICAgZnMubGNob3duU3luYyA9IGZ1bmN0aW9uICgpIHt9XG4gIH1cblxuICAvLyBvbiBXaW5kb3dzLCBBL1Ygc29mdHdhcmUgY2FuIGxvY2sgdGhlIGRpcmVjdG9yeSwgY2F1c2luZyB0aGlzXG4gIC8vIHRvIGZhaWwgd2l0aCBhbiBFQUNDRVMgb3IgRVBFUk0gaWYgdGhlIGRpcmVjdG9yeSBjb250YWlucyBuZXdseVxuICAvLyBjcmVhdGVkIGZpbGVzLiAgVHJ5IGFnYWluIG9uIGZhaWx1cmUsIGZvciB1cCB0byA2MCBzZWNvbmRzLlxuXG4gIC8vIFNldCB0aGUgdGltZW91dCB0aGlzIGxvbmcgYmVjYXVzZSBzb21lIFdpbmRvd3MgQW50aS1WaXJ1cywgc3VjaCBhcyBQYXJpdHlcbiAgLy8gYml0OSwgbWF5IGxvY2sgZmlsZXMgZm9yIHVwIHRvIGEgbWludXRlLCBjYXVzaW5nIG5wbSBwYWNrYWdlIGluc3RhbGxcbiAgLy8gZmFpbHVyZXMuIEFsc28sIHRha2UgY2FyZSB0byB5aWVsZCB0aGUgc2NoZWR1bGVyLiBXaW5kb3dzIHNjaGVkdWxpbmcgZ2l2ZXNcbiAgLy8gQ1BVIHRvIGEgYnVzeSBsb29waW5nIHByb2Nlc3MsIHdoaWNoIGNhbiBjYXVzZSB0aGUgcHJvZ3JhbSBjYXVzaW5nIHRoZSBsb2NrXG4gIC8vIGNvbnRlbnRpb24gdG8gYmUgc3RhcnZlZCBvZiBDUFUgYnkgbm9kZSwgc28gdGhlIGNvbnRlbnRpb24gZG9lc24ndCByZXNvbHZlLlxuICBpZiAocGxhdGZvcm0gPT09IFwid2luMzJcIikge1xuICAgIGZzLnJlbmFtZSA9IHR5cGVvZiBmcy5yZW5hbWUgIT09ICdmdW5jdGlvbicgPyBmcy5yZW5hbWVcbiAgICA6IChmdW5jdGlvbiAoZnMkcmVuYW1lKSB7XG4gICAgICBmdW5jdGlvbiByZW5hbWUgKGZyb20sIHRvLCBjYikge1xuICAgICAgICB2YXIgc3RhcnQgPSBEYXRlLm5vdygpXG4gICAgICAgIHZhciBiYWNrb2ZmID0gMDtcbiAgICAgICAgZnMkcmVuYW1lKGZyb20sIHRvLCBmdW5jdGlvbiBDQiAoZXIpIHtcbiAgICAgICAgICBpZiAoZXJcbiAgICAgICAgICAgICAgJiYgKGVyLmNvZGUgPT09IFwiRUFDQ0VTXCIgfHwgZXIuY29kZSA9PT0gXCJFUEVSTVwiIHx8IGVyLmNvZGUgPT09IFwiRUJVU1lcIilcbiAgICAgICAgICAgICAgJiYgRGF0ZS5ub3coKSAtIHN0YXJ0IDwgNjAwMDApIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIGZzLnN0YXQodG8sIGZ1bmN0aW9uIChzdGF0ZXIsIHN0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlciAmJiBzdGF0ZXIuY29kZSA9PT0gXCJFTk9FTlRcIilcbiAgICAgICAgICAgICAgICAgIGZzJHJlbmFtZShmcm9tLCB0bywgQ0IpO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgIGNiKGVyKVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSwgYmFja29mZilcbiAgICAgICAgICAgIGlmIChiYWNrb2ZmIDwgMTAwKVxuICAgICAgICAgICAgICBiYWNrb2ZmICs9IDEwO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY2IpIGNiKGVyKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgaWYgKE9iamVjdC5zZXRQcm90b3R5cGVPZikgT2JqZWN0LnNldFByb3RvdHlwZU9mKHJlbmFtZSwgZnMkcmVuYW1lKVxuICAgICAgcmV0dXJuIHJlbmFtZVxuICAgIH0pKGZzLnJlbmFtZSlcbiAgfVxuXG4gIC8vIGlmIHJlYWQoKSByZXR1cm5zIEVBR0FJTiwgdGhlbiBqdXN0IHRyeSBpdCBhZ2Fpbi5cbiAgZnMucmVhZCA9IHR5cGVvZiBmcy5yZWFkICE9PSAnZnVuY3Rpb24nID8gZnMucmVhZFxuICA6IChmdW5jdGlvbiAoZnMkcmVhZCkge1xuICAgIGZ1bmN0aW9uIHJlYWQgKGZkLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbiwgY2FsbGJhY2tfKSB7XG4gICAgICB2YXIgY2FsbGJhY2tcbiAgICAgIGlmIChjYWxsYmFja18gJiYgdHlwZW9mIGNhbGxiYWNrXyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgZWFnQ291bnRlciA9IDBcbiAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoZXIsIF8sIF9fKSB7XG4gICAgICAgICAgaWYgKGVyICYmIGVyLmNvZGUgPT09ICdFQUdBSU4nICYmIGVhZ0NvdW50ZXIgPCAxMCkge1xuICAgICAgICAgICAgZWFnQ291bnRlciArK1xuICAgICAgICAgICAgcmV0dXJuIGZzJHJlYWQuY2FsbChmcywgZmQsIGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgsIHBvc2l0aW9uLCBjYWxsYmFjaylcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FsbGJhY2tfLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZzJHJlYWQuY2FsbChmcywgZmQsIGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgsIHBvc2l0aW9uLCBjYWxsYmFjaylcbiAgICB9XG5cbiAgICAvLyBUaGlzIGVuc3VyZXMgYHV0aWwucHJvbWlzaWZ5YCB3b3JrcyBhcyBpdCBkb2VzIGZvciBuYXRpdmUgYGZzLnJlYWRgLlxuICAgIGlmIChPYmplY3Quc2V0UHJvdG90eXBlT2YpIE9iamVjdC5zZXRQcm90b3R5cGVPZihyZWFkLCBmcyRyZWFkKVxuICAgIHJldHVybiByZWFkXG4gIH0pKGZzLnJlYWQpXG5cbiAgZnMucmVhZFN5bmMgPSB0eXBlb2YgZnMucmVhZFN5bmMgIT09ICdmdW5jdGlvbicgPyBmcy5yZWFkU3luY1xuICA6IChmdW5jdGlvbiAoZnMkcmVhZFN5bmMpIHsgcmV0dXJuIGZ1bmN0aW9uIChmZCwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24pIHtcbiAgICB2YXIgZWFnQ291bnRlciA9IDBcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGZzJHJlYWRTeW5jLmNhbGwoZnMsIGZkLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbilcbiAgICAgIH0gY2F0Y2ggKGVyKSB7XG4gICAgICAgIGlmIChlci5jb2RlID09PSAnRUFHQUlOJyAmJiBlYWdDb3VudGVyIDwgMTApIHtcbiAgICAgICAgICBlYWdDb3VudGVyICsrXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlclxuICAgICAgfVxuICAgIH1cbiAgfX0pKGZzLnJlYWRTeW5jKVxuXG4gIGZ1bmN0aW9uIHBhdGNoTGNobW9kIChmcykge1xuICAgIGZzLmxjaG1vZCA9IGZ1bmN0aW9uIChwYXRoLCBtb2RlLCBjYWxsYmFjaykge1xuICAgICAgZnMub3BlbiggcGF0aFxuICAgICAgICAgICAgICwgY29uc3RhbnRzLk9fV1JPTkxZIHwgY29uc3RhbnRzLk9fU1lNTElOS1xuICAgICAgICAgICAgICwgbW9kZVxuICAgICAgICAgICAgICwgZnVuY3Rpb24gKGVyciwgZmQpIHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIGlmIChjYWxsYmFjaykgY2FsbGJhY2soZXJyKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIC8vIHByZWZlciB0byByZXR1cm4gdGhlIGNobW9kIGVycm9yLCBpZiBvbmUgb2NjdXJzLFxuICAgICAgICAvLyBidXQgc3RpbGwgdHJ5IHRvIGNsb3NlLCBhbmQgcmVwb3J0IGNsb3NpbmcgZXJyb3JzIGlmIHRoZXkgb2NjdXIuXG4gICAgICAgIGZzLmZjaG1vZChmZCwgbW9kZSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgIGZzLmNsb3NlKGZkLCBmdW5jdGlvbihlcnIyKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2spIGNhbGxiYWNrKGVyciB8fCBlcnIyKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH1cblxuICAgIGZzLmxjaG1vZFN5bmMgPSBmdW5jdGlvbiAocGF0aCwgbW9kZSkge1xuICAgICAgdmFyIGZkID0gZnMub3BlblN5bmMocGF0aCwgY29uc3RhbnRzLk9fV1JPTkxZIHwgY29uc3RhbnRzLk9fU1lNTElOSywgbW9kZSlcblxuICAgICAgLy8gcHJlZmVyIHRvIHJldHVybiB0aGUgY2htb2QgZXJyb3IsIGlmIG9uZSBvY2N1cnMsXG4gICAgICAvLyBidXQgc3RpbGwgdHJ5IHRvIGNsb3NlLCBhbmQgcmVwb3J0IGNsb3NpbmcgZXJyb3JzIGlmIHRoZXkgb2NjdXIuXG4gICAgICB2YXIgdGhyZXcgPSB0cnVlXG4gICAgICB2YXIgcmV0XG4gICAgICB0cnkge1xuICAgICAgICByZXQgPSBmcy5mY2htb2RTeW5jKGZkLCBtb2RlKVxuICAgICAgICB0aHJldyA9IGZhbHNlXG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAodGhyZXcpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZnMuY2xvc2VTeW5jKGZkKVxuICAgICAgICAgIH0gY2F0Y2ggKGVyKSB7fVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZzLmNsb3NlU3luYyhmZClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJldFxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHBhdGNoTHV0aW1lcyAoZnMpIHtcbiAgICBpZiAoY29uc3RhbnRzLmhhc093blByb3BlcnR5KFwiT19TWU1MSU5LXCIpICYmIGZzLmZ1dGltZXMpIHtcbiAgICAgIGZzLmx1dGltZXMgPSBmdW5jdGlvbiAocGF0aCwgYXQsIG10LCBjYikge1xuICAgICAgICBmcy5vcGVuKHBhdGgsIGNvbnN0YW50cy5PX1NZTUxJTkssIGZ1bmN0aW9uIChlciwgZmQpIHtcbiAgICAgICAgICBpZiAoZXIpIHtcbiAgICAgICAgICAgIGlmIChjYikgY2IoZXIpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgICAgZnMuZnV0aW1lcyhmZCwgYXQsIG10LCBmdW5jdGlvbiAoZXIpIHtcbiAgICAgICAgICAgIGZzLmNsb3NlKGZkLCBmdW5jdGlvbiAoZXIyKSB7XG4gICAgICAgICAgICAgIGlmIChjYikgY2IoZXIgfHwgZXIyKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBmcy5sdXRpbWVzU3luYyA9IGZ1bmN0aW9uIChwYXRoLCBhdCwgbXQpIHtcbiAgICAgICAgdmFyIGZkID0gZnMub3BlblN5bmMocGF0aCwgY29uc3RhbnRzLk9fU1lNTElOSylcbiAgICAgICAgdmFyIHJldFxuICAgICAgICB2YXIgdGhyZXcgPSB0cnVlXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0ID0gZnMuZnV0aW1lc1N5bmMoZmQsIGF0LCBtdClcbiAgICAgICAgICB0aHJldyA9IGZhbHNlXG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgaWYgKHRocmV3KSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBmcy5jbG9zZVN5bmMoZmQpXG4gICAgICAgICAgICB9IGNhdGNoIChlcikge31cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZnMuY2xvc2VTeW5jKGZkKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0XG4gICAgICB9XG5cbiAgICB9IGVsc2UgaWYgKGZzLmZ1dGltZXMpIHtcbiAgICAgIGZzLmx1dGltZXMgPSBmdW5jdGlvbiAoX2EsIF9iLCBfYywgY2IpIHsgaWYgKGNiKSBwcm9jZXNzLm5leHRUaWNrKGNiKSB9XG4gICAgICBmcy5sdXRpbWVzU3luYyA9IGZ1bmN0aW9uICgpIHt9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2htb2RGaXggKG9yaWcpIHtcbiAgICBpZiAoIW9yaWcpIHJldHVybiBvcmlnXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIG1vZGUsIGNiKSB7XG4gICAgICByZXR1cm4gb3JpZy5jYWxsKGZzLCB0YXJnZXQsIG1vZGUsIGZ1bmN0aW9uIChlcikge1xuICAgICAgICBpZiAoY2hvd25Fck9rKGVyKSkgZXIgPSBudWxsXG4gICAgICAgIGlmIChjYikgY2IuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjaG1vZEZpeFN5bmMgKG9yaWcpIHtcbiAgICBpZiAoIW9yaWcpIHJldHVybiBvcmlnXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIG1vZGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBvcmlnLmNhbGwoZnMsIHRhcmdldCwgbW9kZSlcbiAgICAgIH0gY2F0Y2ggKGVyKSB7XG4gICAgICAgIGlmICghY2hvd25Fck9rKGVyKSkgdGhyb3cgZXJcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuXG4gIGZ1bmN0aW9uIGNob3duRml4IChvcmlnKSB7XG4gICAgaWYgKCFvcmlnKSByZXR1cm4gb3JpZ1xuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCB1aWQsIGdpZCwgY2IpIHtcbiAgICAgIHJldHVybiBvcmlnLmNhbGwoZnMsIHRhcmdldCwgdWlkLCBnaWQsIGZ1bmN0aW9uIChlcikge1xuICAgICAgICBpZiAoY2hvd25Fck9rKGVyKSkgZXIgPSBudWxsXG4gICAgICAgIGlmIChjYikgY2IuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjaG93bkZpeFN5bmMgKG9yaWcpIHtcbiAgICBpZiAoIW9yaWcpIHJldHVybiBvcmlnXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIHVpZCwgZ2lkKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gb3JpZy5jYWxsKGZzLCB0YXJnZXQsIHVpZCwgZ2lkKVxuICAgICAgfSBjYXRjaCAoZXIpIHtcbiAgICAgICAgaWYgKCFjaG93bkVyT2soZXIpKSB0aHJvdyBlclxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHN0YXRGaXggKG9yaWcpIHtcbiAgICBpZiAoIW9yaWcpIHJldHVybiBvcmlnXG4gICAgLy8gT2xkZXIgdmVyc2lvbnMgb2YgTm9kZSBlcnJvbmVvdXNseSByZXR1cm5lZCBzaWduZWQgaW50ZWdlcnMgZm9yXG4gICAgLy8gdWlkICsgZ2lkLlxuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBvcHRpb25zLCBjYikge1xuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNiID0gb3B0aW9uc1xuICAgICAgICBvcHRpb25zID0gbnVsbFxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gY2FsbGJhY2sgKGVyLCBzdGF0cykge1xuICAgICAgICBpZiAoc3RhdHMpIHtcbiAgICAgICAgICBpZiAoc3RhdHMudWlkIDwgMCkgc3RhdHMudWlkICs9IDB4MTAwMDAwMDAwXG4gICAgICAgICAgaWYgKHN0YXRzLmdpZCA8IDApIHN0YXRzLmdpZCArPSAweDEwMDAwMDAwMFxuICAgICAgICB9XG4gICAgICAgIGlmIChjYikgY2IuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgfVxuICAgICAgcmV0dXJuIG9wdGlvbnMgPyBvcmlnLmNhbGwoZnMsIHRhcmdldCwgb3B0aW9ucywgY2FsbGJhY2spXG4gICAgICAgIDogb3JpZy5jYWxsKGZzLCB0YXJnZXQsIGNhbGxiYWNrKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHN0YXRGaXhTeW5jIChvcmlnKSB7XG4gICAgaWYgKCFvcmlnKSByZXR1cm4gb3JpZ1xuICAgIC8vIE9sZGVyIHZlcnNpb25zIG9mIE5vZGUgZXJyb25lb3VzbHkgcmV0dXJuZWQgc2lnbmVkIGludGVnZXJzIGZvclxuICAgIC8vIHVpZCArIGdpZC5cbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwgb3B0aW9ucykge1xuICAgICAgdmFyIHN0YXRzID0gb3B0aW9ucyA/IG9yaWcuY2FsbChmcywgdGFyZ2V0LCBvcHRpb25zKVxuICAgICAgICA6IG9yaWcuY2FsbChmcywgdGFyZ2V0KVxuICAgICAgaWYgKHN0YXRzKSB7XG4gICAgICAgIGlmIChzdGF0cy51aWQgPCAwKSBzdGF0cy51aWQgKz0gMHgxMDAwMDAwMDBcbiAgICAgICAgaWYgKHN0YXRzLmdpZCA8IDApIHN0YXRzLmdpZCArPSAweDEwMDAwMDAwMFxuICAgICAgfVxuICAgICAgcmV0dXJuIHN0YXRzO1xuICAgIH1cbiAgfVxuXG4gIC8vIEVOT1NZUyBtZWFucyB0aGF0IHRoZSBmcyBkb2Vzbid0IHN1cHBvcnQgdGhlIG9wLiBKdXN0IGlnbm9yZVxuICAvLyB0aGF0LCBiZWNhdXNlIGl0IGRvZXNuJ3QgbWF0dGVyLlxuICAvL1xuICAvLyBpZiB0aGVyZSdzIG5vIGdldHVpZCwgb3IgaWYgZ2V0dWlkKCkgaXMgc29tZXRoaW5nIG90aGVyXG4gIC8vIHRoYW4gMCwgYW5kIHRoZSBlcnJvciBpcyBFSU5WQUwgb3IgRVBFUk0sIHRoZW4ganVzdCBpZ25vcmVcbiAgLy8gaXQuXG4gIC8vXG4gIC8vIFRoaXMgc3BlY2lmaWMgY2FzZSBpcyBhIHNpbGVudCBmYWlsdXJlIGluIGNwLCBpbnN0YWxsLCB0YXIsXG4gIC8vIGFuZCBtb3N0IG90aGVyIHVuaXggdG9vbHMgdGhhdCBtYW5hZ2UgcGVybWlzc2lvbnMuXG4gIC8vXG4gIC8vIFdoZW4gcnVubmluZyBhcyByb290LCBvciBpZiBvdGhlciB0eXBlcyBvZiBlcnJvcnMgYXJlXG4gIC8vIGVuY291bnRlcmVkLCB0aGVuIGl0J3Mgc3RyaWN0LlxuICBmdW5jdGlvbiBjaG93bkVyT2sgKGVyKSB7XG4gICAgaWYgKCFlcilcbiAgICAgIHJldHVybiB0cnVlXG5cbiAgICBpZiAoZXIuY29kZSA9PT0gXCJFTk9TWVNcIilcbiAgICAgIHJldHVybiB0cnVlXG5cbiAgICB2YXIgbm9ucm9vdCA9ICFwcm9jZXNzLmdldHVpZCB8fCBwcm9jZXNzLmdldHVpZCgpICE9PSAwXG4gICAgaWYgKG5vbnJvb3QpIHtcbiAgICAgIGlmIChlci5jb2RlID09PSBcIkVJTlZBTFwiIHx8IGVyLmNvZGUgPT09IFwiRVBFUk1cIilcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuIiwKICAgICJ2YXIgU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJykuU3RyZWFtXG5cbm1vZHVsZS5leHBvcnRzID0gbGVnYWN5XG5cbmZ1bmN0aW9uIGxlZ2FjeSAoZnMpIHtcbiAgcmV0dXJuIHtcbiAgICBSZWFkU3RyZWFtOiBSZWFkU3RyZWFtLFxuICAgIFdyaXRlU3RyZWFtOiBXcml0ZVN0cmVhbVxuICB9XG5cbiAgZnVuY3Rpb24gUmVhZFN0cmVhbSAocGF0aCwgb3B0aW9ucykge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBSZWFkU3RyZWFtKSkgcmV0dXJuIG5ldyBSZWFkU3RyZWFtKHBhdGgsIG9wdGlvbnMpO1xuXG4gICAgU3RyZWFtLmNhbGwodGhpcyk7XG5cbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB0aGlzLnBhdGggPSBwYXRoO1xuICAgIHRoaXMuZmQgPSBudWxsO1xuICAgIHRoaXMucmVhZGFibGUgPSB0cnVlO1xuICAgIHRoaXMucGF1c2VkID0gZmFsc2U7XG5cbiAgICB0aGlzLmZsYWdzID0gJ3InO1xuICAgIHRoaXMubW9kZSA9IDQzODsgLyo9MDY2NiovXG4gICAgdGhpcy5idWZmZXJTaXplID0gNjQgKiAxMDI0O1xuXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICAvLyBNaXhpbiBvcHRpb25zIGludG8gdGhpc1xuICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob3B0aW9ucyk7XG4gICAgZm9yICh2YXIgaW5kZXggPSAwLCBsZW5ndGggPSBrZXlzLmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2luZGV4XTtcbiAgICAgIHRoaXNba2V5XSA9IG9wdGlvbnNba2V5XTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5lbmNvZGluZykgdGhpcy5zZXRFbmNvZGluZyh0aGlzLmVuY29kaW5nKTtcblxuICAgIGlmICh0aGlzLnN0YXJ0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICgnbnVtYmVyJyAhPT0gdHlwZW9mIHRoaXMuc3RhcnQpIHtcbiAgICAgICAgdGhyb3cgVHlwZUVycm9yKCdzdGFydCBtdXN0IGJlIGEgTnVtYmVyJyk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5lbmQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmVuZCA9IEluZmluaXR5O1xuICAgICAgfSBlbHNlIGlmICgnbnVtYmVyJyAhPT0gdHlwZW9mIHRoaXMuZW5kKSB7XG4gICAgICAgIHRocm93IFR5cGVFcnJvcignZW5kIG11c3QgYmUgYSBOdW1iZXInKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuc3RhcnQgPiB0aGlzLmVuZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N0YXJ0IG11c3QgYmUgPD0gZW5kJyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucG9zID0gdGhpcy5zdGFydDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5mZCAhPT0gbnVsbCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbigpIHtcbiAgICAgICAgc2VsZi5fcmVhZCgpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZnMub3Blbih0aGlzLnBhdGgsIHRoaXMuZmxhZ3MsIHRoaXMubW9kZSwgZnVuY3Rpb24gKGVyciwgZmQpIHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgc2VsZi5lbWl0KCdlcnJvcicsIGVycik7XG4gICAgICAgIHNlbGYucmVhZGFibGUgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzZWxmLmZkID0gZmQ7XG4gICAgICBzZWxmLmVtaXQoJ29wZW4nLCBmZCk7XG4gICAgICBzZWxmLl9yZWFkKCk7XG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIFdyaXRlU3RyZWFtIChwYXRoLCBvcHRpb25zKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFdyaXRlU3RyZWFtKSkgcmV0dXJuIG5ldyBXcml0ZVN0cmVhbShwYXRoLCBvcHRpb25zKTtcblxuICAgIFN0cmVhbS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5wYXRoID0gcGF0aDtcbiAgICB0aGlzLmZkID0gbnVsbDtcbiAgICB0aGlzLndyaXRhYmxlID0gdHJ1ZTtcblxuICAgIHRoaXMuZmxhZ3MgPSAndyc7XG4gICAgdGhpcy5lbmNvZGluZyA9ICdiaW5hcnknO1xuICAgIHRoaXMubW9kZSA9IDQzODsgLyo9MDY2NiovXG4gICAgdGhpcy5ieXRlc1dyaXR0ZW4gPSAwO1xuXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICAvLyBNaXhpbiBvcHRpb25zIGludG8gdGhpc1xuICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob3B0aW9ucyk7XG4gICAgZm9yICh2YXIgaW5kZXggPSAwLCBsZW5ndGggPSBrZXlzLmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2luZGV4XTtcbiAgICAgIHRoaXNba2V5XSA9IG9wdGlvbnNba2V5XTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zdGFydCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoJ251bWJlcicgIT09IHR5cGVvZiB0aGlzLnN0YXJ0KSB7XG4gICAgICAgIHRocm93IFR5cGVFcnJvcignc3RhcnQgbXVzdCBiZSBhIE51bWJlcicpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc3RhcnQgPCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignc3RhcnQgbXVzdCBiZSA+PSB6ZXJvJyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucG9zID0gdGhpcy5zdGFydDtcbiAgICB9XG5cbiAgICB0aGlzLmJ1c3kgPSBmYWxzZTtcbiAgICB0aGlzLl9xdWV1ZSA9IFtdO1xuXG4gICAgaWYgKHRoaXMuZmQgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuX29wZW4gPSBmcy5vcGVuO1xuICAgICAgdGhpcy5fcXVldWUucHVzaChbdGhpcy5fb3BlbiwgdGhpcy5wYXRoLCB0aGlzLmZsYWdzLCB0aGlzLm1vZGUsIHVuZGVmaW5lZF0pO1xuICAgICAgdGhpcy5mbHVzaCgpO1xuICAgIH1cbiAgfVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZVxuXG52YXIgZ2V0UHJvdG90eXBlT2YgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gb2JqLl9fcHJvdG9fX1xufVxuXG5mdW5jdGlvbiBjbG9uZSAob2JqKSB7XG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpXG4gICAgcmV0dXJuIG9ialxuXG4gIGlmIChvYmogaW5zdGFuY2VvZiBPYmplY3QpXG4gICAgdmFyIGNvcHkgPSB7IF9fcHJvdG9fXzogZ2V0UHJvdG90eXBlT2Yob2JqKSB9XG4gIGVsc2VcbiAgICB2YXIgY29weSA9IE9iamVjdC5jcmVhdGUobnVsbClcblxuICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb3B5LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBrZXkpKVxuICB9KVxuXG4gIHJldHVybiBjb3B5XG59XG4iLAogICAgInZhciBmcyA9IHJlcXVpcmUoJ2ZzJylcbnZhciBwb2x5ZmlsbHMgPSByZXF1aXJlKCcuL3BvbHlmaWxscy5qcycpXG52YXIgbGVnYWN5ID0gcmVxdWlyZSgnLi9sZWdhY3ktc3RyZWFtcy5qcycpXG52YXIgY2xvbmUgPSByZXF1aXJlKCcuL2Nsb25lLmpzJylcblxudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJylcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgLSBub2RlIDAueCBwb2x5ZmlsbCAqL1xudmFyIGdyYWNlZnVsUXVldWVcbnZhciBwcmV2aW91c1N5bWJvbFxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAtIG5vZGUgMC54IHBvbHlmaWxsICovXG5pZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sLmZvciA9PT0gJ2Z1bmN0aW9uJykge1xuICBncmFjZWZ1bFF1ZXVlID0gU3ltYm9sLmZvcignZ3JhY2VmdWwtZnMucXVldWUnKVxuICAvLyBUaGlzIGlzIHVzZWQgaW4gdGVzdGluZyBieSBmdXR1cmUgdmVyc2lvbnNcbiAgcHJldmlvdXNTeW1ib2wgPSBTeW1ib2wuZm9yKCdncmFjZWZ1bC1mcy5wcmV2aW91cycpXG59IGVsc2Uge1xuICBncmFjZWZ1bFF1ZXVlID0gJ19fX2dyYWNlZnVsLWZzLnF1ZXVlJ1xuICBwcmV2aW91c1N5bWJvbCA9ICdfX19ncmFjZWZ1bC1mcy5wcmV2aW91cydcbn1cblxuZnVuY3Rpb24gbm9vcCAoKSB7fVxuXG5mdW5jdGlvbiBwdWJsaXNoUXVldWUoY29udGV4dCwgcXVldWUpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbnRleHQsIGdyYWNlZnVsUXVldWUsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHF1ZXVlXG4gICAgfVxuICB9KVxufVxuXG52YXIgZGVidWcgPSBub29wXG5pZiAodXRpbC5kZWJ1Z2xvZylcbiAgZGVidWcgPSB1dGlsLmRlYnVnbG9nKCdnZnM0JylcbmVsc2UgaWYgKC9cXGJnZnM0XFxiL2kudGVzdChwcm9jZXNzLmVudi5OT0RFX0RFQlVHIHx8ICcnKSlcbiAgZGVidWcgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgbSA9IHV0aWwuZm9ybWF0LmFwcGx5KHV0aWwsIGFyZ3VtZW50cylcbiAgICBtID0gJ0dGUzQ6ICcgKyBtLnNwbGl0KC9cXG4vKS5qb2luKCdcXG5HRlM0OiAnKVxuICAgIGNvbnNvbGUuZXJyb3IobSlcbiAgfVxuXG4vLyBPbmNlIHRpbWUgaW5pdGlhbGl6YXRpb25cbmlmICghZnNbZ3JhY2VmdWxRdWV1ZV0pIHtcbiAgLy8gVGhpcyBxdWV1ZSBjYW4gYmUgc2hhcmVkIGJ5IG11bHRpcGxlIGxvYWRlZCBpbnN0YW5jZXNcbiAgdmFyIHF1ZXVlID0gZ2xvYmFsW2dyYWNlZnVsUXVldWVdIHx8IFtdXG4gIHB1Ymxpc2hRdWV1ZShmcywgcXVldWUpXG5cbiAgLy8gUGF0Y2ggZnMuY2xvc2UvY2xvc2VTeW5jIHRvIHNoYXJlZCBxdWV1ZSB2ZXJzaW9uLCBiZWNhdXNlIHdlIG5lZWRcbiAgLy8gdG8gcmV0cnkoKSB3aGVuZXZlciBhIGNsb3NlIGhhcHBlbnMgKmFueXdoZXJlKiBpbiB0aGUgcHJvZ3JhbS5cbiAgLy8gVGhpcyBpcyBlc3NlbnRpYWwgd2hlbiBtdWx0aXBsZSBncmFjZWZ1bC1mcyBpbnN0YW5jZXMgYXJlXG4gIC8vIGluIHBsYXkgYXQgdGhlIHNhbWUgdGltZS5cbiAgZnMuY2xvc2UgPSAoZnVuY3Rpb24gKGZzJGNsb3NlKSB7XG4gICAgZnVuY3Rpb24gY2xvc2UgKGZkLCBjYikge1xuICAgICAgcmV0dXJuIGZzJGNsb3NlLmNhbGwoZnMsIGZkLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gdXNlcyB0aGUgZ3JhY2VmdWwtZnMgc2hhcmVkIHF1ZXVlXG4gICAgICAgIGlmICghZXJyKSB7XG4gICAgICAgICAgcmVzZXRRdWV1ZSgpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNsb3NlLCBwcmV2aW91c1N5bWJvbCwge1xuICAgICAgdmFsdWU6IGZzJGNsb3NlXG4gICAgfSlcbiAgICByZXR1cm4gY2xvc2VcbiAgfSkoZnMuY2xvc2UpXG5cbiAgZnMuY2xvc2VTeW5jID0gKGZ1bmN0aW9uIChmcyRjbG9zZVN5bmMpIHtcbiAgICBmdW5jdGlvbiBjbG9zZVN5bmMgKGZkKSB7XG4gICAgICAvLyBUaGlzIGZ1bmN0aW9uIHVzZXMgdGhlIGdyYWNlZnVsLWZzIHNoYXJlZCBxdWV1ZVxuICAgICAgZnMkY2xvc2VTeW5jLmFwcGx5KGZzLCBhcmd1bWVudHMpXG4gICAgICByZXNldFF1ZXVlKClcbiAgICB9XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY2xvc2VTeW5jLCBwcmV2aW91c1N5bWJvbCwge1xuICAgICAgdmFsdWU6IGZzJGNsb3NlU3luY1xuICAgIH0pXG4gICAgcmV0dXJuIGNsb3NlU3luY1xuICB9KShmcy5jbG9zZVN5bmMpXG5cbiAgaWYgKC9cXGJnZnM0XFxiL2kudGVzdChwcm9jZXNzLmVudi5OT0RFX0RFQlVHIHx8ICcnKSkge1xuICAgIHByb2Nlc3Mub24oJ2V4aXQnLCBmdW5jdGlvbigpIHtcbiAgICAgIGRlYnVnKGZzW2dyYWNlZnVsUXVldWVdKVxuICAgICAgcmVxdWlyZSgnYXNzZXJ0JykuZXF1YWwoZnNbZ3JhY2VmdWxRdWV1ZV0ubGVuZ3RoLCAwKVxuICAgIH0pXG4gIH1cbn1cblxuaWYgKCFnbG9iYWxbZ3JhY2VmdWxRdWV1ZV0pIHtcbiAgcHVibGlzaFF1ZXVlKGdsb2JhbCwgZnNbZ3JhY2VmdWxRdWV1ZV0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGNoKGNsb25lKGZzKSlcbmlmIChwcm9jZXNzLmVudi5URVNUX0dSQUNFRlVMX0ZTX0dMT0JBTF9QQVRDSCAmJiAhZnMuX19wYXRjaGVkKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBwYXRjaChmcylcbiAgICBmcy5fX3BhdGNoZWQgPSB0cnVlO1xufVxuXG5mdW5jdGlvbiBwYXRjaCAoZnMpIHtcbiAgLy8gRXZlcnl0aGluZyB0aGF0IHJlZmVyZW5jZXMgdGhlIG9wZW4oKSBmdW5jdGlvbiBuZWVkcyB0byBiZSBpbiBoZXJlXG4gIHBvbHlmaWxscyhmcylcbiAgZnMuZ3JhY2VmdWxpZnkgPSBwYXRjaFxuXG4gIGZzLmNyZWF0ZVJlYWRTdHJlYW0gPSBjcmVhdGVSZWFkU3RyZWFtXG4gIGZzLmNyZWF0ZVdyaXRlU3RyZWFtID0gY3JlYXRlV3JpdGVTdHJlYW1cbiAgdmFyIGZzJHJlYWRGaWxlID0gZnMucmVhZEZpbGVcbiAgZnMucmVhZEZpbGUgPSByZWFkRmlsZVxuICBmdW5jdGlvbiByZWFkRmlsZSAocGF0aCwgb3B0aW9ucywgY2IpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpXG4gICAgICBjYiA9IG9wdGlvbnMsIG9wdGlvbnMgPSBudWxsXG5cbiAgICByZXR1cm4gZ28kcmVhZEZpbGUocGF0aCwgb3B0aW9ucywgY2IpXG5cbiAgICBmdW5jdGlvbiBnbyRyZWFkRmlsZSAocGF0aCwgb3B0aW9ucywgY2IsIHN0YXJ0VGltZSkge1xuICAgICAgcmV0dXJuIGZzJHJlYWRGaWxlKHBhdGgsIG9wdGlvbnMsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgaWYgKGVyciAmJiAoZXJyLmNvZGUgPT09ICdFTUZJTEUnIHx8IGVyci5jb2RlID09PSAnRU5GSUxFJykpXG4gICAgICAgICAgZW5xdWV1ZShbZ28kcmVhZEZpbGUsIFtwYXRoLCBvcHRpb25zLCBjYl0sIGVyciwgc3RhcnRUaW1lIHx8IERhdGUubm93KCksIERhdGUubm93KCldKVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgY2IuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHZhciBmcyR3cml0ZUZpbGUgPSBmcy53cml0ZUZpbGVcbiAgZnMud3JpdGVGaWxlID0gd3JpdGVGaWxlXG4gIGZ1bmN0aW9uIHdyaXRlRmlsZSAocGF0aCwgZGF0YSwgb3B0aW9ucywgY2IpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpXG4gICAgICBjYiA9IG9wdGlvbnMsIG9wdGlvbnMgPSBudWxsXG5cbiAgICByZXR1cm4gZ28kd3JpdGVGaWxlKHBhdGgsIGRhdGEsIG9wdGlvbnMsIGNiKVxuXG4gICAgZnVuY3Rpb24gZ28kd3JpdGVGaWxlIChwYXRoLCBkYXRhLCBvcHRpb25zLCBjYiwgc3RhcnRUaW1lKSB7XG4gICAgICByZXR1cm4gZnMkd3JpdGVGaWxlKHBhdGgsIGRhdGEsIG9wdGlvbnMsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgaWYgKGVyciAmJiAoZXJyLmNvZGUgPT09ICdFTUZJTEUnIHx8IGVyci5jb2RlID09PSAnRU5GSUxFJykpXG4gICAgICAgICAgZW5xdWV1ZShbZ28kd3JpdGVGaWxlLCBbcGF0aCwgZGF0YSwgb3B0aW9ucywgY2JdLCBlcnIsIHN0YXJ0VGltZSB8fCBEYXRlLm5vdygpLCBEYXRlLm5vdygpXSlcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICB2YXIgZnMkYXBwZW5kRmlsZSA9IGZzLmFwcGVuZEZpbGVcbiAgaWYgKGZzJGFwcGVuZEZpbGUpXG4gICAgZnMuYXBwZW5kRmlsZSA9IGFwcGVuZEZpbGVcbiAgZnVuY3Rpb24gYXBwZW5kRmlsZSAocGF0aCwgZGF0YSwgb3B0aW9ucywgY2IpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpXG4gICAgICBjYiA9IG9wdGlvbnMsIG9wdGlvbnMgPSBudWxsXG5cbiAgICByZXR1cm4gZ28kYXBwZW5kRmlsZShwYXRoLCBkYXRhLCBvcHRpb25zLCBjYilcblxuICAgIGZ1bmN0aW9uIGdvJGFwcGVuZEZpbGUgKHBhdGgsIGRhdGEsIG9wdGlvbnMsIGNiLCBzdGFydFRpbWUpIHtcbiAgICAgIHJldHVybiBmcyRhcHBlbmRGaWxlKHBhdGgsIGRhdGEsIG9wdGlvbnMsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgaWYgKGVyciAmJiAoZXJyLmNvZGUgPT09ICdFTUZJTEUnIHx8IGVyci5jb2RlID09PSAnRU5GSUxFJykpXG4gICAgICAgICAgZW5xdWV1ZShbZ28kYXBwZW5kRmlsZSwgW3BhdGgsIGRhdGEsIG9wdGlvbnMsIGNiXSwgZXJyLCBzdGFydFRpbWUgfHwgRGF0ZS5ub3coKSwgRGF0ZS5ub3coKV0pXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICBjYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgdmFyIGZzJGNvcHlGaWxlID0gZnMuY29weUZpbGVcbiAgaWYgKGZzJGNvcHlGaWxlKVxuICAgIGZzLmNvcHlGaWxlID0gY29weUZpbGVcbiAgZnVuY3Rpb24gY29weUZpbGUgKHNyYywgZGVzdCwgZmxhZ3MsIGNiKSB7XG4gICAgaWYgKHR5cGVvZiBmbGFncyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY2IgPSBmbGFnc1xuICAgICAgZmxhZ3MgPSAwXG4gICAgfVxuICAgIHJldHVybiBnbyRjb3B5RmlsZShzcmMsIGRlc3QsIGZsYWdzLCBjYilcblxuICAgIGZ1bmN0aW9uIGdvJGNvcHlGaWxlIChzcmMsIGRlc3QsIGZsYWdzLCBjYiwgc3RhcnRUaW1lKSB7XG4gICAgICByZXR1cm4gZnMkY29weUZpbGUoc3JjLCBkZXN0LCBmbGFncywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAoZXJyICYmIChlcnIuY29kZSA9PT0gJ0VNRklMRScgfHwgZXJyLmNvZGUgPT09ICdFTkZJTEUnKSlcbiAgICAgICAgICBlbnF1ZXVlKFtnbyRjb3B5RmlsZSwgW3NyYywgZGVzdCwgZmxhZ3MsIGNiXSwgZXJyLCBzdGFydFRpbWUgfHwgRGF0ZS5ub3coKSwgRGF0ZS5ub3coKV0pXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICBjYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgdmFyIGZzJHJlYWRkaXIgPSBmcy5yZWFkZGlyXG4gIGZzLnJlYWRkaXIgPSByZWFkZGlyXG4gIHZhciBub1JlYWRkaXJPcHRpb25WZXJzaW9ucyA9IC9edlswLTVdXFwuL1xuICBmdW5jdGlvbiByZWFkZGlyIChwYXRoLCBvcHRpb25zLCBjYikge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgIGNiID0gb3B0aW9ucywgb3B0aW9ucyA9IG51bGxcblxuICAgIHZhciBnbyRyZWFkZGlyID0gbm9SZWFkZGlyT3B0aW9uVmVyc2lvbnMudGVzdChwcm9jZXNzLnZlcnNpb24pXG4gICAgICA/IGZ1bmN0aW9uIGdvJHJlYWRkaXIgKHBhdGgsIG9wdGlvbnMsIGNiLCBzdGFydFRpbWUpIHtcbiAgICAgICAgcmV0dXJuIGZzJHJlYWRkaXIocGF0aCwgZnMkcmVhZGRpckNhbGxiYWNrKFxuICAgICAgICAgIHBhdGgsIG9wdGlvbnMsIGNiLCBzdGFydFRpbWVcbiAgICAgICAgKSlcbiAgICAgIH1cbiAgICAgIDogZnVuY3Rpb24gZ28kcmVhZGRpciAocGF0aCwgb3B0aW9ucywgY2IsIHN0YXJ0VGltZSkge1xuICAgICAgICByZXR1cm4gZnMkcmVhZGRpcihwYXRoLCBvcHRpb25zLCBmcyRyZWFkZGlyQ2FsbGJhY2soXG4gICAgICAgICAgcGF0aCwgb3B0aW9ucywgY2IsIHN0YXJ0VGltZVxuICAgICAgICApKVxuICAgICAgfVxuXG4gICAgcmV0dXJuIGdvJHJlYWRkaXIocGF0aCwgb3B0aW9ucywgY2IpXG5cbiAgICBmdW5jdGlvbiBmcyRyZWFkZGlyQ2FsbGJhY2sgKHBhdGgsIG9wdGlvbnMsIGNiLCBzdGFydFRpbWUpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoZXJyLCBmaWxlcykge1xuICAgICAgICBpZiAoZXJyICYmIChlcnIuY29kZSA9PT0gJ0VNRklMRScgfHwgZXJyLmNvZGUgPT09ICdFTkZJTEUnKSlcbiAgICAgICAgICBlbnF1ZXVlKFtcbiAgICAgICAgICAgIGdvJHJlYWRkaXIsXG4gICAgICAgICAgICBbcGF0aCwgb3B0aW9ucywgY2JdLFxuICAgICAgICAgICAgZXJyLFxuICAgICAgICAgICAgc3RhcnRUaW1lIHx8IERhdGUubm93KCksXG4gICAgICAgICAgICBEYXRlLm5vdygpXG4gICAgICAgICAgXSlcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKGZpbGVzICYmIGZpbGVzLnNvcnQpXG4gICAgICAgICAgICBmaWxlcy5zb3J0KClcblxuICAgICAgICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICBjYi5jYWxsKHRoaXMsIGVyciwgZmlsZXMpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAocHJvY2Vzcy52ZXJzaW9uLnN1YnN0cigwLCA0KSA9PT0gJ3YwLjgnKSB7XG4gICAgdmFyIGxlZ1N0cmVhbXMgPSBsZWdhY3koZnMpXG4gICAgUmVhZFN0cmVhbSA9IGxlZ1N0cmVhbXMuUmVhZFN0cmVhbVxuICAgIFdyaXRlU3RyZWFtID0gbGVnU3RyZWFtcy5Xcml0ZVN0cmVhbVxuICB9XG5cbiAgdmFyIGZzJFJlYWRTdHJlYW0gPSBmcy5SZWFkU3RyZWFtXG4gIGlmIChmcyRSZWFkU3RyZWFtKSB7XG4gICAgUmVhZFN0cmVhbS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGZzJFJlYWRTdHJlYW0ucHJvdG90eXBlKVxuICAgIFJlYWRTdHJlYW0ucHJvdG90eXBlLm9wZW4gPSBSZWFkU3RyZWFtJG9wZW5cbiAgfVxuXG4gIHZhciBmcyRXcml0ZVN0cmVhbSA9IGZzLldyaXRlU3RyZWFtXG4gIGlmIChmcyRXcml0ZVN0cmVhbSkge1xuICAgIFdyaXRlU3RyZWFtLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZnMkV3JpdGVTdHJlYW0ucHJvdG90eXBlKVxuICAgIFdyaXRlU3RyZWFtLnByb3RvdHlwZS5vcGVuID0gV3JpdGVTdHJlYW0kb3BlblxuICB9XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZzLCAnUmVhZFN0cmVhbScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBSZWFkU3RyZWFtXG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIFJlYWRTdHJlYW0gPSB2YWxcbiAgICB9LFxuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmcywgJ1dyaXRlU3RyZWFtJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIFdyaXRlU3RyZWFtXG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIFdyaXRlU3RyZWFtID0gdmFsXG4gICAgfSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KVxuXG4gIC8vIGxlZ2FjeSBuYW1lc1xuICB2YXIgRmlsZVJlYWRTdHJlYW0gPSBSZWFkU3RyZWFtXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmcywgJ0ZpbGVSZWFkU3RyZWFtJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIEZpbGVSZWFkU3RyZWFtXG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIEZpbGVSZWFkU3RyZWFtID0gdmFsXG4gICAgfSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KVxuICB2YXIgRmlsZVdyaXRlU3RyZWFtID0gV3JpdGVTdHJlYW1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZzLCAnRmlsZVdyaXRlU3RyZWFtJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIEZpbGVXcml0ZVN0cmVhbVxuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICBGaWxlV3JpdGVTdHJlYW0gPSB2YWxcbiAgICB9LFxuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pXG5cbiAgZnVuY3Rpb24gUmVhZFN0cmVhbSAocGF0aCwgb3B0aW9ucykge1xuICAgIGlmICh0aGlzIGluc3RhbmNlb2YgUmVhZFN0cmVhbSlcbiAgICAgIHJldHVybiBmcyRSZWFkU3RyZWFtLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHRoaXNcbiAgICBlbHNlXG4gICAgICByZXR1cm4gUmVhZFN0cmVhbS5hcHBseShPYmplY3QuY3JlYXRlKFJlYWRTdHJlYW0ucHJvdG90eXBlKSwgYXJndW1lbnRzKVxuICB9XG5cbiAgZnVuY3Rpb24gUmVhZFN0cmVhbSRvcGVuICgpIHtcbiAgICB2YXIgdGhhdCA9IHRoaXNcbiAgICBvcGVuKHRoYXQucGF0aCwgdGhhdC5mbGFncywgdGhhdC5tb2RlLCBmdW5jdGlvbiAoZXJyLCBmZCkge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICBpZiAodGhhdC5hdXRvQ2xvc2UpXG4gICAgICAgICAgdGhhdC5kZXN0cm95KClcblxuICAgICAgICB0aGF0LmVtaXQoJ2Vycm9yJywgZXJyKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhhdC5mZCA9IGZkXG4gICAgICAgIHRoYXQuZW1pdCgnb3BlbicsIGZkKVxuICAgICAgICB0aGF0LnJlYWQoKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBmdW5jdGlvbiBXcml0ZVN0cmVhbSAocGF0aCwgb3B0aW9ucykge1xuICAgIGlmICh0aGlzIGluc3RhbmNlb2YgV3JpdGVTdHJlYW0pXG4gICAgICByZXR1cm4gZnMkV3JpdGVTdHJlYW0uYXBwbHkodGhpcywgYXJndW1lbnRzKSwgdGhpc1xuICAgIGVsc2VcbiAgICAgIHJldHVybiBXcml0ZVN0cmVhbS5hcHBseShPYmplY3QuY3JlYXRlKFdyaXRlU3RyZWFtLnByb3RvdHlwZSksIGFyZ3VtZW50cylcbiAgfVxuXG4gIGZ1bmN0aW9uIFdyaXRlU3RyZWFtJG9wZW4gKCkge1xuICAgIHZhciB0aGF0ID0gdGhpc1xuICAgIG9wZW4odGhhdC5wYXRoLCB0aGF0LmZsYWdzLCB0aGF0Lm1vZGUsIGZ1bmN0aW9uIChlcnIsIGZkKSB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHRoYXQuZGVzdHJveSgpXG4gICAgICAgIHRoYXQuZW1pdCgnZXJyb3InLCBlcnIpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGF0LmZkID0gZmRcbiAgICAgICAgdGhhdC5lbWl0KCdvcGVuJywgZmQpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVJlYWRTdHJlYW0gKHBhdGgsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IGZzLlJlYWRTdHJlYW0ocGF0aCwgb3B0aW9ucylcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVdyaXRlU3RyZWFtIChwYXRoLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBmcy5Xcml0ZVN0cmVhbShwYXRoLCBvcHRpb25zKVxuICB9XG5cbiAgdmFyIGZzJG9wZW4gPSBmcy5vcGVuXG4gIGZzLm9wZW4gPSBvcGVuXG4gIGZ1bmN0aW9uIG9wZW4gKHBhdGgsIGZsYWdzLCBtb2RlLCBjYikge1xuICAgIGlmICh0eXBlb2YgbW9kZSA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgIGNiID0gbW9kZSwgbW9kZSA9IG51bGxcblxuICAgIHJldHVybiBnbyRvcGVuKHBhdGgsIGZsYWdzLCBtb2RlLCBjYilcblxuICAgIGZ1bmN0aW9uIGdvJG9wZW4gKHBhdGgsIGZsYWdzLCBtb2RlLCBjYiwgc3RhcnRUaW1lKSB7XG4gICAgICByZXR1cm4gZnMkb3BlbihwYXRoLCBmbGFncywgbW9kZSwgZnVuY3Rpb24gKGVyciwgZmQpIHtcbiAgICAgICAgaWYgKGVyciAmJiAoZXJyLmNvZGUgPT09ICdFTUZJTEUnIHx8IGVyci5jb2RlID09PSAnRU5GSUxFJykpXG4gICAgICAgICAgZW5xdWV1ZShbZ28kb3BlbiwgW3BhdGgsIGZsYWdzLCBtb2RlLCBjYl0sIGVyciwgc3RhcnRUaW1lIHx8IERhdGUubm93KCksIERhdGUubm93KCldKVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgY2IuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmc1xufVxuXG5mdW5jdGlvbiBlbnF1ZXVlIChlbGVtKSB7XG4gIGRlYnVnKCdFTlFVRVVFJywgZWxlbVswXS5uYW1lLCBlbGVtWzFdKVxuICBmc1tncmFjZWZ1bFF1ZXVlXS5wdXNoKGVsZW0pXG4gIHJldHJ5KClcbn1cblxuLy8ga2VlcCB0cmFjayBvZiB0aGUgdGltZW91dCBiZXR3ZWVuIHJldHJ5KCkgY2FsbHNcbnZhciByZXRyeVRpbWVyXG5cbi8vIHJlc2V0IHRoZSBzdGFydFRpbWUgYW5kIGxhc3RUaW1lIHRvIG5vd1xuLy8gdGhpcyByZXNldHMgdGhlIHN0YXJ0IG9mIHRoZSA2MCBzZWNvbmQgb3ZlcmFsbCB0aW1lb3V0IGFzIHdlbGwgYXMgdGhlXG4vLyBkZWxheSBiZXR3ZWVuIGF0dGVtcHRzIHNvIHRoYXQgd2UnbGwgcmV0cnkgdGhlc2Ugam9icyBzb29uZXJcbmZ1bmN0aW9uIHJlc2V0UXVldWUgKCkge1xuICB2YXIgbm93ID0gRGF0ZS5ub3coKVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGZzW2dyYWNlZnVsUXVldWVdLmxlbmd0aDsgKytpKSB7XG4gICAgLy8gZW50cmllcyB0aGF0IGFyZSBvbmx5IGEgbGVuZ3RoIG9mIDIgYXJlIGZyb20gYW4gb2xkZXIgdmVyc2lvbiwgZG9uJ3RcbiAgICAvLyBib3RoZXIgbW9kaWZ5aW5nIHRob3NlIHNpbmNlIHRoZXknbGwgYmUgcmV0cmllZCBhbnl3YXkuXG4gICAgaWYgKGZzW2dyYWNlZnVsUXVldWVdW2ldLmxlbmd0aCA+IDIpIHtcbiAgICAgIGZzW2dyYWNlZnVsUXVldWVdW2ldWzNdID0gbm93IC8vIHN0YXJ0VGltZVxuICAgICAgZnNbZ3JhY2VmdWxRdWV1ZV1baV1bNF0gPSBub3cgLy8gbGFzdFRpbWVcbiAgICB9XG4gIH1cbiAgLy8gY2FsbCByZXRyeSB0byBtYWtlIHN1cmUgd2UncmUgYWN0aXZlbHkgcHJvY2Vzc2luZyB0aGUgcXVldWVcbiAgcmV0cnkoKVxufVxuXG5mdW5jdGlvbiByZXRyeSAoKSB7XG4gIC8vIGNsZWFyIHRoZSB0aW1lciBhbmQgcmVtb3ZlIGl0IHRvIGhlbHAgcHJldmVudCB1bmludGVuZGVkIGNvbmN1cnJlbmN5XG4gIGNsZWFyVGltZW91dChyZXRyeVRpbWVyKVxuICByZXRyeVRpbWVyID0gdW5kZWZpbmVkXG5cbiAgaWYgKGZzW2dyYWNlZnVsUXVldWVdLmxlbmd0aCA9PT0gMClcbiAgICByZXR1cm5cblxuICB2YXIgZWxlbSA9IGZzW2dyYWNlZnVsUXVldWVdLnNoaWZ0KClcbiAgdmFyIGZuID0gZWxlbVswXVxuICB2YXIgYXJncyA9IGVsZW1bMV1cbiAgLy8gdGhlc2UgaXRlbXMgbWF5IGJlIHVuc2V0IGlmIHRoZXkgd2VyZSBhZGRlZCBieSBhbiBvbGRlciBncmFjZWZ1bC1mc1xuICB2YXIgZXJyID0gZWxlbVsyXVxuICB2YXIgc3RhcnRUaW1lID0gZWxlbVszXVxuICB2YXIgbGFzdFRpbWUgPSBlbGVtWzRdXG5cbiAgLy8gaWYgd2UgZG9uJ3QgaGF2ZSBhIHN0YXJ0VGltZSB3ZSBoYXZlIG5vIHdheSBvZiBrbm93aW5nIGlmIHdlJ3ZlIHdhaXRlZFxuICAvLyBsb25nIGVub3VnaCwgc28gZ28gYWhlYWQgYW5kIHJldHJ5IHRoaXMgaXRlbSBub3dcbiAgaWYgKHN0YXJ0VGltZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZGVidWcoJ1JFVFJZJywgZm4ubmFtZSwgYXJncylcbiAgICBmbi5hcHBseShudWxsLCBhcmdzKVxuICB9IGVsc2UgaWYgKERhdGUubm93KCkgLSBzdGFydFRpbWUgPj0gNjAwMDApIHtcbiAgICAvLyBpdCdzIGJlZW4gbW9yZSB0aGFuIDYwIHNlY29uZHMgdG90YWwsIGJhaWwgbm93XG4gICAgZGVidWcoJ1RJTUVPVVQnLCBmbi5uYW1lLCBhcmdzKVxuICAgIHZhciBjYiA9IGFyZ3MucG9wKClcbiAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKVxuICAgICAgY2IuY2FsbChudWxsLCBlcnIpXG4gIH0gZWxzZSB7XG4gICAgLy8gdGhlIGFtb3VudCBvZiB0aW1lIGJldHdlZW4gdGhlIGxhc3QgYXR0ZW1wdCBhbmQgcmlnaHQgbm93XG4gICAgdmFyIHNpbmNlQXR0ZW1wdCA9IERhdGUubm93KCkgLSBsYXN0VGltZVxuICAgIC8vIHRoZSBhbW91bnQgb2YgdGltZSBiZXR3ZWVuIHdoZW4gd2UgZmlyc3QgdHJpZWQsIGFuZCB3aGVuIHdlIGxhc3QgdHJpZWRcbiAgICAvLyByb3VuZGVkIHVwIHRvIGF0IGxlYXN0IDFcbiAgICB2YXIgc2luY2VTdGFydCA9IE1hdGgubWF4KGxhc3RUaW1lIC0gc3RhcnRUaW1lLCAxKVxuICAgIC8vIGJhY2tvZmYuIHdhaXQgbG9uZ2VyIHRoYW4gdGhlIHRvdGFsIHRpbWUgd2UndmUgYmVlbiByZXRyeWluZywgYnV0IG9ubHlcbiAgICAvLyB1cCB0byBhIG1heGltdW0gb2YgMTAwbXNcbiAgICB2YXIgZGVzaXJlZERlbGF5ID0gTWF0aC5taW4oc2luY2VTdGFydCAqIDEuMiwgMTAwKVxuICAgIC8vIGl0J3MgYmVlbiBsb25nIGVub3VnaCBzaW5jZSB0aGUgbGFzdCByZXRyeSwgZG8gaXQgYWdhaW5cbiAgICBpZiAoc2luY2VBdHRlbXB0ID49IGRlc2lyZWREZWxheSkge1xuICAgICAgZGVidWcoJ1JFVFJZJywgZm4ubmFtZSwgYXJncylcbiAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MuY29uY2F0KFtzdGFydFRpbWVdKSlcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaWYgd2UgY2FuJ3QgZG8gdGhpcyBqb2IgeWV0LCBwdXNoIGl0IHRvIHRoZSBlbmQgb2YgdGhlIHF1ZXVlXG4gICAgICAvLyBhbmQgbGV0IHRoZSBuZXh0IGl0ZXJhdGlvbiBjaGVjayBhZ2FpblxuICAgICAgZnNbZ3JhY2VmdWxRdWV1ZV0ucHVzaChlbGVtKVxuICAgIH1cbiAgfVxuXG4gIC8vIHNjaGVkdWxlIG91ciBuZXh0IHJ1biBpZiBvbmUgaXNuJ3QgYWxyZWFkeSBzY2hlZHVsZWRcbiAgaWYgKHJldHJ5VGltZXIgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHJ5VGltZXIgPSBzZXRUaW1lb3V0KHJldHJ5LCAwKVxuICB9XG59XG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxuY29uc3QgaXNTdHJlYW0gPSBzdHJlYW0gPT5cblx0c3RyZWFtICE9PSBudWxsICYmXG5cdHR5cGVvZiBzdHJlYW0gPT09ICdvYmplY3QnICYmXG5cdHR5cGVvZiBzdHJlYW0ucGlwZSA9PT0gJ2Z1bmN0aW9uJztcblxuaXNTdHJlYW0ud3JpdGFibGUgPSBzdHJlYW0gPT5cblx0aXNTdHJlYW0oc3RyZWFtKSAmJlxuXHRzdHJlYW0ud3JpdGFibGUgIT09IGZhbHNlICYmXG5cdHR5cGVvZiBzdHJlYW0uX3dyaXRlID09PSAnZnVuY3Rpb24nICYmXG5cdHR5cGVvZiBzdHJlYW0uX3dyaXRhYmxlU3RhdGUgPT09ICdvYmplY3QnO1xuXG5pc1N0cmVhbS5yZWFkYWJsZSA9IHN0cmVhbSA9PlxuXHRpc1N0cmVhbShzdHJlYW0pICYmXG5cdHN0cmVhbS5yZWFkYWJsZSAhPT0gZmFsc2UgJiZcblx0dHlwZW9mIHN0cmVhbS5fcmVhZCA9PT0gJ2Z1bmN0aW9uJyAmJlxuXHR0eXBlb2Ygc3RyZWFtLl9yZWFkYWJsZVN0YXRlID09PSAnb2JqZWN0JztcblxuaXNTdHJlYW0uZHVwbGV4ID0gc3RyZWFtID0+XG5cdGlzU3RyZWFtLndyaXRhYmxlKHN0cmVhbSkgJiZcblx0aXNTdHJlYW0ucmVhZGFibGUoc3RyZWFtKTtcblxuaXNTdHJlYW0udHJhbnNmb3JtID0gc3RyZWFtID0+XG5cdGlzU3RyZWFtLmR1cGxleChzdHJlYW0pICYmXG5cdHR5cGVvZiBzdHJlYW0uX3RyYW5zZm9ybSA9PT0gJ2Z1bmN0aW9uJztcblxubW9kdWxlLmV4cG9ydHMgPSBpc1N0cmVhbTtcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5pZiAodHlwZW9mIHByb2Nlc3MgPT09ICd1bmRlZmluZWQnIHx8XG4gICAgIXByb2Nlc3MudmVyc2lvbiB8fFxuICAgIHByb2Nlc3MudmVyc2lvbi5pbmRleE9mKCd2MC4nKSA9PT0gMCB8fFxuICAgIHByb2Nlc3MudmVyc2lvbi5pbmRleE9mKCd2MS4nKSA9PT0gMCAmJiBwcm9jZXNzLnZlcnNpb24uaW5kZXhPZigndjEuOC4nKSAhPT0gMCkge1xuICBtb2R1bGUuZXhwb3J0cyA9IHsgbmV4dFRpY2s6IG5leHRUaWNrIH07XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHByb2Nlc3Ncbn1cblxuZnVuY3Rpb24gbmV4dFRpY2soZm4sIGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgaWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wiY2FsbGJhY2tcIiBhcmd1bWVudCBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgfVxuICB2YXIgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGFyZ3MsIGk7XG4gIHN3aXRjaCAobGVuKSB7XG4gIGNhc2UgMDpcbiAgY2FzZSAxOlxuICAgIHJldHVybiBwcm9jZXNzLm5leHRUaWNrKGZuKTtcbiAgY2FzZSAyOlxuICAgIHJldHVybiBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uIGFmdGVyVGlja09uZSgpIHtcbiAgICAgIGZuLmNhbGwobnVsbCwgYXJnMSk7XG4gICAgfSk7XG4gIGNhc2UgMzpcbiAgICByZXR1cm4gcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiBhZnRlclRpY2tUd28oKSB7XG4gICAgICBmbi5jYWxsKG51bGwsIGFyZzEsIGFyZzIpO1xuICAgIH0pO1xuICBjYXNlIDQ6XG4gICAgcmV0dXJuIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gYWZ0ZXJUaWNrVGhyZWUoKSB7XG4gICAgICBmbi5jYWxsKG51bGwsIGFyZzEsIGFyZzIsIGFyZzMpO1xuICAgIH0pO1xuICBkZWZhdWx0OlxuICAgIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0gMSk7XG4gICAgaSA9IDA7XG4gICAgd2hpbGUgKGkgPCBhcmdzLmxlbmd0aCkge1xuICAgICAgYXJnc1tpKytdID0gYXJndW1lbnRzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiBhZnRlclRpY2soKSB7XG4gICAgICBmbi5hcHBseShudWxsLCBhcmdzKTtcbiAgICB9KTtcbiAgfVxufVxuXG4iLAogICAgInZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKGFycikge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbChhcnIpID09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIiwKICAgICIvKiBlc2xpbnQtZGlzYWJsZSBub2RlL25vLWRlcHJlY2F0ZWQtYXBpICovXG52YXIgYnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJylcbnZhciBCdWZmZXIgPSBidWZmZXIuQnVmZmVyXG5cbi8vIGFsdGVybmF0aXZlIHRvIHVzaW5nIE9iamVjdC5rZXlzIGZvciBvbGQgYnJvd3NlcnNcbmZ1bmN0aW9uIGNvcHlQcm9wcyAoc3JjLCBkc3QpIHtcbiAgZm9yICh2YXIga2V5IGluIHNyYykge1xuICAgIGRzdFtrZXldID0gc3JjW2tleV1cbiAgfVxufVxuaWYgKEJ1ZmZlci5mcm9tICYmIEJ1ZmZlci5hbGxvYyAmJiBCdWZmZXIuYWxsb2NVbnNhZmUgJiYgQnVmZmVyLmFsbG9jVW5zYWZlU2xvdykge1xuICBtb2R1bGUuZXhwb3J0cyA9IGJ1ZmZlclxufSBlbHNlIHtcbiAgLy8gQ29weSBwcm9wZXJ0aWVzIGZyb20gcmVxdWlyZSgnYnVmZmVyJylcbiAgY29weVByb3BzKGJ1ZmZlciwgZXhwb3J0cylcbiAgZXhwb3J0cy5CdWZmZXIgPSBTYWZlQnVmZmVyXG59XG5cbmZ1bmN0aW9uIFNhZmVCdWZmZXIgKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBCdWZmZXIoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cbi8vIENvcHkgc3RhdGljIG1ldGhvZHMgZnJvbSBCdWZmZXJcbmNvcHlQcm9wcyhCdWZmZXIsIFNhZmVCdWZmZXIpXG5cblNhZmVCdWZmZXIuZnJvbSA9IGZ1bmN0aW9uIChhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICBpZiAodHlwZW9mIGFyZyA9PT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlcicpXG4gIH1cbiAgcmV0dXJuIEJ1ZmZlcihhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuU2FmZUJ1ZmZlci5hbGxvYyA9IGZ1bmN0aW9uIChzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpXG4gIH1cbiAgdmFyIGJ1ZiA9IEJ1ZmZlcihzaXplKVxuICBpZiAoZmlsbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGJ1Zi5maWxsKGZpbGwsIGVuY29kaW5nKVxuICAgIH0gZWxzZSB7XG4gICAgICBidWYuZmlsbChmaWxsKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBidWYuZmlsbCgwKVxuICB9XG4gIHJldHVybiBidWZcbn1cblxuU2FmZUJ1ZmZlci5hbGxvY1Vuc2FmZSA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJylcbiAgfVxuICByZXR1cm4gQnVmZmVyKHNpemUpXG59XG5cblNhZmVCdWZmZXIuYWxsb2NVbnNhZmVTbG93ID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKVxuICB9XG4gIHJldHVybiBidWZmZXIuU2xvd0J1ZmZlcihzaXplKVxufVxuIiwKICAgICIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuLy8gTk9URTogVGhlc2UgdHlwZSBjaGVja2luZyBmdW5jdGlvbnMgaW50ZW50aW9uYWxseSBkb24ndCB1c2UgYGluc3RhbmNlb2ZgXG4vLyBiZWNhdXNlIGl0IGlzIGZyYWdpbGUgYW5kIGNhbiBiZSBlYXNpbHkgZmFrZWQgd2l0aCBgT2JqZWN0LmNyZWF0ZSgpYC5cblxuZnVuY3Rpb24gaXNBcnJheShhcmcpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkpIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShhcmcpO1xuICB9XG4gIHJldHVybiBvYmplY3RUb1N0cmluZyhhcmcpID09PSAnW29iamVjdCBBcnJheV0nO1xufVxuZXhwb3J0cy5pc0FycmF5ID0gaXNBcnJheTtcblxuZnVuY3Rpb24gaXNCb29sZWFuKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ2Jvb2xlYW4nO1xufVxuZXhwb3J0cy5pc0Jvb2xlYW4gPSBpc0Jvb2xlYW47XG5cbmZ1bmN0aW9uIGlzTnVsbChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gbnVsbDtcbn1cbmV4cG9ydHMuaXNOdWxsID0gaXNOdWxsO1xuXG5mdW5jdGlvbiBpc051bGxPclVuZGVmaW5lZChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PSBudWxsO1xufVxuZXhwb3J0cy5pc051bGxPclVuZGVmaW5lZCA9IGlzTnVsbE9yVW5kZWZpbmVkO1xuXG5mdW5jdGlvbiBpc051bWJlcihhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdudW1iZXInO1xufVxuZXhwb3J0cy5pc051bWJlciA9IGlzTnVtYmVyO1xuXG5mdW5jdGlvbiBpc1N0cmluZyhhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnO1xufVxuZXhwb3J0cy5pc1N0cmluZyA9IGlzU3RyaW5nO1xuXG5mdW5jdGlvbiBpc1N5bWJvbChhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdzeW1ib2wnO1xufVxuZXhwb3J0cy5pc1N5bWJvbCA9IGlzU3ltYm9sO1xuXG5mdW5jdGlvbiBpc1VuZGVmaW5lZChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gdm9pZCAwO1xufVxuZXhwb3J0cy5pc1VuZGVmaW5lZCA9IGlzVW5kZWZpbmVkO1xuXG5mdW5jdGlvbiBpc1JlZ0V4cChyZSkge1xuICByZXR1cm4gb2JqZWN0VG9TdHJpbmcocmUpID09PSAnW29iamVjdCBSZWdFeHBdJztcbn1cbmV4cG9ydHMuaXNSZWdFeHAgPSBpc1JlZ0V4cDtcblxuZnVuY3Rpb24gaXNPYmplY3QoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnb2JqZWN0JyAmJiBhcmcgIT09IG51bGw7XG59XG5leHBvcnRzLmlzT2JqZWN0ID0gaXNPYmplY3Q7XG5cbmZ1bmN0aW9uIGlzRGF0ZShkKSB7XG4gIHJldHVybiBvYmplY3RUb1N0cmluZyhkKSA9PT0gJ1tvYmplY3QgRGF0ZV0nO1xufVxuZXhwb3J0cy5pc0RhdGUgPSBpc0RhdGU7XG5cbmZ1bmN0aW9uIGlzRXJyb3IoZSkge1xuICByZXR1cm4gKG9iamVjdFRvU3RyaW5nKGUpID09PSAnW29iamVjdCBFcnJvcl0nIHx8IGUgaW5zdGFuY2VvZiBFcnJvcik7XG59XG5leHBvcnRzLmlzRXJyb3IgPSBpc0Vycm9yO1xuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ2Z1bmN0aW9uJztcbn1cbmV4cG9ydHMuaXNGdW5jdGlvbiA9IGlzRnVuY3Rpb247XG5cbmZ1bmN0aW9uIGlzUHJpbWl0aXZlKGFyZykge1xuICByZXR1cm4gYXJnID09PSBudWxsIHx8XG4gICAgICAgICB0eXBlb2YgYXJnID09PSAnYm9vbGVhbicgfHxcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICdudW1iZXInIHx8XG4gICAgICAgICB0eXBlb2YgYXJnID09PSAnc3RyaW5nJyB8fFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ3N5bWJvbCcgfHwgIC8vIEVTNiBzeW1ib2xcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICd1bmRlZmluZWQnO1xufVxuZXhwb3J0cy5pc1ByaW1pdGl2ZSA9IGlzUHJpbWl0aXZlO1xuXG5leHBvcnRzLmlzQnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJykuQnVmZmVyLmlzQnVmZmVyO1xuXG5mdW5jdGlvbiBvYmplY3RUb1N0cmluZyhvKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobyk7XG59XG4iLAogICAgImlmICh0eXBlb2YgT2JqZWN0LmNyZWF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAvLyBpbXBsZW1lbnRhdGlvbiBmcm9tIHN0YW5kYXJkIG5vZGUuanMgJ3V0aWwnIG1vZHVsZVxuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluaGVyaXRzKGN0b3IsIHN1cGVyQ3Rvcikge1xuICAgIGlmIChzdXBlckN0b3IpIHtcbiAgICAgIGN0b3Iuc3VwZXJfID0gc3VwZXJDdG9yXG4gICAgICBjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDdG9yLnByb3RvdHlwZSwge1xuICAgICAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgICAgIHZhbHVlOiBjdG9yLFxuICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfTtcbn0gZWxzZSB7XG4gIC8vIG9sZCBzY2hvb2wgc2hpbSBmb3Igb2xkIGJyb3dzZXJzXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgaWYgKHN1cGVyQ3Rvcikge1xuICAgICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICAgIHZhciBUZW1wQ3RvciA9IGZ1bmN0aW9uICgpIHt9XG4gICAgICBUZW1wQ3Rvci5wcm90b3R5cGUgPSBzdXBlckN0b3IucHJvdG90eXBlXG4gICAgICBjdG9yLnByb3RvdHlwZSA9IG5ldyBUZW1wQ3RvcigpXG4gICAgICBjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGN0b3JcbiAgICB9XG4gIH1cbn1cbiIsCiAgICAidHJ5IHtcbiAgdmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGlmICh0eXBlb2YgdXRpbC5pbmhlcml0cyAhPT0gJ2Z1bmN0aW9uJykgdGhyb3cgJyc7XG4gIG1vZHVsZS5leHBvcnRzID0gdXRpbC5pbmhlcml0cztcbn0gY2F0Y2ggKGUpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2luaGVyaXRzX2Jyb3dzZXIuanMnKTtcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG52YXIgQnVmZmVyID0gcmVxdWlyZSgnc2FmZS1idWZmZXInKS5CdWZmZXI7XG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcblxuZnVuY3Rpb24gY29weUJ1ZmZlcihzcmMsIHRhcmdldCwgb2Zmc2V0KSB7XG4gIHNyYy5jb3B5KHRhcmdldCwgb2Zmc2V0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEJ1ZmZlckxpc3QoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEJ1ZmZlckxpc3QpO1xuXG4gICAgdGhpcy5oZWFkID0gbnVsbDtcbiAgICB0aGlzLnRhaWwgPSBudWxsO1xuICAgIHRoaXMubGVuZ3RoID0gMDtcbiAgfVxuXG4gIEJ1ZmZlckxpc3QucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiBwdXNoKHYpIHtcbiAgICB2YXIgZW50cnkgPSB7IGRhdGE6IHYsIG5leHQ6IG51bGwgfTtcbiAgICBpZiAodGhpcy5sZW5ndGggPiAwKSB0aGlzLnRhaWwubmV4dCA9IGVudHJ5O2Vsc2UgdGhpcy5oZWFkID0gZW50cnk7XG4gICAgdGhpcy50YWlsID0gZW50cnk7XG4gICAgKyt0aGlzLmxlbmd0aDtcbiAgfTtcblxuICBCdWZmZXJMaXN0LnByb3RvdHlwZS51bnNoaWZ0ID0gZnVuY3Rpb24gdW5zaGlmdCh2KSB7XG4gICAgdmFyIGVudHJ5ID0geyBkYXRhOiB2LCBuZXh0OiB0aGlzLmhlYWQgfTtcbiAgICBpZiAodGhpcy5sZW5ndGggPT09IDApIHRoaXMudGFpbCA9IGVudHJ5O1xuICAgIHRoaXMuaGVhZCA9IGVudHJ5O1xuICAgICsrdGhpcy5sZW5ndGg7XG4gIH07XG5cbiAgQnVmZmVyTGlzdC5wcm90b3R5cGUuc2hpZnQgPSBmdW5jdGlvbiBzaGlmdCgpIHtcbiAgICBpZiAodGhpcy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICB2YXIgcmV0ID0gdGhpcy5oZWFkLmRhdGE7XG4gICAgaWYgKHRoaXMubGVuZ3RoID09PSAxKSB0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBudWxsO2Vsc2UgdGhpcy5oZWFkID0gdGhpcy5oZWFkLm5leHQ7XG4gICAgLS10aGlzLmxlbmd0aDtcbiAgICByZXR1cm4gcmV0O1xuICB9O1xuXG4gIEJ1ZmZlckxpc3QucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgdGhpcy5oZWFkID0gdGhpcy50YWlsID0gbnVsbDtcbiAgICB0aGlzLmxlbmd0aCA9IDA7XG4gIH07XG5cbiAgQnVmZmVyTGlzdC5wcm90b3R5cGUuam9pbiA9IGZ1bmN0aW9uIGpvaW4ocykge1xuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuICcnO1xuICAgIHZhciBwID0gdGhpcy5oZWFkO1xuICAgIHZhciByZXQgPSAnJyArIHAuZGF0YTtcbiAgICB3aGlsZSAocCA9IHAubmV4dCkge1xuICAgICAgcmV0ICs9IHMgKyBwLmRhdGE7XG4gICAgfXJldHVybiByZXQ7XG4gIH07XG5cbiAgQnVmZmVyTGlzdC5wcm90b3R5cGUuY29uY2F0ID0gZnVuY3Rpb24gY29uY2F0KG4pIHtcbiAgICBpZiAodGhpcy5sZW5ndGggPT09IDApIHJldHVybiBCdWZmZXIuYWxsb2MoMCk7XG4gICAgdmFyIHJldCA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShuID4+PiAwKTtcbiAgICB2YXIgcCA9IHRoaXMuaGVhZDtcbiAgICB2YXIgaSA9IDA7XG4gICAgd2hpbGUgKHApIHtcbiAgICAgIGNvcHlCdWZmZXIocC5kYXRhLCByZXQsIGkpO1xuICAgICAgaSArPSBwLmRhdGEubGVuZ3RoO1xuICAgICAgcCA9IHAubmV4dDtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfTtcblxuICByZXR1cm4gQnVmZmVyTGlzdDtcbn0oKTtcblxuaWYgKHV0aWwgJiYgdXRpbC5pbnNwZWN0ICYmIHV0aWwuaW5zcGVjdC5jdXN0b20pIHtcbiAgbW9kdWxlLmV4cG9ydHMucHJvdG90eXBlW3V0aWwuaW5zcGVjdC5jdXN0b21dID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBvYmogPSB1dGlsLmluc3BlY3QoeyBsZW5ndGg6IHRoaXMubGVuZ3RoIH0pO1xuICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLm5hbWUgKyAnICcgKyBvYmo7XG4gIH07XG59IiwKICAgICIndXNlIHN0cmljdCc7XG5cbi8qPHJlcGxhY2VtZW50PiovXG5cbnZhciBwbmEgPSByZXF1aXJlKCdwcm9jZXNzLW5leHRpY2stYXJncycpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbi8vIHVuZG9jdW1lbnRlZCBjYigpIEFQSSwgbmVlZGVkIGZvciBjb3JlLCBub3QgZm9yIHB1YmxpYyBBUElcbmZ1bmN0aW9uIGRlc3Ryb3koZXJyLCBjYikge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gIHZhciByZWFkYWJsZURlc3Ryb3llZCA9IHRoaXMuX3JlYWRhYmxlU3RhdGUgJiYgdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ7XG4gIHZhciB3cml0YWJsZURlc3Ryb3llZCA9IHRoaXMuX3dyaXRhYmxlU3RhdGUgJiYgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ7XG5cbiAgaWYgKHJlYWRhYmxlRGVzdHJveWVkIHx8IHdyaXRhYmxlRGVzdHJveWVkKSB7XG4gICAgaWYgKGNiKSB7XG4gICAgICBjYihlcnIpO1xuICAgIH0gZWxzZSBpZiAoZXJyKSB7XG4gICAgICBpZiAoIXRoaXMuX3dyaXRhYmxlU3RhdGUpIHtcbiAgICAgICAgcG5hLm5leHRUaWNrKGVtaXRFcnJvck5ULCB0aGlzLCBlcnIpO1xuICAgICAgfSBlbHNlIGlmICghdGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQpIHtcbiAgICAgICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQgPSB0cnVlO1xuICAgICAgICBwbmEubmV4dFRpY2soZW1pdEVycm9yTlQsIHRoaXMsIGVycik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyB3ZSBzZXQgZGVzdHJveWVkIHRvIHRydWUgYmVmb3JlIGZpcmluZyBlcnJvciBjYWxsYmFja3MgaW4gb3JkZXJcbiAgLy8gdG8gbWFrZSBpdCByZS1lbnRyYW5jZSBzYWZlIGluIGNhc2UgZGVzdHJveSgpIGlzIGNhbGxlZCB3aXRoaW4gY2FsbGJhY2tzXG5cbiAgaWYgKHRoaXMuX3JlYWRhYmxlU3RhdGUpIHtcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCA9IHRydWU7XG4gIH1cblxuICAvLyBpZiB0aGlzIGlzIGEgZHVwbGV4IHN0cmVhbSBtYXJrIHRoZSB3cml0YWJsZSBwYXJ0IGFzIGRlc3Ryb3llZCBhcyB3ZWxsXG4gIGlmICh0aGlzLl93cml0YWJsZVN0YXRlKSB7XG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQgPSB0cnVlO1xuICB9XG5cbiAgdGhpcy5fZGVzdHJveShlcnIgfHwgbnVsbCwgZnVuY3Rpb24gKGVycikge1xuICAgIGlmICghY2IgJiYgZXJyKSB7XG4gICAgICBpZiAoIV90aGlzLl93cml0YWJsZVN0YXRlKSB7XG4gICAgICAgIHBuYS5uZXh0VGljayhlbWl0RXJyb3JOVCwgX3RoaXMsIGVycik7XG4gICAgICB9IGVsc2UgaWYgKCFfdGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQpIHtcbiAgICAgICAgX3RoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkID0gdHJ1ZTtcbiAgICAgICAgcG5hLm5leHRUaWNrKGVtaXRFcnJvck5ULCBfdGhpcywgZXJyKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNiKSB7XG4gICAgICBjYihlcnIpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHRoaXM7XG59XG5cbmZ1bmN0aW9uIHVuZGVzdHJveSgpIHtcbiAgaWYgKHRoaXMuX3JlYWRhYmxlU3RhdGUpIHtcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCA9IGZhbHNlO1xuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUucmVhZGluZyA9IGZhbHNlO1xuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQgPSBmYWxzZTtcbiAgfVxuXG4gIGlmICh0aGlzLl93cml0YWJsZVN0YXRlKSB7XG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQgPSBmYWxzZTtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkID0gZmFsc2U7XG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmZpbmFsQ2FsbGVkID0gZmFsc2U7XG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5wcmVmaW5pc2hlZCA9IGZhbHNlO1xuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQgPSBmYWxzZTtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZCA9IGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGVtaXRFcnJvck5UKHNlbGYsIGVycikge1xuICBzZWxmLmVtaXQoJ2Vycm9yJywgZXJyKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGRlc3Ryb3k6IGRlc3Ryb3ksXG4gIHVuZGVzdHJveTogdW5kZXN0cm95XG59OyIsCiAgICAiXG4vKipcbiAqIEZvciBOb2RlLmpzLCBzaW1wbHkgcmUtZXhwb3J0IHRoZSBjb3JlIGB1dGlsLmRlcHJlY2F0ZWAgZnVuY3Rpb24uXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCd1dGlsJykuZGVwcmVjYXRlO1xuIiwKICAgICIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuLy8gQSBiaXQgc2ltcGxlciB0aGFuIHJlYWRhYmxlIHN0cmVhbXMuXG4vLyBJbXBsZW1lbnQgYW4gYXN5bmMgLl93cml0ZShjaHVuaywgZW5jb2RpbmcsIGNiKSwgYW5kIGl0J2xsIGhhbmRsZSBhbGxcbi8vIHRoZSBkcmFpbiBldmVudCBlbWlzc2lvbiBhbmQgYnVmZmVyaW5nLlxuXG4ndXNlIHN0cmljdCc7XG5cbi8qPHJlcGxhY2VtZW50PiovXG5cbnZhciBwbmEgPSByZXF1aXJlKCdwcm9jZXNzLW5leHRpY2stYXJncycpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbm1vZHVsZS5leHBvcnRzID0gV3JpdGFibGU7XG5cbi8qIDxyZXBsYWNlbWVudD4gKi9cbmZ1bmN0aW9uIFdyaXRlUmVxKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgdGhpcy5jaHVuayA9IGNodW5rO1xuICB0aGlzLmVuY29kaW5nID0gZW5jb2Rpbmc7XG4gIHRoaXMuY2FsbGJhY2sgPSBjYjtcbiAgdGhpcy5uZXh0ID0gbnVsbDtcbn1cblxuLy8gSXQgc2VlbXMgYSBsaW5rZWQgbGlzdCBidXQgaXQgaXMgbm90XG4vLyB0aGVyZSB3aWxsIGJlIG9ubHkgMiBvZiB0aGVzZSBmb3IgZWFjaCBzdHJlYW1cbmZ1bmN0aW9uIENvcmtlZFJlcXVlc3Qoc3RhdGUpIHtcbiAgdmFyIF90aGlzID0gdGhpcztcblxuICB0aGlzLm5leHQgPSBudWxsO1xuICB0aGlzLmVudHJ5ID0gbnVsbDtcbiAgdGhpcy5maW5pc2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgb25Db3JrZWRGaW5pc2goX3RoaXMsIHN0YXRlKTtcbiAgfTtcbn1cbi8qIDwvcmVwbGFjZW1lbnQ+ICovXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgYXN5bmNXcml0ZSA9ICFwcm9jZXNzLmJyb3dzZXIgJiYgWyd2MC4xMCcsICd2MC45LiddLmluZGV4T2YocHJvY2Vzcy52ZXJzaW9uLnNsaWNlKDAsIDUpKSA+IC0xID8gc2V0SW1tZWRpYXRlIDogcG5hLm5leHRUaWNrO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgRHVwbGV4O1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbldyaXRhYmxlLldyaXRhYmxlU3RhdGUgPSBXcml0YWJsZVN0YXRlO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIHV0aWwgPSBPYmplY3QuY3JlYXRlKHJlcXVpcmUoJ2NvcmUtdXRpbC1pcycpKTtcbnV0aWwuaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgaW50ZXJuYWxVdGlsID0ge1xuICBkZXByZWNhdGU6IHJlcXVpcmUoJ3V0aWwtZGVwcmVjYXRlJylcbn07XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBTdHJlYW0gPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvc3RyZWFtJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cblxudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ3NhZmUtYnVmZmVyJykuQnVmZmVyO1xudmFyIE91clVpbnQ4QXJyYXkgPSAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWwgOiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyA/IHNlbGYgOiB7fSkuVWludDhBcnJheSB8fCBmdW5jdGlvbiAoKSB7fTtcbmZ1bmN0aW9uIF91aW50OEFycmF5VG9CdWZmZXIoY2h1bmspIHtcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKGNodW5rKTtcbn1cbmZ1bmN0aW9uIF9pc1VpbnQ4QXJyYXkob2JqKSB7XG4gIHJldHVybiBCdWZmZXIuaXNCdWZmZXIob2JqKSB8fCBvYmogaW5zdGFuY2VvZiBPdXJVaW50OEFycmF5O1xufVxuXG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxudmFyIGRlc3Ryb3lJbXBsID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL2Rlc3Ryb3knKTtcblxudXRpbC5pbmhlcml0cyhXcml0YWJsZSwgU3RyZWFtKTtcblxuZnVuY3Rpb24gbm9wKCkge31cblxuZnVuY3Rpb24gV3JpdGFibGVTdGF0ZShvcHRpb25zLCBzdHJlYW0pIHtcbiAgRHVwbGV4ID0gRHVwbGV4IHx8IHJlcXVpcmUoJy4vX3N0cmVhbV9kdXBsZXgnKTtcblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAvLyBEdXBsZXggc3RyZWFtcyBhcmUgYm90aCByZWFkYWJsZSBhbmQgd3JpdGFibGUsIGJ1dCBzaGFyZVxuICAvLyB0aGUgc2FtZSBvcHRpb25zIG9iamVjdC5cbiAgLy8gSG93ZXZlciwgc29tZSBjYXNlcyByZXF1aXJlIHNldHRpbmcgb3B0aW9ucyB0byBkaWZmZXJlbnRcbiAgLy8gdmFsdWVzIGZvciB0aGUgcmVhZGFibGUgYW5kIHRoZSB3cml0YWJsZSBzaWRlcyBvZiB0aGUgZHVwbGV4IHN0cmVhbS5cbiAgLy8gVGhlc2Ugb3B0aW9ucyBjYW4gYmUgcHJvdmlkZWQgc2VwYXJhdGVseSBhcyByZWFkYWJsZVhYWCBhbmQgd3JpdGFibGVYWFguXG4gIHZhciBpc0R1cGxleCA9IHN0cmVhbSBpbnN0YW5jZW9mIER1cGxleDtcblxuICAvLyBvYmplY3Qgc3RyZWFtIGZsYWcgdG8gaW5kaWNhdGUgd2hldGhlciBvciBub3QgdGhpcyBzdHJlYW1cbiAgLy8gY29udGFpbnMgYnVmZmVycyBvciBvYmplY3RzLlxuICB0aGlzLm9iamVjdE1vZGUgPSAhIW9wdGlvbnMub2JqZWN0TW9kZTtcblxuICBpZiAoaXNEdXBsZXgpIHRoaXMub2JqZWN0TW9kZSA9IHRoaXMub2JqZWN0TW9kZSB8fCAhIW9wdGlvbnMud3JpdGFibGVPYmplY3RNb2RlO1xuXG4gIC8vIHRoZSBwb2ludCBhdCB3aGljaCB3cml0ZSgpIHN0YXJ0cyByZXR1cm5pbmcgZmFsc2VcbiAgLy8gTm90ZTogMCBpcyBhIHZhbGlkIHZhbHVlLCBtZWFucyB0aGF0IHdlIGFsd2F5cyByZXR1cm4gZmFsc2UgaWZcbiAgLy8gdGhlIGVudGlyZSBidWZmZXIgaXMgbm90IGZsdXNoZWQgaW1tZWRpYXRlbHkgb24gd3JpdGUoKVxuICB2YXIgaHdtID0gb3B0aW9ucy5oaWdoV2F0ZXJNYXJrO1xuICB2YXIgd3JpdGFibGVId20gPSBvcHRpb25zLndyaXRhYmxlSGlnaFdhdGVyTWFyaztcbiAgdmFyIGRlZmF1bHRId20gPSB0aGlzLm9iamVjdE1vZGUgPyAxNiA6IDE2ICogMTAyNDtcblxuICBpZiAoaHdtIHx8IGh3bSA9PT0gMCkgdGhpcy5oaWdoV2F0ZXJNYXJrID0gaHdtO2Vsc2UgaWYgKGlzRHVwbGV4ICYmICh3cml0YWJsZUh3bSB8fCB3cml0YWJsZUh3bSA9PT0gMCkpIHRoaXMuaGlnaFdhdGVyTWFyayA9IHdyaXRhYmxlSHdtO2Vsc2UgdGhpcy5oaWdoV2F0ZXJNYXJrID0gZGVmYXVsdEh3bTtcblxuICAvLyBjYXN0IHRvIGludHMuXG4gIHRoaXMuaGlnaFdhdGVyTWFyayA9IE1hdGguZmxvb3IodGhpcy5oaWdoV2F0ZXJNYXJrKTtcblxuICAvLyBpZiBfZmluYWwgaGFzIGJlZW4gY2FsbGVkXG4gIHRoaXMuZmluYWxDYWxsZWQgPSBmYWxzZTtcblxuICAvLyBkcmFpbiBldmVudCBmbGFnLlxuICB0aGlzLm5lZWREcmFpbiA9IGZhbHNlO1xuICAvLyBhdCB0aGUgc3RhcnQgb2YgY2FsbGluZyBlbmQoKVxuICB0aGlzLmVuZGluZyA9IGZhbHNlO1xuICAvLyB3aGVuIGVuZCgpIGhhcyBiZWVuIGNhbGxlZCwgYW5kIHJldHVybmVkXG4gIHRoaXMuZW5kZWQgPSBmYWxzZTtcbiAgLy8gd2hlbiAnZmluaXNoJyBpcyBlbWl0dGVkXG4gIHRoaXMuZmluaXNoZWQgPSBmYWxzZTtcblxuICAvLyBoYXMgaXQgYmVlbiBkZXN0cm95ZWRcbiAgdGhpcy5kZXN0cm95ZWQgPSBmYWxzZTtcblxuICAvLyBzaG91bGQgd2UgZGVjb2RlIHN0cmluZ3MgaW50byBidWZmZXJzIGJlZm9yZSBwYXNzaW5nIHRvIF93cml0ZT9cbiAgLy8gdGhpcyBpcyBoZXJlIHNvIHRoYXQgc29tZSBub2RlLWNvcmUgc3RyZWFtcyBjYW4gb3B0aW1pemUgc3RyaW5nXG4gIC8vIGhhbmRsaW5nIGF0IGEgbG93ZXIgbGV2ZWwuXG4gIHZhciBub0RlY29kZSA9IG9wdGlvbnMuZGVjb2RlU3RyaW5ncyA9PT0gZmFsc2U7XG4gIHRoaXMuZGVjb2RlU3RyaW5ncyA9ICFub0RlY29kZTtcblxuICAvLyBDcnlwdG8gaXMga2luZCBvZiBvbGQgYW5kIGNydXN0eS4gIEhpc3RvcmljYWxseSwgaXRzIGRlZmF1bHQgc3RyaW5nXG4gIC8vIGVuY29kaW5nIGlzICdiaW5hcnknIHNvIHdlIGhhdmUgdG8gbWFrZSB0aGlzIGNvbmZpZ3VyYWJsZS5cbiAgLy8gRXZlcnl0aGluZyBlbHNlIGluIHRoZSB1bml2ZXJzZSB1c2VzICd1dGY4JywgdGhvdWdoLlxuICB0aGlzLmRlZmF1bHRFbmNvZGluZyA9IG9wdGlvbnMuZGVmYXVsdEVuY29kaW5nIHx8ICd1dGY4JztcblxuICAvLyBub3QgYW4gYWN0dWFsIGJ1ZmZlciB3ZSBrZWVwIHRyYWNrIG9mLCBidXQgYSBtZWFzdXJlbWVudFxuICAvLyBvZiBob3cgbXVjaCB3ZSdyZSB3YWl0aW5nIHRvIGdldCBwdXNoZWQgdG8gc29tZSB1bmRlcmx5aW5nXG4gIC8vIHNvY2tldCBvciBmaWxlLlxuICB0aGlzLmxlbmd0aCA9IDA7XG5cbiAgLy8gYSBmbGFnIHRvIHNlZSB3aGVuIHdlJ3JlIGluIHRoZSBtaWRkbGUgb2YgYSB3cml0ZS5cbiAgdGhpcy53cml0aW5nID0gZmFsc2U7XG5cbiAgLy8gd2hlbiB0cnVlIGFsbCB3cml0ZXMgd2lsbCBiZSBidWZmZXJlZCB1bnRpbCAudW5jb3JrKCkgY2FsbFxuICB0aGlzLmNvcmtlZCA9IDA7XG5cbiAgLy8gYSBmbGFnIHRvIGJlIGFibGUgdG8gdGVsbCBpZiB0aGUgb253cml0ZSBjYiBpcyBjYWxsZWQgaW1tZWRpYXRlbHksXG4gIC8vIG9yIG9uIGEgbGF0ZXIgdGljay4gIFdlIHNldCB0aGlzIHRvIHRydWUgYXQgZmlyc3QsIGJlY2F1c2UgYW55XG4gIC8vIGFjdGlvbnMgdGhhdCBzaG91bGRuJ3QgaGFwcGVuIHVudGlsIFwibGF0ZXJcIiBzaG91bGQgZ2VuZXJhbGx5IGFsc29cbiAgLy8gbm90IGhhcHBlbiBiZWZvcmUgdGhlIGZpcnN0IHdyaXRlIGNhbGwuXG4gIHRoaXMuc3luYyA9IHRydWU7XG5cbiAgLy8gYSBmbGFnIHRvIGtub3cgaWYgd2UncmUgcHJvY2Vzc2luZyBwcmV2aW91c2x5IGJ1ZmZlcmVkIGl0ZW1zLCB3aGljaFxuICAvLyBtYXkgY2FsbCB0aGUgX3dyaXRlKCkgY2FsbGJhY2sgaW4gdGhlIHNhbWUgdGljaywgc28gdGhhdCB3ZSBkb24ndFxuICAvLyBlbmQgdXAgaW4gYW4gb3ZlcmxhcHBlZCBvbndyaXRlIHNpdHVhdGlvbi5cbiAgdGhpcy5idWZmZXJQcm9jZXNzaW5nID0gZmFsc2U7XG5cbiAgLy8gdGhlIGNhbGxiYWNrIHRoYXQncyBwYXNzZWQgdG8gX3dyaXRlKGNodW5rLGNiKVxuICB0aGlzLm9ud3JpdGUgPSBmdW5jdGlvbiAoZXIpIHtcbiAgICBvbndyaXRlKHN0cmVhbSwgZXIpO1xuICB9O1xuXG4gIC8vIHRoZSBjYWxsYmFjayB0aGF0IHRoZSB1c2VyIHN1cHBsaWVzIHRvIHdyaXRlKGNodW5rLGVuY29kaW5nLGNiKVxuICB0aGlzLndyaXRlY2IgPSBudWxsO1xuXG4gIC8vIHRoZSBhbW91bnQgdGhhdCBpcyBiZWluZyB3cml0dGVuIHdoZW4gX3dyaXRlIGlzIGNhbGxlZC5cbiAgdGhpcy53cml0ZWxlbiA9IDA7XG5cbiAgdGhpcy5idWZmZXJlZFJlcXVlc3QgPSBudWxsO1xuICB0aGlzLmxhc3RCdWZmZXJlZFJlcXVlc3QgPSBudWxsO1xuXG4gIC8vIG51bWJlciBvZiBwZW5kaW5nIHVzZXItc3VwcGxpZWQgd3JpdGUgY2FsbGJhY2tzXG4gIC8vIHRoaXMgbXVzdCBiZSAwIGJlZm9yZSAnZmluaXNoJyBjYW4gYmUgZW1pdHRlZFxuICB0aGlzLnBlbmRpbmdjYiA9IDA7XG5cbiAgLy8gZW1pdCBwcmVmaW5pc2ggaWYgdGhlIG9ubHkgdGhpbmcgd2UncmUgd2FpdGluZyBmb3IgaXMgX3dyaXRlIGNic1xuICAvLyBUaGlzIGlzIHJlbGV2YW50IGZvciBzeW5jaHJvbm91cyBUcmFuc2Zvcm0gc3RyZWFtc1xuICB0aGlzLnByZWZpbmlzaGVkID0gZmFsc2U7XG5cbiAgLy8gVHJ1ZSBpZiB0aGUgZXJyb3Igd2FzIGFscmVhZHkgZW1pdHRlZCBhbmQgc2hvdWxkIG5vdCBiZSB0aHJvd24gYWdhaW5cbiAgdGhpcy5lcnJvckVtaXR0ZWQgPSBmYWxzZTtcblxuICAvLyBjb3VudCBidWZmZXJlZCByZXF1ZXN0c1xuICB0aGlzLmJ1ZmZlcmVkUmVxdWVzdENvdW50ID0gMDtcblxuICAvLyBhbGxvY2F0ZSB0aGUgZmlyc3QgQ29ya2VkUmVxdWVzdCwgdGhlcmUgaXMgYWx3YXlzXG4gIC8vIG9uZSBhbGxvY2F0ZWQgYW5kIGZyZWUgdG8gdXNlLCBhbmQgd2UgbWFpbnRhaW4gYXQgbW9zdCB0d29cbiAgdGhpcy5jb3JrZWRSZXF1ZXN0c0ZyZWUgPSBuZXcgQ29ya2VkUmVxdWVzdCh0aGlzKTtcbn1cblxuV3JpdGFibGVTdGF0ZS5wcm90b3R5cGUuZ2V0QnVmZmVyID0gZnVuY3Rpb24gZ2V0QnVmZmVyKCkge1xuICB2YXIgY3VycmVudCA9IHRoaXMuYnVmZmVyZWRSZXF1ZXN0O1xuICB2YXIgb3V0ID0gW107XG4gIHdoaWxlIChjdXJyZW50KSB7XG4gICAgb3V0LnB1c2goY3VycmVudCk7XG4gICAgY3VycmVudCA9IGN1cnJlbnQubmV4dDtcbiAgfVxuICByZXR1cm4gb3V0O1xufTtcblxuKGZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoV3JpdGFibGVTdGF0ZS5wcm90b3R5cGUsICdidWZmZXInLCB7XG4gICAgICBnZXQ6IGludGVybmFsVXRpbC5kZXByZWNhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRCdWZmZXIoKTtcbiAgICAgIH0sICdfd3JpdGFibGVTdGF0ZS5idWZmZXIgaXMgZGVwcmVjYXRlZC4gVXNlIF93cml0YWJsZVN0YXRlLmdldEJ1ZmZlciAnICsgJ2luc3RlYWQuJywgJ0RFUDAwMDMnKVxuICAgIH0pO1xuICB9IGNhdGNoIChfKSB7fVxufSkoKTtcblxuLy8gVGVzdCBfd3JpdGFibGVTdGF0ZSBmb3IgaW5oZXJpdGFuY2UgdG8gYWNjb3VudCBmb3IgRHVwbGV4IHN0cmVhbXMsXG4vLyB3aG9zZSBwcm90b3R5cGUgY2hhaW4gb25seSBwb2ludHMgdG8gUmVhZGFibGUuXG52YXIgcmVhbEhhc0luc3RhbmNlO1xuaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLmhhc0luc3RhbmNlICYmIHR5cGVvZiBGdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXSA9PT0gJ2Z1bmN0aW9uJykge1xuICByZWFsSGFzSW5zdGFuY2UgPSBGdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFdyaXRhYmxlLCBTeW1ib2wuaGFzSW5zdGFuY2UsIHtcbiAgICB2YWx1ZTogZnVuY3Rpb24gKG9iamVjdCkge1xuICAgICAgaWYgKHJlYWxIYXNJbnN0YW5jZS5jYWxsKHRoaXMsIG9iamVjdCkpIHJldHVybiB0cnVlO1xuICAgICAgaWYgKHRoaXMgIT09IFdyaXRhYmxlKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIHJldHVybiBvYmplY3QgJiYgb2JqZWN0Ll93cml0YWJsZVN0YXRlIGluc3RhbmNlb2YgV3JpdGFibGVTdGF0ZTtcbiAgICB9XG4gIH0pO1xufSBlbHNlIHtcbiAgcmVhbEhhc0luc3RhbmNlID0gZnVuY3Rpb24gKG9iamVjdCkge1xuICAgIHJldHVybiBvYmplY3QgaW5zdGFuY2VvZiB0aGlzO1xuICB9O1xufVxuXG5mdW5jdGlvbiBXcml0YWJsZShvcHRpb25zKSB7XG4gIER1cGxleCA9IER1cGxleCB8fCByZXF1aXJlKCcuL19zdHJlYW1fZHVwbGV4Jyk7XG5cbiAgLy8gV3JpdGFibGUgY3RvciBpcyBhcHBsaWVkIHRvIER1cGxleGVzLCB0b28uXG4gIC8vIGByZWFsSGFzSW5zdGFuY2VgIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHVzaW5nIHBsYWluIGBpbnN0YW5jZW9mYFxuICAvLyB3b3VsZCByZXR1cm4gZmFsc2UsIGFzIG5vIGBfd3JpdGFibGVTdGF0ZWAgcHJvcGVydHkgaXMgYXR0YWNoZWQuXG5cbiAgLy8gVHJ5aW5nIHRvIHVzZSB0aGUgY3VzdG9tIGBpbnN0YW5jZW9mYCBmb3IgV3JpdGFibGUgaGVyZSB3aWxsIGFsc28gYnJlYWsgdGhlXG4gIC8vIE5vZGUuanMgTGF6eVRyYW5zZm9ybSBpbXBsZW1lbnRhdGlvbiwgd2hpY2ggaGFzIGEgbm9uLXRyaXZpYWwgZ2V0dGVyIGZvclxuICAvLyBgX3dyaXRhYmxlU3RhdGVgIHRoYXQgd291bGQgbGVhZCB0byBpbmZpbml0ZSByZWN1cnNpb24uXG4gIGlmICghcmVhbEhhc0luc3RhbmNlLmNhbGwoV3JpdGFibGUsIHRoaXMpICYmICEodGhpcyBpbnN0YW5jZW9mIER1cGxleCkpIHtcbiAgICByZXR1cm4gbmV3IFdyaXRhYmxlKG9wdGlvbnMpO1xuICB9XG5cbiAgdGhpcy5fd3JpdGFibGVTdGF0ZSA9IG5ldyBXcml0YWJsZVN0YXRlKG9wdGlvbnMsIHRoaXMpO1xuXG4gIC8vIGxlZ2FjeS5cbiAgdGhpcy53cml0YWJsZSA9IHRydWU7XG5cbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMud3JpdGUgPT09ICdmdW5jdGlvbicpIHRoaXMuX3dyaXRlID0gb3B0aW9ucy53cml0ZTtcblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy53cml0ZXYgPT09ICdmdW5jdGlvbicpIHRoaXMuX3dyaXRldiA9IG9wdGlvbnMud3JpdGV2O1xuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmRlc3Ryb3kgPT09ICdmdW5jdGlvbicpIHRoaXMuX2Rlc3Ryb3kgPSBvcHRpb25zLmRlc3Ryb3k7XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuZmluYWwgPT09ICdmdW5jdGlvbicpIHRoaXMuX2ZpbmFsID0gb3B0aW9ucy5maW5hbDtcbiAgfVxuXG4gIFN0cmVhbS5jYWxsKHRoaXMpO1xufVxuXG4vLyBPdGhlcndpc2UgcGVvcGxlIGNhbiBwaXBlIFdyaXRhYmxlIHN0cmVhbXMsIHdoaWNoIGlzIGp1c3Qgd3JvbmcuXG5Xcml0YWJsZS5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcignQ2Fubm90IHBpcGUsIG5vdCByZWFkYWJsZScpKTtcbn07XG5cbmZ1bmN0aW9uIHdyaXRlQWZ0ZXJFbmQoc3RyZWFtLCBjYikge1xuICB2YXIgZXIgPSBuZXcgRXJyb3IoJ3dyaXRlIGFmdGVyIGVuZCcpO1xuICAvLyBUT0RPOiBkZWZlciBlcnJvciBldmVudHMgY29uc2lzdGVudGx5IGV2ZXJ5d2hlcmUsIG5vdCBqdXN0IHRoZSBjYlxuICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcik7XG4gIHBuYS5uZXh0VGljayhjYiwgZXIpO1xufVxuXG4vLyBDaGVja3MgdGhhdCBhIHVzZXItc3VwcGxpZWQgY2h1bmsgaXMgdmFsaWQsIGVzcGVjaWFsbHkgZm9yIHRoZSBwYXJ0aWN1bGFyXG4vLyBtb2RlIHRoZSBzdHJlYW0gaXMgaW4uIEN1cnJlbnRseSB0aGlzIG1lYW5zIHRoYXQgYG51bGxgIGlzIG5ldmVyIGFjY2VwdGVkXG4vLyBhbmQgdW5kZWZpbmVkL25vbi1zdHJpbmcgdmFsdWVzIGFyZSBvbmx5IGFsbG93ZWQgaW4gb2JqZWN0IG1vZGUuXG5mdW5jdGlvbiB2YWxpZENodW5rKHN0cmVhbSwgc3RhdGUsIGNodW5rLCBjYikge1xuICB2YXIgdmFsaWQgPSB0cnVlO1xuICB2YXIgZXIgPSBmYWxzZTtcblxuICBpZiAoY2h1bmsgPT09IG51bGwpIHtcbiAgICBlciA9IG5ldyBUeXBlRXJyb3IoJ01heSBub3Qgd3JpdGUgbnVsbCB2YWx1ZXMgdG8gc3RyZWFtJyk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGNodW5rICE9PSAnc3RyaW5nJyAmJiBjaHVuayAhPT0gdW5kZWZpbmVkICYmICFzdGF0ZS5vYmplY3RNb2RlKSB7XG4gICAgZXIgPSBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIG5vbi1zdHJpbmcvYnVmZmVyIGNodW5rJyk7XG4gIH1cbiAgaWYgKGVyKSB7XG4gICAgc3RyZWFtLmVtaXQoJ2Vycm9yJywgZXIpO1xuICAgIHBuYS5uZXh0VGljayhjYiwgZXIpO1xuICAgIHZhbGlkID0gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHZhbGlkO1xufVxuXG5Xcml0YWJsZS5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICB2YXIgc3RhdGUgPSB0aGlzLl93cml0YWJsZVN0YXRlO1xuICB2YXIgcmV0ID0gZmFsc2U7XG4gIHZhciBpc0J1ZiA9ICFzdGF0ZS5vYmplY3RNb2RlICYmIF9pc1VpbnQ4QXJyYXkoY2h1bmspO1xuXG4gIGlmIChpc0J1ZiAmJiAhQnVmZmVyLmlzQnVmZmVyKGNodW5rKSkge1xuICAgIGNodW5rID0gX3VpbnQ4QXJyYXlUb0J1ZmZlcihjaHVuayk7XG4gIH1cblxuICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2IgPSBlbmNvZGluZztcbiAgICBlbmNvZGluZyA9IG51bGw7XG4gIH1cblxuICBpZiAoaXNCdWYpIGVuY29kaW5nID0gJ2J1ZmZlcic7ZWxzZSBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9IHN0YXRlLmRlZmF1bHRFbmNvZGluZztcblxuICBpZiAodHlwZW9mIGNiICE9PSAnZnVuY3Rpb24nKSBjYiA9IG5vcDtcblxuICBpZiAoc3RhdGUuZW5kZWQpIHdyaXRlQWZ0ZXJFbmQodGhpcywgY2IpO2Vsc2UgaWYgKGlzQnVmIHx8IHZhbGlkQ2h1bmsodGhpcywgc3RhdGUsIGNodW5rLCBjYikpIHtcbiAgICBzdGF0ZS5wZW5kaW5nY2IrKztcbiAgICByZXQgPSB3cml0ZU9yQnVmZmVyKHRoaXMsIHN0YXRlLCBpc0J1ZiwgY2h1bmssIGVuY29kaW5nLCBjYik7XG4gIH1cblxuICByZXR1cm4gcmV0O1xufTtcblxuV3JpdGFibGUucHJvdG90eXBlLmNvcmsgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3dyaXRhYmxlU3RhdGU7XG5cbiAgc3RhdGUuY29ya2VkKys7XG59O1xuXG5Xcml0YWJsZS5wcm90b3R5cGUudW5jb3JrID0gZnVuY3Rpb24gKCkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl93cml0YWJsZVN0YXRlO1xuXG4gIGlmIChzdGF0ZS5jb3JrZWQpIHtcbiAgICBzdGF0ZS5jb3JrZWQtLTtcblxuICAgIGlmICghc3RhdGUud3JpdGluZyAmJiAhc3RhdGUuY29ya2VkICYmICFzdGF0ZS5idWZmZXJQcm9jZXNzaW5nICYmIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdCkgY2xlYXJCdWZmZXIodGhpcywgc3RhdGUpO1xuICB9XG59O1xuXG5Xcml0YWJsZS5wcm90b3R5cGUuc2V0RGVmYXVsdEVuY29kaW5nID0gZnVuY3Rpb24gc2V0RGVmYXVsdEVuY29kaW5nKGVuY29kaW5nKSB7XG4gIC8vIG5vZGU6OlBhcnNlRW5jb2RpbmcoKSByZXF1aXJlcyBsb3dlciBjYXNlLlxuICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnc3RyaW5nJykgZW5jb2RpbmcgPSBlbmNvZGluZy50b0xvd2VyQ2FzZSgpO1xuICBpZiAoIShbJ2hleCcsICd1dGY4JywgJ3V0Zi04JywgJ2FzY2lpJywgJ2JpbmFyeScsICdiYXNlNjQnLCAndWNzMicsICd1Y3MtMicsICd1dGYxNmxlJywgJ3V0Zi0xNmxlJywgJ3JhdyddLmluZGV4T2YoKGVuY29kaW5nICsgJycpLnRvTG93ZXJDYXNlKCkpID4gLTEpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpO1xuICB0aGlzLl93cml0YWJsZVN0YXRlLmRlZmF1bHRFbmNvZGluZyA9IGVuY29kaW5nO1xuICByZXR1cm4gdGhpcztcbn07XG5cbmZ1bmN0aW9uIGRlY29kZUNodW5rKHN0YXRlLCBjaHVuaywgZW5jb2RpbmcpIHtcbiAgaWYgKCFzdGF0ZS5vYmplY3RNb2RlICYmIHN0YXRlLmRlY29kZVN0cmluZ3MgIT09IGZhbHNlICYmIHR5cGVvZiBjaHVuayA9PT0gJ3N0cmluZycpIHtcbiAgICBjaHVuayA9IEJ1ZmZlci5mcm9tKGNodW5rLCBlbmNvZGluZyk7XG4gIH1cbiAgcmV0dXJuIGNodW5rO1xufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoV3JpdGFibGUucHJvdG90eXBlLCAnd3JpdGFibGVIaWdoV2F0ZXJNYXJrJywge1xuICAvLyBtYWtpbmcgaXQgZXhwbGljaXQgdGhpcyBwcm9wZXJ0eSBpcyBub3QgZW51bWVyYWJsZVxuICAvLyBiZWNhdXNlIG90aGVyd2lzZSBzb21lIHByb3RvdHlwZSBtYW5pcHVsYXRpb24gaW5cbiAgLy8gdXNlcmxhbmQgd2lsbCBmYWlsXG4gIGVudW1lcmFibGU6IGZhbHNlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrO1xuICB9XG59KTtcblxuLy8gaWYgd2UncmUgYWxyZWFkeSB3cml0aW5nIHNvbWV0aGluZywgdGhlbiBqdXN0IHB1dCB0aGlzXG4vLyBpbiB0aGUgcXVldWUsIGFuZCB3YWl0IG91ciB0dXJuLiAgT3RoZXJ3aXNlLCBjYWxsIF93cml0ZVxuLy8gSWYgd2UgcmV0dXJuIGZhbHNlLCB0aGVuIHdlIG5lZWQgYSBkcmFpbiBldmVudCwgc28gc2V0IHRoYXQgZmxhZy5cbmZ1bmN0aW9uIHdyaXRlT3JCdWZmZXIoc3RyZWFtLCBzdGF0ZSwgaXNCdWYsIGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgaWYgKCFpc0J1Zikge1xuICAgIHZhciBuZXdDaHVuayA9IGRlY29kZUNodW5rKHN0YXRlLCBjaHVuaywgZW5jb2RpbmcpO1xuICAgIGlmIChjaHVuayAhPT0gbmV3Q2h1bmspIHtcbiAgICAgIGlzQnVmID0gdHJ1ZTtcbiAgICAgIGVuY29kaW5nID0gJ2J1ZmZlcic7XG4gICAgICBjaHVuayA9IG5ld0NodW5rO1xuICAgIH1cbiAgfVxuICB2YXIgbGVuID0gc3RhdGUub2JqZWN0TW9kZSA/IDEgOiBjaHVuay5sZW5ndGg7XG5cbiAgc3RhdGUubGVuZ3RoICs9IGxlbjtcblxuICB2YXIgcmV0ID0gc3RhdGUubGVuZ3RoIDwgc3RhdGUuaGlnaFdhdGVyTWFyaztcbiAgLy8gd2UgbXVzdCBlbnN1cmUgdGhhdCBwcmV2aW91cyBuZWVkRHJhaW4gd2lsbCBub3QgYmUgcmVzZXQgdG8gZmFsc2UuXG4gIGlmICghcmV0KSBzdGF0ZS5uZWVkRHJhaW4gPSB0cnVlO1xuXG4gIGlmIChzdGF0ZS53cml0aW5nIHx8IHN0YXRlLmNvcmtlZCkge1xuICAgIHZhciBsYXN0ID0gc3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdDtcbiAgICBzdGF0ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0ID0ge1xuICAgICAgY2h1bms6IGNodW5rLFxuICAgICAgZW5jb2Rpbmc6IGVuY29kaW5nLFxuICAgICAgaXNCdWY6IGlzQnVmLFxuICAgICAgY2FsbGJhY2s6IGNiLFxuICAgICAgbmV4dDogbnVsbFxuICAgIH07XG4gICAgaWYgKGxhc3QpIHtcbiAgICAgIGxhc3QubmV4dCA9IHN0YXRlLmxhc3RCdWZmZXJlZFJlcXVlc3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdCA9IHN0YXRlLmxhc3RCdWZmZXJlZFJlcXVlc3Q7XG4gICAgfVxuICAgIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdENvdW50ICs9IDE7XG4gIH0gZWxzZSB7XG4gICAgZG9Xcml0ZShzdHJlYW0sIHN0YXRlLCBmYWxzZSwgbGVuLCBjaHVuaywgZW5jb2RpbmcsIGNiKTtcbiAgfVxuXG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIGRvV3JpdGUoc3RyZWFtLCBzdGF0ZSwgd3JpdGV2LCBsZW4sIGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgc3RhdGUud3JpdGVsZW4gPSBsZW47XG4gIHN0YXRlLndyaXRlY2IgPSBjYjtcbiAgc3RhdGUud3JpdGluZyA9IHRydWU7XG4gIHN0YXRlLnN5bmMgPSB0cnVlO1xuICBpZiAod3JpdGV2KSBzdHJlYW0uX3dyaXRldihjaHVuaywgc3RhdGUub253cml0ZSk7ZWxzZSBzdHJlYW0uX3dyaXRlKGNodW5rLCBlbmNvZGluZywgc3RhdGUub253cml0ZSk7XG4gIHN0YXRlLnN5bmMgPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gb253cml0ZUVycm9yKHN0cmVhbSwgc3RhdGUsIHN5bmMsIGVyLCBjYikge1xuICAtLXN0YXRlLnBlbmRpbmdjYjtcblxuICBpZiAoc3luYykge1xuICAgIC8vIGRlZmVyIHRoZSBjYWxsYmFjayBpZiB3ZSBhcmUgYmVpbmcgY2FsbGVkIHN5bmNocm9ub3VzbHlcbiAgICAvLyB0byBhdm9pZCBwaWxpbmcgdXAgdGhpbmdzIG9uIHRoZSBzdGFja1xuICAgIHBuYS5uZXh0VGljayhjYiwgZXIpO1xuICAgIC8vIHRoaXMgY2FuIGVtaXQgZmluaXNoLCBhbmQgaXQgd2lsbCBhbHdheXMgaGFwcGVuXG4gICAgLy8gYWZ0ZXIgZXJyb3JcbiAgICBwbmEubmV4dFRpY2soZmluaXNoTWF5YmUsIHN0cmVhbSwgc3RhdGUpO1xuICAgIHN0cmVhbS5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQgPSB0cnVlO1xuICAgIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVyKTtcbiAgfSBlbHNlIHtcbiAgICAvLyB0aGUgY2FsbGVyIGV4cGVjdCB0aGlzIHRvIGhhcHBlbiBiZWZvcmUgaWZcbiAgICAvLyBpdCBpcyBhc3luY1xuICAgIGNiKGVyKTtcbiAgICBzdHJlYW0uX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkID0gdHJ1ZTtcbiAgICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcik7XG4gICAgLy8gdGhpcyBjYW4gZW1pdCBmaW5pc2gsIGJ1dCBmaW5pc2ggbXVzdFxuICAgIC8vIGFsd2F5cyBmb2xsb3cgZXJyb3JcbiAgICBmaW5pc2hNYXliZShzdHJlYW0sIHN0YXRlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBvbndyaXRlU3RhdGVVcGRhdGUoc3RhdGUpIHtcbiAgc3RhdGUud3JpdGluZyA9IGZhbHNlO1xuICBzdGF0ZS53cml0ZWNiID0gbnVsbDtcbiAgc3RhdGUubGVuZ3RoIC09IHN0YXRlLndyaXRlbGVuO1xuICBzdGF0ZS53cml0ZWxlbiA9IDA7XG59XG5cbmZ1bmN0aW9uIG9ud3JpdGUoc3RyZWFtLCBlcikge1xuICB2YXIgc3RhdGUgPSBzdHJlYW0uX3dyaXRhYmxlU3RhdGU7XG4gIHZhciBzeW5jID0gc3RhdGUuc3luYztcbiAgdmFyIGNiID0gc3RhdGUud3JpdGVjYjtcblxuICBvbndyaXRlU3RhdGVVcGRhdGUoc3RhdGUpO1xuXG4gIGlmIChlcikgb253cml0ZUVycm9yKHN0cmVhbSwgc3RhdGUsIHN5bmMsIGVyLCBjYik7ZWxzZSB7XG4gICAgLy8gQ2hlY2sgaWYgd2UncmUgYWN0dWFsbHkgcmVhZHkgdG8gZmluaXNoLCBidXQgZG9uJ3QgZW1pdCB5ZXRcbiAgICB2YXIgZmluaXNoZWQgPSBuZWVkRmluaXNoKHN0YXRlKTtcblxuICAgIGlmICghZmluaXNoZWQgJiYgIXN0YXRlLmNvcmtlZCAmJiAhc3RhdGUuYnVmZmVyUHJvY2Vzc2luZyAmJiBzdGF0ZS5idWZmZXJlZFJlcXVlc3QpIHtcbiAgICAgIGNsZWFyQnVmZmVyKHN0cmVhbSwgc3RhdGUpO1xuICAgIH1cblxuICAgIGlmIChzeW5jKSB7XG4gICAgICAvKjxyZXBsYWNlbWVudD4qL1xuICAgICAgYXN5bmNXcml0ZShhZnRlcldyaXRlLCBzdHJlYW0sIHN0YXRlLCBmaW5pc2hlZCwgY2IpO1xuICAgICAgLyo8L3JlcGxhY2VtZW50PiovXG4gICAgfSBlbHNlIHtcbiAgICAgIGFmdGVyV3JpdGUoc3RyZWFtLCBzdGF0ZSwgZmluaXNoZWQsIGNiKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYWZ0ZXJXcml0ZShzdHJlYW0sIHN0YXRlLCBmaW5pc2hlZCwgY2IpIHtcbiAgaWYgKCFmaW5pc2hlZCkgb253cml0ZURyYWluKHN0cmVhbSwgc3RhdGUpO1xuICBzdGF0ZS5wZW5kaW5nY2ItLTtcbiAgY2IoKTtcbiAgZmluaXNoTWF5YmUoc3RyZWFtLCBzdGF0ZSk7XG59XG5cbi8vIE11c3QgZm9yY2UgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIG9uIG5leHRUaWNrLCBzbyB0aGF0IHdlIGRvbid0XG4vLyBlbWl0ICdkcmFpbicgYmVmb3JlIHRoZSB3cml0ZSgpIGNvbnN1bWVyIGdldHMgdGhlICdmYWxzZScgcmV0dXJuXG4vLyB2YWx1ZSwgYW5kIGhhcyBhIGNoYW5jZSB0byBhdHRhY2ggYSAnZHJhaW4nIGxpc3RlbmVyLlxuZnVuY3Rpb24gb253cml0ZURyYWluKHN0cmVhbSwgc3RhdGUpIHtcbiAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCAmJiBzdGF0ZS5uZWVkRHJhaW4pIHtcbiAgICBzdGF0ZS5uZWVkRHJhaW4gPSBmYWxzZTtcbiAgICBzdHJlYW0uZW1pdCgnZHJhaW4nKTtcbiAgfVxufVxuXG4vLyBpZiB0aGVyZSdzIHNvbWV0aGluZyBpbiB0aGUgYnVmZmVyIHdhaXRpbmcsIHRoZW4gcHJvY2VzcyBpdFxuZnVuY3Rpb24gY2xlYXJCdWZmZXIoc3RyZWFtLCBzdGF0ZSkge1xuICBzdGF0ZS5idWZmZXJQcm9jZXNzaW5nID0gdHJ1ZTtcbiAgdmFyIGVudHJ5ID0gc3RhdGUuYnVmZmVyZWRSZXF1ZXN0O1xuXG4gIGlmIChzdHJlYW0uX3dyaXRldiAmJiBlbnRyeSAmJiBlbnRyeS5uZXh0KSB7XG4gICAgLy8gRmFzdCBjYXNlLCB3cml0ZSBldmVyeXRoaW5nIHVzaW5nIF93cml0ZXYoKVxuICAgIHZhciBsID0gc3RhdGUuYnVmZmVyZWRSZXF1ZXN0Q291bnQ7XG4gICAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheShsKTtcbiAgICB2YXIgaG9sZGVyID0gc3RhdGUuY29ya2VkUmVxdWVzdHNGcmVlO1xuICAgIGhvbGRlci5lbnRyeSA9IGVudHJ5O1xuXG4gICAgdmFyIGNvdW50ID0gMDtcbiAgICB2YXIgYWxsQnVmZmVycyA9IHRydWU7XG4gICAgd2hpbGUgKGVudHJ5KSB7XG4gICAgICBidWZmZXJbY291bnRdID0gZW50cnk7XG4gICAgICBpZiAoIWVudHJ5LmlzQnVmKSBhbGxCdWZmZXJzID0gZmFsc2U7XG4gICAgICBlbnRyeSA9IGVudHJ5Lm5leHQ7XG4gICAgICBjb3VudCArPSAxO1xuICAgIH1cbiAgICBidWZmZXIuYWxsQnVmZmVycyA9IGFsbEJ1ZmZlcnM7XG5cbiAgICBkb1dyaXRlKHN0cmVhbSwgc3RhdGUsIHRydWUsIHN0YXRlLmxlbmd0aCwgYnVmZmVyLCAnJywgaG9sZGVyLmZpbmlzaCk7XG5cbiAgICAvLyBkb1dyaXRlIGlzIGFsbW9zdCBhbHdheXMgYXN5bmMsIGRlZmVyIHRoZXNlIHRvIHNhdmUgYSBiaXQgb2YgdGltZVxuICAgIC8vIGFzIHRoZSBob3QgcGF0aCBlbmRzIHdpdGggZG9Xcml0ZVxuICAgIHN0YXRlLnBlbmRpbmdjYisrO1xuICAgIHN0YXRlLmxhc3RCdWZmZXJlZFJlcXVlc3QgPSBudWxsO1xuICAgIGlmIChob2xkZXIubmV4dCkge1xuICAgICAgc3RhdGUuY29ya2VkUmVxdWVzdHNGcmVlID0gaG9sZGVyLm5leHQ7XG4gICAgICBob2xkZXIubmV4dCA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLmNvcmtlZFJlcXVlc3RzRnJlZSA9IG5ldyBDb3JrZWRSZXF1ZXN0KHN0YXRlKTtcbiAgICB9XG4gICAgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0Q291bnQgPSAwO1xuICB9IGVsc2Uge1xuICAgIC8vIFNsb3cgY2FzZSwgd3JpdGUgY2h1bmtzIG9uZS1ieS1vbmVcbiAgICB3aGlsZSAoZW50cnkpIHtcbiAgICAgIHZhciBjaHVuayA9IGVudHJ5LmNodW5rO1xuICAgICAgdmFyIGVuY29kaW5nID0gZW50cnkuZW5jb2Rpbmc7XG4gICAgICB2YXIgY2IgPSBlbnRyeS5jYWxsYmFjaztcbiAgICAgIHZhciBsZW4gPSBzdGF0ZS5vYmplY3RNb2RlID8gMSA6IGNodW5rLmxlbmd0aDtcblxuICAgICAgZG9Xcml0ZShzdHJlYW0sIHN0YXRlLCBmYWxzZSwgbGVuLCBjaHVuaywgZW5jb2RpbmcsIGNiKTtcbiAgICAgIGVudHJ5ID0gZW50cnkubmV4dDtcbiAgICAgIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdENvdW50LS07XG4gICAgICAvLyBpZiB3ZSBkaWRuJ3QgY2FsbCB0aGUgb253cml0ZSBpbW1lZGlhdGVseSwgdGhlblxuICAgICAgLy8gaXQgbWVhbnMgdGhhdCB3ZSBuZWVkIHRvIHdhaXQgdW50aWwgaXQgZG9lcy5cbiAgICAgIC8vIGFsc28sIHRoYXQgbWVhbnMgdGhhdCB0aGUgY2h1bmsgYW5kIGNiIGFyZSBjdXJyZW50bHlcbiAgICAgIC8vIGJlaW5nIHByb2Nlc3NlZCwgc28gbW92ZSB0aGUgYnVmZmVyIGNvdW50ZXIgcGFzdCB0aGVtLlxuICAgICAgaWYgKHN0YXRlLndyaXRpbmcpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGVudHJ5ID09PSBudWxsKSBzdGF0ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0ID0gbnVsbDtcbiAgfVxuXG4gIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdCA9IGVudHJ5O1xuICBzdGF0ZS5idWZmZXJQcm9jZXNzaW5nID0gZmFsc2U7XG59XG5cbldyaXRhYmxlLnByb3RvdHlwZS5fd3JpdGUgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICBjYihuZXcgRXJyb3IoJ193cml0ZSgpIGlzIG5vdCBpbXBsZW1lbnRlZCcpKTtcbn07XG5cbldyaXRhYmxlLnByb3RvdHlwZS5fd3JpdGV2ID0gbnVsbDtcblxuV3JpdGFibGUucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3dyaXRhYmxlU3RhdGU7XG5cbiAgaWYgKHR5cGVvZiBjaHVuayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNiID0gY2h1bms7XG4gICAgY2h1bmsgPSBudWxsO1xuICAgIGVuY29kaW5nID0gbnVsbDtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYiA9IGVuY29kaW5nO1xuICAgIGVuY29kaW5nID0gbnVsbDtcbiAgfVxuXG4gIGlmIChjaHVuayAhPT0gbnVsbCAmJiBjaHVuayAhPT0gdW5kZWZpbmVkKSB0aGlzLndyaXRlKGNodW5rLCBlbmNvZGluZyk7XG5cbiAgLy8gLmVuZCgpIGZ1bGx5IHVuY29ya3NcbiAgaWYgKHN0YXRlLmNvcmtlZCkge1xuICAgIHN0YXRlLmNvcmtlZCA9IDE7XG4gICAgdGhpcy51bmNvcmsoKTtcbiAgfVxuXG4gIC8vIGlnbm9yZSB1bm5lY2Vzc2FyeSBlbmQoKSBjYWxscy5cbiAgaWYgKCFzdGF0ZS5lbmRpbmcpIGVuZFdyaXRhYmxlKHRoaXMsIHN0YXRlLCBjYik7XG59O1xuXG5mdW5jdGlvbiBuZWVkRmluaXNoKHN0YXRlKSB7XG4gIHJldHVybiBzdGF0ZS5lbmRpbmcgJiYgc3RhdGUubGVuZ3RoID09PSAwICYmIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdCA9PT0gbnVsbCAmJiAhc3RhdGUuZmluaXNoZWQgJiYgIXN0YXRlLndyaXRpbmc7XG59XG5mdW5jdGlvbiBjYWxsRmluYWwoc3RyZWFtLCBzdGF0ZSkge1xuICBzdHJlYW0uX2ZpbmFsKGZ1bmN0aW9uIChlcnIpIHtcbiAgICBzdGF0ZS5wZW5kaW5nY2ItLTtcbiAgICBpZiAoZXJyKSB7XG4gICAgICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgIH1cbiAgICBzdGF0ZS5wcmVmaW5pc2hlZCA9IHRydWU7XG4gICAgc3RyZWFtLmVtaXQoJ3ByZWZpbmlzaCcpO1xuICAgIGZpbmlzaE1heWJlKHN0cmVhbSwgc3RhdGUpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIHByZWZpbmlzaChzdHJlYW0sIHN0YXRlKSB7XG4gIGlmICghc3RhdGUucHJlZmluaXNoZWQgJiYgIXN0YXRlLmZpbmFsQ2FsbGVkKSB7XG4gICAgaWYgKHR5cGVvZiBzdHJlYW0uX2ZpbmFsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBzdGF0ZS5wZW5kaW5nY2IrKztcbiAgICAgIHN0YXRlLmZpbmFsQ2FsbGVkID0gdHJ1ZTtcbiAgICAgIHBuYS5uZXh0VGljayhjYWxsRmluYWwsIHN0cmVhbSwgc3RhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS5wcmVmaW5pc2hlZCA9IHRydWU7XG4gICAgICBzdHJlYW0uZW1pdCgncHJlZmluaXNoJyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmlzaE1heWJlKHN0cmVhbSwgc3RhdGUpIHtcbiAgdmFyIG5lZWQgPSBuZWVkRmluaXNoKHN0YXRlKTtcbiAgaWYgKG5lZWQpIHtcbiAgICBwcmVmaW5pc2goc3RyZWFtLCBzdGF0ZSk7XG4gICAgaWYgKHN0YXRlLnBlbmRpbmdjYiA9PT0gMCkge1xuICAgICAgc3RhdGUuZmluaXNoZWQgPSB0cnVlO1xuICAgICAgc3RyZWFtLmVtaXQoJ2ZpbmlzaCcpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbmVlZDtcbn1cblxuZnVuY3Rpb24gZW5kV3JpdGFibGUoc3RyZWFtLCBzdGF0ZSwgY2IpIHtcbiAgc3RhdGUuZW5kaW5nID0gdHJ1ZTtcbiAgZmluaXNoTWF5YmUoc3RyZWFtLCBzdGF0ZSk7XG4gIGlmIChjYikge1xuICAgIGlmIChzdGF0ZS5maW5pc2hlZCkgcG5hLm5leHRUaWNrKGNiKTtlbHNlIHN0cmVhbS5vbmNlKCdmaW5pc2gnLCBjYik7XG4gIH1cbiAgc3RhdGUuZW5kZWQgPSB0cnVlO1xuICBzdHJlYW0ud3JpdGFibGUgPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gb25Db3JrZWRGaW5pc2goY29ya1JlcSwgc3RhdGUsIGVycikge1xuICB2YXIgZW50cnkgPSBjb3JrUmVxLmVudHJ5O1xuICBjb3JrUmVxLmVudHJ5ID0gbnVsbDtcbiAgd2hpbGUgKGVudHJ5KSB7XG4gICAgdmFyIGNiID0gZW50cnkuY2FsbGJhY2s7XG4gICAgc3RhdGUucGVuZGluZ2NiLS07XG4gICAgY2IoZXJyKTtcbiAgICBlbnRyeSA9IGVudHJ5Lm5leHQ7XG4gIH1cblxuICAvLyByZXVzZSB0aGUgZnJlZSBjb3JrUmVxLlxuICBzdGF0ZS5jb3JrZWRSZXF1ZXN0c0ZyZWUubmV4dCA9IGNvcmtSZXE7XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShXcml0YWJsZS5wcm90b3R5cGUsICdkZXN0cm95ZWQnLCB7XG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLl93cml0YWJsZVN0YXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIC8vIHdlIGlnbm9yZSB0aGUgdmFsdWUgaWYgdGhlIHN0cmVhbVxuICAgIC8vIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCB5ZXRcbiAgICBpZiAoIXRoaXMuX3dyaXRhYmxlU3RhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB0aGUgdXNlciBpcyBleHBsaWNpdGx5XG4gICAgLy8gbWFuYWdpbmcgZGVzdHJveWVkXG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQgPSB2YWx1ZTtcbiAgfVxufSk7XG5cbldyaXRhYmxlLnByb3RvdHlwZS5kZXN0cm95ID0gZGVzdHJveUltcGwuZGVzdHJveTtcbldyaXRhYmxlLnByb3RvdHlwZS5fdW5kZXN0cm95ID0gZGVzdHJveUltcGwudW5kZXN0cm95O1xuV3JpdGFibGUucHJvdG90eXBlLl9kZXN0cm95ID0gZnVuY3Rpb24gKGVyciwgY2IpIHtcbiAgdGhpcy5lbmQoKTtcbiAgY2IoZXJyKTtcbn07IiwKICAgICIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuLy8gYSBkdXBsZXggc3RyZWFtIGlzIGp1c3QgYSBzdHJlYW0gdGhhdCBpcyBib3RoIHJlYWRhYmxlIGFuZCB3cml0YWJsZS5cbi8vIFNpbmNlIEpTIGRvZXNuJ3QgaGF2ZSBtdWx0aXBsZSBwcm90b3R5cGFsIGluaGVyaXRhbmNlLCB0aGlzIGNsYXNzXG4vLyBwcm90b3R5cGFsbHkgaW5oZXJpdHMgZnJvbSBSZWFkYWJsZSwgYW5kIHRoZW4gcGFyYXNpdGljYWxseSBmcm9tXG4vLyBXcml0YWJsZS5cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xuXG52YXIgcG5hID0gcmVxdWlyZSgncHJvY2Vzcy1uZXh0aWNrLWFyZ3MnKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIG9iamVjdEtleXMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gIHZhciBrZXlzID0gW107XG4gIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICBrZXlzLnB1c2goa2V5KTtcbiAgfXJldHVybiBrZXlzO1xufTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG5tb2R1bGUuZXhwb3J0cyA9IER1cGxleDtcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciB1dGlsID0gT2JqZWN0LmNyZWF0ZShyZXF1aXJlKCdjb3JlLXV0aWwtaXMnKSk7XG51dGlsLmluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG52YXIgUmVhZGFibGUgPSByZXF1aXJlKCcuL19zdHJlYW1fcmVhZGFibGUnKTtcbnZhciBXcml0YWJsZSA9IHJlcXVpcmUoJy4vX3N0cmVhbV93cml0YWJsZScpO1xuXG51dGlsLmluaGVyaXRzKER1cGxleCwgUmVhZGFibGUpO1xuXG57XG4gIC8vIGF2b2lkIHNjb3BlIGNyZWVwLCB0aGUga2V5cyBhcnJheSBjYW4gdGhlbiBiZSBjb2xsZWN0ZWRcbiAgdmFyIGtleXMgPSBvYmplY3RLZXlzKFdyaXRhYmxlLnByb3RvdHlwZSk7XG4gIGZvciAodmFyIHYgPSAwOyB2IDwga2V5cy5sZW5ndGg7IHYrKykge1xuICAgIHZhciBtZXRob2QgPSBrZXlzW3ZdO1xuICAgIGlmICghRHVwbGV4LnByb3RvdHlwZVttZXRob2RdKSBEdXBsZXgucHJvdG90eXBlW21ldGhvZF0gPSBXcml0YWJsZS5wcm90b3R5cGVbbWV0aG9kXTtcbiAgfVxufVxuXG5mdW5jdGlvbiBEdXBsZXgob3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRHVwbGV4KSkgcmV0dXJuIG5ldyBEdXBsZXgob3B0aW9ucyk7XG5cbiAgUmVhZGFibGUuY2FsbCh0aGlzLCBvcHRpb25zKTtcbiAgV3JpdGFibGUuY2FsbCh0aGlzLCBvcHRpb25zKTtcblxuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnJlYWRhYmxlID09PSBmYWxzZSkgdGhpcy5yZWFkYWJsZSA9IGZhbHNlO1xuXG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMud3JpdGFibGUgPT09IGZhbHNlKSB0aGlzLndyaXRhYmxlID0gZmFsc2U7XG5cbiAgdGhpcy5hbGxvd0hhbGZPcGVuID0gdHJ1ZTtcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5hbGxvd0hhbGZPcGVuID09PSBmYWxzZSkgdGhpcy5hbGxvd0hhbGZPcGVuID0gZmFsc2U7XG5cbiAgdGhpcy5vbmNlKCdlbmQnLCBvbmVuZCk7XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShEdXBsZXgucHJvdG90eXBlLCAnd3JpdGFibGVIaWdoV2F0ZXJNYXJrJywge1xuICAvLyBtYWtpbmcgaXQgZXhwbGljaXQgdGhpcyBwcm9wZXJ0eSBpcyBub3QgZW51bWVyYWJsZVxuICAvLyBiZWNhdXNlIG90aGVyd2lzZSBzb21lIHByb3RvdHlwZSBtYW5pcHVsYXRpb24gaW5cbiAgLy8gdXNlcmxhbmQgd2lsbCBmYWlsXG4gIGVudW1lcmFibGU6IGZhbHNlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrO1xuICB9XG59KTtcblxuLy8gdGhlIG5vLWhhbGYtb3BlbiBlbmZvcmNlclxuZnVuY3Rpb24gb25lbmQoKSB7XG4gIC8vIGlmIHdlIGFsbG93IGhhbGYtb3BlbiBzdGF0ZSwgb3IgaWYgdGhlIHdyaXRhYmxlIHNpZGUgZW5kZWQsXG4gIC8vIHRoZW4gd2UncmUgb2suXG4gIGlmICh0aGlzLmFsbG93SGFsZk9wZW4gfHwgdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZCkgcmV0dXJuO1xuXG4gIC8vIG5vIG1vcmUgZGF0YSBjYW4gYmUgd3JpdHRlbi5cbiAgLy8gQnV0IGFsbG93IG1vcmUgd3JpdGVzIHRvIGhhcHBlbiBpbiB0aGlzIHRpY2suXG4gIHBuYS5uZXh0VGljayhvbkVuZE5ULCB0aGlzKTtcbn1cblxuZnVuY3Rpb24gb25FbmROVChzZWxmKSB7XG4gIHNlbGYuZW5kKCk7XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShEdXBsZXgucHJvdG90eXBlLCAnZGVzdHJveWVkJywge1xuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZSA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuX3dyaXRhYmxlU3RhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQgJiYgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgLy8gd2UgaWdub3JlIHRoZSB2YWx1ZSBpZiB0aGUgc3RyZWFtXG4gICAgLy8gaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkIHlldFxuICAgIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlID09PSB1bmRlZmluZWQgfHwgdGhpcy5fd3JpdGFibGVTdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgdGhlIHVzZXIgaXMgZXhwbGljaXRseVxuICAgIC8vIG1hbmFnaW5nIGRlc3Ryb3llZFxuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkID0gdmFsdWU7XG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQgPSB2YWx1ZTtcbiAgfVxufSk7XG5cbkR1cGxleC5wcm90b3R5cGUuX2Rlc3Ryb3kgPSBmdW5jdGlvbiAoZXJyLCBjYikge1xuICB0aGlzLnB1c2gobnVsbCk7XG4gIHRoaXMuZW5kKCk7XG5cbiAgcG5hLm5leHRUaWNrKGNiLCBlcnIpO1xufTsiLAogICAgIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4ndXNlIHN0cmljdCc7XG5cbi8qPHJlcGxhY2VtZW50PiovXG5cbnZhciBCdWZmZXIgPSByZXF1aXJlKCdzYWZlLWJ1ZmZlcicpLkJ1ZmZlcjtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG52YXIgaXNFbmNvZGluZyA9IEJ1ZmZlci5pc0VuY29kaW5nIHx8IGZ1bmN0aW9uIChlbmNvZGluZykge1xuICBlbmNvZGluZyA9ICcnICsgZW5jb2Rpbmc7XG4gIHN3aXRjaCAoZW5jb2RpbmcgJiYgZW5jb2RpbmcudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgJ2hleCc6Y2FzZSAndXRmOCc6Y2FzZSAndXRmLTgnOmNhc2UgJ2FzY2lpJzpjYXNlICdiaW5hcnknOmNhc2UgJ2Jhc2U2NCc6Y2FzZSAndWNzMic6Y2FzZSAndWNzLTInOmNhc2UgJ3V0ZjE2bGUnOmNhc2UgJ3V0Zi0xNmxlJzpjYXNlICdyYXcnOlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuZnVuY3Rpb24gX25vcm1hbGl6ZUVuY29kaW5nKGVuYykge1xuICBpZiAoIWVuYykgcmV0dXJuICd1dGY4JztcbiAgdmFyIHJldHJpZWQ7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgc3dpdGNoIChlbmMpIHtcbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gJ3V0ZjgnO1xuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuICd1dGYxNmxlJztcbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gJ2xhdGluMSc7XG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGVuYztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChyZXRyaWVkKSByZXR1cm47IC8vIHVuZGVmaW5lZFxuICAgICAgICBlbmMgPSAoJycgKyBlbmMpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHJldHJpZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxufTtcblxuLy8gRG8gbm90IGNhY2hlIGBCdWZmZXIuaXNFbmNvZGluZ2Agd2hlbiBjaGVja2luZyBlbmNvZGluZyBuYW1lcyBhcyBzb21lXG4vLyBtb2R1bGVzIG1vbmtleS1wYXRjaCBpdCB0byBzdXBwb3J0IGFkZGl0aW9uYWwgZW5jb2RpbmdzXG5mdW5jdGlvbiBub3JtYWxpemVFbmNvZGluZyhlbmMpIHtcbiAgdmFyIG5lbmMgPSBfbm9ybWFsaXplRW5jb2RpbmcoZW5jKTtcbiAgaWYgKHR5cGVvZiBuZW5jICE9PSAnc3RyaW5nJyAmJiAoQnVmZmVyLmlzRW5jb2RpbmcgPT09IGlzRW5jb2RpbmcgfHwgIWlzRW5jb2RpbmcoZW5jKSkpIHRocm93IG5ldyBFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuYyk7XG4gIHJldHVybiBuZW5jIHx8IGVuYztcbn1cblxuLy8gU3RyaW5nRGVjb2RlciBwcm92aWRlcyBhbiBpbnRlcmZhY2UgZm9yIGVmZmljaWVudGx5IHNwbGl0dGluZyBhIHNlcmllcyBvZlxuLy8gYnVmZmVycyBpbnRvIGEgc2VyaWVzIG9mIEpTIHN0cmluZ3Mgd2l0aG91dCBicmVha2luZyBhcGFydCBtdWx0aS1ieXRlXG4vLyBjaGFyYWN0ZXJzLlxuZXhwb3J0cy5TdHJpbmdEZWNvZGVyID0gU3RyaW5nRGVjb2RlcjtcbmZ1bmN0aW9uIFN0cmluZ0RlY29kZXIoZW5jb2RpbmcpIHtcbiAgdGhpcy5lbmNvZGluZyA9IG5vcm1hbGl6ZUVuY29kaW5nKGVuY29kaW5nKTtcbiAgdmFyIG5iO1xuICBzd2l0Y2ggKHRoaXMuZW5jb2RpbmcpIHtcbiAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIHRoaXMudGV4dCA9IHV0ZjE2VGV4dDtcbiAgICAgIHRoaXMuZW5kID0gdXRmMTZFbmQ7XG4gICAgICBuYiA9IDQ7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd1dGY4JzpcbiAgICAgIHRoaXMuZmlsbExhc3QgPSB1dGY4RmlsbExhc3Q7XG4gICAgICBuYiA9IDQ7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgdGhpcy50ZXh0ID0gYmFzZTY0VGV4dDtcbiAgICAgIHRoaXMuZW5kID0gYmFzZTY0RW5kO1xuICAgICAgbmIgPSAzO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRoaXMud3JpdGUgPSBzaW1wbGVXcml0ZTtcbiAgICAgIHRoaXMuZW5kID0gc2ltcGxlRW5kO1xuICAgICAgcmV0dXJuO1xuICB9XG4gIHRoaXMubGFzdE5lZWQgPSAwO1xuICB0aGlzLmxhc3RUb3RhbCA9IDA7XG4gIHRoaXMubGFzdENoYXIgPSBCdWZmZXIuYWxsb2NVbnNhZmUobmIpO1xufVxuXG5TdHJpbmdEZWNvZGVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChidWYpIHtcbiAgaWYgKGJ1Zi5sZW5ndGggPT09IDApIHJldHVybiAnJztcbiAgdmFyIHI7XG4gIHZhciBpO1xuICBpZiAodGhpcy5sYXN0TmVlZCkge1xuICAgIHIgPSB0aGlzLmZpbGxMYXN0KGJ1Zik7XG4gICAgaWYgKHIgPT09IHVuZGVmaW5lZCkgcmV0dXJuICcnO1xuICAgIGkgPSB0aGlzLmxhc3ROZWVkO1xuICAgIHRoaXMubGFzdE5lZWQgPSAwO1xuICB9IGVsc2Uge1xuICAgIGkgPSAwO1xuICB9XG4gIGlmIChpIDwgYnVmLmxlbmd0aCkgcmV0dXJuIHIgPyByICsgdGhpcy50ZXh0KGJ1ZiwgaSkgOiB0aGlzLnRleHQoYnVmLCBpKTtcbiAgcmV0dXJuIHIgfHwgJyc7XG59O1xuXG5TdHJpbmdEZWNvZGVyLnByb3RvdHlwZS5lbmQgPSB1dGY4RW5kO1xuXG4vLyBSZXR1cm5zIG9ubHkgY29tcGxldGUgY2hhcmFjdGVycyBpbiBhIEJ1ZmZlclxuU3RyaW5nRGVjb2Rlci5wcm90b3R5cGUudGV4dCA9IHV0ZjhUZXh0O1xuXG4vLyBBdHRlbXB0cyB0byBjb21wbGV0ZSBhIHBhcnRpYWwgbm9uLVVURi04IGNoYXJhY3RlciB1c2luZyBieXRlcyBmcm9tIGEgQnVmZmVyXG5TdHJpbmdEZWNvZGVyLnByb3RvdHlwZS5maWxsTGFzdCA9IGZ1bmN0aW9uIChidWYpIHtcbiAgaWYgKHRoaXMubGFzdE5lZWQgPD0gYnVmLmxlbmd0aCkge1xuICAgIGJ1Zi5jb3B5KHRoaXMubGFzdENoYXIsIHRoaXMubGFzdFRvdGFsIC0gdGhpcy5sYXN0TmVlZCwgMCwgdGhpcy5sYXN0TmVlZCk7XG4gICAgcmV0dXJuIHRoaXMubGFzdENoYXIudG9TdHJpbmcodGhpcy5lbmNvZGluZywgMCwgdGhpcy5sYXN0VG90YWwpO1xuICB9XG4gIGJ1Zi5jb3B5KHRoaXMubGFzdENoYXIsIHRoaXMubGFzdFRvdGFsIC0gdGhpcy5sYXN0TmVlZCwgMCwgYnVmLmxlbmd0aCk7XG4gIHRoaXMubGFzdE5lZWQgLT0gYnVmLmxlbmd0aDtcbn07XG5cbi8vIENoZWNrcyB0aGUgdHlwZSBvZiBhIFVURi04IGJ5dGUsIHdoZXRoZXIgaXQncyBBU0NJSSwgYSBsZWFkaW5nIGJ5dGUsIG9yIGFcbi8vIGNvbnRpbnVhdGlvbiBieXRlLiBJZiBhbiBpbnZhbGlkIGJ5dGUgaXMgZGV0ZWN0ZWQsIC0yIGlzIHJldHVybmVkLlxuZnVuY3Rpb24gdXRmOENoZWNrQnl0ZShieXRlKSB7XG4gIGlmIChieXRlIDw9IDB4N0YpIHJldHVybiAwO2Vsc2UgaWYgKGJ5dGUgPj4gNSA9PT0gMHgwNikgcmV0dXJuIDI7ZWxzZSBpZiAoYnl0ZSA+PiA0ID09PSAweDBFKSByZXR1cm4gMztlbHNlIGlmIChieXRlID4+IDMgPT09IDB4MUUpIHJldHVybiA0O1xuICByZXR1cm4gYnl0ZSA+PiA2ID09PSAweDAyID8gLTEgOiAtMjtcbn1cblxuLy8gQ2hlY2tzIGF0IG1vc3QgMyBieXRlcyBhdCB0aGUgZW5kIG9mIGEgQnVmZmVyIGluIG9yZGVyIHRvIGRldGVjdCBhblxuLy8gaW5jb21wbGV0ZSBtdWx0aS1ieXRlIFVURi04IGNoYXJhY3Rlci4gVGhlIHRvdGFsIG51bWJlciBvZiBieXRlcyAoMiwgMywgb3IgNClcbi8vIG5lZWRlZCB0byBjb21wbGV0ZSB0aGUgVVRGLTggY2hhcmFjdGVyIChpZiBhcHBsaWNhYmxlKSBhcmUgcmV0dXJuZWQuXG5mdW5jdGlvbiB1dGY4Q2hlY2tJbmNvbXBsZXRlKHNlbGYsIGJ1ZiwgaSkge1xuICB2YXIgaiA9IGJ1Zi5sZW5ndGggLSAxO1xuICBpZiAoaiA8IGkpIHJldHVybiAwO1xuICB2YXIgbmIgPSB1dGY4Q2hlY2tCeXRlKGJ1ZltqXSk7XG4gIGlmIChuYiA+PSAwKSB7XG4gICAgaWYgKG5iID4gMCkgc2VsZi5sYXN0TmVlZCA9IG5iIC0gMTtcbiAgICByZXR1cm4gbmI7XG4gIH1cbiAgaWYgKC0taiA8IGkgfHwgbmIgPT09IC0yKSByZXR1cm4gMDtcbiAgbmIgPSB1dGY4Q2hlY2tCeXRlKGJ1ZltqXSk7XG4gIGlmIChuYiA+PSAwKSB7XG4gICAgaWYgKG5iID4gMCkgc2VsZi5sYXN0TmVlZCA9IG5iIC0gMjtcbiAgICByZXR1cm4gbmI7XG4gIH1cbiAgaWYgKC0taiA8IGkgfHwgbmIgPT09IC0yKSByZXR1cm4gMDtcbiAgbmIgPSB1dGY4Q2hlY2tCeXRlKGJ1ZltqXSk7XG4gIGlmIChuYiA+PSAwKSB7XG4gICAgaWYgKG5iID4gMCkge1xuICAgICAgaWYgKG5iID09PSAyKSBuYiA9IDA7ZWxzZSBzZWxmLmxhc3ROZWVkID0gbmIgLSAzO1xuICAgIH1cbiAgICByZXR1cm4gbmI7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vIFZhbGlkYXRlcyBhcyBtYW55IGNvbnRpbnVhdGlvbiBieXRlcyBmb3IgYSBtdWx0aS1ieXRlIFVURi04IGNoYXJhY3RlciBhc1xuLy8gbmVlZGVkIG9yIGFyZSBhdmFpbGFibGUuIElmIHdlIHNlZSBhIG5vbi1jb250aW51YXRpb24gYnl0ZSB3aGVyZSB3ZSBleHBlY3Rcbi8vIG9uZSwgd2UgXCJyZXBsYWNlXCIgdGhlIHZhbGlkYXRlZCBjb250aW51YXRpb24gYnl0ZXMgd2UndmUgc2VlbiBzbyBmYXIgd2l0aFxuLy8gYSBzaW5nbGUgVVRGLTggcmVwbGFjZW1lbnQgY2hhcmFjdGVyICgnXFx1ZmZmZCcpLCB0byBtYXRjaCB2OCdzIFVURi04IGRlY29kaW5nXG4vLyBiZWhhdmlvci4gVGhlIGNvbnRpbnVhdGlvbiBieXRlIGNoZWNrIGlzIGluY2x1ZGVkIHRocmVlIHRpbWVzIGluIHRoZSBjYXNlXG4vLyB3aGVyZSBhbGwgb2YgdGhlIGNvbnRpbnVhdGlvbiBieXRlcyBmb3IgYSBjaGFyYWN0ZXIgZXhpc3QgaW4gdGhlIHNhbWUgYnVmZmVyLlxuLy8gSXQgaXMgYWxzbyBkb25lIHRoaXMgd2F5IGFzIGEgc2xpZ2h0IHBlcmZvcm1hbmNlIGluY3JlYXNlIGluc3RlYWQgb2YgdXNpbmcgYVxuLy8gbG9vcC5cbmZ1bmN0aW9uIHV0ZjhDaGVja0V4dHJhQnl0ZXMoc2VsZiwgYnVmLCBwKSB7XG4gIGlmICgoYnVmWzBdICYgMHhDMCkgIT09IDB4ODApIHtcbiAgICBzZWxmLmxhc3ROZWVkID0gMDtcbiAgICByZXR1cm4gJ1xcdWZmZmQnO1xuICB9XG4gIGlmIChzZWxmLmxhc3ROZWVkID4gMSAmJiBidWYubGVuZ3RoID4gMSkge1xuICAgIGlmICgoYnVmWzFdICYgMHhDMCkgIT09IDB4ODApIHtcbiAgICAgIHNlbGYubGFzdE5lZWQgPSAxO1xuICAgICAgcmV0dXJuICdcXHVmZmZkJztcbiAgICB9XG4gICAgaWYgKHNlbGYubGFzdE5lZWQgPiAyICYmIGJ1Zi5sZW5ndGggPiAyKSB7XG4gICAgICBpZiAoKGJ1ZlsyXSAmIDB4QzApICE9PSAweDgwKSB7XG4gICAgICAgIHNlbGYubGFzdE5lZWQgPSAyO1xuICAgICAgICByZXR1cm4gJ1xcdWZmZmQnO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLyBBdHRlbXB0cyB0byBjb21wbGV0ZSBhIG11bHRpLWJ5dGUgVVRGLTggY2hhcmFjdGVyIHVzaW5nIGJ5dGVzIGZyb20gYSBCdWZmZXIuXG5mdW5jdGlvbiB1dGY4RmlsbExhc3QoYnVmKSB7XG4gIHZhciBwID0gdGhpcy5sYXN0VG90YWwgLSB0aGlzLmxhc3ROZWVkO1xuICB2YXIgciA9IHV0ZjhDaGVja0V4dHJhQnl0ZXModGhpcywgYnVmLCBwKTtcbiAgaWYgKHIgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHI7XG4gIGlmICh0aGlzLmxhc3ROZWVkIDw9IGJ1Zi5sZW5ndGgpIHtcbiAgICBidWYuY29weSh0aGlzLmxhc3RDaGFyLCBwLCAwLCB0aGlzLmxhc3ROZWVkKTtcbiAgICByZXR1cm4gdGhpcy5sYXN0Q2hhci50b1N0cmluZyh0aGlzLmVuY29kaW5nLCAwLCB0aGlzLmxhc3RUb3RhbCk7XG4gIH1cbiAgYnVmLmNvcHkodGhpcy5sYXN0Q2hhciwgcCwgMCwgYnVmLmxlbmd0aCk7XG4gIHRoaXMubGFzdE5lZWQgLT0gYnVmLmxlbmd0aDtcbn1cblxuLy8gUmV0dXJucyBhbGwgY29tcGxldGUgVVRGLTggY2hhcmFjdGVycyBpbiBhIEJ1ZmZlci4gSWYgdGhlIEJ1ZmZlciBlbmRlZCBvbiBhXG4vLyBwYXJ0aWFsIGNoYXJhY3RlciwgdGhlIGNoYXJhY3RlcidzIGJ5dGVzIGFyZSBidWZmZXJlZCB1bnRpbCB0aGUgcmVxdWlyZWRcbi8vIG51bWJlciBvZiBieXRlcyBhcmUgYXZhaWxhYmxlLlxuZnVuY3Rpb24gdXRmOFRleHQoYnVmLCBpKSB7XG4gIHZhciB0b3RhbCA9IHV0ZjhDaGVja0luY29tcGxldGUodGhpcywgYnVmLCBpKTtcbiAgaWYgKCF0aGlzLmxhc3ROZWVkKSByZXR1cm4gYnVmLnRvU3RyaW5nKCd1dGY4JywgaSk7XG4gIHRoaXMubGFzdFRvdGFsID0gdG90YWw7XG4gIHZhciBlbmQgPSBidWYubGVuZ3RoIC0gKHRvdGFsIC0gdGhpcy5sYXN0TmVlZCk7XG4gIGJ1Zi5jb3B5KHRoaXMubGFzdENoYXIsIDAsIGVuZCk7XG4gIHJldHVybiBidWYudG9TdHJpbmcoJ3V0ZjgnLCBpLCBlbmQpO1xufVxuXG4vLyBGb3IgVVRGLTgsIGEgcmVwbGFjZW1lbnQgY2hhcmFjdGVyIGlzIGFkZGVkIHdoZW4gZW5kaW5nIG9uIGEgcGFydGlhbFxuLy8gY2hhcmFjdGVyLlxuZnVuY3Rpb24gdXRmOEVuZChidWYpIHtcbiAgdmFyIHIgPSBidWYgJiYgYnVmLmxlbmd0aCA/IHRoaXMud3JpdGUoYnVmKSA6ICcnO1xuICBpZiAodGhpcy5sYXN0TmVlZCkgcmV0dXJuIHIgKyAnXFx1ZmZmZCc7XG4gIHJldHVybiByO1xufVxuXG4vLyBVVEYtMTZMRSB0eXBpY2FsbHkgbmVlZHMgdHdvIGJ5dGVzIHBlciBjaGFyYWN0ZXIsIGJ1dCBldmVuIGlmIHdlIGhhdmUgYW4gZXZlblxuLy8gbnVtYmVyIG9mIGJ5dGVzIGF2YWlsYWJsZSwgd2UgbmVlZCB0byBjaGVjayBpZiB3ZSBlbmQgb24gYSBsZWFkaW5nL2hpZ2hcbi8vIHN1cnJvZ2F0ZS4gSW4gdGhhdCBjYXNlLCB3ZSBuZWVkIHRvIHdhaXQgZm9yIHRoZSBuZXh0IHR3byBieXRlcyBpbiBvcmRlciB0b1xuLy8gZGVjb2RlIHRoZSBsYXN0IGNoYXJhY3RlciBwcm9wZXJseS5cbmZ1bmN0aW9uIHV0ZjE2VGV4dChidWYsIGkpIHtcbiAgaWYgKChidWYubGVuZ3RoIC0gaSkgJSAyID09PSAwKSB7XG4gICAgdmFyIHIgPSBidWYudG9TdHJpbmcoJ3V0ZjE2bGUnLCBpKTtcbiAgICBpZiAocikge1xuICAgICAgdmFyIGMgPSByLmNoYXJDb2RlQXQoci5sZW5ndGggLSAxKTtcbiAgICAgIGlmIChjID49IDB4RDgwMCAmJiBjIDw9IDB4REJGRikge1xuICAgICAgICB0aGlzLmxhc3ROZWVkID0gMjtcbiAgICAgICAgdGhpcy5sYXN0VG90YWwgPSA0O1xuICAgICAgICB0aGlzLmxhc3RDaGFyWzBdID0gYnVmW2J1Zi5sZW5ndGggLSAyXTtcbiAgICAgICAgdGhpcy5sYXN0Q2hhclsxXSA9IGJ1ZltidWYubGVuZ3RoIC0gMV07XG4gICAgICAgIHJldHVybiByLnNsaWNlKDAsIC0xKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHI7XG4gIH1cbiAgdGhpcy5sYXN0TmVlZCA9IDE7XG4gIHRoaXMubGFzdFRvdGFsID0gMjtcbiAgdGhpcy5sYXN0Q2hhclswXSA9IGJ1ZltidWYubGVuZ3RoIC0gMV07XG4gIHJldHVybiBidWYudG9TdHJpbmcoJ3V0ZjE2bGUnLCBpLCBidWYubGVuZ3RoIC0gMSk7XG59XG5cbi8vIEZvciBVVEYtMTZMRSB3ZSBkbyBub3QgZXhwbGljaXRseSBhcHBlbmQgc3BlY2lhbCByZXBsYWNlbWVudCBjaGFyYWN0ZXJzIGlmIHdlXG4vLyBlbmQgb24gYSBwYXJ0aWFsIGNoYXJhY3Rlciwgd2Ugc2ltcGx5IGxldCB2OCBoYW5kbGUgdGhhdC5cbmZ1bmN0aW9uIHV0ZjE2RW5kKGJ1Zikge1xuICB2YXIgciA9IGJ1ZiAmJiBidWYubGVuZ3RoID8gdGhpcy53cml0ZShidWYpIDogJyc7XG4gIGlmICh0aGlzLmxhc3ROZWVkKSB7XG4gICAgdmFyIGVuZCA9IHRoaXMubGFzdFRvdGFsIC0gdGhpcy5sYXN0TmVlZDtcbiAgICByZXR1cm4gciArIHRoaXMubGFzdENoYXIudG9TdHJpbmcoJ3V0ZjE2bGUnLCAwLCBlbmQpO1xuICB9XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBiYXNlNjRUZXh0KGJ1ZiwgaSkge1xuICB2YXIgbiA9IChidWYubGVuZ3RoIC0gaSkgJSAzO1xuICBpZiAobiA9PT0gMCkgcmV0dXJuIGJ1Zi50b1N0cmluZygnYmFzZTY0JywgaSk7XG4gIHRoaXMubGFzdE5lZWQgPSAzIC0gbjtcbiAgdGhpcy5sYXN0VG90YWwgPSAzO1xuICBpZiAobiA9PT0gMSkge1xuICAgIHRoaXMubGFzdENoYXJbMF0gPSBidWZbYnVmLmxlbmd0aCAtIDFdO1xuICB9IGVsc2Uge1xuICAgIHRoaXMubGFzdENoYXJbMF0gPSBidWZbYnVmLmxlbmd0aCAtIDJdO1xuICAgIHRoaXMubGFzdENoYXJbMV0gPSBidWZbYnVmLmxlbmd0aCAtIDFdO1xuICB9XG4gIHJldHVybiBidWYudG9TdHJpbmcoJ2Jhc2U2NCcsIGksIGJ1Zi5sZW5ndGggLSBuKTtcbn1cblxuZnVuY3Rpb24gYmFzZTY0RW5kKGJ1Zikge1xuICB2YXIgciA9IGJ1ZiAmJiBidWYubGVuZ3RoID8gdGhpcy53cml0ZShidWYpIDogJyc7XG4gIGlmICh0aGlzLmxhc3ROZWVkKSByZXR1cm4gciArIHRoaXMubGFzdENoYXIudG9TdHJpbmcoJ2Jhc2U2NCcsIDAsIDMgLSB0aGlzLmxhc3ROZWVkKTtcbiAgcmV0dXJuIHI7XG59XG5cbi8vIFBhc3MgYnl0ZXMgb24gdGhyb3VnaCBmb3Igc2luZ2xlLWJ5dGUgZW5jb2RpbmdzIChlLmcuIGFzY2lpLCBsYXRpbjEsIGhleClcbmZ1bmN0aW9uIHNpbXBsZVdyaXRlKGJ1Zikge1xuICByZXR1cm4gYnVmLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcpO1xufVxuXG5mdW5jdGlvbiBzaW1wbGVFbmQoYnVmKSB7XG4gIHJldHVybiBidWYgJiYgYnVmLmxlbmd0aCA/IHRoaXMud3JpdGUoYnVmKSA6ICcnO1xufSIsCiAgICAiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cblxudmFyIHBuYSA9IHJlcXVpcmUoJ3Byb2Nlc3MtbmV4dGljay1hcmdzJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxubW9kdWxlLmV4cG9ydHMgPSBSZWFkYWJsZTtcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnaXNhcnJheScpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgRHVwbGV4O1xuLyo8L3JlcGxhY2VtZW50PiovXG5cblJlYWRhYmxlLlJlYWRhYmxlU3RhdGUgPSBSZWFkYWJsZVN0YXRlO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIEVFID0gcmVxdWlyZSgnZXZlbnRzJykuRXZlbnRFbWl0dGVyO1xuXG52YXIgRUVsaXN0ZW5lckNvdW50ID0gZnVuY3Rpb24gKGVtaXR0ZXIsIHR5cGUpIHtcbiAgcmV0dXJuIGVtaXR0ZXIubGlzdGVuZXJzKHR5cGUpLmxlbmd0aDtcbn07XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBTdHJlYW0gPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvc3RyZWFtJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cblxudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ3NhZmUtYnVmZmVyJykuQnVmZmVyO1xudmFyIE91clVpbnQ4QXJyYXkgPSAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWwgOiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyA/IHNlbGYgOiB7fSkuVWludDhBcnJheSB8fCBmdW5jdGlvbiAoKSB7fTtcbmZ1bmN0aW9uIF91aW50OEFycmF5VG9CdWZmZXIoY2h1bmspIHtcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKGNodW5rKTtcbn1cbmZ1bmN0aW9uIF9pc1VpbnQ4QXJyYXkob2JqKSB7XG4gIHJldHVybiBCdWZmZXIuaXNCdWZmZXIob2JqKSB8fCBvYmogaW5zdGFuY2VvZiBPdXJVaW50OEFycmF5O1xufVxuXG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciB1dGlsID0gT2JqZWN0LmNyZWF0ZShyZXF1aXJlKCdjb3JlLXV0aWwtaXMnKSk7XG51dGlsLmluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIGRlYnVnVXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbnZhciBkZWJ1ZyA9IHZvaWQgMDtcbmlmIChkZWJ1Z1V0aWwgJiYgZGVidWdVdGlsLmRlYnVnbG9nKSB7XG4gIGRlYnVnID0gZGVidWdVdGlsLmRlYnVnbG9nKCdzdHJlYW0nKTtcbn0gZWxzZSB7XG4gIGRlYnVnID0gZnVuY3Rpb24gKCkge307XG59XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxudmFyIEJ1ZmZlckxpc3QgPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvQnVmZmVyTGlzdCcpO1xudmFyIGRlc3Ryb3lJbXBsID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL2Rlc3Ryb3knKTtcbnZhciBTdHJpbmdEZWNvZGVyO1xuXG51dGlsLmluaGVyaXRzKFJlYWRhYmxlLCBTdHJlYW0pO1xuXG52YXIga1Byb3h5RXZlbnRzID0gWydlcnJvcicsICdjbG9zZScsICdkZXN0cm95JywgJ3BhdXNlJywgJ3Jlc3VtZSddO1xuXG5mdW5jdGlvbiBwcmVwZW5kTGlzdGVuZXIoZW1pdHRlciwgZXZlbnQsIGZuKSB7XG4gIC8vIFNhZGx5IHRoaXMgaXMgbm90IGNhY2hlYWJsZSBhcyBzb21lIGxpYnJhcmllcyBidW5kbGUgdGhlaXIgb3duXG4gIC8vIGV2ZW50IGVtaXR0ZXIgaW1wbGVtZW50YXRpb24gd2l0aCB0aGVtLlxuICBpZiAodHlwZW9mIGVtaXR0ZXIucHJlcGVuZExpc3RlbmVyID09PSAnZnVuY3Rpb24nKSByZXR1cm4gZW1pdHRlci5wcmVwZW5kTGlzdGVuZXIoZXZlbnQsIGZuKTtcblxuICAvLyBUaGlzIGlzIGEgaGFjayB0byBtYWtlIHN1cmUgdGhhdCBvdXIgZXJyb3IgaGFuZGxlciBpcyBhdHRhY2hlZCBiZWZvcmUgYW55XG4gIC8vIHVzZXJsYW5kIG9uZXMuICBORVZFUiBETyBUSElTLiBUaGlzIGlzIGhlcmUgb25seSBiZWNhdXNlIHRoaXMgY29kZSBuZWVkc1xuICAvLyB0byBjb250aW51ZSB0byB3b3JrIHdpdGggb2xkZXIgdmVyc2lvbnMgb2YgTm9kZS5qcyB0aGF0IGRvIG5vdCBpbmNsdWRlXG4gIC8vIHRoZSBwcmVwZW5kTGlzdGVuZXIoKSBtZXRob2QuIFRoZSBnb2FsIGlzIHRvIGV2ZW50dWFsbHkgcmVtb3ZlIHRoaXMgaGFjay5cbiAgaWYgKCFlbWl0dGVyLl9ldmVudHMgfHwgIWVtaXR0ZXIuX2V2ZW50c1tldmVudF0pIGVtaXR0ZXIub24oZXZlbnQsIGZuKTtlbHNlIGlmIChpc0FycmF5KGVtaXR0ZXIuX2V2ZW50c1tldmVudF0pKSBlbWl0dGVyLl9ldmVudHNbZXZlbnRdLnVuc2hpZnQoZm4pO2Vsc2UgZW1pdHRlci5fZXZlbnRzW2V2ZW50XSA9IFtmbiwgZW1pdHRlci5fZXZlbnRzW2V2ZW50XV07XG59XG5cbmZ1bmN0aW9uIFJlYWRhYmxlU3RhdGUob3B0aW9ucywgc3RyZWFtKSB7XG4gIER1cGxleCA9IER1cGxleCB8fCByZXF1aXJlKCcuL19zdHJlYW1fZHVwbGV4Jyk7XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgLy8gRHVwbGV4IHN0cmVhbXMgYXJlIGJvdGggcmVhZGFibGUgYW5kIHdyaXRhYmxlLCBidXQgc2hhcmVcbiAgLy8gdGhlIHNhbWUgb3B0aW9ucyBvYmplY3QuXG4gIC8vIEhvd2V2ZXIsIHNvbWUgY2FzZXMgcmVxdWlyZSBzZXR0aW5nIG9wdGlvbnMgdG8gZGlmZmVyZW50XG4gIC8vIHZhbHVlcyBmb3IgdGhlIHJlYWRhYmxlIGFuZCB0aGUgd3JpdGFibGUgc2lkZXMgb2YgdGhlIGR1cGxleCBzdHJlYW0uXG4gIC8vIFRoZXNlIG9wdGlvbnMgY2FuIGJlIHByb3ZpZGVkIHNlcGFyYXRlbHkgYXMgcmVhZGFibGVYWFggYW5kIHdyaXRhYmxlWFhYLlxuICB2YXIgaXNEdXBsZXggPSBzdHJlYW0gaW5zdGFuY2VvZiBEdXBsZXg7XG5cbiAgLy8gb2JqZWN0IHN0cmVhbSBmbGFnLiBVc2VkIHRvIG1ha2UgcmVhZChuKSBpZ25vcmUgbiBhbmQgdG9cbiAgLy8gbWFrZSBhbGwgdGhlIGJ1ZmZlciBtZXJnaW5nIGFuZCBsZW5ndGggY2hlY2tzIGdvIGF3YXlcbiAgdGhpcy5vYmplY3RNb2RlID0gISFvcHRpb25zLm9iamVjdE1vZGU7XG5cbiAgaWYgKGlzRHVwbGV4KSB0aGlzLm9iamVjdE1vZGUgPSB0aGlzLm9iamVjdE1vZGUgfHwgISFvcHRpb25zLnJlYWRhYmxlT2JqZWN0TW9kZTtcblxuICAvLyB0aGUgcG9pbnQgYXQgd2hpY2ggaXQgc3RvcHMgY2FsbGluZyBfcmVhZCgpIHRvIGZpbGwgdGhlIGJ1ZmZlclxuICAvLyBOb3RlOiAwIGlzIGEgdmFsaWQgdmFsdWUsIG1lYW5zIFwiZG9uJ3QgY2FsbCBfcmVhZCBwcmVlbXB0aXZlbHkgZXZlclwiXG4gIHZhciBod20gPSBvcHRpb25zLmhpZ2hXYXRlck1hcms7XG4gIHZhciByZWFkYWJsZUh3bSA9IG9wdGlvbnMucmVhZGFibGVIaWdoV2F0ZXJNYXJrO1xuICB2YXIgZGVmYXVsdEh3bSA9IHRoaXMub2JqZWN0TW9kZSA/IDE2IDogMTYgKiAxMDI0O1xuXG4gIGlmIChod20gfHwgaHdtID09PSAwKSB0aGlzLmhpZ2hXYXRlck1hcmsgPSBod207ZWxzZSBpZiAoaXNEdXBsZXggJiYgKHJlYWRhYmxlSHdtIHx8IHJlYWRhYmxlSHdtID09PSAwKSkgdGhpcy5oaWdoV2F0ZXJNYXJrID0gcmVhZGFibGVId207ZWxzZSB0aGlzLmhpZ2hXYXRlck1hcmsgPSBkZWZhdWx0SHdtO1xuXG4gIC8vIGNhc3QgdG8gaW50cy5cbiAgdGhpcy5oaWdoV2F0ZXJNYXJrID0gTWF0aC5mbG9vcih0aGlzLmhpZ2hXYXRlck1hcmspO1xuXG4gIC8vIEEgbGlua2VkIGxpc3QgaXMgdXNlZCB0byBzdG9yZSBkYXRhIGNodW5rcyBpbnN0ZWFkIG9mIGFuIGFycmF5IGJlY2F1c2UgdGhlXG4gIC8vIGxpbmtlZCBsaXN0IGNhbiByZW1vdmUgZWxlbWVudHMgZnJvbSB0aGUgYmVnaW5uaW5nIGZhc3RlciB0aGFuXG4gIC8vIGFycmF5LnNoaWZ0KClcbiAgdGhpcy5idWZmZXIgPSBuZXcgQnVmZmVyTGlzdCgpO1xuICB0aGlzLmxlbmd0aCA9IDA7XG4gIHRoaXMucGlwZXMgPSBudWxsO1xuICB0aGlzLnBpcGVzQ291bnQgPSAwO1xuICB0aGlzLmZsb3dpbmcgPSBudWxsO1xuICB0aGlzLmVuZGVkID0gZmFsc2U7XG4gIHRoaXMuZW5kRW1pdHRlZCA9IGZhbHNlO1xuICB0aGlzLnJlYWRpbmcgPSBmYWxzZTtcblxuICAvLyBhIGZsYWcgdG8gYmUgYWJsZSB0byB0ZWxsIGlmIHRoZSBldmVudCAncmVhZGFibGUnLydkYXRhJyBpcyBlbWl0dGVkXG4gIC8vIGltbWVkaWF0ZWx5LCBvciBvbiBhIGxhdGVyIHRpY2suICBXZSBzZXQgdGhpcyB0byB0cnVlIGF0IGZpcnN0LCBiZWNhdXNlXG4gIC8vIGFueSBhY3Rpb25zIHRoYXQgc2hvdWxkbid0IGhhcHBlbiB1bnRpbCBcImxhdGVyXCIgc2hvdWxkIGdlbmVyYWxseSBhbHNvXG4gIC8vIG5vdCBoYXBwZW4gYmVmb3JlIHRoZSBmaXJzdCByZWFkIGNhbGwuXG4gIHRoaXMuc3luYyA9IHRydWU7XG5cbiAgLy8gd2hlbmV2ZXIgd2UgcmV0dXJuIG51bGwsIHRoZW4gd2Ugc2V0IGEgZmxhZyB0byBzYXlcbiAgLy8gdGhhdCB3ZSdyZSBhd2FpdGluZyBhICdyZWFkYWJsZScgZXZlbnQgZW1pc3Npb24uXG4gIHRoaXMubmVlZFJlYWRhYmxlID0gZmFsc2U7XG4gIHRoaXMuZW1pdHRlZFJlYWRhYmxlID0gZmFsc2U7XG4gIHRoaXMucmVhZGFibGVMaXN0ZW5pbmcgPSBmYWxzZTtcbiAgdGhpcy5yZXN1bWVTY2hlZHVsZWQgPSBmYWxzZTtcblxuICAvLyBoYXMgaXQgYmVlbiBkZXN0cm95ZWRcbiAgdGhpcy5kZXN0cm95ZWQgPSBmYWxzZTtcblxuICAvLyBDcnlwdG8gaXMga2luZCBvZiBvbGQgYW5kIGNydXN0eS4gIEhpc3RvcmljYWxseSwgaXRzIGRlZmF1bHQgc3RyaW5nXG4gIC8vIGVuY29kaW5nIGlzICdiaW5hcnknIHNvIHdlIGhhdmUgdG8gbWFrZSB0aGlzIGNvbmZpZ3VyYWJsZS5cbiAgLy8gRXZlcnl0aGluZyBlbHNlIGluIHRoZSB1bml2ZXJzZSB1c2VzICd1dGY4JywgdGhvdWdoLlxuICB0aGlzLmRlZmF1bHRFbmNvZGluZyA9IG9wdGlvbnMuZGVmYXVsdEVuY29kaW5nIHx8ICd1dGY4JztcblxuICAvLyB0aGUgbnVtYmVyIG9mIHdyaXRlcnMgdGhhdCBhcmUgYXdhaXRpbmcgYSBkcmFpbiBldmVudCBpbiAucGlwZSgpc1xuICB0aGlzLmF3YWl0RHJhaW4gPSAwO1xuXG4gIC8vIGlmIHRydWUsIGEgbWF5YmVSZWFkTW9yZSBoYXMgYmVlbiBzY2hlZHVsZWRcbiAgdGhpcy5yZWFkaW5nTW9yZSA9IGZhbHNlO1xuXG4gIHRoaXMuZGVjb2RlciA9IG51bGw7XG4gIHRoaXMuZW5jb2RpbmcgPSBudWxsO1xuICBpZiAob3B0aW9ucy5lbmNvZGluZykge1xuICAgIGlmICghU3RyaW5nRGVjb2RlcikgU3RyaW5nRGVjb2RlciA9IHJlcXVpcmUoJ3N0cmluZ19kZWNvZGVyLycpLlN0cmluZ0RlY29kZXI7XG4gICAgdGhpcy5kZWNvZGVyID0gbmV3IFN0cmluZ0RlY29kZXIob3B0aW9ucy5lbmNvZGluZyk7XG4gICAgdGhpcy5lbmNvZGluZyA9IG9wdGlvbnMuZW5jb2Rpbmc7XG4gIH1cbn1cblxuZnVuY3Rpb24gUmVhZGFibGUob3B0aW9ucykge1xuICBEdXBsZXggPSBEdXBsZXggfHwgcmVxdWlyZSgnLi9fc3RyZWFtX2R1cGxleCcpO1xuXG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBSZWFkYWJsZSkpIHJldHVybiBuZXcgUmVhZGFibGUob3B0aW9ucyk7XG5cbiAgdGhpcy5fcmVhZGFibGVTdGF0ZSA9IG5ldyBSZWFkYWJsZVN0YXRlKG9wdGlvbnMsIHRoaXMpO1xuXG4gIC8vIGxlZ2FjeVxuICB0aGlzLnJlYWRhYmxlID0gdHJ1ZTtcblxuICBpZiAob3B0aW9ucykge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5yZWFkID09PSAnZnVuY3Rpb24nKSB0aGlzLl9yZWFkID0gb3B0aW9ucy5yZWFkO1xuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmRlc3Ryb3kgPT09ICdmdW5jdGlvbicpIHRoaXMuX2Rlc3Ryb3kgPSBvcHRpb25zLmRlc3Ryb3k7XG4gIH1cblxuICBTdHJlYW0uY2FsbCh0aGlzKTtcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlYWRhYmxlLnByb3RvdHlwZSwgJ2Rlc3Ryb3llZCcsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMuX3JlYWRhYmxlU3RhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgLy8gd2UgaWdub3JlIHRoZSB2YWx1ZSBpZiB0aGUgc3RyZWFtXG4gICAgLy8gaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkIHlldFxuICAgIGlmICghdGhpcy5fcmVhZGFibGVTdGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHRoZSB1c2VyIGlzIGV4cGxpY2l0bHlcbiAgICAvLyBtYW5hZ2luZyBkZXN0cm95ZWRcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCA9IHZhbHVlO1xuICB9XG59KTtcblxuUmVhZGFibGUucHJvdG90eXBlLmRlc3Ryb3kgPSBkZXN0cm95SW1wbC5kZXN0cm95O1xuUmVhZGFibGUucHJvdG90eXBlLl91bmRlc3Ryb3kgPSBkZXN0cm95SW1wbC51bmRlc3Ryb3k7XG5SZWFkYWJsZS5wcm90b3R5cGUuX2Rlc3Ryb3kgPSBmdW5jdGlvbiAoZXJyLCBjYikge1xuICB0aGlzLnB1c2gobnVsbCk7XG4gIGNiKGVycik7XG59O1xuXG4vLyBNYW51YWxseSBzaG92ZSBzb21ldGhpbmcgaW50byB0aGUgcmVhZCgpIGJ1ZmZlci5cbi8vIFRoaXMgcmV0dXJucyB0cnVlIGlmIHRoZSBoaWdoV2F0ZXJNYXJrIGhhcyBub3QgYmVlbiBoaXQgeWV0LFxuLy8gc2ltaWxhciB0byBob3cgV3JpdGFibGUud3JpdGUoKSByZXR1cm5zIHRydWUgaWYgeW91IHNob3VsZFxuLy8gd3JpdGUoKSBzb21lIG1vcmUuXG5SZWFkYWJsZS5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgdmFyIHNraXBDaHVua0NoZWNrO1xuXG4gIGlmICghc3RhdGUub2JqZWN0TW9kZSkge1xuICAgIGlmICh0eXBlb2YgY2h1bmsgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbmNvZGluZyA9IGVuY29kaW5nIHx8IHN0YXRlLmRlZmF1bHRFbmNvZGluZztcbiAgICAgIGlmIChlbmNvZGluZyAhPT0gc3RhdGUuZW5jb2RpbmcpIHtcbiAgICAgICAgY2h1bmsgPSBCdWZmZXIuZnJvbShjaHVuaywgZW5jb2RpbmcpO1xuICAgICAgICBlbmNvZGluZyA9ICcnO1xuICAgICAgfVxuICAgICAgc2tpcENodW5rQ2hlY2sgPSB0cnVlO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBza2lwQ2h1bmtDaGVjayA9IHRydWU7XG4gIH1cblxuICByZXR1cm4gcmVhZGFibGVBZGRDaHVuayh0aGlzLCBjaHVuaywgZW5jb2RpbmcsIGZhbHNlLCBza2lwQ2h1bmtDaGVjayk7XG59O1xuXG4vLyBVbnNoaWZ0IHNob3VsZCAqYWx3YXlzKiBiZSBzb21ldGhpbmcgZGlyZWN0bHkgb3V0IG9mIHJlYWQoKVxuUmVhZGFibGUucHJvdG90eXBlLnVuc2hpZnQgPSBmdW5jdGlvbiAoY2h1bmspIHtcbiAgcmV0dXJuIHJlYWRhYmxlQWRkQ2h1bmsodGhpcywgY2h1bmssIG51bGwsIHRydWUsIGZhbHNlKTtcbn07XG5cbmZ1bmN0aW9uIHJlYWRhYmxlQWRkQ2h1bmsoc3RyZWFtLCBjaHVuaywgZW5jb2RpbmcsIGFkZFRvRnJvbnQsIHNraXBDaHVua0NoZWNrKSB7XG4gIHZhciBzdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZTtcbiAgaWYgKGNodW5rID09PSBudWxsKSB7XG4gICAgc3RhdGUucmVhZGluZyA9IGZhbHNlO1xuICAgIG9uRW9mQ2h1bmsoc3RyZWFtLCBzdGF0ZSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGVyO1xuICAgIGlmICghc2tpcENodW5rQ2hlY2spIGVyID0gY2h1bmtJbnZhbGlkKHN0YXRlLCBjaHVuayk7XG4gICAgaWYgKGVyKSB7XG4gICAgICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcik7XG4gICAgfSBlbHNlIGlmIChzdGF0ZS5vYmplY3RNb2RlIHx8IGNodW5rICYmIGNodW5rLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmICh0eXBlb2YgY2h1bmsgIT09ICdzdHJpbmcnICYmICFzdGF0ZS5vYmplY3RNb2RlICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZihjaHVuaykgIT09IEJ1ZmZlci5wcm90b3R5cGUpIHtcbiAgICAgICAgY2h1bmsgPSBfdWludDhBcnJheVRvQnVmZmVyKGNodW5rKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGFkZFRvRnJvbnQpIHtcbiAgICAgICAgaWYgKHN0YXRlLmVuZEVtaXR0ZWQpIHN0cmVhbS5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcignc3RyZWFtLnVuc2hpZnQoKSBhZnRlciBlbmQgZXZlbnQnKSk7ZWxzZSBhZGRDaHVuayhzdHJlYW0sIHN0YXRlLCBjaHVuaywgdHJ1ZSk7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlLmVuZGVkKSB7XG4gICAgICAgIHN0cmVhbS5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcignc3RyZWFtLnB1c2goKSBhZnRlciBFT0YnKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS5yZWFkaW5nID0gZmFsc2U7XG4gICAgICAgIGlmIChzdGF0ZS5kZWNvZGVyICYmICFlbmNvZGluZykge1xuICAgICAgICAgIGNodW5rID0gc3RhdGUuZGVjb2Rlci53cml0ZShjaHVuayk7XG4gICAgICAgICAgaWYgKHN0YXRlLm9iamVjdE1vZGUgfHwgY2h1bmsubGVuZ3RoICE9PSAwKSBhZGRDaHVuayhzdHJlYW0sIHN0YXRlLCBjaHVuaywgZmFsc2UpO2Vsc2UgbWF5YmVSZWFkTW9yZShzdHJlYW0sIHN0YXRlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhZGRDaHVuayhzdHJlYW0sIHN0YXRlLCBjaHVuaywgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghYWRkVG9Gcm9udCkge1xuICAgICAgc3RhdGUucmVhZGluZyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZWVkTW9yZURhdGEoc3RhdGUpO1xufVxuXG5mdW5jdGlvbiBhZGRDaHVuayhzdHJlYW0sIHN0YXRlLCBjaHVuaywgYWRkVG9Gcm9udCkge1xuICBpZiAoc3RhdGUuZmxvd2luZyAmJiBzdGF0ZS5sZW5ndGggPT09IDAgJiYgIXN0YXRlLnN5bmMpIHtcbiAgICBzdHJlYW0uZW1pdCgnZGF0YScsIGNodW5rKTtcbiAgICBzdHJlYW0ucmVhZCgwKTtcbiAgfSBlbHNlIHtcbiAgICAvLyB1cGRhdGUgdGhlIGJ1ZmZlciBpbmZvLlxuICAgIHN0YXRlLmxlbmd0aCArPSBzdGF0ZS5vYmplY3RNb2RlID8gMSA6IGNodW5rLmxlbmd0aDtcbiAgICBpZiAoYWRkVG9Gcm9udCkgc3RhdGUuYnVmZmVyLnVuc2hpZnQoY2h1bmspO2Vsc2Ugc3RhdGUuYnVmZmVyLnB1c2goY2h1bmspO1xuXG4gICAgaWYgKHN0YXRlLm5lZWRSZWFkYWJsZSkgZW1pdFJlYWRhYmxlKHN0cmVhbSk7XG4gIH1cbiAgbWF5YmVSZWFkTW9yZShzdHJlYW0sIHN0YXRlKTtcbn1cblxuZnVuY3Rpb24gY2h1bmtJbnZhbGlkKHN0YXRlLCBjaHVuaykge1xuICB2YXIgZXI7XG4gIGlmICghX2lzVWludDhBcnJheShjaHVuaykgJiYgdHlwZW9mIGNodW5rICE9PSAnc3RyaW5nJyAmJiBjaHVuayAhPT0gdW5kZWZpbmVkICYmICFzdGF0ZS5vYmplY3RNb2RlKSB7XG4gICAgZXIgPSBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIG5vbi1zdHJpbmcvYnVmZmVyIGNodW5rJyk7XG4gIH1cbiAgcmV0dXJuIGVyO1xufVxuXG4vLyBpZiBpdCdzIHBhc3QgdGhlIGhpZ2ggd2F0ZXIgbWFyaywgd2UgY2FuIHB1c2ggaW4gc29tZSBtb3JlLlxuLy8gQWxzbywgaWYgd2UgaGF2ZSBubyBkYXRhIHlldCwgd2UgY2FuIHN0YW5kIHNvbWVcbi8vIG1vcmUgYnl0ZXMuICBUaGlzIGlzIHRvIHdvcmsgYXJvdW5kIGNhc2VzIHdoZXJlIGh3bT0wLFxuLy8gc3VjaCBhcyB0aGUgcmVwbC4gIEFsc28sIGlmIHRoZSBwdXNoKCkgdHJpZ2dlcmVkIGFcbi8vIHJlYWRhYmxlIGV2ZW50LCBhbmQgdGhlIHVzZXIgY2FsbGVkIHJlYWQobGFyZ2VOdW1iZXIpIHN1Y2ggdGhhdFxuLy8gbmVlZFJlYWRhYmxlIHdhcyBzZXQsIHRoZW4gd2Ugb3VnaHQgdG8gcHVzaCBtb3JlLCBzbyB0aGF0IGFub3RoZXJcbi8vICdyZWFkYWJsZScgZXZlbnQgd2lsbCBiZSB0cmlnZ2VyZWQuXG5mdW5jdGlvbiBuZWVkTW9yZURhdGEoc3RhdGUpIHtcbiAgcmV0dXJuICFzdGF0ZS5lbmRlZCAmJiAoc3RhdGUubmVlZFJlYWRhYmxlIHx8IHN0YXRlLmxlbmd0aCA8IHN0YXRlLmhpZ2hXYXRlck1hcmsgfHwgc3RhdGUubGVuZ3RoID09PSAwKTtcbn1cblxuUmVhZGFibGUucHJvdG90eXBlLmlzUGF1c2VkID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nID09PSBmYWxzZTtcbn07XG5cbi8vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LlxuUmVhZGFibGUucHJvdG90eXBlLnNldEVuY29kaW5nID0gZnVuY3Rpb24gKGVuYykge1xuICBpZiAoIVN0cmluZ0RlY29kZXIpIFN0cmluZ0RlY29kZXIgPSByZXF1aXJlKCdzdHJpbmdfZGVjb2Rlci8nKS5TdHJpbmdEZWNvZGVyO1xuICB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlY29kZXIgPSBuZXcgU3RyaW5nRGVjb2RlcihlbmMpO1xuICB0aGlzLl9yZWFkYWJsZVN0YXRlLmVuY29kaW5nID0gZW5jO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8vIERvbid0IHJhaXNlIHRoZSBod20gPiA4TUJcbnZhciBNQVhfSFdNID0gMHg4MDAwMDA7XG5mdW5jdGlvbiBjb21wdXRlTmV3SGlnaFdhdGVyTWFyayhuKSB7XG4gIGlmIChuID49IE1BWF9IV00pIHtcbiAgICBuID0gTUFYX0hXTTtcbiAgfSBlbHNlIHtcbiAgICAvLyBHZXQgdGhlIG5leHQgaGlnaGVzdCBwb3dlciBvZiAyIHRvIHByZXZlbnQgaW5jcmVhc2luZyBod20gZXhjZXNzaXZlbHkgaW5cbiAgICAvLyB0aW55IGFtb3VudHNcbiAgICBuLS07XG4gICAgbiB8PSBuID4+PiAxO1xuICAgIG4gfD0gbiA+Pj4gMjtcbiAgICBuIHw9IG4gPj4+IDQ7XG4gICAgbiB8PSBuID4+PiA4O1xuICAgIG4gfD0gbiA+Pj4gMTY7XG4gICAgbisrO1xuICB9XG4gIHJldHVybiBuO1xufVxuXG4vLyBUaGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGJlIGlubGluYWJsZSwgc28gcGxlYXNlIHRha2UgY2FyZSB3aGVuIG1ha2luZ1xuLy8gY2hhbmdlcyB0byB0aGUgZnVuY3Rpb24gYm9keS5cbmZ1bmN0aW9uIGhvd011Y2hUb1JlYWQobiwgc3RhdGUpIHtcbiAgaWYgKG4gPD0gMCB8fCBzdGF0ZS5sZW5ndGggPT09IDAgJiYgc3RhdGUuZW5kZWQpIHJldHVybiAwO1xuICBpZiAoc3RhdGUub2JqZWN0TW9kZSkgcmV0dXJuIDE7XG4gIGlmIChuICE9PSBuKSB7XG4gICAgLy8gT25seSBmbG93IG9uZSBidWZmZXIgYXQgYSB0aW1lXG4gICAgaWYgKHN0YXRlLmZsb3dpbmcgJiYgc3RhdGUubGVuZ3RoKSByZXR1cm4gc3RhdGUuYnVmZmVyLmhlYWQuZGF0YS5sZW5ndGg7ZWxzZSByZXR1cm4gc3RhdGUubGVuZ3RoO1xuICB9XG4gIC8vIElmIHdlJ3JlIGFza2luZyBmb3IgbW9yZSB0aGFuIHRoZSBjdXJyZW50IGh3bSwgdGhlbiByYWlzZSB0aGUgaHdtLlxuICBpZiAobiA+IHN0YXRlLmhpZ2hXYXRlck1hcmspIHN0YXRlLmhpZ2hXYXRlck1hcmsgPSBjb21wdXRlTmV3SGlnaFdhdGVyTWFyayhuKTtcbiAgaWYgKG4gPD0gc3RhdGUubGVuZ3RoKSByZXR1cm4gbjtcbiAgLy8gRG9uJ3QgaGF2ZSBlbm91Z2hcbiAgaWYgKCFzdGF0ZS5lbmRlZCkge1xuICAgIHN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWU7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgcmV0dXJuIHN0YXRlLmxlbmd0aDtcbn1cblxuLy8geW91IGNhbiBvdmVycmlkZSBlaXRoZXIgdGhpcyBtZXRob2QsIG9yIHRoZSBhc3luYyBfcmVhZChuKSBiZWxvdy5cblJlYWRhYmxlLnByb3RvdHlwZS5yZWFkID0gZnVuY3Rpb24gKG4pIHtcbiAgZGVidWcoJ3JlYWQnLCBuKTtcbiAgbiA9IHBhcnNlSW50KG4sIDEwKTtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgdmFyIG5PcmlnID0gbjtcblxuICBpZiAobiAhPT0gMCkgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gZmFsc2U7XG5cbiAgLy8gaWYgd2UncmUgZG9pbmcgcmVhZCgwKSB0byB0cmlnZ2VyIGEgcmVhZGFibGUgZXZlbnQsIGJ1dCB3ZVxuICAvLyBhbHJlYWR5IGhhdmUgYSBidW5jaCBvZiBkYXRhIGluIHRoZSBidWZmZXIsIHRoZW4ganVzdCB0cmlnZ2VyXG4gIC8vIHRoZSAncmVhZGFibGUnIGV2ZW50IGFuZCBtb3ZlIG9uLlxuICBpZiAobiA9PT0gMCAmJiBzdGF0ZS5uZWVkUmVhZGFibGUgJiYgKHN0YXRlLmxlbmd0aCA+PSBzdGF0ZS5oaWdoV2F0ZXJNYXJrIHx8IHN0YXRlLmVuZGVkKSkge1xuICAgIGRlYnVnKCdyZWFkOiBlbWl0UmVhZGFibGUnLCBzdGF0ZS5sZW5ndGgsIHN0YXRlLmVuZGVkKTtcbiAgICBpZiAoc3RhdGUubGVuZ3RoID09PSAwICYmIHN0YXRlLmVuZGVkKSBlbmRSZWFkYWJsZSh0aGlzKTtlbHNlIGVtaXRSZWFkYWJsZSh0aGlzKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIG4gPSBob3dNdWNoVG9SZWFkKG4sIHN0YXRlKTtcblxuICAvLyBpZiB3ZSd2ZSBlbmRlZCwgYW5kIHdlJ3JlIG5vdyBjbGVhciwgdGhlbiBmaW5pc2ggaXQgdXAuXG4gIGlmIChuID09PSAwICYmIHN0YXRlLmVuZGVkKSB7XG4gICAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCkgZW5kUmVhZGFibGUodGhpcyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBBbGwgdGhlIGFjdHVhbCBjaHVuayBnZW5lcmF0aW9uIGxvZ2ljIG5lZWRzIHRvIGJlXG4gIC8vICpiZWxvdyogdGhlIGNhbGwgdG8gX3JlYWQuICBUaGUgcmVhc29uIGlzIHRoYXQgaW4gY2VydGFpblxuICAvLyBzeW50aGV0aWMgc3RyZWFtIGNhc2VzLCBzdWNoIGFzIHBhc3N0aHJvdWdoIHN0cmVhbXMsIF9yZWFkXG4gIC8vIG1heSBiZSBhIGNvbXBsZXRlbHkgc3luY2hyb25vdXMgb3BlcmF0aW9uIHdoaWNoIG1heSBjaGFuZ2VcbiAgLy8gdGhlIHN0YXRlIG9mIHRoZSByZWFkIGJ1ZmZlciwgcHJvdmlkaW5nIGVub3VnaCBkYXRhIHdoZW5cbiAgLy8gYmVmb3JlIHRoZXJlIHdhcyAqbm90KiBlbm91Z2guXG4gIC8vXG4gIC8vIFNvLCB0aGUgc3RlcHMgYXJlOlxuICAvLyAxLiBGaWd1cmUgb3V0IHdoYXQgdGhlIHN0YXRlIG9mIHRoaW5ncyB3aWxsIGJlIGFmdGVyIHdlIGRvXG4gIC8vIGEgcmVhZCBmcm9tIHRoZSBidWZmZXIuXG4gIC8vXG4gIC8vIDIuIElmIHRoYXQgcmVzdWx0aW5nIHN0YXRlIHdpbGwgdHJpZ2dlciBhIF9yZWFkLCB0aGVuIGNhbGwgX3JlYWQuXG4gIC8vIE5vdGUgdGhhdCB0aGlzIG1heSBiZSBhc3luY2hyb25vdXMsIG9yIHN5bmNocm9ub3VzLiAgWWVzLCBpdCBpc1xuICAvLyBkZWVwbHkgdWdseSB0byB3cml0ZSBBUElzIHRoaXMgd2F5LCBidXQgdGhhdCBzdGlsbCBkb2Vzbid0IG1lYW5cbiAgLy8gdGhhdCB0aGUgUmVhZGFibGUgY2xhc3Mgc2hvdWxkIGJlaGF2ZSBpbXByb3Blcmx5LCBhcyBzdHJlYW1zIGFyZVxuICAvLyBkZXNpZ25lZCB0byBiZSBzeW5jL2FzeW5jIGFnbm9zdGljLlxuICAvLyBUYWtlIG5vdGUgaWYgdGhlIF9yZWFkIGNhbGwgaXMgc3luYyBvciBhc3luYyAoaWUsIGlmIHRoZSByZWFkIGNhbGxcbiAgLy8gaGFzIHJldHVybmVkIHlldCksIHNvIHRoYXQgd2Uga25vdyB3aGV0aGVyIG9yIG5vdCBpdCdzIHNhZmUgdG8gZW1pdFxuICAvLyAncmVhZGFibGUnIGV0Yy5cbiAgLy9cbiAgLy8gMy4gQWN0dWFsbHkgcHVsbCB0aGUgcmVxdWVzdGVkIGNodW5rcyBvdXQgb2YgdGhlIGJ1ZmZlciBhbmQgcmV0dXJuLlxuXG4gIC8vIGlmIHdlIG5lZWQgYSByZWFkYWJsZSBldmVudCwgdGhlbiB3ZSBuZWVkIHRvIGRvIHNvbWUgcmVhZGluZy5cbiAgdmFyIGRvUmVhZCA9IHN0YXRlLm5lZWRSZWFkYWJsZTtcbiAgZGVidWcoJ25lZWQgcmVhZGFibGUnLCBkb1JlYWQpO1xuXG4gIC8vIGlmIHdlIGN1cnJlbnRseSBoYXZlIGxlc3MgdGhhbiB0aGUgaGlnaFdhdGVyTWFyaywgdGhlbiBhbHNvIHJlYWQgc29tZVxuICBpZiAoc3RhdGUubGVuZ3RoID09PSAwIHx8IHN0YXRlLmxlbmd0aCAtIG4gPCBzdGF0ZS5oaWdoV2F0ZXJNYXJrKSB7XG4gICAgZG9SZWFkID0gdHJ1ZTtcbiAgICBkZWJ1ZygnbGVuZ3RoIGxlc3MgdGhhbiB3YXRlcm1hcmsnLCBkb1JlYWQpO1xuICB9XG5cbiAgLy8gaG93ZXZlciwgaWYgd2UndmUgZW5kZWQsIHRoZW4gdGhlcmUncyBubyBwb2ludCwgYW5kIGlmIHdlJ3JlIGFscmVhZHlcbiAgLy8gcmVhZGluZywgdGhlbiBpdCdzIHVubmVjZXNzYXJ5LlxuICBpZiAoc3RhdGUuZW5kZWQgfHwgc3RhdGUucmVhZGluZykge1xuICAgIGRvUmVhZCA9IGZhbHNlO1xuICAgIGRlYnVnKCdyZWFkaW5nIG9yIGVuZGVkJywgZG9SZWFkKTtcbiAgfSBlbHNlIGlmIChkb1JlYWQpIHtcbiAgICBkZWJ1ZygnZG8gcmVhZCcpO1xuICAgIHN0YXRlLnJlYWRpbmcgPSB0cnVlO1xuICAgIHN0YXRlLnN5bmMgPSB0cnVlO1xuICAgIC8vIGlmIHRoZSBsZW5ndGggaXMgY3VycmVudGx5IHplcm8sIHRoZW4gd2UgKm5lZWQqIGEgcmVhZGFibGUgZXZlbnQuXG4gICAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCkgc3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZTtcbiAgICAvLyBjYWxsIGludGVybmFsIHJlYWQgbWV0aG9kXG4gICAgdGhpcy5fcmVhZChzdGF0ZS5oaWdoV2F0ZXJNYXJrKTtcbiAgICBzdGF0ZS5zeW5jID0gZmFsc2U7XG4gICAgLy8gSWYgX3JlYWQgcHVzaGVkIGRhdGEgc3luY2hyb25vdXNseSwgdGhlbiBgcmVhZGluZ2Agd2lsbCBiZSBmYWxzZSxcbiAgICAvLyBhbmQgd2UgbmVlZCB0byByZS1ldmFsdWF0ZSBob3cgbXVjaCBkYXRhIHdlIGNhbiByZXR1cm4gdG8gdGhlIHVzZXIuXG4gICAgaWYgKCFzdGF0ZS5yZWFkaW5nKSBuID0gaG93TXVjaFRvUmVhZChuT3JpZywgc3RhdGUpO1xuICB9XG5cbiAgdmFyIHJldDtcbiAgaWYgKG4gPiAwKSByZXQgPSBmcm9tTGlzdChuLCBzdGF0ZSk7ZWxzZSByZXQgPSBudWxsO1xuXG4gIGlmIChyZXQgPT09IG51bGwpIHtcbiAgICBzdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlO1xuICAgIG4gPSAwO1xuICB9IGVsc2Uge1xuICAgIHN0YXRlLmxlbmd0aCAtPSBuO1xuICB9XG5cbiAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCkge1xuICAgIC8vIElmIHdlIGhhdmUgbm90aGluZyBpbiB0aGUgYnVmZmVyLCB0aGVuIHdlIHdhbnQgdG8ga25vd1xuICAgIC8vIGFzIHNvb24gYXMgd2UgKmRvKiBnZXQgc29tZXRoaW5nIGludG8gdGhlIGJ1ZmZlci5cbiAgICBpZiAoIXN0YXRlLmVuZGVkKSBzdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlO1xuXG4gICAgLy8gSWYgd2UgdHJpZWQgdG8gcmVhZCgpIHBhc3QgdGhlIEVPRiwgdGhlbiBlbWl0IGVuZCBvbiB0aGUgbmV4dCB0aWNrLlxuICAgIGlmIChuT3JpZyAhPT0gbiAmJiBzdGF0ZS5lbmRlZCkgZW5kUmVhZGFibGUodGhpcyk7XG4gIH1cblxuICBpZiAocmV0ICE9PSBudWxsKSB0aGlzLmVtaXQoJ2RhdGEnLCByZXQpO1xuXG4gIHJldHVybiByZXQ7XG59O1xuXG5mdW5jdGlvbiBvbkVvZkNodW5rKHN0cmVhbSwgc3RhdGUpIHtcbiAgaWYgKHN0YXRlLmVuZGVkKSByZXR1cm47XG4gIGlmIChzdGF0ZS5kZWNvZGVyKSB7XG4gICAgdmFyIGNodW5rID0gc3RhdGUuZGVjb2Rlci5lbmQoKTtcbiAgICBpZiAoY2h1bmsgJiYgY2h1bmsubGVuZ3RoKSB7XG4gICAgICBzdGF0ZS5idWZmZXIucHVzaChjaHVuayk7XG4gICAgICBzdGF0ZS5sZW5ndGggKz0gc3RhdGUub2JqZWN0TW9kZSA/IDEgOiBjaHVuay5sZW5ndGg7XG4gICAgfVxuICB9XG4gIHN0YXRlLmVuZGVkID0gdHJ1ZTtcblxuICAvLyBlbWl0ICdyZWFkYWJsZScgbm93IHRvIG1ha2Ugc3VyZSBpdCBnZXRzIHBpY2tlZCB1cC5cbiAgZW1pdFJlYWRhYmxlKHN0cmVhbSk7XG59XG5cbi8vIERvbid0IGVtaXQgcmVhZGFibGUgcmlnaHQgYXdheSBpbiBzeW5jIG1vZGUsIGJlY2F1c2UgdGhpcyBjYW4gdHJpZ2dlclxuLy8gYW5vdGhlciByZWFkKCkgY2FsbCA9PiBzdGFjayBvdmVyZmxvdy4gIFRoaXMgd2F5LCBpdCBtaWdodCB0cmlnZ2VyXG4vLyBhIG5leHRUaWNrIHJlY3Vyc2lvbiB3YXJuaW5nLCBidXQgdGhhdCdzIG5vdCBzbyBiYWQuXG5mdW5jdGlvbiBlbWl0UmVhZGFibGUoc3RyZWFtKSB7XG4gIHZhciBzdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZTtcbiAgc3RhdGUubmVlZFJlYWRhYmxlID0gZmFsc2U7XG4gIGlmICghc3RhdGUuZW1pdHRlZFJlYWRhYmxlKSB7XG4gICAgZGVidWcoJ2VtaXRSZWFkYWJsZScsIHN0YXRlLmZsb3dpbmcpO1xuICAgIHN0YXRlLmVtaXR0ZWRSZWFkYWJsZSA9IHRydWU7XG4gICAgaWYgKHN0YXRlLnN5bmMpIHBuYS5uZXh0VGljayhlbWl0UmVhZGFibGVfLCBzdHJlYW0pO2Vsc2UgZW1pdFJlYWRhYmxlXyhzdHJlYW0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGVtaXRSZWFkYWJsZV8oc3RyZWFtKSB7XG4gIGRlYnVnKCdlbWl0IHJlYWRhYmxlJyk7XG4gIHN0cmVhbS5lbWl0KCdyZWFkYWJsZScpO1xuICBmbG93KHN0cmVhbSk7XG59XG5cbi8vIGF0IHRoaXMgcG9pbnQsIHRoZSB1c2VyIGhhcyBwcmVzdW1hYmx5IHNlZW4gdGhlICdyZWFkYWJsZScgZXZlbnQsXG4vLyBhbmQgY2FsbGVkIHJlYWQoKSB0byBjb25zdW1lIHNvbWUgZGF0YS4gIHRoYXQgbWF5IGhhdmUgdHJpZ2dlcmVkXG4vLyBpbiB0dXJuIGFub3RoZXIgX3JlYWQobikgY2FsbCwgaW4gd2hpY2ggY2FzZSByZWFkaW5nID0gdHJ1ZSBpZlxuLy8gaXQncyBpbiBwcm9ncmVzcy5cbi8vIEhvd2V2ZXIsIGlmIHdlJ3JlIG5vdCBlbmRlZCwgb3IgcmVhZGluZywgYW5kIHRoZSBsZW5ndGggPCBod20sXG4vLyB0aGVuIGdvIGFoZWFkIGFuZCB0cnkgdG8gcmVhZCBzb21lIG1vcmUgcHJlZW1wdGl2ZWx5LlxuZnVuY3Rpb24gbWF5YmVSZWFkTW9yZShzdHJlYW0sIHN0YXRlKSB7XG4gIGlmICghc3RhdGUucmVhZGluZ01vcmUpIHtcbiAgICBzdGF0ZS5yZWFkaW5nTW9yZSA9IHRydWU7XG4gICAgcG5hLm5leHRUaWNrKG1heWJlUmVhZE1vcmVfLCBzdHJlYW0sIHN0YXRlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtYXliZVJlYWRNb3JlXyhzdHJlYW0sIHN0YXRlKSB7XG4gIHZhciBsZW4gPSBzdGF0ZS5sZW5ndGg7XG4gIHdoaWxlICghc3RhdGUucmVhZGluZyAmJiAhc3RhdGUuZmxvd2luZyAmJiAhc3RhdGUuZW5kZWQgJiYgc3RhdGUubGVuZ3RoIDwgc3RhdGUuaGlnaFdhdGVyTWFyaykge1xuICAgIGRlYnVnKCdtYXliZVJlYWRNb3JlIHJlYWQgMCcpO1xuICAgIHN0cmVhbS5yZWFkKDApO1xuICAgIGlmIChsZW4gPT09IHN0YXRlLmxlbmd0aClcbiAgICAgIC8vIGRpZG4ndCBnZXQgYW55IGRhdGEsIHN0b3Agc3Bpbm5pbmcuXG4gICAgICBicmVhaztlbHNlIGxlbiA9IHN0YXRlLmxlbmd0aDtcbiAgfVxuICBzdGF0ZS5yZWFkaW5nTW9yZSA9IGZhbHNlO1xufVxuXG4vLyBhYnN0cmFjdCBtZXRob2QuICB0byBiZSBvdmVycmlkZGVuIGluIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGNsYXNzZXMuXG4vLyBjYWxsIGNiKGVyLCBkYXRhKSB3aGVyZSBkYXRhIGlzIDw9IG4gaW4gbGVuZ3RoLlxuLy8gZm9yIHZpcnR1YWwgKG5vbi1zdHJpbmcsIG5vbi1idWZmZXIpIHN0cmVhbXMsIFwibGVuZ3RoXCIgaXMgc29tZXdoYXRcbi8vIGFyYml0cmFyeSwgYW5kIHBlcmhhcHMgbm90IHZlcnkgbWVhbmluZ2Z1bC5cblJlYWRhYmxlLnByb3RvdHlwZS5fcmVhZCA9IGZ1bmN0aW9uIChuKSB7XG4gIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IoJ19yZWFkKCkgaXMgbm90IGltcGxlbWVudGVkJykpO1xufTtcblxuUmVhZGFibGUucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbiAoZGVzdCwgcGlwZU9wdHMpIHtcbiAgdmFyIHNyYyA9IHRoaXM7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG5cbiAgc3dpdGNoIChzdGF0ZS5waXBlc0NvdW50KSB7XG4gICAgY2FzZSAwOlxuICAgICAgc3RhdGUucGlwZXMgPSBkZXN0O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxOlxuICAgICAgc3RhdGUucGlwZXMgPSBbc3RhdGUucGlwZXMsIGRlc3RdO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHN0YXRlLnBpcGVzLnB1c2goZGVzdCk7XG4gICAgICBicmVhaztcbiAgfVxuICBzdGF0ZS5waXBlc0NvdW50ICs9IDE7XG4gIGRlYnVnKCdwaXBlIGNvdW50PSVkIG9wdHM9JWonLCBzdGF0ZS5waXBlc0NvdW50LCBwaXBlT3B0cyk7XG5cbiAgdmFyIGRvRW5kID0gKCFwaXBlT3B0cyB8fCBwaXBlT3B0cy5lbmQgIT09IGZhbHNlKSAmJiBkZXN0ICE9PSBwcm9jZXNzLnN0ZG91dCAmJiBkZXN0ICE9PSBwcm9jZXNzLnN0ZGVycjtcblxuICB2YXIgZW5kRm4gPSBkb0VuZCA/IG9uZW5kIDogdW5waXBlO1xuICBpZiAoc3RhdGUuZW5kRW1pdHRlZCkgcG5hLm5leHRUaWNrKGVuZEZuKTtlbHNlIHNyYy5vbmNlKCdlbmQnLCBlbmRGbik7XG5cbiAgZGVzdC5vbigndW5waXBlJywgb251bnBpcGUpO1xuICBmdW5jdGlvbiBvbnVucGlwZShyZWFkYWJsZSwgdW5waXBlSW5mbykge1xuICAgIGRlYnVnKCdvbnVucGlwZScpO1xuICAgIGlmIChyZWFkYWJsZSA9PT0gc3JjKSB7XG4gICAgICBpZiAodW5waXBlSW5mbyAmJiB1bnBpcGVJbmZvLmhhc1VucGlwZWQgPT09IGZhbHNlKSB7XG4gICAgICAgIHVucGlwZUluZm8uaGFzVW5waXBlZCA9IHRydWU7XG4gICAgICAgIGNsZWFudXAoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBvbmVuZCgpIHtcbiAgICBkZWJ1Zygnb25lbmQnKTtcbiAgICBkZXN0LmVuZCgpO1xuICB9XG5cbiAgLy8gd2hlbiB0aGUgZGVzdCBkcmFpbnMsIGl0IHJlZHVjZXMgdGhlIGF3YWl0RHJhaW4gY291bnRlclxuICAvLyBvbiB0aGUgc291cmNlLiAgVGhpcyB3b3VsZCBiZSBtb3JlIGVsZWdhbnQgd2l0aCBhIC5vbmNlKClcbiAgLy8gaGFuZGxlciBpbiBmbG93KCksIGJ1dCBhZGRpbmcgYW5kIHJlbW92aW5nIHJlcGVhdGVkbHkgaXNcbiAgLy8gdG9vIHNsb3cuXG4gIHZhciBvbmRyYWluID0gcGlwZU9uRHJhaW4oc3JjKTtcbiAgZGVzdC5vbignZHJhaW4nLCBvbmRyYWluKTtcblxuICB2YXIgY2xlYW5lZFVwID0gZmFsc2U7XG4gIGZ1bmN0aW9uIGNsZWFudXAoKSB7XG4gICAgZGVidWcoJ2NsZWFudXAnKTtcbiAgICAvLyBjbGVhbnVwIGV2ZW50IGhhbmRsZXJzIG9uY2UgdGhlIHBpcGUgaXMgYnJva2VuXG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBvbmNsb3NlKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdmaW5pc2gnLCBvbmZpbmlzaCk7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZHJhaW4nLCBvbmRyYWluKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uZXJyb3IpO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ3VucGlwZScsIG9udW5waXBlKTtcbiAgICBzcmMucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIG9uZW5kKTtcbiAgICBzcmMucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIHVucGlwZSk7XG4gICAgc3JjLnJlbW92ZUxpc3RlbmVyKCdkYXRhJywgb25kYXRhKTtcblxuICAgIGNsZWFuZWRVcCA9IHRydWU7XG5cbiAgICAvLyBpZiB0aGUgcmVhZGVyIGlzIHdhaXRpbmcgZm9yIGEgZHJhaW4gZXZlbnQgZnJvbSB0aGlzXG4gICAgLy8gc3BlY2lmaWMgd3JpdGVyLCB0aGVuIGl0IHdvdWxkIGNhdXNlIGl0IHRvIG5ldmVyIHN0YXJ0XG4gICAgLy8gZmxvd2luZyBhZ2Fpbi5cbiAgICAvLyBTbywgaWYgdGhpcyBpcyBhd2FpdGluZyBhIGRyYWluLCB0aGVuIHdlIGp1c3QgY2FsbCBpdCBub3cuXG4gICAgLy8gSWYgd2UgZG9uJ3Qga25vdywgdGhlbiBhc3N1bWUgdGhhdCB3ZSBhcmUgd2FpdGluZyBmb3Igb25lLlxuICAgIGlmIChzdGF0ZS5hd2FpdERyYWluICYmICghZGVzdC5fd3JpdGFibGVTdGF0ZSB8fCBkZXN0Ll93cml0YWJsZVN0YXRlLm5lZWREcmFpbikpIG9uZHJhaW4oKTtcbiAgfVxuXG4gIC8vIElmIHRoZSB1c2VyIHB1c2hlcyBtb3JlIGRhdGEgd2hpbGUgd2UncmUgd3JpdGluZyB0byBkZXN0IHRoZW4gd2UnbGwgZW5kIHVwXG4gIC8vIGluIG9uZGF0YSBhZ2Fpbi4gSG93ZXZlciwgd2Ugb25seSB3YW50IHRvIGluY3JlYXNlIGF3YWl0RHJhaW4gb25jZSBiZWNhdXNlXG4gIC8vIGRlc3Qgd2lsbCBvbmx5IGVtaXQgb25lICdkcmFpbicgZXZlbnQgZm9yIHRoZSBtdWx0aXBsZSB3cml0ZXMuXG4gIC8vID0+IEludHJvZHVjZSBhIGd1YXJkIG9uIGluY3JlYXNpbmcgYXdhaXREcmFpbi5cbiAgdmFyIGluY3JlYXNlZEF3YWl0RHJhaW4gPSBmYWxzZTtcbiAgc3JjLm9uKCdkYXRhJywgb25kYXRhKTtcbiAgZnVuY3Rpb24gb25kYXRhKGNodW5rKSB7XG4gICAgZGVidWcoJ29uZGF0YScpO1xuICAgIGluY3JlYXNlZEF3YWl0RHJhaW4gPSBmYWxzZTtcbiAgICB2YXIgcmV0ID0gZGVzdC53cml0ZShjaHVuayk7XG4gICAgaWYgKGZhbHNlID09PSByZXQgJiYgIWluY3JlYXNlZEF3YWl0RHJhaW4pIHtcbiAgICAgIC8vIElmIHRoZSB1c2VyIHVucGlwZWQgZHVyaW5nIGBkZXN0LndyaXRlKClgLCBpdCBpcyBwb3NzaWJsZVxuICAgICAgLy8gdG8gZ2V0IHN0dWNrIGluIGEgcGVybWFuZW50bHkgcGF1c2VkIHN0YXRlIGlmIHRoYXQgd3JpdGVcbiAgICAgIC8vIGFsc28gcmV0dXJuZWQgZmFsc2UuXG4gICAgICAvLyA9PiBDaGVjayB3aGV0aGVyIGBkZXN0YCBpcyBzdGlsbCBhIHBpcGluZyBkZXN0aW5hdGlvbi5cbiAgICAgIGlmICgoc3RhdGUucGlwZXNDb3VudCA9PT0gMSAmJiBzdGF0ZS5waXBlcyA9PT0gZGVzdCB8fCBzdGF0ZS5waXBlc0NvdW50ID4gMSAmJiBpbmRleE9mKHN0YXRlLnBpcGVzLCBkZXN0KSAhPT0gLTEpICYmICFjbGVhbmVkVXApIHtcbiAgICAgICAgZGVidWcoJ2ZhbHNlIHdyaXRlIHJlc3BvbnNlLCBwYXVzZScsIHN0YXRlLmF3YWl0RHJhaW4pO1xuICAgICAgICBzdGF0ZS5hd2FpdERyYWluKys7XG4gICAgICAgIGluY3JlYXNlZEF3YWl0RHJhaW4gPSB0cnVlO1xuICAgICAgfVxuICAgICAgc3JjLnBhdXNlKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gaWYgdGhlIGRlc3QgaGFzIGFuIGVycm9yLCB0aGVuIHN0b3AgcGlwaW5nIGludG8gaXQuXG4gIC8vIGhvd2V2ZXIsIGRvbid0IHN1cHByZXNzIHRoZSB0aHJvd2luZyBiZWhhdmlvciBmb3IgdGhpcy5cbiAgZnVuY3Rpb24gb25lcnJvcihlcikge1xuICAgIGRlYnVnKCdvbmVycm9yJywgZXIpO1xuICAgIHVucGlwZSgpO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgb25lcnJvcik7XG4gICAgaWYgKEVFbGlzdGVuZXJDb3VudChkZXN0LCAnZXJyb3InKSA9PT0gMCkgZGVzdC5lbWl0KCdlcnJvcicsIGVyKTtcbiAgfVxuXG4gIC8vIE1ha2Ugc3VyZSBvdXIgZXJyb3IgaGFuZGxlciBpcyBhdHRhY2hlZCBiZWZvcmUgdXNlcmxhbmQgb25lcy5cbiAgcHJlcGVuZExpc3RlbmVyKGRlc3QsICdlcnJvcicsIG9uZXJyb3IpO1xuXG4gIC8vIEJvdGggY2xvc2UgYW5kIGZpbmlzaCBzaG91bGQgdHJpZ2dlciB1bnBpcGUsIGJ1dCBvbmx5IG9uY2UuXG4gIGZ1bmN0aW9uIG9uY2xvc2UoKSB7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZmluaXNoJywgb25maW5pc2gpO1xuICAgIHVucGlwZSgpO1xuICB9XG4gIGRlc3Qub25jZSgnY2xvc2UnLCBvbmNsb3NlKTtcbiAgZnVuY3Rpb24gb25maW5pc2goKSB7XG4gICAgZGVidWcoJ29uZmluaXNoJyk7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBvbmNsb3NlKTtcbiAgICB1bnBpcGUoKTtcbiAgfVxuICBkZXN0Lm9uY2UoJ2ZpbmlzaCcsIG9uZmluaXNoKTtcblxuICBmdW5jdGlvbiB1bnBpcGUoKSB7XG4gICAgZGVidWcoJ3VucGlwZScpO1xuICAgIHNyYy51bnBpcGUoZGVzdCk7XG4gIH1cblxuICAvLyB0ZWxsIHRoZSBkZXN0IHRoYXQgaXQncyBiZWluZyBwaXBlZCB0b1xuICBkZXN0LmVtaXQoJ3BpcGUnLCBzcmMpO1xuXG4gIC8vIHN0YXJ0IHRoZSBmbG93IGlmIGl0IGhhc24ndCBiZWVuIHN0YXJ0ZWQgYWxyZWFkeS5cbiAgaWYgKCFzdGF0ZS5mbG93aW5nKSB7XG4gICAgZGVidWcoJ3BpcGUgcmVzdW1lJyk7XG4gICAgc3JjLnJlc3VtZSgpO1xuICB9XG5cbiAgcmV0dXJuIGRlc3Q7XG59O1xuXG5mdW5jdGlvbiBwaXBlT25EcmFpbihzcmMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc3RhdGUgPSBzcmMuX3JlYWRhYmxlU3RhdGU7XG4gICAgZGVidWcoJ3BpcGVPbkRyYWluJywgc3RhdGUuYXdhaXREcmFpbik7XG4gICAgaWYgKHN0YXRlLmF3YWl0RHJhaW4pIHN0YXRlLmF3YWl0RHJhaW4tLTtcbiAgICBpZiAoc3RhdGUuYXdhaXREcmFpbiA9PT0gMCAmJiBFRWxpc3RlbmVyQ291bnQoc3JjLCAnZGF0YScpKSB7XG4gICAgICBzdGF0ZS5mbG93aW5nID0gdHJ1ZTtcbiAgICAgIGZsb3coc3JjKTtcbiAgICB9XG4gIH07XG59XG5cblJlYWRhYmxlLnByb3RvdHlwZS51bnBpcGUgPSBmdW5jdGlvbiAoZGVzdCkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICB2YXIgdW5waXBlSW5mbyA9IHsgaGFzVW5waXBlZDogZmFsc2UgfTtcblxuICAvLyBpZiB3ZSdyZSBub3QgcGlwaW5nIGFueXdoZXJlLCB0aGVuIGRvIG5vdGhpbmcuXG4gIGlmIChzdGF0ZS5waXBlc0NvdW50ID09PSAwKSByZXR1cm4gdGhpcztcblxuICAvLyBqdXN0IG9uZSBkZXN0aW5hdGlvbi4gIG1vc3QgY29tbW9uIGNhc2UuXG4gIGlmIChzdGF0ZS5waXBlc0NvdW50ID09PSAxKSB7XG4gICAgLy8gcGFzc2VkIGluIG9uZSwgYnV0IGl0J3Mgbm90IHRoZSByaWdodCBvbmUuXG4gICAgaWYgKGRlc3QgJiYgZGVzdCAhPT0gc3RhdGUucGlwZXMpIHJldHVybiB0aGlzO1xuXG4gICAgaWYgKCFkZXN0KSBkZXN0ID0gc3RhdGUucGlwZXM7XG5cbiAgICAvLyBnb3QgYSBtYXRjaC5cbiAgICBzdGF0ZS5waXBlcyA9IG51bGw7XG4gICAgc3RhdGUucGlwZXNDb3VudCA9IDA7XG4gICAgc3RhdGUuZmxvd2luZyA9IGZhbHNlO1xuICAgIGlmIChkZXN0KSBkZXN0LmVtaXQoJ3VucGlwZScsIHRoaXMsIHVucGlwZUluZm8pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gc2xvdyBjYXNlLiBtdWx0aXBsZSBwaXBlIGRlc3RpbmF0aW9ucy5cblxuICBpZiAoIWRlc3QpIHtcbiAgICAvLyByZW1vdmUgYWxsLlxuICAgIHZhciBkZXN0cyA9IHN0YXRlLnBpcGVzO1xuICAgIHZhciBsZW4gPSBzdGF0ZS5waXBlc0NvdW50O1xuICAgIHN0YXRlLnBpcGVzID0gbnVsbDtcbiAgICBzdGF0ZS5waXBlc0NvdW50ID0gMDtcbiAgICBzdGF0ZS5mbG93aW5nID0gZmFsc2U7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBkZXN0c1tpXS5lbWl0KCd1bnBpcGUnLCB0aGlzLCB7IGhhc1VucGlwZWQ6IGZhbHNlIH0pO1xuICAgIH1yZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIHRyeSB0byBmaW5kIHRoZSByaWdodCBvbmUuXG4gIHZhciBpbmRleCA9IGluZGV4T2Yoc3RhdGUucGlwZXMsIGRlc3QpO1xuICBpZiAoaW5kZXggPT09IC0xKSByZXR1cm4gdGhpcztcblxuICBzdGF0ZS5waXBlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICBzdGF0ZS5waXBlc0NvdW50IC09IDE7XG4gIGlmIChzdGF0ZS5waXBlc0NvdW50ID09PSAxKSBzdGF0ZS5waXBlcyA9IHN0YXRlLnBpcGVzWzBdO1xuXG4gIGRlc3QuZW1pdCgndW5waXBlJywgdGhpcywgdW5waXBlSW5mbyk7XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBzZXQgdXAgZGF0YSBldmVudHMgaWYgdGhleSBhcmUgYXNrZWQgZm9yXG4vLyBFbnN1cmUgcmVhZGFibGUgbGlzdGVuZXJzIGV2ZW50dWFsbHkgZ2V0IHNvbWV0aGluZ1xuUmVhZGFibGUucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gKGV2LCBmbikge1xuICB2YXIgcmVzID0gU3RyZWFtLnByb3RvdHlwZS5vbi5jYWxsKHRoaXMsIGV2LCBmbik7XG5cbiAgaWYgKGV2ID09PSAnZGF0YScpIHtcbiAgICAvLyBTdGFydCBmbG93aW5nIG9uIG5leHQgdGljayBpZiBzdHJlYW0gaXNuJ3QgZXhwbGljaXRseSBwYXVzZWRcbiAgICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nICE9PSBmYWxzZSkgdGhpcy5yZXN1bWUoKTtcbiAgfSBlbHNlIGlmIChldiA9PT0gJ3JlYWRhYmxlJykge1xuICAgIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gICAgaWYgKCFzdGF0ZS5lbmRFbWl0dGVkICYmICFzdGF0ZS5yZWFkYWJsZUxpc3RlbmluZykge1xuICAgICAgc3RhdGUucmVhZGFibGVMaXN0ZW5pbmcgPSBzdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlO1xuICAgICAgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gZmFsc2U7XG4gICAgICBpZiAoIXN0YXRlLnJlYWRpbmcpIHtcbiAgICAgICAgcG5hLm5leHRUaWNrKG5SZWFkaW5nTmV4dFRpY2ssIHRoaXMpO1xuICAgICAgfSBlbHNlIGlmIChzdGF0ZS5sZW5ndGgpIHtcbiAgICAgICAgZW1pdFJlYWRhYmxlKHRoaXMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXM7XG59O1xuUmVhZGFibGUucHJvdG90eXBlLmFkZExpc3RlbmVyID0gUmVhZGFibGUucHJvdG90eXBlLm9uO1xuXG5mdW5jdGlvbiBuUmVhZGluZ05leHRUaWNrKHNlbGYpIHtcbiAgZGVidWcoJ3JlYWRhYmxlIG5leHR0aWNrIHJlYWQgMCcpO1xuICBzZWxmLnJlYWQoMCk7XG59XG5cbi8vIHBhdXNlKCkgYW5kIHJlc3VtZSgpIGFyZSByZW1uYW50cyBvZiB0aGUgbGVnYWN5IHJlYWRhYmxlIHN0cmVhbSBBUElcbi8vIElmIHRoZSB1c2VyIHVzZXMgdGhlbSwgdGhlbiBzd2l0Y2ggaW50byBvbGQgbW9kZS5cblJlYWRhYmxlLnByb3RvdHlwZS5yZXN1bWUgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gIGlmICghc3RhdGUuZmxvd2luZykge1xuICAgIGRlYnVnKCdyZXN1bWUnKTtcbiAgICBzdGF0ZS5mbG93aW5nID0gdHJ1ZTtcbiAgICByZXN1bWUodGhpcywgc3RhdGUpO1xuICB9XG4gIHJldHVybiB0aGlzO1xufTtcblxuZnVuY3Rpb24gcmVzdW1lKHN0cmVhbSwgc3RhdGUpIHtcbiAgaWYgKCFzdGF0ZS5yZXN1bWVTY2hlZHVsZWQpIHtcbiAgICBzdGF0ZS5yZXN1bWVTY2hlZHVsZWQgPSB0cnVlO1xuICAgIHBuYS5uZXh0VGljayhyZXN1bWVfLCBzdHJlYW0sIHN0YXRlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXN1bWVfKHN0cmVhbSwgc3RhdGUpIHtcbiAgaWYgKCFzdGF0ZS5yZWFkaW5nKSB7XG4gICAgZGVidWcoJ3Jlc3VtZSByZWFkIDAnKTtcbiAgICBzdHJlYW0ucmVhZCgwKTtcbiAgfVxuXG4gIHN0YXRlLnJlc3VtZVNjaGVkdWxlZCA9IGZhbHNlO1xuICBzdGF0ZS5hd2FpdERyYWluID0gMDtcbiAgc3RyZWFtLmVtaXQoJ3Jlc3VtZScpO1xuICBmbG93KHN0cmVhbSk7XG4gIGlmIChzdGF0ZS5mbG93aW5nICYmICFzdGF0ZS5yZWFkaW5nKSBzdHJlYW0ucmVhZCgwKTtcbn1cblxuUmVhZGFibGUucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24gKCkge1xuICBkZWJ1ZygnY2FsbCBwYXVzZSBmbG93aW5nPSVqJywgdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nKTtcbiAgaWYgKGZhbHNlICE9PSB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcpIHtcbiAgICBkZWJ1ZygncGF1c2UnKTtcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmVtaXQoJ3BhdXNlJyk7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5mdW5jdGlvbiBmbG93KHN0cmVhbSkge1xuICB2YXIgc3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGU7XG4gIGRlYnVnKCdmbG93Jywgc3RhdGUuZmxvd2luZyk7XG4gIHdoaWxlIChzdGF0ZS5mbG93aW5nICYmIHN0cmVhbS5yZWFkKCkgIT09IG51bGwpIHt9XG59XG5cbi8vIHdyYXAgYW4gb2xkLXN0eWxlIHN0cmVhbSBhcyB0aGUgYXN5bmMgZGF0YSBzb3VyY2UuXG4vLyBUaGlzIGlzICpub3QqIHBhcnQgb2YgdGhlIHJlYWRhYmxlIHN0cmVhbSBpbnRlcmZhY2UuXG4vLyBJdCBpcyBhbiB1Z2x5IHVuZm9ydHVuYXRlIG1lc3Mgb2YgaGlzdG9yeS5cblJlYWRhYmxlLnByb3RvdHlwZS53cmFwID0gZnVuY3Rpb24gKHN0cmVhbSkge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gIHZhciBwYXVzZWQgPSBmYWxzZTtcblxuICBzdHJlYW0ub24oJ2VuZCcsIGZ1bmN0aW9uICgpIHtcbiAgICBkZWJ1Zygnd3JhcHBlZCBlbmQnKTtcbiAgICBpZiAoc3RhdGUuZGVjb2RlciAmJiAhc3RhdGUuZW5kZWQpIHtcbiAgICAgIHZhciBjaHVuayA9IHN0YXRlLmRlY29kZXIuZW5kKCk7XG4gICAgICBpZiAoY2h1bmsgJiYgY2h1bmsubGVuZ3RoKSBfdGhpcy5wdXNoKGNodW5rKTtcbiAgICB9XG5cbiAgICBfdGhpcy5wdXNoKG51bGwpO1xuICB9KTtcblxuICBzdHJlYW0ub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHtcbiAgICBkZWJ1Zygnd3JhcHBlZCBkYXRhJyk7XG4gICAgaWYgKHN0YXRlLmRlY29kZXIpIGNodW5rID0gc3RhdGUuZGVjb2Rlci53cml0ZShjaHVuayk7XG5cbiAgICAvLyBkb24ndCBza2lwIG92ZXIgZmFsc3kgdmFsdWVzIGluIG9iamVjdE1vZGVcbiAgICBpZiAoc3RhdGUub2JqZWN0TW9kZSAmJiAoY2h1bmsgPT09IG51bGwgfHwgY2h1bmsgPT09IHVuZGVmaW5lZCkpIHJldHVybjtlbHNlIGlmICghc3RhdGUub2JqZWN0TW9kZSAmJiAoIWNodW5rIHx8ICFjaHVuay5sZW5ndGgpKSByZXR1cm47XG5cbiAgICB2YXIgcmV0ID0gX3RoaXMucHVzaChjaHVuayk7XG4gICAgaWYgKCFyZXQpIHtcbiAgICAgIHBhdXNlZCA9IHRydWU7XG4gICAgICBzdHJlYW0ucGF1c2UoKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIHByb3h5IGFsbCB0aGUgb3RoZXIgbWV0aG9kcy5cbiAgLy8gaW1wb3J0YW50IHdoZW4gd3JhcHBpbmcgZmlsdGVycyBhbmQgZHVwbGV4ZXMuXG4gIGZvciAodmFyIGkgaW4gc3RyZWFtKSB7XG4gICAgaWYgKHRoaXNbaV0gPT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygc3RyZWFtW2ldID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzW2ldID0gZnVuY3Rpb24gKG1ldGhvZCkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBzdHJlYW1bbWV0aG9kXS5hcHBseShzdHJlYW0sIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG4gICAgICB9KGkpO1xuICAgIH1cbiAgfVxuXG4gIC8vIHByb3h5IGNlcnRhaW4gaW1wb3J0YW50IGV2ZW50cy5cbiAgZm9yICh2YXIgbiA9IDA7IG4gPCBrUHJveHlFdmVudHMubGVuZ3RoOyBuKyspIHtcbiAgICBzdHJlYW0ub24oa1Byb3h5RXZlbnRzW25dLCB0aGlzLmVtaXQuYmluZCh0aGlzLCBrUHJveHlFdmVudHNbbl0pKTtcbiAgfVxuXG4gIC8vIHdoZW4gd2UgdHJ5IHRvIGNvbnN1bWUgc29tZSBtb3JlIGJ5dGVzLCBzaW1wbHkgdW5wYXVzZSB0aGVcbiAgLy8gdW5kZXJseWluZyBzdHJlYW0uXG4gIHRoaXMuX3JlYWQgPSBmdW5jdGlvbiAobikge1xuICAgIGRlYnVnKCd3cmFwcGVkIF9yZWFkJywgbik7XG4gICAgaWYgKHBhdXNlZCkge1xuICAgICAgcGF1c2VkID0gZmFsc2U7XG4gICAgICBzdHJlYW0ucmVzdW1lKCk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlYWRhYmxlLnByb3RvdHlwZSwgJ3JlYWRhYmxlSGlnaFdhdGVyTWFyaycsIHtcbiAgLy8gbWFraW5nIGl0IGV4cGxpY2l0IHRoaXMgcHJvcGVydHkgaXMgbm90IGVudW1lcmFibGVcbiAgLy8gYmVjYXVzZSBvdGhlcndpc2Ugc29tZSBwcm90b3R5cGUgbWFuaXB1bGF0aW9uIGluXG4gIC8vIHVzZXJsYW5kIHdpbGwgZmFpbFxuICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuaGlnaFdhdGVyTWFyaztcbiAgfVxufSk7XG5cbi8vIGV4cG9zZWQgZm9yIHRlc3RpbmcgcHVycG9zZXMgb25seS5cblJlYWRhYmxlLl9mcm9tTGlzdCA9IGZyb21MaXN0O1xuXG4vLyBQbHVjayBvZmYgbiBieXRlcyBmcm9tIGFuIGFycmF5IG9mIGJ1ZmZlcnMuXG4vLyBMZW5ndGggaXMgdGhlIGNvbWJpbmVkIGxlbmd0aHMgb2YgYWxsIHRoZSBidWZmZXJzIGluIHRoZSBsaXN0LlxuLy8gVGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBiZSBpbmxpbmFibGUsIHNvIHBsZWFzZSB0YWtlIGNhcmUgd2hlbiBtYWtpbmdcbi8vIGNoYW5nZXMgdG8gdGhlIGZ1bmN0aW9uIGJvZHkuXG5mdW5jdGlvbiBmcm9tTGlzdChuLCBzdGF0ZSkge1xuICAvLyBub3RoaW5nIGJ1ZmZlcmVkXG4gIGlmIChzdGF0ZS5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xuXG4gIHZhciByZXQ7XG4gIGlmIChzdGF0ZS5vYmplY3RNb2RlKSByZXQgPSBzdGF0ZS5idWZmZXIuc2hpZnQoKTtlbHNlIGlmICghbiB8fCBuID49IHN0YXRlLmxlbmd0aCkge1xuICAgIC8vIHJlYWQgaXQgYWxsLCB0cnVuY2F0ZSB0aGUgbGlzdFxuICAgIGlmIChzdGF0ZS5kZWNvZGVyKSByZXQgPSBzdGF0ZS5idWZmZXIuam9pbignJyk7ZWxzZSBpZiAoc3RhdGUuYnVmZmVyLmxlbmd0aCA9PT0gMSkgcmV0ID0gc3RhdGUuYnVmZmVyLmhlYWQuZGF0YTtlbHNlIHJldCA9IHN0YXRlLmJ1ZmZlci5jb25jYXQoc3RhdGUubGVuZ3RoKTtcbiAgICBzdGF0ZS5idWZmZXIuY2xlYXIoKTtcbiAgfSBlbHNlIHtcbiAgICAvLyByZWFkIHBhcnQgb2YgbGlzdFxuICAgIHJldCA9IGZyb21MaXN0UGFydGlhbChuLCBzdGF0ZS5idWZmZXIsIHN0YXRlLmRlY29kZXIpO1xuICB9XG5cbiAgcmV0dXJuIHJldDtcbn1cblxuLy8gRXh0cmFjdHMgb25seSBlbm91Z2ggYnVmZmVyZWQgZGF0YSB0byBzYXRpc2Z5IHRoZSBhbW91bnQgcmVxdWVzdGVkLlxuLy8gVGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBiZSBpbmxpbmFibGUsIHNvIHBsZWFzZSB0YWtlIGNhcmUgd2hlbiBtYWtpbmdcbi8vIGNoYW5nZXMgdG8gdGhlIGZ1bmN0aW9uIGJvZHkuXG5mdW5jdGlvbiBmcm9tTGlzdFBhcnRpYWwobiwgbGlzdCwgaGFzU3RyaW5ncykge1xuICB2YXIgcmV0O1xuICBpZiAobiA8IGxpc3QuaGVhZC5kYXRhLmxlbmd0aCkge1xuICAgIC8vIHNsaWNlIGlzIHRoZSBzYW1lIGZvciBidWZmZXJzIGFuZCBzdHJpbmdzXG4gICAgcmV0ID0gbGlzdC5oZWFkLmRhdGEuc2xpY2UoMCwgbik7XG4gICAgbGlzdC5oZWFkLmRhdGEgPSBsaXN0LmhlYWQuZGF0YS5zbGljZShuKTtcbiAgfSBlbHNlIGlmIChuID09PSBsaXN0LmhlYWQuZGF0YS5sZW5ndGgpIHtcbiAgICAvLyBmaXJzdCBjaHVuayBpcyBhIHBlcmZlY3QgbWF0Y2hcbiAgICByZXQgPSBsaXN0LnNoaWZ0KCk7XG4gIH0gZWxzZSB7XG4gICAgLy8gcmVzdWx0IHNwYW5zIG1vcmUgdGhhbiBvbmUgYnVmZmVyXG4gICAgcmV0ID0gaGFzU3RyaW5ncyA/IGNvcHlGcm9tQnVmZmVyU3RyaW5nKG4sIGxpc3QpIDogY29weUZyb21CdWZmZXIobiwgbGlzdCk7XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cblxuLy8gQ29waWVzIGEgc3BlY2lmaWVkIGFtb3VudCBvZiBjaGFyYWN0ZXJzIGZyb20gdGhlIGxpc3Qgb2YgYnVmZmVyZWQgZGF0YVxuLy8gY2h1bmtzLlxuLy8gVGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBiZSBpbmxpbmFibGUsIHNvIHBsZWFzZSB0YWtlIGNhcmUgd2hlbiBtYWtpbmdcbi8vIGNoYW5nZXMgdG8gdGhlIGZ1bmN0aW9uIGJvZHkuXG5mdW5jdGlvbiBjb3B5RnJvbUJ1ZmZlclN0cmluZyhuLCBsaXN0KSB7XG4gIHZhciBwID0gbGlzdC5oZWFkO1xuICB2YXIgYyA9IDE7XG4gIHZhciByZXQgPSBwLmRhdGE7XG4gIG4gLT0gcmV0Lmxlbmd0aDtcbiAgd2hpbGUgKHAgPSBwLm5leHQpIHtcbiAgICB2YXIgc3RyID0gcC5kYXRhO1xuICAgIHZhciBuYiA9IG4gPiBzdHIubGVuZ3RoID8gc3RyLmxlbmd0aCA6IG47XG4gICAgaWYgKG5iID09PSBzdHIubGVuZ3RoKSByZXQgKz0gc3RyO2Vsc2UgcmV0ICs9IHN0ci5zbGljZSgwLCBuKTtcbiAgICBuIC09IG5iO1xuICAgIGlmIChuID09PSAwKSB7XG4gICAgICBpZiAobmIgPT09IHN0ci5sZW5ndGgpIHtcbiAgICAgICAgKytjO1xuICAgICAgICBpZiAocC5uZXh0KSBsaXN0LmhlYWQgPSBwLm5leHQ7ZWxzZSBsaXN0LmhlYWQgPSBsaXN0LnRhaWwgPSBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGlzdC5oZWFkID0gcDtcbiAgICAgICAgcC5kYXRhID0gc3RyLnNsaWNlKG5iKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICArK2M7XG4gIH1cbiAgbGlzdC5sZW5ndGggLT0gYztcbiAgcmV0dXJuIHJldDtcbn1cblxuLy8gQ29waWVzIGEgc3BlY2lmaWVkIGFtb3VudCBvZiBieXRlcyBmcm9tIHRoZSBsaXN0IG9mIGJ1ZmZlcmVkIGRhdGEgY2h1bmtzLlxuLy8gVGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBiZSBpbmxpbmFibGUsIHNvIHBsZWFzZSB0YWtlIGNhcmUgd2hlbiBtYWtpbmdcbi8vIGNoYW5nZXMgdG8gdGhlIGZ1bmN0aW9uIGJvZHkuXG5mdW5jdGlvbiBjb3B5RnJvbUJ1ZmZlcihuLCBsaXN0KSB7XG4gIHZhciByZXQgPSBCdWZmZXIuYWxsb2NVbnNhZmUobik7XG4gIHZhciBwID0gbGlzdC5oZWFkO1xuICB2YXIgYyA9IDE7XG4gIHAuZGF0YS5jb3B5KHJldCk7XG4gIG4gLT0gcC5kYXRhLmxlbmd0aDtcbiAgd2hpbGUgKHAgPSBwLm5leHQpIHtcbiAgICB2YXIgYnVmID0gcC5kYXRhO1xuICAgIHZhciBuYiA9IG4gPiBidWYubGVuZ3RoID8gYnVmLmxlbmd0aCA6IG47XG4gICAgYnVmLmNvcHkocmV0LCByZXQubGVuZ3RoIC0gbiwgMCwgbmIpO1xuICAgIG4gLT0gbmI7XG4gICAgaWYgKG4gPT09IDApIHtcbiAgICAgIGlmIChuYiA9PT0gYnVmLmxlbmd0aCkge1xuICAgICAgICArK2M7XG4gICAgICAgIGlmIChwLm5leHQpIGxpc3QuaGVhZCA9IHAubmV4dDtlbHNlIGxpc3QuaGVhZCA9IGxpc3QudGFpbCA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsaXN0LmhlYWQgPSBwO1xuICAgICAgICBwLmRhdGEgPSBidWYuc2xpY2UobmIpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICAgICsrYztcbiAgfVxuICBsaXN0Lmxlbmd0aCAtPSBjO1xuICByZXR1cm4gcmV0O1xufVxuXG5mdW5jdGlvbiBlbmRSZWFkYWJsZShzdHJlYW0pIHtcbiAgdmFyIHN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlO1xuXG4gIC8vIElmIHdlIGdldCBoZXJlIGJlZm9yZSBjb25zdW1pbmcgYWxsIHRoZSBieXRlcywgdGhlbiB0aGF0IGlzIGFcbiAgLy8gYnVnIGluIG5vZGUuICBTaG91bGQgbmV2ZXIgaGFwcGVuLlxuICBpZiAoc3RhdGUubGVuZ3RoID4gMCkgdGhyb3cgbmV3IEVycm9yKCdcImVuZFJlYWRhYmxlKClcIiBjYWxsZWQgb24gbm9uLWVtcHR5IHN0cmVhbScpO1xuXG4gIGlmICghc3RhdGUuZW5kRW1pdHRlZCkge1xuICAgIHN0YXRlLmVuZGVkID0gdHJ1ZTtcbiAgICBwbmEubmV4dFRpY2soZW5kUmVhZGFibGVOVCwgc3RhdGUsIHN0cmVhbSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZW5kUmVhZGFibGVOVChzdGF0ZSwgc3RyZWFtKSB7XG4gIC8vIENoZWNrIHRoYXQgd2UgZGlkbid0IGdldCBvbmUgbGFzdCB1bnNoaWZ0LlxuICBpZiAoIXN0YXRlLmVuZEVtaXR0ZWQgJiYgc3RhdGUubGVuZ3RoID09PSAwKSB7XG4gICAgc3RhdGUuZW5kRW1pdHRlZCA9IHRydWU7XG4gICAgc3RyZWFtLnJlYWRhYmxlID0gZmFsc2U7XG4gICAgc3RyZWFtLmVtaXQoJ2VuZCcpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluZGV4T2YoeHMsIHgpIHtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSB4cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBpZiAoeHNbaV0gPT09IHgpIHJldHVybiBpO1xuICB9XG4gIHJldHVybiAtMTtcbn0iLAogICAgIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyBhIHRyYW5zZm9ybSBzdHJlYW0gaXMgYSByZWFkYWJsZS93cml0YWJsZSBzdHJlYW0gd2hlcmUgeW91IGRvXG4vLyBzb21ldGhpbmcgd2l0aCB0aGUgZGF0YS4gIFNvbWV0aW1lcyBpdCdzIGNhbGxlZCBhIFwiZmlsdGVyXCIsXG4vLyBidXQgdGhhdCdzIG5vdCBhIGdyZWF0IG5hbWUgZm9yIGl0LCBzaW5jZSB0aGF0IGltcGxpZXMgYSB0aGluZyB3aGVyZVxuLy8gc29tZSBiaXRzIHBhc3MgdGhyb3VnaCwgYW5kIG90aGVycyBhcmUgc2ltcGx5IGlnbm9yZWQuICAoVGhhdCB3b3VsZFxuLy8gYmUgYSB2YWxpZCBleGFtcGxlIG9mIGEgdHJhbnNmb3JtLCBvZiBjb3Vyc2UuKVxuLy9cbi8vIFdoaWxlIHRoZSBvdXRwdXQgaXMgY2F1c2FsbHkgcmVsYXRlZCB0byB0aGUgaW5wdXQsIGl0J3Mgbm90IGFcbi8vIG5lY2Vzc2FyaWx5IHN5bW1ldHJpYyBvciBzeW5jaHJvbm91cyB0cmFuc2Zvcm1hdGlvbi4gIEZvciBleGFtcGxlLFxuLy8gYSB6bGliIHN0cmVhbSBtaWdodCB0YWtlIG11bHRpcGxlIHBsYWluLXRleHQgd3JpdGVzKCksIGFuZCB0aGVuXG4vLyBlbWl0IGEgc2luZ2xlIGNvbXByZXNzZWQgY2h1bmsgc29tZSB0aW1lIGluIHRoZSBmdXR1cmUuXG4vL1xuLy8gSGVyZSdzIGhvdyB0aGlzIHdvcmtzOlxuLy9cbi8vIFRoZSBUcmFuc2Zvcm0gc3RyZWFtIGhhcyBhbGwgdGhlIGFzcGVjdHMgb2YgdGhlIHJlYWRhYmxlIGFuZCB3cml0YWJsZVxuLy8gc3RyZWFtIGNsYXNzZXMuICBXaGVuIHlvdSB3cml0ZShjaHVuayksIHRoYXQgY2FsbHMgX3dyaXRlKGNodW5rLGNiKVxuLy8gaW50ZXJuYWxseSwgYW5kIHJldHVybnMgZmFsc2UgaWYgdGhlcmUncyBhIGxvdCBvZiBwZW5kaW5nIHdyaXRlc1xuLy8gYnVmZmVyZWQgdXAuICBXaGVuIHlvdSBjYWxsIHJlYWQoKSwgdGhhdCBjYWxscyBfcmVhZChuKSB1bnRpbFxuLy8gdGhlcmUncyBlbm91Z2ggcGVuZGluZyByZWFkYWJsZSBkYXRhIGJ1ZmZlcmVkIHVwLlxuLy9cbi8vIEluIGEgdHJhbnNmb3JtIHN0cmVhbSwgdGhlIHdyaXR0ZW4gZGF0YSBpcyBwbGFjZWQgaW4gYSBidWZmZXIuICBXaGVuXG4vLyBfcmVhZChuKSBpcyBjYWxsZWQsIGl0IHRyYW5zZm9ybXMgdGhlIHF1ZXVlZCB1cCBkYXRhLCBjYWxsaW5nIHRoZVxuLy8gYnVmZmVyZWQgX3dyaXRlIGNiJ3MgYXMgaXQgY29uc3VtZXMgY2h1bmtzLiAgSWYgY29uc3VtaW5nIGEgc2luZ2xlXG4vLyB3cml0dGVuIGNodW5rIHdvdWxkIHJlc3VsdCBpbiBtdWx0aXBsZSBvdXRwdXQgY2h1bmtzLCB0aGVuIHRoZSBmaXJzdFxuLy8gb3V0cHV0dGVkIGJpdCBjYWxscyB0aGUgcmVhZGNiLCBhbmQgc3Vic2VxdWVudCBjaHVua3MganVzdCBnbyBpbnRvXG4vLyB0aGUgcmVhZCBidWZmZXIsIGFuZCB3aWxsIGNhdXNlIGl0IHRvIGVtaXQgJ3JlYWRhYmxlJyBpZiBuZWNlc3NhcnkuXG4vL1xuLy8gVGhpcyB3YXksIGJhY2stcHJlc3N1cmUgaXMgYWN0dWFsbHkgZGV0ZXJtaW5lZCBieSB0aGUgcmVhZGluZyBzaWRlLFxuLy8gc2luY2UgX3JlYWQgaGFzIHRvIGJlIGNhbGxlZCB0byBzdGFydCBwcm9jZXNzaW5nIGEgbmV3IGNodW5rLiAgSG93ZXZlcixcbi8vIGEgcGF0aG9sb2dpY2FsIGluZmxhdGUgdHlwZSBvZiB0cmFuc2Zvcm0gY2FuIGNhdXNlIGV4Y2Vzc2l2ZSBidWZmZXJpbmdcbi8vIGhlcmUuICBGb3IgZXhhbXBsZSwgaW1hZ2luZSBhIHN0cmVhbSB3aGVyZSBldmVyeSBieXRlIG9mIGlucHV0IGlzXG4vLyBpbnRlcnByZXRlZCBhcyBhbiBpbnRlZ2VyIGZyb20gMC0yNTUsIGFuZCB0aGVuIHJlc3VsdHMgaW4gdGhhdCBtYW55XG4vLyBieXRlcyBvZiBvdXRwdXQuICBXcml0aW5nIHRoZSA0IGJ5dGVzIHtmZixmZixmZixmZn0gd291bGQgcmVzdWx0IGluXG4vLyAxa2Igb2YgZGF0YSBiZWluZyBvdXRwdXQuICBJbiB0aGlzIGNhc2UsIHlvdSBjb3VsZCB3cml0ZSBhIHZlcnkgc21hbGxcbi8vIGFtb3VudCBvZiBpbnB1dCwgYW5kIGVuZCB1cCB3aXRoIGEgdmVyeSBsYXJnZSBhbW91bnQgb2Ygb3V0cHV0LiAgSW5cbi8vIHN1Y2ggYSBwYXRob2xvZ2ljYWwgaW5mbGF0aW5nIG1lY2hhbmlzbSwgdGhlcmUnZCBiZSBubyB3YXkgdG8gdGVsbFxuLy8gdGhlIHN5c3RlbSB0byBzdG9wIGRvaW5nIHRoZSB0cmFuc2Zvcm0uICBBIHNpbmdsZSA0TUIgd3JpdGUgY291bGRcbi8vIGNhdXNlIHRoZSBzeXN0ZW0gdG8gcnVuIG91dCBvZiBtZW1vcnkuXG4vL1xuLy8gSG93ZXZlciwgZXZlbiBpbiBzdWNoIGEgcGF0aG9sb2dpY2FsIGNhc2UsIG9ubHkgYSBzaW5nbGUgd3JpdHRlbiBjaHVua1xuLy8gd291bGQgYmUgY29uc3VtZWQsIGFuZCB0aGVuIHRoZSByZXN0IHdvdWxkIHdhaXQgKHVuLXRyYW5zZm9ybWVkKSB1bnRpbFxuLy8gdGhlIHJlc3VsdHMgb2YgdGhlIHByZXZpb3VzIHRyYW5zZm9ybWVkIGNodW5rIHdlcmUgY29uc3VtZWQuXG5cbid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBUcmFuc2Zvcm07XG5cbnZhciBEdXBsZXggPSByZXF1aXJlKCcuL19zdHJlYW1fZHVwbGV4Jyk7XG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgdXRpbCA9IE9iamVjdC5jcmVhdGUocmVxdWlyZSgnY29yZS11dGlsLWlzJykpO1xudXRpbC5pbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxudXRpbC5pbmhlcml0cyhUcmFuc2Zvcm0sIER1cGxleCk7XG5cbmZ1bmN0aW9uIGFmdGVyVHJhbnNmb3JtKGVyLCBkYXRhKSB7XG4gIHZhciB0cyA9IHRoaXMuX3RyYW5zZm9ybVN0YXRlO1xuICB0cy50cmFuc2Zvcm1pbmcgPSBmYWxzZTtcblxuICB2YXIgY2IgPSB0cy53cml0ZWNiO1xuXG4gIGlmICghY2IpIHtcbiAgICByZXR1cm4gdGhpcy5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcignd3JpdGUgY2FsbGJhY2sgY2FsbGVkIG11bHRpcGxlIHRpbWVzJykpO1xuICB9XG5cbiAgdHMud3JpdGVjaHVuayA9IG51bGw7XG4gIHRzLndyaXRlY2IgPSBudWxsO1xuXG4gIGlmIChkYXRhICE9IG51bGwpIC8vIHNpbmdsZSBlcXVhbHMgY2hlY2sgZm9yIGJvdGggYG51bGxgIGFuZCBgdW5kZWZpbmVkYFxuICAgIHRoaXMucHVzaChkYXRhKTtcblxuICBjYihlcik7XG5cbiAgdmFyIHJzID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgcnMucmVhZGluZyA9IGZhbHNlO1xuICBpZiAocnMubmVlZFJlYWRhYmxlIHx8IHJzLmxlbmd0aCA8IHJzLmhpZ2hXYXRlck1hcmspIHtcbiAgICB0aGlzLl9yZWFkKHJzLmhpZ2hXYXRlck1hcmspO1xuICB9XG59XG5cbmZ1bmN0aW9uIFRyYW5zZm9ybShvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBUcmFuc2Zvcm0pKSByZXR1cm4gbmV3IFRyYW5zZm9ybShvcHRpb25zKTtcblxuICBEdXBsZXguY2FsbCh0aGlzLCBvcHRpb25zKTtcblxuICB0aGlzLl90cmFuc2Zvcm1TdGF0ZSA9IHtcbiAgICBhZnRlclRyYW5zZm9ybTogYWZ0ZXJUcmFuc2Zvcm0uYmluZCh0aGlzKSxcbiAgICBuZWVkVHJhbnNmb3JtOiBmYWxzZSxcbiAgICB0cmFuc2Zvcm1pbmc6IGZhbHNlLFxuICAgIHdyaXRlY2I6IG51bGwsXG4gICAgd3JpdGVjaHVuazogbnVsbCxcbiAgICB3cml0ZWVuY29kaW5nOiBudWxsXG4gIH07XG5cbiAgLy8gc3RhcnQgb3V0IGFza2luZyBmb3IgYSByZWFkYWJsZSBldmVudCBvbmNlIGRhdGEgaXMgdHJhbnNmb3JtZWQuXG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZTtcblxuICAvLyB3ZSBoYXZlIGltcGxlbWVudGVkIHRoZSBfcmVhZCBtZXRob2QsIGFuZCBkb25lIHRoZSBvdGhlciB0aGluZ3NcbiAgLy8gdGhhdCBSZWFkYWJsZSB3YW50cyBiZWZvcmUgdGhlIGZpcnN0IF9yZWFkIGNhbGwsIHNvIHVuc2V0IHRoZVxuICAvLyBzeW5jIGd1YXJkIGZsYWcuXG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUuc3luYyA9IGZhbHNlO1xuXG4gIGlmIChvcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLnRyYW5zZm9ybSA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fdHJhbnNmb3JtID0gb3B0aW9ucy50cmFuc2Zvcm07XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuZmx1c2ggPT09ICdmdW5jdGlvbicpIHRoaXMuX2ZsdXNoID0gb3B0aW9ucy5mbHVzaDtcbiAgfVxuXG4gIC8vIFdoZW4gdGhlIHdyaXRhYmxlIHNpZGUgZmluaXNoZXMsIHRoZW4gZmx1c2ggb3V0IGFueXRoaW5nIHJlbWFpbmluZy5cbiAgdGhpcy5vbigncHJlZmluaXNoJywgcHJlZmluaXNoKTtcbn1cblxuZnVuY3Rpb24gcHJlZmluaXNoKCkge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gIGlmICh0eXBlb2YgdGhpcy5fZmx1c2ggPT09ICdmdW5jdGlvbicpIHtcbiAgICB0aGlzLl9mbHVzaChmdW5jdGlvbiAoZXIsIGRhdGEpIHtcbiAgICAgIGRvbmUoX3RoaXMsIGVyLCBkYXRhKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBkb25lKHRoaXMsIG51bGwsIG51bGwpO1xuICB9XG59XG5cblRyYW5zZm9ybS5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcpIHtcbiAgdGhpcy5fdHJhbnNmb3JtU3RhdGUubmVlZFRyYW5zZm9ybSA9IGZhbHNlO1xuICByZXR1cm4gRHVwbGV4LnByb3RvdHlwZS5wdXNoLmNhbGwodGhpcywgY2h1bmssIGVuY29kaW5nKTtcbn07XG5cbi8vIFRoaXMgaXMgdGhlIHBhcnQgd2hlcmUgeW91IGRvIHN0dWZmIVxuLy8gb3ZlcnJpZGUgdGhpcyBmdW5jdGlvbiBpbiBpbXBsZW1lbnRhdGlvbiBjbGFzc2VzLlxuLy8gJ2NodW5rJyBpcyBhbiBpbnB1dCBjaHVuay5cbi8vXG4vLyBDYWxsIGBwdXNoKG5ld0NodW5rKWAgdG8gcGFzcyBhbG9uZyB0cmFuc2Zvcm1lZCBvdXRwdXRcbi8vIHRvIHRoZSByZWFkYWJsZSBzaWRlLiAgWW91IG1heSBjYWxsICdwdXNoJyB6ZXJvIG9yIG1vcmUgdGltZXMuXG4vL1xuLy8gQ2FsbCBgY2IoZXJyKWAgd2hlbiB5b3UgYXJlIGRvbmUgd2l0aCB0aGlzIGNodW5rLiAgSWYgeW91IHBhc3Ncbi8vIGFuIGVycm9yLCB0aGVuIHRoYXQnbGwgcHV0IHRoZSBodXJ0IG9uIHRoZSB3aG9sZSBvcGVyYXRpb24uICBJZiB5b3Vcbi8vIG5ldmVyIGNhbGwgY2IoKSwgdGhlbiB5b3UnbGwgbmV2ZXIgZ2V0IGFub3RoZXIgY2h1bmsuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLl90cmFuc2Zvcm0gPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICB0aHJvdyBuZXcgRXJyb3IoJ190cmFuc2Zvcm0oKSBpcyBub3QgaW1wbGVtZW50ZWQnKTtcbn07XG5cblRyYW5zZm9ybS5wcm90b3R5cGUuX3dyaXRlID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgdmFyIHRzID0gdGhpcy5fdHJhbnNmb3JtU3RhdGU7XG4gIHRzLndyaXRlY2IgPSBjYjtcbiAgdHMud3JpdGVjaHVuayA9IGNodW5rO1xuICB0cy53cml0ZWVuY29kaW5nID0gZW5jb2Rpbmc7XG4gIGlmICghdHMudHJhbnNmb3JtaW5nKSB7XG4gICAgdmFyIHJzID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgICBpZiAodHMubmVlZFRyYW5zZm9ybSB8fCBycy5uZWVkUmVhZGFibGUgfHwgcnMubGVuZ3RoIDwgcnMuaGlnaFdhdGVyTWFyaykgdGhpcy5fcmVhZChycy5oaWdoV2F0ZXJNYXJrKTtcbiAgfVxufTtcblxuLy8gRG9lc24ndCBtYXR0ZXIgd2hhdCB0aGUgYXJncyBhcmUgaGVyZS5cbi8vIF90cmFuc2Zvcm0gZG9lcyBhbGwgdGhlIHdvcmsuXG4vLyBUaGF0IHdlIGdvdCBoZXJlIG1lYW5zIHRoYXQgdGhlIHJlYWRhYmxlIHNpZGUgd2FudHMgbW9yZSBkYXRhLlxuVHJhbnNmb3JtLnByb3RvdHlwZS5fcmVhZCA9IGZ1bmN0aW9uIChuKSB7XG4gIHZhciB0cyA9IHRoaXMuX3RyYW5zZm9ybVN0YXRlO1xuXG4gIGlmICh0cy53cml0ZWNodW5rICE9PSBudWxsICYmIHRzLndyaXRlY2IgJiYgIXRzLnRyYW5zZm9ybWluZykge1xuICAgIHRzLnRyYW5zZm9ybWluZyA9IHRydWU7XG4gICAgdGhpcy5fdHJhbnNmb3JtKHRzLndyaXRlY2h1bmssIHRzLndyaXRlZW5jb2RpbmcsIHRzLmFmdGVyVHJhbnNmb3JtKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBtYXJrIHRoYXQgd2UgbmVlZCBhIHRyYW5zZm9ybSwgc28gdGhhdCBhbnkgZGF0YSB0aGF0IGNvbWVzIGluXG4gICAgLy8gd2lsbCBnZXQgcHJvY2Vzc2VkLCBub3cgdGhhdCB3ZSd2ZSBhc2tlZCBmb3IgaXQuXG4gICAgdHMubmVlZFRyYW5zZm9ybSA9IHRydWU7XG4gIH1cbn07XG5cblRyYW5zZm9ybS5wcm90b3R5cGUuX2Rlc3Ryb3kgPSBmdW5jdGlvbiAoZXJyLCBjYikge1xuICB2YXIgX3RoaXMyID0gdGhpcztcblxuICBEdXBsZXgucHJvdG90eXBlLl9kZXN0cm95LmNhbGwodGhpcywgZXJyLCBmdW5jdGlvbiAoZXJyMikge1xuICAgIGNiKGVycjIpO1xuICAgIF90aGlzMi5lbWl0KCdjbG9zZScpO1xuICB9KTtcbn07XG5cbmZ1bmN0aW9uIGRvbmUoc3RyZWFtLCBlciwgZGF0YSkge1xuICBpZiAoZXIpIHJldHVybiBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcik7XG5cbiAgaWYgKGRhdGEgIT0gbnVsbCkgLy8gc2luZ2xlIGVxdWFscyBjaGVjayBmb3IgYm90aCBgbnVsbGAgYW5kIGB1bmRlZmluZWRgXG4gICAgc3RyZWFtLnB1c2goZGF0YSk7XG5cbiAgLy8gaWYgdGhlcmUncyBub3RoaW5nIGluIHRoZSB3cml0ZSBidWZmZXIsIHRoZW4gdGhhdCBtZWFuc1xuICAvLyB0aGF0IG5vdGhpbmcgbW9yZSB3aWxsIGV2ZXIgYmUgcHJvdmlkZWRcbiAgaWYgKHN0cmVhbS5fd3JpdGFibGVTdGF0ZS5sZW5ndGgpIHRocm93IG5ldyBFcnJvcignQ2FsbGluZyB0cmFuc2Zvcm0gZG9uZSB3aGVuIHdzLmxlbmd0aCAhPSAwJyk7XG5cbiAgaWYgKHN0cmVhbS5fdHJhbnNmb3JtU3RhdGUudHJhbnNmb3JtaW5nKSB0aHJvdyBuZXcgRXJyb3IoJ0NhbGxpbmcgdHJhbnNmb3JtIGRvbmUgd2hlbiBzdGlsbCB0cmFuc2Zvcm1pbmcnKTtcblxuICByZXR1cm4gc3RyZWFtLnB1c2gobnVsbCk7XG59IiwKICAgICIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuLy8gYSBwYXNzdGhyb3VnaCBzdHJlYW0uXG4vLyBiYXNpY2FsbHkganVzdCB0aGUgbW9zdCBtaW5pbWFsIHNvcnQgb2YgVHJhbnNmb3JtIHN0cmVhbS5cbi8vIEV2ZXJ5IHdyaXR0ZW4gY2h1bmsgZ2V0cyBvdXRwdXQgYXMtaXMuXG5cbid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBQYXNzVGhyb3VnaDtcblxudmFyIFRyYW5zZm9ybSA9IHJlcXVpcmUoJy4vX3N0cmVhbV90cmFuc2Zvcm0nKTtcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciB1dGlsID0gT2JqZWN0LmNyZWF0ZShyZXF1aXJlKCdjb3JlLXV0aWwtaXMnKSk7XG51dGlsLmluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG51dGlsLmluaGVyaXRzKFBhc3NUaHJvdWdoLCBUcmFuc2Zvcm0pO1xuXG5mdW5jdGlvbiBQYXNzVGhyb3VnaChvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBQYXNzVGhyb3VnaCkpIHJldHVybiBuZXcgUGFzc1Rocm91Z2gob3B0aW9ucyk7XG5cbiAgVHJhbnNmb3JtLmNhbGwodGhpcywgb3B0aW9ucyk7XG59XG5cblBhc3NUaHJvdWdoLnByb3RvdHlwZS5fdHJhbnNmb3JtID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgY2IobnVsbCwgY2h1bmspO1xufTsiLAogICAgInZhciBTdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0nKTtcbmlmIChwcm9jZXNzLmVudi5SRUFEQUJMRV9TVFJFQU0gPT09ICdkaXNhYmxlJyAmJiBTdHJlYW0pIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBTdHJlYW07XG4gIGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IFN0cmVhbS5SZWFkYWJsZTtcbiAgZXhwb3J0cy5SZWFkYWJsZSA9IFN0cmVhbS5SZWFkYWJsZTtcbiAgZXhwb3J0cy5Xcml0YWJsZSA9IFN0cmVhbS5Xcml0YWJsZTtcbiAgZXhwb3J0cy5EdXBsZXggPSBTdHJlYW0uRHVwbGV4O1xuICBleHBvcnRzLlRyYW5zZm9ybSA9IFN0cmVhbS5UcmFuc2Zvcm07XG4gIGV4cG9ydHMuUGFzc1Rocm91Z2ggPSBTdHJlYW0uUGFzc1Rocm91Z2g7XG4gIGV4cG9ydHMuU3RyZWFtID0gU3RyZWFtO1xufSBlbHNlIHtcbiAgZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWIvX3N0cmVhbV9yZWFkYWJsZS5qcycpO1xuICBleHBvcnRzLlN0cmVhbSA9IFN0cmVhbSB8fCBleHBvcnRzO1xuICBleHBvcnRzLlJlYWRhYmxlID0gZXhwb3J0cztcbiAgZXhwb3J0cy5Xcml0YWJsZSA9IHJlcXVpcmUoJy4vbGliL19zdHJlYW1fd3JpdGFibGUuanMnKTtcbiAgZXhwb3J0cy5EdXBsZXggPSByZXF1aXJlKCcuL2xpYi9fc3RyZWFtX2R1cGxleC5qcycpO1xuICBleHBvcnRzLlRyYW5zZm9ybSA9IHJlcXVpcmUoJy4vbGliL19zdHJlYW1fdHJhbnNmb3JtLmpzJyk7XG4gIGV4cG9ydHMuUGFzc1Rocm91Z2ggPSByZXF1aXJlKCcuL2xpYi9fc3RyZWFtX3Bhc3N0aHJvdWdoLmpzJyk7XG59XG4iLAogICAgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9yZWFkYWJsZScpLlBhc3NUaHJvdWdoXG4iLAogICAgInZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xudmFyIFBhc3NUaHJvdWdoID0gcmVxdWlyZSgncmVhZGFibGUtc3RyZWFtL3Bhc3N0aHJvdWdoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBSZWFkYWJsZTogUmVhZGFibGUsXG4gIFdyaXRhYmxlOiBXcml0YWJsZVxufTtcblxudXRpbC5pbmhlcml0cyhSZWFkYWJsZSwgUGFzc1Rocm91Z2gpO1xudXRpbC5pbmhlcml0cyhXcml0YWJsZSwgUGFzc1Rocm91Z2gpO1xuXG4vLyBQYXRjaCB0aGUgZ2l2ZW4gbWV0aG9kIG9mIGluc3RhbmNlIHNvIHRoYXQgdGhlIGNhbGxiYWNrXG4vLyBpcyBleGVjdXRlZCBvbmNlLCBiZWZvcmUgdGhlIGFjdHVhbCBtZXRob2QgaXMgY2FsbGVkIHRoZVxuLy8gZmlyc3QgdGltZS5cbmZ1bmN0aW9uIGJlZm9yZUZpcnN0Q2FsbChpbnN0YW5jZSwgbWV0aG9kLCBjYWxsYmFjaykge1xuICBpbnN0YW5jZVttZXRob2RdID0gZnVuY3Rpb24oKSB7XG4gICAgZGVsZXRlIGluc3RhbmNlW21ldGhvZF07XG4gICAgY2FsbGJhY2suYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICByZXR1cm4gdGhpc1ttZXRob2RdLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIFJlYWRhYmxlKGZuLCBvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBSZWFkYWJsZSkpXG4gICAgcmV0dXJuIG5ldyBSZWFkYWJsZShmbiwgb3B0aW9ucyk7XG5cbiAgUGFzc1Rocm91Z2guY2FsbCh0aGlzLCBvcHRpb25zKTtcblxuICBiZWZvcmVGaXJzdENhbGwodGhpcywgJ19yZWFkJywgZnVuY3Rpb24oKSB7XG4gICAgdmFyIHNvdXJjZSA9IGZuLmNhbGwodGhpcywgb3B0aW9ucyk7XG4gICAgdmFyIGVtaXQgPSB0aGlzLmVtaXQuYmluZCh0aGlzLCAnZXJyb3InKTtcbiAgICBzb3VyY2Uub24oJ2Vycm9yJywgZW1pdCk7XG4gICAgc291cmNlLnBpcGUodGhpcyk7XG4gIH0pO1xuXG4gIHRoaXMuZW1pdCgncmVhZGFibGUnKTtcbn1cblxuZnVuY3Rpb24gV3JpdGFibGUoZm4sIG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFdyaXRhYmxlKSlcbiAgICByZXR1cm4gbmV3IFdyaXRhYmxlKGZuLCBvcHRpb25zKTtcblxuICBQYXNzVGhyb3VnaC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXG4gIGJlZm9yZUZpcnN0Q2FsbCh0aGlzLCAnX3dyaXRlJywgZnVuY3Rpb24oKSB7XG4gICAgdmFyIGRlc3RpbmF0aW9uID0gZm4uY2FsbCh0aGlzLCBvcHRpb25zKTtcbiAgICB2YXIgZW1pdCA9IHRoaXMuZW1pdC5iaW5kKHRoaXMsICdlcnJvcicpO1xuICAgIGRlc3RpbmF0aW9uLm9uKCdlcnJvcicsIGVtaXQpO1xuICAgIHRoaXMucGlwZShkZXN0aW5hdGlvbik7XG4gIH0pO1xuXG4gIHRoaXMuZW1pdCgnd3JpdGFibGUnKTtcbn1cblxuIiwKICAgICIvKiFcbiAqIG5vcm1hbGl6ZS1wYXRoIDxodHRwczovL2dpdGh1Yi5jb20vam9uc2NobGlua2VydC9ub3JtYWxpemUtcGF0aD5cbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxOCwgSm9uIFNjaGxpbmtlcnQuXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihwYXRoLCBzdHJpcFRyYWlsaW5nKSB7XG4gIGlmICh0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdleHBlY3RlZCBwYXRoIHRvIGJlIGEgc3RyaW5nJyk7XG4gIH1cblxuICBpZiAocGF0aCA9PT0gJ1xcXFwnIHx8IHBhdGggPT09ICcvJykgcmV0dXJuICcvJztcblxuICB2YXIgbGVuID0gcGF0aC5sZW5ndGg7XG4gIGlmIChsZW4gPD0gMSkgcmV0dXJuIHBhdGg7XG5cbiAgLy8gZW5zdXJlIHRoYXQgd2luMzIgbmFtZXNwYWNlcyBoYXMgdHdvIGxlYWRpbmcgc2xhc2hlcywgc28gdGhhdCB0aGUgcGF0aCBpc1xuICAvLyBoYW5kbGVkIHByb3Blcmx5IGJ5IHRoZSB3aW4zMiB2ZXJzaW9uIG9mIHBhdGgucGFyc2UoKSBhZnRlciBiZWluZyBub3JtYWxpemVkXG4gIC8vIGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnkvd2luZG93cy9kZXNrdG9wL2FhMzY1MjQ3KHY9dnMuODUpLmFzcHgjbmFtZXNwYWNlc1xuICB2YXIgcHJlZml4ID0gJyc7XG4gIGlmIChsZW4gPiA0ICYmIHBhdGhbM10gPT09ICdcXFxcJykge1xuICAgIHZhciBjaCA9IHBhdGhbMl07XG4gICAgaWYgKChjaCA9PT0gJz8nIHx8IGNoID09PSAnLicpICYmIHBhdGguc2xpY2UoMCwgMikgPT09ICdcXFxcXFxcXCcpIHtcbiAgICAgIHBhdGggPSBwYXRoLnNsaWNlKDIpO1xuICAgICAgcHJlZml4ID0gJy8vJztcbiAgICB9XG4gIH1cblxuICB2YXIgc2VncyA9IHBhdGguc3BsaXQoL1svXFxcXF0rLyk7XG4gIGlmIChzdHJpcFRyYWlsaW5nICE9PSBmYWxzZSAmJiBzZWdzW3NlZ3MubGVuZ3RoIC0gMV0gPT09ICcnKSB7XG4gICAgc2Vncy5wb3AoKTtcbiAgfVxuICByZXR1cm4gcHJlZml4ICsgc2Vncy5qb2luKCcvJyk7XG59O1xuIiwKICAgICIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGZpcnN0IGFyZ3VtZW50IGl0IHJlY2VpdmVzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIEFueSB2YWx1ZS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIGB2YWx1ZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICpcbiAqIGNvbnNvbGUubG9nKF8uaWRlbnRpdHkob2JqZWN0KSA9PT0gb2JqZWN0KTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gaWRlbnRpdHkodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlkZW50aXR5O1xuIiwKICAgICIvKipcbiAqIEEgZmFzdGVyIGFsdGVybmF0aXZlIHRvIGBGdW5jdGlvbiNhcHBseWAsIHRoaXMgZnVuY3Rpb24gaW52b2tlcyBgZnVuY2BcbiAqIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIGB0aGlzQXJnYCBhbmQgdGhlIGFyZ3VtZW50cyBvZiBgYXJnc2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGludm9rZS5cbiAqIEBwYXJhbSB7Kn0gdGhpc0FyZyBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtBcnJheX0gYXJncyBUaGUgYXJndW1lbnRzIHRvIGludm9rZSBgZnVuY2Agd2l0aC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgYGZ1bmNgLlxuICovXG5mdW5jdGlvbiBhcHBseShmdW5jLCB0aGlzQXJnLCBhcmdzKSB7XG4gIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICBjYXNlIDA6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZyk7XG4gICAgY2FzZSAxOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0pO1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gIH1cbiAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpc0FyZywgYXJncyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXBwbHk7XG4iLAogICAgInZhciBhcHBseSA9IHJlcXVpcmUoJy4vX2FwcGx5Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VSZXN0YCB3aGljaCB0cmFuc2Zvcm1zIHRoZSByZXN0IGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD1mdW5jLmxlbmd0aC0xXSBUaGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHJlc3QgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNmb3JtIFRoZSByZXN0IGFycmF5IHRyYW5zZm9ybS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBvdmVyUmVzdChmdW5jLCBzdGFydCwgdHJhbnNmb3JtKSB7XG4gIHN0YXJ0ID0gbmF0aXZlTWF4KHN0YXJ0ID09PSB1bmRlZmluZWQgPyAoZnVuYy5sZW5ndGggLSAxKSA6IHN0YXJ0LCAwKTtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICBpbmRleCA9IC0xLFxuICAgICAgICBsZW5ndGggPSBuYXRpdmVNYXgoYXJncy5sZW5ndGggLSBzdGFydCwgMCksXG4gICAgICAgIGFycmF5ID0gQXJyYXkobGVuZ3RoKTtcblxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICBhcnJheVtpbmRleF0gPSBhcmdzW3N0YXJ0ICsgaW5kZXhdO1xuICAgIH1cbiAgICBpbmRleCA9IC0xO1xuICAgIHZhciBvdGhlckFyZ3MgPSBBcnJheShzdGFydCArIDEpO1xuICAgIHdoaWxlICgrK2luZGV4IDwgc3RhcnQpIHtcbiAgICAgIG90aGVyQXJnc1tpbmRleF0gPSBhcmdzW2luZGV4XTtcbiAgICB9XG4gICAgb3RoZXJBcmdzW3N0YXJ0XSA9IHRyYW5zZm9ybShhcnJheSk7XG4gICAgcmV0dXJuIGFwcGx5KGZ1bmMsIHRoaXMsIG90aGVyQXJncyk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb3ZlclJlc3Q7XG4iLAogICAgIi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBgdmFsdWVgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi40LjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byByZXR1cm4gZnJvbSB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY29uc3RhbnQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gXy50aW1lcygyLCBfLmNvbnN0YW50KHsgJ2EnOiAxIH0pKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzKTtcbiAqIC8vID0+IFt7ICdhJzogMSB9LCB7ICdhJzogMSB9XVxuICpcbiAqIGNvbnNvbGUubG9nKG9iamVjdHNbMF0gPT09IG9iamVjdHNbMV0pO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBjb25zdGFudCh2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbnN0YW50O1xuIiwKICAgICIvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGdsb2JhbGAgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCAmJiBnbG9iYWwuT2JqZWN0ID09PSBPYmplY3QgJiYgZ2xvYmFsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZyZWVHbG9iYWw7XG4iLAogICAgInZhciBmcmVlR2xvYmFsID0gcmVxdWlyZSgnLi9fZnJlZUdsb2JhbCcpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHNlbGZgLiAqL1xudmFyIGZyZWVTZWxmID0gdHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZiAmJiBzZWxmLk9iamVjdCA9PT0gT2JqZWN0ICYmIHNlbGY7XG5cbi8qKiBVc2VkIGFzIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgb2JqZWN0LiAqL1xudmFyIHJvb3QgPSBmcmVlR2xvYmFsIHx8IGZyZWVTZWxmIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gcm9vdDtcbiIsCiAgICAidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIFN5bWJvbCA9IHJvb3QuU3ltYm9sO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN5bWJvbDtcbiIsCiAgICAidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlR2V0VGFnYCB3aGljaCBpZ25vcmVzIGBTeW1ib2wudG9TdHJpbmdUYWdgIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSByYXcgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gZ2V0UmF3VGFnKHZhbHVlKSB7XG4gIHZhciBpc093biA9IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIHN5bVRvU3RyaW5nVGFnKSxcbiAgICAgIHRhZyA9IHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcblxuICB0cnkge1xuICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHVuZGVmaW5lZDtcbiAgICB2YXIgdW5tYXNrZWQgPSB0cnVlO1xuICB9IGNhdGNoIChlKSB7fVxuXG4gIHZhciByZXN1bHQgPSBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgaWYgKHVubWFza2VkKSB7XG4gICAgaWYgKGlzT3duKSB7XG4gICAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB0YWc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0UmF3VGFnO1xuIiwKICAgICIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIHVzaW5nIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvYmplY3RUb1N0cmluZztcbiIsCiAgICAidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpLFxuICAgIGdldFJhd1RhZyA9IHJlcXVpcmUoJy4vX2dldFJhd1RhZycpLFxuICAgIG9iamVjdFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fb2JqZWN0VG9TdHJpbmcnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG51bGxUYWcgPSAnW29iamVjdCBOdWxsXScsXG4gICAgdW5kZWZpbmVkVGFnID0gJ1tvYmplY3QgVW5kZWZpbmVkXSc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBnZXRUYWdgIHdpdGhvdXQgZmFsbGJhY2tzIGZvciBidWdneSBlbnZpcm9ubWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldFRhZyh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkVGFnIDogbnVsbFRhZztcbiAgfVxuICByZXR1cm4gKHN5bVRvU3RyaW5nVGFnICYmIHN5bVRvU3RyaW5nVGFnIGluIE9iamVjdCh2YWx1ZSkpXG4gICAgPyBnZXRSYXdUYWcodmFsdWUpXG4gICAgOiBvYmplY3RUb1N0cmluZyh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUdldFRhZztcbiIsCiAgICAiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyB0aGVcbiAqIFtsYW5ndWFnZSB0eXBlXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtZWNtYXNjcmlwdC1sYW5ndWFnZS10eXBlcylcbiAqIG9mIGBPYmplY3RgLiAoZS5nLiBhcnJheXMsIGZ1bmN0aW9ucywgb2JqZWN0cywgcmVnZXhlcywgYG5ldyBOdW1iZXIoMClgLCBhbmQgYG5ldyBTdHJpbmcoJycpYClcbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdCh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmICh0eXBlID09ICdvYmplY3QnIHx8IHR5cGUgPT0gJ2Z1bmN0aW9uJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNPYmplY3Q7XG4iLAogICAgInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXN5bmNUYWcgPSAnW29iamVjdCBBc3luY0Z1bmN0aW9uXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgZ2VuVGFnID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJyxcbiAgICBwcm94eVRhZyA9ICdbb2JqZWN0IFByb3h5XSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBGdW5jdGlvbmAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgZnVuY3Rpb24sIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0Z1bmN0aW9uKF8pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNGdW5jdGlvbigvYWJjLyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIFRoZSB1c2Ugb2YgYE9iamVjdCN0b1N0cmluZ2AgYXZvaWRzIGlzc3VlcyB3aXRoIHRoZSBgdHlwZW9mYCBvcGVyYXRvclxuICAvLyBpbiBTYWZhcmkgOSB3aGljaCByZXR1cm5zICdvYmplY3QnIGZvciB0eXBlZCBhcnJheXMgYW5kIG90aGVyIGNvbnN0cnVjdG9ycy5cbiAgdmFyIHRhZyA9IGJhc2VHZXRUYWcodmFsdWUpO1xuICByZXR1cm4gdGFnID09IGZ1bmNUYWcgfHwgdGFnID09IGdlblRhZyB8fCB0YWcgPT0gYXN5bmNUYWcgfHwgdGFnID09IHByb3h5VGFnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRnVuY3Rpb247XG4iLAogICAgInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogVXNlZCB0byBkZXRlY3Qgb3ZlcnJlYWNoaW5nIGNvcmUtanMgc2hpbXMuICovXG52YXIgY29yZUpzRGF0YSA9IHJvb3RbJ19fY29yZS1qc19zaGFyZWRfXyddO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcmVKc0RhdGE7XG4iLAogICAgInZhciBjb3JlSnNEYXRhID0gcmVxdWlyZSgnLi9fY29yZUpzRGF0YScpO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgbWV0aG9kcyBtYXNxdWVyYWRpbmcgYXMgbmF0aXZlLiAqL1xudmFyIG1hc2tTcmNLZXkgPSAoZnVuY3Rpb24oKSB7XG4gIHZhciB1aWQgPSAvW14uXSskLy5leGVjKGNvcmVKc0RhdGEgJiYgY29yZUpzRGF0YS5rZXlzICYmIGNvcmVKc0RhdGEua2V5cy5JRV9QUk9UTyB8fCAnJyk7XG4gIHJldHVybiB1aWQgPyAoJ1N5bWJvbChzcmMpXzEuJyArIHVpZCkgOiAnJztcbn0oKSk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBmdW5jYCBoYXMgaXRzIHNvdXJjZSBtYXNrZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBpcyBtYXNrZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNNYXNrZWQoZnVuYykge1xuICByZXR1cm4gISFtYXNrU3JjS2V5ICYmIChtYXNrU3JjS2V5IGluIGZ1bmMpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTWFza2VkO1xuIiwKICAgICIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKipcbiAqIENvbnZlcnRzIGBmdW5jYCB0byBpdHMgc291cmNlIGNvZGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzb3VyY2UgY29kZS5cbiAqL1xuZnVuY3Rpb24gdG9Tb3VyY2UoZnVuYykge1xuICBpZiAoZnVuYyAhPSBudWxsKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmdW5jVG9TdHJpbmcuY2FsbChmdW5jKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gKGZ1bmMgKyAnJyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9Tb3VyY2U7XG4iLAogICAgInZhciBpc0Z1bmN0aW9uID0gcmVxdWlyZSgnLi9pc0Z1bmN0aW9uJyksXG4gICAgaXNNYXNrZWQgPSByZXF1aXJlKCcuL19pc01hc2tlZCcpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIHRvU291cmNlID0gcmVxdWlyZSgnLi9fdG9Tb3VyY2UnKTtcblxuLyoqXG4gKiBVc2VkIHRvIG1hdGNoIGBSZWdFeHBgXG4gKiBbc3ludGF4IGNoYXJhY3RlcnNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXBhdHRlcm5zKS5cbiAqL1xudmFyIHJlUmVnRXhwQ2hhciA9IC9bXFxcXF4kLiorPygpW1xcXXt9fF0vZztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGhvc3QgY29uc3RydWN0b3JzIChTYWZhcmkpLiAqL1xudmFyIHJlSXNIb3N0Q3RvciA9IC9eXFxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXFxdJC87XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGUsXG4gICAgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaWYgYSBtZXRob2QgaXMgbmF0aXZlLiAqL1xudmFyIHJlSXNOYXRpdmUgPSBSZWdFeHAoJ14nICtcbiAgZnVuY1RvU3RyaW5nLmNhbGwoaGFzT3duUHJvcGVydHkpLnJlcGxhY2UocmVSZWdFeHBDaGFyLCAnXFxcXCQmJylcbiAgLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFxcXFwoKXwgZm9yIC4rPyg/PVxcXFxcXF0pL2csICckMS4qPycpICsgJyQnXG4pO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTmF0aXZlYCB3aXRob3V0IGJhZCBzaGltIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG5hdGl2ZSBmdW5jdGlvbixcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc05hdGl2ZSh2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSB8fCBpc01hc2tlZCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHBhdHRlcm4gPSBpc0Z1bmN0aW9uKHZhbHVlKSA/IHJlSXNOYXRpdmUgOiByZUlzSG9zdEN0b3I7XG4gIHJldHVybiBwYXR0ZXJuLnRlc3QodG9Tb3VyY2UodmFsdWUpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNOYXRpdmU7XG4iLAogICAgIi8qKlxuICogR2V0cyB0aGUgdmFsdWUgYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGdldFZhbHVlKG9iamVjdCwga2V5KSB7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFZhbHVlO1xuIiwKICAgICJ2YXIgYmFzZUlzTmF0aXZlID0gcmVxdWlyZSgnLi9fYmFzZUlzTmF0aXZlJyksXG4gICAgZ2V0VmFsdWUgPSByZXF1aXJlKCcuL19nZXRWYWx1ZScpO1xuXG4vKipcbiAqIEdldHMgdGhlIG5hdGl2ZSBmdW5jdGlvbiBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBtZXRob2QgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGZ1bmN0aW9uIGlmIGl0J3MgbmF0aXZlLCBlbHNlIGB1bmRlZmluZWRgLlxuICovXG5mdW5jdGlvbiBnZXROYXRpdmUob2JqZWN0LCBrZXkpIHtcbiAgdmFyIHZhbHVlID0gZ2V0VmFsdWUob2JqZWN0LCBrZXkpO1xuICByZXR1cm4gYmFzZUlzTmF0aXZlKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldE5hdGl2ZTtcbiIsCiAgICAidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpO1xuXG52YXIgZGVmaW5lUHJvcGVydHkgPSAoZnVuY3Rpb24oKSB7XG4gIHRyeSB7XG4gICAgdmFyIGZ1bmMgPSBnZXROYXRpdmUoT2JqZWN0LCAnZGVmaW5lUHJvcGVydHknKTtcbiAgICBmdW5jKHt9LCAnJywge30pO1xuICAgIHJldHVybiBmdW5jO1xuICB9IGNhdGNoIChlKSB7fVxufSgpKTtcblxubW9kdWxlLmV4cG9ydHMgPSBkZWZpbmVQcm9wZXJ0eTtcbiIsCiAgICAidmFyIGNvbnN0YW50ID0gcmVxdWlyZSgnLi9jb25zdGFudCcpLFxuICAgIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fZGVmaW5lUHJvcGVydHknKSxcbiAgICBpZGVudGl0eSA9IHJlcXVpcmUoJy4vaWRlbnRpdHknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2V0VG9TdHJpbmdgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaG90IGxvb3Agc2hvcnRpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgYmFzZVNldFRvU3RyaW5nID0gIWRlZmluZVByb3BlcnR5ID8gaWRlbnRpdHkgOiBmdW5jdGlvbihmdW5jLCBzdHJpbmcpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5KGZ1bmMsICd0b1N0cmluZycsIHtcbiAgICAnY29uZmlndXJhYmxlJzogdHJ1ZSxcbiAgICAnZW51bWVyYWJsZSc6IGZhbHNlLFxuICAgICd2YWx1ZSc6IGNvbnN0YW50KHN0cmluZyksXG4gICAgJ3dyaXRhYmxlJzogdHJ1ZVxuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVNldFRvU3RyaW5nO1xuIiwKICAgICIvKiogVXNlZCB0byBkZXRlY3QgaG90IGZ1bmN0aW9ucyBieSBudW1iZXIgb2YgY2FsbHMgd2l0aGluIGEgc3BhbiBvZiBtaWxsaXNlY29uZHMuICovXG52YXIgSE9UX0NPVU5UID0gODAwLFxuICAgIEhPVF9TUEFOID0gMTY7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVOb3cgPSBEYXRlLm5vdztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCdsbCBzaG9ydCBvdXQgYW5kIGludm9rZSBgaWRlbnRpdHlgIGluc3RlYWRcbiAqIG9mIGBmdW5jYCB3aGVuIGl0J3MgY2FsbGVkIGBIT1RfQ09VTlRgIG9yIG1vcmUgdGltZXMgaW4gYEhPVF9TUEFOYFxuICogbWlsbGlzZWNvbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byByZXN0cmljdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNob3J0YWJsZSBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gc2hvcnRPdXQoZnVuYykge1xuICB2YXIgY291bnQgPSAwLFxuICAgICAgbGFzdENhbGxlZCA9IDA7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdGFtcCA9IG5hdGl2ZU5vdygpLFxuICAgICAgICByZW1haW5pbmcgPSBIT1RfU1BBTiAtIChzdGFtcCAtIGxhc3RDYWxsZWQpO1xuXG4gICAgbGFzdENhbGxlZCA9IHN0YW1wO1xuICAgIGlmIChyZW1haW5pbmcgPiAwKSB7XG4gICAgICBpZiAoKytjb3VudCA+PSBIT1RfQ09VTlQpIHtcbiAgICAgICAgcmV0dXJuIGFyZ3VtZW50c1swXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY291bnQgPSAwO1xuICAgIH1cbiAgICByZXR1cm4gZnVuYy5hcHBseSh1bmRlZmluZWQsIGFyZ3VtZW50cyk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2hvcnRPdXQ7XG4iLAogICAgInZhciBiYXNlU2V0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19iYXNlU2V0VG9TdHJpbmcnKSxcbiAgICBzaG9ydE91dCA9IHJlcXVpcmUoJy4vX3Nob3J0T3V0Jyk7XG5cbi8qKlxuICogU2V0cyB0aGUgYHRvU3RyaW5nYCBtZXRob2Qgb2YgYGZ1bmNgIHRvIHJldHVybiBgc3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3RyaW5nIFRoZSBgdG9TdHJpbmdgIHJlc3VsdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gKi9cbnZhciBzZXRUb1N0cmluZyA9IHNob3J0T3V0KGJhc2VTZXRUb1N0cmluZyk7XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0VG9TdHJpbmc7XG4iLAogICAgInZhciBpZGVudGl0eSA9IHJlcXVpcmUoJy4vaWRlbnRpdHknKSxcbiAgICBvdmVyUmVzdCA9IHJlcXVpcmUoJy4vX292ZXJSZXN0JyksXG4gICAgc2V0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19zZXRUb1N0cmluZycpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnJlc3RgIHdoaWNoIGRvZXNuJ3QgdmFsaWRhdGUgb3IgY29lcmNlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlUmVzdChmdW5jLCBzdGFydCkge1xuICByZXR1cm4gc2V0VG9TdHJpbmcob3ZlclJlc3QoZnVuYywgc3RhcnQsIGlkZW50aXR5KSwgZnVuYyArICcnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlUmVzdDtcbiIsCiAgICAiLyoqXG4gKiBQZXJmb3JtcyBhXG4gKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogY29tcGFyaXNvbiBiZXR3ZWVuIHR3byB2YWx1ZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlIGVxdWl2YWxlbnQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdhJzogMSB9O1xuICpcbiAqIF8uZXEob2JqZWN0LCBvYmplY3QpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uZXEob2JqZWN0LCBvdGhlcik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uZXEoJ2EnLCAnYScpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uZXEoJ2EnLCBPYmplY3QoJ2EnKSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uZXEoTmFOLCBOYU4pO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBlcSh2YWx1ZSwgb3RoZXIpIHtcbiAgcmV0dXJuIHZhbHVlID09PSBvdGhlciB8fCAodmFsdWUgIT09IHZhbHVlICYmIG90aGVyICE9PSBvdGhlcik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXE7XG4iLAogICAgIi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBsZW5ndGguXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb25cbiAqIFtgVG9MZW5ndGhgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy10b2xlbmd0aCkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBsZW5ndGgsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0xlbmd0aCgzKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzTGVuZ3RoKE51bWJlci5NSU5fVkFMVUUpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzTGVuZ3RoKEluZmluaXR5KTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0xlbmd0aCgnMycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNMZW5ndGgodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyAmJlxuICAgIHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPD0gTUFYX1NBRkVfSU5URUdFUjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0xlbmd0aDtcbiIsCiAgICAidmFyIGlzRnVuY3Rpb24gPSByZXF1aXJlKCcuL2lzRnVuY3Rpb24nKSxcbiAgICBpc0xlbmd0aCA9IHJlcXVpcmUoJy4vaXNMZW5ndGgnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLiBBIHZhbHVlIGlzIGNvbnNpZGVyZWQgYXJyYXktbGlrZSBpZiBpdCdzXG4gKiBub3QgYSBmdW5jdGlvbiBhbmQgaGFzIGEgYHZhbHVlLmxlbmd0aGAgdGhhdCdzIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIG9yXG4gKiBlcXVhbCB0byBgMGAgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZSgnYWJjJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUxpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhaXNGdW5jdGlvbih2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcnJheUxpa2U7XG4iLAogICAgIi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgdW5zaWduZWQgaW50ZWdlciB2YWx1ZXMuICovXG52YXIgcmVJc1VpbnQgPSAvXig/OjB8WzEtOV1cXGQqKSQvO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBpbmRleC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aD1NQVhfU0FGRV9JTlRFR0VSXSBUaGUgdXBwZXIgYm91bmRzIG9mIGEgdmFsaWQgaW5kZXguXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGluZGV4LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzSW5kZXgodmFsdWUsIGxlbmd0aCkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgbGVuZ3RoID0gbGVuZ3RoID09IG51bGwgPyBNQVhfU0FGRV9JTlRFR0VSIDogbGVuZ3RoO1xuXG4gIHJldHVybiAhIWxlbmd0aCAmJlxuICAgICh0eXBlID09ICdudW1iZXInIHx8XG4gICAgICAodHlwZSAhPSAnc3ltYm9sJyAmJiByZUlzVWludC50ZXN0KHZhbHVlKSkpICYmXG4gICAgICAgICh2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDwgbGVuZ3RoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0luZGV4O1xuIiwKICAgICJ2YXIgZXEgPSByZXF1aXJlKCcuL2VxJyksXG4gICAgaXNBcnJheUxpa2UgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlJyksXG4gICAgaXNJbmRleCA9IHJlcXVpcmUoJy4vX2lzSW5kZXgnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGdpdmVuIGFyZ3VtZW50cyBhcmUgZnJvbSBhbiBpdGVyYXRlZSBjYWxsLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSBwb3RlbnRpYWwgaXRlcmF0ZWUgdmFsdWUgYXJndW1lbnQuXG4gKiBAcGFyYW0geyp9IGluZGV4IFRoZSBwb3RlbnRpYWwgaXRlcmF0ZWUgaW5kZXggb3Iga2V5IGFyZ3VtZW50LlxuICogQHBhcmFtIHsqfSBvYmplY3QgVGhlIHBvdGVudGlhbCBpdGVyYXRlZSBvYmplY3QgYXJndW1lbnQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGFyZ3VtZW50cyBhcmUgZnJvbSBhbiBpdGVyYXRlZSBjYWxsLFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNJdGVyYXRlZUNhbGwodmFsdWUsIGluZGV4LCBvYmplY3QpIHtcbiAgaWYgKCFpc09iamVjdChvYmplY3QpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciB0eXBlID0gdHlwZW9mIGluZGV4O1xuICBpZiAodHlwZSA9PSAnbnVtYmVyJ1xuICAgICAgICA/IChpc0FycmF5TGlrZShvYmplY3QpICYmIGlzSW5kZXgoaW5kZXgsIG9iamVjdC5sZW5ndGgpKVxuICAgICAgICA6ICh0eXBlID09ICdzdHJpbmcnICYmIGluZGV4IGluIG9iamVjdClcbiAgICAgICkge1xuICAgIHJldHVybiBlcShvYmplY3RbaW5kZXhdLCB2YWx1ZSk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzSXRlcmF0ZWVDYWxsO1xuIiwKICAgICIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRpbWVzYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHNcbiAqIG9yIG1heCBhcnJheSBsZW5ndGggY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIGludm9rZSBgaXRlcmF0ZWVgLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcmVzdWx0cy5cbiAqL1xuZnVuY3Rpb24gYmFzZVRpbWVzKG4sIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobik7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBuKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGluZGV4KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VUaW1lcztcbiIsCiAgICAiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZS4gQSB2YWx1ZSBpcyBvYmplY3QtbGlrZSBpZiBpdCdzIG5vdCBgbnVsbGBcbiAqIGFuZCBoYXMgYSBgdHlwZW9mYCByZXN1bHQgb2YgXCJvYmplY3RcIi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZSh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0TGlrZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNPYmplY3RMaWtlO1xuIiwKICAgICJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzQXJndW1lbnRzYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc0FyZ3VtZW50cyh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBhcmdzVGFnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc0FyZ3VtZW50cztcbiIsCiAgICAidmFyIGJhc2VJc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vX2Jhc2VJc0FyZ3VtZW50cycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGFuIGBhcmd1bWVudHNgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FyZ3VtZW50cyA9IGJhc2VJc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA/IGJhc2VJc0FyZ3VtZW50cyA6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdjYWxsZWUnKSAmJlxuICAgICFwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlLCAnY2FsbGVlJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJndW1lbnRzO1xuIiwKICAgICIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYW4gYEFycmF5YCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5KGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0FycmF5O1xuIiwKICAgICIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYGZhbHNlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMTMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udGltZXMoMiwgXy5zdHViRmFsc2UpO1xuICogLy8gPT4gW2ZhbHNlLCBmYWxzZV1cbiAqL1xuZnVuY3Rpb24gc3R1YkZhbHNlKCkge1xuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3R1YkZhbHNlO1xuIiwKICAgICJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKSxcbiAgICBzdHViRmFsc2UgPSByZXF1aXJlKCcuL3N0dWJGYWxzZScpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIEJ1ZmZlciA9IG1vZHVsZUV4cG9ydHMgPyByb290LkJ1ZmZlciA6IHVuZGVmaW5lZDtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUlzQnVmZmVyID0gQnVmZmVyID8gQnVmZmVyLmlzQnVmZmVyIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4zLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNCdWZmZXIobmV3IEJ1ZmZlcigyKSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0J1ZmZlcihuZXcgVWludDhBcnJheSgyKSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNCdWZmZXIgPSBuYXRpdmVJc0J1ZmZlciB8fCBzdHViRmFsc2U7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNCdWZmZXI7XG4iLAogICAgInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzTGVuZ3RoID0gcmVxdWlyZSgnLi9pc0xlbmd0aCcpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XG5cbi8qKiBVc2VkIHRvIGlkZW50aWZ5IGB0b1N0cmluZ1RhZ2AgdmFsdWVzIG9mIHR5cGVkIGFycmF5cy4gKi9cbnZhciB0eXBlZEFycmF5VGFncyA9IHt9O1xudHlwZWRBcnJheVRhZ3NbZmxvYXQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1tmbG9hdDY0VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQ4VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2ludDE2VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50OFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDhDbGFtcGVkVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQxNlRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDMyVGFnXSA9IHRydWU7XG50eXBlZEFycmF5VGFnc1thcmdzVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2FycmF5VGFnXSA9XG50eXBlZEFycmF5VGFnc1thcnJheUJ1ZmZlclRhZ10gPSB0eXBlZEFycmF5VGFnc1tib29sVGFnXSA9XG50eXBlZEFycmF5VGFnc1tkYXRhVmlld1RhZ10gPSB0eXBlZEFycmF5VGFnc1tkYXRlVGFnXSA9XG50eXBlZEFycmF5VGFnc1tlcnJvclRhZ10gPSB0eXBlZEFycmF5VGFnc1tmdW5jVGFnXSA9XG50eXBlZEFycmF5VGFnc1ttYXBUYWddID0gdHlwZWRBcnJheVRhZ3NbbnVtYmVyVGFnXSA9XG50eXBlZEFycmF5VGFnc1tvYmplY3RUYWddID0gdHlwZWRBcnJheVRhZ3NbcmVnZXhwVGFnXSA9XG50eXBlZEFycmF5VGFnc1tzZXRUYWddID0gdHlwZWRBcnJheVRhZ3Nbc3RyaW5nVGFnXSA9XG50eXBlZEFycmF5VGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzVHlwZWRBcnJheWAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNUeXBlZEFycmF5KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmXG4gICAgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhIXR5cGVkQXJyYXlUYWdzW2Jhc2VHZXRUYWcodmFsdWUpXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNUeXBlZEFycmF5O1xuIiwKICAgICIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVuYXJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yIHN0b3JpbmcgbWV0YWRhdGEuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNhcCBhcmd1bWVudHMgZm9yLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY2FwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlVW5hcnkoZnVuYykge1xuICByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gZnVuYyh2YWx1ZSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVVuYXJ5O1xuIiwKICAgICJ2YXIgZnJlZUdsb2JhbCA9IHJlcXVpcmUoJy4vX2ZyZWVHbG9iYWwnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHByb2Nlc3NgIGZyb20gTm9kZS5qcy4gKi9cbnZhciBmcmVlUHJvY2VzcyA9IG1vZHVsZUV4cG9ydHMgJiYgZnJlZUdsb2JhbC5wcm9jZXNzO1xuXG4vKiogVXNlZCB0byBhY2Nlc3MgZmFzdGVyIE5vZGUuanMgaGVscGVycy4gKi9cbnZhciBub2RlVXRpbCA9IChmdW5jdGlvbigpIHtcbiAgdHJ5IHtcbiAgICAvLyBVc2UgYHV0aWwudHlwZXNgIGZvciBOb2RlLmpzIDEwKy5cbiAgICB2YXIgdHlwZXMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUucmVxdWlyZSAmJiBmcmVlTW9kdWxlLnJlcXVpcmUoJ3V0aWwnKS50eXBlcztcblxuICAgIGlmICh0eXBlcykge1xuICAgICAgcmV0dXJuIHR5cGVzO1xuICAgIH1cblxuICAgIC8vIExlZ2FjeSBgcHJvY2Vzcy5iaW5kaW5nKCd1dGlsJylgIGZvciBOb2RlLmpzIDwgMTAuXG4gICAgcmV0dXJuIGZyZWVQcm9jZXNzICYmIGZyZWVQcm9jZXNzLmJpbmRpbmcgJiYgZnJlZVByb2Nlc3MuYmluZGluZygndXRpbCcpO1xuICB9IGNhdGNoIChlKSB7fVxufSgpKTtcblxubW9kdWxlLmV4cG9ydHMgPSBub2RlVXRpbDtcbiIsCiAgICAidmFyIGJhc2VJc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL19iYXNlSXNUeXBlZEFycmF5JyksXG4gICAgYmFzZVVuYXJ5ID0gcmVxdWlyZSgnLi9fYmFzZVVuYXJ5JyksXG4gICAgbm9kZVV0aWwgPSByZXF1aXJlKCcuL19ub2RlVXRpbCcpO1xuXG4vKiBOb2RlLmpzIGhlbHBlciByZWZlcmVuY2VzLiAqL1xudmFyIG5vZGVJc1R5cGVkQXJyYXkgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc1R5cGVkQXJyYXk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIHR5cGVkIGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1R5cGVkQXJyYXkobmV3IFVpbnQ4QXJyYXkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNUeXBlZEFycmF5KFtdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc1R5cGVkQXJyYXkgPSBub2RlSXNUeXBlZEFycmF5ID8gYmFzZVVuYXJ5KG5vZGVJc1R5cGVkQXJyYXkpIDogYmFzZUlzVHlwZWRBcnJheTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc1R5cGVkQXJyYXk7XG4iLAogICAgInZhciBiYXNlVGltZXMgPSByZXF1aXJlKCcuL19iYXNlVGltZXMnKSxcbiAgICBpc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNCdWZmZXIgPSByZXF1aXJlKCcuL2lzQnVmZmVyJyksXG4gICAgaXNJbmRleCA9IHJlcXVpcmUoJy4vX2lzSW5kZXgnKSxcbiAgICBpc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL2lzVHlwZWRBcnJheScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgdGhlIGFycmF5LWxpa2UgYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGluaGVyaXRlZCBTcGVjaWZ5IHJldHVybmluZyBpbmhlcml0ZWQgcHJvcGVydHkgbmFtZXMuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBhcnJheUxpa2VLZXlzKHZhbHVlLCBpbmhlcml0ZWQpIHtcbiAgdmFyIGlzQXJyID0gaXNBcnJheSh2YWx1ZSksXG4gICAgICBpc0FyZyA9ICFpc0FyciAmJiBpc0FyZ3VtZW50cyh2YWx1ZSksXG4gICAgICBpc0J1ZmYgPSAhaXNBcnIgJiYgIWlzQXJnICYmIGlzQnVmZmVyKHZhbHVlKSxcbiAgICAgIGlzVHlwZSA9ICFpc0FyciAmJiAhaXNBcmcgJiYgIWlzQnVmZiAmJiBpc1R5cGVkQXJyYXkodmFsdWUpLFxuICAgICAgc2tpcEluZGV4ZXMgPSBpc0FyciB8fCBpc0FyZyB8fCBpc0J1ZmYgfHwgaXNUeXBlLFxuICAgICAgcmVzdWx0ID0gc2tpcEluZGV4ZXMgPyBiYXNlVGltZXModmFsdWUubGVuZ3RoLCBTdHJpbmcpIDogW10sXG4gICAgICBsZW5ndGggPSByZXN1bHQubGVuZ3RoO1xuXG4gIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgIGlmICgoaW5oZXJpdGVkIHx8IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGtleSkpICYmXG4gICAgICAgICEoc2tpcEluZGV4ZXMgJiYgKFxuICAgICAgICAgICAvLyBTYWZhcmkgOSBoYXMgZW51bWVyYWJsZSBgYXJndW1lbnRzLmxlbmd0aGAgaW4gc3RyaWN0IG1vZGUuXG4gICAgICAgICAgIGtleSA9PSAnbGVuZ3RoJyB8fFxuICAgICAgICAgICAvLyBOb2RlLmpzIDAuMTAgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gYnVmZmVycy5cbiAgICAgICAgICAgKGlzQnVmZiAmJiAoa2V5ID09ICdvZmZzZXQnIHx8IGtleSA9PSAncGFyZW50JykpIHx8XG4gICAgICAgICAgIC8vIFBoYW50b21KUyAyIGhhcyBlbnVtZXJhYmxlIG5vbi1pbmRleCBwcm9wZXJ0aWVzIG9uIHR5cGVkIGFycmF5cy5cbiAgICAgICAgICAgKGlzVHlwZSAmJiAoa2V5ID09ICdidWZmZXInIHx8IGtleSA9PSAnYnl0ZUxlbmd0aCcgfHwga2V5ID09ICdieXRlT2Zmc2V0JykpIHx8XG4gICAgICAgICAgIC8vIFNraXAgaW5kZXggcHJvcGVydGllcy5cbiAgICAgICAgICAgaXNJbmRleChrZXksIGxlbmd0aClcbiAgICAgICAgKSkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlMaWtlS2V5cztcbiIsCiAgICAiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYSBwcm90b3R5cGUgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcHJvdG90eXBlLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzUHJvdG90eXBlKHZhbHVlKSB7XG4gIHZhciBDdG9yID0gdmFsdWUgJiYgdmFsdWUuY29uc3RydWN0b3IsXG4gICAgICBwcm90byA9ICh0eXBlb2YgQ3RvciA9PSAnZnVuY3Rpb24nICYmIEN0b3IucHJvdG90eXBlKSB8fCBvYmplY3RQcm90bztcblxuICByZXR1cm4gdmFsdWUgPT09IHByb3RvO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzUHJvdG90eXBlO1xuIiwKICAgICIvKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgbGlrZVxuICogW2BPYmplY3Qua2V5c2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5rZXlzKVxuICogZXhjZXB0IHRoYXQgaXQgaW5jbHVkZXMgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydGllcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gbmF0aXZlS2V5c0luKG9iamVjdCkge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGlmIChvYmplY3QgIT0gbnVsbCkge1xuICAgIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBuYXRpdmVLZXlzSW47XG4iLAogICAgInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICBpc1Byb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2lzUHJvdG90eXBlJyksXG4gICAgbmF0aXZlS2V5c0luID0gcmVxdWlyZSgnLi9fbmF0aXZlS2V5c0luJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ua2V5c0luYCB3aGljaCBkb2Vzbid0IHRyZWF0IHNwYXJzZSBhcnJheXMgYXMgZGVuc2UuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VLZXlzSW4ob2JqZWN0KSB7XG4gIGlmICghaXNPYmplY3Qob2JqZWN0KSkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzSW4ob2JqZWN0KTtcbiAgfVxuICB2YXIgaXNQcm90byA9IGlzUHJvdG90eXBlKG9iamVjdCksXG4gICAgICByZXN1bHQgPSBbXTtcblxuICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB7XG4gICAgaWYgKCEoa2V5ID09ICdjb25zdHJ1Y3RvcicgJiYgKGlzUHJvdG8gfHwgIWhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpKSkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUtleXNJbjtcbiIsCiAgICAidmFyIGFycmF5TGlrZUtleXMgPSByZXF1aXJlKCcuL19hcnJheUxpa2VLZXlzJyksXG4gICAgYmFzZUtleXNJbiA9IHJlcXVpcmUoJy4vX2Jhc2VLZXlzSW4nKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8ua2V5c0luKG5ldyBGb28pO1xuICogLy8gPT4gWydhJywgJ2InLCAnYyddIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKi9cbmZ1bmN0aW9uIGtleXNJbihvYmplY3QpIHtcbiAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iamVjdCkgPyBhcnJheUxpa2VLZXlzKG9iamVjdCwgdHJ1ZSkgOiBiYXNlS2V5c0luKG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5c0luO1xuIiwKICAgICJ2YXIgYmFzZVJlc3QgPSByZXF1aXJlKCcuL19iYXNlUmVzdCcpLFxuICAgIGVxID0gcmVxdWlyZSgnLi9lcScpLFxuICAgIGlzSXRlcmF0ZWVDYWxsID0gcmVxdWlyZSgnLi9faXNJdGVyYXRlZUNhbGwnKSxcbiAgICBrZXlzSW4gPSByZXF1aXJlKCcuL2tleXNJbicpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEFzc2lnbnMgb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydGllcyBvZiBzb3VyY2VcbiAqIG9iamVjdHMgdG8gdGhlIGRlc3RpbmF0aW9uIG9iamVjdCBmb3IgYWxsIGRlc3RpbmF0aW9uIHByb3BlcnRpZXMgdGhhdFxuICogcmVzb2x2ZSB0byBgdW5kZWZpbmVkYC4gU291cmNlIG9iamVjdHMgYXJlIGFwcGxpZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0LlxuICogT25jZSBhIHByb3BlcnR5IGlzIHNldCwgYWRkaXRpb25hbCB2YWx1ZXMgb2YgdGhlIHNhbWUgcHJvcGVydHkgYXJlIGlnbm9yZWQuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICogQHBhcmFtIHsuLi5PYmplY3R9IFtzb3VyY2VzXSBUaGUgc291cmNlIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICogQHNlZSBfLmRlZmF1bHRzRGVlcFxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmRlZmF1bHRzKHsgJ2EnOiAxIH0sIHsgJ2InOiAyIH0sIHsgJ2EnOiAzIH0pO1xuICogLy8gPT4geyAnYSc6IDEsICdiJzogMiB9XG4gKi9cbnZhciBkZWZhdWx0cyA9IGJhc2VSZXN0KGZ1bmN0aW9uKG9iamVjdCwgc291cmNlcykge1xuICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcblxuICB2YXIgaW5kZXggPSAtMTtcbiAgdmFyIGxlbmd0aCA9IHNvdXJjZXMubGVuZ3RoO1xuICB2YXIgZ3VhcmQgPSBsZW5ndGggPiAyID8gc291cmNlc1syXSA6IHVuZGVmaW5lZDtcblxuICBpZiAoZ3VhcmQgJiYgaXNJdGVyYXRlZUNhbGwoc291cmNlc1swXSwgc291cmNlc1sxXSwgZ3VhcmQpKSB7XG4gICAgbGVuZ3RoID0gMTtcbiAgfVxuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHNvdXJjZSA9IHNvdXJjZXNbaW5kZXhdO1xuICAgIHZhciBwcm9wcyA9IGtleXNJbihzb3VyY2UpO1xuICAgIHZhciBwcm9wc0luZGV4ID0gLTE7XG4gICAgdmFyIHByb3BzTGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKCsrcHJvcHNJbmRleCA8IHByb3BzTGVuZ3RoKSB7XG4gICAgICB2YXIga2V5ID0gcHJvcHNbcHJvcHNJbmRleF07XG4gICAgICB2YXIgdmFsdWUgPSBvYmplY3Rba2V5XTtcblxuICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAoZXEodmFsdWUsIG9iamVjdFByb3RvW2tleV0pICYmICFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkpIHtcbiAgICAgICAgb2JqZWN0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2JqZWN0O1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmYXVsdHM7XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG4vKlxuICBUaGlzIGZpbGUgaXMgYSByZWR1Y2VkIGFuZCBhZGFwdGVkIHZlcnNpb24gb2YgdGhlIG1haW4gbGliL2ludGVybmFsL3Blcl9jb250ZXh0L3ByaW1vcmRpYWxzLmpzIGZpbGUgZGVmaW5lZCBhdFxuXG4gIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL21hc3Rlci9saWIvaW50ZXJuYWwvcGVyX2NvbnRleHQvcHJpbW9yZGlhbHMuanNcblxuICBEb24ndCB0cnkgdG8gcmVwbGFjZSB3aXRoIHRoZSBvcmlnaW5hbCBmaWxlIGFuZCBrZWVwIGl0IHVwIHRvIGRhdGUgd2l0aCB0aGUgdXBzdHJlYW0gZmlsZS5cbiovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQXJyYXlJc0FycmF5KHNlbGYpIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShzZWxmKVxuICB9LFxuICBBcnJheVByb3RvdHlwZUluY2x1ZGVzKHNlbGYsIGVsKSB7XG4gICAgcmV0dXJuIHNlbGYuaW5jbHVkZXMoZWwpXG4gIH0sXG4gIEFycmF5UHJvdG90eXBlSW5kZXhPZihzZWxmLCBlbCkge1xuICAgIHJldHVybiBzZWxmLmluZGV4T2YoZWwpXG4gIH0sXG4gIEFycmF5UHJvdG90eXBlSm9pbihzZWxmLCBzZXApIHtcbiAgICByZXR1cm4gc2VsZi5qb2luKHNlcClcbiAgfSxcbiAgQXJyYXlQcm90b3R5cGVNYXAoc2VsZiwgZm4pIHtcbiAgICByZXR1cm4gc2VsZi5tYXAoZm4pXG4gIH0sXG4gIEFycmF5UHJvdG90eXBlUG9wKHNlbGYsIGVsKSB7XG4gICAgcmV0dXJuIHNlbGYucG9wKGVsKVxuICB9LFxuICBBcnJheVByb3RvdHlwZVB1c2goc2VsZiwgZWwpIHtcbiAgICByZXR1cm4gc2VsZi5wdXNoKGVsKVxuICB9LFxuICBBcnJheVByb3RvdHlwZVNsaWNlKHNlbGYsIHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gc2VsZi5zbGljZShzdGFydCwgZW5kKVxuICB9LFxuICBFcnJvcixcbiAgRnVuY3Rpb25Qcm90b3R5cGVDYWxsKGZuLCB0aGlzQXJncywgLi4uYXJncykge1xuICAgIHJldHVybiBmbi5jYWxsKHRoaXNBcmdzLCAuLi5hcmdzKVxuICB9LFxuICBGdW5jdGlvblByb3RvdHlwZVN5bWJvbEhhc0luc3RhbmNlKHNlbGYsIGluc3RhbmNlKSB7XG4gICAgcmV0dXJuIEZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdLmNhbGwoc2VsZiwgaW5zdGFuY2UpXG4gIH0sXG4gIE1hdGhGbG9vcjogTWF0aC5mbG9vcixcbiAgTnVtYmVyLFxuICBOdW1iZXJJc0ludGVnZXI6IE51bWJlci5pc0ludGVnZXIsXG4gIE51bWJlcklzTmFOOiBOdW1iZXIuaXNOYU4sXG4gIE51bWJlck1BWF9TQUZFX0lOVEVHRVI6IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSLFxuICBOdW1iZXJNSU5fU0FGRV9JTlRFR0VSOiBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUixcbiAgTnVtYmVyUGFyc2VJbnQ6IE51bWJlci5wYXJzZUludCxcbiAgT2JqZWN0RGVmaW5lUHJvcGVydGllcyhzZWxmLCBwcm9wcykge1xuICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhzZWxmLCBwcm9wcylcbiAgfSxcbiAgT2JqZWN0RGVmaW5lUHJvcGVydHkoc2VsZiwgbmFtZSwgcHJvcCkge1xuICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2VsZiwgbmFtZSwgcHJvcClcbiAgfSxcbiAgT2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNlbGYsIG5hbWUpIHtcbiAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzZWxmLCBuYW1lKVxuICB9LFxuICBPYmplY3RLZXlzKG9iaikge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopXG4gIH0sXG4gIE9iamVjdFNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG8pIHtcbiAgICByZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG8pXG4gIH0sXG4gIFByb21pc2UsXG4gIFByb21pc2VQcm90b3R5cGVDYXRjaChzZWxmLCBmbikge1xuICAgIHJldHVybiBzZWxmLmNhdGNoKGZuKVxuICB9LFxuICBQcm9taXNlUHJvdG90eXBlVGhlbihzZWxmLCB0aGVuRm4sIGNhdGNoRm4pIHtcbiAgICByZXR1cm4gc2VsZi50aGVuKHRoZW5GbiwgY2F0Y2hGbilcbiAgfSxcbiAgUHJvbWlzZVJlamVjdChlcnIpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKVxuICB9LFxuICBQcm9taXNlUmVzb2x2ZSh2YWwpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbClcbiAgfSxcbiAgUmVmbGVjdEFwcGx5OiBSZWZsZWN0LmFwcGx5LFxuICBSZWdFeHBQcm90b3R5cGVUZXN0KHNlbGYsIHZhbHVlKSB7XG4gICAgcmV0dXJuIHNlbGYudGVzdCh2YWx1ZSlcbiAgfSxcbiAgU2FmZVNldDogU2V0LFxuICBTdHJpbmcsXG4gIFN0cmluZ1Byb3RvdHlwZVNsaWNlKHNlbGYsIHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gc2VsZi5zbGljZShzdGFydCwgZW5kKVxuICB9LFxuICBTdHJpbmdQcm90b3R5cGVUb0xvd2VyQ2FzZShzZWxmKSB7XG4gICAgcmV0dXJuIHNlbGYudG9Mb3dlckNhc2UoKVxuICB9LFxuICBTdHJpbmdQcm90b3R5cGVUb1VwcGVyQ2FzZShzZWxmKSB7XG4gICAgcmV0dXJuIHNlbGYudG9VcHBlckNhc2UoKVxuICB9LFxuICBTdHJpbmdQcm90b3R5cGVUcmltKHNlbGYpIHtcbiAgICByZXR1cm4gc2VsZi50cmltKClcbiAgfSxcbiAgU3ltYm9sLFxuICBTeW1ib2xGb3I6IFN5bWJvbC5mb3IsXG4gIFN5bWJvbEFzeW5jSXRlcmF0b3I6IFN5bWJvbC5hc3luY0l0ZXJhdG9yLFxuICBTeW1ib2xIYXNJbnN0YW5jZTogU3ltYm9sLmhhc0luc3RhbmNlLFxuICBTeW1ib2xJdGVyYXRvcjogU3ltYm9sLml0ZXJhdG9yLFxuICBTeW1ib2xEaXNwb3NlOiBTeW1ib2wuZGlzcG9zZSB8fCBTeW1ib2woJ1N5bWJvbC5kaXNwb3NlJyksXG4gIFN5bWJvbEFzeW5jRGlzcG9zZTogU3ltYm9sLmFzeW5jRGlzcG9zZSB8fCBTeW1ib2woJ1N5bWJvbC5hc3luY0Rpc3Bvc2UnKSxcbiAgVHlwZWRBcnJheVByb3RvdHlwZVNldChzZWxmLCBidWYsIGxlbikge1xuICAgIHJldHVybiBzZWxmLnNldChidWYsIGxlbilcbiAgfSxcbiAgQm9vbGVhbjogQm9vbGVhbixcbiAgVWludDhBcnJheVxufVxuIiwKICAgICIvKipcbiAqIEBhdXRob3IgVG9ydSBOYWdhc2hpbWEgPGh0dHBzOi8vZ2l0aHViLmNvbS9teXN0aWNhdGVhPlxuICogQGNvcHlyaWdodCAyMDE1IFRvcnUgTmFnYXNoaW1hLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogU2VlIExJQ0VOU0UgZmlsZSBpbiByb290IGRpcmVjdG9yeSBmb3IgZnVsbCBsaWNlbnNlLlxuICovXG4ndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gUHJpdmF0ZURhdGFcbiAqIEBwcm9wZXJ0eSB7RXZlbnRUYXJnZXR9IGV2ZW50VGFyZ2V0IFRoZSBldmVudCB0YXJnZXQuXG4gKiBAcHJvcGVydHkge3t0eXBlOnN0cmluZ319IGV2ZW50IFRoZSBvcmlnaW5hbCBldmVudCBvYmplY3QuXG4gKiBAcHJvcGVydHkge251bWJlcn0gZXZlbnRQaGFzZSBUaGUgY3VycmVudCBldmVudCBwaGFzZS5cbiAqIEBwcm9wZXJ0eSB7RXZlbnRUYXJnZXR8bnVsbH0gY3VycmVudFRhcmdldCBUaGUgY3VycmVudCBldmVudCB0YXJnZXQuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGNhbmNlbGVkIFRoZSBmbGFnIHRvIHByZXZlbnQgZGVmYXVsdC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gc3RvcHBlZCBUaGUgZmxhZyB0byBzdG9wIHByb3BhZ2F0aW9uLlxuICogQHByb3BlcnR5IHtib29sZWFufSBpbW1lZGlhdGVTdG9wcGVkIFRoZSBmbGFnIHRvIHN0b3AgcHJvcGFnYXRpb24gaW1tZWRpYXRlbHkuXG4gKiBAcHJvcGVydHkge0Z1bmN0aW9ufG51bGx9IHBhc3NpdmVMaXN0ZW5lciBUaGUgbGlzdGVuZXIgaWYgdGhlIGN1cnJlbnQgbGlzdGVuZXIgaXMgcGFzc2l2ZS4gT3RoZXJ3aXNlIHRoaXMgaXMgbnVsbC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB0aW1lU3RhbXAgVGhlIHVuaXggdGltZS5cbiAqIEBwcml2YXRlXG4gKi9cblxuLyoqXG4gKiBQcml2YXRlIGRhdGEgZm9yIGV2ZW50IHdyYXBwZXJzLlxuICogQHR5cGUge1dlYWtNYXA8RXZlbnQsIFByaXZhdGVEYXRhPn1cbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IHByaXZhdGVEYXRhID0gbmV3IFdlYWtNYXAoKTtcblxuLyoqXG4gKiBDYWNoZSBmb3Igd3JhcHBlciBjbGFzc2VzLlxuICogQHR5cGUge1dlYWtNYXA8T2JqZWN0LCBGdW5jdGlvbj59XG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCB3cmFwcGVycyA9IG5ldyBXZWFrTWFwKCk7XG5cbi8qKlxuICogR2V0IHByaXZhdGUgZGF0YS5cbiAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IFRoZSBldmVudCBvYmplY3QgdG8gZ2V0IHByaXZhdGUgZGF0YS5cbiAqIEByZXR1cm5zIHtQcml2YXRlRGF0YX0gVGhlIHByaXZhdGUgZGF0YSBvZiB0aGUgZXZlbnQuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBwZChldmVudCkge1xuICAgIGNvbnN0IHJldHYgPSBwcml2YXRlRGF0YS5nZXQoZXZlbnQpO1xuICAgIGNvbnNvbGUuYXNzZXJ0KFxuICAgICAgICByZXR2ICE9IG51bGwsXG4gICAgICAgIFwiJ3RoaXMnIGlzIGV4cGVjdGVkIGFuIEV2ZW50IG9iamVjdCwgYnV0IGdvdFwiLFxuICAgICAgICBldmVudFxuICAgICk7XG4gICAgcmV0dXJuIHJldHZcbn1cblxuLyoqXG4gKiBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI3NldC10aGUtY2FuY2VsZWQtZmxhZ1xuICogQHBhcmFtIGRhdGEge1ByaXZhdGVEYXRhfSBwcml2YXRlIGRhdGEuXG4gKi9cbmZ1bmN0aW9uIHNldENhbmNlbEZsYWcoZGF0YSkge1xuICAgIGlmIChkYXRhLnBhc3NpdmVMaXN0ZW5lciAhPSBudWxsKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHR5cGVvZiBjb25zb2xlICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICAgICAgICB0eXBlb2YgY29uc29sZS5lcnJvciA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICBcIlVuYWJsZSB0byBwcmV2ZW50RGVmYXVsdCBpbnNpZGUgcGFzc2l2ZSBldmVudCBsaXN0ZW5lciBpbnZvY2F0aW9uLlwiLFxuICAgICAgICAgICAgICAgIGRhdGEucGFzc2l2ZUxpc3RlbmVyXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoIWRhdGEuZXZlbnQuY2FuY2VsYWJsZSkge1xuICAgICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBkYXRhLmNhbmNlbGVkID0gdHJ1ZTtcbiAgICBpZiAodHlwZW9mIGRhdGEuZXZlbnQucHJldmVudERlZmF1bHQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBkYXRhLmV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNpbnRlcmZhY2UtZXZlbnRcbiAqIEBwcml2YXRlXG4gKi9cbi8qKlxuICogVGhlIGV2ZW50IHdyYXBwZXIuXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7RXZlbnRUYXJnZXR9IGV2ZW50VGFyZ2V0IFRoZSBldmVudCB0YXJnZXQgb2YgdGhpcyBkaXNwYXRjaGluZy5cbiAqIEBwYXJhbSB7RXZlbnR8e3R5cGU6c3RyaW5nfX0gZXZlbnQgVGhlIG9yaWdpbmFsIGV2ZW50IHRvIHdyYXAuXG4gKi9cbmZ1bmN0aW9uIEV2ZW50KGV2ZW50VGFyZ2V0LCBldmVudCkge1xuICAgIHByaXZhdGVEYXRhLnNldCh0aGlzLCB7XG4gICAgICAgIGV2ZW50VGFyZ2V0LFxuICAgICAgICBldmVudCxcbiAgICAgICAgZXZlbnRQaGFzZTogMixcbiAgICAgICAgY3VycmVudFRhcmdldDogZXZlbnRUYXJnZXQsXG4gICAgICAgIGNhbmNlbGVkOiBmYWxzZSxcbiAgICAgICAgc3RvcHBlZDogZmFsc2UsXG4gICAgICAgIGltbWVkaWF0ZVN0b3BwZWQ6IGZhbHNlLFxuICAgICAgICBwYXNzaXZlTGlzdGVuZXI6IG51bGwsXG4gICAgICAgIHRpbWVTdGFtcDogZXZlbnQudGltZVN0YW1wIHx8IERhdGUubm93KCksXG4gICAgfSk7XG5cbiAgICAvLyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNVbmZvcmdlYWJsZVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImlzVHJ1c3RlZFwiLCB7IHZhbHVlOiBmYWxzZSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcblxuICAgIC8vIERlZmluZSBhY2Nlc3NvcnNcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZXZlbnQpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xuICAgICAgICBpZiAoIShrZXkgaW4gdGhpcykpIHtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBrZXksIGRlZmluZVJlZGlyZWN0RGVzY3JpcHRvcihrZXkpKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gU2hvdWxkIGJlIGVudW1lcmFibGUsIGJ1dCBjbGFzcyBtZXRob2RzIGFyZSBub3QgZW51bWVyYWJsZS5cbkV2ZW50LnByb3RvdHlwZSA9IHtcbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGlzIGV2ZW50LlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICovXG4gICAgZ2V0IHR5cGUoKSB7XG4gICAgICAgIHJldHVybiBwZCh0aGlzKS5ldmVudC50eXBlXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSB0YXJnZXQgb2YgdGhpcyBldmVudC5cbiAgICAgKiBAdHlwZSB7RXZlbnRUYXJnZXR9XG4gICAgICovXG4gICAgZ2V0IHRhcmdldCgpIHtcbiAgICAgICAgcmV0dXJuIHBkKHRoaXMpLmV2ZW50VGFyZ2V0XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSB0YXJnZXQgb2YgdGhpcyBldmVudC5cbiAgICAgKiBAdHlwZSB7RXZlbnRUYXJnZXR9XG4gICAgICovXG4gICAgZ2V0IGN1cnJlbnRUYXJnZXQoKSB7XG4gICAgICAgIHJldHVybiBwZCh0aGlzKS5jdXJyZW50VGFyZ2V0XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIHtFdmVudFRhcmdldFtdfSBUaGUgY29tcG9zZWQgcGF0aCBvZiB0aGlzIGV2ZW50LlxuICAgICAqL1xuICAgIGNvbXBvc2VkUGF0aCgpIHtcbiAgICAgICAgY29uc3QgY3VycmVudFRhcmdldCA9IHBkKHRoaXMpLmN1cnJlbnRUYXJnZXQ7XG4gICAgICAgIGlmIChjdXJyZW50VGFyZ2V0ID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBbXVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbY3VycmVudFRhcmdldF1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29uc3RhbnQgb2YgTk9ORS5cbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIGdldCBOT05FKCkge1xuICAgICAgICByZXR1cm4gMFxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb25zdGFudCBvZiBDQVBUVVJJTkdfUEhBU0UuXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBnZXQgQ0FQVFVSSU5HX1BIQVNFKCkge1xuICAgICAgICByZXR1cm4gMVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb25zdGFudCBvZiBBVF9UQVJHRVQuXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBnZXQgQVRfVEFSR0VUKCkge1xuICAgICAgICByZXR1cm4gMlxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb25zdGFudCBvZiBCVUJCTElOR19QSEFTRS5cbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIGdldCBCVUJCTElOR19QSEFTRSgpIHtcbiAgICAgICAgcmV0dXJuIDNcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHRhcmdldCBvZiB0aGlzIGV2ZW50LlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgZ2V0IGV2ZW50UGhhc2UoKSB7XG4gICAgICAgIHJldHVybiBwZCh0aGlzKS5ldmVudFBoYXNlXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFN0b3AgZXZlbnQgYnViYmxpbmcuXG4gICAgICogQHJldHVybnMge3ZvaWR9XG4gICAgICovXG4gICAgc3RvcFByb3BhZ2F0aW9uKCkge1xuICAgICAgICBjb25zdCBkYXRhID0gcGQodGhpcyk7XG5cbiAgICAgICAgZGF0YS5zdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgaWYgKHR5cGVvZiBkYXRhLmV2ZW50LnN0b3BQcm9wYWdhdGlvbiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICBkYXRhLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFN0b3AgZXZlbnQgYnViYmxpbmcuXG4gICAgICogQHJldHVybnMge3ZvaWR9XG4gICAgICovXG4gICAgc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCkge1xuICAgICAgICBjb25zdCBkYXRhID0gcGQodGhpcyk7XG5cbiAgICAgICAgZGF0YS5zdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgZGF0YS5pbW1lZGlhdGVTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgaWYgKHR5cGVvZiBkYXRhLmV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICBkYXRhLmV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBmbGFnIHRvIGJlIGJ1YmJsaW5nLlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIGdldCBidWJibGVzKCkge1xuICAgICAgICByZXR1cm4gQm9vbGVhbihwZCh0aGlzKS5ldmVudC5idWJibGVzKVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZmxhZyB0byBiZSBjYW5jZWxhYmxlLlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIGdldCBjYW5jZWxhYmxlKCkge1xuICAgICAgICByZXR1cm4gQm9vbGVhbihwZCh0aGlzKS5ldmVudC5jYW5jZWxhYmxlKVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYW5jZWwgdGhpcyBldmVudC5cbiAgICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICAgKi9cbiAgICBwcmV2ZW50RGVmYXVsdCgpIHtcbiAgICAgICAgc2V0Q2FuY2VsRmxhZyhwZCh0aGlzKSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBmbGFnIHRvIGluZGljYXRlIGNhbmNlbGxhdGlvbiBzdGF0ZS5cbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBnZXQgZGVmYXVsdFByZXZlbnRlZCgpIHtcbiAgICAgICAgcmV0dXJuIHBkKHRoaXMpLmNhbmNlbGVkXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBmbGFnIHRvIGJlIGNvbXBvc2VkLlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIGdldCBjb21wb3NlZCgpIHtcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4ocGQodGhpcykuZXZlbnQuY29tcG9zZWQpXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSB1bml4IHRpbWUgb2YgdGhpcyBldmVudC5cbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIGdldCB0aW1lU3RhbXAoKSB7XG4gICAgICAgIHJldHVybiBwZCh0aGlzKS50aW1lU3RhbXBcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHRhcmdldCBvZiB0aGlzIGV2ZW50LlxuICAgICAqIEB0eXBlIHtFdmVudFRhcmdldH1cbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqL1xuICAgIGdldCBzcmNFbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gcGQodGhpcykuZXZlbnRUYXJnZXRcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGZsYWcgdG8gc3RvcCBldmVudCBidWJibGluZy5cbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqL1xuICAgIGdldCBjYW5jZWxCdWJibGUoKSB7XG4gICAgICAgIHJldHVybiBwZCh0aGlzKS5zdG9wcGVkXG4gICAgfSxcbiAgICBzZXQgY2FuY2VsQnViYmxlKHZhbHVlKSB7XG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGEgPSBwZCh0aGlzKTtcblxuICAgICAgICBkYXRhLnN0b3BwZWQgPSB0cnVlO1xuICAgICAgICBpZiAodHlwZW9mIGRhdGEuZXZlbnQuY2FuY2VsQnViYmxlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgZGF0YS5ldmVudC5jYW5jZWxCdWJibGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBmbGFnIHRvIGluZGljYXRlIGNhbmNlbGxhdGlvbiBzdGF0ZS5cbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqL1xuICAgIGdldCByZXR1cm5WYWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuICFwZCh0aGlzKS5jYW5jZWxlZFxuICAgIH0sXG4gICAgc2V0IHJldHVyblZhbHVlKHZhbHVlKSB7XG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgIHNldENhbmNlbEZsYWcocGQodGhpcykpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEluaXRpYWxpemUgdGhpcyBldmVudCBvYmplY3QuIEJ1dCBkbyBub3RoaW5nIHVuZGVyIGV2ZW50IGRpc3BhdGNoaW5nLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIFRoZSBldmVudCB0eXBlLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2J1YmJsZXM9ZmFsc2VdIFRoZSBmbGFnIHRvIGJlIHBvc3NpYmxlIHRvIGJ1YmJsZSB1cC5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtjYW5jZWxhYmxlPWZhbHNlXSBUaGUgZmxhZyB0byBiZSBwb3NzaWJsZSB0byBjYW5jZWwuXG4gICAgICogQGRlcHJlY2F0ZWRcbiAgICAgKi9cbiAgICBpbml0RXZlbnQoKSB7XG4gICAgICAgIC8vIERvIG5vdGhpbmcuXG4gICAgfSxcbn07XG5cbi8vIGBjb25zdHJ1Y3RvcmAgaXMgbm90IGVudW1lcmFibGUuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRXZlbnQucHJvdG90eXBlLCBcImNvbnN0cnVjdG9yXCIsIHtcbiAgICB2YWx1ZTogRXZlbnQsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIHdyaXRhYmxlOiB0cnVlLFxufSk7XG5cbi8vIEVuc3VyZSBgZXZlbnQgaW5zdGFuY2VvZiB3aW5kb3cuRXZlbnRgIGlzIGB0cnVlYC5cbmlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cuRXZlbnQgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoRXZlbnQucHJvdG90eXBlLCB3aW5kb3cuRXZlbnQucHJvdG90eXBlKTtcblxuICAgIC8vIE1ha2UgYXNzb2NpYXRpb24gZm9yIHdyYXBwZXJzLlxuICAgIHdyYXBwZXJzLnNldCh3aW5kb3cuRXZlbnQucHJvdG90eXBlLCBFdmVudCk7XG59XG5cbi8qKlxuICogR2V0IHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9yIHRvIHJlZGlyZWN0IGEgZ2l2ZW4gcHJvcGVydHkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFByb3BlcnR5IG5hbWUgdG8gZGVmaW5lIHByb3BlcnR5IGRlc2NyaXB0b3IuXG4gKiBAcmV0dXJucyB7UHJvcGVydHlEZXNjcmlwdG9yfSBUaGUgcHJvcGVydHkgZGVzY3JpcHRvciB0byByZWRpcmVjdCB0aGUgcHJvcGVydHkuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBkZWZpbmVSZWRpcmVjdERlc2NyaXB0b3Ioa2V5KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgcmV0dXJuIHBkKHRoaXMpLmV2ZW50W2tleV1cbiAgICAgICAgfSxcbiAgICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgICAgICBwZCh0aGlzKS5ldmVudFtrZXldID0gdmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICB9XG59XG5cbi8qKlxuICogR2V0IHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9yIHRvIGNhbGwgYSBnaXZlbiBtZXRob2QgcHJvcGVydHkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFByb3BlcnR5IG5hbWUgdG8gZGVmaW5lIHByb3BlcnR5IGRlc2NyaXB0b3IuXG4gKiBAcmV0dXJucyB7UHJvcGVydHlEZXNjcmlwdG9yfSBUaGUgcHJvcGVydHkgZGVzY3JpcHRvciB0byBjYWxsIHRoZSBtZXRob2QgcHJvcGVydHkuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBkZWZpbmVDYWxsRGVzY3JpcHRvcihrZXkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZSgpIHtcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0gcGQodGhpcykuZXZlbnQ7XG4gICAgICAgICAgICByZXR1cm4gZXZlbnRba2V5XS5hcHBseShldmVudCwgYXJndW1lbnRzKVxuICAgICAgICB9LFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgfVxufVxuXG4vKipcbiAqIERlZmluZSBuZXcgd3JhcHBlciBjbGFzcy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IEJhc2VFdmVudCBUaGUgYmFzZSB3cmFwcGVyIGNsYXNzLlxuICogQHBhcmFtIHtPYmplY3R9IHByb3RvIFRoZSBwcm90b3R5cGUgb2YgdGhlIG9yaWdpbmFsIGV2ZW50LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBUaGUgZGVmaW5lZCB3cmFwcGVyIGNsYXNzLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZGVmaW5lV3JhcHBlcihCYXNlRXZlbnQsIHByb3RvKSB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHByb3RvKTtcbiAgICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIEJhc2VFdmVudFxuICAgIH1cblxuICAgIC8qKiBDdXN0b21FdmVudCAqL1xuICAgIGZ1bmN0aW9uIEN1c3RvbUV2ZW50KGV2ZW50VGFyZ2V0LCBldmVudCkge1xuICAgICAgICBCYXNlRXZlbnQuY2FsbCh0aGlzLCBldmVudFRhcmdldCwgZXZlbnQpO1xuICAgIH1cblxuICAgIEN1c3RvbUV2ZW50LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQmFzZUV2ZW50LnByb3RvdHlwZSwge1xuICAgICAgICBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogQ3VzdG9tRXZlbnQsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSxcbiAgICB9KTtcblxuICAgIC8vIERlZmluZSBhY2Nlc3NvcnMuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGtleXNbaV07XG4gICAgICAgIGlmICghKGtleSBpbiBCYXNlRXZlbnQucHJvdG90eXBlKSkge1xuICAgICAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJvdG8sIGtleSk7XG4gICAgICAgICAgICBjb25zdCBpc0Z1bmMgPSB0eXBlb2YgZGVzY3JpcHRvci52YWx1ZSA9PT0gXCJmdW5jdGlvblwiO1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFxuICAgICAgICAgICAgICAgIEN1c3RvbUV2ZW50LnByb3RvdHlwZSxcbiAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgaXNGdW5jXG4gICAgICAgICAgICAgICAgICAgID8gZGVmaW5lQ2FsbERlc2NyaXB0b3Ioa2V5KVxuICAgICAgICAgICAgICAgICAgICA6IGRlZmluZVJlZGlyZWN0RGVzY3JpcHRvcihrZXkpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIEN1c3RvbUV2ZW50XG59XG5cbi8qKlxuICogR2V0IHRoZSB3cmFwcGVyIGNsYXNzIG9mIGEgZ2l2ZW4gcHJvdG90eXBlLlxuICogQHBhcmFtIHtPYmplY3R9IHByb3RvIFRoZSBwcm90b3R5cGUgb2YgdGhlIG9yaWdpbmFsIGV2ZW50IHRvIGdldCBpdHMgd3JhcHBlci5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gVGhlIHdyYXBwZXIgY2xhc3MuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBnZXRXcmFwcGVyKHByb3RvKSB7XG4gICAgaWYgKHByb3RvID09IG51bGwgfHwgcHJvdG8gPT09IE9iamVjdC5wcm90b3R5cGUpIHtcbiAgICAgICAgcmV0dXJuIEV2ZW50XG4gICAgfVxuXG4gICAgbGV0IHdyYXBwZXIgPSB3cmFwcGVycy5nZXQocHJvdG8pO1xuICAgIGlmICh3cmFwcGVyID09IG51bGwpIHtcbiAgICAgICAgd3JhcHBlciA9IGRlZmluZVdyYXBwZXIoZ2V0V3JhcHBlcihPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG8pKSwgcHJvdG8pO1xuICAgICAgICB3cmFwcGVycy5zZXQocHJvdG8sIHdyYXBwZXIpO1xuICAgIH1cbiAgICByZXR1cm4gd3JhcHBlclxufVxuXG4vKipcbiAqIFdyYXAgYSBnaXZlbiBldmVudCB0byBtYW5hZ2VtZW50IGEgZGlzcGF0Y2hpbmcuXG4gKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fSBldmVudFRhcmdldCBUaGUgZXZlbnQgdGFyZ2V0IG9mIHRoaXMgZGlzcGF0Y2hpbmcuXG4gKiBAcGFyYW0ge09iamVjdH0gZXZlbnQgVGhlIGV2ZW50IHRvIHdyYXAuXG4gKiBAcmV0dXJucyB7RXZlbnR9IFRoZSB3cmFwcGVyIGluc3RhbmNlLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gd3JhcEV2ZW50KGV2ZW50VGFyZ2V0LCBldmVudCkge1xuICAgIGNvbnN0IFdyYXBwZXIgPSBnZXRXcmFwcGVyKE9iamVjdC5nZXRQcm90b3R5cGVPZihldmVudCkpO1xuICAgIHJldHVybiBuZXcgV3JhcHBlcihldmVudFRhcmdldCwgZXZlbnQpXG59XG5cbi8qKlxuICogR2V0IHRoZSBpbW1lZGlhdGVTdG9wcGVkIGZsYWcgb2YgYSBnaXZlbiBldmVudC5cbiAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IFRoZSBldmVudCB0byBnZXQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVGhlIGZsYWcgdG8gc3RvcCBwcm9wYWdhdGlvbiBpbW1lZGlhdGVseS5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGlzU3RvcHBlZChldmVudCkge1xuICAgIHJldHVybiBwZChldmVudCkuaW1tZWRpYXRlU3RvcHBlZFxufVxuXG4vKipcbiAqIFNldCB0aGUgY3VycmVudCBldmVudCBwaGFzZSBvZiBhIGdpdmVuIGV2ZW50LlxuICogQHBhcmFtIHtFdmVudH0gZXZlbnQgVGhlIGV2ZW50IHRvIHNldCBjdXJyZW50IHRhcmdldC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBldmVudFBoYXNlIE5ldyBldmVudCBwaGFzZS5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gc2V0RXZlbnRQaGFzZShldmVudCwgZXZlbnRQaGFzZSkge1xuICAgIHBkKGV2ZW50KS5ldmVudFBoYXNlID0gZXZlbnRQaGFzZTtcbn1cblxuLyoqXG4gKiBTZXQgdGhlIGN1cnJlbnQgdGFyZ2V0IG9mIGEgZ2l2ZW4gZXZlbnQuXG4gKiBAcGFyYW0ge0V2ZW50fSBldmVudCBUaGUgZXZlbnQgdG8gc2V0IGN1cnJlbnQgdGFyZ2V0LlxuICogQHBhcmFtIHtFdmVudFRhcmdldHxudWxsfSBjdXJyZW50VGFyZ2V0IE5ldyBjdXJyZW50IHRhcmdldC5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gc2V0Q3VycmVudFRhcmdldChldmVudCwgY3VycmVudFRhcmdldCkge1xuICAgIHBkKGV2ZW50KS5jdXJyZW50VGFyZ2V0ID0gY3VycmVudFRhcmdldDtcbn1cblxuLyoqXG4gKiBTZXQgYSBwYXNzaXZlIGxpc3RlbmVyIG9mIGEgZ2l2ZW4gZXZlbnQuXG4gKiBAcGFyYW0ge0V2ZW50fSBldmVudCBUaGUgZXZlbnQgdG8gc2V0IGN1cnJlbnQgdGFyZ2V0LlxuICogQHBhcmFtIHtGdW5jdGlvbnxudWxsfSBwYXNzaXZlTGlzdGVuZXIgTmV3IHBhc3NpdmUgbGlzdGVuZXIuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNldFBhc3NpdmVMaXN0ZW5lcihldmVudCwgcGFzc2l2ZUxpc3RlbmVyKSB7XG4gICAgcGQoZXZlbnQpLnBhc3NpdmVMaXN0ZW5lciA9IHBhc3NpdmVMaXN0ZW5lcjtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBMaXN0ZW5lck5vZGVcbiAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IGxpc3RlbmVyXG4gKiBAcHJvcGVydHkgezF8MnwzfSBsaXN0ZW5lclR5cGVcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gcGFzc2l2ZVxuICogQHByb3BlcnR5IHtib29sZWFufSBvbmNlXG4gKiBAcHJvcGVydHkge0xpc3RlbmVyTm9kZXxudWxsfSBuZXh0XG4gKiBAcHJpdmF0ZVxuICovXG5cbi8qKlxuICogQHR5cGUge1dlYWtNYXA8b2JqZWN0LCBNYXA8c3RyaW5nLCBMaXN0ZW5lck5vZGU+Pn1cbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IGxpc3RlbmVyc01hcCA9IG5ldyBXZWFrTWFwKCk7XG5cbi8vIExpc3RlbmVyIHR5cGVzXG5jb25zdCBDQVBUVVJFID0gMTtcbmNvbnN0IEJVQkJMRSA9IDI7XG5jb25zdCBBVFRSSUJVVEUgPSAzO1xuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgYSBnaXZlbiB2YWx1ZSBpcyBhbiBvYmplY3Qgb3Igbm90LlxuICogQHBhcmFtIHthbnl9IHggVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgdmFsdWUgaXMgYW4gb2JqZWN0LlxuICovXG5mdW5jdGlvbiBpc09iamVjdCh4KSB7XG4gICAgcmV0dXJuIHggIT09IG51bGwgJiYgdHlwZW9mIHggPT09IFwib2JqZWN0XCIgLy9lc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG59XG5cbi8qKlxuICogR2V0IGxpc3RlbmVycy5cbiAqIEBwYXJhbSB7RXZlbnRUYXJnZXR9IGV2ZW50VGFyZ2V0IFRoZSBldmVudCB0YXJnZXQgdG8gZ2V0LlxuICogQHJldHVybnMge01hcDxzdHJpbmcsIExpc3RlbmVyTm9kZT59IFRoZSBsaXN0ZW5lcnMuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBnZXRMaXN0ZW5lcnMoZXZlbnRUYXJnZXQpIHtcbiAgICBjb25zdCBsaXN0ZW5lcnMgPSBsaXN0ZW5lcnNNYXAuZ2V0KGV2ZW50VGFyZ2V0KTtcbiAgICBpZiAobGlzdGVuZXJzID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgIFwiJ3RoaXMnIGlzIGV4cGVjdGVkIGFuIEV2ZW50VGFyZ2V0IG9iamVjdCwgYnV0IGdvdCBhbm90aGVyIHZhbHVlLlwiXG4gICAgICAgIClcbiAgICB9XG4gICAgcmV0dXJuIGxpc3RlbmVyc1xufVxuXG4vKipcbiAqIEdldCB0aGUgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIGV2ZW50IGF0dHJpYnV0ZSBvZiBhIGdpdmVuIGV2ZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZSBUaGUgZXZlbnQgbmFtZSB0byBnZXQgcHJvcGVydHkgZGVzY3JpcHRvci5cbiAqIEByZXR1cm5zIHtQcm9wZXJ0eURlc2NyaXB0b3J9IFRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9yLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZGVmaW5lRXZlbnRBdHRyaWJ1dGVEZXNjcmlwdG9yKGV2ZW50TmFtZSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGdldCgpIHtcbiAgICAgICAgICAgIGNvbnN0IGxpc3RlbmVycyA9IGdldExpc3RlbmVycyh0aGlzKTtcbiAgICAgICAgICAgIGxldCBub2RlID0gbGlzdGVuZXJzLmdldChldmVudE5hbWUpO1xuICAgICAgICAgICAgd2hpbGUgKG5vZGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChub2RlLmxpc3RlbmVyVHlwZSA9PT0gQVRUUklCVVRFKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlLmxpc3RlbmVyXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLm5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICB9LFxuXG4gICAgICAgIHNldChsaXN0ZW5lcikge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBsaXN0ZW5lciAhPT0gXCJmdW5jdGlvblwiICYmICFpc09iamVjdChsaXN0ZW5lcikpIHtcbiAgICAgICAgICAgICAgICBsaXN0ZW5lciA9IG51bGw7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGxpc3RlbmVycyA9IGdldExpc3RlbmVycyh0aGlzKTtcblxuICAgICAgICAgICAgLy8gVHJhdmVyc2UgdG8gdGhlIHRhaWwgd2hpbGUgcmVtb3Zpbmcgb2xkIHZhbHVlLlxuICAgICAgICAgICAgbGV0IHByZXYgPSBudWxsO1xuICAgICAgICAgICAgbGV0IG5vZGUgPSBsaXN0ZW5lcnMuZ2V0KGV2ZW50TmFtZSk7XG4gICAgICAgICAgICB3aGlsZSAobm9kZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGUubGlzdGVuZXJUeXBlID09PSBBVFRSSUJVVEUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIG9sZCB2YWx1ZS5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHByZXYgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXYubmV4dCA9IG5vZGUubmV4dDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChub2RlLm5leHQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVycy5zZXQoZXZlbnROYW1lLCBub2RlLm5leHQpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJzLmRlbGV0ZShldmVudE5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcHJldiA9IG5vZGU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUubmV4dDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQWRkIG5ldyB2YWx1ZS5cbiAgICAgICAgICAgIGlmIChsaXN0ZW5lciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld05vZGUgPSB7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyLFxuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lclR5cGU6IEFUVFJJQlVURSxcbiAgICAgICAgICAgICAgICAgICAgcGFzc2l2ZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIG9uY2U6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBuZXh0OiBudWxsLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgaWYgKHByZXYgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJzLnNldChldmVudE5hbWUsIG5ld05vZGUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHByZXYubmV4dCA9IG5ld05vZGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgfVxufVxuXG4vKipcbiAqIERlZmluZSBhbiBldmVudCBhdHRyaWJ1dGUgKGUuZy4gYGV2ZW50VGFyZ2V0Lm9uY2xpY2tgKS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBldmVudFRhcmdldFByb3RvdHlwZSBUaGUgZXZlbnQgdGFyZ2V0IHByb3RvdHlwZSB0byBkZWZpbmUgYW4gZXZlbnQgYXR0cmJpdGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lIFRoZSBldmVudCBuYW1lIHRvIGRlZmluZS5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBkZWZpbmVFdmVudEF0dHJpYnV0ZShldmVudFRhcmdldFByb3RvdHlwZSwgZXZlbnROYW1lKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFxuICAgICAgICBldmVudFRhcmdldFByb3RvdHlwZSxcbiAgICAgICAgYG9uJHtldmVudE5hbWV9YCxcbiAgICAgICAgZGVmaW5lRXZlbnRBdHRyaWJ1dGVEZXNjcmlwdG9yKGV2ZW50TmFtZSlcbiAgICApO1xufVxuXG4vKipcbiAqIERlZmluZSBhIGN1c3RvbSBFdmVudFRhcmdldCB3aXRoIGV2ZW50IGF0dHJpYnV0ZXMuXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBldmVudE5hbWVzIEV2ZW50IG5hbWVzIGZvciBldmVudCBhdHRyaWJ1dGVzLlxuICogQHJldHVybnMge0V2ZW50VGFyZ2V0fSBUaGUgY3VzdG9tIEV2ZW50VGFyZ2V0LlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZGVmaW5lQ3VzdG9tRXZlbnRUYXJnZXQoZXZlbnROYW1lcykge1xuICAgIC8qKiBDdXN0b21FdmVudFRhcmdldCAqL1xuICAgIGZ1bmN0aW9uIEN1c3RvbUV2ZW50VGFyZ2V0KCkge1xuICAgICAgICBFdmVudFRhcmdldC5jYWxsKHRoaXMpO1xuICAgIH1cblxuICAgIEN1c3RvbUV2ZW50VGFyZ2V0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRUYXJnZXQucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgICAgICB2YWx1ZTogQ3VzdG9tRXZlbnRUYXJnZXQsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZXZlbnROYW1lcy5sZW5ndGg7ICsraSkge1xuICAgICAgICBkZWZpbmVFdmVudEF0dHJpYnV0ZShDdXN0b21FdmVudFRhcmdldC5wcm90b3R5cGUsIGV2ZW50TmFtZXNbaV0pO1xuICAgIH1cblxuICAgIHJldHVybiBDdXN0b21FdmVudFRhcmdldFxufVxuXG4vKipcbiAqIEV2ZW50VGFyZ2V0LlxuICpcbiAqIC0gVGhpcyBpcyBjb25zdHJ1Y3RvciBpZiBubyBhcmd1bWVudHMuXG4gKiAtIFRoaXMgaXMgYSBmdW5jdGlvbiB3aGljaCByZXR1cm5zIGEgQ3VzdG9tRXZlbnRUYXJnZXQgY29uc3RydWN0b3IgaWYgdGhlcmUgYXJlIGFyZ3VtZW50cy5cbiAqXG4gKiBGb3IgZXhhbXBsZTpcbiAqXG4gKiAgICAgY2xhc3MgQSBleHRlbmRzIEV2ZW50VGFyZ2V0IHt9XG4gKiAgICAgY2xhc3MgQiBleHRlbmRzIEV2ZW50VGFyZ2V0KFwibWVzc2FnZVwiKSB7fVxuICogICAgIGNsYXNzIEMgZXh0ZW5kcyBFdmVudFRhcmdldChcIm1lc3NhZ2VcIiwgXCJlcnJvclwiKSB7fVxuICogICAgIGNsYXNzIEQgZXh0ZW5kcyBFdmVudFRhcmdldChbXCJtZXNzYWdlXCIsIFwiZXJyb3JcIl0pIHt9XG4gKi9cbmZ1bmN0aW9uIEV2ZW50VGFyZ2V0KCkge1xuICAgIC8qZXNsaW50LWRpc2FibGUgY29uc2lzdGVudC1yZXR1cm4gKi9cbiAgICBpZiAodGhpcyBpbnN0YW5jZW9mIEV2ZW50VGFyZ2V0KSB7XG4gICAgICAgIGxpc3RlbmVyc01hcC5zZXQodGhpcywgbmV3IE1hcCgpKTtcbiAgICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxICYmIEFycmF5LmlzQXJyYXkoYXJndW1lbnRzWzBdKSkge1xuICAgICAgICByZXR1cm4gZGVmaW5lQ3VzdG9tRXZlbnRUYXJnZXQoYXJndW1lbnRzWzBdKVxuICAgIH1cbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgdHlwZXMgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICB0eXBlc1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVmaW5lQ3VzdG9tRXZlbnRUYXJnZXQodHlwZXMpXG4gICAgfVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIilcbiAgICAvKmVzbGludC1lbmFibGUgY29uc2lzdGVudC1yZXR1cm4gKi9cbn1cblxuLy8gU2hvdWxkIGJlIGVudW1lcmFibGUsIGJ1dCBjbGFzcyBtZXRob2RzIGFyZSBub3QgZW51bWVyYWJsZS5cbkV2ZW50VGFyZ2V0LnByb3RvdHlwZSA9IHtcbiAgICAvKipcbiAgICAgKiBBZGQgYSBnaXZlbiBsaXN0ZW5lciB0byB0aGlzIGV2ZW50IHRhcmdldC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lIFRoZSBldmVudCBuYW1lIHRvIGFkZC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lciBUaGUgbGlzdGVuZXIgdG8gYWRkLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbnx7Y2FwdHVyZT86Ym9vbGVhbixwYXNzaXZlPzpib29sZWFuLG9uY2U/OmJvb2xlYW59fSBbb3B0aW9uc10gVGhlIG9wdGlvbnMgZm9yIHRoaXMgbGlzdGVuZXIuXG4gICAgICogQHJldHVybnMge3ZvaWR9XG4gICAgICovXG4gICAgYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGxpc3RlbmVyLCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChsaXN0ZW5lciA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGxpc3RlbmVyICE9PSBcImZ1bmN0aW9uXCIgJiYgIWlzT2JqZWN0KGxpc3RlbmVyKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIidsaXN0ZW5lcicgc2hvdWxkIGJlIGEgZnVuY3Rpb24gb3IgYW4gb2JqZWN0LlwiKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gZ2V0TGlzdGVuZXJzKHRoaXMpO1xuICAgICAgICBjb25zdCBvcHRpb25zSXNPYmogPSBpc09iamVjdChvcHRpb25zKTtcbiAgICAgICAgY29uc3QgY2FwdHVyZSA9IG9wdGlvbnNJc09ialxuICAgICAgICAgICAgPyBCb29sZWFuKG9wdGlvbnMuY2FwdHVyZSlcbiAgICAgICAgICAgIDogQm9vbGVhbihvcHRpb25zKTtcbiAgICAgICAgY29uc3QgbGlzdGVuZXJUeXBlID0gY2FwdHVyZSA/IENBUFRVUkUgOiBCVUJCTEU7XG4gICAgICAgIGNvbnN0IG5ld05vZGUgPSB7XG4gICAgICAgICAgICBsaXN0ZW5lcixcbiAgICAgICAgICAgIGxpc3RlbmVyVHlwZSxcbiAgICAgICAgICAgIHBhc3NpdmU6IG9wdGlvbnNJc09iaiAmJiBCb29sZWFuKG9wdGlvbnMucGFzc2l2ZSksXG4gICAgICAgICAgICBvbmNlOiBvcHRpb25zSXNPYmogJiYgQm9vbGVhbihvcHRpb25zLm9uY2UpLFxuICAgICAgICAgICAgbmV4dDogbnVsbCxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBTZXQgaXQgYXMgdGhlIGZpcnN0IG5vZGUgaWYgdGhlIGZpcnN0IG5vZGUgaXMgbnVsbC5cbiAgICAgICAgbGV0IG5vZGUgPSBsaXN0ZW5lcnMuZ2V0KGV2ZW50TmFtZSk7XG4gICAgICAgIGlmIChub2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxpc3RlbmVycy5zZXQoZXZlbnROYW1lLCBuZXdOb2RlKTtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgLy8gVHJhdmVyc2UgdG8gdGhlIHRhaWwgd2hpbGUgY2hlY2tpbmcgZHVwbGljYXRpb24uLlxuICAgICAgICBsZXQgcHJldiA9IG51bGw7XG4gICAgICAgIHdoaWxlIChub2RlICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBub2RlLmxpc3RlbmVyID09PSBsaXN0ZW5lciAmJlxuICAgICAgICAgICAgICAgIG5vZGUubGlzdGVuZXJUeXBlID09PSBsaXN0ZW5lclR5cGVcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIC8vIFNob3VsZCBpZ25vcmUgZHVwbGljYXRpb24uXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcmV2ID0gbm9kZTtcbiAgICAgICAgICAgIG5vZGUgPSBub2RlLm5leHQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBZGQgaXQuXG4gICAgICAgIHByZXYubmV4dCA9IG5ld05vZGU7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJlbW92ZSBhIGdpdmVuIGxpc3RlbmVyIGZyb20gdGhpcyBldmVudCB0YXJnZXQuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZSBUaGUgZXZlbnQgbmFtZSB0byByZW1vdmUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gbGlzdGVuZXIgVGhlIGxpc3RlbmVyIHRvIHJlbW92ZS5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW58e2NhcHR1cmU/OmJvb2xlYW4scGFzc2l2ZT86Ym9vbGVhbixvbmNlPzpib29sZWFufX0gW29wdGlvbnNdIFRoZSBvcHRpb25zIGZvciB0aGlzIGxpc3RlbmVyLlxuICAgICAqIEByZXR1cm5zIHt2b2lkfVxuICAgICAqL1xuICAgIHJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBsaXN0ZW5lciwgb3B0aW9ucykge1xuICAgICAgICBpZiAobGlzdGVuZXIgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSBnZXRMaXN0ZW5lcnModGhpcyk7XG4gICAgICAgIGNvbnN0IGNhcHR1cmUgPSBpc09iamVjdChvcHRpb25zKVxuICAgICAgICAgICAgPyBCb29sZWFuKG9wdGlvbnMuY2FwdHVyZSlcbiAgICAgICAgICAgIDogQm9vbGVhbihvcHRpb25zKTtcbiAgICAgICAgY29uc3QgbGlzdGVuZXJUeXBlID0gY2FwdHVyZSA/IENBUFRVUkUgOiBCVUJCTEU7XG5cbiAgICAgICAgbGV0IHByZXYgPSBudWxsO1xuICAgICAgICBsZXQgbm9kZSA9IGxpc3RlbmVycy5nZXQoZXZlbnROYW1lKTtcbiAgICAgICAgd2hpbGUgKG5vZGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIG5vZGUubGlzdGVuZXIgPT09IGxpc3RlbmVyICYmXG4gICAgICAgICAgICAgICAgbm9kZS5saXN0ZW5lclR5cGUgPT09IGxpc3RlbmVyVHlwZVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgaWYgKHByZXYgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJldi5uZXh0ID0gbm9kZS5uZXh0O1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS5uZXh0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVycy5zZXQoZXZlbnROYW1lLCBub2RlLm5leHQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVycy5kZWxldGUoZXZlbnROYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHByZXYgPSBub2RlO1xuICAgICAgICAgICAgbm9kZSA9IG5vZGUubmV4dDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBEaXNwYXRjaCBhIGdpdmVuIGV2ZW50LlxuICAgICAqIEBwYXJhbSB7RXZlbnR8e3R5cGU6c3RyaW5nfX0gZXZlbnQgVGhlIGV2ZW50IHRvIGRpc3BhdGNoLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBgZmFsc2VgIGlmIGNhbmNlbGVkLlxuICAgICAqL1xuICAgIGRpc3BhdGNoRXZlbnQoZXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50ID09IG51bGwgfHwgdHlwZW9mIGV2ZW50LnR5cGUgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wiZXZlbnQudHlwZVwiIHNob3VsZCBiZSBhIHN0cmluZy4nKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgbGlzdGVuZXJzIGFyZW4ndCByZWdpc3RlcmVkLCB0ZXJtaW5hdGUuXG4gICAgICAgIGNvbnN0IGxpc3RlbmVycyA9IGdldExpc3RlbmVycyh0aGlzKTtcbiAgICAgICAgY29uc3QgZXZlbnROYW1lID0gZXZlbnQudHlwZTtcbiAgICAgICAgbGV0IG5vZGUgPSBsaXN0ZW5lcnMuZ2V0KGV2ZW50TmFtZSk7XG4gICAgICAgIGlmIChub2RlID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cblxuICAgICAgICAvLyBTaW5jZSB3ZSBjYW5ub3QgcmV3cml0ZSBzZXZlcmFsIHByb3BlcnRpZXMsIHNvIHdyYXAgb2JqZWN0LlxuICAgICAgICBjb25zdCB3cmFwcGVkRXZlbnQgPSB3cmFwRXZlbnQodGhpcywgZXZlbnQpO1xuXG4gICAgICAgIC8vIFRoaXMgZG9lc24ndCBwcm9jZXNzIGNhcHR1cmluZyBwaGFzZSBhbmQgYnViYmxpbmcgcGhhc2UuXG4gICAgICAgIC8vIFRoaXMgaXNuJ3QgcGFydGljaXBhdGluZyBpbiBhIHRyZWUuXG4gICAgICAgIGxldCBwcmV2ID0gbnVsbDtcbiAgICAgICAgd2hpbGUgKG5vZGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gUmVtb3ZlIHRoaXMgbGlzdGVuZXIgaWYgaXQncyBvbmNlXG4gICAgICAgICAgICBpZiAobm9kZS5vbmNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHByZXYgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJldi5uZXh0ID0gbm9kZS5uZXh0O1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS5uZXh0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVycy5zZXQoZXZlbnROYW1lLCBub2RlLm5leHQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVycy5kZWxldGUoZXZlbnROYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHByZXYgPSBub2RlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBDYWxsIHRoaXMgbGlzdGVuZXJcbiAgICAgICAgICAgIHNldFBhc3NpdmVMaXN0ZW5lcihcbiAgICAgICAgICAgICAgICB3cmFwcGVkRXZlbnQsXG4gICAgICAgICAgICAgICAgbm9kZS5wYXNzaXZlID8gbm9kZS5saXN0ZW5lciA6IG51bGxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG5vZGUubGlzdGVuZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUubGlzdGVuZXIuY2FsbCh0aGlzLCB3cmFwcGVkRXZlbnQpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgY29uc29sZSAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGNvbnNvbGUuZXJyb3IgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgbm9kZS5saXN0ZW5lclR5cGUgIT09IEFUVFJJQlVURSAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiBub2RlLmxpc3RlbmVyLmhhbmRsZUV2ZW50ID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIG5vZGUubGlzdGVuZXIuaGFuZGxlRXZlbnQod3JhcHBlZEV2ZW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQnJlYWsgaWYgYGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbmAgd2FzIGNhbGxlZC5cbiAgICAgICAgICAgIGlmIChpc1N0b3BwZWQod3JhcHBlZEV2ZW50KSkge1xuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG5vZGUgPSBub2RlLm5leHQ7XG4gICAgICAgIH1cbiAgICAgICAgc2V0UGFzc2l2ZUxpc3RlbmVyKHdyYXBwZWRFdmVudCwgbnVsbCk7XG4gICAgICAgIHNldEV2ZW50UGhhc2Uod3JhcHBlZEV2ZW50LCAwKTtcbiAgICAgICAgc2V0Q3VycmVudFRhcmdldCh3cmFwcGVkRXZlbnQsIG51bGwpO1xuXG4gICAgICAgIHJldHVybiAhd3JhcHBlZEV2ZW50LmRlZmF1bHRQcmV2ZW50ZWRcbiAgICB9LFxufTtcblxuLy8gYGNvbnN0cnVjdG9yYCBpcyBub3QgZW51bWVyYWJsZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShFdmVudFRhcmdldC5wcm90b3R5cGUsIFwiY29uc3RydWN0b3JcIiwge1xuICAgIHZhbHVlOiBFdmVudFRhcmdldCxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgd3JpdGFibGU6IHRydWUsXG59KTtcblxuLy8gRW5zdXJlIGBldmVudFRhcmdldCBpbnN0YW5jZW9mIHdpbmRvdy5FdmVudFRhcmdldGAgaXMgYHRydWVgLlxuaWYgKFxuICAgIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICB0eXBlb2Ygd2luZG93LkV2ZW50VGFyZ2V0ICE9PSBcInVuZGVmaW5lZFwiXG4pIHtcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoRXZlbnRUYXJnZXQucHJvdG90eXBlLCB3aW5kb3cuRXZlbnRUYXJnZXQucHJvdG90eXBlKTtcbn1cblxuZXhwb3J0cy5kZWZpbmVFdmVudEF0dHJpYnV0ZSA9IGRlZmluZUV2ZW50QXR0cmlidXRlO1xuZXhwb3J0cy5FdmVudFRhcmdldCA9IEV2ZW50VGFyZ2V0O1xuZXhwb3J0cy5kZWZhdWx0ID0gRXZlbnRUYXJnZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gRXZlbnRUYXJnZXRcbm1vZHVsZS5leHBvcnRzLkV2ZW50VGFyZ2V0ID0gbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gRXZlbnRUYXJnZXRcbm1vZHVsZS5leHBvcnRzLmRlZmluZUV2ZW50QXR0cmlidXRlID0gZGVmaW5lRXZlbnRBdHRyaWJ1dGVcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWV2ZW50LXRhcmdldC1zaGltLmpzLm1hcFxuIiwKICAgICIvKipcbiAqIEBhdXRob3IgVG9ydSBOYWdhc2hpbWEgPGh0dHBzOi8vZ2l0aHViLmNvbS9teXN0aWNhdGVhPlxuICogU2VlIExJQ0VOU0UgZmlsZSBpbiByb290IGRpcmVjdG9yeSBmb3IgZnVsbCBsaWNlbnNlLlxuICovXG4ndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbnZhciBldmVudFRhcmdldFNoaW0gPSByZXF1aXJlKCdldmVudC10YXJnZXQtc2hpbScpO1xuXG4vKipcbiAqIFRoZSBzaWduYWwgY2xhc3MuXG4gKiBAc2VlIGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jYWJvcnRzaWduYWxcbiAqL1xuY2xhc3MgQWJvcnRTaWduYWwgZXh0ZW5kcyBldmVudFRhcmdldFNoaW0uRXZlbnRUYXJnZXQge1xuICAgIC8qKlxuICAgICAqIEFib3J0U2lnbmFsIGNhbm5vdCBiZSBjb25zdHJ1Y3RlZCBkaXJlY3RseS5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFib3J0U2lnbmFsIGNhbm5vdCBiZSBjb25zdHJ1Y3RlZCBkaXJlY3RseVwiKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhpcyBgQWJvcnRTaWduYWxgJ3MgYEFib3J0Q29udHJvbGxlcmAgaGFzIHNpZ25hbGVkIHRvIGFib3J0LCBhbmQgYGZhbHNlYCBvdGhlcndpc2UuXG4gICAgICovXG4gICAgZ2V0IGFib3J0ZWQoKSB7XG4gICAgICAgIGNvbnN0IGFib3J0ZWQgPSBhYm9ydGVkRmxhZ3MuZ2V0KHRoaXMpO1xuICAgICAgICBpZiAodHlwZW9mIGFib3J0ZWQgIT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCAndGhpcycgdG8gYmUgYW4gJ0Fib3J0U2lnbmFsJyBvYmplY3QsIGJ1dCBnb3QgJHt0aGlzID09PSBudWxsID8gXCJudWxsXCIgOiB0eXBlb2YgdGhpc31gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWJvcnRlZDtcbiAgICB9XG59XG5ldmVudFRhcmdldFNoaW0uZGVmaW5lRXZlbnRBdHRyaWJ1dGUoQWJvcnRTaWduYWwucHJvdG90eXBlLCBcImFib3J0XCIpO1xuLyoqXG4gKiBDcmVhdGUgYW4gQWJvcnRTaWduYWwgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBjcmVhdGVBYm9ydFNpZ25hbCgpIHtcbiAgICBjb25zdCBzaWduYWwgPSBPYmplY3QuY3JlYXRlKEFib3J0U2lnbmFsLnByb3RvdHlwZSk7XG4gICAgZXZlbnRUYXJnZXRTaGltLkV2ZW50VGFyZ2V0LmNhbGwoc2lnbmFsKTtcbiAgICBhYm9ydGVkRmxhZ3Muc2V0KHNpZ25hbCwgZmFsc2UpO1xuICAgIHJldHVybiBzaWduYWw7XG59XG4vKipcbiAqIEFib3J0IGEgZ2l2ZW4gc2lnbmFsLlxuICovXG5mdW5jdGlvbiBhYm9ydFNpZ25hbChzaWduYWwpIHtcbiAgICBpZiAoYWJvcnRlZEZsYWdzLmdldChzaWduYWwpICE9PSBmYWxzZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGFib3J0ZWRGbGFncy5zZXQoc2lnbmFsLCB0cnVlKTtcbiAgICBzaWduYWwuZGlzcGF0Y2hFdmVudCh7IHR5cGU6IFwiYWJvcnRcIiB9KTtcbn1cbi8qKlxuICogQWJvcnRlZCBmbGFnIGZvciBlYWNoIGluc3RhbmNlcy5cbiAqL1xuY29uc3QgYWJvcnRlZEZsYWdzID0gbmV3IFdlYWtNYXAoKTtcbi8vIFByb3BlcnRpZXMgc2hvdWxkIGJlIGVudW1lcmFibGUuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhBYm9ydFNpZ25hbC5wcm90b3R5cGUsIHtcbiAgICBhYm9ydGVkOiB7IGVudW1lcmFibGU6IHRydWUgfSxcbn0pO1xuLy8gYHRvU3RyaW5nKClgIHNob3VsZCByZXR1cm4gYFwiW29iamVjdCBBYm9ydFNpZ25hbF1cImBcbmlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC50b1N0cmluZ1RhZyA9PT0gXCJzeW1ib2xcIikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBYm9ydFNpZ25hbC5wcm90b3R5cGUsIFN5bWJvbC50b1N0cmluZ1RhZywge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlOiBcIkFib3J0U2lnbmFsXCIsXG4gICAgfSk7XG59XG5cbi8qKlxuICogVGhlIEFib3J0Q29udHJvbGxlci5cbiAqIEBzZWUgaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNhYm9ydGNvbnRyb2xsZXJcbiAqL1xuY2xhc3MgQWJvcnRDb250cm9sbGVyIHtcbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplIHRoaXMgY29udHJvbGxlci5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc2lnbmFscy5zZXQodGhpcywgY3JlYXRlQWJvcnRTaWduYWwoKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGBBYm9ydFNpZ25hbGAgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIG9iamVjdC5cbiAgICAgKi9cbiAgICBnZXQgc2lnbmFsKCkge1xuICAgICAgICByZXR1cm4gZ2V0U2lnbmFsKHRoaXMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBYm9ydCBhbmQgc2lnbmFsIHRvIGFueSBvYnNlcnZlcnMgdGhhdCB0aGUgYXNzb2NpYXRlZCBhY3Rpdml0eSBpcyB0byBiZSBhYm9ydGVkLlxuICAgICAqL1xuICAgIGFib3J0KCkge1xuICAgICAgICBhYm9ydFNpZ25hbChnZXRTaWduYWwodGhpcykpO1xuICAgIH1cbn1cbi8qKlxuICogQXNzb2NpYXRlZCBzaWduYWxzLlxuICovXG5jb25zdCBzaWduYWxzID0gbmV3IFdlYWtNYXAoKTtcbi8qKlxuICogR2V0IHRoZSBhc3NvY2lhdGVkIHNpZ25hbCBvZiBhIGdpdmVuIGNvbnRyb2xsZXIuXG4gKi9cbmZ1bmN0aW9uIGdldFNpZ25hbChjb250cm9sbGVyKSB7XG4gICAgY29uc3Qgc2lnbmFsID0gc2lnbmFscy5nZXQoY29udHJvbGxlcik7XG4gICAgaWYgKHNpZ25hbCA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkICd0aGlzJyB0byBiZSBhbiAnQWJvcnRDb250cm9sbGVyJyBvYmplY3QsIGJ1dCBnb3QgJHtjb250cm9sbGVyID09PSBudWxsID8gXCJudWxsXCIgOiB0eXBlb2YgY29udHJvbGxlcn1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHNpZ25hbDtcbn1cbi8vIFByb3BlcnRpZXMgc2hvdWxkIGJlIGVudW1lcmFibGUuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhBYm9ydENvbnRyb2xsZXIucHJvdG90eXBlLCB7XG4gICAgc2lnbmFsOiB7IGVudW1lcmFibGU6IHRydWUgfSxcbiAgICBhYm9ydDogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG59KTtcbmlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC50b1N0cmluZ1RhZyA9PT0gXCJzeW1ib2xcIikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBYm9ydENvbnRyb2xsZXIucHJvdG90eXBlLCBTeW1ib2wudG9TdHJpbmdUYWcsIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICB2YWx1ZTogXCJBYm9ydENvbnRyb2xsZXJcIixcbiAgICB9KTtcbn1cblxuZXhwb3J0cy5BYm9ydENvbnRyb2xsZXIgPSBBYm9ydENvbnRyb2xsZXI7XG5leHBvcnRzLkFib3J0U2lnbmFsID0gQWJvcnRTaWduYWw7XG5leHBvcnRzLmRlZmF1bHQgPSBBYm9ydENvbnRyb2xsZXI7XG5cbm1vZHVsZS5leHBvcnRzID0gQWJvcnRDb250cm9sbGVyXG5tb2R1bGUuZXhwb3J0cy5BYm9ydENvbnRyb2xsZXIgPSBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBBYm9ydENvbnRyb2xsZXJcbm1vZHVsZS5leHBvcnRzLkFib3J0U2lnbmFsID0gQWJvcnRTaWduYWxcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFib3J0LWNvbnRyb2xsZXIuanMubWFwXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBidWZmZXJNb2R1bGUgPSByZXF1aXJlKCdidWZmZXInKVxuY29uc3QgeyBrUmVzaXN0U3RvcFByb3BhZ2F0aW9uLCBTeW1ib2xEaXNwb3NlIH0gPSByZXF1aXJlKCcuL3ByaW1vcmRpYWxzJylcbmNvbnN0IEFib3J0U2lnbmFsID0gZ2xvYmFsVGhpcy5BYm9ydFNpZ25hbCB8fCByZXF1aXJlKCdhYm9ydC1jb250cm9sbGVyJykuQWJvcnRTaWduYWxcbmNvbnN0IEFib3J0Q29udHJvbGxlciA9IGdsb2JhbFRoaXMuQWJvcnRDb250cm9sbGVyIHx8IHJlcXVpcmUoJ2Fib3J0LWNvbnRyb2xsZXInKS5BYm9ydENvbnRyb2xsZXJcbmNvbnN0IEFzeW5jRnVuY3Rpb24gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYXN5bmMgZnVuY3Rpb24gKCkge30pLmNvbnN0cnVjdG9yXG5jb25zdCBCbG9iID0gZ2xvYmFsVGhpcy5CbG9iIHx8IGJ1ZmZlck1vZHVsZS5CbG9iXG4vKiBlc2xpbnQtZGlzYWJsZSBpbmRlbnQgKi9cbmNvbnN0IGlzQmxvYiA9XG4gIHR5cGVvZiBCbG9iICE9PSAndW5kZWZpbmVkJ1xuICAgID8gZnVuY3Rpb24gaXNCbG9iKGIpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGluZGVudFxuICAgICAgICByZXR1cm4gYiBpbnN0YW5jZW9mIEJsb2JcbiAgICAgIH1cbiAgICA6IGZ1bmN0aW9uIGlzQmxvYihiKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuLyogZXNsaW50LWVuYWJsZSBpbmRlbnQgKi9cblxuY29uc3QgdmFsaWRhdGVBYm9ydFNpZ25hbCA9IChzaWduYWwsIG5hbWUpID0+IHtcbiAgaWYgKHNpZ25hbCAhPT0gdW5kZWZpbmVkICYmIChzaWduYWwgPT09IG51bGwgfHwgdHlwZW9mIHNpZ25hbCAhPT0gJ29iamVjdCcgfHwgISgnYWJvcnRlZCcgaW4gc2lnbmFsKSkpIHtcbiAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUobmFtZSwgJ0Fib3J0U2lnbmFsJywgc2lnbmFsKVxuICB9XG59XG5jb25zdCB2YWxpZGF0ZUZ1bmN0aW9uID0gKHZhbHVlLCBuYW1lKSA9PiB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicpIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRShuYW1lLCAnRnVuY3Rpb24nLCB2YWx1ZSlcbn1cblxuLy8gVGhpcyBpcyBhIHNpbXBsaWZpZWQgdmVyc2lvbiBvZiBBZ2dyZWdhdGVFcnJvclxuY2xhc3MgQWdncmVnYXRlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKGVycm9ycykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShlcnJvcnMpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBpbnB1dCB0byBiZSBhbiBBcnJheSwgZ290ICR7dHlwZW9mIGVycm9yc31gKVxuICAgIH1cbiAgICBsZXQgbWVzc2FnZSA9ICcnXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlcnJvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIG1lc3NhZ2UgKz0gYCAgICAke2Vycm9yc1tpXS5zdGFja31cXG5gXG4gICAgfVxuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgdGhpcy5uYW1lID0gJ0FnZ3JlZ2F0ZUVycm9yJ1xuICAgIHRoaXMuZXJyb3JzID0gZXJyb3JzXG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0ge1xuICBBZ2dyZWdhdGVFcnJvcixcbiAga0VtcHR5T2JqZWN0OiBPYmplY3QuZnJlZXplKHt9KSxcbiAgb25jZShjYWxsYmFjaykge1xuICAgIGxldCBjYWxsZWQgPSBmYWxzZVxuICAgIHJldHVybiBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgICAgaWYgKGNhbGxlZCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGNhbGxlZCA9IHRydWVcbiAgICAgIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3MpXG4gICAgfVxuICB9LFxuICBjcmVhdGVEZWZlcnJlZFByb21pc2U6IGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgcmVzb2x2ZVxuICAgIGxldCByZWplY3RcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcm9taXNlL3BhcmFtLW5hbWVzXG4gICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXMsIHJlaikgPT4ge1xuICAgICAgcmVzb2x2ZSA9IHJlc1xuICAgICAgcmVqZWN0ID0gcmVqXG4gICAgfSlcbiAgICByZXR1cm4ge1xuICAgICAgcHJvbWlzZSxcbiAgICAgIHJlc29sdmUsXG4gICAgICByZWplY3RcbiAgICB9XG4gIH0sXG4gIHByb21pc2lmeShmbikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBmbigoZXJyLCAuLi5hcmdzKSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycilcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzb2x2ZSguLi5hcmdzKVxuICAgICAgfSlcbiAgICB9KVxuICB9LFxuICBkZWJ1Z2xvZygpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge31cbiAgfSxcbiAgZm9ybWF0KGZvcm1hdCwgLi4uYXJncykge1xuICAgIC8vIFNpbXBsaWZpZWQgdmVyc2lvbiBvZiBodHRwczovL25vZGVqcy5vcmcvYXBpL3V0aWwuaHRtbCN1dGlsZm9ybWF0Zm9ybWF0LWFyZ3NcbiAgICByZXR1cm4gZm9ybWF0LnJlcGxhY2UoLyUoW3NkaWZqXSkvZywgZnVuY3Rpb24gKC4uLltfdW51c2VkLCB0eXBlXSkge1xuICAgICAgY29uc3QgcmVwbGFjZW1lbnQgPSBhcmdzLnNoaWZ0KClcbiAgICAgIGlmICh0eXBlID09PSAnZicpIHtcbiAgICAgICAgcmV0dXJuIHJlcGxhY2VtZW50LnRvRml4ZWQoNilcbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2onKSB7XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShyZXBsYWNlbWVudClcbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3MnICYmIHR5cGVvZiByZXBsYWNlbWVudCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgY29uc3QgY3RvciA9IHJlcGxhY2VtZW50LmNvbnN0cnVjdG9yICE9PSBPYmplY3QgPyByZXBsYWNlbWVudC5jb25zdHJ1Y3Rvci5uYW1lIDogJydcbiAgICAgICAgcmV0dXJuIGAke2N0b3J9IHt9YC50cmltKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiByZXBsYWNlbWVudC50b1N0cmluZygpXG4gICAgICB9XG4gICAgfSlcbiAgfSxcbiAgaW5zcGVjdCh2YWx1ZSkge1xuICAgIC8vIFZhc3RseSBzaW1wbGlmaWVkIHZlcnNpb24gb2YgaHR0cHM6Ly9ub2RlanMub3JnL2FwaS91dGlsLmh0bWwjdXRpbGluc3BlY3RvYmplY3Qtb3B0aW9uc1xuICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICBpZiAodmFsdWUuaW5jbHVkZXMoXCInXCIpKSB7XG4gICAgICAgICAgaWYgKCF2YWx1ZS5pbmNsdWRlcygnXCInKSkge1xuICAgICAgICAgICAgcmV0dXJuIGBcIiR7dmFsdWV9XCJgXG4gICAgICAgICAgfSBlbHNlIGlmICghdmFsdWUuaW5jbHVkZXMoJ2AnKSAmJiAhdmFsdWUuaW5jbHVkZXMoJyR7JykpIHtcbiAgICAgICAgICAgIHJldHVybiBgXFxgJHt2YWx1ZX1cXGBgXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgJyR7dmFsdWV9J2BcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgIGlmIChpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gJ05hTidcbiAgICAgICAgfSBlbHNlIGlmIChPYmplY3QuaXModmFsdWUsIC0wKSkge1xuICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICBjYXNlICdiaWdpbnQnOlxuICAgICAgICByZXR1cm4gYCR7U3RyaW5nKHZhbHVlKX1uYFxuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICBjYXNlICd1bmRlZmluZWQnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKVxuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgcmV0dXJuICd7fSdcbiAgICB9XG4gIH0sXG4gIHR5cGVzOiB7XG4gICAgaXNBc3luY0Z1bmN0aW9uKGZuKSB7XG4gICAgICByZXR1cm4gZm4gaW5zdGFuY2VvZiBBc3luY0Z1bmN0aW9uXG4gICAgfSxcbiAgICBpc0FycmF5QnVmZmVyVmlldyhhcnIpIHtcbiAgICAgIHJldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcoYXJyKVxuICAgIH1cbiAgfSxcbiAgaXNCbG9iLFxuICBkZXByZWNhdGUoZm4sIG1lc3NhZ2UpIHtcbiAgICByZXR1cm4gZm5cbiAgfSxcbiAgYWRkQWJvcnRMaXN0ZW5lcjpcbiAgICByZXF1aXJlKCdldmVudHMnKS5hZGRBYm9ydExpc3RlbmVyIHx8XG4gICAgZnVuY3Rpb24gYWRkQWJvcnRMaXN0ZW5lcihzaWduYWwsIGxpc3RlbmVyKSB7XG4gICAgICBpZiAoc2lnbmFsID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKCdzaWduYWwnLCAnQWJvcnRTaWduYWwnLCBzaWduYWwpXG4gICAgICB9XG4gICAgICB2YWxpZGF0ZUFib3J0U2lnbmFsKHNpZ25hbCwgJ3NpZ25hbCcpXG4gICAgICB2YWxpZGF0ZUZ1bmN0aW9uKGxpc3RlbmVyLCAnbGlzdGVuZXInKVxuICAgICAgbGV0IHJlbW92ZUV2ZW50TGlzdGVuZXJcbiAgICAgIGlmIChzaWduYWwuYWJvcnRlZCkge1xuICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBsaXN0ZW5lcigpKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgbGlzdGVuZXIsIHtcbiAgICAgICAgICBfX3Byb3RvX186IG51bGwsXG4gICAgICAgICAgb25jZTogdHJ1ZSxcbiAgICAgICAgICBba1Jlc2lzdFN0b3BQcm9wYWdhdGlvbl06IHRydWVcbiAgICAgICAgfSlcbiAgICAgICAgcmVtb3ZlRXZlbnRMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgICAgICBzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBsaXN0ZW5lcilcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgX19wcm90b19fOiBudWxsLFxuICAgICAgICBbU3ltYm9sRGlzcG9zZV0oKSB7XG4gICAgICAgICAgdmFyIF9yZW1vdmVFdmVudExpc3RlbmVyXG4gICAgICAgICAgOyhfcmVtb3ZlRXZlbnRMaXN0ZW5lciA9IHJlbW92ZUV2ZW50TGlzdGVuZXIpID09PSBudWxsIHx8IF9yZW1vdmVFdmVudExpc3RlbmVyID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgICA6IF9yZW1vdmVFdmVudExpc3RlbmVyKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gIEFib3J0U2lnbmFsQW55OlxuICAgIEFib3J0U2lnbmFsLmFueSB8fFxuICAgIGZ1bmN0aW9uIEFib3J0U2lnbmFsQW55KHNpZ25hbHMpIHtcbiAgICAgIC8vIEZhc3QgcGF0aCBpZiB0aGVyZSBpcyBvbmx5IG9uZSBzaWduYWwuXG4gICAgICBpZiAoc2lnbmFscy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIHNpZ25hbHNbMF1cbiAgICAgIH1cbiAgICAgIGNvbnN0IGFjID0gbmV3IEFib3J0Q29udHJvbGxlcigpXG4gICAgICBjb25zdCBhYm9ydCA9ICgpID0+IGFjLmFib3J0KClcbiAgICAgIHNpZ25hbHMuZm9yRWFjaCgoc2lnbmFsKSA9PiB7XG4gICAgICAgIHZhbGlkYXRlQWJvcnRTaWduYWwoc2lnbmFsLCAnc2lnbmFscycpXG4gICAgICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0LCB7XG4gICAgICAgICAgb25jZTogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICAgIGFjLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAnYWJvcnQnLFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgc2lnbmFscy5mb3JFYWNoKChzaWduYWwpID0+IHNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0KSlcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG9uY2U6IHRydWVcbiAgICAgICAgfVxuICAgICAgKVxuICAgICAgcmV0dXJuIGFjLnNpZ25hbFxuICAgIH1cbn1cbm1vZHVsZS5leHBvcnRzLnByb21pc2lmeS5jdXN0b20gPSBTeW1ib2wuZm9yKCdub2RlanMudXRpbC5wcm9taXNpZnkuY3VzdG9tJylcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgZm9ybWF0LCBpbnNwZWN0LCBBZ2dyZWdhdGVFcnJvcjogQ3VzdG9tQWdncmVnYXRlRXJyb3IgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5cbi8qXG4gIFRoaXMgZmlsZSBpcyBhIHJlZHVjZWQgYW5kIGFkYXB0ZWQgdmVyc2lvbiBvZiB0aGUgbWFpbiBsaWIvaW50ZXJuYWwvZXJyb3JzLmpzIGZpbGUgZGVmaW5lZCBhdFxuXG4gIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL21hc3Rlci9saWIvaW50ZXJuYWwvZXJyb3JzLmpzXG5cbiAgRG9uJ3QgdHJ5IHRvIHJlcGxhY2Ugd2l0aCB0aGUgb3JpZ2luYWwgZmlsZSBhbmQga2VlcCBpdCB1cCB0byBkYXRlIChzdGFydGluZyBmcm9tIEUoLi4uKSBkZWZpbml0aW9ucylcbiAgd2l0aCB0aGUgdXBzdHJlYW0gZmlsZS5cbiovXG5cbmNvbnN0IEFnZ3JlZ2F0ZUVycm9yID0gZ2xvYmFsVGhpcy5BZ2dyZWdhdGVFcnJvciB8fCBDdXN0b21BZ2dyZWdhdGVFcnJvclxuY29uc3Qga0lzTm9kZUVycm9yID0gU3ltYm9sKCdrSXNOb2RlRXJyb3InKVxuY29uc3Qga1R5cGVzID0gW1xuICAnc3RyaW5nJyxcbiAgJ2Z1bmN0aW9uJyxcbiAgJ251bWJlcicsXG4gICdvYmplY3QnLFxuICAvLyBBY2NlcHQgJ0Z1bmN0aW9uJyBhbmQgJ09iamVjdCcgYXMgYWx0ZXJuYXRpdmUgdG8gdGhlIGxvd2VyIGNhc2VkIHZlcnNpb24uXG4gICdGdW5jdGlvbicsXG4gICdPYmplY3QnLFxuICAnYm9vbGVhbicsXG4gICdiaWdpbnQnLFxuICAnc3ltYm9sJ1xuXVxuY29uc3QgY2xhc3NSZWdFeHAgPSAvXihbQS1aXVthLXowLTldKikrJC9cbmNvbnN0IG5vZGVJbnRlcm5hbFByZWZpeCA9ICdfX25vZGVfaW50ZXJuYWxfJ1xuY29uc3QgY29kZXMgPSB7fVxuZnVuY3Rpb24gYXNzZXJ0KHZhbHVlLCBtZXNzYWdlKSB7XG4gIGlmICghdmFsdWUpIHtcbiAgICB0aHJvdyBuZXcgY29kZXMuRVJSX0lOVEVSTkFMX0FTU0VSVElPTihtZXNzYWdlKVxuICB9XG59XG5cbi8vIE9ubHkgdXNlIHRoaXMgZm9yIGludGVnZXJzISBEZWNpbWFsIG51bWJlcnMgZG8gbm90IHdvcmsgd2l0aCB0aGlzIGZ1bmN0aW9uLlxuZnVuY3Rpb24gYWRkTnVtZXJpY2FsU2VwYXJhdG9yKHZhbCkge1xuICBsZXQgcmVzID0gJydcbiAgbGV0IGkgPSB2YWwubGVuZ3RoXG4gIGNvbnN0IHN0YXJ0ID0gdmFsWzBdID09PSAnLScgPyAxIDogMFxuICBmb3IgKDsgaSA+PSBzdGFydCArIDQ7IGkgLT0gMykge1xuICAgIHJlcyA9IGBfJHt2YWwuc2xpY2UoaSAtIDMsIGkpfSR7cmVzfWBcbiAgfVxuICByZXR1cm4gYCR7dmFsLnNsaWNlKDAsIGkpfSR7cmVzfWBcbn1cbmZ1bmN0aW9uIGdldE1lc3NhZ2Uoa2V5LCBtc2csIGFyZ3MpIHtcbiAgaWYgKHR5cGVvZiBtc2cgPT09ICdmdW5jdGlvbicpIHtcbiAgICBhc3NlcnQoXG4gICAgICBtc2cubGVuZ3RoIDw9IGFyZ3MubGVuZ3RoLFxuICAgICAgLy8gRGVmYXVsdCBvcHRpb25zIGRvIG5vdCBjb3VudC5cbiAgICAgIGBDb2RlOiAke2tleX07IFRoZSBwcm92aWRlZCBhcmd1bWVudHMgbGVuZ3RoICgke2FyZ3MubGVuZ3RofSkgZG9lcyBub3QgbWF0Y2ggdGhlIHJlcXVpcmVkIG9uZXMgKCR7bXNnLmxlbmd0aH0pLmBcbiAgICApXG4gICAgcmV0dXJuIG1zZyguLi5hcmdzKVxuICB9XG4gIGNvbnN0IGV4cGVjdGVkTGVuZ3RoID0gKG1zZy5tYXRjaCgvJVtkZmlqb09zXS9nKSB8fCBbXSkubGVuZ3RoXG4gIGFzc2VydChcbiAgICBleHBlY3RlZExlbmd0aCA9PT0gYXJncy5sZW5ndGgsXG4gICAgYENvZGU6ICR7a2V5fTsgVGhlIHByb3ZpZGVkIGFyZ3VtZW50cyBsZW5ndGggKCR7YXJncy5sZW5ndGh9KSBkb2VzIG5vdCBtYXRjaCB0aGUgcmVxdWlyZWQgb25lcyAoJHtleHBlY3RlZExlbmd0aH0pLmBcbiAgKVxuICBpZiAoYXJncy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbXNnXG4gIH1cbiAgcmV0dXJuIGZvcm1hdChtc2csIC4uLmFyZ3MpXG59XG5mdW5jdGlvbiBFKGNvZGUsIG1lc3NhZ2UsIEJhc2UpIHtcbiAgaWYgKCFCYXNlKSB7XG4gICAgQmFzZSA9IEVycm9yXG4gIH1cbiAgY2xhc3MgTm9kZUVycm9yIGV4dGVuZHMgQmFzZSB7XG4gICAgY29uc3RydWN0b3IoLi4uYXJncykge1xuICAgICAgc3VwZXIoZ2V0TWVzc2FnZShjb2RlLCBtZXNzYWdlLCBhcmdzKSlcbiAgICB9XG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5uYW1lfSBbJHtjb2RlfV06ICR7dGhpcy5tZXNzYWdlfWBcbiAgICB9XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTm9kZUVycm9yLnByb3RvdHlwZSwge1xuICAgIG5hbWU6IHtcbiAgICAgIHZhbHVlOiBCYXNlLm5hbWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSxcbiAgICB0b1N0cmluZzoge1xuICAgICAgdmFsdWUoKSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLm5hbWV9IFske2NvZGV9XTogJHt0aGlzLm1lc3NhZ2V9YFxuICAgICAgfSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9XG4gIH0pXG4gIE5vZGVFcnJvci5wcm90b3R5cGUuY29kZSA9IGNvZGVcbiAgTm9kZUVycm9yLnByb3RvdHlwZVtrSXNOb2RlRXJyb3JdID0gdHJ1ZVxuICBjb2Rlc1tjb2RlXSA9IE5vZGVFcnJvclxufVxuZnVuY3Rpb24gaGlkZVN0YWNrRnJhbWVzKGZuKSB7XG4gIC8vIFdlIHJlbmFtZSB0aGUgZnVuY3Rpb25zIHRoYXQgd2lsbCBiZSBoaWRkZW4gdG8gY3V0IG9mZiB0aGUgc3RhY2t0cmFjZVxuICAvLyBhdCB0aGUgb3V0ZXJtb3N0IG9uZVxuICBjb25zdCBoaWRkZW4gPSBub2RlSW50ZXJuYWxQcmVmaXggKyBmbi5uYW1lXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmbiwgJ25hbWUnLCB7XG4gICAgdmFsdWU6IGhpZGRlblxuICB9KVxuICByZXR1cm4gZm5cbn1cbmZ1bmN0aW9uIGFnZ3JlZ2F0ZVR3b0Vycm9ycyhpbm5lckVycm9yLCBvdXRlckVycm9yKSB7XG4gIGlmIChpbm5lckVycm9yICYmIG91dGVyRXJyb3IgJiYgaW5uZXJFcnJvciAhPT0gb3V0ZXJFcnJvcikge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG91dGVyRXJyb3IuZXJyb3JzKSkge1xuICAgICAgLy8gSWYgYG91dGVyRXJyb3JgIGlzIGFscmVhZHkgYW4gYEFnZ3JlZ2F0ZUVycm9yYC5cbiAgICAgIG91dGVyRXJyb3IuZXJyb3JzLnB1c2goaW5uZXJFcnJvcilcbiAgICAgIHJldHVybiBvdXRlckVycm9yXG4gICAgfVxuICAgIGNvbnN0IGVyciA9IG5ldyBBZ2dyZWdhdGVFcnJvcihbb3V0ZXJFcnJvciwgaW5uZXJFcnJvcl0sIG91dGVyRXJyb3IubWVzc2FnZSlcbiAgICBlcnIuY29kZSA9IG91dGVyRXJyb3IuY29kZVxuICAgIHJldHVybiBlcnJcbiAgfVxuICByZXR1cm4gaW5uZXJFcnJvciB8fCBvdXRlckVycm9yXG59XG5jbGFzcyBBYm9ydEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlID0gJ1RoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQnLCBvcHRpb25zID0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKG9wdGlvbnMgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBjb2Rlcy5FUlJfSU5WQUxJRF9BUkdfVFlQRSgnb3B0aW9ucycsICdPYmplY3QnLCBvcHRpb25zKVxuICAgIH1cbiAgICBzdXBlcihtZXNzYWdlLCBvcHRpb25zKVxuICAgIHRoaXMuY29kZSA9ICdBQk9SVF9FUlInXG4gICAgdGhpcy5uYW1lID0gJ0Fib3J0RXJyb3InXG4gIH1cbn1cbkUoJ0VSUl9BU1NFUlRJT04nLCAnJXMnLCBFcnJvcilcbkUoXG4gICdFUlJfSU5WQUxJRF9BUkdfVFlQRScsXG4gIChuYW1lLCBleHBlY3RlZCwgYWN0dWFsKSA9PiB7XG4gICAgYXNzZXJ0KHR5cGVvZiBuYW1lID09PSAnc3RyaW5nJywgXCInbmFtZScgbXVzdCBiZSBhIHN0cmluZ1wiKVxuICAgIGlmICghQXJyYXkuaXNBcnJheShleHBlY3RlZCkpIHtcbiAgICAgIGV4cGVjdGVkID0gW2V4cGVjdGVkXVxuICAgIH1cbiAgICBsZXQgbXNnID0gJ1RoZSAnXG4gICAgaWYgKG5hbWUuZW5kc1dpdGgoJyBhcmd1bWVudCcpKSB7XG4gICAgICAvLyBGb3IgY2FzZXMgbGlrZSAnZmlyc3QgYXJndW1lbnQnXG4gICAgICBtc2cgKz0gYCR7bmFtZX0gYFxuICAgIH0gZWxzZSB7XG4gICAgICBtc2cgKz0gYFwiJHtuYW1lfVwiICR7bmFtZS5pbmNsdWRlcygnLicpID8gJ3Byb3BlcnR5JyA6ICdhcmd1bWVudCd9IGBcbiAgICB9XG4gICAgbXNnICs9ICdtdXN0IGJlICdcbiAgICBjb25zdCB0eXBlcyA9IFtdXG4gICAgY29uc3QgaW5zdGFuY2VzID0gW11cbiAgICBjb25zdCBvdGhlciA9IFtdXG4gICAgZm9yIChjb25zdCB2YWx1ZSBvZiBleHBlY3RlZCkge1xuICAgICAgYXNzZXJ0KHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycsICdBbGwgZXhwZWN0ZWQgZW50cmllcyBoYXZlIHRvIGJlIG9mIHR5cGUgc3RyaW5nJylcbiAgICAgIGlmIChrVHlwZXMuaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICAgIHR5cGVzLnB1c2godmFsdWUudG9Mb3dlckNhc2UoKSlcbiAgICAgIH0gZWxzZSBpZiAoY2xhc3NSZWdFeHAudGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgaW5zdGFuY2VzLnB1c2godmFsdWUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhc3NlcnQodmFsdWUgIT09ICdvYmplY3QnLCAnVGhlIHZhbHVlIFwib2JqZWN0XCIgc2hvdWxkIGJlIHdyaXR0ZW4gYXMgXCJPYmplY3RcIicpXG4gICAgICAgIG90aGVyLnB1c2godmFsdWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU3BlY2lhbCBoYW5kbGUgYG9iamVjdGAgaW4gY2FzZSBvdGhlciBpbnN0YW5jZXMgYXJlIGFsbG93ZWQgdG8gb3V0bGluZVxuICAgIC8vIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIGVhY2ggb3RoZXIuXG4gICAgaWYgKGluc3RhbmNlcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBwb3MgPSB0eXBlcy5pbmRleE9mKCdvYmplY3QnKVxuICAgICAgaWYgKHBvcyAhPT0gLTEpIHtcbiAgICAgICAgdHlwZXMuc3BsaWNlKHR5cGVzLCBwb3MsIDEpXG4gICAgICAgIGluc3RhbmNlcy5wdXNoKCdPYmplY3QnKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAodHlwZXMubGVuZ3RoID4gMCkge1xuICAgICAgc3dpdGNoICh0eXBlcy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1zZyArPSBgb2YgdHlwZSAke3R5cGVzWzBdfWBcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbXNnICs9IGBvbmUgb2YgdHlwZSAke3R5cGVzWzBdfSBvciAke3R5cGVzWzFdfWBcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgY29uc3QgbGFzdCA9IHR5cGVzLnBvcCgpXG4gICAgICAgICAgbXNnICs9IGBvbmUgb2YgdHlwZSAke3R5cGVzLmpvaW4oJywgJyl9LCBvciAke2xhc3R9YFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaW5zdGFuY2VzLmxlbmd0aCA+IDAgfHwgb3RoZXIubGVuZ3RoID4gMCkge1xuICAgICAgICBtc2cgKz0gJyBvciAnXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpbnN0YW5jZXMubGVuZ3RoID4gMCkge1xuICAgICAgc3dpdGNoIChpbnN0YW5jZXMubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtc2cgKz0gYGFuIGluc3RhbmNlIG9mICR7aW5zdGFuY2VzWzBdfWBcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbXNnICs9IGBhbiBpbnN0YW5jZSBvZiAke2luc3RhbmNlc1swXX0gb3IgJHtpbnN0YW5jZXNbMV19YFxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICBjb25zdCBsYXN0ID0gaW5zdGFuY2VzLnBvcCgpXG4gICAgICAgICAgbXNnICs9IGBhbiBpbnN0YW5jZSBvZiAke2luc3RhbmNlcy5qb2luKCcsICcpfSwgb3IgJHtsYXN0fWBcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG90aGVyLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbXNnICs9ICcgb3IgJ1xuICAgICAgfVxuICAgIH1cbiAgICBzd2l0Y2ggKG90aGVyLmxlbmd0aCkge1xuICAgICAgY2FzZSAwOlxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAxOlxuICAgICAgICBpZiAob3RoZXJbMF0udG9Mb3dlckNhc2UoKSAhPT0gb3RoZXJbMF0pIHtcbiAgICAgICAgICBtc2cgKz0gJ2FuICdcbiAgICAgICAgfVxuICAgICAgICBtc2cgKz0gYCR7b3RoZXJbMF19YFxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAyOlxuICAgICAgICBtc2cgKz0gYG9uZSBvZiAke290aGVyWzBdfSBvciAke290aGVyWzFdfWBcbiAgICAgICAgYnJlYWtcbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgY29uc3QgbGFzdCA9IG90aGVyLnBvcCgpXG4gICAgICAgIG1zZyArPSBgb25lIG9mICR7b3RoZXIuam9pbignLCAnKX0sIG9yICR7bGFzdH1gXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChhY3R1YWwgPT0gbnVsbCkge1xuICAgICAgbXNnICs9IGAuIFJlY2VpdmVkICR7YWN0dWFsfWBcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBhY3R1YWwgPT09ICdmdW5jdGlvbicgJiYgYWN0dWFsLm5hbWUpIHtcbiAgICAgIG1zZyArPSBgLiBSZWNlaXZlZCBmdW5jdGlvbiAke2FjdHVhbC5uYW1lfWBcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBhY3R1YWwgPT09ICdvYmplY3QnKSB7XG4gICAgICB2YXIgX2FjdHVhbCRjb25zdHJ1Y3RvclxuICAgICAgaWYgKFxuICAgICAgICAoX2FjdHVhbCRjb25zdHJ1Y3RvciA9IGFjdHVhbC5jb25zdHJ1Y3RvcikgIT09IG51bGwgJiZcbiAgICAgICAgX2FjdHVhbCRjb25zdHJ1Y3RvciAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIF9hY3R1YWwkY29uc3RydWN0b3IubmFtZVxuICAgICAgKSB7XG4gICAgICAgIG1zZyArPSBgLiBSZWNlaXZlZCBhbiBpbnN0YW5jZSBvZiAke2FjdHVhbC5jb25zdHJ1Y3Rvci5uYW1lfWBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGluc3BlY3RlZCA9IGluc3BlY3QoYWN0dWFsLCB7XG4gICAgICAgICAgZGVwdGg6IC0xXG4gICAgICAgIH0pXG4gICAgICAgIG1zZyArPSBgLiBSZWNlaXZlZCAke2luc3BlY3RlZH1gXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBpbnNwZWN0ZWQgPSBpbnNwZWN0KGFjdHVhbCwge1xuICAgICAgICBjb2xvcnM6IGZhbHNlXG4gICAgICB9KVxuICAgICAgaWYgKGluc3BlY3RlZC5sZW5ndGggPiAyNSkge1xuICAgICAgICBpbnNwZWN0ZWQgPSBgJHtpbnNwZWN0ZWQuc2xpY2UoMCwgMjUpfS4uLmBcbiAgICAgIH1cbiAgICAgIG1zZyArPSBgLiBSZWNlaXZlZCB0eXBlICR7dHlwZW9mIGFjdHVhbH0gKCR7aW5zcGVjdGVkfSlgXG4gICAgfVxuICAgIHJldHVybiBtc2dcbiAgfSxcbiAgVHlwZUVycm9yXG4pXG5FKFxuICAnRVJSX0lOVkFMSURfQVJHX1ZBTFVFJyxcbiAgKG5hbWUsIHZhbHVlLCByZWFzb24gPSAnaXMgaW52YWxpZCcpID0+IHtcbiAgICBsZXQgaW5zcGVjdGVkID0gaW5zcGVjdCh2YWx1ZSlcbiAgICBpZiAoaW5zcGVjdGVkLmxlbmd0aCA+IDEyOCkge1xuICAgICAgaW5zcGVjdGVkID0gaW5zcGVjdGVkLnNsaWNlKDAsIDEyOCkgKyAnLi4uJ1xuICAgIH1cbiAgICBjb25zdCB0eXBlID0gbmFtZS5pbmNsdWRlcygnLicpID8gJ3Byb3BlcnR5JyA6ICdhcmd1bWVudCdcbiAgICByZXR1cm4gYFRoZSAke3R5cGV9ICcke25hbWV9JyAke3JlYXNvbn0uIFJlY2VpdmVkICR7aW5zcGVjdGVkfWBcbiAgfSxcbiAgVHlwZUVycm9yXG4pXG5FKFxuICAnRVJSX0lOVkFMSURfUkVUVVJOX1ZBTFVFJyxcbiAgKGlucHV0LCBuYW1lLCB2YWx1ZSkgPT4ge1xuICAgIHZhciBfdmFsdWUkY29uc3RydWN0b3JcbiAgICBjb25zdCB0eXBlID1cbiAgICAgIHZhbHVlICE9PSBudWxsICYmXG4gICAgICB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAoX3ZhbHVlJGNvbnN0cnVjdG9yID0gdmFsdWUuY29uc3RydWN0b3IpICE9PSBudWxsICYmXG4gICAgICBfdmFsdWUkY29uc3RydWN0b3IgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgX3ZhbHVlJGNvbnN0cnVjdG9yLm5hbWVcbiAgICAgICAgPyBgaW5zdGFuY2Ugb2YgJHt2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lfWBcbiAgICAgICAgOiBgdHlwZSAke3R5cGVvZiB2YWx1ZX1gXG4gICAgcmV0dXJuIGBFeHBlY3RlZCAke2lucHV0fSB0byBiZSByZXR1cm5lZCBmcm9tIHRoZSBcIiR7bmFtZX1cImAgKyBgIGZ1bmN0aW9uIGJ1dCBnb3QgJHt0eXBlfS5gXG4gIH0sXG4gIFR5cGVFcnJvclxuKVxuRShcbiAgJ0VSUl9NSVNTSU5HX0FSR1MnLFxuICAoLi4uYXJncykgPT4ge1xuICAgIGFzc2VydChhcmdzLmxlbmd0aCA+IDAsICdBdCBsZWFzdCBvbmUgYXJnIG5lZWRzIHRvIGJlIHNwZWNpZmllZCcpXG4gICAgbGV0IG1zZ1xuICAgIGNvbnN0IGxlbiA9IGFyZ3MubGVuZ3RoXG4gICAgYXJncyA9IChBcnJheS5pc0FycmF5KGFyZ3MpID8gYXJncyA6IFthcmdzXSkubWFwKChhKSA9PiBgXCIke2F9XCJgKS5qb2luKCcgb3IgJylcbiAgICBzd2l0Y2ggKGxlbikge1xuICAgICAgY2FzZSAxOlxuICAgICAgICBtc2cgKz0gYFRoZSAke2FyZ3NbMF19IGFyZ3VtZW50YFxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAyOlxuICAgICAgICBtc2cgKz0gYFRoZSAke2FyZ3NbMF19IGFuZCAke2FyZ3NbMV19IGFyZ3VtZW50c2BcbiAgICAgICAgYnJlYWtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHtcbiAgICAgICAgICBjb25zdCBsYXN0ID0gYXJncy5wb3AoKVxuICAgICAgICAgIG1zZyArPSBgVGhlICR7YXJncy5qb2luKCcsICcpfSwgYW5kICR7bGFzdH0gYXJndW1lbnRzYFxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgfVxuICAgIHJldHVybiBgJHttc2d9IG11c3QgYmUgc3BlY2lmaWVkYFxuICB9LFxuICBUeXBlRXJyb3JcbilcbkUoXG4gICdFUlJfT1VUX09GX1JBTkdFJyxcbiAgKHN0ciwgcmFuZ2UsIGlucHV0KSA9PiB7XG4gICAgYXNzZXJ0KHJhbmdlLCAnTWlzc2luZyBcInJhbmdlXCIgYXJndW1lbnQnKVxuICAgIGxldCByZWNlaXZlZFxuICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKGlucHV0KSAmJiBNYXRoLmFicyhpbnB1dCkgPiAyICoqIDMyKSB7XG4gICAgICByZWNlaXZlZCA9IGFkZE51bWVyaWNhbFNlcGFyYXRvcihTdHJpbmcoaW5wdXQpKVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSAnYmlnaW50Jykge1xuICAgICAgcmVjZWl2ZWQgPSBTdHJpbmcoaW5wdXQpXG4gICAgICBpZiAoaW5wdXQgPiAybiAqKiAzMm4gfHwgaW5wdXQgPCAtKDJuICoqIDMybikpIHtcbiAgICAgICAgcmVjZWl2ZWQgPSBhZGROdW1lcmljYWxTZXBhcmF0b3IocmVjZWl2ZWQpXG4gICAgICB9XG4gICAgICByZWNlaXZlZCArPSAnbidcbiAgICB9IGVsc2Uge1xuICAgICAgcmVjZWl2ZWQgPSBpbnNwZWN0KGlucHV0KVxuICAgIH1cbiAgICByZXR1cm4gYFRoZSB2YWx1ZSBvZiBcIiR7c3RyfVwiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSAke3JhbmdlfS4gUmVjZWl2ZWQgJHtyZWNlaXZlZH1gXG4gIH0sXG4gIFJhbmdlRXJyb3JcbilcbkUoJ0VSUl9NVUxUSVBMRV9DQUxMQkFDSycsICdDYWxsYmFjayBjYWxsZWQgbXVsdGlwbGUgdGltZXMnLCBFcnJvcilcbkUoJ0VSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVEJywgJ1RoZSAlcyBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkJywgRXJyb3IpXG5FKCdFUlJfU1RSRUFNX0FMUkVBRFlfRklOSVNIRUQnLCAnQ2Fubm90IGNhbGwgJXMgYWZ0ZXIgYSBzdHJlYW0gd2FzIGZpbmlzaGVkJywgRXJyb3IpXG5FKCdFUlJfU1RSRUFNX0NBTk5PVF9QSVBFJywgJ0Nhbm5vdCBwaXBlLCBub3QgcmVhZGFibGUnLCBFcnJvcilcbkUoJ0VSUl9TVFJFQU1fREVTVFJPWUVEJywgJ0Nhbm5vdCBjYWxsICVzIGFmdGVyIGEgc3RyZWFtIHdhcyBkZXN0cm95ZWQnLCBFcnJvcilcbkUoJ0VSUl9TVFJFQU1fTlVMTF9WQUxVRVMnLCAnTWF5IG5vdCB3cml0ZSBudWxsIHZhbHVlcyB0byBzdHJlYW0nLCBUeXBlRXJyb3IpXG5FKCdFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRScsICdQcmVtYXR1cmUgY2xvc2UnLCBFcnJvcilcbkUoJ0VSUl9TVFJFQU1fUFVTSF9BRlRFUl9FT0YnLCAnc3RyZWFtLnB1c2goKSBhZnRlciBFT0YnLCBFcnJvcilcbkUoJ0VSUl9TVFJFQU1fVU5TSElGVF9BRlRFUl9FTkRfRVZFTlQnLCAnc3RyZWFtLnVuc2hpZnQoKSBhZnRlciBlbmQgZXZlbnQnLCBFcnJvcilcbkUoJ0VSUl9TVFJFQU1fV1JJVEVfQUZURVJfRU5EJywgJ3dyaXRlIGFmdGVyIGVuZCcsIEVycm9yKVxuRSgnRVJSX1VOS05PV05fRU5DT0RJTkcnLCAnVW5rbm93biBlbmNvZGluZzogJXMnLCBUeXBlRXJyb3IpXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQWJvcnRFcnJvcixcbiAgYWdncmVnYXRlVHdvRXJyb3JzOiBoaWRlU3RhY2tGcmFtZXMoYWdncmVnYXRlVHdvRXJyb3JzKSxcbiAgaGlkZVN0YWNrRnJhbWVzLFxuICBjb2Rlc1xufVxuIiwKICAgICIvKiBlc2xpbnQganNkb2MvcmVxdWlyZS1qc2RvYzogXCJlcnJvclwiICovXG5cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIEFycmF5SXNBcnJheSxcbiAgQXJyYXlQcm90b3R5cGVJbmNsdWRlcyxcbiAgQXJyYXlQcm90b3R5cGVKb2luLFxuICBBcnJheVByb3RvdHlwZU1hcCxcbiAgTnVtYmVySXNJbnRlZ2VyLFxuICBOdW1iZXJJc05hTixcbiAgTnVtYmVyTUFYX1NBRkVfSU5URUdFUixcbiAgTnVtYmVyTUlOX1NBRkVfSU5URUdFUixcbiAgTnVtYmVyUGFyc2VJbnQsXG4gIE9iamVjdFByb3RvdHlwZUhhc093blByb3BlcnR5LFxuICBSZWdFeHBQcm90b3R5cGVFeGVjLFxuICBTdHJpbmcsXG4gIFN0cmluZ1Byb3RvdHlwZVRvVXBwZXJDYXNlLFxuICBTdHJpbmdQcm90b3R5cGVUcmltXG59ID0gcmVxdWlyZSgnLi4vb3Vycy9wcmltb3JkaWFscycpXG5jb25zdCB7XG4gIGhpZGVTdGFja0ZyYW1lcyxcbiAgY29kZXM6IHsgRVJSX1NPQ0tFVF9CQURfUE9SVCwgRVJSX0lOVkFMSURfQVJHX1RZUEUsIEVSUl9JTlZBTElEX0FSR19WQUxVRSwgRVJSX09VVF9PRl9SQU5HRSwgRVJSX1VOS05PV05fU0lHTkFMIH1cbn0gPSByZXF1aXJlKCcuLi9vdXJzL2Vycm9ycycpXG5jb25zdCB7IG5vcm1hbGl6ZUVuY29kaW5nIH0gPSByZXF1aXJlKCcuLi9vdXJzL3V0aWwnKVxuY29uc3QgeyBpc0FzeW5jRnVuY3Rpb24sIGlzQXJyYXlCdWZmZXJWaWV3IH0gPSByZXF1aXJlKCcuLi9vdXJzL3V0aWwnKS50eXBlc1xuY29uc3Qgc2lnbmFscyA9IHt9XG5cbi8qKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzSW50MzIodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSAodmFsdWUgfCAwKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc1VpbnQzMih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT09IHZhbHVlID4+PiAwXG59XG5jb25zdCBvY3RhbFJlZyA9IC9eWzAtN10rJC9cbmNvbnN0IG1vZGVEZXNjID0gJ211c3QgYmUgYSAzMi1iaXQgdW5zaWduZWQgaW50ZWdlciBvciBhbiBvY3RhbCBzdHJpbmcnXG5cbi8qKlxuICogUGFyc2UgYW5kIHZhbGlkYXRlIHZhbHVlcyB0aGF0IHdpbGwgYmUgY29udmVydGVkIGludG8gbW9kZV90ICh0aGUgU18qXG4gKiBjb25zdGFudHMpLiBPbmx5IHZhbGlkIG51bWJlcnMgYW5kIG9jdGFsIHN0cmluZ3MgYXJlIGFsbG93ZWQuIFRoZXkgY291bGQgYmVcbiAqIGNvbnZlcnRlZCB0byAzMi1iaXQgdW5zaWduZWQgaW50ZWdlcnMgb3Igbm9uLW5lZ2F0aXZlIHNpZ25lZCBpbnRlZ2VycyBpbiB0aGVcbiAqIEMrKyBsYW5kLCBidXQgYW55IHZhbHVlIGhpZ2hlciB0aGFuIDBvNzc3IHdpbGwgcmVzdWx0IGluIHBsYXRmb3JtLXNwZWNpZmljXG4gKiBiZWhhdmlvcnMuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFZhbHVlcyB0byBiZSB2YWxpZGF0ZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIE5hbWUgb2YgdGhlIGFyZ3VtZW50XG4gKiBAcGFyYW0ge251bWJlcn0gW2RlZl0gSWYgc3BlY2lmaWVkLCB3aWxsIGJlIHJldHVybmVkIGZvciBpbnZhbGlkIHZhbHVlc1xuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuZnVuY3Rpb24gcGFyc2VGaWxlTW9kZSh2YWx1ZSwgbmFtZSwgZGVmKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgdmFsdWUgPSBkZWZcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIGlmIChSZWdFeHBQcm90b3R5cGVFeGVjKG9jdGFsUmVnLCB2YWx1ZSkgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVkFMVUUobmFtZSwgdmFsdWUsIG1vZGVEZXNjKVxuICAgIH1cbiAgICB2YWx1ZSA9IE51bWJlclBhcnNlSW50KHZhbHVlLCA4KVxuICB9XG4gIHZhbGlkYXRlVWludDMyKHZhbHVlLCBuYW1lKVxuICByZXR1cm4gdmFsdWVcbn1cblxuLyoqXG4gKiBAY2FsbGJhY2sgdmFsaWRhdGVJbnRlZ2VyXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHtudW1iZXJ9IFttaW5dXG4gKiBAcGFyYW0ge251bWJlcn0gW21heF1cbiAqIEByZXR1cm5zIHthc3NlcnRzIHZhbHVlIGlzIG51bWJlcn1cbiAqL1xuXG4vKiogQHR5cGUge3ZhbGlkYXRlSW50ZWdlcn0gKi9cbmNvbnN0IHZhbGlkYXRlSW50ZWdlciA9IGhpZGVTdGFja0ZyYW1lcygodmFsdWUsIG5hbWUsIG1pbiA9IE51bWJlck1JTl9TQUZFX0lOVEVHRVIsIG1heCA9IE51bWJlck1BWF9TQUZFX0lOVEVHRVIpID0+IHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicpIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRShuYW1lLCAnbnVtYmVyJywgdmFsdWUpXG4gIGlmICghTnVtYmVySXNJbnRlZ2VyKHZhbHVlKSkgdGhyb3cgbmV3IEVSUl9PVVRfT0ZfUkFOR0UobmFtZSwgJ2FuIGludGVnZXInLCB2YWx1ZSlcbiAgaWYgKHZhbHVlIDwgbWluIHx8IHZhbHVlID4gbWF4KSB0aHJvdyBuZXcgRVJSX09VVF9PRl9SQU5HRShuYW1lLCBgPj0gJHttaW59ICYmIDw9ICR7bWF4fWAsIHZhbHVlKVxufSlcblxuLyoqXG4gKiBAY2FsbGJhY2sgdmFsaWRhdGVJbnQzMlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBbbWluXVxuICogQHBhcmFtIHtudW1iZXJ9IFttYXhdXG4gKiBAcmV0dXJucyB7YXNzZXJ0cyB2YWx1ZSBpcyBudW1iZXJ9XG4gKi9cblxuLyoqIEB0eXBlIHt2YWxpZGF0ZUludDMyfSAqL1xuY29uc3QgdmFsaWRhdGVJbnQzMiA9IGhpZGVTdGFja0ZyYW1lcygodmFsdWUsIG5hbWUsIG1pbiA9IC0yMTQ3NDgzNjQ4LCBtYXggPSAyMTQ3NDgzNjQ3KSA9PiB7XG4gIC8vIFRoZSBkZWZhdWx0cyBmb3IgbWluIGFuZCBtYXggY29ycmVzcG9uZCB0byB0aGUgbGltaXRzIG9mIDMyLWJpdCBpbnRlZ2Vycy5cbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUobmFtZSwgJ251bWJlcicsIHZhbHVlKVxuICB9XG4gIGlmICghTnVtYmVySXNJbnRlZ2VyKHZhbHVlKSkge1xuICAgIHRocm93IG5ldyBFUlJfT1VUX09GX1JBTkdFKG5hbWUsICdhbiBpbnRlZ2VyJywgdmFsdWUpXG4gIH1cbiAgaWYgKHZhbHVlIDwgbWluIHx8IHZhbHVlID4gbWF4KSB7XG4gICAgdGhyb3cgbmV3IEVSUl9PVVRfT0ZfUkFOR0UobmFtZSwgYD49ICR7bWlufSAmJiA8PSAke21heH1gLCB2YWx1ZSlcbiAgfVxufSlcblxuLyoqXG4gKiBAY2FsbGJhY2sgdmFsaWRhdGVVaW50MzJcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge251bWJlcnxib29sZWFufSBbcG9zaXRpdmU9ZmFsc2VdXG4gKiBAcmV0dXJucyB7YXNzZXJ0cyB2YWx1ZSBpcyBudW1iZXJ9XG4gKi9cblxuLyoqIEB0eXBlIHt2YWxpZGF0ZVVpbnQzMn0gKi9cbmNvbnN0IHZhbGlkYXRlVWludDMyID0gaGlkZVN0YWNrRnJhbWVzKCh2YWx1ZSwgbmFtZSwgcG9zaXRpdmUgPSBmYWxzZSkgPT4ge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRShuYW1lLCAnbnVtYmVyJywgdmFsdWUpXG4gIH1cbiAgaWYgKCFOdW1iZXJJc0ludGVnZXIodmFsdWUpKSB7XG4gICAgdGhyb3cgbmV3IEVSUl9PVVRfT0ZfUkFOR0UobmFtZSwgJ2FuIGludGVnZXInLCB2YWx1ZSlcbiAgfVxuICBjb25zdCBtaW4gPSBwb3NpdGl2ZSA/IDEgOiAwXG4gIC8vIDIgKiogMzIgPT09IDQyOTQ5NjcyOTZcbiAgY29uc3QgbWF4ID0gNDI5NDk2NzI5NVxuICBpZiAodmFsdWUgPCBtaW4gfHwgdmFsdWUgPiBtYXgpIHtcbiAgICB0aHJvdyBuZXcgRVJSX09VVF9PRl9SQU5HRShuYW1lLCBgPj0gJHttaW59ICYmIDw9ICR7bWF4fWAsIHZhbHVlKVxuICB9XG59KVxuXG4vKipcbiAqIEBjYWxsYmFjayB2YWxpZGF0ZVN0cmluZ1xuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEByZXR1cm5zIHthc3NlcnRzIHZhbHVlIGlzIHN0cmluZ31cbiAqL1xuXG4vKiogQHR5cGUge3ZhbGlkYXRlU3RyaW5nfSAqL1xuZnVuY3Rpb24gdmFsaWRhdGVTdHJpbmcodmFsdWUsIG5hbWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRShuYW1lLCAnc3RyaW5nJywgdmFsdWUpXG59XG5cbi8qKlxuICogQGNhbGxiYWNrIHZhbGlkYXRlTnVtYmVyXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHtudW1iZXJ9IFttaW5dXG4gKiBAcGFyYW0ge251bWJlcn0gW21heF1cbiAqIEByZXR1cm5zIHthc3NlcnRzIHZhbHVlIGlzIG51bWJlcn1cbiAqL1xuXG4vKiogQHR5cGUge3ZhbGlkYXRlTnVtYmVyfSAqL1xuZnVuY3Rpb24gdmFsaWRhdGVOdW1iZXIodmFsdWUsIG5hbWUsIG1pbiA9IHVuZGVmaW5lZCwgbWF4KSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInKSB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUobmFtZSwgJ251bWJlcicsIHZhbHVlKVxuICBpZiAoXG4gICAgKG1pbiAhPSBudWxsICYmIHZhbHVlIDwgbWluKSB8fFxuICAgIChtYXggIT0gbnVsbCAmJiB2YWx1ZSA+IG1heCkgfHxcbiAgICAoKG1pbiAhPSBudWxsIHx8IG1heCAhPSBudWxsKSAmJiBOdW1iZXJJc05hTih2YWx1ZSkpXG4gICkge1xuICAgIHRocm93IG5ldyBFUlJfT1VUX09GX1JBTkdFKFxuICAgICAgbmFtZSxcbiAgICAgIGAke21pbiAhPSBudWxsID8gYD49ICR7bWlufWAgOiAnJ30ke21pbiAhPSBudWxsICYmIG1heCAhPSBudWxsID8gJyAmJiAnIDogJyd9JHttYXggIT0gbnVsbCA/IGA8PSAke21heH1gIDogJyd9YCxcbiAgICAgIHZhbHVlXG4gICAgKVxuICB9XG59XG5cbi8qKlxuICogQGNhbGxiYWNrIHZhbGlkYXRlT25lT2ZcbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAcGFyYW0ge1R9IHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHtUW119IG9uZU9mXG4gKi9cblxuLyoqIEB0eXBlIHt2YWxpZGF0ZU9uZU9mfSAqL1xuY29uc3QgdmFsaWRhdGVPbmVPZiA9IGhpZGVTdGFja0ZyYW1lcygodmFsdWUsIG5hbWUsIG9uZU9mKSA9PiB7XG4gIGlmICghQXJyYXlQcm90b3R5cGVJbmNsdWRlcyhvbmVPZiwgdmFsdWUpKSB7XG4gICAgY29uc3QgYWxsb3dlZCA9IEFycmF5UHJvdG90eXBlSm9pbihcbiAgICAgIEFycmF5UHJvdG90eXBlTWFwKG9uZU9mLCAodikgPT4gKHR5cGVvZiB2ID09PSAnc3RyaW5nJyA/IGAnJHt2fSdgIDogU3RyaW5nKHYpKSksXG4gICAgICAnLCAnXG4gICAgKVxuICAgIGNvbnN0IHJlYXNvbiA9ICdtdXN0IGJlIG9uZSBvZjogJyArIGFsbG93ZWRcbiAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1ZBTFVFKG5hbWUsIHZhbHVlLCByZWFzb24pXG4gIH1cbn0pXG5cbi8qKlxuICogQGNhbGxiYWNrIHZhbGlkYXRlQm9vbGVhblxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEByZXR1cm5zIHthc3NlcnRzIHZhbHVlIGlzIGJvb2xlYW59XG4gKi9cblxuLyoqIEB0eXBlIHt2YWxpZGF0ZUJvb2xlYW59ICovXG5mdW5jdGlvbiB2YWxpZGF0ZUJvb2xlYW4odmFsdWUsIG5hbWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Jvb2xlYW4nKSB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUobmFtZSwgJ2Jvb2xlYW4nLCB2YWx1ZSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2FueX0gb3B0aW9uc1xuICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICogQHBhcmFtIHtib29sZWFufSBkZWZhdWx0VmFsdWVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eVZhbHVlT3JEZWZhdWx0KG9wdGlvbnMsIGtleSwgZGVmYXVsdFZhbHVlKSB7XG4gIHJldHVybiBvcHRpb25zID09IG51bGwgfHwgIU9iamVjdFByb3RvdHlwZUhhc093blByb3BlcnR5KG9wdGlvbnMsIGtleSkgPyBkZWZhdWx0VmFsdWUgOiBvcHRpb25zW2tleV1cbn1cblxuLyoqXG4gKiBAY2FsbGJhY2sgdmFsaWRhdGVPYmplY3RcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge3tcbiAqICAgYWxsb3dBcnJheT86IGJvb2xlYW4sXG4gKiAgIGFsbG93RnVuY3Rpb24/OiBib29sZWFuLFxuICogICBudWxsYWJsZT86IGJvb2xlYW5cbiAqIH19IFtvcHRpb25zXVxuICovXG5cbi8qKiBAdHlwZSB7dmFsaWRhdGVPYmplY3R9ICovXG5jb25zdCB2YWxpZGF0ZU9iamVjdCA9IGhpZGVTdGFja0ZyYW1lcygodmFsdWUsIG5hbWUsIG9wdGlvbnMgPSBudWxsKSA9PiB7XG4gIGNvbnN0IGFsbG93QXJyYXkgPSBnZXRPd25Qcm9wZXJ0eVZhbHVlT3JEZWZhdWx0KG9wdGlvbnMsICdhbGxvd0FycmF5JywgZmFsc2UpXG4gIGNvbnN0IGFsbG93RnVuY3Rpb24gPSBnZXRPd25Qcm9wZXJ0eVZhbHVlT3JEZWZhdWx0KG9wdGlvbnMsICdhbGxvd0Z1bmN0aW9uJywgZmFsc2UpXG4gIGNvbnN0IG51bGxhYmxlID0gZ2V0T3duUHJvcGVydHlWYWx1ZU9yRGVmYXVsdChvcHRpb25zLCAnbnVsbGFibGUnLCBmYWxzZSlcbiAgaWYgKFxuICAgICghbnVsbGFibGUgJiYgdmFsdWUgPT09IG51bGwpIHx8XG4gICAgKCFhbGxvd0FycmF5ICYmIEFycmF5SXNBcnJheSh2YWx1ZSkpIHx8XG4gICAgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgJiYgKCFhbGxvd0Z1bmN0aW9uIHx8IHR5cGVvZiB2YWx1ZSAhPT0gJ2Z1bmN0aW9uJykpXG4gICkge1xuICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRShuYW1lLCAnT2JqZWN0JywgdmFsdWUpXG4gIH1cbn0pXG5cbi8qKlxuICogQGNhbGxiYWNrIHZhbGlkYXRlRGljdGlvbmFyeSAtIFdlIGFyZSB1c2luZyB0aGUgV2ViIElETCBTdGFuZGFyZCBkZWZpbml0aW9uXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgXCJkaWN0aW9uYXJ5XCIgaGVyZSwgd2hpY2ggbWVhbnMgYW55IHZhbHVlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hvc2UgVHlwZSBpcyBlaXRoZXIgVW5kZWZpbmVkLCBOdWxsLCBvclxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdCAod2hpY2ggaW5jbHVkZXMgZnVuY3Rpb25zKS5cbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAc2VlIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtZGljdGlvbmFyeVxuICogQHNlZSBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jdGFibGUtdHlwZW9mLW9wZXJhdG9yLXJlc3VsdHNcbiAqL1xuXG4vKiogQHR5cGUge3ZhbGlkYXRlRGljdGlvbmFyeX0gKi9cbmNvbnN0IHZhbGlkYXRlRGljdGlvbmFyeSA9IGhpZGVTdGFja0ZyYW1lcygodmFsdWUsIG5hbWUpID0+IHtcbiAgaWYgKHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUobmFtZSwgJ2EgZGljdGlvbmFyeScsIHZhbHVlKVxuICB9XG59KVxuXG4vKipcbiAqIEBjYWxsYmFjayB2YWxpZGF0ZUFycmF5XG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHtudW1iZXJ9IFttaW5MZW5ndGhdXG4gKiBAcmV0dXJucyB7YXNzZXJ0cyB2YWx1ZSBpcyBhbnlbXX1cbiAqL1xuXG4vKiogQHR5cGUge3ZhbGlkYXRlQXJyYXl9ICovXG5jb25zdCB2YWxpZGF0ZUFycmF5ID0gaGlkZVN0YWNrRnJhbWVzKCh2YWx1ZSwgbmFtZSwgbWluTGVuZ3RoID0gMCkgPT4ge1xuICBpZiAoIUFycmF5SXNBcnJheSh2YWx1ZSkpIHtcbiAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUobmFtZSwgJ0FycmF5JywgdmFsdWUpXG4gIH1cbiAgaWYgKHZhbHVlLmxlbmd0aCA8IG1pbkxlbmd0aCkge1xuICAgIGNvbnN0IHJlYXNvbiA9IGBtdXN0IGJlIGxvbmdlciB0aGFuICR7bWluTGVuZ3RofWBcbiAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1ZBTFVFKG5hbWUsIHZhbHVlLCByZWFzb24pXG4gIH1cbn0pXG5cbi8qKlxuICogQGNhbGxiYWNrIHZhbGlkYXRlU3RyaW5nQXJyYXlcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcmV0dXJucyB7YXNzZXJ0cyB2YWx1ZSBpcyBzdHJpbmdbXX1cbiAqL1xuXG4vKiogQHR5cGUge3ZhbGlkYXRlU3RyaW5nQXJyYXl9ICovXG5mdW5jdGlvbiB2YWxpZGF0ZVN0cmluZ0FycmF5KHZhbHVlLCBuYW1lKSB7XG4gIHZhbGlkYXRlQXJyYXkodmFsdWUsIG5hbWUpXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICB2YWxpZGF0ZVN0cmluZyh2YWx1ZVtpXSwgYCR7bmFtZX1bJHtpfV1gKVxuICB9XG59XG5cbi8qKlxuICogQGNhbGxiYWNrIHZhbGlkYXRlQm9vbGVhbkFycmF5XG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHJldHVybnMge2Fzc2VydHMgdmFsdWUgaXMgYm9vbGVhbltdfVxuICovXG5cbi8qKiBAdHlwZSB7dmFsaWRhdGVCb29sZWFuQXJyYXl9ICovXG5mdW5jdGlvbiB2YWxpZGF0ZUJvb2xlYW5BcnJheSh2YWx1ZSwgbmFtZSkge1xuICB2YWxpZGF0ZUFycmF5KHZhbHVlLCBuYW1lKVxuICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFsaWRhdGVCb29sZWFuKHZhbHVlW2ldLCBgJHtuYW1lfVske2l9XWApXG4gIH1cbn1cblxuLyoqXG4gKiBAY2FsbGJhY2sgdmFsaWRhdGVBYm9ydFNpZ25hbEFycmF5XG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHJldHVybnMge2Fzc2VydHMgdmFsdWUgaXMgQWJvcnRTaWduYWxbXX1cbiAqL1xuXG4vKiogQHR5cGUge3ZhbGlkYXRlQWJvcnRTaWduYWxBcnJheX0gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQWJvcnRTaWduYWxBcnJheSh2YWx1ZSwgbmFtZSkge1xuICB2YWxpZGF0ZUFycmF5KHZhbHVlLCBuYW1lKVxuICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3Qgc2lnbmFsID0gdmFsdWVbaV1cbiAgICBjb25zdCBpbmRleGVkTmFtZSA9IGAke25hbWV9WyR7aX1dYFxuICAgIGlmIChzaWduYWwgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKGluZGV4ZWROYW1lLCAnQWJvcnRTaWduYWwnLCBzaWduYWwpXG4gICAgfVxuICAgIHZhbGlkYXRlQWJvcnRTaWduYWwoc2lnbmFsLCBpbmRleGVkTmFtZSlcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7Kn0gc2lnbmFsXG4gKiBAcGFyYW0ge3N0cmluZ30gW25hbWU9J3NpZ25hbCddXG4gKiBAcmV0dXJucyB7YXNzZXJ0cyBzaWduYWwgaXMga2V5b2Ygc2lnbmFsc31cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVTaWduYWxOYW1lKHNpZ25hbCwgbmFtZSA9ICdzaWduYWwnKSB7XG4gIHZhbGlkYXRlU3RyaW5nKHNpZ25hbCwgbmFtZSlcbiAgaWYgKHNpZ25hbHNbc2lnbmFsXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHNpZ25hbHNbU3RyaW5nUHJvdG90eXBlVG9VcHBlckNhc2Uoc2lnbmFsKV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVSUl9VTktOT1dOX1NJR05BTChzaWduYWwgKyAnIChzaWduYWxzIG11c3QgdXNlIGFsbCBjYXBpdGFsIGxldHRlcnMpJylcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVSUl9VTktOT1dOX1NJR05BTChzaWduYWwpXG4gIH1cbn1cblxuLyoqXG4gKiBAY2FsbGJhY2sgdmFsaWRhdGVCdWZmZXJcbiAqIEBwYXJhbSB7Kn0gYnVmZmVyXG4gKiBAcGFyYW0ge3N0cmluZ30gW25hbWU9J2J1ZmZlciddXG4gKiBAcmV0dXJucyB7YXNzZXJ0cyBidWZmZXIgaXMgQXJyYXlCdWZmZXJWaWV3fVxuICovXG5cbi8qKiBAdHlwZSB7dmFsaWRhdGVCdWZmZXJ9ICovXG5jb25zdCB2YWxpZGF0ZUJ1ZmZlciA9IGhpZGVTdGFja0ZyYW1lcygoYnVmZmVyLCBuYW1lID0gJ2J1ZmZlcicpID0+IHtcbiAgaWYgKCFpc0FycmF5QnVmZmVyVmlldyhidWZmZXIpKSB7XG4gICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKG5hbWUsIFsnQnVmZmVyJywgJ1R5cGVkQXJyYXknLCAnRGF0YVZpZXcnXSwgYnVmZmVyKVxuICB9XG59KVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhXG4gKiBAcGFyYW0ge3N0cmluZ30gZW5jb2RpbmdcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVFbmNvZGluZyhkYXRhLCBlbmNvZGluZykge1xuICBjb25zdCBub3JtYWxpemVkRW5jb2RpbmcgPSBub3JtYWxpemVFbmNvZGluZyhlbmNvZGluZylcbiAgY29uc3QgbGVuZ3RoID0gZGF0YS5sZW5ndGhcbiAgaWYgKG5vcm1hbGl6ZWRFbmNvZGluZyA9PT0gJ2hleCcgJiYgbGVuZ3RoICUgMiAhPT0gMCkge1xuICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVkFMVUUoJ2VuY29kaW5nJywgZW5jb2RpbmcsIGBpcyBpbnZhbGlkIGZvciBkYXRhIG9mIGxlbmd0aCAke2xlbmd0aH1gKVxuICB9XG59XG5cbi8qKlxuICogQ2hlY2sgdGhhdCB0aGUgcG9ydCBudW1iZXIgaXMgbm90IE5hTiB3aGVuIGNvZXJjZWQgdG8gYSBudW1iZXIsXG4gKiBpcyBhbiBpbnRlZ2VyIGFuZCB0aGF0IGl0IGZhbGxzIHdpdGhpbiB0aGUgbGVnYWwgcmFuZ2Ugb2YgcG9ydCBudW1iZXJzLlxuICogQHBhcmFtIHsqfSBwb3J0XG4gKiBAcGFyYW0ge3N0cmluZ30gW25hbWU9J1BvcnQnXVxuICogQHBhcmFtIHtib29sZWFufSBbYWxsb3daZXJvPXRydWVdXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVBvcnQocG9ydCwgbmFtZSA9ICdQb3J0JywgYWxsb3daZXJvID0gdHJ1ZSkge1xuICBpZiAoXG4gICAgKHR5cGVvZiBwb3J0ICE9PSAnbnVtYmVyJyAmJiB0eXBlb2YgcG9ydCAhPT0gJ3N0cmluZycpIHx8XG4gICAgKHR5cGVvZiBwb3J0ID09PSAnc3RyaW5nJyAmJiBTdHJpbmdQcm90b3R5cGVUcmltKHBvcnQpLmxlbmd0aCA9PT0gMCkgfHxcbiAgICArcG9ydCAhPT0gK3BvcnQgPj4+IDAgfHxcbiAgICBwb3J0ID4gMHhmZmZmIHx8XG4gICAgKHBvcnQgPT09IDAgJiYgIWFsbG93WmVybylcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVSUl9TT0NLRVRfQkFEX1BPUlQobmFtZSwgcG9ydCwgYWxsb3daZXJvKVxuICB9XG4gIHJldHVybiBwb3J0IHwgMFxufVxuXG4vKipcbiAqIEBjYWxsYmFjayB2YWxpZGF0ZUFib3J0U2lnbmFsXG4gKiBAcGFyYW0geyp9IHNpZ25hbFxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqL1xuXG4vKiogQHR5cGUge3ZhbGlkYXRlQWJvcnRTaWduYWx9ICovXG5jb25zdCB2YWxpZGF0ZUFib3J0U2lnbmFsID0gaGlkZVN0YWNrRnJhbWVzKChzaWduYWwsIG5hbWUpID0+IHtcbiAgaWYgKHNpZ25hbCAhPT0gdW5kZWZpbmVkICYmIChzaWduYWwgPT09IG51bGwgfHwgdHlwZW9mIHNpZ25hbCAhPT0gJ29iamVjdCcgfHwgISgnYWJvcnRlZCcgaW4gc2lnbmFsKSkpIHtcbiAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUobmFtZSwgJ0Fib3J0U2lnbmFsJywgc2lnbmFsKVxuICB9XG59KVxuXG4vKipcbiAqIEBjYWxsYmFjayB2YWxpZGF0ZUZ1bmN0aW9uXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHJldHVybnMge2Fzc2VydHMgdmFsdWUgaXMgRnVuY3Rpb259XG4gKi9cblxuLyoqIEB0eXBlIHt2YWxpZGF0ZUZ1bmN0aW9ufSAqL1xuY29uc3QgdmFsaWRhdGVGdW5jdGlvbiA9IGhpZGVTdGFja0ZyYW1lcygodmFsdWUsIG5hbWUpID0+IHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Z1bmN0aW9uJykgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKG5hbWUsICdGdW5jdGlvbicsIHZhbHVlKVxufSlcblxuLyoqXG4gKiBAY2FsbGJhY2sgdmFsaWRhdGVQbGFpbkZ1bmN0aW9uXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHJldHVybnMge2Fzc2VydHMgdmFsdWUgaXMgRnVuY3Rpb259XG4gKi9cblxuLyoqIEB0eXBlIHt2YWxpZGF0ZVBsYWluRnVuY3Rpb259ICovXG5jb25zdCB2YWxpZGF0ZVBsYWluRnVuY3Rpb24gPSBoaWRlU3RhY2tGcmFtZXMoKHZhbHVlLCBuYW1lKSA9PiB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgfHwgaXNBc3luY0Z1bmN0aW9uKHZhbHVlKSkgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKG5hbWUsICdGdW5jdGlvbicsIHZhbHVlKVxufSlcblxuLyoqXG4gKiBAY2FsbGJhY2sgdmFsaWRhdGVVbmRlZmluZWRcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcmV0dXJucyB7YXNzZXJ0cyB2YWx1ZSBpcyB1bmRlZmluZWR9XG4gKi9cblxuLyoqIEB0eXBlIHt2YWxpZGF0ZVVuZGVmaW5lZH0gKi9cbmNvbnN0IHZhbGlkYXRlVW5kZWZpbmVkID0gaGlkZVN0YWNrRnJhbWVzKCh2YWx1ZSwgbmFtZSkgPT4ge1xuICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKG5hbWUsICd1bmRlZmluZWQnLCB2YWx1ZSlcbn0pXG5cbi8qKlxuICogQHRlbXBsYXRlIFRcbiAqIEBwYXJhbSB7VH0gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge1RbXX0gdW5pb25cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVVbmlvbih2YWx1ZSwgbmFtZSwgdW5pb24pIHtcbiAgaWYgKCFBcnJheVByb3RvdHlwZUluY2x1ZGVzKHVuaW9uLCB2YWx1ZSkpIHtcbiAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUobmFtZSwgYCgnJHtBcnJheVByb3RvdHlwZUpvaW4odW5pb24sICd8Jyl9JylgLCB2YWx1ZSlcbiAgfVxufVxuXG4vKlxuICBUaGUgcnVsZXMgZm9yIHRoZSBMaW5rIGhlYWRlciBmaWVsZCBhcmUgZGVzY3JpYmVkIGhlcmU6XG4gIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM4Mjg4Lmh0bWwjc2VjdGlvbi0zXG5cbiAgVGhpcyByZWdleCB2YWxpZGF0ZXMgYW55IHN0cmluZyBzdXJyb3VuZGVkIGJ5IGFuZ2xlIGJyYWNrZXRzXG4gIChub3QgbmVjZXNzYXJpbHkgYSB2YWxpZCBVUkkgcmVmZXJlbmNlKSBmb2xsb3dlZCBieSB6ZXJvIG9yIG1vcmVcbiAgbGluay1wYXJhbXMgc2VwYXJhdGVkIGJ5IHNlbWljb2xvbnMuXG4qL1xuY29uc3QgbGlua1ZhbHVlUmVnRXhwID0gL14oPzo8W14+XSo+KSg/Olxccyo7XFxzKlteO1wiXFxzXSsoPzo9KFwiKT9bXjtcIlxcc10qXFwxKT8pKiQvXG5cbi8qKlxuICogQHBhcmFtIHthbnl9IHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUxpbmtIZWFkZXJGb3JtYXQodmFsdWUsIG5hbWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcgfHwgIVJlZ0V4cFByb3RvdHlwZUV4ZWMobGlua1ZhbHVlUmVnRXhwLCB2YWx1ZSkpIHtcbiAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1ZBTFVFKFxuICAgICAgbmFtZSxcbiAgICAgIHZhbHVlLFxuICAgICAgJ211c3QgYmUgYW4gYXJyYXkgb3Igc3RyaW5nIG9mIGZvcm1hdCBcIjwvc3R5bGVzLmNzcz47IHJlbD1wcmVsb2FkOyBhcz1zdHlsZVwiJ1xuICAgIClcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7YW55fSBoaW50c1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUxpbmtIZWFkZXJWYWx1ZShoaW50cykge1xuICBpZiAodHlwZW9mIGhpbnRzID09PSAnc3RyaW5nJykge1xuICAgIHZhbGlkYXRlTGlua0hlYWRlckZvcm1hdChoaW50cywgJ2hpbnRzJylcbiAgICByZXR1cm4gaGludHNcbiAgfSBlbHNlIGlmIChBcnJheUlzQXJyYXkoaGludHMpKSB7XG4gICAgY29uc3QgaGludHNMZW5ndGggPSBoaW50cy5sZW5ndGhcbiAgICBsZXQgcmVzdWx0ID0gJydcbiAgICBpZiAoaGludHNMZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiByZXN1bHRcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoaW50c0xlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBsaW5rID0gaGludHNbaV1cbiAgICAgIHZhbGlkYXRlTGlua0hlYWRlckZvcm1hdChsaW5rLCAnaGludHMnKVxuICAgICAgcmVzdWx0ICs9IGxpbmtcbiAgICAgIGlmIChpICE9PSBoaW50c0xlbmd0aCAtIDEpIHtcbiAgICAgICAgcmVzdWx0ICs9ICcsICdcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG4gIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVkFMVUUoXG4gICAgJ2hpbnRzJyxcbiAgICBoaW50cyxcbiAgICAnbXVzdCBiZSBhbiBhcnJheSBvciBzdHJpbmcgb2YgZm9ybWF0IFwiPC9zdHlsZXMuY3NzPjsgcmVsPXByZWxvYWQ7IGFzPXN0eWxlXCInXG4gIClcbn1cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc0ludDMyLFxuICBpc1VpbnQzMixcbiAgcGFyc2VGaWxlTW9kZSxcbiAgdmFsaWRhdGVBcnJheSxcbiAgdmFsaWRhdGVTdHJpbmdBcnJheSxcbiAgdmFsaWRhdGVCb29sZWFuQXJyYXksXG4gIHZhbGlkYXRlQWJvcnRTaWduYWxBcnJheSxcbiAgdmFsaWRhdGVCb29sZWFuLFxuICB2YWxpZGF0ZUJ1ZmZlcixcbiAgdmFsaWRhdGVEaWN0aW9uYXJ5LFxuICB2YWxpZGF0ZUVuY29kaW5nLFxuICB2YWxpZGF0ZUZ1bmN0aW9uLFxuICB2YWxpZGF0ZUludDMyLFxuICB2YWxpZGF0ZUludGVnZXIsXG4gIHZhbGlkYXRlTnVtYmVyLFxuICB2YWxpZGF0ZU9iamVjdCxcbiAgdmFsaWRhdGVPbmVPZixcbiAgdmFsaWRhdGVQbGFpbkZ1bmN0aW9uLFxuICB2YWxpZGF0ZVBvcnQsXG4gIHZhbGlkYXRlU2lnbmFsTmFtZSxcbiAgdmFsaWRhdGVTdHJpbmcsXG4gIHZhbGlkYXRlVWludDMyLFxuICB2YWxpZGF0ZVVuZGVmaW5lZCxcbiAgdmFsaWRhdGVVbmlvbixcbiAgdmFsaWRhdGVBYm9ydFNpZ25hbCxcbiAgdmFsaWRhdGVMaW5rSGVhZGVyVmFsdWVcbn1cbiIsCiAgICAiLy8gZm9yIG5vdyBqdXN0IGV4cG9zZSB0aGUgYnVpbHRpbiBwcm9jZXNzIGdsb2JhbCBmcm9tIG5vZGUuanNcbm1vZHVsZS5leHBvcnRzID0gZ2xvYmFsLnByb2Nlc3M7XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IFN5bWJvbEFzeW5jSXRlcmF0b3IsIFN5bWJvbEl0ZXJhdG9yLCBTeW1ib2xGb3IgfSA9IHJlcXVpcmUoJy4uLy4uL291cnMvcHJpbW9yZGlhbHMnKVxuXG4vLyBXZSBuZWVkIHRvIHVzZSBTeW1ib2xGb3IgdG8gbWFrZSB0aGVzZSBnbG9iYWxseSBhdmFpbGFibGVcbi8vIGZvciBpbnRlcm9wdCB3aXRoIHJlYWRhYmxlLXN0cmVhbSwgaS5lLiByZWFkYWJsZS1zdHJlYW1cbi8vIGFuZCBub2RlIGNvcmUgbmVlZHMgdG8gYmUgYWJsZSB0byByZWFkL3dyaXRlIHByaXZhdGUgc3RhdGVcbi8vIGZyb20gZWFjaCBvdGhlciBmb3IgcHJvcGVyIGludGVyb3BlcmFiaWxpdHkuXG5jb25zdCBrSXNEZXN0cm95ZWQgPSBTeW1ib2xGb3IoJ25vZGVqcy5zdHJlYW0uZGVzdHJveWVkJylcbmNvbnN0IGtJc0Vycm9yZWQgPSBTeW1ib2xGb3IoJ25vZGVqcy5zdHJlYW0uZXJyb3JlZCcpXG5jb25zdCBrSXNSZWFkYWJsZSA9IFN5bWJvbEZvcignbm9kZWpzLnN0cmVhbS5yZWFkYWJsZScpXG5jb25zdCBrSXNXcml0YWJsZSA9IFN5bWJvbEZvcignbm9kZWpzLnN0cmVhbS53cml0YWJsZScpXG5jb25zdCBrSXNEaXN0dXJiZWQgPSBTeW1ib2xGb3IoJ25vZGVqcy5zdHJlYW0uZGlzdHVyYmVkJylcbmNvbnN0IGtJc0Nsb3NlZFByb21pc2UgPSBTeW1ib2xGb3IoJ25vZGVqcy53ZWJzdHJlYW0uaXNDbG9zZWRQcm9taXNlJylcbmNvbnN0IGtDb250cm9sbGVyRXJyb3JGdW5jdGlvbiA9IFN5bWJvbEZvcignbm9kZWpzLndlYnN0cmVhbS5jb250cm9sbGVyRXJyb3JGdW5jdGlvbicpXG5mdW5jdGlvbiBpc1JlYWRhYmxlTm9kZVN0cmVhbShvYmosIHN0cmljdCA9IGZhbHNlKSB7XG4gIHZhciBfb2JqJF9yZWFkYWJsZVN0YXRlXG4gIHJldHVybiAhIShcbiAgICAoXG4gICAgICBvYmogJiZcbiAgICAgIHR5cGVvZiBvYmoucGlwZSA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgdHlwZW9mIG9iai5vbiA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgKCFzdHJpY3QgfHwgKHR5cGVvZiBvYmoucGF1c2UgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIG9iai5yZXN1bWUgPT09ICdmdW5jdGlvbicpKSAmJlxuICAgICAgKCFvYmouX3dyaXRhYmxlU3RhdGUgfHxcbiAgICAgICAgKChfb2JqJF9yZWFkYWJsZVN0YXRlID0gb2JqLl9yZWFkYWJsZVN0YXRlKSA9PT0gbnVsbCB8fCBfb2JqJF9yZWFkYWJsZVN0YXRlID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICAgIDogX29iaiRfcmVhZGFibGVTdGF0ZS5yZWFkYWJsZSkgIT09IGZhbHNlKSAmJlxuICAgICAgLy8gRHVwbGV4XG4gICAgICAoIW9iai5fd3JpdGFibGVTdGF0ZSB8fCBvYmouX3JlYWRhYmxlU3RhdGUpXG4gICAgKSAvLyBXcml0YWJsZSBoYXMgLnBpcGUuXG4gIClcbn1cblxuZnVuY3Rpb24gaXNXcml0YWJsZU5vZGVTdHJlYW0ob2JqKSB7XG4gIHZhciBfb2JqJF93cml0YWJsZVN0YXRlXG4gIHJldHVybiAhIShcbiAgICAoXG4gICAgICBvYmogJiZcbiAgICAgIHR5cGVvZiBvYmoud3JpdGUgPT09ICdmdW5jdGlvbicgJiZcbiAgICAgIHR5cGVvZiBvYmoub24gPT09ICdmdW5jdGlvbicgJiZcbiAgICAgICghb2JqLl9yZWFkYWJsZVN0YXRlIHx8XG4gICAgICAgICgoX29iaiRfd3JpdGFibGVTdGF0ZSA9IG9iai5fd3JpdGFibGVTdGF0ZSkgPT09IG51bGwgfHwgX29iaiRfd3JpdGFibGVTdGF0ZSA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgICA6IF9vYmokX3dyaXRhYmxlU3RhdGUud3JpdGFibGUpICE9PSBmYWxzZSlcbiAgICApIC8vIER1cGxleFxuICApXG59XG5cbmZ1bmN0aW9uIGlzRHVwbGV4Tm9kZVN0cmVhbShvYmopIHtcbiAgcmV0dXJuICEhKFxuICAgIG9iaiAmJlxuICAgIHR5cGVvZiBvYmoucGlwZSA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIG9iai5fcmVhZGFibGVTdGF0ZSAmJlxuICAgIHR5cGVvZiBvYmoub24gPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2Ygb2JqLndyaXRlID09PSAnZnVuY3Rpb24nXG4gIClcbn1cbmZ1bmN0aW9uIGlzTm9kZVN0cmVhbShvYmopIHtcbiAgcmV0dXJuIChcbiAgICBvYmogJiZcbiAgICAob2JqLl9yZWFkYWJsZVN0YXRlIHx8XG4gICAgICBvYmouX3dyaXRhYmxlU3RhdGUgfHxcbiAgICAgICh0eXBlb2Ygb2JqLndyaXRlID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBvYmoub24gPT09ICdmdW5jdGlvbicpIHx8XG4gICAgICAodHlwZW9mIG9iai5waXBlID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBvYmoub24gPT09ICdmdW5jdGlvbicpKVxuICApXG59XG5mdW5jdGlvbiBpc1JlYWRhYmxlU3RyZWFtKG9iaikge1xuICByZXR1cm4gISEoXG4gICAgb2JqICYmXG4gICAgIWlzTm9kZVN0cmVhbShvYmopICYmXG4gICAgdHlwZW9mIG9iai5waXBlVGhyb3VnaCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBvYmouZ2V0UmVhZGVyID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIG9iai5jYW5jZWwgPT09ICdmdW5jdGlvbidcbiAgKVxufVxuZnVuY3Rpb24gaXNXcml0YWJsZVN0cmVhbShvYmopIHtcbiAgcmV0dXJuICEhKG9iaiAmJiAhaXNOb2RlU3RyZWFtKG9iaikgJiYgdHlwZW9mIG9iai5nZXRXcml0ZXIgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIG9iai5hYm9ydCA9PT0gJ2Z1bmN0aW9uJylcbn1cbmZ1bmN0aW9uIGlzVHJhbnNmb3JtU3RyZWFtKG9iaikge1xuICByZXR1cm4gISEob2JqICYmICFpc05vZGVTdHJlYW0ob2JqKSAmJiB0eXBlb2Ygb2JqLnJlYWRhYmxlID09PSAnb2JqZWN0JyAmJiB0eXBlb2Ygb2JqLndyaXRhYmxlID09PSAnb2JqZWN0Jylcbn1cbmZ1bmN0aW9uIGlzV2ViU3RyZWFtKG9iaikge1xuICByZXR1cm4gaXNSZWFkYWJsZVN0cmVhbShvYmopIHx8IGlzV3JpdGFibGVTdHJlYW0ob2JqKSB8fCBpc1RyYW5zZm9ybVN0cmVhbShvYmopXG59XG5mdW5jdGlvbiBpc0l0ZXJhYmxlKG9iaiwgaXNBc3luYykge1xuICBpZiAob2JqID09IG51bGwpIHJldHVybiBmYWxzZVxuICBpZiAoaXNBc3luYyA9PT0gdHJ1ZSkgcmV0dXJuIHR5cGVvZiBvYmpbU3ltYm9sQXN5bmNJdGVyYXRvcl0gPT09ICdmdW5jdGlvbidcbiAgaWYgKGlzQXN5bmMgPT09IGZhbHNlKSByZXR1cm4gdHlwZW9mIG9ialtTeW1ib2xJdGVyYXRvcl0gPT09ICdmdW5jdGlvbidcbiAgcmV0dXJuIHR5cGVvZiBvYmpbU3ltYm9sQXN5bmNJdGVyYXRvcl0gPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIG9ialtTeW1ib2xJdGVyYXRvcl0gPT09ICdmdW5jdGlvbidcbn1cbmZ1bmN0aW9uIGlzRGVzdHJveWVkKHN0cmVhbSkge1xuICBpZiAoIWlzTm9kZVN0cmVhbShzdHJlYW0pKSByZXR1cm4gbnVsbFxuICBjb25zdCB3U3RhdGUgPSBzdHJlYW0uX3dyaXRhYmxlU3RhdGVcbiAgY29uc3QgclN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlXG4gIGNvbnN0IHN0YXRlID0gd1N0YXRlIHx8IHJTdGF0ZVxuICByZXR1cm4gISEoc3RyZWFtLmRlc3Ryb3llZCB8fCBzdHJlYW1ba0lzRGVzdHJveWVkXSB8fCAoc3RhdGUgIT09IG51bGwgJiYgc3RhdGUgIT09IHVuZGVmaW5lZCAmJiBzdGF0ZS5kZXN0cm95ZWQpKVxufVxuXG4vLyBIYXZlIGJlZW4gZW5kKCk6ZC5cbmZ1bmN0aW9uIGlzV3JpdGFibGVFbmRlZChzdHJlYW0pIHtcbiAgaWYgKCFpc1dyaXRhYmxlTm9kZVN0cmVhbShzdHJlYW0pKSByZXR1cm4gbnVsbFxuICBpZiAoc3RyZWFtLndyaXRhYmxlRW5kZWQgPT09IHRydWUpIHJldHVybiB0cnVlXG4gIGNvbnN0IHdTdGF0ZSA9IHN0cmVhbS5fd3JpdGFibGVTdGF0ZVxuICBpZiAod1N0YXRlICE9PSBudWxsICYmIHdTdGF0ZSAhPT0gdW5kZWZpbmVkICYmIHdTdGF0ZS5lcnJvcmVkKSByZXR1cm4gZmFsc2VcbiAgaWYgKHR5cGVvZiAod1N0YXRlID09PSBudWxsIHx8IHdTdGF0ZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogd1N0YXRlLmVuZGVkKSAhPT0gJ2Jvb2xlYW4nKSByZXR1cm4gbnVsbFxuICByZXR1cm4gd1N0YXRlLmVuZGVkXG59XG5cbi8vIEhhdmUgZW1pdHRlZCAnZmluaXNoJy5cbmZ1bmN0aW9uIGlzV3JpdGFibGVGaW5pc2hlZChzdHJlYW0sIHN0cmljdCkge1xuICBpZiAoIWlzV3JpdGFibGVOb2RlU3RyZWFtKHN0cmVhbSkpIHJldHVybiBudWxsXG4gIGlmIChzdHJlYW0ud3JpdGFibGVGaW5pc2hlZCA9PT0gdHJ1ZSkgcmV0dXJuIHRydWVcbiAgY29uc3Qgd1N0YXRlID0gc3RyZWFtLl93cml0YWJsZVN0YXRlXG4gIGlmICh3U3RhdGUgIT09IG51bGwgJiYgd1N0YXRlICE9PSB1bmRlZmluZWQgJiYgd1N0YXRlLmVycm9yZWQpIHJldHVybiBmYWxzZVxuICBpZiAodHlwZW9mICh3U3RhdGUgPT09IG51bGwgfHwgd1N0YXRlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB3U3RhdGUuZmluaXNoZWQpICE9PSAnYm9vbGVhbicpIHJldHVybiBudWxsXG4gIHJldHVybiAhISh3U3RhdGUuZmluaXNoZWQgfHwgKHN0cmljdCA9PT0gZmFsc2UgJiYgd1N0YXRlLmVuZGVkID09PSB0cnVlICYmIHdTdGF0ZS5sZW5ndGggPT09IDApKVxufVxuXG4vLyBIYXZlIGJlZW4gcHVzaChudWxsKTpkLlxuZnVuY3Rpb24gaXNSZWFkYWJsZUVuZGVkKHN0cmVhbSkge1xuICBpZiAoIWlzUmVhZGFibGVOb2RlU3RyZWFtKHN0cmVhbSkpIHJldHVybiBudWxsXG4gIGlmIChzdHJlYW0ucmVhZGFibGVFbmRlZCA9PT0gdHJ1ZSkgcmV0dXJuIHRydWVcbiAgY29uc3QgclN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlXG4gIGlmICghclN0YXRlIHx8IHJTdGF0ZS5lcnJvcmVkKSByZXR1cm4gZmFsc2VcbiAgaWYgKHR5cGVvZiAoclN0YXRlID09PSBudWxsIHx8IHJTdGF0ZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogclN0YXRlLmVuZGVkKSAhPT0gJ2Jvb2xlYW4nKSByZXR1cm4gbnVsbFxuICByZXR1cm4gclN0YXRlLmVuZGVkXG59XG5cbi8vIEhhdmUgZW1pdHRlZCAnZW5kJy5cbmZ1bmN0aW9uIGlzUmVhZGFibGVGaW5pc2hlZChzdHJlYW0sIHN0cmljdCkge1xuICBpZiAoIWlzUmVhZGFibGVOb2RlU3RyZWFtKHN0cmVhbSkpIHJldHVybiBudWxsXG4gIGNvbnN0IHJTdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZVxuICBpZiAoclN0YXRlICE9PSBudWxsICYmIHJTdGF0ZSAhPT0gdW5kZWZpbmVkICYmIHJTdGF0ZS5lcnJvcmVkKSByZXR1cm4gZmFsc2VcbiAgaWYgKHR5cGVvZiAoclN0YXRlID09PSBudWxsIHx8IHJTdGF0ZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogclN0YXRlLmVuZEVtaXR0ZWQpICE9PSAnYm9vbGVhbicpIHJldHVybiBudWxsXG4gIHJldHVybiAhIShyU3RhdGUuZW5kRW1pdHRlZCB8fCAoc3RyaWN0ID09PSBmYWxzZSAmJiByU3RhdGUuZW5kZWQgPT09IHRydWUgJiYgclN0YXRlLmxlbmd0aCA9PT0gMCkpXG59XG5mdW5jdGlvbiBpc1JlYWRhYmxlKHN0cmVhbSkge1xuICBpZiAoc3RyZWFtICYmIHN0cmVhbVtrSXNSZWFkYWJsZV0gIT0gbnVsbCkgcmV0dXJuIHN0cmVhbVtrSXNSZWFkYWJsZV1cbiAgaWYgKHR5cGVvZiAoc3RyZWFtID09PSBudWxsIHx8IHN0cmVhbSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogc3RyZWFtLnJlYWRhYmxlKSAhPT0gJ2Jvb2xlYW4nKSByZXR1cm4gbnVsbFxuICBpZiAoaXNEZXN0cm95ZWQoc3RyZWFtKSkgcmV0dXJuIGZhbHNlXG4gIHJldHVybiBpc1JlYWRhYmxlTm9kZVN0cmVhbShzdHJlYW0pICYmIHN0cmVhbS5yZWFkYWJsZSAmJiAhaXNSZWFkYWJsZUZpbmlzaGVkKHN0cmVhbSlcbn1cbmZ1bmN0aW9uIGlzV3JpdGFibGUoc3RyZWFtKSB7XG4gIGlmIChzdHJlYW0gJiYgc3RyZWFtW2tJc1dyaXRhYmxlXSAhPSBudWxsKSByZXR1cm4gc3RyZWFtW2tJc1dyaXRhYmxlXVxuICBpZiAodHlwZW9mIChzdHJlYW0gPT09IG51bGwgfHwgc3RyZWFtID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBzdHJlYW0ud3JpdGFibGUpICE9PSAnYm9vbGVhbicpIHJldHVybiBudWxsXG4gIGlmIChpc0Rlc3Ryb3llZChzdHJlYW0pKSByZXR1cm4gZmFsc2VcbiAgcmV0dXJuIGlzV3JpdGFibGVOb2RlU3RyZWFtKHN0cmVhbSkgJiYgc3RyZWFtLndyaXRhYmxlICYmICFpc1dyaXRhYmxlRW5kZWQoc3RyZWFtKVxufVxuZnVuY3Rpb24gaXNGaW5pc2hlZChzdHJlYW0sIG9wdHMpIHtcbiAgaWYgKCFpc05vZGVTdHJlYW0oc3RyZWFtKSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgaWYgKGlzRGVzdHJveWVkKHN0cmVhbSkpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIGlmICgob3B0cyA9PT0gbnVsbCB8fCBvcHRzID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBvcHRzLnJlYWRhYmxlKSAhPT0gZmFsc2UgJiYgaXNSZWFkYWJsZShzdHJlYW0pKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgaWYgKChvcHRzID09PSBudWxsIHx8IG9wdHMgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IG9wdHMud3JpdGFibGUpICE9PSBmYWxzZSAmJiBpc1dyaXRhYmxlKHN0cmVhbSkpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuZnVuY3Rpb24gaXNXcml0YWJsZUVycm9yZWQoc3RyZWFtKSB7XG4gIHZhciBfc3RyZWFtJF93cml0YWJsZVN0YXQsIF9zdHJlYW0kX3dyaXRhYmxlU3RhdDJcbiAgaWYgKCFpc05vZGVTdHJlYW0oc3RyZWFtKSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgaWYgKHN0cmVhbS53cml0YWJsZUVycm9yZWQpIHtcbiAgICByZXR1cm4gc3RyZWFtLndyaXRhYmxlRXJyb3JlZFxuICB9XG4gIHJldHVybiAoX3N0cmVhbSRfd3JpdGFibGVTdGF0ID1cbiAgICAoX3N0cmVhbSRfd3JpdGFibGVTdGF0MiA9IHN0cmVhbS5fd3JpdGFibGVTdGF0ZSkgPT09IG51bGwgfHwgX3N0cmVhbSRfd3JpdGFibGVTdGF0MiA9PT0gdW5kZWZpbmVkXG4gICAgICA/IHVuZGVmaW5lZFxuICAgICAgOiBfc3RyZWFtJF93cml0YWJsZVN0YXQyLmVycm9yZWQpICE9PSBudWxsICYmIF9zdHJlYW0kX3dyaXRhYmxlU3RhdCAhPT0gdW5kZWZpbmVkXG4gICAgPyBfc3RyZWFtJF93cml0YWJsZVN0YXRcbiAgICA6IG51bGxcbn1cbmZ1bmN0aW9uIGlzUmVhZGFibGVFcnJvcmVkKHN0cmVhbSkge1xuICB2YXIgX3N0cmVhbSRfcmVhZGFibGVTdGF0LCBfc3RyZWFtJF9yZWFkYWJsZVN0YXQyXG4gIGlmICghaXNOb2RlU3RyZWFtKHN0cmVhbSkpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIGlmIChzdHJlYW0ucmVhZGFibGVFcnJvcmVkKSB7XG4gICAgcmV0dXJuIHN0cmVhbS5yZWFkYWJsZUVycm9yZWRcbiAgfVxuICByZXR1cm4gKF9zdHJlYW0kX3JlYWRhYmxlU3RhdCA9XG4gICAgKF9zdHJlYW0kX3JlYWRhYmxlU3RhdDIgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGUpID09PSBudWxsIHx8IF9zdHJlYW0kX3JlYWRhYmxlU3RhdDIgPT09IHVuZGVmaW5lZFxuICAgICAgPyB1bmRlZmluZWRcbiAgICAgIDogX3N0cmVhbSRfcmVhZGFibGVTdGF0Mi5lcnJvcmVkKSAhPT0gbnVsbCAmJiBfc3RyZWFtJF9yZWFkYWJsZVN0YXQgIT09IHVuZGVmaW5lZFxuICAgID8gX3N0cmVhbSRfcmVhZGFibGVTdGF0XG4gICAgOiBudWxsXG59XG5mdW5jdGlvbiBpc0Nsb3NlZChzdHJlYW0pIHtcbiAgaWYgKCFpc05vZGVTdHJlYW0oc3RyZWFtKSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgaWYgKHR5cGVvZiBzdHJlYW0uY2xvc2VkID09PSAnYm9vbGVhbicpIHtcbiAgICByZXR1cm4gc3RyZWFtLmNsb3NlZFxuICB9XG4gIGNvbnN0IHdTdGF0ZSA9IHN0cmVhbS5fd3JpdGFibGVTdGF0ZVxuICBjb25zdCByU3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGVcbiAgaWYgKFxuICAgIHR5cGVvZiAod1N0YXRlID09PSBudWxsIHx8IHdTdGF0ZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogd1N0YXRlLmNsb3NlZCkgPT09ICdib29sZWFuJyB8fFxuICAgIHR5cGVvZiAoclN0YXRlID09PSBudWxsIHx8IHJTdGF0ZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogclN0YXRlLmNsb3NlZCkgPT09ICdib29sZWFuJ1xuICApIHtcbiAgICByZXR1cm4gKFxuICAgICAgKHdTdGF0ZSA9PT0gbnVsbCB8fCB3U3RhdGUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHdTdGF0ZS5jbG9zZWQpIHx8XG4gICAgICAoclN0YXRlID09PSBudWxsIHx8IHJTdGF0ZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogclN0YXRlLmNsb3NlZClcbiAgICApXG4gIH1cbiAgaWYgKHR5cGVvZiBzdHJlYW0uX2Nsb3NlZCA9PT0gJ2Jvb2xlYW4nICYmIGlzT3V0Z29pbmdNZXNzYWdlKHN0cmVhbSkpIHtcbiAgICByZXR1cm4gc3RyZWFtLl9jbG9zZWRcbiAgfVxuICByZXR1cm4gbnVsbFxufVxuZnVuY3Rpb24gaXNPdXRnb2luZ01lc3NhZ2Uoc3RyZWFtKSB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHN0cmVhbS5fY2xvc2VkID09PSAnYm9vbGVhbicgJiZcbiAgICB0eXBlb2Ygc3RyZWFtLl9kZWZhdWx0S2VlcEFsaXZlID09PSAnYm9vbGVhbicgJiZcbiAgICB0eXBlb2Ygc3RyZWFtLl9yZW1vdmVkQ29ubmVjdGlvbiA9PT0gJ2Jvb2xlYW4nICYmXG4gICAgdHlwZW9mIHN0cmVhbS5fcmVtb3ZlZENvbnRMZW4gPT09ICdib29sZWFuJ1xuICApXG59XG5mdW5jdGlvbiBpc1NlcnZlclJlc3BvbnNlKHN0cmVhbSkge1xuICByZXR1cm4gdHlwZW9mIHN0cmVhbS5fc2VudDEwMCA9PT0gJ2Jvb2xlYW4nICYmIGlzT3V0Z29pbmdNZXNzYWdlKHN0cmVhbSlcbn1cbmZ1bmN0aW9uIGlzU2VydmVyUmVxdWVzdChzdHJlYW0pIHtcbiAgdmFyIF9zdHJlYW0kcmVxXG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHN0cmVhbS5fY29uc3VtaW5nID09PSAnYm9vbGVhbicgJiZcbiAgICB0eXBlb2Ygc3RyZWFtLl9kdW1wZWQgPT09ICdib29sZWFuJyAmJlxuICAgICgoX3N0cmVhbSRyZXEgPSBzdHJlYW0ucmVxKSA9PT0gbnVsbCB8fCBfc3RyZWFtJHJlcSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogX3N0cmVhbSRyZXEudXBncmFkZU9yQ29ubmVjdCkgPT09XG4gICAgICB1bmRlZmluZWRcbiAgKVxufVxuZnVuY3Rpb24gd2lsbEVtaXRDbG9zZShzdHJlYW0pIHtcbiAgaWYgKCFpc05vZGVTdHJlYW0oc3RyZWFtKSkgcmV0dXJuIG51bGxcbiAgY29uc3Qgd1N0YXRlID0gc3RyZWFtLl93cml0YWJsZVN0YXRlXG4gIGNvbnN0IHJTdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZVxuICBjb25zdCBzdGF0ZSA9IHdTdGF0ZSB8fCByU3RhdGVcbiAgcmV0dXJuIChcbiAgICAoIXN0YXRlICYmIGlzU2VydmVyUmVzcG9uc2Uoc3RyZWFtKSkgfHwgISEoc3RhdGUgJiYgc3RhdGUuYXV0b0Rlc3Ryb3kgJiYgc3RhdGUuZW1pdENsb3NlICYmIHN0YXRlLmNsb3NlZCA9PT0gZmFsc2UpXG4gIClcbn1cbmZ1bmN0aW9uIGlzRGlzdHVyYmVkKHN0cmVhbSkge1xuICB2YXIgX3N0cmVhbSRrSXNEaXN0dXJiZWRcbiAgcmV0dXJuICEhKFxuICAgIHN0cmVhbSAmJlxuICAgICgoX3N0cmVhbSRrSXNEaXN0dXJiZWQgPSBzdHJlYW1ba0lzRGlzdHVyYmVkXSkgIT09IG51bGwgJiYgX3N0cmVhbSRrSXNEaXN0dXJiZWQgIT09IHVuZGVmaW5lZFxuICAgICAgPyBfc3RyZWFtJGtJc0Rpc3R1cmJlZFxuICAgICAgOiBzdHJlYW0ucmVhZGFibGVEaWRSZWFkIHx8IHN0cmVhbS5yZWFkYWJsZUFib3J0ZWQpXG4gIClcbn1cbmZ1bmN0aW9uIGlzRXJyb3JlZChzdHJlYW0pIHtcbiAgdmFyIF9yZWYsXG4gICAgX3JlZjIsXG4gICAgX3JlZjMsXG4gICAgX3JlZjQsXG4gICAgX3JlZjUsXG4gICAgX3N0cmVhbSRrSXNFcnJvcmVkLFxuICAgIF9zdHJlYW0kX3JlYWRhYmxlU3RhdDMsXG4gICAgX3N0cmVhbSRfd3JpdGFibGVTdGF0MyxcbiAgICBfc3RyZWFtJF9yZWFkYWJsZVN0YXQ0LFxuICAgIF9zdHJlYW0kX3dyaXRhYmxlU3RhdDRcbiAgcmV0dXJuICEhKFxuICAgIHN0cmVhbSAmJlxuICAgICgoX3JlZiA9XG4gICAgICAoX3JlZjIgPVxuICAgICAgICAoX3JlZjMgPVxuICAgICAgICAgIChfcmVmNCA9XG4gICAgICAgICAgICAoX3JlZjUgPVxuICAgICAgICAgICAgICAoX3N0cmVhbSRrSXNFcnJvcmVkID0gc3RyZWFtW2tJc0Vycm9yZWRdKSAhPT0gbnVsbCAmJiBfc3RyZWFtJGtJc0Vycm9yZWQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgID8gX3N0cmVhbSRrSXNFcnJvcmVkXG4gICAgICAgICAgICAgICAgOiBzdHJlYW0ucmVhZGFibGVFcnJvcmVkKSAhPT0gbnVsbCAmJiBfcmVmNSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgID8gX3JlZjVcbiAgICAgICAgICAgICAgOiBzdHJlYW0ud3JpdGFibGVFcnJvcmVkKSAhPT0gbnVsbCAmJiBfcmVmNCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IF9yZWY0XG4gICAgICAgICAgICA6IChfc3RyZWFtJF9yZWFkYWJsZVN0YXQzID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlKSA9PT0gbnVsbCB8fCBfc3RyZWFtJF9yZWFkYWJsZVN0YXQzID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgICA6IF9zdHJlYW0kX3JlYWRhYmxlU3RhdDMuZXJyb3JFbWl0dGVkKSAhPT0gbnVsbCAmJiBfcmVmMyAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyBfcmVmM1xuICAgICAgICAgIDogKF9zdHJlYW0kX3dyaXRhYmxlU3RhdDMgPSBzdHJlYW0uX3dyaXRhYmxlU3RhdGUpID09PSBudWxsIHx8IF9zdHJlYW0kX3dyaXRhYmxlU3RhdDMgPT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgOiBfc3RyZWFtJF93cml0YWJsZVN0YXQzLmVycm9yRW1pdHRlZCkgIT09IG51bGwgJiYgX3JlZjIgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IF9yZWYyXG4gICAgICAgIDogKF9zdHJlYW0kX3JlYWRhYmxlU3RhdDQgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGUpID09PSBudWxsIHx8IF9zdHJlYW0kX3JlYWRhYmxlU3RhdDQgPT09IHVuZGVmaW5lZFxuICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICA6IF9zdHJlYW0kX3JlYWRhYmxlU3RhdDQuZXJyb3JlZCkgIT09IG51bGwgJiYgX3JlZiAhPT0gdW5kZWZpbmVkXG4gICAgICA/IF9yZWZcbiAgICAgIDogKF9zdHJlYW0kX3dyaXRhYmxlU3RhdDQgPSBzdHJlYW0uX3dyaXRhYmxlU3RhdGUpID09PSBudWxsIHx8IF9zdHJlYW0kX3dyaXRhYmxlU3RhdDQgPT09IHVuZGVmaW5lZFxuICAgICAgPyB1bmRlZmluZWRcbiAgICAgIDogX3N0cmVhbSRfd3JpdGFibGVTdGF0NC5lcnJvcmVkKVxuICApXG59XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXNEZXN0cm95ZWQsXG4gIGtJc0Rlc3Ryb3llZCxcbiAgaXNEaXN0dXJiZWQsXG4gIGtJc0Rpc3R1cmJlZCxcbiAgaXNFcnJvcmVkLFxuICBrSXNFcnJvcmVkLFxuICBpc1JlYWRhYmxlLFxuICBrSXNSZWFkYWJsZSxcbiAga0lzQ2xvc2VkUHJvbWlzZSxcbiAga0NvbnRyb2xsZXJFcnJvckZ1bmN0aW9uLFxuICBrSXNXcml0YWJsZSxcbiAgaXNDbG9zZWQsXG4gIGlzRHVwbGV4Tm9kZVN0cmVhbSxcbiAgaXNGaW5pc2hlZCxcbiAgaXNJdGVyYWJsZSxcbiAgaXNSZWFkYWJsZU5vZGVTdHJlYW0sXG4gIGlzUmVhZGFibGVTdHJlYW0sXG4gIGlzUmVhZGFibGVFbmRlZCxcbiAgaXNSZWFkYWJsZUZpbmlzaGVkLFxuICBpc1JlYWRhYmxlRXJyb3JlZCxcbiAgaXNOb2RlU3RyZWFtLFxuICBpc1dlYlN0cmVhbSxcbiAgaXNXcml0YWJsZSxcbiAgaXNXcml0YWJsZU5vZGVTdHJlYW0sXG4gIGlzV3JpdGFibGVTdHJlYW0sXG4gIGlzV3JpdGFibGVFbmRlZCxcbiAgaXNXcml0YWJsZUZpbmlzaGVkLFxuICBpc1dyaXRhYmxlRXJyb3JlZCxcbiAgaXNTZXJ2ZXJSZXF1ZXN0LFxuICBpc1NlcnZlclJlc3BvbnNlLFxuICB3aWxsRW1pdENsb3NlLFxuICBpc1RyYW5zZm9ybVN0cmVhbVxufVxuIiwKICAgICIvKiByZXBsYWNlbWVudCBzdGFydCAqL1xuXG5jb25zdCBwcm9jZXNzID0gcmVxdWlyZSgncHJvY2Vzcy8nKVxuXG4vKiByZXBsYWNlbWVudCBlbmQgKi9cbi8vIFBvcnRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9tYWZpbnRvc2gvZW5kLW9mLXN0cmVhbSB3aXRoXG4vLyBwZXJtaXNzaW9uIGZyb20gdGhlIGF1dGhvciwgTWF0aGlhcyBCdXVzIChAbWFmaW50b3NoKS5cblxuOygndXNlIHN0cmljdCcpXG5jb25zdCB7IEFib3J0RXJyb3IsIGNvZGVzIH0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL2Vycm9ycycpXG5jb25zdCB7IEVSUl9JTlZBTElEX0FSR19UWVBFLCBFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRSB9ID0gY29kZXNcbmNvbnN0IHsga0VtcHR5T2JqZWN0LCBvbmNlIH0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL3V0aWwnKVxuY29uc3QgeyB2YWxpZGF0ZUFib3J0U2lnbmFsLCB2YWxpZGF0ZUZ1bmN0aW9uLCB2YWxpZGF0ZU9iamVjdCwgdmFsaWRhdGVCb29sZWFuIH0gPSByZXF1aXJlKCcuLi92YWxpZGF0b3JzJylcbmNvbnN0IHsgUHJvbWlzZSwgUHJvbWlzZVByb3RvdHlwZVRoZW4sIFN5bWJvbERpc3Bvc2UgfSA9IHJlcXVpcmUoJy4uLy4uL291cnMvcHJpbW9yZGlhbHMnKVxuY29uc3Qge1xuICBpc0Nsb3NlZCxcbiAgaXNSZWFkYWJsZSxcbiAgaXNSZWFkYWJsZU5vZGVTdHJlYW0sXG4gIGlzUmVhZGFibGVTdHJlYW0sXG4gIGlzUmVhZGFibGVGaW5pc2hlZCxcbiAgaXNSZWFkYWJsZUVycm9yZWQsXG4gIGlzV3JpdGFibGUsXG4gIGlzV3JpdGFibGVOb2RlU3RyZWFtLFxuICBpc1dyaXRhYmxlU3RyZWFtLFxuICBpc1dyaXRhYmxlRmluaXNoZWQsXG4gIGlzV3JpdGFibGVFcnJvcmVkLFxuICBpc05vZGVTdHJlYW0sXG4gIHdpbGxFbWl0Q2xvc2U6IF93aWxsRW1pdENsb3NlLFxuICBrSXNDbG9zZWRQcm9taXNlXG59ID0gcmVxdWlyZSgnLi91dGlscycpXG5sZXQgYWRkQWJvcnRMaXN0ZW5lclxuZnVuY3Rpb24gaXNSZXF1ZXN0KHN0cmVhbSkge1xuICByZXR1cm4gc3RyZWFtLnNldEhlYWRlciAmJiB0eXBlb2Ygc3RyZWFtLmFib3J0ID09PSAnZnVuY3Rpb24nXG59XG5jb25zdCBub3AgPSAoKSA9PiB7fVxuZnVuY3Rpb24gZW9zKHN0cmVhbSwgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgdmFyIF9vcHRpb25zJHJlYWRhYmxlLCBfb3B0aW9ucyR3cml0YWJsZVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgIGNhbGxiYWNrID0gb3B0aW9uc1xuICAgIG9wdGlvbnMgPSBrRW1wdHlPYmplY3RcbiAgfSBlbHNlIGlmIChvcHRpb25zID09IG51bGwpIHtcbiAgICBvcHRpb25zID0ga0VtcHR5T2JqZWN0XG4gIH0gZWxzZSB7XG4gICAgdmFsaWRhdGVPYmplY3Qob3B0aW9ucywgJ29wdGlvbnMnKVxuICB9XG4gIHZhbGlkYXRlRnVuY3Rpb24oY2FsbGJhY2ssICdjYWxsYmFjaycpXG4gIHZhbGlkYXRlQWJvcnRTaWduYWwob3B0aW9ucy5zaWduYWwsICdvcHRpb25zLnNpZ25hbCcpXG4gIGNhbGxiYWNrID0gb25jZShjYWxsYmFjaylcbiAgaWYgKGlzUmVhZGFibGVTdHJlYW0oc3RyZWFtKSB8fCBpc1dyaXRhYmxlU3RyZWFtKHN0cmVhbSkpIHtcbiAgICByZXR1cm4gZW9zV2ViKHN0cmVhbSwgb3B0aW9ucywgY2FsbGJhY2spXG4gIH1cbiAgaWYgKCFpc05vZGVTdHJlYW0oc3RyZWFtKSkge1xuICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRSgnc3RyZWFtJywgWydSZWFkYWJsZVN0cmVhbScsICdXcml0YWJsZVN0cmVhbScsICdTdHJlYW0nXSwgc3RyZWFtKVxuICB9XG4gIGNvbnN0IHJlYWRhYmxlID1cbiAgICAoX29wdGlvbnMkcmVhZGFibGUgPSBvcHRpb25zLnJlYWRhYmxlKSAhPT0gbnVsbCAmJiBfb3B0aW9ucyRyZWFkYWJsZSAhPT0gdW5kZWZpbmVkXG4gICAgICA/IF9vcHRpb25zJHJlYWRhYmxlXG4gICAgICA6IGlzUmVhZGFibGVOb2RlU3RyZWFtKHN0cmVhbSlcbiAgY29uc3Qgd3JpdGFibGUgPVxuICAgIChfb3B0aW9ucyR3cml0YWJsZSA9IG9wdGlvbnMud3JpdGFibGUpICE9PSBudWxsICYmIF9vcHRpb25zJHdyaXRhYmxlICE9PSB1bmRlZmluZWRcbiAgICAgID8gX29wdGlvbnMkd3JpdGFibGVcbiAgICAgIDogaXNXcml0YWJsZU5vZGVTdHJlYW0oc3RyZWFtKVxuICBjb25zdCB3U3RhdGUgPSBzdHJlYW0uX3dyaXRhYmxlU3RhdGVcbiAgY29uc3QgclN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlXG4gIGNvbnN0IG9ubGVnYWN5ZmluaXNoID0gKCkgPT4ge1xuICAgIGlmICghc3RyZWFtLndyaXRhYmxlKSB7XG4gICAgICBvbmZpbmlzaCgpXG4gICAgfVxuICB9XG5cbiAgLy8gVE9ETyAocm9uYWcpOiBJbXByb3ZlIHNvZnQgZGV0ZWN0aW9uIHRvIGluY2x1ZGUgY29yZSBtb2R1bGVzIGFuZFxuICAvLyBjb21tb24gZWNvc3lzdGVtIG1vZHVsZXMgdGhhdCBkbyBwcm9wZXJseSBlbWl0ICdjbG9zZScgYnV0IGZhaWxcbiAgLy8gdGhpcyBnZW5lcmljIGNoZWNrLlxuICBsZXQgd2lsbEVtaXRDbG9zZSA9XG4gICAgX3dpbGxFbWl0Q2xvc2Uoc3RyZWFtKSAmJiBpc1JlYWRhYmxlTm9kZVN0cmVhbShzdHJlYW0pID09PSByZWFkYWJsZSAmJiBpc1dyaXRhYmxlTm9kZVN0cmVhbShzdHJlYW0pID09PSB3cml0YWJsZVxuICBsZXQgd3JpdGFibGVGaW5pc2hlZCA9IGlzV3JpdGFibGVGaW5pc2hlZChzdHJlYW0sIGZhbHNlKVxuICBjb25zdCBvbmZpbmlzaCA9ICgpID0+IHtcbiAgICB3cml0YWJsZUZpbmlzaGVkID0gdHJ1ZVxuICAgIC8vIFN0cmVhbSBzaG91bGQgbm90IGJlIGRlc3Ryb3llZCBoZXJlLiBJZiBpdCBpcyB0aGF0XG4gICAgLy8gbWVhbnMgdGhhdCB1c2VyIHNwYWNlIGlzIGRvaW5nIHNvbWV0aGluZyBkaWZmZXJlbnRseSBhbmRcbiAgICAvLyB3ZSBjYW5ub3QgdHJ1c3Qgd2lsbEVtaXRDbG9zZS5cbiAgICBpZiAoc3RyZWFtLmRlc3Ryb3llZCkge1xuICAgICAgd2lsbEVtaXRDbG9zZSA9IGZhbHNlXG4gICAgfVxuICAgIGlmICh3aWxsRW1pdENsb3NlICYmICghc3RyZWFtLnJlYWRhYmxlIHx8IHJlYWRhYmxlKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmICghcmVhZGFibGUgfHwgcmVhZGFibGVGaW5pc2hlZCkge1xuICAgICAgY2FsbGJhY2suY2FsbChzdHJlYW0pXG4gICAgfVxuICB9XG4gIGxldCByZWFkYWJsZUZpbmlzaGVkID0gaXNSZWFkYWJsZUZpbmlzaGVkKHN0cmVhbSwgZmFsc2UpXG4gIGNvbnN0IG9uZW5kID0gKCkgPT4ge1xuICAgIHJlYWRhYmxlRmluaXNoZWQgPSB0cnVlXG4gICAgLy8gU3RyZWFtIHNob3VsZCBub3QgYmUgZGVzdHJveWVkIGhlcmUuIElmIGl0IGlzIHRoYXRcbiAgICAvLyBtZWFucyB0aGF0IHVzZXIgc3BhY2UgaXMgZG9pbmcgc29tZXRoaW5nIGRpZmZlcmVudGx5IGFuZFxuICAgIC8vIHdlIGNhbm5vdCB0cnVzdCB3aWxsRW1pdENsb3NlLlxuICAgIGlmIChzdHJlYW0uZGVzdHJveWVkKSB7XG4gICAgICB3aWxsRW1pdENsb3NlID0gZmFsc2VcbiAgICB9XG4gICAgaWYgKHdpbGxFbWl0Q2xvc2UgJiYgKCFzdHJlYW0ud3JpdGFibGUgfHwgd3JpdGFibGUpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKCF3cml0YWJsZSB8fCB3cml0YWJsZUZpbmlzaGVkKSB7XG4gICAgICBjYWxsYmFjay5jYWxsKHN0cmVhbSlcbiAgICB9XG4gIH1cbiAgY29uc3Qgb25lcnJvciA9IChlcnIpID0+IHtcbiAgICBjYWxsYmFjay5jYWxsKHN0cmVhbSwgZXJyKVxuICB9XG4gIGxldCBjbG9zZWQgPSBpc0Nsb3NlZChzdHJlYW0pXG4gIGNvbnN0IG9uY2xvc2UgPSAoKSA9PiB7XG4gICAgY2xvc2VkID0gdHJ1ZVxuICAgIGNvbnN0IGVycm9yZWQgPSBpc1dyaXRhYmxlRXJyb3JlZChzdHJlYW0pIHx8IGlzUmVhZGFibGVFcnJvcmVkKHN0cmVhbSlcbiAgICBpZiAoZXJyb3JlZCAmJiB0eXBlb2YgZXJyb3JlZCAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2suY2FsbChzdHJlYW0sIGVycm9yZWQpXG4gICAgfVxuICAgIGlmIChyZWFkYWJsZSAmJiAhcmVhZGFibGVGaW5pc2hlZCAmJiBpc1JlYWRhYmxlTm9kZVN0cmVhbShzdHJlYW0sIHRydWUpKSB7XG4gICAgICBpZiAoIWlzUmVhZGFibGVGaW5pc2hlZChzdHJlYW0sIGZhbHNlKSkgcmV0dXJuIGNhbGxiYWNrLmNhbGwoc3RyZWFtLCBuZXcgRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UoKSlcbiAgICB9XG4gICAgaWYgKHdyaXRhYmxlICYmICF3cml0YWJsZUZpbmlzaGVkKSB7XG4gICAgICBpZiAoIWlzV3JpdGFibGVGaW5pc2hlZChzdHJlYW0sIGZhbHNlKSkgcmV0dXJuIGNhbGxiYWNrLmNhbGwoc3RyZWFtLCBuZXcgRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UoKSlcbiAgICB9XG4gICAgY2FsbGJhY2suY2FsbChzdHJlYW0pXG4gIH1cbiAgY29uc3Qgb25jbG9zZWQgPSAoKSA9PiB7XG4gICAgY2xvc2VkID0gdHJ1ZVxuICAgIGNvbnN0IGVycm9yZWQgPSBpc1dyaXRhYmxlRXJyb3JlZChzdHJlYW0pIHx8IGlzUmVhZGFibGVFcnJvcmVkKHN0cmVhbSlcbiAgICBpZiAoZXJyb3JlZCAmJiB0eXBlb2YgZXJyb3JlZCAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2suY2FsbChzdHJlYW0sIGVycm9yZWQpXG4gICAgfVxuICAgIGNhbGxiYWNrLmNhbGwoc3RyZWFtKVxuICB9XG4gIGNvbnN0IG9ucmVxdWVzdCA9ICgpID0+IHtcbiAgICBzdHJlYW0ucmVxLm9uKCdmaW5pc2gnLCBvbmZpbmlzaClcbiAgfVxuICBpZiAoaXNSZXF1ZXN0KHN0cmVhbSkpIHtcbiAgICBzdHJlYW0ub24oJ2NvbXBsZXRlJywgb25maW5pc2gpXG4gICAgaWYgKCF3aWxsRW1pdENsb3NlKSB7XG4gICAgICBzdHJlYW0ub24oJ2Fib3J0Jywgb25jbG9zZSlcbiAgICB9XG4gICAgaWYgKHN0cmVhbS5yZXEpIHtcbiAgICAgIG9ucmVxdWVzdCgpXG4gICAgfSBlbHNlIHtcbiAgICAgIHN0cmVhbS5vbigncmVxdWVzdCcsIG9ucmVxdWVzdClcbiAgICB9XG4gIH0gZWxzZSBpZiAod3JpdGFibGUgJiYgIXdTdGF0ZSkge1xuICAgIC8vIGxlZ2FjeSBzdHJlYW1zXG4gICAgc3RyZWFtLm9uKCdlbmQnLCBvbmxlZ2FjeWZpbmlzaClcbiAgICBzdHJlYW0ub24oJ2Nsb3NlJywgb25sZWdhY3lmaW5pc2gpXG4gIH1cblxuICAvLyBOb3QgYWxsIHN0cmVhbXMgd2lsbCBlbWl0ICdjbG9zZScgYWZ0ZXIgJ2Fib3J0ZWQnLlxuICBpZiAoIXdpbGxFbWl0Q2xvc2UgJiYgdHlwZW9mIHN0cmVhbS5hYm9ydGVkID09PSAnYm9vbGVhbicpIHtcbiAgICBzdHJlYW0ub24oJ2Fib3J0ZWQnLCBvbmNsb3NlKVxuICB9XG4gIHN0cmVhbS5vbignZW5kJywgb25lbmQpXG4gIHN0cmVhbS5vbignZmluaXNoJywgb25maW5pc2gpXG4gIGlmIChvcHRpb25zLmVycm9yICE9PSBmYWxzZSkge1xuICAgIHN0cmVhbS5vbignZXJyb3InLCBvbmVycm9yKVxuICB9XG4gIHN0cmVhbS5vbignY2xvc2UnLCBvbmNsb3NlKVxuICBpZiAoY2xvc2VkKSB7XG4gICAgcHJvY2Vzcy5uZXh0VGljayhvbmNsb3NlKVxuICB9IGVsc2UgaWYgKFxuICAgICh3U3RhdGUgIT09IG51bGwgJiYgd1N0YXRlICE9PSB1bmRlZmluZWQgJiYgd1N0YXRlLmVycm9yRW1pdHRlZCkgfHxcbiAgICAoclN0YXRlICE9PSBudWxsICYmIHJTdGF0ZSAhPT0gdW5kZWZpbmVkICYmIHJTdGF0ZS5lcnJvckVtaXR0ZWQpXG4gICkge1xuICAgIGlmICghd2lsbEVtaXRDbG9zZSkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhvbmNsb3NlZClcbiAgICB9XG4gIH0gZWxzZSBpZiAoXG4gICAgIXJlYWRhYmxlICYmXG4gICAgKCF3aWxsRW1pdENsb3NlIHx8IGlzUmVhZGFibGUoc3RyZWFtKSkgJiZcbiAgICAod3JpdGFibGVGaW5pc2hlZCB8fCBpc1dyaXRhYmxlKHN0cmVhbSkgPT09IGZhbHNlKVxuICApIHtcbiAgICBwcm9jZXNzLm5leHRUaWNrKG9uY2xvc2VkKVxuICB9IGVsc2UgaWYgKFxuICAgICF3cml0YWJsZSAmJlxuICAgICghd2lsbEVtaXRDbG9zZSB8fCBpc1dyaXRhYmxlKHN0cmVhbSkpICYmXG4gICAgKHJlYWRhYmxlRmluaXNoZWQgfHwgaXNSZWFkYWJsZShzdHJlYW0pID09PSBmYWxzZSlcbiAgKSB7XG4gICAgcHJvY2Vzcy5uZXh0VGljayhvbmNsb3NlZClcbiAgfSBlbHNlIGlmIChyU3RhdGUgJiYgc3RyZWFtLnJlcSAmJiBzdHJlYW0uYWJvcnRlZCkge1xuICAgIHByb2Nlc3MubmV4dFRpY2sob25jbG9zZWQpXG4gIH1cbiAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcbiAgICBjYWxsYmFjayA9IG5vcFxuICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcignYWJvcnRlZCcsIG9uY2xvc2UpXG4gICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdjb21wbGV0ZScsIG9uZmluaXNoKVxuICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcignYWJvcnQnLCBvbmNsb3NlKVxuICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcigncmVxdWVzdCcsIG9ucmVxdWVzdClcbiAgICBpZiAoc3RyZWFtLnJlcSkgc3RyZWFtLnJlcS5yZW1vdmVMaXN0ZW5lcignZmluaXNoJywgb25maW5pc2gpXG4gICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBvbmxlZ2FjeWZpbmlzaClcbiAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgb25sZWdhY3lmaW5pc2gpXG4gICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdmaW5pc2gnLCBvbmZpbmlzaClcbiAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIG9uZW5kKVxuICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbmVycm9yKVxuICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBvbmNsb3NlKVxuICB9XG4gIGlmIChvcHRpb25zLnNpZ25hbCAmJiAhY2xvc2VkKSB7XG4gICAgY29uc3QgYWJvcnQgPSAoKSA9PiB7XG4gICAgICAvLyBLZWVwIGl0IGJlY2F1c2UgY2xlYW51cCByZW1vdmVzIGl0LlxuICAgICAgY29uc3QgZW5kQ2FsbGJhY2sgPSBjYWxsYmFja1xuICAgICAgY2xlYW51cCgpXG4gICAgICBlbmRDYWxsYmFjay5jYWxsKFxuICAgICAgICBzdHJlYW0sXG4gICAgICAgIG5ldyBBYm9ydEVycm9yKHVuZGVmaW5lZCwge1xuICAgICAgICAgIGNhdXNlOiBvcHRpb25zLnNpZ25hbC5yZWFzb25cbiAgICAgICAgfSlcbiAgICAgIClcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soYWJvcnQpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFkZEFib3J0TGlzdGVuZXIgPSBhZGRBYm9ydExpc3RlbmVyIHx8IHJlcXVpcmUoJy4uLy4uL291cnMvdXRpbCcpLmFkZEFib3J0TGlzdGVuZXJcbiAgICAgIGNvbnN0IGRpc3Bvc2FibGUgPSBhZGRBYm9ydExpc3RlbmVyKG9wdGlvbnMuc2lnbmFsLCBhYm9ydClcbiAgICAgIGNvbnN0IG9yaWdpbmFsQ2FsbGJhY2sgPSBjYWxsYmFja1xuICAgICAgY2FsbGJhY2sgPSBvbmNlKCguLi5hcmdzKSA9PiB7XG4gICAgICAgIGRpc3Bvc2FibGVbU3ltYm9sRGlzcG9zZV0oKVxuICAgICAgICBvcmlnaW5hbENhbGxiYWNrLmFwcGx5KHN0cmVhbSwgYXJncylcbiAgICAgIH0pXG4gICAgfVxuICB9XG4gIHJldHVybiBjbGVhbnVwXG59XG5mdW5jdGlvbiBlb3NXZWIoc3RyZWFtLCBvcHRpb25zLCBjYWxsYmFjaykge1xuICBsZXQgaXNBYm9ydGVkID0gZmFsc2VcbiAgbGV0IGFib3J0ID0gbm9wXG4gIGlmIChvcHRpb25zLnNpZ25hbCkge1xuICAgIGFib3J0ID0gKCkgPT4ge1xuICAgICAgaXNBYm9ydGVkID0gdHJ1ZVxuICAgICAgY2FsbGJhY2suY2FsbChcbiAgICAgICAgc3RyZWFtLFxuICAgICAgICBuZXcgQWJvcnRFcnJvcih1bmRlZmluZWQsIHtcbiAgICAgICAgICBjYXVzZTogb3B0aW9ucy5zaWduYWwucmVhc29uXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgfVxuICAgIGlmIChvcHRpb25zLnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGFib3J0KVxuICAgIH0gZWxzZSB7XG4gICAgICBhZGRBYm9ydExpc3RlbmVyID0gYWRkQWJvcnRMaXN0ZW5lciB8fCByZXF1aXJlKCcuLi8uLi9vdXJzL3V0aWwnKS5hZGRBYm9ydExpc3RlbmVyXG4gICAgICBjb25zdCBkaXNwb3NhYmxlID0gYWRkQWJvcnRMaXN0ZW5lcihvcHRpb25zLnNpZ25hbCwgYWJvcnQpXG4gICAgICBjb25zdCBvcmlnaW5hbENhbGxiYWNrID0gY2FsbGJhY2tcbiAgICAgIGNhbGxiYWNrID0gb25jZSgoLi4uYXJncykgPT4ge1xuICAgICAgICBkaXNwb3NhYmxlW1N5bWJvbERpc3Bvc2VdKClcbiAgICAgICAgb3JpZ2luYWxDYWxsYmFjay5hcHBseShzdHJlYW0sIGFyZ3MpXG4gICAgICB9KVxuICAgIH1cbiAgfVxuICBjb25zdCByZXNvbHZlckZuID0gKC4uLmFyZ3MpID0+IHtcbiAgICBpZiAoIWlzQWJvcnRlZCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiBjYWxsYmFjay5hcHBseShzdHJlYW0sIGFyZ3MpKVxuICAgIH1cbiAgfVxuICBQcm9taXNlUHJvdG90eXBlVGhlbihzdHJlYW1ba0lzQ2xvc2VkUHJvbWlzZV0ucHJvbWlzZSwgcmVzb2x2ZXJGbiwgcmVzb2x2ZXJGbilcbiAgcmV0dXJuIG5vcFxufVxuZnVuY3Rpb24gZmluaXNoZWQoc3RyZWFtLCBvcHRzKSB7XG4gIHZhciBfb3B0c1xuICBsZXQgYXV0b0NsZWFudXAgPSBmYWxzZVxuICBpZiAob3B0cyA9PT0gbnVsbCkge1xuICAgIG9wdHMgPSBrRW1wdHlPYmplY3RcbiAgfVxuICBpZiAoKF9vcHRzID0gb3B0cykgIT09IG51bGwgJiYgX29wdHMgIT09IHVuZGVmaW5lZCAmJiBfb3B0cy5jbGVhbnVwKSB7XG4gICAgdmFsaWRhdGVCb29sZWFuKG9wdHMuY2xlYW51cCwgJ2NsZWFudXAnKVxuICAgIGF1dG9DbGVhbnVwID0gb3B0cy5jbGVhbnVwXG4gIH1cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBjbGVhbnVwID0gZW9zKHN0cmVhbSwgb3B0cywgKGVycikgPT4ge1xuICAgICAgaWYgKGF1dG9DbGVhbnVwKSB7XG4gICAgICAgIGNsZWFudXAoKVxuICAgICAgfVxuICAgICAgaWYgKGVycikge1xuICAgICAgICByZWplY3QoZXJyKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZSgpXG4gICAgICB9XG4gICAgfSlcbiAgfSlcbn1cbm1vZHVsZS5leHBvcnRzID0gZW9zXG5tb2R1bGUuZXhwb3J0cy5maW5pc2hlZCA9IGZpbmlzaGVkXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG4vKiByZXBsYWNlbWVudCBzdGFydCAqL1xuXG5jb25zdCBwcm9jZXNzID0gcmVxdWlyZSgncHJvY2Vzcy8nKVxuXG4vKiByZXBsYWNlbWVudCBlbmQgKi9cblxuY29uc3Qge1xuICBhZ2dyZWdhdGVUd29FcnJvcnMsXG4gIGNvZGVzOiB7IEVSUl9NVUxUSVBMRV9DQUxMQkFDSyB9LFxuICBBYm9ydEVycm9yXG59ID0gcmVxdWlyZSgnLi4vLi4vb3Vycy9lcnJvcnMnKVxuY29uc3QgeyBTeW1ib2wgfSA9IHJlcXVpcmUoJy4uLy4uL291cnMvcHJpbW9yZGlhbHMnKVxuY29uc3QgeyBrSXNEZXN0cm95ZWQsIGlzRGVzdHJveWVkLCBpc0ZpbmlzaGVkLCBpc1NlcnZlclJlcXVlc3QgfSA9IHJlcXVpcmUoJy4vdXRpbHMnKVxuY29uc3Qga0Rlc3Ryb3kgPSBTeW1ib2woJ2tEZXN0cm95JylcbmNvbnN0IGtDb25zdHJ1Y3QgPSBTeW1ib2woJ2tDb25zdHJ1Y3QnKVxuZnVuY3Rpb24gY2hlY2tFcnJvcihlcnIsIHcsIHIpIHtcbiAgaWYgKGVycikge1xuICAgIC8vIEF2b2lkIFY4IGxlYWssIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9wdWxsLzM0MTAzI2lzc3VlY29tbWVudC02NTIwMDIzNjRcbiAgICBlcnIuc3RhY2sgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcblxuICAgIGlmICh3ICYmICF3LmVycm9yZWQpIHtcbiAgICAgIHcuZXJyb3JlZCA9IGVyclxuICAgIH1cbiAgICBpZiAociAmJiAhci5lcnJvcmVkKSB7XG4gICAgICByLmVycm9yZWQgPSBlcnJcbiAgICB9XG4gIH1cbn1cblxuLy8gQmFja3dhcmRzIGNvbXBhdC4gY2IoKSBpcyB1bmRvY3VtZW50ZWQgYW5kIHVudXNlZCBpbiBjb3JlIGJ1dFxuLy8gdW5mb3J0dW5hdGVseSBtaWdodCBiZSB1c2VkIGJ5IG1vZHVsZXMuXG5mdW5jdGlvbiBkZXN0cm95KGVyciwgY2IpIHtcbiAgY29uc3QgciA9IHRoaXMuX3JlYWRhYmxlU3RhdGVcbiAgY29uc3QgdyA9IHRoaXMuX3dyaXRhYmxlU3RhdGVcbiAgLy8gV2l0aCBkdXBsZXggc3RyZWFtcyB3ZSB1c2UgdGhlIHdyaXRhYmxlIHNpZGUgZm9yIHN0YXRlLlxuICBjb25zdCBzID0gdyB8fCByXG4gIGlmICgodyAhPT0gbnVsbCAmJiB3ICE9PSB1bmRlZmluZWQgJiYgdy5kZXN0cm95ZWQpIHx8IChyICE9PSBudWxsICYmIHIgIT09IHVuZGVmaW5lZCAmJiByLmRlc3Ryb3llZCkpIHtcbiAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjYigpXG4gICAgfVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvLyBXZSBzZXQgZGVzdHJveWVkIHRvIHRydWUgYmVmb3JlIGZpcmluZyBlcnJvciBjYWxsYmFja3MgaW4gb3JkZXJcbiAgLy8gdG8gbWFrZSBpdCByZS1lbnRyYW5jZSBzYWZlIGluIGNhc2UgZGVzdHJveSgpIGlzIGNhbGxlZCB3aXRoaW4gY2FsbGJhY2tzXG4gIGNoZWNrRXJyb3IoZXJyLCB3LCByKVxuICBpZiAodykge1xuICAgIHcuZGVzdHJveWVkID0gdHJ1ZVxuICB9XG4gIGlmIChyKSB7XG4gICAgci5kZXN0cm95ZWQgPSB0cnVlXG4gIH1cblxuICAvLyBJZiBzdGlsbCBjb25zdHJ1Y3RpbmcgdGhlbiBkZWZlciBjYWxsaW5nIF9kZXN0cm95LlxuICBpZiAoIXMuY29uc3RydWN0ZWQpIHtcbiAgICB0aGlzLm9uY2Uoa0Rlc3Ryb3ksIGZ1bmN0aW9uIChlcikge1xuICAgICAgX2Rlc3Ryb3kodGhpcywgYWdncmVnYXRlVHdvRXJyb3JzKGVyLCBlcnIpLCBjYilcbiAgICB9KVxuICB9IGVsc2Uge1xuICAgIF9kZXN0cm95KHRoaXMsIGVyciwgY2IpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cbmZ1bmN0aW9uIF9kZXN0cm95KHNlbGYsIGVyciwgY2IpIHtcbiAgbGV0IGNhbGxlZCA9IGZhbHNlXG4gIGZ1bmN0aW9uIG9uRGVzdHJveShlcnIpIHtcbiAgICBpZiAoY2FsbGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY2FsbGVkID0gdHJ1ZVxuICAgIGNvbnN0IHIgPSBzZWxmLl9yZWFkYWJsZVN0YXRlXG4gICAgY29uc3QgdyA9IHNlbGYuX3dyaXRhYmxlU3RhdGVcbiAgICBjaGVja0Vycm9yKGVyciwgdywgcilcbiAgICBpZiAodykge1xuICAgICAgdy5jbG9zZWQgPSB0cnVlXG4gICAgfVxuICAgIGlmIChyKSB7XG4gICAgICByLmNsb3NlZCA9IHRydWVcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY2IoZXJyKVxuICAgIH1cbiAgICBpZiAoZXJyKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGVtaXRFcnJvckNsb3NlTlQsIHNlbGYsIGVycilcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhlbWl0Q2xvc2VOVCwgc2VsZilcbiAgICB9XG4gIH1cbiAgdHJ5IHtcbiAgICBzZWxmLl9kZXN0cm95KGVyciB8fCBudWxsLCBvbkRlc3Ryb3kpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIG9uRGVzdHJveShlcnIpXG4gIH1cbn1cbmZ1bmN0aW9uIGVtaXRFcnJvckNsb3NlTlQoc2VsZiwgZXJyKSB7XG4gIGVtaXRFcnJvck5UKHNlbGYsIGVycilcbiAgZW1pdENsb3NlTlQoc2VsZilcbn1cbmZ1bmN0aW9uIGVtaXRDbG9zZU5UKHNlbGYpIHtcbiAgY29uc3QgciA9IHNlbGYuX3JlYWRhYmxlU3RhdGVcbiAgY29uc3QgdyA9IHNlbGYuX3dyaXRhYmxlU3RhdGVcbiAgaWYgKHcpIHtcbiAgICB3LmNsb3NlRW1pdHRlZCA9IHRydWVcbiAgfVxuICBpZiAocikge1xuICAgIHIuY2xvc2VFbWl0dGVkID0gdHJ1ZVxuICB9XG4gIGlmICgodyAhPT0gbnVsbCAmJiB3ICE9PSB1bmRlZmluZWQgJiYgdy5lbWl0Q2xvc2UpIHx8IChyICE9PSBudWxsICYmIHIgIT09IHVuZGVmaW5lZCAmJiByLmVtaXRDbG9zZSkpIHtcbiAgICBzZWxmLmVtaXQoJ2Nsb3NlJylcbiAgfVxufVxuZnVuY3Rpb24gZW1pdEVycm9yTlQoc2VsZiwgZXJyKSB7XG4gIGNvbnN0IHIgPSBzZWxmLl9yZWFkYWJsZVN0YXRlXG4gIGNvbnN0IHcgPSBzZWxmLl93cml0YWJsZVN0YXRlXG4gIGlmICgodyAhPT0gbnVsbCAmJiB3ICE9PSB1bmRlZmluZWQgJiYgdy5lcnJvckVtaXR0ZWQpIHx8IChyICE9PSBudWxsICYmIHIgIT09IHVuZGVmaW5lZCAmJiByLmVycm9yRW1pdHRlZCkpIHtcbiAgICByZXR1cm5cbiAgfVxuICBpZiAodykge1xuICAgIHcuZXJyb3JFbWl0dGVkID0gdHJ1ZVxuICB9XG4gIGlmIChyKSB7XG4gICAgci5lcnJvckVtaXR0ZWQgPSB0cnVlXG4gIH1cbiAgc2VsZi5lbWl0KCdlcnJvcicsIGVycilcbn1cbmZ1bmN0aW9uIHVuZGVzdHJveSgpIHtcbiAgY29uc3QgciA9IHRoaXMuX3JlYWRhYmxlU3RhdGVcbiAgY29uc3QgdyA9IHRoaXMuX3dyaXRhYmxlU3RhdGVcbiAgaWYgKHIpIHtcbiAgICByLmNvbnN0cnVjdGVkID0gdHJ1ZVxuICAgIHIuY2xvc2VkID0gZmFsc2VcbiAgICByLmNsb3NlRW1pdHRlZCA9IGZhbHNlXG4gICAgci5kZXN0cm95ZWQgPSBmYWxzZVxuICAgIHIuZXJyb3JlZCA9IG51bGxcbiAgICByLmVycm9yRW1pdHRlZCA9IGZhbHNlXG4gICAgci5yZWFkaW5nID0gZmFsc2VcbiAgICByLmVuZGVkID0gci5yZWFkYWJsZSA9PT0gZmFsc2VcbiAgICByLmVuZEVtaXR0ZWQgPSByLnJlYWRhYmxlID09PSBmYWxzZVxuICB9XG4gIGlmICh3KSB7XG4gICAgdy5jb25zdHJ1Y3RlZCA9IHRydWVcbiAgICB3LmRlc3Ryb3llZCA9IGZhbHNlXG4gICAgdy5jbG9zZWQgPSBmYWxzZVxuICAgIHcuY2xvc2VFbWl0dGVkID0gZmFsc2VcbiAgICB3LmVycm9yZWQgPSBudWxsXG4gICAgdy5lcnJvckVtaXR0ZWQgPSBmYWxzZVxuICAgIHcuZmluYWxDYWxsZWQgPSBmYWxzZVxuICAgIHcucHJlZmluaXNoZWQgPSBmYWxzZVxuICAgIHcuZW5kZWQgPSB3LndyaXRhYmxlID09PSBmYWxzZVxuICAgIHcuZW5kaW5nID0gdy53cml0YWJsZSA9PT0gZmFsc2VcbiAgICB3LmZpbmlzaGVkID0gdy53cml0YWJsZSA9PT0gZmFsc2VcbiAgfVxufVxuZnVuY3Rpb24gZXJyb3JPckRlc3Ryb3koc3RyZWFtLCBlcnIsIHN5bmMpIHtcbiAgLy8gV2UgaGF2ZSB0ZXN0cyB0aGF0IHJlbHkgb24gZXJyb3JzIGJlaW5nIGVtaXR0ZWRcbiAgLy8gaW4gdGhlIHNhbWUgdGljaywgc28gY2hhbmdpbmcgdGhpcyBpcyBzZW12ZXIgbWFqb3IuXG4gIC8vIEZvciBub3cgd2hlbiB5b3Ugb3B0LWluIHRvIGF1dG9EZXN0cm95IHdlIGFsbG93XG4gIC8vIHRoZSBlcnJvciB0byBiZSBlbWl0dGVkIG5leHRUaWNrLiBJbiBhIGZ1dHVyZVxuICAvLyBzZW12ZXIgbWFqb3IgdXBkYXRlIHdlIHNob3VsZCBjaGFuZ2UgdGhlIGRlZmF1bHQgdG8gdGhpcy5cblxuICBjb25zdCByID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlXG4gIGNvbnN0IHcgPSBzdHJlYW0uX3dyaXRhYmxlU3RhdGVcbiAgaWYgKCh3ICE9PSBudWxsICYmIHcgIT09IHVuZGVmaW5lZCAmJiB3LmRlc3Ryb3llZCkgfHwgKHIgIT09IG51bGwgJiYgciAhPT0gdW5kZWZpbmVkICYmIHIuZGVzdHJveWVkKSkge1xuICAgIHJldHVybiB0aGlzXG4gIH1cbiAgaWYgKChyICE9PSBudWxsICYmIHIgIT09IHVuZGVmaW5lZCAmJiByLmF1dG9EZXN0cm95KSB8fCAodyAhPT0gbnVsbCAmJiB3ICE9PSB1bmRlZmluZWQgJiYgdy5hdXRvRGVzdHJveSkpXG4gICAgc3RyZWFtLmRlc3Ryb3koZXJyKVxuICBlbHNlIGlmIChlcnIpIHtcbiAgICAvLyBBdm9pZCBWOCBsZWFrLCBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvcHVsbC8zNDEwMyNpc3N1ZWNvbW1lbnQtNjUyMDAyMzY0XG4gICAgZXJyLnN0YWNrIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zXG5cbiAgICBpZiAodyAmJiAhdy5lcnJvcmVkKSB7XG4gICAgICB3LmVycm9yZWQgPSBlcnJcbiAgICB9XG4gICAgaWYgKHIgJiYgIXIuZXJyb3JlZCkge1xuICAgICAgci5lcnJvcmVkID0gZXJyXG4gICAgfVxuICAgIGlmIChzeW5jKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGVtaXRFcnJvck5ULCBzdHJlYW0sIGVycilcbiAgICB9IGVsc2Uge1xuICAgICAgZW1pdEVycm9yTlQoc3RyZWFtLCBlcnIpXG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBjb25zdHJ1Y3Qoc3RyZWFtLCBjYikge1xuICBpZiAodHlwZW9mIHN0cmVhbS5fY29uc3RydWN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgY29uc3QgciA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZVxuICBjb25zdCB3ID0gc3RyZWFtLl93cml0YWJsZVN0YXRlXG4gIGlmIChyKSB7XG4gICAgci5jb25zdHJ1Y3RlZCA9IGZhbHNlXG4gIH1cbiAgaWYgKHcpIHtcbiAgICB3LmNvbnN0cnVjdGVkID0gZmFsc2VcbiAgfVxuICBzdHJlYW0ub25jZShrQ29uc3RydWN0LCBjYilcbiAgaWYgKHN0cmVhbS5saXN0ZW5lckNvdW50KGtDb25zdHJ1Y3QpID4gMSkge1xuICAgIC8vIER1cGxleFxuICAgIHJldHVyblxuICB9XG4gIHByb2Nlc3MubmV4dFRpY2soY29uc3RydWN0TlQsIHN0cmVhbSlcbn1cbmZ1bmN0aW9uIGNvbnN0cnVjdE5UKHN0cmVhbSkge1xuICBsZXQgY2FsbGVkID0gZmFsc2VcbiAgZnVuY3Rpb24gb25Db25zdHJ1Y3QoZXJyKSB7XG4gICAgaWYgKGNhbGxlZCkge1xuICAgICAgZXJyb3JPckRlc3Ryb3koc3RyZWFtLCBlcnIgIT09IG51bGwgJiYgZXJyICE9PSB1bmRlZmluZWQgPyBlcnIgOiBuZXcgRVJSX01VTFRJUExFX0NBTExCQUNLKCkpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY2FsbGVkID0gdHJ1ZVxuICAgIGNvbnN0IHIgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGVcbiAgICBjb25zdCB3ID0gc3RyZWFtLl93cml0YWJsZVN0YXRlXG4gICAgY29uc3QgcyA9IHcgfHwgclxuICAgIGlmIChyKSB7XG4gICAgICByLmNvbnN0cnVjdGVkID0gdHJ1ZVxuICAgIH1cbiAgICBpZiAodykge1xuICAgICAgdy5jb25zdHJ1Y3RlZCA9IHRydWVcbiAgICB9XG4gICAgaWYgKHMuZGVzdHJveWVkKSB7XG4gICAgICBzdHJlYW0uZW1pdChrRGVzdHJveSwgZXJyKVxuICAgIH0gZWxzZSBpZiAoZXJyKSB7XG4gICAgICBlcnJvck9yRGVzdHJveShzdHJlYW0sIGVyciwgdHJ1ZSlcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhlbWl0Q29uc3RydWN0TlQsIHN0cmVhbSlcbiAgICB9XG4gIH1cbiAgdHJ5IHtcbiAgICBzdHJlYW0uX2NvbnN0cnVjdCgoZXJyKSA9PiB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKG9uQ29uc3RydWN0LCBlcnIpXG4gICAgfSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcHJvY2Vzcy5uZXh0VGljayhvbkNvbnN0cnVjdCwgZXJyKVxuICB9XG59XG5mdW5jdGlvbiBlbWl0Q29uc3RydWN0TlQoc3RyZWFtKSB7XG4gIHN0cmVhbS5lbWl0KGtDb25zdHJ1Y3QpXG59XG5mdW5jdGlvbiBpc1JlcXVlc3Qoc3RyZWFtKSB7XG4gIHJldHVybiAoc3RyZWFtID09PSBudWxsIHx8IHN0cmVhbSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogc3RyZWFtLnNldEhlYWRlcikgJiYgdHlwZW9mIHN0cmVhbS5hYm9ydCA9PT0gJ2Z1bmN0aW9uJ1xufVxuZnVuY3Rpb24gZW1pdENsb3NlTGVnYWN5KHN0cmVhbSkge1xuICBzdHJlYW0uZW1pdCgnY2xvc2UnKVxufVxuZnVuY3Rpb24gZW1pdEVycm9yQ2xvc2VMZWdhY3koc3RyZWFtLCBlcnIpIHtcbiAgc3RyZWFtLmVtaXQoJ2Vycm9yJywgZXJyKVxuICBwcm9jZXNzLm5leHRUaWNrKGVtaXRDbG9zZUxlZ2FjeSwgc3RyZWFtKVxufVxuXG4vLyBOb3JtYWxpemUgZGVzdHJveSBmb3IgbGVnYWN5LlxuZnVuY3Rpb24gZGVzdHJveWVyKHN0cmVhbSwgZXJyKSB7XG4gIGlmICghc3RyZWFtIHx8IGlzRGVzdHJveWVkKHN0cmVhbSkpIHtcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoIWVyciAmJiAhaXNGaW5pc2hlZChzdHJlYW0pKSB7XG4gICAgZXJyID0gbmV3IEFib3J0RXJyb3IoKVxuICB9XG5cbiAgLy8gVE9ETzogUmVtb3ZlIGlzUmVxdWVzdCBicmFuY2hlcy5cbiAgaWYgKGlzU2VydmVyUmVxdWVzdChzdHJlYW0pKSB7XG4gICAgc3RyZWFtLnNvY2tldCA9IG51bGxcbiAgICBzdHJlYW0uZGVzdHJveShlcnIpXG4gIH0gZWxzZSBpZiAoaXNSZXF1ZXN0KHN0cmVhbSkpIHtcbiAgICBzdHJlYW0uYWJvcnQoKVxuICB9IGVsc2UgaWYgKGlzUmVxdWVzdChzdHJlYW0ucmVxKSkge1xuICAgIHN0cmVhbS5yZXEuYWJvcnQoKVxuICB9IGVsc2UgaWYgKHR5cGVvZiBzdHJlYW0uZGVzdHJveSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHN0cmVhbS5kZXN0cm95KGVycilcbiAgfSBlbHNlIGlmICh0eXBlb2Ygc3RyZWFtLmNsb3NlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gVE9ETzogRG9uJ3QgbG9zZSBlcnI/XG4gICAgc3RyZWFtLmNsb3NlKClcbiAgfSBlbHNlIGlmIChlcnIpIHtcbiAgICBwcm9jZXNzLm5leHRUaWNrKGVtaXRFcnJvckNsb3NlTGVnYWN5LCBzdHJlYW0sIGVycilcbiAgfSBlbHNlIHtcbiAgICBwcm9jZXNzLm5leHRUaWNrKGVtaXRDbG9zZUxlZ2FjeSwgc3RyZWFtKVxuICB9XG4gIGlmICghc3RyZWFtLmRlc3Ryb3llZCkge1xuICAgIHN0cmVhbVtrSXNEZXN0cm95ZWRdID0gdHJ1ZVxuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgY29uc3RydWN0LFxuICBkZXN0cm95ZXIsXG4gIGRlc3Ryb3ksXG4gIHVuZGVzdHJveSxcbiAgZXJyb3JPckRlc3Ryb3lcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgQXJyYXlJc0FycmF5LCBPYmplY3RTZXRQcm90b3R5cGVPZiB9ID0gcmVxdWlyZSgnLi4vLi4vb3Vycy9wcmltb3JkaWFscycpXG5jb25zdCB7IEV2ZW50RW1pdHRlcjogRUUgfSA9IHJlcXVpcmUoJ2V2ZW50cycpXG5mdW5jdGlvbiBTdHJlYW0ob3B0cykge1xuICBFRS5jYWxsKHRoaXMsIG9wdHMpXG59XG5PYmplY3RTZXRQcm90b3R5cGVPZihTdHJlYW0ucHJvdG90eXBlLCBFRS5wcm90b3R5cGUpXG5PYmplY3RTZXRQcm90b3R5cGVPZihTdHJlYW0sIEVFKVxuU3RyZWFtLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24gKGRlc3QsIG9wdGlvbnMpIHtcbiAgY29uc3Qgc291cmNlID0gdGhpc1xuICBmdW5jdGlvbiBvbmRhdGEoY2h1bmspIHtcbiAgICBpZiAoZGVzdC53cml0YWJsZSAmJiBkZXN0LndyaXRlKGNodW5rKSA9PT0gZmFsc2UgJiYgc291cmNlLnBhdXNlKSB7XG4gICAgICBzb3VyY2UucGF1c2UoKVxuICAgIH1cbiAgfVxuICBzb3VyY2Uub24oJ2RhdGEnLCBvbmRhdGEpXG4gIGZ1bmN0aW9uIG9uZHJhaW4oKSB7XG4gICAgaWYgKHNvdXJjZS5yZWFkYWJsZSAmJiBzb3VyY2UucmVzdW1lKSB7XG4gICAgICBzb3VyY2UucmVzdW1lKClcbiAgICB9XG4gIH1cbiAgZGVzdC5vbignZHJhaW4nLCBvbmRyYWluKVxuXG4gIC8vIElmIHRoZSAnZW5kJyBvcHRpb24gaXMgbm90IHN1cHBsaWVkLCBkZXN0LmVuZCgpIHdpbGwgYmUgY2FsbGVkIHdoZW5cbiAgLy8gc291cmNlIGdldHMgdGhlICdlbmQnIG9yICdjbG9zZScgZXZlbnRzLiAgT25seSBkZXN0LmVuZCgpIG9uY2UuXG4gIGlmICghZGVzdC5faXNTdGRpbyAmJiAoIW9wdGlvbnMgfHwgb3B0aW9ucy5lbmQgIT09IGZhbHNlKSkge1xuICAgIHNvdXJjZS5vbignZW5kJywgb25lbmQpXG4gICAgc291cmNlLm9uKCdjbG9zZScsIG9uY2xvc2UpXG4gIH1cbiAgbGV0IGRpZE9uRW5kID0gZmFsc2VcbiAgZnVuY3Rpb24gb25lbmQoKSB7XG4gICAgaWYgKGRpZE9uRW5kKSByZXR1cm5cbiAgICBkaWRPbkVuZCA9IHRydWVcbiAgICBkZXN0LmVuZCgpXG4gIH1cbiAgZnVuY3Rpb24gb25jbG9zZSgpIHtcbiAgICBpZiAoZGlkT25FbmQpIHJldHVyblxuICAgIGRpZE9uRW5kID0gdHJ1ZVxuICAgIGlmICh0eXBlb2YgZGVzdC5kZXN0cm95ID09PSAnZnVuY3Rpb24nKSBkZXN0LmRlc3Ryb3koKVxuICB9XG5cbiAgLy8gRG9uJ3QgbGVhdmUgZGFuZ2xpbmcgcGlwZXMgd2hlbiB0aGVyZSBhcmUgZXJyb3JzLlxuICBmdW5jdGlvbiBvbmVycm9yKGVyKSB7XG4gICAgY2xlYW51cCgpXG4gICAgaWYgKEVFLmxpc3RlbmVyQ291bnQodGhpcywgJ2Vycm9yJykgPT09IDApIHtcbiAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCBlcilcbiAgICB9XG4gIH1cbiAgcHJlcGVuZExpc3RlbmVyKHNvdXJjZSwgJ2Vycm9yJywgb25lcnJvcilcbiAgcHJlcGVuZExpc3RlbmVyKGRlc3QsICdlcnJvcicsIG9uZXJyb3IpXG5cbiAgLy8gUmVtb3ZlIGFsbCB0aGUgZXZlbnQgbGlzdGVuZXJzIHRoYXQgd2VyZSBhZGRlZC5cbiAgZnVuY3Rpb24gY2xlYW51cCgpIHtcbiAgICBzb3VyY2UucmVtb3ZlTGlzdGVuZXIoJ2RhdGEnLCBvbmRhdGEpXG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZHJhaW4nLCBvbmRyYWluKVxuICAgIHNvdXJjZS5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25lbmQpXG4gICAgc291cmNlLnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uY2xvc2UpXG4gICAgc291cmNlLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uZXJyb3IpXG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbmVycm9yKVxuICAgIHNvdXJjZS5yZW1vdmVMaXN0ZW5lcignZW5kJywgY2xlYW51cClcbiAgICBzb3VyY2UucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgY2xlYW51cClcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIGNsZWFudXApXG4gIH1cbiAgc291cmNlLm9uKCdlbmQnLCBjbGVhbnVwKVxuICBzb3VyY2Uub24oJ2Nsb3NlJywgY2xlYW51cClcbiAgZGVzdC5vbignY2xvc2UnLCBjbGVhbnVwKVxuICBkZXN0LmVtaXQoJ3BpcGUnLCBzb3VyY2UpXG5cbiAgLy8gQWxsb3cgZm9yIHVuaXgtbGlrZSB1c2FnZTogQS5waXBlKEIpLnBpcGUoQylcbiAgcmV0dXJuIGRlc3Rcbn1cbmZ1bmN0aW9uIHByZXBlbmRMaXN0ZW5lcihlbWl0dGVyLCBldmVudCwgZm4pIHtcbiAgLy8gU2FkbHkgdGhpcyBpcyBub3QgY2FjaGVhYmxlIGFzIHNvbWUgbGlicmFyaWVzIGJ1bmRsZSB0aGVpciBvd25cbiAgLy8gZXZlbnQgZW1pdHRlciBpbXBsZW1lbnRhdGlvbiB3aXRoIHRoZW0uXG4gIGlmICh0eXBlb2YgZW1pdHRlci5wcmVwZW5kTGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHJldHVybiBlbWl0dGVyLnByZXBlbmRMaXN0ZW5lcihldmVudCwgZm4pXG5cbiAgLy8gVGhpcyBpcyBhIGhhY2sgdG8gbWFrZSBzdXJlIHRoYXQgb3VyIGVycm9yIGhhbmRsZXIgaXMgYXR0YWNoZWQgYmVmb3JlIGFueVxuICAvLyB1c2VybGFuZCBvbmVzLiAgTkVWRVIgRE8gVEhJUy4gVGhpcyBpcyBoZXJlIG9ubHkgYmVjYXVzZSB0aGlzIGNvZGUgbmVlZHNcbiAgLy8gdG8gY29udGludWUgdG8gd29yayB3aXRoIG9sZGVyIHZlcnNpb25zIG9mIE5vZGUuanMgdGhhdCBkbyBub3QgaW5jbHVkZVxuICAvLyB0aGUgcHJlcGVuZExpc3RlbmVyKCkgbWV0aG9kLiBUaGUgZ29hbCBpcyB0byBldmVudHVhbGx5IHJlbW92ZSB0aGlzIGhhY2suXG4gIGlmICghZW1pdHRlci5fZXZlbnRzIHx8ICFlbWl0dGVyLl9ldmVudHNbZXZlbnRdKSBlbWl0dGVyLm9uKGV2ZW50LCBmbilcbiAgZWxzZSBpZiAoQXJyYXlJc0FycmF5KGVtaXR0ZXIuX2V2ZW50c1tldmVudF0pKSBlbWl0dGVyLl9ldmVudHNbZXZlbnRdLnVuc2hpZnQoZm4pXG4gIGVsc2UgZW1pdHRlci5fZXZlbnRzW2V2ZW50XSA9IFtmbiwgZW1pdHRlci5fZXZlbnRzW2V2ZW50XV1cbn1cbm1vZHVsZS5leHBvcnRzID0ge1xuICBTdHJlYW0sXG4gIHByZXBlbmRMaXN0ZW5lclxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBTeW1ib2xEaXNwb3NlIH0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL3ByaW1vcmRpYWxzJylcbmNvbnN0IHsgQWJvcnRFcnJvciwgY29kZXMgfSA9IHJlcXVpcmUoJy4uLy4uL291cnMvZXJyb3JzJylcbmNvbnN0IHsgaXNOb2RlU3RyZWFtLCBpc1dlYlN0cmVhbSwga0NvbnRyb2xsZXJFcnJvckZ1bmN0aW9uIH0gPSByZXF1aXJlKCcuL3V0aWxzJylcbmNvbnN0IGVvcyA9IHJlcXVpcmUoJy4vZW5kLW9mLXN0cmVhbScpXG5jb25zdCB7IEVSUl9JTlZBTElEX0FSR19UWVBFIH0gPSBjb2Rlc1xubGV0IGFkZEFib3J0TGlzdGVuZXJcblxuLy8gVGhpcyBtZXRob2QgaXMgaW5saW5lZCBoZXJlIGZvciByZWFkYWJsZS1zdHJlYW1cbi8vIEl0IGFsc28gZG9lcyBub3QgYWxsb3cgZm9yIHNpZ25hbCB0byBub3QgZXhpc3Qgb24gdGhlIHN0cmVhbVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvMzYwNjEjZGlzY3Vzc2lvbl9yNTMzNzE4MDI5XG5jb25zdCB2YWxpZGF0ZUFib3J0U2lnbmFsID0gKHNpZ25hbCwgbmFtZSkgPT4ge1xuICBpZiAodHlwZW9mIHNpZ25hbCAhPT0gJ29iamVjdCcgfHwgISgnYWJvcnRlZCcgaW4gc2lnbmFsKSkge1xuICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRShuYW1lLCAnQWJvcnRTaWduYWwnLCBzaWduYWwpXG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzLmFkZEFib3J0U2lnbmFsID0gZnVuY3Rpb24gYWRkQWJvcnRTaWduYWwoc2lnbmFsLCBzdHJlYW0pIHtcbiAgdmFsaWRhdGVBYm9ydFNpZ25hbChzaWduYWwsICdzaWduYWwnKVxuICBpZiAoIWlzTm9kZVN0cmVhbShzdHJlYW0pICYmICFpc1dlYlN0cmVhbShzdHJlYW0pKSB7XG4gICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKCdzdHJlYW0nLCBbJ1JlYWRhYmxlU3RyZWFtJywgJ1dyaXRhYmxlU3RyZWFtJywgJ1N0cmVhbSddLCBzdHJlYW0pXG4gIH1cbiAgcmV0dXJuIG1vZHVsZS5leHBvcnRzLmFkZEFib3J0U2lnbmFsTm9WYWxpZGF0ZShzaWduYWwsIHN0cmVhbSlcbn1cbm1vZHVsZS5leHBvcnRzLmFkZEFib3J0U2lnbmFsTm9WYWxpZGF0ZSA9IGZ1bmN0aW9uIChzaWduYWwsIHN0cmVhbSkge1xuICBpZiAodHlwZW9mIHNpZ25hbCAhPT0gJ29iamVjdCcgfHwgISgnYWJvcnRlZCcgaW4gc2lnbmFsKSkge1xuICAgIHJldHVybiBzdHJlYW1cbiAgfVxuICBjb25zdCBvbkFib3J0ID0gaXNOb2RlU3RyZWFtKHN0cmVhbSlcbiAgICA/ICgpID0+IHtcbiAgICAgICAgc3RyZWFtLmRlc3Ryb3koXG4gICAgICAgICAgbmV3IEFib3J0RXJyb3IodW5kZWZpbmVkLCB7XG4gICAgICAgICAgICBjYXVzZTogc2lnbmFsLnJlYXNvblxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIH1cbiAgICA6ICgpID0+IHtcbiAgICAgICAgc3RyZWFtW2tDb250cm9sbGVyRXJyb3JGdW5jdGlvbl0oXG4gICAgICAgICAgbmV3IEFib3J0RXJyb3IodW5kZWZpbmVkLCB7XG4gICAgICAgICAgICBjYXVzZTogc2lnbmFsLnJlYXNvblxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIH1cbiAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgb25BYm9ydCgpXG4gIH0gZWxzZSB7XG4gICAgYWRkQWJvcnRMaXN0ZW5lciA9IGFkZEFib3J0TGlzdGVuZXIgfHwgcmVxdWlyZSgnLi4vLi4vb3Vycy91dGlsJykuYWRkQWJvcnRMaXN0ZW5lclxuICAgIGNvbnN0IGRpc3Bvc2FibGUgPSBhZGRBYm9ydExpc3RlbmVyKHNpZ25hbCwgb25BYm9ydClcbiAgICBlb3Moc3RyZWFtLCBkaXNwb3NhYmxlW1N5bWJvbERpc3Bvc2VdKVxuICB9XG4gIHJldHVybiBzdHJlYW1cbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgU3RyaW5nUHJvdG90eXBlU2xpY2UsIFN5bWJvbEl0ZXJhdG9yLCBUeXBlZEFycmF5UHJvdG90eXBlU2V0LCBVaW50OEFycmF5IH0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL3ByaW1vcmRpYWxzJylcbmNvbnN0IHsgQnVmZmVyIH0gPSByZXF1aXJlKCdidWZmZXInKVxuY29uc3QgeyBpbnNwZWN0IH0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL3V0aWwnKVxubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBCdWZmZXJMaXN0IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5oZWFkID0gbnVsbFxuICAgIHRoaXMudGFpbCA9IG51bGxcbiAgICB0aGlzLmxlbmd0aCA9IDBcbiAgfVxuICBwdXNoKHYpIHtcbiAgICBjb25zdCBlbnRyeSA9IHtcbiAgICAgIGRhdGE6IHYsXG4gICAgICBuZXh0OiBudWxsXG4gICAgfVxuICAgIGlmICh0aGlzLmxlbmd0aCA+IDApIHRoaXMudGFpbC5uZXh0ID0gZW50cnlcbiAgICBlbHNlIHRoaXMuaGVhZCA9IGVudHJ5XG4gICAgdGhpcy50YWlsID0gZW50cnlcbiAgICArK3RoaXMubGVuZ3RoXG4gIH1cbiAgdW5zaGlmdCh2KSB7XG4gICAgY29uc3QgZW50cnkgPSB7XG4gICAgICBkYXRhOiB2LFxuICAgICAgbmV4dDogdGhpcy5oZWFkXG4gICAgfVxuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkgdGhpcy50YWlsID0gZW50cnlcbiAgICB0aGlzLmhlYWQgPSBlbnRyeVxuICAgICsrdGhpcy5sZW5ndGhcbiAgfVxuICBzaGlmdCgpIHtcbiAgICBpZiAodGhpcy5sZW5ndGggPT09IDApIHJldHVyblxuICAgIGNvbnN0IHJldCA9IHRoaXMuaGVhZC5kYXRhXG4gICAgaWYgKHRoaXMubGVuZ3RoID09PSAxKSB0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBudWxsXG4gICAgZWxzZSB0aGlzLmhlYWQgPSB0aGlzLmhlYWQubmV4dFxuICAgIC0tdGhpcy5sZW5ndGhcbiAgICByZXR1cm4gcmV0XG4gIH1cbiAgY2xlYXIoKSB7XG4gICAgdGhpcy5oZWFkID0gdGhpcy50YWlsID0gbnVsbFxuICAgIHRoaXMubGVuZ3RoID0gMFxuICB9XG4gIGpvaW4ocykge1xuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuICcnXG4gICAgbGV0IHAgPSB0aGlzLmhlYWRcbiAgICBsZXQgcmV0ID0gJycgKyBwLmRhdGFcbiAgICB3aGlsZSAoKHAgPSBwLm5leHQpICE9PSBudWxsKSByZXQgKz0gcyArIHAuZGF0YVxuICAgIHJldHVybiByZXRcbiAgfVxuICBjb25jYXQobikge1xuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIEJ1ZmZlci5hbGxvYygwKVxuICAgIGNvbnN0IHJldCA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShuID4+PiAwKVxuICAgIGxldCBwID0gdGhpcy5oZWFkXG4gICAgbGV0IGkgPSAwXG4gICAgd2hpbGUgKHApIHtcbiAgICAgIFR5cGVkQXJyYXlQcm90b3R5cGVTZXQocmV0LCBwLmRhdGEsIGkpXG4gICAgICBpICs9IHAuZGF0YS5sZW5ndGhcbiAgICAgIHAgPSBwLm5leHRcbiAgICB9XG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgLy8gQ29uc3VtZXMgYSBzcGVjaWZpZWQgYW1vdW50IG9mIGJ5dGVzIG9yIGNoYXJhY3RlcnMgZnJvbSB0aGUgYnVmZmVyZWQgZGF0YS5cbiAgY29uc3VtZShuLCBoYXNTdHJpbmdzKSB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuaGVhZC5kYXRhXG4gICAgaWYgKG4gPCBkYXRhLmxlbmd0aCkge1xuICAgICAgLy8gYHNsaWNlYCBpcyB0aGUgc2FtZSBmb3IgYnVmZmVycyBhbmQgc3RyaW5ncy5cbiAgICAgIGNvbnN0IHNsaWNlID0gZGF0YS5zbGljZSgwLCBuKVxuICAgICAgdGhpcy5oZWFkLmRhdGEgPSBkYXRhLnNsaWNlKG4pXG4gICAgICByZXR1cm4gc2xpY2VcbiAgICB9XG4gICAgaWYgKG4gPT09IGRhdGEubGVuZ3RoKSB7XG4gICAgICAvLyBGaXJzdCBjaHVuayBpcyBhIHBlcmZlY3QgbWF0Y2guXG4gICAgICByZXR1cm4gdGhpcy5zaGlmdCgpXG4gICAgfVxuICAgIC8vIFJlc3VsdCBzcGFucyBtb3JlIHRoYW4gb25lIGJ1ZmZlci5cbiAgICByZXR1cm4gaGFzU3RyaW5ncyA/IHRoaXMuX2dldFN0cmluZyhuKSA6IHRoaXMuX2dldEJ1ZmZlcihuKVxuICB9XG4gIGZpcnN0KCkge1xuICAgIHJldHVybiB0aGlzLmhlYWQuZGF0YVxuICB9XG4gICpbU3ltYm9sSXRlcmF0b3JdKCkge1xuICAgIGZvciAobGV0IHAgPSB0aGlzLmhlYWQ7IHA7IHAgPSBwLm5leHQpIHtcbiAgICAgIHlpZWxkIHAuZGF0YVxuICAgIH1cbiAgfVxuXG4gIC8vIENvbnN1bWVzIGEgc3BlY2lmaWVkIGFtb3VudCBvZiBjaGFyYWN0ZXJzIGZyb20gdGhlIGJ1ZmZlcmVkIGRhdGEuXG4gIF9nZXRTdHJpbmcobikge1xuICAgIGxldCByZXQgPSAnJ1xuICAgIGxldCBwID0gdGhpcy5oZWFkXG4gICAgbGV0IGMgPSAwXG4gICAgZG8ge1xuICAgICAgY29uc3Qgc3RyID0gcC5kYXRhXG4gICAgICBpZiAobiA+IHN0ci5sZW5ndGgpIHtcbiAgICAgICAgcmV0ICs9IHN0clxuICAgICAgICBuIC09IHN0ci5sZW5ndGhcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChuID09PSBzdHIubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0ICs9IHN0clxuICAgICAgICAgICsrY1xuICAgICAgICAgIGlmIChwLm5leHQpIHRoaXMuaGVhZCA9IHAubmV4dFxuICAgICAgICAgIGVsc2UgdGhpcy5oZWFkID0gdGhpcy50YWlsID0gbnVsbFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldCArPSBTdHJpbmdQcm90b3R5cGVTbGljZShzdHIsIDAsIG4pXG4gICAgICAgICAgdGhpcy5oZWFkID0gcFxuICAgICAgICAgIHAuZGF0YSA9IFN0cmluZ1Byb3RvdHlwZVNsaWNlKHN0ciwgbilcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgKytjXG4gICAgfSB3aGlsZSAoKHAgPSBwLm5leHQpICE9PSBudWxsKVxuICAgIHRoaXMubGVuZ3RoIC09IGNcbiAgICByZXR1cm4gcmV0XG4gIH1cblxuICAvLyBDb25zdW1lcyBhIHNwZWNpZmllZCBhbW91bnQgb2YgYnl0ZXMgZnJvbSB0aGUgYnVmZmVyZWQgZGF0YS5cbiAgX2dldEJ1ZmZlcihuKSB7XG4gICAgY29uc3QgcmV0ID0gQnVmZmVyLmFsbG9jVW5zYWZlKG4pXG4gICAgY29uc3QgcmV0TGVuID0gblxuICAgIGxldCBwID0gdGhpcy5oZWFkXG4gICAgbGV0IGMgPSAwXG4gICAgZG8ge1xuICAgICAgY29uc3QgYnVmID0gcC5kYXRhXG4gICAgICBpZiAobiA+IGJ1Zi5sZW5ndGgpIHtcbiAgICAgICAgVHlwZWRBcnJheVByb3RvdHlwZVNldChyZXQsIGJ1ZiwgcmV0TGVuIC0gbilcbiAgICAgICAgbiAtPSBidWYubGVuZ3RoXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAobiA9PT0gYnVmLmxlbmd0aCkge1xuICAgICAgICAgIFR5cGVkQXJyYXlQcm90b3R5cGVTZXQocmV0LCBidWYsIHJldExlbiAtIG4pXG4gICAgICAgICAgKytjXG4gICAgICAgICAgaWYgKHAubmV4dCkgdGhpcy5oZWFkID0gcC5uZXh0XG4gICAgICAgICAgZWxzZSB0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBudWxsXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgVHlwZWRBcnJheVByb3RvdHlwZVNldChyZXQsIG5ldyBVaW50OEFycmF5KGJ1Zi5idWZmZXIsIGJ1Zi5ieXRlT2Zmc2V0LCBuKSwgcmV0TGVuIC0gbilcbiAgICAgICAgICB0aGlzLmhlYWQgPSBwXG4gICAgICAgICAgcC5kYXRhID0gYnVmLnNsaWNlKG4pXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgICsrY1xuICAgIH0gd2hpbGUgKChwID0gcC5uZXh0KSAhPT0gbnVsbClcbiAgICB0aGlzLmxlbmd0aCAtPSBjXG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgLy8gTWFrZSBzdXJlIHRoZSBsaW5rZWQgbGlzdCBvbmx5IHNob3dzIHRoZSBtaW5pbWFsIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbi5cbiAgW1N5bWJvbC5mb3IoJ25vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tJyldKF8sIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gaW5zcGVjdCh0aGlzLCB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgLy8gT25seSBpbnNwZWN0IG9uZSBsZXZlbC5cbiAgICAgIGRlcHRoOiAwLFxuICAgICAgLy8gSXQgc2hvdWxkIG5vdCByZWN1cnNlLlxuICAgICAgY3VzdG9tSW5zcGVjdDogZmFsc2VcbiAgICB9KVxuICB9XG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IE1hdGhGbG9vciwgTnVtYmVySXNJbnRlZ2VyIH0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL3ByaW1vcmRpYWxzJylcbmNvbnN0IHsgdmFsaWRhdGVJbnRlZ2VyIH0gPSByZXF1aXJlKCcuLi92YWxpZGF0b3JzJylcbmNvbnN0IHsgRVJSX0lOVkFMSURfQVJHX1ZBTFVFIH0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL2Vycm9ycycpLmNvZGVzXG5sZXQgZGVmYXVsdEhpZ2hXYXRlck1hcmtCeXRlcyA9IDE2ICogMTAyNFxubGV0IGRlZmF1bHRIaWdoV2F0ZXJNYXJrT2JqZWN0TW9kZSA9IDE2XG5mdW5jdGlvbiBoaWdoV2F0ZXJNYXJrRnJvbShvcHRpb25zLCBpc0R1cGxleCwgZHVwbGV4S2V5KSB7XG4gIHJldHVybiBvcHRpb25zLmhpZ2hXYXRlck1hcmsgIT0gbnVsbCA/IG9wdGlvbnMuaGlnaFdhdGVyTWFyayA6IGlzRHVwbGV4ID8gb3B0aW9uc1tkdXBsZXhLZXldIDogbnVsbFxufVxuZnVuY3Rpb24gZ2V0RGVmYXVsdEhpZ2hXYXRlck1hcmsob2JqZWN0TW9kZSkge1xuICByZXR1cm4gb2JqZWN0TW9kZSA/IGRlZmF1bHRIaWdoV2F0ZXJNYXJrT2JqZWN0TW9kZSA6IGRlZmF1bHRIaWdoV2F0ZXJNYXJrQnl0ZXNcbn1cbmZ1bmN0aW9uIHNldERlZmF1bHRIaWdoV2F0ZXJNYXJrKG9iamVjdE1vZGUsIHZhbHVlKSB7XG4gIHZhbGlkYXRlSW50ZWdlcih2YWx1ZSwgJ3ZhbHVlJywgMClcbiAgaWYgKG9iamVjdE1vZGUpIHtcbiAgICBkZWZhdWx0SGlnaFdhdGVyTWFya09iamVjdE1vZGUgPSB2YWx1ZVxuICB9IGVsc2Uge1xuICAgIGRlZmF1bHRIaWdoV2F0ZXJNYXJrQnl0ZXMgPSB2YWx1ZVxuICB9XG59XG5mdW5jdGlvbiBnZXRIaWdoV2F0ZXJNYXJrKHN0YXRlLCBvcHRpb25zLCBkdXBsZXhLZXksIGlzRHVwbGV4KSB7XG4gIGNvbnN0IGh3bSA9IGhpZ2hXYXRlck1hcmtGcm9tKG9wdGlvbnMsIGlzRHVwbGV4LCBkdXBsZXhLZXkpXG4gIGlmIChod20gIT0gbnVsbCkge1xuICAgIGlmICghTnVtYmVySXNJbnRlZ2VyKGh3bSkgfHwgaHdtIDwgMCkge1xuICAgICAgY29uc3QgbmFtZSA9IGlzRHVwbGV4ID8gYG9wdGlvbnMuJHtkdXBsZXhLZXl9YCA6ICdvcHRpb25zLmhpZ2hXYXRlck1hcmsnXG4gICAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1ZBTFVFKG5hbWUsIGh3bSlcbiAgICB9XG4gICAgcmV0dXJuIE1hdGhGbG9vcihod20pXG4gIH1cblxuICAvLyBEZWZhdWx0IHZhbHVlXG4gIHJldHVybiBnZXREZWZhdWx0SGlnaFdhdGVyTWFyayhzdGF0ZS5vYmplY3RNb2RlKVxufVxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldEhpZ2hXYXRlck1hcmssXG4gIGdldERlZmF1bHRIaWdoV2F0ZXJNYXJrLFxuICBzZXREZWZhdWx0SGlnaFdhdGVyTWFya1xufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuLyogcmVwbGFjZW1lbnQgc3RhcnQgKi9cblxuY29uc3QgcHJvY2VzcyA9IHJlcXVpcmUoJ3Byb2Nlc3MvJylcblxuLyogcmVwbGFjZW1lbnQgZW5kICovXG5cbmNvbnN0IHsgUHJvbWlzZVByb3RvdHlwZVRoZW4sIFN5bWJvbEFzeW5jSXRlcmF0b3IsIFN5bWJvbEl0ZXJhdG9yIH0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL3ByaW1vcmRpYWxzJylcbmNvbnN0IHsgQnVmZmVyIH0gPSByZXF1aXJlKCdidWZmZXInKVxuY29uc3QgeyBFUlJfSU5WQUxJRF9BUkdfVFlQRSwgRVJSX1NUUkVBTV9OVUxMX1ZBTFVFUyB9ID0gcmVxdWlyZSgnLi4vLi4vb3Vycy9lcnJvcnMnKS5jb2Rlc1xuZnVuY3Rpb24gZnJvbShSZWFkYWJsZSwgaXRlcmFibGUsIG9wdHMpIHtcbiAgbGV0IGl0ZXJhdG9yXG4gIGlmICh0eXBlb2YgaXRlcmFibGUgPT09ICdzdHJpbmcnIHx8IGl0ZXJhYmxlIGluc3RhbmNlb2YgQnVmZmVyKSB7XG4gICAgcmV0dXJuIG5ldyBSZWFkYWJsZSh7XG4gICAgICBvYmplY3RNb2RlOiB0cnVlLFxuICAgICAgLi4ub3B0cyxcbiAgICAgIHJlYWQoKSB7XG4gICAgICAgIHRoaXMucHVzaChpdGVyYWJsZSlcbiAgICAgICAgdGhpcy5wdXNoKG51bGwpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuICBsZXQgaXNBc3luY1xuICBpZiAoaXRlcmFibGUgJiYgaXRlcmFibGVbU3ltYm9sQXN5bmNJdGVyYXRvcl0pIHtcbiAgICBpc0FzeW5jID0gdHJ1ZVxuICAgIGl0ZXJhdG9yID0gaXRlcmFibGVbU3ltYm9sQXN5bmNJdGVyYXRvcl0oKVxuICB9IGVsc2UgaWYgKGl0ZXJhYmxlICYmIGl0ZXJhYmxlW1N5bWJvbEl0ZXJhdG9yXSkge1xuICAgIGlzQXN5bmMgPSBmYWxzZVxuICAgIGl0ZXJhdG9yID0gaXRlcmFibGVbU3ltYm9sSXRlcmF0b3JdKClcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoJ2l0ZXJhYmxlJywgWydJdGVyYWJsZSddLCBpdGVyYWJsZSlcbiAgfVxuICBjb25zdCByZWFkYWJsZSA9IG5ldyBSZWFkYWJsZSh7XG4gICAgb2JqZWN0TW9kZTogdHJ1ZSxcbiAgICBoaWdoV2F0ZXJNYXJrOiAxLFxuICAgIC8vIFRPRE8ocm9uYWcpOiBXaGF0IG9wdGlvbnMgc2hvdWxkIGJlIGFsbG93ZWQ/XG4gICAgLi4ub3B0c1xuICB9KVxuXG4gIC8vIEZsYWcgdG8gcHJvdGVjdCBhZ2FpbnN0IF9yZWFkXG4gIC8vIGJlaW5nIGNhbGxlZCBiZWZvcmUgbGFzdCBpdGVyYXRpb24gY29tcGxldGlvbi5cbiAgbGV0IHJlYWRpbmcgPSBmYWxzZVxuICByZWFkYWJsZS5fcmVhZCA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXJlYWRpbmcpIHtcbiAgICAgIHJlYWRpbmcgPSB0cnVlXG4gICAgICBuZXh0KClcbiAgICB9XG4gIH1cbiAgcmVhZGFibGUuX2Rlc3Ryb3kgPSBmdW5jdGlvbiAoZXJyb3IsIGNiKSB7XG4gICAgUHJvbWlzZVByb3RvdHlwZVRoZW4oXG4gICAgICBjbG9zZShlcnJvciksXG4gICAgICAoKSA9PiBwcm9jZXNzLm5leHRUaWNrKGNiLCBlcnJvciksXG4gICAgICAvLyBuZXh0VGljayBpcyBoZXJlIGluIGNhc2UgY2IgdGhyb3dzXG4gICAgICAoZSkgPT4gcHJvY2Vzcy5uZXh0VGljayhjYiwgZSB8fCBlcnJvcilcbiAgICApXG4gIH1cbiAgYXN5bmMgZnVuY3Rpb24gY2xvc2UoZXJyb3IpIHtcbiAgICBjb25zdCBoYWRFcnJvciA9IGVycm9yICE9PSB1bmRlZmluZWQgJiYgZXJyb3IgIT09IG51bGxcbiAgICBjb25zdCBoYXNUaHJvdyA9IHR5cGVvZiBpdGVyYXRvci50aHJvdyA9PT0gJ2Z1bmN0aW9uJ1xuICAgIGlmIChoYWRFcnJvciAmJiBoYXNUaHJvdykge1xuICAgICAgY29uc3QgeyB2YWx1ZSwgZG9uZSB9ID0gYXdhaXQgaXRlcmF0b3IudGhyb3coZXJyb3IpXG4gICAgICBhd2FpdCB2YWx1ZVxuICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgaXRlcmF0b3IucmV0dXJuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zdCB7IHZhbHVlIH0gPSBhd2FpdCBpdGVyYXRvci5yZXR1cm4oKVxuICAgICAgYXdhaXQgdmFsdWVcbiAgICB9XG4gIH1cbiAgYXN5bmMgZnVuY3Rpb24gbmV4dCgpIHtcbiAgICBmb3IgKDs7KSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7IHZhbHVlLCBkb25lIH0gPSBpc0FzeW5jID8gYXdhaXQgaXRlcmF0b3IubmV4dCgpIDogaXRlcmF0b3IubmV4dCgpXG4gICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgcmVhZGFibGUucHVzaChudWxsKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHJlcyA9IHZhbHVlICYmIHR5cGVvZiB2YWx1ZS50aGVuID09PSAnZnVuY3Rpb24nID8gYXdhaXQgdmFsdWUgOiB2YWx1ZVxuICAgICAgICAgIGlmIChyZXMgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJlYWRpbmcgPSBmYWxzZVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVSUl9TVFJFQU1fTlVMTF9WQUxVRVMoKVxuICAgICAgICAgIH0gZWxzZSBpZiAocmVhZGFibGUucHVzaChyZXMpKSB7XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZWFkaW5nID0gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICByZWFkYWJsZS5kZXN0cm95KGVycilcbiAgICAgIH1cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG4gIHJldHVybiByZWFkYWJsZVxufVxubW9kdWxlLmV4cG9ydHMgPSBmcm9tXG4iLAogICAgIi8qIHJlcGxhY2VtZW50IHN0YXJ0ICovXG5cbmNvbnN0IHByb2Nlc3MgPSByZXF1aXJlKCdwcm9jZXNzLycpXG5cbi8qIHJlcGxhY2VtZW50IGVuZCAqL1xuLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbjsoJ3VzZSBzdHJpY3QnKVxuY29uc3Qge1xuICBBcnJheVByb3RvdHlwZUluZGV4T2YsXG4gIE51bWJlcklzSW50ZWdlcixcbiAgTnVtYmVySXNOYU4sXG4gIE51bWJlclBhcnNlSW50LFxuICBPYmplY3REZWZpbmVQcm9wZXJ0aWVzLFxuICBPYmplY3RLZXlzLFxuICBPYmplY3RTZXRQcm90b3R5cGVPZixcbiAgUHJvbWlzZSxcbiAgU2FmZVNldCxcbiAgU3ltYm9sQXN5bmNEaXNwb3NlLFxuICBTeW1ib2xBc3luY0l0ZXJhdG9yLFxuICBTeW1ib2xcbn0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL3ByaW1vcmRpYWxzJylcbm1vZHVsZS5leHBvcnRzID0gUmVhZGFibGVcblJlYWRhYmxlLlJlYWRhYmxlU3RhdGUgPSBSZWFkYWJsZVN0YXRlXG5jb25zdCB7IEV2ZW50RW1pdHRlcjogRUUgfSA9IHJlcXVpcmUoJ2V2ZW50cycpXG5jb25zdCB7IFN0cmVhbSwgcHJlcGVuZExpc3RlbmVyIH0gPSByZXF1aXJlKCcuL2xlZ2FjeScpXG5jb25zdCB7IEJ1ZmZlciB9ID0gcmVxdWlyZSgnYnVmZmVyJylcbmNvbnN0IHsgYWRkQWJvcnRTaWduYWwgfSA9IHJlcXVpcmUoJy4vYWRkLWFib3J0LXNpZ25hbCcpXG5jb25zdCBlb3MgPSByZXF1aXJlKCcuL2VuZC1vZi1zdHJlYW0nKVxubGV0IGRlYnVnID0gcmVxdWlyZSgnLi4vLi4vb3Vycy91dGlsJykuZGVidWdsb2coJ3N0cmVhbScsIChmbikgPT4ge1xuICBkZWJ1ZyA9IGZuXG59KVxuY29uc3QgQnVmZmVyTGlzdCA9IHJlcXVpcmUoJy4vYnVmZmVyX2xpc3QnKVxuY29uc3QgZGVzdHJveUltcGwgPSByZXF1aXJlKCcuL2Rlc3Ryb3knKVxuY29uc3QgeyBnZXRIaWdoV2F0ZXJNYXJrLCBnZXREZWZhdWx0SGlnaFdhdGVyTWFyayB9ID0gcmVxdWlyZSgnLi9zdGF0ZScpXG5jb25zdCB7XG4gIGFnZ3JlZ2F0ZVR3b0Vycm9ycyxcbiAgY29kZXM6IHtcbiAgICBFUlJfSU5WQUxJRF9BUkdfVFlQRSxcbiAgICBFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCxcbiAgICBFUlJfT1VUX09GX1JBTkdFLFxuICAgIEVSUl9TVFJFQU1fUFVTSF9BRlRFUl9FT0YsXG4gICAgRVJSX1NUUkVBTV9VTlNISUZUX0FGVEVSX0VORF9FVkVOVFxuICB9LFxuICBBYm9ydEVycm9yXG59ID0gcmVxdWlyZSgnLi4vLi4vb3Vycy9lcnJvcnMnKVxuY29uc3QgeyB2YWxpZGF0ZU9iamVjdCB9ID0gcmVxdWlyZSgnLi4vdmFsaWRhdG9ycycpXG5jb25zdCBrUGF1c2VkID0gU3ltYm9sKCdrUGF1c2VkJylcbmNvbnN0IHsgU3RyaW5nRGVjb2RlciB9ID0gcmVxdWlyZSgnc3RyaW5nX2RlY29kZXInKVxuY29uc3QgZnJvbSA9IHJlcXVpcmUoJy4vZnJvbScpXG5PYmplY3RTZXRQcm90b3R5cGVPZihSZWFkYWJsZS5wcm90b3R5cGUsIFN0cmVhbS5wcm90b3R5cGUpXG5PYmplY3RTZXRQcm90b3R5cGVPZihSZWFkYWJsZSwgU3RyZWFtKVxuY29uc3Qgbm9wID0gKCkgPT4ge31cbmNvbnN0IHsgZXJyb3JPckRlc3Ryb3kgfSA9IGRlc3Ryb3lJbXBsXG5jb25zdCBrT2JqZWN0TW9kZSA9IDEgPDwgMFxuY29uc3Qga0VuZGVkID0gMSA8PCAxXG5jb25zdCBrRW5kRW1pdHRlZCA9IDEgPDwgMlxuY29uc3Qga1JlYWRpbmcgPSAxIDw8IDNcbmNvbnN0IGtDb25zdHJ1Y3RlZCA9IDEgPDwgNFxuY29uc3Qga1N5bmMgPSAxIDw8IDVcbmNvbnN0IGtOZWVkUmVhZGFibGUgPSAxIDw8IDZcbmNvbnN0IGtFbWl0dGVkUmVhZGFibGUgPSAxIDw8IDdcbmNvbnN0IGtSZWFkYWJsZUxpc3RlbmluZyA9IDEgPDwgOFxuY29uc3Qga1Jlc3VtZVNjaGVkdWxlZCA9IDEgPDwgOVxuY29uc3Qga0Vycm9yRW1pdHRlZCA9IDEgPDwgMTBcbmNvbnN0IGtFbWl0Q2xvc2UgPSAxIDw8IDExXG5jb25zdCBrQXV0b0Rlc3Ryb3kgPSAxIDw8IDEyXG5jb25zdCBrRGVzdHJveWVkID0gMSA8PCAxM1xuY29uc3Qga0Nsb3NlZCA9IDEgPDwgMTRcbmNvbnN0IGtDbG9zZUVtaXR0ZWQgPSAxIDw8IDE1XG5jb25zdCBrTXVsdGlBd2FpdERyYWluID0gMSA8PCAxNlxuY29uc3Qga1JlYWRpbmdNb3JlID0gMSA8PCAxN1xuY29uc3Qga0RhdGFFbWl0dGVkID0gMSA8PCAxOFxuXG4vLyBUT0RPKGJlbmphbWluZ3IpIGl0IGlzIGxpa2VseSBzbG93ZXIgdG8gZG8gaXQgdGhpcyB3YXkgdGhhbiB3aXRoIGZyZWUgZnVuY3Rpb25zXG5mdW5jdGlvbiBtYWtlQml0TWFwRGVzY3JpcHRvcihiaXQpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gKHRoaXMuc3RhdGUgJiBiaXQpICE9PSAwXG4gICAgfSxcbiAgICBzZXQodmFsdWUpIHtcbiAgICAgIGlmICh2YWx1ZSkgdGhpcy5zdGF0ZSB8PSBiaXRcbiAgICAgIGVsc2UgdGhpcy5zdGF0ZSAmPSB+Yml0XG4gICAgfVxuICB9XG59XG5PYmplY3REZWZpbmVQcm9wZXJ0aWVzKFJlYWRhYmxlU3RhdGUucHJvdG90eXBlLCB7XG4gIG9iamVjdE1vZGU6IG1ha2VCaXRNYXBEZXNjcmlwdG9yKGtPYmplY3RNb2RlKSxcbiAgZW5kZWQ6IG1ha2VCaXRNYXBEZXNjcmlwdG9yKGtFbmRlZCksXG4gIGVuZEVtaXR0ZWQ6IG1ha2VCaXRNYXBEZXNjcmlwdG9yKGtFbmRFbWl0dGVkKSxcbiAgcmVhZGluZzogbWFrZUJpdE1hcERlc2NyaXB0b3Ioa1JlYWRpbmcpLFxuICAvLyBTdHJlYW0gaXMgc3RpbGwgYmVpbmcgY29uc3RydWN0ZWQgYW5kIGNhbm5vdCBiZVxuICAvLyBkZXN0cm95ZWQgdW50aWwgY29uc3RydWN0aW9uIGZpbmlzaGVkIG9yIGZhaWxlZC5cbiAgLy8gQXN5bmMgY29uc3RydWN0aW9uIGlzIG9wdCBpbiwgdGhlcmVmb3JlIHdlIHN0YXJ0IGFzXG4gIC8vIGNvbnN0cnVjdGVkLlxuICBjb25zdHJ1Y3RlZDogbWFrZUJpdE1hcERlc2NyaXB0b3Ioa0NvbnN0cnVjdGVkKSxcbiAgLy8gQSBmbGFnIHRvIGJlIGFibGUgdG8gdGVsbCBpZiB0aGUgZXZlbnQgJ3JlYWRhYmxlJy8nZGF0YScgaXMgZW1pdHRlZFxuICAvLyBpbW1lZGlhdGVseSwgb3Igb24gYSBsYXRlciB0aWNrLiAgV2Ugc2V0IHRoaXMgdG8gdHJ1ZSBhdCBmaXJzdCwgYmVjYXVzZVxuICAvLyBhbnkgYWN0aW9ucyB0aGF0IHNob3VsZG4ndCBoYXBwZW4gdW50aWwgXCJsYXRlclwiIHNob3VsZCBnZW5lcmFsbHkgYWxzb1xuICAvLyBub3QgaGFwcGVuIGJlZm9yZSB0aGUgZmlyc3QgcmVhZCBjYWxsLlxuICBzeW5jOiBtYWtlQml0TWFwRGVzY3JpcHRvcihrU3luYyksXG4gIC8vIFdoZW5ldmVyIHdlIHJldHVybiBudWxsLCB0aGVuIHdlIHNldCBhIGZsYWcgdG8gc2F5XG4gIC8vIHRoYXQgd2UncmUgYXdhaXRpbmcgYSAncmVhZGFibGUnIGV2ZW50IGVtaXNzaW9uLlxuICBuZWVkUmVhZGFibGU6IG1ha2VCaXRNYXBEZXNjcmlwdG9yKGtOZWVkUmVhZGFibGUpLFxuICBlbWl0dGVkUmVhZGFibGU6IG1ha2VCaXRNYXBEZXNjcmlwdG9yKGtFbWl0dGVkUmVhZGFibGUpLFxuICByZWFkYWJsZUxpc3RlbmluZzogbWFrZUJpdE1hcERlc2NyaXB0b3Ioa1JlYWRhYmxlTGlzdGVuaW5nKSxcbiAgcmVzdW1lU2NoZWR1bGVkOiBtYWtlQml0TWFwRGVzY3JpcHRvcihrUmVzdW1lU2NoZWR1bGVkKSxcbiAgLy8gVHJ1ZSBpZiB0aGUgZXJyb3Igd2FzIGFscmVhZHkgZW1pdHRlZCBhbmQgc2hvdWxkIG5vdCBiZSB0aHJvd24gYWdhaW4uXG4gIGVycm9yRW1pdHRlZDogbWFrZUJpdE1hcERlc2NyaXB0b3Ioa0Vycm9yRW1pdHRlZCksXG4gIGVtaXRDbG9zZTogbWFrZUJpdE1hcERlc2NyaXB0b3Ioa0VtaXRDbG9zZSksXG4gIGF1dG9EZXN0cm95OiBtYWtlQml0TWFwRGVzY3JpcHRvcihrQXV0b0Rlc3Ryb3kpLFxuICAvLyBIYXMgaXQgYmVlbiBkZXN0cm95ZWQuXG4gIGRlc3Ryb3llZDogbWFrZUJpdE1hcERlc2NyaXB0b3Ioa0Rlc3Ryb3llZCksXG4gIC8vIEluZGljYXRlcyB3aGV0aGVyIHRoZSBzdHJlYW0gaGFzIGZpbmlzaGVkIGRlc3Ryb3lpbmcuXG4gIGNsb3NlZDogbWFrZUJpdE1hcERlc2NyaXB0b3Ioa0Nsb3NlZCksXG4gIC8vIFRydWUgaWYgY2xvc2UgaGFzIGJlZW4gZW1pdHRlZCBvciB3b3VsZCBoYXZlIGJlZW4gZW1pdHRlZFxuICAvLyBkZXBlbmRpbmcgb24gZW1pdENsb3NlLlxuICBjbG9zZUVtaXR0ZWQ6IG1ha2VCaXRNYXBEZXNjcmlwdG9yKGtDbG9zZUVtaXR0ZWQpLFxuICBtdWx0aUF3YWl0RHJhaW46IG1ha2VCaXRNYXBEZXNjcmlwdG9yKGtNdWx0aUF3YWl0RHJhaW4pLFxuICAvLyBJZiB0cnVlLCBhIG1heWJlUmVhZE1vcmUgaGFzIGJlZW4gc2NoZWR1bGVkLlxuICByZWFkaW5nTW9yZTogbWFrZUJpdE1hcERlc2NyaXB0b3Ioa1JlYWRpbmdNb3JlKSxcbiAgZGF0YUVtaXR0ZWQ6IG1ha2VCaXRNYXBEZXNjcmlwdG9yKGtEYXRhRW1pdHRlZClcbn0pXG5mdW5jdGlvbiBSZWFkYWJsZVN0YXRlKG9wdGlvbnMsIHN0cmVhbSwgaXNEdXBsZXgpIHtcbiAgLy8gRHVwbGV4IHN0cmVhbXMgYXJlIGJvdGggcmVhZGFibGUgYW5kIHdyaXRhYmxlLCBidXQgc2hhcmVcbiAgLy8gdGhlIHNhbWUgb3B0aW9ucyBvYmplY3QuXG4gIC8vIEhvd2V2ZXIsIHNvbWUgY2FzZXMgcmVxdWlyZSBzZXR0aW5nIG9wdGlvbnMgdG8gZGlmZmVyZW50XG4gIC8vIHZhbHVlcyBmb3IgdGhlIHJlYWRhYmxlIGFuZCB0aGUgd3JpdGFibGUgc2lkZXMgb2YgdGhlIGR1cGxleCBzdHJlYW0uXG4gIC8vIFRoZXNlIG9wdGlvbnMgY2FuIGJlIHByb3ZpZGVkIHNlcGFyYXRlbHkgYXMgcmVhZGFibGVYWFggYW5kIHdyaXRhYmxlWFhYLlxuICBpZiAodHlwZW9mIGlzRHVwbGV4ICE9PSAnYm9vbGVhbicpIGlzRHVwbGV4ID0gc3RyZWFtIGluc3RhbmNlb2YgcmVxdWlyZSgnLi9kdXBsZXgnKVxuXG4gIC8vIEJpdCBtYXAgZmllbGQgdG8gc3RvcmUgUmVhZGFibGVTdGF0ZSBtb3JlIGVmZmNpZW50bHkgd2l0aCAxIGJpdCBwZXIgZmllbGRcbiAgLy8gaW5zdGVhZCBvZiBhIFY4IHNsb3QgcGVyIGZpZWxkLlxuICB0aGlzLnN0YXRlID0ga0VtaXRDbG9zZSB8IGtBdXRvRGVzdHJveSB8IGtDb25zdHJ1Y3RlZCB8IGtTeW5jXG4gIC8vIE9iamVjdCBzdHJlYW0gZmxhZy4gVXNlZCB0byBtYWtlIHJlYWQobikgaWdub3JlIG4gYW5kIHRvXG4gIC8vIG1ha2UgYWxsIHRoZSBidWZmZXIgbWVyZ2luZyBhbmQgbGVuZ3RoIGNoZWNrcyBnbyBhd2F5LlxuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLm9iamVjdE1vZGUpIHRoaXMuc3RhdGUgfD0ga09iamVjdE1vZGVcbiAgaWYgKGlzRHVwbGV4ICYmIG9wdGlvbnMgJiYgb3B0aW9ucy5yZWFkYWJsZU9iamVjdE1vZGUpIHRoaXMuc3RhdGUgfD0ga09iamVjdE1vZGVcblxuICAvLyBUaGUgcG9pbnQgYXQgd2hpY2ggaXQgc3RvcHMgY2FsbGluZyBfcmVhZCgpIHRvIGZpbGwgdGhlIGJ1ZmZlclxuICAvLyBOb3RlOiAwIGlzIGEgdmFsaWQgdmFsdWUsIG1lYW5zIFwiZG9uJ3QgY2FsbCBfcmVhZCBwcmVlbXB0aXZlbHkgZXZlclwiXG4gIHRoaXMuaGlnaFdhdGVyTWFyayA9IG9wdGlvbnNcbiAgICA/IGdldEhpZ2hXYXRlck1hcmsodGhpcywgb3B0aW9ucywgJ3JlYWRhYmxlSGlnaFdhdGVyTWFyaycsIGlzRHVwbGV4KVxuICAgIDogZ2V0RGVmYXVsdEhpZ2hXYXRlck1hcmsoZmFsc2UpXG5cbiAgLy8gQSBsaW5rZWQgbGlzdCBpcyB1c2VkIHRvIHN0b3JlIGRhdGEgY2h1bmtzIGluc3RlYWQgb2YgYW4gYXJyYXkgYmVjYXVzZSB0aGVcbiAgLy8gbGlua2VkIGxpc3QgY2FuIHJlbW92ZSBlbGVtZW50cyBmcm9tIHRoZSBiZWdpbm5pbmcgZmFzdGVyIHRoYW5cbiAgLy8gYXJyYXkuc2hpZnQoKS5cbiAgdGhpcy5idWZmZXIgPSBuZXcgQnVmZmVyTGlzdCgpXG4gIHRoaXMubGVuZ3RoID0gMFxuICB0aGlzLnBpcGVzID0gW11cbiAgdGhpcy5mbG93aW5nID0gbnVsbFxuICB0aGlzW2tQYXVzZWRdID0gbnVsbFxuXG4gIC8vIFNob3VsZCBjbG9zZSBiZSBlbWl0dGVkIG9uIGRlc3Ryb3kuIERlZmF1bHRzIHRvIHRydWUuXG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZW1pdENsb3NlID09PSBmYWxzZSkgdGhpcy5zdGF0ZSAmPSB+a0VtaXRDbG9zZVxuXG4gIC8vIFNob3VsZCAuZGVzdHJveSgpIGJlIGNhbGxlZCBhZnRlciAnZW5kJyAoYW5kIHBvdGVudGlhbGx5ICdmaW5pc2gnKS5cbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5hdXRvRGVzdHJveSA9PT0gZmFsc2UpIHRoaXMuc3RhdGUgJj0gfmtBdXRvRGVzdHJveVxuXG4gIC8vIEluZGljYXRlcyB3aGV0aGVyIHRoZSBzdHJlYW0gaGFzIGVycm9yZWQuIFdoZW4gdHJ1ZSBubyBmdXJ0aGVyXG4gIC8vIF9yZWFkIGNhbGxzLCAnZGF0YScgb3IgJ3JlYWRhYmxlJyBldmVudHMgc2hvdWxkIG9jY3VyLiBUaGlzIGlzIG5lZWRlZFxuICAvLyBzaW5jZSB3aGVuIGF1dG9EZXN0cm95IGlzIGRpc2FibGVkIHdlIG5lZWQgYSB3YXkgdG8gdGVsbCB3aGV0aGVyIHRoZVxuICAvLyBzdHJlYW0gaGFzIGZhaWxlZC5cbiAgdGhpcy5lcnJvcmVkID0gbnVsbFxuXG4gIC8vIENyeXB0byBpcyBraW5kIG9mIG9sZCBhbmQgY3J1c3R5LiAgSGlzdG9yaWNhbGx5LCBpdHMgZGVmYXVsdCBzdHJpbmdcbiAgLy8gZW5jb2RpbmcgaXMgJ2JpbmFyeScgc28gd2UgaGF2ZSB0byBtYWtlIHRoaXMgY29uZmlndXJhYmxlLlxuICAvLyBFdmVyeXRoaW5nIGVsc2UgaW4gdGhlIHVuaXZlcnNlIHVzZXMgJ3V0ZjgnLCB0aG91Z2guXG4gIHRoaXMuZGVmYXVsdEVuY29kaW5nID0gKG9wdGlvbnMgJiYgb3B0aW9ucy5kZWZhdWx0RW5jb2RpbmcpIHx8ICd1dGY4J1xuXG4gIC8vIFJlZiB0aGUgcGlwZWQgZGVzdCB3aGljaCB3ZSBuZWVkIGEgZHJhaW4gZXZlbnQgb24gaXRcbiAgLy8gdHlwZTogbnVsbCB8IFdyaXRhYmxlIHwgU2V0PFdyaXRhYmxlPi5cbiAgdGhpcy5hd2FpdERyYWluV3JpdGVycyA9IG51bGxcbiAgdGhpcy5kZWNvZGVyID0gbnVsbFxuICB0aGlzLmVuY29kaW5nID0gbnVsbFxuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmVuY29kaW5nKSB7XG4gICAgdGhpcy5kZWNvZGVyID0gbmV3IFN0cmluZ0RlY29kZXIob3B0aW9ucy5lbmNvZGluZylcbiAgICB0aGlzLmVuY29kaW5nID0gb3B0aW9ucy5lbmNvZGluZ1xuICB9XG59XG5mdW5jdGlvbiBSZWFkYWJsZShvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBSZWFkYWJsZSkpIHJldHVybiBuZXcgUmVhZGFibGUob3B0aW9ucylcblxuICAvLyBDaGVja2luZyBmb3IgYSBTdHJlYW0uRHVwbGV4IGluc3RhbmNlIGlzIGZhc3RlciBoZXJlIGluc3RlYWQgb2YgaW5zaWRlXG4gIC8vIHRoZSBSZWFkYWJsZVN0YXRlIGNvbnN0cnVjdG9yLCBhdCBsZWFzdCB3aXRoIFY4IDYuNS5cbiAgY29uc3QgaXNEdXBsZXggPSB0aGlzIGluc3RhbmNlb2YgcmVxdWlyZSgnLi9kdXBsZXgnKVxuICB0aGlzLl9yZWFkYWJsZVN0YXRlID0gbmV3IFJlYWRhYmxlU3RhdGUob3B0aW9ucywgdGhpcywgaXNEdXBsZXgpXG4gIGlmIChvcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLnJlYWQgPT09ICdmdW5jdGlvbicpIHRoaXMuX3JlYWQgPSBvcHRpb25zLnJlYWRcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuZGVzdHJveSA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fZGVzdHJveSA9IG9wdGlvbnMuZGVzdHJveVxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5jb25zdHJ1Y3QgPT09ICdmdW5jdGlvbicpIHRoaXMuX2NvbnN0cnVjdCA9IG9wdGlvbnMuY29uc3RydWN0XG4gICAgaWYgKG9wdGlvbnMuc2lnbmFsICYmICFpc0R1cGxleCkgYWRkQWJvcnRTaWduYWwob3B0aW9ucy5zaWduYWwsIHRoaXMpXG4gIH1cbiAgU3RyZWFtLmNhbGwodGhpcywgb3B0aW9ucylcbiAgZGVzdHJveUltcGwuY29uc3RydWN0KHRoaXMsICgpID0+IHtcbiAgICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZS5uZWVkUmVhZGFibGUpIHtcbiAgICAgIG1heWJlUmVhZE1vcmUodGhpcywgdGhpcy5fcmVhZGFibGVTdGF0ZSlcbiAgICB9XG4gIH0pXG59XG5SZWFkYWJsZS5wcm90b3R5cGUuZGVzdHJveSA9IGRlc3Ryb3lJbXBsLmRlc3Ryb3lcblJlYWRhYmxlLnByb3RvdHlwZS5fdW5kZXN0cm95ID0gZGVzdHJveUltcGwudW5kZXN0cm95XG5SZWFkYWJsZS5wcm90b3R5cGUuX2Rlc3Ryb3kgPSBmdW5jdGlvbiAoZXJyLCBjYikge1xuICBjYihlcnIpXG59XG5SZWFkYWJsZS5wcm90b3R5cGVbRUUuY2FwdHVyZVJlamVjdGlvblN5bWJvbF0gPSBmdW5jdGlvbiAoZXJyKSB7XG4gIHRoaXMuZGVzdHJveShlcnIpXG59XG5SZWFkYWJsZS5wcm90b3R5cGVbU3ltYm9sQXN5bmNEaXNwb3NlXSA9IGZ1bmN0aW9uICgpIHtcbiAgbGV0IGVycm9yXG4gIGlmICghdGhpcy5kZXN0cm95ZWQpIHtcbiAgICBlcnJvciA9IHRoaXMucmVhZGFibGVFbmRlZCA/IG51bGwgOiBuZXcgQWJvcnRFcnJvcigpXG4gICAgdGhpcy5kZXN0cm95KGVycm9yKVxuICB9XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiBlb3ModGhpcywgKGVycikgPT4gKGVyciAmJiBlcnIgIT09IGVycm9yID8gcmVqZWN0KGVycikgOiByZXNvbHZlKG51bGwpKSkpXG59XG5cbi8vIE1hbnVhbGx5IHNob3ZlIHNvbWV0aGluZyBpbnRvIHRoZSByZWFkKCkgYnVmZmVyLlxuLy8gVGhpcyByZXR1cm5zIHRydWUgaWYgdGhlIGhpZ2hXYXRlck1hcmsgaGFzIG5vdCBiZWVuIGhpdCB5ZXQsXG4vLyBzaW1pbGFyIHRvIGhvdyBXcml0YWJsZS53cml0ZSgpIHJldHVybnMgdHJ1ZSBpZiB5b3Ugc2hvdWxkXG4vLyB3cml0ZSgpIHNvbWUgbW9yZS5cblJlYWRhYmxlLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZykge1xuICByZXR1cm4gcmVhZGFibGVBZGRDaHVuayh0aGlzLCBjaHVuaywgZW5jb2RpbmcsIGZhbHNlKVxufVxuXG4vLyBVbnNoaWZ0IHNob3VsZCAqYWx3YXlzKiBiZSBzb21ldGhpbmcgZGlyZWN0bHkgb3V0IG9mIHJlYWQoKS5cblJlYWRhYmxlLnByb3RvdHlwZS51bnNoaWZ0ID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZykge1xuICByZXR1cm4gcmVhZGFibGVBZGRDaHVuayh0aGlzLCBjaHVuaywgZW5jb2RpbmcsIHRydWUpXG59XG5mdW5jdGlvbiByZWFkYWJsZUFkZENodW5rKHN0cmVhbSwgY2h1bmssIGVuY29kaW5nLCBhZGRUb0Zyb250KSB7XG4gIGRlYnVnKCdyZWFkYWJsZUFkZENodW5rJywgY2h1bmspXG4gIGNvbnN0IHN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlXG4gIGxldCBlcnJcbiAgaWYgKChzdGF0ZS5zdGF0ZSAmIGtPYmplY3RNb2RlKSA9PT0gMCkge1xuICAgIGlmICh0eXBlb2YgY2h1bmsgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbmNvZGluZyA9IGVuY29kaW5nIHx8IHN0YXRlLmRlZmF1bHRFbmNvZGluZ1xuICAgICAgaWYgKHN0YXRlLmVuY29kaW5nICE9PSBlbmNvZGluZykge1xuICAgICAgICBpZiAoYWRkVG9Gcm9udCAmJiBzdGF0ZS5lbmNvZGluZykge1xuICAgICAgICAgIC8vIFdoZW4gdW5zaGlmdGluZywgaWYgc3RhdGUuZW5jb2RpbmcgaXMgc2V0LCB3ZSBoYXZlIHRvIHNhdmVcbiAgICAgICAgICAvLyB0aGUgc3RyaW5nIGluIHRoZSBCdWZmZXJMaXN0IHdpdGggdGhlIHN0YXRlIGVuY29kaW5nLlxuICAgICAgICAgIGNodW5rID0gQnVmZmVyLmZyb20oY2h1bmssIGVuY29kaW5nKS50b1N0cmluZyhzdGF0ZS5lbmNvZGluZylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjaHVuayA9IEJ1ZmZlci5mcm9tKGNodW5rLCBlbmNvZGluZylcbiAgICAgICAgICBlbmNvZGluZyA9ICcnXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNodW5rIGluc3RhbmNlb2YgQnVmZmVyKSB7XG4gICAgICBlbmNvZGluZyA9ICcnXG4gICAgfSBlbHNlIGlmIChTdHJlYW0uX2lzVWludDhBcnJheShjaHVuaykpIHtcbiAgICAgIGNodW5rID0gU3RyZWFtLl91aW50OEFycmF5VG9CdWZmZXIoY2h1bmspXG4gICAgICBlbmNvZGluZyA9ICcnXG4gICAgfSBlbHNlIGlmIChjaHVuayAhPSBudWxsKSB7XG4gICAgICBlcnIgPSBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoJ2NodW5rJywgWydzdHJpbmcnLCAnQnVmZmVyJywgJ1VpbnQ4QXJyYXknXSwgY2h1bmspXG4gICAgfVxuICB9XG4gIGlmIChlcnIpIHtcbiAgICBlcnJvck9yRGVzdHJveShzdHJlYW0sIGVycilcbiAgfSBlbHNlIGlmIChjaHVuayA9PT0gbnVsbCkge1xuICAgIHN0YXRlLnN0YXRlICY9IH5rUmVhZGluZ1xuICAgIG9uRW9mQ2h1bmsoc3RyZWFtLCBzdGF0ZSlcbiAgfSBlbHNlIGlmICgoc3RhdGUuc3RhdGUgJiBrT2JqZWN0TW9kZSkgIT09IDAgfHwgKGNodW5rICYmIGNodW5rLmxlbmd0aCA+IDApKSB7XG4gICAgaWYgKGFkZFRvRnJvbnQpIHtcbiAgICAgIGlmICgoc3RhdGUuc3RhdGUgJiBrRW5kRW1pdHRlZCkgIT09IDApIGVycm9yT3JEZXN0cm95KHN0cmVhbSwgbmV3IEVSUl9TVFJFQU1fVU5TSElGVF9BRlRFUl9FTkRfRVZFTlQoKSlcbiAgICAgIGVsc2UgaWYgKHN0YXRlLmRlc3Ryb3llZCB8fCBzdGF0ZS5lcnJvcmVkKSByZXR1cm4gZmFsc2VcbiAgICAgIGVsc2UgYWRkQ2h1bmsoc3RyZWFtLCBzdGF0ZSwgY2h1bmssIHRydWUpXG4gICAgfSBlbHNlIGlmIChzdGF0ZS5lbmRlZCkge1xuICAgICAgZXJyb3JPckRlc3Ryb3koc3RyZWFtLCBuZXcgRVJSX1NUUkVBTV9QVVNIX0FGVEVSX0VPRigpKVxuICAgIH0gZWxzZSBpZiAoc3RhdGUuZGVzdHJveWVkIHx8IHN0YXRlLmVycm9yZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS5zdGF0ZSAmPSB+a1JlYWRpbmdcbiAgICAgIGlmIChzdGF0ZS5kZWNvZGVyICYmICFlbmNvZGluZykge1xuICAgICAgICBjaHVuayA9IHN0YXRlLmRlY29kZXIud3JpdGUoY2h1bmspXG4gICAgICAgIGlmIChzdGF0ZS5vYmplY3RNb2RlIHx8IGNodW5rLmxlbmd0aCAhPT0gMCkgYWRkQ2h1bmsoc3RyZWFtLCBzdGF0ZSwgY2h1bmssIGZhbHNlKVxuICAgICAgICBlbHNlIG1heWJlUmVhZE1vcmUoc3RyZWFtLCBzdGF0ZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFkZENodW5rKHN0cmVhbSwgc3RhdGUsIGNodW5rLCBmYWxzZSlcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAoIWFkZFRvRnJvbnQpIHtcbiAgICBzdGF0ZS5zdGF0ZSAmPSB+a1JlYWRpbmdcbiAgICBtYXliZVJlYWRNb3JlKHN0cmVhbSwgc3RhdGUpXG4gIH1cblxuICAvLyBXZSBjYW4gcHVzaCBtb3JlIGRhdGEgaWYgd2UgYXJlIGJlbG93IHRoZSBoaWdoV2F0ZXJNYXJrLlxuICAvLyBBbHNvLCBpZiB3ZSBoYXZlIG5vIGRhdGEgeWV0LCB3ZSBjYW4gc3RhbmQgc29tZSBtb3JlIGJ5dGVzLlxuICAvLyBUaGlzIGlzIHRvIHdvcmsgYXJvdW5kIGNhc2VzIHdoZXJlIGh3bT0wLCBzdWNoIGFzIHRoZSByZXBsLlxuICByZXR1cm4gIXN0YXRlLmVuZGVkICYmIChzdGF0ZS5sZW5ndGggPCBzdGF0ZS5oaWdoV2F0ZXJNYXJrIHx8IHN0YXRlLmxlbmd0aCA9PT0gMClcbn1cbmZ1bmN0aW9uIGFkZENodW5rKHN0cmVhbSwgc3RhdGUsIGNodW5rLCBhZGRUb0Zyb250KSB7XG4gIGlmIChzdGF0ZS5mbG93aW5nICYmIHN0YXRlLmxlbmd0aCA9PT0gMCAmJiAhc3RhdGUuc3luYyAmJiBzdHJlYW0ubGlzdGVuZXJDb3VudCgnZGF0YScpID4gMCkge1xuICAgIC8vIFVzZSB0aGUgZ3VhcmQgdG8gYXZvaWQgY3JlYXRpbmcgYFNldCgpYCByZXBlYXRlZGx5XG4gICAgLy8gd2hlbiB3ZSBoYXZlIG11bHRpcGxlIHBpcGVzLlxuICAgIGlmICgoc3RhdGUuc3RhdGUgJiBrTXVsdGlBd2FpdERyYWluKSAhPT0gMCkge1xuICAgICAgc3RhdGUuYXdhaXREcmFpbldyaXRlcnMuY2xlYXIoKVxuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS5hd2FpdERyYWluV3JpdGVycyA9IG51bGxcbiAgICB9XG4gICAgc3RhdGUuZGF0YUVtaXR0ZWQgPSB0cnVlXG4gICAgc3RyZWFtLmVtaXQoJ2RhdGEnLCBjaHVuaylcbiAgfSBlbHNlIHtcbiAgICAvLyBVcGRhdGUgdGhlIGJ1ZmZlciBpbmZvLlxuICAgIHN0YXRlLmxlbmd0aCArPSBzdGF0ZS5vYmplY3RNb2RlID8gMSA6IGNodW5rLmxlbmd0aFxuICAgIGlmIChhZGRUb0Zyb250KSBzdGF0ZS5idWZmZXIudW5zaGlmdChjaHVuaylcbiAgICBlbHNlIHN0YXRlLmJ1ZmZlci5wdXNoKGNodW5rKVxuICAgIGlmICgoc3RhdGUuc3RhdGUgJiBrTmVlZFJlYWRhYmxlKSAhPT0gMCkgZW1pdFJlYWRhYmxlKHN0cmVhbSlcbiAgfVxuICBtYXliZVJlYWRNb3JlKHN0cmVhbSwgc3RhdGUpXG59XG5SZWFkYWJsZS5wcm90b3R5cGUuaXNQYXVzZWQgPSBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZVxuICByZXR1cm4gc3RhdGVba1BhdXNlZF0gPT09IHRydWUgfHwgc3RhdGUuZmxvd2luZyA9PT0gZmFsc2Vcbn1cblxuLy8gQmFja3dhcmRzIGNvbXBhdGliaWxpdHkuXG5SZWFkYWJsZS5wcm90b3R5cGUuc2V0RW5jb2RpbmcgPSBmdW5jdGlvbiAoZW5jKSB7XG4gIGNvbnN0IGRlY29kZXIgPSBuZXcgU3RyaW5nRGVjb2RlcihlbmMpXG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2RlciA9IGRlY29kZXJcbiAgLy8gSWYgc2V0RW5jb2RpbmcobnVsbCksIGRlY29kZXIuZW5jb2RpbmcgZXF1YWxzIHV0ZjguXG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5jb2RpbmcgPSB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlY29kZXIuZW5jb2RpbmdcbiAgY29uc3QgYnVmZmVyID0gdGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXJcbiAgLy8gSXRlcmF0ZSBvdmVyIGN1cnJlbnQgYnVmZmVyIHRvIGNvbnZlcnQgYWxyZWFkeSBzdG9yZWQgQnVmZmVyczpcbiAgbGV0IGNvbnRlbnQgPSAnJ1xuICBmb3IgKGNvbnN0IGRhdGEgb2YgYnVmZmVyKSB7XG4gICAgY29udGVudCArPSBkZWNvZGVyLndyaXRlKGRhdGEpXG4gIH1cbiAgYnVmZmVyLmNsZWFyKClcbiAgaWYgKGNvbnRlbnQgIT09ICcnKSBidWZmZXIucHVzaChjb250ZW50KVxuICB0aGlzLl9yZWFkYWJsZVN0YXRlLmxlbmd0aCA9IGNvbnRlbnQubGVuZ3RoXG4gIHJldHVybiB0aGlzXG59XG5cbi8vIERvbid0IHJhaXNlIHRoZSBod20gPiAxR0IuXG5jb25zdCBNQVhfSFdNID0gMHg0MDAwMDAwMFxuZnVuY3Rpb24gY29tcHV0ZU5ld0hpZ2hXYXRlck1hcmsobikge1xuICBpZiAobiA+IE1BWF9IV00pIHtcbiAgICB0aHJvdyBuZXcgRVJSX09VVF9PRl9SQU5HRSgnc2l6ZScsICc8PSAxR2lCJywgbilcbiAgfSBlbHNlIHtcbiAgICAvLyBHZXQgdGhlIG5leHQgaGlnaGVzdCBwb3dlciBvZiAyIHRvIHByZXZlbnQgaW5jcmVhc2luZyBod20gZXhjZXNzaXZlbHkgaW5cbiAgICAvLyB0aW55IGFtb3VudHMuXG4gICAgbi0tXG4gICAgbiB8PSBuID4+PiAxXG4gICAgbiB8PSBuID4+PiAyXG4gICAgbiB8PSBuID4+PiA0XG4gICAgbiB8PSBuID4+PiA4XG4gICAgbiB8PSBuID4+PiAxNlxuICAgIG4rK1xuICB9XG4gIHJldHVybiBuXG59XG5cbi8vIFRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gYmUgaW5saW5hYmxlLCBzbyBwbGVhc2UgdGFrZSBjYXJlIHdoZW4gbWFraW5nXG4vLyBjaGFuZ2VzIHRvIHRoZSBmdW5jdGlvbiBib2R5LlxuZnVuY3Rpb24gaG93TXVjaFRvUmVhZChuLCBzdGF0ZSkge1xuICBpZiAobiA8PSAwIHx8IChzdGF0ZS5sZW5ndGggPT09IDAgJiYgc3RhdGUuZW5kZWQpKSByZXR1cm4gMFxuICBpZiAoKHN0YXRlLnN0YXRlICYga09iamVjdE1vZGUpICE9PSAwKSByZXR1cm4gMVxuICBpZiAoTnVtYmVySXNOYU4obikpIHtcbiAgICAvLyBPbmx5IGZsb3cgb25lIGJ1ZmZlciBhdCBhIHRpbWUuXG4gICAgaWYgKHN0YXRlLmZsb3dpbmcgJiYgc3RhdGUubGVuZ3RoKSByZXR1cm4gc3RhdGUuYnVmZmVyLmZpcnN0KCkubGVuZ3RoXG4gICAgcmV0dXJuIHN0YXRlLmxlbmd0aFxuICB9XG4gIGlmIChuIDw9IHN0YXRlLmxlbmd0aCkgcmV0dXJuIG5cbiAgcmV0dXJuIHN0YXRlLmVuZGVkID8gc3RhdGUubGVuZ3RoIDogMFxufVxuXG4vLyBZb3UgY2FuIG92ZXJyaWRlIGVpdGhlciB0aGlzIG1ldGhvZCwgb3IgdGhlIGFzeW5jIF9yZWFkKG4pIGJlbG93LlxuUmVhZGFibGUucHJvdG90eXBlLnJlYWQgPSBmdW5jdGlvbiAobikge1xuICBkZWJ1ZygncmVhZCcsIG4pXG4gIC8vIFNhbWUgYXMgcGFyc2VJbnQodW5kZWZpbmVkLCAxMCksIGhvd2V2ZXIgVjggNy4zIHBlcmZvcm1hbmNlIHJlZ3Jlc3NlZFxuICAvLyBpbiB0aGlzIHNjZW5hcmlvLCBzbyB3ZSBhcmUgZG9pbmcgaXQgbWFudWFsbHkuXG4gIGlmIChuID09PSB1bmRlZmluZWQpIHtcbiAgICBuID0gTmFOXG4gIH0gZWxzZSBpZiAoIU51bWJlcklzSW50ZWdlcihuKSkge1xuICAgIG4gPSBOdW1iZXJQYXJzZUludChuLCAxMClcbiAgfVxuICBjb25zdCBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGVcbiAgY29uc3Qgbk9yaWcgPSBuXG5cbiAgLy8gSWYgd2UncmUgYXNraW5nIGZvciBtb3JlIHRoYW4gdGhlIGN1cnJlbnQgaHdtLCB0aGVuIHJhaXNlIHRoZSBod20uXG4gIGlmIChuID4gc3RhdGUuaGlnaFdhdGVyTWFyaykgc3RhdGUuaGlnaFdhdGVyTWFyayA9IGNvbXB1dGVOZXdIaWdoV2F0ZXJNYXJrKG4pXG4gIGlmIChuICE9PSAwKSBzdGF0ZS5zdGF0ZSAmPSB+a0VtaXR0ZWRSZWFkYWJsZVxuXG4gIC8vIElmIHdlJ3JlIGRvaW5nIHJlYWQoMCkgdG8gdHJpZ2dlciBhIHJlYWRhYmxlIGV2ZW50LCBidXQgd2VcbiAgLy8gYWxyZWFkeSBoYXZlIGEgYnVuY2ggb2YgZGF0YSBpbiB0aGUgYnVmZmVyLCB0aGVuIGp1c3QgdHJpZ2dlclxuICAvLyB0aGUgJ3JlYWRhYmxlJyBldmVudCBhbmQgbW92ZSBvbi5cbiAgaWYgKFxuICAgIG4gPT09IDAgJiZcbiAgICBzdGF0ZS5uZWVkUmVhZGFibGUgJiZcbiAgICAoKHN0YXRlLmhpZ2hXYXRlck1hcmsgIT09IDAgPyBzdGF0ZS5sZW5ndGggPj0gc3RhdGUuaGlnaFdhdGVyTWFyayA6IHN0YXRlLmxlbmd0aCA+IDApIHx8IHN0YXRlLmVuZGVkKVxuICApIHtcbiAgICBkZWJ1ZygncmVhZDogZW1pdFJlYWRhYmxlJywgc3RhdGUubGVuZ3RoLCBzdGF0ZS5lbmRlZClcbiAgICBpZiAoc3RhdGUubGVuZ3RoID09PSAwICYmIHN0YXRlLmVuZGVkKSBlbmRSZWFkYWJsZSh0aGlzKVxuICAgIGVsc2UgZW1pdFJlYWRhYmxlKHRoaXMpXG4gICAgcmV0dXJuIG51bGxcbiAgfVxuICBuID0gaG93TXVjaFRvUmVhZChuLCBzdGF0ZSlcblxuICAvLyBJZiB3ZSd2ZSBlbmRlZCwgYW5kIHdlJ3JlIG5vdyBjbGVhciwgdGhlbiBmaW5pc2ggaXQgdXAuXG4gIGlmIChuID09PSAwICYmIHN0YXRlLmVuZGVkKSB7XG4gICAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCkgZW5kUmVhZGFibGUodGhpcylcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLy8gQWxsIHRoZSBhY3R1YWwgY2h1bmsgZ2VuZXJhdGlvbiBsb2dpYyBuZWVkcyB0byBiZVxuICAvLyAqYmVsb3cqIHRoZSBjYWxsIHRvIF9yZWFkLiAgVGhlIHJlYXNvbiBpcyB0aGF0IGluIGNlcnRhaW5cbiAgLy8gc3ludGhldGljIHN0cmVhbSBjYXNlcywgc3VjaCBhcyBwYXNzdGhyb3VnaCBzdHJlYW1zLCBfcmVhZFxuICAvLyBtYXkgYmUgYSBjb21wbGV0ZWx5IHN5bmNocm9ub3VzIG9wZXJhdGlvbiB3aGljaCBtYXkgY2hhbmdlXG4gIC8vIHRoZSBzdGF0ZSBvZiB0aGUgcmVhZCBidWZmZXIsIHByb3ZpZGluZyBlbm91Z2ggZGF0YSB3aGVuXG4gIC8vIGJlZm9yZSB0aGVyZSB3YXMgKm5vdCogZW5vdWdoLlxuICAvL1xuICAvLyBTbywgdGhlIHN0ZXBzIGFyZTpcbiAgLy8gMS4gRmlndXJlIG91dCB3aGF0IHRoZSBzdGF0ZSBvZiB0aGluZ3Mgd2lsbCBiZSBhZnRlciB3ZSBkb1xuICAvLyBhIHJlYWQgZnJvbSB0aGUgYnVmZmVyLlxuICAvL1xuICAvLyAyLiBJZiB0aGF0IHJlc3VsdGluZyBzdGF0ZSB3aWxsIHRyaWdnZXIgYSBfcmVhZCwgdGhlbiBjYWxsIF9yZWFkLlxuICAvLyBOb3RlIHRoYXQgdGhpcyBtYXkgYmUgYXN5bmNocm9ub3VzLCBvciBzeW5jaHJvbm91cy4gIFllcywgaXQgaXNcbiAgLy8gZGVlcGx5IHVnbHkgdG8gd3JpdGUgQVBJcyB0aGlzIHdheSwgYnV0IHRoYXQgc3RpbGwgZG9lc24ndCBtZWFuXG4gIC8vIHRoYXQgdGhlIFJlYWRhYmxlIGNsYXNzIHNob3VsZCBiZWhhdmUgaW1wcm9wZXJseSwgYXMgc3RyZWFtcyBhcmVcbiAgLy8gZGVzaWduZWQgdG8gYmUgc3luYy9hc3luYyBhZ25vc3RpYy5cbiAgLy8gVGFrZSBub3RlIGlmIHRoZSBfcmVhZCBjYWxsIGlzIHN5bmMgb3IgYXN5bmMgKGllLCBpZiB0aGUgcmVhZCBjYWxsXG4gIC8vIGhhcyByZXR1cm5lZCB5ZXQpLCBzbyB0aGF0IHdlIGtub3cgd2hldGhlciBvciBub3QgaXQncyBzYWZlIHRvIGVtaXRcbiAgLy8gJ3JlYWRhYmxlJyBldGMuXG4gIC8vXG4gIC8vIDMuIEFjdHVhbGx5IHB1bGwgdGhlIHJlcXVlc3RlZCBjaHVua3Mgb3V0IG9mIHRoZSBidWZmZXIgYW5kIHJldHVybi5cblxuICAvLyBpZiB3ZSBuZWVkIGEgcmVhZGFibGUgZXZlbnQsIHRoZW4gd2UgbmVlZCB0byBkbyBzb21lIHJlYWRpbmcuXG4gIGxldCBkb1JlYWQgPSAoc3RhdGUuc3RhdGUgJiBrTmVlZFJlYWRhYmxlKSAhPT0gMFxuICBkZWJ1ZygnbmVlZCByZWFkYWJsZScsIGRvUmVhZClcblxuICAvLyBJZiB3ZSBjdXJyZW50bHkgaGF2ZSBsZXNzIHRoYW4gdGhlIGhpZ2hXYXRlck1hcmssIHRoZW4gYWxzbyByZWFkIHNvbWUuXG4gIGlmIChzdGF0ZS5sZW5ndGggPT09IDAgfHwgc3RhdGUubGVuZ3RoIC0gbiA8IHN0YXRlLmhpZ2hXYXRlck1hcmspIHtcbiAgICBkb1JlYWQgPSB0cnVlXG4gICAgZGVidWcoJ2xlbmd0aCBsZXNzIHRoYW4gd2F0ZXJtYXJrJywgZG9SZWFkKVxuICB9XG5cbiAgLy8gSG93ZXZlciwgaWYgd2UndmUgZW5kZWQsIHRoZW4gdGhlcmUncyBubyBwb2ludCwgaWYgd2UncmUgYWxyZWFkeVxuICAvLyByZWFkaW5nLCB0aGVuIGl0J3MgdW5uZWNlc3NhcnksIGlmIHdlJ3JlIGNvbnN0cnVjdGluZyB3ZSBoYXZlIHRvIHdhaXQsXG4gIC8vIGFuZCBpZiB3ZSdyZSBkZXN0cm95ZWQgb3IgZXJyb3JlZCwgdGhlbiBpdCdzIG5vdCBhbGxvd2VkLFxuICBpZiAoc3RhdGUuZW5kZWQgfHwgc3RhdGUucmVhZGluZyB8fCBzdGF0ZS5kZXN0cm95ZWQgfHwgc3RhdGUuZXJyb3JlZCB8fCAhc3RhdGUuY29uc3RydWN0ZWQpIHtcbiAgICBkb1JlYWQgPSBmYWxzZVxuICAgIGRlYnVnKCdyZWFkaW5nLCBlbmRlZCBvciBjb25zdHJ1Y3RpbmcnLCBkb1JlYWQpXG4gIH0gZWxzZSBpZiAoZG9SZWFkKSB7XG4gICAgZGVidWcoJ2RvIHJlYWQnKVxuICAgIHN0YXRlLnN0YXRlIHw9IGtSZWFkaW5nIHwga1N5bmNcbiAgICAvLyBJZiB0aGUgbGVuZ3RoIGlzIGN1cnJlbnRseSB6ZXJvLCB0aGVuIHdlICpuZWVkKiBhIHJlYWRhYmxlIGV2ZW50LlxuICAgIGlmIChzdGF0ZS5sZW5ndGggPT09IDApIHN0YXRlLnN0YXRlIHw9IGtOZWVkUmVhZGFibGVcblxuICAgIC8vIENhbGwgaW50ZXJuYWwgcmVhZCBtZXRob2RcbiAgICB0cnkge1xuICAgICAgdGhpcy5fcmVhZChzdGF0ZS5oaWdoV2F0ZXJNYXJrKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyb3JPckRlc3Ryb3kodGhpcywgZXJyKVxuICAgIH1cbiAgICBzdGF0ZS5zdGF0ZSAmPSB+a1N5bmNcblxuICAgIC8vIElmIF9yZWFkIHB1c2hlZCBkYXRhIHN5bmNocm9ub3VzbHksIHRoZW4gYHJlYWRpbmdgIHdpbGwgYmUgZmFsc2UsXG4gICAgLy8gYW5kIHdlIG5lZWQgdG8gcmUtZXZhbHVhdGUgaG93IG11Y2ggZGF0YSB3ZSBjYW4gcmV0dXJuIHRvIHRoZSB1c2VyLlxuICAgIGlmICghc3RhdGUucmVhZGluZykgbiA9IGhvd011Y2hUb1JlYWQobk9yaWcsIHN0YXRlKVxuICB9XG4gIGxldCByZXRcbiAgaWYgKG4gPiAwKSByZXQgPSBmcm9tTGlzdChuLCBzdGF0ZSlcbiAgZWxzZSByZXQgPSBudWxsXG4gIGlmIChyZXQgPT09IG51bGwpIHtcbiAgICBzdGF0ZS5uZWVkUmVhZGFibGUgPSBzdGF0ZS5sZW5ndGggPD0gc3RhdGUuaGlnaFdhdGVyTWFya1xuICAgIG4gPSAwXG4gIH0gZWxzZSB7XG4gICAgc3RhdGUubGVuZ3RoIC09IG5cbiAgICBpZiAoc3RhdGUubXVsdGlBd2FpdERyYWluKSB7XG4gICAgICBzdGF0ZS5hd2FpdERyYWluV3JpdGVycy5jbGVhcigpXG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLmF3YWl0RHJhaW5Xcml0ZXJzID0gbnVsbFxuICAgIH1cbiAgfVxuICBpZiAoc3RhdGUubGVuZ3RoID09PSAwKSB7XG4gICAgLy8gSWYgd2UgaGF2ZSBub3RoaW5nIGluIHRoZSBidWZmZXIsIHRoZW4gd2Ugd2FudCB0byBrbm93XG4gICAgLy8gYXMgc29vbiBhcyB3ZSAqZG8qIGdldCBzb21ldGhpbmcgaW50byB0aGUgYnVmZmVyLlxuICAgIGlmICghc3RhdGUuZW5kZWQpIHN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWVcblxuICAgIC8vIElmIHdlIHRyaWVkIHRvIHJlYWQoKSBwYXN0IHRoZSBFT0YsIHRoZW4gZW1pdCBlbmQgb24gdGhlIG5leHQgdGljay5cbiAgICBpZiAobk9yaWcgIT09IG4gJiYgc3RhdGUuZW5kZWQpIGVuZFJlYWRhYmxlKHRoaXMpXG4gIH1cbiAgaWYgKHJldCAhPT0gbnVsbCAmJiAhc3RhdGUuZXJyb3JFbWl0dGVkICYmICFzdGF0ZS5jbG9zZUVtaXR0ZWQpIHtcbiAgICBzdGF0ZS5kYXRhRW1pdHRlZCA9IHRydWVcbiAgICB0aGlzLmVtaXQoJ2RhdGEnLCByZXQpXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuZnVuY3Rpb24gb25Fb2ZDaHVuayhzdHJlYW0sIHN0YXRlKSB7XG4gIGRlYnVnKCdvbkVvZkNodW5rJylcbiAgaWYgKHN0YXRlLmVuZGVkKSByZXR1cm5cbiAgaWYgKHN0YXRlLmRlY29kZXIpIHtcbiAgICBjb25zdCBjaHVuayA9IHN0YXRlLmRlY29kZXIuZW5kKClcbiAgICBpZiAoY2h1bmsgJiYgY2h1bmsubGVuZ3RoKSB7XG4gICAgICBzdGF0ZS5idWZmZXIucHVzaChjaHVuaylcbiAgICAgIHN0YXRlLmxlbmd0aCArPSBzdGF0ZS5vYmplY3RNb2RlID8gMSA6IGNodW5rLmxlbmd0aFxuICAgIH1cbiAgfVxuICBzdGF0ZS5lbmRlZCA9IHRydWVcbiAgaWYgKHN0YXRlLnN5bmMpIHtcbiAgICAvLyBJZiB3ZSBhcmUgc3luYywgd2FpdCB1bnRpbCBuZXh0IHRpY2sgdG8gZW1pdCB0aGUgZGF0YS5cbiAgICAvLyBPdGhlcndpc2Ugd2UgcmlzayBlbWl0dGluZyBkYXRhIGluIHRoZSBmbG93KClcbiAgICAvLyB0aGUgcmVhZGFibGUgY29kZSB0cmlnZ2VycyBkdXJpbmcgYSByZWFkKCkgY2FsbC5cbiAgICBlbWl0UmVhZGFibGUoc3RyZWFtKVxuICB9IGVsc2Uge1xuICAgIC8vIEVtaXQgJ3JlYWRhYmxlJyBub3cgdG8gbWFrZSBzdXJlIGl0IGdldHMgcGlja2VkIHVwLlxuICAgIHN0YXRlLm5lZWRSZWFkYWJsZSA9IGZhbHNlXG4gICAgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gdHJ1ZVxuICAgIC8vIFdlIGhhdmUgdG8gZW1pdCByZWFkYWJsZSBub3cgdGhhdCB3ZSBhcmUgRU9GLiBNb2R1bGVzXG4gICAgLy8gaW4gdGhlIGVjb3N5c3RlbSAoZS5nLiBkaWNlcikgcmVseSBvbiB0aGlzIGV2ZW50IGJlaW5nIHN5bmMuXG4gICAgZW1pdFJlYWRhYmxlXyhzdHJlYW0pXG4gIH1cbn1cblxuLy8gRG9uJ3QgZW1pdCByZWFkYWJsZSByaWdodCBhd2F5IGluIHN5bmMgbW9kZSwgYmVjYXVzZSB0aGlzIGNhbiB0cmlnZ2VyXG4vLyBhbm90aGVyIHJlYWQoKSBjYWxsID0+IHN0YWNrIG92ZXJmbG93LiAgVGhpcyB3YXksIGl0IG1pZ2h0IHRyaWdnZXJcbi8vIGEgbmV4dFRpY2sgcmVjdXJzaW9uIHdhcm5pbmcsIGJ1dCB0aGF0J3Mgbm90IHNvIGJhZC5cbmZ1bmN0aW9uIGVtaXRSZWFkYWJsZShzdHJlYW0pIHtcbiAgY29uc3Qgc3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGVcbiAgZGVidWcoJ2VtaXRSZWFkYWJsZScsIHN0YXRlLm5lZWRSZWFkYWJsZSwgc3RhdGUuZW1pdHRlZFJlYWRhYmxlKVxuICBzdGF0ZS5uZWVkUmVhZGFibGUgPSBmYWxzZVxuICBpZiAoIXN0YXRlLmVtaXR0ZWRSZWFkYWJsZSkge1xuICAgIGRlYnVnKCdlbWl0UmVhZGFibGUnLCBzdGF0ZS5mbG93aW5nKVxuICAgIHN0YXRlLmVtaXR0ZWRSZWFkYWJsZSA9IHRydWVcbiAgICBwcm9jZXNzLm5leHRUaWNrKGVtaXRSZWFkYWJsZV8sIHN0cmVhbSlcbiAgfVxufVxuZnVuY3Rpb24gZW1pdFJlYWRhYmxlXyhzdHJlYW0pIHtcbiAgY29uc3Qgc3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGVcbiAgZGVidWcoJ2VtaXRSZWFkYWJsZV8nLCBzdGF0ZS5kZXN0cm95ZWQsIHN0YXRlLmxlbmd0aCwgc3RhdGUuZW5kZWQpXG4gIGlmICghc3RhdGUuZGVzdHJveWVkICYmICFzdGF0ZS5lcnJvcmVkICYmIChzdGF0ZS5sZW5ndGggfHwgc3RhdGUuZW5kZWQpKSB7XG4gICAgc3RyZWFtLmVtaXQoJ3JlYWRhYmxlJylcbiAgICBzdGF0ZS5lbWl0dGVkUmVhZGFibGUgPSBmYWxzZVxuICB9XG5cbiAgLy8gVGhlIHN0cmVhbSBuZWVkcyBhbm90aGVyIHJlYWRhYmxlIGV2ZW50IGlmOlxuICAvLyAxLiBJdCBpcyBub3QgZmxvd2luZywgYXMgdGhlIGZsb3cgbWVjaGFuaXNtIHdpbGwgdGFrZVxuICAvLyAgICBjYXJlIG9mIGl0LlxuICAvLyAyLiBJdCBpcyBub3QgZW5kZWQuXG4gIC8vIDMuIEl0IGlzIGJlbG93IHRoZSBoaWdoV2F0ZXJNYXJrLCBzbyB3ZSBjYW4gc2NoZWR1bGVcbiAgLy8gICAgYW5vdGhlciByZWFkYWJsZSBsYXRlci5cbiAgc3RhdGUubmVlZFJlYWRhYmxlID0gIXN0YXRlLmZsb3dpbmcgJiYgIXN0YXRlLmVuZGVkICYmIHN0YXRlLmxlbmd0aCA8PSBzdGF0ZS5oaWdoV2F0ZXJNYXJrXG4gIGZsb3coc3RyZWFtKVxufVxuXG4vLyBBdCB0aGlzIHBvaW50LCB0aGUgdXNlciBoYXMgcHJlc3VtYWJseSBzZWVuIHRoZSAncmVhZGFibGUnIGV2ZW50LFxuLy8gYW5kIGNhbGxlZCByZWFkKCkgdG8gY29uc3VtZSBzb21lIGRhdGEuICB0aGF0IG1heSBoYXZlIHRyaWdnZXJlZFxuLy8gaW4gdHVybiBhbm90aGVyIF9yZWFkKG4pIGNhbGwsIGluIHdoaWNoIGNhc2UgcmVhZGluZyA9IHRydWUgaWZcbi8vIGl0J3MgaW4gcHJvZ3Jlc3MuXG4vLyBIb3dldmVyLCBpZiB3ZSdyZSBub3QgZW5kZWQsIG9yIHJlYWRpbmcsIGFuZCB0aGUgbGVuZ3RoIDwgaHdtLFxuLy8gdGhlbiBnbyBhaGVhZCBhbmQgdHJ5IHRvIHJlYWQgc29tZSBtb3JlIHByZWVtcHRpdmVseS5cbmZ1bmN0aW9uIG1heWJlUmVhZE1vcmUoc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoIXN0YXRlLnJlYWRpbmdNb3JlICYmIHN0YXRlLmNvbnN0cnVjdGVkKSB7XG4gICAgc3RhdGUucmVhZGluZ01vcmUgPSB0cnVlXG4gICAgcHJvY2Vzcy5uZXh0VGljayhtYXliZVJlYWRNb3JlXywgc3RyZWFtLCBzdGF0ZSlcbiAgfVxufVxuZnVuY3Rpb24gbWF5YmVSZWFkTW9yZV8oc3RyZWFtLCBzdGF0ZSkge1xuICAvLyBBdHRlbXB0IHRvIHJlYWQgbW9yZSBkYXRhIGlmIHdlIHNob3VsZC5cbiAgLy9cbiAgLy8gVGhlIGNvbmRpdGlvbnMgZm9yIHJlYWRpbmcgbW9yZSBkYXRhIGFyZSAob25lIG9mKTpcbiAgLy8gLSBOb3QgZW5vdWdoIGRhdGEgYnVmZmVyZWQgKHN0YXRlLmxlbmd0aCA8IHN0YXRlLmhpZ2hXYXRlck1hcmspLiBUaGUgbG9vcFxuICAvLyAgIGlzIHJlc3BvbnNpYmxlIGZvciBmaWxsaW5nIHRoZSBidWZmZXIgd2l0aCBlbm91Z2ggZGF0YSBpZiBzdWNoIGRhdGFcbiAgLy8gICBpcyBhdmFpbGFibGUuIElmIGhpZ2hXYXRlck1hcmsgaXMgMCBhbmQgd2UgYXJlIG5vdCBpbiB0aGUgZmxvd2luZyBtb2RlXG4gIC8vICAgd2Ugc2hvdWxkIF9ub3RfIGF0dGVtcHQgdG8gYnVmZmVyIGFueSBleHRyYSBkYXRhLiBXZSdsbCBnZXQgbW9yZSBkYXRhXG4gIC8vICAgd2hlbiB0aGUgc3RyZWFtIGNvbnN1bWVyIGNhbGxzIHJlYWQoKSBpbnN0ZWFkLlxuICAvLyAtIE5vIGRhdGEgaW4gdGhlIGJ1ZmZlciwgYW5kIHRoZSBzdHJlYW0gaXMgaW4gZmxvd2luZyBtb2RlLiBJbiB0aGlzIG1vZGVcbiAgLy8gICB0aGUgbG9vcCBiZWxvdyBpcyByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgcmVhZCgpIGlzIGNhbGxlZC4gRmFpbGluZyB0b1xuICAvLyAgIGNhbGwgcmVhZCBoZXJlIHdvdWxkIGFib3J0IHRoZSBmbG93IGFuZCB0aGVyZSdzIG5vIG90aGVyIG1lY2hhbmlzbSBmb3JcbiAgLy8gICBjb250aW51aW5nIHRoZSBmbG93IGlmIHRoZSBzdHJlYW0gY29uc3VtZXIgaGFzIGp1c3Qgc3Vic2NyaWJlZCB0byB0aGVcbiAgLy8gICAnZGF0YScgZXZlbnQuXG4gIC8vXG4gIC8vIEluIGFkZGl0aW9uIHRvIHRoZSBhYm92ZSBjb25kaXRpb25zIHRvIGtlZXAgcmVhZGluZyBkYXRhLCB0aGUgZm9sbG93aW5nXG4gIC8vIGNvbmRpdGlvbnMgcHJldmVudCB0aGUgZGF0YSBmcm9tIGJlaW5nIHJlYWQ6XG4gIC8vIC0gVGhlIHN0cmVhbSBoYXMgZW5kZWQgKHN0YXRlLmVuZGVkKS5cbiAgLy8gLSBUaGVyZSBpcyBhbHJlYWR5IGEgcGVuZGluZyAncmVhZCcgb3BlcmF0aW9uIChzdGF0ZS5yZWFkaW5nKS4gVGhpcyBpcyBhXG4gIC8vICAgY2FzZSB3aGVyZSB0aGUgc3RyZWFtIGhhcyBjYWxsZWQgdGhlIGltcGxlbWVudGF0aW9uIGRlZmluZWQgX3JlYWQoKVxuICAvLyAgIG1ldGhvZCwgYnV0IHRoZXkgYXJlIHByb2Nlc3NpbmcgdGhlIGNhbGwgYXN5bmNocm9ub3VzbHkgYW5kIGhhdmUgX25vdF9cbiAgLy8gICBjYWxsZWQgcHVzaCgpIHdpdGggbmV3IGRhdGEuIEluIHRoaXMgY2FzZSB3ZSBza2lwIHBlcmZvcm1pbmcgbW9yZVxuICAvLyAgIHJlYWQoKXMuIFRoZSBleGVjdXRpb24gZW5kcyBpbiB0aGlzIG1ldGhvZCBhZ2FpbiBhZnRlciB0aGUgX3JlYWQoKSBlbmRzXG4gIC8vICAgdXAgY2FsbGluZyBwdXNoKCkgd2l0aCBtb3JlIGRhdGEuXG4gIHdoaWxlIChcbiAgICAhc3RhdGUucmVhZGluZyAmJlxuICAgICFzdGF0ZS5lbmRlZCAmJlxuICAgIChzdGF0ZS5sZW5ndGggPCBzdGF0ZS5oaWdoV2F0ZXJNYXJrIHx8IChzdGF0ZS5mbG93aW5nICYmIHN0YXRlLmxlbmd0aCA9PT0gMCkpXG4gICkge1xuICAgIGNvbnN0IGxlbiA9IHN0YXRlLmxlbmd0aFxuICAgIGRlYnVnKCdtYXliZVJlYWRNb3JlIHJlYWQgMCcpXG4gICAgc3RyZWFtLnJlYWQoMClcbiAgICBpZiAobGVuID09PSBzdGF0ZS5sZW5ndGgpXG4gICAgICAvLyBEaWRuJ3QgZ2V0IGFueSBkYXRhLCBzdG9wIHNwaW5uaW5nLlxuICAgICAgYnJlYWtcbiAgfVxuICBzdGF0ZS5yZWFkaW5nTW9yZSA9IGZhbHNlXG59XG5cbi8vIEFic3RyYWN0IG1ldGhvZC4gIHRvIGJlIG92ZXJyaWRkZW4gaW4gc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gY2xhc3Nlcy5cbi8vIGNhbGwgY2IoZXIsIGRhdGEpIHdoZXJlIGRhdGEgaXMgPD0gbiBpbiBsZW5ndGguXG4vLyBmb3IgdmlydHVhbCAobm9uLXN0cmluZywgbm9uLWJ1ZmZlcikgc3RyZWFtcywgXCJsZW5ndGhcIiBpcyBzb21ld2hhdFxuLy8gYXJiaXRyYXJ5LCBhbmQgcGVyaGFwcyBub3QgdmVyeSBtZWFuaW5nZnVsLlxuUmVhZGFibGUucHJvdG90eXBlLl9yZWFkID0gZnVuY3Rpb24gKG4pIHtcbiAgdGhyb3cgbmV3IEVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVEKCdfcmVhZCgpJylcbn1cblJlYWRhYmxlLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24gKGRlc3QsIHBpcGVPcHRzKSB7XG4gIGNvbnN0IHNyYyA9IHRoaXNcbiAgY29uc3Qgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlXG4gIGlmIChzdGF0ZS5waXBlcy5sZW5ndGggPT09IDEpIHtcbiAgICBpZiAoIXN0YXRlLm11bHRpQXdhaXREcmFpbikge1xuICAgICAgc3RhdGUubXVsdGlBd2FpdERyYWluID0gdHJ1ZVxuICAgICAgc3RhdGUuYXdhaXREcmFpbldyaXRlcnMgPSBuZXcgU2FmZVNldChzdGF0ZS5hd2FpdERyYWluV3JpdGVycyA/IFtzdGF0ZS5hd2FpdERyYWluV3JpdGVyc10gOiBbXSlcbiAgICB9XG4gIH1cbiAgc3RhdGUucGlwZXMucHVzaChkZXN0KVxuICBkZWJ1ZygncGlwZSBjb3VudD0lZCBvcHRzPSVqJywgc3RhdGUucGlwZXMubGVuZ3RoLCBwaXBlT3B0cylcbiAgY29uc3QgZG9FbmQgPSAoIXBpcGVPcHRzIHx8IHBpcGVPcHRzLmVuZCAhPT0gZmFsc2UpICYmIGRlc3QgIT09IHByb2Nlc3Muc3Rkb3V0ICYmIGRlc3QgIT09IHByb2Nlc3Muc3RkZXJyXG4gIGNvbnN0IGVuZEZuID0gZG9FbmQgPyBvbmVuZCA6IHVucGlwZVxuICBpZiAoc3RhdGUuZW5kRW1pdHRlZCkgcHJvY2Vzcy5uZXh0VGljayhlbmRGbilcbiAgZWxzZSBzcmMub25jZSgnZW5kJywgZW5kRm4pXG4gIGRlc3Qub24oJ3VucGlwZScsIG9udW5waXBlKVxuICBmdW5jdGlvbiBvbnVucGlwZShyZWFkYWJsZSwgdW5waXBlSW5mbykge1xuICAgIGRlYnVnKCdvbnVucGlwZScpXG4gICAgaWYgKHJlYWRhYmxlID09PSBzcmMpIHtcbiAgICAgIGlmICh1bnBpcGVJbmZvICYmIHVucGlwZUluZm8uaGFzVW5waXBlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgdW5waXBlSW5mby5oYXNVbnBpcGVkID0gdHJ1ZVxuICAgICAgICBjbGVhbnVwKClcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gb25lbmQoKSB7XG4gICAgZGVidWcoJ29uZW5kJylcbiAgICBkZXN0LmVuZCgpXG4gIH1cbiAgbGV0IG9uZHJhaW5cbiAgbGV0IGNsZWFuZWRVcCA9IGZhbHNlXG4gIGZ1bmN0aW9uIGNsZWFudXAoKSB7XG4gICAgZGVidWcoJ2NsZWFudXAnKVxuICAgIC8vIENsZWFudXAgZXZlbnQgaGFuZGxlcnMgb25jZSB0aGUgcGlwZSBpcyBicm9rZW4uXG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBvbmNsb3NlKVxuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2ZpbmlzaCcsIG9uZmluaXNoKVxuICAgIGlmIChvbmRyYWluKSB7XG4gICAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdkcmFpbicsIG9uZHJhaW4pXG4gICAgfVxuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgb25lcnJvcilcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCd1bnBpcGUnLCBvbnVucGlwZSlcbiAgICBzcmMucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIG9uZW5kKVxuICAgIHNyYy5yZW1vdmVMaXN0ZW5lcignZW5kJywgdW5waXBlKVxuICAgIHNyYy5yZW1vdmVMaXN0ZW5lcignZGF0YScsIG9uZGF0YSlcbiAgICBjbGVhbmVkVXAgPSB0cnVlXG5cbiAgICAvLyBJZiB0aGUgcmVhZGVyIGlzIHdhaXRpbmcgZm9yIGEgZHJhaW4gZXZlbnQgZnJvbSB0aGlzXG4gICAgLy8gc3BlY2lmaWMgd3JpdGVyLCB0aGVuIGl0IHdvdWxkIGNhdXNlIGl0IHRvIG5ldmVyIHN0YXJ0XG4gICAgLy8gZmxvd2luZyBhZ2Fpbi5cbiAgICAvLyBTbywgaWYgdGhpcyBpcyBhd2FpdGluZyBhIGRyYWluLCB0aGVuIHdlIGp1c3QgY2FsbCBpdCBub3cuXG4gICAgLy8gSWYgd2UgZG9uJ3Qga25vdywgdGhlbiBhc3N1bWUgdGhhdCB3ZSBhcmUgd2FpdGluZyBmb3Igb25lLlxuICAgIGlmIChvbmRyYWluICYmIHN0YXRlLmF3YWl0RHJhaW5Xcml0ZXJzICYmICghZGVzdC5fd3JpdGFibGVTdGF0ZSB8fCBkZXN0Ll93cml0YWJsZVN0YXRlLm5lZWREcmFpbikpIG9uZHJhaW4oKVxuICB9XG4gIGZ1bmN0aW9uIHBhdXNlKCkge1xuICAgIC8vIElmIHRoZSB1c2VyIHVucGlwZWQgZHVyaW5nIGBkZXN0LndyaXRlKClgLCBpdCBpcyBwb3NzaWJsZVxuICAgIC8vIHRvIGdldCBzdHVjayBpbiBhIHBlcm1hbmVudGx5IHBhdXNlZCBzdGF0ZSBpZiB0aGF0IHdyaXRlXG4gICAgLy8gYWxzbyByZXR1cm5lZCBmYWxzZS5cbiAgICAvLyA9PiBDaGVjayB3aGV0aGVyIGBkZXN0YCBpcyBzdGlsbCBhIHBpcGluZyBkZXN0aW5hdGlvbi5cbiAgICBpZiAoIWNsZWFuZWRVcCkge1xuICAgICAgaWYgKHN0YXRlLnBpcGVzLmxlbmd0aCA9PT0gMSAmJiBzdGF0ZS5waXBlc1swXSA9PT0gZGVzdCkge1xuICAgICAgICBkZWJ1ZygnZmFsc2Ugd3JpdGUgcmVzcG9uc2UsIHBhdXNlJywgMClcbiAgICAgICAgc3RhdGUuYXdhaXREcmFpbldyaXRlcnMgPSBkZXN0XG4gICAgICAgIHN0YXRlLm11bHRpQXdhaXREcmFpbiA9IGZhbHNlXG4gICAgICB9IGVsc2UgaWYgKHN0YXRlLnBpcGVzLmxlbmd0aCA+IDEgJiYgc3RhdGUucGlwZXMuaW5jbHVkZXMoZGVzdCkpIHtcbiAgICAgICAgZGVidWcoJ2ZhbHNlIHdyaXRlIHJlc3BvbnNlLCBwYXVzZScsIHN0YXRlLmF3YWl0RHJhaW5Xcml0ZXJzLnNpemUpXG4gICAgICAgIHN0YXRlLmF3YWl0RHJhaW5Xcml0ZXJzLmFkZChkZXN0KVxuICAgICAgfVxuICAgICAgc3JjLnBhdXNlKClcbiAgICB9XG4gICAgaWYgKCFvbmRyYWluKSB7XG4gICAgICAvLyBXaGVuIHRoZSBkZXN0IGRyYWlucywgaXQgcmVkdWNlcyB0aGUgYXdhaXREcmFpbiBjb3VudGVyXG4gICAgICAvLyBvbiB0aGUgc291cmNlLiAgVGhpcyB3b3VsZCBiZSBtb3JlIGVsZWdhbnQgd2l0aCBhIC5vbmNlKClcbiAgICAgIC8vIGhhbmRsZXIgaW4gZmxvdygpLCBidXQgYWRkaW5nIGFuZCByZW1vdmluZyByZXBlYXRlZGx5IGlzXG4gICAgICAvLyB0b28gc2xvdy5cbiAgICAgIG9uZHJhaW4gPSBwaXBlT25EcmFpbihzcmMsIGRlc3QpXG4gICAgICBkZXN0Lm9uKCdkcmFpbicsIG9uZHJhaW4pXG4gICAgfVxuICB9XG4gIHNyYy5vbignZGF0YScsIG9uZGF0YSlcbiAgZnVuY3Rpb24gb25kYXRhKGNodW5rKSB7XG4gICAgZGVidWcoJ29uZGF0YScpXG4gICAgY29uc3QgcmV0ID0gZGVzdC53cml0ZShjaHVuaylcbiAgICBkZWJ1ZygnZGVzdC53cml0ZScsIHJldClcbiAgICBpZiAocmV0ID09PSBmYWxzZSkge1xuICAgICAgcGF1c2UoKVxuICAgIH1cbiAgfVxuXG4gIC8vIElmIHRoZSBkZXN0IGhhcyBhbiBlcnJvciwgdGhlbiBzdG9wIHBpcGluZyBpbnRvIGl0LlxuICAvLyBIb3dldmVyLCBkb24ndCBzdXBwcmVzcyB0aGUgdGhyb3dpbmcgYmVoYXZpb3IgZm9yIHRoaXMuXG4gIGZ1bmN0aW9uIG9uZXJyb3IoZXIpIHtcbiAgICBkZWJ1Zygnb25lcnJvcicsIGVyKVxuICAgIHVucGlwZSgpXG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbmVycm9yKVxuICAgIGlmIChkZXN0Lmxpc3RlbmVyQ291bnQoJ2Vycm9yJykgPT09IDApIHtcbiAgICAgIGNvbnN0IHMgPSBkZXN0Ll93cml0YWJsZVN0YXRlIHx8IGRlc3QuX3JlYWRhYmxlU3RhdGVcbiAgICAgIGlmIChzICYmICFzLmVycm9yRW1pdHRlZCkge1xuICAgICAgICAvLyBVc2VyIGluY29ycmVjdGx5IGVtaXR0ZWQgJ2Vycm9yJyBkaXJlY3RseSBvbiB0aGUgc3RyZWFtLlxuICAgICAgICBlcnJvck9yRGVzdHJveShkZXN0LCBlcilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlc3QuZW1pdCgnZXJyb3InLCBlcilcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBNYWtlIHN1cmUgb3VyIGVycm9yIGhhbmRsZXIgaXMgYXR0YWNoZWQgYmVmb3JlIHVzZXJsYW5kIG9uZXMuXG4gIHByZXBlbmRMaXN0ZW5lcihkZXN0LCAnZXJyb3InLCBvbmVycm9yKVxuXG4gIC8vIEJvdGggY2xvc2UgYW5kIGZpbmlzaCBzaG91bGQgdHJpZ2dlciB1bnBpcGUsIGJ1dCBvbmx5IG9uY2UuXG4gIGZ1bmN0aW9uIG9uY2xvc2UoKSB7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZmluaXNoJywgb25maW5pc2gpXG4gICAgdW5waXBlKClcbiAgfVxuICBkZXN0Lm9uY2UoJ2Nsb3NlJywgb25jbG9zZSlcbiAgZnVuY3Rpb24gb25maW5pc2goKSB7XG4gICAgZGVidWcoJ29uZmluaXNoJylcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uY2xvc2UpXG4gICAgdW5waXBlKClcbiAgfVxuICBkZXN0Lm9uY2UoJ2ZpbmlzaCcsIG9uZmluaXNoKVxuICBmdW5jdGlvbiB1bnBpcGUoKSB7XG4gICAgZGVidWcoJ3VucGlwZScpXG4gICAgc3JjLnVucGlwZShkZXN0KVxuICB9XG5cbiAgLy8gVGVsbCB0aGUgZGVzdCB0aGF0IGl0J3MgYmVpbmcgcGlwZWQgdG8uXG4gIGRlc3QuZW1pdCgncGlwZScsIHNyYylcblxuICAvLyBTdGFydCB0aGUgZmxvdyBpZiBpdCBoYXNuJ3QgYmVlbiBzdGFydGVkIGFscmVhZHkuXG5cbiAgaWYgKGRlc3Qud3JpdGFibGVOZWVkRHJhaW4gPT09IHRydWUpIHtcbiAgICBwYXVzZSgpXG4gIH0gZWxzZSBpZiAoIXN0YXRlLmZsb3dpbmcpIHtcbiAgICBkZWJ1ZygncGlwZSByZXN1bWUnKVxuICAgIHNyYy5yZXN1bWUoKVxuICB9XG4gIHJldHVybiBkZXN0XG59XG5mdW5jdGlvbiBwaXBlT25EcmFpbihzcmMsIGRlc3QpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHBpcGVPbkRyYWluRnVuY3Rpb25SZXN1bHQoKSB7XG4gICAgY29uc3Qgc3RhdGUgPSBzcmMuX3JlYWRhYmxlU3RhdGVcblxuICAgIC8vIGBvbmRyYWluYCB3aWxsIGNhbGwgZGlyZWN0bHksXG4gICAgLy8gYHRoaXNgIG1heWJlIG5vdCBhIHJlZmVyZW5jZSB0byBkZXN0LFxuICAgIC8vIHNvIHdlIHVzZSB0aGUgcmVhbCBkZXN0IGhlcmUuXG4gICAgaWYgKHN0YXRlLmF3YWl0RHJhaW5Xcml0ZXJzID09PSBkZXN0KSB7XG4gICAgICBkZWJ1ZygncGlwZU9uRHJhaW4nLCAxKVxuICAgICAgc3RhdGUuYXdhaXREcmFpbldyaXRlcnMgPSBudWxsXG4gICAgfSBlbHNlIGlmIChzdGF0ZS5tdWx0aUF3YWl0RHJhaW4pIHtcbiAgICAgIGRlYnVnKCdwaXBlT25EcmFpbicsIHN0YXRlLmF3YWl0RHJhaW5Xcml0ZXJzLnNpemUpXG4gICAgICBzdGF0ZS5hd2FpdERyYWluV3JpdGVycy5kZWxldGUoZGVzdClcbiAgICB9XG4gICAgaWYgKCghc3RhdGUuYXdhaXREcmFpbldyaXRlcnMgfHwgc3RhdGUuYXdhaXREcmFpbldyaXRlcnMuc2l6ZSA9PT0gMCkgJiYgc3JjLmxpc3RlbmVyQ291bnQoJ2RhdGEnKSkge1xuICAgICAgc3JjLnJlc3VtZSgpXG4gICAgfVxuICB9XG59XG5SZWFkYWJsZS5wcm90b3R5cGUudW5waXBlID0gZnVuY3Rpb24gKGRlc3QpIHtcbiAgY29uc3Qgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlXG4gIGNvbnN0IHVucGlwZUluZm8gPSB7XG4gICAgaGFzVW5waXBlZDogZmFsc2VcbiAgfVxuXG4gIC8vIElmIHdlJ3JlIG5vdCBwaXBpbmcgYW55d2hlcmUsIHRoZW4gZG8gbm90aGluZy5cbiAgaWYgKHN0YXRlLnBpcGVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRoaXNcbiAgaWYgKCFkZXN0KSB7XG4gICAgLy8gcmVtb3ZlIGFsbC5cbiAgICBjb25zdCBkZXN0cyA9IHN0YXRlLnBpcGVzXG4gICAgc3RhdGUucGlwZXMgPSBbXVxuICAgIHRoaXMucGF1c2UoKVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGVzdHMubGVuZ3RoOyBpKyspXG4gICAgICBkZXN0c1tpXS5lbWl0KCd1bnBpcGUnLCB0aGlzLCB7XG4gICAgICAgIGhhc1VucGlwZWQ6IGZhbHNlXG4gICAgICB9KVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvLyBUcnkgdG8gZmluZCB0aGUgcmlnaHQgb25lLlxuICBjb25zdCBpbmRleCA9IEFycmF5UHJvdG90eXBlSW5kZXhPZihzdGF0ZS5waXBlcywgZGVzdClcbiAgaWYgKGluZGV4ID09PSAtMSkgcmV0dXJuIHRoaXNcbiAgc3RhdGUucGlwZXMuc3BsaWNlKGluZGV4LCAxKVxuICBpZiAoc3RhdGUucGlwZXMubGVuZ3RoID09PSAwKSB0aGlzLnBhdXNlKClcbiAgZGVzdC5lbWl0KCd1bnBpcGUnLCB0aGlzLCB1bnBpcGVJbmZvKVxuICByZXR1cm4gdGhpc1xufVxuXG4vLyBTZXQgdXAgZGF0YSBldmVudHMgaWYgdGhleSBhcmUgYXNrZWQgZm9yXG4vLyBFbnN1cmUgcmVhZGFibGUgbGlzdGVuZXJzIGV2ZW50dWFsbHkgZ2V0IHNvbWV0aGluZy5cblJlYWRhYmxlLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIChldiwgZm4pIHtcbiAgY29uc3QgcmVzID0gU3RyZWFtLnByb3RvdHlwZS5vbi5jYWxsKHRoaXMsIGV2LCBmbilcbiAgY29uc3Qgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlXG4gIGlmIChldiA9PT0gJ2RhdGEnKSB7XG4gICAgLy8gVXBkYXRlIHJlYWRhYmxlTGlzdGVuaW5nIHNvIHRoYXQgcmVzdW1lKCkgbWF5IGJlIGEgbm8tb3BcbiAgICAvLyBhIGZldyBsaW5lcyBkb3duLiBUaGlzIGlzIG5lZWRlZCB0byBzdXBwb3J0IG9uY2UoJ3JlYWRhYmxlJykuXG4gICAgc3RhdGUucmVhZGFibGVMaXN0ZW5pbmcgPSB0aGlzLmxpc3RlbmVyQ291bnQoJ3JlYWRhYmxlJykgPiAwXG5cbiAgICAvLyBUcnkgc3RhcnQgZmxvd2luZyBvbiBuZXh0IHRpY2sgaWYgc3RyZWFtIGlzbid0IGV4cGxpY2l0bHkgcGF1c2VkLlxuICAgIGlmIChzdGF0ZS5mbG93aW5nICE9PSBmYWxzZSkgdGhpcy5yZXN1bWUoKVxuICB9IGVsc2UgaWYgKGV2ID09PSAncmVhZGFibGUnKSB7XG4gICAgaWYgKCFzdGF0ZS5lbmRFbWl0dGVkICYmICFzdGF0ZS5yZWFkYWJsZUxpc3RlbmluZykge1xuICAgICAgc3RhdGUucmVhZGFibGVMaXN0ZW5pbmcgPSBzdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlXG4gICAgICBzdGF0ZS5mbG93aW5nID0gZmFsc2VcbiAgICAgIHN0YXRlLmVtaXR0ZWRSZWFkYWJsZSA9IGZhbHNlXG4gICAgICBkZWJ1Zygnb24gcmVhZGFibGUnLCBzdGF0ZS5sZW5ndGgsIHN0YXRlLnJlYWRpbmcpXG4gICAgICBpZiAoc3RhdGUubGVuZ3RoKSB7XG4gICAgICAgIGVtaXRSZWFkYWJsZSh0aGlzKVxuICAgICAgfSBlbHNlIGlmICghc3RhdGUucmVhZGluZykge1xuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKG5SZWFkaW5nTmV4dFRpY2ssIHRoaXMpXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZXNcbn1cblJlYWRhYmxlLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IFJlYWRhYmxlLnByb3RvdHlwZS5vblxuUmVhZGFibGUucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gKGV2LCBmbikge1xuICBjb25zdCByZXMgPSBTdHJlYW0ucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyLmNhbGwodGhpcywgZXYsIGZuKVxuICBpZiAoZXYgPT09ICdyZWFkYWJsZScpIHtcbiAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGlzIHNvbWVvbmUgc3RpbGwgbGlzdGVuaW5nIHRvXG4gICAgLy8gcmVhZGFibGUgYW5kIHJlc2V0IHRoZSBzdGF0ZS4gSG93ZXZlciB0aGlzIG5lZWRzIHRvIGhhcHBlblxuICAgIC8vIGFmdGVyIHJlYWRhYmxlIGhhcyBiZWVuIGVtaXR0ZWQgYnV0IGJlZm9yZSBJL08gKG5leHRUaWNrKSB0b1xuICAgIC8vIHN1cHBvcnQgb25jZSgncmVhZGFibGUnLCBmbikgY3ljbGVzLiBUaGlzIG1lYW5zIHRoYXQgY2FsbGluZ1xuICAgIC8vIHJlc3VtZSB3aXRoaW4gdGhlIHNhbWUgdGljayB3aWxsIGhhdmUgbm9cbiAgICAvLyBlZmZlY3QuXG4gICAgcHJvY2Vzcy5uZXh0VGljayh1cGRhdGVSZWFkYWJsZUxpc3RlbmluZywgdGhpcylcbiAgfVxuICByZXR1cm4gcmVzXG59XG5SZWFkYWJsZS5wcm90b3R5cGUub2ZmID0gUmVhZGFibGUucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyXG5SZWFkYWJsZS5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID0gZnVuY3Rpb24gKGV2KSB7XG4gIGNvbnN0IHJlcyA9IFN0cmVhbS5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgaWYgKGV2ID09PSAncmVhZGFibGUnIHx8IGV2ID09PSB1bmRlZmluZWQpIHtcbiAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGlzIHNvbWVvbmUgc3RpbGwgbGlzdGVuaW5nIHRvXG4gICAgLy8gcmVhZGFibGUgYW5kIHJlc2V0IHRoZSBzdGF0ZS4gSG93ZXZlciB0aGlzIG5lZWRzIHRvIGhhcHBlblxuICAgIC8vIGFmdGVyIHJlYWRhYmxlIGhhcyBiZWVuIGVtaXR0ZWQgYnV0IGJlZm9yZSBJL08gKG5leHRUaWNrKSB0b1xuICAgIC8vIHN1cHBvcnQgb25jZSgncmVhZGFibGUnLCBmbikgY3ljbGVzLiBUaGlzIG1lYW5zIHRoYXQgY2FsbGluZ1xuICAgIC8vIHJlc3VtZSB3aXRoaW4gdGhlIHNhbWUgdGljayB3aWxsIGhhdmUgbm9cbiAgICAvLyBlZmZlY3QuXG4gICAgcHJvY2Vzcy5uZXh0VGljayh1cGRhdGVSZWFkYWJsZUxpc3RlbmluZywgdGhpcylcbiAgfVxuICByZXR1cm4gcmVzXG59XG5mdW5jdGlvbiB1cGRhdGVSZWFkYWJsZUxpc3RlbmluZyhzZWxmKSB7XG4gIGNvbnN0IHN0YXRlID0gc2VsZi5fcmVhZGFibGVTdGF0ZVxuICBzdGF0ZS5yZWFkYWJsZUxpc3RlbmluZyA9IHNlbGYubGlzdGVuZXJDb3VudCgncmVhZGFibGUnKSA+IDBcbiAgaWYgKHN0YXRlLnJlc3VtZVNjaGVkdWxlZCAmJiBzdGF0ZVtrUGF1c2VkXSA9PT0gZmFsc2UpIHtcbiAgICAvLyBGbG93aW5nIG5lZWRzIHRvIGJlIHNldCB0byB0cnVlIG5vdywgb3RoZXJ3aXNlXG4gICAgLy8gdGhlIHVwY29taW5nIHJlc3VtZSB3aWxsIG5vdCBmbG93LlxuICAgIHN0YXRlLmZsb3dpbmcgPSB0cnVlXG5cbiAgICAvLyBDcnVkZSB3YXkgdG8gY2hlY2sgaWYgd2Ugc2hvdWxkIHJlc3VtZS5cbiAgfSBlbHNlIGlmIChzZWxmLmxpc3RlbmVyQ291bnQoJ2RhdGEnKSA+IDApIHtcbiAgICBzZWxmLnJlc3VtZSgpXG4gIH0gZWxzZSBpZiAoIXN0YXRlLnJlYWRhYmxlTGlzdGVuaW5nKSB7XG4gICAgc3RhdGUuZmxvd2luZyA9IG51bGxcbiAgfVxufVxuZnVuY3Rpb24gblJlYWRpbmdOZXh0VGljayhzZWxmKSB7XG4gIGRlYnVnKCdyZWFkYWJsZSBuZXh0dGljayByZWFkIDAnKVxuICBzZWxmLnJlYWQoMClcbn1cblxuLy8gcGF1c2UoKSBhbmQgcmVzdW1lKCkgYXJlIHJlbW5hbnRzIG9mIHRoZSBsZWdhY3kgcmVhZGFibGUgc3RyZWFtIEFQSVxuLy8gSWYgdGhlIHVzZXIgdXNlcyB0aGVtLCB0aGVuIHN3aXRjaCBpbnRvIG9sZCBtb2RlLlxuUmVhZGFibGUucHJvdG90eXBlLnJlc3VtZSA9IGZ1bmN0aW9uICgpIHtcbiAgY29uc3Qgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlXG4gIGlmICghc3RhdGUuZmxvd2luZykge1xuICAgIGRlYnVnKCdyZXN1bWUnKVxuICAgIC8vIFdlIGZsb3cgb25seSBpZiB0aGVyZSBpcyBubyBvbmUgbGlzdGVuaW5nXG4gICAgLy8gZm9yIHJlYWRhYmxlLCBidXQgd2Ugc3RpbGwgaGF2ZSB0byBjYWxsXG4gICAgLy8gcmVzdW1lKCkuXG4gICAgc3RhdGUuZmxvd2luZyA9ICFzdGF0ZS5yZWFkYWJsZUxpc3RlbmluZ1xuICAgIHJlc3VtZSh0aGlzLCBzdGF0ZSlcbiAgfVxuICBzdGF0ZVtrUGF1c2VkXSA9IGZhbHNlXG4gIHJldHVybiB0aGlzXG59XG5mdW5jdGlvbiByZXN1bWUoc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoIXN0YXRlLnJlc3VtZVNjaGVkdWxlZCkge1xuICAgIHN0YXRlLnJlc3VtZVNjaGVkdWxlZCA9IHRydWVcbiAgICBwcm9jZXNzLm5leHRUaWNrKHJlc3VtZV8sIHN0cmVhbSwgc3RhdGUpXG4gIH1cbn1cbmZ1bmN0aW9uIHJlc3VtZV8oc3RyZWFtLCBzdGF0ZSkge1xuICBkZWJ1ZygncmVzdW1lJywgc3RhdGUucmVhZGluZylcbiAgaWYgKCFzdGF0ZS5yZWFkaW5nKSB7XG4gICAgc3RyZWFtLnJlYWQoMClcbiAgfVxuICBzdGF0ZS5yZXN1bWVTY2hlZHVsZWQgPSBmYWxzZVxuICBzdHJlYW0uZW1pdCgncmVzdW1lJylcbiAgZmxvdyhzdHJlYW0pXG4gIGlmIChzdGF0ZS5mbG93aW5nICYmICFzdGF0ZS5yZWFkaW5nKSBzdHJlYW0ucmVhZCgwKVxufVxuUmVhZGFibGUucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24gKCkge1xuICBkZWJ1ZygnY2FsbCBwYXVzZSBmbG93aW5nPSVqJywgdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nKVxuICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nICE9PSBmYWxzZSkge1xuICAgIGRlYnVnKCdwYXVzZScpXG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nID0gZmFsc2VcbiAgICB0aGlzLmVtaXQoJ3BhdXNlJylcbiAgfVxuICB0aGlzLl9yZWFkYWJsZVN0YXRlW2tQYXVzZWRdID0gdHJ1ZVxuICByZXR1cm4gdGhpc1xufVxuZnVuY3Rpb24gZmxvdyhzdHJlYW0pIHtcbiAgY29uc3Qgc3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGVcbiAgZGVidWcoJ2Zsb3cnLCBzdGF0ZS5mbG93aW5nKVxuICB3aGlsZSAoc3RhdGUuZmxvd2luZyAmJiBzdHJlYW0ucmVhZCgpICE9PSBudWxsKTtcbn1cblxuLy8gV3JhcCBhbiBvbGQtc3R5bGUgc3RyZWFtIGFzIHRoZSBhc3luYyBkYXRhIHNvdXJjZS5cbi8vIFRoaXMgaXMgKm5vdCogcGFydCBvZiB0aGUgcmVhZGFibGUgc3RyZWFtIGludGVyZmFjZS5cbi8vIEl0IGlzIGFuIHVnbHkgdW5mb3J0dW5hdGUgbWVzcyBvZiBoaXN0b3J5LlxuUmVhZGFibGUucHJvdG90eXBlLndyYXAgPSBmdW5jdGlvbiAoc3RyZWFtKSB7XG4gIGxldCBwYXVzZWQgPSBmYWxzZVxuXG4gIC8vIFRPRE8gKHJvbmFnKTogU2hvdWxkIHRoaXMuZGVzdHJveShlcnIpIGVtaXRcbiAgLy8gJ2Vycm9yJyBvbiB0aGUgd3JhcHBlZCBzdHJlYW0/IFdvdWxkIHJlcXVpcmVcbiAgLy8gYSBzdGF0aWMgZmFjdG9yeSBtZXRob2QsIGUuZy4gUmVhZGFibGUud3JhcChzdHJlYW0pLlxuXG4gIHN0cmVhbS5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgIGlmICghdGhpcy5wdXNoKGNodW5rKSAmJiBzdHJlYW0ucGF1c2UpIHtcbiAgICAgIHBhdXNlZCA9IHRydWVcbiAgICAgIHN0cmVhbS5wYXVzZSgpXG4gICAgfVxuICB9KVxuICBzdHJlYW0ub24oJ2VuZCcsICgpID0+IHtcbiAgICB0aGlzLnB1c2gobnVsbClcbiAgfSlcbiAgc3RyZWFtLm9uKCdlcnJvcicsIChlcnIpID0+IHtcbiAgICBlcnJvck9yRGVzdHJveSh0aGlzLCBlcnIpXG4gIH0pXG4gIHN0cmVhbS5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgdGhpcy5kZXN0cm95KClcbiAgfSlcbiAgc3RyZWFtLm9uKCdkZXN0cm95JywgKCkgPT4ge1xuICAgIHRoaXMuZGVzdHJveSgpXG4gIH0pXG4gIHRoaXMuX3JlYWQgPSAoKSA9PiB7XG4gICAgaWYgKHBhdXNlZCAmJiBzdHJlYW0ucmVzdW1lKSB7XG4gICAgICBwYXVzZWQgPSBmYWxzZVxuICAgICAgc3RyZWFtLnJlc3VtZSgpXG4gICAgfVxuICB9XG5cbiAgLy8gUHJveHkgYWxsIHRoZSBvdGhlciBtZXRob2RzLiBJbXBvcnRhbnQgd2hlbiB3cmFwcGluZyBmaWx0ZXJzIGFuZCBkdXBsZXhlcy5cbiAgY29uc3Qgc3RyZWFtS2V5cyA9IE9iamVjdEtleXMoc3RyZWFtKVxuICBmb3IgKGxldCBqID0gMTsgaiA8IHN0cmVhbUtleXMubGVuZ3RoOyBqKyspIHtcbiAgICBjb25zdCBpID0gc3RyZWFtS2V5c1tqXVxuICAgIGlmICh0aGlzW2ldID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIHN0cmVhbVtpXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpc1tpXSA9IHN0cmVhbVtpXS5iaW5kKHN0cmVhbSlcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblJlYWRhYmxlLnByb3RvdHlwZVtTeW1ib2xBc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHN0cmVhbVRvQXN5bmNJdGVyYXRvcih0aGlzKVxufVxuUmVhZGFibGUucHJvdG90eXBlLml0ZXJhdG9yID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhbGlkYXRlT2JqZWN0KG9wdGlvbnMsICdvcHRpb25zJylcbiAgfVxuICByZXR1cm4gc3RyZWFtVG9Bc3luY0l0ZXJhdG9yKHRoaXMsIG9wdGlvbnMpXG59XG5mdW5jdGlvbiBzdHJlYW1Ub0FzeW5jSXRlcmF0b3Ioc3RyZWFtLCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2Ygc3RyZWFtLnJlYWQgIT09ICdmdW5jdGlvbicpIHtcbiAgICBzdHJlYW0gPSBSZWFkYWJsZS53cmFwKHN0cmVhbSwge1xuICAgICAgb2JqZWN0TW9kZTogdHJ1ZVxuICAgIH0pXG4gIH1cbiAgY29uc3QgaXRlciA9IGNyZWF0ZUFzeW5jSXRlcmF0b3Ioc3RyZWFtLCBvcHRpb25zKVxuICBpdGVyLnN0cmVhbSA9IHN0cmVhbVxuICByZXR1cm4gaXRlclxufVxuYXN5bmMgZnVuY3Rpb24qIGNyZWF0ZUFzeW5jSXRlcmF0b3Ioc3RyZWFtLCBvcHRpb25zKSB7XG4gIGxldCBjYWxsYmFjayA9IG5vcFxuICBmdW5jdGlvbiBuZXh0KHJlc29sdmUpIHtcbiAgICBpZiAodGhpcyA9PT0gc3RyZWFtKSB7XG4gICAgICBjYWxsYmFjaygpXG4gICAgICBjYWxsYmFjayA9IG5vcFxuICAgIH0gZWxzZSB7XG4gICAgICBjYWxsYmFjayA9IHJlc29sdmVcbiAgICB9XG4gIH1cbiAgc3RyZWFtLm9uKCdyZWFkYWJsZScsIG5leHQpXG4gIGxldCBlcnJvclxuICBjb25zdCBjbGVhbnVwID0gZW9zKFxuICAgIHN0cmVhbSxcbiAgICB7XG4gICAgICB3cml0YWJsZTogZmFsc2VcbiAgICB9LFxuICAgIChlcnIpID0+IHtcbiAgICAgIGVycm9yID0gZXJyID8gYWdncmVnYXRlVHdvRXJyb3JzKGVycm9yLCBlcnIpIDogbnVsbFxuICAgICAgY2FsbGJhY2soKVxuICAgICAgY2FsbGJhY2sgPSBub3BcbiAgICB9XG4gIClcbiAgdHJ5IHtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgY29uc3QgY2h1bmsgPSBzdHJlYW0uZGVzdHJveWVkID8gbnVsbCA6IHN0cmVhbS5yZWFkKClcbiAgICAgIGlmIChjaHVuayAhPT0gbnVsbCkge1xuICAgICAgICB5aWVsZCBjaHVua1xuICAgICAgfSBlbHNlIGlmIChlcnJvcikge1xuICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgfSBlbHNlIGlmIChlcnJvciA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKG5leHQpXG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBlcnJvciA9IGFnZ3JlZ2F0ZVR3b0Vycm9ycyhlcnJvciwgZXJyKVxuICAgIHRocm93IGVycm9yXG4gIH0gZmluYWxseSB7XG4gICAgaWYgKFxuICAgICAgKGVycm9yIHx8IChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IG9wdGlvbnMuZGVzdHJveU9uUmV0dXJuKSAhPT0gZmFsc2UpICYmXG4gICAgICAoZXJyb3IgPT09IHVuZGVmaW5lZCB8fCBzdHJlYW0uX3JlYWRhYmxlU3RhdGUuYXV0b0Rlc3Ryb3kpXG4gICAgKSB7XG4gICAgICBkZXN0cm95SW1wbC5kZXN0cm95ZXIoc3RyZWFtLCBudWxsKVxuICAgIH0gZWxzZSB7XG4gICAgICBzdHJlYW0ub2ZmKCdyZWFkYWJsZScsIG5leHQpXG4gICAgICBjbGVhbnVwKClcbiAgICB9XG4gIH1cbn1cblxuLy8gTWFraW5nIGl0IGV4cGxpY2l0IHRoZXNlIHByb3BlcnRpZXMgYXJlIG5vdCBlbnVtZXJhYmxlXG4vLyBiZWNhdXNlIG90aGVyd2lzZSBzb21lIHByb3RvdHlwZSBtYW5pcHVsYXRpb24gaW5cbi8vIHVzZXJsYW5kIHdpbGwgZmFpbC5cbk9iamVjdERlZmluZVByb3BlcnRpZXMoUmVhZGFibGUucHJvdG90eXBlLCB7XG4gIHJlYWRhYmxlOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGdldCgpIHtcbiAgICAgIGNvbnN0IHIgPSB0aGlzLl9yZWFkYWJsZVN0YXRlXG4gICAgICAvLyByLnJlYWRhYmxlID09PSBmYWxzZSBtZWFucyB0aGF0IHRoaXMgaXMgcGFydCBvZiBhIER1cGxleCBzdHJlYW1cbiAgICAgIC8vIHdoZXJlIHRoZSByZWFkYWJsZSBzaWRlIHdhcyBkaXNhYmxlZCB1cG9uIGNvbnN0cnVjdGlvbi5cbiAgICAgIC8vIENvbXBhdC4gVGhlIHVzZXIgbWlnaHQgbWFudWFsbHkgZGlzYWJsZSByZWFkYWJsZSBzaWRlIHRocm91Z2hcbiAgICAgIC8vIGRlcHJlY2F0ZWQgc2V0dGVyLlxuICAgICAgcmV0dXJuICEhciAmJiByLnJlYWRhYmxlICE9PSBmYWxzZSAmJiAhci5kZXN0cm95ZWQgJiYgIXIuZXJyb3JFbWl0dGVkICYmICFyLmVuZEVtaXR0ZWRcbiAgICB9LFxuICAgIHNldCh2YWwpIHtcbiAgICAgIC8vIEJhY2t3YXJkcyBjb21wYXQuXG4gICAgICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZSkge1xuICAgICAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLnJlYWRhYmxlID0gISF2YWxcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIHJlYWRhYmxlRGlkUmVhZDoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmRhdGFFbWl0dGVkXG4gICAgfVxuICB9LFxuICByZWFkYWJsZUFib3J0ZWQ6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gISEoXG4gICAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUucmVhZGFibGUgIT09IGZhbHNlICYmXG4gICAgICAgICh0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCB8fCB0aGlzLl9yZWFkYWJsZVN0YXRlLmVycm9yZWQpICYmXG4gICAgICAgICF0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWRcbiAgICAgIClcbiAgICB9XG4gIH0sXG4gIHJlYWRhYmxlSGlnaFdhdGVyTWFyazoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmhpZ2hXYXRlck1hcmtcbiAgICB9XG4gIH0sXG4gIHJlYWRhYmxlQnVmZmVyOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUgJiYgdGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXJcbiAgICB9XG4gIH0sXG4gIHJlYWRhYmxlRmxvd2luZzoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmdcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKHN0YXRlKSB7XG4gICAgICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZSkge1xuICAgICAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcgPSBzdGF0ZVxuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgcmVhZGFibGVMZW5ndGg6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUubGVuZ3RoXG4gICAgfVxuICB9LFxuICByZWFkYWJsZU9iamVjdE1vZGU6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUgPyB0aGlzLl9yZWFkYWJsZVN0YXRlLm9iamVjdE1vZGUgOiBmYWxzZVxuICAgIH1cbiAgfSxcbiAgcmVhZGFibGVFbmNvZGluZzoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZSA/IHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5jb2RpbmcgOiBudWxsXG4gICAgfVxuICB9LFxuICBlcnJvcmVkOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlID8gdGhpcy5fcmVhZGFibGVTdGF0ZS5lcnJvcmVkIDogbnVsbFxuICAgIH1cbiAgfSxcbiAgY2xvc2VkOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlID8gdGhpcy5fcmVhZGFibGVTdGF0ZS5jbG9zZWQgOiBmYWxzZVxuICAgIH1cbiAgfSxcbiAgZGVzdHJveWVkOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlID8gdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQgOiBmYWxzZVxuICAgIH0sXG4gICAgc2V0KHZhbHVlKSB7XG4gICAgICAvLyBXZSBpZ25vcmUgdGhlIHZhbHVlIGlmIHRoZSBzdHJlYW1cbiAgICAgIC8vIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCB5ZXQuXG4gICAgICBpZiAoIXRoaXMuX3JlYWRhYmxlU3RhdGUpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIEJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHRoZSB1c2VyIGlzIGV4cGxpY2l0bHlcbiAgICAgIC8vIG1hbmFnaW5nIGRlc3Ryb3llZC5cbiAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkID0gdmFsdWVcbiAgICB9XG4gIH0sXG4gIHJlYWRhYmxlRW5kZWQ6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUgPyB0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQgOiBmYWxzZVxuICAgIH1cbiAgfVxufSlcbk9iamVjdERlZmluZVByb3BlcnRpZXMoUmVhZGFibGVTdGF0ZS5wcm90b3R5cGUsIHtcbiAgLy8gTGVnYWN5IGdldHRlciBmb3IgYHBpcGVzQ291bnRgLlxuICBwaXBlc0NvdW50OiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnBpcGVzLmxlbmd0aFxuICAgIH1cbiAgfSxcbiAgLy8gTGVnYWN5IHByb3BlcnR5IGZvciBgcGF1c2VkYC5cbiAgcGF1c2VkOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzW2tQYXVzZWRdICE9PSBmYWxzZVxuICAgIH0sXG4gICAgc2V0KHZhbHVlKSB7XG4gICAgICB0aGlzW2tQYXVzZWRdID0gISF2YWx1ZVxuICAgIH1cbiAgfVxufSlcblxuLy8gRXhwb3NlZCBmb3IgdGVzdGluZyBwdXJwb3NlcyBvbmx5LlxuUmVhZGFibGUuX2Zyb21MaXN0ID0gZnJvbUxpc3RcblxuLy8gUGx1Y2sgb2ZmIG4gYnl0ZXMgZnJvbSBhbiBhcnJheSBvZiBidWZmZXJzLlxuLy8gTGVuZ3RoIGlzIHRoZSBjb21iaW5lZCBsZW5ndGhzIG9mIGFsbCB0aGUgYnVmZmVycyBpbiB0aGUgbGlzdC5cbi8vIFRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gYmUgaW5saW5hYmxlLCBzbyBwbGVhc2UgdGFrZSBjYXJlIHdoZW4gbWFraW5nXG4vLyBjaGFuZ2VzIHRvIHRoZSBmdW5jdGlvbiBib2R5LlxuZnVuY3Rpb24gZnJvbUxpc3Qobiwgc3RhdGUpIHtcbiAgLy8gbm90aGluZyBidWZmZXJlZC5cbiAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGxcbiAgbGV0IHJldFxuICBpZiAoc3RhdGUub2JqZWN0TW9kZSkgcmV0ID0gc3RhdGUuYnVmZmVyLnNoaWZ0KClcbiAgZWxzZSBpZiAoIW4gfHwgbiA+PSBzdGF0ZS5sZW5ndGgpIHtcbiAgICAvLyBSZWFkIGl0IGFsbCwgdHJ1bmNhdGUgdGhlIGxpc3QuXG4gICAgaWYgKHN0YXRlLmRlY29kZXIpIHJldCA9IHN0YXRlLmJ1ZmZlci5qb2luKCcnKVxuICAgIGVsc2UgaWYgKHN0YXRlLmJ1ZmZlci5sZW5ndGggPT09IDEpIHJldCA9IHN0YXRlLmJ1ZmZlci5maXJzdCgpXG4gICAgZWxzZSByZXQgPSBzdGF0ZS5idWZmZXIuY29uY2F0KHN0YXRlLmxlbmd0aClcbiAgICBzdGF0ZS5idWZmZXIuY2xlYXIoKVxuICB9IGVsc2Uge1xuICAgIC8vIHJlYWQgcGFydCBvZiBsaXN0LlxuICAgIHJldCA9IHN0YXRlLmJ1ZmZlci5jb25zdW1lKG4sIHN0YXRlLmRlY29kZXIpXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuZnVuY3Rpb24gZW5kUmVhZGFibGUoc3RyZWFtKSB7XG4gIGNvbnN0IHN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlXG4gIGRlYnVnKCdlbmRSZWFkYWJsZScsIHN0YXRlLmVuZEVtaXR0ZWQpXG4gIGlmICghc3RhdGUuZW5kRW1pdHRlZCkge1xuICAgIHN0YXRlLmVuZGVkID0gdHJ1ZVxuICAgIHByb2Nlc3MubmV4dFRpY2soZW5kUmVhZGFibGVOVCwgc3RhdGUsIHN0cmVhbSlcbiAgfVxufVxuZnVuY3Rpb24gZW5kUmVhZGFibGVOVChzdGF0ZSwgc3RyZWFtKSB7XG4gIGRlYnVnKCdlbmRSZWFkYWJsZU5UJywgc3RhdGUuZW5kRW1pdHRlZCwgc3RhdGUubGVuZ3RoKVxuXG4gIC8vIENoZWNrIHRoYXQgd2UgZGlkbid0IGdldCBvbmUgbGFzdCB1bnNoaWZ0LlxuICBpZiAoIXN0YXRlLmVycm9yZWQgJiYgIXN0YXRlLmNsb3NlRW1pdHRlZCAmJiAhc3RhdGUuZW5kRW1pdHRlZCAmJiBzdGF0ZS5sZW5ndGggPT09IDApIHtcbiAgICBzdGF0ZS5lbmRFbWl0dGVkID0gdHJ1ZVxuICAgIHN0cmVhbS5lbWl0KCdlbmQnKVxuICAgIGlmIChzdHJlYW0ud3JpdGFibGUgJiYgc3RyZWFtLmFsbG93SGFsZk9wZW4gPT09IGZhbHNlKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGVuZFdyaXRhYmxlTlQsIHN0cmVhbSlcbiAgICB9IGVsc2UgaWYgKHN0YXRlLmF1dG9EZXN0cm95KSB7XG4gICAgICAvLyBJbiBjYXNlIG9mIGR1cGxleCBzdHJlYW1zIHdlIG5lZWQgYSB3YXkgdG8gZGV0ZWN0XG4gICAgICAvLyBpZiB0aGUgd3JpdGFibGUgc2lkZSBpcyByZWFkeSBmb3IgYXV0b0Rlc3Ryb3kgYXMgd2VsbC5cbiAgICAgIGNvbnN0IHdTdGF0ZSA9IHN0cmVhbS5fd3JpdGFibGVTdGF0ZVxuICAgICAgY29uc3QgYXV0b0Rlc3Ryb3kgPVxuICAgICAgICAhd1N0YXRlIHx8XG4gICAgICAgICh3U3RhdGUuYXV0b0Rlc3Ryb3kgJiZcbiAgICAgICAgICAvLyBXZSBkb24ndCBleHBlY3QgdGhlIHdyaXRhYmxlIHRvIGV2ZXIgJ2ZpbmlzaCdcbiAgICAgICAgICAvLyBpZiB3cml0YWJsZSBpcyBleHBsaWNpdGx5IHNldCB0byBmYWxzZS5cbiAgICAgICAgICAod1N0YXRlLmZpbmlzaGVkIHx8IHdTdGF0ZS53cml0YWJsZSA9PT0gZmFsc2UpKVxuICAgICAgaWYgKGF1dG9EZXN0cm95KSB7XG4gICAgICAgIHN0cmVhbS5kZXN0cm95KClcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGVuZFdyaXRhYmxlTlQoc3RyZWFtKSB7XG4gIGNvbnN0IHdyaXRhYmxlID0gc3RyZWFtLndyaXRhYmxlICYmICFzdHJlYW0ud3JpdGFibGVFbmRlZCAmJiAhc3RyZWFtLmRlc3Ryb3llZFxuICBpZiAod3JpdGFibGUpIHtcbiAgICBzdHJlYW0uZW5kKClcbiAgfVxufVxuUmVhZGFibGUuZnJvbSA9IGZ1bmN0aW9uIChpdGVyYWJsZSwgb3B0cykge1xuICByZXR1cm4gZnJvbShSZWFkYWJsZSwgaXRlcmFibGUsIG9wdHMpXG59XG5sZXQgd2ViU3RyZWFtc0FkYXB0ZXJzXG5cbi8vIExhenkgdG8gYXZvaWQgY2lyY3VsYXIgcmVmZXJlbmNlc1xuZnVuY3Rpb24gbGF6eVdlYlN0cmVhbXMoKSB7XG4gIGlmICh3ZWJTdHJlYW1zQWRhcHRlcnMgPT09IHVuZGVmaW5lZCkgd2ViU3RyZWFtc0FkYXB0ZXJzID0ge31cbiAgcmV0dXJuIHdlYlN0cmVhbXNBZGFwdGVyc1xufVxuUmVhZGFibGUuZnJvbVdlYiA9IGZ1bmN0aW9uIChyZWFkYWJsZVN0cmVhbSwgb3B0aW9ucykge1xuICByZXR1cm4gbGF6eVdlYlN0cmVhbXMoKS5uZXdTdHJlYW1SZWFkYWJsZUZyb21SZWFkYWJsZVN0cmVhbShyZWFkYWJsZVN0cmVhbSwgb3B0aW9ucylcbn1cblJlYWRhYmxlLnRvV2ViID0gZnVuY3Rpb24gKHN0cmVhbVJlYWRhYmxlLCBvcHRpb25zKSB7XG4gIHJldHVybiBsYXp5V2ViU3RyZWFtcygpLm5ld1JlYWRhYmxlU3RyZWFtRnJvbVN0cmVhbVJlYWRhYmxlKHN0cmVhbVJlYWRhYmxlLCBvcHRpb25zKVxufVxuUmVhZGFibGUud3JhcCA9IGZ1bmN0aW9uIChzcmMsIG9wdGlvbnMpIHtcbiAgdmFyIF9yZWYsIF9zcmMkcmVhZGFibGVPYmplY3RNb1xuICByZXR1cm4gbmV3IFJlYWRhYmxlKHtcbiAgICBvYmplY3RNb2RlOlxuICAgICAgKF9yZWYgPVxuICAgICAgICAoX3NyYyRyZWFkYWJsZU9iamVjdE1vID0gc3JjLnJlYWRhYmxlT2JqZWN0TW9kZSkgIT09IG51bGwgJiYgX3NyYyRyZWFkYWJsZU9iamVjdE1vICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IF9zcmMkcmVhZGFibGVPYmplY3RNb1xuICAgICAgICAgIDogc3JjLm9iamVjdE1vZGUpICE9PSBudWxsICYmIF9yZWYgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IF9yZWZcbiAgICAgICAgOiB0cnVlLFxuICAgIC4uLm9wdGlvbnMsXG4gICAgZGVzdHJveShlcnIsIGNhbGxiYWNrKSB7XG4gICAgICBkZXN0cm95SW1wbC5kZXN0cm95ZXIoc3JjLCBlcnIpXG4gICAgICBjYWxsYmFjayhlcnIpXG4gICAgfVxuICB9KS53cmFwKHNyYylcbn1cbiIsCiAgICAiLyogcmVwbGFjZW1lbnQgc3RhcnQgKi9cblxuY29uc3QgcHJvY2VzcyA9IHJlcXVpcmUoJ3Byb2Nlc3MvJylcblxuLyogcmVwbGFjZW1lbnQgZW5kICovXG4vLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuLy8gQSBiaXQgc2ltcGxlciB0aGFuIHJlYWRhYmxlIHN0cmVhbXMuXG4vLyBJbXBsZW1lbnQgYW4gYXN5bmMgLl93cml0ZShjaHVuaywgZW5jb2RpbmcsIGNiKSwgYW5kIGl0J2xsIGhhbmRsZSBhbGxcbi8vIHRoZSBkcmFpbiBldmVudCBlbWlzc2lvbiBhbmQgYnVmZmVyaW5nLlxuXG47KCd1c2Ugc3RyaWN0JylcbmNvbnN0IHtcbiAgQXJyYXlQcm90b3R5cGVTbGljZSxcbiAgRXJyb3IsXG4gIEZ1bmN0aW9uUHJvdG90eXBlU3ltYm9sSGFzSW5zdGFuY2UsXG4gIE9iamVjdERlZmluZVByb3BlcnR5LFxuICBPYmplY3REZWZpbmVQcm9wZXJ0aWVzLFxuICBPYmplY3RTZXRQcm90b3R5cGVPZixcbiAgU3RyaW5nUHJvdG90eXBlVG9Mb3dlckNhc2UsXG4gIFN5bWJvbCxcbiAgU3ltYm9sSGFzSW5zdGFuY2Vcbn0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL3ByaW1vcmRpYWxzJylcbm1vZHVsZS5leHBvcnRzID0gV3JpdGFibGVcbldyaXRhYmxlLldyaXRhYmxlU3RhdGUgPSBXcml0YWJsZVN0YXRlXG5jb25zdCB7IEV2ZW50RW1pdHRlcjogRUUgfSA9IHJlcXVpcmUoJ2V2ZW50cycpXG5jb25zdCBTdHJlYW0gPSByZXF1aXJlKCcuL2xlZ2FjeScpLlN0cmVhbVxuY29uc3QgeyBCdWZmZXIgfSA9IHJlcXVpcmUoJ2J1ZmZlcicpXG5jb25zdCBkZXN0cm95SW1wbCA9IHJlcXVpcmUoJy4vZGVzdHJveScpXG5jb25zdCB7IGFkZEFib3J0U2lnbmFsIH0gPSByZXF1aXJlKCcuL2FkZC1hYm9ydC1zaWduYWwnKVxuY29uc3QgeyBnZXRIaWdoV2F0ZXJNYXJrLCBnZXREZWZhdWx0SGlnaFdhdGVyTWFyayB9ID0gcmVxdWlyZSgnLi9zdGF0ZScpXG5jb25zdCB7XG4gIEVSUl9JTlZBTElEX0FSR19UWVBFLFxuICBFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCxcbiAgRVJSX01VTFRJUExFX0NBTExCQUNLLFxuICBFUlJfU1RSRUFNX0NBTk5PVF9QSVBFLFxuICBFUlJfU1RSRUFNX0RFU1RST1lFRCxcbiAgRVJSX1NUUkVBTV9BTFJFQURZX0ZJTklTSEVELFxuICBFUlJfU1RSRUFNX05VTExfVkFMVUVTLFxuICBFUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORCxcbiAgRVJSX1VOS05PV05fRU5DT0RJTkdcbn0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL2Vycm9ycycpLmNvZGVzXG5jb25zdCB7IGVycm9yT3JEZXN0cm95IH0gPSBkZXN0cm95SW1wbFxuT2JqZWN0U2V0UHJvdG90eXBlT2YoV3JpdGFibGUucHJvdG90eXBlLCBTdHJlYW0ucHJvdG90eXBlKVxuT2JqZWN0U2V0UHJvdG90eXBlT2YoV3JpdGFibGUsIFN0cmVhbSlcbmZ1bmN0aW9uIG5vcCgpIHt9XG5jb25zdCBrT25GaW5pc2hlZCA9IFN5bWJvbCgna09uRmluaXNoZWQnKVxuZnVuY3Rpb24gV3JpdGFibGVTdGF0ZShvcHRpb25zLCBzdHJlYW0sIGlzRHVwbGV4KSB7XG4gIC8vIER1cGxleCBzdHJlYW1zIGFyZSBib3RoIHJlYWRhYmxlIGFuZCB3cml0YWJsZSwgYnV0IHNoYXJlXG4gIC8vIHRoZSBzYW1lIG9wdGlvbnMgb2JqZWN0LlxuICAvLyBIb3dldmVyLCBzb21lIGNhc2VzIHJlcXVpcmUgc2V0dGluZyBvcHRpb25zIHRvIGRpZmZlcmVudFxuICAvLyB2YWx1ZXMgZm9yIHRoZSByZWFkYWJsZSBhbmQgdGhlIHdyaXRhYmxlIHNpZGVzIG9mIHRoZSBkdXBsZXggc3RyZWFtLFxuICAvLyBlLmcuIG9wdGlvbnMucmVhZGFibGVPYmplY3RNb2RlIHZzLiBvcHRpb25zLndyaXRhYmxlT2JqZWN0TW9kZSwgZXRjLlxuICBpZiAodHlwZW9mIGlzRHVwbGV4ICE9PSAnYm9vbGVhbicpIGlzRHVwbGV4ID0gc3RyZWFtIGluc3RhbmNlb2YgcmVxdWlyZSgnLi9kdXBsZXgnKVxuXG4gIC8vIE9iamVjdCBzdHJlYW0gZmxhZyB0byBpbmRpY2F0ZSB3aGV0aGVyIG9yIG5vdCB0aGlzIHN0cmVhbVxuICAvLyBjb250YWlucyBidWZmZXJzIG9yIG9iamVjdHMuXG4gIHRoaXMub2JqZWN0TW9kZSA9ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5vYmplY3RNb2RlKVxuICBpZiAoaXNEdXBsZXgpIHRoaXMub2JqZWN0TW9kZSA9IHRoaXMub2JqZWN0TW9kZSB8fCAhIShvcHRpb25zICYmIG9wdGlvbnMud3JpdGFibGVPYmplY3RNb2RlKVxuXG4gIC8vIFRoZSBwb2ludCBhdCB3aGljaCB3cml0ZSgpIHN0YXJ0cyByZXR1cm5pbmcgZmFsc2VcbiAgLy8gTm90ZTogMCBpcyBhIHZhbGlkIHZhbHVlLCBtZWFucyB0aGF0IHdlIGFsd2F5cyByZXR1cm4gZmFsc2UgaWZcbiAgLy8gdGhlIGVudGlyZSBidWZmZXIgaXMgbm90IGZsdXNoZWQgaW1tZWRpYXRlbHkgb24gd3JpdGUoKS5cbiAgdGhpcy5oaWdoV2F0ZXJNYXJrID0gb3B0aW9uc1xuICAgID8gZ2V0SGlnaFdhdGVyTWFyayh0aGlzLCBvcHRpb25zLCAnd3JpdGFibGVIaWdoV2F0ZXJNYXJrJywgaXNEdXBsZXgpXG4gICAgOiBnZXREZWZhdWx0SGlnaFdhdGVyTWFyayhmYWxzZSlcblxuICAvLyBpZiBfZmluYWwgaGFzIGJlZW4gY2FsbGVkLlxuICB0aGlzLmZpbmFsQ2FsbGVkID0gZmFsc2VcblxuICAvLyBkcmFpbiBldmVudCBmbGFnLlxuICB0aGlzLm5lZWREcmFpbiA9IGZhbHNlXG4gIC8vIEF0IHRoZSBzdGFydCBvZiBjYWxsaW5nIGVuZCgpXG4gIHRoaXMuZW5kaW5nID0gZmFsc2VcbiAgLy8gV2hlbiBlbmQoKSBoYXMgYmVlbiBjYWxsZWQsIGFuZCByZXR1cm5lZC5cbiAgdGhpcy5lbmRlZCA9IGZhbHNlXG4gIC8vIFdoZW4gJ2ZpbmlzaCcgaXMgZW1pdHRlZC5cbiAgdGhpcy5maW5pc2hlZCA9IGZhbHNlXG5cbiAgLy8gSGFzIGl0IGJlZW4gZGVzdHJveWVkXG4gIHRoaXMuZGVzdHJveWVkID0gZmFsc2VcblxuICAvLyBTaG91bGQgd2UgZGVjb2RlIHN0cmluZ3MgaW50byBidWZmZXJzIGJlZm9yZSBwYXNzaW5nIHRvIF93cml0ZT9cbiAgLy8gdGhpcyBpcyBoZXJlIHNvIHRoYXQgc29tZSBub2RlLWNvcmUgc3RyZWFtcyBjYW4gb3B0aW1pemUgc3RyaW5nXG4gIC8vIGhhbmRsaW5nIGF0IGEgbG93ZXIgbGV2ZWwuXG4gIGNvbnN0IG5vRGVjb2RlID0gISEob3B0aW9ucyAmJiBvcHRpb25zLmRlY29kZVN0cmluZ3MgPT09IGZhbHNlKVxuICB0aGlzLmRlY29kZVN0cmluZ3MgPSAhbm9EZWNvZGVcblxuICAvLyBDcnlwdG8gaXMga2luZCBvZiBvbGQgYW5kIGNydXN0eS4gIEhpc3RvcmljYWxseSwgaXRzIGRlZmF1bHQgc3RyaW5nXG4gIC8vIGVuY29kaW5nIGlzICdiaW5hcnknIHNvIHdlIGhhdmUgdG8gbWFrZSB0aGlzIGNvbmZpZ3VyYWJsZS5cbiAgLy8gRXZlcnl0aGluZyBlbHNlIGluIHRoZSB1bml2ZXJzZSB1c2VzICd1dGY4JywgdGhvdWdoLlxuICB0aGlzLmRlZmF1bHRFbmNvZGluZyA9IChvcHRpb25zICYmIG9wdGlvbnMuZGVmYXVsdEVuY29kaW5nKSB8fCAndXRmOCdcblxuICAvLyBOb3QgYW4gYWN0dWFsIGJ1ZmZlciB3ZSBrZWVwIHRyYWNrIG9mLCBidXQgYSBtZWFzdXJlbWVudFxuICAvLyBvZiBob3cgbXVjaCB3ZSdyZSB3YWl0aW5nIHRvIGdldCBwdXNoZWQgdG8gc29tZSB1bmRlcmx5aW5nXG4gIC8vIHNvY2tldCBvciBmaWxlLlxuICB0aGlzLmxlbmd0aCA9IDBcblxuICAvLyBBIGZsYWcgdG8gc2VlIHdoZW4gd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBhIHdyaXRlLlxuICB0aGlzLndyaXRpbmcgPSBmYWxzZVxuXG4gIC8vIFdoZW4gdHJ1ZSBhbGwgd3JpdGVzIHdpbGwgYmUgYnVmZmVyZWQgdW50aWwgLnVuY29yaygpIGNhbGwuXG4gIHRoaXMuY29ya2VkID0gMFxuXG4gIC8vIEEgZmxhZyB0byBiZSBhYmxlIHRvIHRlbGwgaWYgdGhlIG9ud3JpdGUgY2IgaXMgY2FsbGVkIGltbWVkaWF0ZWx5LFxuICAvLyBvciBvbiBhIGxhdGVyIHRpY2suICBXZSBzZXQgdGhpcyB0byB0cnVlIGF0IGZpcnN0LCBiZWNhdXNlIGFueVxuICAvLyBhY3Rpb25zIHRoYXQgc2hvdWxkbid0IGhhcHBlbiB1bnRpbCBcImxhdGVyXCIgc2hvdWxkIGdlbmVyYWxseSBhbHNvXG4gIC8vIG5vdCBoYXBwZW4gYmVmb3JlIHRoZSBmaXJzdCB3cml0ZSBjYWxsLlxuICB0aGlzLnN5bmMgPSB0cnVlXG5cbiAgLy8gQSBmbGFnIHRvIGtub3cgaWYgd2UncmUgcHJvY2Vzc2luZyBwcmV2aW91c2x5IGJ1ZmZlcmVkIGl0ZW1zLCB3aGljaFxuICAvLyBtYXkgY2FsbCB0aGUgX3dyaXRlKCkgY2FsbGJhY2sgaW4gdGhlIHNhbWUgdGljaywgc28gdGhhdCB3ZSBkb24ndFxuICAvLyBlbmQgdXAgaW4gYW4gb3ZlcmxhcHBlZCBvbndyaXRlIHNpdHVhdGlvbi5cbiAgdGhpcy5idWZmZXJQcm9jZXNzaW5nID0gZmFsc2VcblxuICAvLyBUaGUgY2FsbGJhY2sgdGhhdCdzIHBhc3NlZCB0byBfd3JpdGUoY2h1bmssIGNiKS5cbiAgdGhpcy5vbndyaXRlID0gb253cml0ZS5iaW5kKHVuZGVmaW5lZCwgc3RyZWFtKVxuXG4gIC8vIFRoZSBjYWxsYmFjayB0aGF0IHRoZSB1c2VyIHN1cHBsaWVzIHRvIHdyaXRlKGNodW5rLCBlbmNvZGluZywgY2IpLlxuICB0aGlzLndyaXRlY2IgPSBudWxsXG5cbiAgLy8gVGhlIGFtb3VudCB0aGF0IGlzIGJlaW5nIHdyaXR0ZW4gd2hlbiBfd3JpdGUgaXMgY2FsbGVkLlxuICB0aGlzLndyaXRlbGVuID0gMFxuXG4gIC8vIFN0b3JhZ2UgZm9yIGRhdGEgcGFzc2VkIHRvIHRoZSBhZnRlcldyaXRlKCkgY2FsbGJhY2sgaW4gY2FzZSBvZlxuICAvLyBzeW5jaHJvbm91cyBfd3JpdGUoKSBjb21wbGV0aW9uLlxuICB0aGlzLmFmdGVyV3JpdGVUaWNrSW5mbyA9IG51bGxcbiAgcmVzZXRCdWZmZXIodGhpcylcblxuICAvLyBOdW1iZXIgb2YgcGVuZGluZyB1c2VyLXN1cHBsaWVkIHdyaXRlIGNhbGxiYWNrc1xuICAvLyB0aGlzIG11c3QgYmUgMCBiZWZvcmUgJ2ZpbmlzaCcgY2FuIGJlIGVtaXR0ZWQuXG4gIHRoaXMucGVuZGluZ2NiID0gMFxuXG4gIC8vIFN0cmVhbSBpcyBzdGlsbCBiZWluZyBjb25zdHJ1Y3RlZCBhbmQgY2Fubm90IGJlXG4gIC8vIGRlc3Ryb3llZCB1bnRpbCBjb25zdHJ1Y3Rpb24gZmluaXNoZWQgb3IgZmFpbGVkLlxuICAvLyBBc3luYyBjb25zdHJ1Y3Rpb24gaXMgb3B0IGluLCB0aGVyZWZvcmUgd2Ugc3RhcnQgYXNcbiAgLy8gY29uc3RydWN0ZWQuXG4gIHRoaXMuY29uc3RydWN0ZWQgPSB0cnVlXG5cbiAgLy8gRW1pdCBwcmVmaW5pc2ggaWYgdGhlIG9ubHkgdGhpbmcgd2UncmUgd2FpdGluZyBmb3IgaXMgX3dyaXRlIGNic1xuICAvLyBUaGlzIGlzIHJlbGV2YW50IGZvciBzeW5jaHJvbm91cyBUcmFuc2Zvcm0gc3RyZWFtcy5cbiAgdGhpcy5wcmVmaW5pc2hlZCA9IGZhbHNlXG5cbiAgLy8gVHJ1ZSBpZiB0aGUgZXJyb3Igd2FzIGFscmVhZHkgZW1pdHRlZCBhbmQgc2hvdWxkIG5vdCBiZSB0aHJvd24gYWdhaW4uXG4gIHRoaXMuZXJyb3JFbWl0dGVkID0gZmFsc2VcblxuICAvLyBTaG91bGQgY2xvc2UgYmUgZW1pdHRlZCBvbiBkZXN0cm95LiBEZWZhdWx0cyB0byB0cnVlLlxuICB0aGlzLmVtaXRDbG9zZSA9ICFvcHRpb25zIHx8IG9wdGlvbnMuZW1pdENsb3NlICE9PSBmYWxzZVxuXG4gIC8vIFNob3VsZCAuZGVzdHJveSgpIGJlIGNhbGxlZCBhZnRlciAnZmluaXNoJyAoYW5kIHBvdGVudGlhbGx5ICdlbmQnKS5cbiAgdGhpcy5hdXRvRGVzdHJveSA9ICFvcHRpb25zIHx8IG9wdGlvbnMuYXV0b0Rlc3Ryb3kgIT09IGZhbHNlXG5cbiAgLy8gSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHN0cmVhbSBoYXMgZXJyb3JlZC4gV2hlbiB0cnVlIGFsbCB3cml0ZSgpIGNhbGxzXG4gIC8vIHNob3VsZCByZXR1cm4gZmFsc2UuIFRoaXMgaXMgbmVlZGVkIHNpbmNlIHdoZW4gYXV0b0Rlc3Ryb3lcbiAgLy8gaXMgZGlzYWJsZWQgd2UgbmVlZCBhIHdheSB0byB0ZWxsIHdoZXRoZXIgdGhlIHN0cmVhbSBoYXMgZmFpbGVkLlxuICB0aGlzLmVycm9yZWQgPSBudWxsXG5cbiAgLy8gSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHN0cmVhbSBoYXMgZmluaXNoZWQgZGVzdHJveWluZy5cbiAgdGhpcy5jbG9zZWQgPSBmYWxzZVxuXG4gIC8vIFRydWUgaWYgY2xvc2UgaGFzIGJlZW4gZW1pdHRlZCBvciB3b3VsZCBoYXZlIGJlZW4gZW1pdHRlZFxuICAvLyBkZXBlbmRpbmcgb24gZW1pdENsb3NlLlxuICB0aGlzLmNsb3NlRW1pdHRlZCA9IGZhbHNlXG4gIHRoaXNba09uRmluaXNoZWRdID0gW11cbn1cbmZ1bmN0aW9uIHJlc2V0QnVmZmVyKHN0YXRlKSB7XG4gIHN0YXRlLmJ1ZmZlcmVkID0gW11cbiAgc3RhdGUuYnVmZmVyZWRJbmRleCA9IDBcbiAgc3RhdGUuYWxsQnVmZmVycyA9IHRydWVcbiAgc3RhdGUuYWxsTm9vcCA9IHRydWVcbn1cbldyaXRhYmxlU3RhdGUucHJvdG90eXBlLmdldEJ1ZmZlciA9IGZ1bmN0aW9uIGdldEJ1ZmZlcigpIHtcbiAgcmV0dXJuIEFycmF5UHJvdG90eXBlU2xpY2UodGhpcy5idWZmZXJlZCwgdGhpcy5idWZmZXJlZEluZGV4KVxufVxuT2JqZWN0RGVmaW5lUHJvcGVydHkoV3JpdGFibGVTdGF0ZS5wcm90b3R5cGUsICdidWZmZXJlZFJlcXVlc3RDb3VudCcsIHtcbiAgX19wcm90b19fOiBudWxsLFxuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuYnVmZmVyZWQubGVuZ3RoIC0gdGhpcy5idWZmZXJlZEluZGV4XG4gIH1cbn0pXG5mdW5jdGlvbiBXcml0YWJsZShvcHRpb25zKSB7XG4gIC8vIFdyaXRhYmxlIGN0b3IgaXMgYXBwbGllZCB0byBEdXBsZXhlcywgdG9vLlxuICAvLyBgcmVhbEhhc0luc3RhbmNlYCBpcyBuZWNlc3NhcnkgYmVjYXVzZSB1c2luZyBwbGFpbiBgaW5zdGFuY2VvZmBcbiAgLy8gd291bGQgcmV0dXJuIGZhbHNlLCBhcyBubyBgX3dyaXRhYmxlU3RhdGVgIHByb3BlcnR5IGlzIGF0dGFjaGVkLlxuXG4gIC8vIFRyeWluZyB0byB1c2UgdGhlIGN1c3RvbSBgaW5zdGFuY2VvZmAgZm9yIFdyaXRhYmxlIGhlcmUgd2lsbCBhbHNvIGJyZWFrIHRoZVxuICAvLyBOb2RlLmpzIExhenlUcmFuc2Zvcm0gaW1wbGVtZW50YXRpb24sIHdoaWNoIGhhcyBhIG5vbi10cml2aWFsIGdldHRlciBmb3JcbiAgLy8gYF93cml0YWJsZVN0YXRlYCB0aGF0IHdvdWxkIGxlYWQgdG8gaW5maW5pdGUgcmVjdXJzaW9uLlxuXG4gIC8vIENoZWNraW5nIGZvciBhIFN0cmVhbS5EdXBsZXggaW5zdGFuY2UgaXMgZmFzdGVyIGhlcmUgaW5zdGVhZCBvZiBpbnNpZGVcbiAgLy8gdGhlIFdyaXRhYmxlU3RhdGUgY29uc3RydWN0b3IsIGF0IGxlYXN0IHdpdGggVjggNi41LlxuICBjb25zdCBpc0R1cGxleCA9IHRoaXMgaW5zdGFuY2VvZiByZXF1aXJlKCcuL2R1cGxleCcpXG4gIGlmICghaXNEdXBsZXggJiYgIUZ1bmN0aW9uUHJvdG90eXBlU3ltYm9sSGFzSW5zdGFuY2UoV3JpdGFibGUsIHRoaXMpKSByZXR1cm4gbmV3IFdyaXRhYmxlKG9wdGlvbnMpXG4gIHRoaXMuX3dyaXRhYmxlU3RhdGUgPSBuZXcgV3JpdGFibGVTdGF0ZShvcHRpb25zLCB0aGlzLCBpc0R1cGxleClcbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMud3JpdGUgPT09ICdmdW5jdGlvbicpIHRoaXMuX3dyaXRlID0gb3B0aW9ucy53cml0ZVxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy53cml0ZXYgPT09ICdmdW5jdGlvbicpIHRoaXMuX3dyaXRldiA9IG9wdGlvbnMud3JpdGV2XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmRlc3Ryb3kgPT09ICdmdW5jdGlvbicpIHRoaXMuX2Rlc3Ryb3kgPSBvcHRpb25zLmRlc3Ryb3lcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuZmluYWwgPT09ICdmdW5jdGlvbicpIHRoaXMuX2ZpbmFsID0gb3B0aW9ucy5maW5hbFxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5jb25zdHJ1Y3QgPT09ICdmdW5jdGlvbicpIHRoaXMuX2NvbnN0cnVjdCA9IG9wdGlvbnMuY29uc3RydWN0XG4gICAgaWYgKG9wdGlvbnMuc2lnbmFsKSBhZGRBYm9ydFNpZ25hbChvcHRpb25zLnNpZ25hbCwgdGhpcylcbiAgfVxuICBTdHJlYW0uY2FsbCh0aGlzLCBvcHRpb25zKVxuICBkZXN0cm95SW1wbC5jb25zdHJ1Y3QodGhpcywgKCkgPT4ge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5fd3JpdGFibGVTdGF0ZVxuICAgIGlmICghc3RhdGUud3JpdGluZykge1xuICAgICAgY2xlYXJCdWZmZXIodGhpcywgc3RhdGUpXG4gICAgfVxuICAgIGZpbmlzaE1heWJlKHRoaXMsIHN0YXRlKVxuICB9KVxufVxuT2JqZWN0RGVmaW5lUHJvcGVydHkoV3JpdGFibGUsIFN5bWJvbEhhc0luc3RhbmNlLCB7XG4gIF9fcHJvdG9fXzogbnVsbCxcbiAgdmFsdWU6IGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgICBpZiAoRnVuY3Rpb25Qcm90b3R5cGVTeW1ib2xIYXNJbnN0YW5jZSh0aGlzLCBvYmplY3QpKSByZXR1cm4gdHJ1ZVxuICAgIGlmICh0aGlzICE9PSBXcml0YWJsZSkgcmV0dXJuIGZhbHNlXG4gICAgcmV0dXJuIG9iamVjdCAmJiBvYmplY3QuX3dyaXRhYmxlU3RhdGUgaW5zdGFuY2VvZiBXcml0YWJsZVN0YXRlXG4gIH1cbn0pXG5cbi8vIE90aGVyd2lzZSBwZW9wbGUgY2FuIHBpcGUgV3JpdGFibGUgc3RyZWFtcywgd2hpY2ggaXMganVzdCB3cm9uZy5cbldyaXRhYmxlLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24gKCkge1xuICBlcnJvck9yRGVzdHJveSh0aGlzLCBuZXcgRVJSX1NUUkVBTV9DQU5OT1RfUElQRSgpKVxufVxuZnVuY3Rpb24gX3dyaXRlKHN0cmVhbSwgY2h1bmssIGVuY29kaW5nLCBjYikge1xuICBjb25zdCBzdGF0ZSA9IHN0cmVhbS5fd3JpdGFibGVTdGF0ZVxuICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2IgPSBlbmNvZGluZ1xuICAgIGVuY29kaW5nID0gc3RhdGUuZGVmYXVsdEVuY29kaW5nXG4gIH0gZWxzZSB7XG4gICAgaWYgKCFlbmNvZGluZykgZW5jb2RpbmcgPSBzdGF0ZS5kZWZhdWx0RW5jb2RpbmdcbiAgICBlbHNlIGlmIChlbmNvZGluZyAhPT0gJ2J1ZmZlcicgJiYgIUJ1ZmZlci5pc0VuY29kaW5nKGVuY29kaW5nKSkgdGhyb3cgbmV3IEVSUl9VTktOT1dOX0VOQ09ESU5HKGVuY29kaW5nKVxuICAgIGlmICh0eXBlb2YgY2IgIT09ICdmdW5jdGlvbicpIGNiID0gbm9wXG4gIH1cbiAgaWYgKGNodW5rID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVSUl9TVFJFQU1fTlVMTF9WQUxVRVMoKVxuICB9IGVsc2UgaWYgKCFzdGF0ZS5vYmplY3RNb2RlKSB7XG4gICAgaWYgKHR5cGVvZiBjaHVuayA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmIChzdGF0ZS5kZWNvZGVTdHJpbmdzICE9PSBmYWxzZSkge1xuICAgICAgICBjaHVuayA9IEJ1ZmZlci5mcm9tKGNodW5rLCBlbmNvZGluZylcbiAgICAgICAgZW5jb2RpbmcgPSAnYnVmZmVyJ1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2h1bmsgaW5zdGFuY2VvZiBCdWZmZXIpIHtcbiAgICAgIGVuY29kaW5nID0gJ2J1ZmZlcidcbiAgICB9IGVsc2UgaWYgKFN0cmVhbS5faXNVaW50OEFycmF5KGNodW5rKSkge1xuICAgICAgY2h1bmsgPSBTdHJlYW0uX3VpbnQ4QXJyYXlUb0J1ZmZlcihjaHVuaylcbiAgICAgIGVuY29kaW5nID0gJ2J1ZmZlcidcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKCdjaHVuaycsIFsnc3RyaW5nJywgJ0J1ZmZlcicsICdVaW50OEFycmF5J10sIGNodW5rKVxuICAgIH1cbiAgfVxuICBsZXQgZXJyXG4gIGlmIChzdGF0ZS5lbmRpbmcpIHtcbiAgICBlcnIgPSBuZXcgRVJSX1NUUkVBTV9XUklURV9BRlRFUl9FTkQoKVxuICB9IGVsc2UgaWYgKHN0YXRlLmRlc3Ryb3llZCkge1xuICAgIGVyciA9IG5ldyBFUlJfU1RSRUFNX0RFU1RST1lFRCgnd3JpdGUnKVxuICB9XG4gIGlmIChlcnIpIHtcbiAgICBwcm9jZXNzLm5leHRUaWNrKGNiLCBlcnIpXG4gICAgZXJyb3JPckRlc3Ryb3koc3RyZWFtLCBlcnIsIHRydWUpXG4gICAgcmV0dXJuIGVyclxuICB9XG4gIHN0YXRlLnBlbmRpbmdjYisrXG4gIHJldHVybiB3cml0ZU9yQnVmZmVyKHN0cmVhbSwgc3RhdGUsIGNodW5rLCBlbmNvZGluZywgY2IpXG59XG5Xcml0YWJsZS5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICByZXR1cm4gX3dyaXRlKHRoaXMsIGNodW5rLCBlbmNvZGluZywgY2IpID09PSB0cnVlXG59XG5Xcml0YWJsZS5wcm90b3R5cGUuY29yayA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5fd3JpdGFibGVTdGF0ZS5jb3JrZWQrK1xufVxuV3JpdGFibGUucHJvdG90eXBlLnVuY29yayA9IGZ1bmN0aW9uICgpIHtcbiAgY29uc3Qgc3RhdGUgPSB0aGlzLl93cml0YWJsZVN0YXRlXG4gIGlmIChzdGF0ZS5jb3JrZWQpIHtcbiAgICBzdGF0ZS5jb3JrZWQtLVxuICAgIGlmICghc3RhdGUud3JpdGluZykgY2xlYXJCdWZmZXIodGhpcywgc3RhdGUpXG4gIH1cbn1cbldyaXRhYmxlLnByb3RvdHlwZS5zZXREZWZhdWx0RW5jb2RpbmcgPSBmdW5jdGlvbiBzZXREZWZhdWx0RW5jb2RpbmcoZW5jb2RpbmcpIHtcbiAgLy8gbm9kZTo6UGFyc2VFbmNvZGluZygpIHJlcXVpcmVzIGxvd2VyIGNhc2UuXG4gIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnKSBlbmNvZGluZyA9IFN0cmluZ1Byb3RvdHlwZVRvTG93ZXJDYXNlKGVuY29kaW5nKVxuICBpZiAoIUJ1ZmZlci5pc0VuY29kaW5nKGVuY29kaW5nKSkgdGhyb3cgbmV3IEVSUl9VTktOT1dOX0VOQ09ESU5HKGVuY29kaW5nKVxuICB0aGlzLl93cml0YWJsZVN0YXRlLmRlZmF1bHRFbmNvZGluZyA9IGVuY29kaW5nXG4gIHJldHVybiB0aGlzXG59XG5cbi8vIElmIHdlJ3JlIGFscmVhZHkgd3JpdGluZyBzb21ldGhpbmcsIHRoZW4ganVzdCBwdXQgdGhpc1xuLy8gaW4gdGhlIHF1ZXVlLCBhbmQgd2FpdCBvdXIgdHVybi4gIE90aGVyd2lzZSwgY2FsbCBfd3JpdGVcbi8vIElmIHdlIHJldHVybiBmYWxzZSwgdGhlbiB3ZSBuZWVkIGEgZHJhaW4gZXZlbnQsIHNvIHNldCB0aGF0IGZsYWcuXG5mdW5jdGlvbiB3cml0ZU9yQnVmZmVyKHN0cmVhbSwgc3RhdGUsIGNodW5rLCBlbmNvZGluZywgY2FsbGJhY2spIHtcbiAgY29uc3QgbGVuID0gc3RhdGUub2JqZWN0TW9kZSA/IDEgOiBjaHVuay5sZW5ndGhcbiAgc3RhdGUubGVuZ3RoICs9IGxlblxuXG4gIC8vIHN0cmVhbS5fd3JpdGUgcmVzZXRzIHN0YXRlLmxlbmd0aFxuICBjb25zdCByZXQgPSBzdGF0ZS5sZW5ndGggPCBzdGF0ZS5oaWdoV2F0ZXJNYXJrXG4gIC8vIFdlIG11c3QgZW5zdXJlIHRoYXQgcHJldmlvdXMgbmVlZERyYWluIHdpbGwgbm90IGJlIHJlc2V0IHRvIGZhbHNlLlxuICBpZiAoIXJldCkgc3RhdGUubmVlZERyYWluID0gdHJ1ZVxuICBpZiAoc3RhdGUud3JpdGluZyB8fCBzdGF0ZS5jb3JrZWQgfHwgc3RhdGUuZXJyb3JlZCB8fCAhc3RhdGUuY29uc3RydWN0ZWQpIHtcbiAgICBzdGF0ZS5idWZmZXJlZC5wdXNoKHtcbiAgICAgIGNodW5rLFxuICAgICAgZW5jb2RpbmcsXG4gICAgICBjYWxsYmFja1xuICAgIH0pXG4gICAgaWYgKHN0YXRlLmFsbEJ1ZmZlcnMgJiYgZW5jb2RpbmcgIT09ICdidWZmZXInKSB7XG4gICAgICBzdGF0ZS5hbGxCdWZmZXJzID0gZmFsc2VcbiAgICB9XG4gICAgaWYgKHN0YXRlLmFsbE5vb3AgJiYgY2FsbGJhY2sgIT09IG5vcCkge1xuICAgICAgc3RhdGUuYWxsTm9vcCA9IGZhbHNlXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHN0YXRlLndyaXRlbGVuID0gbGVuXG4gICAgc3RhdGUud3JpdGVjYiA9IGNhbGxiYWNrXG4gICAgc3RhdGUud3JpdGluZyA9IHRydWVcbiAgICBzdGF0ZS5zeW5jID0gdHJ1ZVxuICAgIHN0cmVhbS5fd3JpdGUoY2h1bmssIGVuY29kaW5nLCBzdGF0ZS5vbndyaXRlKVxuICAgIHN0YXRlLnN5bmMgPSBmYWxzZVxuICB9XG5cbiAgLy8gUmV0dXJuIGZhbHNlIGlmIGVycm9yZWQgb3IgZGVzdHJveWVkIGluIG9yZGVyIHRvIGJyZWFrXG4gIC8vIGFueSBzeW5jaHJvbm91cyB3aGlsZShzdHJlYW0ud3JpdGUoZGF0YSkpIGxvb3BzLlxuICByZXR1cm4gcmV0ICYmICFzdGF0ZS5lcnJvcmVkICYmICFzdGF0ZS5kZXN0cm95ZWRcbn1cbmZ1bmN0aW9uIGRvV3JpdGUoc3RyZWFtLCBzdGF0ZSwgd3JpdGV2LCBsZW4sIGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgc3RhdGUud3JpdGVsZW4gPSBsZW5cbiAgc3RhdGUud3JpdGVjYiA9IGNiXG4gIHN0YXRlLndyaXRpbmcgPSB0cnVlXG4gIHN0YXRlLnN5bmMgPSB0cnVlXG4gIGlmIChzdGF0ZS5kZXN0cm95ZWQpIHN0YXRlLm9ud3JpdGUobmV3IEVSUl9TVFJFQU1fREVTVFJPWUVEKCd3cml0ZScpKVxuICBlbHNlIGlmICh3cml0ZXYpIHN0cmVhbS5fd3JpdGV2KGNodW5rLCBzdGF0ZS5vbndyaXRlKVxuICBlbHNlIHN0cmVhbS5fd3JpdGUoY2h1bmssIGVuY29kaW5nLCBzdGF0ZS5vbndyaXRlKVxuICBzdGF0ZS5zeW5jID0gZmFsc2Vcbn1cbmZ1bmN0aW9uIG9ud3JpdGVFcnJvcihzdHJlYW0sIHN0YXRlLCBlciwgY2IpIHtcbiAgLS1zdGF0ZS5wZW5kaW5nY2JcbiAgY2IoZXIpXG4gIC8vIEVuc3VyZSBjYWxsYmFja3MgYXJlIGludm9rZWQgZXZlbiB3aGVuIGF1dG9EZXN0cm95IGlzXG4gIC8vIG5vdCBlbmFibGVkLiBQYXNzaW5nIGBlcmAgaGVyZSBkb2Vzbid0IG1ha2Ugc2Vuc2Ugc2luY2VcbiAgLy8gaXQncyByZWxhdGVkIHRvIG9uZSBzcGVjaWZpYyB3cml0ZSwgbm90IHRvIHRoZSBidWZmZXJlZFxuICAvLyB3cml0ZXMuXG4gIGVycm9yQnVmZmVyKHN0YXRlKVxuICAvLyBUaGlzIGNhbiBlbWl0IGVycm9yLCBidXQgZXJyb3IgbXVzdCBhbHdheXMgZm9sbG93IGNiLlxuICBlcnJvck9yRGVzdHJveShzdHJlYW0sIGVyKVxufVxuZnVuY3Rpb24gb253cml0ZShzdHJlYW0sIGVyKSB7XG4gIGNvbnN0IHN0YXRlID0gc3RyZWFtLl93cml0YWJsZVN0YXRlXG4gIGNvbnN0IHN5bmMgPSBzdGF0ZS5zeW5jXG4gIGNvbnN0IGNiID0gc3RhdGUud3JpdGVjYlxuICBpZiAodHlwZW9mIGNiICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgZXJyb3JPckRlc3Ryb3koc3RyZWFtLCBuZXcgRVJSX01VTFRJUExFX0NBTExCQUNLKCkpXG4gICAgcmV0dXJuXG4gIH1cbiAgc3RhdGUud3JpdGluZyA9IGZhbHNlXG4gIHN0YXRlLndyaXRlY2IgPSBudWxsXG4gIHN0YXRlLmxlbmd0aCAtPSBzdGF0ZS53cml0ZWxlblxuICBzdGF0ZS53cml0ZWxlbiA9IDBcbiAgaWYgKGVyKSB7XG4gICAgLy8gQXZvaWQgVjggbGVhaywgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvMzQxMDMjaXNzdWVjb21tZW50LTY1MjAwMjM2NFxuICAgIGVyLnN0YWNrIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zXG5cbiAgICBpZiAoIXN0YXRlLmVycm9yZWQpIHtcbiAgICAgIHN0YXRlLmVycm9yZWQgPSBlclxuICAgIH1cblxuICAgIC8vIEluIGNhc2Ugb2YgZHVwbGV4IHN0cmVhbXMgd2UgbmVlZCB0byBub3RpZnkgdGhlIHJlYWRhYmxlIHNpZGUgb2YgdGhlXG4gICAgLy8gZXJyb3IuXG4gICAgaWYgKHN0cmVhbS5fcmVhZGFibGVTdGF0ZSAmJiAhc3RyZWFtLl9yZWFkYWJsZVN0YXRlLmVycm9yZWQpIHtcbiAgICAgIHN0cmVhbS5fcmVhZGFibGVTdGF0ZS5lcnJvcmVkID0gZXJcbiAgICB9XG4gICAgaWYgKHN5bmMpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2sob253cml0ZUVycm9yLCBzdHJlYW0sIHN0YXRlLCBlciwgY2IpXG4gICAgfSBlbHNlIHtcbiAgICAgIG9ud3JpdGVFcnJvcihzdHJlYW0sIHN0YXRlLCBlciwgY2IpXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChzdGF0ZS5idWZmZXJlZC5sZW5ndGggPiBzdGF0ZS5idWZmZXJlZEluZGV4KSB7XG4gICAgICBjbGVhckJ1ZmZlcihzdHJlYW0sIHN0YXRlKVxuICAgIH1cbiAgICBpZiAoc3luYykge1xuICAgICAgLy8gSXQgaXMgYSBjb21tb24gY2FzZSB0aGF0IHRoZSBjYWxsYmFjayBwYXNzZWQgdG8gLndyaXRlKCkgaXMgYWx3YXlzXG4gICAgICAvLyB0aGUgc2FtZS4gSW4gdGhhdCBjYXNlLCB3ZSBkbyBub3Qgc2NoZWR1bGUgYSBuZXcgbmV4dFRpY2soKSwgYnV0XG4gICAgICAvLyByYXRoZXIganVzdCBpbmNyZWFzZSBhIGNvdW50ZXIsIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UgYW5kIGF2b2lkXG4gICAgICAvLyBtZW1vcnkgYWxsb2NhdGlvbnMuXG4gICAgICBpZiAoc3RhdGUuYWZ0ZXJXcml0ZVRpY2tJbmZvICE9PSBudWxsICYmIHN0YXRlLmFmdGVyV3JpdGVUaWNrSW5mby5jYiA9PT0gY2IpIHtcbiAgICAgICAgc3RhdGUuYWZ0ZXJXcml0ZVRpY2tJbmZvLmNvdW50KytcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRlLmFmdGVyV3JpdGVUaWNrSW5mbyA9IHtcbiAgICAgICAgICBjb3VudDogMSxcbiAgICAgICAgICBjYixcbiAgICAgICAgICBzdHJlYW0sXG4gICAgICAgICAgc3RhdGVcbiAgICAgICAgfVxuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGFmdGVyV3JpdGVUaWNrLCBzdGF0ZS5hZnRlcldyaXRlVGlja0luZm8pXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGFmdGVyV3JpdGUoc3RyZWFtLCBzdGF0ZSwgMSwgY2IpXG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBhZnRlcldyaXRlVGljayh7IHN0cmVhbSwgc3RhdGUsIGNvdW50LCBjYiB9KSB7XG4gIHN0YXRlLmFmdGVyV3JpdGVUaWNrSW5mbyA9IG51bGxcbiAgcmV0dXJuIGFmdGVyV3JpdGUoc3RyZWFtLCBzdGF0ZSwgY291bnQsIGNiKVxufVxuZnVuY3Rpb24gYWZ0ZXJXcml0ZShzdHJlYW0sIHN0YXRlLCBjb3VudCwgY2IpIHtcbiAgY29uc3QgbmVlZERyYWluID0gIXN0YXRlLmVuZGluZyAmJiAhc3RyZWFtLmRlc3Ryb3llZCAmJiBzdGF0ZS5sZW5ndGggPT09IDAgJiYgc3RhdGUubmVlZERyYWluXG4gIGlmIChuZWVkRHJhaW4pIHtcbiAgICBzdGF0ZS5uZWVkRHJhaW4gPSBmYWxzZVxuICAgIHN0cmVhbS5lbWl0KCdkcmFpbicpXG4gIH1cbiAgd2hpbGUgKGNvdW50LS0gPiAwKSB7XG4gICAgc3RhdGUucGVuZGluZ2NiLS1cbiAgICBjYigpXG4gIH1cbiAgaWYgKHN0YXRlLmRlc3Ryb3llZCkge1xuICAgIGVycm9yQnVmZmVyKHN0YXRlKVxuICB9XG4gIGZpbmlzaE1heWJlKHN0cmVhbSwgc3RhdGUpXG59XG5cbi8vIElmIHRoZXJlJ3Mgc29tZXRoaW5nIGluIHRoZSBidWZmZXIgd2FpdGluZywgdGhlbiBpbnZva2UgY2FsbGJhY2tzLlxuZnVuY3Rpb24gZXJyb3JCdWZmZXIoc3RhdGUpIHtcbiAgaWYgKHN0YXRlLndyaXRpbmcpIHtcbiAgICByZXR1cm5cbiAgfVxuICBmb3IgKGxldCBuID0gc3RhdGUuYnVmZmVyZWRJbmRleDsgbiA8IHN0YXRlLmJ1ZmZlcmVkLmxlbmd0aDsgKytuKSB7XG4gICAgdmFyIF9zdGF0ZSRlcnJvcmVkXG4gICAgY29uc3QgeyBjaHVuaywgY2FsbGJhY2sgfSA9IHN0YXRlLmJ1ZmZlcmVkW25dXG4gICAgY29uc3QgbGVuID0gc3RhdGUub2JqZWN0TW9kZSA/IDEgOiBjaHVuay5sZW5ndGhcbiAgICBzdGF0ZS5sZW5ndGggLT0gbGVuXG4gICAgY2FsbGJhY2soXG4gICAgICAoX3N0YXRlJGVycm9yZWQgPSBzdGF0ZS5lcnJvcmVkKSAhPT0gbnVsbCAmJiBfc3RhdGUkZXJyb3JlZCAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gX3N0YXRlJGVycm9yZWRcbiAgICAgICAgOiBuZXcgRVJSX1NUUkVBTV9ERVNUUk9ZRUQoJ3dyaXRlJylcbiAgICApXG4gIH1cbiAgY29uc3Qgb25maW5pc2hDYWxsYmFja3MgPSBzdGF0ZVtrT25GaW5pc2hlZF0uc3BsaWNlKDApXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgb25maW5pc2hDYWxsYmFja3MubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgX3N0YXRlJGVycm9yZWQyXG4gICAgb25maW5pc2hDYWxsYmFja3NbaV0oXG4gICAgICAoX3N0YXRlJGVycm9yZWQyID0gc3RhdGUuZXJyb3JlZCkgIT09IG51bGwgJiYgX3N0YXRlJGVycm9yZWQyICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBfc3RhdGUkZXJyb3JlZDJcbiAgICAgICAgOiBuZXcgRVJSX1NUUkVBTV9ERVNUUk9ZRUQoJ2VuZCcpXG4gICAgKVxuICB9XG4gIHJlc2V0QnVmZmVyKHN0YXRlKVxufVxuXG4vLyBJZiB0aGVyZSdzIHNvbWV0aGluZyBpbiB0aGUgYnVmZmVyIHdhaXRpbmcsIHRoZW4gcHJvY2VzcyBpdC5cbmZ1bmN0aW9uIGNsZWFyQnVmZmVyKHN0cmVhbSwgc3RhdGUpIHtcbiAgaWYgKHN0YXRlLmNvcmtlZCB8fCBzdGF0ZS5idWZmZXJQcm9jZXNzaW5nIHx8IHN0YXRlLmRlc3Ryb3llZCB8fCAhc3RhdGUuY29uc3RydWN0ZWQpIHtcbiAgICByZXR1cm5cbiAgfVxuICBjb25zdCB7IGJ1ZmZlcmVkLCBidWZmZXJlZEluZGV4LCBvYmplY3RNb2RlIH0gPSBzdGF0ZVxuICBjb25zdCBidWZmZXJlZExlbmd0aCA9IGJ1ZmZlcmVkLmxlbmd0aCAtIGJ1ZmZlcmVkSW5kZXhcbiAgaWYgKCFidWZmZXJlZExlbmd0aCkge1xuICAgIHJldHVyblxuICB9XG4gIGxldCBpID0gYnVmZmVyZWRJbmRleFxuICBzdGF0ZS5idWZmZXJQcm9jZXNzaW5nID0gdHJ1ZVxuICBpZiAoYnVmZmVyZWRMZW5ndGggPiAxICYmIHN0cmVhbS5fd3JpdGV2KSB7XG4gICAgc3RhdGUucGVuZGluZ2NiIC09IGJ1ZmZlcmVkTGVuZ3RoIC0gMVxuICAgIGNvbnN0IGNhbGxiYWNrID0gc3RhdGUuYWxsTm9vcFxuICAgICAgPyBub3BcbiAgICAgIDogKGVycikgPT4ge1xuICAgICAgICAgIGZvciAobGV0IG4gPSBpOyBuIDwgYnVmZmVyZWQubGVuZ3RoOyArK24pIHtcbiAgICAgICAgICAgIGJ1ZmZlcmVkW25dLmNhbGxiYWNrKGVycilcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAvLyBNYWtlIGEgY29weSBvZiBgYnVmZmVyZWRgIGlmIGl0J3MgZ29pbmcgdG8gYmUgdXNlZCBieSBgY2FsbGJhY2tgIGFib3ZlLFxuICAgIC8vIHNpbmNlIGBkb1dyaXRlYCB3aWxsIG11dGF0ZSB0aGUgYXJyYXkuXG4gICAgY29uc3QgY2h1bmtzID0gc3RhdGUuYWxsTm9vcCAmJiBpID09PSAwID8gYnVmZmVyZWQgOiBBcnJheVByb3RvdHlwZVNsaWNlKGJ1ZmZlcmVkLCBpKVxuICAgIGNodW5rcy5hbGxCdWZmZXJzID0gc3RhdGUuYWxsQnVmZmVyc1xuICAgIGRvV3JpdGUoc3RyZWFtLCBzdGF0ZSwgdHJ1ZSwgc3RhdGUubGVuZ3RoLCBjaHVua3MsICcnLCBjYWxsYmFjaylcbiAgICByZXNldEJ1ZmZlcihzdGF0ZSlcbiAgfSBlbHNlIHtcbiAgICBkbyB7XG4gICAgICBjb25zdCB7IGNodW5rLCBlbmNvZGluZywgY2FsbGJhY2sgfSA9IGJ1ZmZlcmVkW2ldXG4gICAgICBidWZmZXJlZFtpKytdID0gbnVsbFxuICAgICAgY29uc3QgbGVuID0gb2JqZWN0TW9kZSA/IDEgOiBjaHVuay5sZW5ndGhcbiAgICAgIGRvV3JpdGUoc3RyZWFtLCBzdGF0ZSwgZmFsc2UsIGxlbiwgY2h1bmssIGVuY29kaW5nLCBjYWxsYmFjaylcbiAgICB9IHdoaWxlIChpIDwgYnVmZmVyZWQubGVuZ3RoICYmICFzdGF0ZS53cml0aW5nKVxuICAgIGlmIChpID09PSBidWZmZXJlZC5sZW5ndGgpIHtcbiAgICAgIHJlc2V0QnVmZmVyKHN0YXRlKVxuICAgIH0gZWxzZSBpZiAoaSA+IDI1Nikge1xuICAgICAgYnVmZmVyZWQuc3BsaWNlKDAsIGkpXG4gICAgICBzdGF0ZS5idWZmZXJlZEluZGV4ID0gMFxuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS5idWZmZXJlZEluZGV4ID0gaVxuICAgIH1cbiAgfVxuICBzdGF0ZS5idWZmZXJQcm9jZXNzaW5nID0gZmFsc2Vcbn1cbldyaXRhYmxlLnByb3RvdHlwZS5fd3JpdGUgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICBpZiAodGhpcy5fd3JpdGV2KSB7XG4gICAgdGhpcy5fd3JpdGV2KFxuICAgICAgW1xuICAgICAgICB7XG4gICAgICAgICAgY2h1bmssXG4gICAgICAgICAgZW5jb2RpbmdcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIGNiXG4gICAgKVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCgnX3dyaXRlKCknKVxuICB9XG59XG5Xcml0YWJsZS5wcm90b3R5cGUuX3dyaXRldiA9IG51bGxcbldyaXRhYmxlLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICBjb25zdCBzdGF0ZSA9IHRoaXMuX3dyaXRhYmxlU3RhdGVcbiAgaWYgKHR5cGVvZiBjaHVuayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNiID0gY2h1bmtcbiAgICBjaHVuayA9IG51bGxcbiAgICBlbmNvZGluZyA9IG51bGxcbiAgfSBlbHNlIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYiA9IGVuY29kaW5nXG4gICAgZW5jb2RpbmcgPSBudWxsXG4gIH1cbiAgbGV0IGVyclxuICBpZiAoY2h1bmsgIT09IG51bGwgJiYgY2h1bmsgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IHJldCA9IF93cml0ZSh0aGlzLCBjaHVuaywgZW5jb2RpbmcpXG4gICAgaWYgKHJldCBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICBlcnIgPSByZXRcbiAgICB9XG4gIH1cblxuICAvLyAuZW5kKCkgZnVsbHkgdW5jb3Jrcy5cbiAgaWYgKHN0YXRlLmNvcmtlZCkge1xuICAgIHN0YXRlLmNvcmtlZCA9IDFcbiAgICB0aGlzLnVuY29yaygpXG4gIH1cbiAgaWYgKGVycikge1xuICAgIC8vIERvIG5vdGhpbmcuLi5cbiAgfSBlbHNlIGlmICghc3RhdGUuZXJyb3JlZCAmJiAhc3RhdGUuZW5kaW5nKSB7XG4gICAgLy8gVGhpcyBpcyBmb3JnaXZpbmcgaW4gdGVybXMgb2YgdW5uZWNlc3NhcnkgY2FsbHMgdG8gZW5kKCkgYW5kIGNhbiBoaWRlXG4gICAgLy8gbG9naWMgZXJyb3JzLiBIb3dldmVyLCB1c3VhbGx5IHN1Y2ggZXJyb3JzIGFyZSBoYXJtbGVzcyBhbmQgY2F1c2luZyBhXG4gICAgLy8gaGFyZCBlcnJvciBjYW4gYmUgZGlzcHJvcG9ydGlvbmF0ZWx5IGRlc3RydWN0aXZlLiBJdCBpcyBub3QgYWx3YXlzXG4gICAgLy8gdHJpdmlhbCBmb3IgdGhlIHVzZXIgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgZW5kKCkgbmVlZHMgdG8gYmUgY2FsbGVkXG4gICAgLy8gb3Igbm90LlxuXG4gICAgc3RhdGUuZW5kaW5nID0gdHJ1ZVxuICAgIGZpbmlzaE1heWJlKHRoaXMsIHN0YXRlLCB0cnVlKVxuICAgIHN0YXRlLmVuZGVkID0gdHJ1ZVxuICB9IGVsc2UgaWYgKHN0YXRlLmZpbmlzaGVkKSB7XG4gICAgZXJyID0gbmV3IEVSUl9TVFJFQU1fQUxSRUFEWV9GSU5JU0hFRCgnZW5kJylcbiAgfSBlbHNlIGlmIChzdGF0ZS5kZXN0cm95ZWQpIHtcbiAgICBlcnIgPSBuZXcgRVJSX1NUUkVBTV9ERVNUUk9ZRUQoJ2VuZCcpXG4gIH1cbiAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmIChlcnIgfHwgc3RhdGUuZmluaXNoZWQpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soY2IsIGVycilcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGVba09uRmluaXNoZWRdLnB1c2goY2IpXG4gICAgfVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5mdW5jdGlvbiBuZWVkRmluaXNoKHN0YXRlKSB7XG4gIHJldHVybiAoXG4gICAgc3RhdGUuZW5kaW5nICYmXG4gICAgIXN0YXRlLmRlc3Ryb3llZCAmJlxuICAgIHN0YXRlLmNvbnN0cnVjdGVkICYmXG4gICAgc3RhdGUubGVuZ3RoID09PSAwICYmXG4gICAgIXN0YXRlLmVycm9yZWQgJiZcbiAgICBzdGF0ZS5idWZmZXJlZC5sZW5ndGggPT09IDAgJiZcbiAgICAhc3RhdGUuZmluaXNoZWQgJiZcbiAgICAhc3RhdGUud3JpdGluZyAmJlxuICAgICFzdGF0ZS5lcnJvckVtaXR0ZWQgJiZcbiAgICAhc3RhdGUuY2xvc2VFbWl0dGVkXG4gIClcbn1cbmZ1bmN0aW9uIGNhbGxGaW5hbChzdHJlYW0sIHN0YXRlKSB7XG4gIGxldCBjYWxsZWQgPSBmYWxzZVxuICBmdW5jdGlvbiBvbkZpbmlzaChlcnIpIHtcbiAgICBpZiAoY2FsbGVkKSB7XG4gICAgICBlcnJvck9yRGVzdHJveShzdHJlYW0sIGVyciAhPT0gbnVsbCAmJiBlcnIgIT09IHVuZGVmaW5lZCA/IGVyciA6IEVSUl9NVUxUSVBMRV9DQUxMQkFDSygpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNhbGxlZCA9IHRydWVcbiAgICBzdGF0ZS5wZW5kaW5nY2ItLVxuICAgIGlmIChlcnIpIHtcbiAgICAgIGNvbnN0IG9uZmluaXNoQ2FsbGJhY2tzID0gc3RhdGVba09uRmluaXNoZWRdLnNwbGljZSgwKVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvbmZpbmlzaENhbGxiYWNrcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBvbmZpbmlzaENhbGxiYWNrc1tpXShlcnIpXG4gICAgICB9XG4gICAgICBlcnJvck9yRGVzdHJveShzdHJlYW0sIGVyciwgc3RhdGUuc3luYylcbiAgICB9IGVsc2UgaWYgKG5lZWRGaW5pc2goc3RhdGUpKSB7XG4gICAgICBzdGF0ZS5wcmVmaW5pc2hlZCA9IHRydWVcbiAgICAgIHN0cmVhbS5lbWl0KCdwcmVmaW5pc2gnKVxuICAgICAgLy8gQmFja3dhcmRzIGNvbXBhdC4gRG9uJ3QgY2hlY2sgc3RhdGUuc3luYyBoZXJlLlxuICAgICAgLy8gU29tZSBzdHJlYW1zIGFzc3VtZSAnZmluaXNoJyB3aWxsIGJlIGVtaXR0ZWRcbiAgICAgIC8vIGFzeW5jaHJvbm91c2x5IHJlbGF0aXZlIHRvIF9maW5hbCBjYWxsYmFjay5cbiAgICAgIHN0YXRlLnBlbmRpbmdjYisrXG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGZpbmlzaCwgc3RyZWFtLCBzdGF0ZSlcbiAgICB9XG4gIH1cbiAgc3RhdGUuc3luYyA9IHRydWVcbiAgc3RhdGUucGVuZGluZ2NiKytcbiAgdHJ5IHtcbiAgICBzdHJlYW0uX2ZpbmFsKG9uRmluaXNoKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBvbkZpbmlzaChlcnIpXG4gIH1cbiAgc3RhdGUuc3luYyA9IGZhbHNlXG59XG5mdW5jdGlvbiBwcmVmaW5pc2goc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoIXN0YXRlLnByZWZpbmlzaGVkICYmICFzdGF0ZS5maW5hbENhbGxlZCkge1xuICAgIGlmICh0eXBlb2Ygc3RyZWFtLl9maW5hbCA9PT0gJ2Z1bmN0aW9uJyAmJiAhc3RhdGUuZGVzdHJveWVkKSB7XG4gICAgICBzdGF0ZS5maW5hbENhbGxlZCA9IHRydWVcbiAgICAgIGNhbGxGaW5hbChzdHJlYW0sIHN0YXRlKVxuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS5wcmVmaW5pc2hlZCA9IHRydWVcbiAgICAgIHN0cmVhbS5lbWl0KCdwcmVmaW5pc2gnKVxuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZmluaXNoTWF5YmUoc3RyZWFtLCBzdGF0ZSwgc3luYykge1xuICBpZiAobmVlZEZpbmlzaChzdGF0ZSkpIHtcbiAgICBwcmVmaW5pc2goc3RyZWFtLCBzdGF0ZSlcbiAgICBpZiAoc3RhdGUucGVuZGluZ2NiID09PSAwKSB7XG4gICAgICBpZiAoc3luYykge1xuICAgICAgICBzdGF0ZS5wZW5kaW5nY2IrK1xuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKFxuICAgICAgICAgIChzdHJlYW0sIHN0YXRlKSA9PiB7XG4gICAgICAgICAgICBpZiAobmVlZEZpbmlzaChzdGF0ZSkpIHtcbiAgICAgICAgICAgICAgZmluaXNoKHN0cmVhbSwgc3RhdGUpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzdGF0ZS5wZW5kaW5nY2ItLVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgc3RyZWFtLFxuICAgICAgICAgIHN0YXRlXG4gICAgICAgIClcbiAgICAgIH0gZWxzZSBpZiAobmVlZEZpbmlzaChzdGF0ZSkpIHtcbiAgICAgICAgc3RhdGUucGVuZGluZ2NiKytcbiAgICAgICAgZmluaXNoKHN0cmVhbSwgc3RhdGUpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBmaW5pc2goc3RyZWFtLCBzdGF0ZSkge1xuICBzdGF0ZS5wZW5kaW5nY2ItLVxuICBzdGF0ZS5maW5pc2hlZCA9IHRydWVcbiAgY29uc3Qgb25maW5pc2hDYWxsYmFja3MgPSBzdGF0ZVtrT25GaW5pc2hlZF0uc3BsaWNlKDApXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgb25maW5pc2hDYWxsYmFja3MubGVuZ3RoOyBpKyspIHtcbiAgICBvbmZpbmlzaENhbGxiYWNrc1tpXSgpXG4gIH1cbiAgc3RyZWFtLmVtaXQoJ2ZpbmlzaCcpXG4gIGlmIChzdGF0ZS5hdXRvRGVzdHJveSkge1xuICAgIC8vIEluIGNhc2Ugb2YgZHVwbGV4IHN0cmVhbXMgd2UgbmVlZCBhIHdheSB0byBkZXRlY3RcbiAgICAvLyBpZiB0aGUgcmVhZGFibGUgc2lkZSBpcyByZWFkeSBmb3IgYXV0b0Rlc3Ryb3kgYXMgd2VsbC5cbiAgICBjb25zdCByU3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGVcbiAgICBjb25zdCBhdXRvRGVzdHJveSA9XG4gICAgICAhclN0YXRlIHx8XG4gICAgICAoclN0YXRlLmF1dG9EZXN0cm95ICYmXG4gICAgICAgIC8vIFdlIGRvbid0IGV4cGVjdCB0aGUgcmVhZGFibGUgdG8gZXZlciAnZW5kJ1xuICAgICAgICAvLyBpZiByZWFkYWJsZSBpcyBleHBsaWNpdGx5IHNldCB0byBmYWxzZS5cbiAgICAgICAgKHJTdGF0ZS5lbmRFbWl0dGVkIHx8IHJTdGF0ZS5yZWFkYWJsZSA9PT0gZmFsc2UpKVxuICAgIGlmIChhdXRvRGVzdHJveSkge1xuICAgICAgc3RyZWFtLmRlc3Ryb3koKVxuICAgIH1cbiAgfVxufVxuT2JqZWN0RGVmaW5lUHJvcGVydGllcyhXcml0YWJsZS5wcm90b3R5cGUsIHtcbiAgY2xvc2VkOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl93cml0YWJsZVN0YXRlID8gdGhpcy5fd3JpdGFibGVTdGF0ZS5jbG9zZWQgOiBmYWxzZVxuICAgIH1cbiAgfSxcbiAgZGVzdHJveWVkOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl93cml0YWJsZVN0YXRlID8gdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQgOiBmYWxzZVxuICAgIH0sXG4gICAgc2V0KHZhbHVlKSB7XG4gICAgICAvLyBCYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB0aGUgdXNlciBpcyBleHBsaWNpdGx5IG1hbmFnaW5nIGRlc3Ryb3llZC5cbiAgICAgIGlmICh0aGlzLl93cml0YWJsZVN0YXRlKSB7XG4gICAgICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkID0gdmFsdWVcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIHdyaXRhYmxlOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGdldCgpIHtcbiAgICAgIGNvbnN0IHcgPSB0aGlzLl93cml0YWJsZVN0YXRlXG4gICAgICAvLyB3LndyaXRhYmxlID09PSBmYWxzZSBtZWFucyB0aGF0IHRoaXMgaXMgcGFydCBvZiBhIER1cGxleCBzdHJlYW1cbiAgICAgIC8vIHdoZXJlIHRoZSB3cml0YWJsZSBzaWRlIHdhcyBkaXNhYmxlZCB1cG9uIGNvbnN0cnVjdGlvbi5cbiAgICAgIC8vIENvbXBhdC4gVGhlIHVzZXIgbWlnaHQgbWFudWFsbHkgZGlzYWJsZSB3cml0YWJsZSBzaWRlIHRocm91Z2hcbiAgICAgIC8vIGRlcHJlY2F0ZWQgc2V0dGVyLlxuICAgICAgcmV0dXJuICEhdyAmJiB3LndyaXRhYmxlICE9PSBmYWxzZSAmJiAhdy5kZXN0cm95ZWQgJiYgIXcuZXJyb3JlZCAmJiAhdy5lbmRpbmcgJiYgIXcuZW5kZWRcbiAgICB9LFxuICAgIHNldCh2YWwpIHtcbiAgICAgIC8vIEJhY2t3YXJkcyBjb21wYXRpYmxlLlxuICAgICAgaWYgKHRoaXMuX3dyaXRhYmxlU3RhdGUpIHtcbiAgICAgICAgdGhpcy5fd3JpdGFibGVTdGF0ZS53cml0YWJsZSA9ICEhdmFsXG4gICAgICB9XG4gICAgfVxuICB9LFxuICB3cml0YWJsZUZpbmlzaGVkOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl93cml0YWJsZVN0YXRlID8gdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5pc2hlZCA6IGZhbHNlXG4gICAgfVxuICB9LFxuICB3cml0YWJsZU9iamVjdE1vZGU6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUgPyB0aGlzLl93cml0YWJsZVN0YXRlLm9iamVjdE1vZGUgOiBmYWxzZVxuICAgIH1cbiAgfSxcbiAgd3JpdGFibGVCdWZmZXI6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUgJiYgdGhpcy5fd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIoKVxuICAgIH1cbiAgfSxcbiAgd3JpdGFibGVFbmRlZDoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSA/IHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kaW5nIDogZmFsc2VcbiAgICB9XG4gIH0sXG4gIHdyaXRhYmxlTmVlZERyYWluOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGdldCgpIHtcbiAgICAgIGNvbnN0IHdTdGF0ZSA9IHRoaXMuX3dyaXRhYmxlU3RhdGVcbiAgICAgIGlmICghd1N0YXRlKSByZXR1cm4gZmFsc2VcbiAgICAgIHJldHVybiAhd1N0YXRlLmRlc3Ryb3llZCAmJiAhd1N0YXRlLmVuZGluZyAmJiB3U3RhdGUubmVlZERyYWluXG4gICAgfVxuICB9LFxuICB3cml0YWJsZUhpZ2hXYXRlck1hcms6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUgJiYgdGhpcy5fd3JpdGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrXG4gICAgfVxuICB9LFxuICB3cml0YWJsZUNvcmtlZDoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSA/IHRoaXMuX3dyaXRhYmxlU3RhdGUuY29ya2VkIDogMFxuICAgIH1cbiAgfSxcbiAgd3JpdGFibGVMZW5ndGg6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUgJiYgdGhpcy5fd3JpdGFibGVTdGF0ZS5sZW5ndGhcbiAgICB9XG4gIH0sXG4gIGVycm9yZWQ6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUgPyB0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yZWQgOiBudWxsXG4gICAgfVxuICB9LFxuICB3cml0YWJsZUFib3J0ZWQ6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gISEoXG4gICAgICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUud3JpdGFibGUgIT09IGZhbHNlICYmXG4gICAgICAgICh0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZCB8fCB0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yZWQpICYmXG4gICAgICAgICF0aGlzLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkXG4gICAgICApXG4gICAgfVxuICB9XG59KVxuY29uc3QgZGVzdHJveSA9IGRlc3Ryb3lJbXBsLmRlc3Ryb3lcbldyaXRhYmxlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGVyciwgY2IpIHtcbiAgY29uc3Qgc3RhdGUgPSB0aGlzLl93cml0YWJsZVN0YXRlXG5cbiAgLy8gSW52b2tlIHBlbmRpbmcgY2FsbGJhY2tzLlxuICBpZiAoIXN0YXRlLmRlc3Ryb3llZCAmJiAoc3RhdGUuYnVmZmVyZWRJbmRleCA8IHN0YXRlLmJ1ZmZlcmVkLmxlbmd0aCB8fCBzdGF0ZVtrT25GaW5pc2hlZF0ubGVuZ3RoKSkge1xuICAgIHByb2Nlc3MubmV4dFRpY2soZXJyb3JCdWZmZXIsIHN0YXRlKVxuICB9XG4gIGRlc3Ryb3kuY2FsbCh0aGlzLCBlcnIsIGNiKVxuICByZXR1cm4gdGhpc1xufVxuV3JpdGFibGUucHJvdG90eXBlLl91bmRlc3Ryb3kgPSBkZXN0cm95SW1wbC51bmRlc3Ryb3lcbldyaXRhYmxlLnByb3RvdHlwZS5fZGVzdHJveSA9IGZ1bmN0aW9uIChlcnIsIGNiKSB7XG4gIGNiKGVycilcbn1cbldyaXRhYmxlLnByb3RvdHlwZVtFRS5jYXB0dXJlUmVqZWN0aW9uU3ltYm9sXSA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgdGhpcy5kZXN0cm95KGVycilcbn1cbmxldCB3ZWJTdHJlYW1zQWRhcHRlcnNcblxuLy8gTGF6eSB0byBhdm9pZCBjaXJjdWxhciByZWZlcmVuY2VzXG5mdW5jdGlvbiBsYXp5V2ViU3RyZWFtcygpIHtcbiAgaWYgKHdlYlN0cmVhbXNBZGFwdGVycyA9PT0gdW5kZWZpbmVkKSB3ZWJTdHJlYW1zQWRhcHRlcnMgPSB7fVxuICByZXR1cm4gd2ViU3RyZWFtc0FkYXB0ZXJzXG59XG5Xcml0YWJsZS5mcm9tV2ViID0gZnVuY3Rpb24gKHdyaXRhYmxlU3RyZWFtLCBvcHRpb25zKSB7XG4gIHJldHVybiBsYXp5V2ViU3RyZWFtcygpLm5ld1N0cmVhbVdyaXRhYmxlRnJvbVdyaXRhYmxlU3RyZWFtKHdyaXRhYmxlU3RyZWFtLCBvcHRpb25zKVxufVxuV3JpdGFibGUudG9XZWIgPSBmdW5jdGlvbiAoc3RyZWFtV3JpdGFibGUpIHtcbiAgcmV0dXJuIGxhenlXZWJTdHJlYW1zKCkubmV3V3JpdGFibGVTdHJlYW1Gcm9tU3RyZWFtV3JpdGFibGUoc3RyZWFtV3JpdGFibGUpXG59XG4iLAogICAgIi8qIHJlcGxhY2VtZW50IHN0YXJ0ICovXG5cbmNvbnN0IHByb2Nlc3MgPSByZXF1aXJlKCdwcm9jZXNzLycpXG5cbi8qIHJlcGxhY2VtZW50IGVuZCAqL1xuXG47KCd1c2Ugc3RyaWN0JylcbmNvbnN0IGJ1ZmZlck1vZHVsZSA9IHJlcXVpcmUoJ2J1ZmZlcicpXG5jb25zdCB7XG4gIGlzUmVhZGFibGUsXG4gIGlzV3JpdGFibGUsXG4gIGlzSXRlcmFibGUsXG4gIGlzTm9kZVN0cmVhbSxcbiAgaXNSZWFkYWJsZU5vZGVTdHJlYW0sXG4gIGlzV3JpdGFibGVOb2RlU3RyZWFtLFxuICBpc0R1cGxleE5vZGVTdHJlYW0sXG4gIGlzUmVhZGFibGVTdHJlYW0sXG4gIGlzV3JpdGFibGVTdHJlYW1cbn0gPSByZXF1aXJlKCcuL3V0aWxzJylcbmNvbnN0IGVvcyA9IHJlcXVpcmUoJy4vZW5kLW9mLXN0cmVhbScpXG5jb25zdCB7XG4gIEFib3J0RXJyb3IsXG4gIGNvZGVzOiB7IEVSUl9JTlZBTElEX0FSR19UWVBFLCBFUlJfSU5WQUxJRF9SRVRVUk5fVkFMVUUgfVxufSA9IHJlcXVpcmUoJy4uLy4uL291cnMvZXJyb3JzJylcbmNvbnN0IHsgZGVzdHJveWVyIH0gPSByZXF1aXJlKCcuL2Rlc3Ryb3knKVxuY29uc3QgRHVwbGV4ID0gcmVxdWlyZSgnLi9kdXBsZXgnKVxuY29uc3QgUmVhZGFibGUgPSByZXF1aXJlKCcuL3JlYWRhYmxlJylcbmNvbnN0IFdyaXRhYmxlID0gcmVxdWlyZSgnLi93cml0YWJsZScpXG5jb25zdCB7IGNyZWF0ZURlZmVycmVkUHJvbWlzZSB9ID0gcmVxdWlyZSgnLi4vLi4vb3Vycy91dGlsJylcbmNvbnN0IGZyb20gPSByZXF1aXJlKCcuL2Zyb20nKVxuY29uc3QgQmxvYiA9IGdsb2JhbFRoaXMuQmxvYiB8fCBidWZmZXJNb2R1bGUuQmxvYlxuY29uc3QgaXNCbG9iID1cbiAgdHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnXG4gICAgPyBmdW5jdGlvbiBpc0Jsb2IoYikge1xuICAgICAgICByZXR1cm4gYiBpbnN0YW5jZW9mIEJsb2JcbiAgICAgIH1cbiAgICA6IGZ1bmN0aW9uIGlzQmxvYihiKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuY29uc3QgQWJvcnRDb250cm9sbGVyID0gZ2xvYmFsVGhpcy5BYm9ydENvbnRyb2xsZXIgfHwgcmVxdWlyZSgnYWJvcnQtY29udHJvbGxlcicpLkFib3J0Q29udHJvbGxlclxuY29uc3QgeyBGdW5jdGlvblByb3RvdHlwZUNhbGwgfSA9IHJlcXVpcmUoJy4uLy4uL291cnMvcHJpbW9yZGlhbHMnKVxuXG4vLyBUaGlzIGlzIG5lZWRlZCBmb3IgcHJlIG5vZGUgMTcuXG5jbGFzcyBEdXBsZXhpZnkgZXh0ZW5kcyBEdXBsZXgge1xuICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgc3VwZXIob3B0aW9ucylcblxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9wdWxsLzM0Mzg1XG5cbiAgICBpZiAoKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogb3B0aW9ucy5yZWFkYWJsZSkgPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLnJlYWRhYmxlID0gZmFsc2VcbiAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kZWQgPSB0cnVlXG4gICAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQgPSB0cnVlXG4gICAgfVxuICAgIGlmICgob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBvcHRpb25zLndyaXRhYmxlKSA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUud3JpdGFibGUgPSBmYWxzZVxuICAgICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRpbmcgPSB0cnVlXG4gICAgICB0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkID0gdHJ1ZVxuICAgICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5pc2hlZCA9IHRydWVcbiAgICB9XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZHVwbGV4aWZ5KGJvZHksIG5hbWUpIHtcbiAgaWYgKGlzRHVwbGV4Tm9kZVN0cmVhbShib2R5KSkge1xuICAgIHJldHVybiBib2R5XG4gIH1cbiAgaWYgKGlzUmVhZGFibGVOb2RlU3RyZWFtKGJvZHkpKSB7XG4gICAgcmV0dXJuIF9kdXBsZXhpZnkoe1xuICAgICAgcmVhZGFibGU6IGJvZHlcbiAgICB9KVxuICB9XG4gIGlmIChpc1dyaXRhYmxlTm9kZVN0cmVhbShib2R5KSkge1xuICAgIHJldHVybiBfZHVwbGV4aWZ5KHtcbiAgICAgIHdyaXRhYmxlOiBib2R5XG4gICAgfSlcbiAgfVxuICBpZiAoaXNOb2RlU3RyZWFtKGJvZHkpKSB7XG4gICAgcmV0dXJuIF9kdXBsZXhpZnkoe1xuICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgcmVhZGFibGU6IGZhbHNlXG4gICAgfSlcbiAgfVxuICBpZiAoaXNSZWFkYWJsZVN0cmVhbShib2R5KSkge1xuICAgIHJldHVybiBfZHVwbGV4aWZ5KHtcbiAgICAgIHJlYWRhYmxlOiBSZWFkYWJsZS5mcm9tV2ViKGJvZHkpXG4gICAgfSlcbiAgfVxuICBpZiAoaXNXcml0YWJsZVN0cmVhbShib2R5KSkge1xuICAgIHJldHVybiBfZHVwbGV4aWZ5KHtcbiAgICAgIHdyaXRhYmxlOiBXcml0YWJsZS5mcm9tV2ViKGJvZHkpXG4gICAgfSlcbiAgfVxuICBpZiAodHlwZW9mIGJvZHkgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjb25zdCB7IHZhbHVlLCB3cml0ZSwgZmluYWwsIGRlc3Ryb3kgfSA9IGZyb21Bc3luY0dlbihib2R5KVxuICAgIGlmIChpc0l0ZXJhYmxlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGZyb20oRHVwbGV4aWZ5LCB2YWx1ZSwge1xuICAgICAgICAvLyBUT0RPIChyb25hZyk6IGhpZ2hXYXRlck1hcms/XG4gICAgICAgIG9iamVjdE1vZGU6IHRydWUsXG4gICAgICAgIHdyaXRlLFxuICAgICAgICBmaW5hbCxcbiAgICAgICAgZGVzdHJveVxuICAgICAgfSlcbiAgICB9XG4gICAgY29uc3QgdGhlbiA9IHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB2YWx1ZS50aGVuXG4gICAgaWYgKHR5cGVvZiB0aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBsZXQgZFxuICAgICAgY29uc3QgcHJvbWlzZSA9IEZ1bmN0aW9uUHJvdG90eXBlQ2FsbChcbiAgICAgICAgdGhlbixcbiAgICAgICAgdmFsdWUsXG4gICAgICAgICh2YWwpID0+IHtcbiAgICAgICAgICBpZiAodmFsICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9SRVRVUk5fVkFMVUUoJ251bGx5JywgJ2JvZHknLCB2YWwpXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAoZXJyKSA9PiB7XG4gICAgICAgICAgZGVzdHJveWVyKGQsIGVycilcbiAgICAgICAgfVxuICAgICAgKVxuICAgICAgcmV0dXJuIChkID0gbmV3IER1cGxleGlmeSh7XG4gICAgICAgIC8vIFRPRE8gKHJvbmFnKTogaGlnaFdhdGVyTWFyaz9cbiAgICAgICAgb2JqZWN0TW9kZTogdHJ1ZSxcbiAgICAgICAgcmVhZGFibGU6IGZhbHNlLFxuICAgICAgICB3cml0ZSxcbiAgICAgICAgZmluYWwoY2IpIHtcbiAgICAgICAgICBmaW5hbChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBhd2FpdCBwcm9taXNlXG4gICAgICAgICAgICAgIHByb2Nlc3MubmV4dFRpY2soY2IsIG51bGwpXG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhjYiwgZXJyKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH0sXG4gICAgICAgIGRlc3Ryb3lcbiAgICAgIH0pKVxuICAgIH1cbiAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfUkVUVVJOX1ZBTFVFKCdJdGVyYWJsZSwgQXN5bmNJdGVyYWJsZSBvciBBc3luY0Z1bmN0aW9uJywgbmFtZSwgdmFsdWUpXG4gIH1cbiAgaWYgKGlzQmxvYihib2R5KSkge1xuICAgIHJldHVybiBkdXBsZXhpZnkoYm9keS5hcnJheUJ1ZmZlcigpKVxuICB9XG4gIGlmIChpc0l0ZXJhYmxlKGJvZHkpKSB7XG4gICAgcmV0dXJuIGZyb20oRHVwbGV4aWZ5LCBib2R5LCB7XG4gICAgICAvLyBUT0RPIChyb25hZyk6IGhpZ2hXYXRlck1hcms/XG4gICAgICBvYmplY3RNb2RlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IGZhbHNlXG4gICAgfSlcbiAgfVxuICBpZiAoXG4gICAgaXNSZWFkYWJsZVN0cmVhbShib2R5ID09PSBudWxsIHx8IGJvZHkgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IGJvZHkucmVhZGFibGUpICYmXG4gICAgaXNXcml0YWJsZVN0cmVhbShib2R5ID09PSBudWxsIHx8IGJvZHkgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IGJvZHkud3JpdGFibGUpXG4gICkge1xuICAgIHJldHVybiBEdXBsZXhpZnkuZnJvbVdlYihib2R5KVxuICB9XG4gIGlmIChcbiAgICB0eXBlb2YgKGJvZHkgPT09IG51bGwgfHwgYm9keSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogYm9keS53cml0YWJsZSkgPT09ICdvYmplY3QnIHx8XG4gICAgdHlwZW9mIChib2R5ID09PSBudWxsIHx8IGJvZHkgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IGJvZHkucmVhZGFibGUpID09PSAnb2JqZWN0J1xuICApIHtcbiAgICBjb25zdCByZWFkYWJsZSA9XG4gICAgICBib2R5ICE9PSBudWxsICYmIGJvZHkgIT09IHVuZGVmaW5lZCAmJiBib2R5LnJlYWRhYmxlXG4gICAgICAgID8gaXNSZWFkYWJsZU5vZGVTdHJlYW0oYm9keSA9PT0gbnVsbCB8fCBib2R5ID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBib2R5LnJlYWRhYmxlKVxuICAgICAgICAgID8gYm9keSA9PT0gbnVsbCB8fCBib2R5ID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgICA6IGJvZHkucmVhZGFibGVcbiAgICAgICAgICA6IGR1cGxleGlmeShib2R5LnJlYWRhYmxlKVxuICAgICAgICA6IHVuZGVmaW5lZFxuICAgIGNvbnN0IHdyaXRhYmxlID1cbiAgICAgIGJvZHkgIT09IG51bGwgJiYgYm9keSAhPT0gdW5kZWZpbmVkICYmIGJvZHkud3JpdGFibGVcbiAgICAgICAgPyBpc1dyaXRhYmxlTm9kZVN0cmVhbShib2R5ID09PSBudWxsIHx8IGJvZHkgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IGJvZHkud3JpdGFibGUpXG4gICAgICAgICAgPyBib2R5ID09PSBudWxsIHx8IGJvZHkgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgICAgIDogYm9keS53cml0YWJsZVxuICAgICAgICAgIDogZHVwbGV4aWZ5KGJvZHkud3JpdGFibGUpXG4gICAgICAgIDogdW5kZWZpbmVkXG4gICAgcmV0dXJuIF9kdXBsZXhpZnkoe1xuICAgICAgcmVhZGFibGUsXG4gICAgICB3cml0YWJsZVxuICAgIH0pXG4gIH1cbiAgY29uc3QgdGhlbiA9IGJvZHkgPT09IG51bGwgfHwgYm9keSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogYm9keS50aGVuXG4gIGlmICh0eXBlb2YgdGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGxldCBkXG4gICAgRnVuY3Rpb25Qcm90b3R5cGVDYWxsKFxuICAgICAgdGhlbixcbiAgICAgIGJvZHksXG4gICAgICAodmFsKSA9PiB7XG4gICAgICAgIGlmICh2YWwgIT0gbnVsbCkge1xuICAgICAgICAgIGQucHVzaCh2YWwpXG4gICAgICAgIH1cbiAgICAgICAgZC5wdXNoKG51bGwpXG4gICAgICB9LFxuICAgICAgKGVycikgPT4ge1xuICAgICAgICBkZXN0cm95ZXIoZCwgZXJyKVxuICAgICAgfVxuICAgIClcbiAgICByZXR1cm4gKGQgPSBuZXcgRHVwbGV4aWZ5KHtcbiAgICAgIG9iamVjdE1vZGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICByZWFkKCkge31cbiAgICB9KSlcbiAgfVxuICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoXG4gICAgbmFtZSxcbiAgICBbXG4gICAgICAnQmxvYicsXG4gICAgICAnUmVhZGFibGVTdHJlYW0nLFxuICAgICAgJ1dyaXRhYmxlU3RyZWFtJyxcbiAgICAgICdTdHJlYW0nLFxuICAgICAgJ0l0ZXJhYmxlJyxcbiAgICAgICdBc3luY0l0ZXJhYmxlJyxcbiAgICAgICdGdW5jdGlvbicsXG4gICAgICAneyByZWFkYWJsZSwgd3JpdGFibGUgfSBwYWlyJyxcbiAgICAgICdQcm9taXNlJ1xuICAgIF0sXG4gICAgYm9keVxuICApXG59XG5mdW5jdGlvbiBmcm9tQXN5bmNHZW4oZm4pIHtcbiAgbGV0IHsgcHJvbWlzZSwgcmVzb2x2ZSB9ID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKClcbiAgY29uc3QgYWMgPSBuZXcgQWJvcnRDb250cm9sbGVyKClcbiAgY29uc3Qgc2lnbmFsID0gYWMuc2lnbmFsXG4gIGNvbnN0IHZhbHVlID0gZm4oXG4gICAgKGFzeW5jIGZ1bmN0aW9uKiAoKSB7XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBjb25zdCBfcHJvbWlzZSA9IHByb21pc2VcbiAgICAgICAgcHJvbWlzZSA9IG51bGxcbiAgICAgICAgY29uc3QgeyBjaHVuaywgZG9uZSwgY2IgfSA9IGF3YWl0IF9wcm9taXNlXG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soY2IpXG4gICAgICAgIGlmIChkb25lKSByZXR1cm5cbiAgICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKVxuICAgICAgICAgIHRocm93IG5ldyBBYm9ydEVycm9yKHVuZGVmaW5lZCwge1xuICAgICAgICAgICAgY2F1c2U6IHNpZ25hbC5yZWFzb25cbiAgICAgICAgICB9KVxuICAgICAgICA7KHsgcHJvbWlzZSwgcmVzb2x2ZSB9ID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKCkpXG4gICAgICAgIHlpZWxkIGNodW5rXG4gICAgICB9XG4gICAgfSkoKSxcbiAgICB7XG4gICAgICBzaWduYWxcbiAgICB9XG4gIClcbiAgcmV0dXJuIHtcbiAgICB2YWx1ZSxcbiAgICB3cml0ZShjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gICAgICBjb25zdCBfcmVzb2x2ZSA9IHJlc29sdmVcbiAgICAgIHJlc29sdmUgPSBudWxsXG4gICAgICBfcmVzb2x2ZSh7XG4gICAgICAgIGNodW5rLFxuICAgICAgICBkb25lOiBmYWxzZSxcbiAgICAgICAgY2JcbiAgICAgIH0pXG4gICAgfSxcbiAgICBmaW5hbChjYikge1xuICAgICAgY29uc3QgX3Jlc29sdmUgPSByZXNvbHZlXG4gICAgICByZXNvbHZlID0gbnVsbFxuICAgICAgX3Jlc29sdmUoe1xuICAgICAgICBkb25lOiB0cnVlLFxuICAgICAgICBjYlxuICAgICAgfSlcbiAgICB9LFxuICAgIGRlc3Ryb3koZXJyLCBjYikge1xuICAgICAgYWMuYWJvcnQoKVxuICAgICAgY2IoZXJyKVxuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gX2R1cGxleGlmeShwYWlyKSB7XG4gIGNvbnN0IHIgPSBwYWlyLnJlYWRhYmxlICYmIHR5cGVvZiBwYWlyLnJlYWRhYmxlLnJlYWQgIT09ICdmdW5jdGlvbicgPyBSZWFkYWJsZS53cmFwKHBhaXIucmVhZGFibGUpIDogcGFpci5yZWFkYWJsZVxuICBjb25zdCB3ID0gcGFpci53cml0YWJsZVxuICBsZXQgcmVhZGFibGUgPSAhIWlzUmVhZGFibGUocilcbiAgbGV0IHdyaXRhYmxlID0gISFpc1dyaXRhYmxlKHcpXG4gIGxldCBvbmRyYWluXG4gIGxldCBvbmZpbmlzaFxuICBsZXQgb25yZWFkYWJsZVxuICBsZXQgb25jbG9zZVxuICBsZXQgZFxuICBmdW5jdGlvbiBvbmZpbmlzaGVkKGVycikge1xuICAgIGNvbnN0IGNiID0gb25jbG9zZVxuICAgIG9uY2xvc2UgPSBudWxsXG4gICAgaWYgKGNiKSB7XG4gICAgICBjYihlcnIpXG4gICAgfSBlbHNlIGlmIChlcnIpIHtcbiAgICAgIGQuZGVzdHJveShlcnIpXG4gICAgfVxuICB9XG5cbiAgLy8gVE9ETyhyb25hZyk6IEF2b2lkIGRvdWJsZSBidWZmZXJpbmcuXG4gIC8vIEltcGxlbWVudCBXcml0YWJsZS9SZWFkYWJsZS9EdXBsZXggdHJhaXRzLlxuICAvLyBTZWUsIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9wdWxsLzMzNTE1LlxuICBkID0gbmV3IER1cGxleGlmeSh7XG4gICAgLy8gVE9ETyAocm9uYWcpOiBoaWdoV2F0ZXJNYXJrP1xuICAgIHJlYWRhYmxlT2JqZWN0TW9kZTogISEociAhPT0gbnVsbCAmJiByICE9PSB1bmRlZmluZWQgJiYgci5yZWFkYWJsZU9iamVjdE1vZGUpLFxuICAgIHdyaXRhYmxlT2JqZWN0TW9kZTogISEodyAhPT0gbnVsbCAmJiB3ICE9PSB1bmRlZmluZWQgJiYgdy53cml0YWJsZU9iamVjdE1vZGUpLFxuICAgIHJlYWRhYmxlLFxuICAgIHdyaXRhYmxlXG4gIH0pXG4gIGlmICh3cml0YWJsZSkge1xuICAgIGVvcyh3LCAoZXJyKSA9PiB7XG4gICAgICB3cml0YWJsZSA9IGZhbHNlXG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIGRlc3Ryb3llcihyLCBlcnIpXG4gICAgICB9XG4gICAgICBvbmZpbmlzaGVkKGVycilcbiAgICB9KVxuICAgIGQuX3dyaXRlID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2FsbGJhY2spIHtcbiAgICAgIGlmICh3LndyaXRlKGNodW5rLCBlbmNvZGluZykpIHtcbiAgICAgICAgY2FsbGJhY2soKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb25kcmFpbiA9IGNhbGxiYWNrXG4gICAgICB9XG4gICAgfVxuICAgIGQuX2ZpbmFsID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICB3LmVuZCgpXG4gICAgICBvbmZpbmlzaCA9IGNhbGxiYWNrXG4gICAgfVxuICAgIHcub24oJ2RyYWluJywgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKG9uZHJhaW4pIHtcbiAgICAgICAgY29uc3QgY2IgPSBvbmRyYWluXG4gICAgICAgIG9uZHJhaW4gPSBudWxsXG4gICAgICAgIGNiKClcbiAgICAgIH1cbiAgICB9KVxuICAgIHcub24oJ2ZpbmlzaCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChvbmZpbmlzaCkge1xuICAgICAgICBjb25zdCBjYiA9IG9uZmluaXNoXG4gICAgICAgIG9uZmluaXNoID0gbnVsbFxuICAgICAgICBjYigpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuICBpZiAocmVhZGFibGUpIHtcbiAgICBlb3MociwgKGVycikgPT4ge1xuICAgICAgcmVhZGFibGUgPSBmYWxzZVxuICAgICAgaWYgKGVycikge1xuICAgICAgICBkZXN0cm95ZXIociwgZXJyKVxuICAgICAgfVxuICAgICAgb25maW5pc2hlZChlcnIpXG4gICAgfSlcbiAgICByLm9uKCdyZWFkYWJsZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChvbnJlYWRhYmxlKSB7XG4gICAgICAgIGNvbnN0IGNiID0gb25yZWFkYWJsZVxuICAgICAgICBvbnJlYWRhYmxlID0gbnVsbFxuICAgICAgICBjYigpXG4gICAgICB9XG4gICAgfSlcbiAgICByLm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBkLnB1c2gobnVsbClcbiAgICB9KVxuICAgIGQuX3JlYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBjb25zdCBidWYgPSByLnJlYWQoKVxuICAgICAgICBpZiAoYnVmID09PSBudWxsKSB7XG4gICAgICAgICAgb25yZWFkYWJsZSA9IGQuX3JlYWRcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWQucHVzaChidWYpKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZC5fZGVzdHJveSA9IGZ1bmN0aW9uIChlcnIsIGNhbGxiYWNrKSB7XG4gICAgaWYgKCFlcnIgJiYgb25jbG9zZSAhPT0gbnVsbCkge1xuICAgICAgZXJyID0gbmV3IEFib3J0RXJyb3IoKVxuICAgIH1cbiAgICBvbnJlYWRhYmxlID0gbnVsbFxuICAgIG9uZHJhaW4gPSBudWxsXG4gICAgb25maW5pc2ggPSBudWxsXG4gICAgaWYgKG9uY2xvc2UgPT09IG51bGwpIHtcbiAgICAgIGNhbGxiYWNrKGVycilcbiAgICB9IGVsc2Uge1xuICAgICAgb25jbG9zZSA9IGNhbGxiYWNrXG4gICAgICBkZXN0cm95ZXIodywgZXJyKVxuICAgICAgZGVzdHJveWVyKHIsIGVycilcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRcbn1cbiIsCiAgICAiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbi8vIGEgZHVwbGV4IHN0cmVhbSBpcyBqdXN0IGEgc3RyZWFtIHRoYXQgaXMgYm90aCByZWFkYWJsZSBhbmQgd3JpdGFibGUuXG4vLyBTaW5jZSBKUyBkb2Vzbid0IGhhdmUgbXVsdGlwbGUgcHJvdG90eXBlIGluaGVyaXRhbmNlLCB0aGlzIGNsYXNzXG4vLyBwcm90b3R5cGljYWxseSBpbmhlcml0cyBmcm9tIFJlYWRhYmxlLCBhbmQgdGhlbiBwYXJhc2l0aWNhbGx5IGZyb21cbi8vIFdyaXRhYmxlLlxuXG4ndXNlIHN0cmljdCdcblxuY29uc3Qge1xuICBPYmplY3REZWZpbmVQcm9wZXJ0aWVzLFxuICBPYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsXG4gIE9iamVjdEtleXMsXG4gIE9iamVjdFNldFByb3RvdHlwZU9mXG59ID0gcmVxdWlyZSgnLi4vLi4vb3Vycy9wcmltb3JkaWFscycpXG5tb2R1bGUuZXhwb3J0cyA9IER1cGxleFxuY29uc3QgUmVhZGFibGUgPSByZXF1aXJlKCcuL3JlYWRhYmxlJylcbmNvbnN0IFdyaXRhYmxlID0gcmVxdWlyZSgnLi93cml0YWJsZScpXG5PYmplY3RTZXRQcm90b3R5cGVPZihEdXBsZXgucHJvdG90eXBlLCBSZWFkYWJsZS5wcm90b3R5cGUpXG5PYmplY3RTZXRQcm90b3R5cGVPZihEdXBsZXgsIFJlYWRhYmxlKVxue1xuICBjb25zdCBrZXlzID0gT2JqZWN0S2V5cyhXcml0YWJsZS5wcm90b3R5cGUpXG4gIC8vIEFsbG93IHRoZSBrZXlzIGFycmF5IHRvIGJlIEdDJ2VkLlxuICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBtZXRob2QgPSBrZXlzW2ldXG4gICAgaWYgKCFEdXBsZXgucHJvdG90eXBlW21ldGhvZF0pIER1cGxleC5wcm90b3R5cGVbbWV0aG9kXSA9IFdyaXRhYmxlLnByb3RvdHlwZVttZXRob2RdXG4gIH1cbn1cbmZ1bmN0aW9uIER1cGxleChvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBEdXBsZXgpKSByZXR1cm4gbmV3IER1cGxleChvcHRpb25zKVxuICBSZWFkYWJsZS5jYWxsKHRoaXMsIG9wdGlvbnMpXG4gIFdyaXRhYmxlLmNhbGwodGhpcywgb3B0aW9ucylcbiAgaWYgKG9wdGlvbnMpIHtcbiAgICB0aGlzLmFsbG93SGFsZk9wZW4gPSBvcHRpb25zLmFsbG93SGFsZk9wZW4gIT09IGZhbHNlXG4gICAgaWYgKG9wdGlvbnMucmVhZGFibGUgPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLnJlYWRhYmxlID0gZmFsc2VcbiAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kZWQgPSB0cnVlXG4gICAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQgPSB0cnVlXG4gICAgfVxuICAgIGlmIChvcHRpb25zLndyaXRhYmxlID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5fd3JpdGFibGVTdGF0ZS53cml0YWJsZSA9IGZhbHNlXG4gICAgICB0aGlzLl93cml0YWJsZVN0YXRlLmVuZGluZyA9IHRydWVcbiAgICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWQgPSB0cnVlXG4gICAgICB0aGlzLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkID0gdHJ1ZVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aGlzLmFsbG93SGFsZk9wZW4gPSB0cnVlXG4gIH1cbn1cbk9iamVjdERlZmluZVByb3BlcnRpZXMoRHVwbGV4LnByb3RvdHlwZSwge1xuICB3cml0YWJsZToge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAuLi5PYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoV3JpdGFibGUucHJvdG90eXBlLCAnd3JpdGFibGUnKVxuICB9LFxuICB3cml0YWJsZUhpZ2hXYXRlck1hcms6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgLi4uT2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFdyaXRhYmxlLnByb3RvdHlwZSwgJ3dyaXRhYmxlSGlnaFdhdGVyTWFyaycpXG4gIH0sXG4gIHdyaXRhYmxlT2JqZWN0TW9kZToge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAuLi5PYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoV3JpdGFibGUucHJvdG90eXBlLCAnd3JpdGFibGVPYmplY3RNb2RlJylcbiAgfSxcbiAgd3JpdGFibGVCdWZmZXI6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgLi4uT2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFdyaXRhYmxlLnByb3RvdHlwZSwgJ3dyaXRhYmxlQnVmZmVyJylcbiAgfSxcbiAgd3JpdGFibGVMZW5ndGg6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgLi4uT2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFdyaXRhYmxlLnByb3RvdHlwZSwgJ3dyaXRhYmxlTGVuZ3RoJylcbiAgfSxcbiAgd3JpdGFibGVGaW5pc2hlZDoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAuLi5PYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoV3JpdGFibGUucHJvdG90eXBlLCAnd3JpdGFibGVGaW5pc2hlZCcpXG4gIH0sXG4gIHdyaXRhYmxlQ29ya2VkOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIC4uLk9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcihXcml0YWJsZS5wcm90b3R5cGUsICd3cml0YWJsZUNvcmtlZCcpXG4gIH0sXG4gIHdyaXRhYmxlRW5kZWQ6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgLi4uT2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFdyaXRhYmxlLnByb3RvdHlwZSwgJ3dyaXRhYmxlRW5kZWQnKVxuICB9LFxuICB3cml0YWJsZU5lZWREcmFpbjoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAuLi5PYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoV3JpdGFibGUucHJvdG90eXBlLCAnd3JpdGFibGVOZWVkRHJhaW4nKVxuICB9LFxuICBkZXN0cm95ZWQ6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZ2V0KCkge1xuICAgICAgaWYgKHRoaXMuX3JlYWRhYmxlU3RhdGUgPT09IHVuZGVmaW5lZCB8fCB0aGlzLl93cml0YWJsZVN0YXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQgJiYgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWRcbiAgICB9LFxuICAgIHNldCh2YWx1ZSkge1xuICAgICAgLy8gQmFja3dhcmQgY29tcGF0aWJpbGl0eSwgdGhlIHVzZXIgaXMgZXhwbGljaXRseVxuICAgICAgLy8gbWFuYWdpbmcgZGVzdHJveWVkLlxuICAgICAgaWYgKHRoaXMuX3JlYWRhYmxlU3RhdGUgJiYgdGhpcy5fd3JpdGFibGVTdGF0ZSkge1xuICAgICAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCA9IHZhbHVlXG4gICAgICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkID0gdmFsdWVcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG5sZXQgd2ViU3RyZWFtc0FkYXB0ZXJzXG5cbi8vIExhenkgdG8gYXZvaWQgY2lyY3VsYXIgcmVmZXJlbmNlc1xuZnVuY3Rpb24gbGF6eVdlYlN0cmVhbXMoKSB7XG4gIGlmICh3ZWJTdHJlYW1zQWRhcHRlcnMgPT09IHVuZGVmaW5lZCkgd2ViU3RyZWFtc0FkYXB0ZXJzID0ge31cbiAgcmV0dXJuIHdlYlN0cmVhbXNBZGFwdGVyc1xufVxuRHVwbGV4LmZyb21XZWIgPSBmdW5jdGlvbiAocGFpciwgb3B0aW9ucykge1xuICByZXR1cm4gbGF6eVdlYlN0cmVhbXMoKS5uZXdTdHJlYW1EdXBsZXhGcm9tUmVhZGFibGVXcml0YWJsZVBhaXIocGFpciwgb3B0aW9ucylcbn1cbkR1cGxleC50b1dlYiA9IGZ1bmN0aW9uIChkdXBsZXgpIHtcbiAgcmV0dXJuIGxhenlXZWJTdHJlYW1zKCkubmV3UmVhZGFibGVXcml0YWJsZVBhaXJGcm9tRHVwbGV4KGR1cGxleClcbn1cbmxldCBkdXBsZXhpZnlcbkR1cGxleC5mcm9tID0gZnVuY3Rpb24gKGJvZHkpIHtcbiAgaWYgKCFkdXBsZXhpZnkpIHtcbiAgICBkdXBsZXhpZnkgPSByZXF1aXJlKCcuL2R1cGxleGlmeScpXG4gIH1cbiAgcmV0dXJuIGR1cGxleGlmeShib2R5LCAnYm9keScpXG59XG4iLAogICAgIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyBhIHRyYW5zZm9ybSBzdHJlYW0gaXMgYSByZWFkYWJsZS93cml0YWJsZSBzdHJlYW0gd2hlcmUgeW91IGRvXG4vLyBzb21ldGhpbmcgd2l0aCB0aGUgZGF0YS4gIFNvbWV0aW1lcyBpdCdzIGNhbGxlZCBhIFwiZmlsdGVyXCIsXG4vLyBidXQgdGhhdCdzIG5vdCBhIGdyZWF0IG5hbWUgZm9yIGl0LCBzaW5jZSB0aGF0IGltcGxpZXMgYSB0aGluZyB3aGVyZVxuLy8gc29tZSBiaXRzIHBhc3MgdGhyb3VnaCwgYW5kIG90aGVycyBhcmUgc2ltcGx5IGlnbm9yZWQuICAoVGhhdCB3b3VsZFxuLy8gYmUgYSB2YWxpZCBleGFtcGxlIG9mIGEgdHJhbnNmb3JtLCBvZiBjb3Vyc2UuKVxuLy9cbi8vIFdoaWxlIHRoZSBvdXRwdXQgaXMgY2F1c2FsbHkgcmVsYXRlZCB0byB0aGUgaW5wdXQsIGl0J3Mgbm90IGFcbi8vIG5lY2Vzc2FyaWx5IHN5bW1ldHJpYyBvciBzeW5jaHJvbm91cyB0cmFuc2Zvcm1hdGlvbi4gIEZvciBleGFtcGxlLFxuLy8gYSB6bGliIHN0cmVhbSBtaWdodCB0YWtlIG11bHRpcGxlIHBsYWluLXRleHQgd3JpdGVzKCksIGFuZCB0aGVuXG4vLyBlbWl0IGEgc2luZ2xlIGNvbXByZXNzZWQgY2h1bmsgc29tZSB0aW1lIGluIHRoZSBmdXR1cmUuXG4vL1xuLy8gSGVyZSdzIGhvdyB0aGlzIHdvcmtzOlxuLy9cbi8vIFRoZSBUcmFuc2Zvcm0gc3RyZWFtIGhhcyBhbGwgdGhlIGFzcGVjdHMgb2YgdGhlIHJlYWRhYmxlIGFuZCB3cml0YWJsZVxuLy8gc3RyZWFtIGNsYXNzZXMuICBXaGVuIHlvdSB3cml0ZShjaHVuayksIHRoYXQgY2FsbHMgX3dyaXRlKGNodW5rLGNiKVxuLy8gaW50ZXJuYWxseSwgYW5kIHJldHVybnMgZmFsc2UgaWYgdGhlcmUncyBhIGxvdCBvZiBwZW5kaW5nIHdyaXRlc1xuLy8gYnVmZmVyZWQgdXAuICBXaGVuIHlvdSBjYWxsIHJlYWQoKSwgdGhhdCBjYWxscyBfcmVhZChuKSB1bnRpbFxuLy8gdGhlcmUncyBlbm91Z2ggcGVuZGluZyByZWFkYWJsZSBkYXRhIGJ1ZmZlcmVkIHVwLlxuLy9cbi8vIEluIGEgdHJhbnNmb3JtIHN0cmVhbSwgdGhlIHdyaXR0ZW4gZGF0YSBpcyBwbGFjZWQgaW4gYSBidWZmZXIuICBXaGVuXG4vLyBfcmVhZChuKSBpcyBjYWxsZWQsIGl0IHRyYW5zZm9ybXMgdGhlIHF1ZXVlZCB1cCBkYXRhLCBjYWxsaW5nIHRoZVxuLy8gYnVmZmVyZWQgX3dyaXRlIGNiJ3MgYXMgaXQgY29uc3VtZXMgY2h1bmtzLiAgSWYgY29uc3VtaW5nIGEgc2luZ2xlXG4vLyB3cml0dGVuIGNodW5rIHdvdWxkIHJlc3VsdCBpbiBtdWx0aXBsZSBvdXRwdXQgY2h1bmtzLCB0aGVuIHRoZSBmaXJzdFxuLy8gb3V0cHV0dGVkIGJpdCBjYWxscyB0aGUgcmVhZGNiLCBhbmQgc3Vic2VxdWVudCBjaHVua3MganVzdCBnbyBpbnRvXG4vLyB0aGUgcmVhZCBidWZmZXIsIGFuZCB3aWxsIGNhdXNlIGl0IHRvIGVtaXQgJ3JlYWRhYmxlJyBpZiBuZWNlc3NhcnkuXG4vL1xuLy8gVGhpcyB3YXksIGJhY2stcHJlc3N1cmUgaXMgYWN0dWFsbHkgZGV0ZXJtaW5lZCBieSB0aGUgcmVhZGluZyBzaWRlLFxuLy8gc2luY2UgX3JlYWQgaGFzIHRvIGJlIGNhbGxlZCB0byBzdGFydCBwcm9jZXNzaW5nIGEgbmV3IGNodW5rLiAgSG93ZXZlcixcbi8vIGEgcGF0aG9sb2dpY2FsIGluZmxhdGUgdHlwZSBvZiB0cmFuc2Zvcm0gY2FuIGNhdXNlIGV4Y2Vzc2l2ZSBidWZmZXJpbmdcbi8vIGhlcmUuICBGb3IgZXhhbXBsZSwgaW1hZ2luZSBhIHN0cmVhbSB3aGVyZSBldmVyeSBieXRlIG9mIGlucHV0IGlzXG4vLyBpbnRlcnByZXRlZCBhcyBhbiBpbnRlZ2VyIGZyb20gMC0yNTUsIGFuZCB0aGVuIHJlc3VsdHMgaW4gdGhhdCBtYW55XG4vLyBieXRlcyBvZiBvdXRwdXQuICBXcml0aW5nIHRoZSA0IGJ5dGVzIHtmZixmZixmZixmZn0gd291bGQgcmVzdWx0IGluXG4vLyAxa2Igb2YgZGF0YSBiZWluZyBvdXRwdXQuICBJbiB0aGlzIGNhc2UsIHlvdSBjb3VsZCB3cml0ZSBhIHZlcnkgc21hbGxcbi8vIGFtb3VudCBvZiBpbnB1dCwgYW5kIGVuZCB1cCB3aXRoIGEgdmVyeSBsYXJnZSBhbW91bnQgb2Ygb3V0cHV0LiAgSW5cbi8vIHN1Y2ggYSBwYXRob2xvZ2ljYWwgaW5mbGF0aW5nIG1lY2hhbmlzbSwgdGhlcmUnZCBiZSBubyB3YXkgdG8gdGVsbFxuLy8gdGhlIHN5c3RlbSB0byBzdG9wIGRvaW5nIHRoZSB0cmFuc2Zvcm0uICBBIHNpbmdsZSA0TUIgd3JpdGUgY291bGRcbi8vIGNhdXNlIHRoZSBzeXN0ZW0gdG8gcnVuIG91dCBvZiBtZW1vcnkuXG4vL1xuLy8gSG93ZXZlciwgZXZlbiBpbiBzdWNoIGEgcGF0aG9sb2dpY2FsIGNhc2UsIG9ubHkgYSBzaW5nbGUgd3JpdHRlbiBjaHVua1xuLy8gd291bGQgYmUgY29uc3VtZWQsIGFuZCB0aGVuIHRoZSByZXN0IHdvdWxkIHdhaXQgKHVuLXRyYW5zZm9ybWVkKSB1bnRpbFxuLy8gdGhlIHJlc3VsdHMgb2YgdGhlIHByZXZpb3VzIHRyYW5zZm9ybWVkIGNodW5rIHdlcmUgY29uc3VtZWQuXG5cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IE9iamVjdFNldFByb3RvdHlwZU9mLCBTeW1ib2wgfSA9IHJlcXVpcmUoJy4uLy4uL291cnMvcHJpbW9yZGlhbHMnKVxubW9kdWxlLmV4cG9ydHMgPSBUcmFuc2Zvcm1cbmNvbnN0IHsgRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQgfSA9IHJlcXVpcmUoJy4uLy4uL291cnMvZXJyb3JzJykuY29kZXNcbmNvbnN0IER1cGxleCA9IHJlcXVpcmUoJy4vZHVwbGV4JylcbmNvbnN0IHsgZ2V0SGlnaFdhdGVyTWFyayB9ID0gcmVxdWlyZSgnLi9zdGF0ZScpXG5PYmplY3RTZXRQcm90b3R5cGVPZihUcmFuc2Zvcm0ucHJvdG90eXBlLCBEdXBsZXgucHJvdG90eXBlKVxuT2JqZWN0U2V0UHJvdG90eXBlT2YoVHJhbnNmb3JtLCBEdXBsZXgpXG5jb25zdCBrQ2FsbGJhY2sgPSBTeW1ib2woJ2tDYWxsYmFjaycpXG5mdW5jdGlvbiBUcmFuc2Zvcm0ob3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgVHJhbnNmb3JtKSkgcmV0dXJuIG5ldyBUcmFuc2Zvcm0ob3B0aW9ucylcblxuICAvLyBUT0RPIChyb25hZyk6IFRoaXMgc2hvdWxkIHByZWZlcmFibHkgYWx3YXlzIGJlXG4gIC8vIGFwcGxpZWQgYnV0IHdvdWxkIGJlIHNlbXZlci1tYWpvci4gT3IgZXZlbiBiZXR0ZXI7XG4gIC8vIG1ha2UgVHJhbnNmb3JtIGEgUmVhZGFibGUgd2l0aCB0aGUgV3JpdGFibGUgaW50ZXJmYWNlLlxuICBjb25zdCByZWFkYWJsZUhpZ2hXYXRlck1hcmsgPSBvcHRpb25zID8gZ2V0SGlnaFdhdGVyTWFyayh0aGlzLCBvcHRpb25zLCAncmVhZGFibGVIaWdoV2F0ZXJNYXJrJywgdHJ1ZSkgOiBudWxsXG4gIGlmIChyZWFkYWJsZUhpZ2hXYXRlck1hcmsgPT09IDApIHtcbiAgICAvLyBBIER1cGxleCB3aWxsIGJ1ZmZlciBib3RoIG9uIHRoZSB3cml0YWJsZSBhbmQgcmVhZGFibGUgc2lkZSB3aGlsZVxuICAgIC8vIGEgVHJhbnNmb3JtIGp1c3Qgd2FudHMgdG8gYnVmZmVyIGh3bSBudW1iZXIgb2YgZWxlbWVudHMuIFRvIGF2b2lkXG4gICAgLy8gYnVmZmVyaW5nIHR3aWNlIHdlIGRpc2FibGUgYnVmZmVyaW5nIG9uIHRoZSB3cml0YWJsZSBzaWRlLlxuICAgIG9wdGlvbnMgPSB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgaGlnaFdhdGVyTWFyazogbnVsbCxcbiAgICAgIHJlYWRhYmxlSGlnaFdhdGVyTWFyayxcbiAgICAgIC8vIFRPRE8gKHJvbmFnKTogMCBpcyBub3Qgb3B0aW1hbCBzaW5jZSB3ZSBoYXZlXG4gICAgICAvLyBhIFwiYnVnXCIgd2hlcmUgd2UgY2hlY2sgbmVlZERyYWluIGJlZm9yZSBjYWxsaW5nIF93cml0ZSBhbmQgbm90IGFmdGVyLlxuICAgICAgLy8gUmVmczogaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvMzI4ODdcbiAgICAgIC8vIFJlZnM6IGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9wdWxsLzM1OTQxXG4gICAgICB3cml0YWJsZUhpZ2hXYXRlck1hcms6IG9wdGlvbnMud3JpdGFibGVIaWdoV2F0ZXJNYXJrIHx8IDBcbiAgICB9XG4gIH1cbiAgRHVwbGV4LmNhbGwodGhpcywgb3B0aW9ucylcblxuICAvLyBXZSBoYXZlIGltcGxlbWVudGVkIHRoZSBfcmVhZCBtZXRob2QsIGFuZCBkb25lIHRoZSBvdGhlciB0aGluZ3NcbiAgLy8gdGhhdCBSZWFkYWJsZSB3YW50cyBiZWZvcmUgdGhlIGZpcnN0IF9yZWFkIGNhbGwsIHNvIHVuc2V0IHRoZVxuICAvLyBzeW5jIGd1YXJkIGZsYWcuXG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUuc3luYyA9IGZhbHNlXG4gIHRoaXNba0NhbGxiYWNrXSA9IG51bGxcbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMudHJhbnNmb3JtID09PSAnZnVuY3Rpb24nKSB0aGlzLl90cmFuc2Zvcm0gPSBvcHRpb25zLnRyYW5zZm9ybVxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5mbHVzaCA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fZmx1c2ggPSBvcHRpb25zLmZsdXNoXG4gIH1cblxuICAvLyBXaGVuIHRoZSB3cml0YWJsZSBzaWRlIGZpbmlzaGVzLCB0aGVuIGZsdXNoIG91dCBhbnl0aGluZyByZW1haW5pbmcuXG4gIC8vIEJhY2t3YXJkcyBjb21wYXQuIFNvbWUgVHJhbnNmb3JtIHN0cmVhbXMgaW5jb3JyZWN0bHkgaW1wbGVtZW50IF9maW5hbFxuICAvLyBpbnN0ZWFkIG9mIG9yIGluIGFkZGl0aW9uIHRvIF9mbHVzaC4gQnkgdXNpbmcgJ3ByZWZpbmlzaCcgaW5zdGVhZCBvZlxuICAvLyBpbXBsZW1lbnRpbmcgX2ZpbmFsIHdlIGNvbnRpbnVlIHN1cHBvcnRpbmcgdGhpcyB1bmZvcnR1bmF0ZSB1c2UgY2FzZS5cbiAgdGhpcy5vbigncHJlZmluaXNoJywgcHJlZmluaXNoKVxufVxuZnVuY3Rpb24gZmluYWwoY2IpIHtcbiAgaWYgKHR5cGVvZiB0aGlzLl9mbHVzaCA9PT0gJ2Z1bmN0aW9uJyAmJiAhdGhpcy5kZXN0cm95ZWQpIHtcbiAgICB0aGlzLl9mbHVzaCgoZXIsIGRhdGEpID0+IHtcbiAgICAgIGlmIChlcikge1xuICAgICAgICBpZiAoY2IpIHtcbiAgICAgICAgICBjYihlcilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmRlc3Ryb3koZXIpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAoZGF0YSAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMucHVzaChkYXRhKVxuICAgICAgfVxuICAgICAgdGhpcy5wdXNoKG51bGwpXG4gICAgICBpZiAoY2IpIHtcbiAgICAgICAgY2IoKVxuICAgICAgfVxuICAgIH0pXG4gIH0gZWxzZSB7XG4gICAgdGhpcy5wdXNoKG51bGwpXG4gICAgaWYgKGNiKSB7XG4gICAgICBjYigpXG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBwcmVmaW5pc2goKSB7XG4gIGlmICh0aGlzLl9maW5hbCAhPT0gZmluYWwpIHtcbiAgICBmaW5hbC5jYWxsKHRoaXMpXG4gIH1cbn1cblRyYW5zZm9ybS5wcm90b3R5cGUuX2ZpbmFsID0gZmluYWxcblRyYW5zZm9ybS5wcm90b3R5cGUuX3RyYW5zZm9ybSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gIHRocm93IG5ldyBFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCgnX3RyYW5zZm9ybSgpJylcbn1cblRyYW5zZm9ybS5wcm90b3R5cGUuX3dyaXRlID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2FsbGJhY2spIHtcbiAgY29uc3QgclN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZVxuICBjb25zdCB3U3RhdGUgPSB0aGlzLl93cml0YWJsZVN0YXRlXG4gIGNvbnN0IGxlbmd0aCA9IHJTdGF0ZS5sZW5ndGhcbiAgdGhpcy5fdHJhbnNmb3JtKGNodW5rLCBlbmNvZGluZywgKGVyciwgdmFsKSA9PiB7XG4gICAgaWYgKGVycikge1xuICAgICAgY2FsbGJhY2soZXJyKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmICh2YWwgIT0gbnVsbCkge1xuICAgICAgdGhpcy5wdXNoKHZhbClcbiAgICB9XG4gICAgaWYgKFxuICAgICAgd1N0YXRlLmVuZGVkIHx8XG4gICAgICAvLyBCYWNrd2FyZHMgY29tcGF0LlxuICAgICAgbGVuZ3RoID09PSByU3RhdGUubGVuZ3RoIHx8XG4gICAgICAvLyBCYWNrd2FyZHMgY29tcGF0LlxuICAgICAgclN0YXRlLmxlbmd0aCA8IHJTdGF0ZS5oaWdoV2F0ZXJNYXJrXG4gICAgKSB7XG4gICAgICBjYWxsYmFjaygpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNba0NhbGxiYWNrXSA9IGNhbGxiYWNrXG4gICAgfVxuICB9KVxufVxuVHJhbnNmb3JtLnByb3RvdHlwZS5fcmVhZCA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXNba0NhbGxiYWNrXSkge1xuICAgIGNvbnN0IGNhbGxiYWNrID0gdGhpc1trQ2FsbGJhY2tdXG4gICAgdGhpc1trQ2FsbGJhY2tdID0gbnVsbFxuICAgIGNhbGxiYWNrKClcbiAgfVxufVxuIiwKICAgICIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuLy8gYSBwYXNzdGhyb3VnaCBzdHJlYW0uXG4vLyBiYXNpY2FsbHkganVzdCB0aGUgbW9zdCBtaW5pbWFsIHNvcnQgb2YgVHJhbnNmb3JtIHN0cmVhbS5cbi8vIEV2ZXJ5IHdyaXR0ZW4gY2h1bmsgZ2V0cyBvdXRwdXQgYXMtaXMuXG5cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IE9iamVjdFNldFByb3RvdHlwZU9mIH0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL3ByaW1vcmRpYWxzJylcbm1vZHVsZS5leHBvcnRzID0gUGFzc1Rocm91Z2hcbmNvbnN0IFRyYW5zZm9ybSA9IHJlcXVpcmUoJy4vdHJhbnNmb3JtJylcbk9iamVjdFNldFByb3RvdHlwZU9mKFBhc3NUaHJvdWdoLnByb3RvdHlwZSwgVHJhbnNmb3JtLnByb3RvdHlwZSlcbk9iamVjdFNldFByb3RvdHlwZU9mKFBhc3NUaHJvdWdoLCBUcmFuc2Zvcm0pXG5mdW5jdGlvbiBQYXNzVGhyb3VnaChvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBQYXNzVGhyb3VnaCkpIHJldHVybiBuZXcgUGFzc1Rocm91Z2gob3B0aW9ucylcbiAgVHJhbnNmb3JtLmNhbGwodGhpcywgb3B0aW9ucylcbn1cblBhc3NUaHJvdWdoLnByb3RvdHlwZS5fdHJhbnNmb3JtID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgY2IobnVsbCwgY2h1bmspXG59XG4iLAogICAgIi8qIHJlcGxhY2VtZW50IHN0YXJ0ICovXG5cbmNvbnN0IHByb2Nlc3MgPSByZXF1aXJlKCdwcm9jZXNzLycpXG5cbi8qIHJlcGxhY2VtZW50IGVuZCAqL1xuLy8gUG9ydGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL21hZmludG9zaC9wdW1wIHdpdGhcbi8vIHBlcm1pc3Npb24gZnJvbSB0aGUgYXV0aG9yLCBNYXRoaWFzIEJ1dXMgKEBtYWZpbnRvc2gpLlxuXG47KCd1c2Ugc3RyaWN0JylcbmNvbnN0IHsgQXJyYXlJc0FycmF5LCBQcm9taXNlLCBTeW1ib2xBc3luY0l0ZXJhdG9yLCBTeW1ib2xEaXNwb3NlIH0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL3ByaW1vcmRpYWxzJylcbmNvbnN0IGVvcyA9IHJlcXVpcmUoJy4vZW5kLW9mLXN0cmVhbScpXG5jb25zdCB7IG9uY2UgfSA9IHJlcXVpcmUoJy4uLy4uL291cnMvdXRpbCcpXG5jb25zdCBkZXN0cm95SW1wbCA9IHJlcXVpcmUoJy4vZGVzdHJveScpXG5jb25zdCBEdXBsZXggPSByZXF1aXJlKCcuL2R1cGxleCcpXG5jb25zdCB7XG4gIGFnZ3JlZ2F0ZVR3b0Vycm9ycyxcbiAgY29kZXM6IHtcbiAgICBFUlJfSU5WQUxJRF9BUkdfVFlQRSxcbiAgICBFUlJfSU5WQUxJRF9SRVRVUk5fVkFMVUUsXG4gICAgRVJSX01JU1NJTkdfQVJHUyxcbiAgICBFUlJfU1RSRUFNX0RFU1RST1lFRCxcbiAgICBFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRVxuICB9LFxuICBBYm9ydEVycm9yXG59ID0gcmVxdWlyZSgnLi4vLi4vb3Vycy9lcnJvcnMnKVxuY29uc3QgeyB2YWxpZGF0ZUZ1bmN0aW9uLCB2YWxpZGF0ZUFib3J0U2lnbmFsIH0gPSByZXF1aXJlKCcuLi92YWxpZGF0b3JzJylcbmNvbnN0IHtcbiAgaXNJdGVyYWJsZSxcbiAgaXNSZWFkYWJsZSxcbiAgaXNSZWFkYWJsZU5vZGVTdHJlYW0sXG4gIGlzTm9kZVN0cmVhbSxcbiAgaXNUcmFuc2Zvcm1TdHJlYW0sXG4gIGlzV2ViU3RyZWFtLFxuICBpc1JlYWRhYmxlU3RyZWFtLFxuICBpc1JlYWRhYmxlRmluaXNoZWRcbn0gPSByZXF1aXJlKCcuL3V0aWxzJylcbmNvbnN0IEFib3J0Q29udHJvbGxlciA9IGdsb2JhbFRoaXMuQWJvcnRDb250cm9sbGVyIHx8IHJlcXVpcmUoJ2Fib3J0LWNvbnRyb2xsZXInKS5BYm9ydENvbnRyb2xsZXJcbmxldCBQYXNzVGhyb3VnaFxubGV0IFJlYWRhYmxlXG5sZXQgYWRkQWJvcnRMaXN0ZW5lclxuZnVuY3Rpb24gZGVzdHJveWVyKHN0cmVhbSwgcmVhZGluZywgd3JpdGluZykge1xuICBsZXQgZmluaXNoZWQgPSBmYWxzZVxuICBzdHJlYW0ub24oJ2Nsb3NlJywgKCkgPT4ge1xuICAgIGZpbmlzaGVkID0gdHJ1ZVxuICB9KVxuICBjb25zdCBjbGVhbnVwID0gZW9zKFxuICAgIHN0cmVhbSxcbiAgICB7XG4gICAgICByZWFkYWJsZTogcmVhZGluZyxcbiAgICAgIHdyaXRhYmxlOiB3cml0aW5nXG4gICAgfSxcbiAgICAoZXJyKSA9PiB7XG4gICAgICBmaW5pc2hlZCA9ICFlcnJcbiAgICB9XG4gIClcbiAgcmV0dXJuIHtcbiAgICBkZXN0cm95OiAoZXJyKSA9PiB7XG4gICAgICBpZiAoZmluaXNoZWQpIHJldHVyblxuICAgICAgZmluaXNoZWQgPSB0cnVlXG4gICAgICBkZXN0cm95SW1wbC5kZXN0cm95ZXIoc3RyZWFtLCBlcnIgfHwgbmV3IEVSUl9TVFJFQU1fREVTVFJPWUVEKCdwaXBlJykpXG4gICAgfSxcbiAgICBjbGVhbnVwXG4gIH1cbn1cbmZ1bmN0aW9uIHBvcENhbGxiYWNrKHN0cmVhbXMpIHtcbiAgLy8gU3RyZWFtcyBzaG91bGQgbmV2ZXIgYmUgYW4gZW1wdHkgYXJyYXkuIEl0IHNob3VsZCBhbHdheXMgY29udGFpbiBhdCBsZWFzdFxuICAvLyBhIHNpbmdsZSBzdHJlYW0uIFRoZXJlZm9yZSBvcHRpbWl6ZSBmb3IgdGhlIGF2ZXJhZ2UgY2FzZSBpbnN0ZWFkIG9mXG4gIC8vIGNoZWNraW5nIGZvciBsZW5ndGggPT09IDAgYXMgd2VsbC5cbiAgdmFsaWRhdGVGdW5jdGlvbihzdHJlYW1zW3N0cmVhbXMubGVuZ3RoIC0gMV0sICdzdHJlYW1zW3N0cmVhbS5sZW5ndGggLSAxXScpXG4gIHJldHVybiBzdHJlYW1zLnBvcCgpXG59XG5mdW5jdGlvbiBtYWtlQXN5bmNJdGVyYWJsZSh2YWwpIHtcbiAgaWYgKGlzSXRlcmFibGUodmFsKSkge1xuICAgIHJldHVybiB2YWxcbiAgfSBlbHNlIGlmIChpc1JlYWRhYmxlTm9kZVN0cmVhbSh2YWwpKSB7XG4gICAgLy8gTGVnYWN5IHN0cmVhbXMgYXJlIG5vdCBJdGVyYWJsZS5cbiAgICByZXR1cm4gZnJvbVJlYWRhYmxlKHZhbClcbiAgfVxuICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoJ3ZhbCcsIFsnUmVhZGFibGUnLCAnSXRlcmFibGUnLCAnQXN5bmNJdGVyYWJsZSddLCB2YWwpXG59XG5hc3luYyBmdW5jdGlvbiogZnJvbVJlYWRhYmxlKHZhbCkge1xuICBpZiAoIVJlYWRhYmxlKSB7XG4gICAgUmVhZGFibGUgPSByZXF1aXJlKCcuL3JlYWRhYmxlJylcbiAgfVxuICB5aWVsZCogUmVhZGFibGUucHJvdG90eXBlW1N5bWJvbEFzeW5jSXRlcmF0b3JdLmNhbGwodmFsKVxufVxuYXN5bmMgZnVuY3Rpb24gcHVtcFRvTm9kZShpdGVyYWJsZSwgd3JpdGFibGUsIGZpbmlzaCwgeyBlbmQgfSkge1xuICBsZXQgZXJyb3JcbiAgbGV0IG9ucmVzb2x2ZSA9IG51bGxcbiAgY29uc3QgcmVzdW1lID0gKGVycikgPT4ge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIGVycm9yID0gZXJyXG4gICAgfVxuICAgIGlmIChvbnJlc29sdmUpIHtcbiAgICAgIGNvbnN0IGNhbGxiYWNrID0gb25yZXNvbHZlXG4gICAgICBvbnJlc29sdmUgPSBudWxsXG4gICAgICBjYWxsYmFjaygpXG4gICAgfVxuICB9XG4gIGNvbnN0IHdhaXQgPSAoKSA9PlxuICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmIChlcnJvcikge1xuICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvbnJlc29sdmUgPSAoKSA9PiB7XG4gICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc29sdmUoKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIHdyaXRhYmxlLm9uKCdkcmFpbicsIHJlc3VtZSlcbiAgY29uc3QgY2xlYW51cCA9IGVvcyhcbiAgICB3cml0YWJsZSxcbiAgICB7XG4gICAgICByZWFkYWJsZTogZmFsc2VcbiAgICB9LFxuICAgIHJlc3VtZVxuICApXG4gIHRyeSB7XG4gICAgaWYgKHdyaXRhYmxlLndyaXRhYmxlTmVlZERyYWluKSB7XG4gICAgICBhd2FpdCB3YWl0KClcbiAgICB9XG4gICAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBpdGVyYWJsZSkge1xuICAgICAgaWYgKCF3cml0YWJsZS53cml0ZShjaHVuaykpIHtcbiAgICAgICAgYXdhaXQgd2FpdCgpXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChlbmQpIHtcbiAgICAgIHdyaXRhYmxlLmVuZCgpXG4gICAgICBhd2FpdCB3YWl0KClcbiAgICB9XG4gICAgZmluaXNoKClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgZmluaXNoKGVycm9yICE9PSBlcnIgPyBhZ2dyZWdhdGVUd29FcnJvcnMoZXJyb3IsIGVycikgOiBlcnIpXG4gIH0gZmluYWxseSB7XG4gICAgY2xlYW51cCgpXG4gICAgd3JpdGFibGUub2ZmKCdkcmFpbicsIHJlc3VtZSlcbiAgfVxufVxuYXN5bmMgZnVuY3Rpb24gcHVtcFRvV2ViKHJlYWRhYmxlLCB3cml0YWJsZSwgZmluaXNoLCB7IGVuZCB9KSB7XG4gIGlmIChpc1RyYW5zZm9ybVN0cmVhbSh3cml0YWJsZSkpIHtcbiAgICB3cml0YWJsZSA9IHdyaXRhYmxlLndyaXRhYmxlXG4gIH1cbiAgLy8gaHR0cHM6Ly9zdHJlYW1zLnNwZWMud2hhdHdnLm9yZy8jZXhhbXBsZS1tYW51YWwtd3JpdGUtd2l0aC1iYWNrcHJlc3N1cmVcbiAgY29uc3Qgd3JpdGVyID0gd3JpdGFibGUuZ2V0V3JpdGVyKClcbiAgdHJ5IHtcbiAgICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIHJlYWRhYmxlKSB7XG4gICAgICBhd2FpdCB3cml0ZXIucmVhZHlcbiAgICAgIHdyaXRlci53cml0ZShjaHVuaykuY2F0Y2goKCkgPT4ge30pXG4gICAgfVxuICAgIGF3YWl0IHdyaXRlci5yZWFkeVxuICAgIGlmIChlbmQpIHtcbiAgICAgIGF3YWl0IHdyaXRlci5jbG9zZSgpXG4gICAgfVxuICAgIGZpbmlzaCgpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB3cml0ZXIuYWJvcnQoZXJyKVxuICAgICAgZmluaXNoKGVycilcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGZpbmlzaChlcnIpXG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBwaXBlbGluZSguLi5zdHJlYW1zKSB7XG4gIHJldHVybiBwaXBlbGluZUltcGwoc3RyZWFtcywgb25jZShwb3BDYWxsYmFjayhzdHJlYW1zKSkpXG59XG5mdW5jdGlvbiBwaXBlbGluZUltcGwoc3RyZWFtcywgY2FsbGJhY2ssIG9wdHMpIHtcbiAgaWYgKHN0cmVhbXMubGVuZ3RoID09PSAxICYmIEFycmF5SXNBcnJheShzdHJlYW1zWzBdKSkge1xuICAgIHN0cmVhbXMgPSBzdHJlYW1zWzBdXG4gIH1cbiAgaWYgKHN0cmVhbXMubGVuZ3RoIDwgMikge1xuICAgIHRocm93IG5ldyBFUlJfTUlTU0lOR19BUkdTKCdzdHJlYW1zJylcbiAgfVxuICBjb25zdCBhYyA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuICBjb25zdCBzaWduYWwgPSBhYy5zaWduYWxcbiAgY29uc3Qgb3V0ZXJTaWduYWwgPSBvcHRzID09PSBudWxsIHx8IG9wdHMgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IG9wdHMuc2lnbmFsXG5cbiAgLy8gTmVlZCB0byBjbGVhbnVwIGV2ZW50IGxpc3RlbmVycyBpZiBsYXN0IHN0cmVhbSBpcyByZWFkYWJsZVxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvaXNzdWVzLzM1NDUyXG4gIGNvbnN0IGxhc3RTdHJlYW1DbGVhbnVwID0gW11cbiAgdmFsaWRhdGVBYm9ydFNpZ25hbChvdXRlclNpZ25hbCwgJ29wdGlvbnMuc2lnbmFsJylcbiAgZnVuY3Rpb24gYWJvcnQoKSB7XG4gICAgZmluaXNoSW1wbChuZXcgQWJvcnRFcnJvcigpKVxuICB9XG4gIGFkZEFib3J0TGlzdGVuZXIgPSBhZGRBYm9ydExpc3RlbmVyIHx8IHJlcXVpcmUoJy4uLy4uL291cnMvdXRpbCcpLmFkZEFib3J0TGlzdGVuZXJcbiAgbGV0IGRpc3Bvc2FibGVcbiAgaWYgKG91dGVyU2lnbmFsKSB7XG4gICAgZGlzcG9zYWJsZSA9IGFkZEFib3J0TGlzdGVuZXIob3V0ZXJTaWduYWwsIGFib3J0KVxuICB9XG4gIGxldCBlcnJvclxuICBsZXQgdmFsdWVcbiAgY29uc3QgZGVzdHJveXMgPSBbXVxuICBsZXQgZmluaXNoQ291bnQgPSAwXG4gIGZ1bmN0aW9uIGZpbmlzaChlcnIpIHtcbiAgICBmaW5pc2hJbXBsKGVyciwgLS1maW5pc2hDb3VudCA9PT0gMClcbiAgfVxuICBmdW5jdGlvbiBmaW5pc2hJbXBsKGVyciwgZmluYWwpIHtcbiAgICB2YXIgX2Rpc3Bvc2FibGVcbiAgICBpZiAoZXJyICYmICghZXJyb3IgfHwgZXJyb3IuY29kZSA9PT0gJ0VSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFJykpIHtcbiAgICAgIGVycm9yID0gZXJyXG4gICAgfVxuICAgIGlmICghZXJyb3IgJiYgIWZpbmFsKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgd2hpbGUgKGRlc3Ryb3lzLmxlbmd0aCkge1xuICAgICAgZGVzdHJveXMuc2hpZnQoKShlcnJvcilcbiAgICB9XG4gICAgOyhfZGlzcG9zYWJsZSA9IGRpc3Bvc2FibGUpID09PSBudWxsIHx8IF9kaXNwb3NhYmxlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBfZGlzcG9zYWJsZVtTeW1ib2xEaXNwb3NlXSgpXG4gICAgYWMuYWJvcnQoKVxuICAgIGlmIChmaW5hbCkge1xuICAgICAgaWYgKCFlcnJvcikge1xuICAgICAgICBsYXN0U3RyZWFtQ2xlYW51cC5mb3JFYWNoKChmbikgPT4gZm4oKSlcbiAgICAgIH1cbiAgICAgIHByb2Nlc3MubmV4dFRpY2soY2FsbGJhY2ssIGVycm9yLCB2YWx1ZSlcbiAgICB9XG4gIH1cbiAgbGV0IHJldFxuICBmb3IgKGxldCBpID0gMDsgaSA8IHN0cmVhbXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBzdHJlYW0gPSBzdHJlYW1zW2ldXG4gICAgY29uc3QgcmVhZGluZyA9IGkgPCBzdHJlYW1zLmxlbmd0aCAtIDFcbiAgICBjb25zdCB3cml0aW5nID0gaSA+IDBcbiAgICBjb25zdCBlbmQgPSByZWFkaW5nIHx8IChvcHRzID09PSBudWxsIHx8IG9wdHMgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IG9wdHMuZW5kKSAhPT0gZmFsc2VcbiAgICBjb25zdCBpc0xhc3RTdHJlYW0gPSBpID09PSBzdHJlYW1zLmxlbmd0aCAtIDFcbiAgICBpZiAoaXNOb2RlU3RyZWFtKHN0cmVhbSkpIHtcbiAgICAgIGlmIChlbmQpIHtcbiAgICAgICAgY29uc3QgeyBkZXN0cm95LCBjbGVhbnVwIH0gPSBkZXN0cm95ZXIoc3RyZWFtLCByZWFkaW5nLCB3cml0aW5nKVxuICAgICAgICBkZXN0cm95cy5wdXNoKGRlc3Ryb3kpXG4gICAgICAgIGlmIChpc1JlYWRhYmxlKHN0cmVhbSkgJiYgaXNMYXN0U3RyZWFtKSB7XG4gICAgICAgICAgbGFzdFN0cmVhbUNsZWFudXAucHVzaChjbGVhbnVwKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIENhdGNoIHN0cmVhbSBlcnJvcnMgdGhhdCBvY2N1ciBhZnRlciBwaXBlL3B1bXAgaGFzIGNvbXBsZXRlZC5cbiAgICAgIGZ1bmN0aW9uIG9uRXJyb3IoZXJyKSB7XG4gICAgICAgIGlmIChlcnIgJiYgZXJyLm5hbWUgIT09ICdBYm9ydEVycm9yJyAmJiBlcnIuY29kZSAhPT0gJ0VSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFJykge1xuICAgICAgICAgIGZpbmlzaChlcnIpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHN0cmVhbS5vbignZXJyb3InLCBvbkVycm9yKVxuICAgICAgaWYgKGlzUmVhZGFibGUoc3RyZWFtKSAmJiBpc0xhc3RTdHJlYW0pIHtcbiAgICAgICAgbGFzdFN0cmVhbUNsZWFudXAucHVzaCgoKSA9PiB7XG4gICAgICAgICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uRXJyb3IpXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpID09PSAwKSB7XG4gICAgICBpZiAodHlwZW9mIHN0cmVhbSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXQgPSBzdHJlYW0oe1xuICAgICAgICAgIHNpZ25hbFxuICAgICAgICB9KVxuICAgICAgICBpZiAoIWlzSXRlcmFibGUocmV0KSkge1xuICAgICAgICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9SRVRVUk5fVkFMVUUoJ0l0ZXJhYmxlLCBBc3luY0l0ZXJhYmxlIG9yIFN0cmVhbScsICdzb3VyY2UnLCByZXQpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNJdGVyYWJsZShzdHJlYW0pIHx8IGlzUmVhZGFibGVOb2RlU3RyZWFtKHN0cmVhbSkgfHwgaXNUcmFuc2Zvcm1TdHJlYW0oc3RyZWFtKSkge1xuICAgICAgICByZXQgPSBzdHJlYW1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldCA9IER1cGxleC5mcm9tKHN0cmVhbSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBzdHJlYW0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmIChpc1RyYW5zZm9ybVN0cmVhbShyZXQpKSB7XG4gICAgICAgIHZhciBfcmV0XG4gICAgICAgIHJldCA9IG1ha2VBc3luY0l0ZXJhYmxlKChfcmV0ID0gcmV0KSA9PT0gbnVsbCB8fCBfcmV0ID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBfcmV0LnJlYWRhYmxlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0ID0gbWFrZUFzeW5jSXRlcmFibGUocmV0KVxuICAgICAgfVxuICAgICAgcmV0ID0gc3RyZWFtKHJldCwge1xuICAgICAgICBzaWduYWxcbiAgICAgIH0pXG4gICAgICBpZiAocmVhZGluZykge1xuICAgICAgICBpZiAoIWlzSXRlcmFibGUocmV0LCB0cnVlKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9SRVRVUk5fVkFMVUUoJ0FzeW5jSXRlcmFibGUnLCBgdHJhbnNmb3JtWyR7aSAtIDF9XWAsIHJldClcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIF9yZXQyXG4gICAgICAgIGlmICghUGFzc1Rocm91Z2gpIHtcbiAgICAgICAgICBQYXNzVGhyb3VnaCA9IHJlcXVpcmUoJy4vcGFzc3Rocm91Z2gnKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgdGhlIGxhc3QgYXJndW1lbnQgdG8gcGlwZWxpbmUgaXMgbm90IGEgc3RyZWFtXG4gICAgICAgIC8vIHdlIG11c3QgY3JlYXRlIGEgcHJveHkgc3RyZWFtIHNvIHRoYXQgcGlwZWxpbmUoLi4uKVxuICAgICAgICAvLyBhbHdheXMgcmV0dXJucyBhIHN0cmVhbSB3aGljaCBjYW4gYmUgZnVydGhlclxuICAgICAgICAvLyBjb21wb3NlZCB0aHJvdWdoIGAucGlwZShzdHJlYW0pYC5cblxuICAgICAgICBjb25zdCBwdCA9IG5ldyBQYXNzVGhyb3VnaCh7XG4gICAgICAgICAgb2JqZWN0TW9kZTogdHJ1ZVxuICAgICAgICB9KVxuXG4gICAgICAgIC8vIEhhbmRsZSBQcm9taXNlcy9BKyBzcGVjLCBgdGhlbmAgY291bGQgYmUgYSBnZXR0ZXIgdGhhdCB0aHJvd3Mgb25cbiAgICAgICAgLy8gc2Vjb25kIHVzZS5cbiAgICAgICAgY29uc3QgdGhlbiA9IChfcmV0MiA9IHJldCkgPT09IG51bGwgfHwgX3JldDIgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IF9yZXQyLnRoZW5cbiAgICAgICAgaWYgKHR5cGVvZiB0aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgZmluaXNoQ291bnQrK1xuICAgICAgICAgIHRoZW4uY2FsbChcbiAgICAgICAgICAgIHJldCxcbiAgICAgICAgICAgICh2YWwpID0+IHtcbiAgICAgICAgICAgICAgdmFsdWUgPSB2YWxcbiAgICAgICAgICAgICAgaWYgKHZhbCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcHQud3JpdGUodmFsKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChlbmQpIHtcbiAgICAgICAgICAgICAgICBwdC5lbmQoKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHByb2Nlc3MubmV4dFRpY2soZmluaXNoKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgcHQuZGVzdHJveShlcnIpXG4gICAgICAgICAgICAgIHByb2Nlc3MubmV4dFRpY2soZmluaXNoLCBlcnIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKVxuICAgICAgICB9IGVsc2UgaWYgKGlzSXRlcmFibGUocmV0LCB0cnVlKSkge1xuICAgICAgICAgIGZpbmlzaENvdW50KytcbiAgICAgICAgICBwdW1wVG9Ob2RlKHJldCwgcHQsIGZpbmlzaCwge1xuICAgICAgICAgICAgZW5kXG4gICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIGlmIChpc1JlYWRhYmxlU3RyZWFtKHJldCkgfHwgaXNUcmFuc2Zvcm1TdHJlYW0ocmV0KSkge1xuICAgICAgICAgIGNvbnN0IHRvUmVhZCA9IHJldC5yZWFkYWJsZSB8fCByZXRcbiAgICAgICAgICBmaW5pc2hDb3VudCsrXG4gICAgICAgICAgcHVtcFRvTm9kZSh0b1JlYWQsIHB0LCBmaW5pc2gsIHtcbiAgICAgICAgICAgIGVuZFxuICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX1JFVFVSTl9WQUxVRSgnQXN5bmNJdGVyYWJsZSBvciBQcm9taXNlJywgJ2Rlc3RpbmF0aW9uJywgcmV0KVxuICAgICAgICB9XG4gICAgICAgIHJldCA9IHB0XG4gICAgICAgIGNvbnN0IHsgZGVzdHJveSwgY2xlYW51cCB9ID0gZGVzdHJveWVyKHJldCwgZmFsc2UsIHRydWUpXG4gICAgICAgIGRlc3Ryb3lzLnB1c2goZGVzdHJveSlcbiAgICAgICAgaWYgKGlzTGFzdFN0cmVhbSkge1xuICAgICAgICAgIGxhc3RTdHJlYW1DbGVhbnVwLnB1c2goY2xlYW51cClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNOb2RlU3RyZWFtKHN0cmVhbSkpIHtcbiAgICAgIGlmIChpc1JlYWRhYmxlTm9kZVN0cmVhbShyZXQpKSB7XG4gICAgICAgIGZpbmlzaENvdW50ICs9IDJcbiAgICAgICAgY29uc3QgY2xlYW51cCA9IHBpcGUocmV0LCBzdHJlYW0sIGZpbmlzaCwge1xuICAgICAgICAgIGVuZFxuICAgICAgICB9KVxuICAgICAgICBpZiAoaXNSZWFkYWJsZShzdHJlYW0pICYmIGlzTGFzdFN0cmVhbSkge1xuICAgICAgICAgIGxhc3RTdHJlYW1DbGVhbnVwLnB1c2goY2xlYW51cClcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc1RyYW5zZm9ybVN0cmVhbShyZXQpIHx8IGlzUmVhZGFibGVTdHJlYW0ocmV0KSkge1xuICAgICAgICBjb25zdCB0b1JlYWQgPSByZXQucmVhZGFibGUgfHwgcmV0XG4gICAgICAgIGZpbmlzaENvdW50KytcbiAgICAgICAgcHVtcFRvTm9kZSh0b1JlYWQsIHN0cmVhbSwgZmluaXNoLCB7XG4gICAgICAgICAgZW5kXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2UgaWYgKGlzSXRlcmFibGUocmV0KSkge1xuICAgICAgICBmaW5pc2hDb3VudCsrXG4gICAgICAgIHB1bXBUb05vZGUocmV0LCBzdHJlYW0sIGZpbmlzaCwge1xuICAgICAgICAgIGVuZFxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKFxuICAgICAgICAgICd2YWwnLFxuICAgICAgICAgIFsnUmVhZGFibGUnLCAnSXRlcmFibGUnLCAnQXN5bmNJdGVyYWJsZScsICdSZWFkYWJsZVN0cmVhbScsICdUcmFuc2Zvcm1TdHJlYW0nXSxcbiAgICAgICAgICByZXRcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgcmV0ID0gc3RyZWFtXG4gICAgfSBlbHNlIGlmIChpc1dlYlN0cmVhbShzdHJlYW0pKSB7XG4gICAgICBpZiAoaXNSZWFkYWJsZU5vZGVTdHJlYW0ocmV0KSkge1xuICAgICAgICBmaW5pc2hDb3VudCsrXG4gICAgICAgIHB1bXBUb1dlYihtYWtlQXN5bmNJdGVyYWJsZShyZXQpLCBzdHJlYW0sIGZpbmlzaCwge1xuICAgICAgICAgIGVuZFxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIGlmIChpc1JlYWRhYmxlU3RyZWFtKHJldCkgfHwgaXNJdGVyYWJsZShyZXQpKSB7XG4gICAgICAgIGZpbmlzaENvdW50KytcbiAgICAgICAgcHVtcFRvV2ViKHJldCwgc3RyZWFtLCBmaW5pc2gsIHtcbiAgICAgICAgICBlbmRcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSBpZiAoaXNUcmFuc2Zvcm1TdHJlYW0ocmV0KSkge1xuICAgICAgICBmaW5pc2hDb3VudCsrXG4gICAgICAgIHB1bXBUb1dlYihyZXQucmVhZGFibGUsIHN0cmVhbSwgZmluaXNoLCB7XG4gICAgICAgICAgZW5kXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoXG4gICAgICAgICAgJ3ZhbCcsXG4gICAgICAgICAgWydSZWFkYWJsZScsICdJdGVyYWJsZScsICdBc3luY0l0ZXJhYmxlJywgJ1JlYWRhYmxlU3RyZWFtJywgJ1RyYW5zZm9ybVN0cmVhbSddLFxuICAgICAgICAgIHJldFxuICAgICAgICApXG4gICAgICB9XG4gICAgICByZXQgPSBzdHJlYW1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0ID0gRHVwbGV4LmZyb20oc3RyZWFtKVxuICAgIH1cbiAgfVxuICBpZiAoXG4gICAgKHNpZ25hbCAhPT0gbnVsbCAmJiBzaWduYWwgIT09IHVuZGVmaW5lZCAmJiBzaWduYWwuYWJvcnRlZCkgfHxcbiAgICAob3V0ZXJTaWduYWwgIT09IG51bGwgJiYgb3V0ZXJTaWduYWwgIT09IHVuZGVmaW5lZCAmJiBvdXRlclNpZ25hbC5hYm9ydGVkKVxuICApIHtcbiAgICBwcm9jZXNzLm5leHRUaWNrKGFib3J0KVxuICB9XG4gIHJldHVybiByZXRcbn1cbmZ1bmN0aW9uIHBpcGUoc3JjLCBkc3QsIGZpbmlzaCwgeyBlbmQgfSkge1xuICBsZXQgZW5kZWQgPSBmYWxzZVxuICBkc3Qub24oJ2Nsb3NlJywgKCkgPT4ge1xuICAgIGlmICghZW5kZWQpIHtcbiAgICAgIC8vIEZpbmlzaCBpZiB0aGUgZGVzdGluYXRpb24gY2xvc2VzIGJlZm9yZSB0aGUgc291cmNlIGhhcyBjb21wbGV0ZWQuXG4gICAgICBmaW5pc2gobmV3IEVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFKCkpXG4gICAgfVxuICB9KVxuICBzcmMucGlwZShkc3QsIHtcbiAgICBlbmQ6IGZhbHNlXG4gIH0pIC8vIElmIGVuZCBpcyB0cnVlIHdlIGFscmVhZHkgd2lsbCBoYXZlIGEgbGlzdGVuZXIgdG8gZW5kIGRzdC5cblxuICBpZiAoZW5kKSB7XG4gICAgLy8gQ29tcGF0LiBCZWZvcmUgbm9kZSB2MTAuMTIuMCBzdGRpbyB1c2VkIHRvIHRocm93IGFuIGVycm9yIHNvXG4gICAgLy8gcGlwZSgpIGRpZC9kb2VzIG5vdCBlbmQoKSBzdGRpbyBkZXN0aW5hdGlvbnMuXG4gICAgLy8gTm93IHRoZXkgYWxsb3cgaXQgYnV0IFwic2VjcmV0bHlcIiBkb24ndCBjbG9zZSB0aGUgdW5kZXJseWluZyBmZC5cblxuICAgIGZ1bmN0aW9uIGVuZEZuKCkge1xuICAgICAgZW5kZWQgPSB0cnVlXG4gICAgICBkc3QuZW5kKClcbiAgICB9XG4gICAgaWYgKGlzUmVhZGFibGVGaW5pc2hlZChzcmMpKSB7XG4gICAgICAvLyBFbmQgdGhlIGRlc3RpbmF0aW9uIGlmIHRoZSBzb3VyY2UgaGFzIGFscmVhZHkgZW5kZWQuXG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGVuZEZuKVxuICAgIH0gZWxzZSB7XG4gICAgICBzcmMub25jZSgnZW5kJywgZW5kRm4pXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZpbmlzaCgpXG4gIH1cbiAgZW9zKFxuICAgIHNyYyxcbiAgICB7XG4gICAgICByZWFkYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiBmYWxzZVxuICAgIH0sXG4gICAgKGVycikgPT4ge1xuICAgICAgY29uc3QgclN0YXRlID0gc3JjLl9yZWFkYWJsZVN0YXRlXG4gICAgICBpZiAoXG4gICAgICAgIGVyciAmJlxuICAgICAgICBlcnIuY29kZSA9PT0gJ0VSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFJyAmJlxuICAgICAgICByU3RhdGUgJiZcbiAgICAgICAgclN0YXRlLmVuZGVkICYmXG4gICAgICAgICFyU3RhdGUuZXJyb3JlZCAmJlxuICAgICAgICAhclN0YXRlLmVycm9yRW1pdHRlZFxuICAgICAgKSB7XG4gICAgICAgIC8vIFNvbWUgcmVhZGFibGUgc3RyZWFtcyB3aWxsIGVtaXQgJ2Nsb3NlJyBiZWZvcmUgJ2VuZCcuIEhvd2V2ZXIsIHNpbmNlXG4gICAgICAgIC8vIHRoaXMgaXMgb24gdGhlIHJlYWRhYmxlIHNpZGUgJ2VuZCcgc2hvdWxkIHN0aWxsIGJlIGVtaXR0ZWQgaWYgdGhlXG4gICAgICAgIC8vIHN0cmVhbSBoYXMgYmVlbiBlbmRlZCBhbmQgbm8gZXJyb3IgZW1pdHRlZC4gVGhpcyBzaG91bGQgYmUgYWxsb3dlZCBpblxuICAgICAgICAvLyBmYXZvciBvZiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4gU2luY2UgdGhlIHN0cmVhbSBpcyBwaXBlZCB0byBhXG4gICAgICAgIC8vIGRlc3RpbmF0aW9uIHRoaXMgc2hvdWxkIG5vdCByZXN1bHQgaW4gYW55IG9ic2VydmFibGUgZGlmZmVyZW5jZS5cbiAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBjaGVjayBpZiB0aGlzIGlzIGEgd3JpdGFibGUgcHJlbWF0dXJlIGNsb3NlIHNpbmNlXG4gICAgICAgIC8vIGVvcyB3aWxsIG9ubHkgZmFpbCB3aXRoIHByZW1hdHVyZSBjbG9zZSBvbiB0aGUgcmVhZGluZyBzaWRlIGZvclxuICAgICAgICAvLyBkdXBsZXggc3RyZWFtcy5cbiAgICAgICAgc3JjLm9uY2UoJ2VuZCcsIGZpbmlzaCkub25jZSgnZXJyb3InLCBmaW5pc2gpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaW5pc2goZXJyKVxuICAgICAgfVxuICAgIH1cbiAgKVxuICByZXR1cm4gZW9zKFxuICAgIGRzdCxcbiAgICB7XG4gICAgICByZWFkYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0sXG4gICAgZmluaXNoXG4gIClcbn1cbm1vZHVsZS5leHBvcnRzID0ge1xuICBwaXBlbGluZUltcGwsXG4gIHBpcGVsaW5lXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHBpcGVsaW5lIH0gPSByZXF1aXJlKCcuL3BpcGVsaW5lJylcbmNvbnN0IER1cGxleCA9IHJlcXVpcmUoJy4vZHVwbGV4JylcbmNvbnN0IHsgZGVzdHJveWVyIH0gPSByZXF1aXJlKCcuL2Rlc3Ryb3knKVxuY29uc3Qge1xuICBpc05vZGVTdHJlYW0sXG4gIGlzUmVhZGFibGUsXG4gIGlzV3JpdGFibGUsXG4gIGlzV2ViU3RyZWFtLFxuICBpc1RyYW5zZm9ybVN0cmVhbSxcbiAgaXNXcml0YWJsZVN0cmVhbSxcbiAgaXNSZWFkYWJsZVN0cmVhbVxufSA9IHJlcXVpcmUoJy4vdXRpbHMnKVxuY29uc3Qge1xuICBBYm9ydEVycm9yLFxuICBjb2RlczogeyBFUlJfSU5WQUxJRF9BUkdfVkFMVUUsIEVSUl9NSVNTSU5HX0FSR1MgfVxufSA9IHJlcXVpcmUoJy4uLy4uL291cnMvZXJyb3JzJylcbmNvbnN0IGVvcyA9IHJlcXVpcmUoJy4vZW5kLW9mLXN0cmVhbScpXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNvbXBvc2UoLi4uc3RyZWFtcykge1xuICBpZiAoc3RyZWFtcy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRVJSX01JU1NJTkdfQVJHUygnc3RyZWFtcycpXG4gIH1cbiAgaWYgKHN0cmVhbXMubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIER1cGxleC5mcm9tKHN0cmVhbXNbMF0pXG4gIH1cbiAgY29uc3Qgb3JnU3RyZWFtcyA9IFsuLi5zdHJlYW1zXVxuICBpZiAodHlwZW9mIHN0cmVhbXNbMF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICBzdHJlYW1zWzBdID0gRHVwbGV4LmZyb20oc3RyZWFtc1swXSlcbiAgfVxuICBpZiAodHlwZW9mIHN0cmVhbXNbc3RyZWFtcy5sZW5ndGggLSAxXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNvbnN0IGlkeCA9IHN0cmVhbXMubGVuZ3RoIC0gMVxuICAgIHN0cmVhbXNbaWR4XSA9IER1cGxleC5mcm9tKHN0cmVhbXNbaWR4XSlcbiAgfVxuICBmb3IgKGxldCBuID0gMDsgbiA8IHN0cmVhbXMubGVuZ3RoOyArK24pIHtcbiAgICBpZiAoIWlzTm9kZVN0cmVhbShzdHJlYW1zW25dKSAmJiAhaXNXZWJTdHJlYW0oc3RyZWFtc1tuXSkpIHtcbiAgICAgIC8vIFRPRE8ocm9uYWcpOiBBZGQgY2hlY2tzIGZvciBub24gc3RyZWFtcy5cbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGlmIChcbiAgICAgIG4gPCBzdHJlYW1zLmxlbmd0aCAtIDEgJiZcbiAgICAgICEoaXNSZWFkYWJsZShzdHJlYW1zW25dKSB8fCBpc1JlYWRhYmxlU3RyZWFtKHN0cmVhbXNbbl0pIHx8IGlzVHJhbnNmb3JtU3RyZWFtKHN0cmVhbXNbbl0pKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19WQUxVRShgc3RyZWFtc1ske259XWAsIG9yZ1N0cmVhbXNbbl0sICdtdXN0IGJlIHJlYWRhYmxlJylcbiAgICB9XG4gICAgaWYgKG4gPiAwICYmICEoaXNXcml0YWJsZShzdHJlYW1zW25dKSB8fCBpc1dyaXRhYmxlU3RyZWFtKHN0cmVhbXNbbl0pIHx8IGlzVHJhbnNmb3JtU3RyZWFtKHN0cmVhbXNbbl0pKSkge1xuICAgICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19WQUxVRShgc3RyZWFtc1ske259XWAsIG9yZ1N0cmVhbXNbbl0sICdtdXN0IGJlIHdyaXRhYmxlJylcbiAgICB9XG4gIH1cbiAgbGV0IG9uZHJhaW5cbiAgbGV0IG9uZmluaXNoXG4gIGxldCBvbnJlYWRhYmxlXG4gIGxldCBvbmNsb3NlXG4gIGxldCBkXG4gIGZ1bmN0aW9uIG9uZmluaXNoZWQoZXJyKSB7XG4gICAgY29uc3QgY2IgPSBvbmNsb3NlXG4gICAgb25jbG9zZSA9IG51bGxcbiAgICBpZiAoY2IpIHtcbiAgICAgIGNiKGVycilcbiAgICB9IGVsc2UgaWYgKGVycikge1xuICAgICAgZC5kZXN0cm95KGVycilcbiAgICB9IGVsc2UgaWYgKCFyZWFkYWJsZSAmJiAhd3JpdGFibGUpIHtcbiAgICAgIGQuZGVzdHJveSgpXG4gICAgfVxuICB9XG4gIGNvbnN0IGhlYWQgPSBzdHJlYW1zWzBdXG4gIGNvbnN0IHRhaWwgPSBwaXBlbGluZShzdHJlYW1zLCBvbmZpbmlzaGVkKVxuICBjb25zdCB3cml0YWJsZSA9ICEhKGlzV3JpdGFibGUoaGVhZCkgfHwgaXNXcml0YWJsZVN0cmVhbShoZWFkKSB8fCBpc1RyYW5zZm9ybVN0cmVhbShoZWFkKSlcbiAgY29uc3QgcmVhZGFibGUgPSAhIShpc1JlYWRhYmxlKHRhaWwpIHx8IGlzUmVhZGFibGVTdHJlYW0odGFpbCkgfHwgaXNUcmFuc2Zvcm1TdHJlYW0odGFpbCkpXG5cbiAgLy8gVE9ETyhyb25hZyk6IEF2b2lkIGRvdWJsZSBidWZmZXJpbmcuXG4gIC8vIEltcGxlbWVudCBXcml0YWJsZS9SZWFkYWJsZS9EdXBsZXggdHJhaXRzLlxuICAvLyBTZWUsIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9wdWxsLzMzNTE1LlxuICBkID0gbmV3IER1cGxleCh7XG4gICAgLy8gVE9ETyAocm9uYWcpOiBoaWdoV2F0ZXJNYXJrP1xuICAgIHdyaXRhYmxlT2JqZWN0TW9kZTogISEoaGVhZCAhPT0gbnVsbCAmJiBoZWFkICE9PSB1bmRlZmluZWQgJiYgaGVhZC53cml0YWJsZU9iamVjdE1vZGUpLFxuICAgIHJlYWRhYmxlT2JqZWN0TW9kZTogISEodGFpbCAhPT0gbnVsbCAmJiB0YWlsICE9PSB1bmRlZmluZWQgJiYgdGFpbC5yZWFkYWJsZU9iamVjdE1vZGUpLFxuICAgIHdyaXRhYmxlLFxuICAgIHJlYWRhYmxlXG4gIH0pXG4gIGlmICh3cml0YWJsZSkge1xuICAgIGlmIChpc05vZGVTdHJlYW0oaGVhZCkpIHtcbiAgICAgIGQuX3dyaXRlID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKGhlYWQud3JpdGUoY2h1bmssIGVuY29kaW5nKSkge1xuICAgICAgICAgIGNhbGxiYWNrKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvbmRyYWluID0gY2FsbGJhY2tcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZC5fZmluYWwgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgICAgaGVhZC5lbmQoKVxuICAgICAgICBvbmZpbmlzaCA9IGNhbGxiYWNrXG4gICAgICB9XG4gICAgICBoZWFkLm9uKCdkcmFpbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKG9uZHJhaW4pIHtcbiAgICAgICAgICBjb25zdCBjYiA9IG9uZHJhaW5cbiAgICAgICAgICBvbmRyYWluID0gbnVsbFxuICAgICAgICAgIGNiKClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9IGVsc2UgaWYgKGlzV2ViU3RyZWFtKGhlYWQpKSB7XG4gICAgICBjb25zdCB3cml0YWJsZSA9IGlzVHJhbnNmb3JtU3RyZWFtKGhlYWQpID8gaGVhZC53cml0YWJsZSA6IGhlYWRcbiAgICAgIGNvbnN0IHdyaXRlciA9IHdyaXRhYmxlLmdldFdyaXRlcigpXG4gICAgICBkLl93cml0ZSA9IGFzeW5jIGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgd3JpdGVyLnJlYWR5XG4gICAgICAgICAgd3JpdGVyLndyaXRlKGNodW5rKS5jYXRjaCgoKSA9PiB7fSlcbiAgICAgICAgICBjYWxsYmFjaygpXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNhbGxiYWNrKGVycilcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZC5fZmluYWwgPSBhc3luYyBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB3cml0ZXIucmVhZHlcbiAgICAgICAgICB3cml0ZXIuY2xvc2UoKS5jYXRjaCgoKSA9PiB7fSlcbiAgICAgICAgICBvbmZpbmlzaCA9IGNhbGxiYWNrXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNhbGxiYWNrKGVycilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCB0b1JlYWQgPSBpc1RyYW5zZm9ybVN0cmVhbSh0YWlsKSA/IHRhaWwucmVhZGFibGUgOiB0YWlsXG4gICAgZW9zKHRvUmVhZCwgKCkgPT4ge1xuICAgICAgaWYgKG9uZmluaXNoKSB7XG4gICAgICAgIGNvbnN0IGNiID0gb25maW5pc2hcbiAgICAgICAgb25maW5pc2ggPSBudWxsXG4gICAgICAgIGNiKClcbiAgICAgIH1cbiAgICB9KVxuICB9XG4gIGlmIChyZWFkYWJsZSkge1xuICAgIGlmIChpc05vZGVTdHJlYW0odGFpbCkpIHtcbiAgICAgIHRhaWwub24oJ3JlYWRhYmxlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAob25yZWFkYWJsZSkge1xuICAgICAgICAgIGNvbnN0IGNiID0gb25yZWFkYWJsZVxuICAgICAgICAgIG9ucmVhZGFibGUgPSBudWxsXG4gICAgICAgICAgY2IoKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgdGFpbC5vbignZW5kJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBkLnB1c2gobnVsbClcbiAgICAgIH0pXG4gICAgICBkLl9yZWFkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgIGNvbnN0IGJ1ZiA9IHRhaWwucmVhZCgpXG4gICAgICAgICAgaWYgKGJ1ZiA9PT0gbnVsbCkge1xuICAgICAgICAgICAgb25yZWFkYWJsZSA9IGQuX3JlYWRcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWQucHVzaChidWYpKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzV2ViU3RyZWFtKHRhaWwpKSB7XG4gICAgICBjb25zdCByZWFkYWJsZSA9IGlzVHJhbnNmb3JtU3RyZWFtKHRhaWwpID8gdGFpbC5yZWFkYWJsZSA6IHRhaWxcbiAgICAgIGNvbnN0IHJlYWRlciA9IHJlYWRhYmxlLmdldFJlYWRlcigpXG4gICAgICBkLl9yZWFkID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB7IHZhbHVlLCBkb25lIH0gPSBhd2FpdCByZWFkZXIucmVhZCgpXG4gICAgICAgICAgICBpZiAoIWQucHVzaCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgICAgICBkLnB1c2gobnVsbClcbiAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZC5fZGVzdHJveSA9IGZ1bmN0aW9uIChlcnIsIGNhbGxiYWNrKSB7XG4gICAgaWYgKCFlcnIgJiYgb25jbG9zZSAhPT0gbnVsbCkge1xuICAgICAgZXJyID0gbmV3IEFib3J0RXJyb3IoKVxuICAgIH1cbiAgICBvbnJlYWRhYmxlID0gbnVsbFxuICAgIG9uZHJhaW4gPSBudWxsXG4gICAgb25maW5pc2ggPSBudWxsXG4gICAgaWYgKG9uY2xvc2UgPT09IG51bGwpIHtcbiAgICAgIGNhbGxiYWNrKGVycilcbiAgICB9IGVsc2Uge1xuICAgICAgb25jbG9zZSA9IGNhbGxiYWNrXG4gICAgICBpZiAoaXNOb2RlU3RyZWFtKHRhaWwpKSB7XG4gICAgICAgIGRlc3Ryb3llcih0YWlsLCBlcnIpXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBkXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBBYm9ydENvbnRyb2xsZXIgPSBnbG9iYWxUaGlzLkFib3J0Q29udHJvbGxlciB8fCByZXF1aXJlKCdhYm9ydC1jb250cm9sbGVyJykuQWJvcnRDb250cm9sbGVyXG5jb25zdCB7XG4gIGNvZGVzOiB7IEVSUl9JTlZBTElEX0FSR19WQUxVRSwgRVJSX0lOVkFMSURfQVJHX1RZUEUsIEVSUl9NSVNTSU5HX0FSR1MsIEVSUl9PVVRfT0ZfUkFOR0UgfSxcbiAgQWJvcnRFcnJvclxufSA9IHJlcXVpcmUoJy4uLy4uL291cnMvZXJyb3JzJylcbmNvbnN0IHsgdmFsaWRhdGVBYm9ydFNpZ25hbCwgdmFsaWRhdGVJbnRlZ2VyLCB2YWxpZGF0ZU9iamVjdCB9ID0gcmVxdWlyZSgnLi4vdmFsaWRhdG9ycycpXG5jb25zdCBrV2Vha0hhbmRsZXIgPSByZXF1aXJlKCcuLi8uLi9vdXJzL3ByaW1vcmRpYWxzJykuU3ltYm9sKCdrV2VhaycpXG5jb25zdCBrUmVzaXN0U3RvcFByb3BhZ2F0aW9uID0gcmVxdWlyZSgnLi4vLi4vb3Vycy9wcmltb3JkaWFscycpLlN5bWJvbCgna1Jlc2lzdFN0b3BQcm9wYWdhdGlvbicpXG5jb25zdCB7IGZpbmlzaGVkIH0gPSByZXF1aXJlKCcuL2VuZC1vZi1zdHJlYW0nKVxuY29uc3Qgc3RhdGljQ29tcG9zZSA9IHJlcXVpcmUoJy4vY29tcG9zZScpXG5jb25zdCB7IGFkZEFib3J0U2lnbmFsTm9WYWxpZGF0ZSB9ID0gcmVxdWlyZSgnLi9hZGQtYWJvcnQtc2lnbmFsJylcbmNvbnN0IHsgaXNXcml0YWJsZSwgaXNOb2RlU3RyZWFtIH0gPSByZXF1aXJlKCcuL3V0aWxzJylcbmNvbnN0IHsgZGVwcmVjYXRlIH0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL3V0aWwnKVxuY29uc3Qge1xuICBBcnJheVByb3RvdHlwZVB1c2gsXG4gIEJvb2xlYW4sXG4gIE1hdGhGbG9vcixcbiAgTnVtYmVyLFxuICBOdW1iZXJJc05hTixcbiAgUHJvbWlzZSxcbiAgUHJvbWlzZVJlamVjdCxcbiAgUHJvbWlzZVJlc29sdmUsXG4gIFByb21pc2VQcm90b3R5cGVUaGVuLFxuICBTeW1ib2xcbn0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL3ByaW1vcmRpYWxzJylcbmNvbnN0IGtFbXB0eSA9IFN5bWJvbCgna0VtcHR5JylcbmNvbnN0IGtFb2YgPSBTeW1ib2woJ2tFb2YnKVxuZnVuY3Rpb24gY29tcG9zZShzdHJlYW0sIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgIT0gbnVsbCkge1xuICAgIHZhbGlkYXRlT2JqZWN0KG9wdGlvbnMsICdvcHRpb25zJylcbiAgfVxuICBpZiAoKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogb3B0aW9ucy5zaWduYWwpICE9IG51bGwpIHtcbiAgICB2YWxpZGF0ZUFib3J0U2lnbmFsKG9wdGlvbnMuc2lnbmFsLCAnb3B0aW9ucy5zaWduYWwnKVxuICB9XG4gIGlmIChpc05vZGVTdHJlYW0oc3RyZWFtKSAmJiAhaXNXcml0YWJsZShzdHJlYW0pKSB7XG4gICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19WQUxVRSgnc3RyZWFtJywgc3RyZWFtLCAnbXVzdCBiZSB3cml0YWJsZScpXG4gIH1cbiAgY29uc3QgY29tcG9zZWRTdHJlYW0gPSBzdGF0aWNDb21wb3NlKHRoaXMsIHN0cmVhbSlcbiAgaWYgKG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbnMuc2lnbmFsKSB7XG4gICAgLy8gTm90IHZhbGlkYXRpbmcgYXMgd2UgYWxyZWFkeSB2YWxpZGF0ZWQgYmVmb3JlXG4gICAgYWRkQWJvcnRTaWduYWxOb1ZhbGlkYXRlKG9wdGlvbnMuc2lnbmFsLCBjb21wb3NlZFN0cmVhbSlcbiAgfVxuICByZXR1cm4gY29tcG9zZWRTdHJlYW1cbn1cbmZ1bmN0aW9uIG1hcChmbiwgb3B0aW9ucykge1xuICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKCdmbicsIFsnRnVuY3Rpb24nLCAnQXN5bmNGdW5jdGlvbiddLCBmbilcbiAgfVxuICBpZiAob3B0aW9ucyAhPSBudWxsKSB7XG4gICAgdmFsaWRhdGVPYmplY3Qob3B0aW9ucywgJ29wdGlvbnMnKVxuICB9XG4gIGlmICgob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBvcHRpb25zLnNpZ25hbCkgIT0gbnVsbCkge1xuICAgIHZhbGlkYXRlQWJvcnRTaWduYWwob3B0aW9ucy5zaWduYWwsICdvcHRpb25zLnNpZ25hbCcpXG4gIH1cbiAgbGV0IGNvbmN1cnJlbmN5ID0gMVxuICBpZiAoKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogb3B0aW9ucy5jb25jdXJyZW5jeSkgIT0gbnVsbCkge1xuICAgIGNvbmN1cnJlbmN5ID0gTWF0aEZsb29yKG9wdGlvbnMuY29uY3VycmVuY3kpXG4gIH1cbiAgbGV0IGhpZ2hXYXRlck1hcmsgPSBjb25jdXJyZW5jeSAtIDFcbiAgaWYgKChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IG9wdGlvbnMuaGlnaFdhdGVyTWFyaykgIT0gbnVsbCkge1xuICAgIGhpZ2hXYXRlck1hcmsgPSBNYXRoRmxvb3Iob3B0aW9ucy5oaWdoV2F0ZXJNYXJrKVxuICB9XG4gIHZhbGlkYXRlSW50ZWdlcihjb25jdXJyZW5jeSwgJ29wdGlvbnMuY29uY3VycmVuY3knLCAxKVxuICB2YWxpZGF0ZUludGVnZXIoaGlnaFdhdGVyTWFyaywgJ29wdGlvbnMuaGlnaFdhdGVyTWFyaycsIDApXG4gIGhpZ2hXYXRlck1hcmsgKz0gY29uY3VycmVuY3lcbiAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uKiBtYXAoKSB7XG4gICAgY29uc3Qgc2lnbmFsID0gcmVxdWlyZSgnLi4vLi4vb3Vycy91dGlsJykuQWJvcnRTaWduYWxBbnkoXG4gICAgICBbb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBvcHRpb25zLnNpZ25hbF0uZmlsdGVyKEJvb2xlYW4pXG4gICAgKVxuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXNcbiAgICBjb25zdCBxdWV1ZSA9IFtdXG4gICAgY29uc3Qgc2lnbmFsT3B0ID0ge1xuICAgICAgc2lnbmFsXG4gICAgfVxuICAgIGxldCBuZXh0XG4gICAgbGV0IHJlc3VtZVxuICAgIGxldCBkb25lID0gZmFsc2VcbiAgICBsZXQgY250ID0gMFxuICAgIGZ1bmN0aW9uIG9uQ2F0Y2goKSB7XG4gICAgICBkb25lID0gdHJ1ZVxuICAgICAgYWZ0ZXJJdGVtUHJvY2Vzc2VkKClcbiAgICB9XG4gICAgZnVuY3Rpb24gYWZ0ZXJJdGVtUHJvY2Vzc2VkKCkge1xuICAgICAgY250IC09IDFcbiAgICAgIG1heWJlUmVzdW1lKClcbiAgICB9XG4gICAgZnVuY3Rpb24gbWF5YmVSZXN1bWUoKSB7XG4gICAgICBpZiAocmVzdW1lICYmICFkb25lICYmIGNudCA8IGNvbmN1cnJlbmN5ICYmIHF1ZXVlLmxlbmd0aCA8IGhpZ2hXYXRlck1hcmspIHtcbiAgICAgICAgcmVzdW1lKClcbiAgICAgICAgcmVzdW1lID0gbnVsbFxuICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBmdW5jdGlvbiBwdW1wKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm9yIGF3YWl0IChsZXQgdmFsIG9mIHN0cmVhbSkge1xuICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQWJvcnRFcnJvcigpXG4gICAgICAgICAgfVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YWwgPSBmbih2YWwsIHNpZ25hbE9wdClcbiAgICAgICAgICAgIGlmICh2YWwgPT09IGtFbXB0eSkge1xuICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFsID0gUHJvbWlzZVJlc29sdmUodmFsKVxuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgdmFsID0gUHJvbWlzZVJlamVjdChlcnIpXG4gICAgICAgICAgfVxuICAgICAgICAgIGNudCArPSAxXG4gICAgICAgICAgUHJvbWlzZVByb3RvdHlwZVRoZW4odmFsLCBhZnRlckl0ZW1Qcm9jZXNzZWQsIG9uQ2F0Y2gpXG4gICAgICAgICAgcXVldWUucHVzaCh2YWwpXG4gICAgICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgICAgIG5leHQoKVxuICAgICAgICAgICAgbmV4dCA9IG51bGxcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFkb25lICYmIChxdWV1ZS5sZW5ndGggPj0gaGlnaFdhdGVyTWFyayB8fCBjbnQgPj0gY29uY3VycmVuY3kpKSB7XG4gICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgICByZXN1bWUgPSByZXNvbHZlXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZS5wdXNoKGtFb2YpXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc3QgdmFsID0gUHJvbWlzZVJlamVjdChlcnIpXG4gICAgICAgIFByb21pc2VQcm90b3R5cGVUaGVuKHZhbCwgYWZ0ZXJJdGVtUHJvY2Vzc2VkLCBvbkNhdGNoKVxuICAgICAgICBxdWV1ZS5wdXNoKHZhbClcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGRvbmUgPSB0cnVlXG4gICAgICAgIGlmIChuZXh0KSB7XG4gICAgICAgICAgbmV4dCgpXG4gICAgICAgICAgbmV4dCA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBwdW1wKClcbiAgICB0cnkge1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgd2hpbGUgKHF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCB2YWwgPSBhd2FpdCBxdWV1ZVswXVxuICAgICAgICAgIGlmICh2YWwgPT09IGtFb2YpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBBYm9ydEVycm9yKClcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHZhbCAhPT0ga0VtcHR5KSB7XG4gICAgICAgICAgICB5aWVsZCB2YWxcbiAgICAgICAgICB9XG4gICAgICAgICAgcXVldWUuc2hpZnQoKVxuICAgICAgICAgIG1heWJlUmVzdW1lKClcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgIG5leHQgPSByZXNvbHZlXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGRvbmUgPSB0cnVlXG4gICAgICBpZiAocmVzdW1lKSB7XG4gICAgICAgIHJlc3VtZSgpXG4gICAgICAgIHJlc3VtZSA9IG51bGxcbiAgICAgIH1cbiAgICB9XG4gIH0uY2FsbCh0aGlzKVxufVxuZnVuY3Rpb24gYXNJbmRleGVkUGFpcnMob3B0aW9ucyA9IHVuZGVmaW5lZCkge1xuICBpZiAob3B0aW9ucyAhPSBudWxsKSB7XG4gICAgdmFsaWRhdGVPYmplY3Qob3B0aW9ucywgJ29wdGlvbnMnKVxuICB9XG4gIGlmICgob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBvcHRpb25zLnNpZ25hbCkgIT0gbnVsbCkge1xuICAgIHZhbGlkYXRlQWJvcnRTaWduYWwob3B0aW9ucy5zaWduYWwsICdvcHRpb25zLnNpZ25hbCcpXG4gIH1cbiAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uKiBhc0luZGV4ZWRQYWlycygpIHtcbiAgICBsZXQgaW5kZXggPSAwXG4gICAgZm9yIGF3YWl0IChjb25zdCB2YWwgb2YgdGhpcykge1xuICAgICAgdmFyIF9vcHRpb25zJHNpZ25hbFxuICAgICAgaWYgKFxuICAgICAgICBvcHRpb25zICE9PSBudWxsICYmXG4gICAgICAgIG9wdGlvbnMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAoX29wdGlvbnMkc2lnbmFsID0gb3B0aW9ucy5zaWduYWwpICE9PSBudWxsICYmXG4gICAgICAgIF9vcHRpb25zJHNpZ25hbCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIF9vcHRpb25zJHNpZ25hbC5hYm9ydGVkXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEFib3J0RXJyb3Ioe1xuICAgICAgICAgIGNhdXNlOiBvcHRpb25zLnNpZ25hbC5yZWFzb25cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIHlpZWxkIFtpbmRleCsrLCB2YWxdXG4gICAgfVxuICB9LmNhbGwodGhpcylcbn1cbmFzeW5jIGZ1bmN0aW9uIHNvbWUoZm4sIG9wdGlvbnMgPSB1bmRlZmluZWQpIHtcbiAgZm9yIGF3YWl0IChjb25zdCB1bnVzZWQgb2YgZmlsdGVyLmNhbGwodGhpcywgZm4sIG9wdGlvbnMpKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cbmFzeW5jIGZ1bmN0aW9uIGV2ZXJ5KGZuLCBvcHRpb25zID0gdW5kZWZpbmVkKSB7XG4gIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoJ2ZuJywgWydGdW5jdGlvbicsICdBc3luY0Z1bmN0aW9uJ10sIGZuKVxuICB9XG4gIC8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0RlX01vcmdhbiUyN3NfbGF3c1xuICByZXR1cm4gIShhd2FpdCBzb21lLmNhbGwoXG4gICAgdGhpcyxcbiAgICBhc3luYyAoLi4uYXJncykgPT4ge1xuICAgICAgcmV0dXJuICEoYXdhaXQgZm4oLi4uYXJncykpXG4gICAgfSxcbiAgICBvcHRpb25zXG4gICkpXG59XG5hc3luYyBmdW5jdGlvbiBmaW5kKGZuLCBvcHRpb25zKSB7XG4gIGZvciBhd2FpdCAoY29uc3QgcmVzdWx0IG9mIGZpbHRlci5jYWxsKHRoaXMsIGZuLCBvcHRpb25zKSkge1xuICAgIHJldHVybiByZXN1bHRcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkXG59XG5hc3luYyBmdW5jdGlvbiBmb3JFYWNoKGZuLCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoJ2ZuJywgWydGdW5jdGlvbicsICdBc3luY0Z1bmN0aW9uJ10sIGZuKVxuICB9XG4gIGFzeW5jIGZ1bmN0aW9uIGZvckVhY2hGbih2YWx1ZSwgb3B0aW9ucykge1xuICAgIGF3YWl0IGZuKHZhbHVlLCBvcHRpb25zKVxuICAgIHJldHVybiBrRW1wdHlcbiAgfVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgZm9yIGF3YWl0IChjb25zdCB1bnVzZWQgb2YgbWFwLmNhbGwodGhpcywgZm9yRWFjaEZuLCBvcHRpb25zKSk7XG59XG5mdW5jdGlvbiBmaWx0ZXIoZm4sIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRSgnZm4nLCBbJ0Z1bmN0aW9uJywgJ0FzeW5jRnVuY3Rpb24nXSwgZm4pXG4gIH1cbiAgYXN5bmMgZnVuY3Rpb24gZmlsdGVyRm4odmFsdWUsIG9wdGlvbnMpIHtcbiAgICBpZiAoYXdhaXQgZm4odmFsdWUsIG9wdGlvbnMpKSB7XG4gICAgICByZXR1cm4gdmFsdWVcbiAgICB9XG4gICAgcmV0dXJuIGtFbXB0eVxuICB9XG4gIHJldHVybiBtYXAuY2FsbCh0aGlzLCBmaWx0ZXJGbiwgb3B0aW9ucylcbn1cblxuLy8gU3BlY2lmaWMgdG8gcHJvdmlkZSBiZXR0ZXIgZXJyb3IgdG8gcmVkdWNlIHNpbmNlIHRoZSBhcmd1bWVudCBpcyBvbmx5XG4vLyBtaXNzaW5nIGlmIHRoZSBzdHJlYW0gaGFzIG5vIGl0ZW1zIGluIGl0IC0gYnV0IHRoZSBjb2RlIGlzIHN0aWxsIGFwcHJvcHJpYXRlXG5jbGFzcyBSZWR1Y2VBd2FyZUVyck1pc3NpbmdBcmdzIGV4dGVuZHMgRVJSX01JU1NJTkdfQVJHUyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCdyZWR1Y2UnKVxuICAgIHRoaXMubWVzc2FnZSA9ICdSZWR1Y2Ugb2YgYW4gZW1wdHkgc3RyZWFtIHJlcXVpcmVzIGFuIGluaXRpYWwgdmFsdWUnXG4gIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIHJlZHVjZShyZWR1Y2VyLCBpbml0aWFsVmFsdWUsIG9wdGlvbnMpIHtcbiAgdmFyIF9vcHRpb25zJHNpZ25hbDJcbiAgaWYgKHR5cGVvZiByZWR1Y2VyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKCdyZWR1Y2VyJywgWydGdW5jdGlvbicsICdBc3luY0Z1bmN0aW9uJ10sIHJlZHVjZXIpXG4gIH1cbiAgaWYgKG9wdGlvbnMgIT0gbnVsbCkge1xuICAgIHZhbGlkYXRlT2JqZWN0KG9wdGlvbnMsICdvcHRpb25zJylcbiAgfVxuICBpZiAoKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogb3B0aW9ucy5zaWduYWwpICE9IG51bGwpIHtcbiAgICB2YWxpZGF0ZUFib3J0U2lnbmFsKG9wdGlvbnMuc2lnbmFsLCAnb3B0aW9ucy5zaWduYWwnKVxuICB9XG4gIGxldCBoYXNJbml0aWFsVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMVxuICBpZiAoXG4gICAgb3B0aW9ucyAhPT0gbnVsbCAmJlxuICAgIG9wdGlvbnMgIT09IHVuZGVmaW5lZCAmJlxuICAgIChfb3B0aW9ucyRzaWduYWwyID0gb3B0aW9ucy5zaWduYWwpICE9PSBudWxsICYmXG4gICAgX29wdGlvbnMkc2lnbmFsMiAhPT0gdW5kZWZpbmVkICYmXG4gICAgX29wdGlvbnMkc2lnbmFsMi5hYm9ydGVkXG4gICkge1xuICAgIGNvbnN0IGVyciA9IG5ldyBBYm9ydEVycm9yKHVuZGVmaW5lZCwge1xuICAgICAgY2F1c2U6IG9wdGlvbnMuc2lnbmFsLnJlYXNvblxuICAgIH0pXG4gICAgdGhpcy5vbmNlKCdlcnJvcicsICgpID0+IHt9KSAvLyBUaGUgZXJyb3IgaXMgYWxyZWFkeSBwcm9wYWdhdGVkXG4gICAgYXdhaXQgZmluaXNoZWQodGhpcy5kZXN0cm95KGVycikpXG4gICAgdGhyb3cgZXJyXG4gIH1cbiAgY29uc3QgYWMgPSBuZXcgQWJvcnRDb250cm9sbGVyKClcbiAgY29uc3Qgc2lnbmFsID0gYWMuc2lnbmFsXG4gIGlmIChvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHVuZGVmaW5lZCAmJiBvcHRpb25zLnNpZ25hbCkge1xuICAgIGNvbnN0IG9wdHMgPSB7XG4gICAgICBvbmNlOiB0cnVlLFxuICAgICAgW2tXZWFrSGFuZGxlcl06IHRoaXMsXG4gICAgICBba1Jlc2lzdFN0b3BQcm9wYWdhdGlvbl06IHRydWVcbiAgICB9XG4gICAgb3B0aW9ucy5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCAoKSA9PiBhYy5hYm9ydCgpLCBvcHRzKVxuICB9XG4gIGxldCBnb3RBbnlJdGVtRnJvbVN0cmVhbSA9IGZhbHNlXG4gIHRyeSB7XG4gICAgZm9yIGF3YWl0IChjb25zdCB2YWx1ZSBvZiB0aGlzKSB7XG4gICAgICB2YXIgX29wdGlvbnMkc2lnbmFsM1xuICAgICAgZ290QW55SXRlbUZyb21TdHJlYW0gPSB0cnVlXG4gICAgICBpZiAoXG4gICAgICAgIG9wdGlvbnMgIT09IG51bGwgJiZcbiAgICAgICAgb3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIChfb3B0aW9ucyRzaWduYWwzID0gb3B0aW9ucy5zaWduYWwpICE9PSBudWxsICYmXG4gICAgICAgIF9vcHRpb25zJHNpZ25hbDMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICBfb3B0aW9ucyRzaWduYWwzLmFib3J0ZWRcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgQWJvcnRFcnJvcigpXG4gICAgICB9XG4gICAgICBpZiAoIWhhc0luaXRpYWxWYWx1ZSkge1xuICAgICAgICBpbml0aWFsVmFsdWUgPSB2YWx1ZVxuICAgICAgICBoYXNJbml0aWFsVmFsdWUgPSB0cnVlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbml0aWFsVmFsdWUgPSBhd2FpdCByZWR1Y2VyKGluaXRpYWxWYWx1ZSwgdmFsdWUsIHtcbiAgICAgICAgICBzaWduYWxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFnb3RBbnlJdGVtRnJvbVN0cmVhbSAmJiAhaGFzSW5pdGlhbFZhbHVlKSB7XG4gICAgICB0aHJvdyBuZXcgUmVkdWNlQXdhcmVFcnJNaXNzaW5nQXJncygpXG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIGFjLmFib3J0KClcbiAgfVxuICByZXR1cm4gaW5pdGlhbFZhbHVlXG59XG5hc3luYyBmdW5jdGlvbiB0b0FycmF5KG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgIT0gbnVsbCkge1xuICAgIHZhbGlkYXRlT2JqZWN0KG9wdGlvbnMsICdvcHRpb25zJylcbiAgfVxuICBpZiAoKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogb3B0aW9ucy5zaWduYWwpICE9IG51bGwpIHtcbiAgICB2YWxpZGF0ZUFib3J0U2lnbmFsKG9wdGlvbnMuc2lnbmFsLCAnb3B0aW9ucy5zaWduYWwnKVxuICB9XG4gIGNvbnN0IHJlc3VsdCA9IFtdXG4gIGZvciBhd2FpdCAoY29uc3QgdmFsIG9mIHRoaXMpIHtcbiAgICB2YXIgX29wdGlvbnMkc2lnbmFsNFxuICAgIGlmIChcbiAgICAgIG9wdGlvbnMgIT09IG51bGwgJiZcbiAgICAgIG9wdGlvbnMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgKF9vcHRpb25zJHNpZ25hbDQgPSBvcHRpb25zLnNpZ25hbCkgIT09IG51bGwgJiZcbiAgICAgIF9vcHRpb25zJHNpZ25hbDQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgX29wdGlvbnMkc2lnbmFsNC5hYm9ydGVkXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgQWJvcnRFcnJvcih1bmRlZmluZWQsIHtcbiAgICAgICAgY2F1c2U6IG9wdGlvbnMuc2lnbmFsLnJlYXNvblxuICAgICAgfSlcbiAgICB9XG4gICAgQXJyYXlQcm90b3R5cGVQdXNoKHJlc3VsdCwgdmFsKVxuICB9XG4gIHJldHVybiByZXN1bHRcbn1cbmZ1bmN0aW9uIGZsYXRNYXAoZm4sIG9wdGlvbnMpIHtcbiAgY29uc3QgdmFsdWVzID0gbWFwLmNhbGwodGhpcywgZm4sIG9wdGlvbnMpXG4gIHJldHVybiBhc3luYyBmdW5jdGlvbiogZmxhdE1hcCgpIHtcbiAgICBmb3IgYXdhaXQgKGNvbnN0IHZhbCBvZiB2YWx1ZXMpIHtcbiAgICAgIHlpZWxkKiB2YWxcbiAgICB9XG4gIH0uY2FsbCh0aGlzKVxufVxuZnVuY3Rpb24gdG9JbnRlZ2VyT3JJbmZpbml0eShudW1iZXIpIHtcbiAgLy8gV2UgY29lcmNlIGhlcmUgdG8gYWxpZ24gd2l0aCB0aGUgc3BlY1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1pdGVyYXRvci1oZWxwZXJzL2lzc3Vlcy8xNjlcbiAgbnVtYmVyID0gTnVtYmVyKG51bWJlcilcbiAgaWYgKE51bWJlcklzTmFOKG51bWJlcikpIHtcbiAgICByZXR1cm4gMFxuICB9XG4gIGlmIChudW1iZXIgPCAwKSB7XG4gICAgdGhyb3cgbmV3IEVSUl9PVVRfT0ZfUkFOR0UoJ251bWJlcicsICc+PSAwJywgbnVtYmVyKVxuICB9XG4gIHJldHVybiBudW1iZXJcbn1cbmZ1bmN0aW9uIGRyb3AobnVtYmVyLCBvcHRpb25zID0gdW5kZWZpbmVkKSB7XG4gIGlmIChvcHRpb25zICE9IG51bGwpIHtcbiAgICB2YWxpZGF0ZU9iamVjdChvcHRpb25zLCAnb3B0aW9ucycpXG4gIH1cbiAgaWYgKChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IG9wdGlvbnMuc2lnbmFsKSAhPSBudWxsKSB7XG4gICAgdmFsaWRhdGVBYm9ydFNpZ25hbChvcHRpb25zLnNpZ25hbCwgJ29wdGlvbnMuc2lnbmFsJylcbiAgfVxuICBudW1iZXIgPSB0b0ludGVnZXJPckluZmluaXR5KG51bWJlcilcbiAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uKiBkcm9wKCkge1xuICAgIHZhciBfb3B0aW9ucyRzaWduYWw1XG4gICAgaWYgKFxuICAgICAgb3B0aW9ucyAhPT0gbnVsbCAmJlxuICAgICAgb3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAoX29wdGlvbnMkc2lnbmFsNSA9IG9wdGlvbnMuc2lnbmFsKSAhPT0gbnVsbCAmJlxuICAgICAgX29wdGlvbnMkc2lnbmFsNSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBfb3B0aW9ucyRzaWduYWw1LmFib3J0ZWRcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBBYm9ydEVycm9yKClcbiAgICB9XG4gICAgZm9yIGF3YWl0IChjb25zdCB2YWwgb2YgdGhpcykge1xuICAgICAgdmFyIF9vcHRpb25zJHNpZ25hbDZcbiAgICAgIGlmIChcbiAgICAgICAgb3B0aW9ucyAhPT0gbnVsbCAmJlxuICAgICAgICBvcHRpb25zICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgKF9vcHRpb25zJHNpZ25hbDYgPSBvcHRpb25zLnNpZ25hbCkgIT09IG51bGwgJiZcbiAgICAgICAgX29wdGlvbnMkc2lnbmFsNiAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIF9vcHRpb25zJHNpZ25hbDYuYWJvcnRlZFxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBBYm9ydEVycm9yKClcbiAgICAgIH1cbiAgICAgIGlmIChudW1iZXItLSA8PSAwKSB7XG4gICAgICAgIHlpZWxkIHZhbFxuICAgICAgfVxuICAgIH1cbiAgfS5jYWxsKHRoaXMpXG59XG5mdW5jdGlvbiB0YWtlKG51bWJlciwgb3B0aW9ucyA9IHVuZGVmaW5lZCkge1xuICBpZiAob3B0aW9ucyAhPSBudWxsKSB7XG4gICAgdmFsaWRhdGVPYmplY3Qob3B0aW9ucywgJ29wdGlvbnMnKVxuICB9XG4gIGlmICgob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBvcHRpb25zLnNpZ25hbCkgIT0gbnVsbCkge1xuICAgIHZhbGlkYXRlQWJvcnRTaWduYWwob3B0aW9ucy5zaWduYWwsICdvcHRpb25zLnNpZ25hbCcpXG4gIH1cbiAgbnVtYmVyID0gdG9JbnRlZ2VyT3JJbmZpbml0eShudW1iZXIpXG4gIHJldHVybiBhc3luYyBmdW5jdGlvbiogdGFrZSgpIHtcbiAgICB2YXIgX29wdGlvbnMkc2lnbmFsN1xuICAgIGlmIChcbiAgICAgIG9wdGlvbnMgIT09IG51bGwgJiZcbiAgICAgIG9wdGlvbnMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgKF9vcHRpb25zJHNpZ25hbDcgPSBvcHRpb25zLnNpZ25hbCkgIT09IG51bGwgJiZcbiAgICAgIF9vcHRpb25zJHNpZ25hbDcgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgX29wdGlvbnMkc2lnbmFsNy5hYm9ydGVkXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgQWJvcnRFcnJvcigpXG4gICAgfVxuICAgIGZvciBhd2FpdCAoY29uc3QgdmFsIG9mIHRoaXMpIHtcbiAgICAgIHZhciBfb3B0aW9ucyRzaWduYWw4XG4gICAgICBpZiAoXG4gICAgICAgIG9wdGlvbnMgIT09IG51bGwgJiZcbiAgICAgICAgb3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIChfb3B0aW9ucyRzaWduYWw4ID0gb3B0aW9ucy5zaWduYWwpICE9PSBudWxsICYmXG4gICAgICAgIF9vcHRpb25zJHNpZ25hbDggIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICBfb3B0aW9ucyRzaWduYWw4LmFib3J0ZWRcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgQWJvcnRFcnJvcigpXG4gICAgICB9XG4gICAgICBpZiAobnVtYmVyLS0gPiAwKSB7XG4gICAgICAgIHlpZWxkIHZhbFxuICAgICAgfVxuXG4gICAgICAvLyBEb24ndCBnZXQgYW5vdGhlciBpdGVtIGZyb20gaXRlcmF0b3IgaW4gY2FzZSB3ZSByZWFjaGVkIHRoZSBlbmRcbiAgICAgIGlmIChudW1iZXIgPD0gMCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG4gIH0uY2FsbCh0aGlzKVxufVxubW9kdWxlLmV4cG9ydHMuc3RyZWFtUmV0dXJuaW5nT3BlcmF0b3JzID0ge1xuICBhc0luZGV4ZWRQYWlyczogZGVwcmVjYXRlKGFzSW5kZXhlZFBhaXJzLCAncmVhZGFibGUuYXNJbmRleGVkUGFpcnMgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24uJyksXG4gIGRyb3AsXG4gIGZpbHRlcixcbiAgZmxhdE1hcCxcbiAgbWFwLFxuICB0YWtlLFxuICBjb21wb3NlXG59XG5tb2R1bGUuZXhwb3J0cy5wcm9taXNlUmV0dXJuaW5nT3BlcmF0b3JzID0ge1xuICBldmVyeSxcbiAgZm9yRWFjaCxcbiAgcmVkdWNlLFxuICB0b0FycmF5LFxuICBzb21lLFxuICBmaW5kXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IEFycmF5UHJvdG90eXBlUG9wLCBQcm9taXNlIH0gPSByZXF1aXJlKCcuLi9vdXJzL3ByaW1vcmRpYWxzJylcbmNvbnN0IHsgaXNJdGVyYWJsZSwgaXNOb2RlU3RyZWFtLCBpc1dlYlN0cmVhbSB9ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWwvc3RyZWFtcy91dGlscycpXG5jb25zdCB7IHBpcGVsaW5lSW1wbDogcGwgfSA9IHJlcXVpcmUoJy4uL2ludGVybmFsL3N0cmVhbXMvcGlwZWxpbmUnKVxuY29uc3QgeyBmaW5pc2hlZCB9ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWwvc3RyZWFtcy9lbmQtb2Ytc3RyZWFtJylcbnJlcXVpcmUoJy4uLy4uL2xpYi9zdHJlYW0uanMnKVxuZnVuY3Rpb24gcGlwZWxpbmUoLi4uc3RyZWFtcykge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGxldCBzaWduYWxcbiAgICBsZXQgZW5kXG4gICAgY29uc3QgbGFzdEFyZyA9IHN0cmVhbXNbc3RyZWFtcy5sZW5ndGggLSAxXVxuICAgIGlmIChcbiAgICAgIGxhc3RBcmcgJiZcbiAgICAgIHR5cGVvZiBsYXN0QXJnID09PSAnb2JqZWN0JyAmJlxuICAgICAgIWlzTm9kZVN0cmVhbShsYXN0QXJnKSAmJlxuICAgICAgIWlzSXRlcmFibGUobGFzdEFyZykgJiZcbiAgICAgICFpc1dlYlN0cmVhbShsYXN0QXJnKVxuICAgICkge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IEFycmF5UHJvdG90eXBlUG9wKHN0cmVhbXMpXG4gICAgICBzaWduYWwgPSBvcHRpb25zLnNpZ25hbFxuICAgICAgZW5kID0gb3B0aW9ucy5lbmRcbiAgICB9XG4gICAgcGwoXG4gICAgICBzdHJlYW1zLFxuICAgICAgKGVyciwgdmFsdWUpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJlamVjdChlcnIpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzb2x2ZSh2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgc2lnbmFsLFxuICAgICAgICBlbmRcbiAgICAgIH1cbiAgICApXG4gIH0pXG59XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZmluaXNoZWQsXG4gIHBpcGVsaW5lXG59XG4iLAogICAgIi8qIHJlcGxhY2VtZW50IHN0YXJ0ICovXG5cbmNvbnN0IHsgQnVmZmVyIH0gPSByZXF1aXJlKCdidWZmZXInKVxuXG4vKiByZXBsYWNlbWVudCBlbmQgKi9cbi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG47KCd1c2Ugc3RyaWN0JylcbmNvbnN0IHsgT2JqZWN0RGVmaW5lUHJvcGVydHksIE9iamVjdEtleXMsIFJlZmxlY3RBcHBseSB9ID0gcmVxdWlyZSgnLi9vdXJzL3ByaW1vcmRpYWxzJylcbmNvbnN0IHtcbiAgcHJvbWlzaWZ5OiB7IGN1c3RvbTogY3VzdG9tUHJvbWlzaWZ5IH1cbn0gPSByZXF1aXJlKCcuL291cnMvdXRpbCcpXG5jb25zdCB7IHN0cmVhbVJldHVybmluZ09wZXJhdG9ycywgcHJvbWlzZVJldHVybmluZ09wZXJhdG9ycyB9ID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL29wZXJhdG9ycycpXG5jb25zdCB7XG4gIGNvZGVzOiB7IEVSUl9JTExFR0FMX0NPTlNUUlVDVE9SIH1cbn0gPSByZXF1aXJlKCcuL291cnMvZXJyb3JzJylcbmNvbnN0IGNvbXBvc2UgPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvY29tcG9zZScpXG5jb25zdCB7IHNldERlZmF1bHRIaWdoV2F0ZXJNYXJrLCBnZXREZWZhdWx0SGlnaFdhdGVyTWFyayB9ID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL3N0YXRlJylcbmNvbnN0IHsgcGlwZWxpbmUgfSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvc3RyZWFtcy9waXBlbGluZScpXG5jb25zdCB7IGRlc3Ryb3llciB9ID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL2Rlc3Ryb3knKVxuY29uc3QgZW9zID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL2VuZC1vZi1zdHJlYW0nKVxuY29uc3QgaW50ZXJuYWxCdWZmZXIgPSB7fVxuY29uc3QgcHJvbWlzZXMgPSByZXF1aXJlKCcuL3N0cmVhbS9wcm9taXNlcycpXG5jb25zdCB1dGlscyA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvc3RyZWFtcy91dGlscycpXG5jb25zdCBTdHJlYW0gPSAobW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvbGVnYWN5JykuU3RyZWFtKVxuU3RyZWFtLmlzRGVzdHJveWVkID0gdXRpbHMuaXNEZXN0cm95ZWRcblN0cmVhbS5pc0Rpc3R1cmJlZCA9IHV0aWxzLmlzRGlzdHVyYmVkXG5TdHJlYW0uaXNFcnJvcmVkID0gdXRpbHMuaXNFcnJvcmVkXG5TdHJlYW0uaXNSZWFkYWJsZSA9IHV0aWxzLmlzUmVhZGFibGVcblN0cmVhbS5pc1dyaXRhYmxlID0gdXRpbHMuaXNXcml0YWJsZVxuU3RyZWFtLlJlYWRhYmxlID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL3JlYWRhYmxlJylcbmZvciAoY29uc3Qga2V5IG9mIE9iamVjdEtleXMoc3RyZWFtUmV0dXJuaW5nT3BlcmF0b3JzKSkge1xuICBjb25zdCBvcCA9IHN0cmVhbVJldHVybmluZ09wZXJhdG9yc1trZXldXG4gIGZ1bmN0aW9uIGZuKC4uLmFyZ3MpIHtcbiAgICBpZiAobmV3LnRhcmdldCkge1xuICAgICAgdGhyb3cgRVJSX0lMTEVHQUxfQ09OU1RSVUNUT1IoKVxuICAgIH1cbiAgICByZXR1cm4gU3RyZWFtLlJlYWRhYmxlLmZyb20oUmVmbGVjdEFwcGx5KG9wLCB0aGlzLCBhcmdzKSlcbiAgfVxuICBPYmplY3REZWZpbmVQcm9wZXJ0eShmbiwgJ25hbWUnLCB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIHZhbHVlOiBvcC5uYW1lXG4gIH0pXG4gIE9iamVjdERlZmluZVByb3BlcnR5KGZuLCAnbGVuZ3RoJywge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICB2YWx1ZTogb3AubGVuZ3RoXG4gIH0pXG4gIE9iamVjdERlZmluZVByb3BlcnR5KFN0cmVhbS5SZWFkYWJsZS5wcm90b3R5cGUsIGtleSwge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICB2YWx1ZTogZm4sXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIHdyaXRhYmxlOiB0cnVlXG4gIH0pXG59XG5mb3IgKGNvbnN0IGtleSBvZiBPYmplY3RLZXlzKHByb21pc2VSZXR1cm5pbmdPcGVyYXRvcnMpKSB7XG4gIGNvbnN0IG9wID0gcHJvbWlzZVJldHVybmluZ09wZXJhdG9yc1trZXldXG4gIGZ1bmN0aW9uIGZuKC4uLmFyZ3MpIHtcbiAgICBpZiAobmV3LnRhcmdldCkge1xuICAgICAgdGhyb3cgRVJSX0lMTEVHQUxfQ09OU1RSVUNUT1IoKVxuICAgIH1cbiAgICByZXR1cm4gUmVmbGVjdEFwcGx5KG9wLCB0aGlzLCBhcmdzKVxuICB9XG4gIE9iamVjdERlZmluZVByb3BlcnR5KGZuLCAnbmFtZScsIHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgdmFsdWU6IG9wLm5hbWVcbiAgfSlcbiAgT2JqZWN0RGVmaW5lUHJvcGVydHkoZm4sICdsZW5ndGgnLCB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIHZhbHVlOiBvcC5sZW5ndGhcbiAgfSlcbiAgT2JqZWN0RGVmaW5lUHJvcGVydHkoU3RyZWFtLlJlYWRhYmxlLnByb3RvdHlwZSwga2V5LCB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIHZhbHVlOiBmbixcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgd3JpdGFibGU6IHRydWVcbiAgfSlcbn1cblN0cmVhbS5Xcml0YWJsZSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvc3RyZWFtcy93cml0YWJsZScpXG5TdHJlYW0uRHVwbGV4ID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL2R1cGxleCcpXG5TdHJlYW0uVHJhbnNmb3JtID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL3RyYW5zZm9ybScpXG5TdHJlYW0uUGFzc1Rocm91Z2ggPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvcGFzc3Rocm91Z2gnKVxuU3RyZWFtLnBpcGVsaW5lID0gcGlwZWxpbmVcbmNvbnN0IHsgYWRkQWJvcnRTaWduYWwgfSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvc3RyZWFtcy9hZGQtYWJvcnQtc2lnbmFsJylcblN0cmVhbS5hZGRBYm9ydFNpZ25hbCA9IGFkZEFib3J0U2lnbmFsXG5TdHJlYW0uZmluaXNoZWQgPSBlb3NcblN0cmVhbS5kZXN0cm95ID0gZGVzdHJveWVyXG5TdHJlYW0uY29tcG9zZSA9IGNvbXBvc2VcblN0cmVhbS5zZXREZWZhdWx0SGlnaFdhdGVyTWFyayA9IHNldERlZmF1bHRIaWdoV2F0ZXJNYXJrXG5TdHJlYW0uZ2V0RGVmYXVsdEhpZ2hXYXRlck1hcmsgPSBnZXREZWZhdWx0SGlnaFdhdGVyTWFya1xuT2JqZWN0RGVmaW5lUHJvcGVydHkoU3RyZWFtLCAncHJvbWlzZXMnLCB7XG4gIF9fcHJvdG9fXzogbnVsbCxcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQoKSB7XG4gICAgcmV0dXJuIHByb21pc2VzXG4gIH1cbn0pXG5PYmplY3REZWZpbmVQcm9wZXJ0eShwaXBlbGluZSwgY3VzdG9tUHJvbWlzaWZ5LCB7XG4gIF9fcHJvdG9fXzogbnVsbCxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0KCkge1xuICAgIHJldHVybiBwcm9taXNlcy5waXBlbGluZVxuICB9XG59KVxuT2JqZWN0RGVmaW5lUHJvcGVydHkoZW9zLCBjdXN0b21Qcm9taXNpZnksIHtcbiAgX19wcm90b19fOiBudWxsLFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQoKSB7XG4gICAgcmV0dXJuIHByb21pc2VzLmZpbmlzaGVkXG4gIH1cbn0pXG5cbi8vIEJhY2t3YXJkcy1jb21wYXQgd2l0aCBub2RlIDAuNC54XG5TdHJlYW0uU3RyZWFtID0gU3RyZWFtXG5TdHJlYW0uX2lzVWludDhBcnJheSA9IGZ1bmN0aW9uIGlzVWludDhBcnJheSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBVaW50OEFycmF5XG59XG5TdHJlYW0uX3VpbnQ4QXJyYXlUb0J1ZmZlciA9IGZ1bmN0aW9uIF91aW50OEFycmF5VG9CdWZmZXIoY2h1bmspIHtcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKGNodW5rLmJ1ZmZlciwgY2h1bmsuYnl0ZU9mZnNldCwgY2h1bmsuYnl0ZUxlbmd0aClcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpXG5pZiAoU3RyZWFtICYmIHByb2Nlc3MuZW52LlJFQURBQkxFX1NUUkVBTSA9PT0gJ2Rpc2FibGUnKSB7XG4gIGNvbnN0IHByb21pc2VzID0gU3RyZWFtLnByb21pc2VzXG5cbiAgLy8gRXhwbGljaXQgZXhwb3J0IG5hbWluZyBpcyBuZWVkZWQgZm9yIEVTTVxuICBtb2R1bGUuZXhwb3J0cy5fdWludDhBcnJheVRvQnVmZmVyID0gU3RyZWFtLl91aW50OEFycmF5VG9CdWZmZXJcbiAgbW9kdWxlLmV4cG9ydHMuX2lzVWludDhBcnJheSA9IFN0cmVhbS5faXNVaW50OEFycmF5XG4gIG1vZHVsZS5leHBvcnRzLmlzRGlzdHVyYmVkID0gU3RyZWFtLmlzRGlzdHVyYmVkXG4gIG1vZHVsZS5leHBvcnRzLmlzRXJyb3JlZCA9IFN0cmVhbS5pc0Vycm9yZWRcbiAgbW9kdWxlLmV4cG9ydHMuaXNSZWFkYWJsZSA9IFN0cmVhbS5pc1JlYWRhYmxlXG4gIG1vZHVsZS5leHBvcnRzLlJlYWRhYmxlID0gU3RyZWFtLlJlYWRhYmxlXG4gIG1vZHVsZS5leHBvcnRzLldyaXRhYmxlID0gU3RyZWFtLldyaXRhYmxlXG4gIG1vZHVsZS5leHBvcnRzLkR1cGxleCA9IFN0cmVhbS5EdXBsZXhcbiAgbW9kdWxlLmV4cG9ydHMuVHJhbnNmb3JtID0gU3RyZWFtLlRyYW5zZm9ybVxuICBtb2R1bGUuZXhwb3J0cy5QYXNzVGhyb3VnaCA9IFN0cmVhbS5QYXNzVGhyb3VnaFxuICBtb2R1bGUuZXhwb3J0cy5hZGRBYm9ydFNpZ25hbCA9IFN0cmVhbS5hZGRBYm9ydFNpZ25hbFxuICBtb2R1bGUuZXhwb3J0cy5maW5pc2hlZCA9IFN0cmVhbS5maW5pc2hlZFxuICBtb2R1bGUuZXhwb3J0cy5kZXN0cm95ID0gU3RyZWFtLmRlc3Ryb3lcbiAgbW9kdWxlLmV4cG9ydHMucGlwZWxpbmUgPSBTdHJlYW0ucGlwZWxpbmVcbiAgbW9kdWxlLmV4cG9ydHMuY29tcG9zZSA9IFN0cmVhbS5jb21wb3NlXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdHJlYW0sICdwcm9taXNlcycsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gcHJvbWlzZXNcbiAgICB9XG4gIH0pXG4gIG1vZHVsZS5leHBvcnRzLlN0cmVhbSA9IFN0cmVhbS5TdHJlYW1cbn0gZWxzZSB7XG4gIGNvbnN0IEN1c3RvbVN0cmVhbSA9IHJlcXVpcmUoJy4uL3N0cmVhbScpXG4gIGNvbnN0IHByb21pc2VzID0gcmVxdWlyZSgnLi4vc3RyZWFtL3Byb21pc2VzJylcbiAgY29uc3Qgb3JpZ2luYWxEZXN0cm95ID0gQ3VzdG9tU3RyZWFtLlJlYWRhYmxlLmRlc3Ryb3lcbiAgbW9kdWxlLmV4cG9ydHMgPSBDdXN0b21TdHJlYW0uUmVhZGFibGVcblxuICAvLyBFeHBsaWNpdCBleHBvcnQgbmFtaW5nIGlzIG5lZWRlZCBmb3IgRVNNXG4gIG1vZHVsZS5leHBvcnRzLl91aW50OEFycmF5VG9CdWZmZXIgPSBDdXN0b21TdHJlYW0uX3VpbnQ4QXJyYXlUb0J1ZmZlclxuICBtb2R1bGUuZXhwb3J0cy5faXNVaW50OEFycmF5ID0gQ3VzdG9tU3RyZWFtLl9pc1VpbnQ4QXJyYXlcbiAgbW9kdWxlLmV4cG9ydHMuaXNEaXN0dXJiZWQgPSBDdXN0b21TdHJlYW0uaXNEaXN0dXJiZWRcbiAgbW9kdWxlLmV4cG9ydHMuaXNFcnJvcmVkID0gQ3VzdG9tU3RyZWFtLmlzRXJyb3JlZFxuICBtb2R1bGUuZXhwb3J0cy5pc1JlYWRhYmxlID0gQ3VzdG9tU3RyZWFtLmlzUmVhZGFibGVcbiAgbW9kdWxlLmV4cG9ydHMuUmVhZGFibGUgPSBDdXN0b21TdHJlYW0uUmVhZGFibGVcbiAgbW9kdWxlLmV4cG9ydHMuV3JpdGFibGUgPSBDdXN0b21TdHJlYW0uV3JpdGFibGVcbiAgbW9kdWxlLmV4cG9ydHMuRHVwbGV4ID0gQ3VzdG9tU3RyZWFtLkR1cGxleFxuICBtb2R1bGUuZXhwb3J0cy5UcmFuc2Zvcm0gPSBDdXN0b21TdHJlYW0uVHJhbnNmb3JtXG4gIG1vZHVsZS5leHBvcnRzLlBhc3NUaHJvdWdoID0gQ3VzdG9tU3RyZWFtLlBhc3NUaHJvdWdoXG4gIG1vZHVsZS5leHBvcnRzLmFkZEFib3J0U2lnbmFsID0gQ3VzdG9tU3RyZWFtLmFkZEFib3J0U2lnbmFsXG4gIG1vZHVsZS5leHBvcnRzLmZpbmlzaGVkID0gQ3VzdG9tU3RyZWFtLmZpbmlzaGVkXG4gIG1vZHVsZS5leHBvcnRzLmRlc3Ryb3kgPSBDdXN0b21TdHJlYW0uZGVzdHJveVxuICBtb2R1bGUuZXhwb3J0cy5kZXN0cm95ID0gb3JpZ2luYWxEZXN0cm95XG4gIG1vZHVsZS5leHBvcnRzLnBpcGVsaW5lID0gQ3VzdG9tU3RyZWFtLnBpcGVsaW5lXG4gIG1vZHVsZS5leHBvcnRzLmNvbXBvc2UgPSBDdXN0b21TdHJlYW0uY29tcG9zZVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ3VzdG9tU3RyZWFtLCAncHJvbWlzZXMnLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHByb21pc2VzXG4gICAgfVxuICB9KVxuICBtb2R1bGUuZXhwb3J0cy5TdHJlYW0gPSBDdXN0b21TdHJlYW0uU3RyZWFtXG59XG5cbi8vIEFsbG93IGRlZmF1bHQgaW1wb3J0aW5nXG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gbW9kdWxlLmV4cG9ydHNcbiIsCiAgICAiLyoqXG4gKiBBcHBlbmRzIHRoZSBlbGVtZW50cyBvZiBgdmFsdWVzYCB0byBgYXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gYXBwZW5kLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5UHVzaChhcnJheSwgdmFsdWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gdmFsdWVzLmxlbmd0aCxcbiAgICAgIG9mZnNldCA9IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGFycmF5W29mZnNldCArIGluZGV4XSA9IHZhbHVlc1tpbmRleF07XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5UHVzaDtcbiIsCiAgICAidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpLFxuICAgIGlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9pc0FyZ3VtZW50cycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ByZWFkYWJsZVN5bWJvbCA9IFN5bWJvbCA/IFN5bWJvbC5pc0NvbmNhdFNwcmVhZGFibGUgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBmbGF0dGVuYWJsZSBgYXJndW1lbnRzYCBvYmplY3Qgb3IgYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZmxhdHRlbmFibGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNGbGF0dGVuYWJsZSh2YWx1ZSkge1xuICByZXR1cm4gaXNBcnJheSh2YWx1ZSkgfHwgaXNBcmd1bWVudHModmFsdWUpIHx8XG4gICAgISEoc3ByZWFkYWJsZVN5bWJvbCAmJiB2YWx1ZSAmJiB2YWx1ZVtzcHJlYWRhYmxlU3ltYm9sXSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGbGF0dGVuYWJsZTtcbiIsCiAgICAidmFyIGFycmF5UHVzaCA9IHJlcXVpcmUoJy4vX2FycmF5UHVzaCcpLFxuICAgIGlzRmxhdHRlbmFibGUgPSByZXF1aXJlKCcuL19pc0ZsYXR0ZW5hYmxlJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZmxhdHRlbmAgd2l0aCBzdXBwb3J0IGZvciByZXN0cmljdGluZyBmbGF0dGVuaW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmxhdHRlbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBkZXB0aCBUaGUgbWF4aW11bSByZWN1cnNpb24gZGVwdGguXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwcmVkaWNhdGU9aXNGbGF0dGVuYWJsZV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzU3RyaWN0XSBSZXN0cmljdCB0byB2YWx1ZXMgdGhhdCBwYXNzIGBwcmVkaWNhdGVgIGNoZWNrcy5cbiAqIEBwYXJhbSB7QXJyYXl9IFtyZXN1bHQ9W11dIFRoZSBpbml0aWFsIHJlc3VsdCB2YWx1ZS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZsYXR0ZW5lZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYmFzZUZsYXR0ZW4oYXJyYXksIGRlcHRoLCBwcmVkaWNhdGUsIGlzU3RyaWN0LCByZXN1bHQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgcHJlZGljYXRlIHx8IChwcmVkaWNhdGUgPSBpc0ZsYXR0ZW5hYmxlKTtcbiAgcmVzdWx0IHx8IChyZXN1bHQgPSBbXSk7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF07XG4gICAgaWYgKGRlcHRoID4gMCAmJiBwcmVkaWNhdGUodmFsdWUpKSB7XG4gICAgICBpZiAoZGVwdGggPiAxKSB7XG4gICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGZsYXR0ZW4gYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgICAgIGJhc2VGbGF0dGVuKHZhbHVlLCBkZXB0aCAtIDEsIHByZWRpY2F0ZSwgaXNTdHJpY3QsIHJlc3VsdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhcnJheVB1c2gocmVzdWx0LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghaXNTdHJpY3QpIHtcbiAgICAgIHJlc3VsdFtyZXN1bHQubGVuZ3RoXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VGbGF0dGVuO1xuIiwKICAgICJ2YXIgYmFzZUZsYXR0ZW4gPSByZXF1aXJlKCcuL19iYXNlRmxhdHRlbicpO1xuXG4vKipcbiAqIEZsYXR0ZW5zIGBhcnJheWAgYSBzaW5nbGUgbGV2ZWwgZGVlcC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmbGF0dGVuLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmxhdHRlbmVkIGFycmF5LlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmZsYXR0ZW4oWzEsIFsyLCBbMywgWzRdXSwgNV1dKTtcbiAqIC8vID0+IFsxLCAyLCBbMywgWzRdXSwgNV1cbiAqL1xuZnVuY3Rpb24gZmxhdHRlbihhcnJheSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gIHJldHVybiBsZW5ndGggPyBiYXNlRmxhdHRlbihhcnJheSwgMSkgOiBbXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmbGF0dGVuO1xuIiwKICAgICJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBuYXRpdmVDcmVhdGUgPSBnZXROYXRpdmUoT2JqZWN0LCAnY3JlYXRlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gbmF0aXZlQ3JlYXRlO1xuIiwKICAgICJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgaGFzaC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKi9cbmZ1bmN0aW9uIGhhc2hDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IG5hdGl2ZUNyZWF0ZSA/IG5hdGl2ZUNyZWF0ZShudWxsKSA6IHt9O1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hDbGVhcjtcbiIsCiAgICAiLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgaGFzaC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtPYmplY3R9IGhhc2ggVGhlIGhhc2ggdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc2hEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSB0aGlzLmhhcyhrZXkpICYmIGRlbGV0ZSB0aGlzLl9fZGF0YV9fW2tleV07XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoRGVsZXRlO1xuIiwKICAgICJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBHZXRzIHRoZSBoYXNoIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGhhc2hHZXQoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgaWYgKG5hdGl2ZUNyZWF0ZSkge1xuICAgIHZhciByZXN1bHQgPSBkYXRhW2tleV07XG4gICAgcmV0dXJuIHJlc3VsdCA9PT0gSEFTSF9VTkRFRklORUQgPyB1bmRlZmluZWQgOiByZXN1bHQ7XG4gIH1cbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KSA/IGRhdGFba2V5XSA6IHVuZGVmaW5lZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoR2V0O1xuIiwKICAgICJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgaGFzaCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzaEhhcyhrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICByZXR1cm4gbmF0aXZlQ3JlYXRlID8gKGRhdGFba2V5XSAhPT0gdW5kZWZpbmVkKSA6IGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoSGFzO1xuIiwKICAgICJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuLyoqXG4gKiBTZXRzIHRoZSBoYXNoIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaGFzaCBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gaGFzaFNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgdGhpcy5zaXplICs9IHRoaXMuaGFzKGtleSkgPyAwIDogMTtcbiAgZGF0YVtrZXldID0gKG5hdGl2ZUNyZWF0ZSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKSA/IEhBU0hfVU5ERUZJTkVEIDogdmFsdWU7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hTZXQ7XG4iLAogICAgInZhciBoYXNoQ2xlYXIgPSByZXF1aXJlKCcuL19oYXNoQ2xlYXInKSxcbiAgICBoYXNoRGVsZXRlID0gcmVxdWlyZSgnLi9faGFzaERlbGV0ZScpLFxuICAgIGhhc2hHZXQgPSByZXF1aXJlKCcuL19oYXNoR2V0JyksXG4gICAgaGFzaEhhcyA9IHJlcXVpcmUoJy4vX2hhc2hIYXMnKSxcbiAgICBoYXNoU2V0ID0gcmVxdWlyZSgnLi9faGFzaFNldCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBoYXNoIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gSGFzaChlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBIYXNoYC5cbkhhc2gucHJvdG90eXBlLmNsZWFyID0gaGFzaENsZWFyO1xuSGFzaC5wcm90b3R5cGVbJ2RlbGV0ZSddID0gaGFzaERlbGV0ZTtcbkhhc2gucHJvdG90eXBlLmdldCA9IGhhc2hHZXQ7XG5IYXNoLnByb3RvdHlwZS5oYXMgPSBoYXNoSGFzO1xuSGFzaC5wcm90b3R5cGUuc2V0ID0gaGFzaFNldDtcblxubW9kdWxlLmV4cG9ydHMgPSBIYXNoO1xuIiwKICAgICIvKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGxpc3QgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUNsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gW107XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlQ2xlYXI7XG4iLAogICAgInZhciBlcSA9IHJlcXVpcmUoJy4vZXEnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBpbmRleCBhdCB3aGljaCB0aGUgYGtleWAgaXMgZm91bmQgaW4gYGFycmF5YCBvZiBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSBrZXkgVGhlIGtleSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gYXNzb2NJbmRleE9mKGFycmF5LCBrZXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgaWYgKGVxKGFycmF5W2xlbmd0aF1bMF0sIGtleSkpIHtcbiAgICAgIHJldHVybiBsZW5ndGg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhc3NvY0luZGV4T2Y7XG4iLAogICAgInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHNwbGljZSA9IGFycmF5UHJvdG8uc3BsaWNlO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBsaXN0IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgbGFzdEluZGV4ID0gZGF0YS5sZW5ndGggLSAxO1xuICBpZiAoaW5kZXggPT0gbGFzdEluZGV4KSB7XG4gICAgZGF0YS5wb3AoKTtcbiAgfSBlbHNlIHtcbiAgICBzcGxpY2UuY2FsbChkYXRhLCBpbmRleCwgMSk7XG4gIH1cbiAgLS10aGlzLnNpemU7XG4gIHJldHVybiB0cnVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZURlbGV0ZTtcbiIsCiAgICAidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKipcbiAqIEdldHMgdGhlIGxpc3QgY2FjaGUgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVHZXQoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgcmV0dXJuIGluZGV4IDwgMCA/IHVuZGVmaW5lZCA6IGRhdGFbaW5kZXhdWzFdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZUdldDtcbiIsCiAgICAidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIGxpc3QgY2FjaGUgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlSGFzKGtleSkge1xuICByZXR1cm4gYXNzb2NJbmRleE9mKHRoaXMuX19kYXRhX18sIGtleSkgPiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVIYXM7XG4iLAogICAgInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBsaXN0IGNhY2hlIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBsaXN0IGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIGlmIChpbmRleCA8IDApIHtcbiAgICArK3RoaXMuc2l6ZTtcbiAgICBkYXRhLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgfSBlbHNlIHtcbiAgICBkYXRhW2luZGV4XVsxXSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZVNldDtcbiIsCiAgICAidmFyIGxpc3RDYWNoZUNsZWFyID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlQ2xlYXInKSxcbiAgICBsaXN0Q2FjaGVEZWxldGUgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVEZWxldGUnKSxcbiAgICBsaXN0Q2FjaGVHZXQgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVHZXQnKSxcbiAgICBsaXN0Q2FjaGVIYXMgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVIYXMnKSxcbiAgICBsaXN0Q2FjaGVTZXQgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGxpc3QgY2FjaGUgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBMaXN0Q2FjaGUoZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgTGlzdENhY2hlYC5cbkxpc3RDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBsaXN0Q2FjaGVDbGVhcjtcbkxpc3RDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gbGlzdENhY2hlRGVsZXRlO1xuTGlzdENhY2hlLnByb3RvdHlwZS5nZXQgPSBsaXN0Q2FjaGVHZXQ7XG5MaXN0Q2FjaGUucHJvdG90eXBlLmhhcyA9IGxpc3RDYWNoZUhhcztcbkxpc3RDYWNoZS5wcm90b3R5cGUuc2V0ID0gbGlzdENhY2hlU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IExpc3RDYWNoZTtcbiIsCiAgICAidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBNYXAgPSBnZXROYXRpdmUocm9vdCwgJ01hcCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hcDtcbiIsCiAgICAidmFyIEhhc2ggPSByZXF1aXJlKCcuL19IYXNoJyksXG4gICAgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyksXG4gICAgTWFwID0gcmVxdWlyZSgnLi9fTWFwJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgbWFwLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlQ2xlYXIoKSB7XG4gIHRoaXMuc2l6ZSA9IDA7XG4gIHRoaXMuX19kYXRhX18gPSB7XG4gICAgJ2hhc2gnOiBuZXcgSGFzaCxcbiAgICAnbWFwJzogbmV3IChNYXAgfHwgTGlzdENhY2hlKSxcbiAgICAnc3RyaW5nJzogbmV3IEhhc2hcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZUNsZWFyO1xuIiwKICAgICIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciB1c2UgYXMgdW5pcXVlIG9iamVjdCBrZXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNLZXlhYmxlKHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gKHR5cGUgPT0gJ3N0cmluZycgfHwgdHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nKVxuICAgID8gKHZhbHVlICE9PSAnX19wcm90b19fJylcbiAgICA6ICh2YWx1ZSA9PT0gbnVsbCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNLZXlhYmxlO1xuIiwKICAgICJ2YXIgaXNLZXlhYmxlID0gcmVxdWlyZSgnLi9faXNLZXlhYmxlJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgZGF0YSBmb3IgYG1hcGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXAgVGhlIG1hcCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIHJlZmVyZW5jZSBrZXkuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbWFwIGRhdGEuXG4gKi9cbmZ1bmN0aW9uIGdldE1hcERhdGEobWFwLCBrZXkpIHtcbiAgdmFyIGRhdGEgPSBtYXAuX19kYXRhX187XG4gIHJldHVybiBpc0tleWFibGUoa2V5KVxuICAgID8gZGF0YVt0eXBlb2Yga2V5ID09ICdzdHJpbmcnID8gJ3N0cmluZycgOiAnaGFzaCddXG4gICAgOiBkYXRhLm1hcDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRNYXBEYXRhO1xuIiwKICAgICJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgbWFwLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlRGVsZXRlKGtleSkge1xuICB2YXIgcmVzdWx0ID0gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpWydkZWxldGUnXShrZXkpO1xuICB0aGlzLnNpemUgLT0gcmVzdWx0ID8gMSA6IDA7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVEZWxldGU7XG4iLAogICAgInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIEdldHMgdGhlIG1hcCB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVHZXQoa2V5KSB7XG4gIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleSkuZ2V0KGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVHZXQ7XG4iLAogICAgInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIG1hcCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlSGFzKGtleSkge1xuICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLmhhcyhrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlSGFzO1xuIiwKICAgICJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBtYXAgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbWFwIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZVNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLFxuICAgICAgc2l6ZSA9IGRhdGEuc2l6ZTtcblxuICBkYXRhLnNldChrZXksIHZhbHVlKTtcbiAgdGhpcy5zaXplICs9IGRhdGEuc2l6ZSA9PSBzaXplID8gMCA6IDE7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlU2V0O1xuIiwKICAgICJ2YXIgbWFwQ2FjaGVDbGVhciA9IHJlcXVpcmUoJy4vX21hcENhY2hlQ2xlYXInKSxcbiAgICBtYXBDYWNoZURlbGV0ZSA9IHJlcXVpcmUoJy4vX21hcENhY2hlRGVsZXRlJyksXG4gICAgbWFwQ2FjaGVHZXQgPSByZXF1aXJlKCcuL19tYXBDYWNoZUdldCcpLFxuICAgIG1hcENhY2hlSGFzID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVIYXMnKSxcbiAgICBtYXBDYWNoZVNldCA9IHJlcXVpcmUoJy4vX21hcENhY2hlU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG1hcCBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBNYXBDYWNoZShlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBNYXBDYWNoZWAuXG5NYXBDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBtYXBDYWNoZUNsZWFyO1xuTWFwQ2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IG1hcENhY2hlRGVsZXRlO1xuTWFwQ2FjaGUucHJvdG90eXBlLmdldCA9IG1hcENhY2hlR2V0O1xuTWFwQ2FjaGUucHJvdG90eXBlLmhhcyA9IG1hcENhY2hlSGFzO1xuTWFwQ2FjaGUucHJvdG90eXBlLnNldCA9IG1hcENhY2hlU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hcENhY2hlO1xuIiwKICAgICIvKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKlxuICogQWRkcyBgdmFsdWVgIHRvIHRoZSBhcnJheSBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgYWRkXG4gKiBAbWVtYmVyT2YgU2V0Q2FjaGVcbiAqIEBhbGlhcyBwdXNoXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjYWNoZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBzZXRDYWNoZUFkZCh2YWx1ZSkge1xuICB0aGlzLl9fZGF0YV9fLnNldCh2YWx1ZSwgSEFTSF9VTkRFRklORUQpO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXRDYWNoZUFkZDtcbiIsCiAgICAiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBpbiB0aGUgYXJyYXkgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIFNldENhY2hlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBmb3VuZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzZXRDYWNoZUhhcyh2YWx1ZSkge1xuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXModmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldENhY2hlSGFzO1xuIiwKICAgICJ2YXIgTWFwQ2FjaGUgPSByZXF1aXJlKCcuL19NYXBDYWNoZScpLFxuICAgIHNldENhY2hlQWRkID0gcmVxdWlyZSgnLi9fc2V0Q2FjaGVBZGQnKSxcbiAgICBzZXRDYWNoZUhhcyA9IHJlcXVpcmUoJy4vX3NldENhY2hlSGFzJyk7XG5cbi8qKlxuICpcbiAqIENyZWF0ZXMgYW4gYXJyYXkgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIHVuaXF1ZSB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW3ZhbHVlc10gVGhlIHZhbHVlcyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gU2V0Q2FjaGUodmFsdWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gdmFsdWVzID09IG51bGwgPyAwIDogdmFsdWVzLmxlbmd0aDtcblxuICB0aGlzLl9fZGF0YV9fID0gbmV3IE1hcENhY2hlO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHRoaXMuYWRkKHZhbHVlc1tpbmRleF0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBTZXRDYWNoZWAuXG5TZXRDYWNoZS5wcm90b3R5cGUuYWRkID0gU2V0Q2FjaGUucHJvdG90eXBlLnB1c2ggPSBzZXRDYWNoZUFkZDtcblNldENhY2hlLnByb3RvdHlwZS5oYXMgPSBzZXRDYWNoZUhhcztcblxubW9kdWxlLmV4cG9ydHMgPSBTZXRDYWNoZTtcbiIsCiAgICAiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5maW5kSW5kZXhgIGFuZCBgXy5maW5kTGFzdEluZGV4YCB3aXRob3V0XG4gKiBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IGZyb21JbmRleCBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VGaW5kSW5kZXgoYXJyYXksIHByZWRpY2F0ZSwgZnJvbUluZGV4LCBmcm9tUmlnaHQpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIGluZGV4ID0gZnJvbUluZGV4ICsgKGZyb21SaWdodCA/IDEgOiAtMSk7XG5cbiAgd2hpbGUgKChmcm9tUmlnaHQgPyBpbmRleC0tIDogKytpbmRleCA8IGxlbmd0aCkpIHtcbiAgICBpZiAocHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkge1xuICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cbiAgfVxuICByZXR1cm4gLTE7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUZpbmRJbmRleDtcbiIsCiAgICAiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc05hTmAgd2l0aG91dCBzdXBwb3J0IGZvciBudW1iZXIgb2JqZWN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBgTmFOYCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNOYU4odmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNOYU47XG4iLAogICAgIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmluZGV4T2ZgIHdoaWNoIHBlcmZvcm1zIHN0cmljdCBlcXVhbGl0eVxuICogY29tcGFyaXNvbnMgb2YgdmFsdWVzLCBpLmUuIGA9PT1gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcGFyYW0ge251bWJlcn0gZnJvbUluZGV4IFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gKi9cbmZ1bmN0aW9uIHN0cmljdEluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpIHtcbiAgdmFyIGluZGV4ID0gZnJvbUluZGV4IC0gMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGlmIChhcnJheVtpbmRleF0gPT09IHZhbHVlKSB7XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHJpY3RJbmRleE9mO1xuIiwKICAgICJ2YXIgYmFzZUZpbmRJbmRleCA9IHJlcXVpcmUoJy4vX2Jhc2VGaW5kSW5kZXgnKSxcbiAgICBiYXNlSXNOYU4gPSByZXF1aXJlKCcuL19iYXNlSXNOYU4nKSxcbiAgICBzdHJpY3RJbmRleE9mID0gcmVxdWlyZSgnLi9fc3RyaWN0SW5kZXhPZicpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmluZGV4T2ZgIHdpdGhvdXQgYGZyb21JbmRleGAgYm91bmRzIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHBhcmFtIHtudW1iZXJ9IGZyb21JbmRleCBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICovXG5mdW5jdGlvbiBiYXNlSW5kZXhPZihhcnJheSwgdmFsdWUsIGZyb21JbmRleCkge1xuICByZXR1cm4gdmFsdWUgPT09IHZhbHVlXG4gICAgPyBzdHJpY3RJbmRleE9mKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4KVxuICAgIDogYmFzZUZpbmRJbmRleChhcnJheSwgYmFzZUlzTmFOLCBmcm9tSW5kZXgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJbmRleE9mO1xuIiwKICAgICJ2YXIgYmFzZUluZGV4T2YgPSByZXF1aXJlKCcuL19iYXNlSW5kZXhPZicpO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5pbmNsdWRlc2AgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gKiBzcGVjaWZ5aW5nIGFuIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSB0YXJnZXQgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHRhcmdldGAgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlJbmNsdWRlcyhhcnJheSwgdmFsdWUpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICByZXR1cm4gISFsZW5ndGggJiYgYmFzZUluZGV4T2YoYXJyYXksIHZhbHVlLCAwKSA+IC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5SW5jbHVkZXM7XG4iLAogICAgIi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlIGBhcnJheUluY2x1ZGVzYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGEgY29tcGFyYXRvci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdGFyZ2V0IFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY29tcGFyYXRvciBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB0YXJnZXRgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5SW5jbHVkZXNXaXRoKGFycmF5LCB2YWx1ZSwgY29tcGFyYXRvcikge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKGNvbXBhcmF0b3IodmFsdWUsIGFycmF5W2luZGV4XSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlJbmNsdWRlc1dpdGg7XG4iLAogICAgIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLm1hcGAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlXG4gKiBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgbWFwcGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBhcnJheU1hcChhcnJheSwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlNYXA7XG4iLAogICAgIi8qKlxuICogQ2hlY2tzIGlmIGEgYGNhY2hlYCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gY2FjaGUgVGhlIGNhY2hlIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGNhY2hlSGFzKGNhY2hlLCBrZXkpIHtcbiAgcmV0dXJuIGNhY2hlLmhhcyhrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNhY2hlSGFzO1xuIiwKICAgICJ2YXIgU2V0Q2FjaGUgPSByZXF1aXJlKCcuL19TZXRDYWNoZScpLFxuICAgIGFycmF5SW5jbHVkZXMgPSByZXF1aXJlKCcuL19hcnJheUluY2x1ZGVzJyksXG4gICAgYXJyYXlJbmNsdWRlc1dpdGggPSByZXF1aXJlKCcuL19hcnJheUluY2x1ZGVzV2l0aCcpLFxuICAgIGFycmF5TWFwID0gcmVxdWlyZSgnLi9fYXJyYXlNYXAnKSxcbiAgICBiYXNlVW5hcnkgPSByZXF1aXJlKCcuL19iYXNlVW5hcnknKSxcbiAgICBjYWNoZUhhcyA9IHJlcXVpcmUoJy4vX2NhY2hlSGFzJyk7XG5cbi8qKiBVc2VkIGFzIHRoZSBzaXplIHRvIGVuYWJsZSBsYXJnZSBhcnJheSBvcHRpbWl6YXRpb25zLiAqL1xudmFyIExBUkdFX0FSUkFZX1NJWkUgPSAyMDA7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgbWV0aG9kcyBsaWtlIGBfLmRpZmZlcmVuY2VgIHdpdGhvdXQgc3VwcG9ydFxuICogZm9yIGV4Y2x1ZGluZyBtdWx0aXBsZSBhcnJheXMgb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHZhbHVlcyB0byBleGNsdWRlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlXSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJhdG9yXSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZmlsdGVyZWQgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBiYXNlRGlmZmVyZW5jZShhcnJheSwgdmFsdWVzLCBpdGVyYXRlZSwgY29tcGFyYXRvcikge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGluY2x1ZGVzID0gYXJyYXlJbmNsdWRlcyxcbiAgICAgIGlzQ29tbW9uID0gdHJ1ZSxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IFtdLFxuICAgICAgdmFsdWVzTGVuZ3RoID0gdmFsdWVzLmxlbmd0aDtcblxuICBpZiAoIWxlbmd0aCkge1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgaWYgKGl0ZXJhdGVlKSB7XG4gICAgdmFsdWVzID0gYXJyYXlNYXAodmFsdWVzLCBiYXNlVW5hcnkoaXRlcmF0ZWUpKTtcbiAgfVxuICBpZiAoY29tcGFyYXRvcikge1xuICAgIGluY2x1ZGVzID0gYXJyYXlJbmNsdWRlc1dpdGg7XG4gICAgaXNDb21tb24gPSBmYWxzZTtcbiAgfVxuICBlbHNlIGlmICh2YWx1ZXMubGVuZ3RoID49IExBUkdFX0FSUkFZX1NJWkUpIHtcbiAgICBpbmNsdWRlcyA9IGNhY2hlSGFzO1xuICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgdmFsdWVzID0gbmV3IFNldENhY2hlKHZhbHVlcyk7XG4gIH1cbiAgb3V0ZXI6XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlID09IG51bGwgPyB2YWx1ZSA6IGl0ZXJhdGVlKHZhbHVlKTtcblxuICAgIHZhbHVlID0gKGNvbXBhcmF0b3IgfHwgdmFsdWUgIT09IDApID8gdmFsdWUgOiAwO1xuICAgIGlmIChpc0NvbW1vbiAmJiBjb21wdXRlZCA9PT0gY29tcHV0ZWQpIHtcbiAgICAgIHZhciB2YWx1ZXNJbmRleCA9IHZhbHVlc0xlbmd0aDtcbiAgICAgIHdoaWxlICh2YWx1ZXNJbmRleC0tKSB7XG4gICAgICAgIGlmICh2YWx1ZXNbdmFsdWVzSW5kZXhdID09PSBjb21wdXRlZCkge1xuICAgICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKCFpbmNsdWRlcyh2YWx1ZXMsIGNvbXB1dGVkLCBjb21wYXJhdG9yKSkge1xuICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VEaWZmZXJlbmNlO1xuIiwKICAgICJ2YXIgaXNBcnJheUxpa2UgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmlzQXJyYXlMaWtlYCBleGNlcHQgdGhhdCBpdCBhbHNvIGNoZWNrcyBpZiBgdmFsdWVgXG4gKiBpcyBhbiBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYXJyYXktbGlrZSBvYmplY3QsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdChkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlT2JqZWN0KCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdChfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUxpa2VPYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgaXNBcnJheUxpa2UodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJyYXlMaWtlT2JqZWN0O1xuIiwKICAgICJ2YXIgYmFzZURpZmZlcmVuY2UgPSByZXF1aXJlKCcuL19iYXNlRGlmZmVyZW5jZScpLFxuICAgIGJhc2VGbGF0dGVuID0gcmVxdWlyZSgnLi9fYmFzZUZsYXR0ZW4nKSxcbiAgICBiYXNlUmVzdCA9IHJlcXVpcmUoJy4vX2Jhc2VSZXN0JyksXG4gICAgaXNBcnJheUxpa2VPYmplY3QgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlT2JqZWN0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiBgYXJyYXlgIHZhbHVlcyBub3QgaW5jbHVkZWQgaW4gdGhlIG90aGVyIGdpdmVuIGFycmF5c1xuICogdXNpbmcgW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy4gVGhlIG9yZGVyIGFuZCByZWZlcmVuY2VzIG9mIHJlc3VsdCB2YWx1ZXMgYXJlXG4gKiBkZXRlcm1pbmVkIGJ5IHRoZSBmaXJzdCBhcnJheS5cbiAqXG4gKiAqKk5vdGU6KiogVW5saWtlIGBfLnB1bGxBbGxgLCB0aGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0gey4uLkFycmF5fSBbdmFsdWVzXSBUaGUgdmFsdWVzIHRvIGV4Y2x1ZGUuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBmaWx0ZXJlZCB2YWx1ZXMuXG4gKiBAc2VlIF8ud2l0aG91dCwgXy54b3JcbiAqIEBleGFtcGxlXG4gKlxuICogXy5kaWZmZXJlbmNlKFsyLCAxXSwgWzIsIDNdKTtcbiAqIC8vID0+IFsxXVxuICovXG52YXIgZGlmZmVyZW5jZSA9IGJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5LCB2YWx1ZXMpIHtcbiAgcmV0dXJuIGlzQXJyYXlMaWtlT2JqZWN0KGFycmF5KVxuICAgID8gYmFzZURpZmZlcmVuY2UoYXJyYXksIGJhc2VGbGF0dGVuKHZhbHVlcywgMSwgaXNBcnJheUxpa2VPYmplY3QsIHRydWUpKVxuICAgIDogW107XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBkaWZmZXJlbmNlO1xuIiwKICAgICJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIFNldCA9IGdldE5hdGl2ZShyb290LCAnU2V0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gU2V0O1xuIiwKICAgICIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYHVuZGVmaW5lZGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBleGFtcGxlXG4gKlxuICogXy50aW1lcygyLCBfLm5vb3ApO1xuICogLy8gPT4gW3VuZGVmaW5lZCwgdW5kZWZpbmVkXVxuICovXG5mdW5jdGlvbiBub29wKCkge1xuICAvLyBObyBvcGVyYXRpb24gcGVyZm9ybWVkLlxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG5vb3A7XG4iLAogICAgIi8qKlxuICogQ29udmVydHMgYHNldGAgdG8gYW4gYXJyYXkgb2YgaXRzIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNldCBUaGUgc2V0IHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gc2V0VG9BcnJheShzZXQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShzZXQuc2l6ZSk7XG5cbiAgc2V0LmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXN1bHRbKytpbmRleF0gPSB2YWx1ZTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0VG9BcnJheTtcbiIsCiAgICAidmFyIFNldCA9IHJlcXVpcmUoJy4vX1NldCcpLFxuICAgIG5vb3AgPSByZXF1aXJlKCcuL25vb3AnKSxcbiAgICBzZXRUb0FycmF5ID0gcmVxdWlyZSgnLi9fc2V0VG9BcnJheScpO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBJTkZJTklUWSA9IDEgLyAwO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzZXQgb2JqZWN0IG9mIGB2YWx1ZXNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHZhbHVlcyB0byBhZGQgdG8gdGhlIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBzZXQuXG4gKi9cbnZhciBjcmVhdGVTZXQgPSAhKFNldCAmJiAoMSAvIHNldFRvQXJyYXkobmV3IFNldChbLC0wXSkpWzFdKSA9PSBJTkZJTklUWSkgPyBub29wIDogZnVuY3Rpb24odmFsdWVzKSB7XG4gIHJldHVybiBuZXcgU2V0KHZhbHVlcyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZVNldDtcbiIsCiAgICAidmFyIFNldENhY2hlID0gcmVxdWlyZSgnLi9fU2V0Q2FjaGUnKSxcbiAgICBhcnJheUluY2x1ZGVzID0gcmVxdWlyZSgnLi9fYXJyYXlJbmNsdWRlcycpLFxuICAgIGFycmF5SW5jbHVkZXNXaXRoID0gcmVxdWlyZSgnLi9fYXJyYXlJbmNsdWRlc1dpdGgnKSxcbiAgICBjYWNoZUhhcyA9IHJlcXVpcmUoJy4vX2NhY2hlSGFzJyksXG4gICAgY3JlYXRlU2V0ID0gcmVxdWlyZSgnLi9fY3JlYXRlU2V0JyksXG4gICAgc2V0VG9BcnJheSA9IHJlcXVpcmUoJy4vX3NldFRvQXJyYXknKTtcblxuLyoqIFVzZWQgYXMgdGhlIHNpemUgdG8gZW5hYmxlIGxhcmdlIGFycmF5IG9wdGltaXphdGlvbnMuICovXG52YXIgTEFSR0VfQVJSQVlfU0laRSA9IDIwMDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy51bmlxQnlgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWVdIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmF0b3JdIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBkdXBsaWNhdGUgZnJlZSBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYmFzZVVuaXEoYXJyYXksIGl0ZXJhdGVlLCBjb21wYXJhdG9yKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgaW5jbHVkZXMgPSBhcnJheUluY2x1ZGVzLFxuICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgaXNDb21tb24gPSB0cnVlLFxuICAgICAgcmVzdWx0ID0gW10sXG4gICAgICBzZWVuID0gcmVzdWx0O1xuXG4gIGlmIChjb21wYXJhdG9yKSB7XG4gICAgaXNDb21tb24gPSBmYWxzZTtcbiAgICBpbmNsdWRlcyA9IGFycmF5SW5jbHVkZXNXaXRoO1xuICB9XG4gIGVsc2UgaWYgKGxlbmd0aCA+PSBMQVJHRV9BUlJBWV9TSVpFKSB7XG4gICAgdmFyIHNldCA9IGl0ZXJhdGVlID8gbnVsbCA6IGNyZWF0ZVNldChhcnJheSk7XG4gICAgaWYgKHNldCkge1xuICAgICAgcmV0dXJuIHNldFRvQXJyYXkoc2V0KTtcbiAgICB9XG4gICAgaXNDb21tb24gPSBmYWxzZTtcbiAgICBpbmNsdWRlcyA9IGNhY2hlSGFzO1xuICAgIHNlZW4gPSBuZXcgU2V0Q2FjaGU7XG4gIH1cbiAgZWxzZSB7XG4gICAgc2VlbiA9IGl0ZXJhdGVlID8gW10gOiByZXN1bHQ7XG4gIH1cbiAgb3V0ZXI6XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlID8gaXRlcmF0ZWUodmFsdWUpIDogdmFsdWU7XG5cbiAgICB2YWx1ZSA9IChjb21wYXJhdG9yIHx8IHZhbHVlICE9PSAwKSA/IHZhbHVlIDogMDtcbiAgICBpZiAoaXNDb21tb24gJiYgY29tcHV0ZWQgPT09IGNvbXB1dGVkKSB7XG4gICAgICB2YXIgc2VlbkluZGV4ID0gc2Vlbi5sZW5ndGg7XG4gICAgICB3aGlsZSAoc2VlbkluZGV4LS0pIHtcbiAgICAgICAgaWYgKHNlZW5bc2VlbkluZGV4XSA9PT0gY29tcHV0ZWQpIHtcbiAgICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGl0ZXJhdGVlKSB7XG4gICAgICAgIHNlZW4ucHVzaChjb21wdXRlZCk7XG4gICAgICB9XG4gICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKCFpbmNsdWRlcyhzZWVuLCBjb21wdXRlZCwgY29tcGFyYXRvcikpIHtcbiAgICAgIGlmIChzZWVuICE9PSByZXN1bHQpIHtcbiAgICAgICAgc2Vlbi5wdXNoKGNvbXB1dGVkKTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVW5pcTtcbiIsCiAgICAidmFyIGJhc2VGbGF0dGVuID0gcmVxdWlyZSgnLi9fYmFzZUZsYXR0ZW4nKSxcbiAgICBiYXNlUmVzdCA9IHJlcXVpcmUoJy4vX2Jhc2VSZXN0JyksXG4gICAgYmFzZVVuaXEgPSByZXF1aXJlKCcuL19iYXNlVW5pcScpLFxuICAgIGlzQXJyYXlMaWtlT2JqZWN0ID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZU9iamVjdCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdW5pcXVlIHZhbHVlcywgaW4gb3JkZXIsIGZyb20gYWxsIGdpdmVuIGFycmF5cyB1c2luZ1xuICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7Li4uQXJyYXl9IFthcnJheXNdIFRoZSBhcnJheXMgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGNvbWJpbmVkIHZhbHVlcy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy51bmlvbihbMl0sIFsxLCAyXSk7XG4gKiAvLyA9PiBbMiwgMV1cbiAqL1xudmFyIHVuaW9uID0gYmFzZVJlc3QoZnVuY3Rpb24oYXJyYXlzKSB7XG4gIHJldHVybiBiYXNlVW5pcShiYXNlRmxhdHRlbihhcnJheXMsIDEsIGlzQXJyYXlMaWtlT2JqZWN0LCB0cnVlKSk7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmlvbjtcbiIsCiAgICAiLyoqXG4gKiBDcmVhdGVzIGEgdW5hcnkgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIGl0cyBhcmd1bWVudCB0cmFuc2Zvcm1lZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgYXJndW1lbnQgdHJhbnNmb3JtLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG92ZXJBcmcoZnVuYywgdHJhbnNmb3JtKSB7XG4gIHJldHVybiBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4gZnVuYyh0cmFuc2Zvcm0oYXJnKSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb3ZlckFyZztcbiIsCiAgICAidmFyIG92ZXJBcmcgPSByZXF1aXJlKCcuL19vdmVyQXJnJyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIGdldFByb3RvdHlwZSA9IG92ZXJBcmcoT2JqZWN0LmdldFByb3RvdHlwZU9mLCBPYmplY3QpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFByb3RvdHlwZTtcbiIsCiAgICAidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgZ2V0UHJvdG90eXBlID0gcmVxdWlyZSgnLi9fZ2V0UHJvdG90eXBlJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIFVzZWQgdG8gaW5mZXIgdGhlIGBPYmplY3RgIGNvbnN0cnVjdG9yLiAqL1xudmFyIG9iamVjdEN0b3JTdHJpbmcgPSBmdW5jVG9TdHJpbmcuY2FsbChPYmplY3QpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcGxhaW4gb2JqZWN0LCB0aGF0IGlzLCBhbiBvYmplY3QgY3JlYXRlZCBieSB0aGVcbiAqIGBPYmplY3RgIGNvbnN0cnVjdG9yIG9yIG9uZSB3aXRoIGEgYFtbUHJvdG90eXBlXV1gIG9mIGBudWxsYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuOC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHBsYWluIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiB9XG4gKlxuICogXy5pc1BsYWluT2JqZWN0KG5ldyBGb28pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KHsgJ3gnOiAwLCAneSc6IDAgfSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KE9iamVjdC5jcmVhdGUobnVsbCkpO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3RMaWtlKHZhbHVlKSB8fCBiYXNlR2V0VGFnKHZhbHVlKSAhPSBvYmplY3RUYWcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHByb3RvID0gZ2V0UHJvdG90eXBlKHZhbHVlKTtcbiAgaWYgKHByb3RvID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgdmFyIEN0b3IgPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3RvLCAnY29uc3RydWN0b3InKSAmJiBwcm90by5jb25zdHJ1Y3RvcjtcbiAgcmV0dXJuIHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3RvciBpbnN0YW5jZW9mIEN0b3IgJiZcbiAgICBmdW5jVG9TdHJpbmcuY2FsbChDdG9yKSA9PSBvYmplY3RDdG9yU3RyaW5nO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzUGxhaW5PYmplY3Q7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5hc3NlcnRWYWxpZFBhdHRlcm4gPSB2b2lkIDA7XG5jb25zdCBNQVhfUEFUVEVSTl9MRU5HVEggPSAxMDI0ICogNjQ7XG5jb25zdCBhc3NlcnRWYWxpZFBhdHRlcm4gPSAocGF0dGVybikgPT4ge1xuICAgIGlmICh0eXBlb2YgcGF0dGVybiAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBwYXR0ZXJuJyk7XG4gICAgfVxuICAgIGlmIChwYXR0ZXJuLmxlbmd0aCA+IE1BWF9QQVRURVJOX0xFTkdUSCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdwYXR0ZXJuIGlzIHRvbyBsb25nJyk7XG4gICAgfVxufTtcbmV4cG9ydHMuYXNzZXJ0VmFsaWRQYXR0ZXJuID0gYXNzZXJ0VmFsaWRQYXR0ZXJuO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXNzZXJ0LXZhbGlkLXBhdHRlcm4uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIHRyYW5zbGF0ZSB0aGUgdmFyaW91cyBwb3NpeCBjaGFyYWN0ZXIgY2xhc3NlcyBpbnRvIHVuaWNvZGUgcHJvcGVydGllc1xuLy8gdGhpcyB3b3JrcyBhY3Jvc3MgYWxsIHVuaWNvZGUgbG9jYWxlc1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5wYXJzZUNsYXNzID0gdm9pZCAwO1xuLy8geyA8cG9zaXggY2xhc3M+OiBbPHRyYW5zbGF0aW9uPiwgL3UgZmxhZyByZXF1aXJlZCwgbmVnYXRlZF1cbmNvbnN0IHBvc2l4Q2xhc3NlcyA9IHtcbiAgICAnWzphbG51bTpdJzogWydcXFxccHtMfVxcXFxwe05sfVxcXFxwe05kfScsIHRydWVdLFxuICAgICdbOmFscGhhOl0nOiBbJ1xcXFxwe0x9XFxcXHB7Tmx9JywgdHJ1ZV0sXG4gICAgJ1s6YXNjaWk6XSc6IFsnXFxcXHgnICsgJzAwLVxcXFx4JyArICc3ZicsIGZhbHNlXSxcbiAgICAnWzpibGFuazpdJzogWydcXFxccHtac31cXFxcdCcsIHRydWVdLFxuICAgICdbOmNudHJsOl0nOiBbJ1xcXFxwe0NjfScsIHRydWVdLFxuICAgICdbOmRpZ2l0Ol0nOiBbJ1xcXFxwe05kfScsIHRydWVdLFxuICAgICdbOmdyYXBoOl0nOiBbJ1xcXFxwe1p9XFxcXHB7Q30nLCB0cnVlLCB0cnVlXSxcbiAgICAnWzpsb3dlcjpdJzogWydcXFxccHtMbH0nLCB0cnVlXSxcbiAgICAnWzpwcmludDpdJzogWydcXFxccHtDfScsIHRydWVdLFxuICAgICdbOnB1bmN0Ol0nOiBbJ1xcXFxwe1B9JywgdHJ1ZV0sXG4gICAgJ1s6c3BhY2U6XSc6IFsnXFxcXHB7Wn1cXFxcdFxcXFxyXFxcXG5cXFxcdlxcXFxmJywgdHJ1ZV0sXG4gICAgJ1s6dXBwZXI6XSc6IFsnXFxcXHB7THV9JywgdHJ1ZV0sXG4gICAgJ1s6d29yZDpdJzogWydcXFxccHtMfVxcXFxwe05sfVxcXFxwe05kfVxcXFxwe1BjfScsIHRydWVdLFxuICAgICdbOnhkaWdpdDpdJzogWydBLUZhLWYwLTknLCBmYWxzZV0sXG59O1xuLy8gb25seSBuZWVkIHRvIGVzY2FwZSBhIGZldyB0aGluZ3MgaW5zaWRlIG9mIGJyYWNlIGV4cHJlc3Npb25zXG4vLyBlc2NhcGVzOiBbIFxcIF0gLVxuY29uc3QgYnJhY2VFc2NhcGUgPSAocykgPT4gcy5yZXBsYWNlKC9bW1xcXVxcXFwtXS9nLCAnXFxcXCQmJyk7XG4vLyBlc2NhcGUgYWxsIHJlZ2V4cCBtYWdpYyBjaGFyYWN0ZXJzXG5jb25zdCByZWdleHBFc2NhcGUgPSAocykgPT4gcy5yZXBsYWNlKC9bLVtcXF17fSgpKis/LixcXFxcXiR8I1xcc10vZywgJ1xcXFwkJicpO1xuLy8gZXZlcnl0aGluZyBoYXMgYWxyZWFkeSBiZWVuIGVzY2FwZWQsIHdlIGp1c3QgaGF2ZSB0byBqb2luXG5jb25zdCByYW5nZXNUb1N0cmluZyA9IChyYW5nZXMpID0+IHJhbmdlcy5qb2luKCcnKTtcbi8vIHRha2VzIGEgZ2xvYiBzdHJpbmcgYXQgYSBwb3NpeCBicmFjZSBleHByZXNzaW9uLCBhbmQgcmV0dXJuc1xuLy8gYW4gZXF1aXZhbGVudCByZWd1bGFyIGV4cHJlc3Npb24gc291cmNlLCBhbmQgYm9vbGVhbiBpbmRpY2F0aW5nXG4vLyB3aGV0aGVyIHRoZSAvdSBmbGFnIG5lZWRzIHRvIGJlIGFwcGxpZWQsIGFuZCB0aGUgbnVtYmVyIG9mIGNoYXJzXG4vLyBjb25zdW1lZCB0byBwYXJzZSB0aGUgY2hhcmFjdGVyIGNsYXNzLlxuLy8gVGhpcyBhbHNvIHJlbW92ZXMgb3V0IG9mIG9yZGVyIHJhbmdlcywgYW5kIHJldHVybnMgKCQuKSBpZiB0aGVcbi8vIGVudGlyZSBjbGFzcyBqdXN0IG5vIGdvb2QuXG5jb25zdCBwYXJzZUNsYXNzID0gKGdsb2IsIHBvc2l0aW9uKSA9PiB7XG4gICAgY29uc3QgcG9zID0gcG9zaXRpb247XG4gICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgaWYgKGdsb2IuY2hhckF0KHBvcykgIT09ICdbJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBpbiBhIGJyYWNlIGV4cHJlc3Npb24nKTtcbiAgICB9XG4gICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICBjb25zdCByYW5nZXMgPSBbXTtcbiAgICBjb25zdCBuZWdzID0gW107XG4gICAgbGV0IGkgPSBwb3MgKyAxO1xuICAgIGxldCBzYXdTdGFydCA9IGZhbHNlO1xuICAgIGxldCB1ZmxhZyA9IGZhbHNlO1xuICAgIGxldCBlc2NhcGluZyA9IGZhbHNlO1xuICAgIGxldCBuZWdhdGUgPSBmYWxzZTtcbiAgICBsZXQgZW5kUG9zID0gcG9zO1xuICAgIGxldCByYW5nZVN0YXJ0ID0gJyc7XG4gICAgV0hJTEU6IHdoaWxlIChpIDwgZ2xvYi5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgYyA9IGdsb2IuY2hhckF0KGkpO1xuICAgICAgICBpZiAoKGMgPT09ICchJyB8fCBjID09PSAnXicpICYmIGkgPT09IHBvcyArIDEpIHtcbiAgICAgICAgICAgIG5lZ2F0ZSA9IHRydWU7XG4gICAgICAgICAgICBpKys7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYyA9PT0gJ10nICYmIHNhd1N0YXJ0ICYmICFlc2NhcGluZykge1xuICAgICAgICAgICAgZW5kUG9zID0gaSArIDE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBzYXdTdGFydCA9IHRydWU7XG4gICAgICAgIGlmIChjID09PSAnXFxcXCcpIHtcbiAgICAgICAgICAgIGlmICghZXNjYXBpbmcpIHtcbiAgICAgICAgICAgICAgICBlc2NhcGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZXNjYXBlZCBcXCBjaGFyLCBmYWxsIHRocm91Z2ggYW5kIHRyZWF0IGxpa2Ugbm9ybWFsIGNoYXJcbiAgICAgICAgfVxuICAgICAgICBpZiAoYyA9PT0gJ1snICYmICFlc2NhcGluZykge1xuICAgICAgICAgICAgLy8gZWl0aGVyIGEgcG9zaXggY2xhc3MsIGEgY29sbGF0aW9uIGVxdWl2YWxlbnQsIG9yIGp1c3QgYSBbXG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtjbHMsIFt1bmlwLCB1LCBuZWddXSBvZiBPYmplY3QuZW50cmllcyhwb3NpeENsYXNzZXMpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGdsb2Iuc3RhcnRzV2l0aChjbHMsIGkpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGludmFsaWQsIFthLVtdIGlzIGZpbmUsIGJ1dCBub3QgW2EtWzphbHBoYV1dXG4gICAgICAgICAgICAgICAgICAgIGlmIChyYW5nZVN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWyckLicsIGZhbHNlLCBnbG9iLmxlbmd0aCAtIHBvcywgdHJ1ZV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaSArPSBjbHMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmVnKVxuICAgICAgICAgICAgICAgICAgICAgICAgbmVncy5wdXNoKHVuaXApO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICByYW5nZXMucHVzaCh1bmlwKTtcbiAgICAgICAgICAgICAgICAgICAgdWZsYWcgPSB1ZmxhZyB8fCB1O1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZSBXSElMRTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gbm93IGl0J3MganVzdCBhIG5vcm1hbCBjaGFyYWN0ZXIsIGVmZmVjdGl2ZWx5XG4gICAgICAgIGVzY2FwaW5nID0gZmFsc2U7XG4gICAgICAgIGlmIChyYW5nZVN0YXJ0KSB7XG4gICAgICAgICAgICAvLyB0aHJvdyB0aGlzIHJhbmdlIGF3YXkgaWYgaXQncyBub3QgdmFsaWQsIGJ1dCBvdGhlcnNcbiAgICAgICAgICAgIC8vIGNhbiBzdGlsbCBtYXRjaC5cbiAgICAgICAgICAgIGlmIChjID4gcmFuZ2VTdGFydCkge1xuICAgICAgICAgICAgICAgIHJhbmdlcy5wdXNoKGJyYWNlRXNjYXBlKHJhbmdlU3RhcnQpICsgJy0nICsgYnJhY2VFc2NhcGUoYykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYyA9PT0gcmFuZ2VTdGFydCkge1xuICAgICAgICAgICAgICAgIHJhbmdlcy5wdXNoKGJyYWNlRXNjYXBlKGMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJhbmdlU3RhcnQgPSAnJztcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIG5vdyBtaWdodCBiZSB0aGUgc3RhcnQgb2YgYSByYW5nZS5cbiAgICAgICAgLy8gY2FuIGJlIGVpdGhlciBjLWQgb3IgYy1dIG9yIGM8bW9yZS4uLj5dIG9yIGNdIGF0IHRoaXMgcG9pbnRcbiAgICAgICAgaWYgKGdsb2Iuc3RhcnRzV2l0aCgnLV0nLCBpICsgMSkpIHtcbiAgICAgICAgICAgIHJhbmdlcy5wdXNoKGJyYWNlRXNjYXBlKGMgKyAnLScpKTtcbiAgICAgICAgICAgIGkgKz0gMjtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChnbG9iLnN0YXJ0c1dpdGgoJy0nLCBpICsgMSkpIHtcbiAgICAgICAgICAgIHJhbmdlU3RhcnQgPSBjO1xuICAgICAgICAgICAgaSArPSAyO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbm90IHRoZSBzdGFydCBvZiBhIHJhbmdlLCBqdXN0IGEgc2luZ2xlIGNoYXJhY3RlclxuICAgICAgICByYW5nZXMucHVzaChicmFjZUVzY2FwZShjKSk7XG4gICAgICAgIGkrKztcbiAgICB9XG4gICAgaWYgKGVuZFBvcyA8IGkpIHtcbiAgICAgICAgLy8gZGlkbid0IHNlZSB0aGUgZW5kIG9mIHRoZSBjbGFzcywgbm90IGEgdmFsaWQgY2xhc3MsXG4gICAgICAgIC8vIGJ1dCBtaWdodCBzdGlsbCBiZSB2YWxpZCBhcyBhIGxpdGVyYWwgbWF0Y2guXG4gICAgICAgIHJldHVybiBbJycsIGZhbHNlLCAwLCBmYWxzZV07XG4gICAgfVxuICAgIC8vIGlmIHdlIGdvdCBubyByYW5nZXMgYW5kIG5vIG5lZ2F0ZXMsIHRoZW4gd2UgaGF2ZSBhIHJhbmdlIHRoYXRcbiAgICAvLyBjYW5ub3QgcG9zc2libHkgbWF0Y2ggYW55dGhpbmcsIGFuZCB0aGF0IHBvaXNvbnMgdGhlIHdob2xlIGdsb2JcbiAgICBpZiAoIXJhbmdlcy5sZW5ndGggJiYgIW5lZ3MubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBbJyQuJywgZmFsc2UsIGdsb2IubGVuZ3RoIC0gcG9zLCB0cnVlXTtcbiAgICB9XG4gICAgLy8gaWYgd2UgZ290IG9uZSBwb3NpdGl2ZSByYW5nZSwgYW5kIGl0J3MgYSBzaW5nbGUgY2hhcmFjdGVyLCB0aGVuIHRoYXQnc1xuICAgIC8vIG5vdCBhY3R1YWxseSBhIG1hZ2ljIHBhdHRlcm4sIGl0J3MganVzdCB0aGF0IG9uZSBsaXRlcmFsIGNoYXJhY3Rlci5cbiAgICAvLyB3ZSBzaG91bGQgbm90IHRyZWF0IHRoYXQgYXMgXCJtYWdpY1wiLCB3ZSBzaG91bGQganVzdCByZXR1cm4gdGhlIGxpdGVyYWxcbiAgICAvLyBjaGFyYWN0ZXIuIFtfXSBpcyBhIHBlcmZlY3RseSB2YWxpZCB3YXkgdG8gZXNjYXBlIGdsb2IgbWFnaWMgY2hhcnMuXG4gICAgaWYgKG5lZ3MubGVuZ3RoID09PSAwICYmXG4gICAgICAgIHJhbmdlcy5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgL15cXFxcPy4kLy50ZXN0KHJhbmdlc1swXSkgJiZcbiAgICAgICAgIW5lZ2F0ZSkge1xuICAgICAgICBjb25zdCByID0gcmFuZ2VzWzBdLmxlbmd0aCA9PT0gMiA/IHJhbmdlc1swXS5zbGljZSgtMSkgOiByYW5nZXNbMF07XG4gICAgICAgIHJldHVybiBbcmVnZXhwRXNjYXBlKHIpLCBmYWxzZSwgZW5kUG9zIC0gcG9zLCBmYWxzZV07XG4gICAgfVxuICAgIGNvbnN0IHNyYW5nZXMgPSAnWycgKyAobmVnYXRlID8gJ14nIDogJycpICsgcmFuZ2VzVG9TdHJpbmcocmFuZ2VzKSArICddJztcbiAgICBjb25zdCBzbmVncyA9ICdbJyArIChuZWdhdGUgPyAnJyA6ICdeJykgKyByYW5nZXNUb1N0cmluZyhuZWdzKSArICddJztcbiAgICBjb25zdCBjb21iID0gcmFuZ2VzLmxlbmd0aCAmJiBuZWdzLmxlbmd0aFxuICAgICAgICA/ICcoJyArIHNyYW5nZXMgKyAnfCcgKyBzbmVncyArICcpJ1xuICAgICAgICA6IHJhbmdlcy5sZW5ndGhcbiAgICAgICAgICAgID8gc3Jhbmdlc1xuICAgICAgICAgICAgOiBzbmVncztcbiAgICByZXR1cm4gW2NvbWIsIHVmbGFnLCBlbmRQb3MgLSBwb3MsIHRydWVdO1xufTtcbmV4cG9ydHMucGFyc2VDbGFzcyA9IHBhcnNlQ2xhc3M7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1icmFjZS1leHByZXNzaW9ucy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy51bmVzY2FwZSA9IHZvaWQgMDtcbi8qKlxuICogVW4tZXNjYXBlIGEgc3RyaW5nIHRoYXQgaGFzIGJlZW4gZXNjYXBlZCB3aXRoIHtAbGluayBlc2NhcGV9LlxuICpcbiAqIElmIHRoZSB7QGxpbmsgd2luZG93c1BhdGhzTm9Fc2NhcGV9IG9wdGlvbiBpcyB1c2VkLCB0aGVuIHNxdWFyZS1icmFjZVxuICogZXNjYXBlcyBhcmUgcmVtb3ZlZCwgYnV0IG5vdCBiYWNrc2xhc2ggZXNjYXBlcy4gIEZvciBleGFtcGxlLCBpdCB3aWxsIHR1cm5cbiAqIHRoZSBzdHJpbmcgYCdbKl0nYCBpbnRvIGAqYCwgYnV0IGl0IHdpbGwgbm90IHR1cm4gYCdcXFxcKidgIGludG8gYCcqJ2AsXG4gKiBiZWN1YXNlIGBcXGAgaXMgYSBwYXRoIHNlcGFyYXRvciBpbiBgd2luZG93c1BhdGhzTm9Fc2NhcGVgIG1vZGUuXG4gKlxuICogV2hlbiBgd2luZG93c1BhdGhzTm9Fc2NhcGVgIGlzIG5vdCBzZXQsIHRoZW4gYm90aCBicmFjZSBlc2NhcGVzIGFuZFxuICogYmFja3NsYXNoIGVzY2FwZXMgYXJlIHJlbW92ZWQuXG4gKlxuICogU2xhc2hlcyAoYW5kIGJhY2tzbGFzaGVzIGluIGB3aW5kb3dzUGF0aHNOb0VzY2FwZWAgbW9kZSkgY2Fubm90IGJlIGVzY2FwZWRcbiAqIG9yIHVuZXNjYXBlZC5cbiAqL1xuY29uc3QgdW5lc2NhcGUgPSAocywgeyB3aW5kb3dzUGF0aHNOb0VzY2FwZSA9IGZhbHNlLCB9ID0ge30pID0+IHtcbiAgICByZXR1cm4gd2luZG93c1BhdGhzTm9Fc2NhcGVcbiAgICAgICAgPyBzLnJlcGxhY2UoL1xcWyhbXlxcL1xcXFxdKVxcXS9nLCAnJDEnKVxuICAgICAgICA6IHMucmVwbGFjZSgvKCg/IVxcXFwpLnxeKVxcWyhbXlxcL1xcXFxdKVxcXS9nLCAnJDEkMicpLnJlcGxhY2UoL1xcXFwoW15cXC9dKS9nLCAnJDEnKTtcbn07XG5leHBvcnRzLnVuZXNjYXBlID0gdW5lc2NhcGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11bmVzY2FwZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gcGFyc2UgYSBzaW5nbGUgcGF0aCBwb3J0aW9uXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkFTVCA9IHZvaWQgMDtcbmNvbnN0IGJyYWNlX2V4cHJlc3Npb25zX2pzXzEgPSByZXF1aXJlKFwiLi9icmFjZS1leHByZXNzaW9ucy5qc1wiKTtcbmNvbnN0IHVuZXNjYXBlX2pzXzEgPSByZXF1aXJlKFwiLi91bmVzY2FwZS5qc1wiKTtcbmNvbnN0IHR5cGVzID0gbmV3IFNldChbJyEnLCAnPycsICcrJywgJyonLCAnQCddKTtcbmNvbnN0IGlzRXh0Z2xvYlR5cGUgPSAoYykgPT4gdHlwZXMuaGFzKGMpO1xuLy8gUGF0dGVybnMgdGhhdCBnZXQgcHJlcGVuZGVkIHRvIGJpbmQgdG8gdGhlIHN0YXJ0IG9mIGVpdGhlciB0aGVcbi8vIGVudGlyZSBzdHJpbmcsIG9yIGp1c3QgYSBzaW5nbGUgcGF0aCBwb3J0aW9uLCB0byBwcmV2ZW50IGRvdHNcbi8vIGFuZC9vciB0cmF2ZXJzYWwgcGF0dGVybnMsIHdoZW4gbmVlZGVkLlxuLy8gRXh0cyBkb24ndCBuZWVkIHRoZSBeIG9yIC8gYml0LCBiZWNhdXNlIHRoZSByb290IGJpbmRzIHRoYXQgYWxyZWFkeS5cbmNvbnN0IHN0YXJ0Tm9UcmF2ZXJzYWwgPSAnKD8hKD86XnwvKVxcXFwuXFxcXC4/KD86JHwvKSknO1xuY29uc3Qgc3RhcnROb0RvdCA9ICcoPyFcXFxcLiknO1xuLy8gY2hhcmFjdGVycyB0aGF0IGluZGljYXRlIGEgc3RhcnQgb2YgcGF0dGVybiBuZWVkcyB0aGUgXCJubyBkb3RzXCIgYml0LFxuLy8gYmVjYXVzZSBhIGRvdCAqbWlnaHQqIGJlIG1hdGNoZWQuICggaXMgbm90IGluIHRoZSBsaXN0LCBiZWNhdXNlIGluXG4vLyB0aGUgY2FzZSBvZiBhIGNoaWxkIGV4dGdsb2IsIGl0IHdpbGwgaGFuZGxlIHRoZSBwcmV2ZW50aW9uIGl0c2VsZi5cbmNvbnN0IGFkZFBhdHRlcm5TdGFydCA9IG5ldyBTZXQoWydbJywgJy4nXSk7XG4vLyBjYXNlcyB3aGVyZSB0cmF2ZXJzYWwgaXMgQS1PSywgbm8gZG90IHByZXZlbnRpb24gbmVlZGVkXG5jb25zdCBqdXN0RG90cyA9IG5ldyBTZXQoWycuLicsICcuJ10pO1xuY29uc3QgcmVTcGVjaWFscyA9IG5ldyBTZXQoJygpLip7fSs/W11eJFxcXFwhJyk7XG5jb25zdCByZWdFeHBFc2NhcGUgPSAocykgPT4gcy5yZXBsYWNlKC9bLVtcXF17fSgpKis/LixcXFxcXiR8I1xcc10vZywgJ1xcXFwkJicpO1xuLy8gYW55IHNpbmdsZSB0aGluZyBvdGhlciB0aGFuIC9cbmNvbnN0IHFtYXJrID0gJ1teL10nO1xuLy8gKiA9PiBhbnkgbnVtYmVyIG9mIGNoYXJhY3RlcnNcbmNvbnN0IHN0YXIgPSBxbWFyayArICcqPyc7XG4vLyB1c2UgKyB3aGVuIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgKnNvbWV0aGluZyogbWF0Y2hlcywgYmVjYXVzZSB0aGUgKiBpc1xuLy8gdGhlIG9ubHkgdGhpbmcgaW4gdGhlIHBhdGggcG9ydGlvbi5cbmNvbnN0IHN0YXJOb0VtcHR5ID0gcW1hcmsgKyAnKz8nO1xuLy8gcmVtb3ZlIHRoZSBcXCBjaGFycyB0aGF0IHdlIGFkZGVkIGlmIHdlIGVuZCB1cCBkb2luZyBhIG5vbm1hZ2ljIGNvbXBhcmVcbi8vIGNvbnN0IGRlc2xhc2ggPSAoczogc3RyaW5nKSA9PiBzLnJlcGxhY2UoL1xcXFwoLikvZywgJyQxJylcbmNsYXNzIEFTVCB7XG4gICAgdHlwZTtcbiAgICAjcm9vdDtcbiAgICAjaGFzTWFnaWM7XG4gICAgI3VmbGFnID0gZmFsc2U7XG4gICAgI3BhcnRzID0gW107XG4gICAgI3BhcmVudDtcbiAgICAjcGFyZW50SW5kZXg7XG4gICAgI25lZ3M7XG4gICAgI2ZpbGxlZE5lZ3MgPSBmYWxzZTtcbiAgICAjb3B0aW9ucztcbiAgICAjdG9TdHJpbmc7XG4gICAgLy8gc2V0IHRvIHRydWUgaWYgaXQncyBhbiBleHRnbG9iIHdpdGggbm8gY2hpbGRyZW5cbiAgICAvLyAod2hpY2ggcmVhbGx5IG1lYW5zIG9uZSBjaGlsZCBvZiAnJylcbiAgICAjZW1wdHlFeHQgPSBmYWxzZTtcbiAgICBjb25zdHJ1Y3Rvcih0eXBlLCBwYXJlbnQsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgICAgICAvLyBleHRnbG9icyBhcmUgaW5oZXJlbnRseSBtYWdpY2FsXG4gICAgICAgIGlmICh0eXBlKVxuICAgICAgICAgICAgdGhpcy4jaGFzTWFnaWMgPSB0cnVlO1xuICAgICAgICB0aGlzLiNwYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgIHRoaXMuI3Jvb3QgPSB0aGlzLiNwYXJlbnQgPyB0aGlzLiNwYXJlbnQuI3Jvb3QgOiB0aGlzO1xuICAgICAgICB0aGlzLiNvcHRpb25zID0gdGhpcy4jcm9vdCA9PT0gdGhpcyA/IG9wdGlvbnMgOiB0aGlzLiNyb290LiNvcHRpb25zO1xuICAgICAgICB0aGlzLiNuZWdzID0gdGhpcy4jcm9vdCA9PT0gdGhpcyA/IFtdIDogdGhpcy4jcm9vdC4jbmVncztcbiAgICAgICAgaWYgKHR5cGUgPT09ICchJyAmJiAhdGhpcy4jcm9vdC4jZmlsbGVkTmVncylcbiAgICAgICAgICAgIHRoaXMuI25lZ3MucHVzaCh0aGlzKTtcbiAgICAgICAgdGhpcy4jcGFyZW50SW5kZXggPSB0aGlzLiNwYXJlbnQgPyB0aGlzLiNwYXJlbnQuI3BhcnRzLmxlbmd0aCA6IDA7XG4gICAgfVxuICAgIGdldCBoYXNNYWdpYygpIHtcbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIGlmICh0aGlzLiNoYXNNYWdpYyAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuI2hhc01hZ2ljO1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICBmb3IgKGNvbnN0IHAgb2YgdGhpcy4jcGFydHMpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcCA9PT0gJ3N0cmluZycpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBpZiAocC50eXBlIHx8IHAuaGFzTWFnaWMpXG4gICAgICAgICAgICAgICAgcmV0dXJuICh0aGlzLiNoYXNNYWdpYyA9IHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIG5vdGU6IHdpbGwgYmUgdW5kZWZpbmVkIHVudGlsIHdlIGdlbmVyYXRlIHRoZSByZWdleHAgc3JjIGFuZCBmaW5kIG91dFxuICAgICAgICByZXR1cm4gdGhpcy4jaGFzTWFnaWM7XG4gICAgfVxuICAgIC8vIHJlY29uc3RydWN0cyB0aGUgcGF0dGVyblxuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICBpZiAodGhpcy4jdG9TdHJpbmcgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiN0b1N0cmluZztcbiAgICAgICAgaWYgKCF0aGlzLnR5cGUpIHtcbiAgICAgICAgICAgIHJldHVybiAodGhpcy4jdG9TdHJpbmcgPSB0aGlzLiNwYXJ0cy5tYXAocCA9PiBTdHJpbmcocCkpLmpvaW4oJycpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAodGhpcy4jdG9TdHJpbmcgPVxuICAgICAgICAgICAgICAgIHRoaXMudHlwZSArICcoJyArIHRoaXMuI3BhcnRzLm1hcChwID0+IFN0cmluZyhwKSkuam9pbignfCcpICsgJyknKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAjZmlsbE5lZ3MoKSB7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICBpZiAodGhpcyAhPT0gdGhpcy4jcm9vdClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc2hvdWxkIG9ubHkgY2FsbCBvbiByb290Jyk7XG4gICAgICAgIGlmICh0aGlzLiNmaWxsZWROZWdzKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIC8vIGNhbGwgdG9TdHJpbmcoKSBvbmNlIHRvIGZpbGwgdGhpcyBvdXRcbiAgICAgICAgdGhpcy50b1N0cmluZygpO1xuICAgICAgICB0aGlzLiNmaWxsZWROZWdzID0gdHJ1ZTtcbiAgICAgICAgbGV0IG47XG4gICAgICAgIHdoaWxlICgobiA9IHRoaXMuI25lZ3MucG9wKCkpKSB7XG4gICAgICAgICAgICBpZiAobi50eXBlICE9PSAnIScpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAvLyB3YWxrIHVwIHRoZSB0cmVlLCBhcHBlbmRpbmcgZXZlcnRoaW5nIHRoYXQgY29tZXMgQUZURVIgcGFyZW50SW5kZXhcbiAgICAgICAgICAgIGxldCBwID0gbjtcbiAgICAgICAgICAgIGxldCBwcCA9IHAuI3BhcmVudDtcbiAgICAgICAgICAgIHdoaWxlIChwcCkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSBwLiNwYXJlbnRJbmRleCArIDE7ICFwcC50eXBlICYmIGkgPCBwcC4jcGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBwYXJ0IG9mIG4uI3BhcnRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcGFydCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N0cmluZyBwYXJ0IGluIGV4dGdsb2IgQVNUPz8nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0LmNvcHlJbihwcC4jcGFydHNbaV0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHAgPSBwcDtcbiAgICAgICAgICAgICAgICBwcCA9IHAuI3BhcmVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgcHVzaCguLi5wYXJ0cykge1xuICAgICAgICBmb3IgKGNvbnN0IHAgb2YgcGFydHMpIHtcbiAgICAgICAgICAgIGlmIChwID09PSAnJylcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBwICE9PSAnc3RyaW5nJyAmJiAhKHAgaW5zdGFuY2VvZiBBU1QgJiYgcC4jcGFyZW50ID09PSB0aGlzKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBwYXJ0OiAnICsgcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgdGhpcy4jcGFydHMucHVzaChwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIGNvbnN0IHJldCA9IHRoaXMudHlwZSA9PT0gbnVsbFxuICAgICAgICAgICAgPyB0aGlzLiNwYXJ0cy5zbGljZSgpLm1hcChwID0+ICh0eXBlb2YgcCA9PT0gJ3N0cmluZycgPyBwIDogcC50b0pTT04oKSkpXG4gICAgICAgICAgICA6IFt0aGlzLnR5cGUsIC4uLnRoaXMuI3BhcnRzLm1hcChwID0+IHAudG9KU09OKCkpXTtcbiAgICAgICAgaWYgKHRoaXMuaXNTdGFydCgpICYmICF0aGlzLnR5cGUpXG4gICAgICAgICAgICByZXQudW5zaGlmdChbXSk7XG4gICAgICAgIGlmICh0aGlzLmlzRW5kKCkgJiZcbiAgICAgICAgICAgICh0aGlzID09PSB0aGlzLiNyb290IHx8XG4gICAgICAgICAgICAgICAgKHRoaXMuI3Jvb3QuI2ZpbGxlZE5lZ3MgJiYgdGhpcy4jcGFyZW50Py50eXBlID09PSAnIScpKSkge1xuICAgICAgICAgICAgcmV0LnB1c2goe30pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICAgIGlzU3RhcnQoKSB7XG4gICAgICAgIGlmICh0aGlzLiNyb290ID09PSB0aGlzKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIC8vIGlmICh0aGlzLnR5cGUpIHJldHVybiAhIXRoaXMuI3BhcmVudD8uaXNTdGFydCgpXG4gICAgICAgIGlmICghdGhpcy4jcGFyZW50Py5pc1N0YXJ0KCkpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLiNwYXJlbnRJbmRleCA9PT0gMClcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAvLyBpZiBldmVyeXRoaW5nIEFIRUFEIG9mIHRoaXMgaXMgYSBuZWdhdGlvbiwgdGhlbiBpdCdzIHN0aWxsIHRoZSBcInN0YXJ0XCJcbiAgICAgICAgY29uc3QgcCA9IHRoaXMuI3BhcmVudDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLiNwYXJlbnRJbmRleDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBwcCA9IHAuI3BhcnRzW2ldO1xuICAgICAgICAgICAgaWYgKCEocHAgaW5zdGFuY2VvZiBBU1QgJiYgcHAudHlwZSA9PT0gJyEnKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaXNFbmQoKSB7XG4gICAgICAgIGlmICh0aGlzLiNyb290ID09PSB0aGlzKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmICh0aGlzLiNwYXJlbnQ/LnR5cGUgPT09ICchJylcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAoIXRoaXMuI3BhcmVudD8uaXNFbmQoKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKCF0aGlzLnR5cGUpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy4jcGFyZW50Py5pc0VuZCgpO1xuICAgICAgICAvLyBpZiBub3Qgcm9vdCwgaXQnbGwgYWx3YXlzIGhhdmUgYSBwYXJlbnRcbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIGNvbnN0IHBsID0gdGhpcy4jcGFyZW50ID8gdGhpcy4jcGFyZW50LiNwYXJ0cy5sZW5ndGggOiAwO1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICByZXR1cm4gdGhpcy4jcGFyZW50SW5kZXggPT09IHBsIC0gMTtcbiAgICB9XG4gICAgY29weUluKHBhcnQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBwYXJ0ID09PSAnc3RyaW5nJylcbiAgICAgICAgICAgIHRoaXMucHVzaChwYXJ0KTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5wdXNoKHBhcnQuY2xvbmUodGhpcykpO1xuICAgIH1cbiAgICBjbG9uZShwYXJlbnQpIHtcbiAgICAgICAgY29uc3QgYyA9IG5ldyBBU1QodGhpcy50eXBlLCBwYXJlbnQpO1xuICAgICAgICBmb3IgKGNvbnN0IHAgb2YgdGhpcy4jcGFydHMpIHtcbiAgICAgICAgICAgIGMuY29weUluKHApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjO1xuICAgIH1cbiAgICBzdGF0aWMgI3BhcnNlQVNUKHN0ciwgYXN0LCBwb3MsIG9wdCkge1xuICAgICAgICBsZXQgZXNjYXBpbmcgPSBmYWxzZTtcbiAgICAgICAgbGV0IGluQnJhY2UgPSBmYWxzZTtcbiAgICAgICAgbGV0IGJyYWNlU3RhcnQgPSAtMTtcbiAgICAgICAgbGV0IGJyYWNlTmVnID0gZmFsc2U7XG4gICAgICAgIGlmIChhc3QudHlwZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gb3V0c2lkZSBvZiBhIGV4dGdsb2IsIGFwcGVuZCB1bnRpbCB3ZSBmaW5kIGEgc3RhcnRcbiAgICAgICAgICAgIGxldCBpID0gcG9zO1xuICAgICAgICAgICAgbGV0IGFjYyA9ICcnO1xuICAgICAgICAgICAgd2hpbGUgKGkgPCBzdHIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYyA9IHN0ci5jaGFyQXQoaSsrKTtcbiAgICAgICAgICAgICAgICAvLyBzdGlsbCBhY2N1bXVsYXRlIGVzY2FwZXMgYXQgdGhpcyBwb2ludCwgYnV0IHdlIGRvIGlnbm9yZVxuICAgICAgICAgICAgICAgIC8vIHN0YXJ0cyB0aGF0IGFyZSBlc2NhcGVkXG4gICAgICAgICAgICAgICAgaWYgKGVzY2FwaW5nIHx8IGMgPT09ICdcXFxcJykge1xuICAgICAgICAgICAgICAgICAgICBlc2NhcGluZyA9ICFlc2NhcGluZztcbiAgICAgICAgICAgICAgICAgICAgYWNjICs9IGM7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaW5CcmFjZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PT0gYnJhY2VTdGFydCArIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID09PSAnXicgfHwgYyA9PT0gJyEnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJhY2VOZWcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGMgPT09ICddJyAmJiAhKGkgPT09IGJyYWNlU3RhcnQgKyAyICYmIGJyYWNlTmVnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5CcmFjZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFjYyArPSBjO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoYyA9PT0gJ1snKSB7XG4gICAgICAgICAgICAgICAgICAgIGluQnJhY2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmFjZVN0YXJ0ID0gaTtcbiAgICAgICAgICAgICAgICAgICAgYnJhY2VOZWcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgYWNjICs9IGM7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIW9wdC5ub2V4dCAmJiBpc0V4dGdsb2JUeXBlKGMpICYmIHN0ci5jaGFyQXQoaSkgPT09ICcoJykge1xuICAgICAgICAgICAgICAgICAgICBhc3QucHVzaChhY2MpO1xuICAgICAgICAgICAgICAgICAgICBhY2MgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXh0ID0gbmV3IEFTVChjLCBhc3QpO1xuICAgICAgICAgICAgICAgICAgICBpID0gQVNULiNwYXJzZUFTVChzdHIsIGV4dCwgaSwgb3B0KTtcbiAgICAgICAgICAgICAgICAgICAgYXN0LnB1c2goZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFjYyArPSBjO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXN0LnB1c2goYWNjKTtcbiAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHNvbWUga2luZCBvZiBleHRnbG9iLCBwb3MgaXMgYXQgdGhlIChcbiAgICAgICAgLy8gZmluZCB0aGUgbmV4dCB8IG9yIClcbiAgICAgICAgbGV0IGkgPSBwb3MgKyAxO1xuICAgICAgICBsZXQgcGFydCA9IG5ldyBBU1QobnVsbCwgYXN0KTtcbiAgICAgICAgY29uc3QgcGFydHMgPSBbXTtcbiAgICAgICAgbGV0IGFjYyA9ICcnO1xuICAgICAgICB3aGlsZSAoaSA8IHN0ci5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBzdHIuY2hhckF0KGkrKyk7XG4gICAgICAgICAgICAvLyBzdGlsbCBhY2N1bXVsYXRlIGVzY2FwZXMgYXQgdGhpcyBwb2ludCwgYnV0IHdlIGRvIGlnbm9yZVxuICAgICAgICAgICAgLy8gc3RhcnRzIHRoYXQgYXJlIGVzY2FwZWRcbiAgICAgICAgICAgIGlmIChlc2NhcGluZyB8fCBjID09PSAnXFxcXCcpIHtcbiAgICAgICAgICAgICAgICBlc2NhcGluZyA9ICFlc2NhcGluZztcbiAgICAgICAgICAgICAgICBhY2MgKz0gYztcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpbkJyYWNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGkgPT09IGJyYWNlU3RhcnQgKyAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjID09PSAnXicgfHwgYyA9PT0gJyEnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmFjZU5lZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoYyA9PT0gJ10nICYmICEoaSA9PT0gYnJhY2VTdGFydCArIDIgJiYgYnJhY2VOZWcpKSB7XG4gICAgICAgICAgICAgICAgICAgIGluQnJhY2UgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYWNjICs9IGM7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjID09PSAnWycpIHtcbiAgICAgICAgICAgICAgICBpbkJyYWNlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmFjZVN0YXJ0ID0gaTtcbiAgICAgICAgICAgICAgICBicmFjZU5lZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGFjYyArPSBjO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzRXh0Z2xvYlR5cGUoYykgJiYgc3RyLmNoYXJBdChpKSA9PT0gJygnKSB7XG4gICAgICAgICAgICAgICAgcGFydC5wdXNoKGFjYyk7XG4gICAgICAgICAgICAgICAgYWNjID0gJyc7XG4gICAgICAgICAgICAgICAgY29uc3QgZXh0ID0gbmV3IEFTVChjLCBwYXJ0KTtcbiAgICAgICAgICAgICAgICBwYXJ0LnB1c2goZXh0KTtcbiAgICAgICAgICAgICAgICBpID0gQVNULiNwYXJzZUFTVChzdHIsIGV4dCwgaSwgb3B0KTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjID09PSAnfCcpIHtcbiAgICAgICAgICAgICAgICBwYXJ0LnB1c2goYWNjKTtcbiAgICAgICAgICAgICAgICBhY2MgPSAnJztcbiAgICAgICAgICAgICAgICBwYXJ0cy5wdXNoKHBhcnQpO1xuICAgICAgICAgICAgICAgIHBhcnQgPSBuZXcgQVNUKG51bGwsIGFzdCk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYyA9PT0gJyknKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFjYyA9PT0gJycgJiYgYXN0LiNwYXJ0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYXN0LiNlbXB0eUV4dCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHBhcnQucHVzaChhY2MpO1xuICAgICAgICAgICAgICAgIGFjYyA9ICcnO1xuICAgICAgICAgICAgICAgIGFzdC5wdXNoKC4uLnBhcnRzLCBwYXJ0KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFjYyArPSBjO1xuICAgICAgICB9XG4gICAgICAgIC8vIHVuZmluaXNoZWQgZXh0Z2xvYlxuICAgICAgICAvLyBpZiB3ZSBnb3QgaGVyZSwgaXQgd2FzIGEgbWFsZm9ybWVkIGV4dGdsb2IhIG5vdCBhbiBleHRnbG9iLCBidXRcbiAgICAgICAgLy8gbWF5YmUgc29tZXRoaW5nIGVsc2UgaW4gdGhlcmUuXG4gICAgICAgIGFzdC50eXBlID0gbnVsbDtcbiAgICAgICAgYXN0LiNoYXNNYWdpYyA9IHVuZGVmaW5lZDtcbiAgICAgICAgYXN0LiNwYXJ0cyA9IFtzdHIuc3Vic3RyaW5nKHBvcyAtIDEpXTtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxuICAgIHN0YXRpYyBmcm9tR2xvYihwYXR0ZXJuLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgYXN0ID0gbmV3IEFTVChudWxsLCB1bmRlZmluZWQsIG9wdGlvbnMpO1xuICAgICAgICBBU1QuI3BhcnNlQVNUKHBhdHRlcm4sIGFzdCwgMCwgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBhc3Q7XG4gICAgfVxuICAgIC8vIHJldHVybnMgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBpZiB0aGVyZSdzIG1hZ2ljLCBvciB0aGUgdW5lc2NhcGVkXG4gICAgLy8gc3RyaW5nIGlmIG5vdC5cbiAgICB0b01NUGF0dGVybigpIHtcbiAgICAgICAgLy8gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uIHJvb3RcbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIGlmICh0aGlzICE9PSB0aGlzLiNyb290KVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuI3Jvb3QudG9NTVBhdHRlcm4oKTtcbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgY29uc3QgZ2xvYiA9IHRoaXMudG9TdHJpbmcoKTtcbiAgICAgICAgY29uc3QgW3JlLCBib2R5LCBoYXNNYWdpYywgdWZsYWddID0gdGhpcy50b1JlZ0V4cFNvdXJjZSgpO1xuICAgICAgICAvLyBpZiB3ZSdyZSBpbiBub2Nhc2UgbW9kZSwgYW5kIG5vdCBub2Nhc2VNYWdpY09ubHksIHRoZW4gd2UgZG9cbiAgICAgICAgLy8gc3RpbGwgbmVlZCBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBpZiB3ZSBoYXZlIHRvIGNhc2UtaW5zZW5zaXRpdmVseVxuICAgICAgICAvLyBtYXRjaCBjYXBpdGFsL2xvd2VyY2FzZSBjaGFyYWN0ZXJzLlxuICAgICAgICBjb25zdCBhbnlNYWdpYyA9IGhhc01hZ2ljIHx8XG4gICAgICAgICAgICB0aGlzLiNoYXNNYWdpYyB8fFxuICAgICAgICAgICAgKHRoaXMuI29wdGlvbnMubm9jYXNlICYmXG4gICAgICAgICAgICAgICAgIXRoaXMuI29wdGlvbnMubm9jYXNlTWFnaWNPbmx5ICYmXG4gICAgICAgICAgICAgICAgZ2xvYi50b1VwcGVyQ2FzZSgpICE9PSBnbG9iLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICBpZiAoIWFueU1hZ2ljKSB7XG4gICAgICAgICAgICByZXR1cm4gYm9keTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmbGFncyA9ICh0aGlzLiNvcHRpb25zLm5vY2FzZSA/ICdpJyA6ICcnKSArICh1ZmxhZyA/ICd1JyA6ICcnKTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IFJlZ0V4cChgXiR7cmV9JGAsIGZsYWdzKSwge1xuICAgICAgICAgICAgX3NyYzogcmUsXG4gICAgICAgICAgICBfZ2xvYjogZ2xvYixcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGdldCBvcHRpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jb3B0aW9ucztcbiAgICB9XG4gICAgLy8gcmV0dXJucyB0aGUgc3RyaW5nIG1hdGNoLCB0aGUgcmVnZXhwIHNvdXJjZSwgd2hldGhlciB0aGVyZSdzIG1hZ2ljXG4gICAgLy8gaW4gdGhlIHJlZ2V4cCAoc28gYSByZWd1bGFyIGV4cHJlc3Npb24gaXMgcmVxdWlyZWQpIGFuZCB3aGV0aGVyIG9yXG4gICAgLy8gbm90IHRoZSB1ZmxhZyBpcyBuZWVkZWQgZm9yIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gKGZvciBwb3NpeCBjbGFzc2VzKVxuICAgIC8vIFRPRE86IGluc3RlYWQgb2YgaW5qZWN0aW5nIHRoZSBzdGFydC9lbmQgYXQgdGhpcyBwb2ludCwganVzdCByZXR1cm5cbiAgICAvLyB0aGUgQk9EWSBvZiB0aGUgcmVnZXhwLCBhbG9uZyB3aXRoIHRoZSBzdGFydC9lbmQgcG9ydGlvbnMgc3VpdGFibGVcbiAgICAvLyBmb3IgYmluZGluZyB0aGUgc3RhcnQvZW5kIGluIGVpdGhlciBhIGpvaW5lZCBmdWxsLXBhdGggbWFrZVJlIGNvbnRleHRcbiAgICAvLyAod2hlcmUgd2UgYmluZCB0byAoXnwvKSwgb3IgYSBzdGFuZGFsb25lIG1hdGNoUGFydCBjb250ZXh0ICh3aGVyZVxuICAgIC8vIHdlIGJpbmQgdG8gXiwgYW5kIG5vdCAvKS4gIE90aGVyd2lzZSBzbGFzaGVzIGdldCBkdXBlZCFcbiAgICAvL1xuICAgIC8vIEluIHBhcnQtbWF0Y2hpbmcgbW9kZSwgdGhlIHN0YXJ0IGlzOlxuICAgIC8vIC0gaWYgbm90IGlzU3RhcnQ6IG5vdGhpbmdcbiAgICAvLyAtIGlmIHRyYXZlcnNhbCBwb3NzaWJsZSwgYnV0IG5vdCBhbGxvd2VkOiBeKD8hXFwuXFwuPyQpXG4gICAgLy8gLSBpZiBkb3RzIGFsbG93ZWQgb3Igbm90IHBvc3NpYmxlOiBeXG4gICAgLy8gLSBpZiBkb3RzIHBvc3NpYmxlIGFuZCBub3QgYWxsb3dlZDogXig/IVxcLilcbiAgICAvLyBlbmQgaXM6XG4gICAgLy8gLSBpZiBub3QgaXNFbmQoKTogbm90aGluZ1xuICAgIC8vIC0gZWxzZTogJFxuICAgIC8vXG4gICAgLy8gSW4gZnVsbC1wYXRoIG1hdGNoaW5nIG1vZGUsIHdlIHB1dCB0aGUgc2xhc2ggYXQgdGhlIFNUQVJUIG9mIHRoZVxuICAgIC8vIHBhdHRlcm4sIHNvIHN0YXJ0IGlzOlxuICAgIC8vIC0gaWYgZmlyc3QgcGF0dGVybjogc2FtZSBhcyBwYXJ0LW1hdGNoaW5nIG1vZGVcbiAgICAvLyAtIGlmIG5vdCBpc1N0YXJ0KCk6IG5vdGhpbmdcbiAgICAvLyAtIGlmIHRyYXZlcnNhbCBwb3NzaWJsZSwgYnV0IG5vdCBhbGxvd2VkOiAvKD8hXFwuXFwuPyg/OiR8LykpXG4gICAgLy8gLSBpZiBkb3RzIGFsbG93ZWQgb3Igbm90IHBvc3NpYmxlOiAvXG4gICAgLy8gLSBpZiBkb3RzIHBvc3NpYmxlIGFuZCBub3QgYWxsb3dlZDogLyg/IVxcLilcbiAgICAvLyBlbmQgaXM6XG4gICAgLy8gLSBpZiBsYXN0IHBhdHRlcm4sIHNhbWUgYXMgcGFydC1tYXRjaGluZyBtb2RlXG4gICAgLy8gLSBlbHNlIG5vdGhpbmdcbiAgICAvL1xuICAgIC8vIEFsd2F5cyBwdXQgdGhlICg/OiR8Lykgb24gbmVnYXRlZCB0YWlscywgdGhvdWdoLCBiZWNhdXNlIHRoYXQgaGFzIHRvIGJlXG4gICAgLy8gdGhlcmUgdG8gYmluZCB0aGUgZW5kIG9mIHRoZSBuZWdhdGVkIHBhdHRlcm4gcG9ydGlvbiwgYW5kIGl0J3MgZWFzaWVyIHRvXG4gICAgLy8ganVzdCBzdGljayBpdCBpbiBub3cgcmF0aGVyIHRoYW4gdHJ5IHRvIGluamVjdCBpdCBsYXRlciBpbiB0aGUgbWlkZGxlIG9mXG4gICAgLy8gdGhlIHBhdHRlcm4uXG4gICAgLy9cbiAgICAvLyBXZSBjYW4ganVzdCBhbHdheXMgcmV0dXJuIHRoZSBzYW1lIGVuZCwgYW5kIGxlYXZlIGl0IHVwIHRvIHRoZSBjYWxsZXJcbiAgICAvLyB0byBrbm93IHdoZXRoZXIgaXQncyBnb2luZyB0byBiZSB1c2VkIGpvaW5lZCBvciBpbiBwYXJ0cy5cbiAgICAvLyBBbmQsIGlmIHRoZSBzdGFydCBpcyBhZGp1c3RlZCBzbGlnaHRseSwgY2FuIGRvIHRoZSBzYW1lIHRoZXJlOlxuICAgIC8vIC0gaWYgbm90IGlzU3RhcnQ6IG5vdGhpbmdcbiAgICAvLyAtIGlmIHRyYXZlcnNhbCBwb3NzaWJsZSwgYnV0IG5vdCBhbGxvd2VkOiAoPzovfF4pKD8hXFwuXFwuPyQpXG4gICAgLy8gLSBpZiBkb3RzIGFsbG93ZWQgb3Igbm90IHBvc3NpYmxlOiAoPzovfF4pXG4gICAgLy8gLSBpZiBkb3RzIHBvc3NpYmxlIGFuZCBub3QgYWxsb3dlZDogKD86L3xeKSg/IVxcLilcbiAgICAvL1xuICAgIC8vIEJ1dCBpdCdzIGJldHRlciB0byBoYXZlIGEgc2ltcGxlciBiaW5kaW5nIHdpdGhvdXQgYSBjb25kaXRpb25hbCwgZm9yXG4gICAgLy8gcGVyZm9ybWFuY2UsIHNvIHByb2JhYmx5IGJldHRlciB0byByZXR1cm4gYm90aCBzdGFydCBvcHRpb25zLlxuICAgIC8vXG4gICAgLy8gVGhlbiB0aGUgY2FsbGVyIGp1c3QgaWdub3JlcyB0aGUgZW5kIGlmIGl0J3Mgbm90IHRoZSBmaXJzdCBwYXR0ZXJuLFxuICAgIC8vIGFuZCB0aGUgc3RhcnQgYWx3YXlzIGdldHMgYXBwbGllZC5cbiAgICAvL1xuICAgIC8vIEJ1dCB0aGF0J3MgYWx3YXlzIGdvaW5nIHRvIGJlICQgaWYgaXQncyB0aGUgZW5kaW5nIHBhdHRlcm4sIG9yIG5vdGhpbmcsXG4gICAgLy8gc28gdGhlIGNhbGxlciBjYW4ganVzdCBhdHRhY2ggJCBhdCB0aGUgZW5kIG9mIHRoZSBwYXR0ZXJuIHdoZW4gYnVpbGRpbmcuXG4gICAgLy9cbiAgICAvLyBTbyB0aGUgdG9kbyBpczpcbiAgICAvLyAtIGJldHRlciBkZXRlY3Qgd2hhdCBraW5kIG9mIHN0YXJ0IGlzIG5lZWRlZFxuICAgIC8vIC0gcmV0dXJuIGJvdGggZmxhdm9ycyBvZiBzdGFydGluZyBwYXR0ZXJuXG4gICAgLy8gLSBhdHRhY2ggJCBhdCB0aGUgZW5kIG9mIHRoZSBwYXR0ZXJuIHdoZW4gY3JlYXRpbmcgdGhlIGFjdHVhbCBSZWdFeHBcbiAgICAvL1xuICAgIC8vIEFoLCBidXQgd2FpdCwgbm8sIHRoYXQgYWxsIG9ubHkgYXBwbGllcyB0byB0aGUgcm9vdCB3aGVuIHRoZSBmaXJzdCBwYXR0ZXJuXG4gICAgLy8gaXMgbm90IGFuIGV4dGdsb2IuIElmIHRoZSBmaXJzdCBwYXR0ZXJuIElTIGFuIGV4dGdsb2IsIHRoZW4gd2UgbmVlZCBhbGxcbiAgICAvLyB0aGF0IGRvdCBwcmV2ZW50aW9uIGJpeiB0byBsaXZlIGluIHRoZSBleHRnbG9iIHBvcnRpb25zLCBiZWNhdXNlIGVnXG4gICAgLy8gKygqfC54KikgY2FuIG1hdGNoIC54eSBidXQgbm90IC55eC5cbiAgICAvL1xuICAgIC8vIFNvLCByZXR1cm4gdGhlIHR3byBmbGF2b3JzIGlmIGl0J3MgI3Jvb3QgYW5kIHRoZSBmaXJzdCBjaGlsZCBpcyBub3QgYW5cbiAgICAvLyBBU1QsIG90aGVyd2lzZSBsZWF2ZSBpdCB0byB0aGUgY2hpbGQgQVNUIHRvIGhhbmRsZSBpdCwgYW5kIHRoZXJlLFxuICAgIC8vIHVzZSB0aGUgKD86XnwvKSBzdHlsZSBvZiBzdGFydCBiaW5kaW5nLlxuICAgIC8vXG4gICAgLy8gRXZlbiBzaW1wbGlmaWVkIGZ1cnRoZXI6XG4gICAgLy8gLSBTaW5jZSB0aGUgc3RhcnQgZm9yIGEgam9pbiBpcyBlZyAvKD8hXFwuKSBhbmQgdGhlIHN0YXJ0IGZvciBhIHBhcnRcbiAgICAvLyBpcyBeKD8hXFwuKSwgd2UgY2FuIGp1c3QgcHJlcGVuZCAoPyFcXC4pIHRvIHRoZSBwYXR0ZXJuIChlaXRoZXIgcm9vdFxuICAgIC8vIG9yIHN0YXJ0IG9yIHdoYXRldmVyKSBhbmQgcHJlcGVuZCBeIG9yIC8gYXQgdGhlIFJlZ2V4cCBjb25zdHJ1Y3Rpb24uXG4gICAgdG9SZWdFeHBTb3VyY2UoYWxsb3dEb3QpIHtcbiAgICAgICAgY29uc3QgZG90ID0gYWxsb3dEb3QgPz8gISF0aGlzLiNvcHRpb25zLmRvdDtcbiAgICAgICAgaWYgKHRoaXMuI3Jvb3QgPT09IHRoaXMpXG4gICAgICAgICAgICB0aGlzLiNmaWxsTmVncygpO1xuICAgICAgICBpZiAoIXRoaXMudHlwZSkge1xuICAgICAgICAgICAgY29uc3Qgbm9FbXB0eSA9IHRoaXMuaXNTdGFydCgpICYmIHRoaXMuaXNFbmQoKTtcbiAgICAgICAgICAgIGNvbnN0IHNyYyA9IHRoaXMuI3BhcnRzXG4gICAgICAgICAgICAgICAgLm1hcChwID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBbcmUsIF8sIGhhc01hZ2ljLCB1ZmxhZ10gPSB0eXBlb2YgcCA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgICAgPyBBU1QuI3BhcnNlR2xvYihwLCB0aGlzLiNoYXNNYWdpYywgbm9FbXB0eSlcbiAgICAgICAgICAgICAgICAgICAgOiBwLnRvUmVnRXhwU291cmNlKGFsbG93RG90KTtcbiAgICAgICAgICAgICAgICB0aGlzLiNoYXNNYWdpYyA9IHRoaXMuI2hhc01hZ2ljIHx8IGhhc01hZ2ljO1xuICAgICAgICAgICAgICAgIHRoaXMuI3VmbGFnID0gdGhpcy4jdWZsYWcgfHwgdWZsYWc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuam9pbignJyk7XG4gICAgICAgICAgICBsZXQgc3RhcnQgPSAnJztcbiAgICAgICAgICAgIGlmICh0aGlzLmlzU3RhcnQoKSkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy4jcGFydHNbMF0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgdGhlIHN0cmluZyB0aGF0IHdpbGwgbWF0Y2ggdGhlIHN0YXJ0IG9mIHRoZSBwYXR0ZXJuLFxuICAgICAgICAgICAgICAgICAgICAvLyBzbyB3ZSBuZWVkIHRvIHByb3RlY3QgYWdhaW5zdCBkb3RzIGFuZCBzdWNoLlxuICAgICAgICAgICAgICAgICAgICAvLyAnLicgYW5kICcuLicgY2Fubm90IG1hdGNoIHVubGVzcyB0aGUgcGF0dGVybiBpcyB0aGF0IGV4YWN0bHksXG4gICAgICAgICAgICAgICAgICAgIC8vIGV2ZW4gaWYgaXQgc3RhcnRzIHdpdGggLiBvciBkb3Q6dHJ1ZSBpcyBzZXQuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvdFRyYXZBbGxvd2VkID0gdGhpcy4jcGFydHMubGVuZ3RoID09PSAxICYmIGp1c3REb3RzLmhhcyh0aGlzLiNwYXJ0c1swXSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZG90VHJhdkFsbG93ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFwcyA9IGFkZFBhdHRlcm5TdGFydDtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIGlmIHdlIGhhdmUgYSBwb3NzaWJpbGl0eSBvZiBtYXRjaGluZyAuIG9yIC4uLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIHByZXZlbnQgdGhhdC5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5lZWROb1RyYXYgPSBcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRvdHMgYXJlIGFsbG93ZWQsIGFuZCB0aGUgcGF0dGVybiBzdGFydHMgd2l0aCBbIG9yIC5cbiAgICAgICAgICAgICAgICAgICAgICAgIChkb3QgJiYgYXBzLmhhcyhzcmMuY2hhckF0KDApKSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgcGF0dGVybiBzdGFydHMgd2l0aCBcXC4sIGFuZCB0aGVuIFsgb3IgLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzcmMuc3RhcnRzV2l0aCgnXFxcXC4nKSAmJiBhcHMuaGFzKHNyYy5jaGFyQXQoMikpKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBwYXR0ZXJuIHN0YXJ0cyB3aXRoIFxcLlxcLiwgYW5kIHRoZW4gWyBvciAuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNyYy5zdGFydHNXaXRoKCdcXFxcLlxcXFwuJykgJiYgYXBzLmhhcyhzcmMuY2hhckF0KDQpKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBubyBuZWVkIHRvIHByZXZlbnQgZG90cyBpZiBpdCBjYW4ndCBtYXRjaCBhIGRvdCwgb3IgaWYgYVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3ViLXBhdHRlcm4gd2lsbCBiZSBwcmV2ZW50aW5nIGl0IGFueXdheS5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5lZWROb0RvdCA9ICFkb3QgJiYgIWFsbG93RG90ICYmIGFwcy5oYXMoc3JjLmNoYXJBdCgwKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydCA9IG5lZWROb1RyYXYgPyBzdGFydE5vVHJhdmVyc2FsIDogbmVlZE5vRG90ID8gc3RhcnROb0RvdCA6ICcnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gYXBwZW5kIHRoZSBcImVuZCBvZiBwYXRoIHBvcnRpb25cIiBwYXR0ZXJuIHRvIG5lZ2F0aW9uIHRhaWxzXG4gICAgICAgICAgICBsZXQgZW5kID0gJyc7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0VuZCgpICYmXG4gICAgICAgICAgICAgICAgdGhpcy4jcm9vdC4jZmlsbGVkTmVncyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuI3BhcmVudD8udHlwZSA9PT0gJyEnKSB7XG4gICAgICAgICAgICAgICAgZW5kID0gJyg/OiR8XFxcXC8pJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGZpbmFsID0gc3RhcnQgKyBzcmMgKyBlbmQ7XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgIGZpbmFsLFxuICAgICAgICAgICAgICAgICgwLCB1bmVzY2FwZV9qc18xLnVuZXNjYXBlKShzcmMpLFxuICAgICAgICAgICAgICAgICh0aGlzLiNoYXNNYWdpYyA9ICEhdGhpcy4jaGFzTWFnaWMpLFxuICAgICAgICAgICAgICAgIHRoaXMuI3VmbGFnLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgICAgICAvLyBXZSBuZWVkIHRvIGNhbGN1bGF0ZSB0aGUgYm9keSAqdHdpY2UqIGlmIGl0J3MgYSByZXBlYXQgcGF0dGVyblxuICAgICAgICAvLyBhdCB0aGUgc3RhcnQsIG9uY2UgaW4gbm9kb3QgbW9kZSwgdGhlbiBhZ2FpbiBpbiBkb3QgbW9kZSwgc28gYVxuICAgICAgICAvLyBwYXR0ZXJuIGxpa2UgKig/KSBjYW4gbWF0Y2ggJ3gueSdcbiAgICAgICAgY29uc3QgcmVwZWF0ZWQgPSB0aGlzLnR5cGUgPT09ICcqJyB8fCB0aGlzLnR5cGUgPT09ICcrJztcbiAgICAgICAgLy8gc29tZSBraW5kIG9mIGV4dGdsb2JcbiAgICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLnR5cGUgPT09ICchJyA/ICcoPzooPyEoPzonIDogJyg/Oic7XG4gICAgICAgIGxldCBib2R5ID0gdGhpcy4jcGFydHNUb1JlZ0V4cChkb3QpO1xuICAgICAgICBpZiAodGhpcy5pc1N0YXJ0KCkgJiYgdGhpcy5pc0VuZCgpICYmICFib2R5ICYmIHRoaXMudHlwZSAhPT0gJyEnKSB7XG4gICAgICAgICAgICAvLyBpbnZhbGlkIGV4dGdsb2IsIGhhcyB0byBhdCBsZWFzdCBiZSAqc29tZXRoaW5nKiBwcmVzZW50LCBpZiBpdCdzXG4gICAgICAgICAgICAvLyB0aGUgZW50aXJlIHBhdGggcG9ydGlvbi5cbiAgICAgICAgICAgIGNvbnN0IHMgPSB0aGlzLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB0aGlzLiNwYXJ0cyA9IFtzXTtcbiAgICAgICAgICAgIHRoaXMudHlwZSA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLiNoYXNNYWdpYyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHJldHVybiBbcywgKDAsIHVuZXNjYXBlX2pzXzEudW5lc2NhcGUpKHRoaXMudG9TdHJpbmcoKSksIGZhbHNlLCBmYWxzZV07XG4gICAgICAgIH1cbiAgICAgICAgLy8gWFhYIGFic3RyYWN0IG91dCB0aGlzIG1hcCBtZXRob2RcbiAgICAgICAgbGV0IGJvZHlEb3RBbGxvd2VkID0gIXJlcGVhdGVkIHx8IGFsbG93RG90IHx8IGRvdCB8fCAhc3RhcnROb0RvdFxuICAgICAgICAgICAgPyAnJ1xuICAgICAgICAgICAgOiB0aGlzLiNwYXJ0c1RvUmVnRXhwKHRydWUpO1xuICAgICAgICBpZiAoYm9keURvdEFsbG93ZWQgPT09IGJvZHkpIHtcbiAgICAgICAgICAgIGJvZHlEb3RBbGxvd2VkID0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJvZHlEb3RBbGxvd2VkKSB7XG4gICAgICAgICAgICBib2R5ID0gYCg/OiR7Ym9keX0pKD86JHtib2R5RG90QWxsb3dlZH0pKj9gO1xuICAgICAgICB9XG4gICAgICAgIC8vIGFuIGVtcHR5ICEoKSBpcyBleGFjdGx5IGVxdWl2YWxlbnQgdG8gYSBzdGFyTm9FbXB0eVxuICAgICAgICBsZXQgZmluYWwgPSAnJztcbiAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJyEnICYmIHRoaXMuI2VtcHR5RXh0KSB7XG4gICAgICAgICAgICBmaW5hbCA9ICh0aGlzLmlzU3RhcnQoKSAmJiAhZG90ID8gc3RhcnROb0RvdCA6ICcnKSArIHN0YXJOb0VtcHR5O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgY2xvc2UgPSB0aGlzLnR5cGUgPT09ICchJ1xuICAgICAgICAgICAgICAgID8gLy8gISgpIG11c3QgbWF0Y2ggc29tZXRoaW5nLGJ1dCAhKHgpIGNhbiBtYXRjaCAnJ1xuICAgICAgICAgICAgICAgICAgICAnKSknICtcbiAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLmlzU3RhcnQoKSAmJiAhZG90ICYmICFhbGxvd0RvdCA/IHN0YXJ0Tm9Eb3QgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhciArXG4gICAgICAgICAgICAgICAgICAgICAgICAnKSdcbiAgICAgICAgICAgICAgICA6IHRoaXMudHlwZSA9PT0gJ0AnXG4gICAgICAgICAgICAgICAgICAgID8gJyknXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy50eXBlID09PSAnPydcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJyk/J1xuICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLnR5cGUgPT09ICcrJyAmJiBib2R5RG90QWxsb3dlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJyknXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLnR5cGUgPT09ICcqJyAmJiBib2R5RG90QWxsb3dlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGApP2BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBgKSR7dGhpcy50eXBlfWA7XG4gICAgICAgICAgICBmaW5hbCA9IHN0YXJ0ICsgYm9keSArIGNsb3NlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBmaW5hbCxcbiAgICAgICAgICAgICgwLCB1bmVzY2FwZV9qc18xLnVuZXNjYXBlKShib2R5KSxcbiAgICAgICAgICAgICh0aGlzLiNoYXNNYWdpYyA9ICEhdGhpcy4jaGFzTWFnaWMpLFxuICAgICAgICAgICAgdGhpcy4jdWZsYWcsXG4gICAgICAgIF07XG4gICAgfVxuICAgICNwYXJ0c1RvUmVnRXhwKGRvdCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcGFydHNcbiAgICAgICAgICAgIC5tYXAocCA9PiB7XG4gICAgICAgICAgICAvLyBleHRnbG9iIEFTVHMgc2hvdWxkIG9ubHkgY29udGFpbiBwYXJlbnQgQVNUc1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICBpZiAodHlwZW9mIHAgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzdHJpbmcgdHlwZSBpbiBleHRnbG9iIGFzdD8/Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgLy8gY2FuIGlnbm9yZSBoYXNNYWdpYywgYmVjYXVzZSBleHRnbG9icyBhcmUgYWxyZWFkeSBhbHdheXMgbWFnaWNcbiAgICAgICAgICAgIGNvbnN0IFtyZSwgXywgX2hhc01hZ2ljLCB1ZmxhZ10gPSBwLnRvUmVnRXhwU291cmNlKGRvdCk7XG4gICAgICAgICAgICB0aGlzLiN1ZmxhZyA9IHRoaXMuI3VmbGFnIHx8IHVmbGFnO1xuICAgICAgICAgICAgcmV0dXJuIHJlO1xuICAgICAgICB9KVxuICAgICAgICAgICAgLmZpbHRlcihwID0+ICEodGhpcy5pc1N0YXJ0KCkgJiYgdGhpcy5pc0VuZCgpKSB8fCAhIXApXG4gICAgICAgICAgICAuam9pbignfCcpO1xuICAgIH1cbiAgICBzdGF0aWMgI3BhcnNlR2xvYihnbG9iLCBoYXNNYWdpYywgbm9FbXB0eSA9IGZhbHNlKSB7XG4gICAgICAgIGxldCBlc2NhcGluZyA9IGZhbHNlO1xuICAgICAgICBsZXQgcmUgPSAnJztcbiAgICAgICAgbGV0IHVmbGFnID0gZmFsc2U7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZ2xvYi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgYyA9IGdsb2IuY2hhckF0KGkpO1xuICAgICAgICAgICAgaWYgKGVzY2FwaW5nKSB7XG4gICAgICAgICAgICAgICAgZXNjYXBpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZSArPSAocmVTcGVjaWFscy5oYXMoYykgPyAnXFxcXCcgOiAnJykgKyBjO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGMgPT09ICdcXFxcJykge1xuICAgICAgICAgICAgICAgIGlmIChpID09PSBnbG9iLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmUgKz0gJ1xcXFxcXFxcJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVzY2FwaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYyA9PT0gJ1snKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgW3NyYywgbmVlZFVmbGFnLCBjb25zdW1lZCwgbWFnaWNdID0gKDAsIGJyYWNlX2V4cHJlc3Npb25zX2pzXzEucGFyc2VDbGFzcykoZ2xvYiwgaSk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbnN1bWVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlICs9IHNyYztcbiAgICAgICAgICAgICAgICAgICAgdWZsYWcgPSB1ZmxhZyB8fCBuZWVkVWZsYWc7XG4gICAgICAgICAgICAgICAgICAgIGkgKz0gY29uc3VtZWQgLSAxO1xuICAgICAgICAgICAgICAgICAgICBoYXNNYWdpYyA9IGhhc01hZ2ljIHx8IG1hZ2ljO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYyA9PT0gJyonKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vRW1wdHkgJiYgZ2xvYiA9PT0gJyonKVxuICAgICAgICAgICAgICAgICAgICByZSArPSBzdGFyTm9FbXB0eTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHJlICs9IHN0YXI7XG4gICAgICAgICAgICAgICAgaGFzTWFnaWMgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGMgPT09ICc/Jykge1xuICAgICAgICAgICAgICAgIHJlICs9IHFtYXJrO1xuICAgICAgICAgICAgICAgIGhhc01hZ2ljID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlICs9IHJlZ0V4cEVzY2FwZShjKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW3JlLCAoMCwgdW5lc2NhcGVfanNfMS51bmVzY2FwZSkoZ2xvYiksICEhaGFzTWFnaWMsIHVmbGFnXTtcbiAgICB9XG59XG5leHBvcnRzLkFTVCA9IEFTVDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFzdC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5lc2NhcGUgPSB2b2lkIDA7XG4vKipcbiAqIEVzY2FwZSBhbGwgbWFnaWMgY2hhcmFjdGVycyBpbiBhIGdsb2IgcGF0dGVybi5cbiAqXG4gKiBJZiB0aGUge0BsaW5rIHdpbmRvd3NQYXRoc05vRXNjYXBlIHwgR2xvYk9wdGlvbnMud2luZG93c1BhdGhzTm9Fc2NhcGV9XG4gKiBvcHRpb24gaXMgdXNlZCwgdGhlbiBjaGFyYWN0ZXJzIGFyZSBlc2NhcGVkIGJ5IHdyYXBwaW5nIGluIGBbXWAsIGJlY2F1c2VcbiAqIGEgbWFnaWMgY2hhcmFjdGVyIHdyYXBwZWQgaW4gYSBjaGFyYWN0ZXIgY2xhc3MgY2FuIG9ubHkgYmUgc2F0aXNmaWVkIGJ5XG4gKiB0aGF0IGV4YWN0IGNoYXJhY3Rlci4gIEluIHRoaXMgbW9kZSwgYFxcYCBpcyBfbm90XyBlc2NhcGVkLCBiZWNhdXNlIGl0IGlzXG4gKiBub3QgaW50ZXJwcmV0ZWQgYXMgYSBtYWdpYyBjaGFyYWN0ZXIsIGJ1dCBpbnN0ZWFkIGFzIGEgcGF0aCBzZXBhcmF0b3IuXG4gKi9cbmNvbnN0IGVzY2FwZSA9IChzLCB7IHdpbmRvd3NQYXRoc05vRXNjYXBlID0gZmFsc2UsIH0gPSB7fSkgPT4ge1xuICAgIC8vIGRvbid0IG5lZWQgdG8gZXNjYXBlICtAISBiZWNhdXNlIHdlIGVzY2FwZSB0aGUgcGFyZW5zXG4gICAgLy8gdGhhdCBtYWtlIHRob3NlIG1hZ2ljLCBhbmQgZXNjYXBpbmcgISBhcyBbIV0gaXNuJ3QgdmFsaWQsXG4gICAgLy8gYmVjYXVzZSBbIV1dIGlzIGEgdmFsaWQgZ2xvYiBjbGFzcyBtZWFuaW5nIG5vdCAnXScuXG4gICAgcmV0dXJuIHdpbmRvd3NQYXRoc05vRXNjYXBlXG4gICAgICAgID8gcy5yZXBsYWNlKC9bPyooKVtcXF1dL2csICdbJCZdJylcbiAgICAgICAgOiBzLnJlcGxhY2UoL1s/KigpW1xcXVxcXFxdL2csICdcXFxcJCYnKTtcbn07XG5leHBvcnRzLmVzY2FwZSA9IGVzY2FwZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVzY2FwZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy51bmVzY2FwZSA9IGV4cG9ydHMuZXNjYXBlID0gZXhwb3J0cy5BU1QgPSBleHBvcnRzLk1pbmltYXRjaCA9IGV4cG9ydHMubWF0Y2ggPSBleHBvcnRzLm1ha2VSZSA9IGV4cG9ydHMuYnJhY2VFeHBhbmQgPSBleHBvcnRzLmRlZmF1bHRzID0gZXhwb3J0cy5maWx0ZXIgPSBleHBvcnRzLkdMT0JTVEFSID0gZXhwb3J0cy5zZXAgPSBleHBvcnRzLm1pbmltYXRjaCA9IHZvaWQgMDtcbmNvbnN0IGJyYWNlX2V4cGFuc2lvbl8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJicmFjZS1leHBhbnNpb25cIikpO1xuY29uc3QgYXNzZXJ0X3ZhbGlkX3BhdHRlcm5fanNfMSA9IHJlcXVpcmUoXCIuL2Fzc2VydC12YWxpZC1wYXR0ZXJuLmpzXCIpO1xuY29uc3QgYXN0X2pzXzEgPSByZXF1aXJlKFwiLi9hc3QuanNcIik7XG5jb25zdCBlc2NhcGVfanNfMSA9IHJlcXVpcmUoXCIuL2VzY2FwZS5qc1wiKTtcbmNvbnN0IHVuZXNjYXBlX2pzXzEgPSByZXF1aXJlKFwiLi91bmVzY2FwZS5qc1wiKTtcbmNvbnN0IG1pbmltYXRjaCA9IChwLCBwYXR0ZXJuLCBvcHRpb25zID0ge30pID0+IHtcbiAgICAoMCwgYXNzZXJ0X3ZhbGlkX3BhdHRlcm5fanNfMS5hc3NlcnRWYWxpZFBhdHRlcm4pKHBhdHRlcm4pO1xuICAgIC8vIHNob3J0Y3V0OiBjb21tZW50cyBtYXRjaCBub3RoaW5nLlxuICAgIGlmICghb3B0aW9ucy5ub2NvbW1lbnQgJiYgcGF0dGVybi5jaGFyQXQoMCkgPT09ICcjJykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBuZXcgTWluaW1hdGNoKHBhdHRlcm4sIG9wdGlvbnMpLm1hdGNoKHApO1xufTtcbmV4cG9ydHMubWluaW1hdGNoID0gbWluaW1hdGNoO1xuLy8gT3B0aW1pemVkIGNoZWNraW5nIGZvciB0aGUgbW9zdCBjb21tb24gZ2xvYiBwYXR0ZXJucy5cbmNvbnN0IHN0YXJEb3RFeHRSRSA9IC9eXFwqKyhbXitAIT9cXCpcXFtcXChdKikkLztcbmNvbnN0IHN0YXJEb3RFeHRUZXN0ID0gKGV4dCkgPT4gKGYpID0+ICFmLnN0YXJ0c1dpdGgoJy4nKSAmJiBmLmVuZHNXaXRoKGV4dCk7XG5jb25zdCBzdGFyRG90RXh0VGVzdERvdCA9IChleHQpID0+IChmKSA9PiBmLmVuZHNXaXRoKGV4dCk7XG5jb25zdCBzdGFyRG90RXh0VGVzdE5vY2FzZSA9IChleHQpID0+IHtcbiAgICBleHQgPSBleHQudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gKGYpID0+ICFmLnN0YXJ0c1dpdGgoJy4nKSAmJiBmLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoZXh0KTtcbn07XG5jb25zdCBzdGFyRG90RXh0VGVzdE5vY2FzZURvdCA9IChleHQpID0+IHtcbiAgICBleHQgPSBleHQudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gKGYpID0+IGYudG9Mb3dlckNhc2UoKS5lbmRzV2l0aChleHQpO1xufTtcbmNvbnN0IHN0YXJEb3RTdGFyUkUgPSAvXlxcKitcXC5cXCorJC87XG5jb25zdCBzdGFyRG90U3RhclRlc3QgPSAoZikgPT4gIWYuc3RhcnRzV2l0aCgnLicpICYmIGYuaW5jbHVkZXMoJy4nKTtcbmNvbnN0IHN0YXJEb3RTdGFyVGVzdERvdCA9IChmKSA9PiBmICE9PSAnLicgJiYgZiAhPT0gJy4uJyAmJiBmLmluY2x1ZGVzKCcuJyk7XG5jb25zdCBkb3RTdGFyUkUgPSAvXlxcLlxcKiskLztcbmNvbnN0IGRvdFN0YXJUZXN0ID0gKGYpID0+IGYgIT09ICcuJyAmJiBmICE9PSAnLi4nICYmIGYuc3RhcnRzV2l0aCgnLicpO1xuY29uc3Qgc3RhclJFID0gL15cXCorJC87XG5jb25zdCBzdGFyVGVzdCA9IChmKSA9PiBmLmxlbmd0aCAhPT0gMCAmJiAhZi5zdGFydHNXaXRoKCcuJyk7XG5jb25zdCBzdGFyVGVzdERvdCA9IChmKSA9PiBmLmxlbmd0aCAhPT0gMCAmJiBmICE9PSAnLicgJiYgZiAhPT0gJy4uJztcbmNvbnN0IHFtYXJrc1JFID0gL15cXD8rKFteK0AhP1xcKlxcW1xcKF0qKT8kLztcbmNvbnN0IHFtYXJrc1Rlc3ROb2Nhc2UgPSAoWyQwLCBleHQgPSAnJ10pID0+IHtcbiAgICBjb25zdCBub2V4dCA9IHFtYXJrc1Rlc3ROb0V4dChbJDBdKTtcbiAgICBpZiAoIWV4dClcbiAgICAgICAgcmV0dXJuIG5vZXh0O1xuICAgIGV4dCA9IGV4dC50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiAoZikgPT4gbm9leHQoZikgJiYgZi50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKGV4dCk7XG59O1xuY29uc3QgcW1hcmtzVGVzdE5vY2FzZURvdCA9IChbJDAsIGV4dCA9ICcnXSkgPT4ge1xuICAgIGNvbnN0IG5vZXh0ID0gcW1hcmtzVGVzdE5vRXh0RG90KFskMF0pO1xuICAgIGlmICghZXh0KVxuICAgICAgICByZXR1cm4gbm9leHQ7XG4gICAgZXh0ID0gZXh0LnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuIChmKSA9PiBub2V4dChmKSAmJiBmLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoZXh0KTtcbn07XG5jb25zdCBxbWFya3NUZXN0RG90ID0gKFskMCwgZXh0ID0gJyddKSA9PiB7XG4gICAgY29uc3Qgbm9leHQgPSBxbWFya3NUZXN0Tm9FeHREb3QoWyQwXSk7XG4gICAgcmV0dXJuICFleHQgPyBub2V4dCA6IChmKSA9PiBub2V4dChmKSAmJiBmLmVuZHNXaXRoKGV4dCk7XG59O1xuY29uc3QgcW1hcmtzVGVzdCA9IChbJDAsIGV4dCA9ICcnXSkgPT4ge1xuICAgIGNvbnN0IG5vZXh0ID0gcW1hcmtzVGVzdE5vRXh0KFskMF0pO1xuICAgIHJldHVybiAhZXh0ID8gbm9leHQgOiAoZikgPT4gbm9leHQoZikgJiYgZi5lbmRzV2l0aChleHQpO1xufTtcbmNvbnN0IHFtYXJrc1Rlc3ROb0V4dCA9IChbJDBdKSA9PiB7XG4gICAgY29uc3QgbGVuID0gJDAubGVuZ3RoO1xuICAgIHJldHVybiAoZikgPT4gZi5sZW5ndGggPT09IGxlbiAmJiAhZi5zdGFydHNXaXRoKCcuJyk7XG59O1xuY29uc3QgcW1hcmtzVGVzdE5vRXh0RG90ID0gKFskMF0pID0+IHtcbiAgICBjb25zdCBsZW4gPSAkMC5sZW5ndGg7XG4gICAgcmV0dXJuIChmKSA9PiBmLmxlbmd0aCA9PT0gbGVuICYmIGYgIT09ICcuJyAmJiBmICE9PSAnLi4nO1xufTtcbi8qIGM4IGlnbm9yZSBzdGFydCAqL1xuY29uc3QgZGVmYXVsdFBsYXRmb3JtID0gKHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JyAmJiBwcm9jZXNzXG4gICAgPyAodHlwZW9mIHByb2Nlc3MuZW52ID09PSAnb2JqZWN0JyAmJlxuICAgICAgICBwcm9jZXNzLmVudiAmJlxuICAgICAgICBwcm9jZXNzLmVudi5fX01JTklNQVRDSF9URVNUSU5HX1BMQVRGT1JNX18pIHx8XG4gICAgICAgIHByb2Nlc3MucGxhdGZvcm1cbiAgICA6ICdwb3NpeCcpO1xuY29uc3QgcGF0aCA9IHtcbiAgICB3aW4zMjogeyBzZXA6ICdcXFxcJyB9LFxuICAgIHBvc2l4OiB7IHNlcDogJy8nIH0sXG59O1xuLyogYzggaWdub3JlIHN0b3AgKi9cbmV4cG9ydHMuc2VwID0gZGVmYXVsdFBsYXRmb3JtID09PSAnd2luMzInID8gcGF0aC53aW4zMi5zZXAgOiBwYXRoLnBvc2l4LnNlcDtcbmV4cG9ydHMubWluaW1hdGNoLnNlcCA9IGV4cG9ydHMuc2VwO1xuZXhwb3J0cy5HTE9CU1RBUiA9IFN5bWJvbCgnZ2xvYnN0YXIgKionKTtcbmV4cG9ydHMubWluaW1hdGNoLkdMT0JTVEFSID0gZXhwb3J0cy5HTE9CU1RBUjtcbi8vIGFueSBzaW5nbGUgdGhpbmcgb3RoZXIgdGhhbiAvXG4vLyBkb24ndCBuZWVkIHRvIGVzY2FwZSAvIHdoZW4gdXNpbmcgbmV3IFJlZ0V4cCgpXG5jb25zdCBxbWFyayA9ICdbXi9dJztcbi8vICogPT4gYW55IG51bWJlciBvZiBjaGFyYWN0ZXJzXG5jb25zdCBzdGFyID0gcW1hcmsgKyAnKj8nO1xuLy8gKiogd2hlbiBkb3RzIGFyZSBhbGxvd2VkLiAgQW55dGhpbmcgZ29lcywgZXhjZXB0IC4uIGFuZCAuXG4vLyBub3QgKF4gb3IgLyBmb2xsb3dlZCBieSBvbmUgb3IgdHdvIGRvdHMgZm9sbG93ZWQgYnkgJCBvciAvKSxcbi8vIGZvbGxvd2VkIGJ5IGFueXRoaW5nLCBhbnkgbnVtYmVyIG9mIHRpbWVzLlxuY29uc3QgdHdvU3RhckRvdCA9ICcoPzooPyEoPzpcXFxcL3xeKSg/OlxcXFwuezEsMn0pKCR8XFxcXC8pKS4pKj8nO1xuLy8gbm90IGEgXiBvciAvIGZvbGxvd2VkIGJ5IGEgZG90LFxuLy8gZm9sbG93ZWQgYnkgYW55dGhpbmcsIGFueSBudW1iZXIgb2YgdGltZXMuXG5jb25zdCB0d29TdGFyTm9Eb3QgPSAnKD86KD8hKD86XFxcXC98XilcXFxcLikuKSo/JztcbmNvbnN0IGZpbHRlciA9IChwYXR0ZXJuLCBvcHRpb25zID0ge30pID0+IChwKSA9PiAoMCwgZXhwb3J0cy5taW5pbWF0Y2gpKHAsIHBhdHRlcm4sIG9wdGlvbnMpO1xuZXhwb3J0cy5maWx0ZXIgPSBmaWx0ZXI7XG5leHBvcnRzLm1pbmltYXRjaC5maWx0ZXIgPSBleHBvcnRzLmZpbHRlcjtcbmNvbnN0IGV4dCA9IChhLCBiID0ge30pID0+IE9iamVjdC5hc3NpZ24oe30sIGEsIGIpO1xuY29uc3QgZGVmYXVsdHMgPSAoZGVmKSA9PiB7XG4gICAgaWYgKCFkZWYgfHwgdHlwZW9mIGRlZiAhPT0gJ29iamVjdCcgfHwgIU9iamVjdC5rZXlzKGRlZikubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBleHBvcnRzLm1pbmltYXRjaDtcbiAgICB9XG4gICAgY29uc3Qgb3JpZyA9IGV4cG9ydHMubWluaW1hdGNoO1xuICAgIGNvbnN0IG0gPSAocCwgcGF0dGVybiwgb3B0aW9ucyA9IHt9KSA9PiBvcmlnKHAsIHBhdHRlcm4sIGV4dChkZWYsIG9wdGlvbnMpKTtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihtLCB7XG4gICAgICAgIE1pbmltYXRjaDogY2xhc3MgTWluaW1hdGNoIGV4dGVuZHMgb3JpZy5NaW5pbWF0Y2gge1xuICAgICAgICAgICAgY29uc3RydWN0b3IocGF0dGVybiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgICAgICAgICAgc3VwZXIocGF0dGVybiwgZXh0KGRlZiwgb3B0aW9ucykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhdGljIGRlZmF1bHRzKG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZy5kZWZhdWx0cyhleHQoZGVmLCBvcHRpb25zKSkuTWluaW1hdGNoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBBU1Q6IGNsYXNzIEFTVCBleHRlbmRzIG9yaWcuQVNUIHtcbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICAgICAgY29uc3RydWN0b3IodHlwZSwgcGFyZW50LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgICAgICAgICBzdXBlcih0eXBlLCBwYXJlbnQsIGV4dChkZWYsIG9wdGlvbnMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICBzdGF0aWMgZnJvbUdsb2IocGF0dGVybiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWcuQVNULmZyb21HbG9iKHBhdHRlcm4sIGV4dChkZWYsIG9wdGlvbnMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdW5lc2NhcGU6IChzLCBvcHRpb25zID0ge30pID0+IG9yaWcudW5lc2NhcGUocywgZXh0KGRlZiwgb3B0aW9ucykpLFxuICAgICAgICBlc2NhcGU6IChzLCBvcHRpb25zID0ge30pID0+IG9yaWcuZXNjYXBlKHMsIGV4dChkZWYsIG9wdGlvbnMpKSxcbiAgICAgICAgZmlsdGVyOiAocGF0dGVybiwgb3B0aW9ucyA9IHt9KSA9PiBvcmlnLmZpbHRlcihwYXR0ZXJuLCBleHQoZGVmLCBvcHRpb25zKSksXG4gICAgICAgIGRlZmF1bHRzOiAob3B0aW9ucykgPT4gb3JpZy5kZWZhdWx0cyhleHQoZGVmLCBvcHRpb25zKSksXG4gICAgICAgIG1ha2VSZTogKHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkgPT4gb3JpZy5tYWtlUmUocGF0dGVybiwgZXh0KGRlZiwgb3B0aW9ucykpLFxuICAgICAgICBicmFjZUV4cGFuZDogKHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkgPT4gb3JpZy5icmFjZUV4cGFuZChwYXR0ZXJuLCBleHQoZGVmLCBvcHRpb25zKSksXG4gICAgICAgIG1hdGNoOiAobGlzdCwgcGF0dGVybiwgb3B0aW9ucyA9IHt9KSA9PiBvcmlnLm1hdGNoKGxpc3QsIHBhdHRlcm4sIGV4dChkZWYsIG9wdGlvbnMpKSxcbiAgICAgICAgc2VwOiBvcmlnLnNlcCxcbiAgICAgICAgR0xPQlNUQVI6IGV4cG9ydHMuR0xPQlNUQVIsXG4gICAgfSk7XG59O1xuZXhwb3J0cy5kZWZhdWx0cyA9IGRlZmF1bHRzO1xuZXhwb3J0cy5taW5pbWF0Y2guZGVmYXVsdHMgPSBleHBvcnRzLmRlZmF1bHRzO1xuLy8gQnJhY2UgZXhwYW5zaW9uOlxuLy8gYXtiLGN9ZCAtPiBhYmQgYWNkXG4vLyBhe2IsfWMgLT4gYWJjIGFjXG4vLyBhezAuLjN9ZCAtPiBhMGQgYTFkIGEyZCBhM2Rcbi8vIGF7Yixje2QsZX1mfWcgLT4gYWJnIGFjZGZnIGFjZWZnXG4vLyBhe2IsY31ke2UsZn1nIC0+IGFiZGVnIGFjZGVnIGFiZGVnIGFiZGZnXG4vL1xuLy8gSW52YWxpZCBzZXRzIGFyZSBub3QgZXhwYW5kZWQuXG4vLyBhezIuLn1iIC0+IGF7Mi4ufWJcbi8vIGF7Yn1jIC0+IGF7Yn1jXG5jb25zdCBicmFjZUV4cGFuZCA9IChwYXR0ZXJuLCBvcHRpb25zID0ge30pID0+IHtcbiAgICAoMCwgYXNzZXJ0X3ZhbGlkX3BhdHRlcm5fanNfMS5hc3NlcnRWYWxpZFBhdHRlcm4pKHBhdHRlcm4pO1xuICAgIC8vIFRoYW5rcyB0byBZZXRpbmcgTGkgPGh0dHBzOi8vZ2l0aHViLmNvbS95ZXRpbmdsaT4gZm9yXG4gICAgLy8gaW1wcm92aW5nIHRoaXMgcmVnZXhwIHRvIGF2b2lkIGEgUmVET1MgdnVsbmVyYWJpbGl0eS5cbiAgICBpZiAob3B0aW9ucy5ub2JyYWNlIHx8ICEvXFx7KD86KD8hXFx7KS4pKlxcfS8udGVzdChwYXR0ZXJuKSkge1xuICAgICAgICAvLyBzaG9ydGN1dC4gbm8gbmVlZCB0byBleHBhbmQuXG4gICAgICAgIHJldHVybiBbcGF0dGVybl07XG4gICAgfVxuICAgIHJldHVybiAoMCwgYnJhY2VfZXhwYW5zaW9uXzEuZGVmYXVsdCkocGF0dGVybik7XG59O1xuZXhwb3J0cy5icmFjZUV4cGFuZCA9IGJyYWNlRXhwYW5kO1xuZXhwb3J0cy5taW5pbWF0Y2guYnJhY2VFeHBhbmQgPSBleHBvcnRzLmJyYWNlRXhwYW5kO1xuLy8gcGFyc2UgYSBjb21wb25lbnQgb2YgdGhlIGV4cGFuZGVkIHNldC5cbi8vIEF0IHRoaXMgcG9pbnQsIG5vIHBhdHRlcm4gbWF5IGNvbnRhaW4gXCIvXCIgaW4gaXRcbi8vIHNvIHdlJ3JlIGdvaW5nIHRvIHJldHVybiBhIDJkIGFycmF5LCB3aGVyZSBlYWNoIGVudHJ5IGlzIHRoZSBmdWxsXG4vLyBwYXR0ZXJuLCBzcGxpdCBvbiAnLycsIGFuZCB0aGVuIHR1cm5lZCBpbnRvIGEgcmVndWxhciBleHByZXNzaW9uLlxuLy8gQSByZWdleHAgaXMgbWFkZSBhdCB0aGUgZW5kIHdoaWNoIGpvaW5zIGVhY2ggYXJyYXkgd2l0aCBhblxuLy8gZXNjYXBlZCAvLCBhbmQgYW5vdGhlciBmdWxsIG9uZSB3aGljaCBqb2lucyBlYWNoIHJlZ2V4cCB3aXRoIHwuXG4vL1xuLy8gRm9sbG93aW5nIHRoZSBsZWFkIG9mIEJhc2ggNC4xLCBub3RlIHRoYXQgXCIqKlwiIG9ubHkgaGFzIHNwZWNpYWwgbWVhbmluZ1xuLy8gd2hlbiBpdCBpcyB0aGUgKm9ubHkqIHRoaW5nIGluIGEgcGF0aCBwb3J0aW9uLiAgT3RoZXJ3aXNlLCBhbnkgc2VyaWVzXG4vLyBvZiAqIGlzIGVxdWl2YWxlbnQgdG8gYSBzaW5nbGUgKi4gIEdsb2JzdGFyIGJlaGF2aW9yIGlzIGVuYWJsZWQgYnlcbi8vIGRlZmF1bHQsIGFuZCBjYW4gYmUgZGlzYWJsZWQgYnkgc2V0dGluZyBvcHRpb25zLm5vZ2xvYnN0YXIuXG5jb25zdCBtYWtlUmUgPSAocGF0dGVybiwgb3B0aW9ucyA9IHt9KSA9PiBuZXcgTWluaW1hdGNoKHBhdHRlcm4sIG9wdGlvbnMpLm1ha2VSZSgpO1xuZXhwb3J0cy5tYWtlUmUgPSBtYWtlUmU7XG5leHBvcnRzLm1pbmltYXRjaC5tYWtlUmUgPSBleHBvcnRzLm1ha2VSZTtcbmNvbnN0IG1hdGNoID0gKGxpc3QsIHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkgPT4ge1xuICAgIGNvbnN0IG1tID0gbmV3IE1pbmltYXRjaChwYXR0ZXJuLCBvcHRpb25zKTtcbiAgICBsaXN0ID0gbGlzdC5maWx0ZXIoZiA9PiBtbS5tYXRjaChmKSk7XG4gICAgaWYgKG1tLm9wdGlvbnMubm9udWxsICYmICFsaXN0Lmxlbmd0aCkge1xuICAgICAgICBsaXN0LnB1c2gocGF0dGVybik7XG4gICAgfVxuICAgIHJldHVybiBsaXN0O1xufTtcbmV4cG9ydHMubWF0Y2ggPSBtYXRjaDtcbmV4cG9ydHMubWluaW1hdGNoLm1hdGNoID0gZXhwb3J0cy5tYXRjaDtcbi8vIHJlcGxhY2Ugc3R1ZmYgbGlrZSBcXCogd2l0aCAqXG5jb25zdCBnbG9iTWFnaWMgPSAvWz8qXXxbK0AhXVxcKC4qP1xcKXxcXFt8XFxdLztcbmNvbnN0IHJlZ0V4cEVzY2FwZSA9IChzKSA9PiBzLnJlcGxhY2UoL1stW1xcXXt9KCkqKz8uLFxcXFxeJHwjXFxzXS9nLCAnXFxcXCQmJyk7XG5jbGFzcyBNaW5pbWF0Y2gge1xuICAgIG9wdGlvbnM7XG4gICAgc2V0O1xuICAgIHBhdHRlcm47XG4gICAgd2luZG93c1BhdGhzTm9Fc2NhcGU7XG4gICAgbm9uZWdhdGU7XG4gICAgbmVnYXRlO1xuICAgIGNvbW1lbnQ7XG4gICAgZW1wdHk7XG4gICAgcHJlc2VydmVNdWx0aXBsZVNsYXNoZXM7XG4gICAgcGFydGlhbDtcbiAgICBnbG9iU2V0O1xuICAgIGdsb2JQYXJ0cztcbiAgICBub2Nhc2U7XG4gICAgaXNXaW5kb3dzO1xuICAgIHBsYXRmb3JtO1xuICAgIHdpbmRvd3NOb01hZ2ljUm9vdDtcbiAgICByZWdleHA7XG4gICAgY29uc3RydWN0b3IocGF0dGVybiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgICgwLCBhc3NlcnRfdmFsaWRfcGF0dGVybl9qc18xLmFzc2VydFZhbGlkUGF0dGVybikocGF0dGVybik7XG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICB0aGlzLnBhdHRlcm4gPSBwYXR0ZXJuO1xuICAgICAgICB0aGlzLnBsYXRmb3JtID0gb3B0aW9ucy5wbGF0Zm9ybSB8fCBkZWZhdWx0UGxhdGZvcm07XG4gICAgICAgIHRoaXMuaXNXaW5kb3dzID0gdGhpcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJztcbiAgICAgICAgdGhpcy53aW5kb3dzUGF0aHNOb0VzY2FwZSA9XG4gICAgICAgICAgICAhIW9wdGlvbnMud2luZG93c1BhdGhzTm9Fc2NhcGUgfHwgb3B0aW9ucy5hbGxvd1dpbmRvd3NFc2NhcGUgPT09IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy53aW5kb3dzUGF0aHNOb0VzY2FwZSkge1xuICAgICAgICAgICAgdGhpcy5wYXR0ZXJuID0gdGhpcy5wYXR0ZXJuLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByZXNlcnZlTXVsdGlwbGVTbGFzaGVzID0gISFvcHRpb25zLnByZXNlcnZlTXVsdGlwbGVTbGFzaGVzO1xuICAgICAgICB0aGlzLnJlZ2V4cCA9IG51bGw7XG4gICAgICAgIHRoaXMubmVnYXRlID0gZmFsc2U7XG4gICAgICAgIHRoaXMubm9uZWdhdGUgPSAhIW9wdGlvbnMubm9uZWdhdGU7XG4gICAgICAgIHRoaXMuY29tbWVudCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmVtcHR5ID0gZmFsc2U7XG4gICAgICAgIHRoaXMucGFydGlhbCA9ICEhb3B0aW9ucy5wYXJ0aWFsO1xuICAgICAgICB0aGlzLm5vY2FzZSA9ICEhdGhpcy5vcHRpb25zLm5vY2FzZTtcbiAgICAgICAgdGhpcy53aW5kb3dzTm9NYWdpY1Jvb3QgPVxuICAgICAgICAgICAgb3B0aW9ucy53aW5kb3dzTm9NYWdpY1Jvb3QgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgID8gb3B0aW9ucy53aW5kb3dzTm9NYWdpY1Jvb3RcbiAgICAgICAgICAgICAgICA6ICEhKHRoaXMuaXNXaW5kb3dzICYmIHRoaXMubm9jYXNlKTtcbiAgICAgICAgdGhpcy5nbG9iU2V0ID0gW107XG4gICAgICAgIHRoaXMuZ2xvYlBhcnRzID0gW107XG4gICAgICAgIHRoaXMuc2V0ID0gW107XG4gICAgICAgIC8vIG1ha2UgdGhlIHNldCBvZiByZWdleHBzIGV0Yy5cbiAgICAgICAgdGhpcy5tYWtlKCk7XG4gICAgfVxuICAgIGhhc01hZ2ljKCkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLm1hZ2ljYWxCcmFjZXMgJiYgdGhpcy5zZXQubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIHRoaXMuc2V0KSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBhcnQgb2YgcGF0dGVybikge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcGFydCAhPT0gJ3N0cmluZycpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZGVidWcoLi4uXykgeyB9XG4gICAgbWFrZSgpIHtcbiAgICAgICAgY29uc3QgcGF0dGVybiA9IHRoaXMucGF0dGVybjtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgLy8gZW1wdHkgcGF0dGVybnMgYW5kIGNvbW1lbnRzIG1hdGNoIG5vdGhpbmcuXG4gICAgICAgIGlmICghb3B0aW9ucy5ub2NvbW1lbnQgJiYgcGF0dGVybi5jaGFyQXQoMCkgPT09ICcjJykge1xuICAgICAgICAgICAgdGhpcy5jb21tZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXBhdHRlcm4pIHtcbiAgICAgICAgICAgIHRoaXMuZW1wdHkgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHN0ZXAgMTogZmlndXJlIG91dCBuZWdhdGlvbiwgZXRjLlxuICAgICAgICB0aGlzLnBhcnNlTmVnYXRlKCk7XG4gICAgICAgIC8vIHN0ZXAgMjogZXhwYW5kIGJyYWNlc1xuICAgICAgICB0aGlzLmdsb2JTZXQgPSBbLi4ubmV3IFNldCh0aGlzLmJyYWNlRXhwYW5kKCkpXTtcbiAgICAgICAgaWYgKG9wdGlvbnMuZGVidWcpIHtcbiAgICAgICAgICAgIHRoaXMuZGVidWcgPSAoLi4uYXJncykgPT4gY29uc29sZS5lcnJvciguLi5hcmdzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRlYnVnKHRoaXMucGF0dGVybiwgdGhpcy5nbG9iU2V0KTtcbiAgICAgICAgLy8gc3RlcCAzOiBub3cgd2UgaGF2ZSBhIHNldCwgc28gdHVybiBlYWNoIG9uZSBpbnRvIGEgc2VyaWVzIG9mXG4gICAgICAgIC8vIHBhdGgtcG9ydGlvbiBtYXRjaGluZyBwYXR0ZXJucy5cbiAgICAgICAgLy8gVGhlc2Ugd2lsbCBiZSByZWdleHBzLCBleGNlcHQgaW4gdGhlIGNhc2Ugb2YgXCIqKlwiLCB3aGljaCBpc1xuICAgICAgICAvLyBzZXQgdG8gdGhlIEdMT0JTVEFSIG9iamVjdCBmb3IgZ2xvYnN0YXIgYmVoYXZpb3IsXG4gICAgICAgIC8vIGFuZCB3aWxsIG5vdCBjb250YWluIGFueSAvIGNoYXJhY3RlcnNcbiAgICAgICAgLy9cbiAgICAgICAgLy8gRmlyc3QsIHdlIHByZXByb2Nlc3MgdG8gbWFrZSB0aGUgZ2xvYiBwYXR0ZXJuIHNldHMgYSBiaXQgc2ltcGxlclxuICAgICAgICAvLyBhbmQgZGVkdXBlZC4gIFRoZXJlIGFyZSBzb21lIHBlcmYta2lsbGluZyBwYXR0ZXJucyB0aGF0IGNhbiBjYXVzZVxuICAgICAgICAvLyBwcm9ibGVtcyB3aXRoIGEgZ2xvYiB3YWxrLCBidXQgd2UgY2FuIHNpbXBsaWZ5IHRoZW0gZG93biBhIGJpdC5cbiAgICAgICAgY29uc3QgcmF3R2xvYlBhcnRzID0gdGhpcy5nbG9iU2V0Lm1hcChzID0+IHRoaXMuc2xhc2hTcGxpdChzKSk7XG4gICAgICAgIHRoaXMuZ2xvYlBhcnRzID0gdGhpcy5wcmVwcm9jZXNzKHJhd0dsb2JQYXJ0cyk7XG4gICAgICAgIHRoaXMuZGVidWcodGhpcy5wYXR0ZXJuLCB0aGlzLmdsb2JQYXJ0cyk7XG4gICAgICAgIC8vIGdsb2IgLS0+IHJlZ2V4cHNcbiAgICAgICAgbGV0IHNldCA9IHRoaXMuZ2xvYlBhcnRzLm1hcCgocywgXywgX18pID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzV2luZG93cyAmJiB0aGlzLndpbmRvd3NOb01hZ2ljUm9vdCkge1xuICAgICAgICAgICAgICAgIC8vIGNoZWNrIGlmIGl0J3MgYSBkcml2ZSBvciB1bmMgcGF0aC5cbiAgICAgICAgICAgICAgICBjb25zdCBpc1VOQyA9IHNbMF0gPT09ICcnICYmXG4gICAgICAgICAgICAgICAgICAgIHNbMV0gPT09ICcnICYmXG4gICAgICAgICAgICAgICAgICAgIChzWzJdID09PSAnPycgfHwgIWdsb2JNYWdpYy50ZXN0KHNbMl0pKSAmJlxuICAgICAgICAgICAgICAgICAgICAhZ2xvYk1hZ2ljLnRlc3Qoc1szXSk7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNEcml2ZSA9IC9eW2Etel06L2kudGVzdChzWzBdKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNVTkMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsuLi5zLnNsaWNlKDAsIDQpLCAuLi5zLnNsaWNlKDQpLm1hcChzcyA9PiB0aGlzLnBhcnNlKHNzKSldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChpc0RyaXZlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbc1swXSwgLi4ucy5zbGljZSgxKS5tYXAoc3MgPT4gdGhpcy5wYXJzZShzcykpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcy5tYXAoc3MgPT4gdGhpcy5wYXJzZShzcykpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kZWJ1Zyh0aGlzLnBhdHRlcm4sIHNldCk7XG4gICAgICAgIC8vIGZpbHRlciBvdXQgZXZlcnl0aGluZyB0aGF0IGRpZG4ndCBjb21waWxlIHByb3Blcmx5LlxuICAgICAgICB0aGlzLnNldCA9IHNldC5maWx0ZXIocyA9PiBzLmluZGV4T2YoZmFsc2UpID09PSAtMSk7XG4gICAgICAgIC8vIGRvIG5vdCB0cmVhdCB0aGUgPyBpbiBVTkMgcGF0aHMgYXMgbWFnaWNcbiAgICAgICAgaWYgKHRoaXMuaXNXaW5kb3dzKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2V0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcCA9IHRoaXMuc2V0W2ldO1xuICAgICAgICAgICAgICAgIGlmIChwWzBdID09PSAnJyAmJlxuICAgICAgICAgICAgICAgICAgICBwWzFdID09PSAnJyAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdsb2JQYXJ0c1tpXVsyXSA9PT0gJz8nICYmXG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBwWzNdID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgICAgICAgICAvXlthLXpdOiQvaS50ZXN0KHBbM10pKSB7XG4gICAgICAgICAgICAgICAgICAgIHBbMl0gPSAnPyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGVidWcodGhpcy5wYXR0ZXJuLCB0aGlzLnNldCk7XG4gICAgfVxuICAgIC8vIHZhcmlvdXMgdHJhbnNmb3JtcyB0byBlcXVpdmFsZW50IHBhdHRlcm4gc2V0cyB0aGF0IGFyZVxuICAgIC8vIGZhc3RlciB0byBwcm9jZXNzIGluIGEgZmlsZXN5c3RlbSB3YWxrLiAgVGhlIGdvYWwgaXMgdG9cbiAgICAvLyBlbGltaW5hdGUgd2hhdCB3ZSBjYW4sIGFuZCBwdXNoIGFsbCAqKiBwYXR0ZXJucyBhcyBmYXJcbiAgICAvLyB0byB0aGUgcmlnaHQgYXMgcG9zc2libGUsIGV2ZW4gaWYgaXQgaW5jcmVhc2VzIHRoZSBudW1iZXJcbiAgICAvLyBvZiBwYXR0ZXJucyB0aGF0IHdlIGhhdmUgdG8gcHJvY2Vzcy5cbiAgICBwcmVwcm9jZXNzKGdsb2JQYXJ0cykge1xuICAgICAgICAvLyBpZiB3ZSdyZSBub3QgaW4gZ2xvYnN0YXIgbW9kZSwgdGhlbiB0dXJuIGFsbCAqKiBpbnRvICpcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5ub2dsb2JzdGFyKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGdsb2JQYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgZ2xvYlBhcnRzW2ldLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChnbG9iUGFydHNbaV1bal0gPT09ICcqKicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JQYXJ0c1tpXVtqXSA9ICcqJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IG9wdGltaXphdGlvbkxldmVsID0gMSB9ID0gdGhpcy5vcHRpb25zO1xuICAgICAgICBpZiAob3B0aW1pemF0aW9uTGV2ZWwgPj0gMikge1xuICAgICAgICAgICAgLy8gYWdncmVzc2l2ZSBvcHRpbWl6YXRpb24gZm9yIHRoZSBwdXJwb3NlIG9mIGZzIHdhbGtpbmdcbiAgICAgICAgICAgIGdsb2JQYXJ0cyA9IHRoaXMuZmlyc3RQaGFzZVByZVByb2Nlc3MoZ2xvYlBhcnRzKTtcbiAgICAgICAgICAgIGdsb2JQYXJ0cyA9IHRoaXMuc2Vjb25kUGhhc2VQcmVQcm9jZXNzKGdsb2JQYXJ0cyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAob3B0aW1pemF0aW9uTGV2ZWwgPj0gMSkge1xuICAgICAgICAgICAgLy8ganVzdCBiYXNpYyBvcHRpbWl6YXRpb25zIHRvIHJlbW92ZSBzb21lIC4uIHBhcnRzXG4gICAgICAgICAgICBnbG9iUGFydHMgPSB0aGlzLmxldmVsT25lT3B0aW1pemUoZ2xvYlBhcnRzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIGp1c3QgY29sbGFwc2UgbXVsdGlwbGUgKiogcG9ydGlvbnMgaW50byBvbmVcbiAgICAgICAgICAgIGdsb2JQYXJ0cyA9IHRoaXMuYWRqYXNjZW50R2xvYnN0YXJPcHRpbWl6ZShnbG9iUGFydHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBnbG9iUGFydHM7XG4gICAgfVxuICAgIC8vIGp1c3QgZ2V0IHJpZCBvZiBhZGphc2NlbnQgKiogcG9ydGlvbnNcbiAgICBhZGphc2NlbnRHbG9ic3Rhck9wdGltaXplKGdsb2JQYXJ0cykge1xuICAgICAgICByZXR1cm4gZ2xvYlBhcnRzLm1hcChwYXJ0cyA9PiB7XG4gICAgICAgICAgICBsZXQgZ3MgPSAtMTtcbiAgICAgICAgICAgIHdoaWxlICgtMSAhPT0gKGdzID0gcGFydHMuaW5kZXhPZignKionLCBncyArIDEpKSkge1xuICAgICAgICAgICAgICAgIGxldCBpID0gZ3M7XG4gICAgICAgICAgICAgICAgd2hpbGUgKHBhcnRzW2kgKyAxXSA9PT0gJyoqJykge1xuICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpICE9PSBncykge1xuICAgICAgICAgICAgICAgICAgICBwYXJ0cy5zcGxpY2UoZ3MsIGkgLSBncyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHBhcnRzO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gZ2V0IHJpZCBvZiBhZGphc2NlbnQgKiogYW5kIHJlc29sdmUgLi4gcG9ydGlvbnNcbiAgICBsZXZlbE9uZU9wdGltaXplKGdsb2JQYXJ0cykge1xuICAgICAgICByZXR1cm4gZ2xvYlBhcnRzLm1hcChwYXJ0cyA9PiB7XG4gICAgICAgICAgICBwYXJ0cyA9IHBhcnRzLnJlZHVjZSgoc2V0LCBwYXJ0KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldiA9IHNldFtzZXQubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgaWYgKHBhcnQgPT09ICcqKicgJiYgcHJldiA9PT0gJyoqJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocGFydCA9PT0gJy4uJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAocHJldiAmJiBwcmV2ICE9PSAnLi4nICYmIHByZXYgIT09ICcuJyAmJiBwcmV2ICE9PSAnKionKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNldC5wdXNoKHBhcnQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBzZXQ7XG4gICAgICAgICAgICB9LCBbXSk7XG4gICAgICAgICAgICByZXR1cm4gcGFydHMubGVuZ3RoID09PSAwID8gWycnXSA6IHBhcnRzO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgbGV2ZWxUd29GaWxlT3B0aW1pemUocGFydHMpIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHBhcnRzKSkge1xuICAgICAgICAgICAgcGFydHMgPSB0aGlzLnNsYXNoU3BsaXQocGFydHMpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBkaWRTb21ldGhpbmcgPSBmYWxzZTtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgZGlkU29tZXRoaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAvLyA8cHJlPi88ZT4vPHJlc3Q+IC0+IDxwcmU+LzxyZXN0PlxuICAgICAgICAgICAgaWYgKCF0aGlzLnByZXNlcnZlTXVsdGlwbGVTbGFzaGVzKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBwYXJ0cy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcCA9IHBhcnRzW2ldO1xuICAgICAgICAgICAgICAgICAgICAvLyBkb24ndCBzcXVlZXplIG91dCBVTkMgcGF0dGVybnNcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IDEgJiYgcCA9PT0gJycgJiYgcGFydHNbMF0gPT09ICcnKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwID09PSAnLicgfHwgcCA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpZFNvbWV0aGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpLS07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHBhcnRzWzBdID09PSAnLicgJiZcbiAgICAgICAgICAgICAgICAgICAgcGFydHMubGVuZ3RoID09PSAyICYmXG4gICAgICAgICAgICAgICAgICAgIChwYXJ0c1sxXSA9PT0gJy4nIHx8IHBhcnRzWzFdID09PSAnJykpIHtcbiAgICAgICAgICAgICAgICAgICAgZGlkU29tZXRoaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcGFydHMucG9wKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gPHByZT4vPHA+Ly4uLzxyZXN0PiAtPiA8cHJlPi88cmVzdD5cbiAgICAgICAgICAgIGxldCBkZCA9IDA7XG4gICAgICAgICAgICB3aGlsZSAoLTEgIT09IChkZCA9IHBhcnRzLmluZGV4T2YoJy4uJywgZGQgKyAxKSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwID0gcGFydHNbZGQgLSAxXTtcbiAgICAgICAgICAgICAgICBpZiAocCAmJiBwICE9PSAnLicgJiYgcCAhPT0gJy4uJyAmJiBwICE9PSAnKionKSB7XG4gICAgICAgICAgICAgICAgICAgIGRpZFNvbWV0aGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHBhcnRzLnNwbGljZShkZCAtIDEsIDIpO1xuICAgICAgICAgICAgICAgICAgICBkZCAtPSAyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSB3aGlsZSAoZGlkU29tZXRoaW5nKTtcbiAgICAgICAgcmV0dXJuIHBhcnRzLmxlbmd0aCA9PT0gMCA/IFsnJ10gOiBwYXJ0cztcbiAgICB9XG4gICAgLy8gRmlyc3QgcGhhc2U6IHNpbmdsZS1wYXR0ZXJuIHByb2Nlc3NpbmdcbiAgICAvLyA8cHJlPiBpcyAxIG9yIG1vcmUgcG9ydGlvbnNcbiAgICAvLyA8cmVzdD4gaXMgMSBvciBtb3JlIHBvcnRpb25zXG4gICAgLy8gPHA+IGlzIGFueSBwb3J0aW9uIG90aGVyIHRoYW4gLiwgLi4sICcnLCBvciAqKlxuICAgIC8vIDxlPiBpcyAuIG9yICcnXG4gICAgLy9cbiAgICAvLyAqKi8uLiBpcyAqYnJ1dGFsKiBmb3IgZmlsZXN5c3RlbSB3YWxraW5nIHBlcmZvcm1hbmNlLCBiZWNhdXNlXG4gICAgLy8gaXQgZWZmZWN0aXZlbHkgcmVzZXRzIHRoZSByZWN1cnNpdmUgd2FsayBlYWNoIHRpbWUgaXQgb2NjdXJzLFxuICAgIC8vIGFuZCAqKiBjYW5ub3QgYmUgcmVkdWNlZCBvdXQgYnkgYSAuLiBwYXR0ZXJuIHBhcnQgbGlrZSBhIHJlZ2V4cFxuICAgIC8vIG9yIG1vc3Qgc3RyaW5ncyAob3RoZXIgdGhhbiAuLiwgLiwgYW5kICcnKSBjYW4gYmUuXG4gICAgLy9cbiAgICAvLyA8cHJlPi8qKi8uLi88cD4vPHA+LzxyZXN0PiAtPiB7PHByZT4vLi4vPHA+LzxwPi88cmVzdD4sPHByZT4vKiovPHA+LzxwPi88cmVzdD59XG4gICAgLy8gPHByZT4vPGU+LzxyZXN0PiAtPiA8cHJlPi88cmVzdD5cbiAgICAvLyA8cHJlPi88cD4vLi4vPHJlc3Q+IC0+IDxwcmU+LzxyZXN0PlxuICAgIC8vICoqLyoqLzxyZXN0PiAtPiAqKi88cmVzdD5cbiAgICAvL1xuICAgIC8vICoqLyovPHJlc3Q+IC0+ICovKiovPHJlc3Q+IDw9PSBub3QgdmFsaWQgYmVjYXVzZSAqKiBkb2Vzbid0IGZvbGxvd1xuICAgIC8vIHRoaXMgV09VTEQgYmUgYWxsb3dlZCBpZiAqKiBkaWQgZm9sbG93IHN5bWxpbmtzLCBvciAqIGRpZG4ndFxuICAgIGZpcnN0UGhhc2VQcmVQcm9jZXNzKGdsb2JQYXJ0cykge1xuICAgICAgICBsZXQgZGlkU29tZXRoaW5nID0gZmFsc2U7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGRpZFNvbWV0aGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgLy8gPHByZT4vKiovLi4vPHA+LzxwPi88cmVzdD4gLT4gezxwcmU+Ly4uLzxwPi88cD4vPHJlc3Q+LDxwcmU+LyoqLzxwPi88cD4vPHJlc3Q+fVxuICAgICAgICAgICAgZm9yIChsZXQgcGFydHMgb2YgZ2xvYlBhcnRzKSB7XG4gICAgICAgICAgICAgICAgbGV0IGdzID0gLTE7XG4gICAgICAgICAgICAgICAgd2hpbGUgKC0xICE9PSAoZ3MgPSBwYXJ0cy5pbmRleE9mKCcqKicsIGdzICsgMSkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBnc3MgPSBncztcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHBhcnRzW2dzcyArIDFdID09PSAnKionKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyA8cHJlPi8qKi8qKi88cmVzdD4gLT4gPHByZT4vKiovPHJlc3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICBnc3MrKztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBlZywgaWYgZ3MgaXMgMiBhbmQgZ3NzIGlzIDQsIHRoYXQgbWVhbnMgd2UgaGF2ZSAzICoqXG4gICAgICAgICAgICAgICAgICAgIC8vIHBhcnRzLCBhbmQgY2FuIHJlbW92ZSAyIG9mIHRoZW0uXG4gICAgICAgICAgICAgICAgICAgIGlmIChnc3MgPiBncykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFydHMuc3BsaWNlKGdzICsgMSwgZ3NzIC0gZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGxldCBuZXh0ID0gcGFydHNbZ3MgKyAxXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcCA9IHBhcnRzW2dzICsgMl07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHAyID0gcGFydHNbZ3MgKyAzXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQgIT09ICcuLicpXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBwID09PSAnLicgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHAgPT09ICcuLicgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICFwMiB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgcDIgPT09ICcuJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgcDIgPT09ICcuLicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGRpZFNvbWV0aGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIC8vIGVkaXQgcGFydHMgaW4gcGxhY2UsIGFuZCBwdXNoIHRoZSBuZXcgb25lXG4gICAgICAgICAgICAgICAgICAgIHBhcnRzLnNwbGljZShncywgMSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG90aGVyID0gcGFydHMuc2xpY2UoMCk7XG4gICAgICAgICAgICAgICAgICAgIG90aGVyW2dzXSA9ICcqKic7XG4gICAgICAgICAgICAgICAgICAgIGdsb2JQYXJ0cy5wdXNoKG90aGVyKTtcbiAgICAgICAgICAgICAgICAgICAgZ3MtLTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gPHByZT4vPGU+LzxyZXN0PiAtPiA8cHJlPi88cmVzdD5cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMucHJlc2VydmVNdWx0aXBsZVNsYXNoZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBwYXJ0cy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHAgPSBwYXJ0c1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRvbid0IHNxdWVlemUgb3V0IFVOQyBwYXR0ZXJuc1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IDEgJiYgcCA9PT0gJycgJiYgcGFydHNbMF0gPT09ICcnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHAgPT09ICcuJyB8fCBwID09PSAnJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZFNvbWV0aGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGktLTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAocGFydHNbMF0gPT09ICcuJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgcGFydHMubGVuZ3RoID09PSAyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAocGFydHNbMV0gPT09ICcuJyB8fCBwYXJ0c1sxXSA9PT0gJycpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaWRTb21ldGhpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFydHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gPHByZT4vPHA+Ly4uLzxyZXN0PiAtPiA8cHJlPi88cmVzdD5cbiAgICAgICAgICAgICAgICBsZXQgZGQgPSAwO1xuICAgICAgICAgICAgICAgIHdoaWxlICgtMSAhPT0gKGRkID0gcGFydHMuaW5kZXhPZignLi4nLCBkZCArIDEpKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwID0gcGFydHNbZGQgLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHAgJiYgcCAhPT0gJy4nICYmIHAgIT09ICcuLicgJiYgcCAhPT0gJyoqJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlkU29tZXRoaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5lZWREb3QgPSBkZCA9PT0gMSAmJiBwYXJ0c1tkZCArIDFdID09PSAnKionO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3BsaW4gPSBuZWVkRG90ID8gWycuJ10gOiBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRzLnNwbGljZShkZCAtIDEsIDIsIC4uLnNwbGluKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJ0cy5sZW5ndGggPT09IDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydHMucHVzaCgnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZCAtPSAyO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IHdoaWxlIChkaWRTb21ldGhpbmcpO1xuICAgICAgICByZXR1cm4gZ2xvYlBhcnRzO1xuICAgIH1cbiAgICAvLyBzZWNvbmQgcGhhc2U6IG11bHRpLXBhdHRlcm4gZGVkdXBlc1xuICAgIC8vIHs8cHJlPi8qLzxyZXN0Piw8cHJlPi88cD4vPHJlc3Q+fSAtPiA8cHJlPi8qLzxyZXN0PlxuICAgIC8vIHs8cHJlPi88cmVzdD4sPHByZT4vPHJlc3Q+fSAtPiA8cHJlPi88cmVzdD5cbiAgICAvLyB7PHByZT4vKiovPHJlc3Q+LDxwcmU+LzxyZXN0Pn0gLT4gPHByZT4vKiovPHJlc3Q+XG4gICAgLy9cbiAgICAvLyB7PHByZT4vKiovPHJlc3Q+LDxwcmU+LyoqLzxwPi88cmVzdD59IC0+IDxwcmU+LyoqLzxyZXN0PlxuICAgIC8vIF4tLSBub3QgdmFsaWQgYmVjYXVzZSAqKiBkb2Vucyd0IGZvbGxvdyBzeW1saW5rc1xuICAgIHNlY29uZFBoYXNlUHJlUHJvY2VzcyhnbG9iUGFydHMpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBnbG9iUGFydHMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCBnbG9iUGFydHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtYXRjaGVkID0gdGhpcy5wYXJ0c01hdGNoKGdsb2JQYXJ0c1tpXSwgZ2xvYlBhcnRzW2pdLCAhdGhpcy5wcmVzZXJ2ZU11bHRpcGxlU2xhc2hlcyk7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgZ2xvYlBhcnRzW2ldID0gW107XG4gICAgICAgICAgICAgICAgICAgIGdsb2JQYXJ0c1tqXSA9IG1hdGNoZWQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2xvYlBhcnRzLmZpbHRlcihncyA9PiBncy5sZW5ndGgpO1xuICAgIH1cbiAgICBwYXJ0c01hdGNoKGEsIGIsIGVtcHR5R1NNYXRjaCA9IGZhbHNlKSB7XG4gICAgICAgIGxldCBhaSA9IDA7XG4gICAgICAgIGxldCBiaSA9IDA7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgbGV0IHdoaWNoID0gJyc7XG4gICAgICAgIHdoaWxlIChhaSA8IGEubGVuZ3RoICYmIGJpIDwgYi5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChhW2FpXSA9PT0gYltiaV0pIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh3aGljaCA9PT0gJ2InID8gYltiaV0gOiBhW2FpXSk7XG4gICAgICAgICAgICAgICAgYWkrKztcbiAgICAgICAgICAgICAgICBiaSsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZW1wdHlHU01hdGNoICYmIGFbYWldID09PSAnKionICYmIGJbYmldID09PSBhW2FpICsgMV0pIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChhW2FpXSk7XG4gICAgICAgICAgICAgICAgYWkrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGVtcHR5R1NNYXRjaCAmJiBiW2JpXSA9PT0gJyoqJyAmJiBhW2FpXSA9PT0gYltiaSArIDFdKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goYltiaV0pO1xuICAgICAgICAgICAgICAgIGJpKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChhW2FpXSA9PT0gJyonICYmXG4gICAgICAgICAgICAgICAgYltiaV0gJiZcbiAgICAgICAgICAgICAgICAodGhpcy5vcHRpb25zLmRvdCB8fCAhYltiaV0uc3RhcnRzV2l0aCgnLicpKSAmJlxuICAgICAgICAgICAgICAgIGJbYmldICE9PSAnKionKSB7XG4gICAgICAgICAgICAgICAgaWYgKHdoaWNoID09PSAnYicpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB3aGljaCA9ICdhJztcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChhW2FpXSk7XG4gICAgICAgICAgICAgICAgYWkrKztcbiAgICAgICAgICAgICAgICBiaSsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYltiaV0gPT09ICcqJyAmJlxuICAgICAgICAgICAgICAgIGFbYWldICYmXG4gICAgICAgICAgICAgICAgKHRoaXMub3B0aW9ucy5kb3QgfHwgIWFbYWldLnN0YXJ0c1dpdGgoJy4nKSkgJiZcbiAgICAgICAgICAgICAgICBhW2FpXSAhPT0gJyoqJykge1xuICAgICAgICAgICAgICAgIGlmICh3aGljaCA9PT0gJ2EnKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgd2hpY2ggPSAnYic7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goYltiaV0pO1xuICAgICAgICAgICAgICAgIGFpKys7XG4gICAgICAgICAgICAgICAgYmkrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBpZiB3ZSBmYWxsIG91dCBvZiB0aGUgbG9vcCwgaXQgbWVhbnMgdGhleSB0d28gYXJlIGlkZW50aWNhbFxuICAgICAgICAvLyBhcyBsb25nIGFzIHRoZWlyIGxlbmd0aHMgbWF0Y2hcbiAgICAgICAgcmV0dXJuIGEubGVuZ3RoID09PSBiLmxlbmd0aCAmJiByZXN1bHQ7XG4gICAgfVxuICAgIHBhcnNlTmVnYXRlKCkge1xuICAgICAgICBpZiAodGhpcy5ub25lZ2F0ZSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgcGF0dGVybiA9IHRoaXMucGF0dGVybjtcbiAgICAgICAgbGV0IG5lZ2F0ZSA9IGZhbHNlO1xuICAgICAgICBsZXQgbmVnYXRlT2Zmc2V0ID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXR0ZXJuLmxlbmd0aCAmJiBwYXR0ZXJuLmNoYXJBdChpKSA9PT0gJyEnOyBpKyspIHtcbiAgICAgICAgICAgIG5lZ2F0ZSA9ICFuZWdhdGU7XG4gICAgICAgICAgICBuZWdhdGVPZmZzZXQrKztcbiAgICAgICAgfVxuICAgICAgICBpZiAobmVnYXRlT2Zmc2V0KVxuICAgICAgICAgICAgdGhpcy5wYXR0ZXJuID0gcGF0dGVybi5zbGljZShuZWdhdGVPZmZzZXQpO1xuICAgICAgICB0aGlzLm5lZ2F0ZSA9IG5lZ2F0ZTtcbiAgICB9XG4gICAgLy8gc2V0IHBhcnRpYWwgdG8gdHJ1ZSB0byB0ZXN0IGlmLCBmb3IgZXhhbXBsZSxcbiAgICAvLyBcIi9hL2JcIiBtYXRjaGVzIHRoZSBzdGFydCBvZiBcIi8qL2IvKi9kXCJcbiAgICAvLyBQYXJ0aWFsIG1lYW5zLCBpZiB5b3UgcnVuIG91dCBvZiBmaWxlIGJlZm9yZSB5b3UgcnVuXG4gICAgLy8gb3V0IG9mIHBhdHRlcm4sIHRoZW4gdGhhdCdzIGZpbmUsIGFzIGxvbmcgYXMgYWxsXG4gICAgLy8gdGhlIHBhcnRzIG1hdGNoLlxuICAgIG1hdGNoT25lKGZpbGUsIHBhdHRlcm4sIHBhcnRpYWwgPSBmYWxzZSkge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgICAvLyBVTkMgcGF0aHMgbGlrZSAvLz8vWDovLi4uIGNhbiBtYXRjaCBYOi8uLi4gYW5kIHZpY2UgdmVyc2FcbiAgICAgICAgLy8gRHJpdmUgbGV0dGVycyBpbiBhYnNvbHV0ZSBkcml2ZSBvciB1bmMgcGF0aHMgYXJlIGFsd2F5cyBjb21wYXJlZFxuICAgICAgICAvLyBjYXNlLWluc2Vuc2l0aXZlbHkuXG4gICAgICAgIGlmICh0aGlzLmlzV2luZG93cykge1xuICAgICAgICAgICAgY29uc3QgZmlsZURyaXZlID0gdHlwZW9mIGZpbGVbMF0gPT09ICdzdHJpbmcnICYmIC9eW2Etel06JC9pLnRlc3QoZmlsZVswXSk7XG4gICAgICAgICAgICBjb25zdCBmaWxlVU5DID0gIWZpbGVEcml2ZSAmJlxuICAgICAgICAgICAgICAgIGZpbGVbMF0gPT09ICcnICYmXG4gICAgICAgICAgICAgICAgZmlsZVsxXSA9PT0gJycgJiZcbiAgICAgICAgICAgICAgICBmaWxlWzJdID09PSAnPycgJiZcbiAgICAgICAgICAgICAgICAvXlthLXpdOiQvaS50ZXN0KGZpbGVbM10pO1xuICAgICAgICAgICAgY29uc3QgcGF0dGVybkRyaXZlID0gdHlwZW9mIHBhdHRlcm5bMF0gPT09ICdzdHJpbmcnICYmIC9eW2Etel06JC9pLnRlc3QocGF0dGVyblswXSk7XG4gICAgICAgICAgICBjb25zdCBwYXR0ZXJuVU5DID0gIXBhdHRlcm5Ecml2ZSAmJlxuICAgICAgICAgICAgICAgIHBhdHRlcm5bMF0gPT09ICcnICYmXG4gICAgICAgICAgICAgICAgcGF0dGVyblsxXSA9PT0gJycgJiZcbiAgICAgICAgICAgICAgICBwYXR0ZXJuWzJdID09PSAnPycgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgcGF0dGVyblszXSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgICAgICAvXlthLXpdOiQvaS50ZXN0KHBhdHRlcm5bM10pO1xuICAgICAgICAgICAgY29uc3QgZmRpID0gZmlsZVVOQyA/IDMgOiBmaWxlRHJpdmUgPyAwIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29uc3QgcGRpID0gcGF0dGVyblVOQyA/IDMgOiBwYXR0ZXJuRHJpdmUgPyAwIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBmZGkgPT09ICdudW1iZXInICYmIHR5cGVvZiBwZGkgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgW2ZkLCBwZF0gPSBbZmlsZVtmZGldLCBwYXR0ZXJuW3BkaV1dO1xuICAgICAgICAgICAgICAgIGlmIChmZC50b0xvd2VyQ2FzZSgpID09PSBwZC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhdHRlcm5bcGRpXSA9IGZkO1xuICAgICAgICAgICAgICAgICAgICBpZiAocGRpID4gZmRpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuID0gcGF0dGVybi5zbGljZShwZGkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZkaSA+IHBkaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSA9IGZpbGUuc2xpY2UoZmRpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyByZXNvbHZlIGFuZCByZWR1Y2UgLiBhbmQgLi4gcG9ydGlvbnMgaW4gdGhlIGZpbGUgYXMgd2VsbC5cbiAgICAgICAgLy8gZG9udCcgbmVlZCB0byBkbyB0aGUgc2Vjb25kIHBoYXNlLCBiZWNhdXNlIGl0J3Mgb25seSBvbmUgc3RyaW5nW11cbiAgICAgICAgY29uc3QgeyBvcHRpbWl6YXRpb25MZXZlbCA9IDEgfSA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgaWYgKG9wdGltaXphdGlvbkxldmVsID49IDIpIHtcbiAgICAgICAgICAgIGZpbGUgPSB0aGlzLmxldmVsVHdvRmlsZU9wdGltaXplKGZpbGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGVidWcoJ21hdGNoT25lJywgdGhpcywgeyBmaWxlLCBwYXR0ZXJuIH0pO1xuICAgICAgICB0aGlzLmRlYnVnKCdtYXRjaE9uZScsIGZpbGUubGVuZ3RoLCBwYXR0ZXJuLmxlbmd0aCk7XG4gICAgICAgIGZvciAodmFyIGZpID0gMCwgcGkgPSAwLCBmbCA9IGZpbGUubGVuZ3RoLCBwbCA9IHBhdHRlcm4ubGVuZ3RoOyBmaSA8IGZsICYmIHBpIDwgcGw7IGZpKyssIHBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuZGVidWcoJ21hdGNoT25lIGxvb3AnKTtcbiAgICAgICAgICAgIHZhciBwID0gcGF0dGVybltwaV07XG4gICAgICAgICAgICB2YXIgZiA9IGZpbGVbZmldO1xuICAgICAgICAgICAgdGhpcy5kZWJ1ZyhwYXR0ZXJuLCBwLCBmKTtcbiAgICAgICAgICAgIC8vIHNob3VsZCBiZSBpbXBvc3NpYmxlLlxuICAgICAgICAgICAgLy8gc29tZSBpbnZhbGlkIHJlZ2V4cCBzdHVmZiBpbiB0aGUgc2V0LlxuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICBpZiAocCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgaWYgKHAgPT09IGV4cG9ydHMuR0xPQlNUQVIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlYnVnKCdHTE9CU1RBUicsIFtwYXR0ZXJuLCBwLCBmXSk7XG4gICAgICAgICAgICAgICAgLy8gXCIqKlwiXG4gICAgICAgICAgICAgICAgLy8gYS8qKi9iLyoqL2Mgd291bGQgbWF0Y2ggdGhlIGZvbGxvd2luZzpcbiAgICAgICAgICAgICAgICAvLyBhL2IveC95L3ovY1xuICAgICAgICAgICAgICAgIC8vIGEveC95L3ovYi9jXG4gICAgICAgICAgICAgICAgLy8gYS9iL3gvYi94L2NcbiAgICAgICAgICAgICAgICAvLyBhL2IvY1xuICAgICAgICAgICAgICAgIC8vIFRvIGRvIHRoaXMsIHRha2UgdGhlIHJlc3Qgb2YgdGhlIHBhdHRlcm4gYWZ0ZXJcbiAgICAgICAgICAgICAgICAvLyB0aGUgKiosIGFuZCBzZWUgaWYgaXQgd291bGQgbWF0Y2ggdGhlIGZpbGUgcmVtYWluZGVyLlxuICAgICAgICAgICAgICAgIC8vIElmIHNvLCByZXR1cm4gc3VjY2Vzcy5cbiAgICAgICAgICAgICAgICAvLyBJZiBub3QsIHRoZSAqKiBcInN3YWxsb3dzXCIgYSBzZWdtZW50LCBhbmQgdHJ5IGFnYWluLlxuICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgcmVjdXJzaXZlbHkgYXdmdWwuXG4gICAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgICAvLyBhLyoqL2IvKiovYyBtYXRjaGluZyBhL2IveC95L3ovY1xuICAgICAgICAgICAgICAgIC8vIC0gYSBtYXRjaGVzIGFcbiAgICAgICAgICAgICAgICAvLyAtIGRvdWJsZXN0YXJcbiAgICAgICAgICAgICAgICAvLyAgIC0gbWF0Y2hPbmUoYi94L3kvei9jLCBiLyoqL2MpXG4gICAgICAgICAgICAgICAgLy8gICAgIC0gYiBtYXRjaGVzIGJcbiAgICAgICAgICAgICAgICAvLyAgICAgLSBkb3VibGVzdGFyXG4gICAgICAgICAgICAgICAgLy8gICAgICAgLSBtYXRjaE9uZSh4L3kvei9jLCBjKSAtPiBub1xuICAgICAgICAgICAgICAgIC8vICAgICAgIC0gbWF0Y2hPbmUoeS96L2MsIGMpIC0+IG5vXG4gICAgICAgICAgICAgICAgLy8gICAgICAgLSBtYXRjaE9uZSh6L2MsIGMpIC0+IG5vXG4gICAgICAgICAgICAgICAgLy8gICAgICAgLSBtYXRjaE9uZShjLCBjKSB5ZXMsIGhpdFxuICAgICAgICAgICAgICAgIHZhciBmciA9IGZpO1xuICAgICAgICAgICAgICAgIHZhciBwciA9IHBpICsgMTtcbiAgICAgICAgICAgICAgICBpZiAocHIgPT09IHBsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVidWcoJyoqIGF0IHRoZSBlbmQnKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gYSAqKiBhdCB0aGUgZW5kIHdpbGwganVzdCBzd2FsbG93IHRoZSByZXN0LlxuICAgICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIGZvdW5kIGEgbWF0Y2guXG4gICAgICAgICAgICAgICAgICAgIC8vIGhvd2V2ZXIsIGl0IHdpbGwgbm90IHN3YWxsb3cgLy54LCB1bmxlc3NcbiAgICAgICAgICAgICAgICAgICAgLy8gb3B0aW9ucy5kb3QgaXMgc2V0LlxuICAgICAgICAgICAgICAgICAgICAvLyAuIGFuZCAuLiBhcmUgKm5ldmVyKiBtYXRjaGVkIGJ5ICoqLCBmb3IgZXhwbG9zaXZlbHlcbiAgICAgICAgICAgICAgICAgICAgLy8gZXhwb25lbnRpYWwgcmVhc29ucy5cbiAgICAgICAgICAgICAgICAgICAgZm9yICg7IGZpIDwgZmw7IGZpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWxlW2ZpXSA9PT0gJy4nIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZVtmaV0gPT09ICcuLicgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIW9wdGlvbnMuZG90ICYmIGZpbGVbZmldLmNoYXJBdCgwKSA9PT0gJy4nKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIG9rLCBsZXQncyBzZWUgaWYgd2UgY2FuIHN3YWxsb3cgd2hhdGV2ZXIgd2UgY2FuLlxuICAgICAgICAgICAgICAgIHdoaWxlIChmciA8IGZsKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzd2FsbG93ZWUgPSBmaWxlW2ZyXTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWJ1ZygnXFxuZ2xvYnN0YXIgd2hpbGUnLCBmaWxlLCBmciwgcGF0dGVybiwgcHIsIHN3YWxsb3dlZSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIFhYWCByZW1vdmUgdGhpcyBzbGljZS4gIEp1c3QgcGFzcyB0aGUgc3RhcnQgaW5kZXguXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoT25lKGZpbGUuc2xpY2UoZnIpLCBwYXR0ZXJuLnNsaWNlKHByKSwgcGFydGlhbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVidWcoJ2dsb2JzdGFyIGZvdW5kIG1hdGNoIScsIGZyLCBmbCwgc3dhbGxvd2VlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvdW5kIGEgbWF0Y2guXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbid0IHN3YWxsb3cgXCIuXCIgb3IgXCIuLlwiIGV2ZXIuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjYW4gb25seSBzd2FsbG93IFwiLmZvb1wiIHdoZW4gZXhwbGljaXRseSBhc2tlZC5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzd2FsbG93ZWUgPT09ICcuJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3YWxsb3dlZSA9PT0gJy4uJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICghb3B0aW9ucy5kb3QgJiYgc3dhbGxvd2VlLmNoYXJBdCgwKSA9PT0gJy4nKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVidWcoJ2RvdCBkZXRlY3RlZCEnLCBmaWxlLCBmciwgcGF0dGVybiwgcHIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gKiogc3dhbGxvd3MgYSBzZWdtZW50LCBhbmQgY29udGludWUuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlYnVnKCdnbG9ic3RhciBzd2FsbG93IGEgc2VnbWVudCwgYW5kIGNvbnRpbnVlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmcisrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIG5vIG1hdGNoIHdhcyBmb3VuZC5cbiAgICAgICAgICAgICAgICAvLyBIb3dldmVyLCBpbiBwYXJ0aWFsIG1vZGUsIHdlIGNhbid0IHNheSB0aGlzIGlzIG5lY2Vzc2FyaWx5IG92ZXIuXG4gICAgICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICAgICAgaWYgKHBhcnRpYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gcmFuIG91dCBvZiBmaWxlXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVidWcoJ1xcbj4+PiBubyBtYXRjaCwgcGFydGlhbD8nLCBmaWxlLCBmciwgcGF0dGVybiwgcHIpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZnIgPT09IGZsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHNvbWV0aGluZyBvdGhlciB0aGFuICoqXG4gICAgICAgICAgICAvLyBub24tbWFnaWMgcGF0dGVybnMganVzdCBoYXZlIHRvIG1hdGNoIGV4YWN0bHlcbiAgICAgICAgICAgIC8vIHBhdHRlcm5zIHdpdGggbWFnaWMgaGF2ZSBiZWVuIHR1cm5lZCBpbnRvIHJlZ2V4cHMuXG4gICAgICAgICAgICBsZXQgaGl0O1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBwID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGhpdCA9IGYgPT09IHA7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWJ1Zygnc3RyaW5nIG1hdGNoJywgcCwgZiwgaGl0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGhpdCA9IHAudGVzdChmKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRlYnVnKCdwYXR0ZXJuIG1hdGNoJywgcCwgZiwgaGl0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghaGl0KVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBOb3RlOiBlbmRpbmcgaW4gLyBtZWFucyB0aGF0IHdlJ2xsIGdldCBhIGZpbmFsIFwiXCJcbiAgICAgICAgLy8gYXQgdGhlIGVuZCBvZiB0aGUgcGF0dGVybi4gIFRoaXMgY2FuIG9ubHkgbWF0Y2ggYVxuICAgICAgICAvLyBjb3JyZXNwb25kaW5nIFwiXCIgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZS5cbiAgICAgICAgLy8gSWYgdGhlIGZpbGUgZW5kcyBpbiAvLCB0aGVuIGl0IGNhbiBvbmx5IG1hdGNoIGFcbiAgICAgICAgLy8gYSBwYXR0ZXJuIHRoYXQgZW5kcyBpbiAvLCB1bmxlc3MgdGhlIHBhdHRlcm4ganVzdFxuICAgICAgICAvLyBkb2Vzbid0IGhhdmUgYW55IG1vcmUgZm9yIGl0LiBCdXQsIGEvYi8gc2hvdWxkICpub3QqXG4gICAgICAgIC8vIG1hdGNoIFwiYS9iLypcIiwgZXZlbiB0aG91Z2ggXCJcIiBtYXRjaGVzIGFnYWluc3QgdGhlXG4gICAgICAgIC8vIFteL10qPyBwYXR0ZXJuLCBleGNlcHQgaW4gcGFydGlhbCBtb2RlLCB3aGVyZSBpdCBtaWdodFxuICAgICAgICAvLyBzaW1wbHkgbm90IGJlIHJlYWNoZWQgeWV0LlxuICAgICAgICAvLyBIb3dldmVyLCBhL2IvIHNob3VsZCBzdGlsbCBzYXRpc2Z5IGEvKlxuICAgICAgICAvLyBub3cgZWl0aGVyIHdlIGZlbGwgb2ZmIHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4sIG9yIHdlJ3JlIGRvbmUuXG4gICAgICAgIGlmIChmaSA9PT0gZmwgJiYgcGkgPT09IHBsKSB7XG4gICAgICAgICAgICAvLyByYW4gb3V0IG9mIHBhdHRlcm4gYW5kIGZpbGVuYW1lIGF0IHRoZSBzYW1lIHRpbWUuXG4gICAgICAgICAgICAvLyBhbiBleGFjdCBoaXQhXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChmaSA9PT0gZmwpIHtcbiAgICAgICAgICAgIC8vIHJhbiBvdXQgb2YgZmlsZSwgYnV0IHN0aWxsIGhhZCBwYXR0ZXJuIGxlZnQuXG4gICAgICAgICAgICAvLyB0aGlzIGlzIG9rIGlmIHdlJ3JlIGRvaW5nIHRoZSBtYXRjaCBhcyBwYXJ0IG9mXG4gICAgICAgICAgICAvLyBhIGdsb2IgZnMgdHJhdmVyc2FsLlxuICAgICAgICAgICAgcmV0dXJuIHBhcnRpYWw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocGkgPT09IHBsKSB7XG4gICAgICAgICAgICAvLyByYW4gb3V0IG9mIHBhdHRlcm4sIHN0aWxsIGhhdmUgZmlsZSBsZWZ0LlxuICAgICAgICAgICAgLy8gdGhpcyBpcyBvbmx5IGFjY2VwdGFibGUgaWYgd2UncmUgb24gdGhlIHZlcnkgbGFzdFxuICAgICAgICAgICAgLy8gZW1wdHkgc2VnbWVudCBvZiBhIGZpbGUgd2l0aCBhIHRyYWlsaW5nIHNsYXNoLlxuICAgICAgICAgICAgLy8gYS8qIHNob3VsZCBtYXRjaCBhL2IvXG4gICAgICAgICAgICByZXR1cm4gZmkgPT09IGZsIC0gMSAmJiBmaWxlW2ZpXSA9PT0gJyc7XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIHNob3VsZCBiZSB1bnJlYWNoYWJsZS5cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignd3RmPycpO1xuICAgICAgICB9XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgfVxuICAgIGJyYWNlRXhwYW5kKCkge1xuICAgICAgICByZXR1cm4gKDAsIGV4cG9ydHMuYnJhY2VFeHBhbmQpKHRoaXMucGF0dGVybiwgdGhpcy5vcHRpb25zKTtcbiAgICB9XG4gICAgcGFyc2UocGF0dGVybikge1xuICAgICAgICAoMCwgYXNzZXJ0X3ZhbGlkX3BhdHRlcm5fanNfMS5hc3NlcnRWYWxpZFBhdHRlcm4pKHBhdHRlcm4pO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgICAvLyBzaG9ydGN1dHNcbiAgICAgICAgaWYgKHBhdHRlcm4gPT09ICcqKicpXG4gICAgICAgICAgICByZXR1cm4gZXhwb3J0cy5HTE9CU1RBUjtcbiAgICAgICAgaWYgKHBhdHRlcm4gPT09ICcnKVxuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAvLyBmYXIgYW5kIGF3YXksIHRoZSBtb3N0IGNvbW1vbiBnbG9iIHBhdHRlcm4gcGFydHMgYXJlXG4gICAgICAgIC8vICosICouKiwgYW5kICouPGV4dD4gIEFkZCBhIGZhc3QgY2hlY2sgbWV0aG9kIGZvciB0aG9zZS5cbiAgICAgICAgbGV0IG07XG4gICAgICAgIGxldCBmYXN0VGVzdCA9IG51bGw7XG4gICAgICAgIGlmICgobSA9IHBhdHRlcm4ubWF0Y2goc3RhclJFKSkpIHtcbiAgICAgICAgICAgIGZhc3RUZXN0ID0gb3B0aW9ucy5kb3QgPyBzdGFyVGVzdERvdCA6IHN0YXJUZXN0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKChtID0gcGF0dGVybi5tYXRjaChzdGFyRG90RXh0UkUpKSkge1xuICAgICAgICAgICAgZmFzdFRlc3QgPSAob3B0aW9ucy5ub2Nhc2VcbiAgICAgICAgICAgICAgICA/IG9wdGlvbnMuZG90XG4gICAgICAgICAgICAgICAgICAgID8gc3RhckRvdEV4dFRlc3ROb2Nhc2VEb3RcbiAgICAgICAgICAgICAgICAgICAgOiBzdGFyRG90RXh0VGVzdE5vY2FzZVxuICAgICAgICAgICAgICAgIDogb3B0aW9ucy5kb3RcbiAgICAgICAgICAgICAgICAgICAgPyBzdGFyRG90RXh0VGVzdERvdFxuICAgICAgICAgICAgICAgICAgICA6IHN0YXJEb3RFeHRUZXN0KShtWzFdKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICgobSA9IHBhdHRlcm4ubWF0Y2gocW1hcmtzUkUpKSkge1xuICAgICAgICAgICAgZmFzdFRlc3QgPSAob3B0aW9ucy5ub2Nhc2VcbiAgICAgICAgICAgICAgICA/IG9wdGlvbnMuZG90XG4gICAgICAgICAgICAgICAgICAgID8gcW1hcmtzVGVzdE5vY2FzZURvdFxuICAgICAgICAgICAgICAgICAgICA6IHFtYXJrc1Rlc3ROb2Nhc2VcbiAgICAgICAgICAgICAgICA6IG9wdGlvbnMuZG90XG4gICAgICAgICAgICAgICAgICAgID8gcW1hcmtzVGVzdERvdFxuICAgICAgICAgICAgICAgICAgICA6IHFtYXJrc1Rlc3QpKG0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKChtID0gcGF0dGVybi5tYXRjaChzdGFyRG90U3RhclJFKSkpIHtcbiAgICAgICAgICAgIGZhc3RUZXN0ID0gb3B0aW9ucy5kb3QgPyBzdGFyRG90U3RhclRlc3REb3QgOiBzdGFyRG90U3RhclRlc3Q7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoKG0gPSBwYXR0ZXJuLm1hdGNoKGRvdFN0YXJSRSkpKSB7XG4gICAgICAgICAgICBmYXN0VGVzdCA9IGRvdFN0YXJUZXN0O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlID0gYXN0X2pzXzEuQVNULmZyb21HbG9iKHBhdHRlcm4sIHRoaXMub3B0aW9ucykudG9NTVBhdHRlcm4oKTtcbiAgICAgICAgaWYgKGZhc3RUZXN0ICYmIHR5cGVvZiByZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIC8vIEF2b2lkcyBvdmVycmlkaW5nIGluIGZyb3plbiBlbnZpcm9ubWVudHNcbiAgICAgICAgICAgIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkocmUsICd0ZXN0JywgeyB2YWx1ZTogZmFzdFRlc3QgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlO1xuICAgIH1cbiAgICBtYWtlUmUoKSB7XG4gICAgICAgIGlmICh0aGlzLnJlZ2V4cCB8fCB0aGlzLnJlZ2V4cCA9PT0gZmFsc2UpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZWdleHA7XG4gICAgICAgIC8vIGF0IHRoaXMgcG9pbnQsIHRoaXMuc2V0IGlzIGEgMmQgYXJyYXkgb2YgcGFydGlhbFxuICAgICAgICAvLyBwYXR0ZXJuIHN0cmluZ3MsIG9yIFwiKipcIi5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gSXQncyBiZXR0ZXIgdG8gdXNlIC5tYXRjaCgpLiAgVGhpcyBmdW5jdGlvbiBzaG91bGRuJ3RcbiAgICAgICAgLy8gYmUgdXNlZCwgcmVhbGx5LCBidXQgaXQncyBwcmV0dHkgY29udmVuaWVudCBzb21ldGltZXMsXG4gICAgICAgIC8vIHdoZW4geW91IGp1c3Qgd2FudCB0byB3b3JrIHdpdGggYSByZWdleC5cbiAgICAgICAgY29uc3Qgc2V0ID0gdGhpcy5zZXQ7XG4gICAgICAgIGlmICghc2V0Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5yZWdleHAgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlZ2V4cDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgICBjb25zdCB0d29TdGFyID0gb3B0aW9ucy5ub2dsb2JzdGFyXG4gICAgICAgICAgICA/IHN0YXJcbiAgICAgICAgICAgIDogb3B0aW9ucy5kb3RcbiAgICAgICAgICAgICAgICA/IHR3b1N0YXJEb3RcbiAgICAgICAgICAgICAgICA6IHR3b1N0YXJOb0RvdDtcbiAgICAgICAgY29uc3QgZmxhZ3MgPSBuZXcgU2V0KG9wdGlvbnMubm9jYXNlID8gWydpJ10gOiBbXSk7XG4gICAgICAgIC8vIHJlZ2V4cGlmeSBub24tZ2xvYnN0YXIgcGF0dGVybnNcbiAgICAgICAgLy8gaWYgKiogaXMgb25seSBpdGVtLCB0aGVuIHdlIGp1c3QgZG8gb25lIHR3b1N0YXJcbiAgICAgICAgLy8gaWYgKiogaXMgZmlyc3QsIGFuZCB0aGVyZSBhcmUgbW9yZSwgcHJlcGVuZCAoXFwvfHR3b1N0YXJcXC8pPyB0byBuZXh0XG4gICAgICAgIC8vIGlmICoqIGlzIGxhc3QsIGFwcGVuZCAoXFwvdHdvU3RhcnwpIHRvIHByZXZpb3VzXG4gICAgICAgIC8vIGlmICoqIGlzIGluIHRoZSBtaWRkbGUsIGFwcGVuZCAoXFwvfFxcL3R3b1N0YXJcXC8pIHRvIHByZXZpb3VzXG4gICAgICAgIC8vIHRoZW4gZmlsdGVyIG91dCBHTE9CU1RBUiBzeW1ib2xzXG4gICAgICAgIGxldCByZSA9IHNldFxuICAgICAgICAgICAgLm1hcChwYXR0ZXJuID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBwID0gcGF0dGVybi5tYXAocCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHAgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBmIG9mIHAuZmxhZ3Muc3BsaXQoJycpKVxuICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MuYWRkKGYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIHAgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgICAgID8gcmVnRXhwRXNjYXBlKHApXG4gICAgICAgICAgICAgICAgICAgIDogcCA9PT0gZXhwb3J0cy5HTE9CU1RBUlxuICAgICAgICAgICAgICAgICAgICAgICAgPyBleHBvcnRzLkdMT0JTVEFSXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHAuX3NyYztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcHAuZm9yRWFjaCgocCwgaSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSBwcFtpICsgMV07XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldiA9IHBwW2kgLSAxXTtcbiAgICAgICAgICAgICAgICBpZiAocCAhPT0gZXhwb3J0cy5HTE9CU1RBUiB8fCBwcmV2ID09PSBleHBvcnRzLkdMT0JTVEFSKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHByZXYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCAhPT0gdW5kZWZpbmVkICYmIG5leHQgIT09IGV4cG9ydHMuR0xPQlNUQVIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBwW2kgKyAxXSA9ICcoPzpcXFxcL3wnICsgdHdvU3RhciArICdcXFxcLyk/JyArIG5leHQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcFtpXSA9IHR3b1N0YXI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAobmV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHBwW2kgLSAxXSA9IHByZXYgKyAnKD86XFxcXC98JyArIHR3b1N0YXIgKyAnKT8nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChuZXh0ICE9PSBleHBvcnRzLkdMT0JTVEFSKSB7XG4gICAgICAgICAgICAgICAgICAgIHBwW2kgLSAxXSA9IHByZXYgKyAnKD86XFxcXC98XFxcXC8nICsgdHdvU3RhciArICdcXFxcLyknICsgbmV4dDtcbiAgICAgICAgICAgICAgICAgICAgcHBbaSArIDFdID0gZXhwb3J0cy5HTE9CU1RBUjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBwcC5maWx0ZXIocCA9PiBwICE9PSBleHBvcnRzLkdMT0JTVEFSKS5qb2luKCcvJyk7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAuam9pbignfCcpO1xuICAgICAgICAvLyBuZWVkIHRvIHdyYXAgaW4gcGFyZW5zIGlmIHdlIGhhZCBtb3JlIHRoYW4gb25lIHRoaW5nIHdpdGggfCxcbiAgICAgICAgLy8gb3RoZXJ3aXNlIG9ubHkgdGhlIGZpcnN0IHdpbGwgYmUgYW5jaG9yZWQgdG8gXiBhbmQgdGhlIGxhc3QgdG8gJFxuICAgICAgICBjb25zdCBbb3BlbiwgY2xvc2VdID0gc2V0Lmxlbmd0aCA+IDEgPyBbJyg/OicsICcpJ10gOiBbJycsICcnXTtcbiAgICAgICAgLy8gbXVzdCBtYXRjaCBlbnRpcmUgcGF0dGVyblxuICAgICAgICAvLyBlbmRpbmcgaW4gYSAqIG9yICoqIHdpbGwgbWFrZSBpdCBsZXNzIHN0cmljdC5cbiAgICAgICAgcmUgPSAnXicgKyBvcGVuICsgcmUgKyBjbG9zZSArICckJztcbiAgICAgICAgLy8gY2FuIG1hdGNoIGFueXRoaW5nLCBhcyBsb25nIGFzIGl0J3Mgbm90IHRoaXMuXG4gICAgICAgIGlmICh0aGlzLm5lZ2F0ZSlcbiAgICAgICAgICAgIHJlID0gJ14oPyEnICsgcmUgKyAnKS4rJCc7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLnJlZ2V4cCA9IG5ldyBSZWdFeHAocmUsIFsuLi5mbGFnc10uam9pbignJykpO1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgICAvLyBzaG91bGQgYmUgaW1wb3NzaWJsZVxuICAgICAgICAgICAgdGhpcy5yZWdleHAgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICByZXR1cm4gdGhpcy5yZWdleHA7XG4gICAgfVxuICAgIHNsYXNoU3BsaXQocCkge1xuICAgICAgICAvLyBpZiBwIHN0YXJ0cyB3aXRoIC8vIG9uIHdpbmRvd3MsIHdlIHByZXNlcnZlIHRoYXRcbiAgICAgICAgLy8gc28gdGhhdCBVTkMgcGF0aHMgYXJlbid0IGJyb2tlbi4gIE90aGVyd2lzZSwgYW55IG51bWJlciBvZlxuICAgICAgICAvLyAvIGNoYXJhY3RlcnMgYXJlIGNvYWxlc2NlZCBpbnRvIG9uZSwgdW5sZXNzXG4gICAgICAgIC8vIHByZXNlcnZlTXVsdGlwbGVTbGFzaGVzIGlzIHNldCB0byB0cnVlLlxuICAgICAgICBpZiAodGhpcy5wcmVzZXJ2ZU11bHRpcGxlU2xhc2hlcykge1xuICAgICAgICAgICAgcmV0dXJuIHAuc3BsaXQoJy8nKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmlzV2luZG93cyAmJiAvXlxcL1xcL1teXFwvXSsvLnRlc3QocCkpIHtcbiAgICAgICAgICAgIC8vIGFkZCBhbiBleHRyYSAnJyBmb3IgdGhlIG9uZSB3ZSBsb3NlXG4gICAgICAgICAgICByZXR1cm4gWycnLCAuLi5wLnNwbGl0KC9cXC8rLyldO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHAuc3BsaXQoL1xcLysvKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBtYXRjaChmLCBwYXJ0aWFsID0gdGhpcy5wYXJ0aWFsKSB7XG4gICAgICAgIHRoaXMuZGVidWcoJ21hdGNoJywgZiwgdGhpcy5wYXR0ZXJuKTtcbiAgICAgICAgLy8gc2hvcnQtY2lyY3VpdCBpbiB0aGUgY2FzZSBvZiBidXN0ZWQgdGhpbmdzLlxuICAgICAgICAvLyBjb21tZW50cywgZXRjLlxuICAgICAgICBpZiAodGhpcy5jb21tZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZW1wdHkpIHtcbiAgICAgICAgICAgIHJldHVybiBmID09PSAnJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoZiA9PT0gJy8nICYmIHBhcnRpYWwpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIC8vIHdpbmRvd3M6IG5lZWQgdG8gdXNlIC8sIG5vdCBcXFxuICAgICAgICBpZiAodGhpcy5pc1dpbmRvd3MpIHtcbiAgICAgICAgICAgIGYgPSBmLnNwbGl0KCdcXFxcJykuam9pbignLycpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHRyZWF0IHRoZSB0ZXN0IHBhdGggYXMgYSBzZXQgb2YgcGF0aHBhcnRzLlxuICAgICAgICBjb25zdCBmZiA9IHRoaXMuc2xhc2hTcGxpdChmKTtcbiAgICAgICAgdGhpcy5kZWJ1Zyh0aGlzLnBhdHRlcm4sICdzcGxpdCcsIGZmKTtcbiAgICAgICAgLy8ganVzdCBPTkUgb2YgdGhlIHBhdHRlcm4gc2V0cyBpbiB0aGlzLnNldCBuZWVkcyB0byBtYXRjaFxuICAgICAgICAvLyBpbiBvcmRlciBmb3IgaXQgdG8gYmUgdmFsaWQuICBJZiBuZWdhdGluZywgdGhlbiBqdXN0IG9uZVxuICAgICAgICAvLyBtYXRjaCBtZWFucyB0aGF0IHdlIGhhdmUgZmFpbGVkLlxuICAgICAgICAvLyBFaXRoZXIgd2F5LCByZXR1cm4gb24gdGhlIGZpcnN0IGhpdC5cbiAgICAgICAgY29uc3Qgc2V0ID0gdGhpcy5zZXQ7XG4gICAgICAgIHRoaXMuZGVidWcodGhpcy5wYXR0ZXJuLCAnc2V0Jywgc2V0KTtcbiAgICAgICAgLy8gRmluZCB0aGUgYmFzZW5hbWUgb2YgdGhlIHBhdGggYnkgbG9va2luZyBmb3IgdGhlIGxhc3Qgbm9uLWVtcHR5IHNlZ21lbnRcbiAgICAgICAgbGV0IGZpbGVuYW1lID0gZmZbZmYubGVuZ3RoIC0gMV07XG4gICAgICAgIGlmICghZmlsZW5hbWUpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBmZi5sZW5ndGggLSAyOyAhZmlsZW5hbWUgJiYgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICBmaWxlbmFtZSA9IGZmW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2V0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBwYXR0ZXJuID0gc2V0W2ldO1xuICAgICAgICAgICAgbGV0IGZpbGUgPSBmZjtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLm1hdGNoQmFzZSAmJiBwYXR0ZXJuLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGZpbGUgPSBbZmlsZW5hbWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaGl0ID0gdGhpcy5tYXRjaE9uZShmaWxlLCBwYXR0ZXJuLCBwYXJ0aWFsKTtcbiAgICAgICAgICAgIGlmIChoaXQpIHtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5mbGlwTmVnYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gIXRoaXMubmVnYXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGRpZG4ndCBnZXQgYW55IGhpdHMuICB0aGlzIGlzIHN1Y2Nlc3MgaWYgaXQncyBhIG5lZ2F0aXZlXG4gICAgICAgIC8vIHBhdHRlcm4sIGZhaWx1cmUgb3RoZXJ3aXNlLlxuICAgICAgICBpZiAob3B0aW9ucy5mbGlwTmVnYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubmVnYXRlO1xuICAgIH1cbiAgICBzdGF0aWMgZGVmYXVsdHMoZGVmKSB7XG4gICAgICAgIHJldHVybiBleHBvcnRzLm1pbmltYXRjaC5kZWZhdWx0cyhkZWYpLk1pbmltYXRjaDtcbiAgICB9XG59XG5leHBvcnRzLk1pbmltYXRjaCA9IE1pbmltYXRjaDtcbi8qIGM4IGlnbm9yZSBzdGFydCAqL1xudmFyIGFzdF9qc18yID0gcmVxdWlyZShcIi4vYXN0LmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQVNUXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBhc3RfanNfMi5BU1Q7IH0gfSk7XG52YXIgZXNjYXBlX2pzXzIgPSByZXF1aXJlKFwiLi9lc2NhcGUuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJlc2NhcGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGVzY2FwZV9qc18yLmVzY2FwZTsgfSB9KTtcbnZhciB1bmVzY2FwZV9qc18yID0gcmVxdWlyZShcIi4vdW5lc2NhcGUuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ1bmVzY2FwZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdW5lc2NhcGVfanNfMi51bmVzY2FwZTsgfSB9KTtcbi8qIGM4IGlnbm9yZSBzdG9wICovXG5leHBvcnRzLm1pbmltYXRjaC5BU1QgPSBhc3RfanNfMS5BU1Q7XG5leHBvcnRzLm1pbmltYXRjaC5NaW5pbWF0Y2ggPSBNaW5pbWF0Y2g7XG5leHBvcnRzLm1pbmltYXRjaC5lc2NhcGUgPSBlc2NhcGVfanNfMS5lc2NhcGU7XG5leHBvcnRzLm1pbmltYXRjaC51bmVzY2FwZSA9IHVuZXNjYXBlX2pzXzEudW5lc2NhcGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBAbW9kdWxlIExSVUNhY2hlXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTFJVQ2FjaGUgPSB2b2lkIDA7XG5jb25zdCBwZXJmID0gdHlwZW9mIHBlcmZvcm1hbmNlID09PSAnb2JqZWN0JyAmJlxuICAgIHBlcmZvcm1hbmNlICYmXG4gICAgdHlwZW9mIHBlcmZvcm1hbmNlLm5vdyA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gcGVyZm9ybWFuY2VcbiAgICA6IERhdGU7XG5jb25zdCB3YXJuZWQgPSBuZXcgU2V0KCk7XG4vKiBjOCBpZ25vcmUgc3RhcnQgKi9cbmNvbnN0IFBST0NFU1MgPSAodHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmICEhcHJvY2VzcyA/IHByb2Nlc3MgOiB7fSk7XG4vKiBjOCBpZ25vcmUgc3RhcnQgKi9cbmNvbnN0IGVtaXRXYXJuaW5nID0gKG1zZywgdHlwZSwgY29kZSwgZm4pID0+IHtcbiAgICB0eXBlb2YgUFJPQ0VTUy5lbWl0V2FybmluZyA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IFBST0NFU1MuZW1pdFdhcm5pbmcobXNnLCB0eXBlLCBjb2RlLCBmbilcbiAgICAgICAgOiBjb25zb2xlLmVycm9yKGBbJHtjb2RlfV0gJHt0eXBlfTogJHttc2d9YCk7XG59O1xubGV0IEFDID0gZ2xvYmFsVGhpcy5BYm9ydENvbnRyb2xsZXI7XG5sZXQgQVMgPSBnbG9iYWxUaGlzLkFib3J0U2lnbmFsO1xuLyogYzggaWdub3JlIHN0YXJ0ICovXG5pZiAodHlwZW9mIEFDID09PSAndW5kZWZpbmVkJykge1xuICAgIC8vQHRzLWlnbm9yZVxuICAgIEFTID0gY2xhc3MgQWJvcnRTaWduYWwge1xuICAgICAgICBvbmFib3J0O1xuICAgICAgICBfb25hYm9ydCA9IFtdO1xuICAgICAgICByZWFzb247XG4gICAgICAgIGFib3J0ZWQgPSBmYWxzZTtcbiAgICAgICAgYWRkRXZlbnRMaXN0ZW5lcihfLCBmbikge1xuICAgICAgICAgICAgdGhpcy5fb25hYm9ydC5wdXNoKGZuKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgLy9AdHMtaWdub3JlXG4gICAgQUMgPSBjbGFzcyBBYm9ydENvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgICAgIHdhcm5BQ1BvbHlmaWxsKCk7XG4gICAgICAgIH1cbiAgICAgICAgc2lnbmFsID0gbmV3IEFTKCk7XG4gICAgICAgIGFib3J0KHJlYXNvbikge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2lnbmFsLmFib3J0ZWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgLy9AdHMtaWdub3JlXG4gICAgICAgICAgICB0aGlzLnNpZ25hbC5yZWFzb24gPSByZWFzb247XG4gICAgICAgICAgICAvL0B0cy1pZ25vcmVcbiAgICAgICAgICAgIHRoaXMuc2lnbmFsLmFib3J0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgLy9AdHMtaWdub3JlXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZuIG9mIHRoaXMuc2lnbmFsLl9vbmFib3J0KSB7XG4gICAgICAgICAgICAgICAgZm4ocmVhc29uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2lnbmFsLm9uYWJvcnQ/LihyZWFzb24pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBsZXQgcHJpbnRBQ1BvbHlmaWxsV2FybmluZyA9IFBST0NFU1MuZW52Py5MUlVfQ0FDSEVfSUdOT1JFX0FDX1dBUk5JTkcgIT09ICcxJztcbiAgICBjb25zdCB3YXJuQUNQb2x5ZmlsbCA9ICgpID0+IHtcbiAgICAgICAgaWYgKCFwcmludEFDUG9seWZpbGxXYXJuaW5nKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBwcmludEFDUG9seWZpbGxXYXJuaW5nID0gZmFsc2U7XG4gICAgICAgIGVtaXRXYXJuaW5nKCdBYm9ydENvbnRyb2xsZXIgaXMgbm90IGRlZmluZWQuIElmIHVzaW5nIGxydS1jYWNoZSBpbiAnICtcbiAgICAgICAgICAgICdub2RlIDE0LCBsb2FkIGFuIEFib3J0Q29udHJvbGxlciBwb2x5ZmlsbCBmcm9tIHRoZSAnICtcbiAgICAgICAgICAgICdgbm9kZS1hYm9ydC1jb250cm9sbGVyYCBwYWNrYWdlLiBBIG1pbmltYWwgcG9seWZpbGwgaXMgJyArXG4gICAgICAgICAgICAncHJvdmlkZWQgZm9yIHVzZSBieSBMUlVDYWNoZS5mZXRjaCgpLCBidXQgaXQgc2hvdWxkIG5vdCBiZSAnICtcbiAgICAgICAgICAgICdyZWxpZWQgdXBvbiBpbiBvdGhlciBjb250ZXh0cyAoZWcsIHBhc3NpbmcgaXQgdG8gb3RoZXIgQVBJcyB0aGF0ICcgK1xuICAgICAgICAgICAgJ3VzZSBBYm9ydENvbnRyb2xsZXIvQWJvcnRTaWduYWwgbWlnaHQgaGF2ZSB1bmRlc2lyYWJsZSBlZmZlY3RzKS4gJyArXG4gICAgICAgICAgICAnWW91IG1heSBkaXNhYmxlIHRoaXMgd2l0aCBMUlVfQ0FDSEVfSUdOT1JFX0FDX1dBUk5JTkc9MSBpbiB0aGUgZW52LicsICdOT19BQk9SVF9DT05UUk9MTEVSJywgJ0VOT1RTVVAnLCB3YXJuQUNQb2x5ZmlsbCk7XG4gICAgfTtcbn1cbi8qIGM4IGlnbm9yZSBzdG9wICovXG5jb25zdCBzaG91bGRXYXJuID0gKGNvZGUpID0+ICF3YXJuZWQuaGFzKGNvZGUpO1xuY29uc3QgVFlQRSA9IFN5bWJvbCgndHlwZScpO1xuY29uc3QgaXNQb3NJbnQgPSAobikgPT4gbiAmJiBuID09PSBNYXRoLmZsb29yKG4pICYmIG4gPiAwICYmIGlzRmluaXRlKG4pO1xuLyogYzggaWdub3JlIHN0YXJ0ICovXG4vLyBUaGlzIGlzIGEgbGl0dGxlIGJpdCByaWRpY3Vsb3VzLCB0YmguXG4vLyBUaGUgbWF4aW11bSBhcnJheSBsZW5ndGggaXMgMl4zMi0xIG9yIHRoZXJlYWJvdXRzIG9uIG1vc3QgSlMgaW1wbHMuXG4vLyBBbmQgd2VsbCBiZWZvcmUgdGhhdCBwb2ludCwgeW91J3JlIGNhY2hpbmcgdGhlIGVudGlyZSB3b3JsZCwgSSBtZWFuLFxuLy8gdGhhdCdzIH4zMkdCIG9mIGp1c3QgaW50ZWdlcnMgZm9yIHRoZSBuZXh0L3ByZXYgbGlua3MsIHBsdXMgd2hhdGV2ZXJcbi8vIGVsc2UgdG8gaG9sZCB0aGF0IG1hbnkga2V5cyBhbmQgdmFsdWVzLiAgSnVzdCBmaWxsaW5nIHRoZSBtZW1vcnkgd2l0aFxuLy8gemVyb2VzIGF0IGluaXQgdGltZSBpcyBicnV0YWwgd2hlbiB5b3UgZ2V0IHRoYXQgYmlnLlxuLy8gQnV0IHdoeSBub3QgYmUgY29tcGxldGU/XG4vLyBNYXliZSBpbiB0aGUgZnV0dXJlLCB0aGVzZSBsaW1pdHMgd2lsbCBoYXZlIGV4cGFuZGVkLlxuY29uc3QgZ2V0VWludEFycmF5ID0gKG1heCkgPT4gIWlzUG9zSW50KG1heClcbiAgICA/IG51bGxcbiAgICA6IG1heCA8PSBNYXRoLnBvdygyLCA4KVxuICAgICAgICA/IFVpbnQ4QXJyYXlcbiAgICAgICAgOiBtYXggPD0gTWF0aC5wb3coMiwgMTYpXG4gICAgICAgICAgICA/IFVpbnQxNkFycmF5XG4gICAgICAgICAgICA6IG1heCA8PSBNYXRoLnBvdygyLCAzMilcbiAgICAgICAgICAgICAgICA/IFVpbnQzMkFycmF5XG4gICAgICAgICAgICAgICAgOiBtYXggPD0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJcbiAgICAgICAgICAgICAgICAgICAgPyBaZXJvQXJyYXlcbiAgICAgICAgICAgICAgICAgICAgOiBudWxsO1xuLyogYzggaWdub3JlIHN0b3AgKi9cbmNsYXNzIFplcm9BcnJheSBleHRlbmRzIEFycmF5IHtcbiAgICBjb25zdHJ1Y3RvcihzaXplKSB7XG4gICAgICAgIHN1cGVyKHNpemUpO1xuICAgICAgICB0aGlzLmZpbGwoMCk7XG4gICAgfVxufVxuY2xhc3MgU3RhY2sge1xuICAgIGhlYXA7XG4gICAgbGVuZ3RoO1xuICAgIC8vIHByaXZhdGUgY29uc3RydWN0b3JcbiAgICBzdGF0aWMgI2NvbnN0cnVjdGluZyA9IGZhbHNlO1xuICAgIHN0YXRpYyBjcmVhdGUobWF4KSB7XG4gICAgICAgIGNvbnN0IEhlYXBDbHMgPSBnZXRVaW50QXJyYXkobWF4KTtcbiAgICAgICAgaWYgKCFIZWFwQ2xzKVxuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICBTdGFjay4jY29uc3RydWN0aW5nID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgcyA9IG5ldyBTdGFjayhtYXgsIEhlYXBDbHMpO1xuICAgICAgICBTdGFjay4jY29uc3RydWN0aW5nID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBzO1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihtYXgsIEhlYXBDbHMpIHtcbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIGlmICghU3RhY2suI2NvbnN0cnVjdGluZykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW5zdGFudGlhdGUgU3RhY2sgdXNpbmcgU3RhY2suY3JlYXRlKG4pJyk7XG4gICAgICAgIH1cbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgdGhpcy5oZWFwID0gbmV3IEhlYXBDbHMobWF4KTtcbiAgICAgICAgdGhpcy5sZW5ndGggPSAwO1xuICAgIH1cbiAgICBwdXNoKG4pIHtcbiAgICAgICAgdGhpcy5oZWFwW3RoaXMubGVuZ3RoKytdID0gbjtcbiAgICB9XG4gICAgcG9wKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5oZWFwWy0tdGhpcy5sZW5ndGhdO1xuICAgIH1cbn1cbi8qKlxuICogRGVmYXVsdCBleHBvcnQsIHRoZSB0aGluZyB5b3UncmUgdXNpbmcgdGhpcyBtb2R1bGUgdG8gZ2V0LlxuICpcbiAqIFRoZSBgS2AgYW5kIGBWYCB0eXBlcyBkZWZpbmUgdGhlIGtleSBhbmQgdmFsdWUgdHlwZXMsIHJlc3BlY3RpdmVseS4gVGhlXG4gKiBvcHRpb25hbCBgRkNgIHR5cGUgZGVmaW5lcyB0aGUgdHlwZSBvZiB0aGUgYGNvbnRleHRgIG9iamVjdCBwYXNzZWQgdG9cbiAqIGBjYWNoZS5mZXRjaCgpYCBhbmQgYGNhY2hlLm1lbW8oKWAuXG4gKlxuICogS2V5cyBhbmQgdmFsdWVzICoqbXVzdCBub3QqKiBiZSBgbnVsbGAgb3IgYHVuZGVmaW5lZGAuXG4gKlxuICogQWxsIHByb3BlcnRpZXMgZnJvbSB0aGUgb3B0aW9ucyBvYmplY3QgKHdpdGggdGhlIGV4Y2VwdGlvbiBvZiBgbWF4YCxcbiAqIGBtYXhTaXplYCwgYGZldGNoTWV0aG9kYCwgYG1lbW9NZXRob2RgLCBgZGlzcG9zZWAgYW5kIGBkaXNwb3NlQWZ0ZXJgKSBhcmVcbiAqIGFkZGVkIGFzIG5vcm1hbCBwdWJsaWMgbWVtYmVycy4gKFRoZSBsaXN0ZWQgb3B0aW9ucyBhcmUgcmVhZC1vbmx5IGdldHRlcnMuKVxuICpcbiAqIENoYW5naW5nIGFueSBvZiB0aGVzZSB3aWxsIGFsdGVyIHRoZSBkZWZhdWx0cyBmb3Igc3Vic2VxdWVudCBtZXRob2QgY2FsbHMuXG4gKi9cbmNsYXNzIExSVUNhY2hlIHtcbiAgICAvLyBvcHRpb25zIHRoYXQgY2Fubm90IGJlIGNoYW5nZWQgd2l0aG91dCBkaXNhc3RlclxuICAgICNtYXg7XG4gICAgI21heFNpemU7XG4gICAgI2Rpc3Bvc2U7XG4gICAgI2Rpc3Bvc2VBZnRlcjtcbiAgICAjZmV0Y2hNZXRob2Q7XG4gICAgI21lbW9NZXRob2Q7XG4gICAgLyoqXG4gICAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLnR0bH1cbiAgICAgKi9cbiAgICB0dGw7XG4gICAgLyoqXG4gICAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLnR0bFJlc29sdXRpb259XG4gICAgICovXG4gICAgdHRsUmVzb2x1dGlvbjtcbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UudHRsQXV0b3B1cmdlfVxuICAgICAqL1xuICAgIHR0bEF1dG9wdXJnZTtcbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UudXBkYXRlQWdlT25HZXR9XG4gICAgICovXG4gICAgdXBkYXRlQWdlT25HZXQ7XG4gICAgLyoqXG4gICAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLnVwZGF0ZUFnZU9uSGFzfVxuICAgICAqL1xuICAgIHVwZGF0ZUFnZU9uSGFzO1xuICAgIC8qKlxuICAgICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5hbGxvd1N0YWxlfVxuICAgICAqL1xuICAgIGFsbG93U3RhbGU7XG4gICAgLyoqXG4gICAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLm5vRGlzcG9zZU9uU2V0fVxuICAgICAqL1xuICAgIG5vRGlzcG9zZU9uU2V0O1xuICAgIC8qKlxuICAgICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5ub1VwZGF0ZVRUTH1cbiAgICAgKi9cbiAgICBub1VwZGF0ZVRUTDtcbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UubWF4RW50cnlTaXplfVxuICAgICAqL1xuICAgIG1heEVudHJ5U2l6ZTtcbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2Uuc2l6ZUNhbGN1bGF0aW9ufVxuICAgICAqL1xuICAgIHNpemVDYWxjdWxhdGlvbjtcbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2Uubm9EZWxldGVPbkZldGNoUmVqZWN0aW9ufVxuICAgICAqL1xuICAgIG5vRGVsZXRlT25GZXRjaFJlamVjdGlvbjtcbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2Uubm9EZWxldGVPblN0YWxlR2V0fVxuICAgICAqL1xuICAgIG5vRGVsZXRlT25TdGFsZUdldDtcbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UuYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydH1cbiAgICAgKi9cbiAgICBhbGxvd1N0YWxlT25GZXRjaEFib3J0O1xuICAgIC8qKlxuICAgICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5hbGxvd1N0YWxlT25GZXRjaFJlamVjdGlvbn1cbiAgICAgKi9cbiAgICBhbGxvd1N0YWxlT25GZXRjaFJlamVjdGlvbjtcbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UuaWdub3JlRmV0Y2hBYm9ydH1cbiAgICAgKi9cbiAgICBpZ25vcmVGZXRjaEFib3J0O1xuICAgIC8vIGNvbXB1dGVkIHByb3BlcnRpZXNcbiAgICAjc2l6ZTtcbiAgICAjY2FsY3VsYXRlZFNpemU7XG4gICAgI2tleU1hcDtcbiAgICAja2V5TGlzdDtcbiAgICAjdmFsTGlzdDtcbiAgICAjbmV4dDtcbiAgICAjcHJldjtcbiAgICAjaGVhZDtcbiAgICAjdGFpbDtcbiAgICAjZnJlZTtcbiAgICAjZGlzcG9zZWQ7XG4gICAgI3NpemVzO1xuICAgICNzdGFydHM7XG4gICAgI3R0bHM7XG4gICAgI2hhc0Rpc3Bvc2U7XG4gICAgI2hhc0ZldGNoTWV0aG9kO1xuICAgICNoYXNEaXNwb3NlQWZ0ZXI7XG4gICAgLyoqXG4gICAgICogRG8gbm90IGNhbGwgdGhpcyBtZXRob2QgdW5sZXNzIHlvdSBuZWVkIHRvIGluc3BlY3QgdGhlXG4gICAgICogaW5uZXIgd29ya2luZ3Mgb2YgdGhlIGNhY2hlLiAgSWYgYW55dGhpbmcgcmV0dXJuZWQgYnkgdGhpc1xuICAgICAqIG9iamVjdCBpcyBtb2RpZmllZCBpbiBhbnkgd2F5LCBzdHJhbmdlIGJyZWFrYWdlIG1heSBvY2N1ci5cbiAgICAgKlxuICAgICAqIFRoZXNlIGZpZWxkcyBhcmUgcHJpdmF0ZSBmb3IgYSByZWFzb24hXG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBzdGF0aWMgdW5zYWZlRXhwb3NlSW50ZXJuYWxzKGMpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC8vIHByb3BlcnRpZXNcbiAgICAgICAgICAgIHN0YXJ0czogYy4jc3RhcnRzLFxuICAgICAgICAgICAgdHRsczogYy4jdHRscyxcbiAgICAgICAgICAgIHNpemVzOiBjLiNzaXplcyxcbiAgICAgICAgICAgIGtleU1hcDogYy4ja2V5TWFwLFxuICAgICAgICAgICAga2V5TGlzdDogYy4ja2V5TGlzdCxcbiAgICAgICAgICAgIHZhbExpc3Q6IGMuI3ZhbExpc3QsXG4gICAgICAgICAgICBuZXh0OiBjLiNuZXh0LFxuICAgICAgICAgICAgcHJldjogYy4jcHJldixcbiAgICAgICAgICAgIGdldCBoZWFkKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjLiNoZWFkO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldCB0YWlsKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjLiN0YWlsO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZyZWU6IGMuI2ZyZWUsXG4gICAgICAgICAgICAvLyBtZXRob2RzXG4gICAgICAgICAgICBpc0JhY2tncm91bmRGZXRjaDogKHApID0+IGMuI2lzQmFja2dyb3VuZEZldGNoKHApLFxuICAgICAgICAgICAgYmFja2dyb3VuZEZldGNoOiAoaywgaW5kZXgsIG9wdGlvbnMsIGNvbnRleHQpID0+IGMuI2JhY2tncm91bmRGZXRjaChrLCBpbmRleCwgb3B0aW9ucywgY29udGV4dCksXG4gICAgICAgICAgICBtb3ZlVG9UYWlsOiAoaW5kZXgpID0+IGMuI21vdmVUb1RhaWwoaW5kZXgpLFxuICAgICAgICAgICAgaW5kZXhlczogKG9wdGlvbnMpID0+IGMuI2luZGV4ZXMob3B0aW9ucyksXG4gICAgICAgICAgICByaW5kZXhlczogKG9wdGlvbnMpID0+IGMuI3JpbmRleGVzKG9wdGlvbnMpLFxuICAgICAgICAgICAgaXNTdGFsZTogKGluZGV4KSA9PiBjLiNpc1N0YWxlKGluZGV4KSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLy8gUHJvdGVjdGVkIHJlYWQtb25seSBtZW1iZXJzXG4gICAgLyoqXG4gICAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLm1heH0gKHJlYWQtb25seSlcbiAgICAgKi9cbiAgICBnZXQgbWF4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jbWF4O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UubWF4U2l6ZX0gKHJlYWQtb25seSlcbiAgICAgKi9cbiAgICBnZXQgbWF4U2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI21heFNpemU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSB0b3RhbCBjb21wdXRlZCBzaXplIG9mIGl0ZW1zIGluIHRoZSBjYWNoZSAocmVhZC1vbmx5KVxuICAgICAqL1xuICAgIGdldCBjYWxjdWxhdGVkU2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2NhbGN1bGF0ZWRTaXplO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIGl0ZW1zIHN0b3JlZCBpbiB0aGUgY2FjaGUgKHJlYWQtb25seSlcbiAgICAgKi9cbiAgICBnZXQgc2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3NpemU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5mZXRjaE1ldGhvZH0gKHJlYWQtb25seSlcbiAgICAgKi9cbiAgICBnZXQgZmV0Y2hNZXRob2QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNmZXRjaE1ldGhvZDtcbiAgICB9XG4gICAgZ2V0IG1lbW9NZXRob2QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNtZW1vTWV0aG9kO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UuZGlzcG9zZX0gKHJlYWQtb25seSlcbiAgICAgKi9cbiAgICBnZXQgZGlzcG9zZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2Rpc3Bvc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5kaXNwb3NlQWZ0ZXJ9IChyZWFkLW9ubHkpXG4gICAgICovXG4gICAgZ2V0IGRpc3Bvc2VBZnRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2Rpc3Bvc2VBZnRlcjtcbiAgICB9XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICBjb25zdCB7IG1heCA9IDAsIHR0bCwgdHRsUmVzb2x1dGlvbiA9IDEsIHR0bEF1dG9wdXJnZSwgdXBkYXRlQWdlT25HZXQsIHVwZGF0ZUFnZU9uSGFzLCBhbGxvd1N0YWxlLCBkaXNwb3NlLCBkaXNwb3NlQWZ0ZXIsIG5vRGlzcG9zZU9uU2V0LCBub1VwZGF0ZVRUTCwgbWF4U2l6ZSA9IDAsIG1heEVudHJ5U2l6ZSA9IDAsIHNpemVDYWxjdWxhdGlvbiwgZmV0Y2hNZXRob2QsIG1lbW9NZXRob2QsIG5vRGVsZXRlT25GZXRjaFJlamVjdGlvbiwgbm9EZWxldGVPblN0YWxlR2V0LCBhbGxvd1N0YWxlT25GZXRjaFJlamVjdGlvbiwgYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydCwgaWdub3JlRmV0Y2hBYm9ydCwgfSA9IG9wdGlvbnM7XG4gICAgICAgIGlmIChtYXggIT09IDAgJiYgIWlzUG9zSW50KG1heCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ21heCBvcHRpb24gbXVzdCBiZSBhIG5vbm5lZ2F0aXZlIGludGVnZXInKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBVaW50QXJyYXkgPSBtYXggPyBnZXRVaW50QXJyYXkobWF4KSA6IEFycmF5O1xuICAgICAgICBpZiAoIVVpbnRBcnJheSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIG1heCB2YWx1ZTogJyArIG1heCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4jbWF4ID0gbWF4O1xuICAgICAgICB0aGlzLiNtYXhTaXplID0gbWF4U2l6ZTtcbiAgICAgICAgdGhpcy5tYXhFbnRyeVNpemUgPSBtYXhFbnRyeVNpemUgfHwgdGhpcy4jbWF4U2l6ZTtcbiAgICAgICAgdGhpcy5zaXplQ2FsY3VsYXRpb24gPSBzaXplQ2FsY3VsYXRpb247XG4gICAgICAgIGlmICh0aGlzLnNpemVDYWxjdWxhdGlvbikge1xuICAgICAgICAgICAgaWYgKCF0aGlzLiNtYXhTaXplICYmICF0aGlzLm1heEVudHJ5U2l6ZSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2Nhbm5vdCBzZXQgc2l6ZUNhbGN1bGF0aW9uIHdpdGhvdXQgc2V0dGluZyBtYXhTaXplIG9yIG1heEVudHJ5U2l6ZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNpemVDYWxjdWxhdGlvbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3NpemVDYWxjdWxhdGlvbiBzZXQgdG8gbm9uLWZ1bmN0aW9uJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1lbW9NZXRob2QgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgdHlwZW9mIG1lbW9NZXRob2QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ21lbW9NZXRob2QgbXVzdCBiZSBhIGZ1bmN0aW9uIGlmIGRlZmluZWQnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiNtZW1vTWV0aG9kID0gbWVtb01ldGhvZDtcbiAgICAgICAgaWYgKGZldGNoTWV0aG9kICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIHR5cGVvZiBmZXRjaE1ldGhvZCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZmV0Y2hNZXRob2QgbXVzdCBiZSBhIGZ1bmN0aW9uIGlmIHNwZWNpZmllZCcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuI2ZldGNoTWV0aG9kID0gZmV0Y2hNZXRob2Q7XG4gICAgICAgIHRoaXMuI2hhc0ZldGNoTWV0aG9kID0gISFmZXRjaE1ldGhvZDtcbiAgICAgICAgdGhpcy4ja2V5TWFwID0gbmV3IE1hcCgpO1xuICAgICAgICB0aGlzLiNrZXlMaXN0ID0gbmV3IEFycmF5KG1heCkuZmlsbCh1bmRlZmluZWQpO1xuICAgICAgICB0aGlzLiN2YWxMaXN0ID0gbmV3IEFycmF5KG1heCkuZmlsbCh1bmRlZmluZWQpO1xuICAgICAgICB0aGlzLiNuZXh0ID0gbmV3IFVpbnRBcnJheShtYXgpO1xuICAgICAgICB0aGlzLiNwcmV2ID0gbmV3IFVpbnRBcnJheShtYXgpO1xuICAgICAgICB0aGlzLiNoZWFkID0gMDtcbiAgICAgICAgdGhpcy4jdGFpbCA9IDA7XG4gICAgICAgIHRoaXMuI2ZyZWUgPSBTdGFjay5jcmVhdGUobWF4KTtcbiAgICAgICAgdGhpcy4jc2l6ZSA9IDA7XG4gICAgICAgIHRoaXMuI2NhbGN1bGF0ZWRTaXplID0gMDtcbiAgICAgICAgaWYgKHR5cGVvZiBkaXNwb3NlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aGlzLiNkaXNwb3NlID0gZGlzcG9zZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGRpc3Bvc2VBZnRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhpcy4jZGlzcG9zZUFmdGVyID0gZGlzcG9zZUFmdGVyO1xuICAgICAgICAgICAgdGhpcy4jZGlzcG9zZWQgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuI2Rpc3Bvc2VBZnRlciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuI2Rpc3Bvc2VkID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuI2hhc0Rpc3Bvc2UgPSAhIXRoaXMuI2Rpc3Bvc2U7XG4gICAgICAgIHRoaXMuI2hhc0Rpc3Bvc2VBZnRlciA9ICEhdGhpcy4jZGlzcG9zZUFmdGVyO1xuICAgICAgICB0aGlzLm5vRGlzcG9zZU9uU2V0ID0gISFub0Rpc3Bvc2VPblNldDtcbiAgICAgICAgdGhpcy5ub1VwZGF0ZVRUTCA9ICEhbm9VcGRhdGVUVEw7XG4gICAgICAgIHRoaXMubm9EZWxldGVPbkZldGNoUmVqZWN0aW9uID0gISFub0RlbGV0ZU9uRmV0Y2hSZWplY3Rpb247XG4gICAgICAgIHRoaXMuYWxsb3dTdGFsZU9uRmV0Y2hSZWplY3Rpb24gPSAhIWFsbG93U3RhbGVPbkZldGNoUmVqZWN0aW9uO1xuICAgICAgICB0aGlzLmFsbG93U3RhbGVPbkZldGNoQWJvcnQgPSAhIWFsbG93U3RhbGVPbkZldGNoQWJvcnQ7XG4gICAgICAgIHRoaXMuaWdub3JlRmV0Y2hBYm9ydCA9ICEhaWdub3JlRmV0Y2hBYm9ydDtcbiAgICAgICAgLy8gTkI6IG1heEVudHJ5U2l6ZSBpcyBzZXQgdG8gbWF4U2l6ZSBpZiBpdCdzIHNldFxuICAgICAgICBpZiAodGhpcy5tYXhFbnRyeVNpemUgIT09IDApIHtcbiAgICAgICAgICAgIGlmICh0aGlzLiNtYXhTaXplICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc1Bvc0ludCh0aGlzLiNtYXhTaXplKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdtYXhTaXplIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIGlmIHNwZWNpZmllZCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghaXNQb3NJbnQodGhpcy5tYXhFbnRyeVNpemUpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbWF4RW50cnlTaXplIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIGlmIHNwZWNpZmllZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy4jaW5pdGlhbGl6ZVNpemVUcmFja2luZygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWxsb3dTdGFsZSA9ICEhYWxsb3dTdGFsZTtcbiAgICAgICAgdGhpcy5ub0RlbGV0ZU9uU3RhbGVHZXQgPSAhIW5vRGVsZXRlT25TdGFsZUdldDtcbiAgICAgICAgdGhpcy51cGRhdGVBZ2VPbkdldCA9ICEhdXBkYXRlQWdlT25HZXQ7XG4gICAgICAgIHRoaXMudXBkYXRlQWdlT25IYXMgPSAhIXVwZGF0ZUFnZU9uSGFzO1xuICAgICAgICB0aGlzLnR0bFJlc29sdXRpb24gPVxuICAgICAgICAgICAgaXNQb3NJbnQodHRsUmVzb2x1dGlvbikgfHwgdHRsUmVzb2x1dGlvbiA9PT0gMFxuICAgICAgICAgICAgICAgID8gdHRsUmVzb2x1dGlvblxuICAgICAgICAgICAgICAgIDogMTtcbiAgICAgICAgdGhpcy50dGxBdXRvcHVyZ2UgPSAhIXR0bEF1dG9wdXJnZTtcbiAgICAgICAgdGhpcy50dGwgPSB0dGwgfHwgMDtcbiAgICAgICAgaWYgKHRoaXMudHRsKSB7XG4gICAgICAgICAgICBpZiAoIWlzUG9zSW50KHRoaXMudHRsKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3R0bCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciBpZiBzcGVjaWZpZWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuI2luaXRpYWxpemVUVExUcmFja2luZygpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGRvIG5vdCBhbGxvdyBjb21wbGV0ZWx5IHVuYm91bmRlZCBjYWNoZXNcbiAgICAgICAgaWYgKHRoaXMuI21heCA9PT0gMCAmJiB0aGlzLnR0bCA9PT0gMCAmJiB0aGlzLiNtYXhTaXplID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBdCBsZWFzdCBvbmUgb2YgbWF4LCBtYXhTaXplLCBvciB0dGwgaXMgcmVxdWlyZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMudHRsQXV0b3B1cmdlICYmICF0aGlzLiNtYXggJiYgIXRoaXMuI21heFNpemUpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvZGUgPSAnTFJVX0NBQ0hFX1VOQk9VTkRFRCc7XG4gICAgICAgICAgICBpZiAoc2hvdWxkV2Fybihjb2RlKSkge1xuICAgICAgICAgICAgICAgIHdhcm5lZC5hZGQoY29kZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgbXNnID0gJ1RUTCBjYWNoaW5nIHdpdGhvdXQgdHRsQXV0b3B1cmdlLCBtYXgsIG9yIG1heFNpemUgY2FuICcgK1xuICAgICAgICAgICAgICAgICAgICAncmVzdWx0IGluIHVuYm91bmRlZCBtZW1vcnkgY29uc3VtcHRpb24uJztcbiAgICAgICAgICAgICAgICBlbWl0V2FybmluZyhtc2csICdVbmJvdW5kZWRDYWNoZVdhcm5pbmcnLCBjb2RlLCBMUlVDYWNoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBudW1iZXIgb2YgbXMgbGVmdCBpbiB0aGUgaXRlbSdzIFRUTC4gSWYgaXRlbSBpcyBub3QgaW4gY2FjaGUsXG4gICAgICogcmV0dXJucyBgMGAuIFJldHVybnMgYEluZmluaXR5YCBpZiBpdGVtIGlzIGluIGNhY2hlIHdpdGhvdXQgYSBkZWZpbmVkIFRUTC5cbiAgICAgKi9cbiAgICBnZXRSZW1haW5pbmdUVEwoa2V5KSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNrZXlNYXAuaGFzKGtleSkgPyBJbmZpbml0eSA6IDA7XG4gICAgfVxuICAgICNpbml0aWFsaXplVFRMVHJhY2tpbmcoKSB7XG4gICAgICAgIGNvbnN0IHR0bHMgPSBuZXcgWmVyb0FycmF5KHRoaXMuI21heCk7XG4gICAgICAgIGNvbnN0IHN0YXJ0cyA9IG5ldyBaZXJvQXJyYXkodGhpcy4jbWF4KTtcbiAgICAgICAgdGhpcy4jdHRscyA9IHR0bHM7XG4gICAgICAgIHRoaXMuI3N0YXJ0cyA9IHN0YXJ0cztcbiAgICAgICAgdGhpcy4jc2V0SXRlbVRUTCA9IChpbmRleCwgdHRsLCBzdGFydCA9IHBlcmYubm93KCkpID0+IHtcbiAgICAgICAgICAgIHN0YXJ0c1tpbmRleF0gPSB0dGwgIT09IDAgPyBzdGFydCA6IDA7XG4gICAgICAgICAgICB0dGxzW2luZGV4XSA9IHR0bDtcbiAgICAgICAgICAgIGlmICh0dGwgIT09IDAgJiYgdGhpcy50dGxBdXRvcHVyZ2UpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLiNpc1N0YWxlKGluZGV4KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jZGVsZXRlKHRoaXMuI2tleUxpc3RbaW5kZXhdLCAnZXhwaXJlJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCB0dGwgKyAxKTtcbiAgICAgICAgICAgICAgICAvLyB1bnJlZigpIG5vdCBzdXBwb3J0ZWQgb24gYWxsIHBsYXRmb3Jtc1xuICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICAgICAgICAgIGlmICh0LnVucmVmKSB7XG4gICAgICAgICAgICAgICAgICAgIHQudW5yZWYoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy4jdXBkYXRlSXRlbUFnZSA9IGluZGV4ID0+IHtcbiAgICAgICAgICAgIHN0YXJ0c1tpbmRleF0gPSB0dGxzW2luZGV4XSAhPT0gMCA/IHBlcmYubm93KCkgOiAwO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLiNzdGF0dXNUVEwgPSAoc3RhdHVzLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKHR0bHNbaW5kZXhdKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdHRsID0gdHRsc1tpbmRleF07XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSBzdGFydHNbaW5kZXhdO1xuICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBuZXh0ICovXG4gICAgICAgICAgICAgICAgaWYgKCF0dGwgfHwgIXN0YXJ0KVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgc3RhdHVzLnR0bCA9IHR0bDtcbiAgICAgICAgICAgICAgICBzdGF0dXMuc3RhcnQgPSBzdGFydDtcbiAgICAgICAgICAgICAgICBzdGF0dXMubm93ID0gY2FjaGVkTm93IHx8IGdldE5vdygpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFnZSA9IHN0YXR1cy5ub3cgLSBzdGFydDtcbiAgICAgICAgICAgICAgICBzdGF0dXMucmVtYWluaW5nVFRMID0gdHRsIC0gYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICAvLyBkZWJvdW5jZSBjYWxscyB0byBwZXJmLm5vdygpIHRvIDFzIHNvIHdlJ3JlIG5vdCBoaXR0aW5nXG4gICAgICAgIC8vIHRoYXQgY29zdGx5IGNhbGwgcmVwZWF0ZWRseS5cbiAgICAgICAgbGV0IGNhY2hlZE5vdyA9IDA7XG4gICAgICAgIGNvbnN0IGdldE5vdyA9ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG4gPSBwZXJmLm5vdygpO1xuICAgICAgICAgICAgaWYgKHRoaXMudHRsUmVzb2x1dGlvbiA+IDApIHtcbiAgICAgICAgICAgICAgICBjYWNoZWROb3cgPSBuO1xuICAgICAgICAgICAgICAgIGNvbnN0IHQgPSBzZXRUaW1lb3V0KCgpID0+IChjYWNoZWROb3cgPSAwKSwgdGhpcy50dGxSZXNvbHV0aW9uKTtcbiAgICAgICAgICAgICAgICAvLyBub3QgYXZhaWxhYmxlIG9uIGFsbCBwbGF0Zm9ybXNcbiAgICAgICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgICAgICAgICBpZiAodC51bnJlZikge1xuICAgICAgICAgICAgICAgICAgICB0LnVucmVmKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbjtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5nZXRSZW1haW5pbmdUVEwgPSBrZXkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLiNrZXlNYXAuZ2V0KGtleSk7XG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdHRsID0gdHRsc1tpbmRleF07XG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHN0YXJ0c1tpbmRleF07XG4gICAgICAgICAgICBpZiAoIXR0bCB8fCAhc3RhcnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gSW5maW5pdHk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBhZ2UgPSAoY2FjaGVkTm93IHx8IGdldE5vdygpKSAtIHN0YXJ0O1xuICAgICAgICAgICAgcmV0dXJuIHR0bCAtIGFnZTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy4jaXNTdGFsZSA9IGluZGV4ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHMgPSBzdGFydHNbaW5kZXhdO1xuICAgICAgICAgICAgY29uc3QgdCA9IHR0bHNbaW5kZXhdO1xuICAgICAgICAgICAgcmV0dXJuICEhdCAmJiAhIXMgJiYgKGNhY2hlZE5vdyB8fCBnZXROb3coKSkgLSBzID4gdDtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLy8gY29uZGl0aW9uYWxseSBzZXQgcHJpdmF0ZSBtZXRob2RzIHJlbGF0ZWQgdG8gVFRMXG4gICAgI3VwZGF0ZUl0ZW1BZ2UgPSAoKSA9PiB7IH07XG4gICAgI3N0YXR1c1RUTCA9ICgpID0+IHsgfTtcbiAgICAjc2V0SXRlbVRUTCA9ICgpID0+IHsgfTtcbiAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICNpc1N0YWxlID0gKCkgPT4gZmFsc2U7XG4gICAgI2luaXRpYWxpemVTaXplVHJhY2tpbmcoKSB7XG4gICAgICAgIGNvbnN0IHNpemVzID0gbmV3IFplcm9BcnJheSh0aGlzLiNtYXgpO1xuICAgICAgICB0aGlzLiNjYWxjdWxhdGVkU2l6ZSA9IDA7XG4gICAgICAgIHRoaXMuI3NpemVzID0gc2l6ZXM7XG4gICAgICAgIHRoaXMuI3JlbW92ZUl0ZW1TaXplID0gaW5kZXggPT4ge1xuICAgICAgICAgICAgdGhpcy4jY2FsY3VsYXRlZFNpemUgLT0gc2l6ZXNbaW5kZXhdO1xuICAgICAgICAgICAgc2l6ZXNbaW5kZXhdID0gMDtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy4jcmVxdWlyZVNpemUgPSAoaywgdiwgc2l6ZSwgc2l6ZUNhbGN1bGF0aW9uKSA9PiB7XG4gICAgICAgICAgICAvLyBwcm92aXNpb25hbGx5IGFjY2VwdCBiYWNrZ3JvdW5kIGZldGNoZXMuXG4gICAgICAgICAgICAvLyBhY3R1YWwgdmFsdWUgc2l6ZSB3aWxsIGJlIGNoZWNrZWQgd2hlbiB0aGV5IHJldHVybi5cbiAgICAgICAgICAgIGlmICh0aGlzLiNpc0JhY2tncm91bmRGZXRjaCh2KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpc1Bvc0ludChzaXplKSkge1xuICAgICAgICAgICAgICAgIGlmIChzaXplQ2FsY3VsYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzaXplQ2FsY3VsYXRpb24gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3NpemVDYWxjdWxhdGlvbiBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzaXplID0gc2l6ZUNhbGN1bGF0aW9uKHYsIGspO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzUG9zSW50KHNpemUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdzaXplQ2FsY3VsYXRpb24gcmV0dXJuIGludmFsaWQgKGV4cGVjdCBwb3NpdGl2ZSBpbnRlZ2VyKScpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnZhbGlkIHNpemUgdmFsdWUgKG11c3QgYmUgcG9zaXRpdmUgaW50ZWdlcikuICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1doZW4gbWF4U2l6ZSBvciBtYXhFbnRyeVNpemUgaXMgdXNlZCwgc2l6ZUNhbGN1bGF0aW9uICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ29yIHNpemUgbXVzdCBiZSBzZXQuJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHNpemU7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuI2FkZEl0ZW1TaXplID0gKGluZGV4LCBzaXplLCBzdGF0dXMpID0+IHtcbiAgICAgICAgICAgIHNpemVzW2luZGV4XSA9IHNpemU7XG4gICAgICAgICAgICBpZiAodGhpcy4jbWF4U2l6ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1heFNpemUgPSB0aGlzLiNtYXhTaXplIC0gc2l6ZXNbaW5kZXhdO1xuICAgICAgICAgICAgICAgIHdoaWxlICh0aGlzLiNjYWxjdWxhdGVkU2l6ZSA+IG1heFNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jZXZpY3QodHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy4jY2FsY3VsYXRlZFNpemUgKz0gc2l6ZXNbaW5kZXhdO1xuICAgICAgICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICAgICAgICAgIHN0YXR1cy5lbnRyeVNpemUgPSBzaXplO1xuICAgICAgICAgICAgICAgIHN0YXR1cy50b3RhbENhbGN1bGF0ZWRTaXplID0gdGhpcy4jY2FsY3VsYXRlZFNpemU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuICAgICNyZW1vdmVJdGVtU2l6ZSA9IF9pID0+IHsgfTtcbiAgICAjYWRkSXRlbVNpemUgPSAoX2ksIF9zLCBfc3QpID0+IHsgfTtcbiAgICAjcmVxdWlyZVNpemUgPSAoX2ssIF92LCBzaXplLCBzaXplQ2FsY3VsYXRpb24pID0+IHtcbiAgICAgICAgaWYgKHNpemUgfHwgc2l6ZUNhbGN1bGF0aW9uKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdjYW5ub3Qgc2V0IHNpemUgd2l0aG91dCBzZXR0aW5nIG1heFNpemUgb3IgbWF4RW50cnlTaXplIG9uIGNhY2hlJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfTtcbiAgICAqI2luZGV4ZXMoeyBhbGxvd1N0YWxlID0gdGhpcy5hbGxvd1N0YWxlIH0gPSB7fSkge1xuICAgICAgICBpZiAodGhpcy4jc2l6ZSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuI3RhaWw7IHRydWU7KSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLiNpc1ZhbGlkSW5kZXgoaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChhbGxvd1N0YWxlIHx8ICF0aGlzLiNpc1N0YWxlKGkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIGk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpID09PSB0aGlzLiNoZWFkKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaSA9IHRoaXMuI3ByZXZbaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgICojcmluZGV4ZXMoeyBhbGxvd1N0YWxlID0gdGhpcy5hbGxvd1N0YWxlIH0gPSB7fSkge1xuICAgICAgICBpZiAodGhpcy4jc2l6ZSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuI2hlYWQ7IHRydWU7KSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLiNpc1ZhbGlkSW5kZXgoaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChhbGxvd1N0YWxlIHx8ICF0aGlzLiNpc1N0YWxlKGkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIGk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpID09PSB0aGlzLiN0YWlsKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaSA9IHRoaXMuI25leHRbaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgICNpc1ZhbGlkSW5kZXgoaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIChpbmRleCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICB0aGlzLiNrZXlNYXAuZ2V0KHRoaXMuI2tleUxpc3RbaW5kZXhdKSA9PT0gaW5kZXgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYSBnZW5lcmF0b3IgeWllbGRpbmcgYFtrZXksIHZhbHVlXWAgcGFpcnMsXG4gICAgICogaW4gb3JkZXIgZnJvbSBtb3N0IHJlY2VudGx5IHVzZWQgdG8gbGVhc3QgcmVjZW50bHkgdXNlZC5cbiAgICAgKi9cbiAgICAqZW50cmllcygpIHtcbiAgICAgICAgZm9yIChjb25zdCBpIG9mIHRoaXMuI2luZGV4ZXMoKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuI3ZhbExpc3RbaV0gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgIHRoaXMuI2tleUxpc3RbaV0gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICF0aGlzLiNpc0JhY2tncm91bmRGZXRjaCh0aGlzLiN2YWxMaXN0W2ldKSkge1xuICAgICAgICAgICAgICAgIHlpZWxkIFt0aGlzLiNrZXlMaXN0W2ldLCB0aGlzLiN2YWxMaXN0W2ldXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbnZlcnNlIG9yZGVyIHZlcnNpb24gb2Yge0BsaW5rIExSVUNhY2hlLmVudHJpZXN9XG4gICAgICpcbiAgICAgKiBSZXR1cm4gYSBnZW5lcmF0b3IgeWllbGRpbmcgYFtrZXksIHZhbHVlXWAgcGFpcnMsXG4gICAgICogaW4gb3JkZXIgZnJvbSBsZWFzdCByZWNlbnRseSB1c2VkIHRvIG1vc3QgcmVjZW50bHkgdXNlZC5cbiAgICAgKi9cbiAgICAqcmVudHJpZXMoKSB7XG4gICAgICAgIGZvciAoY29uc3QgaSBvZiB0aGlzLiNyaW5kZXhlcygpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy4jdmFsTGlzdFtpXSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgdGhpcy4ja2V5TGlzdFtpXSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgIXRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHRoaXMuI3ZhbExpc3RbaV0pKSB7XG4gICAgICAgICAgICAgICAgeWllbGQgW3RoaXMuI2tleUxpc3RbaV0sIHRoaXMuI3ZhbExpc3RbaV1dO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiBhIGdlbmVyYXRvciB5aWVsZGluZyB0aGUga2V5cyBpbiB0aGUgY2FjaGUsXG4gICAgICogaW4gb3JkZXIgZnJvbSBtb3N0IHJlY2VudGx5IHVzZWQgdG8gbGVhc3QgcmVjZW50bHkgdXNlZC5cbiAgICAgKi9cbiAgICAqa2V5cygpIHtcbiAgICAgICAgZm9yIChjb25zdCBpIG9mIHRoaXMuI2luZGV4ZXMoKSkge1xuICAgICAgICAgICAgY29uc3QgayA9IHRoaXMuI2tleUxpc3RbaV07XG4gICAgICAgICAgICBpZiAoayAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgIXRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHRoaXMuI3ZhbExpc3RbaV0pKSB7XG4gICAgICAgICAgICAgICAgeWllbGQgaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbnZlcnNlIG9yZGVyIHZlcnNpb24gb2Yge0BsaW5rIExSVUNhY2hlLmtleXN9XG4gICAgICpcbiAgICAgKiBSZXR1cm4gYSBnZW5lcmF0b3IgeWllbGRpbmcgdGhlIGtleXMgaW4gdGhlIGNhY2hlLFxuICAgICAqIGluIG9yZGVyIGZyb20gbGVhc3QgcmVjZW50bHkgdXNlZCB0byBtb3N0IHJlY2VudGx5IHVzZWQuXG4gICAgICovXG4gICAgKnJrZXlzKCkge1xuICAgICAgICBmb3IgKGNvbnN0IGkgb2YgdGhpcy4jcmluZGV4ZXMoKSkge1xuICAgICAgICAgICAgY29uc3QgayA9IHRoaXMuI2tleUxpc3RbaV07XG4gICAgICAgICAgICBpZiAoayAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgIXRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHRoaXMuI3ZhbExpc3RbaV0pKSB7XG4gICAgICAgICAgICAgICAgeWllbGQgaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYSBnZW5lcmF0b3IgeWllbGRpbmcgdGhlIHZhbHVlcyBpbiB0aGUgY2FjaGUsXG4gICAgICogaW4gb3JkZXIgZnJvbSBtb3N0IHJlY2VudGx5IHVzZWQgdG8gbGVhc3QgcmVjZW50bHkgdXNlZC5cbiAgICAgKi9cbiAgICAqdmFsdWVzKCkge1xuICAgICAgICBmb3IgKGNvbnN0IGkgb2YgdGhpcy4jaW5kZXhlcygpKSB7XG4gICAgICAgICAgICBjb25zdCB2ID0gdGhpcy4jdmFsTGlzdFtpXTtcbiAgICAgICAgICAgIGlmICh2ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAhdGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2godGhpcy4jdmFsTGlzdFtpXSkpIHtcbiAgICAgICAgICAgICAgICB5aWVsZCB0aGlzLiN2YWxMaXN0W2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEludmVyc2Ugb3JkZXIgdmVyc2lvbiBvZiB7QGxpbmsgTFJVQ2FjaGUudmFsdWVzfVxuICAgICAqXG4gICAgICogUmV0dXJuIGEgZ2VuZXJhdG9yIHlpZWxkaW5nIHRoZSB2YWx1ZXMgaW4gdGhlIGNhY2hlLFxuICAgICAqIGluIG9yZGVyIGZyb20gbGVhc3QgcmVjZW50bHkgdXNlZCB0byBtb3N0IHJlY2VudGx5IHVzZWQuXG4gICAgICovXG4gICAgKnJ2YWx1ZXMoKSB7XG4gICAgICAgIGZvciAoY29uc3QgaSBvZiB0aGlzLiNyaW5kZXhlcygpKSB7XG4gICAgICAgICAgICBjb25zdCB2ID0gdGhpcy4jdmFsTGlzdFtpXTtcbiAgICAgICAgICAgIGlmICh2ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAhdGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2godGhpcy4jdmFsTGlzdFtpXSkpIHtcbiAgICAgICAgICAgICAgICB5aWVsZCB0aGlzLiN2YWxMaXN0W2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEl0ZXJhdGluZyBvdmVyIHRoZSBjYWNoZSBpdHNlbGYgeWllbGRzIHRoZSBzYW1lIHJlc3VsdHMgYXNcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUuZW50cmllc31cbiAgICAgKi9cbiAgICBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW50cmllcygpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBIFN0cmluZyB2YWx1ZSB0aGF0IGlzIHVzZWQgaW4gdGhlIGNyZWF0aW9uIG9mIHRoZSBkZWZhdWx0IHN0cmluZ1xuICAgICAqIGRlc2NyaXB0aW9uIG9mIGFuIG9iamVjdC4gQ2FsbGVkIGJ5IHRoZSBidWlsdC1pbiBtZXRob2RcbiAgICAgKiBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AuXG4gICAgICovXG4gICAgW1N5bWJvbC50b1N0cmluZ1RhZ10gPSAnTFJVQ2FjaGUnO1xuICAgIC8qKlxuICAgICAqIEZpbmQgYSB2YWx1ZSBmb3Igd2hpY2ggdGhlIHN1cHBsaWVkIGZuIG1ldGhvZCByZXR1cm5zIGEgdHJ1dGh5IHZhbHVlLFxuICAgICAqIHNpbWlsYXIgdG8gYEFycmF5LmZpbmQoKWAuIGZuIGlzIGNhbGxlZCBhcyBgZm4odmFsdWUsIGtleSwgY2FjaGUpYC5cbiAgICAgKi9cbiAgICBmaW5kKGZuLCBnZXRPcHRpb25zID0ge30pIHtcbiAgICAgICAgZm9yIChjb25zdCBpIG9mIHRoaXMuI2luZGV4ZXMoKSkge1xuICAgICAgICAgICAgY29uc3QgdiA9IHRoaXMuI3ZhbExpc3RbaV07XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHYpXG4gICAgICAgICAgICAgICAgPyB2Ll9fc3RhbGVXaGlsZUZldGNoaW5nXG4gICAgICAgICAgICAgICAgOiB2O1xuICAgICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBpZiAoZm4odmFsdWUsIHRoaXMuI2tleUxpc3RbaV0sIHRoaXMpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KHRoaXMuI2tleUxpc3RbaV0sIGdldE9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENhbGwgdGhlIHN1cHBsaWVkIGZ1bmN0aW9uIG9uIGVhY2ggaXRlbSBpbiB0aGUgY2FjaGUsIGluIG9yZGVyIGZyb20gbW9zdFxuICAgICAqIHJlY2VudGx5IHVzZWQgdG8gbGVhc3QgcmVjZW50bHkgdXNlZC5cbiAgICAgKlxuICAgICAqIGBmbmAgaXMgY2FsbGVkIGFzIGBmbih2YWx1ZSwga2V5LCBjYWNoZSlgLlxuICAgICAqXG4gICAgICogSWYgYHRoaXNwYCBpcyBwcm92aWRlZCwgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgaW4gdGhlIGB0aGlzYC1jb250ZXh0IG9mXG4gICAgICogdGhlIHByb3ZpZGVkIG9iamVjdCwgb3IgdGhlIGNhY2hlIGlmIG5vIGB0aGlzcGAgb2JqZWN0IGlzIHByb3ZpZGVkLlxuICAgICAqXG4gICAgICogRG9lcyBub3QgdXBkYXRlIGFnZSBvciByZWNlbnR5IG9mIHVzZSwgb3IgaXRlcmF0ZSBvdmVyIHN0YWxlIHZhbHVlcy5cbiAgICAgKi9cbiAgICBmb3JFYWNoKGZuLCB0aGlzcCA9IHRoaXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBpIG9mIHRoaXMuI2luZGV4ZXMoKSkge1xuICAgICAgICAgICAgY29uc3QgdiA9IHRoaXMuI3ZhbExpc3RbaV07XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHYpXG4gICAgICAgICAgICAgICAgPyB2Ll9fc3RhbGVXaGlsZUZldGNoaW5nXG4gICAgICAgICAgICAgICAgOiB2O1xuICAgICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBmbi5jYWxsKHRoaXNwLCB2YWx1ZSwgdGhpcy4ja2V5TGlzdFtpXSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIHNhbWUgYXMge0BsaW5rIExSVUNhY2hlLmZvckVhY2h9IGJ1dCBpdGVtcyBhcmUgaXRlcmF0ZWQgb3ZlciBpblxuICAgICAqIHJldmVyc2Ugb3JkZXIuICAoaWUsIGxlc3MgcmVjZW50bHkgdXNlZCBpdGVtcyBhcmUgaXRlcmF0ZWQgb3ZlciBmaXJzdC4pXG4gICAgICovXG4gICAgcmZvckVhY2goZm4sIHRoaXNwID0gdGhpcykge1xuICAgICAgICBmb3IgKGNvbnN0IGkgb2YgdGhpcy4jcmluZGV4ZXMoKSkge1xuICAgICAgICAgICAgY29uc3QgdiA9IHRoaXMuI3ZhbExpc3RbaV07XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHYpXG4gICAgICAgICAgICAgICAgPyB2Ll9fc3RhbGVXaGlsZUZldGNoaW5nXG4gICAgICAgICAgICAgICAgOiB2O1xuICAgICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBmbi5jYWxsKHRoaXNwLCB2YWx1ZSwgdGhpcy4ja2V5TGlzdFtpXSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVsZXRlIGFueSBzdGFsZSBlbnRyaWVzLiBSZXR1cm5zIHRydWUgaWYgYW55dGhpbmcgd2FzIHJlbW92ZWQsXG4gICAgICogZmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIHB1cmdlU3RhbGUoKSB7XG4gICAgICAgIGxldCBkZWxldGVkID0gZmFsc2U7XG4gICAgICAgIGZvciAoY29uc3QgaSBvZiB0aGlzLiNyaW5kZXhlcyh7IGFsbG93U3RhbGU6IHRydWUgfSkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLiNpc1N0YWxlKGkpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jZGVsZXRlKHRoaXMuI2tleUxpc3RbaV0sICdleHBpcmUnKTtcbiAgICAgICAgICAgICAgICBkZWxldGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVsZXRlZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBleHRlbmRlZCBpbmZvIGFib3V0IGEgZ2l2ZW4gZW50cnksIHRvIGdldCBpdHMgdmFsdWUsIHNpemUsIGFuZFxuICAgICAqIFRUTCBpbmZvIHNpbXVsdGFuZW91c2x5LiBSZXR1cm5zIGB1bmRlZmluZWRgIGlmIHRoZSBrZXkgaXMgbm90IHByZXNlbnQuXG4gICAgICpcbiAgICAgKiBVbmxpa2Uge0BsaW5rIExSVUNhY2hlI2R1bXB9LCB3aGljaCBpcyBkZXNpZ25lZCB0byBiZSBwb3J0YWJsZSBhbmQgc3Vydml2ZVxuICAgICAqIHNlcmlhbGl6YXRpb24sIHRoZSBgc3RhcnRgIHZhbHVlIGlzIGFsd2F5cyB0aGUgY3VycmVudCB0aW1lc3RhbXAsIGFuZCB0aGVcbiAgICAgKiBgdHRsYCBpcyBhIGNhbGN1bGF0ZWQgcmVtYWluaW5nIHRpbWUgdG8gbGl2ZSAobmVnYXRpdmUgaWYgZXhwaXJlZCkuXG4gICAgICpcbiAgICAgKiBBbHdheXMgcmV0dXJucyBzdGFsZSB2YWx1ZXMsIGlmIHRoZWlyIGluZm8gaXMgZm91bmQgaW4gdGhlIGNhY2hlLCBzbyBiZVxuICAgICAqIHN1cmUgdG8gY2hlY2sgZm9yIGV4cGlyYXRpb25zIChpZSwgYSBuZWdhdGl2ZSB7QGxpbmsgTFJVQ2FjaGUuRW50cnkjdHRsfSlcbiAgICAgKiBpZiByZWxldmFudC5cbiAgICAgKi9cbiAgICBpbmZvKGtleSkge1xuICAgICAgICBjb25zdCBpID0gdGhpcy4ja2V5TWFwLmdldChrZXkpO1xuICAgICAgICBpZiAoaSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgdiA9IHRoaXMuI3ZhbExpc3RbaV07XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2godilcbiAgICAgICAgICAgID8gdi5fX3N0YWxlV2hpbGVGZXRjaGluZ1xuICAgICAgICAgICAgOiB2O1xuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IGVudHJ5ID0geyB2YWx1ZSB9O1xuICAgICAgICBpZiAodGhpcy4jdHRscyAmJiB0aGlzLiNzdGFydHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHR0bCA9IHRoaXMuI3R0bHNbaV07XG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMuI3N0YXJ0c1tpXTtcbiAgICAgICAgICAgIGlmICh0dGwgJiYgc3RhcnQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZW1haW4gPSB0dGwgLSAocGVyZi5ub3coKSAtIHN0YXJ0KTtcbiAgICAgICAgICAgICAgICBlbnRyeS50dGwgPSByZW1haW47XG4gICAgICAgICAgICAgICAgZW50cnkuc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLiNzaXplcykge1xuICAgICAgICAgICAgZW50cnkuc2l6ZSA9IHRoaXMuI3NpemVzW2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbnRyeTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIGFuIGFycmF5IG9mIFtrZXksIHtAbGluayBMUlVDYWNoZS5FbnRyeX1dIHR1cGxlcyB3aGljaCBjYW4gYmVcbiAgICAgKiBwYXNzZWQgdG8ge0BsaW5rIExSTFVDYWNoZSNsb2FkfS5cbiAgICAgKlxuICAgICAqIFRoZSBgc3RhcnRgIGZpZWxkcyBhcmUgY2FsY3VsYXRlZCByZWxhdGl2ZSB0byBhIHBvcnRhYmxlIGBEYXRlLm5vdygpYFxuICAgICAqIHRpbWVzdGFtcCwgZXZlbiBpZiBgcGVyZm9ybWFuY2Uubm93KClgIGlzIGF2YWlsYWJsZS5cbiAgICAgKlxuICAgICAqIFN0YWxlIGVudHJpZXMgYXJlIGFsd2F5cyBpbmNsdWRlZCBpbiB0aGUgYGR1bXBgLCBldmVuIGlmXG4gICAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLmFsbG93U3RhbGV9IGlzIGZhbHNlLlxuICAgICAqXG4gICAgICogTm90ZTogdGhpcyByZXR1cm5zIGFuIGFjdHVhbCBhcnJheSwgbm90IGEgZ2VuZXJhdG9yLCBzbyBpdCBjYW4gYmUgbW9yZVxuICAgICAqIGVhc2lseSBwYXNzZWQgYXJvdW5kLlxuICAgICAqL1xuICAgIGR1bXAoKSB7XG4gICAgICAgIGNvbnN0IGFyciA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGkgb2YgdGhpcy4jaW5kZXhlcyh7IGFsbG93U3RhbGU6IHRydWUgfSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IHRoaXMuI2tleUxpc3RbaV07XG4gICAgICAgICAgICBjb25zdCB2ID0gdGhpcy4jdmFsTGlzdFtpXTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2godilcbiAgICAgICAgICAgICAgICA/IHYuX19zdGFsZVdoaWxlRmV0Y2hpbmdcbiAgICAgICAgICAgICAgICA6IHY7XG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCBrZXkgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0geyB2YWx1ZSB9O1xuICAgICAgICAgICAgaWYgKHRoaXMuI3R0bHMgJiYgdGhpcy4jc3RhcnRzKSB7XG4gICAgICAgICAgICAgICAgZW50cnkudHRsID0gdGhpcy4jdHRsc1tpXTtcbiAgICAgICAgICAgICAgICAvLyBhbHdheXMgZHVtcCB0aGUgc3RhcnQgcmVsYXRpdmUgdG8gYSBwb3J0YWJsZSB0aW1lc3RhbXBcbiAgICAgICAgICAgICAgICAvLyBpdCdzIG9rIGZvciB0aGlzIHRvIGJlIGEgYml0IHNsb3csIGl0J3MgYSByYXJlIG9wZXJhdGlvbi5cbiAgICAgICAgICAgICAgICBjb25zdCBhZ2UgPSBwZXJmLm5vdygpIC0gdGhpcy4jc3RhcnRzW2ldO1xuICAgICAgICAgICAgICAgIGVudHJ5LnN0YXJ0ID0gTWF0aC5mbG9vcihEYXRlLm5vdygpIC0gYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLiNzaXplcykge1xuICAgICAgICAgICAgICAgIGVudHJ5LnNpemUgPSB0aGlzLiNzaXplc1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFyci51bnNoaWZ0KFtrZXksIGVudHJ5XSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFycjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVzZXQgdGhlIGNhY2hlIGFuZCBsb2FkIGluIHRoZSBpdGVtcyBpbiBlbnRyaWVzIGluIHRoZSBvcmRlciBsaXN0ZWQuXG4gICAgICpcbiAgICAgKiBUaGUgc2hhcGUgb2YgdGhlIHJlc3VsdGluZyBjYWNoZSBtYXkgYmUgZGlmZmVyZW50IGlmIHRoZSBzYW1lIG9wdGlvbnMgYXJlXG4gICAgICogbm90IHVzZWQgaW4gYm90aCBjYWNoZXMuXG4gICAgICpcbiAgICAgKiBUaGUgYHN0YXJ0YCBmaWVsZHMgYXJlIGFzc3VtZWQgdG8gYmUgY2FsY3VsYXRlZCByZWxhdGl2ZSB0byBhIHBvcnRhYmxlXG4gICAgICogYERhdGUubm93KClgIHRpbWVzdGFtcCwgZXZlbiBpZiBgcGVyZm9ybWFuY2Uubm93KClgIGlzIGF2YWlsYWJsZS5cbiAgICAgKi9cbiAgICBsb2FkKGFycikge1xuICAgICAgICB0aGlzLmNsZWFyKCk7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgZW50cnldIG9mIGFycikge1xuICAgICAgICAgICAgaWYgKGVudHJ5LnN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgLy8gZW50cnkuc3RhcnQgaXMgYSBwb3J0YWJsZSB0aW1lc3RhbXAsIGJ1dCB3ZSBtYXkgYmUgdXNpbmdcbiAgICAgICAgICAgICAgICAvLyBub2RlJ3MgcGVyZm9ybWFuY2Uubm93KCksIHNvIGNhbGN1bGF0ZSB0aGUgb2Zmc2V0LCBzbyB0aGF0XG4gICAgICAgICAgICAgICAgLy8gd2UgZ2V0IHRoZSBpbnRlbmRlZCByZW1haW5pbmcgVFRMLCBubyBtYXR0ZXIgaG93IGxvbmcgaXQnc1xuICAgICAgICAgICAgICAgIC8vIGJlZW4gb24gaWNlLlxuICAgICAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAgICAgLy8gaXQncyBvayBmb3IgdGhpcyB0byBiZSBhIGJpdCBzbG93LCBpdCdzIGEgcmFyZSBvcGVyYXRpb24uXG4gICAgICAgICAgICAgICAgY29uc3QgYWdlID0gRGF0ZS5ub3coKSAtIGVudHJ5LnN0YXJ0O1xuICAgICAgICAgICAgICAgIGVudHJ5LnN0YXJ0ID0gcGVyZi5ub3coKSAtIGFnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2V0KGtleSwgZW50cnkudmFsdWUsIGVudHJ5KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGQgYSB2YWx1ZSB0byB0aGUgY2FjaGUuXG4gICAgICpcbiAgICAgKiBOb3RlOiBpZiBgdW5kZWZpbmVkYCBpcyBzcGVjaWZpZWQgYXMgYSB2YWx1ZSwgdGhpcyBpcyBhbiBhbGlhcyBmb3JcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUjZGVsZXRlfVxuICAgICAqXG4gICAgICogRmllbGRzIG9uIHRoZSB7QGxpbmsgTFJVQ2FjaGUuU2V0T3B0aW9uc30gb3B0aW9ucyBwYXJhbSB3aWxsIG92ZXJyaWRlXG4gICAgICogdGhlaXIgY29ycmVzcG9uZGluZyB2YWx1ZXMgaW4gdGhlIGNvbnN0cnVjdG9yIG9wdGlvbnMgZm9yIHRoZSBzY29wZVxuICAgICAqIG9mIHRoaXMgc2luZ2xlIGBzZXQoKWAgb3BlcmF0aW9uLlxuICAgICAqXG4gICAgICogSWYgYHN0YXJ0YCBpcyBwcm92aWRlZCwgdGhlbiB0aGF0IHdpbGwgc2V0IHRoZSBlZmZlY3RpdmUgc3RhcnRcbiAgICAgKiB0aW1lIGZvciB0aGUgVFRMIGNhbGN1bGF0aW9uLiBOb3RlIHRoYXQgdGhpcyBtdXN0IGJlIGEgcHJldmlvdXNcbiAgICAgKiB2YWx1ZSBvZiBgcGVyZm9ybWFuY2Uubm93KClgIGlmIHN1cHBvcnRlZCwgb3IgYSBwcmV2aW91cyB2YWx1ZSBvZlxuICAgICAqIGBEYXRlLm5vdygpYCBpZiBub3QuXG4gICAgICpcbiAgICAgKiBPcHRpb25zIG9iamVjdCBtYXkgYWxzbyBpbmNsdWRlIGBzaXplYCwgd2hpY2ggd2lsbCBwcmV2ZW50XG4gICAgICogY2FsbGluZyB0aGUgYHNpemVDYWxjdWxhdGlvbmAgZnVuY3Rpb24gYW5kIGp1c3QgdXNlIHRoZSBzcGVjaWZpZWRcbiAgICAgKiBudW1iZXIgaWYgaXQgaXMgYSBwb3NpdGl2ZSBpbnRlZ2VyLCBhbmQgYG5vRGlzcG9zZU9uU2V0YCB3aGljaFxuICAgICAqIHdpbGwgcHJldmVudCBjYWxsaW5nIGEgYGRpc3Bvc2VgIGZ1bmN0aW9uIGluIHRoZSBjYXNlIG9mXG4gICAgICogb3ZlcndyaXRlcy5cbiAgICAgKlxuICAgICAqIElmIHRoZSBgc2l6ZWAgKG9yIHJldHVybiB2YWx1ZSBvZiBgc2l6ZUNhbGN1bGF0aW9uYCkgZm9yIGEgZ2l2ZW5cbiAgICAgKiBlbnRyeSBpcyBncmVhdGVyIHRoYW4gYG1heEVudHJ5U2l6ZWAsIHRoZW4gdGhlIGl0ZW0gd2lsbCBub3QgYmVcbiAgICAgKiBhZGRlZCB0byB0aGUgY2FjaGUuXG4gICAgICpcbiAgICAgKiBXaWxsIHVwZGF0ZSB0aGUgcmVjZW5jeSBvZiB0aGUgZW50cnkuXG4gICAgICpcbiAgICAgKiBJZiB0aGUgdmFsdWUgaXMgYHVuZGVmaW5lZGAsIHRoZW4gdGhpcyBpcyBhbiBhbGlhcyBmb3JcbiAgICAgKiBgY2FjaGUuZGVsZXRlKGtleSlgLiBgdW5kZWZpbmVkYCBpcyBuZXZlciBzdG9yZWQgaW4gdGhlIGNhY2hlLlxuICAgICAqL1xuICAgIHNldChrLCB2LCBzZXRPcHRpb25zID0ge30pIHtcbiAgICAgICAgaWYgKHYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5kZWxldGUoayk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHR0bCA9IHRoaXMudHRsLCBzdGFydCwgbm9EaXNwb3NlT25TZXQgPSB0aGlzLm5vRGlzcG9zZU9uU2V0LCBzaXplQ2FsY3VsYXRpb24gPSB0aGlzLnNpemVDYWxjdWxhdGlvbiwgc3RhdHVzLCB9ID0gc2V0T3B0aW9ucztcbiAgICAgICAgbGV0IHsgbm9VcGRhdGVUVEwgPSB0aGlzLm5vVXBkYXRlVFRMIH0gPSBzZXRPcHRpb25zO1xuICAgICAgICBjb25zdCBzaXplID0gdGhpcy4jcmVxdWlyZVNpemUoaywgdiwgc2V0T3B0aW9ucy5zaXplIHx8IDAsIHNpemVDYWxjdWxhdGlvbik7XG4gICAgICAgIC8vIGlmIHRoZSBpdGVtIGRvZXNuJ3QgZml0LCBkb24ndCBkbyBhbnl0aGluZ1xuICAgICAgICAvLyBOQjogbWF4RW50cnlTaXplIHNldCB0byBtYXhTaXplIGJ5IGRlZmF1bHRcbiAgICAgICAgaWYgKHRoaXMubWF4RW50cnlTaXplICYmIHNpemUgPiB0aGlzLm1heEVudHJ5U2l6ZSkge1xuICAgICAgICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICAgICAgICAgIHN0YXR1cy5zZXQgPSAnbWlzcyc7XG4gICAgICAgICAgICAgICAgc3RhdHVzLm1heEVudHJ5U2l6ZUV4Y2VlZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGhhdmUgdG8gZGVsZXRlLCBpbiBjYXNlIHNvbWV0aGluZyBpcyB0aGVyZSBhbHJlYWR5LlxuICAgICAgICAgICAgdGhpcy4jZGVsZXRlKGssICdzZXQnKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGxldCBpbmRleCA9IHRoaXMuI3NpemUgPT09IDAgPyB1bmRlZmluZWQgOiB0aGlzLiNrZXlNYXAuZ2V0KGspO1xuICAgICAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gYWRkaXRpb25cbiAgICAgICAgICAgIGluZGV4ID0gKHRoaXMuI3NpemUgPT09IDBcbiAgICAgICAgICAgICAgICA/IHRoaXMuI3RhaWxcbiAgICAgICAgICAgICAgICA6IHRoaXMuI2ZyZWUubGVuZ3RoICE9PSAwXG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy4jZnJlZS5wb3AoKVxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuI3NpemUgPT09IHRoaXMuI21heFxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLiNldmljdChmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy4jc2l6ZSk7XG4gICAgICAgICAgICB0aGlzLiNrZXlMaXN0W2luZGV4XSA9IGs7XG4gICAgICAgICAgICB0aGlzLiN2YWxMaXN0W2luZGV4XSA9IHY7XG4gICAgICAgICAgICB0aGlzLiNrZXlNYXAuc2V0KGssIGluZGV4KTtcbiAgICAgICAgICAgIHRoaXMuI25leHRbdGhpcy4jdGFpbF0gPSBpbmRleDtcbiAgICAgICAgICAgIHRoaXMuI3ByZXZbaW5kZXhdID0gdGhpcy4jdGFpbDtcbiAgICAgICAgICAgIHRoaXMuI3RhaWwgPSBpbmRleDtcbiAgICAgICAgICAgIHRoaXMuI3NpemUrKztcbiAgICAgICAgICAgIHRoaXMuI2FkZEl0ZW1TaXplKGluZGV4LCBzaXplLCBzdGF0dXMpO1xuICAgICAgICAgICAgaWYgKHN0YXR1cylcbiAgICAgICAgICAgICAgICBzdGF0dXMuc2V0ID0gJ2FkZCc7XG4gICAgICAgICAgICBub1VwZGF0ZVRUTCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gdXBkYXRlXG4gICAgICAgICAgICB0aGlzLiNtb3ZlVG9UYWlsKGluZGV4KTtcbiAgICAgICAgICAgIGNvbnN0IG9sZFZhbCA9IHRoaXMuI3ZhbExpc3RbaW5kZXhdO1xuICAgICAgICAgICAgaWYgKHYgIT09IG9sZFZhbCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLiNoYXNGZXRjaE1ldGhvZCAmJiB0aGlzLiNpc0JhY2tncm91bmRGZXRjaChvbGRWYWwpKSB7XG4gICAgICAgICAgICAgICAgICAgIG9sZFZhbC5fX2Fib3J0Q29udHJvbGxlci5hYm9ydChuZXcgRXJyb3IoJ3JlcGxhY2VkJykpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IF9fc3RhbGVXaGlsZUZldGNoaW5nOiBzIH0gPSBvbGRWYWw7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzICE9PSB1bmRlZmluZWQgJiYgIW5vRGlzcG9zZU9uU2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy4jaGFzRGlzcG9zZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuI2Rpc3Bvc2U/LihzLCBrLCAnc2V0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy4jaGFzRGlzcG9zZUFmdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jZGlzcG9zZWQ/LnB1c2goW3MsIGssICdzZXQnXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIW5vRGlzcG9zZU9uU2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLiNoYXNEaXNwb3NlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiNkaXNwb3NlPy4ob2xkVmFsLCBrLCAnc2V0Jyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuI2hhc0Rpc3Bvc2VBZnRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jZGlzcG9zZWQ/LnB1c2goW29sZFZhbCwgaywgJ3NldCddKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLiNyZW1vdmVJdGVtU2l6ZShpbmRleCk7XG4gICAgICAgICAgICAgICAgdGhpcy4jYWRkSXRlbVNpemUoaW5kZXgsIHNpemUsIHN0YXR1cyk7XG4gICAgICAgICAgICAgICAgdGhpcy4jdmFsTGlzdFtpbmRleF0gPSB2O1xuICAgICAgICAgICAgICAgIGlmIChzdGF0dXMpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLnNldCA9ICdyZXBsYWNlJztcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2xkVmFsdWUgPSBvbGRWYWwgJiYgdGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2gob2xkVmFsKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBvbGRWYWwuX19zdGFsZVdoaWxlRmV0Y2hpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogb2xkVmFsO1xuICAgICAgICAgICAgICAgICAgICBpZiAob2xkVmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cy5vbGRWYWx1ZSA9IG9sZFZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHN0YXR1cykge1xuICAgICAgICAgICAgICAgIHN0YXR1cy5zZXQgPSAndXBkYXRlJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodHRsICE9PSAwICYmICF0aGlzLiN0dGxzKSB7XG4gICAgICAgICAgICB0aGlzLiNpbml0aWFsaXplVFRMVHJhY2tpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy4jdHRscykge1xuICAgICAgICAgICAgaWYgKCFub1VwZGF0ZVRUTCkge1xuICAgICAgICAgICAgICAgIHRoaXMuI3NldEl0ZW1UVEwoaW5kZXgsIHR0bCwgc3RhcnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHN0YXR1cylcbiAgICAgICAgICAgICAgICB0aGlzLiNzdGF0dXNUVEwoc3RhdHVzLCBpbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFub0Rpc3Bvc2VPblNldCAmJiB0aGlzLiNoYXNEaXNwb3NlQWZ0ZXIgJiYgdGhpcy4jZGlzcG9zZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGR0ID0gdGhpcy4jZGlzcG9zZWQ7XG4gICAgICAgICAgICBsZXQgdGFzaztcbiAgICAgICAgICAgIHdoaWxlICgodGFzayA9IGR0Py5zaGlmdCgpKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuI2Rpc3Bvc2VBZnRlcj8uKC4uLnRhc2spO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFdmljdCB0aGUgbGVhc3QgcmVjZW50bHkgdXNlZCBpdGVtLCByZXR1cm5pbmcgaXRzIHZhbHVlIG9yXG4gICAgICogYHVuZGVmaW5lZGAgaWYgY2FjaGUgaXMgZW1wdHkuXG4gICAgICovXG4gICAgcG9wKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgd2hpbGUgKHRoaXMuI3NpemUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWwgPSB0aGlzLiN2YWxMaXN0W3RoaXMuI2hlYWRdO1xuICAgICAgICAgICAgICAgIHRoaXMuI2V2aWN0KHRydWUpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLiNpc0JhY2tncm91bmRGZXRjaCh2YWwpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWwuX19zdGFsZVdoaWxlRmV0Y2hpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWwuX19zdGFsZVdoaWxlRmV0Y2hpbmc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBpZiAodGhpcy4jaGFzRGlzcG9zZUFmdGVyICYmIHRoaXMuI2Rpc3Bvc2VkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZHQgPSB0aGlzLiNkaXNwb3NlZDtcbiAgICAgICAgICAgICAgICBsZXQgdGFzaztcbiAgICAgICAgICAgICAgICB3aGlsZSAoKHRhc2sgPSBkdD8uc2hpZnQoKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jZGlzcG9zZUFmdGVyPy4oLi4udGFzayk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgICNldmljdChmcmVlKSB7XG4gICAgICAgIGNvbnN0IGhlYWQgPSB0aGlzLiNoZWFkO1xuICAgICAgICBjb25zdCBrID0gdGhpcy4ja2V5TGlzdFtoZWFkXTtcbiAgICAgICAgY29uc3QgdiA9IHRoaXMuI3ZhbExpc3RbaGVhZF07XG4gICAgICAgIGlmICh0aGlzLiNoYXNGZXRjaE1ldGhvZCAmJiB0aGlzLiNpc0JhY2tncm91bmRGZXRjaCh2KSkge1xuICAgICAgICAgICAgdi5fX2Fib3J0Q29udHJvbGxlci5hYm9ydChuZXcgRXJyb3IoJ2V2aWN0ZWQnKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy4jaGFzRGlzcG9zZSB8fCB0aGlzLiNoYXNEaXNwb3NlQWZ0ZXIpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLiNoYXNEaXNwb3NlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jZGlzcG9zZT8uKHYsIGssICdldmljdCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuI2hhc0Rpc3Bvc2VBZnRlcikge1xuICAgICAgICAgICAgICAgIHRoaXMuI2Rpc3Bvc2VkPy5wdXNoKFt2LCBrLCAnZXZpY3QnXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4jcmVtb3ZlSXRlbVNpemUoaGVhZCk7XG4gICAgICAgIC8vIGlmIHdlIGFyZW4ndCBhYm91dCB0byB1c2UgdGhlIGluZGV4LCB0aGVuIG51bGwgdGhlc2Ugb3V0XG4gICAgICAgIGlmIChmcmVlKSB7XG4gICAgICAgICAgICB0aGlzLiNrZXlMaXN0W2hlYWRdID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy4jdmFsTGlzdFtoZWFkXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuI2ZyZWUucHVzaChoZWFkKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy4jc2l6ZSA9PT0gMSkge1xuICAgICAgICAgICAgdGhpcy4jaGVhZCA9IHRoaXMuI3RhaWwgPSAwO1xuICAgICAgICAgICAgdGhpcy4jZnJlZS5sZW5ndGggPSAwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy4jaGVhZCA9IHRoaXMuI25leHRbaGVhZF07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4ja2V5TWFwLmRlbGV0ZShrKTtcbiAgICAgICAgdGhpcy4jc2l6ZS0tO1xuICAgICAgICByZXR1cm4gaGVhZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgYSBrZXkgaXMgaW4gdGhlIGNhY2hlLCB3aXRob3V0IHVwZGF0aW5nIHRoZSByZWNlbmN5IG9mIHVzZS5cbiAgICAgKiBXaWxsIHJldHVybiBmYWxzZSBpZiB0aGUgaXRlbSBpcyBzdGFsZSwgZXZlbiB0aG91Z2ggaXQgaXMgdGVjaG5pY2FsbHlcbiAgICAgKiBpbiB0aGUgY2FjaGUuXG4gICAgICpcbiAgICAgKiBDaGVjayBpZiBhIGtleSBpcyBpbiB0aGUgY2FjaGUsIHdpdGhvdXQgdXBkYXRpbmcgdGhlIHJlY2VuY3kgb2ZcbiAgICAgKiB1c2UuIEFnZSBpcyB1cGRhdGVkIGlmIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS51cGRhdGVBZ2VPbkhhc30gaXMgc2V0XG4gICAgICogdG8gYHRydWVgIGluIGVpdGhlciB0aGUgb3B0aW9ucyBvciB0aGUgY29uc3RydWN0b3IuXG4gICAgICpcbiAgICAgKiBXaWxsIHJldHVybiBgZmFsc2VgIGlmIHRoZSBpdGVtIGlzIHN0YWxlLCBldmVuIHRob3VnaCBpdCBpcyB0ZWNobmljYWxseSBpblxuICAgICAqIHRoZSBjYWNoZS4gVGhlIGRpZmZlcmVuY2UgY2FuIGJlIGRldGVybWluZWQgKGlmIGl0IG1hdHRlcnMpIGJ5IHVzaW5nIGFcbiAgICAgKiBgc3RhdHVzYCBhcmd1bWVudCwgYW5kIGluc3BlY3RpbmcgdGhlIGBoYXNgIGZpZWxkLlxuICAgICAqXG4gICAgICogV2lsbCBub3QgdXBkYXRlIGl0ZW0gYWdlIHVubGVzc1xuICAgICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS51cGRhdGVBZ2VPbkhhc30gaXMgc2V0LlxuICAgICAqL1xuICAgIGhhcyhrLCBoYXNPcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgeyB1cGRhdGVBZ2VPbkhhcyA9IHRoaXMudXBkYXRlQWdlT25IYXMsIHN0YXR1cyB9ID0gaGFzT3B0aW9ucztcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLiNrZXlNYXAuZ2V0KGspO1xuICAgICAgICBpZiAoaW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgdiA9IHRoaXMuI3ZhbExpc3RbaW5kZXhdO1xuICAgICAgICAgICAgaWYgKHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHYpICYmXG4gICAgICAgICAgICAgICAgdi5fX3N0YWxlV2hpbGVGZXRjaGluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLiNpc1N0YWxlKGluZGV4KSkge1xuICAgICAgICAgICAgICAgIGlmICh1cGRhdGVBZ2VPbkhhcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiN1cGRhdGVJdGVtQWdlKGluZGV4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuaGFzID0gJ2hpdCc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI3N0YXR1c1RUTChzdGF0dXMsIGluZGV4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChzdGF0dXMpIHtcbiAgICAgICAgICAgICAgICBzdGF0dXMuaGFzID0gJ3N0YWxlJztcbiAgICAgICAgICAgICAgICB0aGlzLiNzdGF0dXNUVEwoc3RhdHVzLCBpbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc3RhdHVzKSB7XG4gICAgICAgICAgICBzdGF0dXMuaGFzID0gJ21pc3MnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTGlrZSB7QGxpbmsgTFJVQ2FjaGUjZ2V0fSBidXQgZG9lc24ndCB1cGRhdGUgcmVjZW5jeSBvciBkZWxldGUgc3RhbGVcbiAgICAgKiBpdGVtcy5cbiAgICAgKlxuICAgICAqIFJldHVybnMgYHVuZGVmaW5lZGAgaWYgdGhlIGl0ZW0gaXMgc3RhbGUsIHVubGVzc1xuICAgICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5hbGxvd1N0YWxlfSBpcyBzZXQuXG4gICAgICovXG4gICAgcGVlayhrLCBwZWVrT3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHsgYWxsb3dTdGFsZSA9IHRoaXMuYWxsb3dTdGFsZSB9ID0gcGVla09wdGlvbnM7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy4ja2V5TWFwLmdldChrKTtcbiAgICAgICAgaWYgKGluZGV4ID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICghYWxsb3dTdGFsZSAmJiB0aGlzLiNpc1N0YWxlKGluZGV4KSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2ID0gdGhpcy4jdmFsTGlzdFtpbmRleF07XG4gICAgICAgIC8vIGVpdGhlciBzdGFsZSBhbmQgYWxsb3dlZCwgb3IgZm9yY2luZyBhIHJlZnJlc2ggb2Ygbm9uLXN0YWxlIHZhbHVlXG4gICAgICAgIHJldHVybiB0aGlzLiNpc0JhY2tncm91bmRGZXRjaCh2KSA/IHYuX19zdGFsZVdoaWxlRmV0Y2hpbmcgOiB2O1xuICAgIH1cbiAgICAjYmFja2dyb3VuZEZldGNoKGssIGluZGV4LCBvcHRpb25zLCBjb250ZXh0KSB7XG4gICAgICAgIGNvbnN0IHYgPSBpbmRleCA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogdGhpcy4jdmFsTGlzdFtpbmRleF07XG4gICAgICAgIGlmICh0aGlzLiNpc0JhY2tncm91bmRGZXRjaCh2KSkge1xuICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWMgPSBuZXcgQUMoKTtcbiAgICAgICAgY29uc3QgeyBzaWduYWwgfSA9IG9wdGlvbnM7XG4gICAgICAgIC8vIHdoZW4vaWYgb3VyIEFDIHNpZ25hbHMsIHRoZW4gc3RvcCBsaXN0ZW5pbmcgdG8gdGhlaXJzLlxuICAgICAgICBzaWduYWw/LmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgKCkgPT4gYWMuYWJvcnQoc2lnbmFsLnJlYXNvbiksIHtcbiAgICAgICAgICAgIHNpZ25hbDogYWMuc2lnbmFsLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZmV0Y2hPcHRzID0ge1xuICAgICAgICAgICAgc2lnbmFsOiBhYy5zaWduYWwsXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgY2IgPSAodiwgdXBkYXRlQ2FjaGUgPSBmYWxzZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBhYm9ydGVkIH0gPSBhYy5zaWduYWw7XG4gICAgICAgICAgICBjb25zdCBpZ25vcmVBYm9ydCA9IG9wdGlvbnMuaWdub3JlRmV0Y2hBYm9ydCAmJiB2ICE9PSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5zdGF0dXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoYWJvcnRlZCAmJiAhdXBkYXRlQ2FjaGUpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5zdGF0dXMuZmV0Y2hBYm9ydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5zdGF0dXMuZmV0Y2hFcnJvciA9IGFjLnNpZ25hbC5yZWFzb247XG4gICAgICAgICAgICAgICAgICAgIGlmIChpZ25vcmVBYm9ydClcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuc3RhdHVzLmZldGNoQWJvcnRJZ25vcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuc3RhdHVzLmZldGNoUmVzb2x2ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhYm9ydGVkICYmICFpZ25vcmVBYm9ydCAmJiAhdXBkYXRlQ2FjaGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmV0Y2hGYWlsKGFjLnNpZ25hbC5yZWFzb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZWl0aGVyIHdlIGRpZG4ndCBhYm9ydCwgYW5kIGFyZSBzdGlsbCBoZXJlLCBvciB3ZSBkaWQsIGFuZCBpZ25vcmVkXG4gICAgICAgICAgICBjb25zdCBiZiA9IHA7XG4gICAgICAgICAgICBpZiAodGhpcy4jdmFsTGlzdFtpbmRleF0gPT09IHApIHtcbiAgICAgICAgICAgICAgICBpZiAodiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChiZi5fX3N0YWxlV2hpbGVGZXRjaGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jdmFsTGlzdFtpbmRleF0gPSBiZi5fX3N0YWxlV2hpbGVGZXRjaGluZztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuI2RlbGV0ZShrLCAnZmV0Y2gnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuc3RhdHVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5zdGF0dXMuZmV0Y2hVcGRhdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXQoaywgdiwgZmV0Y2hPcHRzLm9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBlYiA9IChlcikgPT4ge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5zdGF0dXMuZmV0Y2hSZWplY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5zdGF0dXMuZmV0Y2hFcnJvciA9IGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZldGNoRmFpbChlcik7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGZldGNoRmFpbCA9IChlcikgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBhYm9ydGVkIH0gPSBhYy5zaWduYWw7XG4gICAgICAgICAgICBjb25zdCBhbGxvd1N0YWxlQWJvcnRlZCA9IGFib3J0ZWQgJiYgb3B0aW9ucy5hbGxvd1N0YWxlT25GZXRjaEFib3J0O1xuICAgICAgICAgICAgY29uc3QgYWxsb3dTdGFsZSA9IGFsbG93U3RhbGVBYm9ydGVkIHx8IG9wdGlvbnMuYWxsb3dTdGFsZU9uRmV0Y2hSZWplY3Rpb247XG4gICAgICAgICAgICBjb25zdCBub0RlbGV0ZSA9IGFsbG93U3RhbGUgfHwgb3B0aW9ucy5ub0RlbGV0ZU9uRmV0Y2hSZWplY3Rpb247XG4gICAgICAgICAgICBjb25zdCBiZiA9IHA7XG4gICAgICAgICAgICBpZiAodGhpcy4jdmFsTGlzdFtpbmRleF0gPT09IHApIHtcbiAgICAgICAgICAgICAgICAvLyBpZiB3ZSBhbGxvdyBzdGFsZSBvbiBmZXRjaCByZWplY3Rpb25zLCB0aGVuIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXRcbiAgICAgICAgICAgICAgICAvLyB0aGUgc3RhbGUgdmFsdWUgaXMgbm90IHJlbW92ZWQgZnJvbSB0aGUgY2FjaGUgd2hlbiB0aGUgZmV0Y2ggZmFpbHMuXG4gICAgICAgICAgICAgICAgY29uc3QgZGVsID0gIW5vRGVsZXRlIHx8IGJmLl9fc3RhbGVXaGlsZUZldGNoaW5nID09PSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgaWYgKGRlbCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiNkZWxldGUoaywgJ2ZldGNoJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFhbGxvd1N0YWxlQWJvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBzdGlsbCByZXBsYWNlIHRoZSAqcHJvbWlzZSogd2l0aCB0aGUgc3RhbGUgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIC8vIHNpbmNlIHdlIGFyZSBkb25lIHdpdGggdGhlIHByb21pc2UgYXQgdGhpcyBwb2ludC5cbiAgICAgICAgICAgICAgICAgICAgLy8gbGVhdmUgaXQgdW50b3VjaGVkIGlmIHdlJ3JlIHN0aWxsIHdhaXRpbmcgZm9yIGFuXG4gICAgICAgICAgICAgICAgICAgIC8vIGFib3J0ZWQgYmFja2dyb3VuZCBmZXRjaCB0aGF0IGhhc24ndCB5ZXQgcmV0dXJuZWQuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI3ZhbExpc3RbaW5kZXhdID0gYmYuX19zdGFsZVdoaWxlRmV0Y2hpbmc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFsbG93U3RhbGUpIHtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5zdGF0dXMgJiYgYmYuX19zdGFsZVdoaWxlRmV0Y2hpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnN0YXR1cy5yZXR1cm5lZFN0YWxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJmLl9fc3RhbGVXaGlsZUZldGNoaW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYmYuX19yZXR1cm5lZCA9PT0gYmYpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcGNhbGwgPSAocmVzLCByZWopID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZtcCA9IHRoaXMuI2ZldGNoTWV0aG9kPy4oaywgdiwgZmV0Y2hPcHRzKTtcbiAgICAgICAgICAgIGlmIChmbXAgJiYgZm1wIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgIGZtcC50aGVuKHYgPT4gcmVzKHYgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHYpLCByZWopO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWdub3JlZCwgd2UgZ28gdW50aWwgd2UgZmluaXNoLCByZWdhcmRsZXNzLlxuICAgICAgICAgICAgLy8gZGVmZXIgY2hlY2sgdW50aWwgd2UgYXJlIGFjdHVhbGx5IGFib3J0aW5nLFxuICAgICAgICAgICAgLy8gc28gZmV0Y2hNZXRob2QgY2FuIG92ZXJyaWRlLlxuICAgICAgICAgICAgYWMuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucy5pZ25vcmVGZXRjaEFib3J0IHx8XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydCkge1xuICAgICAgICAgICAgICAgICAgICByZXModW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gd2hlbiBpdCBldmVudHVhbGx5IHJlc29sdmVzLCB1cGRhdGUgdGhlIGNhY2hlLlxuICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5hbGxvd1N0YWxlT25GZXRjaEFib3J0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXMgPSB2ID0+IGNiKHYsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIGlmIChvcHRpb25zLnN0YXR1cylcbiAgICAgICAgICAgIG9wdGlvbnMuc3RhdHVzLmZldGNoRGlzcGF0Y2hlZCA9IHRydWU7XG4gICAgICAgIGNvbnN0IHAgPSBuZXcgUHJvbWlzZShwY2FsbCkudGhlbihjYiwgZWIpO1xuICAgICAgICBjb25zdCBiZiA9IE9iamVjdC5hc3NpZ24ocCwge1xuICAgICAgICAgICAgX19hYm9ydENvbnRyb2xsZXI6IGFjLFxuICAgICAgICAgICAgX19zdGFsZVdoaWxlRmV0Y2hpbmc6IHYsXG4gICAgICAgICAgICBfX3JldHVybmVkOiB1bmRlZmluZWQsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gaW50ZXJuYWwsIGRvbid0IGV4cG9zZSBzdGF0dXMuXG4gICAgICAgICAgICB0aGlzLnNldChrLCBiZiwgeyAuLi5mZXRjaE9wdHMub3B0aW9ucywgc3RhdHVzOiB1bmRlZmluZWQgfSk7XG4gICAgICAgICAgICBpbmRleCA9IHRoaXMuI2tleU1hcC5nZXQoayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLiN2YWxMaXN0W2luZGV4XSA9IGJmO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBiZjtcbiAgICB9XG4gICAgI2lzQmFja2dyb3VuZEZldGNoKHApIHtcbiAgICAgICAgaWYgKCF0aGlzLiNoYXNGZXRjaE1ldGhvZClcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgY29uc3QgYiA9IHA7XG4gICAgICAgIHJldHVybiAoISFiICYmXG4gICAgICAgICAgICBiIGluc3RhbmNlb2YgUHJvbWlzZSAmJlxuICAgICAgICAgICAgYi5oYXNPd25Qcm9wZXJ0eSgnX19zdGFsZVdoaWxlRmV0Y2hpbmcnKSAmJlxuICAgICAgICAgICAgYi5fX2Fib3J0Q29udHJvbGxlciBpbnN0YW5jZW9mIEFDKTtcbiAgICB9XG4gICAgYXN5bmMgZmV0Y2goaywgZmV0Y2hPcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgeyBcbiAgICAgICAgLy8gZ2V0IG9wdGlvbnNcbiAgICAgICAgYWxsb3dTdGFsZSA9IHRoaXMuYWxsb3dTdGFsZSwgdXBkYXRlQWdlT25HZXQgPSB0aGlzLnVwZGF0ZUFnZU9uR2V0LCBub0RlbGV0ZU9uU3RhbGVHZXQgPSB0aGlzLm5vRGVsZXRlT25TdGFsZUdldCwgXG4gICAgICAgIC8vIHNldCBvcHRpb25zXG4gICAgICAgIHR0bCA9IHRoaXMudHRsLCBub0Rpc3Bvc2VPblNldCA9IHRoaXMubm9EaXNwb3NlT25TZXQsIHNpemUgPSAwLCBzaXplQ2FsY3VsYXRpb24gPSB0aGlzLnNpemVDYWxjdWxhdGlvbiwgbm9VcGRhdGVUVEwgPSB0aGlzLm5vVXBkYXRlVFRMLCBcbiAgICAgICAgLy8gZmV0Y2ggZXhjbHVzaXZlIG9wdGlvbnNcbiAgICAgICAgbm9EZWxldGVPbkZldGNoUmVqZWN0aW9uID0gdGhpcy5ub0RlbGV0ZU9uRmV0Y2hSZWplY3Rpb24sIGFsbG93U3RhbGVPbkZldGNoUmVqZWN0aW9uID0gdGhpcy5hbGxvd1N0YWxlT25GZXRjaFJlamVjdGlvbiwgaWdub3JlRmV0Y2hBYm9ydCA9IHRoaXMuaWdub3JlRmV0Y2hBYm9ydCwgYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydCA9IHRoaXMuYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydCwgY29udGV4dCwgZm9yY2VSZWZyZXNoID0gZmFsc2UsIHN0YXR1cywgc2lnbmFsLCB9ID0gZmV0Y2hPcHRpb25zO1xuICAgICAgICBpZiAoIXRoaXMuI2hhc0ZldGNoTWV0aG9kKSB7XG4gICAgICAgICAgICBpZiAoc3RhdHVzKVxuICAgICAgICAgICAgICAgIHN0YXR1cy5mZXRjaCA9ICdnZXQnO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KGssIHtcbiAgICAgICAgICAgICAgICBhbGxvd1N0YWxlLFxuICAgICAgICAgICAgICAgIHVwZGF0ZUFnZU9uR2V0LFxuICAgICAgICAgICAgICAgIG5vRGVsZXRlT25TdGFsZUdldCxcbiAgICAgICAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgYWxsb3dTdGFsZSxcbiAgICAgICAgICAgIHVwZGF0ZUFnZU9uR2V0LFxuICAgICAgICAgICAgbm9EZWxldGVPblN0YWxlR2V0LFxuICAgICAgICAgICAgdHRsLFxuICAgICAgICAgICAgbm9EaXNwb3NlT25TZXQsXG4gICAgICAgICAgICBzaXplLFxuICAgICAgICAgICAgc2l6ZUNhbGN1bGF0aW9uLFxuICAgICAgICAgICAgbm9VcGRhdGVUVEwsXG4gICAgICAgICAgICBub0RlbGV0ZU9uRmV0Y2hSZWplY3Rpb24sXG4gICAgICAgICAgICBhbGxvd1N0YWxlT25GZXRjaFJlamVjdGlvbixcbiAgICAgICAgICAgIGFsbG93U3RhbGVPbkZldGNoQWJvcnQsXG4gICAgICAgICAgICBpZ25vcmVGZXRjaEFib3J0LFxuICAgICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgICAgc2lnbmFsLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgaW5kZXggPSB0aGlzLiNrZXlNYXAuZ2V0KGspO1xuICAgICAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKHN0YXR1cylcbiAgICAgICAgICAgICAgICBzdGF0dXMuZmV0Y2ggPSAnbWlzcyc7XG4gICAgICAgICAgICBjb25zdCBwID0gdGhpcy4jYmFja2dyb3VuZEZldGNoKGssIGluZGV4LCBvcHRpb25zLCBjb250ZXh0KTtcbiAgICAgICAgICAgIHJldHVybiAocC5fX3JldHVybmVkID0gcCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBpbiBjYWNoZSwgbWF5YmUgYWxyZWFkeSBmZXRjaGluZ1xuICAgICAgICAgICAgY29uc3QgdiA9IHRoaXMuI3ZhbExpc3RbaW5kZXhdO1xuICAgICAgICAgICAgaWYgKHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHYpKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhbGUgPSBhbGxvd1N0YWxlICYmIHYuX19zdGFsZVdoaWxlRmV0Y2hpbmcgIT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5mZXRjaCA9ICdpbmZsaWdodCc7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGFsZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cy5yZXR1cm5lZFN0YWxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YWxlID8gdi5fX3N0YWxlV2hpbGVGZXRjaGluZyA6ICh2Ll9fcmV0dXJuZWQgPSB2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGlmIHdlIGZvcmNlIGEgcmVmcmVzaCwgdGhhdCBtZWFucyBkbyBOT1Qgc2VydmUgdGhlIGNhY2hlZCB2YWx1ZSxcbiAgICAgICAgICAgIC8vIHVubGVzcyB3ZSBhcmUgYWxyZWFkeSBpbiB0aGUgcHJvY2VzcyBvZiByZWZyZXNoaW5nIHRoZSBjYWNoZS5cbiAgICAgICAgICAgIGNvbnN0IGlzU3RhbGUgPSB0aGlzLiNpc1N0YWxlKGluZGV4KTtcbiAgICAgICAgICAgIGlmICghZm9yY2VSZWZyZXNoICYmICFpc1N0YWxlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXR1cylcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmZldGNoID0gJ2hpdCc7XG4gICAgICAgICAgICAgICAgdGhpcy4jbW92ZVRvVGFpbChpbmRleCk7XG4gICAgICAgICAgICAgICAgaWYgKHVwZGF0ZUFnZU9uR2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI3VwZGF0ZUl0ZW1BZ2UoaW5kZXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc3RhdHVzKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLiNzdGF0dXNUVEwoc3RhdHVzLCBpbmRleCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBvaywgaXQgaXMgc3RhbGUgb3IgYSBmb3JjZWQgcmVmcmVzaCwgYW5kIG5vdCBhbHJlYWR5IGZldGNoaW5nLlxuICAgICAgICAgICAgLy8gcmVmcmVzaCB0aGUgY2FjaGUuXG4gICAgICAgICAgICBjb25zdCBwID0gdGhpcy4jYmFja2dyb3VuZEZldGNoKGssIGluZGV4LCBvcHRpb25zLCBjb250ZXh0KTtcbiAgICAgICAgICAgIGNvbnN0IGhhc1N0YWxlID0gcC5fX3N0YWxlV2hpbGVGZXRjaGluZyAhPT0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29uc3Qgc3RhbGVWYWwgPSBoYXNTdGFsZSAmJiBhbGxvd1N0YWxlO1xuICAgICAgICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICAgICAgICAgIHN0YXR1cy5mZXRjaCA9IGlzU3RhbGUgPyAnc3RhbGUnIDogJ3JlZnJlc2gnO1xuICAgICAgICAgICAgICAgIGlmIChzdGFsZVZhbCAmJiBpc1N0YWxlKVxuICAgICAgICAgICAgICAgICAgICBzdGF0dXMucmV0dXJuZWRTdGFsZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc3RhbGVWYWwgPyBwLl9fc3RhbGVXaGlsZUZldGNoaW5nIDogKHAuX19yZXR1cm5lZCA9IHApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIGZvcmNlRmV0Y2goaywgZmV0Y2hPcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgdiA9IGF3YWl0IHRoaXMuZmV0Y2goaywgZmV0Y2hPcHRpb25zKTtcbiAgICAgICAgaWYgKHYgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZmV0Y2goKSByZXR1cm5lZCB1bmRlZmluZWQnKTtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgfVxuICAgIG1lbW8oaywgbWVtb09wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCBtZW1vTWV0aG9kID0gdGhpcy4jbWVtb01ldGhvZDtcbiAgICAgICAgaWYgKCFtZW1vTWV0aG9kKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vIG1lbW9NZXRob2QgcHJvdmlkZWQgdG8gY29uc3RydWN0b3InKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IGNvbnRleHQsIGZvcmNlUmVmcmVzaCwgLi4ub3B0aW9ucyB9ID0gbWVtb09wdGlvbnM7XG4gICAgICAgIGNvbnN0IHYgPSB0aGlzLmdldChrLCBvcHRpb25zKTtcbiAgICAgICAgaWYgKCFmb3JjZVJlZnJlc2ggJiYgdiAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIGNvbnN0IHZ2ID0gbWVtb01ldGhvZChrLCB2LCB7XG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc2V0KGssIHZ2LCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHZ2O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYSB2YWx1ZSBmcm9tIHRoZSBjYWNoZS4gV2lsbCB1cGRhdGUgdGhlIHJlY2VuY3kgb2YgdGhlIGNhY2hlXG4gICAgICogZW50cnkgZm91bmQuXG4gICAgICpcbiAgICAgKiBJZiB0aGUga2V5IGlzIG5vdCBmb3VuZCwgZ2V0KCkgd2lsbCByZXR1cm4gYHVuZGVmaW5lZGAuXG4gICAgICovXG4gICAgZ2V0KGssIGdldE9wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCB7IGFsbG93U3RhbGUgPSB0aGlzLmFsbG93U3RhbGUsIHVwZGF0ZUFnZU9uR2V0ID0gdGhpcy51cGRhdGVBZ2VPbkdldCwgbm9EZWxldGVPblN0YWxlR2V0ID0gdGhpcy5ub0RlbGV0ZU9uU3RhbGVHZXQsIHN0YXR1cywgfSA9IGdldE9wdGlvbnM7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy4ja2V5TWFwLmdldChrKTtcbiAgICAgICAgaWYgKGluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy4jdmFsTGlzdFtpbmRleF07XG4gICAgICAgICAgICBjb25zdCBmZXRjaGluZyA9IHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHZhbHVlKTtcbiAgICAgICAgICAgIGlmIChzdGF0dXMpXG4gICAgICAgICAgICAgICAgdGhpcy4jc3RhdHVzVFRMKHN0YXR1cywgaW5kZXgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuI2lzU3RhbGUoaW5kZXgpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXR1cylcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmdldCA9ICdzdGFsZSc7XG4gICAgICAgICAgICAgICAgLy8gZGVsZXRlIG9ubHkgaWYgbm90IGFuIGluLWZsaWdodCBiYWNrZ3JvdW5kIGZldGNoXG4gICAgICAgICAgICAgICAgaWYgKCFmZXRjaGluZykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIW5vRGVsZXRlT25TdGFsZUdldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jZGVsZXRlKGssICdleHBpcmUnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICYmIGFsbG93U3RhbGUpXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMucmV0dXJuZWRTdGFsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhbGxvd1N0YWxlID8gdmFsdWUgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGxvd1N0YWxlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5fX3N0YWxlV2hpbGVGZXRjaGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMucmV0dXJuZWRTdGFsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFsbG93U3RhbGUgPyB2YWx1ZS5fX3N0YWxlV2hpbGVGZXRjaGluZyA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdHVzKVxuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZ2V0ID0gJ2hpdCc7XG4gICAgICAgICAgICAgICAgLy8gaWYgd2UncmUgY3VycmVudGx5IGZldGNoaW5nIGl0LCB3ZSBkb24ndCBhY3R1YWxseSBoYXZlIGl0IHlldFxuICAgICAgICAgICAgICAgIC8vIGl0J3Mgbm90IHN0YWxlLCB3aGljaCBtZWFucyB0aGlzIGlzbid0IGEgc3RhbGVXaGlsZVJlZmV0Y2hpbmcuXG4gICAgICAgICAgICAgICAgLy8gSWYgaXQncyBub3Qgc3RhbGUsIGFuZCBmZXRjaGluZywgQU5EIGhhcyBhIF9fc3RhbGVXaGlsZUZldGNoaW5nXG4gICAgICAgICAgICAgICAgLy8gdmFsdWUsIHRoZW4gdGhhdCBtZWFucyB0aGUgdXNlciBmZXRjaGVkIHdpdGgge2ZvcmNlUmVmcmVzaDp0cnVlfSxcbiAgICAgICAgICAgICAgICAvLyBzbyBpdCdzIHNhZmUgdG8gcmV0dXJuIHRoYXQgdmFsdWUuXG4gICAgICAgICAgICAgICAgaWYgKGZldGNoaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5fX3N0YWxlV2hpbGVGZXRjaGluZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy4jbW92ZVRvVGFpbChpbmRleCk7XG4gICAgICAgICAgICAgICAgaWYgKHVwZGF0ZUFnZU9uR2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI3VwZGF0ZUl0ZW1BZ2UoaW5kZXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc3RhdHVzKSB7XG4gICAgICAgICAgICBzdGF0dXMuZ2V0ID0gJ21pc3MnO1xuICAgICAgICB9XG4gICAgfVxuICAgICNjb25uZWN0KHAsIG4pIHtcbiAgICAgICAgdGhpcy4jcHJldltuXSA9IHA7XG4gICAgICAgIHRoaXMuI25leHRbcF0gPSBuO1xuICAgIH1cbiAgICAjbW92ZVRvVGFpbChpbmRleCkge1xuICAgICAgICAvLyBpZiB0YWlsIGFscmVhZHksIG5vdGhpbmcgdG8gZG9cbiAgICAgICAgLy8gaWYgaGVhZCwgbW92ZSBoZWFkIHRvIG5leHRbaW5kZXhdXG4gICAgICAgIC8vIGVsc2VcbiAgICAgICAgLy8gICBtb3ZlIG5leHRbcHJldltpbmRleF1dIHRvIG5leHRbaW5kZXhdIChoZWFkIGhhcyBubyBwcmV2KVxuICAgICAgICAvLyAgIG1vdmUgcHJldltuZXh0W2luZGV4XV0gdG8gcHJldltpbmRleF1cbiAgICAgICAgLy8gcHJldltpbmRleF0gPSB0YWlsXG4gICAgICAgIC8vIG5leHRbdGFpbF0gPSBpbmRleFxuICAgICAgICAvLyB0YWlsID0gaW5kZXhcbiAgICAgICAgaWYgKGluZGV4ICE9PSB0aGlzLiN0YWlsKSB7XG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IHRoaXMuI2hlYWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiNoZWFkID0gdGhpcy4jbmV4dFtpbmRleF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLiNjb25uZWN0KHRoaXMuI3ByZXZbaW5kZXhdLCB0aGlzLiNuZXh0W2luZGV4XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLiNjb25uZWN0KHRoaXMuI3RhaWwsIGluZGV4KTtcbiAgICAgICAgICAgIHRoaXMuI3RhaWwgPSBpbmRleDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWxldGVzIGEga2V5IG91dCBvZiB0aGUgY2FjaGUuXG4gICAgICpcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGtleSB3YXMgZGVsZXRlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIGRlbGV0ZShrKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNkZWxldGUoaywgJ2RlbGV0ZScpO1xuICAgIH1cbiAgICAjZGVsZXRlKGssIHJlYXNvbikge1xuICAgICAgICBsZXQgZGVsZXRlZCA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy4jc2l6ZSAhPT0gMCkge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLiNrZXlNYXAuZ2V0KGspO1xuICAgICAgICAgICAgaWYgKGluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBkZWxldGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy4jc2l6ZSA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiNjbGVhcihyZWFzb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jcmVtb3ZlSXRlbVNpemUoaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2ID0gdGhpcy4jdmFsTGlzdFtpbmRleF07XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLiNpc0JhY2tncm91bmRGZXRjaCh2KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdi5fX2Fib3J0Q29udHJvbGxlci5hYm9ydChuZXcgRXJyb3IoJ2RlbGV0ZWQnKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy4jaGFzRGlzcG9zZSB8fCB0aGlzLiNoYXNEaXNwb3NlQWZ0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLiNoYXNEaXNwb3NlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jZGlzcG9zZT8uKHYsIGssIHJlYXNvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy4jaGFzRGlzcG9zZUFmdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jZGlzcG9zZWQ/LnB1c2goW3YsIGssIHJlYXNvbl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI2tleU1hcC5kZWxldGUoayk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI2tleUxpc3RbaW5kZXhdID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiN2YWxMaXN0W2luZGV4XSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSB0aGlzLiN0YWlsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiN0YWlsID0gdGhpcy4jcHJldltpbmRleF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaW5kZXggPT09IHRoaXMuI2hlYWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuI2hlYWQgPSB0aGlzLiNuZXh0W2luZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBpID0gdGhpcy4jcHJldltpbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiNuZXh0W3BpXSA9IHRoaXMuI25leHRbaW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmkgPSB0aGlzLiNuZXh0W2luZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuI3ByZXZbbmldID0gdGhpcy4jcHJldltpbmRleF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jc2l6ZS0tO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiNmcmVlLnB1c2goaW5kZXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy4jaGFzRGlzcG9zZUFmdGVyICYmIHRoaXMuI2Rpc3Bvc2VkPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGR0ID0gdGhpcy4jZGlzcG9zZWQ7XG4gICAgICAgICAgICBsZXQgdGFzaztcbiAgICAgICAgICAgIHdoaWxlICgodGFzayA9IGR0Py5zaGlmdCgpKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuI2Rpc3Bvc2VBZnRlcj8uKC4uLnRhc2spO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWxldGVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDbGVhciB0aGUgY2FjaGUgZW50aXJlbHksIHRocm93aW5nIGF3YXkgYWxsIHZhbHVlcy5cbiAgICAgKi9cbiAgICBjbGVhcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2NsZWFyKCdkZWxldGUnKTtcbiAgICB9XG4gICAgI2NsZWFyKHJlYXNvbikge1xuICAgICAgICBmb3IgKGNvbnN0IGluZGV4IG9mIHRoaXMuI3JpbmRleGVzKHsgYWxsb3dTdGFsZTogdHJ1ZSB9KSkge1xuICAgICAgICAgICAgY29uc3QgdiA9IHRoaXMuI3ZhbExpc3RbaW5kZXhdO1xuICAgICAgICAgICAgaWYgKHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHYpKSB7XG4gICAgICAgICAgICAgICAgdi5fX2Fib3J0Q29udHJvbGxlci5hYm9ydChuZXcgRXJyb3IoJ2RlbGV0ZWQnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBrID0gdGhpcy4ja2V5TGlzdFtpbmRleF07XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuI2hhc0Rpc3Bvc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jZGlzcG9zZT8uKHYsIGssIHJlYXNvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLiNoYXNEaXNwb3NlQWZ0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jZGlzcG9zZWQ/LnB1c2goW3YsIGssIHJlYXNvbl0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLiNrZXlNYXAuY2xlYXIoKTtcbiAgICAgICAgdGhpcy4jdmFsTGlzdC5maWxsKHVuZGVmaW5lZCk7XG4gICAgICAgIHRoaXMuI2tleUxpc3QuZmlsbCh1bmRlZmluZWQpO1xuICAgICAgICBpZiAodGhpcy4jdHRscyAmJiB0aGlzLiNzdGFydHMpIHtcbiAgICAgICAgICAgIHRoaXMuI3R0bHMuZmlsbCgwKTtcbiAgICAgICAgICAgIHRoaXMuI3N0YXJ0cy5maWxsKDApO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLiNzaXplcykge1xuICAgICAgICAgICAgdGhpcy4jc2l6ZXMuZmlsbCgwKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiNoZWFkID0gMDtcbiAgICAgICAgdGhpcy4jdGFpbCA9IDA7XG4gICAgICAgIHRoaXMuI2ZyZWUubGVuZ3RoID0gMDtcbiAgICAgICAgdGhpcy4jY2FsY3VsYXRlZFNpemUgPSAwO1xuICAgICAgICB0aGlzLiNzaXplID0gMDtcbiAgICAgICAgaWYgKHRoaXMuI2hhc0Rpc3Bvc2VBZnRlciAmJiB0aGlzLiNkaXNwb3NlZCkge1xuICAgICAgICAgICAgY29uc3QgZHQgPSB0aGlzLiNkaXNwb3NlZDtcbiAgICAgICAgICAgIGxldCB0YXNrO1xuICAgICAgICAgICAgd2hpbGUgKCh0YXNrID0gZHQ/LnNoaWZ0KCkpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jZGlzcG9zZUFmdGVyPy4oLi4udGFzayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLkxSVUNhY2hlID0gTFJVQ2FjaGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5NaW5pcGFzcyA9IGV4cG9ydHMuaXNXcml0YWJsZSA9IGV4cG9ydHMuaXNSZWFkYWJsZSA9IGV4cG9ydHMuaXNTdHJlYW0gPSB2b2lkIDA7XG5jb25zdCBwcm9jID0gdHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmIHByb2Nlc3NcbiAgICA/IHByb2Nlc3NcbiAgICA6IHtcbiAgICAgICAgc3Rkb3V0OiBudWxsLFxuICAgICAgICBzdGRlcnI6IG51bGwsXG4gICAgfTtcbmNvbnN0IG5vZGVfZXZlbnRzXzEgPSByZXF1aXJlKFwibm9kZTpldmVudHNcIik7XG5jb25zdCBub2RlX3N0cmVhbV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJub2RlOnN0cmVhbVwiKSk7XG5jb25zdCBub2RlX3N0cmluZ19kZWNvZGVyXzEgPSByZXF1aXJlKFwibm9kZTpzdHJpbmdfZGVjb2RlclwiKTtcbi8qKlxuICogUmV0dXJuIHRydWUgaWYgdGhlIGFyZ3VtZW50IGlzIGEgTWluaXBhc3Mgc3RyZWFtLCBOb2RlIHN0cmVhbSwgb3Igc29tZXRoaW5nXG4gKiBlbHNlIHRoYXQgTWluaXBhc3MgY2FuIGludGVyYWN0IHdpdGguXG4gKi9cbmNvbnN0IGlzU3RyZWFtID0gKHMpID0+ICEhcyAmJlxuICAgIHR5cGVvZiBzID09PSAnb2JqZWN0JyAmJlxuICAgIChzIGluc3RhbmNlb2YgTWluaXBhc3MgfHxcbiAgICAgICAgcyBpbnN0YW5jZW9mIG5vZGVfc3RyZWFtXzEuZGVmYXVsdCB8fFxuICAgICAgICAoMCwgZXhwb3J0cy5pc1JlYWRhYmxlKShzKSB8fFxuICAgICAgICAoMCwgZXhwb3J0cy5pc1dyaXRhYmxlKShzKSk7XG5leHBvcnRzLmlzU3RyZWFtID0gaXNTdHJlYW07XG4vKipcbiAqIFJldHVybiB0cnVlIGlmIHRoZSBhcmd1bWVudCBpcyBhIHZhbGlkIHtAbGluayBNaW5pcGFzcy5SZWFkYWJsZX1cbiAqL1xuY29uc3QgaXNSZWFkYWJsZSA9IChzKSA9PiAhIXMgJiZcbiAgICB0eXBlb2YgcyA9PT0gJ29iamVjdCcgJiZcbiAgICBzIGluc3RhbmNlb2Ygbm9kZV9ldmVudHNfMS5FdmVudEVtaXR0ZXIgJiZcbiAgICB0eXBlb2Ygcy5waXBlID09PSAnZnVuY3Rpb24nICYmXG4gICAgLy8gbm9kZSBjb3JlIFdyaXRhYmxlIHN0cmVhbXMgaGF2ZSBhIHBpcGUoKSBtZXRob2QsIGJ1dCBpdCB0aHJvd3NcbiAgICBzLnBpcGUgIT09IG5vZGVfc3RyZWFtXzEuZGVmYXVsdC5Xcml0YWJsZS5wcm90b3R5cGUucGlwZTtcbmV4cG9ydHMuaXNSZWFkYWJsZSA9IGlzUmVhZGFibGU7XG4vKipcbiAqIFJldHVybiB0cnVlIGlmIHRoZSBhcmd1bWVudCBpcyBhIHZhbGlkIHtAbGluayBNaW5pcGFzcy5Xcml0YWJsZX1cbiAqL1xuY29uc3QgaXNXcml0YWJsZSA9IChzKSA9PiAhIXMgJiZcbiAgICB0eXBlb2YgcyA9PT0gJ29iamVjdCcgJiZcbiAgICBzIGluc3RhbmNlb2Ygbm9kZV9ldmVudHNfMS5FdmVudEVtaXR0ZXIgJiZcbiAgICB0eXBlb2Ygcy53cml0ZSA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBzLmVuZCA9PT0gJ2Z1bmN0aW9uJztcbmV4cG9ydHMuaXNXcml0YWJsZSA9IGlzV3JpdGFibGU7XG5jb25zdCBFT0YgPSBTeW1ib2woJ0VPRicpO1xuY29uc3QgTUFZQkVfRU1JVF9FTkQgPSBTeW1ib2woJ21heWJlRW1pdEVuZCcpO1xuY29uc3QgRU1JVFRFRF9FTkQgPSBTeW1ib2woJ2VtaXR0ZWRFbmQnKTtcbmNvbnN0IEVNSVRUSU5HX0VORCA9IFN5bWJvbCgnZW1pdHRpbmdFbmQnKTtcbmNvbnN0IEVNSVRURURfRVJST1IgPSBTeW1ib2woJ2VtaXR0ZWRFcnJvcicpO1xuY29uc3QgQ0xPU0VEID0gU3ltYm9sKCdjbG9zZWQnKTtcbmNvbnN0IFJFQUQgPSBTeW1ib2woJ3JlYWQnKTtcbmNvbnN0IEZMVVNIID0gU3ltYm9sKCdmbHVzaCcpO1xuY29uc3QgRkxVU0hDSFVOSyA9IFN5bWJvbCgnZmx1c2hDaHVuaycpO1xuY29uc3QgRU5DT0RJTkcgPSBTeW1ib2woJ2VuY29kaW5nJyk7XG5jb25zdCBERUNPREVSID0gU3ltYm9sKCdkZWNvZGVyJyk7XG5jb25zdCBGTE9XSU5HID0gU3ltYm9sKCdmbG93aW5nJyk7XG5jb25zdCBQQVVTRUQgPSBTeW1ib2woJ3BhdXNlZCcpO1xuY29uc3QgUkVTVU1FID0gU3ltYm9sKCdyZXN1bWUnKTtcbmNvbnN0IEJVRkZFUiA9IFN5bWJvbCgnYnVmZmVyJyk7XG5jb25zdCBQSVBFUyA9IFN5bWJvbCgncGlwZXMnKTtcbmNvbnN0IEJVRkZFUkxFTkdUSCA9IFN5bWJvbCgnYnVmZmVyTGVuZ3RoJyk7XG5jb25zdCBCVUZGRVJQVVNIID0gU3ltYm9sKCdidWZmZXJQdXNoJyk7XG5jb25zdCBCVUZGRVJTSElGVCA9IFN5bWJvbCgnYnVmZmVyU2hpZnQnKTtcbmNvbnN0IE9CSkVDVE1PREUgPSBTeW1ib2woJ29iamVjdE1vZGUnKTtcbi8vIGludGVybmFsIGV2ZW50IHdoZW4gc3RyZWFtIGlzIGRlc3Ryb3llZFxuY29uc3QgREVTVFJPWUVEID0gU3ltYm9sKCdkZXN0cm95ZWQnKTtcbi8vIGludGVybmFsIGV2ZW50IHdoZW4gc3RyZWFtIGhhcyBhbiBlcnJvclxuY29uc3QgRVJST1IgPSBTeW1ib2woJ2Vycm9yJyk7XG5jb25zdCBFTUlUREFUQSA9IFN5bWJvbCgnZW1pdERhdGEnKTtcbmNvbnN0IEVNSVRFTkQgPSBTeW1ib2woJ2VtaXRFbmQnKTtcbmNvbnN0IEVNSVRFTkQyID0gU3ltYm9sKCdlbWl0RW5kMicpO1xuY29uc3QgQVNZTkMgPSBTeW1ib2woJ2FzeW5jJyk7XG5jb25zdCBBQk9SVCA9IFN5bWJvbCgnYWJvcnQnKTtcbmNvbnN0IEFCT1JURUQgPSBTeW1ib2woJ2Fib3J0ZWQnKTtcbmNvbnN0IFNJR05BTCA9IFN5bWJvbCgnc2lnbmFsJyk7XG5jb25zdCBEQVRBTElTVEVORVJTID0gU3ltYm9sKCdkYXRhTGlzdGVuZXJzJyk7XG5jb25zdCBESVNDQVJERUQgPSBTeW1ib2woJ2Rpc2NhcmRlZCcpO1xuY29uc3QgZGVmZXIgPSAoZm4pID0+IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZm4pO1xuY29uc3Qgbm9kZWZlciA9IChmbikgPT4gZm4oKTtcbmNvbnN0IGlzRW5kaXNoID0gKGV2KSA9PiBldiA9PT0gJ2VuZCcgfHwgZXYgPT09ICdmaW5pc2gnIHx8IGV2ID09PSAncHJlZmluaXNoJztcbmNvbnN0IGlzQXJyYXlCdWZmZXJMaWtlID0gKGIpID0+IGIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciB8fFxuICAgICghIWIgJiZcbiAgICAgICAgdHlwZW9mIGIgPT09ICdvYmplY3QnICYmXG4gICAgICAgIGIuY29uc3RydWN0b3IgJiZcbiAgICAgICAgYi5jb25zdHJ1Y3Rvci5uYW1lID09PSAnQXJyYXlCdWZmZXInICYmXG4gICAgICAgIGIuYnl0ZUxlbmd0aCA+PSAwKTtcbmNvbnN0IGlzQXJyYXlCdWZmZXJWaWV3ID0gKGIpID0+ICFCdWZmZXIuaXNCdWZmZXIoYikgJiYgQXJyYXlCdWZmZXIuaXNWaWV3KGIpO1xuLyoqXG4gKiBJbnRlcm5hbCBjbGFzcyByZXByZXNlbnRpbmcgYSBwaXBlIHRvIGEgZGVzdGluYXRpb24gc3RyZWFtLlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5jbGFzcyBQaXBlIHtcbiAgICBzcmM7XG4gICAgZGVzdDtcbiAgICBvcHRzO1xuICAgIG9uZHJhaW47XG4gICAgY29uc3RydWN0b3Ioc3JjLCBkZXN0LCBvcHRzKSB7XG4gICAgICAgIHRoaXMuc3JjID0gc3JjO1xuICAgICAgICB0aGlzLmRlc3QgPSBkZXN0O1xuICAgICAgICB0aGlzLm9wdHMgPSBvcHRzO1xuICAgICAgICB0aGlzLm9uZHJhaW4gPSAoKSA9PiBzcmNbUkVTVU1FXSgpO1xuICAgICAgICB0aGlzLmRlc3Qub24oJ2RyYWluJywgdGhpcy5vbmRyYWluKTtcbiAgICB9XG4gICAgdW5waXBlKCkge1xuICAgICAgICB0aGlzLmRlc3QucmVtb3ZlTGlzdGVuZXIoJ2RyYWluJywgdGhpcy5vbmRyYWluKTtcbiAgICB9XG4gICAgLy8gb25seSBoZXJlIGZvciB0aGUgcHJvdG90eXBlXG4gICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgcHJveHlFcnJvcnMoX2VyKSB7IH1cbiAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgIGVuZCgpIHtcbiAgICAgICAgdGhpcy51bnBpcGUoKTtcbiAgICAgICAgaWYgKHRoaXMub3B0cy5lbmQpXG4gICAgICAgICAgICB0aGlzLmRlc3QuZW5kKCk7XG4gICAgfVxufVxuLyoqXG4gKiBJbnRlcm5hbCBjbGFzcyByZXByZXNlbnRpbmcgYSBwaXBlIHRvIGEgZGVzdGluYXRpb24gc3RyZWFtIHdoZXJlXG4gKiBlcnJvcnMgYXJlIHByb3hpZWQuXG4gKlxuICogQGludGVybmFsXG4gKi9cbmNsYXNzIFBpcGVQcm94eUVycm9ycyBleHRlbmRzIFBpcGUge1xuICAgIHVucGlwZSgpIHtcbiAgICAgICAgdGhpcy5zcmMucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5wcm94eUVycm9ycyk7XG4gICAgICAgIHN1cGVyLnVucGlwZSgpO1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihzcmMsIGRlc3QsIG9wdHMpIHtcbiAgICAgICAgc3VwZXIoc3JjLCBkZXN0LCBvcHRzKTtcbiAgICAgICAgdGhpcy5wcm94eUVycm9ycyA9IGVyID0+IGRlc3QuZW1pdCgnZXJyb3InLCBlcik7XG4gICAgICAgIHNyYy5vbignZXJyb3InLCB0aGlzLnByb3h5RXJyb3JzKTtcbiAgICB9XG59XG5jb25zdCBpc09iamVjdE1vZGVPcHRpb25zID0gKG8pID0+ICEhby5vYmplY3RNb2RlO1xuY29uc3QgaXNFbmNvZGluZ09wdGlvbnMgPSAobykgPT4gIW8ub2JqZWN0TW9kZSAmJiAhIW8uZW5jb2RpbmcgJiYgby5lbmNvZGluZyAhPT0gJ2J1ZmZlcic7XG4vKipcbiAqIE1haW4gZXhwb3J0LCB0aGUgTWluaXBhc3MgY2xhc3NcbiAqXG4gKiBgUlR5cGVgIGlzIHRoZSB0eXBlIG9mIGRhdGEgZW1pdHRlZCwgZGVmYXVsdHMgdG8gQnVmZmVyXG4gKlxuICogYFdUeXBlYCBpcyB0aGUgdHlwZSBvZiBkYXRhIHRvIGJlIHdyaXR0ZW4sIGlmIFJUeXBlIGlzIGJ1ZmZlciBvciBzdHJpbmcsXG4gKiB0aGVuIGFueSB7QGxpbmsgTWluaXBhc3MuQ29udGlndW91c0RhdGF9IGlzIGFsbG93ZWQuXG4gKlxuICogYEV2ZW50c2AgaXMgdGhlIHNldCBvZiBldmVudCBoYW5kbGVyIHNpZ25hdHVyZXMgdGhhdCB0aGlzIG9iamVjdFxuICogd2lsbCBlbWl0LCBzZWUge0BsaW5rIE1pbmlwYXNzLkV2ZW50c31cbiAqL1xuY2xhc3MgTWluaXBhc3MgZXh0ZW5kcyBub2RlX2V2ZW50c18xLkV2ZW50RW1pdHRlciB7XG4gICAgW0ZMT1dJTkddID0gZmFsc2U7XG4gICAgW1BBVVNFRF0gPSBmYWxzZTtcbiAgICBbUElQRVNdID0gW107XG4gICAgW0JVRkZFUl0gPSBbXTtcbiAgICBbT0JKRUNUTU9ERV07XG4gICAgW0VOQ09ESU5HXTtcbiAgICBbQVNZTkNdO1xuICAgIFtERUNPREVSXTtcbiAgICBbRU9GXSA9IGZhbHNlO1xuICAgIFtFTUlUVEVEX0VORF0gPSBmYWxzZTtcbiAgICBbRU1JVFRJTkdfRU5EXSA9IGZhbHNlO1xuICAgIFtDTE9TRURdID0gZmFsc2U7XG4gICAgW0VNSVRURURfRVJST1JdID0gbnVsbDtcbiAgICBbQlVGRkVSTEVOR1RIXSA9IDA7XG4gICAgW0RFU1RST1lFRF0gPSBmYWxzZTtcbiAgICBbU0lHTkFMXTtcbiAgICBbQUJPUlRFRF0gPSBmYWxzZTtcbiAgICBbREFUQUxJU1RFTkVSU10gPSAwO1xuICAgIFtESVNDQVJERURdID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogdHJ1ZSBpZiB0aGUgc3RyZWFtIGNhbiBiZSB3cml0dGVuXG4gICAgICovXG4gICAgd3JpdGFibGUgPSB0cnVlO1xuICAgIC8qKlxuICAgICAqIHRydWUgaWYgdGhlIHN0cmVhbSBjYW4gYmUgcmVhZFxuICAgICAqL1xuICAgIHJlYWRhYmxlID0gdHJ1ZTtcbiAgICAvKipcbiAgICAgKiBJZiBgUlR5cGVgIGlzIEJ1ZmZlciwgdGhlbiBvcHRpb25zIGRvIG5vdCBuZWVkIHRvIGJlIHByb3ZpZGVkLlxuICAgICAqIE90aGVyd2lzZSwgYW4gb3B0aW9ucyBvYmplY3QgbXVzdCBiZSBwcm92aWRlZCB0byBzcGVjaWZ5IGVpdGhlclxuICAgICAqIHtAbGluayBNaW5pcGFzcy5TaGFyZWRPcHRpb25zLm9iamVjdE1vZGV9IG9yXG4gICAgICoge0BsaW5rIE1pbmlwYXNzLlNoYXJlZE9wdGlvbnMuZW5jb2Rpbmd9LCBhcyBhcHByb3ByaWF0ZS5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvciguLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSAoYXJnc1swXSB8fFxuICAgICAgICAgICAge30pO1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICBpZiAob3B0aW9ucy5vYmplY3RNb2RlICYmIHR5cGVvZiBvcHRpb25zLmVuY29kaW5nID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRW5jb2RpbmcgYW5kIG9iamVjdE1vZGUgbWF5IG5vdCBiZSB1c2VkIHRvZ2V0aGVyJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzT2JqZWN0TW9kZU9wdGlvbnMob3B0aW9ucykpIHtcbiAgICAgICAgICAgIHRoaXNbT0JKRUNUTU9ERV0gPSB0cnVlO1xuICAgICAgICAgICAgdGhpc1tFTkNPRElOR10gPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzRW5jb2RpbmdPcHRpb25zKG9wdGlvbnMpKSB7XG4gICAgICAgICAgICB0aGlzW0VOQ09ESU5HXSA9IG9wdGlvbnMuZW5jb2Rpbmc7XG4gICAgICAgICAgICB0aGlzW09CSkVDVE1PREVdID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzW09CSkVDVE1PREVdID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzW0VOQ09ESU5HXSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpc1tBU1lOQ10gPSAhIW9wdGlvbnMuYXN5bmM7XG4gICAgICAgIHRoaXNbREVDT0RFUl0gPSB0aGlzW0VOQ09ESU5HXVxuICAgICAgICAgICAgPyBuZXcgbm9kZV9zdHJpbmdfZGVjb2Rlcl8xLlN0cmluZ0RlY29kZXIodGhpc1tFTkNPRElOR10pXG4gICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIC8vQHRzLWlnbm9yZSAtIHByaXZhdGUgb3B0aW9uIGZvciBkZWJ1Z2dpbmcgYW5kIHRlc3RpbmdcbiAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5kZWJ1Z0V4cG9zZUJ1ZmZlciA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdidWZmZXInLCB7IGdldDogKCkgPT4gdGhpc1tCVUZGRVJdIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vQHRzLWlnbm9yZSAtIHByaXZhdGUgb3B0aW9uIGZvciBkZWJ1Z2dpbmcgYW5kIHRlc3RpbmdcbiAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5kZWJ1Z0V4cG9zZVBpcGVzID09PSB0cnVlKSB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ3BpcGVzJywgeyBnZXQ6ICgpID0+IHRoaXNbUElQRVNdIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgc2lnbmFsIH0gPSBvcHRpb25zO1xuICAgICAgICBpZiAoc2lnbmFsKSB7XG4gICAgICAgICAgICB0aGlzW1NJR05BTF0gPSBzaWduYWw7XG4gICAgICAgICAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzW0FCT1JUXSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgKCkgPT4gdGhpc1tBQk9SVF0oKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGFtb3VudCBvZiBkYXRhIHN0b3JlZCBpbiB0aGUgYnVmZmVyIHdhaXRpbmcgdG8gYmUgcmVhZC5cbiAgICAgKlxuICAgICAqIEZvciBCdWZmZXIgc3RyaW5ncywgdGhpcyB3aWxsIGJlIHRoZSB0b3RhbCBieXRlIGxlbmd0aC5cbiAgICAgKiBGb3Igc3RyaW5nIGVuY29kaW5nIHN0cmVhbXMsIHRoaXMgd2lsbCBiZSB0aGUgc3RyaW5nIGNoYXJhY3RlciBsZW5ndGgsXG4gICAgICogYWNjb3JkaW5nIHRvIEphdmFTY3JpcHQncyBgc3RyaW5nLmxlbmd0aGAgbG9naWMuXG4gICAgICogRm9yIG9iamVjdE1vZGUgc3RyZWFtcywgdGhpcyBpcyBhIGNvdW50IG9mIHRoZSBpdGVtcyB3YWl0aW5nIHRvIGJlXG4gICAgICogZW1pdHRlZC5cbiAgICAgKi9cbiAgICBnZXQgYnVmZmVyTGVuZ3RoKCkge1xuICAgICAgICByZXR1cm4gdGhpc1tCVUZGRVJMRU5HVEhdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgYEJ1ZmZlckVuY29kaW5nYCBjdXJyZW50bHkgaW4gdXNlLCBvciBgbnVsbGBcbiAgICAgKi9cbiAgICBnZXQgZW5jb2RpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzW0VOQ09ESU5HXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgLSBUaGlzIGlzIGEgcmVhZCBvbmx5IHByb3BlcnR5XG4gICAgICovXG4gICAgc2V0IGVuY29kaW5nKF9lbmMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbmNvZGluZyBtdXN0IGJlIHNldCBhdCBpbnN0YW50aWF0aW9uIHRpbWUnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgLSBFbmNvZGluZyBtYXkgb25seSBiZSBzZXQgYXQgaW5zdGFudGlhdGlvbiB0aW1lXG4gICAgICovXG4gICAgc2V0RW5jb2RpbmcoX2VuYykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VuY29kaW5nIG11c3QgYmUgc2V0IGF0IGluc3RhbnRpYXRpb24gdGltZScpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUcnVlIGlmIHRoaXMgaXMgYW4gb2JqZWN0TW9kZSBzdHJlYW1cbiAgICAgKi9cbiAgICBnZXQgb2JqZWN0TW9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbT0JKRUNUTU9ERV07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIC0gVGhpcyBpcyBhIHJlYWQtb25seSBwcm9wZXJ0eVxuICAgICAqL1xuICAgIHNldCBvYmplY3RNb2RlKF9vbSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ29iamVjdE1vZGUgbXVzdCBiZSBzZXQgYXQgaW5zdGFudGlhdGlvbiB0aW1lJyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHRydWUgaWYgdGhpcyBpcyBhbiBhc3luYyBzdHJlYW1cbiAgICAgKi9cbiAgICBnZXQgWydhc3luYyddKCkge1xuICAgICAgICByZXR1cm4gdGhpc1tBU1lOQ107XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldCB0byB0cnVlIHRvIG1ha2UgdGhpcyBzdHJlYW0gYXN5bmMuXG4gICAgICpcbiAgICAgKiBPbmNlIHNldCwgaXQgY2Fubm90IGJlIHVuc2V0LCBhcyB0aGlzIHdvdWxkIHBvdGVudGlhbGx5IGNhdXNlIGluY29ycmVjdFxuICAgICAqIGJlaGF2aW9yLiAgSWUsIGEgc3luYyBzdHJlYW0gY2FuIGJlIG1hZGUgYXN5bmMsIGJ1dCBhbiBhc3luYyBzdHJlYW1cbiAgICAgKiBjYW5ub3QgYmUgc2FmZWx5IG1hZGUgc3luYy5cbiAgICAgKi9cbiAgICBzZXQgWydhc3luYyddKGEpIHtcbiAgICAgICAgdGhpc1tBU1lOQ10gPSB0aGlzW0FTWU5DXSB8fCAhIWE7XG4gICAgfVxuICAgIC8vIGRyb3AgZXZlcnl0aGluZyBhbmQgZ2V0IG91dCBvZiB0aGUgZmxvdyBjb21wbGV0ZWx5XG4gICAgW0FCT1JUXSgpIHtcbiAgICAgICAgdGhpc1tBQk9SVEVEXSA9IHRydWU7XG4gICAgICAgIHRoaXMuZW1pdCgnYWJvcnQnLCB0aGlzW1NJR05BTF0/LnJlYXNvbik7XG4gICAgICAgIHRoaXMuZGVzdHJveSh0aGlzW1NJR05BTF0/LnJlYXNvbik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRydWUgaWYgdGhlIHN0cmVhbSBoYXMgYmVlbiBhYm9ydGVkLlxuICAgICAqL1xuICAgIGdldCBhYm9ydGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpc1tBQk9SVEVEXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTm8tb3Agc2V0dGVyLiBTdHJlYW0gYWJvcnRlZCBzdGF0dXMgaXMgc2V0IHZpYSB0aGUgQWJvcnRTaWduYWwgcHJvdmlkZWRcbiAgICAgKiBpbiB0aGUgY29uc3RydWN0b3Igb3B0aW9ucy5cbiAgICAgKi9cbiAgICBzZXQgYWJvcnRlZChfKSB7IH1cbiAgICB3cml0ZShjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gICAgICAgIGlmICh0aGlzW0FCT1JURURdKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAodGhpc1tFT0ZdKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd3cml0ZSBhZnRlciBlbmQnKTtcbiAgICAgICAgaWYgKHRoaXNbREVTVFJPWUVEXSkge1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIE9iamVjdC5hc3NpZ24obmV3IEVycm9yKCdDYW5ub3QgY2FsbCB3cml0ZSBhZnRlciBhIHN0cmVhbSB3YXMgZGVzdHJveWVkJyksIHsgY29kZTogJ0VSUl9TVFJFQU1fREVTVFJPWUVEJyB9KSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYiA9IGVuY29kaW5nO1xuICAgICAgICAgICAgZW5jb2RpbmcgPSAndXRmOCc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFlbmNvZGluZylcbiAgICAgICAgICAgIGVuY29kaW5nID0gJ3V0ZjgnO1xuICAgICAgICBjb25zdCBmbiA9IHRoaXNbQVNZTkNdID8gZGVmZXIgOiBub2RlZmVyO1xuICAgICAgICAvLyBjb252ZXJ0IGFycmF5IGJ1ZmZlcnMgYW5kIHR5cGVkIGFycmF5IHZpZXdzIGludG8gYnVmZmVyc1xuICAgICAgICAvLyBhdCBzb21lIHBvaW50IGluIHRoZSBmdXR1cmUsIHdlIG1heSB3YW50IHRvIGRvIHRoZSBvcHBvc2l0ZSFcbiAgICAgICAgLy8gbGVhdmUgc3RyaW5ncyBhbmQgYnVmZmVycyBhcy1pc1xuICAgICAgICAvLyBhbnl0aGluZyBpcyBvbmx5IGFsbG93ZWQgaWYgaW4gb2JqZWN0IG1vZGUsIHNvIHRocm93XG4gICAgICAgIGlmICghdGhpc1tPQkpFQ1RNT0RFXSAmJiAhQnVmZmVyLmlzQnVmZmVyKGNodW5rKSkge1xuICAgICAgICAgICAgaWYgKGlzQXJyYXlCdWZmZXJWaWV3KGNodW5rKSkge1xuICAgICAgICAgICAgICAgIC8vQHRzLWlnbm9yZSAtIHNpbmZ1bCB1bnNhZmUgdHlwZSBjaGFuZ2luZ1xuICAgICAgICAgICAgICAgIGNodW5rID0gQnVmZmVyLmZyb20oY2h1bmsuYnVmZmVyLCBjaHVuay5ieXRlT2Zmc2V0LCBjaHVuay5ieXRlTGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzQXJyYXlCdWZmZXJMaWtlKGNodW5rKSkge1xuICAgICAgICAgICAgICAgIC8vQHRzLWlnbm9yZSAtIHNpbmZ1bCB1bnNhZmUgdHlwZSBjaGFuZ2luZ1xuICAgICAgICAgICAgICAgIGNodW5rID0gQnVmZmVyLmZyb20oY2h1bmspO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIGNodW5rICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm9uLWNvbnRpZ3VvdXMgZGF0YSB3cml0dGVuIHRvIG5vbi1vYmplY3RNb2RlIHN0cmVhbScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGhhbmRsZSBvYmplY3QgbW9kZSB1cCBmcm9udCwgc2luY2UgaXQncyBzaW1wbGVyXG4gICAgICAgIC8vIHRoaXMgeWllbGRzIGJldHRlciBwZXJmb3JtYW5jZSwgZmV3ZXIgY2hlY2tzIGxhdGVyLlxuICAgICAgICBpZiAodGhpc1tPQkpFQ1RNT0RFXSkge1xuICAgICAgICAgICAgLy8gbWF5YmUgaW1wb3NzaWJsZT9cbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICAgICAgaWYgKHRoaXNbRkxPV0lOR10gJiYgdGhpc1tCVUZGRVJMRU5HVEhdICE9PSAwKVxuICAgICAgICAgICAgICAgIHRoaXNbRkxVU0hdKHRydWUpO1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgICAgIGlmICh0aGlzW0ZMT1dJTkddKVxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnZGF0YScsIGNodW5rKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aGlzW0JVRkZFUlBVU0hdKGNodW5rKTtcbiAgICAgICAgICAgIGlmICh0aGlzW0JVRkZFUkxFTkdUSF0gIT09IDApXG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdyZWFkYWJsZScpO1xuICAgICAgICAgICAgaWYgKGNiKVxuICAgICAgICAgICAgICAgIGZuKGNiKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzW0ZMT1dJTkddO1xuICAgICAgICB9XG4gICAgICAgIC8vIGF0IHRoaXMgcG9pbnQgdGhlIGNodW5rIGlzIGEgYnVmZmVyIG9yIHN0cmluZ1xuICAgICAgICAvLyBkb24ndCBidWZmZXIgaXQgdXAgb3Igc2VuZCBpdCB0byB0aGUgZGVjb2RlclxuICAgICAgICBpZiAoIWNodW5rLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKHRoaXNbQlVGRkVSTEVOR1RIXSAhPT0gMClcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ3JlYWRhYmxlJyk7XG4gICAgICAgICAgICBpZiAoY2IpXG4gICAgICAgICAgICAgICAgZm4oY2IpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXNbRkxPV0lOR107XG4gICAgICAgIH1cbiAgICAgICAgLy8gZmFzdC1wYXRoIHdyaXRpbmcgc3RyaW5ncyBvZiBzYW1lIGVuY29kaW5nIHRvIGEgc3RyZWFtIHdpdGhcbiAgICAgICAgLy8gYW4gZW1wdHkgYnVmZmVyLCBza2lwcGluZyB0aGUgYnVmZmVyL2RlY29kZXIgZGFuY2VcbiAgICAgICAgaWYgKHR5cGVvZiBjaHVuayA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgIC8vIHVubGVzcyBpdCBpcyBhIHN0cmluZyBhbHJlYWR5IHJlYWR5IGZvciB1cyB0byB1c2VcbiAgICAgICAgICAgICEoZW5jb2RpbmcgPT09IHRoaXNbRU5DT0RJTkddICYmICF0aGlzW0RFQ09ERVJdPy5sYXN0TmVlZCkpIHtcbiAgICAgICAgICAgIC8vQHRzLWlnbm9yZSAtIHNpbmZ1bCB1bnNhZmUgdHlwZSBjaGFuZ2VcbiAgICAgICAgICAgIGNodW5rID0gQnVmZmVyLmZyb20oY2h1bmssIGVuY29kaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoQnVmZmVyLmlzQnVmZmVyKGNodW5rKSAmJiB0aGlzW0VOQ09ESU5HXSkge1xuICAgICAgICAgICAgLy9AdHMtaWdub3JlIC0gc2luZnVsIHVuc2FmZSB0eXBlIGNoYW5nZVxuICAgICAgICAgICAgY2h1bmsgPSB0aGlzW0RFQ09ERVJdLndyaXRlKGNodW5rKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBOb3RlOiBmbHVzaGluZyBDQU4gcG90ZW50aWFsbHkgc3dpdGNoIHVzIGludG8gbm90LWZsb3dpbmcgbW9kZVxuICAgICAgICBpZiAodGhpc1tGTE9XSU5HXSAmJiB0aGlzW0JVRkZFUkxFTkdUSF0gIT09IDApXG4gICAgICAgICAgICB0aGlzW0ZMVVNIXSh0cnVlKTtcbiAgICAgICAgaWYgKHRoaXNbRkxPV0lOR10pXG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2RhdGEnLCBjaHVuayk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXNbQlVGRkVSUFVTSF0oY2h1bmspO1xuICAgICAgICBpZiAodGhpc1tCVUZGRVJMRU5HVEhdICE9PSAwKVxuICAgICAgICAgICAgdGhpcy5lbWl0KCdyZWFkYWJsZScpO1xuICAgICAgICBpZiAoY2IpXG4gICAgICAgICAgICBmbihjYik7XG4gICAgICAgIHJldHVybiB0aGlzW0ZMT1dJTkddO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBMb3ctbGV2ZWwgZXhwbGljaXQgcmVhZCBtZXRob2QuXG4gICAgICpcbiAgICAgKiBJbiBvYmplY3RNb2RlLCB0aGUgYXJndW1lbnQgaXMgaWdub3JlZCwgYW5kIG9uZSBpdGVtIGlzIHJldHVybmVkIGlmXG4gICAgICogYXZhaWxhYmxlLlxuICAgICAqXG4gICAgICogYG5gIGlzIHRoZSBudW1iZXIgb2YgYnl0ZXMgKG9yIGluIHRoZSBjYXNlIG9mIGVuY29kaW5nIHN0cmVhbXMsXG4gICAgICogY2hhcmFjdGVycykgdG8gY29uc3VtZS4gSWYgYG5gIGlzIG5vdCBwcm92aWRlZCwgdGhlbiB0aGUgZW50aXJlIGJ1ZmZlclxuICAgICAqIGlzIHJldHVybmVkLCBvciBgbnVsbGAgaXMgcmV0dXJuZWQgaWYgbm8gZGF0YSBpcyBhdmFpbGFibGUuXG4gICAgICpcbiAgICAgKiBJZiBgbmAgaXMgZ3JlYXRlciB0aGF0IHRoZSBhbW91bnQgb2YgZGF0YSBpbiB0aGUgaW50ZXJuYWwgYnVmZmVyLFxuICAgICAqIHRoZW4gYG51bGxgIGlzIHJldHVybmVkLlxuICAgICAqL1xuICAgIHJlYWQobikge1xuICAgICAgICBpZiAodGhpc1tERVNUUk9ZRURdKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIHRoaXNbRElTQ0FSREVEXSA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpc1tCVUZGRVJMRU5HVEhdID09PSAwIHx8XG4gICAgICAgICAgICBuID09PSAwIHx8XG4gICAgICAgICAgICAobiAmJiBuID4gdGhpc1tCVUZGRVJMRU5HVEhdKSkge1xuICAgICAgICAgICAgdGhpc1tNQVlCRV9FTUlUX0VORF0oKTtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzW09CSkVDVE1PREVdKVxuICAgICAgICAgICAgbiA9IG51bGw7XG4gICAgICAgIGlmICh0aGlzW0JVRkZFUl0ubGVuZ3RoID4gMSAmJiAhdGhpc1tPQkpFQ1RNT0RFXSkge1xuICAgICAgICAgICAgLy8gbm90IG9iamVjdCBtb2RlLCBzbyBpZiB3ZSBoYXZlIGFuIGVuY29kaW5nLCB0aGVuIFJUeXBlIGlzIHN0cmluZ1xuICAgICAgICAgICAgLy8gb3RoZXJ3aXNlLCBtdXN0IGJlIEJ1ZmZlclxuICAgICAgICAgICAgdGhpc1tCVUZGRVJdID0gW1xuICAgICAgICAgICAgICAgICh0aGlzW0VOQ09ESU5HXVxuICAgICAgICAgICAgICAgICAgICA/IHRoaXNbQlVGRkVSXS5qb2luKCcnKVxuICAgICAgICAgICAgICAgICAgICA6IEJ1ZmZlci5jb25jYXQodGhpc1tCVUZGRVJdLCB0aGlzW0JVRkZFUkxFTkdUSF0pKSxcbiAgICAgICAgICAgIF07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmV0ID0gdGhpc1tSRUFEXShuIHx8IG51bGwsIHRoaXNbQlVGRkVSXVswXSk7XG4gICAgICAgIHRoaXNbTUFZQkVfRU1JVF9FTkRdKCk7XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICAgIFtSRUFEXShuLCBjaHVuaykge1xuICAgICAgICBpZiAodGhpc1tPQkpFQ1RNT0RFXSlcbiAgICAgICAgICAgIHRoaXNbQlVGRkVSU0hJRlRdKCk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgYyA9IGNodW5rO1xuICAgICAgICAgICAgaWYgKG4gPT09IGMubGVuZ3RoIHx8IG4gPT09IG51bGwpXG4gICAgICAgICAgICAgICAgdGhpc1tCVUZGRVJTSElGVF0oKTtcbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBjID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHRoaXNbQlVGRkVSXVswXSA9IGMuc2xpY2Uobik7XG4gICAgICAgICAgICAgICAgY2h1bmsgPSBjLnNsaWNlKDAsIG4pO1xuICAgICAgICAgICAgICAgIHRoaXNbQlVGRkVSTEVOR1RIXSAtPSBuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpc1tCVUZGRVJdWzBdID0gYy5zdWJhcnJheShuKTtcbiAgICAgICAgICAgICAgICBjaHVuayA9IGMuc3ViYXJyYXkoMCwgbik7XG4gICAgICAgICAgICAgICAgdGhpc1tCVUZGRVJMRU5HVEhdIC09IG47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbWl0KCdkYXRhJywgY2h1bmspO1xuICAgICAgICBpZiAoIXRoaXNbQlVGRkVSXS5sZW5ndGggJiYgIXRoaXNbRU9GXSlcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZHJhaW4nKTtcbiAgICAgICAgcmV0dXJuIGNodW5rO1xuICAgIH1cbiAgICBlbmQoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICAgICAgICBpZiAodHlwZW9mIGNodW5rID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYiA9IGNodW5rO1xuICAgICAgICAgICAgY2h1bmsgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2IgPSBlbmNvZGluZztcbiAgICAgICAgICAgIGVuY29kaW5nID0gJ3V0ZjgnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaHVuayAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgdGhpcy53cml0ZShjaHVuaywgZW5jb2RpbmcpO1xuICAgICAgICBpZiAoY2IpXG4gICAgICAgICAgICB0aGlzLm9uY2UoJ2VuZCcsIGNiKTtcbiAgICAgICAgdGhpc1tFT0ZdID0gdHJ1ZTtcbiAgICAgICAgdGhpcy53cml0YWJsZSA9IGZhbHNlO1xuICAgICAgICAvLyBpZiB3ZSBoYXZlbid0IHdyaXR0ZW4gYW55dGhpbmcsIHRoZW4gZ28gYWhlYWQgYW5kIGVtaXQsXG4gICAgICAgIC8vIGV2ZW4gaWYgd2UncmUgbm90IHJlYWRpbmcuXG4gICAgICAgIC8vIHdlJ2xsIHJlLWVtaXQgaWYgYSBuZXcgJ2VuZCcgbGlzdGVuZXIgaXMgYWRkZWQgYW55d2F5LlxuICAgICAgICAvLyBUaGlzIG1ha2VzIE1QIG1vcmUgc3VpdGFibGUgdG8gd3JpdGUtb25seSB1c2UgY2FzZXMuXG4gICAgICAgIGlmICh0aGlzW0ZMT1dJTkddIHx8ICF0aGlzW1BBVVNFRF0pXG4gICAgICAgICAgICB0aGlzW01BWUJFX0VNSVRfRU5EXSgpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLy8gZG9uJ3QgbGV0IHRoZSBpbnRlcm5hbCByZXN1bWUgYmUgb3ZlcndyaXR0ZW5cbiAgICBbUkVTVU1FXSgpIHtcbiAgICAgICAgaWYgKHRoaXNbREVTVFJPWUVEXSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKCF0aGlzW0RBVEFMSVNURU5FUlNdICYmICF0aGlzW1BJUEVTXS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXNbRElTQ0FSREVEXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpc1tQQVVTRURdID0gZmFsc2U7XG4gICAgICAgIHRoaXNbRkxPV0lOR10gPSB0cnVlO1xuICAgICAgICB0aGlzLmVtaXQoJ3Jlc3VtZScpO1xuICAgICAgICBpZiAodGhpc1tCVUZGRVJdLmxlbmd0aClcbiAgICAgICAgICAgIHRoaXNbRkxVU0hdKCk7XG4gICAgICAgIGVsc2UgaWYgKHRoaXNbRU9GXSlcbiAgICAgICAgICAgIHRoaXNbTUFZQkVfRU1JVF9FTkRdKCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZHJhaW4nKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVzdW1lIHRoZSBzdHJlYW0gaWYgaXQgaXMgY3VycmVudGx5IGluIGEgcGF1c2VkIHN0YXRlXG4gICAgICpcbiAgICAgKiBJZiBjYWxsZWQgd2hlbiB0aGVyZSBhcmUgbm8gcGlwZSBkZXN0aW5hdGlvbnMgb3IgYGRhdGFgIGV2ZW50IGxpc3RlbmVycyxcbiAgICAgKiB0aGlzIHdpbGwgcGxhY2UgdGhlIHN0cmVhbSBpbiBhIFwiZGlzY2FyZGVkXCIgc3RhdGUsIHdoZXJlIGFsbCBkYXRhIHdpbGxcbiAgICAgKiBiZSB0aHJvd24gYXdheS4gVGhlIGRpc2NhcmRlZCBzdGF0ZSBpcyByZW1vdmVkIGlmIGEgcGlwZSBkZXN0aW5hdGlvbiBvclxuICAgICAqIGRhdGEgaGFuZGxlciBpcyBhZGRlZCwgaWYgcGF1c2UoKSBpcyBjYWxsZWQsIG9yIGlmIGFueSBzeW5jaHJvbm91cyBvclxuICAgICAqIGFzeW5jaHJvbm91cyBpdGVyYXRpb24gaXMgc3RhcnRlZC5cbiAgICAgKi9cbiAgICByZXN1bWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzW1JFU1VNRV0oKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUGF1c2UgdGhlIHN0cmVhbVxuICAgICAqL1xuICAgIHBhdXNlKCkge1xuICAgICAgICB0aGlzW0ZMT1dJTkddID0gZmFsc2U7XG4gICAgICAgIHRoaXNbUEFVU0VEXSA9IHRydWU7XG4gICAgICAgIHRoaXNbRElTQ0FSREVEXSA9IGZhbHNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiB0cnVlIGlmIHRoZSBzdHJlYW0gaGFzIGJlZW4gZm9yY2libHkgZGVzdHJveWVkXG4gICAgICovXG4gICAgZ2V0IGRlc3Ryb3llZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbREVTVFJPWUVEXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogdHJ1ZSBpZiB0aGUgc3RyZWFtIGlzIGN1cnJlbnRseSBpbiBhIGZsb3dpbmcgc3RhdGUsIG1lYW5pbmcgdGhhdFxuICAgICAqIGFueSB3cml0ZXMgd2lsbCBiZSBpbW1lZGlhdGVseSBlbWl0dGVkLlxuICAgICAqL1xuICAgIGdldCBmbG93aW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpc1tGTE9XSU5HXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogdHJ1ZSBpZiB0aGUgc3RyZWFtIGlzIGN1cnJlbnRseSBpbiBhIHBhdXNlZCBzdGF0ZVxuICAgICAqL1xuICAgIGdldCBwYXVzZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzW1BBVVNFRF07XG4gICAgfVxuICAgIFtCVUZGRVJQVVNIXShjaHVuaykge1xuICAgICAgICBpZiAodGhpc1tPQkpFQ1RNT0RFXSlcbiAgICAgICAgICAgIHRoaXNbQlVGRkVSTEVOR1RIXSArPSAxO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzW0JVRkZFUkxFTkdUSF0gKz0gY2h1bmsubGVuZ3RoO1xuICAgICAgICB0aGlzW0JVRkZFUl0ucHVzaChjaHVuayk7XG4gICAgfVxuICAgIFtCVUZGRVJTSElGVF0oKSB7XG4gICAgICAgIGlmICh0aGlzW09CSkVDVE1PREVdKVxuICAgICAgICAgICAgdGhpc1tCVUZGRVJMRU5HVEhdIC09IDE7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXNbQlVGRkVSTEVOR1RIXSAtPSB0aGlzW0JVRkZFUl1bMF0ubGVuZ3RoO1xuICAgICAgICByZXR1cm4gdGhpc1tCVUZGRVJdLnNoaWZ0KCk7XG4gICAgfVxuICAgIFtGTFVTSF0obm9EcmFpbiA9IGZhbHNlKSB7XG4gICAgICAgIGRvIHsgfSB3aGlsZSAodGhpc1tGTFVTSENIVU5LXSh0aGlzW0JVRkZFUlNISUZUXSgpKSAmJlxuICAgICAgICAgICAgdGhpc1tCVUZGRVJdLmxlbmd0aCk7XG4gICAgICAgIGlmICghbm9EcmFpbiAmJiAhdGhpc1tCVUZGRVJdLmxlbmd0aCAmJiAhdGhpc1tFT0ZdKVxuICAgICAgICAgICAgdGhpcy5lbWl0KCdkcmFpbicpO1xuICAgIH1cbiAgICBbRkxVU0hDSFVOS10oY2h1bmspIHtcbiAgICAgICAgdGhpcy5lbWl0KCdkYXRhJywgY2h1bmspO1xuICAgICAgICByZXR1cm4gdGhpc1tGTE9XSU5HXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUGlwZSBhbGwgZGF0YSBlbWl0dGVkIGJ5IHRoaXMgc3RyZWFtIGludG8gdGhlIGRlc3RpbmF0aW9uIHByb3ZpZGVkLlxuICAgICAqXG4gICAgICogVHJpZ2dlcnMgdGhlIGZsb3cgb2YgZGF0YS5cbiAgICAgKi9cbiAgICBwaXBlKGRlc3QsIG9wdHMpIHtcbiAgICAgICAgaWYgKHRoaXNbREVTVFJPWUVEXSlcbiAgICAgICAgICAgIHJldHVybiBkZXN0O1xuICAgICAgICB0aGlzW0RJU0NBUkRFRF0gPSBmYWxzZTtcbiAgICAgICAgY29uc3QgZW5kZWQgPSB0aGlzW0VNSVRURURfRU5EXTtcbiAgICAgICAgb3B0cyA9IG9wdHMgfHwge307XG4gICAgICAgIGlmIChkZXN0ID09PSBwcm9jLnN0ZG91dCB8fCBkZXN0ID09PSBwcm9jLnN0ZGVycilcbiAgICAgICAgICAgIG9wdHMuZW5kID0gZmFsc2U7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIG9wdHMuZW5kID0gb3B0cy5lbmQgIT09IGZhbHNlO1xuICAgICAgICBvcHRzLnByb3h5RXJyb3JzID0gISFvcHRzLnByb3h5RXJyb3JzO1xuICAgICAgICAvLyBwaXBpbmcgYW4gZW5kZWQgc3RyZWFtIGVuZHMgaW1tZWRpYXRlbHlcbiAgICAgICAgaWYgKGVuZGVkKSB7XG4gICAgICAgICAgICBpZiAob3B0cy5lbmQpXG4gICAgICAgICAgICAgICAgZGVzdC5lbmQoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIFwiYXNcIiBoZXJlIGp1c3QgaWdub3JlcyB0aGUgV1R5cGUsIHdoaWNoIHBpcGVzIGRvbid0IGNhcmUgYWJvdXQsXG4gICAgICAgICAgICAvLyBzaW5jZSB0aGV5J3JlIG9ubHkgY29uc3VtaW5nIGZyb20gdXMsIGFuZCB3cml0aW5nIHRvIHRoZSBkZXN0XG4gICAgICAgICAgICB0aGlzW1BJUEVTXS5wdXNoKCFvcHRzLnByb3h5RXJyb3JzXG4gICAgICAgICAgICAgICAgPyBuZXcgUGlwZSh0aGlzLCBkZXN0LCBvcHRzKVxuICAgICAgICAgICAgICAgIDogbmV3IFBpcGVQcm94eUVycm9ycyh0aGlzLCBkZXN0LCBvcHRzKSk7XG4gICAgICAgICAgICBpZiAodGhpc1tBU1lOQ10pXG4gICAgICAgICAgICAgICAgZGVmZXIoKCkgPT4gdGhpc1tSRVNVTUVdKCkpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRoaXNbUkVTVU1FXSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZXN0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBGdWxseSB1bmhvb2sgYSBwaXBlZCBkZXN0aW5hdGlvbiBzdHJlYW0uXG4gICAgICpcbiAgICAgKiBJZiB0aGUgZGVzdGluYXRpb24gc3RyZWFtIHdhcyB0aGUgb25seSBjb25zdW1lciBvZiB0aGlzIHN0cmVhbSAoaWUsXG4gICAgICogdGhlcmUgYXJlIG5vIG90aGVyIHBpcGVkIGRlc3RpbmF0aW9ucyBvciBgJ2RhdGEnYCBldmVudCBsaXN0ZW5lcnMpXG4gICAgICogdGhlbiB0aGUgZmxvdyBvZiBkYXRhIHdpbGwgc3RvcCB1bnRpbCB0aGVyZSBpcyBhbm90aGVyIGNvbnN1bWVyIG9yXG4gICAgICoge0BsaW5rIE1pbmlwYXNzI3Jlc3VtZX0gaXMgZXhwbGljaXRseSBjYWxsZWQuXG4gICAgICovXG4gICAgdW5waXBlKGRlc3QpIHtcbiAgICAgICAgY29uc3QgcCA9IHRoaXNbUElQRVNdLmZpbmQocCA9PiBwLmRlc3QgPT09IGRlc3QpO1xuICAgICAgICBpZiAocCkge1xuICAgICAgICAgICAgaWYgKHRoaXNbUElQRVNdLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzW0ZMT1dJTkddICYmIHRoaXNbREFUQUxJU1RFTkVSU10gPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpc1tGTE9XSU5HXSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzW1BJUEVTXSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRoaXNbUElQRVNdLnNwbGljZSh0aGlzW1BJUEVTXS5pbmRleE9mKHApLCAxKTtcbiAgICAgICAgICAgIHAudW5waXBlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQWxpYXMgZm9yIHtAbGluayBNaW5pcGFzcyNvbn1cbiAgICAgKi9cbiAgICBhZGRMaXN0ZW5lcihldiwgaGFuZGxlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5vbihldiwgaGFuZGxlcik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1vc3RseSBpZGVudGljYWwgdG8gYEV2ZW50RW1pdHRlci5vbmAsIHdpdGggdGhlIGZvbGxvd2luZ1xuICAgICAqIGJlaGF2aW9yIGRpZmZlcmVuY2VzIHRvIHByZXZlbnQgZGF0YSBsb3NzIGFuZCB1bm5lY2Vzc2FyeSBoYW5nczpcbiAgICAgKlxuICAgICAqIC0gQWRkaW5nIGEgJ2RhdGEnIGV2ZW50IGhhbmRsZXIgd2lsbCB0cmlnZ2VyIHRoZSBmbG93IG9mIGRhdGFcbiAgICAgKlxuICAgICAqIC0gQWRkaW5nIGEgJ3JlYWRhYmxlJyBldmVudCBoYW5kbGVyIHdoZW4gdGhlcmUgaXMgZGF0YSB3YWl0aW5nIHRvIGJlIHJlYWRcbiAgICAgKiAgIHdpbGwgY2F1c2UgJ3JlYWRhYmxlJyB0byBiZSBlbWl0dGVkIGltbWVkaWF0ZWx5LlxuICAgICAqXG4gICAgICogLSBBZGRpbmcgYW4gJ2VuZGlzaCcgZXZlbnQgaGFuZGxlciAoJ2VuZCcsICdmaW5pc2gnLCBldGMuKSB3aGljaCBoYXNcbiAgICAgKiAgIGFscmVhZHkgcGFzc2VkIHdpbGwgY2F1c2UgdGhlIGV2ZW50IHRvIGJlIGVtaXR0ZWQgaW1tZWRpYXRlbHkgYW5kIGFsbFxuICAgICAqICAgaGFuZGxlcnMgcmVtb3ZlZC5cbiAgICAgKlxuICAgICAqIC0gQWRkaW5nIGFuICdlcnJvcicgZXZlbnQgaGFuZGxlciBhZnRlciBhbiBlcnJvciBoYXMgYmVlbiBlbWl0dGVkIHdpbGxcbiAgICAgKiAgIGNhdXNlIHRoZSBldmVudCB0byBiZSByZS1lbWl0dGVkIGltbWVkaWF0ZWx5IHdpdGggdGhlIGVycm9yIHByZXZpb3VzbHlcbiAgICAgKiAgIHJhaXNlZC5cbiAgICAgKi9cbiAgICBvbihldiwgaGFuZGxlcikge1xuICAgICAgICBjb25zdCByZXQgPSBzdXBlci5vbihldiwgaGFuZGxlcik7XG4gICAgICAgIGlmIChldiA9PT0gJ2RhdGEnKSB7XG4gICAgICAgICAgICB0aGlzW0RJU0NBUkRFRF0gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXNbREFUQUxJU1RFTkVSU10rKztcbiAgICAgICAgICAgIGlmICghdGhpc1tQSVBFU10ubGVuZ3RoICYmICF0aGlzW0ZMT1dJTkddKSB7XG4gICAgICAgICAgICAgICAgdGhpc1tSRVNVTUVdKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXYgPT09ICdyZWFkYWJsZScgJiYgdGhpc1tCVUZGRVJMRU5HVEhdICE9PSAwKSB7XG4gICAgICAgICAgICBzdXBlci5lbWl0KCdyZWFkYWJsZScpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzRW5kaXNoKGV2KSAmJiB0aGlzW0VNSVRURURfRU5EXSkge1xuICAgICAgICAgICAgc3VwZXIuZW1pdChldik7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhldik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXYgPT09ICdlcnJvcicgJiYgdGhpc1tFTUlUVEVEX0VSUk9SXSkge1xuICAgICAgICAgICAgY29uc3QgaCA9IGhhbmRsZXI7XG4gICAgICAgICAgICBpZiAodGhpc1tBU1lOQ10pXG4gICAgICAgICAgICAgICAgZGVmZXIoKCkgPT4gaC5jYWxsKHRoaXMsIHRoaXNbRU1JVFRFRF9FUlJPUl0pKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBoLmNhbGwodGhpcywgdGhpc1tFTUlUVEVEX0VSUk9SXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWxpYXMgZm9yIHtAbGluayBNaW5pcGFzcyNvZmZ9XG4gICAgICovXG4gICAgcmVtb3ZlTGlzdGVuZXIoZXYsIGhhbmRsZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub2ZmKGV2LCBoYW5kbGVyKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTW9zdGx5IGlkZW50aWNhbCB0byBgRXZlbnRFbWl0dGVyLm9mZmBcbiAgICAgKlxuICAgICAqIElmIGEgJ2RhdGEnIGV2ZW50IGhhbmRsZXIgaXMgcmVtb3ZlZCwgYW5kIGl0IHdhcyB0aGUgbGFzdCBjb25zdW1lclxuICAgICAqIChpZSwgdGhlcmUgYXJlIG5vIHBpcGUgZGVzdGluYXRpb25zIG9yIG90aGVyICdkYXRhJyBldmVudCBsaXN0ZW5lcnMpLFxuICAgICAqIHRoZW4gdGhlIGZsb3cgb2YgZGF0YSB3aWxsIHN0b3AgdW50aWwgdGhlcmUgaXMgYW5vdGhlciBjb25zdW1lciBvclxuICAgICAqIHtAbGluayBNaW5pcGFzcyNyZXN1bWV9IGlzIGV4cGxpY2l0bHkgY2FsbGVkLlxuICAgICAqL1xuICAgIG9mZihldiwgaGFuZGxlcikge1xuICAgICAgICBjb25zdCByZXQgPSBzdXBlci5vZmYoZXYsIGhhbmRsZXIpO1xuICAgICAgICAvLyBpZiB3ZSBwcmV2aW91c2x5IGhhZCBsaXN0ZW5lcnMsIGFuZCBub3cgd2UgZG9uJ3QsIGFuZCB3ZSBkb24ndFxuICAgICAgICAvLyBoYXZlIGFueSBwaXBlcywgdGhlbiBzdG9wIHRoZSBmbG93LCB1bmxlc3MgaXQncyBiZWVuIGV4cGxpY2l0bHlcbiAgICAgICAgLy8gcHV0IGluIGEgZGlzY2FyZGVkIGZsb3dpbmcgc3RhdGUgdmlhIHN0cmVhbS5yZXN1bWUoKS5cbiAgICAgICAgaWYgKGV2ID09PSAnZGF0YScpIHtcbiAgICAgICAgICAgIHRoaXNbREFUQUxJU1RFTkVSU10gPSB0aGlzLmxpc3RlbmVycygnZGF0YScpLmxlbmd0aDtcbiAgICAgICAgICAgIGlmICh0aGlzW0RBVEFMSVNURU5FUlNdID09PSAwICYmXG4gICAgICAgICAgICAgICAgIXRoaXNbRElTQ0FSREVEXSAmJlxuICAgICAgICAgICAgICAgICF0aGlzW1BJUEVTXS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzW0ZMT1dJTkddID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTW9zdGx5IGlkZW50aWNhbCB0byBgRXZlbnRFbWl0dGVyLnJlbW92ZUFsbExpc3RlbmVyc2BcbiAgICAgKlxuICAgICAqIElmIGFsbCAnZGF0YScgZXZlbnQgaGFuZGxlcnMgYXJlIHJlbW92ZWQsIGFuZCB0aGV5IHdlcmUgdGhlIGxhc3QgY29uc3VtZXJcbiAgICAgKiAoaWUsIHRoZXJlIGFyZSBubyBwaXBlIGRlc3RpbmF0aW9ucyksIHRoZW4gdGhlIGZsb3cgb2YgZGF0YSB3aWxsIHN0b3BcbiAgICAgKiB1bnRpbCB0aGVyZSBpcyBhbm90aGVyIGNvbnN1bWVyIG9yIHtAbGluayBNaW5pcGFzcyNyZXN1bWV9IGlzIGV4cGxpY2l0bHlcbiAgICAgKiBjYWxsZWQuXG4gICAgICovXG4gICAgcmVtb3ZlQWxsTGlzdGVuZXJzKGV2KSB7XG4gICAgICAgIGNvbnN0IHJldCA9IHN1cGVyLnJlbW92ZUFsbExpc3RlbmVycyhldik7XG4gICAgICAgIGlmIChldiA9PT0gJ2RhdGEnIHx8IGV2ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXNbREFUQUxJU1RFTkVSU10gPSAwO1xuICAgICAgICAgICAgaWYgKCF0aGlzW0RJU0NBUkRFRF0gJiYgIXRoaXNbUElQRVNdLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXNbRkxPV0lOR10gPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiB0cnVlIGlmIHRoZSAnZW5kJyBldmVudCBoYXMgYmVlbiBlbWl0dGVkXG4gICAgICovXG4gICAgZ2V0IGVtaXR0ZWRFbmQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzW0VNSVRURURfRU5EXTtcbiAgICB9XG4gICAgW01BWUJFX0VNSVRfRU5EXSgpIHtcbiAgICAgICAgaWYgKCF0aGlzW0VNSVRUSU5HX0VORF0gJiZcbiAgICAgICAgICAgICF0aGlzW0VNSVRURURfRU5EXSAmJlxuICAgICAgICAgICAgIXRoaXNbREVTVFJPWUVEXSAmJlxuICAgICAgICAgICAgdGhpc1tCVUZGRVJdLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICAgICAgdGhpc1tFT0ZdKSB7XG4gICAgICAgICAgICB0aGlzW0VNSVRUSU5HX0VORF0gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdlbmQnKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgncHJlZmluaXNoJyk7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2ZpbmlzaCcpO1xuICAgICAgICAgICAgaWYgKHRoaXNbQ0xPU0VEXSlcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Nsb3NlJyk7XG4gICAgICAgICAgICB0aGlzW0VNSVRUSU5HX0VORF0gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBNb3N0bHkgaWRlbnRpY2FsIHRvIGBFdmVudEVtaXR0ZXIuZW1pdGAsIHdpdGggdGhlIGZvbGxvd2luZ1xuICAgICAqIGJlaGF2aW9yIGRpZmZlcmVuY2VzIHRvIHByZXZlbnQgZGF0YSBsb3NzIGFuZCB1bm5lY2Vzc2FyeSBoYW5nczpcbiAgICAgKlxuICAgICAqIElmIHRoZSBzdHJlYW0gaGFzIGJlZW4gZGVzdHJveWVkLCBhbmQgdGhlIGV2ZW50IGlzIHNvbWV0aGluZyBvdGhlclxuICAgICAqIHRoYW4gJ2Nsb3NlJyBvciAnZXJyb3InLCB0aGVuIGBmYWxzZWAgaXMgcmV0dXJuZWQgYW5kIG5vIGhhbmRsZXJzXG4gICAgICogYXJlIGNhbGxlZC5cbiAgICAgKlxuICAgICAqIElmIHRoZSBldmVudCBpcyAnZW5kJywgYW5kIGhhcyBhbHJlYWR5IGJlZW4gZW1pdHRlZCwgdGhlbiB0aGUgZXZlbnRcbiAgICAgKiBpcyBpZ25vcmVkLiBJZiB0aGUgc3RyZWFtIGlzIGluIGEgcGF1c2VkIG9yIG5vbi1mbG93aW5nIHN0YXRlLCB0aGVuXG4gICAgICogdGhlIGV2ZW50IHdpbGwgYmUgZGVmZXJyZWQgdW50aWwgZGF0YSBmbG93IHJlc3VtZXMuIElmIHRoZSBzdHJlYW0gaXNcbiAgICAgKiBhc3luYywgdGhlbiBoYW5kbGVycyB3aWxsIGJlIGNhbGxlZCBvbiB0aGUgbmV4dCB0aWNrIHJhdGhlciB0aGFuXG4gICAgICogaW1tZWRpYXRlbHkuXG4gICAgICpcbiAgICAgKiBJZiB0aGUgZXZlbnQgaXMgJ2Nsb3NlJywgYW5kICdlbmQnIGhhcyBub3QgeWV0IGJlZW4gZW1pdHRlZCwgdGhlblxuICAgICAqIHRoZSBldmVudCB3aWxsIGJlIGRlZmVycmVkIHVudGlsIGFmdGVyICdlbmQnIGlzIGVtaXR0ZWQuXG4gICAgICpcbiAgICAgKiBJZiB0aGUgZXZlbnQgaXMgJ2Vycm9yJywgYW5kIGFuIEFib3J0U2lnbmFsIHdhcyBwcm92aWRlZCBmb3IgdGhlIHN0cmVhbSxcbiAgICAgKiBhbmQgdGhlcmUgYXJlIG5vIGxpc3RlbmVycywgdGhlbiB0aGUgZXZlbnQgaXMgaWdub3JlZCwgbWF0Y2hpbmcgdGhlXG4gICAgICogYmVoYXZpb3Igb2Ygbm9kZSBjb3JlIHN0cmVhbXMgaW4gdGhlIHByZXNlbnNlIG9mIGFuIEFib3J0U2lnbmFsLlxuICAgICAqXG4gICAgICogSWYgdGhlIGV2ZW50IGlzICdmaW5pc2gnIG9yICdwcmVmaW5pc2gnLCB0aGVuIGFsbCBsaXN0ZW5lcnMgd2lsbCBiZVxuICAgICAqIHJlbW92ZWQgYWZ0ZXIgZW1pdHRpbmcgdGhlIGV2ZW50LCB0byBwcmV2ZW50IGRvdWJsZS1maXJpbmcuXG4gICAgICovXG4gICAgZW1pdChldiwgLi4uYXJncykge1xuICAgICAgICBjb25zdCBkYXRhID0gYXJnc1swXTtcbiAgICAgICAgLy8gZXJyb3IgYW5kIGNsb3NlIGFyZSBvbmx5IGV2ZW50cyBhbGxvd2VkIGFmdGVyIGNhbGxpbmcgZGVzdHJveSgpXG4gICAgICAgIGlmIChldiAhPT0gJ2Vycm9yJyAmJlxuICAgICAgICAgICAgZXYgIT09ICdjbG9zZScgJiZcbiAgICAgICAgICAgIGV2ICE9PSBERVNUUk9ZRUQgJiZcbiAgICAgICAgICAgIHRoaXNbREVTVFJPWUVEXSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGV2ID09PSAnZGF0YScpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGhpc1tPQkpFQ1RNT0RFXSAmJiAhZGF0YVxuICAgICAgICAgICAgICAgID8gZmFsc2VcbiAgICAgICAgICAgICAgICA6IHRoaXNbQVNZTkNdXG4gICAgICAgICAgICAgICAgICAgID8gKGRlZmVyKCgpID0+IHRoaXNbRU1JVERBVEFdKGRhdGEpKSwgdHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzW0VNSVREQVRBXShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChldiA9PT0gJ2VuZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzW0VNSVRFTkRdKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXYgPT09ICdjbG9zZScpIHtcbiAgICAgICAgICAgIHRoaXNbQ0xPU0VEXSA9IHRydWU7XG4gICAgICAgICAgICAvLyBkb24ndCBlbWl0IGNsb3NlIGJlZm9yZSAnZW5kJyBhbmQgJ2ZpbmlzaCdcbiAgICAgICAgICAgIGlmICghdGhpc1tFTUlUVEVEX0VORF0gJiYgIXRoaXNbREVTVFJPWUVEXSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCByZXQgPSBzdXBlci5lbWl0KCdjbG9zZScpO1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoJ2Nsb3NlJyk7XG4gICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGV2ID09PSAnZXJyb3InKSB7XG4gICAgICAgICAgICB0aGlzW0VNSVRURURfRVJST1JdID0gZGF0YTtcbiAgICAgICAgICAgIHN1cGVyLmVtaXQoRVJST1IsIGRhdGEpO1xuICAgICAgICAgICAgY29uc3QgcmV0ID0gIXRoaXNbU0lHTkFMXSB8fCB0aGlzLmxpc3RlbmVycygnZXJyb3InKS5sZW5ndGhcbiAgICAgICAgICAgICAgICA/IHN1cGVyLmVtaXQoJ2Vycm9yJywgZGF0YSlcbiAgICAgICAgICAgICAgICA6IGZhbHNlO1xuICAgICAgICAgICAgdGhpc1tNQVlCRV9FTUlUX0VORF0oKTtcbiAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXYgPT09ICdyZXN1bWUnKSB7XG4gICAgICAgICAgICBjb25zdCByZXQgPSBzdXBlci5lbWl0KCdyZXN1bWUnKTtcbiAgICAgICAgICAgIHRoaXNbTUFZQkVfRU1JVF9FTkRdKCk7XG4gICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGV2ID09PSAnZmluaXNoJyB8fCBldiA9PT0gJ3ByZWZpbmlzaCcpIHtcbiAgICAgICAgICAgIGNvbnN0IHJldCA9IHN1cGVyLmVtaXQoZXYpO1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoZXYpO1xuICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgfVxuICAgICAgICAvLyBTb21lIG90aGVyIHVua25vd24gZXZlbnRcbiAgICAgICAgY29uc3QgcmV0ID0gc3VwZXIuZW1pdChldiwgLi4uYXJncyk7XG4gICAgICAgIHRoaXNbTUFZQkVfRU1JVF9FTkRdKCk7XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICAgIFtFTUlUREFUQV0oZGF0YSkge1xuICAgICAgICBmb3IgKGNvbnN0IHAgb2YgdGhpc1tQSVBFU10pIHtcbiAgICAgICAgICAgIGlmIChwLmRlc3Qud3JpdGUoZGF0YSkgPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgIHRoaXMucGF1c2UoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXQgPSB0aGlzW0RJU0NBUkRFRF0gPyBmYWxzZSA6IHN1cGVyLmVtaXQoJ2RhdGEnLCBkYXRhKTtcbiAgICAgICAgdGhpc1tNQVlCRV9FTUlUX0VORF0oKTtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gICAgW0VNSVRFTkRdKCkge1xuICAgICAgICBpZiAodGhpc1tFTUlUVEVEX0VORF0pXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHRoaXNbRU1JVFRFRF9FTkRdID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5yZWFkYWJsZSA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gdGhpc1tBU1lOQ11cbiAgICAgICAgICAgID8gKGRlZmVyKCgpID0+IHRoaXNbRU1JVEVORDJdKCkpLCB0cnVlKVxuICAgICAgICAgICAgOiB0aGlzW0VNSVRFTkQyXSgpO1xuICAgIH1cbiAgICBbRU1JVEVORDJdKCkge1xuICAgICAgICBpZiAodGhpc1tERUNPREVSXSkge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHRoaXNbREVDT0RFUl0uZW5kKCk7XG4gICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcCBvZiB0aGlzW1BJUEVTXSkge1xuICAgICAgICAgICAgICAgICAgICBwLmRlc3Qud3JpdGUoZGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghdGhpc1tESVNDQVJERURdKVxuICAgICAgICAgICAgICAgICAgICBzdXBlci5lbWl0KCdkYXRhJywgZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBwIG9mIHRoaXNbUElQRVNdKSB7XG4gICAgICAgICAgICBwLmVuZCgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJldCA9IHN1cGVyLmVtaXQoJ2VuZCcpO1xuICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygnZW5kJyk7XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiBhIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhbiBhcnJheSBvZiBhbGwgZW1pdHRlZCBkYXRhIG9uY2VcbiAgICAgKiB0aGUgc3RyZWFtIGVuZHMuXG4gICAgICovXG4gICAgYXN5bmMgY29sbGVjdCgpIHtcbiAgICAgICAgY29uc3QgYnVmID0gT2JqZWN0LmFzc2lnbihbXSwge1xuICAgICAgICAgICAgZGF0YUxlbmd0aDogMCxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghdGhpc1tPQkpFQ1RNT0RFXSlcbiAgICAgICAgICAgIGJ1Zi5kYXRhTGVuZ3RoID0gMDtcbiAgICAgICAgLy8gc2V0IHRoZSBwcm9taXNlIGZpcnN0LCBpbiBjYXNlIGFuIGVycm9yIGlzIHJhaXNlZFxuICAgICAgICAvLyBieSB0cmlnZ2VyaW5nIHRoZSBmbG93IGhlcmUuXG4gICAgICAgIGNvbnN0IHAgPSB0aGlzLnByb21pc2UoKTtcbiAgICAgICAgdGhpcy5vbignZGF0YScsIGMgPT4ge1xuICAgICAgICAgICAgYnVmLnB1c2goYyk7XG4gICAgICAgICAgICBpZiAoIXRoaXNbT0JKRUNUTU9ERV0pXG4gICAgICAgICAgICAgICAgYnVmLmRhdGFMZW5ndGggKz0gYy5sZW5ndGg7XG4gICAgICAgIH0pO1xuICAgICAgICBhd2FpdCBwO1xuICAgICAgICByZXR1cm4gYnVmO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGNvbmNhdGVuYXRpb24gb2YgYWxsIGVtaXR0ZWQgZGF0YVxuICAgICAqIG9uY2UgdGhlIHN0cmVhbSBlbmRzLlxuICAgICAqXG4gICAgICogTm90IGFsbG93ZWQgb24gb2JqZWN0TW9kZSBzdHJlYW1zLlxuICAgICAqL1xuICAgIGFzeW5jIGNvbmNhdCgpIHtcbiAgICAgICAgaWYgKHRoaXNbT0JKRUNUTU9ERV0pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignY2Fubm90IGNvbmNhdCBpbiBvYmplY3RNb2RlJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYnVmID0gYXdhaXQgdGhpcy5jb2xsZWN0KCk7XG4gICAgICAgIHJldHVybiAodGhpc1tFTkNPRElOR11cbiAgICAgICAgICAgID8gYnVmLmpvaW4oJycpXG4gICAgICAgICAgICA6IEJ1ZmZlci5jb25jYXQoYnVmLCBidWYuZGF0YUxlbmd0aCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYSB2b2lkIFByb21pc2UgdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBzdHJlYW0gZW5kcy5cbiAgICAgKi9cbiAgICBhc3luYyBwcm9taXNlKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vbihERVNUUk9ZRUQsICgpID0+IHJlamVjdChuZXcgRXJyb3IoJ3N0cmVhbSBkZXN0cm95ZWQnKSkpO1xuICAgICAgICAgICAgdGhpcy5vbignZXJyb3InLCBlciA9PiByZWplY3QoZXIpKTtcbiAgICAgICAgICAgIHRoaXMub24oJ2VuZCcsICgpID0+IHJlc29sdmUoKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBc3luY2hyb25vdXMgYGZvciBhd2FpdCBvZmAgaXRlcmF0aW9uLlxuICAgICAqXG4gICAgICogVGhpcyB3aWxsIGNvbnRpbnVlIGVtaXR0aW5nIGFsbCBjaHVua3MgdW50aWwgdGhlIHN0cmVhbSB0ZXJtaW5hdGVzLlxuICAgICAqL1xuICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSB7XG4gICAgICAgIC8vIHNldCB0aGlzIHVwIGZyb250LCBpbiBjYXNlIHRoZSBjb25zdW1lciBkb2Vzbid0IGNhbGwgbmV4dCgpXG4gICAgICAgIC8vIHJpZ2h0IGF3YXkuXG4gICAgICAgIHRoaXNbRElTQ0FSREVEXSA9IGZhbHNlO1xuICAgICAgICBsZXQgc3RvcHBlZCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBzdG9wID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wYXVzZSgpO1xuICAgICAgICAgICAgc3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IG5leHQgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoc3RvcHBlZClcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RvcCgpO1xuICAgICAgICAgICAgY29uc3QgcmVzID0gdGhpcy5yZWFkKCk7XG4gICAgICAgICAgICBpZiAocmVzICE9PSBudWxsKVxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyBkb25lOiBmYWxzZSwgdmFsdWU6IHJlcyB9KTtcbiAgICAgICAgICAgIGlmICh0aGlzW0VPRl0pXG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0b3AoKTtcbiAgICAgICAgICAgIGxldCByZXNvbHZlO1xuICAgICAgICAgICAgbGV0IHJlamVjdDtcbiAgICAgICAgICAgIGNvbnN0IG9uZXJyID0gKGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vZmYoJ2RhdGEnLCBvbmRhdGEpO1xuICAgICAgICAgICAgICAgIHRoaXMub2ZmKCdlbmQnLCBvbmVuZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5vZmYoREVTVFJPWUVELCBvbmRlc3Ryb3kpO1xuICAgICAgICAgICAgICAgIHN0b3AoKTtcbiAgICAgICAgICAgICAgICByZWplY3QoZXIpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IG9uZGF0YSA9ICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub2ZmKCdlcnJvcicsIG9uZXJyKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9mZignZW5kJywgb25lbmQpO1xuICAgICAgICAgICAgICAgIHRoaXMub2ZmKERFU1RST1lFRCwgb25kZXN0cm95KTtcbiAgICAgICAgICAgICAgICB0aGlzLnBhdXNlKCk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh7IHZhbHVlLCBkb25lOiAhIXRoaXNbRU9GXSB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBvbmVuZCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9mZignZXJyb3InLCBvbmVycik7XG4gICAgICAgICAgICAgICAgdGhpcy5vZmYoJ2RhdGEnLCBvbmRhdGEpO1xuICAgICAgICAgICAgICAgIHRoaXMub2ZmKERFU1RST1lFRCwgb25kZXN0cm95KTtcbiAgICAgICAgICAgICAgICBzdG9wKCk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3Qgb25kZXN0cm95ID0gKCkgPT4gb25lcnIobmV3IEVycm9yKCdzdHJlYW0gZGVzdHJveWVkJykpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXMsIHJlaikgPT4ge1xuICAgICAgICAgICAgICAgIHJlamVjdCA9IHJlajtcbiAgICAgICAgICAgICAgICByZXNvbHZlID0gcmVzO1xuICAgICAgICAgICAgICAgIHRoaXMub25jZShERVNUUk9ZRUQsIG9uZGVzdHJveSk7XG4gICAgICAgICAgICAgICAgdGhpcy5vbmNlKCdlcnJvcicsIG9uZXJyKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uY2UoJ2VuZCcsIG9uZW5kKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uY2UoJ2RhdGEnLCBvbmRhdGEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuZXh0LFxuICAgICAgICAgICAgdGhyb3c6IHN0b3AsXG4gICAgICAgICAgICByZXR1cm46IHN0b3AsXG4gICAgICAgICAgICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3luY2hyb25vdXMgYGZvciBvZmAgaXRlcmF0aW9uLlxuICAgICAqXG4gICAgICogVGhlIGl0ZXJhdGlvbiB3aWxsIHRlcm1pbmF0ZSB3aGVuIHRoZSBpbnRlcm5hbCBidWZmZXIgcnVucyBvdXQsIGV2ZW5cbiAgICAgKiBpZiB0aGUgc3RyZWFtIGhhcyBub3QgeWV0IHRlcm1pbmF0ZWQuXG4gICAgICovXG4gICAgW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG4gICAgICAgIC8vIHNldCB0aGlzIHVwIGZyb250LCBpbiBjYXNlIHRoZSBjb25zdW1lciBkb2Vzbid0IGNhbGwgbmV4dCgpXG4gICAgICAgIC8vIHJpZ2h0IGF3YXkuXG4gICAgICAgIHRoaXNbRElTQ0FSREVEXSA9IGZhbHNlO1xuICAgICAgICBsZXQgc3RvcHBlZCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBzdG9wID0gKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wYXVzZSgpO1xuICAgICAgICAgICAgdGhpcy5vZmYoRVJST1IsIHN0b3ApO1xuICAgICAgICAgICAgdGhpcy5vZmYoREVTVFJPWUVELCBzdG9wKTtcbiAgICAgICAgICAgIHRoaXMub2ZmKCdlbmQnLCBzdG9wKTtcbiAgICAgICAgICAgIHN0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9O1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBuZXh0ID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHN0b3BwZWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0b3AoKTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5yZWFkKCk7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBzdG9wKCkgOiB7IGRvbmU6IGZhbHNlLCB2YWx1ZSB9O1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLm9uY2UoJ2VuZCcsIHN0b3ApO1xuICAgICAgICB0aGlzLm9uY2UoRVJST1IsIHN0b3ApO1xuICAgICAgICB0aGlzLm9uY2UoREVTVFJPWUVELCBzdG9wKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5leHQsXG4gICAgICAgICAgICB0aHJvdzogc3RvcCxcbiAgICAgICAgICAgIHJldHVybjogc3RvcCxcbiAgICAgICAgICAgIFtTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVzdHJveSBhIHN0cmVhbSwgcHJldmVudGluZyBpdCBmcm9tIGJlaW5nIHVzZWQgZm9yIGFueSBmdXJ0aGVyIHB1cnBvc2UuXG4gICAgICpcbiAgICAgKiBJZiB0aGUgc3RyZWFtIGhhcyBhIGBjbG9zZSgpYCBtZXRob2QsIHRoZW4gaXQgd2lsbCBiZSBjYWxsZWQgb25cbiAgICAgKiBkZXN0cnVjdGlvbi5cbiAgICAgKlxuICAgICAqIEFmdGVyIGRlc3RydWN0aW9uLCBhbnkgYXR0ZW1wdCB0byB3cml0ZSBkYXRhLCByZWFkIGRhdGEsIG9yIGVtaXQgbW9zdFxuICAgICAqIGV2ZW50cyB3aWxsIGJlIGlnbm9yZWQuXG4gICAgICpcbiAgICAgKiBJZiBhbiBlcnJvciBhcmd1bWVudCBpcyBwcm92aWRlZCwgdGhlbiBpdCB3aWxsIGJlIGVtaXR0ZWQgaW4gYW5cbiAgICAgKiAnZXJyb3InIGV2ZW50LlxuICAgICAqL1xuICAgIGRlc3Ryb3koZXIpIHtcbiAgICAgICAgaWYgKHRoaXNbREVTVFJPWUVEXSkge1xuICAgICAgICAgICAgaWYgKGVyKVxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCBlcik7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0KERFU1RST1lFRCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzW0RFU1RST1lFRF0gPSB0cnVlO1xuICAgICAgICB0aGlzW0RJU0NBUkRFRF0gPSB0cnVlO1xuICAgICAgICAvLyB0aHJvdyBhd2F5IGFsbCBidWZmZXJlZCBkYXRhLCBpdCdzIG5ldmVyIGNvbWluZyBvdXRcbiAgICAgICAgdGhpc1tCVUZGRVJdLmxlbmd0aCA9IDA7XG4gICAgICAgIHRoaXNbQlVGRkVSTEVOR1RIXSA9IDA7XG4gICAgICAgIGNvbnN0IHdjID0gdGhpcztcbiAgICAgICAgaWYgKHR5cGVvZiB3Yy5jbG9zZSA9PT0gJ2Z1bmN0aW9uJyAmJiAhdGhpc1tDTE9TRURdKVxuICAgICAgICAgICAgd2MuY2xvc2UoKTtcbiAgICAgICAgaWYgKGVyKVxuICAgICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIGVyKTtcbiAgICAgICAgLy8gaWYgbm8gZXJyb3IgdG8gZW1pdCwgc3RpbGwgcmVqZWN0IHBlbmRpbmcgcHJvbWlzZXNcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5lbWl0KERFU1RST1lFRCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBbGlhcyBmb3Ige0BsaW5rIGlzU3RyZWFtfVxuICAgICAqXG4gICAgICogRm9ybWVyIGV4cG9ydCBsb2NhdGlvbiwgbWFpbnRhaW5lZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuXG4gICAgICpcbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqL1xuICAgIHN0YXRpYyBnZXQgaXNTdHJlYW0oKSB7XG4gICAgICAgIHJldHVybiBleHBvcnRzLmlzU3RyZWFtO1xuICAgIH1cbn1cbmV4cG9ydHMuTWluaXBhc3MgPSBNaW5pcGFzcztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUGF0aFNjdXJyeSA9IGV4cG9ydHMuUGF0aCA9IGV4cG9ydHMuUGF0aFNjdXJyeURhcndpbiA9IGV4cG9ydHMuUGF0aFNjdXJyeVBvc2l4ID0gZXhwb3J0cy5QYXRoU2N1cnJ5V2luMzIgPSBleHBvcnRzLlBhdGhTY3VycnlCYXNlID0gZXhwb3J0cy5QYXRoUG9zaXggPSBleHBvcnRzLlBhdGhXaW4zMiA9IGV4cG9ydHMuUGF0aEJhc2UgPSBleHBvcnRzLkNoaWxkcmVuQ2FjaGUgPSBleHBvcnRzLlJlc29sdmVDYWNoZSA9IHZvaWQgMDtcbmNvbnN0IGxydV9jYWNoZV8xID0gcmVxdWlyZShcImxydS1jYWNoZVwiKTtcbmNvbnN0IG5vZGVfcGF0aF8xID0gcmVxdWlyZShcIm5vZGU6cGF0aFwiKTtcbmNvbnN0IG5vZGVfdXJsXzEgPSByZXF1aXJlKFwibm9kZTp1cmxcIik7XG5jb25zdCBmc18xID0gcmVxdWlyZShcImZzXCIpO1xuY29uc3QgYWN0dWFsRlMgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIm5vZGU6ZnNcIikpO1xuY29uc3QgcmVhbHBhdGhTeW5jID0gZnNfMS5yZWFscGF0aFN5bmMubmF0aXZlO1xuLy8gVE9ETzogdGVzdCBwZXJmIG9mIGZzL3Byb21pc2VzIHJlYWxwYXRoIHZzIHJlYWxwYXRoQ0IsXG4vLyBzaW5jZSB0aGUgcHJvbWlzZXMgb25lIHVzZXMgcmVhbHBhdGgubmF0aXZlXG5jb25zdCBwcm9taXNlc18xID0gcmVxdWlyZShcIm5vZGU6ZnMvcHJvbWlzZXNcIik7XG5jb25zdCBtaW5pcGFzc18xID0gcmVxdWlyZShcIm1pbmlwYXNzXCIpO1xuY29uc3QgZGVmYXVsdEZTID0ge1xuICAgIGxzdGF0U3luYzogZnNfMS5sc3RhdFN5bmMsXG4gICAgcmVhZGRpcjogZnNfMS5yZWFkZGlyLFxuICAgIHJlYWRkaXJTeW5jOiBmc18xLnJlYWRkaXJTeW5jLFxuICAgIHJlYWRsaW5rU3luYzogZnNfMS5yZWFkbGlua1N5bmMsXG4gICAgcmVhbHBhdGhTeW5jLFxuICAgIHByb21pc2VzOiB7XG4gICAgICAgIGxzdGF0OiBwcm9taXNlc18xLmxzdGF0LFxuICAgICAgICByZWFkZGlyOiBwcm9taXNlc18xLnJlYWRkaXIsXG4gICAgICAgIHJlYWRsaW5rOiBwcm9taXNlc18xLnJlYWRsaW5rLFxuICAgICAgICByZWFscGF0aDogcHJvbWlzZXNfMS5yZWFscGF0aCxcbiAgICB9LFxufTtcbi8vIGlmIHRoZXkganVzdCBnYXZlIHVzIHJlcXVpcmUoJ2ZzJykgdGhlbiB1c2Ugb3VyIGRlZmF1bHRcbmNvbnN0IGZzRnJvbU9wdGlvbiA9IChmc09wdGlvbikgPT4gIWZzT3B0aW9uIHx8IGZzT3B0aW9uID09PSBkZWZhdWx0RlMgfHwgZnNPcHRpb24gPT09IGFjdHVhbEZTID9cbiAgICBkZWZhdWx0RlNcbiAgICA6IHtcbiAgICAgICAgLi4uZGVmYXVsdEZTLFxuICAgICAgICAuLi5mc09wdGlvbixcbiAgICAgICAgcHJvbWlzZXM6IHtcbiAgICAgICAgICAgIC4uLmRlZmF1bHRGUy5wcm9taXNlcyxcbiAgICAgICAgICAgIC4uLihmc09wdGlvbi5wcm9taXNlcyB8fCB7fSksXG4gICAgICAgIH0sXG4gICAgfTtcbi8vIHR1cm4gc29tZXRoaW5nIGxpa2UgLy8/L2M6LyBpbnRvIGM6XFxcbmNvbnN0IHVuY0RyaXZlUmVnZXhwID0gL15cXFxcXFxcXFxcP1xcXFwoW2Etel06KVxcXFw/JC9pO1xuY29uc3QgdW5jVG9Ecml2ZSA9IChyb290UGF0aCkgPT4gcm9vdFBhdGgucmVwbGFjZSgvXFwvL2csICdcXFxcJykucmVwbGFjZSh1bmNEcml2ZVJlZ2V4cCwgJyQxXFxcXCcpO1xuLy8gd2luZG93cyBwYXRocyBhcmUgc2VwYXJhdGVkIGJ5IGVpdGhlciAvIG9yIFxcXG5jb25zdCBlaXRoZXJTZXAgPSAvW1xcXFxcXC9dLztcbmNvbnN0IFVOS05PV04gPSAwOyAvLyBtYXkgbm90IGV2ZW4gZXhpc3QsIGZvciBhbGwgd2Uga25vd1xuY29uc3QgSUZJRk8gPSAwYjAwMDE7XG5jb25zdCBJRkNIUiA9IDBiMDAxMDtcbmNvbnN0IElGRElSID0gMGIwMTAwO1xuY29uc3QgSUZCTEsgPSAwYjAxMTA7XG5jb25zdCBJRlJFRyA9IDBiMTAwMDtcbmNvbnN0IElGTE5LID0gMGIxMDEwO1xuY29uc3QgSUZTT0NLID0gMGIxMTAwO1xuY29uc3QgSUZNVCA9IDBiMTExMTtcbi8vIG1hc2sgdG8gdW5zZXQgbG93IDQgYml0c1xuY29uc3QgSUZNVF9VTktOT1dOID0gfklGTVQ7XG4vLyBzZXQgYWZ0ZXIgc3VjY2Vzc2Z1bGx5IGNhbGxpbmcgcmVhZGRpcigpIGFuZCBnZXR0aW5nIGVudHJpZXMuXG5jb25zdCBSRUFERElSX0NBTExFRCA9IDBiMDAwMF8wMDAxXzAwMDA7XG4vLyBzZXQgYWZ0ZXIgYSBzdWNjZXNzZnVsIGxzdGF0KClcbmNvbnN0IExTVEFUX0NBTExFRCA9IDBiMDAwMF8wMDEwXzAwMDA7XG4vLyBzZXQgaWYgYW4gZW50cnkgKG9yIG9uZSBvZiBpdHMgcGFyZW50cykgaXMgZGVmaW5pdGVseSBub3QgYSBkaXJcbmNvbnN0IEVOT1RESVIgPSAwYjAwMDBfMDEwMF8wMDAwO1xuLy8gc2V0IGlmIGFuIGVudHJ5IChvciBvbmUgb2YgaXRzIHBhcmVudHMpIGRvZXMgbm90IGV4aXN0XG4vLyAoY2FuIGFsc28gYmUgc2V0IG9uIGxzdGF0IGVycm9ycyBsaWtlIEVBQ0NFUyBvciBFTkFNRVRPT0xPTkcpXG5jb25zdCBFTk9FTlQgPSAwYjAwMDBfMTAwMF8wMDAwO1xuLy8gY2Fubm90IGhhdmUgY2hpbGQgZW50cmllcyAtLSBhbHNvIHZlcmlmeSAmSUZNVCBpcyBlaXRoZXIgSUZESVIgb3IgSUZMTktcbi8vIHNldCBpZiB3ZSBmYWlsIHRvIHJlYWRsaW5rXG5jb25zdCBFTk9SRUFETElOSyA9IDBiMDAwMV8wMDAwXzAwMDA7XG4vLyBzZXQgaWYgd2Uga25vdyByZWFscGF0aCgpIHdpbGwgZmFpbFxuY29uc3QgRU5PUkVBTFBBVEggPSAwYjAwMTBfMDAwMF8wMDAwO1xuY29uc3QgRU5PQ0hJTEQgPSBFTk9URElSIHwgRU5PRU5UIHwgRU5PUkVBTFBBVEg7XG5jb25zdCBUWVBFTUFTSyA9IDBiMDAxMV8xMTExXzExMTE7XG5jb25zdCBlbnRUb1R5cGUgPSAocykgPT4gcy5pc0ZpbGUoKSA/IElGUkVHXG4gICAgOiBzLmlzRGlyZWN0b3J5KCkgPyBJRkRJUlxuICAgICAgICA6IHMuaXNTeW1ib2xpY0xpbmsoKSA/IElGTE5LXG4gICAgICAgICAgICA6IHMuaXNDaGFyYWN0ZXJEZXZpY2UoKSA/IElGQ0hSXG4gICAgICAgICAgICAgICAgOiBzLmlzQmxvY2tEZXZpY2UoKSA/IElGQkxLXG4gICAgICAgICAgICAgICAgICAgIDogcy5pc1NvY2tldCgpID8gSUZTT0NLXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHMuaXNGSUZPKCkgPyBJRklGT1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogVU5LTk9XTjtcbi8vIG5vcm1hbGl6ZSB1bmljb2RlIHBhdGggbmFtZXNcbmNvbnN0IG5vcm1hbGl6ZUNhY2hlID0gbmV3IE1hcCgpO1xuY29uc3Qgbm9ybWFsaXplID0gKHMpID0+IHtcbiAgICBjb25zdCBjID0gbm9ybWFsaXplQ2FjaGUuZ2V0KHMpO1xuICAgIGlmIChjKVxuICAgICAgICByZXR1cm4gYztcbiAgICBjb25zdCBuID0gcy5ub3JtYWxpemUoJ05GS0QnKTtcbiAgICBub3JtYWxpemVDYWNoZS5zZXQocywgbik7XG4gICAgcmV0dXJuIG47XG59O1xuY29uc3Qgbm9ybWFsaXplTm9jYXNlQ2FjaGUgPSBuZXcgTWFwKCk7XG5jb25zdCBub3JtYWxpemVOb2Nhc2UgPSAocykgPT4ge1xuICAgIGNvbnN0IGMgPSBub3JtYWxpemVOb2Nhc2VDYWNoZS5nZXQocyk7XG4gICAgaWYgKGMpXG4gICAgICAgIHJldHVybiBjO1xuICAgIGNvbnN0IG4gPSBub3JtYWxpemUocy50b0xvd2VyQ2FzZSgpKTtcbiAgICBub3JtYWxpemVOb2Nhc2VDYWNoZS5zZXQocywgbik7XG4gICAgcmV0dXJuIG47XG59O1xuLyoqXG4gKiBBbiBMUlVDYWNoZSBmb3Igc3RvcmluZyByZXNvbHZlZCBwYXRoIHN0cmluZ3Mgb3IgUGF0aCBvYmplY3RzLlxuICogQGludGVybmFsXG4gKi9cbmNsYXNzIFJlc29sdmVDYWNoZSBleHRlbmRzIGxydV9jYWNoZV8xLkxSVUNhY2hlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoeyBtYXg6IDI1NiB9KTtcbiAgICB9XG59XG5leHBvcnRzLlJlc29sdmVDYWNoZSA9IFJlc29sdmVDYWNoZTtcbi8vIEluIG9yZGVyIHRvIHByZXZlbnQgYmxvd2luZyBvdXQgdGhlIGpzIGhlYXAgYnkgYWxsb2NhdGluZyBodW5kcmVkcyBvZlxuLy8gdGhvdXNhbmRzIG9mIFBhdGggZW50cmllcyB3aGVuIHdhbGtpbmcgZXh0cmVtZWx5IGxhcmdlIHRyZWVzLCB0aGUgXCJjaGlsZHJlblwiXG4vLyBpbiB0aGlzIHRyZWUgYXJlIHJlcHJlc2VudGVkIGJ5IHN0b3JpbmcgYW4gYXJyYXkgb2YgUGF0aCBlbnRyaWVzIGluIGFuXG4vLyBMUlVDYWNoZSwgaW5kZXhlZCBieSB0aGUgcGFyZW50LiAgQXQgYW55IHRpbWUsIFBhdGguY2hpbGRyZW4oKSBtYXkgcmV0dXJuIGFuXG4vLyBlbXB0eSBhcnJheSwgaW5kaWNhdGluZyB0aGF0IGl0IGRvZXNuJ3Qga25vdyBhYm91dCBhbnkgb2YgaXRzIGNoaWxkcmVuLCBhbmRcbi8vIHRodXMgaGFzIHRvIHJlYnVpbGQgdGhhdCBjYWNoZS4gIFRoaXMgaXMgZmluZSwgaXQganVzdCBtZWFucyB0aGF0IHdlIGRvbid0XG4vLyBiZW5lZml0IGFzIG11Y2ggZnJvbSBoYXZpbmcgdGhlIGNhY2hlZCBlbnRyaWVzLCBidXQgaHVnZSBkaXJlY3Rvcnkgd2Fsa3Ncbi8vIGRvbid0IGJsb3cgb3V0IHRoZSBzdGFjaywgYW5kIHNtYWxsZXIgb25lcyBhcmUgc3RpbGwgYXMgZmFzdCBhcyBwb3NzaWJsZS5cbi8vXG4vL0l0IGRvZXMgaW1wb3NlIHNvbWUgY29tcGxleGl0eSB3aGVuIGJ1aWxkaW5nIHVwIHRoZSByZWFkZGlyIGRhdGEsIGJlY2F1c2Ugd2Vcbi8vbmVlZCB0byBwYXNzIGEgcmVmZXJlbmNlIHRvIHRoZSBjaGlsZHJlbiBhcnJheSB0aGF0IHdlIHN0YXJ0ZWQgd2l0aC5cbi8qKlxuICogYW4gTFJVQ2FjaGUgZm9yIHN0b3JpbmcgY2hpbGQgZW50cmllcy5cbiAqIEBpbnRlcm5hbFxuICovXG5jbGFzcyBDaGlsZHJlbkNhY2hlIGV4dGVuZHMgbHJ1X2NhY2hlXzEuTFJVQ2FjaGUge1xuICAgIGNvbnN0cnVjdG9yKG1heFNpemUgPSAxNiAqIDEwMjQpIHtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgbWF4U2l6ZSxcbiAgICAgICAgICAgIC8vIHBhcmVudCArIGNoaWxkcmVuXG4gICAgICAgICAgICBzaXplQ2FsY3VsYXRpb246IGEgPT4gYS5sZW5ndGggKyAxLFxuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnRzLkNoaWxkcmVuQ2FjaGUgPSBDaGlsZHJlbkNhY2hlO1xuY29uc3Qgc2V0QXNDd2QgPSBTeW1ib2woJ1BhdGhTY3Vycnkgc2V0QXNDd2QnKTtcbi8qKlxuICogUGF0aCBvYmplY3RzIGFyZSBzb3J0IG9mIGxpa2UgYSBzdXBlci1wb3dlcmVkXG4gKiB7QGxpbmsgaHR0cHM6Ly9ub2RlanMub3JnL2RvY3MvbGF0ZXN0L2FwaS9mcy5odG1sI2NsYXNzLWZzZGlyZW50IGZzLkRpcmVudH1cbiAqXG4gKiBFYWNoIG9uZSByZXByZXNlbnRzIGEgc2luZ2xlIGZpbGVzeXN0ZW0gZW50cnkgb24gZGlzaywgd2hpY2ggbWF5IG9yIG1heSBub3RcbiAqIGV4aXN0LiBJdCBpbmNsdWRlcyBtZXRob2RzIGZvciByZWFkaW5nIHZhcmlvdXMgdHlwZXMgb2YgaW5mb3JtYXRpb24gdmlhXG4gKiBsc3RhdCwgcmVhZGxpbmssIGFuZCByZWFkZGlyLCBhbmQgY2FjaGVzIGFsbCBpbmZvcm1hdGlvbiB0byB0aGUgZ3JlYXRlc3RcbiAqIGRlZ3JlZSBwb3NzaWJsZS5cbiAqXG4gKiBOb3RlIHRoYXQgZnMgb3BlcmF0aW9ucyB0aGF0IHdvdWxkIG5vcm1hbGx5IHRocm93IHdpbGwgaW5zdGVhZCByZXR1cm4gYW5cbiAqIFwiZW1wdHlcIiB2YWx1ZS4gVGhpcyBpcyBpbiBvcmRlciB0byBwcmV2ZW50IGV4Y2Vzc2l2ZSBvdmVyaGVhZCBmcm9tIGVycm9yXG4gKiBzdGFjayB0cmFjZXMuXG4gKi9cbmNsYXNzIFBhdGhCYXNlIHtcbiAgICAvKipcbiAgICAgKiB0aGUgYmFzZW5hbWUgb2YgdGhpcyBwYXRoXG4gICAgICpcbiAgICAgKiAqKkltcG9ydGFudCoqOiAqYWx3YXlzKiB0ZXN0IHRoZSBwYXRoIG5hbWUgYWdhaW5zdCBhbnkgdGVzdCBzdHJpbmdcbiAgICAgKiB1c2luZ3RoZSB7QGxpbmsgaXNOYW1lZH0gbWV0aG9kLCBhbmQgbm90IGJ5IGRpcmVjdGx5IGNvbXBhcmluZyB0aGlzXG4gICAgICogc3RyaW5nLiBPdGhlcndpc2UsIHVuaWNvZGUgcGF0aCBzdHJpbmdzIHRoYXQgdGhlIHN5c3RlbSBzZWVzIGFzIGlkZW50aWNhbFxuICAgICAqIHdpbGwgbm90IGJlIHByb3Blcmx5IHRyZWF0ZWQgYXMgdGhlIHNhbWUgcGF0aCwgbGVhZGluZyB0byBpbmNvcnJlY3RcbiAgICAgKiBiZWhhdmlvciBhbmQgcG9zc2libGUgc2VjdXJpdHkgaXNzdWVzLlxuICAgICAqL1xuICAgIG5hbWU7XG4gICAgLyoqXG4gICAgICogdGhlIFBhdGggZW50cnkgY29ycmVzcG9uZGluZyB0byB0aGUgcGF0aCByb290LlxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcm9vdDtcbiAgICAvKipcbiAgICAgKiBBbGwgcm9vdHMgZm91bmQgd2l0aGluIHRoZSBjdXJyZW50IFBhdGhTY3VycnkgZmFtaWx5XG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICByb290cztcbiAgICAvKipcbiAgICAgKiBhIHJlZmVyZW5jZSB0byB0aGUgcGFyZW50IHBhdGgsIG9yIHVuZGVmaW5lZCBpbiB0aGUgY2FzZSBvZiByb290IGVudHJpZXNcbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHBhcmVudDtcbiAgICAvKipcbiAgICAgKiBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBwYXRocyBhcmUgY29tcGFyZWQgY2FzZS1pbnNlbnNpdGl2ZWx5XG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgbm9jYXNlO1xuICAgIC8qKlxuICAgICAqIGJvb2xlYW4gaW5kaWNhdGluZyB0aGF0IHRoaXMgcGF0aCBpcyB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeVxuICAgICAqIG9mIHRoZSBQYXRoU2N1cnJ5IGNvbGxlY3Rpb24gdGhhdCBjb250YWlucyBpdC5cbiAgICAgKi9cbiAgICBpc0NXRCA9IGZhbHNlO1xuICAgIC8vIHBvdGVudGlhbCBkZWZhdWx0IGZzIG92ZXJyaWRlXG4gICAgI2ZzO1xuICAgIC8vIFN0YXRzIGZpZWxkc1xuICAgICNkZXY7XG4gICAgZ2V0IGRldigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2RldjtcbiAgICB9XG4gICAgI21vZGU7XG4gICAgZ2V0IG1vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNtb2RlO1xuICAgIH1cbiAgICAjbmxpbms7XG4gICAgZ2V0IG5saW5rKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jbmxpbms7XG4gICAgfVxuICAgICN1aWQ7XG4gICAgZ2V0IHVpZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3VpZDtcbiAgICB9XG4gICAgI2dpZDtcbiAgICBnZXQgZ2lkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jZ2lkO1xuICAgIH1cbiAgICAjcmRldjtcbiAgICBnZXQgcmRldigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3JkZXY7XG4gICAgfVxuICAgICNibGtzaXplO1xuICAgIGdldCBibGtzaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jYmxrc2l6ZTtcbiAgICB9XG4gICAgI2lubztcbiAgICBnZXQgaW5vKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jaW5vO1xuICAgIH1cbiAgICAjc2l6ZTtcbiAgICBnZXQgc2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3NpemU7XG4gICAgfVxuICAgICNibG9ja3M7XG4gICAgZ2V0IGJsb2NrcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2Jsb2NrcztcbiAgICB9XG4gICAgI2F0aW1lTXM7XG4gICAgZ2V0IGF0aW1lTXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNhdGltZU1zO1xuICAgIH1cbiAgICAjbXRpbWVNcztcbiAgICBnZXQgbXRpbWVNcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI210aW1lTXM7XG4gICAgfVxuICAgICNjdGltZU1zO1xuICAgIGdldCBjdGltZU1zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jY3RpbWVNcztcbiAgICB9XG4gICAgI2JpcnRodGltZU1zO1xuICAgIGdldCBiaXJ0aHRpbWVNcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2JpcnRodGltZU1zO1xuICAgIH1cbiAgICAjYXRpbWU7XG4gICAgZ2V0IGF0aW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jYXRpbWU7XG4gICAgfVxuICAgICNtdGltZTtcbiAgICBnZXQgbXRpbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNtdGltZTtcbiAgICB9XG4gICAgI2N0aW1lO1xuICAgIGdldCBjdGltZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2N0aW1lO1xuICAgIH1cbiAgICAjYmlydGh0aW1lO1xuICAgIGdldCBiaXJ0aHRpbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNiaXJ0aHRpbWU7XG4gICAgfVxuICAgICNtYXRjaE5hbWU7XG4gICAgI2RlcHRoO1xuICAgICNmdWxscGF0aDtcbiAgICAjZnVsbHBhdGhQb3NpeDtcbiAgICAjcmVsYXRpdmU7XG4gICAgI3JlbGF0aXZlUG9zaXg7XG4gICAgI3R5cGU7XG4gICAgI2NoaWxkcmVuO1xuICAgICNsaW5rVGFyZ2V0O1xuICAgICNyZWFscGF0aDtcbiAgICAvKipcbiAgICAgKiBUaGlzIHByb3BlcnR5IGlzIGZvciBjb21wYXRpYmlsaXR5IHdpdGggdGhlIERpcmVudCBjbGFzcyBhcyBvZlxuICAgICAqIE5vZGUgdjIwLCB3aGVyZSBEaXJlbnRbJ3BhcmVudFBhdGgnXSByZWZlcnMgdG8gdGhlIHBhdGggb2YgdGhlXG4gICAgICogZGlyZWN0b3J5IHRoYXQgd2FzIHBhc3NlZCB0byByZWFkZGlyLiBGb3Igcm9vdCBlbnRyaWVzLCBpdCdzIHRoZSBwYXRoXG4gICAgICogdG8gdGhlIGVudHJ5IGl0c2VsZi5cbiAgICAgKi9cbiAgICBnZXQgcGFyZW50UGF0aCgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLnBhcmVudCB8fCB0aGlzKS5mdWxscGF0aCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZXByZWNhdGVkIGFsaWFzIGZvciBEaXJlbnRbJ3BhcmVudFBhdGgnXSBTb21ld2hhdCBjb3VudGVyaW50dWl0aXZlbHksXG4gICAgICogdGhpcyBwcm9wZXJ0eSByZWZlcnMgdG8gdGhlICpwYXJlbnQqIHBhdGgsIG5vdCB0aGUgcGF0aCBvYmplY3QgaXRzZWxmLlxuICAgICAqL1xuICAgIGdldCBwYXRoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnRQYXRoO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEbyBub3QgY3JlYXRlIG5ldyBQYXRoIG9iamVjdHMgZGlyZWN0bHkuICBUaGV5IHNob3VsZCBhbHdheXMgYmUgYWNjZXNzZWRcbiAgICAgKiB2aWEgdGhlIFBhdGhTY3VycnkgY2xhc3Mgb3Igb3RoZXIgbWV0aG9kcyBvbiB0aGUgUGF0aCBjbGFzcy5cbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG5hbWUsIHR5cGUgPSBVTktOT1dOLCByb290LCByb290cywgbm9jYXNlLCBjaGlsZHJlbiwgb3B0cykge1xuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICB0aGlzLiNtYXRjaE5hbWUgPSBub2Nhc2UgPyBub3JtYWxpemVOb2Nhc2UobmFtZSkgOiBub3JtYWxpemUobmFtZSk7XG4gICAgICAgIHRoaXMuI3R5cGUgPSB0eXBlICYgVFlQRU1BU0s7XG4gICAgICAgIHRoaXMubm9jYXNlID0gbm9jYXNlO1xuICAgICAgICB0aGlzLnJvb3RzID0gcm9vdHM7XG4gICAgICAgIHRoaXMucm9vdCA9IHJvb3QgfHwgdGhpcztcbiAgICAgICAgdGhpcy4jY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgICAgICAgdGhpcy4jZnVsbHBhdGggPSBvcHRzLmZ1bGxwYXRoO1xuICAgICAgICB0aGlzLiNyZWxhdGl2ZSA9IG9wdHMucmVsYXRpdmU7XG4gICAgICAgIHRoaXMuI3JlbGF0aXZlUG9zaXggPSBvcHRzLnJlbGF0aXZlUG9zaXg7XG4gICAgICAgIHRoaXMucGFyZW50ID0gb3B0cy5wYXJlbnQ7XG4gICAgICAgIGlmICh0aGlzLnBhcmVudCkge1xuICAgICAgICAgICAgdGhpcy4jZnMgPSB0aGlzLnBhcmVudC4jZnM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLiNmcyA9IGZzRnJvbU9wdGlvbihvcHRzLmZzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBkZXB0aCBvZiB0aGUgUGF0aCBvYmplY3QgZnJvbSBpdHMgcm9vdC5cbiAgICAgKlxuICAgICAqIEZvciBleGFtcGxlLCBhIHBhdGggYXQgYC9mb28vYmFyYCB3b3VsZCBoYXZlIGEgZGVwdGggb2YgMi5cbiAgICAgKi9cbiAgICBkZXB0aCgpIHtcbiAgICAgICAgaWYgKHRoaXMuI2RlcHRoICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy4jZGVwdGg7XG4gICAgICAgIGlmICghdGhpcy5wYXJlbnQpXG4gICAgICAgICAgICByZXR1cm4gKHRoaXMuI2RlcHRoID0gMCk7XG4gICAgICAgIHJldHVybiAodGhpcy4jZGVwdGggPSB0aGlzLnBhcmVudC5kZXB0aCgpICsgMSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIGNoaWxkcmVuQ2FjaGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNjaGlsZHJlbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBQYXRoIG9iamVjdCByZWZlcmVuY2VkIGJ5IHRoZSBzdHJpbmcgcGF0aCwgcmVzb2x2ZWQgZnJvbSB0aGlzIFBhdGhcbiAgICAgKi9cbiAgICByZXNvbHZlKHBhdGgpIHtcbiAgICAgICAgaWYgKCFwYXRoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByb290UGF0aCA9IHRoaXMuZ2V0Um9vdFN0cmluZyhwYXRoKTtcbiAgICAgICAgY29uc3QgZGlyID0gcGF0aC5zdWJzdHJpbmcocm9vdFBhdGgubGVuZ3RoKTtcbiAgICAgICAgY29uc3QgZGlyUGFydHMgPSBkaXIuc3BsaXQodGhpcy5zcGxpdFNlcCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHJvb3RQYXRoID9cbiAgICAgICAgICAgIHRoaXMuZ2V0Um9vdChyb290UGF0aCkuI3Jlc29sdmVQYXJ0cyhkaXJQYXJ0cylcbiAgICAgICAgICAgIDogdGhpcy4jcmVzb2x2ZVBhcnRzKGRpclBhcnRzKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgI3Jlc29sdmVQYXJ0cyhkaXJQYXJ0cykge1xuICAgICAgICBsZXQgcCA9IHRoaXM7XG4gICAgICAgIGZvciAoY29uc3QgcGFydCBvZiBkaXJQYXJ0cykge1xuICAgICAgICAgICAgcCA9IHAuY2hpbGQocGFydCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGNhY2hlZCBjaGlsZHJlbiBQYXRoIG9iamVjdHMsIGlmIHN0aWxsIGF2YWlsYWJsZS4gIElmIHRoZXlcbiAgICAgKiBoYXZlIGZhbGxlbiBvdXQgb2YgdGhlIGNhY2hlLCB0aGVuIHJldHVybnMgYW4gZW1wdHkgYXJyYXksIGFuZCByZXNldHMgdGhlXG4gICAgICogUkVBRERJUl9DQUxMRUQgYml0LCBzbyB0aGF0IGZ1dHVyZSBjYWxscyB0byByZWFkZGlyKCkgd2lsbCByZXF1aXJlIGFuIGZzXG4gICAgICogbG9va3VwLlxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgY2hpbGRyZW4oKSB7XG4gICAgICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMuI2NoaWxkcmVuLmdldCh0aGlzKTtcbiAgICAgICAgaWYgKGNhY2hlZCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IE9iamVjdC5hc3NpZ24oW10sIHsgcHJvdmlzaW9uYWw6IDAgfSk7XG4gICAgICAgIHRoaXMuI2NoaWxkcmVuLnNldCh0aGlzLCBjaGlsZHJlbik7XG4gICAgICAgIHRoaXMuI3R5cGUgJj0gflJFQURESVJfQ0FMTEVEO1xuICAgICAgICByZXR1cm4gY2hpbGRyZW47XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlc29sdmVzIGEgcGF0aCBwb3J0aW9uIGFuZCByZXR1cm5zIG9yIGNyZWF0ZXMgdGhlIGNoaWxkIFBhdGguXG4gICAgICpcbiAgICAgKiBSZXR1cm5zIGB0aGlzYCBpZiBwYXRoUGFydCBpcyBgJydgIG9yIGAnLidgLCBvciBgcGFyZW50YCBpZiBwYXRoUGFydCBpc1xuICAgICAqIGAnLi4nYC5cbiAgICAgKlxuICAgICAqIFRoaXMgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuICBJZiBgcGF0aFBhcnRgIGNvbnRhaW5zIGFueSBwYXRoXG4gICAgICogc2VwYXJhdG9ycywgaXQgd2lsbCBsZWFkIHRvIHVuc2FmZSB1bmRlZmluZWQgYmVoYXZpb3IuXG4gICAgICpcbiAgICAgKiBVc2UgYFBhdGgucmVzb2x2ZSgpYCBpbnN0ZWFkLlxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgY2hpbGQocGF0aFBhcnQsIG9wdHMpIHtcbiAgICAgICAgaWYgKHBhdGhQYXJ0ID09PSAnJyB8fCBwYXRoUGFydCA9PT0gJy4nKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICBpZiAocGF0aFBhcnQgPT09ICcuLicpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcmVudCB8fCB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIC8vIGZpbmQgdGhlIGNoaWxkXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbigpO1xuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5ub2Nhc2UgPyBub3JtYWxpemVOb2Nhc2UocGF0aFBhcnQpIDogbm9ybWFsaXplKHBhdGhQYXJ0KTtcbiAgICAgICAgZm9yIChjb25zdCBwIG9mIGNoaWxkcmVuKSB7XG4gICAgICAgICAgICBpZiAocC4jbWF0Y2hOYW1lID09PSBuYW1lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gZGlkbid0IGZpbmQgaXQsIGNyZWF0ZSBwcm92aXNpb25hbCBjaGlsZCwgc2luY2UgaXQgbWlnaHQgbm90XG4gICAgICAgIC8vIGFjdHVhbGx5IGV4aXN0LiAgSWYgd2Uga25vdyB0aGUgcGFyZW50IGlzbid0IGEgZGlyLCB0aGVuXG4gICAgICAgIC8vIGluIGZhY3QgaXQgQ0FOJ1QgZXhpc3QuXG4gICAgICAgIGNvbnN0IHMgPSB0aGlzLnBhcmVudCA/IHRoaXMuc2VwIDogJyc7XG4gICAgICAgIGNvbnN0IGZ1bGxwYXRoID0gdGhpcy4jZnVsbHBhdGggPyB0aGlzLiNmdWxscGF0aCArIHMgKyBwYXRoUGFydCA6IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgcGNoaWxkID0gdGhpcy5uZXdDaGlsZChwYXRoUGFydCwgVU5LTk9XTiwge1xuICAgICAgICAgICAgLi4ub3B0cyxcbiAgICAgICAgICAgIHBhcmVudDogdGhpcyxcbiAgICAgICAgICAgIGZ1bGxwYXRoLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCF0aGlzLmNhblJlYWRkaXIoKSkge1xuICAgICAgICAgICAgcGNoaWxkLiN0eXBlIHw9IEVOT0VOVDtcbiAgICAgICAgfVxuICAgICAgICAvLyBkb24ndCBoYXZlIHRvIHVwZGF0ZSBwcm92aXNpb25hbCwgYmVjYXVzZSBpZiB3ZSBoYXZlIHJlYWwgY2hpbGRyZW4sXG4gICAgICAgIC8vIHRoZW4gcHJvdmlzaW9uYWwgaXMgc2V0IHRvIGNoaWxkcmVuLmxlbmd0aCwgb3RoZXJ3aXNlIGEgbG93ZXIgbnVtYmVyXG4gICAgICAgIGNoaWxkcmVuLnB1c2gocGNoaWxkKTtcbiAgICAgICAgcmV0dXJuIHBjaGlsZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIHJlbGF0aXZlIHBhdGggZnJvbSB0aGUgY3dkLiBJZiBpdCBkb2VzIG5vdCBzaGFyZSBhbiBhbmNlc3RvciB3aXRoXG4gICAgICogdGhlIGN3ZCwgdGhlbiB0aGlzIGVuZHMgdXAgYmVpbmcgZXF1aXZhbGVudCB0byB0aGUgZnVsbHBhdGgoKVxuICAgICAqL1xuICAgIHJlbGF0aXZlKCkge1xuICAgICAgICBpZiAodGhpcy5pc0NXRClcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgaWYgKHRoaXMuI3JlbGF0aXZlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiNyZWxhdGl2ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5uYW1lO1xuICAgICAgICBjb25zdCBwID0gdGhpcy5wYXJlbnQ7XG4gICAgICAgIGlmICghcCkge1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLiNyZWxhdGl2ZSA9IHRoaXMubmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHYgPSBwLnJlbGF0aXZlKCk7XG4gICAgICAgIHJldHVybiBwdiArICghcHYgfHwgIXAucGFyZW50ID8gJycgOiB0aGlzLnNlcCkgKyBuYW1lO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgcmVsYXRpdmUgcGF0aCBmcm9tIHRoZSBjd2QsIHVzaW5nIC8gYXMgdGhlIHBhdGggc2VwYXJhdG9yLlxuICAgICAqIElmIGl0IGRvZXMgbm90IHNoYXJlIGFuIGFuY2VzdG9yIHdpdGhcbiAgICAgKiB0aGUgY3dkLCB0aGVuIHRoaXMgZW5kcyB1cCBiZWluZyBlcXVpdmFsZW50IHRvIHRoZSBmdWxscGF0aFBvc2l4KClcbiAgICAgKiBPbiBwb3NpeCBzeXN0ZW1zLCB0aGlzIGlzIGlkZW50aWNhbCB0byByZWxhdGl2ZSgpLlxuICAgICAqL1xuICAgIHJlbGF0aXZlUG9zaXgoKSB7XG4gICAgICAgIGlmICh0aGlzLnNlcCA9PT0gJy8nKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVsYXRpdmUoKTtcbiAgICAgICAgaWYgKHRoaXMuaXNDV0QpXG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIGlmICh0aGlzLiNyZWxhdGl2ZVBvc2l4ICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy4jcmVsYXRpdmVQb3NpeDtcbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMubmFtZTtcbiAgICAgICAgY29uc3QgcCA9IHRoaXMucGFyZW50O1xuICAgICAgICBpZiAoIXApIHtcbiAgICAgICAgICAgIHJldHVybiAodGhpcy4jcmVsYXRpdmVQb3NpeCA9IHRoaXMuZnVsbHBhdGhQb3NpeCgpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwdiA9IHAucmVsYXRpdmVQb3NpeCgpO1xuICAgICAgICByZXR1cm4gcHYgKyAoIXB2IHx8ICFwLnBhcmVudCA/ICcnIDogJy8nKSArIG5hbWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBmdWxseSByZXNvbHZlZCBwYXRoIHN0cmluZyBmb3IgdGhpcyBQYXRoIGVudHJ5XG4gICAgICovXG4gICAgZnVsbHBhdGgoKSB7XG4gICAgICAgIGlmICh0aGlzLiNmdWxscGF0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy4jZnVsbHBhdGg7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMubmFtZTtcbiAgICAgICAgY29uc3QgcCA9IHRoaXMucGFyZW50O1xuICAgICAgICBpZiAoIXApIHtcbiAgICAgICAgICAgIHJldHVybiAodGhpcy4jZnVsbHBhdGggPSB0aGlzLm5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHB2ID0gcC5mdWxscGF0aCgpO1xuICAgICAgICBjb25zdCBmcCA9IHB2ICsgKCFwLnBhcmVudCA/ICcnIDogdGhpcy5zZXApICsgbmFtZTtcbiAgICAgICAgcmV0dXJuICh0aGlzLiNmdWxscGF0aCA9IGZwKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogT24gcGxhdGZvcm1zIG90aGVyIHRoYW4gd2luZG93cywgdGhpcyBpcyBpZGVudGljYWwgdG8gZnVsbHBhdGguXG4gICAgICpcbiAgICAgKiBPbiB3aW5kb3dzLCB0aGlzIGlzIG92ZXJyaWRkZW4gdG8gcmV0dXJuIHRoZSBmb3J3YXJkLXNsYXNoIGZvcm0gb2YgdGhlXG4gICAgICogZnVsbCBVTkMgcGF0aC5cbiAgICAgKi9cbiAgICBmdWxscGF0aFBvc2l4KCkge1xuICAgICAgICBpZiAodGhpcy4jZnVsbHBhdGhQb3NpeCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuI2Z1bGxwYXRoUG9zaXg7XG4gICAgICAgIGlmICh0aGlzLnNlcCA9PT0gJy8nKVxuICAgICAgICAgICAgcmV0dXJuICh0aGlzLiNmdWxscGF0aFBvc2l4ID0gdGhpcy5mdWxscGF0aCgpKTtcbiAgICAgICAgaWYgKCF0aGlzLnBhcmVudCkge1xuICAgICAgICAgICAgY29uc3QgcCA9IHRoaXMuZnVsbHBhdGgoKS5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG4gICAgICAgICAgICBpZiAoL15bYS16XTpcXC8vaS50ZXN0KHApKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICh0aGlzLiNmdWxscGF0aFBvc2l4ID0gYC8vPy8ke3B9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKHRoaXMuI2Z1bGxwYXRoUG9zaXggPSBwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwID0gdGhpcy5wYXJlbnQ7XG4gICAgICAgIGNvbnN0IHBmcHAgPSBwLmZ1bGxwYXRoUG9zaXgoKTtcbiAgICAgICAgY29uc3QgZnBwID0gcGZwcCArICghcGZwcCB8fCAhcC5wYXJlbnQgPyAnJyA6ICcvJykgKyB0aGlzLm5hbWU7XG4gICAgICAgIHJldHVybiAodGhpcy4jZnVsbHBhdGhQb3NpeCA9IGZwcCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElzIHRoZSBQYXRoIG9mIGFuIHVua25vd24gdHlwZT9cbiAgICAgKlxuICAgICAqIE5vdGUgdGhhdCB3ZSBtaWdodCBrbm93ICpzb21ldGhpbmcqIGFib3V0IGl0IGlmIHRoZXJlIGhhcyBiZWVuIGEgcHJldmlvdXNcbiAgICAgKiBmaWxlc3lzdGVtIG9wZXJhdGlvbiwgZm9yIGV4YW1wbGUgdGhhdCBpdCBkb2VzIG5vdCBleGlzdCwgb3IgaXMgbm90IGFcbiAgICAgKiBsaW5rLCBvciB3aGV0aGVyIGl0IGhhcyBjaGlsZCBlbnRyaWVzLlxuICAgICAqL1xuICAgIGlzVW5rbm93bigpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLiN0eXBlICYgSUZNVCkgPT09IFVOS05PV047XG4gICAgfVxuICAgIGlzVHlwZSh0eXBlKSB7XG4gICAgICAgIHJldHVybiB0aGlzW2BpcyR7dHlwZX1gXSgpO1xuICAgIH1cbiAgICBnZXRUeXBlKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuaXNVbmtub3duKCkgPyAnVW5rbm93bidcbiAgICAgICAgICAgIDogdGhpcy5pc0RpcmVjdG9yeSgpID8gJ0RpcmVjdG9yeSdcbiAgICAgICAgICAgICAgICA6IHRoaXMuaXNGaWxlKCkgPyAnRmlsZSdcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmlzU3ltYm9saWNMaW5rKCkgPyAnU3ltYm9saWNMaW5rJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmlzRklGTygpID8gJ0ZJRk8nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmlzQ2hhcmFjdGVyRGV2aWNlKCkgPyAnQ2hhcmFjdGVyRGV2aWNlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuaXNCbG9ja0RldmljZSgpID8gJ0Jsb2NrRGV2aWNlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAvKiBjOCBpZ25vcmUgc3RhcnQgKi8gdGhpcy5pc1NvY2tldCgpID8gJ1NvY2tldCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdVbmtub3duJyk7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgfVxuICAgIC8qKlxuICAgICAqIElzIHRoZSBQYXRoIGEgcmVndWxhciBmaWxlP1xuICAgICAqL1xuICAgIGlzRmlsZSgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLiN0eXBlICYgSUZNVCkgPT09IElGUkVHO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJcyB0aGUgUGF0aCBhIGRpcmVjdG9yeT9cbiAgICAgKi9cbiAgICBpc0RpcmVjdG9yeSgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLiN0eXBlICYgSUZNVCkgPT09IElGRElSO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJcyB0aGUgcGF0aCBhIGNoYXJhY3RlciBkZXZpY2U/XG4gICAgICovXG4gICAgaXNDaGFyYWN0ZXJEZXZpY2UoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy4jdHlwZSAmIElGTVQpID09PSBJRkNIUjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSXMgdGhlIHBhdGggYSBibG9jayBkZXZpY2U/XG4gICAgICovXG4gICAgaXNCbG9ja0RldmljZSgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLiN0eXBlICYgSUZNVCkgPT09IElGQkxLO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJcyB0aGUgcGF0aCBhIEZJRk8gcGlwZT9cbiAgICAgKi9cbiAgICBpc0ZJRk8oKSB7XG4gICAgICAgIHJldHVybiAodGhpcy4jdHlwZSAmIElGTVQpID09PSBJRklGTztcbiAgICB9XG4gICAgLyoqXG4gICAgICogSXMgdGhlIHBhdGggYSBzb2NrZXQ/XG4gICAgICovXG4gICAgaXNTb2NrZXQoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy4jdHlwZSAmIElGTVQpID09PSBJRlNPQ0s7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElzIHRoZSBwYXRoIGEgc3ltYm9saWMgbGluaz9cbiAgICAgKi9cbiAgICBpc1N5bWJvbGljTGluaygpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLiN0eXBlICYgSUZMTkspID09PSBJRkxOSztcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBlbnRyeSBpZiBpdCBoYXMgYmVlbiBzdWJqZWN0IG9mIGEgc3VjY2Vzc2Z1bCBsc3RhdCwgb3JcbiAgICAgKiB1bmRlZmluZWQgb3RoZXJ3aXNlLlxuICAgICAqXG4gICAgICogRG9lcyBub3QgcmVhZCB0aGUgZmlsZXN5c3RlbSwgc28gYW4gdW5kZWZpbmVkIHJlc3VsdCAqY291bGQqIHNpbXBseVxuICAgICAqIG1lYW4gdGhhdCB3ZSBoYXZlbid0IGNhbGxlZCBsc3RhdCBvbiBpdC5cbiAgICAgKi9cbiAgICBsc3RhdENhY2hlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3R5cGUgJiBMU1RBVF9DQUxMRUQgPyB0aGlzIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIGNhY2hlZCBsaW5rIHRhcmdldCBpZiB0aGUgZW50cnkgaGFzIGJlZW4gdGhlIHN1YmplY3Qgb2YgYVxuICAgICAqIHN1Y2Nlc3NmdWwgcmVhZGxpbmssIG9yIHVuZGVmaW5lZCBvdGhlcndpc2UuXG4gICAgICpcbiAgICAgKiBEb2VzIG5vdCByZWFkIHRoZSBmaWxlc3lzdGVtLCBzbyBhbiB1bmRlZmluZWQgcmVzdWx0ICpjb3VsZCoganVzdCBtZWFuIHdlXG4gICAgICogZG9uJ3QgaGF2ZSBhbnkgY2FjaGVkIGRhdGEuIE9ubHkgdXNlIGl0IGlmIHlvdSBhcmUgdmVyeSBzdXJlIHRoYXQgYVxuICAgICAqIHJlYWRsaW5rKCkgaGFzIGJlZW4gY2FsbGVkIGF0IHNvbWUgcG9pbnQuXG4gICAgICovXG4gICAgcmVhZGxpbmtDYWNoZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNsaW5rVGFyZ2V0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjYWNoZWQgcmVhbHBhdGggdGFyZ2V0IGlmIHRoZSBlbnRyeSBoYXMgYmVlbiB0aGUgc3ViamVjdFxuICAgICAqIG9mIGEgc3VjY2Vzc2Z1bCByZWFscGF0aCwgb3IgdW5kZWZpbmVkIG90aGVyd2lzZS5cbiAgICAgKlxuICAgICAqIERvZXMgbm90IHJlYWQgdGhlIGZpbGVzeXN0ZW0sIHNvIGFuIHVuZGVmaW5lZCByZXN1bHQgKmNvdWxkKiBqdXN0IG1lYW4gd2VcbiAgICAgKiBkb24ndCBoYXZlIGFueSBjYWNoZWQgZGF0YS4gT25seSB1c2UgaXQgaWYgeW91IGFyZSB2ZXJ5IHN1cmUgdGhhdCBhXG4gICAgICogcmVhbHBhdGgoKSBoYXMgYmVlbiBjYWxsZWQgYXQgc29tZSBwb2ludC5cbiAgICAgKi9cbiAgICByZWFscGF0aENhY2hlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3JlYWxwYXRoO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjYWNoZWQgY2hpbGQgUGF0aCBlbnRyaWVzIGFycmF5IGlmIHRoZSBlbnRyeSBoYXMgYmVlbiB0aGVcbiAgICAgKiBzdWJqZWN0IG9mIGEgc3VjY2Vzc2Z1bCByZWFkZGlyKCksIG9yIFtdIG90aGVyd2lzZS5cbiAgICAgKlxuICAgICAqIERvZXMgbm90IHJlYWQgdGhlIGZpbGVzeXN0ZW0sIHNvIGFuIGVtcHR5IGFycmF5ICpjb3VsZCoganVzdCBtZWFuIHdlXG4gICAgICogZG9uJ3QgaGF2ZSBhbnkgY2FjaGVkIGRhdGEuIE9ubHkgdXNlIGl0IGlmIHlvdSBhcmUgdmVyeSBzdXJlIHRoYXQgYVxuICAgICAqIHJlYWRkaXIoKSBoYXMgYmVlbiBjYWxsZWQgcmVjZW50bHkgZW5vdWdoIHRvIHN0aWxsIGJlIHZhbGlkLlxuICAgICAqL1xuICAgIHJlYWRkaXJDYWNoZWQoKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbigpO1xuICAgICAgICByZXR1cm4gY2hpbGRyZW4uc2xpY2UoMCwgY2hpbGRyZW4ucHJvdmlzaW9uYWwpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiBpdCdzIHdvcnRoIHRyeWluZyB0byByZWFkbGluay4gIEllLCB3ZSBkb24ndCAoeWV0KSBoYXZlXG4gICAgICogYW55IGluZGljYXRpb24gdGhhdCByZWFkbGluayB3aWxsIGRlZmluaXRlbHkgZmFpbC5cbiAgICAgKlxuICAgICAqIFJldHVybnMgZmFsc2UgaWYgdGhlIHBhdGggaXMga25vd24gdG8gbm90IGJlIGEgc3ltbGluaywgaWYgYSBwcmV2aW91c1xuICAgICAqIHJlYWRsaW5rIGZhaWxlZCwgb3IgaWYgdGhlIGVudHJ5IGRvZXMgbm90IGV4aXN0LlxuICAgICAqL1xuICAgIGNhblJlYWRsaW5rKCkge1xuICAgICAgICBpZiAodGhpcy4jbGlua1RhcmdldClcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAoIXRoaXMucGFyZW50KVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAvLyBjYXNlcyB3aGVyZSBpdCBjYW5ub3QgcG9zc2libHkgc3VjY2VlZFxuICAgICAgICBjb25zdCBpZm10ID0gdGhpcy4jdHlwZSAmIElGTVQ7XG4gICAgICAgIHJldHVybiAhKChpZm10ICE9PSBVTktOT1dOICYmIGlmbXQgIT09IElGTE5LKSB8fFxuICAgICAgICAgICAgdGhpcy4jdHlwZSAmIEVOT1JFQURMSU5LIHx8XG4gICAgICAgICAgICB0aGlzLiN0eXBlICYgRU5PRU5UKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRydWUgaWYgcmVhZGRpciBoYXMgcHJldmlvdXNseSBiZWVuIHN1Y2Nlc3NmdWxseSBjYWxsZWQgb24gdGhpc1xuICAgICAqIHBhdGgsIGluZGljYXRpbmcgdGhhdCBjYWNoZWRSZWFkZGlyKCkgaXMgbGlrZWx5IHZhbGlkLlxuICAgICAqL1xuICAgIGNhbGxlZFJlYWRkaXIoKSB7XG4gICAgICAgIHJldHVybiAhISh0aGlzLiN0eXBlICYgUkVBRERJUl9DQUxMRUQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHBhdGggaXMga25vd24gdG8gbm90IGV4aXN0LiBUaGF0IGlzLCBhIHByZXZpb3VzIGxzdGF0XG4gICAgICogb3IgcmVhZGRpciBmYWlsZWQgdG8gdmVyaWZ5IGl0cyBleGlzdGVuY2Ugd2hlbiB0aGF0IHdvdWxkIGhhdmUgYmVlblxuICAgICAqIGV4cGVjdGVkLCBvciBhIHBhcmVudCBlbnRyeSB3YXMgbWFya2VkIGVpdGhlciBlbm9lbnQgb3IgZW5vdGRpci5cbiAgICAgKi9cbiAgICBpc0VOT0VOVCgpIHtcbiAgICAgICAgcmV0dXJuICEhKHRoaXMuI3R5cGUgJiBFTk9FTlQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgcGF0aCBpcyBhIG1hdGNoIGZvciB0aGUgZ2l2ZW4gcGF0aCBuYW1lLiAgVGhpcyBoYW5kbGVzXG4gICAgICogY2FzZSBzZW5zaXRpdml0eSBhbmQgdW5pY29kZSBub3JtYWxpemF0aW9uLlxuICAgICAqXG4gICAgICogTm90ZTogZXZlbiBvbiBjYXNlLXNlbnNpdGl2ZSBzeXN0ZW1zLCBpdCBpcyAqKm5vdCoqIHNhZmUgdG8gdGVzdCB0aGVcbiAgICAgKiBlcXVhbGl0eSBvZiB0aGUgYC5uYW1lYCBwcm9wZXJ0eSB0byBkZXRlcm1pbmUgd2hldGhlciBhIGdpdmVuIHBhdGhuYW1lXG4gICAgICogbWF0Y2hlcywgZHVlIHRvIHVuaWNvZGUgbm9ybWFsaXphdGlvbiBtaXNtYXRjaGVzLlxuICAgICAqXG4gICAgICogQWx3YXlzIHVzZSB0aGlzIG1ldGhvZCBpbnN0ZWFkIG9mIHRlc3RpbmcgdGhlIGBwYXRoLm5hbWVgIHByb3BlcnR5XG4gICAgICogZGlyZWN0bHkuXG4gICAgICovXG4gICAgaXNOYW1lZChuKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5ub2Nhc2UgP1xuICAgICAgICAgICAgdGhpcy4jbWF0Y2hOYW1lID09PSBub3JtYWxpemUobilcbiAgICAgICAgICAgIDogdGhpcy4jbWF0Y2hOYW1lID09PSBub3JtYWxpemVOb2Nhc2Uobik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgUGF0aCBvYmplY3QgY29ycmVzcG9uZGluZyB0byB0aGUgdGFyZ2V0IG9mIGEgc3ltYm9saWMgbGluay5cbiAgICAgKlxuICAgICAqIElmIHRoZSBQYXRoIGlzIG5vdCBhIHN5bWJvbGljIGxpbmssIG9yIGlmIHRoZSByZWFkbGluayBjYWxsIGZhaWxzIGZvciBhbnlcbiAgICAgKiByZWFzb24sIGB1bmRlZmluZWRgIGlzIHJldHVybmVkLlxuICAgICAqXG4gICAgICogUmVzdWx0IGlzIGNhY2hlZCwgYW5kIHRodXMgbWF5IGJlIG91dGRhdGVkIGlmIHRoZSBmaWxlc3lzdGVtIGlzIG11dGF0ZWQuXG4gICAgICovXG4gICAgYXN5bmMgcmVhZGxpbmsoKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuI2xpbmtUYXJnZXQ7XG4gICAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmNhblJlYWRsaW5rKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIC8vIGFscmVhZHkgY292ZXJlZCBieSB0aGUgY2FuUmVhZGxpbmsgdGVzdCwgaGVyZSBmb3IgdHMgZ3J1bXBsZXNcbiAgICAgICAgaWYgKCF0aGlzLnBhcmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVhZCA9IGF3YWl0IHRoaXMuI2ZzLnByb21pc2VzLnJlYWRsaW5rKHRoaXMuZnVsbHBhdGgoKSk7XG4gICAgICAgICAgICBjb25zdCBsaW5rVGFyZ2V0ID0gKGF3YWl0IHRoaXMucGFyZW50LnJlYWxwYXRoKCkpPy5yZXNvbHZlKHJlYWQpO1xuICAgICAgICAgICAgaWYgKGxpbmtUYXJnZXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKHRoaXMuI2xpbmtUYXJnZXQgPSBsaW5rVGFyZ2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXIpIHtcbiAgICAgICAgICAgIHRoaXMuI3JlYWRsaW5rRmFpbChlci5jb2RlKTtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogU3luY2hyb25vdXMge0BsaW5rIFBhdGhCYXNlLnJlYWRsaW5rfVxuICAgICAqL1xuICAgIHJlYWRsaW5rU3luYygpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy4jbGlua1RhcmdldDtcbiAgICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuY2FuUmVhZGxpbmsoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgLy8gYWxyZWFkeSBjb3ZlcmVkIGJ5IHRoZSBjYW5SZWFkbGluayB0ZXN0LCBoZXJlIGZvciB0cyBncnVtcGxlc1xuICAgICAgICBpZiAoIXRoaXMucGFyZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZWFkID0gdGhpcy4jZnMucmVhZGxpbmtTeW5jKHRoaXMuZnVsbHBhdGgoKSk7XG4gICAgICAgICAgICBjb25zdCBsaW5rVGFyZ2V0ID0gdGhpcy5wYXJlbnQucmVhbHBhdGhTeW5jKCk/LnJlc29sdmUocmVhZCk7XG4gICAgICAgICAgICBpZiAobGlua1RhcmdldCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAodGhpcy4jbGlua1RhcmdldCA9IGxpbmtUYXJnZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcikge1xuICAgICAgICAgICAgdGhpcy4jcmVhZGxpbmtGYWlsKGVyLmNvZGUpO1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAjcmVhZGRpclN1Y2Nlc3MoY2hpbGRyZW4pIHtcbiAgICAgICAgLy8gc3VjY2VlZGVkLCBtYXJrIHJlYWRkaXIgY2FsbGVkIGJpdFxuICAgICAgICB0aGlzLiN0eXBlIHw9IFJFQURESVJfQ0FMTEVEO1xuICAgICAgICAvLyBtYXJrIGFsbCByZW1haW5pbmcgcHJvdmlzaW9uYWwgY2hpbGRyZW4gYXMgRU5PRU5UXG4gICAgICAgIGZvciAobGV0IHAgPSBjaGlsZHJlbi5wcm92aXNpb25hbDsgcCA8IGNoaWxkcmVuLmxlbmd0aDsgcCsrKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gY2hpbGRyZW5bcF07XG4gICAgICAgICAgICBpZiAoYylcbiAgICAgICAgICAgICAgICBjLiNtYXJrRU5PRU5UKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgI21hcmtFTk9FTlQoKSB7XG4gICAgICAgIC8vIG1hcmsgYXMgVU5LTk9XTiBhbmQgRU5PRU5UXG4gICAgICAgIGlmICh0aGlzLiN0eXBlICYgRU5PRU5UKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLiN0eXBlID0gKHRoaXMuI3R5cGUgfCBFTk9FTlQpICYgSUZNVF9VTktOT1dOO1xuICAgICAgICB0aGlzLiNtYXJrQ2hpbGRyZW5FTk9FTlQoKTtcbiAgICB9XG4gICAgI21hcmtDaGlsZHJlbkVOT0VOVCgpIHtcbiAgICAgICAgLy8gYWxsIGNoaWxkcmVuIGFyZSBwcm92aXNpb25hbCBhbmQgZG8gbm90IGV4aXN0XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbigpO1xuICAgICAgICBjaGlsZHJlbi5wcm92aXNpb25hbCA9IDA7XG4gICAgICAgIGZvciAoY29uc3QgcCBvZiBjaGlsZHJlbikge1xuICAgICAgICAgICAgcC4jbWFya0VOT0VOVCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgICNtYXJrRU5PUkVBTFBBVEgoKSB7XG4gICAgICAgIHRoaXMuI3R5cGUgfD0gRU5PUkVBTFBBVEg7XG4gICAgICAgIHRoaXMuI21hcmtFTk9URElSKCk7XG4gICAgfVxuICAgIC8vIHNhdmUgdGhlIGluZm9ybWF0aW9uIHdoZW4gd2Uga25vdyB0aGUgZW50cnkgaXMgbm90IGEgZGlyXG4gICAgI21hcmtFTk9URElSKCkge1xuICAgICAgICAvLyBlbnRyeSBpcyBub3QgYSBkaXJlY3RvcnksIHNvIGFueSBjaGlsZHJlbiBjYW4ndCBleGlzdC5cbiAgICAgICAgLy8gdGhpcyAqc2hvdWxkKiBiZSBpbXBvc3NpYmxlLCBzaW5jZSBhbnkgY2hpbGRyZW4gY3JlYXRlZFxuICAgICAgICAvLyBhZnRlciBpdCdzIGJlZW4gbWFya2VkIEVOT1RESVIgc2hvdWxkIGJlIG1hcmtlZCBFTk9FTlQsXG4gICAgICAgIC8vIHNvIGl0IHdvbid0IGV2ZW4gZ2V0IHRvIHRoaXMgcG9pbnQuXG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICBpZiAodGhpcy4jdHlwZSAmIEVOT1RESVIpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIGxldCB0ID0gdGhpcy4jdHlwZTtcbiAgICAgICAgLy8gdGhpcyBjb3VsZCBoYXBwZW4gaWYgd2Ugc3RhdCBhIGRpciwgdGhlbiBkZWxldGUgaXQsXG4gICAgICAgIC8vIHRoZW4gdHJ5IHRvIHJlYWQgaXQgb3Igb25lIG9mIGl0cyBjaGlsZHJlbi5cbiAgICAgICAgaWYgKCh0ICYgSUZNVCkgPT09IElGRElSKVxuICAgICAgICAgICAgdCAmPSBJRk1UX1VOS05PV047XG4gICAgICAgIHRoaXMuI3R5cGUgPSB0IHwgRU5PVERJUjtcbiAgICAgICAgdGhpcy4jbWFya0NoaWxkcmVuRU5PRU5UKCk7XG4gICAgfVxuICAgICNyZWFkZGlyRmFpbChjb2RlID0gJycpIHtcbiAgICAgICAgLy8gbWFya0VOT1RESVIgYW5kIG1hcmtFTk9FTlQgYWxzbyBzZXQgcHJvdmlzaW9uYWw9MFxuICAgICAgICBpZiAoY29kZSA9PT0gJ0VOT1RESVInIHx8IGNvZGUgPT09ICdFUEVSTScpIHtcbiAgICAgICAgICAgIHRoaXMuI21hcmtFTk9URElSKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgICAgIHRoaXMuI21hcmtFTk9FTlQoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4oKS5wcm92aXNpb25hbCA9IDA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgI2xzdGF0RmFpbChjb2RlID0gJycpIHtcbiAgICAgICAgLy8gV2luZG93cyBqdXN0IHJhaXNlcyBFTk9FTlQgaW4gdGhpcyBjYXNlLCBkaXNhYmxlIGZvciB3aW4gQ0lcbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIGlmIChjb2RlID09PSAnRU5PVERJUicpIHtcbiAgICAgICAgICAgIC8vIGFscmVhZHkga25vdyBpdCBoYXMgYSBwYXJlbnQgYnkgdGhpcyBwb2ludFxuICAgICAgICAgICAgY29uc3QgcCA9IHRoaXMucGFyZW50O1xuICAgICAgICAgICAgcC4jbWFya0VOT1RESVIoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgICAgIHRoaXMuI21hcmtFTk9FTlQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAjcmVhZGxpbmtGYWlsKGNvZGUgPSAnJykge1xuICAgICAgICBsZXQgdGVyID0gdGhpcy4jdHlwZTtcbiAgICAgICAgdGVyIHw9IEVOT1JFQURMSU5LO1xuICAgICAgICBpZiAoY29kZSA9PT0gJ0VOT0VOVCcpXG4gICAgICAgICAgICB0ZXIgfD0gRU5PRU5UO1xuICAgICAgICAvLyB3aW5kb3dzIGdldHMgYSB3ZWlyZCBlcnJvciB3aGVuIHlvdSB0cnkgdG8gcmVhZGxpbmsgYSBmaWxlXG4gICAgICAgIGlmIChjb2RlID09PSAnRUlOVkFMJyB8fCBjb2RlID09PSAnVU5LTk9XTicpIHtcbiAgICAgICAgICAgIC8vIGV4aXN0cywgYnV0IG5vdCBhIHN5bWxpbmssIHdlIGRvbid0IGtub3cgV0hBVCBpdCBpcywgc28gcmVtb3ZlXG4gICAgICAgICAgICAvLyBhbGwgSUZNVCBiaXRzLlxuICAgICAgICAgICAgdGVyICY9IElGTVRfVU5LTk9XTjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiN0eXBlID0gdGVyO1xuICAgICAgICAvLyB3aW5kb3dzIGp1c3QgZ2V0cyBFTk9FTlQgaW4gdGhpcyBjYXNlLiAgV2UgZG8gY292ZXIgdGhlIGNhc2UsXG4gICAgICAgIC8vIGp1c3QgZGlzYWJsZWQgYmVjYXVzZSBpdCdzIGltcG9zc2libGUgb24gV2luZG93cyBDSVxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgaWYgKGNvZGUgPT09ICdFTk9URElSJyAmJiB0aGlzLnBhcmVudCkge1xuICAgICAgICAgICAgdGhpcy5wYXJlbnQuI21hcmtFTk9URElSKCk7XG4gICAgICAgIH1cbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICB9XG4gICAgI3JlYWRkaXJBZGRDaGlsZChlLCBjKSB7XG4gICAgICAgIHJldHVybiAodGhpcy4jcmVhZGRpck1heWJlUHJvbW90ZUNoaWxkKGUsIGMpIHx8XG4gICAgICAgICAgICB0aGlzLiNyZWFkZGlyQWRkTmV3Q2hpbGQoZSwgYykpO1xuICAgIH1cbiAgICAjcmVhZGRpckFkZE5ld0NoaWxkKGUsIGMpIHtcbiAgICAgICAgLy8gYWxsb2MgbmV3IGVudHJ5IGF0IGhlYWQsIHNvIGl0J3MgbmV2ZXIgcHJvdmlzaW9uYWxcbiAgICAgICAgY29uc3QgdHlwZSA9IGVudFRvVHlwZShlKTtcbiAgICAgICAgY29uc3QgY2hpbGQgPSB0aGlzLm5ld0NoaWxkKGUubmFtZSwgdHlwZSwgeyBwYXJlbnQ6IHRoaXMgfSk7XG4gICAgICAgIGNvbnN0IGlmbXQgPSBjaGlsZC4jdHlwZSAmIElGTVQ7XG4gICAgICAgIGlmIChpZm10ICE9PSBJRkRJUiAmJiBpZm10ICE9PSBJRkxOSyAmJiBpZm10ICE9PSBVTktOT1dOKSB7XG4gICAgICAgICAgICBjaGlsZC4jdHlwZSB8PSBFTk9URElSO1xuICAgICAgICB9XG4gICAgICAgIGMudW5zaGlmdChjaGlsZCk7XG4gICAgICAgIGMucHJvdmlzaW9uYWwrKztcbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgIH1cbiAgICAjcmVhZGRpck1heWJlUHJvbW90ZUNoaWxkKGUsIGMpIHtcbiAgICAgICAgZm9yIChsZXQgcCA9IGMucHJvdmlzaW9uYWw7IHAgPCBjLmxlbmd0aDsgcCsrKSB7XG4gICAgICAgICAgICBjb25zdCBwY2hpbGQgPSBjW3BdO1xuICAgICAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMubm9jYXNlID8gbm9ybWFsaXplTm9jYXNlKGUubmFtZSkgOiBub3JtYWxpemUoZS5uYW1lKTtcbiAgICAgICAgICAgIGlmIChuYW1lICE9PSBwY2hpbGQuI21hdGNoTmFtZSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuI3JlYWRkaXJQcm9tb3RlQ2hpbGQoZSwgcGNoaWxkLCBwLCBjKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAjcmVhZGRpclByb21vdGVDaGlsZChlLCBwLCBpbmRleCwgYykge1xuICAgICAgICBjb25zdCB2ID0gcC5uYW1lO1xuICAgICAgICAvLyByZXRhaW4gYW55IG90aGVyIGZsYWdzLCBidXQgc2V0IGlmbXQgZnJvbSBkaXJlbnRcbiAgICAgICAgcC4jdHlwZSA9IChwLiN0eXBlICYgSUZNVF9VTktOT1dOKSB8IGVudFRvVHlwZShlKTtcbiAgICAgICAgLy8gY2FzZSBzZW5zaXRpdml0eSBmaXhpbmcgd2hlbiB3ZSBsZWFybiB0aGUgdHJ1ZSBuYW1lLlxuICAgICAgICBpZiAodiAhPT0gZS5uYW1lKVxuICAgICAgICAgICAgcC5uYW1lID0gZS5uYW1lO1xuICAgICAgICAvLyBqdXN0IGFkdmFuY2UgcHJvdmlzaW9uYWwgaW5kZXggKHBvdGVudGlhbGx5IG9mZiB0aGUgbGlzdCksXG4gICAgICAgIC8vIG90aGVyd2lzZSB3ZSBoYXZlIHRvIHNwbGljZS9wb3AgaXQgb3V0IGFuZCByZS1pbnNlcnQgYXQgaGVhZFxuICAgICAgICBpZiAoaW5kZXggIT09IGMucHJvdmlzaW9uYWwpIHtcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gYy5sZW5ndGggLSAxKVxuICAgICAgICAgICAgICAgIGMucG9wKCk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgYy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgYy51bnNoaWZ0KHApO1xuICAgICAgICB9XG4gICAgICAgIGMucHJvdmlzaW9uYWwrKztcbiAgICAgICAgcmV0dXJuIHA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENhbGwgbHN0YXQoKSBvbiB0aGlzIFBhdGgsIGFuZCB1cGRhdGUgYWxsIGtub3duIGluZm9ybWF0aW9uIHRoYXQgY2FuIGJlXG4gICAgICogZGV0ZXJtaW5lZC5cbiAgICAgKlxuICAgICAqIE5vdGUgdGhhdCB1bmxpa2UgYGZzLmxzdGF0KClgLCB0aGUgcmV0dXJuZWQgdmFsdWUgZG9lcyBub3QgY29udGFpbiBzb21lXG4gICAgICogaW5mb3JtYXRpb24sIHN1Y2ggYXMgYG1vZGVgLCBgZGV2YCwgYG5saW5rYCwgYW5kIGBpbm9gLiAgSWYgdGhhdFxuICAgICAqIGluZm9ybWF0aW9uIGlzIHJlcXVpcmVkLCB5b3Ugd2lsbCBuZWVkIHRvIGNhbGwgYGZzLmxzdGF0YCB5b3Vyc2VsZi5cbiAgICAgKlxuICAgICAqIElmIHRoZSBQYXRoIHJlZmVycyB0byBhIG5vbmV4aXN0ZW50IGZpbGUsIG9yIGlmIHRoZSBsc3RhdCBjYWxsIGZhaWxzIGZvclxuICAgICAqIGFueSByZWFzb24sIGB1bmRlZmluZWRgIGlzIHJldHVybmVkLiAgT3RoZXJ3aXNlIHRoZSB1cGRhdGVkIFBhdGggb2JqZWN0IGlzXG4gICAgICogcmV0dXJuZWQuXG4gICAgICpcbiAgICAgKiBSZXN1bHRzIGFyZSBjYWNoZWQsIGFuZCB0aHVzIG1heSBiZSBvdXQgb2YgZGF0ZSBpZiB0aGUgZmlsZXN5c3RlbSBpc1xuICAgICAqIG11dGF0ZWQuXG4gICAgICovXG4gICAgYXN5bmMgbHN0YXQoKSB7XG4gICAgICAgIGlmICgodGhpcy4jdHlwZSAmIEVOT0VOVCkgPT09IDApIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jYXBwbHlTdGF0KGF3YWl0IHRoaXMuI2ZzLnByb21pc2VzLmxzdGF0KHRoaXMuZnVsbHBhdGgoKSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jbHN0YXRGYWlsKGVyLmNvZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHN5bmNocm9ub3VzIHtAbGluayBQYXRoQmFzZS5sc3RhdH1cbiAgICAgKi9cbiAgICBsc3RhdFN5bmMoKSB7XG4gICAgICAgIGlmICgodGhpcy4jdHlwZSAmIEVOT0VOVCkgPT09IDApIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jYXBwbHlTdGF0KHRoaXMuI2ZzLmxzdGF0U3luYyh0aGlzLmZ1bGxwYXRoKCkpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcikge1xuICAgICAgICAgICAgICAgIHRoaXMuI2xzdGF0RmFpbChlci5jb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAjYXBwbHlTdGF0KHN0KSB7XG4gICAgICAgIGNvbnN0IHsgYXRpbWUsIGF0aW1lTXMsIGJpcnRodGltZSwgYmlydGh0aW1lTXMsIGJsa3NpemUsIGJsb2NrcywgY3RpbWUsIGN0aW1lTXMsIGRldiwgZ2lkLCBpbm8sIG1vZGUsIG10aW1lLCBtdGltZU1zLCBubGluaywgcmRldiwgc2l6ZSwgdWlkLCB9ID0gc3Q7XG4gICAgICAgIHRoaXMuI2F0aW1lID0gYXRpbWU7XG4gICAgICAgIHRoaXMuI2F0aW1lTXMgPSBhdGltZU1zO1xuICAgICAgICB0aGlzLiNiaXJ0aHRpbWUgPSBiaXJ0aHRpbWU7XG4gICAgICAgIHRoaXMuI2JpcnRodGltZU1zID0gYmlydGh0aW1lTXM7XG4gICAgICAgIHRoaXMuI2Jsa3NpemUgPSBibGtzaXplO1xuICAgICAgICB0aGlzLiNibG9ja3MgPSBibG9ja3M7XG4gICAgICAgIHRoaXMuI2N0aW1lID0gY3RpbWU7XG4gICAgICAgIHRoaXMuI2N0aW1lTXMgPSBjdGltZU1zO1xuICAgICAgICB0aGlzLiNkZXYgPSBkZXY7XG4gICAgICAgIHRoaXMuI2dpZCA9IGdpZDtcbiAgICAgICAgdGhpcy4jaW5vID0gaW5vO1xuICAgICAgICB0aGlzLiNtb2RlID0gbW9kZTtcbiAgICAgICAgdGhpcy4jbXRpbWUgPSBtdGltZTtcbiAgICAgICAgdGhpcy4jbXRpbWVNcyA9IG10aW1lTXM7XG4gICAgICAgIHRoaXMuI25saW5rID0gbmxpbms7XG4gICAgICAgIHRoaXMuI3JkZXYgPSByZGV2O1xuICAgICAgICB0aGlzLiNzaXplID0gc2l6ZTtcbiAgICAgICAgdGhpcy4jdWlkID0gdWlkO1xuICAgICAgICBjb25zdCBpZm10ID0gZW50VG9UeXBlKHN0KTtcbiAgICAgICAgLy8gcmV0YWluIGFueSBvdGhlciBmbGFncywgYnV0IHNldCB0aGUgaWZtdFxuICAgICAgICB0aGlzLiN0eXBlID0gKHRoaXMuI3R5cGUgJiBJRk1UX1VOS05PV04pIHwgaWZtdCB8IExTVEFUX0NBTExFRDtcbiAgICAgICAgaWYgKGlmbXQgIT09IFVOS05PV04gJiYgaWZtdCAhPT0gSUZESVIgJiYgaWZtdCAhPT0gSUZMTkspIHtcbiAgICAgICAgICAgIHRoaXMuI3R5cGUgfD0gRU5PVERJUjtcbiAgICAgICAgfVxuICAgIH1cbiAgICAjb25SZWFkZGlyQ0IgPSBbXTtcbiAgICAjcmVhZGRpckNCSW5GbGlnaHQgPSBmYWxzZTtcbiAgICAjY2FsbE9uUmVhZGRpckNCKGNoaWxkcmVuKSB7XG4gICAgICAgIHRoaXMuI3JlYWRkaXJDQkluRmxpZ2h0ID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGNicyA9IHRoaXMuI29uUmVhZGRpckNCLnNsaWNlKCk7XG4gICAgICAgIHRoaXMuI29uUmVhZGRpckNCLmxlbmd0aCA9IDA7XG4gICAgICAgIGNicy5mb3JFYWNoKGNiID0+IGNiKG51bGwsIGNoaWxkcmVuKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN0YW5kYXJkIG5vZGUtc3R5bGUgY2FsbGJhY2sgaW50ZXJmYWNlIHRvIGdldCBsaXN0IG9mIGRpcmVjdG9yeSBlbnRyaWVzLlxuICAgICAqXG4gICAgICogSWYgdGhlIFBhdGggY2Fubm90IG9yIGRvZXMgbm90IGNvbnRhaW4gYW55IGNoaWxkcmVuLCB0aGVuIGFuIGVtcHR5IGFycmF5XG4gICAgICogaXMgcmV0dXJuZWQuXG4gICAgICpcbiAgICAgKiBSZXN1bHRzIGFyZSBjYWNoZWQsIGFuZCB0aHVzIG1heSBiZSBvdXQgb2YgZGF0ZSBpZiB0aGUgZmlsZXN5c3RlbSBpc1xuICAgICAqIG11dGF0ZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2IgVGhlIGNhbGxiYWNrIGNhbGxlZCB3aXRoIChlciwgZW50cmllcykuICBOb3RlIHRoYXQgdGhlIGBlcmBcbiAgICAgKiBwYXJhbSBpcyBzb21ld2hhdCBleHRyYW5lb3VzLCBhcyBhbGwgcmVhZGRpcigpIGVycm9ycyBhcmUgaGFuZGxlZCBhbmRcbiAgICAgKiBzaW1wbHkgcmVzdWx0IGluIGFuIGVtcHR5IHNldCBvZiBlbnRyaWVzIGJlaW5nIHJldHVybmVkLlxuICAgICAqIEBwYXJhbSBhbGxvd1phbGdvIEJvb2xlYW4gaW5kaWNhdGluZyB0aGF0IGltbWVkaWF0ZWx5IGtub3duIHJlc3VsdHMgc2hvdWxkXG4gICAgICogKm5vdCogYmUgZGVmZXJyZWQgd2l0aCBgcXVldWVNaWNyb3Rhc2tgLiBEZWZhdWx0cyB0byBgZmFsc2VgLiBSZWxlYXNlXG4gICAgICogemFsZ28gYXQgeW91ciBwZXJpbCwgdGhlIGRhcmsgcG9ueSBsb3JkIGlzIGRldmlvdXMgYW5kIHVuZm9yZ2l2aW5nLlxuICAgICAqL1xuICAgIHJlYWRkaXJDQihjYiwgYWxsb3daYWxnbyA9IGZhbHNlKSB7XG4gICAgICAgIGlmICghdGhpcy5jYW5SZWFkZGlyKCkpIHtcbiAgICAgICAgICAgIGlmIChhbGxvd1phbGdvKVxuICAgICAgICAgICAgICAgIGNiKG51bGwsIFtdKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYihudWxsLCBbXSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbigpO1xuICAgICAgICBpZiAodGhpcy5jYWxsZWRSZWFkZGlyKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBjaGlsZHJlbi5zbGljZSgwLCBjaGlsZHJlbi5wcm92aXNpb25hbCk7XG4gICAgICAgICAgICBpZiAoYWxsb3daYWxnbylcbiAgICAgICAgICAgICAgICBjYihudWxsLCBjKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYihudWxsLCBjKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCB6YWxnbyBhdCB0aGlzIHBvaW50LlxuICAgICAgICB0aGlzLiNvblJlYWRkaXJDQi5wdXNoKGNiKTtcbiAgICAgICAgaWYgKHRoaXMuI3JlYWRkaXJDQkluRmxpZ2h0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4jcmVhZGRpckNCSW5GbGlnaHQgPSB0cnVlO1xuICAgICAgICAvLyBlbHNlIHJlYWQgdGhlIGRpcmVjdG9yeSwgZmlsbCB1cCBjaGlsZHJlblxuICAgICAgICAvLyBkZS1wcm92aXNpb25hbGl6ZSBhbnkgcHJvdmlzaW9uYWwgY2hpbGRyZW4uXG4gICAgICAgIGNvbnN0IGZ1bGxwYXRoID0gdGhpcy5mdWxscGF0aCgpO1xuICAgICAgICB0aGlzLiNmcy5yZWFkZGlyKGZ1bGxwYXRoLCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSwgKGVyLCBlbnRyaWVzKSA9PiB7XG4gICAgICAgICAgICBpZiAoZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiNyZWFkZGlyRmFpbChlci5jb2RlKTtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5wcm92aXNpb25hbCA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBpZiB3ZSBkaWRuJ3QgZ2V0IGFuIGVycm9yLCB3ZSBhbHdheXMgZ2V0IGVudHJpZXMuXG4gICAgICAgICAgICAgICAgLy9AdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBlIG9mIGVudHJpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jcmVhZGRpckFkZENoaWxkKGUsIGNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy4jcmVhZGRpclN1Y2Nlc3MoY2hpbGRyZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy4jY2FsbE9uUmVhZGRpckNCKGNoaWxkcmVuLnNsaWNlKDAsIGNoaWxkcmVuLnByb3Zpc2lvbmFsKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAjYXN5bmNSZWFkZGlySW5GbGlnaHQ7XG4gICAgLyoqXG4gICAgICogUmV0dXJuIGFuIGFycmF5IG9mIGtub3duIGNoaWxkIGVudHJpZXMuXG4gICAgICpcbiAgICAgKiBJZiB0aGUgUGF0aCBjYW5ub3Qgb3IgZG9lcyBub3QgY29udGFpbiBhbnkgY2hpbGRyZW4sIHRoZW4gYW4gZW1wdHkgYXJyYXlcbiAgICAgKiBpcyByZXR1cm5lZC5cbiAgICAgKlxuICAgICAqIFJlc3VsdHMgYXJlIGNhY2hlZCwgYW5kIHRodXMgbWF5IGJlIG91dCBvZiBkYXRlIGlmIHRoZSBmaWxlc3lzdGVtIGlzXG4gICAgICogbXV0YXRlZC5cbiAgICAgKi9cbiAgICBhc3luYyByZWFkZGlyKCkge1xuICAgICAgICBpZiAoIXRoaXMuY2FuUmVhZGRpcigpKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuKCk7XG4gICAgICAgIGlmICh0aGlzLmNhbGxlZFJlYWRkaXIoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNoaWxkcmVuLnNsaWNlKDAsIGNoaWxkcmVuLnByb3Zpc2lvbmFsKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBlbHNlIHJlYWQgdGhlIGRpcmVjdG9yeSwgZmlsbCB1cCBjaGlsZHJlblxuICAgICAgICAvLyBkZS1wcm92aXNpb25hbGl6ZSBhbnkgcHJvdmlzaW9uYWwgY2hpbGRyZW4uXG4gICAgICAgIGNvbnN0IGZ1bGxwYXRoID0gdGhpcy5mdWxscGF0aCgpO1xuICAgICAgICBpZiAodGhpcy4jYXN5bmNSZWFkZGlySW5GbGlnaHQpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuI2FzeW5jUmVhZGRpckluRmxpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICBsZXQgcmVzb2x2ZSA9ICgpID0+IHsgfTtcbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICB0aGlzLiNhc3luY1JlYWRkaXJJbkZsaWdodCA9IG5ldyBQcm9taXNlKHJlcyA9PiAocmVzb2x2ZSA9IHJlcykpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGUgb2YgYXdhaXQgdGhpcy4jZnMucHJvbWlzZXMucmVhZGRpcihmdWxscGF0aCwge1xuICAgICAgICAgICAgICAgICAgICB3aXRoRmlsZVR5cGVzOiB0cnVlLFxuICAgICAgICAgICAgICAgIH0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI3JlYWRkaXJBZGRDaGlsZChlLCBjaGlsZHJlbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuI3JlYWRkaXJTdWNjZXNzKGNoaWxkcmVuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcikge1xuICAgICAgICAgICAgICAgIHRoaXMuI3JlYWRkaXJGYWlsKGVyLmNvZGUpO1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuLnByb3Zpc2lvbmFsID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuI2FzeW5jUmVhZGRpckluRmxpZ2h0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjaGlsZHJlbi5zbGljZSgwLCBjaGlsZHJlbi5wcm92aXNpb25hbCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHN5bmNocm9ub3VzIHtAbGluayBQYXRoQmFzZS5yZWFkZGlyfVxuICAgICAqL1xuICAgIHJlYWRkaXJTeW5jKCkge1xuICAgICAgICBpZiAoIXRoaXMuY2FuUmVhZGRpcigpKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuKCk7XG4gICAgICAgIGlmICh0aGlzLmNhbGxlZFJlYWRkaXIoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNoaWxkcmVuLnNsaWNlKDAsIGNoaWxkcmVuLnByb3Zpc2lvbmFsKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBlbHNlIHJlYWQgdGhlIGRpcmVjdG9yeSwgZmlsbCB1cCBjaGlsZHJlblxuICAgICAgICAvLyBkZS1wcm92aXNpb25hbGl6ZSBhbnkgcHJvdmlzaW9uYWwgY2hpbGRyZW4uXG4gICAgICAgIGNvbnN0IGZ1bGxwYXRoID0gdGhpcy5mdWxscGF0aCgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBlIG9mIHRoaXMuI2ZzLnJlYWRkaXJTeW5jKGZ1bGxwYXRoLCB7XG4gICAgICAgICAgICAgICAgd2l0aEZpbGVUeXBlczogdHJ1ZSxcbiAgICAgICAgICAgIH0pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jcmVhZGRpckFkZENoaWxkKGUsIGNoaWxkcmVuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuI3JlYWRkaXJTdWNjZXNzKGNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXIpIHtcbiAgICAgICAgICAgIHRoaXMuI3JlYWRkaXJGYWlsKGVyLmNvZGUpO1xuICAgICAgICAgICAgY2hpbGRyZW4ucHJvdmlzaW9uYWwgPSAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjaGlsZHJlbi5zbGljZSgwLCBjaGlsZHJlbi5wcm92aXNpb25hbCk7XG4gICAgfVxuICAgIGNhblJlYWRkaXIoKSB7XG4gICAgICAgIGlmICh0aGlzLiN0eXBlICYgRU5PQ0hJTEQpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNvbnN0IGlmbXQgPSBJRk1UICYgdGhpcy4jdHlwZTtcbiAgICAgICAgLy8gd2UgYWx3YXlzIHNldCBFTk9URElSIHdoZW4gc2V0dGluZyBJRk1ULCBzbyBzaG91bGQgYmUgaW1wb3NzaWJsZVxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgaWYgKCEoaWZtdCA9PT0gVU5LTk9XTiB8fCBpZm10ID09PSBJRkRJUiB8fCBpZm10ID09PSBJRkxOSykpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgc2hvdWxkV2FsayhkaXJzLCB3YWxrRmlsdGVyKSB7XG4gICAgICAgIHJldHVybiAoKHRoaXMuI3R5cGUgJiBJRkRJUikgPT09IElGRElSICYmXG4gICAgICAgICAgICAhKHRoaXMuI3R5cGUgJiBFTk9DSElMRCkgJiZcbiAgICAgICAgICAgICFkaXJzLmhhcyh0aGlzKSAmJlxuICAgICAgICAgICAgKCF3YWxrRmlsdGVyIHx8IHdhbGtGaWx0ZXIodGhpcykpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBQYXRoIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHBhdGggYXMgcmVzb2x2ZWRcbiAgICAgKiBieSByZWFscGF0aCgzKS5cbiAgICAgKlxuICAgICAqIElmIHRoZSByZWFscGF0aCBjYWxsIGZhaWxzIGZvciBhbnkgcmVhc29uLCBgdW5kZWZpbmVkYCBpcyByZXR1cm5lZC5cbiAgICAgKlxuICAgICAqIFJlc3VsdCBpcyBjYWNoZWQsIGFuZCB0aHVzIG1heSBiZSBvdXRkYXRlZCBpZiB0aGUgZmlsZXN5c3RlbSBpcyBtdXRhdGVkLlxuICAgICAqIE9uIHN1Y2Nlc3MsIHJldHVybnMgYSBQYXRoIG9iamVjdC5cbiAgICAgKi9cbiAgICBhc3luYyByZWFscGF0aCgpIHtcbiAgICAgICAgaWYgKHRoaXMuI3JlYWxwYXRoKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuI3JlYWxwYXRoO1xuICAgICAgICBpZiAoKEVOT1JFQUxQQVRIIHwgRU5PUkVBRExJTksgfCBFTk9FTlQpICYgdGhpcy4jdHlwZSlcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBycCA9IGF3YWl0IHRoaXMuI2ZzLnByb21pc2VzLnJlYWxwYXRoKHRoaXMuZnVsbHBhdGgoKSk7XG4gICAgICAgICAgICByZXR1cm4gKHRoaXMuI3JlYWxwYXRoID0gdGhpcy5yZXNvbHZlKHJwKSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKF8pIHtcbiAgICAgICAgICAgIHRoaXMuI21hcmtFTk9SRUFMUEFUSCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN5bmNocm9ub3VzIHtAbGluayByZWFscGF0aH1cbiAgICAgKi9cbiAgICByZWFscGF0aFN5bmMoKSB7XG4gICAgICAgIGlmICh0aGlzLiNyZWFscGF0aClcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiNyZWFscGF0aDtcbiAgICAgICAgaWYgKChFTk9SRUFMUEFUSCB8IEVOT1JFQURMSU5LIHwgRU5PRU5UKSAmIHRoaXMuI3R5cGUpXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcnAgPSB0aGlzLiNmcy5yZWFscGF0aFN5bmModGhpcy5mdWxscGF0aCgpKTtcbiAgICAgICAgICAgIHJldHVybiAodGhpcy4jcmVhbHBhdGggPSB0aGlzLnJlc29sdmUocnApKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoXykge1xuICAgICAgICAgICAgdGhpcy4jbWFya0VOT1JFQUxQQVRIKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgbWV0aG9kIHRvIG1hcmsgdGhpcyBQYXRoIG9iamVjdCBhcyB0aGUgc2N1cnJ5IGN3ZCxcbiAgICAgKiBjYWxsZWQgYnkge0BsaW5rIFBhdGhTY3VycnkjY2hkaXJ9XG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBbc2V0QXNDd2RdKG9sZEN3ZCkge1xuICAgICAgICBpZiAob2xkQ3dkID09PSB0aGlzKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBvbGRDd2QuaXNDV0QgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc0NXRCA9IHRydWU7XG4gICAgICAgIGNvbnN0IGNoYW5nZWQgPSBuZXcgU2V0KFtdKTtcbiAgICAgICAgbGV0IHJwID0gW107XG4gICAgICAgIGxldCBwID0gdGhpcztcbiAgICAgICAgd2hpbGUgKHAgJiYgcC5wYXJlbnQpIHtcbiAgICAgICAgICAgIGNoYW5nZWQuYWRkKHApO1xuICAgICAgICAgICAgcC4jcmVsYXRpdmUgPSBycC5qb2luKHRoaXMuc2VwKTtcbiAgICAgICAgICAgIHAuI3JlbGF0aXZlUG9zaXggPSBycC5qb2luKCcvJyk7XG4gICAgICAgICAgICBwID0gcC5wYXJlbnQ7XG4gICAgICAgICAgICBycC5wdXNoKCcuLicpO1xuICAgICAgICB9XG4gICAgICAgIC8vIG5vdyB1bi1tZW1vaXplIHBhcmVudHMgb2Ygb2xkIGN3ZFxuICAgICAgICBwID0gb2xkQ3dkO1xuICAgICAgICB3aGlsZSAocCAmJiBwLnBhcmVudCAmJiAhY2hhbmdlZC5oYXMocCkpIHtcbiAgICAgICAgICAgIHAuI3JlbGF0aXZlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgcC4jcmVsYXRpdmVQb3NpeCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHAgPSBwLnBhcmVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuUGF0aEJhc2UgPSBQYXRoQmFzZTtcbi8qKlxuICogUGF0aCBjbGFzcyB1c2VkIG9uIHdpbjMyIHN5c3RlbXNcbiAqXG4gKiBVc2VzIGAnXFxcXCdgIGFzIHRoZSBwYXRoIHNlcGFyYXRvciBmb3IgcmV0dXJuZWQgcGF0aHMsIGVpdGhlciBgJ1xcXFwnYCBvciBgJy8nYFxuICogYXMgdGhlIHBhdGggc2VwYXJhdG9yIGZvciBwYXJzaW5nIHBhdGhzLlxuICovXG5jbGFzcyBQYXRoV2luMzIgZXh0ZW5kcyBQYXRoQmFzZSB7XG4gICAgLyoqXG4gICAgICogU2VwYXJhdG9yIGZvciBnZW5lcmF0aW5nIHBhdGggc3RyaW5ncy5cbiAgICAgKi9cbiAgICBzZXAgPSAnXFxcXCc7XG4gICAgLyoqXG4gICAgICogU2VwYXJhdG9yIGZvciBwYXJzaW5nIHBhdGggc3RyaW5ncy5cbiAgICAgKi9cbiAgICBzcGxpdFNlcCA9IGVpdGhlclNlcDtcbiAgICAvKipcbiAgICAgKiBEbyBub3QgY3JlYXRlIG5ldyBQYXRoIG9iamVjdHMgZGlyZWN0bHkuICBUaGV5IHNob3VsZCBhbHdheXMgYmUgYWNjZXNzZWRcbiAgICAgKiB2aWEgdGhlIFBhdGhTY3VycnkgY2xhc3Mgb3Igb3RoZXIgbWV0aG9kcyBvbiB0aGUgUGF0aCBjbGFzcy5cbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG5hbWUsIHR5cGUgPSBVTktOT1dOLCByb290LCByb290cywgbm9jYXNlLCBjaGlsZHJlbiwgb3B0cykge1xuICAgICAgICBzdXBlcihuYW1lLCB0eXBlLCByb290LCByb290cywgbm9jYXNlLCBjaGlsZHJlbiwgb3B0cyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIG5ld0NoaWxkKG5hbWUsIHR5cGUgPSBVTktOT1dOLCBvcHRzID0ge30pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQYXRoV2luMzIobmFtZSwgdHlwZSwgdGhpcy5yb290LCB0aGlzLnJvb3RzLCB0aGlzLm5vY2FzZSwgdGhpcy5jaGlsZHJlbkNhY2hlKCksIG9wdHMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBnZXRSb290U3RyaW5nKHBhdGgpIHtcbiAgICAgICAgcmV0dXJuIG5vZGVfcGF0aF8xLndpbjMyLnBhcnNlKHBhdGgpLnJvb3Q7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIGdldFJvb3Qocm9vdFBhdGgpIHtcbiAgICAgICAgcm9vdFBhdGggPSB1bmNUb0RyaXZlKHJvb3RQYXRoLnRvVXBwZXJDYXNlKCkpO1xuICAgICAgICBpZiAocm9vdFBhdGggPT09IHRoaXMucm9vdC5uYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yb290O1xuICAgICAgICB9XG4gICAgICAgIC8vIG9rLCBub3QgdGhhdCBvbmUsIGNoZWNrIGlmIGl0IG1hdGNoZXMgYW5vdGhlciB3ZSBrbm93IGFib3V0XG4gICAgICAgIGZvciAoY29uc3QgW2NvbXBhcmUsIHJvb3RdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMucm9vdHMpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zYW1lUm9vdChyb290UGF0aCwgY29tcGFyZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKHRoaXMucm9vdHNbcm9vdFBhdGhdID0gcm9vdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gb3RoZXJ3aXNlLCBoYXZlIHRvIGNyZWF0ZSBhIG5ldyBvbmUuXG4gICAgICAgIHJldHVybiAodGhpcy5yb290c1tyb290UGF0aF0gPSBuZXcgUGF0aFNjdXJyeVdpbjMyKHJvb3RQYXRoLCB0aGlzKS5yb290KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgc2FtZVJvb3Qocm9vdFBhdGgsIGNvbXBhcmUgPSB0aGlzLnJvb3QubmFtZSkge1xuICAgICAgICAvLyB3aW5kb3dzIGNhbiAocmFyZWx5KSBoYXZlIGNhc2Utc2Vuc2l0aXZlIGZpbGVzeXN0ZW0sIGJ1dFxuICAgICAgICAvLyBVTkMgYW5kIGRyaXZlIGxldHRlcnMgYXJlIGFsd2F5cyBjYXNlLWluc2Vuc2l0aXZlLCBhbmQgY2Fub25pY2FsbHlcbiAgICAgICAgLy8gcmVwcmVzZW50ZWQgdXBwZXJjYXNlLlxuICAgICAgICByb290UGF0aCA9IHJvb3RQYXRoXG4gICAgICAgICAgICAudG9VcHBlckNhc2UoKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcLy9nLCAnXFxcXCcpXG4gICAgICAgICAgICAucmVwbGFjZSh1bmNEcml2ZVJlZ2V4cCwgJyQxXFxcXCcpO1xuICAgICAgICByZXR1cm4gcm9vdFBhdGggPT09IGNvbXBhcmU7XG4gICAgfVxufVxuZXhwb3J0cy5QYXRoV2luMzIgPSBQYXRoV2luMzI7XG4vKipcbiAqIFBhdGggY2xhc3MgdXNlZCBvbiBhbGwgcG9zaXggc3lzdGVtcy5cbiAqXG4gKiBVc2VzIGAnLydgIGFzIHRoZSBwYXRoIHNlcGFyYXRvci5cbiAqL1xuY2xhc3MgUGF0aFBvc2l4IGV4dGVuZHMgUGF0aEJhc2Uge1xuICAgIC8qKlxuICAgICAqIHNlcGFyYXRvciBmb3IgcGFyc2luZyBwYXRoIHN0cmluZ3NcbiAgICAgKi9cbiAgICBzcGxpdFNlcCA9ICcvJztcbiAgICAvKipcbiAgICAgKiBzZXBhcmF0b3IgZm9yIGdlbmVyYXRpbmcgcGF0aCBzdHJpbmdzXG4gICAgICovXG4gICAgc2VwID0gJy8nO1xuICAgIC8qKlxuICAgICAqIERvIG5vdCBjcmVhdGUgbmV3IFBhdGggb2JqZWN0cyBkaXJlY3RseS4gIFRoZXkgc2hvdWxkIGFsd2F5cyBiZSBhY2Nlc3NlZFxuICAgICAqIHZpYSB0aGUgUGF0aFNjdXJyeSBjbGFzcyBvciBvdGhlciBtZXRob2RzIG9uIHRoZSBQYXRoIGNsYXNzLlxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgY29uc3RydWN0b3IobmFtZSwgdHlwZSA9IFVOS05PV04sIHJvb3QsIHJvb3RzLCBub2Nhc2UsIGNoaWxkcmVuLCBvcHRzKSB7XG4gICAgICAgIHN1cGVyKG5hbWUsIHR5cGUsIHJvb3QsIHJvb3RzLCBub2Nhc2UsIGNoaWxkcmVuLCBvcHRzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgZ2V0Um9vdFN0cmluZyhwYXRoKSB7XG4gICAgICAgIHJldHVybiBwYXRoLnN0YXJ0c1dpdGgoJy8nKSA/ICcvJyA6ICcnO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBnZXRSb290KF9yb290UGF0aCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yb290O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBuZXdDaGlsZChuYW1lLCB0eXBlID0gVU5LTk9XTiwgb3B0cyA9IHt9KSB7XG4gICAgICAgIHJldHVybiBuZXcgUGF0aFBvc2l4KG5hbWUsIHR5cGUsIHRoaXMucm9vdCwgdGhpcy5yb290cywgdGhpcy5ub2Nhc2UsIHRoaXMuY2hpbGRyZW5DYWNoZSgpLCBvcHRzKTtcbiAgICB9XG59XG5leHBvcnRzLlBhdGhQb3NpeCA9IFBhdGhQb3NpeDtcbi8qKlxuICogVGhlIGJhc2UgY2xhc3MgZm9yIGFsbCBQYXRoU2N1cnJ5IGNsYXNzZXMsIHByb3ZpZGluZyB0aGUgaW50ZXJmYWNlIGZvciBwYXRoXG4gKiByZXNvbHV0aW9uIGFuZCBmaWxlc3lzdGVtIG9wZXJhdGlvbnMuXG4gKlxuICogVHlwaWNhbGx5LCB5b3Ugc2hvdWxkICpub3QqIGluc3RhbnRpYXRlIHRoaXMgY2xhc3MgZGlyZWN0bHksIGJ1dCByYXRoZXIgb25lXG4gKiBvZiB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgY2xhc3Nlcywgb3IgdGhlIGV4cG9ydGVkIHtAbGluayBQYXRoU2N1cnJ5fSB3aGljaFxuICogZGVmYXVsdHMgdG8gdGhlIGN1cnJlbnQgcGxhdGZvcm0uXG4gKi9cbmNsYXNzIFBhdGhTY3VycnlCYXNlIHtcbiAgICAvKipcbiAgICAgKiBUaGUgcm9vdCBQYXRoIGVudHJ5IGZvciB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBvZiB0aGlzIFNjdXJyeVxuICAgICAqL1xuICAgIHJvb3Q7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmluZyBwYXRoIGZvciB0aGUgcm9vdCBvZiB0aGlzIFNjdXJyeSdzIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnlcbiAgICAgKi9cbiAgICByb290UGF0aDtcbiAgICAvKipcbiAgICAgKiBBIGNvbGxlY3Rpb24gb2YgYWxsIHJvb3RzIGVuY291bnRlcmVkLCByZWZlcmVuY2VkIGJ5IHJvb3RQYXRoXG4gICAgICovXG4gICAgcm9vdHM7XG4gICAgLyoqXG4gICAgICogVGhlIFBhdGggZW50cnkgY29ycmVzcG9uZGluZyB0byB0aGlzIFBhdGhTY3VycnkncyBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LlxuICAgICAqL1xuICAgIGN3ZDtcbiAgICAjcmVzb2x2ZUNhY2hlO1xuICAgICNyZXNvbHZlUG9zaXhDYWNoZTtcbiAgICAjY2hpbGRyZW47XG4gICAgLyoqXG4gICAgICogUGVyZm9ybSBwYXRoIGNvbXBhcmlzb25zIGNhc2UtaW5zZW5zaXRpdmVseS5cbiAgICAgKlxuICAgICAqIERlZmF1bHRzIHRydWUgb24gRGFyd2luIGFuZCBXaW5kb3dzIHN5c3RlbXMsIGZhbHNlIGVsc2V3aGVyZS5cbiAgICAgKi9cbiAgICBub2Nhc2U7XG4gICAgI2ZzO1xuICAgIC8qKlxuICAgICAqIFRoaXMgY2xhc3Mgc2hvdWxkIG5vdCBiZSBpbnN0YW50aWF0ZWQgZGlyZWN0bHkuXG4gICAgICpcbiAgICAgKiBVc2UgUGF0aFNjdXJyeVdpbjMyLCBQYXRoU2N1cnJ5RGFyd2luLCBQYXRoU2N1cnJ5UG9zaXgsIG9yIFBhdGhTY3VycnlcbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGN3ZCA9IHByb2Nlc3MuY3dkKCksIHBhdGhJbXBsLCBzZXAsIHsgbm9jYXNlLCBjaGlsZHJlbkNhY2hlU2l6ZSA9IDE2ICogMTAyNCwgZnMgPSBkZWZhdWx0RlMsIH0gPSB7fSkge1xuICAgICAgICB0aGlzLiNmcyA9IGZzRnJvbU9wdGlvbihmcyk7XG4gICAgICAgIGlmIChjd2QgaW5zdGFuY2VvZiBVUkwgfHwgY3dkLnN0YXJ0c1dpdGgoJ2ZpbGU6Ly8nKSkge1xuICAgICAgICAgICAgY3dkID0gKDAsIG5vZGVfdXJsXzEuZmlsZVVSTFRvUGF0aCkoY3dkKTtcbiAgICAgICAgfVxuICAgICAgICAvLyByZXNvbHZlIGFuZCBzcGxpdCByb290LCBhbmQgdGhlbiBhZGQgdG8gdGhlIHN0b3JlLlxuICAgICAgICAvLyB0aGlzIGlzIHRoZSBvbmx5IHRpbWUgd2UgY2FsbCBwYXRoLnJlc29sdmUoKVxuICAgICAgICBjb25zdCBjd2RQYXRoID0gcGF0aEltcGwucmVzb2x2ZShjd2QpO1xuICAgICAgICB0aGlzLnJvb3RzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgdGhpcy5yb290UGF0aCA9IHRoaXMucGFyc2VSb290UGF0aChjd2RQYXRoKTtcbiAgICAgICAgdGhpcy4jcmVzb2x2ZUNhY2hlID0gbmV3IFJlc29sdmVDYWNoZSgpO1xuICAgICAgICB0aGlzLiNyZXNvbHZlUG9zaXhDYWNoZSA9IG5ldyBSZXNvbHZlQ2FjaGUoKTtcbiAgICAgICAgdGhpcy4jY2hpbGRyZW4gPSBuZXcgQ2hpbGRyZW5DYWNoZShjaGlsZHJlbkNhY2hlU2l6ZSk7XG4gICAgICAgIGNvbnN0IHNwbGl0ID0gY3dkUGF0aC5zdWJzdHJpbmcodGhpcy5yb290UGF0aC5sZW5ndGgpLnNwbGl0KHNlcCk7XG4gICAgICAgIC8vIHJlc29sdmUoJy8nKSBsZWF2ZXMgJycsIHNwbGl0cyB0byBbJyddLCB3ZSBkb24ndCB3YW50IHRoYXQuXG4gICAgICAgIGlmIChzcGxpdC5sZW5ndGggPT09IDEgJiYgIXNwbGl0WzBdKSB7XG4gICAgICAgICAgICBzcGxpdC5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgaWYgKG5vY2FzZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdtdXN0IHByb3ZpZGUgbm9jYXNlIHNldHRpbmcgdG8gUGF0aFNjdXJyeUJhc2UgY3RvcicpO1xuICAgICAgICB9XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIHRoaXMubm9jYXNlID0gbm9jYXNlO1xuICAgICAgICB0aGlzLnJvb3QgPSB0aGlzLm5ld1Jvb3QodGhpcy4jZnMpO1xuICAgICAgICB0aGlzLnJvb3RzW3RoaXMucm9vdFBhdGhdID0gdGhpcy5yb290O1xuICAgICAgICBsZXQgcHJldiA9IHRoaXMucm9vdDtcbiAgICAgICAgbGV0IGxlbiA9IHNwbGl0Lmxlbmd0aCAtIDE7XG4gICAgICAgIGNvbnN0IGpvaW5TZXAgPSBwYXRoSW1wbC5zZXA7XG4gICAgICAgIGxldCBhYnMgPSB0aGlzLnJvb3RQYXRoO1xuICAgICAgICBsZXQgc2F3Rmlyc3QgPSBmYWxzZTtcbiAgICAgICAgZm9yIChjb25zdCBwYXJ0IG9mIHNwbGl0KSB7XG4gICAgICAgICAgICBjb25zdCBsID0gbGVuLS07XG4gICAgICAgICAgICBwcmV2ID0gcHJldi5jaGlsZChwYXJ0LCB7XG4gICAgICAgICAgICAgICAgcmVsYXRpdmU6IG5ldyBBcnJheShsKS5maWxsKCcuLicpLmpvaW4oam9pblNlcCksXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVQb3NpeDogbmV3IEFycmF5KGwpLmZpbGwoJy4uJykuam9pbignLycpLFxuICAgICAgICAgICAgICAgIGZ1bGxwYXRoOiAoYWJzICs9IChzYXdGaXJzdCA/ICcnIDogam9pblNlcCkgKyBwYXJ0KSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc2F3Rmlyc3QgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3dkID0gcHJldjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBkZXB0aCBvZiBhIHByb3ZpZGVkIHBhdGgsIHN0cmluZywgb3IgdGhlIGN3ZFxuICAgICAqL1xuICAgIGRlcHRoKHBhdGggPSB0aGlzLmN3ZCkge1xuICAgICAgICBpZiAodHlwZW9mIHBhdGggPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBwYXRoID0gdGhpcy5jd2QucmVzb2x2ZShwYXRoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGF0aC5kZXB0aCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIGNhY2hlIG9mIGNoaWxkIGVudHJpZXMuICBFeHBvc2VkIHNvIHN1YmNsYXNzZXMgY2FuIGNyZWF0ZVxuICAgICAqIGNoaWxkIFBhdGggb2JqZWN0cyBpbiBhIHBsYXRmb3JtLXNwZWNpZmljIHdheS5cbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIGNoaWxkcmVuQ2FjaGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNjaGlsZHJlbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVzb2x2ZSBvbmUgb3IgbW9yZSBwYXRoIHN0cmluZ3MgdG8gYSByZXNvbHZlZCBzdHJpbmdcbiAgICAgKlxuICAgICAqIFNhbWUgaW50ZXJmYWNlIGFzIHJlcXVpcmUoJ3BhdGgnKS5yZXNvbHZlLlxuICAgICAqXG4gICAgICogTXVjaCBmYXN0ZXIgdGhhbiBwYXRoLnJlc29sdmUoKSB3aGVuIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBmb3IgdGhlIHNhbWVcbiAgICAgKiBwYXRoLCBiZWNhdXNlIHRoZSByZXNvbHZlZCBQYXRoIG9iamVjdHMgYXJlIGNhY2hlZC4gIE11Y2ggc2xvd2VyXG4gICAgICogb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIHJlc29sdmUoLi4ucGF0aHMpIHtcbiAgICAgICAgLy8gZmlyc3QgZmlndXJlIG91dCB0aGUgbWluaW11bSBudW1iZXIgb2YgcGF0aHMgd2UgaGF2ZSB0byB0ZXN0XG4gICAgICAgIC8vIHdlIGFsd2F5cyBzdGFydCBhdCBjd2QsIGJ1dCBhbnkgYWJzb2x1dGVzIHdpbGwgYnVtcCB0aGUgc3RhcnRcbiAgICAgICAgbGV0IHIgPSAnJztcbiAgICAgICAgZm9yIChsZXQgaSA9IHBhdGhzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBjb25zdCBwID0gcGF0aHNbaV07XG4gICAgICAgICAgICBpZiAoIXAgfHwgcCA9PT0gJy4nKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgciA9IHIgPyBgJHtwfS8ke3J9YCA6IHA7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0Fic29sdXRlKHApKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2FjaGVkID0gdGhpcy4jcmVzb2x2ZUNhY2hlLmdldChyKTtcbiAgICAgICAgaWYgKGNhY2hlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuY3dkLnJlc29sdmUocikuZnVsbHBhdGgoKTtcbiAgICAgICAgdGhpcy4jcmVzb2x2ZUNhY2hlLnNldChyLCByZXN1bHQpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXNvbHZlIG9uZSBvciBtb3JlIHBhdGggc3RyaW5ncyB0byBhIHJlc29sdmVkIHN0cmluZywgcmV0dXJuaW5nXG4gICAgICogdGhlIHBvc2l4IHBhdGguICBJZGVudGljYWwgdG8gLnJlc29sdmUoKSBvbiBwb3NpeCBzeXN0ZW1zLCBidXQgb25cbiAgICAgKiB3aW5kb3dzIHdpbGwgcmV0dXJuIGEgZm9yd2FyZC1zbGFzaCBzZXBhcmF0ZWQgVU5DIHBhdGguXG4gICAgICpcbiAgICAgKiBTYW1lIGludGVyZmFjZSBhcyByZXF1aXJlKCdwYXRoJykucmVzb2x2ZS5cbiAgICAgKlxuICAgICAqIE11Y2ggZmFzdGVyIHRoYW4gcGF0aC5yZXNvbHZlKCkgd2hlbiBjYWxsZWQgbXVsdGlwbGUgdGltZXMgZm9yIHRoZSBzYW1lXG4gICAgICogcGF0aCwgYmVjYXVzZSB0aGUgcmVzb2x2ZWQgUGF0aCBvYmplY3RzIGFyZSBjYWNoZWQuICBNdWNoIHNsb3dlclxuICAgICAqIG90aGVyd2lzZS5cbiAgICAgKi9cbiAgICByZXNvbHZlUG9zaXgoLi4ucGF0aHMpIHtcbiAgICAgICAgLy8gZmlyc3QgZmlndXJlIG91dCB0aGUgbWluaW11bSBudW1iZXIgb2YgcGF0aHMgd2UgaGF2ZSB0byB0ZXN0XG4gICAgICAgIC8vIHdlIGFsd2F5cyBzdGFydCBhdCBjd2QsIGJ1dCBhbnkgYWJzb2x1dGVzIHdpbGwgYnVtcCB0aGUgc3RhcnRcbiAgICAgICAgbGV0IHIgPSAnJztcbiAgICAgICAgZm9yIChsZXQgaSA9IHBhdGhzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBjb25zdCBwID0gcGF0aHNbaV07XG4gICAgICAgICAgICBpZiAoIXAgfHwgcCA9PT0gJy4nKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgciA9IHIgPyBgJHtwfS8ke3J9YCA6IHA7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0Fic29sdXRlKHApKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2FjaGVkID0gdGhpcy4jcmVzb2x2ZVBvc2l4Q2FjaGUuZ2V0KHIpO1xuICAgICAgICBpZiAoY2FjaGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5jd2QucmVzb2x2ZShyKS5mdWxscGF0aFBvc2l4KCk7XG4gICAgICAgIHRoaXMuI3Jlc29sdmVQb3NpeENhY2hlLnNldChyLCByZXN1bHQpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBmaW5kIHRoZSByZWxhdGl2ZSBwYXRoIGZyb20gdGhlIGN3ZCB0byB0aGUgc3VwcGxpZWQgcGF0aCBzdHJpbmcgb3IgZW50cnlcbiAgICAgKi9cbiAgICByZWxhdGl2ZShlbnRyeSA9IHRoaXMuY3dkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbnRyeS5yZWxhdGl2ZSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBmaW5kIHRoZSByZWxhdGl2ZSBwYXRoIGZyb20gdGhlIGN3ZCB0byB0aGUgc3VwcGxpZWQgcGF0aCBzdHJpbmcgb3JcbiAgICAgKiBlbnRyeSwgdXNpbmcgLyBhcyB0aGUgcGF0aCBkZWxpbWl0ZXIsIGV2ZW4gb24gV2luZG93cy5cbiAgICAgKi9cbiAgICByZWxhdGl2ZVBvc2l4KGVudHJ5ID0gdGhpcy5jd2QpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVudHJ5LnJlbGF0aXZlUG9zaXgoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBiYXNlbmFtZSBmb3IgdGhlIHByb3ZpZGVkIHN0cmluZyBvciBQYXRoIG9iamVjdFxuICAgICAqL1xuICAgIGJhc2VuYW1lKGVudHJ5ID0gdGhpcy5jd2QpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVudHJ5Lm5hbWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgZGlybmFtZSBmb3IgdGhlIHByb3ZpZGVkIHN0cmluZyBvciBQYXRoIG9iamVjdFxuICAgICAqL1xuICAgIGRpcm5hbWUoZW50cnkgPSB0aGlzLmN3ZCkge1xuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZC5yZXNvbHZlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKGVudHJ5LnBhcmVudCB8fCBlbnRyeSkuZnVsbHBhdGgoKTtcbiAgICB9XG4gICAgYXN5bmMgcmVhZGRpcihlbnRyeSA9IHRoaXMuY3dkLCBvcHRzID0ge1xuICAgICAgICB3aXRoRmlsZVR5cGVzOiB0cnVlLFxuICAgIH0pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIShlbnRyeSBpbnN0YW5jZW9mIFBhdGhCYXNlKSkge1xuICAgICAgICAgICAgb3B0cyA9IGVudHJ5O1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHdpdGhGaWxlVHlwZXMgfSA9IG9wdHM7XG4gICAgICAgIGlmICghZW50cnkuY2FuUmVhZGRpcigpKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBwID0gYXdhaXQgZW50cnkucmVhZGRpcigpO1xuICAgICAgICAgICAgcmV0dXJuIHdpdGhGaWxlVHlwZXMgPyBwIDogcC5tYXAoZSA9PiBlLm5hbWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJlYWRkaXJTeW5jKGVudHJ5ID0gdGhpcy5jd2QsIG9wdHMgPSB7XG4gICAgICAgIHdpdGhGaWxlVHlwZXM6IHRydWUsXG4gICAgfSkge1xuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZC5yZXNvbHZlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghKGVudHJ5IGluc3RhbmNlb2YgUGF0aEJhc2UpKSB7XG4gICAgICAgICAgICBvcHRzID0gZW50cnk7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgd2l0aEZpbGVUeXBlcyA9IHRydWUgfSA9IG9wdHM7XG4gICAgICAgIGlmICghZW50cnkuY2FuUmVhZGRpcigpKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAod2l0aEZpbGVUeXBlcykge1xuICAgICAgICAgICAgcmV0dXJuIGVudHJ5LnJlYWRkaXJTeW5jKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZW50cnkucmVhZGRpclN5bmMoKS5tYXAoZSA9PiBlLm5hbWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENhbGwgbHN0YXQoKSBvbiB0aGUgc3RyaW5nIG9yIFBhdGggb2JqZWN0LCBhbmQgdXBkYXRlIGFsbCBrbm93blxuICAgICAqIGluZm9ybWF0aW9uIHRoYXQgY2FuIGJlIGRldGVybWluZWQuXG4gICAgICpcbiAgICAgKiBOb3RlIHRoYXQgdW5saWtlIGBmcy5sc3RhdCgpYCwgdGhlIHJldHVybmVkIHZhbHVlIGRvZXMgbm90IGNvbnRhaW4gc29tZVxuICAgICAqIGluZm9ybWF0aW9uLCBzdWNoIGFzIGBtb2RlYCwgYGRldmAsIGBubGlua2AsIGFuZCBgaW5vYC4gIElmIHRoYXRcbiAgICAgKiBpbmZvcm1hdGlvbiBpcyByZXF1aXJlZCwgeW91IHdpbGwgbmVlZCB0byBjYWxsIGBmcy5sc3RhdGAgeW91cnNlbGYuXG4gICAgICpcbiAgICAgKiBJZiB0aGUgUGF0aCByZWZlcnMgdG8gYSBub25leGlzdGVudCBmaWxlLCBvciBpZiB0aGUgbHN0YXQgY2FsbCBmYWlscyBmb3JcbiAgICAgKiBhbnkgcmVhc29uLCBgdW5kZWZpbmVkYCBpcyByZXR1cm5lZC4gIE90aGVyd2lzZSB0aGUgdXBkYXRlZCBQYXRoIG9iamVjdCBpc1xuICAgICAqIHJldHVybmVkLlxuICAgICAqXG4gICAgICogUmVzdWx0cyBhcmUgY2FjaGVkLCBhbmQgdGh1cyBtYXkgYmUgb3V0IG9mIGRhdGUgaWYgdGhlIGZpbGVzeXN0ZW0gaXNcbiAgICAgKiBtdXRhdGVkLlxuICAgICAqL1xuICAgIGFzeW5jIGxzdGF0KGVudHJ5ID0gdGhpcy5jd2QpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVudHJ5LmxzdGF0KCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHN5bmNocm9ub3VzIHtAbGluayBQYXRoU2N1cnJ5QmFzZS5sc3RhdH1cbiAgICAgKi9cbiAgICBsc3RhdFN5bmMoZW50cnkgPSB0aGlzLmN3ZCkge1xuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZC5yZXNvbHZlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW50cnkubHN0YXRTeW5jKCk7XG4gICAgfVxuICAgIGFzeW5jIHJlYWRsaW5rKGVudHJ5ID0gdGhpcy5jd2QsIHsgd2l0aEZpbGVUeXBlcyB9ID0ge1xuICAgICAgICB3aXRoRmlsZVR5cGVzOiBmYWxzZSxcbiAgICB9KSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCEoZW50cnkgaW5zdGFuY2VvZiBQYXRoQmFzZSkpIHtcbiAgICAgICAgICAgIHdpdGhGaWxlVHlwZXMgPSBlbnRyeS53aXRoRmlsZVR5cGVzO1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlID0gYXdhaXQgZW50cnkucmVhZGxpbmsoKTtcbiAgICAgICAgcmV0dXJuIHdpdGhGaWxlVHlwZXMgPyBlIDogZT8uZnVsbHBhdGgoKTtcbiAgICB9XG4gICAgcmVhZGxpbmtTeW5jKGVudHJ5ID0gdGhpcy5jd2QsIHsgd2l0aEZpbGVUeXBlcyB9ID0ge1xuICAgICAgICB3aXRoRmlsZVR5cGVzOiBmYWxzZSxcbiAgICB9KSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCEoZW50cnkgaW5zdGFuY2VvZiBQYXRoQmFzZSkpIHtcbiAgICAgICAgICAgIHdpdGhGaWxlVHlwZXMgPSBlbnRyeS53aXRoRmlsZVR5cGVzO1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlID0gZW50cnkucmVhZGxpbmtTeW5jKCk7XG4gICAgICAgIHJldHVybiB3aXRoRmlsZVR5cGVzID8gZSA6IGU/LmZ1bGxwYXRoKCk7XG4gICAgfVxuICAgIGFzeW5jIHJlYWxwYXRoKGVudHJ5ID0gdGhpcy5jd2QsIHsgd2l0aEZpbGVUeXBlcyB9ID0ge1xuICAgICAgICB3aXRoRmlsZVR5cGVzOiBmYWxzZSxcbiAgICB9KSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCEoZW50cnkgaW5zdGFuY2VvZiBQYXRoQmFzZSkpIHtcbiAgICAgICAgICAgIHdpdGhGaWxlVHlwZXMgPSBlbnRyeS53aXRoRmlsZVR5cGVzO1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlID0gYXdhaXQgZW50cnkucmVhbHBhdGgoKTtcbiAgICAgICAgcmV0dXJuIHdpdGhGaWxlVHlwZXMgPyBlIDogZT8uZnVsbHBhdGgoKTtcbiAgICB9XG4gICAgcmVhbHBhdGhTeW5jKGVudHJ5ID0gdGhpcy5jd2QsIHsgd2l0aEZpbGVUeXBlcyB9ID0ge1xuICAgICAgICB3aXRoRmlsZVR5cGVzOiBmYWxzZSxcbiAgICB9KSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCEoZW50cnkgaW5zdGFuY2VvZiBQYXRoQmFzZSkpIHtcbiAgICAgICAgICAgIHdpdGhGaWxlVHlwZXMgPSBlbnRyeS53aXRoRmlsZVR5cGVzO1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlID0gZW50cnkucmVhbHBhdGhTeW5jKCk7XG4gICAgICAgIHJldHVybiB3aXRoRmlsZVR5cGVzID8gZSA6IGU/LmZ1bGxwYXRoKCk7XG4gICAgfVxuICAgIGFzeW5jIHdhbGsoZW50cnkgPSB0aGlzLmN3ZCwgb3B0cyA9IHt9KSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCEoZW50cnkgaW5zdGFuY2VvZiBQYXRoQmFzZSkpIHtcbiAgICAgICAgICAgIG9wdHMgPSBlbnRyeTtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2Q7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyB3aXRoRmlsZVR5cGVzID0gdHJ1ZSwgZm9sbG93ID0gZmFsc2UsIGZpbHRlciwgd2Fsa0ZpbHRlciwgfSA9IG9wdHM7XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBbXTtcbiAgICAgICAgaWYgKCFmaWx0ZXIgfHwgZmlsdGVyKGVudHJ5KSkge1xuICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHdpdGhGaWxlVHlwZXMgPyBlbnRyeSA6IGVudHJ5LmZ1bGxwYXRoKCkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRpcnMgPSBuZXcgU2V0KCk7XG4gICAgICAgIGNvbnN0IHdhbGsgPSAoZGlyLCBjYikgPT4ge1xuICAgICAgICAgICAgZGlycy5hZGQoZGlyKTtcbiAgICAgICAgICAgIGRpci5yZWFkZGlyQ0IoKGVyLCBlbnRyaWVzKSA9PiB7XG4gICAgICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICAgICAgaWYgKGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYihlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICAgICAgbGV0IGxlbiA9IGVudHJpZXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGlmICghbGVuKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2IoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0ID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoLS1sZW4gPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNiKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZmlsdGVyIHx8IGZpbHRlcihlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHdpdGhGaWxlVHlwZXMgPyBlIDogZS5mdWxscGF0aCgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoZm9sbG93ICYmIGUuaXNTeW1ib2xpY0xpbmsoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZS5yZWFscGF0aCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4ociA9PiAocj8uaXNVbmtub3duKCkgPyByLmxzdGF0KCkgOiByKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbihyID0+IHI/LnNob3VsZFdhbGsoZGlycywgd2Fsa0ZpbHRlcikgPyB3YWxrKHIsIG5leHQpIDogbmV4dCgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLnNob3VsZFdhbGsoZGlycywgd2Fsa0ZpbHRlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWxrKGUsIG5leHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgdHJ1ZSk7IC8vIHphbGdvb29vb29vXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gZW50cnk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzLCByZWopID0+IHtcbiAgICAgICAgICAgIHdhbGsoc3RhcnQsIGVyID0+IHtcbiAgICAgICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgICAgICAgICBpZiAoZXIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWooZXIpO1xuICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICAgICAgcmVzKHJlc3VsdHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB3YWxrU3luYyhlbnRyeSA9IHRoaXMuY3dkLCBvcHRzID0ge30pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIShlbnRyeSBpbnN0YW5jZW9mIFBhdGhCYXNlKSkge1xuICAgICAgICAgICAgb3B0cyA9IGVudHJ5O1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHdpdGhGaWxlVHlwZXMgPSB0cnVlLCBmb2xsb3cgPSBmYWxzZSwgZmlsdGVyLCB3YWxrRmlsdGVyLCB9ID0gb3B0cztcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IFtdO1xuICAgICAgICBpZiAoIWZpbHRlciB8fCBmaWx0ZXIoZW50cnkpKSB7XG4gICAgICAgICAgICByZXN1bHRzLnB1c2god2l0aEZpbGVUeXBlcyA/IGVudHJ5IDogZW50cnkuZnVsbHBhdGgoKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGlycyA9IG5ldyBTZXQoW2VudHJ5XSk7XG4gICAgICAgIGZvciAoY29uc3QgZGlyIG9mIGRpcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGVudHJpZXMgPSBkaXIucmVhZGRpclN5bmMoKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFmaWx0ZXIgfHwgZmlsdGVyKGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh3aXRoRmlsZVR5cGVzID8gZSA6IGUuZnVsbHBhdGgoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCByID0gZTtcbiAgICAgICAgICAgICAgICBpZiAoZS5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKGZvbGxvdyAmJiAociA9IGUucmVhbHBhdGhTeW5jKCkpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoci5pc1Vua25vd24oKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHIubHN0YXRTeW5jKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyLnNob3VsZFdhbGsoZGlycywgd2Fsa0ZpbHRlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgZGlycy5hZGQocik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTdXBwb3J0IGZvciBgZm9yIGF3YWl0YFxuICAgICAqXG4gICAgICogQWxpYXMgZm9yIHtAbGluayBQYXRoU2N1cnJ5QmFzZS5pdGVyYXRlfVxuICAgICAqXG4gICAgICogTm90ZTogQXMgb2YgTm9kZSAxOSwgdGhpcyBpcyB2ZXJ5IHNsb3csIGNvbXBhcmVkIHRvIG90aGVyIG1ldGhvZHMgb2ZcbiAgICAgKiB3YWxraW5nLiAgQ29uc2lkZXIgdXNpbmcge0BsaW5rIFBhdGhTY3VycnlCYXNlLnN0cmVhbX0gaWYgbWVtb3J5IG92ZXJoZWFkXG4gICAgICogYW5kIGJhY2twcmVzc3VyZSBhcmUgY29uY2VybnMsIG9yIHtAbGluayBQYXRoU2N1cnJ5QmFzZS53YWxrfSBpZiBub3QuXG4gICAgICovXG4gICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlcmF0ZSgpO1xuICAgIH1cbiAgICBpdGVyYXRlKGVudHJ5ID0gdGhpcy5jd2QsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICAvLyBpdGVyYXRpbmcgYXN5bmMgb3ZlciB0aGUgc3RyZWFtIGlzIHNpZ25pZmljYW50bHkgbW9yZSBwZXJmb3JtYW50LFxuICAgICAgICAvLyBlc3BlY2lhbGx5IGluIHRoZSB3YXJtLWNhY2hlIHNjZW5hcmlvLCBiZWNhdXNlIGl0IGJ1ZmZlcnMgdXAgZGlyZWN0b3J5XG4gICAgICAgIC8vIGVudHJpZXMgaW4gdGhlIGJhY2tncm91bmQgaW5zdGVhZCBvZiB3YWl0aW5nIGZvciBhIHlpZWxkIGZvciBlYWNoIG9uZS5cbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIShlbnRyeSBpbnN0YW5jZW9mIFBhdGhCYXNlKSkge1xuICAgICAgICAgICAgb3B0aW9ucyA9IGVudHJ5O1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5zdHJlYW0oZW50cnksIG9wdGlvbnMpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJdGVyYXRpbmcgb3ZlciBhIFBhdGhTY3VycnkgcGVyZm9ybXMgYSBzeW5jaHJvbm91cyB3YWxrLlxuICAgICAqXG4gICAgICogQWxpYXMgZm9yIHtAbGluayBQYXRoU2N1cnJ5QmFzZS5pdGVyYXRlU3luY31cbiAgICAgKi9cbiAgICBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlcmF0ZVN5bmMoKTtcbiAgICB9XG4gICAgKml0ZXJhdGVTeW5jKGVudHJ5ID0gdGhpcy5jd2QsIG9wdHMgPSB7fSkge1xuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZC5yZXNvbHZlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghKGVudHJ5IGluc3RhbmNlb2YgUGF0aEJhc2UpKSB7XG4gICAgICAgICAgICBvcHRzID0gZW50cnk7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgd2l0aEZpbGVUeXBlcyA9IHRydWUsIGZvbGxvdyA9IGZhbHNlLCBmaWx0ZXIsIHdhbGtGaWx0ZXIsIH0gPSBvcHRzO1xuICAgICAgICBpZiAoIWZpbHRlciB8fCBmaWx0ZXIoZW50cnkpKSB7XG4gICAgICAgICAgICB5aWVsZCB3aXRoRmlsZVR5cGVzID8gZW50cnkgOiBlbnRyeS5mdWxscGF0aCgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRpcnMgPSBuZXcgU2V0KFtlbnRyeV0pO1xuICAgICAgICBmb3IgKGNvbnN0IGRpciBvZiBkaXJzKSB7XG4gICAgICAgICAgICBjb25zdCBlbnRyaWVzID0gZGlyLnJlYWRkaXJTeW5jKCk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGUgb2YgZW50cmllcykge1xuICAgICAgICAgICAgICAgIGlmICghZmlsdGVyIHx8IGZpbHRlcihlKSkge1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCB3aXRoRmlsZVR5cGVzID8gZSA6IGUuZnVsbHBhdGgoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IHIgPSBlO1xuICAgICAgICAgICAgICAgIGlmIChlLmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoZm9sbG93ICYmIChyID0gZS5yZWFscGF0aFN5bmMoKSkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyLmlzVW5rbm93bigpKVxuICAgICAgICAgICAgICAgICAgICAgICAgci5sc3RhdFN5bmMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHIuc2hvdWxkV2FsayhkaXJzLCB3YWxrRmlsdGVyKSkge1xuICAgICAgICAgICAgICAgICAgICBkaXJzLmFkZChyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RyZWFtKGVudHJ5ID0gdGhpcy5jd2QsIG9wdHMgPSB7fSkge1xuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZC5yZXNvbHZlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghKGVudHJ5IGluc3RhbmNlb2YgUGF0aEJhc2UpKSB7XG4gICAgICAgICAgICBvcHRzID0gZW50cnk7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgd2l0aEZpbGVUeXBlcyA9IHRydWUsIGZvbGxvdyA9IGZhbHNlLCBmaWx0ZXIsIHdhbGtGaWx0ZXIsIH0gPSBvcHRzO1xuICAgICAgICBjb25zdCByZXN1bHRzID0gbmV3IG1pbmlwYXNzXzEuTWluaXBhc3MoeyBvYmplY3RNb2RlOiB0cnVlIH0pO1xuICAgICAgICBpZiAoIWZpbHRlciB8fCBmaWx0ZXIoZW50cnkpKSB7XG4gICAgICAgICAgICByZXN1bHRzLndyaXRlKHdpdGhGaWxlVHlwZXMgPyBlbnRyeSA6IGVudHJ5LmZ1bGxwYXRoKCkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRpcnMgPSBuZXcgU2V0KCk7XG4gICAgICAgIGNvbnN0IHF1ZXVlID0gW2VudHJ5XTtcbiAgICAgICAgbGV0IHByb2Nlc3NpbmcgPSAwO1xuICAgICAgICBjb25zdCBwcm9jZXNzID0gKCkgPT4ge1xuICAgICAgICAgICAgbGV0IHBhdXNlZCA9IGZhbHNlO1xuICAgICAgICAgICAgd2hpbGUgKCFwYXVzZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkaXIgPSBxdWV1ZS5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIGlmICghZGlyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzaW5nID09PSAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5lbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwcm9jZXNzaW5nKys7XG4gICAgICAgICAgICAgICAgZGlycy5hZGQoZGlyKTtcbiAgICAgICAgICAgICAgICBjb25zdCBvblJlYWRkaXIgPSAoZXIsIGVudHJpZXMsIGRpZFJlYWxwYXRocyA9IGZhbHNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0cy5lbWl0KCdlcnJvcicsIGVyKTtcbiAgICAgICAgICAgICAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgICAgICAgICAgICAgaWYgKGZvbGxvdyAmJiAhZGlkUmVhbHBhdGhzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm9taXNlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBlIG9mIGVudHJpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2goZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlYWxwYXRoKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKChyKSA9PiByPy5pc1Vua25vd24oKSA/IHIubHN0YXQoKSA6IHIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvbWlzZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oKCkgPT4gb25SZWFkZGlyKG51bGwsIGVudHJpZXMsIHRydWUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBlIG9mIGVudHJpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlICYmICghZmlsdGVyIHx8IGZpbHRlcihlKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdHMud3JpdGUod2l0aEZpbGVUeXBlcyA/IGUgOiBlLmZ1bGxwYXRoKCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdXNlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3NpbmctLTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBlIG9mIGVudHJpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHIgPSBlLnJlYWxwYXRoQ2FjaGVkKCkgfHwgZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyLnNob3VsZFdhbGsoZGlycywgd2Fsa0ZpbHRlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWV1ZS5wdXNoKHIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXVzZWQgJiYgIXJlc3VsdHMuZmxvd2luZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5vbmNlKCdkcmFpbicsIHByb2Nlc3MpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFzeW5jKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIC8vIHphbGdvIGNvbnRhaW5tZW50XG4gICAgICAgICAgICAgICAgbGV0IHN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGRpci5yZWFkZGlyQ0Iob25SZWFkZGlyLCB0cnVlKTtcbiAgICAgICAgICAgICAgICBzeW5jID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHByb2Nlc3MoKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuICAgIHN0cmVhbVN5bmMoZW50cnkgPSB0aGlzLmN3ZCwgb3B0cyA9IHt9KSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCEoZW50cnkgaW5zdGFuY2VvZiBQYXRoQmFzZSkpIHtcbiAgICAgICAgICAgIG9wdHMgPSBlbnRyeTtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2Q7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyB3aXRoRmlsZVR5cGVzID0gdHJ1ZSwgZm9sbG93ID0gZmFsc2UsIGZpbHRlciwgd2Fsa0ZpbHRlciwgfSA9IG9wdHM7XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBuZXcgbWluaXBhc3NfMS5NaW5pcGFzcyh7IG9iamVjdE1vZGU6IHRydWUgfSk7XG4gICAgICAgIGNvbnN0IGRpcnMgPSBuZXcgU2V0KCk7XG4gICAgICAgIGlmICghZmlsdGVyIHx8IGZpbHRlcihlbnRyeSkpIHtcbiAgICAgICAgICAgIHJlc3VsdHMud3JpdGUod2l0aEZpbGVUeXBlcyA/IGVudHJ5IDogZW50cnkuZnVsbHBhdGgoKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcXVldWUgPSBbZW50cnldO1xuICAgICAgICBsZXQgcHJvY2Vzc2luZyA9IDA7XG4gICAgICAgIGNvbnN0IHByb2Nlc3MgPSAoKSA9PiB7XG4gICAgICAgICAgICBsZXQgcGF1c2VkID0gZmFsc2U7XG4gICAgICAgICAgICB3aGlsZSAoIXBhdXNlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpciA9IHF1ZXVlLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgaWYgKCFkaXIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb2Nlc3NpbmcgPT09IDApXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzLmVuZCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHByb2Nlc3NpbmcrKztcbiAgICAgICAgICAgICAgICBkaXJzLmFkZChkaXIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVudHJpZXMgPSBkaXIucmVhZGRpclN5bmMoKTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGUgb2YgZW50cmllcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWZpbHRlciB8fCBmaWx0ZXIoZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVzdWx0cy53cml0ZSh3aXRoRmlsZVR5cGVzID8gZSA6IGUuZnVsbHBhdGgoKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXVzZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHByb2Nlc3NpbmctLTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGUgb2YgZW50cmllcykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgciA9IGU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlLmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGZvbGxvdyAmJiAociA9IGUucmVhbHBhdGhTeW5jKCkpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyLmlzVW5rbm93bigpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIubHN0YXRTeW5jKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHIuc2hvdWxkV2FsayhkaXJzLCB3YWxrRmlsdGVyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcXVldWUucHVzaChyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwYXVzZWQgJiYgIXJlc3VsdHMuZmxvd2luZylcbiAgICAgICAgICAgICAgICByZXN1bHRzLm9uY2UoJ2RyYWluJywgcHJvY2Vzcyk7XG4gICAgICAgIH07XG4gICAgICAgIHByb2Nlc3MoKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuICAgIGNoZGlyKHBhdGggPSB0aGlzLmN3ZCkge1xuICAgICAgICBjb25zdCBvbGRDd2QgPSB0aGlzLmN3ZDtcbiAgICAgICAgdGhpcy5jd2QgPSB0eXBlb2YgcGF0aCA9PT0gJ3N0cmluZycgPyB0aGlzLmN3ZC5yZXNvbHZlKHBhdGgpIDogcGF0aDtcbiAgICAgICAgdGhpcy5jd2Rbc2V0QXNDd2RdKG9sZEN3ZCk7XG4gICAgfVxufVxuZXhwb3J0cy5QYXRoU2N1cnJ5QmFzZSA9IFBhdGhTY3VycnlCYXNlO1xuLyoqXG4gKiBXaW5kb3dzIGltcGxlbWVudGF0aW9uIG9mIHtAbGluayBQYXRoU2N1cnJ5QmFzZX1cbiAqXG4gKiBEZWZhdWx0cyB0byBjYXNlIGluc2Vuc2l0dmUsIHVzZXMgYCdcXFxcJ2AgdG8gZ2VuZXJhdGUgcGF0aCBzdHJpbmdzLiAgVXNlc1xuICoge0BsaW5rIFBhdGhXaW4zMn0gZm9yIFBhdGggb2JqZWN0cy5cbiAqL1xuY2xhc3MgUGF0aFNjdXJyeVdpbjMyIGV4dGVuZHMgUGF0aFNjdXJyeUJhc2Uge1xuICAgIC8qKlxuICAgICAqIHNlcGFyYXRvciBmb3IgZ2VuZXJhdGluZyBwYXRoIHN0cmluZ3NcbiAgICAgKi9cbiAgICBzZXAgPSAnXFxcXCc7XG4gICAgY29uc3RydWN0b3IoY3dkID0gcHJvY2Vzcy5jd2QoKSwgb3B0cyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHsgbm9jYXNlID0gdHJ1ZSB9ID0gb3B0cztcbiAgICAgICAgc3VwZXIoY3dkLCBub2RlX3BhdGhfMS53aW4zMiwgJ1xcXFwnLCB7IC4uLm9wdHMsIG5vY2FzZSB9KTtcbiAgICAgICAgdGhpcy5ub2Nhc2UgPSBub2Nhc2U7XG4gICAgICAgIGZvciAobGV0IHAgPSB0aGlzLmN3ZDsgcDsgcCA9IHAucGFyZW50KSB7XG4gICAgICAgICAgICBwLm5vY2FzZSA9IHRoaXMubm9jYXNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHBhcnNlUm9vdFBhdGgoZGlyKSB7XG4gICAgICAgIC8vIGlmIHRoZSBwYXRoIHN0YXJ0cyB3aXRoIGEgc2luZ2xlIHNlcGFyYXRvciwgaXQncyBub3QgYSBVTkMsIGFuZCB3ZSdsbFxuICAgICAgICAvLyBqdXN0IGdldCBzZXBhcmF0b3IgYXMgdGhlIHJvb3QsIGFuZCBkcml2ZUZyb21VTkMgd2lsbCByZXR1cm4gXFxcbiAgICAgICAgLy8gSW4gdGhhdCBjYXNlLCBtb3VudCBcXCBvbiB0aGUgcm9vdCBmcm9tIHRoZSBjd2QuXG4gICAgICAgIHJldHVybiBub2RlX3BhdGhfMS53aW4zMi5wYXJzZShkaXIpLnJvb3QudG9VcHBlckNhc2UoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgbmV3Um9vdChmcykge1xuICAgICAgICByZXR1cm4gbmV3IFBhdGhXaW4zMih0aGlzLnJvb3RQYXRoLCBJRkRJUiwgdW5kZWZpbmVkLCB0aGlzLnJvb3RzLCB0aGlzLm5vY2FzZSwgdGhpcy5jaGlsZHJlbkNhY2hlKCksIHsgZnMgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSBwcm92aWRlZCBwYXRoIHN0cmluZyBpcyBhbiBhYnNvbHV0ZSBwYXRoXG4gICAgICovXG4gICAgaXNBYnNvbHV0ZShwKSB7XG4gICAgICAgIHJldHVybiAocC5zdGFydHNXaXRoKCcvJykgfHwgcC5zdGFydHNXaXRoKCdcXFxcJykgfHwgL15bYS16XTooXFwvfFxcXFwpL2kudGVzdChwKSk7XG4gICAgfVxufVxuZXhwb3J0cy5QYXRoU2N1cnJ5V2luMzIgPSBQYXRoU2N1cnJ5V2luMzI7XG4vKipcbiAqIHtAbGluayBQYXRoU2N1cnJ5QmFzZX0gaW1wbGVtZW50YXRpb24gZm9yIGFsbCBwb3NpeCBzeXN0ZW1zIG90aGVyIHRoYW4gRGFyd2luLlxuICpcbiAqIERlZmF1bHRzIHRvIGNhc2Utc2Vuc2l0aXZlIG1hdGNoaW5nLCB1c2VzIGAnLydgIHRvIGdlbmVyYXRlIHBhdGggc3RyaW5ncy5cbiAqXG4gKiBVc2VzIHtAbGluayBQYXRoUG9zaXh9IGZvciBQYXRoIG9iamVjdHMuXG4gKi9cbmNsYXNzIFBhdGhTY3VycnlQb3NpeCBleHRlbmRzIFBhdGhTY3VycnlCYXNlIHtcbiAgICAvKipcbiAgICAgKiBzZXBhcmF0b3IgZm9yIGdlbmVyYXRpbmcgcGF0aCBzdHJpbmdzXG4gICAgICovXG4gICAgc2VwID0gJy8nO1xuICAgIGNvbnN0cnVjdG9yKGN3ZCA9IHByb2Nlc3MuY3dkKCksIG9wdHMgPSB7fSkge1xuICAgICAgICBjb25zdCB7IG5vY2FzZSA9IGZhbHNlIH0gPSBvcHRzO1xuICAgICAgICBzdXBlcihjd2QsIG5vZGVfcGF0aF8xLnBvc2l4LCAnLycsIHsgLi4ub3B0cywgbm9jYXNlIH0pO1xuICAgICAgICB0aGlzLm5vY2FzZSA9IG5vY2FzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcGFyc2VSb290UGF0aChfZGlyKSB7XG4gICAgICAgIHJldHVybiAnLyc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIG5ld1Jvb3QoZnMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQYXRoUG9zaXgodGhpcy5yb290UGF0aCwgSUZESVIsIHVuZGVmaW5lZCwgdGhpcy5yb290cywgdGhpcy5ub2Nhc2UsIHRoaXMuY2hpbGRyZW5DYWNoZSgpLCB7IGZzIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgcHJvdmlkZWQgcGF0aCBzdHJpbmcgaXMgYW4gYWJzb2x1dGUgcGF0aFxuICAgICAqL1xuICAgIGlzQWJzb2x1dGUocCkge1xuICAgICAgICByZXR1cm4gcC5zdGFydHNXaXRoKCcvJyk7XG4gICAgfVxufVxuZXhwb3J0cy5QYXRoU2N1cnJ5UG9zaXggPSBQYXRoU2N1cnJ5UG9zaXg7XG4vKipcbiAqIHtAbGluayBQYXRoU2N1cnJ5QmFzZX0gaW1wbGVtZW50YXRpb24gZm9yIERhcndpbiAobWFjT1MpIHN5c3RlbXMuXG4gKlxuICogRGVmYXVsdHMgdG8gY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaGluZywgdXNlcyBgJy8nYCBmb3IgZ2VuZXJhdGluZyBwYXRoXG4gKiBzdHJpbmdzLlxuICpcbiAqIFVzZXMge0BsaW5rIFBhdGhQb3NpeH0gZm9yIFBhdGggb2JqZWN0cy5cbiAqL1xuY2xhc3MgUGF0aFNjdXJyeURhcndpbiBleHRlbmRzIFBhdGhTY3VycnlQb3NpeCB7XG4gICAgY29uc3RydWN0b3IoY3dkID0gcHJvY2Vzcy5jd2QoKSwgb3B0cyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHsgbm9jYXNlID0gdHJ1ZSB9ID0gb3B0cztcbiAgICAgICAgc3VwZXIoY3dkLCB7IC4uLm9wdHMsIG5vY2FzZSB9KTtcbiAgICB9XG59XG5leHBvcnRzLlBhdGhTY3VycnlEYXJ3aW4gPSBQYXRoU2N1cnJ5RGFyd2luO1xuLyoqXG4gKiBEZWZhdWx0IHtAbGluayBQYXRoQmFzZX0gaW1wbGVtZW50YXRpb24gZm9yIHRoZSBjdXJyZW50IHBsYXRmb3JtLlxuICpcbiAqIHtAbGluayBQYXRoV2luMzJ9IG9uIFdpbmRvd3Mgc3lzdGVtcywge0BsaW5rIFBhdGhQb3NpeH0gb24gYWxsIG90aGVycy5cbiAqL1xuZXhwb3J0cy5QYXRoID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyA/IFBhdGhXaW4zMiA6IFBhdGhQb3NpeDtcbi8qKlxuICogRGVmYXVsdCB7QGxpbmsgUGF0aFNjdXJyeUJhc2V9IGltcGxlbWVudGF0aW9uIGZvciB0aGUgY3VycmVudCBwbGF0Zm9ybS5cbiAqXG4gKiB7QGxpbmsgUGF0aFNjdXJyeVdpbjMyfSBvbiBXaW5kb3dzIHN5c3RlbXMsIHtAbGluayBQYXRoU2N1cnJ5RGFyd2lufSBvblxuICogRGFyd2luIChtYWNPUykgc3lzdGVtcywge0BsaW5rIFBhdGhTY3VycnlQb3NpeH0gb24gYWxsIG90aGVycy5cbiAqL1xuZXhwb3J0cy5QYXRoU2N1cnJ5ID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyA/IFBhdGhTY3VycnlXaW4zMlxuICAgIDogcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ2RhcndpbicgPyBQYXRoU2N1cnJ5RGFyd2luXG4gICAgICAgIDogUGF0aFNjdXJyeVBvc2l4O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIHRoaXMgaXMganVzdCBhIHZlcnkgbGlnaHQgd3JhcHBlciBhcm91bmQgMiBhcnJheXMgd2l0aCBhbiBvZmZzZXQgaW5kZXhcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUGF0dGVybiA9IHZvaWQgMDtcbmNvbnN0IG1pbmltYXRjaF8xID0gcmVxdWlyZShcIm1pbmltYXRjaFwiKTtcbmNvbnN0IGlzUGF0dGVybkxpc3QgPSAocGwpID0+IHBsLmxlbmd0aCA+PSAxO1xuY29uc3QgaXNHbG9iTGlzdCA9IChnbCkgPT4gZ2wubGVuZ3RoID49IDE7XG4vKipcbiAqIEFuIGltbXV0YWJsZS1pc2ggdmlldyBvbiBhbiBhcnJheSBvZiBnbG9iIHBhcnRzIGFuZCB0aGVpciBwYXJzZWRcbiAqIHJlc3VsdHNcbiAqL1xuY2xhc3MgUGF0dGVybiB7XG4gICAgI3BhdHRlcm5MaXN0O1xuICAgICNnbG9iTGlzdDtcbiAgICAjaW5kZXg7XG4gICAgbGVuZ3RoO1xuICAgICNwbGF0Zm9ybTtcbiAgICAjcmVzdDtcbiAgICAjZ2xvYlN0cmluZztcbiAgICAjaXNEcml2ZTtcbiAgICAjaXNVTkM7XG4gICAgI2lzQWJzb2x1dGU7XG4gICAgI2ZvbGxvd0dsb2JzdGFyID0gdHJ1ZTtcbiAgICBjb25zdHJ1Y3RvcihwYXR0ZXJuTGlzdCwgZ2xvYkxpc3QsIGluZGV4LCBwbGF0Zm9ybSkge1xuICAgICAgICBpZiAoIWlzUGF0dGVybkxpc3QocGF0dGVybkxpc3QpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdlbXB0eSBwYXR0ZXJuIGxpc3QnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzR2xvYkxpc3QoZ2xvYkxpc3QpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdlbXB0eSBnbG9iIGxpc3QnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZ2xvYkxpc3QubGVuZ3RoICE9PSBwYXR0ZXJuTGlzdC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ21pc21hdGNoZWQgcGF0dGVybiBsaXN0IGFuZCBnbG9iIGxpc3QgbGVuZ3RocycpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubGVuZ3RoID0gcGF0dGVybkxpc3QubGVuZ3RoO1xuICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbmRleCBvdXQgb2YgcmFuZ2UnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiNwYXR0ZXJuTGlzdCA9IHBhdHRlcm5MaXN0O1xuICAgICAgICB0aGlzLiNnbG9iTGlzdCA9IGdsb2JMaXN0O1xuICAgICAgICB0aGlzLiNpbmRleCA9IGluZGV4O1xuICAgICAgICB0aGlzLiNwbGF0Zm9ybSA9IHBsYXRmb3JtO1xuICAgICAgICAvLyBub3JtYWxpemUgcm9vdCBlbnRyaWVzIG9mIGFic29sdXRlIHBhdHRlcm5zIG9uIGluaXRpYWwgY3JlYXRpb24uXG4gICAgICAgIGlmICh0aGlzLiNpbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgLy8gYzogPT4gWydjOi8nXVxuICAgICAgICAgICAgLy8gQzovID0+IFsnQzovJ11cbiAgICAgICAgICAgIC8vIEM6L3ggPT4gWydDOi8nLCAneCddXG4gICAgICAgICAgICAvLyAvL2hvc3Qvc2hhcmUgPT4gWycvL2hvc3Qvc2hhcmUvJ11cbiAgICAgICAgICAgIC8vIC8vaG9zdC9zaGFyZS8gPT4gWycvL2hvc3Qvc2hhcmUvJ11cbiAgICAgICAgICAgIC8vIC8vaG9zdC9zaGFyZS94ID0+IFsnLy9ob3N0L3NoYXJlLycsICd4J11cbiAgICAgICAgICAgIC8vIC9ldGMgPT4gWycvJywgJ2V0YyddXG4gICAgICAgICAgICAvLyAvID0+IFsnLyddXG4gICAgICAgICAgICBpZiAodGhpcy5pc1VOQygpKSB7XG4gICAgICAgICAgICAgICAgLy8gJycgLyAnJyAvICdob3N0JyAvICdzaGFyZSdcbiAgICAgICAgICAgICAgICBjb25zdCBbcDAsIHAxLCBwMiwgcDMsIC4uLnByZXN0XSA9IHRoaXMuI3BhdHRlcm5MaXN0O1xuICAgICAgICAgICAgICAgIGNvbnN0IFtnMCwgZzEsIGcyLCBnMywgLi4uZ3Jlc3RdID0gdGhpcy4jZ2xvYkxpc3Q7XG4gICAgICAgICAgICAgICAgaWYgKHByZXN0WzBdID09PSAnJykge1xuICAgICAgICAgICAgICAgICAgICAvLyBlbmRzIGluIC9cbiAgICAgICAgICAgICAgICAgICAgcHJlc3Quc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgZ3Jlc3Quc2hpZnQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcCA9IFtwMCwgcDEsIHAyLCBwMywgJyddLmpvaW4oJy8nKTtcbiAgICAgICAgICAgICAgICBjb25zdCBnID0gW2cwLCBnMSwgZzIsIGczLCAnJ10uam9pbignLycpO1xuICAgICAgICAgICAgICAgIHRoaXMuI3BhdHRlcm5MaXN0ID0gW3AsIC4uLnByZXN0XTtcbiAgICAgICAgICAgICAgICB0aGlzLiNnbG9iTGlzdCA9IFtnLCAuLi5ncmVzdF07XG4gICAgICAgICAgICAgICAgdGhpcy5sZW5ndGggPSB0aGlzLiNwYXR0ZXJuTGlzdC5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLmlzRHJpdmUoKSB8fCB0aGlzLmlzQWJzb2x1dGUoKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IFtwMSwgLi4ucHJlc3RdID0gdGhpcy4jcGF0dGVybkxpc3Q7XG4gICAgICAgICAgICAgICAgY29uc3QgW2cxLCAuLi5ncmVzdF0gPSB0aGlzLiNnbG9iTGlzdDtcbiAgICAgICAgICAgICAgICBpZiAocHJlc3RbMF0gPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGVuZHMgaW4gL1xuICAgICAgICAgICAgICAgICAgICBwcmVzdC5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICBncmVzdC5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBwID0gcDEgKyAnLyc7XG4gICAgICAgICAgICAgICAgY29uc3QgZyA9IGcxICsgJy8nO1xuICAgICAgICAgICAgICAgIHRoaXMuI3BhdHRlcm5MaXN0ID0gW3AsIC4uLnByZXN0XTtcbiAgICAgICAgICAgICAgICB0aGlzLiNnbG9iTGlzdCA9IFtnLCAuLi5ncmVzdF07XG4gICAgICAgICAgICAgICAgdGhpcy5sZW5ndGggPSB0aGlzLiNwYXR0ZXJuTGlzdC5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGZpcnN0IGVudHJ5IGluIHRoZSBwYXJzZWQgbGlzdCBvZiBwYXR0ZXJuc1xuICAgICAqL1xuICAgIHBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNwYXR0ZXJuTGlzdFt0aGlzLiNpbmRleF07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHRydWUgb2YgaWYgcGF0dGVybigpIHJldHVybnMgYSBzdHJpbmdcbiAgICAgKi9cbiAgICBpc1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB0aGlzLiNwYXR0ZXJuTGlzdFt0aGlzLiNpbmRleF0gPT09ICdzdHJpbmcnO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiB0cnVlIG9mIGlmIHBhdHRlcm4oKSByZXR1cm5zIEdMT0JTVEFSXG4gICAgICovXG4gICAgaXNHbG9ic3RhcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3BhdHRlcm5MaXN0W3RoaXMuI2luZGV4XSA9PT0gbWluaW1hdGNoXzEuR0xPQlNUQVI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHRydWUgaWYgcGF0dGVybigpIHJldHVybnMgYSByZWdleHBcbiAgICAgKi9cbiAgICBpc1JlZ0V4cCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3BhdHRlcm5MaXN0W3RoaXMuI2luZGV4XSBpbnN0YW5jZW9mIFJlZ0V4cDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIC8tam9pbmVkIHNldCBvZiBnbG9iIHBhcnRzIHRoYXQgbWFrZSB1cCB0aGlzIHBhdHRlcm5cbiAgICAgKi9cbiAgICBnbG9iU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuI2dsb2JTdHJpbmcgPVxuICAgICAgICAgICAgdGhpcy4jZ2xvYlN0cmluZyB8fFxuICAgICAgICAgICAgICAgICh0aGlzLiNpbmRleCA9PT0gMCA/XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNBYnNvbHV0ZSgpID9cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuI2dsb2JMaXN0WzBdICsgdGhpcy4jZ2xvYkxpc3Quc2xpY2UoMSkuam9pbignLycpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuI2dsb2JMaXN0LmpvaW4oJy8nKVxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuI2dsb2JMaXN0LnNsaWNlKHRoaXMuI2luZGV4KS5qb2luKCcvJykpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogdHJ1ZSBpZiB0aGVyZSBhcmUgbW9yZSBwYXR0ZXJuIHBhcnRzIGFmdGVyIHRoaXMgb25lXG4gICAgICovXG4gICAgaGFzTW9yZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGVuZ3RoID4gdGhpcy4jaW5kZXggKyAxO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzdCBvZiB0aGUgcGF0dGVybiBhZnRlciB0aGlzIHBhcnQsIG9yIG51bGwgaWYgdGhpcyBpcyB0aGUgZW5kXG4gICAgICovXG4gICAgcmVzdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuI3Jlc3QgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiNyZXN0O1xuICAgICAgICBpZiAoIXRoaXMuaGFzTW9yZSgpKVxuICAgICAgICAgICAgcmV0dXJuICh0aGlzLiNyZXN0ID0gbnVsbCk7XG4gICAgICAgIHRoaXMuI3Jlc3QgPSBuZXcgUGF0dGVybih0aGlzLiNwYXR0ZXJuTGlzdCwgdGhpcy4jZ2xvYkxpc3QsIHRoaXMuI2luZGV4ICsgMSwgdGhpcy4jcGxhdGZvcm0pO1xuICAgICAgICB0aGlzLiNyZXN0LiNpc0Fic29sdXRlID0gdGhpcy4jaXNBYnNvbHV0ZTtcbiAgICAgICAgdGhpcy4jcmVzdC4jaXNVTkMgPSB0aGlzLiNpc1VOQztcbiAgICAgICAgdGhpcy4jcmVzdC4jaXNEcml2ZSA9IHRoaXMuI2lzRHJpdmU7XG4gICAgICAgIHJldHVybiB0aGlzLiNyZXN0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiB0cnVlIGlmIHRoZSBwYXR0ZXJuIHJlcHJlc2VudHMgYSAvL3VuYy9wYXRoLyBvbiB3aW5kb3dzXG4gICAgICovXG4gICAgaXNVTkMoKSB7XG4gICAgICAgIGNvbnN0IHBsID0gdGhpcy4jcGF0dGVybkxpc3Q7XG4gICAgICAgIHJldHVybiB0aGlzLiNpc1VOQyAhPT0gdW5kZWZpbmVkID9cbiAgICAgICAgICAgIHRoaXMuI2lzVU5DXG4gICAgICAgICAgICA6ICh0aGlzLiNpc1VOQyA9XG4gICAgICAgICAgICAgICAgdGhpcy4jcGxhdGZvcm0gPT09ICd3aW4zMicgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jaW5kZXggPT09IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgcGxbMF0gPT09ICcnICYmXG4gICAgICAgICAgICAgICAgICAgIHBsWzFdID09PSAnJyAmJlxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgcGxbMl0gPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAgICAgICAgICEhcGxbMl0gJiZcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHBsWzNdID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgICAgICAgICAhIXBsWzNdKTtcbiAgICB9XG4gICAgLy8gcGF0dGVybiBsaWtlIEM6Ly4uLlxuICAgIC8vIHNwbGl0ID0gWydDOicsIC4uLl1cbiAgICAvLyBYWFg6IHdvdWxkIGJlIG5pY2UgdG8gaGFuZGxlIHBhdHRlcm5zIGxpa2UgYGM6KmAgdG8gdGVzdCB0aGUgY3dkXG4gICAgLy8gaW4gYzogZm9yICosIGJ1dCBJIGRvbid0IGtub3cgb2YgYSB3YXkgdG8gZXZlbiBmaWd1cmUgb3V0IHdoYXQgdGhhdFxuICAgIC8vIGN3ZCBpcyB3aXRob3V0IGFjdHVhbGx5IGNoZGlyJ2luZyBpbnRvIGl0P1xuICAgIC8qKlxuICAgICAqIFRydWUgaWYgdGhlIHBhdHRlcm4gc3RhcnRzIHdpdGggYSBkcml2ZSBsZXR0ZXIgb24gV2luZG93c1xuICAgICAqL1xuICAgIGlzRHJpdmUoKSB7XG4gICAgICAgIGNvbnN0IHBsID0gdGhpcy4jcGF0dGVybkxpc3Q7XG4gICAgICAgIHJldHVybiB0aGlzLiNpc0RyaXZlICE9PSB1bmRlZmluZWQgP1xuICAgICAgICAgICAgdGhpcy4jaXNEcml2ZVxuICAgICAgICAgICAgOiAodGhpcy4jaXNEcml2ZSA9XG4gICAgICAgICAgICAgICAgdGhpcy4jcGxhdGZvcm0gPT09ICd3aW4zMicgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jaW5kZXggPT09IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sZW5ndGggPiAxICYmXG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBwbFswXSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgICAgICAgICAgL15bYS16XTokL2kudGVzdChwbFswXSkpO1xuICAgIH1cbiAgICAvLyBwYXR0ZXJuID0gJy8nIG9yICcvLi4uJyBvciAnL3gvLi4uJ1xuICAgIC8vIHNwbGl0ID0gWycnLCAnJ10gb3IgWycnLCAuLi5dIG9yIFsnJywgJ3gnLCAuLi5dXG4gICAgLy8gRHJpdmUgYW5kIFVOQyBib3RoIGNvbnNpZGVyZWQgYWJzb2x1dGUgb24gd2luZG93c1xuICAgIC8qKlxuICAgICAqIFRydWUgaWYgdGhlIHBhdHRlcm4gaXMgcm9vdGVkIG9uIGFuIGFic29sdXRlIHBhdGhcbiAgICAgKi9cbiAgICBpc0Fic29sdXRlKCkge1xuICAgICAgICBjb25zdCBwbCA9IHRoaXMuI3BhdHRlcm5MaXN0O1xuICAgICAgICByZXR1cm4gdGhpcy4jaXNBYnNvbHV0ZSAhPT0gdW5kZWZpbmVkID9cbiAgICAgICAgICAgIHRoaXMuI2lzQWJzb2x1dGVcbiAgICAgICAgICAgIDogKHRoaXMuI2lzQWJzb2x1dGUgPVxuICAgICAgICAgICAgICAgIChwbFswXSA9PT0gJycgJiYgcGwubGVuZ3RoID4gMSkgfHxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0RyaXZlKCkgfHxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1VOQygpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogY29uc3VtZSB0aGUgcm9vdCBvZiB0aGUgcGF0dGVybiwgYW5kIHJldHVybiBpdFxuICAgICAqL1xuICAgIHJvb3QoKSB7XG4gICAgICAgIGNvbnN0IHAgPSB0aGlzLiNwYXR0ZXJuTGlzdFswXTtcbiAgICAgICAgcmV0dXJuICh0eXBlb2YgcCA9PT0gJ3N0cmluZycgJiYgdGhpcy5pc0Fic29sdXRlKCkgJiYgdGhpcy4jaW5kZXggPT09IDApID9cbiAgICAgICAgICAgIHBcbiAgICAgICAgICAgIDogJyc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENoZWNrIHRvIHNlZSBpZiB0aGUgY3VycmVudCBnbG9ic3RhciBwYXR0ZXJuIGlzIGFsbG93ZWQgdG8gZm9sbG93XG4gICAgICogYSBzeW1ib2xpYyBsaW5rLlxuICAgICAqL1xuICAgIGNoZWNrRm9sbG93R2xvYnN0YXIoKSB7XG4gICAgICAgIHJldHVybiAhKHRoaXMuI2luZGV4ID09PSAwIHx8XG4gICAgICAgICAgICAhdGhpcy5pc0dsb2JzdGFyKCkgfHxcbiAgICAgICAgICAgICF0aGlzLiNmb2xsb3dHbG9ic3Rhcik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1hcmsgdGhhdCB0aGUgY3VycmVudCBnbG9ic3RhciBwYXR0ZXJuIGlzIGZvbGxvd2luZyBhIHN5bWJvbGljIGxpbmtcbiAgICAgKi9cbiAgICBtYXJrRm9sbG93R2xvYnN0YXIoKSB7XG4gICAgICAgIGlmICh0aGlzLiNpbmRleCA9PT0gMCB8fCAhdGhpcy5pc0dsb2JzdGFyKCkgfHwgIXRoaXMuI2ZvbGxvd0dsb2JzdGFyKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB0aGlzLiNmb2xsb3dHbG9ic3RhciA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG59XG5leHBvcnRzLlBhdHRlcm4gPSBQYXR0ZXJuO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGF0dGVybi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gZ2l2ZSBpdCBhIHBhdHRlcm4sIGFuZCBpdCdsbCBiZSBhYmxlIHRvIHRlbGwgeW91IGlmXG4vLyBhIGdpdmVuIHBhdGggc2hvdWxkIGJlIGlnbm9yZWQuXG4vLyBJZ25vcmluZyBhIHBhdGggaWdub3JlcyBpdHMgY2hpbGRyZW4gaWYgdGhlIHBhdHRlcm4gZW5kcyBpbiAvKipcbi8vIElnbm9yZXMgYXJlIGFsd2F5cyBwYXJzZWQgaW4gZG90OnRydWUgbW9kZVxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5JZ25vcmUgPSB2b2lkIDA7XG5jb25zdCBtaW5pbWF0Y2hfMSA9IHJlcXVpcmUoXCJtaW5pbWF0Y2hcIik7XG5jb25zdCBwYXR0ZXJuX2pzXzEgPSByZXF1aXJlKFwiLi9wYXR0ZXJuLmpzXCIpO1xuY29uc3QgZGVmYXVsdFBsYXRmb3JtID0gKHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JyAmJlxuICAgIHByb2Nlc3MgJiZcbiAgICB0eXBlb2YgcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3N0cmluZycpID9cbiAgICBwcm9jZXNzLnBsYXRmb3JtXG4gICAgOiAnbGludXgnO1xuLyoqXG4gKiBDbGFzcyB1c2VkIHRvIHByb2Nlc3MgaWdub3JlZCBwYXR0ZXJuc1xuICovXG5jbGFzcyBJZ25vcmUge1xuICAgIHJlbGF0aXZlO1xuICAgIHJlbGF0aXZlQ2hpbGRyZW47XG4gICAgYWJzb2x1dGU7XG4gICAgYWJzb2x1dGVDaGlsZHJlbjtcbiAgICBwbGF0Zm9ybTtcbiAgICBtbW9wdHM7XG4gICAgY29uc3RydWN0b3IoaWdub3JlZCwgeyBub2JyYWNlLCBub2Nhc2UsIG5vZXh0LCBub2dsb2JzdGFyLCBwbGF0Zm9ybSA9IGRlZmF1bHRQbGF0Zm9ybSwgfSkge1xuICAgICAgICB0aGlzLnJlbGF0aXZlID0gW107XG4gICAgICAgIHRoaXMuYWJzb2x1dGUgPSBbXTtcbiAgICAgICAgdGhpcy5yZWxhdGl2ZUNoaWxkcmVuID0gW107XG4gICAgICAgIHRoaXMuYWJzb2x1dGVDaGlsZHJlbiA9IFtdO1xuICAgICAgICB0aGlzLnBsYXRmb3JtID0gcGxhdGZvcm07XG4gICAgICAgIHRoaXMubW1vcHRzID0ge1xuICAgICAgICAgICAgZG90OiB0cnVlLFxuICAgICAgICAgICAgbm9icmFjZSxcbiAgICAgICAgICAgIG5vY2FzZSxcbiAgICAgICAgICAgIG5vZXh0LFxuICAgICAgICAgICAgbm9nbG9ic3RhcixcbiAgICAgICAgICAgIG9wdGltaXphdGlvbkxldmVsOiAyLFxuICAgICAgICAgICAgcGxhdGZvcm0sXG4gICAgICAgICAgICBub2NvbW1lbnQ6IHRydWUsXG4gICAgICAgICAgICBub25lZ2F0ZTogdHJ1ZSxcbiAgICAgICAgfTtcbiAgICAgICAgZm9yIChjb25zdCBpZ24gb2YgaWdub3JlZClcbiAgICAgICAgICAgIHRoaXMuYWRkKGlnbik7XG4gICAgfVxuICAgIGFkZChpZ24pIHtcbiAgICAgICAgLy8gdGhpcyBpcyBhIGxpdHRsZSB3ZWlyZCwgYnV0IGl0IGdpdmVzIHVzIGEgY2xlYW4gc2V0IG9mIG9wdGltaXplZFxuICAgICAgICAvLyBtaW5pbWF0Y2ggbWF0Y2hlcnMsIHdpdGhvdXQgZ2V0dGluZyB0cmlwcGVkIHVwIGlmIG9uZSBvZiB0aGVtXG4gICAgICAgIC8vIGVuZHMgaW4gLyoqIGluc2lkZSBhIGJyYWNlIHNlY3Rpb24sIGFuZCBpdCdzIG9ubHkgaW5lZmZpY2llbnQgYXRcbiAgICAgICAgLy8gdGhlIHN0YXJ0IG9mIHRoZSB3YWxrLCBub3QgYWxvbmcgaXQuXG4gICAgICAgIC8vIEl0J2QgYmUgbmljZSBpZiB0aGUgUGF0dGVybiBjbGFzcyBqdXN0IGhhZCBhIC50ZXN0KCkgbWV0aG9kLCBidXRcbiAgICAgICAgLy8gaGFuZGxpbmcgZ2xvYnN0YXJzIGlzIGEgYml0IG9mIGEgcGl0YSwgYW5kIHRoYXQgY29kZSBhbHJlYWR5IGxpdmVzXG4gICAgICAgIC8vIGluIG1pbmltYXRjaCBhbnl3YXkuXG4gICAgICAgIC8vIEFub3RoZXIgd2F5IHdvdWxkIGJlIGlmIG1heWJlIE1pbmltYXRjaCBjb3VsZCB0YWtlIGl0cyBzZXQvZ2xvYlBhcnRzXG4gICAgICAgIC8vIGFzIGFuIG9wdGlvbiwgYW5kIHRoZW4gd2UgY291bGQgYXQgbGVhc3QganVzdCB1c2UgUGF0dGVybiB0byB0ZXN0XG4gICAgICAgIC8vIGZvciBhYnNvbHV0ZS1uZXNzLlxuICAgICAgICAvLyBZZXQgYW5vdGhlciB3YXksIE1pbmltYXRjaCBjb3VsZCB0YWtlIGFuIGFycmF5IG9mIGdsb2Igc3RyaW5ncywgYW5kXG4gICAgICAgIC8vIGEgY3dkIG9wdGlvbiwgYW5kIGRvIHRoZSByaWdodCB0aGluZy5cbiAgICAgICAgY29uc3QgbW0gPSBuZXcgbWluaW1hdGNoXzEuTWluaW1hdGNoKGlnbiwgdGhpcy5tbW9wdHMpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1tLnNldC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gbW0uc2V0W2ldO1xuICAgICAgICAgICAgY29uc3QgZ2xvYlBhcnRzID0gbW0uZ2xvYlBhcnRzW2ldO1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICBpZiAoIXBhcnNlZCB8fCAhZ2xvYlBhcnRzKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHBhdHRlcm4gb2JqZWN0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBzdHJpcCBvZmYgbGVhZGluZyAuLyBwb3J0aW9uc1xuICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2lzYWFjcy9ub2RlLWdsb2IvaXNzdWVzLzU3MFxuICAgICAgICAgICAgd2hpbGUgKHBhcnNlZFswXSA9PT0gJy4nICYmIGdsb2JQYXJ0c1swXSA9PT0gJy4nKSB7XG4gICAgICAgICAgICAgICAgcGFyc2VkLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgZ2xvYlBhcnRzLnNoaWZ0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgY29uc3QgcCA9IG5ldyBwYXR0ZXJuX2pzXzEuUGF0dGVybihwYXJzZWQsIGdsb2JQYXJ0cywgMCwgdGhpcy5wbGF0Zm9ybSk7XG4gICAgICAgICAgICBjb25zdCBtID0gbmV3IG1pbmltYXRjaF8xLk1pbmltYXRjaChwLmdsb2JTdHJpbmcoKSwgdGhpcy5tbW9wdHMpO1xuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBnbG9iUGFydHNbZ2xvYlBhcnRzLmxlbmd0aCAtIDFdID09PSAnKionO1xuICAgICAgICAgICAgY29uc3QgYWJzb2x1dGUgPSBwLmlzQWJzb2x1dGUoKTtcbiAgICAgICAgICAgIGlmIChhYnNvbHV0ZSlcbiAgICAgICAgICAgICAgICB0aGlzLmFic29sdXRlLnB1c2gobSk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhpcy5yZWxhdGl2ZS5wdXNoKG0pO1xuICAgICAgICAgICAgaWYgKGNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFic29sdXRlKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFic29sdXRlQ2hpbGRyZW4ucHVzaChtKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVsYXRpdmVDaGlsZHJlbi5wdXNoKG0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGlnbm9yZWQocCkge1xuICAgICAgICBjb25zdCBmdWxscGF0aCA9IHAuZnVsbHBhdGgoKTtcbiAgICAgICAgY29uc3QgZnVsbHBhdGhzID0gYCR7ZnVsbHBhdGh9L2A7XG4gICAgICAgIGNvbnN0IHJlbGF0aXZlID0gcC5yZWxhdGl2ZSgpIHx8ICcuJztcbiAgICAgICAgY29uc3QgcmVsYXRpdmVzID0gYCR7cmVsYXRpdmV9L2A7XG4gICAgICAgIGZvciAoY29uc3QgbSBvZiB0aGlzLnJlbGF0aXZlKSB7XG4gICAgICAgICAgICBpZiAobS5tYXRjaChyZWxhdGl2ZSkgfHwgbS5tYXRjaChyZWxhdGl2ZXMpKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgbSBvZiB0aGlzLmFic29sdXRlKSB7XG4gICAgICAgICAgICBpZiAobS5tYXRjaChmdWxscGF0aCkgfHwgbS5tYXRjaChmdWxscGF0aHMpKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY2hpbGRyZW5JZ25vcmVkKHApIHtcbiAgICAgICAgY29uc3QgZnVsbHBhdGggPSBwLmZ1bGxwYXRoKCkgKyAnLyc7XG4gICAgICAgIGNvbnN0IHJlbGF0aXZlID0gKHAucmVsYXRpdmUoKSB8fCAnLicpICsgJy8nO1xuICAgICAgICBmb3IgKGNvbnN0IG0gb2YgdGhpcy5yZWxhdGl2ZUNoaWxkcmVuKSB7XG4gICAgICAgICAgICBpZiAobS5tYXRjaChyZWxhdGl2ZSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBtIG9mIHRoaXMuYWJzb2x1dGVDaGlsZHJlbikge1xuICAgICAgICAgICAgaWYgKG0ubWF0Y2goZnVsbHBhdGgpKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5leHBvcnRzLklnbm9yZSA9IElnbm9yZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlnbm9yZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gc3luY2hyb25vdXMgdXRpbGl0eSBmb3IgZmlsdGVyaW5nIGVudHJpZXMgYW5kIGNhbGN1bGF0aW5nIHN1YndhbGtzXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlByb2Nlc3NvciA9IGV4cG9ydHMuU3ViV2Fsa3MgPSBleHBvcnRzLk1hdGNoUmVjb3JkID0gZXhwb3J0cy5IYXNXYWxrZWRDYWNoZSA9IHZvaWQgMDtcbmNvbnN0IG1pbmltYXRjaF8xID0gcmVxdWlyZShcIm1pbmltYXRjaFwiKTtcbi8qKlxuICogQSBjYWNoZSBvZiB3aGljaCBwYXR0ZXJucyBoYXZlIGJlZW4gcHJvY2Vzc2VkIGZvciBhIGdpdmVuIFBhdGhcbiAqL1xuY2xhc3MgSGFzV2Fsa2VkQ2FjaGUge1xuICAgIHN0b3JlO1xuICAgIGNvbnN0cnVjdG9yKHN0b3JlID0gbmV3IE1hcCgpKSB7XG4gICAgICAgIHRoaXMuc3RvcmUgPSBzdG9yZTtcbiAgICB9XG4gICAgY29weSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBIYXNXYWxrZWRDYWNoZShuZXcgTWFwKHRoaXMuc3RvcmUpKTtcbiAgICB9XG4gICAgaGFzV2Fsa2VkKHRhcmdldCwgcGF0dGVybikge1xuICAgICAgICByZXR1cm4gdGhpcy5zdG9yZS5nZXQodGFyZ2V0LmZ1bGxwYXRoKCkpPy5oYXMocGF0dGVybi5nbG9iU3RyaW5nKCkpO1xuICAgIH1cbiAgICBzdG9yZVdhbGtlZCh0YXJnZXQsIHBhdHRlcm4pIHtcbiAgICAgICAgY29uc3QgZnVsbHBhdGggPSB0YXJnZXQuZnVsbHBhdGgoKTtcbiAgICAgICAgY29uc3QgY2FjaGVkID0gdGhpcy5zdG9yZS5nZXQoZnVsbHBhdGgpO1xuICAgICAgICBpZiAoY2FjaGVkKVxuICAgICAgICAgICAgY2FjaGVkLmFkZChwYXR0ZXJuLmdsb2JTdHJpbmcoKSk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuc2V0KGZ1bGxwYXRoLCBuZXcgU2V0KFtwYXR0ZXJuLmdsb2JTdHJpbmcoKV0pKTtcbiAgICB9XG59XG5leHBvcnRzLkhhc1dhbGtlZENhY2hlID0gSGFzV2Fsa2VkQ2FjaGU7XG4vKipcbiAqIEEgcmVjb3JkIG9mIHdoaWNoIHBhdGhzIGhhdmUgYmVlbiBtYXRjaGVkIGluIGEgZ2l2ZW4gd2FsayBzdGVwLFxuICogYW5kIHdoZXRoZXIgdGhleSBvbmx5IGFyZSBjb25zaWRlcmVkIGEgbWF0Y2ggaWYgdGhleSBhcmUgYSBkaXJlY3RvcnksXG4gKiBhbmQgd2hldGhlciB0aGVpciBhYnNvbHV0ZSBvciByZWxhdGl2ZSBwYXRoIHNob3VsZCBiZSByZXR1cm5lZC5cbiAqL1xuY2xhc3MgTWF0Y2hSZWNvcmQge1xuICAgIHN0b3JlID0gbmV3IE1hcCgpO1xuICAgIGFkZCh0YXJnZXQsIGFic29sdXRlLCBpZkRpcikge1xuICAgICAgICBjb25zdCBuID0gKGFic29sdXRlID8gMiA6IDApIHwgKGlmRGlyID8gMSA6IDApO1xuICAgICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5zdG9yZS5nZXQodGFyZ2V0KTtcbiAgICAgICAgdGhpcy5zdG9yZS5zZXQodGFyZ2V0LCBjdXJyZW50ID09PSB1bmRlZmluZWQgPyBuIDogbiAmIGN1cnJlbnQpO1xuICAgIH1cbiAgICAvLyBtYXRjaCwgYWJzb2x1dGUsIGlmZGlyXG4gICAgZW50cmllcygpIHtcbiAgICAgICAgcmV0dXJuIFsuLi50aGlzLnN0b3JlLmVudHJpZXMoKV0ubWFwKChbcGF0aCwgbl0pID0+IFtcbiAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICAhIShuICYgMiksXG4gICAgICAgICAgICAhIShuICYgMSksXG4gICAgICAgIF0pO1xuICAgIH1cbn1cbmV4cG9ydHMuTWF0Y2hSZWNvcmQgPSBNYXRjaFJlY29yZDtcbi8qKlxuICogQSBjb2xsZWN0aW9uIG9mIHBhdHRlcm5zIHRoYXQgbXVzdCBiZSBwcm9jZXNzZWQgaW4gYSBzdWJzZXF1ZW50IHN0ZXBcbiAqIGZvciBhIGdpdmVuIHBhdGguXG4gKi9cbmNsYXNzIFN1YldhbGtzIHtcbiAgICBzdG9yZSA9IG5ldyBNYXAoKTtcbiAgICBhZGQodGFyZ2V0LCBwYXR0ZXJuKSB7XG4gICAgICAgIGlmICghdGFyZ2V0LmNhblJlYWRkaXIoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN1YnMgPSB0aGlzLnN0b3JlLmdldCh0YXJnZXQpO1xuICAgICAgICBpZiAoc3Vicykge1xuICAgICAgICAgICAgaWYgKCFzdWJzLmZpbmQocCA9PiBwLmdsb2JTdHJpbmcoKSA9PT0gcGF0dGVybi5nbG9iU3RyaW5nKCkpKSB7XG4gICAgICAgICAgICAgICAgc3Vicy5wdXNoKHBhdHRlcm4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuc2V0KHRhcmdldCwgW3BhdHRlcm5dKTtcbiAgICB9XG4gICAgZ2V0KHRhcmdldCkge1xuICAgICAgICBjb25zdCBzdWJzID0gdGhpcy5zdG9yZS5nZXQodGFyZ2V0KTtcbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIGlmICghc3Vicykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdhdHRlbXB0aW5nIHRvIHdhbGsgdW5rbm93biBwYXRoJyk7XG4gICAgICAgIH1cbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgcmV0dXJuIHN1YnM7XG4gICAgfVxuICAgIGVudHJpZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmtleXMoKS5tYXAoayA9PiBbaywgdGhpcy5zdG9yZS5nZXQoayldKTtcbiAgICB9XG4gICAga2V5cygpIHtcbiAgICAgICAgcmV0dXJuIFsuLi50aGlzLnN0b3JlLmtleXMoKV0uZmlsdGVyKHQgPT4gdC5jYW5SZWFkZGlyKCkpO1xuICAgIH1cbn1cbmV4cG9ydHMuU3ViV2Fsa3MgPSBTdWJXYWxrcztcbi8qKlxuICogVGhlIGNsYXNzIHRoYXQgcHJvY2Vzc2VzIHBhdHRlcm5zIGZvciBhIGdpdmVuIHBhdGguXG4gKlxuICogSGFuZGxlcyBjaGlsZCBlbnRyeSBmaWx0ZXJpbmcsIGFuZCBkZXRlcm1pbmluZyB3aGV0aGVyIGEgcGF0aCdzXG4gKiBkaXJlY3RvcnkgY29udGVudHMgbXVzdCBiZSByZWFkLlxuICovXG5jbGFzcyBQcm9jZXNzb3Ige1xuICAgIGhhc1dhbGtlZENhY2hlO1xuICAgIG1hdGNoZXMgPSBuZXcgTWF0Y2hSZWNvcmQoKTtcbiAgICBzdWJ3YWxrcyA9IG5ldyBTdWJXYWxrcygpO1xuICAgIHBhdHRlcm5zO1xuICAgIGZvbGxvdztcbiAgICBkb3Q7XG4gICAgb3B0cztcbiAgICBjb25zdHJ1Y3RvcihvcHRzLCBoYXNXYWxrZWRDYWNoZSkge1xuICAgICAgICB0aGlzLm9wdHMgPSBvcHRzO1xuICAgICAgICB0aGlzLmZvbGxvdyA9ICEhb3B0cy5mb2xsb3c7XG4gICAgICAgIHRoaXMuZG90ID0gISFvcHRzLmRvdDtcbiAgICAgICAgdGhpcy5oYXNXYWxrZWRDYWNoZSA9XG4gICAgICAgICAgICBoYXNXYWxrZWRDYWNoZSA/IGhhc1dhbGtlZENhY2hlLmNvcHkoKSA6IG5ldyBIYXNXYWxrZWRDYWNoZSgpO1xuICAgIH1cbiAgICBwcm9jZXNzUGF0dGVybnModGFyZ2V0LCBwYXR0ZXJucykge1xuICAgICAgICB0aGlzLnBhdHRlcm5zID0gcGF0dGVybnM7XG4gICAgICAgIGNvbnN0IHByb2Nlc3NpbmdTZXQgPSBwYXR0ZXJucy5tYXAocCA9PiBbdGFyZ2V0LCBwXSk7XG4gICAgICAgIC8vIG1hcCBvZiBwYXRocyB0byB0aGUgbWFnaWMtc3RhcnRpbmcgc3Vid2Fsa3MgdGhleSBuZWVkIHRvIHdhbGtcbiAgICAgICAgLy8gZmlyc3QgaXRlbSBpbiBwYXR0ZXJucyBpcyB0aGUgZmlsdGVyXG4gICAgICAgIGZvciAobGV0IFt0LCBwYXR0ZXJuXSBvZiBwcm9jZXNzaW5nU2V0KSB7XG4gICAgICAgICAgICB0aGlzLmhhc1dhbGtlZENhY2hlLnN0b3JlV2Fsa2VkKHQsIHBhdHRlcm4pO1xuICAgICAgICAgICAgY29uc3Qgcm9vdCA9IHBhdHRlcm4ucm9vdCgpO1xuICAgICAgICAgICAgY29uc3QgYWJzb2x1dGUgPSBwYXR0ZXJuLmlzQWJzb2x1dGUoKSAmJiB0aGlzLm9wdHMuYWJzb2x1dGUgIT09IGZhbHNlO1xuICAgICAgICAgICAgLy8gc3RhcnQgYWJzb2x1dGUgcGF0dGVybnMgYXQgcm9vdFxuICAgICAgICAgICAgaWYgKHJvb3QpIHtcbiAgICAgICAgICAgICAgICB0ID0gdC5yZXNvbHZlKHJvb3QgPT09ICcvJyAmJiB0aGlzLm9wdHMucm9vdCAhPT0gdW5kZWZpbmVkID9cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRzLnJvb3RcbiAgICAgICAgICAgICAgICAgICAgOiByb290KTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN0ID0gcGF0dGVybi5yZXN0KCk7XG4gICAgICAgICAgICAgICAgaWYgKCFyZXN0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2hlcy5hZGQodCwgdHJ1ZSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBhdHRlcm4gPSByZXN0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0LmlzRU5PRU5UKCkpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBsZXQgcDtcbiAgICAgICAgICAgIGxldCByZXN0O1xuICAgICAgICAgICAgbGV0IGNoYW5nZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHdoaWxlICh0eXBlb2YgKHAgPSBwYXR0ZXJuLnBhdHRlcm4oKSkgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAgICAgKHJlc3QgPSBwYXR0ZXJuLnJlc3QoKSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjID0gdC5yZXNvbHZlKHApO1xuICAgICAgICAgICAgICAgIHQgPSBjO1xuICAgICAgICAgICAgICAgIHBhdHRlcm4gPSByZXN0O1xuICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcCA9IHBhdHRlcm4ucGF0dGVybigpO1xuICAgICAgICAgICAgcmVzdCA9IHBhdHRlcm4ucmVzdCgpO1xuICAgICAgICAgICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5oYXNXYWxrZWRDYWNoZS5oYXNXYWxrZWQodCwgcGF0dGVybikpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuaGFzV2Fsa2VkQ2FjaGUuc3RvcmVXYWxrZWQodCwgcGF0dGVybik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBub3cgd2UgaGF2ZSBlaXRoZXIgYSBmaW5hbCBzdHJpbmcgZm9yIGEga25vd24gZW50cnksXG4gICAgICAgICAgICAvLyBtb3JlIHN0cmluZ3MgZm9yIGFuIHVua25vd24gZW50cnksXG4gICAgICAgICAgICAvLyBvciBhIHBhdHRlcm4gc3RhcnRpbmcgd2l0aCBtYWdpYywgbW91bnRlZCBvbiB0LlxuICAgICAgICAgICAgaWYgKHR5cGVvZiBwID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIC8vIG11c3Qgbm90IGJlIGZpbmFsIGVudHJ5LCBvdGhlcndpc2Ugd2Ugd291bGQgaGF2ZVxuICAgICAgICAgICAgICAgIC8vIGNvbmNhdGVuYXRlZCBpdCBlYXJsaWVyLlxuICAgICAgICAgICAgICAgIGNvbnN0IGlmRGlyID0gcCA9PT0gJy4uJyB8fCBwID09PSAnJyB8fCBwID09PSAnLic7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXRjaGVzLmFkZCh0LnJlc29sdmUocCksIGFic29sdXRlLCBpZkRpcik7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChwID09PSBtaW5pbWF0Y2hfMS5HTE9CU1RBUikge1xuICAgICAgICAgICAgICAgIC8vIGlmIG5vIHJlc3QsIG1hdGNoIGFuZCBzdWJ3YWxrIHBhdHRlcm5cbiAgICAgICAgICAgICAgICAvLyBpZiByZXN0LCBwcm9jZXNzIHJlc3QgYW5kIHN1YndhbGsgcGF0dGVyblxuICAgICAgICAgICAgICAgIC8vIGlmIGl0J3MgYSBzeW1saW5rLCBidXQgd2UgZGlkbid0IGdldCBoZXJlIGJ5IHdheSBvZiBhXG4gICAgICAgICAgICAgICAgLy8gZ2xvYnN0YXIgbWF0Y2ggKG1lYW5pbmcgaXQncyB0aGUgZmlyc3QgdGltZSBUSElTIGdsb2JzdGFyXG4gICAgICAgICAgICAgICAgLy8gaGFzIHRyYXZlcnNlZCBhIHN5bWxpbmspLCB0aGVuIHdlIGZvbGxvdyBpdC4gT3RoZXJ3aXNlLCBzdG9wLlxuICAgICAgICAgICAgICAgIGlmICghdC5pc1N5bWJvbGljTGluaygpIHx8XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9sbG93IHx8XG4gICAgICAgICAgICAgICAgICAgIHBhdHRlcm4uY2hlY2tGb2xsb3dHbG9ic3RhcigpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3Vid2Fsa3MuYWRkKHQsIHBhdHRlcm4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBycCA9IHJlc3Q/LnBhdHRlcm4oKTtcbiAgICAgICAgICAgICAgICBjb25zdCBycmVzdCA9IHJlc3Q/LnJlc3QoKTtcbiAgICAgICAgICAgICAgICBpZiAoIXJlc3QgfHwgKChycCA9PT0gJycgfHwgcnAgPT09ICcuJykgJiYgIXJyZXN0KSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBvbmx5IEhBUyB0byBiZSBhIGRpciBpZiBpdCBlbmRzIGluICoqLyBvciAqKi8uXG4gICAgICAgICAgICAgICAgICAgIC8vIGJ1dCBlbmRpbmcgaW4gKiogd2lsbCBtYXRjaCBmaWxlcyBhcyB3ZWxsLlxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoZXMuYWRkKHQsIGFic29sdXRlLCBycCA9PT0gJycgfHwgcnAgPT09ICcuJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAocnAgPT09ICcuLicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgd291bGQgbWVhbiB5b3UncmUgbWF0Y2hpbmcgKiovLi4gYXQgdGhlIGZzIHJvb3QsXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmQgbm8gdGhhbmtzLCBJJ20gbm90IGdvbm5hIHRlc3QgdGhhdCBzcGVjaWZpYyBjYXNlLlxuICAgICAgICAgICAgICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0cCA9IHQucGFyZW50IHx8IHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFycmVzdClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoZXMuYWRkKHRwLCBhYnNvbHV0ZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghdGhpcy5oYXNXYWxrZWRDYWNoZS5oYXNXYWxrZWQodHAsIHJyZXN0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3Vid2Fsa3MuYWRkKHRwLCBycmVzdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChwIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdWJ3YWxrcy5hZGQodCwgcGF0dGVybik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHN1YndhbGtUYXJnZXRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdWJ3YWxrcy5rZXlzKCk7XG4gICAgfVxuICAgIGNoaWxkKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb2Nlc3Nvcih0aGlzLm9wdHMsIHRoaXMuaGFzV2Fsa2VkQ2FjaGUpO1xuICAgIH1cbiAgICAvLyByZXR1cm4gYSBuZXcgUHJvY2Vzc29yIGNvbnRhaW5pbmcgdGhlIHN1YndhbGtzIGZvciBlYWNoXG4gICAgLy8gY2hpbGQgZW50cnksIGFuZCBhIHNldCBvZiBtYXRjaGVzLCBhbmRcbiAgICAvLyBhIGhhc1dhbGtlZENhY2hlIHRoYXQncyBhIGNvcHkgb2YgdGhpcyBvbmVcbiAgICAvLyB0aGVuIHdlJ3JlIGdvaW5nIHRvIGNhbGxcbiAgICBmaWx0ZXJFbnRyaWVzKHBhcmVudCwgZW50cmllcykge1xuICAgICAgICBjb25zdCBwYXR0ZXJucyA9IHRoaXMuc3Vid2Fsa3MuZ2V0KHBhcmVudCk7XG4gICAgICAgIC8vIHB1dCBtYXRjaGVzIGFuZCBlbnRyeSB3YWxrcyBpbnRvIHRoZSByZXN1bHRzIHByb2Nlc3NvclxuICAgICAgICBjb25zdCByZXN1bHRzID0gdGhpcy5jaGlsZCgpO1xuICAgICAgICBmb3IgKGNvbnN0IGUgb2YgZW50cmllcykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIHBhdHRlcm5zKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWJzb2x1dGUgPSBwYXR0ZXJuLmlzQWJzb2x1dGUoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwID0gcGF0dGVybi5wYXR0ZXJuKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdCA9IHBhdHRlcm4ucmVzdCgpO1xuICAgICAgICAgICAgICAgIGlmIChwID09PSBtaW5pbWF0Y2hfMS5HTE9CU1RBUikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnRlc3RHbG9ic3RhcihlLCBwYXR0ZXJuLCByZXN0LCBhYnNvbHV0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHAgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy50ZXN0UmVnRXhwKGUsIHAsIHJlc3QsIGFic29sdXRlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMudGVzdFN0cmluZyhlLCBwLCByZXN0LCBhYnNvbHV0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbiAgICB0ZXN0R2xvYnN0YXIoZSwgcGF0dGVybiwgcmVzdCwgYWJzb2x1dGUpIHtcbiAgICAgICAgaWYgKHRoaXMuZG90IHx8ICFlLm5hbWUuc3RhcnRzV2l0aCgnLicpKSB7XG4gICAgICAgICAgICBpZiAoIXBhdHRlcm4uaGFzTW9yZSgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXRjaGVzLmFkZChlLCBhYnNvbHV0ZSwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUuY2FuUmVhZGRpcigpKSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgd2UncmUgaW4gZm9sbG93IG1vZGUgb3IgaXQncyBub3QgYSBzeW1saW5rLCBqdXN0IGtlZXBcbiAgICAgICAgICAgICAgICAvLyB0ZXN0aW5nIHRoZSBzYW1lIHBhdHRlcm4uIElmIHRoZXJlJ3MgbW9yZSBhZnRlciB0aGUgZ2xvYnN0YXIsXG4gICAgICAgICAgICAgICAgLy8gdGhlbiB0aGlzIHN5bWxpbmsgY29uc3VtZXMgdGhlIGdsb2JzdGFyLiBJZiBub3QsIHRoZW4gd2UgY2FuXG4gICAgICAgICAgICAgICAgLy8gZm9sbG93IGF0IG1vc3QgT05FIHN5bWxpbmsgYWxvbmcgdGhlIHdheSwgc28gd2UgbWFyayBpdCwgd2hpY2hcbiAgICAgICAgICAgICAgICAvLyBhbHNvIGNoZWNrcyB0byBlbnN1cmUgdGhhdCBpdCB3YXNuJ3QgYWxyZWFkeSBtYXJrZWQuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZm9sbG93IHx8ICFlLmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJ3YWxrcy5hZGQoZSwgcGF0dGVybik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGUuaXNTeW1ib2xpY0xpbmsoKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdCAmJiBwYXR0ZXJuLmNoZWNrRm9sbG93R2xvYnN0YXIoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJ3YWxrcy5hZGQoZSwgcmVzdCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocGF0dGVybi5tYXJrRm9sbG93R2xvYnN0YXIoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJ3YWxrcy5hZGQoZSwgcGF0dGVybik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgdGhlIE5FWFQgdGhpbmcgbWF0Y2hlcyB0aGlzIGVudHJ5LCB0aGVuIGFsc28gYWRkXG4gICAgICAgIC8vIHRoZSByZXN0LlxuICAgICAgICBpZiAocmVzdCkge1xuICAgICAgICAgICAgY29uc3QgcnAgPSByZXN0LnBhdHRlcm4oKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcnAgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAgICAgLy8gZG90cyBhbmQgZW1wdHkgd2VyZSBoYW5kbGVkIGFscmVhZHlcbiAgICAgICAgICAgICAgICBycCAhPT0gJy4uJyAmJlxuICAgICAgICAgICAgICAgIHJwICE9PSAnJyAmJlxuICAgICAgICAgICAgICAgIHJwICE9PSAnLicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRlc3RTdHJpbmcoZSwgcnAsIHJlc3QucmVzdCgpLCBhYnNvbHV0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChycCA9PT0gJy4uJykge1xuICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICAgICAgICAgIGNvbnN0IGVwID0gZS5wYXJlbnQgfHwgZTtcbiAgICAgICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgICAgIHRoaXMuc3Vid2Fsa3MuYWRkKGVwLCByZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHJwIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50ZXN0UmVnRXhwKGUsIHJwLCByZXN0LnJlc3QoKSwgYWJzb2x1dGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHRlc3RSZWdFeHAoZSwgcCwgcmVzdCwgYWJzb2x1dGUpIHtcbiAgICAgICAgaWYgKCFwLnRlc3QoZS5uYW1lKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKCFyZXN0KSB7XG4gICAgICAgICAgICB0aGlzLm1hdGNoZXMuYWRkKGUsIGFic29sdXRlLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnN1YndhbGtzLmFkZChlLCByZXN0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0ZXN0U3RyaW5nKGUsIHAsIHJlc3QsIGFic29sdXRlKSB7XG4gICAgICAgIC8vIHNob3VsZCBuZXZlciBoYXBwZW4/XG4gICAgICAgIGlmICghZS5pc05hbWVkKHApKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAoIXJlc3QpIHtcbiAgICAgICAgICAgIHRoaXMubWF0Y2hlcy5hZGQoZSwgYWJzb2x1dGUsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3Vid2Fsa3MuYWRkKGUsIHJlc3QpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5Qcm9jZXNzb3IgPSBQcm9jZXNzb3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wcm9jZXNzb3IuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuR2xvYlN0cmVhbSA9IGV4cG9ydHMuR2xvYldhbGtlciA9IGV4cG9ydHMuR2xvYlV0aWwgPSB2b2lkIDA7XG4vKipcbiAqIFNpbmdsZS11c2UgdXRpbGl0eSBjbGFzc2VzIHRvIHByb3ZpZGUgZnVuY3Rpb25hbGl0eSB0byB0aGUge0BsaW5rIEdsb2J9XG4gKiBtZXRob2RzLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuY29uc3QgbWluaXBhc3NfMSA9IHJlcXVpcmUoXCJtaW5pcGFzc1wiKTtcbmNvbnN0IGlnbm9yZV9qc18xID0gcmVxdWlyZShcIi4vaWdub3JlLmpzXCIpO1xuY29uc3QgcHJvY2Vzc29yX2pzXzEgPSByZXF1aXJlKFwiLi9wcm9jZXNzb3IuanNcIik7XG5jb25zdCBtYWtlSWdub3JlID0gKGlnbm9yZSwgb3B0cykgPT4gdHlwZW9mIGlnbm9yZSA9PT0gJ3N0cmluZycgPyBuZXcgaWdub3JlX2pzXzEuSWdub3JlKFtpZ25vcmVdLCBvcHRzKVxuICAgIDogQXJyYXkuaXNBcnJheShpZ25vcmUpID8gbmV3IGlnbm9yZV9qc18xLklnbm9yZShpZ25vcmUsIG9wdHMpXG4gICAgICAgIDogaWdub3JlO1xuLyoqXG4gKiBiYXNpYyB3YWxraW5nIHV0aWxpdGllcyB0aGF0IGFsbCB0aGUgZ2xvYiB3YWxrZXIgdHlwZXMgdXNlXG4gKi9cbmNsYXNzIEdsb2JVdGlsIHtcbiAgICBwYXRoO1xuICAgIHBhdHRlcm5zO1xuICAgIG9wdHM7XG4gICAgc2VlbiA9IG5ldyBTZXQoKTtcbiAgICBwYXVzZWQgPSBmYWxzZTtcbiAgICBhYm9ydGVkID0gZmFsc2U7XG4gICAgI29uUmVzdW1lID0gW107XG4gICAgI2lnbm9yZTtcbiAgICAjc2VwO1xuICAgIHNpZ25hbDtcbiAgICBtYXhEZXB0aDtcbiAgICBpbmNsdWRlQ2hpbGRNYXRjaGVzO1xuICAgIGNvbnN0cnVjdG9yKHBhdHRlcm5zLCBwYXRoLCBvcHRzKSB7XG4gICAgICAgIHRoaXMucGF0dGVybnMgPSBwYXR0ZXJucztcbiAgICAgICAgdGhpcy5wYXRoID0gcGF0aDtcbiAgICAgICAgdGhpcy5vcHRzID0gb3B0cztcbiAgICAgICAgdGhpcy4jc2VwID0gIW9wdHMucG9zaXggJiYgb3B0cy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyA/ICdcXFxcJyA6ICcvJztcbiAgICAgICAgdGhpcy5pbmNsdWRlQ2hpbGRNYXRjaGVzID0gb3B0cy5pbmNsdWRlQ2hpbGRNYXRjaGVzICE9PSBmYWxzZTtcbiAgICAgICAgaWYgKG9wdHMuaWdub3JlIHx8ICF0aGlzLmluY2x1ZGVDaGlsZE1hdGNoZXMpIHtcbiAgICAgICAgICAgIHRoaXMuI2lnbm9yZSA9IG1ha2VJZ25vcmUob3B0cy5pZ25vcmUgPz8gW10sIG9wdHMpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmluY2x1ZGVDaGlsZE1hdGNoZXMgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgdGhpcy4jaWdub3JlLmFkZCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG0gPSAnY2Fubm90IGlnbm9yZSBjaGlsZCBtYXRjaGVzLCBpZ25vcmUgbGFja3MgYWRkKCkgbWV0aG9kLic7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGlnbm9yZSwgYWx3YXlzIHNldCB3aXRoIG1heERlcHRoLCBidXQgaXQncyBvcHRpb25hbCBvbiB0aGVcbiAgICAgICAgLy8gR2xvYk9wdGlvbnMgdHlwZVxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgdGhpcy5tYXhEZXB0aCA9IG9wdHMubWF4RGVwdGggfHwgSW5maW5pdHk7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIGlmIChvcHRzLnNpZ25hbCkge1xuICAgICAgICAgICAgdGhpcy5zaWduYWwgPSBvcHRzLnNpZ25hbDtcbiAgICAgICAgICAgIHRoaXMuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuI29uUmVzdW1lLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAjaWdub3JlZChwYXRoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlZW4uaGFzKHBhdGgpIHx8ICEhdGhpcy4jaWdub3JlPy5pZ25vcmVkPy4ocGF0aCk7XG4gICAgfVxuICAgICNjaGlsZHJlbklnbm9yZWQocGF0aCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLiNpZ25vcmU/LmNoaWxkcmVuSWdub3JlZD8uKHBhdGgpO1xuICAgIH1cbiAgICAvLyBiYWNrcHJlc3N1cmUgbWVjaGFuaXNtXG4gICAgcGF1c2UoKSB7XG4gICAgICAgIHRoaXMucGF1c2VkID0gdHJ1ZTtcbiAgICB9XG4gICAgcmVzdW1lKCkge1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgaWYgKHRoaXMuc2lnbmFsPy5hYm9ydGVkKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICB0aGlzLnBhdXNlZCA9IGZhbHNlO1xuICAgICAgICBsZXQgZm4gPSB1bmRlZmluZWQ7XG4gICAgICAgIHdoaWxlICghdGhpcy5wYXVzZWQgJiYgKGZuID0gdGhpcy4jb25SZXN1bWUuc2hpZnQoKSkpIHtcbiAgICAgICAgICAgIGZuKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgb25SZXN1bWUoZm4pIHtcbiAgICAgICAgaWYgKHRoaXMuc2lnbmFsPy5hYm9ydGVkKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgaWYgKCF0aGlzLnBhdXNlZCkge1xuICAgICAgICAgICAgZm4oKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICB0aGlzLiNvblJlc3VtZS5wdXNoKGZuKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBkbyB0aGUgcmVxdWlzaXRlIHJlYWxwYXRoL3N0YXQgY2hlY2tpbmcsIGFuZCByZXR1cm4gdGhlIHBhdGhcbiAgICAvLyB0byBhZGQgb3IgdW5kZWZpbmVkIHRvIGZpbHRlciBpdCBvdXQuXG4gICAgYXN5bmMgbWF0Y2hDaGVjayhlLCBpZkRpcikge1xuICAgICAgICBpZiAoaWZEaXIgJiYgdGhpcy5vcHRzLm5vZGlyKVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IHJwYztcbiAgICAgICAgaWYgKHRoaXMub3B0cy5yZWFscGF0aCkge1xuICAgICAgICAgICAgcnBjID0gZS5yZWFscGF0aENhY2hlZCgpIHx8IChhd2FpdCBlLnJlYWxwYXRoKCkpO1xuICAgICAgICAgICAgaWYgKCFycGMpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGUgPSBycGM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmVlZFN0YXQgPSBlLmlzVW5rbm93bigpIHx8IHRoaXMub3B0cy5zdGF0O1xuICAgICAgICBjb25zdCBzID0gbmVlZFN0YXQgPyBhd2FpdCBlLmxzdGF0KCkgOiBlO1xuICAgICAgICBpZiAodGhpcy5vcHRzLmZvbGxvdyAmJiB0aGlzLm9wdHMubm9kaXIgJiYgcz8uaXNTeW1ib2xpY0xpbmsoKSkge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gYXdhaXQgcy5yZWFscGF0aCgpO1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICBpZiAodGFyZ2V0ICYmICh0YXJnZXQuaXNVbmtub3duKCkgfHwgdGhpcy5vcHRzLnN0YXQpKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGFyZ2V0LmxzdGF0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLm1hdGNoQ2hlY2tUZXN0KHMsIGlmRGlyKTtcbiAgICB9XG4gICAgbWF0Y2hDaGVja1Rlc3QoZSwgaWZEaXIpIHtcbiAgICAgICAgcmV0dXJuIChlICYmXG4gICAgICAgICAgICAodGhpcy5tYXhEZXB0aCA9PT0gSW5maW5pdHkgfHwgZS5kZXB0aCgpIDw9IHRoaXMubWF4RGVwdGgpICYmXG4gICAgICAgICAgICAoIWlmRGlyIHx8IGUuY2FuUmVhZGRpcigpKSAmJlxuICAgICAgICAgICAgKCF0aGlzLm9wdHMubm9kaXIgfHwgIWUuaXNEaXJlY3RvcnkoKSkgJiZcbiAgICAgICAgICAgICghdGhpcy5vcHRzLm5vZGlyIHx8XG4gICAgICAgICAgICAgICAgIXRoaXMub3B0cy5mb2xsb3cgfHxcbiAgICAgICAgICAgICAgICAhZS5pc1N5bWJvbGljTGluaygpIHx8XG4gICAgICAgICAgICAgICAgIWUucmVhbHBhdGhDYWNoZWQoKT8uaXNEaXJlY3RvcnkoKSkgJiZcbiAgICAgICAgICAgICF0aGlzLiNpZ25vcmVkKGUpKSA/XG4gICAgICAgICAgICBlXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgbWF0Y2hDaGVja1N5bmMoZSwgaWZEaXIpIHtcbiAgICAgICAgaWYgKGlmRGlyICYmIHRoaXMub3B0cy5ub2RpcilcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIGxldCBycGM7XG4gICAgICAgIGlmICh0aGlzLm9wdHMucmVhbHBhdGgpIHtcbiAgICAgICAgICAgIHJwYyA9IGUucmVhbHBhdGhDYWNoZWQoKSB8fCBlLnJlYWxwYXRoU3luYygpO1xuICAgICAgICAgICAgaWYgKCFycGMpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGUgPSBycGM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmVlZFN0YXQgPSBlLmlzVW5rbm93bigpIHx8IHRoaXMub3B0cy5zdGF0O1xuICAgICAgICBjb25zdCBzID0gbmVlZFN0YXQgPyBlLmxzdGF0U3luYygpIDogZTtcbiAgICAgICAgaWYgKHRoaXMub3B0cy5mb2xsb3cgJiYgdGhpcy5vcHRzLm5vZGlyICYmIHM/LmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IHMucmVhbHBhdGhTeW5jKCk7XG4gICAgICAgICAgICBpZiAodGFyZ2V0ICYmICh0YXJnZXQ/LmlzVW5rbm93bigpIHx8IHRoaXMub3B0cy5zdGF0KSkge1xuICAgICAgICAgICAgICAgIHRhcmdldC5sc3RhdFN5bmMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5tYXRjaENoZWNrVGVzdChzLCBpZkRpcik7XG4gICAgfVxuICAgIG1hdGNoRmluaXNoKGUsIGFic29sdXRlKSB7XG4gICAgICAgIGlmICh0aGlzLiNpZ25vcmVkKGUpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAvLyB3ZSBrbm93IHdlIGhhdmUgYW4gaWdub3JlIGlmIHRoaXMgaXMgZmFsc2UsIGJ1dCBUUyBkb2Vzbid0XG4gICAgICAgIGlmICghdGhpcy5pbmNsdWRlQ2hpbGRNYXRjaGVzICYmIHRoaXMuI2lnbm9yZT8uYWRkKSB7XG4gICAgICAgICAgICBjb25zdCBpZ24gPSBgJHtlLnJlbGF0aXZlUG9zaXgoKX0vKipgO1xuICAgICAgICAgICAgdGhpcy4jaWdub3JlLmFkZChpZ24pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFicyA9IHRoaXMub3B0cy5hYnNvbHV0ZSA9PT0gdW5kZWZpbmVkID8gYWJzb2x1dGUgOiB0aGlzLm9wdHMuYWJzb2x1dGU7XG4gICAgICAgIHRoaXMuc2Vlbi5hZGQoZSk7XG4gICAgICAgIGNvbnN0IG1hcmsgPSB0aGlzLm9wdHMubWFyayAmJiBlLmlzRGlyZWN0b3J5KCkgPyB0aGlzLiNzZXAgOiAnJztcbiAgICAgICAgLy8gb2ssIHdlIGhhdmUgd2hhdCB3ZSBuZWVkIVxuICAgICAgICBpZiAodGhpcy5vcHRzLndpdGhGaWxlVHlwZXMpIHtcbiAgICAgICAgICAgIHRoaXMubWF0Y2hFbWl0KGUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGFicykge1xuICAgICAgICAgICAgY29uc3QgYWJzID0gdGhpcy5vcHRzLnBvc2l4ID8gZS5mdWxscGF0aFBvc2l4KCkgOiBlLmZ1bGxwYXRoKCk7XG4gICAgICAgICAgICB0aGlzLm1hdGNoRW1pdChhYnMgKyBtYXJrKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbCA9IHRoaXMub3B0cy5wb3NpeCA/IGUucmVsYXRpdmVQb3NpeCgpIDogZS5yZWxhdGl2ZSgpO1xuICAgICAgICAgICAgY29uc3QgcHJlID0gdGhpcy5vcHRzLmRvdFJlbGF0aXZlICYmICFyZWwuc3RhcnRzV2l0aCgnLi4nICsgdGhpcy4jc2VwKSA/XG4gICAgICAgICAgICAgICAgJy4nICsgdGhpcy4jc2VwXG4gICAgICAgICAgICAgICAgOiAnJztcbiAgICAgICAgICAgIHRoaXMubWF0Y2hFbWl0KCFyZWwgPyAnLicgKyBtYXJrIDogcHJlICsgcmVsICsgbWFyayk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgbWF0Y2goZSwgYWJzb2x1dGUsIGlmRGlyKSB7XG4gICAgICAgIGNvbnN0IHAgPSBhd2FpdCB0aGlzLm1hdGNoQ2hlY2soZSwgaWZEaXIpO1xuICAgICAgICBpZiAocClcbiAgICAgICAgICAgIHRoaXMubWF0Y2hGaW5pc2gocCwgYWJzb2x1dGUpO1xuICAgIH1cbiAgICBtYXRjaFN5bmMoZSwgYWJzb2x1dGUsIGlmRGlyKSB7XG4gICAgICAgIGNvbnN0IHAgPSB0aGlzLm1hdGNoQ2hlY2tTeW5jKGUsIGlmRGlyKTtcbiAgICAgICAgaWYgKHApXG4gICAgICAgICAgICB0aGlzLm1hdGNoRmluaXNoKHAsIGFic29sdXRlKTtcbiAgICB9XG4gICAgd2Fsa0NCKHRhcmdldCwgcGF0dGVybnMsIGNiKSB7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICBpZiAodGhpcy5zaWduYWw/LmFib3J0ZWQpXG4gICAgICAgICAgICBjYigpO1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICB0aGlzLndhbGtDQjIodGFyZ2V0LCBwYXR0ZXJucywgbmV3IHByb2Nlc3Nvcl9qc18xLlByb2Nlc3Nvcih0aGlzLm9wdHMpLCBjYik7XG4gICAgfVxuICAgIHdhbGtDQjIodGFyZ2V0LCBwYXR0ZXJucywgcHJvY2Vzc29yLCBjYikge1xuICAgICAgICBpZiAodGhpcy4jY2hpbGRyZW5JZ25vcmVkKHRhcmdldCkpXG4gICAgICAgICAgICByZXR1cm4gY2IoKTtcbiAgICAgICAgaWYgKHRoaXMuc2lnbmFsPy5hYm9ydGVkKVxuICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgaWYgKHRoaXMucGF1c2VkKSB7XG4gICAgICAgICAgICB0aGlzLm9uUmVzdW1lKCgpID0+IHRoaXMud2Fsa0NCMih0YXJnZXQsIHBhdHRlcm5zLCBwcm9jZXNzb3IsIGNiKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcHJvY2Vzc29yLnByb2Nlc3NQYXR0ZXJucyh0YXJnZXQsIHBhdHRlcm5zKTtcbiAgICAgICAgLy8gZG9uZSBwcm9jZXNzaW5nLiAgYWxsIG9mIHRoZSBhYm92ZSBpcyBzeW5jLCBjYW4gYmUgYWJzdHJhY3RlZCBvdXQuXG4gICAgICAgIC8vIHN1YndhbGtzIGlzIGEgbWFwIG9mIHBhdGhzIHRvIHRoZSBlbnRyeSBmaWx0ZXJzIHRoZXkgbmVlZFxuICAgICAgICAvLyBtYXRjaGVzIGlzIGEgbWFwIG9mIHBhdGhzIHRvIFthYnNvbHV0ZSwgaWZEaXJdIHR1cGxlcy5cbiAgICAgICAgbGV0IHRhc2tzID0gMTtcbiAgICAgICAgY29uc3QgbmV4dCA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmICgtLXRhc2tzID09PSAwKVxuICAgICAgICAgICAgICAgIGNiKCk7XG4gICAgICAgIH07XG4gICAgICAgIGZvciAoY29uc3QgW20sIGFic29sdXRlLCBpZkRpcl0gb2YgcHJvY2Vzc29yLm1hdGNoZXMuZW50cmllcygpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy4jaWdub3JlZChtKSlcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIHRhc2tzKys7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKG0sIGFic29sdXRlLCBpZkRpcikudGhlbigoKSA9PiBuZXh0KCkpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgdCBvZiBwcm9jZXNzb3Iuc3Vid2Fsa1RhcmdldHMoKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMubWF4RGVwdGggIT09IEluZmluaXR5ICYmIHQuZGVwdGgoKSA+PSB0aGlzLm1heERlcHRoKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0YXNrcysrO1xuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW5DYWNoZWQgPSB0LnJlYWRkaXJDYWNoZWQoKTtcbiAgICAgICAgICAgIGlmICh0LmNhbGxlZFJlYWRkaXIoKSlcbiAgICAgICAgICAgICAgICB0aGlzLndhbGtDQjModCwgY2hpbGRyZW5DYWNoZWQsIHByb2Nlc3NvciwgbmV4dCk7XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0LnJlYWRkaXJDQigoXywgZW50cmllcykgPT4gdGhpcy53YWxrQ0IzKHQsIGVudHJpZXMsIHByb2Nlc3NvciwgbmV4dCksIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG5leHQoKTtcbiAgICB9XG4gICAgd2Fsa0NCMyh0YXJnZXQsIGVudHJpZXMsIHByb2Nlc3NvciwgY2IpIHtcbiAgICAgICAgcHJvY2Vzc29yID0gcHJvY2Vzc29yLmZpbHRlckVudHJpZXModGFyZ2V0LCBlbnRyaWVzKTtcbiAgICAgICAgbGV0IHRhc2tzID0gMTtcbiAgICAgICAgY29uc3QgbmV4dCA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmICgtLXRhc2tzID09PSAwKVxuICAgICAgICAgICAgICAgIGNiKCk7XG4gICAgICAgIH07XG4gICAgICAgIGZvciAoY29uc3QgW20sIGFic29sdXRlLCBpZkRpcl0gb2YgcHJvY2Vzc29yLm1hdGNoZXMuZW50cmllcygpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy4jaWdub3JlZChtKSlcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIHRhc2tzKys7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKG0sIGFic29sdXRlLCBpZkRpcikudGhlbigoKSA9PiBuZXh0KCkpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgW3RhcmdldCwgcGF0dGVybnNdIG9mIHByb2Nlc3Nvci5zdWJ3YWxrcy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgIHRhc2tzKys7XG4gICAgICAgICAgICB0aGlzLndhbGtDQjIodGFyZ2V0LCBwYXR0ZXJucywgcHJvY2Vzc29yLmNoaWxkKCksIG5leHQpO1xuICAgICAgICB9XG4gICAgICAgIG5leHQoKTtcbiAgICB9XG4gICAgd2Fsa0NCU3luYyh0YXJnZXQsIHBhdHRlcm5zLCBjYikge1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgaWYgKHRoaXMuc2lnbmFsPy5hYm9ydGVkKVxuICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgdGhpcy53YWxrQ0IyU3luYyh0YXJnZXQsIHBhdHRlcm5zLCBuZXcgcHJvY2Vzc29yX2pzXzEuUHJvY2Vzc29yKHRoaXMub3B0cyksIGNiKTtcbiAgICB9XG4gICAgd2Fsa0NCMlN5bmModGFyZ2V0LCBwYXR0ZXJucywgcHJvY2Vzc29yLCBjYikge1xuICAgICAgICBpZiAodGhpcy4jY2hpbGRyZW5JZ25vcmVkKHRhcmdldCkpXG4gICAgICAgICAgICByZXR1cm4gY2IoKTtcbiAgICAgICAgaWYgKHRoaXMuc2lnbmFsPy5hYm9ydGVkKVxuICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgaWYgKHRoaXMucGF1c2VkKSB7XG4gICAgICAgICAgICB0aGlzLm9uUmVzdW1lKCgpID0+IHRoaXMud2Fsa0NCMlN5bmModGFyZ2V0LCBwYXR0ZXJucywgcHJvY2Vzc29yLCBjYikpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHByb2Nlc3Nvci5wcm9jZXNzUGF0dGVybnModGFyZ2V0LCBwYXR0ZXJucyk7XG4gICAgICAgIC8vIGRvbmUgcHJvY2Vzc2luZy4gIGFsbCBvZiB0aGUgYWJvdmUgaXMgc3luYywgY2FuIGJlIGFic3RyYWN0ZWQgb3V0LlxuICAgICAgICAvLyBzdWJ3YWxrcyBpcyBhIG1hcCBvZiBwYXRocyB0byB0aGUgZW50cnkgZmlsdGVycyB0aGV5IG5lZWRcbiAgICAgICAgLy8gbWF0Y2hlcyBpcyBhIG1hcCBvZiBwYXRocyB0byBbYWJzb2x1dGUsIGlmRGlyXSB0dXBsZXMuXG4gICAgICAgIGxldCB0YXNrcyA9IDE7XG4gICAgICAgIGNvbnN0IG5leHQgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoLS10YXNrcyA9PT0gMClcbiAgICAgICAgICAgICAgICBjYigpO1xuICAgICAgICB9O1xuICAgICAgICBmb3IgKGNvbnN0IFttLCBhYnNvbHV0ZSwgaWZEaXJdIG9mIHByb2Nlc3Nvci5tYXRjaGVzLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuI2lnbm9yZWQobSkpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB0aGlzLm1hdGNoU3luYyhtLCBhYnNvbHV0ZSwgaWZEaXIpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgdCBvZiBwcm9jZXNzb3Iuc3Vid2Fsa1RhcmdldHMoKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMubWF4RGVwdGggIT09IEluZmluaXR5ICYmIHQuZGVwdGgoKSA+PSB0aGlzLm1heERlcHRoKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0YXNrcysrO1xuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0LnJlYWRkaXJTeW5jKCk7XG4gICAgICAgICAgICB0aGlzLndhbGtDQjNTeW5jKHQsIGNoaWxkcmVuLCBwcm9jZXNzb3IsIG5leHQpO1xuICAgICAgICB9XG4gICAgICAgIG5leHQoKTtcbiAgICB9XG4gICAgd2Fsa0NCM1N5bmModGFyZ2V0LCBlbnRyaWVzLCBwcm9jZXNzb3IsIGNiKSB7XG4gICAgICAgIHByb2Nlc3NvciA9IHByb2Nlc3Nvci5maWx0ZXJFbnRyaWVzKHRhcmdldCwgZW50cmllcyk7XG4gICAgICAgIGxldCB0YXNrcyA9IDE7XG4gICAgICAgIGNvbnN0IG5leHQgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoLS10YXNrcyA9PT0gMClcbiAgICAgICAgICAgICAgICBjYigpO1xuICAgICAgICB9O1xuICAgICAgICBmb3IgKGNvbnN0IFttLCBhYnNvbHV0ZSwgaWZEaXJdIG9mIHByb2Nlc3Nvci5tYXRjaGVzLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuI2lnbm9yZWQobSkpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB0aGlzLm1hdGNoU3luYyhtLCBhYnNvbHV0ZSwgaWZEaXIpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgW3RhcmdldCwgcGF0dGVybnNdIG9mIHByb2Nlc3Nvci5zdWJ3YWxrcy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgIHRhc2tzKys7XG4gICAgICAgICAgICB0aGlzLndhbGtDQjJTeW5jKHRhcmdldCwgcGF0dGVybnMsIHByb2Nlc3Nvci5jaGlsZCgpLCBuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgfVxufVxuZXhwb3J0cy5HbG9iVXRpbCA9IEdsb2JVdGlsO1xuY2xhc3MgR2xvYldhbGtlciBleHRlbmRzIEdsb2JVdGlsIHtcbiAgICBtYXRjaGVzID0gbmV3IFNldCgpO1xuICAgIGNvbnN0cnVjdG9yKHBhdHRlcm5zLCBwYXRoLCBvcHRzKSB7XG4gICAgICAgIHN1cGVyKHBhdHRlcm5zLCBwYXRoLCBvcHRzKTtcbiAgICB9XG4gICAgbWF0Y2hFbWl0KGUpIHtcbiAgICAgICAgdGhpcy5tYXRjaGVzLmFkZChlKTtcbiAgICB9XG4gICAgYXN5bmMgd2FsaygpIHtcbiAgICAgICAgaWYgKHRoaXMuc2lnbmFsPy5hYm9ydGVkKVxuICAgICAgICAgICAgdGhyb3cgdGhpcy5zaWduYWwucmVhc29uO1xuICAgICAgICBpZiAodGhpcy5wYXRoLmlzVW5rbm93bigpKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnBhdGgubHN0YXQoKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzLCByZWopID0+IHtcbiAgICAgICAgICAgIHRoaXMud2Fsa0NCKHRoaXMucGF0aCwgdGhpcy5wYXR0ZXJucywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNpZ25hbD8uYWJvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICByZWoodGhpcy5zaWduYWwucmVhc29uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcyh0aGlzLm1hdGNoZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMubWF0Y2hlcztcbiAgICB9XG4gICAgd2Fsa1N5bmMoKSB7XG4gICAgICAgIGlmICh0aGlzLnNpZ25hbD8uYWJvcnRlZClcbiAgICAgICAgICAgIHRocm93IHRoaXMuc2lnbmFsLnJlYXNvbjtcbiAgICAgICAgaWYgKHRoaXMucGF0aC5pc1Vua25vd24oKSkge1xuICAgICAgICAgICAgdGhpcy5wYXRoLmxzdGF0U3luYygpO1xuICAgICAgICB9XG4gICAgICAgIC8vIG5vdGhpbmcgZm9yIHRoZSBjYWxsYmFjayB0byBkbywgYmVjYXVzZSB0aGlzIG5ldmVyIHBhdXNlc1xuICAgICAgICB0aGlzLndhbGtDQlN5bmModGhpcy5wYXRoLCB0aGlzLnBhdHRlcm5zLCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5zaWduYWw/LmFib3J0ZWQpXG4gICAgICAgICAgICAgICAgdGhyb3cgdGhpcy5zaWduYWwucmVhc29uO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMubWF0Y2hlcztcbiAgICB9XG59XG5leHBvcnRzLkdsb2JXYWxrZXIgPSBHbG9iV2Fsa2VyO1xuY2xhc3MgR2xvYlN0cmVhbSBleHRlbmRzIEdsb2JVdGlsIHtcbiAgICByZXN1bHRzO1xuICAgIGNvbnN0cnVjdG9yKHBhdHRlcm5zLCBwYXRoLCBvcHRzKSB7XG4gICAgICAgIHN1cGVyKHBhdHRlcm5zLCBwYXRoLCBvcHRzKTtcbiAgICAgICAgdGhpcy5yZXN1bHRzID0gbmV3IG1pbmlwYXNzXzEuTWluaXBhc3Moe1xuICAgICAgICAgICAgc2lnbmFsOiB0aGlzLnNpZ25hbCxcbiAgICAgICAgICAgIG9iamVjdE1vZGU6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJlc3VsdHMub24oJ2RyYWluJywgKCkgPT4gdGhpcy5yZXN1bWUoKSk7XG4gICAgICAgIHRoaXMucmVzdWx0cy5vbigncmVzdW1lJywgKCkgPT4gdGhpcy5yZXN1bWUoKSk7XG4gICAgfVxuICAgIG1hdGNoRW1pdChlKSB7XG4gICAgICAgIHRoaXMucmVzdWx0cy53cml0ZShlKTtcbiAgICAgICAgaWYgKCF0aGlzLnJlc3VsdHMuZmxvd2luZylcbiAgICAgICAgICAgIHRoaXMucGF1c2UoKTtcbiAgICB9XG4gICAgc3RyZWFtKCkge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLnBhdGg7XG4gICAgICAgIGlmICh0YXJnZXQuaXNVbmtub3duKCkpIHtcbiAgICAgICAgICAgIHRhcmdldC5sc3RhdCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMud2Fsa0NCKHRhcmdldCwgdGhpcy5wYXR0ZXJucywgKCkgPT4gdGhpcy5yZXN1bHRzLmVuZCgpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy53YWxrQ0IodGFyZ2V0LCB0aGlzLnBhdHRlcm5zLCAoKSA9PiB0aGlzLnJlc3VsdHMuZW5kKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnJlc3VsdHM7XG4gICAgfVxuICAgIHN0cmVhbVN5bmMoKSB7XG4gICAgICAgIGlmICh0aGlzLnBhdGguaXNVbmtub3duKCkpIHtcbiAgICAgICAgICAgIHRoaXMucGF0aC5sc3RhdFN5bmMoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLndhbGtDQlN5bmModGhpcy5wYXRoLCB0aGlzLnBhdHRlcm5zLCAoKSA9PiB0aGlzLnJlc3VsdHMuZW5kKCkpO1xuICAgICAgICByZXR1cm4gdGhpcy5yZXN1bHRzO1xuICAgIH1cbn1cbmV4cG9ydHMuR2xvYlN0cmVhbSA9IEdsb2JTdHJlYW07XG4vLyMgc291cmNlTWFwcGluZ1VSTD13YWxrZXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuR2xvYiA9IHZvaWQgMDtcbmNvbnN0IG1pbmltYXRjaF8xID0gcmVxdWlyZShcIm1pbmltYXRjaFwiKTtcbmNvbnN0IG5vZGVfdXJsXzEgPSByZXF1aXJlKFwibm9kZTp1cmxcIik7XG5jb25zdCBwYXRoX3NjdXJyeV8xID0gcmVxdWlyZShcInBhdGgtc2N1cnJ5XCIpO1xuY29uc3QgcGF0dGVybl9qc18xID0gcmVxdWlyZShcIi4vcGF0dGVybi5qc1wiKTtcbmNvbnN0IHdhbGtlcl9qc18xID0gcmVxdWlyZShcIi4vd2Fsa2VyLmpzXCIpO1xuLy8gaWYgbm8gcHJvY2VzcyBnbG9iYWwsIGp1c3QgY2FsbCBpdCBsaW51eC5cbi8vIHNvIHdlIGRlZmF1bHQgdG8gY2FzZS1zZW5zaXRpdmUsIC8gc2VwYXJhdG9yc1xuY29uc3QgZGVmYXVsdFBsYXRmb3JtID0gKHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JyAmJlxuICAgIHByb2Nlc3MgJiZcbiAgICB0eXBlb2YgcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3N0cmluZycpID9cbiAgICBwcm9jZXNzLnBsYXRmb3JtXG4gICAgOiAnbGludXgnO1xuLyoqXG4gKiBBbiBvYmplY3QgdGhhdCBjYW4gcGVyZm9ybSBnbG9iIHBhdHRlcm4gdHJhdmVyc2Fscy5cbiAqL1xuY2xhc3MgR2xvYiB7XG4gICAgYWJzb2x1dGU7XG4gICAgY3dkO1xuICAgIHJvb3Q7XG4gICAgZG90O1xuICAgIGRvdFJlbGF0aXZlO1xuICAgIGZvbGxvdztcbiAgICBpZ25vcmU7XG4gICAgbWFnaWNhbEJyYWNlcztcbiAgICBtYXJrO1xuICAgIG1hdGNoQmFzZTtcbiAgICBtYXhEZXB0aDtcbiAgICBub2JyYWNlO1xuICAgIG5vY2FzZTtcbiAgICBub2RpcjtcbiAgICBub2V4dDtcbiAgICBub2dsb2JzdGFyO1xuICAgIHBhdHRlcm47XG4gICAgcGxhdGZvcm07XG4gICAgcmVhbHBhdGg7XG4gICAgc2N1cnJ5O1xuICAgIHN0YXQ7XG4gICAgc2lnbmFsO1xuICAgIHdpbmRvd3NQYXRoc05vRXNjYXBlO1xuICAgIHdpdGhGaWxlVHlwZXM7XG4gICAgaW5jbHVkZUNoaWxkTWF0Y2hlcztcbiAgICAvKipcbiAgICAgKiBUaGUgb3B0aW9ucyBwcm92aWRlZCB0byB0aGUgY29uc3RydWN0b3IuXG4gICAgICovXG4gICAgb3B0cztcbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBwYXJzZWQgaW1tdXRhYmxlIHtAbGluayBQYXR0ZXJufSBvYmplY3RzLlxuICAgICAqL1xuICAgIHBhdHRlcm5zO1xuICAgIC8qKlxuICAgICAqIEFsbCBvcHRpb25zIGFyZSBzdG9yZWQgYXMgcHJvcGVydGllcyBvbiB0aGUgYEdsb2JgIG9iamVjdC5cbiAgICAgKlxuICAgICAqIFNlZSB7QGxpbmsgR2xvYk9wdGlvbnN9IGZvciBmdWxsIG9wdGlvbnMgZGVzY3JpcHRpb25zLlxuICAgICAqXG4gICAgICogTm90ZSB0aGF0IGEgcHJldmlvdXMgYEdsb2JgIG9iamVjdCBjYW4gYmUgcGFzc2VkIGFzIHRoZVxuICAgICAqIGBHbG9iT3B0aW9uc2AgdG8gYW5vdGhlciBgR2xvYmAgaW5zdGFudGlhdGlvbiB0byByZS11c2Ugc2V0dGluZ3NcbiAgICAgKiBhbmQgY2FjaGVzIHdpdGggYSBuZXcgcGF0dGVybi5cbiAgICAgKlxuICAgICAqIFRyYXZlcnNhbCBmdW5jdGlvbnMgY2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyB0byBydW4gdGhlIHdhbGtcbiAgICAgKiBhZ2Fpbi5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihwYXR0ZXJuLCBvcHRzKSB7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICBpZiAoIW9wdHMpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdnbG9iIG9wdGlvbnMgcmVxdWlyZWQnKTtcbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgdGhpcy53aXRoRmlsZVR5cGVzID0gISFvcHRzLndpdGhGaWxlVHlwZXM7XG4gICAgICAgIHRoaXMuc2lnbmFsID0gb3B0cy5zaWduYWw7XG4gICAgICAgIHRoaXMuZm9sbG93ID0gISFvcHRzLmZvbGxvdztcbiAgICAgICAgdGhpcy5kb3QgPSAhIW9wdHMuZG90O1xuICAgICAgICB0aGlzLmRvdFJlbGF0aXZlID0gISFvcHRzLmRvdFJlbGF0aXZlO1xuICAgICAgICB0aGlzLm5vZGlyID0gISFvcHRzLm5vZGlyO1xuICAgICAgICB0aGlzLm1hcmsgPSAhIW9wdHMubWFyaztcbiAgICAgICAgaWYgKCFvcHRzLmN3ZCkge1xuICAgICAgICAgICAgdGhpcy5jd2QgPSAnJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChvcHRzLmN3ZCBpbnN0YW5jZW9mIFVSTCB8fCBvcHRzLmN3ZC5zdGFydHNXaXRoKCdmaWxlOi8vJykpIHtcbiAgICAgICAgICAgIG9wdHMuY3dkID0gKDAsIG5vZGVfdXJsXzEuZmlsZVVSTFRvUGF0aCkob3B0cy5jd2QpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3dkID0gb3B0cy5jd2QgfHwgJyc7XG4gICAgICAgIHRoaXMucm9vdCA9IG9wdHMucm9vdDtcbiAgICAgICAgdGhpcy5tYWdpY2FsQnJhY2VzID0gISFvcHRzLm1hZ2ljYWxCcmFjZXM7XG4gICAgICAgIHRoaXMubm9icmFjZSA9ICEhb3B0cy5ub2JyYWNlO1xuICAgICAgICB0aGlzLm5vZXh0ID0gISFvcHRzLm5vZXh0O1xuICAgICAgICB0aGlzLnJlYWxwYXRoID0gISFvcHRzLnJlYWxwYXRoO1xuICAgICAgICB0aGlzLmFic29sdXRlID0gb3B0cy5hYnNvbHV0ZTtcbiAgICAgICAgdGhpcy5pbmNsdWRlQ2hpbGRNYXRjaGVzID0gb3B0cy5pbmNsdWRlQ2hpbGRNYXRjaGVzICE9PSBmYWxzZTtcbiAgICAgICAgdGhpcy5ub2dsb2JzdGFyID0gISFvcHRzLm5vZ2xvYnN0YXI7XG4gICAgICAgIHRoaXMubWF0Y2hCYXNlID0gISFvcHRzLm1hdGNoQmFzZTtcbiAgICAgICAgdGhpcy5tYXhEZXB0aCA9XG4gICAgICAgICAgICB0eXBlb2Ygb3B0cy5tYXhEZXB0aCA9PT0gJ251bWJlcicgPyBvcHRzLm1heERlcHRoIDogSW5maW5pdHk7XG4gICAgICAgIHRoaXMuc3RhdCA9ICEhb3B0cy5zdGF0O1xuICAgICAgICB0aGlzLmlnbm9yZSA9IG9wdHMuaWdub3JlO1xuICAgICAgICBpZiAodGhpcy53aXRoRmlsZVR5cGVzICYmIHRoaXMuYWJzb2x1dGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjYW5ub3Qgc2V0IGFic29sdXRlIGFuZCB3aXRoRmlsZVR5cGVzOnRydWUnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHBhdHRlcm4gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBwYXR0ZXJuID0gW3BhdHRlcm5dO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMud2luZG93c1BhdGhzTm9Fc2NhcGUgPVxuICAgICAgICAgICAgISFvcHRzLndpbmRvd3NQYXRoc05vRXNjYXBlIHx8XG4gICAgICAgICAgICAgICAgb3B0cy5hbGxvd1dpbmRvd3NFc2NhcGUgPT09XG4gICAgICAgICAgICAgICAgICAgIGZhbHNlO1xuICAgICAgICBpZiAodGhpcy53aW5kb3dzUGF0aHNOb0VzY2FwZSkge1xuICAgICAgICAgICAgcGF0dGVybiA9IHBhdHRlcm4ubWFwKHAgPT4gcC5yZXBsYWNlKC9cXFxcL2csICcvJykpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1hdGNoQmFzZSkge1xuICAgICAgICAgICAgaWYgKG9wdHMubm9nbG9ic3Rhcikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2Jhc2UgbWF0Y2hpbmcgcmVxdWlyZXMgZ2xvYnN0YXInKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhdHRlcm4gPSBwYXR0ZXJuLm1hcChwID0+IChwLmluY2x1ZGVzKCcvJykgPyBwIDogYC4vKiovJHtwfWApKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBhdHRlcm4gPSBwYXR0ZXJuO1xuICAgICAgICB0aGlzLnBsYXRmb3JtID0gb3B0cy5wbGF0Zm9ybSB8fCBkZWZhdWx0UGxhdGZvcm07XG4gICAgICAgIHRoaXMub3B0cyA9IHsgLi4ub3B0cywgcGxhdGZvcm06IHRoaXMucGxhdGZvcm0gfTtcbiAgICAgICAgaWYgKG9wdHMuc2N1cnJ5KSB7XG4gICAgICAgICAgICB0aGlzLnNjdXJyeSA9IG9wdHMuc2N1cnJ5O1xuICAgICAgICAgICAgaWYgKG9wdHMubm9jYXNlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICBvcHRzLm5vY2FzZSAhPT0gb3B0cy5zY3Vycnkubm9jYXNlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdub2Nhc2Ugb3B0aW9uIGNvbnRyYWRpY3RzIHByb3ZpZGVkIHNjdXJyeSBvcHRpb24nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IFNjdXJyeSA9IG9wdHMucGxhdGZvcm0gPT09ICd3aW4zMicgPyBwYXRoX3NjdXJyeV8xLlBhdGhTY3VycnlXaW4zMlxuICAgICAgICAgICAgICAgIDogb3B0cy5wbGF0Zm9ybSA9PT0gJ2RhcndpbicgPyBwYXRoX3NjdXJyeV8xLlBhdGhTY3VycnlEYXJ3aW5cbiAgICAgICAgICAgICAgICAgICAgOiBvcHRzLnBsYXRmb3JtID8gcGF0aF9zY3VycnlfMS5QYXRoU2N1cnJ5UG9zaXhcbiAgICAgICAgICAgICAgICAgICAgICAgIDogcGF0aF9zY3VycnlfMS5QYXRoU2N1cnJ5O1xuICAgICAgICAgICAgdGhpcy5zY3VycnkgPSBuZXcgU2N1cnJ5KHRoaXMuY3dkLCB7XG4gICAgICAgICAgICAgICAgbm9jYXNlOiBvcHRzLm5vY2FzZSxcbiAgICAgICAgICAgICAgICBmczogb3B0cy5mcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubm9jYXNlID0gdGhpcy5zY3Vycnkubm9jYXNlO1xuICAgICAgICAvLyBJZiB5b3UgZG8gbm9jYXNlOnRydWUgb24gYSBjYXNlLXNlbnNpdGl2ZSBmaWxlIHN5c3RlbSwgdGhlblxuICAgICAgICAvLyB3ZSBuZWVkIHRvIHVzZSByZWdleHBzIGluc3RlYWQgb2Ygc3RyaW5ncyBmb3Igbm9uLW1hZ2ljXG4gICAgICAgIC8vIHBhdGggcG9ydGlvbnMsIGJlY2F1c2Ugc3RhdHRpbmcgYGFCY2Agd29uJ3QgcmV0dXJuIHJlc3VsdHNcbiAgICAgICAgLy8gZm9yIHRoZSBmaWxlIGBBYkNgIGZvciBleGFtcGxlLlxuICAgICAgICBjb25zdCBub2Nhc2VNYWdpY09ubHkgPSB0aGlzLnBsYXRmb3JtID09PSAnZGFyd2luJyB8fCB0aGlzLnBsYXRmb3JtID09PSAnd2luMzInO1xuICAgICAgICBjb25zdCBtbW8gPSB7XG4gICAgICAgICAgICAvLyBkZWZhdWx0IG5vY2FzZSBiYXNlZCBvbiBwbGF0Zm9ybVxuICAgICAgICAgICAgLi4ub3B0cyxcbiAgICAgICAgICAgIGRvdDogdGhpcy5kb3QsXG4gICAgICAgICAgICBtYXRjaEJhc2U6IHRoaXMubWF0Y2hCYXNlLFxuICAgICAgICAgICAgbm9icmFjZTogdGhpcy5ub2JyYWNlLFxuICAgICAgICAgICAgbm9jYXNlOiB0aGlzLm5vY2FzZSxcbiAgICAgICAgICAgIG5vY2FzZU1hZ2ljT25seSxcbiAgICAgICAgICAgIG5vY29tbWVudDogdHJ1ZSxcbiAgICAgICAgICAgIG5vZXh0OiB0aGlzLm5vZXh0LFxuICAgICAgICAgICAgbm9uZWdhdGU6IHRydWUsXG4gICAgICAgICAgICBvcHRpbWl6YXRpb25MZXZlbDogMixcbiAgICAgICAgICAgIHBsYXRmb3JtOiB0aGlzLnBsYXRmb3JtLFxuICAgICAgICAgICAgd2luZG93c1BhdGhzTm9Fc2NhcGU6IHRoaXMud2luZG93c1BhdGhzTm9Fc2NhcGUsXG4gICAgICAgICAgICBkZWJ1ZzogISF0aGlzLm9wdHMuZGVidWcsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IG1tcyA9IHRoaXMucGF0dGVybi5tYXAocCA9PiBuZXcgbWluaW1hdGNoXzEuTWluaW1hdGNoKHAsIG1tbykpO1xuICAgICAgICBjb25zdCBbbWF0Y2hTZXQsIGdsb2JQYXJ0c10gPSBtbXMucmVkdWNlKChzZXQsIG0pID0+IHtcbiAgICAgICAgICAgIHNldFswXS5wdXNoKC4uLm0uc2V0KTtcbiAgICAgICAgICAgIHNldFsxXS5wdXNoKC4uLm0uZ2xvYlBhcnRzKTtcbiAgICAgICAgICAgIHJldHVybiBzZXQ7XG4gICAgICAgIH0sIFtbXSwgW11dKTtcbiAgICAgICAgdGhpcy5wYXR0ZXJucyA9IG1hdGNoU2V0Lm1hcCgoc2V0LCBpKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBnID0gZ2xvYlBhcnRzW2ldO1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICBpZiAoIWcpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHBhdHRlcm4gb2JqZWN0Jyk7XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBwYXR0ZXJuX2pzXzEuUGF0dGVybihzZXQsIGcsIDAsIHRoaXMucGxhdGZvcm0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMgd2FsaygpIHtcbiAgICAgICAgLy8gV2Fsa2VycyBhbHdheXMgcmV0dXJuIGFycmF5IG9mIFBhdGggb2JqZWN0cywgc28gd2UganVzdCBoYXZlIHRvXG4gICAgICAgIC8vIGNvZXJjZSB0aGVtIGludG8gdGhlIHJpZ2h0IHNoYXBlLiAgSXQgd2lsbCBoYXZlIGFscmVhZHkgY2FsbGVkXG4gICAgICAgIC8vIHJlYWxwYXRoKCkgaWYgdGhlIG9wdGlvbiB3YXMgc2V0IHRvIGRvIHNvLCBzbyB3ZSBrbm93IHRoYXQncyBjYWNoZWQuXG4gICAgICAgIC8vIHN0YXJ0IG91dCBrbm93aW5nIHRoZSBjd2QsIGF0IGxlYXN0XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAuLi4oYXdhaXQgbmV3IHdhbGtlcl9qc18xLkdsb2JXYWxrZXIodGhpcy5wYXR0ZXJucywgdGhpcy5zY3VycnkuY3dkLCB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5vcHRzLFxuICAgICAgICAgICAgICAgIG1heERlcHRoOiB0aGlzLm1heERlcHRoICE9PSBJbmZpbml0eSA/XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF4RGVwdGggKyB0aGlzLnNjdXJyeS5jd2QuZGVwdGgoKVxuICAgICAgICAgICAgICAgICAgICA6IEluZmluaXR5LFxuICAgICAgICAgICAgICAgIHBsYXRmb3JtOiB0aGlzLnBsYXRmb3JtLFxuICAgICAgICAgICAgICAgIG5vY2FzZTogdGhpcy5ub2Nhc2UsXG4gICAgICAgICAgICAgICAgaW5jbHVkZUNoaWxkTWF0Y2hlczogdGhpcy5pbmNsdWRlQ2hpbGRNYXRjaGVzLFxuICAgICAgICAgICAgfSkud2FsaygpKSxcbiAgICAgICAgXTtcbiAgICB9XG4gICAgd2Fsa1N5bmMoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAuLi5uZXcgd2Fsa2VyX2pzXzEuR2xvYldhbGtlcih0aGlzLnBhdHRlcm5zLCB0aGlzLnNjdXJyeS5jd2QsIHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLm9wdHMsXG4gICAgICAgICAgICAgICAgbWF4RGVwdGg6IHRoaXMubWF4RGVwdGggIT09IEluZmluaXR5ID9cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXhEZXB0aCArIHRoaXMuc2N1cnJ5LmN3ZC5kZXB0aCgpXG4gICAgICAgICAgICAgICAgICAgIDogSW5maW5pdHksXG4gICAgICAgICAgICAgICAgcGxhdGZvcm06IHRoaXMucGxhdGZvcm0sXG4gICAgICAgICAgICAgICAgbm9jYXNlOiB0aGlzLm5vY2FzZSxcbiAgICAgICAgICAgICAgICBpbmNsdWRlQ2hpbGRNYXRjaGVzOiB0aGlzLmluY2x1ZGVDaGlsZE1hdGNoZXMsXG4gICAgICAgICAgICB9KS53YWxrU3luYygpLFxuICAgICAgICBdO1xuICAgIH1cbiAgICBzdHJlYW0oKSB7XG4gICAgICAgIHJldHVybiBuZXcgd2Fsa2VyX2pzXzEuR2xvYlN0cmVhbSh0aGlzLnBhdHRlcm5zLCB0aGlzLnNjdXJyeS5jd2QsIHtcbiAgICAgICAgICAgIC4uLnRoaXMub3B0cyxcbiAgICAgICAgICAgIG1heERlcHRoOiB0aGlzLm1heERlcHRoICE9PSBJbmZpbml0eSA/XG4gICAgICAgICAgICAgICAgdGhpcy5tYXhEZXB0aCArIHRoaXMuc2N1cnJ5LmN3ZC5kZXB0aCgpXG4gICAgICAgICAgICAgICAgOiBJbmZpbml0eSxcbiAgICAgICAgICAgIHBsYXRmb3JtOiB0aGlzLnBsYXRmb3JtLFxuICAgICAgICAgICAgbm9jYXNlOiB0aGlzLm5vY2FzZSxcbiAgICAgICAgICAgIGluY2x1ZGVDaGlsZE1hdGNoZXM6IHRoaXMuaW5jbHVkZUNoaWxkTWF0Y2hlcyxcbiAgICAgICAgfSkuc3RyZWFtKCk7XG4gICAgfVxuICAgIHN0cmVhbVN5bmMoKSB7XG4gICAgICAgIHJldHVybiBuZXcgd2Fsa2VyX2pzXzEuR2xvYlN0cmVhbSh0aGlzLnBhdHRlcm5zLCB0aGlzLnNjdXJyeS5jd2QsIHtcbiAgICAgICAgICAgIC4uLnRoaXMub3B0cyxcbiAgICAgICAgICAgIG1heERlcHRoOiB0aGlzLm1heERlcHRoICE9PSBJbmZpbml0eSA/XG4gICAgICAgICAgICAgICAgdGhpcy5tYXhEZXB0aCArIHRoaXMuc2N1cnJ5LmN3ZC5kZXB0aCgpXG4gICAgICAgICAgICAgICAgOiBJbmZpbml0eSxcbiAgICAgICAgICAgIHBsYXRmb3JtOiB0aGlzLnBsYXRmb3JtLFxuICAgICAgICAgICAgbm9jYXNlOiB0aGlzLm5vY2FzZSxcbiAgICAgICAgICAgIGluY2x1ZGVDaGlsZE1hdGNoZXM6IHRoaXMuaW5jbHVkZUNoaWxkTWF0Y2hlcyxcbiAgICAgICAgfSkuc3RyZWFtU3luYygpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWZhdWx0IHN5bmMgaXRlcmF0aW9uIGZ1bmN0aW9uLiBSZXR1cm5zIGEgR2VuZXJhdG9yIHRoYXRcbiAgICAgKiBpdGVyYXRlcyBvdmVyIHRoZSByZXN1bHRzLlxuICAgICAqL1xuICAgIGl0ZXJhdGVTeW5jKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdHJlYW1TeW5jKClbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICAgIH1cbiAgICBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlcmF0ZVN5bmMoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVmYXVsdCBhc3luYyBpdGVyYXRpb24gZnVuY3Rpb24uIFJldHVybnMgYW4gQXN5bmNHZW5lcmF0b3IgdGhhdFxuICAgICAqIGl0ZXJhdGVzIG92ZXIgdGhlIHJlc3VsdHMuXG4gICAgICovXG4gICAgaXRlcmF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RyZWFtKClbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCk7XG4gICAgfVxuICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLml0ZXJhdGUoKTtcbiAgICB9XG59XG5leHBvcnRzLkdsb2IgPSBHbG9iO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Z2xvYi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5oYXNNYWdpYyA9IHZvaWQgMDtcbmNvbnN0IG1pbmltYXRjaF8xID0gcmVxdWlyZShcIm1pbmltYXRjaFwiKTtcbi8qKlxuICogUmV0dXJuIHRydWUgaWYgdGhlIHBhdHRlcm5zIHByb3ZpZGVkIGNvbnRhaW4gYW55IG1hZ2ljIGdsb2IgY2hhcmFjdGVycyxcbiAqIGdpdmVuIHRoZSBvcHRpb25zIHByb3ZpZGVkLlxuICpcbiAqIEJyYWNlIGV4cGFuc2lvbiBpcyBub3QgY29uc2lkZXJlZCBcIm1hZ2ljXCIgdW5sZXNzIHRoZSBgbWFnaWNhbEJyYWNlc2Agb3B0aW9uXG4gKiBpcyBzZXQsIGFzIGJyYWNlIGV4cGFuc2lvbiBqdXN0IHR1cm5zIG9uZSBzdHJpbmcgaW50byBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogU28gYSBwYXR0ZXJuIGxpa2UgYCd4e2EsYn15J2Agd291bGQgcmV0dXJuIGBmYWxzZWAsIGJlY2F1c2UgYCd4YXknYCBhbmRcbiAqIGAneGJ5J2AgYm90aCBkbyBub3QgY29udGFpbiBhbnkgbWFnaWMgZ2xvYiBjaGFyYWN0ZXJzLCBhbmQgaXQncyB0cmVhdGVkIHRoZVxuICogc2FtZSBhcyBpZiB5b3UgaGFkIGNhbGxlZCBpdCBvbiBgWyd4YXknLCAneGJ5J11gLiBXaGVuIGBtYWdpY2FsQnJhY2VzOnRydWVgXG4gKiBpcyBpbiB0aGUgb3B0aW9ucywgYnJhY2UgZXhwYW5zaW9uIF9pc18gdHJlYXRlZCBhcyBhIHBhdHRlcm4gaGF2aW5nIG1hZ2ljLlxuICovXG5jb25zdCBoYXNNYWdpYyA9IChwYXR0ZXJuLCBvcHRpb25zID0ge30pID0+IHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocGF0dGVybikpIHtcbiAgICAgICAgcGF0dGVybiA9IFtwYXR0ZXJuXTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBwIG9mIHBhdHRlcm4pIHtcbiAgICAgICAgaWYgKG5ldyBtaW5pbWF0Y2hfMS5NaW5pbWF0Y2gocCwgb3B0aW9ucykuaGFzTWFnaWMoKSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuZXhwb3J0cy5oYXNNYWdpYyA9IGhhc01hZ2ljO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aGFzLW1hZ2ljLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdsb2IgPSBleHBvcnRzLnN5bmMgPSBleHBvcnRzLml0ZXJhdGUgPSBleHBvcnRzLml0ZXJhdGVTeW5jID0gZXhwb3J0cy5zdHJlYW0gPSBleHBvcnRzLnN0cmVhbVN5bmMgPSBleHBvcnRzLklnbm9yZSA9IGV4cG9ydHMuaGFzTWFnaWMgPSBleHBvcnRzLkdsb2IgPSBleHBvcnRzLnVuZXNjYXBlID0gZXhwb3J0cy5lc2NhcGUgPSB2b2lkIDA7XG5leHBvcnRzLmdsb2JTdHJlYW1TeW5jID0gZ2xvYlN0cmVhbVN5bmM7XG5leHBvcnRzLmdsb2JTdHJlYW0gPSBnbG9iU3RyZWFtO1xuZXhwb3J0cy5nbG9iU3luYyA9IGdsb2JTeW5jO1xuZXhwb3J0cy5nbG9iSXRlcmF0ZVN5bmMgPSBnbG9iSXRlcmF0ZVN5bmM7XG5leHBvcnRzLmdsb2JJdGVyYXRlID0gZ2xvYkl0ZXJhdGU7XG5jb25zdCBtaW5pbWF0Y2hfMSA9IHJlcXVpcmUoXCJtaW5pbWF0Y2hcIik7XG5jb25zdCBnbG9iX2pzXzEgPSByZXF1aXJlKFwiLi9nbG9iLmpzXCIpO1xuY29uc3QgaGFzX21hZ2ljX2pzXzEgPSByZXF1aXJlKFwiLi9oYXMtbWFnaWMuanNcIik7XG52YXIgbWluaW1hdGNoXzIgPSByZXF1aXJlKFwibWluaW1hdGNoXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZXNjYXBlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBtaW5pbWF0Y2hfMi5lc2NhcGU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ1bmVzY2FwZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbWluaW1hdGNoXzIudW5lc2NhcGU7IH0gfSk7XG52YXIgZ2xvYl9qc18yID0gcmVxdWlyZShcIi4vZ2xvYi5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkdsb2JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdsb2JfanNfMi5HbG9iOyB9IH0pO1xudmFyIGhhc19tYWdpY19qc18yID0gcmVxdWlyZShcIi4vaGFzLW1hZ2ljLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaGFzTWFnaWNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGhhc19tYWdpY19qc18yLmhhc01hZ2ljOyB9IH0pO1xudmFyIGlnbm9yZV9qc18xID0gcmVxdWlyZShcIi4vaWdub3JlLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSWdub3JlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBpZ25vcmVfanNfMS5JZ25vcmU7IH0gfSk7XG5mdW5jdGlvbiBnbG9iU3RyZWFtU3luYyhwYXR0ZXJuLCBvcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gbmV3IGdsb2JfanNfMS5HbG9iKHBhdHRlcm4sIG9wdGlvbnMpLnN0cmVhbVN5bmMoKTtcbn1cbmZ1bmN0aW9uIGdsb2JTdHJlYW0ocGF0dGVybiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgcmV0dXJuIG5ldyBnbG9iX2pzXzEuR2xvYihwYXR0ZXJuLCBvcHRpb25zKS5zdHJlYW0oKTtcbn1cbmZ1bmN0aW9uIGdsb2JTeW5jKHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiBuZXcgZ2xvYl9qc18xLkdsb2IocGF0dGVybiwgb3B0aW9ucykud2Fsa1N5bmMoKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGdsb2JfKHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiBuZXcgZ2xvYl9qc18xLkdsb2IocGF0dGVybiwgb3B0aW9ucykud2FsaygpO1xufVxuZnVuY3Rpb24gZ2xvYkl0ZXJhdGVTeW5jKHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiBuZXcgZ2xvYl9qc18xLkdsb2IocGF0dGVybiwgb3B0aW9ucykuaXRlcmF0ZVN5bmMoKTtcbn1cbmZ1bmN0aW9uIGdsb2JJdGVyYXRlKHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiBuZXcgZ2xvYl9qc18xLkdsb2IocGF0dGVybiwgb3B0aW9ucykuaXRlcmF0ZSgpO1xufVxuLy8gYWxpYXNlczogZ2xvYi5zeW5jLnN0cmVhbSgpIGdsb2Iuc3RyZWFtLnN5bmMoKSBnbG9iLnN5bmMoKSBldGNcbmV4cG9ydHMuc3RyZWFtU3luYyA9IGdsb2JTdHJlYW1TeW5jO1xuZXhwb3J0cy5zdHJlYW0gPSBPYmplY3QuYXNzaWduKGdsb2JTdHJlYW0sIHsgc3luYzogZ2xvYlN0cmVhbVN5bmMgfSk7XG5leHBvcnRzLml0ZXJhdGVTeW5jID0gZ2xvYkl0ZXJhdGVTeW5jO1xuZXhwb3J0cy5pdGVyYXRlID0gT2JqZWN0LmFzc2lnbihnbG9iSXRlcmF0ZSwge1xuICAgIHN5bmM6IGdsb2JJdGVyYXRlU3luYyxcbn0pO1xuZXhwb3J0cy5zeW5jID0gT2JqZWN0LmFzc2lnbihnbG9iU3luYywge1xuICAgIHN0cmVhbTogZ2xvYlN0cmVhbVN5bmMsXG4gICAgaXRlcmF0ZTogZ2xvYkl0ZXJhdGVTeW5jLFxufSk7XG5leHBvcnRzLmdsb2IgPSBPYmplY3QuYXNzaWduKGdsb2JfLCB7XG4gICAgZ2xvYjogZ2xvYl8sXG4gICAgZ2xvYlN5bmMsXG4gICAgc3luYzogZXhwb3J0cy5zeW5jLFxuICAgIGdsb2JTdHJlYW0sXG4gICAgc3RyZWFtOiBleHBvcnRzLnN0cmVhbSxcbiAgICBnbG9iU3RyZWFtU3luYyxcbiAgICBzdHJlYW1TeW5jOiBleHBvcnRzLnN0cmVhbVN5bmMsXG4gICAgZ2xvYkl0ZXJhdGUsXG4gICAgaXRlcmF0ZTogZXhwb3J0cy5pdGVyYXRlLFxuICAgIGdsb2JJdGVyYXRlU3luYyxcbiAgICBpdGVyYXRlU3luYzogZXhwb3J0cy5pdGVyYXRlU3luYyxcbiAgICBHbG9iOiBnbG9iX2pzXzEuR2xvYixcbiAgICBoYXNNYWdpYzogaGFzX21hZ2ljX2pzXzEuaGFzTWFnaWMsXG4gICAgZXNjYXBlOiBtaW5pbWF0Y2hfMS5lc2NhcGUsXG4gICAgdW5lc2NhcGU6IG1pbmltYXRjaF8xLnVuZXNjYXBlLFxufSk7XG5leHBvcnRzLmdsb2IuZ2xvYiA9IGV4cG9ydHMuZ2xvYjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiLyoqXG4gKiBhcmNoaXZlci11dGlsc1xuICpcbiAqIENvcHlyaWdodCAoYykgMjAxMi0yMDE0IENocmlzIFRhbGtpbmd0b24sIGNvbnRyaWJ1dG9ycy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hcmNoaXZlcmpzL25vZGUtYXJjaGl2ZXIvYmxvYi9tYXN0ZXIvTElDRU5TRS1NSVRcbiAqL1xudmFyIGZzID0gcmVxdWlyZSgnZ3JhY2VmdWwtZnMnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuXG52YXIgZmxhdHRlbiA9IHJlcXVpcmUoJ2xvZGFzaC9mbGF0dGVuJyk7XG52YXIgZGlmZmVyZW5jZSA9IHJlcXVpcmUoJ2xvZGFzaC9kaWZmZXJlbmNlJyk7XG52YXIgdW5pb24gPSByZXF1aXJlKCdsb2Rhc2gvdW5pb24nKTtcbnZhciBpc1BsYWluT2JqZWN0ID0gcmVxdWlyZSgnbG9kYXNoL2lzUGxhaW5PYmplY3QnKTtcblxudmFyIGdsb2IgPSByZXF1aXJlKCdnbG9iJyk7XG5cbnZhciBmaWxlID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcblxudmFyIHBhdGhTZXBhcmF0b3JSZSA9IC9bXFwvXFxcXF0vZztcblxuLy8gUHJvY2VzcyBzcGVjaWZpZWQgd2lsZGNhcmQgZ2xvYiBwYXR0ZXJucyBvciBmaWxlbmFtZXMgYWdhaW5zdCBhXG4vLyBjYWxsYmFjaywgZXhjbHVkaW5nIGFuZCB1bmlxdWluZyBmaWxlcyBpbiB0aGUgcmVzdWx0IHNldC5cbnZhciBwcm9jZXNzUGF0dGVybnMgPSBmdW5jdGlvbihwYXR0ZXJucywgZm4pIHtcbiAgLy8gRmlsZXBhdGhzIHRvIHJldHVybi5cbiAgdmFyIHJlc3VsdCA9IFtdO1xuICAvLyBJdGVyYXRlIG92ZXIgZmxhdHRlbmVkIHBhdHRlcm5zIGFycmF5LlxuICBmbGF0dGVuKHBhdHRlcm5zKS5mb3JFYWNoKGZ1bmN0aW9uKHBhdHRlcm4pIHtcbiAgICAvLyBJZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGlzICEgaXQgc2hvdWxkIGJlIG9taXR0ZWRcbiAgICB2YXIgZXhjbHVzaW9uID0gcGF0dGVybi5pbmRleE9mKCchJykgPT09IDA7XG4gICAgLy8gSWYgdGhlIHBhdHRlcm4gaXMgYW4gZXhjbHVzaW9uLCByZW1vdmUgdGhlICFcbiAgICBpZiAoZXhjbHVzaW9uKSB7IHBhdHRlcm4gPSBwYXR0ZXJuLnNsaWNlKDEpOyB9XG4gICAgLy8gRmluZCBhbGwgbWF0Y2hpbmcgZmlsZXMgZm9yIHRoaXMgcGF0dGVybi5cbiAgICB2YXIgbWF0Y2hlcyA9IGZuKHBhdHRlcm4pO1xuICAgIGlmIChleGNsdXNpb24pIHtcbiAgICAgIC8vIElmIGFuIGV4Y2x1c2lvbiwgcmVtb3ZlIG1hdGNoaW5nIGZpbGVzLlxuICAgICAgcmVzdWx0ID0gZGlmZmVyZW5jZShyZXN1bHQsIG1hdGNoZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBPdGhlcndpc2UgYWRkIG1hdGNoaW5nIGZpbGVzLlxuICAgICAgcmVzdWx0ID0gdW5pb24ocmVzdWx0LCBtYXRjaGVzKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gVHJ1ZSBpZiB0aGUgZmlsZSBwYXRoIGV4aXN0cy5cbmZpbGUuZXhpc3RzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBmaWxlcGF0aCA9IHBhdGguam9pbi5hcHBseShwYXRoLCBhcmd1bWVudHMpO1xuICByZXR1cm4gZnMuZXhpc3RzU3luYyhmaWxlcGF0aCk7XG59O1xuXG4vLyBSZXR1cm4gYW4gYXJyYXkgb2YgYWxsIGZpbGUgcGF0aHMgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4gd2lsZGNhcmQgcGF0dGVybnMuXG5maWxlLmV4cGFuZCA9IGZ1bmN0aW9uKC4uLmFyZ3MpIHtcbiAgLy8gSWYgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIGFuIG9wdGlvbnMgb2JqZWN0LCBzYXZlIHRob3NlIG9wdGlvbnMgdG8gcGFzc1xuICAvLyBpbnRvIHRoZSBGaWxlLnByb3RvdHlwZS5nbG9iLnN5bmMgbWV0aG9kLlxuICB2YXIgb3B0aW9ucyA9IGlzUGxhaW5PYmplY3QoYXJnc1swXSkgPyBhcmdzLnNoaWZ0KCkgOiB7fTtcbiAgLy8gVXNlIHRoZSBmaXJzdCBhcmd1bWVudCBpZiBpdCdzIGFuIEFycmF5LCBvdGhlcndpc2UgY29udmVydCB0aGUgYXJndW1lbnRzXG4gIC8vIG9iamVjdCB0byBhbiBhcnJheSBhbmQgdXNlIHRoYXQuXG4gIHZhciBwYXR0ZXJucyA9IEFycmF5LmlzQXJyYXkoYXJnc1swXSkgPyBhcmdzWzBdIDogYXJncztcbiAgLy8gUmV0dXJuIGVtcHR5IHNldCBpZiB0aGVyZSBhcmUgbm8gcGF0dGVybnMgb3IgZmlsZXBhdGhzLlxuICBpZiAocGF0dGVybnMubGVuZ3RoID09PSAwKSB7IHJldHVybiBbXTsgfVxuICAvLyBSZXR1cm4gYWxsIG1hdGNoaW5nIGZpbGVwYXRocy5cbiAgdmFyIG1hdGNoZXMgPSBwcm9jZXNzUGF0dGVybnMocGF0dGVybnMsIGZ1bmN0aW9uKHBhdHRlcm4pIHtcbiAgICAvLyBGaW5kIGFsbCBtYXRjaGluZyBmaWxlcyBmb3IgdGhpcyBwYXR0ZXJuLlxuICAgIHJldHVybiBnbG9iLnN5bmMocGF0dGVybiwgb3B0aW9ucyk7XG4gIH0pO1xuICAvLyBGaWx0ZXIgcmVzdWx0IHNldD9cbiAgaWYgKG9wdGlvbnMuZmlsdGVyKSB7XG4gICAgbWF0Y2hlcyA9IG1hdGNoZXMuZmlsdGVyKGZ1bmN0aW9uKGZpbGVwYXRoKSB7XG4gICAgICBmaWxlcGF0aCA9IHBhdGguam9pbihvcHRpb25zLmN3ZCB8fCAnJywgZmlsZXBhdGgpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmZpbHRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHJldHVybiBvcHRpb25zLmZpbHRlcihmaWxlcGF0aCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGZpbGUgaXMgb2YgdGhlIHJpZ2h0IHR5cGUgYW5kIGV4aXN0cywgdGhpcyBzaG91bGQgd29yay5cbiAgICAgICAgICByZXR1cm4gZnMuc3RhdFN5bmMoZmlsZXBhdGgpW29wdGlvbnMuZmlsdGVyXSgpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoKGUpIHtcbiAgICAgICAgLy8gT3RoZXJ3aXNlLCBpdCdzIHByb2JhYmx5IG5vdCB0aGUgcmlnaHQgdHlwZS5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHJldHVybiBtYXRjaGVzO1xufTtcblxuLy8gQnVpbGQgYSBtdWx0aSB0YXNrIFwiZmlsZXNcIiBvYmplY3QgZHluYW1pY2FsbHkuXG5maWxlLmV4cGFuZE1hcHBpbmcgPSBmdW5jdGlvbihwYXR0ZXJucywgZGVzdEJhc2UsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe1xuICAgIHJlbmFtZTogZnVuY3Rpb24oZGVzdEJhc2UsIGRlc3RQYXRoKSB7XG4gICAgICByZXR1cm4gcGF0aC5qb2luKGRlc3RCYXNlIHx8ICcnLCBkZXN0UGF0aCk7XG4gICAgfVxuICB9LCBvcHRpb25zKTtcbiAgdmFyIGZpbGVzID0gW107XG4gIHZhciBmaWxlQnlEZXN0ID0ge307XG4gIC8vIEZpbmQgYWxsIGZpbGVzIG1hdGNoaW5nIHBhdHRlcm4sIHVzaW5nIHBhc3NlZC1pbiBvcHRpb25zLlxuICBmaWxlLmV4cGFuZChvcHRpb25zLCBwYXR0ZXJucykuZm9yRWFjaChmdW5jdGlvbihzcmMpIHtcbiAgICB2YXIgZGVzdFBhdGggPSBzcmM7XG4gICAgLy8gRmxhdHRlbj9cbiAgICBpZiAob3B0aW9ucy5mbGF0dGVuKSB7XG4gICAgICBkZXN0UGF0aCA9IHBhdGguYmFzZW5hbWUoZGVzdFBhdGgpO1xuICAgIH1cbiAgICAvLyBDaGFuZ2UgdGhlIGV4dGVuc2lvbj9cbiAgICBpZiAob3B0aW9ucy5leHQpIHtcbiAgICAgIGRlc3RQYXRoID0gZGVzdFBhdGgucmVwbGFjZSgvKFxcLlteXFwvXSopPyQvLCBvcHRpb25zLmV4dCk7XG4gICAgfVxuICAgIC8vIEdlbmVyYXRlIGRlc3RpbmF0aW9uIGZpbGVuYW1lLlxuICAgIHZhciBkZXN0ID0gb3B0aW9ucy5yZW5hbWUoZGVzdEJhc2UsIGRlc3RQYXRoLCBvcHRpb25zKTtcbiAgICAvLyBQcmVwZW5kIGN3ZCB0byBzcmMgcGF0aCBpZiBuZWNlc3NhcnkuXG4gICAgaWYgKG9wdGlvbnMuY3dkKSB7IHNyYyA9IHBhdGguam9pbihvcHRpb25zLmN3ZCwgc3JjKTsgfVxuICAgIC8vIE5vcm1hbGl6ZSBmaWxlcGF0aHMgdG8gYmUgdW5peC1zdHlsZS5cbiAgICBkZXN0ID0gZGVzdC5yZXBsYWNlKHBhdGhTZXBhcmF0b3JSZSwgJy8nKTtcbiAgICBzcmMgPSBzcmMucmVwbGFjZShwYXRoU2VwYXJhdG9yUmUsICcvJyk7XG4gICAgLy8gTWFwIGNvcnJlY3Qgc3JjIHBhdGggdG8gZGVzdCBwYXRoLlxuICAgIGlmIChmaWxlQnlEZXN0W2Rlc3RdKSB7XG4gICAgICAvLyBJZiBkZXN0IGFscmVhZHkgZXhpc3RzLCBwdXNoIHRoaXMgc3JjIG9udG8gdGhhdCBkZXN0J3Mgc3JjIGFycmF5LlxuICAgICAgZmlsZUJ5RGVzdFtkZXN0XS5zcmMucHVzaChzcmMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBPdGhlcndpc2UgY3JlYXRlIGEgbmV3IHNyYy1kZXN0IGZpbGUgbWFwcGluZyBvYmplY3QuXG4gICAgICBmaWxlcy5wdXNoKHtcbiAgICAgICAgc3JjOiBbc3JjXSxcbiAgICAgICAgZGVzdDogZGVzdCxcbiAgICAgIH0pO1xuICAgICAgLy8gQW5kIHN0b3JlIGEgcmVmZXJlbmNlIGZvciBsYXRlciB1c2UuXG4gICAgICBmaWxlQnlEZXN0W2Rlc3RdID0gZmlsZXNbZmlsZXMubGVuZ3RoIC0gMV07XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGZpbGVzO1xufTtcblxuLy8gcmV1c2luZyBiaXRzIG9mIGdydW50J3MgbXVsdGktdGFzayBzb3VyY2Ugbm9ybWFsaXphdGlvblxuZmlsZS5ub3JtYWxpemVGaWxlc0FycmF5ID0gZnVuY3Rpb24oZGF0YSkge1xuICB2YXIgZmlsZXMgPSBbXTtcblxuICBkYXRhLmZvckVhY2goZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIHByb3A7XG4gICAgaWYgKCdzcmMnIGluIG9iaiB8fCAnZGVzdCcgaW4gb2JqKSB7XG4gICAgICBmaWxlcy5wdXNoKG9iaik7XG4gICAgfVxuICB9KTtcblxuICBpZiAoZmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgZmlsZXMgPSBfKGZpbGVzKS5jaGFpbigpLmZvckVhY2goZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKCEoJ3NyYycgaW4gb2JqKSB8fCAhb2JqLnNyYykgeyByZXR1cm47IH1cbiAgICAvLyBOb3JtYWxpemUgLnNyYyBwcm9wZXJ0aWVzIHRvIGZsYXR0ZW5lZCBhcnJheS5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShvYmouc3JjKSkge1xuICAgICAgb2JqLnNyYyA9IGZsYXR0ZW4ob2JqLnNyYyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9iai5zcmMgPSBbb2JqLnNyY107XG4gICAgfVxuICB9KS5tYXAoZnVuY3Rpb24ob2JqKSB7XG4gICAgLy8gQnVpbGQgb3B0aW9ucyBvYmplY3QsIHJlbW92aW5nIHVud2FudGVkIHByb3BlcnRpZXMuXG4gICAgdmFyIGV4cGFuZE9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBvYmopO1xuICAgIGRlbGV0ZSBleHBhbmRPcHRpb25zLnNyYztcbiAgICBkZWxldGUgZXhwYW5kT3B0aW9ucy5kZXN0O1xuXG4gICAgLy8gRXhwYW5kIGZpbGUgbWFwcGluZ3MuXG4gICAgaWYgKG9iai5leHBhbmQpIHtcbiAgICAgIHJldHVybiBmaWxlLmV4cGFuZE1hcHBpbmcob2JqLnNyYywgb2JqLmRlc3QsIGV4cGFuZE9wdGlvbnMpLm1hcChmdW5jdGlvbihtYXBPYmopIHtcbiAgICAgICAgLy8gQ29weSBvYmogcHJvcGVydGllcyB0byByZXN1bHQuXG4gICAgICAgIHZhciByZXN1bHQgPSBPYmplY3QuYXNzaWduKHt9LCBvYmopO1xuICAgICAgICAvLyBNYWtlIGEgY2xvbmUgb2YgdGhlIG9yaWcgb2JqIGF2YWlsYWJsZS5cbiAgICAgICAgcmVzdWx0Lm9yaWcgPSBPYmplY3QuYXNzaWduKHt9LCBvYmopO1xuICAgICAgICAvLyBTZXQgLnNyYyBhbmQgLmRlc3QsIHByb2Nlc3NpbmcgYm90aCBhcyB0ZW1wbGF0ZXMuXG4gICAgICAgIHJlc3VsdC5zcmMgPSBtYXBPYmouc3JjO1xuICAgICAgICByZXN1bHQuZGVzdCA9IG1hcE9iai5kZXN0O1xuICAgICAgICAvLyBSZW1vdmUgdW53YW50ZWQgcHJvcGVydGllcy5cbiAgICAgICAgWydleHBhbmQnLCAnY3dkJywgJ2ZsYXR0ZW4nLCAncmVuYW1lJywgJ2V4dCddLmZvckVhY2goZnVuY3Rpb24ocHJvcCkge1xuICAgICAgICAgIGRlbGV0ZSByZXN1bHRbcHJvcF07XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQ29weSBvYmogcHJvcGVydGllcyB0byByZXN1bHQsIGFkZGluZyBhbiAub3JpZyBwcm9wZXJ0eS5cbiAgICB2YXIgcmVzdWx0ID0gT2JqZWN0LmFzc2lnbih7fSwgb2JqKTtcbiAgICAvLyBNYWtlIGEgY2xvbmUgb2YgdGhlIG9yaWcgb2JqIGF2YWlsYWJsZS5cbiAgICByZXN1bHQub3JpZyA9IE9iamVjdC5hc3NpZ24oe30sIG9iaik7XG5cbiAgICBpZiAoJ3NyYycgaW4gcmVzdWx0KSB7XG4gICAgICAvLyBFeHBvc2UgYW4gZXhwYW5kLW9uLWRlbWFuZCBnZXR0ZXIgbWV0aG9kIGFzIC5zcmMuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVzdWx0LCAnc3JjJywge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uIGZuKCkge1xuICAgICAgICAgIHZhciBzcmM7XG4gICAgICAgICAgaWYgKCEoJ3Jlc3VsdCcgaW4gZm4pKSB7XG4gICAgICAgICAgICBzcmMgPSBvYmouc3JjO1xuICAgICAgICAgICAgLy8gSWYgc3JjIGlzIGFuIGFycmF5LCBmbGF0dGVuIGl0LiBPdGhlcndpc2UsIG1ha2UgaXQgaW50byBhbiBhcnJheS5cbiAgICAgICAgICAgIHNyYyA9IEFycmF5LmlzQXJyYXkoc3JjKSA/IGZsYXR0ZW4oc3JjKSA6IFtzcmNdO1xuICAgICAgICAgICAgLy8gRXhwYW5kIHNyYyBmaWxlcywgbWVtb2l6aW5nIHJlc3VsdC5cbiAgICAgICAgICAgIGZuLnJlc3VsdCA9IGZpbGUuZXhwYW5kKGV4cGFuZE9wdGlvbnMsIHNyYyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmbi5yZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICgnZGVzdCcgaW4gcmVzdWx0KSB7XG4gICAgICByZXN1bHQuZGVzdCA9IG9iai5kZXN0O1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0pLmZsYXR0ZW4oKS52YWx1ZSgpO1xuXG4gIHJldHVybiBmaWxlcztcbn07XG4iLAogICAgIi8qKlxuICogYXJjaGl2ZXItdXRpbHNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUgQ2hyaXMgVGFsa2luZ3Rvbi5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hcmNoaXZlcmpzL2FyY2hpdmVyLXV0aWxzL2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAqL1xudmFyIGZzID0gcmVxdWlyZSgnZ3JhY2VmdWwtZnMnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xudmFyIGlzU3RyZWFtID0gcmVxdWlyZSgnaXMtc3RyZWFtJyk7XG52YXIgbGF6eXN0cmVhbSA9IHJlcXVpcmUoJ2xhenlzdHJlYW0nKTtcbnZhciBub3JtYWxpemVQYXRoID0gcmVxdWlyZSgnbm9ybWFsaXplLXBhdGgnKTtcbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoJ2xvZGFzaC9kZWZhdWx0cycpO1xuXG52YXIgU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJykuU3RyZWFtO1xudmFyIFBhc3NUaHJvdWdoID0gcmVxdWlyZSgncmVhZGFibGUtc3RyZWFtJykuUGFzc1Rocm91Z2g7XG5cbnZhciB1dGlscyA9IG1vZHVsZS5leHBvcnRzID0ge307XG51dGlscy5maWxlID0gcmVxdWlyZSgnLi9maWxlLmpzJyk7XG5cbnV0aWxzLmNvbGxlY3RTdHJlYW0gPSBmdW5jdGlvbihzb3VyY2UsIGNhbGxiYWNrKSB7XG4gIHZhciBjb2xsZWN0aW9uID0gW107XG4gIHZhciBzaXplID0gMDtcblxuICBzb3VyY2Uub24oJ2Vycm9yJywgY2FsbGJhY2spO1xuXG4gIHNvdXJjZS5vbignZGF0YScsIGZ1bmN0aW9uKGNodW5rKSB7XG4gICAgY29sbGVjdGlvbi5wdXNoKGNodW5rKTtcbiAgICBzaXplICs9IGNodW5rLmxlbmd0aDtcbiAgfSk7XG5cbiAgc291cmNlLm9uKCdlbmQnLCBmdW5jdGlvbigpIHtcbiAgICB2YXIgYnVmID0gQnVmZmVyLmFsbG9jKHNpemUpO1xuICAgIHZhciBvZmZzZXQgPSAwO1xuXG4gICAgY29sbGVjdGlvbi5mb3JFYWNoKGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgIGRhdGEuY29weShidWYsIG9mZnNldCk7XG4gICAgICBvZmZzZXQgKz0gZGF0YS5sZW5ndGg7XG4gICAgfSk7XG5cbiAgICBjYWxsYmFjayhudWxsLCBidWYpO1xuICB9KTtcbn07XG5cbnV0aWxzLmRhdGVpZnkgPSBmdW5jdGlvbihkYXRlaXNoKSB7XG4gIGRhdGVpc2ggPSBkYXRlaXNoIHx8IG5ldyBEYXRlKCk7XG5cbiAgaWYgKGRhdGVpc2ggaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgZGF0ZWlzaCA9IGRhdGVpc2g7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGRhdGVpc2ggPT09ICdzdHJpbmcnKSB7XG4gICAgZGF0ZWlzaCA9IG5ldyBEYXRlKGRhdGVpc2gpO1xuICB9IGVsc2Uge1xuICAgIGRhdGVpc2ggPSBuZXcgRGF0ZSgpO1xuICB9XG5cbiAgcmV0dXJuIGRhdGVpc2g7XG59O1xuXG4vLyB0aGlzIGlzIHNsaWdodGx5IGRpZmZlcmVudCBmcm9tIGxvZGFzaCB2ZXJzaW9uXG51dGlscy5kZWZhdWx0cyA9IGZ1bmN0aW9uKG9iamVjdCwgc291cmNlLCBndWFyZCkge1xuICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgYXJnc1swXSA9IGFyZ3NbMF0gfHwge307XG5cbiAgcmV0dXJuIGRlZmF1bHRzKC4uLmFyZ3MpO1xufTtcblxudXRpbHMuaXNTdHJlYW0gPSBmdW5jdGlvbihzb3VyY2UpIHtcbiAgcmV0dXJuIGlzU3RyZWFtKHNvdXJjZSk7XG59O1xuXG51dGlscy5sYXp5UmVhZFN0cmVhbSA9IGZ1bmN0aW9uKGZpbGVwYXRoKSB7XG4gIHJldHVybiBuZXcgbGF6eXN0cmVhbS5SZWFkYWJsZShmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZnMuY3JlYXRlUmVhZFN0cmVhbShmaWxlcGF0aCk7XG4gIH0pO1xufTtcblxudXRpbHMubm9ybWFsaXplSW5wdXRTb3VyY2UgPSBmdW5jdGlvbihzb3VyY2UpIHtcbiAgaWYgKHNvdXJjZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBCdWZmZXIuYWxsb2MoMCk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHNvdXJjZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oc291cmNlKTtcbiAgfSBlbHNlIGlmICh1dGlscy5pc1N0cmVhbShzb3VyY2UpKSB7XG4gICAgLy8gQWx3YXlzIHBpcGUgdGhyb3VnaCBhIFBhc3NUaHJvdWdoIHN0cmVhbSB0byBndWFyYW50ZWUgcGF1c2luZyB0aGUgc3RyZWFtIGlmIGl0J3MgYWxyZWFkeSBmbG93aW5nLFxuICAgIC8vIHNpbmNlIGl0IHdpbGwgb25seSBiZSBwcm9jZXNzZWQgaW4gYSAoZGlzdGFudCkgZnV0dXJlIGl0ZXJhdGlvbiBvZiB0aGUgZXZlbnQgbG9vcCwgYW5kIHdpbGwgbG9zZVxuICAgIC8vIGRhdGEgaWYgYWxyZWFkeSBmbG93aW5nIG5vdy5cbiAgICByZXR1cm4gc291cmNlLnBpcGUobmV3IFBhc3NUaHJvdWdoKCkpO1xuICB9XG5cbiAgcmV0dXJuIHNvdXJjZTtcbn07XG5cbnV0aWxzLnNhbml0aXplUGF0aCA9IGZ1bmN0aW9uKGZpbGVwYXRoKSB7XG4gIHJldHVybiBub3JtYWxpemVQYXRoKGZpbGVwYXRoLCBmYWxzZSkucmVwbGFjZSgvXlxcdys6LywgJycpLnJlcGxhY2UoL14oXFwuXFwuXFwvfFxcLykrLywgJycpO1xufTtcblxudXRpbHMudHJhaWxpbmdTbGFzaEl0ID0gZnVuY3Rpb24oc3RyKSB7XG4gIHJldHVybiBzdHIuc2xpY2UoLTEpICE9PSAnLycgPyBzdHIgKyAnLycgOiBzdHI7XG59O1xuXG51dGlscy51bml4aWZ5UGF0aCA9IGZ1bmN0aW9uKGZpbGVwYXRoKSB7XG4gIHJldHVybiBub3JtYWxpemVQYXRoKGZpbGVwYXRoLCBmYWxzZSkucmVwbGFjZSgvXlxcdys6LywgJycpO1xufTtcblxudXRpbHMud2Fsa2RpciA9IGZ1bmN0aW9uKGRpcnBhdGgsIGJhc2UsIGNhbGxiYWNrKSB7XG4gIHZhciByZXN1bHRzID0gW107XG5cbiAgaWYgKHR5cGVvZiBiYXNlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2FsbGJhY2sgPSBiYXNlO1xuICAgIGJhc2UgPSBkaXJwYXRoO1xuICB9XG5cbiAgZnMucmVhZGRpcihkaXJwYXRoLCBmdW5jdGlvbihlcnIsIGxpc3QpIHtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGZpbGU7XG4gICAgdmFyIGZpbGVwYXRoO1xuXG4gICAgaWYgKGVycikge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgfVxuXG4gICAgKGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICBmaWxlID0gbGlzdFtpKytdO1xuXG4gICAgICBpZiAoIWZpbGUpIHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIHJlc3VsdHMpO1xuICAgICAgfVxuXG4gICAgICBmaWxlcGF0aCA9IHBhdGguam9pbihkaXJwYXRoLCBmaWxlKTtcblxuICAgICAgZnMuc3RhdChmaWxlcGF0aCwgZnVuY3Rpb24oZXJyLCBzdGF0cykge1xuICAgICAgICByZXN1bHRzLnB1c2goe1xuICAgICAgICAgIHBhdGg6IGZpbGVwYXRoLFxuICAgICAgICAgIHJlbGF0aXZlOiBwYXRoLnJlbGF0aXZlKGJhc2UsIGZpbGVwYXRoKS5yZXBsYWNlKC9cXFxcL2csICcvJyksXG4gICAgICAgICAgc3RhdHM6IHN0YXRzXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChzdGF0cyAmJiBzdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgICAgdXRpbHMud2Fsa2RpcihmaWxlcGF0aCwgYmFzZSwgZnVuY3Rpb24oZXJyLCByZXMpIHtcblx0ICAgIGlmKGVycil7XG5cdCAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuXHQgICAgfVxuXG4gICAgICAgICAgICByZXMuZm9yRWFjaChmdW5jdGlvbihkaXJFbnRyeSkge1xuICAgICAgICAgICAgICByZXN1bHRzLnB1c2goZGlyRW50cnkpO1xuICAgICAgICAgICAgfSk7XG5cdFx0ICBcbiAgICAgICAgICAgIG5leHQoKTsgIFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSkoKTtcbiAgfSk7XG59O1xuIiwKICAgICIvKipcbiAqIEFyY2hpdmVyIENvcmVcbiAqXG4gKiBAaWdub3JlXG4gKiBAbGljZW5zZSBbTUlUXXtAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXJjaGl2ZXJqcy9ub2RlLWFyY2hpdmVyL2Jsb2IvbWFzdGVyL0xJQ0VOU0V9XG4gKiBAY29weXJpZ2h0IChjKSAyMDEyLTIwMTQgQ2hyaXMgVGFsa2luZ3RvbiwgY29udHJpYnV0b3JzLlxuICovXG5cbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuXG5jb25zdCBFUlJPUl9DT0RFUyA9IHtcbiAgJ0FCT1JURUQnOiAnYXJjaGl2ZSB3YXMgYWJvcnRlZCcsXG4gICdESVJFQ1RPUllESVJQQVRIUkVRVUlSRUQnOiAnZGlyZXRvcnkgZGlycGF0aCBhcmd1bWVudCBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyB2YWx1ZScsXG4gICdESVJFQ1RPUllGVU5DVElPTklOVkFMSUREQVRBJzogJ2ludmFsaWQgZGF0YSByZXR1cm5lZCBieSBkaXJlY3RvcnkgY3VzdG9tIGRhdGEgZnVuY3Rpb24nLFxuICAnRU5UUllOQU1FUkVRVUlSRUQnOiAnZW50cnkgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyB2YWx1ZScsXG4gICdGSUxFRklMRVBBVEhSRVFVSVJFRCc6ICdmaWxlIGZpbGVwYXRoIGFyZ3VtZW50IG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIHZhbHVlJyxcbiAgJ0ZJTkFMSVpJTkcnOiAnYXJjaGl2ZSBhbHJlYWR5IGZpbmFsaXppbmcnLFxuICAnUVVFVUVDTE9TRUQnOiAncXVldWUgY2xvc2VkJyxcbiAgJ05PRU5ETUVUSE9EJzogJ25vIHN1aXRhYmxlIGZpbmFsaXplL2VuZCBtZXRob2QgZGVmaW5lZCBieSBtb2R1bGUnLFxuICAnRElSRUNUT1JZTk9UU1VQUE9SVEVEJzogJ3N1cHBvcnQgZm9yIGRpcmVjdG9yeSBlbnRyaWVzIG5vdCBkZWZpbmVkIGJ5IG1vZHVsZScsXG4gICdGT1JNQVRTRVQnOiAnYXJjaGl2ZSBmb3JtYXQgYWxyZWFkeSBzZXQnLFxuICAnSU5QVVRTVEVBTUJVRkZFUlJFUVVJUkVEJzogJ2lucHV0IHNvdXJjZSBtdXN0IGJlIHZhbGlkIFN0cmVhbSBvciBCdWZmZXIgaW5zdGFuY2UnLFxuICAnTU9EVUxFU0VUJzogJ21vZHVsZSBhbHJlYWR5IHNldCcsXG4gICdTWU1MSU5LTk9UU1VQUE9SVEVEJzogJ3N1cHBvcnQgZm9yIHN5bWxpbmsgZW50cmllcyBub3QgZGVmaW5lZCBieSBtb2R1bGUnLFxuICAnU1lNTElOS0ZJTEVQQVRIUkVRVUlSRUQnOiAnc3ltbGluayBmaWxlcGF0aCBhcmd1bWVudCBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyB2YWx1ZScsXG4gICdTWU1MSU5LVEFSR0VUUkVRVUlSRUQnOiAnc3ltbGluayB0YXJnZXQgYXJndW1lbnQgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcgdmFsdWUnLFxuICAnRU5UUllOT1RTVVBQT1JURUQnOiAnZW50cnkgbm90IHN1cHBvcnRlZCdcbn07XG5cbmZ1bmN0aW9uIEFyY2hpdmVyRXJyb3IoY29kZSwgZGF0YSkge1xuICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgLy90aGlzLm5hbWUgPSB0aGlzLmNvbnN0cnVjdG9yLm5hbWU7XG4gIHRoaXMubWVzc2FnZSA9IEVSUk9SX0NPREVTW2NvZGVdIHx8IGNvZGU7XG4gIHRoaXMuY29kZSA9IGNvZGU7XG4gIHRoaXMuZGF0YSA9IGRhdGE7XG59XG5cbnV0aWwuaW5oZXJpdHMoQXJjaGl2ZXJFcnJvciwgRXJyb3IpO1xuXG5leHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBBcmNoaXZlckVycm9yOyIsCiAgICAiLyoqXG4gKiBBcmNoaXZlciBDb3JlXG4gKlxuICogQGlnbm9yZVxuICogQGxpY2Vuc2UgW01JVF17QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FyY2hpdmVyanMvbm9kZS1hcmNoaXZlci9ibG9iL21hc3Rlci9MSUNFTlNFfVxuICogQGNvcHlyaWdodCAoYykgMjAxMi0yMDE0IENocmlzIFRhbGtpbmd0b24sIGNvbnRyaWJ1dG9ycy5cbiAqL1xudmFyIGZzID0gcmVxdWlyZSgnZnMnKTtcbnZhciBnbG9iID0gcmVxdWlyZSgncmVhZGRpci1nbG9iJyk7XG52YXIgYXN5bmMgPSByZXF1aXJlKCdhc3luYycpO1xudmFyIHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJ2FyY2hpdmVyLXV0aWxzJyk7XG5cbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ3V0aWwnKS5pbmhlcml0cztcbnZhciBBcmNoaXZlckVycm9yID0gcmVxdWlyZSgnLi9lcnJvcicpO1xudmFyIFRyYW5zZm9ybSA9IHJlcXVpcmUoJ3JlYWRhYmxlLXN0cmVhbScpLlRyYW5zZm9ybTtcblxudmFyIHdpbjMyID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJztcblxuLyoqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7U3RyaW5nfSBmb3JtYXQgVGhlIGFyY2hpdmUgZm9ybWF0IHRvIHVzZS5cbiAqIEBwYXJhbSB7KENvcmVPcHRpb25zfFRyYW5zZm9ybU9wdGlvbnMpfSBvcHRpb25zIFNlZSBhbHNvIHtAbGluayBaaXBPcHRpb25zfSBhbmQge0BsaW5rIFRhck9wdGlvbnN9LlxuICovXG52YXIgQXJjaGl2ZXIgPSBmdW5jdGlvbihmb3JtYXQsIG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEFyY2hpdmVyKSkge1xuICAgIHJldHVybiBuZXcgQXJjaGl2ZXIoZm9ybWF0LCBvcHRpb25zKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgZm9ybWF0ICE9PSAnc3RyaW5nJykge1xuICAgIG9wdGlvbnMgPSBmb3JtYXQ7XG4gICAgZm9ybWF0ID0gJ3ppcCc7XG4gIH1cblxuICBvcHRpb25zID0gdGhpcy5vcHRpb25zID0gdXRpbC5kZWZhdWx0cyhvcHRpb25zLCB7XG4gICAgaGlnaFdhdGVyTWFyazogMTAyNCAqIDEwMjQsXG4gICAgc3RhdENvbmN1cnJlbmN5OiA0XG4gIH0pO1xuXG4gIFRyYW5zZm9ybS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXG4gIHRoaXMuX2Zvcm1hdCA9IGZhbHNlO1xuICB0aGlzLl9tb2R1bGUgPSBmYWxzZTtcbiAgdGhpcy5fcGVuZGluZyA9IDA7XG4gIHRoaXMuX3BvaW50ZXIgPSAwO1xuXG4gIHRoaXMuX2VudHJpZXNDb3VudCA9IDA7XG4gIHRoaXMuX2VudHJpZXNQcm9jZXNzZWRDb3VudCA9IDA7XG4gIHRoaXMuX2ZzRW50cmllc1RvdGFsQnl0ZXMgPSAwO1xuICB0aGlzLl9mc0VudHJpZXNQcm9jZXNzZWRCeXRlcyA9IDA7XG5cbiAgdGhpcy5fcXVldWUgPSBhc3luYy5xdWV1ZSh0aGlzLl9vblF1ZXVlVGFzay5iaW5kKHRoaXMpLCAxKTtcbiAgdGhpcy5fcXVldWUuZHJhaW4odGhpcy5fb25RdWV1ZURyYWluLmJpbmQodGhpcykpO1xuXG4gIHRoaXMuX3N0YXRRdWV1ZSA9IGFzeW5jLnF1ZXVlKHRoaXMuX29uU3RhdFF1ZXVlVGFzay5iaW5kKHRoaXMpLCBvcHRpb25zLnN0YXRDb25jdXJyZW5jeSk7XG4gIHRoaXMuX3N0YXRRdWV1ZS5kcmFpbih0aGlzLl9vblF1ZXVlRHJhaW4uYmluZCh0aGlzKSk7XG5cbiAgdGhpcy5fc3RhdGUgPSB7XG4gICAgYWJvcnRlZDogZmFsc2UsXG4gICAgZmluYWxpemU6IGZhbHNlLFxuICAgIGZpbmFsaXppbmc6IGZhbHNlLFxuICAgIGZpbmFsaXplZDogZmFsc2UsXG4gICAgbW9kdWxlUGlwZWQ6IGZhbHNlXG4gIH07XG5cbiAgdGhpcy5fc3RyZWFtcyA9IFtdO1xufTtcblxuaW5oZXJpdHMoQXJjaGl2ZXIsIFRyYW5zZm9ybSk7XG5cbi8qKlxuICogSW50ZXJuYWwgbG9naWMgZm9yIGBhYm9ydGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4gdm9pZFxuICovXG5BcmNoaXZlci5wcm90b3R5cGUuX2Fib3J0ID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX3N0YXRlLmFib3J0ZWQgPSB0cnVlO1xuICB0aGlzLl9xdWV1ZS5raWxsKCk7XG4gIHRoaXMuX3N0YXRRdWV1ZS5raWxsKCk7XG5cbiAgaWYgKHRoaXMuX3F1ZXVlLmlkbGUoKSkge1xuICAgIHRoaXMuX3NodXRkb3duKCk7XG4gIH1cbn07XG5cbi8qKlxuICogSW50ZXJuYWwgaGVscGVyIGZvciBhcHBlbmRpbmcgZmlsZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSAge1N0cmluZ30gZmlsZXBhdGggVGhlIHNvdXJjZSBmaWxlcGF0aC5cbiAqIEBwYXJhbSAge0VudHJ5RGF0YX0gZGF0YSBUaGUgZW50cnkgZGF0YS5cbiAqIEByZXR1cm4gdm9pZFxuICovXG5BcmNoaXZlci5wcm90b3R5cGUuX2FwcGVuZCA9IGZ1bmN0aW9uKGZpbGVwYXRoLCBkYXRhKSB7XG4gIGRhdGEgPSBkYXRhIHx8IHt9O1xuXG4gIHZhciB0YXNrID0ge1xuICAgIHNvdXJjZTogbnVsbCxcbiAgICBmaWxlcGF0aDogZmlsZXBhdGhcbiAgfTtcblxuICBpZiAoIWRhdGEubmFtZSkge1xuICAgIGRhdGEubmFtZSA9IGZpbGVwYXRoO1xuICB9XG5cbiAgZGF0YS5zb3VyY2VQYXRoID0gZmlsZXBhdGg7XG4gIHRhc2suZGF0YSA9IGRhdGE7XG4gIHRoaXMuX2VudHJpZXNDb3VudCsrO1xuXG4gIGlmIChkYXRhLnN0YXRzICYmIGRhdGEuc3RhdHMgaW5zdGFuY2VvZiBmcy5TdGF0cykge1xuICAgIHRhc2sgPSB0aGlzLl91cGRhdGVRdWV1ZVRhc2tXaXRoU3RhdHModGFzaywgZGF0YS5zdGF0cyk7XG4gICAgaWYgKHRhc2spIHtcbiAgICAgIGlmIChkYXRhLnN0YXRzLnNpemUpIHtcbiAgICAgICAgdGhpcy5fZnNFbnRyaWVzVG90YWxCeXRlcyArPSBkYXRhLnN0YXRzLnNpemU7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3F1ZXVlLnB1c2godGFzayk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRoaXMuX3N0YXRRdWV1ZS5wdXNoKHRhc2spO1xuICB9XG59O1xuXG4vKipcbiAqIEludGVybmFsIGxvZ2ljIGZvciBgZmluYWxpemVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHZvaWRcbiAqL1xuQXJjaGl2ZXIucHJvdG90eXBlLl9maW5hbGl6ZSA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy5fc3RhdGUuZmluYWxpemluZyB8fCB0aGlzLl9zdGF0ZS5maW5hbGl6ZWQgfHwgdGhpcy5fc3RhdGUuYWJvcnRlZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRoaXMuX3N0YXRlLmZpbmFsaXppbmcgPSB0cnVlO1xuXG4gIHRoaXMuX21vZHVsZUZpbmFsaXplKCk7XG5cbiAgdGhpcy5fc3RhdGUuZmluYWxpemluZyA9IGZhbHNlO1xuICB0aGlzLl9zdGF0ZS5maW5hbGl6ZWQgPSB0cnVlO1xufTtcblxuLyoqXG4gKiBDaGVja3MgdGhlIHZhcmlvdXMgc3RhdGUgdmFyaWFibGVzIHRvIGRldGVybWluZSBpZiB3ZSBjYW4gYGZpbmFsaXplYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqL1xuQXJjaGl2ZXIucHJvdG90eXBlLl9tYXliZUZpbmFsaXplID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLl9zdGF0ZS5maW5hbGl6aW5nIHx8IHRoaXMuX3N0YXRlLmZpbmFsaXplZCB8fCB0aGlzLl9zdGF0ZS5hYm9ydGVkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHRoaXMuX3N0YXRlLmZpbmFsaXplICYmIHRoaXMuX3BlbmRpbmcgPT09IDAgJiYgdGhpcy5fcXVldWUuaWRsZSgpICYmIHRoaXMuX3N0YXRRdWV1ZS5pZGxlKCkpIHtcbiAgICB0aGlzLl9maW5hbGl6ZSgpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBBcHBlbmRzIGFuIGVudHJ5IHRvIHRoZSBtb2R1bGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBmaXJlcyAgQXJjaGl2ZXIjZW50cnlcbiAqIEBwYXJhbSAgeyhCdWZmZXJ8U3RyZWFtKX0gc291cmNlXG4gKiBAcGFyYW0gIHtFbnRyeURhdGF9IGRhdGFcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB2b2lkXG4gKi9cbkFyY2hpdmVyLnByb3RvdHlwZS5fbW9kdWxlQXBwZW5kID0gZnVuY3Rpb24oc291cmNlLCBkYXRhLCBjYWxsYmFjaykge1xuICBpZiAodGhpcy5fc3RhdGUuYWJvcnRlZCkge1xuICAgIGNhbGxiYWNrKCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdGhpcy5fbW9kdWxlLmFwcGVuZChzb3VyY2UsIGRhdGEsIGZ1bmN0aW9uKGVycikge1xuICAgIHRoaXMuX3Rhc2sgPSBudWxsO1xuXG4gICAgaWYgKHRoaXMuX3N0YXRlLmFib3J0ZWQpIHtcbiAgICAgIHRoaXMuX3NodXRkb3duKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGVycikge1xuICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIGVycik7XG4gICAgICBzZXRJbW1lZGlhdGUoY2FsbGJhY2spO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gdGhlIGVudHJ5J3MgaW5wdXQgaGFzIGJlZW4gcHJvY2Vzc2VkIGFuZCBhcHBlbmRlZCB0byB0aGUgYXJjaGl2ZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBBcmNoaXZlciNlbnRyeVxuICAgICAqIEB0eXBlIHtFbnRyeURhdGF9XG4gICAgICovXG4gICAgdGhpcy5lbWl0KCdlbnRyeScsIGRhdGEpO1xuICAgIHRoaXMuX2VudHJpZXNQcm9jZXNzZWRDb3VudCsrO1xuXG4gICAgaWYgKGRhdGEuc3RhdHMgJiYgZGF0YS5zdGF0cy5zaXplKSB7XG4gICAgICB0aGlzLl9mc0VudHJpZXNQcm9jZXNzZWRCeXRlcyArPSBkYXRhLnN0YXRzLnNpemU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGV2ZW50IEFyY2hpdmVyI3Byb2dyZXNzXG4gICAgICogQHR5cGUge1Byb2dyZXNzRGF0YX1cbiAgICAgKi9cbiAgICB0aGlzLmVtaXQoJ3Byb2dyZXNzJywge1xuICAgICAgZW50cmllczoge1xuICAgICAgICB0b3RhbDogdGhpcy5fZW50cmllc0NvdW50LFxuICAgICAgICBwcm9jZXNzZWQ6IHRoaXMuX2VudHJpZXNQcm9jZXNzZWRDb3VudFxuICAgICAgfSxcbiAgICAgIGZzOiB7XG4gICAgICAgIHRvdGFsQnl0ZXM6IHRoaXMuX2ZzRW50cmllc1RvdGFsQnl0ZXMsXG4gICAgICAgIHByb2Nlc3NlZEJ5dGVzOiB0aGlzLl9mc0VudHJpZXNQcm9jZXNzZWRCeXRlc1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgc2V0SW1tZWRpYXRlKGNhbGxiYWNrKTtcbiAgfS5iaW5kKHRoaXMpKTtcbn07XG5cbi8qKlxuICogRmluYWxpemVzIHRoZSBtb2R1bGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4gdm9pZFxuICovXG5BcmNoaXZlci5wcm90b3R5cGUuX21vZHVsZUZpbmFsaXplID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0eXBlb2YgdGhpcy5fbW9kdWxlLmZpbmFsaXplID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhpcy5fbW9kdWxlLmZpbmFsaXplKCk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMuX21vZHVsZS5lbmQgPT09ICdmdW5jdGlvbicpIHtcbiAgICB0aGlzLl9tb2R1bGUuZW5kKCk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5lbWl0KCdlcnJvcicsIG5ldyBBcmNoaXZlckVycm9yKCdOT0VORE1FVEhPRCcpKTtcbiAgfVxufTtcblxuLyoqXG4gKiBQaXBlcyB0aGUgbW9kdWxlIHRvIG91ciBpbnRlcm5hbCBzdHJlYW0gd2l0aCBlcnJvciBidWJibGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB2b2lkXG4gKi9cbkFyY2hpdmVyLnByb3RvdHlwZS5fbW9kdWxlUGlwZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9tb2R1bGUub24oJ2Vycm9yJywgdGhpcy5fb25Nb2R1bGVFcnJvci5iaW5kKHRoaXMpKTtcbiAgdGhpcy5fbW9kdWxlLnBpcGUodGhpcyk7XG4gIHRoaXMuX3N0YXRlLm1vZHVsZVBpcGVkID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgY3VycmVudCBtb2R1bGUgc3VwcG9ydHMgYSBkZWZpbmVkIGZlYXR1cmUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSAge1N0cmluZ30ga2V5XG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICovXG5BcmNoaXZlci5wcm90b3R5cGUuX21vZHVsZVN1cHBvcnRzID0gZnVuY3Rpb24oa2V5KSB7XG4gIGlmICghdGhpcy5fbW9kdWxlLnN1cHBvcnRzIHx8ICF0aGlzLl9tb2R1bGUuc3VwcG9ydHNba2V5XSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLl9tb2R1bGUuc3VwcG9ydHNba2V5XTtcbn07XG5cbi8qKlxuICogVW5waXBlcyB0aGUgbW9kdWxlIGZyb20gb3VyIGludGVybmFsIHN0cmVhbS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB2b2lkXG4gKi9cbkFyY2hpdmVyLnByb3RvdHlwZS5fbW9kdWxlVW5waXBlID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX21vZHVsZS51bnBpcGUodGhpcyk7XG4gIHRoaXMuX3N0YXRlLm1vZHVsZVBpcGVkID0gZmFsc2U7XG59O1xuXG4vKipcbiAqIE5vcm1hbGl6ZXMgZW50cnkgZGF0YSB3aXRoIGZhbGxiYWNrcyBmb3Iga2V5IHByb3BlcnRpZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSAge09iamVjdH0gZGF0YVxuICogQHBhcmFtICB7ZnMuU3RhdHN9IHN0YXRzXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbkFyY2hpdmVyLnByb3RvdHlwZS5fbm9ybWFsaXplRW50cnlEYXRhID0gZnVuY3Rpb24oZGF0YSwgc3RhdHMpIHtcbiAgZGF0YSA9IHV0aWwuZGVmYXVsdHMoZGF0YSwge1xuICAgIHR5cGU6ICdmaWxlJyxcbiAgICBuYW1lOiBudWxsLFxuICAgIGRhdGU6IG51bGwsXG4gICAgbW9kZTogbnVsbCxcbiAgICBwcmVmaXg6IG51bGwsXG4gICAgc291cmNlUGF0aDogbnVsbCxcbiAgICBzdGF0czogZmFsc2VcbiAgfSk7XG5cbiAgaWYgKHN0YXRzICYmIGRhdGEuc3RhdHMgPT09IGZhbHNlKSB7XG4gICAgZGF0YS5zdGF0cyA9IHN0YXRzO1xuICB9XG5cbiAgdmFyIGlzRGlyID0gZGF0YS50eXBlID09PSAnZGlyZWN0b3J5JztcblxuICBpZiAoZGF0YS5uYW1lKSB7XG4gICAgaWYgKHR5cGVvZiBkYXRhLnByZWZpeCA9PT0gJ3N0cmluZycgJiYgJycgIT09IGRhdGEucHJlZml4KSB7XG4gICAgICBkYXRhLm5hbWUgPSBkYXRhLnByZWZpeCArICcvJyArIGRhdGEubmFtZTtcbiAgICAgIGRhdGEucHJlZml4ID0gbnVsbDtcbiAgICB9XG5cbiAgICBkYXRhLm5hbWUgPSB1dGlsLnNhbml0aXplUGF0aChkYXRhLm5hbWUpO1xuXG4gICAgaWYgKGRhdGEudHlwZSAhPT0gJ3N5bWxpbmsnICYmIGRhdGEubmFtZS5zbGljZSgtMSkgPT09ICcvJykge1xuICAgICAgaXNEaXIgPSB0cnVlO1xuICAgICAgZGF0YS50eXBlID0gJ2RpcmVjdG9yeSc7XG4gICAgfSBlbHNlIGlmIChpc0Rpcikge1xuICAgICAgZGF0YS5uYW1lICs9ICcvJztcbiAgICB9XG4gIH1cblxuICAvLyA1MTEgPT09IDA3Nzc7IDQ5MyA9PT0gMDc1NTsgNDM4ID09PSAwNjY2OyA0MjAgPT09IDA2NDRcbiAgaWYgKHR5cGVvZiBkYXRhLm1vZGUgPT09ICdudW1iZXInKSB7XG4gICAgaWYgKHdpbjMyKSB7XG4gICAgICBkYXRhLm1vZGUgJj0gNTExO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXRhLm1vZGUgJj0gNDA5NVxuICAgIH1cbiAgfSBlbHNlIGlmIChkYXRhLnN0YXRzICYmIGRhdGEubW9kZSA9PT0gbnVsbCkge1xuICAgIGlmICh3aW4zMikge1xuICAgICAgZGF0YS5tb2RlID0gZGF0YS5zdGF0cy5tb2RlICYgNTExO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXRhLm1vZGUgPSBkYXRhLnN0YXRzLm1vZGUgJiA0MDk1O1xuICAgIH1cblxuICAgIC8vIHN0YXQgaXNuJ3QgcmVsaWFibGUgb24gd2luZG93czsgZm9yY2UgMDc1NSBmb3IgZGlyXG4gICAgaWYgKHdpbjMyICYmIGlzRGlyKSB7XG4gICAgICBkYXRhLm1vZGUgPSA0OTM7XG4gICAgfVxuICB9IGVsc2UgaWYgKGRhdGEubW9kZSA9PT0gbnVsbCkge1xuICAgIGRhdGEubW9kZSA9IGlzRGlyID8gNDkzIDogNDIwO1xuICB9XG5cbiAgaWYgKGRhdGEuc3RhdHMgJiYgZGF0YS5kYXRlID09PSBudWxsKSB7XG4gICAgZGF0YS5kYXRlID0gZGF0YS5zdGF0cy5tdGltZTtcbiAgfSBlbHNlIHtcbiAgICBkYXRhLmRhdGUgPSB1dGlsLmRhdGVpZnkoZGF0YS5kYXRlKTtcbiAgfVxuXG4gIHJldHVybiBkYXRhO1xufTtcblxuLyoqXG4gKiBFcnJvciBsaXN0ZW5lciB0aGF0IHJlLWVtaXRzIGVycm9yIG9uIHRvIG91ciBpbnRlcm5hbCBzdHJlYW0uXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSAge0Vycm9yfSBlcnJcbiAqIEByZXR1cm4gdm9pZFxuICovXG5BcmNoaXZlci5wcm90b3R5cGUuX29uTW9kdWxlRXJyb3IgPSBmdW5jdGlvbihlcnIpIHtcbiAgLyoqXG4gICAqIEBldmVudCBBcmNoaXZlciNlcnJvclxuICAgKiBAdHlwZSB7RXJyb3JEYXRhfVxuICAgKi9cbiAgdGhpcy5lbWl0KCdlcnJvcicsIGVycik7XG59O1xuXG4vKipcbiAqIENoZWNrcyB0aGUgdmFyaW91cyBzdGF0ZSB2YXJpYWJsZXMgYWZ0ZXIgcXVldWUgaGFzIGRyYWluZWQgdG8gZGV0ZXJtaW5lIGlmXG4gKiB3ZSBuZWVkIHRvIGBmaW5hbGl6ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4gdm9pZFxuICovXG5BcmNoaXZlci5wcm90b3R5cGUuX29uUXVldWVEcmFpbiA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy5fc3RhdGUuZmluYWxpemluZyB8fCB0aGlzLl9zdGF0ZS5maW5hbGl6ZWQgfHwgdGhpcy5fc3RhdGUuYWJvcnRlZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh0aGlzLl9zdGF0ZS5maW5hbGl6ZSAmJiB0aGlzLl9wZW5kaW5nID09PSAwICYmIHRoaXMuX3F1ZXVlLmlkbGUoKSAmJiB0aGlzLl9zdGF0UXVldWUuaWRsZSgpKSB7XG4gICAgdGhpcy5fZmluYWxpemUoKTtcbiAgfVxufTtcblxuLyoqXG4gKiBBcHBlbmRzIGVhY2ggcXVldWUgdGFzayB0byB0aGUgbW9kdWxlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gIHtPYmplY3R9IHRhc2tcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB2b2lkXG4gKi9cbkFyY2hpdmVyLnByb3RvdHlwZS5fb25RdWV1ZVRhc2sgPSBmdW5jdGlvbih0YXNrLCBjYWxsYmFjaykge1xuICB2YXIgZnVsbENhbGxiYWNrID0gKCkgPT4ge1xuICAgIGlmKHRhc2suZGF0YS5jYWxsYmFjaykge1xuICAgICAgdGFzay5kYXRhLmNhbGxiYWNrKCk7XG4gICAgfVxuICAgIGNhbGxiYWNrKCk7XG4gIH1cblxuICBpZiAodGhpcy5fc3RhdGUuZmluYWxpemluZyB8fCB0aGlzLl9zdGF0ZS5maW5hbGl6ZWQgfHwgdGhpcy5fc3RhdGUuYWJvcnRlZCkge1xuICAgIGZ1bGxDYWxsYmFjaygpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRoaXMuX3Rhc2sgPSB0YXNrO1xuICB0aGlzLl9tb2R1bGVBcHBlbmQodGFzay5zb3VyY2UsIHRhc2suZGF0YSwgZnVsbENhbGxiYWNrKTtcbn07XG5cbi8qKlxuICogUGVyZm9ybXMgYSBmaWxlIHN0YXQgYW5kIHJlaW5qZWN0cyB0aGUgdGFzayBiYWNrIGludG8gdGhlIHF1ZXVlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gIHtPYmplY3R9IHRhc2tcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB2b2lkXG4gKi9cbkFyY2hpdmVyLnByb3RvdHlwZS5fb25TdGF0UXVldWVUYXNrID0gZnVuY3Rpb24odGFzaywgY2FsbGJhY2spIHtcbiAgaWYgKHRoaXMuX3N0YXRlLmZpbmFsaXppbmcgfHwgdGhpcy5fc3RhdGUuZmluYWxpemVkIHx8IHRoaXMuX3N0YXRlLmFib3J0ZWQpIHtcbiAgICBjYWxsYmFjaygpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZzLmxzdGF0KHRhc2suZmlsZXBhdGgsIGZ1bmN0aW9uKGVyciwgc3RhdHMpIHtcbiAgICBpZiAodGhpcy5fc3RhdGUuYWJvcnRlZCkge1xuICAgICAgc2V0SW1tZWRpYXRlKGNhbGxiYWNrKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZXJyKSB7XG4gICAgICB0aGlzLl9lbnRyaWVzQ291bnQtLTtcblxuICAgICAgLyoqXG4gICAgICAgKiBAZXZlbnQgQXJjaGl2ZXIjd2FybmluZ1xuICAgICAgICogQHR5cGUge0Vycm9yRGF0YX1cbiAgICAgICAqL1xuICAgICAgdGhpcy5lbWl0KCd3YXJuaW5nJywgZXJyKTtcbiAgICAgIHNldEltbWVkaWF0ZShjYWxsYmFjayk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGFzayA9IHRoaXMuX3VwZGF0ZVF1ZXVlVGFza1dpdGhTdGF0cyh0YXNrLCBzdGF0cyk7XG5cbiAgICBpZiAodGFzaykge1xuICAgICAgaWYgKHN0YXRzLnNpemUpIHtcbiAgICAgICAgdGhpcy5fZnNFbnRyaWVzVG90YWxCeXRlcyArPSBzdGF0cy5zaXplO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9xdWV1ZS5wdXNoKHRhc2spO1xuICAgIH1cblxuICAgIHNldEltbWVkaWF0ZShjYWxsYmFjayk7XG4gIH0uYmluZCh0aGlzKSk7XG59O1xuXG4vKipcbiAqIFVucGlwZXMgdGhlIG1vZHVsZSBhbmQgZW5kcyBvdXIgaW50ZXJuYWwgc3RyZWFtLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHZvaWRcbiAqL1xuQXJjaGl2ZXIucHJvdG90eXBlLl9zaHV0ZG93biA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9tb2R1bGVVbnBpcGUoKTtcbiAgdGhpcy5lbmQoKTtcbn07XG5cbi8qKlxuICogVHJhY2tzIHRoZSBieXRlcyBlbWl0dGVkIGJ5IG91ciBpbnRlcm5hbCBzdHJlYW0uXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSAge0J1ZmZlcn0gY2h1bmtcbiAqIEBwYXJhbSAge1N0cmluZ30gZW5jb2RpbmdcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB2b2lkXG4gKi9cbkFyY2hpdmVyLnByb3RvdHlwZS5fdHJhbnNmb3JtID0gZnVuY3Rpb24oY2h1bmssIGVuY29kaW5nLCBjYWxsYmFjaykge1xuICBpZiAoY2h1bmspIHtcbiAgICB0aGlzLl9wb2ludGVyICs9IGNodW5rLmxlbmd0aDtcbiAgfVxuXG4gIGNhbGxiYWNrKG51bGwsIGNodW5rKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyBhbmQgbm9ybWFsaXplcyBhIHF1ZXVlIHRhc2sgdXNpbmcgc3RhdHMgZGF0YS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtICB7T2JqZWN0fSB0YXNrXG4gKiBAcGFyYW0gIHtmcy5TdGF0c30gc3RhdHNcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuQXJjaGl2ZXIucHJvdG90eXBlLl91cGRhdGVRdWV1ZVRhc2tXaXRoU3RhdHMgPSBmdW5jdGlvbih0YXNrLCBzdGF0cykge1xuICBpZiAoc3RhdHMuaXNGaWxlKCkpIHtcbiAgICB0YXNrLmRhdGEudHlwZSA9ICdmaWxlJztcbiAgICB0YXNrLmRhdGEuc291cmNlVHlwZSA9ICdzdHJlYW0nO1xuICAgIHRhc2suc291cmNlID0gdXRpbC5sYXp5UmVhZFN0cmVhbSh0YXNrLmZpbGVwYXRoKTtcbiAgfSBlbHNlIGlmIChzdGF0cy5pc0RpcmVjdG9yeSgpICYmIHRoaXMuX21vZHVsZVN1cHBvcnRzKCdkaXJlY3RvcnknKSkge1xuICAgIHRhc2suZGF0YS5uYW1lID0gdXRpbC50cmFpbGluZ1NsYXNoSXQodGFzay5kYXRhLm5hbWUpO1xuICAgIHRhc2suZGF0YS50eXBlID0gJ2RpcmVjdG9yeSc7XG4gICAgdGFzay5kYXRhLnNvdXJjZVBhdGggPSB1dGlsLnRyYWlsaW5nU2xhc2hJdCh0YXNrLmZpbGVwYXRoKTtcbiAgICB0YXNrLmRhdGEuc291cmNlVHlwZSA9ICdidWZmZXInO1xuICAgIHRhc2suc291cmNlID0gQnVmZmVyLmNvbmNhdChbXSk7XG4gIH0gZWxzZSBpZiAoc3RhdHMuaXNTeW1ib2xpY0xpbmsoKSAmJiB0aGlzLl9tb2R1bGVTdXBwb3J0cygnc3ltbGluaycpKSB7XG4gICAgdmFyIGxpbmtQYXRoID0gZnMucmVhZGxpbmtTeW5jKHRhc2suZmlsZXBhdGgpO1xuICAgIHZhciBkaXJOYW1lID0gcGF0aC5kaXJuYW1lKHRhc2suZmlsZXBhdGgpO1xuICAgIHRhc2suZGF0YS50eXBlID0gJ3N5bWxpbmsnO1xuICAgIHRhc2suZGF0YS5saW5rbmFtZSA9IHBhdGgucmVsYXRpdmUoZGlyTmFtZSwgcGF0aC5yZXNvbHZlKGRpck5hbWUsIGxpbmtQYXRoKSk7XG4gICAgdGFzay5kYXRhLnNvdXJjZVR5cGUgPSAnYnVmZmVyJztcbiAgICB0YXNrLnNvdXJjZSA9IEJ1ZmZlci5jb25jYXQoW10pO1xuICB9IGVsc2Uge1xuICAgIGlmIChzdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICB0aGlzLmVtaXQoJ3dhcm5pbmcnLCBuZXcgQXJjaGl2ZXJFcnJvcignRElSRUNUT1JZTk9UU1VQUE9SVEVEJywgdGFzay5kYXRhKSk7XG4gICAgfSBlbHNlIGlmIChzdGF0cy5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgICB0aGlzLmVtaXQoJ3dhcm5pbmcnLCBuZXcgQXJjaGl2ZXJFcnJvcignU1lNTElOS05PVFNVUFBPUlRFRCcsIHRhc2suZGF0YSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVtaXQoJ3dhcm5pbmcnLCBuZXcgQXJjaGl2ZXJFcnJvcignRU5UUllOT1RTVVBQT1JURUQnLCB0YXNrLmRhdGEpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHRhc2suZGF0YSA9IHRoaXMuX25vcm1hbGl6ZUVudHJ5RGF0YSh0YXNrLmRhdGEsIHN0YXRzKTtcblxuICByZXR1cm4gdGFzaztcbn07XG5cbi8qKlxuICogQWJvcnRzIHRoZSBhcmNoaXZpbmcgcHJvY2VzcywgdGFraW5nIGEgYmVzdC1lZmZvcnQgYXBwcm9hY2gsIGJ5OlxuICpcbiAqIC0gcmVtb3ZpbmcgYW55IHBlbmRpbmcgcXVldWUgdGFza3NcbiAqIC0gYWxsb3dpbmcgYW55IGFjdGl2ZSBxdWV1ZSB3b3JrZXJzIHRvIGZpbmlzaFxuICogLSBkZXRhY2hpbmcgaW50ZXJuYWwgbW9kdWxlIHBpcGVzXG4gKiAtIGVuZGluZyBib3RoIHNpZGVzIG9mIHRoZSBUcmFuc2Zvcm0gc3RyZWFtXG4gKlxuICogSXQgd2lsbCBOT1QgZHJhaW4gYW55IHJlbWFpbmluZyBzb3VyY2VzLlxuICpcbiAqIEByZXR1cm4ge3RoaXN9XG4gKi9cbkFyY2hpdmVyLnByb3RvdHlwZS5hYm9ydCA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy5fc3RhdGUuYWJvcnRlZCB8fCB0aGlzLl9zdGF0ZS5maW5hbGl6ZWQpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHRoaXMuX2Fib3J0KCk7XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEFwcGVuZHMgYW4gaW5wdXQgc291cmNlICh0ZXh0IHN0cmluZywgYnVmZmVyLCBvciBzdHJlYW0pIHRvIHRoZSBpbnN0YW5jZS5cbiAqXG4gKiBXaGVuIHRoZSBpbnN0YW5jZSBoYXMgcmVjZWl2ZWQsIHByb2Nlc3NlZCwgYW5kIGVtaXR0ZWQgdGhlIGlucHV0LCB0aGUgYGVudHJ5YFxuICogZXZlbnQgaXMgZmlyZWQuXG4gKlxuICogQGZpcmVzICBBcmNoaXZlciNlbnRyeVxuICogQHBhcmFtICB7KEJ1ZmZlcnxTdHJlYW18U3RyaW5nKX0gc291cmNlIFRoZSBpbnB1dCBzb3VyY2UuXG4gKiBAcGFyYW0gIHtFbnRyeURhdGF9IGRhdGEgU2VlIGFsc28ge0BsaW5rIFppcEVudHJ5RGF0YX0gYW5kIHtAbGluayBUYXJFbnRyeURhdGF9LlxuICogQHJldHVybiB7dGhpc31cbiAqL1xuQXJjaGl2ZXIucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uKHNvdXJjZSwgZGF0YSkge1xuICBpZiAodGhpcy5fc3RhdGUuZmluYWxpemUgfHwgdGhpcy5fc3RhdGUuYWJvcnRlZCkge1xuICAgIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgQXJjaGl2ZXJFcnJvcignUVVFVUVDTE9TRUQnKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBkYXRhID0gdGhpcy5fbm9ybWFsaXplRW50cnlEYXRhKGRhdGEpO1xuXG4gIGlmICh0eXBlb2YgZGF0YS5uYW1lICE9PSAnc3RyaW5nJyB8fCBkYXRhLm5hbWUubGVuZ3RoID09PSAwKSB7XG4gICAgdGhpcy5lbWl0KCdlcnJvcicsIG5ldyBBcmNoaXZlckVycm9yKCdFTlRSWU5BTUVSRVFVSVJFRCcpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGlmIChkYXRhLnR5cGUgPT09ICdkaXJlY3RvcnknICYmICF0aGlzLl9tb2R1bGVTdXBwb3J0cygnZGlyZWN0b3J5JykpIHtcbiAgICB0aGlzLmVtaXQoJ2Vycm9yJywgbmV3IEFyY2hpdmVyRXJyb3IoJ0RJUkVDVE9SWU5PVFNVUFBPUlRFRCcsIHsgbmFtZTogZGF0YS5uYW1lIH0pKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHNvdXJjZSA9IHV0aWwubm9ybWFsaXplSW5wdXRTb3VyY2Uoc291cmNlKTtcblxuICBpZiAoQnVmZmVyLmlzQnVmZmVyKHNvdXJjZSkpIHtcbiAgICBkYXRhLnNvdXJjZVR5cGUgPSAnYnVmZmVyJztcbiAgfSBlbHNlIGlmICh1dGlsLmlzU3RyZWFtKHNvdXJjZSkpIHtcbiAgICBkYXRhLnNvdXJjZVR5cGUgPSAnc3RyZWFtJztcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmVtaXQoJ2Vycm9yJywgbmV3IEFyY2hpdmVyRXJyb3IoJ0lOUFVUU1RFQU1CVUZGRVJSRVFVSVJFRCcsIHsgbmFtZTogZGF0YS5uYW1lIH0pKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHRoaXMuX2VudHJpZXNDb3VudCsrO1xuICB0aGlzLl9xdWV1ZS5wdXNoKHtcbiAgICBkYXRhOiBkYXRhLFxuICAgIHNvdXJjZTogc291cmNlXG4gIH0pO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBcHBlbmRzIGEgZGlyZWN0b3J5IGFuZCBpdHMgZmlsZXMsIHJlY3Vyc2l2ZWx5LCBnaXZlbiBpdHMgZGlycGF0aC5cbiAqXG4gKiBAcGFyYW0gIHtTdHJpbmd9IGRpcnBhdGggVGhlIHNvdXJjZSBkaXJlY3RvcnkgcGF0aC5cbiAqIEBwYXJhbSAge1N0cmluZ30gZGVzdHBhdGggVGhlIGRlc3RpbmF0aW9uIHBhdGggd2l0aGluIHRoZSBhcmNoaXZlLlxuICogQHBhcmFtICB7KEVudHJ5RGF0YXxGdW5jdGlvbil9IGRhdGEgU2VlIGFsc28gW1ppcEVudHJ5RGF0YV17QGxpbmsgWmlwRW50cnlEYXRhfSBhbmRcbiAqIFtUYXJFbnRyeURhdGFde0BsaW5rIFRhckVudHJ5RGF0YX0uXG4gKiBAcmV0dXJuIHt0aGlzfVxuICovXG5BcmNoaXZlci5wcm90b3R5cGUuZGlyZWN0b3J5ID0gZnVuY3Rpb24oZGlycGF0aCwgZGVzdHBhdGgsIGRhdGEpIHtcbiAgaWYgKHRoaXMuX3N0YXRlLmZpbmFsaXplIHx8IHRoaXMuX3N0YXRlLmFib3J0ZWQpIHtcbiAgICB0aGlzLmVtaXQoJ2Vycm9yJywgbmV3IEFyY2hpdmVyRXJyb3IoJ1FVRVVFQ0xPU0VEJykpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBkaXJwYXRoICE9PSAnc3RyaW5nJyB8fCBkaXJwYXRoLmxlbmd0aCA9PT0gMCkge1xuICAgIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgQXJjaGl2ZXJFcnJvcignRElSRUNUT1JZRElSUEFUSFJFUVVJUkVEJykpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdGhpcy5fcGVuZGluZysrO1xuXG4gIGlmIChkZXN0cGF0aCA9PT0gZmFsc2UpIHtcbiAgICBkZXN0cGF0aCA9ICcnO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBkZXN0cGF0aCAhPT0gJ3N0cmluZycpe1xuICAgIGRlc3RwYXRoID0gZGlycGF0aDtcbiAgfVxuXG4gIHZhciBkYXRhRnVuY3Rpb24gPSBmYWxzZTtcbiAgaWYgKHR5cGVvZiBkYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgZGF0YUZ1bmN0aW9uID0gZGF0YTtcbiAgICBkYXRhID0ge307XG4gIH0gZWxzZSBpZiAodHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSB7XG4gICAgZGF0YSA9IHt9O1xuICB9XG5cbiAgdmFyIGdsb2JPcHRpb25zID0ge1xuICAgIHN0YXQ6IHRydWUsXG4gICAgZG90OiB0cnVlXG4gIH07XG5cbiAgZnVuY3Rpb24gb25HbG9iRW5kKCkge1xuICAgIHRoaXMuX3BlbmRpbmctLTtcbiAgICB0aGlzLl9tYXliZUZpbmFsaXplKCk7XG4gIH1cblxuICBmdW5jdGlvbiBvbkdsb2JFcnJvcihlcnIpIHtcbiAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uR2xvYk1hdGNoKG1hdGNoKXtcbiAgICBnbG9iYmVyLnBhdXNlKCk7XG5cbiAgICB2YXIgaWdub3JlTWF0Y2ggPSBmYWxzZTtcbiAgICB2YXIgZW50cnlEYXRhID0gT2JqZWN0LmFzc2lnbih7fSwgZGF0YSk7XG4gICAgZW50cnlEYXRhLm5hbWUgPSBtYXRjaC5yZWxhdGl2ZTtcbiAgICBlbnRyeURhdGEucHJlZml4ID0gZGVzdHBhdGg7XG4gICAgZW50cnlEYXRhLnN0YXRzID0gbWF0Y2guc3RhdDtcbiAgICBlbnRyeURhdGEuY2FsbGJhY2sgPSBnbG9iYmVyLnJlc3VtZS5iaW5kKGdsb2JiZXIpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGlmIChkYXRhRnVuY3Rpb24pIHtcbiAgICAgICAgZW50cnlEYXRhID0gZGF0YUZ1bmN0aW9uKGVudHJ5RGF0YSk7XG5cbiAgICAgICAgaWYgKGVudHJ5RGF0YSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBpZ25vcmVNYXRjaCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGVudHJ5RGF0YSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQXJjaGl2ZXJFcnJvcignRElSRUNUT1JZRlVOQ1RJT05JTlZBTElEREFUQScsIHsgZGlycGF0aDogZGlycGF0aCB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2goZSkge1xuICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChpZ25vcmVNYXRjaCkge1xuICAgICAgZ2xvYmJlci5yZXN1bWUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9hcHBlbmQobWF0Y2guYWJzb2x1dGUsIGVudHJ5RGF0YSk7XG4gIH1cblxuICB2YXIgZ2xvYmJlciA9IGdsb2IoZGlycGF0aCwgZ2xvYk9wdGlvbnMpO1xuICBnbG9iYmVyLm9uKCdlcnJvcicsIG9uR2xvYkVycm9yLmJpbmQodGhpcykpO1xuICBnbG9iYmVyLm9uKCdtYXRjaCcsIG9uR2xvYk1hdGNoLmJpbmQodGhpcykpO1xuICBnbG9iYmVyLm9uKCdlbmQnLCBvbkdsb2JFbmQuYmluZCh0aGlzKSk7XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEFwcGVuZHMgYSBmaWxlIGdpdmVuIGl0cyBmaWxlcGF0aCB1c2luZyBhXG4gKiBbbGF6eXN0cmVhbV17QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2pwb21tZXJlbmluZy9ub2RlLWxhenlzdHJlYW19IHdyYXBwZXIgdG9cbiAqIHByZXZlbnQgaXNzdWVzIHdpdGggb3BlbiBmaWxlIGxpbWl0cy5cbiAqXG4gKiBXaGVuIHRoZSBpbnN0YW5jZSBoYXMgcmVjZWl2ZWQsIHByb2Nlc3NlZCwgYW5kIGVtaXR0ZWQgdGhlIGZpbGUsIHRoZSBgZW50cnlgXG4gKiBldmVudCBpcyBmaXJlZC5cbiAqXG4gKiBAcGFyYW0gIHtTdHJpbmd9IGZpbGVwYXRoIFRoZSBzb3VyY2UgZmlsZXBhdGguXG4gKiBAcGFyYW0gIHtFbnRyeURhdGF9IGRhdGEgU2VlIGFsc28gW1ppcEVudHJ5RGF0YV17QGxpbmsgWmlwRW50cnlEYXRhfSBhbmRcbiAqIFtUYXJFbnRyeURhdGFde0BsaW5rIFRhckVudHJ5RGF0YX0uXG4gKiBAcmV0dXJuIHt0aGlzfVxuICovXG5BcmNoaXZlci5wcm90b3R5cGUuZmlsZSA9IGZ1bmN0aW9uKGZpbGVwYXRoLCBkYXRhKSB7XG4gIGlmICh0aGlzLl9zdGF0ZS5maW5hbGl6ZSB8fCB0aGlzLl9zdGF0ZS5hYm9ydGVkKSB7XG4gICAgdGhpcy5lbWl0KCdlcnJvcicsIG5ldyBBcmNoaXZlckVycm9yKCdRVUVVRUNMT1NFRCcpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGlmICh0eXBlb2YgZmlsZXBhdGggIT09ICdzdHJpbmcnIHx8IGZpbGVwYXRoLmxlbmd0aCA9PT0gMCkge1xuICAgIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgQXJjaGl2ZXJFcnJvcignRklMRUZJTEVQQVRIUkVRVUlSRUQnKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB0aGlzLl9hcHBlbmQoZmlsZXBhdGgsIGRhdGEpO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBcHBlbmRzIG11bHRpcGxlIGZpbGVzIHRoYXQgbWF0Y2ggYSBnbG9iIHBhdHRlcm4uXG4gKlxuICogQHBhcmFtICB7U3RyaW5nfSBwYXR0ZXJuIFRoZSBbZ2xvYiBwYXR0ZXJuXXtAbGluayBodHRwczovL2dpdGh1Yi5jb20vaXNhYWNzL21pbmltYXRjaH0gdG8gbWF0Y2guXG4gKiBAcGFyYW0gIHtPYmplY3R9IG9wdGlvbnMgU2VlIFtub2RlLXJlYWRkaXItZ2xvYl17QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3lxbm4vbm9kZS1yZWFkZGlyLWdsb2Ijb3B0aW9uc30uXG4gKiBAcGFyYW0gIHtFbnRyeURhdGF9IGRhdGEgU2VlIGFsc28gW1ppcEVudHJ5RGF0YV17QGxpbmsgWmlwRW50cnlEYXRhfSBhbmRcbiAqIFtUYXJFbnRyeURhdGFde0BsaW5rIFRhckVudHJ5RGF0YX0uXG4gKiBAcmV0dXJuIHt0aGlzfVxuICovXG5BcmNoaXZlci5wcm90b3R5cGUuZ2xvYiA9IGZ1bmN0aW9uKHBhdHRlcm4sIG9wdGlvbnMsIGRhdGEpIHtcbiAgdGhpcy5fcGVuZGluZysrO1xuXG4gIG9wdGlvbnMgPSB1dGlsLmRlZmF1bHRzKG9wdGlvbnMsIHtcbiAgICBzdGF0OiB0cnVlLFxuICAgIHBhdHRlcm46IHBhdHRlcm5cbiAgfSk7XG5cbiAgZnVuY3Rpb24gb25HbG9iRW5kKCkge1xuICAgIHRoaXMuX3BlbmRpbmctLTtcbiAgICB0aGlzLl9tYXliZUZpbmFsaXplKCk7XG4gIH1cblxuICBmdW5jdGlvbiBvbkdsb2JFcnJvcihlcnIpIHtcbiAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uR2xvYk1hdGNoKG1hdGNoKXtcbiAgICBnbG9iYmVyLnBhdXNlKCk7XG4gICAgdmFyIGVudHJ5RGF0YSA9IE9iamVjdC5hc3NpZ24oe30sIGRhdGEpO1xuICAgIGVudHJ5RGF0YS5jYWxsYmFjayA9IGdsb2JiZXIucmVzdW1lLmJpbmQoZ2xvYmJlcik7XG4gICAgZW50cnlEYXRhLnN0YXRzID0gbWF0Y2guc3RhdDtcbiAgICBlbnRyeURhdGEubmFtZSA9IG1hdGNoLnJlbGF0aXZlO1xuXG4gICAgdGhpcy5fYXBwZW5kKG1hdGNoLmFic29sdXRlLCBlbnRyeURhdGEpO1xuICB9XG5cbiAgdmFyIGdsb2JiZXIgPSBnbG9iKG9wdGlvbnMuY3dkIHx8ICcuJywgb3B0aW9ucyk7XG4gIGdsb2JiZXIub24oJ2Vycm9yJywgb25HbG9iRXJyb3IuYmluZCh0aGlzKSk7XG4gIGdsb2JiZXIub24oJ21hdGNoJywgb25HbG9iTWF0Y2guYmluZCh0aGlzKSk7XG4gIGdsb2JiZXIub24oJ2VuZCcsIG9uR2xvYkVuZC5iaW5kKHRoaXMpKTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRmluYWxpemVzIHRoZSBpbnN0YW5jZSBhbmQgcHJldmVudHMgZnVydGhlciBhcHBlbmRpbmcgdG8gdGhlIGFyY2hpdmVcbiAqIHN0cnVjdHVyZSAocXVldWUgd2lsbCBjb250aW51ZSB0aWwgZHJhaW5lZCkuXG4gKlxuICogVGhlIGBlbmRgLCBgY2xvc2VgIG9yIGBmaW5pc2hgIGV2ZW50cyBvbiB0aGUgZGVzdGluYXRpb24gc3RyZWFtIG1heSBmaXJlXG4gKiByaWdodCBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kIHNvIHlvdSBzaG91bGQgc2V0IGxpc3RlbmVycyBiZWZvcmVoYW5kIHRvXG4gKiBwcm9wZXJseSBkZXRlY3Qgc3RyZWFtIGNvbXBsZXRpb24uXG4gKlxuICogQHJldHVybiB7UHJvbWlzZX1cbiAqL1xuQXJjaGl2ZXIucHJvdG90eXBlLmZpbmFsaXplID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLl9zdGF0ZS5hYm9ydGVkKSB7XG4gICAgdmFyIGFib3J0ZWRFcnJvciA9IG5ldyBBcmNoaXZlckVycm9yKCdBQk9SVEVEJyk7XG4gICAgdGhpcy5lbWl0KCdlcnJvcicsIGFib3J0ZWRFcnJvcik7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGFib3J0ZWRFcnJvcik7XG4gIH1cblxuICBpZiAodGhpcy5fc3RhdGUuZmluYWxpemUpIHtcbiAgICB2YXIgZmluYWxpemluZ0Vycm9yID0gbmV3IEFyY2hpdmVyRXJyb3IoJ0ZJTkFMSVpJTkcnKTtcbiAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZmluYWxpemluZ0Vycm9yKTtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZmluYWxpemluZ0Vycm9yKTtcbiAgfVxuXG4gIHRoaXMuX3N0YXRlLmZpbmFsaXplID0gdHJ1ZTtcblxuICBpZiAodGhpcy5fcGVuZGluZyA9PT0gMCAmJiB0aGlzLl9xdWV1ZS5pZGxlKCkgJiYgdGhpcy5fc3RhdFF1ZXVlLmlkbGUoKSkge1xuICAgIHRoaXMuX2ZpbmFsaXplKCk7XG4gIH1cblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgIHZhciBlcnJvcmVkO1xuXG4gICAgc2VsZi5fbW9kdWxlLm9uKCdlbmQnLCBmdW5jdGlvbigpIHtcbiAgICAgIGlmICghZXJyb3JlZCkge1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9XG4gICAgfSlcblxuICAgIHNlbGYuX21vZHVsZS5vbignZXJyb3InLCBmdW5jdGlvbihlcnIpIHtcbiAgICAgIGVycm9yZWQgPSB0cnVlO1xuICAgICAgcmVqZWN0KGVycik7XG4gICAgfSlcbiAgfSlcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgbW9kdWxlIGZvcm1hdCBuYW1lIHVzZWQgZm9yIGFyY2hpdmluZy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZm9ybWF0IFRoZSBuYW1lIG9mIHRoZSBmb3JtYXQuXG4gKiBAcmV0dXJuIHt0aGlzfVxuICovXG5BcmNoaXZlci5wcm90b3R5cGUuc2V0Rm9ybWF0ID0gZnVuY3Rpb24oZm9ybWF0KSB7XG4gIGlmICh0aGlzLl9mb3JtYXQpIHtcbiAgICB0aGlzLmVtaXQoJ2Vycm9yJywgbmV3IEFyY2hpdmVyRXJyb3IoJ0ZPUk1BVFNFVCcpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHRoaXMuX2Zvcm1hdCA9IGZvcm1hdDtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgbW9kdWxlIHVzZWQgZm9yIGFyY2hpdmluZy5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBtb2R1bGUgVGhlIGZ1bmN0aW9uIGZvciBhcmNoaXZlciB0byBpbnRlcmFjdCB3aXRoLlxuICogQHJldHVybiB7dGhpc31cbiAqL1xuQXJjaGl2ZXIucHJvdG90eXBlLnNldE1vZHVsZSA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuICBpZiAodGhpcy5fc3RhdGUuYWJvcnRlZCkge1xuICAgIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgQXJjaGl2ZXJFcnJvcignQUJPUlRFRCcpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGlmICh0aGlzLl9zdGF0ZS5tb2R1bGUpIHtcbiAgICB0aGlzLmVtaXQoJ2Vycm9yJywgbmV3IEFyY2hpdmVyRXJyb3IoJ01PRFVMRVNFVCcpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHRoaXMuX21vZHVsZSA9IG1vZHVsZTtcbiAgdGhpcy5fbW9kdWxlUGlwZSgpO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBcHBlbmRzIGEgc3ltbGluayB0byB0aGUgaW5zdGFuY2UuXG4gKlxuICogVGhpcyBkb2VzIE5PVCBpbnRlcmFjdCB3aXRoIGZpbGVzeXN0ZW0gYW5kIGlzIHVzZWQgZm9yIHByb2dyYW1tYXRpY2FsbHkgY3JlYXRpbmcgc3ltbGlua3MuXG4gKlxuICogQHBhcmFtICB7U3RyaW5nfSBmaWxlcGF0aCBUaGUgc3ltbGluayBwYXRoICh3aXRoaW4gYXJjaGl2ZSkuXG4gKiBAcGFyYW0gIHtTdHJpbmd9IHRhcmdldCBUaGUgdGFyZ2V0IHBhdGggKHdpdGhpbiBhcmNoaXZlKS5cbiAqIEBwYXJhbSAge051bWJlcn0gbW9kZSBTZXRzIHRoZSBlbnRyeSBwZXJtaXNzaW9ucy5cbiAqIEByZXR1cm4ge3RoaXN9XG4gKi9cbkFyY2hpdmVyLnByb3RvdHlwZS5zeW1saW5rID0gZnVuY3Rpb24oZmlsZXBhdGgsIHRhcmdldCwgbW9kZSkge1xuICBpZiAodGhpcy5fc3RhdGUuZmluYWxpemUgfHwgdGhpcy5fc3RhdGUuYWJvcnRlZCkge1xuICAgIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgQXJjaGl2ZXJFcnJvcignUVVFVUVDTE9TRUQnKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBpZiAodHlwZW9mIGZpbGVwYXRoICE9PSAnc3RyaW5nJyB8fCBmaWxlcGF0aC5sZW5ndGggPT09IDApIHtcbiAgICB0aGlzLmVtaXQoJ2Vycm9yJywgbmV3IEFyY2hpdmVyRXJyb3IoJ1NZTUxJTktGSUxFUEFUSFJFUVVJUkVEJykpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0YXJnZXQgIT09ICdzdHJpbmcnIHx8IHRhcmdldC5sZW5ndGggPT09IDApIHtcbiAgICB0aGlzLmVtaXQoJ2Vycm9yJywgbmV3IEFyY2hpdmVyRXJyb3IoJ1NZTUxJTktUQVJHRVRSRVFVSVJFRCcsIHsgZmlsZXBhdGg6IGZpbGVwYXRoIH0pKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGlmICghdGhpcy5fbW9kdWxlU3VwcG9ydHMoJ3N5bWxpbmsnKSkge1xuICAgIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgQXJjaGl2ZXJFcnJvcignU1lNTElOS05PVFNVUFBPUlRFRCcsIHsgZmlsZXBhdGg6IGZpbGVwYXRoIH0pKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHZhciBkYXRhID0ge307XG4gIGRhdGEudHlwZSA9ICdzeW1saW5rJztcbiAgZGF0YS5uYW1lID0gZmlsZXBhdGgucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuICBkYXRhLmxpbmtuYW1lID0gdGFyZ2V0LnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbiAgZGF0YS5zb3VyY2VUeXBlID0gJ2J1ZmZlcic7XG5cbiAgaWYgKHR5cGVvZiBtb2RlID09PSBcIm51bWJlclwiKSB7XG4gICAgZGF0YS5tb2RlID0gbW9kZTtcbiAgfVxuXG4gIHRoaXMuX2VudHJpZXNDb3VudCsrO1xuICB0aGlzLl9xdWV1ZS5wdXNoKHtcbiAgICBkYXRhOiBkYXRhLFxuICAgIHNvdXJjZTogQnVmZmVyLmNvbmNhdChbXSlcbiAgfSk7XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGN1cnJlbnQgbGVuZ3RoIChpbiBieXRlcykgdGhhdCBoYXMgYmVlbiBlbWl0dGVkLlxuICpcbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuQXJjaGl2ZXIucHJvdG90eXBlLnBvaW50ZXIgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuX3BvaW50ZXI7XG59O1xuXG4vKipcbiAqIE1pZGRsZXdhcmUtbGlrZSBoZWxwZXIgdGhhdCBoYXMgeWV0IHRvIGJlIGZ1bGx5IGltcGxlbWVudGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gcGx1Z2luXG4gKiBAcmV0dXJuIHt0aGlzfVxuICovXG5BcmNoaXZlci5wcm90b3R5cGUudXNlID0gZnVuY3Rpb24ocGx1Z2luKSB7XG4gIHRoaXMuX3N0cmVhbXMucHVzaChwbHVnaW4pO1xuICByZXR1cm4gdGhpcztcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQXJjaGl2ZXI7XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gQ29yZU9wdGlvbnNcbiAqIEBnbG9iYWxcbiAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBbc3RhdENvbmN1cnJlbmN5PTRdIFNldHMgdGhlIG51bWJlciBvZiB3b3JrZXJzIHVzZWQgdG9cbiAqIHByb2Nlc3MgdGhlIGludGVybmFsIGZzIHN0YXQgcXVldWUuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBUcmFuc2Zvcm1PcHRpb25zXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IFthbGxvd0hhbGZPcGVuPXRydWVdIElmIHNldCB0byBmYWxzZSwgdGhlbiB0aGUgc3RyZWFtXG4gKiB3aWxsIGF1dG9tYXRpY2FsbHkgZW5kIHRoZSByZWFkYWJsZSBzaWRlIHdoZW4gdGhlIHdyaXRhYmxlIHNpZGUgZW5kcyBhbmQgdmljZVxuICogdmVyc2EuXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IFtyZWFkYWJsZU9iamVjdE1vZGU9ZmFsc2VdIFNldHMgb2JqZWN0TW9kZSBmb3IgcmVhZGFibGVcbiAqIHNpZGUgb2YgdGhlIHN0cmVhbS4gSGFzIG5vIGVmZmVjdCBpZiBvYmplY3RNb2RlIGlzIHRydWUuXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IFt3cml0YWJsZU9iamVjdE1vZGU9ZmFsc2VdIFNldHMgb2JqZWN0TW9kZSBmb3Igd3JpdGFibGVcbiAqIHNpZGUgb2YgdGhlIHN0cmVhbS4gSGFzIG5vIGVmZmVjdCBpZiBvYmplY3RNb2RlIGlzIHRydWUuXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IFtkZWNvZGVTdHJpbmdzPXRydWVdIFdoZXRoZXIgb3Igbm90IHRvIGRlY29kZSBzdHJpbmdzXG4gKiBpbnRvIEJ1ZmZlcnMgYmVmb3JlIHBhc3NpbmcgdGhlbSB0byBfd3JpdGUoKS4gYFdyaXRhYmxlYFxuICogQHByb3BlcnR5IHtTdHJpbmd9IFtlbmNvZGluZz1OVUxMXSBJZiBzcGVjaWZpZWQsIHRoZW4gYnVmZmVycyB3aWxsIGJlIGRlY29kZWRcbiAqIHRvIHN0cmluZ3MgdXNpbmcgdGhlIHNwZWNpZmllZCBlbmNvZGluZy4gYFJlYWRhYmxlYFxuICogQHByb3BlcnR5IHtOdW1iZXJ9IFtoaWdoV2F0ZXJNYXJrPTE2a2JdIFRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyB0byBzdG9yZVxuICogaW4gdGhlIGludGVybmFsIGJ1ZmZlciBiZWZvcmUgY2Vhc2luZyB0byByZWFkIGZyb20gdGhlIHVuZGVybHlpbmcgcmVzb3VyY2UuXG4gKiBgUmVhZGFibGVgIGBXcml0YWJsZWBcbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gW29iamVjdE1vZGU9ZmFsc2VdIFdoZXRoZXIgdGhpcyBzdHJlYW0gc2hvdWxkIGJlaGF2ZSBhcyBhXG4gKiBzdHJlYW0gb2Ygb2JqZWN0cy4gTWVhbmluZyB0aGF0IHN0cmVhbS5yZWFkKG4pIHJldHVybnMgYSBzaW5nbGUgdmFsdWUgaW5zdGVhZFxuICogb2YgYSBCdWZmZXIgb2Ygc2l6ZSBuLiBgUmVhZGFibGVgIGBXcml0YWJsZWBcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEVudHJ5RGF0YVxuICogQHByb3BlcnR5IHtTdHJpbmd9IG5hbWUgU2V0cyB0aGUgZW50cnkgbmFtZSBpbmNsdWRpbmcgaW50ZXJuYWwgcGF0aC5cbiAqIEBwcm9wZXJ0eSB7KFN0cmluZ3xEYXRlKX0gW2RhdGU9Tk9XKCldIFNldHMgdGhlIGVudHJ5IGRhdGUuXG4gKiBAcHJvcGVydHkge051bWJlcn0gW21vZGU9RDowNzU1L0Y6MDY0NF0gU2V0cyB0aGUgZW50cnkgcGVybWlzc2lvbnMuXG4gKiBAcHJvcGVydHkge1N0cmluZ30gW3ByZWZpeF0gU2V0cyBhIHBhdGggcHJlZml4IGZvciB0aGUgZW50cnkgbmFtZS4gVXNlZnVsXG4gKiB3aGVuIHdvcmtpbmcgd2l0aCBtZXRob2RzIGxpa2UgYGRpcmVjdG9yeWAgb3IgYGdsb2JgLlxuICogQHByb3BlcnR5IHtmcy5TdGF0c30gW3N0YXRzXSBTZXRzIHRoZSBmcyBzdGF0IGRhdGEgZm9yIHRoaXMgZW50cnkgYWxsb3dpbmdcbiAqIGZvciByZWR1Y3Rpb24gb2YgZnMgc3RhdCBjYWxscyB3aGVuIHN0YXQgZGF0YSBpcyBhbHJlYWR5IGtub3duLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gRXJyb3JEYXRhXG4gKiBAcHJvcGVydHkge1N0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSBvZiB0aGUgZXJyb3IuXG4gKiBAcHJvcGVydHkge1N0cmluZ30gY29kZSBUaGUgZXJyb3IgY29kZSBhc3NpZ25lZCB0byB0aGlzIGVycm9yLlxuICogQHByb3BlcnR5IHtTdHJpbmd9IGRhdGEgQWRkaXRpb25hbCBkYXRhIHByb3ZpZGVkIGZvciByZXBvcnRpbmcgb3IgZGVidWdnaW5nICh3aGVyZSBhdmFpbGFibGUpLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gUHJvZ3Jlc3NEYXRhXG4gKiBAcHJvcGVydHkge09iamVjdH0gZW50cmllc1xuICogQHByb3BlcnR5IHtOdW1iZXJ9IGVudHJpZXMudG90YWwgTnVtYmVyIG9mIGVudHJpZXMgdGhhdCBoYXZlIGJlZW4gYXBwZW5kZWQuXG4gKiBAcHJvcGVydHkge051bWJlcn0gZW50cmllcy5wcm9jZXNzZWQgTnVtYmVyIG9mIGVudHJpZXMgdGhhdCBoYXZlIGJlZW4gcHJvY2Vzc2VkLlxuICogQHByb3BlcnR5IHtPYmplY3R9IGZzXG4gKiBAcHJvcGVydHkge051bWJlcn0gZnMudG90YWxCeXRlcyBOdW1iZXIgb2YgYnl0ZXMgdGhhdCBoYXZlIGJlZW4gYXBwZW5kZWQuIENhbGN1bGF0ZWQgYXN5bmNocm9ub3VzbHkgYW5kIG1pZ2h0IG5vdCBiZSBhY2N1cmF0ZTogaXQgZ3Jvd3RoIHdoaWxlIGVudHJpZXMgYXJlIGFkZGVkLiAoYmFzZWQgb24gZnMuU3RhdHMpXG4gKiBAcHJvcGVydHkge051bWJlcn0gZnMucHJvY2Vzc2VkQnl0ZXMgTnVtYmVyIG9mIGJ5dGVzIHRoYXQgaGF2ZSBiZWVuIHByb2Nlc3NlZC4gKGJhc2VkIG9uIGZzLlN0YXRzKVxuICovXG4iLAogICAgIi8qKlxuICogbm9kZS1jb21wcmVzcy1jb21tb25zXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE0IENocmlzIFRhbGtpbmd0b24sIGNvbnRyaWJ1dG9ycy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hcmNoaXZlcmpzL25vZGUtY29tcHJlc3MtY29tbW9ucy9ibG9iL21hc3Rlci9MSUNFTlNFLU1JVFxuICovXG52YXIgQXJjaGl2ZUVudHJ5ID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHt9O1xuXG5BcmNoaXZlRW50cnkucHJvdG90eXBlLmdldE5hbWUgPSBmdW5jdGlvbigpIHt9O1xuXG5BcmNoaXZlRW50cnkucHJvdG90eXBlLmdldFNpemUgPSBmdW5jdGlvbigpIHt9O1xuXG5BcmNoaXZlRW50cnkucHJvdG90eXBlLmdldExhc3RNb2RpZmllZERhdGUgPSBmdW5jdGlvbigpIHt9O1xuXG5BcmNoaXZlRW50cnkucHJvdG90eXBlLmlzRGlyZWN0b3J5ID0gZnVuY3Rpb24oKSB7fTsiLAogICAgIi8qKlxuICogbm9kZS1jb21wcmVzcy1jb21tb25zXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE0IENocmlzIFRhbGtpbmd0b24sIGNvbnRyaWJ1dG9ycy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hcmNoaXZlcmpzL25vZGUtY29tcHJlc3MtY29tbW9ucy9ibG9iL21hc3Rlci9MSUNFTlNFLU1JVFxuICovXG52YXIgdXRpbCA9IG1vZHVsZS5leHBvcnRzID0ge307XG5cbnV0aWwuZGF0ZVRvRG9zID0gZnVuY3Rpb24oZCwgZm9yY2VMb2NhbFRpbWUpIHtcbiAgZm9yY2VMb2NhbFRpbWUgPSBmb3JjZUxvY2FsVGltZSB8fCBmYWxzZTtcblxuICB2YXIgeWVhciA9IGZvcmNlTG9jYWxUaW1lID8gZC5nZXRGdWxsWWVhcigpIDogZC5nZXRVVENGdWxsWWVhcigpO1xuXG4gIGlmICh5ZWFyIDwgMTk4MCkge1xuICAgIHJldHVybiAyMTYyNjg4OyAvLyAxOTgwLTEtMSAwMDowMDowMFxuICB9IGVsc2UgaWYgKHllYXIgPj0gMjA0NCkge1xuICAgIHJldHVybiAyMTQxMTc1Njc3OyAvLyAyMDQzLTEyLTMxIDIzOjU5OjU4XG4gIH1cblxuICB2YXIgdmFsID0ge1xuICAgIHllYXI6IHllYXIsXG4gICAgbW9udGg6IGZvcmNlTG9jYWxUaW1lID8gZC5nZXRNb250aCgpIDogZC5nZXRVVENNb250aCgpLFxuICAgIGRhdGU6IGZvcmNlTG9jYWxUaW1lID8gZC5nZXREYXRlKCkgOiBkLmdldFVUQ0RhdGUoKSxcbiAgICBob3VyczogZm9yY2VMb2NhbFRpbWUgPyBkLmdldEhvdXJzKCkgOiBkLmdldFVUQ0hvdXJzKCksXG4gICAgbWludXRlczogZm9yY2VMb2NhbFRpbWUgPyBkLmdldE1pbnV0ZXMoKSA6IGQuZ2V0VVRDTWludXRlcygpLFxuICAgIHNlY29uZHM6IGZvcmNlTG9jYWxUaW1lID8gZC5nZXRTZWNvbmRzKCkgOiBkLmdldFVUQ1NlY29uZHMoKVxuICB9O1xuXG4gIHJldHVybiAoKHZhbC55ZWFyIC0gMTk4MCkgPDwgMjUpIHwgKCh2YWwubW9udGggKyAxKSA8PCAyMSkgfCAodmFsLmRhdGUgPDwgMTYpIHxcbiAgICAodmFsLmhvdXJzIDw8IDExKSB8ICh2YWwubWludXRlcyA8PCA1KSB8ICh2YWwuc2Vjb25kcyAvIDIpO1xufTtcblxudXRpbC5kb3NUb0RhdGUgPSBmdW5jdGlvbihkb3MpIHtcbiAgcmV0dXJuIG5ldyBEYXRlKCgoZG9zID4+IDI1KSAmIDB4N2YpICsgMTk4MCwgKChkb3MgPj4gMjEpICYgMHgwZikgLSAxLCAoZG9zID4+IDE2KSAmIDB4MWYsIChkb3MgPj4gMTEpICYgMHgxZiwgKGRvcyA+PiA1KSAmIDB4M2YsIChkb3MgJiAweDFmKSA8PCAxKTtcbn07XG5cbnV0aWwuZnJvbURvc1RpbWUgPSBmdW5jdGlvbihidWYpIHtcbiAgcmV0dXJuIHV0aWwuZG9zVG9EYXRlKGJ1Zi5yZWFkVUludDMyTEUoMCkpO1xufTtcblxudXRpbC5nZXRFaWdodEJ5dGVzID0gZnVuY3Rpb24odikge1xuICB2YXIgYnVmID0gQnVmZmVyLmFsbG9jKDgpO1xuICBidWYud3JpdGVVSW50MzJMRSh2ICUgMHgwMTAwMDAwMDAwLCAwKTtcbiAgYnVmLndyaXRlVUludDMyTEUoKHYgLyAweDAxMDAwMDAwMDApIHwgMCwgNCk7XG5cbiAgcmV0dXJuIGJ1Zjtcbn07XG5cbnV0aWwuZ2V0U2hvcnRCeXRlcyA9IGZ1bmN0aW9uKHYpIHtcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvYygyKTtcbiAgYnVmLndyaXRlVUludDE2TEUoKHYgJiAweEZGRkYpID4+PiAwLCAwKTtcblxuICByZXR1cm4gYnVmO1xufTtcblxudXRpbC5nZXRTaG9ydEJ5dGVzVmFsdWUgPSBmdW5jdGlvbihidWYsIG9mZnNldCkge1xuICByZXR1cm4gYnVmLnJlYWRVSW50MTZMRShvZmZzZXQpO1xufTtcblxudXRpbC5nZXRMb25nQnl0ZXMgPSBmdW5jdGlvbih2KSB7XG4gIHZhciBidWYgPSBCdWZmZXIuYWxsb2MoNCk7XG4gIGJ1Zi53cml0ZVVJbnQzMkxFKCh2ICYgMHhGRkZGRkZGRikgPj4+IDAsIDApO1xuXG4gIHJldHVybiBidWY7XG59O1xuXG51dGlsLmdldExvbmdCeXRlc1ZhbHVlID0gZnVuY3Rpb24oYnVmLCBvZmZzZXQpIHtcbiAgcmV0dXJuIGJ1Zi5yZWFkVUludDMyTEUob2Zmc2V0KTtcbn07XG5cbnV0aWwudG9Eb3NUaW1lID0gZnVuY3Rpb24oZCkge1xuICByZXR1cm4gdXRpbC5nZXRMb25nQnl0ZXModXRpbC5kYXRlVG9Eb3MoZCkpO1xufTsiLAogICAgIi8qKlxuICogbm9kZS1jb21wcmVzcy1jb21tb25zXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE0IENocmlzIFRhbGtpbmd0b24sIGNvbnRyaWJ1dG9ycy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hcmNoaXZlcmpzL25vZGUtY29tcHJlc3MtY29tbW9ucy9ibG9iL21hc3Rlci9MSUNFTlNFLU1JVFxuICovXG52YXIgemlwVXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xuXG52YXIgREFUQV9ERVNDUklQVE9SX0ZMQUcgPSAxIDw8IDM7XG52YXIgRU5DUllQVElPTl9GTEFHID0gMSA8PCAwO1xudmFyIE5VTUJFUl9PRl9TSEFOTk9OX0ZBTk9fVFJFRVNfRkxBRyA9IDEgPDwgMjtcbnZhciBTTElESU5HX0RJQ1RJT05BUllfU0laRV9GTEFHID0gMSA8PCAxO1xudmFyIFNUUk9OR19FTkNSWVBUSU9OX0ZMQUcgPSAxIDw8IDY7XG52YXIgVUZUOF9OQU1FU19GTEFHID0gMSA8PCAxMTtcblxudmFyIEdlbmVyYWxQdXJwb3NlQml0ID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEdlbmVyYWxQdXJwb3NlQml0KSkge1xuICAgIHJldHVybiBuZXcgR2VuZXJhbFB1cnBvc2VCaXQoKTtcbiAgfVxuXG4gIHRoaXMuZGVzY3JpcHRvciA9IGZhbHNlO1xuICB0aGlzLmVuY3J5cHRpb24gPSBmYWxzZTtcbiAgdGhpcy51dGY4ID0gZmFsc2U7XG4gIHRoaXMubnVtYmVyT2ZTaGFubm9uRmFub1RyZWVzID0gMDtcbiAgdGhpcy5zdHJvbmdFbmNyeXB0aW9uID0gZmFsc2U7XG4gIHRoaXMuc2xpZGluZ0RpY3Rpb25hcnlTaXplID0gMDtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbkdlbmVyYWxQdXJwb3NlQml0LnByb3RvdHlwZS5lbmNvZGUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHppcFV0aWwuZ2V0U2hvcnRCeXRlcyhcbiAgICAodGhpcy5kZXNjcmlwdG9yID8gREFUQV9ERVNDUklQVE9SX0ZMQUcgOiAwKSB8XG4gICAgKHRoaXMudXRmOCA/IFVGVDhfTkFNRVNfRkxBRyA6IDApIHxcbiAgICAodGhpcy5lbmNyeXB0aW9uID8gRU5DUllQVElPTl9GTEFHIDogMCkgfFxuICAgICh0aGlzLnN0cm9uZ0VuY3J5cHRpb24gPyBTVFJPTkdfRU5DUllQVElPTl9GTEFHIDogMClcbiAgKTtcbn07XG5cbkdlbmVyYWxQdXJwb3NlQml0LnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9uKGJ1Ziwgb2Zmc2V0KSB7XG4gIHZhciBmbGFnID0gemlwVXRpbC5nZXRTaG9ydEJ5dGVzVmFsdWUoYnVmLCBvZmZzZXQpO1xuICB2YXIgZ2JwID0gbmV3IEdlbmVyYWxQdXJwb3NlQml0KCk7XG5cbiAgZ2JwLnVzZURhdGFEZXNjcmlwdG9yKChmbGFnICYgREFUQV9ERVNDUklQVE9SX0ZMQUcpICE9PSAwKTtcbiAgZ2JwLnVzZVVURjhGb3JOYW1lcygoZmxhZyAmIFVGVDhfTkFNRVNfRkxBRykgIT09IDApO1xuICBnYnAudXNlU3Ryb25nRW5jcnlwdGlvbigoZmxhZyAmIFNUUk9OR19FTkNSWVBUSU9OX0ZMQUcpICE9PSAwKTtcbiAgZ2JwLnVzZUVuY3J5cHRpb24oKGZsYWcgJiBFTkNSWVBUSU9OX0ZMQUcpICE9PSAwKTtcbiAgZ2JwLnNldFNsaWRpbmdEaWN0aW9uYXJ5U2l6ZSgoZmxhZyAmIFNMSURJTkdfRElDVElPTkFSWV9TSVpFX0ZMQUcpICE9PSAwID8gODE5MiA6IDQwOTYpO1xuICBnYnAuc2V0TnVtYmVyT2ZTaGFubm9uRmFub1RyZWVzKChmbGFnICYgTlVNQkVSX09GX1NIQU5OT05fRkFOT19UUkVFU19GTEFHKSAhPT0gMCA/IDMgOiAyKTtcblxuICByZXR1cm4gZ2JwO1xufTtcblxuR2VuZXJhbFB1cnBvc2VCaXQucHJvdG90eXBlLnNldE51bWJlck9mU2hhbm5vbkZhbm9UcmVlcyA9IGZ1bmN0aW9uKG4pIHtcbiAgdGhpcy5udW1iZXJPZlNoYW5ub25GYW5vVHJlZXMgPSBuO1xufTtcblxuR2VuZXJhbFB1cnBvc2VCaXQucHJvdG90eXBlLmdldE51bWJlck9mU2hhbm5vbkZhbm9UcmVlcyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5udW1iZXJPZlNoYW5ub25GYW5vVHJlZXM7XG59O1xuXG5HZW5lcmFsUHVycG9zZUJpdC5wcm90b3R5cGUuc2V0U2xpZGluZ0RpY3Rpb25hcnlTaXplID0gZnVuY3Rpb24obikge1xuICB0aGlzLnNsaWRpbmdEaWN0aW9uYXJ5U2l6ZSA9IG47XG59O1xuXG5HZW5lcmFsUHVycG9zZUJpdC5wcm90b3R5cGUuZ2V0U2xpZGluZ0RpY3Rpb25hcnlTaXplID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNsaWRpbmdEaWN0aW9uYXJ5U2l6ZTtcbn07XG5cbkdlbmVyYWxQdXJwb3NlQml0LnByb3RvdHlwZS51c2VEYXRhRGVzY3JpcHRvciA9IGZ1bmN0aW9uKGIpIHtcbiAgdGhpcy5kZXNjcmlwdG9yID0gYjtcbn07XG5cbkdlbmVyYWxQdXJwb3NlQml0LnByb3RvdHlwZS51c2VzRGF0YURlc2NyaXB0b3IgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZGVzY3JpcHRvcjtcbn07XG5cbkdlbmVyYWxQdXJwb3NlQml0LnByb3RvdHlwZS51c2VFbmNyeXB0aW9uID0gZnVuY3Rpb24oYikge1xuICB0aGlzLmVuY3J5cHRpb24gPSBiO1xufTtcblxuR2VuZXJhbFB1cnBvc2VCaXQucHJvdG90eXBlLnVzZXNFbmNyeXB0aW9uID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmVuY3J5cHRpb247XG59O1xuXG5HZW5lcmFsUHVycG9zZUJpdC5wcm90b3R5cGUudXNlU3Ryb25nRW5jcnlwdGlvbiA9IGZ1bmN0aW9uKGIpIHtcbiAgdGhpcy5zdHJvbmdFbmNyeXB0aW9uID0gYjtcbn07XG5cbkdlbmVyYWxQdXJwb3NlQml0LnByb3RvdHlwZS51c2VzU3Ryb25nRW5jcnlwdGlvbiA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zdHJvbmdFbmNyeXB0aW9uO1xufTtcblxuR2VuZXJhbFB1cnBvc2VCaXQucHJvdG90eXBlLnVzZVVURjhGb3JOYW1lcyA9IGZ1bmN0aW9uKGIpIHtcbiAgdGhpcy51dGY4ID0gYjtcbn07XG5cbkdlbmVyYWxQdXJwb3NlQml0LnByb3RvdHlwZS51c2VzVVRGOEZvck5hbWVzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnV0Zjg7XG59OyIsCiAgICAiLyoqXG4gKiBub2RlLWNvbXByZXNzLWNvbW1vbnNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQgQ2hyaXMgVGFsa2luZ3RvbiwgY29udHJpYnV0b3JzLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cHM6Ly9naXRodWIuY29tL2FyY2hpdmVyanMvbm9kZS1jb21wcmVzcy1jb21tb25zL2Jsb2IvbWFzdGVyL0xJQ0VOU0UtTUlUXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIC8qKlxuICAgICAqIEJpdHMgdXNlZCBmb3IgcGVybWlzc2lvbnMgKGFuZCBzdGlja3kgYml0KVxuICAgICAqL1xuICAgIFBFUk1fTUFTSzogNDA5NSwgLy8gMDc3NzdcblxuICAgIC8qKlxuICAgICAqIEJpdHMgdXNlZCB0byBpbmRpY2F0ZSB0aGUgZmlsZXN5c3RlbSBvYmplY3QgdHlwZS5cbiAgICAgKi9cbiAgICBGSUxFX1RZUEVfRkxBRzogNjE0NDAsIC8vIDAxNzAwMDBcblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyBzeW1ib2xpYyBsaW5rcy5cbiAgICAgKi9cbiAgICBMSU5LX0ZMQUc6IDQwOTYwLCAvLyAwMTIwMDAwXG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgcGxhaW4gZmlsZXMuXG4gICAgICovXG4gICAgRklMRV9GTEFHOiAzMjc2OCwgLy8gMDEwMDAwMFxuXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIGRpcmVjdG9yaWVzLlxuICAgICAqL1xuICAgIERJUl9GTEFHOiAxNjM4NCwgLy8gMDQwMDAwXG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gc29tZXdoYXQgYXJiaXRyYXJ5IGNob2ljZXMgdGhhdCBhcmUgcXVpdGUgY29tbW9uIGZvciBzaGFyZWRcbiAgICAvLyBpbnN0YWxsYXRpb25zXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIC8qKlxuICAgICAqIERlZmF1bHQgcGVybWlzc2lvbnMgZm9yIHN5bWJvbGljIGxpbmtzLlxuICAgICAqL1xuICAgIERFRkFVTFRfTElOS19QRVJNOiA1MTEsIC8vIDA3NzdcblxuICAgIC8qKlxuICAgICAqIERlZmF1bHQgcGVybWlzc2lvbnMgZm9yIGRpcmVjdG9yaWVzLlxuICAgICAqL1xuICAgIERFRkFVTFRfRElSX1BFUk06IDQ5MywgLy8gMDc1NVxuXG4gICAgLyoqXG4gICAgICogRGVmYXVsdCBwZXJtaXNzaW9ucyBmb3IgcGxhaW4gZmlsZXMuXG4gICAgICovXG4gICAgREVGQVVMVF9GSUxFX1BFUk06IDQyMCAvLyAwNjQ0XG59OyIsCiAgICAiLyoqXG4gKiBub2RlLWNvbXByZXNzLWNvbW1vbnNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQgQ2hyaXMgVGFsa2luZ3RvbiwgY29udHJpYnV0b3JzLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cHM6Ly9naXRodWIuY29tL2FyY2hpdmVyanMvbm9kZS1jb21wcmVzcy1jb21tb25zL2Jsb2IvbWFzdGVyL0xJQ0VOU0UtTUlUXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICBXT1JEOiA0LFxuICBEV09SRDogOCxcbiAgRU1QVFk6IEJ1ZmZlci5hbGxvYygwKSxcblxuICBTSE9SVDogMixcbiAgU0hPUlRfTUFTSzogMHhmZmZmLFxuICBTSE9SVF9TSElGVDogMTYsXG4gIFNIT1JUX1pFUk86IEJ1ZmZlci5mcm9tKEFycmF5KDIpKSxcbiAgTE9ORzogNCxcbiAgTE9OR19aRVJPOiBCdWZmZXIuZnJvbShBcnJheSg0KSksXG5cbiAgTUlOX1ZFUlNJT05fSU5JVElBTDogMTAsXG4gIE1JTl9WRVJTSU9OX0RBVEFfREVTQ1JJUFRPUjogMjAsXG4gIE1JTl9WRVJTSU9OX1pJUDY0OiA0NSxcbiAgVkVSU0lPTl9NQURFQlk6IDQ1LFxuXG4gIE1FVEhPRF9TVE9SRUQ6IDAsXG4gIE1FVEhPRF9ERUZMQVRFRDogOCxcblxuICBQTEFURk9STV9VTklYOiAzLFxuICBQTEFURk9STV9GQVQ6IDAsXG5cbiAgU0lHX0xGSDogMHgwNDAzNGI1MCxcbiAgU0lHX0REOiAweDA4MDc0YjUwLFxuICBTSUdfQ0ZIOiAweDAyMDE0YjUwLFxuICBTSUdfRU9DRDogMHgwNjA1NGI1MCxcbiAgU0lHX1pJUDY0X0VPQ0Q6IDB4MDYwNjRCNTAsXG4gIFNJR19aSVA2NF9FT0NEX0xPQzogMHgwNzA2NEI1MCxcblxuICBaSVA2NF9NQUdJQ19TSE9SVDogMHhmZmZmLFxuICBaSVA2NF9NQUdJQzogMHhmZmZmZmZmZixcbiAgWklQNjRfRVhUUkFfSUQ6IDB4MDAwMSxcblxuICBaTElCX05PX0NPTVBSRVNTSU9OOiAwLFxuICBaTElCX0JFU1RfU1BFRUQ6IDEsXG4gIFpMSUJfQkVTVF9DT01QUkVTU0lPTjogOSxcbiAgWkxJQl9ERUZBVUxUX0NPTVBSRVNTSU9OOiAtMSxcblxuICBNT0RFX01BU0s6IDB4RkZGLFxuICBERUZBVUxUX0ZJTEVfTU9ERTogMzMxODgsIC8vIDAxMDY0NCA9IC1ydy1yLS1yLS0gPSBTX0lGUkVHIHwgU19JUlVTUiB8IFNfSVdVU1IgfCBTX0lSR1JQIHwgU19JUk9USFxuICBERUZBVUxUX0RJUl9NT0RFOiAxNjg3NywgIC8vIDA0MDc1NSA9IGRyd3hyLXhyLXggPSBTX0lGRElSIHwgU19JUldYVSB8IFNfSVJHUlAgfCBTX0lYR1JQIHwgU19JUk9USCB8IFNfSVhPVEhcblxuICBFWFRfRklMRV9BVFRSX0RJUjogMTEwNjA1MTA4OCwgIC8vIDAxMDE3MzIwMDAyMCA9IGRyd3hyLXhyLXggPSAoKChTX0lGRElSIHwgMDc1NSkgPDwgMTYpIHwgU19ET1NfRClcbiAgRVhUX0ZJTEVfQVRUUl9GSUxFOiAyMTc1MDA4ODAwLCAvLyAwMjAxNTEwMDAwNDAgPSAtcnctci0tci0tID0gKCgoU19JRlJFRyB8IDA2NDQpIDw8IDE2KSB8IFNfRE9TX0EpID4+PiAwXG5cbiAgLy8gVW5peCBmaWxlIHR5cGVzXG4gIFNfSUZNVDogNjE0NDAsICAgLy8gMDE3MDAwMCB0eXBlIG9mIGZpbGUgbWFza1xuICBTX0lGSUZPOiA0MDk2LCAgIC8vIDAxMDAwMCBuYW1lZCBwaXBlIChmaWZvKVxuICBTX0lGQ0hSOiA4MTkyLCAgIC8vIDAyMDAwMCBjaGFyYWN0ZXIgc3BlY2lhbFxuICBTX0lGRElSOiAxNjM4NCwgIC8vIDA0MDAwMCBkaXJlY3RvcnlcbiAgU19JRkJMSzogMjQ1NzYsICAvLyAwNjAwMDAgYmxvY2sgc3BlY2lhbFxuICBTX0lGUkVHOiAzMjc2OCwgIC8vIDAxMDAwMDAgcmVndWxhclxuICBTX0lGTE5LOiA0MDk2MCwgIC8vIDAxMjAwMDAgc3ltYm9saWMgbGlua1xuICBTX0lGU09DSzogNDkxNTIsIC8vIDAxNDAwMDAgc29ja2V0XG5cbiAgLy8gRE9TIGZpbGUgdHlwZSBmbGFnc1xuICBTX0RPU19BOiAzMiwgLy8gMDQwIEFyY2hpdmVcbiAgU19ET1NfRDogMTYsIC8vIDAyMCBEaXJlY3RvcnlcbiAgU19ET1NfVjogOCwgIC8vIDAxMCBWb2x1bWVcbiAgU19ET1NfUzogNCwgIC8vIDA0IFN5c3RlbVxuICBTX0RPU19IOiAyLCAgLy8gMDIgSGlkZGVuXG4gIFNfRE9TX1I6IDEgICAvLyAwMSBSZWFkIE9ubHlcbn07XG4iLAogICAgIi8qKlxuICogbm9kZS1jb21wcmVzcy1jb21tb25zXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE0IENocmlzIFRhbGtpbmd0b24sIGNvbnRyaWJ1dG9ycy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hcmNoaXZlcmpzL25vZGUtY29tcHJlc3MtY29tbW9ucy9ibG9iL21hc3Rlci9MSUNFTlNFLU1JVFxuICovXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCd1dGlsJykuaW5oZXJpdHM7XG52YXIgbm9ybWFsaXplUGF0aCA9IHJlcXVpcmUoJ25vcm1hbGl6ZS1wYXRoJyk7XG5cbnZhciBBcmNoaXZlRW50cnkgPSByZXF1aXJlKCcuLi9hcmNoaXZlLWVudHJ5Jyk7XG52YXIgR2VuZXJhbFB1cnBvc2VCaXQgPSByZXF1aXJlKCcuL2dlbmVyYWwtcHVycG9zZS1iaXQnKTtcbnZhciBVbml4U3RhdCA9IHJlcXVpcmUoJy4vdW5peC1zdGF0Jyk7XG5cbnZhciBjb25zdGFudHMgPSByZXF1aXJlKCcuL2NvbnN0YW50cycpO1xudmFyIHppcFV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcblxudmFyIFppcEFyY2hpdmVFbnRyeSA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24obmFtZSkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgWmlwQXJjaGl2ZUVudHJ5KSkge1xuICAgIHJldHVybiBuZXcgWmlwQXJjaGl2ZUVudHJ5KG5hbWUpO1xuICB9XG5cbiAgQXJjaGl2ZUVudHJ5LmNhbGwodGhpcyk7XG5cbiAgdGhpcy5wbGF0Zm9ybSA9IGNvbnN0YW50cy5QTEFURk9STV9GQVQ7XG4gIHRoaXMubWV0aG9kID0gLTE7XG5cbiAgdGhpcy5uYW1lID0gbnVsbDtcbiAgdGhpcy5zaXplID0gMDtcbiAgdGhpcy5jc2l6ZSA9IDA7XG4gIHRoaXMuZ3BiID0gbmV3IEdlbmVyYWxQdXJwb3NlQml0KCk7XG4gIHRoaXMuY3JjID0gMDtcbiAgdGhpcy50aW1lID0gLTE7XG5cbiAgdGhpcy5taW52ZXIgPSBjb25zdGFudHMuTUlOX1ZFUlNJT05fSU5JVElBTDtcbiAgdGhpcy5tb2RlID0gLTE7XG4gIHRoaXMuZXh0cmEgPSBudWxsO1xuICB0aGlzLmV4YXR0ciA9IDA7XG4gIHRoaXMuaW5hdHRyID0gMDtcbiAgdGhpcy5jb21tZW50ID0gbnVsbDtcblxuICBpZiAobmFtZSkge1xuICAgIHRoaXMuc2V0TmFtZShuYW1lKTtcbiAgfVxufTtcblxuaW5oZXJpdHMoWmlwQXJjaGl2ZUVudHJ5LCBBcmNoaXZlRW50cnkpO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGV4dHJhIGZpZWxkcyByZWxhdGVkIHRvIHRoZSBlbnRyeS5cbiAqXG4gKiBAcmV0dXJucyB7QnVmZmVyfVxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLmdldENlbnRyYWxEaXJlY3RvcnlFeHRyYSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5nZXRFeHRyYSgpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjb21tZW50IHNldCBmb3IgdGhlIGVudHJ5LlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuZ2V0Q29tbWVudCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5jb21tZW50ICE9PSBudWxsID8gdGhpcy5jb21tZW50IDogJyc7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGNvbXByZXNzZWQgc2l6ZSBvZiB0aGUgZW50cnkuXG4gKlxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5nZXRDb21wcmVzc2VkU2l6ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5jc2l6ZTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgQ1JDMzIgZGlnZXN0IGZvciB0aGUgZW50cnkuXG4gKlxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5nZXRDcmMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuY3JjO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBleHRlcm5hbCBmaWxlIGF0dHJpYnV0ZXMgZm9yIHRoZSBlbnRyeS5cbiAqXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLmdldEV4dGVybmFsQXR0cmlidXRlcyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5leGF0dHI7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGV4dHJhIGZpZWxkcyByZWxhdGVkIHRvIHRoZSBlbnRyeS5cbiAqXG4gKiBAcmV0dXJucyB7QnVmZmVyfVxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLmdldEV4dHJhID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmV4dHJhICE9PSBudWxsID8gdGhpcy5leHRyYSA6IGNvbnN0YW50cy5FTVBUWTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZ2VuZXJhbCBwdXJwb3NlIGJpdHMgcmVsYXRlZCB0byB0aGUgZW50cnkuXG4gKlxuICogQHJldHVybnMge0dlbmVyYWxQdXJwb3NlQml0fVxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLmdldEdlbmVyYWxQdXJwb3NlQml0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmdwYjtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgaW50ZXJuYWwgZmlsZSBhdHRyaWJ1dGVzIGZvciB0aGUgZW50cnkuXG4gKlxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5nZXRJbnRlcm5hbEF0dHJpYnV0ZXMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuaW5hdHRyO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBsYXN0IG1vZGlmaWVkIGRhdGUgb2YgdGhlIGVudHJ5LlxuICpcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuZ2V0TGFzdE1vZGlmaWVkRGF0ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5nZXRUaW1lKCk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGV4dHJhIGZpZWxkcyByZWxhdGVkIHRvIHRoZSBlbnRyeS5cbiAqXG4gKiBAcmV0dXJucyB7QnVmZmVyfVxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLmdldExvY2FsRmlsZURhdGFFeHRyYSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5nZXRFeHRyYSgpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjb21wcmVzc2lvbiBtZXRob2QgdXNlZCBvbiB0aGUgZW50cnkuXG4gKlxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5nZXRNZXRob2QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMubWV0aG9kO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBmaWxlbmFtZSBvZiB0aGUgZW50cnkuXG4gKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5nZXROYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLm5hbWU7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHBsYXRmb3JtIG9uIHdoaWNoIHRoZSBlbnRyeSB3YXMgbWFkZS5cbiAqXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLmdldFBsYXRmb3JtID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnBsYXRmb3JtO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBlbnRyeS5cbiAqXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLmdldFNpemUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2l6ZTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhIGRhdGUgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgbGFzdCBtb2RpZmllZCBkYXRlIG9mIHRoZSBlbnRyeS5cbiAqXG4gKiBAcmV0dXJucyB7bnVtYmVyfERhdGV9XG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuZ2V0VGltZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy50aW1lICE9PSAtMSA/IHppcFV0aWwuZG9zVG9EYXRlKHRoaXMudGltZSkgOiAtMTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgRE9TIHRpbWVzdGFtcCBmb3IgdGhlIGVudHJ5LlxuICpcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuZ2V0VGltZURvcyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy50aW1lICE9PSAtMSA/IHRoaXMudGltZSA6IDA7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIFVOSVggZmlsZSBwZXJtaXNzaW9ucyBmb3IgdGhlIGVudHJ5LlxuICpcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuZ2V0VW5peE1vZGUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMucGxhdGZvcm0gIT09IGNvbnN0YW50cy5QTEFURk9STV9VTklYID8gMCA6ICgodGhpcy5nZXRFeHRlcm5hbEF0dHJpYnV0ZXMoKSA+PiBjb25zdGFudHMuU0hPUlRfU0hJRlQpICYgY29uc3RhbnRzLlNIT1JUX01BU0spO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSB2ZXJzaW9uIG9mIFpJUCBuZWVkZWQgdG8gZXh0cmFjdCB0aGUgZW50cnkuXG4gKlxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5nZXRWZXJzaW9uTmVlZGVkVG9FeHRyYWN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLm1pbnZlcjtcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgY29tbWVudCBvZiB0aGUgZW50cnkuXG4gKlxuICogQHBhcmFtIGNvbW1lbnRcbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5zZXRDb21tZW50ID0gZnVuY3Rpb24oY29tbWVudCkge1xuICBpZiAoQnVmZmVyLmJ5dGVMZW5ndGgoY29tbWVudCkgIT09IGNvbW1lbnQubGVuZ3RoKSB7XG4gICAgdGhpcy5nZXRHZW5lcmFsUHVycG9zZUJpdCgpLnVzZVVURjhGb3JOYW1lcyh0cnVlKTtcbiAgfVxuXG4gIHRoaXMuY29tbWVudCA9IGNvbW1lbnQ7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGNvbXByZXNzZWQgc2l6ZSBvZiB0aGUgZW50cnkuXG4gKlxuICogQHBhcmFtIHNpemVcbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5zZXRDb21wcmVzc2VkU2l6ZSA9IGZ1bmN0aW9uKHNpemUpIHtcbiAgaWYgKHNpemUgPCAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGVudHJ5IGNvbXByZXNzZWQgc2l6ZScpO1xuICB9XG5cbiAgdGhpcy5jc2l6ZSA9IHNpemU7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGNoZWNrc3VtIG9mIHRoZSBlbnRyeS5cbiAqXG4gKiBAcGFyYW0gY3JjXG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuc2V0Q3JjID0gZnVuY3Rpb24oY3JjKSB7XG4gIGlmIChjcmMgPCAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGVudHJ5IGNyYzMyJyk7XG4gIH1cblxuICB0aGlzLmNyYyA9IGNyYztcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgZXh0ZXJuYWwgZmlsZSBhdHRyaWJ1dGVzIG9mIHRoZSBlbnRyeS5cbiAqXG4gKiBAcGFyYW0gYXR0clxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLnNldEV4dGVybmFsQXR0cmlidXRlcyA9IGZ1bmN0aW9uKGF0dHIpIHtcbiAgdGhpcy5leGF0dHIgPSBhdHRyID4+PiAwO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBleHRyYSBmaWVsZHMgcmVsYXRlZCB0byB0aGUgZW50cnkuXG4gKlxuICogQHBhcmFtIGV4dHJhXG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuc2V0RXh0cmEgPSBmdW5jdGlvbihleHRyYSkge1xuICB0aGlzLmV4dHJhID0gZXh0cmE7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGdlbmVyYWwgcHVycG9zZSBiaXRzIHJlbGF0ZWQgdG8gdGhlIGVudHJ5LlxuICpcbiAqIEBwYXJhbSBncGJcbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5zZXRHZW5lcmFsUHVycG9zZUJpdCA9IGZ1bmN0aW9uKGdwYikge1xuICBpZiAoIShncGIgaW5zdGFuY2VvZiBHZW5lcmFsUHVycG9zZUJpdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgZW50cnkgR2VuZXJhbFB1cnBvc2VCaXQnKTtcbiAgfVxuXG4gIHRoaXMuZ3BiID0gZ3BiO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBpbnRlcm5hbCBmaWxlIGF0dHJpYnV0ZXMgb2YgdGhlIGVudHJ5LlxuICpcbiAqIEBwYXJhbSBhdHRyXG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuc2V0SW50ZXJuYWxBdHRyaWJ1dGVzID0gZnVuY3Rpb24oYXR0cikge1xuICB0aGlzLmluYXR0ciA9IGF0dHI7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGNvbXByZXNzaW9uIG1ldGhvZCBvZiB0aGUgZW50cnkuXG4gKlxuICogQHBhcmFtIG1ldGhvZFxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLnNldE1ldGhvZCA9IGZ1bmN0aW9uKG1ldGhvZCkge1xuICBpZiAobWV0aG9kIDwgMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBlbnRyeSBjb21wcmVzc2lvbiBtZXRob2QnKTtcbiAgfVxuXG4gIHRoaXMubWV0aG9kID0gbWV0aG9kO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBuYW1lIG9mIHRoZSBlbnRyeS5cbiAqXG4gKiBAcGFyYW0gbmFtZVxuICogQHBhcmFtIHByZXBlbmRTbGFzaFxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLnNldE5hbWUgPSBmdW5jdGlvbihuYW1lLCBwcmVwZW5kU2xhc2ggPSBmYWxzZSkge1xuICBuYW1lID0gbm9ybWFsaXplUGF0aChuYW1lLCBmYWxzZSlcbiAgICAucmVwbGFjZSgvXlxcdys6LywgJycpXG4gICAgLnJlcGxhY2UoL14oXFwuXFwuXFwvfFxcLykrLywgJycpO1xuXG4gIGlmIChwcmVwZW5kU2xhc2gpIHtcbiAgICBuYW1lID0gYC8ke25hbWV9YDtcbiAgfVxuXG4gIGlmIChCdWZmZXIuYnl0ZUxlbmd0aChuYW1lKSAhPT0gbmFtZS5sZW5ndGgpIHtcbiAgICB0aGlzLmdldEdlbmVyYWxQdXJwb3NlQml0KCkudXNlVVRGOEZvck5hbWVzKHRydWUpO1xuICB9XG5cbiAgdGhpcy5uYW1lID0gbmFtZTtcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgcGxhdGZvcm0gb24gd2hpY2ggdGhlIGVudHJ5IHdhcyBtYWRlLlxuICpcbiAqIEBwYXJhbSBwbGF0Zm9ybVxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLnNldFBsYXRmb3JtID0gZnVuY3Rpb24ocGxhdGZvcm0pIHtcbiAgdGhpcy5wbGF0Zm9ybSA9IHBsYXRmb3JtO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBzaXplIG9mIHRoZSBlbnRyeS5cbiAqXG4gKiBAcGFyYW0gc2l6ZVxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLnNldFNpemUgPSBmdW5jdGlvbihzaXplKSB7XG4gIGlmIChzaXplIDwgMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBlbnRyeSBzaXplJyk7XG4gIH1cblxuICB0aGlzLnNpemUgPSBzaXplO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSB0aW1lIG9mIHRoZSBlbnRyeS5cbiAqXG4gKiBAcGFyYW0gdGltZVxuICogQHBhcmFtIGZvcmNlTG9jYWxUaW1lXG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuc2V0VGltZSA9IGZ1bmN0aW9uKHRpbWUsIGZvcmNlTG9jYWxUaW1lKSB7XG4gIGlmICghKHRpbWUgaW5zdGFuY2VvZiBEYXRlKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBlbnRyeSB0aW1lJyk7XG4gIH1cblxuICB0aGlzLnRpbWUgPSB6aXBVdGlsLmRhdGVUb0Rvcyh0aW1lLCBmb3JjZUxvY2FsVGltZSk7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIFVOSVggZmlsZSBwZXJtaXNzaW9ucyBmb3IgdGhlIGVudHJ5LlxuICpcbiAqIEBwYXJhbSBtb2RlXG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuc2V0VW5peE1vZGUgPSBmdW5jdGlvbihtb2RlKSB7XG4gIG1vZGUgfD0gdGhpcy5pc0RpcmVjdG9yeSgpID8gY29uc3RhbnRzLlNfSUZESVIgOiBjb25zdGFudHMuU19JRlJFRztcblxuICB2YXIgZXh0YXR0ciA9IDA7XG4gIGV4dGF0dHIgfD0gKG1vZGUgPDwgY29uc3RhbnRzLlNIT1JUX1NISUZUKSB8ICh0aGlzLmlzRGlyZWN0b3J5KCkgPyBjb25zdGFudHMuU19ET1NfRCA6IGNvbnN0YW50cy5TX0RPU19BKTtcblxuICB0aGlzLnNldEV4dGVybmFsQXR0cmlidXRlcyhleHRhdHRyKTtcbiAgdGhpcy5tb2RlID0gbW9kZSAmIGNvbnN0YW50cy5NT0RFX01BU0s7XG4gIHRoaXMucGxhdGZvcm0gPSBjb25zdGFudHMuUExBVEZPUk1fVU5JWDtcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgdmVyc2lvbiBvZiBaSVAgbmVlZGVkIHRvIGV4dHJhY3QgdGhpcyBlbnRyeS5cbiAqXG4gKiBAcGFyYW0gbWludmVyXG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuc2V0VmVyc2lvbk5lZWRlZFRvRXh0cmFjdCA9IGZ1bmN0aW9uKG1pbnZlcikge1xuICB0aGlzLm1pbnZlciA9IG1pbnZlcjtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoaXMgZW50cnkgcmVwcmVzZW50cyBhIGRpcmVjdG9yeS5cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5pc0RpcmVjdG9yeSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5nZXROYW1lKCkuc2xpY2UoLTEpID09PSAnLyc7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGVudHJ5IHJlcHJlc2VudHMgYSB1bml4IHN5bWxpbmssXG4gKiBpbiB3aGljaCBjYXNlIHRoZSBlbnRyeSdzIGNvbnRlbnQgY29udGFpbnMgdGhlIHRhcmdldCBwYXRoXG4gKiBmb3IgdGhlIHN5bWxpbmsuXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuaXNVbml4U3ltbGluayA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gKHRoaXMuZ2V0VW5peE1vZGUoKSAmIFVuaXhTdGF0LkZJTEVfVFlQRV9GTEFHKSA9PT0gVW5peFN0YXQuTElOS19GTEFHO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBlbnRyeSBpcyB1c2luZyB0aGUgWklQNjQgZXh0ZW5zaW9uIG9mIFpJUC5cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5pc1ppcDY0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmNzaXplID4gY29uc3RhbnRzLlpJUDY0X01BR0lDIHx8IHRoaXMuc2l6ZSA+IGNvbnN0YW50cy5aSVA2NF9NQUdJQztcbn07XG4iLAogICAgIi8qKlxuICogbm9kZS1jb21wcmVzcy1jb21tb25zXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE0IENocmlzIFRhbGtpbmd0b24sIGNvbnRyaWJ1dG9ycy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hcmNoaXZlcmpzL25vZGUtY29tcHJlc3MtY29tbW9ucy9ibG9iL21hc3Rlci9MSUNFTlNFLU1JVFxuICovXG52YXIgU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJykuU3RyZWFtO1xudmFyIFBhc3NUaHJvdWdoID0gcmVxdWlyZSgncmVhZGFibGUtc3RyZWFtJykuUGFzc1Rocm91Z2g7XG52YXIgaXNTdHJlYW0gPSByZXF1aXJlKCdpcy1zdHJlYW0nKTtcblxudmFyIHV0aWwgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xuXG51dGlsLm5vcm1hbGl6ZUlucHV0U291cmNlID0gZnVuY3Rpb24oc291cmNlKSB7XG4gIGlmIChzb3VyY2UgPT09IG51bGwpIHtcbiAgICByZXR1cm4gQnVmZmVyLmFsbG9jKDApO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBzb3VyY2UgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHNvdXJjZSk7XG4gIH0gZWxzZSBpZiAoaXNTdHJlYW0oc291cmNlKSAmJiAhc291cmNlLl9yZWFkYWJsZVN0YXRlKSB7XG4gICAgdmFyIG5vcm1hbGl6ZWQgPSBuZXcgUGFzc1Rocm91Z2goKTtcbiAgICBzb3VyY2UucGlwZShub3JtYWxpemVkKTtcblxuICAgIHJldHVybiBub3JtYWxpemVkO1xuICB9XG5cbiAgcmV0dXJuIHNvdXJjZTtcbn07IiwKICAgICIvKipcbiAqIG5vZGUtY29tcHJlc3MtY29tbW9uc1xuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNCBDaHJpcyBUYWxraW5ndG9uLCBjb250cmlidXRvcnMuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBodHRwczovL2dpdGh1Yi5jb20vYXJjaGl2ZXJqcy9ub2RlLWNvbXByZXNzLWNvbW1vbnMvYmxvYi9tYXN0ZXIvTElDRU5TRS1NSVRcbiAqL1xudmFyIGluaGVyaXRzID0gcmVxdWlyZSgndXRpbCcpLmluaGVyaXRzO1xudmFyIGlzU3RyZWFtID0gcmVxdWlyZSgnaXMtc3RyZWFtJyk7XG52YXIgVHJhbnNmb3JtID0gcmVxdWlyZSgncmVhZGFibGUtc3RyZWFtJykuVHJhbnNmb3JtO1xuXG52YXIgQXJjaGl2ZUVudHJ5ID0gcmVxdWlyZSgnLi9hcmNoaXZlLWVudHJ5Jyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJy4uL3V0aWwnKTtcblxudmFyIEFyY2hpdmVPdXRwdXRTdHJlYW0gPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEFyY2hpdmVPdXRwdXRTdHJlYW0pKSB7XG4gICAgcmV0dXJuIG5ldyBBcmNoaXZlT3V0cHV0U3RyZWFtKG9wdGlvbnMpO1xuICB9XG5cbiAgVHJhbnNmb3JtLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cbiAgdGhpcy5vZmZzZXQgPSAwO1xuICB0aGlzLl9hcmNoaXZlID0ge1xuICAgIGZpbmlzaDogZmFsc2UsXG4gICAgZmluaXNoZWQ6IGZhbHNlLFxuICAgIHByb2Nlc3Npbmc6IGZhbHNlXG4gIH07XG59O1xuXG5pbmhlcml0cyhBcmNoaXZlT3V0cHV0U3RyZWFtLCBUcmFuc2Zvcm0pO1xuXG5BcmNoaXZlT3V0cHV0U3RyZWFtLnByb3RvdHlwZS5fYXBwZW5kQnVmZmVyID0gZnVuY3Rpb24oemFlLCBzb3VyY2UsIGNhbGxiYWNrKSB7XG4gIC8vIHNjYWZmb2xkIG9ubHlcbn07XG5cbkFyY2hpdmVPdXRwdXRTdHJlYW0ucHJvdG90eXBlLl9hcHBlbmRTdHJlYW0gPSBmdW5jdGlvbih6YWUsIHNvdXJjZSwgY2FsbGJhY2spIHtcbiAgLy8gc2NhZmZvbGQgb25seVxufTtcblxuQXJjaGl2ZU91dHB1dFN0cmVhbS5wcm90b3R5cGUuX2VtaXRFcnJvckNhbGxiYWNrID0gZnVuY3Rpb24oZXJyKSB7XG4gIGlmIChlcnIpIHtcbiAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgfVxufTtcblxuQXJjaGl2ZU91dHB1dFN0cmVhbS5wcm90b3R5cGUuX2ZpbmlzaCA9IGZ1bmN0aW9uKGFlKSB7XG4gIC8vIHNjYWZmb2xkIG9ubHlcbn07XG5cbkFyY2hpdmVPdXRwdXRTdHJlYW0ucHJvdG90eXBlLl9ub3JtYWxpemVFbnRyeSA9IGZ1bmN0aW9uKGFlKSB7XG4gIC8vIHNjYWZmb2xkIG9ubHlcbn07XG5cbkFyY2hpdmVPdXRwdXRTdHJlYW0ucHJvdG90eXBlLl90cmFuc2Zvcm0gPSBmdW5jdGlvbihjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gIGNhbGxiYWNrKG51bGwsIGNodW5rKTtcbn07XG5cbkFyY2hpdmVPdXRwdXRTdHJlYW0ucHJvdG90eXBlLmVudHJ5ID0gZnVuY3Rpb24oYWUsIHNvdXJjZSwgY2FsbGJhY2spIHtcbiAgc291cmNlID0gc291cmNlIHx8IG51bGw7XG5cbiAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIGNhbGxiYWNrID0gdGhpcy5fZW1pdEVycm9yQ2FsbGJhY2suYmluZCh0aGlzKTtcbiAgfVxuXG4gIGlmICghKGFlIGluc3RhbmNlb2YgQXJjaGl2ZUVudHJ5KSkge1xuICAgIGNhbGxiYWNrKG5ldyBFcnJvcignbm90IGEgdmFsaWQgaW5zdGFuY2Ugb2YgQXJjaGl2ZUVudHJ5JykpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh0aGlzLl9hcmNoaXZlLmZpbmlzaCB8fCB0aGlzLl9hcmNoaXZlLmZpbmlzaGVkKSB7XG4gICAgY2FsbGJhY2sobmV3IEVycm9yKCd1bmFjY2VwdGFibGUgZW50cnkgYWZ0ZXIgZmluaXNoJykpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh0aGlzLl9hcmNoaXZlLnByb2Nlc3NpbmcpIHtcbiAgICBjYWxsYmFjayhuZXcgRXJyb3IoJ2FscmVhZHkgcHJvY2Vzc2luZyBhbiBlbnRyeScpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aGlzLl9hcmNoaXZlLnByb2Nlc3NpbmcgPSB0cnVlO1xuICB0aGlzLl9ub3JtYWxpemVFbnRyeShhZSk7XG4gIHRoaXMuX2VudHJ5ID0gYWU7XG5cbiAgc291cmNlID0gdXRpbC5ub3JtYWxpemVJbnB1dFNvdXJjZShzb3VyY2UpO1xuXG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoc291cmNlKSkge1xuICAgIHRoaXMuX2FwcGVuZEJ1ZmZlcihhZSwgc291cmNlLCBjYWxsYmFjayk7XG4gIH0gZWxzZSBpZiAoaXNTdHJlYW0oc291cmNlKSkge1xuICAgIHRoaXMuX2FwcGVuZFN0cmVhbShhZSwgc291cmNlLCBjYWxsYmFjayk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fYXJjaGl2ZS5wcm9jZXNzaW5nID0gZmFsc2U7XG4gICAgY2FsbGJhY2sobmV3IEVycm9yKCdpbnB1dCBzb3VyY2UgbXVzdCBiZSB2YWxpZCBTdHJlYW0gb3IgQnVmZmVyIGluc3RhbmNlJykpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuQXJjaGl2ZU91dHB1dFN0cmVhbS5wcm90b3R5cGUuZmluaXNoID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLl9hcmNoaXZlLnByb2Nlc3NpbmcpIHtcbiAgICB0aGlzLl9hcmNoaXZlLmZpbmlzaCA9IHRydWU7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdGhpcy5fZmluaXNoKCk7XG59O1xuXG5BcmNoaXZlT3V0cHV0U3RyZWFtLnByb3RvdHlwZS5nZXRCeXRlc1dyaXR0ZW4gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMub2Zmc2V0O1xufTtcblxuQXJjaGl2ZU91dHB1dFN0cmVhbS5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihjaHVuaywgY2IpIHtcbiAgaWYgKGNodW5rKSB7XG4gICAgdGhpcy5vZmZzZXQgKz0gY2h1bmsubGVuZ3RoO1xuICB9XG5cbiAgcmV0dXJuIFRyYW5zZm9ybS5wcm90b3R5cGUud3JpdGUuY2FsbCh0aGlzLCBjaHVuaywgY2IpO1xufTsiLAogICAgIi8qISBjcmMzMi5qcyAoQykgMjAxNC1wcmVzZW50IFNoZWV0SlMgLS0gaHR0cDovL3NoZWV0anMuY29tICovXG4vKiB2aW06IHNldCB0cz0yOiAqL1xuLypleHBvcnRlZCBDUkMzMiAqL1xudmFyIENSQzMyO1xuKGZ1bmN0aW9uIChmYWN0b3J5KSB7XG5cdC8qanNoaW50IGlnbm9yZTpzdGFydCAqL1xuXHQvKmVzbGludC1kaXNhYmxlICovXG5cdGlmKHR5cGVvZiBET19OT1RfRVhQT1JUX0NSQyA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRpZignb2JqZWN0JyA9PT0gdHlwZW9mIGV4cG9ydHMpIHtcblx0XHRcdGZhY3RvcnkoZXhwb3J0cyk7XG5cdFx0fSBlbHNlIGlmICgnZnVuY3Rpb24nID09PSB0eXBlb2YgZGVmaW5lICYmIGRlZmluZS5hbWQpIHtcblx0XHRcdGRlZmluZShmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHZhciBtb2R1bGUgPSB7fTtcblx0XHRcdFx0ZmFjdG9yeShtb2R1bGUpO1xuXHRcdFx0XHRyZXR1cm4gbW9kdWxlO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZhY3RvcnkoQ1JDMzIgPSB7fSk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGZhY3RvcnkoQ1JDMzIgPSB7fSk7XG5cdH1cblx0Lyplc2xpbnQtZW5hYmxlICovXG5cdC8qanNoaW50IGlnbm9yZTplbmQgKi9cbn0oZnVuY3Rpb24oQ1JDMzIpIHtcbkNSQzMyLnZlcnNpb24gPSAnMS4yLjInO1xuLypnbG9iYWwgSW50MzJBcnJheSAqL1xuZnVuY3Rpb24gc2lnbmVkX2NyY190YWJsZSgpIHtcblx0dmFyIGMgPSAwLCB0YWJsZSA9IG5ldyBBcnJheSgyNTYpO1xuXG5cdGZvcih2YXIgbiA9MDsgbiAhPSAyNTY7ICsrbil7XG5cdFx0YyA9IG47XG5cdFx0YyA9ICgoYyYxKSA/ICgtMzA2Njc0OTEyIF4gKGMgPj4+IDEpKSA6IChjID4+PiAxKSk7XG5cdFx0YyA9ICgoYyYxKSA/ICgtMzA2Njc0OTEyIF4gKGMgPj4+IDEpKSA6IChjID4+PiAxKSk7XG5cdFx0YyA9ICgoYyYxKSA/ICgtMzA2Njc0OTEyIF4gKGMgPj4+IDEpKSA6IChjID4+PiAxKSk7XG5cdFx0YyA9ICgoYyYxKSA/ICgtMzA2Njc0OTEyIF4gKGMgPj4+IDEpKSA6IChjID4+PiAxKSk7XG5cdFx0YyA9ICgoYyYxKSA/ICgtMzA2Njc0OTEyIF4gKGMgPj4+IDEpKSA6IChjID4+PiAxKSk7XG5cdFx0YyA9ICgoYyYxKSA/ICgtMzA2Njc0OTEyIF4gKGMgPj4+IDEpKSA6IChjID4+PiAxKSk7XG5cdFx0YyA9ICgoYyYxKSA/ICgtMzA2Njc0OTEyIF4gKGMgPj4+IDEpKSA6IChjID4+PiAxKSk7XG5cdFx0YyA9ICgoYyYxKSA/ICgtMzA2Njc0OTEyIF4gKGMgPj4+IDEpKSA6IChjID4+PiAxKSk7XG5cdFx0dGFibGVbbl0gPSBjO1xuXHR9XG5cblx0cmV0dXJuIHR5cGVvZiBJbnQzMkFycmF5ICE9PSAndW5kZWZpbmVkJyA/IG5ldyBJbnQzMkFycmF5KHRhYmxlKSA6IHRhYmxlO1xufVxuXG52YXIgVDAgPSBzaWduZWRfY3JjX3RhYmxlKCk7XG5mdW5jdGlvbiBzbGljZV9ieV8xNl90YWJsZXMoVCkge1xuXHR2YXIgYyA9IDAsIHYgPSAwLCBuID0gMCwgdGFibGUgPSB0eXBlb2YgSW50MzJBcnJheSAhPT0gJ3VuZGVmaW5lZCcgPyBuZXcgSW50MzJBcnJheSg0MDk2KSA6IG5ldyBBcnJheSg0MDk2KSA7XG5cblx0Zm9yKG4gPSAwOyBuICE9IDI1NjsgKytuKSB0YWJsZVtuXSA9IFRbbl07XG5cdGZvcihuID0gMDsgbiAhPSAyNTY7ICsrbikge1xuXHRcdHYgPSBUW25dO1xuXHRcdGZvcihjID0gMjU2ICsgbjsgYyA8IDQwOTY7IGMgKz0gMjU2KSB2ID0gdGFibGVbY10gPSAodiA+Pj4gOCkgXiBUW3YgJiAweEZGXTtcblx0fVxuXHR2YXIgb3V0ID0gW107XG5cdGZvcihuID0gMTsgbiAhPSAxNjsgKytuKSBvdXRbbiAtIDFdID0gdHlwZW9mIEludDMyQXJyYXkgIT09ICd1bmRlZmluZWQnID8gdGFibGUuc3ViYXJyYXkobiAqIDI1NiwgbiAqIDI1NiArIDI1NikgOiB0YWJsZS5zbGljZShuICogMjU2LCBuICogMjU2ICsgMjU2KTtcblx0cmV0dXJuIG91dDtcbn1cbnZhciBUVCA9IHNsaWNlX2J5XzE2X3RhYmxlcyhUMCk7XG52YXIgVDEgPSBUVFswXSwgIFQyID0gVFRbMV0sICBUMyA9IFRUWzJdLCAgVDQgPSBUVFszXSwgIFQ1ID0gVFRbNF07XG52YXIgVDYgPSBUVFs1XSwgIFQ3ID0gVFRbNl0sICBUOCA9IFRUWzddLCAgVDkgPSBUVFs4XSwgIFRhID0gVFRbOV07XG52YXIgVGIgPSBUVFsxMF0sIFRjID0gVFRbMTFdLCBUZCA9IFRUWzEyXSwgVGUgPSBUVFsxM10sIFRmID0gVFRbMTRdO1xuZnVuY3Rpb24gY3JjMzJfYnN0cihic3RyLCBzZWVkKSB7XG5cdHZhciBDID0gc2VlZCBeIC0xO1xuXHRmb3IodmFyIGkgPSAwLCBMID0gYnN0ci5sZW5ndGg7IGkgPCBMOykgQyA9IChDPj4+OCkgXiBUMFsoQ15ic3RyLmNoYXJDb2RlQXQoaSsrKSkmMHhGRl07XG5cdHJldHVybiB+Qztcbn1cblxuZnVuY3Rpb24gY3JjMzJfYnVmKEIsIHNlZWQpIHtcblx0dmFyIEMgPSBzZWVkIF4gLTEsIEwgPSBCLmxlbmd0aCAtIDE1LCBpID0gMDtcblx0Zm9yKDsgaSA8IEw7KSBDID1cblx0XHRUZltCW2krK10gXiAoQyAmIDI1NSldIF5cblx0XHRUZVtCW2krK10gXiAoKEMgPj4gOCkgJiAyNTUpXSBeXG5cdFx0VGRbQltpKytdIF4gKChDID4+IDE2KSAmIDI1NSldIF5cblx0XHRUY1tCW2krK10gXiAoQyA+Pj4gMjQpXSBeXG5cdFx0VGJbQltpKytdXSBeIFRhW0JbaSsrXV0gXiBUOVtCW2krK11dIF4gVDhbQltpKytdXSBeXG5cdFx0VDdbQltpKytdXSBeIFQ2W0JbaSsrXV0gXiBUNVtCW2krK11dIF4gVDRbQltpKytdXSBeXG5cdFx0VDNbQltpKytdXSBeIFQyW0JbaSsrXV0gXiBUMVtCW2krK11dIF4gVDBbQltpKytdXTtcblx0TCArPSAxNTtcblx0d2hpbGUoaSA8IEwpIEMgPSAoQz4+PjgpIF4gVDBbKENeQltpKytdKSYweEZGXTtcblx0cmV0dXJuIH5DO1xufVxuXG5mdW5jdGlvbiBjcmMzMl9zdHIoc3RyLCBzZWVkKSB7XG5cdHZhciBDID0gc2VlZCBeIC0xO1xuXHRmb3IodmFyIGkgPSAwLCBMID0gc3RyLmxlbmd0aCwgYyA9IDAsIGQgPSAwOyBpIDwgTDspIHtcblx0XHRjID0gc3RyLmNoYXJDb2RlQXQoaSsrKTtcblx0XHRpZihjIDwgMHg4MCkge1xuXHRcdFx0QyA9IChDPj4+OCkgXiBUMFsoQ15jKSYweEZGXTtcblx0XHR9IGVsc2UgaWYoYyA8IDB4ODAwKSB7XG5cdFx0XHRDID0gKEM+Pj44KSBeIFQwWyhDIF4gKDE5MnwoKGM+PjYpJjMxKSkpJjB4RkZdO1xuXHRcdFx0QyA9IChDPj4+OCkgXiBUMFsoQyBeICgxMjh8KGMmNjMpKSkmMHhGRl07XG5cdFx0fSBlbHNlIGlmKGMgPj0gMHhEODAwICYmIGMgPCAweEUwMDApIHtcblx0XHRcdGMgPSAoYyYxMDIzKSs2NDsgZCA9IHN0ci5jaGFyQ29kZUF0KGkrKykmMTAyMztcblx0XHRcdEMgPSAoQz4+PjgpIF4gVDBbKEMgXiAoMjQwfCgoYz4+OCkmNykpKSYweEZGXTtcblx0XHRcdEMgPSAoQz4+PjgpIF4gVDBbKEMgXiAoMTI4fCgoYz4+MikmNjMpKSkmMHhGRl07XG5cdFx0XHRDID0gKEM+Pj44KSBeIFQwWyhDIF4gKDEyOHwoKGQ+PjYpJjE1KXwoKGMmMyk8PDQpKSkmMHhGRl07XG5cdFx0XHRDID0gKEM+Pj44KSBeIFQwWyhDIF4gKDEyOHwoZCY2MykpKSYweEZGXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0QyA9IChDPj4+OCkgXiBUMFsoQyBeICgyMjR8KChjPj4xMikmMTUpKSkmMHhGRl07XG5cdFx0XHRDID0gKEM+Pj44KSBeIFQwWyhDIF4gKDEyOHwoKGM+PjYpJjYzKSkpJjB4RkZdO1xuXHRcdFx0QyA9IChDPj4+OCkgXiBUMFsoQyBeICgxMjh8KGMmNjMpKSkmMHhGRl07XG5cdFx0fVxuXHR9XG5cdHJldHVybiB+Qztcbn1cbkNSQzMyLnRhYmxlID0gVDA7XG4vLyAkRmxvd0lnbm9yZVxuQ1JDMzIuYnN0ciA9IGNyYzMyX2JzdHI7XG4vLyAkRmxvd0lnbm9yZVxuQ1JDMzIuYnVmID0gY3JjMzJfYnVmO1xuLy8gJEZsb3dJZ25vcmVcbkNSQzMyLnN0ciA9IGNyYzMyX3N0cjtcbn0pKTtcbiIsCiAgICAiLyoqXG4gKiBub2RlLWNyYzMyLXN0cmVhbVxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNCBDaHJpcyBUYWxraW5ndG9uLCBjb250cmlidXRvcnMuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBodHRwczovL2dpdGh1Yi5jb20vYXJjaGl2ZXJqcy9ub2RlLWNyYzMyLXN0cmVhbS9ibG9iL21hc3Rlci9MSUNFTlNFLU1JVFxuICovXG5cbiAndXNlIHN0cmljdCc7XG5cbmNvbnN0IHtUcmFuc2Zvcm19ID0gcmVxdWlyZSgncmVhZGFibGUtc3RyZWFtJyk7XG5cbmNvbnN0IGNyYzMyID0gcmVxdWlyZSgnY3JjLTMyJyk7XG5cbmNsYXNzIENSQzMyU3RyZWFtIGV4dGVuZHMgVHJhbnNmb3JtIHtcbiAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgIHN1cGVyKG9wdGlvbnMpO1xuICAgIHRoaXMuY2hlY2tzdW0gPSBCdWZmZXIuYWxsb2NVbnNhZmUoNCk7XG4gICAgdGhpcy5jaGVja3N1bS53cml0ZUludDMyQkUoMCwgMCk7XG5cbiAgICB0aGlzLnJhd1NpemUgPSAwO1xuICB9XG5cbiAgX3RyYW5zZm9ybShjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gICAgaWYgKGNodW5rKSB7XG4gICAgICB0aGlzLmNoZWNrc3VtID0gY3JjMzIuYnVmKGNodW5rLCB0aGlzLmNoZWNrc3VtKSA+Pj4gMDtcbiAgICAgIHRoaXMucmF3U2l6ZSArPSBjaHVuay5sZW5ndGg7XG4gICAgfVxuXG4gICAgY2FsbGJhY2sobnVsbCwgY2h1bmspO1xuICB9XG5cbiAgZGlnZXN0KGVuY29kaW5nKSB7XG4gICAgY29uc3QgY2hlY2tzdW0gPSBCdWZmZXIuYWxsb2NVbnNhZmUoNCk7XG4gICAgY2hlY2tzdW0ud3JpdGVVSW50MzJCRSh0aGlzLmNoZWNrc3VtID4+PiAwLCAwKTtcbiAgICByZXR1cm4gZW5jb2RpbmcgPyBjaGVja3N1bS50b1N0cmluZyhlbmNvZGluZykgOiBjaGVja3N1bTtcbiAgfVxuXG4gIGhleCgpIHtcbiAgICByZXR1cm4gdGhpcy5kaWdlc3QoJ2hleCcpLnRvVXBwZXJDYXNlKCk7XG4gIH1cblxuICBzaXplKCkge1xuICAgIHJldHVybiB0aGlzLnJhd1NpemU7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBDUkMzMlN0cmVhbTtcbiIsCiAgICAiLyoqXG4gKiBub2RlLWNyYzMyLXN0cmVhbVxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNCBDaHJpcyBUYWxraW5ndG9uLCBjb250cmlidXRvcnMuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBodHRwczovL2dpdGh1Yi5jb20vYXJjaGl2ZXJqcy9ub2RlLWNyYzMyLXN0cmVhbS9ibG9iL21hc3Rlci9MSUNFTlNFLU1JVFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuY29uc3Qge0RlZmxhdGVSYXd9ID0gcmVxdWlyZSgnemxpYicpO1xuXG5jb25zdCBjcmMzMiA9IHJlcXVpcmUoJ2NyYy0zMicpO1xuXG5jbGFzcyBEZWZsYXRlQ1JDMzJTdHJlYW0gZXh0ZW5kcyBEZWZsYXRlUmF3IHtcbiAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgIHN1cGVyKG9wdGlvbnMpO1xuXG4gICAgdGhpcy5jaGVja3N1bSA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSg0KTtcbiAgICB0aGlzLmNoZWNrc3VtLndyaXRlSW50MzJCRSgwLCAwKTtcblxuICAgIHRoaXMucmF3U2l6ZSA9IDA7XG4gICAgdGhpcy5jb21wcmVzc2VkU2l6ZSA9IDA7XG4gIH1cblxuICBwdXNoKGNodW5rLCBlbmNvZGluZykge1xuICAgIGlmIChjaHVuaykge1xuICAgICAgdGhpcy5jb21wcmVzc2VkU2l6ZSArPSBjaHVuay5sZW5ndGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1cGVyLnB1c2goY2h1bmssIGVuY29kaW5nKTtcbiAgfVxuXG4gIF90cmFuc2Zvcm0oY2h1bmssIGVuY29kaW5nLCBjYWxsYmFjaykge1xuICAgIGlmIChjaHVuaykge1xuICAgICAgdGhpcy5jaGVja3N1bSA9IGNyYzMyLmJ1ZihjaHVuaywgdGhpcy5jaGVja3N1bSkgPj4+IDA7XG4gICAgICB0aGlzLnJhd1NpemUgKz0gY2h1bmsubGVuZ3RoO1xuICAgIH1cblxuICAgIHN1cGVyLl90cmFuc2Zvcm0oY2h1bmssIGVuY29kaW5nLCBjYWxsYmFjaylcbiAgfVxuXG4gIGRpZ2VzdChlbmNvZGluZykge1xuICAgIGNvbnN0IGNoZWNrc3VtID0gQnVmZmVyLmFsbG9jVW5zYWZlKDQpO1xuICAgIGNoZWNrc3VtLndyaXRlVUludDMyQkUodGhpcy5jaGVja3N1bSA+Pj4gMCwgMCk7XG4gICAgcmV0dXJuIGVuY29kaW5nID8gY2hlY2tzdW0udG9TdHJpbmcoZW5jb2RpbmcpIDogY2hlY2tzdW07XG4gIH1cblxuICBoZXgoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGlnZXN0KCdoZXgnKS50b1VwcGVyQ2FzZSgpO1xuICB9XG5cbiAgc2l6ZShjb21wcmVzc2VkID0gZmFsc2UpIHtcbiAgICBpZiAoY29tcHJlc3NlZCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29tcHJlc3NlZFNpemU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnJhd1NpemU7XG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRGVmbGF0ZUNSQzMyU3RyZWFtO1xuIiwKICAgICIvKipcbiAqIG5vZGUtY3JjMzItc3RyZWFtXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE0IENocmlzIFRhbGtpbmd0b24sIGNvbnRyaWJ1dG9ycy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hcmNoaXZlcmpzL25vZGUtY3JjMzItc3RyZWFtL2Jsb2IvbWFzdGVyL0xJQ0VOU0UtTUlUXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQ1JDMzJTdHJlYW06IHJlcXVpcmUoJy4vY3JjMzItc3RyZWFtJyksXG4gIERlZmxhdGVDUkMzMlN0cmVhbTogcmVxdWlyZSgnLi9kZWZsYXRlLWNyYzMyLXN0cmVhbScpXG59XG4iLAogICAgIi8qKlxuICogbm9kZS1jb21wcmVzcy1jb21tb25zXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE0IENocmlzIFRhbGtpbmd0b24sIGNvbnRyaWJ1dG9ycy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hcmNoaXZlcmpzL25vZGUtY29tcHJlc3MtY29tbW9ucy9ibG9iL21hc3Rlci9MSUNFTlNFLU1JVFxuICovXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCd1dGlsJykuaW5oZXJpdHM7XG52YXIgY3JjMzIgPSByZXF1aXJlKCdjcmMtMzInKTtcbnZhciB7Q1JDMzJTdHJlYW19ID0gcmVxdWlyZSgnY3JjMzItc3RyZWFtJyk7XG52YXIge0RlZmxhdGVDUkMzMlN0cmVhbX0gPSByZXF1aXJlKCdjcmMzMi1zdHJlYW0nKTtcblxudmFyIEFyY2hpdmVPdXRwdXRTdHJlYW0gPSByZXF1aXJlKCcuLi9hcmNoaXZlLW91dHB1dC1zdHJlYW0nKTtcbnZhciBaaXBBcmNoaXZlRW50cnkgPSByZXF1aXJlKCcuL3ppcC1hcmNoaXZlLWVudHJ5Jyk7XG52YXIgR2VuZXJhbFB1cnBvc2VCaXQgPSByZXF1aXJlKCcuL2dlbmVyYWwtcHVycG9zZS1iaXQnKTtcblxudmFyIGNvbnN0YW50cyA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJy4uLy4uL3V0aWwnKTtcbnZhciB6aXBVdGlsID0gcmVxdWlyZSgnLi91dGlsJyk7XG5cbnZhciBaaXBBcmNoaXZlT3V0cHV0U3RyZWFtID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBaaXBBcmNoaXZlT3V0cHV0U3RyZWFtKSkge1xuICAgIHJldHVybiBuZXcgWmlwQXJjaGl2ZU91dHB1dFN0cmVhbShvcHRpb25zKTtcbiAgfVxuXG4gIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMgPSB0aGlzLl9kZWZhdWx0cyhvcHRpb25zKTtcblxuICBBcmNoaXZlT3V0cHV0U3RyZWFtLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cbiAgdGhpcy5fZW50cnkgPSBudWxsO1xuICB0aGlzLl9lbnRyaWVzID0gW107XG4gIHRoaXMuX2FyY2hpdmUgPSB7XG4gICAgY2VudHJhbExlbmd0aDogMCxcbiAgICBjZW50cmFsT2Zmc2V0OiAwLFxuICAgIGNvbW1lbnQ6ICcnLFxuICAgIGZpbmlzaDogZmFsc2UsXG4gICAgZmluaXNoZWQ6IGZhbHNlLFxuICAgIHByb2Nlc3Npbmc6IGZhbHNlLFxuICAgIGZvcmNlWmlwNjQ6IG9wdGlvbnMuZm9yY2VaaXA2NCxcbiAgICBmb3JjZUxvY2FsVGltZTogb3B0aW9ucy5mb3JjZUxvY2FsVGltZVxuICB9O1xufTtcblxuaW5oZXJpdHMoWmlwQXJjaGl2ZU91dHB1dFN0cmVhbSwgQXJjaGl2ZU91dHB1dFN0cmVhbSk7XG5cblppcEFyY2hpdmVPdXRwdXRTdHJlYW0ucHJvdG90eXBlLl9hZnRlckFwcGVuZCA9IGZ1bmN0aW9uKGFlKSB7XG4gIHRoaXMuX2VudHJpZXMucHVzaChhZSk7XG5cbiAgaWYgKGFlLmdldEdlbmVyYWxQdXJwb3NlQml0KCkudXNlc0RhdGFEZXNjcmlwdG9yKCkpIHtcbiAgICB0aGlzLl93cml0ZURhdGFEZXNjcmlwdG9yKGFlKTtcbiAgfVxuXG4gIHRoaXMuX2FyY2hpdmUucHJvY2Vzc2luZyA9IGZhbHNlO1xuICB0aGlzLl9lbnRyeSA9IG51bGw7XG5cbiAgaWYgKHRoaXMuX2FyY2hpdmUuZmluaXNoICYmICF0aGlzLl9hcmNoaXZlLmZpbmlzaGVkKSB7XG4gICAgdGhpcy5fZmluaXNoKCk7XG4gIH1cbn07XG5cblppcEFyY2hpdmVPdXRwdXRTdHJlYW0ucHJvdG90eXBlLl9hcHBlbmRCdWZmZXIgPSBmdW5jdGlvbihhZSwgc291cmNlLCBjYWxsYmFjaykge1xuICBpZiAoc291cmNlLmxlbmd0aCA9PT0gMCkge1xuICAgIGFlLnNldE1ldGhvZChjb25zdGFudHMuTUVUSE9EX1NUT1JFRCk7XG4gIH1cblxuICB2YXIgbWV0aG9kID0gYWUuZ2V0TWV0aG9kKCk7XG5cbiAgaWYgKG1ldGhvZCA9PT0gY29uc3RhbnRzLk1FVEhPRF9TVE9SRUQpIHtcbiAgICBhZS5zZXRTaXplKHNvdXJjZS5sZW5ndGgpO1xuICAgIGFlLnNldENvbXByZXNzZWRTaXplKHNvdXJjZS5sZW5ndGgpO1xuICAgIGFlLnNldENyYyhjcmMzMi5idWYoc291cmNlKSA+Pj4gMCk7XG4gIH1cblxuICB0aGlzLl93cml0ZUxvY2FsRmlsZUhlYWRlcihhZSk7XG5cbiAgaWYgKG1ldGhvZCA9PT0gY29uc3RhbnRzLk1FVEhPRF9TVE9SRUQpIHtcbiAgICB0aGlzLndyaXRlKHNvdXJjZSk7XG4gICAgdGhpcy5fYWZ0ZXJBcHBlbmQoYWUpO1xuICAgIGNhbGxiYWNrKG51bGwsIGFlKTtcbiAgICByZXR1cm47XG4gIH0gZWxzZSBpZiAobWV0aG9kID09PSBjb25zdGFudHMuTUVUSE9EX0RFRkxBVEVEKSB7XG4gICAgdGhpcy5fc21hcnRTdHJlYW0oYWUsIGNhbGxiYWNrKS5lbmQoc291cmNlKTtcbiAgICByZXR1cm47XG4gIH0gZWxzZSB7XG4gICAgY2FsbGJhY2sobmV3IEVycm9yKCdjb21wcmVzc2lvbiBtZXRob2QgJyArIG1ldGhvZCArICcgbm90IGltcGxlbWVudGVkJykpO1xuICAgIHJldHVybjtcbiAgfVxufTtcblxuWmlwQXJjaGl2ZU91dHB1dFN0cmVhbS5wcm90b3R5cGUuX2FwcGVuZFN0cmVhbSA9IGZ1bmN0aW9uKGFlLCBzb3VyY2UsIGNhbGxiYWNrKSB7XG4gIGFlLmdldEdlbmVyYWxQdXJwb3NlQml0KCkudXNlRGF0YURlc2NyaXB0b3IodHJ1ZSk7XG4gIGFlLnNldFZlcnNpb25OZWVkZWRUb0V4dHJhY3QoY29uc3RhbnRzLk1JTl9WRVJTSU9OX0RBVEFfREVTQ1JJUFRPUik7XG5cbiAgdGhpcy5fd3JpdGVMb2NhbEZpbGVIZWFkZXIoYWUpO1xuXG4gIHZhciBzbWFydCA9IHRoaXMuX3NtYXJ0U3RyZWFtKGFlLCBjYWxsYmFjayk7XG4gIHNvdXJjZS5vbmNlKCdlcnJvcicsIGZ1bmN0aW9uKGVycikge1xuICAgIHNtYXJ0LmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgICBzbWFydC5lbmQoKTtcbiAgfSlcbiAgc291cmNlLnBpcGUoc21hcnQpO1xufTtcblxuWmlwQXJjaGl2ZU91dHB1dFN0cmVhbS5wcm90b3R5cGUuX2RlZmF1bHRzID0gZnVuY3Rpb24obykge1xuICBpZiAodHlwZW9mIG8gIT09ICdvYmplY3QnKSB7XG4gICAgbyA9IHt9O1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvLnpsaWIgIT09ICdvYmplY3QnKSB7XG4gICAgby56bGliID0ge307XG4gIH1cblxuICBpZiAodHlwZW9mIG8uemxpYi5sZXZlbCAhPT0gJ251bWJlcicpIHtcbiAgICBvLnpsaWIubGV2ZWwgPSBjb25zdGFudHMuWkxJQl9CRVNUX1NQRUVEO1xuICB9XG5cbiAgby5mb3JjZVppcDY0ID0gISFvLmZvcmNlWmlwNjQ7XG4gIG8uZm9yY2VMb2NhbFRpbWUgPSAhIW8uZm9yY2VMb2NhbFRpbWU7XG5cbiAgcmV0dXJuIG87XG59O1xuXG5aaXBBcmNoaXZlT3V0cHV0U3RyZWFtLnByb3RvdHlwZS5fZmluaXNoID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX2FyY2hpdmUuY2VudHJhbE9mZnNldCA9IHRoaXMub2Zmc2V0O1xuXG4gIHRoaXMuX2VudHJpZXMuZm9yRWFjaChmdW5jdGlvbihhZSkge1xuICAgIHRoaXMuX3dyaXRlQ2VudHJhbEZpbGVIZWFkZXIoYWUpO1xuICB9LmJpbmQodGhpcykpO1xuXG4gIHRoaXMuX2FyY2hpdmUuY2VudHJhbExlbmd0aCA9IHRoaXMub2Zmc2V0IC0gdGhpcy5fYXJjaGl2ZS5jZW50cmFsT2Zmc2V0O1xuXG4gIGlmICh0aGlzLmlzWmlwNjQoKSkge1xuICAgIHRoaXMuX3dyaXRlQ2VudHJhbERpcmVjdG9yeVppcDY0KCk7XG4gIH1cblxuICB0aGlzLl93cml0ZUNlbnRyYWxEaXJlY3RvcnlFbmQoKTtcblxuICB0aGlzLl9hcmNoaXZlLnByb2Nlc3NpbmcgPSBmYWxzZTtcbiAgdGhpcy5fYXJjaGl2ZS5maW5pc2ggPSB0cnVlO1xuICB0aGlzLl9hcmNoaXZlLmZpbmlzaGVkID0gdHJ1ZTtcbiAgdGhpcy5lbmQoKTtcbn07XG5cblppcEFyY2hpdmVPdXRwdXRTdHJlYW0ucHJvdG90eXBlLl9ub3JtYWxpemVFbnRyeSA9IGZ1bmN0aW9uKGFlKSB7XG4gIGlmIChhZS5nZXRNZXRob2QoKSA9PT0gLTEpIHtcbiAgICBhZS5zZXRNZXRob2QoY29uc3RhbnRzLk1FVEhPRF9ERUZMQVRFRCk7XG4gIH1cblxuICBpZiAoYWUuZ2V0TWV0aG9kKCkgPT09IGNvbnN0YW50cy5NRVRIT0RfREVGTEFURUQpIHtcbiAgICBhZS5nZXRHZW5lcmFsUHVycG9zZUJpdCgpLnVzZURhdGFEZXNjcmlwdG9yKHRydWUpO1xuICAgIGFlLnNldFZlcnNpb25OZWVkZWRUb0V4dHJhY3QoY29uc3RhbnRzLk1JTl9WRVJTSU9OX0RBVEFfREVTQ1JJUFRPUik7XG4gIH1cblxuICBpZiAoYWUuZ2V0VGltZSgpID09PSAtMSkge1xuICAgIGFlLnNldFRpbWUobmV3IERhdGUoKSwgdGhpcy5fYXJjaGl2ZS5mb3JjZUxvY2FsVGltZSk7XG4gIH1cblxuICBhZS5fb2Zmc2V0cyA9IHtcbiAgICBmaWxlOiAwLFxuICAgIGRhdGE6IDAsXG4gICAgY29udGVudHM6IDAsXG4gIH07XG59O1xuXG5aaXBBcmNoaXZlT3V0cHV0U3RyZWFtLnByb3RvdHlwZS5fc21hcnRTdHJlYW0gPSBmdW5jdGlvbihhZSwgY2FsbGJhY2spIHtcbiAgdmFyIGRlZmxhdGUgPSBhZS5nZXRNZXRob2QoKSA9PT0gY29uc3RhbnRzLk1FVEhPRF9ERUZMQVRFRDtcbiAgdmFyIHByb2Nlc3MgPSBkZWZsYXRlID8gbmV3IERlZmxhdGVDUkMzMlN0cmVhbSh0aGlzLm9wdGlvbnMuemxpYikgOiBuZXcgQ1JDMzJTdHJlYW0oKTtcbiAgdmFyIGVycm9yID0gbnVsbDtcblxuICBmdW5jdGlvbiBoYW5kbGVTdHVmZigpIHtcbiAgICB2YXIgZGlnZXN0ID0gcHJvY2Vzcy5kaWdlc3QoKS5yZWFkVUludDMyQkUoMCk7XG4gICAgYWUuc2V0Q3JjKGRpZ2VzdCk7XG4gICAgYWUuc2V0U2l6ZShwcm9jZXNzLnNpemUoKSk7XG4gICAgYWUuc2V0Q29tcHJlc3NlZFNpemUocHJvY2Vzcy5zaXplKHRydWUpKTtcbiAgICB0aGlzLl9hZnRlckFwcGVuZChhZSk7XG4gICAgY2FsbGJhY2soZXJyb3IsIGFlKTtcbiAgfVxuXG4gIHByb2Nlc3Mub25jZSgnZW5kJywgaGFuZGxlU3R1ZmYuYmluZCh0aGlzKSk7XG4gIHByb2Nlc3Mub25jZSgnZXJyb3InLCBmdW5jdGlvbihlcnIpIHtcbiAgICBlcnJvciA9IGVycjtcbiAgfSk7XG5cbiAgcHJvY2Vzcy5waXBlKHRoaXMsIHsgZW5kOiBmYWxzZSB9KTtcblxuICByZXR1cm4gcHJvY2Vzcztcbn07XG5cblppcEFyY2hpdmVPdXRwdXRTdHJlYW0ucHJvdG90eXBlLl93cml0ZUNlbnRyYWxEaXJlY3RvcnlFbmQgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHJlY29yZHMgPSB0aGlzLl9lbnRyaWVzLmxlbmd0aDtcbiAgdmFyIHNpemUgPSB0aGlzLl9hcmNoaXZlLmNlbnRyYWxMZW5ndGg7XG4gIHZhciBvZmZzZXQgPSB0aGlzLl9hcmNoaXZlLmNlbnRyYWxPZmZzZXQ7XG5cbiAgaWYgKHRoaXMuaXNaaXA2NCgpKSB7XG4gICAgcmVjb3JkcyA9IGNvbnN0YW50cy5aSVA2NF9NQUdJQ19TSE9SVDtcbiAgICBzaXplID0gY29uc3RhbnRzLlpJUDY0X01BR0lDO1xuICAgIG9mZnNldCA9IGNvbnN0YW50cy5aSVA2NF9NQUdJQztcbiAgfVxuXG4gIC8vIHNpZ25hdHVyZVxuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0TG9uZ0J5dGVzKGNvbnN0YW50cy5TSUdfRU9DRCkpO1xuXG4gIC8vIGRpc2sgbnVtYmVyc1xuICB0aGlzLndyaXRlKGNvbnN0YW50cy5TSE9SVF9aRVJPKTtcbiAgdGhpcy53cml0ZShjb25zdGFudHMuU0hPUlRfWkVSTyk7XG5cbiAgLy8gbnVtYmVyIG9mIGVudHJpZXNcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldFNob3J0Qnl0ZXMocmVjb3JkcykpO1xuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0U2hvcnRCeXRlcyhyZWNvcmRzKSk7XG5cbiAgLy8gbGVuZ3RoIGFuZCBsb2NhdGlvbiBvZiBDRFxuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0TG9uZ0J5dGVzKHNpemUpKTtcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldExvbmdCeXRlcyhvZmZzZXQpKTtcblxuICAvLyBhcmNoaXZlIGNvbW1lbnRcbiAgdmFyIGNvbW1lbnQgPSB0aGlzLmdldENvbW1lbnQoKTtcbiAgdmFyIGNvbW1lbnRMZW5ndGggPSBCdWZmZXIuYnl0ZUxlbmd0aChjb21tZW50KTtcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldFNob3J0Qnl0ZXMoY29tbWVudExlbmd0aCkpO1xuICB0aGlzLndyaXRlKGNvbW1lbnQpO1xufTtcblxuWmlwQXJjaGl2ZU91dHB1dFN0cmVhbS5wcm90b3R5cGUuX3dyaXRlQ2VudHJhbERpcmVjdG9yeVppcDY0ID0gZnVuY3Rpb24oKSB7XG4gIC8vIHNpZ25hdHVyZVxuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0TG9uZ0J5dGVzKGNvbnN0YW50cy5TSUdfWklQNjRfRU9DRCkpO1xuXG4gIC8vIHNpemUgb2YgdGhlIFpJUDY0IEVPQ0QgcmVjb3JkXG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRFaWdodEJ5dGVzKDQ0KSk7XG5cbiAgLy8gdmVyc2lvbiBtYWRlIGJ5XG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRTaG9ydEJ5dGVzKGNvbnN0YW50cy5NSU5fVkVSU0lPTl9aSVA2NCkpO1xuXG4gIC8vIHZlcnNpb24gdG8gZXh0cmFjdFxuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0U2hvcnRCeXRlcyhjb25zdGFudHMuTUlOX1ZFUlNJT05fWklQNjQpKTtcblxuICAvLyBkaXNrIG51bWJlcnNcbiAgdGhpcy53cml0ZShjb25zdGFudHMuTE9OR19aRVJPKTtcbiAgdGhpcy53cml0ZShjb25zdGFudHMuTE9OR19aRVJPKTtcblxuICAvLyBudW1iZXIgb2YgZW50cmllc1xuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0RWlnaHRCeXRlcyh0aGlzLl9lbnRyaWVzLmxlbmd0aCkpO1xuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0RWlnaHRCeXRlcyh0aGlzLl9lbnRyaWVzLmxlbmd0aCkpO1xuXG4gIC8vIGxlbmd0aCBhbmQgbG9jYXRpb24gb2YgQ0RcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldEVpZ2h0Qnl0ZXModGhpcy5fYXJjaGl2ZS5jZW50cmFsTGVuZ3RoKSk7XG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRFaWdodEJ5dGVzKHRoaXMuX2FyY2hpdmUuY2VudHJhbE9mZnNldCkpO1xuXG4gIC8vIGV4dGVuc2libGUgZGF0YSBzZWN0b3JcbiAgLy8gbm90IGltcGxlbWVudGVkIGF0IHRoaXMgdGltZVxuXG4gIC8vIGVuZCBvZiBjZW50cmFsIGRpcmVjdG9yeSBsb2NhdG9yXG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRMb25nQnl0ZXMoY29uc3RhbnRzLlNJR19aSVA2NF9FT0NEX0xPQykpO1xuXG4gIC8vIGRpc2sgbnVtYmVyIGhvbGRpbmcgdGhlIFpJUDY0IEVPQ0QgcmVjb3JkXG4gIHRoaXMud3JpdGUoY29uc3RhbnRzLkxPTkdfWkVSTyk7XG5cbiAgLy8gcmVsYXRpdmUgb2Zmc2V0IG9mIHRoZSBaSVA2NCBFT0NEIHJlY29yZFxuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0RWlnaHRCeXRlcyh0aGlzLl9hcmNoaXZlLmNlbnRyYWxPZmZzZXQgKyB0aGlzLl9hcmNoaXZlLmNlbnRyYWxMZW5ndGgpKTtcblxuICAvLyB0b3RhbCBudW1iZXIgb2YgZGlza3NcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldExvbmdCeXRlcygxKSk7XG59O1xuXG5aaXBBcmNoaXZlT3V0cHV0U3RyZWFtLnByb3RvdHlwZS5fd3JpdGVDZW50cmFsRmlsZUhlYWRlciA9IGZ1bmN0aW9uKGFlKSB7XG4gIHZhciBncGIgPSBhZS5nZXRHZW5lcmFsUHVycG9zZUJpdCgpO1xuICB2YXIgbWV0aG9kID0gYWUuZ2V0TWV0aG9kKCk7XG4gIHZhciBmaWxlT2Zmc2V0ID0gYWUuX29mZnNldHMuZmlsZTtcblxuICB2YXIgc2l6ZSA9IGFlLmdldFNpemUoKTtcbiAgdmFyIGNvbXByZXNzZWRTaXplID0gYWUuZ2V0Q29tcHJlc3NlZFNpemUoKTtcblxuICBpZiAoYWUuaXNaaXA2NCgpIHx8IGZpbGVPZmZzZXQgPiBjb25zdGFudHMuWklQNjRfTUFHSUMpIHtcbiAgICBzaXplID0gY29uc3RhbnRzLlpJUDY0X01BR0lDO1xuICAgIGNvbXByZXNzZWRTaXplID0gY29uc3RhbnRzLlpJUDY0X01BR0lDO1xuICAgIGZpbGVPZmZzZXQgPSBjb25zdGFudHMuWklQNjRfTUFHSUM7XG5cbiAgICBhZS5zZXRWZXJzaW9uTmVlZGVkVG9FeHRyYWN0KGNvbnN0YW50cy5NSU5fVkVSU0lPTl9aSVA2NCk7XG5cbiAgICB2YXIgZXh0cmFCdWYgPSBCdWZmZXIuY29uY2F0KFtcbiAgICAgIHppcFV0aWwuZ2V0U2hvcnRCeXRlcyhjb25zdGFudHMuWklQNjRfRVhUUkFfSUQpLFxuICAgICAgemlwVXRpbC5nZXRTaG9ydEJ5dGVzKDI0KSxcbiAgICAgIHppcFV0aWwuZ2V0RWlnaHRCeXRlcyhhZS5nZXRTaXplKCkpLFxuICAgICAgemlwVXRpbC5nZXRFaWdodEJ5dGVzKGFlLmdldENvbXByZXNzZWRTaXplKCkpLFxuICAgICAgemlwVXRpbC5nZXRFaWdodEJ5dGVzKGFlLl9vZmZzZXRzLmZpbGUpXG4gICAgXSwgMjgpO1xuXG4gICAgYWUuc2V0RXh0cmEoZXh0cmFCdWYpO1xuICB9XG5cbiAgLy8gc2lnbmF0dXJlXG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRMb25nQnl0ZXMoY29uc3RhbnRzLlNJR19DRkgpKTtcblxuICAvLyB2ZXJzaW9uIG1hZGUgYnlcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldFNob3J0Qnl0ZXMoKGFlLmdldFBsYXRmb3JtKCkgPDwgOCkgfCBjb25zdGFudHMuVkVSU0lPTl9NQURFQlkpKTtcblxuICAvLyB2ZXJzaW9uIHRvIGV4dHJhY3QgYW5kIGdlbmVyYWwgYml0IGZsYWdcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldFNob3J0Qnl0ZXMoYWUuZ2V0VmVyc2lvbk5lZWRlZFRvRXh0cmFjdCgpKSk7XG4gIHRoaXMud3JpdGUoZ3BiLmVuY29kZSgpKTtcblxuICAvLyBjb21wcmVzc2lvbiBtZXRob2RcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldFNob3J0Qnl0ZXMobWV0aG9kKSk7XG5cbiAgLy8gZGF0ZXRpbWVcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldExvbmdCeXRlcyhhZS5nZXRUaW1lRG9zKCkpKTtcblxuICAvLyBjcmMzMiBjaGVja3N1bVxuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0TG9uZ0J5dGVzKGFlLmdldENyYygpKSk7XG5cbiAgLy8gc2l6ZXNcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldExvbmdCeXRlcyhjb21wcmVzc2VkU2l6ZSkpO1xuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0TG9uZ0J5dGVzKHNpemUpKTtcblxuICB2YXIgbmFtZSA9IGFlLmdldE5hbWUoKTtcbiAgdmFyIGNvbW1lbnQgPSBhZS5nZXRDb21tZW50KCk7XG4gIHZhciBleHRyYSA9IGFlLmdldENlbnRyYWxEaXJlY3RvcnlFeHRyYSgpO1xuXG4gIGlmIChncGIudXNlc1VURjhGb3JOYW1lcygpKSB7XG4gICAgbmFtZSA9IEJ1ZmZlci5mcm9tKG5hbWUpO1xuICAgIGNvbW1lbnQgPSBCdWZmZXIuZnJvbShjb21tZW50KTtcbiAgfVxuXG4gIC8vIG5hbWUgbGVuZ3RoXG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRTaG9ydEJ5dGVzKG5hbWUubGVuZ3RoKSk7XG5cbiAgLy8gZXh0cmEgbGVuZ3RoXG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRTaG9ydEJ5dGVzKGV4dHJhLmxlbmd0aCkpO1xuXG4gIC8vIGNvbW1lbnRzIGxlbmd0aFxuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0U2hvcnRCeXRlcyhjb21tZW50Lmxlbmd0aCkpO1xuXG4gIC8vIGRpc2sgbnVtYmVyIHN0YXJ0XG4gIHRoaXMud3JpdGUoY29uc3RhbnRzLlNIT1JUX1pFUk8pO1xuXG4gIC8vIGludGVybmFsIGF0dHJpYnV0ZXNcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldFNob3J0Qnl0ZXMoYWUuZ2V0SW50ZXJuYWxBdHRyaWJ1dGVzKCkpKTtcblxuICAvLyBleHRlcm5hbCBhdHRyaWJ1dGVzXG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRMb25nQnl0ZXMoYWUuZ2V0RXh0ZXJuYWxBdHRyaWJ1dGVzKCkpKTtcblxuICAvLyByZWxhdGl2ZSBvZmZzZXQgb2YgTEZIXG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRMb25nQnl0ZXMoZmlsZU9mZnNldCkpO1xuXG4gIC8vIG5hbWVcbiAgdGhpcy53cml0ZShuYW1lKTtcblxuICAvLyBleHRyYVxuICB0aGlzLndyaXRlKGV4dHJhKTtcblxuICAvLyBjb21tZW50XG4gIHRoaXMud3JpdGUoY29tbWVudCk7XG59O1xuXG5aaXBBcmNoaXZlT3V0cHV0U3RyZWFtLnByb3RvdHlwZS5fd3JpdGVEYXRhRGVzY3JpcHRvciA9IGZ1bmN0aW9uKGFlKSB7XG4gIC8vIHNpZ25hdHVyZVxuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0TG9uZ0J5dGVzKGNvbnN0YW50cy5TSUdfREQpKTtcblxuICAvLyBjcmMzMiBjaGVja3N1bVxuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0TG9uZ0J5dGVzKGFlLmdldENyYygpKSk7XG5cbiAgLy8gc2l6ZXNcbiAgaWYgKGFlLmlzWmlwNjQoKSkge1xuICAgIHRoaXMud3JpdGUoemlwVXRpbC5nZXRFaWdodEJ5dGVzKGFlLmdldENvbXByZXNzZWRTaXplKCkpKTtcbiAgICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0RWlnaHRCeXRlcyhhZS5nZXRTaXplKCkpKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0TG9uZ0J5dGVzKGFlLmdldENvbXByZXNzZWRTaXplKCkpKTtcbiAgICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0TG9uZ0J5dGVzKGFlLmdldFNpemUoKSkpO1xuICB9XG59O1xuXG5aaXBBcmNoaXZlT3V0cHV0U3RyZWFtLnByb3RvdHlwZS5fd3JpdGVMb2NhbEZpbGVIZWFkZXIgPSBmdW5jdGlvbihhZSkge1xuICB2YXIgZ3BiID0gYWUuZ2V0R2VuZXJhbFB1cnBvc2VCaXQoKTtcbiAgdmFyIG1ldGhvZCA9IGFlLmdldE1ldGhvZCgpO1xuICB2YXIgbmFtZSA9IGFlLmdldE5hbWUoKTtcbiAgdmFyIGV4dHJhID0gYWUuZ2V0TG9jYWxGaWxlRGF0YUV4dHJhKCk7XG5cbiAgaWYgKGFlLmlzWmlwNjQoKSkge1xuICAgIGdwYi51c2VEYXRhRGVzY3JpcHRvcih0cnVlKTtcbiAgICBhZS5zZXRWZXJzaW9uTmVlZGVkVG9FeHRyYWN0KGNvbnN0YW50cy5NSU5fVkVSU0lPTl9aSVA2NCk7XG4gIH1cblxuICBpZiAoZ3BiLnVzZXNVVEY4Rm9yTmFtZXMoKSkge1xuICAgIG5hbWUgPSBCdWZmZXIuZnJvbShuYW1lKTtcbiAgfVxuXG4gIGFlLl9vZmZzZXRzLmZpbGUgPSB0aGlzLm9mZnNldDtcblxuICAvLyBzaWduYXR1cmVcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldExvbmdCeXRlcyhjb25zdGFudHMuU0lHX0xGSCkpO1xuXG4gIC8vIHZlcnNpb24gdG8gZXh0cmFjdCBhbmQgZ2VuZXJhbCBiaXQgZmxhZ1xuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0U2hvcnRCeXRlcyhhZS5nZXRWZXJzaW9uTmVlZGVkVG9FeHRyYWN0KCkpKTtcbiAgdGhpcy53cml0ZShncGIuZW5jb2RlKCkpO1xuXG4gIC8vIGNvbXByZXNzaW9uIG1ldGhvZFxuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0U2hvcnRCeXRlcyhtZXRob2QpKTtcblxuICAvLyBkYXRldGltZVxuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0TG9uZ0J5dGVzKGFlLmdldFRpbWVEb3MoKSkpO1xuXG4gIGFlLl9vZmZzZXRzLmRhdGEgPSB0aGlzLm9mZnNldDtcblxuICAvLyBjcmMzMiBjaGVja3N1bSBhbmQgc2l6ZXNcbiAgaWYgKGdwYi51c2VzRGF0YURlc2NyaXB0b3IoKSkge1xuICAgIHRoaXMud3JpdGUoY29uc3RhbnRzLkxPTkdfWkVSTyk7XG4gICAgdGhpcy53cml0ZShjb25zdGFudHMuTE9OR19aRVJPKTtcbiAgICB0aGlzLndyaXRlKGNvbnN0YW50cy5MT05HX1pFUk8pO1xuICB9IGVsc2Uge1xuICAgIHRoaXMud3JpdGUoemlwVXRpbC5nZXRMb25nQnl0ZXMoYWUuZ2V0Q3JjKCkpKTtcbiAgICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0TG9uZ0J5dGVzKGFlLmdldENvbXByZXNzZWRTaXplKCkpKTtcbiAgICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0TG9uZ0J5dGVzKGFlLmdldFNpemUoKSkpO1xuICB9XG5cbiAgLy8gbmFtZSBsZW5ndGhcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldFNob3J0Qnl0ZXMobmFtZS5sZW5ndGgpKTtcblxuICAvLyBleHRyYSBsZW5ndGhcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldFNob3J0Qnl0ZXMoZXh0cmEubGVuZ3RoKSk7XG5cbiAgLy8gbmFtZVxuICB0aGlzLndyaXRlKG5hbWUpO1xuXG4gIC8vIGV4dHJhXG4gIHRoaXMud3JpdGUoZXh0cmEpO1xuXG4gIGFlLl9vZmZzZXRzLmNvbnRlbnRzID0gdGhpcy5vZmZzZXQ7XG59O1xuXG5aaXBBcmNoaXZlT3V0cHV0U3RyZWFtLnByb3RvdHlwZS5nZXRDb21tZW50ID0gZnVuY3Rpb24oY29tbWVudCkge1xuICByZXR1cm4gdGhpcy5fYXJjaGl2ZS5jb21tZW50ICE9PSBudWxsID8gdGhpcy5fYXJjaGl2ZS5jb21tZW50IDogJyc7XG59O1xuXG5aaXBBcmNoaXZlT3V0cHV0U3RyZWFtLnByb3RvdHlwZS5pc1ppcDY0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLl9hcmNoaXZlLmZvcmNlWmlwNjQgfHwgdGhpcy5fZW50cmllcy5sZW5ndGggPiBjb25zdGFudHMuWklQNjRfTUFHSUNfU0hPUlQgfHwgdGhpcy5fYXJjaGl2ZS5jZW50cmFsTGVuZ3RoID4gY29uc3RhbnRzLlpJUDY0X01BR0lDIHx8IHRoaXMuX2FyY2hpdmUuY2VudHJhbE9mZnNldCA+IGNvbnN0YW50cy5aSVA2NF9NQUdJQztcbn07XG5cblppcEFyY2hpdmVPdXRwdXRTdHJlYW0ucHJvdG90eXBlLnNldENvbW1lbnQgPSBmdW5jdGlvbihjb21tZW50KSB7XG4gIHRoaXMuX2FyY2hpdmUuY29tbWVudCA9IGNvbW1lbnQ7XG59O1xuIiwKICAgICIvKipcbiAqIG5vZGUtY29tcHJlc3MtY29tbW9uc1xuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNCBDaHJpcyBUYWxraW5ndG9uLCBjb250cmlidXRvcnMuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBodHRwczovL2dpdGh1Yi5jb20vYXJjaGl2ZXJqcy9ub2RlLWNvbXByZXNzLWNvbW1vbnMvYmxvYi9tYXN0ZXIvTElDRU5TRS1NSVRcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEFyY2hpdmVFbnRyeTogcmVxdWlyZSgnLi9hcmNoaXZlcnMvYXJjaGl2ZS1lbnRyeScpLFxuICBaaXBBcmNoaXZlRW50cnk6IHJlcXVpcmUoJy4vYXJjaGl2ZXJzL3ppcC96aXAtYXJjaGl2ZS1lbnRyeScpLFxuICBBcmNoaXZlT3V0cHV0U3RyZWFtOiByZXF1aXJlKCcuL2FyY2hpdmVycy9hcmNoaXZlLW91dHB1dC1zdHJlYW0nKSxcbiAgWmlwQXJjaGl2ZU91dHB1dFN0cmVhbTogcmVxdWlyZSgnLi9hcmNoaXZlcnMvemlwL3ppcC1hcmNoaXZlLW91dHB1dC1zdHJlYW0nKVxufTsiLAogICAgIi8qKlxuICogWmlwU3RyZWFtXG4gKlxuICogQGlnbm9yZVxuICogQGxpY2Vuc2UgW01JVF17QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FyY2hpdmVyanMvbm9kZS16aXAtc3RyZWFtL2Jsb2IvbWFzdGVyL0xJQ0VOU0V9XG4gKiBAY29weXJpZ2h0IChjKSAyMDE0IENocmlzIFRhbGtpbmd0b24sIGNvbnRyaWJ1dG9ycy5cbiAqL1xudmFyIGluaGVyaXRzID0gcmVxdWlyZSgndXRpbCcpLmluaGVyaXRzO1xuXG52YXIgWmlwQXJjaGl2ZU91dHB1dFN0cmVhbSA9IHJlcXVpcmUoJ2NvbXByZXNzLWNvbW1vbnMnKS5aaXBBcmNoaXZlT3V0cHV0U3RyZWFtO1xudmFyIFppcEFyY2hpdmVFbnRyeSA9IHJlcXVpcmUoJ2NvbXByZXNzLWNvbW1vbnMnKS5aaXBBcmNoaXZlRW50cnk7XG5cbnZhciB1dGlsID0gcmVxdWlyZSgnYXJjaGl2ZXItdXRpbHMnKTtcblxuLyoqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIGV4dGVybmFsOlppcEFyY2hpdmVPdXRwdXRTdHJlYW1cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0aW9ucy5jb21tZW50XSBTZXRzIHRoZSB6aXAgYXJjaGl2ZSBjb21tZW50LlxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5mb3JjZUxvY2FsVGltZT1mYWxzZV0gRm9yY2VzIHRoZSBhcmNoaXZlIHRvIGNvbnRhaW4gbG9jYWwgZmlsZSB0aW1lcyBpbnN0ZWFkIG9mIFVUQy5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMuZm9yY2VaaXA2ND1mYWxzZV0gRm9yY2VzIHRoZSBhcmNoaXZlIHRvIGNvbnRhaW4gWklQNjQgaGVhZGVycy5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMuc3RvcmU9ZmFsc2VdIFNldHMgdGhlIGNvbXByZXNzaW9uIG1ldGhvZCB0byBTVE9SRS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy56bGliXSBQYXNzZWQgdG8gW3psaWJde0BsaW5rIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvemxpYi5odG1sI3psaWJfY2xhc3Nfb3B0aW9uc31cbiAqIHRvIGNvbnRyb2wgY29tcHJlc3Npb24uXG4gKi9cbnZhciBaaXBTdHJlYW0gPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFppcFN0cmVhbSkpIHtcbiAgICByZXR1cm4gbmV3IFppcFN0cmVhbShvcHRpb25zKTtcbiAgfVxuXG4gIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBvcHRpb25zLnpsaWIgPSBvcHRpb25zLnpsaWIgfHwge307XG5cbiAgWmlwQXJjaGl2ZU91dHB1dFN0cmVhbS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5sZXZlbCA9PT0gJ251bWJlcicgJiYgb3B0aW9ucy5sZXZlbCA+PSAwKSB7XG4gICAgb3B0aW9ucy56bGliLmxldmVsID0gb3B0aW9ucy5sZXZlbDtcbiAgICBkZWxldGUgb3B0aW9ucy5sZXZlbDtcbiAgfVxuXG4gIGlmICghb3B0aW9ucy5mb3JjZVppcDY0ICYmIHR5cGVvZiBvcHRpb25zLnpsaWIubGV2ZWwgPT09ICdudW1iZXInICYmIG9wdGlvbnMuemxpYi5sZXZlbCA9PT0gMCkge1xuICAgIG9wdGlvbnMuc3RvcmUgPSB0cnVlO1xuICB9XG5cbiAgb3B0aW9ucy5uYW1lUHJlcGVuZFNsYXNoID0gb3B0aW9ucy5uYW1lUHJlcGVuZFNsYXNoIHx8IGZhbHNlO1xuXG4gIGlmIChvcHRpb25zLmNvbW1lbnQgJiYgb3B0aW9ucy5jb21tZW50Lmxlbmd0aCA+IDApIHtcbiAgICB0aGlzLnNldENvbW1lbnQob3B0aW9ucy5jb21tZW50KTtcbiAgfVxufTtcblxuaW5oZXJpdHMoWmlwU3RyZWFtLCBaaXBBcmNoaXZlT3V0cHV0U3RyZWFtKTtcblxuLyoqXG4gKiBOb3JtYWxpemVzIGVudHJ5IGRhdGEgd2l0aCBmYWxsYmFja3MgZm9yIGtleSBwcm9wZXJ0aWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gIHtPYmplY3R9IGRhdGFcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuWmlwU3RyZWFtLnByb3RvdHlwZS5fbm9ybWFsaXplRmlsZURhdGEgPSBmdW5jdGlvbihkYXRhKSB7XG4gIGRhdGEgPSB1dGlsLmRlZmF1bHRzKGRhdGEsIHtcbiAgICB0eXBlOiAnZmlsZScsXG4gICAgbmFtZTogbnVsbCxcbiAgICBuYW1lUHJlcGVuZFNsYXNoOiB0aGlzLm9wdGlvbnMubmFtZVByZXBlbmRTbGFzaCxcbiAgICBsaW5rbmFtZTogbnVsbCxcbiAgICBkYXRlOiBudWxsLFxuICAgIG1vZGU6IG51bGwsXG4gICAgc3RvcmU6IHRoaXMub3B0aW9ucy5zdG9yZSxcbiAgICBjb21tZW50OiAnJ1xuICB9KTtcblxuICB2YXIgaXNEaXIgPSBkYXRhLnR5cGUgPT09ICdkaXJlY3RvcnknO1xuICB2YXIgaXNTeW1saW5rID0gZGF0YS50eXBlID09PSAnc3ltbGluayc7XG5cbiAgaWYgKGRhdGEubmFtZSkge1xuICAgIGRhdGEubmFtZSA9IHV0aWwuc2FuaXRpemVQYXRoKGRhdGEubmFtZSk7XG5cbiAgICBpZiAoIWlzU3ltbGluayAmJiBkYXRhLm5hbWUuc2xpY2UoLTEpID09PSAnLycpIHtcbiAgICAgIGlzRGlyID0gdHJ1ZTtcbiAgICAgIGRhdGEudHlwZSA9ICdkaXJlY3RvcnknO1xuICAgIH0gZWxzZSBpZiAoaXNEaXIpIHtcbiAgICAgIGRhdGEubmFtZSArPSAnLyc7XG4gICAgfVxuICB9XG5cbiAgaWYgKGlzRGlyIHx8IGlzU3ltbGluaykge1xuICAgIGRhdGEuc3RvcmUgPSB0cnVlO1xuICB9XG5cbiAgZGF0YS5kYXRlID0gdXRpbC5kYXRlaWZ5KGRhdGEuZGF0ZSk7XG5cbiAgcmV0dXJuIGRhdGE7XG59O1xuXG4vKipcbiAqIEFwcGVuZHMgYW4gZW50cnkgZ2l2ZW4gYW4gaW5wdXQgc291cmNlICh0ZXh0IHN0cmluZywgYnVmZmVyLCBvciBzdHJlYW0pLlxuICpcbiAqIEBwYXJhbSAgeyhCdWZmZXJ8U3RyZWFtfFN0cmluZyl9IHNvdXJjZSBUaGUgaW5wdXQgc291cmNlLlxuICogQHBhcmFtICB7T2JqZWN0fSBkYXRhXG4gKiBAcGFyYW0gIHtTdHJpbmd9IGRhdGEubmFtZSBTZXRzIHRoZSBlbnRyeSBuYW1lIGluY2x1ZGluZyBpbnRlcm5hbCBwYXRoLlxuICogQHBhcmFtICB7U3RyaW5nfSBbZGF0YS5jb21tZW50XSBTZXRzIHRoZSBlbnRyeSBjb21tZW50LlxuICogQHBhcmFtICB7KFN0cmluZ3xEYXRlKX0gW2RhdGEuZGF0ZT1OT1coKV0gU2V0cyB0aGUgZW50cnkgZGF0ZS5cbiAqIEBwYXJhbSAge051bWJlcn0gW2RhdGEubW9kZT1EOjA3NTUvRjowNjQ0XSBTZXRzIHRoZSBlbnRyeSBwZXJtaXNzaW9ucy5cbiAqIEBwYXJhbSAge0Jvb2xlYW59IFtkYXRhLnN0b3JlPW9wdGlvbnMuc3RvcmVdIFNldHMgdGhlIGNvbXByZXNzaW9uIG1ldGhvZCB0byBTVE9SRS5cbiAqIEBwYXJhbSAge1N0cmluZ30gW2RhdGEudHlwZT1maWxlXSBTZXRzIHRoZSBlbnRyeSB0eXBlLiBEZWZhdWx0cyB0byBgZGlyZWN0b3J5YFxuICogaWYgbmFtZSBlbmRzIHdpdGggdHJhaWxpbmcgc2xhc2guXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4gdGhpc1xuICovXG5aaXBTdHJlYW0ucHJvdG90eXBlLmVudHJ5ID0gZnVuY3Rpb24oc291cmNlLCBkYXRhLCBjYWxsYmFjaykge1xuICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgY2FsbGJhY2sgPSB0aGlzLl9lbWl0RXJyb3JDYWxsYmFjay5iaW5kKHRoaXMpO1xuICB9XG5cbiAgZGF0YSA9IHRoaXMuX25vcm1hbGl6ZUZpbGVEYXRhKGRhdGEpO1xuXG4gIGlmIChkYXRhLnR5cGUgIT09ICdmaWxlJyAmJiBkYXRhLnR5cGUgIT09ICdkaXJlY3RvcnknICYmIGRhdGEudHlwZSAhPT0gJ3N5bWxpbmsnKSB7XG4gICAgY2FsbGJhY2sobmV3IEVycm9yKGRhdGEudHlwZSArICcgZW50cmllcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZCcpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAodHlwZW9mIGRhdGEubmFtZSAhPT0gJ3N0cmluZycgfHwgZGF0YS5uYW1lLmxlbmd0aCA9PT0gMCkge1xuICAgIGNhbGxiYWNrKG5ldyBFcnJvcignZW50cnkgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyB2YWx1ZScpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoZGF0YS50eXBlID09PSAnc3ltbGluaycgJiYgdHlwZW9mIGRhdGEubGlua25hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgY2FsbGJhY2sobmV3IEVycm9yKCdlbnRyeSBsaW5rbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyB2YWx1ZSB3aGVuIHR5cGUgZXF1YWxzIHN5bWxpbmsnKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGVudHJ5ID0gbmV3IFppcEFyY2hpdmVFbnRyeShkYXRhLm5hbWUpO1xuICBlbnRyeS5zZXRUaW1lKGRhdGEuZGF0ZSwgdGhpcy5vcHRpb25zLmZvcmNlTG9jYWxUaW1lKTtcblxuICBpZiAoZGF0YS5uYW1lUHJlcGVuZFNsYXNoKSB7XG4gICAgZW50cnkuc2V0TmFtZShkYXRhLm5hbWUsIHRydWUpO1xuICB9XG5cbiAgaWYgKGRhdGEuc3RvcmUpIHtcbiAgICBlbnRyeS5zZXRNZXRob2QoMCk7XG4gIH1cblxuICBpZiAoZGF0YS5jb21tZW50Lmxlbmd0aCA+IDApIHtcbiAgICBlbnRyeS5zZXRDb21tZW50KGRhdGEuY29tbWVudCk7XG4gIH1cblxuICBpZiAoZGF0YS50eXBlID09PSAnc3ltbGluaycgJiYgdHlwZW9mIGRhdGEubW9kZSAhPT0gJ251bWJlcicpIHtcbiAgICBkYXRhLm1vZGUgPSA0MDk2MDsgLy8gMDEyMDAwMFxuICB9XG5cbiAgaWYgKHR5cGVvZiBkYXRhLm1vZGUgPT09ICdudW1iZXInKSB7XG4gICAgaWYgKGRhdGEudHlwZSA9PT0gJ3N5bWxpbmsnKSB7XG4gICAgICBkYXRhLm1vZGUgfD0gNDA5NjA7XG4gICAgfVxuXG4gICAgZW50cnkuc2V0VW5peE1vZGUoZGF0YS5tb2RlKTtcbiAgfVxuXG4gIGlmIChkYXRhLnR5cGUgPT09ICdzeW1saW5rJyAmJiB0eXBlb2YgZGF0YS5saW5rbmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICBzb3VyY2UgPSBCdWZmZXIuZnJvbShkYXRhLmxpbmtuYW1lKTtcbiAgfVxuXG4gIHJldHVybiBaaXBBcmNoaXZlT3V0cHV0U3RyZWFtLnByb3RvdHlwZS5lbnRyeS5jYWxsKHRoaXMsIGVudHJ5LCBzb3VyY2UsIGNhbGxiYWNrKTtcbn07XG5cbi8qKlxuICogRmluYWxpemVzIHRoZSBpbnN0YW5jZSBhbmQgcHJldmVudHMgZnVydGhlciBhcHBlbmRpbmcgdG8gdGhlIGFyY2hpdmVcbiAqIHN0cnVjdHVyZSAocXVldWUgd2lsbCBjb250aW51ZSB0aWwgZHJhaW5lZCkuXG4gKlxuICogQHJldHVybiB2b2lkXG4gKi9cblppcFN0cmVhbS5wcm90b3R5cGUuZmluYWxpemUgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5maW5pc2goKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY3VycmVudCBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiB0byB0aGlzIHN0cmVhbS5cbiAqIEBmdW5jdGlvbiBaaXBTdHJlYW0jZ2V0Qnl0ZXNXcml0dGVuXG4gKiBAcmV0dXJucyB7TnVtYmVyfVxuICovXG5cbi8qKlxuICogQ29tcHJlc3MgQ29tbW9ucyBaaXBBcmNoaXZlT3V0cHV0U3RyZWFtXG4gKiBAZXh0ZXJuYWwgWmlwQXJjaGl2ZU91dHB1dFN0cmVhbVxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FyY2hpdmVyanMvbm9kZS1jb21wcmVzcy1jb21tb25zfVxuICovXG4iLAogICAgIi8qKlxuICogWklQIEZvcm1hdCBQbHVnaW5cbiAqXG4gKiBAbW9kdWxlIHBsdWdpbnMvemlwXG4gKiBAbGljZW5zZSBbTUlUXXtAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXJjaGl2ZXJqcy9ub2RlLWFyY2hpdmVyL2Jsb2IvbWFzdGVyL0xJQ0VOU0V9XG4gKiBAY29weXJpZ2h0IChjKSAyMDEyLTIwMTQgQ2hyaXMgVGFsa2luZ3RvbiwgY29udHJpYnV0b3JzLlxuICovXG52YXIgZW5naW5lID0gcmVxdWlyZSgnemlwLXN0cmVhbScpO1xudmFyIHV0aWwgPSByZXF1aXJlKCdhcmNoaXZlci11dGlscycpO1xuXG4vKipcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtaaXBPcHRpb25zfSBbb3B0aW9uc11cbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0aW9ucy5jb21tZW50XSBTZXRzIHRoZSB6aXAgYXJjaGl2ZSBjb21tZW50LlxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5mb3JjZUxvY2FsVGltZT1mYWxzZV0gRm9yY2VzIHRoZSBhcmNoaXZlIHRvIGNvbnRhaW4gbG9jYWwgZmlsZSB0aW1lcyBpbnN0ZWFkIG9mIFVUQy5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMuZm9yY2VaaXA2ND1mYWxzZV0gRm9yY2VzIHRoZSBhcmNoaXZlIHRvIGNvbnRhaW4gWklQNjQgaGVhZGVycy5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMubmFtZVByZXBlbmRTbGFzaD1mYWxzZV0gUHJlcGVuZHMgYSBmb3J3YXJkIHNsYXNoIHRvIGFyY2hpdmUgZmlsZSBwYXRocy5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMuc3RvcmU9ZmFsc2VdIFNldHMgdGhlIGNvbXByZXNzaW9uIG1ldGhvZCB0byBTVE9SRS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy56bGliXSBQYXNzZWQgdG8gW3psaWJde0BsaW5rIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvemxpYi5odG1sI3psaWJfY2xhc3Nfb3B0aW9uc31cbiAqL1xudmFyIFppcCA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFppcCkpIHtcbiAgICByZXR1cm4gbmV3IFppcChvcHRpb25zKTtcbiAgfVxuXG4gIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMgPSB1dGlsLmRlZmF1bHRzKG9wdGlvbnMsIHtcbiAgICBjb21tZW50OiAnJyxcbiAgICBmb3JjZVVUQzogZmFsc2UsXG4gICAgbmFtZVByZXBlbmRTbGFzaDogZmFsc2UsXG4gICAgc3RvcmU6IGZhbHNlXG4gIH0pO1xuXG4gIHRoaXMuc3VwcG9ydHMgPSB7XG4gICAgZGlyZWN0b3J5OiB0cnVlLFxuICAgIHN5bWxpbms6IHRydWVcbiAgfTtcblxuICB0aGlzLmVuZ2luZSA9IG5ldyBlbmdpbmUob3B0aW9ucyk7XG59O1xuXG4vKipcbiAqIEBwYXJhbSAgeyhCdWZmZXJ8U3RyZWFtKX0gc291cmNlXG4gKiBAcGFyYW0gIHtaaXBFbnRyeURhdGF9IGRhdGFcbiAqIEBwYXJhbSAge1N0cmluZ30gZGF0YS5uYW1lIFNldHMgdGhlIGVudHJ5IG5hbWUgaW5jbHVkaW5nIGludGVybmFsIHBhdGguXG4gKiBAcGFyYW0gIHsoU3RyaW5nfERhdGUpfSBbZGF0YS5kYXRlPU5PVygpXSBTZXRzIHRoZSBlbnRyeSBkYXRlLlxuICogQHBhcmFtICB7TnVtYmVyfSBbZGF0YS5tb2RlPUQ6MDc1NS9GOjA2NDRdIFNldHMgdGhlIGVudHJ5IHBlcm1pc3Npb25zLlxuICogQHBhcmFtICB7U3RyaW5nfSBbZGF0YS5wcmVmaXhdIFNldHMgYSBwYXRoIHByZWZpeCBmb3IgdGhlIGVudHJ5IG5hbWUuIFVzZWZ1bFxuICogd2hlbiB3b3JraW5nIHdpdGggbWV0aG9kcyBsaWtlIGBkaXJlY3RvcnlgIG9yIGBnbG9iYC5cbiAqIEBwYXJhbSAge2ZzLlN0YXRzfSBbZGF0YS5zdGF0c10gU2V0cyB0aGUgZnMgc3RhdCBkYXRhIGZvciB0aGlzIGVudHJ5IGFsbG93aW5nXG4gKiBmb3IgcmVkdWN0aW9uIG9mIGZzIHN0YXQgY2FsbHMgd2hlbiBzdGF0IGRhdGEgaXMgYWxyZWFkeSBrbm93bi5cbiAqIEBwYXJhbSAge0Jvb2xlYW59IFtkYXRhLnN0b3JlPVppcE9wdGlvbnMuc3RvcmVdIFNldHMgdGhlIGNvbXByZXNzaW9uIG1ldGhvZCB0byBTVE9SRS5cbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB2b2lkXG4gKi9cblppcC5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24oc291cmNlLCBkYXRhLCBjYWxsYmFjaykge1xuICB0aGlzLmVuZ2luZS5lbnRyeShzb3VyY2UsIGRhdGEsIGNhbGxiYWNrKTtcbn07XG5cbi8qKlxuICogQHJldHVybiB2b2lkXG4gKi9cblppcC5wcm90b3R5cGUuZmluYWxpemUgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5lbmdpbmUuZmluYWxpemUoKTtcbn07XG5cbi8qKlxuICogQHJldHVybiB0aGlzLmVuZ2luZVxuICovXG5aaXAucHJvdG90eXBlLm9uID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmVuZ2luZS5vbi5hcHBseSh0aGlzLmVuZ2luZSwgYXJndW1lbnRzKTtcbn07XG5cbi8qKlxuICogQHJldHVybiB0aGlzLmVuZ2luZVxuICovXG5aaXAucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZW5naW5lLnBpcGUuYXBwbHkodGhpcy5lbmdpbmUsIGFyZ3VtZW50cyk7XG59O1xuXG4vKipcbiAqIEByZXR1cm4gdGhpcy5lbmdpbmVcbiAqL1xuWmlwLnByb3RvdHlwZS51bnBpcGUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZW5naW5lLnVucGlwZS5hcHBseSh0aGlzLmVuZ2luZSwgYXJndW1lbnRzKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gWmlwO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFppcE9wdGlvbnNcbiAqIEBnbG9iYWxcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBbY29tbWVudF0gU2V0cyB0aGUgemlwIGFyY2hpdmUgY29tbWVudC5cbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gW2ZvcmNlTG9jYWxUaW1lPWZhbHNlXSBGb3JjZXMgdGhlIGFyY2hpdmUgdG8gY29udGFpbiBsb2NhbCBmaWxlIHRpbWVzIGluc3RlYWQgb2YgVVRDLlxuICogQHByb3BlcnR5IHtCb29sZWFufSBbZm9yY2VaaXA2ND1mYWxzZV0gRm9yY2VzIHRoZSBhcmNoaXZlIHRvIGNvbnRhaW4gWklQNjQgaGVhZGVycy5cbiAqIEBwcnBwZXJ0eSB7Qm9vbGVhbn0gW25hbWVQcmVwZW5kU2xhc2g9ZmFsc2VdIFByZXBlbmRzIGEgZm9yd2FyZCBzbGFzaCB0byBhcmNoaXZlIGZpbGUgcGF0aHMuXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IFtzdG9yZT1mYWxzZV0gU2V0cyB0aGUgY29tcHJlc3Npb24gbWV0aG9kIHRvIFNUT1JFLlxuICogQHByb3BlcnR5IHtPYmplY3R9IFt6bGliXSBQYXNzZWQgdG8gW3psaWJde0BsaW5rIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvemxpYi5odG1sI3psaWJfY2xhc3Nfb3B0aW9uc31cbiAqIHRvIGNvbnRyb2wgY29tcHJlc3Npb24uXG4gKiBAcHJvcGVydHkgeyp9IFsqXSBTZWUgW3ppcC1zdHJlYW1de0BsaW5rIGh0dHBzOi8vYXJjaGl2ZXJqcy5jb20vemlwLXN0cmVhbS9aaXBTdHJlYW0uaHRtbH0gZG9jdW1lbnRhdGlvbiBmb3IgY3VycmVudCBsaXN0IG9mIHByb3BlcnRpZXMuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBaaXBFbnRyeURhdGFcbiAqIEBnbG9iYWxcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBuYW1lIFNldHMgdGhlIGVudHJ5IG5hbWUgaW5jbHVkaW5nIGludGVybmFsIHBhdGguXG4gKiBAcHJvcGVydHkgeyhTdHJpbmd8RGF0ZSl9IFtkYXRlPU5PVygpXSBTZXRzIHRoZSBlbnRyeSBkYXRlLlxuICogQHByb3BlcnR5IHtOdW1iZXJ9IFttb2RlPUQ6MDc1NS9GOjA2NDRdIFNldHMgdGhlIGVudHJ5IHBlcm1pc3Npb25zLlxuICogQHByb3BlcnR5IHtCb29sZWFufSBbbmFtZVByZXBlbmRTbGFzaD1aaXBPcHRpb25zLm5hbWVQcmVwZW5kU2xhc2hdIFByZXBlbmRzIGEgZm9yd2FyZCBzbGFzaCB0byBhcmNoaXZlIGZpbGUgcGF0aHMuXG4gKiBAcHJvcGVydHkge1N0cmluZ30gW3ByZWZpeF0gU2V0cyBhIHBhdGggcHJlZml4IGZvciB0aGUgZW50cnkgbmFtZS4gVXNlZnVsXG4gKiB3aGVuIHdvcmtpbmcgd2l0aCBtZXRob2RzIGxpa2UgYGRpcmVjdG9yeWAgb3IgYGdsb2JgLlxuICogQHByb3BlcnR5IHtmcy5TdGF0c30gW3N0YXRzXSBTZXRzIHRoZSBmcyBzdGF0IGRhdGEgZm9yIHRoaXMgZW50cnkgYWxsb3dpbmdcbiAqIGZvciByZWR1Y3Rpb24gb2YgZnMgc3RhdCBjYWxscyB3aGVuIHN0YXQgZGF0YSBpcyBhbHJlYWR5IGtub3duLlxuICogQHByb3BlcnR5IHtCb29sZWFufSBbc3RvcmU9WmlwT3B0aW9ucy5zdG9yZV0gU2V0cyB0aGUgY29tcHJlc3Npb24gbWV0aG9kIHRvIFNUT1JFLlxuICovXG5cbi8qKlxuICogWmlwU3RyZWFtIE1vZHVsZVxuICogQGV4dGVybmFsIFppcFN0cmVhbVxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cuYXJjaGl2ZXJqcy5jb20vemlwLXN0cmVhbS9aaXBTdHJlYW0uaHRtbH1cbiAqL1xuIiwKICAgICJtb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBxdWV1ZU1pY3JvdGFzayA9PT0gJ2Z1bmN0aW9uJyA/IHF1ZXVlTWljcm90YXNrIDogKGZuKSA9PiBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZuKVxuIiwKICAgICJtb2R1bGUuZXhwb3J0cyA9ICh0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHByb2Nlc3MubmV4dFRpY2sgPT09ICdmdW5jdGlvbicpXG4gID8gcHJvY2Vzcy5uZXh0VGljay5iaW5kKHByb2Nlc3MpXG4gIDogcmVxdWlyZSgnLi9xdWV1ZS1taWNyb3Rhc2snKVxuIiwKICAgICJtb2R1bGUuZXhwb3J0cyA9IGNsYXNzIEZpeGVkRklGTyB7XG4gIGNvbnN0cnVjdG9yIChod20pIHtcbiAgICBpZiAoIShod20gPiAwKSB8fCAoKGh3bSAtIDEpICYgaHdtKSAhPT0gMCkgdGhyb3cgbmV3IEVycm9yKCdNYXggc2l6ZSBmb3IgYSBGaXhlZEZJRk8gc2hvdWxkIGJlIGEgcG93ZXIgb2YgdHdvJylcbiAgICB0aGlzLmJ1ZmZlciA9IG5ldyBBcnJheShod20pXG4gICAgdGhpcy5tYXNrID0gaHdtIC0gMVxuICAgIHRoaXMudG9wID0gMFxuICAgIHRoaXMuYnRtID0gMFxuICAgIHRoaXMubmV4dCA9IG51bGxcbiAgfVxuXG4gIGNsZWFyICgpIHtcbiAgICB0aGlzLnRvcCA9IHRoaXMuYnRtID0gMFxuICAgIHRoaXMubmV4dCA9IG51bGxcbiAgICB0aGlzLmJ1ZmZlci5maWxsKHVuZGVmaW5lZClcbiAgfVxuXG4gIHB1c2ggKGRhdGEpIHtcbiAgICBpZiAodGhpcy5idWZmZXJbdGhpcy50b3BdICE9PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZVxuICAgIHRoaXMuYnVmZmVyW3RoaXMudG9wXSA9IGRhdGFcbiAgICB0aGlzLnRvcCA9ICh0aGlzLnRvcCArIDEpICYgdGhpcy5tYXNrXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIHNoaWZ0ICgpIHtcbiAgICBjb25zdCBsYXN0ID0gdGhpcy5idWZmZXJbdGhpcy5idG1dXG4gICAgaWYgKGxhc3QgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZFxuICAgIHRoaXMuYnVmZmVyW3RoaXMuYnRtXSA9IHVuZGVmaW5lZFxuICAgIHRoaXMuYnRtID0gKHRoaXMuYnRtICsgMSkgJiB0aGlzLm1hc2tcbiAgICByZXR1cm4gbGFzdFxuICB9XG5cbiAgcGVlayAoKSB7XG4gICAgcmV0dXJuIHRoaXMuYnVmZmVyW3RoaXMuYnRtXVxuICB9XG5cbiAgaXNFbXB0eSAoKSB7XG4gICAgcmV0dXJuIHRoaXMuYnVmZmVyW3RoaXMuYnRtXSA9PT0gdW5kZWZpbmVkXG4gIH1cbn1cbiIsCiAgICAiY29uc3QgRml4ZWRGSUZPID0gcmVxdWlyZSgnLi9maXhlZC1zaXplJylcblxubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBGYXN0RklGTyB7XG4gIGNvbnN0cnVjdG9yIChod20pIHtcbiAgICB0aGlzLmh3bSA9IGh3bSB8fCAxNlxuICAgIHRoaXMuaGVhZCA9IG5ldyBGaXhlZEZJRk8odGhpcy5od20pXG4gICAgdGhpcy50YWlsID0gdGhpcy5oZWFkXG4gICAgdGhpcy5sZW5ndGggPSAwXG4gIH1cblxuICBjbGVhciAoKSB7XG4gICAgdGhpcy5oZWFkID0gdGhpcy50YWlsXG4gICAgdGhpcy5oZWFkLmNsZWFyKClcbiAgICB0aGlzLmxlbmd0aCA9IDBcbiAgfVxuXG4gIHB1c2ggKHZhbCkge1xuICAgIHRoaXMubGVuZ3RoKytcbiAgICBpZiAoIXRoaXMuaGVhZC5wdXNoKHZhbCkpIHtcbiAgICAgIGNvbnN0IHByZXYgPSB0aGlzLmhlYWRcbiAgICAgIHRoaXMuaGVhZCA9IHByZXYubmV4dCA9IG5ldyBGaXhlZEZJRk8oMiAqIHRoaXMuaGVhZC5idWZmZXIubGVuZ3RoKVxuICAgICAgdGhpcy5oZWFkLnB1c2godmFsKVxuICAgIH1cbiAgfVxuXG4gIHNoaWZ0ICgpIHtcbiAgICBpZiAodGhpcy5sZW5ndGggIT09IDApIHRoaXMubGVuZ3RoLS1cbiAgICBjb25zdCB2YWwgPSB0aGlzLnRhaWwuc2hpZnQoKVxuICAgIGlmICh2YWwgPT09IHVuZGVmaW5lZCAmJiB0aGlzLnRhaWwubmV4dCkge1xuICAgICAgY29uc3QgbmV4dCA9IHRoaXMudGFpbC5uZXh0XG4gICAgICB0aGlzLnRhaWwubmV4dCA9IG51bGxcbiAgICAgIHRoaXMudGFpbCA9IG5leHRcbiAgICAgIHJldHVybiB0aGlzLnRhaWwuc2hpZnQoKVxuICAgIH1cblxuICAgIHJldHVybiB2YWxcbiAgfVxuXG4gIHBlZWsgKCkge1xuICAgIGNvbnN0IHZhbCA9IHRoaXMudGFpbC5wZWVrKClcbiAgICBpZiAodmFsID09PSB1bmRlZmluZWQgJiYgdGhpcy50YWlsLm5leHQpIHJldHVybiB0aGlzLnRhaWwubmV4dC5wZWVrKClcbiAgICByZXR1cm4gdmFsXG4gIH1cblxuICBpc0VtcHR5ICgpIHtcbiAgICByZXR1cm4gdGhpcy5sZW5ndGggPT09IDBcbiAgfVxufVxuIiwKICAgICJtb2R1bGUuZXhwb3J0cyA9IGNsYXNzIFBhc3NUaHJvdWdoRGVjb2RlciB7XG4gIGNvbnN0cnVjdG9yIChlbmNvZGluZykge1xuICAgIHRoaXMuZW5jb2RpbmcgPSBlbmNvZGluZ1xuICB9XG5cbiAgZ2V0IHJlbWFpbmluZyAoKSB7XG4gICAgcmV0dXJuIDBcbiAgfVxuXG4gIGRlY29kZSAodGFpbCkge1xuICAgIHJldHVybiB0YWlsLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcpXG4gIH1cblxuICBmbHVzaCAoKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cbn1cbiIsCiAgICAiLyoqXG4gKiBodHRwczovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy8jdXRmLTgtZGVjb2RlclxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIFVURjhEZWNvZGVyIHtcbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHRoaXMuY29kZVBvaW50ID0gMFxuICAgIHRoaXMuYnl0ZXNTZWVuID0gMFxuICAgIHRoaXMuYnl0ZXNOZWVkZWQgPSAwXG4gICAgdGhpcy5sb3dlckJvdW5kYXJ5ID0gMHg4MFxuICAgIHRoaXMudXBwZXJCb3VuZGFyeSA9IDB4YmZcbiAgfVxuXG4gIGdldCByZW1haW5pbmcgKCkge1xuICAgIHJldHVybiB0aGlzLmJ5dGVzU2VlblxuICB9XG5cbiAgZGVjb2RlIChkYXRhKSB7XG4gICAgLy8gSWYgd2UgaGF2ZSBhIGZhc3QgcGF0aCwganVzdCBzbmlmZiBpZiB0aGUgbGFzdCBwYXJ0IGlzIGEgYm91bmRhcnlcbiAgICBpZiAodGhpcy5ieXRlc05lZWRlZCA9PT0gMCkge1xuICAgICAgbGV0IGlzQm91bmRhcnkgPSB0cnVlXG5cbiAgICAgIGZvciAobGV0IGkgPSBNYXRoLm1heCgwLCBkYXRhLmJ5dGVMZW5ndGggLSA0KSwgbiA9IGRhdGEuYnl0ZUxlbmd0aDsgaSA8IG4gJiYgaXNCb3VuZGFyeTsgaSsrKSB7XG4gICAgICAgIGlzQm91bmRhcnkgPSBkYXRhW2ldIDw9IDB4N2ZcbiAgICAgIH1cblxuICAgICAgaWYgKGlzQm91bmRhcnkpIHJldHVybiBkYXRhLnRvU3RyaW5nKClcbiAgICB9XG5cbiAgICBsZXQgcmVzdWx0ID0gJydcblxuICAgIGZvciAobGV0IGkgPSAwLCBuID0gZGF0YS5ieXRlTGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICBjb25zdCBieXRlID0gZGF0YVtpXVxuXG4gICAgICBpZiAodGhpcy5ieXRlc05lZWRlZCA9PT0gMCkge1xuICAgICAgICBpZiAoYnl0ZSA8PSAweDdmKSB7XG4gICAgICAgICAgcmVzdWx0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnl0ZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmJ5dGVzU2VlbiA9IDFcblxuICAgICAgICAgIGlmIChieXRlID49IDB4YzIgJiYgYnl0ZSA8PSAweGRmKSB7XG4gICAgICAgICAgICB0aGlzLmJ5dGVzTmVlZGVkID0gMlxuICAgICAgICAgICAgdGhpcy5jb2RlUG9pbnQgPSBieXRlICYgMHgxZlxuICAgICAgICAgIH0gZWxzZSBpZiAoYnl0ZSA+PSAweGUwICYmIGJ5dGUgPD0gMHhlZikge1xuICAgICAgICAgICAgaWYgKGJ5dGUgPT09IDB4ZTApIHRoaXMubG93ZXJCb3VuZGFyeSA9IDB4YTBcbiAgICAgICAgICAgIGVsc2UgaWYgKGJ5dGUgPT09IDB4ZWQpIHRoaXMudXBwZXJCb3VuZGFyeSA9IDB4OWZcbiAgICAgICAgICAgIHRoaXMuYnl0ZXNOZWVkZWQgPSAzXG4gICAgICAgICAgICB0aGlzLmNvZGVQb2ludCA9IGJ5dGUgJiAweGZcbiAgICAgICAgICB9IGVsc2UgaWYgKGJ5dGUgPj0gMHhmMCAmJiBieXRlIDw9IDB4ZjQpIHtcbiAgICAgICAgICAgIGlmIChieXRlID09PSAweGYwKSB0aGlzLmxvd2VyQm91bmRhcnkgPSAweDkwXG4gICAgICAgICAgICBpZiAoYnl0ZSA9PT0gMHhmNCkgdGhpcy51cHBlckJvdW5kYXJ5ID0gMHg4ZlxuICAgICAgICAgICAgdGhpcy5ieXRlc05lZWRlZCA9IDRcbiAgICAgICAgICAgIHRoaXMuY29kZVBvaW50ID0gYnl0ZSAmIDB4N1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQgKz0gJ1xcdWZmZmQnXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgaWYgKGJ5dGUgPCB0aGlzLmxvd2VyQm91bmRhcnkgfHwgYnl0ZSA+IHRoaXMudXBwZXJCb3VuZGFyeSkge1xuICAgICAgICB0aGlzLmNvZGVQb2ludCA9IDBcbiAgICAgICAgdGhpcy5ieXRlc05lZWRlZCA9IDBcbiAgICAgICAgdGhpcy5ieXRlc1NlZW4gPSAwXG4gICAgICAgIHRoaXMubG93ZXJCb3VuZGFyeSA9IDB4ODBcbiAgICAgICAgdGhpcy51cHBlckJvdW5kYXJ5ID0gMHhiZlxuXG4gICAgICAgIHJlc3VsdCArPSAnXFx1ZmZmZCdcblxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICB0aGlzLmxvd2VyQm91bmRhcnkgPSAweDgwXG4gICAgICB0aGlzLnVwcGVyQm91bmRhcnkgPSAweGJmXG5cbiAgICAgIHRoaXMuY29kZVBvaW50ID0gKHRoaXMuY29kZVBvaW50IDw8IDYpIHwgKGJ5dGUgJiAweDNmKVxuICAgICAgdGhpcy5ieXRlc1NlZW4rK1xuXG4gICAgICBpZiAodGhpcy5ieXRlc1NlZW4gIT09IHRoaXMuYnl0ZXNOZWVkZWQpIGNvbnRpbnVlXG5cbiAgICAgIHJlc3VsdCArPSBTdHJpbmcuZnJvbUNvZGVQb2ludCh0aGlzLmNvZGVQb2ludClcblxuICAgICAgdGhpcy5jb2RlUG9pbnQgPSAwXG4gICAgICB0aGlzLmJ5dGVzTmVlZGVkID0gMFxuICAgICAgdGhpcy5ieXRlc1NlZW4gPSAwXG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgZmx1c2ggKCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuYnl0ZXNOZWVkZWQgPiAwID8gJ1xcdWZmZmQnIDogJydcblxuICAgIHRoaXMuY29kZVBvaW50ID0gMFxuICAgIHRoaXMuYnl0ZXNOZWVkZWQgPSAwXG4gICAgdGhpcy5ieXRlc1NlZW4gPSAwXG4gICAgdGhpcy5sb3dlckJvdW5kYXJ5ID0gMHg4MFxuICAgIHRoaXMudXBwZXJCb3VuZGFyeSA9IDB4YmZcblxuICAgIHJldHVybiByZXN1bHRcbiAgfVxufVxuIiwKICAgICJjb25zdCBQYXNzVGhyb3VnaERlY29kZXIgPSByZXF1aXJlKCcuL2xpYi9wYXNzLXRocm91Z2gtZGVjb2RlcicpXG5jb25zdCBVVEY4RGVjb2RlciA9IHJlcXVpcmUoJy4vbGliL3V0ZjgtZGVjb2RlcicpXG5cbm1vZHVsZS5leHBvcnRzID0gY2xhc3MgVGV4dERlY29kZXIge1xuICBjb25zdHJ1Y3RvciAoZW5jb2RpbmcgPSAndXRmOCcpIHtcbiAgICB0aGlzLmVuY29kaW5nID0gbm9ybWFsaXplRW5jb2RpbmcoZW5jb2RpbmcpXG5cbiAgICBzd2l0Y2ggKHRoaXMuZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgICB0aGlzLmRlY29kZXIgPSBuZXcgVVRGOERlY29kZXIoKVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGVuY29kaW5nOiAnICsgdGhpcy5lbmNvZGluZylcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMuZGVjb2RlciA9IG5ldyBQYXNzVGhyb3VnaERlY29kZXIodGhpcy5lbmNvZGluZylcbiAgICB9XG4gIH1cblxuICBnZXQgcmVtYWluaW5nICgpIHtcbiAgICByZXR1cm4gdGhpcy5kZWNvZGVyLnJlbWFpbmluZ1xuICB9XG5cbiAgcHVzaCAoZGF0YSkge1xuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHJldHVybiBkYXRhXG4gICAgcmV0dXJuIHRoaXMuZGVjb2Rlci5kZWNvZGUoZGF0YSlcbiAgfVxuXG4gIC8vIEZvciBOb2RlLmpzIGNvbXBhdGliaWxpdHlcbiAgd3JpdGUgKGRhdGEpIHtcbiAgICByZXR1cm4gdGhpcy5wdXNoKGRhdGEpXG4gIH1cblxuICBlbmQgKGRhdGEpIHtcbiAgICBsZXQgcmVzdWx0ID0gJydcbiAgICBpZiAoZGF0YSkgcmVzdWx0ID0gdGhpcy5wdXNoKGRhdGEpXG4gICAgcmVzdWx0ICs9IHRoaXMuZGVjb2Rlci5mbHVzaCgpXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUVuY29kaW5nIChlbmNvZGluZykge1xuICBlbmNvZGluZyA9IGVuY29kaW5nLnRvTG93ZXJDYXNlKClcblxuICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgY2FzZSAndXRmOCc6XG4gICAgY2FzZSAndXRmLTgnOlxuICAgICAgcmV0dXJuICd1dGY4J1xuICAgIGNhc2UgJ3VjczInOlxuICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICBjYXNlICd1dGYxNmxlJzpcbiAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICByZXR1cm4gJ3V0ZjE2bGUnXG4gICAgY2FzZSAnbGF0aW4xJzpcbiAgICBjYXNlICdiaW5hcnknOlxuICAgICAgcmV0dXJuICdsYXRpbjEnXG4gICAgY2FzZSAnYmFzZTY0JzpcbiAgICBjYXNlICdhc2NpaSc6XG4gICAgY2FzZSAnaGV4JzpcbiAgICAgIHJldHVybiBlbmNvZGluZ1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgfVxufTtcbiIsCiAgICAiY29uc3QgeyBFdmVudEVtaXR0ZXIgfSA9IHJlcXVpcmUoJ2V2ZW50cycpXG5jb25zdCBTVFJFQU1fREVTVFJPWUVEID0gbmV3IEVycm9yKCdTdHJlYW0gd2FzIGRlc3Ryb3llZCcpXG5jb25zdCBQUkVNQVRVUkVfQ0xPU0UgPSBuZXcgRXJyb3IoJ1ByZW1hdHVyZSBjbG9zZScpXG5cbmNvbnN0IHF1ZXVlVGljayA9IHJlcXVpcmUoJ3F1ZXVlLXRpY2snKVxuY29uc3QgRklGTyA9IHJlcXVpcmUoJ2Zhc3QtZmlmbycpXG5jb25zdCBUZXh0RGVjb2RlciA9IHJlcXVpcmUoJ3RleHQtZGVjb2RlcicpXG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLW11bHRpLXNwYWNlcyAqL1xuXG4vLyAyOSBiaXRzIHVzZWQgdG90YWwgKDQgZnJvbSBzaGFyZWQsIDE0IGZyb20gcmVhZCwgYW5kIDExIGZyb20gd3JpdGUpXG5jb25zdCBNQVggPSAoKDEgPDwgMjkpIC0gMSlcblxuLy8gU2hhcmVkIHN0YXRlXG5jb25zdCBPUEVOSU5HICAgICAgID0gMGIwMDAxXG5jb25zdCBQUkVERVNUUk9ZSU5HID0gMGIwMDEwXG5jb25zdCBERVNUUk9ZSU5HICAgID0gMGIwMTAwXG5jb25zdCBERVNUUk9ZRUQgICAgID0gMGIxMDAwXG5cbmNvbnN0IE5PVF9PUEVOSU5HID0gTUFYIF4gT1BFTklOR1xuY29uc3QgTk9UX1BSRURFU1RST1lJTkcgPSBNQVggXiBQUkVERVNUUk9ZSU5HXG5cbi8vIFJlYWQgc3RhdGUgKDQgYml0IG9mZnNldCBmcm9tIHNoYXJlZCBzdGF0ZSlcbmNvbnN0IFJFQURfQUNUSVZFICAgICAgICAgICA9IDBiMDAwMDAwMDAwMDAwMDEgPDwgNFxuY29uc3QgUkVBRF9VUERBVElORyAgICAgICAgID0gMGIwMDAwMDAwMDAwMDAxMCA8PCA0XG5jb25zdCBSRUFEX1BSSU1BUlkgICAgICAgICAgPSAwYjAwMDAwMDAwMDAwMTAwIDw8IDRcbmNvbnN0IFJFQURfUVVFVUVEICAgICAgICAgICA9IDBiMDAwMDAwMDAwMDEwMDAgPDwgNFxuY29uc3QgUkVBRF9SRVNVTUVEICAgICAgICAgID0gMGIwMDAwMDAwMDAxMDAwMCA8PCA0XG5jb25zdCBSRUFEX1BJUEVfRFJBSU5FRCAgICAgPSAwYjAwMDAwMDAwMTAwMDAwIDw8IDRcbmNvbnN0IFJFQURfRU5ESU5HICAgICAgICAgICA9IDBiMDAwMDAwMDEwMDAwMDAgPDwgNFxuY29uc3QgUkVBRF9FTUlUX0RBVEEgICAgICAgID0gMGIwMDAwMDAxMDAwMDAwMCA8PCA0XG5jb25zdCBSRUFEX0VNSVRfUkVBREFCTEUgICAgPSAwYjAwMDAwMTAwMDAwMDAwIDw8IDRcbmNvbnN0IFJFQURfRU1JVFRFRF9SRUFEQUJMRSA9IDBiMDAwMDEwMDAwMDAwMDAgPDwgNFxuY29uc3QgUkVBRF9ET05FICAgICAgICAgICAgID0gMGIwMDAxMDAwMDAwMDAwMCA8PCA0XG5jb25zdCBSRUFEX05FWFRfVElDSyAgICAgICAgPSAwYjAwMTAwMDAwMDAwMDAwIDw8IDRcbmNvbnN0IFJFQURfTkVFRFNfUFVTSCAgICAgICA9IDBiMDEwMDAwMDAwMDAwMDAgPDwgNFxuY29uc3QgUkVBRF9SRUFEX0FIRUFEICAgICAgID0gMGIxMDAwMDAwMDAwMDAwMCA8PCA0XG5cbi8vIENvbWJpbmVkIHJlYWQgc3RhdGVcbmNvbnN0IFJFQURfRkxPV0lORyA9IFJFQURfUkVTVU1FRCB8IFJFQURfUElQRV9EUkFJTkVEXG5jb25zdCBSRUFEX0FDVElWRV9BTkRfTkVFRFNfUFVTSCA9IFJFQURfQUNUSVZFIHwgUkVBRF9ORUVEU19QVVNIXG5jb25zdCBSRUFEX1BSSU1BUllfQU5EX0FDVElWRSA9IFJFQURfUFJJTUFSWSB8IFJFQURfQUNUSVZFXG5jb25zdCBSRUFEX0VNSVRfUkVBREFCTEVfQU5EX1FVRVVFRCA9IFJFQURfRU1JVF9SRUFEQUJMRSB8IFJFQURfUVVFVUVEXG5jb25zdCBSRUFEX1JFU1VNRURfUkVBRF9BSEVBRCA9IFJFQURfUkVTVU1FRCB8IFJFQURfUkVBRF9BSEVBRFxuXG5jb25zdCBSRUFEX05PVF9BQ1RJVkUgICAgICAgICAgICAgPSBNQVggXiBSRUFEX0FDVElWRVxuY29uc3QgUkVBRF9OT05fUFJJTUFSWSAgICAgICAgICAgID0gTUFYIF4gUkVBRF9QUklNQVJZXG5jb25zdCBSRUFEX05PTl9QUklNQVJZX0FORF9QVVNIRUQgPSBNQVggXiAoUkVBRF9QUklNQVJZIHwgUkVBRF9ORUVEU19QVVNIKVxuY29uc3QgUkVBRF9QVVNIRUQgICAgICAgICAgICAgICAgID0gTUFYIF4gUkVBRF9ORUVEU19QVVNIXG5jb25zdCBSRUFEX1BBVVNFRCAgICAgICAgICAgICAgICAgPSBNQVggXiBSRUFEX1JFU1VNRURcbmNvbnN0IFJFQURfTk9UX1FVRVVFRCAgICAgICAgICAgICA9IE1BWCBeIChSRUFEX1FVRVVFRCB8IFJFQURfRU1JVFRFRF9SRUFEQUJMRSlcbmNvbnN0IFJFQURfTk9UX0VORElORyAgICAgICAgICAgICA9IE1BWCBeIFJFQURfRU5ESU5HXG5jb25zdCBSRUFEX1BJUEVfTk9UX0RSQUlORUQgICAgICAgPSBNQVggXiBSRUFEX0ZMT1dJTkdcbmNvbnN0IFJFQURfTk9UX05FWFRfVElDSyAgICAgICAgICA9IE1BWCBeIFJFQURfTkVYVF9USUNLXG5jb25zdCBSRUFEX05PVF9VUERBVElORyAgICAgICAgICAgPSBNQVggXiBSRUFEX1VQREFUSU5HXG5jb25zdCBSRUFEX05PX1JFQURfQUhFQUQgICAgICAgICAgPSBNQVggXiBSRUFEX1JFQURfQUhFQURcbmNvbnN0IFJFQURfUEFVU0VEX05PX1JFQURfQUhFQUQgICA9IE1BWCBeIFJFQURfUkVTVU1FRF9SRUFEX0FIRUFEXG5cbi8vIFdyaXRlIHN0YXRlICgxOCBiaXQgb2Zmc2V0LCA0IGJpdCBvZmZzZXQgZnJvbSBzaGFyZWQgc3RhdGUgYW5kIDE0IGZyb20gcmVhZCBzdGF0ZSlcbmNvbnN0IFdSSVRFX0FDVElWRSAgICAgPSAwYjAwMDAwMDAwMDAxIDw8IDE4XG5jb25zdCBXUklURV9VUERBVElORyAgID0gMGIwMDAwMDAwMDAxMCA8PCAxOFxuY29uc3QgV1JJVEVfUFJJTUFSWSAgICA9IDBiMDAwMDAwMDAxMDAgPDwgMThcbmNvbnN0IFdSSVRFX1FVRVVFRCAgICAgPSAwYjAwMDAwMDAxMDAwIDw8IDE4XG5jb25zdCBXUklURV9VTkRSQUlORUQgID0gMGIwMDAwMDAxMDAwMCA8PCAxOFxuY29uc3QgV1JJVEVfRE9ORSAgICAgICA9IDBiMDAwMDAxMDAwMDAgPDwgMThcbmNvbnN0IFdSSVRFX0VNSVRfRFJBSU4gPSAwYjAwMDAxMDAwMDAwIDw8IDE4XG5jb25zdCBXUklURV9ORVhUX1RJQ0sgID0gMGIwMDAxMDAwMDAwMCA8PCAxOFxuY29uc3QgV1JJVEVfV1JJVElORyAgICA9IDBiMDAxMDAwMDAwMDAgPDwgMThcbmNvbnN0IFdSSVRFX0ZJTklTSElORyAgPSAwYjAxMDAwMDAwMDAwIDw8IDE4XG5jb25zdCBXUklURV9DT1JLRUQgICAgID0gMGIxMDAwMDAwMDAwMCA8PCAxOFxuXG5jb25zdCBXUklURV9OT1RfQUNUSVZFICAgID0gTUFYIF4gKFdSSVRFX0FDVElWRSB8IFdSSVRFX1dSSVRJTkcpXG5jb25zdCBXUklURV9OT05fUFJJTUFSWSAgID0gTUFYIF4gV1JJVEVfUFJJTUFSWVxuY29uc3QgV1JJVEVfTk9UX0ZJTklTSElORyA9IE1BWCBeIFdSSVRFX0ZJTklTSElOR1xuY29uc3QgV1JJVEVfRFJBSU5FRCAgICAgICA9IE1BWCBeIFdSSVRFX1VORFJBSU5FRFxuY29uc3QgV1JJVEVfTk9UX1FVRVVFRCAgICA9IE1BWCBeIFdSSVRFX1FVRVVFRFxuY29uc3QgV1JJVEVfTk9UX05FWFRfVElDSyA9IE1BWCBeIFdSSVRFX05FWFRfVElDS1xuY29uc3QgV1JJVEVfTk9UX1VQREFUSU5HICA9IE1BWCBeIFdSSVRFX1VQREFUSU5HXG5jb25zdCBXUklURV9OT1RfQ09SS0VEICAgID0gTUFYIF4gV1JJVEVfQ09SS0VEXG5cbi8vIENvbWJpbmVkIHNoYXJlZCBzdGF0ZVxuY29uc3QgQUNUSVZFID0gUkVBRF9BQ1RJVkUgfCBXUklURV9BQ1RJVkVcbmNvbnN0IE5PVF9BQ1RJVkUgPSBNQVggXiBBQ1RJVkVcbmNvbnN0IERPTkUgPSBSRUFEX0RPTkUgfCBXUklURV9ET05FXG5jb25zdCBERVNUUk9ZX1NUQVRVUyA9IERFU1RST1lJTkcgfCBERVNUUk9ZRUQgfCBQUkVERVNUUk9ZSU5HXG5jb25zdCBPUEVOX1NUQVRVUyA9IERFU1RST1lfU1RBVFVTIHwgT1BFTklOR1xuY29uc3QgQVVUT19ERVNUUk9ZID0gREVTVFJPWV9TVEFUVVMgfCBET05FXG5jb25zdCBOT05fUFJJTUFSWSA9IFdSSVRFX05PTl9QUklNQVJZICYgUkVBRF9OT05fUFJJTUFSWVxuY29uc3QgQUNUSVZFX09SX1RJQ0tJTkcgPSBXUklURV9ORVhUX1RJQ0sgfCBSRUFEX05FWFRfVElDS1xuY29uc3QgVElDS0lORyA9IEFDVElWRV9PUl9USUNLSU5HICYgTk9UX0FDVElWRVxuY29uc3QgSVNfT1BFTklORyA9IE9QRU5fU1RBVFVTIHwgVElDS0lOR1xuXG4vLyBDb21iaW5lZCBzaGFyZWQgc3RhdGUgYW5kIHJlYWQgc3RhdGVcbmNvbnN0IFJFQURfUFJJTUFSWV9TVEFUVVMgPSBPUEVOX1NUQVRVUyB8IFJFQURfRU5ESU5HIHwgUkVBRF9ET05FXG5jb25zdCBSRUFEX1NUQVRVUyA9IE9QRU5fU1RBVFVTIHwgUkVBRF9ET05FIHwgUkVBRF9RVUVVRURcbmNvbnN0IFJFQURfRU5ESU5HX1NUQVRVUyA9IE9QRU5fU1RBVFVTIHwgUkVBRF9FTkRJTkcgfCBSRUFEX1FVRVVFRFxuY29uc3QgUkVBRF9SRUFEQUJMRV9TVEFUVVMgPSBPUEVOX1NUQVRVUyB8IFJFQURfRU1JVF9SRUFEQUJMRSB8IFJFQURfUVVFVUVEIHwgUkVBRF9FTUlUVEVEX1JFQURBQkxFXG5jb25zdCBTSE9VTERfTk9UX1JFQUQgPSBPUEVOX1NUQVRVUyB8IFJFQURfQUNUSVZFIHwgUkVBRF9FTkRJTkcgfCBSRUFEX0RPTkUgfCBSRUFEX05FRURTX1BVU0ggfCBSRUFEX1JFQURfQUhFQURcbmNvbnN0IFJFQURfQkFDS1BSRVNTVVJFX1NUQVRVUyA9IERFU1RST1lfU1RBVFVTIHwgUkVBRF9FTkRJTkcgfCBSRUFEX0RPTkVcbmNvbnN0IFJFQURfVVBEQVRFX1NZTkNfU1RBVFVTID0gUkVBRF9VUERBVElORyB8IE9QRU5fU1RBVFVTIHwgUkVBRF9ORVhUX1RJQ0sgfCBSRUFEX1BSSU1BUllcblxuLy8gQ29tYmluZWQgd3JpdGUgc3RhdGVcbmNvbnN0IFdSSVRFX1BSSU1BUllfU1RBVFVTID0gT1BFTl9TVEFUVVMgfCBXUklURV9GSU5JU0hJTkcgfCBXUklURV9ET05FXG5jb25zdCBXUklURV9RVUVVRURfQU5EX1VORFJBSU5FRCA9IFdSSVRFX1FVRVVFRCB8IFdSSVRFX1VORFJBSU5FRFxuY29uc3QgV1JJVEVfUVVFVUVEX0FORF9BQ1RJVkUgPSBXUklURV9RVUVVRUQgfCBXUklURV9BQ1RJVkVcbmNvbnN0IFdSSVRFX0RSQUlOX1NUQVRVUyA9IFdSSVRFX1FVRVVFRCB8IFdSSVRFX1VORFJBSU5FRCB8IE9QRU5fU1RBVFVTIHwgV1JJVEVfQUNUSVZFXG5jb25zdCBXUklURV9TVEFUVVMgPSBPUEVOX1NUQVRVUyB8IFdSSVRFX0FDVElWRSB8IFdSSVRFX1FVRVVFRCB8IFdSSVRFX0NPUktFRFxuY29uc3QgV1JJVEVfUFJJTUFSWV9BTkRfQUNUSVZFID0gV1JJVEVfUFJJTUFSWSB8IFdSSVRFX0FDVElWRVxuY29uc3QgV1JJVEVfQUNUSVZFX0FORF9XUklUSU5HID0gV1JJVEVfQUNUSVZFIHwgV1JJVEVfV1JJVElOR1xuY29uc3QgV1JJVEVfRklOSVNISU5HX1NUQVRVUyA9IE9QRU5fU1RBVFVTIHwgV1JJVEVfRklOSVNISU5HIHwgV1JJVEVfUVVFVUVEX0FORF9BQ1RJVkUgfCBXUklURV9ET05FXG5jb25zdCBXUklURV9CQUNLUFJFU1NVUkVfU1RBVFVTID0gV1JJVEVfVU5EUkFJTkVEIHwgREVTVFJPWV9TVEFUVVMgfCBXUklURV9GSU5JU0hJTkcgfCBXUklURV9ET05FXG5jb25zdCBXUklURV9VUERBVEVfU1lOQ19TVEFUVVMgPSBXUklURV9VUERBVElORyB8IE9QRU5fU1RBVFVTIHwgV1JJVEVfTkVYVF9USUNLIHwgV1JJVEVfUFJJTUFSWVxuXG5jb25zdCBhc3luY0l0ZXJhdG9yID0gU3ltYm9sLmFzeW5jSXRlcmF0b3IgfHwgU3ltYm9sKCdhc3luY0l0ZXJhdG9yJylcblxuY2xhc3MgV3JpdGFibGVTdGF0ZSB7XG4gIGNvbnN0cnVjdG9yIChzdHJlYW0sIHsgaGlnaFdhdGVyTWFyayA9IDE2Mzg0LCBtYXAgPSBudWxsLCBtYXBXcml0YWJsZSwgYnl0ZUxlbmd0aCwgYnl0ZUxlbmd0aFdyaXRhYmxlIH0gPSB7fSkge1xuICAgIHRoaXMuc3RyZWFtID0gc3RyZWFtXG4gICAgdGhpcy5xdWV1ZSA9IG5ldyBGSUZPKClcbiAgICB0aGlzLmhpZ2hXYXRlck1hcmsgPSBoaWdoV2F0ZXJNYXJrXG4gICAgdGhpcy5idWZmZXJlZCA9IDBcbiAgICB0aGlzLmVycm9yID0gbnVsbFxuICAgIHRoaXMucGlwZWxpbmUgPSBudWxsXG4gICAgdGhpcy5kcmFpbnMgPSBudWxsIC8vIGlmIHdlIGFkZCBtb3JlIHNlbGRvbWx5IHVzZWQgaGVscGVycyB3ZSBtaWdodCB0aGVtIGludG8gYSBzdWJvYmplY3Qgc28gaXRzIGEgc2luZ2xlIHB0clxuICAgIHRoaXMuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGhXcml0YWJsZSB8fCBieXRlTGVuZ3RoIHx8IGRlZmF1bHRCeXRlTGVuZ3RoXG4gICAgdGhpcy5tYXAgPSBtYXBXcml0YWJsZSB8fCBtYXBcbiAgICB0aGlzLmFmdGVyV3JpdGUgPSBhZnRlcldyaXRlLmJpbmQodGhpcylcbiAgICB0aGlzLmFmdGVyVXBkYXRlTmV4dFRpY2sgPSB1cGRhdGVXcml0ZU5ULmJpbmQodGhpcylcbiAgfVxuXG4gIGdldCBlbmRlZCAoKSB7XG4gICAgcmV0dXJuICh0aGlzLnN0cmVhbS5fZHVwbGV4U3RhdGUgJiBXUklURV9ET05FKSAhPT0gMFxuICB9XG5cbiAgcHVzaCAoZGF0YSkge1xuICAgIGlmICh0aGlzLm1hcCAhPT0gbnVsbCkgZGF0YSA9IHRoaXMubWFwKGRhdGEpXG5cbiAgICB0aGlzLmJ1ZmZlcmVkICs9IHRoaXMuYnl0ZUxlbmd0aChkYXRhKVxuICAgIHRoaXMucXVldWUucHVzaChkYXRhKVxuXG4gICAgaWYgKHRoaXMuYnVmZmVyZWQgPCB0aGlzLmhpZ2hXYXRlck1hcmspIHtcbiAgICAgIHRoaXMuc3RyZWFtLl9kdXBsZXhTdGF0ZSB8PSBXUklURV9RVUVVRURcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgdGhpcy5zdHJlYW0uX2R1cGxleFN0YXRlIHw9IFdSSVRFX1FVRVVFRF9BTkRfVU5EUkFJTkVEXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBzaGlmdCAoKSB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMucXVldWUuc2hpZnQoKVxuXG4gICAgdGhpcy5idWZmZXJlZCAtPSB0aGlzLmJ5dGVMZW5ndGgoZGF0YSlcbiAgICBpZiAodGhpcy5idWZmZXJlZCA9PT0gMCkgdGhpcy5zdHJlYW0uX2R1cGxleFN0YXRlICY9IFdSSVRFX05PVF9RVUVVRURcblxuICAgIHJldHVybiBkYXRhXG4gIH1cblxuICBlbmQgKGRhdGEpIHtcbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdmdW5jdGlvbicpIHRoaXMuc3RyZWFtLm9uY2UoJ2ZpbmlzaCcsIGRhdGEpXG4gICAgZWxzZSBpZiAoZGF0YSAhPT0gdW5kZWZpbmVkICYmIGRhdGEgIT09IG51bGwpIHRoaXMucHVzaChkYXRhKVxuICAgIHRoaXMuc3RyZWFtLl9kdXBsZXhTdGF0ZSA9ICh0aGlzLnN0cmVhbS5fZHVwbGV4U3RhdGUgfCBXUklURV9GSU5JU0hJTkcpICYgV1JJVEVfTk9OX1BSSU1BUllcbiAgfVxuXG4gIGF1dG9CYXRjaCAoZGF0YSwgY2IpIHtcbiAgICBjb25zdCBidWZmZXIgPSBbXVxuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuc3RyZWFtXG5cbiAgICBidWZmZXIucHVzaChkYXRhKVxuICAgIHdoaWxlICgoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFdSSVRFX1NUQVRVUykgPT09IFdSSVRFX1FVRVVFRF9BTkRfQUNUSVZFKSB7XG4gICAgICBidWZmZXIucHVzaChzdHJlYW0uX3dyaXRhYmxlU3RhdGUuc2hpZnQoKSlcbiAgICB9XG5cbiAgICBpZiAoKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBPUEVOX1NUQVRVUykgIT09IDApIHJldHVybiBjYihudWxsKVxuICAgIHN0cmVhbS5fd3JpdGV2KGJ1ZmZlciwgY2IpXG4gIH1cblxuICB1cGRhdGUgKCkge1xuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuc3RyZWFtXG5cbiAgICBzdHJlYW0uX2R1cGxleFN0YXRlIHw9IFdSSVRFX1VQREFUSU5HXG5cbiAgICBkbyB7XG4gICAgICB3aGlsZSAoKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBXUklURV9TVEFUVVMpID09PSBXUklURV9RVUVVRUQpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuc2hpZnQoKVxuICAgICAgICBzdHJlYW0uX2R1cGxleFN0YXRlIHw9IFdSSVRFX0FDVElWRV9BTkRfV1JJVElOR1xuICAgICAgICBzdHJlYW0uX3dyaXRlKGRhdGEsIHRoaXMuYWZ0ZXJXcml0ZSlcbiAgICAgIH1cblxuICAgICAgaWYgKChzdHJlYW0uX2R1cGxleFN0YXRlICYgV1JJVEVfUFJJTUFSWV9BTkRfQUNUSVZFKSA9PT0gMCkgdGhpcy51cGRhdGVOb25QcmltYXJ5KClcbiAgICB9IHdoaWxlICh0aGlzLmNvbnRpbnVlVXBkYXRlKCkgPT09IHRydWUpXG5cbiAgICBzdHJlYW0uX2R1cGxleFN0YXRlICY9IFdSSVRFX05PVF9VUERBVElOR1xuICB9XG5cbiAgdXBkYXRlTm9uUHJpbWFyeSAoKSB7XG4gICAgY29uc3Qgc3RyZWFtID0gdGhpcy5zdHJlYW1cblxuICAgIGlmICgoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFdSSVRFX0ZJTklTSElOR19TVEFUVVMpID09PSBXUklURV9GSU5JU0hJTkcpIHtcbiAgICAgIHN0cmVhbS5fZHVwbGV4U3RhdGUgPSAoc3RyZWFtLl9kdXBsZXhTdGF0ZSB8IFdSSVRFX0FDVElWRSkgJiBXUklURV9OT1RfRklOSVNISU5HXG4gICAgICBzdHJlYW0uX2ZpbmFsKGFmdGVyRmluYWwuYmluZCh0aGlzKSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICgoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIERFU1RST1lfU1RBVFVTKSA9PT0gREVTVFJPWUlORykge1xuICAgICAgaWYgKChzdHJlYW0uX2R1cGxleFN0YXRlICYgQUNUSVZFX09SX1RJQ0tJTkcpID09PSAwKSB7XG4gICAgICAgIHN0cmVhbS5fZHVwbGV4U3RhdGUgfD0gQUNUSVZFXG4gICAgICAgIHN0cmVhbS5fZGVzdHJveShhZnRlckRlc3Ryb3kuYmluZCh0aGlzKSlcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICgoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIElTX09QRU5JTkcpID09PSBPUEVOSU5HKSB7XG4gICAgICBzdHJlYW0uX2R1cGxleFN0YXRlID0gKHN0cmVhbS5fZHVwbGV4U3RhdGUgfCBBQ1RJVkUpICYgTk9UX09QRU5JTkdcbiAgICAgIHN0cmVhbS5fb3BlbihhZnRlck9wZW4uYmluZCh0aGlzKSlcbiAgICB9XG4gIH1cblxuICBjb250aW51ZVVwZGF0ZSAoKSB7XG4gICAgaWYgKCh0aGlzLnN0cmVhbS5fZHVwbGV4U3RhdGUgJiBXUklURV9ORVhUX1RJQ0spID09PSAwKSByZXR1cm4gZmFsc2VcbiAgICB0aGlzLnN0cmVhbS5fZHVwbGV4U3RhdGUgJj0gV1JJVEVfTk9UX05FWFRfVElDS1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICB1cGRhdGVDYWxsYmFjayAoKSB7XG4gICAgaWYgKCh0aGlzLnN0cmVhbS5fZHVwbGV4U3RhdGUgJiBXUklURV9VUERBVEVfU1lOQ19TVEFUVVMpID09PSBXUklURV9QUklNQVJZKSB0aGlzLnVwZGF0ZSgpXG4gICAgZWxzZSB0aGlzLnVwZGF0ZU5leHRUaWNrKClcbiAgfVxuXG4gIHVwZGF0ZU5leHRUaWNrICgpIHtcbiAgICBpZiAoKHRoaXMuc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFdSSVRFX05FWFRfVElDSykgIT09IDApIHJldHVyblxuICAgIHRoaXMuc3RyZWFtLl9kdXBsZXhTdGF0ZSB8PSBXUklURV9ORVhUX1RJQ0tcbiAgICBpZiAoKHRoaXMuc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFdSSVRFX1VQREFUSU5HKSA9PT0gMCkgcXVldWVUaWNrKHRoaXMuYWZ0ZXJVcGRhdGVOZXh0VGljaylcbiAgfVxufVxuXG5jbGFzcyBSZWFkYWJsZVN0YXRlIHtcbiAgY29uc3RydWN0b3IgKHN0cmVhbSwgeyBoaWdoV2F0ZXJNYXJrID0gMTYzODQsIG1hcCA9IG51bGwsIG1hcFJlYWRhYmxlLCBieXRlTGVuZ3RoLCBieXRlTGVuZ3RoUmVhZGFibGUgfSA9IHt9KSB7XG4gICAgdGhpcy5zdHJlYW0gPSBzdHJlYW1cbiAgICB0aGlzLnF1ZXVlID0gbmV3IEZJRk8oKVxuICAgIHRoaXMuaGlnaFdhdGVyTWFyayA9IGhpZ2hXYXRlck1hcmsgPT09IDAgPyAxIDogaGlnaFdhdGVyTWFya1xuICAgIHRoaXMuYnVmZmVyZWQgPSAwXG4gICAgdGhpcy5yZWFkQWhlYWQgPSBoaWdoV2F0ZXJNYXJrID4gMFxuICAgIHRoaXMuZXJyb3IgPSBudWxsXG4gICAgdGhpcy5waXBlbGluZSA9IG51bGxcbiAgICB0aGlzLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoUmVhZGFibGUgfHwgYnl0ZUxlbmd0aCB8fCBkZWZhdWx0Qnl0ZUxlbmd0aFxuICAgIHRoaXMubWFwID0gbWFwUmVhZGFibGUgfHwgbWFwXG4gICAgdGhpcy5waXBlVG8gPSBudWxsXG4gICAgdGhpcy5hZnRlclJlYWQgPSBhZnRlclJlYWQuYmluZCh0aGlzKVxuICAgIHRoaXMuYWZ0ZXJVcGRhdGVOZXh0VGljayA9IHVwZGF0ZVJlYWROVC5iaW5kKHRoaXMpXG4gIH1cblxuICBnZXQgZW5kZWQgKCkge1xuICAgIHJldHVybiAodGhpcy5zdHJlYW0uX2R1cGxleFN0YXRlICYgUkVBRF9ET05FKSAhPT0gMFxuICB9XG5cbiAgcGlwZSAocGlwZVRvLCBjYikge1xuICAgIGlmICh0aGlzLnBpcGVUbyAhPT0gbnVsbCkgdGhyb3cgbmV3IEVycm9yKCdDYW4gb25seSBwaXBlIHRvIG9uZSBkZXN0aW5hdGlvbicpXG4gICAgaWYgKHR5cGVvZiBjYiAhPT0gJ2Z1bmN0aW9uJykgY2IgPSBudWxsXG5cbiAgICB0aGlzLnN0cmVhbS5fZHVwbGV4U3RhdGUgfD0gUkVBRF9QSVBFX0RSQUlORURcbiAgICB0aGlzLnBpcGVUbyA9IHBpcGVUb1xuICAgIHRoaXMucGlwZWxpbmUgPSBuZXcgUGlwZWxpbmUodGhpcy5zdHJlYW0sIHBpcGVUbywgY2IpXG5cbiAgICBpZiAoY2IpIHRoaXMuc3RyZWFtLm9uKCdlcnJvcicsIG5vb3ApIC8vIFdlIGFscmVhZHkgZXJyb3IgaGFuZGxlIHRoaXMgc28gc3VwcmVzcyBjcmFzaGVzXG5cbiAgICBpZiAoaXNTdHJlYW14KHBpcGVUbykpIHtcbiAgICAgIHBpcGVUby5fd3JpdGFibGVTdGF0ZS5waXBlbGluZSA9IHRoaXMucGlwZWxpbmVcbiAgICAgIGlmIChjYikgcGlwZVRvLm9uKCdlcnJvcicsIG5vb3ApIC8vIFdlIGFscmVhZHkgZXJyb3IgaGFuZGxlIHRoaXMgc28gc3VwcmVzcyBjcmFzaGVzXG4gICAgICBwaXBlVG8ub24oJ2ZpbmlzaCcsIHRoaXMucGlwZWxpbmUuZmluaXNoZWQuYmluZCh0aGlzLnBpcGVsaW5lKSkgLy8gVE9ETzoganVzdCBjYWxsIGZpbmlzaGVkIGZyb20gcGlwZVRvIGl0c2VsZlxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBvbmVycm9yID0gdGhpcy5waXBlbGluZS5kb25lLmJpbmQodGhpcy5waXBlbGluZSwgcGlwZVRvKVxuICAgICAgY29uc3Qgb25jbG9zZSA9IHRoaXMucGlwZWxpbmUuZG9uZS5iaW5kKHRoaXMucGlwZWxpbmUsIHBpcGVUbywgbnVsbCkgLy8gb25jbG9zZSBoYXMgYSB3ZWlyZCBib29sIGFyZ1xuICAgICAgcGlwZVRvLm9uKCdlcnJvcicsIG9uZXJyb3IpXG4gICAgICBwaXBlVG8ub24oJ2Nsb3NlJywgb25jbG9zZSlcbiAgICAgIHBpcGVUby5vbignZmluaXNoJywgdGhpcy5waXBlbGluZS5maW5pc2hlZC5iaW5kKHRoaXMucGlwZWxpbmUpKVxuICAgIH1cblxuICAgIHBpcGVUby5vbignZHJhaW4nLCBhZnRlckRyYWluLmJpbmQodGhpcykpXG4gICAgdGhpcy5zdHJlYW0uZW1pdCgncGlwaW5nJywgcGlwZVRvKVxuICAgIHBpcGVUby5lbWl0KCdwaXBlJywgdGhpcy5zdHJlYW0pXG4gIH1cblxuICBwdXNoIChkYXRhKSB7XG4gICAgY29uc3Qgc3RyZWFtID0gdGhpcy5zdHJlYW1cblxuICAgIGlmIChkYXRhID09PSBudWxsKSB7XG4gICAgICB0aGlzLmhpZ2hXYXRlck1hcmsgPSAwXG4gICAgICBzdHJlYW0uX2R1cGxleFN0YXRlID0gKHN0cmVhbS5fZHVwbGV4U3RhdGUgfCBSRUFEX0VORElORykgJiBSRUFEX05PTl9QUklNQVJZX0FORF9QVVNIRURcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGlmICh0aGlzLm1hcCAhPT0gbnVsbCkge1xuICAgICAgZGF0YSA9IHRoaXMubWFwKGRhdGEpXG4gICAgICBpZiAoZGF0YSA9PT0gbnVsbCkge1xuICAgICAgICBzdHJlYW0uX2R1cGxleFN0YXRlICY9IFJFQURfUFVTSEVEXG4gICAgICAgIHJldHVybiB0aGlzLmJ1ZmZlcmVkIDwgdGhpcy5oaWdoV2F0ZXJNYXJrXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5idWZmZXJlZCArPSB0aGlzLmJ5dGVMZW5ndGgoZGF0YSlcbiAgICB0aGlzLnF1ZXVlLnB1c2goZGF0YSlcblxuICAgIHN0cmVhbS5fZHVwbGV4U3RhdGUgPSAoc3RyZWFtLl9kdXBsZXhTdGF0ZSB8IFJFQURfUVVFVUVEKSAmIFJFQURfUFVTSEVEXG5cbiAgICByZXR1cm4gdGhpcy5idWZmZXJlZCA8IHRoaXMuaGlnaFdhdGVyTWFya1xuICB9XG5cbiAgc2hpZnQgKCkge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLnF1ZXVlLnNoaWZ0KClcblxuICAgIHRoaXMuYnVmZmVyZWQgLT0gdGhpcy5ieXRlTGVuZ3RoKGRhdGEpXG4gICAgaWYgKHRoaXMuYnVmZmVyZWQgPT09IDApIHRoaXMuc3RyZWFtLl9kdXBsZXhTdGF0ZSAmPSBSRUFEX05PVF9RVUVVRURcbiAgICByZXR1cm4gZGF0YVxuICB9XG5cbiAgdW5zaGlmdCAoZGF0YSkge1xuICAgIGNvbnN0IHBlbmRpbmcgPSBbdGhpcy5tYXAgIT09IG51bGwgPyB0aGlzLm1hcChkYXRhKSA6IGRhdGFdXG4gICAgd2hpbGUgKHRoaXMuYnVmZmVyZWQgPiAwKSBwZW5kaW5nLnB1c2godGhpcy5zaGlmdCgpKVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwZW5kaW5nLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgY29uc3QgZGF0YSA9IHBlbmRpbmdbaV1cbiAgICAgIHRoaXMuYnVmZmVyZWQgKz0gdGhpcy5ieXRlTGVuZ3RoKGRhdGEpXG4gICAgICB0aGlzLnF1ZXVlLnB1c2goZGF0YSlcbiAgICB9XG5cbiAgICB0aGlzLnB1c2gocGVuZGluZ1twZW5kaW5nLmxlbmd0aCAtIDFdKVxuICB9XG5cbiAgcmVhZCAoKSB7XG4gICAgY29uc3Qgc3RyZWFtID0gdGhpcy5zdHJlYW1cblxuICAgIGlmICgoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFJFQURfU1RBVFVTKSA9PT0gUkVBRF9RVUVVRUQpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLnNoaWZ0KClcbiAgICAgIGlmICh0aGlzLnBpcGVUbyAhPT0gbnVsbCAmJiB0aGlzLnBpcGVUby53cml0ZShkYXRhKSA9PT0gZmFsc2UpIHN0cmVhbS5fZHVwbGV4U3RhdGUgJj0gUkVBRF9QSVBFX05PVF9EUkFJTkVEXG4gICAgICBpZiAoKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBSRUFEX0VNSVRfREFUQSkgIT09IDApIHN0cmVhbS5lbWl0KCdkYXRhJywgZGF0YSlcbiAgICAgIHJldHVybiBkYXRhXG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVhZEFoZWFkID09PSBmYWxzZSkge1xuICAgICAgc3RyZWFtLl9kdXBsZXhTdGF0ZSB8PSBSRUFEX1JFQURfQUhFQURcbiAgICAgIHRoaXMudXBkYXRlTmV4dFRpY2soKVxuICAgIH1cblxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBkcmFpbiAoKSB7XG4gICAgY29uc3Qgc3RyZWFtID0gdGhpcy5zdHJlYW1cblxuICAgIHdoaWxlICgoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFJFQURfU1RBVFVTKSA9PT0gUkVBRF9RVUVVRUQgJiYgKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBSRUFEX0ZMT1dJTkcpICE9PSAwKSB7XG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5zaGlmdCgpXG4gICAgICBpZiAodGhpcy5waXBlVG8gIT09IG51bGwgJiYgdGhpcy5waXBlVG8ud3JpdGUoZGF0YSkgPT09IGZhbHNlKSBzdHJlYW0uX2R1cGxleFN0YXRlICY9IFJFQURfUElQRV9OT1RfRFJBSU5FRFxuICAgICAgaWYgKChzdHJlYW0uX2R1cGxleFN0YXRlICYgUkVBRF9FTUlUX0RBVEEpICE9PSAwKSBzdHJlYW0uZW1pdCgnZGF0YScsIGRhdGEpXG4gICAgfVxuICB9XG5cbiAgdXBkYXRlICgpIHtcbiAgICBjb25zdCBzdHJlYW0gPSB0aGlzLnN0cmVhbVxuXG4gICAgc3RyZWFtLl9kdXBsZXhTdGF0ZSB8PSBSRUFEX1VQREFUSU5HXG5cbiAgICBkbyB7XG4gICAgICB0aGlzLmRyYWluKClcblxuICAgICAgd2hpbGUgKHRoaXMuYnVmZmVyZWQgPCB0aGlzLmhpZ2hXYXRlck1hcmsgJiYgKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBTSE9VTERfTk9UX1JFQUQpID09PSBSRUFEX1JFQURfQUhFQUQpIHtcbiAgICAgICAgc3RyZWFtLl9kdXBsZXhTdGF0ZSB8PSBSRUFEX0FDVElWRV9BTkRfTkVFRFNfUFVTSFxuICAgICAgICBzdHJlYW0uX3JlYWQodGhpcy5hZnRlclJlYWQpXG4gICAgICAgIHRoaXMuZHJhaW4oKVxuICAgICAgfVxuXG4gICAgICBpZiAoKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBSRUFEX1JFQURBQkxFX1NUQVRVUykgPT09IFJFQURfRU1JVF9SRUFEQUJMRV9BTkRfUVVFVUVEKSB7XG4gICAgICAgIHN0cmVhbS5fZHVwbGV4U3RhdGUgfD0gUkVBRF9FTUlUVEVEX1JFQURBQkxFXG4gICAgICAgIHN0cmVhbS5lbWl0KCdyZWFkYWJsZScpXG4gICAgICB9XG5cbiAgICAgIGlmICgoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFJFQURfUFJJTUFSWV9BTkRfQUNUSVZFKSA9PT0gMCkgdGhpcy51cGRhdGVOb25QcmltYXJ5KClcbiAgICB9IHdoaWxlICh0aGlzLmNvbnRpbnVlVXBkYXRlKCkgPT09IHRydWUpXG5cbiAgICBzdHJlYW0uX2R1cGxleFN0YXRlICY9IFJFQURfTk9UX1VQREFUSU5HXG4gIH1cblxuICB1cGRhdGVOb25QcmltYXJ5ICgpIHtcbiAgICBjb25zdCBzdHJlYW0gPSB0aGlzLnN0cmVhbVxuXG4gICAgaWYgKChzdHJlYW0uX2R1cGxleFN0YXRlICYgUkVBRF9FTkRJTkdfU1RBVFVTKSA9PT0gUkVBRF9FTkRJTkcpIHtcbiAgICAgIHN0cmVhbS5fZHVwbGV4U3RhdGUgPSAoc3RyZWFtLl9kdXBsZXhTdGF0ZSB8IFJFQURfRE9ORSkgJiBSRUFEX05PVF9FTkRJTkdcbiAgICAgIHN0cmVhbS5lbWl0KCdlbmQnKVxuICAgICAgaWYgKChzdHJlYW0uX2R1cGxleFN0YXRlICYgQVVUT19ERVNUUk9ZKSA9PT0gRE9ORSkgc3RyZWFtLl9kdXBsZXhTdGF0ZSB8PSBERVNUUk9ZSU5HXG4gICAgICBpZiAodGhpcy5waXBlVG8gIT09IG51bGwpIHRoaXMucGlwZVRvLmVuZCgpXG4gICAgfVxuXG4gICAgaWYgKChzdHJlYW0uX2R1cGxleFN0YXRlICYgREVTVFJPWV9TVEFUVVMpID09PSBERVNUUk9ZSU5HKSB7XG4gICAgICBpZiAoKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBBQ1RJVkVfT1JfVElDS0lORykgPT09IDApIHtcbiAgICAgICAgc3RyZWFtLl9kdXBsZXhTdGF0ZSB8PSBBQ1RJVkVcbiAgICAgICAgc3RyZWFtLl9kZXN0cm95KGFmdGVyRGVzdHJveS5iaW5kKHRoaXMpKVxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKChzdHJlYW0uX2R1cGxleFN0YXRlICYgSVNfT1BFTklORykgPT09IE9QRU5JTkcpIHtcbiAgICAgIHN0cmVhbS5fZHVwbGV4U3RhdGUgPSAoc3RyZWFtLl9kdXBsZXhTdGF0ZSB8IEFDVElWRSkgJiBOT1RfT1BFTklOR1xuICAgICAgc3RyZWFtLl9vcGVuKGFmdGVyT3Blbi5iaW5kKHRoaXMpKVxuICAgIH1cbiAgfVxuXG4gIGNvbnRpbnVlVXBkYXRlICgpIHtcbiAgICBpZiAoKHRoaXMuc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFJFQURfTkVYVF9USUNLKSA9PT0gMCkgcmV0dXJuIGZhbHNlXG4gICAgdGhpcy5zdHJlYW0uX2R1cGxleFN0YXRlICY9IFJFQURfTk9UX05FWFRfVElDS1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICB1cGRhdGVDYWxsYmFjayAoKSB7XG4gICAgaWYgKCh0aGlzLnN0cmVhbS5fZHVwbGV4U3RhdGUgJiBSRUFEX1VQREFURV9TWU5DX1NUQVRVUykgPT09IFJFQURfUFJJTUFSWSkgdGhpcy51cGRhdGUoKVxuICAgIGVsc2UgdGhpcy51cGRhdGVOZXh0VGljaygpXG4gIH1cblxuICB1cGRhdGVOZXh0VGljayAoKSB7XG4gICAgaWYgKCh0aGlzLnN0cmVhbS5fZHVwbGV4U3RhdGUgJiBSRUFEX05FWFRfVElDSykgIT09IDApIHJldHVyblxuICAgIHRoaXMuc3RyZWFtLl9kdXBsZXhTdGF0ZSB8PSBSRUFEX05FWFRfVElDS1xuICAgIGlmICgodGhpcy5zdHJlYW0uX2R1cGxleFN0YXRlICYgUkVBRF9VUERBVElORykgPT09IDApIHF1ZXVlVGljayh0aGlzLmFmdGVyVXBkYXRlTmV4dFRpY2spXG4gIH1cbn1cblxuY2xhc3MgVHJhbnNmb3JtU3RhdGUge1xuICBjb25zdHJ1Y3RvciAoc3RyZWFtKSB7XG4gICAgdGhpcy5kYXRhID0gbnVsbFxuICAgIHRoaXMuYWZ0ZXJUcmFuc2Zvcm0gPSBhZnRlclRyYW5zZm9ybS5iaW5kKHN0cmVhbSlcbiAgICB0aGlzLmFmdGVyRmluYWwgPSBudWxsXG4gIH1cbn1cblxuY2xhc3MgUGlwZWxpbmUge1xuICBjb25zdHJ1Y3RvciAoc3JjLCBkc3QsIGNiKSB7XG4gICAgdGhpcy5mcm9tID0gc3JjXG4gICAgdGhpcy50byA9IGRzdFxuICAgIHRoaXMuYWZ0ZXJQaXBlID0gY2JcbiAgICB0aGlzLmVycm9yID0gbnVsbFxuICAgIHRoaXMucGlwZVRvRmluaXNoZWQgPSBmYWxzZVxuICB9XG5cbiAgZmluaXNoZWQgKCkge1xuICAgIHRoaXMucGlwZVRvRmluaXNoZWQgPSB0cnVlXG4gIH1cblxuICBkb25lIChzdHJlYW0sIGVycikge1xuICAgIGlmIChlcnIpIHRoaXMuZXJyb3IgPSBlcnJcblxuICAgIGlmIChzdHJlYW0gPT09IHRoaXMudG8pIHtcbiAgICAgIHRoaXMudG8gPSBudWxsXG5cbiAgICAgIGlmICh0aGlzLmZyb20gIT09IG51bGwpIHtcbiAgICAgICAgaWYgKCh0aGlzLmZyb20uX2R1cGxleFN0YXRlICYgUkVBRF9ET05FKSA9PT0gMCB8fCAhdGhpcy5waXBlVG9GaW5pc2hlZCkge1xuICAgICAgICAgIHRoaXMuZnJvbS5kZXN0cm95KHRoaXMuZXJyb3IgfHwgbmV3IEVycm9yKCdXcml0YWJsZSBzdHJlYW0gY2xvc2VkIHByZW1hdHVyZWx5JykpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN0cmVhbSA9PT0gdGhpcy5mcm9tKSB7XG4gICAgICB0aGlzLmZyb20gPSBudWxsXG5cbiAgICAgIGlmICh0aGlzLnRvICE9PSBudWxsKSB7XG4gICAgICAgIGlmICgoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFJFQURfRE9ORSkgPT09IDApIHtcbiAgICAgICAgICB0aGlzLnRvLmRlc3Ryb3kodGhpcy5lcnJvciB8fCBuZXcgRXJyb3IoJ1JlYWRhYmxlIHN0cmVhbSBjbG9zZWQgYmVmb3JlIGVuZGluZycpKVxuICAgICAgICB9XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmFmdGVyUGlwZSAhPT0gbnVsbCkgdGhpcy5hZnRlclBpcGUodGhpcy5lcnJvcilcbiAgICB0aGlzLnRvID0gdGhpcy5mcm9tID0gdGhpcy5hZnRlclBpcGUgPSBudWxsXG4gIH1cbn1cblxuZnVuY3Rpb24gYWZ0ZXJEcmFpbiAoKSB7XG4gIHRoaXMuc3RyZWFtLl9kdXBsZXhTdGF0ZSB8PSBSRUFEX1BJUEVfRFJBSU5FRFxuICB0aGlzLnVwZGF0ZUNhbGxiYWNrKClcbn1cblxuZnVuY3Rpb24gYWZ0ZXJGaW5hbCAoZXJyKSB7XG4gIGNvbnN0IHN0cmVhbSA9IHRoaXMuc3RyZWFtXG4gIGlmIChlcnIpIHN0cmVhbS5kZXN0cm95KGVycilcbiAgaWYgKChzdHJlYW0uX2R1cGxleFN0YXRlICYgREVTVFJPWV9TVEFUVVMpID09PSAwKSB7XG4gICAgc3RyZWFtLl9kdXBsZXhTdGF0ZSB8PSBXUklURV9ET05FXG4gICAgc3RyZWFtLmVtaXQoJ2ZpbmlzaCcpXG4gIH1cbiAgaWYgKChzdHJlYW0uX2R1cGxleFN0YXRlICYgQVVUT19ERVNUUk9ZKSA9PT0gRE9ORSkge1xuICAgIHN0cmVhbS5fZHVwbGV4U3RhdGUgfD0gREVTVFJPWUlOR1xuICB9XG5cbiAgc3RyZWFtLl9kdXBsZXhTdGF0ZSAmPSBXUklURV9OT1RfQUNUSVZFXG5cbiAgLy8gbm8gbmVlZCB0byB3YWl0IHRoZSBleHRyYSB0aWNrIGhlcmUsIHNvIHdlIHNob3J0IGNpcmN1aXQgdGhhdFxuICBpZiAoKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBXUklURV9VUERBVElORykgPT09IDApIHRoaXMudXBkYXRlKClcbiAgZWxzZSB0aGlzLnVwZGF0ZU5leHRUaWNrKClcbn1cblxuZnVuY3Rpb24gYWZ0ZXJEZXN0cm95IChlcnIpIHtcbiAgY29uc3Qgc3RyZWFtID0gdGhpcy5zdHJlYW1cblxuICBpZiAoIWVyciAmJiB0aGlzLmVycm9yICE9PSBTVFJFQU1fREVTVFJPWUVEKSBlcnIgPSB0aGlzLmVycm9yXG4gIGlmIChlcnIpIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVycilcbiAgc3RyZWFtLl9kdXBsZXhTdGF0ZSB8PSBERVNUUk9ZRURcbiAgc3RyZWFtLmVtaXQoJ2Nsb3NlJylcblxuICBjb25zdCBycyA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZVxuICBjb25zdCB3cyA9IHN0cmVhbS5fd3JpdGFibGVTdGF0ZVxuXG4gIGlmIChycyAhPT0gbnVsbCAmJiBycy5waXBlbGluZSAhPT0gbnVsbCkgcnMucGlwZWxpbmUuZG9uZShzdHJlYW0sIGVycilcblxuICBpZiAod3MgIT09IG51bGwpIHtcbiAgICB3aGlsZSAod3MuZHJhaW5zICE9PSBudWxsICYmIHdzLmRyYWlucy5sZW5ndGggPiAwKSB3cy5kcmFpbnMuc2hpZnQoKS5yZXNvbHZlKGZhbHNlKVxuICAgIGlmICh3cy5waXBlbGluZSAhPT0gbnVsbCkgd3MucGlwZWxpbmUuZG9uZShzdHJlYW0sIGVycilcbiAgfVxufVxuXG5mdW5jdGlvbiBhZnRlcldyaXRlIChlcnIpIHtcbiAgY29uc3Qgc3RyZWFtID0gdGhpcy5zdHJlYW1cblxuICBpZiAoZXJyKSBzdHJlYW0uZGVzdHJveShlcnIpXG4gIHN0cmVhbS5fZHVwbGV4U3RhdGUgJj0gV1JJVEVfTk9UX0FDVElWRVxuXG4gIGlmICh0aGlzLmRyYWlucyAhPT0gbnVsbCkgdGlja0RyYWlucyh0aGlzLmRyYWlucylcblxuICBpZiAoKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBXUklURV9EUkFJTl9TVEFUVVMpID09PSBXUklURV9VTkRSQUlORUQpIHtcbiAgICBzdHJlYW0uX2R1cGxleFN0YXRlICY9IFdSSVRFX0RSQUlORURcbiAgICBpZiAoKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBXUklURV9FTUlUX0RSQUlOKSA9PT0gV1JJVEVfRU1JVF9EUkFJTikge1xuICAgICAgc3RyZWFtLmVtaXQoJ2RyYWluJylcbiAgICB9XG4gIH1cblxuICB0aGlzLnVwZGF0ZUNhbGxiYWNrKClcbn1cblxuZnVuY3Rpb24gYWZ0ZXJSZWFkIChlcnIpIHtcbiAgaWYgKGVycikgdGhpcy5zdHJlYW0uZGVzdHJveShlcnIpXG4gIHRoaXMuc3RyZWFtLl9kdXBsZXhTdGF0ZSAmPSBSRUFEX05PVF9BQ1RJVkVcbiAgaWYgKHRoaXMucmVhZEFoZWFkID09PSBmYWxzZSAmJiAodGhpcy5zdHJlYW0uX2R1cGxleFN0YXRlICYgUkVBRF9SRVNVTUVEKSA9PT0gMCkgdGhpcy5zdHJlYW0uX2R1cGxleFN0YXRlICY9IFJFQURfTk9fUkVBRF9BSEVBRFxuICB0aGlzLnVwZGF0ZUNhbGxiYWNrKClcbn1cblxuZnVuY3Rpb24gdXBkYXRlUmVhZE5UICgpIHtcbiAgaWYgKCh0aGlzLnN0cmVhbS5fZHVwbGV4U3RhdGUgJiBSRUFEX1VQREFUSU5HKSA9PT0gMCkge1xuICAgIHRoaXMuc3RyZWFtLl9kdXBsZXhTdGF0ZSAmPSBSRUFEX05PVF9ORVhUX1RJQ0tcbiAgICB0aGlzLnVwZGF0ZSgpXG4gIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlV3JpdGVOVCAoKSB7XG4gIGlmICgodGhpcy5zdHJlYW0uX2R1cGxleFN0YXRlICYgV1JJVEVfVVBEQVRJTkcpID09PSAwKSB7XG4gICAgdGhpcy5zdHJlYW0uX2R1cGxleFN0YXRlICY9IFdSSVRFX05PVF9ORVhUX1RJQ0tcbiAgICB0aGlzLnVwZGF0ZSgpXG4gIH1cbn1cblxuZnVuY3Rpb24gdGlja0RyYWlucyAoZHJhaW5zKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZHJhaW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgLy8gZHJhaW5zLndyaXRlcyBhcmUgbW9ub3RvbmljLCBzbyBpZiBvbmUgaXMgMCBpdHMgYWx3YXlzIHRoZSBmaXJzdCBvbmVcbiAgICBpZiAoLS1kcmFpbnNbaV0ud3JpdGVzID09PSAwKSB7XG4gICAgICBkcmFpbnMuc2hpZnQoKS5yZXNvbHZlKHRydWUpXG4gICAgICBpLS1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYWZ0ZXJPcGVuIChlcnIpIHtcbiAgY29uc3Qgc3RyZWFtID0gdGhpcy5zdHJlYW1cblxuICBpZiAoZXJyKSBzdHJlYW0uZGVzdHJveShlcnIpXG5cbiAgaWYgKChzdHJlYW0uX2R1cGxleFN0YXRlICYgREVTVFJPWUlORykgPT09IDApIHtcbiAgICBpZiAoKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBSRUFEX1BSSU1BUllfU1RBVFVTKSA9PT0gMCkgc3RyZWFtLl9kdXBsZXhTdGF0ZSB8PSBSRUFEX1BSSU1BUllcbiAgICBpZiAoKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBXUklURV9QUklNQVJZX1NUQVRVUykgPT09IDApIHN0cmVhbS5fZHVwbGV4U3RhdGUgfD0gV1JJVEVfUFJJTUFSWVxuICAgIHN0cmVhbS5lbWl0KCdvcGVuJylcbiAgfVxuXG4gIHN0cmVhbS5fZHVwbGV4U3RhdGUgJj0gTk9UX0FDVElWRVxuXG4gIGlmIChzdHJlYW0uX3dyaXRhYmxlU3RhdGUgIT09IG51bGwpIHtcbiAgICBzdHJlYW0uX3dyaXRhYmxlU3RhdGUudXBkYXRlQ2FsbGJhY2soKVxuICB9XG5cbiAgaWYgKHN0cmVhbS5fcmVhZGFibGVTdGF0ZSAhPT0gbnVsbCkge1xuICAgIHN0cmVhbS5fcmVhZGFibGVTdGF0ZS51cGRhdGVDYWxsYmFjaygpXG4gIH1cbn1cblxuZnVuY3Rpb24gYWZ0ZXJUcmFuc2Zvcm0gKGVyciwgZGF0YSkge1xuICBpZiAoZGF0YSAhPT0gdW5kZWZpbmVkICYmIGRhdGEgIT09IG51bGwpIHRoaXMucHVzaChkYXRhKVxuICB0aGlzLl93cml0YWJsZVN0YXRlLmFmdGVyV3JpdGUoZXJyKVxufVxuXG5mdW5jdGlvbiBuZXdMaXN0ZW5lciAobmFtZSkge1xuICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZSAhPT0gbnVsbCkge1xuICAgIGlmIChuYW1lID09PSAnZGF0YScpIHtcbiAgICAgIHRoaXMuX2R1cGxleFN0YXRlIHw9IChSRUFEX0VNSVRfREFUQSB8IFJFQURfUkVTVU1FRF9SRUFEX0FIRUFEKVxuICAgICAgdGhpcy5fcmVhZGFibGVTdGF0ZS51cGRhdGVOZXh0VGljaygpXG4gICAgfVxuICAgIGlmIChuYW1lID09PSAncmVhZGFibGUnKSB7XG4gICAgICB0aGlzLl9kdXBsZXhTdGF0ZSB8PSBSRUFEX0VNSVRfUkVBREFCTEVcbiAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUudXBkYXRlTmV4dFRpY2soKVxuICAgIH1cbiAgfVxuXG4gIGlmICh0aGlzLl93cml0YWJsZVN0YXRlICE9PSBudWxsKSB7XG4gICAgaWYgKG5hbWUgPT09ICdkcmFpbicpIHtcbiAgICAgIHRoaXMuX2R1cGxleFN0YXRlIHw9IFdSSVRFX0VNSVRfRFJBSU5cbiAgICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUudXBkYXRlTmV4dFRpY2soKVxuICAgIH1cbiAgfVxufVxuXG5jbGFzcyBTdHJlYW0gZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICBjb25zdHJ1Y3RvciAob3B0cykge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXMuX2R1cGxleFN0YXRlID0gMFxuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUgPSBudWxsXG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZSA9IG51bGxcblxuICAgIGlmIChvcHRzKSB7XG4gICAgICBpZiAob3B0cy5vcGVuKSB0aGlzLl9vcGVuID0gb3B0cy5vcGVuXG4gICAgICBpZiAob3B0cy5kZXN0cm95KSB0aGlzLl9kZXN0cm95ID0gb3B0cy5kZXN0cm95XG4gICAgICBpZiAob3B0cy5wcmVkZXN0cm95KSB0aGlzLl9wcmVkZXN0cm95ID0gb3B0cy5wcmVkZXN0cm95XG4gICAgICBpZiAob3B0cy5zaWduYWwpIHtcbiAgICAgICAgb3B0cy5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydC5iaW5kKHRoaXMpKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMub24oJ25ld0xpc3RlbmVyJywgbmV3TGlzdGVuZXIpXG4gIH1cblxuICBfb3BlbiAoY2IpIHtcbiAgICBjYihudWxsKVxuICB9XG5cbiAgX2Rlc3Ryb3kgKGNiKSB7XG4gICAgY2IobnVsbClcbiAgfVxuXG4gIF9wcmVkZXN0cm95ICgpIHtcbiAgICAvLyBkb2VzIG5vdGhpbmdcbiAgfVxuXG4gIGdldCByZWFkYWJsZSAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUgIT09IG51bGwgPyB0cnVlIDogdW5kZWZpbmVkXG4gIH1cblxuICBnZXQgd3JpdGFibGUgKCkge1xuICAgIHJldHVybiB0aGlzLl93cml0YWJsZVN0YXRlICE9PSBudWxsID8gdHJ1ZSA6IHVuZGVmaW5lZFxuICB9XG5cbiAgZ2V0IGRlc3Ryb3llZCAoKSB7XG4gICAgcmV0dXJuICh0aGlzLl9kdXBsZXhTdGF0ZSAmIERFU1RST1lFRCkgIT09IDBcbiAgfVxuXG4gIGdldCBkZXN0cm95aW5nICgpIHtcbiAgICByZXR1cm4gKHRoaXMuX2R1cGxleFN0YXRlICYgREVTVFJPWV9TVEFUVVMpICE9PSAwXG4gIH1cblxuICBkZXN0cm95IChlcnIpIHtcbiAgICBpZiAoKHRoaXMuX2R1cGxleFN0YXRlICYgREVTVFJPWV9TVEFUVVMpID09PSAwKSB7XG4gICAgICBpZiAoIWVycikgZXJyID0gU1RSRUFNX0RFU1RST1lFRFxuICAgICAgdGhpcy5fZHVwbGV4U3RhdGUgPSAodGhpcy5fZHVwbGV4U3RhdGUgfCBERVNUUk9ZSU5HKSAmIE5PTl9QUklNQVJZXG5cbiAgICAgIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuaGlnaFdhdGVyTWFyayA9IDBcbiAgICAgICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5lcnJvciA9IGVyclxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX3dyaXRhYmxlU3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrID0gMFxuICAgICAgICB0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yID0gZXJyXG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2R1cGxleFN0YXRlIHw9IFBSRURFU1RST1lJTkdcbiAgICAgIHRoaXMuX3ByZWRlc3Ryb3koKVxuICAgICAgdGhpcy5fZHVwbGV4U3RhdGUgJj0gTk9UX1BSRURFU1RST1lJTkdcblxuICAgICAgaWYgKHRoaXMuX3JlYWRhYmxlU3RhdGUgIT09IG51bGwpIHRoaXMuX3JlYWRhYmxlU3RhdGUudXBkYXRlTmV4dFRpY2soKVxuICAgICAgaWYgKHRoaXMuX3dyaXRhYmxlU3RhdGUgIT09IG51bGwpIHRoaXMuX3dyaXRhYmxlU3RhdGUudXBkYXRlTmV4dFRpY2soKVxuICAgIH1cbiAgfVxufVxuXG5jbGFzcyBSZWFkYWJsZSBleHRlbmRzIFN0cmVhbSB7XG4gIGNvbnN0cnVjdG9yIChvcHRzKSB7XG4gICAgc3VwZXIob3B0cylcblxuICAgIHRoaXMuX2R1cGxleFN0YXRlIHw9IE9QRU5JTkcgfCBXUklURV9ET05FIHwgUkVBRF9SRUFEX0FIRUFEXG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZSA9IG5ldyBSZWFkYWJsZVN0YXRlKHRoaXMsIG9wdHMpXG5cbiAgICBpZiAob3B0cykge1xuICAgICAgaWYgKHRoaXMuX3JlYWRhYmxlU3RhdGUucmVhZEFoZWFkID09PSBmYWxzZSkgdGhpcy5fZHVwbGV4U3RhdGUgJj0gUkVBRF9OT19SRUFEX0FIRUFEXG4gICAgICBpZiAob3B0cy5yZWFkKSB0aGlzLl9yZWFkID0gb3B0cy5yZWFkXG4gICAgICBpZiAob3B0cy5lYWdlck9wZW4pIHRoaXMuX3JlYWRhYmxlU3RhdGUudXBkYXRlTmV4dFRpY2soKVxuICAgICAgaWYgKG9wdHMuZW5jb2RpbmcpIHRoaXMuc2V0RW5jb2Rpbmcob3B0cy5lbmNvZGluZylcbiAgICB9XG4gIH1cblxuICBzZXRFbmNvZGluZyAoZW5jb2RpbmcpIHtcbiAgICBjb25zdCBkZWMgPSBuZXcgVGV4dERlY29kZXIoZW5jb2RpbmcpXG4gICAgY29uc3QgbWFwID0gdGhpcy5fcmVhZGFibGVTdGF0ZS5tYXAgfHwgZWNob1xuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUubWFwID0gbWFwT3JTa2lwXG4gICAgcmV0dXJuIHRoaXNcblxuICAgIGZ1bmN0aW9uIG1hcE9yU2tpcCAoZGF0YSkge1xuICAgICAgY29uc3QgbmV4dCA9IGRlYy5wdXNoKGRhdGEpXG4gICAgICByZXR1cm4gbmV4dCA9PT0gJycgJiYgKGRhdGEuYnl0ZUxlbmd0aCAhPT0gMCB8fCBkZWMucmVtYWluaW5nID4gMCkgPyBudWxsIDogbWFwKG5leHQpXG4gICAgfVxuICB9XG5cbiAgX3JlYWQgKGNiKSB7XG4gICAgY2IobnVsbClcbiAgfVxuXG4gIHBpcGUgKGRlc3QsIGNiKSB7XG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS51cGRhdGVOZXh0VGljaygpXG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5waXBlKGRlc3QsIGNiKVxuICAgIHJldHVybiBkZXN0XG4gIH1cblxuICByZWFkICgpIHtcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLnVwZGF0ZU5leHRUaWNrKClcbiAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5yZWFkKClcbiAgfVxuXG4gIHB1c2ggKGRhdGEpIHtcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLnVwZGF0ZU5leHRUaWNrKClcbiAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5wdXNoKGRhdGEpXG4gIH1cblxuICB1bnNoaWZ0IChkYXRhKSB7XG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS51cGRhdGVOZXh0VGljaygpXG4gICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUudW5zaGlmdChkYXRhKVxuICB9XG5cbiAgcmVzdW1lICgpIHtcbiAgICB0aGlzLl9kdXBsZXhTdGF0ZSB8PSBSRUFEX1JFU1VNRURfUkVBRF9BSEVBRFxuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUudXBkYXRlTmV4dFRpY2soKVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBwYXVzZSAoKSB7XG4gICAgdGhpcy5fZHVwbGV4U3RhdGUgJj0gKHRoaXMuX3JlYWRhYmxlU3RhdGUucmVhZEFoZWFkID09PSBmYWxzZSA/IFJFQURfUEFVU0VEX05PX1JFQURfQUhFQUQgOiBSRUFEX1BBVVNFRClcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgc3RhdGljIF9mcm9tQXN5bmNJdGVyYXRvciAoaXRlLCBvcHRzKSB7XG4gICAgbGV0IGRlc3Ryb3lcblxuICAgIGNvbnN0IHJzID0gbmV3IFJlYWRhYmxlKHtcbiAgICAgIC4uLm9wdHMsXG4gICAgICByZWFkIChjYikge1xuICAgICAgICBpdGUubmV4dCgpLnRoZW4ocHVzaCkudGhlbihjYi5iaW5kKG51bGwsIG51bGwpKS5jYXRjaChjYilcbiAgICAgIH0sXG4gICAgICBwcmVkZXN0cm95ICgpIHtcbiAgICAgICAgZGVzdHJveSA9IGl0ZS5yZXR1cm4oKVxuICAgICAgfSxcbiAgICAgIGRlc3Ryb3kgKGNiKSB7XG4gICAgICAgIGlmICghZGVzdHJveSkgcmV0dXJuIGNiKG51bGwpXG4gICAgICAgIGRlc3Ryb3kudGhlbihjYi5iaW5kKG51bGwsIG51bGwpKS5jYXRjaChjYilcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIHJzXG5cbiAgICBmdW5jdGlvbiBwdXNoIChkYXRhKSB7XG4gICAgICBpZiAoZGF0YS5kb25lKSBycy5wdXNoKG51bGwpXG4gICAgICBlbHNlIHJzLnB1c2goZGF0YS52YWx1ZSlcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZnJvbSAoZGF0YSwgb3B0cykge1xuICAgIGlmIChpc1JlYWRTdHJlYW14KGRhdGEpKSByZXR1cm4gZGF0YVxuICAgIGlmIChkYXRhW2FzeW5jSXRlcmF0b3JdKSByZXR1cm4gdGhpcy5fZnJvbUFzeW5jSXRlcmF0b3IoZGF0YVthc3luY0l0ZXJhdG9yXSgpLCBvcHRzKVxuICAgIGlmICghQXJyYXkuaXNBcnJheShkYXRhKSkgZGF0YSA9IGRhdGEgPT09IHVuZGVmaW5lZCA/IFtdIDogW2RhdGFdXG5cbiAgICBsZXQgaSA9IDBcbiAgICByZXR1cm4gbmV3IFJlYWRhYmxlKHtcbiAgICAgIC4uLm9wdHMsXG4gICAgICByZWFkIChjYikge1xuICAgICAgICB0aGlzLnB1c2goaSA9PT0gZGF0YS5sZW5ndGggPyBudWxsIDogZGF0YVtpKytdKVxuICAgICAgICBjYihudWxsKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBzdGF0aWMgaXNCYWNrcHJlc3N1cmVkIChycykge1xuICAgIHJldHVybiAocnMuX2R1cGxleFN0YXRlICYgUkVBRF9CQUNLUFJFU1NVUkVfU1RBVFVTKSAhPT0gMCB8fCBycy5fcmVhZGFibGVTdGF0ZS5idWZmZXJlZCA+PSBycy5fcmVhZGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrXG4gIH1cblxuICBzdGF0aWMgaXNQYXVzZWQgKHJzKSB7XG4gICAgcmV0dXJuIChycy5fZHVwbGV4U3RhdGUgJiBSRUFEX1JFU1VNRUQpID09PSAwXG4gIH1cblxuICBbYXN5bmNJdGVyYXRvcl0gKCkge1xuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXNcblxuICAgIGxldCBlcnJvciA9IG51bGxcbiAgICBsZXQgcHJvbWlzZVJlc29sdmUgPSBudWxsXG4gICAgbGV0IHByb21pc2VSZWplY3QgPSBudWxsXG5cbiAgICB0aGlzLm9uKCdlcnJvcicsIChlcnIpID0+IHsgZXJyb3IgPSBlcnIgfSlcbiAgICB0aGlzLm9uKCdyZWFkYWJsZScsIG9ucmVhZGFibGUpXG4gICAgdGhpcy5vbignY2xvc2UnLCBvbmNsb3NlKVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIFthc3luY0l0ZXJhdG9yXSAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzXG4gICAgICB9LFxuICAgICAgbmV4dCAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgcHJvbWlzZVJlc29sdmUgPSByZXNvbHZlXG4gICAgICAgICAgcHJvbWlzZVJlamVjdCA9IHJlamVjdFxuICAgICAgICAgIGNvbnN0IGRhdGEgPSBzdHJlYW0ucmVhZCgpXG4gICAgICAgICAgaWYgKGRhdGEgIT09IG51bGwpIG9uZGF0YShkYXRhKVxuICAgICAgICAgIGVsc2UgaWYgKChzdHJlYW0uX2R1cGxleFN0YXRlICYgREVTVFJPWUVEKSAhPT0gMCkgb25kYXRhKG51bGwpXG4gICAgICAgIH0pXG4gICAgICB9LFxuICAgICAgcmV0dXJuICgpIHtcbiAgICAgICAgcmV0dXJuIGRlc3Ryb3kobnVsbClcbiAgICAgIH0sXG4gICAgICB0aHJvdyAoZXJyKSB7XG4gICAgICAgIHJldHVybiBkZXN0cm95KGVycilcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvbnJlYWRhYmxlICgpIHtcbiAgICAgIGlmIChwcm9taXNlUmVzb2x2ZSAhPT0gbnVsbCkgb25kYXRhKHN0cmVhbS5yZWFkKCkpXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25jbG9zZSAoKSB7XG4gICAgICBpZiAocHJvbWlzZVJlc29sdmUgIT09IG51bGwpIG9uZGF0YShudWxsKVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9uZGF0YSAoZGF0YSkge1xuICAgICAgaWYgKHByb21pc2VSZWplY3QgPT09IG51bGwpIHJldHVyblxuICAgICAgaWYgKGVycm9yKSBwcm9taXNlUmVqZWN0KGVycm9yKVxuICAgICAgZWxzZSBpZiAoZGF0YSA9PT0gbnVsbCAmJiAoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFJFQURfRE9ORSkgPT09IDApIHByb21pc2VSZWplY3QoU1RSRUFNX0RFU1RST1lFRClcbiAgICAgIGVsc2UgcHJvbWlzZVJlc29sdmUoeyB2YWx1ZTogZGF0YSwgZG9uZTogZGF0YSA9PT0gbnVsbCB9KVxuICAgICAgcHJvbWlzZVJlamVjdCA9IHByb21pc2VSZXNvbHZlID0gbnVsbFxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlc3Ryb3kgKGVycikge1xuICAgICAgc3RyZWFtLmRlc3Ryb3koZXJyKVxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgaWYgKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBERVNUUk9ZRUQpIHJldHVybiByZXNvbHZlKHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9KVxuICAgICAgICBzdHJlYW0ub25jZSgnY2xvc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKGVycikgcmVqZWN0KGVycilcbiAgICAgICAgICBlbHNlIHJlc29sdmUoeyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH0pXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuXG5jbGFzcyBXcml0YWJsZSBleHRlbmRzIFN0cmVhbSB7XG4gIGNvbnN0cnVjdG9yIChvcHRzKSB7XG4gICAgc3VwZXIob3B0cylcblxuICAgIHRoaXMuX2R1cGxleFN0YXRlIHw9IE9QRU5JTkcgfCBSRUFEX0RPTkVcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlID0gbmV3IFdyaXRhYmxlU3RhdGUodGhpcywgb3B0cylcblxuICAgIGlmIChvcHRzKSB7XG4gICAgICBpZiAob3B0cy53cml0ZXYpIHRoaXMuX3dyaXRldiA9IG9wdHMud3JpdGV2XG4gICAgICBpZiAob3B0cy53cml0ZSkgdGhpcy5fd3JpdGUgPSBvcHRzLndyaXRlXG4gICAgICBpZiAob3B0cy5maW5hbCkgdGhpcy5fZmluYWwgPSBvcHRzLmZpbmFsXG4gICAgICBpZiAob3B0cy5lYWdlck9wZW4pIHRoaXMuX3dyaXRhYmxlU3RhdGUudXBkYXRlTmV4dFRpY2soKVxuICAgIH1cbiAgfVxuXG4gIGNvcmsgKCkge1xuICAgIHRoaXMuX2R1cGxleFN0YXRlIHw9IFdSSVRFX0NPUktFRFxuICB9XG5cbiAgdW5jb3JrICgpIHtcbiAgICB0aGlzLl9kdXBsZXhTdGF0ZSAmPSBXUklURV9OT1RfQ09SS0VEXG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS51cGRhdGVOZXh0VGljaygpXG4gIH1cblxuICBfd3JpdGV2IChiYXRjaCwgY2IpIHtcbiAgICBjYihudWxsKVxuICB9XG5cbiAgX3dyaXRlIChkYXRhLCBjYikge1xuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuYXV0b0JhdGNoKGRhdGEsIGNiKVxuICB9XG5cbiAgX2ZpbmFsIChjYikge1xuICAgIGNiKG51bGwpXG4gIH1cblxuICBzdGF0aWMgaXNCYWNrcHJlc3N1cmVkICh3cykge1xuICAgIHJldHVybiAod3MuX2R1cGxleFN0YXRlICYgV1JJVEVfQkFDS1BSRVNTVVJFX1NUQVRVUykgIT09IDBcbiAgfVxuXG4gIHN0YXRpYyBkcmFpbmVkICh3cykge1xuICAgIGlmICh3cy5kZXN0cm95ZWQpIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpXG4gICAgY29uc3Qgc3RhdGUgPSB3cy5fd3JpdGFibGVTdGF0ZVxuICAgIGNvbnN0IHBlbmRpbmcgPSAoaXNXcml0ZXYod3MpID8gTWF0aC5taW4oMSwgc3RhdGUucXVldWUubGVuZ3RoKSA6IHN0YXRlLnF1ZXVlLmxlbmd0aClcbiAgICBjb25zdCB3cml0ZXMgPSBwZW5kaW5nICsgKCh3cy5fZHVwbGV4U3RhdGUgJiBXUklURV9XUklUSU5HKSA/IDEgOiAwKVxuICAgIGlmICh3cml0ZXMgPT09IDApIHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSlcbiAgICBpZiAoc3RhdGUuZHJhaW5zID09PSBudWxsKSBzdGF0ZS5kcmFpbnMgPSBbXVxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgc3RhdGUuZHJhaW5zLnB1c2goeyB3cml0ZXMsIHJlc29sdmUgfSlcbiAgICB9KVxuICB9XG5cbiAgd3JpdGUgKGRhdGEpIHtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLnVwZGF0ZU5leHRUaWNrKClcbiAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5wdXNoKGRhdGEpXG4gIH1cblxuICBlbmQgKGRhdGEpIHtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLnVwZGF0ZU5leHRUaWNrKClcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmVuZChkYXRhKVxuICAgIHJldHVybiB0aGlzXG4gIH1cbn1cblxuY2xhc3MgRHVwbGV4IGV4dGVuZHMgUmVhZGFibGUgeyAvLyBhbmQgV3JpdGFibGVcbiAgY29uc3RydWN0b3IgKG9wdHMpIHtcbiAgICBzdXBlcihvcHRzKVxuXG4gICAgdGhpcy5fZHVwbGV4U3RhdGUgPSBPUEVOSU5HIHwgKHRoaXMuX2R1cGxleFN0YXRlICYgUkVBRF9SRUFEX0FIRUFEKVxuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUgPSBuZXcgV3JpdGFibGVTdGF0ZSh0aGlzLCBvcHRzKVxuXG4gICAgaWYgKG9wdHMpIHtcbiAgICAgIGlmIChvcHRzLndyaXRldikgdGhpcy5fd3JpdGV2ID0gb3B0cy53cml0ZXZcbiAgICAgIGlmIChvcHRzLndyaXRlKSB0aGlzLl93cml0ZSA9IG9wdHMud3JpdGVcbiAgICAgIGlmIChvcHRzLmZpbmFsKSB0aGlzLl9maW5hbCA9IG9wdHMuZmluYWxcbiAgICB9XG4gIH1cblxuICBjb3JrICgpIHtcbiAgICB0aGlzLl9kdXBsZXhTdGF0ZSB8PSBXUklURV9DT1JLRURcbiAgfVxuXG4gIHVuY29yayAoKSB7XG4gICAgdGhpcy5fZHVwbGV4U3RhdGUgJj0gV1JJVEVfTk9UX0NPUktFRFxuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUudXBkYXRlTmV4dFRpY2soKVxuICB9XG5cbiAgX3dyaXRldiAoYmF0Y2gsIGNiKSB7XG4gICAgY2IobnVsbClcbiAgfVxuXG4gIF93cml0ZSAoZGF0YSwgY2IpIHtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmF1dG9CYXRjaChkYXRhLCBjYilcbiAgfVxuXG4gIF9maW5hbCAoY2IpIHtcbiAgICBjYihudWxsKVxuICB9XG5cbiAgd3JpdGUgKGRhdGEpIHtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLnVwZGF0ZU5leHRUaWNrKClcbiAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5wdXNoKGRhdGEpXG4gIH1cblxuICBlbmQgKGRhdGEpIHtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLnVwZGF0ZU5leHRUaWNrKClcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmVuZChkYXRhKVxuICAgIHJldHVybiB0aGlzXG4gIH1cbn1cblxuY2xhc3MgVHJhbnNmb3JtIGV4dGVuZHMgRHVwbGV4IHtcbiAgY29uc3RydWN0b3IgKG9wdHMpIHtcbiAgICBzdXBlcihvcHRzKVxuICAgIHRoaXMuX3RyYW5zZm9ybVN0YXRlID0gbmV3IFRyYW5zZm9ybVN0YXRlKHRoaXMpXG5cbiAgICBpZiAob3B0cykge1xuICAgICAgaWYgKG9wdHMudHJhbnNmb3JtKSB0aGlzLl90cmFuc2Zvcm0gPSBvcHRzLnRyYW5zZm9ybVxuICAgICAgaWYgKG9wdHMuZmx1c2gpIHRoaXMuX2ZsdXNoID0gb3B0cy5mbHVzaFxuICAgIH1cbiAgfVxuXG4gIF93cml0ZSAoZGF0YSwgY2IpIHtcbiAgICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXJlZCA+PSB0aGlzLl9yZWFkYWJsZVN0YXRlLmhpZ2hXYXRlck1hcmspIHtcbiAgICAgIHRoaXMuX3RyYW5zZm9ybVN0YXRlLmRhdGEgPSBkYXRhXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3RyYW5zZm9ybShkYXRhLCB0aGlzLl90cmFuc2Zvcm1TdGF0ZS5hZnRlclRyYW5zZm9ybSlcbiAgICB9XG4gIH1cblxuICBfcmVhZCAoY2IpIHtcbiAgICBpZiAodGhpcy5fdHJhbnNmb3JtU3RhdGUuZGF0YSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuX3RyYW5zZm9ybVN0YXRlLmRhdGFcbiAgICAgIHRoaXMuX3RyYW5zZm9ybVN0YXRlLmRhdGEgPSBudWxsXG4gICAgICBjYihudWxsKVxuICAgICAgdGhpcy5fdHJhbnNmb3JtKGRhdGEsIHRoaXMuX3RyYW5zZm9ybVN0YXRlLmFmdGVyVHJhbnNmb3JtKVxuICAgIH0gZWxzZSB7XG4gICAgICBjYihudWxsKVxuICAgIH1cbiAgfVxuXG4gIGRlc3Ryb3kgKGVycikge1xuICAgIHN1cGVyLmRlc3Ryb3koZXJyKVxuICAgIGlmICh0aGlzLl90cmFuc2Zvcm1TdGF0ZS5kYXRhICE9PSBudWxsKSB7XG4gICAgICB0aGlzLl90cmFuc2Zvcm1TdGF0ZS5kYXRhID0gbnVsbFxuICAgICAgdGhpcy5fdHJhbnNmb3JtU3RhdGUuYWZ0ZXJUcmFuc2Zvcm0oKVxuICAgIH1cbiAgfVxuXG4gIF90cmFuc2Zvcm0gKGRhdGEsIGNiKSB7XG4gICAgY2IobnVsbCwgZGF0YSlcbiAgfVxuXG4gIF9mbHVzaCAoY2IpIHtcbiAgICBjYihudWxsKVxuICB9XG5cbiAgX2ZpbmFsIChjYikge1xuICAgIHRoaXMuX3RyYW5zZm9ybVN0YXRlLmFmdGVyRmluYWwgPSBjYlxuICAgIHRoaXMuX2ZsdXNoKHRyYW5zZm9ybUFmdGVyRmx1c2guYmluZCh0aGlzKSlcbiAgfVxufVxuXG5jbGFzcyBQYXNzVGhyb3VnaCBleHRlbmRzIFRyYW5zZm9ybSB7fVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1BZnRlckZsdXNoIChlcnIsIGRhdGEpIHtcbiAgY29uc3QgY2IgPSB0aGlzLl90cmFuc2Zvcm1TdGF0ZS5hZnRlckZpbmFsXG4gIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gIGlmIChkYXRhICE9PSBudWxsICYmIGRhdGEgIT09IHVuZGVmaW5lZCkgdGhpcy5wdXNoKGRhdGEpXG4gIHRoaXMucHVzaChudWxsKVxuICBjYihudWxsKVxufVxuXG5mdW5jdGlvbiBwaXBlbGluZVByb21pc2UgKC4uLnN0cmVhbXMpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICByZXR1cm4gcGlwZWxpbmUoLi4uc3RyZWFtcywgKGVycikgPT4ge1xuICAgICAgaWYgKGVycikgcmV0dXJuIHJlamVjdChlcnIpXG4gICAgICByZXNvbHZlKClcbiAgICB9KVxuICB9KVxufVxuXG5mdW5jdGlvbiBwaXBlbGluZSAoc3RyZWFtLCAuLi5zdHJlYW1zKSB7XG4gIGNvbnN0IGFsbCA9IEFycmF5LmlzQXJyYXkoc3RyZWFtKSA/IFsuLi5zdHJlYW0sIC4uLnN0cmVhbXNdIDogW3N0cmVhbSwgLi4uc3RyZWFtc11cbiAgY29uc3QgZG9uZSA9IChhbGwubGVuZ3RoICYmIHR5cGVvZiBhbGxbYWxsLmxlbmd0aCAtIDFdID09PSAnZnVuY3Rpb24nKSA/IGFsbC5wb3AoKSA6IG51bGxcblxuICBpZiAoYWxsLmxlbmd0aCA8IDIpIHRocm93IG5ldyBFcnJvcignUGlwZWxpbmUgcmVxdWlyZXMgYXQgbGVhc3QgMiBzdHJlYW1zJylcblxuICBsZXQgc3JjID0gYWxsWzBdXG4gIGxldCBkZXN0ID0gbnVsbFxuICBsZXQgZXJyb3IgPSBudWxsXG5cbiAgZm9yIChsZXQgaSA9IDE7IGkgPCBhbGwubGVuZ3RoOyBpKyspIHtcbiAgICBkZXN0ID0gYWxsW2ldXG5cbiAgICBpZiAoaXNTdHJlYW14KHNyYykpIHtcbiAgICAgIHNyYy5waXBlKGRlc3QsIG9uZXJyb3IpXG4gICAgfSBlbHNlIHtcbiAgICAgIGVycm9ySGFuZGxlKHNyYywgdHJ1ZSwgaSA+IDEsIG9uZXJyb3IpXG4gICAgICBzcmMucGlwZShkZXN0KVxuICAgIH1cblxuICAgIHNyYyA9IGRlc3RcbiAgfVxuXG4gIGlmIChkb25lKSB7XG4gICAgbGV0IGZpbiA9IGZhbHNlXG5cbiAgICBjb25zdCBhdXRvRGVzdHJveSA9IGlzU3RyZWFteChkZXN0KSB8fCAhIShkZXN0Ll93cml0YWJsZVN0YXRlICYmIGRlc3QuX3dyaXRhYmxlU3RhdGUuYXV0b0Rlc3Ryb3kpXG5cbiAgICBkZXN0Lm9uKCdlcnJvcicsIChlcnIpID0+IHtcbiAgICAgIGlmIChlcnJvciA9PT0gbnVsbCkgZXJyb3IgPSBlcnJcbiAgICB9KVxuXG4gICAgZGVzdC5vbignZmluaXNoJywgKCkgPT4ge1xuICAgICAgZmluID0gdHJ1ZVxuICAgICAgaWYgKCFhdXRvRGVzdHJveSkgZG9uZShlcnJvcilcbiAgICB9KVxuXG4gICAgaWYgKGF1dG9EZXN0cm95KSB7XG4gICAgICBkZXN0Lm9uKCdjbG9zZScsICgpID0+IGRvbmUoZXJyb3IgfHwgKGZpbiA/IG51bGwgOiBQUkVNQVRVUkVfQ0xPU0UpKSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGVzdFxuXG4gIGZ1bmN0aW9uIGVycm9ySGFuZGxlIChzLCByZCwgd3IsIG9uZXJyb3IpIHtcbiAgICBzLm9uKCdlcnJvcicsIG9uZXJyb3IpXG4gICAgcy5vbignY2xvc2UnLCBvbmNsb3NlKVxuXG4gICAgZnVuY3Rpb24gb25jbG9zZSAoKSB7XG4gICAgICBpZiAocmQgJiYgcy5fcmVhZGFibGVTdGF0ZSAmJiAhcy5fcmVhZGFibGVTdGF0ZS5lbmRlZCkgcmV0dXJuIG9uZXJyb3IoUFJFTUFUVVJFX0NMT1NFKVxuICAgICAgaWYgKHdyICYmIHMuX3dyaXRhYmxlU3RhdGUgJiYgIXMuX3dyaXRhYmxlU3RhdGUuZW5kZWQpIHJldHVybiBvbmVycm9yKFBSRU1BVFVSRV9DTE9TRSlcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBvbmVycm9yIChlcnIpIHtcbiAgICBpZiAoIWVyciB8fCBlcnJvcikgcmV0dXJuXG4gICAgZXJyb3IgPSBlcnJcblxuICAgIGZvciAoY29uc3QgcyBvZiBhbGwpIHtcbiAgICAgIHMuZGVzdHJveShlcnIpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGVjaG8gKHMpIHtcbiAgcmV0dXJuIHNcbn1cblxuZnVuY3Rpb24gaXNTdHJlYW0gKHN0cmVhbSkge1xuICByZXR1cm4gISFzdHJlYW0uX3JlYWRhYmxlU3RhdGUgfHwgISFzdHJlYW0uX3dyaXRhYmxlU3RhdGVcbn1cblxuZnVuY3Rpb24gaXNTdHJlYW14IChzdHJlYW0pIHtcbiAgcmV0dXJuIHR5cGVvZiBzdHJlYW0uX2R1cGxleFN0YXRlID09PSAnbnVtYmVyJyAmJiBpc1N0cmVhbShzdHJlYW0pXG59XG5cbmZ1bmN0aW9uIGlzRW5kZWQgKHN0cmVhbSkge1xuICByZXR1cm4gISFzdHJlYW0uX3JlYWRhYmxlU3RhdGUgJiYgc3RyZWFtLl9yZWFkYWJsZVN0YXRlLmVuZGVkXG59XG5cbmZ1bmN0aW9uIGlzRmluaXNoZWQgKHN0cmVhbSkge1xuICByZXR1cm4gISFzdHJlYW0uX3dyaXRhYmxlU3RhdGUgJiYgc3RyZWFtLl93cml0YWJsZVN0YXRlLmVuZGVkXG59XG5cbmZ1bmN0aW9uIGdldFN0cmVhbUVycm9yIChzdHJlYW0sIG9wdHMgPSB7fSkge1xuICBjb25zdCBlcnIgPSAoc3RyZWFtLl9yZWFkYWJsZVN0YXRlICYmIHN0cmVhbS5fcmVhZGFibGVTdGF0ZS5lcnJvcikgfHwgKHN0cmVhbS5fd3JpdGFibGVTdGF0ZSAmJiBzdHJlYW0uX3dyaXRhYmxlU3RhdGUuZXJyb3IpXG5cbiAgLy8gYXZvaWQgaW1wbGljaXQgZXJyb3JzIGJ5IGRlZmF1bHRcbiAgcmV0dXJuICghb3B0cy5hbGwgJiYgZXJyID09PSBTVFJFQU1fREVTVFJPWUVEKSA/IG51bGwgOiBlcnJcbn1cblxuZnVuY3Rpb24gaXNSZWFkU3RyZWFteCAoc3RyZWFtKSB7XG4gIHJldHVybiBpc1N0cmVhbXgoc3RyZWFtKSAmJiBzdHJlYW0ucmVhZGFibGVcbn1cblxuZnVuY3Rpb24gaXNUeXBlZEFycmF5IChkYXRhKSB7XG4gIHJldHVybiB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiYgZGF0YSAhPT0gbnVsbCAmJiB0eXBlb2YgZGF0YS5ieXRlTGVuZ3RoID09PSAnbnVtYmVyJ1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0Qnl0ZUxlbmd0aCAoZGF0YSkge1xuICByZXR1cm4gaXNUeXBlZEFycmF5KGRhdGEpID8gZGF0YS5ieXRlTGVuZ3RoIDogMTAyNFxufVxuXG5mdW5jdGlvbiBub29wICgpIHt9XG5cbmZ1bmN0aW9uIGFib3J0ICgpIHtcbiAgdGhpcy5kZXN0cm95KG5ldyBFcnJvcignU3RyZWFtIGFib3J0ZWQuJykpXG59XG5cbmZ1bmN0aW9uIGlzV3JpdGV2IChzKSB7XG4gIHJldHVybiBzLl93cml0ZXYgIT09IFdyaXRhYmxlLnByb3RvdHlwZS5fd3JpdGV2ICYmIHMuX3dyaXRldiAhPT0gRHVwbGV4LnByb3RvdHlwZS5fd3JpdGV2XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBwaXBlbGluZSxcbiAgcGlwZWxpbmVQcm9taXNlLFxuICBpc1N0cmVhbSxcbiAgaXNTdHJlYW14LFxuICBpc0VuZGVkLFxuICBpc0ZpbmlzaGVkLFxuICBnZXRTdHJlYW1FcnJvcixcbiAgU3RyZWFtLFxuICBXcml0YWJsZSxcbiAgUmVhZGFibGUsXG4gIER1cGxleCxcbiAgVHJhbnNmb3JtLFxuICAvLyBFeHBvcnQgUGFzc1Rocm91Z2ggZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBOb2RlLmpzIGNvcmUncyBzdHJlYW0gbW9kdWxlXG4gIFBhc3NUaHJvdWdoXG59XG4iLAogICAgImZ1bmN0aW9uIGlzQnVmZmVyICh2YWx1ZSkge1xuICByZXR1cm4gQnVmZmVyLmlzQnVmZmVyKHZhbHVlKSB8fCB2YWx1ZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXlcbn1cblxuZnVuY3Rpb24gaXNFbmNvZGluZyAoZW5jb2RpbmcpIHtcbiAgcmV0dXJuIEJ1ZmZlci5pc0VuY29kaW5nKGVuY29kaW5nKVxufVxuXG5mdW5jdGlvbiBhbGxvYyAoc2l6ZSwgZmlsbCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIEJ1ZmZlci5hbGxvYyhzaXplLCBmaWxsLCBlbmNvZGluZylcbn1cblxuZnVuY3Rpb24gYWxsb2NVbnNhZmUgKHNpemUpIHtcbiAgcmV0dXJuIEJ1ZmZlci5hbGxvY1Vuc2FmZShzaXplKVxufVxuXG5mdW5jdGlvbiBhbGxvY1Vuc2FmZVNsb3cgKHNpemUpIHtcbiAgcmV0dXJuIEJ1ZmZlci5hbGxvY1Vuc2FmZVNsb3coc2l6ZSlcbn1cblxuZnVuY3Rpb24gYnl0ZUxlbmd0aCAoc3RyaW5nLCBlbmNvZGluZykge1xuICByZXR1cm4gQnVmZmVyLmJ5dGVMZW5ndGgoc3RyaW5nLCBlbmNvZGluZylcbn1cblxuZnVuY3Rpb24gY29tcGFyZSAoYSwgYikge1xuICByZXR1cm4gQnVmZmVyLmNvbXBhcmUoYSwgYilcbn1cblxuZnVuY3Rpb24gY29uY2F0IChidWZmZXJzLCB0b3RhbExlbmd0aCkge1xuICByZXR1cm4gQnVmZmVyLmNvbmNhdChidWZmZXJzLCB0b3RhbExlbmd0aClcbn1cblxuZnVuY3Rpb24gY29weSAoc291cmNlLCB0YXJnZXQsIHRhcmdldFN0YXJ0LCBzdGFydCwgZW5kKSB7XG4gIHJldHVybiB0b0J1ZmZlcihzb3VyY2UpLmNvcHkodGFyZ2V0LCB0YXJnZXRTdGFydCwgc3RhcnQsIGVuZClcbn1cblxuZnVuY3Rpb24gZXF1YWxzIChhLCBiKSB7XG4gIHJldHVybiB0b0J1ZmZlcihhKS5lcXVhbHMoYilcbn1cblxuZnVuY3Rpb24gZmlsbCAoYnVmZmVyLCB2YWx1ZSwgb2Zmc2V0LCBlbmQsIGVuY29kaW5nKSB7XG4gIHJldHVybiB0b0J1ZmZlcihidWZmZXIpLmZpbGwodmFsdWUsIG9mZnNldCwgZW5kLCBlbmNvZGluZylcbn1cblxuZnVuY3Rpb24gZnJvbSAodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gQnVmZmVyLmZyb20odmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gaW5jbHVkZXMgKGJ1ZmZlciwgdmFsdWUsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiB0b0J1ZmZlcihidWZmZXIpLmluY2x1ZGVzKHZhbHVlLCBieXRlT2Zmc2V0LCBlbmNvZGluZylcbn1cblxuZnVuY3Rpb24gaW5kZXhPZiAoYnVmZmVyLCB2YWx1ZSwgYnlmZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIHRvQnVmZmVyKGJ1ZmZlcikuaW5kZXhPZih2YWx1ZSwgYnlmZU9mZnNldCwgZW5jb2RpbmcpXG59XG5cbmZ1bmN0aW9uIGxhc3RJbmRleE9mIChidWZmZXIsIHZhbHVlLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gdG9CdWZmZXIoYnVmZmVyKS5sYXN0SW5kZXhPZih2YWx1ZSwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpXG59XG5cbmZ1bmN0aW9uIHN3YXAxNiAoYnVmZmVyKSB7XG4gIHJldHVybiB0b0J1ZmZlcihidWZmZXIpLnN3YXAxNigpXG59XG5cbmZ1bmN0aW9uIHN3YXAzMiAoYnVmZmVyKSB7XG4gIHJldHVybiB0b0J1ZmZlcihidWZmZXIpLnN3YXAzMigpXG59XG5cbmZ1bmN0aW9uIHN3YXA2NCAoYnVmZmVyKSB7XG4gIHJldHVybiB0b0J1ZmZlcihidWZmZXIpLnN3YXA2NCgpXG59XG5cbmZ1bmN0aW9uIHRvQnVmZmVyIChidWZmZXIpIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihidWZmZXIpKSByZXR1cm4gYnVmZmVyXG4gIHJldHVybiBCdWZmZXIuZnJvbShidWZmZXIuYnVmZmVyLCBidWZmZXIuYnl0ZU9mZnNldCwgYnVmZmVyLmJ5dGVMZW5ndGgpXG59XG5cbmZ1bmN0aW9uIHRvU3RyaW5nIChidWZmZXIsIGVuY29kaW5nLCBzdGFydCwgZW5kKSB7XG4gIHJldHVybiB0b0J1ZmZlcihidWZmZXIpLnRvU3RyaW5nKGVuY29kaW5nLCBzdGFydCwgZW5kKVxufVxuXG5mdW5jdGlvbiB3cml0ZSAoYnVmZmVyLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoLCBlbmNvZGluZykge1xuICByZXR1cm4gdG9CdWZmZXIoYnVmZmVyKS53cml0ZShzdHJpbmcsIG9mZnNldCwgbGVuZ3RoLCBlbmNvZGluZylcbn1cblxuZnVuY3Rpb24gd3JpdGVEb3VibGVMRSAoYnVmZmVyLCB2YWx1ZSwgb2Zmc2V0KSB7XG4gIHJldHVybiB0b0J1ZmZlcihidWZmZXIpLndyaXRlRG91YmxlTEUodmFsdWUsIG9mZnNldClcbn1cblxuZnVuY3Rpb24gd3JpdGVGbG9hdExFIChidWZmZXIsIHZhbHVlLCBvZmZzZXQpIHtcbiAgcmV0dXJuIHRvQnVmZmVyKGJ1ZmZlcikud3JpdGVGbG9hdExFKHZhbHVlLCBvZmZzZXQpXG59XG5cbmZ1bmN0aW9uIHdyaXRlVUludDMyTEUgKGJ1ZmZlciwgdmFsdWUsIG9mZnNldCkge1xuICByZXR1cm4gdG9CdWZmZXIoYnVmZmVyKS53cml0ZVVJbnQzMkxFKHZhbHVlLCBvZmZzZXQpXG59XG5cbmZ1bmN0aW9uIHdyaXRlSW50MzJMRSAoYnVmZmVyLCB2YWx1ZSwgb2Zmc2V0KSB7XG4gIHJldHVybiB0b0J1ZmZlcihidWZmZXIpLndyaXRlSW50MzJMRSh2YWx1ZSwgb2Zmc2V0KVxufVxuXG5mdW5jdGlvbiByZWFkRG91YmxlTEUgKGJ1ZmZlciwgb2Zmc2V0KSB7XG4gIHJldHVybiB0b0J1ZmZlcihidWZmZXIpLnJlYWREb3VibGVMRShvZmZzZXQpXG59XG5cbmZ1bmN0aW9uIHJlYWRGbG9hdExFIChidWZmZXIsIG9mZnNldCkge1xuICByZXR1cm4gdG9CdWZmZXIoYnVmZmVyKS5yZWFkRmxvYXRMRShvZmZzZXQpXG59XG5cbmZ1bmN0aW9uIHJlYWRVSW50MzJMRSAoYnVmZmVyLCBvZmZzZXQpIHtcbiAgcmV0dXJuIHRvQnVmZmVyKGJ1ZmZlcikucmVhZFVJbnQzMkxFKG9mZnNldClcbn1cblxuZnVuY3Rpb24gcmVhZEludDMyTEUgKGJ1ZmZlciwgb2Zmc2V0KSB7XG4gIHJldHVybiB0b0J1ZmZlcihidWZmZXIpLnJlYWRJbnQzMkxFKG9mZnNldClcbn1cblxuZnVuY3Rpb24gd3JpdGVEb3VibGVCRSAoYnVmZmVyLCB2YWx1ZSwgb2Zmc2V0KSB7XG4gIHJldHVybiB0b0J1ZmZlcihidWZmZXIpLndyaXRlRG91YmxlQkUodmFsdWUsIG9mZnNldClcbn1cblxuZnVuY3Rpb24gd3JpdGVGbG9hdEJFIChidWZmZXIsIHZhbHVlLCBvZmZzZXQpIHtcbiAgcmV0dXJuIHRvQnVmZmVyKGJ1ZmZlcikud3JpdGVGbG9hdEJFKHZhbHVlLCBvZmZzZXQpXG59XG5cbmZ1bmN0aW9uIHdyaXRlVUludDMyQkUgKGJ1ZmZlciwgdmFsdWUsIG9mZnNldCkge1xuICByZXR1cm4gdG9CdWZmZXIoYnVmZmVyKS53cml0ZVVJbnQzMkJFKHZhbHVlLCBvZmZzZXQpXG59XG5cbmZ1bmN0aW9uIHdyaXRlSW50MzJCRSAoYnVmZmVyLCB2YWx1ZSwgb2Zmc2V0KSB7XG4gIHJldHVybiB0b0J1ZmZlcihidWZmZXIpLndyaXRlSW50MzJCRSh2YWx1ZSwgb2Zmc2V0KVxufVxuXG5mdW5jdGlvbiByZWFkRG91YmxlQkUgKGJ1ZmZlciwgb2Zmc2V0KSB7XG4gIHJldHVybiB0b0J1ZmZlcihidWZmZXIpLnJlYWREb3VibGVCRShvZmZzZXQpXG59XG5cbmZ1bmN0aW9uIHJlYWRGbG9hdEJFIChidWZmZXIsIG9mZnNldCkge1xuICByZXR1cm4gdG9CdWZmZXIoYnVmZmVyKS5yZWFkRmxvYXRCRShvZmZzZXQpXG59XG5cbmZ1bmN0aW9uIHJlYWRVSW50MzJCRSAoYnVmZmVyLCBvZmZzZXQpIHtcbiAgcmV0dXJuIHRvQnVmZmVyKGJ1ZmZlcikucmVhZFVJbnQzMkJFKG9mZnNldClcbn1cblxuZnVuY3Rpb24gcmVhZEludDMyQkUgKGJ1ZmZlciwgb2Zmc2V0KSB7XG4gIHJldHVybiB0b0J1ZmZlcihidWZmZXIpLnJlYWRJbnQzMkJFKG9mZnNldClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGlzQnVmZmVyLFxuICBpc0VuY29kaW5nLFxuICBhbGxvYyxcbiAgYWxsb2NVbnNhZmUsXG4gIGFsbG9jVW5zYWZlU2xvdyxcbiAgYnl0ZUxlbmd0aCxcbiAgY29tcGFyZSxcbiAgY29uY2F0LFxuICBjb3B5LFxuICBlcXVhbHMsXG4gIGZpbGwsXG4gIGZyb20sXG4gIGluY2x1ZGVzLFxuICBpbmRleE9mLFxuICBsYXN0SW5kZXhPZixcbiAgc3dhcDE2LFxuICBzd2FwMzIsXG4gIHN3YXA2NCxcbiAgdG9CdWZmZXIsXG4gIHRvU3RyaW5nLFxuICB3cml0ZSxcbiAgd3JpdGVEb3VibGVMRSxcbiAgd3JpdGVGbG9hdExFLFxuICB3cml0ZVVJbnQzMkxFLFxuICB3cml0ZUludDMyTEUsXG4gIHJlYWREb3VibGVMRSxcbiAgcmVhZEZsb2F0TEUsXG4gIHJlYWRVSW50MzJMRSxcbiAgcmVhZEludDMyTEUsXG4gIHdyaXRlRG91YmxlQkUsXG4gIHdyaXRlRmxvYXRCRSxcbiAgd3JpdGVVSW50MzJCRSxcbiAgd3JpdGVJbnQzMkJFLFxuICByZWFkRG91YmxlQkUsXG4gIHJlYWRGbG9hdEJFLFxuICByZWFkVUludDMyQkUsXG4gIHJlYWRJbnQzMkJFXG5cbn1cbiIsCiAgICAiY29uc3QgYjRhID0gcmVxdWlyZSgnYjRhJylcblxuY29uc3QgWkVST1MgPSAnMDAwMDAwMDAwMDAwMDAwMDAwMCdcbmNvbnN0IFNFVkVOUyA9ICc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3J1xuY29uc3QgWkVST19PRkZTRVQgPSAnMCcuY2hhckNvZGVBdCgwKVxuY29uc3QgVVNUQVJfTUFHSUMgPSBiNGEuZnJvbShbMHg3NSwgMHg3MywgMHg3NCwgMHg2MSwgMHg3MiwgMHgwMF0pIC8vIHVzdGFyXFx4MDBcbmNvbnN0IFVTVEFSX1ZFUiA9IGI0YS5mcm9tKFtaRVJPX09GRlNFVCwgWkVST19PRkZTRVRdKVxuY29uc3QgR05VX01BR0lDID0gYjRhLmZyb20oWzB4NzUsIDB4NzMsIDB4NzQsIDB4NjEsIDB4NzIsIDB4MjBdKSAvLyB1c3RhclxceDIwXG5jb25zdCBHTlVfVkVSID0gYjRhLmZyb20oWzB4MjAsIDB4MDBdKVxuY29uc3QgTUFTSyA9IDBvNzc3N1xuY29uc3QgTUFHSUNfT0ZGU0VUID0gMjU3XG5jb25zdCBWRVJTSU9OX09GRlNFVCA9IDI2M1xuXG5leHBvcnRzLmRlY29kZUxvbmdQYXRoID0gZnVuY3Rpb24gZGVjb2RlTG9uZ1BhdGggKGJ1ZiwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGRlY29kZVN0cihidWYsIDAsIGJ1Zi5sZW5ndGgsIGVuY29kaW5nKVxufVxuXG5leHBvcnRzLmVuY29kZVBheCA9IGZ1bmN0aW9uIGVuY29kZVBheCAob3B0cykgeyAvLyBUT0RPOiBlbmNvZGUgbW9yZSBzdHVmZiBpbiBwYXhcbiAgbGV0IHJlc3VsdCA9ICcnXG4gIGlmIChvcHRzLm5hbWUpIHJlc3VsdCArPSBhZGRMZW5ndGgoJyBwYXRoPScgKyBvcHRzLm5hbWUgKyAnXFxuJylcbiAgaWYgKG9wdHMubGlua25hbWUpIHJlc3VsdCArPSBhZGRMZW5ndGgoJyBsaW5rcGF0aD0nICsgb3B0cy5saW5rbmFtZSArICdcXG4nKVxuICBjb25zdCBwYXggPSBvcHRzLnBheFxuICBpZiAocGF4KSB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gcGF4KSB7XG4gICAgICByZXN1bHQgKz0gYWRkTGVuZ3RoKCcgJyArIGtleSArICc9JyArIHBheFtrZXldICsgJ1xcbicpXG4gICAgfVxuICB9XG4gIHJldHVybiBiNGEuZnJvbShyZXN1bHQpXG59XG5cbmV4cG9ydHMuZGVjb2RlUGF4ID0gZnVuY3Rpb24gZGVjb2RlUGF4IChidWYpIHtcbiAgY29uc3QgcmVzdWx0ID0ge31cblxuICB3aGlsZSAoYnVmLmxlbmd0aCkge1xuICAgIGxldCBpID0gMFxuICAgIHdoaWxlIChpIDwgYnVmLmxlbmd0aCAmJiBidWZbaV0gIT09IDMyKSBpKytcbiAgICBjb25zdCBsZW4gPSBwYXJzZUludChiNGEudG9TdHJpbmcoYnVmLnN1YmFycmF5KDAsIGkpKSwgMTApXG4gICAgaWYgKCFsZW4pIHJldHVybiByZXN1bHRcblxuICAgIGNvbnN0IGIgPSBiNGEudG9TdHJpbmcoYnVmLnN1YmFycmF5KGkgKyAxLCBsZW4gLSAxKSlcbiAgICBjb25zdCBrZXlJbmRleCA9IGIuaW5kZXhPZignPScpXG4gICAgaWYgKGtleUluZGV4ID09PSAtMSkgcmV0dXJuIHJlc3VsdFxuICAgIHJlc3VsdFtiLnNsaWNlKDAsIGtleUluZGV4KV0gPSBiLnNsaWNlKGtleUluZGV4ICsgMSlcblxuICAgIGJ1ZiA9IGJ1Zi5zdWJhcnJheShsZW4pXG4gIH1cblxuICByZXR1cm4gcmVzdWx0XG59XG5cbmV4cG9ydHMuZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlIChvcHRzKSB7XG4gIGNvbnN0IGJ1ZiA9IGI0YS5hbGxvYyg1MTIpXG4gIGxldCBuYW1lID0gb3B0cy5uYW1lXG4gIGxldCBwcmVmaXggPSAnJ1xuXG4gIGlmIChvcHRzLnR5cGVmbGFnID09PSA1ICYmIG5hbWVbbmFtZS5sZW5ndGggLSAxXSAhPT0gJy8nKSBuYW1lICs9ICcvJ1xuICBpZiAoYjRhLmJ5dGVMZW5ndGgobmFtZSkgIT09IG5hbWUubGVuZ3RoKSByZXR1cm4gbnVsbCAvLyB1dGYtOFxuXG4gIHdoaWxlIChiNGEuYnl0ZUxlbmd0aChuYW1lKSA+IDEwMCkge1xuICAgIGNvbnN0IGkgPSBuYW1lLmluZGV4T2YoJy8nKVxuICAgIGlmIChpID09PSAtMSkgcmV0dXJuIG51bGxcbiAgICBwcmVmaXggKz0gcHJlZml4ID8gJy8nICsgbmFtZS5zbGljZSgwLCBpKSA6IG5hbWUuc2xpY2UoMCwgaSlcbiAgICBuYW1lID0gbmFtZS5zbGljZShpICsgMSlcbiAgfVxuXG4gIGlmIChiNGEuYnl0ZUxlbmd0aChuYW1lKSA+IDEwMCB8fCBiNGEuYnl0ZUxlbmd0aChwcmVmaXgpID4gMTU1KSByZXR1cm4gbnVsbFxuICBpZiAob3B0cy5saW5rbmFtZSAmJiBiNGEuYnl0ZUxlbmd0aChvcHRzLmxpbmtuYW1lKSA+IDEwMCkgcmV0dXJuIG51bGxcblxuICBiNGEud3JpdGUoYnVmLCBuYW1lKVxuICBiNGEud3JpdGUoYnVmLCBlbmNvZGVPY3Qob3B0cy5tb2RlICYgTUFTSywgNiksIDEwMClcbiAgYjRhLndyaXRlKGJ1ZiwgZW5jb2RlT2N0KG9wdHMudWlkLCA2KSwgMTA4KVxuICBiNGEud3JpdGUoYnVmLCBlbmNvZGVPY3Qob3B0cy5naWQsIDYpLCAxMTYpXG4gIGVuY29kZVNpemUob3B0cy5zaXplLCBidWYsIDEyNClcbiAgYjRhLndyaXRlKGJ1ZiwgZW5jb2RlT2N0KChvcHRzLm10aW1lLmdldFRpbWUoKSAvIDEwMDApIHwgMCwgMTEpLCAxMzYpXG5cbiAgYnVmWzE1Nl0gPSBaRVJPX09GRlNFVCArIHRvVHlwZWZsYWcob3B0cy50eXBlKVxuXG4gIGlmIChvcHRzLmxpbmtuYW1lKSBiNGEud3JpdGUoYnVmLCBvcHRzLmxpbmtuYW1lLCAxNTcpXG5cbiAgYjRhLmNvcHkoVVNUQVJfTUFHSUMsIGJ1ZiwgTUFHSUNfT0ZGU0VUKVxuICBiNGEuY29weShVU1RBUl9WRVIsIGJ1ZiwgVkVSU0lPTl9PRkZTRVQpXG4gIGlmIChvcHRzLnVuYW1lKSBiNGEud3JpdGUoYnVmLCBvcHRzLnVuYW1lLCAyNjUpXG4gIGlmIChvcHRzLmduYW1lKSBiNGEud3JpdGUoYnVmLCBvcHRzLmduYW1lLCAyOTcpXG4gIGI0YS53cml0ZShidWYsIGVuY29kZU9jdChvcHRzLmRldm1ham9yIHx8IDAsIDYpLCAzMjkpXG4gIGI0YS53cml0ZShidWYsIGVuY29kZU9jdChvcHRzLmRldm1pbm9yIHx8IDAsIDYpLCAzMzcpXG5cbiAgaWYgKHByZWZpeCkgYjRhLndyaXRlKGJ1ZiwgcHJlZml4LCAzNDUpXG5cbiAgYjRhLndyaXRlKGJ1ZiwgZW5jb2RlT2N0KGNrc3VtKGJ1ZiksIDYpLCAxNDgpXG5cbiAgcmV0dXJuIGJ1ZlxufVxuXG5leHBvcnRzLmRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZSAoYnVmLCBmaWxlbmFtZUVuY29kaW5nLCBhbGxvd1Vua25vd25Gb3JtYXQpIHtcbiAgbGV0IHR5cGVmbGFnID0gYnVmWzE1Nl0gPT09IDAgPyAwIDogYnVmWzE1Nl0gLSBaRVJPX09GRlNFVFxuXG4gIGxldCBuYW1lID0gZGVjb2RlU3RyKGJ1ZiwgMCwgMTAwLCBmaWxlbmFtZUVuY29kaW5nKVxuICBjb25zdCBtb2RlID0gZGVjb2RlT2N0KGJ1ZiwgMTAwLCA4KVxuICBjb25zdCB1aWQgPSBkZWNvZGVPY3QoYnVmLCAxMDgsIDgpXG4gIGNvbnN0IGdpZCA9IGRlY29kZU9jdChidWYsIDExNiwgOClcbiAgY29uc3Qgc2l6ZSA9IGRlY29kZU9jdChidWYsIDEyNCwgMTIpXG4gIGNvbnN0IG10aW1lID0gZGVjb2RlT2N0KGJ1ZiwgMTM2LCAxMilcbiAgY29uc3QgdHlwZSA9IHRvVHlwZSh0eXBlZmxhZylcbiAgY29uc3QgbGlua25hbWUgPSBidWZbMTU3XSA9PT0gMCA/IG51bGwgOiBkZWNvZGVTdHIoYnVmLCAxNTcsIDEwMCwgZmlsZW5hbWVFbmNvZGluZylcbiAgY29uc3QgdW5hbWUgPSBkZWNvZGVTdHIoYnVmLCAyNjUsIDMyKVxuICBjb25zdCBnbmFtZSA9IGRlY29kZVN0cihidWYsIDI5NywgMzIpXG4gIGNvbnN0IGRldm1ham9yID0gZGVjb2RlT2N0KGJ1ZiwgMzI5LCA4KVxuICBjb25zdCBkZXZtaW5vciA9IGRlY29kZU9jdChidWYsIDMzNywgOClcblxuICBjb25zdCBjID0gY2tzdW0oYnVmKVxuXG4gIC8vIGNoZWNrc3VtIGlzIHN0aWxsIGluaXRpYWwgdmFsdWUgaWYgaGVhZGVyIHdhcyBudWxsLlxuICBpZiAoYyA9PT0gOCAqIDMyKSByZXR1cm4gbnVsbFxuXG4gIC8vIHZhbGlkIGNoZWNrc3VtXG4gIGlmIChjICE9PSBkZWNvZGVPY3QoYnVmLCAxNDgsIDgpKSB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdGFyIGhlYWRlci4gTWF5YmUgdGhlIHRhciBpcyBjb3JydXB0ZWQgb3IgaXQgbmVlZHMgdG8gYmUgZ3VuemlwcGVkPycpXG5cbiAgaWYgKGlzVVNUQVIoYnVmKSkge1xuICAgIC8vIHVzdGFyIChwb3NpeCkgZm9ybWF0LlxuICAgIC8vIHByZXBlbmQgcHJlZml4LCBpZiBwcmVzZW50LlxuICAgIGlmIChidWZbMzQ1XSkgbmFtZSA9IGRlY29kZVN0cihidWYsIDM0NSwgMTU1LCBmaWxlbmFtZUVuY29kaW5nKSArICcvJyArIG5hbWVcbiAgfSBlbHNlIGlmIChpc0dOVShidWYpKSB7XG4gICAgLy8gJ2dudScvJ29sZGdudScgZm9ybWF0LiBTaW1pbGFyIHRvIHVzdGFyLCBidXQgaGFzIHN1cHBvcnQgZm9yIGluY3JlbWVudGFsIGFuZFxuICAgIC8vIG11bHRpLXZvbHVtZSB0YXJiYWxscy5cbiAgfSBlbHNlIHtcbiAgICBpZiAoIWFsbG93VW5rbm93bkZvcm1hdCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHRhciBoZWFkZXI6IHVua25vd24gZm9ybWF0LicpXG4gICAgfVxuICB9XG5cbiAgLy8gdG8gc3VwcG9ydCBvbGQgdGFyIHZlcnNpb25zIHRoYXQgdXNlIHRyYWlsaW5nIC8gdG8gaW5kaWNhdGUgZGlyc1xuICBpZiAodHlwZWZsYWcgPT09IDAgJiYgbmFtZSAmJiBuYW1lW25hbWUubGVuZ3RoIC0gMV0gPT09ICcvJykgdHlwZWZsYWcgPSA1XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lLFxuICAgIG1vZGUsXG4gICAgdWlkLFxuICAgIGdpZCxcbiAgICBzaXplLFxuICAgIG10aW1lOiBuZXcgRGF0ZSgxMDAwICogbXRpbWUpLFxuICAgIHR5cGUsXG4gICAgbGlua25hbWUsXG4gICAgdW5hbWUsXG4gICAgZ25hbWUsXG4gICAgZGV2bWFqb3IsXG4gICAgZGV2bWlub3IsXG4gICAgcGF4OiBudWxsXG4gIH1cbn1cblxuZnVuY3Rpb24gaXNVU1RBUiAoYnVmKSB7XG4gIHJldHVybiBiNGEuZXF1YWxzKFVTVEFSX01BR0lDLCBidWYuc3ViYXJyYXkoTUFHSUNfT0ZGU0VULCBNQUdJQ19PRkZTRVQgKyA2KSlcbn1cblxuZnVuY3Rpb24gaXNHTlUgKGJ1Zikge1xuICByZXR1cm4gYjRhLmVxdWFscyhHTlVfTUFHSUMsIGJ1Zi5zdWJhcnJheShNQUdJQ19PRkZTRVQsIE1BR0lDX09GRlNFVCArIDYpKSAmJlxuICAgIGI0YS5lcXVhbHMoR05VX1ZFUiwgYnVmLnN1YmFycmF5KFZFUlNJT05fT0ZGU0VULCBWRVJTSU9OX09GRlNFVCArIDIpKVxufVxuXG5mdW5jdGlvbiBjbGFtcCAoaW5kZXgsIGxlbiwgZGVmYXVsdFZhbHVlKSB7XG4gIGlmICh0eXBlb2YgaW5kZXggIT09ICdudW1iZXInKSByZXR1cm4gZGVmYXVsdFZhbHVlXG4gIGluZGV4ID0gfn5pbmRleCAvLyBDb2VyY2UgdG8gaW50ZWdlci5cbiAgaWYgKGluZGV4ID49IGxlbikgcmV0dXJuIGxlblxuICBpZiAoaW5kZXggPj0gMCkgcmV0dXJuIGluZGV4XG4gIGluZGV4ICs9IGxlblxuICBpZiAoaW5kZXggPj0gMCkgcmV0dXJuIGluZGV4XG4gIHJldHVybiAwXG59XG5cbmZ1bmN0aW9uIHRvVHlwZSAoZmxhZykge1xuICBzd2l0Y2ggKGZsYWcpIHtcbiAgICBjYXNlIDA6XG4gICAgICByZXR1cm4gJ2ZpbGUnXG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuICdsaW5rJ1xuICAgIGNhc2UgMjpcbiAgICAgIHJldHVybiAnc3ltbGluaydcbiAgICBjYXNlIDM6XG4gICAgICByZXR1cm4gJ2NoYXJhY3Rlci1kZXZpY2UnXG4gICAgY2FzZSA0OlxuICAgICAgcmV0dXJuICdibG9jay1kZXZpY2UnXG4gICAgY2FzZSA1OlxuICAgICAgcmV0dXJuICdkaXJlY3RvcnknXG4gICAgY2FzZSA2OlxuICAgICAgcmV0dXJuICdmaWZvJ1xuICAgIGNhc2UgNzpcbiAgICAgIHJldHVybiAnY29udGlndW91cy1maWxlJ1xuICAgIGNhc2UgNzI6XG4gICAgICByZXR1cm4gJ3BheC1oZWFkZXInXG4gICAgY2FzZSA1NTpcbiAgICAgIHJldHVybiAncGF4LWdsb2JhbC1oZWFkZXInXG4gICAgY2FzZSAyNzpcbiAgICAgIHJldHVybiAnZ251LWxvbmctbGluay1wYXRoJ1xuICAgIGNhc2UgMjg6XG4gICAgY2FzZSAzMDpcbiAgICAgIHJldHVybiAnZ251LWxvbmctcGF0aCdcbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG5cbmZ1bmN0aW9uIHRvVHlwZWZsYWcgKGZsYWcpIHtcbiAgc3dpdGNoIChmbGFnKSB7XG4gICAgY2FzZSAnZmlsZSc6XG4gICAgICByZXR1cm4gMFxuICAgIGNhc2UgJ2xpbmsnOlxuICAgICAgcmV0dXJuIDFcbiAgICBjYXNlICdzeW1saW5rJzpcbiAgICAgIHJldHVybiAyXG4gICAgY2FzZSAnY2hhcmFjdGVyLWRldmljZSc6XG4gICAgICByZXR1cm4gM1xuICAgIGNhc2UgJ2Jsb2NrLWRldmljZSc6XG4gICAgICByZXR1cm4gNFxuICAgIGNhc2UgJ2RpcmVjdG9yeSc6XG4gICAgICByZXR1cm4gNVxuICAgIGNhc2UgJ2ZpZm8nOlxuICAgICAgcmV0dXJuIDZcbiAgICBjYXNlICdjb250aWd1b3VzLWZpbGUnOlxuICAgICAgcmV0dXJuIDdcbiAgICBjYXNlICdwYXgtaGVhZGVyJzpcbiAgICAgIHJldHVybiA3MlxuICB9XG5cbiAgcmV0dXJuIDBcbn1cblxuZnVuY3Rpb24gaW5kZXhPZiAoYmxvY2ssIG51bSwgb2Zmc2V0LCBlbmQpIHtcbiAgZm9yICg7IG9mZnNldCA8IGVuZDsgb2Zmc2V0KyspIHtcbiAgICBpZiAoYmxvY2tbb2Zmc2V0XSA9PT0gbnVtKSByZXR1cm4gb2Zmc2V0XG4gIH1cbiAgcmV0dXJuIGVuZFxufVxuXG5mdW5jdGlvbiBja3N1bSAoYmxvY2spIHtcbiAgbGV0IHN1bSA9IDggKiAzMlxuICBmb3IgKGxldCBpID0gMDsgaSA8IDE0ODsgaSsrKSBzdW0gKz0gYmxvY2tbaV1cbiAgZm9yIChsZXQgaiA9IDE1NjsgaiA8IDUxMjsgaisrKSBzdW0gKz0gYmxvY2tbal1cbiAgcmV0dXJuIHN1bVxufVxuXG5mdW5jdGlvbiBlbmNvZGVPY3QgKHZhbCwgbikge1xuICB2YWwgPSB2YWwudG9TdHJpbmcoOClcbiAgaWYgKHZhbC5sZW5ndGggPiBuKSByZXR1cm4gU0VWRU5TLnNsaWNlKDAsIG4pICsgJyAnXG4gIHJldHVybiBaRVJPUy5zbGljZSgwLCBuIC0gdmFsLmxlbmd0aCkgKyB2YWwgKyAnICdcbn1cblxuZnVuY3Rpb24gZW5jb2RlU2l6ZUJpbiAobnVtLCBidWYsIG9mZikge1xuICBidWZbb2ZmXSA9IDB4ODBcbiAgZm9yIChsZXQgaSA9IDExOyBpID4gMDsgaS0tKSB7XG4gICAgYnVmW29mZiArIGldID0gbnVtICYgMHhmZlxuICAgIG51bSA9IE1hdGguZmxvb3IobnVtIC8gMHgxMDApXG4gIH1cbn1cblxuZnVuY3Rpb24gZW5jb2RlU2l6ZSAobnVtLCBidWYsIG9mZikge1xuICBpZiAobnVtLnRvU3RyaW5nKDgpLmxlbmd0aCA+IDExKSB7XG4gICAgZW5jb2RlU2l6ZUJpbihudW0sIGJ1Ziwgb2ZmKVxuICB9IGVsc2Uge1xuICAgIGI0YS53cml0ZShidWYsIGVuY29kZU9jdChudW0sIDExKSwgb2ZmKVxuICB9XG59XG5cbi8qIENvcGllZCBmcm9tIHRoZSBub2RlLXRhciByZXBvIGFuZCBtb2RpZmllZCB0byBtZWV0XG4gKiB0YXItc3RyZWFtIGNvZGluZyBzdGFuZGFyZC5cbiAqXG4gKiBTb3VyY2U6IGh0dHBzOi8vZ2l0aHViLmNvbS9ucG0vbm9kZS10YXIvYmxvYi81MWI2NjI3YTFmMzU3ZDJlYjQzM2U3Mzc4ZTVmMDVlODNiN2FhNmNkL2xpYi9oZWFkZXIuanMjTDM0OVxuICovXG5mdW5jdGlvbiBwYXJzZTI1NiAoYnVmKSB7XG4gIC8vIGZpcnN0IGJ5dGUgTVVTVCBiZSBlaXRoZXIgODAgb3IgRkZcbiAgLy8gODAgZm9yIHBvc2l0aXZlLCBGRiBmb3IgMidzIGNvbXBcbiAgbGV0IHBvc2l0aXZlXG4gIGlmIChidWZbMF0gPT09IDB4ODApIHBvc2l0aXZlID0gdHJ1ZVxuICBlbHNlIGlmIChidWZbMF0gPT09IDB4RkYpIHBvc2l0aXZlID0gZmFsc2VcbiAgZWxzZSByZXR1cm4gbnVsbFxuXG4gIC8vIGJ1aWxkIHVwIGEgYmFzZS0yNTYgdHVwbGUgZnJvbSB0aGUgbGVhc3Qgc2lnIHRvIHRoZSBoaWdoZXN0XG4gIGNvbnN0IHR1cGxlID0gW11cbiAgbGV0IGlcbiAgZm9yIChpID0gYnVmLmxlbmd0aCAtIDE7IGkgPiAwOyBpLS0pIHtcbiAgICBjb25zdCBieXRlID0gYnVmW2ldXG4gICAgaWYgKHBvc2l0aXZlKSB0dXBsZS5wdXNoKGJ5dGUpXG4gICAgZWxzZSB0dXBsZS5wdXNoKDB4RkYgLSBieXRlKVxuICB9XG5cbiAgbGV0IHN1bSA9IDBcbiAgY29uc3QgbCA9IHR1cGxlLmxlbmd0aFxuICBmb3IgKGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgc3VtICs9IHR1cGxlW2ldICogTWF0aC5wb3coMjU2LCBpKVxuICB9XG5cbiAgcmV0dXJuIHBvc2l0aXZlID8gc3VtIDogLTEgKiBzdW1cbn1cblxuZnVuY3Rpb24gZGVjb2RlT2N0ICh2YWwsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHZhbCA9IHZhbC5zdWJhcnJheShvZmZzZXQsIG9mZnNldCArIGxlbmd0aClcbiAgb2Zmc2V0ID0gMFxuXG4gIC8vIElmIHByZWZpeGVkIHdpdGggMHg4MCB0aGVuIHBhcnNlIGFzIGEgYmFzZS0yNTYgaW50ZWdlclxuICBpZiAodmFsW29mZnNldF0gJiAweDgwKSB7XG4gICAgcmV0dXJuIHBhcnNlMjU2KHZhbClcbiAgfSBlbHNlIHtcbiAgICAvLyBPbGRlciB2ZXJzaW9ucyBvZiB0YXIgY2FuIHByZWZpeCB3aXRoIHNwYWNlc1xuICAgIHdoaWxlIChvZmZzZXQgPCB2YWwubGVuZ3RoICYmIHZhbFtvZmZzZXRdID09PSAzMikgb2Zmc2V0KytcbiAgICBjb25zdCBlbmQgPSBjbGFtcChpbmRleE9mKHZhbCwgMzIsIG9mZnNldCwgdmFsLmxlbmd0aCksIHZhbC5sZW5ndGgsIHZhbC5sZW5ndGgpXG4gICAgd2hpbGUgKG9mZnNldCA8IGVuZCAmJiB2YWxbb2Zmc2V0XSA9PT0gMCkgb2Zmc2V0KytcbiAgICBpZiAoZW5kID09PSBvZmZzZXQpIHJldHVybiAwXG4gICAgcmV0dXJuIHBhcnNlSW50KGI0YS50b1N0cmluZyh2YWwuc3ViYXJyYXkob2Zmc2V0LCBlbmQpKSwgOClcbiAgfVxufVxuXG5mdW5jdGlvbiBkZWNvZGVTdHIgKHZhbCwgb2Zmc2V0LCBsZW5ndGgsIGVuY29kaW5nKSB7XG4gIHJldHVybiBiNGEudG9TdHJpbmcodmFsLnN1YmFycmF5KG9mZnNldCwgaW5kZXhPZih2YWwsIDAsIG9mZnNldCwgb2Zmc2V0ICsgbGVuZ3RoKSksIGVuY29kaW5nKVxufVxuXG5mdW5jdGlvbiBhZGRMZW5ndGggKHN0cikge1xuICBjb25zdCBsZW4gPSBiNGEuYnl0ZUxlbmd0aChzdHIpXG4gIGxldCBkaWdpdHMgPSBNYXRoLmZsb29yKE1hdGgubG9nKGxlbikgLyBNYXRoLmxvZygxMCkpICsgMVxuICBpZiAobGVuICsgZGlnaXRzID49IE1hdGgucG93KDEwLCBkaWdpdHMpKSBkaWdpdHMrK1xuXG4gIHJldHVybiAobGVuICsgZGlnaXRzKSArIHN0clxufVxuIiwKICAgICJjb25zdCB7IFdyaXRhYmxlLCBSZWFkYWJsZSwgZ2V0U3RyZWFtRXJyb3IgfSA9IHJlcXVpcmUoJ3N0cmVhbXgnKVxuY29uc3QgRklGTyA9IHJlcXVpcmUoJ2Zhc3QtZmlmbycpXG5jb25zdCBiNGEgPSByZXF1aXJlKCdiNGEnKVxuY29uc3QgaGVhZGVycyA9IHJlcXVpcmUoJy4vaGVhZGVycycpXG5cbmNvbnN0IEVNUFRZID0gYjRhLmFsbG9jKDApXG5cbmNsYXNzIEJ1ZmZlckxpc3Qge1xuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgdGhpcy5idWZmZXJlZCA9IDBcbiAgICB0aGlzLnNoaWZ0ZWQgPSAwXG4gICAgdGhpcy5xdWV1ZSA9IG5ldyBGSUZPKClcblxuICAgIHRoaXMuX29mZnNldCA9IDBcbiAgfVxuXG4gIHB1c2ggKGJ1ZmZlcikge1xuICAgIHRoaXMuYnVmZmVyZWQgKz0gYnVmZmVyLmJ5dGVMZW5ndGhcbiAgICB0aGlzLnF1ZXVlLnB1c2goYnVmZmVyKVxuICB9XG5cbiAgc2hpZnRGaXJzdCAoc2l6ZSkge1xuICAgIHJldHVybiB0aGlzLl9idWZmZXJlZCA9PT0gMCA/IG51bGwgOiB0aGlzLl9uZXh0KHNpemUpXG4gIH1cblxuICBzaGlmdCAoc2l6ZSkge1xuICAgIGlmIChzaXplID4gdGhpcy5idWZmZXJlZCkgcmV0dXJuIG51bGxcbiAgICBpZiAoc2l6ZSA9PT0gMCkgcmV0dXJuIEVNUFRZXG5cbiAgICBsZXQgY2h1bmsgPSB0aGlzLl9uZXh0KHNpemUpXG5cbiAgICBpZiAoc2l6ZSA9PT0gY2h1bmsuYnl0ZUxlbmd0aCkgcmV0dXJuIGNodW5rIC8vIGxpa2VseSBjYXNlXG5cbiAgICBjb25zdCBjaHVua3MgPSBbY2h1bmtdXG5cbiAgICB3aGlsZSAoKHNpemUgLT0gY2h1bmsuYnl0ZUxlbmd0aCkgPiAwKSB7XG4gICAgICBjaHVuayA9IHRoaXMuX25leHQoc2l6ZSlcbiAgICAgIGNodW5rcy5wdXNoKGNodW5rKVxuICAgIH1cblxuICAgIHJldHVybiBiNGEuY29uY2F0KGNodW5rcylcbiAgfVxuXG4gIF9uZXh0IChzaXplKSB7XG4gICAgY29uc3QgYnVmID0gdGhpcy5xdWV1ZS5wZWVrKClcbiAgICBjb25zdCByZW0gPSBidWYuYnl0ZUxlbmd0aCAtIHRoaXMuX29mZnNldFxuXG4gICAgaWYgKHNpemUgPj0gcmVtKSB7XG4gICAgICBjb25zdCBzdWIgPSB0aGlzLl9vZmZzZXQgPyBidWYuc3ViYXJyYXkodGhpcy5fb2Zmc2V0LCBidWYuYnl0ZUxlbmd0aCkgOiBidWZcbiAgICAgIHRoaXMucXVldWUuc2hpZnQoKVxuICAgICAgdGhpcy5fb2Zmc2V0ID0gMFxuICAgICAgdGhpcy5idWZmZXJlZCAtPSByZW1cbiAgICAgIHRoaXMuc2hpZnRlZCArPSByZW1cbiAgICAgIHJldHVybiBzdWJcbiAgICB9XG5cbiAgICB0aGlzLmJ1ZmZlcmVkIC09IHNpemVcbiAgICB0aGlzLnNoaWZ0ZWQgKz0gc2l6ZVxuXG4gICAgcmV0dXJuIGJ1Zi5zdWJhcnJheSh0aGlzLl9vZmZzZXQsICh0aGlzLl9vZmZzZXQgKz0gc2l6ZSkpXG4gIH1cbn1cblxuY2xhc3MgU291cmNlIGV4dGVuZHMgUmVhZGFibGUge1xuICBjb25zdHJ1Y3RvciAoc2VsZiwgaGVhZGVyLCBvZmZzZXQpIHtcbiAgICBzdXBlcigpXG5cbiAgICB0aGlzLmhlYWRlciA9IGhlYWRlclxuICAgIHRoaXMub2Zmc2V0ID0gb2Zmc2V0XG5cbiAgICB0aGlzLl9wYXJlbnQgPSBzZWxmXG4gIH1cblxuICBfcmVhZCAoY2IpIHtcbiAgICBpZiAodGhpcy5oZWFkZXIuc2l6ZSA9PT0gMCkge1xuICAgICAgdGhpcy5wdXNoKG51bGwpXG4gICAgfVxuICAgIGlmICh0aGlzLl9wYXJlbnQuX3N0cmVhbSA9PT0gdGhpcykge1xuICAgICAgdGhpcy5fcGFyZW50Ll91cGRhdGUoKVxuICAgIH1cbiAgICBjYihudWxsKVxuICB9XG5cbiAgX3ByZWRlc3Ryb3kgKCkge1xuICAgIHRoaXMuX3BhcmVudC5kZXN0cm95KGdldFN0cmVhbUVycm9yKHRoaXMpKVxuICB9XG5cbiAgX2RldGFjaCAoKSB7XG4gICAgaWYgKHRoaXMuX3BhcmVudC5fc3RyZWFtID09PSB0aGlzKSB7XG4gICAgICB0aGlzLl9wYXJlbnQuX3N0cmVhbSA9IG51bGxcbiAgICAgIHRoaXMuX3BhcmVudC5fbWlzc2luZyA9IG92ZXJmbG93KHRoaXMuaGVhZGVyLnNpemUpXG4gICAgICB0aGlzLl9wYXJlbnQuX3VwZGF0ZSgpXG4gICAgfVxuICB9XG5cbiAgX2Rlc3Ryb3kgKGNiKSB7XG4gICAgdGhpcy5fZGV0YWNoKClcbiAgICBjYihudWxsKVxuICB9XG59XG5cbmNsYXNzIEV4dHJhY3QgZXh0ZW5kcyBXcml0YWJsZSB7XG4gIGNvbnN0cnVjdG9yIChvcHRzKSB7XG4gICAgc3VwZXIob3B0cylcblxuICAgIGlmICghb3B0cykgb3B0cyA9IHt9XG5cbiAgICB0aGlzLl9idWZmZXIgPSBuZXcgQnVmZmVyTGlzdCgpXG4gICAgdGhpcy5fb2Zmc2V0ID0gMFxuICAgIHRoaXMuX2hlYWRlciA9IG51bGxcbiAgICB0aGlzLl9zdHJlYW0gPSBudWxsXG4gICAgdGhpcy5fbWlzc2luZyA9IDBcbiAgICB0aGlzLl9sb25nSGVhZGVyID0gZmFsc2VcbiAgICB0aGlzLl9jYWxsYmFjayA9IG5vb3BcbiAgICB0aGlzLl9sb2NrZWQgPSBmYWxzZVxuICAgIHRoaXMuX2ZpbmlzaGVkID0gZmFsc2VcbiAgICB0aGlzLl9wYXggPSBudWxsXG4gICAgdGhpcy5fcGF4R2xvYmFsID0gbnVsbFxuICAgIHRoaXMuX2dudUxvbmdQYXRoID0gbnVsbFxuICAgIHRoaXMuX2dudUxvbmdMaW5rUGF0aCA9IG51bGxcbiAgICB0aGlzLl9maWxlbmFtZUVuY29kaW5nID0gb3B0cy5maWxlbmFtZUVuY29kaW5nIHx8ICd1dGYtOCdcbiAgICB0aGlzLl9hbGxvd1Vua25vd25Gb3JtYXQgPSAhIW9wdHMuYWxsb3dVbmtub3duRm9ybWF0XG4gICAgdGhpcy5fdW5sb2NrQm91bmQgPSB0aGlzLl91bmxvY2suYmluZCh0aGlzKVxuICB9XG5cbiAgX3VubG9jayAoZXJyKSB7XG4gICAgdGhpcy5fbG9ja2VkID0gZmFsc2VcblxuICAgIGlmIChlcnIpIHtcbiAgICAgIHRoaXMuZGVzdHJveShlcnIpXG4gICAgICB0aGlzLl9jb250aW51ZVdyaXRlKGVycilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX3VwZGF0ZSgpXG4gIH1cblxuICBfY29uc3VtZUhlYWRlciAoKSB7XG4gICAgaWYgKHRoaXMuX2xvY2tlZCkgcmV0dXJuIGZhbHNlXG5cbiAgICB0aGlzLl9vZmZzZXQgPSB0aGlzLl9idWZmZXIuc2hpZnRlZFxuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuX2hlYWRlciA9IGhlYWRlcnMuZGVjb2RlKHRoaXMuX2J1ZmZlci5zaGlmdCg1MTIpLCB0aGlzLl9maWxlbmFtZUVuY29kaW5nLCB0aGlzLl9hbGxvd1Vua25vd25Gb3JtYXQpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLl9jb250aW51ZVdyaXRlKGVycilcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGlmICghdGhpcy5faGVhZGVyKSByZXR1cm4gdHJ1ZVxuXG4gICAgc3dpdGNoICh0aGlzLl9oZWFkZXIudHlwZSkge1xuICAgICAgY2FzZSAnZ251LWxvbmctcGF0aCc6XG4gICAgICBjYXNlICdnbnUtbG9uZy1saW5rLXBhdGgnOlxuICAgICAgY2FzZSAncGF4LWdsb2JhbC1oZWFkZXInOlxuICAgICAgY2FzZSAncGF4LWhlYWRlcic6XG4gICAgICAgIHRoaXMuX2xvbmdIZWFkZXIgPSB0cnVlXG4gICAgICAgIHRoaXMuX21pc3NpbmcgPSB0aGlzLl9oZWFkZXIuc2l6ZVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIHRoaXMuX2xvY2tlZCA9IHRydWVcbiAgICB0aGlzLl9hcHBseUxvbmdIZWFkZXJzKClcblxuICAgIGlmICh0aGlzLl9oZWFkZXIuc2l6ZSA9PT0gMCB8fCB0aGlzLl9oZWFkZXIudHlwZSA9PT0gJ2RpcmVjdG9yeScpIHtcbiAgICAgIHRoaXMuZW1pdCgnZW50cnknLCB0aGlzLl9oZWFkZXIsIHRoaXMuX2NyZWF0ZVN0cmVhbSgpLCB0aGlzLl91bmxvY2tCb3VuZClcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgdGhpcy5fc3RyZWFtID0gdGhpcy5fY3JlYXRlU3RyZWFtKClcbiAgICB0aGlzLl9taXNzaW5nID0gdGhpcy5faGVhZGVyLnNpemVcblxuICAgIHRoaXMuZW1pdCgnZW50cnknLCB0aGlzLl9oZWFkZXIsIHRoaXMuX3N0cmVhbSwgdGhpcy5fdW5sb2NrQm91bmQpXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIF9hcHBseUxvbmdIZWFkZXJzICgpIHtcbiAgICBpZiAodGhpcy5fZ251TG9uZ1BhdGgpIHtcbiAgICAgIHRoaXMuX2hlYWRlci5uYW1lID0gdGhpcy5fZ251TG9uZ1BhdGhcbiAgICAgIHRoaXMuX2dudUxvbmdQYXRoID0gbnVsbFxuICAgIH1cblxuICAgIGlmICh0aGlzLl9nbnVMb25nTGlua1BhdGgpIHtcbiAgICAgIHRoaXMuX2hlYWRlci5saW5rbmFtZSA9IHRoaXMuX2dudUxvbmdMaW5rUGF0aFxuICAgICAgdGhpcy5fZ251TG9uZ0xpbmtQYXRoID0gbnVsbFxuICAgIH1cblxuICAgIGlmICh0aGlzLl9wYXgpIHtcbiAgICAgIGlmICh0aGlzLl9wYXgucGF0aCkgdGhpcy5faGVhZGVyLm5hbWUgPSB0aGlzLl9wYXgucGF0aFxuICAgICAgaWYgKHRoaXMuX3BheC5saW5rcGF0aCkgdGhpcy5faGVhZGVyLmxpbmtuYW1lID0gdGhpcy5fcGF4LmxpbmtwYXRoXG4gICAgICBpZiAodGhpcy5fcGF4LnNpemUpIHRoaXMuX2hlYWRlci5zaXplID0gcGFyc2VJbnQodGhpcy5fcGF4LnNpemUsIDEwKVxuICAgICAgdGhpcy5faGVhZGVyLnBheCA9IHRoaXMuX3BheFxuICAgICAgdGhpcy5fcGF4ID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIF9kZWNvZGVMb25nSGVhZGVyIChidWYpIHtcbiAgICBzd2l0Y2ggKHRoaXMuX2hlYWRlci50eXBlKSB7XG4gICAgICBjYXNlICdnbnUtbG9uZy1wYXRoJzpcbiAgICAgICAgdGhpcy5fZ251TG9uZ1BhdGggPSBoZWFkZXJzLmRlY29kZUxvbmdQYXRoKGJ1ZiwgdGhpcy5fZmlsZW5hbWVFbmNvZGluZylcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ2dudS1sb25nLWxpbmstcGF0aCc6XG4gICAgICAgIHRoaXMuX2dudUxvbmdMaW5rUGF0aCA9IGhlYWRlcnMuZGVjb2RlTG9uZ1BhdGgoYnVmLCB0aGlzLl9maWxlbmFtZUVuY29kaW5nKVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAncGF4LWdsb2JhbC1oZWFkZXInOlxuICAgICAgICB0aGlzLl9wYXhHbG9iYWwgPSBoZWFkZXJzLmRlY29kZVBheChidWYpXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdwYXgtaGVhZGVyJzpcbiAgICAgICAgdGhpcy5fcGF4ID0gdGhpcy5fcGF4R2xvYmFsID09PSBudWxsXG4gICAgICAgICAgPyBoZWFkZXJzLmRlY29kZVBheChidWYpXG4gICAgICAgICAgOiBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9wYXhHbG9iYWwsIGhlYWRlcnMuZGVjb2RlUGF4KGJ1ZikpXG4gICAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgX2NvbnN1bWVMb25nSGVhZGVyICgpIHtcbiAgICB0aGlzLl9sb25nSGVhZGVyID0gZmFsc2VcbiAgICB0aGlzLl9taXNzaW5nID0gb3ZlcmZsb3codGhpcy5faGVhZGVyLnNpemUpXG5cbiAgICBjb25zdCBidWYgPSB0aGlzLl9idWZmZXIuc2hpZnQodGhpcy5faGVhZGVyLnNpemUpXG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5fZGVjb2RlTG9uZ0hlYWRlcihidWYpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLl9jb250aW51ZVdyaXRlKGVycilcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBfY29uc3VtZVN0cmVhbSAoKSB7XG4gICAgY29uc3QgYnVmID0gdGhpcy5fYnVmZmVyLnNoaWZ0Rmlyc3QodGhpcy5fbWlzc2luZylcbiAgICBpZiAoYnVmID09PSBudWxsKSByZXR1cm4gZmFsc2VcblxuICAgIHRoaXMuX21pc3NpbmcgLT0gYnVmLmJ5dGVMZW5ndGhcbiAgICBjb25zdCBkcmFpbmVkID0gdGhpcy5fc3RyZWFtLnB1c2goYnVmKVxuXG4gICAgaWYgKHRoaXMuX21pc3NpbmcgPT09IDApIHtcbiAgICAgIHRoaXMuX3N0cmVhbS5wdXNoKG51bGwpXG4gICAgICBpZiAoZHJhaW5lZCkgdGhpcy5fc3RyZWFtLl9kZXRhY2goKVxuICAgICAgcmV0dXJuIGRyYWluZWQgJiYgdGhpcy5fbG9ja2VkID09PSBmYWxzZVxuICAgIH1cblxuICAgIHJldHVybiBkcmFpbmVkXG4gIH1cblxuICBfY3JlYXRlU3RyZWFtICgpIHtcbiAgICByZXR1cm4gbmV3IFNvdXJjZSh0aGlzLCB0aGlzLl9oZWFkZXIsIHRoaXMuX29mZnNldClcbiAgfVxuXG4gIF91cGRhdGUgKCkge1xuICAgIHdoaWxlICh0aGlzLl9idWZmZXIuYnVmZmVyZWQgPiAwICYmICF0aGlzLmRlc3Ryb3lpbmcpIHtcbiAgICAgIGlmICh0aGlzLl9taXNzaW5nID4gMCkge1xuICAgICAgICBpZiAodGhpcy5fc3RyZWFtICE9PSBudWxsKSB7XG4gICAgICAgICAgaWYgKHRoaXMuX2NvbnN1bWVTdHJlYW0oKSA9PT0gZmFsc2UpIHJldHVyblxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fbG9uZ0hlYWRlciA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGlmICh0aGlzLl9taXNzaW5nID4gdGhpcy5fYnVmZmVyLmJ1ZmZlcmVkKSBicmVha1xuICAgICAgICAgIGlmICh0aGlzLl9jb25zdW1lTG9uZ0hlYWRlcigpID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlnbm9yZSA9IHRoaXMuX2J1ZmZlci5zaGlmdEZpcnN0KHRoaXMuX21pc3NpbmcpXG4gICAgICAgIGlmIChpZ25vcmUgIT09IG51bGwpIHRoaXMuX21pc3NpbmcgLT0gaWdub3JlLmJ5dGVMZW5ndGhcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2J1ZmZlci5idWZmZXJlZCA8IDUxMikgYnJlYWtcbiAgICAgIGlmICh0aGlzLl9zdHJlYW0gIT09IG51bGwgfHwgdGhpcy5fY29uc3VtZUhlYWRlcigpID09PSBmYWxzZSkgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5fY29udGludWVXcml0ZShudWxsKVxuICB9XG5cbiAgX2NvbnRpbnVlV3JpdGUgKGVycikge1xuICAgIGNvbnN0IGNiID0gdGhpcy5fY2FsbGJhY2tcbiAgICB0aGlzLl9jYWxsYmFjayA9IG5vb3BcbiAgICBjYihlcnIpXG4gIH1cblxuICBfd3JpdGUgKGRhdGEsIGNiKSB7XG4gICAgdGhpcy5fY2FsbGJhY2sgPSBjYlxuICAgIHRoaXMuX2J1ZmZlci5wdXNoKGRhdGEpXG4gICAgdGhpcy5fdXBkYXRlKClcbiAgfVxuXG4gIF9maW5hbCAoY2IpIHtcbiAgICB0aGlzLl9maW5pc2hlZCA9IHRoaXMuX21pc3NpbmcgPT09IDAgJiYgdGhpcy5fYnVmZmVyLmJ1ZmZlcmVkID09PSAwXG4gICAgY2IodGhpcy5fZmluaXNoZWQgPyBudWxsIDogbmV3IEVycm9yKCdVbmV4cGVjdGVkIGVuZCBvZiBkYXRhJykpXG4gIH1cblxuICBfcHJlZGVzdHJveSAoKSB7XG4gICAgdGhpcy5fY29udGludWVXcml0ZShudWxsKVxuICB9XG5cbiAgX2Rlc3Ryb3kgKGNiKSB7XG4gICAgaWYgKHRoaXMuX3N0cmVhbSkgdGhpcy5fc3RyZWFtLmRlc3Ryb3koZ2V0U3RyZWFtRXJyb3IodGhpcykpXG4gICAgY2IobnVsbClcbiAgfVxuXG4gIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gKCkge1xuICAgIGxldCBlcnJvciA9IG51bGxcblxuICAgIGxldCBwcm9taXNlUmVzb2x2ZSA9IG51bGxcbiAgICBsZXQgcHJvbWlzZVJlamVjdCA9IG51bGxcblxuICAgIGxldCBlbnRyeVN0cmVhbSA9IG51bGxcbiAgICBsZXQgZW50cnlDYWxsYmFjayA9IG51bGxcblxuICAgIGNvbnN0IGV4dHJhY3QgPSB0aGlzXG5cbiAgICB0aGlzLm9uKCdlbnRyeScsIG9uZW50cnkpXG4gICAgdGhpcy5vbignZXJyb3InLCAoZXJyKSA9PiB7IGVycm9yID0gZXJyIH0pXG4gICAgdGhpcy5vbignY2xvc2UnLCBvbmNsb3NlKVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gKCkge1xuICAgICAgICByZXR1cm4gdGhpc1xuICAgICAgfSxcbiAgICAgIG5leHQgKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2Uob25uZXh0KVxuICAgICAgfSxcbiAgICAgIHJldHVybiAoKSB7XG4gICAgICAgIHJldHVybiBkZXN0cm95KG51bGwpXG4gICAgICB9LFxuICAgICAgdGhyb3cgKGVycikge1xuICAgICAgICByZXR1cm4gZGVzdHJveShlcnIpXG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29uc3VtZUNhbGxiYWNrIChlcnIpIHtcbiAgICAgIGlmICghZW50cnlDYWxsYmFjaykgcmV0dXJuXG4gICAgICBjb25zdCBjYiA9IGVudHJ5Q2FsbGJhY2tcbiAgICAgIGVudHJ5Q2FsbGJhY2sgPSBudWxsXG4gICAgICBjYihlcnIpXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25uZXh0IChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGlmIChlcnJvcikge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGVycm9yKVxuICAgICAgfVxuXG4gICAgICBpZiAoZW50cnlTdHJlYW0pIHtcbiAgICAgICAgcmVzb2x2ZSh7IHZhbHVlOiBlbnRyeVN0cmVhbSwgZG9uZTogZmFsc2UgfSlcbiAgICAgICAgZW50cnlTdHJlYW0gPSBudWxsXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBwcm9taXNlUmVzb2x2ZSA9IHJlc29sdmVcbiAgICAgIHByb21pc2VSZWplY3QgPSByZWplY3RcblxuICAgICAgY29uc3VtZUNhbGxiYWNrKG51bGwpXG5cbiAgICAgIGlmIChleHRyYWN0Ll9maW5pc2hlZCAmJiBwcm9taXNlUmVzb2x2ZSkge1xuICAgICAgICBwcm9taXNlUmVzb2x2ZSh7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfSlcbiAgICAgICAgcHJvbWlzZVJlc29sdmUgPSBwcm9taXNlUmVqZWN0ID0gbnVsbFxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9uZW50cnkgKGhlYWRlciwgc3RyZWFtLCBjYWxsYmFjaykge1xuICAgICAgZW50cnlDYWxsYmFjayA9IGNhbGxiYWNrXG4gICAgICBzdHJlYW0ub24oJ2Vycm9yJywgbm9vcCkgLy8gbm8gd2F5IGFyb3VuZCB0aGlzIGR1ZSB0byB0aWNrIHNpbGx5bmVzc1xuXG4gICAgICBpZiAocHJvbWlzZVJlc29sdmUpIHtcbiAgICAgICAgcHJvbWlzZVJlc29sdmUoeyB2YWx1ZTogc3RyZWFtLCBkb25lOiBmYWxzZSB9KVxuICAgICAgICBwcm9taXNlUmVzb2x2ZSA9IHByb21pc2VSZWplY3QgPSBudWxsXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbnRyeVN0cmVhbSA9IHN0cmVhbVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9uY2xvc2UgKCkge1xuICAgICAgY29uc3VtZUNhbGxiYWNrKGVycm9yKVxuICAgICAgaWYgKCFwcm9taXNlUmVzb2x2ZSkgcmV0dXJuXG4gICAgICBpZiAoZXJyb3IpIHByb21pc2VSZWplY3QoZXJyb3IpXG4gICAgICBlbHNlIHByb21pc2VSZXNvbHZlKHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9KVxuICAgICAgcHJvbWlzZVJlc29sdmUgPSBwcm9taXNlUmVqZWN0ID0gbnVsbFxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlc3Ryb3kgKGVycikge1xuICAgICAgZXh0cmFjdC5kZXN0cm95KGVycilcbiAgICAgIGNvbnN1bWVDYWxsYmFjayhlcnIpXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBpZiAoZXh0cmFjdC5kZXN0cm95ZWQpIHJldHVybiByZXNvbHZlKHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9KVxuICAgICAgICBleHRyYWN0Lm9uY2UoJ2Nsb3NlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChlcnIpIHJlamVjdChlcnIpXG4gICAgICAgICAgZWxzZSByZXNvbHZlKHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9KVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBleHRyYWN0IChvcHRzKSB7XG4gIHJldHVybiBuZXcgRXh0cmFjdChvcHRzKVxufVxuXG5mdW5jdGlvbiBub29wICgpIHt9XG5cbmZ1bmN0aW9uIG92ZXJmbG93IChzaXplKSB7XG4gIHNpemUgJj0gNTExXG4gIHJldHVybiBzaXplICYmIDUxMiAtIHNpemVcbn1cbiIsCiAgICAiY29uc3QgY29uc3RhbnRzID0geyAvLyBqdXN0IGZvciBlbnZzIHdpdGhvdXQgZnNcbiAgU19JRk1UOiA2MTQ0MCxcbiAgU19JRkRJUjogMTYzODQsXG4gIFNfSUZDSFI6IDgxOTIsXG4gIFNfSUZCTEs6IDI0NTc2LFxuICBTX0lGSUZPOiA0MDk2LFxuICBTX0lGTE5LOiA0MDk2MFxufVxuXG50cnkge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJ2ZzJykuY29uc3RhbnRzIHx8IGNvbnN0YW50c1xufSBjYXRjaCB7XG4gIG1vZHVsZS5leHBvcnRzID0gY29uc3RhbnRzXG59XG4iLAogICAgImNvbnN0IHsgUmVhZGFibGUsIFdyaXRhYmxlLCBnZXRTdHJlYW1FcnJvciB9ID0gcmVxdWlyZSgnc3RyZWFteCcpXG5jb25zdCBiNGEgPSByZXF1aXJlKCdiNGEnKVxuXG5jb25zdCBjb25zdGFudHMgPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCBoZWFkZXJzID0gcmVxdWlyZSgnLi9oZWFkZXJzJylcblxuY29uc3QgRE1PREUgPSAwbzc1NVxuY29uc3QgRk1PREUgPSAwbzY0NFxuXG5jb25zdCBFTkRfT0ZfVEFSID0gYjRhLmFsbG9jKDEwMjQpXG5cbmNsYXNzIFNpbmsgZXh0ZW5kcyBXcml0YWJsZSB7XG4gIGNvbnN0cnVjdG9yIChwYWNrLCBoZWFkZXIsIGNhbGxiYWNrKSB7XG4gICAgc3VwZXIoeyBtYXBXcml0YWJsZSwgZWFnZXJPcGVuOiB0cnVlIH0pXG5cbiAgICB0aGlzLndyaXR0ZW4gPSAwXG4gICAgdGhpcy5oZWFkZXIgPSBoZWFkZXJcblxuICAgIHRoaXMuX2NhbGxiYWNrID0gY2FsbGJhY2tcbiAgICB0aGlzLl9saW5rbmFtZSA9IG51bGxcbiAgICB0aGlzLl9pc0xpbmtuYW1lID0gaGVhZGVyLnR5cGUgPT09ICdzeW1saW5rJyAmJiAhaGVhZGVyLmxpbmtuYW1lXG4gICAgdGhpcy5faXNWb2lkID0gaGVhZGVyLnR5cGUgIT09ICdmaWxlJyAmJiBoZWFkZXIudHlwZSAhPT0gJ2NvbnRpZ3VvdXMtZmlsZSdcbiAgICB0aGlzLl9maW5pc2hlZCA9IGZhbHNlXG4gICAgdGhpcy5fcGFjayA9IHBhY2tcbiAgICB0aGlzLl9vcGVuQ2FsbGJhY2sgPSBudWxsXG5cbiAgICBpZiAodGhpcy5fcGFjay5fc3RyZWFtID09PSBudWxsKSB0aGlzLl9wYWNrLl9zdHJlYW0gPSB0aGlzXG4gICAgZWxzZSB0aGlzLl9wYWNrLl9wZW5kaW5nLnB1c2godGhpcylcbiAgfVxuXG4gIF9vcGVuIChjYikge1xuICAgIHRoaXMuX29wZW5DYWxsYmFjayA9IGNiXG4gICAgaWYgKHRoaXMuX3BhY2suX3N0cmVhbSA9PT0gdGhpcykgdGhpcy5fY29udGludWVPcGVuKClcbiAgfVxuXG4gIF9jb250aW51ZVBhY2sgKGVycikge1xuICAgIGlmICh0aGlzLl9jYWxsYmFjayA9PT0gbnVsbCkgcmV0dXJuXG5cbiAgICBjb25zdCBjYWxsYmFjayA9IHRoaXMuX2NhbGxiYWNrXG4gICAgdGhpcy5fY2FsbGJhY2sgPSBudWxsXG5cbiAgICBjYWxsYmFjayhlcnIpXG4gIH1cblxuICBfY29udGludWVPcGVuICgpIHtcbiAgICBpZiAodGhpcy5fcGFjay5fc3RyZWFtID09PSBudWxsKSB0aGlzLl9wYWNrLl9zdHJlYW0gPSB0aGlzXG5cbiAgICBjb25zdCBjYiA9IHRoaXMuX29wZW5DYWxsYmFja1xuICAgIHRoaXMuX29wZW5DYWxsYmFjayA9IG51bGxcbiAgICBpZiAoY2IgPT09IG51bGwpIHJldHVyblxuXG4gICAgaWYgKHRoaXMuX3BhY2suZGVzdHJveWluZykgcmV0dXJuIGNiKG5ldyBFcnJvcigncGFjayBzdHJlYW0gZGVzdHJveWVkJykpXG4gICAgaWYgKHRoaXMuX3BhY2suX2ZpbmFsaXplZCkgcmV0dXJuIGNiKG5ldyBFcnJvcigncGFjayBzdHJlYW0gaXMgYWxyZWFkeSBmaW5hbGl6ZWQnKSlcblxuICAgIHRoaXMuX3BhY2suX3N0cmVhbSA9IHRoaXNcblxuICAgIGlmICghdGhpcy5faXNMaW5rbmFtZSkge1xuICAgICAgdGhpcy5fcGFjay5fZW5jb2RlKHRoaXMuaGVhZGVyKVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9pc1ZvaWQpIHtcbiAgICAgIHRoaXMuX2ZpbmlzaCgpXG4gICAgICB0aGlzLl9jb250aW51ZVBhY2sobnVsbClcbiAgICB9XG5cbiAgICBjYihudWxsKVxuICB9XG5cbiAgX3dyaXRlIChkYXRhLCBjYikge1xuICAgIGlmICh0aGlzLl9pc0xpbmtuYW1lKSB7XG4gICAgICB0aGlzLl9saW5rbmFtZSA9IHRoaXMuX2xpbmtuYW1lID8gYjRhLmNvbmNhdChbdGhpcy5fbGlua25hbWUsIGRhdGFdKSA6IGRhdGFcbiAgICAgIHJldHVybiBjYihudWxsKVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9pc1ZvaWQpIHtcbiAgICAgIGlmIChkYXRhLmJ5dGVMZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBjYihuZXcgRXJyb3IoJ05vIGJvZHkgYWxsb3dlZCBmb3IgdGhpcyBlbnRyeScpKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNiKClcbiAgICB9XG5cbiAgICB0aGlzLndyaXR0ZW4gKz0gZGF0YS5ieXRlTGVuZ3RoXG4gICAgaWYgKHRoaXMuX3BhY2sucHVzaChkYXRhKSkgcmV0dXJuIGNiKClcbiAgICB0aGlzLl9wYWNrLl9kcmFpbiA9IGNiXG4gIH1cblxuICBfZmluaXNoICgpIHtcbiAgICBpZiAodGhpcy5fZmluaXNoZWQpIHJldHVyblxuICAgIHRoaXMuX2ZpbmlzaGVkID0gdHJ1ZVxuXG4gICAgaWYgKHRoaXMuX2lzTGlua25hbWUpIHtcbiAgICAgIHRoaXMuaGVhZGVyLmxpbmtuYW1lID0gdGhpcy5fbGlua25hbWUgPyBiNGEudG9TdHJpbmcodGhpcy5fbGlua25hbWUsICd1dGYtOCcpIDogJydcbiAgICAgIHRoaXMuX3BhY2suX2VuY29kZSh0aGlzLmhlYWRlcilcbiAgICB9XG5cbiAgICBvdmVyZmxvdyh0aGlzLl9wYWNrLCB0aGlzLmhlYWRlci5zaXplKVxuXG4gICAgdGhpcy5fcGFjay5fZG9uZSh0aGlzKVxuICB9XG5cbiAgX2ZpbmFsIChjYikge1xuICAgIGlmICh0aGlzLndyaXR0ZW4gIT09IHRoaXMuaGVhZGVyLnNpemUpIHsgLy8gY29ycnVwdGluZyB0YXJcbiAgICAgIHJldHVybiBjYihuZXcgRXJyb3IoJ1NpemUgbWlzbWF0Y2gnKSlcbiAgICB9XG5cbiAgICB0aGlzLl9maW5pc2goKVxuICAgIGNiKG51bGwpXG4gIH1cblxuICBfZ2V0RXJyb3IgKCkge1xuICAgIHJldHVybiBnZXRTdHJlYW1FcnJvcih0aGlzKSB8fCBuZXcgRXJyb3IoJ3RhciBlbnRyeSBkZXN0cm95ZWQnKVxuICB9XG5cbiAgX3ByZWRlc3Ryb3kgKCkge1xuICAgIHRoaXMuX3BhY2suZGVzdHJveSh0aGlzLl9nZXRFcnJvcigpKVxuICB9XG5cbiAgX2Rlc3Ryb3kgKGNiKSB7XG4gICAgdGhpcy5fcGFjay5fZG9uZSh0aGlzKVxuXG4gICAgdGhpcy5fY29udGludWVQYWNrKHRoaXMuX2ZpbmlzaGVkID8gbnVsbCA6IHRoaXMuX2dldEVycm9yKCkpXG5cbiAgICBjYigpXG4gIH1cbn1cblxuY2xhc3MgUGFjayBleHRlbmRzIFJlYWRhYmxlIHtcbiAgY29uc3RydWN0b3IgKG9wdHMpIHtcbiAgICBzdXBlcihvcHRzKVxuICAgIHRoaXMuX2RyYWluID0gbm9vcFxuICAgIHRoaXMuX2ZpbmFsaXplZCA9IGZhbHNlXG4gICAgdGhpcy5fZmluYWxpemluZyA9IGZhbHNlXG4gICAgdGhpcy5fcGVuZGluZyA9IFtdXG4gICAgdGhpcy5fc3RyZWFtID0gbnVsbFxuICB9XG5cbiAgZW50cnkgKGhlYWRlciwgYnVmZmVyLCBjYWxsYmFjaykge1xuICAgIGlmICh0aGlzLl9maW5hbGl6ZWQgfHwgdGhpcy5kZXN0cm95aW5nKSB0aHJvdyBuZXcgRXJyb3IoJ2FscmVhZHkgZmluYWxpemVkIG9yIGRlc3Ryb3llZCcpXG5cbiAgICBpZiAodHlwZW9mIGJ1ZmZlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY2FsbGJhY2sgPSBidWZmZXJcbiAgICAgIGJ1ZmZlciA9IG51bGxcbiAgICB9XG5cbiAgICBpZiAoIWNhbGxiYWNrKSBjYWxsYmFjayA9IG5vb3BcblxuICAgIGlmICghaGVhZGVyLnNpemUgfHwgaGVhZGVyLnR5cGUgPT09ICdzeW1saW5rJykgaGVhZGVyLnNpemUgPSAwXG4gICAgaWYgKCFoZWFkZXIudHlwZSkgaGVhZGVyLnR5cGUgPSBtb2RlVG9UeXBlKGhlYWRlci5tb2RlKVxuICAgIGlmICghaGVhZGVyLm1vZGUpIGhlYWRlci5tb2RlID0gaGVhZGVyLnR5cGUgPT09ICdkaXJlY3RvcnknID8gRE1PREUgOiBGTU9ERVxuICAgIGlmICghaGVhZGVyLnVpZCkgaGVhZGVyLnVpZCA9IDBcbiAgICBpZiAoIWhlYWRlci5naWQpIGhlYWRlci5naWQgPSAwXG4gICAgaWYgKCFoZWFkZXIubXRpbWUpIGhlYWRlci5tdGltZSA9IG5ldyBEYXRlKClcblxuICAgIGlmICh0eXBlb2YgYnVmZmVyID09PSAnc3RyaW5nJykgYnVmZmVyID0gYjRhLmZyb20oYnVmZmVyKVxuXG4gICAgY29uc3Qgc2luayA9IG5ldyBTaW5rKHRoaXMsIGhlYWRlciwgY2FsbGJhY2spXG5cbiAgICBpZiAoYjRhLmlzQnVmZmVyKGJ1ZmZlcikpIHtcbiAgICAgIGhlYWRlci5zaXplID0gYnVmZmVyLmJ5dGVMZW5ndGhcbiAgICAgIHNpbmsud3JpdGUoYnVmZmVyKVxuICAgICAgc2luay5lbmQoKVxuICAgICAgcmV0dXJuIHNpbmtcbiAgICB9XG5cbiAgICBpZiAoc2luay5faXNWb2lkKSB7XG4gICAgICByZXR1cm4gc2lua1xuICAgIH1cblxuICAgIHJldHVybiBzaW5rXG4gIH1cblxuICBmaW5hbGl6ZSAoKSB7XG4gICAgaWYgKHRoaXMuX3N0cmVhbSB8fCB0aGlzLl9wZW5kaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuX2ZpbmFsaXppbmcgPSB0cnVlXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fZmluYWxpemVkKSByZXR1cm5cbiAgICB0aGlzLl9maW5hbGl6ZWQgPSB0cnVlXG5cbiAgICB0aGlzLnB1c2goRU5EX09GX1RBUilcbiAgICB0aGlzLnB1c2gobnVsbClcbiAgfVxuXG4gIF9kb25lIChzdHJlYW0pIHtcbiAgICBpZiAoc3RyZWFtICE9PSB0aGlzLl9zdHJlYW0pIHJldHVyblxuXG4gICAgdGhpcy5fc3RyZWFtID0gbnVsbFxuXG4gICAgaWYgKHRoaXMuX2ZpbmFsaXppbmcpIHRoaXMuZmluYWxpemUoKVxuICAgIGlmICh0aGlzLl9wZW5kaW5nLmxlbmd0aCkgdGhpcy5fcGVuZGluZy5zaGlmdCgpLl9jb250aW51ZU9wZW4oKVxuICB9XG5cbiAgX2VuY29kZSAoaGVhZGVyKSB7XG4gICAgaWYgKCFoZWFkZXIucGF4KSB7XG4gICAgICBjb25zdCBidWYgPSBoZWFkZXJzLmVuY29kZShoZWFkZXIpXG4gICAgICBpZiAoYnVmKSB7XG4gICAgICAgIHRoaXMucHVzaChidWYpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9lbmNvZGVQYXgoaGVhZGVyKVxuICB9XG5cbiAgX2VuY29kZVBheCAoaGVhZGVyKSB7XG4gICAgY29uc3QgcGF4SGVhZGVyID0gaGVhZGVycy5lbmNvZGVQYXgoe1xuICAgICAgbmFtZTogaGVhZGVyLm5hbWUsXG4gICAgICBsaW5rbmFtZTogaGVhZGVyLmxpbmtuYW1lLFxuICAgICAgcGF4OiBoZWFkZXIucGF4XG4gICAgfSlcblxuICAgIGNvbnN0IG5ld0hlYWRlciA9IHtcbiAgICAgIG5hbWU6ICdQYXhIZWFkZXInLFxuICAgICAgbW9kZTogaGVhZGVyLm1vZGUsXG4gICAgICB1aWQ6IGhlYWRlci51aWQsXG4gICAgICBnaWQ6IGhlYWRlci5naWQsXG4gICAgICBzaXplOiBwYXhIZWFkZXIuYnl0ZUxlbmd0aCxcbiAgICAgIG10aW1lOiBoZWFkZXIubXRpbWUsXG4gICAgICB0eXBlOiAncGF4LWhlYWRlcicsXG4gICAgICBsaW5rbmFtZTogaGVhZGVyLmxpbmtuYW1lICYmICdQYXhIZWFkZXInLFxuICAgICAgdW5hbWU6IGhlYWRlci51bmFtZSxcbiAgICAgIGduYW1lOiBoZWFkZXIuZ25hbWUsXG4gICAgICBkZXZtYWpvcjogaGVhZGVyLmRldm1ham9yLFxuICAgICAgZGV2bWlub3I6IGhlYWRlci5kZXZtaW5vclxuICAgIH1cblxuICAgIHRoaXMucHVzaChoZWFkZXJzLmVuY29kZShuZXdIZWFkZXIpKVxuICAgIHRoaXMucHVzaChwYXhIZWFkZXIpXG4gICAgb3ZlcmZsb3codGhpcywgcGF4SGVhZGVyLmJ5dGVMZW5ndGgpXG5cbiAgICBuZXdIZWFkZXIuc2l6ZSA9IGhlYWRlci5zaXplXG4gICAgbmV3SGVhZGVyLnR5cGUgPSBoZWFkZXIudHlwZVxuICAgIHRoaXMucHVzaChoZWFkZXJzLmVuY29kZShuZXdIZWFkZXIpKVxuICB9XG5cbiAgX2RvRHJhaW4gKCkge1xuICAgIGNvbnN0IGRyYWluID0gdGhpcy5fZHJhaW5cbiAgICB0aGlzLl9kcmFpbiA9IG5vb3BcbiAgICBkcmFpbigpXG4gIH1cblxuICBfcHJlZGVzdHJveSAoKSB7XG4gICAgY29uc3QgZXJyID0gZ2V0U3RyZWFtRXJyb3IodGhpcylcblxuICAgIGlmICh0aGlzLl9zdHJlYW0pIHRoaXMuX3N0cmVhbS5kZXN0cm95KGVycilcblxuICAgIHdoaWxlICh0aGlzLl9wZW5kaW5nLmxlbmd0aCkge1xuICAgICAgY29uc3Qgc3RyZWFtID0gdGhpcy5fcGVuZGluZy5zaGlmdCgpXG4gICAgICBzdHJlYW0uZGVzdHJveShlcnIpXG4gICAgICBzdHJlYW0uX2NvbnRpbnVlT3BlbigpXG4gICAgfVxuXG4gICAgdGhpcy5fZG9EcmFpbigpXG4gIH1cblxuICBfcmVhZCAoY2IpIHtcbiAgICB0aGlzLl9kb0RyYWluKClcbiAgICBjYigpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBwYWNrIChvcHRzKSB7XG4gIHJldHVybiBuZXcgUGFjayhvcHRzKVxufVxuXG5mdW5jdGlvbiBtb2RlVG9UeXBlIChtb2RlKSB7XG4gIHN3aXRjaCAobW9kZSAmIGNvbnN0YW50cy5TX0lGTVQpIHtcbiAgICBjYXNlIGNvbnN0YW50cy5TX0lGQkxLOiByZXR1cm4gJ2Jsb2NrLWRldmljZSdcbiAgICBjYXNlIGNvbnN0YW50cy5TX0lGQ0hSOiByZXR1cm4gJ2NoYXJhY3Rlci1kZXZpY2UnXG4gICAgY2FzZSBjb25zdGFudHMuU19JRkRJUjogcmV0dXJuICdkaXJlY3RvcnknXG4gICAgY2FzZSBjb25zdGFudHMuU19JRklGTzogcmV0dXJuICdmaWZvJ1xuICAgIGNhc2UgY29uc3RhbnRzLlNfSUZMTks6IHJldHVybiAnc3ltbGluaydcbiAgfVxuXG4gIHJldHVybiAnZmlsZSdcbn1cblxuZnVuY3Rpb24gbm9vcCAoKSB7fVxuXG5mdW5jdGlvbiBvdmVyZmxvdyAoc2VsZiwgc2l6ZSkge1xuICBzaXplICY9IDUxMVxuICBpZiAoc2l6ZSkgc2VsZi5wdXNoKEVORF9PRl9UQVIuc3ViYXJyYXkoMCwgNTEyIC0gc2l6ZSkpXG59XG5cbmZ1bmN0aW9uIG1hcFdyaXRhYmxlIChidWYpIHtcbiAgcmV0dXJuIGI0YS5pc0J1ZmZlcihidWYpID8gYnVmIDogYjRhLmZyb20oYnVmKVxufVxuIiwKICAgICJleHBvcnRzLmV4dHJhY3QgPSByZXF1aXJlKCcuL2V4dHJhY3QnKVxuZXhwb3J0cy5wYWNrID0gcmVxdWlyZSgnLi9wYWNrJylcbiIsCiAgICAiLyoqXG4gKiBUQVIgRm9ybWF0IFBsdWdpblxuICpcbiAqIEBtb2R1bGUgcGx1Z2lucy90YXJcbiAqIEBsaWNlbnNlIFtNSVRde0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hcmNoaXZlcmpzL25vZGUtYXJjaGl2ZXIvYmxvYi9tYXN0ZXIvTElDRU5TRX1cbiAqIEBjb3B5cmlnaHQgKGMpIDIwMTItMjAxNCBDaHJpcyBUYWxraW5ndG9uLCBjb250cmlidXRvcnMuXG4gKi9cbnZhciB6bGliID0gcmVxdWlyZSgnemxpYicpO1xuXG52YXIgZW5naW5lID0gcmVxdWlyZSgndGFyLXN0cmVhbScpO1xudmFyIHV0aWwgPSByZXF1aXJlKCdhcmNoaXZlci11dGlscycpO1xuXG4vKipcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtUYXJPcHRpb25zfSBvcHRpb25zXG4gKi9cbnZhciBUYXIgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBUYXIpKSB7XG4gICAgcmV0dXJuIG5ldyBUYXIob3B0aW9ucyk7XG4gIH1cblxuICBvcHRpb25zID0gdGhpcy5vcHRpb25zID0gdXRpbC5kZWZhdWx0cyhvcHRpb25zLCB7XG4gICAgZ3ppcDogZmFsc2VcbiAgfSk7XG5cbiAgaWYgKHR5cGVvZiBvcHRpb25zLmd6aXBPcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgIG9wdGlvbnMuZ3ppcE9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHRoaXMuc3VwcG9ydHMgPSB7XG4gICAgZGlyZWN0b3J5OiB0cnVlLFxuICAgIHN5bWxpbms6IHRydWVcbiAgfTtcblxuICB0aGlzLmVuZ2luZSA9IGVuZ2luZS5wYWNrKG9wdGlvbnMpO1xuICB0aGlzLmNvbXByZXNzb3IgPSBmYWxzZTtcblxuICBpZiAob3B0aW9ucy5nemlwKSB7XG4gICAgdGhpcy5jb21wcmVzc29yID0gemxpYi5jcmVhdGVHemlwKG9wdGlvbnMuZ3ppcE9wdGlvbnMpO1xuICAgIHRoaXMuY29tcHJlc3Nvci5vbignZXJyb3InLCB0aGlzLl9vbkNvbXByZXNzb3JFcnJvci5iaW5kKHRoaXMpKTtcbiAgfVxufTtcblxuLyoqXG4gKiBbX29uQ29tcHJlc3NvckVycm9yIGRlc2NyaXB0aW9uXVxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gIHtFcnJvcn0gZXJyXG4gKiBAcmV0dXJuIHZvaWRcbiAqL1xuVGFyLnByb3RvdHlwZS5fb25Db21wcmVzc29yRXJyb3IgPSBmdW5jdGlvbihlcnIpIHtcbiAgdGhpcy5lbmdpbmUuZW1pdCgnZXJyb3InLCBlcnIpO1xufTtcblxuLyoqXG4gKiBbYXBwZW5kIGRlc2NyaXB0aW9uXVxuICpcbiAqIEBwYXJhbSAgeyhCdWZmZXJ8U3RyZWFtKX0gc291cmNlXG4gKiBAcGFyYW0gIHtUYXJFbnRyeURhdGF9IGRhdGFcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB2b2lkXG4gKi9cblRhci5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24oc291cmNlLCBkYXRhLCBjYWxsYmFjaykge1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgZGF0YS5tdGltZSA9IGRhdGEuZGF0ZTtcblxuICBmdW5jdGlvbiBhcHBlbmQoZXJyLCBzb3VyY2VCdWZmZXIpIHtcbiAgICBpZiAoZXJyKSB7XG4gICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNlbGYuZW5naW5lLmVudHJ5KGRhdGEsIHNvdXJjZUJ1ZmZlciwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICBjYWxsYmFjayhlcnIsIGRhdGEpO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKGRhdGEuc291cmNlVHlwZSA9PT0gJ2J1ZmZlcicpIHtcbiAgICBhcHBlbmQobnVsbCwgc291cmNlKTtcbiAgfSBlbHNlIGlmIChkYXRhLnNvdXJjZVR5cGUgPT09ICdzdHJlYW0nICYmIGRhdGEuc3RhdHMpIHtcbiAgICBkYXRhLnNpemUgPSBkYXRhLnN0YXRzLnNpemU7XG5cbiAgICB2YXIgZW50cnkgPSBzZWxmLmVuZ2luZS5lbnRyeShkYXRhLCBmdW5jdGlvbihlcnIpIHtcbiAgICAgIGNhbGxiYWNrKGVyciwgZGF0YSk7XG4gICAgfSk7XG5cbiAgICBzb3VyY2UucGlwZShlbnRyeSk7XG4gIH0gZWxzZSBpZiAoZGF0YS5zb3VyY2VUeXBlID09PSAnc3RyZWFtJykge1xuICAgIHV0aWwuY29sbGVjdFN0cmVhbShzb3VyY2UsIGFwcGVuZCk7XG4gIH1cbn07XG5cbi8qKlxuICogW2ZpbmFsaXplIGRlc2NyaXB0aW9uXVxuICpcbiAqIEByZXR1cm4gdm9pZFxuICovXG5UYXIucHJvdG90eXBlLmZpbmFsaXplID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuZW5naW5lLmZpbmFsaXplKCk7XG59O1xuXG4vKipcbiAqIFtvbiBkZXNjcmlwdGlvbl1cbiAqXG4gKiBAcmV0dXJuIHRoaXMuZW5naW5lXG4gKi9cblRhci5wcm90b3R5cGUub24gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZW5naW5lLm9uLmFwcGx5KHRoaXMuZW5naW5lLCBhcmd1bWVudHMpO1xufTtcblxuLyoqXG4gKiBbcGlwZSBkZXNjcmlwdGlvbl1cbiAqXG4gKiBAcGFyYW0gIHtTdHJpbmd9IGRlc3RpbmF0aW9uXG4gKiBAcGFyYW0gIHtPYmplY3R9IG9wdGlvbnNcbiAqIEByZXR1cm4gdGhpcy5lbmdpbmVcbiAqL1xuVGFyLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24oZGVzdGluYXRpb24sIG9wdGlvbnMpIHtcbiAgaWYgKHRoaXMuY29tcHJlc3Nvcikge1xuICAgIHJldHVybiB0aGlzLmVuZ2luZS5waXBlLmFwcGx5KHRoaXMuZW5naW5lLCBbdGhpcy5jb21wcmVzc29yXSkucGlwZShkZXN0aW5hdGlvbiwgb3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHRoaXMuZW5naW5lLnBpcGUuYXBwbHkodGhpcy5lbmdpbmUsIGFyZ3VtZW50cyk7XG4gIH1cbn07XG5cbi8qKlxuICogW3VucGlwZSBkZXNjcmlwdGlvbl1cbiAqXG4gKiBAcmV0dXJuIHRoaXMuZW5naW5lXG4gKi9cblRhci5wcm90b3R5cGUudW5waXBlID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLmNvbXByZXNzb3IpIHtcbiAgICByZXR1cm4gdGhpcy5jb21wcmVzc29yLnVucGlwZS5hcHBseSh0aGlzLmNvbXByZXNzb3IsIGFyZ3VtZW50cyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHRoaXMuZW5naW5lLnVucGlwZS5hcHBseSh0aGlzLmVuZ2luZSwgYXJndW1lbnRzKTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBUYXI7XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gVGFyT3B0aW9uc1xuICogQGdsb2JhbFxuICogQHByb3BlcnR5IHtCb29sZWFufSBbZ3ppcD1mYWxzZV0gQ29tcHJlc3MgdGhlIHRhciBhcmNoaXZlIHVzaW5nIGd6aXAuXG4gKiBAcHJvcGVydHkge09iamVjdH0gW2d6aXBPcHRpb25zXSBQYXNzZWQgdG8gW3psaWJde0BsaW5rIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvemxpYi5odG1sI3psaWJfY2xhc3Nfb3B0aW9uc31cbiAqIHRvIGNvbnRyb2wgY29tcHJlc3Npb24uXG4gKiBAcHJvcGVydHkgeyp9IFsqXSBTZWUgW3Rhci1zdHJlYW1de0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9tYWZpbnRvc2gvdGFyLXN0cmVhbX0gZG9jdW1lbnRhdGlvbiBmb3IgYWRkaXRpb25hbCBwcm9wZXJ0aWVzLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gVGFyRW50cnlEYXRhXG4gKiBAZ2xvYmFsXG4gKiBAcHJvcGVydHkge1N0cmluZ30gbmFtZSBTZXRzIHRoZSBlbnRyeSBuYW1lIGluY2x1ZGluZyBpbnRlcm5hbCBwYXRoLlxuICogQHByb3BlcnR5IHsoU3RyaW5nfERhdGUpfSBbZGF0ZT1OT1coKV0gU2V0cyB0aGUgZW50cnkgZGF0ZS5cbiAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBbbW9kZT1EOjA3NTUvRjowNjQ0XSBTZXRzIHRoZSBlbnRyeSBwZXJtaXNzaW9ucy5cbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBbcHJlZml4XSBTZXRzIGEgcGF0aCBwcmVmaXggZm9yIHRoZSBlbnRyeSBuYW1lLiBVc2VmdWxcbiAqIHdoZW4gd29ya2luZyB3aXRoIG1ldGhvZHMgbGlrZSBgZGlyZWN0b3J5YCBvciBgZ2xvYmAuXG4gKiBAcHJvcGVydHkge2ZzLlN0YXRzfSBbc3RhdHNdIFNldHMgdGhlIGZzIHN0YXQgZGF0YSBmb3IgdGhpcyBlbnRyeSBhbGxvd2luZ1xuICogZm9yIHJlZHVjdGlvbiBvZiBmcyBzdGF0IGNhbGxzIHdoZW4gc3RhdCBkYXRhIGlzIGFscmVhZHkga25vd24uXG4gKi9cblxuLyoqXG4gKiBUYXJTdHJlYW0gTW9kdWxlXG4gKiBAZXh0ZXJuYWwgVGFyU3RyZWFtXG4gKiBAc2VlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vbWFmaW50b3NoL3Rhci1zdHJlYW19XG4gKi9cbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBnZXREZWZhdWx0RXhwb3J0RnJvbUNqcyAoeCkge1xuXHRyZXR1cm4geCAmJiB4Ll9fZXNNb2R1bGUgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHgsICdkZWZhdWx0JykgPyB4WydkZWZhdWx0J10gOiB4O1xufVxuXG5jb25zdCBDUkNfVEFCTEUgPSBuZXcgSW50MzJBcnJheShbXG4gIDAsXG4gIDE5OTY5NTk4OTQsXG4gIDM5OTM5MTk3ODgsXG4gIDI1Njc1MjQ3OTQsXG4gIDEyNDYzNDEzNyxcbiAgMTg4NjA1NzYxNSxcbiAgMzkxNTYyMTY4NSxcbiAgMjY1NzM5MjAzNSxcbiAgMjQ5MjY4Mjc0LFxuICAyMDQ0NTA4MzI0LFxuICAzNzcyMTE1MjMwLFxuICAyNTQ3MTc3ODY0LFxuICAxNjI5NDE5OTUsXG4gIDIxMjU1NjEwMjEsXG4gIDM4ODc2MDcwNDcsXG4gIDI0Mjg0NDQwNDksXG4gIDQ5ODUzNjU0OCxcbiAgMTc4OTkyNzY2NixcbiAgNDA4OTAxNjY0OCxcbiAgMjIyNzA2MTIxNCxcbiAgNDUwNTQ4ODYxLFxuICAxODQzMjU4NjAzLFxuICA0MTA3NTgwNzUzLFxuICAyMjExNjc3NjM5LFxuICAzMjU4ODM5OTAsXG4gIDE2ODQ3NzcxNTIsXG4gIDQyNTExMjIwNDIsXG4gIDIzMjE5MjY2MzYsXG4gIDMzNTYzMzQ4NyxcbiAgMTY2MTM2NTQ2NSxcbiAgNDE5NTMwMjc1NSxcbiAgMjM2NjExNTMxNyxcbiAgOTk3MDczMDk2LFxuICAxMjgxOTUzODg2LFxuICAzNTc5ODU1MzMyLFxuICAyNzI0Njg4MjQyLFxuICAxMDA2ODg4MTQ1LFxuICAxMjU4NjA3Njg3LFxuICAzNTI0MTAxNjI5LFxuICAyNzY4OTQyNDQzLFxuICA5MDEwOTc3MjIsXG4gIDExMTkwMDA2ODQsXG4gIDM2ODY1MTcyMDYsXG4gIDI4OTgwNjU3MjgsXG4gIDg1MzA0NDQ1MSxcbiAgMTE3MjI2NjEwMSxcbiAgMzcwNTAxNTc1OSxcbiAgMjg4MjYxNjY2NSxcbiAgNjUxNzY3OTgwLFxuICAxMzczNTAzNTQ2LFxuICAzMzY5NTU0MzA0LFxuICAzMjE4MTA0NTk4LFxuICA1NjU1MDcyNTMsXG4gIDE0NTQ2MjE3MzEsXG4gIDM0ODUxMTE3MDUsXG4gIDMwOTk0MzYzMDMsXG4gIDY3MTI2Njk3NCxcbiAgMTU5NDE5ODAyNCxcbiAgMzMyMjczMDkzMCxcbiAgMjk3MDM0NzgxMixcbiAgNzk1ODM1NTI3LFxuICAxNDgzMjMwMjI1LFxuICAzMjQ0MzY3Mjc1LFxuICAzMDYwMTQ5NTY1LFxuICAxOTk0MTQ2MTkyLFxuICAzMTE1ODUzNCxcbiAgMjU2MzkwNzc3MixcbiAgNDAyMzcxNzkzMCxcbiAgMTkwNzQ1OTQ2NSxcbiAgMTEyNjM3MjE1LFxuICAyNjgwMTUzMjUzLFxuICAzOTA0NDI3MDU5LFxuICAyMDEzNzc2MjkwLFxuICAyNTE3MjIwMzYsXG4gIDI1MTcyMTUzNzQsXG4gIDM3NzU4MzAwNDAsXG4gIDIxMzc2NTY3NjMsXG4gIDE0MTM3NjgxMyxcbiAgMjQzOTI3NzcxOSxcbiAgMzg2NTI3MTI5NyxcbiAgMTgwMjE5NTQ0NCxcbiAgNDc2ODY0ODY2LFxuICAyMjM4MDAxMzY4LFxuICA0MDY2NTA4ODc4LFxuICAxODEyMzcwOTI1LFxuICA0NTMwOTI3MzEsXG4gIDIxODE2MjUwMjUsXG4gIDQxMTE0NTEyMjMsXG4gIDE3MDYwODg5MDIsXG4gIDMxNDA0MjcwNCxcbiAgMjM0NDUzMjIwMixcbiAgNDI0MDAxNzUzMixcbiAgMTY1ODY1ODI3MSxcbiAgMzY2NjE5OTc3LFxuICAyMzYyNjcwMzIzLFxuICA0MjI0OTk0NDA1LFxuICAxMzAzNTM1OTYwLFxuICA5ODQ5NjE0ODYsXG4gIDI3NDcwMDcwOTIsXG4gIDM1NjkwMzc1MzgsXG4gIDEyNTYxNzA4MTcsXG4gIDEwMzc2MDQzMTEsXG4gIDI3NjUyMTA3MzMsXG4gIDM1NTQwNzk5OTUsXG4gIDExMzEwMTQ1MDYsXG4gIDg3OTY3OTk5NixcbiAgMjkwOTI0MzQ2MixcbiAgMzY2Mzc3MTg1NixcbiAgMTE0MTEyNDQ2NyxcbiAgODU1ODQyMjc3LFxuICAyODUyODAxNjMxLFxuICAzNzA4NjQ4NjQ5LFxuICAxMzQyNTMzOTQ4LFxuICA2NTQ0NTkzMDYsXG4gIDMxODgzOTYwNDgsXG4gIDMzNzMwMTUxNzQsXG4gIDE0NjY0Nzk5MDksXG4gIDU0NDE3OTYzNSxcbiAgMzExMDUyMzkxMyxcbiAgMzQ2MjUyMjAxNSxcbiAgMTU5MTY3MTA1NCxcbiAgNzAyMTM4Nzc2LFxuICAyOTY2NDYwNDUwLFxuICAzMzUyNzk5NDEyLFxuICAxNTA0OTE4ODA3LFxuICA3ODM1NTE4NzMsXG4gIDMwODI2NDA0NDMsXG4gIDMyMzM0NDI5ODksXG4gIDM5ODgyOTIzODQsXG4gIDI1OTYyNTQ2NDYsXG4gIDYyMzE3MDY4LFxuICAxOTU3ODEwODQyLFxuICAzOTM5ODQ1OTQ1LFxuICAyNjQ3ODE2MTExLFxuICA4MTQ3MDk5NyxcbiAgMTk0MzgwMzUyMyxcbiAgMzgxNDkxODkzMCxcbiAgMjQ4OTU5NjgwNCxcbiAgMjI1Mjc0NDMwLFxuICAyMDUzNzkwMzc2LFxuICAzODI2MTc1NzU1LFxuICAyNDY2OTA2MDEzLFxuICAxNjc4MTY3NDMsXG4gIDIwOTc2NTEzNzcsXG4gIDQwMjc1NTI1ODAsXG4gIDIyNjU0OTAzODYsXG4gIDUwMzQ0NDA3MixcbiAgMTc2MjA1MDgxNCxcbiAgNDE1MDQxNzI0NSxcbiAgMjE1NDEyOTM1NSxcbiAgNDI2NTIyMjI1LFxuICAxODUyNTA3ODc5LFxuICA0Mjc1MzEzNTI2LFxuICAyMzEyMzE3OTIwLFxuICAyODI3NTM2MjYsXG4gIDE3NDI1NTU4NTIsXG4gIDQxODk3MDgxNDMsXG4gIDIzOTQ4Nzc5NDUsXG4gIDM5NzkxNzc2MyxcbiAgMTYyMjE4MzYzNyxcbiAgMzYwNDM5MDg4OCxcbiAgMjcxNDg2NjU1OCxcbiAgOTUzNzI5NzMyLFxuICAxMzQwMDc2NjI2LFxuICAzNTE4NzE5OTg1LFxuICAyNzk3MzYwOTk5LFxuICAxMDY4ODI4MzgxLFxuICAxMjE5NjM4ODU5LFxuICAzNjI0NzQxODUwLFxuICAyOTM2Njc1MTQ4LFxuICA5MDYxODU0NjIsXG4gIDEwOTA4MTI1MTIsXG4gIDM3NDc2NzIwMDMsXG4gIDI4MjUzNzk2NjksXG4gIDgyOTMyOTEzNSxcbiAgMTE4MTMzNTE2MSxcbiAgMzQxMjE3NzgwNCxcbiAgMzE2MDgzNDg0MixcbiAgNjI4MDg1NDA4LFxuICAxMzgyNjA1MzY2LFxuICAzNDIzMzY5MTA5LFxuICAzMTM4MDc4NDY3LFxuICA1NzA1NjIyMzMsXG4gIDE0MjY0MDA4MTUsXG4gIDMzMTczMTY1NDIsXG4gIDI5OTg3MzM2MDgsXG4gIDczMzIzOTk1NCxcbiAgMTU1NTI2MTk1NixcbiAgMzI2ODkzNTU5MSxcbiAgMzA1MDM2MDYyNSxcbiAgNzUyNDU5NDAzLFxuICAxNTQxMzIwMjIxLFxuICAyNjA3MDcxOTIwLFxuICAzOTY1OTczMDMwLFxuICAxOTY5OTIyOTcyLFxuICA0MDczNTQ5OCxcbiAgMjYxNzgzNzIyNSxcbiAgMzk0MzU3NzE1MSxcbiAgMTkxMzA4Nzg3NyxcbiAgODM5MDgzNzEsXG4gIDI1MTIzNDE2MzQsXG4gIDM4MDM3NDA2OTIsXG4gIDIwNzUyMDg2MjIsXG4gIDIxMzI2MTExMixcbiAgMjQ2MzI3MjYwMyxcbiAgMzg1NTk5MDI4NSxcbiAgMjA5NDg1NDA3MSxcbiAgMTk4OTU4ODgxLFxuICAyMjYyMDI5MDEyLFxuICA0MDU3MjYwNjEwLFxuICAxNzU5MzU5OTkyLFxuICA1MzQ0MTQxOTAsXG4gIDIxNzY3MTg1NDEsXG4gIDQxMzkzMjkxMTUsXG4gIDE4NzM4MzYwMDEsXG4gIDQxNDY2NDU2NyxcbiAgMjI4MjI0ODkzNCxcbiAgNDI3OTIwMDM2OCxcbiAgMTcxMTY4NDU1NCxcbiAgMjg1MjgxMTE2LFxuICAyNDA1ODAxNzI3LFxuICA0MTY3MjE2NzQ1LFxuICAxNjM0NDY3Nzk1LFxuICAzNzYyMjk3MDEsXG4gIDI2ODUwNjc4OTYsXG4gIDM2MDgwMDc0MDYsXG4gIDEzMDg5MTg2MTIsXG4gIDk1NjU0MzkzOCxcbiAgMjgwODU1NTEwNSxcbiAgMzQ5NTk1ODI2MyxcbiAgMTIzMTYzNjMwMSxcbiAgMTA0NzQyNzAzNSxcbiAgMjkzMjk1OTgxOCxcbiAgMzY1NDcwMzgzNixcbiAgMTA4ODM1OTI3MCxcbiAgOTM2OTE4ZTMsXG4gIDI4NDc3MTQ4OTksXG4gIDM3MzY4Mzc4MjksXG4gIDEyMDI5MDA4NjMsXG4gIDgxNzIzMzg5NyxcbiAgMzE4MzM0MjEwOCxcbiAgMzQwMTIzNzEzMCxcbiAgMTQwNDI3NzU1MixcbiAgNjE1ODE4MTUwLFxuICAzMTM0MjA3NDkzLFxuICAzNDUzNDIxMjAzLFxuICAxNDIzODU3NDQ5LFxuICA2MDE0NTA0MzEsXG4gIDMwMDk4Mzc2MTQsXG4gIDMyOTQ3MTA0NTYsXG4gIDE1NjcxMDM3NDYsXG4gIDcxMTkyODcyNCxcbiAgMzAyMDY2ODQ3MSxcbiAgMzI3MjM4MDA2NSxcbiAgMTUxMDMzNDIzNSxcbiAgNzU1MTY3MTE3XG5dKTtcbmZ1bmN0aW9uIGVuc3VyZUJ1ZmZlcihpbnB1dCkge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKGlucHV0KSkge1xuICAgIHJldHVybiBpbnB1dDtcbiAgfVxuICBpZiAodHlwZW9mIGlucHV0ID09PSBcIm51bWJlclwiKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5hbGxvYyhpbnB1dCk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGlucHV0KTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbnB1dCBtdXN0IGJlIGJ1ZmZlciwgbnVtYmVyLCBvciBzdHJpbmcsIHJlY2VpdmVkIFwiICsgdHlwZW9mIGlucHV0KTtcbiAgfVxufVxuZnVuY3Rpb24gYnVmZmVyaXplSW50KG51bSkge1xuICBjb25zdCB0bXAgPSBlbnN1cmVCdWZmZXIoNCk7XG4gIHRtcC53cml0ZUludDMyQkUobnVtLCAwKTtcbiAgcmV0dXJuIHRtcDtcbn1cbmZ1bmN0aW9uIF9jcmMzMihidWYsIHByZXZpb3VzKSB7XG4gIGJ1ZiA9IGVuc3VyZUJ1ZmZlcihidWYpO1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKHByZXZpb3VzKSkge1xuICAgIHByZXZpb3VzID0gcHJldmlvdXMucmVhZFVJbnQzMkJFKDApO1xuICB9XG4gIGxldCBjcmMgPSB+fnByZXZpb3VzIF4gLTE7XG4gIGZvciAodmFyIG4gPSAwOyBuIDwgYnVmLmxlbmd0aDsgbisrKSB7XG4gICAgY3JjID0gQ1JDX1RBQkxFWyhjcmMgXiBidWZbbl0pICYgMjU1XSBeIGNyYyA+Pj4gODtcbiAgfVxuICByZXR1cm4gY3JjIF4gLTE7XG59XG5mdW5jdGlvbiBjcmMzMigpIHtcbiAgcmV0dXJuIGJ1ZmZlcml6ZUludChfY3JjMzIuYXBwbHkobnVsbCwgYXJndW1lbnRzKSk7XG59XG5jcmMzMi5zaWduZWQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIF9jcmMzMi5hcHBseShudWxsLCBhcmd1bWVudHMpO1xufTtcbmNyYzMyLnVuc2lnbmVkID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBfY3JjMzIuYXBwbHkobnVsbCwgYXJndW1lbnRzKSA+Pj4gMDtcbn07XG52YXIgYnVmZmVyQ3JjMzIgPSBjcmMzMjtcblxuY29uc3QgaW5kZXggPSAvKkBfX1BVUkVfXyovZ2V0RGVmYXVsdEV4cG9ydEZyb21DanMoYnVmZmVyQ3JjMzIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGluZGV4O1xuIiwKICAgICIvKipcbiAqIEpTT04gRm9ybWF0IFBsdWdpblxuICpcbiAqIEBtb2R1bGUgcGx1Z2lucy9qc29uXG4gKiBAbGljZW5zZSBbTUlUXXtAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXJjaGl2ZXJqcy9ub2RlLWFyY2hpdmVyL2Jsb2IvbWFzdGVyL0xJQ0VOU0V9XG4gKiBAY29weXJpZ2h0IChjKSAyMDEyLTIwMTQgQ2hyaXMgVGFsa2luZ3RvbiwgY29udHJpYnV0b3JzLlxuICovXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCd1dGlsJykuaW5oZXJpdHM7XG52YXIgVHJhbnNmb3JtID0gcmVxdWlyZSgncmVhZGFibGUtc3RyZWFtJykuVHJhbnNmb3JtO1xuXG52YXIgY3JjMzIgPSByZXF1aXJlKCdidWZmZXItY3JjMzInKTtcbnZhciB1dGlsID0gcmVxdWlyZSgnYXJjaGl2ZXItdXRpbHMnKTtcblxuLyoqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7KEpzb25PcHRpb25zfFRyYW5zZm9ybU9wdGlvbnMpfSBvcHRpb25zXG4gKi9cbnZhciBKc29uID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgSnNvbikpIHtcbiAgICByZXR1cm4gbmV3IEpzb24ob3B0aW9ucyk7XG4gIH1cblxuICBvcHRpb25zID0gdGhpcy5vcHRpb25zID0gdXRpbC5kZWZhdWx0cyhvcHRpb25zLCB7fSk7XG5cbiAgVHJhbnNmb3JtLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cbiAgdGhpcy5zdXBwb3J0cyA9IHtcbiAgICBkaXJlY3Rvcnk6IHRydWUsXG4gICAgc3ltbGluazogdHJ1ZVxuICB9O1xuXG4gIHRoaXMuZmlsZXMgPSBbXTtcbn07XG5cbmluaGVyaXRzKEpzb24sIFRyYW5zZm9ybSk7XG5cbi8qKlxuICogW190cmFuc2Zvcm0gZGVzY3JpcHRpb25dXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSAge0J1ZmZlcn0gICBjaHVua1xuICogQHBhcmFtICB7U3RyaW5nfSAgIGVuY29kaW5nXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4gdm9pZFxuICovXG5Kc29uLnByb3RvdHlwZS5fdHJhbnNmb3JtID0gZnVuY3Rpb24oY2h1bmssIGVuY29kaW5nLCBjYWxsYmFjaykge1xuICBjYWxsYmFjayhudWxsLCBjaHVuayk7XG59O1xuXG4vKipcbiAqIFtfd3JpdGVTdHJpbmdpZmllZCBkZXNjcmlwdGlvbl1cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB2b2lkXG4gKi9cbkpzb24ucHJvdG90eXBlLl93cml0ZVN0cmluZ2lmaWVkID0gZnVuY3Rpb24oKSB7XG4gIHZhciBmaWxlU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkodGhpcy5maWxlcyk7XG4gIHRoaXMud3JpdGUoZmlsZVN0cmluZyk7XG59O1xuXG4vKipcbiAqIFthcHBlbmQgZGVzY3JpcHRpb25dXG4gKlxuICogQHBhcmFtICB7KEJ1ZmZlcnxTdHJlYW0pfSAgIHNvdXJjZVxuICogQHBhcmFtICB7RW50cnlEYXRhfSAgIGRhdGFcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB2b2lkXG4gKi9cbkpzb24ucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uKHNvdXJjZSwgZGF0YSwgY2FsbGJhY2spIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIGRhdGEuY3JjMzIgPSAwO1xuXG4gIGZ1bmN0aW9uIG9uZW5kKGVyciwgc291cmNlQnVmZmVyKSB7XG4gICAgaWYgKGVycikge1xuICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkYXRhLnNpemUgPSBzb3VyY2VCdWZmZXIubGVuZ3RoIHx8IDA7XG4gICAgZGF0YS5jcmMzMiA9IGNyYzMyLnVuc2lnbmVkKHNvdXJjZUJ1ZmZlcik7XG5cbiAgICBzZWxmLmZpbGVzLnB1c2goZGF0YSk7XG5cbiAgICBjYWxsYmFjayhudWxsLCBkYXRhKTtcbiAgfVxuXG4gIGlmIChkYXRhLnNvdXJjZVR5cGUgPT09ICdidWZmZXInKSB7XG4gICAgb25lbmQobnVsbCwgc291cmNlKTtcbiAgfSBlbHNlIGlmIChkYXRhLnNvdXJjZVR5cGUgPT09ICdzdHJlYW0nKSB7XG4gICAgdXRpbC5jb2xsZWN0U3RyZWFtKHNvdXJjZSwgb25lbmQpO1xuICB9XG59O1xuXG4vKipcbiAqIFtmaW5hbGl6ZSBkZXNjcmlwdGlvbl1cbiAqXG4gKiBAcmV0dXJuIHZvaWRcbiAqL1xuSnNvbi5wcm90b3R5cGUuZmluYWxpemUgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fd3JpdGVTdHJpbmdpZmllZCgpO1xuICB0aGlzLmVuZCgpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBKc29uO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEpzb25PcHRpb25zXG4gKiBAZ2xvYmFsXG4gKi9cbiIsCiAgICAiLyoqXG4gKiBBcmNoaXZlciBWZW5kaW5nXG4gKlxuICogQGlnbm9yZVxuICogQGxpY2Vuc2UgW01JVF17QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FyY2hpdmVyanMvbm9kZS1hcmNoaXZlci9ibG9iL21hc3Rlci9MSUNFTlNFfVxuICogQGNvcHlyaWdodCAoYykgMjAxMi0yMDE0IENocmlzIFRhbGtpbmd0b24sIGNvbnRyaWJ1dG9ycy5cbiAqL1xudmFyIEFyY2hpdmVyID0gcmVxdWlyZSgnLi9saWIvY29yZScpO1xuXG52YXIgZm9ybWF0cyA9IHt9O1xuXG4vKipcbiAqIERpc3BlbnNlcyBhIG5ldyBBcmNoaXZlciBpbnN0YW5jZS5cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSAge1N0cmluZ30gZm9ybWF0IFRoZSBhcmNoaXZlIGZvcm1hdCB0byB1c2UuXG4gKiBAcGFyYW0gIHtPYmplY3R9IG9wdGlvbnMgU2VlIFtBcmNoaXZlcl17QGxpbmsgQXJjaGl2ZXJ9XG4gKiBAcmV0dXJuIHtBcmNoaXZlcn1cbiAqL1xudmFyIHZlbmRpbmcgPSBmdW5jdGlvbihmb3JtYXQsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHZlbmRpbmcuY3JlYXRlKGZvcm1hdCwgb3B0aW9ucyk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgQXJjaGl2ZXIgaW5zdGFuY2UuXG4gKlxuICogQHBhcmFtICB7U3RyaW5nfSBmb3JtYXQgVGhlIGFyY2hpdmUgZm9ybWF0IHRvIHVzZS5cbiAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9ucyBTZWUgW0FyY2hpdmVyXXtAbGluayBBcmNoaXZlcn1cbiAqIEByZXR1cm4ge0FyY2hpdmVyfVxuICovXG52ZW5kaW5nLmNyZWF0ZSA9IGZ1bmN0aW9uKGZvcm1hdCwgb3B0aW9ucykge1xuICBpZiAoZm9ybWF0c1tmb3JtYXRdKSB7XG4gICAgdmFyIGluc3RhbmNlID0gbmV3IEFyY2hpdmVyKGZvcm1hdCwgb3B0aW9ucyk7XG4gICAgaW5zdGFuY2Uuc2V0Rm9ybWF0KGZvcm1hdCk7XG4gICAgaW5zdGFuY2Uuc2V0TW9kdWxlKG5ldyBmb3JtYXRzW2Zvcm1hdF0ob3B0aW9ucykpO1xuXG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcignY3JlYXRlKCcgKyBmb3JtYXQgKyAnKTogZm9ybWF0IG5vdCByZWdpc3RlcmVkJyk7XG4gIH1cbn07XG5cbi8qKlxuICogUmVnaXN0ZXJzIGEgZm9ybWF0IGZvciB1c2Ugd2l0aCBhcmNoaXZlci5cbiAqXG4gKiBAcGFyYW0gIHtTdHJpbmd9IGZvcm1hdCBUaGUgbmFtZSBvZiB0aGUgZm9ybWF0LlxuICogQHBhcmFtICB7RnVuY3Rpb259IG1vZHVsZSBUaGUgZnVuY3Rpb24gZm9yIGFyY2hpdmVyIHRvIGludGVyYWN0IHdpdGguXG4gKiBAcmV0dXJuIHZvaWRcbiAqL1xudmVuZGluZy5yZWdpc3RlckZvcm1hdCA9IGZ1bmN0aW9uKGZvcm1hdCwgbW9kdWxlKSB7XG4gIGlmIChmb3JtYXRzW2Zvcm1hdF0pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlZ2lzdGVyKCcgKyBmb3JtYXQgKyAnKTogZm9ybWF0IGFscmVhZHkgcmVnaXN0ZXJlZCcpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBtb2R1bGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlZ2lzdGVyKCcgKyBmb3JtYXQgKyAnKTogZm9ybWF0IG1vZHVsZSBpbnZhbGlkJyk7XG4gIH1cblxuICBpZiAodHlwZW9mIG1vZHVsZS5wcm90b3R5cGUuYXBwZW5kICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBtb2R1bGUucHJvdG90eXBlLmZpbmFsaXplICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdyZWdpc3RlcignICsgZm9ybWF0ICsgJyk6IGZvcm1hdCBtb2R1bGUgbWlzc2luZyBtZXRob2RzJyk7XG4gIH1cblxuICBmb3JtYXRzW2Zvcm1hdF0gPSBtb2R1bGU7XG59O1xuXG4vKipcbiAqIENoZWNrIGlmIHRoZSBmb3JtYXQgaXMgYWxyZWFkeSByZWdpc3RlcmVkLlxuICogXG4gKiBAcGFyYW0ge1N0cmluZ30gZm9ybWF0IHRoZSBuYW1lIG9mIHRoZSBmb3JtYXQuXG4gKiBAcmV0dXJuIGJvb2xlYW5cbiAqL1xudmVuZGluZy5pc1JlZ2lzdGVyZWRGb3JtYXQgPSBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gIGlmIChmb3JtYXRzW2Zvcm1hdF0pIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBcbiAgcmV0dXJuIGZhbHNlO1xufTtcblxudmVuZGluZy5yZWdpc3RlckZvcm1hdCgnemlwJywgcmVxdWlyZSgnLi9saWIvcGx1Z2lucy96aXAnKSk7XG52ZW5kaW5nLnJlZ2lzdGVyRm9ybWF0KCd0YXInLCByZXF1aXJlKCcuL2xpYi9wbHVnaW5zL3RhcicpKTtcbnZlbmRpbmcucmVnaXN0ZXJGb3JtYXQoJ2pzb24nLCByZXF1aXJlKCcuL2xpYi9wbHVnaW5zL2pzb24nKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gdmVuZGluZzsiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlWmlwVXBsb2FkU3RyZWFtID0gZXhwb3J0cy5aaXBVcGxvYWRTdHJlYW0gPSBleHBvcnRzLkRFRkFVTFRfQ09NUFJFU1NJT05fTEVWRUwgPSB2b2lkIDA7XG5jb25zdCBzdHJlYW0gPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcInN0cmVhbVwiKSk7XG5jb25zdCBwcm9taXNlc18xID0gcmVxdWlyZShcImZzL3Byb21pc2VzXCIpO1xuY29uc3QgYXJjaGl2ZXIgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcImFyY2hpdmVyXCIpKTtcbmNvbnN0IGNvcmUgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIkBhY3Rpb25zL2NvcmVcIikpO1xuY29uc3QgY29uZmlnXzEgPSByZXF1aXJlKFwiLi4vc2hhcmVkL2NvbmZpZ1wiKTtcbmV4cG9ydHMuREVGQVVMVF9DT01QUkVTU0lPTl9MRVZFTCA9IDY7XG4vLyBDdXN0b20gc3RyZWFtIHRyYW5zZm9ybWVyIHNvIHdlIGNhbiBzZXQgdGhlIGhpZ2hXYXRlck1hcmsgcHJvcGVydHlcbi8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvaXNzdWVzLzg4NTVcbmNsYXNzIFppcFVwbG9hZFN0cmVhbSBleHRlbmRzIHN0cmVhbS5UcmFuc2Zvcm0ge1xuICAgIGNvbnN0cnVjdG9yKGJ1ZmZlclNpemUpIHtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgaGlnaFdhdGVyTWFyazogYnVmZmVyU2l6ZVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBfdHJhbnNmb3JtKGNodW5rLCBlbmMsIGNiKSB7XG4gICAgICAgIGNiKG51bGwsIGNodW5rKTtcbiAgICB9XG59XG5leHBvcnRzLlppcFVwbG9hZFN0cmVhbSA9IFppcFVwbG9hZFN0cmVhbTtcbmZ1bmN0aW9uIGNyZWF0ZVppcFVwbG9hZFN0cmVhbSh1cGxvYWRTcGVjaWZpY2F0aW9uLCBjb21wcmVzc2lvbkxldmVsID0gZXhwb3J0cy5ERUZBVUxUX0NPTVBSRVNTSU9OX0xFVkVMKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29yZS5kZWJ1ZyhgQ3JlYXRpbmcgQXJ0aWZhY3QgYXJjaGl2ZSB3aXRoIGNvbXByZXNzaW9uTGV2ZWw6ICR7Y29tcHJlc3Npb25MZXZlbH1gKTtcbiAgICAgICAgY29uc3QgemlwID0gYXJjaGl2ZXIuY3JlYXRlKCd6aXAnLCB7XG4gICAgICAgICAgICBoaWdoV2F0ZXJNYXJrOiAoMCwgY29uZmlnXzEuZ2V0VXBsb2FkQ2h1bmtTaXplKSgpLFxuICAgICAgICAgICAgemxpYjogeyBsZXZlbDogY29tcHJlc3Npb25MZXZlbCB9XG4gICAgICAgIH0pO1xuICAgICAgICAvLyByZWdpc3RlciBjYWxsYmFja3MgZm9yIHZhcmlvdXMgZXZlbnRzIGR1cmluZyB0aGUgemlwIGxpZmVjeWNsZVxuICAgICAgICB6aXAub24oJ2Vycm9yJywgemlwRXJyb3JDYWxsYmFjayk7XG4gICAgICAgIHppcC5vbignd2FybmluZycsIHppcFdhcm5pbmdDYWxsYmFjayk7XG4gICAgICAgIHppcC5vbignZmluaXNoJywgemlwRmluaXNoQ2FsbGJhY2spO1xuICAgICAgICB6aXAub24oJ2VuZCcsIHppcEVuZENhbGxiYWNrKTtcbiAgICAgICAgZm9yIChjb25zdCBmaWxlIG9mIHVwbG9hZFNwZWNpZmljYXRpb24pIHtcbiAgICAgICAgICAgIGlmIChmaWxlLnNvdXJjZVBhdGggIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiBzeW1saW5rIGFuZCByZXNvbHZlIHRoZSBzb3VyY2UgcGF0aFxuICAgICAgICAgICAgICAgIGxldCBzb3VyY2VQYXRoID0gZmlsZS5zb3VyY2VQYXRoO1xuICAgICAgICAgICAgICAgIGlmIChmaWxlLnN0YXRzLmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgc291cmNlUGF0aCA9IHlpZWxkICgwLCBwcm9taXNlc18xLnJlYWxwYXRoKShmaWxlLnNvdXJjZVBhdGgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBBZGQgdGhlIGZpbGUgdG8gdGhlIHppcFxuICAgICAgICAgICAgICAgIHppcC5maWxlKHNvdXJjZVBhdGgsIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogZmlsZS5kZXN0aW5hdGlvblBhdGhcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEFkZCBhIGRpcmVjdG9yeSB0byB0aGUgemlwXG4gICAgICAgICAgICAgICAgemlwLmFwcGVuZCgnJywgeyBuYW1lOiBmaWxlLmRlc3RpbmF0aW9uUGF0aCB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBidWZmZXJTaXplID0gKDAsIGNvbmZpZ18xLmdldFVwbG9hZENodW5rU2l6ZSkoKTtcbiAgICAgICAgY29uc3QgemlwVXBsb2FkU3RyZWFtID0gbmV3IFppcFVwbG9hZFN0cmVhbShidWZmZXJTaXplKTtcbiAgICAgICAgY29yZS5kZWJ1ZyhgWmlwIHdyaXRlIGhpZ2ggd2F0ZXJtYXJrIHZhbHVlICR7emlwVXBsb2FkU3RyZWFtLndyaXRhYmxlSGlnaFdhdGVyTWFya31gKTtcbiAgICAgICAgY29yZS5kZWJ1ZyhgWmlwIHJlYWQgaGlnaCB3YXRlcm1hcmsgdmFsdWUgJHt6aXBVcGxvYWRTdHJlYW0ucmVhZGFibGVIaWdoV2F0ZXJNYXJrfWApO1xuICAgICAgICB6aXAucGlwZSh6aXBVcGxvYWRTdHJlYW0pO1xuICAgICAgICB6aXAuZmluYWxpemUoKTtcbiAgICAgICAgcmV0dXJuIHppcFVwbG9hZFN0cmVhbTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuY3JlYXRlWmlwVXBsb2FkU3RyZWFtID0gY3JlYXRlWmlwVXBsb2FkU3RyZWFtO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmNvbnN0IHppcEVycm9yQ2FsbGJhY2sgPSAoZXJyb3IpID0+IHtcbiAgICBjb3JlLmVycm9yKCdBbiBlcnJvciBoYXMgb2NjdXJyZWQgd2hpbGUgY3JlYXRpbmcgdGhlIHppcCBmaWxlIGZvciB1cGxvYWQnKTtcbiAgICBjb3JlLmluZm8oZXJyb3IpO1xuICAgIHRocm93IG5ldyBFcnJvcignQW4gZXJyb3IgaGFzIG9jY3VycmVkIGR1cmluZyB6aXAgY3JlYXRpb24gZm9yIHRoZSBhcnRpZmFjdCcpO1xufTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5jb25zdCB6aXBXYXJuaW5nQ2FsbGJhY2sgPSAoZXJyb3IpID0+IHtcbiAgICBpZiAoZXJyb3IuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgY29yZS53YXJuaW5nKCdFTk9FTlQgd2FybmluZyBkdXJpbmcgYXJ0aWZhY3QgemlwIGNyZWF0aW9uLiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5Jyk7XG4gICAgICAgIGNvcmUuaW5mbyhlcnJvcik7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjb3JlLndhcm5pbmcoYEEgbm9uLWJsb2NraW5nIHdhcm5pbmcgaGFzIG9jY3VycmVkIGR1cmluZyBhcnRpZmFjdCB6aXAgY3JlYXRpb246ICR7ZXJyb3IuY29kZX1gKTtcbiAgICAgICAgY29yZS5pbmZvKGVycm9yKTtcbiAgICB9XG59O1xuY29uc3QgemlwRmluaXNoQ2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgY29yZS5kZWJ1ZygnWmlwIHN0cmVhbSBmb3IgdXBsb2FkIGhhcyBmaW5pc2hlZC4nKTtcbn07XG5jb25zdCB6aXBFbmRDYWxsYmFjayA9ICgpID0+IHtcbiAgICBjb3JlLmRlYnVnKCdaaXAgc3RyZWFtIGZvciB1cGxvYWQgaGFzIGVuZGVkLicpO1xufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXppcC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudXBsb2FkQXJ0aWZhY3QgPSB2b2lkIDA7XG5jb25zdCBjb3JlID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJAYWN0aW9ucy9jb3JlXCIpKTtcbmNvbnN0IHJldGVudGlvbl8xID0gcmVxdWlyZShcIi4vcmV0ZW50aW9uXCIpO1xuY29uc3QgcGF0aF9hbmRfYXJ0aWZhY3RfbmFtZV92YWxpZGF0aW9uXzEgPSByZXF1aXJlKFwiLi9wYXRoLWFuZC1hcnRpZmFjdC1uYW1lLXZhbGlkYXRpb25cIik7XG5jb25zdCBhcnRpZmFjdF90d2lycF9jbGllbnRfMSA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvYXJ0aWZhY3QtdHdpcnAtY2xpZW50XCIpO1xuY29uc3QgdXBsb2FkX3ppcF9zcGVjaWZpY2F0aW9uXzEgPSByZXF1aXJlKFwiLi91cGxvYWQtemlwLXNwZWNpZmljYXRpb25cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vc2hhcmVkL3V0aWxcIik7XG5jb25zdCBibG9iX3VwbG9hZF8xID0gcmVxdWlyZShcIi4vYmxvYi11cGxvYWRcIik7XG5jb25zdCB6aXBfMSA9IHJlcXVpcmUoXCIuL3ppcFwiKTtcbmNvbnN0IGdlbmVyYXRlZF8xID0gcmVxdWlyZShcIi4uLy4uL2dlbmVyYXRlZFwiKTtcbmNvbnN0IGVycm9yc18xID0gcmVxdWlyZShcIi4uL3NoYXJlZC9lcnJvcnNcIik7XG5mdW5jdGlvbiB1cGxvYWRBcnRpZmFjdChuYW1lLCBmaWxlcywgcm9vdERpcmVjdG9yeSwgb3B0aW9ucykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICgwLCBwYXRoX2FuZF9hcnRpZmFjdF9uYW1lX3ZhbGlkYXRpb25fMS52YWxpZGF0ZUFydGlmYWN0TmFtZSkobmFtZSk7XG4gICAgICAgICgwLCB1cGxvYWRfemlwX3NwZWNpZmljYXRpb25fMS52YWxpZGF0ZVJvb3REaXJlY3RvcnkpKHJvb3REaXJlY3RvcnkpO1xuICAgICAgICBjb25zdCB6aXBTcGVjaWZpY2F0aW9uID0gKDAsIHVwbG9hZF96aXBfc3BlY2lmaWNhdGlvbl8xLmdldFVwbG9hZFppcFNwZWNpZmljYXRpb24pKGZpbGVzLCByb290RGlyZWN0b3J5KTtcbiAgICAgICAgaWYgKHppcFNwZWNpZmljYXRpb24ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuRmlsZXNOb3RGb3VuZEVycm9yKHppcFNwZWNpZmljYXRpb24uZmxhdE1hcChzID0+IChzLnNvdXJjZVBhdGggPyBbcy5zb3VyY2VQYXRoXSA6IFtdKSkpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGdldCB0aGUgSURzIG5lZWRlZCBmb3IgdGhlIGFydGlmYWN0IGNyZWF0aW9uXG4gICAgICAgIGNvbnN0IGJhY2tlbmRJZHMgPSAoMCwgdXRpbF8xLmdldEJhY2tlbmRJZHNGcm9tVG9rZW4pKCk7XG4gICAgICAgIC8vIGNyZWF0ZSB0aGUgYXJ0aWZhY3QgY2xpZW50XG4gICAgICAgIGNvbnN0IGFydGlmYWN0Q2xpZW50ID0gKDAsIGFydGlmYWN0X3R3aXJwX2NsaWVudF8xLmludGVybmFsQXJ0aWZhY3RUd2lycENsaWVudCkoKTtcbiAgICAgICAgLy8gY3JlYXRlIHRoZSBhcnRpZmFjdFxuICAgICAgICBjb25zdCBjcmVhdGVBcnRpZmFjdFJlcSA9IHtcbiAgICAgICAgICAgIHdvcmtmbG93UnVuQmFja2VuZElkOiBiYWNrZW5kSWRzLndvcmtmbG93UnVuQmFja2VuZElkLFxuICAgICAgICAgICAgd29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQ6IGJhY2tlbmRJZHMud29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQsXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgdmVyc2lvbjogNFxuICAgICAgICB9O1xuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIHJldGVudGlvbiBwZXJpb2QsIGFkZCBpdCB0byB0aGUgcmVxdWVzdFxuICAgICAgICBjb25zdCBleHBpcmVzQXQgPSAoMCwgcmV0ZW50aW9uXzEuZ2V0RXhwaXJhdGlvbikob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnJldGVudGlvbkRheXMpO1xuICAgICAgICBpZiAoZXhwaXJlc0F0KSB7XG4gICAgICAgICAgICBjcmVhdGVBcnRpZmFjdFJlcS5leHBpcmVzQXQgPSBleHBpcmVzQXQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3JlYXRlQXJ0aWZhY3RSZXNwID0geWllbGQgYXJ0aWZhY3RDbGllbnQuQ3JlYXRlQXJ0aWZhY3QoY3JlYXRlQXJ0aWZhY3RSZXEpO1xuICAgICAgICBpZiAoIWNyZWF0ZUFydGlmYWN0UmVzcC5vaykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGVycm9yc18xLkludmFsaWRSZXNwb25zZUVycm9yKCdDcmVhdGVBcnRpZmFjdDogcmVzcG9uc2UgZnJvbSBiYWNrZW5kIHdhcyBub3Qgb2snKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB6aXBVcGxvYWRTdHJlYW0gPSB5aWVsZCAoMCwgemlwXzEuY3JlYXRlWmlwVXBsb2FkU3RyZWFtKSh6aXBTcGVjaWZpY2F0aW9uLCBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY29tcHJlc3Npb25MZXZlbCk7XG4gICAgICAgIC8vIFVwbG9hZCB6aXAgdG8gYmxvYiBzdG9yYWdlXG4gICAgICAgIGNvbnN0IHVwbG9hZFJlc3VsdCA9IHlpZWxkICgwLCBibG9iX3VwbG9hZF8xLnVwbG9hZFppcFRvQmxvYlN0b3JhZ2UpKGNyZWF0ZUFydGlmYWN0UmVzcC5zaWduZWRVcGxvYWRVcmwsIHppcFVwbG9hZFN0cmVhbSk7XG4gICAgICAgIC8vIGZpbmFsaXplIHRoZSBhcnRpZmFjdFxuICAgICAgICBjb25zdCBmaW5hbGl6ZUFydGlmYWN0UmVxID0ge1xuICAgICAgICAgICAgd29ya2Zsb3dSdW5CYWNrZW5kSWQ6IGJhY2tlbmRJZHMud29ya2Zsb3dSdW5CYWNrZW5kSWQsXG4gICAgICAgICAgICB3b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZDogYmFja2VuZElkcy53b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZCxcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBzaXplOiB1cGxvYWRSZXN1bHQudXBsb2FkU2l6ZSA/IHVwbG9hZFJlc3VsdC51cGxvYWRTaXplLnRvU3RyaW5nKCkgOiAnMCdcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHVwbG9hZFJlc3VsdC5zaGEyNTZIYXNoKSB7XG4gICAgICAgICAgICBmaW5hbGl6ZUFydGlmYWN0UmVxLmhhc2ggPSBnZW5lcmF0ZWRfMS5TdHJpbmdWYWx1ZS5jcmVhdGUoe1xuICAgICAgICAgICAgICAgIHZhbHVlOiBgc2hhMjU2OiR7dXBsb2FkUmVzdWx0LnNoYTI1Nkhhc2h9YFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29yZS5pbmZvKGBGaW5hbGl6aW5nIGFydGlmYWN0IHVwbG9hZGApO1xuICAgICAgICBjb25zdCBmaW5hbGl6ZUFydGlmYWN0UmVzcCA9IHlpZWxkIGFydGlmYWN0Q2xpZW50LkZpbmFsaXplQXJ0aWZhY3QoZmluYWxpemVBcnRpZmFjdFJlcSk7XG4gICAgICAgIGlmICghZmluYWxpemVBcnRpZmFjdFJlc3Aub2spIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBlcnJvcnNfMS5JbnZhbGlkUmVzcG9uc2VFcnJvcignRmluYWxpemVBcnRpZmFjdDogcmVzcG9uc2UgZnJvbSBiYWNrZW5kIHdhcyBub3Qgb2snKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhcnRpZmFjdElkID0gQmlnSW50KGZpbmFsaXplQXJ0aWZhY3RSZXNwLmFydGlmYWN0SWQpO1xuICAgICAgICBjb3JlLmluZm8oYEFydGlmYWN0ICR7bmFtZX0uemlwIHN1Y2Nlc3NmdWxseSBmaW5hbGl6ZWQuIEFydGlmYWN0IElEICR7YXJ0aWZhY3RJZH1gKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNpemU6IHVwbG9hZFJlc3VsdC51cGxvYWRTaXplLFxuICAgICAgICAgICAgaWQ6IE51bWJlcihhcnRpZmFjdElkKVxuICAgICAgICB9O1xuICAgIH0pO1xufVxuZXhwb3J0cy51cGxvYWRBcnRpZmFjdCA9IHVwbG9hZEFydGlmYWN0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXBsb2FkLWFydGlmYWN0LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkNvbnRleHQgPSB2b2lkIDA7XG5jb25zdCBmc18xID0gcmVxdWlyZShcImZzXCIpO1xuY29uc3Qgb3NfMSA9IHJlcXVpcmUoXCJvc1wiKTtcbmNsYXNzIENvbnRleHQge1xuICAgIC8qKlxuICAgICAqIEh5ZHJhdGUgdGhlIGNvbnRleHQgZnJvbSB0aGUgZW52aXJvbm1lbnRcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgIHRoaXMucGF5bG9hZCA9IHt9O1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuR0lUSFVCX0VWRU5UX1BBVEgpIHtcbiAgICAgICAgICAgIGlmIChmc18xLmV4aXN0c1N5bmMocHJvY2Vzcy5lbnYuR0lUSFVCX0VWRU5UX1BBVEgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYXlsb2FkID0gSlNPTi5wYXJzZShmc18xLnJlYWRGaWxlU3luYyhwcm9jZXNzLmVudi5HSVRIVUJfRVZFTlRfUEFUSCwgeyBlbmNvZGluZzogJ3V0ZjgnIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGggPSBwcm9jZXNzLmVudi5HSVRIVUJfRVZFTlRfUEFUSDtcbiAgICAgICAgICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShgR0lUSFVCX0VWRU5UX1BBVEggJHtwYXRofSBkb2VzIG5vdCBleGlzdCR7b3NfMS5FT0x9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ldmVudE5hbWUgPSBwcm9jZXNzLmVudi5HSVRIVUJfRVZFTlRfTkFNRTtcbiAgICAgICAgdGhpcy5zaGEgPSBwcm9jZXNzLmVudi5HSVRIVUJfU0hBO1xuICAgICAgICB0aGlzLnJlZiA9IHByb2Nlc3MuZW52LkdJVEhVQl9SRUY7XG4gICAgICAgIHRoaXMud29ya2Zsb3cgPSBwcm9jZXNzLmVudi5HSVRIVUJfV09SS0ZMT1c7XG4gICAgICAgIHRoaXMuYWN0aW9uID0gcHJvY2Vzcy5lbnYuR0lUSFVCX0FDVElPTjtcbiAgICAgICAgdGhpcy5hY3RvciA9IHByb2Nlc3MuZW52LkdJVEhVQl9BQ1RPUjtcbiAgICAgICAgdGhpcy5qb2IgPSBwcm9jZXNzLmVudi5HSVRIVUJfSk9CO1xuICAgICAgICB0aGlzLnJ1bk51bWJlciA9IHBhcnNlSW50KHByb2Nlc3MuZW52LkdJVEhVQl9SVU5fTlVNQkVSLCAxMCk7XG4gICAgICAgIHRoaXMucnVuSWQgPSBwYXJzZUludChwcm9jZXNzLmVudi5HSVRIVUJfUlVOX0lELCAxMCk7XG4gICAgICAgIHRoaXMuYXBpVXJsID0gKF9hID0gcHJvY2Vzcy5lbnYuR0lUSFVCX0FQSV9VUkwpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGBodHRwczovL2FwaS5naXRodWIuY29tYDtcbiAgICAgICAgdGhpcy5zZXJ2ZXJVcmwgPSAoX2IgPSBwcm9jZXNzLmVudi5HSVRIVUJfU0VSVkVSX1VSTCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogYGh0dHBzOi8vZ2l0aHViLmNvbWA7XG4gICAgICAgIHRoaXMuZ3JhcGhxbFVybCA9IChfYyA9IHByb2Nlc3MuZW52LkdJVEhVQl9HUkFQSFFMX1VSTCkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogYGh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vZ3JhcGhxbGA7XG4gICAgfVxuICAgIGdldCBpc3N1ZSgpIHtcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IHRoaXMucGF5bG9hZDtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5yZXBvKSwgeyBudW1iZXI6IChwYXlsb2FkLmlzc3VlIHx8IHBheWxvYWQucHVsbF9yZXF1ZXN0IHx8IHBheWxvYWQpLm51bWJlciB9KTtcbiAgICB9XG4gICAgZ2V0IHJlcG8oKSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5HSVRIVUJfUkVQT1NJVE9SWSkge1xuICAgICAgICAgICAgY29uc3QgW293bmVyLCByZXBvXSA9IHByb2Nlc3MuZW52LkdJVEhVQl9SRVBPU0lUT1JZLnNwbGl0KCcvJyk7XG4gICAgICAgICAgICByZXR1cm4geyBvd25lciwgcmVwbyB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnBheWxvYWQucmVwb3NpdG9yeSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBvd25lcjogdGhpcy5wYXlsb2FkLnJlcG9zaXRvcnkub3duZXIubG9naW4sXG4gICAgICAgICAgICAgICAgcmVwbzogdGhpcy5wYXlsb2FkLnJlcG9zaXRvcnkubmFtZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJjb250ZXh0LnJlcG8gcmVxdWlyZXMgYSBHSVRIVUJfUkVQT1NJVE9SWSBlbnZpcm9ubWVudCB2YXJpYWJsZSBsaWtlICdvd25lci9yZXBvJ1wiKTtcbiAgICB9XG59XG5leHBvcnRzLkNvbnRleHQgPSBDb250ZXh0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29udGV4dC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH0pO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0QXBpQmFzZVVybCA9IGV4cG9ydHMuZ2V0UHJveHlBZ2VudCA9IGV4cG9ydHMuZ2V0QXV0aFN0cmluZyA9IHZvaWQgMDtcbmNvbnN0IGh0dHBDbGllbnQgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIkBhY3Rpb25zL2h0dHAtY2xpZW50XCIpKTtcbmZ1bmN0aW9uIGdldEF1dGhTdHJpbmcodG9rZW4sIG9wdGlvbnMpIHtcbiAgICBpZiAoIXRva2VuICYmICFvcHRpb25zLmF1dGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJhbWV0ZXIgdG9rZW4gb3Igb3B0cy5hdXRoIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHRva2VuICYmIG9wdGlvbnMuYXV0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlcnMgdG9rZW4gYW5kIG9wdHMuYXV0aCBtYXkgbm90IGJvdGggYmUgc3BlY2lmaWVkJyk7XG4gICAgfVxuICAgIHJldHVybiB0eXBlb2Ygb3B0aW9ucy5hdXRoID09PSAnc3RyaW5nJyA/IG9wdGlvbnMuYXV0aCA6IGB0b2tlbiAke3Rva2VufWA7XG59XG5leHBvcnRzLmdldEF1dGhTdHJpbmcgPSBnZXRBdXRoU3RyaW5nO1xuZnVuY3Rpb24gZ2V0UHJveHlBZ2VudChkZXN0aW5hdGlvblVybCkge1xuICAgIGNvbnN0IGhjID0gbmV3IGh0dHBDbGllbnQuSHR0cENsaWVudCgpO1xuICAgIHJldHVybiBoYy5nZXRBZ2VudChkZXN0aW5hdGlvblVybCk7XG59XG5leHBvcnRzLmdldFByb3h5QWdlbnQgPSBnZXRQcm94eUFnZW50O1xuZnVuY3Rpb24gZ2V0QXBpQmFzZVVybCgpIHtcbiAgICByZXR1cm4gcHJvY2Vzcy5lbnZbJ0dJVEhVQl9BUElfVVJMJ10gfHwgJ2h0dHBzOi8vYXBpLmdpdGh1Yi5jb20nO1xufVxuZXhwb3J0cy5nZXRBcGlCYXNlVXJsID0gZ2V0QXBpQmFzZVVybDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWxzLmpzLm1hcCIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5mdW5jdGlvbiBnZXRVc2VyQWdlbnQoKSB7XG4gIGlmICh0eXBlb2YgbmF2aWdhdG9yID09PSBcIm9iamVjdFwiICYmIFwidXNlckFnZW50XCIgaW4gbmF2aWdhdG9yKSB7XG4gICAgcmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQ7XG4gIH1cblxuICBpZiAodHlwZW9mIHByb2Nlc3MgPT09IFwib2JqZWN0XCIgJiYgcHJvY2Vzcy52ZXJzaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gYE5vZGUuanMvJHtwcm9jZXNzLnZlcnNpb24uc3Vic3RyKDEpfSAoJHtwcm9jZXNzLnBsYXRmb3JtfTsgJHtwcm9jZXNzLmFyY2h9KWA7XG4gIH1cblxuICByZXR1cm4gXCI8ZW52aXJvbm1lbnQgdW5kZXRlY3RhYmxlPlwiO1xufVxuXG5leHBvcnRzLmdldFVzZXJBZ2VudCA9IGdldFVzZXJBZ2VudDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxuIiwKICAgICJtb2R1bGUuZXhwb3J0cyA9IHJlZ2lzdGVyO1xuXG5mdW5jdGlvbiByZWdpc3RlcihzdGF0ZSwgbmFtZSwgbWV0aG9kLCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2YgbWV0aG9kICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJtZXRob2QgZm9yIGJlZm9yZSBob29rIG11c3QgYmUgYSBmdW5jdGlvblwiKTtcbiAgfVxuXG4gIGlmICghb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KG5hbWUpKSB7XG4gICAgcmV0dXJuIG5hbWUucmV2ZXJzZSgpLnJlZHVjZShmdW5jdGlvbiAoY2FsbGJhY2ssIG5hbWUpIHtcbiAgICAgIHJldHVybiByZWdpc3Rlci5iaW5kKG51bGwsIHN0YXRlLCBuYW1lLCBjYWxsYmFjaywgb3B0aW9ucyk7XG4gICAgfSwgbWV0aG9kKSgpO1xuICB9XG5cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgIGlmICghc3RhdGUucmVnaXN0cnlbbmFtZV0pIHtcbiAgICAgIHJldHVybiBtZXRob2Qob3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRlLnJlZ2lzdHJ5W25hbWVdLnJlZHVjZShmdW5jdGlvbiAobWV0aG9kLCByZWdpc3RlcmVkKSB7XG4gICAgICByZXR1cm4gcmVnaXN0ZXJlZC5ob29rLmJpbmQobnVsbCwgbWV0aG9kLCBvcHRpb25zKTtcbiAgICB9LCBtZXRob2QpKCk7XG4gIH0pO1xufVxuIiwKICAgICJtb2R1bGUuZXhwb3J0cyA9IGFkZEhvb2s7XG5cbmZ1bmN0aW9uIGFkZEhvb2soc3RhdGUsIGtpbmQsIG5hbWUsIGhvb2spIHtcbiAgdmFyIG9yaWcgPSBob29rO1xuICBpZiAoIXN0YXRlLnJlZ2lzdHJ5W25hbWVdKSB7XG4gICAgc3RhdGUucmVnaXN0cnlbbmFtZV0gPSBbXTtcbiAgfVxuXG4gIGlmIChraW5kID09PSBcImJlZm9yZVwiKSB7XG4gICAgaG9vayA9IGZ1bmN0aW9uIChtZXRob2QsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgICAudGhlbihvcmlnLmJpbmQobnVsbCwgb3B0aW9ucykpXG4gICAgICAgIC50aGVuKG1ldGhvZC5iaW5kKG51bGwsIG9wdGlvbnMpKTtcbiAgICB9O1xuICB9XG5cbiAgaWYgKGtpbmQgPT09IFwiYWZ0ZXJcIikge1xuICAgIGhvb2sgPSBmdW5jdGlvbiAobWV0aG9kLCBvcHRpb25zKSB7XG4gICAgICB2YXIgcmVzdWx0O1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgICAgIC50aGVuKG1ldGhvZC5iaW5kKG51bGwsIG9wdGlvbnMpKVxuICAgICAgICAudGhlbihmdW5jdGlvbiAocmVzdWx0Xykge1xuICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdF87XG4gICAgICAgICAgcmV0dXJuIG9yaWcocmVzdWx0LCBvcHRpb25zKTtcbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0pO1xuICAgIH07XG4gIH1cblxuICBpZiAoa2luZCA9PT0gXCJlcnJvclwiKSB7XG4gICAgaG9vayA9IGZ1bmN0aW9uIChtZXRob2QsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgICAudGhlbihtZXRob2QuYmluZChudWxsLCBvcHRpb25zKSlcbiAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBvcmlnKGVycm9yLCBvcHRpb25zKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRlLnJlZ2lzdHJ5W25hbWVdLnB1c2goe1xuICAgIGhvb2s6IGhvb2ssXG4gICAgb3JpZzogb3JpZyxcbiAgfSk7XG59XG4iLAogICAgIm1vZHVsZS5leHBvcnRzID0gcmVtb3ZlSG9vaztcblxuZnVuY3Rpb24gcmVtb3ZlSG9vayhzdGF0ZSwgbmFtZSwgbWV0aG9kKSB7XG4gIGlmICghc3RhdGUucmVnaXN0cnlbbmFtZV0pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgaW5kZXggPSBzdGF0ZS5yZWdpc3RyeVtuYW1lXVxuICAgIC5tYXAoZnVuY3Rpb24gKHJlZ2lzdGVyZWQpIHtcbiAgICAgIHJldHVybiByZWdpc3RlcmVkLm9yaWc7XG4gICAgfSlcbiAgICAuaW5kZXhPZihtZXRob2QpO1xuXG4gIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBzdGF0ZS5yZWdpc3RyeVtuYW1lXS5zcGxpY2UoaW5kZXgsIDEpO1xufVxuIiwKICAgICJ2YXIgcmVnaXN0ZXIgPSByZXF1aXJlKFwiLi9saWIvcmVnaXN0ZXJcIik7XG52YXIgYWRkSG9vayA9IHJlcXVpcmUoXCIuL2xpYi9hZGRcIik7XG52YXIgcmVtb3ZlSG9vayA9IHJlcXVpcmUoXCIuL2xpYi9yZW1vdmVcIik7XG5cbi8vIGJpbmQgd2l0aCBhcnJheSBvZiBhcmd1bWVudHM6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yMTc5MjkxM1xudmFyIGJpbmQgPSBGdW5jdGlvbi5iaW5kO1xudmFyIGJpbmRhYmxlID0gYmluZC5iaW5kKGJpbmQpO1xuXG5mdW5jdGlvbiBiaW5kQXBpKGhvb2ssIHN0YXRlLCBuYW1lKSB7XG4gIHZhciByZW1vdmVIb29rUmVmID0gYmluZGFibGUocmVtb3ZlSG9vaywgbnVsbCkuYXBwbHkoXG4gICAgbnVsbCxcbiAgICBuYW1lID8gW3N0YXRlLCBuYW1lXSA6IFtzdGF0ZV1cbiAgKTtcbiAgaG9vay5hcGkgPSB7IHJlbW92ZTogcmVtb3ZlSG9va1JlZiB9O1xuICBob29rLnJlbW92ZSA9IHJlbW92ZUhvb2tSZWY7XG4gIFtcImJlZm9yZVwiLCBcImVycm9yXCIsIFwiYWZ0ZXJcIiwgXCJ3cmFwXCJdLmZvckVhY2goZnVuY3Rpb24gKGtpbmQpIHtcbiAgICB2YXIgYXJncyA9IG5hbWUgPyBbc3RhdGUsIGtpbmQsIG5hbWVdIDogW3N0YXRlLCBraW5kXTtcbiAgICBob29rW2tpbmRdID0gaG9vay5hcGlba2luZF0gPSBiaW5kYWJsZShhZGRIb29rLCBudWxsKS5hcHBseShudWxsLCBhcmdzKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIEhvb2tTaW5ndWxhcigpIHtcbiAgdmFyIHNpbmd1bGFySG9va05hbWUgPSBcImhcIjtcbiAgdmFyIHNpbmd1bGFySG9va1N0YXRlID0ge1xuICAgIHJlZ2lzdHJ5OiB7fSxcbiAgfTtcbiAgdmFyIHNpbmd1bGFySG9vayA9IHJlZ2lzdGVyLmJpbmQobnVsbCwgc2luZ3VsYXJIb29rU3RhdGUsIHNpbmd1bGFySG9va05hbWUpO1xuICBiaW5kQXBpKHNpbmd1bGFySG9vaywgc2luZ3VsYXJIb29rU3RhdGUsIHNpbmd1bGFySG9va05hbWUpO1xuICByZXR1cm4gc2luZ3VsYXJIb29rO1xufVxuXG5mdW5jdGlvbiBIb29rQ29sbGVjdGlvbigpIHtcbiAgdmFyIHN0YXRlID0ge1xuICAgIHJlZ2lzdHJ5OiB7fSxcbiAgfTtcblxuICB2YXIgaG9vayA9IHJlZ2lzdGVyLmJpbmQobnVsbCwgc3RhdGUpO1xuICBiaW5kQXBpKGhvb2ssIHN0YXRlKTtcblxuICByZXR1cm4gaG9vaztcbn1cblxudmFyIGNvbGxlY3Rpb25Ib29rRGVwcmVjYXRpb25NZXNzYWdlRGlzcGxheWVkID0gZmFsc2U7XG5mdW5jdGlvbiBIb29rKCkge1xuICBpZiAoIWNvbGxlY3Rpb25Ib29rRGVwcmVjYXRpb25NZXNzYWdlRGlzcGxheWVkKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgJ1tiZWZvcmUtYWZ0ZXItaG9va106IFwiSG9vaygpXCIgcmVwdXJwb3Npbmcgd2FybmluZywgdXNlIFwiSG9vay5Db2xsZWN0aW9uKClcIi4gUmVhZCBtb3JlOiBodHRwczovL2dpdC5pby91cGdyYWRlLWJlZm9yZS1hZnRlci1ob29rLXRvLTEuNCdcbiAgICApO1xuICAgIGNvbGxlY3Rpb25Ib29rRGVwcmVjYXRpb25NZXNzYWdlRGlzcGxheWVkID0gdHJ1ZTtcbiAgfVxuICByZXR1cm4gSG9va0NvbGxlY3Rpb24oKTtcbn1cblxuSG9vay5TaW5ndWxhciA9IEhvb2tTaW5ndWxhci5iaW5kKCk7XG5Ib29rLkNvbGxlY3Rpb24gPSBIb29rQ29sbGVjdGlvbi5iaW5kKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gSG9vaztcbi8vIGV4cG9zZSBjb25zdHJ1Y3RvcnMgYXMgYSBuYW1lZCBwcm9wZXJ0eSBmb3IgVHlwZVNjcmlwdFxubW9kdWxlLmV4cG9ydHMuSG9vayA9IEhvb2s7XG5tb2R1bGUuZXhwb3J0cy5TaW5ndWxhciA9IEhvb2suU2luZ3VsYXI7XG5tb2R1bGUuZXhwb3J0cy5Db2xsZWN0aW9uID0gSG9vay5Db2xsZWN0aW9uO1xuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbi8qIVxuICogaXMtcGxhaW4tb2JqZWN0IDxodHRwczovL2dpdGh1Yi5jb20vam9uc2NobGlua2VydC9pcy1wbGFpbi1vYmplY3Q+XG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE0LTIwMTcsIEpvbiBTY2hsaW5rZXJ0LlxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuICovXG5cbmZ1bmN0aW9uIGlzT2JqZWN0KG8pIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKSA9PT0gJ1tvYmplY3QgT2JqZWN0XSc7XG59XG5cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3Qobykge1xuICB2YXIgY3Rvcixwcm90O1xuXG4gIGlmIChpc09iamVjdChvKSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcblxuICAvLyBJZiBoYXMgbW9kaWZpZWQgY29uc3RydWN0b3JcbiAgY3RvciA9IG8uY29uc3RydWN0b3I7XG4gIGlmIChjdG9yID09PSB1bmRlZmluZWQpIHJldHVybiB0cnVlO1xuXG4gIC8vIElmIGhhcyBtb2RpZmllZCBwcm90b3R5cGVcbiAgcHJvdCA9IGN0b3IucHJvdG90eXBlO1xuICBpZiAoaXNPYmplY3QocHJvdCkgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG5cbiAgLy8gSWYgY29uc3RydWN0b3IgZG9lcyBub3QgaGF2ZSBhbiBPYmplY3Qtc3BlY2lmaWMgbWV0aG9kXG4gIGlmIChwcm90Lmhhc093blByb3BlcnR5KCdpc1Byb3RvdHlwZU9mJykgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gTW9zdCBsaWtlbHkgYSBwbGFpbiBPYmplY3RcbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydHMuaXNQbGFpbk9iamVjdCA9IGlzUGxhaW5PYmplY3Q7XG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxudmFyIGlzUGxhaW5PYmplY3QgPSByZXF1aXJlKCdpcy1wbGFpbi1vYmplY3QnKTtcbnZhciB1bml2ZXJzYWxVc2VyQWdlbnQgPSByZXF1aXJlKCd1bml2ZXJzYWwtdXNlci1hZ2VudCcpO1xuXG5mdW5jdGlvbiBsb3dlcmNhc2VLZXlzKG9iamVjdCkge1xuICBpZiAoIW9iamVjdCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmplY3QpLnJlZHVjZSgobmV3T2JqLCBrZXkpID0+IHtcbiAgICBuZXdPYmpba2V5LnRvTG93ZXJDYXNlKCldID0gb2JqZWN0W2tleV07XG4gICAgcmV0dXJuIG5ld09iajtcbiAgfSwge30pO1xufVxuXG5mdW5jdGlvbiBtZXJnZURlZXAoZGVmYXVsdHMsIG9wdGlvbnMpIHtcbiAgY29uc3QgcmVzdWx0ID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdHMpO1xuICBPYmplY3Qua2V5cyhvcHRpb25zKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgaWYgKGlzUGxhaW5PYmplY3QuaXNQbGFpbk9iamVjdChvcHRpb25zW2tleV0pKSB7XG4gICAgICBpZiAoIShrZXkgaW4gZGVmYXVsdHMpKSBPYmplY3QuYXNzaWduKHJlc3VsdCwge1xuICAgICAgICBba2V5XTogb3B0aW9uc1trZXldXG4gICAgICB9KTtlbHNlIHJlc3VsdFtrZXldID0gbWVyZ2VEZWVwKGRlZmF1bHRzW2tleV0sIG9wdGlvbnNba2V5XSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIE9iamVjdC5hc3NpZ24ocmVzdWx0LCB7XG4gICAgICAgIFtrZXldOiBvcHRpb25zW2tleV1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZVVuZGVmaW5lZFByb3BlcnRpZXMob2JqKSB7XG4gIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xuICAgIGlmIChvYmpba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkZWxldGUgb2JqW2tleV07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9iajtcbn1cblxuZnVuY3Rpb24gbWVyZ2UoZGVmYXVsdHMsIHJvdXRlLCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2Ygcm91dGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICBsZXQgW21ldGhvZCwgdXJsXSA9IHJvdXRlLnNwbGl0KFwiIFwiKTtcbiAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih1cmwgPyB7XG4gICAgICBtZXRob2QsXG4gICAgICB1cmxcbiAgICB9IDoge1xuICAgICAgdXJsOiBtZXRob2RcbiAgICB9LCBvcHRpb25zKTtcbiAgfSBlbHNlIHtcbiAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgcm91dGUpO1xuICB9IC8vIGxvd2VyY2FzZSBoZWFkZXIgbmFtZXMgYmVmb3JlIG1lcmdpbmcgd2l0aCBkZWZhdWx0cyB0byBhdm9pZCBkdXBsaWNhdGVzXG5cblxuICBvcHRpb25zLmhlYWRlcnMgPSBsb3dlcmNhc2VLZXlzKG9wdGlvbnMuaGVhZGVycyk7IC8vIHJlbW92ZSBwcm9wZXJ0aWVzIHdpdGggdW5kZWZpbmVkIHZhbHVlcyBiZWZvcmUgbWVyZ2luZ1xuXG4gIHJlbW92ZVVuZGVmaW5lZFByb3BlcnRpZXMob3B0aW9ucyk7XG4gIHJlbW92ZVVuZGVmaW5lZFByb3BlcnRpZXMob3B0aW9ucy5oZWFkZXJzKTtcbiAgY29uc3QgbWVyZ2VkT3B0aW9ucyA9IG1lcmdlRGVlcChkZWZhdWx0cyB8fCB7fSwgb3B0aW9ucyk7IC8vIG1lZGlhVHlwZS5wcmV2aWV3cyBhcnJheXMgYXJlIG1lcmdlZCwgaW5zdGVhZCBvZiBvdmVyd3JpdHRlblxuXG4gIGlmIChkZWZhdWx0cyAmJiBkZWZhdWx0cy5tZWRpYVR5cGUucHJldmlld3MubGVuZ3RoKSB7XG4gICAgbWVyZ2VkT3B0aW9ucy5tZWRpYVR5cGUucHJldmlld3MgPSBkZWZhdWx0cy5tZWRpYVR5cGUucHJldmlld3MuZmlsdGVyKHByZXZpZXcgPT4gIW1lcmdlZE9wdGlvbnMubWVkaWFUeXBlLnByZXZpZXdzLmluY2x1ZGVzKHByZXZpZXcpKS5jb25jYXQobWVyZ2VkT3B0aW9ucy5tZWRpYVR5cGUucHJldmlld3MpO1xuICB9XG5cbiAgbWVyZ2VkT3B0aW9ucy5tZWRpYVR5cGUucHJldmlld3MgPSBtZXJnZWRPcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cy5tYXAocHJldmlldyA9PiBwcmV2aWV3LnJlcGxhY2UoLy1wcmV2aWV3LywgXCJcIikpO1xuICByZXR1cm4gbWVyZ2VkT3B0aW9ucztcbn1cblxuZnVuY3Rpb24gYWRkUXVlcnlQYXJhbWV0ZXJzKHVybCwgcGFyYW1ldGVycykge1xuICBjb25zdCBzZXBhcmF0b3IgPSAvXFw/Ly50ZXN0KHVybCkgPyBcIiZcIiA6IFwiP1wiO1xuICBjb25zdCBuYW1lcyA9IE9iamVjdC5rZXlzKHBhcmFtZXRlcnMpO1xuXG4gIGlmIChuYW1lcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG5cbiAgcmV0dXJuIHVybCArIHNlcGFyYXRvciArIG5hbWVzLm1hcChuYW1lID0+IHtcbiAgICBpZiAobmFtZSA9PT0gXCJxXCIpIHtcbiAgICAgIHJldHVybiBcInE9XCIgKyBwYXJhbWV0ZXJzLnEuc3BsaXQoXCIrXCIpLm1hcChlbmNvZGVVUklDb21wb25lbnQpLmpvaW4oXCIrXCIpO1xuICAgIH1cblxuICAgIHJldHVybiBgJHtuYW1lfT0ke2VuY29kZVVSSUNvbXBvbmVudChwYXJhbWV0ZXJzW25hbWVdKX1gO1xuICB9KS5qb2luKFwiJlwiKTtcbn1cblxuY29uc3QgdXJsVmFyaWFibGVSZWdleCA9IC9cXHtbXn1dK1xcfS9nO1xuXG5mdW5jdGlvbiByZW1vdmVOb25DaGFycyh2YXJpYWJsZU5hbWUpIHtcbiAgcmV0dXJuIHZhcmlhYmxlTmFtZS5yZXBsYWNlKC9eXFxXK3xcXFcrJC9nLCBcIlwiKS5zcGxpdCgvLC8pO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0VXJsVmFyaWFibGVOYW1lcyh1cmwpIHtcbiAgY29uc3QgbWF0Y2hlcyA9IHVybC5tYXRjaCh1cmxWYXJpYWJsZVJlZ2V4KTtcblxuICBpZiAoIW1hdGNoZXMpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICByZXR1cm4gbWF0Y2hlcy5tYXAocmVtb3ZlTm9uQ2hhcnMpLnJlZHVjZSgoYSwgYikgPT4gYS5jb25jYXQoYiksIFtdKTtcbn1cblxuZnVuY3Rpb24gb21pdChvYmplY3QsIGtleXNUb09taXQpIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCkuZmlsdGVyKG9wdGlvbiA9PiAha2V5c1RvT21pdC5pbmNsdWRlcyhvcHRpb24pKS5yZWR1Y2UoKG9iaiwga2V5KSA9PiB7XG4gICAgb2JqW2tleV0gPSBvYmplY3Rba2V5XTtcbiAgICByZXR1cm4gb2JqO1xuICB9LCB7fSk7XG59XG5cbi8vIEJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9icmFtc3RlaW4vdXJsLXRlbXBsYXRlLCBsaWNlbnNlZCB1bmRlciBCU0Rcbi8vIFRPRE86IGNyZWF0ZSBzZXBhcmF0ZSBwYWNrYWdlLlxuLy9cbi8vIENvcHlyaWdodCAoYykgMjAxMi0yMDE0LCBCcmFtIFN0ZWluXG4vLyBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnNcbi8vIGFyZSBtZXQ6XG4vLyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbi8vICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4vLyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbi8vICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlXG4vLyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cbi8vICAzLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHNcbi8vICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cbi8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBcIkFTIElTXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRURcbi8vIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOT1xuLy8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULFxuLy8gSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsXG4vLyBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLFxuLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWVxuLy8gT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkdcbi8vIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSxcbi8vIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBmaWxlICovXG5mdW5jdGlvbiBlbmNvZGVSZXNlcnZlZChzdHIpIHtcbiAgcmV0dXJuIHN0ci5zcGxpdCgvKCVbMC05QS1GYS1mXXsyfSkvZykubWFwKGZ1bmN0aW9uIChwYXJ0KSB7XG4gICAgaWYgKCEvJVswLTlBLUZhLWZdLy50ZXN0KHBhcnQpKSB7XG4gICAgICBwYXJ0ID0gZW5jb2RlVVJJKHBhcnQpLnJlcGxhY2UoLyU1Qi9nLCBcIltcIikucmVwbGFjZSgvJTVEL2csIFwiXVwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFydDtcbiAgfSkuam9pbihcIlwiKTtcbn1cblxuZnVuY3Rpb24gZW5jb2RlVW5yZXNlcnZlZChzdHIpIHtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHIpLnJlcGxhY2UoL1shJygpKl0vZywgZnVuY3Rpb24gKGMpIHtcbiAgICByZXR1cm4gXCIlXCIgKyBjLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWUsIGtleSkge1xuICB2YWx1ZSA9IG9wZXJhdG9yID09PSBcIitcIiB8fCBvcGVyYXRvciA9PT0gXCIjXCIgPyBlbmNvZGVSZXNlcnZlZCh2YWx1ZSkgOiBlbmNvZGVVbnJlc2VydmVkKHZhbHVlKTtcblxuICBpZiAoa2V5KSB7XG4gICAgcmV0dXJuIGVuY29kZVVucmVzZXJ2ZWQoa2V5KSArIFwiPVwiICsgdmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzRGVmaW5lZCh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbDtcbn1cblxuZnVuY3Rpb24gaXNLZXlPcGVyYXRvcihvcGVyYXRvcikge1xuICByZXR1cm4gb3BlcmF0b3IgPT09IFwiO1wiIHx8IG9wZXJhdG9yID09PSBcIiZcIiB8fCBvcGVyYXRvciA9PT0gXCI/XCI7XG59XG5cbmZ1bmN0aW9uIGdldFZhbHVlcyhjb250ZXh0LCBvcGVyYXRvciwga2V5LCBtb2RpZmllcikge1xuICB2YXIgdmFsdWUgPSBjb250ZXh0W2tleV0sXG4gICAgICByZXN1bHQgPSBbXTtcblxuICBpZiAoaXNEZWZpbmVkKHZhbHVlKSAmJiB2YWx1ZSAhPT0gXCJcIikge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUudG9TdHJpbmcoKTtcblxuICAgICAgaWYgKG1vZGlmaWVyICYmIG1vZGlmaWVyICE9PSBcIipcIikge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZygwLCBwYXJzZUludChtb2RpZmllciwgMTApKTtcbiAgICAgIH1cblxuICAgICAgcmVzdWx0LnB1c2goZW5jb2RlVmFsdWUob3BlcmF0b3IsIHZhbHVlLCBpc0tleU9wZXJhdG9yKG9wZXJhdG9yKSA/IGtleSA6IFwiXCIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG1vZGlmaWVyID09PSBcIipcIikge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICB2YWx1ZS5maWx0ZXIoaXNEZWZpbmVkKS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goZW5jb2RlVmFsdWUob3BlcmF0b3IsIHZhbHVlLCBpc0tleU9wZXJhdG9yKG9wZXJhdG9yKSA/IGtleSA6IFwiXCIpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBPYmplY3Qua2V5cyh2YWx1ZSkuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgICAgICAgICAgaWYgKGlzRGVmaW5lZCh2YWx1ZVtrXSkpIHtcbiAgICAgICAgICAgICAgcmVzdWx0LnB1c2goZW5jb2RlVmFsdWUob3BlcmF0b3IsIHZhbHVlW2tdLCBrKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHRtcCA9IFtdO1xuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgIHZhbHVlLmZpbHRlcihpc0RlZmluZWQpLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB0bXAucHVzaChlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWUpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBPYmplY3Qua2V5cyh2YWx1ZSkuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgICAgICAgICAgaWYgKGlzRGVmaW5lZCh2YWx1ZVtrXSkpIHtcbiAgICAgICAgICAgICAgdG1wLnB1c2goZW5jb2RlVW5yZXNlcnZlZChrKSk7XG4gICAgICAgICAgICAgIHRtcC5wdXNoKGVuY29kZVZhbHVlKG9wZXJhdG9yLCB2YWx1ZVtrXS50b1N0cmluZygpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNLZXlPcGVyYXRvcihvcGVyYXRvcikpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChlbmNvZGVVbnJlc2VydmVkKGtleSkgKyBcIj1cIiArIHRtcC5qb2luKFwiLFwiKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodG1wLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKHRtcC5qb2luKFwiLFwiKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKG9wZXJhdG9yID09PSBcIjtcIikge1xuICAgICAgaWYgKGlzRGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goZW5jb2RlVW5yZXNlcnZlZChrZXkpKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBcIlwiICYmIChvcGVyYXRvciA9PT0gXCImXCIgfHwgb3BlcmF0b3IgPT09IFwiP1wiKSkge1xuICAgICAgcmVzdWx0LnB1c2goZW5jb2RlVW5yZXNlcnZlZChrZXkpICsgXCI9XCIpO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFwiXCIpIHtcbiAgICAgIHJlc3VsdC5wdXNoKFwiXCIpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVXJsKHRlbXBsYXRlKSB7XG4gIHJldHVybiB7XG4gICAgZXhwYW5kOiBleHBhbmQuYmluZChudWxsLCB0ZW1wbGF0ZSlcbiAgfTtcbn1cblxuZnVuY3Rpb24gZXhwYW5kKHRlbXBsYXRlLCBjb250ZXh0KSB7XG4gIHZhciBvcGVyYXRvcnMgPSBbXCIrXCIsIFwiI1wiLCBcIi5cIiwgXCIvXCIsIFwiO1wiLCBcIj9cIiwgXCImXCJdO1xuICByZXR1cm4gdGVtcGxhdGUucmVwbGFjZSgvXFx7KFteXFx7XFx9XSspXFx9fChbXlxce1xcfV0rKS9nLCBmdW5jdGlvbiAoXywgZXhwcmVzc2lvbiwgbGl0ZXJhbCkge1xuICAgIGlmIChleHByZXNzaW9uKSB7XG4gICAgICBsZXQgb3BlcmF0b3IgPSBcIlwiO1xuICAgICAgY29uc3QgdmFsdWVzID0gW107XG5cbiAgICAgIGlmIChvcGVyYXRvcnMuaW5kZXhPZihleHByZXNzaW9uLmNoYXJBdCgwKSkgIT09IC0xKSB7XG4gICAgICAgIG9wZXJhdG9yID0gZXhwcmVzc2lvbi5jaGFyQXQoMCk7XG4gICAgICAgIGV4cHJlc3Npb24gPSBleHByZXNzaW9uLnN1YnN0cigxKTtcbiAgICAgIH1cblxuICAgICAgZXhwcmVzc2lvbi5zcGxpdCgvLC9nKS5mb3JFYWNoKGZ1bmN0aW9uICh2YXJpYWJsZSkge1xuICAgICAgICB2YXIgdG1wID0gLyhbXjpcXCpdKikoPzo6KFxcZCspfChcXCopKT8vLmV4ZWModmFyaWFibGUpO1xuICAgICAgICB2YWx1ZXMucHVzaChnZXRWYWx1ZXMoY29udGV4dCwgb3BlcmF0b3IsIHRtcFsxXSwgdG1wWzJdIHx8IHRtcFszXSkpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChvcGVyYXRvciAmJiBvcGVyYXRvciAhPT0gXCIrXCIpIHtcbiAgICAgICAgdmFyIHNlcGFyYXRvciA9IFwiLFwiO1xuXG4gICAgICAgIGlmIChvcGVyYXRvciA9PT0gXCI/XCIpIHtcbiAgICAgICAgICBzZXBhcmF0b3IgPSBcIiZcIjtcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRvciAhPT0gXCIjXCIpIHtcbiAgICAgICAgICBzZXBhcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAodmFsdWVzLmxlbmd0aCAhPT0gMCA/IG9wZXJhdG9yIDogXCJcIikgKyB2YWx1ZXMuam9pbihzZXBhcmF0b3IpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlcy5qb2luKFwiLFwiKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGVuY29kZVJlc2VydmVkKGxpdGVyYWwpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlKG9wdGlvbnMpIHtcbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI21ldGhvZHNcbiAgbGV0IG1ldGhvZCA9IG9wdGlvbnMubWV0aG9kLnRvVXBwZXJDYXNlKCk7IC8vIHJlcGxhY2UgOnZhcm5hbWUgd2l0aCB7dmFybmFtZX0gdG8gbWFrZSBpdCBSRkMgNjU3MCBjb21wYXRpYmxlXG5cbiAgbGV0IHVybCA9IChvcHRpb25zLnVybCB8fCBcIi9cIikucmVwbGFjZSgvOihbYS16XVxcdyspL2csIFwieyQxfVwiKTtcbiAgbGV0IGhlYWRlcnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmhlYWRlcnMpO1xuICBsZXQgYm9keTtcbiAgbGV0IHBhcmFtZXRlcnMgPSBvbWl0KG9wdGlvbnMsIFtcIm1ldGhvZFwiLCBcImJhc2VVcmxcIiwgXCJ1cmxcIiwgXCJoZWFkZXJzXCIsIFwicmVxdWVzdFwiLCBcIm1lZGlhVHlwZVwiXSk7IC8vIGV4dHJhY3QgdmFyaWFibGUgbmFtZXMgZnJvbSBVUkwgdG8gY2FsY3VsYXRlIHJlbWFpbmluZyB2YXJpYWJsZXMgbGF0ZXJcblxuICBjb25zdCB1cmxWYXJpYWJsZU5hbWVzID0gZXh0cmFjdFVybFZhcmlhYmxlTmFtZXModXJsKTtcbiAgdXJsID0gcGFyc2VVcmwodXJsKS5leHBhbmQocGFyYW1ldGVycyk7XG5cbiAgaWYgKCEvXmh0dHAvLnRlc3QodXJsKSkge1xuICAgIHVybCA9IG9wdGlvbnMuYmFzZVVybCArIHVybDtcbiAgfVxuXG4gIGNvbnN0IG9taXR0ZWRQYXJhbWV0ZXJzID0gT2JqZWN0LmtleXMob3B0aW9ucykuZmlsdGVyKG9wdGlvbiA9PiB1cmxWYXJpYWJsZU5hbWVzLmluY2x1ZGVzKG9wdGlvbikpLmNvbmNhdChcImJhc2VVcmxcIik7XG4gIGNvbnN0IHJlbWFpbmluZ1BhcmFtZXRlcnMgPSBvbWl0KHBhcmFtZXRlcnMsIG9taXR0ZWRQYXJhbWV0ZXJzKTtcbiAgY29uc3QgaXNCaW5hcnlSZXF1ZXN0ID0gL2FwcGxpY2F0aW9uXFwvb2N0ZXQtc3RyZWFtL2kudGVzdChoZWFkZXJzLmFjY2VwdCk7XG5cbiAgaWYgKCFpc0JpbmFyeVJlcXVlc3QpIHtcbiAgICBpZiAob3B0aW9ucy5tZWRpYVR5cGUuZm9ybWF0KSB7XG4gICAgICAvLyBlLmcuIGFwcGxpY2F0aW9uL3ZuZC5naXRodWIudjMranNvbiA9PiBhcHBsaWNhdGlvbi92bmQuZ2l0aHViLnYzLnJhd1xuICAgICAgaGVhZGVycy5hY2NlcHQgPSBoZWFkZXJzLmFjY2VwdC5zcGxpdCgvLC8pLm1hcChwcmV2aWV3ID0+IHByZXZpZXcucmVwbGFjZSgvYXBwbGljYXRpb25cXC92bmQoXFwuXFx3KykoXFwudjMpPyhcXC5cXHcrKT8oXFwranNvbik/JC8sIGBhcHBsaWNhdGlvbi92bmQkMSQyLiR7b3B0aW9ucy5tZWRpYVR5cGUuZm9ybWF0fWApKS5qb2luKFwiLFwiKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5tZWRpYVR5cGUucHJldmlld3MubGVuZ3RoKSB7XG4gICAgICBjb25zdCBwcmV2aWV3c0Zyb21BY2NlcHRIZWFkZXIgPSBoZWFkZXJzLmFjY2VwdC5tYXRjaCgvW1xcdy1dKyg/PS1wcmV2aWV3KS9nKSB8fCBbXTtcbiAgICAgIGhlYWRlcnMuYWNjZXB0ID0gcHJldmlld3NGcm9tQWNjZXB0SGVhZGVyLmNvbmNhdChvcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cykubWFwKHByZXZpZXcgPT4ge1xuICAgICAgICBjb25zdCBmb3JtYXQgPSBvcHRpb25zLm1lZGlhVHlwZS5mb3JtYXQgPyBgLiR7b3B0aW9ucy5tZWRpYVR5cGUuZm9ybWF0fWAgOiBcIitqc29uXCI7XG4gICAgICAgIHJldHVybiBgYXBwbGljYXRpb24vdm5kLmdpdGh1Yi4ke3ByZXZpZXd9LXByZXZpZXcke2Zvcm1hdH1gO1xuICAgICAgfSkuam9pbihcIixcIik7XG4gICAgfVxuICB9IC8vIGZvciBHRVQvSEVBRCByZXF1ZXN0cywgc2V0IFVSTCBxdWVyeSBwYXJhbWV0ZXJzIGZyb20gcmVtYWluaW5nIHBhcmFtZXRlcnNcbiAgLy8gZm9yIFBBVENIL1BPU1QvUFVUL0RFTEVURSByZXF1ZXN0cywgc2V0IHJlcXVlc3QgYm9keSBmcm9tIHJlbWFpbmluZyBwYXJhbWV0ZXJzXG5cblxuICBpZiAoW1wiR0VUXCIsIFwiSEVBRFwiXS5pbmNsdWRlcyhtZXRob2QpKSB7XG4gICAgdXJsID0gYWRkUXVlcnlQYXJhbWV0ZXJzKHVybCwgcmVtYWluaW5nUGFyYW1ldGVycyk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKFwiZGF0YVwiIGluIHJlbWFpbmluZ1BhcmFtZXRlcnMpIHtcbiAgICAgIGJvZHkgPSByZW1haW5pbmdQYXJhbWV0ZXJzLmRhdGE7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChPYmplY3Qua2V5cyhyZW1haW5pbmdQYXJhbWV0ZXJzKS5sZW5ndGgpIHtcbiAgICAgICAgYm9keSA9IHJlbWFpbmluZ1BhcmFtZXRlcnM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoZWFkZXJzW1wiY29udGVudC1sZW5ndGhcIl0gPSAwO1xuICAgICAgfVxuICAgIH1cbiAgfSAvLyBkZWZhdWx0IGNvbnRlbnQtdHlwZSBmb3IgSlNPTiBpZiBib2R5IGlzIHNldFxuXG5cbiAgaWYgKCFoZWFkZXJzW1wiY29udGVudC10eXBlXCJdICYmIHR5cGVvZiBib2R5ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgaGVhZGVyc1tcImNvbnRlbnQtdHlwZVwiXSA9IFwiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOFwiO1xuICB9IC8vIEdpdEh1YiBleHBlY3RzICdjb250ZW50LWxlbmd0aDogMCcgaGVhZGVyIGZvciBQVVQvUEFUQ0ggcmVxdWVzdHMgd2l0aG91dCBib2R5LlxuICAvLyBmZXRjaCBkb2VzIG5vdCBhbGxvdyB0byBzZXQgYGNvbnRlbnQtbGVuZ3RoYCBoZWFkZXIsIGJ1dCB3ZSBjYW4gc2V0IGJvZHkgdG8gYW4gZW1wdHkgc3RyaW5nXG5cblxuICBpZiAoW1wiUEFUQ0hcIiwgXCJQVVRcIl0uaW5jbHVkZXMobWV0aG9kKSAmJiB0eXBlb2YgYm9keSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIGJvZHkgPSBcIlwiO1xuICB9IC8vIE9ubHkgcmV0dXJuIGJvZHkvcmVxdWVzdCBrZXlzIGlmIHByZXNlbnRcblxuXG4gIHJldHVybiBPYmplY3QuYXNzaWduKHtcbiAgICBtZXRob2QsXG4gICAgdXJsLFxuICAgIGhlYWRlcnNcbiAgfSwgdHlwZW9mIGJvZHkgIT09IFwidW5kZWZpbmVkXCIgPyB7XG4gICAgYm9keVxuICB9IDogbnVsbCwgb3B0aW9ucy5yZXF1ZXN0ID8ge1xuICAgIHJlcXVlc3Q6IG9wdGlvbnMucmVxdWVzdFxuICB9IDogbnVsbCk7XG59XG5cbmZ1bmN0aW9uIGVuZHBvaW50V2l0aERlZmF1bHRzKGRlZmF1bHRzLCByb3V0ZSwgb3B0aW9ucykge1xuICByZXR1cm4gcGFyc2UobWVyZ2UoZGVmYXVsdHMsIHJvdXRlLCBvcHRpb25zKSk7XG59XG5cbmZ1bmN0aW9uIHdpdGhEZWZhdWx0cyhvbGREZWZhdWx0cywgbmV3RGVmYXVsdHMpIHtcbiAgY29uc3QgREVGQVVMVFMgPSBtZXJnZShvbGREZWZhdWx0cywgbmV3RGVmYXVsdHMpO1xuICBjb25zdCBlbmRwb2ludCA9IGVuZHBvaW50V2l0aERlZmF1bHRzLmJpbmQobnVsbCwgREVGQVVMVFMpO1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihlbmRwb2ludCwge1xuICAgIERFRkFVTFRTLFxuICAgIGRlZmF1bHRzOiB3aXRoRGVmYXVsdHMuYmluZChudWxsLCBERUZBVUxUUyksXG4gICAgbWVyZ2U6IG1lcmdlLmJpbmQobnVsbCwgREVGQVVMVFMpLFxuICAgIHBhcnNlXG4gIH0pO1xufVxuXG5jb25zdCBWRVJTSU9OID0gXCI2LjAuMTJcIjtcblxuY29uc3QgdXNlckFnZW50ID0gYG9jdG9raXQtZW5kcG9pbnQuanMvJHtWRVJTSU9OfSAke3VuaXZlcnNhbFVzZXJBZ2VudC5nZXRVc2VyQWdlbnQoKX1gOyAvLyBERUZBVUxUUyBoYXMgYWxsIHByb3BlcnRpZXMgc2V0IHRoYXQgRW5kcG9pbnRPcHRpb25zIGhhcywgZXhjZXB0IHVybC5cbi8vIFNvIHdlIHVzZSBSZXF1ZXN0UGFyYW1ldGVycyBhbmQgYWRkIG1ldGhvZCBhcyBhZGRpdGlvbmFsIHJlcXVpcmVkIHByb3BlcnR5LlxuXG5jb25zdCBERUZBVUxUUyA9IHtcbiAgbWV0aG9kOiBcIkdFVFwiLFxuICBiYXNlVXJsOiBcImh0dHBzOi8vYXBpLmdpdGh1Yi5jb21cIixcbiAgaGVhZGVyczoge1xuICAgIGFjY2VwdDogXCJhcHBsaWNhdGlvbi92bmQuZ2l0aHViLnYzK2pzb25cIixcbiAgICBcInVzZXItYWdlbnRcIjogdXNlckFnZW50XG4gIH0sXG4gIG1lZGlhVHlwZToge1xuICAgIGZvcm1hdDogXCJcIixcbiAgICBwcmV2aWV3czogW11cbiAgfVxufTtcblxuY29uc3QgZW5kcG9pbnQgPSB3aXRoRGVmYXVsdHMobnVsbCwgREVGQVVMVFMpO1xuXG5leHBvcnRzLmVuZHBvaW50ID0gZW5kcG9pbnQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBjb252ZXJzaW9ucyA9IHt9O1xubW9kdWxlLmV4cG9ydHMgPSBjb252ZXJzaW9ucztcblxuZnVuY3Rpb24gc2lnbih4KSB7XG4gICAgcmV0dXJuIHggPCAwID8gLTEgOiAxO1xufVxuXG5mdW5jdGlvbiBldmVuUm91bmQoeCkge1xuICAgIC8vIFJvdW5kIHggdG8gdGhlIG5lYXJlc3QgaW50ZWdlciwgY2hvb3NpbmcgdGhlIGV2ZW4gaW50ZWdlciBpZiBpdCBsaWVzIGhhbGZ3YXkgYmV0d2VlbiB0d28uXG4gICAgaWYgKCh4ICUgMSkgPT09IDAuNSAmJiAoeCAmIDEpID09PSAwKSB7IC8vIFtldmVuIG51bWJlcl0uNTsgcm91bmQgZG93biAoaS5lLiBmbG9vcilcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoeCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIE1hdGgucm91bmQoeCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVOdW1iZXJDb252ZXJzaW9uKGJpdExlbmd0aCwgdHlwZU9wdHMpIHtcbiAgICBpZiAoIXR5cGVPcHRzLnVuc2lnbmVkKSB7XG4gICAgICAgIC0tYml0TGVuZ3RoO1xuICAgIH1cbiAgICBjb25zdCBsb3dlckJvdW5kID0gdHlwZU9wdHMudW5zaWduZWQgPyAwIDogLU1hdGgucG93KDIsIGJpdExlbmd0aCk7XG4gICAgY29uc3QgdXBwZXJCb3VuZCA9IE1hdGgucG93KDIsIGJpdExlbmd0aCkgLSAxO1xuXG4gICAgY29uc3QgbW9kdWxvVmFsID0gdHlwZU9wdHMubW9kdWxvQml0TGVuZ3RoID8gTWF0aC5wb3coMiwgdHlwZU9wdHMubW9kdWxvQml0TGVuZ3RoKSA6IE1hdGgucG93KDIsIGJpdExlbmd0aCk7XG4gICAgY29uc3QgbW9kdWxvQm91bmQgPSB0eXBlT3B0cy5tb2R1bG9CaXRMZW5ndGggPyBNYXRoLnBvdygyLCB0eXBlT3B0cy5tb2R1bG9CaXRMZW5ndGggLSAxKSA6IE1hdGgucG93KDIsIGJpdExlbmd0aCAtIDEpO1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uKFYsIG9wdHMpIHtcbiAgICAgICAgaWYgKCFvcHRzKSBvcHRzID0ge307XG5cbiAgICAgICAgbGV0IHggPSArVjtcblxuICAgICAgICBpZiAob3B0cy5lbmZvcmNlUmFuZ2UpIHtcbiAgICAgICAgICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHgpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50IGlzIG5vdCBhIGZpbml0ZSBudW1iZXJcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHggPSBzaWduKHgpICogTWF0aC5mbG9vcihNYXRoLmFicyh4KSk7XG4gICAgICAgICAgICBpZiAoeCA8IGxvd2VyQm91bmQgfHwgeCA+IHVwcGVyQm91bmQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgaXMgbm90IGluIGJ5dGUgcmFuZ2VcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc05hTih4KSAmJiBvcHRzLmNsYW1wKSB7XG4gICAgICAgICAgICB4ID0gZXZlblJvdW5kKHgpO1xuXG4gICAgICAgICAgICBpZiAoeCA8IGxvd2VyQm91bmQpIHggPSBsb3dlckJvdW5kO1xuICAgICAgICAgICAgaWYgKHggPiB1cHBlckJvdW5kKSB4ID0gdXBwZXJCb3VuZDtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoeCkgfHwgeCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cblxuICAgICAgICB4ID0gc2lnbih4KSAqIE1hdGguZmxvb3IoTWF0aC5hYnMoeCkpO1xuICAgICAgICB4ID0geCAlIG1vZHVsb1ZhbDtcblxuICAgICAgICBpZiAoIXR5cGVPcHRzLnVuc2lnbmVkICYmIHggPj0gbW9kdWxvQm91bmQpIHtcbiAgICAgICAgICAgIHJldHVybiB4IC0gbW9kdWxvVmFsO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVPcHRzLnVuc2lnbmVkKSB7XG4gICAgICAgICAgICBpZiAoeCA8IDApIHtcbiAgICAgICAgICAgICAgeCArPSBtb2R1bG9WYWw7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHggPT09IC0wKSB7IC8vIGRvbid0IHJldHVybiBuZWdhdGl2ZSB6ZXJvXG4gICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHg7XG4gICAgfVxufVxuXG5jb252ZXJzaW9uc1tcInZvaWRcIl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbmNvbnZlcnNpb25zW1wiYm9vbGVhblwiXSA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICByZXR1cm4gISF2YWw7XG59O1xuXG5jb252ZXJzaW9uc1tcImJ5dGVcIl0gPSBjcmVhdGVOdW1iZXJDb252ZXJzaW9uKDgsIHsgdW5zaWduZWQ6IGZhbHNlIH0pO1xuY29udmVyc2lvbnNbXCJvY3RldFwiXSA9IGNyZWF0ZU51bWJlckNvbnZlcnNpb24oOCwgeyB1bnNpZ25lZDogdHJ1ZSB9KTtcblxuY29udmVyc2lvbnNbXCJzaG9ydFwiXSA9IGNyZWF0ZU51bWJlckNvbnZlcnNpb24oMTYsIHsgdW5zaWduZWQ6IGZhbHNlIH0pO1xuY29udmVyc2lvbnNbXCJ1bnNpZ25lZCBzaG9ydFwiXSA9IGNyZWF0ZU51bWJlckNvbnZlcnNpb24oMTYsIHsgdW5zaWduZWQ6IHRydWUgfSk7XG5cbmNvbnZlcnNpb25zW1wibG9uZ1wiXSA9IGNyZWF0ZU51bWJlckNvbnZlcnNpb24oMzIsIHsgdW5zaWduZWQ6IGZhbHNlIH0pO1xuY29udmVyc2lvbnNbXCJ1bnNpZ25lZCBsb25nXCJdID0gY3JlYXRlTnVtYmVyQ29udmVyc2lvbigzMiwgeyB1bnNpZ25lZDogdHJ1ZSB9KTtcblxuY29udmVyc2lvbnNbXCJsb25nIGxvbmdcIl0gPSBjcmVhdGVOdW1iZXJDb252ZXJzaW9uKDMyLCB7IHVuc2lnbmVkOiBmYWxzZSwgbW9kdWxvQml0TGVuZ3RoOiA2NCB9KTtcbmNvbnZlcnNpb25zW1widW5zaWduZWQgbG9uZyBsb25nXCJdID0gY3JlYXRlTnVtYmVyQ29udmVyc2lvbigzMiwgeyB1bnNpZ25lZDogdHJ1ZSwgbW9kdWxvQml0TGVuZ3RoOiA2NCB9KTtcblxuY29udmVyc2lvbnNbXCJkb3VibGVcIl0gPSBmdW5jdGlvbiAoVikge1xuICAgIGNvbnN0IHggPSArVjtcblxuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHgpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCBpcyBub3QgYSBmaW5pdGUgZmxvYXRpbmctcG9pbnQgdmFsdWVcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHg7XG59O1xuXG5jb252ZXJzaW9uc1tcInVucmVzdHJpY3RlZCBkb3VibGVcIl0gPSBmdW5jdGlvbiAoVikge1xuICAgIGNvbnN0IHggPSArVjtcblxuICAgIGlmIChpc05hTih4KSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgaXMgTmFOXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB4O1xufTtcblxuLy8gbm90IHF1aXRlIHZhbGlkLCBidXQgZ29vZCBlbm91Z2ggZm9yIEpTXG5jb252ZXJzaW9uc1tcImZsb2F0XCJdID0gY29udmVyc2lvbnNbXCJkb3VibGVcIl07XG5jb252ZXJzaW9uc1tcInVucmVzdHJpY3RlZCBmbG9hdFwiXSA9IGNvbnZlcnNpb25zW1widW5yZXN0cmljdGVkIGRvdWJsZVwiXTtcblxuY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0gPSBmdW5jdGlvbiAoViwgb3B0cykge1xuICAgIGlmICghb3B0cykgb3B0cyA9IHt9O1xuXG4gICAgaWYgKG9wdHMudHJlYXROdWxsQXNFbXB0eVN0cmluZyAmJiBWID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHJldHVybiBTdHJpbmcoVik7XG59O1xuXG5jb252ZXJzaW9uc1tcIkJ5dGVTdHJpbmdcIl0gPSBmdW5jdGlvbiAoViwgb3B0cykge1xuICAgIGNvbnN0IHggPSBTdHJpbmcoVik7XG4gICAgbGV0IGMgPSB1bmRlZmluZWQ7XG4gICAgZm9yIChsZXQgaSA9IDA7IChjID0geC5jb2RlUG9pbnRBdChpKSkgIT09IHVuZGVmaW5lZDsgKytpKSB7XG4gICAgICAgIGlmIChjID4gMjU1KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgaXMgbm90IGEgdmFsaWQgYnl0ZXN0cmluZ1wiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB4O1xufTtcblxuY29udmVyc2lvbnNbXCJVU1ZTdHJpbmdcIl0gPSBmdW5jdGlvbiAoVikge1xuICAgIGNvbnN0IFMgPSBTdHJpbmcoVik7XG4gICAgY29uc3QgbiA9IFMubGVuZ3RoO1xuICAgIGNvbnN0IFUgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgICBjb25zdCBjID0gUy5jaGFyQ29kZUF0KGkpO1xuICAgICAgICBpZiAoYyA8IDB4RDgwMCB8fCBjID4gMHhERkZGKSB7XG4gICAgICAgICAgICBVLnB1c2goU3RyaW5nLmZyb21Db2RlUG9pbnQoYykpO1xuICAgICAgICB9IGVsc2UgaWYgKDB4REMwMCA8PSBjICYmIGMgPD0gMHhERkZGKSB7XG4gICAgICAgICAgICBVLnB1c2goU3RyaW5nLmZyb21Db2RlUG9pbnQoMHhGRkZEKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoaSA9PT0gbiAtIDEpIHtcbiAgICAgICAgICAgICAgICBVLnB1c2goU3RyaW5nLmZyb21Db2RlUG9pbnQoMHhGRkZEKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGQgPSBTLmNoYXJDb2RlQXQoaSArIDEpO1xuICAgICAgICAgICAgICAgIGlmICgweERDMDAgPD0gZCAmJiBkIDw9IDB4REZGRikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhID0gYyAmIDB4M0ZGO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBiID0gZCAmIDB4M0ZGO1xuICAgICAgICAgICAgICAgICAgICBVLnB1c2goU3RyaW5nLmZyb21Db2RlUG9pbnQoKDIgPDwgMTUpICsgKDIgPDwgOSkgKiBhICsgYikpO1xuICAgICAgICAgICAgICAgICAgICArK2k7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgVS5wdXNoKFN0cmluZy5mcm9tQ29kZVBvaW50KDB4RkZGRCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBVLmpvaW4oJycpO1xufTtcblxuY29udmVyc2lvbnNbXCJEYXRlXCJdID0gZnVuY3Rpb24gKFYsIG9wdHMpIHtcbiAgICBpZiAoIShWIGluc3RhbmNlb2YgRGF0ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50IGlzIG5vdCBhIERhdGUgb2JqZWN0XCIpO1xuICAgIH1cbiAgICBpZiAoaXNOYU4oVikpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICByZXR1cm4gVjtcbn07XG5cbmNvbnZlcnNpb25zW1wiUmVnRXhwXCJdID0gZnVuY3Rpb24gKFYsIG9wdHMpIHtcbiAgICBpZiAoIShWIGluc3RhbmNlb2YgUmVnRXhwKSkge1xuICAgICAgICBWID0gbmV3IFJlZ0V4cChWKTtcbiAgICB9XG5cbiAgICByZXR1cm4gVjtcbn07XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cy5taXhpbiA9IGZ1bmN0aW9uIG1peGluKHRhcmdldCwgc291cmNlKSB7XG4gIGNvbnN0IGtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2UpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXlzW2ldLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5c1tpXSkpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cy53cmFwcGVyU3ltYm9sID0gU3ltYm9sKFwid3JhcHBlclwiKTtcbm1vZHVsZS5leHBvcnRzLmltcGxTeW1ib2wgPSBTeW1ib2woXCJpbXBsXCIpO1xuXG5tb2R1bGUuZXhwb3J0cy53cmFwcGVyRm9ySW1wbCA9IGZ1bmN0aW9uIChpbXBsKSB7XG4gIHJldHVybiBpbXBsW21vZHVsZS5leHBvcnRzLndyYXBwZXJTeW1ib2xdO1xufTtcblxubW9kdWxlLmV4cG9ydHMuaW1wbEZvcldyYXBwZXIgPSBmdW5jdGlvbiAod3JhcHBlcikge1xuICByZXR1cm4gd3JhcHBlclttb2R1bGUuZXhwb3J0cy5pbXBsU3ltYm9sXTtcbn07XG5cbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBwdW55Y29kZSA9IHJlcXVpcmUoXCJwdW55Y29kZVwiKTtcbnZhciBtYXBwaW5nVGFibGUgPSByZXF1aXJlKFwiLi9saWIvbWFwcGluZ1RhYmxlLmpzb25cIik7XG5cbnZhciBQUk9DRVNTSU5HX09QVElPTlMgPSB7XG4gIFRSQU5TSVRJT05BTDogMCxcbiAgTk9OVFJBTlNJVElPTkFMOiAxXG59O1xuXG5mdW5jdGlvbiBub3JtYWxpemUoc3RyKSB7IC8vIGZpeCBidWcgaW4gdjhcbiAgcmV0dXJuIHN0ci5zcGxpdCgnXFx1MDAwMCcpLm1hcChmdW5jdGlvbiAocykgeyByZXR1cm4gcy5ub3JtYWxpemUoJ05GQycpOyB9KS5qb2luKCdcXHUwMDAwJyk7XG59XG5cbmZ1bmN0aW9uIGZpbmRTdGF0dXModmFsKSB7XG4gIHZhciBzdGFydCA9IDA7XG4gIHZhciBlbmQgPSBtYXBwaW5nVGFibGUubGVuZ3RoIC0gMTtcblxuICB3aGlsZSAoc3RhcnQgPD0gZW5kKSB7XG4gICAgdmFyIG1pZCA9IE1hdGguZmxvb3IoKHN0YXJ0ICsgZW5kKSAvIDIpO1xuXG4gICAgdmFyIHRhcmdldCA9IG1hcHBpbmdUYWJsZVttaWRdO1xuICAgIGlmICh0YXJnZXRbMF1bMF0gPD0gdmFsICYmIHRhcmdldFswXVsxXSA+PSB2YWwpIHtcbiAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfSBlbHNlIGlmICh0YXJnZXRbMF1bMF0gPiB2YWwpIHtcbiAgICAgIGVuZCA9IG1pZCAtIDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXJ0ID0gbWlkICsgMTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxudmFyIHJlZ2V4QXN0cmFsU3ltYm9scyA9IC9bXFx1RDgwMC1cXHVEQkZGXVtcXHVEQzAwLVxcdURGRkZdL2c7XG5cbmZ1bmN0aW9uIGNvdW50U3ltYm9scyhzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZ1xuICAgIC8vIHJlcGxhY2UgZXZlcnkgc3Vycm9nYXRlIHBhaXIgd2l0aCBhIEJNUCBzeW1ib2xcbiAgICAucmVwbGFjZShyZWdleEFzdHJhbFN5bWJvbHMsICdfJylcbiAgICAvLyB0aGVuIGdldCB0aGUgbGVuZ3RoXG4gICAgLmxlbmd0aDtcbn1cblxuZnVuY3Rpb24gbWFwQ2hhcnMoZG9tYWluX25hbWUsIHVzZVNURDMsIHByb2Nlc3Npbmdfb3B0aW9uKSB7XG4gIHZhciBoYXNFcnJvciA9IGZhbHNlO1xuICB2YXIgcHJvY2Vzc2VkID0gXCJcIjtcblxuICB2YXIgbGVuID0gY291bnRTeW1ib2xzKGRvbWFpbl9uYW1lKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIHZhciBjb2RlUG9pbnQgPSBkb21haW5fbmFtZS5jb2RlUG9pbnRBdChpKTtcbiAgICB2YXIgc3RhdHVzID0gZmluZFN0YXR1cyhjb2RlUG9pbnQpO1xuXG4gICAgc3dpdGNoIChzdGF0dXNbMV0pIHtcbiAgICAgIGNhc2UgXCJkaXNhbGxvd2VkXCI6XG4gICAgICAgIGhhc0Vycm9yID0gdHJ1ZTtcbiAgICAgICAgcHJvY2Vzc2VkICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KGNvZGVQb2ludCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImlnbm9yZWRcIjpcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwibWFwcGVkXCI6XG4gICAgICAgIHByb2Nlc3NlZCArPSBTdHJpbmcuZnJvbUNvZGVQb2ludC5hcHBseShTdHJpbmcsIHN0YXR1c1syXSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImRldmlhdGlvblwiOlxuICAgICAgICBpZiAocHJvY2Vzc2luZ19vcHRpb24gPT09IFBST0NFU1NJTkdfT1BUSU9OUy5UUkFOU0lUSU9OQUwpIHtcbiAgICAgICAgICBwcm9jZXNzZWQgKz0gU3RyaW5nLmZyb21Db2RlUG9pbnQuYXBwbHkoU3RyaW5nLCBzdGF0dXNbMl0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByb2Nlc3NlZCArPSBTdHJpbmcuZnJvbUNvZGVQb2ludChjb2RlUG9pbnQpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInZhbGlkXCI6XG4gICAgICAgIHByb2Nlc3NlZCArPSBTdHJpbmcuZnJvbUNvZGVQb2ludChjb2RlUG9pbnQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCI6XG4gICAgICAgIGlmICh1c2VTVEQzKSB7XG4gICAgICAgICAgaGFzRXJyb3IgPSB0cnVlO1xuICAgICAgICAgIHByb2Nlc3NlZCArPSBTdHJpbmcuZnJvbUNvZGVQb2ludChjb2RlUG9pbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByb2Nlc3NlZCArPSBTdHJpbmcuZnJvbUNvZGVQb2ludC5hcHBseShTdHJpbmcsIHN0YXR1c1syXSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiZGlzYWxsb3dlZF9TVEQzX3ZhbGlkXCI6XG4gICAgICAgIGlmICh1c2VTVEQzKSB7XG4gICAgICAgICAgaGFzRXJyb3IgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJvY2Vzc2VkICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KGNvZGVQb2ludCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc3RyaW5nOiBwcm9jZXNzZWQsXG4gICAgZXJyb3I6IGhhc0Vycm9yXG4gIH07XG59XG5cbnZhciBjb21iaW5pbmdNYXJrc1JlZ2V4ID0gL1tcXHUwMzAwLVxcdTAzNkZcXHUwNDgzLVxcdTA0ODlcXHUwNTkxLVxcdTA1QkRcXHUwNUJGXFx1MDVDMVxcdTA1QzJcXHUwNUM0XFx1MDVDNVxcdTA1QzdcXHUwNjEwLVxcdTA2MUFcXHUwNjRCLVxcdTA2NUZcXHUwNjcwXFx1MDZENi1cXHUwNkRDXFx1MDZERi1cXHUwNkU0XFx1MDZFN1xcdTA2RThcXHUwNkVBLVxcdTA2RURcXHUwNzExXFx1MDczMC1cXHUwNzRBXFx1MDdBNi1cXHUwN0IwXFx1MDdFQi1cXHUwN0YzXFx1MDgxNi1cXHUwODE5XFx1MDgxQi1cXHUwODIzXFx1MDgyNS1cXHUwODI3XFx1MDgyOS1cXHUwODJEXFx1MDg1OS1cXHUwODVCXFx1MDhFNC1cXHUwOTAzXFx1MDkzQS1cXHUwOTNDXFx1MDkzRS1cXHUwOTRGXFx1MDk1MS1cXHUwOTU3XFx1MDk2MlxcdTA5NjNcXHUwOTgxLVxcdTA5ODNcXHUwOUJDXFx1MDlCRS1cXHUwOUM0XFx1MDlDN1xcdTA5QzhcXHUwOUNCLVxcdTA5Q0RcXHUwOUQ3XFx1MDlFMlxcdTA5RTNcXHUwQTAxLVxcdTBBMDNcXHUwQTNDXFx1MEEzRS1cXHUwQTQyXFx1MEE0N1xcdTBBNDhcXHUwQTRCLVxcdTBBNERcXHUwQTUxXFx1MEE3MFxcdTBBNzFcXHUwQTc1XFx1MEE4MS1cXHUwQTgzXFx1MEFCQ1xcdTBBQkUtXFx1MEFDNVxcdTBBQzctXFx1MEFDOVxcdTBBQ0ItXFx1MEFDRFxcdTBBRTJcXHUwQUUzXFx1MEIwMS1cXHUwQjAzXFx1MEIzQ1xcdTBCM0UtXFx1MEI0NFxcdTBCNDdcXHUwQjQ4XFx1MEI0Qi1cXHUwQjREXFx1MEI1NlxcdTBCNTdcXHUwQjYyXFx1MEI2M1xcdTBCODJcXHUwQkJFLVxcdTBCQzJcXHUwQkM2LVxcdTBCQzhcXHUwQkNBLVxcdTBCQ0RcXHUwQkQ3XFx1MEMwMC1cXHUwQzAzXFx1MEMzRS1cXHUwQzQ0XFx1MEM0Ni1cXHUwQzQ4XFx1MEM0QS1cXHUwQzREXFx1MEM1NVxcdTBDNTZcXHUwQzYyXFx1MEM2M1xcdTBDODEtXFx1MEM4M1xcdTBDQkNcXHUwQ0JFLVxcdTBDQzRcXHUwQ0M2LVxcdTBDQzhcXHUwQ0NBLVxcdTBDQ0RcXHUwQ0Q1XFx1MENENlxcdTBDRTJcXHUwQ0UzXFx1MEQwMS1cXHUwRDAzXFx1MEQzRS1cXHUwRDQ0XFx1MEQ0Ni1cXHUwRDQ4XFx1MEQ0QS1cXHUwRDREXFx1MEQ1N1xcdTBENjJcXHUwRDYzXFx1MEQ4MlxcdTBEODNcXHUwRENBXFx1MERDRi1cXHUwREQ0XFx1MERENlxcdTBERDgtXFx1MERERlxcdTBERjJcXHUwREYzXFx1MEUzMVxcdTBFMzQtXFx1MEUzQVxcdTBFNDctXFx1MEU0RVxcdTBFQjFcXHUwRUI0LVxcdTBFQjlcXHUwRUJCXFx1MEVCQ1xcdTBFQzgtXFx1MEVDRFxcdTBGMThcXHUwRjE5XFx1MEYzNVxcdTBGMzdcXHUwRjM5XFx1MEYzRVxcdTBGM0ZcXHUwRjcxLVxcdTBGODRcXHUwRjg2XFx1MEY4N1xcdTBGOEQtXFx1MEY5N1xcdTBGOTktXFx1MEZCQ1xcdTBGQzZcXHUxMDJCLVxcdTEwM0VcXHUxMDU2LVxcdTEwNTlcXHUxMDVFLVxcdTEwNjBcXHUxMDYyLVxcdTEwNjRcXHUxMDY3LVxcdTEwNkRcXHUxMDcxLVxcdTEwNzRcXHUxMDgyLVxcdTEwOERcXHUxMDhGXFx1MTA5QS1cXHUxMDlEXFx1MTM1RC1cXHUxMzVGXFx1MTcxMi1cXHUxNzE0XFx1MTczMi1cXHUxNzM0XFx1MTc1MlxcdTE3NTNcXHUxNzcyXFx1MTc3M1xcdTE3QjQtXFx1MTdEM1xcdTE3RERcXHUxODBCLVxcdTE4MERcXHUxOEE5XFx1MTkyMC1cXHUxOTJCXFx1MTkzMC1cXHUxOTNCXFx1MTlCMC1cXHUxOUMwXFx1MTlDOFxcdTE5QzlcXHUxQTE3LVxcdTFBMUJcXHUxQTU1LVxcdTFBNUVcXHUxQTYwLVxcdTFBN0NcXHUxQTdGXFx1MUFCMC1cXHUxQUJFXFx1MUIwMC1cXHUxQjA0XFx1MUIzNC1cXHUxQjQ0XFx1MUI2Qi1cXHUxQjczXFx1MUI4MC1cXHUxQjgyXFx1MUJBMS1cXHUxQkFEXFx1MUJFNi1cXHUxQkYzXFx1MUMyNC1cXHUxQzM3XFx1MUNEMC1cXHUxQ0QyXFx1MUNENC1cXHUxQ0U4XFx1MUNFRFxcdTFDRjItXFx1MUNGNFxcdTFDRjhcXHUxQ0Y5XFx1MURDMC1cXHUxREY1XFx1MURGQy1cXHUxREZGXFx1MjBEMC1cXHUyMEYwXFx1MkNFRi1cXHUyQ0YxXFx1MkQ3RlxcdTJERTAtXFx1MkRGRlxcdTMwMkEtXFx1MzAyRlxcdTMwOTlcXHUzMDlBXFx1QTY2Ri1cXHVBNjcyXFx1QTY3NC1cXHVBNjdEXFx1QTY5RlxcdUE2RjBcXHVBNkYxXFx1QTgwMlxcdUE4MDZcXHVBODBCXFx1QTgyMy1cXHVBODI3XFx1QTg4MFxcdUE4ODFcXHVBOEI0LVxcdUE4QzRcXHVBOEUwLVxcdUE4RjFcXHVBOTI2LVxcdUE5MkRcXHVBOTQ3LVxcdUE5NTNcXHVBOTgwLVxcdUE5ODNcXHVBOUIzLVxcdUE5QzBcXHVBOUU1XFx1QUEyOS1cXHVBQTM2XFx1QUE0M1xcdUFBNENcXHVBQTREXFx1QUE3Qi1cXHVBQTdEXFx1QUFCMFxcdUFBQjItXFx1QUFCNFxcdUFBQjdcXHVBQUI4XFx1QUFCRVxcdUFBQkZcXHVBQUMxXFx1QUFFQi1cXHVBQUVGXFx1QUFGNVxcdUFBRjZcXHVBQkUzLVxcdUFCRUFcXHVBQkVDXFx1QUJFRFxcdUZCMUVcXHVGRTAwLVxcdUZFMEZcXHVGRTIwLVxcdUZFMkRdfFxcdUQ4MDBbXFx1RERGRFxcdURFRTBcXHVERjc2LVxcdURGN0FdfFxcdUQ4MDJbXFx1REUwMS1cXHVERTAzXFx1REUwNVxcdURFMDZcXHVERTBDLVxcdURFMEZcXHVERTM4LVxcdURFM0FcXHVERTNGXFx1REVFNVxcdURFRTZdfFxcdUQ4MDRbXFx1REMwMC1cXHVEQzAyXFx1REMzOC1cXHVEQzQ2XFx1REM3Ri1cXHVEQzgyXFx1RENCMC1cXHVEQ0JBXFx1REQwMC1cXHVERDAyXFx1REQyNy1cXHVERDM0XFx1REQ3M1xcdUREODAtXFx1REQ4MlxcdUREQjMtXFx1RERDMFxcdURFMkMtXFx1REUzN1xcdURFREYtXFx1REVFQVxcdURGMDEtXFx1REYwM1xcdURGM0NcXHVERjNFLVxcdURGNDRcXHVERjQ3XFx1REY0OFxcdURGNEItXFx1REY0RFxcdURGNTdcXHVERjYyXFx1REY2M1xcdURGNjYtXFx1REY2Q1xcdURGNzAtXFx1REY3NF18XFx1RDgwNVtcXHVEQ0IwLVxcdURDQzNcXHVEREFGLVxcdUREQjVcXHVEREI4LVxcdUREQzBcXHVERTMwLVxcdURFNDBcXHVERUFCLVxcdURFQjddfFxcdUQ4MUFbXFx1REVGMC1cXHVERUY0XFx1REYzMC1cXHVERjM2XXxcXHVEODFCW1xcdURGNTEtXFx1REY3RVxcdURGOEYtXFx1REY5Ml18XFx1RDgyRltcXHVEQzlEXFx1REM5RV18XFx1RDgzNFtcXHVERDY1LVxcdURENjlcXHVERDZELVxcdURENzJcXHVERDdCLVxcdUREODJcXHVERDg1LVxcdUREOEJcXHVEREFBLVxcdUREQURcXHVERTQyLVxcdURFNDRdfFxcdUQ4M0FbXFx1RENEMC1cXHVEQ0Q2XXxcXHVEQjQwW1xcdUREMDAtXFx1RERFRl0vO1xuXG5mdW5jdGlvbiB2YWxpZGF0ZUxhYmVsKGxhYmVsLCBwcm9jZXNzaW5nX29wdGlvbikge1xuICBpZiAobGFiZWwuc3Vic3RyKDAsIDQpID09PSBcInhuLS1cIikge1xuICAgIGxhYmVsID0gcHVueWNvZGUudG9Vbmljb2RlKGxhYmVsKTtcbiAgICBwcm9jZXNzaW5nX29wdGlvbiA9IFBST0NFU1NJTkdfT1BUSU9OUy5OT05UUkFOU0lUSU9OQUw7XG4gIH1cblxuICB2YXIgZXJyb3IgPSBmYWxzZTtcblxuICBpZiAobm9ybWFsaXplKGxhYmVsKSAhPT0gbGFiZWwgfHxcbiAgICAgIChsYWJlbFszXSA9PT0gXCItXCIgJiYgbGFiZWxbNF0gPT09IFwiLVwiKSB8fFxuICAgICAgbGFiZWxbMF0gPT09IFwiLVwiIHx8IGxhYmVsW2xhYmVsLmxlbmd0aCAtIDFdID09PSBcIi1cIiB8fFxuICAgICAgbGFiZWwuaW5kZXhPZihcIi5cIikgIT09IC0xIHx8XG4gICAgICBsYWJlbC5zZWFyY2goY29tYmluaW5nTWFya3NSZWdleCkgPT09IDApIHtcbiAgICBlcnJvciA9IHRydWU7XG4gIH1cblxuICB2YXIgbGVuID0gY291bnRTeW1ib2xzKGxhYmVsKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIHZhciBzdGF0dXMgPSBmaW5kU3RhdHVzKGxhYmVsLmNvZGVQb2ludEF0KGkpKTtcbiAgICBpZiAoKHByb2Nlc3NpbmcgPT09IFBST0NFU1NJTkdfT1BUSU9OUy5UUkFOU0lUSU9OQUwgJiYgc3RhdHVzWzFdICE9PSBcInZhbGlkXCIpIHx8XG4gICAgICAgIChwcm9jZXNzaW5nID09PSBQUk9DRVNTSU5HX09QVElPTlMuTk9OVFJBTlNJVElPTkFMICYmXG4gICAgICAgICBzdGF0dXNbMV0gIT09IFwidmFsaWRcIiAmJiBzdGF0dXNbMV0gIT09IFwiZGV2aWF0aW9uXCIpKSB7XG4gICAgICBlcnJvciA9IHRydWU7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGxhYmVsOiBsYWJlbCxcbiAgICBlcnJvcjogZXJyb3JcbiAgfTtcbn1cblxuZnVuY3Rpb24gcHJvY2Vzc2luZyhkb21haW5fbmFtZSwgdXNlU1REMywgcHJvY2Vzc2luZ19vcHRpb24pIHtcbiAgdmFyIHJlc3VsdCA9IG1hcENoYXJzKGRvbWFpbl9uYW1lLCB1c2VTVEQzLCBwcm9jZXNzaW5nX29wdGlvbik7XG4gIHJlc3VsdC5zdHJpbmcgPSBub3JtYWxpemUocmVzdWx0LnN0cmluZyk7XG5cbiAgdmFyIGxhYmVscyA9IHJlc3VsdC5zdHJpbmcuc3BsaXQoXCIuXCIpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxhYmVscy5sZW5ndGg7ICsraSkge1xuICAgIHRyeSB7XG4gICAgICB2YXIgdmFsaWRhdGlvbiA9IHZhbGlkYXRlTGFiZWwobGFiZWxzW2ldKTtcbiAgICAgIGxhYmVsc1tpXSA9IHZhbGlkYXRpb24ubGFiZWw7XG4gICAgICByZXN1bHQuZXJyb3IgPSByZXN1bHQuZXJyb3IgfHwgdmFsaWRhdGlvbi5lcnJvcjtcbiAgICB9IGNhdGNoKGUpIHtcbiAgICAgIHJlc3VsdC5lcnJvciA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzdHJpbmc6IGxhYmVscy5qb2luKFwiLlwiKSxcbiAgICBlcnJvcjogcmVzdWx0LmVycm9yXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzLnRvQVNDSUkgPSBmdW5jdGlvbihkb21haW5fbmFtZSwgdXNlU1REMywgcHJvY2Vzc2luZ19vcHRpb24sIHZlcmlmeURuc0xlbmd0aCkge1xuICB2YXIgcmVzdWx0ID0gcHJvY2Vzc2luZyhkb21haW5fbmFtZSwgdXNlU1REMywgcHJvY2Vzc2luZ19vcHRpb24pO1xuICB2YXIgbGFiZWxzID0gcmVzdWx0LnN0cmluZy5zcGxpdChcIi5cIik7XG4gIGxhYmVscyA9IGxhYmVscy5tYXAoZnVuY3Rpb24obCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gcHVueWNvZGUudG9BU0NJSShsKTtcbiAgICB9IGNhdGNoKGUpIHtcbiAgICAgIHJlc3VsdC5lcnJvciA9IHRydWU7XG4gICAgICByZXR1cm4gbDtcbiAgICB9XG4gIH0pO1xuXG4gIGlmICh2ZXJpZnlEbnNMZW5ndGgpIHtcbiAgICB2YXIgdG90YWwgPSBsYWJlbHMuc2xpY2UoMCwgbGFiZWxzLmxlbmd0aCAtIDEpLmpvaW4oXCIuXCIpLmxlbmd0aDtcbiAgICBpZiAodG90YWwubGVuZ3RoID4gMjUzIHx8IHRvdGFsLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmVzdWx0LmVycm9yID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpPTA7IGkgPCBsYWJlbHMubGVuZ3RoOyArK2kpIHtcbiAgICAgIGlmIChsYWJlbHMubGVuZ3RoID4gNjMgfHwgbGFiZWxzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXN1bHQuZXJyb3IgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAocmVzdWx0LmVycm9yKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIGxhYmVscy5qb2luKFwiLlwiKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzLnRvVW5pY29kZSA9IGZ1bmN0aW9uKGRvbWFpbl9uYW1lLCB1c2VTVEQzKSB7XG4gIHZhciByZXN1bHQgPSBwcm9jZXNzaW5nKGRvbWFpbl9uYW1lLCB1c2VTVEQzLCBQUk9DRVNTSU5HX09QVElPTlMuTk9OVFJBTlNJVElPTkFMKTtcblxuICByZXR1cm4ge1xuICAgIGRvbWFpbjogcmVzdWx0LnN0cmluZyxcbiAgICBlcnJvcjogcmVzdWx0LmVycm9yXG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5QUk9DRVNTSU5HX09QVElPTlMgPSBQUk9DRVNTSU5HX09QVElPTlM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xyXG5jb25zdCBwdW55Y29kZSA9IHJlcXVpcmUoXCJwdW55Y29kZVwiKTtcclxuY29uc3QgdHI0NiA9IHJlcXVpcmUoXCJ0cjQ2XCIpO1xyXG5cclxuY29uc3Qgc3BlY2lhbFNjaGVtZXMgPSB7XHJcbiAgZnRwOiAyMSxcclxuICBmaWxlOiBudWxsLFxyXG4gIGdvcGhlcjogNzAsXHJcbiAgaHR0cDogODAsXHJcbiAgaHR0cHM6IDQ0MyxcclxuICB3czogODAsXHJcbiAgd3NzOiA0NDNcclxufTtcclxuXHJcbmNvbnN0IGZhaWx1cmUgPSBTeW1ib2woXCJmYWlsdXJlXCIpO1xyXG5cclxuZnVuY3Rpb24gY291bnRTeW1ib2xzKHN0cikge1xyXG4gIHJldHVybiBwdW55Y29kZS51Y3MyLmRlY29kZShzdHIpLmxlbmd0aDtcclxufVxyXG5cclxuZnVuY3Rpb24gYXQoaW5wdXQsIGlkeCkge1xyXG4gIGNvbnN0IGMgPSBpbnB1dFtpZHhdO1xyXG4gIHJldHVybiBpc05hTihjKSA/IHVuZGVmaW5lZCA6IFN0cmluZy5mcm9tQ29kZVBvaW50KGMpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0FTQ0lJRGlnaXQoYykge1xyXG4gIHJldHVybiBjID49IDB4MzAgJiYgYyA8PSAweDM5O1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0FTQ0lJQWxwaGEoYykge1xyXG4gIHJldHVybiAoYyA+PSAweDQxICYmIGMgPD0gMHg1QSkgfHwgKGMgPj0gMHg2MSAmJiBjIDw9IDB4N0EpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0FTQ0lJQWxwaGFudW1lcmljKGMpIHtcclxuICByZXR1cm4gaXNBU0NJSUFscGhhKGMpIHx8IGlzQVNDSUlEaWdpdChjKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNBU0NJSUhleChjKSB7XHJcbiAgcmV0dXJuIGlzQVNDSUlEaWdpdChjKSB8fCAoYyA+PSAweDQxICYmIGMgPD0gMHg0NikgfHwgKGMgPj0gMHg2MSAmJiBjIDw9IDB4NjYpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc1NpbmdsZURvdChidWZmZXIpIHtcclxuICByZXR1cm4gYnVmZmVyID09PSBcIi5cIiB8fCBidWZmZXIudG9Mb3dlckNhc2UoKSA9PT0gXCIlMmVcIjtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNEb3VibGVEb3QoYnVmZmVyKSB7XHJcbiAgYnVmZmVyID0gYnVmZmVyLnRvTG93ZXJDYXNlKCk7XHJcbiAgcmV0dXJuIGJ1ZmZlciA9PT0gXCIuLlwiIHx8IGJ1ZmZlciA9PT0gXCIlMmUuXCIgfHwgYnVmZmVyID09PSBcIi4lMmVcIiB8fCBidWZmZXIgPT09IFwiJTJlJTJlXCI7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzV2luZG93c0RyaXZlTGV0dGVyQ29kZVBvaW50cyhjcDEsIGNwMikge1xyXG4gIHJldHVybiBpc0FTQ0lJQWxwaGEoY3AxKSAmJiAoY3AyID09PSA1OCB8fCBjcDIgPT09IDEyNCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzV2luZG93c0RyaXZlTGV0dGVyU3RyaW5nKHN0cmluZykge1xyXG4gIHJldHVybiBzdHJpbmcubGVuZ3RoID09PSAyICYmIGlzQVNDSUlBbHBoYShzdHJpbmcuY29kZVBvaW50QXQoMCkpICYmIChzdHJpbmdbMV0gPT09IFwiOlwiIHx8IHN0cmluZ1sxXSA9PT0gXCJ8XCIpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc05vcm1hbGl6ZWRXaW5kb3dzRHJpdmVMZXR0ZXJTdHJpbmcoc3RyaW5nKSB7XHJcbiAgcmV0dXJuIHN0cmluZy5sZW5ndGggPT09IDIgJiYgaXNBU0NJSUFscGhhKHN0cmluZy5jb2RlUG9pbnRBdCgwKSkgJiYgc3RyaW5nWzFdID09PSBcIjpcIjtcclxufVxyXG5cclxuZnVuY3Rpb24gY29udGFpbnNGb3JiaWRkZW5Ib3N0Q29kZVBvaW50KHN0cmluZykge1xyXG4gIHJldHVybiBzdHJpbmcuc2VhcmNoKC9cXHUwMDAwfFxcdTAwMDl8XFx1MDAwQXxcXHUwMDBEfFxcdTAwMjB8I3wlfFxcL3w6fFxcP3xAfFxcW3xcXFxcfFxcXS8pICE9PSAtMTtcclxufVxyXG5cclxuZnVuY3Rpb24gY29udGFpbnNGb3JiaWRkZW5Ib3N0Q29kZVBvaW50RXhjbHVkaW5nUGVyY2VudChzdHJpbmcpIHtcclxuICByZXR1cm4gc3RyaW5nLnNlYXJjaCgvXFx1MDAwMHxcXHUwMDA5fFxcdTAwMEF8XFx1MDAwRHxcXHUwMDIwfCN8XFwvfDp8XFw/fEB8XFxbfFxcXFx8XFxdLykgIT09IC0xO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc1NwZWNpYWxTY2hlbWUoc2NoZW1lKSB7XHJcbiAgcmV0dXJuIHNwZWNpYWxTY2hlbWVzW3NjaGVtZV0gIT09IHVuZGVmaW5lZDtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNTcGVjaWFsKHVybCkge1xyXG4gIHJldHVybiBpc1NwZWNpYWxTY2hlbWUodXJsLnNjaGVtZSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGRlZmF1bHRQb3J0KHNjaGVtZSkge1xyXG4gIHJldHVybiBzcGVjaWFsU2NoZW1lc1tzY2hlbWVdO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwZXJjZW50RW5jb2RlKGMpIHtcclxuICBsZXQgaGV4ID0gYy50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcclxuICBpZiAoaGV4Lmxlbmd0aCA9PT0gMSkge1xyXG4gICAgaGV4ID0gXCIwXCIgKyBoZXg7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gXCIlXCIgKyBoZXg7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHV0ZjhQZXJjZW50RW5jb2RlKGMpIHtcclxuICBjb25zdCBidWYgPSBuZXcgQnVmZmVyKGMpO1xyXG5cclxuICBsZXQgc3RyID0gXCJcIjtcclxuXHJcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWYubGVuZ3RoOyArK2kpIHtcclxuICAgIHN0ciArPSBwZXJjZW50RW5jb2RlKGJ1ZltpXSk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gc3RyO1xyXG59XHJcblxyXG5mdW5jdGlvbiB1dGY4UGVyY2VudERlY29kZShzdHIpIHtcclxuICBjb25zdCBpbnB1dCA9IG5ldyBCdWZmZXIoc3RyKTtcclxuICBjb25zdCBvdXRwdXQgPSBbXTtcclxuICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgKytpKSB7XHJcbiAgICBpZiAoaW5wdXRbaV0gIT09IDM3KSB7XHJcbiAgICAgIG91dHB1dC5wdXNoKGlucHV0W2ldKTtcclxuICAgIH0gZWxzZSBpZiAoaW5wdXRbaV0gPT09IDM3ICYmIGlzQVNDSUlIZXgoaW5wdXRbaSArIDFdKSAmJiBpc0FTQ0lJSGV4KGlucHV0W2kgKyAyXSkpIHtcclxuICAgICAgb3V0cHV0LnB1c2gocGFyc2VJbnQoaW5wdXQuc2xpY2UoaSArIDEsIGkgKyAzKS50b1N0cmluZygpLCAxNikpO1xyXG4gICAgICBpICs9IDI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBvdXRwdXQucHVzaChpbnB1dFtpXSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiBuZXcgQnVmZmVyKG91dHB1dCkudG9TdHJpbmcoKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNDMENvbnRyb2xQZXJjZW50RW5jb2RlKGMpIHtcclxuICByZXR1cm4gYyA8PSAweDFGIHx8IGMgPiAweDdFO1xyXG59XHJcblxyXG5jb25zdCBleHRyYVBhdGhQZXJjZW50RW5jb2RlU2V0ID0gbmV3IFNldChbMzIsIDM0LCAzNSwgNjAsIDYyLCA2MywgOTYsIDEyMywgMTI1XSk7XHJcbmZ1bmN0aW9uIGlzUGF0aFBlcmNlbnRFbmNvZGUoYykge1xyXG4gIHJldHVybiBpc0MwQ29udHJvbFBlcmNlbnRFbmNvZGUoYykgfHwgZXh0cmFQYXRoUGVyY2VudEVuY29kZVNldC5oYXMoYyk7XHJcbn1cclxuXHJcbmNvbnN0IGV4dHJhVXNlcmluZm9QZXJjZW50RW5jb2RlU2V0ID1cclxuICBuZXcgU2V0KFs0NywgNTgsIDU5LCA2MSwgNjQsIDkxLCA5MiwgOTMsIDk0LCAxMjRdKTtcclxuZnVuY3Rpb24gaXNVc2VyaW5mb1BlcmNlbnRFbmNvZGUoYykge1xyXG4gIHJldHVybiBpc1BhdGhQZXJjZW50RW5jb2RlKGMpIHx8IGV4dHJhVXNlcmluZm9QZXJjZW50RW5jb2RlU2V0LmhhcyhjKTtcclxufVxyXG5cclxuZnVuY3Rpb24gcGVyY2VudEVuY29kZUNoYXIoYywgZW5jb2RlU2V0UHJlZGljYXRlKSB7XHJcbiAgY29uc3QgY1N0ciA9IFN0cmluZy5mcm9tQ29kZVBvaW50KGMpO1xyXG5cclxuICBpZiAoZW5jb2RlU2V0UHJlZGljYXRlKGMpKSB7XHJcbiAgICByZXR1cm4gdXRmOFBlcmNlbnRFbmNvZGUoY1N0cik7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gY1N0cjtcclxufVxyXG5cclxuZnVuY3Rpb24gcGFyc2VJUHY0TnVtYmVyKGlucHV0KSB7XHJcbiAgbGV0IFIgPSAxMDtcclxuXHJcbiAgaWYgKGlucHV0Lmxlbmd0aCA+PSAyICYmIGlucHV0LmNoYXJBdCgwKSA9PT0gXCIwXCIgJiYgaW5wdXQuY2hhckF0KDEpLnRvTG93ZXJDYXNlKCkgPT09IFwieFwiKSB7XHJcbiAgICBpbnB1dCA9IGlucHV0LnN1YnN0cmluZygyKTtcclxuICAgIFIgPSAxNjtcclxuICB9IGVsc2UgaWYgKGlucHV0Lmxlbmd0aCA+PSAyICYmIGlucHV0LmNoYXJBdCgwKSA9PT0gXCIwXCIpIHtcclxuICAgIGlucHV0ID0gaW5wdXQuc3Vic3RyaW5nKDEpO1xyXG4gICAgUiA9IDg7XHJcbiAgfVxyXG5cclxuICBpZiAoaW5wdXQgPT09IFwiXCIpIHtcclxuICAgIHJldHVybiAwO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgcmVnZXggPSBSID09PSAxMCA/IC9bXjAtOV0vIDogKFIgPT09IDE2ID8gL1teMC05QS1GYS1mXS8gOiAvW14wLTddLyk7XHJcbiAgaWYgKHJlZ2V4LnRlc3QoaW5wdXQpKSB7XHJcbiAgICByZXR1cm4gZmFpbHVyZTtcclxuICB9XHJcblxyXG4gIHJldHVybiBwYXJzZUludChpbnB1dCwgUik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHBhcnNlSVB2NChpbnB1dCkge1xyXG4gIGNvbnN0IHBhcnRzID0gaW5wdXQuc3BsaXQoXCIuXCIpO1xyXG4gIGlmIChwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXSA9PT0gXCJcIikge1xyXG4gICAgaWYgKHBhcnRzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgcGFydHMucG9wKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpZiAocGFydHMubGVuZ3RoID4gNCkge1xyXG4gICAgcmV0dXJuIGlucHV0O1xyXG4gIH1cclxuXHJcbiAgY29uc3QgbnVtYmVycyA9IFtdO1xyXG4gIGZvciAoY29uc3QgcGFydCBvZiBwYXJ0cykge1xyXG4gICAgaWYgKHBhcnQgPT09IFwiXCIpIHtcclxuICAgICAgcmV0dXJuIGlucHV0O1xyXG4gICAgfVxyXG4gICAgY29uc3QgbiA9IHBhcnNlSVB2NE51bWJlcihwYXJ0KTtcclxuICAgIGlmIChuID09PSBmYWlsdXJlKSB7XHJcbiAgICAgIHJldHVybiBpbnB1dDtcclxuICAgIH1cclxuXHJcbiAgICBudW1iZXJzLnB1c2gobik7XHJcbiAgfVxyXG5cclxuICBmb3IgKGxldCBpID0gMDsgaSA8IG51bWJlcnMubGVuZ3RoIC0gMTsgKytpKSB7XHJcbiAgICBpZiAobnVtYmVyc1tpXSA+IDI1NSkge1xyXG4gICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgIH1cclxuICB9XHJcbiAgaWYgKG51bWJlcnNbbnVtYmVycy5sZW5ndGggLSAxXSA+PSBNYXRoLnBvdygyNTYsIDUgLSBudW1iZXJzLmxlbmd0aCkpIHtcclxuICAgIHJldHVybiBmYWlsdXJlO1xyXG4gIH1cclxuXHJcbiAgbGV0IGlwdjQgPSBudW1iZXJzLnBvcCgpO1xyXG4gIGxldCBjb3VudGVyID0gMDtcclxuXHJcbiAgZm9yIChjb25zdCBuIG9mIG51bWJlcnMpIHtcclxuICAgIGlwdjQgKz0gbiAqIE1hdGgucG93KDI1NiwgMyAtIGNvdW50ZXIpO1xyXG4gICAgKytjb3VudGVyO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGlwdjQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNlcmlhbGl6ZUlQdjQoYWRkcmVzcykge1xyXG4gIGxldCBvdXRwdXQgPSBcIlwiO1xyXG4gIGxldCBuID0gYWRkcmVzcztcclxuXHJcbiAgZm9yIChsZXQgaSA9IDE7IGkgPD0gNDsgKytpKSB7XHJcbiAgICBvdXRwdXQgPSBTdHJpbmcobiAlIDI1NikgKyBvdXRwdXQ7XHJcbiAgICBpZiAoaSAhPT0gNCkge1xyXG4gICAgICBvdXRwdXQgPSBcIi5cIiArIG91dHB1dDtcclxuICAgIH1cclxuICAgIG4gPSBNYXRoLmZsb29yKG4gLyAyNTYpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIG91dHB1dDtcclxufVxyXG5cclxuZnVuY3Rpb24gcGFyc2VJUHY2KGlucHV0KSB7XHJcbiAgY29uc3QgYWRkcmVzcyA9IFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwXTtcclxuICBsZXQgcGllY2VJbmRleCA9IDA7XHJcbiAgbGV0IGNvbXByZXNzID0gbnVsbDtcclxuICBsZXQgcG9pbnRlciA9IDA7XHJcblxyXG4gIGlucHV0ID0gcHVueWNvZGUudWNzMi5kZWNvZGUoaW5wdXQpO1xyXG5cclxuICBpZiAoaW5wdXRbcG9pbnRlcl0gPT09IDU4KSB7XHJcbiAgICBpZiAoaW5wdXRbcG9pbnRlciArIDFdICE9PSA1OCkge1xyXG4gICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgIH1cclxuXHJcbiAgICBwb2ludGVyICs9IDI7XHJcbiAgICArK3BpZWNlSW5kZXg7XHJcbiAgICBjb21wcmVzcyA9IHBpZWNlSW5kZXg7XHJcbiAgfVxyXG5cclxuICB3aGlsZSAocG9pbnRlciA8IGlucHV0Lmxlbmd0aCkge1xyXG4gICAgaWYgKHBpZWNlSW5kZXggPT09IDgpIHtcclxuICAgICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlucHV0W3BvaW50ZXJdID09PSA1OCkge1xyXG4gICAgICBpZiAoY29tcHJlc3MgIT09IG51bGwpIHtcclxuICAgICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgICAgfVxyXG4gICAgICArK3BvaW50ZXI7XHJcbiAgICAgICsrcGllY2VJbmRleDtcclxuICAgICAgY29tcHJlc3MgPSBwaWVjZUluZGV4O1xyXG4gICAgICBjb250aW51ZTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgdmFsdWUgPSAwO1xyXG4gICAgbGV0IGxlbmd0aCA9IDA7XHJcblxyXG4gICAgd2hpbGUgKGxlbmd0aCA8IDQgJiYgaXNBU0NJSUhleChpbnB1dFtwb2ludGVyXSkpIHtcclxuICAgICAgdmFsdWUgPSB2YWx1ZSAqIDB4MTAgKyBwYXJzZUludChhdChpbnB1dCwgcG9pbnRlciksIDE2KTtcclxuICAgICAgKytwb2ludGVyO1xyXG4gICAgICArK2xlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaW5wdXRbcG9pbnRlcl0gPT09IDQ2KSB7XHJcbiAgICAgIGlmIChsZW5ndGggPT09IDApIHtcclxuICAgICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcG9pbnRlciAtPSBsZW5ndGg7XHJcblxyXG4gICAgICBpZiAocGllY2VJbmRleCA+IDYpIHtcclxuICAgICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IG51bWJlcnNTZWVuID0gMDtcclxuXHJcbiAgICAgIHdoaWxlIChpbnB1dFtwb2ludGVyXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgbGV0IGlwdjRQaWVjZSA9IG51bGw7XHJcblxyXG4gICAgICAgIGlmIChudW1iZXJzU2VlbiA+IDApIHtcclxuICAgICAgICAgIGlmIChpbnB1dFtwb2ludGVyXSA9PT0gNDYgJiYgbnVtYmVyc1NlZW4gPCA0KSB7XHJcbiAgICAgICAgICAgICsrcG9pbnRlcjtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFpc0FTQ0lJRGlnaXQoaW5wdXRbcG9pbnRlcl0pKSB7XHJcbiAgICAgICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHdoaWxlIChpc0FTQ0lJRGlnaXQoaW5wdXRbcG9pbnRlcl0pKSB7XHJcbiAgICAgICAgICBjb25zdCBudW1iZXIgPSBwYXJzZUludChhdChpbnB1dCwgcG9pbnRlcikpO1xyXG4gICAgICAgICAgaWYgKGlwdjRQaWVjZSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpcHY0UGllY2UgPSBudW1iZXI7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGlwdjRQaWVjZSA9PT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlwdjRQaWVjZSA9IGlwdjRQaWVjZSAqIDEwICsgbnVtYmVyO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGlwdjRQaWVjZSA+IDI1NSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgICsrcG9pbnRlcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGFkZHJlc3NbcGllY2VJbmRleF0gPSBhZGRyZXNzW3BpZWNlSW5kZXhdICogMHgxMDAgKyBpcHY0UGllY2U7XHJcblxyXG4gICAgICAgICsrbnVtYmVyc1NlZW47XHJcblxyXG4gICAgICAgIGlmIChudW1iZXJzU2VlbiA9PT0gMiB8fCBudW1iZXJzU2VlbiA9PT0gNCkge1xyXG4gICAgICAgICAgKytwaWVjZUluZGV4O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKG51bWJlcnNTZWVuICE9PSA0KSB7XHJcbiAgICAgICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGJyZWFrO1xyXG4gICAgfSBlbHNlIGlmIChpbnB1dFtwb2ludGVyXSA9PT0gNTgpIHtcclxuICAgICAgKytwb2ludGVyO1xyXG4gICAgICBpZiAoaW5wdXRbcG9pbnRlcl0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGlucHV0W3BvaW50ZXJdICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkcmVzc1twaWVjZUluZGV4XSA9IHZhbHVlO1xyXG4gICAgKytwaWVjZUluZGV4O1xyXG4gIH1cclxuXHJcbiAgaWYgKGNvbXByZXNzICE9PSBudWxsKSB7XHJcbiAgICBsZXQgc3dhcHMgPSBwaWVjZUluZGV4IC0gY29tcHJlc3M7XHJcbiAgICBwaWVjZUluZGV4ID0gNztcclxuICAgIHdoaWxlIChwaWVjZUluZGV4ICE9PSAwICYmIHN3YXBzID4gMCkge1xyXG4gICAgICBjb25zdCB0ZW1wID0gYWRkcmVzc1tjb21wcmVzcyArIHN3YXBzIC0gMV07XHJcbiAgICAgIGFkZHJlc3NbY29tcHJlc3MgKyBzd2FwcyAtIDFdID0gYWRkcmVzc1twaWVjZUluZGV4XTtcclxuICAgICAgYWRkcmVzc1twaWVjZUluZGV4XSA9IHRlbXA7XHJcbiAgICAgIC0tcGllY2VJbmRleDtcclxuICAgICAgLS1zd2FwcztcclxuICAgIH1cclxuICB9IGVsc2UgaWYgKGNvbXByZXNzID09PSBudWxsICYmIHBpZWNlSW5kZXggIT09IDgpIHtcclxuICAgIHJldHVybiBmYWlsdXJlO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGFkZHJlc3M7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNlcmlhbGl6ZUlQdjYoYWRkcmVzcykge1xyXG4gIGxldCBvdXRwdXQgPSBcIlwiO1xyXG4gIGNvbnN0IHNlcVJlc3VsdCA9IGZpbmRMb25nZXN0WmVyb1NlcXVlbmNlKGFkZHJlc3MpO1xyXG4gIGNvbnN0IGNvbXByZXNzID0gc2VxUmVzdWx0LmlkeDtcclxuICBsZXQgaWdub3JlMCA9IGZhbHNlO1xyXG5cclxuICBmb3IgKGxldCBwaWVjZUluZGV4ID0gMDsgcGllY2VJbmRleCA8PSA3OyArK3BpZWNlSW5kZXgpIHtcclxuICAgIGlmIChpZ25vcmUwICYmIGFkZHJlc3NbcGllY2VJbmRleF0gPT09IDApIHtcclxuICAgICAgY29udGludWU7XHJcbiAgICB9IGVsc2UgaWYgKGlnbm9yZTApIHtcclxuICAgICAgaWdub3JlMCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb21wcmVzcyA9PT0gcGllY2VJbmRleCkge1xyXG4gICAgICBjb25zdCBzZXBhcmF0b3IgPSBwaWVjZUluZGV4ID09PSAwID8gXCI6OlwiIDogXCI6XCI7XHJcbiAgICAgIG91dHB1dCArPSBzZXBhcmF0b3I7XHJcbiAgICAgIGlnbm9yZTAgPSB0cnVlO1xyXG4gICAgICBjb250aW51ZTtcclxuICAgIH1cclxuXHJcbiAgICBvdXRwdXQgKz0gYWRkcmVzc1twaWVjZUluZGV4XS50b1N0cmluZygxNik7XHJcblxyXG4gICAgaWYgKHBpZWNlSW5kZXggIT09IDcpIHtcclxuICAgICAgb3V0cHV0ICs9IFwiOlwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIG91dHB1dDtcclxufVxyXG5cclxuZnVuY3Rpb24gcGFyc2VIb3N0KGlucHV0LCBpc1NwZWNpYWxBcmcpIHtcclxuICBpZiAoaW5wdXRbMF0gPT09IFwiW1wiKSB7XHJcbiAgICBpZiAoaW5wdXRbaW5wdXQubGVuZ3RoIC0gMV0gIT09IFwiXVwiKSB7XHJcbiAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBwYXJzZUlQdjYoaW5wdXQuc3Vic3RyaW5nKDEsIGlucHV0Lmxlbmd0aCAtIDEpKTtcclxuICB9XHJcblxyXG4gIGlmICghaXNTcGVjaWFsQXJnKSB7XHJcbiAgICByZXR1cm4gcGFyc2VPcGFxdWVIb3N0KGlucHV0KTtcclxuICB9XHJcblxyXG4gIGNvbnN0IGRvbWFpbiA9IHV0ZjhQZXJjZW50RGVjb2RlKGlucHV0KTtcclxuICBjb25zdCBhc2NpaURvbWFpbiA9IHRyNDYudG9BU0NJSShkb21haW4sIGZhbHNlLCB0cjQ2LlBST0NFU1NJTkdfT1BUSU9OUy5OT05UUkFOU0lUSU9OQUwsIGZhbHNlKTtcclxuICBpZiAoYXNjaWlEb21haW4gPT09IG51bGwpIHtcclxuICAgIHJldHVybiBmYWlsdXJlO1xyXG4gIH1cclxuXHJcbiAgaWYgKGNvbnRhaW5zRm9yYmlkZGVuSG9zdENvZGVQb2ludChhc2NpaURvbWFpbikpIHtcclxuICAgIHJldHVybiBmYWlsdXJlO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgaXB2NEhvc3QgPSBwYXJzZUlQdjQoYXNjaWlEb21haW4pO1xyXG4gIGlmICh0eXBlb2YgaXB2NEhvc3QgPT09IFwibnVtYmVyXCIgfHwgaXB2NEhvc3QgPT09IGZhaWx1cmUpIHtcclxuICAgIHJldHVybiBpcHY0SG9zdDtcclxuICB9XHJcblxyXG4gIHJldHVybiBhc2NpaURvbWFpbjtcclxufVxyXG5cclxuZnVuY3Rpb24gcGFyc2VPcGFxdWVIb3N0KGlucHV0KSB7XHJcbiAgaWYgKGNvbnRhaW5zRm9yYmlkZGVuSG9zdENvZGVQb2ludEV4Y2x1ZGluZ1BlcmNlbnQoaW5wdXQpKSB7XHJcbiAgICByZXR1cm4gZmFpbHVyZTtcclxuICB9XHJcblxyXG4gIGxldCBvdXRwdXQgPSBcIlwiO1xyXG4gIGNvbnN0IGRlY29kZWQgPSBwdW55Y29kZS51Y3MyLmRlY29kZShpbnB1dCk7XHJcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZWNvZGVkLmxlbmd0aDsgKytpKSB7XHJcbiAgICBvdXRwdXQgKz0gcGVyY2VudEVuY29kZUNoYXIoZGVjb2RlZFtpXSwgaXNDMENvbnRyb2xQZXJjZW50RW5jb2RlKTtcclxuICB9XHJcbiAgcmV0dXJuIG91dHB1dDtcclxufVxyXG5cclxuZnVuY3Rpb24gZmluZExvbmdlc3RaZXJvU2VxdWVuY2UoYXJyKSB7XHJcbiAgbGV0IG1heElkeCA9IG51bGw7XHJcbiAgbGV0IG1heExlbiA9IDE7IC8vIG9ubHkgZmluZCBlbGVtZW50cyA+IDFcclxuICBsZXQgY3VyclN0YXJ0ID0gbnVsbDtcclxuICBsZXQgY3VyckxlbiA9IDA7XHJcblxyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgKytpKSB7XHJcbiAgICBpZiAoYXJyW2ldICE9PSAwKSB7XHJcbiAgICAgIGlmIChjdXJyTGVuID4gbWF4TGVuKSB7XHJcbiAgICAgICAgbWF4SWR4ID0gY3VyclN0YXJ0O1xyXG4gICAgICAgIG1heExlbiA9IGN1cnJMZW47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGN1cnJTdGFydCA9IG51bGw7XHJcbiAgICAgIGN1cnJMZW4gPSAwO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKGN1cnJTdGFydCA9PT0gbnVsbCkge1xyXG4gICAgICAgIGN1cnJTdGFydCA9IGk7XHJcbiAgICAgIH1cclxuICAgICAgKytjdXJyTGVuO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gaWYgdHJhaWxpbmcgemVyb3NcclxuICBpZiAoY3VyckxlbiA+IG1heExlbikge1xyXG4gICAgbWF4SWR4ID0gY3VyclN0YXJ0O1xyXG4gICAgbWF4TGVuID0gY3VyckxlbjtcclxuICB9XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICBpZHg6IG1heElkeCxcclxuICAgIGxlbjogbWF4TGVuXHJcbiAgfTtcclxufVxyXG5cclxuZnVuY3Rpb24gc2VyaWFsaXplSG9zdChob3N0KSB7XHJcbiAgaWYgKHR5cGVvZiBob3N0ID09PSBcIm51bWJlclwiKSB7XHJcbiAgICByZXR1cm4gc2VyaWFsaXplSVB2NChob3N0KTtcclxuICB9XHJcblxyXG4gIC8vIElQdjYgc2VyaWFsaXplclxyXG4gIGlmIChob3N0IGluc3RhbmNlb2YgQXJyYXkpIHtcclxuICAgIHJldHVybiBcIltcIiArIHNlcmlhbGl6ZUlQdjYoaG9zdCkgKyBcIl1cIjtcclxuICB9XHJcblxyXG4gIHJldHVybiBob3N0O1xyXG59XHJcblxyXG5mdW5jdGlvbiB0cmltQ29udHJvbENoYXJzKHVybCkge1xyXG4gIHJldHVybiB1cmwucmVwbGFjZSgvXltcXHUwMDAwLVxcdTAwMUZcXHUwMDIwXSt8W1xcdTAwMDAtXFx1MDAxRlxcdTAwMjBdKyQvZywgXCJcIik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHRyaW1UYWJBbmROZXdsaW5lKHVybCkge1xyXG4gIHJldHVybiB1cmwucmVwbGFjZSgvXFx1MDAwOXxcXHUwMDBBfFxcdTAwMEQvZywgXCJcIik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNob3J0ZW5QYXRoKHVybCkge1xyXG4gIGNvbnN0IHBhdGggPSB1cmwucGF0aDtcclxuICBpZiAocGF0aC5sZW5ndGggPT09IDApIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcbiAgaWYgKHVybC5zY2hlbWUgPT09IFwiZmlsZVwiICYmIHBhdGgubGVuZ3RoID09PSAxICYmIGlzTm9ybWFsaXplZFdpbmRvd3NEcml2ZUxldHRlcihwYXRoWzBdKSkge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgcGF0aC5wb3AoKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaW5jbHVkZXNDcmVkZW50aWFscyh1cmwpIHtcclxuICByZXR1cm4gdXJsLnVzZXJuYW1lICE9PSBcIlwiIHx8IHVybC5wYXNzd29yZCAhPT0gXCJcIjtcclxufVxyXG5cclxuZnVuY3Rpb24gY2Fubm90SGF2ZUFVc2VybmFtZVBhc3N3b3JkUG9ydCh1cmwpIHtcclxuICByZXR1cm4gdXJsLmhvc3QgPT09IG51bGwgfHwgdXJsLmhvc3QgPT09IFwiXCIgfHwgdXJsLmNhbm5vdEJlQUJhc2VVUkwgfHwgdXJsLnNjaGVtZSA9PT0gXCJmaWxlXCI7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzTm9ybWFsaXplZFdpbmRvd3NEcml2ZUxldHRlcihzdHJpbmcpIHtcclxuICByZXR1cm4gL15bQS1aYS16XTokLy50ZXN0KHN0cmluZyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIFVSTFN0YXRlTWFjaGluZShpbnB1dCwgYmFzZSwgZW5jb2RpbmdPdmVycmlkZSwgdXJsLCBzdGF0ZU92ZXJyaWRlKSB7XHJcbiAgdGhpcy5wb2ludGVyID0gMDtcclxuICB0aGlzLmlucHV0ID0gaW5wdXQ7XHJcbiAgdGhpcy5iYXNlID0gYmFzZSB8fCBudWxsO1xyXG4gIHRoaXMuZW5jb2RpbmdPdmVycmlkZSA9IGVuY29kaW5nT3ZlcnJpZGUgfHwgXCJ1dGYtOFwiO1xyXG4gIHRoaXMuc3RhdGVPdmVycmlkZSA9IHN0YXRlT3ZlcnJpZGU7XHJcbiAgdGhpcy51cmwgPSB1cmw7XHJcbiAgdGhpcy5mYWlsdXJlID0gZmFsc2U7XHJcbiAgdGhpcy5wYXJzZUVycm9yID0gZmFsc2U7XHJcblxyXG4gIGlmICghdGhpcy51cmwpIHtcclxuICAgIHRoaXMudXJsID0ge1xyXG4gICAgICBzY2hlbWU6IFwiXCIsXHJcbiAgICAgIHVzZXJuYW1lOiBcIlwiLFxyXG4gICAgICBwYXNzd29yZDogXCJcIixcclxuICAgICAgaG9zdDogbnVsbCxcclxuICAgICAgcG9ydDogbnVsbCxcclxuICAgICAgcGF0aDogW10sXHJcbiAgICAgIHF1ZXJ5OiBudWxsLFxyXG4gICAgICBmcmFnbWVudDogbnVsbCxcclxuXHJcbiAgICAgIGNhbm5vdEJlQUJhc2VVUkw6IGZhbHNlXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHJlcyA9IHRyaW1Db250cm9sQ2hhcnModGhpcy5pbnB1dCk7XHJcbiAgICBpZiAocmVzICE9PSB0aGlzLmlucHV0KSB7XHJcbiAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICB9XHJcbiAgICB0aGlzLmlucHV0ID0gcmVzO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgcmVzID0gdHJpbVRhYkFuZE5ld2xpbmUodGhpcy5pbnB1dCk7XHJcbiAgaWYgKHJlcyAhPT0gdGhpcy5pbnB1dCkge1xyXG4gICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICB9XHJcbiAgdGhpcy5pbnB1dCA9IHJlcztcclxuXHJcbiAgdGhpcy5zdGF0ZSA9IHN0YXRlT3ZlcnJpZGUgfHwgXCJzY2hlbWUgc3RhcnRcIjtcclxuXHJcbiAgdGhpcy5idWZmZXIgPSBcIlwiO1xyXG4gIHRoaXMuYXRGbGFnID0gZmFsc2U7XHJcbiAgdGhpcy5hcnJGbGFnID0gZmFsc2U7XHJcbiAgdGhpcy5wYXNzd29yZFRva2VuU2VlbkZsYWcgPSBmYWxzZTtcclxuXHJcbiAgdGhpcy5pbnB1dCA9IHB1bnljb2RlLnVjczIuZGVjb2RlKHRoaXMuaW5wdXQpO1xyXG5cclxuICBmb3IgKDsgdGhpcy5wb2ludGVyIDw9IHRoaXMuaW5wdXQubGVuZ3RoOyArK3RoaXMucG9pbnRlcikge1xyXG4gICAgY29uc3QgYyA9IHRoaXMuaW5wdXRbdGhpcy5wb2ludGVyXTtcclxuICAgIGNvbnN0IGNTdHIgPSBpc05hTihjKSA/IHVuZGVmaW5lZCA6IFN0cmluZy5mcm9tQ29kZVBvaW50KGMpO1xyXG5cclxuICAgIC8vIGV4ZWMgc3RhdGUgbWFjaGluZVxyXG4gICAgY29uc3QgcmV0ID0gdGhpc1tcInBhcnNlIFwiICsgdGhpcy5zdGF0ZV0oYywgY1N0cik7XHJcbiAgICBpZiAoIXJldCkge1xyXG4gICAgICBicmVhazsgLy8gdGVybWluYXRlIGFsZ29yaXRobVxyXG4gICAgfSBlbHNlIGlmIChyZXQgPT09IGZhaWx1cmUpIHtcclxuICAgICAgdGhpcy5mYWlsdXJlID0gdHJ1ZTtcclxuICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5VUkxTdGF0ZU1hY2hpbmUucHJvdG90eXBlW1wicGFyc2Ugc2NoZW1lIHN0YXJ0XCJdID0gZnVuY3Rpb24gcGFyc2VTY2hlbWVTdGFydChjLCBjU3RyKSB7XHJcbiAgaWYgKGlzQVNDSUlBbHBoYShjKSkge1xyXG4gICAgdGhpcy5idWZmZXIgKz0gY1N0ci50b0xvd2VyQ2FzZSgpO1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwic2NoZW1lXCI7XHJcbiAgfSBlbHNlIGlmICghdGhpcy5zdGF0ZU92ZXJyaWRlKSB7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJubyBzY2hlbWVcIjtcclxuICAgIC0tdGhpcy5wb2ludGVyO1xyXG4gIH0gZWxzZSB7XHJcbiAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBzY2hlbWVcIl0gPSBmdW5jdGlvbiBwYXJzZVNjaGVtZShjLCBjU3RyKSB7XHJcbiAgaWYgKGlzQVNDSUlBbHBoYW51bWVyaWMoYykgfHwgYyA9PT0gNDMgfHwgYyA9PT0gNDUgfHwgYyA9PT0gNDYpIHtcclxuICAgIHRoaXMuYnVmZmVyICs9IGNTdHIudG9Mb3dlckNhc2UoKTtcclxuICB9IGVsc2UgaWYgKGMgPT09IDU4KSB7XHJcbiAgICBpZiAodGhpcy5zdGF0ZU92ZXJyaWRlKSB7XHJcbiAgICAgIGlmIChpc1NwZWNpYWwodGhpcy51cmwpICYmICFpc1NwZWNpYWxTY2hlbWUodGhpcy5idWZmZXIpKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIWlzU3BlY2lhbCh0aGlzLnVybCkgJiYgaXNTcGVjaWFsU2NoZW1lKHRoaXMuYnVmZmVyKSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKChpbmNsdWRlc0NyZWRlbnRpYWxzKHRoaXMudXJsKSB8fCB0aGlzLnVybC5wb3J0ICE9PSBudWxsKSAmJiB0aGlzLmJ1ZmZlciA9PT0gXCJmaWxlXCIpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLnVybC5zY2hlbWUgPT09IFwiZmlsZVwiICYmICh0aGlzLnVybC5ob3N0ID09PSBcIlwiIHx8IHRoaXMudXJsLmhvc3QgPT09IG51bGwpKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLnVybC5zY2hlbWUgPSB0aGlzLmJ1ZmZlcjtcclxuICAgIHRoaXMuYnVmZmVyID0gXCJcIjtcclxuICAgIGlmICh0aGlzLnN0YXRlT3ZlcnJpZGUpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMudXJsLnNjaGVtZSA9PT0gXCJmaWxlXCIpIHtcclxuICAgICAgaWYgKHRoaXMuaW5wdXRbdGhpcy5wb2ludGVyICsgMV0gIT09IDQ3IHx8IHRoaXMuaW5wdXRbdGhpcy5wb2ludGVyICsgMl0gIT09IDQ3KSB7XHJcbiAgICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnN0YXRlID0gXCJmaWxlXCI7XHJcbiAgICB9IGVsc2UgaWYgKGlzU3BlY2lhbCh0aGlzLnVybCkgJiYgdGhpcy5iYXNlICE9PSBudWxsICYmIHRoaXMuYmFzZS5zY2hlbWUgPT09IHRoaXMudXJsLnNjaGVtZSkge1xyXG4gICAgICB0aGlzLnN0YXRlID0gXCJzcGVjaWFsIHJlbGF0aXZlIG9yIGF1dGhvcml0eVwiO1xyXG4gICAgfSBlbHNlIGlmIChpc1NwZWNpYWwodGhpcy51cmwpKSB7XHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcInNwZWNpYWwgYXV0aG9yaXR5IHNsYXNoZXNcIjtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pbnB1dFt0aGlzLnBvaW50ZXIgKyAxXSA9PT0gNDcpIHtcclxuICAgICAgdGhpcy5zdGF0ZSA9IFwicGF0aCBvciBhdXRob3JpdHlcIjtcclxuICAgICAgKyt0aGlzLnBvaW50ZXI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnVybC5jYW5ub3RCZUFCYXNlVVJMID0gdHJ1ZTtcclxuICAgICAgdGhpcy51cmwucGF0aC5wdXNoKFwiXCIpO1xyXG4gICAgICB0aGlzLnN0YXRlID0gXCJjYW5ub3QtYmUtYS1iYXNlLVVSTCBwYXRoXCI7XHJcbiAgICB9XHJcbiAgfSBlbHNlIGlmICghdGhpcy5zdGF0ZU92ZXJyaWRlKSB7XHJcbiAgICB0aGlzLmJ1ZmZlciA9IFwiXCI7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJubyBzY2hlbWVcIjtcclxuICAgIHRoaXMucG9pbnRlciA9IC0xO1xyXG4gIH0gZWxzZSB7XHJcbiAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBubyBzY2hlbWVcIl0gPSBmdW5jdGlvbiBwYXJzZU5vU2NoZW1lKGMpIHtcclxuICBpZiAodGhpcy5iYXNlID09PSBudWxsIHx8ICh0aGlzLmJhc2UuY2Fubm90QmVBQmFzZVVSTCAmJiBjICE9PSAzNSkpIHtcclxuICAgIHJldHVybiBmYWlsdXJlO1xyXG4gIH0gZWxzZSBpZiAodGhpcy5iYXNlLmNhbm5vdEJlQUJhc2VVUkwgJiYgYyA9PT0gMzUpIHtcclxuICAgIHRoaXMudXJsLnNjaGVtZSA9IHRoaXMuYmFzZS5zY2hlbWU7XHJcbiAgICB0aGlzLnVybC5wYXRoID0gdGhpcy5iYXNlLnBhdGguc2xpY2UoKTtcclxuICAgIHRoaXMudXJsLnF1ZXJ5ID0gdGhpcy5iYXNlLnF1ZXJ5O1xyXG4gICAgdGhpcy51cmwuZnJhZ21lbnQgPSBcIlwiO1xyXG4gICAgdGhpcy51cmwuY2Fubm90QmVBQmFzZVVSTCA9IHRydWU7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJmcmFnbWVudFwiO1xyXG4gIH0gZWxzZSBpZiAodGhpcy5iYXNlLnNjaGVtZSA9PT0gXCJmaWxlXCIpIHtcclxuICAgIHRoaXMuc3RhdGUgPSBcImZpbGVcIjtcclxuICAgIC0tdGhpcy5wb2ludGVyO1xyXG4gIH0gZWxzZSB7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJyZWxhdGl2ZVwiO1xyXG4gICAgLS10aGlzLnBvaW50ZXI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBzcGVjaWFsIHJlbGF0aXZlIG9yIGF1dGhvcml0eVwiXSA9IGZ1bmN0aW9uIHBhcnNlU3BlY2lhbFJlbGF0aXZlT3JBdXRob3JpdHkoYykge1xyXG4gIGlmIChjID09PSA0NyAmJiB0aGlzLmlucHV0W3RoaXMucG9pbnRlciArIDFdID09PSA0Nykge1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwic3BlY2lhbCBhdXRob3JpdHkgaWdub3JlIHNsYXNoZXNcIjtcclxuICAgICsrdGhpcy5wb2ludGVyO1xyXG4gIH0gZWxzZSB7XHJcbiAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwicmVsYXRpdmVcIjtcclxuICAgIC0tdGhpcy5wb2ludGVyO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5VUkxTdGF0ZU1hY2hpbmUucHJvdG90eXBlW1wicGFyc2UgcGF0aCBvciBhdXRob3JpdHlcIl0gPSBmdW5jdGlvbiBwYXJzZVBhdGhPckF1dGhvcml0eShjKSB7XHJcbiAgaWYgKGMgPT09IDQ3KSB7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJhdXRob3JpdHlcIjtcclxuICB9IGVsc2Uge1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwicGF0aFwiO1xyXG4gICAgLS10aGlzLnBvaW50ZXI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSByZWxhdGl2ZVwiXSA9IGZ1bmN0aW9uIHBhcnNlUmVsYXRpdmUoYykge1xyXG4gIHRoaXMudXJsLnNjaGVtZSA9IHRoaXMuYmFzZS5zY2hlbWU7XHJcbiAgaWYgKGlzTmFOKGMpKSB7XHJcbiAgICB0aGlzLnVybC51c2VybmFtZSA9IHRoaXMuYmFzZS51c2VybmFtZTtcclxuICAgIHRoaXMudXJsLnBhc3N3b3JkID0gdGhpcy5iYXNlLnBhc3N3b3JkO1xyXG4gICAgdGhpcy51cmwuaG9zdCA9IHRoaXMuYmFzZS5ob3N0O1xyXG4gICAgdGhpcy51cmwucG9ydCA9IHRoaXMuYmFzZS5wb3J0O1xyXG4gICAgdGhpcy51cmwucGF0aCA9IHRoaXMuYmFzZS5wYXRoLnNsaWNlKCk7XHJcbiAgICB0aGlzLnVybC5xdWVyeSA9IHRoaXMuYmFzZS5xdWVyeTtcclxuICB9IGVsc2UgaWYgKGMgPT09IDQ3KSB7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJyZWxhdGl2ZSBzbGFzaFwiO1xyXG4gIH0gZWxzZSBpZiAoYyA9PT0gNjMpIHtcclxuICAgIHRoaXMudXJsLnVzZXJuYW1lID0gdGhpcy5iYXNlLnVzZXJuYW1lO1xyXG4gICAgdGhpcy51cmwucGFzc3dvcmQgPSB0aGlzLmJhc2UucGFzc3dvcmQ7XHJcbiAgICB0aGlzLnVybC5ob3N0ID0gdGhpcy5iYXNlLmhvc3Q7XHJcbiAgICB0aGlzLnVybC5wb3J0ID0gdGhpcy5iYXNlLnBvcnQ7XHJcbiAgICB0aGlzLnVybC5wYXRoID0gdGhpcy5iYXNlLnBhdGguc2xpY2UoKTtcclxuICAgIHRoaXMudXJsLnF1ZXJ5ID0gXCJcIjtcclxuICAgIHRoaXMuc3RhdGUgPSBcInF1ZXJ5XCI7XHJcbiAgfSBlbHNlIGlmIChjID09PSAzNSkge1xyXG4gICAgdGhpcy51cmwudXNlcm5hbWUgPSB0aGlzLmJhc2UudXNlcm5hbWU7XHJcbiAgICB0aGlzLnVybC5wYXNzd29yZCA9IHRoaXMuYmFzZS5wYXNzd29yZDtcclxuICAgIHRoaXMudXJsLmhvc3QgPSB0aGlzLmJhc2UuaG9zdDtcclxuICAgIHRoaXMudXJsLnBvcnQgPSB0aGlzLmJhc2UucG9ydDtcclxuICAgIHRoaXMudXJsLnBhdGggPSB0aGlzLmJhc2UucGF0aC5zbGljZSgpO1xyXG4gICAgdGhpcy51cmwucXVlcnkgPSB0aGlzLmJhc2UucXVlcnk7XHJcbiAgICB0aGlzLnVybC5mcmFnbWVudCA9IFwiXCI7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJmcmFnbWVudFwiO1xyXG4gIH0gZWxzZSBpZiAoaXNTcGVjaWFsKHRoaXMudXJsKSAmJiBjID09PSA5Mikge1xyXG4gICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgIHRoaXMuc3RhdGUgPSBcInJlbGF0aXZlIHNsYXNoXCI7XHJcbiAgfSBlbHNlIHtcclxuICAgIHRoaXMudXJsLnVzZXJuYW1lID0gdGhpcy5iYXNlLnVzZXJuYW1lO1xyXG4gICAgdGhpcy51cmwucGFzc3dvcmQgPSB0aGlzLmJhc2UucGFzc3dvcmQ7XHJcbiAgICB0aGlzLnVybC5ob3N0ID0gdGhpcy5iYXNlLmhvc3Q7XHJcbiAgICB0aGlzLnVybC5wb3J0ID0gdGhpcy5iYXNlLnBvcnQ7XHJcbiAgICB0aGlzLnVybC5wYXRoID0gdGhpcy5iYXNlLnBhdGguc2xpY2UoMCwgdGhpcy5iYXNlLnBhdGgubGVuZ3RoIC0gMSk7XHJcblxyXG4gICAgdGhpcy5zdGF0ZSA9IFwicGF0aFwiO1xyXG4gICAgLS10aGlzLnBvaW50ZXI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSByZWxhdGl2ZSBzbGFzaFwiXSA9IGZ1bmN0aW9uIHBhcnNlUmVsYXRpdmVTbGFzaChjKSB7XHJcbiAgaWYgKGlzU3BlY2lhbCh0aGlzLnVybCkgJiYgKGMgPT09IDQ3IHx8IGMgPT09IDkyKSkge1xyXG4gICAgaWYgKGMgPT09IDkyKSB7XHJcbiAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICB9XHJcbiAgICB0aGlzLnN0YXRlID0gXCJzcGVjaWFsIGF1dGhvcml0eSBpZ25vcmUgc2xhc2hlc1wiO1xyXG4gIH0gZWxzZSBpZiAoYyA9PT0gNDcpIHtcclxuICAgIHRoaXMuc3RhdGUgPSBcImF1dGhvcml0eVwiO1xyXG4gIH0gZWxzZSB7XHJcbiAgICB0aGlzLnVybC51c2VybmFtZSA9IHRoaXMuYmFzZS51c2VybmFtZTtcclxuICAgIHRoaXMudXJsLnBhc3N3b3JkID0gdGhpcy5iYXNlLnBhc3N3b3JkO1xyXG4gICAgdGhpcy51cmwuaG9zdCA9IHRoaXMuYmFzZS5ob3N0O1xyXG4gICAgdGhpcy51cmwucG9ydCA9IHRoaXMuYmFzZS5wb3J0O1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwicGF0aFwiO1xyXG4gICAgLS10aGlzLnBvaW50ZXI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBzcGVjaWFsIGF1dGhvcml0eSBzbGFzaGVzXCJdID0gZnVuY3Rpb24gcGFyc2VTcGVjaWFsQXV0aG9yaXR5U2xhc2hlcyhjKSB7XHJcbiAgaWYgKGMgPT09IDQ3ICYmIHRoaXMuaW5wdXRbdGhpcy5wb2ludGVyICsgMV0gPT09IDQ3KSB7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJzcGVjaWFsIGF1dGhvcml0eSBpZ25vcmUgc2xhc2hlc1wiO1xyXG4gICAgKyt0aGlzLnBvaW50ZXI7XHJcbiAgfSBlbHNlIHtcclxuICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJzcGVjaWFsIGF1dGhvcml0eSBpZ25vcmUgc2xhc2hlc1wiO1xyXG4gICAgLS10aGlzLnBvaW50ZXI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBzcGVjaWFsIGF1dGhvcml0eSBpZ25vcmUgc2xhc2hlc1wiXSA9IGZ1bmN0aW9uIHBhcnNlU3BlY2lhbEF1dGhvcml0eUlnbm9yZVNsYXNoZXMoYykge1xyXG4gIGlmIChjICE9PSA0NyAmJiBjICE9PSA5Mikge1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwiYXV0aG9yaXR5XCI7XHJcbiAgICAtLXRoaXMucG9pbnRlcjtcclxuICB9IGVsc2Uge1xyXG4gICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIGF1dGhvcml0eVwiXSA9IGZ1bmN0aW9uIHBhcnNlQXV0aG9yaXR5KGMsIGNTdHIpIHtcclxuICBpZiAoYyA9PT0gNjQpIHtcclxuICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5hdEZsYWcpIHtcclxuICAgICAgdGhpcy5idWZmZXIgPSBcIiU0MFwiICsgdGhpcy5idWZmZXI7XHJcbiAgICB9XHJcbiAgICB0aGlzLmF0RmxhZyA9IHRydWU7XHJcblxyXG4gICAgLy8gY2FyZWZ1bCwgdGhpcyBpcyBiYXNlZCBvbiBidWZmZXIgYW5kIGhhcyBpdHMgb3duIHBvaW50ZXIgKHRoaXMucG9pbnRlciAhPSBwb2ludGVyKSBhbmQgaW5uZXIgY2hhcnNcclxuICAgIGNvbnN0IGxlbiA9IGNvdW50U3ltYm9scyh0aGlzLmJ1ZmZlcik7XHJcbiAgICBmb3IgKGxldCBwb2ludGVyID0gMDsgcG9pbnRlciA8IGxlbjsgKytwb2ludGVyKSB7XHJcbiAgICAgIGNvbnN0IGNvZGVQb2ludCA9IHRoaXMuYnVmZmVyLmNvZGVQb2ludEF0KHBvaW50ZXIpO1xyXG5cclxuICAgICAgaWYgKGNvZGVQb2ludCA9PT0gNTggJiYgIXRoaXMucGFzc3dvcmRUb2tlblNlZW5GbGFnKSB7XHJcbiAgICAgICAgdGhpcy5wYXNzd29yZFRva2VuU2VlbkZsYWcgPSB0cnVlO1xyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGVuY29kZWRDb2RlUG9pbnRzID0gcGVyY2VudEVuY29kZUNoYXIoY29kZVBvaW50LCBpc1VzZXJpbmZvUGVyY2VudEVuY29kZSk7XHJcbiAgICAgIGlmICh0aGlzLnBhc3N3b3JkVG9rZW5TZWVuRmxhZykge1xyXG4gICAgICAgIHRoaXMudXJsLnBhc3N3b3JkICs9IGVuY29kZWRDb2RlUG9pbnRzO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMudXJsLnVzZXJuYW1lICs9IGVuY29kZWRDb2RlUG9pbnRzO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmJ1ZmZlciA9IFwiXCI7XHJcbiAgfSBlbHNlIGlmIChpc05hTihjKSB8fCBjID09PSA0NyB8fCBjID09PSA2MyB8fCBjID09PSAzNSB8fFxyXG4gICAgICAgICAgICAgKGlzU3BlY2lhbCh0aGlzLnVybCkgJiYgYyA9PT0gOTIpKSB7XHJcbiAgICBpZiAodGhpcy5hdEZsYWcgJiYgdGhpcy5idWZmZXIgPT09IFwiXCIpIHtcclxuICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgICB9XHJcbiAgICB0aGlzLnBvaW50ZXIgLT0gY291bnRTeW1ib2xzKHRoaXMuYnVmZmVyKSArIDE7XHJcbiAgICB0aGlzLmJ1ZmZlciA9IFwiXCI7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJob3N0XCI7XHJcbiAgfSBlbHNlIHtcclxuICAgIHRoaXMuYnVmZmVyICs9IGNTdHI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBob3N0bmFtZVwiXSA9XHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBob3N0XCJdID0gZnVuY3Rpb24gcGFyc2VIb3N0TmFtZShjLCBjU3RyKSB7XHJcbiAgaWYgKHRoaXMuc3RhdGVPdmVycmlkZSAmJiB0aGlzLnVybC5zY2hlbWUgPT09IFwiZmlsZVwiKSB7XHJcbiAgICAtLXRoaXMucG9pbnRlcjtcclxuICAgIHRoaXMuc3RhdGUgPSBcImZpbGUgaG9zdFwiO1xyXG4gIH0gZWxzZSBpZiAoYyA9PT0gNTggJiYgIXRoaXMuYXJyRmxhZykge1xyXG4gICAgaWYgKHRoaXMuYnVmZmVyID09PSBcIlwiKSB7XHJcbiAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGhvc3QgPSBwYXJzZUhvc3QodGhpcy5idWZmZXIsIGlzU3BlY2lhbCh0aGlzLnVybCkpO1xyXG4gICAgaWYgKGhvc3QgPT09IGZhaWx1cmUpIHtcclxuICAgICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy51cmwuaG9zdCA9IGhvc3Q7XHJcbiAgICB0aGlzLmJ1ZmZlciA9IFwiXCI7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJwb3J0XCI7XHJcbiAgICBpZiAodGhpcy5zdGF0ZU92ZXJyaWRlID09PSBcImhvc3RuYW1lXCIpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH0gZWxzZSBpZiAoaXNOYU4oYykgfHwgYyA9PT0gNDcgfHwgYyA9PT0gNjMgfHwgYyA9PT0gMzUgfHxcclxuICAgICAgICAgICAgIChpc1NwZWNpYWwodGhpcy51cmwpICYmIGMgPT09IDkyKSkge1xyXG4gICAgLS10aGlzLnBvaW50ZXI7XHJcbiAgICBpZiAoaXNTcGVjaWFsKHRoaXMudXJsKSAmJiB0aGlzLmJ1ZmZlciA9PT0gXCJcIikge1xyXG4gICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0ZU92ZXJyaWRlICYmIHRoaXMuYnVmZmVyID09PSBcIlwiICYmXHJcbiAgICAgICAgICAgICAgIChpbmNsdWRlc0NyZWRlbnRpYWxzKHRoaXMudXJsKSB8fCB0aGlzLnVybC5wb3J0ICE9PSBudWxsKSkge1xyXG4gICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaG9zdCA9IHBhcnNlSG9zdCh0aGlzLmJ1ZmZlciwgaXNTcGVjaWFsKHRoaXMudXJsKSk7XHJcbiAgICBpZiAoaG9zdCA9PT0gZmFpbHVyZSkge1xyXG4gICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVybC5ob3N0ID0gaG9zdDtcclxuICAgIHRoaXMuYnVmZmVyID0gXCJcIjtcclxuICAgIHRoaXMuc3RhdGUgPSBcInBhdGggc3RhcnRcIjtcclxuICAgIGlmICh0aGlzLnN0YXRlT3ZlcnJpZGUpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH0gZWxzZSB7XHJcbiAgICBpZiAoYyA9PT0gOTEpIHtcclxuICAgICAgdGhpcy5hcnJGbGFnID0gdHJ1ZTtcclxuICAgIH0gZWxzZSBpZiAoYyA9PT0gOTMpIHtcclxuICAgICAgdGhpcy5hcnJGbGFnID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICB0aGlzLmJ1ZmZlciArPSBjU3RyO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5VUkxTdGF0ZU1hY2hpbmUucHJvdG90eXBlW1wicGFyc2UgcG9ydFwiXSA9IGZ1bmN0aW9uIHBhcnNlUG9ydChjLCBjU3RyKSB7XHJcbiAgaWYgKGlzQVNDSUlEaWdpdChjKSkge1xyXG4gICAgdGhpcy5idWZmZXIgKz0gY1N0cjtcclxuICB9IGVsc2UgaWYgKGlzTmFOKGMpIHx8IGMgPT09IDQ3IHx8IGMgPT09IDYzIHx8IGMgPT09IDM1IHx8XHJcbiAgICAgICAgICAgICAoaXNTcGVjaWFsKHRoaXMudXJsKSAmJiBjID09PSA5MikgfHxcclxuICAgICAgICAgICAgIHRoaXMuc3RhdGVPdmVycmlkZSkge1xyXG4gICAgaWYgKHRoaXMuYnVmZmVyICE9PSBcIlwiKSB7XHJcbiAgICAgIGNvbnN0IHBvcnQgPSBwYXJzZUludCh0aGlzLmJ1ZmZlcik7XHJcbiAgICAgIGlmIChwb3J0ID4gTWF0aC5wb3coMiwgMTYpIC0gMSkge1xyXG4gICAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy51cmwucG9ydCA9IHBvcnQgPT09IGRlZmF1bHRQb3J0KHRoaXMudXJsLnNjaGVtZSkgPyBudWxsIDogcG9ydDtcclxuICAgICAgdGhpcy5idWZmZXIgPSBcIlwiO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc3RhdGVPdmVycmlkZSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICB0aGlzLnN0YXRlID0gXCJwYXRoIHN0YXJ0XCI7XHJcbiAgICAtLXRoaXMucG9pbnRlcjtcclxuICB9IGVsc2Uge1xyXG4gICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgIHJldHVybiBmYWlsdXJlO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5jb25zdCBmaWxlT3RoZXJ3aXNlQ29kZVBvaW50cyA9IG5ldyBTZXQoWzQ3LCA5MiwgNjMsIDM1XSk7XHJcblxyXG5VUkxTdGF0ZU1hY2hpbmUucHJvdG90eXBlW1wicGFyc2UgZmlsZVwiXSA9IGZ1bmN0aW9uIHBhcnNlRmlsZShjKSB7XHJcbiAgdGhpcy51cmwuc2NoZW1lID0gXCJmaWxlXCI7XHJcblxyXG4gIGlmIChjID09PSA0NyB8fCBjID09PSA5Mikge1xyXG4gICAgaWYgKGMgPT09IDkyKSB7XHJcbiAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICB9XHJcbiAgICB0aGlzLnN0YXRlID0gXCJmaWxlIHNsYXNoXCI7XHJcbiAgfSBlbHNlIGlmICh0aGlzLmJhc2UgIT09IG51bGwgJiYgdGhpcy5iYXNlLnNjaGVtZSA9PT0gXCJmaWxlXCIpIHtcclxuICAgIGlmIChpc05hTihjKSkge1xyXG4gICAgICB0aGlzLnVybC5ob3N0ID0gdGhpcy5iYXNlLmhvc3Q7XHJcbiAgICAgIHRoaXMudXJsLnBhdGggPSB0aGlzLmJhc2UucGF0aC5zbGljZSgpO1xyXG4gICAgICB0aGlzLnVybC5xdWVyeSA9IHRoaXMuYmFzZS5xdWVyeTtcclxuICAgIH0gZWxzZSBpZiAoYyA9PT0gNjMpIHtcclxuICAgICAgdGhpcy51cmwuaG9zdCA9IHRoaXMuYmFzZS5ob3N0O1xyXG4gICAgICB0aGlzLnVybC5wYXRoID0gdGhpcy5iYXNlLnBhdGguc2xpY2UoKTtcclxuICAgICAgdGhpcy51cmwucXVlcnkgPSBcIlwiO1xyXG4gICAgICB0aGlzLnN0YXRlID0gXCJxdWVyeVwiO1xyXG4gICAgfSBlbHNlIGlmIChjID09PSAzNSkge1xyXG4gICAgICB0aGlzLnVybC5ob3N0ID0gdGhpcy5iYXNlLmhvc3Q7XHJcbiAgICAgIHRoaXMudXJsLnBhdGggPSB0aGlzLmJhc2UucGF0aC5zbGljZSgpO1xyXG4gICAgICB0aGlzLnVybC5xdWVyeSA9IHRoaXMuYmFzZS5xdWVyeTtcclxuICAgICAgdGhpcy51cmwuZnJhZ21lbnQgPSBcIlwiO1xyXG4gICAgICB0aGlzLnN0YXRlID0gXCJmcmFnbWVudFwiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuaW5wdXQubGVuZ3RoIC0gdGhpcy5wb2ludGVyIC0gMSA9PT0gMCB8fCAvLyByZW1haW5pbmcgY29uc2lzdHMgb2YgMCBjb2RlIHBvaW50c1xyXG4gICAgICAgICAgIWlzV2luZG93c0RyaXZlTGV0dGVyQ29kZVBvaW50cyhjLCB0aGlzLmlucHV0W3RoaXMucG9pbnRlciArIDFdKSB8fFxyXG4gICAgICAgICAgKHRoaXMuaW5wdXQubGVuZ3RoIC0gdGhpcy5wb2ludGVyIC0gMSA+PSAyICYmIC8vIHJlbWFpbmluZyBoYXMgYXQgbGVhc3QgMiBjb2RlIHBvaW50c1xyXG4gICAgICAgICAgICFmaWxlT3RoZXJ3aXNlQ29kZVBvaW50cy5oYXModGhpcy5pbnB1dFt0aGlzLnBvaW50ZXIgKyAyXSkpKSB7XHJcbiAgICAgICAgdGhpcy51cmwuaG9zdCA9IHRoaXMuYmFzZS5ob3N0O1xyXG4gICAgICAgIHRoaXMudXJsLnBhdGggPSB0aGlzLmJhc2UucGF0aC5zbGljZSgpO1xyXG4gICAgICAgIHNob3J0ZW5QYXRoKHRoaXMudXJsKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnN0YXRlID0gXCJwYXRoXCI7XHJcbiAgICAgIC0tdGhpcy5wb2ludGVyO1xyXG4gICAgfVxyXG4gIH0gZWxzZSB7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJwYXRoXCI7XHJcbiAgICAtLXRoaXMucG9pbnRlcjtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIGZpbGUgc2xhc2hcIl0gPSBmdW5jdGlvbiBwYXJzZUZpbGVTbGFzaChjKSB7XHJcbiAgaWYgKGMgPT09IDQ3IHx8IGMgPT09IDkyKSB7XHJcbiAgICBpZiAoYyA9PT0gOTIpIHtcclxuICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHRoaXMuc3RhdGUgPSBcImZpbGUgaG9zdFwiO1xyXG4gIH0gZWxzZSB7XHJcbiAgICBpZiAodGhpcy5iYXNlICE9PSBudWxsICYmIHRoaXMuYmFzZS5zY2hlbWUgPT09IFwiZmlsZVwiKSB7XHJcbiAgICAgIGlmIChpc05vcm1hbGl6ZWRXaW5kb3dzRHJpdmVMZXR0ZXJTdHJpbmcodGhpcy5iYXNlLnBhdGhbMF0pKSB7XHJcbiAgICAgICAgdGhpcy51cmwucGF0aC5wdXNoKHRoaXMuYmFzZS5wYXRoWzBdKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnVybC5ob3N0ID0gdGhpcy5iYXNlLmhvc3Q7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuc3RhdGUgPSBcInBhdGhcIjtcclxuICAgIC0tdGhpcy5wb2ludGVyO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5VUkxTdGF0ZU1hY2hpbmUucHJvdG90eXBlW1wicGFyc2UgZmlsZSBob3N0XCJdID0gZnVuY3Rpb24gcGFyc2VGaWxlSG9zdChjLCBjU3RyKSB7XHJcbiAgaWYgKGlzTmFOKGMpIHx8IGMgPT09IDQ3IHx8IGMgPT09IDkyIHx8IGMgPT09IDYzIHx8IGMgPT09IDM1KSB7XHJcbiAgICAtLXRoaXMucG9pbnRlcjtcclxuICAgIGlmICghdGhpcy5zdGF0ZU92ZXJyaWRlICYmIGlzV2luZG93c0RyaXZlTGV0dGVyU3RyaW5nKHRoaXMuYnVmZmVyKSkge1xyXG4gICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgICB0aGlzLnN0YXRlID0gXCJwYXRoXCI7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuYnVmZmVyID09PSBcIlwiKSB7XHJcbiAgICAgIHRoaXMudXJsLmhvc3QgPSBcIlwiO1xyXG4gICAgICBpZiAodGhpcy5zdGF0ZU92ZXJyaWRlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcInBhdGggc3RhcnRcIjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBob3N0ID0gcGFyc2VIb3N0KHRoaXMuYnVmZmVyLCBpc1NwZWNpYWwodGhpcy51cmwpKTtcclxuICAgICAgaWYgKGhvc3QgPT09IGZhaWx1cmUpIHtcclxuICAgICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoaG9zdCA9PT0gXCJsb2NhbGhvc3RcIikge1xyXG4gICAgICAgIGhvc3QgPSBcIlwiO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudXJsLmhvc3QgPSBob3N0O1xyXG5cclxuICAgICAgaWYgKHRoaXMuc3RhdGVPdmVycmlkZSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5idWZmZXIgPSBcIlwiO1xyXG4gICAgICB0aGlzLnN0YXRlID0gXCJwYXRoIHN0YXJ0XCI7XHJcbiAgICB9XHJcbiAgfSBlbHNlIHtcclxuICAgIHRoaXMuYnVmZmVyICs9IGNTdHI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBwYXRoIHN0YXJ0XCJdID0gZnVuY3Rpb24gcGFyc2VQYXRoU3RhcnQoYykge1xyXG4gIGlmIChpc1NwZWNpYWwodGhpcy51cmwpKSB7XHJcbiAgICBpZiAoYyA9PT0gOTIpIHtcclxuICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHRoaXMuc3RhdGUgPSBcInBhdGhcIjtcclxuXHJcbiAgICBpZiAoYyAhPT0gNDcgJiYgYyAhPT0gOTIpIHtcclxuICAgICAgLS10aGlzLnBvaW50ZXI7XHJcbiAgICB9XHJcbiAgfSBlbHNlIGlmICghdGhpcy5zdGF0ZU92ZXJyaWRlICYmIGMgPT09IDYzKSB7XHJcbiAgICB0aGlzLnVybC5xdWVyeSA9IFwiXCI7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJxdWVyeVwiO1xyXG4gIH0gZWxzZSBpZiAoIXRoaXMuc3RhdGVPdmVycmlkZSAmJiBjID09PSAzNSkge1xyXG4gICAgdGhpcy51cmwuZnJhZ21lbnQgPSBcIlwiO1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwiZnJhZ21lbnRcIjtcclxuICB9IGVsc2UgaWYgKGMgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwicGF0aFwiO1xyXG4gICAgaWYgKGMgIT09IDQ3KSB7XHJcbiAgICAgIC0tdGhpcy5wb2ludGVyO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5VUkxTdGF0ZU1hY2hpbmUucHJvdG90eXBlW1wicGFyc2UgcGF0aFwiXSA9IGZ1bmN0aW9uIHBhcnNlUGF0aChjKSB7XHJcbiAgaWYgKGlzTmFOKGMpIHx8IGMgPT09IDQ3IHx8IChpc1NwZWNpYWwodGhpcy51cmwpICYmIGMgPT09IDkyKSB8fFxyXG4gICAgICAoIXRoaXMuc3RhdGVPdmVycmlkZSAmJiAoYyA9PT0gNjMgfHwgYyA9PT0gMzUpKSkge1xyXG4gICAgaWYgKGlzU3BlY2lhbCh0aGlzLnVybCkgJiYgYyA9PT0gOTIpIHtcclxuICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaXNEb3VibGVEb3QodGhpcy5idWZmZXIpKSB7XHJcbiAgICAgIHNob3J0ZW5QYXRoKHRoaXMudXJsKTtcclxuICAgICAgaWYgKGMgIT09IDQ3ICYmICEoaXNTcGVjaWFsKHRoaXMudXJsKSAmJiBjID09PSA5MikpIHtcclxuICAgICAgICB0aGlzLnVybC5wYXRoLnB1c2goXCJcIik7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoaXNTaW5nbGVEb3QodGhpcy5idWZmZXIpICYmIGMgIT09IDQ3ICYmXHJcbiAgICAgICAgICAgICAgICEoaXNTcGVjaWFsKHRoaXMudXJsKSAmJiBjID09PSA5MikpIHtcclxuICAgICAgdGhpcy51cmwucGF0aC5wdXNoKFwiXCIpO1xyXG4gICAgfSBlbHNlIGlmICghaXNTaW5nbGVEb3QodGhpcy5idWZmZXIpKSB7XHJcbiAgICAgIGlmICh0aGlzLnVybC5zY2hlbWUgPT09IFwiZmlsZVwiICYmIHRoaXMudXJsLnBhdGgubGVuZ3RoID09PSAwICYmIGlzV2luZG93c0RyaXZlTGV0dGVyU3RyaW5nKHRoaXMuYnVmZmVyKSkge1xyXG4gICAgICAgIGlmICh0aGlzLnVybC5ob3N0ICE9PSBcIlwiICYmIHRoaXMudXJsLmhvc3QgIT09IG51bGwpIHtcclxuICAgICAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnVybC5ob3N0ID0gXCJcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5idWZmZXIgPSB0aGlzLmJ1ZmZlclswXSArIFwiOlwiO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudXJsLnBhdGgucHVzaCh0aGlzLmJ1ZmZlcik7XHJcbiAgICB9XHJcbiAgICB0aGlzLmJ1ZmZlciA9IFwiXCI7XHJcbiAgICBpZiAodGhpcy51cmwuc2NoZW1lID09PSBcImZpbGVcIiAmJiAoYyA9PT0gdW5kZWZpbmVkIHx8IGMgPT09IDYzIHx8IGMgPT09IDM1KSkge1xyXG4gICAgICB3aGlsZSAodGhpcy51cmwucGF0aC5sZW5ndGggPiAxICYmIHRoaXMudXJsLnBhdGhbMF0gPT09IFwiXCIpIHtcclxuICAgICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudXJsLnBhdGguc2hpZnQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGMgPT09IDYzKSB7XHJcbiAgICAgIHRoaXMudXJsLnF1ZXJ5ID0gXCJcIjtcclxuICAgICAgdGhpcy5zdGF0ZSA9IFwicXVlcnlcIjtcclxuICAgIH1cclxuICAgIGlmIChjID09PSAzNSkge1xyXG4gICAgICB0aGlzLnVybC5mcmFnbWVudCA9IFwiXCI7XHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcImZyYWdtZW50XCI7XHJcbiAgICB9XHJcbiAgfSBlbHNlIHtcclxuICAgIC8vIFRPRE86IElmIGMgaXMgbm90IGEgVVJMIGNvZGUgcG9pbnQgYW5kIG5vdCBcIiVcIiwgcGFyc2UgZXJyb3IuXHJcblxyXG4gICAgaWYgKGMgPT09IDM3ICYmXHJcbiAgICAgICghaXNBU0NJSUhleCh0aGlzLmlucHV0W3RoaXMucG9pbnRlciArIDFdKSB8fFxyXG4gICAgICAgICFpc0FTQ0lJSGV4KHRoaXMuaW5wdXRbdGhpcy5wb2ludGVyICsgMl0pKSkge1xyXG4gICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYnVmZmVyICs9IHBlcmNlbnRFbmNvZGVDaGFyKGMsIGlzUGF0aFBlcmNlbnRFbmNvZGUpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5VUkxTdGF0ZU1hY2hpbmUucHJvdG90eXBlW1wicGFyc2UgY2Fubm90LWJlLWEtYmFzZS1VUkwgcGF0aFwiXSA9IGZ1bmN0aW9uIHBhcnNlQ2Fubm90QmVBQmFzZVVSTFBhdGgoYykge1xyXG4gIGlmIChjID09PSA2Mykge1xyXG4gICAgdGhpcy51cmwucXVlcnkgPSBcIlwiO1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwicXVlcnlcIjtcclxuICB9IGVsc2UgaWYgKGMgPT09IDM1KSB7XHJcbiAgICB0aGlzLnVybC5mcmFnbWVudCA9IFwiXCI7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJmcmFnbWVudFwiO1xyXG4gIH0gZWxzZSB7XHJcbiAgICAvLyBUT0RPOiBBZGQ6IG5vdCBhIFVSTCBjb2RlIHBvaW50XHJcbiAgICBpZiAoIWlzTmFOKGMpICYmIGMgIT09IDM3KSB7XHJcbiAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGMgPT09IDM3ICYmXHJcbiAgICAgICAgKCFpc0FTQ0lJSGV4KHRoaXMuaW5wdXRbdGhpcy5wb2ludGVyICsgMV0pIHx8XHJcbiAgICAgICAgICFpc0FTQ0lJSGV4KHRoaXMuaW5wdXRbdGhpcy5wb2ludGVyICsgMl0pKSkge1xyXG4gICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghaXNOYU4oYykpIHtcclxuICAgICAgdGhpcy51cmwucGF0aFswXSA9IHRoaXMudXJsLnBhdGhbMF0gKyBwZXJjZW50RW5jb2RlQ2hhcihjLCBpc0MwQ29udHJvbFBlcmNlbnRFbmNvZGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5VUkxTdGF0ZU1hY2hpbmUucHJvdG90eXBlW1wicGFyc2UgcXVlcnlcIl0gPSBmdW5jdGlvbiBwYXJzZVF1ZXJ5KGMsIGNTdHIpIHtcclxuICBpZiAoaXNOYU4oYykgfHwgKCF0aGlzLnN0YXRlT3ZlcnJpZGUgJiYgYyA9PT0gMzUpKSB7XHJcbiAgICBpZiAoIWlzU3BlY2lhbCh0aGlzLnVybCkgfHwgdGhpcy51cmwuc2NoZW1lID09PSBcIndzXCIgfHwgdGhpcy51cmwuc2NoZW1lID09PSBcIndzc1wiKSB7XHJcbiAgICAgIHRoaXMuZW5jb2RpbmdPdmVycmlkZSA9IFwidXRmLThcIjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgQnVmZmVyKHRoaXMuYnVmZmVyKTsgLy8gVE9ETzogVXNlIGVuY29kaW5nIG92ZXJyaWRlIGluc3RlYWRcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnVmZmVyLmxlbmd0aDsgKytpKSB7XHJcbiAgICAgIGlmIChidWZmZXJbaV0gPCAweDIxIHx8IGJ1ZmZlcltpXSA+IDB4N0UgfHwgYnVmZmVyW2ldID09PSAweDIyIHx8IGJ1ZmZlcltpXSA9PT0gMHgyMyB8fFxyXG4gICAgICAgICAgYnVmZmVyW2ldID09PSAweDNDIHx8IGJ1ZmZlcltpXSA9PT0gMHgzRSkge1xyXG4gICAgICAgIHRoaXMudXJsLnF1ZXJ5ICs9IHBlcmNlbnRFbmNvZGUoYnVmZmVyW2ldKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnVybC5xdWVyeSArPSBTdHJpbmcuZnJvbUNvZGVQb2ludChidWZmZXJbaV0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5idWZmZXIgPSBcIlwiO1xyXG4gICAgaWYgKGMgPT09IDM1KSB7XHJcbiAgICAgIHRoaXMudXJsLmZyYWdtZW50ID0gXCJcIjtcclxuICAgICAgdGhpcy5zdGF0ZSA9IFwiZnJhZ21lbnRcIjtcclxuICAgIH1cclxuICB9IGVsc2Uge1xyXG4gICAgLy8gVE9ETzogSWYgYyBpcyBub3QgYSBVUkwgY29kZSBwb2ludCBhbmQgbm90IFwiJVwiLCBwYXJzZSBlcnJvci5cclxuICAgIGlmIChjID09PSAzNyAmJlxyXG4gICAgICAoIWlzQVNDSUlIZXgodGhpcy5pbnB1dFt0aGlzLnBvaW50ZXIgKyAxXSkgfHxcclxuICAgICAgICAhaXNBU0NJSUhleCh0aGlzLmlucHV0W3RoaXMucG9pbnRlciArIDJdKSkpIHtcclxuICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmJ1ZmZlciArPSBjU3RyO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5VUkxTdGF0ZU1hY2hpbmUucHJvdG90eXBlW1wicGFyc2UgZnJhZ21lbnRcIl0gPSBmdW5jdGlvbiBwYXJzZUZyYWdtZW50KGMpIHtcclxuICBpZiAoaXNOYU4oYykpIHsgLy8gZG8gbm90aGluZ1xyXG4gIH0gZWxzZSBpZiAoYyA9PT0gMHgwKSB7XHJcbiAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gIH0gZWxzZSB7XHJcbiAgICAvLyBUT0RPOiBJZiBjIGlzIG5vdCBhIFVSTCBjb2RlIHBvaW50IGFuZCBub3QgXCIlXCIsIHBhcnNlIGVycm9yLlxyXG4gICAgaWYgKGMgPT09IDM3ICYmXHJcbiAgICAgICghaXNBU0NJSUhleCh0aGlzLmlucHV0W3RoaXMucG9pbnRlciArIDFdKSB8fFxyXG4gICAgICAgICFpc0FTQ0lJSGV4KHRoaXMuaW5wdXRbdGhpcy5wb2ludGVyICsgMl0pKSkge1xyXG4gICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudXJsLmZyYWdtZW50ICs9IHBlcmNlbnRFbmNvZGVDaGFyKGMsIGlzQzBDb250cm9sUGVyY2VudEVuY29kZSk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcbmZ1bmN0aW9uIHNlcmlhbGl6ZVVSTCh1cmwsIGV4Y2x1ZGVGcmFnbWVudCkge1xyXG4gIGxldCBvdXRwdXQgPSB1cmwuc2NoZW1lICsgXCI6XCI7XHJcbiAgaWYgKHVybC5ob3N0ICE9PSBudWxsKSB7XHJcbiAgICBvdXRwdXQgKz0gXCIvL1wiO1xyXG5cclxuICAgIGlmICh1cmwudXNlcm5hbWUgIT09IFwiXCIgfHwgdXJsLnBhc3N3b3JkICE9PSBcIlwiKSB7XHJcbiAgICAgIG91dHB1dCArPSB1cmwudXNlcm5hbWU7XHJcbiAgICAgIGlmICh1cmwucGFzc3dvcmQgIT09IFwiXCIpIHtcclxuICAgICAgICBvdXRwdXQgKz0gXCI6XCIgKyB1cmwucGFzc3dvcmQ7XHJcbiAgICAgIH1cclxuICAgICAgb3V0cHV0ICs9IFwiQFwiO1xyXG4gICAgfVxyXG5cclxuICAgIG91dHB1dCArPSBzZXJpYWxpemVIb3N0KHVybC5ob3N0KTtcclxuXHJcbiAgICBpZiAodXJsLnBvcnQgIT09IG51bGwpIHtcclxuICAgICAgb3V0cHV0ICs9IFwiOlwiICsgdXJsLnBvcnQ7XHJcbiAgICB9XHJcbiAgfSBlbHNlIGlmICh1cmwuaG9zdCA9PT0gbnVsbCAmJiB1cmwuc2NoZW1lID09PSBcImZpbGVcIikge1xyXG4gICAgb3V0cHV0ICs9IFwiLy9cIjtcclxuICB9XHJcblxyXG4gIGlmICh1cmwuY2Fubm90QmVBQmFzZVVSTCkge1xyXG4gICAgb3V0cHV0ICs9IHVybC5wYXRoWzBdO1xyXG4gIH0gZWxzZSB7XHJcbiAgICBmb3IgKGNvbnN0IHN0cmluZyBvZiB1cmwucGF0aCkge1xyXG4gICAgICBvdXRwdXQgKz0gXCIvXCIgKyBzdHJpbmc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpZiAodXJsLnF1ZXJ5ICE9PSBudWxsKSB7XHJcbiAgICBvdXRwdXQgKz0gXCI/XCIgKyB1cmwucXVlcnk7XHJcbiAgfVxyXG5cclxuICBpZiAoIWV4Y2x1ZGVGcmFnbWVudCAmJiB1cmwuZnJhZ21lbnQgIT09IG51bGwpIHtcclxuICAgIG91dHB1dCArPSBcIiNcIiArIHVybC5mcmFnbWVudDtcclxuICB9XHJcblxyXG4gIHJldHVybiBvdXRwdXQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNlcmlhbGl6ZU9yaWdpbih0dXBsZSkge1xyXG4gIGxldCByZXN1bHQgPSB0dXBsZS5zY2hlbWUgKyBcIjovL1wiO1xyXG4gIHJlc3VsdCArPSBzZXJpYWxpemVIb3N0KHR1cGxlLmhvc3QpO1xyXG5cclxuICBpZiAodHVwbGUucG9ydCAhPT0gbnVsbCkge1xyXG4gICAgcmVzdWx0ICs9IFwiOlwiICsgdHVwbGUucG9ydDtcclxuICB9XHJcblxyXG4gIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzLnNlcmlhbGl6ZVVSTCA9IHNlcmlhbGl6ZVVSTDtcclxuXHJcbm1vZHVsZS5leHBvcnRzLnNlcmlhbGl6ZVVSTE9yaWdpbiA9IGZ1bmN0aW9uICh1cmwpIHtcclxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtdXJsLW9yaWdpblxyXG4gIHN3aXRjaCAodXJsLnNjaGVtZSkge1xyXG4gICAgY2FzZSBcImJsb2JcIjpcclxuICAgICAgdHJ5IHtcclxuICAgICAgICByZXR1cm4gbW9kdWxlLmV4cG9ydHMuc2VyaWFsaXplVVJMT3JpZ2luKG1vZHVsZS5leHBvcnRzLnBhcnNlVVJMKHVybC5wYXRoWzBdKSk7XHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAvLyBzZXJpYWxpemluZyBhbiBvcGFxdWUgb3JpZ2luIHJldHVybnMgXCJudWxsXCJcclxuICAgICAgICByZXR1cm4gXCJudWxsXCI7XHJcbiAgICAgIH1cclxuICAgIGNhc2UgXCJmdHBcIjpcclxuICAgIGNhc2UgXCJnb3BoZXJcIjpcclxuICAgIGNhc2UgXCJodHRwXCI6XHJcbiAgICBjYXNlIFwiaHR0cHNcIjpcclxuICAgIGNhc2UgXCJ3c1wiOlxyXG4gICAgY2FzZSBcIndzc1wiOlxyXG4gICAgICByZXR1cm4gc2VyaWFsaXplT3JpZ2luKHtcclxuICAgICAgICBzY2hlbWU6IHVybC5zY2hlbWUsXHJcbiAgICAgICAgaG9zdDogdXJsLmhvc3QsXHJcbiAgICAgICAgcG9ydDogdXJsLnBvcnRcclxuICAgICAgfSk7XHJcbiAgICBjYXNlIFwiZmlsZVwiOlxyXG4gICAgICAvLyBzcGVjIHNheXMgXCJleGVyY2lzZSB0byB0aGUgcmVhZGVyXCIsIGNocm9tZSBzYXlzIFwiZmlsZTovL1wiXHJcbiAgICAgIHJldHVybiBcImZpbGU6Ly9cIjtcclxuICAgIGRlZmF1bHQ6XHJcbiAgICAgIC8vIHNlcmlhbGl6aW5nIGFuIG9wYXF1ZSBvcmlnaW4gcmV0dXJucyBcIm51bGxcIlxyXG4gICAgICByZXR1cm4gXCJudWxsXCI7XHJcbiAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMuYmFzaWNVUkxQYXJzZSA9IGZ1bmN0aW9uIChpbnB1dCwgb3B0aW9ucykge1xyXG4gIGlmIChvcHRpb25zID09PSB1bmRlZmluZWQpIHtcclxuICAgIG9wdGlvbnMgPSB7fTtcclxuICB9XHJcblxyXG4gIGNvbnN0IHVzbSA9IG5ldyBVUkxTdGF0ZU1hY2hpbmUoaW5wdXQsIG9wdGlvbnMuYmFzZVVSTCwgb3B0aW9ucy5lbmNvZGluZ092ZXJyaWRlLCBvcHRpb25zLnVybCwgb3B0aW9ucy5zdGF0ZU92ZXJyaWRlKTtcclxuICBpZiAodXNtLmZhaWx1cmUpIHtcclxuICAgIHJldHVybiBcImZhaWx1cmVcIjtcclxuICB9XHJcblxyXG4gIHJldHVybiB1c20udXJsO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMuc2V0VGhlVXNlcm5hbWUgPSBmdW5jdGlvbiAodXJsLCB1c2VybmFtZSkge1xyXG4gIHVybC51c2VybmFtZSA9IFwiXCI7XHJcbiAgY29uc3QgZGVjb2RlZCA9IHB1bnljb2RlLnVjczIuZGVjb2RlKHVzZXJuYW1lKTtcclxuICBmb3IgKGxldCBpID0gMDsgaSA8IGRlY29kZWQubGVuZ3RoOyArK2kpIHtcclxuICAgIHVybC51c2VybmFtZSArPSBwZXJjZW50RW5jb2RlQ2hhcihkZWNvZGVkW2ldLCBpc1VzZXJpbmZvUGVyY2VudEVuY29kZSk7XHJcbiAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMuc2V0VGhlUGFzc3dvcmQgPSBmdW5jdGlvbiAodXJsLCBwYXNzd29yZCkge1xyXG4gIHVybC5wYXNzd29yZCA9IFwiXCI7XHJcbiAgY29uc3QgZGVjb2RlZCA9IHB1bnljb2RlLnVjczIuZGVjb2RlKHBhc3N3b3JkKTtcclxuICBmb3IgKGxldCBpID0gMDsgaSA8IGRlY29kZWQubGVuZ3RoOyArK2kpIHtcclxuICAgIHVybC5wYXNzd29yZCArPSBwZXJjZW50RW5jb2RlQ2hhcihkZWNvZGVkW2ldLCBpc1VzZXJpbmZvUGVyY2VudEVuY29kZSk7XHJcbiAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMuc2VyaWFsaXplSG9zdCA9IHNlcmlhbGl6ZUhvc3Q7XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5jYW5ub3RIYXZlQVVzZXJuYW1lUGFzc3dvcmRQb3J0ID0gY2Fubm90SGF2ZUFVc2VybmFtZVBhc3N3b3JkUG9ydDtcclxuXHJcbm1vZHVsZS5leHBvcnRzLnNlcmlhbGl6ZUludGVnZXIgPSBmdW5jdGlvbiAoaW50ZWdlcikge1xyXG4gIHJldHVybiBTdHJpbmcoaW50ZWdlcik7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5wYXJzZVVSTCA9IGZ1bmN0aW9uIChpbnB1dCwgb3B0aW9ucykge1xyXG4gIGlmIChvcHRpb25zID09PSB1bmRlZmluZWQpIHtcclxuICAgIG9wdGlvbnMgPSB7fTtcclxuICB9XHJcblxyXG4gIC8vIFdlIGRvbid0IGhhbmRsZSBibG9icywgc28gdGhpcyBqdXN0IGRlbGVnYXRlczpcclxuICByZXR1cm4gbW9kdWxlLmV4cG9ydHMuYmFzaWNVUkxQYXJzZShpbnB1dCwgeyBiYXNlVVJMOiBvcHRpb25zLmJhc2VVUkwsIGVuY29kaW5nT3ZlcnJpZGU6IG9wdGlvbnMuZW5jb2RpbmdPdmVycmlkZSB9KTtcclxufTtcclxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbmNvbnN0IHVzbSA9IHJlcXVpcmUoXCIuL3VybC1zdGF0ZS1tYWNoaW5lXCIpO1xuXG5leHBvcnRzLmltcGxlbWVudGF0aW9uID0gY2xhc3MgVVJMSW1wbCB7XG4gIGNvbnN0cnVjdG9yKGNvbnN0cnVjdG9yQXJncykge1xuICAgIGNvbnN0IHVybCA9IGNvbnN0cnVjdG9yQXJnc1swXTtcbiAgICBjb25zdCBiYXNlID0gY29uc3RydWN0b3JBcmdzWzFdO1xuXG4gICAgbGV0IHBhcnNlZEJhc2UgPSBudWxsO1xuICAgIGlmIChiYXNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHBhcnNlZEJhc2UgPSB1c20uYmFzaWNVUkxQYXJzZShiYXNlKTtcbiAgICAgIGlmIChwYXJzZWRCYXNlID09PSBcImZhaWx1cmVcIikge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBiYXNlIFVSTFwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBwYXJzZWRVUkwgPSB1c20uYmFzaWNVUkxQYXJzZSh1cmwsIHsgYmFzZVVSTDogcGFyc2VkQmFzZSB9KTtcbiAgICBpZiAocGFyc2VkVVJMID09PSBcImZhaWx1cmVcIikge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgVVJMXCIpO1xuICAgIH1cblxuICAgIHRoaXMuX3VybCA9IHBhcnNlZFVSTDtcblxuICAgIC8vIFRPRE86IHF1ZXJ5IHN0dWZmXG4gIH1cblxuICBnZXQgaHJlZigpIHtcbiAgICByZXR1cm4gdXNtLnNlcmlhbGl6ZVVSTCh0aGlzLl91cmwpO1xuICB9XG5cbiAgc2V0IGhyZWYodikge1xuICAgIGNvbnN0IHBhcnNlZFVSTCA9IHVzbS5iYXNpY1VSTFBhcnNlKHYpO1xuICAgIGlmIChwYXJzZWRVUkwgPT09IFwiZmFpbHVyZVwiKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBVUkxcIik7XG4gICAgfVxuXG4gICAgdGhpcy5fdXJsID0gcGFyc2VkVVJMO1xuICB9XG5cbiAgZ2V0IG9yaWdpbigpIHtcbiAgICByZXR1cm4gdXNtLnNlcmlhbGl6ZVVSTE9yaWdpbih0aGlzLl91cmwpO1xuICB9XG5cbiAgZ2V0IHByb3RvY29sKCkge1xuICAgIHJldHVybiB0aGlzLl91cmwuc2NoZW1lICsgXCI6XCI7XG4gIH1cblxuICBzZXQgcHJvdG9jb2wodikge1xuICAgIHVzbS5iYXNpY1VSTFBhcnNlKHYgKyBcIjpcIiwgeyB1cmw6IHRoaXMuX3VybCwgc3RhdGVPdmVycmlkZTogXCJzY2hlbWUgc3RhcnRcIiB9KTtcbiAgfVxuXG4gIGdldCB1c2VybmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdXJsLnVzZXJuYW1lO1xuICB9XG5cbiAgc2V0IHVzZXJuYW1lKHYpIHtcbiAgICBpZiAodXNtLmNhbm5vdEhhdmVBVXNlcm5hbWVQYXNzd29yZFBvcnQodGhpcy5fdXJsKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHVzbS5zZXRUaGVVc2VybmFtZSh0aGlzLl91cmwsIHYpO1xuICB9XG5cbiAgZ2V0IHBhc3N3b3JkKCkge1xuICAgIHJldHVybiB0aGlzLl91cmwucGFzc3dvcmQ7XG4gIH1cblxuICBzZXQgcGFzc3dvcmQodikge1xuICAgIGlmICh1c20uY2Fubm90SGF2ZUFVc2VybmFtZVBhc3N3b3JkUG9ydCh0aGlzLl91cmwpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdXNtLnNldFRoZVBhc3N3b3JkKHRoaXMuX3VybCwgdik7XG4gIH1cblxuICBnZXQgaG9zdCgpIHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLl91cmw7XG5cbiAgICBpZiAodXJsLmhvc3QgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIGlmICh1cmwucG9ydCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHVzbS5zZXJpYWxpemVIb3N0KHVybC5ob3N0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXNtLnNlcmlhbGl6ZUhvc3QodXJsLmhvc3QpICsgXCI6XCIgKyB1c20uc2VyaWFsaXplSW50ZWdlcih1cmwucG9ydCk7XG4gIH1cblxuICBzZXQgaG9zdCh2KSB7XG4gICAgaWYgKHRoaXMuX3VybC5jYW5ub3RCZUFCYXNlVVJMKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdXNtLmJhc2ljVVJMUGFyc2UodiwgeyB1cmw6IHRoaXMuX3VybCwgc3RhdGVPdmVycmlkZTogXCJob3N0XCIgfSk7XG4gIH1cblxuICBnZXQgaG9zdG5hbWUoKSB7XG4gICAgaWYgKHRoaXMuX3VybC5ob3N0ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICByZXR1cm4gdXNtLnNlcmlhbGl6ZUhvc3QodGhpcy5fdXJsLmhvc3QpO1xuICB9XG5cbiAgc2V0IGhvc3RuYW1lKHYpIHtcbiAgICBpZiAodGhpcy5fdXJsLmNhbm5vdEJlQUJhc2VVUkwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB1c20uYmFzaWNVUkxQYXJzZSh2LCB7IHVybDogdGhpcy5fdXJsLCBzdGF0ZU92ZXJyaWRlOiBcImhvc3RuYW1lXCIgfSk7XG4gIH1cblxuICBnZXQgcG9ydCgpIHtcbiAgICBpZiAodGhpcy5fdXJsLnBvcnQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHJldHVybiB1c20uc2VyaWFsaXplSW50ZWdlcih0aGlzLl91cmwucG9ydCk7XG4gIH1cblxuICBzZXQgcG9ydCh2KSB7XG4gICAgaWYgKHVzbS5jYW5ub3RIYXZlQVVzZXJuYW1lUGFzc3dvcmRQb3J0KHRoaXMuX3VybCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodiA9PT0gXCJcIikge1xuICAgICAgdGhpcy5fdXJsLnBvcnQgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICB1c20uYmFzaWNVUkxQYXJzZSh2LCB7IHVybDogdGhpcy5fdXJsLCBzdGF0ZU92ZXJyaWRlOiBcInBvcnRcIiB9KTtcbiAgICB9XG4gIH1cblxuICBnZXQgcGF0aG5hbWUoKSB7XG4gICAgaWYgKHRoaXMuX3VybC5jYW5ub3RCZUFCYXNlVVJMKSB7XG4gICAgICByZXR1cm4gdGhpcy5fdXJsLnBhdGhbMF07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3VybC5wYXRoLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIFwiL1wiICsgdGhpcy5fdXJsLnBhdGguam9pbihcIi9cIik7XG4gIH1cblxuICBzZXQgcGF0aG5hbWUodikge1xuICAgIGlmICh0aGlzLl91cmwuY2Fubm90QmVBQmFzZVVSTCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3VybC5wYXRoID0gW107XG4gICAgdXNtLmJhc2ljVVJMUGFyc2UodiwgeyB1cmw6IHRoaXMuX3VybCwgc3RhdGVPdmVycmlkZTogXCJwYXRoIHN0YXJ0XCIgfSk7XG4gIH1cblxuICBnZXQgc2VhcmNoKCkge1xuICAgIGlmICh0aGlzLl91cmwucXVlcnkgPT09IG51bGwgfHwgdGhpcy5fdXJsLnF1ZXJ5ID09PSBcIlwiKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICByZXR1cm4gXCI/XCIgKyB0aGlzLl91cmwucXVlcnk7XG4gIH1cblxuICBzZXQgc2VhcmNoKHYpIHtcbiAgICAvLyBUT0RPOiBxdWVyeSBzdHVmZlxuXG4gICAgY29uc3QgdXJsID0gdGhpcy5fdXJsO1xuXG4gICAgaWYgKHYgPT09IFwiXCIpIHtcbiAgICAgIHVybC5xdWVyeSA9IG51bGw7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaW5wdXQgPSB2WzBdID09PSBcIj9cIiA/IHYuc3Vic3RyaW5nKDEpIDogdjtcbiAgICB1cmwucXVlcnkgPSBcIlwiO1xuICAgIHVzbS5iYXNpY1VSTFBhcnNlKGlucHV0LCB7IHVybCwgc3RhdGVPdmVycmlkZTogXCJxdWVyeVwiIH0pO1xuICB9XG5cbiAgZ2V0IGhhc2goKSB7XG4gICAgaWYgKHRoaXMuX3VybC5mcmFnbWVudCA9PT0gbnVsbCB8fCB0aGlzLl91cmwuZnJhZ21lbnQgPT09IFwiXCIpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHJldHVybiBcIiNcIiArIHRoaXMuX3VybC5mcmFnbWVudDtcbiAgfVxuXG4gIHNldCBoYXNoKHYpIHtcbiAgICBpZiAodiA9PT0gXCJcIikge1xuICAgICAgdGhpcy5fdXJsLmZyYWdtZW50ID0gbnVsbDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpbnB1dCA9IHZbMF0gPT09IFwiI1wiID8gdi5zdWJzdHJpbmcoMSkgOiB2O1xuICAgIHRoaXMuX3VybC5mcmFnbWVudCA9IFwiXCI7XG4gICAgdXNtLmJhc2ljVVJMUGFyc2UoaW5wdXQsIHsgdXJsOiB0aGlzLl91cmwsIHN0YXRlT3ZlcnJpZGU6IFwiZnJhZ21lbnRcIiB9KTtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4gdGhpcy5ocmVmO1xuICB9XG59O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi8vVVJMLWltcGwuanNcIik7XG5cbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuXG5mdW5jdGlvbiBVUkwodXJsKSB7XG4gIGlmICghdGhpcyB8fCB0aGlzW2ltcGxdIHx8ICEodGhpcyBpbnN0YW5jZW9mIFVSTCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGNvbnN0cnVjdCAnVVJMJzogUGxlYXNlIHVzZSB0aGUgJ25ldycgb3BlcmF0b3IsIHRoaXMgRE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gY29uc3RydWN0ICdVUkwnOiAxIGFyZ3VtZW50IHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMjsgKytpKSB7XG4gICAgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgfVxuICBhcmdzWzBdID0gY29udmVyc2lvbnNbXCJVU1ZTdHJpbmdcIl0oYXJnc1swXSk7XG4gIGlmIChhcmdzWzFdICE9PSB1bmRlZmluZWQpIHtcbiAgYXJnc1sxXSA9IGNvbnZlcnNpb25zW1wiVVNWU3RyaW5nXCJdKGFyZ3NbMV0pO1xuICB9XG5cbiAgbW9kdWxlLmV4cG9ydHMuc2V0dXAodGhpcywgYXJncyk7XG59XG5cblVSTC5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OKCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMDsgKytpKSB7XG4gICAgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgfVxuICByZXR1cm4gdGhpc1tpbXBsXS50b0pTT04uYXBwbHkodGhpc1tpbXBsXSwgYXJncyk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFVSTC5wcm90b3R5cGUsIFwiaHJlZlwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5ocmVmO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIlVTVlN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLmhyZWYgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5VUkwucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICByZXR1cm4gdGhpcy5ocmVmO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFVSTC5wcm90b3R5cGUsIFwib3JpZ2luXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLm9yaWdpbjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFVSTC5wcm90b3R5cGUsIFwicHJvdG9jb2xcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ucHJvdG9jb2w7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiVVNWU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0ucHJvdG9jb2wgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVVJMLnByb3RvdHlwZSwgXCJ1c2VybmFtZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS51c2VybmFtZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJVU1ZTdHJpbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS51c2VybmFtZSA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShVUkwucHJvdG90eXBlLCBcInBhc3N3b3JkXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnBhc3N3b3JkO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIlVTVlN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLnBhc3N3b3JkID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFVSTC5wcm90b3R5cGUsIFwiaG9zdFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5ob3N0O1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIlVTVlN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLmhvc3QgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVVJMLnByb3RvdHlwZSwgXCJob3N0bmFtZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5ob3N0bmFtZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJVU1ZTdHJpbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS5ob3N0bmFtZSA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShVUkwucHJvdG90eXBlLCBcInBvcnRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ucG9ydDtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJVU1ZTdHJpbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS5wb3J0ID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFVSTC5wcm90b3R5cGUsIFwicGF0aG5hbWVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ucGF0aG5hbWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiVVNWU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0ucGF0aG5hbWUgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVVJMLnByb3RvdHlwZSwgXCJzZWFyY2hcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uc2VhcmNoO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIlVTVlN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLnNlYXJjaCA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShVUkwucHJvdG90eXBlLCBcImhhc2hcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uaGFzaDtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJVU1ZTdHJpbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS5oYXNoID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXMob2JqKSB7XG4gICAgcmV0dXJuICEhb2JqICYmIG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb247XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoVVJMLnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBVUkwsXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBVUkw6IFVSTCB9LFxuICAgIFdvcmtlcjogeyBVUkw6IFVSTCB9XG4gIH1cbn07XG5cbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuVVJMID0gcmVxdWlyZShcIi4vVVJMXCIpLmludGVyZmFjZTtcbmV4cG9ydHMuc2VyaWFsaXplVVJMID0gcmVxdWlyZShcIi4vdXJsLXN0YXRlLW1hY2hpbmVcIikuc2VyaWFsaXplVVJMO1xuZXhwb3J0cy5zZXJpYWxpemVVUkxPcmlnaW4gPSByZXF1aXJlKFwiLi91cmwtc3RhdGUtbWFjaGluZVwiKS5zZXJpYWxpemVVUkxPcmlnaW47XG5leHBvcnRzLmJhc2ljVVJMUGFyc2UgPSByZXF1aXJlKFwiLi91cmwtc3RhdGUtbWFjaGluZVwiKS5iYXNpY1VSTFBhcnNlO1xuZXhwb3J0cy5zZXRUaGVVc2VybmFtZSA9IHJlcXVpcmUoXCIuL3VybC1zdGF0ZS1tYWNoaW5lXCIpLnNldFRoZVVzZXJuYW1lO1xuZXhwb3J0cy5zZXRUaGVQYXNzd29yZCA9IHJlcXVpcmUoXCIuL3VybC1zdGF0ZS1tYWNoaW5lXCIpLnNldFRoZVBhc3N3b3JkO1xuZXhwb3J0cy5zZXJpYWxpemVIb3N0ID0gcmVxdWlyZShcIi4vdXJsLXN0YXRlLW1hY2hpbmVcIikuc2VyaWFsaXplSG9zdDtcbmV4cG9ydHMuc2VyaWFsaXplSW50ZWdlciA9IHJlcXVpcmUoXCIuL3VybC1zdGF0ZS1tYWNoaW5lXCIpLnNlcmlhbGl6ZUludGVnZXI7XG5leHBvcnRzLnBhcnNlVVJMID0gcmVxdWlyZShcIi4vdXJsLXN0YXRlLW1hY2hpbmVcIikucGFyc2VVUkw7XG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuZnVuY3Rpb24gX2ludGVyb3BEZWZhdWx0IChleCkgeyByZXR1cm4gKGV4ICYmICh0eXBlb2YgZXggPT09ICdvYmplY3QnKSAmJiAnZGVmYXVsdCcgaW4gZXgpID8gZXhbJ2RlZmF1bHQnXSA6IGV4OyB9XG5cbnZhciBTdHJlYW0gPSBfaW50ZXJvcERlZmF1bHQocmVxdWlyZSgnc3RyZWFtJykpO1xudmFyIGh0dHAgPSBfaW50ZXJvcERlZmF1bHQocmVxdWlyZSgnaHR0cCcpKTtcbnZhciBVcmwgPSBfaW50ZXJvcERlZmF1bHQocmVxdWlyZSgndXJsJykpO1xudmFyIHdoYXR3Z1VybCA9IF9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKCd3aGF0d2ctdXJsJykpO1xudmFyIGh0dHBzID0gX2ludGVyb3BEZWZhdWx0KHJlcXVpcmUoJ2h0dHBzJykpO1xudmFyIHpsaWIgPSBfaW50ZXJvcERlZmF1bHQocmVxdWlyZSgnemxpYicpKTtcblxuLy8gQmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL3RtcHZhci9qc2RvbS9ibG9iL2FhODViMmFiZjA3NzY2ZmY3YmY1YzFmNmRhYWZiMzcyNmYyZjJkYjUvbGliL2pzZG9tL2xpdmluZy9ibG9iLmpzXG5cbi8vIGZpeCBmb3IgXCJSZWFkYWJsZVwiIGlzbid0IGEgbmFtZWQgZXhwb3J0IGlzc3VlXG5jb25zdCBSZWFkYWJsZSA9IFN0cmVhbS5SZWFkYWJsZTtcblxuY29uc3QgQlVGRkVSID0gU3ltYm9sKCdidWZmZXInKTtcbmNvbnN0IFRZUEUgPSBTeW1ib2woJ3R5cGUnKTtcblxuY2xhc3MgQmxvYiB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXNbVFlQRV0gPSAnJztcblxuXHRcdGNvbnN0IGJsb2JQYXJ0cyA9IGFyZ3VtZW50c1swXTtcblx0XHRjb25zdCBvcHRpb25zID0gYXJndW1lbnRzWzFdO1xuXG5cdFx0Y29uc3QgYnVmZmVycyA9IFtdO1xuXHRcdGxldCBzaXplID0gMDtcblxuXHRcdGlmIChibG9iUGFydHMpIHtcblx0XHRcdGNvbnN0IGEgPSBibG9iUGFydHM7XG5cdFx0XHRjb25zdCBsZW5ndGggPSBOdW1iZXIoYS5sZW5ndGgpO1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuXHRcdFx0XHRjb25zdCBlbGVtZW50ID0gYVtpXTtcblx0XHRcdFx0bGV0IGJ1ZmZlcjtcblx0XHRcdFx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBCdWZmZXIpIHtcblx0XHRcdFx0XHRidWZmZXIgPSBlbGVtZW50O1xuXHRcdFx0XHR9IGVsc2UgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhlbGVtZW50KSkge1xuXHRcdFx0XHRcdGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGVsZW1lbnQuYnVmZmVyLCBlbGVtZW50LmJ5dGVPZmZzZXQsIGVsZW1lbnQuYnl0ZUxlbmd0aCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG5cdFx0XHRcdFx0YnVmZmVyID0gQnVmZmVyLmZyb20oZWxlbWVudCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEJsb2IpIHtcblx0XHRcdFx0XHRidWZmZXIgPSBlbGVtZW50W0JVRkZFUl07XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YnVmZmVyID0gQnVmZmVyLmZyb20odHlwZW9mIGVsZW1lbnQgPT09ICdzdHJpbmcnID8gZWxlbWVudCA6IFN0cmluZyhlbGVtZW50KSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0c2l6ZSArPSBidWZmZXIubGVuZ3RoO1xuXHRcdFx0XHRidWZmZXJzLnB1c2goYnVmZmVyKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzW0JVRkZFUl0gPSBCdWZmZXIuY29uY2F0KGJ1ZmZlcnMpO1xuXG5cdFx0bGV0IHR5cGUgPSBvcHRpb25zICYmIG9wdGlvbnMudHlwZSAhPT0gdW5kZWZpbmVkICYmIFN0cmluZyhvcHRpb25zLnR5cGUpLnRvTG93ZXJDYXNlKCk7XG5cdFx0aWYgKHR5cGUgJiYgIS9bXlxcdTAwMjAtXFx1MDA3RV0vLnRlc3QodHlwZSkpIHtcblx0XHRcdHRoaXNbVFlQRV0gPSB0eXBlO1xuXHRcdH1cblx0fVxuXHRnZXQgc2l6ZSgpIHtcblx0XHRyZXR1cm4gdGhpc1tCVUZGRVJdLmxlbmd0aDtcblx0fVxuXHRnZXQgdHlwZSgpIHtcblx0XHRyZXR1cm4gdGhpc1tUWVBFXTtcblx0fVxuXHR0ZXh0KCkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpc1tCVUZGRVJdLnRvU3RyaW5nKCkpO1xuXHR9XG5cdGFycmF5QnVmZmVyKCkge1xuXHRcdGNvbnN0IGJ1ZiA9IHRoaXNbQlVGRkVSXTtcblx0XHRjb25zdCBhYiA9IGJ1Zi5idWZmZXIuc2xpY2UoYnVmLmJ5dGVPZmZzZXQsIGJ1Zi5ieXRlT2Zmc2V0ICsgYnVmLmJ5dGVMZW5ndGgpO1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoYWIpO1xuXHR9XG5cdHN0cmVhbSgpIHtcblx0XHRjb25zdCByZWFkYWJsZSA9IG5ldyBSZWFkYWJsZSgpO1xuXHRcdHJlYWRhYmxlLl9yZWFkID0gZnVuY3Rpb24gKCkge307XG5cdFx0cmVhZGFibGUucHVzaCh0aGlzW0JVRkZFUl0pO1xuXHRcdHJlYWRhYmxlLnB1c2gobnVsbCk7XG5cdFx0cmV0dXJuIHJlYWRhYmxlO1xuXHR9XG5cdHRvU3RyaW5nKCkge1xuXHRcdHJldHVybiAnW29iamVjdCBCbG9iXSc7XG5cdH1cblx0c2xpY2UoKSB7XG5cdFx0Y29uc3Qgc2l6ZSA9IHRoaXMuc2l6ZTtcblxuXHRcdGNvbnN0IHN0YXJ0ID0gYXJndW1lbnRzWzBdO1xuXHRcdGNvbnN0IGVuZCA9IGFyZ3VtZW50c1sxXTtcblx0XHRsZXQgcmVsYXRpdmVTdGFydCwgcmVsYXRpdmVFbmQ7XG5cdFx0aWYgKHN0YXJ0ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJlbGF0aXZlU3RhcnQgPSAwO1xuXHRcdH0gZWxzZSBpZiAoc3RhcnQgPCAwKSB7XG5cdFx0XHRyZWxhdGl2ZVN0YXJ0ID0gTWF0aC5tYXgoc2l6ZSArIHN0YXJ0LCAwKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVsYXRpdmVTdGFydCA9IE1hdGgubWluKHN0YXJ0LCBzaXplKTtcblx0XHR9XG5cdFx0aWYgKGVuZCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZWxhdGl2ZUVuZCA9IHNpemU7XG5cdFx0fSBlbHNlIGlmIChlbmQgPCAwKSB7XG5cdFx0XHRyZWxhdGl2ZUVuZCA9IE1hdGgubWF4KHNpemUgKyBlbmQsIDApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZWxhdGl2ZUVuZCA9IE1hdGgubWluKGVuZCwgc2l6ZSk7XG5cdFx0fVxuXHRcdGNvbnN0IHNwYW4gPSBNYXRoLm1heChyZWxhdGl2ZUVuZCAtIHJlbGF0aXZlU3RhcnQsIDApO1xuXG5cdFx0Y29uc3QgYnVmZmVyID0gdGhpc1tCVUZGRVJdO1xuXHRcdGNvbnN0IHNsaWNlZEJ1ZmZlciA9IGJ1ZmZlci5zbGljZShyZWxhdGl2ZVN0YXJ0LCByZWxhdGl2ZVN0YXJ0ICsgc3Bhbik7XG5cdFx0Y29uc3QgYmxvYiA9IG5ldyBCbG9iKFtdLCB7IHR5cGU6IGFyZ3VtZW50c1syXSB9KTtcblx0XHRibG9iW0JVRkZFUl0gPSBzbGljZWRCdWZmZXI7XG5cdFx0cmV0dXJuIGJsb2I7XG5cdH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmxvYi5wcm90b3R5cGUsIHtcblx0c2l6ZTogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG5cdHR5cGU6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHRzbGljZTogeyBlbnVtZXJhYmxlOiB0cnVlIH1cbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQmxvYi5wcm90b3R5cGUsIFN5bWJvbC50b1N0cmluZ1RhZywge1xuXHR2YWx1ZTogJ0Jsb2InLFxuXHR3cml0YWJsZTogZmFsc2UsXG5cdGVudW1lcmFibGU6IGZhbHNlLFxuXHRjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG4vKipcbiAqIGZldGNoLWVycm9yLmpzXG4gKlxuICogRmV0Y2hFcnJvciBpbnRlcmZhY2UgZm9yIG9wZXJhdGlvbmFsIGVycm9yc1xuICovXG5cbi8qKlxuICogQ3JlYXRlIEZldGNoRXJyb3IgaW5zdGFuY2VcbiAqXG4gKiBAcGFyYW0gICBTdHJpbmcgICAgICBtZXNzYWdlICAgICAgRXJyb3IgbWVzc2FnZSBmb3IgaHVtYW5cbiAqIEBwYXJhbSAgIFN0cmluZyAgICAgIHR5cGUgICAgICAgICBFcnJvciB0eXBlIGZvciBtYWNoaW5lXG4gKiBAcGFyYW0gICBTdHJpbmcgICAgICBzeXN0ZW1FcnJvciAgRm9yIE5vZGUuanMgc3lzdGVtIGVycm9yXG4gKiBAcmV0dXJuICBGZXRjaEVycm9yXG4gKi9cbmZ1bmN0aW9uIEZldGNoRXJyb3IobWVzc2FnZSwgdHlwZSwgc3lzdGVtRXJyb3IpIHtcbiAgRXJyb3IuY2FsbCh0aGlzLCBtZXNzYWdlKTtcblxuICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICB0aGlzLnR5cGUgPSB0eXBlO1xuXG4gIC8vIHdoZW4gZXJyLnR5cGUgaXMgYHN5c3RlbWAsIGVyci5jb2RlIGNvbnRhaW5zIHN5c3RlbSBlcnJvciBjb2RlXG4gIGlmIChzeXN0ZW1FcnJvcikge1xuICAgIHRoaXMuY29kZSA9IHRoaXMuZXJybm8gPSBzeXN0ZW1FcnJvci5jb2RlO1xuICB9XG5cbiAgLy8gaGlkZSBjdXN0b20gZXJyb3IgaW1wbGVtZW50YXRpb24gZGV0YWlscyBmcm9tIGVuZC11c2Vyc1xuICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbn1cblxuRmV0Y2hFcnJvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSk7XG5GZXRjaEVycm9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEZldGNoRXJyb3I7XG5GZXRjaEVycm9yLnByb3RvdHlwZS5uYW1lID0gJ0ZldGNoRXJyb3InO1xuXG5sZXQgY29udmVydDtcbnRyeSB7XG5cdGNvbnZlcnQgPSByZXF1aXJlKCdlbmNvZGluZycpLmNvbnZlcnQ7XG59IGNhdGNoIChlKSB7fVxuXG5jb25zdCBJTlRFUk5BTFMgPSBTeW1ib2woJ0JvZHkgaW50ZXJuYWxzJyk7XG5cbi8vIGZpeCBhbiBpc3N1ZSB3aGVyZSBcIlBhc3NUaHJvdWdoXCIgaXNuJ3QgYSBuYW1lZCBleHBvcnQgZm9yIG5vZGUgPDEwXG5jb25zdCBQYXNzVGhyb3VnaCA9IFN0cmVhbS5QYXNzVGhyb3VnaDtcblxuLyoqXG4gKiBCb2R5IG1peGluXG4gKlxuICogUmVmOiBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYm9keVxuICpcbiAqIEBwYXJhbSAgIFN0cmVhbSAgYm9keSAgUmVhZGFibGUgc3RyZWFtXG4gKiBAcGFyYW0gICBPYmplY3QgIG9wdHMgIFJlc3BvbnNlIG9wdGlvbnNcbiAqIEByZXR1cm4gIFZvaWRcbiAqL1xuZnVuY3Rpb24gQm9keShib2R5KSB7XG5cdHZhciBfdGhpcyA9IHRoaXM7XG5cblx0dmFyIF9yZWYgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9LFxuXHQgICAgX3JlZiRzaXplID0gX3JlZi5zaXplO1xuXG5cdGxldCBzaXplID0gX3JlZiRzaXplID09PSB1bmRlZmluZWQgPyAwIDogX3JlZiRzaXplO1xuXHR2YXIgX3JlZiR0aW1lb3V0ID0gX3JlZi50aW1lb3V0O1xuXHRsZXQgdGltZW91dCA9IF9yZWYkdGltZW91dCA9PT0gdW5kZWZpbmVkID8gMCA6IF9yZWYkdGltZW91dDtcblxuXHRpZiAoYm9keSA9PSBudWxsKSB7XG5cdFx0Ly8gYm9keSBpcyB1bmRlZmluZWQgb3IgbnVsbFxuXHRcdGJvZHkgPSBudWxsO1xuXHR9IGVsc2UgaWYgKGlzVVJMU2VhcmNoUGFyYW1zKGJvZHkpKSB7XG5cdFx0Ly8gYm9keSBpcyBhIFVSTFNlYXJjaFBhcmFtc1xuXHRcdGJvZHkgPSBCdWZmZXIuZnJvbShib2R5LnRvU3RyaW5nKCkpO1xuXHR9IGVsc2UgaWYgKGlzQmxvYihib2R5KSkgOyBlbHNlIGlmIChCdWZmZXIuaXNCdWZmZXIoYm9keSkpIDsgZWxzZSBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGJvZHkpID09PSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nKSB7XG5cdFx0Ly8gYm9keSBpcyBBcnJheUJ1ZmZlclxuXHRcdGJvZHkgPSBCdWZmZXIuZnJvbShib2R5KTtcblx0fSBlbHNlIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcoYm9keSkpIHtcblx0XHQvLyBib2R5IGlzIEFycmF5QnVmZmVyVmlld1xuXHRcdGJvZHkgPSBCdWZmZXIuZnJvbShib2R5LmJ1ZmZlciwgYm9keS5ieXRlT2Zmc2V0LCBib2R5LmJ5dGVMZW5ndGgpO1xuXHR9IGVsc2UgaWYgKGJvZHkgaW5zdGFuY2VvZiBTdHJlYW0pIDsgZWxzZSB7XG5cdFx0Ly8gbm9uZSBvZiB0aGUgYWJvdmVcblx0XHQvLyBjb2VyY2UgdG8gc3RyaW5nIHRoZW4gYnVmZmVyXG5cdFx0Ym9keSA9IEJ1ZmZlci5mcm9tKFN0cmluZyhib2R5KSk7XG5cdH1cblx0dGhpc1tJTlRFUk5BTFNdID0ge1xuXHRcdGJvZHksXG5cdFx0ZGlzdHVyYmVkOiBmYWxzZSxcblx0XHRlcnJvcjogbnVsbFxuXHR9O1xuXHR0aGlzLnNpemUgPSBzaXplO1xuXHR0aGlzLnRpbWVvdXQgPSB0aW1lb3V0O1xuXG5cdGlmIChib2R5IGluc3RhbmNlb2YgU3RyZWFtKSB7XG5cdFx0Ym9keS5vbignZXJyb3InLCBmdW5jdGlvbiAoZXJyKSB7XG5cdFx0XHRjb25zdCBlcnJvciA9IGVyci5uYW1lID09PSAnQWJvcnRFcnJvcicgPyBlcnIgOiBuZXcgRmV0Y2hFcnJvcihgSW52YWxpZCByZXNwb25zZSBib2R5IHdoaWxlIHRyeWluZyB0byBmZXRjaCAke190aGlzLnVybH06ICR7ZXJyLm1lc3NhZ2V9YCwgJ3N5c3RlbScsIGVycik7XG5cdFx0XHRfdGhpc1tJTlRFUk5BTFNdLmVycm9yID0gZXJyb3I7XG5cdFx0fSk7XG5cdH1cbn1cblxuQm9keS5wcm90b3R5cGUgPSB7XG5cdGdldCBib2R5KCkge1xuXHRcdHJldHVybiB0aGlzW0lOVEVSTkFMU10uYm9keTtcblx0fSxcblxuXHRnZXQgYm9keVVzZWQoKSB7XG5cdFx0cmV0dXJuIHRoaXNbSU5URVJOQUxTXS5kaXN0dXJiZWQ7XG5cdH0sXG5cblx0LyoqXG4gICogRGVjb2RlIHJlc3BvbnNlIGFzIEFycmF5QnVmZmVyXG4gICpcbiAgKiBAcmV0dXJuICBQcm9taXNlXG4gICovXG5cdGFycmF5QnVmZmVyKCkge1xuXHRcdHJldHVybiBjb25zdW1lQm9keS5jYWxsKHRoaXMpLnRoZW4oZnVuY3Rpb24gKGJ1Zikge1xuXHRcdFx0cmV0dXJuIGJ1Zi5idWZmZXIuc2xpY2UoYnVmLmJ5dGVPZmZzZXQsIGJ1Zi5ieXRlT2Zmc2V0ICsgYnVmLmJ5dGVMZW5ndGgpO1xuXHRcdH0pO1xuXHR9LFxuXG5cdC8qKlxuICAqIFJldHVybiByYXcgcmVzcG9uc2UgYXMgQmxvYlxuICAqXG4gICogQHJldHVybiBQcm9taXNlXG4gICovXG5cdGJsb2IoKSB7XG5cdFx0bGV0IGN0ID0gdGhpcy5oZWFkZXJzICYmIHRoaXMuaGVhZGVycy5nZXQoJ2NvbnRlbnQtdHlwZScpIHx8ICcnO1xuXHRcdHJldHVybiBjb25zdW1lQm9keS5jYWxsKHRoaXMpLnRoZW4oZnVuY3Rpb24gKGJ1Zikge1xuXHRcdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oXG5cdFx0XHQvLyBQcmV2ZW50IGNvcHlpbmdcblx0XHRcdG5ldyBCbG9iKFtdLCB7XG5cdFx0XHRcdHR5cGU6IGN0LnRvTG93ZXJDYXNlKClcblx0XHRcdH0pLCB7XG5cdFx0XHRcdFtCVUZGRVJdOiBidWZcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9LFxuXG5cdC8qKlxuICAqIERlY29kZSByZXNwb25zZSBhcyBqc29uXG4gICpcbiAgKiBAcmV0dXJuICBQcm9taXNlXG4gICovXG5cdGpzb24oKSB7XG5cdFx0dmFyIF90aGlzMiA9IHRoaXM7XG5cblx0XHRyZXR1cm4gY29uc3VtZUJvZHkuY2FsbCh0aGlzKS50aGVuKGZ1bmN0aW9uIChidWZmZXIpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHJldHVybiBKU09OLnBhcnNlKGJ1ZmZlci50b1N0cmluZygpKTtcblx0XHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0XHRyZXR1cm4gQm9keS5Qcm9taXNlLnJlamVjdChuZXcgRmV0Y2hFcnJvcihgaW52YWxpZCBqc29uIHJlc3BvbnNlIGJvZHkgYXQgJHtfdGhpczIudXJsfSByZWFzb246ICR7ZXJyLm1lc3NhZ2V9YCwgJ2ludmFsaWQtanNvbicpKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSxcblxuXHQvKipcbiAgKiBEZWNvZGUgcmVzcG9uc2UgYXMgdGV4dFxuICAqXG4gICogQHJldHVybiAgUHJvbWlzZVxuICAqL1xuXHR0ZXh0KCkge1xuXHRcdHJldHVybiBjb25zdW1lQm9keS5jYWxsKHRoaXMpLnRoZW4oZnVuY3Rpb24gKGJ1ZmZlcikge1xuXHRcdFx0cmV0dXJuIGJ1ZmZlci50b1N0cmluZygpO1xuXHRcdH0pO1xuXHR9LFxuXG5cdC8qKlxuICAqIERlY29kZSByZXNwb25zZSBhcyBidWZmZXIgKG5vbi1zcGVjIGFwaSlcbiAgKlxuICAqIEByZXR1cm4gIFByb21pc2VcbiAgKi9cblx0YnVmZmVyKCkge1xuXHRcdHJldHVybiBjb25zdW1lQm9keS5jYWxsKHRoaXMpO1xuXHR9LFxuXG5cdC8qKlxuICAqIERlY29kZSByZXNwb25zZSBhcyB0ZXh0LCB3aGlsZSBhdXRvbWF0aWNhbGx5IGRldGVjdGluZyB0aGUgZW5jb2RpbmcgYW5kXG4gICogdHJ5aW5nIHRvIGRlY29kZSB0byBVVEYtOCAobm9uLXNwZWMgYXBpKVxuICAqXG4gICogQHJldHVybiAgUHJvbWlzZVxuICAqL1xuXHR0ZXh0Q29udmVydGVkKCkge1xuXHRcdHZhciBfdGhpczMgPSB0aGlzO1xuXG5cdFx0cmV0dXJuIGNvbnN1bWVCb2R5LmNhbGwodGhpcykudGhlbihmdW5jdGlvbiAoYnVmZmVyKSB7XG5cdFx0XHRyZXR1cm4gY29udmVydEJvZHkoYnVmZmVyLCBfdGhpczMuaGVhZGVycyk7XG5cdFx0fSk7XG5cdH1cbn07XG5cbi8vIEluIGJyb3dzZXJzLCBhbGwgcHJvcGVydGllcyBhcmUgZW51bWVyYWJsZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJvZHkucHJvdG90eXBlLCB7XG5cdGJvZHk6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHRib2R5VXNlZDogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG5cdGFycmF5QnVmZmVyOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0YmxvYjogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG5cdGpzb246IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHR0ZXh0OiB7IGVudW1lcmFibGU6IHRydWUgfVxufSk7XG5cbkJvZHkubWl4SW4gPSBmdW5jdGlvbiAocHJvdG8pIHtcblx0Zm9yIChjb25zdCBuYW1lIG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEJvZHkucHJvdG90eXBlKSkge1xuXHRcdC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBmdXR1cmUgcHJvb2Zcblx0XHRpZiAoIShuYW1lIGluIHByb3RvKSkge1xuXHRcdFx0Y29uc3QgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoQm9keS5wcm90b3R5cGUsIG5hbWUpO1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3RvLCBuYW1lLCBkZXNjKTtcblx0XHR9XG5cdH1cbn07XG5cbi8qKlxuICogQ29uc3VtZSBhbmQgY29udmVydCBhbiBlbnRpcmUgQm9keSB0byBhIEJ1ZmZlci5cbiAqXG4gKiBSZWY6IGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWJvZHktY29uc3VtZS1ib2R5XG4gKlxuICogQHJldHVybiAgUHJvbWlzZVxuICovXG5mdW5jdGlvbiBjb25zdW1lQm9keSgpIHtcblx0dmFyIF90aGlzNCA9IHRoaXM7XG5cblx0aWYgKHRoaXNbSU5URVJOQUxTXS5kaXN0dXJiZWQpIHtcblx0XHRyZXR1cm4gQm9keS5Qcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKGBib2R5IHVzZWQgYWxyZWFkeSBmb3I6ICR7dGhpcy51cmx9YCkpO1xuXHR9XG5cblx0dGhpc1tJTlRFUk5BTFNdLmRpc3R1cmJlZCA9IHRydWU7XG5cblx0aWYgKHRoaXNbSU5URVJOQUxTXS5lcnJvcikge1xuXHRcdHJldHVybiBCb2R5LlByb21pc2UucmVqZWN0KHRoaXNbSU5URVJOQUxTXS5lcnJvcik7XG5cdH1cblxuXHRsZXQgYm9keSA9IHRoaXMuYm9keTtcblxuXHQvLyBib2R5IGlzIG51bGxcblx0aWYgKGJvZHkgPT09IG51bGwpIHtcblx0XHRyZXR1cm4gQm9keS5Qcm9taXNlLnJlc29sdmUoQnVmZmVyLmFsbG9jKDApKTtcblx0fVxuXG5cdC8vIGJvZHkgaXMgYmxvYlxuXHRpZiAoaXNCbG9iKGJvZHkpKSB7XG5cdFx0Ym9keSA9IGJvZHkuc3RyZWFtKCk7XG5cdH1cblxuXHQvLyBib2R5IGlzIGJ1ZmZlclxuXHRpZiAoQnVmZmVyLmlzQnVmZmVyKGJvZHkpKSB7XG5cdFx0cmV0dXJuIEJvZHkuUHJvbWlzZS5yZXNvbHZlKGJvZHkpO1xuXHR9XG5cblx0Ly8gaXN0YW5idWwgaWdub3JlIGlmOiBzaG91bGQgbmV2ZXIgaGFwcGVuXG5cdGlmICghKGJvZHkgaW5zdGFuY2VvZiBTdHJlYW0pKSB7XG5cdFx0cmV0dXJuIEJvZHkuUHJvbWlzZS5yZXNvbHZlKEJ1ZmZlci5hbGxvYygwKSk7XG5cdH1cblxuXHQvLyBib2R5IGlzIHN0cmVhbVxuXHQvLyBnZXQgcmVhZHkgdG8gYWN0dWFsbHkgY29uc3VtZSB0aGUgYm9keVxuXHRsZXQgYWNjdW0gPSBbXTtcblx0bGV0IGFjY3VtQnl0ZXMgPSAwO1xuXHRsZXQgYWJvcnQgPSBmYWxzZTtcblxuXHRyZXR1cm4gbmV3IEJvZHkuUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdFx0bGV0IHJlc1RpbWVvdXQ7XG5cblx0XHQvLyBhbGxvdyB0aW1lb3V0IG9uIHNsb3cgcmVzcG9uc2UgYm9keVxuXHRcdGlmIChfdGhpczQudGltZW91dCkge1xuXHRcdFx0cmVzVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRhYm9ydCA9IHRydWU7XG5cdFx0XHRcdHJlamVjdChuZXcgRmV0Y2hFcnJvcihgUmVzcG9uc2UgdGltZW91dCB3aGlsZSB0cnlpbmcgdG8gZmV0Y2ggJHtfdGhpczQudXJsfSAob3ZlciAke190aGlzNC50aW1lb3V0fW1zKWAsICdib2R5LXRpbWVvdXQnKSk7XG5cdFx0XHR9LCBfdGhpczQudGltZW91dCk7XG5cdFx0fVxuXG5cdFx0Ly8gaGFuZGxlIHN0cmVhbSBlcnJvcnNcblx0XHRib2R5Lm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpIHtcblx0XHRcdGlmIChlcnIubmFtZSA9PT0gJ0Fib3J0RXJyb3InKSB7XG5cdFx0XHRcdC8vIGlmIHRoZSByZXF1ZXN0IHdhcyBhYm9ydGVkLCByZWplY3Qgd2l0aCB0aGlzIEVycm9yXG5cdFx0XHRcdGFib3J0ID0gdHJ1ZTtcblx0XHRcdFx0cmVqZWN0KGVycik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBvdGhlciBlcnJvcnMsIHN1Y2ggYXMgaW5jb3JyZWN0IGNvbnRlbnQtZW5jb2Rpbmdcblx0XHRcdFx0cmVqZWN0KG5ldyBGZXRjaEVycm9yKGBJbnZhbGlkIHJlc3BvbnNlIGJvZHkgd2hpbGUgdHJ5aW5nIHRvIGZldGNoICR7X3RoaXM0LnVybH06ICR7ZXJyLm1lc3NhZ2V9YCwgJ3N5c3RlbScsIGVycikpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0Ym9keS5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykge1xuXHRcdFx0aWYgKGFib3J0IHx8IGNodW5rID09PSBudWxsKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKF90aGlzNC5zaXplICYmIGFjY3VtQnl0ZXMgKyBjaHVuay5sZW5ndGggPiBfdGhpczQuc2l6ZSkge1xuXHRcdFx0XHRhYm9ydCA9IHRydWU7XG5cdFx0XHRcdHJlamVjdChuZXcgRmV0Y2hFcnJvcihgY29udGVudCBzaXplIGF0ICR7X3RoaXM0LnVybH0gb3ZlciBsaW1pdDogJHtfdGhpczQuc2l6ZX1gLCAnbWF4LXNpemUnKSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0YWNjdW1CeXRlcyArPSBjaHVuay5sZW5ndGg7XG5cdFx0XHRhY2N1bS5wdXNoKGNodW5rKTtcblx0XHR9KTtcblxuXHRcdGJvZHkub24oJ2VuZCcsIGZ1bmN0aW9uICgpIHtcblx0XHRcdGlmIChhYm9ydCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGNsZWFyVGltZW91dChyZXNUaW1lb3V0KTtcblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cmVzb2x2ZShCdWZmZXIuY29uY2F0KGFjY3VtLCBhY2N1bUJ5dGVzKSk7XG5cdFx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdFx0Ly8gaGFuZGxlIHN0cmVhbXMgdGhhdCBoYXZlIGFjY3VtdWxhdGVkIHRvbyBtdWNoIGRhdGEgKGlzc3VlICM0MTQpXG5cdFx0XHRcdHJlamVjdChuZXcgRmV0Y2hFcnJvcihgQ291bGQgbm90IGNyZWF0ZSBCdWZmZXIgZnJvbSByZXNwb25zZSBib2R5IGZvciAke190aGlzNC51cmx9OiAke2Vyci5tZXNzYWdlfWAsICdzeXN0ZW0nLCBlcnIpKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSk7XG59XG5cbi8qKlxuICogRGV0ZWN0IGJ1ZmZlciBlbmNvZGluZyBhbmQgY29udmVydCB0byB0YXJnZXQgZW5jb2RpbmdcbiAqIHJlZjogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMS9XRC1odG1sNS0yMDExMDExMy9wYXJzaW5nLmh0bWwjZGV0ZXJtaW5pbmctdGhlLWNoYXJhY3Rlci1lbmNvZGluZ1xuICpcbiAqIEBwYXJhbSAgIEJ1ZmZlciAgYnVmZmVyICAgIEluY29taW5nIGJ1ZmZlclxuICogQHBhcmFtICAgU3RyaW5nICBlbmNvZGluZyAgVGFyZ2V0IGVuY29kaW5nXG4gKiBAcmV0dXJuICBTdHJpbmdcbiAqL1xuZnVuY3Rpb24gY29udmVydEJvZHkoYnVmZmVyLCBoZWFkZXJzKSB7XG5cdGlmICh0eXBlb2YgY29udmVydCAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdHRocm93IG5ldyBFcnJvcignVGhlIHBhY2thZ2UgYGVuY29kaW5nYCBtdXN0IGJlIGluc3RhbGxlZCB0byB1c2UgdGhlIHRleHRDb252ZXJ0ZWQoKSBmdW5jdGlvbicpO1xuXHR9XG5cblx0Y29uc3QgY3QgPSBoZWFkZXJzLmdldCgnY29udGVudC10eXBlJyk7XG5cdGxldCBjaGFyc2V0ID0gJ3V0Zi04Jztcblx0bGV0IHJlcywgc3RyO1xuXG5cdC8vIGhlYWRlclxuXHRpZiAoY3QpIHtcblx0XHRyZXMgPSAvY2hhcnNldD0oW147XSopL2kuZXhlYyhjdCk7XG5cdH1cblxuXHQvLyBubyBjaGFyc2V0IGluIGNvbnRlbnQgdHlwZSwgcGVlayBhdCByZXNwb25zZSBib2R5IGZvciBhdCBtb3N0IDEwMjQgYnl0ZXNcblx0c3RyID0gYnVmZmVyLnNsaWNlKDAsIDEwMjQpLnRvU3RyaW5nKCk7XG5cblx0Ly8gaHRtbDVcblx0aWYgKCFyZXMgJiYgc3RyKSB7XG5cdFx0cmVzID0gLzxtZXRhLis/Y2hhcnNldD0oWydcIl0pKC4rPylcXDEvaS5leGVjKHN0cik7XG5cdH1cblxuXHQvLyBodG1sNFxuXHRpZiAoIXJlcyAmJiBzdHIpIHtcblx0XHRyZXMgPSAvPG1ldGFbXFxzXSs/aHR0cC1lcXVpdj0oWydcIl0pY29udGVudC10eXBlXFwxW1xcc10rP2NvbnRlbnQ9KFsnXCJdKSguKz8pXFwyL2kuZXhlYyhzdHIpO1xuXHRcdGlmICghcmVzKSB7XG5cdFx0XHRyZXMgPSAvPG1ldGFbXFxzXSs/Y29udGVudD0oWydcIl0pKC4rPylcXDFbXFxzXSs/aHR0cC1lcXVpdj0oWydcIl0pY29udGVudC10eXBlXFwzL2kuZXhlYyhzdHIpO1xuXHRcdFx0aWYgKHJlcykge1xuXHRcdFx0XHRyZXMucG9wKCk7IC8vIGRyb3AgbGFzdCBxdW90ZVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChyZXMpIHtcblx0XHRcdHJlcyA9IC9jaGFyc2V0PSguKikvaS5leGVjKHJlcy5wb3AoKSk7XG5cdFx0fVxuXHR9XG5cblx0Ly8geG1sXG5cdGlmICghcmVzICYmIHN0cikge1xuXHRcdHJlcyA9IC88XFw/eG1sLis/ZW5jb2Rpbmc9KFsnXCJdKSguKz8pXFwxL2kuZXhlYyhzdHIpO1xuXHR9XG5cblx0Ly8gZm91bmQgY2hhcnNldFxuXHRpZiAocmVzKSB7XG5cdFx0Y2hhcnNldCA9IHJlcy5wb3AoKTtcblxuXHRcdC8vIHByZXZlbnQgZGVjb2RlIGlzc3VlcyB3aGVuIHNpdGVzIHVzZSBpbmNvcnJlY3QgZW5jb2Rpbmdcblx0XHQvLyByZWY6IGh0dHBzOi8vaHNpdm9uZW4uZmkvZW5jb2RpbmctbWVudS9cblx0XHRpZiAoY2hhcnNldCA9PT0gJ2diMjMxMicgfHwgY2hhcnNldCA9PT0gJ2diaycpIHtcblx0XHRcdGNoYXJzZXQgPSAnZ2IxODAzMCc7XG5cdFx0fVxuXHR9XG5cblx0Ly8gdHVybiByYXcgYnVmZmVycyBpbnRvIGEgc2luZ2xlIHV0Zi04IGJ1ZmZlclxuXHRyZXR1cm4gY29udmVydChidWZmZXIsICdVVEYtOCcsIGNoYXJzZXQpLnRvU3RyaW5nKCk7XG59XG5cbi8qKlxuICogRGV0ZWN0IGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdFxuICogcmVmOiBodHRwczovL2dpdGh1Yi5jb20vYml0aW5uL25vZGUtZmV0Y2gvaXNzdWVzLzI5NiNpc3N1ZWNvbW1lbnQtMzA3NTk4MTQzXG4gKlxuICogQHBhcmFtICAgT2JqZWN0ICBvYmogICAgIE9iamVjdCB0byBkZXRlY3QgYnkgdHlwZSBvciBicmFuZFxuICogQHJldHVybiAgU3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGlzVVJMU2VhcmNoUGFyYW1zKG9iaikge1xuXHQvLyBEdWNrLXR5cGluZyBhcyBhIG5lY2Vzc2FyeSBjb25kaXRpb24uXG5cdGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0JyB8fCB0eXBlb2Ygb2JqLmFwcGVuZCAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2Ygb2JqLmRlbGV0ZSAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2Ygb2JqLmdldCAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2Ygb2JqLmdldEFsbCAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2Ygb2JqLmhhcyAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2Ygb2JqLnNldCAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8vIEJyYW5kLWNoZWNraW5nIGFuZCBtb3JlIGR1Y2stdHlwaW5nIGFzIG9wdGlvbmFsIGNvbmRpdGlvbi5cblx0cmV0dXJuIG9iai5jb25zdHJ1Y3Rvci5uYW1lID09PSAnVVJMU2VhcmNoUGFyYW1zJyB8fCBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgVVJMU2VhcmNoUGFyYW1zXScgfHwgdHlwZW9mIG9iai5zb3J0ID09PSAnZnVuY3Rpb24nO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIGBvYmpgIGlzIGEgVzNDIGBCbG9iYCBvYmplY3QgKHdoaWNoIGBGaWxlYCBpbmhlcml0cyBmcm9tKVxuICogQHBhcmFtICB7Kn0gb2JqXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0Jsb2Iob2JqKSB7XG5cdHJldHVybiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0eXBlb2Ygb2JqLmFycmF5QnVmZmVyID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBvYmoudHlwZSA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIG9iai5zdHJlYW0gPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIG9iai5jb25zdHJ1Y3RvciA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2Ygb2JqLmNvbnN0cnVjdG9yLm5hbWUgPT09ICdzdHJpbmcnICYmIC9eKEJsb2J8RmlsZSkkLy50ZXN0KG9iai5jb25zdHJ1Y3Rvci5uYW1lKSAmJiAvXihCbG9ifEZpbGUpJC8udGVzdChvYmpbU3ltYm9sLnRvU3RyaW5nVGFnXSk7XG59XG5cbi8qKlxuICogQ2xvbmUgYm9keSBnaXZlbiBSZXMvUmVxIGluc3RhbmNlXG4gKlxuICogQHBhcmFtICAgTWl4ZWQgIGluc3RhbmNlICBSZXNwb25zZSBvciBSZXF1ZXN0IGluc3RhbmNlXG4gKiBAcmV0dXJuICBNaXhlZFxuICovXG5mdW5jdGlvbiBjbG9uZShpbnN0YW5jZSkge1xuXHRsZXQgcDEsIHAyO1xuXHRsZXQgYm9keSA9IGluc3RhbmNlLmJvZHk7XG5cblx0Ly8gZG9uJ3QgYWxsb3cgY2xvbmluZyBhIHVzZWQgYm9keVxuXHRpZiAoaW5zdGFuY2UuYm9keVVzZWQpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ2Nhbm5vdCBjbG9uZSBib2R5IGFmdGVyIGl0IGlzIHVzZWQnKTtcblx0fVxuXG5cdC8vIGNoZWNrIHRoYXQgYm9keSBpcyBhIHN0cmVhbSBhbmQgbm90IGZvcm0tZGF0YSBvYmplY3Rcblx0Ly8gbm90ZTogd2UgY2FuJ3QgY2xvbmUgdGhlIGZvcm0tZGF0YSBvYmplY3Qgd2l0aG91dCBoYXZpbmcgaXQgYXMgYSBkZXBlbmRlbmN5XG5cdGlmIChib2R5IGluc3RhbmNlb2YgU3RyZWFtICYmIHR5cGVvZiBib2R5LmdldEJvdW5kYXJ5ICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0Ly8gdGVlIGluc3RhbmNlIGJvZHlcblx0XHRwMSA9IG5ldyBQYXNzVGhyb3VnaCgpO1xuXHRcdHAyID0gbmV3IFBhc3NUaHJvdWdoKCk7XG5cdFx0Ym9keS5waXBlKHAxKTtcblx0XHRib2R5LnBpcGUocDIpO1xuXHRcdC8vIHNldCBpbnN0YW5jZSBib2R5IHRvIHRlZWQgYm9keSBhbmQgcmV0dXJuIHRoZSBvdGhlciB0ZWVkIGJvZHlcblx0XHRpbnN0YW5jZVtJTlRFUk5BTFNdLmJvZHkgPSBwMTtcblx0XHRib2R5ID0gcDI7XG5cdH1cblxuXHRyZXR1cm4gYm9keTtcbn1cblxuLyoqXG4gKiBQZXJmb3JtcyB0aGUgb3BlcmF0aW9uIFwiZXh0cmFjdCBhIGBDb250ZW50LVR5cGVgIHZhbHVlIGZyb20gfG9iamVjdHxcIiBhc1xuICogc3BlY2lmaWVkIGluIHRoZSBzcGVjaWZpY2F0aW9uOlxuICogaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtYm9keWluaXQtZXh0cmFjdFxuICpcbiAqIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IGluc3RhbmNlLmJvZHkgaXMgcHJlc2VudC5cbiAqXG4gKiBAcGFyYW0gICBNaXhlZCAgaW5zdGFuY2UgIEFueSBvcHRpb25zLmJvZHkgaW5wdXRcbiAqL1xuZnVuY3Rpb24gZXh0cmFjdENvbnRlbnRUeXBlKGJvZHkpIHtcblx0aWYgKGJvZHkgPT09IG51bGwpIHtcblx0XHQvLyBib2R5IGlzIG51bGxcblx0XHRyZXR1cm4gbnVsbDtcblx0fSBlbHNlIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcblx0XHQvLyBib2R5IGlzIHN0cmluZ1xuXHRcdHJldHVybiAndGV4dC9wbGFpbjtjaGFyc2V0PVVURi04Jztcblx0fSBlbHNlIGlmIChpc1VSTFNlYXJjaFBhcmFtcyhib2R5KSkge1xuXHRcdC8vIGJvZHkgaXMgYSBVUkxTZWFyY2hQYXJhbXNcblx0XHRyZXR1cm4gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04Jztcblx0fSBlbHNlIGlmIChpc0Jsb2IoYm9keSkpIHtcblx0XHQvLyBib2R5IGlzIGJsb2Jcblx0XHRyZXR1cm4gYm9keS50eXBlIHx8IG51bGw7XG5cdH0gZWxzZSBpZiAoQnVmZmVyLmlzQnVmZmVyKGJvZHkpKSB7XG5cdFx0Ly8gYm9keSBpcyBidWZmZXJcblx0XHRyZXR1cm4gbnVsbDtcblx0fSBlbHNlIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYm9keSkgPT09ICdbb2JqZWN0IEFycmF5QnVmZmVyXScpIHtcblx0XHQvLyBib2R5IGlzIEFycmF5QnVmZmVyXG5cdFx0cmV0dXJuIG51bGw7XG5cdH0gZWxzZSBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KGJvZHkpKSB7XG5cdFx0Ly8gYm9keSBpcyBBcnJheUJ1ZmZlclZpZXdcblx0XHRyZXR1cm4gbnVsbDtcblx0fSBlbHNlIGlmICh0eXBlb2YgYm9keS5nZXRCb3VuZGFyeSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdC8vIGRldGVjdCBmb3JtIGRhdGEgaW5wdXQgZnJvbSBmb3JtLWRhdGEgbW9kdWxlXG5cdFx0cmV0dXJuIGBtdWx0aXBhcnQvZm9ybS1kYXRhO2JvdW5kYXJ5PSR7Ym9keS5nZXRCb3VuZGFyeSgpfWA7XG5cdH0gZWxzZSBpZiAoYm9keSBpbnN0YW5jZW9mIFN0cmVhbSkge1xuXHRcdC8vIGJvZHkgaXMgc3RyZWFtXG5cdFx0Ly8gY2FuJ3QgcmVhbGx5IGRvIG11Y2ggYWJvdXQgdGhpc1xuXHRcdHJldHVybiBudWxsO1xuXHR9IGVsc2Uge1xuXHRcdC8vIEJvZHkgY29uc3RydWN0b3IgZGVmYXVsdHMgb3RoZXIgdGhpbmdzIHRvIHN0cmluZ1xuXHRcdHJldHVybiAndGV4dC9wbGFpbjtjaGFyc2V0PVVURi04Jztcblx0fVxufVxuXG4vKipcbiAqIFRoZSBGZXRjaCBTdGFuZGFyZCB0cmVhdHMgdGhpcyBhcyBpZiBcInRvdGFsIGJ5dGVzXCIgaXMgYSBwcm9wZXJ0eSBvbiB0aGUgYm9keS5cbiAqIEZvciB1cywgd2UgaGF2ZSB0byBleHBsaWNpdGx5IGdldCBpdCB3aXRoIGEgZnVuY3Rpb24uXG4gKlxuICogcmVmOiBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1ib2R5LXRvdGFsLWJ5dGVzXG4gKlxuICogQHBhcmFtICAgQm9keSAgICBpbnN0YW5jZSAgIEluc3RhbmNlIG9mIEJvZHlcbiAqIEByZXR1cm4gIE51bWJlcj8gICAgICAgICAgICBOdW1iZXIgb2YgYnl0ZXMsIG9yIG51bGwgaWYgbm90IHBvc3NpYmxlXG4gKi9cbmZ1bmN0aW9uIGdldFRvdGFsQnl0ZXMoaW5zdGFuY2UpIHtcblx0Y29uc3QgYm9keSA9IGluc3RhbmNlLmJvZHk7XG5cblxuXHRpZiAoYm9keSA9PT0gbnVsbCkge1xuXHRcdC8vIGJvZHkgaXMgbnVsbFxuXHRcdHJldHVybiAwO1xuXHR9IGVsc2UgaWYgKGlzQmxvYihib2R5KSkge1xuXHRcdHJldHVybiBib2R5LnNpemU7XG5cdH0gZWxzZSBpZiAoQnVmZmVyLmlzQnVmZmVyKGJvZHkpKSB7XG5cdFx0Ly8gYm9keSBpcyBidWZmZXJcblx0XHRyZXR1cm4gYm9keS5sZW5ndGg7XG5cdH0gZWxzZSBpZiAoYm9keSAmJiB0eXBlb2YgYm9keS5nZXRMZW5ndGhTeW5jID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0Ly8gZGV0ZWN0IGZvcm0gZGF0YSBpbnB1dCBmcm9tIGZvcm0tZGF0YSBtb2R1bGVcblx0XHRpZiAoYm9keS5fbGVuZ3RoUmV0cmlldmVycyAmJiBib2R5Ll9sZW5ndGhSZXRyaWV2ZXJzLmxlbmd0aCA9PSAwIHx8IC8vIDEueFxuXHRcdGJvZHkuaGFzS25vd25MZW5ndGggJiYgYm9keS5oYXNLbm93bkxlbmd0aCgpKSB7XG5cdFx0XHQvLyAyLnhcblx0XHRcdHJldHVybiBib2R5LmdldExlbmd0aFN5bmMoKTtcblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gYm9keSBpcyBzdHJlYW1cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxufVxuXG4vKipcbiAqIFdyaXRlIGEgQm9keSB0byBhIE5vZGUuanMgV3JpdGFibGVTdHJlYW0gKGUuZy4gaHR0cC5SZXF1ZXN0KSBvYmplY3QuXG4gKlxuICogQHBhcmFtICAgQm9keSAgICBpbnN0YW5jZSAgIEluc3RhbmNlIG9mIEJvZHlcbiAqIEByZXR1cm4gIFZvaWRcbiAqL1xuZnVuY3Rpb24gd3JpdGVUb1N0cmVhbShkZXN0LCBpbnN0YW5jZSkge1xuXHRjb25zdCBib2R5ID0gaW5zdGFuY2UuYm9keTtcblxuXG5cdGlmIChib2R5ID09PSBudWxsKSB7XG5cdFx0Ly8gYm9keSBpcyBudWxsXG5cdFx0ZGVzdC5lbmQoKTtcblx0fSBlbHNlIGlmIChpc0Jsb2IoYm9keSkpIHtcblx0XHRib2R5LnN0cmVhbSgpLnBpcGUoZGVzdCk7XG5cdH0gZWxzZSBpZiAoQnVmZmVyLmlzQnVmZmVyKGJvZHkpKSB7XG5cdFx0Ly8gYm9keSBpcyBidWZmZXJcblx0XHRkZXN0LndyaXRlKGJvZHkpO1xuXHRcdGRlc3QuZW5kKCk7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gYm9keSBpcyBzdHJlYW1cblx0XHRib2R5LnBpcGUoZGVzdCk7XG5cdH1cbn1cblxuLy8gZXhwb3NlIFByb21pc2VcbkJvZHkuUHJvbWlzZSA9IGdsb2JhbC5Qcm9taXNlO1xuXG4vKipcbiAqIGhlYWRlcnMuanNcbiAqXG4gKiBIZWFkZXJzIGNsYXNzIG9mZmVycyBjb252ZW5pZW50IGhlbHBlcnNcbiAqL1xuXG5jb25zdCBpbnZhbGlkVG9rZW5SZWdleCA9IC9bXlxcXl9gYS16QS1aXFwtMC05ISMkJSYnKisufH5dLztcbmNvbnN0IGludmFsaWRIZWFkZXJDaGFyUmVnZXggPSAvW15cXHRcXHgyMC1cXHg3ZVxceDgwLVxceGZmXS87XG5cbmZ1bmN0aW9uIHZhbGlkYXRlTmFtZShuYW1lKSB7XG5cdG5hbWUgPSBgJHtuYW1lfWA7XG5cdGlmIChpbnZhbGlkVG9rZW5SZWdleC50ZXN0KG5hbWUpIHx8IG5hbWUgPT09ICcnKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihgJHtuYW1lfSBpcyBub3QgYSBsZWdhbCBIVFRQIGhlYWRlciBuYW1lYCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVWYWx1ZSh2YWx1ZSkge1xuXHR2YWx1ZSA9IGAke3ZhbHVlfWA7XG5cdGlmIChpbnZhbGlkSGVhZGVyQ2hhclJlZ2V4LnRlc3QodmFsdWUpKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihgJHt2YWx1ZX0gaXMgbm90IGEgbGVnYWwgSFRUUCBoZWFkZXIgdmFsdWVgKTtcblx0fVxufVxuXG4vKipcbiAqIEZpbmQgdGhlIGtleSBpbiB0aGUgbWFwIG9iamVjdCBnaXZlbiBhIGhlYWRlciBuYW1lLlxuICpcbiAqIFJldHVybnMgdW5kZWZpbmVkIGlmIG5vdCBmb3VuZC5cbiAqXG4gKiBAcGFyYW0gICBTdHJpbmcgIG5hbWUgIEhlYWRlciBuYW1lXG4gKiBAcmV0dXJuICBTdHJpbmd8VW5kZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIGZpbmQobWFwLCBuYW1lKSB7XG5cdG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cdGZvciAoY29uc3Qga2V5IGluIG1hcCkge1xuXHRcdGlmIChrZXkudG9Mb3dlckNhc2UoKSA9PT0gbmFtZSkge1xuXHRcdFx0cmV0dXJuIGtleTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuY29uc3QgTUFQID0gU3ltYm9sKCdtYXAnKTtcbmNsYXNzIEhlYWRlcnMge1xuXHQvKipcbiAgKiBIZWFkZXJzIGNsYXNzXG4gICpcbiAgKiBAcGFyYW0gICBPYmplY3QgIGhlYWRlcnMgIFJlc3BvbnNlIGhlYWRlcnNcbiAgKiBAcmV0dXJuICBWb2lkXG4gICovXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGxldCBpbml0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQ7XG5cblx0XHR0aGlzW01BUF0gPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG5cdFx0aWYgKGluaXQgaW5zdGFuY2VvZiBIZWFkZXJzKSB7XG5cdFx0XHRjb25zdCByYXdIZWFkZXJzID0gaW5pdC5yYXcoKTtcblx0XHRcdGNvbnN0IGhlYWRlck5hbWVzID0gT2JqZWN0LmtleXMocmF3SGVhZGVycyk7XG5cblx0XHRcdGZvciAoY29uc3QgaGVhZGVyTmFtZSBvZiBoZWFkZXJOYW1lcykge1xuXHRcdFx0XHRmb3IgKGNvbnN0IHZhbHVlIG9mIHJhd0hlYWRlcnNbaGVhZGVyTmFtZV0pIHtcblx0XHRcdFx0XHR0aGlzLmFwcGVuZChoZWFkZXJOYW1lLCB2YWx1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIFdlIGRvbid0IHdvcnJ5IGFib3V0IGNvbnZlcnRpbmcgcHJvcCB0byBCeXRlU3RyaW5nIGhlcmUgYXMgYXBwZW5kKClcblx0XHQvLyB3aWxsIGhhbmRsZSBpdC5cblx0XHRpZiAoaW5pdCA9PSBudWxsKSA7IGVsc2UgaWYgKHR5cGVvZiBpbml0ID09PSAnb2JqZWN0Jykge1xuXHRcdFx0Y29uc3QgbWV0aG9kID0gaW5pdFtTeW1ib2wuaXRlcmF0b3JdO1xuXHRcdFx0aWYgKG1ldGhvZCAhPSBudWxsKSB7XG5cdFx0XHRcdGlmICh0eXBlb2YgbWV0aG9kICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignSGVhZGVyIHBhaXJzIG11c3QgYmUgaXRlcmFibGUnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIHNlcXVlbmNlPHNlcXVlbmNlPEJ5dGVTdHJpbmc+PlxuXHRcdFx0XHQvLyBOb3RlOiBwZXIgc3BlYyB3ZSBoYXZlIHRvIGZpcnN0IGV4aGF1c3QgdGhlIGxpc3RzIHRoZW4gcHJvY2VzcyB0aGVtXG5cdFx0XHRcdGNvbnN0IHBhaXJzID0gW107XG5cdFx0XHRcdGZvciAoY29uc3QgcGFpciBvZiBpbml0KSB7XG5cdFx0XHRcdFx0aWYgKHR5cGVvZiBwYWlyICE9PSAnb2JqZWN0JyB8fCB0eXBlb2YgcGFpcltTeW1ib2wuaXRlcmF0b3JdICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFYWNoIGhlYWRlciBwYWlyIG11c3QgYmUgaXRlcmFibGUnKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cGFpcnMucHVzaChBcnJheS5mcm9tKHBhaXIpKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGZvciAoY29uc3QgcGFpciBvZiBwYWlycykge1xuXHRcdFx0XHRcdGlmIChwYWlyLmxlbmd0aCAhPT0gMikge1xuXHRcdFx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRWFjaCBoZWFkZXIgcGFpciBtdXN0IGJlIGEgbmFtZS92YWx1ZSB0dXBsZScpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0aGlzLmFwcGVuZChwYWlyWzBdLCBwYWlyWzFdKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gcmVjb3JkPEJ5dGVTdHJpbmcsIEJ5dGVTdHJpbmc+XG5cdFx0XHRcdGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGluaXQpKSB7XG5cdFx0XHRcdFx0Y29uc3QgdmFsdWUgPSBpbml0W2tleV07XG5cdFx0XHRcdFx0dGhpcy5hcHBlbmQoa2V5LCB2YWx1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignUHJvdmlkZWQgaW5pdGlhbGl6ZXIgbXVzdCBiZSBhbiBvYmplY3QnKTtcblx0XHR9XG5cdH1cblxuXHQvKipcbiAgKiBSZXR1cm4gY29tYmluZWQgaGVhZGVyIHZhbHVlIGdpdmVuIG5hbWVcbiAgKlxuICAqIEBwYXJhbSAgIFN0cmluZyAgbmFtZSAgSGVhZGVyIG5hbWVcbiAgKiBAcmV0dXJuICBNaXhlZFxuICAqL1xuXHRnZXQobmFtZSkge1xuXHRcdG5hbWUgPSBgJHtuYW1lfWA7XG5cdFx0dmFsaWRhdGVOYW1lKG5hbWUpO1xuXHRcdGNvbnN0IGtleSA9IGZpbmQodGhpc1tNQVBdLCBuYW1lKTtcblx0XHRpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzW01BUF1ba2V5XS5qb2luKCcsICcpO1xuXHR9XG5cblx0LyoqXG4gICogSXRlcmF0ZSBvdmVyIGFsbCBoZWFkZXJzXG4gICpcbiAgKiBAcGFyYW0gICBGdW5jdGlvbiAgY2FsbGJhY2sgIEV4ZWN1dGVkIGZvciBlYWNoIGl0ZW0gd2l0aCBwYXJhbWV0ZXJzICh2YWx1ZSwgbmFtZSwgdGhpc0FyZylcbiAgKiBAcGFyYW0gICBCb29sZWFuICAgdGhpc0FyZyAgIGB0aGlzYCBjb250ZXh0IGZvciBjYWxsYmFjayBmdW5jdGlvblxuICAqIEByZXR1cm4gIFZvaWRcbiAgKi9cblx0Zm9yRWFjaChjYWxsYmFjaykge1xuXHRcdGxldCB0aGlzQXJnID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG5cblx0XHRsZXQgcGFpcnMgPSBnZXRIZWFkZXJzKHRoaXMpO1xuXHRcdGxldCBpID0gMDtcblx0XHR3aGlsZSAoaSA8IHBhaXJzLmxlbmd0aCkge1xuXHRcdFx0dmFyIF9wYWlycyRpID0gcGFpcnNbaV07XG5cdFx0XHRjb25zdCBuYW1lID0gX3BhaXJzJGlbMF0sXG5cdFx0XHQgICAgICB2YWx1ZSA9IF9wYWlycyRpWzFdO1xuXG5cdFx0XHRjYWxsYmFjay5jYWxsKHRoaXNBcmcsIHZhbHVlLCBuYW1lLCB0aGlzKTtcblx0XHRcdHBhaXJzID0gZ2V0SGVhZGVycyh0aGlzKTtcblx0XHRcdGkrKztcblx0XHR9XG5cdH1cblxuXHQvKipcbiAgKiBPdmVyd3JpdGUgaGVhZGVyIHZhbHVlcyBnaXZlbiBuYW1lXG4gICpcbiAgKiBAcGFyYW0gICBTdHJpbmcgIG5hbWUgICBIZWFkZXIgbmFtZVxuICAqIEBwYXJhbSAgIFN0cmluZyAgdmFsdWUgIEhlYWRlciB2YWx1ZVxuICAqIEByZXR1cm4gIFZvaWRcbiAgKi9cblx0c2V0KG5hbWUsIHZhbHVlKSB7XG5cdFx0bmFtZSA9IGAke25hbWV9YDtcblx0XHR2YWx1ZSA9IGAke3ZhbHVlfWA7XG5cdFx0dmFsaWRhdGVOYW1lKG5hbWUpO1xuXHRcdHZhbGlkYXRlVmFsdWUodmFsdWUpO1xuXHRcdGNvbnN0IGtleSA9IGZpbmQodGhpc1tNQVBdLCBuYW1lKTtcblx0XHR0aGlzW01BUF1ba2V5ICE9PSB1bmRlZmluZWQgPyBrZXkgOiBuYW1lXSA9IFt2YWx1ZV07XG5cdH1cblxuXHQvKipcbiAgKiBBcHBlbmQgYSB2YWx1ZSBvbnRvIGV4aXN0aW5nIGhlYWRlclxuICAqXG4gICogQHBhcmFtICAgU3RyaW5nICBuYW1lICAgSGVhZGVyIG5hbWVcbiAgKiBAcGFyYW0gICBTdHJpbmcgIHZhbHVlICBIZWFkZXIgdmFsdWVcbiAgKiBAcmV0dXJuICBWb2lkXG4gICovXG5cdGFwcGVuZChuYW1lLCB2YWx1ZSkge1xuXHRcdG5hbWUgPSBgJHtuYW1lfWA7XG5cdFx0dmFsdWUgPSBgJHt2YWx1ZX1gO1xuXHRcdHZhbGlkYXRlTmFtZShuYW1lKTtcblx0XHR2YWxpZGF0ZVZhbHVlKHZhbHVlKTtcblx0XHRjb25zdCBrZXkgPSBmaW5kKHRoaXNbTUFQXSwgbmFtZSk7XG5cdFx0aWYgKGtleSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzW01BUF1ba2V5XS5wdXNoKHZhbHVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpc1tNQVBdW25hbWVdID0gW3ZhbHVlXTtcblx0XHR9XG5cdH1cblxuXHQvKipcbiAgKiBDaGVjayBmb3IgaGVhZGVyIG5hbWUgZXhpc3RlbmNlXG4gICpcbiAgKiBAcGFyYW0gICBTdHJpbmcgICBuYW1lICBIZWFkZXIgbmFtZVxuICAqIEByZXR1cm4gIEJvb2xlYW5cbiAgKi9cblx0aGFzKG5hbWUpIHtcblx0XHRuYW1lID0gYCR7bmFtZX1gO1xuXHRcdHZhbGlkYXRlTmFtZShuYW1lKTtcblx0XHRyZXR1cm4gZmluZCh0aGlzW01BUF0sIG5hbWUpICE9PSB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcbiAgKiBEZWxldGUgYWxsIGhlYWRlciB2YWx1ZXMgZ2l2ZW4gbmFtZVxuICAqXG4gICogQHBhcmFtICAgU3RyaW5nICBuYW1lICBIZWFkZXIgbmFtZVxuICAqIEByZXR1cm4gIFZvaWRcbiAgKi9cblx0ZGVsZXRlKG5hbWUpIHtcblx0XHRuYW1lID0gYCR7bmFtZX1gO1xuXHRcdHZhbGlkYXRlTmFtZShuYW1lKTtcblx0XHRjb25zdCBrZXkgPSBmaW5kKHRoaXNbTUFQXSwgbmFtZSk7XG5cdFx0aWYgKGtleSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRkZWxldGUgdGhpc1tNQVBdW2tleV07XG5cdFx0fVxuXHR9XG5cblx0LyoqXG4gICogUmV0dXJuIHJhdyBoZWFkZXJzIChub24tc3BlYyBhcGkpXG4gICpcbiAgKiBAcmV0dXJuICBPYmplY3RcbiAgKi9cblx0cmF3KCkge1xuXHRcdHJldHVybiB0aGlzW01BUF07XG5cdH1cblxuXHQvKipcbiAgKiBHZXQgYW4gaXRlcmF0b3Igb24ga2V5cy5cbiAgKlxuICAqIEByZXR1cm4gIEl0ZXJhdG9yXG4gICovXG5cdGtleXMoKSB7XG5cdFx0cmV0dXJuIGNyZWF0ZUhlYWRlcnNJdGVyYXRvcih0aGlzLCAna2V5Jyk7XG5cdH1cblxuXHQvKipcbiAgKiBHZXQgYW4gaXRlcmF0b3Igb24gdmFsdWVzLlxuICAqXG4gICogQHJldHVybiAgSXRlcmF0b3JcbiAgKi9cblx0dmFsdWVzKCkge1xuXHRcdHJldHVybiBjcmVhdGVIZWFkZXJzSXRlcmF0b3IodGhpcywgJ3ZhbHVlJyk7XG5cdH1cblxuXHQvKipcbiAgKiBHZXQgYW4gaXRlcmF0b3Igb24gZW50cmllcy5cbiAgKlxuICAqIFRoaXMgaXMgdGhlIGRlZmF1bHQgaXRlcmF0b3Igb2YgdGhlIEhlYWRlcnMgb2JqZWN0LlxuICAqXG4gICogQHJldHVybiAgSXRlcmF0b3JcbiAgKi9cblx0W1N5bWJvbC5pdGVyYXRvcl0oKSB7XG5cdFx0cmV0dXJuIGNyZWF0ZUhlYWRlcnNJdGVyYXRvcih0aGlzLCAna2V5K3ZhbHVlJyk7XG5cdH1cbn1cbkhlYWRlcnMucHJvdG90eXBlLmVudHJpZXMgPSBIZWFkZXJzLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSGVhZGVycy5wcm90b3R5cGUsIFN5bWJvbC50b1N0cmluZ1RhZywge1xuXHR2YWx1ZTogJ0hlYWRlcnMnLFxuXHR3cml0YWJsZTogZmFsc2UsXG5cdGVudW1lcmFibGU6IGZhbHNlLFxuXHRjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhIZWFkZXJzLnByb3RvdHlwZSwge1xuXHRnZXQ6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHRmb3JFYWNoOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0c2V0OiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0YXBwZW5kOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0aGFzOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0ZGVsZXRlOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0a2V5czogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG5cdHZhbHVlczogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG5cdGVudHJpZXM6IHsgZW51bWVyYWJsZTogdHJ1ZSB9XG59KTtcblxuZnVuY3Rpb24gZ2V0SGVhZGVycyhoZWFkZXJzKSB7XG5cdGxldCBraW5kID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAna2V5K3ZhbHVlJztcblxuXHRjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoaGVhZGVyc1tNQVBdKS5zb3J0KCk7XG5cdHJldHVybiBrZXlzLm1hcChraW5kID09PSAna2V5JyA/IGZ1bmN0aW9uIChrKSB7XG5cdFx0cmV0dXJuIGsudG9Mb3dlckNhc2UoKTtcblx0fSA6IGtpbmQgPT09ICd2YWx1ZScgPyBmdW5jdGlvbiAoaykge1xuXHRcdHJldHVybiBoZWFkZXJzW01BUF1ba10uam9pbignLCAnKTtcblx0fSA6IGZ1bmN0aW9uIChrKSB7XG5cdFx0cmV0dXJuIFtrLnRvTG93ZXJDYXNlKCksIGhlYWRlcnNbTUFQXVtrXS5qb2luKCcsICcpXTtcblx0fSk7XG59XG5cbmNvbnN0IElOVEVSTkFMID0gU3ltYm9sKCdpbnRlcm5hbCcpO1xuXG5mdW5jdGlvbiBjcmVhdGVIZWFkZXJzSXRlcmF0b3IodGFyZ2V0LCBraW5kKSB7XG5cdGNvbnN0IGl0ZXJhdG9yID0gT2JqZWN0LmNyZWF0ZShIZWFkZXJzSXRlcmF0b3JQcm90b3R5cGUpO1xuXHRpdGVyYXRvcltJTlRFUk5BTF0gPSB7XG5cdFx0dGFyZ2V0LFxuXHRcdGtpbmQsXG5cdFx0aW5kZXg6IDBcblx0fTtcblx0cmV0dXJuIGl0ZXJhdG9yO1xufVxuXG5jb25zdCBIZWFkZXJzSXRlcmF0b3JQcm90b3R5cGUgPSBPYmplY3Quc2V0UHJvdG90eXBlT2Yoe1xuXHRuZXh0KCkge1xuXHRcdC8vIGlzdGFuYnVsIGlnbm9yZSBpZlxuXHRcdGlmICghdGhpcyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykgIT09IEhlYWRlcnNJdGVyYXRvclByb3RvdHlwZSkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignVmFsdWUgb2YgYHRoaXNgIGlzIG5vdCBhIEhlYWRlcnNJdGVyYXRvcicpO1xuXHRcdH1cblxuXHRcdHZhciBfSU5URVJOQUwgPSB0aGlzW0lOVEVSTkFMXTtcblx0XHRjb25zdCB0YXJnZXQgPSBfSU5URVJOQUwudGFyZ2V0LFxuXHRcdCAgICAgIGtpbmQgPSBfSU5URVJOQUwua2luZCxcblx0XHQgICAgICBpbmRleCA9IF9JTlRFUk5BTC5pbmRleDtcblxuXHRcdGNvbnN0IHZhbHVlcyA9IGdldEhlYWRlcnModGFyZ2V0LCBraW5kKTtcblx0XHRjb25zdCBsZW4gPSB2YWx1ZXMubGVuZ3RoO1xuXHRcdGlmIChpbmRleCA+PSBsZW4pIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHZhbHVlOiB1bmRlZmluZWQsXG5cdFx0XHRcdGRvbmU6IHRydWVcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0dGhpc1tJTlRFUk5BTF0uaW5kZXggPSBpbmRleCArIDE7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0dmFsdWU6IHZhbHVlc1tpbmRleF0sXG5cdFx0XHRkb25lOiBmYWxzZVxuXHRcdH07XG5cdH1cbn0sIE9iamVjdC5nZXRQcm90b3R5cGVPZihPYmplY3QuZ2V0UHJvdG90eXBlT2YoW11bU3ltYm9sLml0ZXJhdG9yXSgpKSkpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSGVhZGVyc0l0ZXJhdG9yUHJvdG90eXBlLCBTeW1ib2wudG9TdHJpbmdUYWcsIHtcblx0dmFsdWU6ICdIZWFkZXJzSXRlcmF0b3InLFxuXHR3cml0YWJsZTogZmFsc2UsXG5cdGVudW1lcmFibGU6IGZhbHNlLFxuXHRjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG4vKipcbiAqIEV4cG9ydCB0aGUgSGVhZGVycyBvYmplY3QgaW4gYSBmb3JtIHRoYXQgTm9kZS5qcyBjYW4gY29uc3VtZS5cbiAqXG4gKiBAcGFyYW0gICBIZWFkZXJzICBoZWFkZXJzXG4gKiBAcmV0dXJuICBPYmplY3RcbiAqL1xuZnVuY3Rpb24gZXhwb3J0Tm9kZUNvbXBhdGlibGVIZWFkZXJzKGhlYWRlcnMpIHtcblx0Y29uc3Qgb2JqID0gT2JqZWN0LmFzc2lnbih7IF9fcHJvdG9fXzogbnVsbCB9LCBoZWFkZXJzW01BUF0pO1xuXG5cdC8vIGh0dHAucmVxdWVzdCgpIG9ubHkgc3VwcG9ydHMgc3RyaW5nIGFzIEhvc3QgaGVhZGVyLiBUaGlzIGhhY2sgbWFrZXNcblx0Ly8gc3BlY2lmeWluZyBjdXN0b20gSG9zdCBoZWFkZXIgcG9zc2libGUuXG5cdGNvbnN0IGhvc3RIZWFkZXJLZXkgPSBmaW5kKGhlYWRlcnNbTUFQXSwgJ0hvc3QnKTtcblx0aWYgKGhvc3RIZWFkZXJLZXkgIT09IHVuZGVmaW5lZCkge1xuXHRcdG9ialtob3N0SGVhZGVyS2V5XSA9IG9ialtob3N0SGVhZGVyS2V5XVswXTtcblx0fVxuXG5cdHJldHVybiBvYmo7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgSGVhZGVycyBvYmplY3QgZnJvbSBhbiBvYmplY3Qgb2YgaGVhZGVycywgaWdub3JpbmcgdGhvc2UgdGhhdCBkb1xuICogbm90IGNvbmZvcm0gdG8gSFRUUCBncmFtbWFyIHByb2R1Y3Rpb25zLlxuICpcbiAqIEBwYXJhbSAgIE9iamVjdCAgb2JqICBPYmplY3Qgb2YgaGVhZGVyc1xuICogQHJldHVybiAgSGVhZGVyc1xuICovXG5mdW5jdGlvbiBjcmVhdGVIZWFkZXJzTGVuaWVudChvYmopIHtcblx0Y29uc3QgaGVhZGVycyA9IG5ldyBIZWFkZXJzKCk7XG5cdGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3Qua2V5cyhvYmopKSB7XG5cdFx0aWYgKGludmFsaWRUb2tlblJlZ2V4LnRlc3QobmFtZSkpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblx0XHRpZiAoQXJyYXkuaXNBcnJheShvYmpbbmFtZV0pKSB7XG5cdFx0XHRmb3IgKGNvbnN0IHZhbCBvZiBvYmpbbmFtZV0pIHtcblx0XHRcdFx0aWYgKGludmFsaWRIZWFkZXJDaGFyUmVnZXgudGVzdCh2YWwpKSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGhlYWRlcnNbTUFQXVtuYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0aGVhZGVyc1tNQVBdW25hbWVdID0gW3ZhbF07XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aGVhZGVyc1tNQVBdW25hbWVdLnB1c2godmFsKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoIWludmFsaWRIZWFkZXJDaGFyUmVnZXgudGVzdChvYmpbbmFtZV0pKSB7XG5cdFx0XHRoZWFkZXJzW01BUF1bbmFtZV0gPSBbb2JqW25hbWVdXTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGhlYWRlcnM7XG59XG5cbmNvbnN0IElOVEVSTkFMUyQxID0gU3ltYm9sKCdSZXNwb25zZSBpbnRlcm5hbHMnKTtcblxuLy8gZml4IGFuIGlzc3VlIHdoZXJlIFwiU1RBVFVTX0NPREVTXCIgYXJlbid0IGEgbmFtZWQgZXhwb3J0IGZvciBub2RlIDwxMFxuY29uc3QgU1RBVFVTX0NPREVTID0gaHR0cC5TVEFUVVNfQ09ERVM7XG5cbi8qKlxuICogUmVzcG9uc2UgY2xhc3NcbiAqXG4gKiBAcGFyYW0gICBTdHJlYW0gIGJvZHkgIFJlYWRhYmxlIHN0cmVhbVxuICogQHBhcmFtICAgT2JqZWN0ICBvcHRzICBSZXNwb25zZSBvcHRpb25zXG4gKiBAcmV0dXJuICBWb2lkXG4gKi9cbmNsYXNzIFJlc3BvbnNlIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0bGV0IGJvZHkgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IG51bGw7XG5cdFx0bGV0IG9wdHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuXG5cdFx0Qm9keS5jYWxsKHRoaXMsIGJvZHksIG9wdHMpO1xuXG5cdFx0Y29uc3Qgc3RhdHVzID0gb3B0cy5zdGF0dXMgfHwgMjAwO1xuXHRcdGNvbnN0IGhlYWRlcnMgPSBuZXcgSGVhZGVycyhvcHRzLmhlYWRlcnMpO1xuXG5cdFx0aWYgKGJvZHkgIT0gbnVsbCAmJiAhaGVhZGVycy5oYXMoJ0NvbnRlbnQtVHlwZScpKSB7XG5cdFx0XHRjb25zdCBjb250ZW50VHlwZSA9IGV4dHJhY3RDb250ZW50VHlwZShib2R5KTtcblx0XHRcdGlmIChjb250ZW50VHlwZSkge1xuXHRcdFx0XHRoZWFkZXJzLmFwcGVuZCgnQ29udGVudC1UeXBlJywgY29udGVudFR5cGUpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXNbSU5URVJOQUxTJDFdID0ge1xuXHRcdFx0dXJsOiBvcHRzLnVybCxcblx0XHRcdHN0YXR1cyxcblx0XHRcdHN0YXR1c1RleHQ6IG9wdHMuc3RhdHVzVGV4dCB8fCBTVEFUVVNfQ09ERVNbc3RhdHVzXSxcblx0XHRcdGhlYWRlcnMsXG5cdFx0XHRjb3VudGVyOiBvcHRzLmNvdW50ZXJcblx0XHR9O1xuXHR9XG5cblx0Z2V0IHVybCgpIHtcblx0XHRyZXR1cm4gdGhpc1tJTlRFUk5BTFMkMV0udXJsIHx8ICcnO1xuXHR9XG5cblx0Z2V0IHN0YXR1cygpIHtcblx0XHRyZXR1cm4gdGhpc1tJTlRFUk5BTFMkMV0uc3RhdHVzO1xuXHR9XG5cblx0LyoqXG4gICogQ29udmVuaWVuY2UgcHJvcGVydHkgcmVwcmVzZW50aW5nIGlmIHRoZSByZXF1ZXN0IGVuZGVkIG5vcm1hbGx5XG4gICovXG5cdGdldCBvaygpIHtcblx0XHRyZXR1cm4gdGhpc1tJTlRFUk5BTFMkMV0uc3RhdHVzID49IDIwMCAmJiB0aGlzW0lOVEVSTkFMUyQxXS5zdGF0dXMgPCAzMDA7XG5cdH1cblxuXHRnZXQgcmVkaXJlY3RlZCgpIHtcblx0XHRyZXR1cm4gdGhpc1tJTlRFUk5BTFMkMV0uY291bnRlciA+IDA7XG5cdH1cblxuXHRnZXQgc3RhdHVzVGV4dCgpIHtcblx0XHRyZXR1cm4gdGhpc1tJTlRFUk5BTFMkMV0uc3RhdHVzVGV4dDtcblx0fVxuXG5cdGdldCBoZWFkZXJzKCkge1xuXHRcdHJldHVybiB0aGlzW0lOVEVSTkFMUyQxXS5oZWFkZXJzO1xuXHR9XG5cblx0LyoqXG4gICogQ2xvbmUgdGhpcyByZXNwb25zZVxuICAqXG4gICogQHJldHVybiAgUmVzcG9uc2VcbiAgKi9cblx0Y2xvbmUoKSB7XG5cdFx0cmV0dXJuIG5ldyBSZXNwb25zZShjbG9uZSh0aGlzKSwge1xuXHRcdFx0dXJsOiB0aGlzLnVybCxcblx0XHRcdHN0YXR1czogdGhpcy5zdGF0dXMsXG5cdFx0XHRzdGF0dXNUZXh0OiB0aGlzLnN0YXR1c1RleHQsXG5cdFx0XHRoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXG5cdFx0XHRvazogdGhpcy5vayxcblx0XHRcdHJlZGlyZWN0ZWQ6IHRoaXMucmVkaXJlY3RlZFxuXHRcdH0pO1xuXHR9XG59XG5cbkJvZHkubWl4SW4oUmVzcG9uc2UucHJvdG90eXBlKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUmVzcG9uc2UucHJvdG90eXBlLCB7XG5cdHVybDogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG5cdHN0YXR1czogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG5cdG9rOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0cmVkaXJlY3RlZDogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG5cdHN0YXR1c1RleHQ6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHRoZWFkZXJzOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0Y2xvbmU6IHsgZW51bWVyYWJsZTogdHJ1ZSB9XG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlc3BvbnNlLnByb3RvdHlwZSwgU3ltYm9sLnRvU3RyaW5nVGFnLCB7XG5cdHZhbHVlOiAnUmVzcG9uc2UnLFxuXHR3cml0YWJsZTogZmFsc2UsXG5cdGVudW1lcmFibGU6IGZhbHNlLFxuXHRjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5jb25zdCBJTlRFUk5BTFMkMiA9IFN5bWJvbCgnUmVxdWVzdCBpbnRlcm5hbHMnKTtcbmNvbnN0IFVSTCA9IFVybC5VUkwgfHwgd2hhdHdnVXJsLlVSTDtcblxuLy8gZml4IGFuIGlzc3VlIHdoZXJlIFwiZm9ybWF0XCIsIFwicGFyc2VcIiBhcmVuJ3QgYSBuYW1lZCBleHBvcnQgZm9yIG5vZGUgPDEwXG5jb25zdCBwYXJzZV91cmwgPSBVcmwucGFyc2U7XG5jb25zdCBmb3JtYXRfdXJsID0gVXJsLmZvcm1hdDtcblxuLyoqXG4gKiBXcmFwcGVyIGFyb3VuZCBgbmV3IFVSTGAgdG8gaGFuZGxlIGFyYml0cmFyeSBVUkxzXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSB1cmxTdHJcbiAqIEByZXR1cm4ge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHBhcnNlVVJMKHVybFN0cikge1xuXHQvKlxuIFx0Q2hlY2sgd2hldGhlciB0aGUgVVJMIGlzIGFic29sdXRlIG9yIG5vdFxuIFx0XHRTY2hlbWU6IGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tMy4xXG4gXHRBYnNvbHV0ZSBVUkw6IGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tNC4zXG4gKi9cblx0aWYgKC9eW2EtekEtWl1bYS16QS1aXFxkK1xcLS5dKjovLmV4ZWModXJsU3RyKSkge1xuXHRcdHVybFN0ciA9IG5ldyBVUkwodXJsU3RyKS50b1N0cmluZygpO1xuXHR9XG5cblx0Ly8gRmFsbGJhY2sgdG8gb2xkIGltcGxlbWVudGF0aW9uIGZvciBhcmJpdHJhcnkgVVJMc1xuXHRyZXR1cm4gcGFyc2VfdXJsKHVybFN0cik7XG59XG5cbmNvbnN0IHN0cmVhbURlc3RydWN0aW9uU3VwcG9ydGVkID0gJ2Rlc3Ryb3knIGluIFN0cmVhbS5SZWFkYWJsZS5wcm90b3R5cGU7XG5cbi8qKlxuICogQ2hlY2sgaWYgYSB2YWx1ZSBpcyBhbiBpbnN0YW5jZSBvZiBSZXF1ZXN0LlxuICpcbiAqIEBwYXJhbSAgIE1peGVkICAgaW5wdXRcbiAqIEByZXR1cm4gIEJvb2xlYW5cbiAqL1xuZnVuY3Rpb24gaXNSZXF1ZXN0KGlucHV0KSB7XG5cdHJldHVybiB0eXBlb2YgaW5wdXQgPT09ICdvYmplY3QnICYmIHR5cGVvZiBpbnB1dFtJTlRFUk5BTFMkMl0gPT09ICdvYmplY3QnO1xufVxuXG5mdW5jdGlvbiBpc0Fib3J0U2lnbmFsKHNpZ25hbCkge1xuXHRjb25zdCBwcm90byA9IHNpZ25hbCAmJiB0eXBlb2Ygc2lnbmFsID09PSAnb2JqZWN0JyAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2Yoc2lnbmFsKTtcblx0cmV0dXJuICEhKHByb3RvICYmIHByb3RvLmNvbnN0cnVjdG9yLm5hbWUgPT09ICdBYm9ydFNpZ25hbCcpO1xufVxuXG4vKipcbiAqIFJlcXVlc3QgY2xhc3NcbiAqXG4gKiBAcGFyYW0gICBNaXhlZCAgIGlucHV0ICBVcmwgb3IgUmVxdWVzdCBpbnN0YW5jZVxuICogQHBhcmFtICAgT2JqZWN0ICBpbml0ICAgQ3VzdG9tIG9wdGlvbnNcbiAqIEByZXR1cm4gIFZvaWRcbiAqL1xuY2xhc3MgUmVxdWVzdCB7XG5cdGNvbnN0cnVjdG9yKGlucHV0KSB7XG5cdFx0bGV0IGluaXQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuXG5cdFx0bGV0IHBhcnNlZFVSTDtcblxuXHRcdC8vIG5vcm1hbGl6ZSBpbnB1dFxuXHRcdGlmICghaXNSZXF1ZXN0KGlucHV0KSkge1xuXHRcdFx0aWYgKGlucHV0ICYmIGlucHV0LmhyZWYpIHtcblx0XHRcdFx0Ly8gaW4gb3JkZXIgdG8gc3VwcG9ydCBOb2RlLmpzJyBVcmwgb2JqZWN0czsgdGhvdWdoIFdIQVRXRydzIFVSTCBvYmplY3RzXG5cdFx0XHRcdC8vIHdpbGwgZmFsbCBpbnRvIHRoaXMgYnJhbmNoIGFsc28gKHNpbmNlIHRoZWlyIGB0b1N0cmluZygpYCB3aWxsIHJldHVyblxuXHRcdFx0XHQvLyBgaHJlZmAgcHJvcGVydHkgYW55d2F5KVxuXHRcdFx0XHRwYXJzZWRVUkwgPSBwYXJzZVVSTChpbnB1dC5ocmVmKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIGNvZXJjZSBpbnB1dCB0byBhIHN0cmluZyBiZWZvcmUgYXR0ZW1wdGluZyB0byBwYXJzZVxuXHRcdFx0XHRwYXJzZWRVUkwgPSBwYXJzZVVSTChgJHtpbnB1dH1gKTtcblx0XHRcdH1cblx0XHRcdGlucHV0ID0ge307XG5cdFx0fSBlbHNlIHtcblx0XHRcdHBhcnNlZFVSTCA9IHBhcnNlVVJMKGlucHV0LnVybCk7XG5cdFx0fVxuXG5cdFx0bGV0IG1ldGhvZCA9IGluaXQubWV0aG9kIHx8IGlucHV0Lm1ldGhvZCB8fCAnR0VUJztcblx0XHRtZXRob2QgPSBtZXRob2QudG9VcHBlckNhc2UoKTtcblxuXHRcdGlmICgoaW5pdC5ib2R5ICE9IG51bGwgfHwgaXNSZXF1ZXN0KGlucHV0KSAmJiBpbnB1dC5ib2R5ICE9PSBudWxsKSAmJiAobWV0aG9kID09PSAnR0VUJyB8fCBtZXRob2QgPT09ICdIRUFEJykpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlcXVlc3Qgd2l0aCBHRVQvSEVBRCBtZXRob2QgY2Fubm90IGhhdmUgYm9keScpO1xuXHRcdH1cblxuXHRcdGxldCBpbnB1dEJvZHkgPSBpbml0LmJvZHkgIT0gbnVsbCA/IGluaXQuYm9keSA6IGlzUmVxdWVzdChpbnB1dCkgJiYgaW5wdXQuYm9keSAhPT0gbnVsbCA/IGNsb25lKGlucHV0KSA6IG51bGw7XG5cblx0XHRCb2R5LmNhbGwodGhpcywgaW5wdXRCb2R5LCB7XG5cdFx0XHR0aW1lb3V0OiBpbml0LnRpbWVvdXQgfHwgaW5wdXQudGltZW91dCB8fCAwLFxuXHRcdFx0c2l6ZTogaW5pdC5zaXplIHx8IGlucHV0LnNpemUgfHwgMFxuXHRcdH0pO1xuXG5cdFx0Y29uc3QgaGVhZGVycyA9IG5ldyBIZWFkZXJzKGluaXQuaGVhZGVycyB8fCBpbnB1dC5oZWFkZXJzIHx8IHt9KTtcblxuXHRcdGlmIChpbnB1dEJvZHkgIT0gbnVsbCAmJiAhaGVhZGVycy5oYXMoJ0NvbnRlbnQtVHlwZScpKSB7XG5cdFx0XHRjb25zdCBjb250ZW50VHlwZSA9IGV4dHJhY3RDb250ZW50VHlwZShpbnB1dEJvZHkpO1xuXHRcdFx0aWYgKGNvbnRlbnRUeXBlKSB7XG5cdFx0XHRcdGhlYWRlcnMuYXBwZW5kKCdDb250ZW50LVR5cGUnLCBjb250ZW50VHlwZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0bGV0IHNpZ25hbCA9IGlzUmVxdWVzdChpbnB1dCkgPyBpbnB1dC5zaWduYWwgOiBudWxsO1xuXHRcdGlmICgnc2lnbmFsJyBpbiBpbml0KSBzaWduYWwgPSBpbml0LnNpZ25hbDtcblxuXHRcdGlmIChzaWduYWwgIT0gbnVsbCAmJiAhaXNBYm9ydFNpZ25hbChzaWduYWwpKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBzaWduYWwgdG8gYmUgYW4gaW5zdGFuY2VvZiBBYm9ydFNpZ25hbCcpO1xuXHRcdH1cblxuXHRcdHRoaXNbSU5URVJOQUxTJDJdID0ge1xuXHRcdFx0bWV0aG9kLFxuXHRcdFx0cmVkaXJlY3Q6IGluaXQucmVkaXJlY3QgfHwgaW5wdXQucmVkaXJlY3QgfHwgJ2ZvbGxvdycsXG5cdFx0XHRoZWFkZXJzLFxuXHRcdFx0cGFyc2VkVVJMLFxuXHRcdFx0c2lnbmFsXG5cdFx0fTtcblxuXHRcdC8vIG5vZGUtZmV0Y2gtb25seSBvcHRpb25zXG5cdFx0dGhpcy5mb2xsb3cgPSBpbml0LmZvbGxvdyAhPT0gdW5kZWZpbmVkID8gaW5pdC5mb2xsb3cgOiBpbnB1dC5mb2xsb3cgIT09IHVuZGVmaW5lZCA/IGlucHV0LmZvbGxvdyA6IDIwO1xuXHRcdHRoaXMuY29tcHJlc3MgPSBpbml0LmNvbXByZXNzICE9PSB1bmRlZmluZWQgPyBpbml0LmNvbXByZXNzIDogaW5wdXQuY29tcHJlc3MgIT09IHVuZGVmaW5lZCA/IGlucHV0LmNvbXByZXNzIDogdHJ1ZTtcblx0XHR0aGlzLmNvdW50ZXIgPSBpbml0LmNvdW50ZXIgfHwgaW5wdXQuY291bnRlciB8fCAwO1xuXHRcdHRoaXMuYWdlbnQgPSBpbml0LmFnZW50IHx8IGlucHV0LmFnZW50O1xuXHR9XG5cblx0Z2V0IG1ldGhvZCgpIHtcblx0XHRyZXR1cm4gdGhpc1tJTlRFUk5BTFMkMl0ubWV0aG9kO1xuXHR9XG5cblx0Z2V0IHVybCgpIHtcblx0XHRyZXR1cm4gZm9ybWF0X3VybCh0aGlzW0lOVEVSTkFMUyQyXS5wYXJzZWRVUkwpO1xuXHR9XG5cblx0Z2V0IGhlYWRlcnMoKSB7XG5cdFx0cmV0dXJuIHRoaXNbSU5URVJOQUxTJDJdLmhlYWRlcnM7XG5cdH1cblxuXHRnZXQgcmVkaXJlY3QoKSB7XG5cdFx0cmV0dXJuIHRoaXNbSU5URVJOQUxTJDJdLnJlZGlyZWN0O1xuXHR9XG5cblx0Z2V0IHNpZ25hbCgpIHtcblx0XHRyZXR1cm4gdGhpc1tJTlRFUk5BTFMkMl0uc2lnbmFsO1xuXHR9XG5cblx0LyoqXG4gICogQ2xvbmUgdGhpcyByZXF1ZXN0XG4gICpcbiAgKiBAcmV0dXJuICBSZXF1ZXN0XG4gICovXG5cdGNsb25lKCkge1xuXHRcdHJldHVybiBuZXcgUmVxdWVzdCh0aGlzKTtcblx0fVxufVxuXG5Cb2R5Lm1peEluKFJlcXVlc3QucHJvdG90eXBlKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlcXVlc3QucHJvdG90eXBlLCBTeW1ib2wudG9TdHJpbmdUYWcsIHtcblx0dmFsdWU6ICdSZXF1ZXN0Jyxcblx0d3JpdGFibGU6IGZhbHNlLFxuXHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0Y29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUmVxdWVzdC5wcm90b3R5cGUsIHtcblx0bWV0aG9kOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0dXJsOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0aGVhZGVyczogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG5cdHJlZGlyZWN0OiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0Y2xvbmU6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHRzaWduYWw6IHsgZW51bWVyYWJsZTogdHJ1ZSB9XG59KTtcblxuLyoqXG4gKiBDb252ZXJ0IGEgUmVxdWVzdCB0byBOb2RlLmpzIGh0dHAgcmVxdWVzdCBvcHRpb25zLlxuICpcbiAqIEBwYXJhbSAgIFJlcXVlc3QgIEEgUmVxdWVzdCBpbnN0YW5jZVxuICogQHJldHVybiAgT2JqZWN0ICAgVGhlIG9wdGlvbnMgb2JqZWN0IHRvIGJlIHBhc3NlZCB0byBodHRwLnJlcXVlc3RcbiAqL1xuZnVuY3Rpb24gZ2V0Tm9kZVJlcXVlc3RPcHRpb25zKHJlcXVlc3QpIHtcblx0Y29uc3QgcGFyc2VkVVJMID0gcmVxdWVzdFtJTlRFUk5BTFMkMl0ucGFyc2VkVVJMO1xuXHRjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMocmVxdWVzdFtJTlRFUk5BTFMkMl0uaGVhZGVycyk7XG5cblx0Ly8gZmV0Y2ggc3RlcCAxLjNcblx0aWYgKCFoZWFkZXJzLmhhcygnQWNjZXB0JykpIHtcblx0XHRoZWFkZXJzLnNldCgnQWNjZXB0JywgJyovKicpO1xuXHR9XG5cblx0Ly8gQmFzaWMgZmV0Y2hcblx0aWYgKCFwYXJzZWRVUkwucHJvdG9jb2wgfHwgIXBhcnNlZFVSTC5ob3N0bmFtZSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09ubHkgYWJzb2x1dGUgVVJMcyBhcmUgc3VwcG9ydGVkJyk7XG5cdH1cblxuXHRpZiAoIS9eaHR0cHM/OiQvLnRlc3QocGFyc2VkVVJMLnByb3RvY29sKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09ubHkgSFRUUChTKSBwcm90b2NvbHMgYXJlIHN1cHBvcnRlZCcpO1xuXHR9XG5cblx0aWYgKHJlcXVlc3Quc2lnbmFsICYmIHJlcXVlc3QuYm9keSBpbnN0YW5jZW9mIFN0cmVhbS5SZWFkYWJsZSAmJiAhc3RyZWFtRGVzdHJ1Y3Rpb25TdXBwb3J0ZWQpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ0NhbmNlbGxhdGlvbiBvZiBzdHJlYW1lZCByZXF1ZXN0cyB3aXRoIEFib3J0U2lnbmFsIGlzIG5vdCBzdXBwb3J0ZWQgaW4gbm9kZSA8IDgnKTtcblx0fVxuXG5cdC8vIEhUVFAtbmV0d29yay1vci1jYWNoZSBmZXRjaCBzdGVwcyAyLjQtMi43XG5cdGxldCBjb250ZW50TGVuZ3RoVmFsdWUgPSBudWxsO1xuXHRpZiAocmVxdWVzdC5ib2R5ID09IG51bGwgJiYgL14oUE9TVHxQVVQpJC9pLnRlc3QocmVxdWVzdC5tZXRob2QpKSB7XG5cdFx0Y29udGVudExlbmd0aFZhbHVlID0gJzAnO1xuXHR9XG5cdGlmIChyZXF1ZXN0LmJvZHkgIT0gbnVsbCkge1xuXHRcdGNvbnN0IHRvdGFsQnl0ZXMgPSBnZXRUb3RhbEJ5dGVzKHJlcXVlc3QpO1xuXHRcdGlmICh0eXBlb2YgdG90YWxCeXRlcyA9PT0gJ251bWJlcicpIHtcblx0XHRcdGNvbnRlbnRMZW5ndGhWYWx1ZSA9IFN0cmluZyh0b3RhbEJ5dGVzKTtcblx0XHR9XG5cdH1cblx0aWYgKGNvbnRlbnRMZW5ndGhWYWx1ZSkge1xuXHRcdGhlYWRlcnMuc2V0KCdDb250ZW50LUxlbmd0aCcsIGNvbnRlbnRMZW5ndGhWYWx1ZSk7XG5cdH1cblxuXHQvLyBIVFRQLW5ldHdvcmstb3ItY2FjaGUgZmV0Y2ggc3RlcCAyLjExXG5cdGlmICghaGVhZGVycy5oYXMoJ1VzZXItQWdlbnQnKSkge1xuXHRcdGhlYWRlcnMuc2V0KCdVc2VyLUFnZW50JywgJ25vZGUtZmV0Y2gvMS4wICgraHR0cHM6Ly9naXRodWIuY29tL2JpdGlubi9ub2RlLWZldGNoKScpO1xuXHR9XG5cblx0Ly8gSFRUUC1uZXR3b3JrLW9yLWNhY2hlIGZldGNoIHN0ZXAgMi4xNVxuXHRpZiAocmVxdWVzdC5jb21wcmVzcyAmJiAhaGVhZGVycy5oYXMoJ0FjY2VwdC1FbmNvZGluZycpKSB7XG5cdFx0aGVhZGVycy5zZXQoJ0FjY2VwdC1FbmNvZGluZycsICdnemlwLGRlZmxhdGUnKTtcblx0fVxuXG5cdGxldCBhZ2VudCA9IHJlcXVlc3QuYWdlbnQ7XG5cdGlmICh0eXBlb2YgYWdlbnQgPT09ICdmdW5jdGlvbicpIHtcblx0XHRhZ2VudCA9IGFnZW50KHBhcnNlZFVSTCk7XG5cdH1cblxuXHQvLyBIVFRQLW5ldHdvcmsgZmV0Y2ggc3RlcCA0LjJcblx0Ly8gY2h1bmtlZCBlbmNvZGluZyBpcyBoYW5kbGVkIGJ5IE5vZGUuanNcblxuXHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgcGFyc2VkVVJMLCB7XG5cdFx0bWV0aG9kOiByZXF1ZXN0Lm1ldGhvZCxcblx0XHRoZWFkZXJzOiBleHBvcnROb2RlQ29tcGF0aWJsZUhlYWRlcnMoaGVhZGVycyksXG5cdFx0YWdlbnRcblx0fSk7XG59XG5cbi8qKlxuICogYWJvcnQtZXJyb3IuanNcbiAqXG4gKiBBYm9ydEVycm9yIGludGVyZmFjZSBmb3IgY2FuY2VsbGVkIHJlcXVlc3RzXG4gKi9cblxuLyoqXG4gKiBDcmVhdGUgQWJvcnRFcnJvciBpbnN0YW5jZVxuICpcbiAqIEBwYXJhbSAgIFN0cmluZyAgICAgIG1lc3NhZ2UgICAgICBFcnJvciBtZXNzYWdlIGZvciBodW1hblxuICogQHJldHVybiAgQWJvcnRFcnJvclxuICovXG5mdW5jdGlvbiBBYm9ydEVycm9yKG1lc3NhZ2UpIHtcbiAgRXJyb3IuY2FsbCh0aGlzLCBtZXNzYWdlKTtcblxuICB0aGlzLnR5cGUgPSAnYWJvcnRlZCc7XG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG5cbiAgLy8gaGlkZSBjdXN0b20gZXJyb3IgaW1wbGVtZW50YXRpb24gZGV0YWlscyBmcm9tIGVuZC11c2Vyc1xuICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbn1cblxuQWJvcnRFcnJvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSk7XG5BYm9ydEVycm9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEFib3J0RXJyb3I7XG5BYm9ydEVycm9yLnByb3RvdHlwZS5uYW1lID0gJ0Fib3J0RXJyb3InO1xuXG5jb25zdCBVUkwkMSA9IFVybC5VUkwgfHwgd2hhdHdnVXJsLlVSTDtcblxuLy8gZml4IGFuIGlzc3VlIHdoZXJlIFwiUGFzc1Rocm91Z2hcIiwgXCJyZXNvbHZlXCIgYXJlbid0IGEgbmFtZWQgZXhwb3J0IGZvciBub2RlIDwxMFxuY29uc3QgUGFzc1Rocm91Z2gkMSA9IFN0cmVhbS5QYXNzVGhyb3VnaDtcblxuY29uc3QgaXNEb21haW5PclN1YmRvbWFpbiA9IGZ1bmN0aW9uIGlzRG9tYWluT3JTdWJkb21haW4oZGVzdGluYXRpb24sIG9yaWdpbmFsKSB7XG5cdGNvbnN0IG9yaWcgPSBuZXcgVVJMJDEob3JpZ2luYWwpLmhvc3RuYW1lO1xuXHRjb25zdCBkZXN0ID0gbmV3IFVSTCQxKGRlc3RpbmF0aW9uKS5ob3N0bmFtZTtcblxuXHRyZXR1cm4gb3JpZyA9PT0gZGVzdCB8fCBvcmlnW29yaWcubGVuZ3RoIC0gZGVzdC5sZW5ndGggLSAxXSA9PT0gJy4nICYmIG9yaWcuZW5kc1dpdGgoZGVzdCk7XG59O1xuXG4vKipcbiAqIGlzU2FtZVByb3RvY29sIHJlcG9ydHMgd2hldGhlciB0aGUgdHdvIHByb3ZpZGVkIFVSTHMgdXNlIHRoZSBzYW1lIHByb3RvY29sLlxuICpcbiAqIEJvdGggZG9tYWlucyBtdXN0IGFscmVhZHkgYmUgaW4gY2Fub25pY2FsIGZvcm0uXG4gKiBAcGFyYW0ge3N0cmluZ3xVUkx9IG9yaWdpbmFsXG4gKiBAcGFyYW0ge3N0cmluZ3xVUkx9IGRlc3RpbmF0aW9uXG4gKi9cbmNvbnN0IGlzU2FtZVByb3RvY29sID0gZnVuY3Rpb24gaXNTYW1lUHJvdG9jb2woZGVzdGluYXRpb24sIG9yaWdpbmFsKSB7XG5cdGNvbnN0IG9yaWcgPSBuZXcgVVJMJDEob3JpZ2luYWwpLnByb3RvY29sO1xuXHRjb25zdCBkZXN0ID0gbmV3IFVSTCQxKGRlc3RpbmF0aW9uKS5wcm90b2NvbDtcblxuXHRyZXR1cm4gb3JpZyA9PT0gZGVzdDtcbn07XG5cbi8qKlxuICogRmV0Y2ggZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0gICBNaXhlZCAgICB1cmwgICBBYnNvbHV0ZSB1cmwgb3IgUmVxdWVzdCBpbnN0YW5jZVxuICogQHBhcmFtICAgT2JqZWN0ICAgb3B0cyAgRmV0Y2ggb3B0aW9uc1xuICogQHJldHVybiAgUHJvbWlzZVxuICovXG5mdW5jdGlvbiBmZXRjaCh1cmwsIG9wdHMpIHtcblxuXHQvLyBhbGxvdyBjdXN0b20gcHJvbWlzZVxuXHRpZiAoIWZldGNoLlByb21pc2UpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ25hdGl2ZSBwcm9taXNlIG1pc3NpbmcsIHNldCBmZXRjaC5Qcm9taXNlIHRvIHlvdXIgZmF2b3JpdGUgYWx0ZXJuYXRpdmUnKTtcblx0fVxuXG5cdEJvZHkuUHJvbWlzZSA9IGZldGNoLlByb21pc2U7XG5cblx0Ly8gd3JhcCBodHRwLnJlcXVlc3QgaW50byBmZXRjaFxuXHRyZXR1cm4gbmV3IGZldGNoLlByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuXHRcdC8vIGJ1aWxkIHJlcXVlc3Qgb2JqZWN0XG5cdFx0Y29uc3QgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KHVybCwgb3B0cyk7XG5cdFx0Y29uc3Qgb3B0aW9ucyA9IGdldE5vZGVSZXF1ZXN0T3B0aW9ucyhyZXF1ZXN0KTtcblxuXHRcdGNvbnN0IHNlbmQgPSAob3B0aW9ucy5wcm90b2NvbCA9PT0gJ2h0dHBzOicgPyBodHRwcyA6IGh0dHApLnJlcXVlc3Q7XG5cdFx0Y29uc3Qgc2lnbmFsID0gcmVxdWVzdC5zaWduYWw7XG5cblx0XHRsZXQgcmVzcG9uc2UgPSBudWxsO1xuXG5cdFx0Y29uc3QgYWJvcnQgPSBmdW5jdGlvbiBhYm9ydCgpIHtcblx0XHRcdGxldCBlcnJvciA9IG5ldyBBYm9ydEVycm9yKCdUaGUgdXNlciBhYm9ydGVkIGEgcmVxdWVzdC4nKTtcblx0XHRcdHJlamVjdChlcnJvcik7XG5cdFx0XHRpZiAocmVxdWVzdC5ib2R5ICYmIHJlcXVlc3QuYm9keSBpbnN0YW5jZW9mIFN0cmVhbS5SZWFkYWJsZSkge1xuXHRcdFx0XHRkZXN0cm95U3RyZWFtKHJlcXVlc3QuYm9keSwgZXJyb3IpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCFyZXNwb25zZSB8fCAhcmVzcG9uc2UuYm9keSkgcmV0dXJuO1xuXHRcdFx0cmVzcG9uc2UuYm9keS5lbWl0KCdlcnJvcicsIGVycm9yKTtcblx0XHR9O1xuXG5cdFx0aWYgKHNpZ25hbCAmJiBzaWduYWwuYWJvcnRlZCkge1xuXHRcdFx0YWJvcnQoKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBhYm9ydEFuZEZpbmFsaXplID0gZnVuY3Rpb24gYWJvcnRBbmRGaW5hbGl6ZSgpIHtcblx0XHRcdGFib3J0KCk7XG5cdFx0XHRmaW5hbGl6ZSgpO1xuXHRcdH07XG5cblx0XHQvLyBzZW5kIHJlcXVlc3Rcblx0XHRjb25zdCByZXEgPSBzZW5kKG9wdGlvbnMpO1xuXHRcdGxldCByZXFUaW1lb3V0O1xuXG5cdFx0aWYgKHNpZ25hbCkge1xuXHRcdFx0c2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnRBbmRGaW5hbGl6ZSk7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gZmluYWxpemUoKSB7XG5cdFx0XHRyZXEuYWJvcnQoKTtcblx0XHRcdGlmIChzaWduYWwpIHNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0QW5kRmluYWxpemUpO1xuXHRcdFx0Y2xlYXJUaW1lb3V0KHJlcVRpbWVvdXQpO1xuXHRcdH1cblxuXHRcdGlmIChyZXF1ZXN0LnRpbWVvdXQpIHtcblx0XHRcdHJlcS5vbmNlKCdzb2NrZXQnLCBmdW5jdGlvbiAoc29ja2V0KSB7XG5cdFx0XHRcdHJlcVRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRyZWplY3QobmV3IEZldGNoRXJyb3IoYG5ldHdvcmsgdGltZW91dCBhdDogJHtyZXF1ZXN0LnVybH1gLCAncmVxdWVzdC10aW1lb3V0JykpO1xuXHRcdFx0XHRcdGZpbmFsaXplKCk7XG5cdFx0XHRcdH0sIHJlcXVlc3QudGltZW91dCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRyZXEub24oJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xuXHRcdFx0cmVqZWN0KG5ldyBGZXRjaEVycm9yKGByZXF1ZXN0IHRvICR7cmVxdWVzdC51cmx9IGZhaWxlZCwgcmVhc29uOiAke2Vyci5tZXNzYWdlfWAsICdzeXN0ZW0nLCBlcnIpKTtcblxuXHRcdFx0aWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLmJvZHkpIHtcblx0XHRcdFx0ZGVzdHJveVN0cmVhbShyZXNwb25zZS5ib2R5LCBlcnIpO1xuXHRcdFx0fVxuXG5cdFx0XHRmaW5hbGl6ZSgpO1xuXHRcdH0pO1xuXG5cdFx0Zml4UmVzcG9uc2VDaHVua2VkVHJhbnNmZXJCYWRFbmRpbmcocmVxLCBmdW5jdGlvbiAoZXJyKSB7XG5cdFx0XHRpZiAoc2lnbmFsICYmIHNpZ25hbC5hYm9ydGVkKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLmJvZHkpIHtcblx0XHRcdFx0ZGVzdHJveVN0cmVhbShyZXNwb25zZS5ib2R5LCBlcnIpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0LyogYzggaWdub3JlIG5leHQgMTggKi9cblx0XHRpZiAocGFyc2VJbnQocHJvY2Vzcy52ZXJzaW9uLnN1YnN0cmluZygxKSkgPCAxNCkge1xuXHRcdFx0Ly8gQmVmb3JlIE5vZGUuanMgMTQsIHBpcGVsaW5lKCkgZG9lcyBub3QgZnVsbHkgc3VwcG9ydCBhc3luYyBpdGVyYXRvcnMgYW5kIGRvZXMgbm90IGFsd2F5c1xuXHRcdFx0Ly8gcHJvcGVybHkgaGFuZGxlIHdoZW4gdGhlIHNvY2tldCBjbG9zZS9lbmQgZXZlbnRzIGFyZSBvdXQgb2Ygb3JkZXIuXG5cdFx0XHRyZXEub24oJ3NvY2tldCcsIGZ1bmN0aW9uIChzKSB7XG5cdFx0XHRcdHMuYWRkTGlzdGVuZXIoJ2Nsb3NlJywgZnVuY3Rpb24gKGhhZEVycm9yKSB7XG5cdFx0XHRcdFx0Ly8gaWYgYSBkYXRhIGxpc3RlbmVyIGlzIHN0aWxsIHByZXNlbnQgd2UgZGlkbid0IGVuZCBjbGVhbmx5XG5cdFx0XHRcdFx0Y29uc3QgaGFzRGF0YUxpc3RlbmVyID0gcy5saXN0ZW5lckNvdW50KCdkYXRhJykgPiAwO1xuXG5cdFx0XHRcdFx0Ly8gaWYgZW5kIGhhcHBlbmVkIGJlZm9yZSBjbG9zZSBidXQgdGhlIHNvY2tldCBkaWRuJ3QgZW1pdCBhbiBlcnJvciwgZG8gaXQgbm93XG5cdFx0XHRcdFx0aWYgKHJlc3BvbnNlICYmIGhhc0RhdGFMaXN0ZW5lciAmJiAhaGFkRXJyb3IgJiYgIShzaWduYWwgJiYgc2lnbmFsLmFib3J0ZWQpKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBlcnIgPSBuZXcgRXJyb3IoJ1ByZW1hdHVyZSBjbG9zZScpO1xuXHRcdFx0XHRcdFx0ZXJyLmNvZGUgPSAnRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UnO1xuXHRcdFx0XHRcdFx0cmVzcG9uc2UuYm9keS5lbWl0KCdlcnJvcicsIGVycik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHJlcS5vbigncmVzcG9uc2UnLCBmdW5jdGlvbiAocmVzKSB7XG5cdFx0XHRjbGVhclRpbWVvdXQocmVxVGltZW91dCk7XG5cblx0XHRcdGNvbnN0IGhlYWRlcnMgPSBjcmVhdGVIZWFkZXJzTGVuaWVudChyZXMuaGVhZGVycyk7XG5cblx0XHRcdC8vIEhUVFAgZmV0Y2ggc3RlcCA1XG5cdFx0XHRpZiAoZmV0Y2guaXNSZWRpcmVjdChyZXMuc3RhdHVzQ29kZSkpIHtcblx0XHRcdFx0Ly8gSFRUUCBmZXRjaCBzdGVwIDUuMlxuXHRcdFx0XHRjb25zdCBsb2NhdGlvbiA9IGhlYWRlcnMuZ2V0KCdMb2NhdGlvbicpO1xuXG5cdFx0XHRcdC8vIEhUVFAgZmV0Y2ggc3RlcCA1LjNcblx0XHRcdFx0bGV0IGxvY2F0aW9uVVJMID0gbnVsbDtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRsb2NhdGlvblVSTCA9IGxvY2F0aW9uID09PSBudWxsID8gbnVsbCA6IG5ldyBVUkwkMShsb2NhdGlvbiwgcmVxdWVzdC51cmwpLnRvU3RyaW5nKCk7XG5cdFx0XHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0XHRcdC8vIGVycm9yIGhlcmUgY2FuIG9ubHkgYmUgaW52YWxpZCBVUkwgaW4gTG9jYXRpb246IGhlYWRlclxuXHRcdFx0XHRcdC8vIGRvIG5vdCB0aHJvdyB3aGVuIG9wdGlvbnMucmVkaXJlY3QgPT0gbWFudWFsXG5cdFx0XHRcdFx0Ly8gbGV0IHRoZSB1c2VyIGV4dHJhY3QgdGhlIGVycm9ybmVvdXMgcmVkaXJlY3QgVVJMXG5cdFx0XHRcdFx0aWYgKHJlcXVlc3QucmVkaXJlY3QgIT09ICdtYW51YWwnKSB7XG5cdFx0XHRcdFx0XHRyZWplY3QobmV3IEZldGNoRXJyb3IoYHVyaSByZXF1ZXN0ZWQgcmVzcG9uZHMgd2l0aCBhbiBpbnZhbGlkIHJlZGlyZWN0IFVSTDogJHtsb2NhdGlvbn1gLCAnaW52YWxpZC1yZWRpcmVjdCcpKTtcblx0XHRcdFx0XHRcdGZpbmFsaXplKCk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gSFRUUCBmZXRjaCBzdGVwIDUuNVxuXHRcdFx0XHRzd2l0Y2ggKHJlcXVlc3QucmVkaXJlY3QpIHtcblx0XHRcdFx0XHRjYXNlICdlcnJvcic6XG5cdFx0XHRcdFx0XHRyZWplY3QobmV3IEZldGNoRXJyb3IoYHVyaSByZXF1ZXN0ZWQgcmVzcG9uZHMgd2l0aCBhIHJlZGlyZWN0LCByZWRpcmVjdCBtb2RlIGlzIHNldCB0byBlcnJvcjogJHtyZXF1ZXN0LnVybH1gLCAnbm8tcmVkaXJlY3QnKSk7XG5cdFx0XHRcdFx0XHRmaW5hbGl6ZSgpO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdGNhc2UgJ21hbnVhbCc6XG5cdFx0XHRcdFx0XHQvLyBub2RlLWZldGNoLXNwZWNpZmljIHN0ZXA6IG1ha2UgbWFudWFsIHJlZGlyZWN0IGEgYml0IGVhc2llciB0byB1c2UgYnkgc2V0dGluZyB0aGUgTG9jYXRpb24gaGVhZGVyIHZhbHVlIHRvIHRoZSByZXNvbHZlZCBVUkwuXG5cdFx0XHRcdFx0XHRpZiAobG9jYXRpb25VUkwgIT09IG51bGwpIHtcblx0XHRcdFx0XHRcdFx0Ly8gaGFuZGxlIGNvcnJ1cHRlZCBoZWFkZXJcblx0XHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0XHRoZWFkZXJzLnNldCgnTG9jYXRpb24nLCBsb2NhdGlvblVSTCk7XG5cdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0XHRcdFx0XHRcdC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBub2RlanMgc2VydmVyIHByZXZlbnQgaW52YWxpZCByZXNwb25zZSBoZWFkZXJzLCB3ZSBjYW4ndCB0ZXN0IHRoaXMgdGhyb3VnaCBub3JtYWwgcmVxdWVzdFxuXHRcdFx0XHRcdFx0XHRcdHJlamVjdChlcnIpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdmb2xsb3cnOlxuXHRcdFx0XHRcdFx0Ly8gSFRUUC1yZWRpcmVjdCBmZXRjaCBzdGVwIDJcblx0XHRcdFx0XHRcdGlmIChsb2NhdGlvblVSTCA9PT0gbnVsbCkge1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gSFRUUC1yZWRpcmVjdCBmZXRjaCBzdGVwIDVcblx0XHRcdFx0XHRcdGlmIChyZXF1ZXN0LmNvdW50ZXIgPj0gcmVxdWVzdC5mb2xsb3cpIHtcblx0XHRcdFx0XHRcdFx0cmVqZWN0KG5ldyBGZXRjaEVycm9yKGBtYXhpbXVtIHJlZGlyZWN0IHJlYWNoZWQgYXQ6ICR7cmVxdWVzdC51cmx9YCwgJ21heC1yZWRpcmVjdCcpKTtcblx0XHRcdFx0XHRcdFx0ZmluYWxpemUoKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBIVFRQLXJlZGlyZWN0IGZldGNoIHN0ZXAgNiAoY291bnRlciBpbmNyZW1lbnQpXG5cdFx0XHRcdFx0XHQvLyBDcmVhdGUgYSBuZXcgUmVxdWVzdCBvYmplY3QuXG5cdFx0XHRcdFx0XHRjb25zdCByZXF1ZXN0T3B0cyA9IHtcblx0XHRcdFx0XHRcdFx0aGVhZGVyczogbmV3IEhlYWRlcnMocmVxdWVzdC5oZWFkZXJzKSxcblx0XHRcdFx0XHRcdFx0Zm9sbG93OiByZXF1ZXN0LmZvbGxvdyxcblx0XHRcdFx0XHRcdFx0Y291bnRlcjogcmVxdWVzdC5jb3VudGVyICsgMSxcblx0XHRcdFx0XHRcdFx0YWdlbnQ6IHJlcXVlc3QuYWdlbnQsXG5cdFx0XHRcdFx0XHRcdGNvbXByZXNzOiByZXF1ZXN0LmNvbXByZXNzLFxuXHRcdFx0XHRcdFx0XHRtZXRob2Q6IHJlcXVlc3QubWV0aG9kLFxuXHRcdFx0XHRcdFx0XHRib2R5OiByZXF1ZXN0LmJvZHksXG5cdFx0XHRcdFx0XHRcdHNpZ25hbDogcmVxdWVzdC5zaWduYWwsXG5cdFx0XHRcdFx0XHRcdHRpbWVvdXQ6IHJlcXVlc3QudGltZW91dCxcblx0XHRcdFx0XHRcdFx0c2l6ZTogcmVxdWVzdC5zaXplXG5cdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0XHRpZiAoIWlzRG9tYWluT3JTdWJkb21haW4ocmVxdWVzdC51cmwsIGxvY2F0aW9uVVJMKSB8fCAhaXNTYW1lUHJvdG9jb2wocmVxdWVzdC51cmwsIGxvY2F0aW9uVVJMKSkge1xuXHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IG5hbWUgb2YgWydhdXRob3JpemF0aW9uJywgJ3d3dy1hdXRoZW50aWNhdGUnLCAnY29va2llJywgJ2Nvb2tpZTInXSkge1xuXHRcdFx0XHRcdFx0XHRcdHJlcXVlc3RPcHRzLmhlYWRlcnMuZGVsZXRlKG5hbWUpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIEhUVFAtcmVkaXJlY3QgZmV0Y2ggc3RlcCA5XG5cdFx0XHRcdFx0XHRpZiAocmVzLnN0YXR1c0NvZGUgIT09IDMwMyAmJiByZXF1ZXN0LmJvZHkgJiYgZ2V0VG90YWxCeXRlcyhyZXF1ZXN0KSA9PT0gbnVsbCkge1xuXHRcdFx0XHRcdFx0XHRyZWplY3QobmV3IEZldGNoRXJyb3IoJ0Nhbm5vdCBmb2xsb3cgcmVkaXJlY3Qgd2l0aCBib2R5IGJlaW5nIGEgcmVhZGFibGUgc3RyZWFtJywgJ3Vuc3VwcG9ydGVkLXJlZGlyZWN0JykpO1xuXHRcdFx0XHRcdFx0XHRmaW5hbGl6ZSgpO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIEhUVFAtcmVkaXJlY3QgZmV0Y2ggc3RlcCAxMVxuXHRcdFx0XHRcdFx0aWYgKHJlcy5zdGF0dXNDb2RlID09PSAzMDMgfHwgKHJlcy5zdGF0dXNDb2RlID09PSAzMDEgfHwgcmVzLnN0YXR1c0NvZGUgPT09IDMwMikgJiYgcmVxdWVzdC5tZXRob2QgPT09ICdQT1NUJykge1xuXHRcdFx0XHRcdFx0XHRyZXF1ZXN0T3B0cy5tZXRob2QgPSAnR0VUJztcblx0XHRcdFx0XHRcdFx0cmVxdWVzdE9wdHMuYm9keSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0cmVxdWVzdE9wdHMuaGVhZGVycy5kZWxldGUoJ2NvbnRlbnQtbGVuZ3RoJyk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIEhUVFAtcmVkaXJlY3QgZmV0Y2ggc3RlcCAxNVxuXHRcdFx0XHRcdFx0cmVzb2x2ZShmZXRjaChuZXcgUmVxdWVzdChsb2NhdGlvblVSTCwgcmVxdWVzdE9wdHMpKSk7XG5cdFx0XHRcdFx0XHRmaW5hbGl6ZSgpO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIHByZXBhcmUgcmVzcG9uc2Vcblx0XHRcdHJlcy5vbmNlKCdlbmQnLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdGlmIChzaWduYWwpIHNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0QW5kRmluYWxpemUpO1xuXHRcdFx0fSk7XG5cdFx0XHRsZXQgYm9keSA9IHJlcy5waXBlKG5ldyBQYXNzVGhyb3VnaCQxKCkpO1xuXG5cdFx0XHRjb25zdCByZXNwb25zZV9vcHRpb25zID0ge1xuXHRcdFx0XHR1cmw6IHJlcXVlc3QudXJsLFxuXHRcdFx0XHRzdGF0dXM6IHJlcy5zdGF0dXNDb2RlLFxuXHRcdFx0XHRzdGF0dXNUZXh0OiByZXMuc3RhdHVzTWVzc2FnZSxcblx0XHRcdFx0aGVhZGVyczogaGVhZGVycyxcblx0XHRcdFx0c2l6ZTogcmVxdWVzdC5zaXplLFxuXHRcdFx0XHR0aW1lb3V0OiByZXF1ZXN0LnRpbWVvdXQsXG5cdFx0XHRcdGNvdW50ZXI6IHJlcXVlc3QuY291bnRlclxuXHRcdFx0fTtcblxuXHRcdFx0Ly8gSFRUUC1uZXR3b3JrIGZldGNoIHN0ZXAgMTIuMS4xLjNcblx0XHRcdGNvbnN0IGNvZGluZ3MgPSBoZWFkZXJzLmdldCgnQ29udGVudC1FbmNvZGluZycpO1xuXG5cdFx0XHQvLyBIVFRQLW5ldHdvcmsgZmV0Y2ggc3RlcCAxMi4xLjEuNDogaGFuZGxlIGNvbnRlbnQgY29kaW5nc1xuXG5cdFx0XHQvLyBpbiBmb2xsb3dpbmcgc2NlbmFyaW9zIHdlIGlnbm9yZSBjb21wcmVzc2lvbiBzdXBwb3J0XG5cdFx0XHQvLyAxLiBjb21wcmVzc2lvbiBzdXBwb3J0IGlzIGRpc2FibGVkXG5cdFx0XHQvLyAyLiBIRUFEIHJlcXVlc3Rcblx0XHRcdC8vIDMuIG5vIENvbnRlbnQtRW5jb2RpbmcgaGVhZGVyXG5cdFx0XHQvLyA0LiBubyBjb250ZW50IHJlc3BvbnNlICgyMDQpXG5cdFx0XHQvLyA1LiBjb250ZW50IG5vdCBtb2RpZmllZCByZXNwb25zZSAoMzA0KVxuXHRcdFx0aWYgKCFyZXF1ZXN0LmNvbXByZXNzIHx8IHJlcXVlc3QubWV0aG9kID09PSAnSEVBRCcgfHwgY29kaW5ncyA9PT0gbnVsbCB8fCByZXMuc3RhdHVzQ29kZSA9PT0gMjA0IHx8IHJlcy5zdGF0dXNDb2RlID09PSAzMDQpIHtcblx0XHRcdFx0cmVzcG9uc2UgPSBuZXcgUmVzcG9uc2UoYm9keSwgcmVzcG9uc2Vfb3B0aW9ucyk7XG5cdFx0XHRcdHJlc29sdmUocmVzcG9uc2UpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIEZvciBOb2RlIHY2K1xuXHRcdFx0Ly8gQmUgbGVzcyBzdHJpY3Qgd2hlbiBkZWNvZGluZyBjb21wcmVzc2VkIHJlc3BvbnNlcywgc2luY2Ugc29tZXRpbWVzXG5cdFx0XHQvLyBzZXJ2ZXJzIHNlbmQgc2xpZ2h0bHkgaW52YWxpZCByZXNwb25zZXMgdGhhdCBhcmUgc3RpbGwgYWNjZXB0ZWRcblx0XHRcdC8vIGJ5IGNvbW1vbiBicm93c2Vycy5cblx0XHRcdC8vIEFsd2F5cyB1c2luZyBaX1NZTkNfRkxVU0ggaXMgd2hhdCBjVVJMIGRvZXMuXG5cdFx0XHRjb25zdCB6bGliT3B0aW9ucyA9IHtcblx0XHRcdFx0Zmx1c2g6IHpsaWIuWl9TWU5DX0ZMVVNILFxuXHRcdFx0XHRmaW5pc2hGbHVzaDogemxpYi5aX1NZTkNfRkxVU0hcblx0XHRcdH07XG5cblx0XHRcdC8vIGZvciBnemlwXG5cdFx0XHRpZiAoY29kaW5ncyA9PSAnZ3ppcCcgfHwgY29kaW5ncyA9PSAneC1nemlwJykge1xuXHRcdFx0XHRib2R5ID0gYm9keS5waXBlKHpsaWIuY3JlYXRlR3VuemlwKHpsaWJPcHRpb25zKSk7XG5cdFx0XHRcdHJlc3BvbnNlID0gbmV3IFJlc3BvbnNlKGJvZHksIHJlc3BvbnNlX29wdGlvbnMpO1xuXHRcdFx0XHRyZXNvbHZlKHJlc3BvbnNlKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBmb3IgZGVmbGF0ZVxuXHRcdFx0aWYgKGNvZGluZ3MgPT0gJ2RlZmxhdGUnIHx8IGNvZGluZ3MgPT0gJ3gtZGVmbGF0ZScpIHtcblx0XHRcdFx0Ly8gaGFuZGxlIHRoZSBpbmZhbW91cyByYXcgZGVmbGF0ZSByZXNwb25zZSBmcm9tIG9sZCBzZXJ2ZXJzXG5cdFx0XHRcdC8vIGEgaGFjayBmb3Igb2xkIElJUyBhbmQgQXBhY2hlIHNlcnZlcnNcblx0XHRcdFx0Y29uc3QgcmF3ID0gcmVzLnBpcGUobmV3IFBhc3NUaHJvdWdoJDEoKSk7XG5cdFx0XHRcdHJhdy5vbmNlKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7XG5cdFx0XHRcdFx0Ly8gc2VlIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzc1MTk4Mjhcblx0XHRcdFx0XHRpZiAoKGNodW5rWzBdICYgMHgwRikgPT09IDB4MDgpIHtcblx0XHRcdFx0XHRcdGJvZHkgPSBib2R5LnBpcGUoemxpYi5jcmVhdGVJbmZsYXRlKCkpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRib2R5ID0gYm9keS5waXBlKHpsaWIuY3JlYXRlSW5mbGF0ZVJhdygpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmVzcG9uc2UgPSBuZXcgUmVzcG9uc2UoYm9keSwgcmVzcG9uc2Vfb3B0aW9ucyk7XG5cdFx0XHRcdFx0cmVzb2x2ZShyZXNwb25zZSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyYXcub24oJ2VuZCcsIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHQvLyBzb21lIG9sZCBJSVMgc2VydmVycyByZXR1cm4gemVyby1sZW5ndGggT0sgZGVmbGF0ZSByZXNwb25zZXMsIHNvICdkYXRhJyBpcyBuZXZlciBlbWl0dGVkLlxuXHRcdFx0XHRcdGlmICghcmVzcG9uc2UpIHtcblx0XHRcdFx0XHRcdHJlc3BvbnNlID0gbmV3IFJlc3BvbnNlKGJvZHksIHJlc3BvbnNlX29wdGlvbnMpO1xuXHRcdFx0XHRcdFx0cmVzb2x2ZShyZXNwb25zZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBmb3IgYnJcblx0XHRcdGlmIChjb2RpbmdzID09ICdicicgJiYgdHlwZW9mIHpsaWIuY3JlYXRlQnJvdGxpRGVjb21wcmVzcyA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRib2R5ID0gYm9keS5waXBlKHpsaWIuY3JlYXRlQnJvdGxpRGVjb21wcmVzcygpKTtcblx0XHRcdFx0cmVzcG9uc2UgPSBuZXcgUmVzcG9uc2UoYm9keSwgcmVzcG9uc2Vfb3B0aW9ucyk7XG5cdFx0XHRcdHJlc29sdmUocmVzcG9uc2UpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIG90aGVyd2lzZSwgdXNlIHJlc3BvbnNlIGFzLWlzXG5cdFx0XHRyZXNwb25zZSA9IG5ldyBSZXNwb25zZShib2R5LCByZXNwb25zZV9vcHRpb25zKTtcblx0XHRcdHJlc29sdmUocmVzcG9uc2UpO1xuXHRcdH0pO1xuXG5cdFx0d3JpdGVUb1N0cmVhbShyZXEsIHJlcXVlc3QpO1xuXHR9KTtcbn1cbmZ1bmN0aW9uIGZpeFJlc3BvbnNlQ2h1bmtlZFRyYW5zZmVyQmFkRW5kaW5nKHJlcXVlc3QsIGVycm9yQ2FsbGJhY2spIHtcblx0bGV0IHNvY2tldDtcblxuXHRyZXF1ZXN0Lm9uKCdzb2NrZXQnLCBmdW5jdGlvbiAocykge1xuXHRcdHNvY2tldCA9IHM7XG5cdH0pO1xuXG5cdHJlcXVlc3Qub24oJ3Jlc3BvbnNlJywgZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG5cdFx0Y29uc3QgaGVhZGVycyA9IHJlc3BvbnNlLmhlYWRlcnM7XG5cblx0XHRpZiAoaGVhZGVyc1sndHJhbnNmZXItZW5jb2RpbmcnXSA9PT0gJ2NodW5rZWQnICYmICFoZWFkZXJzWydjb250ZW50LWxlbmd0aCddKSB7XG5cdFx0XHRyZXNwb25zZS5vbmNlKCdjbG9zZScsIGZ1bmN0aW9uIChoYWRFcnJvcikge1xuXHRcdFx0XHQvLyB0ZXN0cyBmb3Igc29ja2V0IHByZXNlbmNlLCBhcyBpbiBzb21lIHNpdHVhdGlvbnMgdGhlXG5cdFx0XHRcdC8vIHRoZSAnc29ja2V0JyBldmVudCBpcyBub3QgdHJpZ2dlcmVkIGZvciB0aGUgcmVxdWVzdFxuXHRcdFx0XHQvLyAoaGFwcGVucyBpbiBkZW5vKSwgYXZvaWRzIGBUeXBlRXJyb3JgXG5cdFx0XHRcdC8vIGlmIGEgZGF0YSBsaXN0ZW5lciBpcyBzdGlsbCBwcmVzZW50IHdlIGRpZG4ndCBlbmQgY2xlYW5seVxuXHRcdFx0XHRjb25zdCBoYXNEYXRhTGlzdGVuZXIgPSBzb2NrZXQgJiYgc29ja2V0Lmxpc3RlbmVyQ291bnQoJ2RhdGEnKSA+IDA7XG5cblx0XHRcdFx0aWYgKGhhc0RhdGFMaXN0ZW5lciAmJiAhaGFkRXJyb3IpIHtcblx0XHRcdFx0XHRjb25zdCBlcnIgPSBuZXcgRXJyb3IoJ1ByZW1hdHVyZSBjbG9zZScpO1xuXHRcdFx0XHRcdGVyci5jb2RlID0gJ0VSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFJztcblx0XHRcdFx0XHRlcnJvckNhbGxiYWNrKGVycik7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fSk7XG59XG5cbmZ1bmN0aW9uIGRlc3Ryb3lTdHJlYW0oc3RyZWFtLCBlcnIpIHtcblx0aWYgKHN0cmVhbS5kZXN0cm95KSB7XG5cdFx0c3RyZWFtLmRlc3Ryb3koZXJyKTtcblx0fSBlbHNlIHtcblx0XHQvLyBub2RlIDwgOFxuXHRcdHN0cmVhbS5lbWl0KCdlcnJvcicsIGVycik7XG5cdFx0c3RyZWFtLmVuZCgpO1xuXHR9XG59XG5cbi8qKlxuICogUmVkaXJlY3QgY29kZSBtYXRjaGluZ1xuICpcbiAqIEBwYXJhbSAgIE51bWJlciAgIGNvZGUgIFN0YXR1cyBjb2RlXG4gKiBAcmV0dXJuICBCb29sZWFuXG4gKi9cbmZldGNoLmlzUmVkaXJlY3QgPSBmdW5jdGlvbiAoY29kZSkge1xuXHRyZXR1cm4gY29kZSA9PT0gMzAxIHx8IGNvZGUgPT09IDMwMiB8fCBjb2RlID09PSAzMDMgfHwgY29kZSA9PT0gMzA3IHx8IGNvZGUgPT09IDMwODtcbn07XG5cbi8vIGV4cG9zZSBQcm9taXNlXG5mZXRjaC5Qcm9taXNlID0gZ2xvYmFsLlByb21pc2U7XG5cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZldGNoO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gZXhwb3J0cztcbmV4cG9ydHMuSGVhZGVycyA9IEhlYWRlcnM7XG5leHBvcnRzLlJlcXVlc3QgPSBSZXF1ZXN0O1xuZXhwb3J0cy5SZXNwb25zZSA9IFJlc3BvbnNlO1xuZXhwb3J0cy5GZXRjaEVycm9yID0gRmV0Y2hFcnJvcjtcbmV4cG9ydHMuQWJvcnRFcnJvciA9IEFib3J0RXJyb3I7XG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY2xhc3MgRGVwcmVjYXRpb24gZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKTsgLy8gTWFpbnRhaW5zIHByb3BlciBzdGFjayB0cmFjZSAob25seSBhdmFpbGFibGUgb24gVjgpXG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXG4gICAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgICB9XG5cbiAgICB0aGlzLm5hbWUgPSAnRGVwcmVjYXRpb24nO1xuICB9XG5cbn1cblxuZXhwb3J0cy5EZXByZWNhdGlvbiA9IERlcHJlY2F0aW9uO1xuIiwKICAgICIvLyBSZXR1cm5zIGEgd3JhcHBlciBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSB3cmFwcGVkIGNhbGxiYWNrXG4vLyBUaGUgd3JhcHBlciBmdW5jdGlvbiBzaG91bGQgZG8gc29tZSBzdHVmZiwgYW5kIHJldHVybiBhXG4vLyBwcmVzdW1hYmx5IGRpZmZlcmVudCBjYWxsYmFjayBmdW5jdGlvbi5cbi8vIFRoaXMgbWFrZXMgc3VyZSB0aGF0IG93biBwcm9wZXJ0aWVzIGFyZSByZXRhaW5lZCwgc28gdGhhdFxuLy8gZGVjb3JhdGlvbnMgYW5kIHN1Y2ggYXJlIG5vdCBsb3N0IGFsb25nIHRoZSB3YXkuXG5tb2R1bGUuZXhwb3J0cyA9IHdyYXBweVxuZnVuY3Rpb24gd3JhcHB5IChmbiwgY2IpIHtcbiAgaWYgKGZuICYmIGNiKSByZXR1cm4gd3JhcHB5KGZuKShjYilcblxuICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ25lZWQgd3JhcHBlciBmdW5jdGlvbicpXG5cbiAgT2JqZWN0LmtleXMoZm4pLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgICB3cmFwcGVyW2tdID0gZm5ba11cbiAgfSlcblxuICByZXR1cm4gd3JhcHBlclxuXG4gIGZ1bmN0aW9uIHdyYXBwZXIoKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aClcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFyZ3NbaV0gPSBhcmd1bWVudHNbaV1cbiAgICB9XG4gICAgdmFyIHJldCA9IGZuLmFwcGx5KHRoaXMsIGFyZ3MpXG4gICAgdmFyIGNiID0gYXJnc1thcmdzLmxlbmd0aC0xXVxuICAgIGlmICh0eXBlb2YgcmV0ID09PSAnZnVuY3Rpb24nICYmIHJldCAhPT0gY2IpIHtcbiAgICAgIE9iamVjdC5rZXlzKGNiKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgIHJldFtrXSA9IGNiW2tdXG4gICAgICB9KVxuICAgIH1cbiAgICByZXR1cm4gcmV0XG4gIH1cbn1cbiIsCiAgICAidmFyIHdyYXBweSA9IHJlcXVpcmUoJ3dyYXBweScpXG5tb2R1bGUuZXhwb3J0cyA9IHdyYXBweShvbmNlKVxubW9kdWxlLmV4cG9ydHMuc3RyaWN0ID0gd3JhcHB5KG9uY2VTdHJpY3QpXG5cbm9uY2UucHJvdG8gPSBvbmNlKGZ1bmN0aW9uICgpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZ1bmN0aW9uLnByb3RvdHlwZSwgJ29uY2UnLCB7XG4gICAgdmFsdWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBvbmNlKHRoaXMpXG4gICAgfSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSlcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRnVuY3Rpb24ucHJvdG90eXBlLCAnb25jZVN0cmljdCcsIHtcbiAgICB2YWx1ZTogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIG9uY2VTdHJpY3QodGhpcylcbiAgICB9LFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KVxufSlcblxuZnVuY3Rpb24gb25jZSAoZm4pIHtcbiAgdmFyIGYgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGYuY2FsbGVkKSByZXR1cm4gZi52YWx1ZVxuICAgIGYuY2FsbGVkID0gdHJ1ZVxuICAgIHJldHVybiBmLnZhbHVlID0gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICB9XG4gIGYuY2FsbGVkID0gZmFsc2VcbiAgcmV0dXJuIGZcbn1cblxuZnVuY3Rpb24gb25jZVN0cmljdCAoZm4pIHtcbiAgdmFyIGYgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGYuY2FsbGVkKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGYub25jZUVycm9yKVxuICAgIGYuY2FsbGVkID0gdHJ1ZVxuICAgIHJldHVybiBmLnZhbHVlID0gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICB9XG4gIHZhciBuYW1lID0gZm4ubmFtZSB8fCAnRnVuY3Rpb24gd3JhcHBlZCB3aXRoIGBvbmNlYCdcbiAgZi5vbmNlRXJyb3IgPSBuYW1lICsgXCIgc2hvdWxkbid0IGJlIGNhbGxlZCBtb3JlIHRoYW4gb25jZVwiXG4gIGYuY2FsbGVkID0gZmFsc2VcbiAgcmV0dXJuIGZcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5mdW5jdGlvbiBfaW50ZXJvcERlZmF1bHQgKGV4KSB7IHJldHVybiAoZXggJiYgKHR5cGVvZiBleCA9PT0gJ29iamVjdCcpICYmICdkZWZhdWx0JyBpbiBleCkgPyBleFsnZGVmYXVsdCddIDogZXg7IH1cblxudmFyIGRlcHJlY2F0aW9uID0gcmVxdWlyZSgnZGVwcmVjYXRpb24nKTtcbnZhciBvbmNlID0gX2ludGVyb3BEZWZhdWx0KHJlcXVpcmUoJ29uY2UnKSk7XG5cbmNvbnN0IGxvZ09uY2VDb2RlID0gb25jZShkZXByZWNhdGlvbiA9PiBjb25zb2xlLndhcm4oZGVwcmVjYXRpb24pKTtcbmNvbnN0IGxvZ09uY2VIZWFkZXJzID0gb25jZShkZXByZWNhdGlvbiA9PiBjb25zb2xlLndhcm4oZGVwcmVjYXRpb24pKTtcbi8qKlxuICogRXJyb3Igd2l0aCBleHRyYSBwcm9wZXJ0aWVzIHRvIGhlbHAgd2l0aCBkZWJ1Z2dpbmdcbiAqL1xuXG5jbGFzcyBSZXF1ZXN0RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2UsIHN0YXR1c0NvZGUsIG9wdGlvbnMpIHtcbiAgICBzdXBlcihtZXNzYWdlKTsgLy8gTWFpbnRhaW5zIHByb3BlciBzdGFjayB0cmFjZSAob25seSBhdmFpbGFibGUgb24gVjgpXG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXG4gICAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgICB9XG5cbiAgICB0aGlzLm5hbWUgPSBcIkh0dHBFcnJvclwiO1xuICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzQ29kZTtcbiAgICBsZXQgaGVhZGVycztcblxuICAgIGlmIChcImhlYWRlcnNcIiBpbiBvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLmhlYWRlcnMgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGhlYWRlcnMgPSBvcHRpb25zLmhlYWRlcnM7XG4gICAgfVxuXG4gICAgaWYgKFwicmVzcG9uc2VcIiBpbiBvcHRpb25zKSB7XG4gICAgICB0aGlzLnJlc3BvbnNlID0gb3B0aW9ucy5yZXNwb25zZTtcbiAgICAgIGhlYWRlcnMgPSBvcHRpb25zLnJlc3BvbnNlLmhlYWRlcnM7XG4gICAgfSAvLyByZWRhY3QgcmVxdWVzdCBjcmVkZW50aWFscyB3aXRob3V0IG11dGF0aW5nIG9yaWdpbmFsIHJlcXVlc3Qgb3B0aW9uc1xuXG5cbiAgICBjb25zdCByZXF1ZXN0Q29weSA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMucmVxdWVzdCk7XG5cbiAgICBpZiAob3B0aW9ucy5yZXF1ZXN0LmhlYWRlcnMuYXV0aG9yaXphdGlvbikge1xuICAgICAgcmVxdWVzdENvcHkuaGVhZGVycyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMucmVxdWVzdC5oZWFkZXJzLCB7XG4gICAgICAgIGF1dGhvcml6YXRpb246IG9wdGlvbnMucmVxdWVzdC5oZWFkZXJzLmF1dGhvcml6YXRpb24ucmVwbGFjZSgvIC4qJC8sIFwiIFtSRURBQ1RFRF1cIilcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlcXVlc3RDb3B5LnVybCA9IHJlcXVlc3RDb3B5LnVybCAvLyBjbGllbnRfaWQgJiBjbGllbnRfc2VjcmV0IGNhbiBiZSBwYXNzZWQgYXMgVVJMIHF1ZXJ5IHBhcmFtZXRlcnMgdG8gaW5jcmVhc2UgcmF0ZSBsaW1pdFxuICAgIC8vIHNlZSBodHRwczovL2RldmVsb3Blci5naXRodWIuY29tL3YzLyNpbmNyZWFzaW5nLXRoZS11bmF1dGhlbnRpY2F0ZWQtcmF0ZS1saW1pdC1mb3Itb2F1dGgtYXBwbGljYXRpb25zXG4gICAgLnJlcGxhY2UoL1xcYmNsaWVudF9zZWNyZXQ9XFx3Ky9nLCBcImNsaWVudF9zZWNyZXQ9W1JFREFDVEVEXVwiKSAvLyBPQXV0aCB0b2tlbnMgY2FuIGJlIHBhc3NlZCBhcyBVUkwgcXVlcnkgcGFyYW1ldGVycywgYWx0aG91Z2ggaXQgaXMgbm90IHJlY29tbWVuZGVkXG4gICAgLy8gc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmdpdGh1Yi5jb20vdjMvI29hdXRoMi10b2tlbi1zZW50LWluLWEtaGVhZGVyXG4gICAgLnJlcGxhY2UoL1xcYmFjY2Vzc190b2tlbj1cXHcrL2csIFwiYWNjZXNzX3Rva2VuPVtSRURBQ1RFRF1cIik7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdENvcHk7IC8vIGRlcHJlY2F0aW9uc1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwiY29kZVwiLCB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGxvZ09uY2VDb2RlKG5ldyBkZXByZWNhdGlvbi5EZXByZWNhdGlvbihcIltAb2N0b2tpdC9yZXF1ZXN0LWVycm9yXSBgZXJyb3IuY29kZWAgaXMgZGVwcmVjYXRlZCwgdXNlIGBlcnJvci5zdGF0dXNgLlwiKSk7XG4gICAgICAgIHJldHVybiBzdGF0dXNDb2RlO1xuICAgICAgfVxuXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwiaGVhZGVyc1wiLCB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGxvZ09uY2VIZWFkZXJzKG5ldyBkZXByZWNhdGlvbi5EZXByZWNhdGlvbihcIltAb2N0b2tpdC9yZXF1ZXN0LWVycm9yXSBgZXJyb3IuaGVhZGVyc2AgaXMgZGVwcmVjYXRlZCwgdXNlIGBlcnJvci5yZXNwb25zZS5oZWFkZXJzYC5cIikpO1xuICAgICAgICByZXR1cm4gaGVhZGVycyB8fCB7fTtcbiAgICAgIH1cblxuICAgIH0pO1xuICB9XG5cbn1cblxuZXhwb3J0cy5SZXF1ZXN0RXJyb3IgPSBSZXF1ZXN0RXJyb3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5mdW5jdGlvbiBfaW50ZXJvcERlZmF1bHQgKGV4KSB7IHJldHVybiAoZXggJiYgKHR5cGVvZiBleCA9PT0gJ29iamVjdCcpICYmICdkZWZhdWx0JyBpbiBleCkgPyBleFsnZGVmYXVsdCddIDogZXg7IH1cblxudmFyIGVuZHBvaW50ID0gcmVxdWlyZSgnQG9jdG9raXQvZW5kcG9pbnQnKTtcbnZhciB1bml2ZXJzYWxVc2VyQWdlbnQgPSByZXF1aXJlKCd1bml2ZXJzYWwtdXNlci1hZ2VudCcpO1xudmFyIGlzUGxhaW5PYmplY3QgPSByZXF1aXJlKCdpcy1wbGFpbi1vYmplY3QnKTtcbnZhciBub2RlRmV0Y2ggPSBfaW50ZXJvcERlZmF1bHQocmVxdWlyZSgnbm9kZS1mZXRjaCcpKTtcbnZhciByZXF1ZXN0RXJyb3IgPSByZXF1aXJlKCdAb2N0b2tpdC9yZXF1ZXN0LWVycm9yJyk7XG5cbmNvbnN0IFZFUlNJT04gPSBcIjUuNi4zXCI7XG5cbmZ1bmN0aW9uIGdldEJ1ZmZlclJlc3BvbnNlKHJlc3BvbnNlKSB7XG4gIHJldHVybiByZXNwb25zZS5hcnJheUJ1ZmZlcigpO1xufVxuXG5mdW5jdGlvbiBmZXRjaFdyYXBwZXIocmVxdWVzdE9wdGlvbnMpIHtcbiAgY29uc3QgbG9nID0gcmVxdWVzdE9wdGlvbnMucmVxdWVzdCAmJiByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0LmxvZyA/IHJlcXVlc3RPcHRpb25zLnJlcXVlc3QubG9nIDogY29uc29sZTtcblxuICBpZiAoaXNQbGFpbk9iamVjdC5pc1BsYWluT2JqZWN0KHJlcXVlc3RPcHRpb25zLmJvZHkpIHx8IEFycmF5LmlzQXJyYXkocmVxdWVzdE9wdGlvbnMuYm9keSkpIHtcbiAgICByZXF1ZXN0T3B0aW9ucy5ib2R5ID0gSlNPTi5zdHJpbmdpZnkocmVxdWVzdE9wdGlvbnMuYm9keSk7XG4gIH1cblxuICBsZXQgaGVhZGVycyA9IHt9O1xuICBsZXQgc3RhdHVzO1xuICBsZXQgdXJsO1xuICBjb25zdCBmZXRjaCA9IHJlcXVlc3RPcHRpb25zLnJlcXVlc3QgJiYgcmVxdWVzdE9wdGlvbnMucmVxdWVzdC5mZXRjaCB8fCBub2RlRmV0Y2g7XG4gIHJldHVybiBmZXRjaChyZXF1ZXN0T3B0aW9ucy51cmwsIE9iamVjdC5hc3NpZ24oe1xuICAgIG1ldGhvZDogcmVxdWVzdE9wdGlvbnMubWV0aG9kLFxuICAgIGJvZHk6IHJlcXVlc3RPcHRpb25zLmJvZHksXG4gICAgaGVhZGVyczogcmVxdWVzdE9wdGlvbnMuaGVhZGVycyxcbiAgICByZWRpcmVjdDogcmVxdWVzdE9wdGlvbnMucmVkaXJlY3RcbiAgfSwgLy8gYHJlcXVlc3RPcHRpb25zLnJlcXVlc3QuYWdlbnRgIHR5cGUgaXMgaW5jb21wYXRpYmxlXG4gIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vb2N0b2tpdC90eXBlcy50cy9wdWxsLzI2NFxuICByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0KSkudGhlbihhc3luYyByZXNwb25zZSA9PiB7XG4gICAgdXJsID0gcmVzcG9uc2UudXJsO1xuICAgIHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcblxuICAgIGZvciAoY29uc3Qga2V5QW5kVmFsdWUgb2YgcmVzcG9uc2UuaGVhZGVycykge1xuICAgICAgaGVhZGVyc1trZXlBbmRWYWx1ZVswXV0gPSBrZXlBbmRWYWx1ZVsxXTtcbiAgICB9XG5cbiAgICBpZiAoXCJkZXByZWNhdGlvblwiIGluIGhlYWRlcnMpIHtcbiAgICAgIGNvbnN0IG1hdGNoZXMgPSBoZWFkZXJzLmxpbmsgJiYgaGVhZGVycy5saW5rLm1hdGNoKC88KFtePl0rKT47IHJlbD1cImRlcHJlY2F0aW9uXCIvKTtcbiAgICAgIGNvbnN0IGRlcHJlY2F0aW9uTGluayA9IG1hdGNoZXMgJiYgbWF0Y2hlcy5wb3AoKTtcbiAgICAgIGxvZy53YXJuKGBbQG9jdG9raXQvcmVxdWVzdF0gXCIke3JlcXVlc3RPcHRpb25zLm1ldGhvZH0gJHtyZXF1ZXN0T3B0aW9ucy51cmx9XCIgaXMgZGVwcmVjYXRlZC4gSXQgaXMgc2NoZWR1bGVkIHRvIGJlIHJlbW92ZWQgb24gJHtoZWFkZXJzLnN1bnNldH0ke2RlcHJlY2F0aW9uTGluayA/IGAuIFNlZSAke2RlcHJlY2F0aW9uTGlua31gIDogXCJcIn1gKTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdHVzID09PSAyMDQgfHwgc3RhdHVzID09PSAyMDUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIEdpdEh1YiBBUEkgcmV0dXJucyAyMDAgZm9yIEhFQUQgcmVxdWVzdHNcblxuXG4gICAgaWYgKHJlcXVlc3RPcHRpb25zLm1ldGhvZCA9PT0gXCJIRUFEXCIpIHtcbiAgICAgIGlmIChzdGF0dXMgPCA0MDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgcmVxdWVzdEVycm9yLlJlcXVlc3RFcnJvcihyZXNwb25zZS5zdGF0dXNUZXh0LCBzdGF0dXMsIHtcbiAgICAgICAgcmVzcG9uc2U6IHtcbiAgICAgICAgICB1cmwsXG4gICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgZGF0YTogdW5kZWZpbmVkXG4gICAgICAgIH0sXG4gICAgICAgIHJlcXVlc3Q6IHJlcXVlc3RPcHRpb25zXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdHVzID09PSAzMDQpIHtcbiAgICAgIHRocm93IG5ldyByZXF1ZXN0RXJyb3IuUmVxdWVzdEVycm9yKFwiTm90IG1vZGlmaWVkXCIsIHN0YXR1cywge1xuICAgICAgICByZXNwb25zZToge1xuICAgICAgICAgIHVybCxcbiAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICBkYXRhOiBhd2FpdCBnZXRSZXNwb25zZURhdGEocmVzcG9uc2UpXG4gICAgICAgIH0sXG4gICAgICAgIHJlcXVlc3Q6IHJlcXVlc3RPcHRpb25zXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdHVzID49IDQwMCkge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdldFJlc3BvbnNlRGF0YShyZXNwb25zZSk7XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyByZXF1ZXN0RXJyb3IuUmVxdWVzdEVycm9yKHRvRXJyb3JNZXNzYWdlKGRhdGEpLCBzdGF0dXMsIHtcbiAgICAgICAgcmVzcG9uc2U6IHtcbiAgICAgICAgICB1cmwsXG4gICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgZGF0YVxuICAgICAgICB9LFxuICAgICAgICByZXF1ZXN0OiByZXF1ZXN0T3B0aW9uc1xuICAgICAgfSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG5cbiAgICByZXR1cm4gZ2V0UmVzcG9uc2VEYXRhKHJlc3BvbnNlKTtcbiAgfSkudGhlbihkYXRhID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzLFxuICAgICAgdXJsLFxuICAgICAgaGVhZGVycyxcbiAgICAgIGRhdGFcbiAgICB9O1xuICB9KS5jYXRjaChlcnJvciA9PiB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgcmVxdWVzdEVycm9yLlJlcXVlc3RFcnJvcikgdGhyb3cgZXJyb3I7XG4gICAgdGhyb3cgbmV3IHJlcXVlc3RFcnJvci5SZXF1ZXN0RXJyb3IoZXJyb3IubWVzc2FnZSwgNTAwLCB7XG4gICAgICByZXF1ZXN0OiByZXF1ZXN0T3B0aW9uc1xuICAgIH0pO1xuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0UmVzcG9uc2VEYXRhKHJlc3BvbnNlKSB7XG4gIGNvbnN0IGNvbnRlbnRUeXBlID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoXCJjb250ZW50LXR5cGVcIik7XG5cbiAgaWYgKC9hcHBsaWNhdGlvblxcL2pzb24vLnRlc3QoY29udGVudFR5cGUpKSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKTtcbiAgfVxuXG4gIGlmICghY29udGVudFR5cGUgfHwgL150ZXh0XFwvfGNoYXJzZXQ9dXRmLTgkLy50ZXN0KGNvbnRlbnRUeXBlKSkge1xuICAgIHJldHVybiByZXNwb25zZS50ZXh0KCk7XG4gIH1cblxuICByZXR1cm4gZ2V0QnVmZmVyUmVzcG9uc2UocmVzcG9uc2UpO1xufVxuXG5mdW5jdGlvbiB0b0Vycm9yTWVzc2FnZShkYXRhKSB7XG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIGRhdGE7IC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlIC0ganVzdCBpbiBjYXNlXG5cbiAgaWYgKFwibWVzc2FnZVwiIGluIGRhdGEpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhLmVycm9ycykpIHtcbiAgICAgIHJldHVybiBgJHtkYXRhLm1lc3NhZ2V9OiAke2RhdGEuZXJyb3JzLm1hcChKU09OLnN0cmluZ2lmeSkuam9pbihcIiwgXCIpfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGEubWVzc2FnZTtcbiAgfSAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAtIGp1c3QgaW4gY2FzZVxuXG5cbiAgcmV0dXJuIGBVbmtub3duIGVycm9yOiAke0pTT04uc3RyaW5naWZ5KGRhdGEpfWA7XG59XG5cbmZ1bmN0aW9uIHdpdGhEZWZhdWx0cyhvbGRFbmRwb2ludCwgbmV3RGVmYXVsdHMpIHtcbiAgY29uc3QgZW5kcG9pbnQgPSBvbGRFbmRwb2ludC5kZWZhdWx0cyhuZXdEZWZhdWx0cyk7XG5cbiAgY29uc3QgbmV3QXBpID0gZnVuY3Rpb24gKHJvdXRlLCBwYXJhbWV0ZXJzKSB7XG4gICAgY29uc3QgZW5kcG9pbnRPcHRpb25zID0gZW5kcG9pbnQubWVyZ2Uocm91dGUsIHBhcmFtZXRlcnMpO1xuXG4gICAgaWYgKCFlbmRwb2ludE9wdGlvbnMucmVxdWVzdCB8fCAhZW5kcG9pbnRPcHRpb25zLnJlcXVlc3QuaG9vaykge1xuICAgICAgcmV0dXJuIGZldGNoV3JhcHBlcihlbmRwb2ludC5wYXJzZShlbmRwb2ludE9wdGlvbnMpKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXF1ZXN0ID0gKHJvdXRlLCBwYXJhbWV0ZXJzKSA9PiB7XG4gICAgICByZXR1cm4gZmV0Y2hXcmFwcGVyKGVuZHBvaW50LnBhcnNlKGVuZHBvaW50Lm1lcmdlKHJvdXRlLCBwYXJhbWV0ZXJzKSkpO1xuICAgIH07XG5cbiAgICBPYmplY3QuYXNzaWduKHJlcXVlc3QsIHtcbiAgICAgIGVuZHBvaW50LFxuICAgICAgZGVmYXVsdHM6IHdpdGhEZWZhdWx0cy5iaW5kKG51bGwsIGVuZHBvaW50KVxuICAgIH0pO1xuICAgIHJldHVybiBlbmRwb2ludE9wdGlvbnMucmVxdWVzdC5ob29rKHJlcXVlc3QsIGVuZHBvaW50T3B0aW9ucyk7XG4gIH07XG5cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24obmV3QXBpLCB7XG4gICAgZW5kcG9pbnQsXG4gICAgZGVmYXVsdHM6IHdpdGhEZWZhdWx0cy5iaW5kKG51bGwsIGVuZHBvaW50KVxuICB9KTtcbn1cblxuY29uc3QgcmVxdWVzdCA9IHdpdGhEZWZhdWx0cyhlbmRwb2ludC5lbmRwb2ludCwge1xuICBoZWFkZXJzOiB7XG4gICAgXCJ1c2VyLWFnZW50XCI6IGBvY3Rva2l0LXJlcXVlc3QuanMvJHtWRVJTSU9OfSAke3VuaXZlcnNhbFVzZXJBZ2VudC5nZXRVc2VyQWdlbnQoKX1gXG4gIH1cbn0pO1xuXG5leHBvcnRzLnJlcXVlc3QgPSByZXF1ZXN0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxudmFyIHJlcXVlc3QgPSByZXF1aXJlKCdAb2N0b2tpdC9yZXF1ZXN0Jyk7XG52YXIgdW5pdmVyc2FsVXNlckFnZW50ID0gcmVxdWlyZSgndW5pdmVyc2FsLXVzZXItYWdlbnQnKTtcblxuY29uc3QgVkVSU0lPTiA9IFwiNC44LjBcIjtcblxuZnVuY3Rpb24gX2J1aWxkTWVzc2FnZUZvclJlc3BvbnNlRXJyb3JzKGRhdGEpIHtcbiAgcmV0dXJuIGBSZXF1ZXN0IGZhaWxlZCBkdWUgdG8gZm9sbG93aW5nIHJlc3BvbnNlIGVycm9yczpcXG5gICsgZGF0YS5lcnJvcnMubWFwKGUgPT4gYCAtICR7ZS5tZXNzYWdlfWApLmpvaW4oXCJcXG5cIik7XG59XG5cbmNsYXNzIEdyYXBocWxSZXNwb25zZUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihyZXF1ZXN0LCBoZWFkZXJzLCByZXNwb25zZSkge1xuICAgIHN1cGVyKF9idWlsZE1lc3NhZ2VGb3JSZXNwb25zZUVycm9ycyhyZXNwb25zZSkpO1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gICAgdGhpcy5oZWFkZXJzID0gaGVhZGVycztcbiAgICB0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gICAgdGhpcy5uYW1lID0gXCJHcmFwaHFsUmVzcG9uc2VFcnJvclwiOyAvLyBFeHBvc2UgdGhlIGVycm9ycyBhbmQgcmVzcG9uc2UgZGF0YSBpbiB0aGVpciBzaG9ydGhhbmQgcHJvcGVydGllcy5cblxuICAgIHRoaXMuZXJyb3JzID0gcmVzcG9uc2UuZXJyb3JzO1xuICAgIHRoaXMuZGF0YSA9IHJlc3BvbnNlLmRhdGE7IC8vIE1haW50YWlucyBwcm9wZXIgc3RhY2sgdHJhY2UgKG9ubHkgYXZhaWxhYmxlIG9uIFY4KVxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblxuICAgIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gICAgfVxuICB9XG5cbn1cblxuY29uc3QgTk9OX1ZBUklBQkxFX09QVElPTlMgPSBbXCJtZXRob2RcIiwgXCJiYXNlVXJsXCIsIFwidXJsXCIsIFwiaGVhZGVyc1wiLCBcInJlcXVlc3RcIiwgXCJxdWVyeVwiLCBcIm1lZGlhVHlwZVwiXTtcbmNvbnN0IEZPUkJJRERFTl9WQVJJQUJMRV9PUFRJT05TID0gW1wicXVlcnlcIiwgXCJtZXRob2RcIiwgXCJ1cmxcIl07XG5jb25zdCBHSEVTX1YzX1NVRkZJWF9SRUdFWCA9IC9cXC9hcGlcXC92M1xcLz8kLztcbmZ1bmN0aW9uIGdyYXBocWwocmVxdWVzdCwgcXVlcnksIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIHF1ZXJ5ID09PSBcInN0cmluZ1wiICYmIFwicXVlcnlcIiBpbiBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKGBbQG9jdG9raXQvZ3JhcGhxbF0gXCJxdWVyeVwiIGNhbm5vdCBiZSB1c2VkIGFzIHZhcmlhYmxlIG5hbWVgKSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBrZXkgaW4gb3B0aW9ucykge1xuICAgICAgaWYgKCFGT1JCSURERU5fVkFSSUFCTEVfT1BUSU9OUy5pbmNsdWRlcyhrZXkpKSBjb250aW51ZTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYFtAb2N0b2tpdC9ncmFwaHFsXSBcIiR7a2V5fVwiIGNhbm5vdCBiZSB1c2VkIGFzIHZhcmlhYmxlIG5hbWVgKSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcGFyc2VkT3B0aW9ucyA9IHR5cGVvZiBxdWVyeSA9PT0gXCJzdHJpbmdcIiA/IE9iamVjdC5hc3NpZ24oe1xuICAgIHF1ZXJ5XG4gIH0sIG9wdGlvbnMpIDogcXVlcnk7XG4gIGNvbnN0IHJlcXVlc3RPcHRpb25zID0gT2JqZWN0LmtleXMocGFyc2VkT3B0aW9ucykucmVkdWNlKChyZXN1bHQsIGtleSkgPT4ge1xuICAgIGlmIChOT05fVkFSSUFCTEVfT1BUSU9OUy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IHBhcnNlZE9wdGlvbnNba2V5XTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgaWYgKCFyZXN1bHQudmFyaWFibGVzKSB7XG4gICAgICByZXN1bHQudmFyaWFibGVzID0ge307XG4gICAgfVxuXG4gICAgcmVzdWx0LnZhcmlhYmxlc1trZXldID0gcGFyc2VkT3B0aW9uc1trZXldO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH0sIHt9KTsgLy8gd29ya2Fyb3VuZCBmb3IgR2l0SHViIEVudGVycHJpc2UgYmFzZVVybCBzZXQgd2l0aCAvYXBpL3YzIHN1ZmZpeFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vb2N0b2tpdC9hdXRoLWFwcC5qcy9pc3N1ZXMvMTExI2lzc3VlY29tbWVudC02NTc2MTA0NTFcblxuICBjb25zdCBiYXNlVXJsID0gcGFyc2VkT3B0aW9ucy5iYXNlVXJsIHx8IHJlcXVlc3QuZW5kcG9pbnQuREVGQVVMVFMuYmFzZVVybDtcblxuICBpZiAoR0hFU19WM19TVUZGSVhfUkVHRVgudGVzdChiYXNlVXJsKSkge1xuICAgIHJlcXVlc3RPcHRpb25zLnVybCA9IGJhc2VVcmwucmVwbGFjZShHSEVTX1YzX1NVRkZJWF9SRUdFWCwgXCIvYXBpL2dyYXBocWxcIik7XG4gIH1cblxuICByZXR1cm4gcmVxdWVzdChyZXF1ZXN0T3B0aW9ucykudGhlbihyZXNwb25zZSA9PiB7XG4gICAgaWYgKHJlc3BvbnNlLmRhdGEuZXJyb3JzKSB7XG4gICAgICBjb25zdCBoZWFkZXJzID0ge307XG5cbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHJlc3BvbnNlLmhlYWRlcnMpKSB7XG4gICAgICAgIGhlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnNba2V5XTtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IEdyYXBocWxSZXNwb25zZUVycm9yKHJlcXVlc3RPcHRpb25zLCBoZWFkZXJzLCByZXNwb25zZS5kYXRhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzcG9uc2UuZGF0YS5kYXRhO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gd2l0aERlZmF1bHRzKHJlcXVlc3QkMSwgbmV3RGVmYXVsdHMpIHtcbiAgY29uc3QgbmV3UmVxdWVzdCA9IHJlcXVlc3QkMS5kZWZhdWx0cyhuZXdEZWZhdWx0cyk7XG5cbiAgY29uc3QgbmV3QXBpID0gKHF1ZXJ5LCBvcHRpb25zKSA9PiB7XG4gICAgcmV0dXJuIGdyYXBocWwobmV3UmVxdWVzdCwgcXVlcnksIG9wdGlvbnMpO1xuICB9O1xuXG4gIHJldHVybiBPYmplY3QuYXNzaWduKG5ld0FwaSwge1xuICAgIGRlZmF1bHRzOiB3aXRoRGVmYXVsdHMuYmluZChudWxsLCBuZXdSZXF1ZXN0KSxcbiAgICBlbmRwb2ludDogcmVxdWVzdC5yZXF1ZXN0LmVuZHBvaW50XG4gIH0pO1xufVxuXG5jb25zdCBncmFwaHFsJDEgPSB3aXRoRGVmYXVsdHMocmVxdWVzdC5yZXF1ZXN0LCB7XG4gIGhlYWRlcnM6IHtcbiAgICBcInVzZXItYWdlbnRcIjogYG9jdG9raXQtZ3JhcGhxbC5qcy8ke1ZFUlNJT059ICR7dW5pdmVyc2FsVXNlckFnZW50LmdldFVzZXJBZ2VudCgpfWBcbiAgfSxcbiAgbWV0aG9kOiBcIlBPU1RcIixcbiAgdXJsOiBcIi9ncmFwaHFsXCJcbn0pO1xuZnVuY3Rpb24gd2l0aEN1c3RvbVJlcXVlc3QoY3VzdG9tUmVxdWVzdCkge1xuICByZXR1cm4gd2l0aERlZmF1bHRzKGN1c3RvbVJlcXVlc3QsIHtcbiAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgIHVybDogXCIvZ3JhcGhxbFwiXG4gIH0pO1xufVxuXG5leHBvcnRzLkdyYXBocWxSZXNwb25zZUVycm9yID0gR3JhcGhxbFJlc3BvbnNlRXJyb3I7XG5leHBvcnRzLmdyYXBocWwgPSBncmFwaHFsJDE7XG5leHBvcnRzLndpdGhDdXN0b21SZXF1ZXN0ID0gd2l0aEN1c3RvbVJlcXVlc3Q7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCBSRUdFWF9JU19JTlNUQUxMQVRJT05fTEVHQUNZID0gL152MVxcLi87XG5jb25zdCBSRUdFWF9JU19JTlNUQUxMQVRJT04gPSAvXmdoc18vO1xuY29uc3QgUkVHRVhfSVNfVVNFUl9UT19TRVJWRVIgPSAvXmdodV8vO1xuYXN5bmMgZnVuY3Rpb24gYXV0aCh0b2tlbikge1xuICBjb25zdCBpc0FwcCA9IHRva2VuLnNwbGl0KC9cXC4vKS5sZW5ndGggPT09IDM7XG4gIGNvbnN0IGlzSW5zdGFsbGF0aW9uID0gUkVHRVhfSVNfSU5TVEFMTEFUSU9OX0xFR0FDWS50ZXN0KHRva2VuKSB8fCBSRUdFWF9JU19JTlNUQUxMQVRJT04udGVzdCh0b2tlbik7XG4gIGNvbnN0IGlzVXNlclRvU2VydmVyID0gUkVHRVhfSVNfVVNFUl9UT19TRVJWRVIudGVzdCh0b2tlbik7XG4gIGNvbnN0IHRva2VuVHlwZSA9IGlzQXBwID8gXCJhcHBcIiA6IGlzSW5zdGFsbGF0aW9uID8gXCJpbnN0YWxsYXRpb25cIiA6IGlzVXNlclRvU2VydmVyID8gXCJ1c2VyLXRvLXNlcnZlclwiIDogXCJvYXV0aFwiO1xuICByZXR1cm4ge1xuICAgIHR5cGU6IFwidG9rZW5cIixcbiAgICB0b2tlbjogdG9rZW4sXG4gICAgdG9rZW5UeXBlXG4gIH07XG59XG5cbi8qKlxuICogUHJlZml4IHRva2VuIGZvciB1c2FnZSBpbiB0aGUgQXV0aG9yaXphdGlvbiBoZWFkZXJcbiAqXG4gKiBAcGFyYW0gdG9rZW4gT0F1dGggdG9rZW4gb3IgSlNPTiBXZWIgVG9rZW5cbiAqL1xuZnVuY3Rpb24gd2l0aEF1dGhvcml6YXRpb25QcmVmaXgodG9rZW4pIHtcbiAgaWYgKHRva2VuLnNwbGl0KC9cXC4vKS5sZW5ndGggPT09IDMpIHtcbiAgICByZXR1cm4gYGJlYXJlciAke3Rva2VufWA7XG4gIH1cblxuICByZXR1cm4gYHRva2VuICR7dG9rZW59YDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaG9vayh0b2tlbiwgcmVxdWVzdCwgcm91dGUsIHBhcmFtZXRlcnMpIHtcbiAgY29uc3QgZW5kcG9pbnQgPSByZXF1ZXN0LmVuZHBvaW50Lm1lcmdlKHJvdXRlLCBwYXJhbWV0ZXJzKTtcbiAgZW5kcG9pbnQuaGVhZGVycy5hdXRob3JpemF0aW9uID0gd2l0aEF1dGhvcml6YXRpb25QcmVmaXgodG9rZW4pO1xuICByZXR1cm4gcmVxdWVzdChlbmRwb2ludCk7XG59XG5cbmNvbnN0IGNyZWF0ZVRva2VuQXV0aCA9IGZ1bmN0aW9uIGNyZWF0ZVRva2VuQXV0aCh0b2tlbikge1xuICBpZiAoIXRva2VuKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiW0BvY3Rva2l0L2F1dGgtdG9rZW5dIE5vIHRva2VuIHBhc3NlZCB0byBjcmVhdGVUb2tlbkF1dGhcIik7XG4gIH1cblxuICBpZiAodHlwZW9mIHRva2VuICE9PSBcInN0cmluZ1wiKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiW0BvY3Rva2l0L2F1dGgtdG9rZW5dIFRva2VuIHBhc3NlZCB0byBjcmVhdGVUb2tlbkF1dGggaXMgbm90IGEgc3RyaW5nXCIpO1xuICB9XG5cbiAgdG9rZW4gPSB0b2tlbi5yZXBsYWNlKC9eKHRva2VufGJlYXJlcikgKy9pLCBcIlwiKTtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oYXV0aC5iaW5kKG51bGwsIHRva2VuKSwge1xuICAgIGhvb2s6IGhvb2suYmluZChudWxsLCB0b2tlbilcbiAgfSk7XG59O1xuXG5leHBvcnRzLmNyZWF0ZVRva2VuQXV0aCA9IGNyZWF0ZVRva2VuQXV0aDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbnZhciB1bml2ZXJzYWxVc2VyQWdlbnQgPSByZXF1aXJlKCd1bml2ZXJzYWwtdXNlci1hZ2VudCcpO1xudmFyIGJlZm9yZUFmdGVySG9vayA9IHJlcXVpcmUoJ2JlZm9yZS1hZnRlci1ob29rJyk7XG52YXIgcmVxdWVzdCA9IHJlcXVpcmUoJ0BvY3Rva2l0L3JlcXVlc3QnKTtcbnZhciBncmFwaHFsID0gcmVxdWlyZSgnQG9jdG9raXQvZ3JhcGhxbCcpO1xudmFyIGF1dGhUb2tlbiA9IHJlcXVpcmUoJ0BvY3Rva2l0L2F1dGgtdG9rZW4nKTtcblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkge1xuICBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTtcbiAgdmFyIHRhcmdldCA9IHt9O1xuICB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7XG4gIHZhciBrZXksIGk7XG5cbiAgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBrZXkgPSBzb3VyY2VLZXlzW2ldO1xuICAgIGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7XG4gICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7XG4gIGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9O1xuXG4gIHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTtcblxuICB2YXIga2V5LCBpO1xuXG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTtcbiAgICAgIGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7XG4gICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlO1xuICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5jb25zdCBWRVJTSU9OID0gXCIzLjYuMFwiO1xuXG5jb25zdCBfZXhjbHVkZWQgPSBbXCJhdXRoU3RyYXRlZ3lcIl07XG5jbGFzcyBPY3Rva2l0IHtcbiAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgaG9vayA9IG5ldyBiZWZvcmVBZnRlckhvb2suQ29sbGVjdGlvbigpO1xuICAgIGNvbnN0IHJlcXVlc3REZWZhdWx0cyA9IHtcbiAgICAgIGJhc2VVcmw6IHJlcXVlc3QucmVxdWVzdC5lbmRwb2ludC5ERUZBVUxUUy5iYXNlVXJsLFxuICAgICAgaGVhZGVyczoge30sXG4gICAgICByZXF1ZXN0OiBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLnJlcXVlc3QsIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZSBpbnRlcm5hbCB1c2FnZSBvbmx5LCBubyBuZWVkIHRvIHR5cGVcbiAgICAgICAgaG9vazogaG9vay5iaW5kKG51bGwsIFwicmVxdWVzdFwiKVxuICAgICAgfSksXG4gICAgICBtZWRpYVR5cGU6IHtcbiAgICAgICAgcHJldmlld3M6IFtdLFxuICAgICAgICBmb3JtYXQ6IFwiXCJcbiAgICAgIH1cbiAgICB9OyAvLyBwcmVwZW5kIGRlZmF1bHQgdXNlciBhZ2VudCB3aXRoIGBvcHRpb25zLnVzZXJBZ2VudGAgaWYgc2V0XG5cbiAgICByZXF1ZXN0RGVmYXVsdHMuaGVhZGVyc1tcInVzZXItYWdlbnRcIl0gPSBbb3B0aW9ucy51c2VyQWdlbnQsIGBvY3Rva2l0LWNvcmUuanMvJHtWRVJTSU9OfSAke3VuaXZlcnNhbFVzZXJBZ2VudC5nZXRVc2VyQWdlbnQoKX1gXS5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIik7XG5cbiAgICBpZiAob3B0aW9ucy5iYXNlVXJsKSB7XG4gICAgICByZXF1ZXN0RGVmYXVsdHMuYmFzZVVybCA9IG9wdGlvbnMuYmFzZVVybDtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5wcmV2aWV3cykge1xuICAgICAgcmVxdWVzdERlZmF1bHRzLm1lZGlhVHlwZS5wcmV2aWV3cyA9IG9wdGlvbnMucHJldmlld3M7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMudGltZVpvbmUpIHtcbiAgICAgIHJlcXVlc3REZWZhdWx0cy5oZWFkZXJzW1widGltZS16b25lXCJdID0gb3B0aW9ucy50aW1lWm9uZTtcbiAgICB9XG5cbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0LnJlcXVlc3QuZGVmYXVsdHMocmVxdWVzdERlZmF1bHRzKTtcbiAgICB0aGlzLmdyYXBocWwgPSBncmFwaHFsLndpdGhDdXN0b21SZXF1ZXN0KHRoaXMucmVxdWVzdCkuZGVmYXVsdHMocmVxdWVzdERlZmF1bHRzKTtcbiAgICB0aGlzLmxvZyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgZGVidWc6ICgpID0+IHt9LFxuICAgICAgaW5mbzogKCkgPT4ge30sXG4gICAgICB3YXJuOiBjb25zb2xlLndhcm4uYmluZChjb25zb2xlKSxcbiAgICAgIGVycm9yOiBjb25zb2xlLmVycm9yLmJpbmQoY29uc29sZSlcbiAgICB9LCBvcHRpb25zLmxvZyk7XG4gICAgdGhpcy5ob29rID0gaG9vazsgLy8gKDEpIElmIG5laXRoZXIgYG9wdGlvbnMuYXV0aFN0cmF0ZWd5YCBub3IgYG9wdGlvbnMuYXV0aGAgYXJlIHNldCwgdGhlIGBvY3Rva2l0YCBpbnN0YW5jZVxuICAgIC8vICAgICBpcyB1bmF1dGhlbnRpY2F0ZWQuIFRoZSBgdGhpcy5hdXRoKClgIG1ldGhvZCBpcyBhIG5vLW9wIGFuZCBubyByZXF1ZXN0IGhvb2sgaXMgcmVnaXN0ZXJlZC5cbiAgICAvLyAoMikgSWYgb25seSBgb3B0aW9ucy5hdXRoYCBpcyBzZXQsIHVzZSB0aGUgZGVmYXVsdCB0b2tlbiBhdXRoZW50aWNhdGlvbiBzdHJhdGVneS5cbiAgICAvLyAoMykgSWYgYG9wdGlvbnMuYXV0aFN0cmF0ZWd5YCBpcyBzZXQgdGhlbiB1c2UgaXQgYW5kIHBhc3MgaW4gYG9wdGlvbnMuYXV0aGAuIEFsd2F5cyBwYXNzIG93biByZXF1ZXN0IGFzIG1hbnkgc3RyYXRlZ2llcyBhY2NlcHQgYSBjdXN0b20gcmVxdWVzdCBpbnN0YW5jZS5cbiAgICAvLyBUT0RPOiB0eXBlIGBvcHRpb25zLmF1dGhgIGJhc2VkIG9uIGBvcHRpb25zLmF1dGhTdHJhdGVneWAuXG5cbiAgICBpZiAoIW9wdGlvbnMuYXV0aFN0cmF0ZWd5KSB7XG4gICAgICBpZiAoIW9wdGlvbnMuYXV0aCkge1xuICAgICAgICAvLyAoMSlcbiAgICAgICAgdGhpcy5hdXRoID0gYXN5bmMgKCkgPT4gKHtcbiAgICAgICAgICB0eXBlOiBcInVuYXV0aGVudGljYXRlZFwiXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gKDIpXG4gICAgICAgIGNvbnN0IGF1dGggPSBhdXRoVG9rZW4uY3JlYXRlVG9rZW5BdXRoKG9wdGlvbnMuYXV0aCk7IC8vIEB0cy1pZ25vcmUgIMKvXFxfKOODhClfL8KvXG5cbiAgICAgICAgaG9vay53cmFwKFwicmVxdWVzdFwiLCBhdXRoLmhvb2spO1xuICAgICAgICB0aGlzLmF1dGggPSBhdXRoO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGF1dGhTdHJhdGVneVxuICAgICAgfSA9IG9wdGlvbnMsXG4gICAgICAgICAgICBvdGhlck9wdGlvbnMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob3B0aW9ucywgX2V4Y2x1ZGVkKTtcblxuICAgICAgY29uc3QgYXV0aCA9IGF1dGhTdHJhdGVneShPYmplY3QuYXNzaWduKHtcbiAgICAgICAgcmVxdWVzdDogdGhpcy5yZXF1ZXN0LFxuICAgICAgICBsb2c6IHRoaXMubG9nLFxuICAgICAgICAvLyB3ZSBwYXNzIHRoZSBjdXJyZW50IG9jdG9raXQgaW5zdGFuY2UgYXMgd2VsbCBhcyBpdHMgY29uc3RydWN0b3Igb3B0aW9uc1xuICAgICAgICAvLyB0byBhbGxvdyBmb3IgYXV0aGVudGljYXRpb24gc3RyYXRlZ2llcyB0aGF0IHJldHVybiBhIG5ldyBvY3Rva2l0IGluc3RhbmNlXG4gICAgICAgIC8vIHRoYXQgc2hhcmVzIHRoZSBzYW1lIGludGVybmFsIHN0YXRlIGFzIHRoZSBjdXJyZW50IG9uZS4gVGhlIG9yaWdpbmFsXG4gICAgICAgIC8vIHJlcXVpcmVtZW50IGZvciB0aGlzIHdhcyB0aGUgXCJldmVudC1vY3Rva2l0XCIgYXV0aGVudGljYXRpb24gc3RyYXRlZ3lcbiAgICAgICAgLy8gb2YgaHR0cHM6Ly9naXRodWIuY29tL3Byb2JvdC9vY3Rva2l0LWF1dGgtcHJvYm90LlxuICAgICAgICBvY3Rva2l0OiB0aGlzLFxuICAgICAgICBvY3Rva2l0T3B0aW9uczogb3RoZXJPcHRpb25zXG4gICAgICB9LCBvcHRpb25zLmF1dGgpKTsgLy8gQHRzLWlnbm9yZSAgwq9cXF8o44OEKV8vwq9cblxuICAgICAgaG9vay53cmFwKFwicmVxdWVzdFwiLCBhdXRoLmhvb2spO1xuICAgICAgdGhpcy5hdXRoID0gYXV0aDtcbiAgICB9IC8vIGFwcGx5IHBsdWdpbnNcbiAgICAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMTYzNDUxNzJcblxuXG4gICAgY29uc3QgY2xhc3NDb25zdHJ1Y3RvciA9IHRoaXMuY29uc3RydWN0b3I7XG4gICAgY2xhc3NDb25zdHJ1Y3Rvci5wbHVnaW5zLmZvckVhY2gocGx1Z2luID0+IHtcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgcGx1Z2luKHRoaXMsIG9wdGlvbnMpKTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBkZWZhdWx0cyhkZWZhdWx0cykge1xuICAgIGNvbnN0IE9jdG9raXRXaXRoRGVmYXVsdHMgPSBjbGFzcyBleHRlbmRzIHRoaXMge1xuICAgICAgY29uc3RydWN0b3IoLi4uYXJncykge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gYXJnc1swXSB8fCB7fTtcblxuICAgICAgICBpZiAodHlwZW9mIGRlZmF1bHRzID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICBzdXBlcihkZWZhdWx0cyhvcHRpb25zKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgc3VwZXIoT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdHMsIG9wdGlvbnMsIG9wdGlvbnMudXNlckFnZW50ICYmIGRlZmF1bHRzLnVzZXJBZ2VudCA/IHtcbiAgICAgICAgICB1c2VyQWdlbnQ6IGAke29wdGlvbnMudXNlckFnZW50fSAke2RlZmF1bHRzLnVzZXJBZ2VudH1gXG4gICAgICAgIH0gOiBudWxsKSk7XG4gICAgICB9XG5cbiAgICB9O1xuICAgIHJldHVybiBPY3Rva2l0V2l0aERlZmF1bHRzO1xuICB9XG4gIC8qKlxuICAgKiBBdHRhY2ggYSBwbHVnaW4gKG9yIG1hbnkpIHRvIHlvdXIgT2N0b2tpdCBpbnN0YW5jZS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogY29uc3QgQVBJID0gT2N0b2tpdC5wbHVnaW4ocGx1Z2luMSwgcGx1Z2luMiwgcGx1Z2luMywgLi4uKVxuICAgKi9cblxuXG4gIHN0YXRpYyBwbHVnaW4oLi4ubmV3UGx1Z2lucykge1xuICAgIHZhciBfYTtcblxuICAgIGNvbnN0IGN1cnJlbnRQbHVnaW5zID0gdGhpcy5wbHVnaW5zO1xuICAgIGNvbnN0IE5ld09jdG9raXQgPSAoX2EgPSBjbGFzcyBleHRlbmRzIHRoaXMge30sIF9hLnBsdWdpbnMgPSBjdXJyZW50UGx1Z2lucy5jb25jYXQobmV3UGx1Z2lucy5maWx0ZXIocGx1Z2luID0+ICFjdXJyZW50UGx1Z2lucy5pbmNsdWRlcyhwbHVnaW4pKSksIF9hKTtcbiAgICByZXR1cm4gTmV3T2N0b2tpdDtcbiAgfVxuXG59XG5PY3Rva2l0LlZFUlNJT04gPSBWRVJTSU9OO1xuT2N0b2tpdC5wbHVnaW5zID0gW107XG5cbmV4cG9ydHMuT2N0b2tpdCA9IE9jdG9raXQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7XG5cbiAgICBpZiAoZW51bWVyYWJsZU9ubHkpIHtcbiAgICAgIHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpO1xuICB9XG5cbiAgcmV0dXJuIGtleXM7XG59XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQyKHRhcmdldCkge1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9O1xuXG4gICAgaWYgKGkgJSAyKSB7XG4gICAgICBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn1cblxuY29uc3QgRW5kcG9pbnRzID0ge1xuICBhY3Rpb25zOiB7XG4gICAgYWRkQ3VzdG9tTGFiZWxzVG9TZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIl0sXG4gICAgYWRkQ3VzdG9tTGFiZWxzVG9TZWxmSG9zdGVkUnVubmVyRm9yUmVwbzogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVsc1wiXSxcbiAgICBhZGRTZWxlY3RlZFJlcG9Ub09yZ1NlY3JldDogW1wiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIl0sXG4gICAgYXBwcm92ZVdvcmtmbG93UnVuOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXBwcm92ZVwiXSxcbiAgICBjYW5jZWxXb3JrZmxvd1J1bjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2NhbmNlbFwiXSxcbiAgICBjcmVhdGVPclVwZGF0ZUVudmlyb25tZW50U2VjcmV0OiBbXCJQVVQgL3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH0vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgY3JlYXRlT3JVcGRhdGVPcmdTZWNyZXQ6IFtcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBjcmVhdGVPclVwZGF0ZVJlcG9TZWNyZXQ6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgY3JlYXRlUmVnaXN0cmF0aW9uVG9rZW5Gb3JPcmc6IFtcIlBPU1QgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3JlZ2lzdHJhdGlvbi10b2tlblwiXSxcbiAgICBjcmVhdGVSZWdpc3RyYXRpb25Ub2tlbkZvclJlcG86IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy9yZWdpc3RyYXRpb24tdG9rZW5cIl0sXG4gICAgY3JlYXRlUmVtb3ZlVG9rZW5Gb3JPcmc6IFtcIlBPU1QgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3JlbW92ZS10b2tlblwiXSxcbiAgICBjcmVhdGVSZW1vdmVUb2tlbkZvclJlcG86IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy9yZW1vdmUtdG9rZW5cIl0sXG4gICAgY3JlYXRlV29ya2Zsb3dEaXNwYXRjaDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3Mve3dvcmtmbG93X2lkfS9kaXNwYXRjaGVzXCJdLFxuICAgIGRlbGV0ZUFjdGlvbnNDYWNoZUJ5SWQ6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9jYWNoZXMve2NhY2hlX2lkfVwiXSxcbiAgICBkZWxldGVBY3Rpb25zQ2FjaGVCeUtleTogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2NhY2hlc3s/a2V5LHJlZn1cIl0sXG4gICAgZGVsZXRlQXJ0aWZhY3Q6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9hcnRpZmFjdHMve2FydGlmYWN0X2lkfVwiXSxcbiAgICBkZWxldGVFbnZpcm9ubWVudFNlY3JldDogW1wiREVMRVRFIC9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGRlbGV0ZU9yZ1NlY3JldDogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGRlbGV0ZVJlcG9TZWNyZXQ6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZGVsZXRlU2VsZkhvc3RlZFJ1bm5lckZyb21Pcmc6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH1cIl0sXG4gICAgZGVsZXRlU2VsZkhvc3RlZFJ1bm5lckZyb21SZXBvOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfVwiXSxcbiAgICBkZWxldGVXb3JrZmxvd1J1bjogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH1cIl0sXG4gICAgZGVsZXRlV29ya2Zsb3dSdW5Mb2dzOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9sb2dzXCJdLFxuICAgIGRpc2FibGVTZWxlY3RlZFJlcG9zaXRvcnlHaXRodWJBY3Rpb25zT3JnYW5pemF0aW9uOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCJdLFxuICAgIGRpc2FibGVXb3JrZmxvdzogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L2Rpc2FibGVcIl0sXG4gICAgZG93bmxvYWRBcnRpZmFjdDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2FydGlmYWN0cy97YXJ0aWZhY3RfaWR9L3thcmNoaXZlX2Zvcm1hdH1cIl0sXG4gICAgZG93bmxvYWRKb2JMb2dzRm9yV29ya2Zsb3dSdW46IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9qb2JzL3tqb2JfaWR9L2xvZ3NcIl0sXG4gICAgZG93bmxvYWRXb3JrZmxvd1J1bkF0dGVtcHRMb2dzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hdHRlbXB0cy97YXR0ZW1wdF9udW1iZXJ9L2xvZ3NcIl0sXG4gICAgZG93bmxvYWRXb3JrZmxvd1J1bkxvZ3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2xvZ3NcIl0sXG4gICAgZW5hYmxlU2VsZWN0ZWRSZXBvc2l0b3J5R2l0aHViQWN0aW9uc09yZ2FuaXphdGlvbjogW1wiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiXSxcbiAgICBlbmFibGVXb3JrZmxvdzogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L2VuYWJsZVwiXSxcbiAgICBnZXRBY3Rpb25zQ2FjaGVMaXN0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvY2FjaGVzXCJdLFxuICAgIGdldEFjdGlvbnNDYWNoZVVzYWdlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvY2FjaGUvdXNhZ2VcIl0sXG4gICAgZ2V0QWN0aW9uc0NhY2hlVXNhZ2VCeVJlcG9Gb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2NhY2hlL3VzYWdlLWJ5LXJlcG9zaXRvcnlcIl0sXG4gICAgZ2V0QWN0aW9uc0NhY2hlVXNhZ2VGb3JFbnRlcnByaXNlOiBbXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9hY3Rpb25zL2NhY2hlL3VzYWdlXCJdLFxuICAgIGdldEFjdGlvbnNDYWNoZVVzYWdlRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9jYWNoZS91c2FnZVwiXSxcbiAgICBnZXRBbGxvd2VkQWN0aW9uc09yZ2FuaXphdGlvbjogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvc2VsZWN0ZWQtYWN0aW9uc1wiXSxcbiAgICBnZXRBbGxvd2VkQWN0aW9uc1JlcG9zaXRvcnk6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9ucy9zZWxlY3RlZC1hY3Rpb25zXCJdLFxuICAgIGdldEFydGlmYWN0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvYXJ0aWZhY3RzL3thcnRpZmFjdF9pZH1cIl0sXG4gICAgZ2V0RW52aXJvbm1lbnRQdWJsaWNLZXk6IFtcIkdFVCAvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHMvcHVibGljLWtleVwiXSxcbiAgICBnZXRFbnZpcm9ubWVudFNlY3JldDogW1wiR0VUIC9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGdldEdpdGh1YkFjdGlvbnNEZWZhdWx0V29ya2Zsb3dQZXJtaXNzaW9uc0VudGVycHJpc2U6IFtcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2FjdGlvbnMvcGVybWlzc2lvbnMvd29ya2Zsb3dcIl0sXG4gICAgZ2V0R2l0aHViQWN0aW9uc0RlZmF1bHRXb3JrZmxvd1Blcm1pc3Npb25zT3JnYW5pemF0aW9uOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy93b3JrZmxvd1wiXSxcbiAgICBnZXRHaXRodWJBY3Rpb25zRGVmYXVsdFdvcmtmbG93UGVybWlzc2lvbnNSZXBvc2l0b3J5OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnMvd29ya2Zsb3dcIl0sXG4gICAgZ2V0R2l0aHViQWN0aW9uc1Blcm1pc3Npb25zT3JnYW5pemF0aW9uOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9uc1wiXSxcbiAgICBnZXRHaXRodWJBY3Rpb25zUGVybWlzc2lvbnNSZXBvc2l0b3J5OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnNcIl0sXG4gICAgZ2V0Sm9iRm9yV29ya2Zsb3dSdW46IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9qb2JzL3tqb2JfaWR9XCJdLFxuICAgIGdldE9yZ1B1YmxpY0tleTogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy9wdWJsaWMta2V5XCJdLFxuICAgIGdldE9yZ1NlY3JldDogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGdldFBlbmRpbmdEZXBsb3ltZW50c0ZvclJ1bjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vcGVuZGluZ19kZXBsb3ltZW50c1wiXSxcbiAgICBnZXRSZXBvUGVybWlzc2lvbnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9uc1wiLCB7fSwge1xuICAgICAgcmVuYW1lZDogW1wiYWN0aW9uc1wiLCBcImdldEdpdGh1YkFjdGlvbnNQZXJtaXNzaW9uc1JlcG9zaXRvcnlcIl1cbiAgICB9XSxcbiAgICBnZXRSZXBvUHVibGljS2V5OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvc2VjcmV0cy9wdWJsaWMta2V5XCJdLFxuICAgIGdldFJlcG9TZWNyZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZ2V0UmV2aWV3c0ZvclJ1bjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXBwcm92YWxzXCJdLFxuICAgIGdldFNlbGZIb3N0ZWRSdW5uZXJGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH1cIl0sXG4gICAgZ2V0U2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9XCJdLFxuICAgIGdldFdvcmtmbG93OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvd29ya2Zsb3dzL3t3b3JrZmxvd19pZH1cIl0sXG4gICAgZ2V0V29ya2Zsb3dBY2Nlc3NUb1JlcG9zaXRvcnk6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9ucy9hY2Nlc3NcIl0sXG4gICAgZ2V0V29ya2Zsb3dSdW46IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9XCJdLFxuICAgIGdldFdvcmtmbG93UnVuQXR0ZW1wdDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXR0ZW1wdHMve2F0dGVtcHRfbnVtYmVyfVwiXSxcbiAgICBnZXRXb3JrZmxvd1J1blVzYWdlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS90aW1pbmdcIl0sXG4gICAgZ2V0V29ya2Zsb3dVc2FnZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L3RpbWluZ1wiXSxcbiAgICBsaXN0QXJ0aWZhY3RzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2FydGlmYWN0c1wiXSxcbiAgICBsaXN0RW52aXJvbm1lbnRTZWNyZXRzOiBbXCJHRVQgL3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH0vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9zZWNyZXRzXCJdLFxuICAgIGxpc3RKb2JzRm9yV29ya2Zsb3dSdW46IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2pvYnNcIl0sXG4gICAgbGlzdEpvYnNGb3JXb3JrZmxvd1J1bkF0dGVtcHQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2F0dGVtcHRzL3thdHRlbXB0X251bWJlcn0vam9ic1wiXSxcbiAgICBsaXN0TGFiZWxzRm9yU2VsZkhvc3RlZFJ1bm5lckZvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIl0sXG4gICAgbGlzdExhYmVsc0ZvclNlbGZIb3N0ZWRSdW5uZXJGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIl0sXG4gICAgbGlzdE9yZ1NlY3JldHM6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHNcIl0sXG4gICAgbGlzdFJlcG9TZWNyZXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvc2VjcmV0c1wiXSxcbiAgICBsaXN0UmVwb1dvcmtmbG93czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93c1wiXSxcbiAgICBsaXN0UnVubmVyQXBwbGljYXRpb25zRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL2Rvd25sb2Fkc1wiXSxcbiAgICBsaXN0UnVubmVyQXBwbGljYXRpb25zRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMvZG93bmxvYWRzXCJdLFxuICAgIGxpc3RTZWxlY3RlZFJlcG9zRm9yT3JnU2VjcmV0OiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCJdLFxuICAgIGxpc3RTZWxlY3RlZFJlcG9zaXRvcmllc0VuYWJsZWRHaXRodWJBY3Rpb25zT3JnYW5pemF0aW9uOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9yZXBvc2l0b3JpZXNcIl0sXG4gICAgbGlzdFNlbGZIb3N0ZWRSdW5uZXJzRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzXCJdLFxuICAgIGxpc3RTZWxmSG9zdGVkUnVubmVyc0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzXCJdLFxuICAgIGxpc3RXb3JrZmxvd1J1bkFydGlmYWN0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXJ0aWZhY3RzXCJdLFxuICAgIGxpc3RXb3JrZmxvd1J1bnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3Mve3dvcmtmbG93X2lkfS9ydW5zXCJdLFxuICAgIGxpc3RXb3JrZmxvd1J1bnNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVuc1wiXSxcbiAgICByZVJ1bkpvYkZvcldvcmtmbG93UnVuOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2pvYnMve2pvYl9pZH0vcmVydW5cIl0sXG4gICAgcmVSdW5Xb3JrZmxvdzogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L3JlcnVuXCJdLFxuICAgIHJlUnVuV29ya2Zsb3dGYWlsZWRKb2JzOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vcmVydW4tZmFpbGVkLWpvYnNcIl0sXG4gICAgcmVtb3ZlQWxsQ3VzdG9tTGFiZWxzRnJvbVNlbGZIb3N0ZWRSdW5uZXJGb3JPcmc6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCJdLFxuICAgIHJlbW92ZUFsbEN1c3RvbUxhYmVsc0Zyb21TZWxmSG9zdGVkUnVubmVyRm9yUmVwbzogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCJdLFxuICAgIHJlbW92ZUN1c3RvbUxhYmVsRnJvbVNlbGZIb3N0ZWRSdW5uZXJGb3JPcmc6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzL3tuYW1lfVwiXSxcbiAgICByZW1vdmVDdXN0b21MYWJlbEZyb21TZWxmSG9zdGVkUnVubmVyRm9yUmVwbzogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzL3tuYW1lfVwiXSxcbiAgICByZW1vdmVTZWxlY3RlZFJlcG9Gcm9tT3JnU2VjcmV0OiBbXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiXSxcbiAgICByZXZpZXdQZW5kaW5nRGVwbG95bWVudHNGb3JSdW46IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9wZW5kaW5nX2RlcGxveW1lbnRzXCJdLFxuICAgIHNldEFsbG93ZWRBY3Rpb25zT3JnYW5pemF0aW9uOiBbXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9zZWxlY3RlZC1hY3Rpb25zXCJdLFxuICAgIHNldEFsbG93ZWRBY3Rpb25zUmVwb3NpdG9yeTogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zL3NlbGVjdGVkLWFjdGlvbnNcIl0sXG4gICAgc2V0Q3VzdG9tTGFiZWxzRm9yU2VsZkhvc3RlZFJ1bm5lckZvck9yZzogW1wiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIl0sXG4gICAgc2V0Q3VzdG9tTGFiZWxzRm9yU2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVsc1wiXSxcbiAgICBzZXRHaXRodWJBY3Rpb25zRGVmYXVsdFdvcmtmbG93UGVybWlzc2lvbnNFbnRlcnByaXNlOiBbXCJQVVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9hY3Rpb25zL3Blcm1pc3Npb25zL3dvcmtmbG93XCJdLFxuICAgIHNldEdpdGh1YkFjdGlvbnNEZWZhdWx0V29ya2Zsb3dQZXJtaXNzaW9uc09yZ2FuaXphdGlvbjogW1wiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvd29ya2Zsb3dcIl0sXG4gICAgc2V0R2l0aHViQWN0aW9uc0RlZmF1bHRXb3JrZmxvd1Blcm1pc3Npb25zUmVwb3NpdG9yeTogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zL3dvcmtmbG93XCJdLFxuICAgIHNldEdpdGh1YkFjdGlvbnNQZXJtaXNzaW9uc09yZ2FuaXphdGlvbjogW1wiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnNcIl0sXG4gICAgc2V0R2l0aHViQWN0aW9uc1Blcm1pc3Npb25zUmVwb3NpdG9yeTogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zXCJdLFxuICAgIHNldFNlbGVjdGVkUmVwb3NGb3JPcmdTZWNyZXQ6IFtcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIl0sXG4gICAgc2V0U2VsZWN0ZWRSZXBvc2l0b3JpZXNFbmFibGVkR2l0aHViQWN0aW9uc09yZ2FuaXphdGlvbjogW1wiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvcmVwb3NpdG9yaWVzXCJdLFxuICAgIHNldFdvcmtmbG93QWNjZXNzVG9SZXBvc2l0b3J5OiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnMvYWNjZXNzXCJdXG4gIH0sXG4gIGFjdGl2aXR5OiB7XG4gICAgY2hlY2tSZXBvSXNTdGFycmVkQnlBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3N0YXJyZWQve293bmVyfS97cmVwb31cIl0sXG4gICAgZGVsZXRlUmVwb1N1YnNjcmlwdGlvbjogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdWJzY3JpcHRpb25cIl0sXG4gICAgZGVsZXRlVGhyZWFkU3Vic2NyaXB0aW9uOiBbXCJERUxFVEUgL25vdGlmaWNhdGlvbnMvdGhyZWFkcy97dGhyZWFkX2lkfS9zdWJzY3JpcHRpb25cIl0sXG4gICAgZ2V0RmVlZHM6IFtcIkdFVCAvZmVlZHNcIl0sXG4gICAgZ2V0UmVwb1N1YnNjcmlwdGlvbjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdWJzY3JpcHRpb25cIl0sXG4gICAgZ2V0VGhyZWFkOiBbXCJHRVQgL25vdGlmaWNhdGlvbnMvdGhyZWFkcy97dGhyZWFkX2lkfVwiXSxcbiAgICBnZXRUaHJlYWRTdWJzY3JpcHRpb25Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC9ub3RpZmljYXRpb25zL3RocmVhZHMve3RocmVhZF9pZH0vc3Vic2NyaXB0aW9uXCJdLFxuICAgIGxpc3RFdmVudHNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2V2ZW50c1wiXSxcbiAgICBsaXN0Tm90aWZpY2F0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL25vdGlmaWNhdGlvbnNcIl0sXG4gICAgbGlzdE9yZ0V2ZW50c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzL29yZ3Mve29yZ31cIl0sXG4gICAgbGlzdFB1YmxpY0V2ZW50czogW1wiR0VUIC9ldmVudHNcIl0sXG4gICAgbGlzdFB1YmxpY0V2ZW50c0ZvclJlcG9OZXR3b3JrOiBbXCJHRVQgL25ldHdvcmtzL3tvd25lcn0ve3JlcG99L2V2ZW50c1wiXSxcbiAgICBsaXN0UHVibGljRXZlbnRzRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2V2ZW50cy9wdWJsaWNcIl0sXG4gICAgbGlzdFB1YmxpY09yZ0V2ZW50czogW1wiR0VUIC9vcmdzL3tvcmd9L2V2ZW50c1wiXSxcbiAgICBsaXN0UmVjZWl2ZWRFdmVudHNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcmVjZWl2ZWRfZXZlbnRzXCJdLFxuICAgIGxpc3RSZWNlaXZlZFB1YmxpY0V2ZW50c0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9yZWNlaXZlZF9ldmVudHMvcHVibGljXCJdLFxuICAgIGxpc3RSZXBvRXZlbnRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2V2ZW50c1wiXSxcbiAgICBsaXN0UmVwb05vdGlmaWNhdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ub3RpZmljYXRpb25zXCJdLFxuICAgIGxpc3RSZXBvc1N0YXJyZWRCeUF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvc3RhcnJlZFwiXSxcbiAgICBsaXN0UmVwb3NTdGFycmVkQnlVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc3RhcnJlZFwiXSxcbiAgICBsaXN0UmVwb3NXYXRjaGVkQnlVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc3Vic2NyaXB0aW9uc1wiXSxcbiAgICBsaXN0U3RhcmdhemVyc0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3RhcmdhemVyc1wiXSxcbiAgICBsaXN0V2F0Y2hlZFJlcG9zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9zdWJzY3JpcHRpb25zXCJdLFxuICAgIGxpc3RXYXRjaGVyc0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3Vic2NyaWJlcnNcIl0sXG4gICAgbWFya05vdGlmaWNhdGlvbnNBc1JlYWQ6IFtcIlBVVCAvbm90aWZpY2F0aW9uc1wiXSxcbiAgICBtYXJrUmVwb05vdGlmaWNhdGlvbnNBc1JlYWQ6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vbm90aWZpY2F0aW9uc1wiXSxcbiAgICBtYXJrVGhyZWFkQXNSZWFkOiBbXCJQQVRDSCAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9XCJdLFxuICAgIHNldFJlcG9TdWJzY3JpcHRpb246IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3Vic2NyaXB0aW9uXCJdLFxuICAgIHNldFRocmVhZFN1YnNjcmlwdGlvbjogW1wiUFVUIC9ub3RpZmljYXRpb25zL3RocmVhZHMve3RocmVhZF9pZH0vc3Vic2NyaXB0aW9uXCJdLFxuICAgIHN0YXJSZXBvRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBVVCAvdXNlci9zdGFycmVkL3tvd25lcn0ve3JlcG99XCJdLFxuICAgIHVuc3RhclJlcG9Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiREVMRVRFIC91c2VyL3N0YXJyZWQve293bmVyfS97cmVwb31cIl1cbiAgfSxcbiAgYXBwczoge1xuICAgIGFkZFJlcG9Ub0luc3RhbGxhdGlvbjogW1wiUFVUIC91c2VyL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLCB7fSwge1xuICAgICAgcmVuYW1lZDogW1wiYXBwc1wiLCBcImFkZFJlcG9Ub0luc3RhbGxhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdXG4gICAgfV0sXG4gICAgYWRkUmVwb1RvSW5zdGFsbGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBVVCAvdXNlci9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIl0sXG4gICAgY2hlY2tUb2tlbjogW1wiUE9TVCAvYXBwbGljYXRpb25zL3tjbGllbnRfaWR9L3Rva2VuXCJdLFxuICAgIGNyZWF0ZUZyb21NYW5pZmVzdDogW1wiUE9TVCAvYXBwLW1hbmlmZXN0cy97Y29kZX0vY29udmVyc2lvbnNcIl0sXG4gICAgY3JlYXRlSW5zdGFsbGF0aW9uQWNjZXNzVG9rZW46IFtcIlBPU1QgL2FwcC9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L2FjY2Vzc190b2tlbnNcIl0sXG4gICAgZGVsZXRlQXV0aG9yaXphdGlvbjogW1wiREVMRVRFIC9hcHBsaWNhdGlvbnMve2NsaWVudF9pZH0vZ3JhbnRcIl0sXG4gICAgZGVsZXRlSW5zdGFsbGF0aW9uOiBbXCJERUxFVEUgL2FwcC9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9XCJdLFxuICAgIGRlbGV0ZVRva2VuOiBbXCJERUxFVEUgL2FwcGxpY2F0aW9ucy97Y2xpZW50X2lkfS90b2tlblwiXSxcbiAgICBnZXRBdXRoZW50aWNhdGVkOiBbXCJHRVQgL2FwcFwiXSxcbiAgICBnZXRCeVNsdWc6IFtcIkdFVCAvYXBwcy97YXBwX3NsdWd9XCJdLFxuICAgIGdldEluc3RhbGxhdGlvbjogW1wiR0VUIC9hcHAvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfVwiXSxcbiAgICBnZXRPcmdJbnN0YWxsYXRpb246IFtcIkdFVCAvb3Jncy97b3JnfS9pbnN0YWxsYXRpb25cIl0sXG4gICAgZ2V0UmVwb0luc3RhbGxhdGlvbjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbnN0YWxsYXRpb25cIl0sXG4gICAgZ2V0U3Vic2NyaXB0aW9uUGxhbkZvckFjY291bnQ6IFtcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9hY2NvdW50cy97YWNjb3VudF9pZH1cIl0sXG4gICAgZ2V0U3Vic2NyaXB0aW9uUGxhbkZvckFjY291bnRTdHViYmVkOiBbXCJHRVQgL21hcmtldHBsYWNlX2xpc3Rpbmcvc3R1YmJlZC9hY2NvdW50cy97YWNjb3VudF9pZH1cIl0sXG4gICAgZ2V0VXNlckluc3RhbGxhdGlvbjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2luc3RhbGxhdGlvblwiXSxcbiAgICBnZXRXZWJob29rQ29uZmlnRm9yQXBwOiBbXCJHRVQgL2FwcC9ob29rL2NvbmZpZ1wiXSxcbiAgICBnZXRXZWJob29rRGVsaXZlcnk6IFtcIkdFVCAvYXBwL2hvb2svZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9XCJdLFxuICAgIGxpc3RBY2NvdW50c0ZvclBsYW46IFtcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9wbGFucy97cGxhbl9pZH0vYWNjb3VudHNcIl0sXG4gICAgbGlzdEFjY291bnRzRm9yUGxhblN0dWJiZWQ6IFtcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9zdHViYmVkL3BsYW5zL3twbGFuX2lkfS9hY2NvdW50c1wiXSxcbiAgICBsaXN0SW5zdGFsbGF0aW9uUmVwb3NGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCJdLFxuICAgIGxpc3RJbnN0YWxsYXRpb25zOiBbXCJHRVQgL2FwcC9pbnN0YWxsYXRpb25zXCJdLFxuICAgIGxpc3RJbnN0YWxsYXRpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9pbnN0YWxsYXRpb25zXCJdLFxuICAgIGxpc3RQbGFuczogW1wiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3BsYW5zXCJdLFxuICAgIGxpc3RQbGFuc1N0dWJiZWQ6IFtcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9zdHViYmVkL3BsYW5zXCJdLFxuICAgIGxpc3RSZXBvc0FjY2Vzc2libGVUb0luc3RhbGxhdGlvbjogW1wiR0VUIC9pbnN0YWxsYXRpb24vcmVwb3NpdG9yaWVzXCJdLFxuICAgIGxpc3RTdWJzY3JpcHRpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9tYXJrZXRwbGFjZV9wdXJjaGFzZXNcIl0sXG4gICAgbGlzdFN1YnNjcmlwdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlclN0dWJiZWQ6IFtcIkdFVCAvdXNlci9tYXJrZXRwbGFjZV9wdXJjaGFzZXMvc3R1YmJlZFwiXSxcbiAgICBsaXN0V2ViaG9va0RlbGl2ZXJpZXM6IFtcIkdFVCAvYXBwL2hvb2svZGVsaXZlcmllc1wiXSxcbiAgICByZWRlbGl2ZXJXZWJob29rRGVsaXZlcnk6IFtcIlBPU1QgL2FwcC9ob29rL2RlbGl2ZXJpZXMve2RlbGl2ZXJ5X2lkfS9hdHRlbXB0c1wiXSxcbiAgICByZW1vdmVSZXBvRnJvbUluc3RhbGxhdGlvbjogW1wiREVMRVRFIC91c2VyL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLCB7fSwge1xuICAgICAgcmVuYW1lZDogW1wiYXBwc1wiLCBcInJlbW92ZVJlcG9Gcm9tSW5zdGFsbGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXJcIl1cbiAgICB9XSxcbiAgICByZW1vdmVSZXBvRnJvbUluc3RhbGxhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCJdLFxuICAgIHJlc2V0VG9rZW46IFtcIlBBVENIIC9hcHBsaWNhdGlvbnMve2NsaWVudF9pZH0vdG9rZW5cIl0sXG4gICAgcmV2b2tlSW5zdGFsbGF0aW9uQWNjZXNzVG9rZW46IFtcIkRFTEVURSAvaW5zdGFsbGF0aW9uL3Rva2VuXCJdLFxuICAgIHNjb3BlVG9rZW46IFtcIlBPU1QgL2FwcGxpY2F0aW9ucy97Y2xpZW50X2lkfS90b2tlbi9zY29wZWRcIl0sXG4gICAgc3VzcGVuZEluc3RhbGxhdGlvbjogW1wiUFVUIC9hcHAvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9zdXNwZW5kZWRcIl0sXG4gICAgdW5zdXNwZW5kSW5zdGFsbGF0aW9uOiBbXCJERUxFVEUgL2FwcC9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3N1c3BlbmRlZFwiXSxcbiAgICB1cGRhdGVXZWJob29rQ29uZmlnRm9yQXBwOiBbXCJQQVRDSCAvYXBwL2hvb2svY29uZmlnXCJdXG4gIH0sXG4gIGJpbGxpbmc6IHtcbiAgICBnZXRHaXRodWJBY3Rpb25zQmlsbGluZ09yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL2JpbGxpbmcvYWN0aW9uc1wiXSxcbiAgICBnZXRHaXRodWJBY3Rpb25zQmlsbGluZ1VzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zZXR0aW5ncy9iaWxsaW5nL2FjdGlvbnNcIl0sXG4gICAgZ2V0R2l0aHViQWR2YW5jZWRTZWN1cml0eUJpbGxpbmdHaGU6IFtcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L3NldHRpbmdzL2JpbGxpbmcvYWR2YW5jZWQtc2VjdXJpdHlcIl0sXG4gICAgZ2V0R2l0aHViQWR2YW5jZWRTZWN1cml0eUJpbGxpbmdPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9zZXR0aW5ncy9iaWxsaW5nL2FkdmFuY2VkLXNlY3VyaXR5XCJdLFxuICAgIGdldEdpdGh1YlBhY2thZ2VzQmlsbGluZ09yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL2JpbGxpbmcvcGFja2FnZXNcIl0sXG4gICAgZ2V0R2l0aHViUGFja2FnZXNCaWxsaW5nVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NldHRpbmdzL2JpbGxpbmcvcGFja2FnZXNcIl0sXG4gICAgZ2V0U2hhcmVkU3RvcmFnZUJpbGxpbmdPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9zZXR0aW5ncy9iaWxsaW5nL3NoYXJlZC1zdG9yYWdlXCJdLFxuICAgIGdldFNoYXJlZFN0b3JhZ2VCaWxsaW5nVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NldHRpbmdzL2JpbGxpbmcvc2hhcmVkLXN0b3JhZ2VcIl1cbiAgfSxcbiAgY2hlY2tzOiB7XG4gICAgY3JlYXRlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1ydW5zXCJdLFxuICAgIGNyZWF0ZVN1aXRlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1zdWl0ZXNcIl0sXG4gICAgZ2V0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXJ1bnMve2NoZWNrX3J1bl9pZH1cIl0sXG4gICAgZ2V0U3VpdGU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stc3VpdGVzL3tjaGVja19zdWl0ZV9pZH1cIl0sXG4gICAgbGlzdEFubm90YXRpb25zOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXJ1bnMve2NoZWNrX3J1bl9pZH0vYW5ub3RhdGlvbnNcIl0sXG4gICAgbGlzdEZvclJlZjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L2NoZWNrLXJ1bnNcIl0sXG4gICAgbGlzdEZvclN1aXRlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXN1aXRlcy97Y2hlY2tfc3VpdGVfaWR9L2NoZWNrLXJ1bnNcIl0sXG4gICAgbGlzdFN1aXRlc0ZvclJlZjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L2NoZWNrLXN1aXRlc1wiXSxcbiAgICByZXJlcXVlc3RSdW46IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXJ1bnMve2NoZWNrX3J1bl9pZH0vcmVyZXF1ZXN0XCJdLFxuICAgIHJlcmVxdWVzdFN1aXRlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1zdWl0ZXMve2NoZWNrX3N1aXRlX2lkfS9yZXJlcXVlc3RcIl0sXG4gICAgc2V0U3VpdGVzUHJlZmVyZW5jZXM6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1zdWl0ZXMvcHJlZmVyZW5jZXNcIl0sXG4gICAgdXBkYXRlOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stcnVucy97Y2hlY2tfcnVuX2lkfVwiXVxuICB9LFxuICBjb2RlU2Nhbm5pbmc6IHtcbiAgICBkZWxldGVBbmFseXNpczogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FuYWx5c2VzL3thbmFseXNpc19pZH17P2NvbmZpcm1fZGVsZXRlfVwiXSxcbiAgICBnZXRBbGVydDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfVwiLCB7fSwge1xuICAgICAgcmVuYW1lZFBhcmFtZXRlcnM6IHtcbiAgICAgICAgYWxlcnRfaWQ6IFwiYWxlcnRfbnVtYmVyXCJcbiAgICAgIH1cbiAgICB9XSxcbiAgICBnZXRBbmFseXNpczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FuYWx5c2VzL3thbmFseXNpc19pZH1cIl0sXG4gICAgZ2V0U2FyaWY6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9zYXJpZnMve3NhcmlmX2lkfVwiXSxcbiAgICBsaXN0QWxlcnRJbnN0YW5jZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn0vaW5zdGFuY2VzXCJdLFxuICAgIGxpc3RBbGVydHNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9jb2RlLXNjYW5uaW5nL2FsZXJ0c1wiXSxcbiAgICBsaXN0QWxlcnRzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0c1wiXSxcbiAgICBsaXN0QWxlcnRzSW5zdGFuY2VzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9L2luc3RhbmNlc1wiLCB7fSwge1xuICAgICAgcmVuYW1lZDogW1wiY29kZVNjYW5uaW5nXCIsIFwibGlzdEFsZXJ0SW5zdGFuY2VzXCJdXG4gICAgfV0sXG4gICAgbGlzdFJlY2VudEFuYWx5c2VzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYW5hbHlzZXNcIl0sXG4gICAgdXBkYXRlQWxlcnQ6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfVwiXSxcbiAgICB1cGxvYWRTYXJpZjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9zYXJpZnNcIl1cbiAgfSxcbiAgY29kZXNPZkNvbmR1Y3Q6IHtcbiAgICBnZXRBbGxDb2Rlc09mQ29uZHVjdDogW1wiR0VUIC9jb2Rlc19vZl9jb25kdWN0XCJdLFxuICAgIGdldENvbmR1Y3RDb2RlOiBbXCJHRVQgL2NvZGVzX29mX2NvbmR1Y3Qve2tleX1cIl1cbiAgfSxcbiAgY29kZXNwYWNlczoge1xuICAgIGFkZFJlcG9zaXRvcnlGb3JTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUFVUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIl0sXG4gICAgY29kZXNwYWNlTWFjaGluZXNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfS9tYWNoaW5lc1wiXSxcbiAgICBjcmVhdGVGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9jb2Rlc3BhY2VzXCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlUmVwb1NlY3JldDogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBjcmVhdGVPclVwZGF0ZVNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQVVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgY3JlYXRlV2l0aFByRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vY29kZXNwYWNlc1wiXSxcbiAgICBjcmVhdGVXaXRoUmVwb0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzXCJdLFxuICAgIGRlbGV0ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9XCJdLFxuICAgIGRlbGV0ZUZyb21Pcmdhbml6YXRpb246IFtcIkRFTEVURSAvb3Jncy97b3JnfS9tZW1iZXJzL3t1c2VybmFtZX0vY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9XCJdLFxuICAgIGRlbGV0ZVJlcG9TZWNyZXQ6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZGVsZXRlU2VjcmV0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBleHBvcnRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vZXhwb3J0c1wiXSxcbiAgICBnZXRFeHBvcnREZXRhaWxzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vZXhwb3J0cy97ZXhwb3J0X2lkfVwiXSxcbiAgICBnZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfVwiXSxcbiAgICBnZXRQdWJsaWNLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy9wdWJsaWMta2V5XCJdLFxuICAgIGdldFJlcG9QdWJsaWNLZXk6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9zZWNyZXRzL3B1YmxpYy1rZXlcIl0sXG4gICAgZ2V0UmVwb1NlY3JldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBnZXRTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGxpc3REZXZjb250YWluZXJzSW5SZXBvc2l0b3J5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9kZXZjb250YWluZXJzXCJdLFxuICAgIGxpc3RGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2NvZGVzcGFjZXNcIl0sXG4gICAgbGlzdEluT3JnYW5pemF0aW9uOiBbXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlc1wiLCB7fSwge1xuICAgICAgcmVuYW1lZFBhcmFtZXRlcnM6IHtcbiAgICAgICAgb3JnX2lkOiBcIm9yZ1wiXG4gICAgICB9XG4gICAgfV0sXG4gICAgbGlzdEluUmVwb3NpdG9yeUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXNcIl0sXG4gICAgbGlzdFJlcG9TZWNyZXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvc2VjcmV0c1wiXSxcbiAgICBsaXN0UmVwb3NpdG9yaWVzRm9yU2VjcmV0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIl0sXG4gICAgbGlzdFNlY3JldHNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0c1wiXSxcbiAgICByZW1vdmVSZXBvc2l0b3J5Rm9yU2VjcmV0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCJdLFxuICAgIHJlcG9NYWNoaW5lc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvbWFjaGluZXNcIl0sXG4gICAgc2V0UmVwb3NpdG9yaWVzRm9yU2VjcmV0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBVVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIl0sXG4gICAgc3RhcnRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vc3RhcnRcIl0sXG4gICAgc3RvcEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfS9zdG9wXCJdLFxuICAgIHN0b3BJbk9yZ2FuaXphdGlvbjogW1wiUE9TVCAvb3Jncy97b3JnfS9tZW1iZXJzL3t1c2VybmFtZX0vY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9L3N0b3BcIl0sXG4gICAgdXBkYXRlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBBVENIIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfVwiXVxuICB9LFxuICBkZXBlbmRhYm90OiB7XG4gICAgYWRkU2VsZWN0ZWRSZXBvVG9PcmdTZWNyZXQ6IFtcIlBVVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlT3JnU2VjcmV0OiBbXCJQVVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgY3JlYXRlT3JVcGRhdGVSZXBvU2VjcmV0OiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGRlbGV0ZU9yZ1NlY3JldDogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGRlbGV0ZVJlcG9TZWNyZXQ6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZ2V0T3JnUHVibGljS2V5OiBbXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3B1YmxpYy1rZXlcIl0sXG4gICAgZ2V0T3JnU2VjcmV0OiBbXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZ2V0UmVwb1B1YmxpY0tleTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L3NlY3JldHMvcHVibGljLWtleVwiXSxcbiAgICBnZXRSZXBvU2VjcmV0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGxpc3RPcmdTZWNyZXRzOiBbXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzXCJdLFxuICAgIGxpc3RSZXBvU2VjcmV0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L3NlY3JldHNcIl0sXG4gICAgbGlzdFNlbGVjdGVkUmVwb3NGb3JPcmdTZWNyZXQ6IFtcIkdFVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIl0sXG4gICAgcmVtb3ZlU2VsZWN0ZWRSZXBvRnJvbU9yZ1NlY3JldDogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIl0sXG4gICAgc2V0U2VsZWN0ZWRSZXBvc0Zvck9yZ1NlY3JldDogW1wiUFVUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiXVxuICB9LFxuICBkZXBlbmRlbmN5R3JhcGg6IHtcbiAgICBjcmVhdGVSZXBvc2l0b3J5U25hcHNob3Q6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGVuY3ktZ3JhcGgvc25hcHNob3RzXCJdLFxuICAgIGRpZmZSYW5nZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRlbmN5LWdyYXBoL2NvbXBhcmUve2Jhc2VoZWFkfVwiXVxuICB9LFxuICBlbW9qaXM6IHtcbiAgICBnZXQ6IFtcIkdFVCAvZW1vamlzXCJdXG4gIH0sXG4gIGVudGVycHJpc2VBZG1pbjoge1xuICAgIGFkZEN1c3RvbUxhYmVsc1RvU2VsZkhvc3RlZFJ1bm5lckZvckVudGVycHJpc2U6IFtcIlBPU1QgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCJdLFxuICAgIGRpc2FibGVTZWxlY3RlZE9yZ2FuaXphdGlvbkdpdGh1YkFjdGlvbnNFbnRlcnByaXNlOiBbXCJERUxFVEUgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9hY3Rpb25zL3Blcm1pc3Npb25zL29yZ2FuaXphdGlvbnMve29yZ19pZH1cIl0sXG4gICAgZW5hYmxlU2VsZWN0ZWRPcmdhbml6YXRpb25HaXRodWJBY3Rpb25zRW50ZXJwcmlzZTogW1wiUFVUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vYWN0aW9ucy9wZXJtaXNzaW9ucy9vcmdhbml6YXRpb25zL3tvcmdfaWR9XCJdLFxuICAgIGdldEFsbG93ZWRBY3Rpb25zRW50ZXJwcmlzZTogW1wiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vYWN0aW9ucy9wZXJtaXNzaW9ucy9zZWxlY3RlZC1hY3Rpb25zXCJdLFxuICAgIGdldEdpdGh1YkFjdGlvbnNQZXJtaXNzaW9uc0VudGVycHJpc2U6IFtcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2FjdGlvbnMvcGVybWlzc2lvbnNcIl0sXG4gICAgZ2V0U2VydmVyU3RhdGlzdGljczogW1wiR0VUIC9lbnRlcnByaXNlLWluc3RhbGxhdGlvbi97ZW50ZXJwcmlzZV9vcl9vcmd9L3NlcnZlci1zdGF0aXN0aWNzXCJdLFxuICAgIGxpc3RMYWJlbHNGb3JTZWxmSG9zdGVkUnVubmVyRm9yRW50ZXJwcmlzZTogW1wiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVsc1wiXSxcbiAgICBsaXN0U2VsZWN0ZWRPcmdhbml6YXRpb25zRW5hYmxlZEdpdGh1YkFjdGlvbnNFbnRlcnByaXNlOiBbXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9hY3Rpb25zL3Blcm1pc3Npb25zL29yZ2FuaXphdGlvbnNcIl0sXG4gICAgcmVtb3ZlQWxsQ3VzdG9tTGFiZWxzRnJvbVNlbGZIb3N0ZWRSdW5uZXJGb3JFbnRlcnByaXNlOiBbXCJERUxFVEUgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCJdLFxuICAgIHJlbW92ZUN1c3RvbUxhYmVsRnJvbVNlbGZIb3N0ZWRSdW5uZXJGb3JFbnRlcnByaXNlOiBbXCJERUxFVEUgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzL3tuYW1lfVwiXSxcbiAgICBzZXRBbGxvd2VkQWN0aW9uc0VudGVycHJpc2U6IFtcIlBVVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2FjdGlvbnMvcGVybWlzc2lvbnMvc2VsZWN0ZWQtYWN0aW9uc1wiXSxcbiAgICBzZXRDdXN0b21MYWJlbHNGb3JTZWxmSG9zdGVkUnVubmVyRm9yRW50ZXJwcmlzZTogW1wiUFVUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVsc1wiXSxcbiAgICBzZXRHaXRodWJBY3Rpb25zUGVybWlzc2lvbnNFbnRlcnByaXNlOiBbXCJQVVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9hY3Rpb25zL3Blcm1pc3Npb25zXCJdLFxuICAgIHNldFNlbGVjdGVkT3JnYW5pemF0aW9uc0VuYWJsZWRHaXRodWJBY3Rpb25zRW50ZXJwcmlzZTogW1wiUFVUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vYWN0aW9ucy9wZXJtaXNzaW9ucy9vcmdhbml6YXRpb25zXCJdXG4gIH0sXG4gIGdpc3RzOiB7XG4gICAgY2hlY2tJc1N0YXJyZWQ6IFtcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L3N0YXJcIl0sXG4gICAgY3JlYXRlOiBbXCJQT1NUIC9naXN0c1wiXSxcbiAgICBjcmVhdGVDb21tZW50OiBbXCJQT1NUIC9naXN0cy97Z2lzdF9pZH0vY29tbWVudHNcIl0sXG4gICAgZGVsZXRlOiBbXCJERUxFVEUgL2dpc3RzL3tnaXN0X2lkfVwiXSxcbiAgICBkZWxldGVDb21tZW50OiBbXCJERUxFVEUgL2dpc3RzL3tnaXN0X2lkfS9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgZm9yazogW1wiUE9TVCAvZ2lzdHMve2dpc3RfaWR9L2ZvcmtzXCJdLFxuICAgIGdldDogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH1cIl0sXG4gICAgZ2V0Q29tbWVudDogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH0vY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIGdldFJldmlzaW9uOiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfS97c2hhfVwiXSxcbiAgICBsaXN0OiBbXCJHRVQgL2dpc3RzXCJdLFxuICAgIGxpc3RDb21tZW50czogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH0vY29tbWVudHNcIl0sXG4gICAgbGlzdENvbW1pdHM6IFtcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L2NvbW1pdHNcIl0sXG4gICAgbGlzdEZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9naXN0c1wiXSxcbiAgICBsaXN0Rm9ya3M6IFtcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L2ZvcmtzXCJdLFxuICAgIGxpc3RQdWJsaWM6IFtcIkdFVCAvZ2lzdHMvcHVibGljXCJdLFxuICAgIGxpc3RTdGFycmVkOiBbXCJHRVQgL2dpc3RzL3N0YXJyZWRcIl0sXG4gICAgc3RhcjogW1wiUFVUIC9naXN0cy97Z2lzdF9pZH0vc3RhclwiXSxcbiAgICB1bnN0YXI6IFtcIkRFTEVURSAvZ2lzdHMve2dpc3RfaWR9L3N0YXJcIl0sXG4gICAgdXBkYXRlOiBbXCJQQVRDSCAvZ2lzdHMve2dpc3RfaWR9XCJdLFxuICAgIHVwZGF0ZUNvbW1lbnQ6IFtcIlBBVENIIC9naXN0cy97Z2lzdF9pZH0vY29tbWVudHMve2NvbW1lbnRfaWR9XCJdXG4gIH0sXG4gIGdpdDoge1xuICAgIGNyZWF0ZUJsb2I6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9ibG9ic1wiXSxcbiAgICBjcmVhdGVDb21taXQ6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9jb21taXRzXCJdLFxuICAgIGNyZWF0ZVJlZjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3JlZnNcIl0sXG4gICAgY3JlYXRlVGFnOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvdGFnc1wiXSxcbiAgICBjcmVhdGVUcmVlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvdHJlZXNcIl0sXG4gICAgZGVsZXRlUmVmOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9yZWZzL3tyZWZ9XCJdLFxuICAgIGdldEJsb2I6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L2Jsb2JzL3tmaWxlX3NoYX1cIl0sXG4gICAgZ2V0Q29tbWl0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9jb21taXRzL3tjb21taXRfc2hhfVwiXSxcbiAgICBnZXRSZWY6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3JlZi97cmVmfVwiXSxcbiAgICBnZXRUYWc6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3RhZ3Mve3RhZ19zaGF9XCJdLFxuICAgIGdldFRyZWU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3RyZWVzL3t0cmVlX3NoYX1cIl0sXG4gICAgbGlzdE1hdGNoaW5nUmVmczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvbWF0Y2hpbmctcmVmcy97cmVmfVwiXSxcbiAgICB1cGRhdGVSZWY6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvcmVmcy97cmVmfVwiXVxuICB9LFxuICBnaXRpZ25vcmU6IHtcbiAgICBnZXRBbGxUZW1wbGF0ZXM6IFtcIkdFVCAvZ2l0aWdub3JlL3RlbXBsYXRlc1wiXSxcbiAgICBnZXRUZW1wbGF0ZTogW1wiR0VUIC9naXRpZ25vcmUvdGVtcGxhdGVzL3tuYW1lfVwiXVxuICB9LFxuICBpbnRlcmFjdGlvbnM6IHtcbiAgICBnZXRSZXN0cmljdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICBnZXRSZXN0cmljdGlvbnNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgZ2V0UmVzdHJpY3Rpb25zRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgZ2V0UmVzdHJpY3Rpb25zRm9yWW91clB1YmxpY1JlcG9zOiBbXCJHRVQgL3VzZXIvaW50ZXJhY3Rpb24tbGltaXRzXCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJpbnRlcmFjdGlvbnNcIiwgXCJnZXRSZXN0cmljdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlclwiXVxuICAgIH1dLFxuICAgIHJlbW92ZVJlc3RyaWN0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIHJlbW92ZVJlc3RyaWN0aW9uc0Zvck9yZzogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICByZW1vdmVSZXN0cmljdGlvbnNGb3JSZXBvOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICByZW1vdmVSZXN0cmljdGlvbnNGb3JZb3VyUHVibGljUmVwb3M6IFtcIkRFTEVURSAvdXNlci9pbnRlcmFjdGlvbi1saW1pdHNcIiwge30sIHtcbiAgICAgIHJlbmFtZWQ6IFtcImludGVyYWN0aW9uc1wiLCBcInJlbW92ZVJlc3RyaWN0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdXG4gICAgfV0sXG4gICAgc2V0UmVzdHJpY3Rpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBVVCAvdXNlci9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgc2V0UmVzdHJpY3Rpb25zRm9yT3JnOiBbXCJQVVQgL29yZ3Mve29yZ30vaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIHNldFJlc3RyaWN0aW9uc0ZvclJlcG86IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIHNldFJlc3RyaWN0aW9uc0ZvcllvdXJQdWJsaWNSZXBvczogW1wiUFVUIC91c2VyL2ludGVyYWN0aW9uLWxpbWl0c1wiLCB7fSwge1xuICAgICAgcmVuYW1lZDogW1wiaW50ZXJhY3Rpb25zXCIsIFwic2V0UmVzdHJpY3Rpb25zRm9yQXV0aGVudGljYXRlZFVzZXJcIl1cbiAgICB9XVxuICB9LFxuICBpc3N1ZXM6IHtcbiAgICBhZGRBc3NpZ25lZXM6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9hc3NpZ25lZXNcIl0sXG4gICAgYWRkTGFiZWxzOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbGFiZWxzXCJdLFxuICAgIGNoZWNrVXNlckNhbkJlQXNzaWduZWQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXNzaWduZWVzL3thc3NpZ25lZX1cIl0sXG4gICAgY3JlYXRlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXNcIl0sXG4gICAgY3JlYXRlQ29tbWVudDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2NvbW1lbnRzXCJdLFxuICAgIGNyZWF0ZUxhYmVsOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sYWJlbHNcIl0sXG4gICAgY3JlYXRlTWlsZXN0b25lOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzXCJdLFxuICAgIGRlbGV0ZUNvbW1lbnQ6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBkZWxldGVMYWJlbDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sYWJlbHMve25hbWV9XCJdLFxuICAgIGRlbGV0ZU1pbGVzdG9uZTogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzL3ttaWxlc3RvbmVfbnVtYmVyfVwiXSxcbiAgICBnZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9XCJdLFxuICAgIGdldENvbW1lbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBnZXRFdmVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvZXZlbnRzL3tldmVudF9pZH1cIl0sXG4gICAgZ2V0TGFiZWw6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbGFiZWxzL3tuYW1lfVwiXSxcbiAgICBnZXRNaWxlc3RvbmU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lcy97bWlsZXN0b25lX251bWJlcn1cIl0sXG4gICAgbGlzdDogW1wiR0VUIC9pc3N1ZXNcIl0sXG4gICAgbGlzdEFzc2lnbmVlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hc3NpZ25lZXNcIl0sXG4gICAgbGlzdENvbW1lbnRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9jb21tZW50c1wiXSxcbiAgICBsaXN0Q29tbWVudHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50c1wiXSxcbiAgICBsaXN0RXZlbnRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9ldmVudHNcIl0sXG4gICAgbGlzdEV2ZW50c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2V2ZW50c1wiXSxcbiAgICBsaXN0RXZlbnRzRm9yVGltZWxpbmU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L3RpbWVsaW5lXCJdLFxuICAgIGxpc3RGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2lzc3Vlc1wiXSxcbiAgICBsaXN0Rm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vaXNzdWVzXCJdLFxuICAgIGxpc3RGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlc1wiXSxcbiAgICBsaXN0TGFiZWxzRm9yTWlsZXN0b25lOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXMve21pbGVzdG9uZV9udW1iZXJ9L2xhYmVsc1wiXSxcbiAgICBsaXN0TGFiZWxzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sYWJlbHNcIl0sXG4gICAgbGlzdExhYmVsc09uSXNzdWU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xhYmVsc1wiXSxcbiAgICBsaXN0TWlsZXN0b25lczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzXCJdLFxuICAgIGxvY2s6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xvY2tcIl0sXG4gICAgcmVtb3ZlQWxsTGFiZWxzOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sYWJlbHNcIl0sXG4gICAgcmVtb3ZlQXNzaWduZWVzOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9hc3NpZ25lZXNcIl0sXG4gICAgcmVtb3ZlTGFiZWw6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xhYmVscy97bmFtZX1cIl0sXG4gICAgc2V0TGFiZWxzOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sYWJlbHNcIl0sXG4gICAgdW5sb2NrOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sb2NrXCJdLFxuICAgIHVwZGF0ZTogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfVwiXSxcbiAgICB1cGRhdGVDb21tZW50OiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICB1cGRhdGVMYWJlbDogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhYmVscy97bmFtZX1cIl0sXG4gICAgdXBkYXRlTWlsZXN0b25lOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lcy97bWlsZXN0b25lX251bWJlcn1cIl1cbiAgfSxcbiAgbGljZW5zZXM6IHtcbiAgICBnZXQ6IFtcIkdFVCAvbGljZW5zZXMve2xpY2Vuc2V9XCJdLFxuICAgIGdldEFsbENvbW1vbmx5VXNlZDogW1wiR0VUIC9saWNlbnNlc1wiXSxcbiAgICBnZXRGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xpY2Vuc2VcIl1cbiAgfSxcbiAgbWFya2Rvd246IHtcbiAgICByZW5kZXI6IFtcIlBPU1QgL21hcmtkb3duXCJdLFxuICAgIHJlbmRlclJhdzogW1wiUE9TVCAvbWFya2Rvd24vcmF3XCIsIHtcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgXCJjb250ZW50LXR5cGVcIjogXCJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04XCJcbiAgICAgIH1cbiAgICB9XVxuICB9LFxuICBtZXRhOiB7XG4gICAgZ2V0OiBbXCJHRVQgL21ldGFcIl0sXG4gICAgZ2V0T2N0b2NhdDogW1wiR0VUIC9vY3RvY2F0XCJdLFxuICAgIGdldFplbjogW1wiR0VUIC96ZW5cIl0sXG4gICAgcm9vdDogW1wiR0VUIC9cIl1cbiAgfSxcbiAgbWlncmF0aW9uczoge1xuICAgIGNhbmNlbEltcG9ydDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbXBvcnRcIl0sXG4gICAgZGVsZXRlQXJjaGl2ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9hcmNoaXZlXCJdLFxuICAgIGRlbGV0ZUFyY2hpdmVGb3JPcmc6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L2FyY2hpdmVcIl0sXG4gICAgZG93bmxvYWRBcmNoaXZlRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9hcmNoaXZlXCJdLFxuICAgIGdldEFyY2hpdmVGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vYXJjaGl2ZVwiXSxcbiAgICBnZXRDb21taXRBdXRob3JzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ltcG9ydC9hdXRob3JzXCJdLFxuICAgIGdldEltcG9ydFN0YXR1czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbXBvcnRcIl0sXG4gICAgZ2V0TGFyZ2VGaWxlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbXBvcnQvbGFyZ2VfZmlsZXNcIl0sXG4gICAgZ2V0U3RhdHVzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9XCJdLFxuICAgIGdldFN0YXR1c0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH1cIl0sXG4gICAgbGlzdEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvbWlncmF0aW9uc1wiXSxcbiAgICBsaXN0Rm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vbWlncmF0aW9uc1wiXSxcbiAgICBsaXN0UmVwb3NGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCJdLFxuICAgIGxpc3RSZXBvc0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCJdLFxuICAgIGxpc3RSZXBvc0ZvclVzZXI6IFtcIkdFVCAvdXNlci9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLCB7fSwge1xuICAgICAgcmVuYW1lZDogW1wibWlncmF0aW9uc1wiLCBcImxpc3RSZXBvc0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdXG4gICAgfV0sXG4gICAgbWFwQ29tbWl0QXV0aG9yOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaW1wb3J0L2F1dGhvcnMve2F1dGhvcl9pZH1cIl0sXG4gICAgc2V0TGZzUHJlZmVyZW5jZTogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2ltcG9ydC9sZnNcIl0sXG4gICAgc3RhcnRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9taWdyYXRpb25zXCJdLFxuICAgIHN0YXJ0Rm9yT3JnOiBbXCJQT1NUIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnNcIl0sXG4gICAgc3RhcnRJbXBvcnQ6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vaW1wb3J0XCJdLFxuICAgIHVubG9ja1JlcG9Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiREVMRVRFIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3Mve3JlcG9fbmFtZX0vbG9ja1wiXSxcbiAgICB1bmxvY2tSZXBvRm9yT3JnOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9yZXBvcy97cmVwb19uYW1lfS9sb2NrXCJdLFxuICAgIHVwZGF0ZUltcG9ydDogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2ltcG9ydFwiXVxuICB9LFxuICBvcmdzOiB7XG4gICAgYmxvY2tVc2VyOiBbXCJQVVQgL29yZ3Mve29yZ30vYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgY2FuY2VsSW52aXRhdGlvbjogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfVwiXSxcbiAgICBjaGVja0Jsb2NrZWRVc2VyOiBbXCJHRVQgL29yZ3Mve29yZ30vYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgY2hlY2tNZW1iZXJzaGlwRm9yVXNlcjogW1wiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfVwiXSxcbiAgICBjaGVja1B1YmxpY01lbWJlcnNoaXBGb3JVc2VyOiBbXCJHRVQgL29yZ3Mve29yZ30vcHVibGljX21lbWJlcnMve3VzZXJuYW1lfVwiXSxcbiAgICBjb252ZXJ0TWVtYmVyVG9PdXRzaWRlQ29sbGFib3JhdG9yOiBbXCJQVVQgL29yZ3Mve29yZ30vb3V0c2lkZV9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX1cIl0sXG4gICAgY3JlYXRlSW52aXRhdGlvbjogW1wiUE9TVCAvb3Jncy97b3JnfS9pbnZpdGF0aW9uc1wiXSxcbiAgICBjcmVhdGVXZWJob29rOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2hvb2tzXCJdLFxuICAgIGRlbGV0ZVdlYmhvb2s6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgZ2V0OiBbXCJHRVQgL29yZ3Mve29yZ31cIl0sXG4gICAgZ2V0TWVtYmVyc2hpcEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvbWVtYmVyc2hpcHMvb3Jncy97b3JnfVwiXSxcbiAgICBnZXRNZW1iZXJzaGlwRm9yVXNlcjogW1wiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnNoaXBzL3t1c2VybmFtZX1cIl0sXG4gICAgZ2V0V2ViaG9vazogW1wiR0VUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfVwiXSxcbiAgICBnZXRXZWJob29rQ29uZmlnRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L2NvbmZpZ1wiXSxcbiAgICBnZXRXZWJob29rRGVsaXZlcnk6IFtcIkdFVCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9XCJdLFxuICAgIGxpc3Q6IFtcIkdFVCAvb3JnYW5pemF0aW9uc1wiXSxcbiAgICBsaXN0QXBwSW5zdGFsbGF0aW9uczogW1wiR0VUIC9vcmdzL3tvcmd9L2luc3RhbGxhdGlvbnNcIl0sXG4gICAgbGlzdEJsb2NrZWRVc2VyczogW1wiR0VUIC9vcmdzL3tvcmd9L2Jsb2Nrc1wiXSxcbiAgICBsaXN0Q3VzdG9tUm9sZXM6IFtcIkdFVCAvb3JnYW5pemF0aW9ucy97b3JnYW5pemF0aW9uX2lkfS9jdXN0b21fcm9sZXNcIl0sXG4gICAgbGlzdEZhaWxlZEludml0YXRpb25zOiBbXCJHRVQgL29yZ3Mve29yZ30vZmFpbGVkX2ludml0YXRpb25zXCJdLFxuICAgIGxpc3RGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL29yZ3NcIl0sXG4gICAgbGlzdEZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9vcmdzXCJdLFxuICAgIGxpc3RJbnZpdGF0aW9uVGVhbXM6IFtcIkdFVCAvb3Jncy97b3JnfS9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH0vdGVhbXNcIl0sXG4gICAgbGlzdE1lbWJlcnM6IFtcIkdFVCAvb3Jncy97b3JnfS9tZW1iZXJzXCJdLFxuICAgIGxpc3RNZW1iZXJzaGlwc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvbWVtYmVyc2hpcHMvb3Jnc1wiXSxcbiAgICBsaXN0T3V0c2lkZUNvbGxhYm9yYXRvcnM6IFtcIkdFVCAvb3Jncy97b3JnfS9vdXRzaWRlX2NvbGxhYm9yYXRvcnNcIl0sXG4gICAgbGlzdFBlbmRpbmdJbnZpdGF0aW9uczogW1wiR0VUIC9vcmdzL3tvcmd9L2ludml0YXRpb25zXCJdLFxuICAgIGxpc3RQdWJsaWNNZW1iZXJzOiBbXCJHRVQgL29yZ3Mve29yZ30vcHVibGljX21lbWJlcnNcIl0sXG4gICAgbGlzdFdlYmhvb2tEZWxpdmVyaWVzOiBbXCJHRVQgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXNcIl0sXG4gICAgbGlzdFdlYmhvb2tzOiBbXCJHRVQgL29yZ3Mve29yZ30vaG9va3NcIl0sXG4gICAgcGluZ1dlYmhvb2s6IFtcIlBPU1QgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L3BpbmdzXCJdLFxuICAgIHJlZGVsaXZlcldlYmhvb2tEZWxpdmVyeTogW1wiUE9TVCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9L2F0dGVtcHRzXCJdLFxuICAgIHJlbW92ZU1lbWJlcjogW1wiREVMRVRFIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfVwiXSxcbiAgICByZW1vdmVNZW1iZXJzaGlwRm9yVXNlcjogW1wiREVMRVRFIC9vcmdzL3tvcmd9L21lbWJlcnNoaXBzL3t1c2VybmFtZX1cIl0sXG4gICAgcmVtb3ZlT3V0c2lkZUNvbGxhYm9yYXRvcjogW1wiREVMRVRFIC9vcmdzL3tvcmd9L291dHNpZGVfY29sbGFib3JhdG9ycy97dXNlcm5hbWV9XCJdLFxuICAgIHJlbW92ZVB1YmxpY01lbWJlcnNoaXBGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiREVMRVRFIC9vcmdzL3tvcmd9L3B1YmxpY19tZW1iZXJzL3t1c2VybmFtZX1cIl0sXG4gICAgc2V0TWVtYmVyc2hpcEZvclVzZXI6IFtcIlBVVCAvb3Jncy97b3JnfS9tZW1iZXJzaGlwcy97dXNlcm5hbWV9XCJdLFxuICAgIHNldFB1YmxpY01lbWJlcnNoaXBGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUFVUIC9vcmdzL3tvcmd9L3B1YmxpY19tZW1iZXJzL3t1c2VybmFtZX1cIl0sXG4gICAgdW5ibG9ja1VzZXI6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9ibG9ja3Mve3VzZXJuYW1lfVwiXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9vcmdzL3tvcmd9XCJdLFxuICAgIHVwZGF0ZU1lbWJlcnNoaXBGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUEFUQ0ggL3VzZXIvbWVtYmVyc2hpcHMvb3Jncy97b3JnfVwiXSxcbiAgICB1cGRhdGVXZWJob29rOiBbXCJQQVRDSCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgdXBkYXRlV2ViaG9va0NvbmZpZ0Zvck9yZzogW1wiUEFUQ0ggL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L2NvbmZpZ1wiXVxuICB9LFxuICBwYWNrYWdlczoge1xuICAgIGRlbGV0ZVBhY2thZ2VGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiREVMRVRFIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9XCJdLFxuICAgIGRlbGV0ZVBhY2thZ2VGb3JPcmc6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfVwiXSxcbiAgICBkZWxldGVQYWNrYWdlRm9yVXNlcjogW1wiREVMRVRFIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9XCJdLFxuICAgIGRlbGV0ZVBhY2thZ2VWZXJzaW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfVwiXSxcbiAgICBkZWxldGVQYWNrYWdlVmVyc2lvbkZvck9yZzogW1wiREVMRVRFIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9XCJdLFxuICAgIGRlbGV0ZVBhY2thZ2VWZXJzaW9uRm9yVXNlcjogW1wiREVMRVRFIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9XCJdLFxuICAgIGdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvckFQYWNrYWdlT3duZWRCeUFuT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIiwge30sIHtcbiAgICAgIHJlbmFtZWQ6IFtcInBhY2thZ2VzXCIsIFwiZ2V0QWxsUGFja2FnZVZlcnNpb25zRm9yUGFja2FnZU93bmVkQnlPcmdcIl1cbiAgICB9XSxcbiAgICBnZXRBbGxQYWNrYWdlVmVyc2lvbnNGb3JBUGFja2FnZU93bmVkQnlUaGVBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zXCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJwYWNrYWdlc1wiLCBcImdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvclBhY2thZ2VPd25lZEJ5QXV0aGVudGljYXRlZFVzZXJcIl1cbiAgICB9XSxcbiAgICBnZXRBbGxQYWNrYWdlVmVyc2lvbnNGb3JQYWNrYWdlT3duZWRCeUF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIl0sXG4gICAgZ2V0QWxsUGFja2FnZVZlcnNpb25zRm9yUGFja2FnZU93bmVkQnlPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiXSxcbiAgICBnZXRBbGxQYWNrYWdlVmVyc2lvbnNGb3JQYWNrYWdlT3duZWRCeVVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiXSxcbiAgICBnZXRQYWNrYWdlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfVwiXSxcbiAgICBnZXRQYWNrYWdlRm9yT3JnYW5pemF0aW9uOiBbXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX1cIl0sXG4gICAgZ2V0UGFja2FnZUZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfVwiXSxcbiAgICBnZXRQYWNrYWdlVmVyc2lvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH1cIl0sXG4gICAgZ2V0UGFja2FnZVZlcnNpb25Gb3JPcmdhbml6YXRpb246IFtcIkdFVCAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfVwiXSxcbiAgICBnZXRQYWNrYWdlVmVyc2lvbkZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfVwiXSxcbiAgICBsaXN0UGFja2FnZXNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3BhY2thZ2VzXCJdLFxuICAgIGxpc3RQYWNrYWdlc0Zvck9yZ2FuaXphdGlvbjogW1wiR0VUIC9vcmdzL3tvcmd9L3BhY2thZ2VzXCJdLFxuICAgIGxpc3RQYWNrYWdlc0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlc1wiXSxcbiAgICByZXN0b3JlUGFja2FnZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3Jlc3RvcmV7P3Rva2VufVwiXSxcbiAgICByZXN0b3JlUGFja2FnZUZvck9yZzogW1wiUE9TVCAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS9yZXN0b3Jlez90b2tlbn1cIl0sXG4gICAgcmVzdG9yZVBhY2thZ2VGb3JVc2VyOiBbXCJQT1NUIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3Jlc3RvcmV7P3Rva2VufVwiXSxcbiAgICByZXN0b3JlUGFja2FnZVZlcnNpb25Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfS9yZXN0b3JlXCJdLFxuICAgIHJlc3RvcmVQYWNrYWdlVmVyc2lvbkZvck9yZzogW1wiUE9TVCAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfS9yZXN0b3JlXCJdLFxuICAgIHJlc3RvcmVQYWNrYWdlVmVyc2lvbkZvclVzZXI6IFtcIlBPU1QgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH0vcmVzdG9yZVwiXVxuICB9LFxuICBwcm9qZWN0czoge1xuICAgIGFkZENvbGxhYm9yYXRvcjogW1wiUFVUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sbGFib3JhdG9ycy97dXNlcm5hbWV9XCJdLFxuICAgIGNyZWF0ZUNhcmQ6IFtcIlBPU1QgL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH0vY2FyZHNcIl0sXG4gICAgY3JlYXRlQ29sdW1uOiBbXCJQT1NUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sdW1uc1wiXSxcbiAgICBjcmVhdGVGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9wcm9qZWN0c1wiXSxcbiAgICBjcmVhdGVGb3JPcmc6IFtcIlBPU1QgL29yZ3Mve29yZ30vcHJvamVjdHNcIl0sXG4gICAgY3JlYXRlRm9yUmVwbzogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJvamVjdHNcIl0sXG4gICAgZGVsZXRlOiBbXCJERUxFVEUgL3Byb2plY3RzL3twcm9qZWN0X2lkfVwiXSxcbiAgICBkZWxldGVDYXJkOiBbXCJERUxFVEUgL3Byb2plY3RzL2NvbHVtbnMvY2FyZHMve2NhcmRfaWR9XCJdLFxuICAgIGRlbGV0ZUNvbHVtbjogW1wiREVMRVRFIC9wcm9qZWN0cy9jb2x1bW5zL3tjb2x1bW5faWR9XCJdLFxuICAgIGdldDogW1wiR0VUIC9wcm9qZWN0cy97cHJvamVjdF9pZH1cIl0sXG4gICAgZ2V0Q2FyZDogW1wiR0VUIC9wcm9qZWN0cy9jb2x1bW5zL2NhcmRzL3tjYXJkX2lkfVwiXSxcbiAgICBnZXRDb2x1bW46IFtcIkdFVCAvcHJvamVjdHMvY29sdW1ucy97Y29sdW1uX2lkfVwiXSxcbiAgICBnZXRQZXJtaXNzaW9uRm9yVXNlcjogW1wiR0VUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sbGFib3JhdG9ycy97dXNlcm5hbWV9L3Blcm1pc3Npb25cIl0sXG4gICAgbGlzdENhcmRzOiBbXCJHRVQgL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH0vY2FyZHNcIl0sXG4gICAgbGlzdENvbGxhYm9yYXRvcnM6IFtcIkdFVCAvcHJvamVjdHMve3Byb2plY3RfaWR9L2NvbGxhYm9yYXRvcnNcIl0sXG4gICAgbGlzdENvbHVtbnM6IFtcIkdFVCAvcHJvamVjdHMve3Byb2plY3RfaWR9L2NvbHVtbnNcIl0sXG4gICAgbGlzdEZvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3Byb2plY3RzXCJdLFxuICAgIGxpc3RGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Byb2plY3RzXCJdLFxuICAgIGxpc3RGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcHJvamVjdHNcIl0sXG4gICAgbW92ZUNhcmQ6IFtcIlBPU1QgL3Byb2plY3RzL2NvbHVtbnMvY2FyZHMve2NhcmRfaWR9L21vdmVzXCJdLFxuICAgIG1vdmVDb2x1bW46IFtcIlBPU1QgL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH0vbW92ZXNcIl0sXG4gICAgcmVtb3ZlQ29sbGFib3JhdG9yOiBbXCJERUxFVEUgL3Byb2plY3RzL3twcm9qZWN0X2lkfS9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX1cIl0sXG4gICAgdXBkYXRlOiBbXCJQQVRDSCAvcHJvamVjdHMve3Byb2plY3RfaWR9XCJdLFxuICAgIHVwZGF0ZUNhcmQ6IFtcIlBBVENIIC9wcm9qZWN0cy9jb2x1bW5zL2NhcmRzL3tjYXJkX2lkfVwiXSxcbiAgICB1cGRhdGVDb2x1bW46IFtcIlBBVENIIC9wcm9qZWN0cy9jb2x1bW5zL3tjb2x1bW5faWR9XCJdXG4gIH0sXG4gIHB1bGxzOiB7XG4gICAgY2hlY2tJZk1lcmdlZDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L21lcmdlXCJdLFxuICAgIGNyZWF0ZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHNcIl0sXG4gICAgY3JlYXRlUmVwbHlGb3JSZXZpZXdDb21tZW50OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZXBsaWVzXCJdLFxuICAgIGNyZWF0ZVJldmlldzogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzXCJdLFxuICAgIGNyZWF0ZVJldmlld0NvbW1lbnQ6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vY29tbWVudHNcIl0sXG4gICAgZGVsZXRlUGVuZGluZ1JldmlldzogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH1cIl0sXG4gICAgZGVsZXRlUmV2aWV3Q29tbWVudDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgZGlzbWlzc1JldmlldzogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH0vZGlzbWlzc2Fsc1wiXSxcbiAgICBnZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfVwiXSxcbiAgICBnZXRSZXZpZXc6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzL3tyZXZpZXdfaWR9XCJdLFxuICAgIGdldFJldmlld0NvbW1lbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIGxpc3Q6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHNcIl0sXG4gICAgbGlzdENvbW1lbnRzRm9yUmV2aWV3OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfS9jb21tZW50c1wiXSxcbiAgICBsaXN0Q29tbWl0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2NvbW1pdHNcIl0sXG4gICAgbGlzdEZpbGVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vZmlsZXNcIl0sXG4gICAgbGlzdFJlcXVlc3RlZFJldmlld2VyczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3JlcXVlc3RlZF9yZXZpZXdlcnNcIl0sXG4gICAgbGlzdFJldmlld0NvbW1lbnRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vY29tbWVudHNcIl0sXG4gICAgbGlzdFJldmlld0NvbW1lbnRzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy9jb21tZW50c1wiXSxcbiAgICBsaXN0UmV2aWV3czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3NcIl0sXG4gICAgbWVyZ2U6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9tZXJnZVwiXSxcbiAgICByZW1vdmVSZXF1ZXN0ZWRSZXZpZXdlcnM6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXF1ZXN0ZWRfcmV2aWV3ZXJzXCJdLFxuICAgIHJlcXVlc3RSZXZpZXdlcnM6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmVxdWVzdGVkX3Jldmlld2Vyc1wiXSxcbiAgICBzdWJtaXRSZXZpZXc6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfS9ldmVudHNcIl0sXG4gICAgdXBkYXRlOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfVwiXSxcbiAgICB1cGRhdGVCcmFuY2g6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS91cGRhdGUtYnJhbmNoXCJdLFxuICAgIHVwZGF0ZVJldmlldzogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH1cIl0sXG4gICAgdXBkYXRlUmV2aWV3Q29tbWVudDogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXVxuICB9LFxuICByYXRlTGltaXQ6IHtcbiAgICBnZXQ6IFtcIkdFVCAvcmF0ZV9saW1pdFwiXVxuICB9LFxuICByZWFjdGlvbnM6IHtcbiAgICBjcmVhdGVGb3JDb21taXRDb21tZW50OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zXCJdLFxuICAgIGNyZWF0ZUZvcklzc3VlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vcmVhY3Rpb25zXCJdLFxuICAgIGNyZWF0ZUZvcklzc3VlQ29tbWVudDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIl0sXG4gICAgY3JlYXRlRm9yUHVsbFJlcXVlc3RSZXZpZXdDb21tZW50OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zXCJdLFxuICAgIGNyZWF0ZUZvclJlbGVhc2U6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfS9yZWFjdGlvbnNcIl0sXG4gICAgY3JlYXRlRm9yVGVhbURpc2N1c3Npb25Db21tZW50SW5Pcmc6IFtcIlBPU1QgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9L3JlYWN0aW9uc1wiXSxcbiAgICBjcmVhdGVGb3JUZWFtRGlzY3Vzc2lvbkluT3JnOiBbXCJQT1NUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vcmVhY3Rpb25zXCJdLFxuICAgIGRlbGV0ZUZvckNvbW1pdENvbW1lbnQ6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCJdLFxuICAgIGRlbGV0ZUZvcklzc3VlOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9yZWFjdGlvbnMve3JlYWN0aW9uX2lkfVwiXSxcbiAgICBkZWxldGVGb3JJc3N1ZUNvbW1lbnQ6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnMve3JlYWN0aW9uX2lkfVwiXSxcbiAgICBkZWxldGVGb3JQdWxsUmVxdWVzdENvbW1lbnQ6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCJdLFxuICAgIGRlbGV0ZUZvclJlbGVhc2U6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCJdLFxuICAgIGRlbGV0ZUZvclRlYW1EaXNjdXNzaW9uOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9yZWFjdGlvbnMve3JlYWN0aW9uX2lkfVwiXSxcbiAgICBkZWxldGVGb3JUZWFtRGlzY3Vzc2lvbkNvbW1lbnQ6IFtcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn0vcmVhY3Rpb25zL3tyZWFjdGlvbl9pZH1cIl0sXG4gICAgbGlzdEZvckNvbW1pdENvbW1lbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiXSxcbiAgICBsaXN0Rm9ySXNzdWU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L3JlYWN0aW9uc1wiXSxcbiAgICBsaXN0Rm9ySXNzdWVDb21tZW50OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zXCJdLFxuICAgIGxpc3RGb3JQdWxsUmVxdWVzdFJldmlld0NvbW1lbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiXSxcbiAgICBsaXN0Rm9yUmVsZWFzZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vcmVhY3Rpb25zXCJdLFxuICAgIGxpc3RGb3JUZWFtRGlzY3Vzc2lvbkNvbW1lbnRJbk9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfbnVtYmVyfS9yZWFjdGlvbnNcIl0sXG4gICAgbGlzdEZvclRlYW1EaXNjdXNzaW9uSW5Pcmc6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L3JlYWN0aW9uc1wiXVxuICB9LFxuICByZXBvczoge1xuICAgIGFjY2VwdEludml0YXRpb246IFtcIlBBVENIIC91c2VyL3JlcG9zaXRvcnlfaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9XCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJyZXBvc1wiLCBcImFjY2VwdEludml0YXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlclwiXVxuICAgIH1dLFxuICAgIGFjY2VwdEludml0YXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUEFUQ0ggL3VzZXIvcmVwb3NpdG9yeV9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIl0sXG4gICAgYWRkQXBwQWNjZXNzUmVzdHJpY3Rpb25zOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy9hcHBzXCIsIHt9LCB7XG4gICAgICBtYXBUb0RhdGE6IFwiYXBwc1wiXG4gICAgfV0sXG4gICAgYWRkQ29sbGFib3JhdG9yOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiXSxcbiAgICBhZGRTdGF0dXNDaGVja0NvbnRleHRzOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3MvY29udGV4dHNcIiwge30sIHtcbiAgICAgIG1hcFRvRGF0YTogXCJjb250ZXh0c1wiXG4gICAgfV0sXG4gICAgYWRkVGVhbUFjY2Vzc1Jlc3RyaWN0aW9uczogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdGVhbXNcIiwge30sIHtcbiAgICAgIG1hcFRvRGF0YTogXCJ0ZWFtc1wiXG4gICAgfV0sXG4gICAgYWRkVXNlckFjY2Vzc1Jlc3RyaWN0aW9uczogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdXNlcnNcIiwge30sIHtcbiAgICAgIG1hcFRvRGF0YTogXCJ1c2Vyc1wiXG4gICAgfV0sXG4gICAgY2hlY2tDb2xsYWJvcmF0b3I6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29sbGFib3JhdG9ycy97dXNlcm5hbWV9XCJdLFxuICAgIGNoZWNrVnVsbmVyYWJpbGl0eUFsZXJ0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS92dWxuZXJhYmlsaXR5LWFsZXJ0c1wiXSxcbiAgICBjb2Rlb3duZXJzRXJyb3JzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVvd25lcnMvZXJyb3JzXCJdLFxuICAgIGNvbXBhcmVDb21taXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbXBhcmUve2Jhc2V9Li4ue2hlYWR9XCJdLFxuICAgIGNvbXBhcmVDb21taXRzV2l0aEJhc2VoZWFkOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbXBhcmUve2Jhc2VoZWFkfVwiXSxcbiAgICBjcmVhdGVBdXRvbGluazogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXV0b2xpbmtzXCJdLFxuICAgIGNyZWF0ZUNvbW1pdENvbW1lbnQ6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve2NvbW1pdF9zaGF9L2NvbW1lbnRzXCJdLFxuICAgIGNyZWF0ZUNvbW1pdFNpZ25hdHVyZVByb3RlY3Rpb246IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc2lnbmF0dXJlc1wiXSxcbiAgICBjcmVhdGVDb21taXRTdGF0dXM6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXR1c2VzL3tzaGF9XCJdLFxuICAgIGNyZWF0ZURlcGxveUtleTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30va2V5c1wiXSxcbiAgICBjcmVhdGVEZXBsb3ltZW50OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50c1wiXSxcbiAgICBjcmVhdGVEZXBsb3ltZW50U3RhdHVzOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50cy97ZGVwbG95bWVudF9pZH0vc3RhdHVzZXNcIl0sXG4gICAgY3JlYXRlRGlzcGF0Y2hFdmVudDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGlzcGF0Y2hlc1wiXSxcbiAgICBjcmVhdGVGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9yZXBvc1wiXSxcbiAgICBjcmVhdGVGb3JrOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9mb3Jrc1wiXSxcbiAgICBjcmVhdGVJbk9yZzogW1wiUE9TVCAvb3Jncy97b3JnfS9yZXBvc1wiXSxcbiAgICBjcmVhdGVPclVwZGF0ZUVudmlyb25tZW50OiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX1cIl0sXG4gICAgY3JlYXRlT3JVcGRhdGVGaWxlQ29udGVudHM6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29udGVudHMve3BhdGh9XCJdLFxuICAgIGNyZWF0ZVBhZ2VzU2l0ZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXNcIl0sXG4gICAgY3JlYXRlUmVsZWFzZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXNcIl0sXG4gICAgY3JlYXRlVGFnUHJvdGVjdGlvbjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vdGFncy9wcm90ZWN0aW9uXCJdLFxuICAgIGNyZWF0ZVVzaW5nVGVtcGxhdGU6IFtcIlBPU1QgL3JlcG9zL3t0ZW1wbGF0ZV9vd25lcn0ve3RlbXBsYXRlX3JlcG99L2dlbmVyYXRlXCJdLFxuICAgIGNyZWF0ZVdlYmhvb2s6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzXCJdLFxuICAgIGRlY2xpbmVJbnZpdGF0aW9uOiBbXCJERUxFVEUgL3VzZXIvcmVwb3NpdG9yeV9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIiwge30sIHtcbiAgICAgIHJlbmFtZWQ6IFtcInJlcG9zXCIsIFwiZGVjbGluZUludml0YXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlclwiXVxuICAgIH1dLFxuICAgIGRlY2xpbmVJbnZpdGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9yZXBvc2l0b3J5X2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfVwiXSxcbiAgICBkZWxldGU6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb31cIl0sXG4gICAgZGVsZXRlQWNjZXNzUmVzdHJpY3Rpb25zOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zXCJdLFxuICAgIGRlbGV0ZUFkbWluQnJhbmNoUHJvdGVjdGlvbjogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL2VuZm9yY2VfYWRtaW5zXCJdLFxuICAgIGRlbGV0ZUFuRW52aXJvbm1lbnQ6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfVwiXSxcbiAgICBkZWxldGVBdXRvbGluazogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hdXRvbGlua3Mve2F1dG9saW5rX2lkfVwiXSxcbiAgICBkZWxldGVCcmFuY2hQcm90ZWN0aW9uOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb25cIl0sXG4gICAgZGVsZXRlQ29tbWl0Q29tbWVudDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgZGVsZXRlQ29tbWl0U2lnbmF0dXJlUHJvdGVjdGlvbjogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3NpZ25hdHVyZXNcIl0sXG4gICAgZGVsZXRlRGVwbG95S2V5OiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2tleXMve2tleV9pZH1cIl0sXG4gICAgZGVsZXRlRGVwbG95bWVudDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50cy97ZGVwbG95bWVudF9pZH1cIl0sXG4gICAgZGVsZXRlRmlsZTogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb250ZW50cy97cGF0aH1cIl0sXG4gICAgZGVsZXRlSW52aXRhdGlvbjogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIl0sXG4gICAgZGVsZXRlUGFnZXNTaXRlOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzXCJdLFxuICAgIGRlbGV0ZVB1bGxSZXF1ZXN0UmV2aWV3UHJvdGVjdGlvbjogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3B1bGxfcmVxdWVzdF9yZXZpZXdzXCJdLFxuICAgIGRlbGV0ZVJlbGVhc2U6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9XCJdLFxuICAgIGRlbGV0ZVJlbGVhc2VBc3NldDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy9hc3NldHMve2Fzc2V0X2lkfVwiXSxcbiAgICBkZWxldGVUYWdQcm90ZWN0aW9uOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RhZ3MvcHJvdGVjdGlvbi97dGFnX3Byb3RlY3Rpb25faWR9XCJdLFxuICAgIGRlbGV0ZVdlYmhvb2s6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9XCJdLFxuICAgIGRpc2FibGVBdXRvbWF0ZWRTZWN1cml0eUZpeGVzOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9tYXRlZC1zZWN1cml0eS1maXhlc1wiXSxcbiAgICBkaXNhYmxlTGZzRm9yUmVwbzogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sZnNcIl0sXG4gICAgZGlzYWJsZVZ1bG5lcmFiaWxpdHlBbGVydHM6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vdnVsbmVyYWJpbGl0eS1hbGVydHNcIl0sXG4gICAgZG93bmxvYWRBcmNoaXZlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3ppcGJhbGwve3JlZn1cIiwge30sIHtcbiAgICAgIHJlbmFtZWQ6IFtcInJlcG9zXCIsIFwiZG93bmxvYWRaaXBiYWxsQXJjaGl2ZVwiXVxuICAgIH1dLFxuICAgIGRvd25sb2FkVGFyYmFsbEFyY2hpdmU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdGFyYmFsbC97cmVmfVwiXSxcbiAgICBkb3dubG9hZFppcGJhbGxBcmNoaXZlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3ppcGJhbGwve3JlZn1cIl0sXG4gICAgZW5hYmxlQXV0b21hdGVkU2VjdXJpdHlGaXhlczogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hdXRvbWF0ZWQtc2VjdXJpdHktZml4ZXNcIl0sXG4gICAgZW5hYmxlTGZzRm9yUmVwbzogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sZnNcIl0sXG4gICAgZW5hYmxlVnVsbmVyYWJpbGl0eUFsZXJ0czogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS92dWxuZXJhYmlsaXR5LWFsZXJ0c1wiXSxcbiAgICBnZW5lcmF0ZVJlbGVhc2VOb3RlczogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMvZ2VuZXJhdGUtbm90ZXNcIl0sXG4gICAgZ2V0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99XCJdLFxuICAgIGdldEFjY2Vzc1Jlc3RyaWN0aW9uczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9uc1wiXSxcbiAgICBnZXRBZG1pbkJyYW5jaFByb3RlY3Rpb246IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9lbmZvcmNlX2FkbWluc1wiXSxcbiAgICBnZXRBbGxFbnZpcm9ubWVudHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzXCJdLFxuICAgIGdldEFsbFN0YXR1c0NoZWNrQ29udGV4dHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zdGF0dXNfY2hlY2tzL2NvbnRleHRzXCJdLFxuICAgIGdldEFsbFRvcGljczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90b3BpY3NcIl0sXG4gICAgZ2V0QXBwc1dpdGhBY2Nlc3NUb1Byb3RlY3RlZEJyYW5jaDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy9hcHBzXCJdLFxuICAgIGdldEF1dG9saW5rOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9saW5rcy97YXV0b2xpbmtfaWR9XCJdLFxuICAgIGdldEJyYW5jaDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofVwiXSxcbiAgICBnZXRCcmFuY2hQcm90ZWN0aW9uOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb25cIl0sXG4gICAgZ2V0Q2xvbmVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RyYWZmaWMvY2xvbmVzXCJdLFxuICAgIGdldENvZGVGcmVxdWVuY3lTdGF0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGF0cy9jb2RlX2ZyZXF1ZW5jeVwiXSxcbiAgICBnZXRDb2xsYWJvcmF0b3JQZXJtaXNzaW9uTGV2ZWw6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29sbGFib3JhdG9ycy97dXNlcm5hbWV9L3Blcm1pc3Npb25cIl0sXG4gICAgZ2V0Q29tYmluZWRTdGF0dXNGb3JSZWY6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfS9zdGF0dXNcIl0sXG4gICAgZ2V0Q29tbWl0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn1cIl0sXG4gICAgZ2V0Q29tbWl0QWN0aXZpdHlTdGF0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGF0cy9jb21taXRfYWN0aXZpdHlcIl0sXG4gICAgZ2V0Q29tbWl0Q29tbWVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgZ2V0Q29tbWl0U2lnbmF0dXJlUHJvdGVjdGlvbjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3NpZ25hdHVyZXNcIl0sXG4gICAgZ2V0Q29tbXVuaXR5UHJvZmlsZU1ldHJpY3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbXVuaXR5L3Byb2ZpbGVcIl0sXG4gICAgZ2V0Q29udGVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb250ZW50cy97cGF0aH1cIl0sXG4gICAgZ2V0Q29udHJpYnV0b3JzU3RhdHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3RhdHMvY29udHJpYnV0b3JzXCJdLFxuICAgIGdldERlcGxveUtleTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9rZXlzL3trZXlfaWR9XCJdLFxuICAgIGdldERlcGxveW1lbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHMve2RlcGxveW1lbnRfaWR9XCJdLFxuICAgIGdldERlcGxveW1lbnRTdGF0dXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHMve2RlcGxveW1lbnRfaWR9L3N0YXR1c2VzL3tzdGF0dXNfaWR9XCJdLFxuICAgIGdldEVudmlyb25tZW50OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX1cIl0sXG4gICAgZ2V0TGF0ZXN0UGFnZXNCdWlsZDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9idWlsZHMvbGF0ZXN0XCJdLFxuICAgIGdldExhdGVzdFJlbGVhc2U6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMvbGF0ZXN0XCJdLFxuICAgIGdldFBhZ2VzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzXCJdLFxuICAgIGdldFBhZ2VzQnVpbGQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXMvYnVpbGRzL3tidWlsZF9pZH1cIl0sXG4gICAgZ2V0UGFnZXNIZWFsdGhDaGVjazogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9oZWFsdGhcIl0sXG4gICAgZ2V0UGFydGljaXBhdGlvblN0YXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXRzL3BhcnRpY2lwYXRpb25cIl0sXG4gICAgZ2V0UHVsbFJlcXVlc3RSZXZpZXdQcm90ZWN0aW9uOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfcHVsbF9yZXF1ZXN0X3Jldmlld3NcIl0sXG4gICAgZ2V0UHVuY2hDYXJkU3RhdHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3RhdHMvcHVuY2hfY2FyZFwiXSxcbiAgICBnZXRSZWFkbWU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVhZG1lXCJdLFxuICAgIGdldFJlYWRtZUluRGlyZWN0b3J5OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlYWRtZS97ZGlyfVwiXSxcbiAgICBnZXRSZWxlYXNlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfVwiXSxcbiAgICBnZXRSZWxlYXNlQXNzZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMvYXNzZXRzL3thc3NldF9pZH1cIl0sXG4gICAgZ2V0UmVsZWFzZUJ5VGFnOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3RhZ3Mve3RhZ31cIl0sXG4gICAgZ2V0U3RhdHVzQ2hlY2tzUHJvdGVjdGlvbjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3NcIl0sXG4gICAgZ2V0VGVhbXNXaXRoQWNjZXNzVG9Qcm90ZWN0ZWRCcmFuY2g6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdGVhbXNcIl0sXG4gICAgZ2V0VG9wUGF0aHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdHJhZmZpYy9wb3B1bGFyL3BhdGhzXCJdLFxuICAgIGdldFRvcFJlZmVycmVyczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90cmFmZmljL3BvcHVsYXIvcmVmZXJyZXJzXCJdLFxuICAgIGdldFVzZXJzV2l0aEFjY2Vzc1RvUHJvdGVjdGVkQnJhbmNoOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL3VzZXJzXCJdLFxuICAgIGdldFZpZXdzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RyYWZmaWMvdmlld3NcIl0sXG4gICAgZ2V0V2ViaG9vazogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgZ2V0V2ViaG9va0NvbmZpZ0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L2NvbmZpZ1wiXSxcbiAgICBnZXRXZWJob29rRGVsaXZlcnk6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXMve2RlbGl2ZXJ5X2lkfVwiXSxcbiAgICBsaXN0QXV0b2xpbmtzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9saW5rc1wiXSxcbiAgICBsaXN0QnJhbmNoZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXNcIl0sXG4gICAgbGlzdEJyYW5jaGVzRm9ySGVhZENvbW1pdDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tjb21taXRfc2hhfS9icmFuY2hlcy13aGVyZS1oZWFkXCJdLFxuICAgIGxpc3RDb2xsYWJvcmF0b3JzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbGxhYm9yYXRvcnNcIl0sXG4gICAgbGlzdENvbW1lbnRzRm9yQ29tbWl0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve2NvbW1pdF9zaGF9L2NvbW1lbnRzXCJdLFxuICAgIGxpc3RDb21taXRDb21tZW50c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHNcIl0sXG4gICAgbGlzdENvbW1pdFN0YXR1c2VzRm9yUmVmOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vc3RhdHVzZXNcIl0sXG4gICAgbGlzdENvbW1pdHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0c1wiXSxcbiAgICBsaXN0Q29udHJpYnV0b3JzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbnRyaWJ1dG9yc1wiXSxcbiAgICBsaXN0RGVwbG95S2V5czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9rZXlzXCJdLFxuICAgIGxpc3REZXBsb3ltZW50U3RhdHVzZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHMve2RlcGxveW1lbnRfaWR9L3N0YXR1c2VzXCJdLFxuICAgIGxpc3REZXBsb3ltZW50czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50c1wiXSxcbiAgICBsaXN0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9yZXBvc1wiXSxcbiAgICBsaXN0Rm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vcmVwb3NcIl0sXG4gICAgbGlzdEZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9yZXBvc1wiXSxcbiAgICBsaXN0Rm9ya3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZm9ya3NcIl0sXG4gICAgbGlzdEludml0YXRpb25zOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludml0YXRpb25zXCJdLFxuICAgIGxpc3RJbnZpdGF0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvcmVwb3NpdG9yeV9pbnZpdGF0aW9uc1wiXSxcbiAgICBsaXN0TGFuZ3VhZ2VzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhbmd1YWdlc1wiXSxcbiAgICBsaXN0UGFnZXNCdWlsZHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXMvYnVpbGRzXCJdLFxuICAgIGxpc3RQdWJsaWM6IFtcIkdFVCAvcmVwb3NpdG9yaWVzXCJdLFxuICAgIGxpc3RQdWxsUmVxdWVzdHNBc3NvY2lhdGVkV2l0aENvbW1pdDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tjb21taXRfc2hhfS9wdWxsc1wiXSxcbiAgICBsaXN0UmVsZWFzZUFzc2V0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vYXNzZXRzXCJdLFxuICAgIGxpc3RSZWxlYXNlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlc1wiXSxcbiAgICBsaXN0VGFnUHJvdGVjdGlvbjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YWdzL3Byb3RlY3Rpb25cIl0sXG4gICAgbGlzdFRhZ3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdGFnc1wiXSxcbiAgICBsaXN0VGVhbXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdGVhbXNcIl0sXG4gICAgbGlzdFdlYmhvb2tEZWxpdmVyaWVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzXCJdLFxuICAgIGxpc3RXZWJob29rczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rc1wiXSxcbiAgICBtZXJnZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWVyZ2VzXCJdLFxuICAgIG1lcmdlVXBzdHJlYW06IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L21lcmdlLXVwc3RyZWFtXCJdLFxuICAgIHBpbmdXZWJob29rOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vcGluZ3NcIl0sXG4gICAgcmVkZWxpdmVyV2ViaG9va0RlbGl2ZXJ5OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9L2F0dGVtcHRzXCJdLFxuICAgIHJlbW92ZUFwcEFjY2Vzc1Jlc3RyaWN0aW9uczogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy9hcHBzXCIsIHt9LCB7XG4gICAgICBtYXBUb0RhdGE6IFwiYXBwc1wiXG4gICAgfV0sXG4gICAgcmVtb3ZlQ29sbGFib3JhdG9yOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiXSxcbiAgICByZW1vdmVTdGF0dXNDaGVja0NvbnRleHRzOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrcy9jb250ZXh0c1wiLCB7fSwge1xuICAgICAgbWFwVG9EYXRhOiBcImNvbnRleHRzXCJcbiAgICB9XSxcbiAgICByZW1vdmVTdGF0dXNDaGVja1Byb3RlY3Rpb246IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zdGF0dXNfY2hlY2tzXCJdLFxuICAgIHJlbW92ZVRlYW1BY2Nlc3NSZXN0cmljdGlvbnM6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdGVhbXNcIiwge30sIHtcbiAgICAgIG1hcFRvRGF0YTogXCJ0ZWFtc1wiXG4gICAgfV0sXG4gICAgcmVtb3ZlVXNlckFjY2Vzc1Jlc3RyaWN0aW9uczogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy91c2Vyc1wiLCB7fSwge1xuICAgICAgbWFwVG9EYXRhOiBcInVzZXJzXCJcbiAgICB9XSxcbiAgICByZW5hbWVCcmFuY2g6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3JlbmFtZVwiXSxcbiAgICByZXBsYWNlQWxsVG9waWNzOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RvcGljc1wiXSxcbiAgICByZXF1ZXN0UGFnZXNCdWlsZDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXMvYnVpbGRzXCJdLFxuICAgIHNldEFkbWluQnJhbmNoUHJvdGVjdGlvbjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9lbmZvcmNlX2FkbWluc1wiXSxcbiAgICBzZXRBcHBBY2Nlc3NSZXN0cmljdGlvbnM6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvYXBwc1wiLCB7fSwge1xuICAgICAgbWFwVG9EYXRhOiBcImFwcHNcIlxuICAgIH1dLFxuICAgIHNldFN0YXR1c0NoZWNrQ29udGV4dHM6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zdGF0dXNfY2hlY2tzL2NvbnRleHRzXCIsIHt9LCB7XG4gICAgICBtYXBUb0RhdGE6IFwiY29udGV4dHNcIlxuICAgIH1dLFxuICAgIHNldFRlYW1BY2Nlc3NSZXN0cmljdGlvbnM6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdGVhbXNcIiwge30sIHtcbiAgICAgIG1hcFRvRGF0YTogXCJ0ZWFtc1wiXG4gICAgfV0sXG4gICAgc2V0VXNlckFjY2Vzc1Jlc3RyaWN0aW9uczogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy91c2Vyc1wiLCB7fSwge1xuICAgICAgbWFwVG9EYXRhOiBcInVzZXJzXCJcbiAgICB9XSxcbiAgICB0ZXN0UHVzaFdlYmhvb2s6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS90ZXN0c1wiXSxcbiAgICB0cmFuc2ZlcjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vdHJhbnNmZXJcIl0sXG4gICAgdXBkYXRlOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb31cIl0sXG4gICAgdXBkYXRlQnJhbmNoUHJvdGVjdGlvbjogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uXCJdLFxuICAgIHVwZGF0ZUNvbW1pdENvbW1lbnQ6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgdXBkYXRlSW5mb3JtYXRpb25BYm91dFBhZ2VzU2l0ZTogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlc1wiXSxcbiAgICB1cGRhdGVJbnZpdGF0aW9uOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9XCJdLFxuICAgIHVwZGF0ZVB1bGxSZXF1ZXN0UmV2aWV3UHJvdGVjdGlvbjogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfcHVsbF9yZXF1ZXN0X3Jldmlld3NcIl0sXG4gICAgdXBkYXRlUmVsZWFzZTogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfVwiXSxcbiAgICB1cGRhdGVSZWxlYXNlQXNzZXQ6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy9hc3NldHMve2Fzc2V0X2lkfVwiXSxcbiAgICB1cGRhdGVTdGF0dXNDaGVja1BvdGVjdGlvbjogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrc1wiLCB7fSwge1xuICAgICAgcmVuYW1lZDogW1wicmVwb3NcIiwgXCJ1cGRhdGVTdGF0dXNDaGVja1Byb3RlY3Rpb25cIl1cbiAgICB9XSxcbiAgICB1cGRhdGVTdGF0dXNDaGVja1Byb3RlY3Rpb246IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3NcIl0sXG4gICAgdXBkYXRlV2ViaG9vazogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfVwiXSxcbiAgICB1cGRhdGVXZWJob29rQ29uZmlnRm9yUmVwbzogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS9jb25maWdcIl0sXG4gICAgdXBsb2FkUmVsZWFzZUFzc2V0OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vYXNzZXRzez9uYW1lLGxhYmVsfVwiLCB7XG4gICAgICBiYXNlVXJsOiBcImh0dHBzOi8vdXBsb2Fkcy5naXRodWIuY29tXCJcbiAgICB9XVxuICB9LFxuICBzZWFyY2g6IHtcbiAgICBjb2RlOiBbXCJHRVQgL3NlYXJjaC9jb2RlXCJdLFxuICAgIGNvbW1pdHM6IFtcIkdFVCAvc2VhcmNoL2NvbW1pdHNcIl0sXG4gICAgaXNzdWVzQW5kUHVsbFJlcXVlc3RzOiBbXCJHRVQgL3NlYXJjaC9pc3N1ZXNcIl0sXG4gICAgbGFiZWxzOiBbXCJHRVQgL3NlYXJjaC9sYWJlbHNcIl0sXG4gICAgcmVwb3M6IFtcIkdFVCAvc2VhcmNoL3JlcG9zaXRvcmllc1wiXSxcbiAgICB0b3BpY3M6IFtcIkdFVCAvc2VhcmNoL3RvcGljc1wiXSxcbiAgICB1c2VyczogW1wiR0VUIC9zZWFyY2gvdXNlcnNcIl1cbiAgfSxcbiAgc2VjcmV0U2Nhbm5pbmc6IHtcbiAgICBnZXRBbGVydDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9XCJdLFxuICAgIGxpc3RBbGVydHNGb3JFbnRlcnByaXNlOiBbXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzXCJdLFxuICAgIGxpc3RBbGVydHNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzXCJdLFxuICAgIGxpc3RBbGVydHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3JldC1zY2FubmluZy9hbGVydHNcIl0sXG4gICAgbGlzdExvY2F0aW9uc0ZvckFsZXJ0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3JldC1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn0vbG9jYXRpb25zXCJdLFxuICAgIHVwZGF0ZUFsZXJ0OiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfVwiXVxuICB9LFxuICB0ZWFtczoge1xuICAgIGFkZE9yVXBkYXRlTWVtYmVyc2hpcEZvclVzZXJJbk9yZzogW1wiUFVUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L21lbWJlcnNoaXBzL3t1c2VybmFtZX1cIl0sXG4gICAgYWRkT3JVcGRhdGVQcm9qZWN0UGVybWlzc2lvbnNJbk9yZzogW1wiUFVUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3Byb2plY3RzL3twcm9qZWN0X2lkfVwiXSxcbiAgICBhZGRPclVwZGF0ZVJlcG9QZXJtaXNzaW9uc0luT3JnOiBbXCJQVVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcmVwb3Mve293bmVyfS97cmVwb31cIl0sXG4gICAgY2hlY2tQZXJtaXNzaW9uc0ZvclByb2plY3RJbk9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3Byb2plY3RzL3twcm9qZWN0X2lkfVwiXSxcbiAgICBjaGVja1Blcm1pc3Npb25zRm9yUmVwb0luT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcmVwb3Mve293bmVyfS97cmVwb31cIl0sXG4gICAgY3JlYXRlOiBbXCJQT1NUIC9vcmdzL3tvcmd9L3RlYW1zXCJdLFxuICAgIGNyZWF0ZURpc2N1c3Npb25Db21tZW50SW5Pcmc6IFtcIlBPU1QgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50c1wiXSxcbiAgICBjcmVhdGVEaXNjdXNzaW9uSW5Pcmc6IFtcIlBPU1QgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnNcIl0sXG4gICAgZGVsZXRlRGlzY3Vzc2lvbkNvbW1lbnRJbk9yZzogW1wiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfbnVtYmVyfVwiXSxcbiAgICBkZWxldGVEaXNjdXNzaW9uSW5Pcmc6IFtcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9XCJdLFxuICAgIGRlbGV0ZUluT3JnOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z31cIl0sXG4gICAgZ2V0QnlOYW1lOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z31cIl0sXG4gICAgZ2V0RGlzY3Vzc2lvbkNvbW1lbnRJbk9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfbnVtYmVyfVwiXSxcbiAgICBnZXREaXNjdXNzaW9uSW5Pcmc6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9XCJdLFxuICAgIGdldE1lbWJlcnNoaXBGb3JVc2VySW5Pcmc6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9tZW1iZXJzaGlwcy97dXNlcm5hbWV9XCJdLFxuICAgIGxpc3Q6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtc1wiXSxcbiAgICBsaXN0Q2hpbGRJbk9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3RlYW1zXCJdLFxuICAgIGxpc3REaXNjdXNzaW9uQ29tbWVudHNJbk9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHNcIl0sXG4gICAgbGlzdERpc2N1c3Npb25zSW5Pcmc6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9uc1wiXSxcbiAgICBsaXN0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci90ZWFtc1wiXSxcbiAgICBsaXN0TWVtYmVyc0luT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vbWVtYmVyc1wiXSxcbiAgICBsaXN0UGVuZGluZ0ludml0YXRpb25zSW5Pcmc6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9pbnZpdGF0aW9uc1wiXSxcbiAgICBsaXN0UHJvamVjdHNJbk9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3Byb2plY3RzXCJdLFxuICAgIGxpc3RSZXBvc0luT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcmVwb3NcIl0sXG4gICAgcmVtb3ZlTWVtYmVyc2hpcEZvclVzZXJJbk9yZzogW1wiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L21lbWJlcnNoaXBzL3t1c2VybmFtZX1cIl0sXG4gICAgcmVtb3ZlUHJvamVjdEluT3JnOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcHJvamVjdHMve3Byb2plY3RfaWR9XCJdLFxuICAgIHJlbW92ZVJlcG9Jbk9yZzogW1wiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3JlcG9zL3tvd25lcn0ve3JlcG99XCJdLFxuICAgIHVwZGF0ZURpc2N1c3Npb25Db21tZW50SW5Pcmc6IFtcIlBBVENIIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfbnVtYmVyfVwiXSxcbiAgICB1cGRhdGVEaXNjdXNzaW9uSW5Pcmc6IFtcIlBBVENIIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn1cIl0sXG4gICAgdXBkYXRlSW5Pcmc6IFtcIlBBVENIIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9XCJdXG4gIH0sXG4gIHVzZXJzOiB7XG4gICAgYWRkRW1haWxGb3JBdXRoZW50aWNhdGVkOiBbXCJQT1NUIC91c2VyL2VtYWlsc1wiLCB7fSwge1xuICAgICAgcmVuYW1lZDogW1widXNlcnNcIiwgXCJhZGRFbWFpbEZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdXG4gICAgfV0sXG4gICAgYWRkRW1haWxGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9lbWFpbHNcIl0sXG4gICAgYmxvY2s6IFtcIlBVVCAvdXNlci9ibG9ja3Mve3VzZXJuYW1lfVwiXSxcbiAgICBjaGVja0Jsb2NrZWQ6IFtcIkdFVCAvdXNlci9ibG9ja3Mve3VzZXJuYW1lfVwiXSxcbiAgICBjaGVja0ZvbGxvd2luZ0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9mb2xsb3dpbmcve3RhcmdldF91c2VyfVwiXSxcbiAgICBjaGVja1BlcnNvbklzRm9sbG93ZWRCeUF1dGhlbnRpY2F0ZWQ6IFtcIkdFVCAvdXNlci9mb2xsb3dpbmcve3VzZXJuYW1lfVwiXSxcbiAgICBjcmVhdGVHcGdLZXlGb3JBdXRoZW50aWNhdGVkOiBbXCJQT1NUIC91c2VyL2dwZ19rZXlzXCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImNyZWF0ZUdwZ0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdXG4gICAgfV0sXG4gICAgY3JlYXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvZ3BnX2tleXNcIl0sXG4gICAgY3JlYXRlUHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZDogW1wiUE9TVCAvdXNlci9rZXlzXCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImNyZWF0ZVB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdXG4gICAgfV0sXG4gICAgY3JlYXRlUHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIva2V5c1wiXSxcbiAgICBkZWxldGVFbWFpbEZvckF1dGhlbnRpY2F0ZWQ6IFtcIkRFTEVURSAvdXNlci9lbWFpbHNcIiwge30sIHtcbiAgICAgIHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiZGVsZXRlRW1haWxGb3JBdXRoZW50aWNhdGVkVXNlclwiXVxuICAgIH1dLFxuICAgIGRlbGV0ZUVtYWlsRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9lbWFpbHNcIl0sXG4gICAgZGVsZXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZDogW1wiREVMRVRFIC91c2VyL2dwZ19rZXlzL3tncGdfa2V5X2lkfVwiLCB7fSwge1xuICAgICAgcmVuYW1lZDogW1widXNlcnNcIiwgXCJkZWxldGVHcGdLZXlGb3JBdXRoZW50aWNhdGVkVXNlclwiXVxuICAgIH1dLFxuICAgIGRlbGV0ZUdwZ0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvZ3BnX2tleXMve2dwZ19rZXlfaWR9XCJdLFxuICAgIGRlbGV0ZVB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWQ6IFtcIkRFTEVURSAvdXNlci9rZXlzL3trZXlfaWR9XCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImRlbGV0ZVB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdXG4gICAgfV0sXG4gICAgZGVsZXRlUHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9rZXlzL3trZXlfaWR9XCJdLFxuICAgIGZvbGxvdzogW1wiUFVUIC91c2VyL2ZvbGxvd2luZy97dXNlcm5hbWV9XCJdLFxuICAgIGdldEF1dGhlbnRpY2F0ZWQ6IFtcIkdFVCAvdXNlclwiXSxcbiAgICBnZXRCeVVzZXJuYW1lOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX1cIl0sXG4gICAgZ2V0Q29udGV4dEZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ob3ZlcmNhcmRcIl0sXG4gICAgZ2V0R3BnS2V5Rm9yQXV0aGVudGljYXRlZDogW1wiR0VUIC91c2VyL2dwZ19rZXlzL3tncGdfa2V5X2lkfVwiLCB7fSwge1xuICAgICAgcmVuYW1lZDogW1widXNlcnNcIiwgXCJnZXRHcGdLZXlGb3JBdXRoZW50aWNhdGVkVXNlclwiXVxuICAgIH1dLFxuICAgIGdldEdwZ0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvZ3BnX2tleXMve2dwZ19rZXlfaWR9XCJdLFxuICAgIGdldFB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWQ6IFtcIkdFVCAvdXNlci9rZXlzL3trZXlfaWR9XCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImdldFB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdXG4gICAgfV0sXG4gICAgZ2V0UHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9rZXlzL3trZXlfaWR9XCJdLFxuICAgIGxpc3Q6IFtcIkdFVCAvdXNlcnNcIl0sXG4gICAgbGlzdEJsb2NrZWRCeUF1dGhlbnRpY2F0ZWQ6IFtcIkdFVCAvdXNlci9ibG9ja3NcIiwge30sIHtcbiAgICAgIHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwibGlzdEJsb2NrZWRCeUF1dGhlbnRpY2F0ZWRVc2VyXCJdXG4gICAgfV0sXG4gICAgbGlzdEJsb2NrZWRCeUF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvYmxvY2tzXCJdLFxuICAgIGxpc3RFbWFpbHNGb3JBdXRoZW50aWNhdGVkOiBbXCJHRVQgL3VzZXIvZW1haWxzXCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImxpc3RFbWFpbHNGb3JBdXRoZW50aWNhdGVkVXNlclwiXVxuICAgIH1dLFxuICAgIGxpc3RFbWFpbHNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2VtYWlsc1wiXSxcbiAgICBsaXN0Rm9sbG93ZWRCeUF1dGhlbnRpY2F0ZWQ6IFtcIkdFVCAvdXNlci9mb2xsb3dpbmdcIiwge30sIHtcbiAgICAgIHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwibGlzdEZvbGxvd2VkQnlBdXRoZW50aWNhdGVkVXNlclwiXVxuICAgIH1dLFxuICAgIGxpc3RGb2xsb3dlZEJ5QXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9mb2xsb3dpbmdcIl0sXG4gICAgbGlzdEZvbGxvd2Vyc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvZm9sbG93ZXJzXCJdLFxuICAgIGxpc3RGb2xsb3dlcnNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZm9sbG93ZXJzXCJdLFxuICAgIGxpc3RGb2xsb3dpbmdGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZm9sbG93aW5nXCJdLFxuICAgIGxpc3RHcGdLZXlzRm9yQXV0aGVudGljYXRlZDogW1wiR0VUIC91c2VyL2dwZ19rZXlzXCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImxpc3RHcGdLZXlzRm9yQXV0aGVudGljYXRlZFVzZXJcIl1cbiAgICB9XSxcbiAgICBsaXN0R3BnS2V5c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvZ3BnX2tleXNcIl0sXG4gICAgbGlzdEdwZ0tleXNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZ3BnX2tleXNcIl0sXG4gICAgbGlzdFB1YmxpY0VtYWlsc0ZvckF1dGhlbnRpY2F0ZWQ6IFtcIkdFVCAvdXNlci9wdWJsaWNfZW1haWxzXCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImxpc3RQdWJsaWNFbWFpbHNGb3JBdXRoZW50aWNhdGVkVXNlclwiXVxuICAgIH1dLFxuICAgIGxpc3RQdWJsaWNFbWFpbHNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3B1YmxpY19lbWFpbHNcIl0sXG4gICAgbGlzdFB1YmxpY0tleXNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0va2V5c1wiXSxcbiAgICBsaXN0UHVibGljU3NoS2V5c0ZvckF1dGhlbnRpY2F0ZWQ6IFtcIkdFVCAvdXNlci9rZXlzXCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImxpc3RQdWJsaWNTc2hLZXlzRm9yQXV0aGVudGljYXRlZFVzZXJcIl1cbiAgICB9XSxcbiAgICBsaXN0UHVibGljU3NoS2V5c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIva2V5c1wiXSxcbiAgICBzZXRQcmltYXJ5RW1haWxWaXNpYmlsaXR5Rm9yQXV0aGVudGljYXRlZDogW1wiUEFUQ0ggL3VzZXIvZW1haWwvdmlzaWJpbGl0eVwiLCB7fSwge1xuICAgICAgcmVuYW1lZDogW1widXNlcnNcIiwgXCJzZXRQcmltYXJ5RW1haWxWaXNpYmlsaXR5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl1cbiAgICB9XSxcbiAgICBzZXRQcmltYXJ5RW1haWxWaXNpYmlsaXR5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBBVENIIC91c2VyL2VtYWlsL3Zpc2liaWxpdHlcIl0sXG4gICAgdW5ibG9jazogW1wiREVMRVRFIC91c2VyL2Jsb2Nrcy97dXNlcm5hbWV9XCJdLFxuICAgIHVuZm9sbG93OiBbXCJERUxFVEUgL3VzZXIvZm9sbG93aW5nL3t1c2VybmFtZX1cIl0sXG4gICAgdXBkYXRlQXV0aGVudGljYXRlZDogW1wiUEFUQ0ggL3VzZXJcIl1cbiAgfVxufTtcblxuY29uc3QgVkVSU0lPTiA9IFwiNS4xNi4yXCI7XG5cbmZ1bmN0aW9uIGVuZHBvaW50c1RvTWV0aG9kcyhvY3Rva2l0LCBlbmRwb2ludHNNYXApIHtcbiAgY29uc3QgbmV3TWV0aG9kcyA9IHt9O1xuXG4gIGZvciAoY29uc3QgW3Njb3BlLCBlbmRwb2ludHNdIG9mIE9iamVjdC5lbnRyaWVzKGVuZHBvaW50c01hcCkpIHtcbiAgICBmb3IgKGNvbnN0IFttZXRob2ROYW1lLCBlbmRwb2ludF0gb2YgT2JqZWN0LmVudHJpZXMoZW5kcG9pbnRzKSkge1xuICAgICAgY29uc3QgW3JvdXRlLCBkZWZhdWx0cywgZGVjb3JhdGlvbnNdID0gZW5kcG9pbnQ7XG4gICAgICBjb25zdCBbbWV0aG9kLCB1cmxdID0gcm91dGUuc3BsaXQoLyAvKTtcbiAgICAgIGNvbnN0IGVuZHBvaW50RGVmYXVsdHMgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICB1cmxcbiAgICAgIH0sIGRlZmF1bHRzKTtcblxuICAgICAgaWYgKCFuZXdNZXRob2RzW3Njb3BlXSkge1xuICAgICAgICBuZXdNZXRob2RzW3Njb3BlXSA9IHt9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzY29wZU1ldGhvZHMgPSBuZXdNZXRob2RzW3Njb3BlXTtcblxuICAgICAgaWYgKGRlY29yYXRpb25zKSB7XG4gICAgICAgIHNjb3BlTWV0aG9kc1ttZXRob2ROYW1lXSA9IGRlY29yYXRlKG9jdG9raXQsIHNjb3BlLCBtZXRob2ROYW1lLCBlbmRwb2ludERlZmF1bHRzLCBkZWNvcmF0aW9ucyk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBzY29wZU1ldGhvZHNbbWV0aG9kTmFtZV0gPSBvY3Rva2l0LnJlcXVlc3QuZGVmYXVsdHMoZW5kcG9pbnREZWZhdWx0cyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld01ldGhvZHM7XG59XG5cbmZ1bmN0aW9uIGRlY29yYXRlKG9jdG9raXQsIHNjb3BlLCBtZXRob2ROYW1lLCBkZWZhdWx0cywgZGVjb3JhdGlvbnMpIHtcbiAgY29uc3QgcmVxdWVzdFdpdGhEZWZhdWx0cyA9IG9jdG9raXQucmVxdWVzdC5kZWZhdWx0cyhkZWZhdWx0cyk7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cbiAgZnVuY3Rpb24gd2l0aERlY29yYXRpb25zKC4uLmFyZ3MpIHtcbiAgICAvLyBAdHMtaWdub3JlIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvMjU0ODhcbiAgICBsZXQgb3B0aW9ucyA9IHJlcXVlc3RXaXRoRGVmYXVsdHMuZW5kcG9pbnQubWVyZ2UoLi4uYXJncyk7IC8vIFRoZXJlIGFyZSBjdXJyZW50bHkgbm8gb3RoZXIgZGVjb3JhdGlvbnMgdGhhbiBgLm1hcFRvRGF0YWBcblxuICAgIGlmIChkZWNvcmF0aW9ucy5tYXBUb0RhdGEpIHtcbiAgICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLCB7XG4gICAgICAgIGRhdGE6IG9wdGlvbnNbZGVjb3JhdGlvbnMubWFwVG9EYXRhXSxcbiAgICAgICAgW2RlY29yYXRpb25zLm1hcFRvRGF0YV06IHVuZGVmaW5lZFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVxdWVzdFdpdGhEZWZhdWx0cyhvcHRpb25zKTtcbiAgICB9XG5cbiAgICBpZiAoZGVjb3JhdGlvbnMucmVuYW1lZCkge1xuICAgICAgY29uc3QgW25ld1Njb3BlLCBuZXdNZXRob2ROYW1lXSA9IGRlY29yYXRpb25zLnJlbmFtZWQ7XG4gICAgICBvY3Rva2l0LmxvZy53YXJuKGBvY3Rva2l0LiR7c2NvcGV9LiR7bWV0aG9kTmFtZX0oKSBoYXMgYmVlbiByZW5hbWVkIHRvIG9jdG9raXQuJHtuZXdTY29wZX0uJHtuZXdNZXRob2ROYW1lfSgpYCk7XG4gICAgfVxuXG4gICAgaWYgKGRlY29yYXRpb25zLmRlcHJlY2F0ZWQpIHtcbiAgICAgIG9jdG9raXQubG9nLndhcm4oZGVjb3JhdGlvbnMuZGVwcmVjYXRlZCk7XG4gICAgfVxuXG4gICAgaWYgKGRlY29yYXRpb25zLnJlbmFtZWRQYXJhbWV0ZXJzKSB7XG4gICAgICAvLyBAdHMtaWdub3JlIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvMjU0ODhcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSByZXF1ZXN0V2l0aERlZmF1bHRzLmVuZHBvaW50Lm1lcmdlKC4uLmFyZ3MpO1xuXG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCBhbGlhc10gb2YgT2JqZWN0LmVudHJpZXMoZGVjb3JhdGlvbnMucmVuYW1lZFBhcmFtZXRlcnMpKSB7XG4gICAgICAgIGlmIChuYW1lIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICBvY3Rva2l0LmxvZy53YXJuKGBcIiR7bmFtZX1cIiBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZCBmb3IgXCJvY3Rva2l0LiR7c2NvcGV9LiR7bWV0aG9kTmFtZX0oKVwiLiBVc2UgXCIke2FsaWFzfVwiIGluc3RlYWRgKTtcblxuICAgICAgICAgIGlmICghKGFsaWFzIGluIG9wdGlvbnMpKSB7XG4gICAgICAgICAgICBvcHRpb25zW2FsaWFzXSA9IG9wdGlvbnNbbmFtZV07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGVsZXRlIG9wdGlvbnNbbmFtZV07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlcXVlc3RXaXRoRGVmYXVsdHMob3B0aW9ucyk7XG4gICAgfSAvLyBAdHMtaWdub3JlIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvMjU0ODhcblxuXG4gICAgcmV0dXJuIHJlcXVlc3RXaXRoRGVmYXVsdHMoLi4uYXJncyk7XG4gIH1cblxuICByZXR1cm4gT2JqZWN0LmFzc2lnbih3aXRoRGVjb3JhdGlvbnMsIHJlcXVlc3RXaXRoRGVmYXVsdHMpO1xufVxuXG5mdW5jdGlvbiByZXN0RW5kcG9pbnRNZXRob2RzKG9jdG9raXQpIHtcbiAgY29uc3QgYXBpID0gZW5kcG9pbnRzVG9NZXRob2RzKG9jdG9raXQsIEVuZHBvaW50cyk7XG4gIHJldHVybiB7XG4gICAgcmVzdDogYXBpXG4gIH07XG59XG5yZXN0RW5kcG9pbnRNZXRob2RzLlZFUlNJT04gPSBWRVJTSU9OO1xuZnVuY3Rpb24gbGVnYWN5UmVzdEVuZHBvaW50TWV0aG9kcyhvY3Rva2l0KSB7XG4gIGNvbnN0IGFwaSA9IGVuZHBvaW50c1RvTWV0aG9kcyhvY3Rva2l0LCBFbmRwb2ludHMpO1xuICByZXR1cm4gX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIGFwaSksIHt9LCB7XG4gICAgcmVzdDogYXBpXG4gIH0pO1xufVxubGVnYWN5UmVzdEVuZHBvaW50TWV0aG9kcy5WRVJTSU9OID0gVkVSU0lPTjtcblxuZXhwb3J0cy5sZWdhY3lSZXN0RW5kcG9pbnRNZXRob2RzID0gbGVnYWN5UmVzdEVuZHBvaW50TWV0aG9kcztcbmV4cG9ydHMucmVzdEVuZHBvaW50TWV0aG9kcyA9IHJlc3RFbmRwb2ludE1ldGhvZHM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCBWRVJTSU9OID0gXCIyLjIxLjNcIjtcblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7XG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblxuICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgIHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpO1xuICAgIGVudW1lcmFibGVPbmx5ICYmIChzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkge1xuICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7XG4gICAgfSkpLCBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7XG4gIH1cblxuICByZXR1cm4ga2V5cztcbn1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZDIodGFyZ2V0KSB7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNvdXJjZSA9IG51bGwgIT0gYXJndW1lbnRzW2ldID8gYXJndW1lbnRzW2ldIDoge307XG4gICAgaSAlIDIgPyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTtcbiAgICB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKSA6IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn1cblxuLyoqXG4gKiBTb21lIOKAnGxpc3TigJ0gcmVzcG9uc2UgdGhhdCBjYW4gYmUgcGFnaW5hdGVkIGhhdmUgYSBkaWZmZXJlbnQgcmVzcG9uc2Ugc3RydWN0dXJlXG4gKlxuICogVGhleSBoYXZlIGEgYHRvdGFsX2NvdW50YCBrZXkgaW4gdGhlIHJlc3BvbnNlIChzZWFyY2ggYWxzbyBoYXMgYGluY29tcGxldGVfcmVzdWx0c2AsXG4gKiAvaW5zdGFsbGF0aW9uL3JlcG9zaXRvcmllcyBhbHNvIGhhcyBgcmVwb3NpdG9yeV9zZWxlY3Rpb25gKSwgYXMgd2VsbCBhcyBhIGtleSB3aXRoXG4gKiB0aGUgbGlzdCBvZiB0aGUgaXRlbXMgd2hpY2ggbmFtZSB2YXJpZXMgZnJvbSBlbmRwb2ludCB0byBlbmRwb2ludC5cbiAqXG4gKiBPY3Rva2l0IG5vcm1hbGl6ZXMgdGhlc2UgcmVzcG9uc2VzIHNvIHRoYXQgcGFnaW5hdGVkIHJlc3VsdHMgYXJlIGFsd2F5cyByZXR1cm5lZCBmb2xsb3dpbmdcbiAqIHRoZSBzYW1lIHN0cnVjdHVyZS4gT25lIGNoYWxsZW5nZSBpcyB0aGF0IGlmIHRoZSBsaXN0IHJlc3BvbnNlIGhhcyBvbmx5IG9uZSBwYWdlLCBubyBMaW5rXG4gKiBoZWFkZXIgaXMgcHJvdmlkZWQsIHNvIHRoaXMgaGVhZGVyIGFsb25lIGlzIG5vdCBzdWZmaWNpZW50IHRvIGNoZWNrIHdldGhlciBhIHJlc3BvbnNlIGlzXG4gKiBwYWdpbmF0ZWQgb3Igbm90LlxuICpcbiAqIFdlIGNoZWNrIGlmIGEgXCJ0b3RhbF9jb3VudFwiIGtleSBpcyBwcmVzZW50IGluIHRoZSByZXNwb25zZSBkYXRhLCBidXQgYWxzbyBtYWtlIHN1cmUgdGhhdFxuICogYSBcInVybFwiIHByb3BlcnR5IGlzIG5vdCwgYXMgdGhlIFwiR2V0IHRoZSBjb21iaW5lZCBzdGF0dXMgZm9yIGEgc3BlY2lmaWMgcmVmXCIgZW5kcG9pbnQgd291bGRcbiAqIG90aGVyd2lzZSBtYXRjaDogaHR0cHM6Ly9kZXZlbG9wZXIuZ2l0aHViLmNvbS92My9yZXBvcy9zdGF0dXNlcy8jZ2V0LXRoZS1jb21iaW5lZC1zdGF0dXMtZm9yLWEtc3BlY2lmaWMtcmVmXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVBhZ2luYXRlZExpc3RSZXNwb25zZShyZXNwb25zZSkge1xuICAvLyBlbmRwb2ludHMgY2FuIHJlc3BvbmQgd2l0aCAyMDQgaWYgcmVwb3NpdG9yeSBpcyBlbXB0eVxuICBpZiAoIXJlc3BvbnNlLmRhdGEpIHtcbiAgICByZXR1cm4gX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIHJlc3BvbnNlKSwge30sIHtcbiAgICAgIGRhdGE6IFtdXG4gICAgfSk7XG4gIH1cblxuICBjb25zdCByZXNwb25zZU5lZWRzTm9ybWFsaXphdGlvbiA9IFwidG90YWxfY291bnRcIiBpbiByZXNwb25zZS5kYXRhICYmICEoXCJ1cmxcIiBpbiByZXNwb25zZS5kYXRhKTtcbiAgaWYgKCFyZXNwb25zZU5lZWRzTm9ybWFsaXphdGlvbikgcmV0dXJuIHJlc3BvbnNlOyAvLyBrZWVwIHRoZSBhZGRpdGlvbmFsIHByb3BlcnRpZXMgaW50YWN0IGFzIHRoZXJlIGlzIGN1cnJlbnRseSBubyBvdGhlciB3YXlcbiAgLy8gdG8gcmV0cmlldmUgdGhlIHNhbWUgaW5mb3JtYXRpb24uXG5cbiAgY29uc3QgaW5jb21wbGV0ZVJlc3VsdHMgPSByZXNwb25zZS5kYXRhLmluY29tcGxldGVfcmVzdWx0cztcbiAgY29uc3QgcmVwb3NpdG9yeVNlbGVjdGlvbiA9IHJlc3BvbnNlLmRhdGEucmVwb3NpdG9yeV9zZWxlY3Rpb247XG4gIGNvbnN0IHRvdGFsQ291bnQgPSByZXNwb25zZS5kYXRhLnRvdGFsX2NvdW50O1xuICBkZWxldGUgcmVzcG9uc2UuZGF0YS5pbmNvbXBsZXRlX3Jlc3VsdHM7XG4gIGRlbGV0ZSByZXNwb25zZS5kYXRhLnJlcG9zaXRvcnlfc2VsZWN0aW9uO1xuICBkZWxldGUgcmVzcG9uc2UuZGF0YS50b3RhbF9jb3VudDtcbiAgY29uc3QgbmFtZXNwYWNlS2V5ID0gT2JqZWN0LmtleXMocmVzcG9uc2UuZGF0YSlbMF07XG4gIGNvbnN0IGRhdGEgPSByZXNwb25zZS5kYXRhW25hbWVzcGFjZUtleV07XG4gIHJlc3BvbnNlLmRhdGEgPSBkYXRhO1xuXG4gIGlmICh0eXBlb2YgaW5jb21wbGV0ZVJlc3VsdHMgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXNwb25zZS5kYXRhLmluY29tcGxldGVfcmVzdWx0cyA9IGluY29tcGxldGVSZXN1bHRzO1xuICB9XG5cbiAgaWYgKHR5cGVvZiByZXBvc2l0b3J5U2VsZWN0aW9uICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmVzcG9uc2UuZGF0YS5yZXBvc2l0b3J5X3NlbGVjdGlvbiA9IHJlcG9zaXRvcnlTZWxlY3Rpb247XG4gIH1cblxuICByZXNwb25zZS5kYXRhLnRvdGFsX2NvdW50ID0gdG90YWxDb3VudDtcbiAgcmV0dXJuIHJlc3BvbnNlO1xufVxuXG5mdW5jdGlvbiBpdGVyYXRvcihvY3Rva2l0LCByb3V0ZSwgcGFyYW1ldGVycykge1xuICBjb25zdCBvcHRpb25zID0gdHlwZW9mIHJvdXRlID09PSBcImZ1bmN0aW9uXCIgPyByb3V0ZS5lbmRwb2ludChwYXJhbWV0ZXJzKSA6IG9jdG9raXQucmVxdWVzdC5lbmRwb2ludChyb3V0ZSwgcGFyYW1ldGVycyk7XG4gIGNvbnN0IHJlcXVlc3RNZXRob2QgPSB0eXBlb2Ygcm91dGUgPT09IFwiZnVuY3Rpb25cIiA/IHJvdXRlIDogb2N0b2tpdC5yZXF1ZXN0O1xuICBjb25zdCBtZXRob2QgPSBvcHRpb25zLm1ldGhvZDtcbiAgY29uc3QgaGVhZGVycyA9IG9wdGlvbnMuaGVhZGVycztcbiAgbGV0IHVybCA9IG9wdGlvbnMudXJsO1xuICByZXR1cm4ge1xuICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl06ICgpID0+ICh7XG4gICAgICBhc3luYyBuZXh0KCkge1xuICAgICAgICBpZiAoIXVybCkgcmV0dXJuIHtcbiAgICAgICAgICBkb25lOiB0cnVlXG4gICAgICAgIH07XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcXVlc3RNZXRob2Qoe1xuICAgICAgICAgICAgbWV0aG9kLFxuICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgaGVhZGVyc1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRSZXNwb25zZSA9IG5vcm1hbGl6ZVBhZ2luYXRlZExpc3RSZXNwb25zZShyZXNwb25zZSk7IC8vIGByZXNwb25zZS5oZWFkZXJzLmxpbmtgIGZvcm1hdDpcbiAgICAgICAgICAvLyAnPGh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vdXNlcnMvYXNlZW1rL2ZvbGxvd2Vycz9wYWdlPTI+OyByZWw9XCJuZXh0XCIsIDxodHRwczovL2FwaS5naXRodWIuY29tL3VzZXJzL2FzZWVtay9mb2xsb3dlcnM/cGFnZT0yPjsgcmVsPVwibGFzdFwiJ1xuICAgICAgICAgIC8vIHNldHMgYHVybGAgdG8gdW5kZWZpbmVkIGlmIFwibmV4dFwiIFVSTCBpcyBub3QgcHJlc2VudCBvciBgbGlua2AgaGVhZGVyIGlzIG5vdCBzZXRcblxuICAgICAgICAgIHVybCA9ICgobm9ybWFsaXplZFJlc3BvbnNlLmhlYWRlcnMubGluayB8fCBcIlwiKS5tYXRjaCgvPChbXj5dKyk+O1xccypyZWw9XCJuZXh0XCIvKSB8fCBbXSlbMV07XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiBub3JtYWxpemVkUmVzcG9uc2VcbiAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGlmIChlcnJvci5zdGF0dXMgIT09IDQwOSkgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgdXJsID0gXCJcIjtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgc3RhdHVzOiAyMDAsXG4gICAgICAgICAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgICAgICAgICBkYXRhOiBbXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgIH0pXG4gIH07XG59XG5cbmZ1bmN0aW9uIHBhZ2luYXRlKG9jdG9raXQsIHJvdXRlLCBwYXJhbWV0ZXJzLCBtYXBGbikge1xuICBpZiAodHlwZW9mIHBhcmFtZXRlcnMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIG1hcEZuID0gcGFyYW1ldGVycztcbiAgICBwYXJhbWV0ZXJzID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIGdhdGhlcihvY3Rva2l0LCBbXSwgaXRlcmF0b3Iob2N0b2tpdCwgcm91dGUsIHBhcmFtZXRlcnMpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpLCBtYXBGbik7XG59XG5cbmZ1bmN0aW9uIGdhdGhlcihvY3Rva2l0LCByZXN1bHRzLCBpdGVyYXRvciwgbWFwRm4pIHtcbiAgcmV0dXJuIGl0ZXJhdG9yLm5leHQoKS50aGVuKHJlc3VsdCA9PiB7XG4gICAgaWYgKHJlc3VsdC5kb25lKSB7XG4gICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG5cbiAgICBsZXQgZWFybHlFeGl0ID0gZmFsc2U7XG5cbiAgICBmdW5jdGlvbiBkb25lKCkge1xuICAgICAgZWFybHlFeGl0ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXN1bHRzID0gcmVzdWx0cy5jb25jYXQobWFwRm4gPyBtYXBGbihyZXN1bHQudmFsdWUsIGRvbmUpIDogcmVzdWx0LnZhbHVlLmRhdGEpO1xuXG4gICAgaWYgKGVhcmx5RXhpdCkge1xuICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdhdGhlcihvY3Rva2l0LCByZXN1bHRzLCBpdGVyYXRvciwgbWFwRm4pO1xuICB9KTtcbn1cblxuY29uc3QgY29tcG9zZVBhZ2luYXRlUmVzdCA9IE9iamVjdC5hc3NpZ24ocGFnaW5hdGUsIHtcbiAgaXRlcmF0b3Jcbn0pO1xuXG5jb25zdCBwYWdpbmF0aW5nRW5kcG9pbnRzID0gW1wiR0VUIC9hcHAvaG9vay9kZWxpdmVyaWVzXCIsIFwiR0VUIC9hcHAvaW5zdGFsbGF0aW9uc1wiLCBcIkdFVCAvYXBwbGljYXRpb25zL2dyYW50c1wiLCBcIkdFVCAvYXV0aG9yaXphdGlvbnNcIiwgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9hY3Rpb25zL3Blcm1pc3Npb25zL29yZ2FuaXphdGlvbnNcIiwgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9hY3Rpb25zL3J1bm5lci1ncm91cHNcIiwgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9hY3Rpb25zL3J1bm5lci1ncm91cHMve3J1bm5lcl9ncm91cF9pZH0vb3JnYW5pemF0aW9uc1wiLCBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2FjdGlvbnMvcnVubmVyLWdyb3Vwcy97cnVubmVyX2dyb3VwX2lkfS9ydW5uZXJzXCIsIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vYWN0aW9ucy9ydW5uZXJzXCIsIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vYXVkaXQtbG9nXCIsIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0c1wiLCBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L3NldHRpbmdzL2JpbGxpbmcvYWR2YW5jZWQtc2VjdXJpdHlcIiwgXCJHRVQgL2V2ZW50c1wiLCBcIkdFVCAvZ2lzdHNcIiwgXCJHRVQgL2dpc3RzL3B1YmxpY1wiLCBcIkdFVCAvZ2lzdHMvc3RhcnJlZFwiLCBcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L2NvbW1lbnRzXCIsIFwiR0VUIC9naXN0cy97Z2lzdF9pZH0vY29tbWl0c1wiLCBcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L2ZvcmtzXCIsIFwiR0VUIC9pbnN0YWxsYXRpb24vcmVwb3NpdG9yaWVzXCIsIFwiR0VUIC9pc3N1ZXNcIiwgXCJHRVQgL2xpY2Vuc2VzXCIsIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3BsYW5zXCIsIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3BsYW5zL3twbGFuX2lkfS9hY2NvdW50c1wiLCBcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9zdHViYmVkL3BsYW5zXCIsIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3N0dWJiZWQvcGxhbnMve3BsYW5faWR9L2FjY291bnRzXCIsIFwiR0VUIC9uZXR3b3Jrcy97b3duZXJ9L3tyZXBvfS9ldmVudHNcIiwgXCJHRVQgL25vdGlmaWNhdGlvbnNcIiwgXCJHRVQgL29yZ2FuaXphdGlvbnNcIiwgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9jYWNoZS91c2FnZS1ieS1yZXBvc2l0b3J5XCIsIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvcmVwb3NpdG9yaWVzXCIsIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVyLWdyb3Vwc1wiLCBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lci1ncm91cHMve3J1bm5lcl9ncm91cF9pZH0vcmVwb3NpdG9yaWVzXCIsIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVyLWdyb3Vwcy97cnVubmVyX2dyb3VwX2lkfS9ydW5uZXJzXCIsIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVyc1wiLCBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHNcIiwgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsIFwiR0VUIC9vcmdzL3tvcmd9L2F1ZGl0LWxvZ1wiLCBcIkdFVCAvb3Jncy97b3JnfS9ibG9ja3NcIiwgXCJHRVQgL29yZ3Mve29yZ30vY29kZS1zY2FubmluZy9hbGVydHNcIiwgXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlc1wiLCBcIkdFVCAvb3Jncy97b3JnfS9jcmVkZW50aWFsLWF1dGhvcml6YXRpb25zXCIsIFwiR0VUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0c1wiLCBcIkdFVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIiwgXCJHRVQgL29yZ3Mve29yZ30vZXZlbnRzXCIsIFwiR0VUIC9vcmdzL3tvcmd9L2V4dGVybmFsLWdyb3Vwc1wiLCBcIkdFVCAvb3Jncy97b3JnfS9mYWlsZWRfaW52aXRhdGlvbnNcIiwgXCJHRVQgL29yZ3Mve29yZ30vaG9va3NcIiwgXCJHRVQgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXNcIiwgXCJHRVQgL29yZ3Mve29yZ30vaW5zdGFsbGF0aW9uc1wiLCBcIkdFVCAvb3Jncy97b3JnfS9pbnZpdGF0aW9uc1wiLCBcIkdFVCAvb3Jncy97b3JnfS9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH0vdGVhbXNcIiwgXCJHRVQgL29yZ3Mve29yZ30vaXNzdWVzXCIsIFwiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnNcIiwgXCJHRVQgL29yZ3Mve29yZ30vbWlncmF0aW9uc1wiLCBcIkdFVCAvb3Jncy97b3JnfS9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLCBcIkdFVCAvb3Jncy97b3JnfS9vdXRzaWRlX2NvbGxhYm9yYXRvcnNcIiwgXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXNcIiwgXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIiwgXCJHRVQgL29yZ3Mve29yZ30vcHJvamVjdHNcIiwgXCJHRVQgL29yZ3Mve29yZ30vcHVibGljX21lbWJlcnNcIiwgXCJHRVQgL29yZ3Mve29yZ30vcmVwb3NcIiwgXCJHRVQgL29yZ3Mve29yZ30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0c1wiLCBcIkdFVCAvb3Jncy97b3JnfS9zZXR0aW5ncy9iaWxsaW5nL2FkdmFuY2VkLXNlY3VyaXR5XCIsIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW0tc3luYy9ncm91cHNcIiwgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXNcIiwgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnNcIiwgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50c1wiLCBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn0vcmVhY3Rpb25zXCIsIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vcmVhY3Rpb25zXCIsIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2ludml0YXRpb25zXCIsIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L21lbWJlcnNcIiwgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcHJvamVjdHNcIiwgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcmVwb3NcIiwgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vdGVhbXNcIiwgXCJHRVQgL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH0vY2FyZHNcIiwgXCJHRVQgL3Byb2plY3RzL3twcm9qZWN0X2lkfS9jb2xsYWJvcmF0b3JzXCIsIFwiR0VUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sdW1uc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9hcnRpZmFjdHNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvY2FjaGVzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVuc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2FydGlmYWN0c1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2F0dGVtcHRzL3thdHRlbXB0X251bWJlcn0vam9ic1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2pvYnNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvc2VjcmV0c1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3NcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvd29ya2Zsb3dzL3t3b3JrZmxvd19pZH0vcnVuc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXNzaWduZWVzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stcnVucy97Y2hlY2tfcnVuX2lkfS9hbm5vdGF0aW9uc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stc3VpdGVzL3tjaGVja19zdWl0ZV9pZH0vY2hlY2stcnVuc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9L2luc3RhbmNlc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbmFseXNlc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9kZXZjb250YWluZXJzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL3NlY3JldHNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbGxhYm9yYXRvcnNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tjb21taXRfc2hhfS9jb21tZW50c1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97Y29tbWl0X3NoYX0vcHVsbHNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vY2hlY2stcnVuc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfS9jaGVjay1zdWl0ZXNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vc3RhdHVzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L3N0YXR1c2VzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb250cmlidXRvcnNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3Qvc2VjcmV0c1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGxveW1lbnRzL3tkZXBsb3ltZW50X2lkfS9zdGF0dXNlc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ldmVudHNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ZvcmtzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvbWF0Y2hpbmctcmVmcy97cmVmfVwiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3NcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbnZpdGF0aW9uc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvZXZlbnRzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vY29tbWVudHNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9ldmVudHNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sYWJlbHNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9yZWFjdGlvbnNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS90aW1lbGluZVwiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30va2V5c1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbGFiZWxzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzL3ttaWxlc3RvbmVfbnVtYmVyfS9sYWJlbHNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L25vdGlmaWNhdGlvbnNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2J1aWxkc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJvamVjdHNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy9jb21tZW50c1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb21tZW50c1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb21taXRzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2ZpbGVzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3JlcXVlc3RlZF9yZXZpZXdlcnNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3c1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzL3tyZXZpZXdfaWR9L2NvbW1lbnRzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9L2Fzc2V0c1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9L3JlYWN0aW9uc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0c1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9sb2NhdGlvbnNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXJnYXplcnNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmliZXJzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YWdzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90ZWFtc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdG9waWNzXCIsIFwiR0VUIC9yZXBvc2l0b3JpZXNcIiwgXCJHRVQgL3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH0vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9zZWNyZXRzXCIsIFwiR0VUIC9zZWFyY2gvY29kZVwiLCBcIkdFVCAvc2VhcmNoL2NvbW1pdHNcIiwgXCJHRVQgL3NlYXJjaC9pc3N1ZXNcIiwgXCJHRVQgL3NlYXJjaC9sYWJlbHNcIiwgXCJHRVQgL3NlYXJjaC9yZXBvc2l0b3JpZXNcIiwgXCJHRVQgL3NlYXJjaC90b3BpY3NcIiwgXCJHRVQgL3NlYXJjaC91c2Vyc1wiLCBcIkdFVCAvdGVhbXMve3RlYW1faWR9L2Rpc2N1c3Npb25zXCIsIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50c1wiLCBcIkdFVCAvdGVhbXMve3RlYW1faWR9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfbnVtYmVyfS9yZWFjdGlvbnNcIiwgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L3JlYWN0aW9uc1wiLCBcIkdFVCAvdGVhbXMve3RlYW1faWR9L2ludml0YXRpb25zXCIsIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vbWVtYmVyc1wiLCBcIkdFVCAvdGVhbXMve3RlYW1faWR9L3Byb2plY3RzXCIsIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vcmVwb3NcIiwgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS90ZWFtc1wiLCBcIkdFVCAvdXNlci9ibG9ja3NcIiwgXCJHRVQgL3VzZXIvY29kZXNwYWNlc1wiLCBcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHNcIiwgXCJHRVQgL3VzZXIvZW1haWxzXCIsIFwiR0VUIC91c2VyL2ZvbGxvd2Vyc1wiLCBcIkdFVCAvdXNlci9mb2xsb3dpbmdcIiwgXCJHRVQgL3VzZXIvZ3BnX2tleXNcIiwgXCJHRVQgL3VzZXIvaW5zdGFsbGF0aW9uc1wiLCBcIkdFVCAvdXNlci9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLCBcIkdFVCAvdXNlci9pc3N1ZXNcIiwgXCJHRVQgL3VzZXIva2V5c1wiLCBcIkdFVCAvdXNlci9tYXJrZXRwbGFjZV9wdXJjaGFzZXNcIiwgXCJHRVQgL3VzZXIvbWFya2V0cGxhY2VfcHVyY2hhc2VzL3N0dWJiZWRcIiwgXCJHRVQgL3VzZXIvbWVtYmVyc2hpcHMvb3Jnc1wiLCBcIkdFVCAvdXNlci9taWdyYXRpb25zXCIsIFwiR0VUIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCIsIFwiR0VUIC91c2VyL29yZ3NcIiwgXCJHRVQgL3VzZXIvcGFja2FnZXNcIiwgXCJHRVQgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIiwgXCJHRVQgL3VzZXIvcHVibGljX2VtYWlsc1wiLCBcIkdFVCAvdXNlci9yZXBvc1wiLCBcIkdFVCAvdXNlci9yZXBvc2l0b3J5X2ludml0YXRpb25zXCIsIFwiR0VUIC91c2VyL3N0YXJyZWRcIiwgXCJHRVQgL3VzZXIvc3Vic2NyaXB0aW9uc1wiLCBcIkdFVCAvdXNlci90ZWFtc1wiLCBcIkdFVCAvdXNlcnNcIiwgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzXCIsIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2V2ZW50cy9vcmdzL3tvcmd9XCIsIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2V2ZW50cy9wdWJsaWNcIiwgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZm9sbG93ZXJzXCIsIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2ZvbGxvd2luZ1wiLCBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9naXN0c1wiLCBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ncGdfa2V5c1wiLCBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9rZXlzXCIsIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L29yZ3NcIiwgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXNcIiwgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcHJvamVjdHNcIiwgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcmVjZWl2ZWRfZXZlbnRzXCIsIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3JlY2VpdmVkX2V2ZW50cy9wdWJsaWNcIiwgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcmVwb3NcIiwgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc3RhcnJlZFwiLCBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zdWJzY3JpcHRpb25zXCJdO1xuXG5mdW5jdGlvbiBpc1BhZ2luYXRpbmdFbmRwb2ludChhcmcpIHtcbiAgaWYgKHR5cGVvZiBhcmcgPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gcGFnaW5hdGluZ0VuZHBvaW50cy5pbmNsdWRlcyhhcmcpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSBvY3Rva2l0IE9jdG9raXQgaW5zdGFuY2VcbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgcGFzc2VkIHRvIE9jdG9raXQgY29uc3RydWN0b3JcbiAqL1xuXG5mdW5jdGlvbiBwYWdpbmF0ZVJlc3Qob2N0b2tpdCkge1xuICByZXR1cm4ge1xuICAgIHBhZ2luYXRlOiBPYmplY3QuYXNzaWduKHBhZ2luYXRlLmJpbmQobnVsbCwgb2N0b2tpdCksIHtcbiAgICAgIGl0ZXJhdG9yOiBpdGVyYXRvci5iaW5kKG51bGwsIG9jdG9raXQpXG4gICAgfSlcbiAgfTtcbn1cbnBhZ2luYXRlUmVzdC5WRVJTSU9OID0gVkVSU0lPTjtcblxuZXhwb3J0cy5jb21wb3NlUGFnaW5hdGVSZXN0ID0gY29tcG9zZVBhZ2luYXRlUmVzdDtcbmV4cG9ydHMuaXNQYWdpbmF0aW5nRW5kcG9pbnQgPSBpc1BhZ2luYXRpbmdFbmRwb2ludDtcbmV4cG9ydHMucGFnaW5hdGVSZXN0ID0gcGFnaW5hdGVSZXN0O1xuZXhwb3J0cy5wYWdpbmF0aW5nRW5kcG9pbnRzID0gcGFnaW5hdGluZ0VuZHBvaW50cztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9KTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldE9jdG9raXRPcHRpb25zID0gZXhwb3J0cy5HaXRIdWIgPSBleHBvcnRzLmRlZmF1bHRzID0gZXhwb3J0cy5jb250ZXh0ID0gdm9pZCAwO1xuY29uc3QgQ29udGV4dCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiLi9jb250ZXh0XCIpKTtcbmNvbnN0IFV0aWxzID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL2ludGVybmFsL3V0aWxzXCIpKTtcbi8vIG9jdG9raXQgKyBwbHVnaW5zXG5jb25zdCBjb3JlXzEgPSByZXF1aXJlKFwiQG9jdG9raXQvY29yZVwiKTtcbmNvbnN0IHBsdWdpbl9yZXN0X2VuZHBvaW50X21ldGhvZHNfMSA9IHJlcXVpcmUoXCJAb2N0b2tpdC9wbHVnaW4tcmVzdC1lbmRwb2ludC1tZXRob2RzXCIpO1xuY29uc3QgcGx1Z2luX3BhZ2luYXRlX3Jlc3RfMSA9IHJlcXVpcmUoXCJAb2N0b2tpdC9wbHVnaW4tcGFnaW5hdGUtcmVzdFwiKTtcbmV4cG9ydHMuY29udGV4dCA9IG5ldyBDb250ZXh0LkNvbnRleHQoKTtcbmNvbnN0IGJhc2VVcmwgPSBVdGlscy5nZXRBcGlCYXNlVXJsKCk7XG5leHBvcnRzLmRlZmF1bHRzID0ge1xuICAgIGJhc2VVcmwsXG4gICAgcmVxdWVzdDoge1xuICAgICAgICBhZ2VudDogVXRpbHMuZ2V0UHJveHlBZ2VudChiYXNlVXJsKVxuICAgIH1cbn07XG5leHBvcnRzLkdpdEh1YiA9IGNvcmVfMS5PY3Rva2l0LnBsdWdpbihwbHVnaW5fcmVzdF9lbmRwb2ludF9tZXRob2RzXzEucmVzdEVuZHBvaW50TWV0aG9kcywgcGx1Z2luX3BhZ2luYXRlX3Jlc3RfMS5wYWdpbmF0ZVJlc3QpLmRlZmF1bHRzKGV4cG9ydHMuZGVmYXVsdHMpO1xuLyoqXG4gKiBDb252aWVuY2UgZnVuY3Rpb24gdG8gY29ycmVjdGx5IGZvcm1hdCBPY3Rva2l0IE9wdGlvbnMgdG8gcGFzcyBpbnRvIHRoZSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gICAgIHRva2VuICAgIHRoZSByZXBvIFBBVCBvciBHSVRIVUJfVE9LRU5cbiAqIEBwYXJhbSAgICAgb3B0aW9ucyAgb3RoZXIgb3B0aW9ucyB0byBzZXRcbiAqL1xuZnVuY3Rpb24gZ2V0T2N0b2tpdE9wdGlvbnModG9rZW4sIG9wdGlvbnMpIHtcbiAgICBjb25zdCBvcHRzID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyB8fCB7fSk7IC8vIFNoYWxsb3cgY2xvbmUgLSBkb24ndCBtdXRhdGUgdGhlIG9iamVjdCBwcm92aWRlZCBieSB0aGUgY2FsbGVyXG4gICAgLy8gQXV0aFxuICAgIGNvbnN0IGF1dGggPSBVdGlscy5nZXRBdXRoU3RyaW5nKHRva2VuLCBvcHRzKTtcbiAgICBpZiAoYXV0aCkge1xuICAgICAgICBvcHRzLmF1dGggPSBhdXRoO1xuICAgIH1cbiAgICByZXR1cm4gb3B0cztcbn1cbmV4cG9ydHMuZ2V0T2N0b2tpdE9wdGlvbnMgPSBnZXRPY3Rva2l0T3B0aW9ucztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfSk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRPY3Rva2l0ID0gZXhwb3J0cy5jb250ZXh0ID0gdm9pZCAwO1xuY29uc3QgQ29udGV4dCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiLi9jb250ZXh0XCIpKTtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi91dGlsc1wiKTtcbmV4cG9ydHMuY29udGV4dCA9IG5ldyBDb250ZXh0LkNvbnRleHQoKTtcbi8qKlxuICogUmV0dXJucyBhIGh5ZHJhdGVkIG9jdG9raXQgcmVhZHkgdG8gdXNlIGZvciBHaXRIdWIgQWN0aW9uc1xuICpcbiAqIEBwYXJhbSAgICAgdG9rZW4gICAgdGhlIHJlcG8gUEFUIG9yIEdJVEhVQl9UT0tFTlxuICogQHBhcmFtICAgICBvcHRpb25zICBvdGhlciBvcHRpb25zIHRvIHNldFxuICovXG5mdW5jdGlvbiBnZXRPY3Rva2l0KHRva2VuLCBvcHRpb25zLCAuLi5hZGRpdGlvbmFsUGx1Z2lucykge1xuICAgIGNvbnN0IEdpdEh1YldpdGhQbHVnaW5zID0gdXRpbHNfMS5HaXRIdWIucGx1Z2luKC4uLmFkZGl0aW9uYWxQbHVnaW5zKTtcbiAgICByZXR1cm4gbmV3IEdpdEh1YldpdGhQbHVnaW5zKHV0aWxzXzEuZ2V0T2N0b2tpdE9wdGlvbnModG9rZW4sIG9wdGlvbnMpKTtcbn1cbmV4cG9ydHMuZ2V0T2N0b2tpdCA9IGdldE9jdG9raXQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1naXRodWIuanMubWFwIiwKICAgICJtb2R1bGUuZXhwb3J0cyA9IFRyYXZlcnNlO1xuZnVuY3Rpb24gVHJhdmVyc2UgKG9iaikge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBUcmF2ZXJzZSkpIHJldHVybiBuZXcgVHJhdmVyc2Uob2JqKTtcbiAgICB0aGlzLnZhbHVlID0gb2JqO1xufVxuXG5UcmF2ZXJzZS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKHBzKSB7XG4gICAgdmFyIG5vZGUgPSB0aGlzLnZhbHVlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHMubGVuZ3RoOyBpICsrKSB7XG4gICAgICAgIHZhciBrZXkgPSBwc1tpXTtcbiAgICAgICAgaWYgKCFPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChub2RlLCBrZXkpKSB7XG4gICAgICAgICAgICBub2RlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgbm9kZSA9IG5vZGVba2V5XTtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGU7XG59O1xuXG5UcmF2ZXJzZS5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKHBzLCB2YWx1ZSkge1xuICAgIHZhciBub2RlID0gdGhpcy52YWx1ZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBzLmxlbmd0aCAtIDE7IGkgKyspIHtcbiAgICAgICAgdmFyIGtleSA9IHBzW2ldO1xuICAgICAgICBpZiAoIU9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5vZGUsIGtleSkpIG5vZGVba2V5XSA9IHt9O1xuICAgICAgICBub2RlID0gbm9kZVtrZXldO1xuICAgIH1cbiAgICBub2RlW3BzW2ldXSA9IHZhbHVlO1xuICAgIHJldHVybiB2YWx1ZTtcbn07XG5cblRyYXZlcnNlLnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICByZXR1cm4gd2Fsayh0aGlzLnZhbHVlLCBjYiwgdHJ1ZSk7XG59O1xuXG5UcmF2ZXJzZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChjYikge1xuICAgIHRoaXMudmFsdWUgPSB3YWxrKHRoaXMudmFsdWUsIGNiLCBmYWxzZSk7XG4gICAgcmV0dXJuIHRoaXMudmFsdWU7XG59O1xuXG5UcmF2ZXJzZS5wcm90b3R5cGUucmVkdWNlID0gZnVuY3Rpb24gKGNiLCBpbml0KSB7XG4gICAgdmFyIHNraXAgPSBhcmd1bWVudHMubGVuZ3RoID09PSAxO1xuICAgIHZhciBhY2MgPSBza2lwID8gdGhpcy52YWx1ZSA6IGluaXQ7XG4gICAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1Jvb3QgfHwgIXNraXApIHtcbiAgICAgICAgICAgIGFjYyA9IGNiLmNhbGwodGhpcywgYWNjLCB4KTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBhY2M7XG59O1xuXG5UcmF2ZXJzZS5wcm90b3R5cGUuZGVlcEVxdWFsID0gZnVuY3Rpb24gKG9iaikge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICdkZWVwRXF1YWwgcmVxdWlyZXMgZXhhY3RseSBvbmUgb2JqZWN0IHRvIGNvbXBhcmUgYWdhaW5zdCdcbiAgICAgICAgKTtcbiAgICB9XG4gICAgXG4gICAgdmFyIGVxdWFsID0gdHJ1ZTtcbiAgICB2YXIgbm9kZSA9IG9iajtcbiAgICBcbiAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24gKHkpIHtcbiAgICAgICAgdmFyIG5vdEVxdWFsID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGVxdWFsID0gZmFsc2U7XG4gICAgICAgICAgICAvL3RoaXMuc3RvcCgpO1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfSkuYmluZCh0aGlzKTtcbiAgICAgICAgXG4gICAgICAgIC8vaWYgKG5vZGUgPT09IHVuZGVmaW5lZCB8fCBub2RlID09PSBudWxsKSByZXR1cm4gbm90RXF1YWwoKTtcbiAgICAgICAgXG4gICAgICAgIGlmICghdGhpcy5pc1Jvb3QpIHtcbiAgICAgICAgLypcbiAgICAgICAgICAgIGlmICghT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobm9kZSwgdGhpcy5rZXkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vdEVxdWFsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICovXG4gICAgICAgICAgICBpZiAodHlwZW9mIG5vZGUgIT09ICdvYmplY3QnKSByZXR1cm4gbm90RXF1YWwoKTtcbiAgICAgICAgICAgIG5vZGUgPSBub2RlW3RoaXMua2V5XTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgdmFyIHggPSBub2RlO1xuICAgICAgICBcbiAgICAgICAgdGhpcy5wb3N0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIG5vZGUgPSB4O1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIHZhciB0b1MgPSBmdW5jdGlvbiAobykge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKTtcbiAgICAgICAgfTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0aGlzLmNpcmN1bGFyKSB7XG4gICAgICAgICAgICBpZiAoVHJhdmVyc2Uob2JqKS5nZXQodGhpcy5jaXJjdWxhci5wYXRoKSAhPT0geCkgbm90RXF1YWwoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgeCAhPT0gdHlwZW9mIHkpIHtcbiAgICAgICAgICAgIG5vdEVxdWFsKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoeCA9PT0gbnVsbCB8fCB5ID09PSBudWxsIHx8IHggPT09IHVuZGVmaW5lZCB8fCB5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmICh4ICE9PSB5KSBub3RFcXVhbCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHguX19wcm90b19fICE9PSB5Ll9fcHJvdG9fXykge1xuICAgICAgICAgICAgbm90RXF1YWwoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh4ID09PSB5KSB7XG4gICAgICAgICAgICAvLyBub3BcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgeCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgaWYgKHggaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgICAgICAgICAvLyBib3RoIHJlZ2V4cHMgb24gYWNjb3VudCBvZiB0aGUgX19wcm90b19fIGNoZWNrXG4gICAgICAgICAgICAgICAgaWYgKHgudG9TdHJpbmcoKSAhPSB5LnRvU3RyaW5nKCkpIG5vdEVxdWFsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh4ICE9PSB5KSBub3RFcXVhbCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiB4ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgaWYgKHRvUyh5KSA9PT0gJ1tvYmplY3QgQXJndW1lbnRzXSdcbiAgICAgICAgICAgIHx8IHRvUyh4KSA9PT0gJ1tvYmplY3QgQXJndW1lbnRzXScpIHtcbiAgICAgICAgICAgICAgICBpZiAodG9TKHgpICE9PSB0b1MoeSkpIHtcbiAgICAgICAgICAgICAgICAgICAgbm90RXF1YWwoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh4IGluc3RhbmNlb2YgRGF0ZSB8fCB5IGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgICAgICAgIGlmICghKHggaW5zdGFuY2VvZiBEYXRlKSB8fCAhKHkgaW5zdGFuY2VvZiBEYXRlKVxuICAgICAgICAgICAgICAgIHx8IHguZ2V0VGltZSgpICE9PSB5LmdldFRpbWUoKSkge1xuICAgICAgICAgICAgICAgICAgICBub3RFcXVhbCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBreCA9IE9iamVjdC5rZXlzKHgpO1xuICAgICAgICAgICAgICAgIHZhciBreSA9IE9iamVjdC5rZXlzKHkpO1xuICAgICAgICAgICAgICAgIGlmIChreC5sZW5ndGggIT09IGt5Lmxlbmd0aCkgcmV0dXJuIG5vdEVxdWFsKCk7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBreC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgayA9IGt4W2ldO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIU9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHksIGspKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBub3RFcXVhbCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgcmV0dXJuIGVxdWFsO1xufTtcblxuVHJhdmVyc2UucHJvdG90eXBlLnBhdGhzID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBhY2MgPSBbXTtcbiAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgYWNjLnB1c2godGhpcy5wYXRoKTsgXG4gICAgfSk7XG4gICAgcmV0dXJuIGFjYztcbn07XG5cblRyYXZlcnNlLnByb3RvdHlwZS5ub2RlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYWNjID0gW107XG4gICAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIGFjYy5wdXNoKHRoaXMubm9kZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGFjYztcbn07XG5cblRyYXZlcnNlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcGFyZW50cyA9IFtdLCBub2RlcyA9IFtdO1xuICAgIFxuICAgIHJldHVybiAoZnVuY3Rpb24gY2xvbmUgKHNyYykge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChwYXJlbnRzW2ldID09PSBzcmMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbm9kZXNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2Ygc3JjID09PSAnb2JqZWN0JyAmJiBzcmMgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBkc3QgPSBjb3B5KHNyYyk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHBhcmVudHMucHVzaChzcmMpO1xuICAgICAgICAgICAgbm9kZXMucHVzaChkc3QpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhzcmMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgIGRzdFtrZXldID0gY2xvbmUoc3JjW2tleV0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHBhcmVudHMucG9wKCk7XG4gICAgICAgICAgICBub2Rlcy5wb3AoKTtcbiAgICAgICAgICAgIHJldHVybiBkc3Q7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gc3JjO1xuICAgICAgICB9XG4gICAgfSkodGhpcy52YWx1ZSk7XG59O1xuXG5mdW5jdGlvbiB3YWxrIChyb290LCBjYiwgaW1tdXRhYmxlKSB7XG4gICAgdmFyIHBhdGggPSBbXTtcbiAgICB2YXIgcGFyZW50cyA9IFtdO1xuICAgIHZhciBhbGl2ZSA9IHRydWU7XG4gICAgXG4gICAgcmV0dXJuIChmdW5jdGlvbiB3YWxrZXIgKG5vZGVfKSB7XG4gICAgICAgIHZhciBub2RlID0gaW1tdXRhYmxlID8gY29weShub2RlXykgOiBub2RlXztcbiAgICAgICAgdmFyIG1vZGlmaWVycyA9IHt9O1xuICAgICAgICBcbiAgICAgICAgdmFyIHN0YXRlID0ge1xuICAgICAgICAgICAgbm9kZSA6IG5vZGUsXG4gICAgICAgICAgICBub2RlXyA6IG5vZGVfLFxuICAgICAgICAgICAgcGF0aCA6IFtdLmNvbmNhdChwYXRoKSxcbiAgICAgICAgICAgIHBhcmVudCA6IHBhcmVudHMuc2xpY2UoLTEpWzBdLFxuICAgICAgICAgICAga2V5IDogcGF0aC5zbGljZSgtMSlbMF0sXG4gICAgICAgICAgICBpc1Jvb3QgOiBwYXRoLmxlbmd0aCA9PT0gMCxcbiAgICAgICAgICAgIGxldmVsIDogcGF0aC5sZW5ndGgsXG4gICAgICAgICAgICBjaXJjdWxhciA6IG51bGwsXG4gICAgICAgICAgICB1cGRhdGUgOiBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIGlmICghc3RhdGUuaXNSb290KSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLnBhcmVudC5ub2RlW3N0YXRlLmtleV0gPSB4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzdGF0ZS5ub2RlID0geDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnZGVsZXRlJyA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgc3RhdGUucGFyZW50Lm5vZGVbc3RhdGUua2V5XTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZW1vdmUgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc3RhdGUucGFyZW50Lm5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLnBhcmVudC5ub2RlLnNwbGljZShzdGF0ZS5rZXksIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHN0YXRlLnBhcmVudC5ub2RlW3N0YXRlLmtleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJlZm9yZSA6IGZ1bmN0aW9uIChmKSB7IG1vZGlmaWVycy5iZWZvcmUgPSBmIH0sXG4gICAgICAgICAgICBhZnRlciA6IGZ1bmN0aW9uIChmKSB7IG1vZGlmaWVycy5hZnRlciA9IGYgfSxcbiAgICAgICAgICAgIHByZSA6IGZ1bmN0aW9uIChmKSB7IG1vZGlmaWVycy5wcmUgPSBmIH0sXG4gICAgICAgICAgICBwb3N0IDogZnVuY3Rpb24gKGYpIHsgbW9kaWZpZXJzLnBvc3QgPSBmIH0sXG4gICAgICAgICAgICBzdG9wIDogZnVuY3Rpb24gKCkgeyBhbGl2ZSA9IGZhbHNlIH1cbiAgICAgICAgfTtcbiAgICAgICAgXG4gICAgICAgIGlmICghYWxpdmUpIHJldHVybiBzdGF0ZTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2Ygbm9kZSA9PT0gJ29iamVjdCcgJiYgbm9kZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgc3RhdGUuaXNMZWFmID0gT2JqZWN0LmtleXMobm9kZSkubGVuZ3RoID09IDA7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChwYXJlbnRzW2ldLm5vZGVfID09PSBub2RlXykge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5jaXJjdWxhciA9IHBhcmVudHNbaV07XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHN0YXRlLmlzTGVhZiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIHN0YXRlLm5vdExlYWYgPSAhc3RhdGUuaXNMZWFmO1xuICAgICAgICBzdGF0ZS5ub3RSb290ID0gIXN0YXRlLmlzUm9vdDtcbiAgICAgICAgXG4gICAgICAgIC8vIHVzZSByZXR1cm4gdmFsdWVzIHRvIHVwZGF0ZSBpZiBkZWZpbmVkXG4gICAgICAgIHZhciByZXQgPSBjYi5jYWxsKHN0YXRlLCBzdGF0ZS5ub2RlKTtcbiAgICAgICAgaWYgKHJldCAhPT0gdW5kZWZpbmVkICYmIHN0YXRlLnVwZGF0ZSkgc3RhdGUudXBkYXRlKHJldCk7XG4gICAgICAgIGlmIChtb2RpZmllcnMuYmVmb3JlKSBtb2RpZmllcnMuYmVmb3JlLmNhbGwoc3RhdGUsIHN0YXRlLm5vZGUpO1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiBzdGF0ZS5ub2RlID09ICdvYmplY3QnXG4gICAgICAgICYmIHN0YXRlLm5vZGUgIT09IG51bGwgJiYgIXN0YXRlLmNpcmN1bGFyKSB7XG4gICAgICAgICAgICBwYXJlbnRzLnB1c2goc3RhdGUpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHN0YXRlLm5vZGUpO1xuICAgICAgICAgICAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXksIGkpIHtcbiAgICAgICAgICAgICAgICBwYXRoLnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBpZiAobW9kaWZpZXJzLnByZSkgbW9kaWZpZXJzLnByZS5jYWxsKHN0YXRlLCBzdGF0ZS5ub2RlW2tleV0sIGtleSk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gd2Fsa2VyKHN0YXRlLm5vZGVba2V5XSk7XG4gICAgICAgICAgICAgICAgaWYgKGltbXV0YWJsZSAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChzdGF0ZS5ub2RlLCBrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLm5vZGVba2V5XSA9IGNoaWxkLm5vZGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGNoaWxkLmlzTGFzdCA9IGkgPT0ga2V5cy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICAgIGNoaWxkLmlzRmlyc3QgPSBpID09IDA7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgaWYgKG1vZGlmaWVycy5wb3N0KSBtb2RpZmllcnMucG9zdC5jYWxsKHN0YXRlLCBjaGlsZCk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgcGF0aC5wb3AoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcGFyZW50cy5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaWYgKG1vZGlmaWVycy5hZnRlcikgbW9kaWZpZXJzLmFmdGVyLmNhbGwoc3RhdGUsIHN0YXRlLm5vZGUpO1xuICAgICAgICBcbiAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH0pKHJvb3QpLm5vZGU7XG59XG5cbk9iamVjdC5rZXlzKFRyYXZlcnNlLnByb3RvdHlwZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgVHJhdmVyc2Vba2V5XSA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgIHZhciB0ID0gVHJhdmVyc2Uob2JqKTtcbiAgICAgICAgcmV0dXJuIHRba2V5XS5hcHBseSh0LCBhcmdzKTtcbiAgICB9O1xufSk7XG5cbmZ1bmN0aW9uIGNvcHkgKHNyYykge1xuICAgIGlmICh0eXBlb2Ygc3JjID09PSAnb2JqZWN0JyAmJiBzcmMgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIGRzdDtcbiAgICAgICAgXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHNyYykpIHtcbiAgICAgICAgICAgIGRzdCA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNyYyBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgIGRzdCA9IG5ldyBEYXRlKHNyYyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc3JjIGluc3RhbmNlb2YgQm9vbGVhbikge1xuICAgICAgICAgICAgZHN0ID0gbmV3IEJvb2xlYW4oc3JjKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzcmMgaW5zdGFuY2VvZiBOdW1iZXIpIHtcbiAgICAgICAgICAgIGRzdCA9IG5ldyBOdW1iZXIoc3JjKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzcmMgaW5zdGFuY2VvZiBTdHJpbmcpIHtcbiAgICAgICAgICAgIGRzdCA9IG5ldyBTdHJpbmcoc3JjKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGRzdCA9IE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKHNyYykpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBPYmplY3Qua2V5cyhzcmMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgZHN0W2tleV0gPSBzcmNba2V5XTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBkc3Q7XG4gICAgfVxuICAgIGVsc2UgcmV0dXJuIHNyYztcbn1cbiIsCiAgICAidmFyIFRyYXZlcnNlID0gcmVxdWlyZSgndHJhdmVyc2UnKTtcbnZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXI7XG5cbm1vZHVsZS5leHBvcnRzID0gQ2hhaW5zYXc7XG5mdW5jdGlvbiBDaGFpbnNhdyAoYnVpbGRlcikge1xuICAgIHZhciBzYXcgPSBDaGFpbnNhdy5zYXcoYnVpbGRlciwge30pO1xuICAgIHZhciByID0gYnVpbGRlci5jYWxsKHNhdy5oYW5kbGVycywgc2F3KTtcbiAgICBpZiAociAhPT0gdW5kZWZpbmVkKSBzYXcuaGFuZGxlcnMgPSByO1xuICAgIHNhdy5yZWNvcmQoKTtcbiAgICByZXR1cm4gc2F3LmNoYWluKCk7XG59O1xuXG5DaGFpbnNhdy5saWdodCA9IGZ1bmN0aW9uIENoYWluc2F3TGlnaHQgKGJ1aWxkZXIpIHtcbiAgICB2YXIgc2F3ID0gQ2hhaW5zYXcuc2F3KGJ1aWxkZXIsIHt9KTtcbiAgICB2YXIgciA9IGJ1aWxkZXIuY2FsbChzYXcuaGFuZGxlcnMsIHNhdyk7XG4gICAgaWYgKHIgIT09IHVuZGVmaW5lZCkgc2F3LmhhbmRsZXJzID0gcjtcbiAgICByZXR1cm4gc2F3LmNoYWluKCk7XG59O1xuXG5DaGFpbnNhdy5zYXcgPSBmdW5jdGlvbiAoYnVpbGRlciwgaGFuZGxlcnMpIHtcbiAgICB2YXIgc2F3ID0gbmV3IEV2ZW50RW1pdHRlcjtcbiAgICBzYXcuaGFuZGxlcnMgPSBoYW5kbGVycztcbiAgICBzYXcuYWN0aW9ucyA9IFtdO1xuXG4gICAgc2F3LmNoYWluID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgY2ggPSBUcmF2ZXJzZShzYXcuaGFuZGxlcnMpLm1hcChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNSb290KSByZXR1cm4gbm9kZTtcbiAgICAgICAgICAgIHZhciBwcyA9IHRoaXMucGF0aDtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBub2RlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBzYXcuYWN0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGggOiBwcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgOiBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cylcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjaDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzYXcuZW1pdCgnYmVnaW4nKTtcbiAgICAgICAgICAgIHNhdy5uZXh0KCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBjaDtcbiAgICB9O1xuXG4gICAgc2F3LnBvcCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHNhdy5hY3Rpb25zLnNoaWZ0KCk7XG4gICAgfTtcblxuICAgIHNhdy5uZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYWN0aW9uID0gc2F3LnBvcCgpO1xuXG4gICAgICAgIGlmICghYWN0aW9uKSB7XG4gICAgICAgICAgICBzYXcuZW1pdCgnZW5kJyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIWFjdGlvbi50cmFwKSB7XG4gICAgICAgICAgICB2YXIgbm9kZSA9IHNhdy5oYW5kbGVycztcbiAgICAgICAgICAgIGFjdGlvbi5wYXRoLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBub2RlID0gbm9kZVtrZXldIH0pO1xuICAgICAgICAgICAgbm9kZS5hcHBseShzYXcuaGFuZGxlcnMsIGFjdGlvbi5hcmdzKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBzYXcubmVzdCA9IGZ1bmN0aW9uIChjYikge1xuICAgICAgICB2YXIgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgdmFyIGF1dG9uZXh0ID0gdHJ1ZTtcblxuICAgICAgICBpZiAodHlwZW9mIGNiID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIHZhciBhdXRvbmV4dCA9IGNiO1xuICAgICAgICAgICAgY2IgPSBhcmdzLnNoaWZ0KCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcyA9IENoYWluc2F3LnNhdyhidWlsZGVyLCB7fSk7XG4gICAgICAgIHZhciByID0gYnVpbGRlci5jYWxsKHMuaGFuZGxlcnMsIHMpO1xuXG4gICAgICAgIGlmIChyICE9PSB1bmRlZmluZWQpIHMuaGFuZGxlcnMgPSByO1xuXG4gICAgICAgIC8vIElmIHdlIGFyZSByZWNvcmRpbmcuLi5cbiAgICAgICAgaWYgKFwidW5kZWZpbmVkXCIgIT09IHR5cGVvZiBzYXcuc3RlcCkge1xuICAgICAgICAgICAgLy8gLi4uIG91ciBjaGlsZHJlbiBzaG91bGQsIHRvb1xuICAgICAgICAgICAgcy5yZWNvcmQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNiLmFwcGx5KHMuY2hhaW4oKSwgYXJncyk7XG4gICAgICAgIGlmIChhdXRvbmV4dCAhPT0gZmFsc2UpIHMub24oJ2VuZCcsIHNhdy5uZXh0KTtcbiAgICB9O1xuXG4gICAgc2F3LnJlY29yZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdXBncmFkZUNoYWluc2F3KHNhdyk7XG4gICAgfTtcblxuICAgIFsndHJhcCcsICdkb3duJywgJ2p1bXAnXS5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2QpIHtcbiAgICAgICAgc2F3W21ldGhvZF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUbyB1c2UgdGhlIHRyYXAsIGRvd24gYW5kIGp1bXAgZmVhdHVyZXMsIHBsZWFzZSBcIitcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNhbGwgcmVjb3JkKCkgZmlyc3QgdG8gc3RhcnQgcmVjb3JkaW5nIGFjdGlvbnMuXCIpO1xuICAgICAgICB9O1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNhdztcbn07XG5cbmZ1bmN0aW9uIHVwZ3JhZGVDaGFpbnNhdyhzYXcpIHtcbiAgICBzYXcuc3RlcCA9IDA7XG5cbiAgICAvLyBvdmVycmlkZSBwb3BcbiAgICBzYXcucG9wID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gc2F3LmFjdGlvbnNbc2F3LnN0ZXArK107XG4gICAgfTtcblxuICAgIHNhdy50cmFwID0gZnVuY3Rpb24gKG5hbWUsIGNiKSB7XG4gICAgICAgIHZhciBwcyA9IEFycmF5LmlzQXJyYXkobmFtZSkgPyBuYW1lIDogW25hbWVdO1xuICAgICAgICBzYXcuYWN0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgIHBhdGggOiBwcyxcbiAgICAgICAgICAgIHN0ZXAgOiBzYXcuc3RlcCxcbiAgICAgICAgICAgIGNiIDogY2IsXG4gICAgICAgICAgICB0cmFwIDogdHJ1ZVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgc2F3LmRvd24gPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICB2YXIgcHMgPSAoQXJyYXkuaXNBcnJheShuYW1lKSA/IG5hbWUgOiBbbmFtZV0pLmpvaW4oJy8nKTtcbiAgICAgICAgdmFyIGkgPSBzYXcuYWN0aW9ucy5zbGljZShzYXcuc3RlcCkubWFwKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICBpZiAoeC50cmFwICYmIHguc3RlcCA8PSBzYXcuc3RlcCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIHgucGF0aC5qb2luKCcvJykgPT0gcHM7XG4gICAgICAgIH0pLmluZGV4T2YodHJ1ZSk7XG5cbiAgICAgICAgaWYgKGkgPj0gMCkgc2F3LnN0ZXAgKz0gaTtcbiAgICAgICAgZWxzZSBzYXcuc3RlcCA9IHNhdy5hY3Rpb25zLmxlbmd0aDtcblxuICAgICAgICB2YXIgYWN0ID0gc2F3LmFjdGlvbnNbc2F3LnN0ZXAgLSAxXTtcbiAgICAgICAgaWYgKGFjdCAmJiBhY3QudHJhcCkge1xuICAgICAgICAgICAgLy8gSXQncyBhIHRyYXAhXG4gICAgICAgICAgICBzYXcuc3RlcCA9IGFjdC5zdGVwO1xuICAgICAgICAgICAgYWN0LmNiKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBzYXcubmV4dCgpO1xuICAgIH07XG5cbiAgICBzYXcuanVtcCA9IGZ1bmN0aW9uIChzdGVwKSB7XG4gICAgICAgIHNhdy5zdGVwID0gc3RlcDtcbiAgICAgICAgc2F3Lm5leHQoKTtcbiAgICB9O1xufTtcbiIsCiAgICAibW9kdWxlLmV4cG9ydHMgPSBCdWZmZXJzO1xuXG5mdW5jdGlvbiBCdWZmZXJzIChidWZzKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEJ1ZmZlcnMpKSByZXR1cm4gbmV3IEJ1ZmZlcnMoYnVmcyk7XG4gICAgdGhpcy5idWZmZXJzID0gYnVmcyB8fCBbXTtcbiAgICB0aGlzLmxlbmd0aCA9IHRoaXMuYnVmZmVycy5yZWR1Y2UoZnVuY3Rpb24gKHNpemUsIGJ1Zikge1xuICAgICAgICByZXR1cm4gc2l6ZSArIGJ1Zi5sZW5ndGhcbiAgICB9LCAwKTtcbn1cblxuQnVmZmVycy5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihhcmd1bWVudHNbaV0pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUcmllZCB0byBwdXNoIGEgbm9uLWJ1ZmZlcicpO1xuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBidWYgPSBhcmd1bWVudHNbaV07XG4gICAgICAgIHRoaXMuYnVmZmVycy5wdXNoKGJ1Zik7XG4gICAgICAgIHRoaXMubGVuZ3RoICs9IGJ1Zi5sZW5ndGg7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmxlbmd0aDtcbn07XG5cbkJ1ZmZlcnMucHJvdG90eXBlLnVuc2hpZnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYXJndW1lbnRzW2ldKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVHJpZWQgdG8gdW5zaGlmdCBhIG5vbi1idWZmZXInKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgYnVmID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB0aGlzLmJ1ZmZlcnMudW5zaGlmdChidWYpO1xuICAgICAgICB0aGlzLmxlbmd0aCArPSBidWYubGVuZ3RoO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5sZW5ndGg7XG59O1xuXG5CdWZmZXJzLnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gKGRzdCwgZFN0YXJ0LCBzdGFydCwgZW5kKSB7XG4gICAgcmV0dXJuIHRoaXMuc2xpY2Uoc3RhcnQsIGVuZCkuY29weShkc3QsIGRTdGFydCwgMCwgZW5kIC0gc3RhcnQpO1xufTtcblxuQnVmZmVycy5wcm90b3R5cGUuc3BsaWNlID0gZnVuY3Rpb24gKGksIGhvd01hbnkpIHtcbiAgICB2YXIgYnVmZmVycyA9IHRoaXMuYnVmZmVycztcbiAgICB2YXIgaW5kZXggPSBpID49IDAgPyBpIDogdGhpcy5sZW5ndGggLSBpO1xuICAgIHZhciByZXBzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpO1xuICAgIFxuICAgIGlmIChob3dNYW55ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaG93TWFueSA9IHRoaXMubGVuZ3RoIC0gaW5kZXg7XG4gICAgfVxuICAgIGVsc2UgaWYgKGhvd01hbnkgPiB0aGlzLmxlbmd0aCAtIGluZGV4KSB7XG4gICAgICAgIGhvd01hbnkgPSB0aGlzLmxlbmd0aCAtIGluZGV4O1xuICAgIH1cbiAgICBcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGhpcy5sZW5ndGggKz0gcmVwc1tpXS5sZW5ndGg7XG4gICAgfVxuICAgIFxuICAgIHZhciByZW1vdmVkID0gbmV3IEJ1ZmZlcnMoKTtcbiAgICB2YXIgYnl0ZXMgPSAwO1xuICAgIFxuICAgIHZhciBzdGFydEJ5dGVzID0gMDtcbiAgICBmb3IgKFxuICAgICAgICB2YXIgaWkgPSAwO1xuICAgICAgICBpaSA8IGJ1ZmZlcnMubGVuZ3RoICYmIHN0YXJ0Qnl0ZXMgKyBidWZmZXJzW2lpXS5sZW5ndGggPCBpbmRleDtcbiAgICAgICAgaWkgKytcbiAgICApIHsgc3RhcnRCeXRlcyArPSBidWZmZXJzW2lpXS5sZW5ndGggfVxuICAgIFxuICAgIGlmIChpbmRleCAtIHN0YXJ0Qnl0ZXMgPiAwKSB7XG4gICAgICAgIHZhciBzdGFydCA9IGluZGV4IC0gc3RhcnRCeXRlcztcbiAgICAgICAgXG4gICAgICAgIGlmIChzdGFydCArIGhvd01hbnkgPCBidWZmZXJzW2lpXS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJlbW92ZWQucHVzaChidWZmZXJzW2lpXS5zbGljZShzdGFydCwgc3RhcnQgKyBob3dNYW55KSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciBvcmlnID0gYnVmZmVyc1tpaV07XG4gICAgICAgICAgICAvL3ZhciBidWYgPSBuZXcgQnVmZmVyKG9yaWcubGVuZ3RoIC0gaG93TWFueSk7XG4gICAgICAgICAgICB2YXIgYnVmMCA9IG5ldyBCdWZmZXIoc3RhcnQpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGFydDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgYnVmMFtpXSA9IG9yaWdbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciBidWYxID0gbmV3IEJ1ZmZlcihvcmlnLmxlbmd0aCAtIHN0YXJ0IC0gaG93TWFueSk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gc3RhcnQgKyBob3dNYW55OyBpIDwgb3JpZy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGJ1ZjFbIGkgLSBob3dNYW55IC0gc3RhcnQgXSA9IG9yaWdbaV1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKHJlcHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHZhciByZXBzXyA9IHJlcHMuc2xpY2UoKTtcbiAgICAgICAgICAgICAgICByZXBzXy51bnNoaWZ0KGJ1ZjApO1xuICAgICAgICAgICAgICAgIHJlcHNfLnB1c2goYnVmMSk7XG4gICAgICAgICAgICAgICAgYnVmZmVycy5zcGxpY2UuYXBwbHkoYnVmZmVycywgWyBpaSwgMSBdLmNvbmNhdChyZXBzXykpO1xuICAgICAgICAgICAgICAgIGlpICs9IHJlcHNfLmxlbmd0aDtcbiAgICAgICAgICAgICAgICByZXBzID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBidWZmZXJzLnNwbGljZShpaSwgMSwgYnVmMCwgYnVmMSk7XG4gICAgICAgICAgICAgICAgLy9idWZmZXJzW2lpXSA9IGJ1ZjtcbiAgICAgICAgICAgICAgICBpaSArPSAyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVtb3ZlZC5wdXNoKGJ1ZmZlcnNbaWldLnNsaWNlKHN0YXJ0KSk7XG4gICAgICAgICAgICBidWZmZXJzW2lpXSA9IGJ1ZmZlcnNbaWldLnNsaWNlKDAsIHN0YXJ0KTtcbiAgICAgICAgICAgIGlpICsrO1xuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIGlmIChyZXBzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgYnVmZmVycy5zcGxpY2UuYXBwbHkoYnVmZmVycywgWyBpaSwgMCBdLmNvbmNhdChyZXBzKSk7XG4gICAgICAgIGlpICs9IHJlcHMubGVuZ3RoO1xuICAgIH1cbiAgICBcbiAgICB3aGlsZSAocmVtb3ZlZC5sZW5ndGggPCBob3dNYW55KSB7XG4gICAgICAgIHZhciBidWYgPSBidWZmZXJzW2lpXTtcbiAgICAgICAgdmFyIGxlbiA9IGJ1Zi5sZW5ndGg7XG4gICAgICAgIHZhciB0YWtlID0gTWF0aC5taW4obGVuLCBob3dNYW55IC0gcmVtb3ZlZC5sZW5ndGgpO1xuICAgICAgICBcbiAgICAgICAgaWYgKHRha2UgPT09IGxlbikge1xuICAgICAgICAgICAgcmVtb3ZlZC5wdXNoKGJ1Zik7XG4gICAgICAgICAgICBidWZmZXJzLnNwbGljZShpaSwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZW1vdmVkLnB1c2goYnVmLnNsaWNlKDAsIHRha2UpKTtcbiAgICAgICAgICAgIGJ1ZmZlcnNbaWldID0gYnVmZmVyc1tpaV0uc2xpY2UodGFrZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgdGhpcy5sZW5ndGggLT0gcmVtb3ZlZC5sZW5ndGg7XG4gICAgXG4gICAgcmV0dXJuIHJlbW92ZWQ7XG59O1xuIFxuQnVmZmVycy5wcm90b3R5cGUuc2xpY2UgPSBmdW5jdGlvbiAoaSwgaikge1xuICAgIHZhciBidWZmZXJzID0gdGhpcy5idWZmZXJzO1xuICAgIGlmIChqID09PSB1bmRlZmluZWQpIGogPSB0aGlzLmxlbmd0aDtcbiAgICBpZiAoaSA9PT0gdW5kZWZpbmVkKSBpID0gMDtcbiAgICBcbiAgICBpZiAoaiA+IHRoaXMubGVuZ3RoKSBqID0gdGhpcy5sZW5ndGg7XG4gICAgXG4gICAgdmFyIHN0YXJ0Qnl0ZXMgPSAwO1xuICAgIGZvciAoXG4gICAgICAgIHZhciBzaSA9IDA7XG4gICAgICAgIHNpIDwgYnVmZmVycy5sZW5ndGggJiYgc3RhcnRCeXRlcyArIGJ1ZmZlcnNbc2ldLmxlbmd0aCA8PSBpO1xuICAgICAgICBzaSArK1xuICAgICkgeyBzdGFydEJ5dGVzICs9IGJ1ZmZlcnNbc2ldLmxlbmd0aCB9XG4gICAgXG4gICAgdmFyIHRhcmdldCA9IG5ldyBCdWZmZXIoaiAtIGkpO1xuICAgIFxuICAgIHZhciB0aSA9IDA7XG4gICAgZm9yICh2YXIgaWkgPSBzaTsgdGkgPCBqIC0gaSAmJiBpaSA8IGJ1ZmZlcnMubGVuZ3RoOyBpaSsrKSB7XG4gICAgICAgIHZhciBsZW4gPSBidWZmZXJzW2lpXS5sZW5ndGg7XG4gICAgICAgIFxuICAgICAgICB2YXIgc3RhcnQgPSB0aSA9PT0gMCA/IGkgLSBzdGFydEJ5dGVzIDogMDtcbiAgICAgICAgdmFyIGVuZCA9IHRpICsgbGVuID49IGogLSBpXG4gICAgICAgICAgICA/IE1hdGgubWluKHN0YXJ0ICsgKGogLSBpKSAtIHRpLCBsZW4pXG4gICAgICAgICAgICA6IGxlblxuICAgICAgICA7XG4gICAgICAgIFxuICAgICAgICBidWZmZXJzW2lpXS5jb3B5KHRhcmdldCwgdGksIHN0YXJ0LCBlbmQpO1xuICAgICAgICB0aSArPSBlbmQgLSBzdGFydDtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIHRhcmdldDtcbn07XG5cbkJ1ZmZlcnMucHJvdG90eXBlLnBvcyA9IGZ1bmN0aW9uIChpKSB7XG4gICAgaWYgKGkgPCAwIHx8IGkgPj0gdGhpcy5sZW5ndGgpIHRocm93IG5ldyBFcnJvcignb29iJyk7XG4gICAgdmFyIGwgPSBpLCBiaSA9IDAsIGJ1ID0gbnVsbDtcbiAgICBmb3IgKDs7KSB7XG4gICAgICAgIGJ1ID0gdGhpcy5idWZmZXJzW2JpXTtcbiAgICAgICAgaWYgKGwgPCBidS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB7YnVmOiBiaSwgb2Zmc2V0OiBsfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGwgLT0gYnUubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIGJpKys7XG4gICAgfVxufTtcblxuQnVmZmVycy5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gZ2V0IChpKSB7XG4gICAgdmFyIHBvcyA9IHRoaXMucG9zKGkpO1xuXG4gICAgcmV0dXJuIHRoaXMuYnVmZmVyc1twb3MuYnVmXS5nZXQocG9zLm9mZnNldCk7XG59O1xuXG5CdWZmZXJzLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiBzZXQgKGksIGIpIHtcbiAgICB2YXIgcG9zID0gdGhpcy5wb3MoaSk7XG5cbiAgICByZXR1cm4gdGhpcy5idWZmZXJzW3Bvcy5idWZdLnNldChwb3Mub2Zmc2V0LCBiKTtcbn07XG5cbkJ1ZmZlcnMucHJvdG90eXBlLmluZGV4T2YgPSBmdW5jdGlvbiAobmVlZGxlLCBvZmZzZXQpIHtcbiAgICBpZiAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG5lZWRsZSkge1xuICAgICAgICBuZWVkbGUgPSBuZXcgQnVmZmVyKG5lZWRsZSk7XG4gICAgfSBlbHNlIGlmIChuZWVkbGUgaW5zdGFuY2VvZiBCdWZmZXIpIHtcbiAgICAgICAgLy8gYWxyZWFkeSBhIGJ1ZmZlclxuICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB0eXBlIGZvciBhIHNlYXJjaCBzdHJpbmcnKTtcbiAgICB9XG5cbiAgICBpZiAoIW5lZWRsZS5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG4gICAgdmFyIGkgPSAwLCBqID0gMCwgbWF0Y2ggPSAwLCBtc3RhcnQsIHBvcyA9IDA7XG5cbiAgICAvLyBzdGFydCBzZWFyY2ggZnJvbSBhIHBhcnRpY3VsYXIgcG9pbnQgaW4gdGhlIHZpcnR1YWwgYnVmZmVyXG4gICAgaWYgKG9mZnNldCkge1xuICAgICAgICB2YXIgcCA9IHRoaXMucG9zKG9mZnNldCk7XG4gICAgICAgIGkgPSBwLmJ1ZjtcbiAgICAgICAgaiA9IHAub2Zmc2V0O1xuICAgICAgICBwb3MgPSBvZmZzZXQ7XG4gICAgfVxuXG4gICAgLy8gZm9yIGVhY2ggY2hhcmFjdGVyIGluIHZpcnR1YWwgYnVmZmVyXG4gICAgZm9yICg7Oykge1xuICAgICAgICB3aGlsZSAoaiA+PSB0aGlzLmJ1ZmZlcnNbaV0ubGVuZ3RoKSB7XG4gICAgICAgICAgICBqID0gMDtcbiAgICAgICAgICAgIGkrKztcblxuICAgICAgICAgICAgaWYgKGkgPj0gdGhpcy5idWZmZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIC8vIHNlYXJjaCBzdHJpbmcgbm90IGZvdW5kXG4gICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGNoYXIgPSB0aGlzLmJ1ZmZlcnNbaV1bal07XG5cbiAgICAgICAgaWYgKGNoYXIgPT0gbmVlZGxlW21hdGNoXSkge1xuICAgICAgICAgICAgLy8ga2VlcCB0cmFjayB3aGVyZSBtYXRjaCBzdGFydGVkXG4gICAgICAgICAgICBpZiAobWF0Y2ggPT0gMCkge1xuICAgICAgICAgICAgICAgIG1zdGFydCA9IHtcbiAgICAgICAgICAgICAgICAgICAgaTogaSxcbiAgICAgICAgICAgICAgICAgICAgajogaixcbiAgICAgICAgICAgICAgICAgICAgcG9zOiBwb3NcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbWF0Y2grKztcbiAgICAgICAgICAgIGlmIChtYXRjaCA9PSBuZWVkbGUubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgLy8gZnVsbCBtYXRjaFxuICAgICAgICAgICAgICAgIHJldHVybiBtc3RhcnQucG9zO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKG1hdGNoICE9IDApIHtcbiAgICAgICAgICAgIC8vIGEgcGFydGlhbCBtYXRjaCBlbmRlZCwgZ28gYmFjayB0byBtYXRjaCBzdGFydGluZyBwb3NpdGlvblxuICAgICAgICAgICAgLy8gdGhpcyB3aWxsIGNvbnRpbnVlIHRoZSBzZWFyY2ggYXQgdGhlIG5leHQgY2hhcmFjdGVyXG4gICAgICAgICAgICBpID0gbXN0YXJ0Lmk7XG4gICAgICAgICAgICBqID0gbXN0YXJ0Lmo7XG4gICAgICAgICAgICBwb3MgPSBtc3RhcnQucG9zO1xuICAgICAgICAgICAgbWF0Y2ggPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgaisrO1xuICAgICAgICBwb3MrKztcbiAgICB9XG59O1xuXG5CdWZmZXJzLnByb3RvdHlwZS50b0J1ZmZlciA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnNsaWNlKCk7XG59XG5cbkJ1ZmZlcnMucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oZW5jb2RpbmcsIHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gdGhpcy5zbGljZShzdGFydCwgZW5kKS50b1N0cmluZyhlbmNvZGluZyk7XG59XG4iLAogICAgIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHN0b3JlKSB7XG4gICAgZnVuY3Rpb24gZ2V0c2V0IChuYW1lLCB2YWx1ZSkge1xuICAgICAgICB2YXIgbm9kZSA9IHZhcnMuc3RvcmU7XG4gICAgICAgIHZhciBrZXlzID0gbmFtZS5zcGxpdCgnLicpO1xuICAgICAgICBrZXlzLnNsaWNlKDAsLTEpLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgICAgICAgICAgIGlmIChub2RlW2tdID09PSB1bmRlZmluZWQpIG5vZGVba10gPSB7fTtcbiAgICAgICAgICAgIG5vZGUgPSBub2RlW2tdXG4gICAgICAgIH0pO1xuICAgICAgICB2YXIga2V5ID0ga2V5c1trZXlzLmxlbmd0aCAtIDFdO1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gbm9kZVtrZXldO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5vZGVba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIHZhciB2YXJzID0ge1xuICAgICAgICBnZXQgOiBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIGdldHNldChuYW1lKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0IDogZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0c2V0KG5hbWUsIHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgc3RvcmUgOiBzdG9yZSB8fCB7fSxcbiAgICB9O1xuICAgIHJldHVybiB2YXJzO1xufTtcbiIsCiAgICAidmFyIENoYWluc2F3ID0gcmVxdWlyZSgnY2hhaW5zYXcnKTtcbnZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXI7XG52YXIgQnVmZmVycyA9IHJlcXVpcmUoJ2J1ZmZlcnMnKTtcbnZhciBWYXJzID0gcmVxdWlyZSgnLi9saWIvdmFycy5qcycpO1xudmFyIFN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpLlN0cmVhbTtcblxuZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJ1Zk9yRW0sIGV2ZW50TmFtZSkge1xuICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoYnVmT3JFbSkpIHtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMucGFyc2UoYnVmT3JFbSk7XG4gICAgfVxuICAgIFxuICAgIHZhciBzID0gZXhwb3J0cy5zdHJlYW0oKTtcbiAgICBpZiAoYnVmT3JFbSAmJiBidWZPckVtLnBpcGUpIHtcbiAgICAgICAgYnVmT3JFbS5waXBlKHMpO1xuICAgIH1cbiAgICBlbHNlIGlmIChidWZPckVtKSB7XG4gICAgICAgIGJ1Zk9yRW0ub24oZXZlbnROYW1lIHx8ICdkYXRhJywgZnVuY3Rpb24gKGJ1Zikge1xuICAgICAgICAgICAgcy53cml0ZShidWYpO1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIGJ1Zk9yRW0ub24oJ2VuZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHMuZW5kKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcztcbn07XG5cbmV4cG9ydHMuc3RyZWFtID0gZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgaWYgKGlucHV0KSByZXR1cm4gZXhwb3J0cy5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgIFxuICAgIHZhciBwZW5kaW5nID0gbnVsbDtcbiAgICBmdW5jdGlvbiBnZXRCeXRlcyAoYnl0ZXMsIGNiLCBza2lwKSB7XG4gICAgICAgIHBlbmRpbmcgPSB7XG4gICAgICAgICAgICBieXRlcyA6IGJ5dGVzLFxuICAgICAgICAgICAgc2tpcCA6IHNraXAsXG4gICAgICAgICAgICBjYiA6IGZ1bmN0aW9uIChidWYpIHtcbiAgICAgICAgICAgICAgICBwZW5kaW5nID0gbnVsbDtcbiAgICAgICAgICAgICAgICBjYihidWYpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgZGlzcGF0Y2goKTtcbiAgICB9XG4gICAgXG4gICAgdmFyIG9mZnNldCA9IG51bGw7XG4gICAgZnVuY3Rpb24gZGlzcGF0Y2ggKCkge1xuICAgICAgICBpZiAoIXBlbmRpbmcpIHtcbiAgICAgICAgICAgIGlmIChjYXVnaHRFbmQpIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgcGVuZGluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcGVuZGluZygpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIGJ5dGVzID0gb2Zmc2V0ICsgcGVuZGluZy5ieXRlcztcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKGJ1ZmZlcnMubGVuZ3RoID49IGJ5dGVzKSB7XG4gICAgICAgICAgICAgICAgdmFyIGJ1ZjtcbiAgICAgICAgICAgICAgICBpZiAob2Zmc2V0ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgYnVmID0gYnVmZmVycy5zcGxpY2UoMCwgYnl0ZXMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXBlbmRpbmcuc2tpcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnVmID0gYnVmLnNsaWNlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcGVuZGluZy5za2lwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBidWYgPSBidWZmZXJzLnNsaWNlKG9mZnNldCwgYnl0ZXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IGJ5dGVzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBpZiAocGVuZGluZy5za2lwKSB7XG4gICAgICAgICAgICAgICAgICAgIHBlbmRpbmcuY2IoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBlbmRpbmcuY2IoYnVmKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgZnVuY3Rpb24gYnVpbGRlciAoc2F3KSB7XG4gICAgICAgIGZ1bmN0aW9uIG5leHQgKCkgeyBpZiAoIWRvbmUpIHNhdy5uZXh0KCkgfVxuICAgICAgICBcbiAgICAgICAgdmFyIHNlbGYgPSB3b3JkcyhmdW5jdGlvbiAoYnl0ZXMsIGNiKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgICAgICAgICBnZXRCeXRlcyhieXRlcywgZnVuY3Rpb24gKGJ1Zikge1xuICAgICAgICAgICAgICAgICAgICB2YXJzLnNldChuYW1lLCBjYihidWYpKTtcbiAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICBzZWxmLnRhcCA9IGZ1bmN0aW9uIChjYikge1xuICAgICAgICAgICAgc2F3Lm5lc3QoY2IsIHZhcnMuc3RvcmUpO1xuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgc2VsZi5pbnRvID0gZnVuY3Rpb24gKGtleSwgY2IpIHtcbiAgICAgICAgICAgIGlmICghdmFycy5nZXQoa2V5KSkgdmFycy5zZXQoa2V5LCB7fSk7XG4gICAgICAgICAgICB2YXIgcGFyZW50ID0gdmFycztcbiAgICAgICAgICAgIHZhcnMgPSBWYXJzKHBhcmVudC5nZXQoa2V5KSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHNhdy5uZXN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBjYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIHRoaXMudGFwKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFycyA9IHBhcmVudDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIHZhcnMuc3RvcmUpO1xuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgc2VsZi5mbHVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhcnMuc3RvcmUgPSB7fTtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfTtcbiAgICAgICAgXG4gICAgICAgIHNlbGYubG9vcCA9IGZ1bmN0aW9uIChjYikge1xuICAgICAgICAgICAgdmFyIGVuZCA9IGZhbHNlO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBzYXcubmVzdChmYWxzZSwgZnVuY3Rpb24gbG9vcCAoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YXJzID0gdmFycy5zdG9yZTtcbiAgICAgICAgICAgICAgICBjYi5jYWxsKHRoaXMsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgIH0sIHZhcnMuc3RvcmUpO1xuICAgICAgICAgICAgICAgIHRoaXMudGFwKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVuZCkgc2F3Lm5leHQoKVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGxvb3AuY2FsbCh0aGlzKVxuICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgICAgICB9LCB2YXJzLnN0b3JlKTtcbiAgICAgICAgfTtcbiAgICAgICAgXG4gICAgICAgIHNlbGYuYnVmZmVyID0gZnVuY3Rpb24gKG5hbWUsIGJ5dGVzKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGJ5dGVzID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGJ5dGVzID0gdmFycy5nZXQoYnl0ZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBnZXRCeXRlcyhieXRlcywgZnVuY3Rpb24gKGJ1Zikge1xuICAgICAgICAgICAgICAgIHZhcnMuc2V0KG5hbWUsIGJ1Zik7XG4gICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIFxuICAgICAgICBzZWxmLnNraXAgPSBmdW5jdGlvbiAoYnl0ZXMpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgYnl0ZXMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgYnl0ZXMgPSB2YXJzLmdldChieXRlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGdldEJ5dGVzKGJ5dGVzLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIFxuICAgICAgICBzZWxmLnNjYW4gPSBmdW5jdGlvbiBmaW5kIChuYW1lLCBzZWFyY2gpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc2VhcmNoID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHNlYXJjaCA9IG5ldyBCdWZmZXIoc2VhcmNoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKCFCdWZmZXIuaXNCdWZmZXIoc2VhcmNoKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc2VhcmNoIG11c3QgYmUgYSBCdWZmZXIgb3IgYSBzdHJpbmcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHRha2VuID0gMDtcbiAgICAgICAgICAgIHBlbmRpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIHBvcyA9IGJ1ZmZlcnMuaW5kZXhPZihzZWFyY2gsIG9mZnNldCArIHRha2VuKTtcbiAgICAgICAgICAgICAgICB2YXIgaSA9IHBvcy1vZmZzZXQtdGFrZW47XG4gICAgICAgICAgICAgICAgaWYgKHBvcyAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcGVuZGluZyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvZmZzZXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFycy5zZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJzLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgdGFrZW4gKyBpKVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSB0YWtlbiArIGkgKyBzZWFyY2gubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFycy5zZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJzLnNsaWNlKDAsIHRha2VuICsgaSlcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJzLnNwbGljZSgwLCB0YWtlbiArIGkgKyBzZWFyY2gubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaSA9IE1hdGgubWF4KGJ1ZmZlcnMubGVuZ3RoIC0gc2VhcmNoLmxlbmd0aCAtIG9mZnNldCAtIHRha2VuLCAwKTtcblx0XHRcdFx0fVxuICAgICAgICAgICAgICAgIHRha2VuICs9IGk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZGlzcGF0Y2goKTtcbiAgICAgICAgfTtcbiAgICAgICAgXG4gICAgICAgIHNlbGYucGVlayA9IGZ1bmN0aW9uIChjYikge1xuICAgICAgICAgICAgb2Zmc2V0ID0gMDtcbiAgICAgICAgICAgIHNhdy5uZXN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBjYi5jYWxsKHRoaXMsIHZhcnMuc3RvcmUpO1xuICAgICAgICAgICAgICAgIHRoaXMudGFwKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBcbiAgICB2YXIgc3RyZWFtID0gQ2hhaW5zYXcubGlnaHQoYnVpbGRlcik7XG4gICAgc3RyZWFtLndyaXRhYmxlID0gdHJ1ZTtcbiAgICBcbiAgICB2YXIgYnVmZmVycyA9IEJ1ZmZlcnMoKTtcbiAgICBcbiAgICBzdHJlYW0ud3JpdGUgPSBmdW5jdGlvbiAoYnVmKSB7XG4gICAgICAgIGJ1ZmZlcnMucHVzaChidWYpO1xuICAgICAgICBkaXNwYXRjaCgpO1xuICAgIH07XG4gICAgXG4gICAgdmFyIHZhcnMgPSBWYXJzKCk7XG4gICAgXG4gICAgdmFyIGRvbmUgPSBmYWxzZSwgY2F1Z2h0RW5kID0gZmFsc2U7XG4gICAgc3RyZWFtLmVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY2F1Z2h0RW5kID0gdHJ1ZTtcbiAgICB9O1xuICAgIFxuICAgIHN0cmVhbS5waXBlID0gU3RyZWFtLnByb3RvdHlwZS5waXBlO1xuICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgc3RyZWFtW25hbWVdID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZVtuYW1lXTtcbiAgICB9KTtcbiAgICBcbiAgICByZXR1cm4gc3RyZWFtO1xufTtcblxuZXhwb3J0cy5wYXJzZSA9IGZ1bmN0aW9uIHBhcnNlIChidWZmZXIpIHtcbiAgICB2YXIgc2VsZiA9IHdvcmRzKGZ1bmN0aW9uIChieXRlcywgY2IpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgICAgICBpZiAob2Zmc2V0ICsgYnl0ZXMgPD0gYnVmZmVyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHZhciBidWYgPSBidWZmZXIuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBieXRlcyk7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ICs9IGJ5dGVzO1xuICAgICAgICAgICAgICAgIHZhcnMuc2V0KG5hbWUsIGNiKGJ1ZikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFycy5zZXQobmFtZSwgbnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc2VsZjtcbiAgICAgICAgfTtcbiAgICB9KTtcbiAgICBcbiAgICB2YXIgb2Zmc2V0ID0gMDtcbiAgICB2YXIgdmFycyA9IFZhcnMoKTtcbiAgICBzZWxmLnZhcnMgPSB2YXJzLnN0b3JlO1xuICAgIFxuICAgIHNlbGYudGFwID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgICAgIGNiLmNhbGwoc2VsZiwgdmFycy5zdG9yZSk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgXG4gICAgc2VsZi5pbnRvID0gZnVuY3Rpb24gKGtleSwgY2IpIHtcbiAgICAgICAgaWYgKCF2YXJzLmdldChrZXkpKSB7XG4gICAgICAgICAgICB2YXJzLnNldChrZXksIHt9KTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcGFyZW50ID0gdmFycztcbiAgICAgICAgdmFycyA9IFZhcnMocGFyZW50LmdldChrZXkpKTtcbiAgICAgICAgY2IuY2FsbChzZWxmLCB2YXJzLnN0b3JlKTtcbiAgICAgICAgdmFycyA9IHBhcmVudDtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBcbiAgICBzZWxmLmxvb3AgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICAgICAgdmFyIGVuZCA9IGZhbHNlO1xuICAgICAgICB2YXIgZW5kZXIgPSBmdW5jdGlvbiAoKSB7IGVuZCA9IHRydWUgfTtcbiAgICAgICAgd2hpbGUgKGVuZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGNiLmNhbGwoc2VsZiwgZW5kZXIsIHZhcnMuc3RvcmUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgXG4gICAgc2VsZi5idWZmZXIgPSBmdW5jdGlvbiAobmFtZSwgc2l6ZSkge1xuICAgICAgICBpZiAodHlwZW9mIHNpemUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBzaXplID0gdmFycy5nZXQoc2l6ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGJ1ZiA9IGJ1ZmZlci5zbGljZShvZmZzZXQsIE1hdGgubWluKGJ1ZmZlci5sZW5ndGgsIG9mZnNldCArIHNpemUpKTtcbiAgICAgICAgb2Zmc2V0ICs9IHNpemU7XG4gICAgICAgIHZhcnMuc2V0KG5hbWUsIGJ1Zik7XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIFxuICAgIHNlbGYuc2tpcCA9IGZ1bmN0aW9uIChieXRlcykge1xuICAgICAgICBpZiAodHlwZW9mIGJ5dGVzID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgYnl0ZXMgPSB2YXJzLmdldChieXRlcyk7XG4gICAgICAgIH1cbiAgICAgICAgb2Zmc2V0ICs9IGJ5dGVzO1xuICAgICAgICBcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBcbiAgICBzZWxmLnNjYW4gPSBmdW5jdGlvbiAobmFtZSwgc2VhcmNoKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2VhcmNoID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgc2VhcmNoID0gbmV3IEJ1ZmZlcihzZWFyY2gpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFCdWZmZXIuaXNCdWZmZXIoc2VhcmNoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzZWFyY2ggbXVzdCBiZSBhIEJ1ZmZlciBvciBhIHN0cmluZycpO1xuICAgICAgICB9XG4gICAgICAgIHZhcnMuc2V0KG5hbWUsIG51bGwpO1xuICAgICAgICBcbiAgICAgICAgLy8gc2ltcGxlIGJ1dCBzbG93IHN0cmluZyBzZWFyY2hcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgKyBvZmZzZXQgPD0gYnVmZmVyLmxlbmd0aCAtIHNlYXJjaC5sZW5ndGggKyAxOyBpKyspIHtcbiAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgICAgdmFyIGogPSAwO1xuICAgICAgICAgICAgICAgIGogPCBzZWFyY2gubGVuZ3RoICYmIGJ1ZmZlcltvZmZzZXQraStqXSA9PT0gc2VhcmNoW2pdO1xuICAgICAgICAgICAgICAgIGorK1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChqID09PSBzZWFyY2gubGVuZ3RoKSBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgdmFycy5zZXQobmFtZSwgYnVmZmVyLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgaSkpO1xuICAgICAgICBvZmZzZXQgKz0gaSArIHNlYXJjaC5sZW5ndGg7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgXG4gICAgc2VsZi5wZWVrID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgICAgIHZhciB3YXMgPSBvZmZzZXQ7XG4gICAgICAgIGNiLmNhbGwoc2VsZiwgdmFycy5zdG9yZSk7XG4gICAgICAgIG9mZnNldCA9IHdhcztcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBcbiAgICBzZWxmLmZsdXNoID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXJzLnN0b3JlID0ge307XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgXG4gICAgc2VsZi5lb2YgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBvZmZzZXQgPj0gYnVmZmVyLmxlbmd0aDtcbiAgICB9O1xuICAgIFxuICAgIHJldHVybiBzZWxmO1xufTtcblxuLy8gY29udmVydCBieXRlIHN0cmluZ3MgdG8gdW5zaWduZWQgbGl0dGxlIGVuZGlhbiBudW1iZXJzXG5mdW5jdGlvbiBkZWNvZGVMRXUgKGJ5dGVzKSB7XG4gICAgdmFyIGFjYyA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBhY2MgKz0gTWF0aC5wb3coMjU2LGkpICogYnl0ZXNbaV07XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG59XG5cbi8vIGNvbnZlcnQgYnl0ZSBzdHJpbmdzIHRvIHVuc2lnbmVkIGJpZyBlbmRpYW4gbnVtYmVyc1xuZnVuY3Rpb24gZGVjb2RlQkV1IChieXRlcykge1xuICAgIHZhciBhY2MgPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYWNjICs9IE1hdGgucG93KDI1NiwgYnl0ZXMubGVuZ3RoIC0gaSAtIDEpICogYnl0ZXNbaV07XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG59XG5cbi8vIGNvbnZlcnQgYnl0ZSBzdHJpbmdzIHRvIHNpZ25lZCBiaWcgZW5kaWFuIG51bWJlcnNcbmZ1bmN0aW9uIGRlY29kZUJFcyAoYnl0ZXMpIHtcbiAgICB2YXIgdmFsID0gZGVjb2RlQkV1KGJ5dGVzKTtcbiAgICBpZiAoKGJ5dGVzWzBdICYgMHg4MCkgPT0gMHg4MCkge1xuICAgICAgICB2YWwgLT0gTWF0aC5wb3coMjU2LCBieXRlcy5sZW5ndGgpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsO1xufVxuXG4vLyBjb252ZXJ0IGJ5dGUgc3RyaW5ncyB0byBzaWduZWQgbGl0dGxlIGVuZGlhbiBudW1iZXJzXG5mdW5jdGlvbiBkZWNvZGVMRXMgKGJ5dGVzKSB7XG4gICAgdmFyIHZhbCA9IGRlY29kZUxFdShieXRlcyk7XG4gICAgaWYgKChieXRlc1tieXRlcy5sZW5ndGggLSAxXSAmIDB4ODApID09IDB4ODApIHtcbiAgICAgICAgdmFsIC09IE1hdGgucG93KDI1NiwgYnl0ZXMubGVuZ3RoKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbDtcbn1cblxuZnVuY3Rpb24gd29yZHMgKGRlY29kZSkge1xuICAgIHZhciBzZWxmID0ge307XG4gICAgXG4gICAgWyAxLCAyLCA0LCA4IF0uZm9yRWFjaChmdW5jdGlvbiAoYnl0ZXMpIHtcbiAgICAgICAgdmFyIGJpdHMgPSBieXRlcyAqIDg7XG4gICAgICAgIFxuICAgICAgICBzZWxmWyd3b3JkJyArIGJpdHMgKyAnbGUnXVxuICAgICAgICA9IHNlbGZbJ3dvcmQnICsgYml0cyArICdsdSddXG4gICAgICAgID0gZGVjb2RlKGJ5dGVzLCBkZWNvZGVMRXUpO1xuICAgICAgICBcbiAgICAgICAgc2VsZlsnd29yZCcgKyBiaXRzICsgJ2xzJ11cbiAgICAgICAgPSBkZWNvZGUoYnl0ZXMsIGRlY29kZUxFcyk7XG4gICAgICAgIFxuICAgICAgICBzZWxmWyd3b3JkJyArIGJpdHMgKyAnYmUnXVxuICAgICAgICA9IHNlbGZbJ3dvcmQnICsgYml0cyArICdidSddXG4gICAgICAgID0gZGVjb2RlKGJ5dGVzLCBkZWNvZGVCRXUpO1xuICAgICAgICBcbiAgICAgICAgc2VsZlsnd29yZCcgKyBiaXRzICsgJ2JzJ11cbiAgICAgICAgPSBkZWNvZGUoYnl0ZXMsIGRlY29kZUJFcyk7XG4gICAgfSk7XG4gICAgXG4gICAgLy8gd29yZDhiZShuKSA9PSB3b3JkOGxlKG4pIGZvciBhbGwgblxuICAgIHNlbGYud29yZDggPSBzZWxmLndvcmQ4dSA9IHNlbGYud29yZDhiZTtcbiAgICBzZWxmLndvcmQ4cyA9IHNlbGYud29yZDhicztcbiAgICBcbiAgICByZXR1cm4gc2VsZjtcbn1cbiIsCiAgICAidmFyIFRyYW5zZm9ybSA9IHJlcXVpcmUoJ3N0cmVhbScpLlRyYW5zZm9ybTtcbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuXG5mdW5jdGlvbiBNYXRjaGVyU3RyZWFtKHBhdHRlcm5EZXNjLCBtYXRjaEZuKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIE1hdGNoZXJTdHJlYW0pKSB7XG4gICAgICAgIHJldHVybiBuZXcgTWF0Y2hlclN0cmVhbSgpO1xuICAgIH1cblxuICAgIFRyYW5zZm9ybS5jYWxsKHRoaXMpO1xuXG4gICAgdmFyIHAgPSB0eXBlb2YgcGF0dGVybkRlc2MgPT09ICdvYmplY3QnID8gcGF0dGVybkRlc2MucGF0dGVybiA6IHBhdHRlcm5EZXNjO1xuXG4gICAgdGhpcy5wYXR0ZXJuID0gQnVmZmVyLmlzQnVmZmVyKHApID8gcCA6IEJ1ZmZlci5mcm9tKHApO1xuICAgIHRoaXMucmVxdWlyZWRMZW5ndGggPSB0aGlzLnBhdHRlcm4ubGVuZ3RoO1xuICAgIGlmIChwYXR0ZXJuRGVzYy5yZXF1aXJlZEV4dHJhU2l6ZSkgdGhpcy5yZXF1aXJlZExlbmd0aCArPSBwYXR0ZXJuRGVzYy5yZXF1aXJlZEV4dHJhU2l6ZTtcblxuICAgIHRoaXMuZGF0YSA9IG5ldyBCdWZmZXIoJycpO1xuICAgIHRoaXMuYnl0ZXNTb0ZhciA9IDA7XG5cbiAgICB0aGlzLm1hdGNoRm4gPSBtYXRjaEZuO1xufVxuXG51dGlsLmluaGVyaXRzKE1hdGNoZXJTdHJlYW0sIFRyYW5zZm9ybSk7XG5cbk1hdGNoZXJTdHJlYW0ucHJvdG90eXBlLmNoZWNrRGF0YUNodW5rID0gZnVuY3Rpb24gKGlnbm9yZU1hdGNoWmVybykge1xuICAgIHZhciBlbm91Z2hEYXRhID0gdGhpcy5kYXRhLmxlbmd0aCA+PSB0aGlzLnJlcXVpcmVkTGVuZ3RoOyAvLyBzdHJpY3QgbW9yZSB0aGFuID9cbiAgICBpZiAoIWVub3VnaERhdGEpIHsgcmV0dXJuOyB9XG5cbiAgICB2YXIgbWF0Y2hJbmRleCA9IHRoaXMuZGF0YS5pbmRleE9mKHRoaXMucGF0dGVybiwgaWdub3JlTWF0Y2haZXJvID8gMSA6IDApO1xuICAgIGlmIChtYXRjaEluZGV4ID49IDAgJiYgbWF0Y2hJbmRleCArIHRoaXMucmVxdWlyZWRMZW5ndGggPiB0aGlzLmRhdGEubGVuZ3RoKSB7XG4gICAgICAgIGlmIChtYXRjaEluZGV4ID4gMCkge1xuICAgICAgICAgICAgdmFyIHBhY2tldCA9IHRoaXMuZGF0YS5zbGljZSgwLCBtYXRjaEluZGV4KTtcbiAgICAgICAgICAgIHRoaXMucHVzaChwYWNrZXQpO1xuICAgICAgICAgICAgdGhpcy5ieXRlc1NvRmFyICs9IG1hdGNoSW5kZXg7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGEuc2xpY2UobWF0Y2hJbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChtYXRjaEluZGV4ID09PSAtMSkge1xuICAgICAgICB2YXIgcGFja2V0TGVuID0gdGhpcy5kYXRhLmxlbmd0aCAtIHRoaXMucmVxdWlyZWRMZW5ndGggKyAxO1xuXG4gICAgICAgIHZhciBwYWNrZXQgPSB0aGlzLmRhdGEuc2xpY2UoMCwgcGFja2V0TGVuKTtcbiAgICAgICAgdGhpcy5wdXNoKHBhY2tldCk7XG4gICAgICAgIHRoaXMuYnl0ZXNTb0ZhciArPSBwYWNrZXRMZW47XG4gICAgICAgIHRoaXMuZGF0YSA9IHRoaXMuZGF0YS5zbGljZShwYWNrZXRMZW4pO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZm91bmQgbWF0Y2hcbiAgICBpZiAobWF0Y2hJbmRleCA+IDApIHtcbiAgICAgICAgdmFyIHBhY2tldCA9IHRoaXMuZGF0YS5zbGljZSgwLCBtYXRjaEluZGV4KTtcbiAgICAgICAgdGhpcy5kYXRhID0gdGhpcy5kYXRhLnNsaWNlKG1hdGNoSW5kZXgpO1xuICAgICAgICB0aGlzLnB1c2gocGFja2V0KTtcbiAgICAgICAgdGhpcy5ieXRlc1NvRmFyICs9IG1hdGNoSW5kZXg7XG4gICAgfVxuXG4gICAgdmFyIGZpbmlzaGVkID0gdGhpcy5tYXRjaEZuID8gdGhpcy5tYXRjaEZuKHRoaXMuZGF0YSwgdGhpcy5ieXRlc1NvRmFyKSA6IHRydWU7XG4gICAgaWYgKGZpbmlzaGVkKSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IG5ldyBCdWZmZXIoJycpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59XG5cbk1hdGNoZXJTdHJlYW0ucHJvdG90eXBlLl90cmFuc2Zvcm0gPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICAgIHRoaXMuZGF0YSA9IEJ1ZmZlci5jb25jYXQoW3RoaXMuZGF0YSwgY2h1bmtdKTtcblxuICAgIHZhciBmaXJzdEl0ZXJhdGlvbiA9IHRydWU7XG4gICAgd2hpbGUgKHRoaXMuY2hlY2tEYXRhQ2h1bmsoIWZpcnN0SXRlcmF0aW9uKSkge1xuICAgICAgICBmaXJzdEl0ZXJhdGlvbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIGNiKCk7XG59XG5cbk1hdGNoZXJTdHJlYW0ucHJvdG90eXBlLl9mbHVzaCA9IGZ1bmN0aW9uIChjYikge1xuICAgIGlmICh0aGlzLmRhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICB2YXIgZmlyc3RJdGVyYXRpb24gPSB0cnVlO1xuICAgICAgICB3aGlsZSAodGhpcy5jaGVja0RhdGFDaHVuayghZmlyc3RJdGVyYXRpb24pKSB7XG4gICAgICAgICAgICBmaXJzdEl0ZXJhdGlvbiA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMucHVzaCh0aGlzLmRhdGEpO1xuICAgICAgICB0aGlzLmRhdGEgPSBudWxsO1xuICAgIH1cblxuICAgIGNiKCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gTWF0Y2hlclN0cmVhbTsiLAogICAgIid1c2Ugc3RyaWN0JztcblxudmFyIHN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpO1xudmFyIGluaGVyaXRzID0gcmVxdWlyZSgndXRpbCcpLmluaGVyaXRzO1xuXG5mdW5jdGlvbiBFbnRyeSgpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRW50cnkpKSB7XG4gICAgICAgIHJldHVybiBuZXcgRW50cnkoKTtcbiAgICB9XG5cbiAgICBzdHJlYW0uUGFzc1Rocm91Z2guY2FsbCh0aGlzKTtcblxuICAgIHRoaXMucGF0aCA9IG51bGw7XG4gICAgdGhpcy50eXBlID0gbnVsbDtcbiAgICB0aGlzLmlzRGlyZWN0b3J5ID0gZmFsc2U7XG59XG5cbmluaGVyaXRzKEVudHJ5LCBzdHJlYW0uUGFzc1Rocm91Z2gpO1xuXG5FbnRyeS5wcm90b3R5cGUuYXV0b2RyYWluID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLnBpcGUobmV3IHN0cmVhbS5UcmFuc2Zvcm0oeyB0cmFuc2Zvcm06IGZ1bmN0aW9uIChkLCBlLCBjYikgeyBjYigpOyB9IH0pKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBFbnRyeTsiLAogICAgIid1c2Ugc3RyaWN0JztcblxudmFyIGJpbmFyeSA9IHJlcXVpcmUoJ2JpbmFyeScpO1xudmFyIHN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpO1xudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG52YXIgemxpYiA9IHJlcXVpcmUoJ3psaWInKTtcbnZhciBNYXRjaGVyU3RyZWFtID0gcmVxdWlyZSgnLi9tYXRjaGVyLXN0cmVhbScpO1xudmFyIEVudHJ5ID0gcmVxdWlyZSgnLi9lbnRyeScpO1xuXG5jb25zdCBzdGF0ZXMgPSB7XG4gICAgU1RSRUFNX1NUQVJUOiAgICAgICAgICAgICAgICAgICAgICAgICAwLFxuICAgIFNUQVJUOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSxcbiAgICBMT0NBTF9GSUxFX0hFQURFUjogICAgICAgICAgICAgICAgICAgIDIsXG4gICAgTE9DQUxfRklMRV9IRUFERVJfU1VGRklYOiAgICAgICAgICAgICAzLFxuICAgIEZJTEVfREFUQTogICAgICAgICAgICAgICAgICAgICAgICAgICAgNCxcbiAgICBGSUxFX0RBVEFfRU5EOiAgICAgICAgICAgICAgICAgICAgICAgIDUsXG4gICAgREFUQV9ERVNDUklQVE9SOiAgICAgICAgICAgICAgICAgICAgICA2LFxuICAgIENFTlRSQUxfRElSRUNUT1JZX0ZJTEVfSEVBREVSOiAgICAgICAgNyxcbiAgICBDRU5UUkFMX0RJUkVDVE9SWV9GSUxFX0hFQURFUl9TVUZGSVg6IDgsXG4gICAgQ0RJUjY0X0VORDogICAgICAgICAgICAgICAgICAgICAgICAgICA5LFxuICAgIENESVI2NF9FTkRfREFUQV9TRUNUT1I6ICAgICAgICAgICAgICAgMTAsXG4gICAgQ0RJUjY0X0xPQ0FUT1I6ICAgICAgICAgICAgICAgICAgICAgICAxMSxcbiAgICBDRU5UUkFMX0RJUkVDVE9SWV9FTkQ6ICAgICAgICAgICAgICAgIDEyLFxuICAgIENFTlRSQUxfRElSRUNUT1JZX0VORF9DT01NRU5UOiAgICAgICAgMTMsXG4gICAgVFJBSUxJTkdfSlVOSzogICAgICAgICAgICAgICAgICAgICAgICAxNCxcblxuICAgIEVSUk9SOiA5OVxufVxuXG5jb25zdCBGT1VSX0dJR1MgPSA0Mjk0OTY3Mjk2O1xuXG5jb25zdCBTSUdfTE9DQUxfRklMRV9IRUFERVIgID0gMHgwNDAzNGI1MDtcbmNvbnN0IFNJR19EQVRBX0RFU0NSSVBUT1IgICAgPSAweDA4MDc0YjUwO1xuY29uc3QgU0lHX0NESVJfUkVDT1JEICAgICAgICA9IDB4MDIwMTRiNTA7XG5jb25zdCBTSUdfQ0RJUjY0X1JFQ09SRF9FTkQgID0gMHgwNjA2NGI1MDtcbmNvbnN0IFNJR19DRElSNjRfTE9DQVRPUl9FTkQgPSAweDA3MDY0YjUwO1xuY29uc3QgU0lHX0NESVJfUkVDT1JEX0VORCAgICA9IDB4MDYwNTRiNTA7XG5cbmZ1bmN0aW9uIFVuemlwU3RyZWFtKG9wdGlvbnMpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgVW56aXBTdHJlYW0pKSB7XG4gICAgICAgIHJldHVybiBuZXcgVW56aXBTdHJlYW0ob3B0aW9ucyk7XG4gICAgfVxuXG4gICAgc3RyZWFtLlRyYW5zZm9ybS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICB0aGlzLmRhdGEgPSBuZXcgQnVmZmVyKCcnKTtcbiAgICB0aGlzLnN0YXRlID0gc3RhdGVzLlNUUkVBTV9TVEFSVDtcbiAgICB0aGlzLnNraXBwZWRCeXRlcyA9IDA7XG4gICAgdGhpcy5wYXJzZWRFbnRpdHkgPSBudWxsO1xuICAgIHRoaXMub3V0U3RyZWFtSW5mbyA9IHt9O1xufVxuXG51dGlsLmluaGVyaXRzKFVuemlwU3RyZWFtLCBzdHJlYW0uVHJhbnNmb3JtKTtcblxuVW56aXBTdHJlYW0ucHJvdG90eXBlLnByb2Nlc3NEYXRhQ2h1bmsgPSBmdW5jdGlvbiAoY2h1bmspIHtcbiAgICB2YXIgcmVxdWlyZWRMZW5ndGg7XG5cbiAgICBzd2l0Y2ggKHRoaXMuc3RhdGUpIHtcbiAgICAgICAgY2FzZSBzdGF0ZXMuU1RSRUFNX1NUQVJUOlxuICAgICAgICBjYXNlIHN0YXRlcy5TVEFSVDpcbiAgICAgICAgICAgIHJlcXVpcmVkTGVuZ3RoID0gNDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIHN0YXRlcy5MT0NBTF9GSUxFX0hFQURFUjpcbiAgICAgICAgICAgIHJlcXVpcmVkTGVuZ3RoID0gMjY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBzdGF0ZXMuTE9DQUxfRklMRV9IRUFERVJfU1VGRklYOlxuICAgICAgICAgICAgcmVxdWlyZWRMZW5ndGggPSB0aGlzLnBhcnNlZEVudGl0eS5maWxlTmFtZUxlbmd0aCArIHRoaXMucGFyc2VkRW50aXR5LmV4dHJhRmllbGRMZW5ndGg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBzdGF0ZXMuREFUQV9ERVNDUklQVE9SOlxuICAgICAgICAgICAgcmVxdWlyZWRMZW5ndGggPSAxMjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIHN0YXRlcy5DRU5UUkFMX0RJUkVDVE9SWV9GSUxFX0hFQURFUjpcbiAgICAgICAgICAgIHJlcXVpcmVkTGVuZ3RoID0gNDI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBzdGF0ZXMuQ0VOVFJBTF9ESVJFQ1RPUllfRklMRV9IRUFERVJfU1VGRklYOlxuICAgICAgICAgICAgcmVxdWlyZWRMZW5ndGggPSB0aGlzLnBhcnNlZEVudGl0eS5maWxlTmFtZUxlbmd0aCArIHRoaXMucGFyc2VkRW50aXR5LmV4dHJhRmllbGRMZW5ndGggKyB0aGlzLnBhcnNlZEVudGl0eS5maWxlQ29tbWVudExlbmd0aDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIHN0YXRlcy5DRElSNjRfRU5EOlxuICAgICAgICAgICAgcmVxdWlyZWRMZW5ndGggPSA1MjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIHN0YXRlcy5DRElSNjRfRU5EX0RBVEFfU0VDVE9SOlxuICAgICAgICAgICAgcmVxdWlyZWRMZW5ndGggPSB0aGlzLnBhcnNlZEVudGl0eS5jZW50cmFsRGlyZWN0b3J5UmVjb3JkU2l6ZSAtIDQ0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Ugc3RhdGVzLkNESVI2NF9MT0NBVE9SOlxuICAgICAgICAgICAgcmVxdWlyZWRMZW5ndGggPSAxNjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIHN0YXRlcy5DRU5UUkFMX0RJUkVDVE9SWV9FTkQ6XG4gICAgICAgICAgICByZXF1aXJlZExlbmd0aCA9IDE4O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Ugc3RhdGVzLkNFTlRSQUxfRElSRUNUT1JZX0VORF9DT01NRU5UOlxuICAgICAgICAgICAgcmVxdWlyZWRMZW5ndGggPSB0aGlzLnBhcnNlZEVudGl0eS5jb21tZW50TGVuZ3RoO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Ugc3RhdGVzLkZJTEVfREFUQTpcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICBjYXNlIHN0YXRlcy5GSUxFX0RBVEFfRU5EOlxuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIGNhc2Ugc3RhdGVzLlRSQUlMSU5HX0pVTks6XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmRlYnVnKSBjb25zb2xlLmxvZyhcImZvdW5kXCIsIGNodW5rLmxlbmd0aCwgXCJieXRlcyBvZiBUUkFJTElOR19KVU5LXCIpO1xuICAgICAgICAgICAgcmV0dXJuIGNodW5rLmxlbmd0aDtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBjaHVuay5sZW5ndGg7XG4gICAgfVxuXG4gICAgdmFyIGNodW5rTGVuZ3RoID0gY2h1bmsubGVuZ3RoO1xuICAgIGlmIChjaHVua0xlbmd0aCA8IHJlcXVpcmVkTGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIHN3aXRjaCAodGhpcy5zdGF0ZSkge1xuICAgICAgICBjYXNlIHN0YXRlcy5TVFJFQU1fU1RBUlQ6XG4gICAgICAgIGNhc2Ugc3RhdGVzLlNUQVJUOlxuICAgICAgICAgICAgdmFyIHNpZ25hdHVyZSA9IGNodW5rLnJlYWRVSW50MzJMRSgwKTtcbiAgICAgICAgICAgIHN3aXRjaCAoc2lnbmF0dXJlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBTSUdfTE9DQUxfRklMRV9IRUFERVI6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZXMuTE9DQUxfRklMRV9IRUFERVI7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgU0lHX0NESVJfUkVDT1JEOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGVzLkNFTlRSQUxfRElSRUNUT1JZX0ZJTEVfSEVBREVSO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFNJR19DRElSNjRfUkVDT1JEX0VORDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlcy5DRElSNjRfRU5EO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFNJR19DRElSNjRfTE9DQVRPUl9FTkQ6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZXMuQ0RJUjY0X0xPQ0FUT1I7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgU0lHX0NESVJfUkVDT1JEX0VORDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlcy5DRU5UUkFMX0RJUkVDVE9SWV9FTkQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHZhciBpc1N0cmVhbVN0YXJ0ID0gdGhpcy5zdGF0ZSA9PT0gc3RhdGVzLlNUUkVBTV9TVEFSVDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1N0cmVhbVN0YXJ0ICYmIChzaWduYXR1cmUgJiAweGZmZmYpICE9PSAweDRiNTAgJiYgdGhpcy5za2lwcGVkQnl0ZXMgPCAyNikge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UnbGwgYWxsb3cgYSBwYWRkaW5nIG9mIG1heCAyOCBieXRlc1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlbWFpbmluZyA9IHNpZ25hdHVyZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0b1NraXAgPSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCA0ICYmIHJlbWFpbmluZyAhPT0gMDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nID0gcmVtYWluaW5nID4+PiA4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgocmVtYWluaW5nICYgMHhmZikgPT09IDB4NTApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9Ta2lwID0gaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5za2lwcGVkQnl0ZXMgKz0gdG9Ta2lwO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5kZWJ1ZykgY29uc29sZS5sb2coJ1NraXBwZWQnLCB0aGlzLnNraXBwZWRCeXRlcywgJ2J5dGVzJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9Ta2lwO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZXMuRVJST1I7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlcnJNc2cgPSBpc1N0cmVhbVN0YXJ0ID8gXCJOb3QgYSB2YWxpZCB6aXAgZmlsZVwiIDogXCJJbnZhbGlkIHNpZ25hdHVyZSBpbiB6aXAgZmlsZVwiO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmRlYnVnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2lnID0gY2h1bmsucmVhZFVJbnQzMkxFKDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFzU3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsgYXNTdHJpbmcgPSBjaHVuay5zbGljZSgwLCA0KS50b1N0cmluZygpOyB9IGNhdGNoIChlKSB7fVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJVbmV4cGVjdGVkIHNpZ25hdHVyZSBpbiB6aXAgZmlsZTogMHhcIiArIHNpZy50b1N0cmluZygxNiksICdcIicgKyBhc1N0cmluZyArICdcIiwgc2tpcHBlZCcsIHRoaXMuc2tpcHBlZEJ5dGVzLCAnYnl0ZXMnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoXCJlcnJvclwiLCBuZXcgRXJyb3IoZXJyTXNnKSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjaHVuay5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNraXBwZWRCeXRlcyA9IDA7XG4gICAgICAgICAgICByZXR1cm4gcmVxdWlyZWRMZW5ndGg7XG5cbiAgICAgICAgY2FzZSBzdGF0ZXMuTE9DQUxfRklMRV9IRUFERVI6XG4gICAgICAgICAgICB0aGlzLnBhcnNlZEVudGl0eSA9IHRoaXMuX3JlYWRGaWxlKGNodW5rKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZXMuTE9DQUxfRklMRV9IRUFERVJfU1VGRklYO1xuXG4gICAgICAgICAgICByZXR1cm4gcmVxdWlyZWRMZW5ndGg7XG5cbiAgICAgICAgY2FzZSBzdGF0ZXMuTE9DQUxfRklMRV9IRUFERVJfU1VGRklYOlxuICAgICAgICAgICAgdmFyIGVudHJ5ID0gbmV3IEVudHJ5KCk7XG4gICAgICAgICAgICB2YXIgaXNVdGY4ID0gKHRoaXMucGFyc2VkRW50aXR5LmZsYWdzICYgMHg4MDApICE9PSAwO1xuICAgICAgICAgICAgZW50cnkucGF0aCA9IHRoaXMuX2RlY29kZVN0cmluZyhjaHVuay5zbGljZSgwLCB0aGlzLnBhcnNlZEVudGl0eS5maWxlTmFtZUxlbmd0aCksIGlzVXRmOCk7XG4gICAgICAgICAgICB2YXIgZXh0cmFEYXRhQnVmZmVyID0gY2h1bmsuc2xpY2UodGhpcy5wYXJzZWRFbnRpdHkuZmlsZU5hbWVMZW5ndGgsIHRoaXMucGFyc2VkRW50aXR5LmZpbGVOYW1lTGVuZ3RoICsgdGhpcy5wYXJzZWRFbnRpdHkuZXh0cmFGaWVsZExlbmd0aCk7XG4gICAgICAgICAgICB2YXIgZXh0cmEgPSB0aGlzLl9yZWFkRXh0cmFGaWVsZHMoZXh0cmFEYXRhQnVmZmVyKTtcbiAgICAgICAgICAgIGlmIChleHRyYSAmJiBleHRyYS5wYXJzZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXh0cmEucGFyc2VkLnBhdGggJiYgIWlzVXRmOCkge1xuICAgICAgICAgICAgICAgICAgICBlbnRyeS5wYXRoID0gZXh0cmEucGFyc2VkLnBhdGg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChOdW1iZXIuaXNGaW5pdGUoZXh0cmEucGFyc2VkLnVuY29tcHJlc3NlZFNpemUpICYmIHRoaXMucGFyc2VkRW50aXR5LnVuY29tcHJlc3NlZFNpemUgPT09IEZPVVJfR0lHUy0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFyc2VkRW50aXR5LnVuY29tcHJlc3NlZFNpemUgPSBleHRyYS5wYXJzZWQudW5jb21wcmVzc2VkU2l6ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKE51bWJlci5pc0Zpbml0ZShleHRyYS5wYXJzZWQuY29tcHJlc3NlZFNpemUpICYmIHRoaXMucGFyc2VkRW50aXR5LmNvbXByZXNzZWRTaXplID09PSBGT1VSX0dJR1MtMSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcnNlZEVudGl0eS5jb21wcmVzc2VkU2l6ZSA9IGV4dHJhLnBhcnNlZC5jb21wcmVzc2VkU2l6ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBhcnNlZEVudGl0eS5leHRyYSA9IGV4dHJhLnBhcnNlZCB8fCB7fTtcblxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5kZWJ1Zykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlYnVnT2JqID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5wYXJzZWRFbnRpdHksIHtcbiAgICAgICAgICAgICAgICAgICAgcGF0aDogZW50cnkucGF0aCxcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3M6ICcweCcgKyB0aGlzLnBhcnNlZEVudGl0eS5mbGFncy50b1N0cmluZygxNiksXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhRmllbGRzOiBleHRyYSAmJiBleHRyYS5kZWJ1Z1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZGVjb2RlZCBMT0NBTF9GSUxFX0hFQURFUjpcIiwgSlNPTi5zdHJpbmdpZnkoZGVidWdPYmosIG51bGwsIDIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3ByZXBhcmVPdXRTdHJlYW0odGhpcy5wYXJzZWRFbnRpdHksIGVudHJ5KTtcblxuICAgICAgICAgICAgdGhpcy5lbWl0KFwiZW50cnlcIiwgZW50cnkpO1xuXG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGVzLkZJTEVfREFUQTtcblxuICAgICAgICAgICAgcmV0dXJuIHJlcXVpcmVkTGVuZ3RoO1xuXG4gICAgICAgIGNhc2Ugc3RhdGVzLkNFTlRSQUxfRElSRUNUT1JZX0ZJTEVfSEVBREVSOlxuICAgICAgICAgICAgdGhpcy5wYXJzZWRFbnRpdHkgPSB0aGlzLl9yZWFkQ2VudHJhbERpcmVjdG9yeUVudHJ5KGNodW5rKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZXMuQ0VOVFJBTF9ESVJFQ1RPUllfRklMRV9IRUFERVJfU1VGRklYO1xuXG4gICAgICAgICAgICByZXR1cm4gcmVxdWlyZWRMZW5ndGg7XG5cbiAgICAgICAgY2FzZSBzdGF0ZXMuQ0VOVFJBTF9ESVJFQ1RPUllfRklMRV9IRUFERVJfU1VGRklYOlxuICAgICAgICAgICAgLy8gZ290IGZpbGUgbmFtZSBpbiBjaHVua1swLi5dXG4gICAgICAgICAgICB2YXIgaXNVdGY4ID0gKHRoaXMucGFyc2VkRW50aXR5LmZsYWdzICYgMHg4MDApICE9PSAwO1xuICAgICAgICAgICAgdmFyIHBhdGggPSB0aGlzLl9kZWNvZGVTdHJpbmcoY2h1bmsuc2xpY2UoMCwgdGhpcy5wYXJzZWRFbnRpdHkuZmlsZU5hbWVMZW5ndGgpLCBpc1V0ZjgpO1xuICAgICAgICAgICAgdmFyIGV4dHJhRGF0YUJ1ZmZlciA9IGNodW5rLnNsaWNlKHRoaXMucGFyc2VkRW50aXR5LmZpbGVOYW1lTGVuZ3RoLCB0aGlzLnBhcnNlZEVudGl0eS5maWxlTmFtZUxlbmd0aCArIHRoaXMucGFyc2VkRW50aXR5LmV4dHJhRmllbGRMZW5ndGgpO1xuICAgICAgICAgICAgdmFyIGV4dHJhID0gdGhpcy5fcmVhZEV4dHJhRmllbGRzKGV4dHJhRGF0YUJ1ZmZlcik7XG4gICAgICAgICAgICBpZiAoZXh0cmEgJiYgZXh0cmEucGFyc2VkICYmIGV4dHJhLnBhcnNlZC5wYXRoICYmICFpc1V0ZjgpIHtcbiAgICAgICAgICAgICAgICBwYXRoID0gZXh0cmEucGFyc2VkLnBhdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBhcnNlZEVudGl0eS5leHRyYSA9IGV4dHJhLnBhcnNlZDtcblxuICAgICAgICAgICAgdmFyIGlzVW5peCA9ICgodGhpcy5wYXJzZWRFbnRpdHkudmVyc2lvbk1hZGVCeSAmIDB4ZmYwMCkgPj4gOCkgPT09IDM7XG4gICAgICAgICAgICB2YXIgdW5peEF0dHJzLCBpc1N5bWxpbms7XG4gICAgICAgICAgICBpZiAoaXNVbml4KSB7XG4gICAgICAgICAgICAgICAgdW5peEF0dHJzID0gdGhpcy5wYXJzZWRFbnRpdHkuZXh0ZXJuYWxGaWxlQXR0cmlidXRlcyA+Pj4gMTY7XG4gICAgICAgICAgICAgICAgdmFyIGZpbGVUeXBlID0gdW5peEF0dHJzID4+PiAxMjtcbiAgICAgICAgICAgICAgICBpc1N5bWxpbmsgPSAoZmlsZVR5cGUgJiAwbzEyKSA9PT0gMG8xMjsgLy8gX19TX0lGTE5LXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmRlYnVnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVidWdPYmogPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLnBhcnNlZEVudGl0eSwge1xuICAgICAgICAgICAgICAgICAgICBwYXRoOiBwYXRoLFxuICAgICAgICAgICAgICAgICAgICBmbGFnczogJzB4JyArIHRoaXMucGFyc2VkRW50aXR5LmZsYWdzLnRvU3RyaW5nKDE2KSxcbiAgICAgICAgICAgICAgICAgICAgdW5peEF0dHJzOiB1bml4QXR0cnMgJiYgJzAnICsgdW5peEF0dHJzLnRvU3RyaW5nKDgpLFxuICAgICAgICAgICAgICAgICAgICBpc1N5bWxpbms6IGlzU3ltbGluayxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFGaWVsZHM6IGV4dHJhLmRlYnVnLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZGVjb2RlZCBDRU5UUkFMX0RJUkVDVE9SWV9GSUxFX0hFQURFUjpcIiwgSlNPTi5zdHJpbmdpZnkoZGVidWdPYmosIG51bGwsIDIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZXMuU1RBUlQ7XG5cbiAgICAgICAgICAgIHJldHVybiByZXF1aXJlZExlbmd0aDtcblxuICAgICAgICBjYXNlIHN0YXRlcy5DRElSNjRfRU5EOlxuICAgICAgICAgICAgdGhpcy5wYXJzZWRFbnRpdHkgPSB0aGlzLl9yZWFkRW5kT2ZDZW50cmFsRGlyZWN0b3J5NjQoY2h1bmspO1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5kZWJ1Zykge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZGVjb2RlZCBDRElSNjRfRU5EX1JFQ09SRDpcIiwgdGhpcy5wYXJzZWRFbnRpdHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlcy5DRElSNjRfRU5EX0RBVEFfU0VDVE9SO1xuXG4gICAgICAgICAgICByZXR1cm4gcmVxdWlyZWRMZW5ndGg7XG5cbiAgICAgICAgY2FzZSBzdGF0ZXMuQ0RJUjY0X0VORF9EQVRBX1NFQ1RPUjpcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZXMuU1RBUlQ7XG5cbiAgICAgICAgICAgIHJldHVybiByZXF1aXJlZExlbmd0aDtcblxuICAgICAgICBjYXNlIHN0YXRlcy5DRElSNjRfTE9DQVRPUjpcbiAgICAgICAgICAgIC8vIGlnbm9yZSwgbm90aGluZyBpbnRlcmVzdGluZ1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlcy5TVEFSVDtcblxuICAgICAgICAgICAgcmV0dXJuIHJlcXVpcmVkTGVuZ3RoO1xuXG4gICAgICAgIGNhc2Ugc3RhdGVzLkNFTlRSQUxfRElSRUNUT1JZX0VORDpcbiAgICAgICAgICAgIHRoaXMucGFyc2VkRW50aXR5ID0gdGhpcy5fcmVhZEVuZE9mQ2VudHJhbERpcmVjdG9yeShjaHVuayk7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmRlYnVnKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJkZWNvZGVkIENFTlRSQUxfRElSRUNUT1JZX0VORDpcIiwgdGhpcy5wYXJzZWRFbnRpdHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlcy5DRU5UUkFMX0RJUkVDVE9SWV9FTkRfQ09NTUVOVDtcblxuICAgICAgICAgICAgcmV0dXJuIHJlcXVpcmVkTGVuZ3RoO1xuXG4gICAgICAgIGNhc2Ugc3RhdGVzLkNFTlRSQUxfRElSRUNUT1JZX0VORF9DT01NRU5UOlxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5kZWJ1Zykge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZGVjb2RlZCBDRU5UUkFMX0RJUkVDVE9SWV9FTkRfQ09NTUVOVDpcIiwgY2h1bmsuc2xpY2UoMCwgcmVxdWlyZWRMZW5ndGgpLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlcy5UUkFJTElOR19KVU5LO1xuXG4gICAgICAgICAgICByZXR1cm4gcmVxdWlyZWRMZW5ndGg7XG5cbiAgICAgICAgY2FzZSBzdGF0ZXMuRVJST1I6XG4gICAgICAgICAgICByZXR1cm4gY2h1bmsubGVuZ3RoOyAvLyBkaXNjYXJkXG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZGlkbid0IGhhbmRsZSBzdGF0ZSAjXCIsIHRoaXMuc3RhdGUsIFwiZGlzY2FyZGluZ1wiKTtcbiAgICAgICAgICAgIHJldHVybiBjaHVuay5sZW5ndGg7XG4gICAgfVxufVxuXG5VbnppcFN0cmVhbS5wcm90b3R5cGUuX3ByZXBhcmVPdXRTdHJlYW0gPSBmdW5jdGlvbiAodmFycywgZW50cnkpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB2YXIgaXNEaXJlY3RvcnkgPSB2YXJzLnVuY29tcHJlc3NlZFNpemUgPT09IDAgJiYgL1tcXC9cXFxcXSQvLnRlc3QoZW50cnkucGF0aCk7XG4gICAgLy8gcHJvdGVjdCBhZ2FpbnN0IG1hbGljaW91cyB6aXAgZmlsZXMgd2hpY2ggd2FudCB0byBleHRyYWN0IHRvIHBhcmVudCBkaXJzXG4gICAgZW50cnkucGF0aCA9IGVudHJ5LnBhdGgucmVwbGFjZSgvKD88PV58Wy9cXFxcXSspWy5dWy5dKyg/PVsvXFxcXF0rfCQpL2csIFwiLlwiKTtcbiAgICBlbnRyeS50eXBlID0gaXNEaXJlY3RvcnkgPyAnRGlyZWN0b3J5JyA6ICdGaWxlJztcbiAgICBlbnRyeS5pc0RpcmVjdG9yeSA9IGlzRGlyZWN0b3J5O1xuXG4gICAgdmFyIGZpbGVTaXplS25vd24gPSAhKHZhcnMuZmxhZ3MgJiAweDA4KTtcbiAgICBpZiAoZmlsZVNpemVLbm93bikge1xuICAgICAgICBlbnRyeS5zaXplID0gdmFycy51bmNvbXByZXNzZWRTaXplO1xuICAgIH1cblxuICAgIHZhciBpc1ZlcnNpb25TdXBwb3J0ZWQgPSB2YXJzLnZlcnNpb25zTmVlZGVkVG9FeHRyYWN0IDw9IDQ1O1xuXG4gICAgdGhpcy5vdXRTdHJlYW1JbmZvID0ge1xuICAgICAgICBzdHJlYW06IG51bGwsXG4gICAgICAgIGxpbWl0OiBmaWxlU2l6ZUtub3duID8gdmFycy5jb21wcmVzc2VkU2l6ZSA6IC0xLFxuICAgICAgICB3cml0dGVuOiAwXG4gICAgfTtcblxuICAgIGlmICghZmlsZVNpemVLbm93bikge1xuICAgICAgICB2YXIgcGF0dGVybiA9IG5ldyBCdWZmZXIoNCk7XG4gICAgICAgIHBhdHRlcm4ud3JpdGVVSW50MzJMRShTSUdfREFUQV9ERVNDUklQVE9SLCAwKTtcbiAgICAgICAgdmFyIHppcDY0TW9kZSA9IHZhcnMuZXh0cmEuemlwNjRNb2RlO1xuICAgICAgICB2YXIgZXh0cmFTaXplID0gemlwNjRNb2RlID8gMjAgOiAxMjtcbiAgICAgICAgdmFyIHNlYXJjaFBhdHRlcm4gPSB7XG4gICAgICAgICAgICBwYXR0ZXJuOiBwYXR0ZXJuLFxuICAgICAgICAgICAgcmVxdWlyZWRFeHRyYVNpemU6IGV4dHJhU2l6ZVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1hdGNoZXJTdHJlYW0gPSBuZXcgTWF0Y2hlclN0cmVhbShzZWFyY2hQYXR0ZXJuLCBmdW5jdGlvbiAobWF0Y2hlZENodW5rLCBzaXplU29GYXIpIHtcbiAgICAgICAgICAgIHZhciB2YXJzID0gc2VsZi5fcmVhZERhdGFEZXNjcmlwdG9yKG1hdGNoZWRDaHVuaywgemlwNjRNb2RlKTtcblxuICAgICAgICAgICAgdmFyIGNvbXByZXNzZWRTaXplTWF0Y2hlcyA9IHZhcnMuY29tcHJlc3NlZFNpemUgPT09IHNpemVTb0ZhcjtcbiAgICAgICAgICAgIC8vIGxldCdzIGFsc28gZGVhbCB3aXRoIGFyY2hpdmVzIHdpdGggNEdpQisgZmlsZXMgd2l0aG91dCB6aXA2NFxuICAgICAgICAgICAgaWYgKCF6aXA2NE1vZGUgJiYgIWNvbXByZXNzZWRTaXplTWF0Y2hlcyAmJiBzaXplU29GYXIgPj0gRk9VUl9HSUdTKSB7XG4gICAgICAgICAgICAgICAgdmFyIG92ZXJmbG93biA9IHNpemVTb0ZhciAtIEZPVVJfR0lHUztcbiAgICAgICAgICAgICAgICB3aGlsZSAob3ZlcmZsb3duID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcHJlc3NlZFNpemVNYXRjaGVzID0gdmFycy5jb21wcmVzc2VkU2l6ZSA9PT0gb3ZlcmZsb3duO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29tcHJlc3NlZFNpemVNYXRjaGVzKSBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3duIC09IEZPVVJfR0lHUztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWNvbXByZXNzZWRTaXplTWF0Y2hlcykgeyByZXR1cm47IH1cblxuICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IHN0YXRlcy5GSUxFX0RBVEFfRU5EO1xuICAgICAgICAgICAgdmFyIHNsaWNlT2Zmc2V0ID0gemlwNjRNb2RlID8gMjQgOiAxNjtcbiAgICAgICAgICAgIGlmIChzZWxmLmRhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHNlbGYuZGF0YSA9IEJ1ZmZlci5jb25jYXQoW21hdGNoZWRDaHVuay5zbGljZShzbGljZU9mZnNldCksIHNlbGYuZGF0YV0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZWxmLmRhdGEgPSBtYXRjaGVkQ2h1bmsuc2xpY2Uoc2xpY2VPZmZzZXQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMub3V0U3RyZWFtSW5mby5zdHJlYW0gPSBtYXRjaGVyU3RyZWFtO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3V0U3RyZWFtSW5mby5zdHJlYW0gPSBuZXcgc3RyZWFtLlBhc3NUaHJvdWdoKCk7XG4gICAgfVxuXG4gICAgdmFyIGlzRW5jcnlwdGVkID0gKHZhcnMuZmxhZ3MgJiAweDAxKSB8fCAodmFycy5mbGFncyAmIDB4NDApO1xuICAgIGlmIChpc0VuY3J5cHRlZCB8fCAhaXNWZXJzaW9uU3VwcG9ydGVkKSB7XG4gICAgICAgIHZhciBtZXNzYWdlID0gaXNFbmNyeXB0ZWQgPyBcIkVuY3J5cHRlZCBmaWxlcyBhcmUgbm90IHN1cHBvcnRlZCFcIlxuICAgICAgICAgICAgOiAoXCJaaXAgdmVyc2lvbiBcIiArIE1hdGguZmxvb3IodmFycy52ZXJzaW9uc05lZWRlZFRvRXh0cmFjdCAvIDEwKSArIFwiLlwiICsgdmFycy52ZXJzaW9uc05lZWRlZFRvRXh0cmFjdCAlIDEwICsgXCIgaXMgbm90IHN1cHBvcnRlZFwiKTtcblxuICAgICAgICBlbnRyeS5za2lwID0gdHJ1ZTtcbiAgICAgICAgc2V0SW1tZWRpYXRlKCgpID0+IHtcbiAgICAgICAgICAgIHNlbGYuZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IobWVzc2FnZSkpO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyB0cnkgdG8gc2tpcCBvdmVyIHRoaXMgZW50cnlcbiAgICAgICAgdGhpcy5vdXRTdHJlYW1JbmZvLnN0cmVhbS5waXBlKG5ldyBFbnRyeSgpLmF1dG9kcmFpbigpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBpc0NvbXByZXNzZWQgPSB2YXJzLmNvbXByZXNzaW9uTWV0aG9kID4gMDtcbiAgICBpZiAoaXNDb21wcmVzc2VkKSB7XG4gICAgICAgIHZhciBpbmZsYXRlciA9IHpsaWIuY3JlYXRlSW5mbGF0ZVJhdygpO1xuICAgICAgICBpbmZsYXRlci5vbignZXJyb3InLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBzZWxmLnN0YXRlID0gc3RhdGVzLkVSUk9SO1xuICAgICAgICAgICAgc2VsZi5lbWl0KCdlcnJvcicsIGVycik7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm91dFN0cmVhbUluZm8uc3RyZWFtLnBpcGUoaW5mbGF0ZXIpLnBpcGUoZW50cnkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3V0U3RyZWFtSW5mby5zdHJlYW0ucGlwZShlbnRyeSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2RyYWluQWxsRW50cmllcykge1xuICAgICAgICBlbnRyeS5hdXRvZHJhaW4oKTtcbiAgICB9XG59XG5cblVuemlwU3RyZWFtLnByb3RvdHlwZS5fcmVhZEZpbGUgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgIHZhciB2YXJzID0gYmluYXJ5LnBhcnNlKGRhdGEpXG4gICAgICAgIC53b3JkMTZsdSgndmVyc2lvbnNOZWVkZWRUb0V4dHJhY3QnKVxuICAgICAgICAud29yZDE2bHUoJ2ZsYWdzJylcbiAgICAgICAgLndvcmQxNmx1KCdjb21wcmVzc2lvbk1ldGhvZCcpXG4gICAgICAgIC53b3JkMTZsdSgnbGFzdE1vZGlmaWVkVGltZScpXG4gICAgICAgIC53b3JkMTZsdSgnbGFzdE1vZGlmaWVkRGF0ZScpXG4gICAgICAgIC53b3JkMzJsdSgnY3JjMzInKVxuICAgICAgICAud29yZDMybHUoJ2NvbXByZXNzZWRTaXplJylcbiAgICAgICAgLndvcmQzMmx1KCd1bmNvbXByZXNzZWRTaXplJylcbiAgICAgICAgLndvcmQxNmx1KCdmaWxlTmFtZUxlbmd0aCcpXG4gICAgICAgIC53b3JkMTZsdSgnZXh0cmFGaWVsZExlbmd0aCcpXG4gICAgICAgIC52YXJzO1xuXG4gICAgcmV0dXJuIHZhcnM7XG59XG5cblVuemlwU3RyZWFtLnByb3RvdHlwZS5fcmVhZEV4dHJhRmllbGRzID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICB2YXIgZXh0cmEgPSB7fTtcbiAgICB2YXIgcmVzdWx0ID0geyBwYXJzZWQ6IGV4dHJhIH07XG4gICAgaWYgKHRoaXMub3B0aW9ucy5kZWJ1Zykge1xuICAgICAgICByZXN1bHQuZGVidWcgPSBbXTtcbiAgICB9XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB3aGlsZSAoaW5kZXggPCBkYXRhLmxlbmd0aCkge1xuICAgICAgICB2YXIgdmFycyA9IGJpbmFyeS5wYXJzZShkYXRhKVxuICAgICAgICAgICAgLnNraXAoaW5kZXgpXG4gICAgICAgICAgICAud29yZDE2bHUoJ2V4dHJhSWQnKVxuICAgICAgICAgICAgLndvcmQxNmx1KCdleHRyYVNpemUnKVxuICAgICAgICAgICAgLnZhcnM7XG5cbiAgICAgICAgaW5kZXggKz0gNDtcblxuICAgICAgICB2YXIgZmllbGRUeXBlID0gdW5kZWZpbmVkO1xuICAgICAgICBzd2l0Y2ggKHZhcnMuZXh0cmFJZCkge1xuICAgICAgICAgICAgY2FzZSAweDAwMDE6XG4gICAgICAgICAgICAgICAgZmllbGRUeXBlID0gXCJaaXA2NCBleHRlbmRlZCBpbmZvcm1hdGlvbiBleHRyYSBmaWVsZFwiO1xuICAgICAgICAgICAgICAgIHZhciB6NjR2YXJzID0gYmluYXJ5LnBhcnNlKGRhdGEuc2xpY2UoaW5kZXgsIGluZGV4K3ZhcnMuZXh0cmFTaXplKSlcbiAgICAgICAgICAgICAgICAgICAgLndvcmQ2NGx1KCd1bmNvbXByZXNzZWRTaXplJylcbiAgICAgICAgICAgICAgICAgICAgLndvcmQ2NGx1KCdjb21wcmVzc2VkU2l6ZScpXG4gICAgICAgICAgICAgICAgICAgIC53b3JkNjRsdSgnb2Zmc2V0VG9Mb2NhbEhlYWRlcicpXG4gICAgICAgICAgICAgICAgICAgIC53b3JkMzJsdSgnZGlza1N0YXJ0TnVtYmVyJylcbiAgICAgICAgICAgICAgICAgICAgLnZhcnM7XG4gICAgICAgICAgICAgICAgaWYgKHo2NHZhcnMudW5jb21wcmVzc2VkU2l6ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBleHRyYS51bmNvbXByZXNzZWRTaXplID0gejY0dmFycy51bmNvbXByZXNzZWRTaXplO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoejY0dmFycy5jb21wcmVzc2VkU2l6ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBleHRyYS5jb21wcmVzc2VkU2l6ZSA9IHo2NHZhcnMuY29tcHJlc3NlZFNpemU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGV4dHJhLnppcDY0TW9kZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDB4MDAwYTpcbiAgICAgICAgICAgICAgICBmaWVsZFR5cGUgPSBcIk5URlMgZXh0cmEgZmllbGRcIjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMHg1NDU1OlxuICAgICAgICAgICAgICAgIGZpZWxkVHlwZSA9IFwiZXh0ZW5kZWQgdGltZXN0YW1wXCI7XG4gICAgICAgICAgICAgICAgdmFyIHRpbWVzdGFtcEZpZWxkcyA9IGRhdGEucmVhZFVJbnQ4KGluZGV4KTtcbiAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gMTtcbiAgICAgICAgICAgICAgICBpZiAodmFycy5leHRyYVNpemUgPj0gb2Zmc2V0ICsgNCAmJiB0aW1lc3RhbXBGaWVsZHMgJiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4dHJhLm10aW1lID0gbmV3IERhdGUoZGF0YS5yZWFkVUludDMyTEUoaW5kZXggKyBvZmZzZXQpICogMTAwMCk7XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSA0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodmFycy5leHRyYVNpemUgPj0gb2Zmc2V0ICsgNCAmJiB0aW1lc3RhbXBGaWVsZHMgJiAyKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4dHJhLmF0aW1lID0gbmV3IERhdGUoZGF0YS5yZWFkVUludDMyTEUoaW5kZXggKyBvZmZzZXQpICogMTAwMCk7XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSA0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodmFycy5leHRyYVNpemUgPj0gb2Zmc2V0ICsgNCAmJiB0aW1lc3RhbXBGaWVsZHMgJiA0KSB7XG4gICAgICAgICAgICAgICAgICAgIGV4dHJhLmN0aW1lID0gbmV3IERhdGUoZGF0YS5yZWFkVUludDMyTEUoaW5kZXggKyBvZmZzZXQpICogMTAwMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAweDcwNzU6XG4gICAgICAgICAgICAgICAgZmllbGRUeXBlID0gXCJJbmZvLVpJUCBVbmljb2RlIFBhdGggRXh0cmEgRmllbGRcIjtcbiAgICAgICAgICAgICAgICB2YXIgZmllbGRWZXIgPSBkYXRhLnJlYWRVSW50OChpbmRleCk7XG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkVmVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSAxO1xuICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBzaG91bGQgYmUgY2hlY2tpbmcgdGhpcyBhZ2FpbnN0IG91ciBwYXRoIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZUNyYzMyID0gZGF0YS5yZWFkVUludDMyTEUoaW5kZXggKyBvZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gNDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBhdGhCdWZmZXIgPSBkYXRhLnNsaWNlKGluZGV4ICsgb2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgZXh0cmEucGF0aCA9IHBhdGhCdWZmZXIudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDB4MDAwZDpcbiAgICAgICAgICAgIGNhc2UgMHg1ODU1OlxuICAgICAgICAgICAgICAgIGZpZWxkVHlwZSA9IHZhcnMuZXh0cmFJZCA9PT0gMHgwMDBkID8gXCJQS1dBUkUgVW5peFwiIDogXCJJbmZvLVpJUCBVTklYICh0eXBlIDEpXCI7XG4gICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IDA7XG4gICAgICAgICAgICAgICAgaWYgKHZhcnMuZXh0cmFTaXplID49IDgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGF0aW1lID0gbmV3IERhdGUoZGF0YS5yZWFkVUludDMyTEUoaW5kZXggKyBvZmZzZXQpICogMTAwMCk7XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSA0O1xuICAgICAgICAgICAgICAgICAgICB2YXIgbXRpbWUgPSBuZXcgRGF0ZShkYXRhLnJlYWRVSW50MzJMRShpbmRleCArIG9mZnNldCkgKiAxMDAwKTtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDQ7XG4gICAgICAgICAgICAgICAgICAgIGV4dHJhLmF0aW1lID0gYXRpbWU7XG4gICAgICAgICAgICAgICAgICAgIGV4dHJhLm10aW1lID0gbXRpbWU7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhcnMuZXh0cmFTaXplID49IDEyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdWlkID0gZGF0YS5yZWFkVUludDE2TEUoaW5kZXggKyBvZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2lkID0gZGF0YS5yZWFkVUludDE2TEUoaW5kZXggKyBvZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYS51aWQgPSB1aWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYS5naWQgPSBnaWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDB4Nzg1NTpcbiAgICAgICAgICAgICAgICBmaWVsZFR5cGUgPSBcIkluZm8tWklQIFVOSVggKHR5cGUgMilcIjtcbiAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gMDtcbiAgICAgICAgICAgICAgICBpZiAodmFycy5leHRyYVNpemUgPj0gNCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdWlkID0gZGF0YS5yZWFkVUludDE2TEUoaW5kZXggKyBvZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gMjtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGdpZCA9IGRhdGEucmVhZFVJbnQxNkxFKGluZGV4ICsgb2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDI7XG4gICAgICAgICAgICAgICAgICAgIGV4dHJhLnVpZCA9IHVpZDtcbiAgICAgICAgICAgICAgICAgICAgZXh0cmEuZ2lkID0gZ2lkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMHg3ODc1OlxuICAgICAgICAgICAgICAgIGZpZWxkVHlwZSA9IFwiSW5mby1aSVAgTmV3IFVuaXhcIjtcbiAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gMDtcbiAgICAgICAgICAgICAgICB2YXIgZXh0cmFWZXIgPSBkYXRhLnJlYWRVSW50OChpbmRleCk7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDE7XG4gICAgICAgICAgICAgICAgaWYgKGV4dHJhVmVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB1aWRTaXplID0gZGF0YS5yZWFkVUludDgoaW5kZXggKyBvZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHVpZFNpemUgPD0gNikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEudWlkID0gZGF0YS5yZWFkVUludExFKGluZGV4ICsgb2Zmc2V0LCB1aWRTaXplKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gdWlkU2l6ZTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgZ2lkU2l6ZSA9IGRhdGEucmVhZFVJbnQ4KGluZGV4ICsgb2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGlmIChnaWRTaXplIDw9IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhLmdpZCA9IGRhdGEucmVhZFVJbnRMRShpbmRleCArIG9mZnNldCwgZ2lkU2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDB4NzU2ZTpcbiAgICAgICAgICAgICAgICBmaWVsZFR5cGUgPSBcIkFTaSBVbml4XCI7XG4gICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IDA7XG4gICAgICAgICAgICAgICAgaWYgKHZhcnMuZXh0cmFTaXplID49IDE0KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjcmMgPSBkYXRhLnJlYWRVSW50MzJMRShpbmRleCArIG9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSA0O1xuICAgICAgICAgICAgICAgICAgICB2YXIgbW9kZSA9IGRhdGEucmVhZFVJbnQxNkxFKGluZGV4ICsgb2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDI7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzaXpkZXYgPSBkYXRhLnJlYWRVSW50MzJMRShpbmRleCArIG9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSA0O1xuICAgICAgICAgICAgICAgICAgICB2YXIgdWlkID0gZGF0YS5yZWFkVUludDE2TEUoaW5kZXggKyBvZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gMjtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGdpZCA9IGRhdGEucmVhZFVJbnQxNkxFKGluZGV4ICsgb2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDI7XG4gICAgICAgICAgICAgICAgICAgIGV4dHJhLm1vZGUgPSBtb2RlO1xuICAgICAgICAgICAgICAgICAgICBleHRyYS51aWQgPSB1aWQ7XG4gICAgICAgICAgICAgICAgICAgIGV4dHJhLmdpZCA9IGdpZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhcnMuZXh0cmFTaXplID4gMTQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGFydCA9IGluZGV4ICsgb2Zmc2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZCA9IGluZGV4ICsgdmFycy5leHRyYVNpemUgLSAxNDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzeW1saW5rTmFtZSA9IHRoaXMuX2RlY29kZVN0cmluZyhkYXRhLnNsaWNlKHN0YXJ0LCBlbmQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhLnN5bWxpbmsgPSBzeW1saW5rTmFtZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZGVidWcpIHtcbiAgICAgICAgICAgIHJlc3VsdC5kZWJ1Zy5wdXNoKHtcbiAgICAgICAgICAgICAgICBleHRyYUlkOiAnMHgnICsgdmFycy5leHRyYUlkLnRvU3RyaW5nKDE2KSxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogZmllbGRUeXBlLFxuICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEuc2xpY2UoaW5kZXgsIGluZGV4ICsgdmFycy5leHRyYVNpemUpLmluc3BlY3QoKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpbmRleCArPSB2YXJzLmV4dHJhU2l6ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5VbnppcFN0cmVhbS5wcm90b3R5cGUuX3JlYWREYXRhRGVzY3JpcHRvciA9IGZ1bmN0aW9uIChkYXRhLCB6aXA2NE1vZGUpIHtcbiAgICBpZiAoemlwNjRNb2RlKSB7XG4gICAgICAgIHZhciB2YXJzID0gYmluYXJ5LnBhcnNlKGRhdGEpXG4gICAgICAgICAgICAud29yZDMybHUoJ2RhdGFEZXNjcmlwdG9yU2lnbmF0dXJlJylcbiAgICAgICAgICAgIC53b3JkMzJsdSgnY3JjMzInKVxuICAgICAgICAgICAgLndvcmQ2NGx1KCdjb21wcmVzc2VkU2l6ZScpXG4gICAgICAgICAgICAud29yZDY0bHUoJ3VuY29tcHJlc3NlZFNpemUnKVxuICAgICAgICAgICAgLnZhcnM7XG5cbiAgICAgICAgcmV0dXJuIHZhcnM7XG4gICAgfVxuXG4gICAgdmFyIHZhcnMgPSBiaW5hcnkucGFyc2UoZGF0YSlcbiAgICAgICAgLndvcmQzMmx1KCdkYXRhRGVzY3JpcHRvclNpZ25hdHVyZScpXG4gICAgICAgIC53b3JkMzJsdSgnY3JjMzInKVxuICAgICAgICAud29yZDMybHUoJ2NvbXByZXNzZWRTaXplJylcbiAgICAgICAgLndvcmQzMmx1KCd1bmNvbXByZXNzZWRTaXplJylcbiAgICAgICAgLnZhcnM7XG5cbiAgICByZXR1cm4gdmFycztcbn1cblxuVW56aXBTdHJlYW0ucHJvdG90eXBlLl9yZWFkQ2VudHJhbERpcmVjdG9yeUVudHJ5ID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICB2YXIgdmFycyA9IGJpbmFyeS5wYXJzZShkYXRhKVxuICAgICAgICAud29yZDE2bHUoJ3ZlcnNpb25NYWRlQnknKVxuICAgICAgICAud29yZDE2bHUoJ3ZlcnNpb25zTmVlZGVkVG9FeHRyYWN0JylcbiAgICAgICAgLndvcmQxNmx1KCdmbGFncycpXG4gICAgICAgIC53b3JkMTZsdSgnY29tcHJlc3Npb25NZXRob2QnKVxuICAgICAgICAud29yZDE2bHUoJ2xhc3RNb2RpZmllZFRpbWUnKVxuICAgICAgICAud29yZDE2bHUoJ2xhc3RNb2RpZmllZERhdGUnKVxuICAgICAgICAud29yZDMybHUoJ2NyYzMyJylcbiAgICAgICAgLndvcmQzMmx1KCdjb21wcmVzc2VkU2l6ZScpXG4gICAgICAgIC53b3JkMzJsdSgndW5jb21wcmVzc2VkU2l6ZScpXG4gICAgICAgIC53b3JkMTZsdSgnZmlsZU5hbWVMZW5ndGgnKVxuICAgICAgICAud29yZDE2bHUoJ2V4dHJhRmllbGRMZW5ndGgnKVxuICAgICAgICAud29yZDE2bHUoJ2ZpbGVDb21tZW50TGVuZ3RoJylcbiAgICAgICAgLndvcmQxNmx1KCdkaXNrTnVtYmVyJylcbiAgICAgICAgLndvcmQxNmx1KCdpbnRlcm5hbEZpbGVBdHRyaWJ1dGVzJylcbiAgICAgICAgLndvcmQzMmx1KCdleHRlcm5hbEZpbGVBdHRyaWJ1dGVzJylcbiAgICAgICAgLndvcmQzMmx1KCdvZmZzZXRUb0xvY2FsRmlsZUhlYWRlcicpXG4gICAgICAgIC52YXJzO1xuXG4gICAgcmV0dXJuIHZhcnM7XG59XG5cblVuemlwU3RyZWFtLnByb3RvdHlwZS5fcmVhZEVuZE9mQ2VudHJhbERpcmVjdG9yeTY0ID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICB2YXIgdmFycyA9IGJpbmFyeS5wYXJzZShkYXRhKVxuICAgICAgICAud29yZDY0bHUoJ2NlbnRyYWxEaXJlY3RvcnlSZWNvcmRTaXplJylcbiAgICAgICAgLndvcmQxNmx1KCd2ZXJzaW9uTWFkZUJ5JylcbiAgICAgICAgLndvcmQxNmx1KCd2ZXJzaW9uc05lZWRlZFRvRXh0cmFjdCcpXG4gICAgICAgIC53b3JkMzJsdSgnZGlza051bWJlcicpXG4gICAgICAgIC53b3JkMzJsdSgnZGlza051bWJlcldpdGhDZW50cmFsRGlyZWN0b3J5U3RhcnQnKVxuICAgICAgICAud29yZDY0bHUoJ2NlbnRyYWxEaXJlY3RvcnlFbnRyaWVzJylcbiAgICAgICAgLndvcmQ2NGx1KCd0b3RhbENlbnRyYWxEaXJlY3RvcnlFbnRyaWVzJylcbiAgICAgICAgLndvcmQ2NGx1KCdzaXplT2ZDZW50cmFsRGlyZWN0b3J5JylcbiAgICAgICAgLndvcmQ2NGx1KCdvZmZzZXRUb1N0YXJ0T2ZDZW50cmFsRGlyZWN0b3J5JylcbiAgICAgICAgLnZhcnM7XG5cbiAgICByZXR1cm4gdmFycztcbn1cblxuVW56aXBTdHJlYW0ucHJvdG90eXBlLl9yZWFkRW5kT2ZDZW50cmFsRGlyZWN0b3J5ID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICB2YXIgdmFycyA9IGJpbmFyeS5wYXJzZShkYXRhKVxuICAgICAgICAud29yZDE2bHUoJ2Rpc2tOdW1iZXInKVxuICAgICAgICAud29yZDE2bHUoJ2Rpc2tTdGFydCcpXG4gICAgICAgIC53b3JkMTZsdSgnY2VudHJhbERpcmVjdG9yeUVudHJpZXMnKVxuICAgICAgICAud29yZDE2bHUoJ3RvdGFsQ2VudHJhbERpcmVjdG9yeUVudHJpZXMnKVxuICAgICAgICAud29yZDMybHUoJ3NpemVPZkNlbnRyYWxEaXJlY3RvcnknKVxuICAgICAgICAud29yZDMybHUoJ29mZnNldFRvU3RhcnRPZkNlbnRyYWxEaXJlY3RvcnknKVxuICAgICAgICAud29yZDE2bHUoJ2NvbW1lbnRMZW5ndGgnKVxuICAgICAgICAudmFycztcblxuICAgIHJldHVybiB2YXJzO1xufVxuXG5jb25zdCBjcDQzNyA9ICdcXHUwMDAw4pi64pi74pml4pmm4pmj4pmg4oCi4peY4peL4peZ4pmC4pmA4pmq4pmr4pi84pa64peE4oaV4oC8wrbCp+KWrOKGqOKGkeKGk+KGkuKGkOKIn+KGlOKWsuKWvCAhXCIjJCUmXFwnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+4oyCw4fDvMOpw6LDpMOgw6XDp8Oqw6vDqMOvw67DrMOEw4XDicOmw4bDtMO2w7LDu8O5w7/DlsOcwqLCo8Kl4oKnxpLDocOtw7PDusOxw5HCqsK6wr/ijJDCrMK9wrzCocKrwrvilpHilpLilpPilILilKTilaHilaLilZbilZXilaPilZHilZfilZ3ilZzilZvilJDilJTilLTilKzilJzilIDilLzilZ7ilZ/ilZrilZTilanilabilaDilZDilazilafilajilaTilaXilZnilZjilZLilZPilavilarilJjilIzilojiloTilozilpDiloDOscOfzpPPgM6jz4PCtc+EzqbOmM6pzrTiiJ7Phs614oip4omhwrHiiaXiiaTijKDijKHDt+KJiMKw4oiZwrfiiJrigb/CsuKWoCAnO1xuXG5VbnppcFN0cmVhbS5wcm90b3R5cGUuX2RlY29kZVN0cmluZyA9IGZ1bmN0aW9uIChidWZmZXIsIGlzVXRmOCkge1xuICAgIGlmIChpc1V0ZjgpIHtcbiAgICAgICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygndXRmOCcpO1xuICAgIH1cbiAgICAvLyBhbGxvdyBwYXNzaW5nIGN1c3RvbSBkZWNvZGVyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5kZWNvZGVTdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5kZWNvZGVTdHJpbmcoYnVmZmVyKTtcbiAgICB9XG4gICAgbGV0IHJlc3VsdCA9IFwiXCI7XG4gICAgZm9yICh2YXIgaT0wOyBpPGJ1ZmZlci5sZW5ndGg7IGkrKykge1xuICAgICAgICByZXN1bHQgKz0gY3A0MzdbYnVmZmVyW2ldXTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuVW56aXBTdHJlYW0ucHJvdG90eXBlLl9wYXJzZU9yT3V0cHV0ID0gZnVuY3Rpb24gKGVuY29kaW5nLCBjYikge1xuICAgIHZhciBjb25zdW1lO1xuICAgIHdoaWxlICgoY29uc3VtZSA9IHRoaXMucHJvY2Vzc0RhdGFDaHVuayh0aGlzLmRhdGEpKSA+IDApIHtcbiAgICAgICAgdGhpcy5kYXRhID0gdGhpcy5kYXRhLnNsaWNlKGNvbnN1bWUpO1xuICAgICAgICBpZiAodGhpcy5kYXRhLmxlbmd0aCA9PT0gMCkgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RhdGUgPT09IHN0YXRlcy5GSUxFX0RBVEEpIHtcbiAgICAgICAgaWYgKHRoaXMub3V0U3RyZWFtSW5mby5saW1pdCA+PSAwKSB7XG4gICAgICAgICAgICB2YXIgcmVtYWluaW5nID0gdGhpcy5vdXRTdHJlYW1JbmZvLmxpbWl0IC0gdGhpcy5vdXRTdHJlYW1JbmZvLndyaXR0ZW47XG4gICAgICAgICAgICB2YXIgcGFja2V0O1xuICAgICAgICAgICAgaWYgKHJlbWFpbmluZyA8IHRoaXMuZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBwYWNrZXQgPSB0aGlzLmRhdGEuc2xpY2UoMCwgcmVtYWluaW5nKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGEuc2xpY2UocmVtYWluaW5nKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGFja2V0ID0gdGhpcy5kYXRhO1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IG5ldyBCdWZmZXIoJycpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLm91dFN0cmVhbUluZm8ud3JpdHRlbiArPSBwYWNrZXQubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKHRoaXMub3V0U3RyZWFtSW5mby5saW1pdCA9PT0gdGhpcy5vdXRTdHJlYW1JbmZvLndyaXR0ZW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGVzLlNUQVJUO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5vdXRTdHJlYW1JbmZvLnN0cmVhbS5lbmQocGFja2V0LCBlbmNvZGluZywgY2IpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLm91dFN0cmVhbUluZm8uc3RyZWFtLndyaXRlKHBhY2tldCwgZW5jb2RpbmcsIGNiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBwYWNrZXQgPSB0aGlzLmRhdGE7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBuZXcgQnVmZmVyKCcnKTtcblxuICAgICAgICAgICAgdGhpcy5vdXRTdHJlYW1JbmZvLndyaXR0ZW4gKz0gcGFja2V0Lmxlbmd0aDtcbiAgICAgICAgICAgIHZhciBvdXRwdXRTdHJlYW0gPSB0aGlzLm91dFN0cmVhbUluZm8uc3RyZWFtO1xuICAgICAgICAgICAgb3V0cHV0U3RyZWFtLndyaXRlKHBhY2tldCwgZW5jb2RpbmcsICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gc3RhdGVzLkZJTEVfREFUQV9FTkQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlcy5TVEFSVDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG91dHB1dFN0cmVhbS5lbmQoY2IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gd2UndmUgd3JpdHRlbiB0byB0aGUgb3V0cHV0IHN0cmVhbSwgbGV0dGluZyB0aGF0IHdyaXRlIGRlYWwgd2l0aCB0aGUgY2FsbGJhY2tcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNiKCk7XG59XG5cblVuemlwU3RyZWFtLnByb3RvdHlwZS5kcmFpbkFsbCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLl9kcmFpbkFsbEVudHJpZXMgPSB0cnVlO1xufVxuXG5VbnppcFN0cmVhbS5wcm90b3R5cGUuX3RyYW5zZm9ybSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIGlmIChzZWxmLmRhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICBzZWxmLmRhdGEgPSBCdWZmZXIuY29uY2F0KFtzZWxmLmRhdGEsIGNodW5rXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgc2VsZi5kYXRhID0gY2h1bms7XG4gICAgfVxuXG4gICAgdmFyIHN0YXJ0RGF0YUxlbmd0aCA9IHNlbGYuZGF0YS5sZW5ndGg7XG4gICAgdmFyIGRvbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChzZWxmLmRhdGEubGVuZ3RoID4gMCAmJiBzZWxmLmRhdGEubGVuZ3RoIDwgc3RhcnREYXRhTGVuZ3RoKSB7XG4gICAgICAgICAgICBzdGFydERhdGFMZW5ndGggPSBzZWxmLmRhdGEubGVuZ3RoO1xuICAgICAgICAgICAgc2VsZi5fcGFyc2VPck91dHB1dChlbmNvZGluZywgZG9uZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY2IoKTtcbiAgICB9O1xuICAgIHNlbGYuX3BhcnNlT3JPdXRwdXQoZW5jb2RpbmcsIGRvbmUpO1xufVxuXG5VbnppcFN0cmVhbS5wcm90b3R5cGUuX2ZsdXNoID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIGlmIChzZWxmLmRhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICBzZWxmLl9wYXJzZU9yT3V0cHV0KCdidWZmZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5kYXRhLmxlbmd0aCA+IDApIHJldHVybiBzZXRJbW1lZGlhdGUoZnVuY3Rpb24gKCkgeyBzZWxmLl9mbHVzaChjYik7IH0pO1xuICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChzZWxmLnN0YXRlID09PSBzdGF0ZXMuRklMRV9EQVRBKSB7XG4gICAgICAgIC8vIHVoIG9oLCBzb21ldGhpbmcgd2VudCB3cm9uZ1xuICAgICAgICByZXR1cm4gY2IobmV3IEVycm9yKFwiU3RyZWFtIGZpbmlzaGVkIGluIGFuIGludmFsaWQgc3RhdGUsIHVuY29tcHJlc3Npb24gZmFpbGVkXCIpKTtcbiAgICB9XG5cbiAgICBzZXRJbW1lZGlhdGUoY2IpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFVuemlwU3RyZWFtO1xuIiwKICAgICJ2YXIgVHJhbnNmb3JtID0gcmVxdWlyZSgnc3RyZWFtJykuVHJhbnNmb3JtO1xudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG52YXIgVW56aXBTdHJlYW0gPSByZXF1aXJlKCcuL3VuemlwLXN0cmVhbScpO1xuXG5mdW5jdGlvbiBQYXJzZXJTdHJlYW0ob3B0cykge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBQYXJzZXJTdHJlYW0pKSB7XG4gICAgICAgIHJldHVybiBuZXcgUGFyc2VyU3RyZWFtKG9wdHMpO1xuICAgIH1cblxuICAgIHZhciB0cmFuc2Zvcm1PcHRzID0gb3B0cyB8fCB7fTtcbiAgICBUcmFuc2Zvcm0uY2FsbCh0aGlzLCB7IHJlYWRhYmxlT2JqZWN0TW9kZTogdHJ1ZSB9KTtcblxuICAgIHRoaXMub3B0cyA9IG9wdHMgfHwge307XG4gICAgdGhpcy51bnppcFN0cmVhbSA9IG5ldyBVbnppcFN0cmVhbSh0aGlzLm9wdHMpO1xuXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMudW56aXBTdHJlYW0ub24oJ2VudHJ5JywgZnVuY3Rpb24oZW50cnkpIHtcbiAgICAgICAgc2VsZi5wdXNoKGVudHJ5KTtcbiAgICB9KTtcbiAgICB0aGlzLnVuemlwU3RyZWFtLm9uKCdlcnJvcicsIGZ1bmN0aW9uKGVycm9yKSB7XG4gICAgICAgIHNlbGYuZW1pdCgnZXJyb3InLCBlcnJvcik7XG4gICAgfSk7XG59XG5cbnV0aWwuaW5oZXJpdHMoUGFyc2VyU3RyZWFtLCBUcmFuc2Zvcm0pO1xuXG5QYXJzZXJTdHJlYW0ucHJvdG90eXBlLl90cmFuc2Zvcm0gPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICAgIHRoaXMudW56aXBTdHJlYW0ud3JpdGUoY2h1bmssIGVuY29kaW5nLCBjYik7XG59XG5cblBhcnNlclN0cmVhbS5wcm90b3R5cGUuX2ZsdXNoID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMudW56aXBTdHJlYW0uZW5kKGZ1bmN0aW9uKCkge1xuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uKCkgeyBzZWxmLmVtaXQoJ2Nsb3NlJyk7IH0pO1xuICAgICAgICBjYigpO1xuICAgIH0pO1xufVxuXG5QYXJzZXJTdHJlYW0ucHJvdG90eXBlLm9uID0gZnVuY3Rpb24oZXZlbnROYW1lLCBmbikge1xuICAgIGlmIChldmVudE5hbWUgPT09ICdlbnRyeScpIHtcbiAgICAgICAgcmV0dXJuIFRyYW5zZm9ybS5wcm90b3R5cGUub24uY2FsbCh0aGlzLCAnZGF0YScsIGZuKTtcbiAgICB9XG4gICAgcmV0dXJuIFRyYW5zZm9ybS5wcm90b3R5cGUub24uY2FsbCh0aGlzLCBldmVudE5hbWUsIGZuKTtcbn1cblxuUGFyc2VyU3RyZWFtLnByb3RvdHlwZS5kcmFpbkFsbCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnVuemlwU3RyZWFtLmRyYWluQWxsKCk7XG4gICAgcmV0dXJuIHRoaXMucGlwZShuZXcgVHJhbnNmb3JtKHsgb2JqZWN0TW9kZTogdHJ1ZSwgdHJhbnNmb3JtOiBmdW5jdGlvbiAoZCwgZSwgY2IpIHsgY2IoKTsgfSB9KSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUGFyc2VyU3RyZWFtO1xuIiwKICAgICJ2YXIgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcbnZhciBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG52YXIgXzA3NzcgPSBwYXJzZUludCgnMDc3NycsIDgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG1rZGlyUC5ta2RpcnAgPSBta2RpclAubWtkaXJQID0gbWtkaXJQO1xuXG5mdW5jdGlvbiBta2RpclAgKHAsIG9wdHMsIGYsIG1hZGUpIHtcbiAgICBpZiAodHlwZW9mIG9wdHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZiA9IG9wdHM7XG4gICAgICAgIG9wdHMgPSB7fTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIW9wdHMgfHwgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIG9wdHMgPSB7IG1vZGU6IG9wdHMgfTtcbiAgICB9XG4gICAgXG4gICAgdmFyIG1vZGUgPSBvcHRzLm1vZGU7XG4gICAgdmFyIHhmcyA9IG9wdHMuZnMgfHwgZnM7XG4gICAgXG4gICAgaWYgKG1vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBtb2RlID0gXzA3NzdcbiAgICB9XG4gICAgaWYgKCFtYWRlKSBtYWRlID0gbnVsbDtcbiAgICBcbiAgICB2YXIgY2IgPSBmIHx8IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIGZ1bmN0aW9uICgpIHt9O1xuICAgIHAgPSBwYXRoLnJlc29sdmUocCk7XG4gICAgXG4gICAgeGZzLm1rZGlyKHAsIG1vZGUsIGZ1bmN0aW9uIChlcikge1xuICAgICAgICBpZiAoIWVyKSB7XG4gICAgICAgICAgICBtYWRlID0gbWFkZSB8fCBwO1xuICAgICAgICAgICAgcmV0dXJuIGNiKG51bGwsIG1hZGUpO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAoZXIuY29kZSkge1xuICAgICAgICAgICAgY2FzZSAnRU5PRU5UJzpcbiAgICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgICAgICBpZiAocGF0aC5kaXJuYW1lKHApID09PSBwKSByZXR1cm4gY2IoZXIpO1xuICAgICAgICAgICAgICAgIG1rZGlyUChwYXRoLmRpcm5hbWUocCksIG9wdHMsIGZ1bmN0aW9uIChlciwgbWFkZSkge1xuICAgICAgICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgICAgICAgICAgaWYgKGVyKSBjYihlciwgbWFkZSk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgbWtkaXJQKHAsIG9wdHMsIGNiLCBtYWRlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gSW4gdGhlIGNhc2Ugb2YgYW55IG90aGVyIGVycm9yLCBqdXN0IHNlZSBpZiB0aGVyZSdzIGEgZGlyXG4gICAgICAgICAgICAvLyB0aGVyZSBhbHJlYWR5LiAgSWYgc28sIHRoZW4gaG9vcmF5ISAgSWYgbm90LCB0aGVuIHNvbWV0aGluZ1xuICAgICAgICAgICAgLy8gaXMgYm9ya2VkLlxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB4ZnMuc3RhdChwLCBmdW5jdGlvbiAoZXIyLCBzdGF0KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBzdGF0IGZhaWxzLCB0aGVuIHRoYXQncyBzdXBlciB3ZWlyZC5cbiAgICAgICAgICAgICAgICAgICAgLy8gbGV0IHRoZSBvcmlnaW5hbCBlcnJvciBiZSB0aGUgZmFpbHVyZSByZWFzb24uXG4gICAgICAgICAgICAgICAgICAgIGlmIChlcjIgfHwgIXN0YXQuaXNEaXJlY3RvcnkoKSkgY2IoZXIsIG1hZGUpXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgY2IobnVsbCwgbWFkZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxubWtkaXJQLnN5bmMgPSBmdW5jdGlvbiBzeW5jIChwLCBvcHRzLCBtYWRlKSB7XG4gICAgaWYgKCFvcHRzIHx8IHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgICAgICBvcHRzID0geyBtb2RlOiBvcHRzIH07XG4gICAgfVxuICAgIFxuICAgIHZhciBtb2RlID0gb3B0cy5tb2RlO1xuICAgIHZhciB4ZnMgPSBvcHRzLmZzIHx8IGZzO1xuICAgIFxuICAgIGlmIChtb2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbW9kZSA9IF8wNzc3XG4gICAgfVxuICAgIGlmICghbWFkZSkgbWFkZSA9IG51bGw7XG5cbiAgICBwID0gcGF0aC5yZXNvbHZlKHApO1xuXG4gICAgdHJ5IHtcbiAgICAgICAgeGZzLm1rZGlyU3luYyhwLCBtb2RlKTtcbiAgICAgICAgbWFkZSA9IG1hZGUgfHwgcDtcbiAgICB9XG4gICAgY2F0Y2ggKGVycjApIHtcbiAgICAgICAgc3dpdGNoIChlcnIwLmNvZGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ0VOT0VOVCcgOlxuICAgICAgICAgICAgICAgIG1hZGUgPSBzeW5jKHBhdGguZGlybmFtZShwKSwgb3B0cywgbWFkZSk7XG4gICAgICAgICAgICAgICAgc3luYyhwLCBvcHRzLCBtYWRlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gSW4gdGhlIGNhc2Ugb2YgYW55IG90aGVyIGVycm9yLCBqdXN0IHNlZSBpZiB0aGVyZSdzIGEgZGlyXG4gICAgICAgICAgICAvLyB0aGVyZSBhbHJlYWR5LiAgSWYgc28sIHRoZW4gaG9vcmF5ISAgSWYgbm90LCB0aGVuIHNvbWV0aGluZ1xuICAgICAgICAgICAgLy8gaXMgYm9ya2VkLlxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB2YXIgc3RhdDtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ID0geGZzLnN0YXRTeW5jKHApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyMSkgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8ge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnIwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgICAgICBpZiAoIXN0YXQuaXNEaXJlY3RvcnkoKSkgdGhyb3cgZXJyMDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYWRlO1xufTtcbiIsCiAgICAidmFyIGZzID0gcmVxdWlyZSgnZnMnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG52YXIgbWtkaXJwID0gcmVxdWlyZSgnbWtkaXJwJyk7XG52YXIgVHJhbnNmb3JtID0gcmVxdWlyZSgnc3RyZWFtJykuVHJhbnNmb3JtO1xudmFyIFVuemlwU3RyZWFtID0gcmVxdWlyZSgnLi91bnppcC1zdHJlYW0nKTtcblxuZnVuY3Rpb24gRXh0cmFjdCAob3B0cykge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBFeHRyYWN0KSlcbiAgICByZXR1cm4gbmV3IEV4dHJhY3Qob3B0cyk7XG5cbiAgICBUcmFuc2Zvcm0uY2FsbCh0aGlzKTtcblxuICAgIHRoaXMub3B0cyA9IG9wdHMgfHwge307XG4gICAgdGhpcy51bnppcFN0cmVhbSA9IG5ldyBVbnppcFN0cmVhbSh0aGlzLm9wdHMpO1xuICAgIHRoaXMudW5maW5pc2hlZEVudHJpZXMgPSAwO1xuICAgIHRoaXMuYWZ0ZXJGbHVzaFdhaXQgPSBmYWxzZTtcbiAgICB0aGlzLmNyZWF0ZWREaXJlY3RvcmllcyA9IHt9O1xuXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMudW56aXBTdHJlYW0ub24oJ2VudHJ5JywgdGhpcy5fcHJvY2Vzc0VudHJ5LmJpbmQodGhpcykpO1xuICAgIHRoaXMudW56aXBTdHJlYW0ub24oJ2Vycm9yJywgZnVuY3Rpb24oZXJyb3IpIHtcbiAgICAgICAgc2VsZi5lbWl0KCdlcnJvcicsIGVycm9yKTtcbiAgICB9KTtcbn1cblxudXRpbC5pbmhlcml0cyhFeHRyYWN0LCBUcmFuc2Zvcm0pO1xuXG5FeHRyYWN0LnByb3RvdHlwZS5fdHJhbnNmb3JtID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgICB0aGlzLnVuemlwU3RyZWFtLndyaXRlKGNodW5rLCBlbmNvZGluZywgY2IpO1xufVxuXG5FeHRyYWN0LnByb3RvdHlwZS5fZmx1c2ggPSBmdW5jdGlvbiAoY2IpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB2YXIgYWxsRG9uZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uKCkgeyBzZWxmLmVtaXQoJ2Nsb3NlJyk7IH0pO1xuICAgICAgICBjYigpO1xuICAgIH1cblxuICAgIHRoaXMudW56aXBTdHJlYW0uZW5kKGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoc2VsZi51bmZpbmlzaGVkRW50cmllcyA+IDApIHtcbiAgICAgICAgICAgIHNlbGYuYWZ0ZXJGbHVzaFdhaXQgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIHNlbGYub24oJ2F3YWl0LWZpbmlzaGVkJywgYWxsRG9uZSk7XG4gICAgICAgIH1cbiAgICAgICAgYWxsRG9uZSgpO1xuICAgIH0pO1xufVxuXG5FeHRyYWN0LnByb3RvdHlwZS5fcHJvY2Vzc0VudHJ5ID0gZnVuY3Rpb24gKGVudHJ5KSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBkZXN0UGF0aCA9IHBhdGguam9pbih0aGlzLm9wdHMucGF0aCwgZW50cnkucGF0aCk7XG4gICAgdmFyIGRpcmVjdG9yeSA9IGVudHJ5LmlzRGlyZWN0b3J5ID8gZGVzdFBhdGggOiBwYXRoLmRpcm5hbWUoZGVzdFBhdGgpO1xuXG4gICAgdGhpcy51bmZpbmlzaGVkRW50cmllcysrO1xuXG4gICAgdmFyIHdyaXRlRmlsZUZuID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBwaXBlZFN0cmVhbSA9IGZzLmNyZWF0ZVdyaXRlU3RyZWFtKGRlc3RQYXRoKTtcblxuICAgICAgICBwaXBlZFN0cmVhbS5vbignY2xvc2UnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHNlbGYudW5maW5pc2hlZEVudHJpZXMtLTtcbiAgICAgICAgICAgIHNlbGYuX25vdGlmeUF3YWl0ZXIoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHBpcGVkU3RyZWFtLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgc2VsZi5lbWl0KCdlcnJvcicsIGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVudHJ5LnBpcGUocGlwZWRTdHJlYW0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNyZWF0ZWREaXJlY3Rvcmllc1tkaXJlY3RvcnldIHx8IGRpcmVjdG9yeSA9PT0gJy4nKSB7XG4gICAgICAgIHJldHVybiB3cml0ZUZpbGVGbigpO1xuICAgIH1cblxuICAgIC8vIEZJWE1FOiBjYWxscyB0byBta2RpcnAgY2FuIHN0aWxsIGJlIGR1cGxpY2F0ZWRcbiAgICBta2RpcnAoZGlyZWN0b3J5LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgaWYgKGVycikgcmV0dXJuIHNlbGYuZW1pdCgnZXJyb3InLCBlcnIpO1xuXG4gICAgICAgIHNlbGYuY3JlYXRlZERpcmVjdG9yaWVzW2RpcmVjdG9yeV0gPSB0cnVlO1xuXG4gICAgICAgIGlmIChlbnRyeS5pc0RpcmVjdG9yeSkge1xuICAgICAgICAgICAgc2VsZi51bmZpbmlzaGVkRW50cmllcy0tO1xuICAgICAgICAgICAgc2VsZi5fbm90aWZ5QXdhaXRlcigpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgd3JpdGVGaWxlRm4oKTtcbiAgICB9KTtcbn1cblxuRXh0cmFjdC5wcm90b3R5cGUuX25vdGlmeUF3YWl0ZXIgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5hZnRlckZsdXNoV2FpdCAmJiB0aGlzLnVuZmluaXNoZWRFbnRyaWVzID09PSAwKSB7XG4gICAgICAgIHRoaXMuZW1pdCgnYXdhaXQtZmluaXNoZWQnKTtcbiAgICAgICAgdGhpcy5hZnRlckZsdXNoV2FpdCA9IGZhbHNlO1xuICAgIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBFeHRyYWN0OyIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLlBhcnNlID0gcmVxdWlyZSgnLi9saWIvcGFyc2VyLXN0cmVhbScpO1xuZXhwb3J0cy5FeHRyYWN0ID0gcmVxdWlyZSgnLi9saWIvZXh0cmFjdCcpOyIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kb3dubG9hZEFydGlmYWN0SW50ZXJuYWwgPSBleHBvcnRzLmRvd25sb2FkQXJ0aWZhY3RQdWJsaWMgPSBleHBvcnRzLnN0cmVhbUV4dHJhY3RFeHRlcm5hbCA9IHZvaWQgMDtcbmNvbnN0IHByb21pc2VzXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImZzL3Byb21pc2VzXCIpKTtcbmNvbnN0IGdpdGh1YiA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiQGFjdGlvbnMvZ2l0aHViXCIpKTtcbmNvbnN0IGNvcmUgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIkBhY3Rpb25zL2NvcmVcIikpO1xuY29uc3QgaHR0cENsaWVudCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiQGFjdGlvbnMvaHR0cC1jbGllbnRcIikpO1xuY29uc3QgdW56aXBfc3RyZWFtXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcInVuemlwLXN0cmVhbVwiKSk7XG5jb25zdCB1c2VyX2FnZW50XzEgPSByZXF1aXJlKFwiLi4vc2hhcmVkL3VzZXItYWdlbnRcIik7XG5jb25zdCBjb25maWdfMSA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvY29uZmlnXCIpO1xuY29uc3QgYXJ0aWZhY3RfdHdpcnBfY2xpZW50XzEgPSByZXF1aXJlKFwiLi4vc2hhcmVkL2FydGlmYWN0LXR3aXJwLWNsaWVudFwiKTtcbmNvbnN0IGdlbmVyYXRlZF8xID0gcmVxdWlyZShcIi4uLy4uL2dlbmVyYXRlZFwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvdXRpbFwiKTtcbmNvbnN0IGVycm9yc18xID0gcmVxdWlyZShcIi4uL3NoYXJlZC9lcnJvcnNcIik7XG5jb25zdCBzY3J1YlF1ZXJ5UGFyYW1ldGVycyA9ICh1cmwpID0+IHtcbiAgICBjb25zdCBwYXJzZWQgPSBuZXcgVVJMKHVybCk7XG4gICAgcGFyc2VkLnNlYXJjaCA9ICcnO1xuICAgIHJldHVybiBwYXJzZWQudG9TdHJpbmcoKTtcbn07XG5mdW5jdGlvbiBleGlzdHMocGF0aCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB5aWVsZCBwcm9taXNlc18xLmRlZmF1bHQuYWNjZXNzKHBhdGgpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAoZXJyb3IuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufVxuZnVuY3Rpb24gc3RyZWFtRXh0cmFjdCh1cmwsIGRpcmVjdG9yeSkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGxldCByZXRyeUNvdW50ID0gMDtcbiAgICAgICAgd2hpbGUgKHJldHJ5Q291bnQgPCA1KSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHlpZWxkIHN0cmVhbUV4dHJhY3RFeHRlcm5hbCh1cmwsIGRpcmVjdG9yeSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgcmV0cnlDb3VudCsrO1xuICAgICAgICAgICAgICAgIGNvcmUuZGVidWcoYEZhaWxlZCB0byBkb3dubG9hZCBhcnRpZmFjdCBhZnRlciAke3JldHJ5Q291bnR9IHJldHJpZXMgZHVlIHRvICR7ZXJyb3IubWVzc2FnZX0uIFJldHJ5aW5nIGluIDUgc2Vjb25kcy4uLmApO1xuICAgICAgICAgICAgICAgIC8vIHdhaXQgNSBzZWNvbmRzIGJlZm9yZSByZXRyeWluZ1xuICAgICAgICAgICAgICAgIHlpZWxkIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCA1MDAwKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBcnRpZmFjdCBkb3dubG9hZCBmYWlsZWQgYWZ0ZXIgJHtyZXRyeUNvdW50fSByZXRyaWVzLmApO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gc3RyZWFtRXh0cmFjdEV4dGVybmFsKHVybCwgZGlyZWN0b3J5KSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgY2xpZW50ID0gbmV3IGh0dHBDbGllbnQuSHR0cENsaWVudCgoMCwgdXNlcl9hZ2VudF8xLmdldFVzZXJBZ2VudFN0cmluZykoKSk7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0geWllbGQgY2xpZW50LmdldCh1cmwpO1xuICAgICAgICBpZiAocmVzcG9uc2UubWVzc2FnZS5zdGF0dXNDb2RlICE9PSAyMDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCBIVFRQIHJlc3BvbnNlIGZyb20gYmxvYiBzdG9yYWdlOiAke3Jlc3BvbnNlLm1lc3NhZ2Uuc3RhdHVzQ29kZX0gJHtyZXNwb25zZS5tZXNzYWdlLnN0YXR1c01lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGltZW91dCA9IDMwICogMTAwMDsgLy8gMzAgc2Vjb25kc1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGltZXJGbiA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICByZXNwb25zZS5tZXNzYWdlLmRlc3Ryb3kobmV3IEVycm9yKGBCbG9iIHN0b3JhZ2UgY2h1bmsgZGlkIG5vdCByZXNwb25kIGluICR7dGltZW91dH1tc2ApKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQodGltZXJGbiwgdGltZW91dCk7XG4gICAgICAgICAgICByZXNwb25zZS5tZXNzYWdlXG4gICAgICAgICAgICAgICAgLm9uKCdkYXRhJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRpbWVyLnJlZnJlc2goKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLm9uKCdlcnJvcicsIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvcmUuZGVidWcoYHJlc3BvbnNlLm1lc3NhZ2U6IEFydGlmYWN0IGRvd25sb2FkIGZhaWxlZDogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLnBpcGUodW56aXBfc3RyZWFtXzEuZGVmYXVsdC5FeHRyYWN0KHsgcGF0aDogZGlyZWN0b3J5IH0pKVxuICAgICAgICAgICAgICAgIC5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5vbignZXJyb3InLCAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZXhwb3J0cy5zdHJlYW1FeHRyYWN0RXh0ZXJuYWwgPSBzdHJlYW1FeHRyYWN0RXh0ZXJuYWw7XG5mdW5jdGlvbiBkb3dubG9hZEFydGlmYWN0UHVibGljKGFydGlmYWN0SWQsIHJlcG9zaXRvcnlPd25lciwgcmVwb3NpdG9yeU5hbWUsIHRva2VuLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZG93bmxvYWRQYXRoID0geWllbGQgcmVzb2x2ZU9yQ3JlYXRlRGlyZWN0b3J5KG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5wYXRoKTtcbiAgICAgICAgY29uc3QgYXBpID0gZ2l0aHViLmdldE9jdG9raXQodG9rZW4pO1xuICAgICAgICBjb3JlLmluZm8oYERvd25sb2FkaW5nIGFydGlmYWN0ICcke2FydGlmYWN0SWR9JyBmcm9tICcke3JlcG9zaXRvcnlPd25lcn0vJHtyZXBvc2l0b3J5TmFtZX0nYCk7XG4gICAgICAgIGNvbnN0IHsgaGVhZGVycywgc3RhdHVzIH0gPSB5aWVsZCBhcGkucmVzdC5hY3Rpb25zLmRvd25sb2FkQXJ0aWZhY3Qoe1xuICAgICAgICAgICAgb3duZXI6IHJlcG9zaXRvcnlPd25lcixcbiAgICAgICAgICAgIHJlcG86IHJlcG9zaXRvcnlOYW1lLFxuICAgICAgICAgICAgYXJ0aWZhY3RfaWQ6IGFydGlmYWN0SWQsXG4gICAgICAgICAgICBhcmNoaXZlX2Zvcm1hdDogJ3ppcCcsXG4gICAgICAgICAgICByZXF1ZXN0OiB7XG4gICAgICAgICAgICAgICAgcmVkaXJlY3Q6ICdtYW51YWwnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoc3RhdHVzICE9PSAzMDIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGRvd25sb2FkIGFydGlmYWN0LiBVbmV4cGVjdGVkIHN0YXR1czogJHtzdGF0dXN9YCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBsb2NhdGlvbiB9ID0gaGVhZGVycztcbiAgICAgICAgaWYgKCFsb2NhdGlvbikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gcmVkaXJlY3QgdG8gYXJ0aWZhY3QgZG93bmxvYWQgdXJsYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29yZS5pbmZvKGBSZWRpcmVjdGluZyB0byBibG9iIGRvd25sb2FkIHVybDogJHtzY3J1YlF1ZXJ5UGFyYW1ldGVycyhsb2NhdGlvbil9YCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb3JlLmluZm8oYFN0YXJ0aW5nIGRvd25sb2FkIG9mIGFydGlmYWN0IHRvOiAke2Rvd25sb2FkUGF0aH1gKTtcbiAgICAgICAgICAgIHlpZWxkIHN0cmVhbUV4dHJhY3QobG9jYXRpb24sIGRvd25sb2FkUGF0aCk7XG4gICAgICAgICAgICBjb3JlLmluZm8oYEFydGlmYWN0IGRvd25sb2FkIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuYCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBkb3dubG9hZCBhbmQgZXh0cmFjdCBhcnRpZmFjdDogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGRvd25sb2FkUGF0aCB9O1xuICAgIH0pO1xufVxuZXhwb3J0cy5kb3dubG9hZEFydGlmYWN0UHVibGljID0gZG93bmxvYWRBcnRpZmFjdFB1YmxpYztcbmZ1bmN0aW9uIGRvd25sb2FkQXJ0aWZhY3RJbnRlcm5hbChhcnRpZmFjdElkLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZG93bmxvYWRQYXRoID0geWllbGQgcmVzb2x2ZU9yQ3JlYXRlRGlyZWN0b3J5KG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5wYXRoKTtcbiAgICAgICAgY29uc3QgYXJ0aWZhY3RDbGllbnQgPSAoMCwgYXJ0aWZhY3RfdHdpcnBfY2xpZW50XzEuaW50ZXJuYWxBcnRpZmFjdFR3aXJwQ2xpZW50KSgpO1xuICAgICAgICBjb25zdCB7IHdvcmtmbG93UnVuQmFja2VuZElkLCB3b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZCB9ID0gKDAsIHV0aWxfMS5nZXRCYWNrZW5kSWRzRnJvbVRva2VuKSgpO1xuICAgICAgICBjb25zdCBsaXN0UmVxID0ge1xuICAgICAgICAgICAgd29ya2Zsb3dSdW5CYWNrZW5kSWQsXG4gICAgICAgICAgICB3b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZCxcbiAgICAgICAgICAgIGlkRmlsdGVyOiBnZW5lcmF0ZWRfMS5JbnQ2NFZhbHVlLmNyZWF0ZSh7IHZhbHVlOiBhcnRpZmFjdElkLnRvU3RyaW5nKCkgfSlcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgeyBhcnRpZmFjdHMgfSA9IHlpZWxkIGFydGlmYWN0Q2xpZW50Lkxpc3RBcnRpZmFjdHMobGlzdFJlcSk7XG4gICAgICAgIGlmIChhcnRpZmFjdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuQXJ0aWZhY3ROb3RGb3VuZEVycm9yKGBObyBhcnRpZmFjdHMgZm91bmQgZm9yIElEOiAke2FydGlmYWN0SWR9XFxuQXJlIHlvdSB0cnlpbmcgdG8gZG93bmxvYWQgZnJvbSBhIGRpZmZlcmVudCBydW4/IFRyeSBzcGVjaWZ5aW5nIGEgZ2l0aHViLXRva2VuIHdpdGggXFxgYWN0aW9uczpyZWFkXFxgIHNjb3BlLmApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhcnRpZmFjdHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgY29yZS53YXJuaW5nKCdNdWx0aXBsZSBhcnRpZmFjdHMgZm91bmQsIGRlZmF1bHRpbmcgdG8gZmlyc3QuJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2lnbmVkUmVxID0ge1xuICAgICAgICAgICAgd29ya2Zsb3dSdW5CYWNrZW5kSWQ6IGFydGlmYWN0c1swXS53b3JrZmxvd1J1bkJhY2tlbmRJZCxcbiAgICAgICAgICAgIHdvcmtmbG93Sm9iUnVuQmFja2VuZElkOiBhcnRpZmFjdHNbMF0ud29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQsXG4gICAgICAgICAgICBuYW1lOiBhcnRpZmFjdHNbMF0ubmFtZVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB7IHNpZ25lZFVybCB9ID0geWllbGQgYXJ0aWZhY3RDbGllbnQuR2V0U2lnbmVkQXJ0aWZhY3RVUkwoc2lnbmVkUmVxKTtcbiAgICAgICAgY29yZS5pbmZvKGBSZWRpcmVjdGluZyB0byBibG9iIGRvd25sb2FkIHVybDogJHtzY3J1YlF1ZXJ5UGFyYW1ldGVycyhzaWduZWRVcmwpfWApO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29yZS5pbmZvKGBTdGFydGluZyBkb3dubG9hZCBvZiBhcnRpZmFjdCB0bzogJHtkb3dubG9hZFBhdGh9YCk7XG4gICAgICAgICAgICB5aWVsZCBzdHJlYW1FeHRyYWN0KHNpZ25lZFVybCwgZG93bmxvYWRQYXRoKTtcbiAgICAgICAgICAgIGNvcmUuaW5mbyhgQXJ0aWZhY3QgZG93bmxvYWQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5gKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGRvd25sb2FkIGFuZCBleHRyYWN0IGFydGlmYWN0OiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgZG93bmxvYWRQYXRoIH07XG4gICAgfSk7XG59XG5leHBvcnRzLmRvd25sb2FkQXJ0aWZhY3RJbnRlcm5hbCA9IGRvd25sb2FkQXJ0aWZhY3RJbnRlcm5hbDtcbmZ1bmN0aW9uIHJlc29sdmVPckNyZWF0ZURpcmVjdG9yeShkb3dubG9hZFBhdGggPSAoMCwgY29uZmlnXzEuZ2V0R2l0SHViV29ya3NwYWNlRGlyKSgpKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgaWYgKCEoeWllbGQgZXhpc3RzKGRvd25sb2FkUGF0aCkpKSB7XG4gICAgICAgICAgICBjb3JlLmRlYnVnKGBBcnRpZmFjdCBkZXN0aW5hdGlvbiBmb2xkZXIgZG9lcyBub3QgZXhpc3QsIGNyZWF0aW5nOiAke2Rvd25sb2FkUGF0aH1gKTtcbiAgICAgICAgICAgIHlpZWxkIHByb21pc2VzXzEuZGVmYXVsdC5ta2Rpcihkb3dubG9hZFBhdGgsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29yZS5kZWJ1ZyhgQXJ0aWZhY3QgZGVzdGluYXRpb24gZm9sZGVyIGFscmVhZHkgZXhpc3RzOiAke2Rvd25sb2FkUGF0aH1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZG93bmxvYWRQYXRoO1xuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZG93bmxvYWQtYXJ0aWZhY3QuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRSZXRyeU9wdGlvbnMgPSB2b2lkIDA7XG5jb25zdCBjb3JlID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJAYWN0aW9ucy9jb3JlXCIpKTtcbi8vIERlZmF1bHRzIGZvciBmZXRjaGluZyBhcnRpZmFjdHNcbmNvbnN0IGRlZmF1bHRNYXhSZXRyeU51bWJlciA9IDU7XG5jb25zdCBkZWZhdWx0RXhlbXB0U3RhdHVzQ29kZXMgPSBbNDAwLCA0MDEsIDQwMywgNDA0LCA0MjJdOyAvLyBodHRwczovL2dpdGh1Yi5jb20vb2N0b2tpdC9wbHVnaW4tcmV0cnkuanMvYmxvYi85YTI0NDM3NDZjMzUwYjNiZWVkZWMzNWNmMjZlMTk3ZWEzMThhMjYxL3NyYy9pbmRleC50cyNMMTRcbmZ1bmN0aW9uIGdldFJldHJ5T3B0aW9ucyhkZWZhdWx0T3B0aW9ucywgcmV0cmllcyA9IGRlZmF1bHRNYXhSZXRyeU51bWJlciwgZXhlbXB0U3RhdHVzQ29kZXMgPSBkZWZhdWx0RXhlbXB0U3RhdHVzQ29kZXMpIHtcbiAgICB2YXIgX2E7XG4gICAgaWYgKHJldHJpZXMgPD0gMCkge1xuICAgICAgICByZXR1cm4gW3sgZW5hYmxlZDogZmFsc2UgfSwgZGVmYXVsdE9wdGlvbnMucmVxdWVzdF07XG4gICAgfVxuICAgIGNvbnN0IHJldHJ5T3B0aW9ucyA9IHtcbiAgICAgICAgZW5hYmxlZDogdHJ1ZVxuICAgIH07XG4gICAgaWYgKGV4ZW1wdFN0YXR1c0NvZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0cnlPcHRpb25zLmRvTm90UmV0cnkgPSBleGVtcHRTdGF0dXNDb2RlcztcbiAgICB9XG4gICAgLy8gVGhlIEdpdEh1YiB0eXBlIGhhcyBzb21lIGRlZmF1bHRzIGZvciBgb3B0aW9ucy5yZXF1ZXN0YFxuICAgIC8vIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2FjdGlvbnMvdG9vbGtpdC9ibG9iLzRmYmM1Yzk0MWE1NzI0OWIxOTU2MjAxNWVkYmQ3MmFkZDE0YmU5M2QvcGFja2FnZXMvZ2l0aHViL3NyYy91dGlscy50cyNMMTVcbiAgICAvLyBXZSBwYXNzIHRoZXNlIGluIGhlcmUgc28gdGhleSBhcmUgbm90IG92ZXJyaWRkZW4uXG4gICAgY29uc3QgcmVxdWVzdE9wdGlvbnMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRPcHRpb25zLnJlcXVlc3QpLCB7IHJldHJpZXMgfSk7XG4gICAgY29yZS5kZWJ1ZyhgR2l0SHViIGNsaWVudCBjb25maWd1cmVkIHdpdGg6IChyZXRyaWVzOiAke3JlcXVlc3RPcHRpb25zLnJldHJpZXN9LCByZXRyeS1leGVtcHQtc3RhdHVzLWNvZGU6ICR7KF9hID0gcmV0cnlPcHRpb25zLmRvTm90UmV0cnkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICdvY3Rva2l0IGRlZmF1bHQ6IFs0MDAsIDQwMSwgNDAzLCA0MDQsIDQyMl0nfSlgKTtcbiAgICByZXR1cm4gW3JldHJ5T3B0aW9ucywgcmVxdWVzdE9wdGlvbnNdO1xufVxuZXhwb3J0cy5nZXRSZXRyeU9wdGlvbnMgPSBnZXRSZXRyeU9wdGlvbnM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZXRyeS1vcHRpb25zLmpzLm1hcCIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jb25zdCBWRVJTSU9OID0gXCIxLjAuNFwiO1xuXG4vKipcbiAqIEBwYXJhbSBvY3Rva2l0IE9jdG9raXQgaW5zdGFuY2VcbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgcGFzc2VkIHRvIE9jdG9raXQgY29uc3RydWN0b3JcbiAqL1xuXG5mdW5jdGlvbiByZXF1ZXN0TG9nKG9jdG9raXQpIHtcbiAgb2N0b2tpdC5ob29rLndyYXAoXCJyZXF1ZXN0XCIsIChyZXF1ZXN0LCBvcHRpb25zKSA9PiB7XG4gICAgb2N0b2tpdC5sb2cuZGVidWcoXCJyZXF1ZXN0XCIsIG9wdGlvbnMpO1xuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCByZXF1ZXN0T3B0aW9ucyA9IG9jdG9raXQucmVxdWVzdC5lbmRwb2ludC5wYXJzZShvcHRpb25zKTtcbiAgICBjb25zdCBwYXRoID0gcmVxdWVzdE9wdGlvbnMudXJsLnJlcGxhY2Uob3B0aW9ucy5iYXNlVXJsLCBcIlwiKTtcbiAgICByZXR1cm4gcmVxdWVzdChvcHRpb25zKS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgIG9jdG9raXQubG9nLmluZm8oYCR7cmVxdWVzdE9wdGlvbnMubWV0aG9kfSAke3BhdGh9IC0gJHtyZXNwb25zZS5zdGF0dXN9IGluICR7RGF0ZS5ub3coKSAtIHN0YXJ0fW1zYCk7XG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgb2N0b2tpdC5sb2cuaW5mbyhgJHtyZXF1ZXN0T3B0aW9ucy5tZXRob2R9ICR7cGF0aH0gLSAke2Vycm9yLnN0YXR1c30gaW4gJHtEYXRlLm5vdygpIC0gc3RhcnR9bXNgKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0pO1xuICB9KTtcbn1cbnJlcXVlc3RMb2cuVkVSU0lPTiA9IFZFUlNJT047XG5cbmV4cG9ydHMucmVxdWVzdExvZyA9IHJlcXVlc3RMb2c7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcbiIsCiAgICAiLyoqXG4gICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBCb3R0bGVuZWNrIGxpYnJhcnkgKE1JVCksIGNvbXBpbGVkIHRvIEVTMjAxNywgYW5kIHdpdGhvdXQgQ2x1c3RlcmluZyBzdXBwb3J0LlxuICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9TR3JvbmRpbi9ib3R0bGVuZWNrXG4gICovXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuXHR0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKSA6XG5cdHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShmYWN0b3J5KSA6XG5cdChnbG9iYWwuQm90dGxlbmVjayA9IGZhY3RvcnkoKSk7XG59KHRoaXMsIChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JztcblxuXHR2YXIgY29tbW9uanNHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWxUaGlzIDogdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiB0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyA/IHNlbGYgOiB7fTtcblxuXHRmdW5jdGlvbiBnZXRDanNFeHBvcnRGcm9tTmFtZXNwYWNlIChuKSB7XG5cdFx0cmV0dXJuIG4gJiYgblsnZGVmYXVsdCddIHx8IG47XG5cdH1cblxuXHR2YXIgbG9hZCA9IGZ1bmN0aW9uKHJlY2VpdmVkLCBkZWZhdWx0cywgb250byA9IHt9KSB7XG5cdCAgdmFyIGssIHJlZiwgdjtcblx0ICBmb3IgKGsgaW4gZGVmYXVsdHMpIHtcblx0ICAgIHYgPSBkZWZhdWx0c1trXTtcblx0ICAgIG9udG9ba10gPSAocmVmID0gcmVjZWl2ZWRba10pICE9IG51bGwgPyByZWYgOiB2O1xuXHQgIH1cblx0ICByZXR1cm4gb250bztcblx0fTtcblxuXHR2YXIgb3ZlcndyaXRlID0gZnVuY3Rpb24ocmVjZWl2ZWQsIGRlZmF1bHRzLCBvbnRvID0ge30pIHtcblx0ICB2YXIgaywgdjtcblx0ICBmb3IgKGsgaW4gcmVjZWl2ZWQpIHtcblx0ICAgIHYgPSByZWNlaXZlZFtrXTtcblx0ICAgIGlmIChkZWZhdWx0c1trXSAhPT0gdm9pZCAwKSB7XG5cdCAgICAgIG9udG9ba10gPSB2O1xuXHQgICAgfVxuXHQgIH1cblx0ICByZXR1cm4gb250bztcblx0fTtcblxuXHR2YXIgcGFyc2VyID0ge1xuXHRcdGxvYWQ6IGxvYWQsXG5cdFx0b3ZlcndyaXRlOiBvdmVyd3JpdGVcblx0fTtcblxuXHR2YXIgRExMaXN0O1xuXG5cdERMTGlzdCA9IGNsYXNzIERMTGlzdCB7XG5cdCAgY29uc3RydWN0b3IoaW5jciwgZGVjcikge1xuXHQgICAgdGhpcy5pbmNyID0gaW5jcjtcblx0ICAgIHRoaXMuZGVjciA9IGRlY3I7XG5cdCAgICB0aGlzLl9maXJzdCA9IG51bGw7XG5cdCAgICB0aGlzLl9sYXN0ID0gbnVsbDtcblx0ICAgIHRoaXMubGVuZ3RoID0gMDtcblx0ICB9XG5cblx0ICBwdXNoKHZhbHVlKSB7XG5cdCAgICB2YXIgbm9kZTtcblx0ICAgIHRoaXMubGVuZ3RoKys7XG5cdCAgICBpZiAodHlwZW9mIHRoaXMuaW5jciA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdCAgICAgIHRoaXMuaW5jcigpO1xuXHQgICAgfVxuXHQgICAgbm9kZSA9IHtcblx0ICAgICAgdmFsdWUsXG5cdCAgICAgIHByZXY6IHRoaXMuX2xhc3QsXG5cdCAgICAgIG5leHQ6IG51bGxcblx0ICAgIH07XG5cdCAgICBpZiAodGhpcy5fbGFzdCAhPSBudWxsKSB7XG5cdCAgICAgIHRoaXMuX2xhc3QubmV4dCA9IG5vZGU7XG5cdCAgICAgIHRoaXMuX2xhc3QgPSBub2RlO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgdGhpcy5fZmlyc3QgPSB0aGlzLl9sYXN0ID0gbm9kZTtcblx0ICAgIH1cblx0ICAgIHJldHVybiB2b2lkIDA7XG5cdCAgfVxuXG5cdCAgc2hpZnQoKSB7XG5cdCAgICB2YXIgdmFsdWU7XG5cdCAgICBpZiAodGhpcy5fZmlyc3QgPT0gbnVsbCkge1xuXHQgICAgICByZXR1cm47XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICB0aGlzLmxlbmd0aC0tO1xuXHQgICAgICBpZiAodHlwZW9mIHRoaXMuZGVjciA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdCAgICAgICAgdGhpcy5kZWNyKCk7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICAgIHZhbHVlID0gdGhpcy5fZmlyc3QudmFsdWU7XG5cdCAgICBpZiAoKHRoaXMuX2ZpcnN0ID0gdGhpcy5fZmlyc3QubmV4dCkgIT0gbnVsbCkge1xuXHQgICAgICB0aGlzLl9maXJzdC5wcmV2ID0gbnVsbDtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIHRoaXMuX2xhc3QgPSBudWxsO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIHZhbHVlO1xuXHQgIH1cblxuXHQgIGZpcnN0KCkge1xuXHQgICAgaWYgKHRoaXMuX2ZpcnN0ICE9IG51bGwpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX2ZpcnN0LnZhbHVlO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIGdldEFycmF5KCkge1xuXHQgICAgdmFyIG5vZGUsIHJlZiwgcmVzdWx0cztcblx0ICAgIG5vZGUgPSB0aGlzLl9maXJzdDtcblx0ICAgIHJlc3VsdHMgPSBbXTtcblx0ICAgIHdoaWxlIChub2RlICE9IG51bGwpIHtcblx0ICAgICAgcmVzdWx0cy5wdXNoKChyZWYgPSBub2RlLCBub2RlID0gbm9kZS5uZXh0LCByZWYudmFsdWUpKTtcblx0ICAgIH1cblx0ICAgIHJldHVybiByZXN1bHRzO1xuXHQgIH1cblxuXHQgIGZvckVhY2hTaGlmdChjYikge1xuXHQgICAgdmFyIG5vZGU7XG5cdCAgICBub2RlID0gdGhpcy5zaGlmdCgpO1xuXHQgICAgd2hpbGUgKG5vZGUgIT0gbnVsbCkge1xuXHQgICAgICAoY2Iobm9kZSksIG5vZGUgPSB0aGlzLnNoaWZ0KCkpO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIHZvaWQgMDtcblx0ICB9XG5cblx0ICBkZWJ1ZygpIHtcblx0ICAgIHZhciBub2RlLCByZWYsIHJlZjEsIHJlZjIsIHJlc3VsdHM7XG5cdCAgICBub2RlID0gdGhpcy5fZmlyc3Q7XG5cdCAgICByZXN1bHRzID0gW107XG5cdCAgICB3aGlsZSAobm9kZSAhPSBudWxsKSB7XG5cdCAgICAgIHJlc3VsdHMucHVzaCgocmVmID0gbm9kZSwgbm9kZSA9IG5vZGUubmV4dCwge1xuXHQgICAgICAgIHZhbHVlOiByZWYudmFsdWUsXG5cdCAgICAgICAgcHJldjogKHJlZjEgPSByZWYucHJldikgIT0gbnVsbCA/IHJlZjEudmFsdWUgOiB2b2lkIDAsXG5cdCAgICAgICAgbmV4dDogKHJlZjIgPSByZWYubmV4dCkgIT0gbnVsbCA/IHJlZjIudmFsdWUgOiB2b2lkIDBcblx0ICAgICAgfSkpO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIHJlc3VsdHM7XG5cdCAgfVxuXG5cdH07XG5cblx0dmFyIERMTGlzdF8xID0gRExMaXN0O1xuXG5cdHZhciBFdmVudHM7XG5cblx0RXZlbnRzID0gY2xhc3MgRXZlbnRzIHtcblx0ICBjb25zdHJ1Y3RvcihpbnN0YW5jZSkge1xuXHQgICAgdGhpcy5pbnN0YW5jZSA9IGluc3RhbmNlO1xuXHQgICAgdGhpcy5fZXZlbnRzID0ge307XG5cdCAgICBpZiAoKHRoaXMuaW5zdGFuY2Uub24gIT0gbnVsbCkgfHwgKHRoaXMuaW5zdGFuY2Uub25jZSAhPSBudWxsKSB8fCAodGhpcy5pbnN0YW5jZS5yZW1vdmVBbGxMaXN0ZW5lcnMgIT0gbnVsbCkpIHtcblx0ICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQW4gRW1pdHRlciBhbHJlYWR5IGV4aXN0cyBmb3IgdGhpcyBvYmplY3RcIik7XG5cdCAgICB9XG5cdCAgICB0aGlzLmluc3RhbmNlLm9uID0gKG5hbWUsIGNiKSA9PiB7XG5cdCAgICAgIHJldHVybiB0aGlzLl9hZGRMaXN0ZW5lcihuYW1lLCBcIm1hbnlcIiwgY2IpO1xuXHQgICAgfTtcblx0ICAgIHRoaXMuaW5zdGFuY2Uub25jZSA9IChuYW1lLCBjYikgPT4ge1xuXHQgICAgICByZXR1cm4gdGhpcy5fYWRkTGlzdGVuZXIobmFtZSwgXCJvbmNlXCIsIGNiKTtcblx0ICAgIH07XG5cdCAgICB0aGlzLmluc3RhbmNlLnJlbW92ZUFsbExpc3RlbmVycyA9IChuYW1lID0gbnVsbCkgPT4ge1xuXHQgICAgICBpZiAobmFtZSAhPSBudWxsKSB7XG5cdCAgICAgICAgcmV0dXJuIGRlbGV0ZSB0aGlzLl9ldmVudHNbbmFtZV07XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2V2ZW50cyA9IHt9O1xuXHQgICAgICB9XG5cdCAgICB9O1xuXHQgIH1cblxuXHQgIF9hZGRMaXN0ZW5lcihuYW1lLCBzdGF0dXMsIGNiKSB7XG5cdCAgICB2YXIgYmFzZTtcblx0ICAgIGlmICgoYmFzZSA9IHRoaXMuX2V2ZW50cylbbmFtZV0gPT0gbnVsbCkge1xuXHQgICAgICBiYXNlW25hbWVdID0gW107XG5cdCAgICB9XG5cdCAgICB0aGlzLl9ldmVudHNbbmFtZV0ucHVzaCh7Y2IsIHN0YXR1c30pO1xuXHQgICAgcmV0dXJuIHRoaXMuaW5zdGFuY2U7XG5cdCAgfVxuXG5cdCAgbGlzdGVuZXJDb3VudChuYW1lKSB7XG5cdCAgICBpZiAodGhpcy5fZXZlbnRzW25hbWVdICE9IG51bGwpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX2V2ZW50c1tuYW1lXS5sZW5ndGg7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICByZXR1cm4gMDtcblx0ICAgIH1cblx0ICB9XG5cblx0ICBhc3luYyB0cmlnZ2VyKG5hbWUsIC4uLmFyZ3MpIHtcblx0ICAgIHZhciBlLCBwcm9taXNlcztcblx0ICAgIHRyeSB7XG5cdCAgICAgIGlmIChuYW1lICE9PSBcImRlYnVnXCIpIHtcblx0ICAgICAgICB0aGlzLnRyaWdnZXIoXCJkZWJ1Z1wiLCBgRXZlbnQgdHJpZ2dlcmVkOiAke25hbWV9YCwgYXJncyk7XG5cdCAgICAgIH1cblx0ICAgICAgaWYgKHRoaXMuX2V2ZW50c1tuYW1lXSA9PSBudWxsKSB7XG5cdCAgICAgICAgcmV0dXJuO1xuXHQgICAgICB9XG5cdCAgICAgIHRoaXMuX2V2ZW50c1tuYW1lXSA9IHRoaXMuX2V2ZW50c1tuYW1lXS5maWx0ZXIoZnVuY3Rpb24obGlzdGVuZXIpIHtcblx0ICAgICAgICByZXR1cm4gbGlzdGVuZXIuc3RhdHVzICE9PSBcIm5vbmVcIjtcblx0ICAgICAgfSk7XG5cdCAgICAgIHByb21pc2VzID0gdGhpcy5fZXZlbnRzW25hbWVdLm1hcChhc3luYyhsaXN0ZW5lcikgPT4ge1xuXHQgICAgICAgIHZhciBlLCByZXR1cm5lZDtcblx0ICAgICAgICBpZiAobGlzdGVuZXIuc3RhdHVzID09PSBcIm5vbmVcIikge1xuXHQgICAgICAgICAgcmV0dXJuO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAobGlzdGVuZXIuc3RhdHVzID09PSBcIm9uY2VcIikge1xuXHQgICAgICAgICAgbGlzdGVuZXIuc3RhdHVzID0gXCJub25lXCI7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRyeSB7XG5cdCAgICAgICAgICByZXR1cm5lZCA9IHR5cGVvZiBsaXN0ZW5lci5jYiA9PT0gXCJmdW5jdGlvblwiID8gbGlzdGVuZXIuY2IoLi4uYXJncykgOiB2b2lkIDA7XG5cdCAgICAgICAgICBpZiAodHlwZW9mIChyZXR1cm5lZCAhPSBudWxsID8gcmV0dXJuZWQudGhlbiA6IHZvaWQgMCkgPT09IFwiZnVuY3Rpb25cIikge1xuXHQgICAgICAgICAgICByZXR1cm4gKGF3YWl0IHJldHVybmVkKTtcblx0ICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiByZXR1cm5lZDtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuXHQgICAgICAgICAgZSA9IGVycm9yO1xuXHQgICAgICAgICAge1xuXHQgICAgICAgICAgICB0aGlzLnRyaWdnZXIoXCJlcnJvclwiLCBlKTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICAgIHJldHVybiBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgfSk7XG5cdCAgICAgIHJldHVybiAoKGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKSkpLmZpbmQoZnVuY3Rpb24oeCkge1xuXHQgICAgICAgIHJldHVybiB4ICE9IG51bGw7XG5cdCAgICAgIH0pO1xuXHQgICAgfSBjYXRjaCAoZXJyb3IpIHtcblx0ICAgICAgZSA9IGVycm9yO1xuXHQgICAgICB7XG5cdCAgICAgICAgdGhpcy50cmlnZ2VyKFwiZXJyb3JcIiwgZSk7XG5cdCAgICAgIH1cblx0ICAgICAgcmV0dXJuIG51bGw7XG5cdCAgICB9XG5cdCAgfVxuXG5cdH07XG5cblx0dmFyIEV2ZW50c18xID0gRXZlbnRzO1xuXG5cdHZhciBETExpc3QkMSwgRXZlbnRzJDEsIFF1ZXVlcztcblxuXHRETExpc3QkMSA9IERMTGlzdF8xO1xuXG5cdEV2ZW50cyQxID0gRXZlbnRzXzE7XG5cblx0UXVldWVzID0gY2xhc3MgUXVldWVzIHtcblx0ICBjb25zdHJ1Y3RvcihudW1fcHJpb3JpdGllcykge1xuXHQgICAgdmFyIGk7XG5cdCAgICB0aGlzLkV2ZW50cyA9IG5ldyBFdmVudHMkMSh0aGlzKTtcblx0ICAgIHRoaXMuX2xlbmd0aCA9IDA7XG5cdCAgICB0aGlzLl9saXN0cyA9IChmdW5jdGlvbigpIHtcblx0ICAgICAgdmFyIGosIHJlZiwgcmVzdWx0cztcblx0ICAgICAgcmVzdWx0cyA9IFtdO1xuXHQgICAgICBmb3IgKGkgPSBqID0gMSwgcmVmID0gbnVtX3ByaW9yaXRpZXM7ICgxIDw9IHJlZiA/IGogPD0gcmVmIDogaiA+PSByZWYpOyBpID0gMSA8PSByZWYgPyArK2ogOiAtLWopIHtcblx0ICAgICAgICByZXN1bHRzLnB1c2gobmV3IERMTGlzdCQxKCgoKSA9PiB7XG5cdCAgICAgICAgICByZXR1cm4gdGhpcy5pbmNyKCk7XG5cdCAgICAgICAgfSksICgoKSA9PiB7XG5cdCAgICAgICAgICByZXR1cm4gdGhpcy5kZWNyKCk7XG5cdCAgICAgICAgfSkpKTtcblx0ICAgICAgfVxuXHQgICAgICByZXR1cm4gcmVzdWx0cztcblx0ICAgIH0pLmNhbGwodGhpcyk7XG5cdCAgfVxuXG5cdCAgaW5jcigpIHtcblx0ICAgIGlmICh0aGlzLl9sZW5ndGgrKyA9PT0gMCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5FdmVudHMudHJpZ2dlcihcImxlZnR6ZXJvXCIpO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIGRlY3IoKSB7XG5cdCAgICBpZiAoLS10aGlzLl9sZW5ndGggPT09IDApIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuRXZlbnRzLnRyaWdnZXIoXCJ6ZXJvXCIpO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIHB1c2goam9iKSB7XG5cdCAgICByZXR1cm4gdGhpcy5fbGlzdHNbam9iLm9wdGlvbnMucHJpb3JpdHldLnB1c2goam9iKTtcblx0ICB9XG5cblx0ICBxdWV1ZWQocHJpb3JpdHkpIHtcblx0ICAgIGlmIChwcmlvcml0eSAhPSBudWxsKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLl9saXN0c1twcmlvcml0eV0ubGVuZ3RoO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX2xlbmd0aDtcblx0ICAgIH1cblx0ICB9XG5cblx0ICBzaGlmdEFsbChmbikge1xuXHQgICAgcmV0dXJuIHRoaXMuX2xpc3RzLmZvckVhY2goZnVuY3Rpb24obGlzdCkge1xuXHQgICAgICByZXR1cm4gbGlzdC5mb3JFYWNoU2hpZnQoZm4pO1xuXHQgICAgfSk7XG5cdCAgfVxuXG5cdCAgZ2V0Rmlyc3QoYXJyID0gdGhpcy5fbGlzdHMpIHtcblx0ICAgIHZhciBqLCBsZW4sIGxpc3Q7XG5cdCAgICBmb3IgKGogPSAwLCBsZW4gPSBhcnIubGVuZ3RoOyBqIDwgbGVuOyBqKyspIHtcblx0ICAgICAgbGlzdCA9IGFycltqXTtcblx0ICAgICAgaWYgKGxpc3QubGVuZ3RoID4gMCkge1xuXHQgICAgICAgIHJldHVybiBsaXN0O1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgICByZXR1cm4gW107XG5cdCAgfVxuXG5cdCAgc2hpZnRMYXN0RnJvbShwcmlvcml0eSkge1xuXHQgICAgcmV0dXJuIHRoaXMuZ2V0Rmlyc3QodGhpcy5fbGlzdHMuc2xpY2UocHJpb3JpdHkpLnJldmVyc2UoKSkuc2hpZnQoKTtcblx0ICB9XG5cblx0fTtcblxuXHR2YXIgUXVldWVzXzEgPSBRdWV1ZXM7XG5cblx0dmFyIEJvdHRsZW5lY2tFcnJvcjtcblxuXHRCb3R0bGVuZWNrRXJyb3IgPSBjbGFzcyBCb3R0bGVuZWNrRXJyb3IgZXh0ZW5kcyBFcnJvciB7fTtcblxuXHR2YXIgQm90dGxlbmVja0Vycm9yXzEgPSBCb3R0bGVuZWNrRXJyb3I7XG5cblx0dmFyIEJvdHRsZW5lY2tFcnJvciQxLCBERUZBVUxUX1BSSU9SSVRZLCBKb2IsIE5VTV9QUklPUklUSUVTLCBwYXJzZXIkMTtcblxuXHROVU1fUFJJT1JJVElFUyA9IDEwO1xuXG5cdERFRkFVTFRfUFJJT1JJVFkgPSA1O1xuXG5cdHBhcnNlciQxID0gcGFyc2VyO1xuXG5cdEJvdHRsZW5lY2tFcnJvciQxID0gQm90dGxlbmVja0Vycm9yXzE7XG5cblx0Sm9iID0gY2xhc3MgSm9iIHtcblx0ICBjb25zdHJ1Y3Rvcih0YXNrLCBhcmdzLCBvcHRpb25zLCBqb2JEZWZhdWx0cywgcmVqZWN0T25Ecm9wLCBFdmVudHMsIF9zdGF0ZXMsIFByb21pc2UpIHtcblx0ICAgIHRoaXMudGFzayA9IHRhc2s7XG5cdCAgICB0aGlzLmFyZ3MgPSBhcmdzO1xuXHQgICAgdGhpcy5yZWplY3RPbkRyb3AgPSByZWplY3RPbkRyb3A7XG5cdCAgICB0aGlzLkV2ZW50cyA9IEV2ZW50cztcblx0ICAgIHRoaXMuX3N0YXRlcyA9IF9zdGF0ZXM7XG5cdCAgICB0aGlzLlByb21pc2UgPSBQcm9taXNlO1xuXHQgICAgdGhpcy5vcHRpb25zID0gcGFyc2VyJDEubG9hZChvcHRpb25zLCBqb2JEZWZhdWx0cyk7XG5cdCAgICB0aGlzLm9wdGlvbnMucHJpb3JpdHkgPSB0aGlzLl9zYW5pdGl6ZVByaW9yaXR5KHRoaXMub3B0aW9ucy5wcmlvcml0eSk7XG5cdCAgICBpZiAodGhpcy5vcHRpb25zLmlkID09PSBqb2JEZWZhdWx0cy5pZCkge1xuXHQgICAgICB0aGlzLm9wdGlvbnMuaWQgPSBgJHt0aGlzLm9wdGlvbnMuaWR9LSR7dGhpcy5fcmFuZG9tSW5kZXgoKX1gO1xuXHQgICAgfVxuXHQgICAgdGhpcy5wcm9taXNlID0gbmV3IHRoaXMuUHJvbWlzZSgoX3Jlc29sdmUsIF9yZWplY3QpID0+IHtcblx0ICAgICAgdGhpcy5fcmVzb2x2ZSA9IF9yZXNvbHZlO1xuXHQgICAgICB0aGlzLl9yZWplY3QgPSBfcmVqZWN0O1xuXHQgICAgfSk7XG5cdCAgICB0aGlzLnJldHJ5Q291bnQgPSAwO1xuXHQgIH1cblxuXHQgIF9zYW5pdGl6ZVByaW9yaXR5KHByaW9yaXR5KSB7XG5cdCAgICB2YXIgc1Byb3BlcnR5O1xuXHQgICAgc1Byb3BlcnR5ID0gfn5wcmlvcml0eSAhPT0gcHJpb3JpdHkgPyBERUZBVUxUX1BSSU9SSVRZIDogcHJpb3JpdHk7XG5cdCAgICBpZiAoc1Byb3BlcnR5IDwgMCkge1xuXHQgICAgICByZXR1cm4gMDtcblx0ICAgIH0gZWxzZSBpZiAoc1Byb3BlcnR5ID4gTlVNX1BSSU9SSVRJRVMgLSAxKSB7XG5cdCAgICAgIHJldHVybiBOVU1fUFJJT1JJVElFUyAtIDE7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICByZXR1cm4gc1Byb3BlcnR5O1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIF9yYW5kb21JbmRleCgpIHtcblx0ICAgIHJldHVybiBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyKTtcblx0ICB9XG5cblx0ICBkb0Ryb3Aoe2Vycm9yLCBtZXNzYWdlID0gXCJUaGlzIGpvYiBoYXMgYmVlbiBkcm9wcGVkIGJ5IEJvdHRsZW5lY2tcIn0gPSB7fSkge1xuXHQgICAgaWYgKHRoaXMuX3N0YXRlcy5yZW1vdmUodGhpcy5vcHRpb25zLmlkKSkge1xuXHQgICAgICBpZiAodGhpcy5yZWplY3RPbkRyb3ApIHtcblx0ICAgICAgICB0aGlzLl9yZWplY3QoZXJyb3IgIT0gbnVsbCA/IGVycm9yIDogbmV3IEJvdHRsZW5lY2tFcnJvciQxKG1lc3NhZ2UpKTtcblx0ICAgICAgfVxuXHQgICAgICB0aGlzLkV2ZW50cy50cmlnZ2VyKFwiZHJvcHBlZFwiLCB7YXJnczogdGhpcy5hcmdzLCBvcHRpb25zOiB0aGlzLm9wdGlvbnMsIHRhc2s6IHRoaXMudGFzaywgcHJvbWlzZTogdGhpcy5wcm9taXNlfSk7XG5cdCAgICAgIHJldHVybiB0cnVlO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgcmV0dXJuIGZhbHNlO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIF9hc3NlcnRTdGF0dXMoZXhwZWN0ZWQpIHtcblx0ICAgIHZhciBzdGF0dXM7XG5cdCAgICBzdGF0dXMgPSB0aGlzLl9zdGF0ZXMuam9iU3RhdHVzKHRoaXMub3B0aW9ucy5pZCk7XG5cdCAgICBpZiAoIShzdGF0dXMgPT09IGV4cGVjdGVkIHx8IChleHBlY3RlZCA9PT0gXCJET05FXCIgJiYgc3RhdHVzID09PSBudWxsKSkpIHtcblx0ICAgICAgdGhyb3cgbmV3IEJvdHRsZW5lY2tFcnJvciQxKGBJbnZhbGlkIGpvYiBzdGF0dXMgJHtzdGF0dXN9LCBleHBlY3RlZCAke2V4cGVjdGVkfS4gUGxlYXNlIG9wZW4gYW4gaXNzdWUgYXQgaHR0cHM6Ly9naXRodWIuY29tL1NHcm9uZGluL2JvdHRsZW5lY2svaXNzdWVzYCk7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgZG9SZWNlaXZlKCkge1xuXHQgICAgdGhpcy5fc3RhdGVzLnN0YXJ0KHRoaXMub3B0aW9ucy5pZCk7XG5cdCAgICByZXR1cm4gdGhpcy5FdmVudHMudHJpZ2dlcihcInJlY2VpdmVkXCIsIHthcmdzOiB0aGlzLmFyZ3MsIG9wdGlvbnM6IHRoaXMub3B0aW9uc30pO1xuXHQgIH1cblxuXHQgIGRvUXVldWUocmVhY2hlZEhXTSwgYmxvY2tlZCkge1xuXHQgICAgdGhpcy5fYXNzZXJ0U3RhdHVzKFwiUkVDRUlWRURcIik7XG5cdCAgICB0aGlzLl9zdGF0ZXMubmV4dCh0aGlzLm9wdGlvbnMuaWQpO1xuXHQgICAgcmV0dXJuIHRoaXMuRXZlbnRzLnRyaWdnZXIoXCJxdWV1ZWRcIiwge2FyZ3M6IHRoaXMuYXJncywgb3B0aW9uczogdGhpcy5vcHRpb25zLCByZWFjaGVkSFdNLCBibG9ja2VkfSk7XG5cdCAgfVxuXG5cdCAgZG9SdW4oKSB7XG5cdCAgICBpZiAodGhpcy5yZXRyeUNvdW50ID09PSAwKSB7XG5cdCAgICAgIHRoaXMuX2Fzc2VydFN0YXR1cyhcIlFVRVVFRFwiKTtcblx0ICAgICAgdGhpcy5fc3RhdGVzLm5leHQodGhpcy5vcHRpb25zLmlkKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIHRoaXMuX2Fzc2VydFN0YXR1cyhcIkVYRUNVVElOR1wiKTtcblx0ICAgIH1cblx0ICAgIHJldHVybiB0aGlzLkV2ZW50cy50cmlnZ2VyKFwic2NoZWR1bGVkXCIsIHthcmdzOiB0aGlzLmFyZ3MsIG9wdGlvbnM6IHRoaXMub3B0aW9uc30pO1xuXHQgIH1cblxuXHQgIGFzeW5jIGRvRXhlY3V0ZShjaGFpbmVkLCBjbGVhckdsb2JhbFN0YXRlLCBydW4sIGZyZWUpIHtcblx0ICAgIHZhciBlcnJvciwgZXZlbnRJbmZvLCBwYXNzZWQ7XG5cdCAgICBpZiAodGhpcy5yZXRyeUNvdW50ID09PSAwKSB7XG5cdCAgICAgIHRoaXMuX2Fzc2VydFN0YXR1cyhcIlJVTk5JTkdcIik7XG5cdCAgICAgIHRoaXMuX3N0YXRlcy5uZXh0KHRoaXMub3B0aW9ucy5pZCk7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICB0aGlzLl9hc3NlcnRTdGF0dXMoXCJFWEVDVVRJTkdcIik7XG5cdCAgICB9XG5cdCAgICBldmVudEluZm8gPSB7YXJnczogdGhpcy5hcmdzLCBvcHRpb25zOiB0aGlzLm9wdGlvbnMsIHJldHJ5Q291bnQ6IHRoaXMucmV0cnlDb3VudH07XG5cdCAgICB0aGlzLkV2ZW50cy50cmlnZ2VyKFwiZXhlY3V0aW5nXCIsIGV2ZW50SW5mbyk7XG5cdCAgICB0cnkge1xuXHQgICAgICBwYXNzZWQgPSAoYXdhaXQgKGNoYWluZWQgIT0gbnVsbCA/IGNoYWluZWQuc2NoZWR1bGUodGhpcy5vcHRpb25zLCB0aGlzLnRhc2ssIC4uLnRoaXMuYXJncykgOiB0aGlzLnRhc2soLi4udGhpcy5hcmdzKSkpO1xuXHQgICAgICBpZiAoY2xlYXJHbG9iYWxTdGF0ZSgpKSB7XG5cdCAgICAgICAgdGhpcy5kb0RvbmUoZXZlbnRJbmZvKTtcblx0ICAgICAgICBhd2FpdCBmcmVlKHRoaXMub3B0aW9ucywgZXZlbnRJbmZvKTtcblx0ICAgICAgICB0aGlzLl9hc3NlcnRTdGF0dXMoXCJET05FXCIpO1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9yZXNvbHZlKHBhc3NlZCk7XG5cdCAgICAgIH1cblx0ICAgIH0gY2F0Y2ggKGVycm9yMSkge1xuXHQgICAgICBlcnJvciA9IGVycm9yMTtcblx0ICAgICAgcmV0dXJuIHRoaXMuX29uRmFpbHVyZShlcnJvciwgZXZlbnRJbmZvLCBjbGVhckdsb2JhbFN0YXRlLCBydW4sIGZyZWUpO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIGRvRXhwaXJlKGNsZWFyR2xvYmFsU3RhdGUsIHJ1biwgZnJlZSkge1xuXHQgICAgdmFyIGVycm9yLCBldmVudEluZm87XG5cdCAgICBpZiAodGhpcy5fc3RhdGVzLmpvYlN0YXR1cyh0aGlzLm9wdGlvbnMuaWQgPT09IFwiUlVOTklOR1wiKSkge1xuXHQgICAgICB0aGlzLl9zdGF0ZXMubmV4dCh0aGlzLm9wdGlvbnMuaWQpO1xuXHQgICAgfVxuXHQgICAgdGhpcy5fYXNzZXJ0U3RhdHVzKFwiRVhFQ1VUSU5HXCIpO1xuXHQgICAgZXZlbnRJbmZvID0ge2FyZ3M6IHRoaXMuYXJncywgb3B0aW9uczogdGhpcy5vcHRpb25zLCByZXRyeUNvdW50OiB0aGlzLnJldHJ5Q291bnR9O1xuXHQgICAgZXJyb3IgPSBuZXcgQm90dGxlbmVja0Vycm9yJDEoYFRoaXMgam9iIHRpbWVkIG91dCBhZnRlciAke3RoaXMub3B0aW9ucy5leHBpcmF0aW9ufSBtcy5gKTtcblx0ICAgIHJldHVybiB0aGlzLl9vbkZhaWx1cmUoZXJyb3IsIGV2ZW50SW5mbywgY2xlYXJHbG9iYWxTdGF0ZSwgcnVuLCBmcmVlKTtcblx0ICB9XG5cblx0ICBhc3luYyBfb25GYWlsdXJlKGVycm9yLCBldmVudEluZm8sIGNsZWFyR2xvYmFsU3RhdGUsIHJ1biwgZnJlZSkge1xuXHQgICAgdmFyIHJldHJ5LCByZXRyeUFmdGVyO1xuXHQgICAgaWYgKGNsZWFyR2xvYmFsU3RhdGUoKSkge1xuXHQgICAgICByZXRyeSA9IChhd2FpdCB0aGlzLkV2ZW50cy50cmlnZ2VyKFwiZmFpbGVkXCIsIGVycm9yLCBldmVudEluZm8pKTtcblx0ICAgICAgaWYgKHJldHJ5ICE9IG51bGwpIHtcblx0ICAgICAgICByZXRyeUFmdGVyID0gfn5yZXRyeTtcblx0ICAgICAgICB0aGlzLkV2ZW50cy50cmlnZ2VyKFwicmV0cnlcIiwgYFJldHJ5aW5nICR7dGhpcy5vcHRpb25zLmlkfSBhZnRlciAke3JldHJ5QWZ0ZXJ9IG1zYCwgZXZlbnRJbmZvKTtcblx0ICAgICAgICB0aGlzLnJldHJ5Q291bnQrKztcblx0ICAgICAgICByZXR1cm4gcnVuKHJldHJ5QWZ0ZXIpO1xuXHQgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIHRoaXMuZG9Eb25lKGV2ZW50SW5mbyk7XG5cdCAgICAgICAgYXdhaXQgZnJlZSh0aGlzLm9wdGlvbnMsIGV2ZW50SW5mbyk7XG5cdCAgICAgICAgdGhpcy5fYXNzZXJ0U3RhdHVzKFwiRE9ORVwiKTtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fcmVqZWN0KGVycm9yKTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH1cblxuXHQgIGRvRG9uZShldmVudEluZm8pIHtcblx0ICAgIHRoaXMuX2Fzc2VydFN0YXR1cyhcIkVYRUNVVElOR1wiKTtcblx0ICAgIHRoaXMuX3N0YXRlcy5uZXh0KHRoaXMub3B0aW9ucy5pZCk7XG5cdCAgICByZXR1cm4gdGhpcy5FdmVudHMudHJpZ2dlcihcImRvbmVcIiwgZXZlbnRJbmZvKTtcblx0ICB9XG5cblx0fTtcblxuXHR2YXIgSm9iXzEgPSBKb2I7XG5cblx0dmFyIEJvdHRsZW5lY2tFcnJvciQyLCBMb2NhbERhdGFzdG9yZSwgcGFyc2VyJDI7XG5cblx0cGFyc2VyJDIgPSBwYXJzZXI7XG5cblx0Qm90dGxlbmVja0Vycm9yJDIgPSBCb3R0bGVuZWNrRXJyb3JfMTtcblxuXHRMb2NhbERhdGFzdG9yZSA9IGNsYXNzIExvY2FsRGF0YXN0b3JlIHtcblx0ICBjb25zdHJ1Y3RvcihpbnN0YW5jZSwgc3RvcmVPcHRpb25zLCBzdG9yZUluc3RhbmNlT3B0aW9ucykge1xuXHQgICAgdGhpcy5pbnN0YW5jZSA9IGluc3RhbmNlO1xuXHQgICAgdGhpcy5zdG9yZU9wdGlvbnMgPSBzdG9yZU9wdGlvbnM7XG5cdCAgICB0aGlzLmNsaWVudElkID0gdGhpcy5pbnN0YW5jZS5fcmFuZG9tSW5kZXgoKTtcblx0ICAgIHBhcnNlciQyLmxvYWQoc3RvcmVJbnN0YW5jZU9wdGlvbnMsIHN0b3JlSW5zdGFuY2VPcHRpb25zLCB0aGlzKTtcblx0ICAgIHRoaXMuX25leHRSZXF1ZXN0ID0gdGhpcy5fbGFzdFJlc2Vydm9pclJlZnJlc2ggPSB0aGlzLl9sYXN0UmVzZXJ2b2lySW5jcmVhc2UgPSBEYXRlLm5vdygpO1xuXHQgICAgdGhpcy5fcnVubmluZyA9IDA7XG5cdCAgICB0aGlzLl9kb25lID0gMDtcblx0ICAgIHRoaXMuX3VuYmxvY2tUaW1lID0gMDtcblx0ICAgIHRoaXMucmVhZHkgPSB0aGlzLlByb21pc2UucmVzb2x2ZSgpO1xuXHQgICAgdGhpcy5jbGllbnRzID0ge307XG5cdCAgICB0aGlzLl9zdGFydEhlYXJ0YmVhdCgpO1xuXHQgIH1cblxuXHQgIF9zdGFydEhlYXJ0YmVhdCgpIHtcblx0ICAgIHZhciBiYXNlO1xuXHQgICAgaWYgKCh0aGlzLmhlYXJ0YmVhdCA9PSBudWxsKSAmJiAoKCh0aGlzLnN0b3JlT3B0aW9ucy5yZXNlcnZvaXJSZWZyZXNoSW50ZXJ2YWwgIT0gbnVsbCkgJiYgKHRoaXMuc3RvcmVPcHRpb25zLnJlc2Vydm9pclJlZnJlc2hBbW91bnQgIT0gbnVsbCkpIHx8ICgodGhpcy5zdG9yZU9wdGlvbnMucmVzZXJ2b2lySW5jcmVhc2VJbnRlcnZhbCAhPSBudWxsKSAmJiAodGhpcy5zdG9yZU9wdGlvbnMucmVzZXJ2b2lySW5jcmVhc2VBbW91bnQgIT0gbnVsbCkpKSkge1xuXHQgICAgICByZXR1cm4gdHlwZW9mIChiYXNlID0gKHRoaXMuaGVhcnRiZWF0ID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuXHQgICAgICAgIHZhciBhbW91bnQsIGluY3IsIG1heGltdW0sIG5vdywgcmVzZXJ2b2lyO1xuXHQgICAgICAgIG5vdyA9IERhdGUubm93KCk7XG5cdCAgICAgICAgaWYgKCh0aGlzLnN0b3JlT3B0aW9ucy5yZXNlcnZvaXJSZWZyZXNoSW50ZXJ2YWwgIT0gbnVsbCkgJiYgbm93ID49IHRoaXMuX2xhc3RSZXNlcnZvaXJSZWZyZXNoICsgdGhpcy5zdG9yZU9wdGlvbnMucmVzZXJ2b2lyUmVmcmVzaEludGVydmFsKSB7XG5cdCAgICAgICAgICB0aGlzLl9sYXN0UmVzZXJ2b2lyUmVmcmVzaCA9IG5vdztcblx0ICAgICAgICAgIHRoaXMuc3RvcmVPcHRpb25zLnJlc2Vydm9pciA9IHRoaXMuc3RvcmVPcHRpb25zLnJlc2Vydm9pclJlZnJlc2hBbW91bnQ7XG5cdCAgICAgICAgICB0aGlzLmluc3RhbmNlLl9kcmFpbkFsbCh0aGlzLmNvbXB1dGVDYXBhY2l0eSgpKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKCh0aGlzLnN0b3JlT3B0aW9ucy5yZXNlcnZvaXJJbmNyZWFzZUludGVydmFsICE9IG51bGwpICYmIG5vdyA+PSB0aGlzLl9sYXN0UmVzZXJ2b2lySW5jcmVhc2UgKyB0aGlzLnN0b3JlT3B0aW9ucy5yZXNlcnZvaXJJbmNyZWFzZUludGVydmFsKSB7XG5cdCAgICAgICAgICAoe1xuXHQgICAgICAgICAgICByZXNlcnZvaXJJbmNyZWFzZUFtb3VudDogYW1vdW50LFxuXHQgICAgICAgICAgICByZXNlcnZvaXJJbmNyZWFzZU1heGltdW06IG1heGltdW0sXG5cdCAgICAgICAgICAgIHJlc2Vydm9pclxuXHQgICAgICAgICAgfSA9IHRoaXMuc3RvcmVPcHRpb25zKTtcblx0ICAgICAgICAgIHRoaXMuX2xhc3RSZXNlcnZvaXJJbmNyZWFzZSA9IG5vdztcblx0ICAgICAgICAgIGluY3IgPSBtYXhpbXVtICE9IG51bGwgPyBNYXRoLm1pbihhbW91bnQsIG1heGltdW0gLSByZXNlcnZvaXIpIDogYW1vdW50O1xuXHQgICAgICAgICAgaWYgKGluY3IgPiAwKSB7XG5cdCAgICAgICAgICAgIHRoaXMuc3RvcmVPcHRpb25zLnJlc2Vydm9pciArPSBpbmNyO1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5pbnN0YW5jZS5fZHJhaW5BbGwodGhpcy5jb21wdXRlQ2FwYWNpdHkoKSk7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICB9LCB0aGlzLmhlYXJ0YmVhdEludGVydmFsKSkpLnVucmVmID09PSBcImZ1bmN0aW9uXCIgPyBiYXNlLnVucmVmKCkgOiB2b2lkIDA7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICByZXR1cm4gY2xlYXJJbnRlcnZhbCh0aGlzLmhlYXJ0YmVhdCk7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgYXN5bmMgX19wdWJsaXNoX18obWVzc2FnZSkge1xuXHQgICAgYXdhaXQgdGhpcy55aWVsZExvb3AoKTtcblx0ICAgIHJldHVybiB0aGlzLmluc3RhbmNlLkV2ZW50cy50cmlnZ2VyKFwibWVzc2FnZVwiLCBtZXNzYWdlLnRvU3RyaW5nKCkpO1xuXHQgIH1cblxuXHQgIGFzeW5jIF9fZGlzY29ubmVjdF9fKGZsdXNoKSB7XG5cdCAgICBhd2FpdCB0aGlzLnlpZWxkTG9vcCgpO1xuXHQgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmhlYXJ0YmVhdCk7XG5cdCAgICByZXR1cm4gdGhpcy5Qcm9taXNlLnJlc29sdmUoKTtcblx0ICB9XG5cblx0ICB5aWVsZExvb3AodCA9IDApIHtcblx0ICAgIHJldHVybiBuZXcgdGhpcy5Qcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuXHQgICAgICByZXR1cm4gc2V0VGltZW91dChyZXNvbHZlLCB0KTtcblx0ICAgIH0pO1xuXHQgIH1cblxuXHQgIGNvbXB1dGVQZW5hbHR5KCkge1xuXHQgICAgdmFyIHJlZjtcblx0ICAgIHJldHVybiAocmVmID0gdGhpcy5zdG9yZU9wdGlvbnMucGVuYWx0eSkgIT0gbnVsbCA/IHJlZiA6ICgxNSAqIHRoaXMuc3RvcmVPcHRpb25zLm1pblRpbWUpIHx8IDUwMDA7XG5cdCAgfVxuXG5cdCAgYXN5bmMgX191cGRhdGVTZXR0aW5nc19fKG9wdGlvbnMpIHtcblx0ICAgIGF3YWl0IHRoaXMueWllbGRMb29wKCk7XG5cdCAgICBwYXJzZXIkMi5vdmVyd3JpdGUob3B0aW9ucywgb3B0aW9ucywgdGhpcy5zdG9yZU9wdGlvbnMpO1xuXHQgICAgdGhpcy5fc3RhcnRIZWFydGJlYXQoKTtcblx0ICAgIHRoaXMuaW5zdGFuY2UuX2RyYWluQWxsKHRoaXMuY29tcHV0ZUNhcGFjaXR5KCkpO1xuXHQgICAgcmV0dXJuIHRydWU7XG5cdCAgfVxuXG5cdCAgYXN5bmMgX19ydW5uaW5nX18oKSB7XG5cdCAgICBhd2FpdCB0aGlzLnlpZWxkTG9vcCgpO1xuXHQgICAgcmV0dXJuIHRoaXMuX3J1bm5pbmc7XG5cdCAgfVxuXG5cdCAgYXN5bmMgX19xdWV1ZWRfXygpIHtcblx0ICAgIGF3YWl0IHRoaXMueWllbGRMb29wKCk7XG5cdCAgICByZXR1cm4gdGhpcy5pbnN0YW5jZS5xdWV1ZWQoKTtcblx0ICB9XG5cblx0ICBhc3luYyBfX2RvbmVfXygpIHtcblx0ICAgIGF3YWl0IHRoaXMueWllbGRMb29wKCk7XG5cdCAgICByZXR1cm4gdGhpcy5fZG9uZTtcblx0ICB9XG5cblx0ICBhc3luYyBfX2dyb3VwQ2hlY2tfXyh0aW1lKSB7XG5cdCAgICBhd2FpdCB0aGlzLnlpZWxkTG9vcCgpO1xuXHQgICAgcmV0dXJuICh0aGlzLl9uZXh0UmVxdWVzdCArIHRoaXMudGltZW91dCkgPCB0aW1lO1xuXHQgIH1cblxuXHQgIGNvbXB1dGVDYXBhY2l0eSgpIHtcblx0ICAgIHZhciBtYXhDb25jdXJyZW50LCByZXNlcnZvaXI7XG5cdCAgICAoe21heENvbmN1cnJlbnQsIHJlc2Vydm9pcn0gPSB0aGlzLnN0b3JlT3B0aW9ucyk7XG5cdCAgICBpZiAoKG1heENvbmN1cnJlbnQgIT0gbnVsbCkgJiYgKHJlc2Vydm9pciAhPSBudWxsKSkge1xuXHQgICAgICByZXR1cm4gTWF0aC5taW4obWF4Q29uY3VycmVudCAtIHRoaXMuX3J1bm5pbmcsIHJlc2Vydm9pcik7XG5cdCAgICB9IGVsc2UgaWYgKG1heENvbmN1cnJlbnQgIT0gbnVsbCkge1xuXHQgICAgICByZXR1cm4gbWF4Q29uY3VycmVudCAtIHRoaXMuX3J1bm5pbmc7XG5cdCAgICB9IGVsc2UgaWYgKHJlc2Vydm9pciAhPSBudWxsKSB7XG5cdCAgICAgIHJldHVybiByZXNlcnZvaXI7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICByZXR1cm4gbnVsbDtcblx0ICAgIH1cblx0ICB9XG5cblx0ICBjb25kaXRpb25zQ2hlY2sod2VpZ2h0KSB7XG5cdCAgICB2YXIgY2FwYWNpdHk7XG5cdCAgICBjYXBhY2l0eSA9IHRoaXMuY29tcHV0ZUNhcGFjaXR5KCk7XG5cdCAgICByZXR1cm4gKGNhcGFjaXR5ID09IG51bGwpIHx8IHdlaWdodCA8PSBjYXBhY2l0eTtcblx0ICB9XG5cblx0ICBhc3luYyBfX2luY3JlbWVudFJlc2Vydm9pcl9fKGluY3IpIHtcblx0ICAgIHZhciByZXNlcnZvaXI7XG5cdCAgICBhd2FpdCB0aGlzLnlpZWxkTG9vcCgpO1xuXHQgICAgcmVzZXJ2b2lyID0gdGhpcy5zdG9yZU9wdGlvbnMucmVzZXJ2b2lyICs9IGluY3I7XG5cdCAgICB0aGlzLmluc3RhbmNlLl9kcmFpbkFsbCh0aGlzLmNvbXB1dGVDYXBhY2l0eSgpKTtcblx0ICAgIHJldHVybiByZXNlcnZvaXI7XG5cdCAgfVxuXG5cdCAgYXN5bmMgX19jdXJyZW50UmVzZXJ2b2lyX18oKSB7XG5cdCAgICBhd2FpdCB0aGlzLnlpZWxkTG9vcCgpO1xuXHQgICAgcmV0dXJuIHRoaXMuc3RvcmVPcHRpb25zLnJlc2Vydm9pcjtcblx0ICB9XG5cblx0ICBpc0Jsb2NrZWQobm93KSB7XG5cdCAgICByZXR1cm4gdGhpcy5fdW5ibG9ja1RpbWUgPj0gbm93O1xuXHQgIH1cblxuXHQgIGNoZWNrKHdlaWdodCwgbm93KSB7XG5cdCAgICByZXR1cm4gdGhpcy5jb25kaXRpb25zQ2hlY2sod2VpZ2h0KSAmJiAodGhpcy5fbmV4dFJlcXVlc3QgLSBub3cpIDw9IDA7XG5cdCAgfVxuXG5cdCAgYXN5bmMgX19jaGVja19fKHdlaWdodCkge1xuXHQgICAgdmFyIG5vdztcblx0ICAgIGF3YWl0IHRoaXMueWllbGRMb29wKCk7XG5cdCAgICBub3cgPSBEYXRlLm5vdygpO1xuXHQgICAgcmV0dXJuIHRoaXMuY2hlY2sod2VpZ2h0LCBub3cpO1xuXHQgIH1cblxuXHQgIGFzeW5jIF9fcmVnaXN0ZXJfXyhpbmRleCwgd2VpZ2h0LCBleHBpcmF0aW9uKSB7XG5cdCAgICB2YXIgbm93LCB3YWl0O1xuXHQgICAgYXdhaXQgdGhpcy55aWVsZExvb3AoKTtcblx0ICAgIG5vdyA9IERhdGUubm93KCk7XG5cdCAgICBpZiAodGhpcy5jb25kaXRpb25zQ2hlY2sod2VpZ2h0KSkge1xuXHQgICAgICB0aGlzLl9ydW5uaW5nICs9IHdlaWdodDtcblx0ICAgICAgaWYgKHRoaXMuc3RvcmVPcHRpb25zLnJlc2Vydm9pciAhPSBudWxsKSB7XG5cdCAgICAgICAgdGhpcy5zdG9yZU9wdGlvbnMucmVzZXJ2b2lyIC09IHdlaWdodDtcblx0ICAgICAgfVxuXHQgICAgICB3YWl0ID0gTWF0aC5tYXgodGhpcy5fbmV4dFJlcXVlc3QgLSBub3csIDApO1xuXHQgICAgICB0aGlzLl9uZXh0UmVxdWVzdCA9IG5vdyArIHdhaXQgKyB0aGlzLnN0b3JlT3B0aW9ucy5taW5UaW1lO1xuXHQgICAgICByZXR1cm4ge1xuXHQgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG5cdCAgICAgICAgd2FpdCxcblx0ICAgICAgICByZXNlcnZvaXI6IHRoaXMuc3RvcmVPcHRpb25zLnJlc2Vydm9pclxuXHQgICAgICB9O1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgcmV0dXJuIHtcblx0ICAgICAgICBzdWNjZXNzOiBmYWxzZVxuXHQgICAgICB9O1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIHN0cmF0ZWd5SXNCbG9jaygpIHtcblx0ICAgIHJldHVybiB0aGlzLnN0b3JlT3B0aW9ucy5zdHJhdGVneSA9PT0gMztcblx0ICB9XG5cblx0ICBhc3luYyBfX3N1Ym1pdF9fKHF1ZXVlTGVuZ3RoLCB3ZWlnaHQpIHtcblx0ICAgIHZhciBibG9ja2VkLCBub3csIHJlYWNoZWRIV007XG5cdCAgICBhd2FpdCB0aGlzLnlpZWxkTG9vcCgpO1xuXHQgICAgaWYgKCh0aGlzLnN0b3JlT3B0aW9ucy5tYXhDb25jdXJyZW50ICE9IG51bGwpICYmIHdlaWdodCA+IHRoaXMuc3RvcmVPcHRpb25zLm1heENvbmN1cnJlbnQpIHtcblx0ICAgICAgdGhyb3cgbmV3IEJvdHRsZW5lY2tFcnJvciQyKGBJbXBvc3NpYmxlIHRvIGFkZCBhIGpvYiBoYXZpbmcgYSB3ZWlnaHQgb2YgJHt3ZWlnaHR9IHRvIGEgbGltaXRlciBoYXZpbmcgYSBtYXhDb25jdXJyZW50IHNldHRpbmcgb2YgJHt0aGlzLnN0b3JlT3B0aW9ucy5tYXhDb25jdXJyZW50fWApO1xuXHQgICAgfVxuXHQgICAgbm93ID0gRGF0ZS5ub3coKTtcblx0ICAgIHJlYWNoZWRIV00gPSAodGhpcy5zdG9yZU9wdGlvbnMuaGlnaFdhdGVyICE9IG51bGwpICYmIHF1ZXVlTGVuZ3RoID09PSB0aGlzLnN0b3JlT3B0aW9ucy5oaWdoV2F0ZXIgJiYgIXRoaXMuY2hlY2sod2VpZ2h0LCBub3cpO1xuXHQgICAgYmxvY2tlZCA9IHRoaXMuc3RyYXRlZ3lJc0Jsb2NrKCkgJiYgKHJlYWNoZWRIV00gfHwgdGhpcy5pc0Jsb2NrZWQobm93KSk7XG5cdCAgICBpZiAoYmxvY2tlZCkge1xuXHQgICAgICB0aGlzLl91bmJsb2NrVGltZSA9IG5vdyArIHRoaXMuY29tcHV0ZVBlbmFsdHkoKTtcblx0ICAgICAgdGhpcy5fbmV4dFJlcXVlc3QgPSB0aGlzLl91bmJsb2NrVGltZSArIHRoaXMuc3RvcmVPcHRpb25zLm1pblRpbWU7XG5cdCAgICAgIHRoaXMuaW5zdGFuY2UuX2Ryb3BBbGxRdWV1ZWQoKTtcblx0ICAgIH1cblx0ICAgIHJldHVybiB7XG5cdCAgICAgIHJlYWNoZWRIV00sXG5cdCAgICAgIGJsb2NrZWQsXG5cdCAgICAgIHN0cmF0ZWd5OiB0aGlzLnN0b3JlT3B0aW9ucy5zdHJhdGVneVxuXHQgICAgfTtcblx0ICB9XG5cblx0ICBhc3luYyBfX2ZyZWVfXyhpbmRleCwgd2VpZ2h0KSB7XG5cdCAgICBhd2FpdCB0aGlzLnlpZWxkTG9vcCgpO1xuXHQgICAgdGhpcy5fcnVubmluZyAtPSB3ZWlnaHQ7XG5cdCAgICB0aGlzLl9kb25lICs9IHdlaWdodDtcblx0ICAgIHRoaXMuaW5zdGFuY2UuX2RyYWluQWxsKHRoaXMuY29tcHV0ZUNhcGFjaXR5KCkpO1xuXHQgICAgcmV0dXJuIHtcblx0ICAgICAgcnVubmluZzogdGhpcy5fcnVubmluZ1xuXHQgICAgfTtcblx0ICB9XG5cblx0fTtcblxuXHR2YXIgTG9jYWxEYXRhc3RvcmVfMSA9IExvY2FsRGF0YXN0b3JlO1xuXG5cdHZhciBCb3R0bGVuZWNrRXJyb3IkMywgU3RhdGVzO1xuXG5cdEJvdHRsZW5lY2tFcnJvciQzID0gQm90dGxlbmVja0Vycm9yXzE7XG5cblx0U3RhdGVzID0gY2xhc3MgU3RhdGVzIHtcblx0ICBjb25zdHJ1Y3RvcihzdGF0dXMxKSB7XG5cdCAgICB0aGlzLnN0YXR1cyA9IHN0YXR1czE7XG5cdCAgICB0aGlzLl9qb2JzID0ge307XG5cdCAgICB0aGlzLmNvdW50cyA9IHRoaXMuc3RhdHVzLm1hcChmdW5jdGlvbigpIHtcblx0ICAgICAgcmV0dXJuIDA7XG5cdCAgICB9KTtcblx0ICB9XG5cblx0ICBuZXh0KGlkKSB7XG5cdCAgICB2YXIgY3VycmVudCwgbmV4dDtcblx0ICAgIGN1cnJlbnQgPSB0aGlzLl9qb2JzW2lkXTtcblx0ICAgIG5leHQgPSBjdXJyZW50ICsgMTtcblx0ICAgIGlmICgoY3VycmVudCAhPSBudWxsKSAmJiBuZXh0IDwgdGhpcy5zdGF0dXMubGVuZ3RoKSB7XG5cdCAgICAgIHRoaXMuY291bnRzW2N1cnJlbnRdLS07XG5cdCAgICAgIHRoaXMuY291bnRzW25leHRdKys7XG5cdCAgICAgIHJldHVybiB0aGlzLl9qb2JzW2lkXSsrO1xuXHQgICAgfSBlbHNlIGlmIChjdXJyZW50ICE9IG51bGwpIHtcblx0ICAgICAgdGhpcy5jb3VudHNbY3VycmVudF0tLTtcblx0ICAgICAgcmV0dXJuIGRlbGV0ZSB0aGlzLl9qb2JzW2lkXTtcblx0ICAgIH1cblx0ICB9XG5cblx0ICBzdGFydChpZCkge1xuXHQgICAgdmFyIGluaXRpYWw7XG5cdCAgICBpbml0aWFsID0gMDtcblx0ICAgIHRoaXMuX2pvYnNbaWRdID0gaW5pdGlhbDtcblx0ICAgIHJldHVybiB0aGlzLmNvdW50c1tpbml0aWFsXSsrO1xuXHQgIH1cblxuXHQgIHJlbW92ZShpZCkge1xuXHQgICAgdmFyIGN1cnJlbnQ7XG5cdCAgICBjdXJyZW50ID0gdGhpcy5fam9ic1tpZF07XG5cdCAgICBpZiAoY3VycmVudCAhPSBudWxsKSB7XG5cdCAgICAgIHRoaXMuY291bnRzW2N1cnJlbnRdLS07XG5cdCAgICAgIGRlbGV0ZSB0aGlzLl9qb2JzW2lkXTtcblx0ICAgIH1cblx0ICAgIHJldHVybiBjdXJyZW50ICE9IG51bGw7XG5cdCAgfVxuXG5cdCAgam9iU3RhdHVzKGlkKSB7XG5cdCAgICB2YXIgcmVmO1xuXHQgICAgcmV0dXJuIChyZWYgPSB0aGlzLnN0YXR1c1t0aGlzLl9qb2JzW2lkXV0pICE9IG51bGwgPyByZWYgOiBudWxsO1xuXHQgIH1cblxuXHQgIHN0YXR1c0pvYnMoc3RhdHVzKSB7XG5cdCAgICB2YXIgaywgcG9zLCByZWYsIHJlc3VsdHMsIHY7XG5cdCAgICBpZiAoc3RhdHVzICE9IG51bGwpIHtcblx0ICAgICAgcG9zID0gdGhpcy5zdGF0dXMuaW5kZXhPZihzdGF0dXMpO1xuXHQgICAgICBpZiAocG9zIDwgMCkge1xuXHQgICAgICAgIHRocm93IG5ldyBCb3R0bGVuZWNrRXJyb3IkMyhgc3RhdHVzIG11c3QgYmUgb25lIG9mICR7dGhpcy5zdGF0dXMuam9pbignLCAnKX1gKTtcblx0ICAgICAgfVxuXHQgICAgICByZWYgPSB0aGlzLl9qb2JzO1xuXHQgICAgICByZXN1bHRzID0gW107XG5cdCAgICAgIGZvciAoayBpbiByZWYpIHtcblx0ICAgICAgICB2ID0gcmVmW2tdO1xuXHQgICAgICAgIGlmICh2ID09PSBwb3MpIHtcblx0ICAgICAgICAgIHJlc3VsdHMucHVzaChrKTtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgICAgcmV0dXJuIHJlc3VsdHM7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5fam9icyk7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgc3RhdHVzQ291bnRzKCkge1xuXHQgICAgcmV0dXJuIHRoaXMuY291bnRzLnJlZHVjZSgoKGFjYywgdiwgaSkgPT4ge1xuXHQgICAgICBhY2NbdGhpcy5zdGF0dXNbaV1dID0gdjtcblx0ICAgICAgcmV0dXJuIGFjYztcblx0ICAgIH0pLCB7fSk7XG5cdCAgfVxuXG5cdH07XG5cblx0dmFyIFN0YXRlc18xID0gU3RhdGVzO1xuXG5cdHZhciBETExpc3QkMiwgU3luYztcblxuXHRETExpc3QkMiA9IERMTGlzdF8xO1xuXG5cdFN5bmMgPSBjbGFzcyBTeW5jIHtcblx0ICBjb25zdHJ1Y3RvcihuYW1lLCBQcm9taXNlKSB7XG5cdCAgICB0aGlzLnNjaGVkdWxlID0gdGhpcy5zY2hlZHVsZS5iaW5kKHRoaXMpO1xuXHQgICAgdGhpcy5uYW1lID0gbmFtZTtcblx0ICAgIHRoaXMuUHJvbWlzZSA9IFByb21pc2U7XG5cdCAgICB0aGlzLl9ydW5uaW5nID0gMDtcblx0ICAgIHRoaXMuX3F1ZXVlID0gbmV3IERMTGlzdCQyKCk7XG5cdCAgfVxuXG5cdCAgaXNFbXB0eSgpIHtcblx0ICAgIHJldHVybiB0aGlzLl9xdWV1ZS5sZW5ndGggPT09IDA7XG5cdCAgfVxuXG5cdCAgYXN5bmMgX3RyeVRvUnVuKCkge1xuXHQgICAgdmFyIGFyZ3MsIGNiLCBlcnJvciwgcmVqZWN0LCByZXNvbHZlLCByZXR1cm5lZCwgdGFzaztcblx0ICAgIGlmICgodGhpcy5fcnVubmluZyA8IDEpICYmIHRoaXMuX3F1ZXVlLmxlbmd0aCA+IDApIHtcblx0ICAgICAgdGhpcy5fcnVubmluZysrO1xuXHQgICAgICAoe3Rhc2ssIGFyZ3MsIHJlc29sdmUsIHJlamVjdH0gPSB0aGlzLl9xdWV1ZS5zaGlmdCgpKTtcblx0ICAgICAgY2IgPSAoYXdhaXQgKGFzeW5jIGZ1bmN0aW9uKCkge1xuXHQgICAgICAgIHRyeSB7XG5cdCAgICAgICAgICByZXR1cm5lZCA9IChhd2FpdCB0YXNrKC4uLmFyZ3MpKTtcblx0ICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmV0dXJuZWQpO1xuXHQgICAgICAgICAgfTtcblx0ICAgICAgICB9IGNhdGNoIChlcnJvcjEpIHtcblx0ICAgICAgICAgIGVycm9yID0gZXJyb3IxO1xuXHQgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycm9yKTtcblx0ICAgICAgICAgIH07XG5cdCAgICAgICAgfVxuXHQgICAgICB9KSgpKTtcblx0ICAgICAgdGhpcy5fcnVubmluZy0tO1xuXHQgICAgICB0aGlzLl90cnlUb1J1bigpO1xuXHQgICAgICByZXR1cm4gY2IoKTtcblx0ICAgIH1cblx0ICB9XG5cblx0ICBzY2hlZHVsZSh0YXNrLCAuLi5hcmdzKSB7XG5cdCAgICB2YXIgcHJvbWlzZSwgcmVqZWN0LCByZXNvbHZlO1xuXHQgICAgcmVzb2x2ZSA9IHJlamVjdCA9IG51bGw7XG5cdCAgICBwcm9taXNlID0gbmV3IHRoaXMuUHJvbWlzZShmdW5jdGlvbihfcmVzb2x2ZSwgX3JlamVjdCkge1xuXHQgICAgICByZXNvbHZlID0gX3Jlc29sdmU7XG5cdCAgICAgIHJldHVybiByZWplY3QgPSBfcmVqZWN0O1xuXHQgICAgfSk7XG5cdCAgICB0aGlzLl9xdWV1ZS5wdXNoKHt0YXNrLCBhcmdzLCByZXNvbHZlLCByZWplY3R9KTtcblx0ICAgIHRoaXMuX3RyeVRvUnVuKCk7XG5cdCAgICByZXR1cm4gcHJvbWlzZTtcblx0ICB9XG5cblx0fTtcblxuXHR2YXIgU3luY18xID0gU3luYztcblxuXHR2YXIgdmVyc2lvbiA9IFwiMi4xOS41XCI7XG5cdHZhciB2ZXJzaW9uJDEgPSB7XG5cdFx0dmVyc2lvbjogdmVyc2lvblxuXHR9O1xuXG5cdHZhciB2ZXJzaW9uJDIgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG5cdFx0dmVyc2lvbjogdmVyc2lvbixcblx0XHRkZWZhdWx0OiB2ZXJzaW9uJDFcblx0fSk7XG5cblx0dmFyIHJlcXVpcmUkJDIgPSAoKSA9PiBjb25zb2xlLmxvZygnWW91IG11c3QgaW1wb3J0IHRoZSBmdWxsIHZlcnNpb24gb2YgQm90dGxlbmVjayBpbiBvcmRlciB0byB1c2UgdGhpcyBmZWF0dXJlLicpO1xuXG5cdHZhciByZXF1aXJlJCQzID0gKCkgPT4gY29uc29sZS5sb2coJ1lvdSBtdXN0IGltcG9ydCB0aGUgZnVsbCB2ZXJzaW9uIG9mIEJvdHRsZW5lY2sgaW4gb3JkZXIgdG8gdXNlIHRoaXMgZmVhdHVyZS4nKTtcblxuXHR2YXIgcmVxdWlyZSQkNCA9ICgpID0+IGNvbnNvbGUubG9nKCdZb3UgbXVzdCBpbXBvcnQgdGhlIGZ1bGwgdmVyc2lvbiBvZiBCb3R0bGVuZWNrIGluIG9yZGVyIHRvIHVzZSB0aGlzIGZlYXR1cmUuJyk7XG5cblx0dmFyIEV2ZW50cyQyLCBHcm91cCwgSU9SZWRpc0Nvbm5lY3Rpb24kMSwgUmVkaXNDb25uZWN0aW9uJDEsIFNjcmlwdHMkMSwgcGFyc2VyJDM7XG5cblx0cGFyc2VyJDMgPSBwYXJzZXI7XG5cblx0RXZlbnRzJDIgPSBFdmVudHNfMTtcblxuXHRSZWRpc0Nvbm5lY3Rpb24kMSA9IHJlcXVpcmUkJDI7XG5cblx0SU9SZWRpc0Nvbm5lY3Rpb24kMSA9IHJlcXVpcmUkJDM7XG5cblx0U2NyaXB0cyQxID0gcmVxdWlyZSQkNDtcblxuXHRHcm91cCA9IChmdW5jdGlvbigpIHtcblx0ICBjbGFzcyBHcm91cCB7XG5cdCAgICBjb25zdHJ1Y3RvcihsaW1pdGVyT3B0aW9ucyA9IHt9KSB7XG5cdCAgICAgIHRoaXMuZGVsZXRlS2V5ID0gdGhpcy5kZWxldGVLZXkuYmluZCh0aGlzKTtcblx0ICAgICAgdGhpcy5saW1pdGVyT3B0aW9ucyA9IGxpbWl0ZXJPcHRpb25zO1xuXHQgICAgICBwYXJzZXIkMy5sb2FkKHRoaXMubGltaXRlck9wdGlvbnMsIHRoaXMuZGVmYXVsdHMsIHRoaXMpO1xuXHQgICAgICB0aGlzLkV2ZW50cyA9IG5ldyBFdmVudHMkMih0aGlzKTtcblx0ICAgICAgdGhpcy5pbnN0YW5jZXMgPSB7fTtcblx0ICAgICAgdGhpcy5Cb3R0bGVuZWNrID0gQm90dGxlbmVja18xO1xuXHQgICAgICB0aGlzLl9zdGFydEF1dG9DbGVhbnVwKCk7XG5cdCAgICAgIHRoaXMuc2hhcmVkQ29ubmVjdGlvbiA9IHRoaXMuY29ubmVjdGlvbiAhPSBudWxsO1xuXHQgICAgICBpZiAodGhpcy5jb25uZWN0aW9uID09IG51bGwpIHtcblx0ICAgICAgICBpZiAodGhpcy5saW1pdGVyT3B0aW9ucy5kYXRhc3RvcmUgPT09IFwicmVkaXNcIikge1xuXHQgICAgICAgICAgdGhpcy5jb25uZWN0aW9uID0gbmV3IFJlZGlzQ29ubmVjdGlvbiQxKE9iamVjdC5hc3NpZ24oe30sIHRoaXMubGltaXRlck9wdGlvbnMsIHtFdmVudHM6IHRoaXMuRXZlbnRzfSkpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAodGhpcy5saW1pdGVyT3B0aW9ucy5kYXRhc3RvcmUgPT09IFwiaW9yZWRpc1wiKSB7XG5cdCAgICAgICAgICB0aGlzLmNvbm5lY3Rpb24gPSBuZXcgSU9SZWRpc0Nvbm5lY3Rpb24kMShPYmplY3QuYXNzaWduKHt9LCB0aGlzLmxpbWl0ZXJPcHRpb25zLCB7RXZlbnRzOiB0aGlzLkV2ZW50c30pKTtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH1cblxuXHQgICAga2V5KGtleSA9IFwiXCIpIHtcblx0ICAgICAgdmFyIHJlZjtcblx0ICAgICAgcmV0dXJuIChyZWYgPSB0aGlzLmluc3RhbmNlc1trZXldKSAhPSBudWxsID8gcmVmIDogKCgpID0+IHtcblx0ICAgICAgICB2YXIgbGltaXRlcjtcblx0ICAgICAgICBsaW1pdGVyID0gdGhpcy5pbnN0YW5jZXNba2V5XSA9IG5ldyB0aGlzLkJvdHRsZW5lY2soT2JqZWN0LmFzc2lnbih0aGlzLmxpbWl0ZXJPcHRpb25zLCB7XG5cdCAgICAgICAgICBpZDogYCR7dGhpcy5pZH0tJHtrZXl9YCxcblx0ICAgICAgICAgIHRpbWVvdXQ6IHRoaXMudGltZW91dCxcblx0ICAgICAgICAgIGNvbm5lY3Rpb246IHRoaXMuY29ubmVjdGlvblxuXHQgICAgICAgIH0pKTtcblx0ICAgICAgICB0aGlzLkV2ZW50cy50cmlnZ2VyKFwiY3JlYXRlZFwiLCBsaW1pdGVyLCBrZXkpO1xuXHQgICAgICAgIHJldHVybiBsaW1pdGVyO1xuXHQgICAgICB9KSgpO1xuXHQgICAgfVxuXG5cdCAgICBhc3luYyBkZWxldGVLZXkoa2V5ID0gXCJcIikge1xuXHQgICAgICB2YXIgZGVsZXRlZCwgaW5zdGFuY2U7XG5cdCAgICAgIGluc3RhbmNlID0gdGhpcy5pbnN0YW5jZXNba2V5XTtcblx0ICAgICAgaWYgKHRoaXMuY29ubmVjdGlvbikge1xuXHQgICAgICAgIGRlbGV0ZWQgPSAoYXdhaXQgdGhpcy5jb25uZWN0aW9uLl9fcnVuQ29tbWFuZF9fKFsnZGVsJywgLi4uU2NyaXB0cyQxLmFsbEtleXMoYCR7dGhpcy5pZH0tJHtrZXl9YCldKSk7XG5cdCAgICAgIH1cblx0ICAgICAgaWYgKGluc3RhbmNlICE9IG51bGwpIHtcblx0ICAgICAgICBkZWxldGUgdGhpcy5pbnN0YW5jZXNba2V5XTtcblx0ICAgICAgICBhd2FpdCBpbnN0YW5jZS5kaXNjb25uZWN0KCk7XG5cdCAgICAgIH1cblx0ICAgICAgcmV0dXJuIChpbnN0YW5jZSAhPSBudWxsKSB8fCBkZWxldGVkID4gMDtcblx0ICAgIH1cblxuXHQgICAgbGltaXRlcnMoKSB7XG5cdCAgICAgIHZhciBrLCByZWYsIHJlc3VsdHMsIHY7XG5cdCAgICAgIHJlZiA9IHRoaXMuaW5zdGFuY2VzO1xuXHQgICAgICByZXN1bHRzID0gW107XG5cdCAgICAgIGZvciAoayBpbiByZWYpIHtcblx0ICAgICAgICB2ID0gcmVmW2tdO1xuXHQgICAgICAgIHJlc3VsdHMucHVzaCh7XG5cdCAgICAgICAgICBrZXk6IGssXG5cdCAgICAgICAgICBsaW1pdGVyOiB2XG5cdCAgICAgICAgfSk7XG5cdCAgICAgIH1cblx0ICAgICAgcmV0dXJuIHJlc3VsdHM7XG5cdCAgICB9XG5cblx0ICAgIGtleXMoKSB7XG5cdCAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmluc3RhbmNlcyk7XG5cdCAgICB9XG5cblx0ICAgIGFzeW5jIGNsdXN0ZXJLZXlzKCkge1xuXHQgICAgICB2YXIgY3Vyc29yLCBlbmQsIGZvdW5kLCBpLCBrLCBrZXlzLCBsZW4sIG5leHQsIHN0YXJ0O1xuXHQgICAgICBpZiAodGhpcy5jb25uZWN0aW9uID09IG51bGwpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5Qcm9taXNlLnJlc29sdmUodGhpcy5rZXlzKCkpO1xuXHQgICAgICB9XG5cdCAgICAgIGtleXMgPSBbXTtcblx0ICAgICAgY3Vyc29yID0gbnVsbDtcblx0ICAgICAgc3RhcnQgPSBgYl8ke3RoaXMuaWR9LWAubGVuZ3RoO1xuXHQgICAgICBlbmQgPSBcIl9zZXR0aW5nc1wiLmxlbmd0aDtcblx0ICAgICAgd2hpbGUgKGN1cnNvciAhPT0gMCkge1xuXHQgICAgICAgIFtuZXh0LCBmb3VuZF0gPSAoYXdhaXQgdGhpcy5jb25uZWN0aW9uLl9fcnVuQ29tbWFuZF9fKFtcInNjYW5cIiwgY3Vyc29yICE9IG51bGwgPyBjdXJzb3IgOiAwLCBcIm1hdGNoXCIsIGBiXyR7dGhpcy5pZH0tKl9zZXR0aW5nc2AsIFwiY291bnRcIiwgMTAwMDBdKSk7XG5cdCAgICAgICAgY3Vyc29yID0gfn5uZXh0O1xuXHQgICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IGZvdW5kLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG5cdCAgICAgICAgICBrID0gZm91bmRbaV07XG5cdCAgICAgICAgICBrZXlzLnB1c2goay5zbGljZShzdGFydCwgLWVuZCkpO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgICByZXR1cm4ga2V5cztcblx0ICAgIH1cblxuXHQgICAgX3N0YXJ0QXV0b0NsZWFudXAoKSB7XG5cdCAgICAgIHZhciBiYXNlO1xuXHQgICAgICBjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwpO1xuXHQgICAgICByZXR1cm4gdHlwZW9mIChiYXNlID0gKHRoaXMuaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChhc3luYygpID0+IHtcblx0ICAgICAgICB2YXIgZSwgaywgcmVmLCByZXN1bHRzLCB0aW1lLCB2O1xuXHQgICAgICAgIHRpbWUgPSBEYXRlLm5vdygpO1xuXHQgICAgICAgIHJlZiA9IHRoaXMuaW5zdGFuY2VzO1xuXHQgICAgICAgIHJlc3VsdHMgPSBbXTtcblx0ICAgICAgICBmb3IgKGsgaW4gcmVmKSB7XG5cdCAgICAgICAgICB2ID0gcmVmW2tdO1xuXHQgICAgICAgICAgdHJ5IHtcblx0ICAgICAgICAgICAgaWYgKChhd2FpdCB2Ll9zdG9yZS5fX2dyb3VwQ2hlY2tfXyh0aW1lKSkpIHtcblx0ICAgICAgICAgICAgICByZXN1bHRzLnB1c2godGhpcy5kZWxldGVLZXkoaykpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh2b2lkIDApO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuXHQgICAgICAgICAgICBlID0gZXJyb3I7XG5cdCAgICAgICAgICAgIHJlc3VsdHMucHVzaCh2LkV2ZW50cy50cmlnZ2VyKFwiZXJyb3JcIiwgZSkpO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gcmVzdWx0cztcblx0ICAgICAgfSwgdGhpcy50aW1lb3V0IC8gMikpKS51bnJlZiA9PT0gXCJmdW5jdGlvblwiID8gYmFzZS51bnJlZigpIDogdm9pZCAwO1xuXHQgICAgfVxuXG5cdCAgICB1cGRhdGVTZXR0aW5ncyhvcHRpb25zID0ge30pIHtcblx0ICAgICAgcGFyc2VyJDMub3ZlcndyaXRlKG9wdGlvbnMsIHRoaXMuZGVmYXVsdHMsIHRoaXMpO1xuXHQgICAgICBwYXJzZXIkMy5vdmVyd3JpdGUob3B0aW9ucywgb3B0aW9ucywgdGhpcy5saW1pdGVyT3B0aW9ucyk7XG5cdCAgICAgIGlmIChvcHRpb25zLnRpbWVvdXQgIT0gbnVsbCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9zdGFydEF1dG9DbGVhbnVwKCk7XG5cdCAgICAgIH1cblx0ICAgIH1cblxuXHQgICAgZGlzY29ubmVjdChmbHVzaCA9IHRydWUpIHtcblx0ICAgICAgdmFyIHJlZjtcblx0ICAgICAgaWYgKCF0aGlzLnNoYXJlZENvbm5lY3Rpb24pIHtcblx0ICAgICAgICByZXR1cm4gKHJlZiA9IHRoaXMuY29ubmVjdGlvbikgIT0gbnVsbCA/IHJlZi5kaXNjb25uZWN0KGZsdXNoKSA6IHZvaWQgMDtcblx0ICAgICAgfVxuXHQgICAgfVxuXG5cdCAgfVxuXHQgIEdyb3VwLnByb3RvdHlwZS5kZWZhdWx0cyA9IHtcblx0ICAgIHRpbWVvdXQ6IDEwMDAgKiA2MCAqIDUsXG5cdCAgICBjb25uZWN0aW9uOiBudWxsLFxuXHQgICAgUHJvbWlzZTogUHJvbWlzZSxcblx0ICAgIGlkOiBcImdyb3VwLWtleVwiXG5cdCAgfTtcblxuXHQgIHJldHVybiBHcm91cDtcblxuXHR9KS5jYWxsKGNvbW1vbmpzR2xvYmFsKTtcblxuXHR2YXIgR3JvdXBfMSA9IEdyb3VwO1xuXG5cdHZhciBCYXRjaGVyLCBFdmVudHMkMywgcGFyc2VyJDQ7XG5cblx0cGFyc2VyJDQgPSBwYXJzZXI7XG5cblx0RXZlbnRzJDMgPSBFdmVudHNfMTtcblxuXHRCYXRjaGVyID0gKGZ1bmN0aW9uKCkge1xuXHQgIGNsYXNzIEJhdGNoZXIge1xuXHQgICAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9KSB7XG5cdCAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cdCAgICAgIHBhcnNlciQ0LmxvYWQodGhpcy5vcHRpb25zLCB0aGlzLmRlZmF1bHRzLCB0aGlzKTtcblx0ICAgICAgdGhpcy5FdmVudHMgPSBuZXcgRXZlbnRzJDModGhpcyk7XG5cdCAgICAgIHRoaXMuX2FyciA9IFtdO1xuXHQgICAgICB0aGlzLl9yZXNldFByb21pc2UoKTtcblx0ICAgICAgdGhpcy5fbGFzdEZsdXNoID0gRGF0ZS5ub3coKTtcblx0ICAgIH1cblxuXHQgICAgX3Jlc2V0UHJvbWlzZSgpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX3Byb21pc2UgPSBuZXcgdGhpcy5Qcm9taXNlKChyZXMsIHJlaikgPT4ge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9yZXNvbHZlID0gcmVzO1xuXHQgICAgICB9KTtcblx0ICAgIH1cblxuXHQgICAgX2ZsdXNoKCkge1xuXHQgICAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dCk7XG5cdCAgICAgIHRoaXMuX2xhc3RGbHVzaCA9IERhdGUubm93KCk7XG5cdCAgICAgIHRoaXMuX3Jlc29sdmUoKTtcblx0ICAgICAgdGhpcy5FdmVudHMudHJpZ2dlcihcImJhdGNoXCIsIHRoaXMuX2Fycik7XG5cdCAgICAgIHRoaXMuX2FyciA9IFtdO1xuXHQgICAgICByZXR1cm4gdGhpcy5fcmVzZXRQcm9taXNlKCk7XG5cdCAgICB9XG5cblx0ICAgIGFkZChkYXRhKSB7XG5cdCAgICAgIHZhciByZXQ7XG5cdCAgICAgIHRoaXMuX2Fyci5wdXNoKGRhdGEpO1xuXHQgICAgICByZXQgPSB0aGlzLl9wcm9taXNlO1xuXHQgICAgICBpZiAodGhpcy5fYXJyLmxlbmd0aCA9PT0gdGhpcy5tYXhTaXplKSB7XG5cdCAgICAgICAgdGhpcy5fZmx1c2goKTtcblx0ICAgICAgfSBlbHNlIGlmICgodGhpcy5tYXhUaW1lICE9IG51bGwpICYmIHRoaXMuX2Fyci5sZW5ndGggPT09IDEpIHtcblx0ICAgICAgICB0aGlzLl90aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdCAgICAgICAgICByZXR1cm4gdGhpcy5fZmx1c2goKTtcblx0ICAgICAgICB9LCB0aGlzLm1heFRpbWUpO1xuXHQgICAgICB9XG5cdCAgICAgIHJldHVybiByZXQ7XG5cdCAgICB9XG5cblx0ICB9XG5cdCAgQmF0Y2hlci5wcm90b3R5cGUuZGVmYXVsdHMgPSB7XG5cdCAgICBtYXhUaW1lOiBudWxsLFxuXHQgICAgbWF4U2l6ZTogbnVsbCxcblx0ICAgIFByb21pc2U6IFByb21pc2Vcblx0ICB9O1xuXG5cdCAgcmV0dXJuIEJhdGNoZXI7XG5cblx0fSkuY2FsbChjb21tb25qc0dsb2JhbCk7XG5cblx0dmFyIEJhdGNoZXJfMSA9IEJhdGNoZXI7XG5cblx0dmFyIHJlcXVpcmUkJDQkMSA9ICgpID0+IGNvbnNvbGUubG9nKCdZb3UgbXVzdCBpbXBvcnQgdGhlIGZ1bGwgdmVyc2lvbiBvZiBCb3R0bGVuZWNrIGluIG9yZGVyIHRvIHVzZSB0aGlzIGZlYXR1cmUuJyk7XG5cblx0dmFyIHJlcXVpcmUkJDggPSBnZXRDanNFeHBvcnRGcm9tTmFtZXNwYWNlKHZlcnNpb24kMik7XG5cblx0dmFyIEJvdHRsZW5lY2ssIERFRkFVTFRfUFJJT1JJVFkkMSwgRXZlbnRzJDQsIEpvYiQxLCBMb2NhbERhdGFzdG9yZSQxLCBOVU1fUFJJT1JJVElFUyQxLCBRdWV1ZXMkMSwgUmVkaXNEYXRhc3RvcmUkMSwgU3RhdGVzJDEsIFN5bmMkMSwgcGFyc2VyJDUsXG5cdCAgc3BsaWNlID0gW10uc3BsaWNlO1xuXG5cdE5VTV9QUklPUklUSUVTJDEgPSAxMDtcblxuXHRERUZBVUxUX1BSSU9SSVRZJDEgPSA1O1xuXG5cdHBhcnNlciQ1ID0gcGFyc2VyO1xuXG5cdFF1ZXVlcyQxID0gUXVldWVzXzE7XG5cblx0Sm9iJDEgPSBKb2JfMTtcblxuXHRMb2NhbERhdGFzdG9yZSQxID0gTG9jYWxEYXRhc3RvcmVfMTtcblxuXHRSZWRpc0RhdGFzdG9yZSQxID0gcmVxdWlyZSQkNCQxO1xuXG5cdEV2ZW50cyQ0ID0gRXZlbnRzXzE7XG5cblx0U3RhdGVzJDEgPSBTdGF0ZXNfMTtcblxuXHRTeW5jJDEgPSBTeW5jXzE7XG5cblx0Qm90dGxlbmVjayA9IChmdW5jdGlvbigpIHtcblx0ICBjbGFzcyBCb3R0bGVuZWNrIHtcblx0ICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSwgLi4uaW52YWxpZCkge1xuXHQgICAgICB2YXIgc3RvcmVJbnN0YW5jZU9wdGlvbnMsIHN0b3JlT3B0aW9ucztcblx0ICAgICAgdGhpcy5fYWRkVG9RdWV1ZSA9IHRoaXMuX2FkZFRvUXVldWUuYmluZCh0aGlzKTtcblx0ICAgICAgdGhpcy5fdmFsaWRhdGVPcHRpb25zKG9wdGlvbnMsIGludmFsaWQpO1xuXHQgICAgICBwYXJzZXIkNS5sb2FkKG9wdGlvbnMsIHRoaXMuaW5zdGFuY2VEZWZhdWx0cywgdGhpcyk7XG5cdCAgICAgIHRoaXMuX3F1ZXVlcyA9IG5ldyBRdWV1ZXMkMShOVU1fUFJJT1JJVElFUyQxKTtcblx0ICAgICAgdGhpcy5fc2NoZWR1bGVkID0ge307XG5cdCAgICAgIHRoaXMuX3N0YXRlcyA9IG5ldyBTdGF0ZXMkMShbXCJSRUNFSVZFRFwiLCBcIlFVRVVFRFwiLCBcIlJVTk5JTkdcIiwgXCJFWEVDVVRJTkdcIl0uY29uY2F0KHRoaXMudHJhY2tEb25lU3RhdHVzID8gW1wiRE9ORVwiXSA6IFtdKSk7XG5cdCAgICAgIHRoaXMuX2xpbWl0ZXIgPSBudWxsO1xuXHQgICAgICB0aGlzLkV2ZW50cyA9IG5ldyBFdmVudHMkNCh0aGlzKTtcblx0ICAgICAgdGhpcy5fc3VibWl0TG9jayA9IG5ldyBTeW5jJDEoXCJzdWJtaXRcIiwgdGhpcy5Qcm9taXNlKTtcblx0ICAgICAgdGhpcy5fcmVnaXN0ZXJMb2NrID0gbmV3IFN5bmMkMShcInJlZ2lzdGVyXCIsIHRoaXMuUHJvbWlzZSk7XG5cdCAgICAgIHN0b3JlT3B0aW9ucyA9IHBhcnNlciQ1LmxvYWQob3B0aW9ucywgdGhpcy5zdG9yZURlZmF1bHRzLCB7fSk7XG5cdCAgICAgIHRoaXMuX3N0b3JlID0gKGZ1bmN0aW9uKCkge1xuXHQgICAgICAgIGlmICh0aGlzLmRhdGFzdG9yZSA9PT0gXCJyZWRpc1wiIHx8IHRoaXMuZGF0YXN0b3JlID09PSBcImlvcmVkaXNcIiB8fCAodGhpcy5jb25uZWN0aW9uICE9IG51bGwpKSB7XG5cdCAgICAgICAgICBzdG9yZUluc3RhbmNlT3B0aW9ucyA9IHBhcnNlciQ1LmxvYWQob3B0aW9ucywgdGhpcy5yZWRpc1N0b3JlRGVmYXVsdHMsIHt9KTtcblx0ICAgICAgICAgIHJldHVybiBuZXcgUmVkaXNEYXRhc3RvcmUkMSh0aGlzLCBzdG9yZU9wdGlvbnMsIHN0b3JlSW5zdGFuY2VPcHRpb25zKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZGF0YXN0b3JlID09PSBcImxvY2FsXCIpIHtcblx0ICAgICAgICAgIHN0b3JlSW5zdGFuY2VPcHRpb25zID0gcGFyc2VyJDUubG9hZChvcHRpb25zLCB0aGlzLmxvY2FsU3RvcmVEZWZhdWx0cywge30pO1xuXHQgICAgICAgICAgcmV0dXJuIG5ldyBMb2NhbERhdGFzdG9yZSQxKHRoaXMsIHN0b3JlT3B0aW9ucywgc3RvcmVJbnN0YW5jZU9wdGlvbnMpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICB0aHJvdyBuZXcgQm90dGxlbmVjay5wcm90b3R5cGUuQm90dGxlbmVja0Vycm9yKGBJbnZhbGlkIGRhdGFzdG9yZSB0eXBlOiAke3RoaXMuZGF0YXN0b3JlfWApO1xuXHQgICAgICAgIH1cblx0ICAgICAgfSkuY2FsbCh0aGlzKTtcblx0ICAgICAgdGhpcy5fcXVldWVzLm9uKFwibGVmdHplcm9cIiwgKCkgPT4ge1xuXHQgICAgICAgIHZhciByZWY7XG5cdCAgICAgICAgcmV0dXJuIChyZWYgPSB0aGlzLl9zdG9yZS5oZWFydGJlYXQpICE9IG51bGwgPyB0eXBlb2YgcmVmLnJlZiA9PT0gXCJmdW5jdGlvblwiID8gcmVmLnJlZigpIDogdm9pZCAwIDogdm9pZCAwO1xuXHQgICAgICB9KTtcblx0ICAgICAgdGhpcy5fcXVldWVzLm9uKFwiemVyb1wiLCAoKSA9PiB7XG5cdCAgICAgICAgdmFyIHJlZjtcblx0ICAgICAgICByZXR1cm4gKHJlZiA9IHRoaXMuX3N0b3JlLmhlYXJ0YmVhdCkgIT0gbnVsbCA/IHR5cGVvZiByZWYudW5yZWYgPT09IFwiZnVuY3Rpb25cIiA/IHJlZi51bnJlZigpIDogdm9pZCAwIDogdm9pZCAwO1xuXHQgICAgICB9KTtcblx0ICAgIH1cblxuXHQgICAgX3ZhbGlkYXRlT3B0aW9ucyhvcHRpb25zLCBpbnZhbGlkKSB7XG5cdCAgICAgIGlmICghKChvcHRpb25zICE9IG51bGwpICYmIHR5cGVvZiBvcHRpb25zID09PSBcIm9iamVjdFwiICYmIGludmFsaWQubGVuZ3RoID09PSAwKSkge1xuXHQgICAgICAgIHRocm93IG5ldyBCb3R0bGVuZWNrLnByb3RvdHlwZS5Cb3R0bGVuZWNrRXJyb3IoXCJCb3R0bGVuZWNrIHYyIHRha2VzIGEgc2luZ2xlIG9iamVjdCBhcmd1bWVudC4gUmVmZXIgdG8gaHR0cHM6Ly9naXRodWIuY29tL1NHcm9uZGluL2JvdHRsZW5lY2sjdXBncmFkaW5nLXRvLXYyIGlmIHlvdSdyZSB1cGdyYWRpbmcgZnJvbSBCb3R0bGVuZWNrIHYxLlwiKTtcblx0ICAgICAgfVxuXHQgICAgfVxuXG5cdCAgICByZWFkeSgpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX3N0b3JlLnJlYWR5O1xuXHQgICAgfVxuXG5cdCAgICBjbGllbnRzKCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fc3RvcmUuY2xpZW50cztcblx0ICAgIH1cblxuXHQgICAgY2hhbm5lbCgpIHtcblx0ICAgICAgcmV0dXJuIGBiXyR7dGhpcy5pZH1gO1xuXHQgICAgfVxuXG5cdCAgICBjaGFubmVsX2NsaWVudCgpIHtcblx0ICAgICAgcmV0dXJuIGBiXyR7dGhpcy5pZH1fJHt0aGlzLl9zdG9yZS5jbGllbnRJZH1gO1xuXHQgICAgfVxuXG5cdCAgICBwdWJsaXNoKG1lc3NhZ2UpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX3N0b3JlLl9fcHVibGlzaF9fKG1lc3NhZ2UpO1xuXHQgICAgfVxuXG5cdCAgICBkaXNjb25uZWN0KGZsdXNoID0gdHJ1ZSkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fc3RvcmUuX19kaXNjb25uZWN0X18oZmx1c2gpO1xuXHQgICAgfVxuXG5cdCAgICBjaGFpbihfbGltaXRlcikge1xuXHQgICAgICB0aGlzLl9saW1pdGVyID0gX2xpbWl0ZXI7XG5cdCAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfVxuXG5cdCAgICBxdWV1ZWQocHJpb3JpdHkpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX3F1ZXVlcy5xdWV1ZWQocHJpb3JpdHkpO1xuXHQgICAgfVxuXG5cdCAgICBjbHVzdGVyUXVldWVkKCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fc3RvcmUuX19xdWV1ZWRfXygpO1xuXHQgICAgfVxuXG5cdCAgICBlbXB0eSgpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMucXVldWVkKCkgPT09IDAgJiYgdGhpcy5fc3VibWl0TG9jay5pc0VtcHR5KCk7XG5cdCAgICB9XG5cblx0ICAgIHJ1bm5pbmcoKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLl9zdG9yZS5fX3J1bm5pbmdfXygpO1xuXHQgICAgfVxuXG5cdCAgICBkb25lKCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fc3RvcmUuX19kb25lX18oKTtcblx0ICAgIH1cblxuXHQgICAgam9iU3RhdHVzKGlkKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLl9zdGF0ZXMuam9iU3RhdHVzKGlkKTtcblx0ICAgIH1cblxuXHQgICAgam9icyhzdGF0dXMpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlcy5zdGF0dXNKb2JzKHN0YXR1cyk7XG5cdCAgICB9XG5cblx0ICAgIGNvdW50cygpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlcy5zdGF0dXNDb3VudHMoKTtcblx0ICAgIH1cblxuXHQgICAgX3JhbmRvbUluZGV4KCkge1xuXHQgICAgICByZXR1cm4gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMik7XG5cdCAgICB9XG5cblx0ICAgIGNoZWNrKHdlaWdodCA9IDEpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX3N0b3JlLl9fY2hlY2tfXyh3ZWlnaHQpO1xuXHQgICAgfVxuXG5cdCAgICBfY2xlYXJHbG9iYWxTdGF0ZShpbmRleCkge1xuXHQgICAgICBpZiAodGhpcy5fc2NoZWR1bGVkW2luZGV4XSAhPSBudWxsKSB7XG5cdCAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3NjaGVkdWxlZFtpbmRleF0uZXhwaXJhdGlvbik7XG5cdCAgICAgICAgZGVsZXRlIHRoaXMuX3NjaGVkdWxlZFtpbmRleF07XG5cdCAgICAgICAgcmV0dXJuIHRydWU7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgcmV0dXJuIGZhbHNlO1xuXHQgICAgICB9XG5cdCAgICB9XG5cblx0ICAgIGFzeW5jIF9mcmVlKGluZGV4LCBqb2IsIG9wdGlvbnMsIGV2ZW50SW5mbykge1xuXHQgICAgICB2YXIgZSwgcnVubmluZztcblx0ICAgICAgdHJ5IHtcblx0ICAgICAgICAoe3J1bm5pbmd9ID0gKGF3YWl0IHRoaXMuX3N0b3JlLl9fZnJlZV9fKGluZGV4LCBvcHRpb25zLndlaWdodCkpKTtcblx0ICAgICAgICB0aGlzLkV2ZW50cy50cmlnZ2VyKFwiZGVidWdcIiwgYEZyZWVkICR7b3B0aW9ucy5pZH1gLCBldmVudEluZm8pO1xuXHQgICAgICAgIGlmIChydW5uaW5nID09PSAwICYmIHRoaXMuZW1wdHkoKSkge1xuXHQgICAgICAgICAgcmV0dXJuIHRoaXMuRXZlbnRzLnRyaWdnZXIoXCJpZGxlXCIpO1xuXHQgICAgICAgIH1cblx0ICAgICAgfSBjYXRjaCAoZXJyb3IxKSB7XG5cdCAgICAgICAgZSA9IGVycm9yMTtcblx0ICAgICAgICByZXR1cm4gdGhpcy5FdmVudHMudHJpZ2dlcihcImVycm9yXCIsIGUpO1xuXHQgICAgICB9XG5cdCAgICB9XG5cblx0ICAgIF9ydW4oaW5kZXgsIGpvYiwgd2FpdCkge1xuXHQgICAgICB2YXIgY2xlYXJHbG9iYWxTdGF0ZSwgZnJlZSwgcnVuO1xuXHQgICAgICBqb2IuZG9SdW4oKTtcblx0ICAgICAgY2xlYXJHbG9iYWxTdGF0ZSA9IHRoaXMuX2NsZWFyR2xvYmFsU3RhdGUuYmluZCh0aGlzLCBpbmRleCk7XG5cdCAgICAgIHJ1biA9IHRoaXMuX3J1bi5iaW5kKHRoaXMsIGluZGV4LCBqb2IpO1xuXHQgICAgICBmcmVlID0gdGhpcy5fZnJlZS5iaW5kKHRoaXMsIGluZGV4LCBqb2IpO1xuXHQgICAgICByZXR1cm4gdGhpcy5fc2NoZWR1bGVkW2luZGV4XSA9IHtcblx0ICAgICAgICB0aW1lb3V0OiBzZXRUaW1lb3V0KCgpID0+IHtcblx0ICAgICAgICAgIHJldHVybiBqb2IuZG9FeGVjdXRlKHRoaXMuX2xpbWl0ZXIsIGNsZWFyR2xvYmFsU3RhdGUsIHJ1biwgZnJlZSk7XG5cdCAgICAgICAgfSwgd2FpdCksXG5cdCAgICAgICAgZXhwaXJhdGlvbjogam9iLm9wdGlvbnMuZXhwaXJhdGlvbiAhPSBudWxsID8gc2V0VGltZW91dChmdW5jdGlvbigpIHtcblx0ICAgICAgICAgIHJldHVybiBqb2IuZG9FeHBpcmUoY2xlYXJHbG9iYWxTdGF0ZSwgcnVuLCBmcmVlKTtcblx0ICAgICAgICB9LCB3YWl0ICsgam9iLm9wdGlvbnMuZXhwaXJhdGlvbikgOiB2b2lkIDAsXG5cdCAgICAgICAgam9iOiBqb2Jcblx0ICAgICAgfTtcblx0ICAgIH1cblxuXHQgICAgX2RyYWluT25lKGNhcGFjaXR5KSB7XG5cdCAgICAgIHJldHVybiB0aGlzLl9yZWdpc3RlckxvY2suc2NoZWR1bGUoKCkgPT4ge1xuXHQgICAgICAgIHZhciBhcmdzLCBpbmRleCwgbmV4dCwgb3B0aW9ucywgcXVldWU7XG5cdCAgICAgICAgaWYgKHRoaXMucXVldWVkKCkgPT09IDApIHtcblx0ICAgICAgICAgIHJldHVybiB0aGlzLlByb21pc2UucmVzb2x2ZShudWxsKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcXVldWUgPSB0aGlzLl9xdWV1ZXMuZ2V0Rmlyc3QoKTtcblx0ICAgICAgICAoe29wdGlvbnMsIGFyZ3N9ID0gbmV4dCA9IHF1ZXVlLmZpcnN0KCkpO1xuXHQgICAgICAgIGlmICgoY2FwYWNpdHkgIT0gbnVsbCkgJiYgb3B0aW9ucy53ZWlnaHQgPiBjYXBhY2l0eSkge1xuXHQgICAgICAgICAgcmV0dXJuIHRoaXMuUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLkV2ZW50cy50cmlnZ2VyKFwiZGVidWdcIiwgYERyYWluaW5nICR7b3B0aW9ucy5pZH1gLCB7YXJncywgb3B0aW9uc30pO1xuXHQgICAgICAgIGluZGV4ID0gdGhpcy5fcmFuZG9tSW5kZXgoKTtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fc3RvcmUuX19yZWdpc3Rlcl9fKGluZGV4LCBvcHRpb25zLndlaWdodCwgb3B0aW9ucy5leHBpcmF0aW9uKS50aGVuKCh7c3VjY2Vzcywgd2FpdCwgcmVzZXJ2b2lyfSkgPT4ge1xuXHQgICAgICAgICAgdmFyIGVtcHR5O1xuXHQgICAgICAgICAgdGhpcy5FdmVudHMudHJpZ2dlcihcImRlYnVnXCIsIGBEcmFpbmVkICR7b3B0aW9ucy5pZH1gLCB7c3VjY2VzcywgYXJncywgb3B0aW9uc30pO1xuXHQgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcblx0ICAgICAgICAgICAgcXVldWUuc2hpZnQoKTtcblx0ICAgICAgICAgICAgZW1wdHkgPSB0aGlzLmVtcHR5KCk7XG5cdCAgICAgICAgICAgIGlmIChlbXB0eSkge1xuXHQgICAgICAgICAgICAgIHRoaXMuRXZlbnRzLnRyaWdnZXIoXCJlbXB0eVwiKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBpZiAocmVzZXJ2b2lyID09PSAwKSB7XG5cdCAgICAgICAgICAgICAgdGhpcy5FdmVudHMudHJpZ2dlcihcImRlcGxldGVkXCIsIGVtcHR5KTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl9ydW4oaW5kZXgsIG5leHQsIHdhaXQpO1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5Qcm9taXNlLnJlc29sdmUob3B0aW9ucy53ZWlnaHQpO1xuXHQgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH0pO1xuXHQgICAgICB9KTtcblx0ICAgIH1cblxuXHQgICAgX2RyYWluQWxsKGNhcGFjaXR5LCB0b3RhbCA9IDApIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX2RyYWluT25lKGNhcGFjaXR5KS50aGVuKChkcmFpbmVkKSA9PiB7XG5cdCAgICAgICAgdmFyIG5ld0NhcGFjaXR5O1xuXHQgICAgICAgIGlmIChkcmFpbmVkICE9IG51bGwpIHtcblx0ICAgICAgICAgIG5ld0NhcGFjaXR5ID0gY2FwYWNpdHkgIT0gbnVsbCA/IGNhcGFjaXR5IC0gZHJhaW5lZCA6IGNhcGFjaXR5O1xuXHQgICAgICAgICAgcmV0dXJuIHRoaXMuX2RyYWluQWxsKG5ld0NhcGFjaXR5LCB0b3RhbCArIGRyYWluZWQpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICByZXR1cm4gdGhpcy5Qcm9taXNlLnJlc29sdmUodG90YWwpO1xuXHQgICAgICAgIH1cblx0ICAgICAgfSkuY2F0Y2goKGUpID0+IHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5FdmVudHMudHJpZ2dlcihcImVycm9yXCIsIGUpO1xuXHQgICAgICB9KTtcblx0ICAgIH1cblxuXHQgICAgX2Ryb3BBbGxRdWV1ZWQobWVzc2FnZSkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fcXVldWVzLnNoaWZ0QWxsKGZ1bmN0aW9uKGpvYikge1xuXHQgICAgICAgIHJldHVybiBqb2IuZG9Ecm9wKHttZXNzYWdlfSk7XG5cdCAgICAgIH0pO1xuXHQgICAgfVxuXG5cdCAgICBzdG9wKG9wdGlvbnMgPSB7fSkge1xuXHQgICAgICB2YXIgZG9uZSwgd2FpdEZvckV4ZWN1dGluZztcblx0ICAgICAgb3B0aW9ucyA9IHBhcnNlciQ1LmxvYWQob3B0aW9ucywgdGhpcy5zdG9wRGVmYXVsdHMpO1xuXHQgICAgICB3YWl0Rm9yRXhlY3V0aW5nID0gKGF0KSA9PiB7XG5cdCAgICAgICAgdmFyIGZpbmlzaGVkO1xuXHQgICAgICAgIGZpbmlzaGVkID0gKCkgPT4ge1xuXHQgICAgICAgICAgdmFyIGNvdW50cztcblx0ICAgICAgICAgIGNvdW50cyA9IHRoaXMuX3N0YXRlcy5jb3VudHM7XG5cdCAgICAgICAgICByZXR1cm4gKGNvdW50c1swXSArIGNvdW50c1sxXSArIGNvdW50c1syXSArIGNvdW50c1szXSkgPT09IGF0O1xuXHQgICAgICAgIH07XG5cdCAgICAgICAgcmV0dXJuIG5ldyB0aGlzLlByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHQgICAgICAgICAgaWYgKGZpbmlzaGVkKCkpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcblx0ICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLm9uKFwiZG9uZVwiLCAoKSA9PiB7XG5cdCAgICAgICAgICAgICAgaWYgKGZpbmlzaGVkKCkpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKFwiZG9uZVwiKTtcblx0ICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG5cdCAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9KTtcblx0ICAgICAgfTtcblx0ICAgICAgZG9uZSA9IG9wdGlvbnMuZHJvcFdhaXRpbmdKb2JzID8gKHRoaXMuX3J1biA9IGZ1bmN0aW9uKGluZGV4LCBuZXh0KSB7XG5cdCAgICAgICAgcmV0dXJuIG5leHQuZG9Ecm9wKHtcblx0ICAgICAgICAgIG1lc3NhZ2U6IG9wdGlvbnMuZHJvcEVycm9yTWVzc2FnZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICB9LCB0aGlzLl9kcmFpbk9uZSA9ICgpID0+IHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5Qcm9taXNlLnJlc29sdmUobnVsbCk7XG5cdCAgICAgIH0sIHRoaXMuX3JlZ2lzdGVyTG9jay5zY2hlZHVsZSgoKSA9PiB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3N1Ym1pdExvY2suc2NoZWR1bGUoKCkgPT4ge1xuXHQgICAgICAgICAgdmFyIGssIHJlZiwgdjtcblx0ICAgICAgICAgIHJlZiA9IHRoaXMuX3NjaGVkdWxlZDtcblx0ICAgICAgICAgIGZvciAoayBpbiByZWYpIHtcblx0ICAgICAgICAgICAgdiA9IHJlZltrXTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuam9iU3RhdHVzKHYuam9iLm9wdGlvbnMuaWQpID09PSBcIlJVTk5JTkdcIikge1xuXHQgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh2LnRpbWVvdXQpO1xuXHQgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh2LmV4cGlyYXRpb24pO1xuXHQgICAgICAgICAgICAgIHYuam9iLmRvRHJvcCh7XG5cdCAgICAgICAgICAgICAgICBtZXNzYWdlOiBvcHRpb25zLmRyb3BFcnJvck1lc3NhZ2Vcblx0ICAgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgfVxuXHQgICAgICAgICAgdGhpcy5fZHJvcEFsbFF1ZXVlZChvcHRpb25zLmRyb3BFcnJvck1lc3NhZ2UpO1xuXHQgICAgICAgICAgcmV0dXJuIHdhaXRGb3JFeGVjdXRpbmcoMCk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgIH0pKSA6IHRoaXMuc2NoZWR1bGUoe1xuXHQgICAgICAgIHByaW9yaXR5OiBOVU1fUFJJT1JJVElFUyQxIC0gMSxcblx0ICAgICAgICB3ZWlnaHQ6IDBcblx0ICAgICAgfSwgKCkgPT4ge1xuXHQgICAgICAgIHJldHVybiB3YWl0Rm9yRXhlY3V0aW5nKDEpO1xuXHQgICAgICB9KTtcblx0ICAgICAgdGhpcy5fcmVjZWl2ZSA9IGZ1bmN0aW9uKGpvYikge1xuXHQgICAgICAgIHJldHVybiBqb2IuX3JlamVjdChuZXcgQm90dGxlbmVjay5wcm90b3R5cGUuQm90dGxlbmVja0Vycm9yKG9wdGlvbnMuZW5xdWV1ZUVycm9yTWVzc2FnZSkpO1xuXHQgICAgICB9O1xuXHQgICAgICB0aGlzLnN0b3AgPSAoKSA9PiB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuUHJvbWlzZS5yZWplY3QobmV3IEJvdHRsZW5lY2sucHJvdG90eXBlLkJvdHRsZW5lY2tFcnJvcihcInN0b3AoKSBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZFwiKSk7XG5cdCAgICAgIH07XG5cdCAgICAgIHJldHVybiBkb25lO1xuXHQgICAgfVxuXG5cdCAgICBhc3luYyBfYWRkVG9RdWV1ZShqb2IpIHtcblx0ICAgICAgdmFyIGFyZ3MsIGJsb2NrZWQsIGVycm9yLCBvcHRpb25zLCByZWFjaGVkSFdNLCBzaGlmdGVkLCBzdHJhdGVneTtcblx0ICAgICAgKHthcmdzLCBvcHRpb25zfSA9IGpvYik7XG5cdCAgICAgIHRyeSB7XG5cdCAgICAgICAgKHtyZWFjaGVkSFdNLCBibG9ja2VkLCBzdHJhdGVneX0gPSAoYXdhaXQgdGhpcy5fc3RvcmUuX19zdWJtaXRfXyh0aGlzLnF1ZXVlZCgpLCBvcHRpb25zLndlaWdodCkpKTtcblx0ICAgICAgfSBjYXRjaCAoZXJyb3IxKSB7XG5cdCAgICAgICAgZXJyb3IgPSBlcnJvcjE7XG5cdCAgICAgICAgdGhpcy5FdmVudHMudHJpZ2dlcihcImRlYnVnXCIsIGBDb3VsZCBub3QgcXVldWUgJHtvcHRpb25zLmlkfWAsIHthcmdzLCBvcHRpb25zLCBlcnJvcn0pO1xuXHQgICAgICAgIGpvYi5kb0Ryb3Aoe2Vycm9yfSk7XG5cdCAgICAgICAgcmV0dXJuIGZhbHNlO1xuXHQgICAgICB9XG5cdCAgICAgIGlmIChibG9ja2VkKSB7XG5cdCAgICAgICAgam9iLmRvRHJvcCgpO1xuXHQgICAgICAgIHJldHVybiB0cnVlO1xuXHQgICAgICB9IGVsc2UgaWYgKHJlYWNoZWRIV00pIHtcblx0ICAgICAgICBzaGlmdGVkID0gc3RyYXRlZ3kgPT09IEJvdHRsZW5lY2sucHJvdG90eXBlLnN0cmF0ZWd5LkxFQUsgPyB0aGlzLl9xdWV1ZXMuc2hpZnRMYXN0RnJvbShvcHRpb25zLnByaW9yaXR5KSA6IHN0cmF0ZWd5ID09PSBCb3R0bGVuZWNrLnByb3RvdHlwZS5zdHJhdGVneS5PVkVSRkxPV19QUklPUklUWSA/IHRoaXMuX3F1ZXVlcy5zaGlmdExhc3RGcm9tKG9wdGlvbnMucHJpb3JpdHkgKyAxKSA6IHN0cmF0ZWd5ID09PSBCb3R0bGVuZWNrLnByb3RvdHlwZS5zdHJhdGVneS5PVkVSRkxPVyA/IGpvYiA6IHZvaWQgMDtcblx0ICAgICAgICBpZiAoc2hpZnRlZCAhPSBudWxsKSB7XG5cdCAgICAgICAgICBzaGlmdGVkLmRvRHJvcCgpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoKHNoaWZ0ZWQgPT0gbnVsbCkgfHwgc3RyYXRlZ3kgPT09IEJvdHRsZW5lY2sucHJvdG90eXBlLnN0cmF0ZWd5Lk9WRVJGTE9XKSB7XG5cdCAgICAgICAgICBpZiAoc2hpZnRlZCA9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIGpvYi5kb0Ryb3AoKTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICAgIHJldHVybiByZWFjaGVkSFdNO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgICBqb2IuZG9RdWV1ZShyZWFjaGVkSFdNLCBibG9ja2VkKTtcblx0ICAgICAgdGhpcy5fcXVldWVzLnB1c2goam9iKTtcblx0ICAgICAgYXdhaXQgdGhpcy5fZHJhaW5BbGwoKTtcblx0ICAgICAgcmV0dXJuIHJlYWNoZWRIV007XG5cdCAgICB9XG5cblx0ICAgIF9yZWNlaXZlKGpvYikge1xuXHQgICAgICBpZiAodGhpcy5fc3RhdGVzLmpvYlN0YXR1cyhqb2Iub3B0aW9ucy5pZCkgIT0gbnVsbCkge1xuXHQgICAgICAgIGpvYi5fcmVqZWN0KG5ldyBCb3R0bGVuZWNrLnByb3RvdHlwZS5Cb3R0bGVuZWNrRXJyb3IoYEEgam9iIHdpdGggdGhlIHNhbWUgaWQgYWxyZWFkeSBleGlzdHMgKGlkPSR7am9iLm9wdGlvbnMuaWR9KWApKTtcblx0ICAgICAgICByZXR1cm4gZmFsc2U7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgam9iLmRvUmVjZWl2ZSgpO1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9zdWJtaXRMb2NrLnNjaGVkdWxlKHRoaXMuX2FkZFRvUXVldWUsIGpvYik7XG5cdCAgICAgIH1cblx0ICAgIH1cblxuXHQgICAgc3VibWl0KC4uLmFyZ3MpIHtcblx0ICAgICAgdmFyIGNiLCBmbiwgam9iLCBvcHRpb25zLCByZWYsIHJlZjEsIHRhc2s7XG5cdCAgICAgIGlmICh0eXBlb2YgYXJnc1swXSA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdCAgICAgICAgcmVmID0gYXJncywgW2ZuLCAuLi5hcmdzXSA9IHJlZiwgW2NiXSA9IHNwbGljZS5jYWxsKGFyZ3MsIC0xKTtcblx0ICAgICAgICBvcHRpb25zID0gcGFyc2VyJDUubG9hZCh7fSwgdGhpcy5qb2JEZWZhdWx0cyk7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgcmVmMSA9IGFyZ3MsIFtvcHRpb25zLCBmbiwgLi4uYXJnc10gPSByZWYxLCBbY2JdID0gc3BsaWNlLmNhbGwoYXJncywgLTEpO1xuXHQgICAgICAgIG9wdGlvbnMgPSBwYXJzZXIkNS5sb2FkKG9wdGlvbnMsIHRoaXMuam9iRGVmYXVsdHMpO1xuXHQgICAgICB9XG5cdCAgICAgIHRhc2sgPSAoLi4uYXJncykgPT4ge1xuXHQgICAgICAgIHJldHVybiBuZXcgdGhpcy5Qcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuXHQgICAgICAgICAgcmV0dXJuIGZuKC4uLmFyZ3MsIGZ1bmN0aW9uKC4uLmFyZ3MpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIChhcmdzWzBdICE9IG51bGwgPyByZWplY3QgOiByZXNvbHZlKShhcmdzKTtcblx0ICAgICAgICAgIH0pO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICB9O1xuXHQgICAgICBqb2IgPSBuZXcgSm9iJDEodGFzaywgYXJncywgb3B0aW9ucywgdGhpcy5qb2JEZWZhdWx0cywgdGhpcy5yZWplY3RPbkRyb3AsIHRoaXMuRXZlbnRzLCB0aGlzLl9zdGF0ZXMsIHRoaXMuUHJvbWlzZSk7XG5cdCAgICAgIGpvYi5wcm9taXNlLnRoZW4oZnVuY3Rpb24oYXJncykge1xuXHQgICAgICAgIHJldHVybiB0eXBlb2YgY2IgPT09IFwiZnVuY3Rpb25cIiA/IGNiKC4uLmFyZ3MpIDogdm9pZCAwO1xuXHQgICAgICB9KS5jYXRjaChmdW5jdGlvbihhcmdzKSB7XG5cdCAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYXJncykpIHtcblx0ICAgICAgICAgIHJldHVybiB0eXBlb2YgY2IgPT09IFwiZnVuY3Rpb25cIiA/IGNiKC4uLmFyZ3MpIDogdm9pZCAwO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICByZXR1cm4gdHlwZW9mIGNiID09PSBcImZ1bmN0aW9uXCIgPyBjYihhcmdzKSA6IHZvaWQgMDtcblx0ICAgICAgICB9XG5cdCAgICAgIH0pO1xuXHQgICAgICByZXR1cm4gdGhpcy5fcmVjZWl2ZShqb2IpO1xuXHQgICAgfVxuXG5cdCAgICBzY2hlZHVsZSguLi5hcmdzKSB7XG5cdCAgICAgIHZhciBqb2IsIG9wdGlvbnMsIHRhc2s7XG5cdCAgICAgIGlmICh0eXBlb2YgYXJnc1swXSA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdCAgICAgICAgW3Rhc2ssIC4uLmFyZ3NdID0gYXJncztcblx0ICAgICAgICBvcHRpb25zID0ge307XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgW29wdGlvbnMsIHRhc2ssIC4uLmFyZ3NdID0gYXJncztcblx0ICAgICAgfVxuXHQgICAgICBqb2IgPSBuZXcgSm9iJDEodGFzaywgYXJncywgb3B0aW9ucywgdGhpcy5qb2JEZWZhdWx0cywgdGhpcy5yZWplY3RPbkRyb3AsIHRoaXMuRXZlbnRzLCB0aGlzLl9zdGF0ZXMsIHRoaXMuUHJvbWlzZSk7XG5cdCAgICAgIHRoaXMuX3JlY2VpdmUoam9iKTtcblx0ICAgICAgcmV0dXJuIGpvYi5wcm9taXNlO1xuXHQgICAgfVxuXG5cdCAgICB3cmFwKGZuKSB7XG5cdCAgICAgIHZhciBzY2hlZHVsZSwgd3JhcHBlZDtcblx0ICAgICAgc2NoZWR1bGUgPSB0aGlzLnNjaGVkdWxlLmJpbmQodGhpcyk7XG5cdCAgICAgIHdyYXBwZWQgPSBmdW5jdGlvbiguLi5hcmdzKSB7XG5cdCAgICAgICAgcmV0dXJuIHNjaGVkdWxlKGZuLmJpbmQodGhpcyksIC4uLmFyZ3MpO1xuXHQgICAgICB9O1xuXHQgICAgICB3cmFwcGVkLndpdGhPcHRpb25zID0gZnVuY3Rpb24ob3B0aW9ucywgLi4uYXJncykge1xuXHQgICAgICAgIHJldHVybiBzY2hlZHVsZShvcHRpb25zLCBmbiwgLi4uYXJncyk7XG5cdCAgICAgIH07XG5cdCAgICAgIHJldHVybiB3cmFwcGVkO1xuXHQgICAgfVxuXG5cdCAgICBhc3luYyB1cGRhdGVTZXR0aW5ncyhvcHRpb25zID0ge30pIHtcblx0ICAgICAgYXdhaXQgdGhpcy5fc3RvcmUuX191cGRhdGVTZXR0aW5nc19fKHBhcnNlciQ1Lm92ZXJ3cml0ZShvcHRpb25zLCB0aGlzLnN0b3JlRGVmYXVsdHMpKTtcblx0ICAgICAgcGFyc2VyJDUub3ZlcndyaXRlKG9wdGlvbnMsIHRoaXMuaW5zdGFuY2VEZWZhdWx0cywgdGhpcyk7XG5cdCAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfVxuXG5cdCAgICBjdXJyZW50UmVzZXJ2b2lyKCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fc3RvcmUuX19jdXJyZW50UmVzZXJ2b2lyX18oKTtcblx0ICAgIH1cblxuXHQgICAgaW5jcmVtZW50UmVzZXJ2b2lyKGluY3IgPSAwKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLl9zdG9yZS5fX2luY3JlbWVudFJlc2Vydm9pcl9fKGluY3IpO1xuXHQgICAgfVxuXG5cdCAgfVxuXHQgIEJvdHRsZW5lY2suZGVmYXVsdCA9IEJvdHRsZW5lY2s7XG5cblx0ICBCb3R0bGVuZWNrLkV2ZW50cyA9IEV2ZW50cyQ0O1xuXG5cdCAgQm90dGxlbmVjay52ZXJzaW9uID0gQm90dGxlbmVjay5wcm90b3R5cGUudmVyc2lvbiA9IHJlcXVpcmUkJDgudmVyc2lvbjtcblxuXHQgIEJvdHRsZW5lY2suc3RyYXRlZ3kgPSBCb3R0bGVuZWNrLnByb3RvdHlwZS5zdHJhdGVneSA9IHtcblx0ICAgIExFQUs6IDEsXG5cdCAgICBPVkVSRkxPVzogMixcblx0ICAgIE9WRVJGTE9XX1BSSU9SSVRZOiA0LFxuXHQgICAgQkxPQ0s6IDNcblx0ICB9O1xuXG5cdCAgQm90dGxlbmVjay5Cb3R0bGVuZWNrRXJyb3IgPSBCb3R0bGVuZWNrLnByb3RvdHlwZS5Cb3R0bGVuZWNrRXJyb3IgPSBCb3R0bGVuZWNrRXJyb3JfMTtcblxuXHQgIEJvdHRsZW5lY2suR3JvdXAgPSBCb3R0bGVuZWNrLnByb3RvdHlwZS5Hcm91cCA9IEdyb3VwXzE7XG5cblx0ICBCb3R0bGVuZWNrLlJlZGlzQ29ubmVjdGlvbiA9IEJvdHRsZW5lY2sucHJvdG90eXBlLlJlZGlzQ29ubmVjdGlvbiA9IHJlcXVpcmUkJDI7XG5cblx0ICBCb3R0bGVuZWNrLklPUmVkaXNDb25uZWN0aW9uID0gQm90dGxlbmVjay5wcm90b3R5cGUuSU9SZWRpc0Nvbm5lY3Rpb24gPSByZXF1aXJlJCQzO1xuXG5cdCAgQm90dGxlbmVjay5CYXRjaGVyID0gQm90dGxlbmVjay5wcm90b3R5cGUuQmF0Y2hlciA9IEJhdGNoZXJfMTtcblxuXHQgIEJvdHRsZW5lY2sucHJvdG90eXBlLmpvYkRlZmF1bHRzID0ge1xuXHQgICAgcHJpb3JpdHk6IERFRkFVTFRfUFJJT1JJVFkkMSxcblx0ICAgIHdlaWdodDogMSxcblx0ICAgIGV4cGlyYXRpb246IG51bGwsXG5cdCAgICBpZDogXCI8bm8taWQ+XCJcblx0ICB9O1xuXG5cdCAgQm90dGxlbmVjay5wcm90b3R5cGUuc3RvcmVEZWZhdWx0cyA9IHtcblx0ICAgIG1heENvbmN1cnJlbnQ6IG51bGwsXG5cdCAgICBtaW5UaW1lOiAwLFxuXHQgICAgaGlnaFdhdGVyOiBudWxsLFxuXHQgICAgc3RyYXRlZ3k6IEJvdHRsZW5lY2sucHJvdG90eXBlLnN0cmF0ZWd5LkxFQUssXG5cdCAgICBwZW5hbHR5OiBudWxsLFxuXHQgICAgcmVzZXJ2b2lyOiBudWxsLFxuXHQgICAgcmVzZXJ2b2lyUmVmcmVzaEludGVydmFsOiBudWxsLFxuXHQgICAgcmVzZXJ2b2lyUmVmcmVzaEFtb3VudDogbnVsbCxcblx0ICAgIHJlc2Vydm9pckluY3JlYXNlSW50ZXJ2YWw6IG51bGwsXG5cdCAgICByZXNlcnZvaXJJbmNyZWFzZUFtb3VudDogbnVsbCxcblx0ICAgIHJlc2Vydm9pckluY3JlYXNlTWF4aW11bTogbnVsbFxuXHQgIH07XG5cblx0ICBCb3R0bGVuZWNrLnByb3RvdHlwZS5sb2NhbFN0b3JlRGVmYXVsdHMgPSB7XG5cdCAgICBQcm9taXNlOiBQcm9taXNlLFxuXHQgICAgdGltZW91dDogbnVsbCxcblx0ICAgIGhlYXJ0YmVhdEludGVydmFsOiAyNTBcblx0ICB9O1xuXG5cdCAgQm90dGxlbmVjay5wcm90b3R5cGUucmVkaXNTdG9yZURlZmF1bHRzID0ge1xuXHQgICAgUHJvbWlzZTogUHJvbWlzZSxcblx0ICAgIHRpbWVvdXQ6IG51bGwsXG5cdCAgICBoZWFydGJlYXRJbnRlcnZhbDogNTAwMCxcblx0ICAgIGNsaWVudFRpbWVvdXQ6IDEwMDAwLFxuXHQgICAgUmVkaXM6IG51bGwsXG5cdCAgICBjbGllbnRPcHRpb25zOiB7fSxcblx0ICAgIGNsdXN0ZXJOb2RlczogbnVsbCxcblx0ICAgIGNsZWFyRGF0YXN0b3JlOiBmYWxzZSxcblx0ICAgIGNvbm5lY3Rpb246IG51bGxcblx0ICB9O1xuXG5cdCAgQm90dGxlbmVjay5wcm90b3R5cGUuaW5zdGFuY2VEZWZhdWx0cyA9IHtcblx0ICAgIGRhdGFzdG9yZTogXCJsb2NhbFwiLFxuXHQgICAgY29ubmVjdGlvbjogbnVsbCxcblx0ICAgIGlkOiBcIjxuby1pZD5cIixcblx0ICAgIHJlamVjdE9uRHJvcDogdHJ1ZSxcblx0ICAgIHRyYWNrRG9uZVN0YXR1czogZmFsc2UsXG5cdCAgICBQcm9taXNlOiBQcm9taXNlXG5cdCAgfTtcblxuXHQgIEJvdHRsZW5lY2sucHJvdG90eXBlLnN0b3BEZWZhdWx0cyA9IHtcblx0ICAgIGVucXVldWVFcnJvck1lc3NhZ2U6IFwiVGhpcyBsaW1pdGVyIGhhcyBiZWVuIHN0b3BwZWQgYW5kIGNhbm5vdCBhY2NlcHQgbmV3IGpvYnMuXCIsXG5cdCAgICBkcm9wV2FpdGluZ0pvYnM6IHRydWUsXG5cdCAgICBkcm9wRXJyb3JNZXNzYWdlOiBcIlRoaXMgbGltaXRlciBoYXMgYmVlbiBzdG9wcGVkLlwiXG5cdCAgfTtcblxuXHQgIHJldHVybiBCb3R0bGVuZWNrO1xuXG5cdH0pLmNhbGwoY29tbW9uanNHbG9iYWwpO1xuXG5cdHZhciBCb3R0bGVuZWNrXzEgPSBCb3R0bGVuZWNrO1xuXG5cdHZhciBsaWIgPSBCb3R0bGVuZWNrXzE7XG5cblx0cmV0dXJuIGxpYjtcblxufSkpKTtcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5mdW5jdGlvbiBfaW50ZXJvcERlZmF1bHQgKGV4KSB7IHJldHVybiAoZXggJiYgKHR5cGVvZiBleCA9PT0gJ29iamVjdCcpICYmICdkZWZhdWx0JyBpbiBleCkgPyBleFsnZGVmYXVsdCddIDogZXg7IH1cblxudmFyIEJvdHRsZW5lY2sgPSBfaW50ZXJvcERlZmF1bHQocmVxdWlyZSgnYm90dGxlbmVjay9saWdodCcpKTtcblxuLy8gQHRzLWlnbm9yZVxuYXN5bmMgZnVuY3Rpb24gZXJyb3JSZXF1ZXN0KG9jdG9raXQsIHN0YXRlLCBlcnJvciwgb3B0aW9ucykge1xuICBpZiAoIWVycm9yLnJlcXVlc3QgfHwgIWVycm9yLnJlcXVlc3QucmVxdWVzdCkge1xuICAgIC8vIGFkZHJlc3MgaHR0cHM6Ly9naXRodWIuY29tL29jdG9raXQvcGx1Z2luLXJldHJ5LmpzL2lzc3Vlcy84XG4gICAgdGhyb3cgZXJyb3I7XG4gIH0gLy8gcmV0cnkgYWxsID49IDQwMCAmJiBub3QgZG9Ob3RSZXRyeVxuXG5cbiAgaWYgKGVycm9yLnN0YXR1cyA+PSA0MDAgJiYgIXN0YXRlLmRvTm90UmV0cnkuaW5jbHVkZXMoZXJyb3Iuc3RhdHVzKSkge1xuICAgIGNvbnN0IHJldHJpZXMgPSBvcHRpb25zLnJlcXVlc3QucmV0cmllcyAhPSBudWxsID8gb3B0aW9ucy5yZXF1ZXN0LnJldHJpZXMgOiBzdGF0ZS5yZXRyaWVzO1xuICAgIGNvbnN0IHJldHJ5QWZ0ZXIgPSBNYXRoLnBvdygob3B0aW9ucy5yZXF1ZXN0LnJldHJ5Q291bnQgfHwgMCkgKyAxLCAyKTtcbiAgICB0aHJvdyBvY3Rva2l0LnJldHJ5LnJldHJ5UmVxdWVzdChlcnJvciwgcmV0cmllcywgcmV0cnlBZnRlcik7XG4gIH0gLy8gTWF5YmUgZXZlbnR1YWxseSB0aGVyZSB3aWxsIGJlIG1vcmUgY2FzZXMgaGVyZVxuXG5cbiAgdGhyb3cgZXJyb3I7XG59XG5cbi8vIEB0cy1pZ25vcmVcblxuYXN5bmMgZnVuY3Rpb24gd3JhcFJlcXVlc3Qoc3RhdGUsIHJlcXVlc3QsIG9wdGlvbnMpIHtcbiAgY29uc3QgbGltaXRlciA9IG5ldyBCb3R0bGVuZWNrKCk7IC8vIEB0cy1pZ25vcmVcblxuICBsaW1pdGVyLm9uKFwiZmFpbGVkXCIsIGZ1bmN0aW9uIChlcnJvciwgaW5mbykge1xuICAgIGNvbnN0IG1heFJldHJpZXMgPSB+fmVycm9yLnJlcXVlc3QucmVxdWVzdC5yZXRyaWVzO1xuICAgIGNvbnN0IGFmdGVyID0gfn5lcnJvci5yZXF1ZXN0LnJlcXVlc3QucmV0cnlBZnRlcjtcbiAgICBvcHRpb25zLnJlcXVlc3QucmV0cnlDb3VudCA9IGluZm8ucmV0cnlDb3VudCArIDE7XG5cbiAgICBpZiAobWF4UmV0cmllcyA+IGluZm8ucmV0cnlDb3VudCkge1xuICAgICAgLy8gUmV0dXJuaW5nIGEgbnVtYmVyIGluc3RydWN0cyB0aGUgbGltaXRlciB0byByZXRyeVxuICAgICAgLy8gdGhlIHJlcXVlc3QgYWZ0ZXIgdGhhdCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGhhdmUgcGFzc2VkXG4gICAgICByZXR1cm4gYWZ0ZXIgKiBzdGF0ZS5yZXRyeUFmdGVyQmFzZVZhbHVlO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBsaW1pdGVyLnNjaGVkdWxlKHJlcXVlc3QsIG9wdGlvbnMpO1xufVxuXG5jb25zdCBWRVJTSU9OID0gXCIzLjAuOVwiO1xuZnVuY3Rpb24gcmV0cnkob2N0b2tpdCwgb2N0b2tpdE9wdGlvbnMpIHtcbiAgY29uc3Qgc3RhdGUgPSBPYmplY3QuYXNzaWduKHtcbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIHJldHJ5QWZ0ZXJCYXNlVmFsdWU6IDEwMDAsXG4gICAgZG9Ob3RSZXRyeTogWzQwMCwgNDAxLCA0MDMsIDQwNCwgNDIyXSxcbiAgICByZXRyaWVzOiAzXG4gIH0sIG9jdG9raXRPcHRpb25zLnJldHJ5KTtcblxuICBpZiAoc3RhdGUuZW5hYmxlZCkge1xuICAgIG9jdG9raXQuaG9vay5lcnJvcihcInJlcXVlc3RcIiwgZXJyb3JSZXF1ZXN0LmJpbmQobnVsbCwgb2N0b2tpdCwgc3RhdGUpKTtcbiAgICBvY3Rva2l0Lmhvb2sud3JhcChcInJlcXVlc3RcIiwgd3JhcFJlcXVlc3QuYmluZChudWxsLCBzdGF0ZSkpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICByZXRyeToge1xuICAgICAgcmV0cnlSZXF1ZXN0OiAoZXJyb3IsIHJldHJpZXMsIHJldHJ5QWZ0ZXIpID0+IHtcbiAgICAgICAgZXJyb3IucmVxdWVzdC5yZXF1ZXN0ID0gT2JqZWN0LmFzc2lnbih7fSwgZXJyb3IucmVxdWVzdC5yZXF1ZXN0LCB7XG4gICAgICAgICAgcmV0cmllczogcmV0cmllcyxcbiAgICAgICAgICByZXRyeUFmdGVyOiByZXRyeUFmdGVyXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxucmV0cnkuVkVSU0lPTiA9IFZFUlNJT047XG5cbmV4cG9ydHMuVkVSU0lPTiA9IFZFUlNJT047XG5leHBvcnRzLnJldHJ5ID0gcmV0cnk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRBcnRpZmFjdEludGVybmFsID0gZXhwb3J0cy5nZXRBcnRpZmFjdFB1YmxpYyA9IHZvaWQgMDtcbmNvbnN0IGdpdGh1Yl8xID0gcmVxdWlyZShcIkBhY3Rpb25zL2dpdGh1YlwiKTtcbmNvbnN0IHBsdWdpbl9yZXRyeV8xID0gcmVxdWlyZShcIkBvY3Rva2l0L3BsdWdpbi1yZXRyeVwiKTtcbmNvbnN0IGNvcmUgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIkBhY3Rpb25zL2NvcmVcIikpO1xuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoXCJAYWN0aW9ucy9naXRodWIvbGliL3V0aWxzXCIpO1xuY29uc3QgcmV0cnlfb3B0aW9uc18xID0gcmVxdWlyZShcIi4vcmV0cnktb3B0aW9uc1wiKTtcbmNvbnN0IHBsdWdpbl9yZXF1ZXN0X2xvZ18xID0gcmVxdWlyZShcIkBvY3Rva2l0L3BsdWdpbi1yZXF1ZXN0LWxvZ1wiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvdXRpbFwiKTtcbmNvbnN0IHVzZXJfYWdlbnRfMSA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvdXNlci1hZ2VudFwiKTtcbmNvbnN0IGFydGlmYWN0X3R3aXJwX2NsaWVudF8xID0gcmVxdWlyZShcIi4uL3NoYXJlZC9hcnRpZmFjdC10d2lycC1jbGllbnRcIik7XG5jb25zdCBnZW5lcmF0ZWRfMSA9IHJlcXVpcmUoXCIuLi8uLi9nZW5lcmF0ZWRcIik7XG5jb25zdCBlcnJvcnNfMSA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvZXJyb3JzXCIpO1xuZnVuY3Rpb24gZ2V0QXJ0aWZhY3RQdWJsaWMoYXJ0aWZhY3ROYW1lLCB3b3JrZmxvd1J1bklkLCByZXBvc2l0b3J5T3duZXIsIHJlcG9zaXRvcnlOYW1lLCB0b2tlbikge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBbcmV0cnlPcHRzLCByZXF1ZXN0T3B0c10gPSAoMCwgcmV0cnlfb3B0aW9uc18xLmdldFJldHJ5T3B0aW9ucykodXRpbHNfMS5kZWZhdWx0cyk7XG4gICAgICAgIGNvbnN0IG9wdHMgPSB7XG4gICAgICAgICAgICBsb2c6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHVzZXJBZ2VudDogKDAsIHVzZXJfYWdlbnRfMS5nZXRVc2VyQWdlbnRTdHJpbmcpKCksXG4gICAgICAgICAgICBwcmV2aWV3czogdW5kZWZpbmVkLFxuICAgICAgICAgICAgcmV0cnk6IHJldHJ5T3B0cyxcbiAgICAgICAgICAgIHJlcXVlc3Q6IHJlcXVlc3RPcHRzXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGdpdGh1YiA9ICgwLCBnaXRodWJfMS5nZXRPY3Rva2l0KSh0b2tlbiwgb3B0cywgcGx1Z2luX3JldHJ5XzEucmV0cnksIHBsdWdpbl9yZXF1ZXN0X2xvZ18xLnJlcXVlc3RMb2cpO1xuICAgICAgICBjb25zdCBnZXRBcnRpZmFjdFJlc3AgPSB5aWVsZCBnaXRodWIucmVxdWVzdCgnR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXJ0aWZhY3Rzez9uYW1lfScsIHtcbiAgICAgICAgICAgIG93bmVyOiByZXBvc2l0b3J5T3duZXIsXG4gICAgICAgICAgICByZXBvOiByZXBvc2l0b3J5TmFtZSxcbiAgICAgICAgICAgIHJ1bl9pZDogd29ya2Zsb3dSdW5JZCxcbiAgICAgICAgICAgIG5hbWU6IGFydGlmYWN0TmFtZVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGdldEFydGlmYWN0UmVzcC5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGVycm9yc18xLkludmFsaWRSZXNwb25zZUVycm9yKGBJbnZhbGlkIHJlc3BvbnNlIGZyb20gR2l0SHViIEFQSTogJHtnZXRBcnRpZmFjdFJlc3Auc3RhdHVzfSAoJHsoX2EgPSBnZXRBcnRpZmFjdFJlc3AgPT09IG51bGwgfHwgZ2V0QXJ0aWZhY3RSZXNwID09PSB2b2lkIDAgPyB2b2lkIDAgOiBnZXRBcnRpZmFjdFJlc3AuaGVhZGVycykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hWyd4LWdpdGh1Yi1yZXF1ZXN0LWlkJ119KWApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChnZXRBcnRpZmFjdFJlc3AuZGF0YS5hcnRpZmFjdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuQXJ0aWZhY3ROb3RGb3VuZEVycm9yKGBBcnRpZmFjdCBub3QgZm91bmQgZm9yIG5hbWU6ICR7YXJ0aWZhY3ROYW1lfVxuICAgICAgICBQbGVhc2UgZW5zdXJlIHRoYXQgeW91ciBhcnRpZmFjdCBpcyBub3QgZXhwaXJlZCBhbmQgdGhlIGFydGlmYWN0IHdhcyB1cGxvYWRlZCB1c2luZyBhIGNvbXBhdGlibGUgdmVyc2lvbiBvZiB0b29sa2l0L3VwbG9hZC1hcnRpZmFjdC5cbiAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHZpc2l0IHRoZSBHaXRIdWIgQXJ0aWZhY3RzIEZBUTogaHR0cHM6Ly9naXRodWIuY29tL2FjdGlvbnMvdG9vbGtpdC9ibG9iL21haW4vcGFja2FnZXMvYXJ0aWZhY3QvZG9jcy9mYXEubWRgKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgYXJ0aWZhY3QgPSBnZXRBcnRpZmFjdFJlc3AuZGF0YS5hcnRpZmFjdHNbMF07XG4gICAgICAgIGlmIChnZXRBcnRpZmFjdFJlc3AuZGF0YS5hcnRpZmFjdHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgYXJ0aWZhY3QgPSBnZXRBcnRpZmFjdFJlc3AuZGF0YS5hcnRpZmFjdHMuc29ydCgoYSwgYikgPT4gYi5pZCAtIGEuaWQpWzBdO1xuICAgICAgICAgICAgY29yZS5kZWJ1ZyhgTW9yZSB0aGFuIG9uZSBhcnRpZmFjdCBmb3VuZCBmb3IgYSBzaW5nbGUgbmFtZSwgcmV0dXJuaW5nIG5ld2VzdCAoaWQ6ICR7YXJ0aWZhY3QuaWR9KWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhcnRpZmFjdDoge1xuICAgICAgICAgICAgICAgIG5hbWU6IGFydGlmYWN0Lm5hbWUsXG4gICAgICAgICAgICAgICAgaWQ6IGFydGlmYWN0LmlkLFxuICAgICAgICAgICAgICAgIHNpemU6IGFydGlmYWN0LnNpemVfaW5fYnl0ZXMsXG4gICAgICAgICAgICAgICAgY3JlYXRlZEF0OiBhcnRpZmFjdC5jcmVhdGVkX2F0ID8gbmV3IERhdGUoYXJ0aWZhY3QuY3JlYXRlZF9hdCkgOiB1bmRlZmluZWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZ2V0QXJ0aWZhY3RQdWJsaWMgPSBnZXRBcnRpZmFjdFB1YmxpYztcbmZ1bmN0aW9uIGdldEFydGlmYWN0SW50ZXJuYWwoYXJ0aWZhY3ROYW1lKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgYXJ0aWZhY3RDbGllbnQgPSAoMCwgYXJ0aWZhY3RfdHdpcnBfY2xpZW50XzEuaW50ZXJuYWxBcnRpZmFjdFR3aXJwQ2xpZW50KSgpO1xuICAgICAgICBjb25zdCB7IHdvcmtmbG93UnVuQmFja2VuZElkLCB3b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZCB9ID0gKDAsIHV0aWxfMS5nZXRCYWNrZW5kSWRzRnJvbVRva2VuKSgpO1xuICAgICAgICBjb25zdCByZXEgPSB7XG4gICAgICAgICAgICB3b3JrZmxvd1J1bkJhY2tlbmRJZCxcbiAgICAgICAgICAgIHdvcmtmbG93Sm9iUnVuQmFja2VuZElkLFxuICAgICAgICAgICAgbmFtZUZpbHRlcjogZ2VuZXJhdGVkXzEuU3RyaW5nVmFsdWUuY3JlYXRlKHsgdmFsdWU6IGFydGlmYWN0TmFtZSB9KVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZXMgPSB5aWVsZCBhcnRpZmFjdENsaWVudC5MaXN0QXJ0aWZhY3RzKHJlcSk7XG4gICAgICAgIGlmIChyZXMuYXJ0aWZhY3RzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGVycm9yc18xLkFydGlmYWN0Tm90Rm91bmRFcnJvcihgQXJ0aWZhY3Qgbm90IGZvdW5kIGZvciBuYW1lOiAke2FydGlmYWN0TmFtZX1cbiAgICAgICAgUGxlYXNlIGVuc3VyZSB0aGF0IHlvdXIgYXJ0aWZhY3QgaXMgbm90IGV4cGlyZWQgYW5kIHRoZSBhcnRpZmFjdCB3YXMgdXBsb2FkZWQgdXNpbmcgYSBjb21wYXRpYmxlIHZlcnNpb24gb2YgdG9vbGtpdC91cGxvYWQtYXJ0aWZhY3QuXG4gICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCB2aXNpdCB0aGUgR2l0SHViIEFydGlmYWN0cyBGQVE6IGh0dHBzOi8vZ2l0aHViLmNvbS9hY3Rpb25zL3Rvb2xraXQvYmxvYi9tYWluL3BhY2thZ2VzL2FydGlmYWN0L2RvY3MvZmFxLm1kYCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGFydGlmYWN0ID0gcmVzLmFydGlmYWN0c1swXTtcbiAgICAgICAgaWYgKHJlcy5hcnRpZmFjdHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgYXJ0aWZhY3QgPSByZXMuYXJ0aWZhY3RzLnNvcnQoKGEsIGIpID0+IE51bWJlcihiLmRhdGFiYXNlSWQpIC0gTnVtYmVyKGEuZGF0YWJhc2VJZCkpWzBdO1xuICAgICAgICAgICAgY29yZS5kZWJ1ZyhgTW9yZSB0aGFuIG9uZSBhcnRpZmFjdCBmb3VuZCBmb3IgYSBzaW5nbGUgbmFtZSwgcmV0dXJuaW5nIG5ld2VzdCAoaWQ6ICR7YXJ0aWZhY3QuZGF0YWJhc2VJZH0pYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFydGlmYWN0OiB7XG4gICAgICAgICAgICAgICAgbmFtZTogYXJ0aWZhY3QubmFtZSxcbiAgICAgICAgICAgICAgICBpZDogTnVtYmVyKGFydGlmYWN0LmRhdGFiYXNlSWQpLFxuICAgICAgICAgICAgICAgIHNpemU6IE51bWJlcihhcnRpZmFjdC5zaXplKSxcbiAgICAgICAgICAgICAgICBjcmVhdGVkQXQ6IGFydGlmYWN0LmNyZWF0ZWRBdFxuICAgICAgICAgICAgICAgICAgICA/IGdlbmVyYXRlZF8xLlRpbWVzdGFtcC50b0RhdGUoYXJ0aWZhY3QuY3JlYXRlZEF0KVxuICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0pO1xufVxuZXhwb3J0cy5nZXRBcnRpZmFjdEludGVybmFsID0gZ2V0QXJ0aWZhY3RJbnRlcm5hbDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdldC1hcnRpZmFjdC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlbGV0ZUFydGlmYWN0SW50ZXJuYWwgPSBleHBvcnRzLmRlbGV0ZUFydGlmYWN0UHVibGljID0gdm9pZCAwO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIkBhY3Rpb25zL2NvcmVcIik7XG5jb25zdCBnaXRodWJfMSA9IHJlcXVpcmUoXCJAYWN0aW9ucy9naXRodWJcIik7XG5jb25zdCB1c2VyX2FnZW50XzEgPSByZXF1aXJlKFwiLi4vc2hhcmVkL3VzZXItYWdlbnRcIik7XG5jb25zdCByZXRyeV9vcHRpb25zXzEgPSByZXF1aXJlKFwiLi4vZmluZC9yZXRyeS1vcHRpb25zXCIpO1xuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoXCJAYWN0aW9ucy9naXRodWIvbGliL3V0aWxzXCIpO1xuY29uc3QgcGx1Z2luX3JlcXVlc3RfbG9nXzEgPSByZXF1aXJlKFwiQG9jdG9raXQvcGx1Z2luLXJlcXVlc3QtbG9nXCIpO1xuY29uc3QgcGx1Z2luX3JldHJ5XzEgPSByZXF1aXJlKFwiQG9jdG9raXQvcGx1Z2luLXJldHJ5XCIpO1xuY29uc3QgYXJ0aWZhY3RfdHdpcnBfY2xpZW50XzEgPSByZXF1aXJlKFwiLi4vc2hhcmVkL2FydGlmYWN0LXR3aXJwLWNsaWVudFwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvdXRpbFwiKTtcbmNvbnN0IGdlbmVyYXRlZF8xID0gcmVxdWlyZShcIi4uLy4uL2dlbmVyYXRlZFwiKTtcbmNvbnN0IGdldF9hcnRpZmFjdF8xID0gcmVxdWlyZShcIi4uL2ZpbmQvZ2V0LWFydGlmYWN0XCIpO1xuY29uc3QgZXJyb3JzXzEgPSByZXF1aXJlKFwiLi4vc2hhcmVkL2Vycm9yc1wiKTtcbmZ1bmN0aW9uIGRlbGV0ZUFydGlmYWN0UHVibGljKGFydGlmYWN0TmFtZSwgd29ya2Zsb3dSdW5JZCwgcmVwb3NpdG9yeU93bmVyLCByZXBvc2l0b3J5TmFtZSwgdG9rZW4pIHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgW3JldHJ5T3B0cywgcmVxdWVzdE9wdHNdID0gKDAsIHJldHJ5X29wdGlvbnNfMS5nZXRSZXRyeU9wdGlvbnMpKHV0aWxzXzEuZGVmYXVsdHMpO1xuICAgICAgICBjb25zdCBvcHRzID0ge1xuICAgICAgICAgICAgbG9nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB1c2VyQWdlbnQ6ICgwLCB1c2VyX2FnZW50XzEuZ2V0VXNlckFnZW50U3RyaW5nKSgpLFxuICAgICAgICAgICAgcHJldmlld3M6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHJldHJ5OiByZXRyeU9wdHMsXG4gICAgICAgICAgICByZXF1ZXN0OiByZXF1ZXN0T3B0c1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBnaXRodWIgPSAoMCwgZ2l0aHViXzEuZ2V0T2N0b2tpdCkodG9rZW4sIG9wdHMsIHBsdWdpbl9yZXRyeV8xLnJldHJ5LCBwbHVnaW5fcmVxdWVzdF9sb2dfMS5yZXF1ZXN0TG9nKTtcbiAgICAgICAgY29uc3QgZ2V0QXJ0aWZhY3RSZXNwID0geWllbGQgKDAsIGdldF9hcnRpZmFjdF8xLmdldEFydGlmYWN0UHVibGljKShhcnRpZmFjdE5hbWUsIHdvcmtmbG93UnVuSWQsIHJlcG9zaXRvcnlPd25lciwgcmVwb3NpdG9yeU5hbWUsIHRva2VuKTtcbiAgICAgICAgY29uc3QgZGVsZXRlQXJ0aWZhY3RSZXNwID0geWllbGQgZ2l0aHViLnJlc3QuYWN0aW9ucy5kZWxldGVBcnRpZmFjdCh7XG4gICAgICAgICAgICBvd25lcjogcmVwb3NpdG9yeU93bmVyLFxuICAgICAgICAgICAgcmVwbzogcmVwb3NpdG9yeU5hbWUsXG4gICAgICAgICAgICBhcnRpZmFjdF9pZDogZ2V0QXJ0aWZhY3RSZXNwLmFydGlmYWN0LmlkXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoZGVsZXRlQXJ0aWZhY3RSZXNwLnN0YXR1cyAhPT0gMjA0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuSW52YWxpZFJlc3BvbnNlRXJyb3IoYEludmFsaWQgcmVzcG9uc2UgZnJvbSBHaXRIdWIgQVBJOiAke2RlbGV0ZUFydGlmYWN0UmVzcC5zdGF0dXN9ICgkeyhfYSA9IGRlbGV0ZUFydGlmYWN0UmVzcCA9PT0gbnVsbCB8fCBkZWxldGVBcnRpZmFjdFJlc3AgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGRlbGV0ZUFydGlmYWN0UmVzcC5oZWFkZXJzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2FbJ3gtZ2l0aHViLXJlcXVlc3QtaWQnXX0pYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlkOiBnZXRBcnRpZmFjdFJlc3AuYXJ0aWZhY3QuaWRcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZGVsZXRlQXJ0aWZhY3RQdWJsaWMgPSBkZWxldGVBcnRpZmFjdFB1YmxpYztcbmZ1bmN0aW9uIGRlbGV0ZUFydGlmYWN0SW50ZXJuYWwoYXJ0aWZhY3ROYW1lKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgYXJ0aWZhY3RDbGllbnQgPSAoMCwgYXJ0aWZhY3RfdHdpcnBfY2xpZW50XzEuaW50ZXJuYWxBcnRpZmFjdFR3aXJwQ2xpZW50KSgpO1xuICAgICAgICBjb25zdCB7IHdvcmtmbG93UnVuQmFja2VuZElkLCB3b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZCB9ID0gKDAsIHV0aWxfMS5nZXRCYWNrZW5kSWRzRnJvbVRva2VuKSgpO1xuICAgICAgICBjb25zdCBsaXN0UmVxID0ge1xuICAgICAgICAgICAgd29ya2Zsb3dSdW5CYWNrZW5kSWQsXG4gICAgICAgICAgICB3b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZCxcbiAgICAgICAgICAgIG5hbWVGaWx0ZXI6IGdlbmVyYXRlZF8xLlN0cmluZ1ZhbHVlLmNyZWF0ZSh7IHZhbHVlOiBhcnRpZmFjdE5hbWUgfSlcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbGlzdFJlcyA9IHlpZWxkIGFydGlmYWN0Q2xpZW50Lkxpc3RBcnRpZmFjdHMobGlzdFJlcSk7XG4gICAgICAgIGlmIChsaXN0UmVzLmFydGlmYWN0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBlcnJvcnNfMS5BcnRpZmFjdE5vdEZvdW5kRXJyb3IoYEFydGlmYWN0IG5vdCBmb3VuZCBmb3IgbmFtZTogJHthcnRpZmFjdE5hbWV9YCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGFydGlmYWN0ID0gbGlzdFJlcy5hcnRpZmFjdHNbMF07XG4gICAgICAgIGlmIChsaXN0UmVzLmFydGlmYWN0cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBhcnRpZmFjdCA9IGxpc3RSZXMuYXJ0aWZhY3RzLnNvcnQoKGEsIGIpID0+IE51bWJlcihiLmRhdGFiYXNlSWQpIC0gTnVtYmVyKGEuZGF0YWJhc2VJZCkpWzBdO1xuICAgICAgICAgICAgKDAsIGNvcmVfMS5kZWJ1ZykoYE1vcmUgdGhhbiBvbmUgYXJ0aWZhY3QgZm91bmQgZm9yIGEgc2luZ2xlIG5hbWUsIHJldHVybmluZyBuZXdlc3QgKGlkOiAke2FydGlmYWN0LmRhdGFiYXNlSWR9KWApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlcSA9IHtcbiAgICAgICAgICAgIHdvcmtmbG93UnVuQmFja2VuZElkOiBhcnRpZmFjdC53b3JrZmxvd1J1bkJhY2tlbmRJZCxcbiAgICAgICAgICAgIHdvcmtmbG93Sm9iUnVuQmFja2VuZElkOiBhcnRpZmFjdC53b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZCxcbiAgICAgICAgICAgIG5hbWU6IGFydGlmYWN0Lm5hbWVcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmVzID0geWllbGQgYXJ0aWZhY3RDbGllbnQuRGVsZXRlQXJ0aWZhY3QocmVxKTtcbiAgICAgICAgKDAsIGNvcmVfMS5pbmZvKShgQXJ0aWZhY3QgJyR7YXJ0aWZhY3ROYW1lfScgKElEOiAke3Jlcy5hcnRpZmFjdElkfSkgZGVsZXRlZGApO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQ6IE51bWJlcihyZXMuYXJ0aWZhY3RJZClcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZGVsZXRlQXJ0aWZhY3RJbnRlcm5hbCA9IGRlbGV0ZUFydGlmYWN0SW50ZXJuYWw7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZWxldGUtYXJ0aWZhY3QuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5saXN0QXJ0aWZhY3RzSW50ZXJuYWwgPSBleHBvcnRzLmxpc3RBcnRpZmFjdHNQdWJsaWMgPSB2b2lkIDA7XG5jb25zdCBjb3JlXzEgPSByZXF1aXJlKFwiQGFjdGlvbnMvY29yZVwiKTtcbmNvbnN0IGdpdGh1Yl8xID0gcmVxdWlyZShcIkBhY3Rpb25zL2dpdGh1YlwiKTtcbmNvbnN0IHVzZXJfYWdlbnRfMSA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvdXNlci1hZ2VudFwiKTtcbmNvbnN0IHJldHJ5X29wdGlvbnNfMSA9IHJlcXVpcmUoXCIuL3JldHJ5LW9wdGlvbnNcIik7XG5jb25zdCB1dGlsc18xID0gcmVxdWlyZShcIkBhY3Rpb25zL2dpdGh1Yi9saWIvdXRpbHNcIik7XG5jb25zdCBwbHVnaW5fcmVxdWVzdF9sb2dfMSA9IHJlcXVpcmUoXCJAb2N0b2tpdC9wbHVnaW4tcmVxdWVzdC1sb2dcIik7XG5jb25zdCBwbHVnaW5fcmV0cnlfMSA9IHJlcXVpcmUoXCJAb2N0b2tpdC9wbHVnaW4tcmV0cnlcIik7XG5jb25zdCBhcnRpZmFjdF90d2lycF9jbGllbnRfMSA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvYXJ0aWZhY3QtdHdpcnAtY2xpZW50XCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uL3NoYXJlZC91dGlsXCIpO1xuY29uc3QgZ2VuZXJhdGVkXzEgPSByZXF1aXJlKFwiLi4vLi4vZ2VuZXJhdGVkXCIpO1xuLy8gTGltaXRpbmcgdG8gMTAwMCBmb3IgcGVyZiByZWFzb25zXG5jb25zdCBtYXhpbXVtQXJ0aWZhY3RDb3VudCA9IDEwMDA7XG5jb25zdCBwYWdpbmF0aW9uQ291bnQgPSAxMDA7XG5jb25zdCBtYXhOdW1iZXJPZlBhZ2VzID0gbWF4aW11bUFydGlmYWN0Q291bnQgLyBwYWdpbmF0aW9uQ291bnQ7XG5mdW5jdGlvbiBsaXN0QXJ0aWZhY3RzUHVibGljKHdvcmtmbG93UnVuSWQsIHJlcG9zaXRvcnlPd25lciwgcmVwb3NpdG9yeU5hbWUsIHRva2VuLCBsYXRlc3QgPSBmYWxzZSkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICgwLCBjb3JlXzEuaW5mbykoYEZldGNoaW5nIGFydGlmYWN0IGxpc3QgZm9yIHdvcmtmbG93IHJ1biAke3dvcmtmbG93UnVuSWR9IGluIHJlcG9zaXRvcnkgJHtyZXBvc2l0b3J5T3duZXJ9LyR7cmVwb3NpdG9yeU5hbWV9YCk7XG4gICAgICAgIGxldCBhcnRpZmFjdHMgPSBbXTtcbiAgICAgICAgY29uc3QgW3JldHJ5T3B0cywgcmVxdWVzdE9wdHNdID0gKDAsIHJldHJ5X29wdGlvbnNfMS5nZXRSZXRyeU9wdGlvbnMpKHV0aWxzXzEuZGVmYXVsdHMpO1xuICAgICAgICBjb25zdCBvcHRzID0ge1xuICAgICAgICAgICAgbG9nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB1c2VyQWdlbnQ6ICgwLCB1c2VyX2FnZW50XzEuZ2V0VXNlckFnZW50U3RyaW5nKSgpLFxuICAgICAgICAgICAgcHJldmlld3M6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHJldHJ5OiByZXRyeU9wdHMsXG4gICAgICAgICAgICByZXF1ZXN0OiByZXF1ZXN0T3B0c1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBnaXRodWIgPSAoMCwgZ2l0aHViXzEuZ2V0T2N0b2tpdCkodG9rZW4sIG9wdHMsIHBsdWdpbl9yZXRyeV8xLnJldHJ5LCBwbHVnaW5fcmVxdWVzdF9sb2dfMS5yZXF1ZXN0TG9nKTtcbiAgICAgICAgbGV0IGN1cnJlbnRQYWdlTnVtYmVyID0gMTtcbiAgICAgICAgY29uc3QgeyBkYXRhOiBsaXN0QXJ0aWZhY3RSZXNwb25zZSB9ID0geWllbGQgZ2l0aHViLnJlc3QuYWN0aW9ucy5saXN0V29ya2Zsb3dSdW5BcnRpZmFjdHMoe1xuICAgICAgICAgICAgb3duZXI6IHJlcG9zaXRvcnlPd25lcixcbiAgICAgICAgICAgIHJlcG86IHJlcG9zaXRvcnlOYW1lLFxuICAgICAgICAgICAgcnVuX2lkOiB3b3JrZmxvd1J1bklkLFxuICAgICAgICAgICAgcGVyX3BhZ2U6IHBhZ2luYXRpb25Db3VudCxcbiAgICAgICAgICAgIHBhZ2U6IGN1cnJlbnRQYWdlTnVtYmVyXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgbnVtYmVyT2ZQYWdlcyA9IE1hdGguY2VpbChsaXN0QXJ0aWZhY3RSZXNwb25zZS50b3RhbF9jb3VudCAvIHBhZ2luYXRpb25Db3VudCk7XG4gICAgICAgIGNvbnN0IHRvdGFsQXJ0aWZhY3RDb3VudCA9IGxpc3RBcnRpZmFjdFJlc3BvbnNlLnRvdGFsX2NvdW50O1xuICAgICAgICBpZiAodG90YWxBcnRpZmFjdENvdW50ID4gbWF4aW11bUFydGlmYWN0Q291bnQpIHtcbiAgICAgICAgICAgICgwLCBjb3JlXzEud2FybmluZykoYFdvcmtmbG93IHJ1biAke3dvcmtmbG93UnVuSWR9IGhhcyBtb3JlIHRoYW4gMTAwMCBhcnRpZmFjdHMuIFJlc3VsdHMgd2lsbCBiZSBpbmNvbXBsZXRlIGFzIG9ubHkgdGhlIGZpcnN0ICR7bWF4aW11bUFydGlmYWN0Q291bnR9IGFydGlmYWN0cyB3aWxsIGJlIHJldHVybmVkYCk7XG4gICAgICAgICAgICBudW1iZXJPZlBhZ2VzID0gbWF4TnVtYmVyT2ZQYWdlcztcbiAgICAgICAgfVxuICAgICAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIGZpcnN0IHBhZ2VcbiAgICAgICAgZm9yIChjb25zdCBhcnRpZmFjdCBvZiBsaXN0QXJ0aWZhY3RSZXNwb25zZS5hcnRpZmFjdHMpIHtcbiAgICAgICAgICAgIGFydGlmYWN0cy5wdXNoKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBhcnRpZmFjdC5uYW1lLFxuICAgICAgICAgICAgICAgIGlkOiBhcnRpZmFjdC5pZCxcbiAgICAgICAgICAgICAgICBzaXplOiBhcnRpZmFjdC5zaXplX2luX2J5dGVzLFxuICAgICAgICAgICAgICAgIGNyZWF0ZWRBdDogYXJ0aWZhY3QuY3JlYXRlZF9hdCA/IG5ldyBEYXRlKGFydGlmYWN0LmNyZWF0ZWRfYXQpIDogdW5kZWZpbmVkXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBJdGVyYXRlIG92ZXIgYW55IHJlbWFpbmluZyBwYWdlc1xuICAgICAgICBmb3IgKGN1cnJlbnRQYWdlTnVtYmVyOyBjdXJyZW50UGFnZU51bWJlciA8IG51bWJlck9mUGFnZXM7IGN1cnJlbnRQYWdlTnVtYmVyKyspIHtcbiAgICAgICAgICAgIGN1cnJlbnRQYWdlTnVtYmVyKys7XG4gICAgICAgICAgICAoMCwgY29yZV8xLmRlYnVnKShgRmV0Y2hpbmcgcGFnZSAke2N1cnJlbnRQYWdlTnVtYmVyfSBvZiBhcnRpZmFjdCBsaXN0YCk7XG4gICAgICAgICAgICBjb25zdCB7IGRhdGE6IGxpc3RBcnRpZmFjdFJlc3BvbnNlIH0gPSB5aWVsZCBnaXRodWIucmVzdC5hY3Rpb25zLmxpc3RXb3JrZmxvd1J1bkFydGlmYWN0cyh7XG4gICAgICAgICAgICAgICAgb3duZXI6IHJlcG9zaXRvcnlPd25lcixcbiAgICAgICAgICAgICAgICByZXBvOiByZXBvc2l0b3J5TmFtZSxcbiAgICAgICAgICAgICAgICBydW5faWQ6IHdvcmtmbG93UnVuSWQsXG4gICAgICAgICAgICAgICAgcGVyX3BhZ2U6IHBhZ2luYXRpb25Db3VudCxcbiAgICAgICAgICAgICAgICBwYWdlOiBjdXJyZW50UGFnZU51bWJlclxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGFydGlmYWN0IG9mIGxpc3RBcnRpZmFjdFJlc3BvbnNlLmFydGlmYWN0cykge1xuICAgICAgICAgICAgICAgIGFydGlmYWN0cy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogYXJ0aWZhY3QubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGFydGlmYWN0LmlkLFxuICAgICAgICAgICAgICAgICAgICBzaXplOiBhcnRpZmFjdC5zaXplX2luX2J5dGVzLFxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVkQXQ6IGFydGlmYWN0LmNyZWF0ZWRfYXRcbiAgICAgICAgICAgICAgICAgICAgICAgID8gbmV3IERhdGUoYXJ0aWZhY3QuY3JlYXRlZF9hdClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxhdGVzdCkge1xuICAgICAgICAgICAgYXJ0aWZhY3RzID0gZmlsdGVyTGF0ZXN0KGFydGlmYWN0cyk7XG4gICAgICAgIH1cbiAgICAgICAgKDAsIGNvcmVfMS5pbmZvKShgRm91bmQgJHthcnRpZmFjdHMubGVuZ3RofSBhcnRpZmFjdChzKWApO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYXJ0aWZhY3RzXG4gICAgICAgIH07XG4gICAgfSk7XG59XG5leHBvcnRzLmxpc3RBcnRpZmFjdHNQdWJsaWMgPSBsaXN0QXJ0aWZhY3RzUHVibGljO1xuZnVuY3Rpb24gbGlzdEFydGlmYWN0c0ludGVybmFsKGxhdGVzdCA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgYXJ0aWZhY3RDbGllbnQgPSAoMCwgYXJ0aWZhY3RfdHdpcnBfY2xpZW50XzEuaW50ZXJuYWxBcnRpZmFjdFR3aXJwQ2xpZW50KSgpO1xuICAgICAgICBjb25zdCB7IHdvcmtmbG93UnVuQmFja2VuZElkLCB3b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZCB9ID0gKDAsIHV0aWxfMS5nZXRCYWNrZW5kSWRzRnJvbVRva2VuKSgpO1xuICAgICAgICBjb25zdCByZXEgPSB7XG4gICAgICAgICAgICB3b3JrZmxvd1J1bkJhY2tlbmRJZCxcbiAgICAgICAgICAgIHdvcmtmbG93Sm9iUnVuQmFja2VuZElkXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHJlcyA9IHlpZWxkIGFydGlmYWN0Q2xpZW50Lkxpc3RBcnRpZmFjdHMocmVxKTtcbiAgICAgICAgbGV0IGFydGlmYWN0cyA9IHJlcy5hcnRpZmFjdHMubWFwKGFydGlmYWN0ID0+ICh7XG4gICAgICAgICAgICBuYW1lOiBhcnRpZmFjdC5uYW1lLFxuICAgICAgICAgICAgaWQ6IE51bWJlcihhcnRpZmFjdC5kYXRhYmFzZUlkKSxcbiAgICAgICAgICAgIHNpemU6IE51bWJlcihhcnRpZmFjdC5zaXplKSxcbiAgICAgICAgICAgIGNyZWF0ZWRBdDogYXJ0aWZhY3QuY3JlYXRlZEF0XG4gICAgICAgICAgICAgICAgPyBnZW5lcmF0ZWRfMS5UaW1lc3RhbXAudG9EYXRlKGFydGlmYWN0LmNyZWF0ZWRBdClcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICB9KSk7XG4gICAgICAgIGlmIChsYXRlc3QpIHtcbiAgICAgICAgICAgIGFydGlmYWN0cyA9IGZpbHRlckxhdGVzdChhcnRpZmFjdHMpO1xuICAgICAgICB9XG4gICAgICAgICgwLCBjb3JlXzEuaW5mbykoYEZvdW5kICR7YXJ0aWZhY3RzLmxlbmd0aH0gYXJ0aWZhY3QocylgKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFydGlmYWN0c1xuICAgICAgICB9O1xuICAgIH0pO1xufVxuZXhwb3J0cy5saXN0QXJ0aWZhY3RzSW50ZXJuYWwgPSBsaXN0QXJ0aWZhY3RzSW50ZXJuYWw7XG4vKipcbiAqIEZpbHRlcnMgYSBsaXN0IG9mIGFydGlmYWN0cyB0byBvbmx5IGluY2x1ZGUgdGhlIGxhdGVzdCBhcnRpZmFjdCBmb3IgZWFjaCBuYW1lXG4gKiBAcGFyYW0gYXJ0aWZhY3RzIFRoZSBhcnRpZmFjdHMgdG8gZmlsdGVyXG4gKiBAcmV0dXJucyBUaGUgZmlsdGVyZWQgbGlzdCBvZiBhcnRpZmFjdHNcbiAqL1xuZnVuY3Rpb24gZmlsdGVyTGF0ZXN0KGFydGlmYWN0cykge1xuICAgIGFydGlmYWN0cy5zb3J0KChhLCBiKSA9PiBiLmlkIC0gYS5pZCk7XG4gICAgY29uc3QgbGF0ZXN0QXJ0aWZhY3RzID0gW107XG4gICAgY29uc3Qgc2VlbkFydGlmYWN0TmFtZXMgPSBuZXcgU2V0KCk7XG4gICAgZm9yIChjb25zdCBhcnRpZmFjdCBvZiBhcnRpZmFjdHMpIHtcbiAgICAgICAgaWYgKCFzZWVuQXJ0aWZhY3ROYW1lcy5oYXMoYXJ0aWZhY3QubmFtZSkpIHtcbiAgICAgICAgICAgIGxhdGVzdEFydGlmYWN0cy5wdXNoKGFydGlmYWN0KTtcbiAgICAgICAgICAgIHNlZW5BcnRpZmFjdE5hbWVzLmFkZChhcnRpZmFjdC5uYW1lKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbGF0ZXN0QXJ0aWZhY3RzO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bGlzdC1hcnRpZmFjdHMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9fcmVzdCA9ICh0aGlzICYmIHRoaXMuX19yZXN0KSB8fCBmdW5jdGlvbiAocywgZSkge1xuICAgIHZhciB0ID0ge307XG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXG4gICAgICAgIHRbcF0gPSBzW3BdO1xuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xuICAgICAgICB9XG4gICAgcmV0dXJuIHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5EZWZhdWx0QXJ0aWZhY3RDbGllbnQgPSB2b2lkIDA7XG5jb25zdCBjb3JlXzEgPSByZXF1aXJlKFwiQGFjdGlvbnMvY29yZVwiKTtcbmNvbnN0IGNvbmZpZ18xID0gcmVxdWlyZShcIi4vc2hhcmVkL2NvbmZpZ1wiKTtcbmNvbnN0IHVwbG9hZF9hcnRpZmFjdF8xID0gcmVxdWlyZShcIi4vdXBsb2FkL3VwbG9hZC1hcnRpZmFjdFwiKTtcbmNvbnN0IGRvd25sb2FkX2FydGlmYWN0XzEgPSByZXF1aXJlKFwiLi9kb3dubG9hZC9kb3dubG9hZC1hcnRpZmFjdFwiKTtcbmNvbnN0IGRlbGV0ZV9hcnRpZmFjdF8xID0gcmVxdWlyZShcIi4vZGVsZXRlL2RlbGV0ZS1hcnRpZmFjdFwiKTtcbmNvbnN0IGdldF9hcnRpZmFjdF8xID0gcmVxdWlyZShcIi4vZmluZC9nZXQtYXJ0aWZhY3RcIik7XG5jb25zdCBsaXN0X2FydGlmYWN0c18xID0gcmVxdWlyZShcIi4vZmluZC9saXN0LWFydGlmYWN0c1wiKTtcbmNvbnN0IGVycm9yc18xID0gcmVxdWlyZShcIi4vc2hhcmVkL2Vycm9yc1wiKTtcbi8qKlxuICogVGhlIGRlZmF1bHQgYXJ0aWZhY3QgY2xpZW50IHRoYXQgaXMgdXNlZCBieSB0aGUgYXJ0aWZhY3QgYWN0aW9uKHMpLlxuICovXG5jbGFzcyBEZWZhdWx0QXJ0aWZhY3RDbGllbnQge1xuICAgIHVwbG9hZEFydGlmYWN0KG5hbWUsIGZpbGVzLCByb290RGlyZWN0b3J5LCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmICgoMCwgY29uZmlnXzEuaXNHaGVzKSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBlcnJvcnNfMS5HSEVTTm90U3VwcG9ydGVkRXJyb3IoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuICgwLCB1cGxvYWRfYXJ0aWZhY3RfMS51cGxvYWRBcnRpZmFjdCkobmFtZSwgZmlsZXMsIHJvb3REaXJlY3RvcnksIG9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgKDAsIGNvcmVfMS53YXJuaW5nKShgQXJ0aWZhY3QgdXBsb2FkIGZhaWxlZCB3aXRoIGVycm9yOiAke2Vycm9yfS5cblxuRXJyb3JzIGNhbiBiZSB0ZW1wb3JhcnksIHNvIHBsZWFzZSB0cnkgYWdhaW4gYW5kIG9wdGlvbmFsbHkgcnVuIHRoZSBhY3Rpb24gd2l0aCBkZWJ1ZyBtb2RlIGVuYWJsZWQgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG5cbklmIHRoZSBlcnJvciBwZXJzaXN0cywgcGxlYXNlIGNoZWNrIHdoZXRoZXIgQWN0aW9ucyBpcyBvcGVyYXRpbmcgbm9ybWFsbHkgYXQgW2h0dHBzOi8vZ2l0aHVic3RhdHVzLmNvbV0oaHR0cHM6Ly93d3cuZ2l0aHVic3RhdHVzLmNvbSkuYCk7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBkb3dubG9hZEFydGlmYWN0KGFydGlmYWN0SWQsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKCgwLCBjb25maWdfMS5pc0doZXMpKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGVycm9yc18xLkdIRVNOb3RTdXBwb3J0ZWRFcnJvcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpbmRCeSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGZpbmRCeTogeyByZXBvc2l0b3J5T3duZXIsIHJlcG9zaXRvcnlOYW1lLCB0b2tlbiB9IH0gPSBvcHRpb25zLCBkb3dubG9hZE9wdGlvbnMgPSBfX3Jlc3Qob3B0aW9ucywgW1wiZmluZEJ5XCJdKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgwLCBkb3dubG9hZF9hcnRpZmFjdF8xLmRvd25sb2FkQXJ0aWZhY3RQdWJsaWMpKGFydGlmYWN0SWQsIHJlcG9zaXRvcnlPd25lciwgcmVwb3NpdG9yeU5hbWUsIHRva2VuLCBkb3dubG9hZE9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gKDAsIGRvd25sb2FkX2FydGlmYWN0XzEuZG93bmxvYWRBcnRpZmFjdEludGVybmFsKShhcnRpZmFjdElkLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICgwLCBjb3JlXzEud2FybmluZykoYERvd25sb2FkIEFydGlmYWN0IGZhaWxlZCB3aXRoIGVycm9yOiAke2Vycm9yfS5cblxuRXJyb3JzIGNhbiBiZSB0ZW1wb3JhcnksIHNvIHBsZWFzZSB0cnkgYWdhaW4gYW5kIG9wdGlvbmFsbHkgcnVuIHRoZSBhY3Rpb24gd2l0aCBkZWJ1ZyBtb2RlIGVuYWJsZWQgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG5cbklmIHRoZSBlcnJvciBwZXJzaXN0cywgcGxlYXNlIGNoZWNrIHdoZXRoZXIgQWN0aW9ucyBhbmQgQVBJIHJlcXVlc3RzIGFyZSBvcGVyYXRpbmcgbm9ybWFsbHkgYXQgW2h0dHBzOi8vZ2l0aHVic3RhdHVzLmNvbV0oaHR0cHM6Ly93d3cuZ2l0aHVic3RhdHVzLmNvbSkuYCk7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBsaXN0QXJ0aWZhY3RzKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKCgwLCBjb25maWdfMS5pc0doZXMpKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGVycm9yc18xLkdIRVNOb3RTdXBwb3J0ZWRFcnJvcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpbmRCeSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGZpbmRCeTogeyB3b3JrZmxvd1J1bklkLCByZXBvc2l0b3J5T3duZXIsIHJlcG9zaXRvcnlOYW1lLCB0b2tlbiB9IH0gPSBvcHRpb25zO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIGxpc3RfYXJ0aWZhY3RzXzEubGlzdEFydGlmYWN0c1B1YmxpYykod29ya2Zsb3dSdW5JZCwgcmVwb3NpdG9yeU93bmVyLCByZXBvc2l0b3J5TmFtZSwgdG9rZW4sIG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5sYXRlc3QpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gKDAsIGxpc3RfYXJ0aWZhY3RzXzEubGlzdEFydGlmYWN0c0ludGVybmFsKShvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMubGF0ZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICgwLCBjb3JlXzEud2FybmluZykoYExpc3RpbmcgQXJ0aWZhY3RzIGZhaWxlZCB3aXRoIGVycm9yOiAke2Vycm9yfS5cblxuRXJyb3JzIGNhbiBiZSB0ZW1wb3JhcnksIHNvIHBsZWFzZSB0cnkgYWdhaW4gYW5kIG9wdGlvbmFsbHkgcnVuIHRoZSBhY3Rpb24gd2l0aCBkZWJ1ZyBtb2RlIGVuYWJsZWQgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG5cbklmIHRoZSBlcnJvciBwZXJzaXN0cywgcGxlYXNlIGNoZWNrIHdoZXRoZXIgQWN0aW9ucyBhbmQgQVBJIHJlcXVlc3RzIGFyZSBvcGVyYXRpbmcgbm9ybWFsbHkgYXQgW2h0dHBzOi8vZ2l0aHVic3RhdHVzLmNvbV0oaHR0cHM6Ly93d3cuZ2l0aHVic3RhdHVzLmNvbSkuYCk7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBnZXRBcnRpZmFjdChhcnRpZmFjdE5hbWUsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKCgwLCBjb25maWdfMS5pc0doZXMpKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGVycm9yc18xLkdIRVNOb3RTdXBwb3J0ZWRFcnJvcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpbmRCeSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGZpbmRCeTogeyB3b3JrZmxvd1J1bklkLCByZXBvc2l0b3J5T3duZXIsIHJlcG9zaXRvcnlOYW1lLCB0b2tlbiB9IH0gPSBvcHRpb25zO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIGdldF9hcnRpZmFjdF8xLmdldEFydGlmYWN0UHVibGljKShhcnRpZmFjdE5hbWUsIHdvcmtmbG93UnVuSWQsIHJlcG9zaXRvcnlPd25lciwgcmVwb3NpdG9yeU5hbWUsIHRva2VuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuICgwLCBnZXRfYXJ0aWZhY3RfMS5nZXRBcnRpZmFjdEludGVybmFsKShhcnRpZmFjdE5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgKDAsIGNvcmVfMS53YXJuaW5nKShgR2V0IEFydGlmYWN0IGZhaWxlZCB3aXRoIGVycm9yOiAke2Vycm9yfS5cblxuRXJyb3JzIGNhbiBiZSB0ZW1wb3JhcnksIHNvIHBsZWFzZSB0cnkgYWdhaW4gYW5kIG9wdGlvbmFsbHkgcnVuIHRoZSBhY3Rpb24gd2l0aCBkZWJ1ZyBtb2RlIGVuYWJsZWQgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG5cbklmIHRoZSBlcnJvciBwZXJzaXN0cywgcGxlYXNlIGNoZWNrIHdoZXRoZXIgQWN0aW9ucyBhbmQgQVBJIHJlcXVlc3RzIGFyZSBvcGVyYXRpbmcgbm9ybWFsbHkgYXQgW2h0dHBzOi8vZ2l0aHVic3RhdHVzLmNvbV0oaHR0cHM6Ly93d3cuZ2l0aHVic3RhdHVzLmNvbSkuYCk7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBkZWxldGVBcnRpZmFjdChhcnRpZmFjdE5hbWUsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKCgwLCBjb25maWdfMS5pc0doZXMpKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGVycm9yc18xLkdIRVNOb3RTdXBwb3J0ZWRFcnJvcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpbmRCeSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGZpbmRCeTogeyByZXBvc2l0b3J5T3duZXIsIHJlcG9zaXRvcnlOYW1lLCB3b3JrZmxvd1J1bklkLCB0b2tlbiB9IH0gPSBvcHRpb25zO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIGRlbGV0ZV9hcnRpZmFjdF8xLmRlbGV0ZUFydGlmYWN0UHVibGljKShhcnRpZmFjdE5hbWUsIHdvcmtmbG93UnVuSWQsIHJlcG9zaXRvcnlPd25lciwgcmVwb3NpdG9yeU5hbWUsIHRva2VuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuICgwLCBkZWxldGVfYXJ0aWZhY3RfMS5kZWxldGVBcnRpZmFjdEludGVybmFsKShhcnRpZmFjdE5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgKDAsIGNvcmVfMS53YXJuaW5nKShgRGVsZXRlIEFydGlmYWN0IGZhaWxlZCB3aXRoIGVycm9yOiAke2Vycm9yfS5cblxuRXJyb3JzIGNhbiBiZSB0ZW1wb3JhcnksIHNvIHBsZWFzZSB0cnkgYWdhaW4gYW5kIG9wdGlvbmFsbHkgcnVuIHRoZSBhY3Rpb24gd2l0aCBkZWJ1ZyBtb2RlIGVuYWJsZWQgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG5cbklmIHRoZSBlcnJvciBwZXJzaXN0cywgcGxlYXNlIGNoZWNrIHdoZXRoZXIgQWN0aW9ucyBhbmQgQVBJIHJlcXVlc3RzIGFyZSBvcGVyYXRpbmcgbm9ybWFsbHkgYXQgW2h0dHBzOi8vZ2l0aHVic3RhdHVzLmNvbV0oaHR0cHM6Ly93d3cuZ2l0aHVic3RhdHVzLmNvbSkuYCk7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuRGVmYXVsdEFydGlmYWN0Q2xpZW50ID0gRGVmYXVsdEFydGlmYWN0Q2xpZW50O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y2xpZW50LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbnRlcmZhY2VzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fZXhwb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19leHBvcnRTdGFyKSB8fCBmdW5jdGlvbihtLCBleHBvcnRzKSB7XG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChleHBvcnRzLCBwKSkgX19jcmVhdGVCaW5kaW5nKGV4cG9ydHMsIG0sIHApO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNsaWVudF8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvY2xpZW50XCIpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2ludGVybmFsL3NoYXJlZC9pbnRlcmZhY2VzXCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9pbnRlcm5hbC9zaGFyZWQvZXJyb3JzXCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9pbnRlcm5hbC9jbGllbnRcIiksIGV4cG9ydHMpO1xuY29uc3QgY2xpZW50ID0gbmV3IGNsaWVudF8xLkRlZmF1bHRBcnRpZmFjdENsaWVudCgpO1xuZXhwb3J0cy5kZWZhdWx0ID0gY2xpZW50O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXJ0aWZhY3QuanMubWFwIiwKICAgICJpbXBvcnQgKiBhcyBmcyBmcm9tICdub2RlOmZzJ1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdub2RlOnBhdGgnXG5pbXBvcnQgeyBleGVjIH0gZnJvbSBcIkBhY3Rpb25zL2V4ZWNcIlxuaW1wb3J0IHsgZGVidWcsIGdldElucHV0LCBnZXRTdGF0ZSwgc2F2ZVN0YXRlIH0gZnJvbSBcIkBhY3Rpb25zL2NvcmVcIlxuaW1wb3J0IHsgRGVmYXVsdEFydGlmYWN0Q2xpZW50IH0gZnJvbSAnQGFjdGlvbnMvYXJ0aWZhY3QnXG5pbXBvcnQgeyBjb2xsZWN0UHJvbWV0aGV1cyB9IGZyb20gJy4uL21ldHJpY3MvcHJvbWV0aGV1cydcbmltcG9ydCB7IGRlZmF1bHRNZXRyaWNzIH0gZnJvbSAnLi4vbWV0cmljcy9kZWZhdWx0J1xuaW1wb3J0IHsgcmVuZGVyUmVwb3J0IH0gZnJvbSAnLi4vcmVwb3J0L2RlZmF1bHQnXG5cbihhc3luYyBmdW5jdGlvbiBwb3N0KCkge1xuXHRsZXQgY3dkID0gZ2V0U3RhdGUoXCJDV0RcIilcblx0bGV0IHNkayA9IGdldElucHV0KFwic2RrX25hbWVcIiwgeyByZXF1aXJlZDogdHJ1ZSB9KVxuXHRsZXQgcHJuID0gZ2V0U3RhdGUoXCJQUk5cIilcblxuXHRsZXQgZW5kID0gbmV3IERhdGUoKVxuXHRsZXQgc3RhcnQgPSBuZXcgRGF0ZShnZXRTdGF0ZShcIllEQl9TVEFSVF9USU1FXCIpKVxuXHRsZXQgYXJ0aWZhY3RDbGllbnQgPSBuZXcgRGVmYXVsdEFydGlmYWN0Q2xpZW50KClcblxuXHRzYXZlU3RhdGUoXCJZREJfRU5EX1RJTUVcIiwgZW5kLnRvSVNPU3RyaW5nKCkpXG5cblx0ZGVidWcoXCJDb2xsZWN0aW5nIG1ldHJpY3MuLi5cIilcblx0bGV0IG1ldHJpY3MgPSBhd2FpdCBjb2xsZWN0UHJvbWV0aGV1cyhzdGFydCwgZW5kLCBkZWZhdWx0TWV0cmljcy5tZXRyaWNzKVxuXHRkZWJ1ZyhgTWV0cmljczogJHtPYmplY3Qua2V5cyhtZXRyaWNzKX1gKVxuXG5cdGRlYnVnKFwiUmVuZGVyaW5nIHJlcG9ydC4uLlwiKVxuXHRsZXQgcmVwb3J0ID0gcmVuZGVyUmVwb3J0KHNkaywgbWV0cmljcylcblx0ZGVidWcoYFJlcG9ydDogJHtyZXBvcnR9YClcblxuXHR7XG5cdFx0ZGVidWcoXCJXcml0aW5nIHJlcG9ydC4uLlwiKVxuXHRcdGxldCByZXBvcnRQYXRoID0gcGF0aC5qb2luKGN3ZCwgYCR7c2RrfS1yZXBvcnQubWRgKVxuXHRcdGZzLndyaXRlRmlsZVN5bmMocmVwb3J0UGF0aCwgcmVwb3J0LCB7IGVuY29kaW5nOiBcInV0Zi04XCIgfSlcblx0XHRkZWJ1ZyhgUmVwb3J0IHdyaXR0ZW4gdG8gJHtyZXBvcnRQYXRofWApXG5cblx0XHRkZWJ1ZyhcIlVwbG9hZCByZXBvcnQgYXMgYW4gYXJ0aWZhY3QuLi5cIilcblx0XHRsZXQgeyBpZCB9ID0gYXdhaXQgYXJ0aWZhY3RDbGllbnQudXBsb2FkQXJ0aWZhY3QoYCR7c2RrfS1yZXBvcnQubWRgLCBbcmVwb3J0UGF0aF0sIGN3ZCwgeyByZXRlbnRpb25EYXlzOiAxIH0pXG5cdFx0ZGVidWcoYFJlcG9ydCB1cGxvYWRlZCBhcyBhbiBhcnRpZmFjdCAke2lkfWApXG5cdH1cblxuXHR7XG5cdFx0ZGVidWcoXCJXcml0aW5nIHB1bGwgbnVtYmVyLi4uXCIpXG5cdFx0bGV0IHB1bGxQYXRoID0gcGF0aC5qb2luKGN3ZCwgYCR7c2RrfS1wdWxsLnR4dGApXG5cdFx0ZnMud3JpdGVGaWxlU3luYyhwdWxsUGF0aCwgcHJuLCB7IGVuY29kaW5nOiBcInV0Zi04XCIgfSlcblx0XHRkZWJ1ZyhgUHVsbCBudW1iZXIgd3JpdHRlbiB0byAke3B1bGxQYXRofWApXG5cblx0XHRkZWJ1ZyhcIlVwbG9hZCBwdWxsIG51bWJlciBhcyBhbiBhcnRpZmFjdC4uLlwiKVxuXHRcdGxldCB7IGlkIH0gPSBhd2FpdCBhcnRpZmFjdENsaWVudC51cGxvYWRBcnRpZmFjdChgJHtzZGt9LXB1bGwudHh0YCwgW3B1bGxQYXRoXSwgY3dkLCB7IHJldGVudGlvbkRheXM6IDEgfSlcblx0XHRkZWJ1ZyhgUHVsbCBudW1iZXIgdXBsb2FkZWQgYXMgYW4gYXJ0aWZhY3QgJHtpZH1gKVxuXHR9XG5cblx0ZGVidWcoXCJTdG9wcGluZyBZREIuLi5cIilcblx0YXdhaXQgZXhlYyhgZG9ja2VyYCwgW2Bjb21wb3NlYCwgYC1mYCwgYGNvbXBvc2UueWFtbGAsIGBkb3duYF0sIHsgY3dkIH0pXG5cblx0ZGVidWcoYFlEQiBzdG9wcGVkIGF0ICR7ZW5kfWApXG5cblx0bGV0IGR1cmF0aW9uID0gZW5kLmdldFRpbWUoKSAtIHN0YXJ0LmdldFRpbWUoKVxuXHRkZWJ1ZyhgWURCIFNMTyBUZXN0IGR1cmF0aW9uOiAke2R1cmF0aW9ufW1zLmApXG5cblx0ZGVidWcoXCJDbGVhbmluZyB1cCB0ZW1wIGRpcmVjdG9yeS4uLlwiKVxuXHRmcy5ybVN5bmMoY3dkLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbn0pKClcbiIsCiAgICAiLy8gSG9zdFxuZXhwb3J0IGNvbnN0IEhPU1QgPSAnbG9jYWxob3N0J1xuXG4vLyBZREIgU3RhdGljIG5vZGUgY29uZmlndXJhdGlvbi4gUHJlZmVyZSBkbyBub3QgZWRpdC5cbmV4cG9ydCBjb25zdCBZREJfR1JQQ19QT1JUID0gMjEzNVxuZXhwb3J0IGNvbnN0IFlEQl9NT05fUE9SVCA9IDg3NjVcbmV4cG9ydCBjb25zdCBZREJfSUNfUE9SVCA9IDE5MDAxXG5leHBvcnQgY29uc3QgWURCX1RFTkFOVCA9ICcvUm9vdC90ZXN0ZGInXG5cbi8vIFBhc3MgaW50byB3b3JrbG9hZFxuZXhwb3J0IGNvbnN0IFlEQl9FTkRQT0lOVCA9IGBncnBjOi8vJHtIT1NUfToke1lEQl9HUlBDX1BPUlR9YFxuZXhwb3J0IGNvbnN0IFlCRF9DT05ORUNUSU9OX1NUUklORyA9IGAke1lEQl9FTkRQT0lOVH0ke1lEQl9URU5BTlR9YFxuXG5leHBvcnQgY29uc3QgUFJPTUVUSEVVU19QT1JUID0gOTA5MFxuZXhwb3J0IGNvbnN0IFBST01FVEhFVVNfUFVTSEdBVEVXQVlfUE9SVCA9IDkwOTFcblxuZXhwb3J0IGNvbnN0IFBST01FVEhFVVNfVVJMID0gYGh0dHA6Ly8ke0hPU1R9OiR7UFJPTUVUSEVVU19QT1JUfWBcbmV4cG9ydCBjb25zdCBQUk9NRVRIRVVTX1BVU0hHQVRFV0FZX1VSTCA9IGBodHRwOi8vJHtIT1NUfToke1BST01FVEhFVVNfUFVTSEdBVEVXQVlfUE9SVH1gXG4iLAogICAgImltcG9ydCB7IFBST01FVEhFVVNfVVJMIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiXG5pbXBvcnQgdHlwZSB7IFNlcmllcyB9IGZyb20gXCIuLi9yZXBvcnQvY2hhcnRcIlxuaW1wb3J0IHR5cGUgeyBNZXRyaWNzRGVmaW5pdGlvbiB9IGZyb20gXCIuL2RlZmluaXRpb25cIlxuXG5leHBvcnQgdHlwZSBQcm9tZXRoZXVzUXVlcnlSYW5nZVJlc3BvbnNlID0ge1xuXHRcInN0YXR1c1wiOiBcInN1Y2Nlc3NcIiB8IFwiZXJyb3JcIixcblx0XCJkYXRhXCI6IHtcblx0XHRcInJlc3VsdFR5cGVcIjogXCJtYXRyaXhcIiB8IFwidmVjdG9yXCIgfCBcInNjYWxhclwiIHwgXCJzdHJpbmdcIixcblx0XHRcInJlc3VsdFwiOiBTZXJpZXNbXVxuXHR9LFxuXHRcIndhcm5pbmdzXCI6IHN0cmluZ1tdLFxuXHRcImluZm9zXCI6IHN0cmluZ1tdLFxuXHRcImVycm9yXCI6IHN0cmluZyxcbn1cblxuZnVuY3Rpb24gcXVlcnlSYW5nZShxdWVyeTogc3RyaW5nLCBzdGFydDogRGF0ZSwgZW5kOiBEYXRlKSB7XG5cdGxldCB1cmwgPSBuZXcgVVJMKFwiL2FwaS92MS9xdWVyeV9yYW5nZVwiLCBQUk9NRVRIRVVTX1VSTClcblx0dXJsLnNlYXJjaFBhcmFtcy5zZXQoXCJxdWVyeVwiLCBxdWVyeSlcblx0dXJsLnNlYXJjaFBhcmFtcy5zZXQoXCJzdGFydFwiLCBNYXRoLmNlaWwoc3RhcnQuZ2V0VGltZSgpIC8gMTAwMCkudG9TdHJpbmcoKSlcblx0dXJsLnNlYXJjaFBhcmFtcy5zZXQoXCJlbmRcIiwgTWF0aC5mbG9vcihlbmQuZ2V0VGltZSgpIC8gMTAwMCkudG9TdHJpbmcoKSlcblx0dXJsLnNlYXJjaFBhcmFtcy5zZXQoXCJzdGVwXCIsIFwiMVwiKVxuXG5cdHJldHVybiBmZXRjaCh1cmwpLnRoZW4ociA9PiByLmpzb24oKSkgYXMgUHJvbWlzZTxQcm9tZXRoZXVzUXVlcnlSYW5nZVJlc3BvbnNlPlxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29sbGVjdFByb21ldGhldXMoc3RhcnQ6IERhdGUsIGVuZDogRGF0ZSwgbWV0cmljczogTWV0cmljc0RlZmluaXRpb25bXCJtZXRyaWNzXCJdKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBTZXJpZXNbXT4+IHtcblx0bGV0IHJlc3VsdHMgPSB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBTZXJpZXNbXT5cblxuXHRmb3IgKGNvbnN0IG0gb2YgbWV0cmljcykge1xuXHRcdGxldCB7IHN0YXR1cywgZGF0YSB9ID0gYXdhaXQgcXVlcnlSYW5nZShtLnF1ZXJ5LCBzdGFydCwgZW5kKVxuXHRcdGlmIChzdGF0dXMgIT09IFwic3VjY2Vzc1wiKSBjb250aW51ZVxuXG5cdFx0cmVzdWx0c1ttLmlkXSA9IGRhdGEucmVzdWx0XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0c1xufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IE1ldHJpY3NEZWZpbml0aW9uIH0gZnJvbSBcIi4vZGVmaW5pdGlvblwiO1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdE1ldHJpY3M6IE1ldHJpY3NEZWZpbml0aW9uID0ge1xuXHRtZXRyaWNzOiBbXG5cdFx0e1xuXHRcdFx0aWQ6IFwicmVhZF9sYXRlbmN5X21zXCIsXG5cdFx0XHRxdWVyeTogYDEwMDAgKiBoaXN0b2dyYW1fcXVhbnRpbGUoMC45NSwgc3VtIGJ5KHJlZiwgbGUpIChyYXRlKHNka19vcGVyYXRpb25fbGF0ZW5jeV9zZWNvbmRzX2J1Y2tldHtvcGVyYXRpb25fdHlwZT1cInJlYWRcIn1bMnNdKSkpYCxcblx0XHRcdGRlc2NyaXB0aW9uOiBcIjk1dGggcGVyY2VudGlsZSByZWFkIG9wZXJhdGlvbnMgbGF0ZW5jeSBpbiBtaWxsaXNlY29uZHNcIixcblx0XHR9LFxuXHRcdHtcblx0XHRcdGlkOiBcIndyaXRlX2xhdGVuY3lfbXNcIixcblx0XHRcdHF1ZXJ5OiBgMTAwMCAqIGhpc3RvZ3JhbV9xdWFudGlsZSgwLjk1LCBzdW0gYnkocmVmLCBsZSkgKHJhdGUoc2RrX29wZXJhdGlvbl9sYXRlbmN5X3NlY29uZHNfYnVja2V0e29wZXJhdGlvbl90eXBlPVwid3JpdGVcIn1bMnNdKSkpYCxcblx0XHRcdGRlc2NyaXB0aW9uOiBcIjk1dGggcGVyY2VudGlsZSB3cml0ZSBvcGVyYXRpb25zIGxhdGVuY3kgaW4gbWlsbGlzZWNvbmRzXCIsXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRpZDogXCJyZWFkX3Rocm91Z2hwdXRcIixcblx0XHRcdHF1ZXJ5OiBgc3VtIGJ5KHJlZikgKHJhdGUoc2RrX29wZXJhdGlvbnNfdG90YWx7b3BlcmF0aW9uX3R5cGU9XCJyZWFkXCJ9WzJzXSkpYCxcblx0XHRcdGRlc2NyaXB0aW9uOiBcIlJlYWQgb3BlcmF0aW9ucyB0aHJvdWdocHV0XCIsXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRpZDogXCJ3cml0ZV90aHJvdWdocHV0XCIsXG5cdFx0XHRxdWVyeTogYHN1bSBieShyZWYpIChyYXRlKHNka19vcGVyYXRpb25zX3RvdGFse29wZXJhdGlvbl90eXBlPVwid3JpdGVcIn1bMnNdKSlgLFxuXHRcdFx0ZGVzY3JpcHRpb246IFwiV3JpdGUgb3BlcmF0aW9ucyB0aHJvdWdocHV0XCIsXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRpZDogXCJyZWFkX2F2YWlsYWJpbGl0eVwiLFxuXHRcdFx0cXVlcnk6IGAxMDAgKiBzdW0gYnkgKHJlZikgKGluY3JlYXNlKHNka19vcGVyYXRpb25zX3N1Y2Nlc3NfdG90YWx7b3BlcmF0aW9uX3R5cGU9XCJyZWFkXCJ9WzJzXSkpIC8gc3VtIGJ5IChyZWYpIChpbmNyZWFzZShzZGtfb3BlcmF0aW9uc190b3RhbHtvcGVyYXRpb25fdHlwZT1cInJlYWRcIn1bMnNdKSlgLFxuXHRcdFx0ZGVzY3JpcHRpb246IFwiUmVhZCBvcGVyYXRpb25zIGF2YWlsYWJpbGl0eVwiLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0aWQ6IFwid3JpdGVfYXZhaWxhYmlsaXR5XCIsXG5cdFx0XHRxdWVyeTogYDEwMCAqIHN1bSBieSAocmVmKSAoaW5jcmVhc2Uoc2RrX29wZXJhdGlvbnNfc3VjY2Vzc190b3RhbHtvcGVyYXRpb25fdHlwZT1cIndyaXRlXCJ9WzJzXSkpIC8gc3VtIGJ5IChyZWYpIChpbmNyZWFzZShzZGtfb3BlcmF0aW9uc190b3RhbHtvcGVyYXRpb25fdHlwZT1cIndyaXRlXCJ9WzJzXSkpYCxcblx0XHRcdGRlc2NyaXB0aW9uOiBcIldyaXRlIG9wZXJhdGlvbnMgYXZhaWxhYmlsaXR5XCIsXG5cdFx0fSxcblx0XVxufVxuIiwKICAgICIvLyBUYWJsZWF1IDEwXG5leHBvcnQgY29uc3QgcGFsZXR0ZSA9IFtcblx0XCIjMkNBMDJDXCIsXG5cdFwiIzFGNzdCNFwiLFxuXHRcIiNENjI3MjhcIixcblx0XCIjRkY3RjBFXCIsXG5cdFwiIzk0NjdCRFwiLFxuXHRcIiM4QzU2NEJcIixcblx0XCIjRTM3N0MyXCIsXG5cdFwiIzdGN0Y3RlwiLFxuXHRcIiNCQ0JEMjJcIixcblx0XCIjMTdCRUNGXCJcbl1cbiIsCiAgICAiaW1wb3J0IHsgcGFsZXR0ZSBhcyBkZWZhdWx0UGFsZXR0ZSB9IGZyb20gXCIuL2NvbG9yc1wiO1xuXG5leHBvcnQgdHlwZSBTZXJpZXMgPSB7XG5cdFwibWV0cmljXCI6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG5cdFwidmFsdWVzXCI6IFtudW1iZXIsIHN0cmluZ11bXSAvLyBbdGltZXN0YW1wIChzZWMpLCB2YWx1ZSAoZmxvYXQpXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyQ2hhcnQodGl0bGU6IHN0cmluZywgc2VyaWVzOiBTZXJpZXNbXSwgcGFsZXR0ZSA9IGRlZmF1bHRQYWxldHRlKTogc3RyaW5nIHtcblx0Ly8gMS4gRmlsdGVyIHplcm9zXG5cdGxldCBtaW5MZW5ndGggPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG5cdGZvciAoY29uc3QgcyBvZiBzZXJpZXMpIHtcblx0XHRzLnZhbHVlcyA9IHMudmFsdWVzLmZpbHRlcih2ID0+IHZbMV0gIT0gJzAnKTtcblx0XHRpZiAocy52YWx1ZXMubGVuZ3RoIDwgbWluTGVuZ3RoKSBtaW5MZW5ndGggPSBzLnZhbHVlcy5sZW5ndGg7XG5cdH1cblxuXHQvLyAyLiBMaW1pdCB2YWx1ZXMgKGNvdW50KVxuXHRmb3IgKGNvbnN0IHMgb2Ygc2VyaWVzKSB7XG5cdFx0Ly8gU2tpcCBmaXJzdCB2YWx1ZXMgdGhlbiBhZGp1c3Rpbmdcblx0XHRzLnZhbHVlcyA9IHMudmFsdWVzLnNsaWNlKC0xICogbWluTGVuZ3RoKTtcblx0fVxuXG5cdGxldCBtaW4gPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG5cdGxldCBtYXggPSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XG5cblx0bGV0IGxpbmVzID0gW107XG5cdGZvciAoY29uc3QgcyBvZiBzZXJpZXMpIHtcblx0XHRsZXQgbGluZSA9IFtdXG5cblx0XHRmb3IgKGxldCBbLCB2YWx1ZV0gb2Ygcy52YWx1ZXMpIHtcblx0XHRcdGxldCB2ID0gTWF0aC5yb3VuZChwYXJzZUZsb2F0KHZhbHVlKSAqIDEwMDApIC8gMTAwMDtcblx0XHRcdGlmIChpc05hTih2KSkge1xuXHRcdFx0XHR2ID0gMDtcblx0XHRcdH1cblxuXHRcdFx0bGluZS5wdXNoKHYpO1xuXG5cdFx0XHRpZiAodiA8IG1pbikgbWluID0gdjtcblx0XHRcdGlmICh2ID4gbWF4KSBtYXggPSB2O1xuXHRcdH1cblxuXHRcdGxpbmVzLnB1c2goYGxpbmUgWyR7bGluZS5qb2luKCl9XWApO1xuXHR9XG5cblx0cmV0dXJuIGBcXGBcXGBcXGBtZXJtYWlkXG4tLS1cbmNvbmZpZzpcbiAgICB4eUNoYXJ0OlxuICAgICAgICB3aWR0aDogMTIwMFxuICAgICAgICBoZWlnaHQ6IDQwMFxuICAgIHRoZW1lVmFyaWFibGVzOlxuICAgICAgICB4eUNoYXJ0OlxuICAgICAgICAgICAgdGl0bGVDb2xvcjogXCIjMjIyXCJcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogXCIjZmZmXCJcbiAgICAgICAgICAgIHhBeGlzTGluZUNvbG9yOiBcIiMyMjJcIlxuICAgICAgICAgICAgeUF4aXNMaW5lQ29sb3I6IFwiIzIyMlwiXG4gICAgICAgICAgICBwbG90Q29sb3JQYWxldHRlOiBcIiR7cGFsZXR0ZS5qb2luKCl9XCJcbi0tLVxueHljaGFydC1iZXRhXG4gICAgdGl0bGUgXCIke3RpdGxlfVwiXG4gICAgeC1heGlzIDAgLS0+IDEwXG4gICAgeS1heGlzICR7TWF0aC5mbG9vcihtaW4gKiAwLjkpfSAtLT4gJHtNYXRoLmZsb29yKG1heCAqIDEuMSl9XG4gICAgJHtsaW5lcy5qb2luKFwiXFxuICAgIFwiKX1cblxcYFxcYFxcYFxuYFxufVxuIiwKICAgICJpbXBvcnQgeyByZW5kZXJDaGFydCwgdHlwZSBTZXJpZXMgfSBmcm9tIFwiLi9jaGFydFwiO1xuXG5leHBvcnQgY29uc3QgcmVuZGVyUmVwb3J0ID0gKHNkazogc3RyaW5nLCBtZXRyaWNzOiBSZWNvcmQ8c3RyaW5nLCBTZXJpZXNbXT4pID0+IGAjIFNMTyBUZXN0aW5nIDxpbWcgYWxpZ249XCJyaWdodFwiIGhlaWdodD1cIjM2XCIgc3JjPVwiaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9iYWRnZS/ijoctaGVhZC0lMjNGRjdGMEU/c3R5bGU9Zm9yLXRoZS1iYWRnZVwiPjxpbWcgYWxpZ249XCJyaWdodFwiIGhlaWdodD1cIjM2XCIgIHNyYz1cImh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vYmFkZ2Uv4o6HLWJhc2UtJTIzMUY3N0I0P3N0eWxlPWZvci10aGUtYmFkZ2VcIj48aW1nIGFsaWduPVwicmlnaHRcIiBoZWlnaHQ9XCIzNlwiIHNyYz1cImh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vYmFkZ2Uvc2RrLSR7c2RrLnJlcGxhY2UoLy0vZywgXCItLVwiKX0tJTIzRTM3N0MyP3N0eWxlPWZvci10aGUtYmFkZ2VcIj5cbjxkZXRhaWxzPjxzdW1tYXJ5Pk9wZXJhdGlvbiBTdWNjZXNzIFJhdGU8L3N1bW1hcnk+XG4ke3JlbmRlckNoYXJ0KFwib3BlcmF0aW9uX3R5cGU9cmVhZFwiLCBtZXRyaWNzW1wicmVhZF9hdmFpbGFiaWxpdHlcIl0pfVxuJHtyZW5kZXJDaGFydChcIm9wZXJhdGlvbl90eXBlPXdyaXRlXCIsIG1ldHJpY3NbXCJ3cml0ZV9hdmFpbGFiaWxpdHlcIl0pfVxuPC9kZXRhaWxzPlxuXG48ZGV0YWlscz48c3VtbWFyeT5PcGVyYXRpb25zIFBlciBTZWNvbmQ8L3N1bW1hcnk+XG4ke3JlbmRlckNoYXJ0KFwib3BlcmF0aW9uX3R5cGU9cmVhZFwiLCBtZXRyaWNzW1wicmVhZF90aHJvdWdocHV0XCJdKX1cbiR7cmVuZGVyQ2hhcnQoXCJvcGVyYXRpb25fdHlwZT13cml0ZVwiLCBtZXRyaWNzW1wid3JpdGVfdGhyb3VnaHB1dFwiXSl9XG48L2RldGFpbHM+XG5cbjxkZXRhaWxzPjxzdW1tYXJ5Pjk1dGggUGVyY2VudGlsZSBMYXRlbmN5PC9zdW1tYXJ5PlxuJHtyZW5kZXJDaGFydChcIm9wZXJhdGlvbl90eXBlPXJlYWRcIiwgbWV0cmljc1tcInJlYWRfbGF0ZW5jeV9tc1wiXSl9XG4ke3JlbmRlckNoYXJ0KFwib3BlcmF0aW9uX3R5cGU9d3JpdGVcIiwgbWV0cmljc1tcIndyaXRlX2xhdGVuY3lfbXNcIl0pfVxuPC9kZXRhaWxzPlxuYFxuIgogIF0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSxNQUFJLGtCQUFtQixXQUFRLFFBQUssb0JBQXFCLE9BQU8saUJBQWtCLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSTtBQUM1RixRQUFJLE9BQU87QUFBVyxXQUFLO0FBQzNCLFdBQU8sZUFBZSxHQUFHLElBQUksRUFBRSxZQUFZLE1BQU0sYUFBYSxHQUFHO0FBQUUsYUFBTyxFQUFFO0FBQUEsTUFBTSxDQUFDO0FBQUEsY0FDekUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJO0FBQ3hCLFFBQUksT0FBTztBQUFXLFdBQUs7QUFDM0IsTUFBRSxNQUFNLEVBQUU7QUFBQTtBQUVkLE1BQUkscUJBQXNCLFdBQVEsUUFBSyx1QkFBd0IsT0FBTyxpQkFBa0IsQ0FBQyxHQUFHLEdBQUc7QUFDM0YsV0FBTyxlQUFlLEdBQUcsV0FBVyxFQUFFLFlBQVksTUFBTSxPQUFPLEVBQUUsQ0FBQztBQUFBLGNBQ3pELENBQUMsR0FBRyxHQUFHO0FBQ2hCLE1BQUUsYUFBYTtBQUFBO0FBRW5CLE1BQUksZUFBZ0IsV0FBUSxR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QztBQUdwQyxNQUFNLHVCQUF1QjtBQUFBLElBQzNCO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNB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QSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEs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LE1BQU0saUJBQWlCLEVBQUU7QUFDckMsZUFBTyxTQUFTLE1BQU0sZUFBZTtBQUFBO0FBQUE7QUFBQTtBQUszQyxTQUFPLFVBQVU7QUFBQTs7OztBQ3BCakIsU0FBTyxVQUFVO0FBQUE7Ozs7QUNBakIsU0FBTyxVQUFVO0FBQUE7Ozs7QUNNakIsTUFBTTtBQUNOLE1BQU07QUFDTixNQUFNO0FBQ04sUUFBUTtBQUNSLE1BQU07QUFDTixNQUFNO0FBQ04sTUFBTTtBQUNOLE1BQU07QUFDTjtBQUFBLElBQ0U7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBO0FBRUYsTUFBTTtBQUNOO0FBQUEsSUFDRTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBRUE7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBO0FBSUYsTUFBSTtBQUNKLE1BQUk7QUFDRjtBQUFBLFVBQ0E7QUFFQSxZQUFRLEVB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V0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEs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QSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNKO0FBQ0EsTUFBTSwyQ0FBMkM7QUFBQSxJQUM3QztBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDSjtBQUNBLE1BQU0seUNBQXlDO0FBQy9DLE1B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QUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFDM0Y7QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQzVGO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQzNGO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBSztBQUFBLElBQ3pGO0FBQUEsSUFBSztBQUFBLElBQU87QUFBQSxFQUNoQixDQUFDO0FBQ0QsTUFBTSxZQUFZLElBQUksWUFBWTtBQUFBLElBQzlCO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFDMUY7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUMxRjtBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQzFGO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFNO0FBQUEsSUFBTTtBQUFBLElBQU07QUFBQSxJQUFNO0FBQUEsSUFBTTtBQUFBLElBQU07QUFBQSxJQUFNO0FBQUEsSUFBTTtBQUFBLElBQ3hGO0FBQUEsSUFBTTtBQUFBLElBQU07QUFBQSxJQUFNO0FBQUEsSUFBTTtBQUFBLElBQU07QUFBQSxJQUFNO0FBQUEsSUFBTTtBQUFBLElBQU07QUFBQSxJQUFNO0FBQUEsSUFBTTtBQUFBLElBQU07QUFBQSxJQUFNO0FBQUEsSUFBTTtBQUFBLElBQU07QUFBQSxJQUFNO0FBQUEsSUFDMUY7QUFBQSxJQUFNO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUMzRjtBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLEVBQzlGLENBQUM7QUFDRCxNQUFNLFlBQVksSUFBSSxZQUFZO0FBQUEsSUFDOUI7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUMxRjtBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQzFGO0FBQUEsSUFBSztBQUFBLElBQVE7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQVE7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUMzRjtBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQzFGO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFDMUY7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUMxRjtBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsRUFDMUUsQ0FBQztBQUNELFdBQVMsYUFBYSxDQUFDLEtBQUssS0FBSztBQUM3QixRQUFJLFdBQVcsS0FBSyxHQUFHO0FBQ25CLGFBQU87QUFDWCxXQUFPO0FBQUE7QUFFWCxXQUFTLFVBQVUsQ0FBQyxLQUFLLEtBQUs7QUFDMUIsVUFBTSxTQUFTLENBQUMsV0FBVyxXQUFXLFNBQVM7QUFDL0MsUUFBSSxhQUFhO0FBQ2pCLFFBQUksSUFBSTtBQUNSLFFBQUksSUFBSTtBQUNSLFdBQU8sYUFBYSxPQUFPLFFBQVE7QUFDL0IsVUFBSSxlQUFlLE9BQU8sU0FBUyxLQUFLLE1BQU0sR0FBRztBQUM3QyxlQUFPLElBQUk7QUFBQSxNQUNmO0FBQ0EsWUFBTSxVQUFVLElBQUksSUFBSSxTQUFTLE9BQU8sWUFBWSxJQUFJLEdBQUcsV0FBVyxDQUFDLEtBQUs7QUFDNUUsWUFBTSxVQUFVLElBQUksSUFBSSxTQUFTLE9BQU8sWUFBWSxJQUFJLEdBQUcsV0FBVyxDQUFDLEtBQUs7QUFDNUUsVUFBSSxZQUFZLEtBQU8sWUFBWSxHQUFLO0FBQ3BDLFlBQUk7QUFDSixZQUFJO0FBQ0osVUFBRTtBQUFBLE1BQ04sV0FDUyxZQUFZLFNBQVM7QUFDMUIsVUFBRTtBQUNGLFVBQUU7QUFBQSxNQUNOLFdBQ1MsWUFBWSxHQUFHO0FBQ3BCLFVBQUU7QUFBQSxNQUNOLFdBQ1MsWUFBWSxHQUFHO0FBQ3BCLFVBQUU7QUFBQSxNQUNOLE9BQ0s7QUFDRCxlQUFPLFVBQVU7QUFBQTtBQUFBLElBRXpCO0FBQ0EsV0FBTztBQUFBO0FBUVg7QUFBQSxRQUFNLHlDQUF5QyxpQkFBaUI7QUFBQSxJQU81RCxXQUFXLENBQUMsWUFBWSxTQUFTLFNBQVM7QUFDdEMsWUFBTSxZQUFZLE9BQU87QUFDekIsV0FBSyxVQUFVO0FBQUE7QUFBQSxJQU9uQixXQUFXLENBQUMsU0FBUztBQUNqQixjQUFRLFFBQVEsSUFBSSxnQkFBZ0IsV0FBVyxJQUFJLEtBQUssRUFBRSxZQUFZLENBQUM7QUFDdkUsVUFBSSxRQUFRLGdCQUNBLFFBQVEsU0FBUyxZQUFZLFFBQVEsU0FBUyxjQUN0RCxRQUFRLEtBQUssU0FBUyxHQUFHO0FBQ3pCLGdCQUFRLFFBQVEsSUFBSSxnQkFBZ0IsZ0JBQWdCLE9BQU8sV0FBVyxRQUFRLElBQUksQ0FBQztBQUFBLE1BQ3ZGO0FBQ0EsWUFBTSxlQUFlO0FBQUEsUUFDakIsUUFBUSxPQUFPLFlBQVk7QUFBQSxRQUMzQixLQUFLLHFCQUFxQixTQUFTLGdCQUFnQixnQkFBZ0I7QUFBQSxRQUNuRSxLQUFLLHFCQUFxQixTQUFTLGdCQUFnQixnQkFBZ0I7QUFBQSxRQUNuRSxLQUFLLHFCQUFxQixTQUFTLGdCQUFnQixjQUFjO0FBQUEsUUFDakUsS0FBSyxxQkFBcUIsU0FBUyxnQkFBZ0IsV0FBVztBQUFBLFFBQzlELEtBQUsscUJBQXFCLFNBQVMsZ0JBQWdCLFlBQVk7QUFBQSxRQUMvRCxLQUFLLHFCQUFxQixTQUFTLGdCQUFnQixJQUFJO0FBQUEsUUFDdkQsS0FBSyxxQkFBcUIsU0FBUyxnQkFBZ0IsaUJBQWlCO0FBQUEsUUFDcEUsS0FBSyxxQkFBcUIsU0FBUyxnQkFBZ0IsUUFBUTtBQUFBLFFBQzNELEtBQUsscUJBQXFCLFNBQVMsZ0JBQWdCLGFBQWE7QUFBQSxRQUNoRSxLQUFLLHFCQUFxQixTQUFTLGdCQUFnQixtQkFBbUI7QUFBQSxRQUN0RSxLQUFLLHFCQUFxQixTQUFTLGdCQUFnQixLQUFLO0FBQUEsTUFDNUQsRUFBRSxLQUFLLElBQUksSUFDUCxPQUNBLEtBQUssOEJBQThCLE9BQU8sSUFDMUMsS0FBSywrQkFBK0IsT0FBTztBQUMvQyxZQUFNLFlBQVksS0FBSyxRQUFRLGtCQUFrQixZQUFZO0FBQzdELGNBQVEsUUFBUSxJQUFJLGdCQUFnQixlQUFlLGFBQWEsS0FBSyxRQUFRLGVBQWUsV0FBVztBQUt2RyxhQUFPO0FBQUE7QUFBQSxJQVNYLG9CQUFvQixDQUFDLFNBQVMsWUFBWTtBQUN0QyxZQUFNLFFBQVEsUUFBUSxRQUFRLElBQUksVUFBVTtBQUM1QyxXQUFLLE9BQU87QUFDUixlQUFPO0FBQUEsTUFDWDtBQUlBLFVBQUksZUFBZSxnQkFBZ0Isa0JBQWtCLFVBQVUsS0FBSztBQUNoRSxlQUFPO0FBQUEsTUFDWDtBQUNBLGFBQU87QUFBQTtBQUFBLElBZVgsNkJBQTZCLENBQUMsU0FBUztBQUNuQyxVQUFJLGVBQWUsUUFBUSxRQUFRLGFBQWEsRUFBRSxPQUFPLENBQUMsVUFBVTtBQUNoRSxlQUFPLE1BQU0sS0FBSyxZQUFZLEVBQUUsV0FBVyxnQkFBZ0Isa0JBQWtCO0FBQUEsT0FDaEY7QUFDRCxtQkFBYSxLQUFLLENBQUMsR0FBRyxNQUFNO0FBQ3hCLGVBQU8sY0FBYyxFQUFFLEtBQUssWUFBWSxHQUFHLEVBQUUsS0FBSyxZQUFZLENBQUM7QUFBQSxPQUNsRTtBQUVELHFCQUFlLGFBQWEsT0FBTyxDQUFDLE9BQU8sT0FBTyxVQUFVO0FBQ3hELFlBQUksUUFBUSxLQUFLLE1BQU0sS0FBSyxZQUFZLE1BQU0sTUFBTSxRQUFRLEdBQUcsS0FBSyxZQUFZLEdBQUc7QUFDL0UsaUJBQU87QUFBQSxRQUNYO0FBQ0EsZUFBTztBQUFBLE9BQ1Y7QUFDRCxVQUFJLG1DQUFtQztBQUN2QyxtQkFBYSxRQUFRLENBQUMsV0FBVztBQUM3Qiw0Q0FBb0MsR0FBRyxPQUFPLEtBQ3pDLFlBQVksRUFDWixVQUFVLEtBQUssT0FBTyxNQUFNLFNBQVM7QUFBQSxPQUM3QztBQUNELGFBQU87QUFBQTtBQUFBLElBT1gsOEJBQThCLENBQUMsU0FBUztBQUNwQyxZQUFNLE9BQU8sV0FBVyxRQUFRLEdBQUcsS0FBSztBQUN4QyxVQUFJLDhCQUE4QjtBQUNsQyxxQ0FBK0IsSUFBSSxLQUFLLFFBQVEsY0FBYztBQUM5RCxZQUFNLFVBQVUsY0FBYyxRQUFRLEdBQUc7QUFDekMsWUFBTSxtQkFBbUIsQ0FBQztBQUMxQixVQUFJLFNBQVM7QUFDVCxjQUFNLFlBQVksQ0FBQztBQUNuQixtQkFBVyxPQUFPLFNBQVM7QUFDdkIsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFNBQVMsR0FBRyxHQUFHO0FBQ3BELGtCQUFNLGVBQWUsSUFBSSxZQUFZO0FBQ3JDLDZCQUFpQixnQkFBZ0IsUUFBUTtBQUN6QyxzQkFBVSxLQUFLLFlBQVk7QUFBQSxVQUMvQjtBQUFBLFFBQ0o7QUFDQSxrQkFBVSxLQUFLO0FBQ2YsbUJBQVcsT0FBTyxXQUFXO0FBQ3pCLHlDQUErQixLQUFLLE9BQU8sbUJBQW1CLGlCQUFpQixJQUFJO0FBQUEsUUFDdkY7QUFBQSxNQUNKO0FBQ0EsYUFBTztBQUFBO0FBQUEsRUFFZjtBQVFBO0FBQUEsUUFBTSxXQUFXO0FBQUEsSUFPYixNQUFNLENBQUMsYUFBYSxVQUFVO0FBQzFCLFlBQU0sSUFBSSxNQUFNLG1EQUFtRDtBQUFBO0FBQUEsRUFFM0U7QUFTQTtBQUFBLFFBQU0sbUNBQW1DLFdBQVc7QUFBQSxJQU1oRCxXQUFXLENBQUMsYUFBYSxZQUFZO0FBQ2pDLFlBQU07QUFDTixXQUFLLGNBQWM7QUFDbkIsV0FBSyxhQUFhLE9BQU8sS0FBSyxZQUFZLFFBQVE7QUFBQTtBQUFBLElBUXRELE1BQU0sQ0FBQyxZQUFZLFNBQVM7QUFDeEIsYUFBTyxJQUFJLGlDQUFpQyxZQUFZLFNBQVMsSUFBSTtBQUFBO0FBQUEsSUFPekUsaUJBQWlCLENBQUMsY0FBYztBQUM1QixhQUFPLE9BQU8sV0FBVyxVQUFVLEtBQUssVUFBVSxFQUFFLE9BQU8sY0FBYyxNQUFNLEVBQUUsT0FBTyxRQUFRO0FBQUE7QUFBQSxFQUV4RztBQVFBO0FBQUEsUUFBTSxrQ0FBa0MsaUJBQWlCO0FBQUEsSUFRckQsV0FBVyxDQUFDLFlBQVksU0FBUztBQUM3QixZQUFNLFlBQVksT0FBTztBQUFBO0FBQUEsRUFFakM7QUFVQTtBQUFBLFFBQU0sNEJBQTRCLFdBQVc7QUFBQSxJQU96QyxNQUFNLENBQUMsWUFBWSxTQUFTO0FBQ3hCLGFBQU8sSUFBSSwwQkFBMEIsWUFBWSxPQUFPO0FBQUE7QUFBQSxFQUVoRTtBQUlBLE1BQUk7QUFDSixXQUFTLDBCQUEwQixHQUFHO0FBQ2xDLFNBQUssb0JBQW9CO0FBQ3JCLDJCQUFxQixpQkFBaUIsd0JBQXdCO0FBQUEsSUFDbEU7QUFDQSxXQUFPO0FBQUE7QUFRWCxNQUFNLDJCQUEyQjtBQUtqQyxXQUFTLG9CQUFvQixHQUFHO0FBQzVCLFdBQU87QUFBQSxNQUNILE1BQU07QUFBQSxXQUNBLFlBQVcsQ0FBQyxTQUFTLE1BQU07QUFDN0IsWUFBSSxTQUFTLFFBQVE7QUFDakIsaUJBQU8sS0FBSyxPQUFPO0FBQUEsUUFDdkI7QUFDQSxZQUFJLFFBQVEsV0FBVyxTQUFTLFFBQVEsV0FBVyxRQUFRO0FBQ3ZELGtCQUFRLE1BQU0sZ0JBQWdCLFFBQVEsS0FBSyxhQUFhLFdBQVcsd0JBQXdCLElBQUksS0FBSyxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUM7QUFBQSxRQUM5SDtBQUNBLGdCQUFRLFFBQVEsT0FBTyxnQkFBZ0IsTUFBTTtBQUU3QyxnQkFBUSxRQUFRLE9BQU8sZ0JBQWdCLGNBQWM7QUFDckQsZUFBTyxLQUFLLE9BQU87QUFBQTtBQUFBLElBRTNCO0FBQUE7QUFRSixNQUFNLHlCQUF5QjtBQUkvQixNQUFJO0FBQ0osV0FBVSxDQUFDLHlCQUF3QjtBQUkvQiw0QkFBdUIsd0JBQXVCLGlCQUFpQixLQUFLO0FBSXBFLDRCQUF1Qix3QkFBdUIsV0FBVyxLQUFLO0FBQUEsS0FDL0QsMkJBQTJCLHlCQUF5QixDQUFDLEVBQUU7QUFFMUQsTUFBTSx3QkFBd0I7QUFBQSxJQUMxQixtQkFBbUIsTUFBTTtBQUFBLElBQ3pCLFVBQVU7QUFBQSxJQUNWLGdCQUFnQixJQUFJO0FBQUEsSUFDcEIsaUJBQWlCLHVCQUF1QjtBQUFBLElBQ3hDLGVBQWU7QUFBQSxJQUNmLGdCQUFnQjtBQUFBLEVBQ3BCO0FBQ0EsTUFBTSxrQkFBa0I7QUFBQSxJQUNwQjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDSjtBQUNBLE1BQU0sb0JBQW9CLElBQUksZ0JBQWdCLFdBQVcsNEJBQTRCO0FBSXJGLFdBQVMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLEdBQUc7QUFDdEMsUUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUk7QUFDeEIsVUFBTSxtQkFBbUIsS0FBSyxRQUFRLHFCQUFxQixRQUFRLE9BQVksWUFBSSxLQUFLLHNCQUFzQjtBQUM5RyxVQUFNLFlBQVksS0FBSyxRQUFRLGNBQWMsUUFBUSxPQUFZLFlBQUksS0FBSyxzQkFBc0I7QUFDaEcsVUFBTSxrQkFBa0IsS0FBSyxRQUFRLG9CQUFvQixRQUFRLE9BQVksWUFBSSxLQUFLLHNCQUFzQjtBQUM1RyxVQUFNLHFCQUFxQixLQUFLLFFBQVEsdUJBQXVCLFFBQVEsT0FBWSxZQUFJLEtBQUssc0JBQXNCO0FBQ2xILFVBQU0saUJBQWlCLEtBQUssUUFBUSxtQkFBbUIsUUFBUSxPQUFZLFlBQUksS0FBSyxzQkFBc0I7QUFDMUcsVUFBTSxrQkFBa0IsS0FBSyxRQUFRLG9CQUFvQixRQUFRLE9BQVksWUFBSSxLQUFLLHNCQUFzQjtBQUM1RyxhQUFTLFdBQVcsR0FBRyxnQkFBZ0IsU0FBUyxVQUFVLFNBQVU7QUFDaEUsVUFBSSxLQUFJO0FBQ1IsVUFBSSxXQUFXLFVBQVU7QUFDckIsZUFBTyxLQUFLLDJCQUEyQix1QkFBdUIsMkJBQTJCO0FBQ3pGLGVBQU87QUFBQSxNQUNYO0FBQ0EsVUFBSSxPQUFPO0FBQ1AsbUJBQVcsa0JBQWtCLGlCQUFpQjtBQUMxQyxjQUFJLE1BQU0sS0FBSyxZQUFZLEVBQUUsU0FBUyxjQUFjLEtBQ2hELE1BQU0sUUFBUSxZQUFZLEVBQUUsU0FBUyxjQUFjLEtBQ2xELE1BQU0sUUFBUSxNQUFNLEtBQUssU0FBUyxFQUFFLFlBQVksTUFBTSxnQkFBaUI7QUFDeEUsbUJBQU8sS0FBSyw4QkFBOEIsbUNBQW1DO0FBQzdFLG1CQUFPO0FBQUEsVUFDWDtBQUFBLFFBQ0o7QUFDQSxhQUFLLFVBQVUsUUFBUSxVQUFlLFlBQVMsWUFBSSxNQUFNLFVBQVUsa0JBQzlELFVBQVUsUUFBUSxVQUFlLFlBQVMsWUFBSSxNQUFNLFFBQVEsV0FBVyxpQ0FBaUMsSUFBSTtBQUM3RyxpQkFBTyxLQUFLLGlGQUFpRjtBQUM3RixpQkFBTztBQUFBLFFBQ1g7QUFBQSxNQUNKO0FBSUEsVUFBSSxZQUFZLE9BQU87QUFDbkIsY0FBTSxjQUFjLE9BQU0sTUFBSyxhQUFhLFFBQVEsYUFBa0IsWUFBUyxZQUFJLFNBQVMsWUFBWSxRQUFRLFFBQVksWUFBSSxNQUFLLFVBQVUsUUFBUSxVQUFlLFlBQVMsWUFBSSxNQUFNLGdCQUFnQixRQUFRLFFBQVksWUFBSSxNQUFLO0FBQ3RPLGFBQUssa0JBQWtCLGVBQWUsS0FBSztBQUN2QyxpQkFBTyxLQUFLLHFEQUFxRDtBQUNqRSxpQkFBTztBQUFBLFFBQ1g7QUFFQSxZQUFJLGVBQWUsT0FBTyxlQUFlLEtBQUs7QUFDMUMsaUJBQU8sS0FBSywyQ0FBMkMsYUFBYTtBQUNwRSxpQkFBTztBQUFBLFFBQ1g7QUFBQSxNQUNKO0FBZ0JBLGFBQU87QUFBQTtBQUVYLGFBQVMsY0FBYyxDQUFDLGdCQUFnQixTQUFTO0FBQzdDLFVBQUksZ0JBQWdCO0FBQ3BCLFVBQUksZ0JBQWdCO0FBQ2hCLGdCQUFRO0FBQUEsZUFDQyx1QkFBdUI7QUFDeEIsNEJBQWdCLEtBQUssS0FBSyxLQUFLLElBQUksR0FBRyxVQUFVLENBQUMsSUFBSSxLQUFLLGdCQUFnQixpQkFBaUI7QUFDM0Y7QUFBQSxlQUNDLHVCQUF1QjtBQUN4Qiw0QkFBZ0I7QUFDaEI7QUFBQTtBQUFBLE1BRVosT0FDSztBQUNELHdCQUFnQixLQUFLLE9BQU8sSUFBSTtBQUFBO0FBRXBDLGFBQU8sS0FBSywwQkFBMEIsaUJBQWlCO0FBQ3ZELGFBQU87QUFBQTtBQUVYLFdBQU87QUFBQSxNQUNILE1BQU07QUFBQSxXQUNBLFlBQVcsQ0FBQyxTQUFTLE1BQU07QUFFN0IsWUFBSSxnQkFBZ0I7QUFDaEIsa0JBQVEsTUFBTSxnQkFBZ0IsUUFBUSxLQUFLLGFBQWEsV0FBVyxTQUFTLE9BQU8sS0FBSyxNQUFNLGlCQUFpQixJQUFJLENBQUMsQ0FBQztBQUFBLFFBQ3pIO0FBQ0EsY0FBTSxhQUFhLFFBQVE7QUFDM0IsY0FBTSxlQUFlLGdCQUFnQixXQUFXLFFBQVEsS0FBSyxhQUFhLElBQUk7QUFDOUUsWUFBSSxrQkFBa0I7QUFDdEIsWUFBSSxVQUFVO0FBQ2QsWUFBSSxhQUFhO0FBQ2pCLFlBQUk7QUFDSixZQUFJO0FBQ0osZUFBTyxZQUFZO0FBQ2YsZ0JBQU0saUJBQWlCLG9CQUNsQixpQkFDQSxDQUFDLE9BQU8sUUFBUSxTQUFTLEVBQUUsU0FBUyxRQUFRLE1BQU0sS0FDbkQsVUFBVSxNQUFNO0FBQ3BCLGtCQUFRLE1BQU0saUJBQWlCLGFBQWE7QUFDNUMscUJBQVc7QUFDWCxrQkFBUTtBQUNSLGNBQUk7QUFDQSxtQkFBTyxLQUFLLDJCQUEyQixXQUFXLGlCQUFpQixZQUFZLGFBQWE7QUFDNUYsdUJBQVcsTUFBTSxLQUFLLE9BQU87QUFDN0IsOEJBQWtCLG9CQUFxQixrQkFBa0IsU0FBUyxXQUFXO0FBQUEsbUJBRTFFLEdBQVA7QUFDSSxnQkFBSSxpQkFBaUIsWUFBWSxDQUFDLEdBQUc7QUFDakMscUJBQU8sTUFBTSx1Q0FBdUMsRUFBRSxrQkFBa0IsRUFBRSxNQUFNO0FBQ2hGLHNCQUFRO0FBQUEsWUFDWixPQUNLO0FBQ0QscUJBQU8sTUFBTSx1Q0FBdUMsU0FBUyxnQkFBZ0IsQ0FBQyxHQUFHO0FBQ2pGLG9CQUFNO0FBQUE7QUFBQTtBQUdkLHVCQUFhLFlBQVksRUFBRSxnQkFBZ0IsU0FBUyxVQUFVLE1BQU0sQ0FBQztBQUNyRSxjQUFJLFlBQVk7QUFDWixrQkFBTSxNQUFNLGVBQWUsZ0JBQWdCLE9BQU8sR0FBRyxRQUFRLGFBQWEsaUJBQWlCO0FBQUEsVUFDL0Y7QUFDQTtBQUFBLFFBQ0o7QUFDQSxZQUFJLFVBQVU7QUFDVixpQkFBTztBQUFBLFFBQ1g7QUFDQSxjQUFNLFVBQVUsUUFBUSxVQUFlLFlBQUksUUFBUSxJQUFJLGlCQUFpQixVQUFVLHlDQUF5QztBQUFBO0FBQUEsSUFFbkk7QUFBQTtBQVFKLE1BQU0sdUNBQXVDO0FBSTdDLFdBQVMsZ0NBQWdDLENBQUMsU0FBUztBQUMvQyxhQUFTLFdBQVcsQ0FBQyxTQUFTO0FBQzFCLGNBQVEsUUFBUSxJQUFJLGdCQUFnQixXQUFXLElBQUksS0FBSyxFQUFFLFlBQVksQ0FBQztBQUN2RSxVQUFJLFFBQVEsZ0JBQ0EsUUFBUSxTQUFTLFlBQVksT0FBTyxTQUFTLFFBQVEsSUFBSSxNQUNqRSxRQUFRLEtBQUssU0FBUyxHQUFHO0FBQ3pCLGdCQUFRLFFBQVEsSUFBSSxnQkFBZ0IsZ0JBQWdCLE9BQU8sV0FBVyxRQUFRLElBQUksQ0FBQztBQUFBLE1BQ3ZGO0FBQ0EsWUFBTSxlQUFlO0FBQUEsUUFDakIsUUFBUSxPQUFPLFlBQVk7QUFBQSxRQUMzQixxQkFBcUIsU0FBUyxnQkFBZ0IsZ0JBQWdCO0FBQUEsUUFDOUQscUJBQXFCLFNBQVMsZ0JBQWdCLGdCQUFnQjtBQUFBLFFBQzlELHFCQUFxQixTQUFTLGdCQUFnQixjQUFjO0FBQUEsUUFDNUQscUJBQXFCLFNBQVMsZ0JBQWdCLFdBQVc7QUFBQSxRQUN6RCxxQkFBcUIsU0FBUyxnQkFBZ0IsWUFBWTtBQUFBLFFBQzFELHFCQUFxQixTQUFTLGdCQUFnQixJQUFJO0FBQUEsUUFDbEQscUJBQXFCLFNBQVMsZ0JBQWdCLGlCQUFpQjtBQUFBLFFBQy9ELHFCQUFxQixTQUFTLGdCQUFnQixRQUFRO0FBQUEsUUFDdEQscUJBQXFCLFNBQVMsZ0JBQWdCLGFBQWE7QUFBQSxRQUMzRCxxQkFBcUIsU0FBUyxnQkFBZ0IsbUJBQW1CO0FBQUEsUUFDakUscUJBQXFCLFNBQVMsZ0JBQWdCLEtBQUs7QUFBQSxNQUN2RCxFQUFFLEtBQUssSUFBSSxJQUNQLE9BQ0EsOEJBQThCLE9BQU8sSUFDckMsK0JBQStCLE9BQU87QUFDMUMsWUFBTSxZQUFZLE9BQU8sV0FBVyxVQUFVLFFBQVEsVUFBVSxFQUMzRCxPQUFPLGNBQWMsTUFBTSxFQUMzQixPQUFPLFFBQVE7QUFDcEIsY0FBUSxRQUFRLElBQUksZ0JBQWdCLGVBQWUsYUFBYSxRQUFRLGVBQWUsV0FBVztBQUFBO0FBVXRHLGFBQVMsb0JBQW9CLENBQUMsU0FBUyxZQUFZO0FBQy9DLFlBQU0sUUFBUSxRQUFRLFFBQVEsSUFBSSxVQUFVO0FBQzVDLFdBQUssT0FBTztBQUNSLGVBQU87QUFBQSxNQUNYO0FBSUEsVUFBSSxlQUFlLGdCQUFnQixrQkFBa0IsVUFBVSxLQUFLO0FBQ2hFLGVBQU87QUFBQSxNQUNYO0FBQ0EsYUFBTztBQUFBO0FBY1gsYUFBUyw2QkFBNkIsQ0FBQyxTQUFTO0FBQzVDLFVBQUksZUFBZSxDQUFDO0FBQ3BCLGtCQUFZLE1BQU0sVUFBVSxRQUFRLFNBQVM7QUFDekMsWUFBSSxLQUFLLFlBQVksRUFBRSxXQUFXLGdCQUFnQixrQkFBa0IsR0FBRztBQUNuRSx1QkFBYSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFBQSxRQUNyQztBQUFBLE1BQ0o7QUFDQSxtQkFBYSxLQUFLLENBQUMsR0FBRyxNQUFNO0FBQ3hCLGVBQU8sY0FBYyxFQUFFLEtBQUssWUFBWSxHQUFHLEVBQUUsS0FBSyxZQUFZLENBQUM7QUFBQSxPQUNsRTtBQUVELHFCQUFlLGFBQWEsT0FBTyxDQUFDLE9BQU8sT0FBTyxVQUFVO0FBQ3hELFlBQUksUUFBUSxLQUFLLE1BQU0sS0FBSyxZQUFZLE1BQU0sTUFBTSxRQUFRLEdBQUcsS0FBSyxZQUFZLEdBQUc7QUFDL0UsaUJBQU87QUFBQSxRQUNYO0FBQ0EsZUFBTztBQUFBLE9BQ1Y7QUFDRCxVQUFJLG1DQUFtQztBQUN2QyxtQkFBYSxRQUFRLENBQUMsV0FBVztBQUM3Qiw0Q0FBb0MsR0FBRyxPQUFPLEtBQ3pDLFlBQVksRUFDWixVQUFVLEtBQUssT0FBTyxNQUFNLFNBQVM7QUFBQSxPQUM3QztBQUNELGFBQU87QUFBQTtBQUVYLGFBQVMsOEJBQThCLENBQUMsU0FBUztBQUM3QyxZQUFNLE9BQU8sV0FBVyxRQUFRLEdBQUcsS0FBSztBQUN4QyxVQUFJLDhCQUE4QjtBQUNsQyxxQ0FBK0IsSUFBSSxRQUFRLGNBQWM7QUFDekQsWUFBTSxVQUFVLGNBQWMsUUFBUSxHQUFHO0FBQ3pDLFlBQU0sbUJBQW1CLENBQUM7QUFDMUIsVUFBSSxTQUFTO0FBQ1QsY0FBTSxZQUFZLENBQUM7QUFDbkIsbUJBQVcsT0FBTyxTQUFTO0FBQ3ZCLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxTQUFTLEdBQUcsR0FBRztBQUNwRCxrQkFBTSxlQUFlLElBQUksWUFBWTtBQUNyQyw2QkFBaUIsZ0JBQWdCLFFBQVE7QUFDekMsc0JBQVUsS0FBSyxZQUFZO0FBQUEsVUFDL0I7QUFBQSxRQUNKO0FBQ0Esa0JBQVUsS0FBSztBQUNmLG1CQUFXLE9BQU8sV0FBVztBQUN6Qix5Q0FBK0IsS0FBSyxPQUFPLG1CQUFtQixpQkFBaUIsSUFBSTtBQUFBLFFBQ3ZGO0FBQUEsTUFDSjtBQUNBLGFBQU87QUFBQTtBQUVYLFdBQU87QUFBQSxNQUNILE1BQU07QUFBQSxXQUNBLFlBQVcsQ0FBQyxTQUFTLE1BQU07QUFDN0Isb0JBQVksT0FBTztBQUNuQixlQUFPLEtBQUssT0FBTztBQUFBO0FBQUEsSUFFM0I7QUFBQTtBQWdCSjtBQUFBLFFBQU0sNkJBQTZCLGtCQUFrQjtBQUFBLElBUWpELFdBQVcsQ0FBQyxZQUFZLFNBQVM7QUFDN0IsWUFBTSxZQUFZLE9BQU87QUFBQTtBQUFBLFNBT3ZCLFlBQVcsQ0FBQyxTQUFTO0FBQ3ZCLFVBQUksU0FBUyxRQUFRO0FBQ2pCLGVBQU8sS0FBSyxZQUFZLFlBQVksT0FBTztBQUFBLE1BQy9DO0FBQ0EsVUFBSSxRQUFRLE9BQU8sWUFBWSxNQUFNLFNBQVMsUUFBUSxPQUFPLFlBQVksTUFBTSxRQUFRO0FBQ25GLGdCQUFRLE1BQU0sZ0JBQWdCLFFBQVEsS0FBSyxhQUFhLFdBQVcsd0JBQXdCLElBQUksS0FBSyxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUM7QUFBQSxNQUM5SDtBQUNBLGNBQVEsUUFBUSxPQUFPLGdCQUFnQixNQUFNO0FBRTdDLGNBQVEsUUFBUSxPQUFPLGdCQUFnQixjQUFjO0FBQ3JELGFBQU8sS0FBSyxZQUFZLFlBQVksT0FBTztBQUFBO0FBQUEsRUFFbkQ7QUFPQTtBQUFBLFFBQU0sNEJBQTRCO0FBQUEsSUFPOUIsTUFBTSxDQUFDLFlBQVksU0FBUztBQUN4QixhQUFPLElBQUkscUJBQXFCLFlBQVksT0FBTztBQUFBO0FBQUEsRUFFM0Q7QUFPQSxNQUFNLHdDQUF3QztBQUk5QyxXQUFTLGlDQUFpQyxHQUFHO0FBQ3pDLGFBQVMsb0JBQW9CLENBQUMsU0FBUztBQUNuQyxVQUFJLFFBQVEsZ0JBQ0EsUUFBUSxTQUFTLFlBQVksT0FBTyxTQUFTLFFBQVEsSUFBSSxNQUNqRSxRQUFRLEtBQUssU0FBUyxHQUFHO0FBQ3pCLGdCQUFRLFFBQVEsSUFBSSxnQkFBZ0IsZ0JBQWdCLE9BQU8sV0FBVyxRQUFRLElBQUksQ0FBQztBQUFBLE1BQ3ZGO0FBQUE7QUFFSixXQUFPO0FBQUEsTUFDSCxNQUFNO0FBQUEsV0FDQSxZQUFXLENBQUMsU0FBUyxNQUFNO0FBQzdCLDZCQUFxQixPQUFPO0FBQzVCLGVBQU8sS0FBSyxPQUFPO0FBQUE7QUFBQSxJQUUzQjtBQUFBO0FBVUosV0FBUyxjQUFjLENBQUMsVUFBVTtBQUM5QixTQUFLLG1CQUFtQixhQUFhLFVBQVU7QUFDM0MsYUFBTztBQUFBLElBQ1g7QUFDQSxVQUFNLGVBQWU7QUFDckIsV0FBUSxNQUFNLFFBQVEsYUFBYSxTQUFTLFlBQ2pDLGFBQWEsWUFBWSxtQkFDekIsYUFBYSwyQkFBMkI7QUFBQTtBQVV2RDtBQUFBLFFBQU0sU0FBUztBQUFBLElBT1gsV0FBVyxDQUFDLFdBQVcsVUFBVSxDQUFDLEdBQUc7QUFDakMsV0FBSyxZQUFZO0FBQ2pCLFdBQUssVUFBVTtBQUFBO0FBQUEsSUFRbkIsc0JBQXNCLEdBQUc7QUFDckIsYUFBTztBQUFBLFFBQ0gsWUFBWSxLQUFLLFFBQVE7QUFBQSxRQUN6Qix3QkFBd0IsS0FBSztBQUFBLE1BQ2pDO0FBQUE7QUFBQSxFQUVSO0FBUUEsV0FBUyxXQUFXLENBQUMsWUFBWSxrQkFBa0IsQ0FBQyxHQUFHO0FBQ25ELFNBQUssWUFBWTtBQUNiLG1CQUFhLElBQUk7QUFBQSxJQUNyQjtBQUNBLFVBQU0sV0FBVyxJQUFJLFNBQVMsQ0FBQyxHQUFHLGVBQWU7QUFDakQsYUFBUyxjQUFjO0FBQ3ZCLFdBQU87QUFBQTtBQUVYLFdBQVMsd0JBQXdCLENBQUMsVUFBVTtBQUN4QyxVQUFNLHdCQUF3QjtBQUFBLE1BQzFCO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDSjtBQUNBLFFBQUksU0FBUyxVQUFVLFFBQVE7QUFDM0IsWUFBTSxpQkFBaUIsU0FBUyxVQUFVLE9BQU8sQ0FBQyxZQUFZO0FBQzFELGdCQUFRLHNCQUFzQixLQUFLLENBQUMsaUJBQWlCLGFBQWEsT0FBTyxDQUFDO0FBQUEsT0FDN0U7QUFDRCxVQUFJLGVBQWUsUUFBUTtBQUN2QixjQUFNLGNBQWMsZUFBZSxLQUFLLENBQUMsWUFBWSx3QkFBd0IsT0FBTyxDQUFDO0FBRXJGLGVBQU87QUFBQSxVQUNILGlCQUFpQixlQUFlLGlDQUFpQyxjQUFjO0FBQUEsVUFDL0UsWUFBWTtBQUFBLFFBQ2hCO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFDQTtBQUFBO0FBRUosV0FBUyxvQkFBb0IsQ0FBQyxVQUFVO0FBQ3BDLFFBQUk7QUFDSixVQUFNLEtBQUssU0FBUyxXQUFXLFlBQVksYUFBYSxJQUFJLGNBQWMsTUFBTSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7QUFDekcsUUFBSSxhQUFhLFNBQVM7QUFDMUIsU0FBSyxZQUFZO0FBQ2IsbUJBQWEsV0FBVyxlQUFlLGtCQUFrQixRQUFRLElBQUksMkJBQTJCO0FBQ2hHLGVBQVMsa0JBQWtCO0FBQUEsSUFDL0I7QUFDQSxRQUFJLGVBQWUsU0FBUztBQUM1QixTQUFLLGNBQWM7QUFDZixZQUFNLGlCQUFpQiwrQkFBK0I7QUFDdEQsWUFBTSxrQkFBa0IsWUFBWSxvQkFBb0IsWUFBWSxpQkFBaUIsa0JBQy9FLEdBQUcsWUFBWSxpQkFBaUIsbUJBQW1CLG1CQUNuRCxHQUFHO0FBQ1QscUJBQWUsV0FBVyxxQkFBcUIsT0FBTyxPQUFPLE9BQU8sT0FBTyxDQUFDLEdBQUcsV0FBVyxHQUFHLEVBQUUsZ0JBQWdCO0FBQUEsUUFDdkcsOEJBQThCO0FBQUEsUUFDOUIsa0NBQWtDO0FBQUEsUUFDbEMsUUFBUSxPQUFPO0FBQUEsTUFDbkIsR0FBRyxrQkFBa0I7QUFBQSxRQUNqQjtBQUFBLE1BQ0osR0FBRyxzQkFBc0I7QUFBQSxRQUNyQixjQUFjLFFBQVE7QUFBQSxRQUN0QixtQkFBbUI7QUFBQSxVQUNmLEtBQUs7QUFBQSxZQUdELFlBQVk7QUFBQSxVQUNoQjtBQUFBLFFBQ0o7QUFBQSxNQUNKLEdBQUcsd0JBQXdCO0FBQUEsUUFDdkIsVUFBVSxRQUFRO0FBQUEsUUFDbEIsbUJBQW1CO0FBQUEsVUFDZixLQUFLO0FBQUEsWUFHRCxZQUFZO0FBQUEsVUFDaEI7QUFBQSxRQUNKO0FBQUEsTUFDSixFQUFFLENBQUMsQ0FBQztBQUNSLG1CQUFhLGFBQWEsRUFBRSxPQUFPLFFBQVEsQ0FBQztBQUM1QyxtQkFBYSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsNkJBQTZCLENBQUM7QUFDakYsbUJBQWEsVUFBVSxrQ0FBa0MsQ0FBQztBQUMxRCxtQkFBYSxVQUFVLG1CQUFtQixZQUFZLFlBQVksR0FBRyxFQUFFLE9BQU8sUUFBUSxDQUFDO0FBQ3ZGLG1CQUFhLFVBQVUscUJBQXFCLENBQUM7QUFDN0MsWUFBTSxtQkFBbUIseUJBQXlCLFFBQVE7QUFDMUQsVUFBSSxrQkFBa0I7QUFDbEIscUJBQWEsVUFBVSxpQkFBaUIsaUJBQWlCLGlCQUFpQixhQUFhLEVBQUUsWUFBWSxRQUFRLElBQUksU0FBUztBQUFBLE1BQzlIO0FBQ0EsWUFBTSxhQUFhLDBCQUEwQixRQUFRO0FBQ3JELFVBQUksU0FBUyxrQkFBa0IsVUFBVSxHQUFHO0FBQ3hDLHFCQUFhLFVBQVUsaUJBQWlCLGdDQUFnQztBQUFBLFVBQ3BFO0FBQUEsVUFDQSxTQUFTLEtBQUssWUFBWSxjQUFjLFFBQVEsT0FBWSxZQUFJLEtBQUs7QUFBQSxVQUNyRSxvQkFBb0IsRUFBRSw2QkFBNkIsV0FBVyxrQ0FBa0M7QUFBQSxRQUNwRyxDQUFDLEdBQUcsRUFBRSxPQUFPLE9BQU8sQ0FBQztBQUFBLE1BQ3pCLFdBQ1Msc0JBQXNCLDRCQUE0QjtBQUN2RCxxQkFBYSxVQUFVLGlDQUFpQztBQUFBLFVBQ3BELGFBQWEsV0FBVztBQUFBLFVBQ3hCLFlBQVksV0FBVztBQUFBLFFBQzNCLENBQUMsR0FBRyxFQUFFLE9BQU8sT0FBTyxDQUFDO0FBQUEsTUFDekI7QUFDQSxlQUFTLGdCQUFnQjtBQUFBLElBQzdCO0FBQ0EsV0FBTyxPQUFPLE9BQU8sT0FBTyxPQUFPLENBQUMsR0FBRyxXQUFXLEdBQUcsRUFBRSx5QkFBeUIsTUFBTSxZQUFZLFVBQVUsYUFBYSxDQUFDO0FBQUE7QUFFOUgsV0FBUyx5QkFBeUIsQ0FBQyxVQUFVO0FBRXpDLFFBQUksU0FBUyxhQUFhO0FBQ3RCLGFBQU8sU0FBUztBQUFBLElBQ3BCO0FBRUEsUUFBSSxhQUFhLElBQUk7QUFDckIsZUFBVyxXQUFXLFNBQVMsV0FBVztBQUN0QyxVQUFJLFNBQVMsa0JBQWtCLFFBQVEsVUFBVSxHQUFHO0FBR2hELHFCQUFhLFFBQVE7QUFBQSxNQUN6QixXQUNTLDZCQUE2QixPQUFPLEdBQUc7QUFDNUMsZUFBTztBQUFBLE1BQ1g7QUFBQSxJQUNKO0FBQ0EsV0FBTztBQUFBO0FBRVgsV0FBUyw0QkFBNEIsQ0FBQyxTQUFTO0FBQzNDLFFBQUksbUJBQW1CLDRCQUE0QjtBQUMvQyxhQUFPO0FBQUEsSUFDWDtBQUNBLFdBQU8sUUFBUSxZQUFZLFNBQVM7QUFBQTtBQUV4QyxXQUFTLHFCQUFxQixDQUFDLFNBQVM7QUFDcEMsUUFBSSxtQkFBbUIscUJBQXFCO0FBQ3hDLGFBQU87QUFBQSxJQUNYO0FBQ0EsV0FBTyxRQUFRLFlBQVksU0FBUztBQUFBO0FBRXhDLFdBQVMsNEJBQTRCLENBQUMsU0FBUztBQUMzQyxXQUFPLFNBQVMsa0JBQWtCLFFBQVEsVUFBVTtBQUFBO0FBRXhELFdBQVMsNkJBQTZCLENBQUMsU0FBUztBQUM1QyxRQUFJLG1CQUFtQiw2QkFBNkI7QUFDaEQsYUFBTztBQUFBLElBQ1g7QUFDQSxXQUFPLFFBQVEsWUFBWSxTQUFTO0FBQUE7QUFFeEMsV0FBUywyQkFBMkIsQ0FBQyxTQUFTO0FBQzFDLFFBQUksbUJBQW1CLDJCQUEyQjtBQUM5QyxhQUFPO0FBQUEsSUFDWDtBQUNBLFdBQU8sUUFBUSxZQUFZLFNBQVM7QUFBQTtBQUV4QyxXQUFTLCtCQUErQixDQUFDLFNBQVM7QUFDOUMsV0FBTyxRQUFRLFlBQVksU0FBUztBQUFBO0FBRXhDLFdBQVMsdUJBQXVCLENBQUMsU0FBUztBQUN0QyxXQUFPLFFBQVEsWUFBWSxTQUFTO0FBQUE7QUFFeEMsV0FBUyx1QkFBdUIsQ0FBQyxTQUFTO0FBQ3RDLFVBQU0sZ0JBQWdCO0FBQUEsTUFDbEI7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNKO0FBQ0EsVUFBTSxpQkFBaUI7QUFBQSxNQUNuQixhQUFhLE9BQU8sWUFBWTtBQUM1QixlQUFPO0FBQUEsVUFDSDtBQUFBLFVBQ0EsU0FBUyxRQUFRLFFBQVEsTUFBTTtBQUFBLFVBQy9CLFFBQVE7QUFBQSxRQUNaO0FBQUE7QUFBQSxJQUVSO0FBQ0EsVUFBTSwyQkFBMkI7QUFBQSxNQUM3QixHQUFHLENBQUMsV0FBVyxVQUFVO0FBQUE7QUFBQSxNQUd6QixTQUFTLENBQUMsV0FBVztBQUNqQixlQUFPO0FBQUE7QUFBQSxJQUVmO0FBQ0EsVUFBTSxpQkFBaUIsUUFBUSxPQUFPLGdCQUFnQix3QkFBd0I7QUFDOUUsVUFBTSxhQUFhLGVBQWUsWUFBWTtBQUU5QyxXQUFPLGNBQWMsS0FBSyxDQUFDLG9CQUFvQjtBQUMzQyxhQUFPLFdBQVcsV0FBVyxlQUFlO0FBQUEsS0FDL0M7QUFBQTtBQVVMLE1BQU0sd0JBQXdCO0FBQUEsSUFDMUIsZ0JBQWdCO0FBQUEsSUFDaEIsU0FBUztBQUFBLElBQ1QsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixzQkFBc0I7QUFBQSxVQUNsQixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsWUFDTixXQUFXO0FBQUEsVUFDZjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGFBQWE7QUFBQSxVQUNULGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxZQUNOLFdBQVc7QUFBQSxVQUNmO0FBQUEsUUFDSjtBQUFBLFFBQ0EsZUFBZTtBQUFBLFVBQ1gsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sV0FBVztBQUFBLFVBQ2Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxjQUFjO0FBQUEsVUFDZCxnQkFBZ0I7QUFBQSxVQUNoQixNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsWUFDTixTQUFTO0FBQUEsY0FDTCxNQUFNO0FBQUEsZ0JBQ0YsTUFBTTtBQUFBLGdCQUNOLFdBQVc7QUFBQSxjQUNmO0FBQUEsWUFDSjtBQUFBLFVBQ0o7QUFBQSxRQUNKO0FBQUEsUUFDQSx1QkFBdUI7QUFBQSxVQUNuQixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLHVCQUF1QjtBQUFBLFVBQ25CLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxZQUNOLFdBQVc7QUFBQSxVQUNmO0FBQUEsUUFDSjtBQUFBLFFBQ0EsZUFBZTtBQUFBLFVBQ1gsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sV0FBVztBQUFBLFVBQ2Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxVQUFVO0FBQUEsSUFDWixnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFNBQVM7QUFBQSxVQUNMLGdCQUFnQjtBQUFBLFVBQ2hCLFVBQVU7QUFBQSxVQUNWLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsZ0JBQWdCO0FBQUEsVUFDWixnQkFBZ0I7QUFBQSxVQUNoQixVQUFVO0FBQUEsVUFDVixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFVBQVU7QUFBQSxVQUNWLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsT0FBTztBQUFBLFVBQ0gsZ0JBQWdCO0FBQUEsVUFDaEIsVUFBVTtBQUFBLFVBQ1YsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxZQUNOLFdBQVc7QUFBQSxVQUNmO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sa0JBQWtCO0FBQUEsSUFDcEIsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixTQUFTO0FBQUEsVUFDTCxnQkFBZ0I7QUFBQSxVQUNoQixVQUFVO0FBQUEsVUFDVixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU07QUFBQSxVQUNGLGFBQWE7QUFBQSxZQUNULGtCQUFrQjtBQUFBLFVBQ3RCO0FBQUEsVUFDQSxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLFVBQVU7QUFBQSxJQUNaLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsU0FBUztBQUFBLFVBQ0wsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxTQUFTO0FBQUEsVUFDTCxnQkFBZ0I7QUFBQSxVQUNoQixVQUFVO0FBQUEsVUFDVixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGFBQWE7QUFBQSxVQUNULGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsWUFDTixXQUFXO0FBQUEsVUFDZjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLFdBQVc7QUFBQSxJQUNiLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsZ0JBQWdCO0FBQUEsVUFDWixnQkFBZ0I7QUFBQSxVQUNoQixVQUFVO0FBQUEsVUFDVixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGdCQUFnQjtBQUFBLFVBQ1osZ0JBQWdCO0FBQUEsVUFDaEIsVUFBVTtBQUFBLFVBQ1YsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxnQkFBZ0I7QUFBQSxVQUNaLGdCQUFnQjtBQUFBLFVBQ2hCLFVBQVU7QUFBQSxVQUNWLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsZ0JBQWdCO0FBQUEsVUFDWixnQkFBZ0I7QUFBQSxVQUNoQixVQUFVO0FBQUEsVUFDVixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGlCQUFpQjtBQUFBLFVBQ2IsYUFBYTtBQUFBLFlBQ1Qsa0JBQWtCO0FBQUEsVUFDdEI7QUFBQSxVQUNBLGdCQUFnQjtBQUFBLFVBQ2hCLFVBQVU7QUFBQSxVQUNWLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sZ0JBQWdCO0FBQUEsSUFDbEIsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixTQUFTO0FBQUEsVUFDTCxnQkFBZ0I7QUFBQSxVQUNoQixVQUFVO0FBQUEsVUFDVixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGVBQWU7QUFBQSxVQUNYLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0Esc0JBQXNCO0FBQUEsVUFDbEIsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSwwQkFBMEI7QUFBQSxVQUN0QixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLGVBQWU7QUFBQSxJQUNqQixnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFNBQVM7QUFBQSxVQUNMLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSwyQkFBMkI7QUFBQSxVQUN2QixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLHdCQUF3QjtBQUFBLElBQzFCLGdCQUFnQjtBQUFBLElBQ2hCLFNBQVM7QUFBQSxJQUNULE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsZ0JBQWdCO0FBQUEsVUFDWixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsWUFDTixXQUFXO0FBQUEsVUFDZjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLGlCQUFpQjtBQUFBLElBQ25CLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsUUFBUTtBQUFBLFVBQ0osZ0JBQWdCO0FBQUEsVUFDaEIsVUFBVTtBQUFBLFVBQ1YsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sZUFBZSxDQUFDLFFBQVEsYUFBYSxhQUFhO0FBQUEsVUFDdEQ7QUFBQSxRQUNKO0FBQUEsUUFDQSxZQUFZO0FBQUEsVUFDUixnQkFBZ0I7QUFBQSxVQUNoQixVQUFVO0FBQUEsVUFDVixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLGdDQUFnQztBQUFBLElBQ2xDLGdCQUFnQjtBQUFBLElBQ2hCLFNBQVM7QUFBQSxJQUNULE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixVQUFVO0FBQUEsVUFDVixTQUFTO0FBQUEsVUFDVCxnQkFBZ0I7QUFBQSxVQUNoQixNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFFBQVE7QUFBQSxVQUNKLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsUUFBUTtBQUFBLFVBQ0osZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxhQUFhO0FBQUEsVUFDVCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGdCQUFnQjtBQUFBLFVBQ1osZ0JBQWdCO0FBQUEsVUFDaEIsVUFBVTtBQUFBLFVBQ1YsU0FBUztBQUFBLFVBQ1QsY0FBYztBQUFBLFVBQ2QsZ0JBQWdCO0FBQUEsVUFDaEIsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sU0FBUztBQUFBLGNBQ0wsTUFBTTtBQUFBLGdCQUNGLE1BQU07QUFBQSxnQkFDTixXQUFXO0FBQUEsY0FDZjtBQUFBLFlBQ0o7QUFBQSxVQUNKO0FBQUEsUUFDSjtBQUFBLFFBQ0EsbUJBQW1CO0FBQUEsVUFDZixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLGdCQUFnQjtBQUFBLElBQ2xCLGdCQUFnQjtBQUFBLElBQ2hCLFNBQVM7QUFBQSxJQUNULE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsVUFBVTtBQUFBLFVBQ1YsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxTQUFTO0FBQUEsVUFDTCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFNBQVM7QUFBQSxVQUNMLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsWUFBWTtBQUFBLFVBQ1IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sV0FBVztBQUFBLFVBQ2Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxVQUFVO0FBQUEsVUFDTixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsWUFDTixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sU0FBUyxFQUFFO0FBQUEsVUFDdEM7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxzQkFBc0I7QUFBQSxJQUN4QixnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLGNBQWM7QUFBQSxVQUNWLGdCQUFnQjtBQUFBLFVBQ2hCLFVBQVU7QUFBQSxVQUNWLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsVUFBVTtBQUFBLFVBQ1YsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxhQUFhO0FBQUEsVUFDVCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsWUFDTixlQUFlLENBQUMsVUFBVSxVQUFVO0FBQUEsVUFDeEM7QUFBQSxRQUNKO0FBQUEsUUFDQSxZQUFZO0FBQUEsVUFDUixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsWUFDTixlQUFlO0FBQUEsY0FDWDtBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxZQUNKO0FBQUEsVUFDSjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGVBQWU7QUFBQSxVQUNYLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxZQUNOLGVBQWUsQ0FBQyxZQUFZLE9BQU87QUFBQSxVQUN2QztBQUFBLFFBQ0o7QUFBQSxRQUNBLGNBQWM7QUFBQSxVQUNWLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxZQUNOLGVBQWUsQ0FBQyxhQUFhLE1BQU07QUFBQSxVQUN2QztBQUFBLFFBQ0o7QUFBQSxRQUNBLHVCQUF1QjtBQUFBLFVBQ25CLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsY0FBYztBQUFBLFVBQ1YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSx3QkFBd0I7QUFBQSxVQUNwQixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGdDQUFnQztBQUFBLFVBQzVCLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSx3QkFBd0I7QUFBQSxVQUNwQixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLHlDQUF5QztBQUFBLFVBQ3JDLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sVUFBVTtBQUFBLElBQ1osZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixVQUFVO0FBQUEsVUFDTixnQkFBZ0I7QUFBQSxVQUNoQixVQUFVO0FBQUEsVUFDVixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFVBQVU7QUFBQSxVQUNWLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sb0JBQW9CO0FBQUEsSUFDdEIsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixnQkFBZ0I7QUFBQSxVQUNaLGdCQUFnQjtBQUFBLFVBQ2hCLFVBQVU7QUFBQSxVQUNWLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsZ0JBQWdCO0FBQUEsVUFDWixnQkFBZ0I7QUFBQSxVQUNoQixVQUFVO0FBQUEsVUFDVixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGdCQUFnQjtBQUFBLFVBQ1osZ0JBQWdCO0FBQUEsVUFDaEIsVUFBVTtBQUFBLFVBQ1YsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFVBQVU7QUFBQSxVQUNWLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsZUFBZTtBQUFBLFVBQ1gsZ0JBQWdCO0FBQUEsVUFDaEIsVUFBVTtBQUFBLFVBQ1YsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxlQUFlO0FBQUEsVUFDWCxnQkFBZ0I7QUFBQSxVQUNoQixVQUFVO0FBQUEsVUFDVixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE9BQU87QUFBQSxVQUNILGdCQUFnQjtBQUFBLFVBQ2hCLFVBQVU7QUFBQSxVQUNWLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sb0JBQW9CO0FBQUEsSUFDdEIsZ0JBQWdCO0FBQUEsSUFDaEIsU0FBUztBQUFBLElBQ1QsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFVBQVU7QUFBQSxVQUNWLFNBQVM7QUFBQSxVQUNULGdCQUFnQjtBQUFBLFVBQ2hCLE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsT0FBTztBQUFBLFVBQ0gsZ0JBQWdCO0FBQUEsVUFDaEIsVUFBVTtBQUFBLFVBQ1YsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxPQUFPO0FBQUEsVUFDSCxnQkFBZ0I7QUFBQSxVQUNoQixVQUFVO0FBQUEsVUFDVixTQUFTO0FBQUEsVUFDVCxjQUFjO0FBQUEsVUFDZCxnQkFBZ0I7QUFBQSxVQUNoQixNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsWUFDTixTQUFTO0FBQUEsY0FDTCxNQUFNO0FBQUEsZ0JBQ0YsTUFBTTtBQUFBLGdCQUNOLFdBQVc7QUFBQSxjQUNmO0FBQUEsWUFDSjtBQUFBLFVBQ0o7QUFBQSxRQUNKO0FBQUEsUUFDQSxtQkFBbUI7QUFBQSxVQUNmLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0saUJBQWlCO0FBQUEsSUFDbkIsZ0JBQWdCO0FBQUEsSUFDaEIsU0FBUztBQUFBLElBQ1QsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixVQUFVO0FBQUEsVUFDVixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGVBQWU7QUFBQSxVQUNYLGdCQUFnQjtBQUFBLFVBQ2hCLFVBQVU7QUFBQSxVQUNWLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sV0FBVztBQUFBLFVBQ2Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxXQUFXO0FBQUEsSUFDYixnQkFBZ0I7QUFBQSxJQUNoQixTQUFTO0FBQUEsSUFDVCxNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFlBQVk7QUFBQSxVQUNSLGdCQUFnQjtBQUFBLFVBQ2hCLFVBQVU7QUFBQSxVQUNWLFNBQVM7QUFBQSxVQUNULGNBQWM7QUFBQSxVQUNkLGdCQUFnQjtBQUFBLFVBQ2hCLE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxZQUNOLFNBQVM7QUFBQSxjQUNMLE1BQU07QUFBQSxnQkFDRixNQUFNO0FBQUEsZ0JBQ04sV0FBVztBQUFBLGNBQ2Y7QUFBQSxZQUNKO0FBQUEsVUFDSjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLFVBQVU7QUFBQSxJQUNaLGdCQUFnQjtBQUFBLElBQ2hCLFNBQVM7QUFBQSxJQUNULE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsS0FBSztBQUFBLFVBQ0QsZ0JBQWdCO0FBQUEsVUFDaEIsVUFBVTtBQUFBLFVBQ1YsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxPQUFPO0FBQUEsVUFDSCxnQkFBZ0I7QUFBQSxVQUNoQixVQUFVO0FBQUEsVUFDVixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLG1CQUFtQjtBQUFBLElBQ3JCLGdCQUFnQjtBQUFBLElBQ2hCLFNBQVM7QUFBQSxJQUNULE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsSUFBSTtBQUFBLFVBQ0EsZ0JBQWdCO0FBQUEsVUFDaEIsVUFBVTtBQUFBLFVBQ1YsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxjQUFjO0FBQUEsVUFDVixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsWUFDTixXQUFXO0FBQUEsVUFDZjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLGVBQWU7QUFBQSxJQUNqQixnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFVBQVU7QUFBQSxVQUNOLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxhQUFhO0FBQUEsVUFDVCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLCtCQUErQjtBQUFBLElBQ2pDLGdCQUFnQjtBQUFBLElBQ2hCLFNBQVM7QUFBQSxJQUNULE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixVQUFVO0FBQUEsVUFDVixTQUFTO0FBQUEsVUFDVCxnQkFBZ0I7QUFBQSxVQUNoQixNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGVBQWU7QUFBQSxVQUNYLGdCQUFnQjtBQUFBLFVBQ2hCLFVBQVU7QUFBQSxVQUNWLFNBQVM7QUFBQSxVQUNULGdCQUFnQjtBQUFBLFVBQ2hCLE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsUUFBUTtBQUFBLFVBQ0osZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxRQUFRO0FBQUEsVUFDSixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGFBQWE7QUFBQSxVQUNULGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsU0FBUztBQUFBLFVBQ0wsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sV0FBVztBQUFBLFVBQ2Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxtQkFBbUI7QUFBQSxVQUNmLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sc0JBQXNCO0FBQUEsSUFDeEIsZ0JBQWdCO0FBQUEsSUFDaEIsU0FBUztBQUFBLElBQ1QsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixVQUFVO0FBQUEsVUFDVixTQUFTO0FBQUEsVUFDVCxnQkFBZ0I7QUFBQSxVQUNoQixNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsWUFDTixTQUFTO0FBQUEsY0FDTCxNQUFNO0FBQUEsZ0JBQ0YsTUFBTTtBQUFBLGdCQUNOLFdBQVc7QUFBQSxjQUNmO0FBQUEsWUFDSjtBQUFBLFVBQ0o7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxtQkFBbUI7QUFBQSxJQUNyQixnQkFBZ0I7QUFBQSxJQUNoQixTQUFTO0FBQUEsSUFDVCxNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxZQUNOLFdBQVc7QUFBQSxVQUNmO0FBQUEsUUFDSjtBQUFBLFFBQ0EsU0FBUztBQUFBLFVBQ0wsZ0JBQWdCO0FBQUEsVUFDaEIsVUFBVTtBQUFBLFVBQ1YsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxVQUFVO0FBQUEsVUFDTixnQkFBZ0I7QUFBQSxVQUNoQixVQUFVO0FBQUEsVUFDVixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0Esa0JBQWtCO0FBQUEsVUFDZCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFlBQVk7QUFBQSxVQUNSLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxZQUNOLFdBQVc7QUFBQSxVQUNmO0FBQUEsUUFDSjtBQUFBLFFBQ0EsVUFBVTtBQUFBLFVBQ04sZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFNBQVMsRUFBRTtBQUFBLFVBQ3RDO0FBQUEsUUFDSjtBQUFBLFFBQ0EsVUFBVTtBQUFBLFVBQ04sZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sV0FBVztBQUFBLFVBQ2Y7QUFBQSxRQUNKO0FBQUEsUUFDQSwyQkFBMkI7QUFBQSxVQUN2QixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsWUFDTixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sU0FBUyxFQUFFO0FBQUEsVUFDdEM7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sV0FBVztBQUFBLElBQ2IsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixTQUFTO0FBQUEsVUFDTCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxnQkFBZ0I7QUFBQSxVQUNoQixNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFNBQVM7QUFBQSxVQUNMLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULGFBQWE7QUFBQSxVQUNiLE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0seUJBQXlCO0FBQUEsSUFDM0IsZ0JBQWdCO0FBQUEsSUFDaEIsU0FBUztBQUFBLElBQ1QsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGNBQWM7QUFBQSxVQUNWLGdCQUFnQjtBQUFBLFVBQ2hCLFVBQVU7QUFBQSxVQUNWLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsVUFBVTtBQUFBLFVBQ1YsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxlQUFlO0FBQUEsVUFDWCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGFBQWE7QUFBQSxVQUNULGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxZQUFZO0FBQUEsVUFDUixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLG9CQUFvQjtBQUFBLFVBQ2hCLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsY0FBYztBQUFBLFVBQ1YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxvQkFBb0I7QUFBQSxVQUNoQixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFVBQVU7QUFBQSxVQUNOLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxZQUNOLGVBQWUsQ0FBQyxhQUFhLFlBQVksWUFBWTtBQUFBLFVBQ3pEO0FBQUEsUUFDSjtBQUFBLFFBQ0EsYUFBYTtBQUFBLFVBQ1QsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sZUFBZSxDQUFDLFVBQVUsVUFBVTtBQUFBLFVBQ3hDO0FBQUEsUUFDSjtBQUFBLFFBQ0EsWUFBWTtBQUFBLFVBQ1IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sZUFBZTtBQUFBLGNBQ1g7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsWUFDSjtBQUFBLFVBQ0o7QUFBQSxRQUNKO0FBQUEsUUFDQSxlQUFlO0FBQUEsVUFDWCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsWUFDTixlQUFlLENBQUMsWUFBWSxPQUFPO0FBQUEsVUFDdkM7QUFBQSxRQUNKO0FBQUEsUUFDQSxRQUFRO0FBQUEsVUFDSixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFlBQVk7QUFBQSxVQUNSLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxZQUNOLGVBQWUsQ0FBQyxXQUFXLFdBQVcsV0FBVyxRQUFRO0FBQUEsVUFDN0Q7QUFBQSxRQUNKO0FBQUEsUUFDQSxZQUFZO0FBQUEsVUFDUixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGNBQWM7QUFBQSxVQUNWLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLHVCQUF1QjtBQUFBLFVBQ25CLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxxQkFBcUI7QUFBQSxVQUNqQixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0Esd0JBQXdCO0FBQUEsVUFDcEIsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxZQUFZO0FBQUEsVUFDUixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsWUFDTixlQUFlO0FBQUEsY0FDWDtBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsWUFDSjtBQUFBLFVBQ0o7QUFBQSxRQUNKO0FBQUEsUUFDQSxvQkFBb0I7QUFBQSxVQUNoQixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGVBQWU7QUFBQSxVQUNYLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxZQUNOLGVBQWU7QUFBQSxjQUNYO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxZQUNKO0FBQUEsVUFDSjtBQUFBLFFBQ0o7QUFBQSxRQUNBLDJCQUEyQjtBQUFBLFVBQ3ZCLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLHFCQUFxQjtBQUFBLFVBQ2pCLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsVUFBVTtBQUFBLFVBQ04sZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFVBQVU7QUFBQSxVQUNOLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsbUJBQW1CO0FBQUEsVUFDZixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsWUFDTixlQUFlLENBQUMsUUFBUSxVQUFVO0FBQUEsVUFDdEM7QUFBQSxRQUNKO0FBQUEsUUFDQSxnQkFBZ0I7QUFBQSxVQUNaLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsNkJBQTZCO0FBQUEsVUFDekIsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSx3QkFBd0I7QUFBQSxVQUNwQixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsWUFDTixlQUFlLENBQUMsV0FBVyxZQUFZLFFBQVE7QUFBQSxVQUNuRDtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sb0NBQW9DO0FBQUEsSUFDdEMsZ0JBQWdCO0FBQUEsSUFDaEIsU0FBUztBQUFBLElBQ1QsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFVBQVU7QUFBQSxVQUNWLFNBQVM7QUFBQSxVQUNULGdCQUFnQjtBQUFBLFVBQ2hCLE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsZUFBZTtBQUFBLFVBQ1gsZ0JBQWdCO0FBQUEsVUFDaEIsVUFBVTtBQUFBLFVBQ1YsU0FBUztBQUFBLFVBQ1QsZ0JBQWdCO0FBQUEsVUFDaEIsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxRQUFRO0FBQUEsVUFDSixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFFBQVE7QUFBQSxVQUNKLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsYUFBYTtBQUFBLFVBQ1QsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFNBQVM7QUFBQSxVQUNMLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxZQUNOLFdBQVc7QUFBQSxVQUNmO0FBQUEsUUFDSjtBQUFBLFFBQ0EsbUJBQW1CO0FBQUEsVUFDZixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLDJCQUEyQjtBQUFBLElBQzdCLGdCQUFnQjtBQUFBLElBQ2hCLFNBQVM7QUFBQSxJQUNULE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsY0FBYztBQUFBLFVBQ1YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsZ0JBQWdCO0FBQUEsVUFDaEIsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sU0FBUztBQUFBLGNBQ0wsTUFBTTtBQUFBLGdCQUNGLE1BQU07QUFBQSxnQkFDTixXQUFXO0FBQUEsY0FDZjtBQUFBLFlBQ0o7QUFBQSxVQUNKO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsVUFBVTtBQUFBLFVBQ1YsU0FBUztBQUFBLFVBQ1QsZ0JBQWdCO0FBQUEsVUFDaEIsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sU0FBUztBQUFBLGNBQ0wsTUFBTTtBQUFBLGdCQUNGLE1BQU07QUFBQSxnQkFDTixXQUFXO0FBQUEsY0FDZjtBQUFBLFlBQ0o7QUFBQSxVQUNKO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sYUFBYTtBQUFBLElBQ2YsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsWUFDTixXQUFXO0FBQUEsVUFDZjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLGtCQUFrQjtBQUFBLElBQ3BCLGdCQUFnQjtBQUFBLElBQ2hCLFNBQVM7QUFBQSxJQUNULE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsZ0JBQWdCO0FBQUEsVUFDaEIsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sU0FBUztBQUFBLGNBQ0wsTUFBTTtBQUFBLGdCQUNGLE1BQU07QUFBQSxjQUNWO0FBQUEsWUFDSjtBQUFBLFVBQ0o7QUFBQSxRQUNKO0FBQUEsUUFDQSxhQUFhO0FBQUEsVUFDVCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxnQkFBZ0I7QUFBQSxVQUNoQixNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsWUFDTixTQUFTO0FBQUEsY0FDTCxNQUFNO0FBQUEsZ0JBQ0YsTUFBTTtBQUFBLGNBQ1Y7QUFBQSxZQUNKO0FBQUEsVUFDSjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFFBQVE7QUFBQSxVQUNKLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULGdCQUFnQjtBQUFBLFVBQ2hCLE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxZQUNOLFNBQVM7QUFBQSxjQUNMLE1BQU07QUFBQSxnQkFDRixNQUFNO0FBQUEsY0FDVjtBQUFBLFlBQ0o7QUFBQSxVQUNKO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sWUFBWTtBQUFBLElBQ2QsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULGNBQWM7QUFBQSxVQUNkLGdCQUFnQjtBQUFBLFVBQ2hCLE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxZQUNOLFNBQVM7QUFBQSxjQUNMLE1BQU07QUFBQSxnQkFDRixNQUFNO0FBQUEsZ0JBQ04sV0FBVztBQUFBLGNBQ2Y7QUFBQSxZQUNKO0FBQUEsVUFDSjtBQUFBLFFBQ0o7QUFBQSxRQUNBLG1CQUFtQjtBQUFBLFVBQ2YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsY0FBYztBQUFBLFVBQ2QsZ0JBQWdCO0FBQUEsVUFDaEIsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sU0FBUztBQUFBLGNBQ0wsTUFBTTtBQUFBLGdCQUNGLE1BQU07QUFBQSxnQkFDTixXQUFXO0FBQUEsY0FDZjtBQUFBLFlBQ0o7QUFBQSxVQUNKO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sUUFBUTtBQUFBLElBQ1YsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixVQUFVO0FBQUEsVUFDVixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFVBQVU7QUFBQSxVQUNWLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sV0FBVztBQUFBLElBQ2IsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxnQkFBZ0I7QUFBQSxVQUNoQixNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsWUFDTixTQUFTO0FBQUEsY0FDTCxNQUFNO0FBQUEsZ0JBQ0YsTUFBTTtBQUFBLGdCQUNOLFdBQVc7QUFBQSxjQUNmO0FBQUEsWUFDSjtBQUFBLFVBQ0o7QUFBQSxRQUNKO0FBQUEsUUFDQSxZQUFZO0FBQUEsVUFDUixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxnQkFBZ0I7QUFBQSxVQUNoQixNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsWUFDTixTQUFTO0FBQUEsY0FDTCxNQUFNO0FBQUEsZ0JBQ0YsTUFBTTtBQUFBLGdCQUNOLFdBQVc7QUFBQSxjQUNmO0FBQUEsWUFDSjtBQUFBLFVBQ0o7QUFBQSxRQUNKO0FBQUEsUUFDQSxtQkFBbUI7QUFBQSxVQUNmLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sWUFBWTtBQUFBLElBQ2QsZ0JBQWdCO0FBQUEsSUFDaEIsU0FBUztBQUFBLElBQ1QsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixPQUFPO0FBQUEsVUFDSCxnQkFBZ0I7QUFBQSxVQUNoQixVQUFVO0FBQUEsVUFDVixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLEtBQUs7QUFBQSxVQUNELGdCQUFnQjtBQUFBLFVBQ2hCLFVBQVU7QUFBQSxVQUNWLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sYUFBYTtBQUFBLElBQ2YsZ0JBQWdCO0FBQUEsSUFDaEIsU0FBUztBQUFBLElBQ1QsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixPQUFPO0FBQUEsVUFDSCxnQkFBZ0I7QUFBQSxVQUNoQixVQUFVO0FBQUEsVUFDVixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLEtBQUs7QUFBQSxVQUNELGdCQUFnQjtBQUFBLFVBQ2hCLFVBQVU7QUFBQSxVQUNWLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sZUFBZTtBQUFBLElBQ2pCLGdCQUFnQjtBQUFBLElBQ2hCLFNBQVM7QUFBQSxJQUNULE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsVUFBVTtBQUFBLFVBQ1YsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxZQUFZO0FBQUEsVUFDUixnQkFBZ0I7QUFBQSxVQUNoQixVQUFVO0FBQUEsVUFDVixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLG9CQUFvQjtBQUFBLFVBQ2hCLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxZQUNOLFdBQVc7QUFBQSxVQUNmO0FBQUEsUUFDSjtBQUFBLFFBQ0EscUJBQXFCO0FBQUEsVUFDakIsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sV0FBVztBQUFBLFVBQ2Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxxQkFBcUI7QUFBQSxJQUN2QixnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFFBQVE7QUFBQSxVQUNKLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxZQUNOLFdBQVc7QUFBQSxVQUNmO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sY0FBYztBQUFBLElBQ2hCLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsVUFBVTtBQUFBLFVBQ1YsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sZUFBZSxDQUFDLGFBQWEsUUFBUSxTQUFTLFNBQVM7QUFBQSxVQUMzRDtBQUFBLFFBQ0o7QUFBQSxRQUNBLDRCQUE0QjtBQUFBLFVBQ3hCLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxZQUNOLFdBQVc7QUFBQSxVQUNmO0FBQUEsUUFDSjtBQUFBLFFBQ0EsdUJBQXVCO0FBQUEsVUFDbkIsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sV0FBVztBQUFBLFVBQ2Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxvQkFBb0I7QUFBQSxVQUNoQixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsWUFDTixXQUFXO0FBQUEsVUFDZjtBQUFBLFFBQ0o7QUFBQSxRQUNBLDBCQUEwQjtBQUFBLFVBQ3RCLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxZQUNOLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxNQUFNLEVBQUU7QUFBQSxVQUNuQztBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLDZCQUE2QjtBQUFBLElBQy9CLGdCQUFnQjtBQUFBLElBQ2hCLFNBQVM7QUFBQSxJQUNULE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFlBQVk7QUFBQSxVQUNSLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFlBQVk7QUFBQSxVQUNSLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsZ0JBQWdCO0FBQUEsVUFDWixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLHdCQUF3QjtBQUFBLElBQzFCLGdCQUFnQjtBQUFBLElBQ2hCLFNBQVM7QUFBQSxJQUNULE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLHFCQUFxQjtBQUFBLElBQ3ZCLGdCQUFnQjtBQUFBLElBQ2hCLFNBQVM7QUFBQSxJQUNULE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsUUFBUTtBQUFBLFVBQ0osZ0JBQWdCO0FBQUEsVUFDaEIsVUFBVTtBQUFBLFVBQ1YsU0FBUztBQUFBLFVBQ1QsY0FBYztBQUFBLFVBQ2QsZ0JBQWdCO0FBQUEsVUFDaEIsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sU0FBUztBQUFBLGNBQ0wsTUFBTTtBQUFBLGdCQUNGLE1BQU07QUFBQSxnQkFDTixXQUFXO0FBQUEsY0FDZjtBQUFBLFlBQ0o7QUFBQSxVQUNKO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sYUFBYTtBQUFBLElBQ2YsZ0JBQWdCO0FBQUEsSUFDaEIsU0FBUztBQUFBLElBQ1QsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixVQUFVO0FBQUEsVUFDVixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxPQUFPO0FBQUEsVUFDSCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLDhCQUE4QjtBQUFBLElBQ2hDLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsU0FBUztBQUFBLFVBQ0wsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLHVDQUF1QztBQUFBLElBQ3pDLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSw4QkFBOEI7QUFBQSxJQUNoQyxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFNBQVM7QUFBQSxVQUNMLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSx1Q0FBdUM7QUFBQSxJQUN6QyxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sOEJBQThCO0FBQUEsSUFDaEMsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxTQUFTO0FBQUEsVUFDTCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSx1Q0FBdUM7QUFBQSxJQUN6QyxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sc0NBQXNDO0FBQUEsSUFDeEMsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxTQUFTO0FBQUEsVUFDTCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sK0NBQStDO0FBQUEsSUFDakQsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLHFDQUFxQztBQUFBLElBQ3ZDLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsU0FBUztBQUFBLFVBQ0wsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sOENBQThDO0FBQUEsSUFDaEQsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLCtCQUErQjtBQUFBLElBQ2pDLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsU0FBUztBQUFBLFVBQ0wsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFNBQVM7QUFBQSxVQUNMLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxZQUNOLGVBQWU7QUFBQSxjQUNYO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBLFlBQ0o7QUFBQSxVQUNKO0FBQUEsUUFDSjtBQUFBLFFBQ0EsYUFBYTtBQUFBLFVBQ1QsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sZUFBZTtBQUFBLGNBQ1g7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsWUFDSjtBQUFBLFVBQ0o7QUFBQSxRQUNKO0FBQUEsUUFDQSxnQ0FBZ0M7QUFBQSxVQUM1QixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sd0NBQXdDO0FBQUEsSUFDMUMsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLDRCQUE0QjtBQUFBLElBQzlCLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsYUFBYTtBQUFBLFVBQ1QsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFNBQVM7QUFBQSxVQUNMLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0scUNBQXFDO0FBQUEsSUFDdkMsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLDRCQUE0QjtBQUFBLElBQzlCLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsU0FBUztBQUFBLFVBQ0wsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0scUNBQXFDO0FBQUEsSUFDdkMsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLHlCQUF5QjtBQUFBLElBQzNCLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxjQUFjO0FBQUEsVUFDVixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFNBQVM7QUFBQSxVQUNMLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLGtDQUFrQztBQUFBLElBQ3BDLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxnQ0FBZ0M7QUFBQSxJQUNsQyxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFVBQVU7QUFBQSxVQUNOLGdCQUFnQjtBQUFBLFVBQ2hCLHdCQUF3QjtBQUFBLFVBQ3hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxZQUNOLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxTQUFTLEVBQUU7QUFBQSxVQUN0QztBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsY0FBYztBQUFBLFVBQ1YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxlQUFlO0FBQUEsVUFDWCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsWUFDTixlQUFlLENBQUMsWUFBWSxPQUFPO0FBQUEsVUFDdkM7QUFBQSxRQUNKO0FBQUEsUUFDQSxZQUFZO0FBQUEsVUFDUixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsWUFDTixlQUFlO0FBQUEsY0FDWDtBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxZQUNKO0FBQUEsVUFDSjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGFBQWE7QUFBQSxVQUNULGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxZQUNOLGVBQWUsQ0FBQyxVQUFVLFVBQVU7QUFBQSxVQUN4QztBQUFBLFFBQ0o7QUFBQSxRQUNBLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFNBQVM7QUFBQSxVQUNMLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxrQkFBa0I7QUFBQSxVQUNkLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxZQUNOLGVBQWUsQ0FBQyxhQUFhLE1BQU07QUFBQSxVQUN2QztBQUFBLFFBQ0o7QUFBQSxRQUNBLHVCQUF1QjtBQUFBLFVBQ25CLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsY0FBYztBQUFBLFVBQ1YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSx3QkFBd0I7QUFBQSxVQUNwQixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLDZCQUE2QjtBQUFBLFVBQ3pCLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EseUNBQXlDO0FBQUEsVUFDckMsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLHlDQUF5QztBQUFBLElBQzNDLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSx5QkFBeUI7QUFBQSxJQUMzQixnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFNBQVM7QUFBQSxVQUNMLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLGtDQUFrQztBQUFBLElBQ3BDLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSw4QkFBOEI7QUFBQSxJQUNoQyxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsY0FBYztBQUFBLFVBQ1YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxTQUFTO0FBQUEsVUFDTCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSx1Q0FBdUM7QUFBQSxJQUN6QyxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sa0NBQWtDO0FBQUEsSUFDcEMsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixrQkFBa0I7QUFBQSxVQUNkLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxZQUNOLGVBQWUsQ0FBQyxhQUFhLE1BQU07QUFBQSxVQUN2QztBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsY0FBYztBQUFBLFVBQ1YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxTQUFTO0FBQUEsVUFDTCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSwyQ0FBMkM7QUFBQSxJQUM3QyxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sa0NBQWtDO0FBQUEsSUFDcEMsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGNBQWM7QUFBQSxVQUNWLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsU0FBUztBQUFBLFVBQ0wsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sMkNBQTJDO0FBQUEsSUFDN0MsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLDBCQUEwQjtBQUFBLElBQzVCLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsU0FBUztBQUFBLFVBQ0wsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sbUNBQW1DO0FBQUEsSUFDckMsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLHlCQUF5QjtBQUFBLElBQzNCLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsU0FBUztBQUFBLFVBQ0wsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sa0NBQWtDO0FBQUEsSUFDcEMsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLDhCQUE4QjtBQUFBLElBQ2hDLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsYUFBYTtBQUFBLFVBQ1QsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFNBQVM7QUFBQSxVQUNMLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sdUNBQXVDO0FBQUEsSUFDekMsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLDhCQUE4QjtBQUFBLElBQ2hDLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsU0FBUztBQUFBLFVBQ0wsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLHVDQUF1QztBQUFBLElBQ3pDLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSwrQkFBK0I7QUFBQSxJQUNqQyxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsY0FBYztBQUFBLFVBQ1YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxTQUFTO0FBQUEsVUFDTCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFNBQVM7QUFBQSxVQUNMLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSx3Q0FBd0M7QUFBQSxJQUMxQyxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sK0JBQStCO0FBQUEsSUFDakMsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGNBQWM7QUFBQSxVQUNWLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsU0FBUztBQUFBLFVBQ0wsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLHdDQUF3QztBQUFBLElBQzFDLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSw2QkFBNkI7QUFBQSxJQUMvQixnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsY0FBYztBQUFBLFVBQ1YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxTQUFTO0FBQUEsVUFDTCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFNBQVM7QUFBQSxVQUNMLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxzQ0FBc0M7QUFBQSxJQUN4QyxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sNkJBQTZCO0FBQUEsSUFDL0IsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGNBQWM7QUFBQSxVQUNWLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxTQUFTO0FBQUEsVUFDTCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sc0NBQXNDO0FBQUEsSUFDeEMsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLDhCQUE4QjtBQUFBLElBQ2hDLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxjQUFjO0FBQUEsVUFDVixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFNBQVM7QUFBQSxVQUNMLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsU0FBUztBQUFBLFVBQ0wsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLHVDQUF1QztBQUFBLElBQ3pDLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxzQ0FBc0M7QUFBQSxJQUN4QyxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLGFBQWE7QUFBQSxVQUNULGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsU0FBUztBQUFBLFVBQ0wsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sK0NBQStDO0FBQUEsSUFDakQsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLDJDQUEyQztBQUFBLElBQzdDLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsYUFBYTtBQUFBLFVBQ1QsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxTQUFTO0FBQUEsVUFDTCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxvREFBb0Q7QUFBQSxJQUN0RCxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0saUNBQWlDO0FBQUEsSUFDbkMsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxTQUFTO0FBQUEsVUFDTCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsU0FBUztBQUFBLFVBQ0wsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sZUFBZTtBQUFBLGNBQ1g7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsWUFDSjtBQUFBLFVBQ0o7QUFBQSxRQUNKO0FBQUEsUUFDQSxhQUFhO0FBQUEsVUFDVCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsWUFDTixlQUFlO0FBQUEsY0FDWDtBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxZQUNKO0FBQUEsVUFDSjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGdDQUFnQztBQUFBLFVBQzVCLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sMENBQTBDO0FBQUEsSUFDNUMsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLHNCQUFzQjtBQUFBLElBQ3hCLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsY0FBYztBQUFBLFVBQ1YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFVBQVU7QUFBQSxVQUNOLGdCQUFnQjtBQUFBLFVBQ2hCLHdCQUF3QjtBQUFBLFVBQ3hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxZQUNOLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxTQUFTLEVBQUU7QUFBQSxVQUN0QztBQUFBLFFBQ0o7QUFBQSxRQUNBLDJCQUEyQjtBQUFBLFVBQ3ZCLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0Esd0JBQXdCO0FBQUEsVUFDcEIsZ0JBQWdCO0FBQUEsVUFDaEIsd0JBQXdCO0FBQUEsVUFDeEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFNBQVMsRUFBRTtBQUFBLFVBQ3RDO0FBQUEsUUFDSjtBQUFBLFFBQ0EsZUFBZTtBQUFBLFVBQ1gsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxhQUFhO0FBQUEsVUFDVCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGNBQWM7QUFBQSxVQUNWLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxZQUFZO0FBQUEsVUFDUixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxjQUFjO0FBQUEsVUFDVixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLG9CQUFvQjtBQUFBLFVBQ2hCLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLG9CQUFvQjtBQUFBLFVBQ2hCLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsVUFBVTtBQUFBLFVBQ04sZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sZUFBZSxDQUFDLGFBQWEsWUFBWSxZQUFZO0FBQUEsVUFDekQ7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsdUJBQXVCO0FBQUEsVUFDbkIsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxRQUFRO0FBQUEsVUFDSixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGNBQWM7QUFBQSxVQUNWLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsWUFBWTtBQUFBLFVBQ1IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxZQUFZO0FBQUEsVUFDUixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsWUFDTixlQUFlLENBQUMsV0FBVyxXQUFXLFdBQVcsUUFBUTtBQUFBLFVBQzdEO0FBQUEsUUFDSjtBQUFBLFFBQ0EsZUFBZTtBQUFBLFVBQ1gsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sZUFBZSxDQUFDLFlBQVksT0FBTztBQUFBLFVBQ3ZDO0FBQUEsUUFDSjtBQUFBLFFBQ0EsWUFBWTtBQUFBLFVBQ1IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sZUFBZTtBQUFBLGNBQ1g7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsWUFDSjtBQUFBLFVBQ0o7QUFBQSxRQUNKO0FBQUEsUUFDQSxhQUFhO0FBQUEsVUFDVCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsWUFDTixlQUFlLENBQUMsVUFBVSxVQUFVO0FBQUEsVUFDeEM7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxTQUFTO0FBQUEsVUFDTCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0Esa0JBQWtCO0FBQUEsVUFDZCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGNBQWM7QUFBQSxVQUNWLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSx5QkFBeUI7QUFBQSxVQUNyQixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLG1CQUFtQjtBQUFBLFVBQ2YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxxQkFBcUI7QUFBQSxVQUNqQixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxnQkFBZ0I7QUFBQSxVQUNaLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsVUFBVTtBQUFBLFVBQ04sZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxVQUFVO0FBQUEsVUFDTixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGNBQWM7QUFBQSxVQUNWLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsNkJBQTZCO0FBQUEsVUFDekIsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSx3QkFBd0I7QUFBQSxVQUNwQixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsWUFDTixlQUFlLENBQUMsV0FBVyxZQUFZLFFBQVE7QUFBQSxVQUNuRDtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxjQUFjO0FBQUEsVUFDVixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLCtCQUErQjtBQUFBLElBQ2pDLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSwyQkFBMkI7QUFBQSxJQUM3QixnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLGNBQWM7QUFBQSxVQUNWLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxVQUFVO0FBQUEsVUFDTixnQkFBZ0I7QUFBQSxVQUNoQix3QkFBd0I7QUFBQSxVQUN4QixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsWUFDTixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sU0FBUyxFQUFFO0FBQUEsVUFDdEM7QUFBQSxRQUNKO0FBQUEsUUFDQSwyQkFBMkI7QUFBQSxVQUN2QixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLHdCQUF3QjtBQUFBLFVBQ3BCLGdCQUFnQjtBQUFBLFVBQ2hCLHdCQUF3QjtBQUFBLFVBQ3hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxZQUNOLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxTQUFTLEVBQUU7QUFBQSxVQUN0QztBQUFBLFFBQ0o7QUFBQSxRQUNBLFVBQVU7QUFBQSxVQUNOLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxZQUNOLGVBQWUsQ0FBQyxhQUFhLFlBQVksWUFBWTtBQUFBLFVBQ3pEO0FBQUEsUUFDSjtBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLHVCQUF1QjtBQUFBLFVBQ25CLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsUUFBUTtBQUFBLFVBQ0osZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxjQUFjO0FBQUEsVUFDVixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFlBQVk7QUFBQSxVQUNSLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsWUFBWTtBQUFBLFVBQ1IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sZUFBZSxDQUFDLFdBQVcsV0FBVyxXQUFXLFFBQVE7QUFBQSxVQUM3RDtBQUFBLFFBQ0o7QUFBQSxRQUNBLG1CQUFtQjtBQUFBLFVBQ2YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxxQkFBcUI7QUFBQSxVQUNqQixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGVBQWU7QUFBQSxVQUNYLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxZQUNOLGVBQWUsQ0FBQyxZQUFZLE9BQU87QUFBQSxVQUN2QztBQUFBLFFBQ0o7QUFBQSxRQUNBLFlBQVk7QUFBQSxVQUNSLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxZQUNOLGVBQWU7QUFBQSxjQUNYO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBLFlBQ0o7QUFBQSxVQUNKO0FBQUEsUUFDSjtBQUFBLFFBQ0EsYUFBYTtBQUFBLFVBQ1QsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sZUFBZSxDQUFDLFVBQVUsVUFBVTtBQUFBLFVBQ3hDO0FBQUEsUUFDSjtBQUFBLFFBQ0EsZUFBZTtBQUFBLFVBQ1gsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxhQUFhO0FBQUEsVUFDVCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsWUFBWTtBQUFBLFVBQ1IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0Esb0JBQW9CO0FBQUEsVUFDaEIsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsY0FBYztBQUFBLFVBQ1YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxvQkFBb0I7QUFBQSxVQUNoQixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFNBQVM7QUFBQSxVQUNMLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxjQUFjO0FBQUEsVUFDVixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLHlCQUF5QjtBQUFBLFVBQ3JCLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsbUJBQW1CO0FBQUEsVUFDZixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLHFCQUFxQjtBQUFBLFVBQ2pCLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFlBQVk7QUFBQSxVQUNSLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0Esb0JBQW9CO0FBQUEsVUFDaEIsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxlQUFlO0FBQUEsVUFDWCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLHFCQUFxQjtBQUFBLFVBQ2pCLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxrQkFBa0I7QUFBQSxVQUNkLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsVUFBVTtBQUFBLFVBQ04sZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFVBQVU7QUFBQSxVQUNOLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsbUJBQW1CO0FBQUEsVUFDZixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsWUFDTixlQUFlLENBQUMsUUFBUSxVQUFVO0FBQUEsVUFDdEM7QUFBQSxRQUNKO0FBQUEsUUFDQSxjQUFjO0FBQUEsVUFDVixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLDZCQUE2QjtBQUFBLFVBQ3pCLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0Esd0JBQXdCO0FBQUEsVUFDcEIsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sZUFBZSxDQUFDLFdBQVcsWUFBWSxRQUFRO0FBQUEsVUFDbkQ7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sb0NBQW9DO0FBQUEsSUFDdEMsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLG9CQUFvQjtBQUFBLElBQ3RCLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsU0FBUztBQUFBLFVBQ0wsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sNkJBQTZCO0FBQUEsSUFDL0IsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLHNCQUFzQjtBQUFBLElBQ3hCLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsU0FBUztBQUFBLFVBQ0wsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sK0JBQStCO0FBQUEsSUFDakMsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLHVCQUF1QjtBQUFBLElBQ3pCLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxjQUFjO0FBQUEsVUFDVixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFNBQVM7QUFBQSxVQUNMLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxnQ0FBZ0M7QUFBQSxJQUNsQyxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sNEJBQTRCO0FBQUEsSUFDOUIsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGNBQWM7QUFBQSxVQUNWLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0Esb0JBQW9CO0FBQUEsVUFDaEIsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxTQUFTO0FBQUEsVUFDTCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxxQ0FBcUM7QUFBQSxJQUN2QyxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sbUNBQW1DO0FBQUEsSUFDckMsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxTQUFTO0FBQUEsVUFDTCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsMEJBQTBCO0FBQUEsVUFDdEIsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSx3QkFBd0I7QUFBQSxVQUNwQixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsWUFDTixlQUFlLENBQUMsV0FBVyxZQUFZLFFBQVE7QUFBQSxVQUNuRDtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLDRDQUE0QztBQUFBLElBQzlDLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxzQ0FBc0M7QUFBQSxJQUN4QyxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFNBQVM7QUFBQSxVQUNMLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSwrQ0FBK0M7QUFBQSxJQUNqRCxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sMEJBQTBCO0FBQUEsSUFDNUIsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxTQUFTO0FBQUEsVUFDTCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxtQ0FBbUM7QUFBQSxJQUNyQyxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0seUJBQXlCO0FBQUEsSUFDM0IsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGNBQWM7QUFBQSxVQUNWLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsU0FBUztBQUFBLFVBQ0wsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsbUJBQW1CO0FBQUEsVUFDZixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLHFCQUFxQjtBQUFBLFVBQ2pCLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sa0NBQWtDO0FBQUEsSUFDcEMsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLDBCQUEwQjtBQUFBLElBQzVCLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxjQUFjO0FBQUEsVUFDVixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFNBQVM7QUFBQSxVQUNMLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsU0FBUztBQUFBLFVBQ0wsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLG1DQUFtQztBQUFBLElBQ3JDLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSwwQkFBMEI7QUFBQSxJQUM1QixnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsY0FBYztBQUFBLFVBQ1YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxTQUFTO0FBQUEsVUFDTCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sbUNBQW1DO0FBQUEsSUFDckMsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLHdCQUF3QjtBQUFBLElBQzFCLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxjQUFjO0FBQUEsVUFDVixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFNBQVM7QUFBQSxVQUNMLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsU0FBUztBQUFBLFVBQ0wsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLGlDQUFpQztBQUFBLElBQ25DLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSx5QkFBeUI7QUFBQSxJQUMzQixnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsY0FBYztBQUFBLFVBQ1YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxTQUFTO0FBQUEsVUFDTCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFNBQVM7QUFBQSxVQUNMLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxrQ0FBa0M7QUFBQSxJQUNwQyxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sd0JBQXdCO0FBQUEsSUFDMUIsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGNBQWM7QUFBQSxVQUNWLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxTQUFTO0FBQUEsVUFDTCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0saUNBQWlDO0FBQUEsSUFDbkMsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLDRCQUE0QjtBQUFBLElBQzlCLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsVUFBVTtBQUFBLFVBQ04sZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGNBQWM7QUFBQSxVQUNWLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsU0FBUztBQUFBLFVBQ0wsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsbUJBQW1CO0FBQUEsVUFDZixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0scUNBQXFDO0FBQUEsSUFDdkMsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLDhCQUE4QjtBQUFBLElBQ2hDLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxjQUFjO0FBQUEsVUFDVixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFNBQVM7QUFBQSxVQUNMLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFFBQVE7QUFBQSxVQUNKLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsWUFBWTtBQUFBLFVBQ1IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sZUFBZSxDQUFDLFdBQVcsV0FBVyxXQUFXLFFBQVE7QUFBQSxVQUM3RDtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sdUNBQXVDO0FBQUEsSUFDekMsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLHlCQUF5QjtBQUFBLElBQzNCLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxjQUFjO0FBQUEsVUFDVixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFNBQVM7QUFBQSxVQUNMLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFFBQVE7QUFBQSxVQUNKLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsWUFBWTtBQUFBLFVBQ1IsY0FBYztBQUFBLFVBQ2QsWUFBWTtBQUFBLFVBQ1osZ0JBQWdCO0FBQUEsVUFDaEIsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxZQUFZO0FBQUEsVUFDUixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxrQ0FBa0M7QUFBQSxJQUNwQyxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sOEJBQThCO0FBQUEsSUFDaEMsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxTQUFTO0FBQUEsVUFDTCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSx1Q0FBdUM7QUFBQSxJQUN6QyxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0scUJBQXFCO0FBQUEsSUFDdkIsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxTQUFTO0FBQUEsVUFDTCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sOEJBQThCO0FBQUEsSUFDaEMsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLDRCQUE0QjtBQUFBLElBQzlCLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsU0FBUztBQUFBLFVBQ0wsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFNBQVM7QUFBQSxVQUNMLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxZQUNOLGVBQWU7QUFBQSxjQUNYO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBLFlBQ0o7QUFBQSxVQUNKO0FBQUEsUUFDSjtBQUFBLFFBQ0EsYUFBYTtBQUFBLFVBQ1QsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sZUFBZTtBQUFBLGNBQ1g7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsWUFDSjtBQUFBLFVBQ0o7QUFBQSxRQUNKO0FBQUEsUUFDQSxnQ0FBZ0M7QUFBQSxVQUM1QixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLHFDQUFxQztBQUFBLElBQ3ZDLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxtQkFBbUI7QUFBQSxJQUNyQixnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLGNBQWM7QUFBQSxVQUNWLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsVUFBVTtBQUFBLFVBQ04sZ0JBQWdCO0FBQUEsVUFDaEIsd0JBQXdCO0FBQUEsVUFDeEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFNBQVMsRUFBRTtBQUFBLFVBQ3RDO0FBQUEsUUFDSjtBQUFBLFFBQ0EsZUFBZTtBQUFBLFVBQ1gsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxhQUFhO0FBQUEsVUFDVCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGNBQWM7QUFBQSxVQUNWLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxZQUFZO0FBQUEsVUFDUixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxjQUFjO0FBQUEsVUFDVixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLG9CQUFvQjtBQUFBLFVBQ2hCLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLG9CQUFvQjtBQUFBLFVBQ2hCLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsVUFBVTtBQUFBLFVBQ04sZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sZUFBZSxDQUFDLGFBQWEsWUFBWSxZQUFZO0FBQUEsVUFDekQ7QUFBQSxRQUNKO0FBQUEsUUFDQSxvQkFBb0I7QUFBQSxVQUNoQixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLHVCQUF1QjtBQUFBLFVBQ25CLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsUUFBUTtBQUFBLFVBQ0osZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxjQUFjO0FBQUEsVUFDVixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFlBQVk7QUFBQSxVQUNSLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsWUFBWTtBQUFBLFVBQ1IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sZUFBZSxDQUFDLFdBQVcsV0FBVyxXQUFXLFFBQVE7QUFBQSxVQUM3RDtBQUFBLFFBQ0o7QUFBQSxRQUNBLGVBQWU7QUFBQSxVQUNYLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxZQUNOLGVBQWUsQ0FBQyxZQUFZLE9BQU87QUFBQSxVQUN2QztBQUFBLFFBQ0o7QUFBQSxRQUNBLFlBQVk7QUFBQSxVQUNSLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxZQUNOLGVBQWU7QUFBQSxjQUNYO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBLFlBQ0o7QUFBQSxVQUNKO0FBQUEsUUFDSjtBQUFBLFFBQ0EsYUFBYTtBQUFBLFVBQ1QsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFlBQ04sZUFBZSxDQUFDLFVBQVUsVUFBVTtBQUFBLFVBQ3hDO0FBQUEsUUFDSjtBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsU0FBUztBQUFBLFVBQ0wsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxjQUFjO0FBQUEsVUFDVixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EseUJBQXlCO0FBQUEsVUFDckIsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxtQkFBbUI7QUFBQSxVQUNmLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EscUJBQXFCO0FBQUEsVUFDakIsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsZ0JBQWdCO0FBQUEsVUFDWixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsY0FBYztBQUFBLFVBQ1YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSw0QkFBNEI7QUFBQSxJQUM5QixnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0scUJBQXFCO0FBQUEsSUFDdkIsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxTQUFTO0FBQUEsVUFDTCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSw4QkFBOEI7QUFBQSxJQUNoQyxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0scUJBQXFCO0FBQUEsSUFDdkIsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxTQUFTO0FBQUEsVUFDTCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSw4QkFBOEI7QUFBQSxJQUNoQyxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sd0JBQXdCO0FBQUEsSUFDMUIsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGNBQWM7QUFBQSxVQUNWLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsWUFBWTtBQUFBLFVBQ1IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxTQUFTO0FBQUEsVUFDTCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxtQkFBbUI7QUFBQSxVQUNmLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EscUJBQXFCO0FBQUEsVUFDakIsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxpQ0FBaUM7QUFBQSxJQUNuQyxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sNkJBQTZCO0FBQUEsSUFDL0IsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGNBQWM7QUFBQSxVQUNWLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsWUFBWTtBQUFBLFVBQ1IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0Esb0JBQW9CO0FBQUEsVUFDaEIsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxTQUFTO0FBQUEsVUFDTCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsbUJBQW1CO0FBQUEsVUFDZixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLHFCQUFxQjtBQUFBLFVBQ2pCLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sc0NBQXNDO0FBQUEsSUFDeEMsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLDRCQUE0QjtBQUFBLElBQzlCLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxjQUFjO0FBQUEsVUFDVixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFlBQVk7QUFBQSxVQUNSLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLG9CQUFvQjtBQUFBLFVBQ2hCLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsU0FBUztBQUFBLFVBQ0wsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0scUNBQXFDO0FBQUEsSUFDdkMsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLG9DQUFvQztBQUFBLElBQ3RDLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxjQUFjO0FBQUEsVUFDVixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFlBQVk7QUFBQSxVQUNSLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLG9CQUFvQjtBQUFBLFVBQ2hCLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxTQUFTO0FBQUEsVUFDTCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsbUJBQW1CO0FBQUEsVUFDZixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLHFCQUFxQjtBQUFBLFVBQ2pCLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sNkNBQTZDO0FBQUEsSUFDL0MsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLCtCQUErQjtBQUFBLElBQ2pDLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsY0FBYztBQUFBLFVBQ1YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLG1CQUFtQjtBQUFBLFVBQ2YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxTQUFTO0FBQUEsVUFDTCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSx3Q0FBd0M7QUFBQSxJQUMxQyxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sbUNBQW1DO0FBQUEsSUFDckMsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixjQUFjO0FBQUEsVUFDVixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsbUJBQW1CO0FBQUEsVUFDZixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFNBQVM7QUFBQSxVQUNMLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLDRDQUE0QztBQUFBLElBQzlDLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSx3QkFBd0I7QUFBQSxJQUMxQixnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsY0FBYztBQUFBLFVBQ1YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxvQkFBb0I7QUFBQSxVQUNoQixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFNBQVM7QUFBQSxVQUNMLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLGlDQUFpQztBQUFBLElBQ25DLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxzQ0FBc0M7QUFBQSxJQUN4QyxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsY0FBYztBQUFBLFVBQ1YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxvQkFBb0I7QUFBQSxVQUNoQixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFNBQVM7QUFBQSxVQUNMLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLCtDQUErQztBQUFBLElBQ2pELGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxpQ0FBaUM7QUFBQSxJQUNuQyxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsY0FBYztBQUFBLFVBQ1YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxTQUFTO0FBQUEsVUFDTCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsUUFBUTtBQUFBLFVBQ0osZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxZQUFZO0FBQUEsVUFDUixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsWUFDTixlQUFlLENBQUMsV0FBVyxXQUFXLFdBQVcsUUFBUTtBQUFBLFVBQzdEO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSwwQ0FBMEM7QUFBQSxJQUM1QyxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sMEJBQTBCO0FBQUEsSUFDNUIsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGNBQWM7QUFBQSxVQUNWLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsWUFBWTtBQUFBLFVBQ1IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxTQUFTO0FBQUEsVUFDTCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxtQkFBbUI7QUFBQSxVQUNmLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EscUJBQXFCO0FBQUEsVUFDakIsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxtQ0FBbUM7QUFBQSxJQUNyQyxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sK0JBQStCO0FBQUEsSUFDakMsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGNBQWM7QUFBQSxVQUNWLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsWUFBWTtBQUFBLFVBQ1IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsU0FBUztBQUFBLFVBQ0wsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGtCQUFrQjtBQUFBLFVBQ2QsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSx5QkFBeUI7QUFBQSxVQUNyQixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLG1CQUFtQjtBQUFBLFVBQ2YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxxQkFBcUI7QUFBQSxVQUNqQixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLHdDQUF3QztBQUFBLElBQzFDLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxzQ0FBc0M7QUFBQSxJQUN4QyxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsY0FBYztBQUFBLFVBQ1YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxZQUFZO0FBQUEsVUFDUixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFNBQVM7QUFBQSxVQUNMLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxrQkFBa0I7QUFBQSxVQUNkLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EseUJBQXlCO0FBQUEsVUFDckIsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxxQkFBcUI7QUFBQSxVQUNqQixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxtQkFBbUI7QUFBQSxVQUNmLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSwrQ0FBK0M7QUFBQSxJQUNqRCxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sd0JBQXdCO0FBQUEsSUFDMUIsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGNBQWM7QUFBQSxVQUNWLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsU0FBUztBQUFBLFVBQ0wsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFVBQVU7QUFBQSxVQUNOLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0saUNBQWlDO0FBQUEsSUFDbkMsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLHlCQUF5QjtBQUFBLElBQzNCLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxjQUFjO0FBQUEsVUFDVixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFlBQVk7QUFBQSxVQUNSLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsU0FBUztBQUFBLFVBQ0wsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsbUJBQW1CO0FBQUEsVUFDZixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLHFCQUFxQjtBQUFBLFVBQ2pCLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sa0NBQWtDO0FBQUEsSUFDcEMsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLGlDQUFpQztBQUFBLElBQ25DLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxjQUFjO0FBQUEsVUFDVixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFlBQVk7QUFBQSxVQUNSLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsU0FBUztBQUFBLFVBQ0wsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsbUJBQW1CO0FBQUEsVUFDZixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLHFCQUFxQjtBQUFBLFVBQ2pCLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sMENBQTBDO0FBQUEsSUFDNUMsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLDZCQUE2QjtBQUFBLElBQy9CLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsWUFBWTtBQUFBLFVBQ1IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxTQUFTO0FBQUEsVUFDTCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLG1CQUFtQjtBQUFBLFVBQ2YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxxQkFBcUI7QUFBQSxVQUNqQixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLHNDQUFzQztBQUFBLElBQ3hDLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxvQ0FBb0M7QUFBQSxJQUN0QyxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFlBQVk7QUFBQSxVQUNSLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFNBQVM7QUFBQSxVQUNMLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxtQkFBbUI7QUFBQSxVQUNmLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EscUJBQXFCO0FBQUEsVUFDakIsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSw2Q0FBNkM7QUFBQSxJQUMvQyxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxRQUNiLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sa0NBQWtDO0FBQUEsSUFDcEMsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGNBQWM7QUFBQSxVQUNWLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsWUFBWTtBQUFBLFVBQ1IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUI7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsU0FBUztBQUFBLFVBQ0wsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU07QUFBQSxVQUNGLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsbUJBQW1CO0FBQUEsVUFDZixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLHFCQUFxQjtBQUFBLFVBQ2pCLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsaUJBQWlCO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLE1BQU0sMkNBQTJDO0FBQUEsSUFDN0MsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsUUFDYixXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLCtCQUErQjtBQUFBLElBQ2pDLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsY0FBYztBQUFBLFVBQ1YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNO0FBQUEsVUFDRixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGFBQWE7QUFBQSxVQUNULGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsbUJBQW1CO0FBQUEsVUFDZixnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGlCQUFpQjtBQUFBLFVBQ2IsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFNBQVM7QUFBQSxVQUNMLGdCQUFnQjtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxZQUNGLE1BQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTTtBQUFBLFVBQ0YsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxnQkFBZ0I7QUFBQSxVQUNoQixTQUFTO0FBQUEsVUFDVCxNQUFNO0FBQUEsWUFDRixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFNLHdDQUF3QztBQUFBLElBQzFDLGdCQUFnQjtBQUFBLElBQ2hCLE1BQU07QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2IsV0FBVztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0YsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBRUEsTUFBSSwwQkFBdUIsT0FBTyxPQUFPO0FBQUEsSUFDckMsV0FBVztBQUFBLElBQ1g7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJ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SjtBQUFBLElBQ0Esa0JBQWtCO0FBQUEsRUFDdEI7QUFDQSxNQUFNLFVBQVU7QUFBQSxJQUNaLGVBQWU7QUFBQSxJQUNmLFFBQVE7QUFBQSxFQUNaO0FBQ0EsTUFBTSxRQUFRO0FBQUEsSUFDVixlQUFlO0FBQUEsSUFDZixRQUFRO0FBQUEsTUFDSixjQUFjO0FBQUEsTUFDZCxZQUFZO0FBQUEsTUFDWixnQkFBZ0I7QUFBQSxNQUNoQixNQUFNO0FBQUEsUUFDRixNQUFNO0FBQUEsTUFDVjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxXQUFXO0FBQUEsSUFDYixlQUFlO0FBQUEsSUFDZixRQUFRO0FBQUEsTUFDSixjQUFjO0FBQUEsTUFDZCxZQUFZO0FBQUEsTUFDWixnQkFBZ0I7QUFBQSxNQUNoQixNQUFNO0FBQUEsUUFDRixNQUFNO0FBQUEsTUFDVjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxPQUFPO0FBQUEsSUFDVCxlQUFlO0FBQUEsSUFDZixRQUFRO0FBQUEsTUFDSixnQkFBZ0I7QUFBQSxNQUNoQixVQUFVO0FBQUEsTUFDVixTQUFTO0FBQUEsTUFDVCxNQUFNO0FBQUEsUUFDRixNQUFNO0FBQUEsTUFDVjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxRQUFRO0FBQUEsSUFDVixlQUFlO0FBQUEsSUFDZixRQUFRO0FBQUEsTUFDSixjQUFjO0FBQUEsTUFDZCxZQUFZO0FBQUEsTUFDWixnQkFBZ0I7QUFBQSxNQUNoQixNQUFNO0FBQUEsUUFDRixNQUFNO0FBQUEsTUFDVjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSxnQkFBZ0I7QUFBQSxJQUNsQixlQUFlO0FBQUEsSUFDZixRQUFRO0FBQUEsTUFDSixnQkFBZ0I7QUFBQSxNQUNoQixVQUFVO0FBQUEsTUFDVixTQUFTO0FBQUEsTUFDVCxNQUFNO0FBQUEsUUFDRixNQUFNO0FBQUEsTUFDVjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBTSx1QkFBdUI7QUFBQSxJQUN6QixlQUFlO0FBQUEsSUFDZixRQUFR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QUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJ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LFFBQVEsSUFBSSxLQUFLLHFCQUFTLGdCQUFnQixDQUFDO0FBQy9DLE1BQUksaUJBQWlCLElBQUk7QUFFekIsd0JBQVUsZ0JBQWdCLElBQUksWUFBWSxDQUFDO0FBRTNDLG9CQUFNLHVCQUF1QjtBQUM3QixNQUFJLFVBQVUsTUFBTSxrQkFBa0IsT0FBTyxLQUFLLGVBQWUsT0FBTztBQUN4RSxvQkFBTSxZQUFZLE9BQU8sS0FBSyxPQUFPLEdBQUc7QUFFeEMsb0JBQU0scUJBQXFCO0FBQzNCLE1BQUksU0FBUyxhQUFhLEtBQUssT0FBTztBQUN0QyxvQkFBTSxXQUFXLFFBQVE7QUFFekI7QUFDQyxzQkFBTSxtQkFBbUI7QUFDekIsUUFBSSxhQUFrQixVQUFLLEtBQUssR0FBRyxlQUFlO0FBQ2xELElBQUcsaUJBQWMsWUFBWSxRQUFRLEVBQUUsVUFBVSxRQUFRLENBQUM7QUFDMUQsc0JBQU0scUJBQXFCLFlBQVk7QUFFdkMsc0JBQU0saUNBQWlDO0FBQ3ZDLFVBQU0sT0FBTyxNQUFNLGVBQWUsZUFBZSxHQUFHLGlCQUFpQixDQUFDLFVBQVUsR0FBRyxLQUFLLEVBQUUsZUFBZSxFQUFFLENBQUM7QUFDNUcsc0JBQU0sa0NBQWtDLElBQUk7QUFBQSxFQUM3QztBQUVBO0FBQ0Msc0JBQU0sd0JBQXdCO0FBQzlCLFFBQUksV0FBZ0IsVUFBSyxLQUFLLEdBQUcsY0FBYztBQUMvQyxJQUFHLGlCQUFjLFVBQVUsS0FBSyxFQUFFLFVBQVUsUUFBUSxDQUFDO0FBQ3JELHNCQUFNLDBCQUEwQixVQUFVO0FBRTFDLHNCQUFNLHNDQUFzQztBQUM1QyxVQUFNLE9BQU8sTUFBTSxlQUFlLGVBQWUsR0FBRyxnQkFBZ0IsQ0FBQyxRQUFRLEdBQUcsS0FBSyxFQUFFLGVBQWUsRUFBRSxDQUFDO0FBQ3pHLHNCQUFNLHVDQUF1QyxJQUFJO0FBQUEsRUFDbEQ7QUFFQSxvQkFBTSxpQkFBaUI7QUFDdkIsUUFBTSxpQkFBSyxVQUFVLENBQUMsV0FBVyxNQUFNLGdCQUFnQixNQUFNLEdBQUcsRUFBRSxJQUFJLENBQUM7QUFFdkUsb0JBQU0sa0JBQWtCLEtBQUs7QUFFN0IsTUFBSSxXQUFXLElBQUksUUFBUSxJQUFJLE1BQU0sUUFBUTtBQUM3QyxvQkFBTSwwQkFBMEIsYUFBYTtBQUU3QyxvQkFBTSwrQkFBK0I7QUFDckMsRUFBRyxVQUFPLEtBQUssRUFBRSxXQUFXLEtBQUssQ0FBQztBQUFBLEdBQ2hDOyIsCiAgImRlYnVnSWQiOiAiMTAzRjg1RTQ1MjA3RkZEQzY0NzU2RTIxNjQ3NTZFMjEiLAogICJuYW1lcyI6IFtdCn0= diff --git a/init/src/jobs/main.ts b/init/src/jobs/main.ts index ec7874a..b156194 100644 --- a/init/src/jobs/main.ts +++ b/init/src/jobs/main.ts @@ -1,9 +1,10 @@ import * as fs from 'node:fs' import * as path from 'node:path' -import { debug, getInput, saveState } from '@actions/core' +import { debug, getInput, saveState, setFailed } from '@actions/core' import { exec } from '@actions/exec' import { generateComposeFile, prometheusConfig, ydbConfig } from '../configs' import { context } from '@actions/github' +import { getPullRequestNumber } from '../help/pulls' (async function main() { debug(JSON.stringify(context, null, 4)) @@ -14,6 +15,17 @@ import { context } from '@actions/github' debug("Creating working directory...") fs.mkdirSync(cwd, { recursive: true }) + { + debug('Aquire pull request number...') + let prNumber = await getPullRequestNumber() + saveState("PRN", prNumber) + if (!prNumber) { + setFailed('Pull Request number could not be determined.'); + return + } + debug(`Pull request number: ${prNumber}`) + } + { debug("Creating ydb config...") let configPath = path.join(cwd, "ydb.yaml") diff --git a/init/src/jobs/post.ts b/init/src/jobs/post.ts index 24f7edb..dd88ec7 100644 --- a/init/src/jobs/post.ts +++ b/init/src/jobs/post.ts @@ -1,9 +1,8 @@ import * as fs from 'node:fs' import * as path from 'node:path' import { exec } from "@actions/exec" -import { debug, getInput, getState, saveState, setFailed } from "@actions/core" +import { debug, getInput, getState, saveState } from "@actions/core" import { DefaultArtifactClient } from '@actions/artifact' -import { getPullRequestNumber } from '../help/pulls' import { collectPrometheus } from '../metrics/prometheus' import { defaultMetrics } from '../metrics/default' import { renderReport } from '../report/default' @@ -11,6 +10,7 @@ import { renderReport } from '../report/default' (async function post() { let cwd = getState("CWD") let sdk = getInput("sdk_name", { required: true }) + let prn = getState("PRN") let end = new Date() let start = new Date(getState("YDB_START_TIME")) @@ -26,25 +26,21 @@ import { renderReport } from '../report/default' let report = renderReport(sdk, metrics) debug(`Report: ${report}`) - debug("Writing report...") - let reportPath = path.join(cwd, `report.md`) - fs.writeFileSync(reportPath, report, { encoding: "utf-8" }) - debug(`Report written to ${reportPath}`) - { + debug("Writing report...") + let reportPath = path.join(cwd, `${sdk}-report.md`) + fs.writeFileSync(reportPath, report, { encoding: "utf-8" }) + debug(`Report written to ${reportPath}`) + debug("Upload report as an artifact...") let { id } = await artifactClient.uploadArtifact(`${sdk}-report.md`, [reportPath], cwd, { retentionDays: 1 }) debug(`Report uploaded as an artifact ${id}`) } - debug('Aquire pull request number...') - let prNumber = await getPullRequestNumber() - debug(`Pull request number: ${prNumber}`) - - if (prNumber) { + { debug("Writing pull number...") - let pullPath = path.join(cwd, "pull.txt") - fs.writeFileSync(pullPath, prNumber.toFixed(0), { encoding: "utf-8" }) + let pullPath = path.join(cwd, `${sdk}-pull.txt`) + fs.writeFileSync(pullPath, prn, { encoding: "utf-8" }) debug(`Pull number written to ${pullPath}`) debug("Upload pull number as an artifact...") @@ -62,8 +58,4 @@ import { renderReport } from '../report/default' debug("Cleaning up temp directory...") fs.rmSync(cwd, { recursive: true }); - - if (!prNumber) { - setFailed('Pull Request number could not be determined.'); - } })() diff --git a/report/main.js b/report/main.js index 0bdb091..35cb00d 100644 --- a/report/main.js +++ b/report/main.js @@ -92941,7 +92941,10 @@ var require_github2 = __commonJS((exports) => { var import_artifact = __toESM(require_artifact2(), 1); var import_core = __toESM(require_core(), 1); var import_github = __toESM(require_github2(), 1); +import * as fs from "node:fs"; +import * as path from "node:path"; (async function main() { + let cwd = path.resolve(process.env["GITHUB_WORKSPACE"] || process.cwd()); import_core.debug(JSON.stringify(import_github.context, null, 4)); let artifactClient = new import_artifact.DefaultArtifactClient; let { artifacts } = await artifactClient.listArtifacts({ @@ -92952,8 +92955,42 @@ var import_github = __toESM(require_github2(), 1); repositoryName: import_github.context.repo.repo } }); - import_core.info(`Found ${artifacts.length} artifacts: ${JSON.stringify(artifacts, null, 4)}`); + import_core.debug(`Found ${artifacts.length} artifacts: ${JSON.stringify(artifacts, null, 4)}`); + let reports = {}; + let pulls = {}; + for (let artifact of artifacts) { + import_core.debug(`Downloading artifact ${artifact.id}...`); + let { downloadPath } = await artifactClient.downloadArtifact(artifact.id, { + path: cwd, + findBy: { + token: import_core.getInput("token", { required: true }), + workflowRunId: parseInt(import_core.getInput("run_id", { required: true })), + repositoryOwner: import_github.context.repo.owner, + repositoryName: import_github.context.repo.repo + } + }); + import_core.info(`Downloaded artifact ${artifact.id} to ${downloadPath}`); + if (artifact.name.endsWith("-report.md")) { + reports[artifact.name.slice(0, -"-report.md".length)] = path.join(cwd, artifact.name); + } + if (artifact.name.endsWith("-pull.txt")) { + pulls[artifact.name.slice(0, -"-pull.txt".length)] = path.join(cwd, artifact.name); + } + } + console.log(fs.readdirSync(cwd)); + for (let sdk of Object.keys(reports)) { + let pr = fs.readFileSync(pulls[sdk], { encoding: "utf-8" }); + let report = fs.readFileSync(reports[sdk], { encoding: "utf-8" }); + import_core.debug(`Creating report for ${sdk}...`); + let { data } = await import_github.getOctokit(import_core.getInput("token", { required: true })).rest.issues.createComment({ + issue_number: parseInt(pr.trim()), + owner: import_github.context.repo.owner, + repo: import_github.context.repo.repo, + body: report + }); + import_core.debug(`Report for ${sdk} created: ${data.html_url}`); + } })(); -//# debugId=D85E0B7A7F60C02064756E2164756E21 -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2NvcmUvbGliL3V0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9jb3JlL2xpYi9jb21tYW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9jb3JlL2xpYi9maWxlLWNvbW1hbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2h0dHAtY2xpZW50L2xpYi9wcm94eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdHVubmVsL2xpYi90dW5uZWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29yZS9zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvZXJyb3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvY29uc3RhbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi90aW1lcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9kZXBzL3N0cmVhbXNlYXJjaC9zYm1oLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZmFzdGlmeS9idXNib3kvZGVwcy9kaWNlci9saWIvUGFydFN0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGZhc3RpZnkvYnVzYm95L2xpYi91dGlscy9nZXRMaW1pdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGZhc3RpZnkvYnVzYm95L2RlcHMvZGljZXIvbGliL0hlYWRlclBhcnNlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGZhc3RpZnkvYnVzYm95L2RlcHMvZGljZXIvbGliL0RpY2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZmFzdGlmeS9idXNib3kvbGliL3V0aWxzL2RlY29kZVRleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9saWIvdXRpbHMvcGFyc2VQYXJhbXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9saWIvdXRpbHMvYmFzZW5hbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9saWIvdHlwZXMvbXVsdGlwYXJ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZmFzdGlmeS9idXNib3kvbGliL3V0aWxzL0RlY29kZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9saWIvdHlwZXMvdXJsZW5jb2RlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGZhc3RpZnkvYnVzYm95L2xpYi9tYWluLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL2NvbnN0YW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9mZXRjaC9nbG9iYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9mZXRjaC9zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL3dlYmlkbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9mZXRjaC9kYXRhVVJMLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL2ZpbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvZm9ybWRhdGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvYm9keS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb3JlL3JlcXVlc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9kaXNwYXRjaGVyLWJhc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29yZS9jb25uZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2xsaHR0cC91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9sbGh0dHAvY29uc3RhbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2hhbmRsZXIvUmVkaXJlY3RIYW5kbGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ludGVyY2VwdG9yL3JlZGlyZWN0SW50ZXJjZXB0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbGxodHRwL2xsaHR0cC13YXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2xsaHR0cC9sbGh0dHBfc2ltZC13YXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NsaWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9ub2RlL2ZpeGVkLXF1ZXVlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3Bvb2wtc3RhdHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvcG9vbC1iYXNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3Bvb2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYmFsYW5jZWQtcG9vbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb21wYXQvZGlzcGF0Y2hlci13ZWFrcmVmLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FnZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9yZWFkYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvYWJvcnQtc2lnbmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hcGktcmVxdWVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvYXBpLXN0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvYXBpLXBpcGVsaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hcGktdXBncmFkZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvYXBpLWNvbm5lY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYXBpL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1lcnJvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbW9jay9tb2NrLXN5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbW9jay9tb2NrLXV0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1pbnRlcmNlcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL21vY2stY2xpZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1wb29sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svcGx1cmFsaXplci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL3BlbmRpbmctaW50ZXJjZXB0b3JzLWZvcm1hdHRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL21vY2stYWdlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvcHJveHktYWdlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaGFuZGxlci9SZXRyeUhhbmRsZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZ2xvYmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2hhbmRsZXIvRGVjb3JhdG9ySGFuZGxlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9mZXRjaC9oZWFkZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL3Jlc3BvbnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL3JlcXVlc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmlsZWFwaS9zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZpbGVhcGkvcHJvZ3Jlc3NldmVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9maWxlYXBpL2VuY29kaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZpbGVhcGkvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9maWxlYXBpL2ZpbGVyZWFkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY2FjaGUvc3ltYm9scy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jYWNoZS91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NhY2hlL2NhY2hlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NhY2hlL2NhY2hlc3RvcmFnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb29raWVzL2NvbnN0YW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb29raWVzL3V0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29va2llcy9wYXJzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb29raWVzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYnNvY2tldC9jb25zdGFudHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2Vic29ja2V0L3N5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2Vic29ja2V0L2V2ZW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWJzb2NrZXQvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWJzb2NrZXQvY29ubmVjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWJzb2NrZXQvZnJhbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2Vic29ja2V0L3JlY2VpdmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYnNvY2tldC93ZWJzb2NrZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvaHR0cC1jbGllbnQvbGliL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9odHRwLWNsaWVudC9saWIvYXV0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9saWIvb2lkYy11dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9saWIvc3VtbWFyeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9saWIvcGF0aC11dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvaW8vbGliL2lvLXV0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2lvL2xpYi9pby5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvZXhlYy9saWIvdG9vbHJ1bm5lci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvZXhlYy9saWIvZXhlYy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9saWIvcGxhdGZvcm0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2NvcmUvbGliL2NvcmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2FydGlmYWN0L2xpYi9pbnRlcm5hbC9zaGFyZWQvY29uZmlnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9qc29uLXR5cGluZ3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lL2J1aWxkL2NvbW1vbmpzL2Jhc2U2NC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUvYnVpbGQvY29tbW9uanMvcHJvdG9idWZqcy11dGY4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9iaW5hcnktZm9ybWF0LWNvbnRyYWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9nb29nLXZhcmludC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUvYnVpbGQvY29tbW9uanMvcGItbG9uZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUvYnVpbGQvY29tbW9uanMvYmluYXJ5LXJlYWRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUvYnVpbGQvY29tbW9uanMvYXNzZXJ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9iaW5hcnktd3JpdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9qc29uLWZvcm1hdC1jb250cmFjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUvYnVpbGQvY29tbW9uanMvbWVzc2FnZS10eXBlLWNvbnRyYWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9sb3dlci1jYW1lbC1jYXNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9yZWZsZWN0aW9uLWluZm8uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lL2J1aWxkL2NvbW1vbmpzL29uZW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9yZWZsZWN0aW9uLXR5cGUtY2hlY2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lL2J1aWxkL2NvbW1vbmpzL3JlZmxlY3Rpb24tbG9uZy1jb252ZXJ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9yZWZsZWN0aW9uLWpzb24tcmVhZGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9yZWZsZWN0aW9uLWpzb24td3JpdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9yZWZsZWN0aW9uLXNjYWxhci1kZWZhdWx0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9yZWZsZWN0aW9uLWJpbmFyeS1yZWFkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lL2J1aWxkL2NvbW1vbmpzL3JlZmxlY3Rpb24tYmluYXJ5LXdyaXRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUvYnVpbGQvY29tbW9uanMvcmVmbGVjdGlvbi1jcmVhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lL2J1aWxkL2NvbW1vbmpzL3JlZmxlY3Rpb24tbWVyZ2UtcGFydGlhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUvYnVpbGQvY29tbW9uanMvcmVmbGVjdGlvbi1lcXVhbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lL2J1aWxkL2NvbW1vbmpzL21lc3NhZ2UtdHlwZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUvYnVpbGQvY29tbW9uanMvcmVmbGVjdGlvbi1jb250YWlucy1tZXNzYWdlLXR5cGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lL2J1aWxkL2NvbW1vbmpzL2VudW0tb2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvYXJ0aWZhY3QvbGliL2dlbmVyYXRlZC9nb29nbGUvcHJvdG9idWYvdGltZXN0YW1wLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9hcnRpZmFjdC9saWIvZ2VuZXJhdGVkL2dvb2dsZS9wcm90b2J1Zi93cmFwcGVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUtcnBjL2J1aWxkL2NvbW1vbmpzL3JlZmxlY3Rpb24taW5mby5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUtcnBjL2J1aWxkL2NvbW1vbmpzL3NlcnZpY2UtdHlwZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUtcnBjL2J1aWxkL2NvbW1vbmpzL3JwYy1lcnJvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUtcnBjL2J1aWxkL2NvbW1vbmpzL3JwYy1vcHRpb25zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS1ycGMvYnVpbGQvY29tbW9uanMvZGVmZXJyZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lLXJwYy9idWlsZC9jb21tb25qcy9ycGMtb3V0cHV0LXN0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUtcnBjL2J1aWxkL2NvbW1vbmpzL3VuYXJ5LWNhbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lLXJwYy9idWlsZC9jb21tb25qcy9zZXJ2ZXItc3RyZWFtaW5nLWNhbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lLXJwYy9idWlsZC9jb21tb25qcy9jbGllbnQtc3RyZWFtaW5nLWNhbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lLXJwYy9idWlsZC9jb21tb25qcy9kdXBsZXgtc3RyZWFtaW5nLWNhbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lLXJwYy9idWlsZC9jb21tb25qcy90ZXN0LXRyYW5zcG9ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUtcnBjL2J1aWxkL2NvbW1vbmpzL3JwYy1pbnRlcmNlcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUtcnBjL2J1aWxkL2NvbW1vbmpzL3NlcnZlci1jYWxsLWNvbnRleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lLXJwYy9idWlsZC9jb21tb25qcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvYXJ0aWZhY3QvbGliL2dlbmVyYXRlZC9yZXN1bHRzL2FwaS92MS9hcnRpZmFjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdHdpcnAtdHMvYnVpbGQvdHdpcnAvY29udGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdHdpcnAtdHMvYnVpbGQvdHdpcnAvaG9va3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3R3aXJwLXRzL2J1aWxkL3R3aXJwL2Vycm9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdHdpcnAtdHMvYnVpbGQvdHdpcnAvcmVxdWVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdHdpcnAtdHMvYnVpbGQvdHdpcnAvc2VydmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy90d2lycC10cy9idWlsZC90d2lycC9pbnRlcmNlcHRvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2RvdC1vYmplY3QvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3R3aXJwLXRzL2J1aWxkL3R3aXJwL2h0dHAuY2xpZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy90d2lycC10cy9idWlsZC90d2lycC9nYXRld2F5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy90d2lycC10cy9idWlsZC90d2lycC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvYXJ0aWZhY3QvbGliL2dlbmVyYXRlZC9yZXN1bHRzL2FwaS92MS9hcnRpZmFjdC50d2lycC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvYXJ0aWZhY3QvbGliL2dlbmVyYXRlZC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvYXJ0aWZhY3QvbGliL2ludGVybmFsL3VwbG9hZC9yZXRlbnRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2FydGlmYWN0L2xpYi9pbnRlcm5hbC91cGxvYWQvcGF0aC1hbmQtYXJ0aWZhY3QtbmFtZS12YWxpZGF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9hcnRpZmFjdC9saWIvaW50ZXJuYWwvc2hhcmVkL3VzZXItYWdlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2FydGlmYWN0L2xpYi9pbnRlcm5hbC9zaGFyZWQvZXJyb3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9hcnRpZmFjdC9saWIvaW50ZXJuYWwvc2hhcmVkL2FydGlmYWN0LXR3aXJwLWNsaWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvYXJ0aWZhY3QvbGliL2ludGVybmFsL3VwbG9hZC91cGxvYWQtemlwLXNwZWNpZmljYXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2p3dC1kZWNvZGUvYnVpbGQvand0LWRlY29kZS5janMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2FydGlmYWN0L2xpYi9pbnRlcm5hbC9zaGFyZWQvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3BpcGVsaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2xvZ2dlci9kaXN0L2NvbW1vbmpzL2xvZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2xvZ2dlci9kaXN0L2NvbW1vbmpzL2RlYnVnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvbG9nZ2VyL2Rpc3QvY29tbW9uanMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9sb2cuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9hYm9ydC1jb250cm9sbGVyL2Rpc3QvY29tbW9uanMvQWJvcnRFcnJvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2Fib3J0LWNvbnRyb2xsZXIvZGlzdC9jb21tb25qcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtdXRpbC9kaXN0L2NvbW1vbmpzL2NyZWF0ZUFib3J0YWJsZVByb21pc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXV0aWwvZGlzdC9jb21tb25qcy9yYW5kb20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXV0aWwvZGlzdC9jb21tb25qcy9kZWxheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtdXRpbC9kaXN0L2NvbW1vbmpzL2Fib3J0ZXJVdGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtdXRpbC9kaXN0L2NvbW1vbmpzL29iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtdXRpbC9kaXN0L2NvbW1vbmpzL2Vycm9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS11dGlsL2Rpc3QvY29tbW9uanMvc2hhMjU2LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS11dGlsL2Rpc3QvY29tbW9uanMvdHlwZUd1YXJkcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtdXRpbC9kaXN0L2NvbW1vbmpzL3V1aWRVdGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtdXRpbC9kaXN0L2NvbW1vbmpzL2NoZWNrRW52aXJvbm1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXV0aWwvZGlzdC9jb21tb25qcy9ieXRlc0VuY29kaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS11dGlsL2Rpc3QvY29tbW9uanMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy91dGlsL3Nhbml0aXplci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3BvbGljaWVzL2xvZ1BvbGljeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3BvbGljaWVzL3JlZGlyZWN0UG9saWN5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvdXRpbC91c2VyQWdlbnRQbGF0Zm9ybS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL2NvbnN0YW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3V0aWwvdXNlckFnZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvcG9saWNpZXMvdXNlckFnZW50UG9saWN5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvdXRpbC90eXBlR3VhcmRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvdXRpbC9maWxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvdXRpbC9jb25jYXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9wb2xpY2llcy9tdWx0aXBhcnRQb2xpY3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9wb2xpY2llcy9kZWNvbXByZXNzUmVzcG9uc2VQb2xpY3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy91dGlsL2hlbHBlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9yZXRyeVN0cmF0ZWdpZXMvdGhyb3R0bGluZ1JldHJ5U3RyYXRlZ3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9yZXRyeVN0cmF0ZWdpZXMvZXhwb25lbnRpYWxSZXRyeVN0cmF0ZWd5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvcG9saWNpZXMvcmV0cnlQb2xpY3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9wb2xpY2llcy9kZWZhdWx0UmV0cnlQb2xpY3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9odHRwSGVhZGVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3BvbGljaWVzL2Zvcm1EYXRhUG9saWN5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9tcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvZGVidWcvc3JjL2NvbW1vbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvZGVidWcvc3JjL2Jyb3dzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2RlYnVnL3NyYy9ub2RlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2FnZW50LWJhc2UvZGlzdC9oZWxwZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9hZ2VudC1iYXNlL2Rpc3QvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2h0dHBzLXByb3h5LWFnZW50L2Rpc3QvcGFyc2UtcHJveHktcmVzcG9uc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2h0dHBzLXByb3h5LWFnZW50L2Rpc3QvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2h0dHAtcHJveHktYWdlbnQvZGlzdC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3BvbGljaWVzL3Byb3h5UG9saWN5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvcG9saWNpZXMvc2V0Q2xpZW50UmVxdWVzdElkUG9saWN5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvcG9saWNpZXMvdGxzUG9saWN5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS10cmFjaW5nL2Rpc3QvY29tbW9uanMvdHJhY2luZ0NvbnRleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXRyYWNpbmcvZGlzdC9jb21tb25qcy9zdGF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtdHJhY2luZy9kaXN0L2NvbW1vbmpzL2luc3RydW1lbnRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtdHJhY2luZy9kaXN0L2NvbW1vbmpzL3RyYWNpbmdDbGllbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXRyYWNpbmcvZGlzdC9jb21tb25qcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3V0aWwvaW5zcGVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3Jlc3RFcnJvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3BvbGljaWVzL3RyYWNpbmdQb2xpY3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9jcmVhdGVQaXBlbGluZUZyb21PcHRpb25zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvbm9kZUh0dHBDbGllbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9kZWZhdWx0SHR0cENsaWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3BpcGVsaW5lUmVxdWVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3BvbGljaWVzL2V4cG9uZW50aWFsUmV0cnlQb2xpY3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9wb2xpY2llcy9zeXN0ZW1FcnJvclJldHJ5UG9saWN5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvcG9saWNpZXMvdGhyb3R0bGluZ1JldHJ5UG9saWN5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvdXRpbC90b2tlbkN5Y2xlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3BvbGljaWVzL2JlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9wb2xpY2llcy9uZEpzb25Qb2xpY3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9wb2xpY2llcy9hdXhpbGlhcnlBdXRoZW50aWNhdGlvbkhlYWRlclBvbGljeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1hdXRoL2Rpc3QvY29tbW9uanMvYXp1cmVLZXlDcmVkZW50aWFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1hdXRoL2Rpc3QvY29tbW9uanMva2V5Q3JlZGVudGlhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtYXV0aC9kaXN0L2NvbW1vbmpzL2F6dXJlTmFtZWRLZXlDcmVkZW50aWFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1hdXRoL2Rpc3QvY29tbW9uanMvYXp1cmVTQVNDcmVkZW50aWFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1hdXRoL2Rpc3QvY29tbW9uanMvdG9rZW5DcmVkZW50aWFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1hdXRoL2Rpc3QvY29tbW9uanMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLWh0dHAtY29tcGF0L2Rpc3QvY29tbW9uanMvcG9saWNpZXMvZGlzYWJsZUtlZXBBbGl2ZVBvbGljeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtY2xpZW50L2Rpc3QvY29tbW9uanMvYmFzZTY0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1jbGllbnQvZGlzdC9jb21tb25qcy9pbnRlcmZhY2VzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1jbGllbnQvZGlzdC9jb21tb25qcy91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtY2xpZW50L2Rpc3QvY29tbW9uanMvc2VyaWFsaXplci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtY2xpZW50L2Rpc3QvY29tbW9uanMvc3RhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLWNsaWVudC9kaXN0L2NvbW1vbmpzL29wZXJhdGlvbkhlbHBlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLWNsaWVudC9kaXN0L2NvbW1vbmpzL2Rlc2VyaWFsaXphdGlvblBvbGljeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtY2xpZW50L2Rpc3QvY29tbW9uanMvaW50ZXJmYWNlSGVscGVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtY2xpZW50L2Rpc3QvY29tbW9uanMvc2VyaWFsaXphdGlvblBvbGljeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtY2xpZW50L2Rpc3QvY29tbW9uanMvcGlwZWxpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLWNsaWVudC9kaXN0L2NvbW1vbmpzL2h0dHBDbGllbnRDYWNoZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtY2xpZW50L2Rpc3QvY29tbW9uanMvdXJsSGVscGVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtY2xpZW50L2Rpc3QvY29tbW9uanMvbG9nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1jbGllbnQvZGlzdC9jb21tb25qcy9zZXJ2aWNlQ2xpZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1jbGllbnQvZGlzdC9jb21tb25qcy9hdXRob3JpemVSZXF1ZXN0T25DbGFpbUNoYWxsZW5nZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtY2xpZW50L2Rpc3QvY29tbW9uanMvYXV0aG9yaXplUmVxdWVzdE9uVGVuYW50Q2hhbGxlbmdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1jbGllbnQvZGlzdC9jb21tb25qcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtaHR0cC1jb21wYXQvZGlzdC9jb21tb25qcy91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1odHRwLWNvbXBhdC9kaXN0L2NvbW1vbmpzL3Jlc3BvbnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1odHRwLWNvbXBhdC9kaXN0L2NvbW1vbmpzL2V4dGVuZGVkQ2xpZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1odHRwLWNvbXBhdC9kaXN0L2NvbW1vbmpzL3BvbGljaWVzL3JlcXVlc3RQb2xpY3lGYWN0b3J5UG9saWN5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1odHRwLWNvbXBhdC9kaXN0L2NvbW1vbmpzL2h0dHBDbGllbnRBZGFwdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1odHRwLWNvbXBhdC9kaXN0L2NvbW1vbmpzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mYXN0LXhtbC1wYXJzZXIvc3JjL3V0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Zhc3QteG1sLXBhcnNlci9zcmMvdmFsaWRhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mYXN0LXhtbC1wYXJzZXIvc3JjL3htbHBhcnNlci9PcHRpb25zQnVpbGRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvZmFzdC14bWwtcGFyc2VyL3NyYy94bWxwYXJzZXIveG1sTm9kZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvZmFzdC14bWwtcGFyc2VyL3NyYy94bWxwYXJzZXIvRG9jVHlwZVJlYWRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvc3RybnVtL3N0cm51bS5qcyIsICIuLi9ub2RlX21vZHVsZXMvZmFzdC14bWwtcGFyc2VyL3NyYy9pZ25vcmVBdHRyaWJ1dGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mYXN0LXhtbC1wYXJzZXIvc3JjL3htbHBhcnNlci9PcmRlcmVkT2JqUGFyc2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mYXN0LXhtbC1wYXJzZXIvc3JjL3htbHBhcnNlci9ub2RlMmpzb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Zhc3QteG1sLXBhcnNlci9zcmMveG1scGFyc2VyL1hNTFBhcnNlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvZmFzdC14bWwtcGFyc2VyL3NyYy94bWxidWlsZGVyL29yZGVyZWRKczJYbWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Zhc3QteG1sLXBhcnNlci9zcmMveG1sYnVpbGRlci9qc29uMnhtbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvZmFzdC14bWwtcGFyc2VyL3NyYy9meHAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXhtbC9kaXN0L2NvbW1vbmpzL3htbC5jb21tb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXhtbC9kaXN0L2NvbW1vbmpzL3htbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUteG1sL2Rpc3QvY29tbW9uanMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLWxyby9kaXN0L2NvbW1vbmpzL2xvZ2dlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtbHJvL2Rpc3QvY29tbW9uanMvcG9sbGVyL2NvbnN0YW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtbHJvL2Rpc3QvY29tbW9uanMvcG9sbGVyL29wZXJhdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtbHJvL2Rpc3QvY29tbW9uanMvaHR0cC9vcGVyYXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLWxyby9kaXN0L2NvbW1vbmpzL3BvbGxlci9wb2xsZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLWxyby9kaXN0L2NvbW1vbmpzL2h0dHAvcG9sbGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1scm8vZGlzdC9jb21tb25qcy9sZWdhY3kvbHJvRW5naW5lL29wZXJhdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtbHJvL2Rpc3QvY29tbW9uanMvbGVnYWN5L3BvbGxlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtbHJvL2Rpc3QvY29tbW9uanMvbGVnYWN5L2xyb0VuZ2luZS9scm9FbmdpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLWxyby9kaXN0L2NvbW1vbmpzL2xlZ2FjeS9scm9FbmdpbmUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLWxyby9kaXN0L2NvbW1vbmpzL2xlZ2FjeS9wb2xsT3BlcmF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1scm8vZGlzdC9jb21tb25qcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL3N0b3JhZ2UtYmxvYi9kaXN0L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9hcnRpZmFjdC9saWIvaW50ZXJuYWwvdXBsb2FkL2Jsb2ItdXBsb2FkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9taW5pbWF0Y2gvbGliL3BhdGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2JhbGFuY2VkLW1hdGNoL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9icmFjZS1leHBhbnNpb24vaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL21pbmltYXRjaC9taW5pbWF0Y2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWRkaXItZ2xvYi9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXN5bmMvZGlzdC9hc3luYy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZ3JhY2VmdWwtZnMvcG9seWZpbGxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9ncmFjZWZ1bC1mcy9sZWdhY3ktc3RyZWFtcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZ3JhY2VmdWwtZnMvY2xvbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2dyYWNlZnVsLWZzL2dyYWNlZnVsLWZzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9pcy1zdHJlYW0vaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Byb2Nlc3MtbmV4dGljay1hcmdzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9pc2FycmF5L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sYXp5c3RyZWFtL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbm9kZV9tb2R1bGVzL3NhZmUtYnVmZmVyL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jb3JlLXV0aWwtaXMvbGliL3V0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2luaGVyaXRzL2luaGVyaXRzX2Jyb3dzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2luaGVyaXRzL2luaGVyaXRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sYXp5c3RyZWFtL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvQnVmZmVyTGlzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbGF6eXN0cmVhbS9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL2Rlc3Ryb3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3V0aWwtZGVwcmVjYXRlL25vZGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xhenlzdHJlYW0vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV93cml0YWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbGF6eXN0cmVhbS9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX2R1cGxleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbGF6eXN0cmVhbS9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL25vZGVfbW9kdWxlcy9zdHJpbmdfZGVjb2Rlci9saWIvc3RyaW5nX2RlY29kZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xhenlzdHJlYW0vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV9yZWFkYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbGF6eXN0cmVhbS9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3RyYW5zZm9ybS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbGF6eXN0cmVhbS9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3Bhc3N0aHJvdWdoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sYXp5c3RyZWFtL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vcmVhZGFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xhenlzdHJlYW0vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9wYXNzdGhyb3VnaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbGF6eXN0cmVhbS9saWIvbGF6eXN0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbm9ybWFsaXplLXBhdGgvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pZGVudGl0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcHBseS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19vdmVyUmVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2NvbnN0YW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2ZyZWVHbG9iYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fcm9vdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19TeW1ib2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0UmF3VGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX29iamVjdFRvU3RyaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VHZXRUYWcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc09iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzRnVuY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29yZUpzRGF0YS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc01hc2tlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL190b1NvdXJjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNOYXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0VmFsdWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TmF0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2RlZmluZVByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VTZXRUb1N0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zaG9ydE91dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRUb1N0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlUmVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2VxLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNMZW5ndGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5TGlrZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzSXRlcmF0ZWVDYWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VUaW1lcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzT2JqZWN0TGlrZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNBcmd1bWVudHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FyZ3VtZW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9zdHViRmFsc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0J1ZmZlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNUeXBlZEFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VVbmFyeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19ub2RlVXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzVHlwZWRBcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUxpa2VLZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzUHJvdG90eXBlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25hdGl2ZUtleXNJbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlS2V5c0luLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gva2V5c0luLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZGVmYXVsdHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvb3Vycy9wcmltb3JkaWFscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZXZlbnQtdGFyZ2V0LXNoaW0vZGlzdC9ldmVudC10YXJnZXQtc2hpbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvYWJvcnQtY29udHJvbGxlci9kaXN0L2Fib3J0LWNvbnRyb2xsZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvb3Vycy91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL291cnMvZXJyb3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3ZhbGlkYXRvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Byb2Nlc3MvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL2VuZC1vZi1zdHJlYW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9kZXN0cm95LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvbGVnYWN5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvYWRkLWFib3J0LXNpZ25hbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL2J1ZmZlcl9saXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvc3RhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9mcm9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvcmVhZGFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy93cml0YWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL2R1cGxleGlmeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL2R1cGxleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL3RyYW5zZm9ybS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL3Bhc3N0aHJvdWdoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvcGlwZWxpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9jb21wb3NlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvb3BlcmF0b3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL3N0cmVhbS9wcm9taXNlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9zdHJlYW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvb3Vycy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheVB1c2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNGbGF0dGVuYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlRmxhdHRlbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2ZsYXR0ZW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbmF0aXZlQ3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hDbGVhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoRGVsZXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hHZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaEhhcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoU2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0hhc2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlQ2xlYXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzb2NJbmRleE9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZURlbGV0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19saXN0Q2FjaGVHZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlSGFzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZVNldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19MaXN0Q2FjaGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlQ2xlYXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNLZXlhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldE1hcERhdGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVEZWxldGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVHZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVIYXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVTZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTWFwQ2FjaGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0Q2FjaGVBZGQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0Q2FjaGVIYXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU2V0Q2FjaGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUZpbmRJbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNOYU4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RyaWN0SW5kZXhPZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSW5kZXhPZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUluY2x1ZGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5SW5jbHVkZXNXaXRoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5TWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NhY2hlSGFzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VEaWZmZXJlbmNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheUxpa2VPYmplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9kaWZmZXJlbmNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1NldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL25vb3AuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0VG9BcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVTZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVVuaXEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC91bmlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19vdmVyQXJnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFByb3RvdHlwZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzUGxhaW5PYmplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2dsb2Ivbm9kZV9tb2R1bGVzL21pbmltYXRjaC9kaXN0L2NvbW1vbmpzL2Fzc2VydC12YWxpZC1wYXR0ZXJuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9nbG9iL25vZGVfbW9kdWxlcy9taW5pbWF0Y2gvZGlzdC9jb21tb25qcy9icmFjZS1leHByZXNzaW9ucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZ2xvYi9ub2RlX21vZHVsZXMvbWluaW1hdGNoL2Rpc3QvY29tbW9uanMvdW5lc2NhcGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2dsb2Ivbm9kZV9tb2R1bGVzL21pbmltYXRjaC9kaXN0L2NvbW1vbmpzL2FzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvZ2xvYi9ub2RlX21vZHVsZXMvbWluaW1hdGNoL2Rpc3QvY29tbW9uanMvZXNjYXBlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9nbG9iL25vZGVfbW9kdWxlcy9taW5pbWF0Y2gvZGlzdC9jb21tb25qcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbHJ1LWNhY2hlL2Rpc3QvY29tbW9uanMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL21pbmlwYXNzL2Rpc3QvY29tbW9uanMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3BhdGgtc2N1cnJ5L2Rpc3QvY29tbW9uanMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2dsb2IvZGlzdC9jb21tb25qcy9wYXR0ZXJuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9nbG9iL2Rpc3QvY29tbW9uanMvaWdub3JlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9nbG9iL2Rpc3QvY29tbW9uanMvcHJvY2Vzc29yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9nbG9iL2Rpc3QvY29tbW9uanMvd2Fsa2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9nbG9iL2Rpc3QvY29tbW9uanMvZ2xvYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvZ2xvYi9kaXN0L2NvbW1vbmpzL2hhcy1tYWdpYy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZ2xvYi9kaXN0L2NvbW1vbmpzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9hcmNoaXZlci11dGlscy9maWxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9hcmNoaXZlci11dGlscy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXJjaGl2ZXIvbGliL2Vycm9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9hcmNoaXZlci9saWIvY29yZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvY29tcHJlc3MtY29tbW9ucy9saWIvYXJjaGl2ZXJzL2FyY2hpdmUtZW50cnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NvbXByZXNzLWNvbW1vbnMvbGliL2FyY2hpdmVycy96aXAvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY29tcHJlc3MtY29tbW9ucy9saWIvYXJjaGl2ZXJzL3ppcC9nZW5lcmFsLXB1cnBvc2UtYml0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jb21wcmVzcy1jb21tb25zL2xpYi9hcmNoaXZlcnMvemlwL3VuaXgtc3RhdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY29tcHJlc3MtY29tbW9ucy9saWIvYXJjaGl2ZXJzL3ppcC9jb25zdGFudHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NvbXByZXNzLWNvbW1vbnMvbGliL2FyY2hpdmVycy96aXAvemlwLWFyY2hpdmUtZW50cnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NvbXByZXNzLWNvbW1vbnMvbGliL3V0aWwvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NvbXByZXNzLWNvbW1vbnMvbGliL2FyY2hpdmVycy9hcmNoaXZlLW91dHB1dC1zdHJlYW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NyYy0zMi9jcmMzMi5qcyIsICIuLi9ub2RlX21vZHVsZXMvY3JjMzItc3RyZWFtL2xpYi9jcmMzMi1zdHJlYW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NyYzMyLXN0cmVhbS9saWIvZGVmbGF0ZS1jcmMzMi1zdHJlYW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NyYzMyLXN0cmVhbS9saWIvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NvbXByZXNzLWNvbW1vbnMvbGliL2FyY2hpdmVycy96aXAvemlwLWFyY2hpdmUtb3V0cHV0LXN0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvY29tcHJlc3MtY29tbW9ucy9saWIvY29tcHJlc3MtY29tbW9ucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvemlwLXN0cmVhbS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXJjaGl2ZXIvbGliL3BsdWdpbnMvemlwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9xdWV1ZS10aWNrL3F1ZXVlLW1pY3JvdGFzay5qcyIsICIuLi9ub2RlX21vZHVsZXMvcXVldWUtdGljay9wcm9jZXNzLW5leHQtdGljay5qcyIsICIuLi9ub2RlX21vZHVsZXMvZmFzdC1maWZvL2ZpeGVkLXNpemUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Zhc3QtZmlmby9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdGV4dC1kZWNvZGVyL2xpYi9wYXNzLXRocm91Z2gtZGVjb2Rlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdGV4dC1kZWNvZGVyL2xpYi91dGY4LWRlY29kZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3RleHQtZGVjb2Rlci9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvc3RyZWFteC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYjRhL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy90YXItc3RyZWFtL2hlYWRlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Rhci1zdHJlYW0vZXh0cmFjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdGFyLXN0cmVhbS9jb25zdGFudHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Rhci1zdHJlYW0vcGFjay5qcyIsICIuLi9ub2RlX21vZHVsZXMvdGFyLXN0cmVhbS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXJjaGl2ZXIvbGliL3BsdWdpbnMvdGFyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9idWZmZXItY3JjMzIvZGlzdC9pbmRleC5janMiLCAiLi4vbm9kZV9tb2R1bGVzL2FyY2hpdmVyL2xpYi9wbHVnaW5zL2pzb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2FyY2hpdmVyL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9hcnRpZmFjdC9saWIvaW50ZXJuYWwvdXBsb2FkL3ppcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvYXJ0aWZhY3QvbGliL2ludGVybmFsL3VwbG9hZC91cGxvYWQtYXJ0aWZhY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2FydGlmYWN0L25vZGVfbW9kdWxlcy9AYWN0aW9ucy9naXRodWIvbGliL2NvbnRleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2FydGlmYWN0L25vZGVfbW9kdWxlcy9AYWN0aW9ucy9naXRodWIvbGliL2ludGVybmFsL3V0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bml2ZXJzYWwtdXNlci1hZ2VudC9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2JlZm9yZS1hZnRlci1ob29rL2xpYi9yZWdpc3Rlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvYmVmb3JlLWFmdGVyLWhvb2svbGliL2FkZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYmVmb3JlLWFmdGVyLWhvb2svbGliL3JlbW92ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvYmVmb3JlLWFmdGVyLWhvb2svaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2lzLXBsYWluLW9iamVjdC9kaXN0L2lzLXBsYWluLW9iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQG9jdG9raXQvZW5kcG9pbnQvZGlzdC1ub2RlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy93ZWJpZGwtY29udmVyc2lvbnMvbGliL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy93aGF0d2ctdXJsL2xpYi91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdHI0Ni9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvd2hhdHdnLXVybC9saWIvdXJsLXN0YXRlLW1hY2hpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3doYXR3Zy11cmwvbGliL1VSTC1pbXBsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy93aGF0d2ctdXJsL2xpYi9VUkwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3doYXR3Zy11cmwvbGliL3B1YmxpYy1hcGkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL25vZGUtZmV0Y2gvbGliL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9kZXByZWNhdGlvbi9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3dyYXBweS93cmFwcHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL29uY2Uvb25jZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQG9jdG9raXQvcmVxdWVzdC9ub2RlX21vZHVsZXMvQG9jdG9raXQvcmVxdWVzdC1lcnJvci9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3JlcXVlc3QvZGlzdC1ub2RlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9ncmFwaHFsL2Rpc3Qtbm9kZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQG9jdG9raXQvYXV0aC10b2tlbi9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2NvcmUvZGlzdC1ub2RlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9hcnRpZmFjdC9ub2RlX21vZHVsZXMvQGFjdGlvbnMvZ2l0aHViL25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9wbHVnaW4tcmVzdC1lbmRwb2ludC1tZXRob2RzL2Rpc3Qtbm9kZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvYXJ0aWZhY3Qvbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2dpdGh1Yi9ub2RlX21vZHVsZXMvQG9jdG9raXQvcGx1Z2luLXBhZ2luYXRlLXJlc3QvZGlzdC1ub2RlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9hcnRpZmFjdC9ub2RlX21vZHVsZXMvQGFjdGlvbnMvZ2l0aHViL2xpYi91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvYXJ0aWZhY3Qvbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2dpdGh1Yi9saWIvZ2l0aHViLmpzIiwgIi4uL25vZGVfbW9kdWxlcy90cmF2ZXJzZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hhaW5zYXcvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2J1ZmZlcnMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2JpbmFyeS9saWIvdmFycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvYmluYXJ5L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bnppcC1zdHJlYW0vbGliL21hdGNoZXItc3RyZWFtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bnppcC1zdHJlYW0vbGliL2VudHJ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bnppcC1zdHJlYW0vbGliL3VuemlwLXN0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW56aXAtc3RyZWFtL2xpYi9wYXJzZXItc3RyZWFtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9ta2RpcnAvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuemlwLXN0cmVhbS9saWIvZXh0cmFjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW56aXAtc3RyZWFtL3VuemlwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9hcnRpZmFjdC9saWIvaW50ZXJuYWwvZG93bmxvYWQvZG93bmxvYWQtYXJ0aWZhY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2FydGlmYWN0L2xpYi9pbnRlcm5hbC9maW5kL3JldHJ5LW9wdGlvbnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3BsdWdpbi1yZXF1ZXN0LWxvZy9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2JvdHRsZW5lY2svbGlnaHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3BsdWdpbi1yZXRyeS9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2FydGlmYWN0L2xpYi9pbnRlcm5hbC9maW5kL2dldC1hcnRpZmFjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvYXJ0aWZhY3QvbGliL2ludGVybmFsL2RlbGV0ZS9kZWxldGUtYXJ0aWZhY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2FydGlmYWN0L2xpYi9pbnRlcm5hbC9maW5kL2xpc3QtYXJ0aWZhY3RzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9hcnRpZmFjdC9saWIvaW50ZXJuYWwvY2xpZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9hcnRpZmFjdC9saWIvaW50ZXJuYWwvc2hhcmVkL2ludGVyZmFjZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2FydGlmYWN0L2xpYi9hcnRpZmFjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvZ2l0aHViL2xpYi9jb250ZXh0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9naXRodWIvbGliL2ludGVybmFsL3V0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9naXRodWIvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2NvcmUvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3JlcXVlc3Qvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2VuZHBvaW50L2Rpc3Qtbm9kZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQG9jdG9raXQvcmVxdWVzdC1lcnJvci9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2dpdGh1Yi9ub2RlX21vZHVsZXMvQG9jdG9raXQvY29yZS9ub2RlX21vZHVsZXMvQG9jdG9raXQvcmVxdWVzdC9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2dpdGh1Yi9ub2RlX21vZHVsZXMvQG9jdG9raXQvY29yZS9ub2RlX21vZHVsZXMvQG9jdG9raXQvZ3JhcGhxbC9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2dpdGh1Yi9ub2RlX21vZHVsZXMvQG9jdG9raXQvY29yZS9ub2RlX21vZHVsZXMvQG9jdG9raXQvYXV0aC10b2tlbi9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2dpdGh1Yi9ub2RlX21vZHVsZXMvQG9jdG9raXQvY29yZS9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3BsdWdpbi1yZXN0LWVuZHBvaW50LW1ldGhvZHMvZGlzdC1ub2RlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9wbHVnaW4tcGFnaW5hdGUtcmVzdC9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2dpdGh1Yi9saWIvdXRpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2dpdGh1Yi9saWIvZ2l0aHViLmpzIiwgInNyYy9qb2JzL21haW4udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBXZSB1c2UgYW55IGFzIGEgdmFsaWQgaW5wdXQgdHlwZVxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50b0NvbW1hbmRQcm9wZXJ0aWVzID0gZXhwb3J0cy50b0NvbW1hbmRWYWx1ZSA9IHZvaWQgMDtcbi8qKlxuICogU2FuaXRpemVzIGFuIGlucHV0IGludG8gYSBzdHJpbmcgc28gaXQgY2FuIGJlIHBhc3NlZCBpbnRvIGlzc3VlQ29tbWFuZCBzYWZlbHlcbiAqIEBwYXJhbSBpbnB1dCBpbnB1dCB0byBzYW5pdGl6ZSBpbnRvIGEgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIHRvQ29tbWFuZFZhbHVlKGlucHV0KSB7XG4gICAgaWYgKGlucHV0ID09PSBudWxsIHx8IGlucHV0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnIHx8IGlucHV0IGluc3RhbmNlb2YgU3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBpbnB1dDtcbiAgICB9XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGlucHV0KTtcbn1cbmV4cG9ydHMudG9Db21tYW5kVmFsdWUgPSB0b0NvbW1hbmRWYWx1ZTtcbi8qKlxuICpcbiAqIEBwYXJhbSBhbm5vdGF0aW9uUHJvcGVydGllc1xuICogQHJldHVybnMgVGhlIGNvbW1hbmQgcHJvcGVydGllcyB0byBzZW5kIHdpdGggdGhlIGFjdHVhbCBhbm5vdGF0aW9uIGNvbW1hbmRcbiAqIFNlZSBJc3N1ZUNvbW1hbmRQcm9wZXJ0aWVzOiBodHRwczovL2dpdGh1Yi5jb20vYWN0aW9ucy9ydW5uZXIvYmxvYi9tYWluL3NyYy9SdW5uZXIuV29ya2VyL0FjdGlvbkNvbW1hbmRNYW5hZ2VyLmNzI0w2NDZcbiAqL1xuZnVuY3Rpb24gdG9Db21tYW5kUHJvcGVydGllcyhhbm5vdGF0aW9uUHJvcGVydGllcykge1xuICAgIGlmICghT2JqZWN0LmtleXMoYW5ub3RhdGlvblByb3BlcnRpZXMpLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHRpdGxlOiBhbm5vdGF0aW9uUHJvcGVydGllcy50aXRsZSxcbiAgICAgICAgZmlsZTogYW5ub3RhdGlvblByb3BlcnRpZXMuZmlsZSxcbiAgICAgICAgbGluZTogYW5ub3RhdGlvblByb3BlcnRpZXMuc3RhcnRMaW5lLFxuICAgICAgICBlbmRMaW5lOiBhbm5vdGF0aW9uUHJvcGVydGllcy5lbmRMaW5lLFxuICAgICAgICBjb2w6IGFubm90YXRpb25Qcm9wZXJ0aWVzLnN0YXJ0Q29sdW1uLFxuICAgICAgICBlbmRDb2x1bW46IGFubm90YXRpb25Qcm9wZXJ0aWVzLmVuZENvbHVtblxuICAgIH07XG59XG5leHBvcnRzLnRvQ29tbWFuZFByb3BlcnRpZXMgPSB0b0NvbW1hbmRQcm9wZXJ0aWVzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbHMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc3N1ZSA9IGV4cG9ydHMuaXNzdWVDb21tYW5kID0gdm9pZCAwO1xuY29uc3Qgb3MgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIm9zXCIpKTtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi91dGlsc1wiKTtcbi8qKlxuICogQ29tbWFuZHNcbiAqXG4gKiBDb21tYW5kIEZvcm1hdDpcbiAqICAgOjpuYW1lIGtleT12YWx1ZSxrZXk9dmFsdWU6Om1lc3NhZ2VcbiAqXG4gKiBFeGFtcGxlczpcbiAqICAgOjp3YXJuaW5nOjpUaGlzIGlzIHRoZSBtZXNzYWdlXG4gKiAgIDo6c2V0LWVudiBuYW1lPU1ZX1ZBUjo6c29tZSB2YWx1ZVxuICovXG5mdW5jdGlvbiBpc3N1ZUNvbW1hbmQoY29tbWFuZCwgcHJvcGVydGllcywgbWVzc2FnZSkge1xuICAgIGNvbnN0IGNtZCA9IG5ldyBDb21tYW5kKGNvbW1hbmQsIHByb3BlcnRpZXMsIG1lc3NhZ2UpO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGNtZC50b1N0cmluZygpICsgb3MuRU9MKTtcbn1cbmV4cG9ydHMuaXNzdWVDb21tYW5kID0gaXNzdWVDb21tYW5kO1xuZnVuY3Rpb24gaXNzdWUobmFtZSwgbWVzc2FnZSA9ICcnKSB7XG4gICAgaXNzdWVDb21tYW5kKG5hbWUsIHt9LCBtZXNzYWdlKTtcbn1cbmV4cG9ydHMuaXNzdWUgPSBpc3N1ZTtcbmNvbnN0IENNRF9TVFJJTkcgPSAnOjonO1xuY2xhc3MgQ29tbWFuZCB7XG4gICAgY29uc3RydWN0b3IoY29tbWFuZCwgcHJvcGVydGllcywgbWVzc2FnZSkge1xuICAgICAgICBpZiAoIWNvbW1hbmQpIHtcbiAgICAgICAgICAgIGNvbW1hbmQgPSAnbWlzc2luZy5jb21tYW5kJztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbW1hbmQgPSBjb21tYW5kO1xuICAgICAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIH1cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgbGV0IGNtZFN0ciA9IENNRF9TVFJJTkcgKyB0aGlzLmNvbW1hbmQ7XG4gICAgICAgIGlmICh0aGlzLnByb3BlcnRpZXMgJiYgT2JqZWN0LmtleXModGhpcy5wcm9wZXJ0aWVzKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjbWRTdHIgKz0gJyAnO1xuICAgICAgICAgICAgbGV0IGZpcnN0ID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMucHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWwgPSB0aGlzLnByb3BlcnRpZXNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZFN0ciArPSAnLCc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjbWRTdHIgKz0gYCR7a2V5fT0ke2VzY2FwZVByb3BlcnR5KHZhbCl9YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjbWRTdHIgKz0gYCR7Q01EX1NUUklOR30ke2VzY2FwZURhdGEodGhpcy5tZXNzYWdlKX1gO1xuICAgICAgICByZXR1cm4gY21kU3RyO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGVzY2FwZURhdGEocykge1xuICAgIHJldHVybiAoMCwgdXRpbHNfMS50b0NvbW1hbmRWYWx1ZSkocylcbiAgICAgICAgLnJlcGxhY2UoLyUvZywgJyUyNScpXG4gICAgICAgIC5yZXBsYWNlKC9cXHIvZywgJyUwRCcpXG4gICAgICAgIC5yZXBsYWNlKC9cXG4vZywgJyUwQScpO1xufVxuZnVuY3Rpb24gZXNjYXBlUHJvcGVydHkocykge1xuICAgIHJldHVybiAoMCwgdXRpbHNfMS50b0NvbW1hbmRWYWx1ZSkocylcbiAgICAgICAgLnJlcGxhY2UoLyUvZywgJyUyNScpXG4gICAgICAgIC5yZXBsYWNlKC9cXHIvZywgJyUwRCcpXG4gICAgICAgIC5yZXBsYWNlKC9cXG4vZywgJyUwQScpXG4gICAgICAgIC5yZXBsYWNlKC86L2csICclM0EnKVxuICAgICAgICAucmVwbGFjZSgvLC9nLCAnJTJDJyk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb21tYW5kLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBGb3IgaW50ZXJuYWwgdXNlLCBzdWJqZWN0IHRvIGNoYW5nZS5cbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5wcmVwYXJlS2V5VmFsdWVNZXNzYWdlID0gZXhwb3J0cy5pc3N1ZUZpbGVDb21tYW5kID0gdm9pZCAwO1xuLy8gV2UgdXNlIGFueSBhcyBhIHZhbGlkIGlucHV0IHR5cGVcbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmNvbnN0IGNyeXB0byA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiY3J5cHRvXCIpKTtcbmNvbnN0IGZzID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJmc1wiKSk7XG5jb25zdCBvcyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwib3NcIikpO1xuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoXCIuL3V0aWxzXCIpO1xuZnVuY3Rpb24gaXNzdWVGaWxlQ29tbWFuZChjb21tYW5kLCBtZXNzYWdlKSB7XG4gICAgY29uc3QgZmlsZVBhdGggPSBwcm9jZXNzLmVudltgR0lUSFVCXyR7Y29tbWFuZH1gXTtcbiAgICBpZiAoIWZpbGVQYXRoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGZpbmQgZW52aXJvbm1lbnQgdmFyaWFibGUgZm9yIGZpbGUgY29tbWFuZCAke2NvbW1hbmR9YCk7XG4gICAgfVxuICAgIGlmICghZnMuZXhpc3RzU3luYyhmaWxlUGF0aCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIGZpbGUgYXQgcGF0aDogJHtmaWxlUGF0aH1gKTtcbiAgICB9XG4gICAgZnMuYXBwZW5kRmlsZVN5bmMoZmlsZVBhdGgsIGAkeygwLCB1dGlsc18xLnRvQ29tbWFuZFZhbHVlKShtZXNzYWdlKX0ke29zLkVPTH1gLCB7XG4gICAgICAgIGVuY29kaW5nOiAndXRmOCdcbiAgICB9KTtcbn1cbmV4cG9ydHMuaXNzdWVGaWxlQ29tbWFuZCA9IGlzc3VlRmlsZUNvbW1hbmQ7XG5mdW5jdGlvbiBwcmVwYXJlS2V5VmFsdWVNZXNzYWdlKGtleSwgdmFsdWUpIHtcbiAgICBjb25zdCBkZWxpbWl0ZXIgPSBgZ2hhZGVsaW1pdGVyXyR7Y3J5cHRvLnJhbmRvbVVVSUQoKX1gO1xuICAgIGNvbnN0IGNvbnZlcnRlZFZhbHVlID0gKDAsIHV0aWxzXzEudG9Db21tYW5kVmFsdWUpKHZhbHVlKTtcbiAgICAvLyBUaGVzZSBzaG91bGQgcmVhbGlzdGljYWxseSBuZXZlciBoYXBwZW4sIGJ1dCBqdXN0IGluIGNhc2Ugc29tZW9uZSBmaW5kcyBhXG4gICAgLy8gd2F5IHRvIGV4cGxvaXQgdXVpZCBnZW5lcmF0aW9uIGxldCdzIG5vdCBhbGxvdyBrZXlzIG9yIHZhbHVlcyB0aGF0IGNvbnRhaW5cbiAgICAvLyB0aGUgZGVsaW1pdGVyLlxuICAgIGlmIChrZXkuaW5jbHVkZXMoZGVsaW1pdGVyKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgaW5wdXQ6IG5hbWUgc2hvdWxkIG5vdCBjb250YWluIHRoZSBkZWxpbWl0ZXIgXCIke2RlbGltaXRlcn1cImApO1xuICAgIH1cbiAgICBpZiAoY29udmVydGVkVmFsdWUuaW5jbHVkZXMoZGVsaW1pdGVyKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgaW5wdXQ6IHZhbHVlIHNob3VsZCBub3QgY29udGFpbiB0aGUgZGVsaW1pdGVyIFwiJHtkZWxpbWl0ZXJ9XCJgKTtcbiAgICB9XG4gICAgcmV0dXJuIGAke2tleX08PCR7ZGVsaW1pdGVyfSR7b3MuRU9MfSR7Y29udmVydGVkVmFsdWV9JHtvcy5FT0x9JHtkZWxpbWl0ZXJ9YDtcbn1cbmV4cG9ydHMucHJlcGFyZUtleVZhbHVlTWVzc2FnZSA9IHByZXBhcmVLZXlWYWx1ZU1lc3NhZ2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1maWxlLWNvbW1hbmQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY2hlY2tCeXBhc3MgPSBleHBvcnRzLmdldFByb3h5VXJsID0gdm9pZCAwO1xuZnVuY3Rpb24gZ2V0UHJveHlVcmwocmVxVXJsKSB7XG4gICAgY29uc3QgdXNpbmdTc2wgPSByZXFVcmwucHJvdG9jb2wgPT09ICdodHRwczonO1xuICAgIGlmIChjaGVja0J5cGFzcyhyZXFVcmwpKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IHByb3h5VmFyID0gKCgpID0+IHtcbiAgICAgICAgaWYgKHVzaW5nU3NsKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvY2Vzcy5lbnZbJ2h0dHBzX3Byb3h5J10gfHwgcHJvY2Vzcy5lbnZbJ0hUVFBTX1BST1hZJ107XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvY2Vzcy5lbnZbJ2h0dHBfcHJveHknXSB8fCBwcm9jZXNzLmVudlsnSFRUUF9QUk9YWSddO1xuICAgICAgICB9XG4gICAgfSkoKTtcbiAgICBpZiAocHJveHlWYXIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGVjb2RlZFVSTChwcm94eVZhcik7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgICAgICBpZiAoIXByb3h5VmFyLnN0YXJ0c1dpdGgoJ2h0dHA6Ly8nKSAmJiAhcHJveHlWYXIuc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERlY29kZWRVUkwoYGh0dHA6Ly8ke3Byb3h5VmFyfWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbn1cbmV4cG9ydHMuZ2V0UHJveHlVcmwgPSBnZXRQcm94eVVybDtcbmZ1bmN0aW9uIGNoZWNrQnlwYXNzKHJlcVVybCkge1xuICAgIGlmICghcmVxVXJsLmhvc3RuYW1lKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgcmVxSG9zdCA9IHJlcVVybC5ob3N0bmFtZTtcbiAgICBpZiAoaXNMb29wYmFja0FkZHJlc3MocmVxSG9zdCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IG5vUHJveHkgPSBwcm9jZXNzLmVudlsnbm9fcHJveHknXSB8fCBwcm9jZXNzLmVudlsnTk9fUFJPWFknXSB8fCAnJztcbiAgICBpZiAoIW5vUHJveHkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBEZXRlcm1pbmUgdGhlIHJlcXVlc3QgcG9ydFxuICAgIGxldCByZXFQb3J0O1xuICAgIGlmIChyZXFVcmwucG9ydCkge1xuICAgICAgICByZXFQb3J0ID0gTnVtYmVyKHJlcVVybC5wb3J0KTtcbiAgICB9XG4gICAgZWxzZSBpZiAocmVxVXJsLnByb3RvY29sID09PSAnaHR0cDonKSB7XG4gICAgICAgIHJlcVBvcnQgPSA4MDtcbiAgICB9XG4gICAgZWxzZSBpZiAocmVxVXJsLnByb3RvY29sID09PSAnaHR0cHM6Jykge1xuICAgICAgICByZXFQb3J0ID0gNDQzO1xuICAgIH1cbiAgICAvLyBGb3JtYXQgdGhlIHJlcXVlc3QgaG9zdG5hbWUgYW5kIGhvc3RuYW1lIHdpdGggcG9ydFxuICAgIGNvbnN0IHVwcGVyUmVxSG9zdHMgPSBbcmVxVXJsLmhvc3RuYW1lLnRvVXBwZXJDYXNlKCldO1xuICAgIGlmICh0eXBlb2YgcmVxUG9ydCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgdXBwZXJSZXFIb3N0cy5wdXNoKGAke3VwcGVyUmVxSG9zdHNbMF19OiR7cmVxUG9ydH1gKTtcbiAgICB9XG4gICAgLy8gQ29tcGFyZSByZXF1ZXN0IGhvc3QgYWdhaW5zdCBub3Byb3h5XG4gICAgZm9yIChjb25zdCB1cHBlck5vUHJveHlJdGVtIG9mIG5vUHJveHlcbiAgICAgICAgLnNwbGl0KCcsJylcbiAgICAgICAgLm1hcCh4ID0+IHgudHJpbSgpLnRvVXBwZXJDYXNlKCkpXG4gICAgICAgIC5maWx0ZXIoeCA9PiB4KSkge1xuICAgICAgICBpZiAodXBwZXJOb1Byb3h5SXRlbSA9PT0gJyonIHx8XG4gICAgICAgICAgICB1cHBlclJlcUhvc3RzLnNvbWUoeCA9PiB4ID09PSB1cHBlck5vUHJveHlJdGVtIHx8XG4gICAgICAgICAgICAgICAgeC5lbmRzV2l0aChgLiR7dXBwZXJOb1Byb3h5SXRlbX1gKSB8fFxuICAgICAgICAgICAgICAgICh1cHBlck5vUHJveHlJdGVtLnN0YXJ0c1dpdGgoJy4nKSAmJlxuICAgICAgICAgICAgICAgICAgICB4LmVuZHNXaXRoKGAke3VwcGVyTm9Qcm94eUl0ZW19YCkpKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZXhwb3J0cy5jaGVja0J5cGFzcyA9IGNoZWNrQnlwYXNzO1xuZnVuY3Rpb24gaXNMb29wYmFja0FkZHJlc3MoaG9zdCkge1xuICAgIGNvbnN0IGhvc3RMb3dlciA9IGhvc3QudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gKGhvc3RMb3dlciA9PT0gJ2xvY2FsaG9zdCcgfHxcbiAgICAgICAgaG9zdExvd2VyLnN0YXJ0c1dpdGgoJzEyNy4nKSB8fFxuICAgICAgICBob3N0TG93ZXIuc3RhcnRzV2l0aCgnWzo6MV0nKSB8fFxuICAgICAgICBob3N0TG93ZXIuc3RhcnRzV2l0aCgnWzA6MDowOjA6MDowOjA6MV0nKSk7XG59XG5jbGFzcyBEZWNvZGVkVVJMIGV4dGVuZHMgVVJMIHtcbiAgICBjb25zdHJ1Y3Rvcih1cmwsIGJhc2UpIHtcbiAgICAgICAgc3VwZXIodXJsLCBiYXNlKTtcbiAgICAgICAgdGhpcy5fZGVjb2RlZFVzZXJuYW1lID0gZGVjb2RlVVJJQ29tcG9uZW50KHN1cGVyLnVzZXJuYW1lKTtcbiAgICAgICAgdGhpcy5fZGVjb2RlZFBhc3N3b3JkID0gZGVjb2RlVVJJQ29tcG9uZW50KHN1cGVyLnBhc3N3b3JkKTtcbiAgICB9XG4gICAgZ2V0IHVzZXJuYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVjb2RlZFVzZXJuYW1lO1xuICAgIH1cbiAgICBnZXQgcGFzc3dvcmQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWNvZGVkUGFzc3dvcmQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cHJveHkuanMubWFwIiwKICAgICIndXNlIHN0cmljdCc7XG5cbnZhciBuZXQgPSByZXF1aXJlKCduZXQnKTtcbnZhciB0bHMgPSByZXF1aXJlKCd0bHMnKTtcbnZhciBodHRwID0gcmVxdWlyZSgnaHR0cCcpO1xudmFyIGh0dHBzID0gcmVxdWlyZSgnaHR0cHMnKTtcbnZhciBldmVudHMgPSByZXF1aXJlKCdldmVudHMnKTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKTtcbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuXG5cbmV4cG9ydHMuaHR0cE92ZXJIdHRwID0gaHR0cE92ZXJIdHRwO1xuZXhwb3J0cy5odHRwc092ZXJIdHRwID0gaHR0cHNPdmVySHR0cDtcbmV4cG9ydHMuaHR0cE92ZXJIdHRwcyA9IGh0dHBPdmVySHR0cHM7XG5leHBvcnRzLmh0dHBzT3Zlckh0dHBzID0gaHR0cHNPdmVySHR0cHM7XG5cblxuZnVuY3Rpb24gaHR0cE92ZXJIdHRwKG9wdGlvbnMpIHtcbiAgdmFyIGFnZW50ID0gbmV3IFR1bm5lbGluZ0FnZW50KG9wdGlvbnMpO1xuICBhZ2VudC5yZXF1ZXN0ID0gaHR0cC5yZXF1ZXN0O1xuICByZXR1cm4gYWdlbnQ7XG59XG5cbmZ1bmN0aW9uIGh0dHBzT3Zlckh0dHAob3B0aW9ucykge1xuICB2YXIgYWdlbnQgPSBuZXcgVHVubmVsaW5nQWdlbnQob3B0aW9ucyk7XG4gIGFnZW50LnJlcXVlc3QgPSBodHRwLnJlcXVlc3Q7XG4gIGFnZW50LmNyZWF0ZVNvY2tldCA9IGNyZWF0ZVNlY3VyZVNvY2tldDtcbiAgYWdlbnQuZGVmYXVsdFBvcnQgPSA0NDM7XG4gIHJldHVybiBhZ2VudDtcbn1cblxuZnVuY3Rpb24gaHR0cE92ZXJIdHRwcyhvcHRpb25zKSB7XG4gIHZhciBhZ2VudCA9IG5ldyBUdW5uZWxpbmdBZ2VudChvcHRpb25zKTtcbiAgYWdlbnQucmVxdWVzdCA9IGh0dHBzLnJlcXVlc3Q7XG4gIHJldHVybiBhZ2VudDtcbn1cblxuZnVuY3Rpb24gaHR0cHNPdmVySHR0cHMob3B0aW9ucykge1xuICB2YXIgYWdlbnQgPSBuZXcgVHVubmVsaW5nQWdlbnQob3B0aW9ucyk7XG4gIGFnZW50LnJlcXVlc3QgPSBodHRwcy5yZXF1ZXN0O1xuICBhZ2VudC5jcmVhdGVTb2NrZXQgPSBjcmVhdGVTZWN1cmVTb2NrZXQ7XG4gIGFnZW50LmRlZmF1bHRQb3J0ID0gNDQzO1xuICByZXR1cm4gYWdlbnQ7XG59XG5cblxuZnVuY3Rpb24gVHVubmVsaW5nQWdlbnQob3B0aW9ucykge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHNlbGYub3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIHNlbGYucHJveHlPcHRpb25zID0gc2VsZi5vcHRpb25zLnByb3h5IHx8IHt9O1xuICBzZWxmLm1heFNvY2tldHMgPSBzZWxmLm9wdGlvbnMubWF4U29ja2V0cyB8fCBodHRwLkFnZW50LmRlZmF1bHRNYXhTb2NrZXRzO1xuICBzZWxmLnJlcXVlc3RzID0gW107XG4gIHNlbGYuc29ja2V0cyA9IFtdO1xuXG4gIHNlbGYub24oJ2ZyZWUnLCBmdW5jdGlvbiBvbkZyZWUoc29ja2V0LCBob3N0LCBwb3J0LCBsb2NhbEFkZHJlc3MpIHtcbiAgICB2YXIgb3B0aW9ucyA9IHRvT3B0aW9ucyhob3N0LCBwb3J0LCBsb2NhbEFkZHJlc3MpO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBzZWxmLnJlcXVlc3RzLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICB2YXIgcGVuZGluZyA9IHNlbGYucmVxdWVzdHNbaV07XG4gICAgICBpZiAocGVuZGluZy5ob3N0ID09PSBvcHRpb25zLmhvc3QgJiYgcGVuZGluZy5wb3J0ID09PSBvcHRpb25zLnBvcnQpIHtcbiAgICAgICAgLy8gRGV0ZWN0IHRoZSByZXF1ZXN0IHRvIGNvbm5lY3Qgc2FtZSBvcmlnaW4gc2VydmVyLFxuICAgICAgICAvLyByZXVzZSB0aGUgY29ubmVjdGlvbi5cbiAgICAgICAgc2VsZi5yZXF1ZXN0cy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIHBlbmRpbmcucmVxdWVzdC5vblNvY2tldChzb2NrZXQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIHNvY2tldC5kZXN0cm95KCk7XG4gICAgc2VsZi5yZW1vdmVTb2NrZXQoc29ja2V0KTtcbiAgfSk7XG59XG51dGlsLmluaGVyaXRzKFR1bm5lbGluZ0FnZW50LCBldmVudHMuRXZlbnRFbWl0dGVyKTtcblxuVHVubmVsaW5nQWdlbnQucHJvdG90eXBlLmFkZFJlcXVlc3QgPSBmdW5jdGlvbiBhZGRSZXF1ZXN0KHJlcSwgaG9zdCwgcG9ydCwgbG9jYWxBZGRyZXNzKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIG9wdGlvbnMgPSBtZXJnZU9wdGlvbnMoe3JlcXVlc3Q6IHJlcX0sIHNlbGYub3B0aW9ucywgdG9PcHRpb25zKGhvc3QsIHBvcnQsIGxvY2FsQWRkcmVzcykpO1xuXG4gIGlmIChzZWxmLnNvY2tldHMubGVuZ3RoID49IHRoaXMubWF4U29ja2V0cykge1xuICAgIC8vIFdlIGFyZSBvdmVyIGxpbWl0IHNvIHdlJ2xsIGFkZCBpdCB0byB0aGUgcXVldWUuXG4gICAgc2VsZi5yZXF1ZXN0cy5wdXNoKG9wdGlvbnMpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIElmIHdlIGFyZSB1bmRlciBtYXhTb2NrZXRzIGNyZWF0ZSBhIG5ldyBvbmUuXG4gIHNlbGYuY3JlYXRlU29ja2V0KG9wdGlvbnMsIGZ1bmN0aW9uKHNvY2tldCkge1xuICAgIHNvY2tldC5vbignZnJlZScsIG9uRnJlZSk7XG4gICAgc29ja2V0Lm9uKCdjbG9zZScsIG9uQ2xvc2VPclJlbW92ZSk7XG4gICAgc29ja2V0Lm9uKCdhZ2VudFJlbW92ZScsIG9uQ2xvc2VPclJlbW92ZSk7XG4gICAgcmVxLm9uU29ja2V0KHNvY2tldCk7XG5cbiAgICBmdW5jdGlvbiBvbkZyZWUoKSB7XG4gICAgICBzZWxmLmVtaXQoJ2ZyZWUnLCBzb2NrZXQsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9uQ2xvc2VPclJlbW92ZShlcnIpIHtcbiAgICAgIHNlbGYucmVtb3ZlU29ja2V0KHNvY2tldCk7XG4gICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ2ZyZWUnLCBvbkZyZWUpO1xuICAgICAgc29ja2V0LnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uQ2xvc2VPclJlbW92ZSk7XG4gICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ2FnZW50UmVtb3ZlJywgb25DbG9zZU9yUmVtb3ZlKTtcbiAgICB9XG4gIH0pO1xufTtcblxuVHVubmVsaW5nQWdlbnQucHJvdG90eXBlLmNyZWF0ZVNvY2tldCA9IGZ1bmN0aW9uIGNyZWF0ZVNvY2tldChvcHRpb25zLCBjYikge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciBwbGFjZWhvbGRlciA9IHt9O1xuICBzZWxmLnNvY2tldHMucHVzaChwbGFjZWhvbGRlcik7XG5cbiAgdmFyIGNvbm5lY3RPcHRpb25zID0gbWVyZ2VPcHRpb25zKHt9LCBzZWxmLnByb3h5T3B0aW9ucywge1xuICAgIG1ldGhvZDogJ0NPTk5FQ1QnLFxuICAgIHBhdGg6IG9wdGlvbnMuaG9zdCArICc6JyArIG9wdGlvbnMucG9ydCxcbiAgICBhZ2VudDogZmFsc2UsXG4gICAgaGVhZGVyczoge1xuICAgICAgaG9zdDogb3B0aW9ucy5ob3N0ICsgJzonICsgb3B0aW9ucy5wb3J0XG4gICAgfVxuICB9KTtcbiAgaWYgKG9wdGlvbnMubG9jYWxBZGRyZXNzKSB7XG4gICAgY29ubmVjdE9wdGlvbnMubG9jYWxBZGRyZXNzID0gb3B0aW9ucy5sb2NhbEFkZHJlc3M7XG4gIH1cbiAgaWYgKGNvbm5lY3RPcHRpb25zLnByb3h5QXV0aCkge1xuICAgIGNvbm5lY3RPcHRpb25zLmhlYWRlcnMgPSBjb25uZWN0T3B0aW9ucy5oZWFkZXJzIHx8IHt9O1xuICAgIGNvbm5lY3RPcHRpb25zLmhlYWRlcnNbJ1Byb3h5LUF1dGhvcml6YXRpb24nXSA9ICdCYXNpYyAnICtcbiAgICAgICAgbmV3IEJ1ZmZlcihjb25uZWN0T3B0aW9ucy5wcm94eUF1dGgpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgfVxuXG4gIGRlYnVnKCdtYWtpbmcgQ09OTkVDVCByZXF1ZXN0Jyk7XG4gIHZhciBjb25uZWN0UmVxID0gc2VsZi5yZXF1ZXN0KGNvbm5lY3RPcHRpb25zKTtcbiAgY29ubmVjdFJlcS51c2VDaHVua2VkRW5jb2RpbmdCeURlZmF1bHQgPSBmYWxzZTsgLy8gZm9yIHYwLjZcbiAgY29ubmVjdFJlcS5vbmNlKCdyZXNwb25zZScsIG9uUmVzcG9uc2UpOyAvLyBmb3IgdjAuNlxuICBjb25uZWN0UmVxLm9uY2UoJ3VwZ3JhZGUnLCBvblVwZ3JhZGUpOyAgIC8vIGZvciB2MC42XG4gIGNvbm5lY3RSZXEub25jZSgnY29ubmVjdCcsIG9uQ29ubmVjdCk7ICAgLy8gZm9yIHYwLjcgb3IgbGF0ZXJcbiAgY29ubmVjdFJlcS5vbmNlKCdlcnJvcicsIG9uRXJyb3IpO1xuICBjb25uZWN0UmVxLmVuZCgpO1xuXG4gIGZ1bmN0aW9uIG9uUmVzcG9uc2UocmVzKSB7XG4gICAgLy8gVmVyeSBoYWNreS4gVGhpcyBpcyBuZWNlc3NhcnkgdG8gYXZvaWQgaHR0cC1wYXJzZXIgbGVha3MuXG4gICAgcmVzLnVwZ3JhZGUgPSB0cnVlO1xuICB9XG5cbiAgZnVuY3Rpb24gb25VcGdyYWRlKHJlcywgc29ja2V0LCBoZWFkKSB7XG4gICAgLy8gSGFja3kuXG4gICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbigpIHtcbiAgICAgIG9uQ29ubmVjdChyZXMsIHNvY2tldCwgaGVhZCk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBvbkNvbm5lY3QocmVzLCBzb2NrZXQsIGhlYWQpIHtcbiAgICBjb25uZWN0UmVxLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgIHNvY2tldC5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcblxuICAgIGlmIChyZXMuc3RhdHVzQ29kZSAhPT0gMjAwKSB7XG4gICAgICBkZWJ1ZygndHVubmVsaW5nIHNvY2tldCBjb3VsZCBub3QgYmUgZXN0YWJsaXNoZWQsIHN0YXR1c0NvZGU9JWQnLFxuICAgICAgICByZXMuc3RhdHVzQ29kZSk7XG4gICAgICBzb2NrZXQuZGVzdHJveSgpO1xuICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKCd0dW5uZWxpbmcgc29ja2V0IGNvdWxkIG5vdCBiZSBlc3RhYmxpc2hlZCwgJyArXG4gICAgICAgICdzdGF0dXNDb2RlPScgKyByZXMuc3RhdHVzQ29kZSk7XG4gICAgICBlcnJvci5jb2RlID0gJ0VDT05OUkVTRVQnO1xuICAgICAgb3B0aW9ucy5yZXF1ZXN0LmVtaXQoJ2Vycm9yJywgZXJyb3IpO1xuICAgICAgc2VsZi5yZW1vdmVTb2NrZXQocGxhY2Vob2xkZXIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaGVhZC5sZW5ndGggPiAwKSB7XG4gICAgICBkZWJ1ZygnZ290IGlsbGVnYWwgcmVzcG9uc2UgYm9keSBmcm9tIHByb3h5Jyk7XG4gICAgICBzb2NrZXQuZGVzdHJveSgpO1xuICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKCdnb3QgaWxsZWdhbCByZXNwb25zZSBib2R5IGZyb20gcHJveHknKTtcbiAgICAgIGVycm9yLmNvZGUgPSAnRUNPTk5SRVNFVCc7XG4gICAgICBvcHRpb25zLnJlcXVlc3QuZW1pdCgnZXJyb3InLCBlcnJvcik7XG4gICAgICBzZWxmLnJlbW92ZVNvY2tldChwbGFjZWhvbGRlcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGRlYnVnKCd0dW5uZWxpbmcgY29ubmVjdGlvbiBoYXMgZXN0YWJsaXNoZWQnKTtcbiAgICBzZWxmLnNvY2tldHNbc2VsZi5zb2NrZXRzLmluZGV4T2YocGxhY2Vob2xkZXIpXSA9IHNvY2tldDtcbiAgICByZXR1cm4gY2Ioc29ja2V0KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uRXJyb3IoY2F1c2UpIHtcbiAgICBjb25uZWN0UmVxLnJlbW92ZUFsbExpc3RlbmVycygpO1xuXG4gICAgZGVidWcoJ3R1bm5lbGluZyBzb2NrZXQgY291bGQgbm90IGJlIGVzdGFibGlzaGVkLCBjYXVzZT0lc1xcbicsXG4gICAgICAgICAgY2F1c2UubWVzc2FnZSwgY2F1c2Uuc3RhY2spO1xuICAgIHZhciBlcnJvciA9IG5ldyBFcnJvcigndHVubmVsaW5nIHNvY2tldCBjb3VsZCBub3QgYmUgZXN0YWJsaXNoZWQsICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnY2F1c2U9JyArIGNhdXNlLm1lc3NhZ2UpO1xuICAgIGVycm9yLmNvZGUgPSAnRUNPTk5SRVNFVCc7XG4gICAgb3B0aW9ucy5yZXF1ZXN0LmVtaXQoJ2Vycm9yJywgZXJyb3IpO1xuICAgIHNlbGYucmVtb3ZlU29ja2V0KHBsYWNlaG9sZGVyKTtcbiAgfVxufTtcblxuVHVubmVsaW5nQWdlbnQucHJvdG90eXBlLnJlbW92ZVNvY2tldCA9IGZ1bmN0aW9uIHJlbW92ZVNvY2tldChzb2NrZXQpIHtcbiAgdmFyIHBvcyA9IHRoaXMuc29ja2V0cy5pbmRleE9mKHNvY2tldClcbiAgaWYgKHBvcyA9PT0gLTEpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdGhpcy5zb2NrZXRzLnNwbGljZShwb3MsIDEpO1xuXG4gIHZhciBwZW5kaW5nID0gdGhpcy5yZXF1ZXN0cy5zaGlmdCgpO1xuICBpZiAocGVuZGluZykge1xuICAgIC8vIElmIHdlIGhhdmUgcGVuZGluZyByZXF1ZXN0cyBhbmQgYSBzb2NrZXQgZ2V0cyBjbG9zZWQgYSBuZXcgb25lXG4gICAgLy8gbmVlZHMgdG8gYmUgY3JlYXRlZCB0byB0YWtlIG92ZXIgaW4gdGhlIHBvb2wgZm9yIHRoZSBvbmUgdGhhdCBjbG9zZWQuXG4gICAgdGhpcy5jcmVhdGVTb2NrZXQocGVuZGluZywgZnVuY3Rpb24oc29ja2V0KSB7XG4gICAgICBwZW5kaW5nLnJlcXVlc3Qub25Tb2NrZXQoc29ja2V0KTtcbiAgICB9KTtcbiAgfVxufTtcblxuZnVuY3Rpb24gY3JlYXRlU2VjdXJlU29ja2V0KG9wdGlvbnMsIGNiKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgVHVubmVsaW5nQWdlbnQucHJvdG90eXBlLmNyZWF0ZVNvY2tldC5jYWxsKHNlbGYsIG9wdGlvbnMsIGZ1bmN0aW9uKHNvY2tldCkge1xuICAgIHZhciBob3N0SGVhZGVyID0gb3B0aW9ucy5yZXF1ZXN0LmdldEhlYWRlcignaG9zdCcpO1xuICAgIHZhciB0bHNPcHRpb25zID0gbWVyZ2VPcHRpb25zKHt9LCBzZWxmLm9wdGlvbnMsIHtcbiAgICAgIHNvY2tldDogc29ja2V0LFxuICAgICAgc2VydmVybmFtZTogaG9zdEhlYWRlciA/IGhvc3RIZWFkZXIucmVwbGFjZSgvOi4qJC8sICcnKSA6IG9wdGlvbnMuaG9zdFxuICAgIH0pO1xuXG4gICAgLy8gMCBpcyBkdW1teSBwb3J0IGZvciB2MC42XG4gICAgdmFyIHNlY3VyZVNvY2tldCA9IHRscy5jb25uZWN0KDAsIHRsc09wdGlvbnMpO1xuICAgIHNlbGYuc29ja2V0c1tzZWxmLnNvY2tldHMuaW5kZXhPZihzb2NrZXQpXSA9IHNlY3VyZVNvY2tldDtcbiAgICBjYihzZWN1cmVTb2NrZXQpO1xuICB9KTtcbn1cblxuXG5mdW5jdGlvbiB0b09wdGlvbnMoaG9zdCwgcG9ydCwgbG9jYWxBZGRyZXNzKSB7XG4gIGlmICh0eXBlb2YgaG9zdCA9PT0gJ3N0cmluZycpIHsgLy8gc2luY2UgdjAuMTBcbiAgICByZXR1cm4ge1xuICAgICAgaG9zdDogaG9zdCxcbiAgICAgIHBvcnQ6IHBvcnQsXG4gICAgICBsb2NhbEFkZHJlc3M6IGxvY2FsQWRkcmVzc1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIGhvc3Q7IC8vIGZvciB2MC4xMSBvciBsYXRlclxufVxuXG5mdW5jdGlvbiBtZXJnZU9wdGlvbnModGFyZ2V0KSB7XG4gIGZvciAodmFyIGkgPSAxLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICB2YXIgb3ZlcnJpZGVzID0gYXJndW1lbnRzW2ldO1xuICAgIGlmICh0eXBlb2Ygb3ZlcnJpZGVzID09PSAnb2JqZWN0Jykge1xuICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvdmVycmlkZXMpO1xuICAgICAgZm9yICh2YXIgaiA9IDAsIGtleUxlbiA9IGtleXMubGVuZ3RoOyBqIDwga2V5TGVuOyArK2opIHtcbiAgICAgICAgdmFyIGsgPSBrZXlzW2pdO1xuICAgICAgICBpZiAob3ZlcnJpZGVzW2tdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0YXJnZXRba10gPSBvdmVycmlkZXNba107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuXG52YXIgZGVidWc7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9ERUJVRyAmJiAvXFxidHVubmVsXFxiLy50ZXN0KHByb2Nlc3MuZW52Lk5PREVfREVCVUcpKSB7XG4gIGRlYnVnID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgIGlmICh0eXBlb2YgYXJnc1swXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGFyZ3NbMF0gPSAnVFVOTkVMOiAnICsgYXJnc1swXTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXJncy51bnNoaWZ0KCdUVU5ORUw6Jyk7XG4gICAgfVxuICAgIGNvbnNvbGUuZXJyb3IuYXBwbHkoY29uc29sZSwgYXJncyk7XG4gIH1cbn0gZWxzZSB7XG4gIGRlYnVnID0gZnVuY3Rpb24oKSB7fTtcbn1cbmV4cG9ydHMuZGVidWcgPSBkZWJ1ZzsgLy8gZm9yIHRlc3RcbiIsCiAgICAibW9kdWxlLmV4cG9ydHMgPSB7XG4gIGtDbG9zZTogU3ltYm9sKCdjbG9zZScpLFxuICBrRGVzdHJveTogU3ltYm9sKCdkZXN0cm95JyksXG4gIGtEaXNwYXRjaDogU3ltYm9sKCdkaXNwYXRjaCcpLFxuICBrVXJsOiBTeW1ib2woJ3VybCcpLFxuICBrV3JpdGluZzogU3ltYm9sKCd3cml0aW5nJyksXG4gIGtSZXN1bWluZzogU3ltYm9sKCdyZXN1bWluZycpLFxuICBrUXVldWU6IFN5bWJvbCgncXVldWUnKSxcbiAga0Nvbm5lY3Q6IFN5bWJvbCgnY29ubmVjdCcpLFxuICBrQ29ubmVjdGluZzogU3ltYm9sKCdjb25uZWN0aW5nJyksXG4gIGtIZWFkZXJzTGlzdDogU3ltYm9sKCdoZWFkZXJzIGxpc3QnKSxcbiAga0tlZXBBbGl2ZURlZmF1bHRUaW1lb3V0OiBTeW1ib2woJ2RlZmF1bHQga2VlcCBhbGl2ZSB0aW1lb3V0JyksXG4gIGtLZWVwQWxpdmVNYXhUaW1lb3V0OiBTeW1ib2woJ21heCBrZWVwIGFsaXZlIHRpbWVvdXQnKSxcbiAga0tlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGQ6IFN5bWJvbCgna2VlcCBhbGl2ZSB0aW1lb3V0IHRocmVzaG9sZCcpLFxuICBrS2VlcEFsaXZlVGltZW91dFZhbHVlOiBTeW1ib2woJ2tlZXAgYWxpdmUgdGltZW91dCcpLFxuICBrS2VlcEFsaXZlOiBTeW1ib2woJ2tlZXAgYWxpdmUnKSxcbiAga0hlYWRlcnNUaW1lb3V0OiBTeW1ib2woJ2hlYWRlcnMgdGltZW91dCcpLFxuICBrQm9keVRpbWVvdXQ6IFN5bWJvbCgnYm9keSB0aW1lb3V0JyksXG4gIGtTZXJ2ZXJOYW1lOiBTeW1ib2woJ3NlcnZlciBuYW1lJyksXG4gIGtMb2NhbEFkZHJlc3M6IFN5bWJvbCgnbG9jYWwgYWRkcmVzcycpLFxuICBrSG9zdDogU3ltYm9sKCdob3N0JyksXG4gIGtOb1JlZjogU3ltYm9sKCdubyByZWYnKSxcbiAga0JvZHlVc2VkOiBTeW1ib2woJ3VzZWQnKSxcbiAga1J1bm5pbmc6IFN5bWJvbCgncnVubmluZycpLFxuICBrQmxvY2tpbmc6IFN5bWJvbCgnYmxvY2tpbmcnKSxcbiAga1BlbmRpbmc6IFN5bWJvbCgncGVuZGluZycpLFxuICBrU2l6ZTogU3ltYm9sKCdzaXplJyksXG4gIGtCdXN5OiBTeW1ib2woJ2J1c3knKSxcbiAga1F1ZXVlZDogU3ltYm9sKCdxdWV1ZWQnKSxcbiAga0ZyZWU6IFN5bWJvbCgnZnJlZScpLFxuICBrQ29ubmVjdGVkOiBTeW1ib2woJ2Nvbm5lY3RlZCcpLFxuICBrQ2xvc2VkOiBTeW1ib2woJ2Nsb3NlZCcpLFxuICBrTmVlZERyYWluOiBTeW1ib2woJ25lZWQgZHJhaW4nKSxcbiAga1Jlc2V0OiBTeW1ib2woJ3Jlc2V0JyksXG4gIGtEZXN0cm95ZWQ6IFN5bWJvbC5mb3IoJ25vZGVqcy5zdHJlYW0uZGVzdHJveWVkJyksXG4gIGtNYXhIZWFkZXJzU2l6ZTogU3ltYm9sKCdtYXggaGVhZGVycyBzaXplJyksXG4gIGtSdW5uaW5nSWR4OiBTeW1ib2woJ3J1bm5pbmcgaW5kZXgnKSxcbiAga1BlbmRpbmdJZHg6IFN5bWJvbCgncGVuZGluZyBpbmRleCcpLFxuICBrRXJyb3I6IFN5bWJvbCgnZXJyb3InKSxcbiAga0NsaWVudHM6IFN5bWJvbCgnY2xpZW50cycpLFxuICBrQ2xpZW50OiBTeW1ib2woJ2NsaWVudCcpLFxuICBrUGFyc2VyOiBTeW1ib2woJ3BhcnNlcicpLFxuICBrT25EZXN0cm95ZWQ6IFN5bWJvbCgnZGVzdHJveSBjYWxsYmFja3MnKSxcbiAga1BpcGVsaW5pbmc6IFN5bWJvbCgncGlwZWxpbmluZycpLFxuICBrU29ja2V0OiBTeW1ib2woJ3NvY2tldCcpLFxuICBrSG9zdEhlYWRlcjogU3ltYm9sKCdob3N0IGhlYWRlcicpLFxuICBrQ29ubmVjdG9yOiBTeW1ib2woJ2Nvbm5lY3RvcicpLFxuICBrU3RyaWN0Q29udGVudExlbmd0aDogU3ltYm9sKCdzdHJpY3QgY29udGVudCBsZW5ndGgnKSxcbiAga01heFJlZGlyZWN0aW9uczogU3ltYm9sKCdtYXhSZWRpcmVjdGlvbnMnKSxcbiAga01heFJlcXVlc3RzOiBTeW1ib2woJ21heFJlcXVlc3RzUGVyQ2xpZW50JyksXG4gIGtQcm94eTogU3ltYm9sKCdwcm94eSBhZ2VudCBvcHRpb25zJyksXG4gIGtDb3VudGVyOiBTeW1ib2woJ3NvY2tldCByZXF1ZXN0IGNvdW50ZXInKSxcbiAga0ludGVyY2VwdG9yczogU3ltYm9sKCdkaXNwYXRjaCBpbnRlcmNlcHRvcnMnKSxcbiAga01heFJlc3BvbnNlU2l6ZTogU3ltYm9sKCdtYXggcmVzcG9uc2Ugc2l6ZScpLFxuICBrSFRUUDJTZXNzaW9uOiBTeW1ib2woJ2h0dHAyU2Vzc2lvbicpLFxuICBrSFRUUDJTZXNzaW9uU3RhdGU6IFN5bWJvbCgnaHR0cDJTZXNzaW9uIHN0YXRlJyksXG4gIGtIVFRQMkJ1aWxkUmVxdWVzdDogU3ltYm9sKCdodHRwMiBidWlsZCByZXF1ZXN0JyksXG4gIGtIVFRQMUJ1aWxkUmVxdWVzdDogU3ltYm9sKCdodHRwMSBidWlsZCByZXF1ZXN0JyksXG4gIGtIVFRQMkNvcHlIZWFkZXJzOiBTeW1ib2woJ2h0dHAyIGNvcHkgaGVhZGVycycpLFxuICBrSFRUUENvbm5WZXJzaW9uOiBTeW1ib2woJ2h0dHAgY29ubmVjdGlvbiB2ZXJzaW9uJyksXG4gIGtSZXRyeUhhbmRsZXJEZWZhdWx0UmV0cnk6IFN5bWJvbCgncmV0cnkgYWdlbnQgZGVmYXVsdCByZXRyeScpLFxuICBrQ29uc3RydWN0OiBTeW1ib2woJ2NvbnN0cnVjdGFibGUnKVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY2xhc3MgVW5kaWNpRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICB0aGlzLm5hbWUgPSAnVW5kaWNpRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlInXG4gIH1cbn1cblxuY2xhc3MgQ29ubmVjdFRpbWVvdXRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIENvbm5lY3RUaW1lb3V0RXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0Nvbm5lY3RUaW1lb3V0RXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnQ29ubmVjdCBUaW1lb3V0IEVycm9yJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0NPTk5FQ1RfVElNRU9VVCdcbiAgfVxufVxuXG5jbGFzcyBIZWFkZXJzVGltZW91dEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgSGVhZGVyc1RpbWVvdXRFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnSGVhZGVyc1RpbWVvdXRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdIZWFkZXJzIFRpbWVvdXQgRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfSEVBREVSU19USU1FT1VUJ1xuICB9XG59XG5cbmNsYXNzIEhlYWRlcnNPdmVyZmxvd0Vycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgSGVhZGVyc092ZXJmbG93RXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0hlYWRlcnNPdmVyZmxvd0Vycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ0hlYWRlcnMgT3ZlcmZsb3cgRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfSEVBREVSU19PVkVSRkxPVydcbiAgfVxufVxuXG5jbGFzcyBCb2R5VGltZW91dEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgQm9keVRpbWVvdXRFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnQm9keVRpbWVvdXRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdCb2R5IFRpbWVvdXQgRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfQk9EWV9USU1FT1VUJ1xuICB9XG59XG5cbmNsYXNzIFJlc3BvbnNlU3RhdHVzQ29kZUVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSwgc3RhdHVzQ29kZSwgaGVhZGVycywgYm9keSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ1Jlc3BvbnNlU3RhdHVzQ29kZUVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1Jlc3BvbnNlIFN0YXR1cyBDb2RlIEVycm9yJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX1JFU1BPTlNFX1NUQVRVU19DT0RFJ1xuICAgIHRoaXMuYm9keSA9IGJvZHlcbiAgICB0aGlzLnN0YXR1cyA9IHN0YXR1c0NvZGVcbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBzdGF0dXNDb2RlXG4gICAgdGhpcy5oZWFkZXJzID0gaGVhZGVyc1xuICB9XG59XG5cbmNsYXNzIEludmFsaWRBcmd1bWVudEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgSW52YWxpZEFyZ3VtZW50RXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0ludmFsaWRBcmd1bWVudEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ0ludmFsaWQgQXJndW1lbnQgRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfSU5WQUxJRF9BUkcnXG4gIH1cbn1cblxuY2xhc3MgSW52YWxpZFJldHVyblZhbHVlRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnSW52YWxpZFJldHVyblZhbHVlRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnSW52YWxpZCBSZXR1cm4gVmFsdWUgRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfSU5WQUxJRF9SRVRVUk5fVkFMVUUnXG4gIH1cbn1cblxuY2xhc3MgUmVxdWVzdEFib3J0ZWRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFJlcXVlc3RBYm9ydGVkRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0Fib3J0RXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnUmVxdWVzdCBhYm9ydGVkJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0FCT1JURUQnXG4gIH1cbn1cblxuY2xhc3MgSW5mb3JtYXRpb25hbEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgSW5mb3JtYXRpb25hbEVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdJbmZvcm1hdGlvbmFsRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnUmVxdWVzdCBpbmZvcm1hdGlvbidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9JTkZPJ1xuICB9XG59XG5cbmNsYXNzIFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1JlcXVlc3QgYm9keSBsZW5ndGggZG9lcyBub3QgbWF0Y2ggY29udGVudC1sZW5ndGggaGVhZGVyJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX1JFUV9DT05URU5UX0xFTkdUSF9NSVNNQVRDSCdcbiAgfVxufVxuXG5jbGFzcyBSZXNwb25zZUNvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgUmVzcG9uc2VDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnUmVzcG9uc2VDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdSZXNwb25zZSBib2R5IGxlbmd0aCBkb2VzIG5vdCBtYXRjaCBjb250ZW50LWxlbmd0aCBoZWFkZXInXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfUkVTX0NPTlRFTlRfTEVOR1RIX01JU01BVENIJ1xuICB9XG59XG5cbmNsYXNzIENsaWVudERlc3Ryb3llZEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgQ2xpZW50RGVzdHJveWVkRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0NsaWVudERlc3Ryb3llZEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1RoZSBjbGllbnQgaXMgZGVzdHJveWVkJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0RFU1RST1lFRCdcbiAgfVxufVxuXG5jbGFzcyBDbGllbnRDbG9zZWRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIENsaWVudENsb3NlZEVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdDbGllbnRDbG9zZWRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdUaGUgY2xpZW50IGlzIGNsb3NlZCdcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9DTE9TRUQnXG4gIH1cbn1cblxuY2xhc3MgU29ja2V0RXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlLCBzb2NrZXQpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFNvY2tldEVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdTb2NrZXRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdTb2NrZXQgZXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfU09DS0VUJ1xuICAgIHRoaXMuc29ja2V0ID0gc29ja2V0XG4gIH1cbn1cblxuY2xhc3MgTm90U3VwcG9ydGVkRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBOb3RTdXBwb3J0ZWRFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnTm90U3VwcG9ydGVkRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnTm90IHN1cHBvcnRlZCBlcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9OT1RfU1VQUE9SVEVEJ1xuICB9XG59XG5cbmNsYXNzIEJhbGFuY2VkUG9vbE1pc3NpbmdVcHN0cmVhbUVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgTm90U3VwcG9ydGVkRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ01pc3NpbmdVcHN0cmVhbUVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ05vIHVwc3RyZWFtIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBCYWxhbmNlZFBvb2wnXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfQlBMX01JU1NJTkdfVVBTVFJFQU0nXG4gIH1cbn1cblxuY2xhc3MgSFRUUFBhcnNlckVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSwgY29kZSwgZGF0YSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgSFRUUFBhcnNlckVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdIVFRQUGFyc2VyRXJyb3InXG4gICAgdGhpcy5jb2RlID0gY29kZSA/IGBIUEVfJHtjb2RlfWAgOiB1bmRlZmluZWRcbiAgICB0aGlzLmRhdGEgPSBkYXRhID8gZGF0YS50b1N0cmluZygpIDogdW5kZWZpbmVkXG4gIH1cbn1cblxuY2xhc3MgUmVzcG9uc2VFeGNlZWRlZE1heFNpemVFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFJlc3BvbnNlRXhjZWVkZWRNYXhTaXplRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ1Jlc3BvbnNlRXhjZWVkZWRNYXhTaXplRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnUmVzcG9uc2UgY29udGVudCBleGNlZWRlZCBtYXggc2l6ZSdcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9SRVNfRVhDRUVERURfTUFYX1NJWkUnXG4gIH1cbn1cblxuY2xhc3MgUmVxdWVzdFJldHJ5RXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlLCBjb2RlLCB7IGhlYWRlcnMsIGRhdGEgfSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgUmVxdWVzdFJldHJ5RXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ1JlcXVlc3RSZXRyeUVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1JlcXVlc3QgcmV0cnkgZXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfUkVRX1JFVFJZJ1xuICAgIHRoaXMuc3RhdHVzQ29kZSA9IGNvZGVcbiAgICB0aGlzLmRhdGEgPSBkYXRhXG4gICAgdGhpcy5oZWFkZXJzID0gaGVhZGVyc1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBIVFRQUGFyc2VyRXJyb3IsXG4gIFVuZGljaUVycm9yLFxuICBIZWFkZXJzVGltZW91dEVycm9yLFxuICBIZWFkZXJzT3ZlcmZsb3dFcnJvcixcbiAgQm9keVRpbWVvdXRFcnJvcixcbiAgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yLFxuICBDb25uZWN0VGltZW91dEVycm9yLFxuICBSZXNwb25zZVN0YXR1c0NvZGVFcnJvcixcbiAgSW52YWxpZEFyZ3VtZW50RXJyb3IsXG4gIEludmFsaWRSZXR1cm5WYWx1ZUVycm9yLFxuICBSZXF1ZXN0QWJvcnRlZEVycm9yLFxuICBDbGllbnREZXN0cm95ZWRFcnJvcixcbiAgQ2xpZW50Q2xvc2VkRXJyb3IsXG4gIEluZm9ybWF0aW9uYWxFcnJvcixcbiAgU29ja2V0RXJyb3IsXG4gIE5vdFN1cHBvcnRlZEVycm9yLFxuICBSZXNwb25zZUNvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yLFxuICBCYWxhbmNlZFBvb2xNaXNzaW5nVXBzdHJlYW1FcnJvcixcbiAgUmVzcG9uc2VFeGNlZWRlZE1heFNpemVFcnJvcixcbiAgUmVxdWVzdFJldHJ5RXJyb3Jcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbi8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPn0gKi9cbmNvbnN0IGhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkID0ge31cblxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRUUC9IZWFkZXJzXG5jb25zdCB3ZWxsa25vd25IZWFkZXJOYW1lcyA9IFtcbiAgJ0FjY2VwdCcsXG4gICdBY2NlcHQtRW5jb2RpbmcnLFxuICAnQWNjZXB0LUxhbmd1YWdlJyxcbiAgJ0FjY2VwdC1SYW5nZXMnLFxuICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctQ3JlZGVudGlhbHMnLFxuICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycycsXG4gICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzJyxcbiAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbicsXG4gICdBY2Nlc3MtQ29udHJvbC1FeHBvc2UtSGVhZGVycycsXG4gICdBY2Nlc3MtQ29udHJvbC1NYXgtQWdlJyxcbiAgJ0FjY2Vzcy1Db250cm9sLVJlcXVlc3QtSGVhZGVycycsXG4gICdBY2Nlc3MtQ29udHJvbC1SZXF1ZXN0LU1ldGhvZCcsXG4gICdBZ2UnLFxuICAnQWxsb3cnLFxuICAnQWx0LVN2YycsXG4gICdBbHQtVXNlZCcsXG4gICdBdXRob3JpemF0aW9uJyxcbiAgJ0NhY2hlLUNvbnRyb2wnLFxuICAnQ2xlYXItU2l0ZS1EYXRhJyxcbiAgJ0Nvbm5lY3Rpb24nLFxuICAnQ29udGVudC1EaXNwb3NpdGlvbicsXG4gICdDb250ZW50LUVuY29kaW5nJyxcbiAgJ0NvbnRlbnQtTGFuZ3VhZ2UnLFxuICAnQ29udGVudC1MZW5ndGgnLFxuICAnQ29udGVudC1Mb2NhdGlvbicsXG4gICdDb250ZW50LVJhbmdlJyxcbiAgJ0NvbnRlbnQtU2VjdXJpdHktUG9saWN5JyxcbiAgJ0NvbnRlbnQtU2VjdXJpdHktUG9saWN5LVJlcG9ydC1Pbmx5JyxcbiAgJ0NvbnRlbnQtVHlwZScsXG4gICdDb29raWUnLFxuICAnQ3Jvc3MtT3JpZ2luLUVtYmVkZGVyLVBvbGljeScsXG4gICdDcm9zcy1PcmlnaW4tT3BlbmVyLVBvbGljeScsXG4gICdDcm9zcy1PcmlnaW4tUmVzb3VyY2UtUG9saWN5JyxcbiAgJ0RhdGUnLFxuICAnRGV2aWNlLU1lbW9yeScsXG4gICdEb3dubGluaycsXG4gICdFQ1QnLFxuICAnRVRhZycsXG4gICdFeHBlY3QnLFxuICAnRXhwZWN0LUNUJyxcbiAgJ0V4cGlyZXMnLFxuICAnRm9yd2FyZGVkJyxcbiAgJ0Zyb20nLFxuICAnSG9zdCcsXG4gICdJZi1NYXRjaCcsXG4gICdJZi1Nb2RpZmllZC1TaW5jZScsXG4gICdJZi1Ob25lLU1hdGNoJyxcbiAgJ0lmLVJhbmdlJyxcbiAgJ0lmLVVubW9kaWZpZWQtU2luY2UnLFxuICAnS2VlcC1BbGl2ZScsXG4gICdMYXN0LU1vZGlmaWVkJyxcbiAgJ0xpbmsnLFxuICAnTG9jYXRpb24nLFxuICAnTWF4LUZvcndhcmRzJyxcbiAgJ09yaWdpbicsXG4gICdQZXJtaXNzaW9ucy1Qb2xpY3knLFxuICAnUHJhZ21hJyxcbiAgJ1Byb3h5LUF1dGhlbnRpY2F0ZScsXG4gICdQcm94eS1BdXRob3JpemF0aW9uJyxcbiAgJ1JUVCcsXG4gICdSYW5nZScsXG4gICdSZWZlcmVyJyxcbiAgJ1JlZmVycmVyLVBvbGljeScsXG4gICdSZWZyZXNoJyxcbiAgJ1JldHJ5LUFmdGVyJyxcbiAgJ1NlYy1XZWJTb2NrZXQtQWNjZXB0JyxcbiAgJ1NlYy1XZWJTb2NrZXQtRXh0ZW5zaW9ucycsXG4gICdTZWMtV2ViU29ja2V0LUtleScsXG4gICdTZWMtV2ViU29ja2V0LVByb3RvY29sJyxcbiAgJ1NlYy1XZWJTb2NrZXQtVmVyc2lvbicsXG4gICdTZXJ2ZXInLFxuICAnU2VydmVyLVRpbWluZycsXG4gICdTZXJ2aWNlLVdvcmtlci1BbGxvd2VkJyxcbiAgJ1NlcnZpY2UtV29ya2VyLU5hdmlnYXRpb24tUHJlbG9hZCcsXG4gICdTZXQtQ29va2llJyxcbiAgJ1NvdXJjZU1hcCcsXG4gICdTdHJpY3QtVHJhbnNwb3J0LVNlY3VyaXR5JyxcbiAgJ1N1cHBvcnRzLUxvYWRpbmctTW9kZScsXG4gICdURScsXG4gICdUaW1pbmctQWxsb3ctT3JpZ2luJyxcbiAgJ1RyYWlsZXInLFxuICAnVHJhbnNmZXItRW5jb2RpbmcnLFxuICAnVXBncmFkZScsXG4gICdVcGdyYWRlLUluc2VjdXJlLVJlcXVlc3RzJyxcbiAgJ1VzZXItQWdlbnQnLFxuICAnVmFyeScsXG4gICdWaWEnLFxuICAnV1dXLUF1dGhlbnRpY2F0ZScsXG4gICdYLUNvbnRlbnQtVHlwZS1PcHRpb25zJyxcbiAgJ1gtRE5TLVByZWZldGNoLUNvbnRyb2wnLFxuICAnWC1GcmFtZS1PcHRpb25zJyxcbiAgJ1gtUGVybWl0dGVkLUNyb3NzLURvbWFpbi1Qb2xpY2llcycsXG4gICdYLVBvd2VyZWQtQnknLFxuICAnWC1SZXF1ZXN0ZWQtV2l0aCcsXG4gICdYLVhTUy1Qcm90ZWN0aW9uJ1xuXVxuXG5mb3IgKGxldCBpID0gMDsgaSA8IHdlbGxrbm93bkhlYWRlck5hbWVzLmxlbmd0aDsgKytpKSB7XG4gIGNvbnN0IGtleSA9IHdlbGxrbm93bkhlYWRlck5hbWVzW2ldXG4gIGNvbnN0IGxvd2VyQ2FzZWRLZXkgPSBrZXkudG9Mb3dlckNhc2UoKVxuICBoZWFkZXJOYW1lTG93ZXJDYXNlZFJlY29yZFtrZXldID0gaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmRbbG93ZXJDYXNlZEtleV0gPVxuICAgIGxvd2VyQ2FzZWRLZXlcbn1cblxuLy8gTm90ZTogb2JqZWN0IHByb3RvdHlwZXMgc2hvdWxkIG5vdCBiZSBhYmxlIHRvIGJlIHJlZmVyZW5jZWQuIGUuZy4gYE9iamVjdCNoYXNPd25Qcm9wZXJ0eWAuXG5PYmplY3Quc2V0UHJvdG90eXBlT2YoaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmQsIG51bGwpXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICB3ZWxsa25vd25IZWFkZXJOYW1lcyxcbiAgaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmRcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7IGtEZXN0cm95ZWQsIGtCb2R5VXNlZCB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgSW5jb21pbmdNZXNzYWdlIH0gPSByZXF1aXJlKCdodHRwJylcbmNvbnN0IHN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpXG5jb25zdCBuZXQgPSByZXF1aXJlKCduZXQnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi9lcnJvcnMnKVxuY29uc3QgeyBCbG9iIH0gPSByZXF1aXJlKCdidWZmZXInKVxuY29uc3Qgbm9kZVV0aWwgPSByZXF1aXJlKCd1dGlsJylcbmNvbnN0IHsgc3RyaW5naWZ5IH0gPSByZXF1aXJlKCdxdWVyeXN0cmluZycpXG5jb25zdCB7IGhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5cbmNvbnN0IFtub2RlTWFqb3IsIG5vZGVNaW5vcl0gPSBwcm9jZXNzLnZlcnNpb25zLm5vZGUuc3BsaXQoJy4nKS5tYXAodiA9PiBOdW1iZXIodikpXG5cbmZ1bmN0aW9uIG5vcCAoKSB7fVxuXG5mdW5jdGlvbiBpc1N0cmVhbSAob2JqKSB7XG4gIHJldHVybiBvYmogJiYgdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG9iai5waXBlID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBvYmoub24gPT09ICdmdW5jdGlvbidcbn1cblxuLy8gYmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL25vZGUtZmV0Y2gvZmV0Y2gtYmxvYi9ibG9iLzhhYjU4N2QzNDA4MGRlOTQxNDBiNTRmMDcxNjg0NTFlN2QwYjY1NWUvaW5kZXguanMjTDIyOS1MMjQxIChNSVQgTGljZW5zZSlcbmZ1bmN0aW9uIGlzQmxvYkxpa2UgKG9iamVjdCkge1xuICByZXR1cm4gKEJsb2IgJiYgb2JqZWN0IGluc3RhbmNlb2YgQmxvYikgfHwgKFxuICAgIG9iamVjdCAmJlxuICAgIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmXG4gICAgKHR5cGVvZiBvYmplY3Quc3RyZWFtID09PSAnZnVuY3Rpb24nIHx8XG4gICAgICB0eXBlb2Ygb2JqZWN0LmFycmF5QnVmZmVyID09PSAnZnVuY3Rpb24nKSAmJlxuICAgIC9eKEJsb2J8RmlsZSkkLy50ZXN0KG9iamVjdFtTeW1ib2wudG9TdHJpbmdUYWddKVxuICApXG59XG5cbmZ1bmN0aW9uIGJ1aWxkVVJMICh1cmwsIHF1ZXJ5UGFyYW1zKSB7XG4gIGlmICh1cmwuaW5jbHVkZXMoJz8nKSB8fCB1cmwuaW5jbHVkZXMoJyMnKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignUXVlcnkgcGFyYW1zIGNhbm5vdCBiZSBwYXNzZWQgd2hlbiB1cmwgYWxyZWFkeSBjb250YWlucyBcIj9cIiBvciBcIiNcIi4nKVxuICB9XG5cbiAgY29uc3Qgc3RyaW5naWZpZWQgPSBzdHJpbmdpZnkocXVlcnlQYXJhbXMpXG5cbiAgaWYgKHN0cmluZ2lmaWVkKSB7XG4gICAgdXJsICs9ICc/JyArIHN0cmluZ2lmaWVkXG4gIH1cblxuICByZXR1cm4gdXJsXG59XG5cbmZ1bmN0aW9uIHBhcnNlVVJMICh1cmwpIHtcbiAgaWYgKHR5cGVvZiB1cmwgPT09ICdzdHJpbmcnKSB7XG4gICAgdXJsID0gbmV3IFVSTCh1cmwpXG5cbiAgICBpZiAoIS9eaHR0cHM/Oi8udGVzdCh1cmwub3JpZ2luIHx8IHVybC5wcm90b2NvbCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkwgcHJvdG9jb2w6IHRoZSBVUkwgbXVzdCBzdGFydCB3aXRoIGBodHRwOmAgb3IgYGh0dHBzOmAuJylcbiAgICB9XG5cbiAgICByZXR1cm4gdXJsXG4gIH1cblxuICBpZiAoIXVybCB8fCB0eXBlb2YgdXJsICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkw6IFRoZSBVUkwgYXJndW1lbnQgbXVzdCBiZSBhIG5vbi1udWxsIG9iamVjdC4nKVxuICB9XG5cbiAgaWYgKCEvXmh0dHBzPzovLnRlc3QodXJsLm9yaWdpbiB8fCB1cmwucHJvdG9jb2wpKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIFVSTCBwcm90b2NvbDogdGhlIFVSTCBtdXN0IHN0YXJ0IHdpdGggYGh0dHA6YCBvciBgaHR0cHM6YC4nKVxuICB9XG5cbiAgaWYgKCEodXJsIGluc3RhbmNlb2YgVVJMKSkge1xuICAgIGlmICh1cmwucG9ydCAhPSBudWxsICYmIHVybC5wb3J0ICE9PSAnJyAmJiAhTnVtYmVyLmlzRmluaXRlKHBhcnNlSW50KHVybC5wb3J0KSkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkw6IHBvcnQgbXVzdCBiZSBhIHZhbGlkIGludGVnZXIgb3IgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gaW50ZWdlci4nKVxuICAgIH1cblxuICAgIGlmICh1cmwucGF0aCAhPSBudWxsICYmIHR5cGVvZiB1cmwucGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkwgcGF0aDogdGhlIHBhdGggbXVzdCBiZSBhIHN0cmluZyBvciBudWxsL3VuZGVmaW5lZC4nKVxuICAgIH1cblxuICAgIGlmICh1cmwucGF0aG5hbWUgIT0gbnVsbCAmJiB0eXBlb2YgdXJsLnBhdGhuYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIFVSTCBwYXRobmFtZTogdGhlIHBhdGhuYW1lIG11c3QgYmUgYSBzdHJpbmcgb3IgbnVsbC91bmRlZmluZWQuJylcbiAgICB9XG5cbiAgICBpZiAodXJsLmhvc3RuYW1lICE9IG51bGwgJiYgdHlwZW9mIHVybC5ob3N0bmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkwgaG9zdG5hbWU6IHRoZSBob3N0bmFtZSBtdXN0IGJlIGEgc3RyaW5nIG9yIG51bGwvdW5kZWZpbmVkLicpXG4gICAgfVxuXG4gICAgaWYgKHVybC5vcmlnaW4gIT0gbnVsbCAmJiB0eXBlb2YgdXJsLm9yaWdpbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkwgb3JpZ2luOiB0aGUgb3JpZ2luIG11c3QgYmUgYSBzdHJpbmcgb3IgbnVsbC91bmRlZmluZWQuJylcbiAgICB9XG5cbiAgICBjb25zdCBwb3J0ID0gdXJsLnBvcnQgIT0gbnVsbFxuICAgICAgPyB1cmwucG9ydFxuICAgICAgOiAodXJsLnByb3RvY29sID09PSAnaHR0cHM6JyA/IDQ0MyA6IDgwKVxuICAgIGxldCBvcmlnaW4gPSB1cmwub3JpZ2luICE9IG51bGxcbiAgICAgID8gdXJsLm9yaWdpblxuICAgICAgOiBgJHt1cmwucHJvdG9jb2x9Ly8ke3VybC5ob3N0bmFtZX06JHtwb3J0fWBcbiAgICBsZXQgcGF0aCA9IHVybC5wYXRoICE9IG51bGxcbiAgICAgID8gdXJsLnBhdGhcbiAgICAgIDogYCR7dXJsLnBhdGhuYW1lIHx8ICcnfSR7dXJsLnNlYXJjaCB8fCAnJ31gXG5cbiAgICBpZiAob3JpZ2luLmVuZHNXaXRoKCcvJykpIHtcbiAgICAgIG9yaWdpbiA9IG9yaWdpbi5zdWJzdHJpbmcoMCwgb3JpZ2luLmxlbmd0aCAtIDEpXG4gICAgfVxuXG4gICAgaWYgKHBhdGggJiYgIXBhdGguc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICBwYXRoID0gYC8ke3BhdGh9YFxuICAgIH1cbiAgICAvLyBuZXcgVVJMKHBhdGgsIG9yaWdpbikgaXMgdW5zYWZlIHdoZW4gYHBhdGhgIGNvbnRhaW5zIGFuIGFic29sdXRlIFVSTFxuICAgIC8vIEZyb20gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1VSTC9VUkw6XG4gICAgLy8gSWYgZmlyc3QgcGFyYW1ldGVyIGlzIGEgcmVsYXRpdmUgVVJMLCBzZWNvbmQgcGFyYW0gaXMgcmVxdWlyZWQsIGFuZCB3aWxsIGJlIHVzZWQgYXMgdGhlIGJhc2UgVVJMLlxuICAgIC8vIElmIGZpcnN0IHBhcmFtZXRlciBpcyBhbiBhYnNvbHV0ZSBVUkwsIGEgZ2l2ZW4gc2Vjb25kIHBhcmFtIHdpbGwgYmUgaWdub3JlZC5cbiAgICB1cmwgPSBuZXcgVVJMKG9yaWdpbiArIHBhdGgpXG4gIH1cblxuICByZXR1cm4gdXJsXG59XG5cbmZ1bmN0aW9uIHBhcnNlT3JpZ2luICh1cmwpIHtcbiAgdXJsID0gcGFyc2VVUkwodXJsKVxuXG4gIGlmICh1cmwucGF0aG5hbWUgIT09ICcvJyB8fCB1cmwuc2VhcmNoIHx8IHVybC5oYXNoKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIHVybCcpXG4gIH1cblxuICByZXR1cm4gdXJsXG59XG5cbmZ1bmN0aW9uIGdldEhvc3RuYW1lIChob3N0KSB7XG4gIGlmIChob3N0WzBdID09PSAnWycpIHtcbiAgICBjb25zdCBpZHggPSBob3N0LmluZGV4T2YoJ10nKVxuXG4gICAgYXNzZXJ0KGlkeCAhPT0gLTEpXG4gICAgcmV0dXJuIGhvc3Quc3Vic3RyaW5nKDEsIGlkeClcbiAgfVxuXG4gIGNvbnN0IGlkeCA9IGhvc3QuaW5kZXhPZignOicpXG4gIGlmIChpZHggPT09IC0xKSByZXR1cm4gaG9zdFxuXG4gIHJldHVybiBob3N0LnN1YnN0cmluZygwLCBpZHgpXG59XG5cbi8vIElQIGFkZHJlc3NlcyBhcmUgbm90IHZhbGlkIHNlcnZlciBuYW1lcyBwZXIgUkZDNjA2NlxuLy8gPiBDdXJyZW50bHksIHRoZSBvbmx5IHNlcnZlciBuYW1lcyBzdXBwb3J0ZWQgYXJlIEROUyBob3N0bmFtZXNcbmZ1bmN0aW9uIGdldFNlcnZlck5hbWUgKGhvc3QpIHtcbiAgaWYgKCFob3N0KSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgaG9zdCwgJ3N0cmluZycpXG5cbiAgY29uc3Qgc2VydmVybmFtZSA9IGdldEhvc3RuYW1lKGhvc3QpXG4gIGlmIChuZXQuaXNJUChzZXJ2ZXJuYW1lKSkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgcmV0dXJuIHNlcnZlcm5hbWVcbn1cblxuZnVuY3Rpb24gZGVlcENsb25lIChvYmopIHtcbiAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob2JqKSlcbn1cblxuZnVuY3Rpb24gaXNBc3luY0l0ZXJhYmxlIChvYmopIHtcbiAgcmV0dXJuICEhKG9iaiAhPSBudWxsICYmIHR5cGVvZiBvYmpbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID09PSAnZnVuY3Rpb24nKVxufVxuXG5mdW5jdGlvbiBpc0l0ZXJhYmxlIChvYmopIHtcbiAgcmV0dXJuICEhKG9iaiAhPSBudWxsICYmICh0eXBlb2Ygb2JqW1N5bWJvbC5pdGVyYXRvcl0gPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIG9ialtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPT09ICdmdW5jdGlvbicpKVxufVxuXG5mdW5jdGlvbiBib2R5TGVuZ3RoIChib2R5KSB7XG4gIGlmIChib2R5ID09IG51bGwpIHtcbiAgICByZXR1cm4gMFxuICB9IGVsc2UgaWYgKGlzU3RyZWFtKGJvZHkpKSB7XG4gICAgY29uc3Qgc3RhdGUgPSBib2R5Ll9yZWFkYWJsZVN0YXRlXG4gICAgcmV0dXJuIHN0YXRlICYmIHN0YXRlLm9iamVjdE1vZGUgPT09IGZhbHNlICYmIHN0YXRlLmVuZGVkID09PSB0cnVlICYmIE51bWJlci5pc0Zpbml0ZShzdGF0ZS5sZW5ndGgpXG4gICAgICA/IHN0YXRlLmxlbmd0aFxuICAgICAgOiBudWxsXG4gIH0gZWxzZSBpZiAoaXNCbG9iTGlrZShib2R5KSkge1xuICAgIHJldHVybiBib2R5LnNpemUgIT0gbnVsbCA/IGJvZHkuc2l6ZSA6IG51bGxcbiAgfSBlbHNlIGlmIChpc0J1ZmZlcihib2R5KSkge1xuICAgIHJldHVybiBib2R5LmJ5dGVMZW5ndGhcbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG5cbmZ1bmN0aW9uIGlzRGVzdHJveWVkIChzdHJlYW0pIHtcbiAgcmV0dXJuICFzdHJlYW0gfHwgISEoc3RyZWFtLmRlc3Ryb3llZCB8fCBzdHJlYW1ba0Rlc3Ryb3llZF0pXG59XG5cbmZ1bmN0aW9uIGlzUmVhZGFibGVBYm9ydGVkIChzdHJlYW0pIHtcbiAgY29uc3Qgc3RhdGUgPSBzdHJlYW0gJiYgc3RyZWFtLl9yZWFkYWJsZVN0YXRlXG4gIHJldHVybiBpc0Rlc3Ryb3llZChzdHJlYW0pICYmIHN0YXRlICYmICFzdGF0ZS5lbmRFbWl0dGVkXG59XG5cbmZ1bmN0aW9uIGRlc3Ryb3kgKHN0cmVhbSwgZXJyKSB7XG4gIGlmIChzdHJlYW0gPT0gbnVsbCB8fCAhaXNTdHJlYW0oc3RyZWFtKSB8fCBpc0Rlc3Ryb3llZChzdHJlYW0pKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAodHlwZW9mIHN0cmVhbS5kZXN0cm95ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKE9iamVjdC5nZXRQcm90b3R5cGVPZihzdHJlYW0pLmNvbnN0cnVjdG9yID09PSBJbmNvbWluZ01lc3NhZ2UpIHtcbiAgICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvMzg1MDUvZmlsZXNcbiAgICAgIHN0cmVhbS5zb2NrZXQgPSBudWxsXG4gICAgfVxuXG4gICAgc3RyZWFtLmRlc3Ryb3koZXJyKVxuICB9IGVsc2UgaWYgKGVycikge1xuICAgIHByb2Nlc3MubmV4dFRpY2soKHN0cmVhbSwgZXJyKSA9PiB7XG4gICAgICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcnIpXG4gICAgfSwgc3RyZWFtLCBlcnIpXG4gIH1cblxuICBpZiAoc3RyZWFtLmRlc3Ryb3llZCAhPT0gdHJ1ZSkge1xuICAgIHN0cmVhbVtrRGVzdHJveWVkXSA9IHRydWVcbiAgfVxufVxuXG5jb25zdCBLRUVQQUxJVkVfVElNRU9VVF9FWFBSID0gL3RpbWVvdXQ9KFxcZCspL1xuZnVuY3Rpb24gcGFyc2VLZWVwQWxpdmVUaW1lb3V0ICh2YWwpIHtcbiAgY29uc3QgbSA9IHZhbC50b1N0cmluZygpLm1hdGNoKEtFRVBBTElWRV9USU1FT1VUX0VYUFIpXG4gIHJldHVybiBtID8gcGFyc2VJbnQobVsxXSwgMTApICogMTAwMCA6IG51bGxcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgYSBoZWFkZXIgbmFtZSBhbmQgcmV0dXJucyBpdHMgbG93ZXJjYXNlIHZhbHVlLlxuICogQHBhcmFtIHtzdHJpbmcgfCBCdWZmZXJ9IHZhbHVlIEhlYWRlciBuYW1lXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBoZWFkZXJOYW1lVG9TdHJpbmcgKHZhbHVlKSB7XG4gIHJldHVybiBoZWFkZXJOYW1lTG93ZXJDYXNlZFJlY29yZFt2YWx1ZV0gfHwgdmFsdWUudG9Mb3dlckNhc2UoKVxufVxuXG5mdW5jdGlvbiBwYXJzZUhlYWRlcnMgKGhlYWRlcnMsIG9iaiA9IHt9KSB7XG4gIC8vIEZvciBIMiBzdXBwb3J0XG4gIGlmICghQXJyYXkuaXNBcnJheShoZWFkZXJzKSkgcmV0dXJuIGhlYWRlcnNcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICBjb25zdCBrZXkgPSBoZWFkZXJzW2ldLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKVxuICAgIGxldCB2YWwgPSBvYmpba2V5XVxuXG4gICAgaWYgKCF2YWwpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnNbaSArIDFdKSkge1xuICAgICAgICBvYmpba2V5XSA9IGhlYWRlcnNbaSArIDFdLm1hcCh4ID0+IHgudG9TdHJpbmcoJ3V0ZjgnKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9ialtrZXldID0gaGVhZGVyc1tpICsgMV0udG9TdHJpbmcoJ3V0ZjgnKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgICB2YWwgPSBbdmFsXVxuICAgICAgICBvYmpba2V5XSA9IHZhbFxuICAgICAgfVxuICAgICAgdmFsLnB1c2goaGVhZGVyc1tpICsgMV0udG9TdHJpbmcoJ3V0ZjgnKSlcbiAgICB9XG4gIH1cblxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvNDY1MjhcbiAgaWYgKCdjb250ZW50LWxlbmd0aCcgaW4gb2JqICYmICdjb250ZW50LWRpc3Bvc2l0aW9uJyBpbiBvYmopIHtcbiAgICBvYmpbJ2NvbnRlbnQtZGlzcG9zaXRpb24nXSA9IEJ1ZmZlci5mcm9tKG9ialsnY29udGVudC1kaXNwb3NpdGlvbiddKS50b1N0cmluZygnbGF0aW4xJylcbiAgfVxuXG4gIHJldHVybiBvYmpcbn1cblxuZnVuY3Rpb24gcGFyc2VSYXdIZWFkZXJzIChoZWFkZXJzKSB7XG4gIGNvbnN0IHJldCA9IFtdXG4gIGxldCBoYXNDb250ZW50TGVuZ3RoID0gZmFsc2VcbiAgbGV0IGNvbnRlbnREaXNwb3NpdGlvbklkeCA9IC0xXG5cbiAgZm9yIChsZXQgbiA9IDA7IG4gPCBoZWFkZXJzLmxlbmd0aDsgbiArPSAyKSB7XG4gICAgY29uc3Qga2V5ID0gaGVhZGVyc1tuICsgMF0udG9TdHJpbmcoKVxuICAgIGNvbnN0IHZhbCA9IGhlYWRlcnNbbiArIDFdLnRvU3RyaW5nKCd1dGY4JylcblxuICAgIGlmIChrZXkubGVuZ3RoID09PSAxNCAmJiAoa2V5ID09PSAnY29udGVudC1sZW5ndGgnIHx8IGtleS50b0xvd2VyQ2FzZSgpID09PSAnY29udGVudC1sZW5ndGgnKSkge1xuICAgICAgcmV0LnB1c2goa2V5LCB2YWwpXG4gICAgICBoYXNDb250ZW50TGVuZ3RoID0gdHJ1ZVxuICAgIH0gZWxzZSBpZiAoa2V5Lmxlbmd0aCA9PT0gMTkgJiYgKGtleSA9PT0gJ2NvbnRlbnQtZGlzcG9zaXRpb24nIHx8IGtleS50b0xvd2VyQ2FzZSgpID09PSAnY29udGVudC1kaXNwb3NpdGlvbicpKSB7XG4gICAgICBjb250ZW50RGlzcG9zaXRpb25JZHggPSByZXQucHVzaChrZXksIHZhbCkgLSAxXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldC5wdXNoKGtleSwgdmFsKVxuICAgIH1cbiAgfVxuXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvcHVsbC80NjUyOFxuICBpZiAoaGFzQ29udGVudExlbmd0aCAmJiBjb250ZW50RGlzcG9zaXRpb25JZHggIT09IC0xKSB7XG4gICAgcmV0W2NvbnRlbnREaXNwb3NpdGlvbklkeF0gPSBCdWZmZXIuZnJvbShyZXRbY29udGVudERpc3Bvc2l0aW9uSWR4XSkudG9TdHJpbmcoJ2xhdGluMScpXG4gIH1cblxuICByZXR1cm4gcmV0XG59XG5cbmZ1bmN0aW9uIGlzQnVmZmVyIChidWZmZXIpIHtcbiAgLy8gU2VlLCBodHRwczovL2dpdGh1Yi5jb20vbWNvbGxpbmEvdW5kaWNpL3B1bGwvMzE5XG4gIHJldHVybiBidWZmZXIgaW5zdGFuY2VvZiBVaW50OEFycmF5IHx8IEJ1ZmZlci5pc0J1ZmZlcihidWZmZXIpXG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlSGFuZGxlciAoaGFuZGxlciwgbWV0aG9kLCB1cGdyYWRlKSB7XG4gIGlmICghaGFuZGxlciB8fCB0eXBlb2YgaGFuZGxlciAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2hhbmRsZXIgbXVzdCBiZSBhbiBvYmplY3QnKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBoYW5kbGVyLm9uQ29ubmVjdCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkNvbm5lY3QgbWV0aG9kJylcbiAgfVxuXG4gIGlmICh0eXBlb2YgaGFuZGxlci5vbkVycm9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uRXJyb3IgbWV0aG9kJylcbiAgfVxuXG4gIGlmICh0eXBlb2YgaGFuZGxlci5vbkJvZHlTZW50ICE9PSAnZnVuY3Rpb24nICYmIGhhbmRsZXIub25Cb2R5U2VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uQm9keVNlbnQgbWV0aG9kJylcbiAgfVxuXG4gIGlmICh1cGdyYWRlIHx8IG1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSB7XG4gICAgaWYgKHR5cGVvZiBoYW5kbGVyLm9uVXBncmFkZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uVXBncmFkZSBtZXRob2QnKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAodHlwZW9mIGhhbmRsZXIub25IZWFkZXJzICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25IZWFkZXJzIG1ldGhvZCcpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBoYW5kbGVyLm9uRGF0YSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uRGF0YSBtZXRob2QnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaGFuZGxlci5vbkNvbXBsZXRlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25Db21wbGV0ZSBtZXRob2QnKVxuICAgIH1cbiAgfVxufVxuXG4vLyBBIGJvZHkgaXMgZGlzdHVyYmVkIGlmIGl0IGhhcyBiZWVuIHJlYWQgZnJvbSBhbmQgaXQgY2Fubm90XG4vLyBiZSByZS11c2VkIHdpdGhvdXQgbG9zaW5nIHN0YXRlIG9yIGRhdGEuXG5mdW5jdGlvbiBpc0Rpc3R1cmJlZCAoYm9keSkge1xuICByZXR1cm4gISEoYm9keSAmJiAoXG4gICAgc3RyZWFtLmlzRGlzdHVyYmVkXG4gICAgICA/IHN0cmVhbS5pc0Rpc3R1cmJlZChib2R5KSB8fCBib2R5W2tCb2R5VXNlZF0gLy8gVE9ETyAoZml4KTogV2h5IGlzIGJvZHlba0JvZHlVc2VkXSBuZWVkZWQ/XG4gICAgICA6IGJvZHlba0JvZHlVc2VkXSB8fFxuICAgICAgICBib2R5LnJlYWRhYmxlRGlkUmVhZCB8fFxuICAgICAgICAoYm9keS5fcmVhZGFibGVTdGF0ZSAmJiBib2R5Ll9yZWFkYWJsZVN0YXRlLmRhdGFFbWl0dGVkKSB8fFxuICAgICAgICBpc1JlYWRhYmxlQWJvcnRlZChib2R5KVxuICApKVxufVxuXG5mdW5jdGlvbiBpc0Vycm9yZWQgKGJvZHkpIHtcbiAgcmV0dXJuICEhKGJvZHkgJiYgKFxuICAgIHN0cmVhbS5pc0Vycm9yZWRcbiAgICAgID8gc3RyZWFtLmlzRXJyb3JlZChib2R5KVxuICAgICAgOiAvc3RhdGU6ICdlcnJvcmVkJy8udGVzdChub2RlVXRpbC5pbnNwZWN0KGJvZHkpXG4gICAgICApKSlcbn1cblxuZnVuY3Rpb24gaXNSZWFkYWJsZSAoYm9keSkge1xuICByZXR1cm4gISEoYm9keSAmJiAoXG4gICAgc3RyZWFtLmlzUmVhZGFibGVcbiAgICAgID8gc3RyZWFtLmlzUmVhZGFibGUoYm9keSlcbiAgICAgIDogL3N0YXRlOiAncmVhZGFibGUnLy50ZXN0KG5vZGVVdGlsLmluc3BlY3QoYm9keSlcbiAgICAgICkpKVxufVxuXG5mdW5jdGlvbiBnZXRTb2NrZXRJbmZvIChzb2NrZXQpIHtcbiAgcmV0dXJuIHtcbiAgICBsb2NhbEFkZHJlc3M6IHNvY2tldC5sb2NhbEFkZHJlc3MsXG4gICAgbG9jYWxQb3J0OiBzb2NrZXQubG9jYWxQb3J0LFxuICAgIHJlbW90ZUFkZHJlc3M6IHNvY2tldC5yZW1vdGVBZGRyZXNzLFxuICAgIHJlbW90ZVBvcnQ6IHNvY2tldC5yZW1vdGVQb3J0LFxuICAgIHJlbW90ZUZhbWlseTogc29ja2V0LnJlbW90ZUZhbWlseSxcbiAgICB0aW1lb3V0OiBzb2NrZXQudGltZW91dCxcbiAgICBieXRlc1dyaXR0ZW46IHNvY2tldC5ieXRlc1dyaXR0ZW4sXG4gICAgYnl0ZXNSZWFkOiBzb2NrZXQuYnl0ZXNSZWFkXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gKiBjb252ZXJ0SXRlcmFibGVUb0J1ZmZlciAoaXRlcmFibGUpIHtcbiAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBpdGVyYWJsZSkge1xuICAgIHlpZWxkIEJ1ZmZlci5pc0J1ZmZlcihjaHVuaykgPyBjaHVuayA6IEJ1ZmZlci5mcm9tKGNodW5rKVxuICB9XG59XG5cbmxldCBSZWFkYWJsZVN0cmVhbVxuZnVuY3Rpb24gUmVhZGFibGVTdHJlYW1Gcm9tIChpdGVyYWJsZSkge1xuICBpZiAoIVJlYWRhYmxlU3RyZWFtKSB7XG4gICAgUmVhZGFibGVTdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0vd2ViJykuUmVhZGFibGVTdHJlYW1cbiAgfVxuXG4gIGlmIChSZWFkYWJsZVN0cmVhbS5mcm9tKSB7XG4gICAgcmV0dXJuIFJlYWRhYmxlU3RyZWFtLmZyb20oY29udmVydEl0ZXJhYmxlVG9CdWZmZXIoaXRlcmFibGUpKVxuICB9XG5cbiAgbGV0IGl0ZXJhdG9yXG4gIHJldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oXG4gICAge1xuICAgICAgYXN5bmMgc3RhcnQgKCkge1xuICAgICAgICBpdGVyYXRvciA9IGl0ZXJhYmxlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpXG4gICAgICB9LFxuICAgICAgYXN5bmMgcHVsbCAoY29udHJvbGxlcikge1xuICAgICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCBpdGVyYXRvci5uZXh0KClcbiAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgICAgICBjb250cm9sbGVyLmNsb3NlKClcbiAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5pc0J1ZmZlcih2YWx1ZSkgPyB2YWx1ZSA6IEJ1ZmZlci5mcm9tKHZhbHVlKVxuICAgICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShuZXcgVWludDhBcnJheShidWYpKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb250cm9sbGVyLmRlc2lyZWRTaXplID4gMFxuICAgICAgfSxcbiAgICAgIGFzeW5jIGNhbmNlbCAocmVhc29uKSB7XG4gICAgICAgIGF3YWl0IGl0ZXJhdG9yLnJldHVybigpXG4gICAgICB9XG4gICAgfSxcbiAgICAwXG4gIClcbn1cblxuLy8gVGhlIGNodW5rIHNob3VsZCBiZSBhIEZvcm1EYXRhIGluc3RhbmNlIGFuZCBjb250YWluc1xuLy8gYWxsIHRoZSByZXF1aXJlZCBtZXRob2RzLlxuZnVuY3Rpb24gaXNGb3JtRGF0YUxpa2UgKG9iamVjdCkge1xuICByZXR1cm4gKFxuICAgIG9iamVjdCAmJlxuICAgIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmXG4gICAgdHlwZW9mIG9iamVjdC5hcHBlbmQgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2Ygb2JqZWN0LmRlbGV0ZSA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBvYmplY3QuZ2V0ID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIG9iamVjdC5nZXRBbGwgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2Ygb2JqZWN0LmhhcyA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBvYmplY3Quc2V0ID09PSAnZnVuY3Rpb24nICYmXG4gICAgb2JqZWN0W1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdGb3JtRGF0YSdcbiAgKVxufVxuXG5mdW5jdGlvbiB0aHJvd0lmQWJvcnRlZCAoc2lnbmFsKSB7XG4gIGlmICghc2lnbmFsKSB7IHJldHVybiB9XG4gIGlmICh0eXBlb2Ygc2lnbmFsLnRocm93SWZBYm9ydGVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgc2lnbmFsLnRocm93SWZBYm9ydGVkKClcbiAgfSBlbHNlIHtcbiAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgIC8vIERPTUV4Y2VwdGlvbiBub3QgYXZhaWxhYmxlIDwgdjE3LjAuMFxuICAgICAgY29uc3QgZXJyID0gbmV3IEVycm9yKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkJylcbiAgICAgIGVyci5uYW1lID0gJ0Fib3J0RXJyb3InXG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYWRkQWJvcnRMaXN0ZW5lciAoc2lnbmFsLCBsaXN0ZW5lcikge1xuICBpZiAoJ2FkZEV2ZW50TGlzdGVuZXInIGluIHNpZ25hbCkge1xuICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIGxpc3RlbmVyLCB7IG9uY2U6IHRydWUgfSlcbiAgICByZXR1cm4gKCkgPT4gc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgbGlzdGVuZXIpXG4gIH1cbiAgc2lnbmFsLmFkZExpc3RlbmVyKCdhYm9ydCcsIGxpc3RlbmVyKVxuICByZXR1cm4gKCkgPT4gc2lnbmFsLnJlbW92ZUxpc3RlbmVyKCdhYm9ydCcsIGxpc3RlbmVyKVxufVxuXG5jb25zdCBoYXNUb1dlbGxGb3JtZWQgPSAhIVN0cmluZy5wcm90b3R5cGUudG9XZWxsRm9ybWVkXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbFxuICovXG5mdW5jdGlvbiB0b1VTVlN0cmluZyAodmFsKSB7XG4gIGlmIChoYXNUb1dlbGxGb3JtZWQpIHtcbiAgICByZXR1cm4gYCR7dmFsfWAudG9XZWxsRm9ybWVkKClcbiAgfSBlbHNlIGlmIChub2RlVXRpbC50b1VTVlN0cmluZykge1xuICAgIHJldHVybiBub2RlVXRpbC50b1VTVlN0cmluZyh2YWwpXG4gIH1cblxuICByZXR1cm4gYCR7dmFsfWBcbn1cblxuLy8gUGFyc2VkIGFjY29yZGluZ2x5IHRvIFJGQyA5MTEwXG4vLyBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjOTExMCNmaWVsZC5jb250ZW50LXJhbmdlXG5mdW5jdGlvbiBwYXJzZVJhbmdlSGVhZGVyIChyYW5nZSkge1xuICBpZiAocmFuZ2UgPT0gbnVsbCB8fCByYW5nZSA9PT0gJycpIHJldHVybiB7IHN0YXJ0OiAwLCBlbmQ6IG51bGwsIHNpemU6IG51bGwgfVxuXG4gIGNvbnN0IG0gPSByYW5nZSA/IHJhbmdlLm1hdGNoKC9eYnl0ZXMgKFxcZCspLShcXGQrKVxcLyhcXGQrKT8kLykgOiBudWxsXG4gIHJldHVybiBtXG4gICAgPyB7XG4gICAgICAgIHN0YXJ0OiBwYXJzZUludChtWzFdKSxcbiAgICAgICAgZW5kOiBtWzJdID8gcGFyc2VJbnQobVsyXSkgOiBudWxsLFxuICAgICAgICBzaXplOiBtWzNdID8gcGFyc2VJbnQobVszXSkgOiBudWxsXG4gICAgICB9XG4gICAgOiBudWxsXG59XG5cbmNvbnN0IGtFbnVtZXJhYmxlUHJvcGVydHkgPSBPYmplY3QuY3JlYXRlKG51bGwpXG5rRW51bWVyYWJsZVByb3BlcnR5LmVudW1lcmFibGUgPSB0cnVlXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBub3AsXG4gIGlzRGlzdHVyYmVkLFxuICBpc0Vycm9yZWQsXG4gIGlzUmVhZGFibGUsXG4gIHRvVVNWU3RyaW5nLFxuICBpc1JlYWRhYmxlQWJvcnRlZCxcbiAgaXNCbG9iTGlrZSxcbiAgcGFyc2VPcmlnaW4sXG4gIHBhcnNlVVJMLFxuICBnZXRTZXJ2ZXJOYW1lLFxuICBpc1N0cmVhbSxcbiAgaXNJdGVyYWJsZSxcbiAgaXNBc3luY0l0ZXJhYmxlLFxuICBpc0Rlc3Ryb3llZCxcbiAgaGVhZGVyTmFtZVRvU3RyaW5nLFxuICBwYXJzZVJhd0hlYWRlcnMsXG4gIHBhcnNlSGVhZGVycyxcbiAgcGFyc2VLZWVwQWxpdmVUaW1lb3V0LFxuICBkZXN0cm95LFxuICBib2R5TGVuZ3RoLFxuICBkZWVwQ2xvbmUsXG4gIFJlYWRhYmxlU3RyZWFtRnJvbSxcbiAgaXNCdWZmZXIsXG4gIHZhbGlkYXRlSGFuZGxlcixcbiAgZ2V0U29ja2V0SW5mbyxcbiAgaXNGb3JtRGF0YUxpa2UsXG4gIGJ1aWxkVVJMLFxuICB0aHJvd0lmQWJvcnRlZCxcbiAgYWRkQWJvcnRMaXN0ZW5lcixcbiAgcGFyc2VSYW5nZUhlYWRlcixcbiAgbm9kZU1ham9yLFxuICBub2RlTWlub3IsXG4gIG5vZGVIYXNBdXRvU2VsZWN0RmFtaWx5OiBub2RlTWFqb3IgPiAxOCB8fCAobm9kZU1ham9yID09PSAxOCAmJiBub2RlTWlub3IgPj0gMTMpLFxuICBzYWZlSFRUUE1ldGhvZHM6IFsnR0VUJywgJ0hFQUQnLCAnT1BUSU9OUycsICdUUkFDRSddXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5sZXQgZmFzdE5vdyA9IERhdGUubm93KClcbmxldCBmYXN0Tm93VGltZW91dFxuXG5jb25zdCBmYXN0VGltZXJzID0gW11cblxuZnVuY3Rpb24gb25UaW1lb3V0ICgpIHtcbiAgZmFzdE5vdyA9IERhdGUubm93KClcblxuICBsZXQgbGVuID0gZmFzdFRpbWVycy5sZW5ndGhcbiAgbGV0IGlkeCA9IDBcbiAgd2hpbGUgKGlkeCA8IGxlbikge1xuICAgIGNvbnN0IHRpbWVyID0gZmFzdFRpbWVyc1tpZHhdXG5cbiAgICBpZiAodGltZXIuc3RhdGUgPT09IDApIHtcbiAgICAgIHRpbWVyLnN0YXRlID0gZmFzdE5vdyArIHRpbWVyLmRlbGF5XG4gICAgfSBlbHNlIGlmICh0aW1lci5zdGF0ZSA+IDAgJiYgZmFzdE5vdyA+PSB0aW1lci5zdGF0ZSkge1xuICAgICAgdGltZXIuc3RhdGUgPSAtMVxuICAgICAgdGltZXIuY2FsbGJhY2sodGltZXIub3BhcXVlKVxuICAgIH1cblxuICAgIGlmICh0aW1lci5zdGF0ZSA9PT0gLTEpIHtcbiAgICAgIHRpbWVyLnN0YXRlID0gLTJcbiAgICAgIGlmIChpZHggIT09IGxlbiAtIDEpIHtcbiAgICAgICAgZmFzdFRpbWVyc1tpZHhdID0gZmFzdFRpbWVycy5wb3AoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmFzdFRpbWVycy5wb3AoKVxuICAgICAgfVxuICAgICAgbGVuIC09IDFcbiAgICB9IGVsc2Uge1xuICAgICAgaWR4ICs9IDFcbiAgICB9XG4gIH1cblxuICBpZiAoZmFzdFRpbWVycy5sZW5ndGggPiAwKSB7XG4gICAgcmVmcmVzaFRpbWVvdXQoKVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlZnJlc2hUaW1lb3V0ICgpIHtcbiAgaWYgKGZhc3ROb3dUaW1lb3V0ICYmIGZhc3ROb3dUaW1lb3V0LnJlZnJlc2gpIHtcbiAgICBmYXN0Tm93VGltZW91dC5yZWZyZXNoKClcbiAgfSBlbHNlIHtcbiAgICBjbGVhclRpbWVvdXQoZmFzdE5vd1RpbWVvdXQpXG4gICAgZmFzdE5vd1RpbWVvdXQgPSBzZXRUaW1lb3V0KG9uVGltZW91dCwgMWUzKVxuICAgIGlmIChmYXN0Tm93VGltZW91dC51bnJlZikge1xuICAgICAgZmFzdE5vd1RpbWVvdXQudW5yZWYoKVxuICAgIH1cbiAgfVxufVxuXG5jbGFzcyBUaW1lb3V0IHtcbiAgY29uc3RydWN0b3IgKGNhbGxiYWNrLCBkZWxheSwgb3BhcXVlKSB7XG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrXG4gICAgdGhpcy5kZWxheSA9IGRlbGF5XG4gICAgdGhpcy5vcGFxdWUgPSBvcGFxdWVcblxuICAgIC8vICAtMiBub3QgaW4gdGltZXIgbGlzdFxuICAgIC8vICAtMSBpbiB0aW1lciBsaXN0IGJ1dCBpbmFjdGl2ZVxuICAgIC8vICAgMCBpbiB0aW1lciBsaXN0IHdhaXRpbmcgZm9yIHRpbWVcbiAgICAvLyA+IDAgaW4gdGltZXIgbGlzdCB3YWl0aW5nIGZvciB0aW1lIHRvIGV4cGlyZVxuICAgIHRoaXMuc3RhdGUgPSAtMlxuXG4gICAgdGhpcy5yZWZyZXNoKClcbiAgfVxuXG4gIHJlZnJlc2ggKCkge1xuICAgIGlmICh0aGlzLnN0YXRlID09PSAtMikge1xuICAgICAgZmFzdFRpbWVycy5wdXNoKHRoaXMpXG4gICAgICBpZiAoIWZhc3ROb3dUaW1lb3V0IHx8IGZhc3RUaW1lcnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJlZnJlc2hUaW1lb3V0KClcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnN0YXRlID0gMFxuICB9XG5cbiAgY2xlYXIgKCkge1xuICAgIHRoaXMuc3RhdGUgPSAtMVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXRUaW1lb3V0IChjYWxsYmFjaywgZGVsYXksIG9wYXF1ZSkge1xuICAgIHJldHVybiBkZWxheSA8IDFlM1xuICAgICAgPyBzZXRUaW1lb3V0KGNhbGxiYWNrLCBkZWxheSwgb3BhcXVlKVxuICAgICAgOiBuZXcgVGltZW91dChjYWxsYmFjaywgZGVsYXksIG9wYXF1ZSlcbiAgfSxcbiAgY2xlYXJUaW1lb3V0ICh0aW1lb3V0KSB7XG4gICAgaWYgKHRpbWVvdXQgaW5zdGFuY2VvZiBUaW1lb3V0KSB7XG4gICAgICB0aW1lb3V0LmNsZWFyKClcbiAgICB9IGVsc2Uge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpXG4gICAgfVxuICB9XG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG4vKipcbiAqIENvcHlyaWdodCBCcmlhbiBXaGl0ZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tc2NkZXgvc3RyZWFtc2VhcmNoXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG9cbiAqIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlXG4gKiByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3JcbiAqIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkdcbiAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1NcbiAqIElOIFRIRSBTT0ZUV0FSRS5cbiAqXG4gKiBCYXNlZCBoZWF2aWx5IG9uIHRoZSBTdHJlYW1pbmcgQm95ZXItTW9vcmUtSG9yc3Bvb2wgQysrIGltcGxlbWVudGF0aW9uXG4gKiBieSBIb25nbGkgTGFpIGF0OiBodHRwczovL2dpdGh1Yi5jb20vRm9vQmFyV2lkZ2V0L2JveWVyLW1vb3JlLWhvcnNwb29sXG4gKi9cbmNvbnN0IEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ25vZGU6ZXZlbnRzJykuRXZlbnRFbWl0dGVyXG5jb25zdCBpbmhlcml0cyA9IHJlcXVpcmUoJ25vZGU6dXRpbCcpLmluaGVyaXRzXG5cbmZ1bmN0aW9uIFNCTUggKG5lZWRsZSkge1xuICBpZiAodHlwZW9mIG5lZWRsZSA9PT0gJ3N0cmluZycpIHtcbiAgICBuZWVkbGUgPSBCdWZmZXIuZnJvbShuZWVkbGUpXG4gIH1cblxuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihuZWVkbGUpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIG5lZWRsZSBoYXMgdG8gYmUgYSBTdHJpbmcgb3IgYSBCdWZmZXIuJylcbiAgfVxuXG4gIGNvbnN0IG5lZWRsZUxlbmd0aCA9IG5lZWRsZS5sZW5ndGhcblxuICBpZiAobmVlZGxlTGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgbmVlZGxlIGNhbm5vdCBiZSBhbiBlbXB0eSBTdHJpbmcvQnVmZmVyLicpXG4gIH1cblxuICBpZiAobmVlZGxlTGVuZ3RoID4gMjU2KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgbmVlZGxlIGNhbm5vdCBoYXZlIGEgbGVuZ3RoIGJpZ2dlciB0aGFuIDI1Ni4nKVxuICB9XG5cbiAgdGhpcy5tYXhNYXRjaGVzID0gSW5maW5pdHlcbiAgdGhpcy5tYXRjaGVzID0gMFxuXG4gIHRoaXMuX29jYyA9IG5ldyBBcnJheSgyNTYpXG4gICAgLmZpbGwobmVlZGxlTGVuZ3RoKSAvLyBJbml0aWFsaXplIG9jY3VycmVuY2UgdGFibGUuXG4gIHRoaXMuX2xvb2tiZWhpbmRfc2l6ZSA9IDBcbiAgdGhpcy5fbmVlZGxlID0gbmVlZGxlXG4gIHRoaXMuX2J1ZnBvcyA9IDBcblxuICB0aGlzLl9sb29rYmVoaW5kID0gQnVmZmVyLmFsbG9jKG5lZWRsZUxlbmd0aClcblxuICAvLyBQb3B1bGF0ZSBvY2N1cnJlbmNlIHRhYmxlIHdpdGggYW5hbHlzaXMgb2YgdGhlIG5lZWRsZSxcbiAgLy8gaWdub3JpbmcgbGFzdCBsZXR0ZXIuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbmVlZGxlTGVuZ3RoIC0gMTsgKytpKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdmFyXG4gICAgdGhpcy5fb2NjW25lZWRsZVtpXV0gPSBuZWVkbGVMZW5ndGggLSAxIC0gaVxuICB9XG59XG5pbmhlcml0cyhTQk1ILCBFdmVudEVtaXR0ZXIpXG5cblNCTUgucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLl9sb29rYmVoaW5kX3NpemUgPSAwXG4gIHRoaXMubWF0Y2hlcyA9IDBcbiAgdGhpcy5fYnVmcG9zID0gMFxufVxuXG5TQk1ILnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGNodW5rLCBwb3MpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoY2h1bmspKSB7XG4gICAgY2h1bmsgPSBCdWZmZXIuZnJvbShjaHVuaywgJ2JpbmFyeScpXG4gIH1cbiAgY29uc3QgY2hsZW4gPSBjaHVuay5sZW5ndGhcbiAgdGhpcy5fYnVmcG9zID0gcG9zIHx8IDBcbiAgbGV0IHJcbiAgd2hpbGUgKHIgIT09IGNobGVuICYmIHRoaXMubWF0Y2hlcyA8IHRoaXMubWF4TWF0Y2hlcykgeyByID0gdGhpcy5fc2JtaF9mZWVkKGNodW5rKSB9XG4gIHJldHVybiByXG59XG5cblNCTUgucHJvdG90eXBlLl9zYm1oX2ZlZWQgPSBmdW5jdGlvbiAoZGF0YSkge1xuICBjb25zdCBsZW4gPSBkYXRhLmxlbmd0aFxuICBjb25zdCBuZWVkbGUgPSB0aGlzLl9uZWVkbGVcbiAgY29uc3QgbmVlZGxlTGVuZ3RoID0gbmVlZGxlLmxlbmd0aFxuICBjb25zdCBsYXN0TmVlZGxlQ2hhciA9IG5lZWRsZVtuZWVkbGVMZW5ndGggLSAxXVxuXG4gIC8vIFBvc2l0aXZlOiBwb2ludHMgdG8gYSBwb3NpdGlvbiBpbiBgZGF0YWBcbiAgLy8gICAgICAgICAgIHBvcyA9PSAzIHBvaW50cyB0byBkYXRhWzNdXG4gIC8vIE5lZ2F0aXZlOiBwb2ludHMgdG8gYSBwb3NpdGlvbiBpbiB0aGUgbG9va2JlaGluZCBidWZmZXJcbiAgLy8gICAgICAgICAgIHBvcyA9PSAtMiBwb2ludHMgdG8gbG9va2JlaGluZFtsb29rYmVoaW5kX3NpemUgLSAyXVxuICBsZXQgcG9zID0gLXRoaXMuX2xvb2tiZWhpbmRfc2l6ZVxuICBsZXQgY2hcblxuICBpZiAocG9zIDwgMCkge1xuICAgIC8vIExvb2tiZWhpbmQgYnVmZmVyIGlzIG5vdCBlbXB0eS4gUGVyZm9ybSBCb3llci1Nb29yZS1Ib3JzcG9vbFxuICAgIC8vIHNlYXJjaCB3aXRoIGNoYXJhY3RlciBsb29rdXAgY29kZSB0aGF0IGNvbnNpZGVycyBib3RoIHRoZVxuICAgIC8vIGxvb2tiZWhpbmQgYnVmZmVyIGFuZCB0aGUgY3VycmVudCByb3VuZCdzIGhheXN0YWNrIGRhdGEuXG4gICAgLy9cbiAgICAvLyBMb29wIHVudGlsXG4gICAgLy8gICB0aGVyZSBpcyBhIG1hdGNoLlxuICAgIC8vIG9yIHVudGlsXG4gICAgLy8gICB3ZSd2ZSBtb3ZlZCBwYXN0IHRoZSBwb3NpdGlvbiB0aGF0IHJlcXVpcmVzIHRoZVxuICAgIC8vICAgbG9va2JlaGluZCBidWZmZXIuIEluIHRoaXMgY2FzZSB3ZSBzd2l0Y2ggdG8gdGhlXG4gICAgLy8gICBvcHRpbWl6ZWQgbG9vcC5cbiAgICAvLyBvciB1bnRpbFxuICAgIC8vICAgdGhlIGNoYXJhY3RlciB0byBsb29rIGF0IGxpZXMgb3V0c2lkZSB0aGUgaGF5c3RhY2suXG4gICAgd2hpbGUgKHBvcyA8IDAgJiYgcG9zIDw9IGxlbiAtIG5lZWRsZUxlbmd0aCkge1xuICAgICAgY2ggPSB0aGlzLl9zYm1oX2xvb2t1cF9jaGFyKGRhdGEsIHBvcyArIG5lZWRsZUxlbmd0aCAtIDEpXG5cbiAgICAgIGlmIChcbiAgICAgICAgY2ggPT09IGxhc3ROZWVkbGVDaGFyICYmXG4gICAgICAgIHRoaXMuX3NibWhfbWVtY21wKGRhdGEsIHBvcywgbmVlZGxlTGVuZ3RoIC0gMSlcbiAgICAgICkge1xuICAgICAgICB0aGlzLl9sb29rYmVoaW5kX3NpemUgPSAwXG4gICAgICAgICsrdGhpcy5tYXRjaGVzXG4gICAgICAgIHRoaXMuZW1pdCgnaW5mbycsIHRydWUpXG5cbiAgICAgICAgcmV0dXJuICh0aGlzLl9idWZwb3MgPSBwb3MgKyBuZWVkbGVMZW5ndGgpXG4gICAgICB9XG4gICAgICBwb3MgKz0gdGhpcy5fb2NjW2NoXVxuICAgIH1cblxuICAgIC8vIE5vIG1hdGNoLlxuXG4gICAgaWYgKHBvcyA8IDApIHtcbiAgICAgIC8vIFRoZXJlJ3MgdG9vIGZldyBkYXRhIGZvciBCb3llci1Nb29yZS1Ib3JzcG9vbCB0byBydW4sXG4gICAgICAvLyBzbyBsZXQncyB1c2UgYSBkaWZmZXJlbnQgYWxnb3JpdGhtIHRvIHNraXAgYXMgbXVjaCBhc1xuICAgICAgLy8gd2UgY2FuLlxuICAgICAgLy8gRm9yd2FyZCBwb3MgdW50aWxcbiAgICAgIC8vICAgdGhlIHRyYWlsaW5nIHBhcnQgb2YgbG9va2JlaGluZCArIGRhdGFcbiAgICAgIC8vICAgbG9va3MgbGlrZSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZWVkbGVcbiAgICAgIC8vIG9yIHVudGlsXG4gICAgICAvLyAgIHBvcyA9PSAwXG4gICAgICB3aGlsZSAocG9zIDwgMCAmJiAhdGhpcy5fc2JtaF9tZW1jbXAoZGF0YSwgcG9zLCBsZW4gLSBwb3MpKSB7ICsrcG9zIH1cbiAgICB9XG5cbiAgICBpZiAocG9zID49IDApIHtcbiAgICAgIC8vIERpc2NhcmQgbG9va2JlaGluZCBidWZmZXIuXG4gICAgICB0aGlzLmVtaXQoJ2luZm8nLCBmYWxzZSwgdGhpcy5fbG9va2JlaGluZCwgMCwgdGhpcy5fbG9va2JlaGluZF9zaXplKVxuICAgICAgdGhpcy5fbG9va2JlaGluZF9zaXplID0gMFxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDdXQgb2ZmIHBhcnQgb2YgdGhlIGxvb2tiZWhpbmQgYnVmZmVyIHRoYXQgaGFzXG4gICAgICAvLyBiZWVuIHByb2Nlc3NlZCBhbmQgYXBwZW5kIHRoZSBlbnRpcmUgaGF5c3RhY2tcbiAgICAgIC8vIGludG8gaXQuXG4gICAgICBjb25zdCBieXRlc1RvQ3V0T2ZmID0gdGhpcy5fbG9va2JlaGluZF9zaXplICsgcG9zXG4gICAgICBpZiAoYnl0ZXNUb0N1dE9mZiA+IDApIHtcbiAgICAgICAgLy8gVGhlIGN1dCBvZmYgZGF0YSBpcyBndWFyYW50ZWVkIG5vdCB0byBjb250YWluIHRoZSBuZWVkbGUuXG4gICAgICAgIHRoaXMuZW1pdCgnaW5mbycsIGZhbHNlLCB0aGlzLl9sb29rYmVoaW5kLCAwLCBieXRlc1RvQ3V0T2ZmKVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9sb29rYmVoaW5kLmNvcHkodGhpcy5fbG9va2JlaGluZCwgMCwgYnl0ZXNUb0N1dE9mZixcbiAgICAgICAgdGhpcy5fbG9va2JlaGluZF9zaXplIC0gYnl0ZXNUb0N1dE9mZilcbiAgICAgIHRoaXMuX2xvb2tiZWhpbmRfc2l6ZSAtPSBieXRlc1RvQ3V0T2ZmXG5cbiAgICAgIGRhdGEuY29weSh0aGlzLl9sb29rYmVoaW5kLCB0aGlzLl9sb29rYmVoaW5kX3NpemUpXG4gICAgICB0aGlzLl9sb29rYmVoaW5kX3NpemUgKz0gbGVuXG5cbiAgICAgIHRoaXMuX2J1ZnBvcyA9IGxlblxuICAgICAgcmV0dXJuIGxlblxuICAgIH1cbiAgfVxuXG4gIHBvcyArPSAocG9zID49IDApICogdGhpcy5fYnVmcG9zXG5cbiAgLy8gTG9va2JlaGluZCBidWZmZXIgaXMgbm93IGVtcHR5LiBXZSBvbmx5IG5lZWQgdG8gY2hlY2sgaWYgdGhlXG4gIC8vIG5lZWRsZSBpcyBpbiB0aGUgaGF5c3RhY2suXG4gIGlmIChkYXRhLmluZGV4T2YobmVlZGxlLCBwb3MpICE9PSAtMSkge1xuICAgIHBvcyA9IGRhdGEuaW5kZXhPZihuZWVkbGUsIHBvcylcbiAgICArK3RoaXMubWF0Y2hlc1xuICAgIGlmIChwb3MgPiAwKSB7IHRoaXMuZW1pdCgnaW5mbycsIHRydWUsIGRhdGEsIHRoaXMuX2J1ZnBvcywgcG9zKSB9IGVsc2UgeyB0aGlzLmVtaXQoJ2luZm8nLCB0cnVlKSB9XG5cbiAgICByZXR1cm4gKHRoaXMuX2J1ZnBvcyA9IHBvcyArIG5lZWRsZUxlbmd0aClcbiAgfSBlbHNlIHtcbiAgICBwb3MgPSBsZW4gLSBuZWVkbGVMZW5ndGhcbiAgfVxuXG4gIC8vIFRoZXJlIHdhcyBubyBtYXRjaC4gSWYgdGhlcmUncyB0cmFpbGluZyBoYXlzdGFjayBkYXRhIHRoYXQgd2UgY2Fubm90XG4gIC8vIG1hdGNoIHlldCB1c2luZyB0aGUgQm95ZXItTW9vcmUtSG9yc3Bvb2wgYWxnb3JpdGhtIChiZWNhdXNlIHRoZSB0cmFpbGluZ1xuICAvLyBkYXRhIGlzIGxlc3MgdGhhbiB0aGUgbmVlZGxlIHNpemUpIHRoZW4gbWF0Y2ggdXNpbmcgYSBtb2RpZmllZFxuICAvLyBhbGdvcml0aG0gdGhhdCBzdGFydHMgbWF0Y2hpbmcgZnJvbSB0aGUgYmVnaW5uaW5nIGluc3RlYWQgb2YgdGhlIGVuZC5cbiAgLy8gV2hhdGV2ZXIgdHJhaWxpbmcgZGF0YSBpcyBsZWZ0IGFmdGVyIHJ1bm5pbmcgdGhpcyBhbGdvcml0aG0gaXMgYWRkZWQgdG9cbiAgLy8gdGhlIGxvb2tiZWhpbmQgYnVmZmVyLlxuICB3aGlsZSAoXG4gICAgcG9zIDwgbGVuICYmXG4gICAgKFxuICAgICAgZGF0YVtwb3NdICE9PSBuZWVkbGVbMF0gfHxcbiAgICAgIChcbiAgICAgICAgKEJ1ZmZlci5jb21wYXJlKFxuICAgICAgICAgIGRhdGEuc3ViYXJyYXkocG9zLCBwb3MgKyBsZW4gLSBwb3MpLFxuICAgICAgICAgIG5lZWRsZS5zdWJhcnJheSgwLCBsZW4gLSBwb3MpXG4gICAgICAgICkgIT09IDApXG4gICAgICApXG4gICAgKVxuICApIHtcbiAgICArK3Bvc1xuICB9XG4gIGlmIChwb3MgPCBsZW4pIHtcbiAgICBkYXRhLmNvcHkodGhpcy5fbG9va2JlaGluZCwgMCwgcG9zLCBwb3MgKyAobGVuIC0gcG9zKSlcbiAgICB0aGlzLl9sb29rYmVoaW5kX3NpemUgPSBsZW4gLSBwb3NcbiAgfVxuXG4gIC8vIEV2ZXJ5dGhpbmcgdW50aWwgcG9zIGlzIGd1YXJhbnRlZWQgbm90IHRvIGNvbnRhaW4gbmVlZGxlIGRhdGEuXG4gIGlmIChwb3MgPiAwKSB7IHRoaXMuZW1pdCgnaW5mbycsIGZhbHNlLCBkYXRhLCB0aGlzLl9idWZwb3MsIHBvcyA8IGxlbiA/IHBvcyA6IGxlbikgfVxuXG4gIHRoaXMuX2J1ZnBvcyA9IGxlblxuICByZXR1cm4gbGVuXG59XG5cblNCTUgucHJvdG90eXBlLl9zYm1oX2xvb2t1cF9jaGFyID0gZnVuY3Rpb24gKGRhdGEsIHBvcykge1xuICByZXR1cm4gKHBvcyA8IDApXG4gICAgPyB0aGlzLl9sb29rYmVoaW5kW3RoaXMuX2xvb2tiZWhpbmRfc2l6ZSArIHBvc11cbiAgICA6IGRhdGFbcG9zXVxufVxuXG5TQk1ILnByb3RvdHlwZS5fc2JtaF9tZW1jbXAgPSBmdW5jdGlvbiAoZGF0YSwgcG9zLCBsZW4pIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXZhclxuICAgIGlmICh0aGlzLl9zYm1oX2xvb2t1cF9jaGFyKGRhdGEsIHBvcyArIGkpICE9PSB0aGlzLl9uZWVkbGVbaV0pIHsgcmV0dXJuIGZhbHNlIH1cbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNCTUhcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGluaGVyaXRzID0gcmVxdWlyZSgnbm9kZTp1dGlsJykuaW5oZXJpdHNcbmNvbnN0IFJlYWRhYmxlU3RyZWFtID0gcmVxdWlyZSgnbm9kZTpzdHJlYW0nKS5SZWFkYWJsZVxuXG5mdW5jdGlvbiBQYXJ0U3RyZWFtIChvcHRzKSB7XG4gIFJlYWRhYmxlU3RyZWFtLmNhbGwodGhpcywgb3B0cylcbn1cbmluaGVyaXRzKFBhcnRTdHJlYW0sIFJlYWRhYmxlU3RyZWFtKVxuXG5QYXJ0U3RyZWFtLnByb3RvdHlwZS5fcmVhZCA9IGZ1bmN0aW9uIChuKSB7fVxuXG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRTdHJlYW1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0TGltaXQgKGxpbWl0cywgbmFtZSwgZGVmYXVsdExpbWl0KSB7XG4gIGlmIChcbiAgICAhbGltaXRzIHx8XG4gICAgbGltaXRzW25hbWVdID09PSB1bmRlZmluZWQgfHxcbiAgICBsaW1pdHNbbmFtZV0gPT09IG51bGxcbiAgKSB7IHJldHVybiBkZWZhdWx0TGltaXQgfVxuXG4gIGlmIChcbiAgICB0eXBlb2YgbGltaXRzW25hbWVdICE9PSAnbnVtYmVyJyB8fFxuICAgIGlzTmFOKGxpbWl0c1tuYW1lXSlcbiAgKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoJ0xpbWl0ICcgKyBuYW1lICsgJyBpcyBub3QgYSB2YWxpZCBudW1iZXInKSB9XG5cbiAgcmV0dXJuIGxpbWl0c1tuYW1lXVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnbm9kZTpldmVudHMnKS5FdmVudEVtaXR0ZXJcbmNvbnN0IGluaGVyaXRzID0gcmVxdWlyZSgnbm9kZTp1dGlsJykuaW5oZXJpdHNcbmNvbnN0IGdldExpbWl0ID0gcmVxdWlyZSgnLi4vLi4vLi4vbGliL3V0aWxzL2dldExpbWl0JylcblxuY29uc3QgU3RyZWFtU2VhcmNoID0gcmVxdWlyZSgnLi4vLi4vc3RyZWFtc2VhcmNoL3NibWgnKVxuXG5jb25zdCBCX0RDUkxGID0gQnVmZmVyLmZyb20oJ1xcclxcblxcclxcbicpXG5jb25zdCBSRV9DUkxGID0gL1xcclxcbi9nXG5jb25zdCBSRV9IRFIgPSAvXihbXjpdKyk6WyBcXHRdPyhbXFx4MDAtXFx4RkZdKyk/JC8gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb250cm9sLXJlZ2V4XG5cbmZ1bmN0aW9uIEhlYWRlclBhcnNlciAoY2ZnKSB7XG4gIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpXG5cbiAgY2ZnID0gY2ZnIHx8IHt9XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIHRoaXMubnJlYWQgPSAwXG4gIHRoaXMubWF4ZWQgPSBmYWxzZVxuICB0aGlzLm5wYWlycyA9IDBcbiAgdGhpcy5tYXhIZWFkZXJQYWlycyA9IGdldExpbWl0KGNmZywgJ21heEhlYWRlclBhaXJzJywgMjAwMClcbiAgdGhpcy5tYXhIZWFkZXJTaXplID0gZ2V0TGltaXQoY2ZnLCAnbWF4SGVhZGVyU2l6ZScsIDgwICogMTAyNClcbiAgdGhpcy5idWZmZXIgPSAnJ1xuICB0aGlzLmhlYWRlciA9IHt9XG4gIHRoaXMuZmluaXNoZWQgPSBmYWxzZVxuICB0aGlzLnNzID0gbmV3IFN0cmVhbVNlYXJjaChCX0RDUkxGKVxuICB0aGlzLnNzLm9uKCdpbmZvJywgZnVuY3Rpb24gKGlzTWF0Y2gsIGRhdGEsIHN0YXJ0LCBlbmQpIHtcbiAgICBpZiAoZGF0YSAmJiAhc2VsZi5tYXhlZCkge1xuICAgICAgaWYgKHNlbGYubnJlYWQgKyBlbmQgLSBzdGFydCA+PSBzZWxmLm1heEhlYWRlclNpemUpIHtcbiAgICAgICAgZW5kID0gc2VsZi5tYXhIZWFkZXJTaXplIC0gc2VsZi5ucmVhZCArIHN0YXJ0XG4gICAgICAgIHNlbGYubnJlYWQgPSBzZWxmLm1heEhlYWRlclNpemVcbiAgICAgICAgc2VsZi5tYXhlZCA9IHRydWVcbiAgICAgIH0gZWxzZSB7IHNlbGYubnJlYWQgKz0gKGVuZCAtIHN0YXJ0KSB9XG5cbiAgICAgIHNlbGYuYnVmZmVyICs9IGRhdGEudG9TdHJpbmcoJ2JpbmFyeScsIHN0YXJ0LCBlbmQpXG4gICAgfVxuICAgIGlmIChpc01hdGNoKSB7IHNlbGYuX2ZpbmlzaCgpIH1cbiAgfSlcbn1cbmluaGVyaXRzKEhlYWRlclBhcnNlciwgRXZlbnRFbWl0dGVyKVxuXG5IZWFkZXJQYXJzZXIucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoZGF0YSkge1xuICBjb25zdCByID0gdGhpcy5zcy5wdXNoKGRhdGEpXG4gIGlmICh0aGlzLmZpbmlzaGVkKSB7IHJldHVybiByIH1cbn1cblxuSGVhZGVyUGFyc2VyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5maW5pc2hlZCA9IGZhbHNlXG4gIHRoaXMuYnVmZmVyID0gJydcbiAgdGhpcy5oZWFkZXIgPSB7fVxuICB0aGlzLnNzLnJlc2V0KClcbn1cblxuSGVhZGVyUGFyc2VyLnByb3RvdHlwZS5fZmluaXNoID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5idWZmZXIpIHsgdGhpcy5fcGFyc2VIZWFkZXIoKSB9XG4gIHRoaXMuc3MubWF0Y2hlcyA9IHRoaXMuc3MubWF4TWF0Y2hlc1xuICBjb25zdCBoZWFkZXIgPSB0aGlzLmhlYWRlclxuICB0aGlzLmhlYWRlciA9IHt9XG4gIHRoaXMuYnVmZmVyID0gJydcbiAgdGhpcy5maW5pc2hlZCA9IHRydWVcbiAgdGhpcy5ucmVhZCA9IHRoaXMubnBhaXJzID0gMFxuICB0aGlzLm1heGVkID0gZmFsc2VcbiAgdGhpcy5lbWl0KCdoZWFkZXInLCBoZWFkZXIpXG59XG5cbkhlYWRlclBhcnNlci5wcm90b3R5cGUuX3BhcnNlSGVhZGVyID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5ucGFpcnMgPT09IHRoaXMubWF4SGVhZGVyUGFpcnMpIHsgcmV0dXJuIH1cblxuICBjb25zdCBsaW5lcyA9IHRoaXMuYnVmZmVyLnNwbGl0KFJFX0NSTEYpXG4gIGNvbnN0IGxlbiA9IGxpbmVzLmxlbmd0aFxuICBsZXQgbSwgaFxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby12YXJcbiAgICBpZiAobGluZXNbaV0ubGVuZ3RoID09PSAwKSB7IGNvbnRpbnVlIH1cbiAgICBpZiAobGluZXNbaV1bMF0gPT09ICdcXHQnIHx8IGxpbmVzW2ldWzBdID09PSAnICcpIHtcbiAgICAgIC8vIGZvbGRlZCBoZWFkZXIgY29udGVudFxuICAgICAgLy8gUkZDMjgyMiBzYXlzIHRvIGp1c3QgcmVtb3ZlIHRoZSBDUkxGIGFuZCBub3QgdGhlIHdoaXRlc3BhY2UgZm9sbG93aW5nXG4gICAgICAvLyBpdCwgc28gd2UgZm9sbG93IHRoZSBSRkMgYW5kIGluY2x1ZGUgdGhlIGxlYWRpbmcgd2hpdGVzcGFjZSAuLi5cbiAgICAgIGlmIChoKSB7XG4gICAgICAgIHRoaXMuaGVhZGVyW2hdW3RoaXMuaGVhZGVyW2hdLmxlbmd0aCAtIDFdICs9IGxpbmVzW2ldXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcG9zQ29sb24gPSBsaW5lc1tpXS5pbmRleE9mKCc6JylcbiAgICBpZiAoXG4gICAgICBwb3NDb2xvbiA9PT0gLTEgfHxcbiAgICAgIHBvc0NvbG9uID09PSAwXG4gICAgKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgbSA9IFJFX0hEUi5leGVjKGxpbmVzW2ldKVxuICAgIGggPSBtWzFdLnRvTG93ZXJDYXNlKClcbiAgICB0aGlzLmhlYWRlcltoXSA9IHRoaXMuaGVhZGVyW2hdIHx8IFtdXG4gICAgdGhpcy5oZWFkZXJbaF0ucHVzaCgobVsyXSB8fCAnJykpXG4gICAgaWYgKCsrdGhpcy5ucGFpcnMgPT09IHRoaXMubWF4SGVhZGVyUGFpcnMpIHsgYnJlYWsgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gSGVhZGVyUGFyc2VyXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBXcml0YWJsZVN0cmVhbSA9IHJlcXVpcmUoJ25vZGU6c3RyZWFtJykuV3JpdGFibGVcbmNvbnN0IGluaGVyaXRzID0gcmVxdWlyZSgnbm9kZTp1dGlsJykuaW5oZXJpdHNcblxuY29uc3QgU3RyZWFtU2VhcmNoID0gcmVxdWlyZSgnLi4vLi4vc3RyZWFtc2VhcmNoL3NibWgnKVxuXG5jb25zdCBQYXJ0U3RyZWFtID0gcmVxdWlyZSgnLi9QYXJ0U3RyZWFtJylcbmNvbnN0IEhlYWRlclBhcnNlciA9IHJlcXVpcmUoJy4vSGVhZGVyUGFyc2VyJylcblxuY29uc3QgREFTSCA9IDQ1XG5jb25zdCBCX09ORURBU0ggPSBCdWZmZXIuZnJvbSgnLScpXG5jb25zdCBCX0NSTEYgPSBCdWZmZXIuZnJvbSgnXFxyXFxuJylcbmNvbnN0IEVNUFRZX0ZOID0gZnVuY3Rpb24gKCkge31cblxuZnVuY3Rpb24gRGljZXIgKGNmZykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRGljZXIpKSB7IHJldHVybiBuZXcgRGljZXIoY2ZnKSB9XG4gIFdyaXRhYmxlU3RyZWFtLmNhbGwodGhpcywgY2ZnKVxuXG4gIGlmICghY2ZnIHx8ICghY2ZnLmhlYWRlckZpcnN0ICYmIHR5cGVvZiBjZmcuYm91bmRhcnkgIT09ICdzdHJpbmcnKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCdCb3VuZGFyeSByZXF1aXJlZCcpIH1cblxuICBpZiAodHlwZW9mIGNmZy5ib3VuZGFyeSA9PT0gJ3N0cmluZycpIHsgdGhpcy5zZXRCb3VuZGFyeShjZmcuYm91bmRhcnkpIH0gZWxzZSB7IHRoaXMuX2JwYXJzZXIgPSB1bmRlZmluZWQgfVxuXG4gIHRoaXMuX2hlYWRlckZpcnN0ID0gY2ZnLmhlYWRlckZpcnN0XG5cbiAgdGhpcy5fZGFzaGVzID0gMFxuICB0aGlzLl9wYXJ0cyA9IDBcbiAgdGhpcy5fZmluaXNoZWQgPSBmYWxzZVxuICB0aGlzLl9yZWFsRmluaXNoID0gZmFsc2VcbiAgdGhpcy5faXNQcmVhbWJsZSA9IHRydWVcbiAgdGhpcy5fanVzdE1hdGNoZWQgPSBmYWxzZVxuICB0aGlzLl9maXJzdFdyaXRlID0gdHJ1ZVxuICB0aGlzLl9pbkhlYWRlciA9IHRydWVcbiAgdGhpcy5fcGFydCA9IHVuZGVmaW5lZFxuICB0aGlzLl9jYiA9IHVuZGVmaW5lZFxuICB0aGlzLl9pZ25vcmVEYXRhID0gZmFsc2VcbiAgdGhpcy5fcGFydE9wdHMgPSB7IGhpZ2hXYXRlck1hcms6IGNmZy5wYXJ0SHdtIH1cbiAgdGhpcy5fcGF1c2UgPSBmYWxzZVxuXG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIHRoaXMuX2hwYXJzZXIgPSBuZXcgSGVhZGVyUGFyc2VyKGNmZylcbiAgdGhpcy5faHBhcnNlci5vbignaGVhZGVyJywgZnVuY3Rpb24gKGhlYWRlcikge1xuICAgIHNlbGYuX2luSGVhZGVyID0gZmFsc2VcbiAgICBzZWxmLl9wYXJ0LmVtaXQoJ2hlYWRlcicsIGhlYWRlcilcbiAgfSlcbn1cbmluaGVyaXRzKERpY2VyLCBXcml0YWJsZVN0cmVhbSlcblxuRGljZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiAoZXYpIHtcbiAgaWYgKGV2ID09PSAnZmluaXNoJyAmJiAhdGhpcy5fcmVhbEZpbmlzaCkge1xuICAgIGlmICghdGhpcy5fZmluaXNoZWQpIHtcbiAgICAgIGNvbnN0IHNlbGYgPSB0aGlzXG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2VsZi5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcignVW5leHBlY3RlZCBlbmQgb2YgbXVsdGlwYXJ0IGRhdGEnKSlcbiAgICAgICAgaWYgKHNlbGYuX3BhcnQgJiYgIXNlbGYuX2lnbm9yZURhdGEpIHtcbiAgICAgICAgICBjb25zdCB0eXBlID0gKHNlbGYuX2lzUHJlYW1ibGUgPyAnUHJlYW1ibGUnIDogJ1BhcnQnKVxuICAgICAgICAgIHNlbGYuX3BhcnQuZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IodHlwZSArICcgdGVybWluYXRlZCBlYXJseSBkdWUgdG8gdW5leHBlY3RlZCBlbmQgb2YgbXVsdGlwYXJ0IGRhdGEnKSlcbiAgICAgICAgICBzZWxmLl9wYXJ0LnB1c2gobnVsbClcbiAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHNlbGYuX3JlYWxGaW5pc2ggPSB0cnVlXG4gICAgICAgICAgICBzZWxmLmVtaXQoJ2ZpbmlzaCcpXG4gICAgICAgICAgICBzZWxmLl9yZWFsRmluaXNoID0gZmFsc2VcbiAgICAgICAgICB9KVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIHNlbGYuX3JlYWxGaW5pc2ggPSB0cnVlXG4gICAgICAgIHNlbGYuZW1pdCgnZmluaXNoJylcbiAgICAgICAgc2VsZi5fcmVhbEZpbmlzaCA9IGZhbHNlXG4gICAgICB9KVxuICAgIH1cbiAgfSBlbHNlIHsgV3JpdGFibGVTdHJlYW0ucHJvdG90eXBlLmVtaXQuYXBwbHkodGhpcywgYXJndW1lbnRzKSB9XG59XG5cbkRpY2VyLnByb3RvdHlwZS5fd3JpdGUgPSBmdW5jdGlvbiAoZGF0YSwgZW5jb2RpbmcsIGNiKSB7XG4gIC8vIGlnbm9yZSB1bmV4cGVjdGVkIGRhdGEgKGUuZy4gZXh0cmEgdHJhaWxlciBkYXRhIGFmdGVyIGZpbmlzaGVkKVxuICBpZiAoIXRoaXMuX2hwYXJzZXIgJiYgIXRoaXMuX2JwYXJzZXIpIHsgcmV0dXJuIGNiKCkgfVxuXG4gIGlmICh0aGlzLl9oZWFkZXJGaXJzdCAmJiB0aGlzLl9pc1ByZWFtYmxlKSB7XG4gICAgaWYgKCF0aGlzLl9wYXJ0KSB7XG4gICAgICB0aGlzLl9wYXJ0ID0gbmV3IFBhcnRTdHJlYW0odGhpcy5fcGFydE9wdHMpXG4gICAgICBpZiAodGhpcy5saXN0ZW5lckNvdW50KCdwcmVhbWJsZScpICE9PSAwKSB7IHRoaXMuZW1pdCgncHJlYW1ibGUnLCB0aGlzLl9wYXJ0KSB9IGVsc2UgeyB0aGlzLl9pZ25vcmUoKSB9XG4gICAgfVxuICAgIGNvbnN0IHIgPSB0aGlzLl9ocGFyc2VyLnB1c2goZGF0YSlcbiAgICBpZiAoIXRoaXMuX2luSGVhZGVyICYmIHIgIT09IHVuZGVmaW5lZCAmJiByIDwgZGF0YS5sZW5ndGgpIHsgZGF0YSA9IGRhdGEuc2xpY2UocikgfSBlbHNlIHsgcmV0dXJuIGNiKCkgfVxuICB9XG5cbiAgLy8gYWxsb3dzIGZvciBcImVhc2llclwiIHRlc3RpbmdcbiAgaWYgKHRoaXMuX2ZpcnN0V3JpdGUpIHtcbiAgICB0aGlzLl9icGFyc2VyLnB1c2goQl9DUkxGKVxuICAgIHRoaXMuX2ZpcnN0V3JpdGUgPSBmYWxzZVxuICB9XG5cbiAgdGhpcy5fYnBhcnNlci5wdXNoKGRhdGEpXG5cbiAgaWYgKHRoaXMuX3BhdXNlKSB7IHRoaXMuX2NiID0gY2IgfSBlbHNlIHsgY2IoKSB9XG59XG5cbkRpY2VyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5fcGFydCA9IHVuZGVmaW5lZFxuICB0aGlzLl9icGFyc2VyID0gdW5kZWZpbmVkXG4gIHRoaXMuX2hwYXJzZXIgPSB1bmRlZmluZWRcbn1cblxuRGljZXIucHJvdG90eXBlLnNldEJvdW5kYXJ5ID0gZnVuY3Rpb24gKGJvdW5kYXJ5KSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIHRoaXMuX2JwYXJzZXIgPSBuZXcgU3RyZWFtU2VhcmNoKCdcXHJcXG4tLScgKyBib3VuZGFyeSlcbiAgdGhpcy5fYnBhcnNlci5vbignaW5mbycsIGZ1bmN0aW9uIChpc01hdGNoLCBkYXRhLCBzdGFydCwgZW5kKSB7XG4gICAgc2VsZi5fb25pbmZvKGlzTWF0Y2gsIGRhdGEsIHN0YXJ0LCBlbmQpXG4gIH0pXG59XG5cbkRpY2VyLnByb3RvdHlwZS5faWdub3JlID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5fcGFydCAmJiAhdGhpcy5faWdub3JlRGF0YSkge1xuICAgIHRoaXMuX2lnbm9yZURhdGEgPSB0cnVlXG4gICAgdGhpcy5fcGFydC5vbignZXJyb3InLCBFTVBUWV9GTilcbiAgICAvLyB3ZSBtdXN0IHBlcmZvcm0gc29tZSBraW5kIG9mIHJlYWQgb24gdGhlIHN0cmVhbSBldmVuIHRob3VnaCB3ZSBhcmVcbiAgICAvLyBpZ25vcmluZyB0aGUgZGF0YSwgb3RoZXJ3aXNlIG5vZGUncyBSZWFkYWJsZSBzdHJlYW0gd2lsbCBub3QgZW1pdCAnZW5kJ1xuICAgIC8vIGFmdGVyIHB1c2hpbmcgbnVsbCB0byB0aGUgc3RyZWFtXG4gICAgdGhpcy5fcGFydC5yZXN1bWUoKVxuICB9XG59XG5cbkRpY2VyLnByb3RvdHlwZS5fb25pbmZvID0gZnVuY3Rpb24gKGlzTWF0Y2gsIGRhdGEsIHN0YXJ0LCBlbmQpIHtcbiAgbGV0IGJ1ZjsgY29uc3Qgc2VsZiA9IHRoaXM7IGxldCBpID0gMDsgbGV0IHI7IGxldCBzaG91bGRXcml0ZU1vcmUgPSB0cnVlXG5cbiAgaWYgKCF0aGlzLl9wYXJ0ICYmIHRoaXMuX2p1c3RNYXRjaGVkICYmIGRhdGEpIHtcbiAgICB3aGlsZSAodGhpcy5fZGFzaGVzIDwgMiAmJiAoc3RhcnQgKyBpKSA8IGVuZCkge1xuICAgICAgaWYgKGRhdGFbc3RhcnQgKyBpXSA9PT0gREFTSCkge1xuICAgICAgICArK2lcbiAgICAgICAgKyt0aGlzLl9kYXNoZXNcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLl9kYXNoZXMpIHsgYnVmID0gQl9PTkVEQVNIIH1cbiAgICAgICAgdGhpcy5fZGFzaGVzID0gMFxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5fZGFzaGVzID09PSAyKSB7XG4gICAgICBpZiAoKHN0YXJ0ICsgaSkgPCBlbmQgJiYgdGhpcy5saXN0ZW5lckNvdW50KCd0cmFpbGVyJykgIT09IDApIHsgdGhpcy5lbWl0KCd0cmFpbGVyJywgZGF0YS5zbGljZShzdGFydCArIGksIGVuZCkpIH1cbiAgICAgIHRoaXMucmVzZXQoKVxuICAgICAgdGhpcy5fZmluaXNoZWQgPSB0cnVlXG4gICAgICAvLyBubyBtb3JlIHBhcnRzIHdpbGwgYmUgYWRkZWRcbiAgICAgIGlmIChzZWxmLl9wYXJ0cyA9PT0gMCkge1xuICAgICAgICBzZWxmLl9yZWFsRmluaXNoID0gdHJ1ZVxuICAgICAgICBzZWxmLmVtaXQoJ2ZpbmlzaCcpXG4gICAgICAgIHNlbGYuX3JlYWxGaW5pc2ggPSBmYWxzZVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5fZGFzaGVzKSB7IHJldHVybiB9XG4gIH1cbiAgaWYgKHRoaXMuX2p1c3RNYXRjaGVkKSB7IHRoaXMuX2p1c3RNYXRjaGVkID0gZmFsc2UgfVxuICBpZiAoIXRoaXMuX3BhcnQpIHtcbiAgICB0aGlzLl9wYXJ0ID0gbmV3IFBhcnRTdHJlYW0odGhpcy5fcGFydE9wdHMpXG4gICAgdGhpcy5fcGFydC5fcmVhZCA9IGZ1bmN0aW9uIChuKSB7XG4gICAgICBzZWxmLl91bnBhdXNlKClcbiAgICB9XG4gICAgaWYgKHRoaXMuX2lzUHJlYW1ibGUgJiYgdGhpcy5saXN0ZW5lckNvdW50KCdwcmVhbWJsZScpICE9PSAwKSB7XG4gICAgICB0aGlzLmVtaXQoJ3ByZWFtYmxlJywgdGhpcy5fcGFydClcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2lzUHJlYW1ibGUgIT09IHRydWUgJiYgdGhpcy5saXN0ZW5lckNvdW50KCdwYXJ0JykgIT09IDApIHtcbiAgICAgIHRoaXMuZW1pdCgncGFydCcsIHRoaXMuX3BhcnQpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2lnbm9yZSgpXG4gICAgfVxuICAgIGlmICghdGhpcy5faXNQcmVhbWJsZSkgeyB0aGlzLl9pbkhlYWRlciA9IHRydWUgfVxuICB9XG4gIGlmIChkYXRhICYmIHN0YXJ0IDwgZW5kICYmICF0aGlzLl9pZ25vcmVEYXRhKSB7XG4gICAgaWYgKHRoaXMuX2lzUHJlYW1ibGUgfHwgIXRoaXMuX2luSGVhZGVyKSB7XG4gICAgICBpZiAoYnVmKSB7IHNob3VsZFdyaXRlTW9yZSA9IHRoaXMuX3BhcnQucHVzaChidWYpIH1cbiAgICAgIHNob3VsZFdyaXRlTW9yZSA9IHRoaXMuX3BhcnQucHVzaChkYXRhLnNsaWNlKHN0YXJ0LCBlbmQpKVxuICAgICAgaWYgKCFzaG91bGRXcml0ZU1vcmUpIHsgdGhpcy5fcGF1c2UgPSB0cnVlIH1cbiAgICB9IGVsc2UgaWYgKCF0aGlzLl9pc1ByZWFtYmxlICYmIHRoaXMuX2luSGVhZGVyKSB7XG4gICAgICBpZiAoYnVmKSB7IHRoaXMuX2hwYXJzZXIucHVzaChidWYpIH1cbiAgICAgIHIgPSB0aGlzLl9ocGFyc2VyLnB1c2goZGF0YS5zbGljZShzdGFydCwgZW5kKSlcbiAgICAgIGlmICghdGhpcy5faW5IZWFkZXIgJiYgciAhPT0gdW5kZWZpbmVkICYmIHIgPCBlbmQpIHsgdGhpcy5fb25pbmZvKGZhbHNlLCBkYXRhLCBzdGFydCArIHIsIGVuZCkgfVxuICAgIH1cbiAgfVxuICBpZiAoaXNNYXRjaCkge1xuICAgIHRoaXMuX2hwYXJzZXIucmVzZXQoKVxuICAgIGlmICh0aGlzLl9pc1ByZWFtYmxlKSB7IHRoaXMuX2lzUHJlYW1ibGUgPSBmYWxzZSB9IGVsc2Uge1xuICAgICAgaWYgKHN0YXJ0ICE9PSBlbmQpIHtcbiAgICAgICAgKyt0aGlzLl9wYXJ0c1xuICAgICAgICB0aGlzLl9wYXJ0Lm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKC0tc2VsZi5fcGFydHMgPT09IDApIHtcbiAgICAgICAgICAgIGlmIChzZWxmLl9maW5pc2hlZCkge1xuICAgICAgICAgICAgICBzZWxmLl9yZWFsRmluaXNoID0gdHJ1ZVxuICAgICAgICAgICAgICBzZWxmLmVtaXQoJ2ZpbmlzaCcpXG4gICAgICAgICAgICAgIHNlbGYuX3JlYWxGaW5pc2ggPSBmYWxzZVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2VsZi5fdW5wYXVzZSgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9wYXJ0LnB1c2gobnVsbClcbiAgICB0aGlzLl9wYXJ0ID0gdW5kZWZpbmVkXG4gICAgdGhpcy5faWdub3JlRGF0YSA9IGZhbHNlXG4gICAgdGhpcy5fanVzdE1hdGNoZWQgPSB0cnVlXG4gICAgdGhpcy5fZGFzaGVzID0gMFxuICB9XG59XG5cbkRpY2VyLnByb3RvdHlwZS5fdW5wYXVzZSA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKCF0aGlzLl9wYXVzZSkgeyByZXR1cm4gfVxuXG4gIHRoaXMuX3BhdXNlID0gZmFsc2VcbiAgaWYgKHRoaXMuX2NiKSB7XG4gICAgY29uc3QgY2IgPSB0aGlzLl9jYlxuICAgIHRoaXMuX2NiID0gdW5kZWZpbmVkXG4gICAgY2IoKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRGljZXJcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbi8vIE5vZGUgaGFzIGFsd2F5cyB1dGYtOFxuY29uc3QgdXRmOERlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoJ3V0Zi04JylcbmNvbnN0IHRleHREZWNvZGVycyA9IG5ldyBNYXAoW1xuICBbJ3V0Zi04JywgdXRmOERlY29kZXJdLFxuICBbJ3V0ZjgnLCB1dGY4RGVjb2Rlcl1cbl0pXG5cbmZ1bmN0aW9uIGdldERlY29kZXIgKGNoYXJzZXQpIHtcbiAgbGV0IGxjXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgc3dpdGNoIChjaGFyc2V0KSB7XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgICAgcmV0dXJuIGRlY29kZXJzLnV0ZjhcbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdhc2NpaSc6IC8vIFRPRE86IE1ha2UgdGhlc2UgYSBzZXBhcmF0ZSwgc3RyaWN0IGRlY29kZXI/XG4gICAgICBjYXNlICd1cy1hc2NpaSc6XG4gICAgICBjYXNlICdpc28tODg1OS0xJzpcbiAgICAgIGNhc2UgJ2lzbzg4NTktMSc6XG4gICAgICBjYXNlICdpc284ODU5MSc6XG4gICAgICBjYXNlICdpc29fODg1OS0xJzpcbiAgICAgIGNhc2UgJ3dpbmRvd3MtMTI1Mic6XG4gICAgICBjYXNlICdpc29fODg1OS0xOjE5ODcnOlxuICAgICAgY2FzZSAnY3AxMjUyJzpcbiAgICAgIGNhc2UgJ3gtY3AxMjUyJzpcbiAgICAgICAgcmV0dXJuIGRlY29kZXJzLmxhdGluMVxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgICAgcmV0dXJuIGRlY29kZXJzLnV0ZjE2bGVcbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIHJldHVybiBkZWNvZGVycy5iYXNlNjRcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsYyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbGMgPSB0cnVlXG4gICAgICAgICAgY2hhcnNldCA9IGNoYXJzZXQudG9Mb3dlckNhc2UoKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlY29kZXJzLm90aGVyLmJpbmQoY2hhcnNldClcbiAgICB9XG4gIH1cbn1cblxuY29uc3QgZGVjb2RlcnMgPSB7XG4gIHV0Zjg6IChkYXRhLCBzb3VyY2VFbmNvZGluZykgPT4ge1xuICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGRhdGEgPSBCdWZmZXIuZnJvbShkYXRhLCBzb3VyY2VFbmNvZGluZylcbiAgICB9XG4gICAgcmV0dXJuIGRhdGEudXRmOFNsaWNlKDAsIGRhdGEubGVuZ3RoKVxuICB9LFxuXG4gIGxhdGluMTogKGRhdGEsIHNvdXJjZUVuY29kaW5nKSA9PiB7XG4gICAgaWYgKGRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGRhdGFcbiAgICB9XG4gICAgcmV0dXJuIGRhdGEubGF0aW4xU2xpY2UoMCwgZGF0YS5sZW5ndGgpXG4gIH0sXG5cbiAgdXRmMTZsZTogKGRhdGEsIHNvdXJjZUVuY29kaW5nKSA9PiB7XG4gICAgaWYgKGRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgZGF0YSA9IEJ1ZmZlci5mcm9tKGRhdGEsIHNvdXJjZUVuY29kaW5nKVxuICAgIH1cbiAgICByZXR1cm4gZGF0YS51Y3MyU2xpY2UoMCwgZGF0YS5sZW5ndGgpXG4gIH0sXG5cbiAgYmFzZTY0OiAoZGF0YSwgc291cmNlRW5jb2RpbmcpID0+IHtcbiAgICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICBkYXRhID0gQnVmZmVyLmZyb20oZGF0YSwgc291cmNlRW5jb2RpbmcpXG4gICAgfVxuICAgIHJldHVybiBkYXRhLmJhc2U2NFNsaWNlKDAsIGRhdGEubGVuZ3RoKVxuICB9LFxuXG4gIG90aGVyOiAoZGF0YSwgc291cmNlRW5jb2RpbmcpID0+IHtcbiAgICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICBkYXRhID0gQnVmZmVyLmZyb20oZGF0YSwgc291cmNlRW5jb2RpbmcpXG4gICAgfVxuXG4gICAgaWYgKHRleHREZWNvZGVycy5oYXModGhpcy50b1N0cmluZygpKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHRleHREZWNvZGVycy5nZXQodGhpcykuZGVjb2RlKGRhdGEpXG4gICAgICB9IGNhdGNoIHt9XG4gICAgfVxuICAgIHJldHVybiB0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZydcbiAgICAgID8gZGF0YVxuICAgICAgOiBkYXRhLnRvU3RyaW5nKClcbiAgfVxufVxuXG5mdW5jdGlvbiBkZWNvZGVUZXh0ICh0ZXh0LCBzb3VyY2VFbmNvZGluZywgZGVzdEVuY29kaW5nKSB7XG4gIGlmICh0ZXh0KSB7XG4gICAgcmV0dXJuIGdldERlY29kZXIoZGVzdEVuY29kaW5nKSh0ZXh0LCBzb3VyY2VFbmNvZGluZylcbiAgfVxuICByZXR1cm4gdGV4dFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRlY29kZVRleHRcbiIsCiAgICAiLyogZXNsaW50LWRpc2FibGUgb2JqZWN0LXByb3BlcnR5LW5ld2xpbmUgKi9cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCBkZWNvZGVUZXh0ID0gcmVxdWlyZSgnLi9kZWNvZGVUZXh0JylcblxuY29uc3QgUkVfRU5DT0RFRCA9IC8lW2EtZkEtRjAtOV1bYS1mQS1GMC05XS9nXG5cbmNvbnN0IEVuY29kZWRMb29rdXAgPSB7XG4gICclMDAnOiAnXFx4MDAnLCAnJTAxJzogJ1xceDAxJywgJyUwMic6ICdcXHgwMicsICclMDMnOiAnXFx4MDMnLCAnJTA0JzogJ1xceDA0JyxcbiAgJyUwNSc6ICdcXHgwNScsICclMDYnOiAnXFx4MDYnLCAnJTA3JzogJ1xceDA3JywgJyUwOCc6ICdcXHgwOCcsICclMDknOiAnXFx4MDknLFxuICAnJTBhJzogJ1xceDBhJywgJyUwQSc6ICdcXHgwYScsICclMGInOiAnXFx4MGInLCAnJTBCJzogJ1xceDBiJywgJyUwYyc6ICdcXHgwYycsXG4gICclMEMnOiAnXFx4MGMnLCAnJTBkJzogJ1xceDBkJywgJyUwRCc6ICdcXHgwZCcsICclMGUnOiAnXFx4MGUnLCAnJTBFJzogJ1xceDBlJyxcbiAgJyUwZic6ICdcXHgwZicsICclMEYnOiAnXFx4MGYnLCAnJTEwJzogJ1xceDEwJywgJyUxMSc6ICdcXHgxMScsICclMTInOiAnXFx4MTInLFxuICAnJTEzJzogJ1xceDEzJywgJyUxNCc6ICdcXHgxNCcsICclMTUnOiAnXFx4MTUnLCAnJTE2JzogJ1xceDE2JywgJyUxNyc6ICdcXHgxNycsXG4gICclMTgnOiAnXFx4MTgnLCAnJTE5JzogJ1xceDE5JywgJyUxYSc6ICdcXHgxYScsICclMUEnOiAnXFx4MWEnLCAnJTFiJzogJ1xceDFiJyxcbiAgJyUxQic6ICdcXHgxYicsICclMWMnOiAnXFx4MWMnLCAnJTFDJzogJ1xceDFjJywgJyUxZCc6ICdcXHgxZCcsICclMUQnOiAnXFx4MWQnLFxuICAnJTFlJzogJ1xceDFlJywgJyUxRSc6ICdcXHgxZScsICclMWYnOiAnXFx4MWYnLCAnJTFGJzogJ1xceDFmJywgJyUyMCc6ICdcXHgyMCcsXG4gICclMjEnOiAnXFx4MjEnLCAnJTIyJzogJ1xceDIyJywgJyUyMyc6ICdcXHgyMycsICclMjQnOiAnXFx4MjQnLCAnJTI1JzogJ1xceDI1JyxcbiAgJyUyNic6ICdcXHgyNicsICclMjcnOiAnXFx4MjcnLCAnJTI4JzogJ1xceDI4JywgJyUyOSc6ICdcXHgyOScsICclMmEnOiAnXFx4MmEnLFxuICAnJTJBJzogJ1xceDJhJywgJyUyYic6ICdcXHgyYicsICclMkInOiAnXFx4MmInLCAnJTJjJzogJ1xceDJjJywgJyUyQyc6ICdcXHgyYycsXG4gICclMmQnOiAnXFx4MmQnLCAnJTJEJzogJ1xceDJkJywgJyUyZSc6ICdcXHgyZScsICclMkUnOiAnXFx4MmUnLCAnJTJmJzogJ1xceDJmJyxcbiAgJyUyRic6ICdcXHgyZicsICclMzAnOiAnXFx4MzAnLCAnJTMxJzogJ1xceDMxJywgJyUzMic6ICdcXHgzMicsICclMzMnOiAnXFx4MzMnLFxuICAnJTM0JzogJ1xceDM0JywgJyUzNSc6ICdcXHgzNScsICclMzYnOiAnXFx4MzYnLCAnJTM3JzogJ1xceDM3JywgJyUzOCc6ICdcXHgzOCcsXG4gICclMzknOiAnXFx4MzknLCAnJTNhJzogJ1xceDNhJywgJyUzQSc6ICdcXHgzYScsICclM2InOiAnXFx4M2InLCAnJTNCJzogJ1xceDNiJyxcbiAgJyUzYyc6ICdcXHgzYycsICclM0MnOiAnXFx4M2MnLCAnJTNkJzogJ1xceDNkJywgJyUzRCc6ICdcXHgzZCcsICclM2UnOiAnXFx4M2UnLFxuICAnJTNFJzogJ1xceDNlJywgJyUzZic6ICdcXHgzZicsICclM0YnOiAnXFx4M2YnLCAnJTQwJzogJ1xceDQwJywgJyU0MSc6ICdcXHg0MScsXG4gICclNDInOiAnXFx4NDInLCAnJTQzJzogJ1xceDQzJywgJyU0NCc6ICdcXHg0NCcsICclNDUnOiAnXFx4NDUnLCAnJTQ2JzogJ1xceDQ2JyxcbiAgJyU0Nyc6ICdcXHg0NycsICclNDgnOiAnXFx4NDgnLCAnJTQ5JzogJ1xceDQ5JywgJyU0YSc6ICdcXHg0YScsICclNEEnOiAnXFx4NGEnLFxuICAnJTRiJzogJ1xceDRiJywgJyU0Qic6ICdcXHg0YicsICclNGMnOiAnXFx4NGMnLCAnJTRDJzogJ1xceDRjJywgJyU0ZCc6ICdcXHg0ZCcsXG4gICclNEQnOiAnXFx4NGQnLCAnJTRlJzogJ1xceDRlJywgJyU0RSc6ICdcXHg0ZScsICclNGYnOiAnXFx4NGYnLCAnJTRGJzogJ1xceDRmJyxcbiAgJyU1MCc6ICdcXHg1MCcsICclNTEnOiAnXFx4NTEnLCAnJTUyJzogJ1xceDUyJywgJyU1Myc6ICdcXHg1MycsICclNTQnOiAnXFx4NTQnLFxuICAnJTU1JzogJ1xceDU1JywgJyU1Nic6ICdcXHg1NicsICclNTcnOiAnXFx4NTcnLCAnJTU4JzogJ1xceDU4JywgJyU1OSc6ICdcXHg1OScsXG4gICclNWEnOiAnXFx4NWEnLCAnJTVBJzogJ1xceDVhJywgJyU1Yic6ICdcXHg1YicsICclNUInOiAnXFx4NWInLCAnJTVjJzogJ1xceDVjJyxcbiAgJyU1Qyc6ICdcXHg1YycsICclNWQnOiAnXFx4NWQnLCAnJTVEJzogJ1xceDVkJywgJyU1ZSc6ICdcXHg1ZScsICclNUUnOiAnXFx4NWUnLFxuICAnJTVmJzogJ1xceDVmJywgJyU1Ric6ICdcXHg1ZicsICclNjAnOiAnXFx4NjAnLCAnJTYxJzogJ1xceDYxJywgJyU2Mic6ICdcXHg2MicsXG4gICclNjMnOiAnXFx4NjMnLCAnJTY0JzogJ1xceDY0JywgJyU2NSc6ICdcXHg2NScsICclNjYnOiAnXFx4NjYnLCAnJTY3JzogJ1xceDY3JyxcbiAgJyU2OCc6ICdcXHg2OCcsICclNjknOiAnXFx4NjknLCAnJTZhJzogJ1xceDZhJywgJyU2QSc6ICdcXHg2YScsICclNmInOiAnXFx4NmInLFxuICAnJTZCJzogJ1xceDZiJywgJyU2Yyc6ICdcXHg2YycsICclNkMnOiAnXFx4NmMnLCAnJTZkJzogJ1xceDZkJywgJyU2RCc6ICdcXHg2ZCcsXG4gICclNmUnOiAnXFx4NmUnLCAnJTZFJzogJ1xceDZlJywgJyU2Zic6ICdcXHg2ZicsICclNkYnOiAnXFx4NmYnLCAnJTcwJzogJ1xceDcwJyxcbiAgJyU3MSc6ICdcXHg3MScsICclNzInOiAnXFx4NzInLCAnJTczJzogJ1xceDczJywgJyU3NCc6ICdcXHg3NCcsICclNzUnOiAnXFx4NzUnLFxuICAnJTc2JzogJ1xceDc2JywgJyU3Nyc6ICdcXHg3NycsICclNzgnOiAnXFx4NzgnLCAnJTc5JzogJ1xceDc5JywgJyU3YSc6ICdcXHg3YScsXG4gICclN0EnOiAnXFx4N2EnLCAnJTdiJzogJ1xceDdiJywgJyU3Qic6ICdcXHg3YicsICclN2MnOiAnXFx4N2MnLCAnJTdDJzogJ1xceDdjJyxcbiAgJyU3ZCc6ICdcXHg3ZCcsICclN0QnOiAnXFx4N2QnLCAnJTdlJzogJ1xceDdlJywgJyU3RSc6ICdcXHg3ZScsICclN2YnOiAnXFx4N2YnLFxuICAnJTdGJzogJ1xceDdmJywgJyU4MCc6ICdcXHg4MCcsICclODEnOiAnXFx4ODEnLCAnJTgyJzogJ1xceDgyJywgJyU4Myc6ICdcXHg4MycsXG4gICclODQnOiAnXFx4ODQnLCAnJTg1JzogJ1xceDg1JywgJyU4Nic6ICdcXHg4NicsICclODcnOiAnXFx4ODcnLCAnJTg4JzogJ1xceDg4JyxcbiAgJyU4OSc6ICdcXHg4OScsICclOGEnOiAnXFx4OGEnLCAnJThBJzogJ1xceDhhJywgJyU4Yic6ICdcXHg4YicsICclOEInOiAnXFx4OGInLFxuICAnJThjJzogJ1xceDhjJywgJyU4Qyc6ICdcXHg4YycsICclOGQnOiAnXFx4OGQnLCAnJThEJzogJ1xceDhkJywgJyU4ZSc6ICdcXHg4ZScsXG4gICclOEUnOiAnXFx4OGUnLCAnJThmJzogJ1xceDhmJywgJyU4Ric6ICdcXHg4ZicsICclOTAnOiAnXFx4OTAnLCAnJTkxJzogJ1xceDkxJyxcbiAgJyU5Mic6ICdcXHg5MicsICclOTMnOiAnXFx4OTMnLCAnJTk0JzogJ1xceDk0JywgJyU5NSc6ICdcXHg5NScsICclOTYnOiAnXFx4OTYnLFxuICAnJTk3JzogJ1xceDk3JywgJyU5OCc6ICdcXHg5OCcsICclOTknOiAnXFx4OTknLCAnJTlhJzogJ1xceDlhJywgJyU5QSc6ICdcXHg5YScsXG4gICclOWInOiAnXFx4OWInLCAnJTlCJzogJ1xceDliJywgJyU5Yyc6ICdcXHg5YycsICclOUMnOiAnXFx4OWMnLCAnJTlkJzogJ1xceDlkJyxcbiAgJyU5RCc6ICdcXHg5ZCcsICclOWUnOiAnXFx4OWUnLCAnJTlFJzogJ1xceDllJywgJyU5Zic6ICdcXHg5ZicsICclOUYnOiAnXFx4OWYnLFxuICAnJWEwJzogJ1xceGEwJywgJyVBMCc6ICdcXHhhMCcsICclYTEnOiAnXFx4YTEnLCAnJUExJzogJ1xceGExJywgJyVhMic6ICdcXHhhMicsXG4gICclQTInOiAnXFx4YTInLCAnJWEzJzogJ1xceGEzJywgJyVBMyc6ICdcXHhhMycsICclYTQnOiAnXFx4YTQnLCAnJUE0JzogJ1xceGE0JyxcbiAgJyVhNSc6ICdcXHhhNScsICclQTUnOiAnXFx4YTUnLCAnJWE2JzogJ1xceGE2JywgJyVBNic6ICdcXHhhNicsICclYTcnOiAnXFx4YTcnLFxuICAnJUE3JzogJ1xceGE3JywgJyVhOCc6ICdcXHhhOCcsICclQTgnOiAnXFx4YTgnLCAnJWE5JzogJ1xceGE5JywgJyVBOSc6ICdcXHhhOScsXG4gICclYWEnOiAnXFx4YWEnLCAnJUFhJzogJ1xceGFhJywgJyVhQSc6ICdcXHhhYScsICclQUEnOiAnXFx4YWEnLCAnJWFiJzogJ1xceGFiJyxcbiAgJyVBYic6ICdcXHhhYicsICclYUInOiAnXFx4YWInLCAnJUFCJzogJ1xceGFiJywgJyVhYyc6ICdcXHhhYycsICclQWMnOiAnXFx4YWMnLFxuICAnJWFDJzogJ1xceGFjJywgJyVBQyc6ICdcXHhhYycsICclYWQnOiAnXFx4YWQnLCAnJUFkJzogJ1xceGFkJywgJyVhRCc6ICdcXHhhZCcsXG4gICclQUQnOiAnXFx4YWQnLCAnJWFlJzogJ1xceGFlJywgJyVBZSc6ICdcXHhhZScsICclYUUnOiAnXFx4YWUnLCAnJUFFJzogJ1xceGFlJyxcbiAgJyVhZic6ICdcXHhhZicsICclQWYnOiAnXFx4YWYnLCAnJWFGJzogJ1xceGFmJywgJyVBRic6ICdcXHhhZicsICclYjAnOiAnXFx4YjAnLFxuICAnJUIwJzogJ1xceGIwJywgJyViMSc6ICdcXHhiMScsICclQjEnOiAnXFx4YjEnLCAnJWIyJzogJ1xceGIyJywgJyVCMic6ICdcXHhiMicsXG4gICclYjMnOiAnXFx4YjMnLCAnJUIzJzogJ1xceGIzJywgJyViNCc6ICdcXHhiNCcsICclQjQnOiAnXFx4YjQnLCAnJWI1JzogJ1xceGI1JyxcbiAgJyVCNSc6ICdcXHhiNScsICclYjYnOiAnXFx4YjYnLCAnJUI2JzogJ1xceGI2JywgJyViNyc6ICdcXHhiNycsICclQjcnOiAnXFx4YjcnLFxuICAnJWI4JzogJ1xceGI4JywgJyVCOCc6ICdcXHhiOCcsICclYjknOiAnXFx4YjknLCAnJUI5JzogJ1xceGI5JywgJyViYSc6ICdcXHhiYScsXG4gICclQmEnOiAnXFx4YmEnLCAnJWJBJzogJ1xceGJhJywgJyVCQSc6ICdcXHhiYScsICclYmInOiAnXFx4YmInLCAnJUJiJzogJ1xceGJiJyxcbiAgJyViQic6ICdcXHhiYicsICclQkInOiAnXFx4YmInLCAnJWJjJzogJ1xceGJjJywgJyVCYyc6ICdcXHhiYycsICclYkMnOiAnXFx4YmMnLFxuICAnJUJDJzogJ1xceGJjJywgJyViZCc6ICdcXHhiZCcsICclQmQnOiAnXFx4YmQnLCAnJWJEJzogJ1xceGJkJywgJyVCRCc6ICdcXHhiZCcsXG4gICclYmUnOiAnXFx4YmUnLCAnJUJlJzogJ1xceGJlJywgJyViRSc6ICdcXHhiZScsICclQkUnOiAnXFx4YmUnLCAnJWJmJzogJ1xceGJmJyxcbiAgJyVCZic6ICdcXHhiZicsICclYkYnOiAnXFx4YmYnLCAnJUJGJzogJ1xceGJmJywgJyVjMCc6ICdcXHhjMCcsICclQzAnOiAnXFx4YzAnLFxuICAnJWMxJzogJ1xceGMxJywgJyVDMSc6ICdcXHhjMScsICclYzInOiAnXFx4YzInLCAnJUMyJzogJ1xceGMyJywgJyVjMyc6ICdcXHhjMycsXG4gICclQzMnOiAnXFx4YzMnLCAnJWM0JzogJ1xceGM0JywgJyVDNCc6ICdcXHhjNCcsICclYzUnOiAnXFx4YzUnLCAnJUM1JzogJ1xceGM1JyxcbiAgJyVjNic6ICdcXHhjNicsICclQzYnOiAnXFx4YzYnLCAnJWM3JzogJ1xceGM3JywgJyVDNyc6ICdcXHhjNycsICclYzgnOiAnXFx4YzgnLFxuICAnJUM4JzogJ1xceGM4JywgJyVjOSc6ICdcXHhjOScsICclQzknOiAnXFx4YzknLCAnJWNhJzogJ1xceGNhJywgJyVDYSc6ICdcXHhjYScsXG4gICclY0EnOiAnXFx4Y2EnLCAnJUNBJzogJ1xceGNhJywgJyVjYic6ICdcXHhjYicsICclQ2InOiAnXFx4Y2InLCAnJWNCJzogJ1xceGNiJyxcbiAgJyVDQic6ICdcXHhjYicsICclY2MnOiAnXFx4Y2MnLCAnJUNjJzogJ1xceGNjJywgJyVjQyc6ICdcXHhjYycsICclQ0MnOiAnXFx4Y2MnLFxuICAnJWNkJzogJ1xceGNkJywgJyVDZCc6ICdcXHhjZCcsICclY0QnOiAnXFx4Y2QnLCAnJUNEJzogJ1xceGNkJywgJyVjZSc6ICdcXHhjZScsXG4gICclQ2UnOiAnXFx4Y2UnLCAnJWNFJzogJ1xceGNlJywgJyVDRSc6ICdcXHhjZScsICclY2YnOiAnXFx4Y2YnLCAnJUNmJzogJ1xceGNmJyxcbiAgJyVjRic6ICdcXHhjZicsICclQ0YnOiAnXFx4Y2YnLCAnJWQwJzogJ1xceGQwJywgJyVEMCc6ICdcXHhkMCcsICclZDEnOiAnXFx4ZDEnLFxuICAnJUQxJzogJ1xceGQxJywgJyVkMic6ICdcXHhkMicsICclRDInOiAnXFx4ZDInLCAnJWQzJzogJ1xceGQzJywgJyVEMyc6ICdcXHhkMycsXG4gICclZDQnOiAnXFx4ZDQnLCAnJUQ0JzogJ1xceGQ0JywgJyVkNSc6ICdcXHhkNScsICclRDUnOiAnXFx4ZDUnLCAnJWQ2JzogJ1xceGQ2JyxcbiAgJyVENic6ICdcXHhkNicsICclZDcnOiAnXFx4ZDcnLCAnJUQ3JzogJ1xceGQ3JywgJyVkOCc6ICdcXHhkOCcsICclRDgnOiAnXFx4ZDgnLFxuICAnJWQ5JzogJ1xceGQ5JywgJyVEOSc6ICdcXHhkOScsICclZGEnOiAnXFx4ZGEnLCAnJURhJzogJ1xceGRhJywgJyVkQSc6ICdcXHhkYScsXG4gICclREEnOiAnXFx4ZGEnLCAnJWRiJzogJ1xceGRiJywgJyVEYic6ICdcXHhkYicsICclZEInOiAnXFx4ZGInLCAnJURCJzogJ1xceGRiJyxcbiAgJyVkYyc6ICdcXHhkYycsICclRGMnOiAnXFx4ZGMnLCAnJWRDJzogJ1xceGRjJywgJyVEQyc6ICdcXHhkYycsICclZGQnOiAnXFx4ZGQnLFxuICAnJURkJzogJ1xceGRkJywgJyVkRCc6ICdcXHhkZCcsICclREQnOiAnXFx4ZGQnLCAnJWRlJzogJ1xceGRlJywgJyVEZSc6ICdcXHhkZScsXG4gICclZEUnOiAnXFx4ZGUnLCAnJURFJzogJ1xceGRlJywgJyVkZic6ICdcXHhkZicsICclRGYnOiAnXFx4ZGYnLCAnJWRGJzogJ1xceGRmJyxcbiAgJyVERic6ICdcXHhkZicsICclZTAnOiAnXFx4ZTAnLCAnJUUwJzogJ1xceGUwJywgJyVlMSc6ICdcXHhlMScsICclRTEnOiAnXFx4ZTEnLFxuICAnJWUyJzogJ1xceGUyJywgJyVFMic6ICdcXHhlMicsICclZTMnOiAnXFx4ZTMnLCAnJUUzJzogJ1xceGUzJywgJyVlNCc6ICdcXHhlNCcsXG4gICclRTQnOiAnXFx4ZTQnLCAnJWU1JzogJ1xceGU1JywgJyVFNSc6ICdcXHhlNScsICclZTYnOiAnXFx4ZTYnLCAnJUU2JzogJ1xceGU2JyxcbiAgJyVlNyc6ICdcXHhlNycsICclRTcnOiAnXFx4ZTcnLCAnJWU4JzogJ1xceGU4JywgJyVFOCc6ICdcXHhlOCcsICclZTknOiAnXFx4ZTknLFxuICAnJUU5JzogJ1xceGU5JywgJyVlYSc6ICdcXHhlYScsICclRWEnOiAnXFx4ZWEnLCAnJWVBJzogJ1xceGVhJywgJyVFQSc6ICdcXHhlYScsXG4gICclZWInOiAnXFx4ZWInLCAnJUViJzogJ1xceGViJywgJyVlQic6ICdcXHhlYicsICclRUInOiAnXFx4ZWInLCAnJWVjJzogJ1xceGVjJyxcbiAgJyVFYyc6ICdcXHhlYycsICclZUMnOiAnXFx4ZWMnLCAnJUVDJzogJ1xceGVjJywgJyVlZCc6ICdcXHhlZCcsICclRWQnOiAnXFx4ZWQnLFxuICAnJWVEJzogJ1xceGVkJywgJyVFRCc6ICdcXHhlZCcsICclZWUnOiAnXFx4ZWUnLCAnJUVlJzogJ1xceGVlJywgJyVlRSc6ICdcXHhlZScsXG4gICclRUUnOiAnXFx4ZWUnLCAnJWVmJzogJ1xceGVmJywgJyVFZic6ICdcXHhlZicsICclZUYnOiAnXFx4ZWYnLCAnJUVGJzogJ1xceGVmJyxcbiAgJyVmMCc6ICdcXHhmMCcsICclRjAnOiAnXFx4ZjAnLCAnJWYxJzogJ1xceGYxJywgJyVGMSc6ICdcXHhmMScsICclZjInOiAnXFx4ZjInLFxuICAnJUYyJzogJ1xceGYyJywgJyVmMyc6ICdcXHhmMycsICclRjMnOiAnXFx4ZjMnLCAnJWY0JzogJ1xceGY0JywgJyVGNCc6ICdcXHhmNCcsXG4gICclZjUnOiAnXFx4ZjUnLCAnJUY1JzogJ1xceGY1JywgJyVmNic6ICdcXHhmNicsICclRjYnOiAnXFx4ZjYnLCAnJWY3JzogJ1xceGY3JyxcbiAgJyVGNyc6ICdcXHhmNycsICclZjgnOiAnXFx4ZjgnLCAnJUY4JzogJ1xceGY4JywgJyVmOSc6ICdcXHhmOScsICclRjknOiAnXFx4ZjknLFxuICAnJWZhJzogJ1xceGZhJywgJyVGYSc6ICdcXHhmYScsICclZkEnOiAnXFx4ZmEnLCAnJUZBJzogJ1xceGZhJywgJyVmYic6ICdcXHhmYicsXG4gICclRmInOiAnXFx4ZmInLCAnJWZCJzogJ1xceGZiJywgJyVGQic6ICdcXHhmYicsICclZmMnOiAnXFx4ZmMnLCAnJUZjJzogJ1xceGZjJyxcbiAgJyVmQyc6ICdcXHhmYycsICclRkMnOiAnXFx4ZmMnLCAnJWZkJzogJ1xceGZkJywgJyVGZCc6ICdcXHhmZCcsICclZkQnOiAnXFx4ZmQnLFxuICAnJUZEJzogJ1xceGZkJywgJyVmZSc6ICdcXHhmZScsICclRmUnOiAnXFx4ZmUnLCAnJWZFJzogJ1xceGZlJywgJyVGRSc6ICdcXHhmZScsXG4gICclZmYnOiAnXFx4ZmYnLCAnJUZmJzogJ1xceGZmJywgJyVmRic6ICdcXHhmZicsICclRkYnOiAnXFx4ZmYnXG59XG5cbmZ1bmN0aW9uIGVuY29kZWRSZXBsYWNlciAobWF0Y2gpIHtcbiAgcmV0dXJuIEVuY29kZWRMb29rdXBbbWF0Y2hdXG59XG5cbmNvbnN0IFNUQVRFX0tFWSA9IDBcbmNvbnN0IFNUQVRFX1ZBTFVFID0gMVxuY29uc3QgU1RBVEVfQ0hBUlNFVCA9IDJcbmNvbnN0IFNUQVRFX0xBTkcgPSAzXG5cbmZ1bmN0aW9uIHBhcnNlUGFyYW1zIChzdHIpIHtcbiAgY29uc3QgcmVzID0gW11cbiAgbGV0IHN0YXRlID0gU1RBVEVfS0VZXG4gIGxldCBjaGFyc2V0ID0gJydcbiAgbGV0IGlucXVvdGUgPSBmYWxzZVxuICBsZXQgZXNjYXBpbmcgPSBmYWxzZVxuICBsZXQgcCA9IDBcbiAgbGV0IHRtcCA9ICcnXG4gIGNvbnN0IGxlbiA9IHN0ci5sZW5ndGhcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdmFyXG4gICAgY29uc3QgY2hhciA9IHN0cltpXVxuICAgIGlmIChjaGFyID09PSAnXFxcXCcgJiYgaW5xdW90ZSkge1xuICAgICAgaWYgKGVzY2FwaW5nKSB7IGVzY2FwaW5nID0gZmFsc2UgfSBlbHNlIHtcbiAgICAgICAgZXNjYXBpbmcgPSB0cnVlXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjaGFyID09PSAnXCInKSB7XG4gICAgICBpZiAoIWVzY2FwaW5nKSB7XG4gICAgICAgIGlmIChpbnF1b3RlKSB7XG4gICAgICAgICAgaW5xdW90ZSA9IGZhbHNlXG4gICAgICAgICAgc3RhdGUgPSBTVEFURV9LRVlcbiAgICAgICAgfSBlbHNlIHsgaW5xdW90ZSA9IHRydWUgfVxuICAgICAgICBjb250aW51ZVxuICAgICAgfSBlbHNlIHsgZXNjYXBpbmcgPSBmYWxzZSB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChlc2NhcGluZyAmJiBpbnF1b3RlKSB7IHRtcCArPSAnXFxcXCcgfVxuICAgICAgZXNjYXBpbmcgPSBmYWxzZVxuICAgICAgaWYgKChzdGF0ZSA9PT0gU1RBVEVfQ0hBUlNFVCB8fCBzdGF0ZSA9PT0gU1RBVEVfTEFORykgJiYgY2hhciA9PT0gXCInXCIpIHtcbiAgICAgICAgaWYgKHN0YXRlID09PSBTVEFURV9DSEFSU0VUKSB7XG4gICAgICAgICAgc3RhdGUgPSBTVEFURV9MQU5HXG4gICAgICAgICAgY2hhcnNldCA9IHRtcC5zdWJzdHJpbmcoMSlcbiAgICAgICAgfSBlbHNlIHsgc3RhdGUgPSBTVEFURV9WQUxVRSB9XG4gICAgICAgIHRtcCA9ICcnXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9IGVsc2UgaWYgKHN0YXRlID09PSBTVEFURV9LRVkgJiZcbiAgICAgICAgKGNoYXIgPT09ICcqJyB8fCBjaGFyID09PSAnPScpICYmXG4gICAgICAgIHJlcy5sZW5ndGgpIHtcbiAgICAgICAgc3RhdGUgPSBjaGFyID09PSAnKidcbiAgICAgICAgICA/IFNUQVRFX0NIQVJTRVRcbiAgICAgICAgICA6IFNUQVRFX1ZBTFVFXG4gICAgICAgIHJlc1twXSA9IFt0bXAsIHVuZGVmaW5lZF1cbiAgICAgICAgdG1wID0gJydcbiAgICAgICAgY29udGludWVcbiAgICAgIH0gZWxzZSBpZiAoIWlucXVvdGUgJiYgY2hhciA9PT0gJzsnKSB7XG4gICAgICAgIHN0YXRlID0gU1RBVEVfS0VZXG4gICAgICAgIGlmIChjaGFyc2V0KSB7XG4gICAgICAgICAgaWYgKHRtcC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRtcCA9IGRlY29kZVRleHQodG1wLnJlcGxhY2UoUkVfRU5DT0RFRCwgZW5jb2RlZFJlcGxhY2VyKSxcbiAgICAgICAgICAgICAgJ2JpbmFyeScsXG4gICAgICAgICAgICAgIGNoYXJzZXQpXG4gICAgICAgICAgfVxuICAgICAgICAgIGNoYXJzZXQgPSAnJ1xuICAgICAgICB9IGVsc2UgaWYgKHRtcC5sZW5ndGgpIHtcbiAgICAgICAgICB0bXAgPSBkZWNvZGVUZXh0KHRtcCwgJ2JpbmFyeScsICd1dGY4JylcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzW3BdID09PSB1bmRlZmluZWQpIHsgcmVzW3BdID0gdG1wIH0gZWxzZSB7IHJlc1twXVsxXSA9IHRtcCB9XG4gICAgICAgIHRtcCA9ICcnXG4gICAgICAgICsrcFxuICAgICAgICBjb250aW51ZVxuICAgICAgfSBlbHNlIGlmICghaW5xdW90ZSAmJiAoY2hhciA9PT0gJyAnIHx8IGNoYXIgPT09ICdcXHQnKSkgeyBjb250aW51ZSB9XG4gICAgfVxuICAgIHRtcCArPSBjaGFyXG4gIH1cbiAgaWYgKGNoYXJzZXQgJiYgdG1wLmxlbmd0aCkge1xuICAgIHRtcCA9IGRlY29kZVRleHQodG1wLnJlcGxhY2UoUkVfRU5DT0RFRCwgZW5jb2RlZFJlcGxhY2VyKSxcbiAgICAgICdiaW5hcnknLFxuICAgICAgY2hhcnNldClcbiAgfSBlbHNlIGlmICh0bXApIHtcbiAgICB0bXAgPSBkZWNvZGVUZXh0KHRtcCwgJ2JpbmFyeScsICd1dGY4JylcbiAgfVxuXG4gIGlmIChyZXNbcF0gPT09IHVuZGVmaW5lZCkge1xuICAgIGlmICh0bXApIHsgcmVzW3BdID0gdG1wIH1cbiAgfSBlbHNlIHsgcmVzW3BdWzFdID0gdG1wIH1cblxuICByZXR1cm4gcmVzXG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyc2VQYXJhbXNcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYmFzZW5hbWUgKHBhdGgpIHtcbiAgaWYgKHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJykgeyByZXR1cm4gJycgfVxuICBmb3IgKHZhciBpID0gcGF0aC5sZW5ndGggLSAxOyBpID49IDA7IC0taSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXZhclxuICAgIHN3aXRjaCAocGF0aC5jaGFyQ29kZUF0KGkpKSB7XG4gICAgICBjYXNlIDB4MkY6IC8vICcvJ1xuICAgICAgY2FzZSAweDVDOiAvLyAnXFwnXG4gICAgICAgIHBhdGggPSBwYXRoLnNsaWNlKGkgKyAxKVxuICAgICAgICByZXR1cm4gKHBhdGggPT09ICcuLicgfHwgcGF0aCA9PT0gJy4nID8gJycgOiBwYXRoKVxuICAgIH1cbiAgfVxuICByZXR1cm4gKHBhdGggPT09ICcuLicgfHwgcGF0aCA9PT0gJy4nID8gJycgOiBwYXRoKVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuLy8gVE9ETzpcbi8vICAqIHN1cHBvcnQgMSBuZXN0ZWQgbXVsdGlwYXJ0IGxldmVsXG4vLyAgICAoc2VlIHNlY29uZCBtdWx0aXBhcnQgZXhhbXBsZSBoZXJlOlxuLy8gICAgIGh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0MDEvaW50ZXJhY3QvZm9ybXMuaHRtbCNkaWR4LW11bHRpcGFydGZvcm0tZGF0YSlcbi8vICAqIHN1cHBvcnQgbGltaXRzLmZpZWxkTmFtZVNpemVcbi8vICAgICAtLSB0aGlzIHdpbGwgcmVxdWlyZSBtb2RpZmljYXRpb25zIHRvIHV0aWxzLnBhcnNlUGFyYW1zXG5cbmNvbnN0IHsgUmVhZGFibGUgfSA9IHJlcXVpcmUoJ25vZGU6c3RyZWFtJylcbmNvbnN0IHsgaW5oZXJpdHMgfSA9IHJlcXVpcmUoJ25vZGU6dXRpbCcpXG5cbmNvbnN0IERpY2VyID0gcmVxdWlyZSgnLi4vLi4vZGVwcy9kaWNlci9saWIvRGljZXInKVxuXG5jb25zdCBwYXJzZVBhcmFtcyA9IHJlcXVpcmUoJy4uL3V0aWxzL3BhcnNlUGFyYW1zJylcbmNvbnN0IGRlY29kZVRleHQgPSByZXF1aXJlKCcuLi91dGlscy9kZWNvZGVUZXh0JylcbmNvbnN0IGJhc2VuYW1lID0gcmVxdWlyZSgnLi4vdXRpbHMvYmFzZW5hbWUnKVxuY29uc3QgZ2V0TGltaXQgPSByZXF1aXJlKCcuLi91dGlscy9nZXRMaW1pdCcpXG5cbmNvbnN0IFJFX0JPVU5EQVJZID0gL15ib3VuZGFyeSQvaVxuY29uc3QgUkVfRklFTEQgPSAvXmZvcm0tZGF0YSQvaVxuY29uc3QgUkVfQ0hBUlNFVCA9IC9eY2hhcnNldCQvaVxuY29uc3QgUkVfRklMRU5BTUUgPSAvXmZpbGVuYW1lJC9pXG5jb25zdCBSRV9OQU1FID0gL15uYW1lJC9pXG5cbk11bHRpcGFydC5kZXRlY3QgPSAvXm11bHRpcGFydFxcL2Zvcm0tZGF0YS9pXG5mdW5jdGlvbiBNdWx0aXBhcnQgKGJveSwgY2ZnKSB7XG4gIGxldCBpXG4gIGxldCBsZW5cbiAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgbGV0IGJvdW5kYXJ5XG4gIGNvbnN0IGxpbWl0cyA9IGNmZy5saW1pdHNcbiAgY29uc3QgaXNQYXJ0QUZpbGUgPSBjZmcuaXNQYXJ0QUZpbGUgfHwgKChmaWVsZE5hbWUsIGNvbnRlbnRUeXBlLCBmaWxlTmFtZSkgPT4gKGNvbnRlbnRUeXBlID09PSAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJyB8fCBmaWxlTmFtZSAhPT0gdW5kZWZpbmVkKSlcbiAgY29uc3QgcGFyc2VkQ29uVHlwZSA9IGNmZy5wYXJzZWRDb25UeXBlIHx8IFtdXG4gIGNvbnN0IGRlZkNoYXJzZXQgPSBjZmcuZGVmQ2hhcnNldCB8fCAndXRmOCdcbiAgY29uc3QgcHJlc2VydmVQYXRoID0gY2ZnLnByZXNlcnZlUGF0aFxuICBjb25zdCBmaWxlT3B0cyA9IHsgaGlnaFdhdGVyTWFyazogY2ZnLmZpbGVId20gfVxuXG4gIGZvciAoaSA9IDAsIGxlbiA9IHBhcnNlZENvblR5cGUubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJzZWRDb25UeXBlW2ldKSAmJlxuICAgICAgUkVfQk9VTkRBUlkudGVzdChwYXJzZWRDb25UeXBlW2ldWzBdKSkge1xuICAgICAgYm91bmRhcnkgPSBwYXJzZWRDb25UeXBlW2ldWzFdXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNoZWNrRmluaXNoZWQgKCkge1xuICAgIGlmIChuZW5kcyA9PT0gMCAmJiBmaW5pc2hlZCAmJiAhYm95Ll9kb25lKSB7XG4gICAgICBmaW5pc2hlZCA9IGZhbHNlXG4gICAgICBzZWxmLmVuZCgpXG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiBib3VuZGFyeSAhPT0gJ3N0cmluZycpIHsgdGhyb3cgbmV3IEVycm9yKCdNdWx0aXBhcnQ6IEJvdW5kYXJ5IG5vdCBmb3VuZCcpIH1cblxuICBjb25zdCBmaWVsZFNpemVMaW1pdCA9IGdldExpbWl0KGxpbWl0cywgJ2ZpZWxkU2l6ZScsIDEgKiAxMDI0ICogMTAyNClcbiAgY29uc3QgZmlsZVNpemVMaW1pdCA9IGdldExpbWl0KGxpbWl0cywgJ2ZpbGVTaXplJywgSW5maW5pdHkpXG4gIGNvbnN0IGZpbGVzTGltaXQgPSBnZXRMaW1pdChsaW1pdHMsICdmaWxlcycsIEluZmluaXR5KVxuICBjb25zdCBmaWVsZHNMaW1pdCA9IGdldExpbWl0KGxpbWl0cywgJ2ZpZWxkcycsIEluZmluaXR5KVxuICBjb25zdCBwYXJ0c0xpbWl0ID0gZ2V0TGltaXQobGltaXRzLCAncGFydHMnLCBJbmZpbml0eSlcbiAgY29uc3QgaGVhZGVyUGFpcnNMaW1pdCA9IGdldExpbWl0KGxpbWl0cywgJ2hlYWRlclBhaXJzJywgMjAwMClcbiAgY29uc3QgaGVhZGVyU2l6ZUxpbWl0ID0gZ2V0TGltaXQobGltaXRzLCAnaGVhZGVyU2l6ZScsIDgwICogMTAyNClcblxuICBsZXQgbmZpbGVzID0gMFxuICBsZXQgbmZpZWxkcyA9IDBcbiAgbGV0IG5lbmRzID0gMFxuICBsZXQgY3VyRmlsZVxuICBsZXQgY3VyRmllbGRcbiAgbGV0IGZpbmlzaGVkID0gZmFsc2VcblxuICB0aGlzLl9uZWVkRHJhaW4gPSBmYWxzZVxuICB0aGlzLl9wYXVzZSA9IGZhbHNlXG4gIHRoaXMuX2NiID0gdW5kZWZpbmVkXG4gIHRoaXMuX25wYXJ0cyA9IDBcbiAgdGhpcy5fYm95ID0gYm95XG5cbiAgY29uc3QgcGFyc2VyQ2ZnID0ge1xuICAgIGJvdW5kYXJ5LFxuICAgIG1heEhlYWRlclBhaXJzOiBoZWFkZXJQYWlyc0xpbWl0LFxuICAgIG1heEhlYWRlclNpemU6IGhlYWRlclNpemVMaW1pdCxcbiAgICBwYXJ0SHdtOiBmaWxlT3B0cy5oaWdoV2F0ZXJNYXJrLFxuICAgIGhpZ2hXYXRlck1hcms6IGNmZy5oaWdoV2F0ZXJNYXJrXG4gIH1cblxuICB0aGlzLnBhcnNlciA9IG5ldyBEaWNlcihwYXJzZXJDZmcpXG4gIHRoaXMucGFyc2VyLm9uKCdkcmFpbicsIGZ1bmN0aW9uICgpIHtcbiAgICBzZWxmLl9uZWVkRHJhaW4gPSBmYWxzZVxuICAgIGlmIChzZWxmLl9jYiAmJiAhc2VsZi5fcGF1c2UpIHtcbiAgICAgIGNvbnN0IGNiID0gc2VsZi5fY2JcbiAgICAgIHNlbGYuX2NiID0gdW5kZWZpbmVkXG4gICAgICBjYigpXG4gICAgfVxuICB9KS5vbigncGFydCcsIGZ1bmN0aW9uIG9uUGFydCAocGFydCkge1xuICAgIGlmICgrK3NlbGYuX25wYXJ0cyA+IHBhcnRzTGltaXQpIHtcbiAgICAgIHNlbGYucGFyc2VyLnJlbW92ZUxpc3RlbmVyKCdwYXJ0Jywgb25QYXJ0KVxuICAgICAgc2VsZi5wYXJzZXIub24oJ3BhcnQnLCBza2lwUGFydClcbiAgICAgIGJveS5oaXRQYXJ0c0xpbWl0ID0gdHJ1ZVxuICAgICAgYm95LmVtaXQoJ3BhcnRzTGltaXQnKVxuICAgICAgcmV0dXJuIHNraXBQYXJ0KHBhcnQpXG4gICAgfVxuXG4gICAgLy8gaGFjayBiZWNhdXNlIHN0cmVhbXMyIF9hbHdheXNfIGRvZXNuJ3QgZW1pdCAnZW5kJyB1bnRpbCBuZXh0VGljaywgc28gbGV0XG4gICAgLy8gdXMgZW1pdCAnZW5kJyBlYXJseSBzaW5jZSB3ZSBrbm93IHRoZSBwYXJ0IGhhcyBlbmRlZCBpZiB3ZSBhcmUgYWxyZWFkeVxuICAgIC8vIHNlZWluZyB0aGUgbmV4dCBwYXJ0XG4gICAgaWYgKGN1ckZpZWxkKSB7XG4gICAgICBjb25zdCBmaWVsZCA9IGN1ckZpZWxkXG4gICAgICBmaWVsZC5lbWl0KCdlbmQnKVxuICAgICAgZmllbGQucmVtb3ZlQWxsTGlzdGVuZXJzKCdlbmQnKVxuICAgIH1cblxuICAgIHBhcnQub24oJ2hlYWRlcicsIGZ1bmN0aW9uIChoZWFkZXIpIHtcbiAgICAgIGxldCBjb250eXBlXG4gICAgICBsZXQgZmllbGRuYW1lXG4gICAgICBsZXQgcGFyc2VkXG4gICAgICBsZXQgY2hhcnNldFxuICAgICAgbGV0IGVuY29kaW5nXG4gICAgICBsZXQgZmlsZW5hbWVcbiAgICAgIGxldCBuc2l6ZSA9IDBcblxuICAgICAgaWYgKGhlYWRlclsnY29udGVudC10eXBlJ10pIHtcbiAgICAgICAgcGFyc2VkID0gcGFyc2VQYXJhbXMoaGVhZGVyWydjb250ZW50LXR5cGUnXVswXSlcbiAgICAgICAgaWYgKHBhcnNlZFswXSkge1xuICAgICAgICAgIGNvbnR5cGUgPSBwYXJzZWRbMF0udG9Mb3dlckNhc2UoKVxuICAgICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IHBhcnNlZC5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgICAgICAgICAgaWYgKFJFX0NIQVJTRVQudGVzdChwYXJzZWRbaV1bMF0pKSB7XG4gICAgICAgICAgICAgIGNoYXJzZXQgPSBwYXJzZWRbaV1bMV0udG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoY29udHlwZSA9PT0gdW5kZWZpbmVkKSB7IGNvbnR5cGUgPSAndGV4dC9wbGFpbicgfVxuICAgICAgaWYgKGNoYXJzZXQgPT09IHVuZGVmaW5lZCkgeyBjaGFyc2V0ID0gZGVmQ2hhcnNldCB9XG5cbiAgICAgIGlmIChoZWFkZXJbJ2NvbnRlbnQtZGlzcG9zaXRpb24nXSkge1xuICAgICAgICBwYXJzZWQgPSBwYXJzZVBhcmFtcyhoZWFkZXJbJ2NvbnRlbnQtZGlzcG9zaXRpb24nXVswXSlcbiAgICAgICAgaWYgKCFSRV9GSUVMRC50ZXN0KHBhcnNlZFswXSkpIHsgcmV0dXJuIHNraXBQYXJ0KHBhcnQpIH1cbiAgICAgICAgZm9yIChpID0gMCwgbGVuID0gcGFyc2VkLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICAgICAgaWYgKFJFX05BTUUudGVzdChwYXJzZWRbaV1bMF0pKSB7XG4gICAgICAgICAgICBmaWVsZG5hbWUgPSBwYXJzZWRbaV1bMV1cbiAgICAgICAgICB9IGVsc2UgaWYgKFJFX0ZJTEVOQU1FLnRlc3QocGFyc2VkW2ldWzBdKSkge1xuICAgICAgICAgICAgZmlsZW5hbWUgPSBwYXJzZWRbaV1bMV1cbiAgICAgICAgICAgIGlmICghcHJlc2VydmVQYXRoKSB7IGZpbGVuYW1lID0gYmFzZW5hbWUoZmlsZW5hbWUpIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7IHJldHVybiBza2lwUGFydChwYXJ0KSB9XG5cbiAgICAgIGlmIChoZWFkZXJbJ2NvbnRlbnQtdHJhbnNmZXItZW5jb2RpbmcnXSkgeyBlbmNvZGluZyA9IGhlYWRlclsnY29udGVudC10cmFuc2Zlci1lbmNvZGluZyddWzBdLnRvTG93ZXJDYXNlKCkgfSBlbHNlIHsgZW5jb2RpbmcgPSAnN2JpdCcgfVxuXG4gICAgICBsZXQgb25EYXRhLFxuICAgICAgICBvbkVuZFxuXG4gICAgICBpZiAoaXNQYXJ0QUZpbGUoZmllbGRuYW1lLCBjb250eXBlLCBmaWxlbmFtZSkpIHtcbiAgICAgICAgLy8gZmlsZS9iaW5hcnkgZmllbGRcbiAgICAgICAgaWYgKG5maWxlcyA9PT0gZmlsZXNMaW1pdCkge1xuICAgICAgICAgIGlmICghYm95LmhpdEZpbGVzTGltaXQpIHtcbiAgICAgICAgICAgIGJveS5oaXRGaWxlc0xpbWl0ID0gdHJ1ZVxuICAgICAgICAgICAgYm95LmVtaXQoJ2ZpbGVzTGltaXQnKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gc2tpcFBhcnQocGFydClcbiAgICAgICAgfVxuXG4gICAgICAgICsrbmZpbGVzXG5cbiAgICAgICAgaWYgKGJveS5saXN0ZW5lckNvdW50KCdmaWxlJykgPT09IDApIHtcbiAgICAgICAgICBzZWxmLnBhcnNlci5faWdub3JlKClcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgICsrbmVuZHNcbiAgICAgICAgY29uc3QgZmlsZSA9IG5ldyBGaWxlU3RyZWFtKGZpbGVPcHRzKVxuICAgICAgICBjdXJGaWxlID0gZmlsZVxuICAgICAgICBmaWxlLm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLS1uZW5kc1xuICAgICAgICAgIHNlbGYuX3BhdXNlID0gZmFsc2VcbiAgICAgICAgICBjaGVja0ZpbmlzaGVkKClcbiAgICAgICAgICBpZiAoc2VsZi5fY2IgJiYgIXNlbGYuX25lZWREcmFpbikge1xuICAgICAgICAgICAgY29uc3QgY2IgPSBzZWxmLl9jYlxuICAgICAgICAgICAgc2VsZi5fY2IgPSB1bmRlZmluZWRcbiAgICAgICAgICAgIGNiKClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIGZpbGUuX3JlYWQgPSBmdW5jdGlvbiAobikge1xuICAgICAgICAgIGlmICghc2VsZi5fcGF1c2UpIHsgcmV0dXJuIH1cbiAgICAgICAgICBzZWxmLl9wYXVzZSA9IGZhbHNlXG4gICAgICAgICAgaWYgKHNlbGYuX2NiICYmICFzZWxmLl9uZWVkRHJhaW4pIHtcbiAgICAgICAgICAgIGNvbnN0IGNiID0gc2VsZi5fY2JcbiAgICAgICAgICAgIHNlbGYuX2NiID0gdW5kZWZpbmVkXG4gICAgICAgICAgICBjYigpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJveS5lbWl0KCdmaWxlJywgZmllbGRuYW1lLCBmaWxlLCBmaWxlbmFtZSwgZW5jb2RpbmcsIGNvbnR5cGUpXG5cbiAgICAgICAgb25EYXRhID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICBpZiAoKG5zaXplICs9IGRhdGEubGVuZ3RoKSA+IGZpbGVTaXplTGltaXQpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4dHJhbGVuID0gZmlsZVNpemVMaW1pdCAtIG5zaXplICsgZGF0YS5sZW5ndGhcbiAgICAgICAgICAgIGlmIChleHRyYWxlbiA+IDApIHsgZmlsZS5wdXNoKGRhdGEuc2xpY2UoMCwgZXh0cmFsZW4pKSB9XG4gICAgICAgICAgICBmaWxlLnRydW5jYXRlZCA9IHRydWVcbiAgICAgICAgICAgIGZpbGUuYnl0ZXNSZWFkID0gZmlsZVNpemVMaW1pdFxuICAgICAgICAgICAgcGFydC5yZW1vdmVBbGxMaXN0ZW5lcnMoJ2RhdGEnKVxuICAgICAgICAgICAgZmlsZS5lbWl0KCdsaW1pdCcpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9IGVsc2UgaWYgKCFmaWxlLnB1c2goZGF0YSkpIHsgc2VsZi5fcGF1c2UgPSB0cnVlIH1cblxuICAgICAgICAgIGZpbGUuYnl0ZXNSZWFkID0gbnNpemVcbiAgICAgICAgfVxuXG4gICAgICAgIG9uRW5kID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGN1ckZpbGUgPSB1bmRlZmluZWRcbiAgICAgICAgICBmaWxlLnB1c2gobnVsbClcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gbm9uLWZpbGUgZmllbGRcbiAgICAgICAgaWYgKG5maWVsZHMgPT09IGZpZWxkc0xpbWl0KSB7XG4gICAgICAgICAgaWYgKCFib3kuaGl0RmllbGRzTGltaXQpIHtcbiAgICAgICAgICAgIGJveS5oaXRGaWVsZHNMaW1pdCA9IHRydWVcbiAgICAgICAgICAgIGJveS5lbWl0KCdmaWVsZHNMaW1pdCcpXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBza2lwUGFydChwYXJ0KVxuICAgICAgICB9XG5cbiAgICAgICAgKytuZmllbGRzXG4gICAgICAgICsrbmVuZHNcbiAgICAgICAgbGV0IGJ1ZmZlciA9ICcnXG4gICAgICAgIGxldCB0cnVuY2F0ZWQgPSBmYWxzZVxuICAgICAgICBjdXJGaWVsZCA9IHBhcnRcblxuICAgICAgICBvbkRhdGEgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgIGlmICgobnNpemUgKz0gZGF0YS5sZW5ndGgpID4gZmllbGRTaXplTGltaXQpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4dHJhbGVuID0gKGZpZWxkU2l6ZUxpbWl0IC0gKG5zaXplIC0gZGF0YS5sZW5ndGgpKVxuICAgICAgICAgICAgYnVmZmVyICs9IGRhdGEudG9TdHJpbmcoJ2JpbmFyeScsIDAsIGV4dHJhbGVuKVxuICAgICAgICAgICAgdHJ1bmNhdGVkID0gdHJ1ZVxuICAgICAgICAgICAgcGFydC5yZW1vdmVBbGxMaXN0ZW5lcnMoJ2RhdGEnKVxuICAgICAgICAgIH0gZWxzZSB7IGJ1ZmZlciArPSBkYXRhLnRvU3RyaW5nKCdiaW5hcnknKSB9XG4gICAgICAgIH1cblxuICAgICAgICBvbkVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjdXJGaWVsZCA9IHVuZGVmaW5lZFxuICAgICAgICAgIGlmIChidWZmZXIubGVuZ3RoKSB7IGJ1ZmZlciA9IGRlY29kZVRleHQoYnVmZmVyLCAnYmluYXJ5JywgY2hhcnNldCkgfVxuICAgICAgICAgIGJveS5lbWl0KCdmaWVsZCcsIGZpZWxkbmFtZSwgYnVmZmVyLCBmYWxzZSwgdHJ1bmNhdGVkLCBlbmNvZGluZywgY29udHlwZSlcbiAgICAgICAgICAtLW5lbmRzXG4gICAgICAgICAgY2hlY2tGaW5pc2hlZCgpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLyogQXMgb2Ygbm9kZUAyZWZlNGFiNzYxNjY2ICh2MC4xMC4yOSsvdjAuMTEuMTQrKSwgYnVzYm95IGhhZCBiZWNvbWVcbiAgICAgICAgIGJyb2tlbi4gU3RyZWFtczIvc3RyZWFtczMgaXMgYSBodWdlIGJsYWNrIGJveCBvZiBjb25mdXNpb24sIGJ1dFxuICAgICAgICAgc29tZWhvdyBvdmVycmlkaW5nIHRoZSBzeW5jIHN0YXRlIHNlZW1zIHRvIGZpeCB0aGluZ3MgYWdhaW4gKGFuZCBzdGlsbFxuICAgICAgICAgc2VlbXMgdG8gd29yayBmb3IgcHJldmlvdXMgbm9kZSB2ZXJzaW9ucykuXG4gICAgICAqL1xuICAgICAgcGFydC5fcmVhZGFibGVTdGF0ZS5zeW5jID0gZmFsc2VcblxuICAgICAgcGFydC5vbignZGF0YScsIG9uRGF0YSlcbiAgICAgIHBhcnQub24oJ2VuZCcsIG9uRW5kKVxuICAgIH0pLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgIGlmIChjdXJGaWxlKSB7IGN1ckZpbGUuZW1pdCgnZXJyb3InLCBlcnIpIH1cbiAgICB9KVxuICB9KS5vbignZXJyb3InLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgYm95LmVtaXQoJ2Vycm9yJywgZXJyKVxuICB9KS5vbignZmluaXNoJywgZnVuY3Rpb24gKCkge1xuICAgIGZpbmlzaGVkID0gdHJ1ZVxuICAgIGNoZWNrRmluaXNoZWQoKVxuICB9KVxufVxuXG5NdWx0aXBhcnQucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKGNodW5rLCBjYikge1xuICBjb25zdCByID0gdGhpcy5wYXJzZXIud3JpdGUoY2h1bmspXG4gIGlmIChyICYmICF0aGlzLl9wYXVzZSkge1xuICAgIGNiKClcbiAgfSBlbHNlIHtcbiAgICB0aGlzLl9uZWVkRHJhaW4gPSAhclxuICAgIHRoaXMuX2NiID0gY2JcbiAgfVxufVxuXG5NdWx0aXBhcnQucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgY29uc3Qgc2VsZiA9IHRoaXNcblxuICBpZiAoc2VsZi5wYXJzZXIud3JpdGFibGUpIHtcbiAgICBzZWxmLnBhcnNlci5lbmQoKVxuICB9IGVsc2UgaWYgKCFzZWxmLl9ib3kuX2RvbmUpIHtcbiAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlbGYuX2JveS5fZG9uZSA9IHRydWVcbiAgICAgIHNlbGYuX2JveS5lbWl0KCdmaW5pc2gnKVxuICAgIH0pXG4gIH1cbn1cblxuZnVuY3Rpb24gc2tpcFBhcnQgKHBhcnQpIHtcbiAgcGFydC5yZXN1bWUoKVxufVxuXG5mdW5jdGlvbiBGaWxlU3RyZWFtIChvcHRzKSB7XG4gIFJlYWRhYmxlLmNhbGwodGhpcywgb3B0cylcblxuICB0aGlzLmJ5dGVzUmVhZCA9IDBcblxuICB0aGlzLnRydW5jYXRlZCA9IGZhbHNlXG59XG5cbmluaGVyaXRzKEZpbGVTdHJlYW0sIFJlYWRhYmxlKVxuXG5GaWxlU3RyZWFtLnByb3RvdHlwZS5fcmVhZCA9IGZ1bmN0aW9uIChuKSB7fVxuXG5tb2R1bGUuZXhwb3J0cyA9IE11bHRpcGFydFxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgUkVfUExVUyA9IC9cXCsvZ1xuXG5jb25zdCBIRVggPSBbXG4gIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsXG4gIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsXG4gIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsXG4gIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsXG4gIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsXG4gIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsXG4gIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsXG4gIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBcbl1cblxuZnVuY3Rpb24gRGVjb2RlciAoKSB7XG4gIHRoaXMuYnVmZmVyID0gdW5kZWZpbmVkXG59XG5EZWNvZGVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgLy8gUmVwbGFjZSAnKycgd2l0aCAnICcgYmVmb3JlIGRlY29kaW5nXG4gIHN0ciA9IHN0ci5yZXBsYWNlKFJFX1BMVVMsICcgJylcbiAgbGV0IHJlcyA9ICcnXG4gIGxldCBpID0gMDsgbGV0IHAgPSAwOyBjb25zdCBsZW4gPSBzdHIubGVuZ3RoXG4gIGZvciAoOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAodGhpcy5idWZmZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCFIRVhbc3RyLmNoYXJDb2RlQXQoaSldKSB7XG4gICAgICAgIHJlcyArPSAnJScgKyB0aGlzLmJ1ZmZlclxuICAgICAgICB0aGlzLmJ1ZmZlciA9IHVuZGVmaW5lZFxuICAgICAgICAtLWkgLy8gcmV0cnkgY2hhcmFjdGVyXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmJ1ZmZlciArPSBzdHJbaV1cbiAgICAgICAgKytwXG4gICAgICAgIGlmICh0aGlzLmJ1ZmZlci5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludCh0aGlzLmJ1ZmZlciwgMTYpKVxuICAgICAgICAgIHRoaXMuYnVmZmVyID0gdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHN0cltpXSA9PT0gJyUnKSB7XG4gICAgICBpZiAoaSA+IHApIHtcbiAgICAgICAgcmVzICs9IHN0ci5zdWJzdHJpbmcocCwgaSlcbiAgICAgICAgcCA9IGlcbiAgICAgIH1cbiAgICAgIHRoaXMuYnVmZmVyID0gJydcbiAgICAgICsrcFxuICAgIH1cbiAgfVxuICBpZiAocCA8IGxlbiAmJiB0aGlzLmJ1ZmZlciA9PT0gdW5kZWZpbmVkKSB7IHJlcyArPSBzdHIuc3Vic3RyaW5nKHApIH1cbiAgcmV0dXJuIHJlc1xufVxuRGVjb2Rlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuYnVmZmVyID0gdW5kZWZpbmVkXG59XG5cbm1vZHVsZS5leHBvcnRzID0gRGVjb2RlclxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgRGVjb2RlciA9IHJlcXVpcmUoJy4uL3V0aWxzL0RlY29kZXInKVxuY29uc3QgZGVjb2RlVGV4dCA9IHJlcXVpcmUoJy4uL3V0aWxzL2RlY29kZVRleHQnKVxuY29uc3QgZ2V0TGltaXQgPSByZXF1aXJlKCcuLi91dGlscy9nZXRMaW1pdCcpXG5cbmNvbnN0IFJFX0NIQVJTRVQgPSAvXmNoYXJzZXQkL2lcblxuVXJsRW5jb2RlZC5kZXRlY3QgPSAvXmFwcGxpY2F0aW9uXFwveC13d3ctZm9ybS11cmxlbmNvZGVkL2lcbmZ1bmN0aW9uIFVybEVuY29kZWQgKGJveSwgY2ZnKSB7XG4gIGNvbnN0IGxpbWl0cyA9IGNmZy5saW1pdHNcbiAgY29uc3QgcGFyc2VkQ29uVHlwZSA9IGNmZy5wYXJzZWRDb25UeXBlXG4gIHRoaXMuYm95ID0gYm95XG5cbiAgdGhpcy5maWVsZFNpemVMaW1pdCA9IGdldExpbWl0KGxpbWl0cywgJ2ZpZWxkU2l6ZScsIDEgKiAxMDI0ICogMTAyNClcbiAgdGhpcy5maWVsZE5hbWVTaXplTGltaXQgPSBnZXRMaW1pdChsaW1pdHMsICdmaWVsZE5hbWVTaXplJywgMTAwKVxuICB0aGlzLmZpZWxkc0xpbWl0ID0gZ2V0TGltaXQobGltaXRzLCAnZmllbGRzJywgSW5maW5pdHkpXG5cbiAgbGV0IGNoYXJzZXRcbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHBhcnNlZENvblR5cGUubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby12YXJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJzZWRDb25UeXBlW2ldKSAmJlxuICAgICAgICBSRV9DSEFSU0VULnRlc3QocGFyc2VkQ29uVHlwZVtpXVswXSkpIHtcbiAgICAgIGNoYXJzZXQgPSBwYXJzZWRDb25UeXBlW2ldWzFdLnRvTG93ZXJDYXNlKClcbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaWYgKGNoYXJzZXQgPT09IHVuZGVmaW5lZCkgeyBjaGFyc2V0ID0gY2ZnLmRlZkNoYXJzZXQgfHwgJ3V0ZjgnIH1cblxuICB0aGlzLmRlY29kZXIgPSBuZXcgRGVjb2RlcigpXG4gIHRoaXMuY2hhcnNldCA9IGNoYXJzZXRcbiAgdGhpcy5fZmllbGRzID0gMFxuICB0aGlzLl9zdGF0ZSA9ICdrZXknXG4gIHRoaXMuX2NoZWNraW5nQnl0ZXMgPSB0cnVlXG4gIHRoaXMuX2J5dGVzS2V5ID0gMFxuICB0aGlzLl9ieXRlc1ZhbCA9IDBcbiAgdGhpcy5fa2V5ID0gJydcbiAgdGhpcy5fdmFsID0gJydcbiAgdGhpcy5fa2V5VHJ1bmMgPSBmYWxzZVxuICB0aGlzLl92YWxUcnVuYyA9IGZhbHNlXG4gIHRoaXMuX2hpdExpbWl0ID0gZmFsc2Vcbn1cblxuVXJsRW5jb2RlZC5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiAoZGF0YSwgY2IpIHtcbiAgaWYgKHRoaXMuX2ZpZWxkcyA9PT0gdGhpcy5maWVsZHNMaW1pdCkge1xuICAgIGlmICghdGhpcy5ib3kuaGl0RmllbGRzTGltaXQpIHtcbiAgICAgIHRoaXMuYm95LmhpdEZpZWxkc0xpbWl0ID0gdHJ1ZVxuICAgICAgdGhpcy5ib3kuZW1pdCgnZmllbGRzTGltaXQnKVxuICAgIH1cbiAgICByZXR1cm4gY2IoKVxuICB9XG5cbiAgbGV0IGlkeGVxOyBsZXQgaWR4YW1wOyBsZXQgaTsgbGV0IHAgPSAwOyBjb25zdCBsZW4gPSBkYXRhLmxlbmd0aFxuXG4gIHdoaWxlIChwIDwgbGVuKSB7XG4gICAgaWYgKHRoaXMuX3N0YXRlID09PSAna2V5Jykge1xuICAgICAgaWR4ZXEgPSBpZHhhbXAgPSB1bmRlZmluZWRcbiAgICAgIGZvciAoaSA9IHA7IGkgPCBsZW47ICsraSkge1xuICAgICAgICBpZiAoIXRoaXMuX2NoZWNraW5nQnl0ZXMpIHsgKytwIH1cbiAgICAgICAgaWYgKGRhdGFbaV0gPT09IDB4M0QvKiA9ICovKSB7XG4gICAgICAgICAgaWR4ZXEgPSBpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhW2ldID09PSAweDI2LyogJiAqLykge1xuICAgICAgICAgIGlkeGFtcCA9IGlcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9jaGVja2luZ0J5dGVzICYmIHRoaXMuX2J5dGVzS2V5ID09PSB0aGlzLmZpZWxkTmFtZVNpemVMaW1pdCkge1xuICAgICAgICAgIHRoaXMuX2hpdExpbWl0ID0gdHJ1ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fY2hlY2tpbmdCeXRlcykgeyArK3RoaXMuX2J5dGVzS2V5IH1cbiAgICAgIH1cblxuICAgICAgaWYgKGlkeGVxICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8ga2V5IHdpdGggYXNzaWdubWVudFxuICAgICAgICBpZiAoaWR4ZXEgPiBwKSB7IHRoaXMuX2tleSArPSB0aGlzLmRlY29kZXIud3JpdGUoZGF0YS50b1N0cmluZygnYmluYXJ5JywgcCwgaWR4ZXEpKSB9XG4gICAgICAgIHRoaXMuX3N0YXRlID0gJ3ZhbCdcblxuICAgICAgICB0aGlzLl9oaXRMaW1pdCA9IGZhbHNlXG4gICAgICAgIHRoaXMuX2NoZWNraW5nQnl0ZXMgPSB0cnVlXG4gICAgICAgIHRoaXMuX3ZhbCA9ICcnXG4gICAgICAgIHRoaXMuX2J5dGVzVmFsID0gMFxuICAgICAgICB0aGlzLl92YWxUcnVuYyA9IGZhbHNlXG4gICAgICAgIHRoaXMuZGVjb2Rlci5yZXNldCgpXG5cbiAgICAgICAgcCA9IGlkeGVxICsgMVxuICAgICAgfSBlbHNlIGlmIChpZHhhbXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBrZXkgd2l0aCBubyBhc3NpZ25tZW50XG4gICAgICAgICsrdGhpcy5fZmllbGRzXG4gICAgICAgIGxldCBrZXk7IGNvbnN0IGtleVRydW5jID0gdGhpcy5fa2V5VHJ1bmNcbiAgICAgICAgaWYgKGlkeGFtcCA+IHApIHsga2V5ID0gKHRoaXMuX2tleSArPSB0aGlzLmRlY29kZXIud3JpdGUoZGF0YS50b1N0cmluZygnYmluYXJ5JywgcCwgaWR4YW1wKSkpIH0gZWxzZSB7IGtleSA9IHRoaXMuX2tleSB9XG5cbiAgICAgICAgdGhpcy5faGl0TGltaXQgPSBmYWxzZVxuICAgICAgICB0aGlzLl9jaGVja2luZ0J5dGVzID0gdHJ1ZVxuICAgICAgICB0aGlzLl9rZXkgPSAnJ1xuICAgICAgICB0aGlzLl9ieXRlc0tleSA9IDBcbiAgICAgICAgdGhpcy5fa2V5VHJ1bmMgPSBmYWxzZVxuICAgICAgICB0aGlzLmRlY29kZXIucmVzZXQoKVxuXG4gICAgICAgIGlmIChrZXkubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5ib3kuZW1pdCgnZmllbGQnLCBkZWNvZGVUZXh0KGtleSwgJ2JpbmFyeScsIHRoaXMuY2hhcnNldCksXG4gICAgICAgICAgICAnJyxcbiAgICAgICAgICAgIGtleVRydW5jLFxuICAgICAgICAgICAgZmFsc2UpXG4gICAgICAgIH1cblxuICAgICAgICBwID0gaWR4YW1wICsgMVxuICAgICAgICBpZiAodGhpcy5fZmllbGRzID09PSB0aGlzLmZpZWxkc0xpbWl0KSB7IHJldHVybiBjYigpIH1cbiAgICAgIH0gZWxzZSBpZiAodGhpcy5faGl0TGltaXQpIHtcbiAgICAgICAgLy8gd2UgbWF5IG5vdCBoYXZlIGhpdCB0aGUgYWN0dWFsIGxpbWl0IGlmIHRoZXJlIGFyZSBlbmNvZGVkIGJ5dGVzLi4uXG4gICAgICAgIGlmIChpID4gcCkgeyB0aGlzLl9rZXkgKz0gdGhpcy5kZWNvZGVyLndyaXRlKGRhdGEudG9TdHJpbmcoJ2JpbmFyeScsIHAsIGkpKSB9XG4gICAgICAgIHAgPSBpXG4gICAgICAgIGlmICgodGhpcy5fYnl0ZXNLZXkgPSB0aGlzLl9rZXkubGVuZ3RoKSA9PT0gdGhpcy5maWVsZE5hbWVTaXplTGltaXQpIHtcbiAgICAgICAgICAvLyB5ZXAsIHdlIGFjdHVhbGx5IGRpZCBoaXQgdGhlIGxpbWl0XG4gICAgICAgICAgdGhpcy5fY2hlY2tpbmdCeXRlcyA9IGZhbHNlXG4gICAgICAgICAgdGhpcy5fa2V5VHJ1bmMgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChwIDwgbGVuKSB7IHRoaXMuX2tleSArPSB0aGlzLmRlY29kZXIud3JpdGUoZGF0YS50b1N0cmluZygnYmluYXJ5JywgcCkpIH1cbiAgICAgICAgcCA9IGxlblxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZHhhbXAgPSB1bmRlZmluZWRcbiAgICAgIGZvciAoaSA9IHA7IGkgPCBsZW47ICsraSkge1xuICAgICAgICBpZiAoIXRoaXMuX2NoZWNraW5nQnl0ZXMpIHsgKytwIH1cbiAgICAgICAgaWYgKGRhdGFbaV0gPT09IDB4MjYvKiAmICovKSB7XG4gICAgICAgICAgaWR4YW1wID0gaVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2NoZWNraW5nQnl0ZXMgJiYgdGhpcy5fYnl0ZXNWYWwgPT09IHRoaXMuZmllbGRTaXplTGltaXQpIHtcbiAgICAgICAgICB0aGlzLl9oaXRMaW1pdCA9IHRydWVcbiAgICAgICAgICBicmVha1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2NoZWNraW5nQnl0ZXMpIHsgKyt0aGlzLl9ieXRlc1ZhbCB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpZHhhbXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICArK3RoaXMuX2ZpZWxkc1xuICAgICAgICBpZiAoaWR4YW1wID4gcCkgeyB0aGlzLl92YWwgKz0gdGhpcy5kZWNvZGVyLndyaXRlKGRhdGEudG9TdHJpbmcoJ2JpbmFyeScsIHAsIGlkeGFtcCkpIH1cbiAgICAgICAgdGhpcy5ib3kuZW1pdCgnZmllbGQnLCBkZWNvZGVUZXh0KHRoaXMuX2tleSwgJ2JpbmFyeScsIHRoaXMuY2hhcnNldCksXG4gICAgICAgICAgZGVjb2RlVGV4dCh0aGlzLl92YWwsICdiaW5hcnknLCB0aGlzLmNoYXJzZXQpLFxuICAgICAgICAgIHRoaXMuX2tleVRydW5jLFxuICAgICAgICAgIHRoaXMuX3ZhbFRydW5jKVxuICAgICAgICB0aGlzLl9zdGF0ZSA9ICdrZXknXG5cbiAgICAgICAgdGhpcy5faGl0TGltaXQgPSBmYWxzZVxuICAgICAgICB0aGlzLl9jaGVja2luZ0J5dGVzID0gdHJ1ZVxuICAgICAgICB0aGlzLl9rZXkgPSAnJ1xuICAgICAgICB0aGlzLl9ieXRlc0tleSA9IDBcbiAgICAgICAgdGhpcy5fa2V5VHJ1bmMgPSBmYWxzZVxuICAgICAgICB0aGlzLmRlY29kZXIucmVzZXQoKVxuXG4gICAgICAgIHAgPSBpZHhhbXAgKyAxXG4gICAgICAgIGlmICh0aGlzLl9maWVsZHMgPT09IHRoaXMuZmllbGRzTGltaXQpIHsgcmV0dXJuIGNiKCkgfVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9oaXRMaW1pdCkge1xuICAgICAgICAvLyB3ZSBtYXkgbm90IGhhdmUgaGl0IHRoZSBhY3R1YWwgbGltaXQgaWYgdGhlcmUgYXJlIGVuY29kZWQgYnl0ZXMuLi5cbiAgICAgICAgaWYgKGkgPiBwKSB7IHRoaXMuX3ZhbCArPSB0aGlzLmRlY29kZXIud3JpdGUoZGF0YS50b1N0cmluZygnYmluYXJ5JywgcCwgaSkpIH1cbiAgICAgICAgcCA9IGlcbiAgICAgICAgaWYgKCh0aGlzLl92YWwgPT09ICcnICYmIHRoaXMuZmllbGRTaXplTGltaXQgPT09IDApIHx8XG4gICAgICAgICAgICAodGhpcy5fYnl0ZXNWYWwgPSB0aGlzLl92YWwubGVuZ3RoKSA9PT0gdGhpcy5maWVsZFNpemVMaW1pdCkge1xuICAgICAgICAgIC8vIHllcCwgd2UgYWN0dWFsbHkgZGlkIGhpdCB0aGUgbGltaXRcbiAgICAgICAgICB0aGlzLl9jaGVja2luZ0J5dGVzID0gZmFsc2VcbiAgICAgICAgICB0aGlzLl92YWxUcnVuYyA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHAgPCBsZW4pIHsgdGhpcy5fdmFsICs9IHRoaXMuZGVjb2Rlci53cml0ZShkYXRhLnRvU3RyaW5nKCdiaW5hcnknLCBwKSkgfVxuICAgICAgICBwID0gbGVuXG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNiKClcbn1cblxuVXJsRW5jb2RlZC5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5ib3kuX2RvbmUpIHsgcmV0dXJuIH1cblxuICBpZiAodGhpcy5fc3RhdGUgPT09ICdrZXknICYmIHRoaXMuX2tleS5sZW5ndGggPiAwKSB7XG4gICAgdGhpcy5ib3kuZW1pdCgnZmllbGQnLCBkZWNvZGVUZXh0KHRoaXMuX2tleSwgJ2JpbmFyeScsIHRoaXMuY2hhcnNldCksXG4gICAgICAnJyxcbiAgICAgIHRoaXMuX2tleVRydW5jLFxuICAgICAgZmFsc2UpXG4gIH0gZWxzZSBpZiAodGhpcy5fc3RhdGUgPT09ICd2YWwnKSB7XG4gICAgdGhpcy5ib3kuZW1pdCgnZmllbGQnLCBkZWNvZGVUZXh0KHRoaXMuX2tleSwgJ2JpbmFyeScsIHRoaXMuY2hhcnNldCksXG4gICAgICBkZWNvZGVUZXh0KHRoaXMuX3ZhbCwgJ2JpbmFyeScsIHRoaXMuY2hhcnNldCksXG4gICAgICB0aGlzLl9rZXlUcnVuYyxcbiAgICAgIHRoaXMuX3ZhbFRydW5jKVxuICB9XG4gIHRoaXMuYm95Ll9kb25lID0gdHJ1ZVxuICB0aGlzLmJveS5lbWl0KCdmaW5pc2gnKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFVybEVuY29kZWRcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFdyaXRhYmxlU3RyZWFtID0gcmVxdWlyZSgnbm9kZTpzdHJlYW0nKS5Xcml0YWJsZVxuY29uc3QgeyBpbmhlcml0cyB9ID0gcmVxdWlyZSgnbm9kZTp1dGlsJylcbmNvbnN0IERpY2VyID0gcmVxdWlyZSgnLi4vZGVwcy9kaWNlci9saWIvRGljZXInKVxuXG5jb25zdCBNdWx0aXBhcnRQYXJzZXIgPSByZXF1aXJlKCcuL3R5cGVzL211bHRpcGFydCcpXG5jb25zdCBVcmxlbmNvZGVkUGFyc2VyID0gcmVxdWlyZSgnLi90eXBlcy91cmxlbmNvZGVkJylcbmNvbnN0IHBhcnNlUGFyYW1zID0gcmVxdWlyZSgnLi91dGlscy9wYXJzZVBhcmFtcycpXG5cbmZ1bmN0aW9uIEJ1c2JveSAob3B0cykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQnVzYm95KSkgeyByZXR1cm4gbmV3IEJ1c2JveShvcHRzKSB9XG5cbiAgaWYgKHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0J1c2JveSBleHBlY3RlZCBhbiBvcHRpb25zLU9iamVjdC4nKVxuICB9XG4gIGlmICh0eXBlb2Ygb3B0cy5oZWFkZXJzICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0J1c2JveSBleHBlY3RlZCBhbiBvcHRpb25zLU9iamVjdCB3aXRoIGhlYWRlcnMtYXR0cmlidXRlLicpXG4gIH1cbiAgaWYgKHR5cGVvZiBvcHRzLmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ01pc3NpbmcgQ29udGVudC1UeXBlLWhlYWRlci4nKVxuICB9XG5cbiAgY29uc3Qge1xuICAgIGhlYWRlcnMsXG4gICAgLi4uc3RyZWFtT3B0aW9uc1xuICB9ID0gb3B0c1xuXG4gIHRoaXMub3B0cyA9IHtcbiAgICBhdXRvRGVzdHJveTogZmFsc2UsXG4gICAgLi4uc3RyZWFtT3B0aW9uc1xuICB9XG4gIFdyaXRhYmxlU3RyZWFtLmNhbGwodGhpcywgdGhpcy5vcHRzKVxuXG4gIHRoaXMuX2RvbmUgPSBmYWxzZVxuICB0aGlzLl9wYXJzZXIgPSB0aGlzLmdldFBhcnNlckJ5SGVhZGVycyhoZWFkZXJzKVxuICB0aGlzLl9maW5pc2hlZCA9IGZhbHNlXG59XG5pbmhlcml0cyhCdXNib3ksIFdyaXRhYmxlU3RyZWFtKVxuXG5CdXNib3kucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiAoZXYpIHtcbiAgaWYgKGV2ID09PSAnZmluaXNoJykge1xuICAgIGlmICghdGhpcy5fZG9uZSkge1xuICAgICAgdGhpcy5fcGFyc2VyPy5lbmQoKVxuICAgICAgcmV0dXJuXG4gICAgfSBlbHNlIGlmICh0aGlzLl9maW5pc2hlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHRoaXMuX2ZpbmlzaGVkID0gdHJ1ZVxuICB9XG4gIFdyaXRhYmxlU3RyZWFtLnByb3RvdHlwZS5lbWl0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbn1cblxuQnVzYm95LnByb3RvdHlwZS5nZXRQYXJzZXJCeUhlYWRlcnMgPSBmdW5jdGlvbiAoaGVhZGVycykge1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZVBhcmFtcyhoZWFkZXJzWydjb250ZW50LXR5cGUnXSlcblxuICBjb25zdCBjZmcgPSB7XG4gICAgZGVmQ2hhcnNldDogdGhpcy5vcHRzLmRlZkNoYXJzZXQsXG4gICAgZmlsZUh3bTogdGhpcy5vcHRzLmZpbGVId20sXG4gICAgaGVhZGVycyxcbiAgICBoaWdoV2F0ZXJNYXJrOiB0aGlzLm9wdHMuaGlnaFdhdGVyTWFyayxcbiAgICBpc1BhcnRBRmlsZTogdGhpcy5vcHRzLmlzUGFydEFGaWxlLFxuICAgIGxpbWl0czogdGhpcy5vcHRzLmxpbWl0cyxcbiAgICBwYXJzZWRDb25UeXBlOiBwYXJzZWQsXG4gICAgcHJlc2VydmVQYXRoOiB0aGlzLm9wdHMucHJlc2VydmVQYXRoXG4gIH1cblxuICBpZiAoTXVsdGlwYXJ0UGFyc2VyLmRldGVjdC50ZXN0KHBhcnNlZFswXSkpIHtcbiAgICByZXR1cm4gbmV3IE11bHRpcGFydFBhcnNlcih0aGlzLCBjZmcpXG4gIH1cbiAgaWYgKFVybGVuY29kZWRQYXJzZXIuZGV0ZWN0LnRlc3QocGFyc2VkWzBdKSkge1xuICAgIHJldHVybiBuZXcgVXJsZW5jb2RlZFBhcnNlcih0aGlzLCBjZmcpXG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBDb250ZW50LVR5cGUuJylcbn1cblxuQnVzYm95LnByb3RvdHlwZS5fd3JpdGUgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICB0aGlzLl9wYXJzZXIud3JpdGUoY2h1bmssIGNiKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEJ1c2JveVxubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IEJ1c2JveVxubW9kdWxlLmV4cG9ydHMuQnVzYm95ID0gQnVzYm95XG5cbm1vZHVsZS5leHBvcnRzLkRpY2VyID0gRGljZXJcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgTWVzc2FnZUNoYW5uZWwsIHJlY2VpdmVNZXNzYWdlT25Qb3J0IH0gPSByZXF1aXJlKCd3b3JrZXJfdGhyZWFkcycpXG5cbmNvbnN0IGNvcnNTYWZlTGlzdGVkTWV0aG9kcyA9IFsnR0VUJywgJ0hFQUQnLCAnUE9TVCddXG5jb25zdCBjb3JzU2FmZUxpc3RlZE1ldGhvZHNTZXQgPSBuZXcgU2V0KGNvcnNTYWZlTGlzdGVkTWV0aG9kcylcblxuY29uc3QgbnVsbEJvZHlTdGF0dXMgPSBbMTAxLCAyMDQsIDIwNSwgMzA0XVxuXG5jb25zdCByZWRpcmVjdFN0YXR1cyA9IFszMDEsIDMwMiwgMzAzLCAzMDcsIDMwOF1cbmNvbnN0IHJlZGlyZWN0U3RhdHVzU2V0ID0gbmV3IFNldChyZWRpcmVjdFN0YXR1cylcblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2Jsb2NrLWJhZC1wb3J0XG5jb25zdCBiYWRQb3J0cyA9IFtcbiAgJzEnLCAnNycsICc5JywgJzExJywgJzEzJywgJzE1JywgJzE3JywgJzE5JywgJzIwJywgJzIxJywgJzIyJywgJzIzJywgJzI1JywgJzM3JywgJzQyJywgJzQzJywgJzUzJywgJzY5JywgJzc3JywgJzc5JyxcbiAgJzg3JywgJzk1JywgJzEwMScsICcxMDInLCAnMTAzJywgJzEwNCcsICcxMDknLCAnMTEwJywgJzExMScsICcxMTMnLCAnMTE1JywgJzExNycsICcxMTknLCAnMTIzJywgJzEzNScsICcxMzcnLFxuICAnMTM5JywgJzE0MycsICcxNjEnLCAnMTc5JywgJzM4OScsICc0MjcnLCAnNDY1JywgJzUxMicsICc1MTMnLCAnNTE0JywgJzUxNScsICc1MjYnLCAnNTMwJywgJzUzMScsICc1MzInLFxuICAnNTQwJywgJzU0OCcsICc1NTQnLCAnNTU2JywgJzU2MycsICc1ODcnLCAnNjAxJywgJzYzNicsICc5ODknLCAnOTkwJywgJzk5MycsICc5OTUnLCAnMTcxOScsICcxNzIwJywgJzE3MjMnLFxuICAnMjA0OScsICczNjU5JywgJzQwNDUnLCAnNTA2MCcsICc1MDYxJywgJzYwMDAnLCAnNjU2NicsICc2NjY1JywgJzY2NjYnLCAnNjY2NycsICc2NjY4JywgJzY2NjknLCAnNjY5NycsXG4gICcxMDA4MCdcbl1cblxuY29uc3QgYmFkUG9ydHNTZXQgPSBuZXcgU2V0KGJhZFBvcnRzKVxuXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLXJlZmVycmVyLXBvbGljeS8jcmVmZXJyZXItcG9saWNpZXNcbmNvbnN0IHJlZmVycmVyUG9saWN5ID0gW1xuICAnJyxcbiAgJ25vLXJlZmVycmVyJyxcbiAgJ25vLXJlZmVycmVyLXdoZW4tZG93bmdyYWRlJyxcbiAgJ3NhbWUtb3JpZ2luJyxcbiAgJ29yaWdpbicsXG4gICdzdHJpY3Qtb3JpZ2luJyxcbiAgJ29yaWdpbi13aGVuLWNyb3NzLW9yaWdpbicsXG4gICdzdHJpY3Qtb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luJyxcbiAgJ3Vuc2FmZS11cmwnXG5dXG5jb25zdCByZWZlcnJlclBvbGljeVNldCA9IG5ldyBTZXQocmVmZXJyZXJQb2xpY3kpXG5cbmNvbnN0IHJlcXVlc3RSZWRpcmVjdCA9IFsnZm9sbG93JywgJ21hbnVhbCcsICdlcnJvciddXG5cbmNvbnN0IHNhZmVNZXRob2RzID0gWydHRVQnLCAnSEVBRCcsICdPUFRJT05TJywgJ1RSQUNFJ11cbmNvbnN0IHNhZmVNZXRob2RzU2V0ID0gbmV3IFNldChzYWZlTWV0aG9kcylcblxuY29uc3QgcmVxdWVzdE1vZGUgPSBbJ25hdmlnYXRlJywgJ3NhbWUtb3JpZ2luJywgJ25vLWNvcnMnLCAnY29ycyddXG5cbmNvbnN0IHJlcXVlc3RDcmVkZW50aWFscyA9IFsnb21pdCcsICdzYW1lLW9yaWdpbicsICdpbmNsdWRlJ11cblxuY29uc3QgcmVxdWVzdENhY2hlID0gW1xuICAnZGVmYXVsdCcsXG4gICduby1zdG9yZScsXG4gICdyZWxvYWQnLFxuICAnbm8tY2FjaGUnLFxuICAnZm9yY2UtY2FjaGUnLFxuICAnb25seS1pZi1jYWNoZWQnXG5dXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXF1ZXN0LWJvZHktaGVhZGVyLW5hbWVcbmNvbnN0IHJlcXVlc3RCb2R5SGVhZGVyID0gW1xuICAnY29udGVudC1lbmNvZGluZycsXG4gICdjb250ZW50LWxhbmd1YWdlJyxcbiAgJ2NvbnRlbnQtbG9jYXRpb24nLFxuICAnY29udGVudC10eXBlJyxcbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8yMDIxXG4gIC8vICdDb250ZW50LUxlbmd0aCcgaXMgYSBmb3JiaWRkZW4gaGVhZGVyIG5hbWUsIHdoaWNoIGlzIHR5cGljYWxseVxuICAvLyByZW1vdmVkIGluIHRoZSBIZWFkZXJzIGltcGxlbWVudGF0aW9uLiBIb3dldmVyLCB1bmRpY2kgZG9lc24ndFxuICAvLyBmaWx0ZXIgb3V0IGhlYWRlcnMsIHNvIHdlIGFkZCBpdCBoZXJlLlxuICAnY29udGVudC1sZW5ndGgnXG5dXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNlbnVtZGVmLXJlcXVlc3RkdXBsZXhcbmNvbnN0IHJlcXVlc3REdXBsZXggPSBbXG4gICdoYWxmJ1xuXVxuXG4vLyBodHRwOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmb3JiaWRkZW4tbWV0aG9kXG5jb25zdCBmb3JiaWRkZW5NZXRob2RzID0gWydDT05ORUNUJywgJ1RSQUNFJywgJ1RSQUNLJ11cbmNvbnN0IGZvcmJpZGRlbk1ldGhvZHNTZXQgPSBuZXcgU2V0KGZvcmJpZGRlbk1ldGhvZHMpXG5cbmNvbnN0IHN1YnJlc291cmNlID0gW1xuICAnYXVkaW8nLFxuICAnYXVkaW93b3JrbGV0JyxcbiAgJ2ZvbnQnLFxuICAnaW1hZ2UnLFxuICAnbWFuaWZlc3QnLFxuICAncGFpbnR3b3JrbGV0JyxcbiAgJ3NjcmlwdCcsXG4gICdzdHlsZScsXG4gICd0cmFjaycsXG4gICd2aWRlbycsXG4gICd4c2x0JyxcbiAgJydcbl1cbmNvbnN0IHN1YnJlc291cmNlU2V0ID0gbmV3IFNldChzdWJyZXNvdXJjZSlcblxuLyoqIEB0eXBlIHtnbG9iYWxUaGlzWydET01FeGNlcHRpb24nXX0gKi9cbmNvbnN0IERPTUV4Y2VwdGlvbiA9IGdsb2JhbFRoaXMuRE9NRXhjZXB0aW9uID8/ICgoKSA9PiB7XG4gIC8vIERPTUV4Y2VwdGlvbiB3YXMgb25seSBtYWRlIGEgZ2xvYmFsIGluIE5vZGUgdjE3LjAuMCxcbiAgLy8gYnV0IGZldGNoIHN1cHBvcnRzID49IHYxNi44LlxuICB0cnkge1xuICAgIGF0b2IoJ34nKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKGVycikuY29uc3RydWN0b3JcbiAgfVxufSkoKVxuXG5sZXQgY2hhbm5lbFxuXG4vKiogQHR5cGUge2dsb2JhbFRoaXNbJ3N0cnVjdHVyZWRDbG9uZSddfSAqL1xuY29uc3Qgc3RydWN0dXJlZENsb25lID1cbiAgZ2xvYmFsVGhpcy5zdHJ1Y3R1cmVkQ2xvbmUgPz9cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvYjI3YWUyNGRjYzQyNTFiYWQ3MjZkOWQ4NGJhZjY3OGQxZjcwN2ZlZC9saWIvaW50ZXJuYWwvc3RydWN0dXJlZF9jbG9uZS5qc1xuICAvLyBzdHJ1Y3R1cmVkQ2xvbmUgd2FzIGFkZGVkIGluIHYxNy4wLjAsIGJ1dCBmZXRjaCBzdXBwb3J0cyB2MTYuOFxuICBmdW5jdGlvbiBzdHJ1Y3R1cmVkQ2xvbmUgKHZhbHVlLCBvcHRpb25zID0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ21pc3NpbmcgYXJndW1lbnQnKVxuICAgIH1cblxuICAgIGlmICghY2hhbm5lbCkge1xuICAgICAgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpXG4gICAgfVxuICAgIGNoYW5uZWwucG9ydDEudW5yZWYoKVxuICAgIGNoYW5uZWwucG9ydDIudW5yZWYoKVxuICAgIGNoYW5uZWwucG9ydDEucG9zdE1lc3NhZ2UodmFsdWUsIG9wdGlvbnM/LnRyYW5zZmVyKVxuICAgIHJldHVybiByZWNlaXZlTWVzc2FnZU9uUG9ydChjaGFubmVsLnBvcnQyKS5tZXNzYWdlXG4gIH1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIERPTUV4Y2VwdGlvbixcbiAgc3RydWN0dXJlZENsb25lLFxuICBzdWJyZXNvdXJjZSxcbiAgZm9yYmlkZGVuTWV0aG9kcyxcbiAgcmVxdWVzdEJvZHlIZWFkZXIsXG4gIHJlZmVycmVyUG9saWN5LFxuICByZXF1ZXN0UmVkaXJlY3QsXG4gIHJlcXVlc3RNb2RlLFxuICByZXF1ZXN0Q3JlZGVudGlhbHMsXG4gIHJlcXVlc3RDYWNoZSxcbiAgcmVkaXJlY3RTdGF0dXMsXG4gIGNvcnNTYWZlTGlzdGVkTWV0aG9kcyxcbiAgbnVsbEJvZHlTdGF0dXMsXG4gIHNhZmVNZXRob2RzLFxuICBiYWRQb3J0cyxcbiAgcmVxdWVzdER1cGxleCxcbiAgc3VicmVzb3VyY2VTZXQsXG4gIGJhZFBvcnRzU2V0LFxuICByZWRpcmVjdFN0YXR1c1NldCxcbiAgY29yc1NhZmVMaXN0ZWRNZXRob2RzU2V0LFxuICBzYWZlTWV0aG9kc1NldCxcbiAgZm9yYmlkZGVuTWV0aG9kc1NldCxcbiAgcmVmZXJyZXJQb2xpY3lTZXRcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbi8vIEluIGNhc2Ugb2YgYnJlYWtpbmcgY2hhbmdlcywgaW5jcmVhc2UgdGhlIHZlcnNpb25cbi8vIG51bWJlciB0byBhdm9pZCBjb25mbGljdHMuXG5jb25zdCBnbG9iYWxPcmlnaW4gPSBTeW1ib2wuZm9yKCd1bmRpY2kuZ2xvYmFsT3JpZ2luLjEnKVxuXG5mdW5jdGlvbiBnZXRHbG9iYWxPcmlnaW4gKCkge1xuICByZXR1cm4gZ2xvYmFsVGhpc1tnbG9iYWxPcmlnaW5dXG59XG5cbmZ1bmN0aW9uIHNldEdsb2JhbE9yaWdpbiAobmV3T3JpZ2luKSB7XG4gIGlmIChuZXdPcmlnaW4gPT09IHVuZGVmaW5lZCkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnbG9iYWxUaGlzLCBnbG9iYWxPcmlnaW4sIHtcbiAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZVxuICAgIH0pXG5cbiAgICByZXR1cm5cbiAgfVxuXG4gIGNvbnN0IHBhcnNlZFVSTCA9IG5ldyBVUkwobmV3T3JpZ2luKVxuXG4gIGlmIChwYXJzZWRVUkwucHJvdG9jb2wgIT09ICdodHRwOicgJiYgcGFyc2VkVVJMLnByb3RvY29sICE9PSAnaHR0cHM6Jykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE9ubHkgaHR0cCAmIGh0dHBzIHVybHMgYXJlIGFsbG93ZWQsIHJlY2VpdmVkICR7cGFyc2VkVVJMLnByb3RvY29sfWApXG4gIH1cblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZ2xvYmFsVGhpcywgZ2xvYmFsT3JpZ2luLCB7XG4gICAgdmFsdWU6IHBhcnNlZFVSTCxcbiAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IGZhbHNlXG4gIH0pXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRHbG9iYWxPcmlnaW4sXG4gIHNldEdsb2JhbE9yaWdpblxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyByZWRpcmVjdFN0YXR1c1NldCwgcmVmZXJyZXJQb2xpY3lTZXQ6IHJlZmVycmVyUG9saWN5VG9rZW5zLCBiYWRQb3J0c1NldCB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3QgeyBnZXRHbG9iYWxPcmlnaW4gfSA9IHJlcXVpcmUoJy4vZ2xvYmFsJylcbmNvbnN0IHsgcGVyZm9ybWFuY2UgfSA9IHJlcXVpcmUoJ3BlcmZfaG9va3MnKVxuY29uc3QgeyBpc0Jsb2JMaWtlLCB0b1VTVlN0cmluZywgUmVhZGFibGVTdHJlYW1Gcm9tIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbmNvbnN0IHsgaXNVaW50OEFycmF5IH0gPSByZXF1aXJlKCd1dGlsL3R5cGVzJylcblxubGV0IHN1cHBvcnRlZEhhc2hlcyA9IFtdXG5cbi8vIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvY3J5cHRvLmh0bWwjZGV0ZXJtaW5pbmctaWYtY3J5cHRvLXN1cHBvcnQtaXMtdW5hdmFpbGFibGVcbi8qKiBAdHlwZSB7aW1wb3J0KCdjcnlwdG8nKXx1bmRlZmluZWR9ICovXG5sZXQgY3J5cHRvXG5cbnRyeSB7XG4gIGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpXG4gIGNvbnN0IHBvc3NpYmxlUmVsZXZhbnRIYXNoZXMgPSBbJ3NoYTI1NicsICdzaGEzODQnLCAnc2hhNTEyJ11cbiAgc3VwcG9ydGVkSGFzaGVzID0gY3J5cHRvLmdldEhhc2hlcygpLmZpbHRlcigoaGFzaCkgPT4gcG9zc2libGVSZWxldmFudEhhc2hlcy5pbmNsdWRlcyhoYXNoKSlcbi8qIGM4IGlnbm9yZSBuZXh0IDMgKi9cbn0gY2F0Y2gge1xufVxuXG5mdW5jdGlvbiByZXNwb25zZVVSTCAocmVzcG9uc2UpIHtcbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3Jlc3BvbnNlc1xuICAvLyBBIHJlc3BvbnNlIGhhcyBhbiBhc3NvY2lhdGVkIFVSTC4gSXQgaXMgYSBwb2ludGVyIHRvIHRoZSBsYXN0IFVSTFxuICAvLyBpbiByZXNwb25zZeKAmXMgVVJMIGxpc3QgYW5kIG51bGwgaWYgcmVzcG9uc2XigJlzIFVSTCBsaXN0IGlzIGVtcHR5LlxuICBjb25zdCB1cmxMaXN0ID0gcmVzcG9uc2UudXJsTGlzdFxuICBjb25zdCBsZW5ndGggPSB1cmxMaXN0Lmxlbmd0aFxuICByZXR1cm4gbGVuZ3RoID09PSAwID8gbnVsbCA6IHVybExpc3RbbGVuZ3RoIC0gMV0udG9TdHJpbmcoKVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1yZXNwb25zZS1sb2NhdGlvbi11cmxcbmZ1bmN0aW9uIHJlc3BvbnNlTG9jYXRpb25VUkwgKHJlc3BvbnNlLCByZXF1ZXN0RnJhZ21lbnQpIHtcbiAgLy8gMS4gSWYgcmVzcG9uc2XigJlzIHN0YXR1cyBpcyBub3QgYSByZWRpcmVjdCBzdGF0dXMsIHRoZW4gcmV0dXJuIG51bGwuXG4gIGlmICghcmVkaXJlY3RTdGF0dXNTZXQuaGFzKHJlc3BvbnNlLnN0YXR1cykpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLy8gMi4gTGV0IGxvY2F0aW9uIGJlIHRoZSByZXN1bHQgb2YgZXh0cmFjdGluZyBoZWFkZXIgbGlzdCB2YWx1ZXMgZ2l2ZW5cbiAgLy8gYExvY2F0aW9uYCBhbmQgcmVzcG9uc2XigJlzIGhlYWRlciBsaXN0LlxuICBsZXQgbG9jYXRpb24gPSByZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ2xvY2F0aW9uJylcblxuICAvLyAzLiBJZiBsb2NhdGlvbiBpcyBhIGhlYWRlciB2YWx1ZSwgdGhlbiBzZXQgbG9jYXRpb24gdG8gdGhlIHJlc3VsdCBvZlxuICAvLyAgICBwYXJzaW5nIGxvY2F0aW9uIHdpdGggcmVzcG9uc2XigJlzIFVSTC5cbiAgaWYgKGxvY2F0aW9uICE9PSBudWxsICYmIGlzVmFsaWRIZWFkZXJWYWx1ZShsb2NhdGlvbikpIHtcbiAgICBsb2NhdGlvbiA9IG5ldyBVUkwobG9jYXRpb24sIHJlc3BvbnNlVVJMKHJlc3BvbnNlKSlcbiAgfVxuXG4gIC8vIDQuIElmIGxvY2F0aW9uIGlzIGEgVVJMIHdob3NlIGZyYWdtZW50IGlzIG51bGwsIHRoZW4gc2V0IGxvY2F0aW9u4oCZc1xuICAvLyBmcmFnbWVudCB0byByZXF1ZXN0RnJhZ21lbnQuXG4gIGlmIChsb2NhdGlvbiAmJiAhbG9jYXRpb24uaGFzaCkge1xuICAgIGxvY2F0aW9uLmhhc2ggPSByZXF1ZXN0RnJhZ21lbnRcbiAgfVxuXG4gIC8vIDUuIFJldHVybiBsb2NhdGlvbi5cbiAgcmV0dXJuIGxvY2F0aW9uXG59XG5cbi8qKiBAcmV0dXJucyB7VVJMfSAqL1xuZnVuY3Rpb24gcmVxdWVzdEN1cnJlbnRVUkwgKHJlcXVlc3QpIHtcbiAgcmV0dXJuIHJlcXVlc3QudXJsTGlzdFtyZXF1ZXN0LnVybExpc3QubGVuZ3RoIC0gMV1cbn1cblxuZnVuY3Rpb24gcmVxdWVzdEJhZFBvcnQgKHJlcXVlc3QpIHtcbiAgLy8gMS4gTGV0IHVybCBiZSByZXF1ZXN04oCZcyBjdXJyZW50IFVSTC5cbiAgY29uc3QgdXJsID0gcmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdClcblxuICAvLyAyLiBJZiB1cmzigJlzIHNjaGVtZSBpcyBhbiBIVFRQKFMpIHNjaGVtZSBhbmQgdXJs4oCZcyBwb3J0IGlzIGEgYmFkIHBvcnQsXG4gIC8vIHRoZW4gcmV0dXJuIGJsb2NrZWQuXG4gIGlmICh1cmxJc0h0dHBIdHRwc1NjaGVtZSh1cmwpICYmIGJhZFBvcnRzU2V0Lmhhcyh1cmwucG9ydCkpIHtcbiAgICByZXR1cm4gJ2Jsb2NrZWQnXG4gIH1cblxuICAvLyAzLiBSZXR1cm4gYWxsb3dlZC5cbiAgcmV0dXJuICdhbGxvd2VkJ1xufVxuXG5mdW5jdGlvbiBpc0Vycm9yTGlrZSAob2JqZWN0KSB7XG4gIHJldHVybiBvYmplY3QgaW5zdGFuY2VvZiBFcnJvciB8fCAoXG4gICAgb2JqZWN0Py5jb25zdHJ1Y3Rvcj8ubmFtZSA9PT0gJ0Vycm9yJyB8fFxuICAgIG9iamVjdD8uY29uc3RydWN0b3I/Lm5hbWUgPT09ICdET01FeGNlcHRpb24nXG4gIClcbn1cblxuLy8gQ2hlY2sgd2hldGhlciB8c3RhdHVzVGV4dHwgaXMgYSBCeXRlU3RyaW5nIGFuZFxuLy8gbWF0Y2hlcyB0aGUgUmVhc29uLVBocmFzZSB0b2tlbiBwcm9kdWN0aW9uLlxuLy8gUkZDIDI2MTY6IGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyNjE2XG4vLyBSRkMgNzIzMDogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzBcbi8vIFwicmVhc29uLXBocmFzZSA9ICooIEhUQUIgLyBTUCAvIFZDSEFSIC8gb2JzLXRleHQgKVwiXG4vLyBodHRwczovL2dpdGh1Yi5jb20vY2hyb21pdW0vY2hyb21pdW0vYmxvYi85NC4wLjQ2MDQuMS90aGlyZF9wYXJ0eS9ibGluay9yZW5kZXJlci9jb3JlL2ZldGNoL3Jlc3BvbnNlLmNjI0wxMTZcbmZ1bmN0aW9uIGlzVmFsaWRSZWFzb25QaHJhc2UgKHN0YXR1c1RleHQpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdGF0dXNUZXh0Lmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgYyA9IHN0YXR1c1RleHQuY2hhckNvZGVBdChpKVxuICAgIGlmIChcbiAgICAgICEoXG4gICAgICAgIChcbiAgICAgICAgICBjID09PSAweDA5IHx8IC8vIEhUQUJcbiAgICAgICAgICAoYyA+PSAweDIwICYmIGMgPD0gMHg3ZSkgfHwgLy8gU1AgLyBWQ0hBUlxuICAgICAgICAgIChjID49IDB4ODAgJiYgYyA8PSAweGZmKVxuICAgICAgICApIC8vIG9icy10ZXh0XG4gICAgICApXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4yLjZcbiAqIEBwYXJhbSB7bnVtYmVyfSBjXG4gKi9cbmZ1bmN0aW9uIGlzVG9rZW5DaGFyQ29kZSAoYykge1xuICBzd2l0Y2ggKGMpIHtcbiAgICBjYXNlIDB4MjI6XG4gICAgY2FzZSAweDI4OlxuICAgIGNhc2UgMHgyOTpcbiAgICBjYXNlIDB4MmM6XG4gICAgY2FzZSAweDJmOlxuICAgIGNhc2UgMHgzYTpcbiAgICBjYXNlIDB4M2I6XG4gICAgY2FzZSAweDNjOlxuICAgIGNhc2UgMHgzZDpcbiAgICBjYXNlIDB4M2U6XG4gICAgY2FzZSAweDNmOlxuICAgIGNhc2UgMHg0MDpcbiAgICBjYXNlIDB4NWI6XG4gICAgY2FzZSAweDVjOlxuICAgIGNhc2UgMHg1ZDpcbiAgICBjYXNlIDB4N2I6XG4gICAgY2FzZSAweDdkOlxuICAgICAgLy8gRFFVT1RFIGFuZCBcIigpLC86Ozw9Pj9AW1xcXXt9XCJcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBWQ0hBUiAleDIxLTdFXG4gICAgICByZXR1cm4gYyA+PSAweDIxICYmIGMgPD0gMHg3ZVxuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGNoYXJhY3RlcnNcbiAqL1xuZnVuY3Rpb24gaXNWYWxpZEhUVFBUb2tlbiAoY2hhcmFjdGVycykge1xuICBpZiAoY2hhcmFjdGVycy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGNoYXJhY3RlcnMubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoIWlzVG9rZW5DaGFyQ29kZShjaGFyYWN0ZXJzLmNoYXJDb2RlQXQoaSkpKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNoZWFkZXItbmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IHBvdGVudGlhbFZhbHVlXG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRIZWFkZXJOYW1lIChwb3RlbnRpYWxWYWx1ZSkge1xuICByZXR1cm4gaXNWYWxpZEhUVFBUb2tlbihwb3RlbnRpYWxWYWx1ZSlcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNoZWFkZXItdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBwb3RlbnRpYWxWYWx1ZVxuICovXG5mdW5jdGlvbiBpc1ZhbGlkSGVhZGVyVmFsdWUgKHBvdGVudGlhbFZhbHVlKSB7XG4gIC8vIC0gSGFzIG5vIGxlYWRpbmcgb3IgdHJhaWxpbmcgSFRUUCB0YWIgb3Igc3BhY2UgYnl0ZXMuXG4gIC8vIC0gQ29udGFpbnMgbm8gMHgwMCAoTlVMKSBvciBIVFRQIG5ld2xpbmUgYnl0ZXMuXG4gIGlmIChcbiAgICBwb3RlbnRpYWxWYWx1ZS5zdGFydHNXaXRoKCdcXHQnKSB8fFxuICAgIHBvdGVudGlhbFZhbHVlLnN0YXJ0c1dpdGgoJyAnKSB8fFxuICAgIHBvdGVudGlhbFZhbHVlLmVuZHNXaXRoKCdcXHQnKSB8fFxuICAgIHBvdGVudGlhbFZhbHVlLmVuZHNXaXRoKCcgJylcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBpZiAoXG4gICAgcG90ZW50aWFsVmFsdWUuaW5jbHVkZXMoJ1xcMCcpIHx8XG4gICAgcG90ZW50aWFsVmFsdWUuaW5jbHVkZXMoJ1xccicpIHx8XG4gICAgcG90ZW50aWFsVmFsdWUuaW5jbHVkZXMoJ1xcbicpXG4gICkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1yZWZlcnJlci1wb2xpY3kvI3NldC1yZXF1ZXN0cy1yZWZlcnJlci1wb2xpY3ktb24tcmVkaXJlY3RcbmZ1bmN0aW9uIHNldFJlcXVlc3RSZWZlcnJlclBvbGljeU9uUmVkaXJlY3QgKHJlcXVlc3QsIGFjdHVhbFJlc3BvbnNlKSB7XG4gIC8vICBHaXZlbiBhIHJlcXVlc3QgcmVxdWVzdCBhbmQgYSByZXNwb25zZSBhY3R1YWxSZXNwb25zZSwgdGhpcyBhbGdvcml0aG1cbiAgLy8gIHVwZGF0ZXMgcmVxdWVzdOKAmXMgcmVmZXJyZXIgcG9saWN5IGFjY29yZGluZyB0byB0aGUgUmVmZXJyZXItUG9saWN5XG4gIC8vICBoZWFkZXIgKGlmIGFueSkgaW4gYWN0dWFsUmVzcG9uc2UuXG5cbiAgLy8gMS4gTGV0IHBvbGljeSBiZSB0aGUgcmVzdWx0IG9mIGV4ZWN1dGluZyDCpyA4LjEgUGFyc2UgYSByZWZlcnJlciBwb2xpY3lcbiAgLy8gZnJvbSBhIFJlZmVycmVyLVBvbGljeSBoZWFkZXIgb24gYWN0dWFsUmVzcG9uc2UuXG5cbiAgLy8gOC4xIFBhcnNlIGEgcmVmZXJyZXIgcG9saWN5IGZyb20gYSBSZWZlcnJlci1Qb2xpY3kgaGVhZGVyXG4gIC8vIDEuIExldCBwb2xpY3ktdG9rZW5zIGJlIHRoZSByZXN1bHQgb2YgZXh0cmFjdGluZyBoZWFkZXIgbGlzdCB2YWx1ZXMgZ2l2ZW4gYFJlZmVycmVyLVBvbGljeWAgYW5kIHJlc3BvbnNl4oCZcyBoZWFkZXIgbGlzdC5cbiAgY29uc3QgeyBoZWFkZXJzTGlzdCB9ID0gYWN0dWFsUmVzcG9uc2VcbiAgLy8gMi4gTGV0IHBvbGljeSBiZSB0aGUgZW1wdHkgc3RyaW5nLlxuICAvLyAzLiBGb3IgZWFjaCB0b2tlbiBpbiBwb2xpY3ktdG9rZW5zLCBpZiB0b2tlbiBpcyBhIHJlZmVycmVyIHBvbGljeSBhbmQgdG9rZW4gaXMgbm90IHRoZSBlbXB0eSBzdHJpbmcsIHRoZW4gc2V0IHBvbGljeSB0byB0b2tlbi5cbiAgLy8gNC4gUmV0dXJuIHBvbGljeS5cbiAgY29uc3QgcG9saWN5SGVhZGVyID0gKGhlYWRlcnNMaXN0LmdldCgncmVmZXJyZXItcG9saWN5JykgPz8gJycpLnNwbGl0KCcsJylcblxuICAvLyBOb3RlOiBBcyB0aGUgcmVmZXJyZXItcG9saWN5IGNhbiBjb250YWluIG11bHRpcGxlIHBvbGljaWVzXG4gIC8vIHNlcGFyYXRlZCBieSBjb21tYSwgd2UgbmVlZCB0byBsb29wIHRocm91Z2ggYWxsIG9mIHRoZW1cbiAgLy8gYW5kIHBpY2sgdGhlIGZpcnN0IHZhbGlkIG9uZS5cbiAgLy8gUmVmOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvUmVmZXJyZXItUG9saWN5I3NwZWNpZnlfYV9mYWxsYmFja19wb2xpY3lcbiAgbGV0IHBvbGljeSA9ICcnXG4gIGlmIChwb2xpY3lIZWFkZXIubGVuZ3RoID4gMCkge1xuICAgIC8vIFRoZSByaWdodC1tb3N0IHBvbGljeSB0YWtlcyBwcmVjZWRlbmNlLlxuICAgIC8vIFRoZSBsZWZ0LW1vc3QgcG9saWN5IGlzIHRoZSBmYWxsYmFjay5cbiAgICBmb3IgKGxldCBpID0gcG9saWN5SGVhZGVyLmxlbmd0aDsgaSAhPT0gMDsgaS0tKSB7XG4gICAgICBjb25zdCB0b2tlbiA9IHBvbGljeUhlYWRlcltpIC0gMV0udHJpbSgpXG4gICAgICBpZiAocmVmZXJyZXJQb2xpY3lUb2tlbnMuaGFzKHRva2VuKSkge1xuICAgICAgICBwb2xpY3kgPSB0b2tlblxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIDIuIElmIHBvbGljeSBpcyBub3QgdGhlIGVtcHR5IHN0cmluZywgdGhlbiBzZXQgcmVxdWVzdOKAmXMgcmVmZXJyZXIgcG9saWN5IHRvIHBvbGljeS5cbiAgaWYgKHBvbGljeSAhPT0gJycpIHtcbiAgICByZXF1ZXN0LnJlZmVycmVyUG9saWN5ID0gcG9saWN5XG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2Nyb3NzLW9yaWdpbi1yZXNvdXJjZS1wb2xpY3ktY2hlY2tcbmZ1bmN0aW9uIGNyb3NzT3JpZ2luUmVzb3VyY2VQb2xpY3lDaGVjayAoKSB7XG4gIC8vIFRPRE9cbiAgcmV0dXJuICdhbGxvd2VkJ1xufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1jb3JzLWNoZWNrXG5mdW5jdGlvbiBjb3JzQ2hlY2sgKCkge1xuICAvLyBUT0RPXG4gIHJldHVybiAnc3VjY2Vzcydcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtdGFvLWNoZWNrXG5mdW5jdGlvbiBUQU9DaGVjayAoKSB7XG4gIC8vIFRPRE9cbiAgcmV0dXJuICdzdWNjZXNzJ1xufVxuXG5mdW5jdGlvbiBhcHBlbmRGZXRjaE1ldGFkYXRhIChodHRwUmVxdWVzdCkge1xuICAvLyAgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1mZXRjaC1tZXRhZGF0YS8jc2VjLWZldGNoLWRlc3QtaGVhZGVyXG4gIC8vICBUT0RPXG5cbiAgLy8gIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtZmV0Y2gtbWV0YWRhdGEvI3NlYy1mZXRjaC1tb2RlLWhlYWRlclxuXG4gIC8vICAxLiBBc3NlcnQ6IHLigJlzIHVybCBpcyBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTC5cbiAgLy8gIFRPRE9cblxuICAvLyAgMi4gTGV0IGhlYWRlciBiZSBhIFN0cnVjdHVyZWQgSGVhZGVyIHdob3NlIHZhbHVlIGlzIGEgdG9rZW4uXG4gIGxldCBoZWFkZXIgPSBudWxsXG5cbiAgLy8gIDMuIFNldCBoZWFkZXLigJlzIHZhbHVlIHRvIHLigJlzIG1vZGUuXG4gIGhlYWRlciA9IGh0dHBSZXF1ZXN0Lm1vZGVcblxuICAvLyAgNC4gU2V0IGEgc3RydWN0dXJlZCBmaWVsZCB2YWx1ZSBgU2VjLUZldGNoLU1vZGVgL2hlYWRlciBpbiBy4oCZcyBoZWFkZXIgbGlzdC5cbiAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3Quc2V0KCdzZWMtZmV0Y2gtbW9kZScsIGhlYWRlcilcblxuICAvLyAgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1mZXRjaC1tZXRhZGF0YS8jc2VjLWZldGNoLXNpdGUtaGVhZGVyXG4gIC8vICBUT0RPXG5cbiAgLy8gIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtZmV0Y2gtbWV0YWRhdGEvI3NlYy1mZXRjaC11c2VyLWhlYWRlclxuICAvLyAgVE9ET1xufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYXBwZW5kLWEtcmVxdWVzdC1vcmlnaW4taGVhZGVyXG5mdW5jdGlvbiBhcHBlbmRSZXF1ZXN0T3JpZ2luSGVhZGVyIChyZXF1ZXN0KSB7XG4gIC8vIDEuIExldCBzZXJpYWxpemVkT3JpZ2luIGJlIHRoZSByZXN1bHQgb2YgYnl0ZS1zZXJpYWxpemluZyBhIHJlcXVlc3Qgb3JpZ2luIHdpdGggcmVxdWVzdC5cbiAgbGV0IHNlcmlhbGl6ZWRPcmlnaW4gPSByZXF1ZXN0Lm9yaWdpblxuXG4gIC8vIDIuIElmIHJlcXVlc3TigJlzIHJlc3BvbnNlIHRhaW50aW5nIGlzIFwiY29yc1wiIG9yIHJlcXVlc3TigJlzIG1vZGUgaXMgXCJ3ZWJzb2NrZXRcIiwgdGhlbiBhcHBlbmQgKGBPcmlnaW5gLCBzZXJpYWxpemVkT3JpZ2luKSB0byByZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cbiAgaWYgKHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ2NvcnMnIHx8IHJlcXVlc3QubW9kZSA9PT0gJ3dlYnNvY2tldCcpIHtcbiAgICBpZiAoc2VyaWFsaXplZE9yaWdpbikge1xuICAgICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ29yaWdpbicsIHNlcmlhbGl6ZWRPcmlnaW4pXG4gICAgfVxuXG4gIC8vIDMuIE90aGVyd2lzZSwgaWYgcmVxdWVzdOKAmXMgbWV0aG9kIGlzIG5laXRoZXIgYEdFVGAgbm9yIGBIRUFEYCwgdGhlbjpcbiAgfSBlbHNlIGlmIChyZXF1ZXN0Lm1ldGhvZCAhPT0gJ0dFVCcgJiYgcmVxdWVzdC5tZXRob2QgIT09ICdIRUFEJykge1xuICAgIC8vIDEuIFN3aXRjaCBvbiByZXF1ZXN04oCZcyByZWZlcnJlciBwb2xpY3k6XG4gICAgc3dpdGNoIChyZXF1ZXN0LnJlZmVycmVyUG9saWN5KSB7XG4gICAgICBjYXNlICduby1yZWZlcnJlcic6XG4gICAgICAgIC8vIFNldCBzZXJpYWxpemVkT3JpZ2luIHRvIGBudWxsYC5cbiAgICAgICAgc2VyaWFsaXplZE9yaWdpbiA9IG51bGxcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ25vLXJlZmVycmVyLXdoZW4tZG93bmdyYWRlJzpcbiAgICAgIGNhc2UgJ3N0cmljdC1vcmlnaW4nOlxuICAgICAgY2FzZSAnc3RyaWN0LW9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbic6XG4gICAgICAgIC8vIElmIHJlcXVlc3TigJlzIG9yaWdpbiBpcyBhIHR1cGxlIG9yaWdpbiwgaXRzIHNjaGVtZSBpcyBcImh0dHBzXCIsIGFuZCByZXF1ZXN04oCZcyBjdXJyZW50IFVSTOKAmXMgc2NoZW1lIGlzIG5vdCBcImh0dHBzXCIsIHRoZW4gc2V0IHNlcmlhbGl6ZWRPcmlnaW4gdG8gYG51bGxgLlxuICAgICAgICBpZiAocmVxdWVzdC5vcmlnaW4gJiYgdXJsSGFzSHR0cHNTY2hlbWUocmVxdWVzdC5vcmlnaW4pICYmICF1cmxIYXNIdHRwc1NjaGVtZShyZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KSkpIHtcbiAgICAgICAgICBzZXJpYWxpemVkT3JpZ2luID0gbnVsbFxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdzYW1lLW9yaWdpbic6XG4gICAgICAgIC8vIElmIHJlcXVlc3TigJlzIG9yaWdpbiBpcyBub3Qgc2FtZSBvcmlnaW4gd2l0aCByZXF1ZXN04oCZcyBjdXJyZW50IFVSTOKAmXMgb3JpZ2luLCB0aGVuIHNldCBzZXJpYWxpemVkT3JpZ2luIHRvIGBudWxsYC5cbiAgICAgICAgaWYgKCFzYW1lT3JpZ2luKHJlcXVlc3QsIHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpKSkge1xuICAgICAgICAgIHNlcmlhbGl6ZWRPcmlnaW4gPSBudWxsXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIERvIG5vdGhpbmcuXG4gICAgfVxuXG4gICAgaWYgKHNlcmlhbGl6ZWRPcmlnaW4pIHtcbiAgICAgIC8vIDIuIEFwcGVuZCAoYE9yaWdpbmAsIHNlcmlhbGl6ZWRPcmlnaW4pIHRvIHJlcXVlc3TigJlzIGhlYWRlciBsaXN0LlxuICAgICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ29yaWdpbicsIHNlcmlhbGl6ZWRPcmlnaW4pXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvYXJzZW5lZFNoYXJlZEN1cnJlbnRUaW1lIChjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSkge1xuICAvLyBUT0RPXG4gIHJldHVybiBwZXJmb3JtYW5jZS5ub3coKVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY3JlYXRlLWFuLW9wYXF1ZS10aW1pbmctaW5mb1xuZnVuY3Rpb24gY3JlYXRlT3BhcXVlVGltaW5nSW5mbyAodGltaW5nSW5mbykge1xuICByZXR1cm4ge1xuICAgIHN0YXJ0VGltZTogdGltaW5nSW5mby5zdGFydFRpbWUgPz8gMCxcbiAgICByZWRpcmVjdFN0YXJ0VGltZTogMCxcbiAgICByZWRpcmVjdEVuZFRpbWU6IDAsXG4gICAgcG9zdFJlZGlyZWN0U3RhcnRUaW1lOiB0aW1pbmdJbmZvLnN0YXJ0VGltZSA/PyAwLFxuICAgIGZpbmFsU2VydmljZVdvcmtlclN0YXJ0VGltZTogMCxcbiAgICBmaW5hbE5ldHdvcmtSZXNwb25zZVN0YXJ0VGltZTogMCxcbiAgICBmaW5hbE5ldHdvcmtSZXF1ZXN0U3RhcnRUaW1lOiAwLFxuICAgIGVuZFRpbWU6IDAsXG4gICAgZW5jb2RlZEJvZHlTaXplOiAwLFxuICAgIGRlY29kZWRCb2R5U2l6ZTogMCxcbiAgICBmaW5hbENvbm5lY3Rpb25UaW1pbmdJbmZvOiBudWxsXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvb3JpZ2luLmh0bWwjcG9saWN5LWNvbnRhaW5lclxuZnVuY3Rpb24gbWFrZVBvbGljeUNvbnRhaW5lciAoKSB7XG4gIC8vIE5vdGU6IHRoZSBmZXRjaCBzcGVjIGRvZXNuJ3QgbWFrZSB1c2Ugb2YgZW1iZWRkZXIgcG9saWN5IG9yIENTUCBsaXN0XG4gIHJldHVybiB7XG4gICAgcmVmZXJyZXJQb2xpY3k6ICdzdHJpY3Qtb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luJ1xuICB9XG59XG5cbi8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL29yaWdpbi5odG1sI2Nsb25lLWEtcG9saWN5LWNvbnRhaW5lclxuZnVuY3Rpb24gY2xvbmVQb2xpY3lDb250YWluZXIgKHBvbGljeUNvbnRhaW5lcikge1xuICByZXR1cm4ge1xuICAgIHJlZmVycmVyUG9saWN5OiBwb2xpY3lDb250YWluZXIucmVmZXJyZXJQb2xpY3lcbiAgfVxufVxuXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLXJlZmVycmVyLXBvbGljeS8jZGV0ZXJtaW5lLXJlcXVlc3RzLXJlZmVycmVyXG5mdW5jdGlvbiBkZXRlcm1pbmVSZXF1ZXN0c1JlZmVycmVyIChyZXF1ZXN0KSB7XG4gIC8vIDEuIExldCBwb2xpY3kgYmUgcmVxdWVzdCdzIHJlZmVycmVyIHBvbGljeS5cbiAgY29uc3QgcG9saWN5ID0gcmVxdWVzdC5yZWZlcnJlclBvbGljeVxuXG4gIC8vIE5vdGU6IHBvbGljeSBjYW5ub3QgKHNob3VsZG4ndCkgYmUgbnVsbCBvciBhbiBlbXB0eSBzdHJpbmcuXG4gIGFzc2VydChwb2xpY3kpXG5cbiAgLy8gMi4gTGV0IGVudmlyb25tZW50IGJlIHJlcXVlc3TigJlzIGNsaWVudC5cblxuICBsZXQgcmVmZXJyZXJTb3VyY2UgPSBudWxsXG5cbiAgLy8gMy4gU3dpdGNoIG9uIHJlcXVlc3TigJlzIHJlZmVycmVyOlxuICBpZiAocmVxdWVzdC5yZWZlcnJlciA9PT0gJ2NsaWVudCcpIHtcbiAgICAvLyBOb3RlOiBub2RlIGlzbid0IGEgYnJvd3NlciBhbmQgZG9lc24ndCBpbXBsZW1lbnQgZG9jdW1lbnQvaWZyYW1lcyxcbiAgICAvLyBzbyB3ZSBieXBhc3MgdGhpcyBzdGVwIGFuZCByZXBsYWNlIGl0IHdpdGggb3VyIG93bi5cblxuICAgIGNvbnN0IGdsb2JhbE9yaWdpbiA9IGdldEdsb2JhbE9yaWdpbigpXG5cbiAgICBpZiAoIWdsb2JhbE9yaWdpbiB8fCBnbG9iYWxPcmlnaW4ub3JpZ2luID09PSAnbnVsbCcpIHtcbiAgICAgIHJldHVybiAnbm8tcmVmZXJyZXInXG4gICAgfVxuXG4gICAgLy8gbm90ZTogd2UgbmVlZCB0byBjbG9uZSBpdCBhcyBpdCdzIG11dGF0ZWRcbiAgICByZWZlcnJlclNvdXJjZSA9IG5ldyBVUkwoZ2xvYmFsT3JpZ2luKVxuICB9IGVsc2UgaWYgKHJlcXVlc3QucmVmZXJyZXIgaW5zdGFuY2VvZiBVUkwpIHtcbiAgICAvLyBMZXQgcmVmZXJyZXJTb3VyY2UgYmUgcmVxdWVzdOKAmXMgcmVmZXJyZXIuXG4gICAgcmVmZXJyZXJTb3VyY2UgPSByZXF1ZXN0LnJlZmVycmVyXG4gIH1cblxuICAvLyA0LiBMZXQgcmVxdWVzdOKAmXMgcmVmZXJyZXJVUkwgYmUgdGhlIHJlc3VsdCBvZiBzdHJpcHBpbmcgcmVmZXJyZXJTb3VyY2UgZm9yXG4gIC8vICAgIHVzZSBhcyBhIHJlZmVycmVyLlxuICBsZXQgcmVmZXJyZXJVUkwgPSBzdHJpcFVSTEZvclJlZmVycmVyKHJlZmVycmVyU291cmNlKVxuXG4gIC8vIDUuIExldCByZWZlcnJlck9yaWdpbiBiZSB0aGUgcmVzdWx0IG9mIHN0cmlwcGluZyByZWZlcnJlclNvdXJjZSBmb3IgdXNlIGFzXG4gIC8vICAgIGEgcmVmZXJyZXIsIHdpdGggdGhlIG9yaWdpbi1vbmx5IGZsYWcgc2V0IHRvIHRydWUuXG4gIGNvbnN0IHJlZmVycmVyT3JpZ2luID0gc3RyaXBVUkxGb3JSZWZlcnJlcihyZWZlcnJlclNvdXJjZSwgdHJ1ZSlcblxuICAvLyA2LiBJZiB0aGUgcmVzdWx0IG9mIHNlcmlhbGl6aW5nIHJlZmVycmVyVVJMIGlzIGEgc3RyaW5nIHdob3NlIGxlbmd0aCBpc1xuICAvLyAgICBncmVhdGVyIHRoYW4gNDA5Niwgc2V0IHJlZmVycmVyVVJMIHRvIHJlZmVycmVyT3JpZ2luLlxuICBpZiAocmVmZXJyZXJVUkwudG9TdHJpbmcoKS5sZW5ndGggPiA0MDk2KSB7XG4gICAgcmVmZXJyZXJVUkwgPSByZWZlcnJlck9yaWdpblxuICB9XG5cbiAgY29uc3QgYXJlU2FtZU9yaWdpbiA9IHNhbWVPcmlnaW4ocmVxdWVzdCwgcmVmZXJyZXJVUkwpXG4gIGNvbnN0IGlzTm9uUG90ZW50aWFsbHlUcnVzdFdvcnRoeSA9IGlzVVJMUG90ZW50aWFsbHlUcnVzdHdvcnRoeShyZWZlcnJlclVSTCkgJiZcbiAgICAhaXNVUkxQb3RlbnRpYWxseVRydXN0d29ydGh5KHJlcXVlc3QudXJsKVxuXG4gIC8vIDguIEV4ZWN1dGUgdGhlIHN3aXRjaCBzdGF0ZW1lbnRzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHZhbHVlIG9mIHBvbGljeTpcbiAgc3dpdGNoIChwb2xpY3kpIHtcbiAgICBjYXNlICdvcmlnaW4nOiByZXR1cm4gcmVmZXJyZXJPcmlnaW4gIT0gbnVsbCA/IHJlZmVycmVyT3JpZ2luIDogc3RyaXBVUkxGb3JSZWZlcnJlcihyZWZlcnJlclNvdXJjZSwgdHJ1ZSlcbiAgICBjYXNlICd1bnNhZmUtdXJsJzogcmV0dXJuIHJlZmVycmVyVVJMXG4gICAgY2FzZSAnc2FtZS1vcmlnaW4nOlxuICAgICAgcmV0dXJuIGFyZVNhbWVPcmlnaW4gPyByZWZlcnJlck9yaWdpbiA6ICduby1yZWZlcnJlcidcbiAgICBjYXNlICdvcmlnaW4td2hlbi1jcm9zcy1vcmlnaW4nOlxuICAgICAgcmV0dXJuIGFyZVNhbWVPcmlnaW4gPyByZWZlcnJlclVSTCA6IHJlZmVycmVyT3JpZ2luXG4gICAgY2FzZSAnc3RyaWN0LW9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbic6IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRVUkwgPSByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KVxuXG4gICAgICAvLyAxLiBJZiB0aGUgb3JpZ2luIG9mIHJlZmVycmVyVVJMIGFuZCB0aGUgb3JpZ2luIG9mIHJlcXVlc3TigJlzIGN1cnJlbnRcbiAgICAgIC8vICAgIFVSTCBhcmUgdGhlIHNhbWUsIHRoZW4gcmV0dXJuIHJlZmVycmVyVVJMLlxuICAgICAgaWYgKHNhbWVPcmlnaW4ocmVmZXJyZXJVUkwsIGN1cnJlbnRVUkwpKSB7XG4gICAgICAgIHJldHVybiByZWZlcnJlclVSTFxuICAgICAgfVxuXG4gICAgICAvLyAyLiBJZiByZWZlcnJlclVSTCBpcyBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTCBhbmQgcmVxdWVzdOKAmXNcbiAgICAgIC8vICAgIGN1cnJlbnQgVVJMIGlzIG5vdCBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTCwgdGhlbiByZXR1cm4gbm9cbiAgICAgIC8vICAgIHJlZmVycmVyLlxuICAgICAgaWYgKGlzVVJMUG90ZW50aWFsbHlUcnVzdHdvcnRoeShyZWZlcnJlclVSTCkgJiYgIWlzVVJMUG90ZW50aWFsbHlUcnVzdHdvcnRoeShjdXJyZW50VVJMKSkge1xuICAgICAgICByZXR1cm4gJ25vLXJlZmVycmVyJ1xuICAgICAgfVxuXG4gICAgICAvLyAzLiBSZXR1cm4gcmVmZXJyZXJPcmlnaW4uXG4gICAgICByZXR1cm4gcmVmZXJyZXJPcmlnaW5cbiAgICB9XG4gICAgY2FzZSAnc3RyaWN0LW9yaWdpbic6IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICAgIC8qKlxuICAgICAgICAgKiAxLiBJZiByZWZlcnJlclVSTCBpcyBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTCBhbmRcbiAgICAgICAgICogcmVxdWVzdOKAmXMgY3VycmVudCBVUkwgaXMgbm90IGEgcG90ZW50aWFsbHkgdHJ1c3R3b3J0aHkgVVJMLFxuICAgICAgICAgKiB0aGVuIHJldHVybiBubyByZWZlcnJlci5cbiAgICAgICAgICogMi4gUmV0dXJuIHJlZmVycmVyT3JpZ2luXG4gICAgICAgICovXG4gICAgY2FzZSAnbm8tcmVmZXJyZXItd2hlbi1kb3duZ3JhZGUnOiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICAvKipcbiAgICAgICAqIDEuIElmIHJlZmVycmVyVVJMIGlzIGEgcG90ZW50aWFsbHkgdHJ1c3R3b3J0aHkgVVJMIGFuZFxuICAgICAgICogcmVxdWVzdOKAmXMgY3VycmVudCBVUkwgaXMgbm90IGEgcG90ZW50aWFsbHkgdHJ1c3R3b3J0aHkgVVJMLFxuICAgICAgICogdGhlbiByZXR1cm4gbm8gcmVmZXJyZXIuXG4gICAgICAgKiAyLiBSZXR1cm4gcmVmZXJyZXJPcmlnaW5cbiAgICAgICovXG5cbiAgICBkZWZhdWx0OiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICByZXR1cm4gaXNOb25Qb3RlbnRpYWxseVRydXN0V29ydGh5ID8gJ25vLXJlZmVycmVyJyA6IHJlZmVycmVyT3JpZ2luXG4gIH1cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtcmVmZXJyZXItcG9saWN5LyNzdHJpcC11cmxcbiAqIEBwYXJhbSB7VVJMfSB1cmxcbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IG9yaWdpbk9ubHlcbiAqL1xuZnVuY3Rpb24gc3RyaXBVUkxGb3JSZWZlcnJlciAodXJsLCBvcmlnaW5Pbmx5KSB7XG4gIC8vIDEuIEFzc2VydDogdXJsIGlzIGEgVVJMLlxuICBhc3NlcnQodXJsIGluc3RhbmNlb2YgVVJMKVxuXG4gIC8vIDIuIElmIHVybOKAmXMgc2NoZW1lIGlzIGEgbG9jYWwgc2NoZW1lLCB0aGVuIHJldHVybiBubyByZWZlcnJlci5cbiAgaWYgKHVybC5wcm90b2NvbCA9PT0gJ2ZpbGU6JyB8fCB1cmwucHJvdG9jb2wgPT09ICdhYm91dDonIHx8IHVybC5wcm90b2NvbCA9PT0gJ2JsYW5rOicpIHtcbiAgICByZXR1cm4gJ25vLXJlZmVycmVyJ1xuICB9XG5cbiAgLy8gMy4gU2V0IHVybOKAmXMgdXNlcm5hbWUgdG8gdGhlIGVtcHR5IHN0cmluZy5cbiAgdXJsLnVzZXJuYW1lID0gJydcblxuICAvLyA0LiBTZXQgdXJs4oCZcyBwYXNzd29yZCB0byB0aGUgZW1wdHkgc3RyaW5nLlxuICB1cmwucGFzc3dvcmQgPSAnJ1xuXG4gIC8vIDUuIFNldCB1cmzigJlzIGZyYWdtZW50IHRvIG51bGwuXG4gIHVybC5oYXNoID0gJydcblxuICAvLyA2LiBJZiB0aGUgb3JpZ2luLW9ubHkgZmxhZyBpcyB0cnVlLCB0aGVuOlxuICBpZiAob3JpZ2luT25seSkge1xuICAgIC8vIDEuIFNldCB1cmzigJlzIHBhdGggdG8gwqsgdGhlIGVtcHR5IHN0cmluZyDCuy5cbiAgICB1cmwucGF0aG5hbWUgPSAnJ1xuXG4gICAgLy8gMi4gU2V0IHVybOKAmXMgcXVlcnkgdG8gbnVsbC5cbiAgICB1cmwuc2VhcmNoID0gJydcbiAgfVxuXG4gIC8vIDcuIFJldHVybiB1cmwuXG4gIHJldHVybiB1cmxcbn1cblxuZnVuY3Rpb24gaXNVUkxQb3RlbnRpYWxseVRydXN0d29ydGh5ICh1cmwpIHtcbiAgaWYgKCEodXJsIGluc3RhbmNlb2YgVVJMKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gSWYgY2hpbGQgb2YgYWJvdXQsIHJldHVybiB0cnVlXG4gIGlmICh1cmwuaHJlZiA9PT0gJ2Fib3V0OmJsYW5rJyB8fCB1cmwuaHJlZiA9PT0gJ2Fib3V0OnNyY2RvYycpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gSWYgc2NoZW1lIGlzIGRhdGEsIHJldHVybiB0cnVlXG4gIGlmICh1cmwucHJvdG9jb2wgPT09ICdkYXRhOicpIHJldHVybiB0cnVlXG5cbiAgLy8gSWYgZmlsZSwgcmV0dXJuIHRydWVcbiAgaWYgKHVybC5wcm90b2NvbCA9PT0gJ2ZpbGU6JykgcmV0dXJuIHRydWVcblxuICByZXR1cm4gaXNPcmlnaW5Qb3RlbnRpYWxseVRydXN0d29ydGh5KHVybC5vcmlnaW4pXG5cbiAgZnVuY3Rpb24gaXNPcmlnaW5Qb3RlbnRpYWxseVRydXN0d29ydGh5IChvcmlnaW4pIHtcbiAgICAvLyBJZiBvcmlnaW4gaXMgZXhwbGljaXRseSBudWxsLCByZXR1cm4gZmFsc2VcbiAgICBpZiAob3JpZ2luID09IG51bGwgfHwgb3JpZ2luID09PSAnbnVsbCcpIHJldHVybiBmYWxzZVxuXG4gICAgY29uc3Qgb3JpZ2luQXNVUkwgPSBuZXcgVVJMKG9yaWdpbilcblxuICAgIC8vIElmIHNlY3VyZSwgcmV0dXJuIHRydWVcbiAgICBpZiAob3JpZ2luQXNVUkwucHJvdG9jb2wgPT09ICdodHRwczonIHx8IG9yaWdpbkFzVVJMLnByb3RvY29sID09PSAnd3NzOicpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgLy8gSWYgbG9jYWxob3N0IG9yIHZhcmlhbnRzLCByZXR1cm4gdHJ1ZVxuICAgIGlmICgvXjEyNyg/OlxcLlswLTldKyl7MCwyfVxcLlswLTldKyR8XlxcWyg/OjAqOikqPzo/MCoxXFxdJC8udGVzdChvcmlnaW5Bc1VSTC5ob3N0bmFtZSkgfHxcbiAgICAgKG9yaWdpbkFzVVJMLmhvc3RuYW1lID09PSAnbG9jYWxob3N0JyB8fCBvcmlnaW5Bc1VSTC5ob3N0bmFtZS5pbmNsdWRlcygnbG9jYWxob3N0LicpKSB8fFxuICAgICAob3JpZ2luQXNVUkwuaG9zdG5hbWUuZW5kc1dpdGgoJy5sb2NhbGhvc3QnKSkpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgLy8gSWYgYW55IG90aGVyLCByZXR1cm4gZmFsc2VcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1zdWJyZXNvdXJjZS1pbnRlZ3JpdHkvI2RvZXMtcmVzcG9uc2UtbWF0Y2gtbWV0YWRhdGFsaXN0XG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGJ5dGVzXG4gKiBAcGFyYW0ge3N0cmluZ30gbWV0YWRhdGFMaXN0XG4gKi9cbmZ1bmN0aW9uIGJ5dGVzTWF0Y2ggKGJ5dGVzLCBtZXRhZGF0YUxpc3QpIHtcbiAgLy8gSWYgbm9kZSBpcyBub3QgYnVpbHQgd2l0aCBPcGVuU1NMIHN1cHBvcnQsIHdlIGNhbm5vdCBjaGVja1xuICAvLyBhIHJlcXVlc3QncyBpbnRlZ3JpdHksIHNvIGFsbG93IGl0IGJ5IGRlZmF1bHQgKHRoZSBzcGVjIHdpbGxcbiAgLy8gYWxsb3cgcmVxdWVzdHMgaWYgYW4gaW52YWxpZCBoYXNoIGlzIGdpdmVuLCBhcyBwcmVjZWRlbmNlKS5cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmOiBvbmx5IGlmIG5vZGUgaXMgYnVpbHQgd2l0aCAtLXdpdGhvdXQtc3NsICovXG4gIGlmIChjcnlwdG8gPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyAxLiBMZXQgcGFyc2VkTWV0YWRhdGEgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIG1ldGFkYXRhTGlzdC5cbiAgY29uc3QgcGFyc2VkTWV0YWRhdGEgPSBwYXJzZU1ldGFkYXRhKG1ldGFkYXRhTGlzdClcblxuICAvLyAyLiBJZiBwYXJzZWRNZXRhZGF0YSBpcyBubyBtZXRhZGF0YSwgcmV0dXJuIHRydWUuXG4gIGlmIChwYXJzZWRNZXRhZGF0YSA9PT0gJ25vIG1ldGFkYXRhJykge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyAzLiBJZiByZXNwb25zZSBpcyBub3QgZWxpZ2libGUgZm9yIGludGVncml0eSB2YWxpZGF0aW9uLCByZXR1cm4gZmFsc2UuXG4gIC8vIFRPRE9cblxuICAvLyA0LiBJZiBwYXJzZWRNZXRhZGF0YSBpcyB0aGUgZW1wdHkgc2V0LCByZXR1cm4gdHJ1ZS5cbiAgaWYgKHBhcnNlZE1ldGFkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyA1LiBMZXQgbWV0YWRhdGEgYmUgdGhlIHJlc3VsdCBvZiBnZXR0aW5nIHRoZSBzdHJvbmdlc3RcbiAgLy8gICAgbWV0YWRhdGEgZnJvbSBwYXJzZWRNZXRhZGF0YS5cbiAgY29uc3Qgc3Ryb25nZXN0ID0gZ2V0U3Ryb25nZXN0TWV0YWRhdGEocGFyc2VkTWV0YWRhdGEpXG4gIGNvbnN0IG1ldGFkYXRhID0gZmlsdGVyTWV0YWRhdGFMaXN0QnlBbGdvcml0aG0ocGFyc2VkTWV0YWRhdGEsIHN0cm9uZ2VzdClcblxuICAvLyA2LiBGb3IgZWFjaCBpdGVtIGluIG1ldGFkYXRhOlxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgbWV0YWRhdGEpIHtcbiAgICAvLyAxLiBMZXQgYWxnb3JpdGhtIGJlIHRoZSBhbGcgY29tcG9uZW50IG9mIGl0ZW0uXG4gICAgY29uc3QgYWxnb3JpdGhtID0gaXRlbS5hbGdvXG5cbiAgICAvLyAyLiBMZXQgZXhwZWN0ZWRWYWx1ZSBiZSB0aGUgdmFsIGNvbXBvbmVudCBvZiBpdGVtLlxuICAgIGNvbnN0IGV4cGVjdGVkVmFsdWUgPSBpdGVtLmhhc2hcblxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vd2ViLXBsYXRmb3JtLXRlc3RzL3dwdC9jb21taXQvZTRjNWNjN2E1ZTQ4MDkzMjIwNTI4ZGZkZDFjNDAxMmRjMzgzN2EwZVxuICAgIC8vIFwiYmUgbGliZXJhbCB3aXRoIHBhZGRpbmdcIi4gVGhpcyBpcyBhbm5veWluZywgYW5kIGl0J3Mgbm90IGV2ZW4gaW4gdGhlIHNwZWMuXG5cbiAgICAvLyAzLiBMZXQgYWN0dWFsVmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBhcHBseWluZyBhbGdvcml0aG0gdG8gYnl0ZXMuXG4gICAgbGV0IGFjdHVhbFZhbHVlID0gY3J5cHRvLmNyZWF0ZUhhc2goYWxnb3JpdGhtKS51cGRhdGUoYnl0ZXMpLmRpZ2VzdCgnYmFzZTY0JylcblxuICAgIGlmIChhY3R1YWxWYWx1ZVthY3R1YWxWYWx1ZS5sZW5ndGggLSAxXSA9PT0gJz0nKSB7XG4gICAgICBpZiAoYWN0dWFsVmFsdWVbYWN0dWFsVmFsdWUubGVuZ3RoIC0gMl0gPT09ICc9Jykge1xuICAgICAgICBhY3R1YWxWYWx1ZSA9IGFjdHVhbFZhbHVlLnNsaWNlKDAsIC0yKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWN0dWFsVmFsdWUgPSBhY3R1YWxWYWx1ZS5zbGljZSgwLCAtMSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA0LiBJZiBhY3R1YWxWYWx1ZSBpcyBhIGNhc2Utc2Vuc2l0aXZlIG1hdGNoIGZvciBleHBlY3RlZFZhbHVlLFxuICAgIC8vICAgIHJldHVybiB0cnVlLlxuICAgIGlmIChjb21wYXJlQmFzZTY0TWl4ZWQoYWN0dWFsVmFsdWUsIGV4cGVjdGVkVmFsdWUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxuXG4gIC8vIDcuIFJldHVybiBmYWxzZS5cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtc3VicmVzb3VyY2UtaW50ZWdyaXR5LyNncmFtbWFyZGVmLWhhc2gtd2l0aC1vcHRpb25zXG4vLyBodHRwczovL3d3dy53My5vcmcvVFIvQ1NQMi8jc291cmNlLWxpc3Qtc3ludGF4XG4vLyBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNTIzNCNhcHBlbmRpeC1CLjFcbmNvbnN0IHBhcnNlSGFzaFdpdGhPcHRpb25zID0gLyg/PGFsZ28+c2hhMjU2fHNoYTM4NHxzaGE1MTIpLSgoPzxoYXNoPltBLVphLXowLTkrL10rfFtBLVphLXowLTlfLV0rKT17MCwyfSg/Olxcc3wkKSggK1shLX5dKik/KT8vaVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1zdWJyZXNvdXJjZS1pbnRlZ3JpdHkvI3BhcnNlLW1ldGFkYXRhXG4gKiBAcGFyYW0ge3N0cmluZ30gbWV0YWRhdGFcbiAqL1xuZnVuY3Rpb24gcGFyc2VNZXRhZGF0YSAobWV0YWRhdGEpIHtcbiAgLy8gMS4gTGV0IHJlc3VsdCBiZSB0aGUgZW1wdHkgc2V0LlxuICAvKiogQHR5cGUge3sgYWxnbzogc3RyaW5nLCBoYXNoOiBzdHJpbmcgfVtdfSAqL1xuICBjb25zdCByZXN1bHQgPSBbXVxuXG4gIC8vIDIuIExldCBlbXB0eSBiZSBlcXVhbCB0byB0cnVlLlxuICBsZXQgZW1wdHkgPSB0cnVlXG5cbiAgLy8gMy4gRm9yIGVhY2ggdG9rZW4gcmV0dXJuZWQgYnkgc3BsaXR0aW5nIG1ldGFkYXRhIG9uIHNwYWNlczpcbiAgZm9yIChjb25zdCB0b2tlbiBvZiBtZXRhZGF0YS5zcGxpdCgnICcpKSB7XG4gICAgLy8gMS4gU2V0IGVtcHR5IHRvIGZhbHNlLlxuICAgIGVtcHR5ID0gZmFsc2VcblxuICAgIC8vIDIuIFBhcnNlIHRva2VuIGFzIGEgaGFzaC13aXRoLW9wdGlvbnMuXG4gICAgY29uc3QgcGFyc2VkVG9rZW4gPSBwYXJzZUhhc2hXaXRoT3B0aW9ucy5leGVjKHRva2VuKVxuXG4gICAgLy8gMy4gSWYgdG9rZW4gZG9lcyBub3QgcGFyc2UsIGNvbnRpbnVlIHRvIHRoZSBuZXh0IHRva2VuLlxuICAgIGlmIChcbiAgICAgIHBhcnNlZFRva2VuID09PSBudWxsIHx8XG4gICAgICBwYXJzZWRUb2tlbi5ncm91cHMgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgcGFyc2VkVG9rZW4uZ3JvdXBzLmFsZ28gPT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgLy8gTm90ZTogQ2hyb21pdW0gYmxvY2tzIHRoZSByZXF1ZXN0IGF0IHRoaXMgcG9pbnQsIGJ1dCBGaXJlZm94XG4gICAgICAvLyBnaXZlcyBhIHdhcm5pbmcgdGhhdCBhbiBpbnZhbGlkIGludGVncml0eSB3YXMgZ2l2ZW4uIFRoZVxuICAgICAgLy8gY29ycmVjdCBiZWhhdmlvciBpcyB0byBpZ25vcmUgdGhlc2UsIGFuZCBzdWJzZXF1ZW50bHkgbm90XG4gICAgICAvLyBjaGVjayB0aGUgaW50ZWdyaXR5IG9mIHRoZSByZXNvdXJjZS5cbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgLy8gNC4gTGV0IGFsZ29yaXRobSBiZSB0aGUgaGFzaC1hbGdvIGNvbXBvbmVudCBvZiB0b2tlbi5cbiAgICBjb25zdCBhbGdvcml0aG0gPSBwYXJzZWRUb2tlbi5ncm91cHMuYWxnby50b0xvd2VyQ2FzZSgpXG5cbiAgICAvLyA1LiBJZiBhbGdvcml0aG0gaXMgYSBoYXNoIGZ1bmN0aW9uIHJlY29nbml6ZWQgYnkgdGhlIHVzZXJcbiAgICAvLyAgICBhZ2VudCwgYWRkIHRoZSBwYXJzZWQgdG9rZW4gdG8gcmVzdWx0LlxuICAgIGlmIChzdXBwb3J0ZWRIYXNoZXMuaW5jbHVkZXMoYWxnb3JpdGhtKSkge1xuICAgICAgcmVzdWx0LnB1c2gocGFyc2VkVG9rZW4uZ3JvdXBzKVxuICAgIH1cbiAgfVxuXG4gIC8vIDQuIFJldHVybiBubyBtZXRhZGF0YSBpZiBlbXB0eSBpcyB0cnVlLCBvdGhlcndpc2UgcmV0dXJuIHJlc3VsdC5cbiAgaWYgKGVtcHR5ID09PSB0cnVlKSB7XG4gICAgcmV0dXJuICdubyBtZXRhZGF0YSdcbiAgfVxuXG4gIHJldHVybiByZXN1bHRcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3sgYWxnbzogJ3NoYTI1NicgfCAnc2hhMzg0JyB8ICdzaGE1MTInIH1bXX0gbWV0YWRhdGFMaXN0XG4gKi9cbmZ1bmN0aW9uIGdldFN0cm9uZ2VzdE1ldGFkYXRhIChtZXRhZGF0YUxpc3QpIHtcbiAgLy8gTGV0IGFsZ29yaXRobSBiZSB0aGUgYWxnbyBjb21wb25lbnQgb2YgdGhlIGZpcnN0IGl0ZW0gaW4gbWV0YWRhdGFMaXN0LlxuICAvLyBDYW4gYmUgc2hhMjU2XG4gIGxldCBhbGdvcml0aG0gPSBtZXRhZGF0YUxpc3RbMF0uYWxnb1xuICAvLyBJZiB0aGUgYWxnb3JpdGhtIGlzIHNoYTUxMiwgdGhlbiBpdCBpcyB0aGUgc3Ryb25nZXN0XG4gIC8vIGFuZCB3ZSBjYW4gcmV0dXJuIGltbWVkaWF0ZWx5XG4gIGlmIChhbGdvcml0aG1bM10gPT09ICc1Jykge1xuICAgIHJldHVybiBhbGdvcml0aG1cbiAgfVxuXG4gIGZvciAobGV0IGkgPSAxOyBpIDwgbWV0YWRhdGFMaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgbWV0YWRhdGEgPSBtZXRhZGF0YUxpc3RbaV1cbiAgICAvLyBJZiB0aGUgYWxnb3JpdGhtIGlzIHNoYTUxMiwgdGhlbiBpdCBpcyB0aGUgc3Ryb25nZXN0XG4gICAgLy8gYW5kIHdlIGNhbiBicmVhayB0aGUgbG9vcCBpbW1lZGlhdGVseVxuICAgIGlmIChtZXRhZGF0YS5hbGdvWzNdID09PSAnNScpIHtcbiAgICAgIGFsZ29yaXRobSA9ICdzaGE1MTInXG4gICAgICBicmVha1xuICAgIC8vIElmIHRoZSBhbGdvcml0aG0gaXMgc2hhMzg0LCB0aGVuIGEgcG90ZW50aWFsIHNoYTI1NiBvciBzaGEzODQgaXMgaWdub3JlZFxuICAgIH0gZWxzZSBpZiAoYWxnb3JpdGhtWzNdID09PSAnMycpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgLy8gYWxnb3JpdGhtIGlzIHNoYTI1NiwgY2hlY2sgaWYgYWxnb3JpdGhtIGlzIHNoYTM4NCBhbmQgaWYgc28sIHNldCBpdCBhc1xuICAgIC8vIHRoZSBzdHJvbmdlc3RcbiAgICB9IGVsc2UgaWYgKG1ldGFkYXRhLmFsZ29bM10gPT09ICczJykge1xuICAgICAgYWxnb3JpdGhtID0gJ3NoYTM4NCdcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGFsZ29yaXRobVxufVxuXG5mdW5jdGlvbiBmaWx0ZXJNZXRhZGF0YUxpc3RCeUFsZ29yaXRobSAobWV0YWRhdGFMaXN0LCBhbGdvcml0aG0pIHtcbiAgaWYgKG1ldGFkYXRhTGlzdC5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gbWV0YWRhdGFMaXN0XG4gIH1cblxuICBsZXQgcG9zID0gMFxuICBmb3IgKGxldCBpID0gMDsgaSA8IG1ldGFkYXRhTGlzdC5sZW5ndGg7ICsraSkge1xuICAgIGlmIChtZXRhZGF0YUxpc3RbaV0uYWxnbyA9PT0gYWxnb3JpdGhtKSB7XG4gICAgICBtZXRhZGF0YUxpc3RbcG9zKytdID0gbWV0YWRhdGFMaXN0W2ldXG4gICAgfVxuICB9XG5cbiAgbWV0YWRhdGFMaXN0Lmxlbmd0aCA9IHBvc1xuXG4gIHJldHVybiBtZXRhZGF0YUxpc3Rcbn1cblxuLyoqXG4gKiBDb21wYXJlcyB0d28gYmFzZTY0IHN0cmluZ3MsIGFsbG93aW5nIGZvciBiYXNlNjR1cmxcbiAqIGluIHRoZSBzZWNvbmQgc3RyaW5nLlxuICpcbiogQHBhcmFtIHtzdHJpbmd9IGFjdHVhbFZhbHVlIGFsd2F5cyBiYXNlNjRcbiAqIEBwYXJhbSB7c3RyaW5nfSBleHBlY3RlZFZhbHVlIGJhc2U2NCBvciBiYXNlNjR1cmxcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBjb21wYXJlQmFzZTY0TWl4ZWQgKGFjdHVhbFZhbHVlLCBleHBlY3RlZFZhbHVlKSB7XG4gIGlmIChhY3R1YWxWYWx1ZS5sZW5ndGggIT09IGV4cGVjdGVkVmFsdWUubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhY3R1YWxWYWx1ZS5sZW5ndGg7ICsraSkge1xuICAgIGlmIChhY3R1YWxWYWx1ZVtpXSAhPT0gZXhwZWN0ZWRWYWx1ZVtpXSkge1xuICAgICAgaWYgKFxuICAgICAgICAoYWN0dWFsVmFsdWVbaV0gPT09ICcrJyAmJiBleHBlY3RlZFZhbHVlW2ldID09PSAnLScpIHx8XG4gICAgICAgIChhY3R1YWxWYWx1ZVtpXSA9PT0gJy8nICYmIGV4cGVjdGVkVmFsdWVbaV0gPT09ICdfJylcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy11cGdyYWRlLWluc2VjdXJlLXJlcXVlc3RzLyN1cGdyYWRlLXJlcXVlc3RcbmZ1bmN0aW9uIHRyeVVwZ3JhZGVSZXF1ZXN0VG9BUG90ZW50aWFsbHlUcnVzdHdvcnRoeVVSTCAocmVxdWVzdCkge1xuICAvLyBUT0RPXG59XG5cbi8qKlxuICogQGxpbmsge2h0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL29yaWdpbi5odG1sI3NhbWUtb3JpZ2lufVxuICogQHBhcmFtIHtVUkx9IEFcbiAqIEBwYXJhbSB7VVJMfSBCXG4gKi9cbmZ1bmN0aW9uIHNhbWVPcmlnaW4gKEEsIEIpIHtcbiAgLy8gMS4gSWYgQSBhbmQgQiBhcmUgdGhlIHNhbWUgb3BhcXVlIG9yaWdpbiwgdGhlbiByZXR1cm4gdHJ1ZS5cbiAgaWYgKEEub3JpZ2luID09PSBCLm9yaWdpbiAmJiBBLm9yaWdpbiA9PT0gJ251bGwnKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8vIDIuIElmIEEgYW5kIEIgYXJlIGJvdGggdHVwbGUgb3JpZ2lucyBhbmQgdGhlaXIgc2NoZW1lcyxcbiAgLy8gICAgaG9zdHMsIGFuZCBwb3J0IGFyZSBpZGVudGljYWwsIHRoZW4gcmV0dXJuIHRydWUuXG4gIGlmIChBLnByb3RvY29sID09PSBCLnByb3RvY29sICYmIEEuaG9zdG5hbWUgPT09IEIuaG9zdG5hbWUgJiYgQS5wb3J0ID09PSBCLnBvcnQpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gMy4gUmV0dXJuIGZhbHNlLlxuICByZXR1cm4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gY3JlYXRlRGVmZXJyZWRQcm9taXNlICgpIHtcbiAgbGV0IHJlc1xuICBsZXQgcmVqXG4gIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgcmVzID0gcmVzb2x2ZVxuICAgIHJlaiA9IHJlamVjdFxuICB9KVxuXG4gIHJldHVybiB7IHByb21pc2UsIHJlc29sdmU6IHJlcywgcmVqZWN0OiByZWogfVxufVxuXG5mdW5jdGlvbiBpc0Fib3J0ZWQgKGZldGNoUGFyYW1zKSB7XG4gIHJldHVybiBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnN0YXRlID09PSAnYWJvcnRlZCdcbn1cblxuZnVuY3Rpb24gaXNDYW5jZWxsZWQgKGZldGNoUGFyYW1zKSB7XG4gIHJldHVybiBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnN0YXRlID09PSAnYWJvcnRlZCcgfHxcbiAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnN0YXRlID09PSAndGVybWluYXRlZCdcbn1cblxuY29uc3Qgbm9ybWFsaXplTWV0aG9kUmVjb3JkID0ge1xuICBkZWxldGU6ICdERUxFVEUnLFxuICBERUxFVEU6ICdERUxFVEUnLFxuICBnZXQ6ICdHRVQnLFxuICBHRVQ6ICdHRVQnLFxuICBoZWFkOiAnSEVBRCcsXG4gIEhFQUQ6ICdIRUFEJyxcbiAgb3B0aW9uczogJ09QVElPTlMnLFxuICBPUFRJT05TOiAnT1BUSU9OUycsXG4gIHBvc3Q6ICdQT1NUJyxcbiAgUE9TVDogJ1BPU1QnLFxuICBwdXQ6ICdQVVQnLFxuICBQVVQ6ICdQVVQnXG59XG5cbi8vIE5vdGU6IG9iamVjdCBwcm90b3R5cGVzIHNob3VsZCBub3QgYmUgYWJsZSB0byBiZSByZWZlcmVuY2VkLiBlLmcuIGBPYmplY3QjaGFzT3duUHJvcGVydHlgLlxuT2JqZWN0LnNldFByb3RvdHlwZU9mKG5vcm1hbGl6ZU1ldGhvZFJlY29yZCwgbnVsbClcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LW1ldGhvZC1ub3JtYWxpemVcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2RcbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplTWV0aG9kIChtZXRob2QpIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZU1ldGhvZFJlY29yZFttZXRob2QudG9Mb3dlckNhc2UoKV0gPz8gbWV0aG9kXG59XG5cbi8vIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNzZXJpYWxpemUtYS1qYXZhc2NyaXB0LXZhbHVlLXRvLWEtanNvbi1zdHJpbmdcbmZ1bmN0aW9uIHNlcmlhbGl6ZUphdmFzY3JpcHRWYWx1ZVRvSlNPTlN0cmluZyAodmFsdWUpIHtcbiAgLy8gMS4gTGV0IHJlc3VsdCBiZSA/IENhbGwoJUpTT04uc3RyaW5naWZ5JSwgdW5kZWZpbmVkLCDCqyB2YWx1ZSDCuykuXG4gIGNvbnN0IHJlc3VsdCA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKVxuXG4gIC8vIDIuIElmIHJlc3VsdCBpcyB1bmRlZmluZWQsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1ZhbHVlIGlzIG5vdCBKU09OIHNlcmlhbGl6YWJsZScpXG4gIH1cblxuICAvLyAzLiBBc3NlcnQ6IHJlc3VsdCBpcyBhIHN0cmluZy5cbiAgYXNzZXJ0KHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnKVxuXG4gIC8vIDQuIFJldHVybiByZXN1bHQuXG4gIHJldHVybiByZXN1bHRcbn1cblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0lMjVpdGVyYXRvcnByb3RvdHlwZSUyNS1vYmplY3RcbmNvbnN0IGVzSXRlcmF0b3JQcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoT2JqZWN0LmdldFByb3RvdHlwZU9mKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSkpXG5cbi8qKlxuICogQHNlZSBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2Rmbi1pdGVyYXRvci1wcm90b3R5cGUtb2JqZWN0XG4gKiBAcGFyYW0geygpID0+IHVua25vd25bXX0gaXRlcmF0b3JcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIG5hbWUgb2YgdGhlIGluc3RhbmNlXG4gKiBAcGFyYW0geydrZXknfCd2YWx1ZSd8J2tleSt2YWx1ZSd9IGtpbmRcbiAqL1xuZnVuY3Rpb24gbWFrZUl0ZXJhdG9yIChpdGVyYXRvciwgbmFtZSwga2luZCkge1xuICBjb25zdCBvYmplY3QgPSB7XG4gICAgaW5kZXg6IDAsXG4gICAga2luZCxcbiAgICB0YXJnZXQ6IGl0ZXJhdG9yXG4gIH1cblxuICBjb25zdCBpID0ge1xuICAgIG5leHQgKCkge1xuICAgICAgLy8gMS4gTGV0IGludGVyZmFjZSBiZSB0aGUgaW50ZXJmYWNlIGZvciB3aGljaCB0aGUgaXRlcmF0b3IgcHJvdG90eXBlIG9iamVjdCBleGlzdHMuXG5cbiAgICAgIC8vIDIuIExldCB0aGlzVmFsdWUgYmUgdGhlIHRoaXMgdmFsdWUuXG5cbiAgICAgIC8vIDMuIExldCBvYmplY3QgYmUgPyBUb09iamVjdCh0aGlzVmFsdWUpLlxuXG4gICAgICAvLyA0LiBJZiBvYmplY3QgaXMgYSBwbGF0Zm9ybSBvYmplY3QsIHRoZW4gcGVyZm9ybSBhIHNlY3VyaXR5XG4gICAgICAvLyAgICBjaGVjaywgcGFzc2luZzpcblxuICAgICAgLy8gNS4gSWYgb2JqZWN0IGlzIG5vdCBhIGRlZmF1bHQgaXRlcmF0b3Igb2JqZWN0IGZvciBpbnRlcmZhY2UsXG4gICAgICAvLyAgICB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgaWYgKE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKSAhPT0gaSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgIGAnbmV4dCcgY2FsbGVkIG9uIGFuIG9iamVjdCB0aGF0IGRvZXMgbm90IGltcGxlbWVudCBpbnRlcmZhY2UgJHtuYW1lfSBJdGVyYXRvci5gXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgLy8gNi4gTGV0IGluZGV4IGJlIG9iamVjdOKAmXMgaW5kZXguXG4gICAgICAvLyA3LiBMZXQga2luZCBiZSBvYmplY3TigJlzIGtpbmQuXG4gICAgICAvLyA4LiBMZXQgdmFsdWVzIGJlIG9iamVjdOKAmXMgdGFyZ2V0J3MgdmFsdWUgcGFpcnMgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAgY29uc3QgeyBpbmRleCwga2luZCwgdGFyZ2V0IH0gPSBvYmplY3RcbiAgICAgIGNvbnN0IHZhbHVlcyA9IHRhcmdldCgpXG5cbiAgICAgIC8vIDkuIExldCBsZW4gYmUgdGhlIGxlbmd0aCBvZiB2YWx1ZXMuXG4gICAgICBjb25zdCBsZW4gPSB2YWx1ZXMubGVuZ3RoXG5cbiAgICAgIC8vIDEwLiBJZiBpbmRleCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gbGVuLCB0aGVuIHJldHVyblxuICAgICAgLy8gICAgIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKS5cbiAgICAgIGlmIChpbmRleCA+PSBsZW4pIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9XG4gICAgICB9XG5cbiAgICAgIC8vIDExLiBMZXQgcGFpciBiZSB0aGUgZW50cnkgaW4gdmFsdWVzIGF0IGluZGV4IGluZGV4LlxuICAgICAgY29uc3QgcGFpciA9IHZhbHVlc1tpbmRleF1cblxuICAgICAgLy8gMTIuIFNldCBvYmplY3TigJlzIGluZGV4IHRvIGluZGV4ICsgMS5cbiAgICAgIG9iamVjdC5pbmRleCA9IGluZGV4ICsgMVxuXG4gICAgICAvLyAxMy4gUmV0dXJuIHRoZSBpdGVyYXRvciByZXN1bHQgZm9yIHBhaXIgYW5kIGtpbmQuXG4gICAgICByZXR1cm4gaXRlcmF0b3JSZXN1bHQocGFpciwga2luZClcbiAgICB9LFxuICAgIC8vIFRoZSBjbGFzcyBzdHJpbmcgb2YgYW4gaXRlcmF0b3IgcHJvdG90eXBlIG9iamVjdCBmb3IgYSBnaXZlbiBpbnRlcmZhY2UgaXMgdGhlXG4gICAgLy8gcmVzdWx0IG9mIGNvbmNhdGVuYXRpbmcgdGhlIGlkZW50aWZpZXIgb2YgdGhlIGludGVyZmFjZSBhbmQgdGhlIHN0cmluZyBcIiBJdGVyYXRvclwiLlxuICAgIFtTeW1ib2wudG9TdHJpbmdUYWddOiBgJHtuYW1lfSBJdGVyYXRvcmBcbiAgfVxuXG4gIC8vIFRoZSBbW1Byb3RvdHlwZV1dIGludGVybmFsIHNsb3Qgb2YgYW4gaXRlcmF0b3IgcHJvdG90eXBlIG9iamVjdCBtdXN0IGJlICVJdGVyYXRvclByb3RvdHlwZSUuXG4gIE9iamVjdC5zZXRQcm90b3R5cGVPZihpLCBlc0l0ZXJhdG9yUHJvdG90eXBlKVxuICAvLyBlc0l0ZXJhdG9yUHJvdG90eXBlIG5lZWRzIHRvIGJlIHRoZSBwcm90b3R5cGUgb2YgaVxuICAvLyB3aGljaCBpcyB0aGUgcHJvdG90eXBlIG9mIGFuIGVtcHR5IG9iamVjdC4gWWVzLCBpdCdzIGNvbmZ1c2luZy5cbiAgcmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZih7fSwgaSlcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNpdGVyYXRvci1yZXN1bHRcbmZ1bmN0aW9uIGl0ZXJhdG9yUmVzdWx0IChwYWlyLCBraW5kKSB7XG4gIGxldCByZXN1bHRcblxuICAvLyAxLiBMZXQgcmVzdWx0IGJlIGEgdmFsdWUgZGV0ZXJtaW5lZCBieSB0aGUgdmFsdWUgb2Yga2luZDpcbiAgc3dpdGNoIChraW5kKSB7XG4gICAgY2FzZSAna2V5Jzoge1xuICAgICAgLy8gMS4gTGV0IGlkbEtleSBiZSBwYWly4oCZcyBrZXkuXG4gICAgICAvLyAyLiBMZXQga2V5IGJlIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBpZGxLZXkgdG8gYW5cbiAgICAgIC8vICAgIEVDTUFTY3JpcHQgdmFsdWUuXG4gICAgICAvLyAzLiByZXN1bHQgaXMga2V5LlxuICAgICAgcmVzdWx0ID0gcGFpclswXVxuICAgICAgYnJlYWtcbiAgICB9XG4gICAgY2FzZSAndmFsdWUnOiB7XG4gICAgICAvLyAxLiBMZXQgaWRsVmFsdWUgYmUgcGFpcuKAmXMgdmFsdWUuXG4gICAgICAvLyAyLiBMZXQgdmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIGlkbFZhbHVlIHRvXG4gICAgICAvLyAgICBhbiBFQ01BU2NyaXB0IHZhbHVlLlxuICAgICAgLy8gMy4gcmVzdWx0IGlzIHZhbHVlLlxuICAgICAgcmVzdWx0ID0gcGFpclsxXVxuICAgICAgYnJlYWtcbiAgICB9XG4gICAgY2FzZSAna2V5K3ZhbHVlJzoge1xuICAgICAgLy8gMS4gTGV0IGlkbEtleSBiZSBwYWly4oCZcyBrZXkuXG4gICAgICAvLyAyLiBMZXQgaWRsVmFsdWUgYmUgcGFpcuKAmXMgdmFsdWUuXG4gICAgICAvLyAzLiBMZXQga2V5IGJlIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBpZGxLZXkgdG8gYW5cbiAgICAgIC8vICAgIEVDTUFTY3JpcHQgdmFsdWUuXG4gICAgICAvLyA0LiBMZXQgdmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIGlkbFZhbHVlIHRvXG4gICAgICAvLyAgICBhbiBFQ01BU2NyaXB0IHZhbHVlLlxuICAgICAgLy8gNS4gTGV0IGFycmF5IGJlICEgQXJyYXlDcmVhdGUoMikuXG4gICAgICAvLyA2LiBDYWxsICEgQ3JlYXRlRGF0YVByb3BlcnR5KGFycmF5LCBcIjBcIiwga2V5KS5cbiAgICAgIC8vIDcuIENhbGwgISBDcmVhdGVEYXRhUHJvcGVydHkoYXJyYXksIFwiMVwiLCB2YWx1ZSkuXG4gICAgICAvLyA4LiByZXN1bHQgaXMgYXJyYXkuXG4gICAgICByZXN1bHQgPSBwYWlyXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIC8vIDIuIFJldHVybiBDcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHJlc3VsdCwgZmFsc2UpLlxuICByZXR1cm4geyB2YWx1ZTogcmVzdWx0LCBkb25lOiBmYWxzZSB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYm9keS1mdWxseS1yZWFkXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZ1bGx5UmVhZEJvZHkgKGJvZHksIHByb2Nlc3NCb2R5LCBwcm9jZXNzQm9keUVycm9yKSB7XG4gIC8vIDEuIElmIHRhc2tEZXN0aW5hdGlvbiBpcyBudWxsLCB0aGVuIHNldCB0YXNrRGVzdGluYXRpb24gdG9cbiAgLy8gICAgdGhlIHJlc3VsdCBvZiBzdGFydGluZyBhIG5ldyBwYXJhbGxlbCBxdWV1ZS5cblxuICAvLyAyLiBMZXQgc3VjY2Vzc1N0ZXBzIGdpdmVuIGEgYnl0ZSBzZXF1ZW5jZSBieXRlcyBiZSB0byBxdWV1ZSBhXG4gIC8vICAgIGZldGNoIHRhc2sgdG8gcnVuIHByb2Nlc3NCb2R5IGdpdmVuIGJ5dGVzLCB3aXRoIHRhc2tEZXN0aW5hdGlvbi5cbiAgY29uc3Qgc3VjY2Vzc1N0ZXBzID0gcHJvY2Vzc0JvZHlcblxuICAvLyAzLiBMZXQgZXJyb3JTdGVwcyBiZSB0byBxdWV1ZSBhIGZldGNoIHRhc2sgdG8gcnVuIHByb2Nlc3NCb2R5RXJyb3IsXG4gIC8vICAgIHdpdGggdGFza0Rlc3RpbmF0aW9uLlxuICBjb25zdCBlcnJvclN0ZXBzID0gcHJvY2Vzc0JvZHlFcnJvclxuXG4gIC8vIDQuIExldCByZWFkZXIgYmUgdGhlIHJlc3VsdCBvZiBnZXR0aW5nIGEgcmVhZGVyIGZvciBib2R54oCZcyBzdHJlYW0uXG4gIC8vICAgIElmIHRoYXQgdGhyZXcgYW4gZXhjZXB0aW9uLCB0aGVuIHJ1biBlcnJvclN0ZXBzIHdpdGggdGhhdFxuICAvLyAgICBleGNlcHRpb24gYW5kIHJldHVybi5cbiAgbGV0IHJlYWRlclxuXG4gIHRyeSB7XG4gICAgcmVhZGVyID0gYm9keS5zdHJlYW0uZ2V0UmVhZGVyKClcbiAgfSBjYXRjaCAoZSkge1xuICAgIGVycm9yU3RlcHMoZSlcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIDUuIFJlYWQgYWxsIGJ5dGVzIGZyb20gcmVhZGVyLCBnaXZlbiBzdWNjZXNzU3RlcHMgYW5kIGVycm9yU3RlcHMuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVhZEFsbEJ5dGVzKHJlYWRlcilcbiAgICBzdWNjZXNzU3RlcHMocmVzdWx0KVxuICB9IGNhdGNoIChlKSB7XG4gICAgZXJyb3JTdGVwcyhlKVxuICB9XG59XG5cbi8qKiBAdHlwZSB7UmVhZGFibGVTdHJlYW19ICovXG5sZXQgUmVhZGFibGVTdHJlYW0gPSBnbG9iYWxUaGlzLlJlYWRhYmxlU3RyZWFtXG5cbmZ1bmN0aW9uIGlzUmVhZGFibGVTdHJlYW1MaWtlIChzdHJlYW0pIHtcbiAgaWYgKCFSZWFkYWJsZVN0cmVhbSkge1xuICAgIFJlYWRhYmxlU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtL3dlYicpLlJlYWRhYmxlU3RyZWFtXG4gIH1cblxuICByZXR1cm4gc3RyZWFtIGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW0gfHwgKFxuICAgIHN0cmVhbVtTeW1ib2wudG9TdHJpbmdUYWddID09PSAnUmVhZGFibGVTdHJlYW0nICYmXG4gICAgdHlwZW9mIHN0cmVhbS50ZWUgPT09ICdmdW5jdGlvbidcbiAgKVxufVxuXG5jb25zdCBNQVhJTVVNX0FSR1VNRU5UX0xFTkdUSCA9IDY1NTM1XG5cbi8qKlxuICogQHNlZSBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jaXNvbW9ycGhpYy1kZWNvZGVcbiAqIEBwYXJhbSB7bnVtYmVyW118VWludDhBcnJheX0gaW5wdXRcbiAqL1xuZnVuY3Rpb24gaXNvbW9ycGhpY0RlY29kZSAoaW5wdXQpIHtcbiAgLy8gMS4gVG8gaXNvbW9ycGhpYyBkZWNvZGUgYSBieXRlIHNlcXVlbmNlIGlucHV0LCByZXR1cm4gYSBzdHJpbmcgd2hvc2UgY29kZSBwb2ludFxuICAvLyAgICBsZW5ndGggaXMgZXF1YWwgdG8gaW5wdXTigJlzIGxlbmd0aCBhbmQgd2hvc2UgY29kZSBwb2ludHMgaGF2ZSB0aGUgc2FtZSB2YWx1ZXNcbiAgLy8gICAgYXMgdGhlIHZhbHVlcyBvZiBpbnB1dOKAmXMgYnl0ZXMsIGluIHRoZSBzYW1lIG9yZGVyLlxuXG4gIGlmIChpbnB1dC5sZW5ndGggPCBNQVhJTVVNX0FSR1VNRU5UX0xFTkdUSCkge1xuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKC4uLmlucHV0KVxuICB9XG5cbiAgcmV0dXJuIGlucHV0LnJlZHVjZSgocHJldmlvdXMsIGN1cnJlbnQpID0+IHByZXZpb3VzICsgU3RyaW5nLmZyb21DaGFyQ29kZShjdXJyZW50KSwgJycpXG59XG5cbi8qKlxuICogQHBhcmFtIHtSZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXI8VWludDhBcnJheT59IGNvbnRyb2xsZXJcbiAqL1xuZnVuY3Rpb24gcmVhZGFibGVTdHJlYW1DbG9zZSAoY29udHJvbGxlcikge1xuICB0cnkge1xuICAgIGNvbnRyb2xsZXIuY2xvc2UoKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBUT0RPOiBhZGQgY29tbWVudCBleHBsYWluaW5nIHdoeSB0aGlzIGVycm9yIG9jY3Vycy5cbiAgICBpZiAoIWVyci5tZXNzYWdlLmluY2x1ZGVzKCdDb250cm9sbGVyIGlzIGFscmVhZHkgY2xvc2VkJykpIHtcbiAgICAgIHRocm93IGVyclxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2lzb21vcnBoaWMtZW5jb2RlXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRcbiAqL1xuZnVuY3Rpb24gaXNvbW9ycGhpY0VuY29kZSAoaW5wdXQpIHtcbiAgLy8gMS4gQXNzZXJ0OiBpbnB1dCBjb250YWlucyBubyBjb2RlIHBvaW50cyBncmVhdGVyIHRoYW4gVSswMEZGLlxuICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgYXNzZXJ0KGlucHV0LmNoYXJDb2RlQXQoaSkgPD0gMHhGRilcbiAgfVxuXG4gIC8vIDIuIFJldHVybiBhIGJ5dGUgc2VxdWVuY2Ugd2hvc2UgbGVuZ3RoIGlzIGVxdWFsIHRvIGlucHV04oCZcyBjb2RlXG4gIC8vICAgIHBvaW50IGxlbmd0aCBhbmQgd2hvc2UgYnl0ZXMgaGF2ZSB0aGUgc2FtZSB2YWx1ZXMgYXMgdGhlXG4gIC8vICAgIHZhbHVlcyBvZiBpbnB1dOKAmXMgY29kZSBwb2ludHMsIGluIHRoZSBzYW1lIG9yZGVyXG4gIHJldHVybiBpbnB1dFxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9zdHJlYW1zLnNwZWMud2hhdHdnLm9yZy8jcmVhZGFibGVzdHJlYW1kZWZhdWx0cmVhZGVyLXJlYWQtYWxsLWJ5dGVzXG4gKiBAc2VlIGh0dHBzOi8vc3RyZWFtcy5zcGVjLndoYXR3Zy5vcmcvI3JlYWQtbG9vcFxuICogQHBhcmFtIHtSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXJ9IHJlYWRlclxuICovXG5hc3luYyBmdW5jdGlvbiByZWFkQWxsQnl0ZXMgKHJlYWRlcikge1xuICBjb25zdCBieXRlcyA9IFtdXG4gIGxldCBieXRlTGVuZ3RoID0gMFxuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgeyBkb25lLCB2YWx1ZTogY2h1bmsgfSA9IGF3YWl0IHJlYWRlci5yZWFkKClcblxuICAgIGlmIChkb25lKSB7XG4gICAgICAvLyAxLiBDYWxsIHN1Y2Nlc3NTdGVwcyB3aXRoIGJ5dGVzLlxuICAgICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoYnl0ZXMsIGJ5dGVMZW5ndGgpXG4gICAgfVxuXG4gICAgLy8gMS4gSWYgY2h1bmsgaXMgbm90IGEgVWludDhBcnJheSBvYmplY3QsIGNhbGwgZmFpbHVyZVN0ZXBzXG4gICAgLy8gICAgd2l0aCBhIFR5cGVFcnJvciBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMuXG4gICAgaWYgKCFpc1VpbnQ4QXJyYXkoY2h1bmspKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWNlaXZlZCBub24tVWludDhBcnJheSBjaHVuaycpXG4gICAgfVxuXG4gICAgLy8gMi4gQXBwZW5kIHRoZSBieXRlcyByZXByZXNlbnRlZCBieSBjaHVuayB0byBieXRlcy5cbiAgICBieXRlcy5wdXNoKGNodW5rKVxuICAgIGJ5dGVMZW5ndGggKz0gY2h1bmsubGVuZ3RoXG5cbiAgICAvLyAzLiBSZWFkLWxvb3AgZ2l2ZW4gcmVhZGVyLCBieXRlcywgc3VjY2Vzc1N0ZXBzLCBhbmQgZmFpbHVyZVN0ZXBzLlxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaXMtbG9jYWxcbiAqIEBwYXJhbSB7VVJMfSB1cmxcbiAqL1xuZnVuY3Rpb24gdXJsSXNMb2NhbCAodXJsKSB7XG4gIGFzc2VydCgncHJvdG9jb2wnIGluIHVybCkgLy8gZW5zdXJlIGl0J3MgYSB1cmwgb2JqZWN0XG5cbiAgY29uc3QgcHJvdG9jb2wgPSB1cmwucHJvdG9jb2xcblxuICByZXR1cm4gcHJvdG9jb2wgPT09ICdhYm91dDonIHx8IHByb3RvY29sID09PSAnYmxvYjonIHx8IHByb3RvY29sID09PSAnZGF0YTonXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd8VVJMfSB1cmxcbiAqL1xuZnVuY3Rpb24gdXJsSGFzSHR0cHNTY2hlbWUgKHVybCkge1xuICBpZiAodHlwZW9mIHVybCA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdXJsLnN0YXJ0c1dpdGgoJ2h0dHBzOicpXG4gIH1cblxuICByZXR1cm4gdXJsLnByb3RvY29sID09PSAnaHR0cHM6J1xufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtc2NoZW1lXG4gKiBAcGFyYW0ge1VSTH0gdXJsXG4gKi9cbmZ1bmN0aW9uIHVybElzSHR0cEh0dHBzU2NoZW1lICh1cmwpIHtcbiAgYXNzZXJ0KCdwcm90b2NvbCcgaW4gdXJsKSAvLyBlbnN1cmUgaXQncyBhIHVybCBvYmplY3RcblxuICBjb25zdCBwcm90b2NvbCA9IHVybC5wcm90b2NvbFxuXG4gIHJldHVybiBwcm90b2NvbCA9PT0gJ2h0dHA6JyB8fCBwcm90b2NvbCA9PT0gJ2h0dHBzOidcbn1cblxuLyoqXG4gKiBGZXRjaCBzdXBwb3J0cyBub2RlID49IDE2LjguMCwgYnV0IE9iamVjdC5oYXNPd24gd2FzIGFkZGVkIGluIHYxNi45LjAuXG4gKi9cbmNvbnN0IGhhc093biA9IE9iamVjdC5oYXNPd24gfHwgKChkaWN0LCBrZXkpID0+IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkaWN0LCBrZXkpKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXNBYm9ydGVkLFxuICBpc0NhbmNlbGxlZCxcbiAgY3JlYXRlRGVmZXJyZWRQcm9taXNlLFxuICBSZWFkYWJsZVN0cmVhbUZyb20sXG4gIHRvVVNWU3RyaW5nLFxuICB0cnlVcGdyYWRlUmVxdWVzdFRvQVBvdGVudGlhbGx5VHJ1c3R3b3J0aHlVUkwsXG4gIGNvYXJzZW5lZFNoYXJlZEN1cnJlbnRUaW1lLFxuICBkZXRlcm1pbmVSZXF1ZXN0c1JlZmVycmVyLFxuICBtYWtlUG9saWN5Q29udGFpbmVyLFxuICBjbG9uZVBvbGljeUNvbnRhaW5lcixcbiAgYXBwZW5kRmV0Y2hNZXRhZGF0YSxcbiAgYXBwZW5kUmVxdWVzdE9yaWdpbkhlYWRlcixcbiAgVEFPQ2hlY2ssXG4gIGNvcnNDaGVjayxcbiAgY3Jvc3NPcmlnaW5SZXNvdXJjZVBvbGljeUNoZWNrLFxuICBjcmVhdGVPcGFxdWVUaW1pbmdJbmZvLFxuICBzZXRSZXF1ZXN0UmVmZXJyZXJQb2xpY3lPblJlZGlyZWN0LFxuICBpc1ZhbGlkSFRUUFRva2VuLFxuICByZXF1ZXN0QmFkUG9ydCxcbiAgcmVxdWVzdEN1cnJlbnRVUkwsXG4gIHJlc3BvbnNlVVJMLFxuICByZXNwb25zZUxvY2F0aW9uVVJMLFxuICBpc0Jsb2JMaWtlLFxuICBpc1VSTFBvdGVudGlhbGx5VHJ1c3R3b3J0aHksXG4gIGlzVmFsaWRSZWFzb25QaHJhc2UsXG4gIHNhbWVPcmlnaW4sXG4gIG5vcm1hbGl6ZU1ldGhvZCxcbiAgc2VyaWFsaXplSmF2YXNjcmlwdFZhbHVlVG9KU09OU3RyaW5nLFxuICBtYWtlSXRlcmF0b3IsXG4gIGlzVmFsaWRIZWFkZXJOYW1lLFxuICBpc1ZhbGlkSGVhZGVyVmFsdWUsXG4gIGhhc093bixcbiAgaXNFcnJvckxpa2UsXG4gIGZ1bGx5UmVhZEJvZHksXG4gIGJ5dGVzTWF0Y2gsXG4gIGlzUmVhZGFibGVTdHJlYW1MaWtlLFxuICByZWFkYWJsZVN0cmVhbUNsb3NlLFxuICBpc29tb3JwaGljRW5jb2RlLFxuICBpc29tb3JwaGljRGVjb2RlLFxuICB1cmxJc0xvY2FsLFxuICB1cmxIYXNIdHRwc1NjaGVtZSxcbiAgdXJsSXNIdHRwSHR0cHNTY2hlbWUsXG4gIHJlYWRBbGxCeXRlcyxcbiAgbm9ybWFsaXplTWV0aG9kUmVjb3JkLFxuICBwYXJzZU1ldGFkYXRhXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAga1VybDogU3ltYm9sKCd1cmwnKSxcbiAga0hlYWRlcnM6IFN5bWJvbCgnaGVhZGVycycpLFxuICBrU2lnbmFsOiBTeW1ib2woJ3NpZ25hbCcpLFxuICBrU3RhdGU6IFN5bWJvbCgnc3RhdGUnKSxcbiAga0d1YXJkOiBTeW1ib2woJ2d1YXJkJyksXG4gIGtSZWFsbTogU3ltYm9sKCdyZWFsbScpXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHR5cGVzIH0gPSByZXF1aXJlKCd1dGlsJylcbmNvbnN0IHsgaGFzT3duLCB0b1VTVlN0cmluZyB9ID0gcmVxdWlyZSgnLi91dGlsJylcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4uLy4uL3R5cGVzL3dlYmlkbCcpLldlYmlkbH0gKi9cbmNvbnN0IHdlYmlkbCA9IHt9XG53ZWJpZGwuY29udmVydGVycyA9IHt9XG53ZWJpZGwudXRpbCA9IHt9XG53ZWJpZGwuZXJyb3JzID0ge31cblxud2ViaWRsLmVycm9ycy5leGNlcHRpb24gPSBmdW5jdGlvbiAobWVzc2FnZSkge1xuICByZXR1cm4gbmV3IFR5cGVFcnJvcihgJHttZXNzYWdlLmhlYWRlcn06ICR7bWVzc2FnZS5tZXNzYWdlfWApXG59XG5cbndlYmlkbC5lcnJvcnMuY29udmVyc2lvbkZhaWxlZCA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gIGNvbnN0IHBsdXJhbCA9IGNvbnRleHQudHlwZXMubGVuZ3RoID09PSAxID8gJycgOiAnIG9uZSBvZidcbiAgY29uc3QgbWVzc2FnZSA9XG4gICAgYCR7Y29udGV4dC5hcmd1bWVudH0gY291bGQgbm90IGJlIGNvbnZlcnRlZCB0b2AgK1xuICAgIGAke3BsdXJhbH06ICR7Y29udGV4dC50eXBlcy5qb2luKCcsICcpfS5gXG5cbiAgcmV0dXJuIHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICBoZWFkZXI6IGNvbnRleHQucHJlZml4LFxuICAgIG1lc3NhZ2VcbiAgfSlcbn1cblxud2ViaWRsLmVycm9ycy5pbnZhbGlkQXJndW1lbnQgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuICByZXR1cm4gd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgIGhlYWRlcjogY29udGV4dC5wcmVmaXgsXG4gICAgbWVzc2FnZTogYFwiJHtjb250ZXh0LnZhbHVlfVwiIGlzIGFuIGludmFsaWQgJHtjb250ZXh0LnR5cGV9LmBcbiAgfSlcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNpbXBsZW1lbnRzXG53ZWJpZGwuYnJhbmRDaGVjayA9IGZ1bmN0aW9uIChWLCBJLCBvcHRzID0gdW5kZWZpbmVkKSB7XG4gIGlmIChvcHRzPy5zdHJpY3QgIT09IGZhbHNlICYmICEoViBpbnN0YW5jZW9mIEkpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSWxsZWdhbCBpbnZvY2F0aW9uJylcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gVj8uW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09IEkucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ11cbiAgfVxufVxuXG53ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayA9IGZ1bmN0aW9uICh7IGxlbmd0aCB9LCBtaW4sIGN0eCkge1xuICBpZiAobGVuZ3RoIDwgbWluKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgbWVzc2FnZTogYCR7bWlufSBhcmd1bWVudCR7bWluICE9PSAxID8gJ3MnIDogJyd9IHJlcXVpcmVkLCBgICtcbiAgICAgICAgICAgICAgIGBidXQke2xlbmd0aCA/ICcgb25seScgOiAnJ30gJHtsZW5ndGh9IGZvdW5kLmAsXG4gICAgICAuLi5jdHhcbiAgICB9KVxuICB9XG59XG5cbndlYmlkbC5pbGxlZ2FsQ29uc3RydWN0b3IgPSBmdW5jdGlvbiAoKSB7XG4gIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICBoZWFkZXI6ICdUeXBlRXJyb3InLFxuICAgIG1lc3NhZ2U6ICdJbGxlZ2FsIGNvbnN0cnVjdG9yJ1xuICB9KVxufVxuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWVjbWFzY3JpcHQtZGF0YS10eXBlcy1hbmQtdmFsdWVzXG53ZWJpZGwudXRpbC5UeXBlID0gZnVuY3Rpb24gKFYpIHtcbiAgc3dpdGNoICh0eXBlb2YgVikge1xuICAgIGNhc2UgJ3VuZGVmaW5lZCc6IHJldHVybiAnVW5kZWZpbmVkJ1xuICAgIGNhc2UgJ2Jvb2xlYW4nOiByZXR1cm4gJ0Jvb2xlYW4nXG4gICAgY2FzZSAnc3RyaW5nJzogcmV0dXJuICdTdHJpbmcnXG4gICAgY2FzZSAnc3ltYm9sJzogcmV0dXJuICdTeW1ib2wnXG4gICAgY2FzZSAnbnVtYmVyJzogcmV0dXJuICdOdW1iZXInXG4gICAgY2FzZSAnYmlnaW50JzogcmV0dXJuICdCaWdJbnQnXG4gICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgIGNhc2UgJ29iamVjdCc6IHtcbiAgICAgIGlmIChWID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnTnVsbCdcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICdPYmplY3QnXG4gICAgfVxuICB9XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jYWJzdHJhY3Qtb3BkZWYtY29udmVydHRvaW50XG53ZWJpZGwudXRpbC5Db252ZXJ0VG9JbnQgPSBmdW5jdGlvbiAoViwgYml0TGVuZ3RoLCBzaWduZWRuZXNzLCBvcHRzID0ge30pIHtcbiAgbGV0IHVwcGVyQm91bmRcbiAgbGV0IGxvd2VyQm91bmRcblxuICAvLyAxLiBJZiBiaXRMZW5ndGggaXMgNjQsIHRoZW46XG4gIGlmIChiaXRMZW5ndGggPT09IDY0KSB7XG4gICAgLy8gMS4gTGV0IHVwcGVyQm91bmQgYmUgMl41MyDiiJIgMS5cbiAgICB1cHBlckJvdW5kID0gTWF0aC5wb3coMiwgNTMpIC0gMVxuXG4gICAgLy8gMi4gSWYgc2lnbmVkbmVzcyBpcyBcInVuc2lnbmVkXCIsIHRoZW4gbGV0IGxvd2VyQm91bmQgYmUgMC5cbiAgICBpZiAoc2lnbmVkbmVzcyA9PT0gJ3Vuc2lnbmVkJykge1xuICAgICAgbG93ZXJCb3VuZCA9IDBcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gMy4gT3RoZXJ3aXNlIGxldCBsb3dlckJvdW5kIGJlIOKIkjJeNTMgKyAxLlxuICAgICAgbG93ZXJCb3VuZCA9IE1hdGgucG93KC0yLCA1MykgKyAxXG4gICAgfVxuICB9IGVsc2UgaWYgKHNpZ25lZG5lc3MgPT09ICd1bnNpZ25lZCcpIHtcbiAgICAvLyAyLiBPdGhlcndpc2UsIGlmIHNpZ25lZG5lc3MgaXMgXCJ1bnNpZ25lZFwiLCB0aGVuOlxuXG4gICAgLy8gMS4gTGV0IGxvd2VyQm91bmQgYmUgMC5cbiAgICBsb3dlckJvdW5kID0gMFxuXG4gICAgLy8gMi4gTGV0IHVwcGVyQm91bmQgYmUgMl5iaXRMZW5ndGgg4oiSIDEuXG4gICAgdXBwZXJCb3VuZCA9IE1hdGgucG93KDIsIGJpdExlbmd0aCkgLSAxXG4gIH0gZWxzZSB7XG4gICAgLy8gMy4gT3RoZXJ3aXNlOlxuXG4gICAgLy8gMS4gTGV0IGxvd2VyQm91bmQgYmUgLTJeYml0TGVuZ3RoIOKIkiAxLlxuICAgIGxvd2VyQm91bmQgPSBNYXRoLnBvdygtMiwgYml0TGVuZ3RoKSAtIDFcblxuICAgIC8vIDIuIExldCB1cHBlckJvdW5kIGJlIDJeYml0TGVuZ3RoIOKIkiAxIOKIkiAxLlxuICAgIHVwcGVyQm91bmQgPSBNYXRoLnBvdygyLCBiaXRMZW5ndGggLSAxKSAtIDFcbiAgfVxuXG4gIC8vIDQuIExldCB4IGJlID8gVG9OdW1iZXIoVikuXG4gIGxldCB4ID0gTnVtYmVyKFYpXG5cbiAgLy8gNS4gSWYgeCBpcyDiiJIwLCB0aGVuIHNldCB4IHRvICswLlxuICBpZiAoeCA9PT0gMCkge1xuICAgIHggPSAwXG4gIH1cblxuICAvLyA2LiBJZiB0aGUgY29udmVyc2lvbiBpcyB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtFbmZvcmNlUmFuZ2VdIGV4dGVuZGVkIGF0dHJpYnV0ZSwgdGhlbjpcbiAgaWYgKG9wdHMuZW5mb3JjZVJhbmdlID09PSB0cnVlKSB7XG4gICAgLy8gMS4gSWYgeCBpcyBOYU4sICviiJ4sIG9yIOKIkuKIniwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoXG4gICAgICBOdW1iZXIuaXNOYU4oeCkgfHxcbiAgICAgIHggPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSB8fFxuICAgICAgeCA9PT0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZXG4gICAgKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ0ludGVnZXIgY29udmVyc2lvbicsXG4gICAgICAgIG1lc3NhZ2U6IGBDb3VsZCBub3QgY29udmVydCAke1Z9IHRvIGFuIGludGVnZXIuYFxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAyLiBTZXQgeCB0byBJbnRlZ2VyUGFydCh4KS5cbiAgICB4ID0gd2ViaWRsLnV0aWwuSW50ZWdlclBhcnQoeClcblxuICAgIC8vIDMuIElmIHggPCBsb3dlckJvdW5kIG9yIHggPiB1cHBlckJvdW5kLCB0aGVuXG4gICAgLy8gICAgdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKHggPCBsb3dlckJvdW5kIHx8IHggPiB1cHBlckJvdW5kKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ0ludGVnZXIgY29udmVyc2lvbicsXG4gICAgICAgIG1lc3NhZ2U6IGBWYWx1ZSBtdXN0IGJlIGJldHdlZW4gJHtsb3dlckJvdW5kfS0ke3VwcGVyQm91bmR9LCBnb3QgJHt4fS5gXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDQuIFJldHVybiB4LlxuICAgIHJldHVybiB4XG4gIH1cblxuICAvLyA3LiBJZiB4IGlzIG5vdCBOYU4gYW5kIHRoZSBjb252ZXJzaW9uIGlzIHRvIGFuIElETFxuICAvLyAgICB0eXBlIGFzc29jaWF0ZWQgd2l0aCB0aGUgW0NsYW1wXSBleHRlbmRlZFxuICAvLyAgICBhdHRyaWJ1dGUsIHRoZW46XG4gIGlmICghTnVtYmVyLmlzTmFOKHgpICYmIG9wdHMuY2xhbXAgPT09IHRydWUpIHtcbiAgICAvLyAxLiBTZXQgeCB0byBtaW4obWF4KHgsIGxvd2VyQm91bmQpLCB1cHBlckJvdW5kKS5cbiAgICB4ID0gTWF0aC5taW4oTWF0aC5tYXgoeCwgbG93ZXJCb3VuZCksIHVwcGVyQm91bmQpXG5cbiAgICAvLyAyLiBSb3VuZCB4IHRvIHRoZSBuZWFyZXN0IGludGVnZXIsIGNob29zaW5nIHRoZVxuICAgIC8vICAgIGV2ZW4gaW50ZWdlciBpZiBpdCBsaWVzIGhhbGZ3YXkgYmV0d2VlbiB0d28sXG4gICAgLy8gICAgYW5kIGNob29zaW5nICswIHJhdGhlciB0aGFuIOKIkjAuXG4gICAgaWYgKE1hdGguZmxvb3IoeCkgJSAyID09PSAwKSB7XG4gICAgICB4ID0gTWF0aC5mbG9vcih4KVxuICAgIH0gZWxzZSB7XG4gICAgICB4ID0gTWF0aC5jZWlsKHgpXG4gICAgfVxuXG4gICAgLy8gMy4gUmV0dXJuIHguXG4gICAgcmV0dXJuIHhcbiAgfVxuXG4gIC8vIDguIElmIHggaXMgTmFOLCArMCwgK+KIniwgb3Ig4oiS4oieLCB0aGVuIHJldHVybiArMC5cbiAgaWYgKFxuICAgIE51bWJlci5pc05hTih4KSB8fFxuICAgICh4ID09PSAwICYmIE9iamVjdC5pcygwLCB4KSkgfHxcbiAgICB4ID09PSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkgfHxcbiAgICB4ID09PSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFlcbiAgKSB7XG4gICAgcmV0dXJuIDBcbiAgfVxuXG4gIC8vIDkuIFNldCB4IHRvIEludGVnZXJQYXJ0KHgpLlxuICB4ID0gd2ViaWRsLnV0aWwuSW50ZWdlclBhcnQoeClcblxuICAvLyAxMC4gU2V0IHggdG8geCBtb2R1bG8gMl5iaXRMZW5ndGguXG4gIHggPSB4ICUgTWF0aC5wb3coMiwgYml0TGVuZ3RoKVxuXG4gIC8vIDExLiBJZiBzaWduZWRuZXNzIGlzIFwic2lnbmVkXCIgYW5kIHgg4omlIDJeYml0TGVuZ3RoIOKIkiAxLFxuICAvLyAgICB0aGVuIHJldHVybiB4IOKIkiAyXmJpdExlbmd0aC5cbiAgaWYgKHNpZ25lZG5lc3MgPT09ICdzaWduZWQnICYmIHggPj0gTWF0aC5wb3coMiwgYml0TGVuZ3RoKSAtIDEpIHtcbiAgICByZXR1cm4geCAtIE1hdGgucG93KDIsIGJpdExlbmd0aClcbiAgfVxuXG4gIC8vIDEyLiBPdGhlcndpc2UsIHJldHVybiB4LlxuICByZXR1cm4geFxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2Fic3RyYWN0LW9wZGVmLWludGVnZXJwYXJ0XG53ZWJpZGwudXRpbC5JbnRlZ2VyUGFydCA9IGZ1bmN0aW9uIChuKSB7XG4gIC8vIDEuIExldCByIGJlIGZsb29yKGFicyhuKSkuXG4gIGNvbnN0IHIgPSBNYXRoLmZsb29yKE1hdGguYWJzKG4pKVxuXG4gIC8vIDIuIElmIG4gPCAwLCB0aGVuIHJldHVybiAtMSDDlyByLlxuICBpZiAobiA8IDApIHtcbiAgICByZXR1cm4gLTEgKiByXG4gIH1cblxuICAvLyAzLiBPdGhlcndpc2UsIHJldHVybiByLlxuICByZXR1cm4gclxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLXNlcXVlbmNlXG53ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIgPSBmdW5jdGlvbiAoY29udmVydGVyKSB7XG4gIHJldHVybiAoVikgPT4ge1xuICAgIC8vIDEuIElmIFR5cGUoVikgaXMgbm90IE9iamVjdCwgdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKHdlYmlkbC51dGlsLlR5cGUoVikgIT09ICdPYmplY3QnKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ1NlcXVlbmNlJyxcbiAgICAgICAgbWVzc2FnZTogYFZhbHVlIG9mIHR5cGUgJHt3ZWJpZGwudXRpbC5UeXBlKFYpfSBpcyBub3QgYW4gT2JqZWN0LmBcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gTGV0IG1ldGhvZCBiZSA/IEdldE1ldGhvZChWLCBAQGl0ZXJhdG9yKS5cbiAgICAvKiogQHR5cGUge0dlbmVyYXRvcn0gKi9cbiAgICBjb25zdCBtZXRob2QgPSBWPy5bU3ltYm9sLml0ZXJhdG9yXT8uKClcbiAgICBjb25zdCBzZXEgPSBbXVxuXG4gICAgLy8gMy4gSWYgbWV0aG9kIGlzIHVuZGVmaW5lZCwgdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKFxuICAgICAgbWV0aG9kID09PSB1bmRlZmluZWQgfHxcbiAgICAgIHR5cGVvZiBtZXRob2QubmV4dCAhPT0gJ2Z1bmN0aW9uJ1xuICAgICkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6ICdTZXF1ZW5jZScsXG4gICAgICAgIG1lc3NhZ2U6ICdPYmplY3QgaXMgbm90IGFuIGl0ZXJhdG9yLidcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNjcmVhdGUtc2VxdWVuY2UtZnJvbS1pdGVyYWJsZVxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBtZXRob2QubmV4dCgpXG5cbiAgICAgIGlmIChkb25lKSB7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIHNlcS5wdXNoKGNvbnZlcnRlcih2YWx1ZSkpXG4gICAgfVxuXG4gICAgcmV0dXJuIHNlcVxuICB9XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtdG8tcmVjb3JkXG53ZWJpZGwucmVjb3JkQ29udmVydGVyID0gZnVuY3Rpb24gKGtleUNvbnZlcnRlciwgdmFsdWVDb252ZXJ0ZXIpIHtcbiAgcmV0dXJuIChPKSA9PiB7XG4gICAgLy8gMS4gSWYgVHlwZShPKSBpcyBub3QgT2JqZWN0LCB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAod2ViaWRsLnV0aWwuVHlwZShPKSAhPT0gJ09iamVjdCcpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnUmVjb3JkJyxcbiAgICAgICAgbWVzc2FnZTogYFZhbHVlIG9mIHR5cGUgJHt3ZWJpZGwudXRpbC5UeXBlKE8pfSBpcyBub3QgYW4gT2JqZWN0LmBcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gTGV0IHJlc3VsdCBiZSBhIG5ldyBlbXB0eSBpbnN0YW5jZSBvZiByZWNvcmQ8SywgVj4uXG4gICAgY29uc3QgcmVzdWx0ID0ge31cblxuICAgIGlmICghdHlwZXMuaXNQcm94eShPKSkge1xuICAgICAgLy8gT2JqZWN0LmtleXMgb25seSByZXR1cm5zIGVudW1lcmFibGUgcHJvcGVydGllc1xuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKE8pXG5cbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgLy8gMS4gTGV0IHR5cGVkS2V5IGJlIGtleSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgSy5cbiAgICAgICAgY29uc3QgdHlwZWRLZXkgPSBrZXlDb252ZXJ0ZXIoa2V5KVxuXG4gICAgICAgIC8vIDIuIExldCB2YWx1ZSBiZSA/IEdldChPLCBrZXkpLlxuICAgICAgICAvLyAzLiBMZXQgdHlwZWRWYWx1ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgVi5cbiAgICAgICAgY29uc3QgdHlwZWRWYWx1ZSA9IHZhbHVlQ29udmVydGVyKE9ba2V5XSlcblxuICAgICAgICAvLyA0LiBTZXQgcmVzdWx0W3R5cGVkS2V5XSB0byB0eXBlZFZhbHVlLlxuICAgICAgICByZXN1bHRbdHlwZWRLZXldID0gdHlwZWRWYWx1ZVxuICAgICAgfVxuXG4gICAgICAvLyA1LiBSZXR1cm4gcmVzdWx0LlxuICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH1cblxuICAgIC8vIDMuIExldCBrZXlzIGJlID8gTy5bW093blByb3BlcnR5S2V5c11dKCkuXG4gICAgY29uc3Qga2V5cyA9IFJlZmxlY3Qub3duS2V5cyhPKVxuXG4gICAgLy8gNC4gRm9yIGVhY2gga2V5IG9mIGtleXMuXG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgLy8gMS4gTGV0IGRlc2MgYmUgPyBPLltbR2V0T3duUHJvcGVydHldXShrZXkpLlxuICAgICAgY29uc3QgZGVzYyA9IFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIGtleSlcblxuICAgICAgLy8gMi4gSWYgZGVzYyBpcyBub3QgdW5kZWZpbmVkIGFuZCBkZXNjLltbRW51bWVyYWJsZV1dIGlzIHRydWU6XG4gICAgICBpZiAoZGVzYz8uZW51bWVyYWJsZSkge1xuICAgICAgICAvLyAxLiBMZXQgdHlwZWRLZXkgYmUga2V5IGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBLLlxuICAgICAgICBjb25zdCB0eXBlZEtleSA9IGtleUNvbnZlcnRlcihrZXkpXG5cbiAgICAgICAgLy8gMi4gTGV0IHZhbHVlIGJlID8gR2V0KE8sIGtleSkuXG4gICAgICAgIC8vIDMuIExldCB0eXBlZFZhbHVlIGJlIHZhbHVlIGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBWLlxuICAgICAgICBjb25zdCB0eXBlZFZhbHVlID0gdmFsdWVDb252ZXJ0ZXIoT1trZXldKVxuXG4gICAgICAgIC8vIDQuIFNldCByZXN1bHRbdHlwZWRLZXldIHRvIHR5cGVkVmFsdWUuXG4gICAgICAgIHJlc3VsdFt0eXBlZEtleV0gPSB0eXBlZFZhbHVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNS4gUmV0dXJuIHJlc3VsdC5cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cbn1cblxud2ViaWRsLmludGVyZmFjZUNvbnZlcnRlciA9IGZ1bmN0aW9uIChpKSB7XG4gIHJldHVybiAoViwgb3B0cyA9IHt9KSA9PiB7XG4gICAgaWYgKG9wdHMuc3RyaWN0ICE9PSBmYWxzZSAmJiAhKFYgaW5zdGFuY2VvZiBpKSkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6IGkubmFtZSxcbiAgICAgICAgbWVzc2FnZTogYEV4cGVjdGVkICR7Vn0gdG8gYmUgYW4gaW5zdGFuY2Ugb2YgJHtpLm5hbWV9LmBcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIFZcbiAgfVxufVxuXG53ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlciA9IGZ1bmN0aW9uIChjb252ZXJ0ZXJzKSB7XG4gIHJldHVybiAoZGljdGlvbmFyeSkgPT4ge1xuICAgIGNvbnN0IHR5cGUgPSB3ZWJpZGwudXRpbC5UeXBlKGRpY3Rpb25hcnkpXG4gICAgY29uc3QgZGljdCA9IHt9XG5cbiAgICBpZiAodHlwZSA9PT0gJ051bGwnIHx8IHR5cGUgPT09ICdVbmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gZGljdFxuICAgIH0gZWxzZSBpZiAodHlwZSAhPT0gJ09iamVjdCcpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnRGljdGlvbmFyeScsXG4gICAgICAgIG1lc3NhZ2U6IGBFeHBlY3RlZCAke2RpY3Rpb25hcnl9IHRvIGJlIG9uZSBvZjogTnVsbCwgVW5kZWZpbmVkLCBPYmplY3QuYFxuICAgICAgfSlcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IG9wdGlvbnMgb2YgY29udmVydGVycykge1xuICAgICAgY29uc3QgeyBrZXksIGRlZmF1bHRWYWx1ZSwgcmVxdWlyZWQsIGNvbnZlcnRlciB9ID0gb3B0aW9uc1xuXG4gICAgICBpZiAocmVxdWlyZWQgPT09IHRydWUpIHtcbiAgICAgICAgaWYgKCFoYXNPd24oZGljdGlvbmFyeSwga2V5KSkge1xuICAgICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICAgIGhlYWRlcjogJ0RpY3Rpb25hcnknLFxuICAgICAgICAgICAgbWVzc2FnZTogYE1pc3NpbmcgcmVxdWlyZWQga2V5IFwiJHtrZXl9XCIuYFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGV0IHZhbHVlID0gZGljdGlvbmFyeVtrZXldXG4gICAgICBjb25zdCBoYXNEZWZhdWx0ID0gaGFzT3duKG9wdGlvbnMsICdkZWZhdWx0VmFsdWUnKVxuXG4gICAgICAvLyBPbmx5IHVzZSBkZWZhdWx0VmFsdWUgaWYgdmFsdWUgaXMgdW5kZWZpbmVkIGFuZFxuICAgICAgLy8gYSBkZWZhdWx0VmFsdWUgb3B0aW9ucyB3YXMgcHJvdmlkZWQuXG4gICAgICBpZiAoaGFzRGVmYXVsdCAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlID8/IGRlZmF1bHRWYWx1ZVxuICAgICAgfVxuXG4gICAgICAvLyBBIGtleSBjYW4gYmUgb3B0aW9uYWwgYW5kIGhhdmUgbm8gZGVmYXVsdCB2YWx1ZS5cbiAgICAgIC8vIFdoZW4gdGhpcyBoYXBwZW5zLCBkbyBub3QgcGVyZm9ybSBhIGNvbnZlcnNpb24sXG4gICAgICAvLyBhbmQgZG8gbm90IGFzc2lnbiB0aGUga2V5IGEgdmFsdWUuXG4gICAgICBpZiAocmVxdWlyZWQgfHwgaGFzRGVmYXVsdCB8fCB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhbHVlID0gY29udmVydGVyKHZhbHVlKVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBvcHRpb25zLmFsbG93ZWRWYWx1ZXMgJiZcbiAgICAgICAgICAhb3B0aW9ucy5hbGxvd2VkVmFsdWVzLmluY2x1ZGVzKHZhbHVlKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICBoZWFkZXI6ICdEaWN0aW9uYXJ5JyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGAke3ZhbHVlfSBpcyBub3QgYW4gYWNjZXB0ZWQgdHlwZS4gRXhwZWN0ZWQgb25lIG9mICR7b3B0aW9ucy5hbGxvd2VkVmFsdWVzLmpvaW4oJywgJyl9LmBcbiAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgZGljdFtrZXldID0gdmFsdWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGljdFxuICB9XG59XG5cbndlYmlkbC5udWxsYWJsZUNvbnZlcnRlciA9IGZ1bmN0aW9uIChjb252ZXJ0ZXIpIHtcbiAgcmV0dXJuIChWKSA9PiB7XG4gICAgaWYgKFYgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBWXG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnZlcnRlcihWKVxuICB9XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtRE9NU3RyaW5nXG53ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcgPSBmdW5jdGlvbiAoViwgb3B0cyA9IHt9KSB7XG4gIC8vIDEuIElmIFYgaXMgbnVsbCBhbmQgdGhlIGNvbnZlcnNpb24gaXMgdG8gYW4gSURMIHR5cGVcbiAgLy8gICAgYXNzb2NpYXRlZCB3aXRoIHRoZSBbTGVnYWN5TnVsbFRvRW1wdHlTdHJpbmddXG4gIC8vICAgIGV4dGVuZGVkIGF0dHJpYnV0ZSwgdGhlbiByZXR1cm4gdGhlIERPTVN0cmluZyB2YWx1ZVxuICAvLyAgICB0aGF0IHJlcHJlc2VudHMgdGhlIGVtcHR5IHN0cmluZy5cbiAgaWYgKFYgPT09IG51bGwgJiYgb3B0cy5sZWdhY3lOdWxsVG9FbXB0eVN0cmluZykge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgLy8gMi4gTGV0IHggYmUgPyBUb1N0cmluZyhWKS5cbiAgaWYgKHR5cGVvZiBWID09PSAnc3ltYm9sJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0NvdWxkIG5vdCBjb252ZXJ0IGFyZ3VtZW50IG9mIHR5cGUgc3ltYm9sIHRvIHN0cmluZy4nKVxuICB9XG5cbiAgLy8gMy4gUmV0dXJuIHRoZSBJREwgRE9NU3RyaW5nIHZhbHVlIHRoYXQgcmVwcmVzZW50cyB0aGVcbiAgLy8gICAgc2FtZSBzZXF1ZW5jZSBvZiBjb2RlIHVuaXRzIGFzIHRoZSBvbmUgdGhlXG4gIC8vICAgIEVDTUFTY3JpcHQgU3RyaW5nIHZhbHVlIHggcmVwcmVzZW50cy5cbiAgcmV0dXJuIFN0cmluZyhWKVxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLUJ5dGVTdHJpbmdcbndlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcgPSBmdW5jdGlvbiAoVikge1xuICAvLyAxLiBMZXQgeCBiZSA/IFRvU3RyaW5nKFYpLlxuICAvLyBOb3RlOiBET01TdHJpbmcgY29udmVydGVyIHBlcmZvcm0gPyBUb1N0cmluZyhWKVxuICBjb25zdCB4ID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKFYpXG5cbiAgLy8gMi4gSWYgdGhlIHZhbHVlIG9mIGFueSBlbGVtZW50IG9mIHggaXMgZ3JlYXRlciB0aGFuXG4gIC8vICAgIDI1NSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHgubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgaWYgKHguY2hhckNvZGVBdChpbmRleCkgPiAyNTUpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICdDYW5ub3QgY29udmVydCBhcmd1bWVudCB0byBhIEJ5dGVTdHJpbmcgYmVjYXVzZSB0aGUgY2hhcmFjdGVyIGF0ICcgK1xuICAgICAgICBgaW5kZXggJHtpbmRleH0gaGFzIGEgdmFsdWUgb2YgJHt4LmNoYXJDb2RlQXQoaW5kZXgpfSB3aGljaCBpcyBncmVhdGVyIHRoYW4gMjU1LmBcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICAvLyAzLiBSZXR1cm4gYW4gSURMIEJ5dGVTdHJpbmcgdmFsdWUgd2hvc2UgbGVuZ3RoIGlzIHRoZVxuICAvLyAgICBsZW5ndGggb2YgeCwgYW5kIHdoZXJlIHRoZSB2YWx1ZSBvZiBlYWNoIGVsZW1lbnQgaXNcbiAgLy8gICAgdGhlIHZhbHVlIG9mIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnQgb2YgeC5cbiAgcmV0dXJuIHhcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy1VU1ZTdHJpbmdcbndlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyA9IHRvVVNWU3RyaW5nXG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtYm9vbGVhblxud2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbiA9IGZ1bmN0aW9uIChWKSB7XG4gIC8vIDEuIExldCB4IGJlIHRoZSByZXN1bHQgb2YgY29tcHV0aW5nIFRvQm9vbGVhbihWKS5cbiAgY29uc3QgeCA9IEJvb2xlYW4oVilcblxuICAvLyAyLiBSZXR1cm4gdGhlIElETCBib29sZWFuIHZhbHVlIHRoYXQgaXMgdGhlIG9uZSB0aGF0IHJlcHJlc2VudHNcbiAgLy8gICAgdGhlIHNhbWUgdHJ1dGggdmFsdWUgYXMgdGhlIEVDTUFTY3JpcHQgQm9vbGVhbiB2YWx1ZSB4LlxuICByZXR1cm4geFxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLWFueVxud2ViaWRsLmNvbnZlcnRlcnMuYW55ID0gZnVuY3Rpb24gKFYpIHtcbiAgcmV0dXJuIFZcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy1sb25nLWxvbmdcbndlYmlkbC5jb252ZXJ0ZXJzWydsb25nIGxvbmcnXSA9IGZ1bmN0aW9uIChWKSB7XG4gIC8vIDEuIExldCB4IGJlID8gQ29udmVydFRvSW50KFYsIDY0LCBcInNpZ25lZFwiKS5cbiAgY29uc3QgeCA9IHdlYmlkbC51dGlsLkNvbnZlcnRUb0ludChWLCA2NCwgJ3NpZ25lZCcpXG5cbiAgLy8gMi4gUmV0dXJuIHRoZSBJREwgbG9uZyBsb25nIHZhbHVlIHRoYXQgcmVwcmVzZW50c1xuICAvLyAgICB0aGUgc2FtZSBudW1lcmljIHZhbHVlIGFzIHguXG4gIHJldHVybiB4XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtdW5zaWduZWQtbG9uZy1sb25nXG53ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgbG9uZyBsb25nJ10gPSBmdW5jdGlvbiAoVikge1xuICAvLyAxLiBMZXQgeCBiZSA/IENvbnZlcnRUb0ludChWLCA2NCwgXCJ1bnNpZ25lZFwiKS5cbiAgY29uc3QgeCA9IHdlYmlkbC51dGlsLkNvbnZlcnRUb0ludChWLCA2NCwgJ3Vuc2lnbmVkJylcblxuICAvLyAyLiBSZXR1cm4gdGhlIElETCB1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWUgdGhhdFxuICAvLyAgICByZXByZXNlbnRzIHRoZSBzYW1lIG51bWVyaWMgdmFsdWUgYXMgeC5cbiAgcmV0dXJuIHhcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy11bnNpZ25lZC1sb25nXG53ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgbG9uZyddID0gZnVuY3Rpb24gKFYpIHtcbiAgLy8gMS4gTGV0IHggYmUgPyBDb252ZXJ0VG9JbnQoViwgMzIsIFwidW5zaWduZWRcIikuXG4gIGNvbnN0IHggPSB3ZWJpZGwudXRpbC5Db252ZXJ0VG9JbnQoViwgMzIsICd1bnNpZ25lZCcpXG5cbiAgLy8gMi4gUmV0dXJuIHRoZSBJREwgdW5zaWduZWQgbG9uZyB2YWx1ZSB0aGF0XG4gIC8vICAgIHJlcHJlc2VudHMgdGhlIHNhbWUgbnVtZXJpYyB2YWx1ZSBhcyB4LlxuICByZXR1cm4geFxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLXVuc2lnbmVkLXNob3J0XG53ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgc2hvcnQnXSA9IGZ1bmN0aW9uIChWLCBvcHRzKSB7XG4gIC8vIDEuIExldCB4IGJlID8gQ29udmVydFRvSW50KFYsIDE2LCBcInVuc2lnbmVkXCIpLlxuICBjb25zdCB4ID0gd2ViaWRsLnV0aWwuQ29udmVydFRvSW50KFYsIDE2LCAndW5zaWduZWQnLCBvcHRzKVxuXG4gIC8vIDIuIFJldHVybiB0aGUgSURMIHVuc2lnbmVkIHNob3J0IHZhbHVlIHRoYXQgcmVwcmVzZW50c1xuICAvLyAgICB0aGUgc2FtZSBudW1lcmljIHZhbHVlIGFzIHguXG4gIHJldHVybiB4XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jaWRsLUFycmF5QnVmZmVyXG53ZWJpZGwuY29udmVydGVycy5BcnJheUJ1ZmZlciA9IGZ1bmN0aW9uIChWLCBvcHRzID0ge30pIHtcbiAgLy8gMS4gSWYgVHlwZShWKSBpcyBub3QgT2JqZWN0LCBvciBWIGRvZXMgbm90IGhhdmUgYW5cbiAgLy8gICAgW1tBcnJheUJ1ZmZlckRhdGFdXSBpbnRlcm5hbCBzbG90LCB0aGVuIHRocm93IGFcbiAgLy8gICAgVHlwZUVycm9yLlxuICAvLyBzZWU6IGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvcGVydGllcy1vZi10aGUtYXJyYXlidWZmZXItaW5zdGFuY2VzXG4gIC8vIHNlZTogaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9wZXJ0aWVzLW9mLXRoZS1zaGFyZWRhcnJheWJ1ZmZlci1pbnN0YW5jZXNcbiAgaWYgKFxuICAgIHdlYmlkbC51dGlsLlR5cGUoVikgIT09ICdPYmplY3QnIHx8XG4gICAgIXR5cGVzLmlzQW55QXJyYXlCdWZmZXIoVilcbiAgKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5jb252ZXJzaW9uRmFpbGVkKHtcbiAgICAgIHByZWZpeDogYCR7Vn1gLFxuICAgICAgYXJndW1lbnQ6IGAke1Z9YCxcbiAgICAgIHR5cGVzOiBbJ0FycmF5QnVmZmVyJ11cbiAgICB9KVxuICB9XG5cbiAgLy8gMi4gSWYgdGhlIGNvbnZlcnNpb24gaXMgbm90IHRvIGFuIElETCB0eXBlIGFzc29jaWF0ZWRcbiAgLy8gICAgd2l0aCB0aGUgW0FsbG93U2hhcmVkXSBleHRlbmRlZCBhdHRyaWJ1dGUsIGFuZFxuICAvLyAgICBJc1NoYXJlZEFycmF5QnVmZmVyKFYpIGlzIHRydWUsIHRoZW4gdGhyb3cgYVxuICAvLyAgICBUeXBlRXJyb3IuXG4gIGlmIChvcHRzLmFsbG93U2hhcmVkID09PSBmYWxzZSAmJiB0eXBlcy5pc1NoYXJlZEFycmF5QnVmZmVyKFYpKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgaGVhZGVyOiAnQXJyYXlCdWZmZXInLFxuICAgICAgbWVzc2FnZTogJ1NoYXJlZEFycmF5QnVmZmVyIGlzIG5vdCBhbGxvd2VkLidcbiAgICB9KVxuICB9XG5cbiAgLy8gMy4gSWYgdGhlIGNvbnZlcnNpb24gaXMgbm90IHRvIGFuIElETCB0eXBlIGFzc29jaWF0ZWRcbiAgLy8gICAgd2l0aCB0aGUgW0FsbG93UmVzaXphYmxlXSBleHRlbmRlZCBhdHRyaWJ1dGUsIGFuZFxuICAvLyAgICBJc1Jlc2l6YWJsZUFycmF5QnVmZmVyKFYpIGlzIHRydWUsIHRoZW4gdGhyb3cgYVxuICAvLyAgICBUeXBlRXJyb3IuXG4gIC8vIE5vdGU6IHJlc2l6YWJsZSBBcnJheUJ1ZmZlcnMgYXJlIGN1cnJlbnRseSBhIHByb3Bvc2FsLlxuXG4gIC8vIDQuIFJldHVybiB0aGUgSURMIEFycmF5QnVmZmVyIHZhbHVlIHRoYXQgaXMgYVxuICAvLyAgICByZWZlcmVuY2UgdG8gdGhlIHNhbWUgb2JqZWN0IGFzIFYuXG4gIHJldHVybiBWXG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLlR5cGVkQXJyYXkgPSBmdW5jdGlvbiAoViwgVCwgb3B0cyA9IHt9KSB7XG4gIC8vIDEuIExldCBUIGJlIHRoZSBJREwgdHlwZSBWIGlzIGJlaW5nIGNvbnZlcnRlZCB0by5cblxuICAvLyAyLiBJZiBUeXBlKFYpIGlzIG5vdCBPYmplY3QsIG9yIFYgZG9lcyBub3QgaGF2ZSBhXG4gIC8vICAgIFtbVHlwZWRBcnJheU5hbWVdXSBpbnRlcm5hbCBzbG90IHdpdGggYSB2YWx1ZVxuICAvLyAgICBlcXVhbCB0byBU4oCZcyBuYW1lLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICBpZiAoXG4gICAgd2ViaWRsLnV0aWwuVHlwZShWKSAhPT0gJ09iamVjdCcgfHxcbiAgICAhdHlwZXMuaXNUeXBlZEFycmF5KFYpIHx8XG4gICAgVi5jb25zdHJ1Y3Rvci5uYW1lICE9PSBULm5hbWVcbiAgKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5jb252ZXJzaW9uRmFpbGVkKHtcbiAgICAgIHByZWZpeDogYCR7VC5uYW1lfWAsXG4gICAgICBhcmd1bWVudDogYCR7Vn1gLFxuICAgICAgdHlwZXM6IFtULm5hbWVdXG4gICAgfSlcbiAgfVxuXG4gIC8vIDMuIElmIHRoZSBjb252ZXJzaW9uIGlzIG5vdCB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtBbGxvd1NoYXJlZF0gZXh0ZW5kZWQgYXR0cmlidXRlLCBhbmRcbiAgLy8gICAgSXNTaGFyZWRBcnJheUJ1ZmZlcihWLltbVmlld2VkQXJyYXlCdWZmZXJdXSkgaXNcbiAgLy8gICAgdHJ1ZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKG9wdHMuYWxsb3dTaGFyZWQgPT09IGZhbHNlICYmIHR5cGVzLmlzU2hhcmVkQXJyYXlCdWZmZXIoVi5idWZmZXIpKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgaGVhZGVyOiAnQXJyYXlCdWZmZXInLFxuICAgICAgbWVzc2FnZTogJ1NoYXJlZEFycmF5QnVmZmVyIGlzIG5vdCBhbGxvd2VkLidcbiAgICB9KVxuICB9XG5cbiAgLy8gNC4gSWYgdGhlIGNvbnZlcnNpb24gaXMgbm90IHRvIGFuIElETCB0eXBlIGFzc29jaWF0ZWRcbiAgLy8gICAgd2l0aCB0aGUgW0FsbG93UmVzaXphYmxlXSBleHRlbmRlZCBhdHRyaWJ1dGUsIGFuZFxuICAvLyAgICBJc1Jlc2l6YWJsZUFycmF5QnVmZmVyKFYuW1tWaWV3ZWRBcnJheUJ1ZmZlcl1dKSBpc1xuICAvLyAgICB0cnVlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAvLyBOb3RlOiByZXNpemFibGUgYXJyYXkgYnVmZmVycyBhcmUgY3VycmVudGx5IGEgcHJvcG9zYWxcblxuICAvLyA1LiBSZXR1cm4gdGhlIElETCB2YWx1ZSBvZiB0eXBlIFQgdGhhdCBpcyBhIHJlZmVyZW5jZVxuICAvLyAgICB0byB0aGUgc2FtZSBvYmplY3QgYXMgVi5cbiAgcmV0dXJuIFZcbn1cblxud2ViaWRsLmNvbnZlcnRlcnMuRGF0YVZpZXcgPSBmdW5jdGlvbiAoViwgb3B0cyA9IHt9KSB7XG4gIC8vIDEuIElmIFR5cGUoVikgaXMgbm90IE9iamVjdCwgb3IgViBkb2VzIG5vdCBoYXZlIGFcbiAgLy8gICAgW1tEYXRhVmlld11dIGludGVybmFsIHNsb3QsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIGlmICh3ZWJpZGwudXRpbC5UeXBlKFYpICE9PSAnT2JqZWN0JyB8fCAhdHlwZXMuaXNEYXRhVmlldyhWKSkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgIGhlYWRlcjogJ0RhdGFWaWV3JyxcbiAgICAgIG1lc3NhZ2U6ICdPYmplY3QgaXMgbm90IGEgRGF0YVZpZXcuJ1xuICAgIH0pXG4gIH1cblxuICAvLyAyLiBJZiB0aGUgY29udmVyc2lvbiBpcyBub3QgdG8gYW4gSURMIHR5cGUgYXNzb2NpYXRlZFxuICAvLyAgICB3aXRoIHRoZSBbQWxsb3dTaGFyZWRdIGV4dGVuZGVkIGF0dHJpYnV0ZSwgYW5kXG4gIC8vICAgIElzU2hhcmVkQXJyYXlCdWZmZXIoVi5bW1ZpZXdlZEFycmF5QnVmZmVyXV0pIGlzIHRydWUsXG4gIC8vICAgIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIGlmIChvcHRzLmFsbG93U2hhcmVkID09PSBmYWxzZSAmJiB0eXBlcy5pc1NoYXJlZEFycmF5QnVmZmVyKFYuYnVmZmVyKSkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgIGhlYWRlcjogJ0FycmF5QnVmZmVyJyxcbiAgICAgIG1lc3NhZ2U6ICdTaGFyZWRBcnJheUJ1ZmZlciBpcyBub3QgYWxsb3dlZC4nXG4gICAgfSlcbiAgfVxuXG4gIC8vIDMuIElmIHRoZSBjb252ZXJzaW9uIGlzIG5vdCB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtBbGxvd1Jlc2l6YWJsZV0gZXh0ZW5kZWQgYXR0cmlidXRlLCBhbmRcbiAgLy8gICAgSXNSZXNpemFibGVBcnJheUJ1ZmZlcihWLltbVmlld2VkQXJyYXlCdWZmZXJdXSkgaXNcbiAgLy8gICAgdHJ1ZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgLy8gTm90ZTogcmVzaXphYmxlIEFycmF5QnVmZmVycyBhcmUgY3VycmVudGx5IGEgcHJvcG9zYWxcblxuICAvLyA0LiBSZXR1cm4gdGhlIElETCBEYXRhVmlldyB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlXG4gIC8vICAgIHRvIHRoZSBzYW1lIG9iamVjdCBhcyBWLlxuICByZXR1cm4gVlxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI0J1ZmZlclNvdXJjZVxud2ViaWRsLmNvbnZlcnRlcnMuQnVmZmVyU291cmNlID0gZnVuY3Rpb24gKFYsIG9wdHMgPSB7fSkge1xuICBpZiAodHlwZXMuaXNBbnlBcnJheUJ1ZmZlcihWKSkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5BcnJheUJ1ZmZlcihWLCBvcHRzKVxuICB9XG5cbiAgaWYgKHR5cGVzLmlzVHlwZWRBcnJheShWKSkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5UeXBlZEFycmF5KFYsIFYuY29uc3RydWN0b3IpXG4gIH1cblxuICBpZiAodHlwZXMuaXNEYXRhVmlldyhWKSkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5EYXRhVmlldyhWLCBvcHRzKVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihgQ291bGQgbm90IGNvbnZlcnQgJHtWfSB0byBhIEJ1ZmZlclNvdXJjZS5gKVxufVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8Qnl0ZVN0cmluZz4nXSA9IHdlYmlkbC5zZXF1ZW5jZUNvbnZlcnRlcihcbiAgd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZ1xuKVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8c2VxdWVuY2U8Qnl0ZVN0cmluZz4+J10gPSB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxCeXRlU3RyaW5nPiddXG4pXG5cbndlYmlkbC5jb252ZXJ0ZXJzWydyZWNvcmQ8Qnl0ZVN0cmluZywgQnl0ZVN0cmluZz4nXSA9IHdlYmlkbC5yZWNvcmRDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcsXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmdcbilcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHdlYmlkbFxufVxuIiwKICAgICJjb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBhdG9iIH0gPSByZXF1aXJlKCdidWZmZXInKVxuY29uc3QgeyBpc29tb3JwaGljRGVjb2RlIH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuXG5jb25zdCBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKClcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jaHR0cC10b2tlbi1jb2RlLXBvaW50XG4gKi9cbmNvbnN0IEhUVFBfVE9LRU5fQ09ERVBPSU5UUyA9IC9eWyEjJCUmJyorLS5eX3x+QS1aYS16MC05XSskL1xuY29uc3QgSFRUUF9XSElURVNQQUNFX1JFR0VYID0gLyhcXHUwMDBBfFxcdTAwMER8XFx1MDAwOXxcXHUwMDIwKS8gLy8gZXNsaW50LWRpc2FibGUtbGluZVxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jaHR0cC1xdW90ZWQtc3RyaW5nLXRva2VuLWNvZGUtcG9pbnRcbiAqL1xuY29uc3QgSFRUUF9RVU9URURfU1RSSU5HX1RPS0VOUyA9IC9bXFx1MDAwOXxcXHUwMDIwLVxcdTAwN0V8XFx1MDA4MC1cXHUwMEZGXS8gLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZGF0YS11cmwtcHJvY2Vzc29yXG4vKiogQHBhcmFtIHtVUkx9IGRhdGFVUkwgKi9cbmZ1bmN0aW9uIGRhdGFVUkxQcm9jZXNzb3IgKGRhdGFVUkwpIHtcbiAgLy8gMS4gQXNzZXJ0OiBkYXRhVVJM4oCZcyBzY2hlbWUgaXMgXCJkYXRhXCIuXG4gIGFzc2VydChkYXRhVVJMLnByb3RvY29sID09PSAnZGF0YTonKVxuXG4gIC8vIDIuIExldCBpbnB1dCBiZSB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgdGhlIFVSTFxuICAvLyBzZXJpYWxpemVyIG9uIGRhdGFVUkwgd2l0aCBleGNsdWRlIGZyYWdtZW50XG4gIC8vIHNldCB0byB0cnVlLlxuICBsZXQgaW5wdXQgPSBVUkxTZXJpYWxpemVyKGRhdGFVUkwsIHRydWUpXG5cbiAgLy8gMy4gUmVtb3ZlIHRoZSBsZWFkaW5nIFwiZGF0YTpcIiBzdHJpbmcgZnJvbSBpbnB1dC5cbiAgaW5wdXQgPSBpbnB1dC5zbGljZSg1KVxuXG4gIC8vIDQuIExldCBwb3NpdGlvbiBwb2ludCBhdCB0aGUgc3RhcnQgb2YgaW5wdXQuXG4gIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogMCB9XG5cbiAgLy8gNS4gTGV0IG1pbWVUeXBlIGJlIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhXG4gIC8vIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzIHRoYXQgYXJlIG5vdCBlcXVhbFxuICAvLyB0byBVKzAwMkMgKCwpLCBnaXZlbiBwb3NpdGlvbi5cbiAgbGV0IG1pbWVUeXBlID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoXG4gICAgJywnLFxuICAgIGlucHV0LFxuICAgIHBvc2l0aW9uXG4gIClcblxuICAvLyA2LiBTdHJpcCBsZWFkaW5nIGFuZCB0cmFpbGluZyBBU0NJSSB3aGl0ZXNwYWNlXG4gIC8vIGZyb20gbWltZVR5cGUuXG4gIC8vIFVuZGljaSBpbXBsZW1lbnRhdGlvbiBub3RlOiB3ZSBuZWVkIHRvIHN0b3JlIHRoZVxuICAvLyBsZW5ndGggYmVjYXVzZSBpZiB0aGUgbWltZXR5cGUgaGFzIHNwYWNlcyByZW1vdmVkLFxuICAvLyB0aGUgd3JvbmcgYW1vdW50IHdpbGwgYmUgc2xpY2VkIGZyb20gdGhlIGlucHV0IGluXG4gIC8vIHN0ZXAgIzlcbiAgY29uc3QgbWltZVR5cGVMZW5ndGggPSBtaW1lVHlwZS5sZW5ndGhcbiAgbWltZVR5cGUgPSByZW1vdmVBU0NJSVdoaXRlc3BhY2UobWltZVR5cGUsIHRydWUsIHRydWUpXG5cbiAgLy8gNy4gSWYgcG9zaXRpb24gaXMgcGFzdCB0aGUgZW5kIG9mIGlucHV0LCB0aGVuXG4gIC8vIHJldHVybiBmYWlsdXJlXG4gIGlmIChwb3NpdGlvbi5wb3NpdGlvbiA+PSBpbnB1dC5sZW5ndGgpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICAvLyA4LiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuXG4gIHBvc2l0aW9uLnBvc2l0aW9uKytcblxuICAvLyA5LiBMZXQgZW5jb2RlZEJvZHkgYmUgdGhlIHJlbWFpbmRlciBvZiBpbnB1dC5cbiAgY29uc3QgZW5jb2RlZEJvZHkgPSBpbnB1dC5zbGljZShtaW1lVHlwZUxlbmd0aCArIDEpXG5cbiAgLy8gMTAuIExldCBib2R5IGJlIHRoZSBwZXJjZW50LWRlY29kaW5nIG9mIGVuY29kZWRCb2R5LlxuICBsZXQgYm9keSA9IHN0cmluZ1BlcmNlbnREZWNvZGUoZW5jb2RlZEJvZHkpXG5cbiAgLy8gMTEuIElmIG1pbWVUeXBlIGVuZHMgd2l0aCBVKzAwM0IgKDspLCBmb2xsb3dlZCBieVxuICAvLyB6ZXJvIG9yIG1vcmUgVSswMDIwIFNQQUNFLCBmb2xsb3dlZCBieSBhbiBBU0NJSVxuICAvLyBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvciBcImJhc2U2NFwiLCB0aGVuOlxuICBpZiAoLzsoXFx1MDAyMCl7MCx9YmFzZTY0JC9pLnRlc3QobWltZVR5cGUpKSB7XG4gICAgLy8gMS4gTGV0IHN0cmluZ0JvZHkgYmUgdGhlIGlzb21vcnBoaWMgZGVjb2RlIG9mIGJvZHkuXG4gICAgY29uc3Qgc3RyaW5nQm9keSA9IGlzb21vcnBoaWNEZWNvZGUoYm9keSlcblxuICAgIC8vIDIuIFNldCBib2R5IHRvIHRoZSBmb3JnaXZpbmctYmFzZTY0IGRlY29kZSBvZlxuICAgIC8vIHN0cmluZ0JvZHkuXG4gICAgYm9keSA9IGZvcmdpdmluZ0Jhc2U2NChzdHJpbmdCb2R5KVxuXG4gICAgLy8gMy4gSWYgYm9keSBpcyBmYWlsdXJlLCB0aGVuIHJldHVybiBmYWlsdXJlLlxuICAgIGlmIChib2R5ID09PSAnZmFpbHVyZScpIHtcbiAgICAgIHJldHVybiAnZmFpbHVyZSdcbiAgICB9XG5cbiAgICAvLyA0LiBSZW1vdmUgdGhlIGxhc3QgNiBjb2RlIHBvaW50cyBmcm9tIG1pbWVUeXBlLlxuICAgIG1pbWVUeXBlID0gbWltZVR5cGUuc2xpY2UoMCwgLTYpXG5cbiAgICAvLyA1LiBSZW1vdmUgdHJhaWxpbmcgVSswMDIwIFNQQUNFIGNvZGUgcG9pbnRzIGZyb20gbWltZVR5cGUsXG4gICAgLy8gaWYgYW55LlxuICAgIG1pbWVUeXBlID0gbWltZVR5cGUucmVwbGFjZSgvKFxcdTAwMjApKyQvLCAnJylcblxuICAgIC8vIDYuIFJlbW92ZSB0aGUgbGFzdCBVKzAwM0IgKDspIGNvZGUgcG9pbnQgZnJvbSBtaW1lVHlwZS5cbiAgICBtaW1lVHlwZSA9IG1pbWVUeXBlLnNsaWNlKDAsIC0xKVxuICB9XG5cbiAgLy8gMTIuIElmIG1pbWVUeXBlIHN0YXJ0cyB3aXRoIFUrMDAzQiAoOyksIHRoZW4gcHJlcGVuZFxuICAvLyBcInRleHQvcGxhaW5cIiB0byBtaW1lVHlwZS5cbiAgaWYgKG1pbWVUeXBlLnN0YXJ0c1dpdGgoJzsnKSkge1xuICAgIG1pbWVUeXBlID0gJ3RleHQvcGxhaW4nICsgbWltZVR5cGVcbiAgfVxuXG4gIC8vIDEzLiBMZXQgbWltZVR5cGVSZWNvcmQgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nXG4gIC8vIG1pbWVUeXBlLlxuICBsZXQgbWltZVR5cGVSZWNvcmQgPSBwYXJzZU1JTUVUeXBlKG1pbWVUeXBlKVxuXG4gIC8vIDE0LiBJZiBtaW1lVHlwZVJlY29yZCBpcyBmYWlsdXJlLCB0aGVuIHNldFxuICAvLyBtaW1lVHlwZVJlY29yZCB0byB0ZXh0L3BsYWluO2NoYXJzZXQ9VVMtQVNDSUkuXG4gIGlmIChtaW1lVHlwZVJlY29yZCA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgbWltZVR5cGVSZWNvcmQgPSBwYXJzZU1JTUVUeXBlKCd0ZXh0L3BsYWluO2NoYXJzZXQ9VVMtQVNDSUknKVxuICB9XG5cbiAgLy8gMTUuIFJldHVybiBhIG5ldyBkYXRhOiBVUkwgc3RydWN0IHdob3NlIE1JTUVcbiAgLy8gdHlwZSBpcyBtaW1lVHlwZVJlY29yZCBhbmQgYm9keSBpcyBib2R5LlxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZGF0YS11cmwtc3RydWN0XG4gIHJldHVybiB7IG1pbWVUeXBlOiBtaW1lVHlwZVJlY29yZCwgYm9keSB9XG59XG5cbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC11cmwtc2VyaWFsaXplclxuLyoqXG4gKiBAcGFyYW0ge1VSTH0gdXJsXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGV4Y2x1ZGVGcmFnbWVudFxuICovXG5mdW5jdGlvbiBVUkxTZXJpYWxpemVyICh1cmwsIGV4Y2x1ZGVGcmFnbWVudCA9IGZhbHNlKSB7XG4gIGlmICghZXhjbHVkZUZyYWdtZW50KSB7XG4gICAgcmV0dXJuIHVybC5ocmVmXG4gIH1cblxuICBjb25zdCBocmVmID0gdXJsLmhyZWZcbiAgY29uc3QgaGFzaExlbmd0aCA9IHVybC5oYXNoLmxlbmd0aFxuXG4gIHJldHVybiBoYXNoTGVuZ3RoID09PSAwID8gaHJlZiA6IGhyZWYuc3Vic3RyaW5nKDAsIGhyZWYubGVuZ3RoIC0gaGFzaExlbmd0aClcbn1cblxuLy8gaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2NvbGxlY3QtYS1zZXF1ZW5jZS1vZi1jb2RlLXBvaW50c1xuLyoqXG4gKiBAcGFyYW0geyhjaGFyOiBzdHJpbmcpID0+IGJvb2xlYW59IGNvbmRpdGlvblxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0XG4gKiBAcGFyYW0ge3sgcG9zaXRpb246IG51bWJlciB9fSBwb3NpdGlvblxuICovXG5mdW5jdGlvbiBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzIChjb25kaXRpb24sIGlucHV0LCBwb3NpdGlvbikge1xuICAvLyAxLiBMZXQgcmVzdWx0IGJlIHRoZSBlbXB0eSBzdHJpbmcuXG4gIGxldCByZXN1bHQgPSAnJ1xuXG4gIC8vIDIuIFdoaWxlIHBvc2l0aW9uIGRvZXNu4oCZdCBwb2ludCBwYXN0IHRoZSBlbmQgb2YgaW5wdXQgYW5kIHRoZVxuICAvLyBjb2RlIHBvaW50IGF0IHBvc2l0aW9uIHdpdGhpbiBpbnB1dCBtZWV0cyB0aGUgY29uZGl0aW9uIGNvbmRpdGlvbjpcbiAgd2hpbGUgKHBvc2l0aW9uLnBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoICYmIGNvbmRpdGlvbihpbnB1dFtwb3NpdGlvbi5wb3NpdGlvbl0pKSB7XG4gICAgLy8gMS4gQXBwZW5kIHRoYXQgY29kZSBwb2ludCB0byB0aGUgZW5kIG9mIHJlc3VsdC5cbiAgICByZXN1bHQgKz0gaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dXG5cbiAgICAvLyAyLiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuXG4gICAgcG9zaXRpb24ucG9zaXRpb24rK1xuICB9XG5cbiAgLy8gMy4gUmV0dXJuIHJlc3VsdC5cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG4vKipcbiAqIEEgZmFzdGVyIGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMgdGhhdCBvbmx5IHdvcmtzIHdoZW4gY29tcGFyaW5nIGEgc2luZ2xlIGNoYXJhY3Rlci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjaGFyXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRcbiAqIEBwYXJhbSB7eyBwb3NpdGlvbjogbnVtYmVyIH19IHBvc2l0aW9uXG4gKi9cbmZ1bmN0aW9uIGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0IChjaGFyLCBpbnB1dCwgcG9zaXRpb24pIHtcbiAgY29uc3QgaWR4ID0gaW5wdXQuaW5kZXhPZihjaGFyLCBwb3NpdGlvbi5wb3NpdGlvbilcbiAgY29uc3Qgc3RhcnQgPSBwb3NpdGlvbi5wb3NpdGlvblxuXG4gIGlmIChpZHggPT09IC0xKSB7XG4gICAgcG9zaXRpb24ucG9zaXRpb24gPSBpbnB1dC5sZW5ndGhcbiAgICByZXR1cm4gaW5wdXQuc2xpY2Uoc3RhcnQpXG4gIH1cblxuICBwb3NpdGlvbi5wb3NpdGlvbiA9IGlkeFxuICByZXR1cm4gaW5wdXQuc2xpY2Uoc3RhcnQsIHBvc2l0aW9uLnBvc2l0aW9uKVxufVxuXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3N0cmluZy1wZXJjZW50LWRlY29kZVxuLyoqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dCAqL1xuZnVuY3Rpb24gc3RyaW5nUGVyY2VudERlY29kZSAoaW5wdXQpIHtcbiAgLy8gMS4gTGV0IGJ5dGVzIGJlIHRoZSBVVEYtOCBlbmNvZGluZyBvZiBpbnB1dC5cbiAgY29uc3QgYnl0ZXMgPSBlbmNvZGVyLmVuY29kZShpbnB1dClcblxuICAvLyAyLiBSZXR1cm4gdGhlIHBlcmNlbnQtZGVjb2Rpbmcgb2YgYnl0ZXMuXG4gIHJldHVybiBwZXJjZW50RGVjb2RlKGJ5dGVzKVxufVxuXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3BlcmNlbnQtZGVjb2RlXG4vKiogQHBhcmFtIHtVaW50OEFycmF5fSBpbnB1dCAqL1xuZnVuY3Rpb24gcGVyY2VudERlY29kZSAoaW5wdXQpIHtcbiAgLy8gMS4gTGV0IG91dHB1dCBiZSBhbiBlbXB0eSBieXRlIHNlcXVlbmNlLlxuICAvKiogQHR5cGUge251bWJlcltdfSAqL1xuICBjb25zdCBvdXRwdXQgPSBbXVxuXG4gIC8vIDIuIEZvciBlYWNoIGJ5dGUgYnl0ZSBpbiBpbnB1dDpcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGJ5dGUgPSBpbnB1dFtpXVxuXG4gICAgLy8gMS4gSWYgYnl0ZSBpcyBub3QgMHgyNSAoJSksIHRoZW4gYXBwZW5kIGJ5dGUgdG8gb3V0cHV0LlxuICAgIGlmIChieXRlICE9PSAweDI1KSB7XG4gICAgICBvdXRwdXQucHVzaChieXRlKVxuXG4gICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiBieXRlIGlzIDB4MjUgKCUpIGFuZCB0aGUgbmV4dCB0d28gYnl0ZXNcbiAgICAvLyBhZnRlciBieXRlIGluIGlucHV0IGFyZSBub3QgaW4gdGhlIHJhbmdlc1xuICAgIC8vIDB4MzAgKDApIHRvIDB4MzkgKDkpLCAweDQxIChBKSB0byAweDQ2IChGKSxcbiAgICAvLyBhbmQgMHg2MSAoYSkgdG8gMHg2NiAoZiksIGFsbCBpbmNsdXNpdmUsIGFwcGVuZCBieXRlXG4gICAgLy8gdG8gb3V0cHV0LlxuICAgIH0gZWxzZSBpZiAoXG4gICAgICBieXRlID09PSAweDI1ICYmXG4gICAgICAhL15bMC05QS1GYS1mXXsyfSQvaS50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoaW5wdXRbaSArIDFdLCBpbnB1dFtpICsgMl0pKVxuICAgICkge1xuICAgICAgb3V0cHV0LnB1c2goMHgyNSlcblxuICAgIC8vIDMuIE90aGVyd2lzZTpcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gMS4gTGV0IGJ5dGVQb2ludCBiZSB0aGUgdHdvIGJ5dGVzIGFmdGVyIGJ5dGUgaW4gaW5wdXQsXG4gICAgICAvLyBkZWNvZGVkLCBhbmQgdGhlbiBpbnRlcnByZXRlZCBhcyBoZXhhZGVjaW1hbCBudW1iZXIuXG4gICAgICBjb25zdCBuZXh0VHdvQnl0ZXMgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGlucHV0W2kgKyAxXSwgaW5wdXRbaSArIDJdKVxuICAgICAgY29uc3QgYnl0ZVBvaW50ID0gTnVtYmVyLnBhcnNlSW50KG5leHRUd29CeXRlcywgMTYpXG5cbiAgICAgIC8vIDIuIEFwcGVuZCBhIGJ5dGUgd2hvc2UgdmFsdWUgaXMgYnl0ZVBvaW50IHRvIG91dHB1dC5cbiAgICAgIG91dHB1dC5wdXNoKGJ5dGVQb2ludClcblxuICAgICAgLy8gMy4gU2tpcCB0aGUgbmV4dCB0d28gYnl0ZXMgaW4gaW5wdXQuXG4gICAgICBpICs9IDJcbiAgICB9XG4gIH1cblxuICAvLyAzLiBSZXR1cm4gb3V0cHV0LlxuICByZXR1cm4gVWludDhBcnJheS5mcm9tKG91dHB1dClcbn1cblxuLy8gaHR0cHM6Ly9taW1lc25pZmYuc3BlYy53aGF0d2cub3JnLyNwYXJzZS1hLW1pbWUtdHlwZVxuLyoqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dCAqL1xuZnVuY3Rpb24gcGFyc2VNSU1FVHlwZSAoaW5wdXQpIHtcbiAgLy8gMS4gUmVtb3ZlIGFueSBsZWFkaW5nIGFuZCB0cmFpbGluZyBIVFRQIHdoaXRlc3BhY2VcbiAgLy8gZnJvbSBpbnB1dC5cbiAgaW5wdXQgPSByZW1vdmVIVFRQV2hpdGVzcGFjZShpbnB1dCwgdHJ1ZSwgdHJ1ZSlcblxuICAvLyAyLiBMZXQgcG9zaXRpb24gYmUgYSBwb3NpdGlvbiB2YXJpYWJsZSBmb3IgaW5wdXQsXG4gIC8vIGluaXRpYWxseSBwb2ludGluZyBhdCB0aGUgc3RhcnQgb2YgaW5wdXQuXG4gIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogMCB9XG5cbiAgLy8gMy4gTGV0IHR5cGUgYmUgdGhlIHJlc3VsdCBvZiBjb2xsZWN0aW5nIGEgc2VxdWVuY2VcbiAgLy8gb2YgY29kZSBwb2ludHMgdGhhdCBhcmUgbm90IFUrMDAyRiAoLykgZnJvbVxuICAvLyBpbnB1dCwgZ2l2ZW4gcG9zaXRpb24uXG4gIGNvbnN0IHR5cGUgPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdChcbiAgICAnLycsXG4gICAgaW5wdXQsXG4gICAgcG9zaXRpb25cbiAgKVxuXG4gIC8vIDQuIElmIHR5cGUgaXMgdGhlIGVtcHR5IHN0cmluZyBvciBkb2VzIG5vdCBzb2xlbHlcbiAgLy8gY29udGFpbiBIVFRQIHRva2VuIGNvZGUgcG9pbnRzLCB0aGVuIHJldHVybiBmYWlsdXJlLlxuICAvLyBodHRwczovL21pbWVzbmlmZi5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtdG9rZW4tY29kZS1wb2ludFxuICBpZiAodHlwZS5sZW5ndGggPT09IDAgfHwgIUhUVFBfVE9LRU5fQ09ERVBPSU5UUy50ZXN0KHR5cGUpKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgLy8gNS4gSWYgcG9zaXRpb24gaXMgcGFzdCB0aGUgZW5kIG9mIGlucHV0LCB0aGVuIHJldHVyblxuICAvLyBmYWlsdXJlXG4gIGlmIChwb3NpdGlvbi5wb3NpdGlvbiA+IGlucHV0Lmxlbmd0aCkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIC8vIDYuIEFkdmFuY2UgcG9zaXRpb24gYnkgMS4gKFRoaXMgc2tpcHMgcGFzdCBVKzAwMkYgKC8pLilcbiAgcG9zaXRpb24ucG9zaXRpb24rK1xuXG4gIC8vIDcuIExldCBzdWJ0eXBlIGJlIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhIHNlcXVlbmNlIG9mXG4gIC8vIGNvZGUgcG9pbnRzIHRoYXQgYXJlIG5vdCBVKzAwM0IgKDspIGZyb20gaW5wdXQsIGdpdmVuXG4gIC8vIHBvc2l0aW9uLlxuICBsZXQgc3VidHlwZSA9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0KFxuICAgICc7JyxcbiAgICBpbnB1dCxcbiAgICBwb3NpdGlvblxuICApXG5cbiAgLy8gOC4gUmVtb3ZlIGFueSB0cmFpbGluZyBIVFRQIHdoaXRlc3BhY2UgZnJvbSBzdWJ0eXBlLlxuICBzdWJ0eXBlID0gcmVtb3ZlSFRUUFdoaXRlc3BhY2Uoc3VidHlwZSwgZmFsc2UsIHRydWUpXG5cbiAgLy8gOS4gSWYgc3VidHlwZSBpcyB0aGUgZW1wdHkgc3RyaW5nIG9yIGRvZXMgbm90IHNvbGVseVxuICAvLyBjb250YWluIEhUVFAgdG9rZW4gY29kZSBwb2ludHMsIHRoZW4gcmV0dXJuIGZhaWx1cmUuXG4gIGlmIChzdWJ0eXBlLmxlbmd0aCA9PT0gMCB8fCAhSFRUUF9UT0tFTl9DT0RFUE9JTlRTLnRlc3Qoc3VidHlwZSkpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICBjb25zdCB0eXBlTG93ZXJjYXNlID0gdHlwZS50b0xvd2VyQ2FzZSgpXG4gIGNvbnN0IHN1YnR5cGVMb3dlcmNhc2UgPSBzdWJ0eXBlLnRvTG93ZXJDYXNlKClcblxuICAvLyAxMC4gTGV0IG1pbWVUeXBlIGJlIGEgbmV3IE1JTUUgdHlwZSByZWNvcmQgd2hvc2UgdHlwZVxuICAvLyBpcyB0eXBlLCBpbiBBU0NJSSBsb3dlcmNhc2UsIGFuZCBzdWJ0eXBlIGlzIHN1YnR5cGUsXG4gIC8vIGluIEFTQ0lJIGxvd2VyY2FzZS5cbiAgLy8gaHR0cHM6Ly9taW1lc25pZmYuc3BlYy53aGF0d2cub3JnLyNtaW1lLXR5cGVcbiAgY29uc3QgbWltZVR5cGUgPSB7XG4gICAgdHlwZTogdHlwZUxvd2VyY2FzZSxcbiAgICBzdWJ0eXBlOiBzdWJ0eXBlTG93ZXJjYXNlLFxuICAgIC8qKiBAdHlwZSB7TWFwPHN0cmluZywgc3RyaW5nPn0gKi9cbiAgICBwYXJhbWV0ZXJzOiBuZXcgTWFwKCksXG4gICAgLy8gaHR0cHM6Ly9taW1lc25pZmYuc3BlYy53aGF0d2cub3JnLyNtaW1lLXR5cGUtZXNzZW5jZVxuICAgIGVzc2VuY2U6IGAke3R5cGVMb3dlcmNhc2V9LyR7c3VidHlwZUxvd2VyY2FzZX1gXG4gIH1cblxuICAvLyAxMS4gV2hpbGUgcG9zaXRpb24gaXMgbm90IHBhc3QgdGhlIGVuZCBvZiBpbnB1dDpcbiAgd2hpbGUgKHBvc2l0aW9uLnBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgLy8gMS4gQWR2YW5jZSBwb3NpdGlvbiBieSAxLiAoVGhpcyBza2lwcyBwYXN0IFUrMDAzQiAoOykuKVxuICAgIHBvc2l0aW9uLnBvc2l0aW9uKytcblxuICAgIC8vIDIuIENvbGxlY3QgYSBzZXF1ZW5jZSBvZiBjb2RlIHBvaW50cyB0aGF0IGFyZSBIVFRQXG4gICAgLy8gd2hpdGVzcGFjZSBmcm9tIGlucHV0IGdpdmVuIHBvc2l0aW9uLlxuICAgIGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMoXG4gICAgICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC13aGl0ZXNwYWNlXG4gICAgICBjaGFyID0+IEhUVFBfV0hJVEVTUEFDRV9SRUdFWC50ZXN0KGNoYXIpLFxuICAgICAgaW5wdXQsXG4gICAgICBwb3NpdGlvblxuICAgIClcblxuICAgIC8vIDMuIExldCBwYXJhbWV0ZXJOYW1lIGJlIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhXG4gICAgLy8gc2VxdWVuY2Ugb2YgY29kZSBwb2ludHMgdGhhdCBhcmUgbm90IFUrMDAzQiAoOylcbiAgICAvLyBvciBVKzAwM0QgKD0pIGZyb20gaW5wdXQsIGdpdmVuIHBvc2l0aW9uLlxuICAgIGxldCBwYXJhbWV0ZXJOYW1lID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50cyhcbiAgICAgIChjaGFyKSA9PiBjaGFyICE9PSAnOycgJiYgY2hhciAhPT0gJz0nLFxuICAgICAgaW5wdXQsXG4gICAgICBwb3NpdGlvblxuICAgIClcblxuICAgIC8vIDQuIFNldCBwYXJhbWV0ZXJOYW1lIHRvIHBhcmFtZXRlck5hbWUsIGluIEFTQ0lJXG4gICAgLy8gbG93ZXJjYXNlLlxuICAgIHBhcmFtZXRlck5hbWUgPSBwYXJhbWV0ZXJOYW1lLnRvTG93ZXJDYXNlKClcblxuICAgIC8vIDUuIElmIHBvc2l0aW9uIGlzIG5vdCBwYXN0IHRoZSBlbmQgb2YgaW5wdXQsIHRoZW46XG4gICAgaWYgKHBvc2l0aW9uLnBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAvLyAxLiBJZiB0aGUgY29kZSBwb2ludCBhdCBwb3NpdGlvbiB3aXRoaW4gaW5wdXQgaXNcbiAgICAgIC8vIFUrMDAzQiAoOyksIHRoZW4gY29udGludWUuXG4gICAgICBpZiAoaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dID09PSAnOycpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gMi4gQWR2YW5jZSBwb3NpdGlvbiBieSAxLiAoVGhpcyBza2lwcyBwYXN0IFUrMDAzRCAoPSkuKVxuICAgICAgcG9zaXRpb24ucG9zaXRpb24rK1xuICAgIH1cblxuICAgIC8vIDYuIElmIHBvc2l0aW9uIGlzIHBhc3QgdGhlIGVuZCBvZiBpbnB1dCwgdGhlbiBicmVhay5cbiAgICBpZiAocG9zaXRpb24ucG9zaXRpb24gPiBpbnB1dC5sZW5ndGgpIHtcbiAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgLy8gNy4gTGV0IHBhcmFtZXRlclZhbHVlIGJlIG51bGwuXG4gICAgbGV0IHBhcmFtZXRlclZhbHVlID0gbnVsbFxuXG4gICAgLy8gOC4gSWYgdGhlIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluIGlucHV0IGlzXG4gICAgLy8gVSswMDIyIChcIiksIHRoZW46XG4gICAgaWYgKGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXSA9PT0gJ1wiJykge1xuICAgICAgLy8gMS4gU2V0IHBhcmFtZXRlclZhbHVlIHRvIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZ1xuICAgICAgLy8gYW4gSFRUUCBxdW90ZWQgc3RyaW5nIGZyb20gaW5wdXQsIGdpdmVuIHBvc2l0aW9uXG4gICAgICAvLyBhbmQgdGhlIGV4dHJhY3QtdmFsdWUgZmxhZy5cbiAgICAgIHBhcmFtZXRlclZhbHVlID0gY29sbGVjdEFuSFRUUFF1b3RlZFN0cmluZyhpbnB1dCwgcG9zaXRpb24sIHRydWUpXG5cbiAgICAgIC8vIDIuIENvbGxlY3QgYSBzZXF1ZW5jZSBvZiBjb2RlIHBvaW50cyB0aGF0IGFyZSBub3RcbiAgICAgIC8vIFUrMDAzQiAoOykgZnJvbSBpbnB1dCwgZ2l2ZW4gcG9zaXRpb24uXG4gICAgICBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdChcbiAgICAgICAgJzsnLFxuICAgICAgICBpbnB1dCxcbiAgICAgICAgcG9zaXRpb25cbiAgICAgIClcblxuICAgIC8vIDkuIE90aGVyd2lzZTpcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gMS4gU2V0IHBhcmFtZXRlclZhbHVlIHRvIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZ1xuICAgICAgLy8gYSBzZXF1ZW5jZSBvZiBjb2RlIHBvaW50cyB0aGF0IGFyZSBub3QgVSswMDNCICg7KVxuICAgICAgLy8gZnJvbSBpbnB1dCwgZ2l2ZW4gcG9zaXRpb24uXG4gICAgICBwYXJhbWV0ZXJWYWx1ZSA9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0KFxuICAgICAgICAnOycsXG4gICAgICAgIGlucHV0LFxuICAgICAgICBwb3NpdGlvblxuICAgICAgKVxuXG4gICAgICAvLyAyLiBSZW1vdmUgYW55IHRyYWlsaW5nIEhUVFAgd2hpdGVzcGFjZSBmcm9tIHBhcmFtZXRlclZhbHVlLlxuICAgICAgcGFyYW1ldGVyVmFsdWUgPSByZW1vdmVIVFRQV2hpdGVzcGFjZShwYXJhbWV0ZXJWYWx1ZSwgZmFsc2UsIHRydWUpXG5cbiAgICAgIC8vIDMuIElmIHBhcmFtZXRlclZhbHVlIGlzIHRoZSBlbXB0eSBzdHJpbmcsIHRoZW4gY29udGludWUuXG4gICAgICBpZiAocGFyYW1ldGVyVmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gMTAuIElmIGFsbCBvZiB0aGUgZm9sbG93aW5nIGFyZSB0cnVlXG4gICAgLy8gLSBwYXJhbWV0ZXJOYW1lIGlzIG5vdCB0aGUgZW1wdHkgc3RyaW5nXG4gICAgLy8gLSBwYXJhbWV0ZXJOYW1lIHNvbGVseSBjb250YWlucyBIVFRQIHRva2VuIGNvZGUgcG9pbnRzXG4gICAgLy8gLSBwYXJhbWV0ZXJWYWx1ZSBzb2xlbHkgY29udGFpbnMgSFRUUCBxdW90ZWQtc3RyaW5nIHRva2VuIGNvZGUgcG9pbnRzXG4gICAgLy8gLSBtaW1lVHlwZeKAmXMgcGFyYW1ldGVyc1twYXJhbWV0ZXJOYW1lXSBkb2VzIG5vdCBleGlzdFxuICAgIC8vIHRoZW4gc2V0IG1pbWVUeXBl4oCZcyBwYXJhbWV0ZXJzW3BhcmFtZXRlck5hbWVdIHRvIHBhcmFtZXRlclZhbHVlLlxuICAgIGlmIChcbiAgICAgIHBhcmFtZXRlck5hbWUubGVuZ3RoICE9PSAwICYmXG4gICAgICBIVFRQX1RPS0VOX0NPREVQT0lOVFMudGVzdChwYXJhbWV0ZXJOYW1lKSAmJlxuICAgICAgKHBhcmFtZXRlclZhbHVlLmxlbmd0aCA9PT0gMCB8fCBIVFRQX1FVT1RFRF9TVFJJTkdfVE9LRU5TLnRlc3QocGFyYW1ldGVyVmFsdWUpKSAmJlxuICAgICAgIW1pbWVUeXBlLnBhcmFtZXRlcnMuaGFzKHBhcmFtZXRlck5hbWUpXG4gICAgKSB7XG4gICAgICBtaW1lVHlwZS5wYXJhbWV0ZXJzLnNldChwYXJhbWV0ZXJOYW1lLCBwYXJhbWV0ZXJWYWx1ZSlcbiAgICB9XG4gIH1cblxuICAvLyAxMi4gUmV0dXJuIG1pbWVUeXBlLlxuICByZXR1cm4gbWltZVR5cGVcbn1cblxuLy8gaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2ZvcmdpdmluZy1iYXNlNjQtZGVjb2RlXG4vKiogQHBhcmFtIHtzdHJpbmd9IGRhdGEgKi9cbmZ1bmN0aW9uIGZvcmdpdmluZ0Jhc2U2NCAoZGF0YSkge1xuICAvLyAxLiBSZW1vdmUgYWxsIEFTQ0lJIHdoaXRlc3BhY2UgZnJvbSBkYXRhLlxuICBkYXRhID0gZGF0YS5yZXBsYWNlKC9bXFx1MDAwOVxcdTAwMEFcXHUwMDBDXFx1MDAwRFxcdTAwMjBdL2csICcnKSAgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gIC8vIDIuIElmIGRhdGHigJlzIGNvZGUgcG9pbnQgbGVuZ3RoIGRpdmlkZXMgYnkgNCBsZWF2aW5nXG4gIC8vIG5vIHJlbWFpbmRlciwgdGhlbjpcbiAgaWYgKGRhdGEubGVuZ3RoICUgNCA9PT0gMCkge1xuICAgIC8vIDEuIElmIGRhdGEgZW5kcyB3aXRoIG9uZSBvciB0d28gVSswMDNEICg9KSBjb2RlIHBvaW50cyxcbiAgICAvLyB0aGVuIHJlbW92ZSB0aGVtIGZyb20gZGF0YS5cbiAgICBkYXRhID0gZGF0YS5yZXBsYWNlKC89Pz0kLywgJycpXG4gIH1cblxuICAvLyAzLiBJZiBkYXRh4oCZcyBjb2RlIHBvaW50IGxlbmd0aCBkaXZpZGVzIGJ5IDQgbGVhdmluZ1xuICAvLyBhIHJlbWFpbmRlciBvZiAxLCB0aGVuIHJldHVybiBmYWlsdXJlLlxuICBpZiAoZGF0YS5sZW5ndGggJSA0ID09PSAxKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgLy8gNC4gSWYgZGF0YSBjb250YWlucyBhIGNvZGUgcG9pbnQgdGhhdCBpcyBub3Qgb25lIG9mXG4gIC8vICBVKzAwMkIgKCspXG4gIC8vICBVKzAwMkYgKC8pXG4gIC8vICBBU0NJSSBhbHBoYW51bWVyaWNcbiAgLy8gdGhlbiByZXR1cm4gZmFpbHVyZS5cbiAgaWYgKC9bXisvMC05QS1aYS16XS8udGVzdChkYXRhKSkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIGNvbnN0IGJpbmFyeSA9IGF0b2IoZGF0YSlcbiAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheShiaW5hcnkubGVuZ3RoKVxuXG4gIGZvciAobGV0IGJ5dGUgPSAwOyBieXRlIDwgYmluYXJ5Lmxlbmd0aDsgYnl0ZSsrKSB7XG4gICAgYnl0ZXNbYnl0ZV0gPSBiaW5hcnkuY2hhckNvZGVBdChieXRlKVxuICB9XG5cbiAgcmV0dXJuIGJ5dGVzXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb2xsZWN0LWFuLWh0dHAtcXVvdGVkLXN0cmluZ1xuLy8gdGVzdHM6IGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNleGFtcGxlLWh0dHAtcXVvdGVkLXN0cmluZ1xuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRcbiAqIEBwYXJhbSB7eyBwb3NpdGlvbjogbnVtYmVyIH19IHBvc2l0aW9uXG4gKiBAcGFyYW0ge2Jvb2xlYW4/fSBleHRyYWN0VmFsdWVcbiAqL1xuZnVuY3Rpb24gY29sbGVjdEFuSFRUUFF1b3RlZFN0cmluZyAoaW5wdXQsIHBvc2l0aW9uLCBleHRyYWN0VmFsdWUpIHtcbiAgLy8gMS4gTGV0IHBvc2l0aW9uU3RhcnQgYmUgcG9zaXRpb24uXG4gIGNvbnN0IHBvc2l0aW9uU3RhcnQgPSBwb3NpdGlvbi5wb3NpdGlvblxuXG4gIC8vIDIuIExldCB2YWx1ZSBiZSB0aGUgZW1wdHkgc3RyaW5nLlxuICBsZXQgdmFsdWUgPSAnJ1xuXG4gIC8vIDMuIEFzc2VydDogdGhlIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluIGlucHV0XG4gIC8vIGlzIFUrMDAyMiAoXCIpLlxuICBhc3NlcnQoaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dID09PSAnXCInKVxuXG4gIC8vIDQuIEFkdmFuY2UgcG9zaXRpb24gYnkgMS5cbiAgcG9zaXRpb24ucG9zaXRpb24rK1xuXG4gIC8vIDUuIFdoaWxlIHRydWU6XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgLy8gMS4gQXBwZW5kIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzXG4gICAgLy8gdGhhdCBhcmUgbm90IFUrMDAyMiAoXCIpIG9yIFUrMDA1QyAoXFwpIGZyb20gaW5wdXQsIGdpdmVuXG4gICAgLy8gcG9zaXRpb24sIHRvIHZhbHVlLlxuICAgIHZhbHVlICs9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMoXG4gICAgICAoY2hhcikgPT4gY2hhciAhPT0gJ1wiJyAmJiBjaGFyICE9PSAnXFxcXCcsXG4gICAgICBpbnB1dCxcbiAgICAgIHBvc2l0aW9uXG4gICAgKVxuXG4gICAgLy8gMi4gSWYgcG9zaXRpb24gaXMgcGFzdCB0aGUgZW5kIG9mIGlucHV0LCB0aGVuIGJyZWFrLlxuICAgIGlmIChwb3NpdGlvbi5wb3NpdGlvbiA+PSBpbnB1dC5sZW5ndGgpIHtcbiAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgLy8gMy4gTGV0IHF1b3RlT3JCYWNrc2xhc2ggYmUgdGhlIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluXG4gICAgLy8gaW5wdXQuXG4gICAgY29uc3QgcXVvdGVPckJhY2tzbGFzaCA9IGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXVxuXG4gICAgLy8gNC4gQWR2YW5jZSBwb3NpdGlvbiBieSAxLlxuICAgIHBvc2l0aW9uLnBvc2l0aW9uKytcblxuICAgIC8vIDUuIElmIHF1b3RlT3JCYWNrc2xhc2ggaXMgVSswMDVDIChcXCksIHRoZW46XG4gICAgaWYgKHF1b3RlT3JCYWNrc2xhc2ggPT09ICdcXFxcJykge1xuICAgICAgLy8gMS4gSWYgcG9zaXRpb24gaXMgcGFzdCB0aGUgZW5kIG9mIGlucHV0LCB0aGVuIGFwcGVuZFxuICAgICAgLy8gVSswMDVDIChcXCkgdG8gdmFsdWUgYW5kIGJyZWFrLlxuICAgICAgaWYgKHBvc2l0aW9uLnBvc2l0aW9uID49IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICB2YWx1ZSArPSAnXFxcXCdcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgLy8gMi4gQXBwZW5kIHRoZSBjb2RlIHBvaW50IGF0IHBvc2l0aW9uIHdpdGhpbiBpbnB1dCB0byB2YWx1ZS5cbiAgICAgIHZhbHVlICs9IGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXVxuXG4gICAgICAvLyAzLiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuXG4gICAgICBwb3NpdGlvbi5wb3NpdGlvbisrXG5cbiAgICAvLyA2LiBPdGhlcndpc2U6XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIDEuIEFzc2VydDogcXVvdGVPckJhY2tzbGFzaCBpcyBVKzAwMjIgKFwiKS5cbiAgICAgIGFzc2VydChxdW90ZU9yQmFja3NsYXNoID09PSAnXCInKVxuXG4gICAgICAvLyAyLiBCcmVhay5cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgLy8gNi4gSWYgdGhlIGV4dHJhY3QtdmFsdWUgZmxhZyBpcyBzZXQsIHRoZW4gcmV0dXJuIHZhbHVlLlxuICBpZiAoZXh0cmFjdFZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cblxuICAvLyA3LiBSZXR1cm4gdGhlIGNvZGUgcG9pbnRzIGZyb20gcG9zaXRpb25TdGFydCB0byBwb3NpdGlvbixcbiAgLy8gaW5jbHVzaXZlLCB3aXRoaW4gaW5wdXQuXG4gIHJldHVybiBpbnB1dC5zbGljZShwb3NpdGlvblN0YXJ0LCBwb3NpdGlvbi5wb3NpdGlvbilcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jc2VyaWFsaXplLWEtbWltZS10eXBlXG4gKi9cbmZ1bmN0aW9uIHNlcmlhbGl6ZUFNaW1lVHlwZSAobWltZVR5cGUpIHtcbiAgYXNzZXJ0KG1pbWVUeXBlICE9PSAnZmFpbHVyZScpXG4gIGNvbnN0IHsgcGFyYW1ldGVycywgZXNzZW5jZSB9ID0gbWltZVR5cGVcblxuICAvLyAxLiBMZXQgc2VyaWFsaXphdGlvbiBiZSB0aGUgY29uY2F0ZW5hdGlvbiBvZiBtaW1lVHlwZeKAmXNcbiAgLy8gICAgdHlwZSwgVSswMDJGICgvKSwgYW5kIG1pbWVUeXBl4oCZcyBzdWJ0eXBlLlxuICBsZXQgc2VyaWFsaXphdGlvbiA9IGVzc2VuY2VcblxuICAvLyAyLiBGb3IgZWFjaCBuYW1lIOKGkiB2YWx1ZSBvZiBtaW1lVHlwZeKAmXMgcGFyYW1ldGVyczpcbiAgZm9yIChsZXQgW25hbWUsIHZhbHVlXSBvZiBwYXJhbWV0ZXJzLmVudHJpZXMoKSkge1xuICAgIC8vIDEuIEFwcGVuZCBVKzAwM0IgKDspIHRvIHNlcmlhbGl6YXRpb24uXG4gICAgc2VyaWFsaXphdGlvbiArPSAnOydcblxuICAgIC8vIDIuIEFwcGVuZCBuYW1lIHRvIHNlcmlhbGl6YXRpb24uXG4gICAgc2VyaWFsaXphdGlvbiArPSBuYW1lXG5cbiAgICAvLyAzLiBBcHBlbmQgVSswMDNEICg9KSB0byBzZXJpYWxpemF0aW9uLlxuICAgIHNlcmlhbGl6YXRpb24gKz0gJz0nXG5cbiAgICAvLyA0LiBJZiB2YWx1ZSBkb2VzIG5vdCBzb2xlbHkgY29udGFpbiBIVFRQIHRva2VuIGNvZGVcbiAgICAvLyAgICBwb2ludHMgb3IgdmFsdWUgaXMgdGhlIGVtcHR5IHN0cmluZywgdGhlbjpcbiAgICBpZiAoIUhUVFBfVE9LRU5fQ09ERVBPSU5UUy50ZXN0KHZhbHVlKSkge1xuICAgICAgLy8gMS4gUHJlY2VkZSBlYWNoIG9jY3VyZW5jZSBvZiBVKzAwMjIgKFwiKSBvclxuICAgICAgLy8gICAgVSswMDVDIChcXCkgaW4gdmFsdWUgd2l0aCBVKzAwNUMgKFxcKS5cbiAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvKFxcXFx8XCIpL2csICdcXFxcJDEnKVxuXG4gICAgICAvLyAyLiBQcmVwZW5kIFUrMDAyMiAoXCIpIHRvIHZhbHVlLlxuICAgICAgdmFsdWUgPSAnXCInICsgdmFsdWVcblxuICAgICAgLy8gMy4gQXBwZW5kIFUrMDAyMiAoXCIpIHRvIHZhbHVlLlxuICAgICAgdmFsdWUgKz0gJ1wiJ1xuICAgIH1cblxuICAgIC8vIDUuIEFwcGVuZCB2YWx1ZSB0byBzZXJpYWxpemF0aW9uLlxuICAgIHNlcmlhbGl6YXRpb24gKz0gdmFsdWVcbiAgfVxuXG4gIC8vIDMuIFJldHVybiBzZXJpYWxpemF0aW9uLlxuICByZXR1cm4gc2VyaWFsaXphdGlvblxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtd2hpdGVzcGFjZVxuICogQHBhcmFtIHtzdHJpbmd9IGNoYXJcbiAqL1xuZnVuY3Rpb24gaXNIVFRQV2hpdGVTcGFjZSAoY2hhcikge1xuICByZXR1cm4gY2hhciA9PT0gJ1xccicgfHwgY2hhciA9PT0gJ1xcbicgfHwgY2hhciA9PT0gJ1xcdCcgfHwgY2hhciA9PT0gJyAnXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC13aGl0ZXNwYWNlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUhUVFBXaGl0ZXNwYWNlIChzdHIsIGxlYWRpbmcgPSB0cnVlLCB0cmFpbGluZyA9IHRydWUpIHtcbiAgbGV0IGxlYWQgPSAwXG4gIGxldCB0cmFpbCA9IHN0ci5sZW5ndGggLSAxXG5cbiAgaWYgKGxlYWRpbmcpIHtcbiAgICBmb3IgKDsgbGVhZCA8IHN0ci5sZW5ndGggJiYgaXNIVFRQV2hpdGVTcGFjZShzdHJbbGVhZF0pOyBsZWFkKyspO1xuICB9XG5cbiAgaWYgKHRyYWlsaW5nKSB7XG4gICAgZm9yICg7IHRyYWlsID4gMCAmJiBpc0hUVFBXaGl0ZVNwYWNlKHN0clt0cmFpbF0pOyB0cmFpbC0tKTtcbiAgfVxuXG4gIHJldHVybiBzdHIuc2xpY2UobGVhZCwgdHJhaWwgKyAxKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2FzY2lpLXdoaXRlc3BhY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBjaGFyXG4gKi9cbmZ1bmN0aW9uIGlzQVNDSUlXaGl0ZXNwYWNlIChjaGFyKSB7XG4gIHJldHVybiBjaGFyID09PSAnXFxyJyB8fCBjaGFyID09PSAnXFxuJyB8fCBjaGFyID09PSAnXFx0JyB8fCBjaGFyID09PSAnXFxmJyB8fCBjaGFyID09PSAnICdcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNzdHJpcC1sZWFkaW5nLWFuZC10cmFpbGluZy1hc2NpaS13aGl0ZXNwYWNlXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUFTQ0lJV2hpdGVzcGFjZSAoc3RyLCBsZWFkaW5nID0gdHJ1ZSwgdHJhaWxpbmcgPSB0cnVlKSB7XG4gIGxldCBsZWFkID0gMFxuICBsZXQgdHJhaWwgPSBzdHIubGVuZ3RoIC0gMVxuXG4gIGlmIChsZWFkaW5nKSB7XG4gICAgZm9yICg7IGxlYWQgPCBzdHIubGVuZ3RoICYmIGlzQVNDSUlXaGl0ZXNwYWNlKHN0cltsZWFkXSk7IGxlYWQrKyk7XG4gIH1cblxuICBpZiAodHJhaWxpbmcpIHtcbiAgICBmb3IgKDsgdHJhaWwgPiAwICYmIGlzQVNDSUlXaGl0ZXNwYWNlKHN0clt0cmFpbF0pOyB0cmFpbC0tKTtcbiAgfVxuXG4gIHJldHVybiBzdHIuc2xpY2UobGVhZCwgdHJhaWwgKyAxKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZGF0YVVSTFByb2Nlc3NvcixcbiAgVVJMU2VyaWFsaXplcixcbiAgY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50cyxcbiAgY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QsXG4gIHN0cmluZ1BlcmNlbnREZWNvZGUsXG4gIHBhcnNlTUlNRVR5cGUsXG4gIGNvbGxlY3RBbkhUVFBRdW90ZWRTdHJpbmcsXG4gIHNlcmlhbGl6ZUFNaW1lVHlwZVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBCbG9iLCBGaWxlOiBOYXRpdmVGaWxlIH0gPSByZXF1aXJlKCdidWZmZXInKVxuY29uc3QgeyB0eXBlcyB9ID0gcmVxdWlyZSgndXRpbCcpXG5jb25zdCB7IGtTdGF0ZSB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgaXNCbG9iTGlrZSB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuL3dlYmlkbCcpXG5jb25zdCB7IHBhcnNlTUlNRVR5cGUsIHNlcmlhbGl6ZUFNaW1lVHlwZSB9ID0gcmVxdWlyZSgnLi9kYXRhVVJMJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKVxuXG5jbGFzcyBGaWxlIGV4dGVuZHMgQmxvYiB7XG4gIGNvbnN0cnVjdG9yIChmaWxlQml0cywgZmlsZU5hbWUsIG9wdGlvbnMgPSB7fSkge1xuICAgIC8vIFRoZSBGaWxlIGNvbnN0cnVjdG9yIGlzIGludm9rZWQgd2l0aCB0d28gb3IgdGhyZWUgcGFyYW1ldGVycywgZGVwZW5kaW5nXG4gICAgLy8gb24gd2hldGhlciB0aGUgb3B0aW9uYWwgZGljdGlvbmFyeSBwYXJhbWV0ZXIgaXMgdXNlZC4gV2hlbiB0aGUgRmlsZSgpXG4gICAgLy8gY29uc3RydWN0b3IgaXMgaW52b2tlZCwgdXNlciBhZ2VudHMgbXVzdCBydW4gdGhlIGZvbGxvd2luZyBzdGVwczpcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnRmlsZSBjb25zdHJ1Y3RvcicgfSlcblxuICAgIGZpbGVCaXRzID0gd2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPEJsb2JQYXJ0PiddKGZpbGVCaXRzKVxuICAgIGZpbGVOYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKGZpbGVOYW1lKVxuICAgIG9wdGlvbnMgPSB3ZWJpZGwuY29udmVydGVycy5GaWxlUHJvcGVydHlCYWcob3B0aW9ucylcblxuICAgIC8vIDEuIExldCBieXRlcyBiZSB0aGUgcmVzdWx0IG9mIHByb2Nlc3NpbmcgYmxvYiBwYXJ0cyBnaXZlbiBmaWxlQml0cyBhbmRcbiAgICAvLyBvcHRpb25zLlxuICAgIC8vIE5vdGU6IEJsb2IgaGFuZGxlcyB0aGlzIGZvciB1c1xuXG4gICAgLy8gMi4gTGV0IG4gYmUgdGhlIGZpbGVOYW1lIGFyZ3VtZW50IHRvIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICBjb25zdCBuID0gZmlsZU5hbWVcblxuICAgIC8vIDMuIFByb2Nlc3MgRmlsZVByb3BlcnR5QmFnIGRpY3Rpb25hcnkgYXJndW1lbnQgYnkgcnVubmluZyB0aGUgZm9sbG93aW5nXG4gICAgLy8gc3Vic3RlcHM6XG5cbiAgICAvLyAgICAxLiBJZiB0aGUgdHlwZSBtZW1iZXIgaXMgcHJvdmlkZWQgYW5kIGlzIG5vdCB0aGUgZW1wdHkgc3RyaW5nLCBsZXQgdFxuICAgIC8vICAgIGJlIHNldCB0byB0aGUgdHlwZSBkaWN0aW9uYXJ5IG1lbWJlci4gSWYgdCBjb250YWlucyBhbnkgY2hhcmFjdGVyc1xuICAgIC8vICAgIG91dHNpZGUgdGhlIHJhbmdlIFUrMDAyMCB0byBVKzAwN0UsIHRoZW4gc2V0IHQgdG8gdGhlIGVtcHR5IHN0cmluZ1xuICAgIC8vICAgIGFuZCByZXR1cm4gZnJvbSB0aGVzZSBzdWJzdGVwcy5cbiAgICAvLyAgICAyLiBDb252ZXJ0IGV2ZXJ5IGNoYXJhY3RlciBpbiB0IHRvIEFTQ0lJIGxvd2VyY2FzZS5cbiAgICBsZXQgdCA9IG9wdGlvbnMudHlwZVxuICAgIGxldCBkXG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbGFiZWxzXG4gICAgc3Vic3RlcDoge1xuICAgICAgaWYgKHQpIHtcbiAgICAgICAgdCA9IHBhcnNlTUlNRVR5cGUodClcblxuICAgICAgICBpZiAodCA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgICAgdCA9ICcnXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxhYmVsc1xuICAgICAgICAgIGJyZWFrIHN1YnN0ZXBcbiAgICAgICAgfVxuXG4gICAgICAgIHQgPSBzZXJpYWxpemVBTWltZVR5cGUodCkudG9Mb3dlckNhc2UoKVxuICAgICAgfVxuXG4gICAgICAvLyAgICAzLiBJZiB0aGUgbGFzdE1vZGlmaWVkIG1lbWJlciBpcyBwcm92aWRlZCwgbGV0IGQgYmUgc2V0IHRvIHRoZVxuICAgICAgLy8gICAgbGFzdE1vZGlmaWVkIGRpY3Rpb25hcnkgbWVtYmVyLiBJZiBpdCBpcyBub3QgcHJvdmlkZWQsIHNldCBkIHRvIHRoZVxuICAgICAgLy8gICAgY3VycmVudCBkYXRlIGFuZCB0aW1lIHJlcHJlc2VudGVkIGFzIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHNpbmNlXG4gICAgICAvLyAgICB0aGUgVW5peCBFcG9jaCAod2hpY2ggaXMgdGhlIGVxdWl2YWxlbnQgb2YgRGF0ZS5ub3coKSBbRUNNQS0yNjJdKS5cbiAgICAgIGQgPSBvcHRpb25zLmxhc3RNb2RpZmllZFxuICAgIH1cblxuICAgIC8vIDQuIFJldHVybiBhIG5ldyBGaWxlIG9iamVjdCBGIHN1Y2ggdGhhdDpcbiAgICAvLyBGIHJlZmVycyB0byB0aGUgYnl0ZXMgYnl0ZSBzZXF1ZW5jZS5cbiAgICAvLyBGLnNpemUgaXMgc2V0IHRvIHRoZSBudW1iZXIgb2YgdG90YWwgYnl0ZXMgaW4gYnl0ZXMuXG4gICAgLy8gRi5uYW1lIGlzIHNldCB0byBuLlxuICAgIC8vIEYudHlwZSBpcyBzZXQgdG8gdC5cbiAgICAvLyBGLmxhc3RNb2RpZmllZCBpcyBzZXQgdG8gZC5cblxuICAgIHN1cGVyKHByb2Nlc3NCbG9iUGFydHMoZmlsZUJpdHMsIG9wdGlvbnMpLCB7IHR5cGU6IHQgfSlcbiAgICB0aGlzW2tTdGF0ZV0gPSB7XG4gICAgICBuYW1lOiBuLFxuICAgICAgbGFzdE1vZGlmaWVkOiBkLFxuICAgICAgdHlwZTogdFxuICAgIH1cbiAgfVxuXG4gIGdldCBuYW1lICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5uYW1lXG4gIH1cblxuICBnZXQgbGFzdE1vZGlmaWVkICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5sYXN0TW9kaWZpZWRcbiAgfVxuXG4gIGdldCB0eXBlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS50eXBlXG4gIH1cbn1cblxuY2xhc3MgRmlsZUxpa2Uge1xuICBjb25zdHJ1Y3RvciAoYmxvYkxpa2UsIGZpbGVOYW1lLCBvcHRpb25zID0ge30pIHtcbiAgICAvLyBUT0RPOiBhcmd1bWVudCBpZGwgdHlwZSBjaGVja1xuXG4gICAgLy8gVGhlIEZpbGUgY29uc3RydWN0b3IgaXMgaW52b2tlZCB3aXRoIHR3byBvciB0aHJlZSBwYXJhbWV0ZXJzLCBkZXBlbmRpbmdcbiAgICAvLyBvbiB3aGV0aGVyIHRoZSBvcHRpb25hbCBkaWN0aW9uYXJ5IHBhcmFtZXRlciBpcyB1c2VkLiBXaGVuIHRoZSBGaWxlKClcbiAgICAvLyBjb25zdHJ1Y3RvciBpcyBpbnZva2VkLCB1c2VyIGFnZW50cyBtdXN0IHJ1biB0aGUgZm9sbG93aW5nIHN0ZXBzOlxuXG4gICAgLy8gMS4gTGV0IGJ5dGVzIGJlIHRoZSByZXN1bHQgb2YgcHJvY2Vzc2luZyBibG9iIHBhcnRzIGdpdmVuIGZpbGVCaXRzIGFuZFxuICAgIC8vIG9wdGlvbnMuXG5cbiAgICAvLyAyLiBMZXQgbiBiZSB0aGUgZmlsZU5hbWUgYXJndW1lbnQgdG8gdGhlIGNvbnN0cnVjdG9yLlxuICAgIGNvbnN0IG4gPSBmaWxlTmFtZVxuXG4gICAgLy8gMy4gUHJvY2VzcyBGaWxlUHJvcGVydHlCYWcgZGljdGlvbmFyeSBhcmd1bWVudCBieSBydW5uaW5nIHRoZSBmb2xsb3dpbmdcbiAgICAvLyBzdWJzdGVwczpcblxuICAgIC8vICAgIDEuIElmIHRoZSB0eXBlIG1lbWJlciBpcyBwcm92aWRlZCBhbmQgaXMgbm90IHRoZSBlbXB0eSBzdHJpbmcsIGxldCB0XG4gICAgLy8gICAgYmUgc2V0IHRvIHRoZSB0eXBlIGRpY3Rpb25hcnkgbWVtYmVyLiBJZiB0IGNvbnRhaW5zIGFueSBjaGFyYWN0ZXJzXG4gICAgLy8gICAgb3V0c2lkZSB0aGUgcmFuZ2UgVSswMDIwIHRvIFUrMDA3RSwgdGhlbiBzZXQgdCB0byB0aGUgZW1wdHkgc3RyaW5nXG4gICAgLy8gICAgYW5kIHJldHVybiBmcm9tIHRoZXNlIHN1YnN0ZXBzLlxuICAgIC8vICAgIFRPRE9cbiAgICBjb25zdCB0ID0gb3B0aW9ucy50eXBlXG5cbiAgICAvLyAgICAyLiBDb252ZXJ0IGV2ZXJ5IGNoYXJhY3RlciBpbiB0IHRvIEFTQ0lJIGxvd2VyY2FzZS5cbiAgICAvLyAgICBUT0RPXG5cbiAgICAvLyAgICAzLiBJZiB0aGUgbGFzdE1vZGlmaWVkIG1lbWJlciBpcyBwcm92aWRlZCwgbGV0IGQgYmUgc2V0IHRvIHRoZVxuICAgIC8vICAgIGxhc3RNb2RpZmllZCBkaWN0aW9uYXJ5IG1lbWJlci4gSWYgaXQgaXMgbm90IHByb3ZpZGVkLCBzZXQgZCB0byB0aGVcbiAgICAvLyAgICBjdXJyZW50IGRhdGUgYW5kIHRpbWUgcmVwcmVzZW50ZWQgYXMgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgc2luY2VcbiAgICAvLyAgICB0aGUgVW5peCBFcG9jaCAod2hpY2ggaXMgdGhlIGVxdWl2YWxlbnQgb2YgRGF0ZS5ub3coKSBbRUNNQS0yNjJdKS5cbiAgICBjb25zdCBkID0gb3B0aW9ucy5sYXN0TW9kaWZpZWQgPz8gRGF0ZS5ub3coKVxuXG4gICAgLy8gNC4gUmV0dXJuIGEgbmV3IEZpbGUgb2JqZWN0IEYgc3VjaCB0aGF0OlxuICAgIC8vIEYgcmVmZXJzIHRvIHRoZSBieXRlcyBieXRlIHNlcXVlbmNlLlxuICAgIC8vIEYuc2l6ZSBpcyBzZXQgdG8gdGhlIG51bWJlciBvZiB0b3RhbCBieXRlcyBpbiBieXRlcy5cbiAgICAvLyBGLm5hbWUgaXMgc2V0IHRvIG4uXG4gICAgLy8gRi50eXBlIGlzIHNldCB0byB0LlxuICAgIC8vIEYubGFzdE1vZGlmaWVkIGlzIHNldCB0byBkLlxuXG4gICAgdGhpc1trU3RhdGVdID0ge1xuICAgICAgYmxvYkxpa2UsXG4gICAgICBuYW1lOiBuLFxuICAgICAgdHlwZTogdCxcbiAgICAgIGxhc3RNb2RpZmllZDogZFxuICAgIH1cbiAgfVxuXG4gIHN0cmVhbSAoLi4uYXJncykge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVMaWtlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5ibG9iTGlrZS5zdHJlYW0oLi4uYXJncylcbiAgfVxuXG4gIGFycmF5QnVmZmVyICguLi5hcmdzKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZUxpa2UpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmJsb2JMaWtlLmFycmF5QnVmZmVyKC4uLmFyZ3MpXG4gIH1cblxuICBzbGljZSAoLi4uYXJncykge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVMaWtlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5ibG9iTGlrZS5zbGljZSguLi5hcmdzKVxuICB9XG5cbiAgdGV4dCAoLi4uYXJncykge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVMaWtlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5ibG9iTGlrZS50ZXh0KC4uLmFyZ3MpXG4gIH1cblxuICBnZXQgc2l6ZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZUxpa2UpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmJsb2JMaWtlLnNpemVcbiAgfVxuXG4gIGdldCB0eXBlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlTGlrZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uYmxvYkxpa2UudHlwZVxuICB9XG5cbiAgZ2V0IG5hbWUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVMaWtlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5uYW1lXG4gIH1cblxuICBnZXQgbGFzdE1vZGlmaWVkICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlTGlrZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ubGFzdE1vZGlmaWVkXG4gIH1cblxuICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10gKCkge1xuICAgIHJldHVybiAnRmlsZSdcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhGaWxlLnByb3RvdHlwZSwge1xuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnRmlsZScsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0sXG4gIG5hbWU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGxhc3RNb2RpZmllZDoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxud2ViaWRsLmNvbnZlcnRlcnMuQmxvYiA9IHdlYmlkbC5pbnRlcmZhY2VDb252ZXJ0ZXIoQmxvYilcblxud2ViaWRsLmNvbnZlcnRlcnMuQmxvYlBhcnQgPSBmdW5jdGlvbiAoViwgb3B0cykge1xuICBpZiAod2ViaWRsLnV0aWwuVHlwZShWKSA9PT0gJ09iamVjdCcpIHtcbiAgICBpZiAoaXNCbG9iTGlrZShWKSkge1xuICAgICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkJsb2IoViwgeyBzdHJpY3Q6IGZhbHNlIH0pXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgQXJyYXlCdWZmZXIuaXNWaWV3KFYpIHx8XG4gICAgICB0eXBlcy5pc0FueUFycmF5QnVmZmVyKFYpXG4gICAgKSB7XG4gICAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuQnVmZmVyU291cmNlKFYsIG9wdHMpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhWLCBvcHRzKVxufVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8QmxvYlBhcnQ+J10gPSB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLkJsb2JQYXJ0XG4pXG5cbi8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9GaWxlQVBJLyNkZm4tRmlsZVByb3BlcnR5QmFnXG53ZWJpZGwuY29udmVydGVycy5GaWxlUHJvcGVydHlCYWcgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIHtcbiAgICBrZXk6ICdsYXN0TW9kaWZpZWQnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ2xvbmcgbG9uZyddLFxuICAgIGdldCBkZWZhdWx0VmFsdWUgKCkge1xuICAgICAgcmV0dXJuIERhdGUubm93KClcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBrZXk6ICd0eXBlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6ICcnXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdlbmRpbmdzJyxcbiAgICBjb252ZXJ0ZXI6ICh2YWx1ZSkgPT4ge1xuICAgICAgdmFsdWUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcodmFsdWUpXG4gICAgICB2YWx1ZSA9IHZhbHVlLnRvTG93ZXJDYXNlKClcblxuICAgICAgaWYgKHZhbHVlICE9PSAnbmF0aXZlJykge1xuICAgICAgICB2YWx1ZSA9ICd0cmFuc3BhcmVudCdcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgfSxcbiAgICBkZWZhdWx0VmFsdWU6ICd0cmFuc3BhcmVudCdcbiAgfVxuXSlcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9GaWxlQVBJLyNwcm9jZXNzLWJsb2ItcGFydHNcbiAqIEBwYXJhbSB7KE5vZGVKUy5UeXBlZEFycmF5fEJsb2J8c3RyaW5nKVtdfSBwYXJ0c1xuICogQHBhcmFtIHt7IHR5cGU6IHN0cmluZywgZW5kaW5nczogc3RyaW5nIH19IG9wdGlvbnNcbiAqL1xuZnVuY3Rpb24gcHJvY2Vzc0Jsb2JQYXJ0cyAocGFydHMsIG9wdGlvbnMpIHtcbiAgLy8gMS4gTGV0IGJ5dGVzIGJlIGFuIGVtcHR5IHNlcXVlbmNlIG9mIGJ5dGVzLlxuICAvKiogQHR5cGUge05vZGVKUy5UeXBlZEFycmF5W119ICovXG4gIGNvbnN0IGJ5dGVzID0gW11cblxuICAvLyAyLiBGb3IgZWFjaCBlbGVtZW50IGluIHBhcnRzOlxuICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgcGFydHMpIHtcbiAgICAvLyAxLiBJZiBlbGVtZW50IGlzIGEgVVNWU3RyaW5nLCBydW4gdGhlIGZvbGxvd2luZyBzdWJzdGVwczpcbiAgICBpZiAodHlwZW9mIGVsZW1lbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyAxLiBMZXQgcyBiZSBlbGVtZW50LlxuICAgICAgbGV0IHMgPSBlbGVtZW50XG5cbiAgICAgIC8vIDIuIElmIHRoZSBlbmRpbmdzIG1lbWJlciBvZiBvcHRpb25zIGlzIFwibmF0aXZlXCIsIHNldCBzXG4gICAgICAvLyAgICB0byB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgbGluZSBlbmRpbmdzIHRvIG5hdGl2ZVxuICAgICAgLy8gICAgb2YgZWxlbWVudC5cbiAgICAgIGlmIChvcHRpb25zLmVuZGluZ3MgPT09ICduYXRpdmUnKSB7XG4gICAgICAgIHMgPSBjb252ZXJ0TGluZUVuZGluZ3NOYXRpdmUocylcbiAgICAgIH1cblxuICAgICAgLy8gMy4gQXBwZW5kIHRoZSByZXN1bHQgb2YgVVRGLTggZW5jb2RpbmcgcyB0byBieXRlcy5cbiAgICAgIGJ5dGVzLnB1c2goZW5jb2Rlci5lbmNvZGUocykpXG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHR5cGVzLmlzQW55QXJyYXlCdWZmZXIoZWxlbWVudCkgfHxcbiAgICAgIHR5cGVzLmlzVHlwZWRBcnJheShlbGVtZW50KVxuICAgICkge1xuICAgICAgLy8gMi4gSWYgZWxlbWVudCBpcyBhIEJ1ZmZlclNvdXJjZSwgZ2V0IGEgY29weSBvZiB0aGVcbiAgICAgIC8vICAgIGJ5dGVzIGhlbGQgYnkgdGhlIGJ1ZmZlciBzb3VyY2UsIGFuZCBhcHBlbmQgdGhvc2VcbiAgICAgIC8vICAgIGJ5dGVzIHRvIGJ5dGVzLlxuICAgICAgaWYgKCFlbGVtZW50LmJ1ZmZlcikgeyAvLyBBcnJheUJ1ZmZlclxuICAgICAgICBieXRlcy5wdXNoKG5ldyBVaW50OEFycmF5KGVsZW1lbnQpKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgICBuZXcgVWludDhBcnJheShlbGVtZW50LmJ1ZmZlciwgZWxlbWVudC5ieXRlT2Zmc2V0LCBlbGVtZW50LmJ5dGVMZW5ndGgpXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzQmxvYkxpa2UoZWxlbWVudCkpIHtcbiAgICAgIC8vIDMuIElmIGVsZW1lbnQgaXMgYSBCbG9iLCBhcHBlbmQgdGhlIGJ5dGVzIGl0IHJlcHJlc2VudHNcbiAgICAgIC8vICAgIHRvIGJ5dGVzLlxuICAgICAgYnl0ZXMucHVzaChlbGVtZW50KVxuICAgIH1cbiAgfVxuXG4gIC8vIDMuIFJldHVybiBieXRlcy5cbiAgcmV0dXJuIGJ5dGVzXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3d3dy53My5vcmcvVFIvRmlsZUFQSS8jY29udmVydC1saW5lLWVuZGluZ3MtdG8tbmF0aXZlXG4gKiBAcGFyYW0ge3N0cmluZ30gc1xuICovXG5mdW5jdGlvbiBjb252ZXJ0TGluZUVuZGluZ3NOYXRpdmUgKHMpIHtcbiAgLy8gMS4gTGV0IG5hdGl2ZSBsaW5lIGVuZGluZyBiZSBiZSB0aGUgY29kZSBwb2ludCBVKzAwMEEgTEYuXG4gIGxldCBuYXRpdmVMaW5lRW5kaW5nID0gJ1xcbidcblxuICAvLyAyLiBJZiB0aGUgdW5kZXJseWluZyBwbGF0Zm9ybeKAmXMgY29udmVudGlvbnMgYXJlIHRvXG4gIC8vICAgIHJlcHJlc2VudCBuZXdsaW5lcyBhcyBhIGNhcnJpYWdlIHJldHVybiBhbmQgbGluZSBmZWVkXG4gIC8vICAgIHNlcXVlbmNlLCBzZXQgbmF0aXZlIGxpbmUgZW5kaW5nIHRvIHRoZSBjb2RlIHBvaW50XG4gIC8vICAgIFUrMDAwRCBDUiBmb2xsb3dlZCBieSB0aGUgY29kZSBwb2ludCBVKzAwMEEgTEYuXG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG4gICAgbmF0aXZlTGluZUVuZGluZyA9ICdcXHJcXG4nXG4gIH1cblxuICByZXR1cm4gcy5yZXBsYWNlKC9cXHI/XFxuL2csIG5hdGl2ZUxpbmVFbmRpbmcpXG59XG5cbi8vIElmIHRoaXMgZnVuY3Rpb24gaXMgbW92ZWQgdG8gLi91dGlsLmpzLCBzb21lIHRvb2xzIChzdWNoIGFzXG4vLyByb2xsdXApIHdpbGwgd2FybiBhYm91dCBjaXJjdWxhciBkZXBlbmRlbmNpZXMuIFNlZTpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8xNjI5XG5mdW5jdGlvbiBpc0ZpbGVMaWtlIChvYmplY3QpIHtcbiAgcmV0dXJuIChcbiAgICAoTmF0aXZlRmlsZSAmJiBvYmplY3QgaW5zdGFuY2VvZiBOYXRpdmVGaWxlKSB8fFxuICAgIG9iamVjdCBpbnN0YW5jZW9mIEZpbGUgfHwgKFxuICAgICAgb2JqZWN0ICYmXG4gICAgICAodHlwZW9mIG9iamVjdC5zdHJlYW0gPT09ICdmdW5jdGlvbicgfHxcbiAgICAgIHR5cGVvZiBvYmplY3QuYXJyYXlCdWZmZXIgPT09ICdmdW5jdGlvbicpICYmXG4gICAgICBvYmplY3RbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ0ZpbGUnXG4gICAgKVxuICApXG59XG5cbm1vZHVsZS5leHBvcnRzID0geyBGaWxlLCBGaWxlTGlrZSwgaXNGaWxlTGlrZSB9XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGlzQmxvYkxpa2UsIHRvVVNWU3RyaW5nLCBtYWtlSXRlcmF0b3IgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IGtTdGF0ZSB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgRmlsZTogVW5kaWNpRmlsZSwgRmlsZUxpa2UsIGlzRmlsZUxpa2UgfSA9IHJlcXVpcmUoJy4vZmlsZScpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi93ZWJpZGwnKVxuY29uc3QgeyBCbG9iLCBGaWxlOiBOYXRpdmVGaWxlIH0gPSByZXF1aXJlKCdidWZmZXInKVxuXG4vKiogQHR5cGUge2dsb2JhbFRoaXNbJ0ZpbGUnXX0gKi9cbmNvbnN0IEZpbGUgPSBOYXRpdmVGaWxlID8/IFVuZGljaUZpbGVcblxuLy8gaHR0cHM6Ly94aHIuc3BlYy53aGF0d2cub3JnLyNmb3JtZGF0YVxuY2xhc3MgRm9ybURhdGEge1xuICBjb25zdHJ1Y3RvciAoZm9ybSkge1xuICAgIGlmIChmb3JtICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuY29udmVyc2lvbkZhaWxlZCh7XG4gICAgICAgIHByZWZpeDogJ0Zvcm1EYXRhIGNvbnN0cnVjdG9yJyxcbiAgICAgICAgYXJndW1lbnQ6ICdBcmd1bWVudCAxJyxcbiAgICAgICAgdHlwZXM6IFsndW5kZWZpbmVkJ11cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgdGhpc1trU3RhdGVdID0gW11cbiAgfVxuXG4gIGFwcGVuZCAobmFtZSwgdmFsdWUsIGZpbGVuYW1lID0gdW5kZWZpbmVkKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRm9ybURhdGEpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnRm9ybURhdGEuYXBwZW5kJyB9KVxuXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgIWlzQmxvYkxpa2UodmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBcIkZhaWxlZCB0byBleGVjdXRlICdhcHBlbmQnIG9uICdGb3JtRGF0YSc6IHBhcmFtZXRlciAyIGlzIG5vdCBvZiB0eXBlICdCbG9iJ1wiXG4gICAgICApXG4gICAgfVxuXG4gICAgLy8gMS4gTGV0IHZhbHVlIGJlIHZhbHVlIGlmIGdpdmVuOyBvdGhlcndpc2UgYmxvYlZhbHVlLlxuXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhuYW1lKVxuICAgIHZhbHVlID0gaXNCbG9iTGlrZSh2YWx1ZSlcbiAgICAgID8gd2ViaWRsLmNvbnZlcnRlcnMuQmxvYih2YWx1ZSwgeyBzdHJpY3Q6IGZhbHNlIH0pXG4gICAgICA6IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyh2YWx1ZSlcbiAgICBmaWxlbmFtZSA9IGFyZ3VtZW50cy5sZW5ndGggPT09IDNcbiAgICAgID8gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKGZpbGVuYW1lKVxuICAgICAgOiB1bmRlZmluZWRcblxuICAgIC8vIDIuIExldCBlbnRyeSBiZSB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGFuIGVudHJ5IHdpdGhcbiAgICAvLyBuYW1lLCB2YWx1ZSwgYW5kIGZpbGVuYW1lIGlmIGdpdmVuLlxuICAgIGNvbnN0IGVudHJ5ID0gbWFrZUVudHJ5KG5hbWUsIHZhbHVlLCBmaWxlbmFtZSlcblxuICAgIC8vIDMuIEFwcGVuZCBlbnRyeSB0byB0aGlz4oCZcyBlbnRyeSBsaXN0LlxuICAgIHRoaXNba1N0YXRlXS5wdXNoKGVudHJ5KVxuICB9XG5cbiAgZGVsZXRlIChuYW1lKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRm9ybURhdGEpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRm9ybURhdGEuZGVsZXRlJyB9KVxuXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhuYW1lKVxuXG4gICAgLy8gVGhlIGRlbGV0ZShuYW1lKSBtZXRob2Qgc3RlcHMgYXJlIHRvIHJlbW92ZSBhbGwgZW50cmllcyB3aG9zZSBuYW1lXG4gICAgLy8gaXMgbmFtZSBmcm9tIHRoaXPigJlzIGVudHJ5IGxpc3QuXG4gICAgdGhpc1trU3RhdGVdID0gdGhpc1trU3RhdGVdLmZpbHRlcihlbnRyeSA9PiBlbnRyeS5uYW1lICE9PSBuYW1lKVxuICB9XG5cbiAgZ2V0IChuYW1lKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRm9ybURhdGEpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRm9ybURhdGEuZ2V0JyB9KVxuXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhuYW1lKVxuXG4gICAgLy8gMS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgd2hvc2UgbmFtZSBpcyBuYW1lIGluIHRoaXPigJlzIGVudHJ5IGxpc3QsXG4gICAgLy8gdGhlbiByZXR1cm4gbnVsbC5cbiAgICBjb25zdCBpZHggPSB0aGlzW2tTdGF0ZV0uZmluZEluZGV4KChlbnRyeSkgPT4gZW50cnkubmFtZSA9PT0gbmFtZSlcbiAgICBpZiAoaWR4ID09PSAtMSkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBlbnRyeSB3aG9zZSBuYW1lIGlzIG5hbWUgZnJvbVxuICAgIC8vIHRoaXPigJlzIGVudHJ5IGxpc3QuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXVtpZHhdLnZhbHVlXG4gIH1cblxuICBnZXRBbGwgKG5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdGb3JtRGF0YS5nZXRBbGwnIH0pXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKG5hbWUpXG5cbiAgICAvLyAxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSB3aG9zZSBuYW1lIGlzIG5hbWUgaW4gdGhpc+KAmXMgZW50cnkgbGlzdCxcbiAgICAvLyB0aGVuIHJldHVybiB0aGUgZW1wdHkgbGlzdC5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIHZhbHVlcyBvZiBhbGwgZW50cmllcyB3aG9zZSBuYW1lIGlzIG5hbWUsIGluIG9yZGVyLFxuICAgIC8vIGZyb20gdGhpc+KAmXMgZW50cnkgbGlzdC5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdXG4gICAgICAuZmlsdGVyKChlbnRyeSkgPT4gZW50cnkubmFtZSA9PT0gbmFtZSlcbiAgICAgIC5tYXAoKGVudHJ5KSA9PiBlbnRyeS52YWx1ZSlcbiAgfVxuXG4gIGhhcyAobmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZvcm1EYXRhKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0Zvcm1EYXRhLmhhcycgfSlcblxuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcobmFtZSlcblxuICAgIC8vIFRoZSBoYXMobmFtZSkgbWV0aG9kIHN0ZXBzIGFyZSB0byByZXR1cm4gdHJ1ZSBpZiB0aGVyZSBpcyBhbiBlbnRyeVxuICAgIC8vIHdob3NlIG5hbWUgaXMgbmFtZSBpbiB0aGlz4oCZcyBlbnRyeSBsaXN0OyBvdGhlcndpc2UgZmFsc2UuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5maW5kSW5kZXgoKGVudHJ5KSA9PiBlbnRyeS5uYW1lID09PSBuYW1lKSAhPT0gLTFcbiAgfVxuXG4gIHNldCAobmFtZSwgdmFsdWUsIGZpbGVuYW1lID0gdW5kZWZpbmVkKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRm9ybURhdGEpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnRm9ybURhdGEuc2V0JyB9KVxuXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgIWlzQmxvYkxpa2UodmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBcIkZhaWxlZCB0byBleGVjdXRlICdzZXQnIG9uICdGb3JtRGF0YSc6IHBhcmFtZXRlciAyIGlzIG5vdCBvZiB0eXBlICdCbG9iJ1wiXG4gICAgICApXG4gICAgfVxuXG4gICAgLy8gVGhlIHNldChuYW1lLCB2YWx1ZSkgYW5kIHNldChuYW1lLCBibG9iVmFsdWUsIGZpbGVuYW1lKSBtZXRob2Qgc3RlcHNcbiAgICAvLyBhcmU6XG5cbiAgICAvLyAxLiBMZXQgdmFsdWUgYmUgdmFsdWUgaWYgZ2l2ZW47IG90aGVyd2lzZSBibG9iVmFsdWUuXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKG5hbWUpXG4gICAgdmFsdWUgPSBpc0Jsb2JMaWtlKHZhbHVlKVxuICAgICAgPyB3ZWJpZGwuY29udmVydGVycy5CbG9iKHZhbHVlLCB7IHN0cmljdDogZmFsc2UgfSlcbiAgICAgIDogd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKHZhbHVlKVxuICAgIGZpbGVuYW1lID0gYXJndW1lbnRzLmxlbmd0aCA9PT0gM1xuICAgICAgPyB0b1VTVlN0cmluZyhmaWxlbmFtZSlcbiAgICAgIDogdW5kZWZpbmVkXG5cbiAgICAvLyAyLiBMZXQgZW50cnkgYmUgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhbiBlbnRyeSB3aXRoIG5hbWUsIHZhbHVlLCBhbmRcbiAgICAvLyBmaWxlbmFtZSBpZiBnaXZlbi5cbiAgICBjb25zdCBlbnRyeSA9IG1ha2VFbnRyeShuYW1lLCB2YWx1ZSwgZmlsZW5hbWUpXG5cbiAgICAvLyAzLiBJZiB0aGVyZSBhcmUgZW50cmllcyBpbiB0aGlz4oCZcyBlbnRyeSBsaXN0IHdob3NlIG5hbWUgaXMgbmFtZSwgdGhlblxuICAgIC8vIHJlcGxhY2UgdGhlIGZpcnN0IHN1Y2ggZW50cnkgd2l0aCBlbnRyeSBhbmQgcmVtb3ZlIHRoZSBvdGhlcnMuXG4gICAgY29uc3QgaWR4ID0gdGhpc1trU3RhdGVdLmZpbmRJbmRleCgoZW50cnkpID0+IGVudHJ5Lm5hbWUgPT09IG5hbWUpXG4gICAgaWYgKGlkeCAhPT0gLTEpIHtcbiAgICAgIHRoaXNba1N0YXRlXSA9IFtcbiAgICAgICAgLi4udGhpc1trU3RhdGVdLnNsaWNlKDAsIGlkeCksXG4gICAgICAgIGVudHJ5LFxuICAgICAgICAuLi50aGlzW2tTdGF0ZV0uc2xpY2UoaWR4ICsgMSkuZmlsdGVyKChlbnRyeSkgPT4gZW50cnkubmFtZSAhPT0gbmFtZSlcbiAgICAgIF1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gNC4gT3RoZXJ3aXNlLCBhcHBlbmQgZW50cnkgdG8gdGhpc+KAmXMgZW50cnkgbGlzdC5cbiAgICAgIHRoaXNba1N0YXRlXS5wdXNoKGVudHJ5KVxuICAgIH1cbiAgfVxuXG4gIGVudHJpZXMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZvcm1EYXRhKVxuXG4gICAgcmV0dXJuIG1ha2VJdGVyYXRvcihcbiAgICAgICgpID0+IHRoaXNba1N0YXRlXS5tYXAocGFpciA9PiBbcGFpci5uYW1lLCBwYWlyLnZhbHVlXSksXG4gICAgICAnRm9ybURhdGEnLFxuICAgICAgJ2tleSt2YWx1ZSdcbiAgICApXG4gIH1cblxuICBrZXlzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIHJldHVybiBtYWtlSXRlcmF0b3IoXG4gICAgICAoKSA9PiB0aGlzW2tTdGF0ZV0ubWFwKHBhaXIgPT4gW3BhaXIubmFtZSwgcGFpci52YWx1ZV0pLFxuICAgICAgJ0Zvcm1EYXRhJyxcbiAgICAgICdrZXknXG4gICAgKVxuICB9XG5cbiAgdmFsdWVzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIHJldHVybiBtYWtlSXRlcmF0b3IoXG4gICAgICAoKSA9PiB0aGlzW2tTdGF0ZV0ubWFwKHBhaXIgPT4gW3BhaXIubmFtZSwgcGFpci52YWx1ZV0pLFxuICAgICAgJ0Zvcm1EYXRhJyxcbiAgICAgICd2YWx1ZSdcbiAgICApXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHsodmFsdWU6IHN0cmluZywga2V5OiBzdHJpbmcsIHNlbGY6IEZvcm1EYXRhKSA9PiB2b2lkfSBjYWxsYmFja0ZuXG4gICAqIEBwYXJhbSB7dW5rbm93bn0gdGhpc0FyZ1xuICAgKi9cbiAgZm9yRWFjaCAoY2FsbGJhY2tGbiwgdGhpc0FyZyA9IGdsb2JhbFRoaXMpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdGb3JtRGF0YS5mb3JFYWNoJyB9KVxuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFja0ZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBcIkZhaWxlZCB0byBleGVjdXRlICdmb3JFYWNoJyBvbiAnRm9ybURhdGEnOiBwYXJhbWV0ZXIgMSBpcyBub3Qgb2YgdHlwZSAnRnVuY3Rpb24nLlwiXG4gICAgICApXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgdGhpcykge1xuICAgICAgY2FsbGJhY2tGbi5hcHBseSh0aGlzQXJnLCBbdmFsdWUsIGtleSwgdGhpc10pXG4gICAgfVxuICB9XG59XG5cbkZvcm1EYXRhLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdID0gRm9ybURhdGEucHJvdG90eXBlLmVudHJpZXNcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRm9ybURhdGEucHJvdG90eXBlLCB7XG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdGb3JtRGF0YScsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH1cbn0pXG5cbi8qKlxuICogQHNlZSBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3JtLWNvbnRyb2wtaW5mcmFzdHJ1Y3R1cmUuaHRtbCNjcmVhdGUtYW4tZW50cnlcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge3N0cmluZ3xCbG9ifSB2YWx1ZVxuICogQHBhcmFtIHs/c3RyaW5nfSBmaWxlbmFtZVxuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24gbWFrZUVudHJ5IChuYW1lLCB2YWx1ZSwgZmlsZW5hbWUpIHtcbiAgLy8gMS4gU2V0IG5hbWUgdG8gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIG5hbWUgaW50byBhIHNjYWxhciB2YWx1ZSBzdHJpbmcuXG4gIC8vIFwiVG8gY29udmVydCBhIHN0cmluZyBpbnRvIGEgc2NhbGFyIHZhbHVlIHN0cmluZywgcmVwbGFjZSBhbnkgc3Vycm9nYXRlc1xuICAvLyAgd2l0aCBVK0ZGRkQuXCJcbiAgLy8gc2VlOiBodHRwczovL25vZGVqcy5vcmcvZGlzdC9sYXRlc3QtdjE4LngvZG9jcy9hcGkvYnVmZmVyLmh0bWwjYnVmdG9zdHJpbmdlbmNvZGluZy1zdGFydC1lbmRcbiAgbmFtZSA9IEJ1ZmZlci5mcm9tKG5hbWUpLnRvU3RyaW5nKCd1dGY4JylcblxuICAvLyAyLiBJZiB2YWx1ZSBpcyBhIHN0cmluZywgdGhlbiBzZXQgdmFsdWUgdG8gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nXG4gIC8vICAgIHZhbHVlIGludG8gYSBzY2FsYXIgdmFsdWUgc3RyaW5nLlxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHZhbHVlID0gQnVmZmVyLmZyb20odmFsdWUpLnRvU3RyaW5nKCd1dGY4JylcbiAgfSBlbHNlIHtcbiAgICAvLyAzLiBPdGhlcndpc2U6XG5cbiAgICAvLyAxLiBJZiB2YWx1ZSBpcyBub3QgYSBGaWxlIG9iamVjdCwgdGhlbiBzZXQgdmFsdWUgdG8gYSBuZXcgRmlsZSBvYmplY3QsXG4gICAgLy8gICAgcmVwcmVzZW50aW5nIHRoZSBzYW1lIGJ5dGVzLCB3aG9zZSBuYW1lIGF0dHJpYnV0ZSB2YWx1ZSBpcyBcImJsb2JcIlxuICAgIGlmICghaXNGaWxlTGlrZSh2YWx1ZSkpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUgaW5zdGFuY2VvZiBCbG9iXG4gICAgICAgID8gbmV3IEZpbGUoW3ZhbHVlXSwgJ2Jsb2InLCB7IHR5cGU6IHZhbHVlLnR5cGUgfSlcbiAgICAgICAgOiBuZXcgRmlsZUxpa2UodmFsdWUsICdibG9iJywgeyB0eXBlOiB2YWx1ZS50eXBlIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gSWYgZmlsZW5hbWUgaXMgZ2l2ZW4sIHRoZW4gc2V0IHZhbHVlIHRvIGEgbmV3IEZpbGUgb2JqZWN0LFxuICAgIC8vICAgIHJlcHJlc2VudGluZyB0aGUgc2FtZSBieXRlcywgd2hvc2UgbmFtZSBhdHRyaWJ1dGUgaXMgZmlsZW5hbWUuXG4gICAgaWYgKGZpbGVuYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8qKiBAdHlwZSB7RmlsZVByb3BlcnR5QmFnfSAqL1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgdHlwZTogdmFsdWUudHlwZSxcbiAgICAgICAgbGFzdE1vZGlmaWVkOiB2YWx1ZS5sYXN0TW9kaWZpZWRcbiAgICAgIH1cblxuICAgICAgdmFsdWUgPSAoTmF0aXZlRmlsZSAmJiB2YWx1ZSBpbnN0YW5jZW9mIE5hdGl2ZUZpbGUpIHx8IHZhbHVlIGluc3RhbmNlb2YgVW5kaWNpRmlsZVxuICAgICAgICA/IG5ldyBGaWxlKFt2YWx1ZV0sIGZpbGVuYW1lLCBvcHRpb25zKVxuICAgICAgICA6IG5ldyBGaWxlTGlrZSh2YWx1ZSwgZmlsZW5hbWUsIG9wdGlvbnMpXG4gICAgfVxuICB9XG5cbiAgLy8gNC4gUmV0dXJuIGFuIGVudHJ5IHdob3NlIG5hbWUgaXMgbmFtZSBhbmQgd2hvc2UgdmFsdWUgaXMgdmFsdWUuXG4gIHJldHVybiB7IG5hbWUsIHZhbHVlIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7IEZvcm1EYXRhIH1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IEJ1c2JveSA9IHJlcXVpcmUoJ0BmYXN0aWZ5L2J1c2JveScpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHtcbiAgUmVhZGFibGVTdHJlYW1Gcm9tLFxuICBpc0Jsb2JMaWtlLFxuICBpc1JlYWRhYmxlU3RyZWFtTGlrZSxcbiAgcmVhZGFibGVTdHJlYW1DbG9zZSxcbiAgY3JlYXRlRGVmZXJyZWRQcm9taXNlLFxuICBmdWxseVJlYWRCb2R5XG59ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgRm9ybURhdGEgfSA9IHJlcXVpcmUoJy4vZm9ybWRhdGEnKVxuY29uc3QgeyBrU3RhdGUgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi93ZWJpZGwnKVxuY29uc3QgeyBET01FeGNlcHRpb24sIHN0cnVjdHVyZWRDbG9uZSB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3QgeyBCbG9iLCBGaWxlOiBOYXRpdmVGaWxlIH0gPSByZXF1aXJlKCdidWZmZXInKVxuY29uc3QgeyBrQm9keVVzZWQgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBpc0Vycm9yZWQgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGlzVWludDhBcnJheSwgaXNBcnJheUJ1ZmZlciB9ID0gcmVxdWlyZSgndXRpbC90eXBlcycpXG5jb25zdCB7IEZpbGU6IFVuZGljaUZpbGUgfSA9IHJlcXVpcmUoJy4vZmlsZScpXG5jb25zdCB7IHBhcnNlTUlNRVR5cGUsIHNlcmlhbGl6ZUFNaW1lVHlwZSB9ID0gcmVxdWlyZSgnLi9kYXRhVVJMJylcblxubGV0IFJlYWRhYmxlU3RyZWFtID0gZ2xvYmFsVGhpcy5SZWFkYWJsZVN0cmVhbVxuXG4vKiogQHR5cGUge2dsb2JhbFRoaXNbJ0ZpbGUnXX0gKi9cbmNvbnN0IEZpbGUgPSBOYXRpdmVGaWxlID8/IFVuZGljaUZpbGVcbmNvbnN0IHRleHRFbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKClcbmNvbnN0IHRleHREZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKClcblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtYm9keWluaXQtZXh0cmFjdFxuZnVuY3Rpb24gZXh0cmFjdEJvZHkgKG9iamVjdCwga2VlcGFsaXZlID0gZmFsc2UpIHtcbiAgaWYgKCFSZWFkYWJsZVN0cmVhbSkge1xuICAgIFJlYWRhYmxlU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtL3dlYicpLlJlYWRhYmxlU3RyZWFtXG4gIH1cblxuICAvLyAxLiBMZXQgc3RyZWFtIGJlIG51bGwuXG4gIGxldCBzdHJlYW0gPSBudWxsXG5cbiAgLy8gMi4gSWYgb2JqZWN0IGlzIGEgUmVhZGFibGVTdHJlYW0gb2JqZWN0LCB0aGVuIHNldCBzdHJlYW0gdG8gb2JqZWN0LlxuICBpZiAob2JqZWN0IGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW0pIHtcbiAgICBzdHJlYW0gPSBvYmplY3RcbiAgfSBlbHNlIGlmIChpc0Jsb2JMaWtlKG9iamVjdCkpIHtcbiAgICAvLyAzLiBPdGhlcndpc2UsIGlmIG9iamVjdCBpcyBhIEJsb2Igb2JqZWN0LCBzZXQgc3RyZWFtIHRvIHRoZVxuICAgIC8vICAgIHJlc3VsdCBvZiBydW5uaW5nIG9iamVjdOKAmXMgZ2V0IHN0cmVhbS5cbiAgICBzdHJlYW0gPSBvYmplY3Quc3RyZWFtKClcbiAgfSBlbHNlIHtcbiAgICAvLyA0LiBPdGhlcndpc2UsIHNldCBzdHJlYW0gdG8gYSBuZXcgUmVhZGFibGVTdHJlYW0gb2JqZWN0LCBhbmQgc2V0XG4gICAgLy8gICAgdXAgc3RyZWFtLlxuICAgIHN0cmVhbSA9IG5ldyBSZWFkYWJsZVN0cmVhbSh7XG4gICAgICBhc3luYyBwdWxsIChjb250cm9sbGVyKSB7XG4gICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShcbiAgICAgICAgICB0eXBlb2Ygc291cmNlID09PSAnc3RyaW5nJyA/IHRleHRFbmNvZGVyLmVuY29kZShzb3VyY2UpIDogc291cmNlXG4gICAgICAgIClcbiAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gcmVhZGFibGVTdHJlYW1DbG9zZShjb250cm9sbGVyKSlcbiAgICAgIH0sXG4gICAgICBzdGFydCAoKSB7fSxcbiAgICAgIHR5cGU6IHVuZGVmaW5lZFxuICAgIH0pXG4gIH1cblxuICAvLyA1LiBBc3NlcnQ6IHN0cmVhbSBpcyBhIFJlYWRhYmxlU3RyZWFtIG9iamVjdC5cbiAgYXNzZXJ0KGlzUmVhZGFibGVTdHJlYW1MaWtlKHN0cmVhbSkpXG5cbiAgLy8gNi4gTGV0IGFjdGlvbiBiZSBudWxsLlxuICBsZXQgYWN0aW9uID0gbnVsbFxuXG4gIC8vIDcuIExldCBzb3VyY2UgYmUgbnVsbC5cbiAgbGV0IHNvdXJjZSA9IG51bGxcblxuICAvLyA4LiBMZXQgbGVuZ3RoIGJlIG51bGwuXG4gIGxldCBsZW5ndGggPSBudWxsXG5cbiAgLy8gOS4gTGV0IHR5cGUgYmUgbnVsbC5cbiAgbGV0IHR5cGUgPSBudWxsXG5cbiAgLy8gMTAuIFN3aXRjaCBvbiBvYmplY3Q6XG4gIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAnc3RyaW5nJykge1xuICAgIC8vIFNldCBzb3VyY2UgdG8gdGhlIFVURi04IGVuY29kaW5nIG9mIG9iamVjdC5cbiAgICAvLyBOb3RlOiBzZXR0aW5nIHNvdXJjZSB0byBhIFVpbnQ4QXJyYXkgaGVyZSBicmVha3Mgc29tZSBtb2NraW5nIGFzc3VtcHRpb25zLlxuICAgIHNvdXJjZSA9IG9iamVjdFxuXG4gICAgLy8gU2V0IHR5cGUgdG8gYHRleHQvcGxhaW47Y2hhcnNldD1VVEYtOGAuXG4gICAgdHlwZSA9ICd0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLTgnXG4gIH0gZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zKSB7XG4gICAgLy8gVVJMU2VhcmNoUGFyYW1zXG5cbiAgICAvLyBzcGVjIHNheXMgdG8gcnVuIGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCBvbiBib2R5Lmxpc3RcbiAgICAvLyB0aGlzIGlzIGltcGxlbWVudGVkIGluIE5vZGUuanMgYXMgYXBhcnQgb2YgYW4gVVJMU2VhcmNoUGFyYW1zIGluc3RhbmNlIHRvU3RyaW5nIG1ldGhvZFxuICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvZTQ2YzY4MGJmMmIyMTFiYmQ1MmNmOTU5Y2ExN2VlOThjN2Y2NTdmNS9saWIvaW50ZXJuYWwvdXJsLmpzI0w0OTBcbiAgICAvLyBhbmQgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvZTQ2YzY4MGJmMmIyMTFiYmQ1MmNmOTU5Y2ExN2VlOThjN2Y2NTdmNS9saWIvaW50ZXJuYWwvdXJsLmpzI0wxMTAwXG5cbiAgICAvLyBTZXQgc291cmNlIHRvIHRoZSByZXN1bHQgb2YgcnVubmluZyB0aGUgYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIHNlcmlhbGl6ZXIgd2l0aCBvYmplY3TigJlzIGxpc3QuXG4gICAgc291cmNlID0gb2JqZWN0LnRvU3RyaW5nKClcblxuICAgIC8vIFNldCB0eXBlIHRvIGBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOGAuXG4gICAgdHlwZSA9ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCdcbiAgfSBlbHNlIGlmIChpc0FycmF5QnVmZmVyKG9iamVjdCkpIHtcbiAgICAvLyBCdWZmZXJTb3VyY2UvQXJyYXlCdWZmZXJcblxuICAgIC8vIFNldCBzb3VyY2UgdG8gYSBjb3B5IG9mIHRoZSBieXRlcyBoZWxkIGJ5IG9iamVjdC5cbiAgICBzb3VyY2UgPSBuZXcgVWludDhBcnJheShvYmplY3Quc2xpY2UoKSlcbiAgfSBlbHNlIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcob2JqZWN0KSkge1xuICAgIC8vIEJ1ZmZlclNvdXJjZS9BcnJheUJ1ZmZlclZpZXdcblxuICAgIC8vIFNldCBzb3VyY2UgdG8gYSBjb3B5IG9mIHRoZSBieXRlcyBoZWxkIGJ5IG9iamVjdC5cbiAgICBzb3VyY2UgPSBuZXcgVWludDhBcnJheShvYmplY3QuYnVmZmVyLnNsaWNlKG9iamVjdC5ieXRlT2Zmc2V0LCBvYmplY3QuYnl0ZU9mZnNldCArIG9iamVjdC5ieXRlTGVuZ3RoKSlcbiAgfSBlbHNlIGlmICh1dGlsLmlzRm9ybURhdGFMaWtlKG9iamVjdCkpIHtcbiAgICBjb25zdCBib3VuZGFyeSA9IGAtLS0tZm9ybWRhdGEtdW5kaWNpLTAke2Ake01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDFlMTEpfWAucGFkU3RhcnQoMTEsICcwJyl9YFxuICAgIGNvbnN0IHByZWZpeCA9IGAtLSR7Ym91bmRhcnl9XFxyXFxuQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhYFxuXG4gICAgLyohIGZvcm1kYXRhLXBvbHlmaWxsLiBNSVQgTGljZW5zZS4gSmltbXkgV8OkcnRpbmcgPGh0dHBzOi8vamltbXkud2FydGluZy5zZS9vcGVuc291cmNlPiAqL1xuICAgIGNvbnN0IGVzY2FwZSA9IChzdHIpID0+XG4gICAgICBzdHIucmVwbGFjZSgvXFxuL2csICclMEEnKS5yZXBsYWNlKC9cXHIvZywgJyUwRCcpLnJlcGxhY2UoL1wiL2csICclMjInKVxuICAgIGNvbnN0IG5vcm1hbGl6ZUxpbmVmZWVkcyA9ICh2YWx1ZSkgPT4gdmFsdWUucmVwbGFjZSgvXFxyP1xcbnxcXHIvZywgJ1xcclxcbicpXG5cbiAgICAvLyBTZXQgYWN0aW9uIHRvIHRoaXMgc3RlcDogcnVuIHRoZSBtdWx0aXBhcnQvZm9ybS1kYXRhXG4gICAgLy8gZW5jb2RpbmcgYWxnb3JpdGhtLCB3aXRoIG9iamVjdOKAmXMgZW50cnkgbGlzdCBhbmQgVVRGLTguXG4gICAgLy8gLSBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgYm9keSBpcyBpbW11dGFibGUgYW5kIGNhbid0IGJlIGNoYW5nZWQgYWZ0ZXJ3b3Jkc1xuICAgIC8vIC0gVGhhdCB0aGUgY29udGVudC1sZW5ndGggaXMgY2FsY3VsYXRlZCBpbiBhZHZhbmNlLlxuICAgIC8vIC0gQW5kIHRoYXQgYWxsIHBhcnRzIGFyZSBwcmUtZW5jb2RlZCBhbmQgcmVhZHkgdG8gYmUgc2VudC5cblxuICAgIGNvbnN0IGJsb2JQYXJ0cyA9IFtdXG4gICAgY29uc3Qgcm4gPSBuZXcgVWludDhBcnJheShbMTMsIDEwXSkgLy8gJ1xcclxcbidcbiAgICBsZW5ndGggPSAwXG4gICAgbGV0IGhhc1Vua25vd25TaXplVmFsdWUgPSBmYWxzZVxuXG4gICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIG9iamVjdCkge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3QgY2h1bmsgPSB0ZXh0RW5jb2Rlci5lbmNvZGUocHJlZml4ICtcbiAgICAgICAgICBgOyBuYW1lPVwiJHtlc2NhcGUobm9ybWFsaXplTGluZWZlZWRzKG5hbWUpKX1cImAgK1xuICAgICAgICAgIGBcXHJcXG5cXHJcXG4ke25vcm1hbGl6ZUxpbmVmZWVkcyh2YWx1ZSl9XFxyXFxuYClcbiAgICAgICAgYmxvYlBhcnRzLnB1c2goY2h1bmspXG4gICAgICAgIGxlbmd0aCArPSBjaHVuay5ieXRlTGVuZ3RoXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjaHVuayA9IHRleHRFbmNvZGVyLmVuY29kZShgJHtwcmVmaXh9OyBuYW1lPVwiJHtlc2NhcGUobm9ybWFsaXplTGluZWZlZWRzKG5hbWUpKX1cImAgK1xuICAgICAgICAgICh2YWx1ZS5uYW1lID8gYDsgZmlsZW5hbWU9XCIke2VzY2FwZSh2YWx1ZS5uYW1lKX1cImAgOiAnJykgKyAnXFxyXFxuJyArXG4gICAgICAgICAgYENvbnRlbnQtVHlwZTogJHtcbiAgICAgICAgICAgIHZhbHVlLnR5cGUgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSdcbiAgICAgICAgICB9XFxyXFxuXFxyXFxuYClcbiAgICAgICAgYmxvYlBhcnRzLnB1c2goY2h1bmssIHZhbHVlLCBybilcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZS5zaXplID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIGxlbmd0aCArPSBjaHVuay5ieXRlTGVuZ3RoICsgdmFsdWUuc2l6ZSArIHJuLmJ5dGVMZW5ndGhcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoYXNVbmtub3duU2l6ZVZhbHVlID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY2h1bmsgPSB0ZXh0RW5jb2Rlci5lbmNvZGUoYC0tJHtib3VuZGFyeX0tLWApXG4gICAgYmxvYlBhcnRzLnB1c2goY2h1bmspXG4gICAgbGVuZ3RoICs9IGNodW5rLmJ5dGVMZW5ndGhcbiAgICBpZiAoaGFzVW5rbm93blNpemVWYWx1ZSkge1xuICAgICAgbGVuZ3RoID0gbnVsbFxuICAgIH1cblxuICAgIC8vIFNldCBzb3VyY2UgdG8gb2JqZWN0LlxuICAgIHNvdXJjZSA9IG9iamVjdFxuXG4gICAgYWN0aW9uID0gYXN5bmMgZnVuY3Rpb24gKiAoKSB7XG4gICAgICBmb3IgKGNvbnN0IHBhcnQgb2YgYmxvYlBhcnRzKSB7XG4gICAgICAgIGlmIChwYXJ0LnN0cmVhbSkge1xuICAgICAgICAgIHlpZWxkICogcGFydC5zdHJlYW0oKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHlpZWxkIHBhcnRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNldCB0eXBlIHRvIGBtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT1gLFxuICAgIC8vIGZvbGxvd2VkIGJ5IHRoZSBtdWx0aXBhcnQvZm9ybS1kYXRhIGJvdW5kYXJ5IHN0cmluZyBnZW5lcmF0ZWRcbiAgICAvLyBieSB0aGUgbXVsdGlwYXJ0L2Zvcm0tZGF0YSBlbmNvZGluZyBhbGdvcml0aG0uXG4gICAgdHlwZSA9ICdtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0nICsgYm91bmRhcnlcbiAgfSBlbHNlIGlmIChpc0Jsb2JMaWtlKG9iamVjdCkpIHtcbiAgICAvLyBCbG9iXG5cbiAgICAvLyBTZXQgc291cmNlIHRvIG9iamVjdC5cbiAgICBzb3VyY2UgPSBvYmplY3RcblxuICAgIC8vIFNldCBsZW5ndGggdG8gb2JqZWN04oCZcyBzaXplLlxuICAgIGxlbmd0aCA9IG9iamVjdC5zaXplXG5cbiAgICAvLyBJZiBvYmplY3TigJlzIHR5cGUgYXR0cmlidXRlIGlzIG5vdCB0aGUgZW1wdHkgYnl0ZSBzZXF1ZW5jZSwgc2V0XG4gICAgLy8gdHlwZSB0byBpdHMgdmFsdWUuXG4gICAgaWYgKG9iamVjdC50eXBlKSB7XG4gICAgICB0eXBlID0gb2JqZWN0LnR5cGVcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIG9iamVjdFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBJZiBrZWVwYWxpdmUgaXMgdHJ1ZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoa2VlcGFsaXZlKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdrZWVwYWxpdmUnKVxuICAgIH1cblxuICAgIC8vIElmIG9iamVjdCBpcyBkaXN0dXJiZWQgb3IgbG9ja2VkLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICh1dGlsLmlzRGlzdHVyYmVkKG9iamVjdCkgfHwgb2JqZWN0LmxvY2tlZCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgJ1Jlc3BvbnNlIGJvZHkgb2JqZWN0IHNob3VsZCBub3QgYmUgZGlzdHVyYmVkIG9yIGxvY2tlZCdcbiAgICAgIClcbiAgICB9XG5cbiAgICBzdHJlYW0gPVxuICAgICAgb2JqZWN0IGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW0gPyBvYmplY3QgOiBSZWFkYWJsZVN0cmVhbUZyb20ob2JqZWN0KVxuICB9XG5cbiAgLy8gMTEuIElmIHNvdXJjZSBpcyBhIGJ5dGUgc2VxdWVuY2UsIHRoZW4gc2V0IGFjdGlvbiB0byBhXG4gIC8vIHN0ZXAgdGhhdCByZXR1cm5zIHNvdXJjZSBhbmQgbGVuZ3RoIHRvIHNvdXJjZeKAmXMgbGVuZ3RoLlxuICBpZiAodHlwZW9mIHNvdXJjZSA9PT0gJ3N0cmluZycgfHwgdXRpbC5pc0J1ZmZlcihzb3VyY2UpKSB7XG4gICAgbGVuZ3RoID0gQnVmZmVyLmJ5dGVMZW5ndGgoc291cmNlKVxuICB9XG5cbiAgLy8gMTIuIElmIGFjdGlvbiBpcyBub24tbnVsbCwgdGhlbiBydW4gdGhlc2Ugc3RlcHMgaW4gaW4gcGFyYWxsZWw6XG4gIGlmIChhY3Rpb24gIT0gbnVsbCkge1xuICAgIC8vIFJ1biBhY3Rpb24uXG4gICAgbGV0IGl0ZXJhdG9yXG4gICAgc3RyZWFtID0gbmV3IFJlYWRhYmxlU3RyZWFtKHtcbiAgICAgIGFzeW5jIHN0YXJ0ICgpIHtcbiAgICAgICAgaXRlcmF0b3IgPSBhY3Rpb24ob2JqZWN0KVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKVxuICAgICAgfSxcbiAgICAgIGFzeW5jIHB1bGwgKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgY29uc3QgeyB2YWx1ZSwgZG9uZSB9ID0gYXdhaXQgaXRlcmF0b3IubmV4dCgpXG4gICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgLy8gV2hlbiBydW5uaW5nIGFjdGlvbiBpcyBkb25lLCBjbG9zZSBzdHJlYW0uXG4gICAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICAgICAgY29udHJvbGxlci5jbG9zZSgpXG4gICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBXaGVuZXZlciBvbmUgb3IgbW9yZSBieXRlcyBhcmUgYXZhaWxhYmxlIGFuZCBzdHJlYW0gaXMgbm90IGVycm9yZWQsXG4gICAgICAgICAgLy8gZW5xdWV1ZSBhIFVpbnQ4QXJyYXkgd3JhcHBpbmcgYW4gQXJyYXlCdWZmZXIgY29udGFpbmluZyB0aGUgYXZhaWxhYmxlXG4gICAgICAgICAgLy8gYnl0ZXMgaW50byBzdHJlYW0uXG4gICAgICAgICAgaWYgKCFpc0Vycm9yZWQoc3RyZWFtKSkge1xuICAgICAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KHZhbHVlKSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXIuZGVzaXJlZFNpemUgPiAwXG4gICAgICB9LFxuICAgICAgYXN5bmMgY2FuY2VsIChyZWFzb24pIHtcbiAgICAgICAgYXdhaXQgaXRlcmF0b3IucmV0dXJuKClcbiAgICAgIH0sXG4gICAgICB0eXBlOiB1bmRlZmluZWRcbiAgICB9KVxuICB9XG5cbiAgLy8gMTMuIExldCBib2R5IGJlIGEgYm9keSB3aG9zZSBzdHJlYW0gaXMgc3RyZWFtLCBzb3VyY2UgaXMgc291cmNlLFxuICAvLyBhbmQgbGVuZ3RoIGlzIGxlbmd0aC5cbiAgY29uc3QgYm9keSA9IHsgc3RyZWFtLCBzb3VyY2UsIGxlbmd0aCB9XG5cbiAgLy8gMTQuIFJldHVybiAoYm9keSwgdHlwZSkuXG4gIHJldHVybiBbYm9keSwgdHlwZV1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2JvZHlpbml0LXNhZmVseS1leHRyYWN0XG5mdW5jdGlvbiBzYWZlbHlFeHRyYWN0Qm9keSAob2JqZWN0LCBrZWVwYWxpdmUgPSBmYWxzZSkge1xuICBpZiAoIVJlYWRhYmxlU3RyZWFtKSB7XG4gICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICBSZWFkYWJsZVN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbS93ZWInKS5SZWFkYWJsZVN0cmVhbVxuICB9XG5cbiAgLy8gVG8gc2FmZWx5IGV4dHJhY3QgYSBib2R5IGFuZCBhIGBDb250ZW50LVR5cGVgIHZhbHVlIGZyb21cbiAgLy8gYSBieXRlIHNlcXVlbmNlIG9yIEJvZHlJbml0IG9iamVjdCBvYmplY3QsIHJ1biB0aGVzZSBzdGVwczpcblxuICAvLyAxLiBJZiBvYmplY3QgaXMgYSBSZWFkYWJsZVN0cmVhbSBvYmplY3QsIHRoZW46XG4gIGlmIChvYmplY3QgaW5zdGFuY2VvZiBSZWFkYWJsZVN0cmVhbSkge1xuICAgIC8vIEFzc2VydDogb2JqZWN0IGlzIG5laXRoZXIgZGlzdHVyYmVkIG5vciBsb2NrZWQuXG4gICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICBhc3NlcnQoIXV0aWwuaXNEaXN0dXJiZWQob2JqZWN0KSwgJ1RoZSBib2R5IGhhcyBhbHJlYWR5IGJlZW4gY29uc3VtZWQuJylcbiAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgIGFzc2VydCghb2JqZWN0LmxvY2tlZCwgJ1RoZSBzdHJlYW0gaXMgbG9ja2VkLicpXG4gIH1cblxuICAvLyAyLiBSZXR1cm4gdGhlIHJlc3VsdHMgb2YgZXh0cmFjdGluZyBvYmplY3QuXG4gIHJldHVybiBleHRyYWN0Qm9keShvYmplY3QsIGtlZXBhbGl2ZSlcbn1cblxuZnVuY3Rpb24gY2xvbmVCb2R5IChib2R5KSB7XG4gIC8vIFRvIGNsb25lIGEgYm9keSBib2R5LCBydW4gdGhlc2Ugc3RlcHM6XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtYm9keS1jbG9uZVxuXG4gIC8vIDEuIExldCDCqyBvdXQxLCBvdXQyIMK7IGJlIHRoZSByZXN1bHQgb2YgdGVlaW5nIGJvZHnigJlzIHN0cmVhbS5cbiAgY29uc3QgW291dDEsIG91dDJdID0gYm9keS5zdHJlYW0udGVlKClcbiAgY29uc3Qgb3V0MkNsb25lID0gc3RydWN0dXJlZENsb25lKG91dDIsIHsgdHJhbnNmZXI6IFtvdXQyXSB9KVxuICAvLyBUaGlzLCBmb3Igd2hhdGV2ZXIgcmVhc29ucywgdW5yZWZzIG91dDJDbG9uZSB3aGljaCBhbGxvd3NcbiAgLy8gdGhlIHByb2Nlc3MgdG8gZXhpdCBieSBpdHNlbGYuXG4gIGNvbnN0IFssIGZpbmFsQ2xvbmVdID0gb3V0MkNsb25lLnRlZSgpXG5cbiAgLy8gMi4gU2V0IGJvZHnigJlzIHN0cmVhbSB0byBvdXQxLlxuICBib2R5LnN0cmVhbSA9IG91dDFcblxuICAvLyAzLiBSZXR1cm4gYSBib2R5IHdob3NlIHN0cmVhbSBpcyBvdXQyIGFuZCBvdGhlciBtZW1iZXJzIGFyZSBjb3BpZWQgZnJvbSBib2R5LlxuICByZXR1cm4ge1xuICAgIHN0cmVhbTogZmluYWxDbG9uZSxcbiAgICBsZW5ndGg6IGJvZHkubGVuZ3RoLFxuICAgIHNvdXJjZTogYm9keS5zb3VyY2VcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiAqIGNvbnN1bWVCb2R5IChib2R5KSB7XG4gIGlmIChib2R5KSB7XG4gICAgaWYgKGlzVWludDhBcnJheShib2R5KSkge1xuICAgICAgeWllbGQgYm9keVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzdHJlYW0gPSBib2R5LnN0cmVhbVxuXG4gICAgICBpZiAodXRpbC5pc0Rpc3R1cmJlZChzdHJlYW0pKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBib2R5IGhhcyBhbHJlYWR5IGJlZW4gY29uc3VtZWQuJylcbiAgICAgIH1cblxuICAgICAgaWYgKHN0cmVhbS5sb2NrZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHN0cmVhbSBpcyBsb2NrZWQuJylcbiAgICAgIH1cblxuICAgICAgLy8gQ29tcGF0LlxuICAgICAgc3RyZWFtW2tCb2R5VXNlZF0gPSB0cnVlXG5cbiAgICAgIHlpZWxkICogc3RyZWFtXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHRocm93SWZBYm9ydGVkIChzdGF0ZSkge1xuICBpZiAoc3RhdGUuYWJvcnRlZCkge1xuICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oJ1RoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQuJywgJ0Fib3J0RXJyb3InKVxuICB9XG59XG5cbmZ1bmN0aW9uIGJvZHlNaXhpbk1ldGhvZHMgKGluc3RhbmNlKSB7XG4gIGNvbnN0IG1ldGhvZHMgPSB7XG4gICAgYmxvYiAoKSB7XG4gICAgICAvLyBUaGUgYmxvYigpIG1ldGhvZCBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoZSByZXN1bHQgb2ZcbiAgICAgIC8vIHJ1bm5pbmcgY29uc3VtZSBib2R5IHdpdGggdGhpcyBhbmQgdGhlIGZvbGxvd2luZyBzdGVwXG4gICAgICAvLyBnaXZlbiBhIGJ5dGUgc2VxdWVuY2UgYnl0ZXM6IHJldHVybiBhIEJsb2Igd2hvc2VcbiAgICAgIC8vIGNvbnRlbnRzIGFyZSBieXRlcyBhbmQgd2hvc2UgdHlwZSBhdHRyaWJ1dGUgaXMgdGhpc+KAmXNcbiAgICAgIC8vIE1JTUUgdHlwZS5cbiAgICAgIHJldHVybiBzcGVjQ29uc3VtZUJvZHkodGhpcywgKGJ5dGVzKSA9PiB7XG4gICAgICAgIGxldCBtaW1lVHlwZSA9IGJvZHlNaW1lVHlwZSh0aGlzKVxuXG4gICAgICAgIGlmIChtaW1lVHlwZSA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgICAgbWltZVR5cGUgPSAnJ1xuICAgICAgICB9IGVsc2UgaWYgKG1pbWVUeXBlKSB7XG4gICAgICAgICAgbWltZVR5cGUgPSBzZXJpYWxpemVBTWltZVR5cGUobWltZVR5cGUpXG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZXR1cm4gYSBCbG9iIHdob3NlIGNvbnRlbnRzIGFyZSBieXRlcyBhbmQgdHlwZSBhdHRyaWJ1dGVcbiAgICAgICAgLy8gaXMgbWltZVR5cGUuXG4gICAgICAgIHJldHVybiBuZXcgQmxvYihbYnl0ZXNdLCB7IHR5cGU6IG1pbWVUeXBlIH0pXG4gICAgICB9LCBpbnN0YW5jZSlcbiAgICB9LFxuXG4gICAgYXJyYXlCdWZmZXIgKCkge1xuICAgICAgLy8gVGhlIGFycmF5QnVmZmVyKCkgbWV0aG9kIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhlIHJlc3VsdFxuICAgICAgLy8gb2YgcnVubmluZyBjb25zdW1lIGJvZHkgd2l0aCB0aGlzIGFuZCB0aGUgZm9sbG93aW5nIHN0ZXBcbiAgICAgIC8vIGdpdmVuIGEgYnl0ZSBzZXF1ZW5jZSBieXRlczogcmV0dXJuIGEgbmV3IEFycmF5QnVmZmVyXG4gICAgICAvLyB3aG9zZSBjb250ZW50cyBhcmUgYnl0ZXMuXG4gICAgICByZXR1cm4gc3BlY0NvbnN1bWVCb2R5KHRoaXMsIChieXRlcykgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYnl0ZXMpLmJ1ZmZlclxuICAgICAgfSwgaW5zdGFuY2UpXG4gICAgfSxcblxuICAgIHRleHQgKCkge1xuICAgICAgLy8gVGhlIHRleHQoKSBtZXRob2Qgc3RlcHMgYXJlIHRvIHJldHVybiB0aGUgcmVzdWx0IG9mIHJ1bm5pbmdcbiAgICAgIC8vIGNvbnN1bWUgYm9keSB3aXRoIHRoaXMgYW5kIFVURi04IGRlY29kZS5cbiAgICAgIHJldHVybiBzcGVjQ29uc3VtZUJvZHkodGhpcywgdXRmOERlY29kZUJ5dGVzLCBpbnN0YW5jZSlcbiAgICB9LFxuXG4gICAganNvbiAoKSB7XG4gICAgICAvLyBUaGUganNvbigpIG1ldGhvZCBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZ1xuICAgICAgLy8gY29uc3VtZSBib2R5IHdpdGggdGhpcyBhbmQgcGFyc2UgSlNPTiBmcm9tIGJ5dGVzLlxuICAgICAgcmV0dXJuIHNwZWNDb25zdW1lQm9keSh0aGlzLCBwYXJzZUpTT05Gcm9tQnl0ZXMsIGluc3RhbmNlKVxuICAgIH0sXG5cbiAgICBhc3luYyBmb3JtRGF0YSAoKSB7XG4gICAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBpbnN0YW5jZSlcblxuICAgICAgdGhyb3dJZkFib3J0ZWQodGhpc1trU3RhdGVdKVxuXG4gICAgICBjb25zdCBjb250ZW50VHlwZSA9IHRoaXMuaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpXG5cbiAgICAgIC8vIElmIG1pbWVUeXBl4oCZcyBlc3NlbmNlIGlzIFwibXVsdGlwYXJ0L2Zvcm0tZGF0YVwiLCB0aGVuOlxuICAgICAgaWYgKC9tdWx0aXBhcnRcXC9mb3JtLWRhdGEvLnRlc3QoY29udGVudFR5cGUpKSB7XG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7fVxuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiB0aGlzLmhlYWRlcnMpIGhlYWRlcnNba2V5LnRvTG93ZXJDYXNlKCldID0gdmFsdWVcblxuICAgICAgICBjb25zdCByZXNwb25zZUZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKClcblxuICAgICAgICBsZXQgYnVzYm95XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBidXNib3kgPSBuZXcgQnVzYm95KHtcbiAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICBwcmVzZXJ2ZVBhdGg6IHRydWVcbiAgICAgICAgICB9KVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKGAke2Vycn1gLCAnQWJvcnRFcnJvcicpXG4gICAgICAgIH1cblxuICAgICAgICBidXNib3kub24oJ2ZpZWxkJywgKG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgICAgICAgcmVzcG9uc2VGb3JtRGF0YS5hcHBlbmQobmFtZSwgdmFsdWUpXG4gICAgICAgIH0pXG4gICAgICAgIGJ1c2JveS5vbignZmlsZScsIChuYW1lLCB2YWx1ZSwgZmlsZW5hbWUsIGVuY29kaW5nLCBtaW1lVHlwZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNodW5rcyA9IFtdXG5cbiAgICAgICAgICBpZiAoZW5jb2RpbmcgPT09ICdiYXNlNjQnIHx8IGVuY29kaW5nLnRvTG93ZXJDYXNlKCkgPT09ICdiYXNlNjQnKSB7XG4gICAgICAgICAgICBsZXQgYmFzZTY0Y2h1bmsgPSAnJ1xuXG4gICAgICAgICAgICB2YWx1ZS5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgICAgICAgICAgICBiYXNlNjRjaHVuayArPSBjaHVuay50b1N0cmluZygpLnJlcGxhY2UoL1tcXHJcXG5dL2dtLCAnJylcblxuICAgICAgICAgICAgICBjb25zdCBlbmQgPSBiYXNlNjRjaHVuay5sZW5ndGggLSBiYXNlNjRjaHVuay5sZW5ndGggJSA0XG4gICAgICAgICAgICAgIGNodW5rcy5wdXNoKEJ1ZmZlci5mcm9tKGJhc2U2NGNodW5rLnNsaWNlKDAsIGVuZCksICdiYXNlNjQnKSlcblxuICAgICAgICAgICAgICBiYXNlNjRjaHVuayA9IGJhc2U2NGNodW5rLnNsaWNlKGVuZClcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB2YWx1ZS5vbignZW5kJywgKCkgPT4ge1xuICAgICAgICAgICAgICBjaHVua3MucHVzaChCdWZmZXIuZnJvbShiYXNlNjRjaHVuaywgJ2Jhc2U2NCcpKVxuICAgICAgICAgICAgICByZXNwb25zZUZvcm1EYXRhLmFwcGVuZChuYW1lLCBuZXcgRmlsZShjaHVua3MsIGZpbGVuYW1lLCB7IHR5cGU6IG1pbWVUeXBlIH0pKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsdWUub24oJ2RhdGEnLCAoY2h1bmspID0+IHtcbiAgICAgICAgICAgICAgY2h1bmtzLnB1c2goY2h1bmspXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgdmFsdWUub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgICAgICAgcmVzcG9uc2VGb3JtRGF0YS5hcHBlbmQobmFtZSwgbmV3IEZpbGUoY2h1bmtzLCBmaWxlbmFtZSwgeyB0eXBlOiBtaW1lVHlwZSB9KSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgICAgIGNvbnN0IGJ1c2JveVJlc29sdmUgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgYnVzYm95Lm9uKCdmaW5pc2gnLCByZXNvbHZlKVxuICAgICAgICAgIGJ1c2JveS5vbignZXJyb3InLCAoZXJyKSA9PiByZWplY3QobmV3IFR5cGVFcnJvcihlcnIpKSlcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAodGhpcy5ib2R5ICE9PSBudWxsKSBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIGNvbnN1bWVCb2R5KHRoaXNba1N0YXRlXS5ib2R5KSkgYnVzYm95LndyaXRlKGNodW5rKVxuICAgICAgICBidXNib3kuZW5kKClcbiAgICAgICAgYXdhaXQgYnVzYm95UmVzb2x2ZVxuXG4gICAgICAgIHJldHVybiByZXNwb25zZUZvcm1EYXRhXG4gICAgICB9IGVsc2UgaWYgKC9hcHBsaWNhdGlvblxcL3gtd3d3LWZvcm0tdXJsZW5jb2RlZC8udGVzdChjb250ZW50VHlwZSkpIHtcbiAgICAgICAgLy8gT3RoZXJ3aXNlLCBpZiBtaW1lVHlwZeKAmXMgZXNzZW5jZSBpcyBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiLCB0aGVuOlxuXG4gICAgICAgIC8vIDEuIExldCBlbnRyaWVzIGJlIHRoZSByZXN1bHQgb2YgcGFyc2luZyBieXRlcy5cbiAgICAgICAgbGV0IGVudHJpZXNcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBsZXQgdGV4dCA9ICcnXG4gICAgICAgICAgLy8gYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIHBhcnNlciB3aWxsIGtlZXAgdGhlIEJPTS5cbiAgICAgICAgICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtdXJsZW5jb2RlZC1wYXJzZXJcbiAgICAgICAgICAvLyBOb3RlIHRoYXQgc3RyZWFtaW5nIGRlY29kZXIgaXMgc3RhdGVmdWwgYW5kIGNhbm5vdCBiZSByZXVzZWRcbiAgICAgICAgICBjb25zdCBzdHJlYW1pbmdEZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCd1dGYtOCcsIHsgaWdub3JlQk9NOiB0cnVlIH0pXG5cbiAgICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIGNvbnN1bWVCb2R5KHRoaXNba1N0YXRlXS5ib2R5KSkge1xuICAgICAgICAgICAgaWYgKCFpc1VpbnQ4QXJyYXkoY2h1bmspKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIFVpbnQ4QXJyYXkgY2h1bmsnKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGV4dCArPSBzdHJlYW1pbmdEZWNvZGVyLmRlY29kZShjaHVuaywgeyBzdHJlYW06IHRydWUgfSlcbiAgICAgICAgICB9XG4gICAgICAgICAgdGV4dCArPSBzdHJlYW1pbmdEZWNvZGVyLmRlY29kZSgpXG4gICAgICAgICAgZW50cmllcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXModGV4dClcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHQ6IFVuY2xlYXIgd2hlbiBuZXcgVVJMU2VhcmNoUGFyYW1zIGNhbiBmYWlsIG9uIGEgc3RyaW5nLlxuICAgICAgICAgIC8vIDIuIElmIGVudHJpZXMgaXMgZmFpbHVyZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgICAgICB0aHJvdyBPYmplY3QuYXNzaWduKG5ldyBUeXBlRXJyb3IoKSwgeyBjYXVzZTogZXJyIH0pXG4gICAgICAgIH1cblxuICAgICAgICAvLyAzLiBSZXR1cm4gYSBuZXcgRm9ybURhdGEgb2JqZWN0IHdob3NlIGVudHJpZXMgYXJlIGVudHJpZXMuXG4gICAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKClcbiAgICAgICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIGVudHJpZXMpIHtcbiAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQobmFtZSwgdmFsdWUpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZvcm1EYXRhXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBXYWl0IGEgdGljayBiZWZvcmUgY2hlY2tpbmcgaWYgdGhlIHJlcXVlc3QgaGFzIGJlZW4gYWJvcnRlZC5cbiAgICAgICAgLy8gT3RoZXJ3aXNlLCBhIFR5cGVFcnJvciBjYW4gYmUgdGhyb3duIHdoZW4gYW4gQWJvcnRFcnJvciBzaG91bGQuXG4gICAgICAgIGF3YWl0IFByb21pc2UucmVzb2x2ZSgpXG5cbiAgICAgICAgdGhyb3dJZkFib3J0ZWQodGhpc1trU3RhdGVdKVxuXG4gICAgICAgIC8vIE90aGVyd2lzZSwgdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICBoZWFkZXI6IGAke2luc3RhbmNlLm5hbWV9LmZvcm1EYXRhYCxcbiAgICAgICAgICBtZXNzYWdlOiAnQ291bGQgbm90IHBhcnNlIGNvbnRlbnQgYXMgRm9ybURhdGEuJ1xuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtZXRob2RzXG59XG5cbmZ1bmN0aW9uIG1peGluQm9keSAocHJvdG90eXBlKSB7XG4gIE9iamVjdC5hc3NpZ24ocHJvdG90eXBlLnByb3RvdHlwZSwgYm9keU1peGluTWV0aG9kcyhwcm90b3R5cGUpKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtYm9keS1jb25zdW1lLWJvZHlcbiAqIEBwYXJhbSB7UmVzcG9uc2V8UmVxdWVzdH0gb2JqZWN0XG4gKiBAcGFyYW0geyh2YWx1ZTogdW5rbm93bikgPT4gdW5rbm93bn0gY29udmVydEJ5dGVzVG9KU1ZhbHVlXG4gKiBAcGFyYW0ge1Jlc3BvbnNlfFJlcXVlc3R9IGluc3RhbmNlXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNwZWNDb25zdW1lQm9keSAob2JqZWN0LCBjb252ZXJ0Qnl0ZXNUb0pTVmFsdWUsIGluc3RhbmNlKSB7XG4gIHdlYmlkbC5icmFuZENoZWNrKG9iamVjdCwgaW5zdGFuY2UpXG5cbiAgdGhyb3dJZkFib3J0ZWQob2JqZWN0W2tTdGF0ZV0pXG5cbiAgLy8gMS4gSWYgb2JqZWN0IGlzIHVudXNhYmxlLCB0aGVuIHJldHVybiBhIHByb21pc2UgcmVqZWN0ZWRcbiAgLy8gICAgd2l0aCBhIFR5cGVFcnJvci5cbiAgaWYgKGJvZHlVbnVzYWJsZShvYmplY3Rba1N0YXRlXS5ib2R5KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0JvZHkgaXMgdW51c2FibGUnKVxuICB9XG5cbiAgLy8gMi4gTGV0IHByb21pc2UgYmUgYSBuZXcgcHJvbWlzZS5cbiAgY29uc3QgcHJvbWlzZSA9IGNyZWF0ZURlZmVycmVkUHJvbWlzZSgpXG5cbiAgLy8gMy4gTGV0IGVycm9yU3RlcHMgZ2l2ZW4gZXJyb3IgYmUgdG8gcmVqZWN0IHByb21pc2Ugd2l0aCBlcnJvci5cbiAgY29uc3QgZXJyb3JTdGVwcyA9IChlcnJvcikgPT4gcHJvbWlzZS5yZWplY3QoZXJyb3IpXG5cbiAgLy8gNC4gTGV0IHN1Y2Nlc3NTdGVwcyBnaXZlbiBhIGJ5dGUgc2VxdWVuY2UgZGF0YSBiZSB0byByZXNvbHZlXG4gIC8vICAgIHByb21pc2Ugd2l0aCB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgY29udmVydEJ5dGVzVG9KU1ZhbHVlXG4gIC8vICAgIHdpdGggZGF0YS4gSWYgdGhhdCB0aHJldyBhbiBleGNlcHRpb24sIHRoZW4gcnVuIGVycm9yU3RlcHNcbiAgLy8gICAgd2l0aCB0aGF0IGV4Y2VwdGlvbi5cbiAgY29uc3Qgc3VjY2Vzc1N0ZXBzID0gKGRhdGEpID0+IHtcbiAgICB0cnkge1xuICAgICAgcHJvbWlzZS5yZXNvbHZlKGNvbnZlcnRCeXRlc1RvSlNWYWx1ZShkYXRhKSlcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlcnJvclN0ZXBzKGUpXG4gICAgfVxuICB9XG5cbiAgLy8gNS4gSWYgb2JqZWN04oCZcyBib2R5IGlzIG51bGwsIHRoZW4gcnVuIHN1Y2Nlc3NTdGVwcyB3aXRoIGFuXG4gIC8vICAgIGVtcHR5IGJ5dGUgc2VxdWVuY2UuXG4gIGlmIChvYmplY3Rba1N0YXRlXS5ib2R5ID09IG51bGwpIHtcbiAgICBzdWNjZXNzU3RlcHMobmV3IFVpbnQ4QXJyYXkoKSlcbiAgICByZXR1cm4gcHJvbWlzZS5wcm9taXNlXG4gIH1cblxuICAvLyA2LiBPdGhlcndpc2UsIGZ1bGx5IHJlYWQgb2JqZWN04oCZcyBib2R5IGdpdmVuIHN1Y2Nlc3NTdGVwcyxcbiAgLy8gICAgZXJyb3JTdGVwcywgYW5kIG9iamVjdOKAmXMgcmVsZXZhbnQgZ2xvYmFsIG9iamVjdC5cbiAgYXdhaXQgZnVsbHlSZWFkQm9keShvYmplY3Rba1N0YXRlXS5ib2R5LCBzdWNjZXNzU3RlcHMsIGVycm9yU3RlcHMpXG5cbiAgLy8gNy4gUmV0dXJuIHByb21pc2UuXG4gIHJldHVybiBwcm9taXNlLnByb21pc2Vcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2JvZHktdW51c2FibGVcbmZ1bmN0aW9uIGJvZHlVbnVzYWJsZSAoYm9keSkge1xuICAvLyBBbiBvYmplY3QgaW5jbHVkaW5nIHRoZSBCb2R5IGludGVyZmFjZSBtaXhpbiBpc1xuICAvLyBzYWlkIHRvIGJlIHVudXNhYmxlIGlmIGl0cyBib2R5IGlzIG5vbi1udWxsIGFuZFxuICAvLyBpdHMgYm9keeKAmXMgc3RyZWFtIGlzIGRpc3R1cmJlZCBvciBsb2NrZWQuXG4gIHJldHVybiBib2R5ICE9IG51bGwgJiYgKGJvZHkuc3RyZWFtLmxvY2tlZCB8fCB1dGlsLmlzRGlzdHVyYmVkKGJvZHkuc3RyZWFtKSlcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZW5jb2Rpbmcuc3BlYy53aGF0d2cub3JnLyN1dGYtOC1kZWNvZGVcbiAqIEBwYXJhbSB7QnVmZmVyfSBidWZmZXJcbiAqL1xuZnVuY3Rpb24gdXRmOERlY29kZUJ5dGVzIChidWZmZXIpIHtcbiAgaWYgKGJ1ZmZlci5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIC8vIDEuIExldCBidWZmZXIgYmUgdGhlIHJlc3VsdCBvZiBwZWVraW5nIHRocmVlIGJ5dGVzIGZyb21cbiAgLy8gICAgaW9RdWV1ZSwgY29udmVydGVkIHRvIGEgYnl0ZSBzZXF1ZW5jZS5cblxuICAvLyAyLiBJZiBidWZmZXIgaXMgMHhFRiAweEJCIDB4QkYsIHRoZW4gcmVhZCB0aHJlZVxuICAvLyAgICBieXRlcyBmcm9tIGlvUXVldWUuIChEbyBub3RoaW5nIHdpdGggdGhvc2UgYnl0ZXMuKVxuICBpZiAoYnVmZmVyWzBdID09PSAweEVGICYmIGJ1ZmZlclsxXSA9PT0gMHhCQiAmJiBidWZmZXJbMl0gPT09IDB4QkYpIHtcbiAgICBidWZmZXIgPSBidWZmZXIuc3ViYXJyYXkoMylcbiAgfVxuXG4gIC8vIDMuIFByb2Nlc3MgYSBxdWV1ZSB3aXRoIGFuIGluc3RhbmNlIG9mIFVURi044oCZc1xuICAvLyAgICBkZWNvZGVyLCBpb1F1ZXVlLCBvdXRwdXQsIGFuZCBcInJlcGxhY2VtZW50XCIuXG4gIGNvbnN0IG91dHB1dCA9IHRleHREZWNvZGVyLmRlY29kZShidWZmZXIpXG5cbiAgLy8gNC4gUmV0dXJuIG91dHB1dC5cbiAgcmV0dXJuIG91dHB1dFxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI3BhcnNlLWpzb24tYnl0ZXMtdG8tYS1qYXZhc2NyaXB0LXZhbHVlXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGJ5dGVzXG4gKi9cbmZ1bmN0aW9uIHBhcnNlSlNPTkZyb21CeXRlcyAoYnl0ZXMpIHtcbiAgcmV0dXJuIEpTT04ucGFyc2UodXRmOERlY29kZUJ5dGVzKGJ5dGVzKSlcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWJvZHktbWltZS10eXBlXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9yZXNwb25zZScpLlJlc3BvbnNlfGltcG9ydCgnLi9yZXF1ZXN0JykuUmVxdWVzdH0gb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIGJvZHlNaW1lVHlwZSAob2JqZWN0KSB7XG4gIGNvbnN0IHsgaGVhZGVyc0xpc3QgfSA9IG9iamVjdFtrU3RhdGVdXG4gIGNvbnN0IGNvbnRlbnRUeXBlID0gaGVhZGVyc0xpc3QuZ2V0KCdjb250ZW50LXR5cGUnKVxuXG4gIGlmIChjb250ZW50VHlwZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIHJldHVybiBwYXJzZU1JTUVUeXBlKGNvbnRlbnRUeXBlKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZXh0cmFjdEJvZHksXG4gIHNhZmVseUV4dHJhY3RCb2R5LFxuICBjbG9uZUJvZHksXG4gIG1peGluQm9keVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3Qge1xuICBJbnZhbGlkQXJndW1lbnRFcnJvcixcbiAgTm90U3VwcG9ydGVkRXJyb3Jcbn0gPSByZXF1aXJlKCcuL2Vycm9ycycpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBrSFRUUDJCdWlsZFJlcXVlc3QsIGtIVFRQMkNvcHlIZWFkZXJzLCBrSFRUUDFCdWlsZFJlcXVlc3QgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi91dGlsJylcblxuLy8gdG9rZW5SZWdFeHAgYW5kIGhlYWRlckNoYXJSZWdleCBoYXZlIGJlZW4gbGlmdGVkIGZyb21cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL21haW4vbGliL19odHRwX2NvbW1vbi5qc1xuXG4vKipcbiAqIFZlcmlmaWVzIHRoYXQgdGhlIGdpdmVuIHZhbCBpcyBhIHZhbGlkIEhUVFAgdG9rZW5cbiAqIHBlciB0aGUgcnVsZXMgZGVmaW5lZCBpbiBSRkMgNzIzMFxuICogU2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4yLjZcbiAqL1xuY29uc3QgdG9rZW5SZWdFeHAgPSAvXltcXF5fYGEtekEtWlxcLTAtOSEjJCUmJyorLnx+XSskL1xuXG4vKipcbiAqIE1hdGNoZXMgaWYgdmFsIGNvbnRhaW5zIGFuIGludmFsaWQgZmllbGQtdmNoYXJcbiAqICBmaWVsZC12YWx1ZSAgICA9ICooIGZpZWxkLWNvbnRlbnQgLyBvYnMtZm9sZCApXG4gKiAgZmllbGQtY29udGVudCAgPSBmaWVsZC12Y2hhciBbIDEqKCBTUCAvIEhUQUIgKSBmaWVsZC12Y2hhciBdXG4gKiAgZmllbGQtdmNoYXIgICAgPSBWQ0hBUiAvIG9icy10ZXh0XG4gKi9cbmNvbnN0IGhlYWRlckNoYXJSZWdleCA9IC9bXlxcdFxceDIwLVxceDdlXFx4ODAtXFx4ZmZdL1xuXG4vLyBWZXJpZmllcyB0aGF0IGEgZ2l2ZW4gcGF0aCBpcyB2YWxpZCBkb2VzIG5vdCBjb250YWluIGNvbnRyb2wgY2hhcnMgXFx4MDAgdG8gXFx4MjBcbmNvbnN0IGludmFsaWRQYXRoUmVnZXggPSAvW15cXHUwMDIxLVxcdTAwZmZdL1xuXG5jb25zdCBrSGFuZGxlciA9IFN5bWJvbCgnaGFuZGxlcicpXG5cbmNvbnN0IGNoYW5uZWxzID0ge31cblxubGV0IGV4dHJhY3RCb2R5XG5cbnRyeSB7XG4gIGNvbnN0IGRpYWdub3N0aWNzQ2hhbm5lbCA9IHJlcXVpcmUoJ2RpYWdub3N0aWNzX2NoYW5uZWwnKVxuICBjaGFubmVscy5jcmVhdGUgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOnJlcXVlc3Q6Y3JlYXRlJylcbiAgY2hhbm5lbHMuYm9keVNlbnQgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOnJlcXVlc3Q6Ym9keVNlbnQnKVxuICBjaGFubmVscy5oZWFkZXJzID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpyZXF1ZXN0OmhlYWRlcnMnKVxuICBjaGFubmVscy50cmFpbGVycyA9IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6cmVxdWVzdDp0cmFpbGVycycpXG4gIGNoYW5uZWxzLmVycm9yID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpyZXF1ZXN0OmVycm9yJylcbn0gY2F0Y2gge1xuICBjaGFubmVscy5jcmVhdGUgPSB7IGhhc1N1YnNjcmliZXJzOiBmYWxzZSB9XG4gIGNoYW5uZWxzLmJvZHlTZW50ID0geyBoYXNTdWJzY3JpYmVyczogZmFsc2UgfVxuICBjaGFubmVscy5oZWFkZXJzID0geyBoYXNTdWJzY3JpYmVyczogZmFsc2UgfVxuICBjaGFubmVscy50cmFpbGVycyA9IHsgaGFzU3Vic2NyaWJlcnM6IGZhbHNlIH1cbiAgY2hhbm5lbHMuZXJyb3IgPSB7IGhhc1N1YnNjcmliZXJzOiBmYWxzZSB9XG59XG5cbmNsYXNzIFJlcXVlc3Qge1xuICBjb25zdHJ1Y3RvciAob3JpZ2luLCB7XG4gICAgcGF0aCxcbiAgICBtZXRob2QsXG4gICAgYm9keSxcbiAgICBoZWFkZXJzLFxuICAgIHF1ZXJ5LFxuICAgIGlkZW1wb3RlbnQsXG4gICAgYmxvY2tpbmcsXG4gICAgdXBncmFkZSxcbiAgICBoZWFkZXJzVGltZW91dCxcbiAgICBib2R5VGltZW91dCxcbiAgICByZXNldCxcbiAgICB0aHJvd09uRXJyb3IsXG4gICAgZXhwZWN0Q29udGludWVcbiAgfSwgaGFuZGxlcikge1xuICAgIGlmICh0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigncGF0aCBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgcGF0aFswXSAhPT0gJy8nICYmXG4gICAgICAhKHBhdGguc3RhcnRzV2l0aCgnaHR0cDovLycpIHx8IHBhdGguc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSkgJiZcbiAgICAgIG1ldGhvZCAhPT0gJ0NPTk5FQ1QnXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3BhdGggbXVzdCBiZSBhbiBhYnNvbHV0ZSBVUkwgb3Igc3RhcnQgd2l0aCBhIHNsYXNoJylcbiAgICB9IGVsc2UgaWYgKGludmFsaWRQYXRoUmVnZXguZXhlYyhwYXRoKSAhPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIHJlcXVlc3QgcGF0aCcpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBtZXRob2QgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ21ldGhvZCBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9IGVsc2UgaWYgKHRva2VuUmVnRXhwLmV4ZWMobWV0aG9kKSA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIHJlcXVlc3QgbWV0aG9kJylcbiAgICB9XG5cbiAgICBpZiAodXBncmFkZSAmJiB0eXBlb2YgdXBncmFkZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndXBncmFkZSBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9XG5cbiAgICBpZiAoaGVhZGVyc1RpbWVvdXQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0Zpbml0ZShoZWFkZXJzVGltZW91dCkgfHwgaGVhZGVyc1RpbWVvdXQgPCAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGhlYWRlcnNUaW1lb3V0JylcbiAgICB9XG5cbiAgICBpZiAoYm9keVRpbWVvdXQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0Zpbml0ZShib2R5VGltZW91dCkgfHwgYm9keVRpbWVvdXQgPCAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGJvZHlUaW1lb3V0JylcbiAgICB9XG5cbiAgICBpZiAocmVzZXQgIT0gbnVsbCAmJiB0eXBlb2YgcmVzZXQgIT09ICdib29sZWFuJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIHJlc2V0JylcbiAgICB9XG5cbiAgICBpZiAoZXhwZWN0Q29udGludWUgIT0gbnVsbCAmJiB0eXBlb2YgZXhwZWN0Q29udGludWUgIT09ICdib29sZWFuJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGV4cGVjdENvbnRpbnVlJylcbiAgICB9XG5cbiAgICB0aGlzLmhlYWRlcnNUaW1lb3V0ID0gaGVhZGVyc1RpbWVvdXRcblxuICAgIHRoaXMuYm9keVRpbWVvdXQgPSBib2R5VGltZW91dFxuXG4gICAgdGhpcy50aHJvd09uRXJyb3IgPSB0aHJvd09uRXJyb3IgPT09IHRydWVcblxuICAgIHRoaXMubWV0aG9kID0gbWV0aG9kXG5cbiAgICB0aGlzLmFib3J0ID0gbnVsbFxuXG4gICAgaWYgKGJvZHkgPT0gbnVsbCkge1xuICAgICAgdGhpcy5ib2R5ID0gbnVsbFxuICAgIH0gZWxzZSBpZiAodXRpbC5pc1N0cmVhbShib2R5KSkge1xuICAgICAgdGhpcy5ib2R5ID0gYm9keVxuXG4gICAgICBjb25zdCByU3RhdGUgPSB0aGlzLmJvZHkuX3JlYWRhYmxlU3RhdGVcbiAgICAgIGlmICghclN0YXRlIHx8ICFyU3RhdGUuYXV0b0Rlc3Ryb3kpIHtcbiAgICAgICAgdGhpcy5lbmRIYW5kbGVyID0gZnVuY3Rpb24gYXV0b0Rlc3Ryb3kgKCkge1xuICAgICAgICAgIHV0aWwuZGVzdHJveSh0aGlzKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuYm9keS5vbignZW5kJywgdGhpcy5lbmRIYW5kbGVyKVxuICAgICAgfVxuXG4gICAgICB0aGlzLmVycm9ySGFuZGxlciA9IGVyciA9PiB7XG4gICAgICAgIGlmICh0aGlzLmFib3J0KSB7XG4gICAgICAgICAgdGhpcy5hYm9ydChlcnIpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5lcnJvciA9IGVyclxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmJvZHkub24oJ2Vycm9yJywgdGhpcy5lcnJvckhhbmRsZXIpXG4gICAgfSBlbHNlIGlmICh1dGlsLmlzQnVmZmVyKGJvZHkpKSB7XG4gICAgICB0aGlzLmJvZHkgPSBib2R5LmJ5dGVMZW5ndGggPyBib2R5IDogbnVsbFxuICAgIH0gZWxzZSBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KGJvZHkpKSB7XG4gICAgICB0aGlzLmJvZHkgPSBib2R5LmJ1ZmZlci5ieXRlTGVuZ3RoID8gQnVmZmVyLmZyb20oYm9keS5idWZmZXIsIGJvZHkuYnl0ZU9mZnNldCwgYm9keS5ieXRlTGVuZ3RoKSA6IG51bGxcbiAgICB9IGVsc2UgaWYgKGJvZHkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgICAgdGhpcy5ib2R5ID0gYm9keS5ieXRlTGVuZ3RoID8gQnVmZmVyLmZyb20oYm9keSkgOiBudWxsXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuYm9keSA9IGJvZHkubGVuZ3RoID8gQnVmZmVyLmZyb20oYm9keSkgOiBudWxsXG4gICAgfSBlbHNlIGlmICh1dGlsLmlzRm9ybURhdGFMaWtlKGJvZHkpIHx8IHV0aWwuaXNJdGVyYWJsZShib2R5KSB8fCB1dGlsLmlzQmxvYkxpa2UoYm9keSkpIHtcbiAgICAgIHRoaXMuYm9keSA9IGJvZHlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdib2R5IG11c3QgYmUgYSBzdHJpbmcsIGEgQnVmZmVyLCBhIFJlYWRhYmxlIHN0cmVhbSwgYW4gaXRlcmFibGUsIG9yIGFuIGFzeW5jIGl0ZXJhYmxlJylcbiAgICB9XG5cbiAgICB0aGlzLmNvbXBsZXRlZCA9IGZhbHNlXG5cbiAgICB0aGlzLmFib3J0ZWQgPSBmYWxzZVxuXG4gICAgdGhpcy51cGdyYWRlID0gdXBncmFkZSB8fCBudWxsXG5cbiAgICB0aGlzLnBhdGggPSBxdWVyeSA/IHV0aWwuYnVpbGRVUkwocGF0aCwgcXVlcnkpIDogcGF0aFxuXG4gICAgdGhpcy5vcmlnaW4gPSBvcmlnaW5cblxuICAgIHRoaXMuaWRlbXBvdGVudCA9IGlkZW1wb3RlbnQgPT0gbnVsbFxuICAgICAgPyBtZXRob2QgPT09ICdIRUFEJyB8fCBtZXRob2QgPT09ICdHRVQnXG4gICAgICA6IGlkZW1wb3RlbnRcblxuICAgIHRoaXMuYmxvY2tpbmcgPSBibG9ja2luZyA9PSBudWxsID8gZmFsc2UgOiBibG9ja2luZ1xuXG4gICAgdGhpcy5yZXNldCA9IHJlc2V0ID09IG51bGwgPyBudWxsIDogcmVzZXRcblxuICAgIHRoaXMuaG9zdCA9IG51bGxcblxuICAgIHRoaXMuY29udGVudExlbmd0aCA9IG51bGxcblxuICAgIHRoaXMuY29udGVudFR5cGUgPSBudWxsXG5cbiAgICB0aGlzLmhlYWRlcnMgPSAnJ1xuXG4gICAgLy8gT25seSBmb3IgSDJcbiAgICB0aGlzLmV4cGVjdENvbnRpbnVlID0gZXhwZWN0Q29udGludWUgIT0gbnVsbCA/IGV4cGVjdENvbnRpbnVlIDogZmFsc2VcblxuICAgIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgICBpZiAoaGVhZGVycy5sZW5ndGggJSAyICE9PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaGVhZGVycyBhcnJheSBtdXN0IGJlIGV2ZW4nKVxuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgIHByb2Nlc3NIZWFkZXIodGhpcywgaGVhZGVyc1tpXSwgaGVhZGVyc1tpICsgMV0pXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChoZWFkZXJzICYmIHR5cGVvZiBoZWFkZXJzID09PSAnb2JqZWN0Jykge1xuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGhlYWRlcnMpXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXVxuICAgICAgICBwcm9jZXNzSGVhZGVyKHRoaXMsIGtleSwgaGVhZGVyc1trZXldKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaGVhZGVycyAhPSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2hlYWRlcnMgbXVzdCBiZSBhbiBvYmplY3Qgb3IgYW4gYXJyYXknKVxuICAgIH1cblxuICAgIGlmICh1dGlsLmlzRm9ybURhdGFMaWtlKHRoaXMuYm9keSkpIHtcbiAgICAgIGlmICh1dGlsLm5vZGVNYWpvciA8IDE2IHx8ICh1dGlsLm5vZGVNYWpvciA9PT0gMTYgJiYgdXRpbC5ub2RlTWlub3IgPCA4KSkge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0Zvcm0tRGF0YSBib2RpZXMgYXJlIG9ubHkgc3VwcG9ydGVkIGluIG5vZGUgdjE2LjggYW5kIG5ld2VyLicpXG4gICAgICB9XG5cbiAgICAgIGlmICghZXh0cmFjdEJvZHkpIHtcbiAgICAgICAgZXh0cmFjdEJvZHkgPSByZXF1aXJlKCcuLi9mZXRjaC9ib2R5LmpzJykuZXh0cmFjdEJvZHlcbiAgICAgIH1cblxuICAgICAgY29uc3QgW2JvZHlTdHJlYW0sIGNvbnRlbnRUeXBlXSA9IGV4dHJhY3RCb2R5KGJvZHkpXG4gICAgICBpZiAodGhpcy5jb250ZW50VHlwZSA9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuY29udGVudFR5cGUgPSBjb250ZW50VHlwZVxuICAgICAgICB0aGlzLmhlYWRlcnMgKz0gYGNvbnRlbnQtdHlwZTogJHtjb250ZW50VHlwZX1cXHJcXG5gXG4gICAgICB9XG4gICAgICB0aGlzLmJvZHkgPSBib2R5U3RyZWFtLnN0cmVhbVxuICAgICAgdGhpcy5jb250ZW50TGVuZ3RoID0gYm9keVN0cmVhbS5sZW5ndGhcbiAgICB9IGVsc2UgaWYgKHV0aWwuaXNCbG9iTGlrZShib2R5KSAmJiB0aGlzLmNvbnRlbnRUeXBlID09IG51bGwgJiYgYm9keS50eXBlKSB7XG4gICAgICB0aGlzLmNvbnRlbnRUeXBlID0gYm9keS50eXBlXG4gICAgICB0aGlzLmhlYWRlcnMgKz0gYGNvbnRlbnQtdHlwZTogJHtib2R5LnR5cGV9XFxyXFxuYFxuICAgIH1cblxuICAgIHV0aWwudmFsaWRhdGVIYW5kbGVyKGhhbmRsZXIsIG1ldGhvZCwgdXBncmFkZSlcblxuICAgIHRoaXMuc2VydmVybmFtZSA9IHV0aWwuZ2V0U2VydmVyTmFtZSh0aGlzLmhvc3QpXG5cbiAgICB0aGlzW2tIYW5kbGVyXSA9IGhhbmRsZXJcblxuICAgIGlmIChjaGFubmVscy5jcmVhdGUuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICAgIGNoYW5uZWxzLmNyZWF0ZS5wdWJsaXNoKHsgcmVxdWVzdDogdGhpcyB9KVxuICAgIH1cbiAgfVxuXG4gIG9uQm9keVNlbnQgKGNodW5rKSB7XG4gICAgaWYgKHRoaXNba0hhbmRsZXJdLm9uQm9keVNlbnQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB0aGlzW2tIYW5kbGVyXS5vbkJvZHlTZW50KGNodW5rKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMuYWJvcnQoZXJyKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uUmVxdWVzdFNlbnQgKCkge1xuICAgIGlmIChjaGFubmVscy5ib2R5U2VudC5oYXNTdWJzY3JpYmVycykge1xuICAgICAgY2hhbm5lbHMuYm9keVNlbnQucHVibGlzaCh7IHJlcXVlc3Q6IHRoaXMgfSlcbiAgICB9XG5cbiAgICBpZiAodGhpc1trSGFuZGxlcl0ub25SZXF1ZXN0U2VudCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uUmVxdWVzdFNlbnQoKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMuYWJvcnQoZXJyKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uQ29ubmVjdCAoYWJvcnQpIHtcbiAgICBhc3NlcnQoIXRoaXMuYWJvcnRlZClcbiAgICBhc3NlcnQoIXRoaXMuY29tcGxldGVkKVxuXG4gICAgaWYgKHRoaXMuZXJyb3IpIHtcbiAgICAgIGFib3J0KHRoaXMuZXJyb3IpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uQ29ubmVjdChhYm9ydClcbiAgICB9XG4gIH1cblxuICBvbkhlYWRlcnMgKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHJlc3VtZSwgc3RhdHVzVGV4dCkge1xuICAgIGFzc2VydCghdGhpcy5hYm9ydGVkKVxuICAgIGFzc2VydCghdGhpcy5jb21wbGV0ZWQpXG5cbiAgICBpZiAoY2hhbm5lbHMuaGVhZGVycy5oYXNTdWJzY3JpYmVycykge1xuICAgICAgY2hhbm5lbHMuaGVhZGVycy5wdWJsaXNoKHsgcmVxdWVzdDogdGhpcywgcmVzcG9uc2U6IHsgc3RhdHVzQ29kZSwgaGVhZGVycywgc3RhdHVzVGV4dCB9IH0pXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzW2tIYW5kbGVyXS5vbkhlYWRlcnMoc3RhdHVzQ29kZSwgaGVhZGVycywgcmVzdW1lLCBzdGF0dXNUZXh0KVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5hYm9ydChlcnIpXG4gICAgfVxuICB9XG5cbiAgb25EYXRhIChjaHVuaykge1xuICAgIGFzc2VydCghdGhpcy5hYm9ydGVkKVxuICAgIGFzc2VydCghdGhpcy5jb21wbGV0ZWQpXG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uRGF0YShjaHVuaylcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuYWJvcnQoZXJyKVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgb25VcGdyYWRlIChzdGF0dXNDb2RlLCBoZWFkZXJzLCBzb2NrZXQpIHtcbiAgICBhc3NlcnQoIXRoaXMuYWJvcnRlZClcbiAgICBhc3NlcnQoIXRoaXMuY29tcGxldGVkKVxuXG4gICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uVXBncmFkZShzdGF0dXNDb2RlLCBoZWFkZXJzLCBzb2NrZXQpXG4gIH1cblxuICBvbkNvbXBsZXRlICh0cmFpbGVycykge1xuICAgIHRoaXMub25GaW5hbGx5KClcblxuICAgIGFzc2VydCghdGhpcy5hYm9ydGVkKVxuXG4gICAgdGhpcy5jb21wbGV0ZWQgPSB0cnVlXG4gICAgaWYgKGNoYW5uZWxzLnRyYWlsZXJzLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICBjaGFubmVscy50cmFpbGVycy5wdWJsaXNoKHsgcmVxdWVzdDogdGhpcywgdHJhaWxlcnMgfSlcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uQ29tcGxldGUodHJhaWxlcnMpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBUT0RPIChmaXgpOiBUaGlzIG1pZ2h0IGJlIGEgYmFkIGlkZWE/XG4gICAgICB0aGlzLm9uRXJyb3IoZXJyKVxuICAgIH1cbiAgfVxuXG4gIG9uRXJyb3IgKGVycm9yKSB7XG4gICAgdGhpcy5vbkZpbmFsbHkoKVxuXG4gICAgaWYgKGNoYW5uZWxzLmVycm9yLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICBjaGFubmVscy5lcnJvci5wdWJsaXNoKHsgcmVxdWVzdDogdGhpcywgZXJyb3IgfSlcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hYm9ydGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdGhpcy5hYm9ydGVkID0gdHJ1ZVxuXG4gICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uRXJyb3IoZXJyb3IpXG4gIH1cblxuICBvbkZpbmFsbHkgKCkge1xuICAgIGlmICh0aGlzLmVycm9ySGFuZGxlcikge1xuICAgICAgdGhpcy5ib2R5Lm9mZignZXJyb3InLCB0aGlzLmVycm9ySGFuZGxlcilcbiAgICAgIHRoaXMuZXJyb3JIYW5kbGVyID0gbnVsbFxuICAgIH1cblxuICAgIGlmICh0aGlzLmVuZEhhbmRsZXIpIHtcbiAgICAgIHRoaXMuYm9keS5vZmYoJ2VuZCcsIHRoaXMuZW5kSGFuZGxlcilcbiAgICAgIHRoaXMuZW5kSGFuZGxlciA9IG51bGxcbiAgICB9XG4gIH1cblxuICAvLyBUT0RPOiBhZGp1c3QgdG8gc3VwcG9ydCBIMlxuICBhZGRIZWFkZXIgKGtleSwgdmFsdWUpIHtcbiAgICBwcm9jZXNzSGVhZGVyKHRoaXMsIGtleSwgdmFsdWUpXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIHN0YXRpYyBba0hUVFAxQnVpbGRSZXF1ZXN0XSAob3JpZ2luLCBvcHRzLCBoYW5kbGVyKSB7XG4gICAgLy8gVE9ETzogTWlncmF0ZSBoZWFkZXIgcGFyc2luZyBoZXJlLCB0byBtYWtlIFJlcXVlc3RzXG4gICAgLy8gSFRUUCBhZ25vc3RpY1xuICAgIHJldHVybiBuZXcgUmVxdWVzdChvcmlnaW4sIG9wdHMsIGhhbmRsZXIpXG4gIH1cblxuICBzdGF0aWMgW2tIVFRQMkJ1aWxkUmVxdWVzdF0gKG9yaWdpbiwgb3B0cywgaGFuZGxlcikge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBvcHRzLmhlYWRlcnNcbiAgICBvcHRzID0geyAuLi5vcHRzLCBoZWFkZXJzOiBudWxsIH1cblxuICAgIGNvbnN0IHJlcXVlc3QgPSBuZXcgUmVxdWVzdChvcmlnaW4sIG9wdHMsIGhhbmRsZXIpXG5cbiAgICByZXF1ZXN0LmhlYWRlcnMgPSB7fVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICAgIGlmIChoZWFkZXJzLmxlbmd0aCAlIDIgIT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdoZWFkZXJzIGFycmF5IG11c3QgYmUgZXZlbicpXG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgcHJvY2Vzc0hlYWRlcihyZXF1ZXN0LCBoZWFkZXJzW2ldLCBoZWFkZXJzW2kgKyAxXSwgdHJ1ZSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGhlYWRlcnMgJiYgdHlwZW9mIGhlYWRlcnMgPT09ICdvYmplY3QnKSB7XG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoaGVhZGVycylcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBrZXkgPSBrZXlzW2ldXG4gICAgICAgIHByb2Nlc3NIZWFkZXIocmVxdWVzdCwga2V5LCBoZWFkZXJzW2tleV0sIHRydWUpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChoZWFkZXJzICE9IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaGVhZGVycyBtdXN0IGJlIGFuIG9iamVjdCBvciBhbiBhcnJheScpXG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcXVlc3RcbiAgfVxuXG4gIHN0YXRpYyBba0hUVFAyQ29weUhlYWRlcnNdIChyYXcpIHtcbiAgICBjb25zdCByYXdIZWFkZXJzID0gcmF3LnNwbGl0KCdcXHJcXG4nKVxuICAgIGNvbnN0IGhlYWRlcnMgPSB7fVxuXG4gICAgZm9yIChjb25zdCBoZWFkZXIgb2YgcmF3SGVhZGVycykge1xuICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0gaGVhZGVyLnNwbGl0KCc6ICcpXG5cbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlLmxlbmd0aCA9PT0gMCkgY29udGludWVcblxuICAgICAgaWYgKGhlYWRlcnNba2V5XSkgaGVhZGVyc1trZXldICs9IGAsJHt2YWx1ZX1gXG4gICAgICBlbHNlIGhlYWRlcnNba2V5XSA9IHZhbHVlXG4gICAgfVxuXG4gICAgcmV0dXJuIGhlYWRlcnNcbiAgfVxufVxuXG5mdW5jdGlvbiBwcm9jZXNzSGVhZGVyVmFsdWUgKGtleSwgdmFsLCBza2lwQXBwZW5kKSB7XG4gIGlmICh2YWwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoYGludmFsaWQgJHtrZXl9IGhlYWRlcmApXG4gIH1cblxuICB2YWwgPSB2YWwgIT0gbnVsbCA/IGAke3ZhbH1gIDogJydcblxuICBpZiAoaGVhZGVyQ2hhclJlZ2V4LmV4ZWModmFsKSAhPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihgaW52YWxpZCAke2tleX0gaGVhZGVyYClcbiAgfVxuXG4gIHJldHVybiBza2lwQXBwZW5kID8gdmFsIDogYCR7a2V5fTogJHt2YWx9XFxyXFxuYFxufVxuXG5mdW5jdGlvbiBwcm9jZXNzSGVhZGVyIChyZXF1ZXN0LCBrZXksIHZhbCwgc2tpcEFwcGVuZCA9IGZhbHNlKSB7XG4gIGlmICh2YWwgJiYgKHR5cGVvZiB2YWwgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbCkpKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKGBpbnZhbGlkICR7a2V5fSBoZWFkZXJgKVxuICB9IGVsc2UgaWYgKHZhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoXG4gICAgcmVxdWVzdC5ob3N0ID09PSBudWxsICYmXG4gICAga2V5Lmxlbmd0aCA9PT0gNCAmJlxuICAgIGtleS50b0xvd2VyQ2FzZSgpID09PSAnaG9zdCdcbiAgKSB7XG4gICAgaWYgKGhlYWRlckNoYXJSZWdleC5leGVjKHZhbCkgIT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihgaW52YWxpZCAke2tleX0gaGVhZGVyYClcbiAgICB9XG4gICAgLy8gQ29uc3VtZWQgYnkgQ2xpZW50XG4gICAgcmVxdWVzdC5ob3N0ID0gdmFsXG4gIH0gZWxzZSBpZiAoXG4gICAgcmVxdWVzdC5jb250ZW50TGVuZ3RoID09PSBudWxsICYmXG4gICAga2V5Lmxlbmd0aCA9PT0gMTQgJiZcbiAgICBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtbGVuZ3RoJ1xuICApIHtcbiAgICByZXF1ZXN0LmNvbnRlbnRMZW5ndGggPSBwYXJzZUludCh2YWwsIDEwKVxuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHJlcXVlc3QuY29udGVudExlbmd0aCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjb250ZW50LWxlbmd0aCBoZWFkZXInKVxuICAgIH1cbiAgfSBlbHNlIGlmIChcbiAgICByZXF1ZXN0LmNvbnRlbnRUeXBlID09PSBudWxsICYmXG4gICAga2V5Lmxlbmd0aCA9PT0gMTIgJiZcbiAgICBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtdHlwZSdcbiAgKSB7XG4gICAgcmVxdWVzdC5jb250ZW50VHlwZSA9IHZhbFxuICAgIGlmIChza2lwQXBwZW5kKSByZXF1ZXN0LmhlYWRlcnNba2V5XSA9IHByb2Nlc3NIZWFkZXJWYWx1ZShrZXksIHZhbCwgc2tpcEFwcGVuZClcbiAgICBlbHNlIHJlcXVlc3QuaGVhZGVycyArPSBwcm9jZXNzSGVhZGVyVmFsdWUoa2V5LCB2YWwpXG4gIH0gZWxzZSBpZiAoXG4gICAga2V5Lmxlbmd0aCA9PT0gMTcgJiZcbiAgICBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3RyYW5zZmVyLWVuY29kaW5nJ1xuICApIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgdHJhbnNmZXItZW5jb2RpbmcgaGVhZGVyJylcbiAgfSBlbHNlIGlmIChcbiAgICBrZXkubGVuZ3RoID09PSAxMCAmJlxuICAgIGtleS50b0xvd2VyQ2FzZSgpID09PSAnY29ubmVjdGlvbidcbiAgKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0eXBlb2YgdmFsID09PSAnc3RyaW5nJyA/IHZhbC50b0xvd2VyQ2FzZSgpIDogbnVsbFxuICAgIGlmICh2YWx1ZSAhPT0gJ2Nsb3NlJyAmJiB2YWx1ZSAhPT0gJ2tlZXAtYWxpdmUnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY29ubmVjdGlvbiBoZWFkZXInKVxuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09ICdjbG9zZScpIHtcbiAgICAgIHJlcXVlc3QucmVzZXQgPSB0cnVlXG4gICAgfVxuICB9IGVsc2UgaWYgKFxuICAgIGtleS5sZW5ndGggPT09IDEwICYmXG4gICAga2V5LnRvTG93ZXJDYXNlKCkgPT09ICdrZWVwLWFsaXZlJ1xuICApIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQga2VlcC1hbGl2ZSBoZWFkZXInKVxuICB9IGVsc2UgaWYgKFxuICAgIGtleS5sZW5ndGggPT09IDcgJiZcbiAgICBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3VwZ3JhZGUnXG4gICkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCB1cGdyYWRlIGhlYWRlcicpXG4gIH0gZWxzZSBpZiAoXG4gICAga2V5Lmxlbmd0aCA9PT0gNiAmJlxuICAgIGtleS50b0xvd2VyQ2FzZSgpID09PSAnZXhwZWN0J1xuICApIHtcbiAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkRXJyb3IoJ2V4cGVjdCBoZWFkZXIgbm90IHN1cHBvcnRlZCcpXG4gIH0gZWxzZSBpZiAodG9rZW5SZWdFeHAuZXhlYyhrZXkpID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGhlYWRlciBrZXknKVxuICB9IGVsc2Uge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChza2lwQXBwZW5kKSB7XG4gICAgICAgICAgaWYgKHJlcXVlc3QuaGVhZGVyc1trZXldKSByZXF1ZXN0LmhlYWRlcnNba2V5XSArPSBgLCR7cHJvY2Vzc0hlYWRlclZhbHVlKGtleSwgdmFsW2ldLCBza2lwQXBwZW5kKX1gXG4gICAgICAgICAgZWxzZSByZXF1ZXN0LmhlYWRlcnNba2V5XSA9IHByb2Nlc3NIZWFkZXJWYWx1ZShrZXksIHZhbFtpXSwgc2tpcEFwcGVuZClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXF1ZXN0LmhlYWRlcnMgKz0gcHJvY2Vzc0hlYWRlclZhbHVlKGtleSwgdmFsW2ldKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChza2lwQXBwZW5kKSByZXF1ZXN0LmhlYWRlcnNba2V5XSA9IHByb2Nlc3NIZWFkZXJWYWx1ZShrZXksIHZhbCwgc2tpcEFwcGVuZClcbiAgICAgIGVsc2UgcmVxdWVzdC5oZWFkZXJzICs9IHByb2Nlc3NIZWFkZXJWYWx1ZShrZXksIHZhbClcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBSZXF1ZXN0XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudHMnKVxuXG5jbGFzcyBEaXNwYXRjaGVyIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgZGlzcGF0Y2ggKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignbm90IGltcGxlbWVudGVkJylcbiAgfVxuXG4gIGNsb3NlICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBpbXBsZW1lbnRlZCcpXG4gIH1cblxuICBkZXN0cm95ICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBpbXBsZW1lbnRlZCcpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBEaXNwYXRjaGVyXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBEaXNwYXRjaGVyID0gcmVxdWlyZSgnLi9kaXNwYXRjaGVyJylcbmNvbnN0IHtcbiAgQ2xpZW50RGVzdHJveWVkRXJyb3IsXG4gIENsaWVudENsb3NlZEVycm9yLFxuICBJbnZhbGlkQXJndW1lbnRFcnJvclxufSA9IHJlcXVpcmUoJy4vY29yZS9lcnJvcnMnKVxuY29uc3QgeyBrRGVzdHJveSwga0Nsb3NlLCBrRGlzcGF0Y2gsIGtJbnRlcmNlcHRvcnMgfSA9IHJlcXVpcmUoJy4vY29yZS9zeW1ib2xzJylcblxuY29uc3Qga0Rlc3Ryb3llZCA9IFN5bWJvbCgnZGVzdHJveWVkJylcbmNvbnN0IGtDbG9zZWQgPSBTeW1ib2woJ2Nsb3NlZCcpXG5jb25zdCBrT25EZXN0cm95ZWQgPSBTeW1ib2woJ29uRGVzdHJveWVkJylcbmNvbnN0IGtPbkNsb3NlZCA9IFN5bWJvbCgnb25DbG9zZWQnKVxuY29uc3Qga0ludGVyY2VwdGVkRGlzcGF0Y2ggPSBTeW1ib2woJ0ludGVyY2VwdGVkIERpc3BhdGNoJylcblxuY2xhc3MgRGlzcGF0Y2hlckJhc2UgZXh0ZW5kcyBEaXNwYXRjaGVyIHtcbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXNba0Rlc3Ryb3llZF0gPSBmYWxzZVxuICAgIHRoaXNba09uRGVzdHJveWVkXSA9IG51bGxcbiAgICB0aGlzW2tDbG9zZWRdID0gZmFsc2VcbiAgICB0aGlzW2tPbkNsb3NlZF0gPSBbXVxuICB9XG5cbiAgZ2V0IGRlc3Ryb3llZCAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0Rlc3Ryb3llZF1cbiAgfVxuXG4gIGdldCBjbG9zZWQgKCkge1xuICAgIHJldHVybiB0aGlzW2tDbG9zZWRdXG4gIH1cblxuICBnZXQgaW50ZXJjZXB0b3JzICgpIHtcbiAgICByZXR1cm4gdGhpc1trSW50ZXJjZXB0b3JzXVxuICB9XG5cbiAgc2V0IGludGVyY2VwdG9ycyAobmV3SW50ZXJjZXB0b3JzKSB7XG4gICAgaWYgKG5ld0ludGVyY2VwdG9ycykge1xuICAgICAgZm9yIChsZXQgaSA9IG5ld0ludGVyY2VwdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBjb25zdCBpbnRlcmNlcHRvciA9IHRoaXNba0ludGVyY2VwdG9yc11baV1cbiAgICAgICAgaWYgKHR5cGVvZiBpbnRlcmNlcHRvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW50ZXJjZXB0b3IgbXVzdCBiZSBhbiBmdW5jdGlvbicpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzW2tJbnRlcmNlcHRvcnNdID0gbmV3SW50ZXJjZXB0b3JzXG4gIH1cblxuICBjbG9zZSAoY2FsbGJhY2spIHtcbiAgICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgdGhpcy5jbG9zZSgoZXJyLCBkYXRhKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGVyciA/IHJlamVjdChlcnIpIDogcmVzb2x2ZShkYXRhKVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY2FsbGJhY2snKVxuICAgIH1cblxuICAgIGlmICh0aGlzW2tEZXN0cm95ZWRdKSB7XG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhuZXcgQ2xpZW50RGVzdHJveWVkRXJyb3IoKSwgbnVsbCkpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAodGhpc1trQ2xvc2VkXSkge1xuICAgICAgaWYgKHRoaXNba09uQ2xvc2VkXSkge1xuICAgICAgICB0aGlzW2tPbkNsb3NlZF0ucHVzaChjYWxsYmFjaylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGNhbGxiYWNrKG51bGwsIG51bGwpKVxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpc1trQ2xvc2VkXSA9IHRydWVcbiAgICB0aGlzW2tPbkNsb3NlZF0ucHVzaChjYWxsYmFjaylcblxuICAgIGNvbnN0IG9uQ2xvc2VkID0gKCkgPT4ge1xuICAgICAgY29uc3QgY2FsbGJhY2tzID0gdGhpc1trT25DbG9zZWRdXG4gICAgICB0aGlzW2tPbkNsb3NlZF0gPSBudWxsXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNhbGxiYWNrcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjYWxsYmFja3NbaV0obnVsbCwgbnVsbClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTaG91bGQgbm90IGVycm9yLlxuICAgIHRoaXNba0Nsb3NlXSgpXG4gICAgICAudGhlbigoKSA9PiB0aGlzLmRlc3Ryb3koKSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgcXVldWVNaWNyb3Rhc2sob25DbG9zZWQpXG4gICAgICB9KVxuICB9XG5cbiAgZGVzdHJveSAoZXJyLCBjYWxsYmFjaykge1xuICAgIGlmICh0eXBlb2YgZXJyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjYWxsYmFjayA9IGVyclxuICAgICAgZXJyID0gbnVsbFxuICAgIH1cblxuICAgIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICB0aGlzLmRlc3Ryb3koZXJyLCAoZXJyLCBkYXRhKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGVyciA/IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBzaG91bGQgbmV2ZXIgZXJyb3IgKi8gcmVqZWN0KGVycikgOiByZXNvbHZlKGRhdGEpXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjYWxsYmFjaycpXG4gICAgfVxuXG4gICAgaWYgKHRoaXNba0Rlc3Ryb3llZF0pIHtcbiAgICAgIGlmICh0aGlzW2tPbkRlc3Ryb3llZF0pIHtcbiAgICAgICAgdGhpc1trT25EZXN0cm95ZWRdLnB1c2goY2FsbGJhY2spXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhudWxsLCBudWxsKSlcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghZXJyKSB7XG4gICAgICBlcnIgPSBuZXcgQ2xpZW50RGVzdHJveWVkRXJyb3IoKVxuICAgIH1cblxuICAgIHRoaXNba0Rlc3Ryb3llZF0gPSB0cnVlXG4gICAgdGhpc1trT25EZXN0cm95ZWRdID0gdGhpc1trT25EZXN0cm95ZWRdIHx8IFtdXG4gICAgdGhpc1trT25EZXN0cm95ZWRdLnB1c2goY2FsbGJhY2spXG5cbiAgICBjb25zdCBvbkRlc3Ryb3llZCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGNhbGxiYWNrcyA9IHRoaXNba09uRGVzdHJveWVkXVxuICAgICAgdGhpc1trT25EZXN0cm95ZWRdID0gbnVsbFxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjYWxsYmFja3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY2FsbGJhY2tzW2ldKG51bGwsIG51bGwpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2hvdWxkIG5vdCBlcnJvci5cbiAgICB0aGlzW2tEZXN0cm95XShlcnIpLnRoZW4oKCkgPT4ge1xuICAgICAgcXVldWVNaWNyb3Rhc2sob25EZXN0cm95ZWQpXG4gICAgfSlcbiAgfVxuXG4gIFtrSW50ZXJjZXB0ZWREaXNwYXRjaF0gKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBpZiAoIXRoaXNba0ludGVyY2VwdG9yc10gfHwgdGhpc1trSW50ZXJjZXB0b3JzXS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXNba0ludGVyY2VwdGVkRGlzcGF0Y2hdID0gdGhpc1trRGlzcGF0Y2hdXG4gICAgICByZXR1cm4gdGhpc1trRGlzcGF0Y2hdKG9wdHMsIGhhbmRsZXIpXG4gICAgfVxuXG4gICAgbGV0IGRpc3BhdGNoID0gdGhpc1trRGlzcGF0Y2hdLmJpbmQodGhpcylcbiAgICBmb3IgKGxldCBpID0gdGhpc1trSW50ZXJjZXB0b3JzXS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgZGlzcGF0Y2ggPSB0aGlzW2tJbnRlcmNlcHRvcnNdW2ldKGRpc3BhdGNoKVxuICAgIH1cbiAgICB0aGlzW2tJbnRlcmNlcHRlZERpc3BhdGNoXSA9IGRpc3BhdGNoXG4gICAgcmV0dXJuIGRpc3BhdGNoKG9wdHMsIGhhbmRsZXIpXG4gIH1cblxuICBkaXNwYXRjaCAob3B0cywgaGFuZGxlcikge1xuICAgIGlmICghaGFuZGxlciB8fCB0eXBlb2YgaGFuZGxlciAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaGFuZGxlciBtdXN0IGJlIGFuIG9iamVjdCcpXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGlmICghb3B0cyB8fCB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdvcHRzIG11c3QgYmUgYW4gb2JqZWN0LicpXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzW2tEZXN0cm95ZWRdIHx8IHRoaXNba09uRGVzdHJveWVkXSkge1xuICAgICAgICB0aHJvdyBuZXcgQ2xpZW50RGVzdHJveWVkRXJyb3IoKVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpc1trQ2xvc2VkXSkge1xuICAgICAgICB0aHJvdyBuZXcgQ2xpZW50Q2xvc2VkRXJyb3IoKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpc1trSW50ZXJjZXB0ZWREaXNwYXRjaF0ob3B0cywgaGFuZGxlcilcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICh0eXBlb2YgaGFuZGxlci5vbkVycm9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkVycm9yIG1ldGhvZCcpXG4gICAgICB9XG5cbiAgICAgIGhhbmRsZXIub25FcnJvcihlcnIpXG5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IERpc3BhdGNoZXJCYXNlXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBuZXQgPSByZXF1aXJlKCduZXQnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciwgQ29ubmVjdFRpbWVvdXRFcnJvciB9ID0gcmVxdWlyZSgnLi9lcnJvcnMnKVxuXG5sZXQgdGxzIC8vIGluY2x1ZGUgdGxzIGNvbmRpdGlvbmFsbHkgc2luY2UgaXQgaXMgbm90IGFsd2F5cyBhdmFpbGFibGVcblxuLy8gVE9ETzogc2Vzc2lvbiByZS11c2UgZG9lcyBub3Qgd2FpdCBmb3IgdGhlIGZpcnN0XG4vLyBjb25uZWN0aW9uIHRvIHJlc29sdmUgdGhlIHNlc3Npb24gYW5kIG1pZ2h0IHRoZXJlZm9yZVxuLy8gcmVzb2x2ZSB0aGUgc2FtZSBzZXJ2ZXJuYW1lIG11bHRpcGxlIHRpbWVzIGV2ZW4gd2hlblxuLy8gcmUtdXNlIGlzIGVuYWJsZWQuXG5cbmxldCBTZXNzaW9uQ2FjaGVcbi8vIEZJWE1FOiByZW1vdmUgd29ya2Fyb3VuZCB3aGVuIHRoZSBOb2RlIGJ1ZyBpcyBmaXhlZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2lzc3Vlcy80OTM0NCNpc3N1ZWNvbW1lbnQtMTc0MTc3NjMwOFxuaWYgKGdsb2JhbC5GaW5hbGl6YXRpb25SZWdpc3RyeSAmJiAhcHJvY2Vzcy5lbnYuTk9ERV9WOF9DT1ZFUkFHRSkge1xuICBTZXNzaW9uQ2FjaGUgPSBjbGFzcyBXZWFrU2Vzc2lvbkNhY2hlIHtcbiAgICBjb25zdHJ1Y3RvciAobWF4Q2FjaGVkU2Vzc2lvbnMpIHtcbiAgICAgIHRoaXMuX21heENhY2hlZFNlc3Npb25zID0gbWF4Q2FjaGVkU2Vzc2lvbnNcbiAgICAgIHRoaXMuX3Nlc3Npb25DYWNoZSA9IG5ldyBNYXAoKVxuICAgICAgdGhpcy5fc2Vzc2lvblJlZ2lzdHJ5ID0gbmV3IGdsb2JhbC5GaW5hbGl6YXRpb25SZWdpc3RyeSgoa2V5KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9zZXNzaW9uQ2FjaGUuc2l6ZSA8IHRoaXMuX21heENhY2hlZFNlc3Npb25zKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZWYgPSB0aGlzLl9zZXNzaW9uQ2FjaGUuZ2V0KGtleSlcbiAgICAgICAgaWYgKHJlZiAhPT0gdW5kZWZpbmVkICYmIHJlZi5kZXJlZigpID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLl9zZXNzaW9uQ2FjaGUuZGVsZXRlKGtleSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBnZXQgKHNlc3Npb25LZXkpIHtcbiAgICAgIGNvbnN0IHJlZiA9IHRoaXMuX3Nlc3Npb25DYWNoZS5nZXQoc2Vzc2lvbktleSlcbiAgICAgIHJldHVybiByZWYgPyByZWYuZGVyZWYoKSA6IG51bGxcbiAgICB9XG5cbiAgICBzZXQgKHNlc3Npb25LZXksIHNlc3Npb24pIHtcbiAgICAgIGlmICh0aGlzLl9tYXhDYWNoZWRTZXNzaW9ucyA9PT0gMCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgdGhpcy5fc2Vzc2lvbkNhY2hlLnNldChzZXNzaW9uS2V5LCBuZXcgV2Vha1JlZihzZXNzaW9uKSlcbiAgICAgIHRoaXMuX3Nlc3Npb25SZWdpc3RyeS5yZWdpc3RlcihzZXNzaW9uLCBzZXNzaW9uS2V5KVxuICAgIH1cbiAgfVxufSBlbHNlIHtcbiAgU2Vzc2lvbkNhY2hlID0gY2xhc3MgU2ltcGxlU2Vzc2lvbkNhY2hlIHtcbiAgICBjb25zdHJ1Y3RvciAobWF4Q2FjaGVkU2Vzc2lvbnMpIHtcbiAgICAgIHRoaXMuX21heENhY2hlZFNlc3Npb25zID0gbWF4Q2FjaGVkU2Vzc2lvbnNcbiAgICAgIHRoaXMuX3Nlc3Npb25DYWNoZSA9IG5ldyBNYXAoKVxuICAgIH1cblxuICAgIGdldCAoc2Vzc2lvbktleSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3Nlc3Npb25DYWNoZS5nZXQoc2Vzc2lvbktleSlcbiAgICB9XG5cbiAgICBzZXQgKHNlc3Npb25LZXksIHNlc3Npb24pIHtcbiAgICAgIGlmICh0aGlzLl9tYXhDYWNoZWRTZXNzaW9ucyA9PT0gMCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX3Nlc3Npb25DYWNoZS5zaXplID49IHRoaXMuX21heENhY2hlZFNlc3Npb25zKSB7XG4gICAgICAgIC8vIHJlbW92ZSB0aGUgb2xkZXN0IHNlc3Npb25cbiAgICAgICAgY29uc3QgeyB2YWx1ZTogb2xkZXN0S2V5IH0gPSB0aGlzLl9zZXNzaW9uQ2FjaGUua2V5cygpLm5leHQoKVxuICAgICAgICB0aGlzLl9zZXNzaW9uQ2FjaGUuZGVsZXRlKG9sZGVzdEtleSlcbiAgICAgIH1cblxuICAgICAgdGhpcy5fc2Vzc2lvbkNhY2hlLnNldChzZXNzaW9uS2V5LCBzZXNzaW9uKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBidWlsZENvbm5lY3RvciAoeyBhbGxvd0gyLCBtYXhDYWNoZWRTZXNzaW9ucywgc29ja2V0UGF0aCwgdGltZW91dCwgLi4ub3B0cyB9KSB7XG4gIGlmIChtYXhDYWNoZWRTZXNzaW9ucyAhPSBudWxsICYmICghTnVtYmVyLmlzSW50ZWdlcihtYXhDYWNoZWRTZXNzaW9ucykgfHwgbWF4Q2FjaGVkU2Vzc2lvbnMgPCAwKSkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignbWF4Q2FjaGVkU2Vzc2lvbnMgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgb3IgemVybycpXG4gIH1cblxuICBjb25zdCBvcHRpb25zID0geyBwYXRoOiBzb2NrZXRQYXRoLCAuLi5vcHRzIH1cbiAgY29uc3Qgc2Vzc2lvbkNhY2hlID0gbmV3IFNlc3Npb25DYWNoZShtYXhDYWNoZWRTZXNzaW9ucyA9PSBudWxsID8gMTAwIDogbWF4Q2FjaGVkU2Vzc2lvbnMpXG4gIHRpbWVvdXQgPSB0aW1lb3V0ID09IG51bGwgPyAxMGUzIDogdGltZW91dFxuICBhbGxvd0gyID0gYWxsb3dIMiAhPSBudWxsID8gYWxsb3dIMiA6IGZhbHNlXG4gIHJldHVybiBmdW5jdGlvbiBjb25uZWN0ICh7IGhvc3RuYW1lLCBob3N0LCBwcm90b2NvbCwgcG9ydCwgc2VydmVybmFtZSwgbG9jYWxBZGRyZXNzLCBodHRwU29ja2V0IH0sIGNhbGxiYWNrKSB7XG4gICAgbGV0IHNvY2tldFxuICAgIGlmIChwcm90b2NvbCA9PT0gJ2h0dHBzOicpIHtcbiAgICAgIGlmICghdGxzKSB7XG4gICAgICAgIHRscyA9IHJlcXVpcmUoJ3RscycpXG4gICAgICB9XG4gICAgICBzZXJ2ZXJuYW1lID0gc2VydmVybmFtZSB8fCBvcHRpb25zLnNlcnZlcm5hbWUgfHwgdXRpbC5nZXRTZXJ2ZXJOYW1lKGhvc3QpIHx8IG51bGxcblxuICAgICAgY29uc3Qgc2Vzc2lvbktleSA9IHNlcnZlcm5hbWUgfHwgaG9zdG5hbWVcbiAgICAgIGNvbnN0IHNlc3Npb24gPSBzZXNzaW9uQ2FjaGUuZ2V0KHNlc3Npb25LZXkpIHx8IG51bGxcblxuICAgICAgYXNzZXJ0KHNlc3Npb25LZXkpXG5cbiAgICAgIHNvY2tldCA9IHRscy5jb25uZWN0KHtcbiAgICAgICAgaGlnaFdhdGVyTWFyazogMTYzODQsIC8vIFRMUyBpbiBub2RlIGNhbid0IGhhdmUgYmlnZ2VyIEhXTSBhbnl3YXkuLi5cbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgc2VydmVybmFtZSxcbiAgICAgICAgc2Vzc2lvbixcbiAgICAgICAgbG9jYWxBZGRyZXNzLFxuICAgICAgICAvLyBUT0RPKEhUVFAvMik6IEFkZCBzdXBwb3J0IGZvciBoMmNcbiAgICAgICAgQUxQTlByb3RvY29sczogYWxsb3dIMiA/IFsnaHR0cC8xLjEnLCAnaDInXSA6IFsnaHR0cC8xLjEnXSxcbiAgICAgICAgc29ja2V0OiBodHRwU29ja2V0LCAvLyB1cGdyYWRlIHNvY2tldCBjb25uZWN0aW9uXG4gICAgICAgIHBvcnQ6IHBvcnQgfHwgNDQzLFxuICAgICAgICBob3N0OiBob3N0bmFtZVxuICAgICAgfSlcblxuICAgICAgc29ja2V0XG4gICAgICAgIC5vbignc2Vzc2lvbicsIGZ1bmN0aW9uIChzZXNzaW9uKSB7XG4gICAgICAgICAgLy8gVE9ETyAoZml4KTogQ2FuIGEgc2Vzc2lvbiBiZWNvbWUgaW52YWxpZCBvbmNlIGVzdGFibGlzaGVkPyBEb24ndCB0aGluayBzbz9cbiAgICAgICAgICBzZXNzaW9uQ2FjaGUuc2V0KHNlc3Npb25LZXksIHNlc3Npb24pXG4gICAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydCghaHR0cFNvY2tldCwgJ2h0dHBTb2NrZXQgY2FuIG9ubHkgYmUgc2VudCBvbiBUTFMgdXBkYXRlJylcbiAgICAgIHNvY2tldCA9IG5ldC5jb25uZWN0KHtcbiAgICAgICAgaGlnaFdhdGVyTWFyazogNjQgKiAxMDI0LCAvLyBTYW1lIGFzIG5vZGVqcyBmcyBzdHJlYW1zLlxuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICBsb2NhbEFkZHJlc3MsXG4gICAgICAgIHBvcnQ6IHBvcnQgfHwgODAsXG4gICAgICAgIGhvc3Q6IGhvc3RuYW1lXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIFNldCBUQ1Aga2VlcCBhbGl2ZSBvcHRpb25zIG9uIHRoZSBzb2NrZXQgaGVyZSBpbnN0ZWFkIG9mIGluIGNvbm5lY3QoKSBmb3IgdGhlIGNhc2Ugb2YgYXNzaWduaW5nIHRoZSBzb2NrZXRcbiAgICBpZiAob3B0aW9ucy5rZWVwQWxpdmUgPT0gbnVsbCB8fCBvcHRpb25zLmtlZXBBbGl2ZSkge1xuICAgICAgY29uc3Qga2VlcEFsaXZlSW5pdGlhbERlbGF5ID0gb3B0aW9ucy5rZWVwQWxpdmVJbml0aWFsRGVsYXkgPT09IHVuZGVmaW5lZCA/IDYwZTMgOiBvcHRpb25zLmtlZXBBbGl2ZUluaXRpYWxEZWxheVxuICAgICAgc29ja2V0LnNldEtlZXBBbGl2ZSh0cnVlLCBrZWVwQWxpdmVJbml0aWFsRGVsYXkpXG4gICAgfVxuXG4gICAgY29uc3QgY2FuY2VsVGltZW91dCA9IHNldHVwVGltZW91dCgoKSA9PiBvbkNvbm5lY3RUaW1lb3V0KHNvY2tldCksIHRpbWVvdXQpXG5cbiAgICBzb2NrZXRcbiAgICAgIC5zZXROb0RlbGF5KHRydWUpXG4gICAgICAub25jZShwcm90b2NvbCA9PT0gJ2h0dHBzOicgPyAnc2VjdXJlQ29ubmVjdCcgOiAnY29ubmVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY2FuY2VsVGltZW91dCgpXG5cbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgY29uc3QgY2IgPSBjYWxsYmFja1xuICAgICAgICAgIGNhbGxiYWNrID0gbnVsbFxuICAgICAgICAgIGNiKG51bGwsIHRoaXMpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAub24oJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBjYW5jZWxUaW1lb3V0KClcblxuICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICBjb25zdCBjYiA9IGNhbGxiYWNrXG4gICAgICAgICAgY2FsbGJhY2sgPSBudWxsXG4gICAgICAgICAgY2IoZXJyKVxuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgcmV0dXJuIHNvY2tldFxuICB9XG59XG5cbmZ1bmN0aW9uIHNldHVwVGltZW91dCAob25Db25uZWN0VGltZW91dCwgdGltZW91dCkge1xuICBpZiAoIXRpbWVvdXQpIHtcbiAgICByZXR1cm4gKCkgPT4ge31cbiAgfVxuXG4gIGxldCBzMSA9IG51bGxcbiAgbGV0IHMyID0gbnVsbFxuICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyBzZXRJbW1lZGlhdGUgaXMgYWRkZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2UgcHJpb3RvcmlzZSBzb2NrZXQgZXJyb3IgZXZlbnRzIG92ZXIgdGltZW91dHNcbiAgICBzMSA9IHNldEltbWVkaWF0ZSgoKSA9PiB7XG4gICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgICAgICAvLyBXaW5kb3dzIG5lZWRzIGFuIGV4dHJhIHNldEltbWVkaWF0ZSBwcm9iYWJseSBkdWUgdG8gaW1wbGVtZW50YXRpb24gZGlmZmVyZW5jZXMgaW4gdGhlIHNvY2tldCBsb2dpY1xuICAgICAgICBzMiA9IHNldEltbWVkaWF0ZSgoKSA9PiBvbkNvbm5lY3RUaW1lb3V0KCkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvbkNvbm5lY3RUaW1lb3V0KClcbiAgICAgIH1cbiAgICB9KVxuICB9LCB0aW1lb3V0KVxuICByZXR1cm4gKCkgPT4ge1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpXG4gICAgY2xlYXJJbW1lZGlhdGUoczEpXG4gICAgY2xlYXJJbW1lZGlhdGUoczIpXG4gIH1cbn1cblxuZnVuY3Rpb24gb25Db25uZWN0VGltZW91dCAoc29ja2V0KSB7XG4gIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBDb25uZWN0VGltZW91dEVycm9yKCkpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRDb25uZWN0b3JcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmVudW1Ub01hcCA9IHZvaWQgMDtcbmZ1bmN0aW9uIGVudW1Ub01hcChvYmopIHtcbiAgICBjb25zdCByZXMgPSB7fTtcbiAgICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IG9ialtrZXldO1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgcmVzW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXM7XG59XG5leHBvcnRzLmVudW1Ub01hcCA9IGVudW1Ub01hcDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlNQRUNJQUxfSEVBREVSUyA9IGV4cG9ydHMuSEVBREVSX1NUQVRFID0gZXhwb3J0cy5NSU5PUiA9IGV4cG9ydHMuTUFKT1IgPSBleHBvcnRzLkNPTk5FQ1RJT05fVE9LRU5fQ0hBUlMgPSBleHBvcnRzLkhFQURFUl9DSEFSUyA9IGV4cG9ydHMuVE9LRU4gPSBleHBvcnRzLlNUUklDVF9UT0tFTiA9IGV4cG9ydHMuSEVYID0gZXhwb3J0cy5VUkxfQ0hBUiA9IGV4cG9ydHMuU1RSSUNUX1VSTF9DSEFSID0gZXhwb3J0cy5VU0VSSU5GT19DSEFSUyA9IGV4cG9ydHMuTUFSSyA9IGV4cG9ydHMuQUxQSEFOVU0gPSBleHBvcnRzLk5VTSA9IGV4cG9ydHMuSEVYX01BUCA9IGV4cG9ydHMuTlVNX01BUCA9IGV4cG9ydHMuQUxQSEEgPSBleHBvcnRzLkZJTklTSCA9IGV4cG9ydHMuSF9NRVRIT0RfTUFQID0gZXhwb3J0cy5NRVRIT0RfTUFQID0gZXhwb3J0cy5NRVRIT0RTX1JUU1AgPSBleHBvcnRzLk1FVEhPRFNfSUNFID0gZXhwb3J0cy5NRVRIT0RTX0hUVFAgPSBleHBvcnRzLk1FVEhPRFMgPSBleHBvcnRzLkxFTklFTlRfRkxBR1MgPSBleHBvcnRzLkZMQUdTID0gZXhwb3J0cy5UWVBFID0gZXhwb3J0cy5FUlJPUiA9IHZvaWQgMDtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi91dGlsc1wiKTtcbi8vIEMgaGVhZGVyc1xudmFyIEVSUk9SO1xuKGZ1bmN0aW9uIChFUlJPUikge1xuICAgIEVSUk9SW0VSUk9SW1wiT0tcIl0gPSAwXSA9IFwiT0tcIjtcbiAgICBFUlJPUltFUlJPUltcIklOVEVSTkFMXCJdID0gMV0gPSBcIklOVEVSTkFMXCI7XG4gICAgRVJST1JbRVJST1JbXCJTVFJJQ1RcIl0gPSAyXSA9IFwiU1RSSUNUXCI7XG4gICAgRVJST1JbRVJST1JbXCJMRl9FWFBFQ1RFRFwiXSA9IDNdID0gXCJMRl9FWFBFQ1RFRFwiO1xuICAgIEVSUk9SW0VSUk9SW1wiVU5FWFBFQ1RFRF9DT05URU5UX0xFTkdUSFwiXSA9IDRdID0gXCJVTkVYUEVDVEVEX0NPTlRFTlRfTEVOR1RIXCI7XG4gICAgRVJST1JbRVJST1JbXCJDTE9TRURfQ09OTkVDVElPTlwiXSA9IDVdID0gXCJDTE9TRURfQ09OTkVDVElPTlwiO1xuICAgIEVSUk9SW0VSUk9SW1wiSU5WQUxJRF9NRVRIT0RcIl0gPSA2XSA9IFwiSU5WQUxJRF9NRVRIT0RcIjtcbiAgICBFUlJPUltFUlJPUltcIklOVkFMSURfVVJMXCJdID0gN10gPSBcIklOVkFMSURfVVJMXCI7XG4gICAgRVJST1JbRVJST1JbXCJJTlZBTElEX0NPTlNUQU5UXCJdID0gOF0gPSBcIklOVkFMSURfQ09OU1RBTlRcIjtcbiAgICBFUlJPUltFUlJPUltcIklOVkFMSURfVkVSU0lPTlwiXSA9IDldID0gXCJJTlZBTElEX1ZFUlNJT05cIjtcbiAgICBFUlJPUltFUlJPUltcIklOVkFMSURfSEVBREVSX1RPS0VOXCJdID0gMTBdID0gXCJJTlZBTElEX0hFQURFUl9UT0tFTlwiO1xuICAgIEVSUk9SW0VSUk9SW1wiSU5WQUxJRF9DT05URU5UX0xFTkdUSFwiXSA9IDExXSA9IFwiSU5WQUxJRF9DT05URU5UX0xFTkdUSFwiO1xuICAgIEVSUk9SW0VSUk9SW1wiSU5WQUxJRF9DSFVOS19TSVpFXCJdID0gMTJdID0gXCJJTlZBTElEX0NIVU5LX1NJWkVcIjtcbiAgICBFUlJPUltFUlJPUltcIklOVkFMSURfU1RBVFVTXCJdID0gMTNdID0gXCJJTlZBTElEX1NUQVRVU1wiO1xuICAgIEVSUk9SW0VSUk9SW1wiSU5WQUxJRF9FT0ZfU1RBVEVcIl0gPSAxNF0gPSBcIklOVkFMSURfRU9GX1NUQVRFXCI7XG4gICAgRVJST1JbRVJST1JbXCJJTlZBTElEX1RSQU5TRkVSX0VOQ09ESU5HXCJdID0gMTVdID0gXCJJTlZBTElEX1RSQU5TRkVSX0VOQ09ESU5HXCI7XG4gICAgRVJST1JbRVJST1JbXCJDQl9NRVNTQUdFX0JFR0lOXCJdID0gMTZdID0gXCJDQl9NRVNTQUdFX0JFR0lOXCI7XG4gICAgRVJST1JbRVJST1JbXCJDQl9IRUFERVJTX0NPTVBMRVRFXCJdID0gMTddID0gXCJDQl9IRUFERVJTX0NPTVBMRVRFXCI7XG4gICAgRVJST1JbRVJST1JbXCJDQl9NRVNTQUdFX0NPTVBMRVRFXCJdID0gMThdID0gXCJDQl9NRVNTQUdFX0NPTVBMRVRFXCI7XG4gICAgRVJST1JbRVJST1JbXCJDQl9DSFVOS19IRUFERVJcIl0gPSAxOV0gPSBcIkNCX0NIVU5LX0hFQURFUlwiO1xuICAgIEVSUk9SW0VSUk9SW1wiQ0JfQ0hVTktfQ09NUExFVEVcIl0gPSAyMF0gPSBcIkNCX0NIVU5LX0NPTVBMRVRFXCI7XG4gICAgRVJST1JbRVJST1JbXCJQQVVTRURcIl0gPSAyMV0gPSBcIlBBVVNFRFwiO1xuICAgIEVSUk9SW0VSUk9SW1wiUEFVU0VEX1VQR1JBREVcIl0gPSAyMl0gPSBcIlBBVVNFRF9VUEdSQURFXCI7XG4gICAgRVJST1JbRVJST1JbXCJQQVVTRURfSDJfVVBHUkFERVwiXSA9IDIzXSA9IFwiUEFVU0VEX0gyX1VQR1JBREVcIjtcbiAgICBFUlJPUltFUlJPUltcIlVTRVJcIl0gPSAyNF0gPSBcIlVTRVJcIjtcbn0pKEVSUk9SID0gZXhwb3J0cy5FUlJPUiB8fCAoZXhwb3J0cy5FUlJPUiA9IHt9KSk7XG52YXIgVFlQRTtcbihmdW5jdGlvbiAoVFlQRSkge1xuICAgIFRZUEVbVFlQRVtcIkJPVEhcIl0gPSAwXSA9IFwiQk9USFwiO1xuICAgIFRZUEVbVFlQRVtcIlJFUVVFU1RcIl0gPSAxXSA9IFwiUkVRVUVTVFwiO1xuICAgIFRZUEVbVFlQRVtcIlJFU1BPTlNFXCJdID0gMl0gPSBcIlJFU1BPTlNFXCI7XG59KShUWVBFID0gZXhwb3J0cy5UWVBFIHx8IChleHBvcnRzLlRZUEUgPSB7fSkpO1xudmFyIEZMQUdTO1xuKGZ1bmN0aW9uIChGTEFHUykge1xuICAgIEZMQUdTW0ZMQUdTW1wiQ09OTkVDVElPTl9LRUVQX0FMSVZFXCJdID0gMV0gPSBcIkNPTk5FQ1RJT05fS0VFUF9BTElWRVwiO1xuICAgIEZMQUdTW0ZMQUdTW1wiQ09OTkVDVElPTl9DTE9TRVwiXSA9IDJdID0gXCJDT05ORUNUSU9OX0NMT1NFXCI7XG4gICAgRkxBR1NbRkxBR1NbXCJDT05ORUNUSU9OX1VQR1JBREVcIl0gPSA0XSA9IFwiQ09OTkVDVElPTl9VUEdSQURFXCI7XG4gICAgRkxBR1NbRkxBR1NbXCJDSFVOS0VEXCJdID0gOF0gPSBcIkNIVU5LRURcIjtcbiAgICBGTEFHU1tGTEFHU1tcIlVQR1JBREVcIl0gPSAxNl0gPSBcIlVQR1JBREVcIjtcbiAgICBGTEFHU1tGTEFHU1tcIkNPTlRFTlRfTEVOR1RIXCJdID0gMzJdID0gXCJDT05URU5UX0xFTkdUSFwiO1xuICAgIEZMQUdTW0ZMQUdTW1wiU0tJUEJPRFlcIl0gPSA2NF0gPSBcIlNLSVBCT0RZXCI7XG4gICAgRkxBR1NbRkxBR1NbXCJUUkFJTElOR1wiXSA9IDEyOF0gPSBcIlRSQUlMSU5HXCI7XG4gICAgLy8gMSA8PCA4IGlzIHVudXNlZFxuICAgIEZMQUdTW0ZMQUdTW1wiVFJBTlNGRVJfRU5DT0RJTkdcIl0gPSA1MTJdID0gXCJUUkFOU0ZFUl9FTkNPRElOR1wiO1xufSkoRkxBR1MgPSBleHBvcnRzLkZMQUdTIHx8IChleHBvcnRzLkZMQUdTID0ge30pKTtcbnZhciBMRU5JRU5UX0ZMQUdTO1xuKGZ1bmN0aW9uIChMRU5JRU5UX0ZMQUdTKSB7XG4gICAgTEVOSUVOVF9GTEFHU1tMRU5JRU5UX0ZMQUdTW1wiSEVBREVSU1wiXSA9IDFdID0gXCJIRUFERVJTXCI7XG4gICAgTEVOSUVOVF9GTEFHU1tMRU5JRU5UX0ZMQUdTW1wiQ0hVTktFRF9MRU5HVEhcIl0gPSAyXSA9IFwiQ0hVTktFRF9MRU5HVEhcIjtcbiAgICBMRU5JRU5UX0ZMQUdTW0xFTklFTlRfRkxBR1NbXCJLRUVQX0FMSVZFXCJdID0gNF0gPSBcIktFRVBfQUxJVkVcIjtcbn0pKExFTklFTlRfRkxBR1MgPSBleHBvcnRzLkxFTklFTlRfRkxBR1MgfHwgKGV4cG9ydHMuTEVOSUVOVF9GTEFHUyA9IHt9KSk7XG52YXIgTUVUSE9EUztcbihmdW5jdGlvbiAoTUVUSE9EUykge1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIkRFTEVURVwiXSA9IDBdID0gXCJERUxFVEVcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJHRVRcIl0gPSAxXSA9IFwiR0VUXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiSEVBRFwiXSA9IDJdID0gXCJIRUFEXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiUE9TVFwiXSA9IDNdID0gXCJQT1NUXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiUFVUXCJdID0gNF0gPSBcIlBVVFwiO1xuICAgIC8qIHBhdGhvbG9naWNhbCAqL1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIkNPTk5FQ1RcIl0gPSA1XSA9IFwiQ09OTkVDVFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIk9QVElPTlNcIl0gPSA2XSA9IFwiT1BUSU9OU1wiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlRSQUNFXCJdID0gN10gPSBcIlRSQUNFXCI7XG4gICAgLyogV2ViREFWICovXG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiQ09QWVwiXSA9IDhdID0gXCJDT1BZXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiTE9DS1wiXSA9IDldID0gXCJMT0NLXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiTUtDT0xcIl0gPSAxMF0gPSBcIk1LQ09MXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiTU9WRVwiXSA9IDExXSA9IFwiTU9WRVwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlBST1BGSU5EXCJdID0gMTJdID0gXCJQUk9QRklORFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlBST1BQQVRDSFwiXSA9IDEzXSA9IFwiUFJPUFBBVENIXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiU0VBUkNIXCJdID0gMTRdID0gXCJTRUFSQ0hcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJVTkxPQ0tcIl0gPSAxNV0gPSBcIlVOTE9DS1wiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIkJJTkRcIl0gPSAxNl0gPSBcIkJJTkRcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJSRUJJTkRcIl0gPSAxN10gPSBcIlJFQklORFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlVOQklORFwiXSA9IDE4XSA9IFwiVU5CSU5EXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiQUNMXCJdID0gMTldID0gXCJBQ0xcIjtcbiAgICAvKiBzdWJ2ZXJzaW9uICovXG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiUkVQT1JUXCJdID0gMjBdID0gXCJSRVBPUlRcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJNS0FDVElWSVRZXCJdID0gMjFdID0gXCJNS0FDVElWSVRZXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiQ0hFQ0tPVVRcIl0gPSAyMl0gPSBcIkNIRUNLT1VUXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiTUVSR0VcIl0gPSAyM10gPSBcIk1FUkdFXCI7XG4gICAgLyogdXBucCAqL1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIk0tU0VBUkNIXCJdID0gMjRdID0gXCJNLVNFQVJDSFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIk5PVElGWVwiXSA9IDI1XSA9IFwiTk9USUZZXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiU1VCU0NSSUJFXCJdID0gMjZdID0gXCJTVUJTQ1JJQkVcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJVTlNVQlNDUklCRVwiXSA9IDI3XSA9IFwiVU5TVUJTQ1JJQkVcIjtcbiAgICAvKiBSRkMtNTc4OSAqL1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlBBVENIXCJdID0gMjhdID0gXCJQQVRDSFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlBVUkdFXCJdID0gMjldID0gXCJQVVJHRVwiO1xuICAgIC8qIENhbERBViAqL1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIk1LQ0FMRU5EQVJcIl0gPSAzMF0gPSBcIk1LQ0FMRU5EQVJcIjtcbiAgICAvKiBSRkMtMjA2OCwgc2VjdGlvbiAxOS42LjEuMiAqL1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIkxJTktcIl0gPSAzMV0gPSBcIkxJTktcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJVTkxJTktcIl0gPSAzMl0gPSBcIlVOTElOS1wiO1xuICAgIC8qIGljZWNhc3QgKi9cbiAgICBNRVRIT0RTW01FVEhPRFNbXCJTT1VSQ0VcIl0gPSAzM10gPSBcIlNPVVJDRVwiO1xuICAgIC8qIFJGQy03NTQwLCBzZWN0aW9uIDExLjYgKi9cbiAgICBNRVRIT0RTW01FVEhPRFNbXCJQUklcIl0gPSAzNF0gPSBcIlBSSVwiO1xuICAgIC8qIFJGQy0yMzI2IFJUU1AgKi9cbiAgICBNRVRIT0RTW01FVEhPRFNbXCJERVNDUklCRVwiXSA9IDM1XSA9IFwiREVTQ1JJQkVcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJBTk5PVU5DRVwiXSA9IDM2XSA9IFwiQU5OT1VOQ0VcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJTRVRVUFwiXSA9IDM3XSA9IFwiU0VUVVBcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJQTEFZXCJdID0gMzhdID0gXCJQTEFZXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiUEFVU0VcIl0gPSAzOV0gPSBcIlBBVVNFXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiVEVBUkRPV05cIl0gPSA0MF0gPSBcIlRFQVJET1dOXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiR0VUX1BBUkFNRVRFUlwiXSA9IDQxXSA9IFwiR0VUX1BBUkFNRVRFUlwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlNFVF9QQVJBTUVURVJcIl0gPSA0Ml0gPSBcIlNFVF9QQVJBTUVURVJcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJSRURJUkVDVFwiXSA9IDQzXSA9IFwiUkVESVJFQ1RcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJSRUNPUkRcIl0gPSA0NF0gPSBcIlJFQ09SRFwiO1xuICAgIC8qIFJBT1AgKi9cbiAgICBNRVRIT0RTW01FVEhPRFNbXCJGTFVTSFwiXSA9IDQ1XSA9IFwiRkxVU0hcIjtcbn0pKE1FVEhPRFMgPSBleHBvcnRzLk1FVEhPRFMgfHwgKGV4cG9ydHMuTUVUSE9EUyA9IHt9KSk7XG5leHBvcnRzLk1FVEhPRFNfSFRUUCA9IFtcbiAgICBNRVRIT0RTLkRFTEVURSxcbiAgICBNRVRIT0RTLkdFVCxcbiAgICBNRVRIT0RTLkhFQUQsXG4gICAgTUVUSE9EUy5QT1NULFxuICAgIE1FVEhPRFMuUFVULFxuICAgIE1FVEhPRFMuQ09OTkVDVCxcbiAgICBNRVRIT0RTLk9QVElPTlMsXG4gICAgTUVUSE9EUy5UUkFDRSxcbiAgICBNRVRIT0RTLkNPUFksXG4gICAgTUVUSE9EUy5MT0NLLFxuICAgIE1FVEhPRFMuTUtDT0wsXG4gICAgTUVUSE9EUy5NT1ZFLFxuICAgIE1FVEhPRFMuUFJPUEZJTkQsXG4gICAgTUVUSE9EUy5QUk9QUEFUQ0gsXG4gICAgTUVUSE9EUy5TRUFSQ0gsXG4gICAgTUVUSE9EUy5VTkxPQ0ssXG4gICAgTUVUSE9EUy5CSU5ELFxuICAgIE1FVEhPRFMuUkVCSU5ELFxuICAgIE1FVEhPRFMuVU5CSU5ELFxuICAgIE1FVEhPRFMuQUNMLFxuICAgIE1FVEhPRFMuUkVQT1JULFxuICAgIE1FVEhPRFMuTUtBQ1RJVklUWSxcbiAgICBNRVRIT0RTLkNIRUNLT1VULFxuICAgIE1FVEhPRFMuTUVSR0UsXG4gICAgTUVUSE9EU1snTS1TRUFSQ0gnXSxcbiAgICBNRVRIT0RTLk5PVElGWSxcbiAgICBNRVRIT0RTLlNVQlNDUklCRSxcbiAgICBNRVRIT0RTLlVOU1VCU0NSSUJFLFxuICAgIE1FVEhPRFMuUEFUQ0gsXG4gICAgTUVUSE9EUy5QVVJHRSxcbiAgICBNRVRIT0RTLk1LQ0FMRU5EQVIsXG4gICAgTUVUSE9EUy5MSU5LLFxuICAgIE1FVEhPRFMuVU5MSU5LLFxuICAgIE1FVEhPRFMuUFJJLFxuICAgIC8vIFRPRE8oaW5kdXRueSk6IHNob3VsZCB3ZSBhbGxvdyBpdCB3aXRoIEhUVFA/XG4gICAgTUVUSE9EUy5TT1VSQ0UsXG5dO1xuZXhwb3J0cy5NRVRIT0RTX0lDRSA9IFtcbiAgICBNRVRIT0RTLlNPVVJDRSxcbl07XG5leHBvcnRzLk1FVEhPRFNfUlRTUCA9IFtcbiAgICBNRVRIT0RTLk9QVElPTlMsXG4gICAgTUVUSE9EUy5ERVNDUklCRSxcbiAgICBNRVRIT0RTLkFOTk9VTkNFLFxuICAgIE1FVEhPRFMuU0VUVVAsXG4gICAgTUVUSE9EUy5QTEFZLFxuICAgIE1FVEhPRFMuUEFVU0UsXG4gICAgTUVUSE9EUy5URUFSRE9XTixcbiAgICBNRVRIT0RTLkdFVF9QQVJBTUVURVIsXG4gICAgTUVUSE9EUy5TRVRfUEFSQU1FVEVSLFxuICAgIE1FVEhPRFMuUkVESVJFQ1QsXG4gICAgTUVUSE9EUy5SRUNPUkQsXG4gICAgTUVUSE9EUy5GTFVTSCxcbiAgICAvLyBGb3IgQWlyUGxheVxuICAgIE1FVEhPRFMuR0VULFxuICAgIE1FVEhPRFMuUE9TVCxcbl07XG5leHBvcnRzLk1FVEhPRF9NQVAgPSB1dGlsc18xLmVudW1Ub01hcChNRVRIT0RTKTtcbmV4cG9ydHMuSF9NRVRIT0RfTUFQID0ge307XG5PYmplY3Qua2V5cyhleHBvcnRzLk1FVEhPRF9NQVApLmZvckVhY2goKGtleSkgPT4ge1xuICAgIGlmICgvXkgvLnRlc3Qoa2V5KSkge1xuICAgICAgICBleHBvcnRzLkhfTUVUSE9EX01BUFtrZXldID0gZXhwb3J0cy5NRVRIT0RfTUFQW2tleV07XG4gICAgfVxufSk7XG52YXIgRklOSVNIO1xuKGZ1bmN0aW9uIChGSU5JU0gpIHtcbiAgICBGSU5JU0hbRklOSVNIW1wiU0FGRVwiXSA9IDBdID0gXCJTQUZFXCI7XG4gICAgRklOSVNIW0ZJTklTSFtcIlNBRkVfV0lUSF9DQlwiXSA9IDFdID0gXCJTQUZFX1dJVEhfQ0JcIjtcbiAgICBGSU5JU0hbRklOSVNIW1wiVU5TQUZFXCJdID0gMl0gPSBcIlVOU0FGRVwiO1xufSkoRklOSVNIID0gZXhwb3J0cy5GSU5JU0ggfHwgKGV4cG9ydHMuRklOSVNIID0ge30pKTtcbmV4cG9ydHMuQUxQSEEgPSBbXTtcbmZvciAobGV0IGkgPSAnQScuY2hhckNvZGVBdCgwKTsgaSA8PSAnWicuY2hhckNvZGVBdCgwKTsgaSsrKSB7XG4gICAgLy8gVXBwZXIgY2FzZVxuICAgIGV4cG9ydHMuQUxQSEEucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGkpKTtcbiAgICAvLyBMb3dlciBjYXNlXG4gICAgZXhwb3J0cy5BTFBIQS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoaSArIDB4MjApKTtcbn1cbmV4cG9ydHMuTlVNX01BUCA9IHtcbiAgICAwOiAwLCAxOiAxLCAyOiAyLCAzOiAzLCA0OiA0LFxuICAgIDU6IDUsIDY6IDYsIDc6IDcsIDg6IDgsIDk6IDksXG59O1xuZXhwb3J0cy5IRVhfTUFQID0ge1xuICAgIDA6IDAsIDE6IDEsIDI6IDIsIDM6IDMsIDQ6IDQsXG4gICAgNTogNSwgNjogNiwgNzogNywgODogOCwgOTogOSxcbiAgICBBOiAwWEEsIEI6IDBYQiwgQzogMFhDLCBEOiAwWEQsIEU6IDBYRSwgRjogMFhGLFxuICAgIGE6IDB4YSwgYjogMHhiLCBjOiAweGMsIGQ6IDB4ZCwgZTogMHhlLCBmOiAweGYsXG59O1xuZXhwb3J0cy5OVU0gPSBbXG4gICAgJzAnLCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsICc4JywgJzknLFxuXTtcbmV4cG9ydHMuQUxQSEFOVU0gPSBleHBvcnRzLkFMUEhBLmNvbmNhdChleHBvcnRzLk5VTSk7XG5leHBvcnRzLk1BUksgPSBbJy0nLCAnXycsICcuJywgJyEnLCAnficsICcqJywgJ1xcJycsICcoJywgJyknXTtcbmV4cG9ydHMuVVNFUklORk9fQ0hBUlMgPSBleHBvcnRzLkFMUEhBTlVNXG4gICAgLmNvbmNhdChleHBvcnRzLk1BUkspXG4gICAgLmNvbmNhdChbJyUnLCAnOycsICc6JywgJyYnLCAnPScsICcrJywgJyQnLCAnLCddKTtcbi8vIFRPRE8oaW5kdXRueSk6IHVzZSBSRkNcbmV4cG9ydHMuU1RSSUNUX1VSTF9DSEFSID0gW1xuICAgICchJywgJ1wiJywgJyQnLCAnJScsICcmJywgJ1xcJycsXG4gICAgJygnLCAnKScsICcqJywgJysnLCAnLCcsICctJywgJy4nLCAnLycsXG4gICAgJzonLCAnOycsICc8JywgJz0nLCAnPicsXG4gICAgJ0AnLCAnWycsICdcXFxcJywgJ10nLCAnXicsICdfJyxcbiAgICAnYCcsXG4gICAgJ3snLCAnfCcsICd9JywgJ34nLFxuXS5jb25jYXQoZXhwb3J0cy5BTFBIQU5VTSk7XG5leHBvcnRzLlVSTF9DSEFSID0gZXhwb3J0cy5TVFJJQ1RfVVJMX0NIQVJcbiAgICAuY29uY2F0KFsnXFx0JywgJ1xcZiddKTtcbi8vIEFsbCBjaGFyYWN0ZXJzIHdpdGggMHg4MCBiaXQgc2V0IHRvIDFcbmZvciAobGV0IGkgPSAweDgwOyBpIDw9IDB4ZmY7IGkrKykge1xuICAgIGV4cG9ydHMuVVJMX0NIQVIucHVzaChpKTtcbn1cbmV4cG9ydHMuSEVYID0gZXhwb3J0cy5OVU0uY29uY2F0KFsnYScsICdiJywgJ2MnLCAnZCcsICdlJywgJ2YnLCAnQScsICdCJywgJ0MnLCAnRCcsICdFJywgJ0YnXSk7XG4vKiBUb2tlbnMgYXMgZGVmaW5lZCBieSByZmMgMjYxNi4gQWxzbyBsb3dlcmNhc2VzIHRoZW0uXG4gKiAgICAgICAgdG9rZW4gICAgICAgPSAxKjxhbnkgQ0hBUiBleGNlcHQgQ1RMcyBvciBzZXBhcmF0b3JzPlxuICogICAgIHNlcGFyYXRvcnMgICAgID0gXCIoXCIgfCBcIilcIiB8IFwiPFwiIHwgXCI+XCIgfCBcIkBcIlxuICogICAgICAgICAgICAgICAgICAgIHwgXCIsXCIgfCBcIjtcIiB8IFwiOlwiIHwgXCJcXFwiIHwgPFwiPlxuICogICAgICAgICAgICAgICAgICAgIHwgXCIvXCIgfCBcIltcIiB8IFwiXVwiIHwgXCI/XCIgfCBcIj1cIlxuICogICAgICAgICAgICAgICAgICAgIHwgXCJ7XCIgfCBcIn1cIiB8IFNQIHwgSFRcbiAqL1xuZXhwb3J0cy5TVFJJQ1RfVE9LRU4gPSBbXG4gICAgJyEnLCAnIycsICckJywgJyUnLCAnJicsICdcXCcnLFxuICAgICcqJywgJysnLCAnLScsICcuJyxcbiAgICAnXicsICdfJywgJ2AnLFxuICAgICd8JywgJ34nLFxuXS5jb25jYXQoZXhwb3J0cy5BTFBIQU5VTSk7XG5leHBvcnRzLlRPS0VOID0gZXhwb3J0cy5TVFJJQ1RfVE9LRU4uY29uY2F0KFsnICddKTtcbi8qXG4gKiBWZXJpZnkgdGhhdCBhIGNoYXIgaXMgYSB2YWxpZCB2aXNpYmxlIChwcmludGFibGUpIFVTLUFTQ0lJXG4gKiBjaGFyYWN0ZXIgb3IgJXg4MC1GRlxuICovXG5leHBvcnRzLkhFQURFUl9DSEFSUyA9IFsnXFx0J107XG5mb3IgKGxldCBpID0gMzI7IGkgPD0gMjU1OyBpKyspIHtcbiAgICBpZiAoaSAhPT0gMTI3KSB7XG4gICAgICAgIGV4cG9ydHMuSEVBREVSX0NIQVJTLnB1c2goaSk7XG4gICAgfVxufVxuLy8gJywnID0gXFx4NDRcbmV4cG9ydHMuQ09OTkVDVElPTl9UT0tFTl9DSEFSUyA9IGV4cG9ydHMuSEVBREVSX0NIQVJTLmZpbHRlcigoYykgPT4gYyAhPT0gNDQpO1xuZXhwb3J0cy5NQUpPUiA9IGV4cG9ydHMuTlVNX01BUDtcbmV4cG9ydHMuTUlOT1IgPSBleHBvcnRzLk1BSk9SO1xudmFyIEhFQURFUl9TVEFURTtcbihmdW5jdGlvbiAoSEVBREVSX1NUQVRFKSB7XG4gICAgSEVBREVSX1NUQVRFW0hFQURFUl9TVEFURVtcIkdFTkVSQUxcIl0gPSAwXSA9IFwiR0VORVJBTFwiO1xuICAgIEhFQURFUl9TVEFURVtIRUFERVJfU1RBVEVbXCJDT05ORUNUSU9OXCJdID0gMV0gPSBcIkNPTk5FQ1RJT05cIjtcbiAgICBIRUFERVJfU1RBVEVbSEVBREVSX1NUQVRFW1wiQ09OVEVOVF9MRU5HVEhcIl0gPSAyXSA9IFwiQ09OVEVOVF9MRU5HVEhcIjtcbiAgICBIRUFERVJfU1RBVEVbSEVBREVSX1NUQVRFW1wiVFJBTlNGRVJfRU5DT0RJTkdcIl0gPSAzXSA9IFwiVFJBTlNGRVJfRU5DT0RJTkdcIjtcbiAgICBIRUFERVJfU1RBVEVbSEVBREVSX1NUQVRFW1wiVVBHUkFERVwiXSA9IDRdID0gXCJVUEdSQURFXCI7XG4gICAgSEVBREVSX1NUQVRFW0hFQURFUl9TVEFURVtcIkNPTk5FQ1RJT05fS0VFUF9BTElWRVwiXSA9IDVdID0gXCJDT05ORUNUSU9OX0tFRVBfQUxJVkVcIjtcbiAgICBIRUFERVJfU1RBVEVbSEVBREVSX1NUQVRFW1wiQ09OTkVDVElPTl9DTE9TRVwiXSA9IDZdID0gXCJDT05ORUNUSU9OX0NMT1NFXCI7XG4gICAgSEVBREVSX1NUQVRFW0hFQURFUl9TVEFURVtcIkNPTk5FQ1RJT05fVVBHUkFERVwiXSA9IDddID0gXCJDT05ORUNUSU9OX1VQR1JBREVcIjtcbiAgICBIRUFERVJfU1RBVEVbSEVBREVSX1NUQVRFW1wiVFJBTlNGRVJfRU5DT0RJTkdfQ0hVTktFRFwiXSA9IDhdID0gXCJUUkFOU0ZFUl9FTkNPRElOR19DSFVOS0VEXCI7XG59KShIRUFERVJfU1RBVEUgPSBleHBvcnRzLkhFQURFUl9TVEFURSB8fCAoZXhwb3J0cy5IRUFERVJfU1RBVEUgPSB7fSkpO1xuZXhwb3J0cy5TUEVDSUFMX0hFQURFUlMgPSB7XG4gICAgJ2Nvbm5lY3Rpb24nOiBIRUFERVJfU1RBVEUuQ09OTkVDVElPTixcbiAgICAnY29udGVudC1sZW5ndGgnOiBIRUFERVJfU1RBVEUuQ09OVEVOVF9MRU5HVEgsXG4gICAgJ3Byb3h5LWNvbm5lY3Rpb24nOiBIRUFERVJfU1RBVEUuQ09OTkVDVElPTixcbiAgICAndHJhbnNmZXItZW5jb2RpbmcnOiBIRUFERVJfU1RBVEUuVFJBTlNGRVJfRU5DT0RJTkcsXG4gICAgJ3VwZ3JhZGUnOiBIRUFERVJfU1RBVEUuVVBHUkFERSxcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25zdGFudHMuanMubWFwIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGtCb2R5VXNlZCB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCBFRSA9IHJlcXVpcmUoJ2V2ZW50cycpXG5cbmNvbnN0IHJlZGlyZWN0YWJsZVN0YXR1c0NvZGVzID0gWzMwMCwgMzAxLCAzMDIsIDMwMywgMzA3LCAzMDhdXG5cbmNvbnN0IGtCb2R5ID0gU3ltYm9sKCdib2R5JylcblxuY2xhc3MgQm9keUFzeW5jSXRlcmFibGUge1xuICBjb25zdHJ1Y3RvciAoYm9keSkge1xuICAgIHRoaXNba0JvZHldID0gYm9keVxuICAgIHRoaXNba0JvZHlVc2VkXSA9IGZhbHNlXG4gIH1cblxuICBhc3luYyAqIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gKCkge1xuICAgIGFzc2VydCghdGhpc1trQm9keVVzZWRdLCAnZGlzdHVyYmVkJylcbiAgICB0aGlzW2tCb2R5VXNlZF0gPSB0cnVlXG4gICAgeWllbGQgKiB0aGlzW2tCb2R5XVxuICB9XG59XG5cbmNsYXNzIFJlZGlyZWN0SGFuZGxlciB7XG4gIGNvbnN0cnVjdG9yIChkaXNwYXRjaCwgbWF4UmVkaXJlY3Rpb25zLCBvcHRzLCBoYW5kbGVyKSB7XG4gICAgaWYgKG1heFJlZGlyZWN0aW9ucyAhPSBudWxsICYmICghTnVtYmVyLmlzSW50ZWdlcihtYXhSZWRpcmVjdGlvbnMpIHx8IG1heFJlZGlyZWN0aW9ucyA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ21heFJlZGlyZWN0aW9ucyBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJylcbiAgICB9XG5cbiAgICB1dGlsLnZhbGlkYXRlSGFuZGxlcihoYW5kbGVyLCBvcHRzLm1ldGhvZCwgb3B0cy51cGdyYWRlKVxuXG4gICAgdGhpcy5kaXNwYXRjaCA9IGRpc3BhdGNoXG4gICAgdGhpcy5sb2NhdGlvbiA9IG51bGxcbiAgICB0aGlzLmFib3J0ID0gbnVsbFxuICAgIHRoaXMub3B0cyA9IHsgLi4ub3B0cywgbWF4UmVkaXJlY3Rpb25zOiAwIH0gLy8gb3B0cyBtdXN0IGJlIGEgY29weVxuICAgIHRoaXMubWF4UmVkaXJlY3Rpb25zID0gbWF4UmVkaXJlY3Rpb25zXG4gICAgdGhpcy5oYW5kbGVyID0gaGFuZGxlclxuICAgIHRoaXMuaGlzdG9yeSA9IFtdXG5cbiAgICBpZiAodXRpbC5pc1N0cmVhbSh0aGlzLm9wdHMuYm9keSkpIHtcbiAgICAgIC8vIFRPRE8gKGZpeCk6IFByb3ZpZGUgc29tZSB3YXkgZm9yIHRoZSB1c2VyIHRvIGNhY2hlIHRoZSBmaWxlIHRvIGUuZy4gL3RtcFxuICAgICAgLy8gc28gdGhhdCBpdCBjYW4gYmUgZGlzcGF0Y2hlZCBhZ2Fpbj9cbiAgICAgIC8vIFRPRE8gKGZpeCk6IERvIHdlIG5lZWQgMTAwLWV4cGVjdCBzdXBwb3J0IHRvIHByb3ZpZGUgYSB3YXkgdG8gZG8gdGhpcyBwcm9wZXJseT9cbiAgICAgIGlmICh1dGlsLmJvZHlMZW5ndGgodGhpcy5vcHRzLmJvZHkpID09PSAwKSB7XG4gICAgICAgIHRoaXMub3B0cy5ib2R5XG4gICAgICAgICAgLm9uKCdkYXRhJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKVxuICAgICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRzLmJvZHkucmVhZGFibGVEaWRSZWFkICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgdGhpcy5vcHRzLmJvZHlba0JvZHlVc2VkXSA9IGZhbHNlXG4gICAgICAgIEVFLnByb3RvdHlwZS5vbi5jYWxsKHRoaXMub3B0cy5ib2R5LCAnZGF0YScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB0aGlzW2tCb2R5VXNlZF0gPSB0cnVlXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdHMuYm9keSAmJiB0eXBlb2YgdGhpcy5vcHRzLmJvZHkucGlwZVRvID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBUT0RPIChmaXgpOiBXZSBjYW4ndCBhY2Nlc3MgUmVhZGFibGVTdHJlYW0gaW50ZXJuYWwgc3RhdGVcbiAgICAgIC8vIHRvIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCBpdCBoYXMgYmVlbiBkaXN0dXJiZWQuIFRoaXMgaXMganVzdFxuICAgICAgLy8gYSB3b3JrYXJvdW5kLlxuICAgICAgdGhpcy5vcHRzLmJvZHkgPSBuZXcgQm9keUFzeW5jSXRlcmFibGUodGhpcy5vcHRzLmJvZHkpXG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMub3B0cy5ib2R5ICYmXG4gICAgICB0eXBlb2YgdGhpcy5vcHRzLmJvZHkgIT09ICdzdHJpbmcnICYmXG4gICAgICAhQXJyYXlCdWZmZXIuaXNWaWV3KHRoaXMub3B0cy5ib2R5KSAmJlxuICAgICAgdXRpbC5pc0l0ZXJhYmxlKHRoaXMub3B0cy5ib2R5KVxuICAgICkge1xuICAgICAgLy8gVE9ETzogU2hvdWxkIHdlIGFsbG93IHJlLXVzaW5nIGl0ZXJhYmxlIGlmICF0aGlzLm9wdHMuaWRlbXBvdGVudFxuICAgICAgLy8gb3IgdGhyb3VnaCBzb21lIG90aGVyIGZsYWc/XG4gICAgICB0aGlzLm9wdHMuYm9keSA9IG5ldyBCb2R5QXN5bmNJdGVyYWJsZSh0aGlzLm9wdHMuYm9keSlcbiAgICB9XG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0KSB7XG4gICAgdGhpcy5hYm9ydCA9IGFib3J0XG4gICAgdGhpcy5oYW5kbGVyLm9uQ29ubmVjdChhYm9ydCwgeyBoaXN0b3J5OiB0aGlzLmhpc3RvcnkgfSlcbiAgfVxuXG4gIG9uVXBncmFkZSAoc3RhdHVzQ29kZSwgaGVhZGVycywgc29ja2V0KSB7XG4gICAgdGhpcy5oYW5kbGVyLm9uVXBncmFkZShzdGF0dXNDb2RlLCBoZWFkZXJzLCBzb2NrZXQpXG4gIH1cblxuICBvbkVycm9yIChlcnJvcikge1xuICAgIHRoaXMuaGFuZGxlci5vbkVycm9yKGVycm9yKVxuICB9XG5cbiAgb25IZWFkZXJzIChzdGF0dXNDb2RlLCBoZWFkZXJzLCByZXN1bWUsIHN0YXR1c1RleHQpIHtcbiAgICB0aGlzLmxvY2F0aW9uID0gdGhpcy5oaXN0b3J5Lmxlbmd0aCA+PSB0aGlzLm1heFJlZGlyZWN0aW9ucyB8fCB1dGlsLmlzRGlzdHVyYmVkKHRoaXMub3B0cy5ib2R5KVxuICAgICAgPyBudWxsXG4gICAgICA6IHBhcnNlTG9jYXRpb24oc3RhdHVzQ29kZSwgaGVhZGVycylcblxuICAgIGlmICh0aGlzLm9wdHMub3JpZ2luKSB7XG4gICAgICB0aGlzLmhpc3RvcnkucHVzaChuZXcgVVJMKHRoaXMub3B0cy5wYXRoLCB0aGlzLm9wdHMub3JpZ2luKSlcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMubG9jYXRpb24pIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25IZWFkZXJzKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHJlc3VtZSwgc3RhdHVzVGV4dClcbiAgICB9XG5cbiAgICBjb25zdCB7IG9yaWdpbiwgcGF0aG5hbWUsIHNlYXJjaCB9ID0gdXRpbC5wYXJzZVVSTChuZXcgVVJMKHRoaXMubG9jYXRpb24sIHRoaXMub3B0cy5vcmlnaW4gJiYgbmV3IFVSTCh0aGlzLm9wdHMucGF0aCwgdGhpcy5vcHRzLm9yaWdpbikpKVxuICAgIGNvbnN0IHBhdGggPSBzZWFyY2ggPyBgJHtwYXRobmFtZX0ke3NlYXJjaH1gIDogcGF0aG5hbWVcblxuICAgIC8vIFJlbW92ZSBoZWFkZXJzIHJlZmVycmluZyB0byB0aGUgb3JpZ2luYWwgVVJMLlxuICAgIC8vIEJ5IGRlZmF1bHQgaXQgaXMgSG9zdCBvbmx5LCB1bmxlc3MgaXQncyBhIDMwMyAoc2VlIGJlbG93KSwgd2hpY2ggcmVtb3ZlcyBhbHNvIGFsbCBDb250ZW50LSogaGVhZGVycy5cbiAgICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTYuNFxuICAgIHRoaXMub3B0cy5oZWFkZXJzID0gY2xlYW5SZXF1ZXN0SGVhZGVycyh0aGlzLm9wdHMuaGVhZGVycywgc3RhdHVzQ29kZSA9PT0gMzAzLCB0aGlzLm9wdHMub3JpZ2luICE9PSBvcmlnaW4pXG4gICAgdGhpcy5vcHRzLnBhdGggPSBwYXRoXG4gICAgdGhpcy5vcHRzLm9yaWdpbiA9IG9yaWdpblxuICAgIHRoaXMub3B0cy5tYXhSZWRpcmVjdGlvbnMgPSAwXG4gICAgdGhpcy5vcHRzLnF1ZXJ5ID0gbnVsbFxuXG4gICAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi02LjQuNFxuICAgIC8vIEluIGNhc2Ugb2YgSFRUUCAzMDMsIGFsd2F5cyByZXBsYWNlIG1ldGhvZCB0byBiZSBlaXRoZXIgSEVBRCBvciBHRVRcbiAgICBpZiAoc3RhdHVzQ29kZSA9PT0gMzAzICYmIHRoaXMub3B0cy5tZXRob2QgIT09ICdIRUFEJykge1xuICAgICAgdGhpcy5vcHRzLm1ldGhvZCA9ICdHRVQnXG4gICAgICB0aGlzLm9wdHMuYm9keSA9IG51bGxcbiAgICB9XG4gIH1cblxuICBvbkRhdGEgKGNodW5rKSB7XG4gICAgaWYgKHRoaXMubG9jYXRpb24pIHtcbiAgICAgIC8qXG4gICAgICAgIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNi40XG5cbiAgICAgICAgVExEUjogdW5kaWNpIGFsd2F5cyBpZ25vcmVzIDN4eCByZXNwb25zZSBib2RpZXMuXG5cbiAgICAgICAgUmVkaXJlY3Rpb24gaXMgdXNlZCB0byBzZXJ2ZSB0aGUgcmVxdWVzdGVkIHJlc291cmNlIGZyb20gYW5vdGhlciBVUkwsIHNvIGl0IGlzIGFzc3VtZXMgdGhhdFxuICAgICAgICBubyBib2R5IGlzIGdlbmVyYXRlZCAoYW5kIHRodXMgY2FuIGJlIGlnbm9yZWQpLiBFdmVuIHRob3VnaCBnZW5lcmF0aW5nIGEgYm9keSBpcyBub3QgcHJvaGliaXRlZC5cblxuICAgICAgICBGb3Igc3RhdHVzIDMwMSwgMzAyLCAzMDMsIDMwNyBhbmQgMzA4ICh0aGUgbGF0dGVyIGZyb20gUkZDIDcyMzgpLCB0aGUgc3BlY3MgbWVudGlvbiB0aGF0IHRoZSBib2R5IHVzdWFsbHlcbiAgICAgICAgKHdoaWNoIG1lYW5zIGl0J3Mgb3B0aW9uYWwgYW5kIG5vdCBtYW5kYXRlZCkgY29udGFpbiBqdXN0IGFuIGh5cGVybGluayB0byB0aGUgdmFsdWUgb2ZcbiAgICAgICAgdGhlIExvY2F0aW9uIHJlc3BvbnNlIGhlYWRlciwgc28gdGhlIGJvZHkgY2FuIGJlIGlnbm9yZWQgc2FmZWx5LlxuXG4gICAgICAgIEZvciBzdGF0dXMgMzAwLCB3aGljaCBpcyBcIk11bHRpcGxlIENob2ljZXNcIiwgdGhlIHNwZWMgbWVudGlvbnMgYm90aCBnZW5lcmF0aW5nIGEgTG9jYXRpb25cbiAgICAgICAgcmVzcG9uc2UgaGVhZGVyIEFORCBhIHJlc3BvbnNlIGJvZHkgd2l0aCB0aGUgb3RoZXIgcG9zc2libGUgbG9jYXRpb24gdG8gZm9sbG93LlxuICAgICAgICBTaW5jZSB0aGUgc3BlYyBleHBsaWNpdGlseSBjaG9vc2VzIG5vdCB0byBzcGVjaWZ5IGEgZm9ybWF0IGZvciBzdWNoIGJvZHkgYW5kIGxlYXZlIGl0IHRvXG4gICAgICAgIHNlcnZlcnMgYW5kIGJyb3dzZXJzIGltcGxlbWVudG9ycywgd2UgaWdub3JlIHRoZSBib2R5IGFzIHRoZXJlIGlzIG5vIHNwZWNpZmllZCB3YXkgdG8gZXZlbnR1YWxseSBwYXJzZSBpdC5cbiAgICAgICovXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25EYXRhKGNodW5rKVxuICAgIH1cbiAgfVxuXG4gIG9uQ29tcGxldGUgKHRyYWlsZXJzKSB7XG4gICAgaWYgKHRoaXMubG9jYXRpb24pIHtcbiAgICAgIC8qXG4gICAgICAgIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNi40XG5cbiAgICAgICAgVExEUjogdW5kaWNpIGFsd2F5cyBpZ25vcmVzIDN4eCByZXNwb25zZSB0cmFpbGVycyBhcyB0aGV5IGFyZSBub3QgZXhwZWN0ZWQgaW4gY2FzZSBvZiByZWRpcmVjdGlvbnNcbiAgICAgICAgYW5kIG5laXRoZXIgYXJlIHVzZWZ1bCBpZiBwcmVzZW50LlxuXG4gICAgICAgIFNlZSBjb21tZW50IG9uIG9uRGF0YSBtZXRob2QgYWJvdmUgZm9yIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb25zLlxuICAgICAgKi9cblxuICAgICAgdGhpcy5sb2NhdGlvbiA9IG51bGxcbiAgICAgIHRoaXMuYWJvcnQgPSBudWxsXG5cbiAgICAgIHRoaXMuZGlzcGF0Y2godGhpcy5vcHRzLCB0aGlzKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhhbmRsZXIub25Db21wbGV0ZSh0cmFpbGVycylcbiAgICB9XG4gIH1cblxuICBvbkJvZHlTZW50IChjaHVuaykge1xuICAgIGlmICh0aGlzLmhhbmRsZXIub25Cb2R5U2VudCkge1xuICAgICAgdGhpcy5oYW5kbGVyLm9uQm9keVNlbnQoY2h1bmspXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlTG9jYXRpb24gKHN0YXR1c0NvZGUsIGhlYWRlcnMpIHtcbiAgaWYgKHJlZGlyZWN0YWJsZVN0YXR1c0NvZGVzLmluZGV4T2Yoc3RhdHVzQ29kZSkgPT09IC0xKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaGVhZGVycy5sZW5ndGg7IGkgKz0gMikge1xuICAgIGlmIChoZWFkZXJzW2ldLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT0gJ2xvY2F0aW9uJykge1xuICAgICAgcmV0dXJuIGhlYWRlcnNbaSArIDFdXG4gICAgfVxuICB9XG59XG5cbi8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNi40LjRcbmZ1bmN0aW9uIHNob3VsZFJlbW92ZUhlYWRlciAoaGVhZGVyLCByZW1vdmVDb250ZW50LCB1bmtub3duT3JpZ2luKSB7XG4gIGlmIChoZWFkZXIubGVuZ3RoID09PSA0KSB7XG4gICAgcmV0dXJuIHV0aWwuaGVhZGVyTmFtZVRvU3RyaW5nKGhlYWRlcikgPT09ICdob3N0J1xuICB9XG4gIGlmIChyZW1vdmVDb250ZW50ICYmIHV0aWwuaGVhZGVyTmFtZVRvU3RyaW5nKGhlYWRlcikuc3RhcnRzV2l0aCgnY29udGVudC0nKSkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgaWYgKHVua25vd25PcmlnaW4gJiYgKGhlYWRlci5sZW5ndGggPT09IDEzIHx8IGhlYWRlci5sZW5ndGggPT09IDYgfHwgaGVhZGVyLmxlbmd0aCA9PT0gMTkpKSB7XG4gICAgY29uc3QgbmFtZSA9IHV0aWwuaGVhZGVyTmFtZVRvU3RyaW5nKGhlYWRlcilcbiAgICByZXR1cm4gbmFtZSA9PT0gJ2F1dGhvcml6YXRpb24nIHx8IG5hbWUgPT09ICdjb29raWUnIHx8IG5hbWUgPT09ICdwcm94eS1hdXRob3JpemF0aW9uJ1xuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG4vLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTYuNFxuZnVuY3Rpb24gY2xlYW5SZXF1ZXN0SGVhZGVycyAoaGVhZGVycywgcmVtb3ZlQ29udGVudCwgdW5rbm93bk9yaWdpbikge1xuICBjb25zdCByZXQgPSBbXVxuICBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzKSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGVhZGVycy5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgaWYgKCFzaG91bGRSZW1vdmVIZWFkZXIoaGVhZGVyc1tpXSwgcmVtb3ZlQ29udGVudCwgdW5rbm93bk9yaWdpbikpIHtcbiAgICAgICAgcmV0LnB1c2goaGVhZGVyc1tpXSwgaGVhZGVyc1tpICsgMV0pXG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKGhlYWRlcnMgJiYgdHlwZW9mIGhlYWRlcnMgPT09ICdvYmplY3QnKSB7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoaGVhZGVycykpIHtcbiAgICAgIGlmICghc2hvdWxkUmVtb3ZlSGVhZGVyKGtleSwgcmVtb3ZlQ29udGVudCwgdW5rbm93bk9yaWdpbikpIHtcbiAgICAgICAgcmV0LnB1c2goa2V5LCBoZWFkZXJzW2tleV0pXG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGFzc2VydChoZWFkZXJzID09IG51bGwsICdoZWFkZXJzIG11c3QgYmUgYW4gb2JqZWN0IG9yIGFuIGFycmF5JylcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUmVkaXJlY3RIYW5kbGVyXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBSZWRpcmVjdEhhbmRsZXIgPSByZXF1aXJlKCcuLi9oYW5kbGVyL1JlZGlyZWN0SGFuZGxlcicpXG5cbmZ1bmN0aW9uIGNyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3IgKHsgbWF4UmVkaXJlY3Rpb25zOiBkZWZhdWx0TWF4UmVkaXJlY3Rpb25zIH0pIHtcbiAgcmV0dXJuIChkaXNwYXRjaCkgPT4ge1xuICAgIHJldHVybiBmdW5jdGlvbiBJbnRlcmNlcHQgKG9wdHMsIGhhbmRsZXIpIHtcbiAgICAgIGNvbnN0IHsgbWF4UmVkaXJlY3Rpb25zID0gZGVmYXVsdE1heFJlZGlyZWN0aW9ucyB9ID0gb3B0c1xuXG4gICAgICBpZiAoIW1heFJlZGlyZWN0aW9ucykge1xuICAgICAgICByZXR1cm4gZGlzcGF0Y2gob3B0cywgaGFuZGxlcilcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVkaXJlY3RIYW5kbGVyID0gbmV3IFJlZGlyZWN0SGFuZGxlcihkaXNwYXRjaCwgbWF4UmVkaXJlY3Rpb25zLCBvcHRzLCBoYW5kbGVyKVxuICAgICAgb3B0cyA9IHsgLi4ub3B0cywgbWF4UmVkaXJlY3Rpb25zOiAwIH0gLy8gU3RvcCBzdWIgZGlzcGF0Y2hlciBmcm9tIGFsc28gcmVkaXJlY3RpbmcuXG4gICAgICByZXR1cm4gZGlzcGF0Y2gob3B0cywgcmVkaXJlY3RIYW5kbGVyKVxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3JcbiIsCiAgICAibW9kdWxlLmV4cG9ydHMgPSAnQUdGemJRRUFBQUFCTUFoZ0FYOEJmMkFEZjM5L0FYOWdCSDkvZjM4QmYyQUFBR0FEZjM5L0FHQUJmd0JnQW45L0FHQUdmMzkvZjM5L0FBTExBUWdEWlc1MkdIZGhjMjFmYjI1ZmFHVmhaR1Z5YzE5amIyMXdiR1YwWlFBQ0EyVnVkaFYzWVhOdFgyOXVYMjFsYzNOaFoyVmZZbVZuYVc0QUFBTmxibllMZDJGemJWOXZibDkxY213QUFRTmxibllPZDJGemJWOXZibDl6ZEdGMGRYTUFBUU5sYm5ZVWQyRnpiVjl2Ymw5b1pXRmtaWEpmWm1sbGJHUUFBUU5sYm5ZVWQyRnpiVjl2Ymw5b1pXRmtaWEpmZG1Gc2RXVUFBUU5sYm5ZTWQyRnpiVjl2Ymw5aWIyUjVBQUVEWlc1MkdIZGhjMjFmYjI1ZmJXVnpjMkZuWlY5amIyMXdiR1YwWlFBQUEwWkZBd01FQUFBRkFBQUFBQUFBQlFFRkFBVUZCUUFBQmdBQUFBQUdCZ1lHQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFCQUFBQkFRY0FBQVVGQXdBQkJBVUJjQUVTRWdVREFRQUNCZ2dCZndGQmdOUUVDd2ZSQlNJR2JXVnRiM0o1QWdBTFgybHVhWFJwWVd4cGVtVUFDUmxmWDJsdVpHbHlaV04wWDJaMWJtTjBhVzl1WDNSaFlteGxBUUFMYkd4b2RIUndYMmx1YVhRQUNoaHNiR2gwZEhCZmMyaHZkV3hrWDJ0bFpYQmZZV3hwZG1VQVFReHNiR2gwZEhCZllXeHNiMk1BREFadFlXeHNiMk1BUmd0c2JHaDBkSEJmWm5KbFpRQU5CR1p5WldVQVNBOXNiR2gwZEhCZloyVjBYM1I1Y0dVQURoVnNiR2gwZEhCZloyVjBYMmgwZEhCZmJXRnFiM0lBRHhWc2JHaDBkSEJmWjJWMFgyaDBkSEJmYldsdWIzSUFFQkZzYkdoMGRIQmZaMlYwWDIxbGRHaHZaQUFSRm14c2FIUjBjRjluWlhSZmMzUmhkSFZ6WDJOdlpHVUFFaEpzYkdoMGRIQmZaMlYwWDNWd1ozSmhaR1VBRXd4c2JHaDBkSEJmY21WelpYUUFGQTVzYkdoMGRIQmZaWGhsWTNWMFpRQVZGR3hzYUhSMGNGOXpaWFIwYVc1bmMxOXBibWwwQUJZTmJHeG9kSFJ3WDJacGJtbHphQUFYREd4c2FIUjBjRjl3WVhWelpRQVlEV3hzYUhSMGNGOXlaWE4xYldVQUdSdHNiR2gwZEhCZmNtVnpkVzFsWDJGbWRHVnlYM1Z3WjNKaFpHVUFHaEJzYkdoMGRIQmZaMlYwWDJWeWNtNXZBQnNYYkd4b2RIUndYMmRsZEY5bGNuSnZjbDl5WldGemIyNEFIQmRzYkdoMGRIQmZjMlYwWDJWeWNtOXlYM0psWVhOdmJnQWRGR3hzYUhSMGNGOW5aWFJmWlhKeWIzSmZjRzl6QUI0UmJHeG9kSFJ3WDJWeWNtNXZYMjVoYldVQUh4SnNiR2gwZEhCZmJXVjBhRzlrWDI1aGJXVUFJQkpzYkdoMGRIQmZjM1JoZEhWelgyNWhiV1VBSVJwc2JHaDBkSEJmYzJWMFgyeGxibWxsYm5SZmFHVmhaR1Z5Y3dBaUlXeHNhSFIwY0Y5elpYUmZiR1Z1YVdWdWRGOWphSFZ1YTJWa1gyeGxibWQwYUFBakhXeHNhSFIwY0Y5elpYUmZiR1Z1YVdWdWRGOXJaV1Z3WDJGc2FYWmxBQ1FrYkd4b2RIUndYM05sZEY5c1pXNXBaVzUwWDNSeVlXNXpabVZ5WDJWdVkyOWthVzVuQUNVWWJHeG9kSFJ3WDIxbGMzTmhaMlZmYm1WbFpITmZaVzltQUQ4SkZ3RUFRUUVMRVFFQ0F3UUZDd1lITlRrM01TOHRKeXNwQ3NMZ0FrVUNBQXNJQUJDSWdJQ0FBQXNaQUNBQUVNS0FnSUFBR2lBQUlBSTJBamdnQUNBQk9nQW9DeHdBSUFBZ0FDOEJNaUFBTFFBdUlBQVF3WUNBZ0FBUWdJQ0FnQUFMS2dFQmYwSEFBQkRHZ0lDQUFDSUJFTUtBZ0lBQUdpQUJRWUNJZ0lBQU5nSTRJQUVnQURvQUtDQUJDd29BSUFBUXlJQ0FnQUFMQndBZ0FDMEFLQXNIQUNBQUxRQXFDd2NBSUFBdEFDc0xCd0FnQUMwQUtRc0hBQ0FBTHdFeUN3Y0FJQUF0QUM0TFJRRUVmeUFBS0FJWUlRRWdBQzBBTFNFQ0lBQXRBQ2doQXlBQUtBSTRJUVFnQUJEQ2dJQ0FBQm9nQUNBRU5nSTRJQUFnQXpvQUtDQUFJQUk2QUMwZ0FDQUJOZ0lZQ3hFQUlBQWdBU0FCSUFKcUVNT0FnSUFBQ3hBQUlBQkJBRUhjQUJETWdJQ0FBQm9MWndFQmYwRUFJUUVDUUNBQUtBSU1EUUFDUUFKQUFrQUNRQ0FBTFFBdkRnTUJBQU1DQ3lBQUtBSTRJZ0ZGRFFBZ0FTZ0NMQ0lCUlEwQUlBQWdBUkdBZ0lDQUFBQWlBUTBEQzBFQUR3c1F5b0NBZ0FBQUN5QUFRY09XZ0lBQU5nSVFRUTRoQVFzZ0FRc2VBQUpBSUFBb0Fnd05BQ0FBUWRHYmdJQUFOZ0lRSUFCQkZUWUNEQXNMRmdBQ1FDQUFLQUlNUVJWSERRQWdBRUVBTmdJTUN3c1dBQUpBSUFBb0FneEJGa2NOQUNBQVFRQTJBZ3dMQ3djQUlBQW9BZ3dMQndBZ0FDZ0NFQXNKQUNBQUlBRTJBaEFMQndBZ0FDZ0NGQXNpQUFKQUlBQkJKRWtOQUJES2dJQ0FBQUFMSUFCQkFuUkJvTE9BZ0FCcUtBSUFDeUlBQWtBZ0FFRXVTUTBBRU1xQWdJQUFBQXNnQUVFQ2RFR3d0SUNBQUdvb0FnQUw3Z3NCQVg5QjY2aUFnQUFoQVFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUlBQkJuSDlxRHZRRFkySUFBV0ZoWVdGaFlRSURCQVZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaEJnY0lDUW9MREEwT0QyRmhZV0ZoRUdGaFlXRmhZV0ZoWVdGaEVXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlSSVRGQlVXRnhnWkdodGhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhIQjBlSHlBaElpTWtKU1luS0NrcUt5d3RMaTh3TVRJek5EVTJZVGM0T1RwaFlXRmhZV0ZoWVR0aFlXRThZV0ZoWVQwK1AyRmhZV0ZoWVdGaFFHRmhRV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVVKRFJFVkdSMGhKU2t0TVRVNVBVRkZTVTJGaFlXRmhZV0ZoVkZWV1YxaFpXbHRoWEYxaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmVZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhYMkJoQzBIaHA0Q0FBQThMUWFTaGdJQUFEd3RCeTZ5QWdBQVBDMEgrc1lDQUFBOExRY0NrZ0lBQUR3dEJxNlNBZ0FBUEMwR05xSUNBQUE4TFFlS21nSUFBRHd0QmdMQ0FnQUFQQzBHNXI0Q0FBQThMUWRla2dJQUFEd3RCNzUrQWdBQVBDMEhobjRDQUFBOExRZnFmZ0lBQUR3dEI4cUNBZ0FBUEMwR29yNENBQUE4TFFhNnlnSUFBRHd0QmlMQ0FnQUFQQzBIc3A0Q0FBQThMUVlLaWdJQUFEd3RCanAyQWdBQVBDMEhRcm9DQUFBOExRY3FqZ0lBQUR3dEJ4YktBZ0FBUEMwSGZuSUNBQUE4TFFkS2NnSUFBRHd0QnhLQ0FnQUFQQzBIWG9JQ0FBQThMUWFLZmdJQUFEd3RCN2E2QWdBQVBDMEdyc0lDQUFBOExRZFNsZ0lBQUR3dEJ6SzZBZ0FBUEMwSDZyb0NBQUE4TFFmeXJnSUFBRHd0QjByQ0FnQUFQQzBIeG5ZQ0FBQThMUWJ1Z2dJQUFEd3RCOTZ1QWdBQVBDMEdRc1lDQUFBOExRZGV4Z0lBQUR3dEJvcTJBZ0FBUEMwSFVwNENBQUE4TFFlQ3JnSUFBRHd0Qm42eUFnQUFQQzBIcnNZQ0FBQThMUWRXZmdJQUFEd3RCeXJHQWdBQVBDMEhlcFlDQUFBOExRZFNlZ0lBQUR3dEI5SnlBZ0FBUEMwR25zb0NBQUE4TFFiR2RnSUFBRHd0Qm9KMkFnQUFQQzBHNXNZQ0FBQThMUWJ5d2dJQUFEd3RCa3FHQWdBQVBDMEd6cG9DQUFBOExRZW1zZ0lBQUR3dEJySjZBZ0FBUEMwSFVxNENBQUE4TFFmZW1nSUFBRHd0QmdLYUFnQUFQQzBHd29ZQ0FBQThMUWY2ZWdJQUFEd3RCamFPQWdBQVBDMEdKcllDQUFBOExRZmVpZ0lBQUR3dEJvTEdBZ0FBUEMwR3VuNENBQUE4TFFjYWxnSUFBRHd0QjZKNkFnQUFQQzBHVG9vQ0FBQThMUWNLdmdJQUFEd3RCdzUyQWdBQVBDMEdMcklDQUFBOExRZUdkZ0lBQUR3dEJqYStBZ0FBUEMwSHFvWUNBQUE4TFFiU3RnSUFBRHd0QjBxK0FnQUFQQzBIZnNvQ0FBQThMUWRLeWdJQUFEd3RCOExDQWdBQVBDMEdwb29DQUFBOExRZm1qZ0lBQUR3dEJtWjZBZ0FBUEMwRzFySUNBQUE4TFFadXdnSUFBRHd0QmtyS0FnQUFQQzBHMnE0Q0FBQThMUWNLaWdJQUFEd3RCK0xLQWdBQVBDMEdlcFlDQUFBOExRZENpZ0lBQUR3dEJ1cDZBZ0FBUEMwR0Jub0NBQUE4TEVNcUFnSUFBQUF0QjFxR0FnQUFoQVFzZ0FRc1dBQ0FBSUFBdEFDMUIvZ0Z4SUFGQkFFZHlPZ0F0Q3hrQUlBQWdBQzBBTFVIOUFYRWdBVUVBUjBFQmRISTZBQzBMR1FBZ0FDQUFMUUF0UWZzQmNTQUJRUUJIUVFKMGNqb0FMUXNaQUNBQUlBQXRBQzFCOXdGeElBRkJBRWRCQTNSeU9nQXRDeTRCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FnQWlCRVVOQUNBQUlBUVJnSUNBZ0FBQUlRTUxJQU1MU1FFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NCQ0lFUlEwQUlBQWdBU0FDSUFGcklBUVJnWUNBZ0FBQUlnTkJmMGNOQUNBQVFjYVJnSUFBTmdJUVFSZ2hBd3NnQXdzdUFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUl3SWdSRkRRQWdBQ0FFRVlDQWdJQUFBQ0VEQ3lBREMwa0JBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWdnaUJFVU5BQ0FBSUFFZ0FpQUJheUFFRVlHQWdJQUFBQ0lEUVg5SERRQWdBRUgyaW9DQUFEWUNFRUVZSVFNTElBTUxMZ0VDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ05DSUVSUTBBSUFBZ0JCR0FnSUNBQUFBaEF3c2dBd3RKQVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSU1JZ1JGRFFBZ0FDQUJJQUlnQVdzZ0JCR0JnSUNBQUFBaUEwRi9SdzBBSUFCQjdacUFnQUEyQWhCQkdDRURDeUFEQ3k0QkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9BamdpQkVVTkFDQUFJQVFSZ0lDQWdBQUFJUU1MSUFNTFNRRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDRUNJRVJRMEFJQUFnQVNBQ0lBRnJJQVFSZ1lDQWdBQUFJZ05CZjBjTkFDQUFRWldRZ0lBQU5nSVFRUmdoQXdzZ0F3c3VBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FJOElnUkZEUUFnQUNBRUVZQ0FnSUFBQUNFREN5QURDMGtCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FoUWlCRVVOQUNBQUlBRWdBaUFCYXlBRUVZR0FnSUFBQUNJRFFYOUhEUUFnQUVHcW00Q0FBRFlDRUVFWUlRTUxJQU1MTGdFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NRQ0lFUlEwQUlBQWdCQkdBZ0lDQUFBQWhBd3NnQXd0SkFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUlZSWdSRkRRQWdBQ0FCSUFJZ0FXc2dCQkdCZ0lDQUFBQWlBMEYvUncwQUlBQkI3Wk9BZ0FBMkFoQkJHQ0VEQ3lBREN5NEJBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWtRaUJFVU5BQ0FBSUFRUmdJQ0FnQUFBSVFNTElBTUxMZ0VDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ0pDSUVSUTBBSUFBZ0JCR0FnSUNBQUFBaEF3c2dBd3N1QVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSXNJZ1JGRFFBZ0FDQUVFWUNBZ0lBQUFDRURDeUFEQzBrQkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9BaWdpQkVVTkFDQUFJQUVnQWlBQmF5QUVFWUdBZ0lBQUFDSURRWDlIRFFBZ0FFSDJpSUNBQURZQ0VFRVlJUU1MSUFNTExnRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDVUNJRVJRMEFJQUFnQkJHQWdJQ0FBQUFoQXdzZ0F3dEpBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FJY0lnUkZEUUFnQUNBQklBSWdBV3NnQkJHQmdJQ0FBQUFpQTBGL1J3MEFJQUJCd3BtQWdBQTJBaEJCR0NFREN5QURDeTRCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FrZ2lCRVVOQUNBQUlBUVJnSUNBZ0FBQUlRTUxJQU1MU1FFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NJQ0lFUlEwQUlBQWdBU0FDSUFGcklBUVJnWUNBZ0FBQUlnTkJmMGNOQUNBQVFaU1VnSUFBTmdJUVFSZ2hBd3NnQXdzdUFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUpNSWdSRkRRQWdBQ0FFRVlDQWdJQUFBQ0VEQ3lBREN5NEJBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWxRaUJFVU5BQ0FBSUFRUmdJQ0FnQUFBSVFNTElBTUxMZ0VDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ1dDSUVSUTBBSUFBZ0JCR0FnSUNBQUFBaEF3c2dBd3RGQVFGL0FrQUNRQ0FBTHdFd1FSUnhRUlJIRFFCQkFTRURJQUF0QUNoQkFVWU5BU0FBTHdFeVFlVUFSaUVEREFFTElBQXRBQ2xCQlVZaEF3c2dBQ0FET2dBdVFRQUwvZ0VCQTM5QkFTRURBa0FnQUM4Qk1DSUVRUWh4RFFBZ0FDa0RJRUlBVWlFREN3SkFBa0FnQUMwQUxrVU5BRUVCSVFVZ0FDMEFLVUVGUmcwQlFRRWhCU0FFUWNBQWNVVWdBM0ZCQVVjTkFRdEJBQ0VGSUFSQndBQnhEUUJCQWlFRklBUkIvLzhEY1NJRFFRaHhEUUFDUUNBRFFZQUVjVVVOQUFKQUlBQXRBQ2hCQVVjTkFDQUFMUUF0UVFweERRQkJCUThMUVFRUEN3SkFJQU5CSUhFTkFBSkFJQUF0QUNoQkFVWU5BQ0FBTHdFeVFmLy9BM0VpQUVHY2YycEI1QUJKRFFBZ0FFSE1BVVlOQUNBQVFiQUNSZzBBUVFRaEJTQUVRU2h4UlEwQ0lBTkJpQVJ4UVlBRVJnMENDMEVBRHd0QkFFRURJQUFwQXlCUUd5RUZDeUFGQzJJQkFuOUJBQ0VCQWtBZ0FDMEFLRUVCUmcwQUlBQXZBVEpCLy84RGNTSUNRWngvYWtIa0FFa05BQ0FDUWN3QlJnMEFJQUpCc0FKR0RRQWdBQzhCTUNJQVFjQUFjUTBBUVFFaEFTQUFRWWdFY1VHQUJFWU5BQ0FBUVNoeFJTRUJDeUFCQzZjQkFRTi9Ba0FDUUFKQUlBQXRBQ3BGRFFBZ0FDMEFLMFVOQUVFQUlRTWdBQzhCTUNJRVFRSnhSUTBCREFJTFFRQWhBeUFBTHdFd0lnUkJBWEZGRFFFTFFRRWhBeUFBTFFBb1FRRkdEUUFnQUM4Qk1rSC8vd054SWdWQm5IOXFRZVFBU1EwQUlBVkJ6QUZHRFFBZ0JVR3dBa1lOQUNBRVFjQUFjUTBBUVFBaEF5QUVRWWdFY1VHQUJFWU5BQ0FFUVNoeFFRQkhJUU1MSUFCQkFEc0JNQ0FBUVFBNkFDOGdBd3VaQVFFQ2Z3SkFBa0FDUUNBQUxRQXFSUTBBSUFBdEFDdEZEUUJCQUNFQklBQXZBVEFpQWtFQ2NVVU5BUXdDQzBFQUlRRWdBQzhCTUNJQ1FRRnhSUTBCQzBFQklRRWdBQzBBS0VFQlJnMEFJQUF2QVRKQi8vOERjU0lBUVp4L2FrSGtBRWtOQUNBQVFjd0JSZzBBSUFCQnNBSkdEUUFnQWtIQUFIRU5BRUVBSVFFZ0FrR0lCSEZCZ0FSR0RRQWdBa0VvY1VFQVJ5RUJDeUFCQzFrQUlBQkJHR3BDQURjREFDQUFRZ0EzQXdBZ0FFRTRha0lBTndNQUlBQkJNR3BDQURjREFDQUFRU2hxUWdBM0F3QWdBRUVnYWtJQU53TUFJQUJCRUdwQ0FEY0RBQ0FBUVFocVFnQTNBd0FnQUVIZEFUWUNIRUVBQzNzQkFYOENRQ0FBS0FJTUlnTU5BQUpBSUFBb0FnUkZEUUFnQUNBQk5nSUVDd0pBSUFBZ0FTQUNFTVNBZ0lBQUlnTU5BQ0FBS0FJTUR3c2dBQ0FETmdJY1FRQWhBeUFBS0FJRUlnRkZEUUFnQUNBQklBSWdBQ2dDQ0JHQmdJQ0FBQUFpQVVVTkFDQUFJQUkyQWhRZ0FDQUJOZ0lNSUFFaEF3c2dBd3ZrOHdFRERuOERmZ1IvSTRDQWdJQUFRUkJySWdNa2dJQ0FnQUFnQVNFRUlBRWhCU0FCSVFZZ0FTRUhJQUVoQ0NBQklRa2dBU0VLSUFFaEN5QUJJUXdnQVNFTklBRWhEaUFCSVE4Q1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBZ0FDZ0NIQ0lRUVg5cUR0MEIyZ0VCMlFFQ0F3UUZCZ2NJQ1FvTERBME8yQUVQRU5jQkVSTFdBUk1VRlJZWEdCa2FHK0FCM3dFY0hSN1ZBUjhnSVNJakpDWFVBU1luS0NrcUt5elRBZElCTFM3UkFkQUJMekF4TWpNME5UWTNPRGs2T3p3OVBqOUFRVUpEUkVWRzJ3RkhTRWxLendIT0FVdk5BVXpNQVUxT1QxQlJVbE5VVlZaWFdGbGFXMXhkWGw5Z1lXSmpaR1ZtWjJocGFtdHNiVzV2Y0hGeWMzUjFkbmQ0ZVhwN2ZIMStmNEFCZ1FHQ0FZTUJoQUdGQVlZQmh3R0lBWWtCaWdHTEFZd0JqUUdPQVk4QmtBR1JBWklCa3dHVUFaVUJsZ0dYQVpnQm1RR2FBWnNCbkFHZEFaNEJud0dnQWFFQm9nR2pBYVFCcFFHbUFhY0JxQUdwQWFvQnF3R3NBYTBCcmdHdkFiQUJzUUd5QWJNQnRBRzFBYllCdHdITEFjb0J1QUhKQWJrQnlBRzZBYnNCdkFHOUFiNEJ2d0hBQWNFQndnSERBY1FCeFFIR0FRRGNBUXRCQUNFUURNWUJDMEVPSVJBTXhRRUxRUTBoRUF6RUFRdEJEeUVRRE1NQkMwRVFJUkFNd2dFTFFSTWhFQXpCQVF0QkZDRVFETUFCQzBFVklSQU12d0VMUVJZaEVBeStBUXRCRnlFUURMMEJDMEVZSVJBTXZBRUxRUmtoRUF5N0FRdEJHaUVRRExvQkMwRWJJUkFNdVFFTFFSd2hFQXk0QVF0QkNDRVFETGNCQzBFZElSQU10Z0VMUVNBaEVBeTFBUXRCSHlFUURMUUJDMEVISVJBTXN3RUxRU0VoRUF5eUFRdEJJaUVRRExFQkMwRWVJUkFNc0FFTFFTTWhFQXl2QVF0QkVpRVFESzRCQzBFUklSQU1yUUVMUVNRaEVBeXNBUXRCSlNFUURLc0JDMEVtSVJBTXFnRUxRU2NoRUF5cEFRdEJ3d0VoRUF5b0FRdEJLU0VRREtjQkMwRXJJUkFNcGdFTFFTd2hFQXlsQVF0QkxTRVFES1FCQzBFdUlSQU1vd0VMUVM4aEVBeWlBUXRCeEFFaEVBeWhBUXRCTUNFUURLQUJDMEUwSVJBTW53RUxRUXdoRUF5ZUFRdEJNU0VRREowQkMwRXlJUkFNbkFFTFFUTWhFQXliQVF0Qk9TRVFESm9CQzBFMUlSQU1tUUVMUWNVQklSQU1tQUVMUVFzaEVBeVhBUXRCT2lFUURKWUJDMEUySVJBTWxRRUxRUW9oRUF5VUFRdEJOeUVRREpNQkMwRTRJUkFNa2dFTFFUd2hFQXlSQVF0Qk95RVFESkFCQzBFOUlSQU1qd0VMUVFraEVBeU9BUXRCS0NFUURJMEJDMEUrSVJBTWpBRUxRVDhoRUF5TEFRdEJ3QUFoRUF5S0FRdEJ3UUFoRUF5SkFRdEJ3Z0FoRUF5SUFRdEJ3d0FoRUF5SEFRdEJ4QUFoRUF5R0FRdEJ4UUFoRUF5RkFRdEJ4Z0FoRUF5RUFRdEJLaUVRRElNQkMwSEhBQ0VRRElJQkMwSElBQ0VRRElFQkMwSEpBQ0VRRElBQkMwSEtBQ0VRREg4TFFjc0FJUkFNZmd0QnpRQWhFQXg5QzBITUFDRVFESHdMUWM0QUlSQU1ld3RCendBaEVBeDZDMEhRQUNFUURIa0xRZEVBSVJBTWVBdEIwZ0FoRUF4M0MwSFRBQ0VRREhZTFFkUUFJUkFNZFF0QjFnQWhFQXgwQzBIVkFDRVFESE1MUVFZaEVBeHlDMEhYQUNFUURIRUxRUVVoRUF4d0MwSFlBQ0VRREc4TFFRUWhFQXh1QzBIWkFDRVFERzBMUWRvQUlSQU1iQXRCMndBaEVBeHJDMEhjQUNFUURHb0xRUU1oRUF4cEMwSGRBQ0VRREdnTFFkNEFJUkFNWnd0QjN3QWhFQXhtQzBIaEFDRVFER1VMUWVBQUlSQU1aQXRCNGdBaEVBeGpDMEhqQUNFUURHSUxRUUloRUF4aEMwSGtBQ0VRREdBTFFlVUFJUkFNWHd0QjVnQWhFQXhlQzBIbkFDRVFERjBMUWVnQUlSQU1YQXRCNlFBaEVBeGJDMEhxQUNFUURGb0xRZXNBSVJBTVdRdEI3QUFoRUF4WUMwSHRBQ0VRREZjTFFlNEFJUkFNVmd0Qjd3QWhFQXhWQzBId0FDRVFERlFMUWZFQUlSQU1Vd3RCOGdBaEVBeFNDMEh6QUNFUURGRUxRZlFBSVJBTVVBdEI5UUFoRUF4UEMwSDJBQ0VRREU0TFFmY0FJUkFNVFF0QitBQWhFQXhNQzBINUFDRVFERXNMUWZvQUlSQU1TZ3RCK3dBaEVBeEpDMEg4QUNFUURFZ0xRZjBBSVJBTVJ3dEIvZ0FoRUF4R0MwSC9BQ0VRREVVTFFZQUJJUkFNUkF0QmdRRWhFQXhEQzBHQ0FTRVFERUlMUVlNQklSQU1RUXRCaEFFaEVBeEFDMEdGQVNFUUREOExRWVlCSVJBTVBndEJod0VoRUF3OUMwR0lBU0VRRER3TFFZa0JJUkFNT3d0QmlnRWhFQXc2QzBHTEFTRVFERGtMUVl3QklSQU1PQXRCalFFaEVBdzNDMEdPQVNFUUREWUxRWThCSVJBTU5RdEJrQUVoRUF3MEMwR1JBU0VRRERNTFFaSUJJUkFNTWd0Qmt3RWhFQXd4QzBHVUFTRVFEREFMUVpVQklSQU1Md3RCbGdFaEVBd3VDMEdYQVNFUURDMExRWmdCSVJBTUxBdEJtUUVoRUF3ckMwR2FBU0VRRENvTFFac0JJUkFNS1F0Qm5BRWhFQXdvQzBHZEFTRVFEQ2NMUVo0QklSQU1KZ3RCbndFaEVBd2xDMEdnQVNFUURDUUxRYUVCSVJBTUl3dEJvZ0VoRUF3aUMwR2pBU0VRRENFTFFhUUJJUkFNSUF0QnBRRWhFQXdmQzBHbUFTRVFEQjRMUWFjQklSQU1IUXRCcUFFaEVBd2NDMEdwQVNFUURCc0xRYW9CSVJBTUdndEJxd0VoRUF3WkMwR3NBU0VRREJnTFFhMEJJUkFNRnd0QnJnRWhFQXdXQzBFQklSQU1GUXRCcndFaEVBd1VDMEd3QVNFUURCTUxRYkVCSVJBTUVndEJzd0VoRUF3UkMwR3lBU0VRREJBTFFiUUJJUkFNRHd0QnRRRWhFQXdPQzBHMkFTRVFEQTBMUWJjQklSQU1EQXRCdUFFaEVBd0xDMEc1QVNFUURBb0xRYm9CSVJBTUNRdEJ1d0VoRUF3SUMwSEdBU0VRREFjTFFid0JJUkFNQmd0QnZRRWhFQXdGQzBHK0FTRVFEQVFMUWI4QklSQU1Bd3RCd0FFaEVBd0NDMEhDQVNFUURBRUxRY0VCSVJBTEEwQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQ0FRRHNjQkFBRUNBd1FGQmdjSUNRb0xEQTBPRHhBUkVoTVVGUllYR0JrYUd4d2VIeUFoSXlVb1AwQkJSRVZHUjBoSlNrdE1UVTlRVVZKVDNnTlhXVnRjWFdCaVpXWm5hR2xxYTJ4dGIzQnhjbk4wZFhaM2VIbDZlM3g5Zm9BQmdnR0ZBWVlCaHdHSkFZc0JqQUdOQVk0Qmp3R1FBWkVCbEFHVkFaWUJsd0dZQVprQm1nR2JBWndCblFHZUFaOEJvQUdoQWFJQm93R2tBYVVCcGdHbkFhZ0JxUUdxQWFzQnJBR3RBYTRCcndHd0FiRUJzZ0d6QWJRQnRRRzJBYmNCdUFHNUFib0J1d0c4QWIwQnZnRy9BY0FCd1FIQ0FjTUJ4QUhGQWNZQnh3SElBY2tCeWdITEFjd0J6UUhPQWM4QjBBSFJBZElCMHdIVUFkVUIxZ0hYQWRnQjJRSGFBZHNCM0FIZEFkNEI0QUhoQWVJQjR3SGtBZVVCNWdIbkFlZ0I2UUhxQWVzQjdBSHRBZTRCN3dId0FmRUI4Z0h6QVprQ3BBS3dBdjRDL2dJTElBRWlCQ0FDUnczekFVSGRBU0VRRFA4REN5QUJJaEFnQWtjTjNRRkJ3d0VoRUF6K0F3c2dBU0lCSUFKSERaQUJRZmNBSVJBTS9RTUxJQUVpQVNBQ1J3MkdBVUh2QUNFUURQd0RDeUFCSWdFZ0FrY05mMEhxQUNFUURQc0RDeUFCSWdFZ0FrY05lMEhvQUNFUURQb0RDeUFCSWdFZ0FrY05lRUhtQUNFUURQa0RDeUFCSWdFZ0FrY05Ha0VZSVJBTStBTUxJQUVpQVNBQ1J3MFVRUkloRUF6M0F3c2dBU0lCSUFKSERWbEJ4UUFoRUF6MkF3c2dBU0lCSUFKSERVcEJQeUVRRFBVREN5QUJJZ0VnQWtjTlNFRThJUkFNOUFNTElBRWlBU0FDUncxQlFURWhFQXp6QXdzZ0FDMEFMa0VCUmczckF3eUhBZ3NnQUNBQklnRWdBaERBZ0lDQUFFRUJSdzNtQVNBQVFnQTNBeUFNNXdFTElBQWdBU0lCSUFJUXRJQ0FnQUFpRUEzbkFTQUJJUUVNOVFJTEFrQWdBU0lCSUFKSERRQkJCaUVRRFBBREN5QUFJQUZCQVdvaUFTQUNFTHVBZ0lBQUloQU42QUVnQVNFQkRERUxJQUJDQURjRElFRVNJUkFNMVFNTElBRWlFQ0FDUncwclFSMGhFQXp0QXdzQ1FDQUJJZ0VnQWtZTkFDQUJRUUZxSVFGQkVDRVFETlFEQzBFSElSQU03QU1MSUFCQ0FDQUFLUU1nSWhFZ0FpQUJJaEJyclNJU2ZTSVRJQk1nRVZZYk53TWdJQkVnRWxZaUZFVU41UUZCQ0NFUURPc0RDd0pBSUFFaUFTQUNSZzBBSUFCQmlZQ0FnQUEyQWdnZ0FDQUJOZ0lFSUFFaEFVRVVJUkFNMGdNTFFRa2hFQXpxQXdzZ0FTRUJJQUFwQXlCUURlUUJJQUVoQVF6eUFnc0NRQ0FCSWdFZ0FrY05BRUVMSVJBTTZRTUxJQUFnQVVFQmFpSUJJQUlRdG9DQWdBQWlFQTNsQVNBQklRRU04Z0lMSUFBZ0FTSUJJQUlRdUlDQWdBQWlFQTNsQVNBQklRRU04Z0lMSUFBZ0FTSUJJQUlRdUlDQWdBQWlFQTNtQVNBQklRRU1EUXNnQUNBQklnRWdBaEM2Z0lDQUFDSVFEZWNCSUFFaEFRendBZ3NDUUNBQklnRWdBa2NOQUVFUElSQU01UU1MSUFFdEFBQWlFRUU3UmcwSUlCQkJEVWNONkFFZ0FVRUJhaUVCRE84Q0N5QUFJQUVpQVNBQ0VMcUFnSUFBSWhBTjZBRWdBU0VCRFBJQ0N3TkFBa0FnQVMwQUFFSHd0WUNBQUdvdEFBQWlFRUVCUmcwQUlCQkJBa2NONndFZ0FDZ0NCQ0VRSUFCQkFEWUNCQ0FBSUJBZ0FVRUJhaUlCRUxtQWdJQUFJaEFONmdFZ0FTRUJEUFFDQ3lBQlFRRnFJZ0VnQWtjTkFBdEJFaUVRRE9JREN5QUFJQUVpQVNBQ0VMcUFnSUFBSWhBTjZRRWdBU0VCREFvTElBRWlBU0FDUncwR1FSc2hFQXpnQXdzQ1FDQUJJZ0VnQWtjTkFFRVdJUkFNNEFNTElBQkJpb0NBZ0FBMkFnZ2dBQ0FCTmdJRUlBQWdBU0FDRUxpQWdJQUFJaEFONmdFZ0FTRUJRU0FoRUF6R0F3c0NRQ0FCSWdFZ0FrWU5BQU5BQWtBZ0FTMEFBRUh3dDRDQUFHb3RBQUFpRUVFQ1JnMEFBa0FnRUVGL2FnNEU1UUhzQVFEckFld0JDeUFCUVFGcUlRRkJDQ0VRRE1nREN5QUJRUUZxSWdFZ0FrY05BQXRCRlNFUUROOERDMEVWSVJBTTNnTUxBMEFDUUNBQkxRQUFRZkM1Z0lBQWFpMEFBQ0lRUVFKR0RRQWdFRUYvYWc0RTNnSHNBZUFCNndIc0FRc2dBVUVCYWlJQklBSkhEUUFMUVJnaEVBemRBd3NDUUNBQklnRWdBa1lOQUNBQVFZdUFnSUFBTmdJSUlBQWdBVFlDQkNBQklRRkJCeUVRRE1RREMwRVpJUkFNM0FNTElBRkJBV29oQVF3Q0N3SkFJQUVpRkNBQ1J3MEFRUm9oRUF6YkF3c2dGQ0VCQWtBZ0ZDMEFBRUZ6YWc0VTNRTHVBdTRDN2dMdUF1NEM3Z0x1QXU0QzdnTHVBdTRDN2dMdUF1NEM3Z0x1QXU0QzdnSUE3Z0lMUVFBaEVDQUFRUUEyQWh3Z0FFR3ZpNENBQURZQ0VDQUFRUUkyQWd3Z0FDQVVRUUZxTmdJVUROb0RDd0pBSUFFdEFBQWlFRUU3UmcwQUlCQkJEVWNONkFFZ0FVRUJhaUVCRE9VQ0N5QUJRUUZxSVFFTFFTSWhFQXkvQXdzQ1FDQUJJaEFnQWtjTkFFRWNJUkFNMkFNTFFnQWhFU0FRSVFFZ0VDMEFBRUZRYWc0MzV3SG1BUUVDQXdRRkJnY0lBQUFBQUFBQUFBa0tDd3dORGdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRHhBUkVoTVVBQXRCSGlFUURMMERDMElDSVJFTTVRRUxRZ01oRVF6a0FRdENCQ0VSRE9NQkMwSUZJUkVNNGdFTFFnWWhFUXpoQVF0Q0J5RVJET0FCQzBJSUlSRU0zd0VMUWdraEVRemVBUXRDQ2lFUkROMEJDMElMSVJFTTNBRUxRZ3doRVF6YkFRdENEU0VSRE5vQkMwSU9JUkVNMlFFTFFnOGhFUXpZQVF0Q0NpRVJETmNCQzBJTElSRU0xZ0VMUWd3aEVRelZBUXRDRFNFUkROUUJDMElPSVJFTTB3RUxRZzhoRVF6U0FRdENBQ0VSQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FDQVFMUUFBUVZCcURqZmxBZVFCQUFFQ0F3UUZCZ2ZtQWVZQjVnSG1BZVlCNWdIbUFRZ0pDZ3NNRGVZQjVnSG1BZVlCNWdIbUFlWUI1Z0htQWVZQjVnSG1BZVlCNWdIbUFlWUI1Z0htQWVZQjVnSG1BZVlCNWdIbUFlWUI1Z0VPRHhBUkVoUG1BUXRDQWlFUkRPUUJDMElESVJFTTR3RUxRZ1FoRVF6aUFRdENCU0VSRE9FQkMwSUdJUkVNNEFFTFFnY2hFUXpmQVF0Q0NDRVJETjRCQzBJSklSRU0zUUVMUWdvaEVRemNBUXRDQ3lFUkROc0JDMElNSVJFTTJnRUxRZzBoRVF6WkFRdENEaUVSRE5nQkMwSVBJUkVNMXdFTFFnb2hFUXpXQVF0Q0N5RVJETlVCQzBJTUlSRU0xQUVMUWcwaEVRelRBUXRDRGlFUkROSUJDMElQSVJFTTBRRUxJQUJDQUNBQUtRTWdJaEVnQWlBQkloQnJyU0lTZlNJVElCTWdFVlliTndNZ0lCRWdFbFlpRkVVTjBnRkJIeUVRRE1BREN3SkFJQUVpQVNBQ1JnMEFJQUJCaVlDQWdBQTJBZ2dnQUNBQk5nSUVJQUVoQVVFa0lSQU1wd01MUVNBaEVBeS9Bd3NnQUNBQkloQWdBaEMrZ0lDQUFFRi9hZzRGdGdFQXhRSUIwUUhTQVF0QkVTRVFES1FEQ3lBQVFRRTZBQzhnRUNFQkRMc0RDeUFCSWdFZ0FrY04wZ0ZCSkNFUURMc0RDeUFCSWcwZ0FrY05Ia0hHQUNFUURMb0RDeUFBSUFFaUFTQUNFTEtBZ0lBQUloQU4xQUVnQVNFQkRMVUJDeUFCSWhBZ0FrY05Ka0hRQUNFUURMZ0RDd0pBSUFFaUFTQUNSdzBBUVNnaEVBeTRBd3NnQUVFQU5nSUVJQUJCaklDQWdBQTJBZ2dnQUNBQklBRVFzWUNBZ0FBaUVBM1RBU0FCSVFFTTJBRUxBa0FnQVNJUUlBSkhEUUJCS1NFUURMY0RDeUFRTFFBQUlnRkJJRVlORkNBQlFRbEhEZE1CSUJCQkFXb2hBUXdWQ3dKQUlBRWlBU0FDUmcwQUlBRkJBV29oQVF3WEMwRXFJUkFNdFFNTEFrQWdBU0lRSUFKSERRQkJLeUVRRExVREN3SkFJQkF0QUFBaUFVRUpSZzBBSUFGQklFY04xUUVMSUFBdEFDeEJDRVlOMHdFZ0VDRUJESkVEQ3dKQUlBRWlBU0FDUncwQVFTd2hFQXkwQXdzZ0FTMEFBRUVLUnczVkFTQUJRUUZxSVFFTXlRSUxJQUVpRGlBQ1J3M1ZBVUV2SVJBTXNnTUxBMEFDUUNBQkxRQUFJaEJCSUVZTkFBSkFJQkJCZG1vT0JBRGNBZHdCQU5vQkN5QUJJUUVNNEFFTElBRkJBV29pQVNBQ1J3MEFDMEV4SVJBTXNRTUxRVEloRUNBQkloUWdBa1lOc0FNZ0FpQVVheUFBS0FJQUlnRnFJUlVnRkNBQmEwRURhaUVXQWtBRFFDQVVMUUFBSWhkQklISWdGeUFYUWI5L2FrSC9BWEZCR2trYlFmOEJjU0FCUWZDN2dJQUFhaTBBQUVjTkFRSkFJQUZCQTBjTkFFRUdJUUVNbGdNTElBRkJBV29oQVNBVVFRRnFJaFFnQWtjTkFBc2dBQ0FWTmdJQURMRURDeUFBUVFBMkFnQWdGQ0VCRE5rQkMwRXpJUkFnQVNJVUlBSkdEYThESUFJZ0ZHc2dBQ2dDQUNJQmFpRVZJQlFnQVd0QkNHb2hGZ0pBQTBBZ0ZDMEFBQ0lYUVNCeUlCY2dGMEcvZjJwQi93RnhRUnBKRzBIL0FYRWdBVUgwdTRDQUFHb3RBQUJIRFFFQ1FDQUJRUWhIRFFCQkJTRUJESlVEQ3lBQlFRRnFJUUVnRkVFQmFpSVVJQUpIRFFBTElBQWdGVFlDQUF5d0F3c2dBRUVBTmdJQUlCUWhBUXpZQVF0Qk5DRVFJQUVpRkNBQ1JnMnVBeUFDSUJScklBQW9BZ0FpQVdvaEZTQVVJQUZyUVFWcUlSWUNRQU5BSUJRdEFBQWlGMEVnY2lBWElCZEJ2MzlxUWY4QmNVRWFTUnRCL3dGeElBRkIwTUtBZ0FCcUxRQUFSdzBCQWtBZ0FVRUZSdzBBUVFjaEFReVVBd3NnQVVFQmFpRUJJQlJCQVdvaUZDQUNSdzBBQ3lBQUlCVTJBZ0FNcndNTElBQkJBRFlDQUNBVUlRRU0xd0VMQWtBZ0FTSUJJQUpHRFFBRFFBSkFJQUV0QUFCQmdMNkFnQUJxTFFBQUloQkJBVVlOQUNBUVFRSkdEUW9nQVNFQkROMEJDeUFCUVFGcUlnRWdBa2NOQUF0Qk1DRVFESzREQzBFd0lSQU1yUU1MQWtBZ0FTSUJJQUpHRFFBRFFBSkFJQUV0QUFBaUVFRWdSZzBBSUJCQmRtb09CTmtCMmdIYUFka0IyZ0VMSUFGQkFXb2lBU0FDUncwQUMwRTRJUkFNclFNTFFUZ2hFQXlzQXdzRFFBSkFJQUV0QUFBaUVFRWdSZzBBSUJCQkNVY05Bd3NnQVVFQmFpSUJJQUpIRFFBTFFUd2hFQXlyQXdzRFFBSkFJQUV0QUFBaUVFRWdSZzBBQWtBQ1FDQVFRWFpxRGdUYUFRRUIyZ0VBQ3lBUVFTeEdEZHNCQ3lBQklRRU1CQXNnQVVFQmFpSUJJQUpIRFFBTFFUOGhFQXlxQXdzZ0FTRUJETnNCQzBIQUFDRVFJQUVpRkNBQ1JnMm9BeUFDSUJScklBQW9BZ0FpQVdvaEZpQVVJQUZyUVFacUlSY0NRQU5BSUJRdEFBQkJJSElnQVVHQXdJQ0FBR290QUFCSERRRWdBVUVHUmcyT0F5QUJRUUZxSVFFZ0ZFRUJhaUlVSUFKSERRQUxJQUFnRmpZQ0FBeXBBd3NnQUVFQU5nSUFJQlFoQVF0Qk5pRVFESTREQ3dKQUlBRWlEeUFDUncwQVFjRUFJUkFNcHdNTElBQkJqSUNBZ0FBMkFnZ2dBQ0FQTmdJRUlBOGhBU0FBTFFBc1FYOXFEZ1ROQWRVQjF3SFpBWWNEQ3lBQlFRRnFJUUVNekFFTEFrQWdBU0lCSUFKR0RRQURRQUpBSUFFdEFBQWlFRUVnY2lBUUlCQkJ2MzlxUWY4QmNVRWFTUnRCL3dGeEloQkJDVVlOQUNBUVFTQkdEUUFDUUFKQUFrQUNRQ0FRUVoxL2FnNFRBQU1EQXdNREF3TUJBd01EQXdNREF3TURBZ01MSUFGQkFXb2hBVUV4SVJBTWtRTUxJQUZCQVdvaEFVRXlJUkFNa0FNTElBRkJBV29oQVVFeklSQU1qd01MSUFFaEFRelFBUXNnQVVFQmFpSUJJQUpIRFFBTFFUVWhFQXlsQXd0Qk5TRVFES1FEQ3dKQUlBRWlBU0FDUmcwQUEwQUNRQ0FCTFFBQVFZQzhnSUFBYWkwQUFFRUJSZzBBSUFFaEFRelRBUXNnQVVFQmFpSUJJQUpIRFFBTFFUMGhFQXlrQXd0QlBTRVFES01EQ3lBQUlBRWlBU0FDRUxDQWdJQUFJaEFOMWdFZ0FTRUJEQUVMSUJCQkFXb2hBUXRCUENFUURJY0RDd0pBSUFFaUFTQUNSdzBBUWNJQUlSQU1vQU1MQWtBRFFBSkFJQUV0QUFCQmQyb09HQUFDL2dMK0FvUUQvZ0wrQXY0Qy9nTCtBdjRDL2dMK0F2NEMvZ0wrQXY0Qy9nTCtBdjRDL2dMK0F2NENBUDRDQ3lBQlFRRnFJZ0VnQWtjTkFBdEJ3Z0FoRUF5Z0F3c2dBVUVCYWlFQklBQXRBQzFCQVhGRkRiMEJJQUVoQVF0QkxDRVFESVVEQ3lBQklnRWdBa2NOMHdGQnhBQWhFQXlkQXdzRFFBSkFJQUV0QUFCQmtNQ0FnQUJxTFFBQVFRRkdEUUFnQVNFQkRMY0NDeUFCUVFGcUlnRWdBa2NOQUF0QnhRQWhFQXljQXdzZ0RTMEFBQ0lRUVNCR0RiTUJJQkJCT2tjTmdRTWdBQ2dDQkNFQklBQkJBRFlDQkNBQUlBRWdEUkN2Z0lDQUFDSUJEZEFCSUExQkFXb2hBUXl6QWd0Qnh3QWhFQ0FCSWcwZ0FrWU5tZ01nQWlBTmF5QUFLQUlBSWdGcUlSWWdEU0FCYTBFRmFpRVhBMEFnRFMwQUFDSVVRU0J5SUJRZ0ZFRy9mMnBCL3dGeFFScEpHMEgvQVhFZ0FVR1F3b0NBQUdvdEFBQkhEWUFESUFGQkJVWU45QUlnQVVFQmFpRUJJQTFCQVdvaURTQUNSdzBBQ3lBQUlCWTJBZ0FNbWdNTFFjZ0FJUkFnQVNJTklBSkdEWmtESUFJZ0RXc2dBQ2dDQUNJQmFpRVdJQTBnQVd0QkNXb2hGd05BSUEwdEFBQWlGRUVnY2lBVUlCUkJ2MzlxUWY4QmNVRWFTUnRCL3dGeElBRkJsc0tBZ0FCcUxRQUFSdzMvQWdKQUlBRkJDVWNOQUVFQ0lRRU05UUlMSUFGQkFXb2hBU0FOUVFGcUlnMGdBa2NOQUFzZ0FDQVdOZ0lBREprREN3SkFJQUVpRFNBQ1J3MEFRY2tBSVJBTW1RTUxBa0FDUUNBTkxRQUFJZ0ZCSUhJZ0FTQUJRYjkvYWtIL0FYRkJHa2tiUWY4QmNVR1NmMm9PQndDQUE0QURnQU9BQTRBREFZQURDeUFOUVFGcUlRRkJQaUVRRElBREN5QU5RUUZxSVFGQlB5RVFEUDhDQzBIS0FDRVFJQUVpRFNBQ1JnMlhBeUFDSUExcklBQW9BZ0FpQVdvaEZpQU5JQUZyUVFGcUlSY0RRQ0FOTFFBQUloUkJJSElnRkNBVVFiOS9ha0gvQVhGQkdra2JRZjhCY1NBQlFhRENnSUFBYWkwQUFFY04vUUlnQVVFQlJnM3dBaUFCUVFGcUlRRWdEVUVCYWlJTklBSkhEUUFMSUFBZ0ZqWUNBQXlYQXd0Qnl3QWhFQ0FCSWcwZ0FrWU5sZ01nQWlBTmF5QUFLQUlBSWdGcUlSWWdEU0FCYTBFT2FpRVhBMEFnRFMwQUFDSVVRU0J5SUJRZ0ZFRy9mMnBCL3dGeFFScEpHMEgvQVhFZ0FVR2l3b0NBQUdvdEFBQkhEZndDSUFGQkRrWU44QUlnQVVFQmFpRUJJQTFCQVdvaURTQUNSdzBBQ3lBQUlCWTJBZ0FNbGdNTFFjd0FJUkFnQVNJTklBSkdEWlVESUFJZ0RXc2dBQ2dDQUNJQmFpRVdJQTBnQVd0QkQyb2hGd05BSUEwdEFBQWlGRUVnY2lBVUlCUkJ2MzlxUWY4QmNVRWFTUnRCL3dGeElBRkJ3TUtBZ0FCcUxRQUFSdzM3QWdKQUlBRkJEMGNOQUVFRElRRU04UUlMSUFGQkFXb2hBU0FOUVFGcUlnMGdBa2NOQUFzZ0FDQVdOZ0lBREpVREMwSE5BQ0VRSUFFaURTQUNSZzJVQXlBQ0lBMXJJQUFvQWdBaUFXb2hGaUFOSUFGclFRVnFJUmNEUUNBTkxRQUFJaFJCSUhJZ0ZDQVVRYjkvYWtIL0FYRkJHa2tiUWY4QmNTQUJRZERDZ0lBQWFpMEFBRWNOK2dJQ1FDQUJRUVZIRFFCQkJDRUJEUEFDQ3lBQlFRRnFJUUVnRFVFQmFpSU5JQUpIRFFBTElBQWdGallDQUF5VUF3c0NRQ0FCSWcwZ0FrY05BRUhPQUNFUURKUURDd0pBQWtBQ1FBSkFJQTB0QUFBaUFVRWdjaUFCSUFGQnYzOXFRZjhCY1VFYVNSdEIvd0Z4UVoxL2FnNFRBUDBDL1FMOUF2MEMvUUw5QXYwQy9RTDlBdjBDL1FMOUFnSDlBdjBDL1FJQ0EvMENDeUFOUVFGcUlRRkJ3UUFoRUF6OUFnc2dEVUVCYWlFQlFjSUFJUkFNL0FJTElBMUJBV29oQVVIREFDRVFEUHNDQ3lBTlFRRnFJUUZCeEFBaEVBejZBZ3NDUUNBQklnRWdBa1lOQUNBQVFZMkFnSUFBTmdJSUlBQWdBVFlDQkNBQklRRkJ4UUFoRUF6NkFndEJ6d0FoRUF5U0F3c2dFQ0VCQWtBQ1FDQVFMUUFBUVhacURnUUJxQUtvQWdDb0Fnc2dFRUVCYWlFQkMwRW5JUkFNK0FJTEFrQWdBU0lCSUFKSERRQkIwUUFoRUF5UkF3c0NRQ0FCTFFBQVFTQkdEUUFnQVNFQkRJMEJDeUFCUVFGcUlRRWdBQzBBTFVFQmNVVU54d0VnQVNFQkRJd0JDeUFCSWhjZ0FrY055QUZCMGdBaEVBeVBBd3RCMHdBaEVDQUJJaFFnQWtZTmpnTWdBaUFVYXlBQUtBSUFJZ0ZxSVJZZ0ZDQUJhMEVCYWlFWEEwQWdGQzBBQUNBQlFkYkNnSUFBYWkwQUFFY056QUVnQVVFQlJnM0hBU0FCUVFGcUlRRWdGRUVCYWlJVUlBSkhEUUFMSUFBZ0ZqWUNBQXlPQXdzQ1FDQUJJZ0VnQWtjTkFFSFZBQ0VRREk0REN5QUJMUUFBUVFwSERjd0JJQUZCQVdvaEFRekhBUXNDUUNBQklnRWdBa2NOQUVIV0FDRVFESTBEQ3dKQUFrQWdBUzBBQUVGMmFnNEVBTTBCelFFQnpRRUxJQUZCQVdvaEFRekhBUXNnQVVFQmFpRUJRY29BSVJBTTh3SUxJQUFnQVNJQklBSVFyb0NBZ0FBaUVBM0xBU0FCSVFGQnpRQWhFQXp5QWdzZ0FDMEFLVUVpUmcyRkF3eW1BZ3NDUUNBQklnRWdBa2NOQUVIYkFDRVFESW9EQzBFQUlSUkJBU0VYUVFFaEZrRUFJUkFDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FnQVMwQUFFRlFhZzRLMUFIVEFRQUJBZ01FQlFZSTFRRUxRUUloRUF3R0MwRURJUkFNQlF0QkJDRVFEQVFMUVFVaEVBd0RDMEVHSVJBTUFndEJCeUVRREFFTFFRZ2hFQXRCQUNFWFFRQWhGa0VBSVJRTXpBRUxRUWtoRUVFQklSUkJBQ0VYUVFBaEZnekxBUXNDUUNBQklnRWdBa2NOQUVIZEFDRVFESWtEQ3lBQkxRQUFRUzVIRGN3QklBRkJBV29oQVF5bUFnc2dBU0lCSUFKSERjd0JRZDhBSVJBTWh3TUxBa0FnQVNJQklBSkdEUUFnQUVHT2dJQ0FBRFlDQ0NBQUlBRTJBZ1FnQVNFQlFkQUFJUkFNN2dJTFFlQUFJUkFNaGdNTFFlRUFJUkFnQVNJQklBSkdEWVVESUFJZ0FXc2dBQ2dDQUNJVWFpRVdJQUVnRkd0QkEyb2hGd05BSUFFdEFBQWdGRUhpd29DQUFHb3RBQUJIRGMwQklCUkJBMFlOekFFZ0ZFRUJhaUVVSUFGQkFXb2lBU0FDUncwQUN5QUFJQlkyQWdBTWhRTUxRZUlBSVJBZ0FTSUJJQUpHRFlRRElBSWdBV3NnQUNnQ0FDSVVhaUVXSUFFZ0ZHdEJBbW9oRndOQUlBRXRBQUFnRkVIbXdvQ0FBR290QUFCSERjd0JJQlJCQWtZTnpnRWdGRUVCYWlFVUlBRkJBV29pQVNBQ1J3MEFDeUFBSUJZMkFnQU1oQU1MUWVNQUlSQWdBU0lCSUFKR0RZTURJQUlnQVdzZ0FDZ0NBQ0lVYWlFV0lBRWdGR3RCQTJvaEZ3TkFJQUV0QUFBZ0ZFSHB3b0NBQUdvdEFBQkhEY3NCSUJSQkEwWU56Z0VnRkVFQmFpRVVJQUZCQVdvaUFTQUNSdzBBQ3lBQUlCWTJBZ0FNZ3dNTEFrQWdBU0lCSUFKSERRQkI1UUFoRUF5REF3c2dBQ0FCUVFGcUlnRWdBaENvZ0lDQUFDSVFEYzBCSUFFaEFVSFdBQ0VRRE9rQ0N3SkFJQUVpQVNBQ1JnMEFBMEFDUUNBQkxRQUFJaEJCSUVZTkFBSkFBa0FDUUNBUVFiaC9hZzRMQUFIUEFjOEJ6d0hQQWM4Qnp3SFBBYzhCQXM4QkN5QUJRUUZxSVFGQjBnQWhFQXp0QWdzZ0FVRUJhaUVCUWRNQUlSQU03QUlMSUFGQkFXb2hBVUhVQUNFUURPc0NDeUFCUVFGcUlnRWdBa2NOQUF0QjVBQWhFQXlDQXd0QjVBQWhFQXlCQXdzRFFBSkFJQUV0QUFCQjhNS0FnQUJxTFFBQUloQkJBVVlOQUNBUVFYNXFEZ1BQQWRBQjBRSFNBUXNnQVVFQmFpSUJJQUpIRFFBTFFlWUFJUkFNZ0FNTEFrQWdBU0lCSUFKR0RRQWdBVUVCYWlFQkRBTUxRZWNBSVJBTS93SUxBMEFDUUNBQkxRQUFRZkRFZ0lBQWFpMEFBQ0lRUVFGR0RRQUNRQ0FRUVg1cURnVFNBZE1CMUFFQTFRRUxJQUVoQVVIWEFDRVFET2NDQ3lBQlFRRnFJZ0VnQWtjTkFBdEI2QUFoRUF6K0Fnc0NRQ0FCSWdFZ0FrY05BRUhwQUNFUURQNENDd0pBSUFFdEFBQWlFRUYyYWc0YXVnSFZBZFVCdkFIVkFkVUIxUUhWQWRVQjFRSFZBZFVCMVFIVkFkVUIxUUhWQWRVQjFRSFZBZFVCMVFIS0FkVUIxUUVBMHdFTElBRkJBV29oQVF0QkJpRVFET01DQ3dOQUFrQWdBUzBBQUVId3hvQ0FBR290QUFCQkFVWU5BQ0FCSVFFTW5nSUxJQUZCQVdvaUFTQUNSdzBBQzBIcUFDRVFEUHNDQ3dKQUlBRWlBU0FDUmcwQUlBRkJBV29oQVF3REMwSHJBQ0VRRFBvQ0N3SkFJQUVpQVNBQ1J3MEFRZXdBSVJBTStnSUxJQUZCQVdvaEFRd0JDd0pBSUFFaUFTQUNSdzBBUWUwQUlSQU0rUUlMSUFGQkFXb2hBUXRCQkNFUURONENDd0pBSUFFaUZDQUNSdzBBUWU0QUlSQU05d0lMSUJRaEFRSkFBa0FDUUNBVUxRQUFRZkRJZ0lBQWFpMEFBRUYvYWc0SDFBSFZBZFlCQUp3Q0FRTFhBUXNnRkVFQmFpRUJEQW9MSUJSQkFXb2hBUXpOQVF0QkFDRVFJQUJCQURZQ0hDQUFRWnVTZ0lBQU5nSVFJQUJCQnpZQ0RDQUFJQlJCQVdvMkFoUU05Z0lMQWtBRFFBSkFJQUV0QUFCQjhNaUFnQUJxTFFBQUloQkJCRVlOQUFKQUFrQWdFRUYvYWc0SDBnSFRBZFFCMlFFQUJBSFpBUXNnQVNFQlFkb0FJUkFNNEFJTElBRkJBV29oQVVIY0FDRVFETjhDQ3lBQlFRRnFJZ0VnQWtjTkFBdEI3d0FoRUF6MkFnc2dBVUVCYWlFQkRNc0JDd0pBSUFFaUZDQUNSdzBBUWZBQUlSQU05UUlMSUJRdEFBQkJMMGNOMUFFZ0ZFRUJhaUVCREFZTEFrQWdBU0lVSUFKSERRQkI4UUFoRUF6MEFnc0NRQ0FVTFFBQUlnRkJMMGNOQUNBVVFRRnFJUUZCM1FBaEVBemJBZ3NnQVVGMmFpSUVRUlpMRGRNQlFRRWdCSFJCaVlDQUFuRkZEZE1CRE1vQ0N3SkFJQUVpQVNBQ1JnMEFJQUZCQVdvaEFVSGVBQ0VRRE5vQ0MwSHlBQ0VRRFBJQ0N3SkFJQUVpRkNBQ1J3MEFRZlFBSVJBTThnSUxJQlFoQVFKQUlCUXRBQUJCOE15QWdBQnFMUUFBUVg5cURnUEpBcFFDQU5RQkMwSGhBQ0VRRE5nQ0N3SkFJQUVpRkNBQ1JnMEFBMEFDUUNBVUxRQUFRZkRLZ0lBQWFpMEFBQ0lCUVFOR0RRQUNRQ0FCUVg5cURnTExBZ0RWQVFzZ0ZDRUJRZDhBSVJBTTJnSUxJQlJCQVdvaUZDQUNSdzBBQzBIekFDRVFEUEVDQzBIekFDRVFEUEFDQ3dKQUlBRWlBU0FDUmcwQUlBQkJqNENBZ0FBMkFnZ2dBQ0FCTmdJRUlBRWhBVUhnQUNFUUROY0NDMEgxQUNFUURPOENDd0pBSUFFaUFTQUNSdzBBUWZZQUlSQU03d0lMSUFCQmo0Q0FnQUEyQWdnZ0FDQUJOZ0lFSUFFaEFRdEJBeUVRRE5RQ0N3TkFJQUV0QUFCQklFY053d0lnQVVFQmFpSUJJQUpIRFFBTFFmY0FJUkFNN0FJTEFrQWdBU0lCSUFKSERRQkIrQUFoRUF6c0Fnc2dBUzBBQUVFZ1J3M09BU0FCUVFGcUlRRU03d0VMSUFBZ0FTSUJJQUlRcklDQWdBQWlFQTNPQVNBQklRRU1qZ0lMQWtBZ0FTSUVJQUpIRFFCQitnQWhFQXpxQWdzZ0JDMEFBRUhNQUVjTjBRRWdCRUVCYWlFQlFSTWhFQXpQQVFzQ1FDQUJJZ1FnQWtjTkFFSDdBQ0VRRE9rQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUVZxSVJBRFFDQUVMUUFBSUFGQjhNNkFnQUJxTFFBQVJ3M1FBU0FCUVFWR0RjNEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRZnNBSVJBTTZBSUxBa0FnQVNJRUlBSkhEUUJCL0FBaEVBem9BZ3NDUUFKQUlBUXRBQUJCdlg5cURnd0EwUUhSQWRFQjBRSFJBZEVCMFFIUkFkRUIwUUVCMFFFTElBUkJBV29oQVVIbUFDRVFETThDQ3lBRVFRRnFJUUZCNXdBaEVBek9BZ3NDUUNBQklnUWdBa2NOQUVIOUFDRVFET2NDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRSnFJUkFDUUFOQUlBUXRBQUFnQVVIdHo0Q0FBR290QUFCSERjOEJJQUZCQWtZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFSDlBQ0VRRE9jQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVJBaEVBek1BUXNDUUNBQklnUWdBa2NOQUVIK0FDRVFET1lDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRVnFJUkFDUUFOQUlBUXRBQUFnQVVIMnpvQ0FBR290QUFCSERjNEJJQUZCQlVZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFSCtBQ0VRRE9ZQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVJZaEVBekxBUXNDUUNBQklnUWdBa2NOQUVIL0FDRVFET1VDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRTnFJUkFDUUFOQUlBUXRBQUFnQVVIOHpvQ0FBR290QUFCSERjMEJJQUZCQTBZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFSC9BQ0VRRE9VQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVFVaEVBektBUXNDUUNBQklnUWdBa2NOQUVHQUFTRVFET1FDQ3lBRUxRQUFRZGtBUnczTEFTQUVRUUZxSVFGQkNDRVFETWtCQ3dKQUlBRWlCQ0FDUncwQVFZRUJJUkFNNHdJTEFrQUNRQ0FFTFFBQVFiSi9hZzREQU13QkFjd0JDeUFFUVFGcUlRRkI2d0FoRUF6S0Fnc2dCRUVCYWlFQlFld0FJUkFNeVFJTEFrQWdBU0lFSUFKSERRQkJnZ0VoRUF6aUFnc0NRQUpBSUFRdEFBQkJ1SDlxRGdnQXl3SExBY3NCeXdITEFjc0JBY3NCQ3lBRVFRRnFJUUZCNmdBaEVBekpBZ3NnQkVFQmFpRUJRZTBBSVJBTXlBSUxBa0FnQVNJRUlBSkhEUUJCZ3dFaEVBemhBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSQWdCQ0FCYTBFQ2FpRVVBa0FEUUNBRUxRQUFJQUZCZ00rQWdBQnFMUUFBUnczSkFTQUJRUUpHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQkEyQWdCQmd3RWhFQXpoQWd0QkFDRVFJQUJCQURZQ0FDQVVRUUZxSVFFTXhnRUxBa0FnQVNJRUlBSkhEUUJCaEFFaEVBemdBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFRWFpRVFBa0FEUUNBRUxRQUFJQUZCZzgrQWdBQnFMUUFBUnczSUFTQUJRUVJHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQmhBRWhFQXpnQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVqSVJBTXhRRUxBa0FnQVNJRUlBSkhEUUJCaFFFaEVBemZBZ3NDUUFKQUlBUXRBQUJCdEg5cURnZ0F5QUhJQWNnQnlBSElBY2dCQWNnQkN5QUVRUUZxSVFGQjd3QWhFQXpHQWdzZ0JFRUJhaUVCUWZBQUlSQU14UUlMQWtBZ0FTSUVJQUpIRFFCQmhnRWhFQXplQWdzZ0JDMEFBRUhGQUVjTnhRRWdCRUVCYWlFQkRJTUNDd0pBSUFFaUJDQUNSdzBBUVljQklSQU0zUUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkEyb2hFQUpBQTBBZ0JDMEFBQ0FCUVlqUGdJQUFhaTBBQUVjTnhRRWdBVUVEUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFZY0JJUkFNM1FJTElBQkJBRFlDQUNBUVFRRnFJUUZCTFNFUURNSUJDd0pBSUFFaUJDQUNSdzBBUVlnQklSQU0zQUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkNHb2hFQUpBQTBBZ0JDMEFBQ0FCUWREUGdJQUFhaTBBQUVjTnhBRWdBVUVJUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFZZ0JJUkFNM0FJTElBQkJBRFlDQUNBUVFRRnFJUUZCS1NFUURNRUJDd0pBSUFFaUFTQUNSdzBBUVlrQklSQU0yd0lMUVFFaEVDQUJMUUFBUWQ4QVJ3M0FBU0FCUVFGcUlRRU1nUUlMQWtBZ0FTSUVJQUpIRFFCQmlnRWhFQXphQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUJhaUVRQTBBZ0JDMEFBQ0FCUVl6UGdJQUFhaTBBQUVjTndRRWdBVUVCUmcydkFpQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR0tBU0VRRE5rQ0N3SkFJQUVpQkNBQ1J3MEFRWXNCSVJBTTJRSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQW1vaEVBSkFBMEFnQkMwQUFDQUJRWTdQZ0lBQWFpMEFBRWNOd1FFZ0FVRUNSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVlzQklSQU0yUUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJBaUVRREw0QkN3SkFJQUVpQkNBQ1J3MEFRWXdCSVJBTTJBSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQVdvaEVBSkFBMEFnQkMwQUFDQUJRZkRQZ0lBQWFpMEFBRWNOd0FFZ0FVRUJSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVl3QklSQU0yQUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJIeUVRREwwQkN3SkFJQUVpQkNBQ1J3MEFRWTBCSVJBTTF3SUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQVdvaEVBSkFBMEFnQkMwQUFDQUJRZkxQZ0lBQWFpMEFBRWNOdndFZ0FVRUJSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVkwQklSQU0xd0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJDU0VRREx3QkN3SkFJQUVpQkNBQ1J3MEFRWTRCSVJBTTFnSUxBa0FDUUNBRUxRQUFRYmQvYWc0SEFMOEJ2d0cvQWI4QnZ3RUJ2d0VMSUFSQkFXb2hBVUg0QUNFUURMMENDeUFFUVFGcUlRRkIrUUFoRUF5OEFnc0NRQ0FCSWdRZ0FrY05BRUdQQVNFUUROVUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFWcUlSQUNRQU5BSUFRdEFBQWdBVUdSejRDQUFHb3RBQUJIRGIwQklBRkJCVVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHUEFTRVFETlVDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUmdoRUF5NkFRc0NRQ0FCSWdRZ0FrY05BRUdRQVNFUUROUUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFKcUlSQUNRQU5BSUFRdEFBQWdBVUdYejRDQUFHb3RBQUJIRGJ3QklBRkJBa1lOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHUUFTRVFETlFDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUmNoRUF5NUFRc0NRQ0FCSWdRZ0FrY05BRUdSQVNFUUROTUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFacUlSQUNRQU5BSUFRdEFBQWdBVUdhejRDQUFHb3RBQUJIRGJzQklBRkJCa1lOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHUkFTRVFETk1DQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUlVoRUF5NEFRc0NRQ0FCSWdRZ0FrY05BRUdTQVNFUUROSUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFWcUlSQUNRQU5BSUFRdEFBQWdBVUdoejRDQUFHb3RBQUJIRGJvQklBRkJCVVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHU0FTRVFETklDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUjRoRUF5M0FRc0NRQ0FCSWdRZ0FrY05BRUdUQVNFUURORUNDeUFFTFFBQVFjd0FSdzI0QVNBRVFRRnFJUUZCQ2lFUURMWUJDd0pBSUFRZ0FrY05BRUdVQVNFUUROQUNDd0pBQWtBZ0JDMEFBRUcvZjJvT0R3QzVBYmtCdVFHNUFia0J1UUc1QWJrQnVRRzVBYmtCdVFHNUFRRzVBUXNnQkVFQmFpRUJRZjRBSVJBTXR3SUxJQVJCQVdvaEFVSC9BQ0VRRExZQ0N3SkFJQVFnQWtjTkFFR1ZBU0VRRE04Q0N3SkFBa0FnQkMwQUFFRy9mMm9PQXdDNEFRRzRBUXNnQkVFQmFpRUJRZjBBSVJBTXRnSUxJQVJCQVdvaEJFR0FBU0VRRExVQ0N3SkFJQVFnQWtjTkFFR1dBU0VRRE00Q0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUZxSVJBQ1FBTkFJQVF0QUFBZ0FVR256NENBQUdvdEFBQkhEYllCSUFGQkFVWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdXQVNFUURNNENDeUFBUVFBMkFnQWdFRUVCYWlFQlFRc2hFQXl6QVFzQ1FDQUVJQUpIRFFCQmx3RWhFQXpOQWdzQ1FBSkFBa0FDUUNBRUxRQUFRVk5xRGlNQXVBRzRBYmdCdUFHNEFiZ0J1QUc0QWJnQnVBRzRBYmdCdUFHNEFiZ0J1QUc0QWJnQnVBRzRBYmdCdUFHNEFRRzRBYmdCdUFHNEFiZ0JBcmdCdUFHNEFRTzRBUXNnQkVFQmFpRUJRZnNBSVJBTXRnSUxJQVJCQVdvaEFVSDhBQ0VRRExVQ0N5QUVRUUZxSVFSQmdRRWhFQXkwQWdzZ0JFRUJhaUVFUVlJQklSQU1zd0lMQWtBZ0JDQUNSdzBBUVpnQklSQU16QUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkJHb2hFQUpBQTBBZ0JDMEFBQ0FCUWFuUGdJQUFhaTBBQUVjTnRBRWdBVUVFUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFaZ0JJUkFNekFJTElBQkJBRFlDQUNBUVFRRnFJUUZCR1NFUURMRUJDd0pBSUFRZ0FrY05BRUdaQVNFUURNc0NDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFWcUlSQUNRQU5BSUFRdEFBQWdBVUd1ejRDQUFHb3RBQUJIRGJNQklBRkJCVVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHWkFTRVFETXNDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUVloRUF5d0FRc0NRQ0FFSUFKSERRQkJtZ0VoRUF6S0Fnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVCYWlFUUFrQURRQ0FFTFFBQUlBRkJ0TStBZ0FCcUxRQUFSdzJ5QVNBQlFRRkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCbWdFaEVBektBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRWNJUkFNcndFTEFrQWdCQ0FDUncwQVFac0JJUkFNeVFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBV29oRUFKQUEwQWdCQzBBQUNBQlFiYlBnSUFBYWkwQUFFY05zUUVnQVVFQlJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWnNCSVJBTXlRSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkp5RVFESzRCQ3dKQUlBUWdBa2NOQUVHY0FTRVFETWdDQ3dKQUFrQWdCQzBBQUVHc2Yyb09BZ0FCc1FFTElBUkJBV29oQkVHR0FTRVFESzhDQ3lBRVFRRnFJUVJCaHdFaEVBeXVBZ3NDUUNBRUlBSkhEUUJCblFFaEVBekhBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFQmFpRVFBa0FEUUNBRUxRQUFJQUZCdU0rQWdBQnFMUUFBUncydkFTQUJRUUZHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQm5RRWhFQXpIQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVtSVJBTXJBRUxBa0FnQkNBQ1J3MEFRWjRCSVJBTXhnSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQVdvaEVBSkFBMEFnQkMwQUFDQUJRYnJQZ0lBQWFpMEFBRWNOcmdFZ0FVRUJSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVo0QklSQU14Z0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJBeUVRREtzQkN3SkFJQVFnQWtjTkFFR2ZBU0VRRE1VQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUpxSVJBQ1FBTkFJQVF0QUFBZ0FVSHR6NENBQUdvdEFBQkhEYTBCSUFGQkFrWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdmQVNFUURNVUNDeUFBUVFBMkFnQWdFRUVCYWlFQlFRd2hFQXlxQVFzQ1FDQUVJQUpIRFFCQm9BRWhFQXpFQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRURhaUVRQWtBRFFDQUVMUUFBSUFGQnZNK0FnQUJxTFFBQVJ3MnNBU0FCUVFOR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJvQUVoRUF6RUFnc2dBRUVBTmdJQUlCQkJBV29oQVVFTklSQU1xUUVMQWtBZ0JDQUNSdzBBUWFFQklSQU13d0lMQWtBQ1FDQUVMUUFBUWJwL2FnNExBS3dCckFHc0Fhd0JyQUdzQWF3QnJBR3NBUUdzQVFzZ0JFRUJhaUVFUVlzQklSQU1xZ0lMSUFSQkFXb2hCRUdNQVNFUURLa0NDd0pBSUFRZ0FrY05BRUdpQVNFUURNSUNDeUFFTFFBQVFkQUFSdzJwQVNBRVFRRnFJUVFNNlFFTEFrQWdCQ0FDUncwQVFhTUJJUkFNd1FJTEFrQUNRQ0FFTFFBQVFiZC9hZzRIQWFvQnFnR3FBYW9CcWdFQXFnRUxJQVJCQVdvaEJFR09BU0VRREtnQ0N5QUVRUUZxSVFGQklpRVFES1lCQ3dKQUlBUWdBa2NOQUVHa0FTRVFETUFDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRRnFJUkFDUUFOQUlBUXRBQUFnQVVIQXo0Q0FBR290QUFCSERhZ0JJQUZCQVVZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR2tBU0VRRE1BQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVIwaEVBeWxBUXNDUUNBRUlBSkhEUUJCcFFFaEVBeS9BZ3NDUUFKQUlBUXRBQUJCcm45cURnTUFxQUVCcUFFTElBUkJBV29oQkVHUUFTRVFES1lDQ3lBRVFRRnFJUUZCQkNFUURLUUJDd0pBSUFRZ0FrY05BRUdtQVNFUURMNENDd0pBQWtBQ1FBSkFBa0FnQkMwQUFFRy9mMm9PRlFDcUFhb0JxZ0dxQWFvQnFnR3FBYW9CcWdHcUFRR3FBYW9CQXFvQnFnRURxZ0dxQVFTcUFRc2dCRUVCYWlFRVFZZ0JJUkFNcUFJTElBUkJBV29oQkVHSkFTRVFES2NDQ3lBRVFRRnFJUVJCaWdFaEVBeW1BZ3NnQkVFQmFpRUVRWThCSVJBTXBRSUxJQVJCQVdvaEJFR1JBU0VRREtRQ0N3SkFJQVFnQWtjTkFFR25BU0VRREwwQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUpxSVJBQ1FBTkFJQVF0QUFBZ0FVSHR6NENBQUdvdEFBQkhEYVVCSUFGQkFrWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUduQVNFUURMMENDeUFBUVFBMkFnQWdFRUVCYWlFQlFSRWhFQXlpQVFzQ1FDQUVJQUpIRFFCQnFBRWhFQXk4QWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUNhaUVRQWtBRFFDQUVMUUFBSUFGQndzK0FnQUJxTFFBQVJ3MmtBU0FCUVFKR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJxQUVoRUF5OEFnc2dBRUVBTmdJQUlCQkJBV29oQVVFc0lSQU1vUUVMQWtBZ0JDQUNSdzBBUWFrQklSQU11d0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkJHb2hFQUpBQTBBZ0JDMEFBQ0FCUWNYUGdJQUFhaTBBQUVjTm93RWdBVUVFUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFha0JJUkFNdXdJTElBQkJBRFlDQUNBUVFRRnFJUUZCS3lFUURLQUJDd0pBSUFRZ0FrY05BRUdxQVNFUURMb0NDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFKcUlSQUNRQU5BSUFRdEFBQWdBVUhLejRDQUFHb3RBQUJIRGFJQklBRkJBa1lOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHcUFTRVFETG9DQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUlFoRUF5ZkFRc0NRQ0FFSUFKSERRQkJxd0VoRUF5NUFnc0NRQUpBQWtBQ1FDQUVMUUFBUWI1L2FnNFBBQUVDcEFHa0FhUUJwQUdrQWFRQnBBR2tBYVFCcEFHa0FRT2tBUXNnQkVFQmFpRUVRWk1CSVJBTW9nSUxJQVJCQVdvaEJFR1VBU0VRREtFQ0N5QUVRUUZxSVFSQmxRRWhFQXlnQWdzZ0JFRUJhaUVFUVpZQklSQU1ud0lMQWtBZ0JDQUNSdzBBUWF3QklSQU11QUlMSUFRdEFBQkJ4UUJIRFo4QklBUkJBV29oQkF6Z0FRc0NRQ0FFSUFKSERRQkJyUUVoRUF5M0Fnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVDYWlFUUFrQURRQ0FFTFFBQUlBRkJ6YytBZ0FCcUxRQUFSdzJmQVNBQlFRSkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCclFFaEVBeTNBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRU9JUkFNbkFFTEFrQWdCQ0FDUncwQVFhNEJJUkFNdGdJTElBUXRBQUJCMEFCSERaMEJJQVJCQVdvaEFVRWxJUkFNbXdFTEFrQWdCQ0FDUncwQVFhOEJJUkFNdFFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJDR29oRUFKQUEwQWdCQzBBQUNBQlFkRFBnSUFBYWkwQUFFY05uUUVnQVVFSVJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRYThCSVJBTXRRSUxJQUJCQURZQ0FDQVFRUUZxSVFGQktpRVFESm9CQ3dKQUlBUWdBa2NOQUVHd0FTRVFETFFDQ3dKQUFrQWdCQzBBQUVHcmYyb09Dd0NkQVowQm5RR2RBWjBCblFHZEFaMEJuUUVCblFFTElBUkJBV29oQkVHYUFTRVFESnNDQ3lBRVFRRnFJUVJCbXdFaEVBeWFBZ3NDUUNBRUlBSkhEUUJCc1FFaEVBeXpBZ3NDUUFKQUlBUXRBQUJCdjM5cURoUUFuQUdjQVp3Qm5BR2NBWndCbkFHY0Fad0JuQUdjQVp3Qm5BR2NBWndCbkFHY0Fad0JBWndCQ3lBRVFRRnFJUVJCbVFFaEVBeWFBZ3NnQkVFQmFpRUVRWndCSVJBTW1RSUxBa0FnQkNBQ1J3MEFRYklCSVJBTXNnSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQTJvaEVBSkFBMEFnQkMwQUFDQUJRZG5QZ0lBQWFpMEFBRWNObWdFZ0FVRURSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWJJQklSQU1zZ0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJJU0VRREpjQkN3SkFJQVFnQWtjTkFFR3pBU0VRRExFQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUVpxSVJBQ1FBTkFJQVF0QUFBZ0FVSGR6NENBQUdvdEFBQkhEWmtCSUFGQkJrWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUd6QVNFUURMRUNDeUFBUVFBMkFnQWdFRUVCYWlFQlFSb2hFQXlXQVFzQ1FDQUVJQUpIRFFCQnRBRWhFQXl3QWdzQ1FBSkFBa0FnQkMwQUFFRzdmMm9PRVFDYUFab0JtZ0dhQVpvQm1nR2FBWm9CbWdFQm1nR2FBWm9CbWdHYUFRS2FBUXNnQkVFQmFpRUVRWjBCSVJBTW1BSUxJQVJCQVdvaEJFR2VBU0VRREpjQ0N5QUVRUUZxSVFSQm53RWhFQXlXQWdzQ1FDQUVJQUpIRFFCQnRRRWhFQXl2QWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUZhaUVRQWtBRFFDQUVMUUFBSUFGQjVNK0FnQUJxTFFBQVJ3MlhBU0FCUVFWR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJ0UUVoRUF5dkFnc2dBRUVBTmdJQUlCQkJBV29oQVVFb0lSQU1sQUVMQWtBZ0JDQUNSdzBBUWJZQklSQU1yZ0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFtb2hFQUpBQTBBZ0JDMEFBQ0FCUWVyUGdJQUFhaTBBQUVjTmxnRWdBVUVDUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFiWUJJUkFNcmdJTElBQkJBRFlDQUNBUVFRRnFJUUZCQnlFUURKTUJDd0pBSUFRZ0FrY05BRUczQVNFUURLMENDd0pBQWtBZ0JDMEFBRUc3ZjJvT0RnQ1dBWllCbGdHV0FaWUJsZ0dXQVpZQmxnR1dBWllCbGdFQmxnRUxJQVJCQVdvaEJFR2hBU0VRREpRQ0N5QUVRUUZxSVFSQm9nRWhFQXlUQWdzQ1FDQUVJQUpIRFFCQnVBRWhFQXlzQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUNhaUVRQWtBRFFDQUVMUUFBSUFGQjdjK0FnQUJxTFFBQVJ3MlVBU0FCUVFKR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJ1QUVoRUF5c0Fnc2dBRUVBTmdJQUlCQkJBV29oQVVFU0lSQU1rUUVMQWtBZ0JDQUNSdzBBUWJrQklSQU1xd0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFXb2hFQUpBQTBBZ0JDMEFBQ0FCUWZEUGdJQUFhaTBBQUVjTmt3RWdBVUVCUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFia0JJUkFNcXdJTElBQkJBRFlDQUNBUVFRRnFJUUZCSUNFUURKQUJDd0pBSUFRZ0FrY05BRUc2QVNFUURLb0NDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFGcUlSQUNRQU5BSUFRdEFBQWdBVUh5ejRDQUFHb3RBQUJIRFpJQklBRkJBVVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHNkFTRVFES29DQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUThoRUF5UEFRc0NRQ0FFSUFKSERRQkJ1d0VoRUF5cEFnc0NRQUpBSUFRdEFBQkJ0MzlxRGdjQWtnR1NBWklCa2dHU0FRR1NBUXNnQkVFQmFpRUVRYVVCSVJBTWtBSUxJQVJCQVdvaEJFR21BU0VRREk4Q0N3SkFJQVFnQWtjTkFFRzhBU0VRREtnQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUWRxSVJBQ1FBTkFJQVF0QUFBZ0FVSDB6NENBQUdvdEFBQkhEWkFCSUFGQkIwWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUc4QVNFUURLZ0NDeUFBUVFBMkFnQWdFRUVCYWlFQlFSc2hFQXlOQVFzQ1FDQUVJQUpIRFFCQnZRRWhFQXluQWdzQ1FBSkFBa0FnQkMwQUFFRytmMm9PRWdDUkFaRUJrUUdSQVpFQmtRR1JBWkVCa1FFQmtRR1JBWkVCa1FHUkFaRUJBcEVCQ3lBRVFRRnFJUVJCcEFFaEVBeVBBZ3NnQkVFQmFpRUVRYWNCSVJBTWpnSUxJQVJCQVdvaEJFR29BU0VRREkwQ0N3SkFJQVFnQWtjTkFFRytBU0VRREtZQ0N5QUVMUUFBUWM0QVJ3Mk5BU0FFUVFGcUlRUU16d0VMQWtBZ0JDQUNSdzBBUWI4QklSQU1wUUlMQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQWdCQzBBQUVHL2Yyb09GUUFCQWdPY0FRUUZCcHdCbkFHY0FRY0lDUW9MbkFFTURRNFBuQUVMSUFSQkFXb2hBVUhvQUNFUURKb0NDeUFFUVFGcUlRRkI2UUFoRUF5WkFnc2dCRUVCYWlFQlFlNEFJUkFNbUFJTElBUkJBV29oQVVIeUFDRVFESmNDQ3lBRVFRRnFJUUZCOHdBaEVBeVdBZ3NnQkVFQmFpRUJRZllBSVJBTWxRSUxJQVJCQVdvaEFVSDNBQ0VRREpRQ0N5QUVRUUZxSVFGQitnQWhFQXlUQWdzZ0JFRUJhaUVFUVlNQklSQU1rZ0lMSUFSQkFXb2hCRUdFQVNFUURKRUNDeUFFUVFGcUlRUkJoUUVoRUF5UUFnc2dCRUVCYWlFRVFaSUJJUkFNandJTElBUkJBV29oQkVHWUFTRVFESTRDQ3lBRVFRRnFJUVJCb0FFaEVBeU5BZ3NnQkVFQmFpRUVRYU1CSVJBTWpBSUxJQVJCQVdvaEJFR3FBU0VRRElzQ0N3SkFJQVFnQWtZTkFDQUFRWkNBZ0lBQU5nSUlJQUFnQkRZQ0JFR3JBU0VRRElzQ0MwSEFBU0VRREtNQ0N5QUFJQVVnQWhDcWdJQ0FBQ0lCRFlzQklBVWhBUXhjQ3dKQUlBWWdBa1lOQUNBR1FRRnFJUVVNalFFTFFjSUJJUkFNb1FJTEEwQUNRQ0FRTFFBQVFYWnFEZ1NNQVFBQWp3RUFDeUFRUVFGcUloQWdBa2NOQUF0Qnd3RWhFQXlnQWdzQ1FDQUhJQUpHRFFBZ0FFR1JnSUNBQURZQ0NDQUFJQWMyQWdRZ0J5RUJRUUVoRUF5SEFndEJ4QUVoRUF5ZkFnc0NRQ0FISUFKSERRQkJ4UUVoRUF5ZkFnc0NRQUpBSUFjdEFBQkJkbW9PQkFIT0FjNEJBTTRCQ3lBSFFRRnFJUVlNalFFTElBZEJBV29oQlF5SkFRc0NRQ0FISUFKSERRQkJ4Z0VoRUF5ZUFnc0NRQUpBSUFjdEFBQkJkbW9PRndHUEFZOEJBWThCandHUEFZOEJqd0dQQVk4Qmp3R1BBWThCandHUEFZOEJqd0dQQVk4Qmp3R1BBUUNQQVFzZ0IwRUJhaUVIQzBHd0FTRVFESVFDQ3dKQUlBZ2dBa2NOQUVISUFTRVFESjBDQ3lBSUxRQUFRU0JIRFkwQklBQkJBRHNCTWlBSVFRRnFJUUZCc3dFaEVBeURBZ3NnQVNFWEFrQURRQ0FYSWdjZ0FrWU5BU0FITFFBQVFWQnFRZjhCY1NJUVFRcFBEY3dCQWtBZ0FDOEJNaUlVUVprelN3MEFJQUFnRkVFS2JDSVVPd0V5SUJCQi8vOERjeUFVUWY3L0EzRkpEUUFnQjBFQmFpRVhJQUFnRkNBUWFpSVFPd0V5SUJCQi8vOERjVUhvQjBrTkFRc0xRUUFoRUNBQVFRQTJBaHdnQUVIQmlZQ0FBRFlDRUNBQVFRMDJBZ3dnQUNBSFFRRnFOZ0lVREp3Q0MwSEhBU0VRREpzQ0N5QUFJQWdnQWhDdWdJQ0FBQ0lRUlEzS0FTQVFRUlZIRFl3QklBQkJ5QUUyQWh3Z0FDQUlOZ0lVSUFCQnlaZUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBeWFBZ3NDUUNBSklBSkhEUUJCekFFaEVBeWFBZ3RCQUNFVVFRRWhGMEVCSVJaQkFDRVFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQWt0QUFCQlVHb09DcFlCbFFFQUFRSURCQVVHQ0pjQkMwRUNJUkFNQmd0QkF5RVFEQVVMUVFRaEVBd0VDMEVGSVJBTUF3dEJCaUVRREFJTFFRY2hFQXdCQzBFSUlSQUxRUUFoRjBFQUlSWkJBQ0VVREk0QkMwRUpJUkJCQVNFVVFRQWhGMEVBSVJZTWpRRUxBa0FnQ2lBQ1J3MEFRYzRCSVJBTW1RSUxJQW90QUFCQkxrY05qZ0VnQ2tFQmFpRUpETW9CQ3lBTElBSkhEWTRCUWRBQklSQU1sd0lMQWtBZ0N5QUNSZzBBSUFCQmpvQ0FnQUEyQWdnZ0FDQUxOZ0lFUWJjQklSQU0vZ0VMUWRFQklSQU1sZ0lMQWtBZ0JDQUNSdzBBUWRJQklSQU1sZ0lMSUFJZ0JHc2dBQ2dDQUNJUWFpRVVJQVFnRUd0QkJHb2hDd05BSUFRdEFBQWdFRUg4ejRDQUFHb3RBQUJIRFk0QklCQkJCRVlONlFFZ0VFRUJhaUVRSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQjBnRWhFQXlWQWdzZ0FDQU1JQUlRcklDQWdBQWlBUTJOQVNBTUlRRU11QUVMQWtBZ0JDQUNSdzBBUWRRQklSQU1sQUlMSUFJZ0JHc2dBQ2dDQUNJUWFpRVVJQVFnRUd0QkFXb2hEQU5BSUFRdEFBQWdFRUdCMElDQUFHb3RBQUJIRFk4QklCQkJBVVlOamdFZ0VFRUJhaUVRSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQjFBRWhFQXlUQWdzQ1FDQUVJQUpIRFFCQjFnRWhFQXlUQWdzZ0FpQUVheUFBS0FJQUloQnFJUlFnQkNBUWEwRUNhaUVMQTBBZ0JDMEFBQ0FRUVlQUWdJQUFhaTBBQUVjTmpnRWdFRUVDUmcyUUFTQVFRUUZxSVJBZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFSFdBU0VRREpJQ0N3SkFJQVFnQWtjTkFFSFhBU0VRREpJQ0N3SkFBa0FnQkMwQUFFRzdmMm9PRUFDUEFZOEJqd0dQQVk4Qmp3R1BBWThCandHUEFZOEJqd0dQQVk4QkFZOEJDeUFFUVFGcUlRUkJ1d0VoRUF6NUFRc2dCRUVCYWlFRVFid0JJUkFNK0FFTEFrQWdCQ0FDUncwQVFkZ0JJUkFNa1FJTElBUXRBQUJCeUFCSERZd0JJQVJCQVdvaEJBekVBUXNDUUNBRUlBSkdEUUFnQUVHUWdJQ0FBRFlDQ0NBQUlBUTJBZ1JCdmdFaEVBejNBUXRCMlFFaEVBeVBBZ3NDUUNBRUlBSkhEUUJCMmdFaEVBeVBBZ3NnQkMwQUFFSElBRVlOd3dFZ0FFRUJPZ0FvRExrQkN5QUFRUUk2QUM4Z0FDQUVJQUlRcG9DQWdBQWlFQTJOQVVIQ0FTRVFEUFFCQ3lBQUxRQW9RWDlxRGdLM0Fia0J1QUVMQTBBQ1FDQUVMUUFBUVhacURnUUFqZ0dPQVFDT0FRc2dCRUVCYWlJRUlBSkhEUUFMUWQwQklSQU1pd0lMSUFCQkFEb0FMeUFBTFFBdFFRUnhSUTJFQWdzZ0FFRUFPZ0F2SUFCQkFUb0FOQ0FCSVFFTWpBRUxJQkJCRlVZTjJnRWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFhZU9nSUFBTmdJUUlBQkJFallDREVFQUlSQU1pQUlMQWtBZ0FDQVFJQUlRdElDQWdBQWlCQTBBSUJBaEFReUJBZ3NDUUNBRVFSVkhEUUFnQUVFRE5nSWNJQUFnRURZQ0ZDQUFRYkNZZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNaUFJTElBQkJBRFlDSENBQUlCQTJBaFFnQUVHbmpvQ0FBRFlDRUNBQVFSSTJBZ3hCQUNFUURJY0NDeUFRUVJWR0RkWUJJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFSGFqWUNBQURZQ0VDQUFRUlEyQWd4QkFDRVFESVlDQ3lBQUtBSUVJUmNnQUVFQU5nSUVJQkFnRWFkcUloWWhBU0FBSUJjZ0VDQVdJQlFiSWhBUXRZQ0FnQUFpRkVVTmpRRWdBRUVITmdJY0lBQWdFRFlDRkNBQUlCUTJBZ3hCQUNFUURJVUNDeUFBSUFBdkFUQkJnQUZ5T3dFd0lBRWhBUXRCS2lFUURPb0JDeUFRUVJWR0RkRUJJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFR0RqSUNBQURZQ0VDQUFRUk0yQWd4QkFDRVFESUlDQ3lBUVFSVkdEYzhCSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUdhajRDQUFEWUNFQ0FBUVNJMkFneEJBQ0VRRElFQ0N5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRdDRDQWdBQWlFQTBBSUFGQkFXb2hBUXlOQVFzZ0FFRU1OZ0ljSUFBZ0VEWUNEQ0FBSUFGQkFXbzJBaFJCQUNFUURJQUNDeUFRUVJWR0Rjd0JJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFR2FqNENBQURZQ0VDQUFRU0kyQWd4QkFDRVFEUDhCQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVF0NENBZ0FBaUVBMEFJQUZCQVdvaEFReU1BUXNnQUVFTk5nSWNJQUFnRURZQ0RDQUFJQUZCQVdvMkFoUkJBQ0VRRFA0QkN5QVFRUlZHRGNrQklBQkJBRFlDSENBQUlBRTJBaFFnQUVIR2pJQ0FBRFlDRUNBQVFTTTJBZ3hCQUNFUURQMEJDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXVZQ0FnQUFpRUEwQUlBRkJBV29oQVF5TEFRc2dBRUVPTmdJY0lBQWdFRFlDRENBQUlBRkJBV28yQWhSQkFDRVFEUHdCQ3lBQVFRQTJBaHdnQUNBQk5nSVVJQUJCd0pXQWdBQTJBaEFnQUVFQ05nSU1RUUFoRUF6N0FRc2dFRUVWUmczRkFTQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnhveUFnQUEyQWhBZ0FFRWpOZ0lNUVFBaEVBejZBUXNnQUVFUU5nSWNJQUFnQVRZQ0ZDQUFJQkEyQWd4QkFDRVFEUGtCQ3lBQUtBSUVJUVFnQUVFQU5nSUVBa0FnQUNBRUlBRVF1WUNBZ0FBaUJBMEFJQUZCQVdvaEFRenhBUXNnQUVFUk5nSWNJQUFnQkRZQ0RDQUFJQUZCQVdvMkFoUkJBQ0VRRFBnQkN5QVFRUlZHRGNFQklBQkJBRFlDSENBQUlBRTJBaFFnQUVIR2pJQ0FBRFlDRUNBQVFTTTJBZ3hCQUNFUURQY0JDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXVZQ0FnQUFpRUEwQUlBRkJBV29oQVF5SUFRc2dBRUVUTmdJY0lBQWdFRFlDRENBQUlBRkJBV28yQWhSQkFDRVFEUFlCQ3lBQUtBSUVJUVFnQUVFQU5nSUVBa0FnQUNBRUlBRVF1WUNBZ0FBaUJBMEFJQUZCQVdvaEFRenRBUXNnQUVFVU5nSWNJQUFnQkRZQ0RDQUFJQUZCQVdvMkFoUkJBQ0VRRFBVQkN5QVFRUlZHRGIwQklBQkJBRFlDSENBQUlBRTJBaFFnQUVHYWo0Q0FBRFlDRUNBQVFTSTJBZ3hCQUNFUURQUUJDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXQ0Q0FnQUFpRUEwQUlBRkJBV29oQVF5R0FRc2dBRUVXTmdJY0lBQWdFRFlDRENBQUlBRkJBV28yQWhSQkFDRVFEUE1CQ3lBQUtBSUVJUVFnQUVFQU5nSUVBa0FnQUNBRUlBRVF0NENBZ0FBaUJBMEFJQUZCQVdvaEFRenBBUXNnQUVFWE5nSWNJQUFnQkRZQ0RDQUFJQUZCQVdvMkFoUkJBQ0VRRFBJQkN5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnpaT0FnQUEyQWhBZ0FFRU1OZ0lNUVFBaEVBenhBUXRDQVNFUkN5QVFRUUZxSVFFQ1FDQUFLUU1nSWhKQy8vLy8vLy8vLy84UFZnMEFJQUFnRWtJRWhpQVJoRGNESUNBQklRRU1oQUVMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUd0aVlDQUFEWUNFQ0FBUVF3MkFneEJBQ0VRRE84QkN5QUFRUUEyQWh3Z0FDQVFOZ0lVSUFCQnpaT0FnQUEyQWhBZ0FFRU1OZ0lNUVFBaEVBenVBUXNnQUNnQ0JDRVhJQUJCQURZQ0JDQVFJQkduYWlJV0lRRWdBQ0FYSUJBZ0ZpQVVHeUlRRUxXQWdJQUFJaFJGRFhNZ0FFRUZOZ0ljSUFBZ0VEWUNGQ0FBSUJRMkFneEJBQ0VRRE8wQkN5QUFRUUEyQWh3Z0FDQVFOZ0lVSUFCQnFweUFnQUEyQWhBZ0FFRVBOZ0lNUVFBaEVBenNBUXNnQUNBUUlBSVF0SUNBZ0FBaUFRMEJJQkFoQVF0QkRpRVFETkVCQ3dKQUlBRkJGVWNOQUNBQVFRSTJBaHdnQUNBUU5nSVVJQUJCc0ppQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF6cUFRc2dBRUVBTmdJY0lBQWdFRFlDRkNBQVFhZU9nSUFBTmdJUUlBQkJFallDREVFQUlSQU02UUVMSUFGQkFXb2hFQUpBSUFBdkFUQWlBVUdBQVhGRkRRQUNRQ0FBSUJBZ0FoQzdnSUNBQUNJQkRRQWdFQ0VCREhBTElBRkJGVWNOdWdFZ0FFRUZOZ0ljSUFBZ0VEWUNGQ0FBUWZtWGdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTTZRRUxBa0FnQVVHZ0JIRkJvQVJIRFFBZ0FDMEFMVUVDY1EwQUlBQkJBRFlDSENBQUlCQTJBaFFnQUVHV2s0Q0FBRFlDRUNBQVFRUTJBZ3hCQUNFUURPa0JDeUFBSUJBZ0FoQzlnSUNBQUJvZ0VDRUJBa0FDUUFKQUFrQUNRQ0FBSUJBZ0FoQ3pnSUNBQUE0V0FnRUFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBd1FMSUFCQkFUb0FMZ3NnQUNBQUx3RXdRY0FBY2pzQk1DQVFJUUVMUVNZaEVBelJBUXNnQUVFak5nSWNJQUFnRURZQ0ZDQUFRYVdXZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNNlFFTElBQkJBRFlDSENBQUlCQTJBaFFnQUVIVmk0Q0FBRFlDRUNBQVFSRTJBZ3hCQUNFUURPZ0JDeUFBTFFBdFFRRnhSUTBCUWNNQklSQU16Z0VMQWtBZ0RTQUNSZzBBQTBBQ1FDQU5MUUFBUVNCR0RRQWdEU0VCRE1RQkN5QU5RUUZxSWcwZ0FrY05BQXRCSlNFUURPY0JDMEVsSVJBTTVnRUxJQUFvQWdRaEJDQUFRUUEyQWdRZ0FDQUVJQTBRcjRDQWdBQWlCRVVOclFFZ0FFRW1OZ0ljSUFBZ0JEWUNEQ0FBSUExQkFXbzJBaFJCQUNFUURPVUJDeUFRUVJWR0Rhc0JJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFSDlqWUNBQURZQ0VDQUFRUjAyQWd4QkFDRVFET1FCQ3lBQVFTYzJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNNHdFTElCQWhBVUVCSVJRQ1FBSkFBa0FDUUFKQUFrQUNRQ0FBTFFBc1FYNXFEZ2NHQlFVREFRSUFCUXNnQUNBQUx3RXdRUWh5T3dFd0RBTUxRUUloRkF3QkMwRUVJUlFMSUFCQkFUb0FMQ0FBSUFBdkFUQWdGSEk3QVRBTElCQWhBUXRCS3lFUURNb0JDeUFBUVFBMkFod2dBQ0FRTmdJVUlBQkJxNUtBZ0FBMkFoQWdBRUVMTmdJTVFRQWhFQXppQVFzZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWVHUGdJQUFOZ0lRSUFCQkNqWUNERUVBSVJBTTRRRUxJQUJCQURvQUxDQVFJUUVNdlFFTElCQWhBVUVCSVJRQ1FBSkFBa0FDUUFKQUlBQXRBQ3hCZTJvT0JBTUJBZ0FGQ3lBQUlBQXZBVEJCQ0hJN0FUQU1Bd3RCQWlFVURBRUxRUVFoRkFzZ0FFRUJPZ0FzSUFBZ0FDOEJNQ0FVY2pzQk1Bc2dFQ0VCQzBFcElSQU14UUVMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUh3bElDQUFEWUNFQ0FBUVFNMkFneEJBQ0VRRE4wQkN3SkFJQTR0QUFCQkRVY05BQ0FBS0FJRUlRRWdBRUVBTmdJRUFrQWdBQ0FCSUE0UXNZQ0FnQUFpQVEwQUlBNUJBV29oQVF4MUN5QUFRU3cyQWh3Z0FDQUJOZ0lNSUFBZ0RrRUJhallDRkVFQUlSQU0zUUVMSUFBdEFDMUJBWEZGRFFGQnhBRWhFQXpEQVFzQ1FDQU9JQUpIRFFCQkxTRVFETndCQ3dKQUFrQURRQUpBSUE0dEFBQkJkbW9PQkFJQUFBTUFDeUFPUVFGcUlnNGdBa2NOQUF0QkxTRVFETjBCQ3lBQUtBSUVJUUVnQUVFQU5nSUVBa0FnQUNBQklBNFFzWUNBZ0FBaUFRMEFJQTRoQVF4MEN5QUFRU3cyQWh3Z0FDQU9OZ0lVSUFBZ0FUWUNERUVBSVJBTTNBRUxJQUFvQWdRaEFTQUFRUUEyQWdRQ1FDQUFJQUVnRGhDeGdJQ0FBQ0lCRFFBZ0RrRUJhaUVCREhNTElBQkJMRFlDSENBQUlBRTJBZ3dnQUNBT1FRRnFOZ0lVUVFBaEVBemJBUXNnQUNnQ0JDRUVJQUJCQURZQ0JDQUFJQVFnRGhDeGdJQ0FBQ0lFRGFBQklBNGhBUXpPQVFzZ0VFRXNSdzBCSUFGQkFXb2hFRUVCSVFFQ1FBSkFBa0FDUUFKQUlBQXRBQ3hCZTJvT0JBTUJBZ1FBQ3lBUUlRRU1CQXRCQWlFQkRBRUxRUVFoQVFzZ0FFRUJPZ0FzSUFBZ0FDOEJNQ0FCY2pzQk1DQVFJUUVNQVFzZ0FDQUFMd0V3UVFoeU93RXdJQkFoQVF0Qk9TRVFETDhCQ3lBQVFRQTZBQ3dnQVNFQkMwRTBJUkFNdlFFTElBQWdBQzhCTUVFZ2Nqc0JNQ0FCSVFFTUFnc2dBQ2dDQkNFRUlBQkJBRFlDQkFKQUlBQWdCQ0FCRUxHQWdJQUFJZ1FOQUNBQklRRU14d0VMSUFCQk56WUNIQ0FBSUFFMkFoUWdBQ0FFTmdJTVFRQWhFQXpVQVFzZ0FFRUlPZ0FzSUFFaEFRdEJNQ0VRRExrQkN3SkFJQUF0QUNoQkFVWU5BQ0FCSVFFTUJBc2dBQzBBTFVFSWNVVU5rd0VnQVNFQkRBTUxJQUF0QURCQklIRU5sQUZCeFFFaEVBeTNBUXNDUUNBUElBSkdEUUFDUUFOQUFrQWdEeTBBQUVGUWFpSUJRZjhCY1VFS1NRMEFJQThoQVVFMUlSQU11Z0VMSUFBcEF5QWlFVUtacytiTW1iUG16QmxXRFFFZ0FDQVJRZ3ArSWhFM0F5QWdFU0FCclVML0FZTWlFa0ovaFZZTkFTQUFJQkVnRW53M0F5QWdEMEVCYWlJUElBSkhEUUFMUVRraEVBelJBUXNnQUNnQ0JDRUNJQUJCQURZQ0JDQUFJQUlnRDBFQmFpSUVFTEdBZ0lBQUlnSU5sUUVnQkNFQkRNTUJDMEU1SVJBTXp3RUxBa0FnQUM4Qk1DSUJRUWh4UlEwQUlBQXRBQ2hCQVVjTkFDQUFMUUF0UVFoeFJRMlFBUXNnQUNBQlFmZjdBM0ZCZ0FSeU93RXdJQThoQVF0Qk55RVFETFFCQ3lBQUlBQXZBVEJCRUhJN0FUQU1xd0VMSUJCQkZVWU5pd0VnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZkNPZ0lBQU5nSVFJQUJCSERZQ0RFRUFJUkFNeXdFTElBQkJ3d0EyQWh3Z0FDQUJOZ0lNSUFBZ0RVRUJhallDRkVFQUlSQU15Z0VMQWtBZ0FTMEFBRUU2UncwQUlBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkN2Z0lDQUFDSVFEUUFnQVVFQmFpRUJER01MSUFCQnd3QTJBaHdnQUNBUU5nSU1JQUFnQVVFQmFqWUNGRUVBSVJBTXlnRUxJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFR3hrWUNBQURZQ0VDQUFRUW8yQWd4QkFDRVFETWtCQ3lBQVFRQTJBaHdnQUNBQk5nSVVJQUJCb0ptQWdBQTJBaEFnQUVFZU5nSU1RUUFoRUF6SUFRc2dBRUVBTmdJQUN5QUFRWUFTT3dFcUlBQWdGMEVCYWlJQklBSVFxSUNBZ0FBaUVBMEJJQUVoQVF0Qnh3QWhFQXlzQVFzZ0VFRVZSdzJEQVNBQVFkRUFOZ0ljSUFBZ0FUWUNGQ0FBUWVPWGdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTXhBRUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDbmdJQ0FBQ0lRRFFBZ0FTRUJERjRMSUFCQjBnQTJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNd3dFTElBQkJBRFlDSENBQUlCUTJBaFFnQUVIQnFJQ0FBRFlDRUNBQVFRYzJBZ3dnQUVFQU5nSUFRUUFoRUF6Q0FRc2dBQ2dDQkNFUUlBQkJBRFlDQkFKQUlBQWdFQ0FCRUtlQWdJQUFJaEFOQUNBQklRRU1YUXNnQUVIVEFEWUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXpCQVF0QkFDRVFJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFR0FrWUNBQURZQ0VDQUFRUWsyQWd3TXdBRUxJQkJCRlVZTmZTQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQmxJMkFnQUEyQWhBZ0FFRWhOZ0lNUVFBaEVBeS9BUXRCQVNFV1FRQWhGMEVBSVJSQkFTRVFDeUFBSUJBNkFDc2dBVUVCYWlFQkFrQUNRQ0FBTFFBdFFSQnhEUUFDUUFKQUFrQWdBQzBBS2c0REFRQUNCQXNnRmtVTkF3d0NDeUFVRFFFTUFnc2dGMFVOQVFzZ0FDZ0NCQ0VRSUFCQkFEWUNCQUpBSUFBZ0VDQUJFSzJBZ0lBQUloQU5BQ0FCSVFFTVhBc2dBRUhZQURZQ0hDQUFJQUUyQWhRZ0FDQVFOZ0lNUVFBaEVBeStBUXNnQUNnQ0JDRUVJQUJCQURZQ0JBSkFJQUFnQkNBQkVLMkFnSUFBSWdRTkFDQUJJUUVNclFFTElBQkIyUUEyQWh3Z0FDQUJOZ0lVSUFBZ0JEWUNERUVBSVJBTXZRRUxJQUFvQWdRaEJDQUFRUUEyQWdRQ1FDQUFJQVFnQVJDdGdJQ0FBQ0lFRFFBZ0FTRUJES3NCQ3lBQVFkb0FOZ0ljSUFBZ0FUWUNGQ0FBSUFRMkFneEJBQ0VRREx3QkN5QUFLQUlFSVFRZ0FFRUFOZ0lFQWtBZ0FDQUVJQUVRcllDQWdBQWlCQTBBSUFFaEFReXBBUXNnQUVIY0FEWUNIQ0FBSUFFMkFoUWdBQ0FFTmdJTVFRQWhFQXk3QVFzQ1FDQUJMUUFBUVZCcUloQkIvd0Z4UVFwUERRQWdBQ0FRT2dBcUlBRkJBV29oQVVIUEFDRVFES0lCQ3lBQUtBSUVJUVFnQUVFQU5nSUVBa0FnQUNBRUlBRVFyWUNBZ0FBaUJBMEFJQUVoQVF5bkFRc2dBRUhlQURZQ0hDQUFJQUUyQWhRZ0FDQUVOZ0lNUVFBaEVBeTZBUXNnQUVFQU5nSUFJQmRCQVdvaEFRSkFJQUF0QUNsQkkwOE5BQ0FCSVFFTVdRc2dBRUVBTmdJY0lBQWdBVFlDRkNBQVFkT0pnSUFBTmdJUUlBQkJDRFlDREVFQUlSQU11UUVMSUFCQkFEWUNBQXRCQUNFUUlBQkJBRFlDSENBQUlBRTJBaFFnQUVHUXM0Q0FBRFlDRUNBQVFRZzJBZ3dNdHdFTElBQkJBRFlDQUNBWFFRRnFJUUVDUUNBQUxRQXBRU0ZIRFFBZ0FTRUJERllMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUdiaW9DQUFEWUNFQ0FBUVFnMkFneEJBQ0VRRExZQkN5QUFRUUEyQWdBZ0YwRUJhaUVCQWtBZ0FDMEFLU0lRUVYxcVFRdFBEUUFnQVNFQkRGVUxBa0FnRUVFR1N3MEFRUUVnRUhSQnlnQnhSUTBBSUFFaEFReFZDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWZlSmdJQUFOZ0lRSUFCQkNEWUNEQXkxQVFzZ0VFRVZSZzF4SUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUc1allDQUFEWUNFQ0FBUVJvMkFneEJBQ0VRRExRQkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRcDRDQWdBQWlFQTBBSUFFaEFReFVDeUFBUWVVQU5nSWNJQUFnQVRZQ0ZDQUFJQkEyQWd4QkFDRVFETE1CQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVFwNENBZ0FBaUVBMEFJQUVoQVF4TkN5QUFRZElBTmdJY0lBQWdBVFlDRkNBQUlCQTJBZ3hCQUNFUURMSUJDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXA0Q0FnQUFpRUEwQUlBRWhBUXhOQ3lBQVFkTUFOZ0ljSUFBZ0FUWUNGQ0FBSUJBMkFneEJBQ0VRRExFQkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRcDRDQWdBQWlFQTBBSUFFaEFReFJDeUFBUWVVQU5nSWNJQUFnQVRZQ0ZDQUFJQkEyQWd4QkFDRVFETEFCQ3lBQVFRQTJBaHdnQUNBQk5nSVVJQUJCeG9xQWdBQTJBaEFnQUVFSE5nSU1RUUFoRUF5dkFRc2dBQ2dDQkNFUUlBQkJBRFlDQkFKQUlBQWdFQ0FCRUtlQWdJQUFJaEFOQUNBQklRRU1TUXNnQUVIU0FEWUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXl1QVFzZ0FDZ0NCQ0VRSUFCQkFEWUNCQUpBSUFBZ0VDQUJFS2VBZ0lBQUloQU5BQ0FCSVFFTVNRc2dBRUhUQURZQ0hDQUFJQUUyQWhRZ0FDQVFOZ0lNUVFBaEVBeXRBUXNnQUNnQ0JDRVFJQUJCQURZQ0JBSkFJQUFnRUNBQkVLZUFnSUFBSWhBTkFDQUJJUUVNVFFzZ0FFSGxBRFlDSENBQUlBRTJBaFFnQUNBUU5nSU1RUUFoRUF5c0FRc2dBRUVBTmdJY0lBQWdBVFlDRkNBQVFkeUlnSUFBTmdJUUlBQkJCellDREVFQUlSQU1xd0VMSUJCQlAwY05BU0FCUVFGcUlRRUxRUVVoRUF5UUFRdEJBQ0VRSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUg5a29DQUFEWUNFQ0FBUVFjMkFnd01xQUVMSUFBb0FnUWhFQ0FBUVFBMkFnUUNRQ0FBSUJBZ0FSQ25nSUNBQUNJUURRQWdBU0VCREVJTElBQkIwZ0EyQWh3Z0FDQUJOZ0lVSUFBZ0VEWUNERUVBSVJBTXB3RUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDbmdJQ0FBQ0lRRFFBZ0FTRUJERUlMSUFCQjB3QTJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNcGdFTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkNuZ0lDQUFDSVFEUUFnQVNFQkRFWUxJQUJCNVFBMkFod2dBQ0FCTmdJVUlBQWdFRFlDREVFQUlSQU1wUUVMSUFBb0FnUWhBU0FBUVFBMkFnUUNRQ0FBSUFFZ0ZCQ25nSUNBQUNJQkRRQWdGQ0VCREQ4TElBQkIwZ0EyQWh3Z0FDQVVOZ0lVSUFBZ0FUWUNERUVBSVJBTXBBRUxJQUFvQWdRaEFTQUFRUUEyQWdRQ1FDQUFJQUVnRkJDbmdJQ0FBQ0lCRFFBZ0ZDRUJERDhMSUFCQjB3QTJBaHdnQUNBVU5nSVVJQUFnQVRZQ0RFRUFJUkFNb3dFTElBQW9BZ1FoQVNBQVFRQTJBZ1FDUUNBQUlBRWdGQkNuZ0lDQUFDSUJEUUFnRkNFQkRFTUxJQUJCNVFBMkFod2dBQ0FVTmdJVUlBQWdBVFlDREVFQUlSQU1vZ0VMSUFCQkFEWUNIQ0FBSUJRMkFoUWdBRUhEajRDQUFEWUNFQ0FBUVFjMkFneEJBQ0VRREtFQkN5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnc0K0FnQUEyQWhBZ0FFRUhOZ0lNUVFBaEVBeWdBUXRCQUNFUUlBQkJBRFlDSENBQUlCUTJBaFFnQUVHTW5JQ0FBRFlDRUNBQVFRYzJBZ3dNbndFTElBQkJBRFlDSENBQUlCUTJBaFFnQUVHTW5JQ0FBRFlDRUNBQVFRYzJBZ3hCQUNFUURKNEJDeUFBUVFBMkFod2dBQ0FVTmdJVUlBQkIvcEdBZ0FBMkFoQWdBRUVITmdJTVFRQWhFQXlkQVFzZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVk2YmdJQUFOZ0lRSUFCQkJqWUNERUVBSVJBTW5BRUxJQkJCRlVZTlZ5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnpJNkFnQUEyQWhBZ0FFRWdOZ0lNUVFBaEVBeWJBUXNnQUVFQU5nSUFJQkJCQVdvaEFVRWtJUkFMSUFBZ0VEb0FLU0FBS0FJRUlSQWdBRUVBTmdJRUlBQWdFQ0FCRUt1QWdJQUFJaEFOVkNBQklRRU1QZ3NnQUVFQU5nSUFDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0JEWUNGQ0FBUWZHYmdJQUFOZ0lRSUFCQkJqWUNEQXlYQVFzZ0FVRVZSZzFRSUFCQkFEWUNIQ0FBSUFVMkFoUWdBRUh3aklDQUFEWUNFQ0FBUVJzMkFneEJBQ0VRREpZQkN5QUFLQUlFSVFVZ0FFRUFOZ0lFSUFBZ0JTQVFFS21BZ0lBQUlnVU5BU0FRUVFGcUlRVUxRYTBCSVJBTWV3c2dBRUhCQVRZQ0hDQUFJQVUyQWd3Z0FDQVFRUUZxTmdJVVFRQWhFQXlUQVFzZ0FDZ0NCQ0VHSUFCQkFEWUNCQ0FBSUFZZ0VCQ3BnSUNBQUNJR0RRRWdFRUVCYWlFR0MwR3VBU0VRREhnTElBQkJ3Z0UyQWh3Z0FDQUdOZ0lNSUFBZ0VFRUJhallDRkVFQUlSQU1rQUVMSUFCQkFEWUNIQ0FBSUFjMkFoUWdBRUdYaTRDQUFEWUNFQ0FBUVEwMkFneEJBQ0VRREk4QkN5QUFRUUEyQWh3Z0FDQUlOZ0lVSUFCQjQ1Q0FnQUEyQWhBZ0FFRUpOZ0lNUVFBaEVBeU9BUXNnQUVFQU5nSWNJQUFnQ0RZQ0ZDQUFRWlNOZ0lBQU5nSVFJQUJCSVRZQ0RFRUFJUkFNalFFTFFRRWhGa0VBSVJkQkFDRVVRUUVoRUFzZ0FDQVFPZ0FySUFsQkFXb2hDQUpBQWtBZ0FDMEFMVUVRY1EwQUFrQUNRQUpBSUFBdEFDb09Bd0VBQWdRTElCWkZEUU1NQWdzZ0ZBMEJEQUlMSUJkRkRRRUxJQUFvQWdRaEVDQUFRUUEyQWdRZ0FDQVFJQWdRcllDQWdBQWlFRVVOUFNBQVFja0JOZ0ljSUFBZ0NEWUNGQ0FBSUJBMkFneEJBQ0VRREl3QkN5QUFLQUlFSVFRZ0FFRUFOZ0lFSUFBZ0JDQUlFSzJBZ0lBQUlnUkZEWFlnQUVIS0FUWUNIQ0FBSUFnMkFoUWdBQ0FFTmdJTVFRQWhFQXlMQVFzZ0FDZ0NCQ0VFSUFCQkFEWUNCQ0FBSUFRZ0NSQ3RnSUNBQUNJRVJRMTBJQUJCeXdFMkFod2dBQ0FKTmdJVUlBQWdCRFlDREVFQUlSQU1pZ0VMSUFBb0FnUWhCQ0FBUVFBMkFnUWdBQ0FFSUFvUXJZQ0FnQUFpQkVVTmNpQUFRYzBCTmdJY0lBQWdDallDRkNBQUlBUTJBZ3hCQUNFUURJa0JDd0pBSUFzdEFBQkJVR29pRUVIL0FYRkJDazhOQUNBQUlCQTZBQ29nQzBFQmFpRUtRYllCSVJBTWNBc2dBQ2dDQkNFRUlBQkJBRFlDQkNBQUlBUWdDeEN0Z0lDQUFDSUVSUTF3SUFCQnp3RTJBaHdnQUNBTE5nSVVJQUFnQkRZQ0RFRUFJUkFNaUFFTElBQkJBRFlDSENBQUlBUTJBaFFnQUVHUXM0Q0FBRFlDRUNBQVFRZzJBZ3dnQUVFQU5nSUFRUUFoRUF5SEFRc2dBVUVWUmcwL0lBQkJBRFlDSENBQUlBdzJBaFFnQUVITWpvQ0FBRFlDRUNBQVFTQTJBZ3hCQUNFUURJWUJDeUFBUVlFRU93RW9JQUFvQWdRaEVDQUFRZ0EzQXdBZ0FDQVFJQXhCQVdvaURCQ3JnSUNBQUNJUVJRMDRJQUJCMHdFMkFod2dBQ0FNTmdJVUlBQWdFRFlDREVFQUlSQU1oUUVMSUFCQkFEWUNBQXRCQUNFUUlBQkJBRFlDSENBQUlBUTJBaFFnQUVIWW00Q0FBRFlDRUNBQVFRZzJBZ3dNZ3dFTElBQW9BZ1FoRUNBQVFnQTNBd0FnQUNBUUlBdEJBV29pQ3hDcmdJQ0FBQ0lRRFFGQnhnRWhFQXhwQ3lBQVFRSTZBQ2dNVlFzZ0FFSFZBVFlDSENBQUlBczJBaFFnQUNBUU5nSU1RUUFoRUF5QUFRc2dFRUVWUmcwM0lBQkJBRFlDSENBQUlBUTJBaFFnQUVHa2pJQ0FBRFlDRUNBQVFSQTJBZ3hCQUNFUURIOExJQUF0QURSQkFVY05OQ0FBSUFRZ0FoQzhnSUNBQUNJUVJRMDBJQkJCRlVjTk5TQUFRZHdCTmdJY0lBQWdCRFlDRkNBQVFkV1dnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1mZ3RCQUNFUUlBQkJBRFlDSENBQVFhK0xnSUFBTmdJUUlBQkJBallDRENBQUlCUkJBV28yQWhRTWZRdEJBQ0VRREdNTFFRSWhFQXhpQzBFTklSQU1ZUXRCRHlFUURHQUxRU1VoRUF4ZkMwRVRJUkFNWGd0QkZTRVFERjBMUVJZaEVBeGNDMEVYSVJBTVd3dEJHQ0VRREZvTFFSa2hFQXhaQzBFYUlSQU1XQXRCR3lFUURGY0xRUndoRUF4V0MwRWRJUkFNVlF0Qkh5RVFERlFMUVNFaEVBeFRDMEVqSVJBTVVndEJ4Z0FoRUF4UkMwRXVJUkFNVUF0Qkx5RVFERThMUVRzaEVBeE9DMEU5SVJBTVRRdEJ5QUFoRUF4TUMwSEpBQ0VRREVzTFFjc0FJUkFNU2d0QnpBQWhFQXhKQzBIT0FDRVFERWdMUWRFQUlSQU1Sd3RCMVFBaEVBeEdDMEhZQUNFUURFVUxRZGtBSVJBTVJBdEIyd0FoRUF4REMwSGtBQ0VRREVJTFFlVUFJUkFNUVF0QjhRQWhFQXhBQzBIMEFDRVFERDhMUVkwQklSQU1QZ3RCbHdFaEVBdzlDMEdwQVNFUUREd0xRYXdCSVJBTU93dEJ3QUVoRUF3NkMwRzVBU0VRRERrTFFhOEJJUkFNT0F0QnNRRWhFQXczQzBHeUFTRVFERFlMUWJRQklSQU1OUXRCdFFFaEVBdzBDMEc2QVNFUURETUxRYjBCSVJBTU1ndEJ2d0VoRUF3eEMwSEJBU0VRRERBTElBQkJBRFlDSENBQUlBUTJBaFFnQUVIcGk0Q0FBRFlDRUNBQVFSODJBZ3hCQUNFUURFZ0xJQUJCMndFMkFod2dBQ0FFTmdJVUlBQkIrcGFBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXhIQ3lBQVFmZ0FOZ0ljSUFBZ0REWUNGQ0FBUWNxWWdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTVJnc2dBRUhSQURZQ0hDQUFJQVUyQWhRZ0FFR3dsNENBQURZQ0VDQUFRUlUyQWd4QkFDRVFERVVMSUFCQitRQTJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNUkFzZ0FFSDRBRFlDSENBQUlBRTJBaFFnQUVIS21JQ0FBRFlDRUNBQVFSVTJBZ3hCQUNFUURFTUxJQUJCNUFBMkFod2dBQ0FCTmdJVUlBQkI0NWVBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXhDQ3lBQVFkY0FOZ0ljSUFBZ0FUWUNGQ0FBUWNtWGdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTVFRc2dBRUVBTmdJY0lBQWdBVFlDRkNBQVFibU5nSUFBTmdJUUlBQkJHallDREVFQUlSQU1RQXNnQUVIQ0FEWUNIQ0FBSUFFMkFoUWdBRUhqbUlDQUFEWUNFQ0FBUVJVMkFneEJBQ0VRREQ4TElBQkJBRFlDQkNBQUlBOGdEeEN4Z0lDQUFDSUVSUTBCSUFCQk9qWUNIQ0FBSUFRMkFnd2dBQ0FQUVFGcU5nSVVRUUFoRUF3K0N5QUFLQUlFSVFRZ0FFRUFOZ0lFQWtBZ0FDQUVJQUVRc1lDQWdBQWlCRVVOQUNBQVFUczJBaHdnQUNBRU5nSU1JQUFnQVVFQmFqWUNGRUVBSVJBTVBnc2dBVUVCYWlFQkRDMExJQTlCQVdvaEFRd3RDeUFBUVFBMkFod2dBQ0FQTmdJVUlBQkI1SktBZ0FBMkFoQWdBRUVFTmdJTVFRQWhFQXc3Q3lBQVFUWTJBaHdnQUNBRU5nSVVJQUFnQWpZQ0RFRUFJUkFNT2dzZ0FFRXVOZ0ljSUFBZ0RqWUNGQ0FBSUFRMkFneEJBQ0VRRERrTElBQkIwQUEyQWh3Z0FDQUJOZ0lVSUFCQmtaaUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBdzRDeUFOUVFGcUlRRU1MQXNnQUVFVk5nSWNJQUFnQVRZQ0ZDQUFRWUtaZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNTmdzZ0FFRWJOZ0ljSUFBZ0FUWUNGQ0FBUVpHWGdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTU5Rc2dBRUVQTmdJY0lBQWdBVFlDRkNBQVFaR1hnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1OQXNnQUVFTE5nSWNJQUFnQVRZQ0ZDQUFRWkdYZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNTXdzZ0FFRWFOZ0ljSUFBZ0FUWUNGQ0FBUVlLWmdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTU1nc2dBRUVMTmdJY0lBQWdBVFlDRkNBQVFZS1pnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1NUXNnQUVFS05nSWNJQUFnQVRZQ0ZDQUFRZVNXZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNTUFzZ0FFRWVOZ0ljSUFBZ0FUWUNGQ0FBUWZtWGdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTUx3c2dBRUVBTmdJY0lBQWdFRFlDRkNBQVFkcU5nSUFBTmdJUUlBQkJGRFlDREVFQUlSQU1MZ3NnQUVFRU5nSWNJQUFnQVRZQ0ZDQUFRYkNZZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNTFFzZ0FFRUFOZ0lBSUF0QkFXb2hDd3RCdUFFaEVBd1NDeUFBUVFBMkFnQWdFRUVCYWlFQlFmVUFJUkFNRVFzZ0FTRUJBa0FnQUMwQUtVRUZSdzBBUWVNQUlSQU1FUXRCNGdBaEVBd1FDMEVBSVJBZ0FFRUFOZ0ljSUFCQjVKR0FnQUEyQWhBZ0FFRUhOZ0lNSUFBZ0ZFRUJhallDRkF3b0N5QUFRUUEyQWdBZ0YwRUJhaUVCUWNBQUlSQU1EZ3RCQVNFQkN5QUFJQUU2QUN3Z0FFRUFOZ0lBSUJkQkFXb2hBUXRCS0NFUURBc0xJQUVoQVF0Qk9DRVFEQWtMQWtBZ0FTSVBJQUpHRFFBRFFBSkFJQTh0QUFCQmdMNkFnQUJxTFFBQUlnRkJBVVlOQUNBQlFRSkhEUU1nRDBFQmFpRUJEQVFMSUE5QkFXb2lEeUFDUncwQUMwRStJUkFNSWd0QlBpRVFEQ0VMSUFCQkFEb0FMQ0FQSVFFTUFRdEJDeUVRREFZTFFUb2hFQXdGQ3lBQlFRRnFJUUZCTFNFUURBUUxJQUFnQVRvQUxDQUFRUUEyQWdBZ0ZrRUJhaUVCUVF3aEVBd0RDeUFBUVFBMkFnQWdGMEVCYWlFQlFRb2hFQXdDQ3lBQVFRQTJBZ0FMSUFCQkFEb0FMQ0FOSVFGQkNTRVFEQUFMQzBFQUlSQWdBRUVBTmdJY0lBQWdDellDRkNBQVFjMlFnSUFBTmdJUUlBQkJDVFlDREF3WEMwRUFJUkFnQUVFQU5nSWNJQUFnQ2pZQ0ZDQUFRZW1LZ0lBQU5nSVFJQUJCQ1RZQ0RBd1dDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0NUWUNGQ0FBUWJlUWdJQUFOZ0lRSUFCQkNUWUNEQXdWQzBFQUlSQWdBRUVBTmdJY0lBQWdDRFlDRkNBQVFaeVJnSUFBTmdJUUlBQkJDVFlDREF3VUMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRYzJRZ0lBQU5nSVFJQUJCQ1RZQ0RBd1RDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWVtS2dJQUFOZ0lRSUFCQkNUWUNEQXdTQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFiZVFnSUFBTmdJUUlBQkJDVFlDREF3UkMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRWnlSZ0lBQU5nSVFJQUJCQ1RZQ0RBd1FDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVplVmdJQUFOZ0lRSUFCQkR6WUNEQXdQQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFaZVZnSUFBTmdJUUlBQkJEellDREF3T0MwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRY0NTZ0lBQU5nSVFJQUJCQ3pZQ0RBd05DMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVpXSmdJQUFOZ0lRSUFCQkN6WUNEQXdNQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFlR1BnSUFBTmdJUUlBQkJDallDREF3TEMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZnVQZ0lBQU5nSVFJQUJCQ2pZQ0RBd0tDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWZHWmdJQUFOZ0lRSUFCQkFqWUNEQXdKQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFjU1VnSUFBTmdJUUlBQkJBallDREF3SUMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZktWZ0lBQU5nSVFJQUJCQWpZQ0RBd0hDeUFBUVFJMkFod2dBQ0FCTmdJVUlBQkJuSnFBZ0FBMkFoQWdBRUVXTmdJTVFRQWhFQXdHQzBFQklSQU1CUXRCMUFBaEVDQUJJZ1FnQWtZTkJDQURRUWhxSUFBZ0JDQUNRZGpDZ0lBQVFRb1F4WUNBZ0FBZ0F5Z0NEQ0VFSUFNb0FnZ09Bd0VFQWdBTEVNcUFnSUFBQUFzZ0FFRUFOZ0ljSUFCQnRacUFnQUEyQWhBZ0FFRVhOZ0lNSUFBZ0JFRUJhallDRkVFQUlSQU1BZ3NnQUVFQU5nSWNJQUFnQkRZQ0ZDQUFRY3FhZ0lBQU5nSVFJQUJCQ1RZQ0RFRUFJUkFNQVFzQ1FDQUJJZ1FnQWtjTkFFRWlJUkFNQVFzZ0FFR0pnSUNBQURZQ0NDQUFJQVEyQWdSQklTRVFDeUFEUVJCcUpJQ0FnSUFBSUJBTHJ3RUJBbjhnQVNnQ0FDRUdBa0FDUUNBQ0lBTkdEUUFnQkNBR2FpRUVJQVlnQTJvZ0Ftc2hCeUFDSUFaQmYzTWdCV29pQm1vaEJRTkFBa0FnQWkwQUFDQUVMUUFBUmcwQVFRSWhCQXdEQ3dKQUlBWU5BRUVBSVFRZ0JTRUNEQU1MSUFaQmYyb2hCaUFFUVFGcUlRUWdBa0VCYWlJQ0lBTkhEUUFMSUFjaEJpQURJUUlMSUFCQkFUWUNBQ0FCSUFZMkFnQWdBQ0FDTmdJRUR3c2dBVUVBTmdJQUlBQWdCRFlDQUNBQUlBSTJBZ1FMQ2dBZ0FCREhnSUNBQUF2eU5nRUxmeU9BZ0lDQUFFRVFheUlCSklDQWdJQUFBa0JCQUNnQ29OQ0FnQUFOQUVFQUVNdUFnSUFBUVlEVWhJQUFheUlDUWRrQVNRMEFRUUFoQXdKQVFRQW9BdURUZ0lBQUlnUU5BRUVBUW44M0F1elRnSUFBUVFCQ2dJQ0VnSUNBd0FBM0F1VFRnSUFBUVFBZ0FVRUlha0Z3Y1VIWXF0V3FCWE1pQkRZQzROT0FnQUJCQUVFQU5nTDAwNENBQUVFQVFRQTJBc1RUZ0lBQUMwRUFJQUkyQXN6VGdJQUFRUUJCZ05TRWdBQTJBc2pUZ0lBQVFRQkJnTlNFZ0FBMkFwalFnSUFBUVFBZ0JEWUNyTkNBZ0FCQkFFRi9OZ0tvMElDQUFBTkFJQU5CeE5DQWdBQnFJQU5CdU5DQWdBQnFJZ1EyQWdBZ0JDQURRYkRRZ0lBQWFpSUZOZ0lBSUFOQnZOQ0FnQUJxSUFVMkFnQWdBMEhNMElDQUFHb2dBMEhBMElDQUFHb2lCVFlDQUNBRklBUTJBZ0FnQTBIVTBJQ0FBR29nQTBISTBJQ0FBR29pQkRZQ0FDQUVJQVUyQWdBZ0EwSFEwSUNBQUdvZ0JEWUNBQ0FEUVNCcUlnTkJnQUpIRFFBTFFZRFVoSUFBUVhoQmdOU0VnQUJyUVE5eFFRQkJnTlNFZ0FCQkNHcEJEM0ViSWdOcUlnUkJCR29nQWtGSWFpSUZJQU5ySWdOQkFYSTJBZ0JCQUVFQUtBTHcwNENBQURZQ3BOQ0FnQUJCQUNBRE5nS1UwSUNBQUVFQUlBUTJBcURRZ0lBQVFZRFVoSUFBSUFWcVFUZzJBZ1FMQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQUJCN0FGTERRQUNRRUVBS0FLSTBJQ0FBQ0lHUVJBZ0FFRVRha0Z3Y1NBQVFRdEpHeUlDUVFOMklnUjJJZ05CQTNGRkRRQUNRQUpBSUFOQkFYRWdCSEpCQVhNaUJVRURkQ0lFUWJEUWdJQUFhaUlESUFSQnVOQ0FnQUJxS0FJQUlnUW9BZ2dpQWtjTkFFRUFJQVpCZmlBRmQzRTJBb2pRZ0lBQURBRUxJQU1nQWpZQ0NDQUNJQU0yQWd3TElBUkJDR29oQXlBRUlBVkJBM1FpQlVFRGNqWUNCQ0FFSUFWcUlnUWdCQ2dDQkVFQmNqWUNCQXdNQ3lBQ1FRQW9BcERRZ0lBQUlnZE5EUUVDUUNBRFJRMEFBa0FDUUNBRElBUjBRUUlnQkhRaUEwRUFJQU5yY25FaUEwRUFJQU5yY1VGL2FpSURJQU5CREhaQkVIRWlBM1lpQkVFRmRrRUljU0lGSUFOeUlBUWdCWFlpQTBFQ2RrRUVjU0lFY2lBRElBUjJJZ05CQVhaQkFuRWlCSElnQXlBRWRpSURRUUYyUVFGeElnUnlJQU1nQkhacUlnUkJBM1FpQTBHdzBJQ0FBR29pQlNBRFFialFnSUFBYWlnQ0FDSURLQUlJSWdCSERRQkJBQ0FHUVg0Z0JIZHhJZ1kyQW9qUWdJQUFEQUVMSUFVZ0FEWUNDQ0FBSUFVMkFnd0xJQU1nQWtFRGNqWUNCQ0FESUFSQkEzUWlCR29nQkNBQ2F5SUZOZ0lBSUFNZ0Ftb2lBQ0FGUVFGeU5nSUVBa0FnQjBVTkFDQUhRWGh4UWJEUWdJQUFhaUVDUVFBb0FwelFnSUFBSVFRQ1FBSkFJQVpCQVNBSFFRTjJkQ0lJY1EwQVFRQWdCaUFJY2pZQ2lOQ0FnQUFnQWlFSURBRUxJQUlvQWdnaENBc2dDQ0FFTmdJTUlBSWdCRFlDQ0NBRUlBSTJBZ3dnQkNBSU5nSUlDeUFEUVFocUlRTkJBQ0FBTmdLYzBJQ0FBRUVBSUFVMkFwRFFnSUFBREF3TFFRQW9Bb3pRZ0lBQUlnbEZEUUVnQ1VFQUlBbHJjVUYvYWlJRElBTkJESFpCRUhFaUEzWWlCRUVGZGtFSWNTSUZJQU55SUFRZ0JYWWlBMEVDZGtFRWNTSUVjaUFESUFSMklnTkJBWFpCQW5FaUJISWdBeUFFZGlJRFFRRjJRUUZ4SWdSeUlBTWdCSFpxUVFKMFFialNnSUFBYWlnQ0FDSUFLQUlFUVhoeElBSnJJUVFnQUNFRkFrQURRQUpBSUFVb0FoQWlBdzBBSUFWQkZHb29BZ0FpQTBVTkFnc2dBeWdDQkVGNGNTQUNheUlGSUFRZ0JTQUVTU0lGR3lFRUlBTWdBQ0FGR3lFQUlBTWhCUXdBQ3dzZ0FDZ0NHQ0VLQWtBZ0FDZ0NEQ0lJSUFCR0RRQWdBQ2dDQ0NJRFFRQW9BcGpRZ0lBQVNSb2dDQ0FETmdJSUlBTWdDRFlDREF3TEN3SkFJQUJCRkdvaUJTZ0NBQ0lERFFBZ0FDZ0NFQ0lEUlEwRElBQkJFR29oQlFzRFFDQUZJUXNnQXlJSVFSUnFJZ1VvQWdBaUF3MEFJQWhCRUdvaEJTQUlLQUlRSWdNTkFBc2dDMEVBTmdJQURBb0xRWDhoQWlBQVFiOS9TdzBBSUFCQkUyb2lBMEZ3Y1NFQ1FRQW9Bb3pRZ0lBQUlnZEZEUUJCQUNFTEFrQWdBa0dBQWtrTkFFRWZJUXNnQWtILy8vOEhTdzBBSUFOQkNIWWlBeUFEUVlEK1AycEJFSFpCQ0hFaUEzUWlCQ0FFUVlEZ0gycEJFSFpCQkhFaUJIUWlCU0FGUVlDQUQycEJFSFpCQW5FaUJYUkJEM1lnQXlBRWNpQUZjbXNpQTBFQmRDQUNJQU5CRldwMlFRRnhja0VjYWlFTEMwRUFJQUpySVFRQ1FBSkFBa0FDUUNBTFFRSjBRYmpTZ0lBQWFpZ0NBQ0lGRFFCQkFDRURRUUFoQ0F3QkMwRUFJUU1nQWtFQVFSa2dDMEVCZG1zZ0MwRWZSaHQwSVFCQkFDRUlBMEFDUUNBRktBSUVRWGh4SUFKcklnWWdCRThOQUNBR0lRUWdCU0VJSUFZTkFFRUFJUVFnQlNFSUlBVWhBd3dEQ3lBRElBVkJGR29vQWdBaUJpQUdJQVVnQUVFZGRrRUVjV3BCRUdvb0FnQWlCVVliSUFNZ0Joc2hBeUFBUVFGMElRQWdCUTBBQ3dzQ1FDQURJQWh5RFFCQkFDRUlRUUlnQzNRaUEwRUFJQU5yY2lBSGNTSURSUTBESUFOQkFDQURhM0ZCZjJvaUF5QURRUXgyUVJCeElnTjJJZ1ZCQlhaQkNIRWlBQ0FEY2lBRklBQjJJZ05CQW5aQkJIRWlCWElnQXlBRmRpSURRUUYyUVFKeElnVnlJQU1nQlhZaUEwRUJka0VCY1NJRmNpQURJQVYyYWtFQ2RFRzQwb0NBQUdvb0FnQWhBd3NnQTBVTkFRc0RRQ0FES0FJRVFYaHhJQUpySWdZZ0JFa2hBQUpBSUFNb0FoQWlCUTBBSUFOQkZHb29BZ0FoQlFzZ0JpQUVJQUFiSVFRZ0F5QUlJQUFiSVFnZ0JTRURJQVVOQUFzTElBaEZEUUFnQkVFQUtBS1EwSUNBQUNBQ2EwOE5BQ0FJS0FJWUlRc0NRQ0FJS0FJTUlnQWdDRVlOQUNBSUtBSUlJZ05CQUNnQ21OQ0FnQUJKR2lBQUlBTTJBZ2dnQXlBQU5nSU1EQWtMQWtBZ0NFRVVhaUlGS0FJQUlnTU5BQ0FJS0FJUUlnTkZEUU1nQ0VFUWFpRUZDd05BSUFVaEJpQURJZ0JCRkdvaUJTZ0NBQ0lERFFBZ0FFRVFhaUVGSUFBb0FoQWlBdzBBQ3lBR1FRQTJBZ0FNQ0FzQ1FFRUFLQUtRMElDQUFDSURJQUpKRFFCQkFDZ0NuTkNBZ0FBaEJBSkFBa0FnQXlBQ2F5SUZRUkJKRFFBZ0JDQUNhaUlBSUFWQkFYSTJBZ1JCQUNBRk5nS1EwSUNBQUVFQUlBQTJBcHpRZ0lBQUlBUWdBMm9nQlRZQ0FDQUVJQUpCQTNJMkFnUU1BUXNnQkNBRFFRTnlOZ0lFSUFRZ0Eyb2lBeUFES0FJRVFRRnlOZ0lFUVFCQkFEWUNuTkNBZ0FCQkFFRUFOZ0tRMElDQUFBc2dCRUVJYWlFRERBb0xBa0JCQUNnQ2xOQ0FnQUFpQUNBQ1RRMEFRUUFvQXFEUWdJQUFJZ01nQW1vaUJDQUFJQUpySWdWQkFYSTJBZ1JCQUNBRk5nS1UwSUNBQUVFQUlBUTJBcURRZ0lBQUlBTWdBa0VEY2pZQ0JDQURRUWhxSVFNTUNnc0NRQUpBUVFBb0F1RFRnSUFBUlEwQVFRQW9BdWpUZ0lBQUlRUU1BUXRCQUVKL053THMwNENBQUVFQVFvQ0FoSUNBZ01BQU53TGswNENBQUVFQUlBRkJER3BCY0hGQjJLclZxZ1Z6TmdMZzA0Q0FBRUVBUVFBMkF2VFRnSUFBUVFCQkFEWUN4Tk9BZ0FCQmdJQUVJUVFMUVFBaEF3SkFJQVFnQWtISEFHb2lCMm9pQmtFQUlBUnJJZ3R4SWdnZ0Frc05BRUVBUVRBMkF2alRnSUFBREFvTEFrQkJBQ2dDd05PQWdBQWlBMFVOQUFKQVFRQW9BcmpUZ0lBQUlnUWdDR29pQlNBRVRRMEFJQVVnQTAwTkFRdEJBQ0VEUVFCQk1EWUMrTk9BZ0FBTUNndEJBQzBBeE5PQWdBQkJCSEVOQkFKQUFrQUNRRUVBS0FLZzBJQ0FBQ0lFUlEwQVFjalRnSUFBSVFNRFFBSkFJQU1vQWdBaUJTQUVTdzBBSUFVZ0F5Z0NCR29nQkVzTkF3c2dBeWdDQ0NJRERRQUxDMEVBRU11QWdJQUFJZ0JCZjBZTkJTQUlJUVlDUUVFQUtBTGswNENBQUNJRFFYOXFJZ1FnQUhGRkRRQWdDQ0FBYXlBRUlBQnFRUUFnQTJ0eGFpRUdDeUFHSUFKTkRRVWdCa0grLy8vL0Iwc05CUUpBUVFBb0FzRFRnSUFBSWdORkRRQkJBQ2dDdU5PQWdBQWlCQ0FHYWlJRklBUk5EUVlnQlNBRFN3MEdDeUFHRU11QWdJQUFJZ01nQUVjTkFRd0hDeUFHSUFCcklBdHhJZ1pCL3YvLy93ZExEUVFnQmhETGdJQ0FBQ0lBSUFNb0FnQWdBeWdDQkdwR0RRTWdBQ0VEQ3dKQUlBTkJmMFlOQUNBQ1FjZ0FhaUFHVFEwQUFrQWdCeUFHYTBFQUtBTG8wNENBQUNJRWFrRUFJQVJyY1NJRVFmNy8vLzhIVFEwQUlBTWhBQXdIQ3dKQUlBUVF5NENBZ0FCQmYwWU5BQ0FFSUFacUlRWWdBeUVBREFjTFFRQWdCbXNReTRDQWdBQWFEQVFMSUFNaEFDQURRWDlIRFFVTUF3dEJBQ0VJREFjTFFRQWhBQXdGQ3lBQVFYOUhEUUlMUVFCQkFDZ0N4Tk9BZ0FCQkJISTJBc1RUZ0lBQUN5QUlRZjcvLy84SFN3MEJJQWdReTRDQWdBQWhBRUVBRU11QWdJQUFJUU1nQUVGL1JnMEJJQU5CZjBZTkFTQUFJQU5QRFFFZ0F5QUFheUlHSUFKQk9HcE5EUUVMUVFCQkFDZ0N1Tk9BZ0FBZ0Jtb2lBellDdU5PQWdBQUNRQ0FEUVFBb0FyelRnSUFBVFEwQVFRQWdBellDdk5PQWdBQUxBa0FDUUFKQUFrQkJBQ2dDb05DQWdBQWlCRVVOQUVISTA0Q0FBQ0VEQTBBZ0FDQURLQUlBSWdVZ0F5Z0NCQ0lJYWtZTkFpQURLQUlJSWdNTkFBd0RDd3NDUUFKQVFRQW9BcGpRZ0lBQUlnTkZEUUFnQUNBRFR3MEJDMEVBSUFBMkFwalFnSUFBQzBFQUlRTkJBQ0FHTmdMTTA0Q0FBRUVBSUFBMkFzalRnSUFBUVFCQmZ6WUNxTkNBZ0FCQkFFRUFLQUxnMDRDQUFEWUNyTkNBZ0FCQkFFRUFOZ0xVMDRDQUFBTkFJQU5CeE5DQWdBQnFJQU5CdU5DQWdBQnFJZ1EyQWdBZ0JDQURRYkRRZ0lBQWFpSUZOZ0lBSUFOQnZOQ0FnQUJxSUFVMkFnQWdBMEhNMElDQUFHb2dBMEhBMElDQUFHb2lCVFlDQUNBRklBUTJBZ0FnQTBIVTBJQ0FBR29nQTBISTBJQ0FBR29pQkRZQ0FDQUVJQVUyQWdBZ0EwSFEwSUNBQUdvZ0JEWUNBQ0FEUVNCcUlnTkJnQUpIRFFBTElBQkJlQ0FBYTBFUGNVRUFJQUJCQ0dwQkQzRWJJZ05xSWdRZ0JrRklhaUlGSUFOcklnTkJBWEkyQWdSQkFFRUFLQUx3MDRDQUFEWUNwTkNBZ0FCQkFDQUROZ0tVMElDQUFFRUFJQVEyQXFEUWdJQUFJQUFnQldwQk9EWUNCQXdDQ3lBRExRQU1RUWh4RFFBZ0JDQUZTUTBBSUFRZ0FFOE5BQ0FFUVhnZ0JHdEJEM0ZCQUNBRVFRaHFRUTl4R3lJRmFpSUFRUUFvQXBUUWdJQUFJQVpxSWdzZ0JXc2lCVUVCY2pZQ0JDQURJQWdnQm1vMkFnUkJBRUVBS0FMdzA0Q0FBRFlDcE5DQWdBQkJBQ0FGTmdLVTBJQ0FBRUVBSUFBMkFxRFFnSUFBSUFRZ0MycEJPRFlDQkF3QkN3SkFJQUJCQUNnQ21OQ0FnQUFpQ0U4TkFFRUFJQUEyQXBqUWdJQUFJQUFoQ0FzZ0FDQUdhaUVGUWNqVGdJQUFJUU1DUUFKQUFrQUNRQUpBQWtBQ1FBTkFJQU1vQWdBZ0JVWU5BU0FES0FJSUlnTU5BQXdDQ3dzZ0F5MEFERUVJY1VVTkFRdEJ5Tk9BZ0FBaEF3TkFBa0FnQXlnQ0FDSUZJQVJMRFFBZ0JTQURLQUlFYWlJRklBUkxEUU1MSUFNb0FnZ2hBd3dBQ3dzZ0F5QUFOZ0lBSUFNZ0F5Z0NCQ0FHYWpZQ0JDQUFRWGdnQUd0QkQzRkJBQ0FBUVFocVFROXhHMm9pQ3lBQ1FRTnlOZ0lFSUFWQmVDQUZhMEVQY1VFQUlBVkJDR3BCRDNFYmFpSUdJQXNnQW1vaUFtc2hBd0pBSUFZZ0JFY05BRUVBSUFJMkFxRFFnSUFBUVFCQkFDZ0NsTkNBZ0FBZ0Eyb2lBellDbE5DQWdBQWdBaUFEUVFGeU5nSUVEQU1MQWtBZ0JrRUFLQUtjMElDQUFFY05BRUVBSUFJMkFwelFnSUFBUVFCQkFDZ0NrTkNBZ0FBZ0Eyb2lBellDa05DQWdBQWdBaUFEUVFGeU5nSUVJQUlnQTJvZ0F6WUNBQXdEQ3dKQUlBWW9BZ1FpQkVFRGNVRUJSdzBBSUFSQmVIRWhCd0pBQWtBZ0JFSC9BVXNOQUNBR0tBSUlJZ1VnQkVFRGRpSUlRUU4wUWJEUWdJQUFhaUlBUmhvQ1FDQUdLQUlNSWdRZ0JVY05BRUVBUVFBb0FvalFnSUFBUVg0Z0NIZHhOZ0tJMElDQUFBd0NDeUFFSUFCR0dpQUVJQVUyQWdnZ0JTQUVOZ0lNREFFTElBWW9BaGdoQ1FKQUFrQWdCaWdDRENJQUlBWkdEUUFnQmlnQ0NDSUVJQWhKR2lBQUlBUTJBZ2dnQkNBQU5nSU1EQUVMQWtBZ0JrRVVhaUlFS0FJQUlnVU5BQ0FHUVJCcUlnUW9BZ0FpQlEwQVFRQWhBQXdCQ3dOQUlBUWhDQ0FGSWdCQkZHb2lCQ2dDQUNJRkRRQWdBRUVRYWlFRUlBQW9BaEFpQlEwQUN5QUlRUUEyQWdBTElBbEZEUUFDUUFKQUlBWWdCaWdDSENJRlFRSjBRYmpTZ0lBQWFpSUVLQUlBUncwQUlBUWdBRFlDQUNBQURRRkJBRUVBS0FLTTBJQ0FBRUYrSUFWM2NUWUNqTkNBZ0FBTUFnc2dDVUVRUVJRZ0NTZ0NFQ0FHUmh0cUlBQTJBZ0FnQUVVTkFRc2dBQ0FKTmdJWUFrQWdCaWdDRUNJRVJRMEFJQUFnQkRZQ0VDQUVJQUEyQWhnTElBWW9BaFFpQkVVTkFDQUFRUlJxSUFRMkFnQWdCQ0FBTmdJWUN5QUhJQU5xSVFNZ0JpQUhhaUlHS0FJRUlRUUxJQVlnQkVGK2NUWUNCQ0FDSUFOcUlBTTJBZ0FnQWlBRFFRRnlOZ0lFQWtBZ0EwSC9BVXNOQUNBRFFYaHhRYkRRZ0lBQWFpRUVBa0FDUUVFQUtBS0kwSUNBQUNJRlFRRWdBMEVEZG5RaUEzRU5BRUVBSUFVZ0EzSTJBb2pRZ0lBQUlBUWhBd3dCQ3lBRUtBSUlJUU1MSUFNZ0FqWUNEQ0FFSUFJMkFnZ2dBaUFFTmdJTUlBSWdBellDQ0F3REMwRWZJUVFDUUNBRFFmLy8vd2RMRFFBZ0EwRUlkaUlFSUFSQmdQNC9ha0VRZGtFSWNTSUVkQ0lGSUFWQmdPQWZha0VRZGtFRWNTSUZkQ0lBSUFCQmdJQVBha0VRZGtFQ2NTSUFkRUVQZGlBRUlBVnlJQUJ5YXlJRVFRRjBJQU1nQkVFVmFuWkJBWEZ5UVJ4cUlRUUxJQUlnQkRZQ0hDQUNRZ0EzQWhBZ0JFRUNkRUc0MG9DQUFHb2hCUUpBUVFBb0FvelFnSUFBSWdCQkFTQUVkQ0lJY1EwQUlBVWdBallDQUVFQUlBQWdDSEkyQW96UWdJQUFJQUlnQlRZQ0dDQUNJQUkyQWdnZ0FpQUNOZ0lNREFNTElBTkJBRUVaSUFSQkFYWnJJQVJCSDBZYmRDRUVJQVVvQWdBaEFBTkFJQUFpQlNnQ0JFRjRjU0FEUmcwQ0lBUkJIWFloQUNBRVFRRjBJUVFnQlNBQVFRUnhha0VRYWlJSUtBSUFJZ0FOQUFzZ0NDQUNOZ0lBSUFJZ0JUWUNHQ0FDSUFJMkFnd2dBaUFDTmdJSURBSUxJQUJCZUNBQWEwRVBjVUVBSUFCQkNHcEJEM0ViSWdOcUlnc2dCa0ZJYWlJSUlBTnJJZ05CQVhJMkFnUWdBQ0FJYWtFNE5nSUVJQVFnQlVFM0lBVnJRUTl4UVFBZ0JVRkpha0VQY1J0cVFVRnFJZ2dnQ0NBRVFSQnFTUnNpQ0VFak5nSUVRUUJCQUNnQzhOT0FnQUEyQXFUUWdJQUFRUUFnQXpZQ2xOQ0FnQUJCQUNBTE5nS2cwSUNBQUNBSVFSQnFRUUFwQXREVGdJQUFOd0lBSUFoQkFDa0N5Tk9BZ0FBM0FnaEJBQ0FJUVFocU5nTFEwNENBQUVFQUlBWTJBc3pUZ0lBQVFRQWdBRFlDeU5PQWdBQkJBRUVBTmdMVTA0Q0FBQ0FJUVNScUlRTURRQ0FEUVFjMkFnQWdBMEVFYWlJRElBVkpEUUFMSUFnZ0JFWU5BeUFJSUFnb0FnUkJmbkUyQWdRZ0NDQUlJQVJySWdBMkFnQWdCQ0FBUVFGeU5nSUVBa0FnQUVIL0FVc05BQ0FBUVhoeFFiRFFnSUFBYWlFREFrQUNRRUVBS0FLSTBJQ0FBQ0lGUVFFZ0FFRURkblFpQUhFTkFFRUFJQVVnQUhJMkFvalFnSUFBSUFNaEJRd0JDeUFES0FJSUlRVUxJQVVnQkRZQ0RDQURJQVEyQWdnZ0JDQUROZ0lNSUFRZ0JUWUNDQXdFQzBFZklRTUNRQ0FBUWYvLy93ZExEUUFnQUVFSWRpSURJQU5CZ1A0L2FrRVFka0VJY1NJRGRDSUZJQVZCZ09BZmFrRVFka0VFY1NJRmRDSUlJQWhCZ0lBUGFrRVFka0VDY1NJSWRFRVBkaUFESUFWeUlBaHlheUlEUVFGMElBQWdBMEVWYW5aQkFYRnlRUnhxSVFNTElBUWdBellDSENBRVFnQTNBaEFnQTBFQ2RFRzQwb0NBQUdvaEJRSkFRUUFvQW96UWdJQUFJZ2hCQVNBRGRDSUdjUTBBSUFVZ0JEWUNBRUVBSUFnZ0JuSTJBb3pRZ0lBQUlBUWdCVFlDR0NBRUlBUTJBZ2dnQkNBRU5nSU1EQVFMSUFCQkFFRVpJQU5CQVhacklBTkJIMFliZENFRElBVW9BZ0FoQ0FOQUlBZ2lCU2dDQkVGNGNTQUFSZzBESUFOQkhYWWhDQ0FEUVFGMElRTWdCU0FJUVFSeGFrRVFhaUlHS0FJQUlnZ05BQXNnQmlBRU5nSUFJQVFnQlRZQ0dDQUVJQVEyQWd3Z0JDQUVOZ0lJREFNTElBVW9BZ2dpQXlBQ05nSU1JQVVnQWpZQ0NDQUNRUUEyQWhnZ0FpQUZOZ0lNSUFJZ0F6WUNDQXNnQzBFSWFpRUREQVVMSUFVb0FnZ2lBeUFFTmdJTUlBVWdCRFlDQ0NBRVFRQTJBaGdnQkNBRk5nSU1JQVFnQXpZQ0NBdEJBQ2dDbE5DQWdBQWlBeUFDVFEwQVFRQW9BcURRZ0lBQUlnUWdBbW9pQlNBRElBSnJJZ05CQVhJMkFnUkJBQ0FETmdLVTBJQ0FBRUVBSUFVMkFxRFFnSUFBSUFRZ0FrRURjallDQkNBRVFRaHFJUU1NQXd0QkFDRURRUUJCTURZQytOT0FnQUFNQWdzQ1FDQUxSUTBBQWtBQ1FDQUlJQWdvQWh3aUJVRUNkRUc0MG9DQUFHb2lBeWdDQUVjTkFDQURJQUEyQWdBZ0FBMEJRUUFnQjBGK0lBVjNjU0lITmdLTTBJQ0FBQXdDQ3lBTFFSQkJGQ0FMS0FJUUlBaEdHMm9nQURZQ0FDQUFSUTBCQ3lBQUlBczJBaGdDUUNBSUtBSVFJZ05GRFFBZ0FDQUROZ0lRSUFNZ0FEWUNHQXNnQ0VFVWFpZ0NBQ0lEUlEwQUlBQkJGR29nQXpZQ0FDQURJQUEyQWhnTEFrQUNRQ0FFUVE5TERRQWdDQ0FFSUFKcUlnTkJBM0kyQWdRZ0NDQURhaUlESUFNb0FnUkJBWEkyQWdRTUFRc2dDQ0FDYWlJQUlBUkJBWEkyQWdRZ0NDQUNRUU55TmdJRUlBQWdCR29nQkRZQ0FBSkFJQVJCL3dGTERRQWdCRUY0Y1VHdzBJQ0FBR29oQXdKQUFrQkJBQ2dDaU5DQWdBQWlCVUVCSUFSQkEzWjBJZ1J4RFFCQkFDQUZJQVJ5TmdLSTBJQ0FBQ0FESVFRTUFRc2dBeWdDQ0NFRUN5QUVJQUEyQWd3Z0F5QUFOZ0lJSUFBZ0F6WUNEQ0FBSUFRMkFnZ01BUXRCSHlFREFrQWdCRUgvLy84SFN3MEFJQVJCQ0hZaUF5QURRWUQrUDJwQkVIWkJDSEVpQTNRaUJTQUZRWURnSDJwQkVIWkJCSEVpQlhRaUFpQUNRWUNBRDJwQkVIWkJBbkVpQW5SQkQzWWdBeUFGY2lBQ2Ntc2lBMEVCZENBRUlBTkJGV3AyUVFGeGNrRWNhaUVEQ3lBQUlBTTJBaHdnQUVJQU53SVFJQU5CQW5SQnVOS0FnQUJxSVFVQ1FDQUhRUUVnQTNRaUFuRU5BQ0FGSUFBMkFnQkJBQ0FISUFKeU5nS00wSUNBQUNBQUlBVTJBaGdnQUNBQU5nSUlJQUFnQURZQ0RBd0JDeUFFUVFCQkdTQURRUUYyYXlBRFFSOUdHM1FoQXlBRktBSUFJUUlDUUFOQUlBSWlCU2dDQkVGNGNTQUVSZzBCSUFOQkhYWWhBaUFEUVFGMElRTWdCU0FDUVFSeGFrRVFhaUlHS0FJQUlnSU5BQXNnQmlBQU5nSUFJQUFnQlRZQ0dDQUFJQUEyQWd3Z0FDQUFOZ0lJREFFTElBVW9BZ2dpQXlBQU5nSU1JQVVnQURZQ0NDQUFRUUEyQWhnZ0FDQUZOZ0lNSUFBZ0F6WUNDQXNnQ0VFSWFpRUREQUVMQWtBZ0NrVU5BQUpBQWtBZ0FDQUFLQUljSWdWQkFuUkJ1TktBZ0FCcUlnTW9BZ0JIRFFBZ0F5QUlOZ0lBSUFnTkFVRUFJQWxCZmlBRmQzRTJBb3pRZ0lBQURBSUxJQXBCRUVFVUlBb29BaEFnQUVZYmFpQUlOZ0lBSUFoRkRRRUxJQWdnQ2pZQ0dBSkFJQUFvQWhBaUEwVU5BQ0FJSUFNMkFoQWdBeUFJTmdJWUN5QUFRUlJxS0FJQUlnTkZEUUFnQ0VFVWFpQUROZ0lBSUFNZ0NEWUNHQXNDUUFKQUlBUkJEMHNOQUNBQUlBUWdBbW9pQTBFRGNqWUNCQ0FBSUFOcUlnTWdBeWdDQkVFQmNqWUNCQXdCQ3lBQUlBSnFJZ1VnQkVFQmNqWUNCQ0FBSUFKQkEzSTJBZ1FnQlNBRWFpQUVOZ0lBQWtBZ0IwVU5BQ0FIUVhoeFFiRFFnSUFBYWlFQ1FRQW9BcHpRZ0lBQUlRTUNRQUpBUVFFZ0IwRURkblFpQ0NBR2NRMEFRUUFnQ0NBR2NqWUNpTkNBZ0FBZ0FpRUlEQUVMSUFJb0FnZ2hDQXNnQ0NBRE5nSU1JQUlnQXpZQ0NDQURJQUkyQWd3Z0F5QUlOZ0lJQzBFQUlBVTJBcHpRZ0lBQVFRQWdCRFlDa05DQWdBQUxJQUJCQ0dvaEF3c2dBVUVRYWlTQWdJQ0FBQ0FEQ3dvQUlBQVF5WUNBZ0FBTDRnMEJCMzhDUUNBQVJRMEFJQUJCZUdvaUFTQUFRWHhxS0FJQUlnSkJlSEVpQUdvaEF3SkFJQUpCQVhFTkFDQUNRUU54UlEwQklBRWdBU2dDQUNJQ2F5SUJRUUFvQXBqUWdJQUFJZ1JKRFFFZ0FpQUFhaUVBQWtBZ0FVRUFLQUtjMElDQUFFWU5BQUpBSUFKQi93RkxEUUFnQVNnQ0NDSUVJQUpCQTNZaUJVRURkRUd3MElDQUFHb2lCa1lhQWtBZ0FTZ0NEQ0lDSUFSSERRQkJBRUVBS0FLSTBJQ0FBRUYrSUFWM2NUWUNpTkNBZ0FBTUF3c2dBaUFHUmhvZ0FpQUVOZ0lJSUFRZ0FqWUNEQXdDQ3lBQktBSVlJUWNDUUFKQUlBRW9BZ3dpQmlBQlJnMEFJQUVvQWdnaUFpQUVTUm9nQmlBQ05nSUlJQUlnQmpZQ0RBd0JDd0pBSUFGQkZHb2lBaWdDQUNJRURRQWdBVUVRYWlJQ0tBSUFJZ1FOQUVFQUlRWU1BUXNEUUNBQ0lRVWdCQ0lHUVJScUlnSW9BZ0FpQkEwQUlBWkJFR29oQWlBR0tBSVFJZ1FOQUFzZ0JVRUFOZ0lBQ3lBSFJRMEJBa0FDUUNBQklBRW9BaHdpQkVFQ2RFRzQwb0NBQUdvaUFpZ0NBRWNOQUNBQ0lBWTJBZ0FnQmcwQlFRQkJBQ2dDak5DQWdBQkJmaUFFZDNFMkFvelFnSUFBREFNTElBZEJFRUVVSUFjb0FoQWdBVVliYWlBR05nSUFJQVpGRFFJTElBWWdCellDR0FKQUlBRW9BaEFpQWtVTkFDQUdJQUkyQWhBZ0FpQUdOZ0lZQ3lBQktBSVVJZ0pGRFFFZ0JrRVVhaUFDTmdJQUlBSWdCallDR0F3QkN5QURLQUlFSWdKQkEzRkJBMGNOQUNBRElBSkJmbkUyQWdSQkFDQUFOZ0tRMElDQUFDQUJJQUJxSUFBMkFnQWdBU0FBUVFGeU5nSUVEd3NnQVNBRFR3MEFJQU1vQWdRaUFrRUJjVVVOQUFKQUFrQWdBa0VDY1EwQUFrQWdBMEVBS0FLZzBJQ0FBRWNOQUVFQUlBRTJBcURRZ0lBQVFRQkJBQ2dDbE5DQWdBQWdBR29pQURZQ2xOQ0FnQUFnQVNBQVFRRnlOZ0lFSUFGQkFDZ0NuTkNBZ0FCSERRTkJBRUVBTmdLUTBJQ0FBRUVBUVFBMkFwelFnSUFBRHdzQ1FDQURRUUFvQXB6UWdJQUFSdzBBUVFBZ0FUWUNuTkNBZ0FCQkFFRUFLQUtRMElDQUFDQUFhaUlBTmdLUTBJQ0FBQ0FCSUFCQkFYSTJBZ1FnQVNBQWFpQUFOZ0lBRHdzZ0FrRjRjU0FBYWlFQUFrQUNRQ0FDUWY4QlN3MEFJQU1vQWdnaUJDQUNRUU4ySWdWQkEzUkJzTkNBZ0FCcUlnWkdHZ0pBSUFNb0Fnd2lBaUFFUncwQVFRQkJBQ2dDaU5DQWdBQkJmaUFGZDNFMkFvalFnSUFBREFJTElBSWdCa1lhSUFJZ0JEWUNDQ0FFSUFJMkFnd01BUXNnQXlnQ0dDRUhBa0FDUUNBREtBSU1JZ1lnQTBZTkFDQURLQUlJSWdKQkFDZ0NtTkNBZ0FCSkdpQUdJQUkyQWdnZ0FpQUdOZ0lNREFFTEFrQWdBMEVVYWlJQ0tBSUFJZ1FOQUNBRFFSQnFJZ0lvQWdBaUJBMEFRUUFoQmd3QkN3TkFJQUloQlNBRUlnWkJGR29pQWlnQ0FDSUVEUUFnQmtFUWFpRUNJQVlvQWhBaUJBMEFDeUFGUVFBMkFnQUxJQWRGRFFBQ1FBSkFJQU1nQXlnQ0hDSUVRUUowUWJqU2dJQUFhaUlDS0FJQVJ3MEFJQUlnQmpZQ0FDQUdEUUZCQUVFQUtBS00wSUNBQUVGK0lBUjNjVFlDak5DQWdBQU1BZ3NnQjBFUVFSUWdCeWdDRUNBRFJodHFJQVkyQWdBZ0JrVU5BUXNnQmlBSE5nSVlBa0FnQXlnQ0VDSUNSUTBBSUFZZ0FqWUNFQ0FDSUFZMkFoZ0xJQU1vQWhRaUFrVU5BQ0FHUVJScUlBSTJBZ0FnQWlBR05nSVlDeUFCSUFCcUlBQTJBZ0FnQVNBQVFRRnlOZ0lFSUFGQkFDZ0NuTkNBZ0FCSERRRkJBQ0FBTmdLUTBJQ0FBQThMSUFNZ0FrRitjVFlDQkNBQklBQnFJQUEyQWdBZ0FTQUFRUUZ5TmdJRUN3SkFJQUJCL3dGTERRQWdBRUY0Y1VHdzBJQ0FBR29oQWdKQUFrQkJBQ2dDaU5DQWdBQWlCRUVCSUFCQkEzWjBJZ0J4RFFCQkFDQUVJQUJ5TmdLSTBJQ0FBQ0FDSVFBTUFRc2dBaWdDQ0NFQUN5QUFJQUUyQWd3Z0FpQUJOZ0lJSUFFZ0FqWUNEQ0FCSUFBMkFnZ1BDMEVmSVFJQ1FDQUFRZi8vL3dkTERRQWdBRUVJZGlJQ0lBSkJnUDQvYWtFUWRrRUljU0lDZENJRUlBUkJnT0FmYWtFUWRrRUVjU0lFZENJR0lBWkJnSUFQYWtFUWRrRUNjU0lHZEVFUGRpQUNJQVJ5SUFaeWF5SUNRUUYwSUFBZ0FrRVZhblpCQVhGeVFSeHFJUUlMSUFFZ0FqWUNIQ0FCUWdBM0FoQWdBa0VDZEVHNDBvQ0FBR29oQkFKQUFrQkJBQ2dDak5DQWdBQWlCa0VCSUFKMElnTnhEUUFnQkNBQk5nSUFRUUFnQmlBRGNqWUNqTkNBZ0FBZ0FTQUVOZ0lZSUFFZ0FUWUNDQ0FCSUFFMkFnd01BUXNnQUVFQVFSa2dBa0VCZG1zZ0FrRWZSaHQwSVFJZ0JDZ0NBQ0VHQWtBRFFDQUdJZ1FvQWdSQmVIRWdBRVlOQVNBQ1FSMTJJUVlnQWtFQmRDRUNJQVFnQmtFRWNXcEJFR29pQXlnQ0FDSUdEUUFMSUFNZ0FUWUNBQ0FCSUFRMkFoZ2dBU0FCTmdJTUlBRWdBVFlDQ0F3QkN5QUVLQUlJSWdBZ0FUWUNEQ0FFSUFFMkFnZ2dBVUVBTmdJWUlBRWdCRFlDRENBQklBQTJBZ2dMUVFCQkFDZ0NxTkNBZ0FCQmYyb2lBVUYvSUFFYk5nS28wSUNBQUFzTEJBQUFBQXRPQUFKQUlBQU5BRDhBUVJCMER3c0NRQ0FBUWYvL0EzRU5BQ0FBUVg5TURRQUNRQ0FBUVJCMlFBQWlBRUYvUncwQVFRQkJNRFlDK05PQWdBQkJmdzhMSUFCQkVIUVBDeERLZ0lDQUFBQUw4Z0lDQTM4QmZnSkFJQUpGRFFBZ0FDQUJPZ0FBSUFJZ0FHb2lBMEYvYWlBQk9nQUFJQUpCQTBrTkFDQUFJQUU2QUFJZ0FDQUJPZ0FCSUFOQmZXb2dBVG9BQUNBRFFYNXFJQUU2QUFBZ0FrRUhTUTBBSUFBZ0FUb0FBeUFEUVh4cUlBRTZBQUFnQWtFSlNRMEFJQUJCQUNBQWEwRURjU0lFYWlJRElBRkIvd0Z4UVlHQ2hBaHNJZ0UyQWdBZ0F5QUNJQVJyUVh4eElnUnFJZ0pCZkdvZ0FUWUNBQ0FFUVFsSkRRQWdBeUFCTmdJSUlBTWdBVFlDQkNBQ1FYaHFJQUUyQWdBZ0FrRjBhaUFCTmdJQUlBUkJHVWtOQUNBRElBRTJBaGdnQXlBQk5nSVVJQU1nQVRZQ0VDQURJQUUyQWd3Z0FrRndhaUFCTmdJQUlBSkJiR29nQVRZQ0FDQUNRV2hxSUFFMkFnQWdBa0ZrYWlBQk5nSUFJQVFnQTBFRWNVRVljaUlGYXlJQ1FTQkpEUUFnQWExQ2dZQ0FnQkIrSVFZZ0F5QUZhaUVCQTBBZ0FTQUdOd01ZSUFFZ0JqY0RFQ0FCSUFZM0F3Z2dBU0FHTndNQUlBRkJJR29oQVNBQ1FXQnFJZ0pCSDBzTkFBc0xJQUFMQzQ1SUFRQkJnQWdMaGtnQkFBQUFBZ0FBQUFNQUFBQUFBQUFBQUFBQUFBUUFBQUFGQUFBQUFBQUFBQUFBQUFBR0FBQUFCd0FBQUFnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFbHVkbUZzYVdRZ1kyaGhjaUJwYmlCMWNtd2djWFZsY25rQVUzQmhiaUJqWVd4c1ltRmpheUJsY25KdmNpQnBiaUJ2Ymw5aWIyUjVBRU52Ym5SbGJuUXRUR1Z1WjNSb0lHOTJaWEptYkc5M0FFTm9kVzVySUhOcGVtVWdiM1psY21ac2IzY0FVbVZ6Y0c5dWMyVWdiM1psY21ac2IzY0FTVzUyWVd4cFpDQnRaWFJvYjJRZ1ptOXlJRWhVVkZBdmVDNTRJSEpsY1hWbGMzUUFTVzUyWVd4cFpDQnRaWFJvYjJRZ1ptOXlJRkpVVTFBdmVDNTRJSEpsY1hWbGMzUUFSWGh3WldOMFpXUWdVMDlWVWtORklHMWxkR2h2WkNCbWIzSWdTVU5GTDNndWVDQnlaWEYxWlhOMEFFbHVkbUZzYVdRZ1kyaGhjaUJwYmlCMWNtd2dabkpoWjIxbGJuUWdjM1JoY25RQVJYaHdaV04wWldRZ1pHOTBBRk53WVc0Z1kyRnNiR0poWTJzZ1pYSnliM0lnYVc0Z2IyNWZjM1JoZEhWekFFbHVkbUZzYVdRZ2NtVnpjRzl1YzJVZ2MzUmhkSFZ6QUVsdWRtRnNhV1FnWTJoaGNtRmpkR1Z5SUdsdUlHTm9kVzVySUdWNGRHVnVjMmx2Ym5NQVZYTmxjaUJqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmY21WelpYUmdJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDlqYUhWdWExOW9aV0ZrWlhKZ0lHTmhiR3hpWVdOcklHVnljbTl5QUdCdmJsOXRaWE56WVdkbFgySmxaMmx1WUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZlkyaDFibXRmWlhoMFpXNXphVzl1WDNaaGJIVmxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmYzNSaGRIVnpYMk52YlhCc1pYUmxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmZG1WeWMybHZibDlqYjIxd2JHVjBaV0FnWTJGc2JHSmhZMnNnWlhKeWIzSUFZRzl1WDNWeWJGOWpiMjF3YkdWMFpXQWdZMkZzYkdKaFkyc2daWEp5YjNJQVlHOXVYMk5vZFc1clgyTnZiWEJzWlhSbFlDQmpZV3hzWW1GamF5Qmxjbkp2Y2dCZ2IyNWZhR1ZoWkdWeVgzWmhiSFZsWDJOdmJYQnNaWFJsWUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZmJXVnpjMkZuWlY5amIyMXdiR1YwWldBZ1kyRnNiR0poWTJzZ1pYSnliM0lBWUc5dVgyMWxkR2h2WkY5amIyMXdiR1YwWldBZ1kyRnNiR0poWTJzZ1pYSnliM0lBWUc5dVgyaGxZV1JsY2w5bWFXVnNaRjlqYjIxd2JHVjBaV0FnWTJGc2JHSmhZMnNnWlhKeWIzSUFZRzl1WDJOb2RXNXJYMlY0ZEdWdWMybHZibDl1WVcxbFlDQmpZV3hzWW1GamF5Qmxjbkp2Y2dCVmJtVjRjR1ZqZEdWa0lHTm9ZWElnYVc0Z2RYSnNJSE5sY25abGNnQkpiblpoYkdsa0lHaGxZV1JsY2lCMllXeDFaU0JqYUdGeUFFbHVkbUZzYVdRZ2FHVmhaR1Z5SUdacFpXeGtJR05vWVhJQVUzQmhiaUJqWVd4c1ltRmpheUJsY25KdmNpQnBiaUJ2Ymw5MlpYSnphVzl1QUVsdWRtRnNhV1FnYldsdWIzSWdkbVZ5YzJsdmJnQkpiblpoYkdsa0lHMWhhbTl5SUhabGNuTnBiMjRBUlhod1pXTjBaV1FnYzNCaFkyVWdZV1owWlhJZ2RtVnljMmx2YmdCRmVIQmxZM1JsWkNCRFVreEdJR0ZtZEdWeUlIWmxjbk5wYjI0QVNXNTJZV3hwWkNCSVZGUlFJSFpsY25OcGIyNEFTVzUyWVd4cFpDQm9aV0ZrWlhJZ2RHOXJaVzRBVTNCaGJpQmpZV3hzWW1GamF5Qmxjbkp2Y2lCcGJpQnZibDkxY213QVNXNTJZV3hwWkNCamFHRnlZV04wWlhKeklHbHVJSFZ5YkFCVmJtVjRjR1ZqZEdWa0lITjBZWEowSUdOb1lYSWdhVzRnZFhKc0FFUnZkV0pzWlNCQUlHbHVJSFZ5YkFCRmJYQjBlU0JEYjI1MFpXNTBMVXhsYm1kMGFBQkpiblpoYkdsa0lHTm9ZWEpoWTNSbGNpQnBiaUJEYjI1MFpXNTBMVXhsYm1kMGFBQkVkWEJzYVdOaGRHVWdRMjl1ZEdWdWRDMU1aVzVuZEdnQVNXNTJZV3hwWkNCamFHRnlJR2x1SUhWeWJDQndZWFJvQUVOdmJuUmxiblF0VEdWdVozUm9JR05oYmlkMElHSmxJSEJ5WlhObGJuUWdkMmwwYUNCVWNtRnVjMlpsY2kxRmJtTnZaR2x1WndCSmJuWmhiR2xrSUdOb1lYSmhZM1JsY2lCcGJpQmphSFZ1YXlCemFYcGxBRk53WVc0Z1kyRnNiR0poWTJzZ1pYSnliM0lnYVc0Z2IyNWZhR1ZoWkdWeVgzWmhiSFZsQUZOd1lXNGdZMkZzYkdKaFkyc2daWEp5YjNJZ2FXNGdiMjVmWTJoMWJtdGZaWGgwWlc1emFXOXVYM1poYkhWbEFFbHVkbUZzYVdRZ1kyaGhjbUZqZEdWeUlHbHVJR05vZFc1cklHVjRkR1Z1YzJsdmJuTWdkbUZzZFdVQVRXbHpjMmx1WnlCbGVIQmxZM1JsWkNCTVJpQmhablJsY2lCb1pXRmtaWElnZG1Gc2RXVUFTVzUyWVd4cFpDQmdWSEpoYm5ObVpYSXRSVzVqYjJScGJtZGdJR2hsWVdSbGNpQjJZV3gxWlFCSmJuWmhiR2xrSUdOb1lYSmhZM1JsY2lCcGJpQmphSFZ1YXlCbGVIUmxibk5wYjI1eklIRjFiM1JsSUhaaGJIVmxBRWx1ZG1Gc2FXUWdZMmhoY21GamRHVnlJR2x1SUdOb2RXNXJJR1Y0ZEdWdWMybHZibk1nY1hWdmRHVmtJSFpoYkhWbEFGQmhkWE5sWkNCaWVTQnZibDlvWldGa1pYSnpYMk52YlhCc1pYUmxBRWx1ZG1Gc2FXUWdSVTlHSUhOMFlYUmxBRzl1WDNKbGMyVjBJSEJoZFhObEFHOXVYMk5vZFc1clgyaGxZV1JsY2lCd1lYVnpaUUJ2Ymw5dFpYTnpZV2RsWDJKbFoybHVJSEJoZFhObEFHOXVYMk5vZFc1clgyVjRkR1Z1YzJsdmJsOTJZV3gxWlNCd1lYVnpaUUJ2Ymw5emRHRjBkWE5mWTI5dGNHeGxkR1VnY0dGMWMyVUFiMjVmZG1WeWMybHZibDlqYjIxd2JHVjBaU0J3WVhWelpRQnZibDkxY214ZlkyOXRjR3hsZEdVZ2NHRjFjMlVBYjI1ZlkyaDFibXRmWTI5dGNHeGxkR1VnY0dGMWMyVUFiMjVmYUdWaFpHVnlYM1poYkhWbFgyTnZiWEJzWlhSbElIQmhkWE5sQUc5dVgyMWxjM05oWjJWZlkyOXRjR3hsZEdVZ2NHRjFjMlVBYjI1ZmJXVjBhRzlrWDJOdmJYQnNaWFJsSUhCaGRYTmxBRzl1WDJobFlXUmxjbDltYVdWc1pGOWpiMjF3YkdWMFpTQndZWFZ6WlFCdmJsOWphSFZ1YTE5bGVIUmxibk5wYjI1ZmJtRnRaU0J3WVhWelpRQlZibVY0Y0dWamRHVmtJSE53WVdObElHRm1kR1Z5SUhOMFlYSjBJR3hwYm1VQVUzQmhiaUJqWVd4c1ltRmpheUJsY25KdmNpQnBiaUJ2Ymw5amFIVnVhMTlsZUhSbGJuTnBiMjVmYm1GdFpRQkpiblpoYkdsa0lHTm9ZWEpoWTNSbGNpQnBiaUJqYUhWdWF5QmxlSFJsYm5OcGIyNXpJRzVoYldVQVVHRjFjMlVnYjI0Z1EwOU9Ua1ZEVkM5VmNHZHlZV1JsQUZCaGRYTmxJRzl1SUZCU1NTOVZjR2R5WVdSbEFFVjRjR1ZqZEdWa0lFaFVWRkF2TWlCRGIyNXVaV04wYVc5dUlGQnlaV1poWTJVQVUzQmhiaUJqWVd4c1ltRmpheUJsY25KdmNpQnBiaUJ2Ymw5dFpYUm9iMlFBUlhod1pXTjBaV1FnYzNCaFkyVWdZV1owWlhJZ2JXVjBhRzlrQUZOd1lXNGdZMkZzYkdKaFkyc2daWEp5YjNJZ2FXNGdiMjVmYUdWaFpHVnlYMlpwWld4a0FGQmhkWE5sWkFCSmJuWmhiR2xrSUhkdmNtUWdaVzVqYjNWdWRHVnlaV1FBU1c1MllXeHBaQ0J0WlhSb2IyUWdaVzVqYjNWdWRHVnlaV1FBVlc1bGVIQmxZM1JsWkNCamFHRnlJR2x1SUhWeWJDQnpZMmhsYldFQVVtVnhkV1Z6ZENCb1lYTWdhVzUyWVd4cFpDQmdWSEpoYm5ObVpYSXRSVzVqYjJScGJtZGdBRk5YU1ZSRFNGOVFVazlZV1FCVlUwVmZVRkpQV0ZrQVRVdEJRMVJKVmtsVVdRQlZUbEJTVDBORlUxTkJRa3hGWDBWT1ZFbFVXUUJEVDFCWkFFMVBWa1ZFWDFCRlVrMUJUa1ZPVkV4WkFGUlBUMTlGUVZKTVdRQk9UMVJKUmxrQVJrRkpURVZFWDBSRlVFVk9SRVZPUTFrQVFrRkVYMGRCVkVWWFFWa0FVRXhCV1FCUVZWUUFRMGhGUTB0UFZWUUFSMEZVUlZkQldWOVVTVTFGVDFWVUFGSkZVVlZGVTFSZlZFbE5SVTlWVkFCT1JWUlhUMUpMWDBOUFRrNUZRMVJmVkVsTlJVOVZWQUJEVDA1T1JVTlVTVTlPWDFSSlRVVlBWVlFBVEU5SFNVNWZWRWxOUlU5VlZBQk9SVlJYVDFKTFgxSkZRVVJmVkVsTlJVOVZWQUJRVDFOVUFFMUpVMFJKVWtWRFZFVkVYMUpGVVZWRlUxUUFRMHhKUlU1VVgwTk1UMU5GUkY5U1JWRlZSVk5VQUVOTVNVVk9WRjlEVEU5VFJVUmZURTlCUkY5Q1FVeEJUa05GUkY5U1JWRlZSVk5VQUVKQlJGOVNSVkZWUlZOVUFFaFVWRkJmVWtWUlZVVlRWRjlUUlU1VVgxUlBYMGhVVkZCVFgxQlBVbFFBVWtWUVQxSlVBRWxOWDBGZlZFVkJVRTlVQUZKRlUwVlVYME5QVGxSRlRsUUFUazlmUTA5T1ZFVk9WQUJRUVZKVVNVRk1YME5QVGxSRlRsUUFTRkJGWDBsT1ZrRk1TVVJmUTA5T1UxUkJUbFFBU0ZCRlgwTkNYMUpGVTBWVUFFZEZWQUJJVUVWZlUxUlNTVU5VQUVOUFRrWk1TVU5VQUZSRlRWQlBVa0ZTV1Y5U1JVUkpVa1ZEVkFCUVJWSk5RVTVGVGxSZlVrVkVTVkpGUTFRQVEwOU9Ua1ZEVkFCTlZVeFVTVjlUVkVGVVZWTUFTRkJGWDBsT1ZrRk1TVVJmVTFSQlZGVlRBRlJQVDE5TlFVNVpYMUpGVVZWRlUxUlRBRVZCVWt4WlgwaEpUbFJUQUZWT1FWWkJTVXhCUWt4RlgwWlBVbDlNUlVkQlRGOVNSVUZUVDA1VEFFOVFWRWxQVGxNQVUxZEpWRU5JU1U1SFgxQlNUMVJQUTA5TVV3QldRVkpKUVU1VVgwRk1VMDlmVGtWSFQxUkpRVlJGVXdCTlZVeFVTVkJNUlY5RFNFOUpRMFZUQUVsT1ZFVlNUa0ZNWDFORlVsWkZVbDlGVWxKUFVnQlhSVUpmVTBWU1ZrVlNYMVZPUzA1UFYwNWZSVkpTVDFJQVVrRkpURWRWVGw5RlVsSlBVZ0JKUkVWT1ZFbFVXVjlRVWs5V1NVUkZVbDlCVlZSSVJVNVVTVU5CVkVsUFRsOUZVbEpQVWdCVFUweGZRMFZTVkVsR1NVTkJWRVZmUlZKU1QxSUFTVTVXUVV4SlJGOVlYMFpQVWxkQlVrUkZSRjlHVDFJQVUwVlVYMUJCVWtGTlJWUkZVZ0JIUlZSZlVFRlNRVTFGVkVWU0FFaFFSVjlWVTBWU0FGTkZSVjlQVkVoRlVnQklVRVZmUTBKZlEwaFZUa3RmU0VWQlJFVlNBRTFMUTBGTVJVNUVRVklBVTBWVVZWQUFWMFZDWDFORlVsWkZVbDlKVTE5RVQxZE9BRlJGUVZKRVQxZE9BRWhRUlY5RFRFOVRSVVJmUTA5T1RrVkRWRWxQVGdCSVJWVlNTVk5VU1VOZlJWaFFTVkpCVkVsUFRnQkVTVk5EVDA1T1JVTlVSVVJmVDFCRlVrRlVTVTlPQUU1UFRsOUJWVlJJVDFKSlZFRlVTVlpGWDBsT1JrOVNUVUZVU1U5T0FFaFFSVjlKVGxaQlRFbEVYMVpGVWxOSlQwNEFTRkJGWDBOQ1gwMUZVMU5CUjBWZlFrVkhTVTRBVTBsVVJWOUpVMTlHVWs5YVJVNEFTRkJGWDBsT1ZrRk1TVVJmU0VWQlJFVlNYMVJQUzBWT0FFbE9Wa0ZNU1VSZlZFOUxSVTRBUms5U1FrbEVSRVZPQUVWT1NFRk9RMFZmV1U5VlVsOURRVXhOQUVoUVJWOUpUbFpCVEVsRVgxVlNUQUJDVEU5RFMwVkVYMEpaWDFCQlVrVk9WRUZNWDBOUFRsUlNUMHdBVFV0RFQwd0FRVU5NQUVoUVJWOUpUbFJGVWs1QlRBQlNSVkZWUlZOVVgwaEZRVVJGVWw5R1NVVk1SRk5mVkU5UFgweEJVa2RGWDFWT1QwWkdTVU5KUVV3QVNGQkZYMDlMQUZWT1RFbE9Td0JWVGt4UFEwc0FVRkpKQUZKRlZGSlpYMWRKVkVnQVNGQkZYMGxPVmtGTVNVUmZRMDlPVkVWT1ZGOU1SVTVIVkVnQVNGQkZYMVZPUlZoUVJVTlVSVVJmUTA5T1ZFVk9WRjlNUlU1SFZFZ0FSa3hWVTBnQVVGSlBVRkJCVkVOSUFFMHRVMFZCVWtOSUFGVlNTVjlVVDA5ZlRFOU9Sd0JRVWs5RFJWTlRTVTVIQUUxSlUwTkZURXhCVGtWUFZWTmZVRVZTVTBsVFZFVk9WRjlYUVZKT1NVNUhBRTFKVTBORlRFeEJUa1ZQVlZOZlYwRlNUa2xPUndCSVVFVmZTVTVXUVV4SlJGOVVVa0ZPVTBaRlVsOUZUa05QUkVsT1J3QkZlSEJsWTNSbFpDQkRVa3hHQUVoUVJWOUpUbFpCVEVsRVgwTklWVTVMWDFOSldrVUFUVTlXUlFCRFQwNVVTVTVWUlFCSVVFVmZRMEpmVTFSQlZGVlRYME5QVFZCTVJWUkZBRWhRUlY5RFFsOUlSVUZFUlZKVFgwTlBUVkJNUlZSRkFFaFFSVjlEUWw5V1JWSlRTVTlPWDBOUFRWQk1SVlJGQUVoUVJWOURRbDlWVWt4ZlEwOU5VRXhGVkVVQVNGQkZYME5DWDBOSVZVNUxYME5QVFZCTVJWUkZBRWhRUlY5RFFsOUlSVUZFUlZKZlZrRk1WVVZmUTA5TlVFeEZWRVVBU0ZCRlgwTkNYME5JVlU1TFgwVllWRVZPVTBsUFRsOVdRVXhWUlY5RFQwMVFURVZVUlFCSVVFVmZRMEpmUTBoVlRrdGZSVmhVUlU1VFNVOU9YMDVCVFVWZlEwOU5VRXhGVkVVQVNGQkZYME5DWDAxRlUxTkJSMFZmUTA5TlVFeEZWRVVBU0ZCRlgwTkNYMDFGVkVoUFJGOURUMDFRVEVWVVJRQklVRVZmUTBKZlNFVkJSRVZTWDBaSlJVeEVYME5QVFZCTVJWUkZBRVJGVEVWVVJRQklVRVZmU1U1V1FVeEpSRjlGVDBaZlUxUkJWRVVBU1U1V1FVeEpSRjlUVTB4ZlEwVlNWRWxHU1VOQlZFVUFVRUZWVTBVQVRrOWZVa1ZUVUU5T1UwVUFWVTVUVlZCUVQxSlVSVVJmVFVWRVNVRmZWRmxRUlFCSFQwNUZBRTVQVkY5QlEwTkZVRlJCUWt4RkFGTkZVbFpKUTBWZlZVNUJWa0ZKVEVGQ1RFVUFVa0ZPUjBWZlRrOVVYMU5CVkVsVFJrbEJRa3hGQUU5U1NVZEpUbDlKVTE5VlRsSkZRVU5JUVVKTVJRQlNSVk5RVDA1VFJWOUpVMTlUVkVGTVJRQlFWVkpIUlFCTlJWSkhSUUJTUlZGVlJWTlVYMGhGUVVSRlVsOUdTVVZNUkZOZlZFOVBYMHhCVWtkRkFGSkZVVlZGVTFSZlNFVkJSRVZTWDFSUFQxOU1RVkpIUlFCUVFWbE1UMEZFWDFSUFQxOU1RVkpIUlFCSlRsTlZSa1pKUTBsRlRsUmZVMVJQVWtGSFJRQklVRVZmVUVGVlUwVkVYMVZRUjFKQlJFVUFTRkJGWDFCQlZWTkZSRjlJTWw5VlVFZFNRVVJGQUZOUFZWSkRSUUJCVGs1UFZVNURSUUJVVWtGRFJRQklVRVZmVlU1RldGQkZRMVJGUkY5VFVFRkRSUUJFUlZORFVrbENSUUJWVGxOVlFsTkRVa2xDUlFCU1JVTlBVa1FBU0ZCRlgwbE9Wa0ZNU1VSZlRVVlVTRTlFQUU1UFZGOUdUMVZPUkFCUVVrOVFSa2xPUkFCVlRrSkpUa1FBVWtWQ1NVNUVBRlZPUVZWVVNFOVNTVnBGUkFCTlJWUklUMFJmVGs5VVgwRk1URTlYUlVRQVNGUlVVRjlXUlZKVFNVOU9YMDVQVkY5VFZWQlFUMUpVUlVRQVFVeFNSVUZFV1Y5U1JWQlBVbFJGUkFCQlEwTkZVRlJGUkFCT1QxUmZTVTFRVEVWTlJVNVVSVVFBVEU5UFVGOUVSVlJGUTFSRlJBQklVRVZmUTFKZlJWaFFSVU5VUlVRQVNGQkZYMHhHWDBWWVVFVkRWRVZFQUVOU1JVRlVSVVFBU1UxZlZWTkZSQUJJVUVWZlVFRlZVMFZFQUZSSlRVVlBWVlJmVDBORFZWSkZSQUJRUVZsTlJVNVVYMUpGVVZWSlVrVkVBRkJTUlVOUFRrUkpWRWxQVGw5U1JWRlZTVkpGUkFCUVVrOVlXVjlCVlZSSVJVNVVTVU5CVkVsUFRsOVNSVkZWU1ZKRlJBQk9SVlJYVDFKTFgwRlZWRWhGVGxSSlEwRlVTVTlPWDFKRlVWVkpVa1ZFQUV4RlRrZFVTRjlTUlZGVlNWSkZSQUJUVTB4ZlEwVlNWRWxHU1VOQlZFVmZVa1ZSVlVsU1JVUUFWVkJIVWtGRVJWOVNSVkZWU1ZKRlJBQlFRVWRGWDBWWVVFbFNSVVFBVUZKRlEwOU9SRWxVU1U5T1gwWkJTVXhGUkFCRldGQkZRMVJCVkVsUFRsOUdRVWxNUlVRQVVrVldRVXhKUkVGVVNVOU9YMFpCU1V4RlJBQlRVMHhmU0VGT1JGTklRVXRGWDBaQlNVeEZSQUJNVDBOTFJVUUFWRkpCVGxOR1QxSk5RVlJKVDA1ZlFWQlFURWxGUkFCT1QxUmZUVTlFU1VaSlJVUUFUazlVWDBWWVZFVk9SRVZFQUVKQlRrUlhTVVJVU0Y5TVNVMUpWRjlGV0VORlJVUkZSQUJUU1ZSRlgwbFRYMDlXUlZKTVQwRkVSVVFBU0VWQlJBQkZlSEJsWTNSbFpDQklWRlJRTHdBQVhoTUFBQ1lUQUFBd0VBQUE4QmNBQUowVEFBQVZFZ0FBT1JjQUFQQVNBQUFLRUFBQWRSSUFBSzBTQUFDQ0V3QUFUeFFBQUg4UUFBQ2dGUUFBSXhRQUFJa1NBQUNMRkFBQVRSVUFBTlFSQUFEUEZBQUFFQmdBQU1rV0FBRGNGZ0FBd1JFQUFPQVhBQUM3RkFBQWRCUUFBSHdWQUFEbEZBQUFDQmNBQUI4UUFBQmxGUUFBb3hRQUFDZ1ZBQUFDRlFBQW1SVUFBQ3dRQUFDTEdRQUFUdzhBQU5RT0FBQnFFQUFBemhBQUFBSVhBQUNKRGdBQWJoTUFBQndUQUFCbUZBQUFWaGNBQU1FVEFBRE5Fd0FBYkJNQUFHZ1hBQUJtRndBQVh4Y0FBQ0lUQUFET0R3QUFhUTRBQU5nT0FBQmpGZ0FBeXhNQUFLb09BQUFvRndBQUpoY0FBTVVUQUFCZEZnQUE2QkVBQUdjVEFBQmxFd0FBOGhZQUFITVRBQUFkRndBQStSWUFBUE1SQUFEUERnQUF6aFVBQUF3U0FBQ3pFUUFBcFJFQUFHRVFBQUF5RndBQXV4TUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFRSUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQUFBQUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUlEQWdJQ0FnSUFBQUlDQUFJQ0FBSUNBZ0lDQWdJQ0FnSUFCQUFBQUFBQUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQUFBQUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0FDQUFJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ0FBSUNBZ0lDQUFBQ0FnQUNBZ0FDQWdJQ0FnSUNBZ0lDQUFNQUJBQUFBQUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBQUFBQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQUFnQUNBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBYkc5elpXVmxjQzFoYkdsMlpRQUFBQUFBQUFBQUFBQUFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQUFBQUFBQUFBQUFBQkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVCQVFFQkFRRUJBUUVCQVFJQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJZMmgxYm10bFpBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFFQUFRRUJBUUVBQUFFQkFBRUJBQUVCQVFFQkFRRUJBUUVBQUFBQUFBQUFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBQUFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQkFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJsWTNScGIyNWxiblF0YkdWdVozUm9iMjV5YjNoNUxXTnZibTVsWTNScGIyNEFBQUFBQUFBQUFBQUFBQUFBQUFCeVlXNXpabVZ5TFdWdVkyOWthVzVuY0dkeVlXUmxEUW9OQ2cwS1UwME5DZzBLVkZSUUwwTkZMMVJUVUM4QUFBQUFBQUFBQUFBQUFBQUJBZ0FCQXdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFBQUFBQUFBQUFBQVFJQUFRTUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVBUUVGQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUFBQUFBQUFBQUFBRUFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFQkFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQUFBQUFBQUFBQUFBQVFBQUFnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTUVBQUFFQkFRRUJBUUVCQVFFQkFVRUJBUUVCQVFFQkFRRUJBUUFCQUFHQndRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBRUFBUUFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRUFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUlBQUFBQUFBQURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3QUFBQUFBQUFNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQUFBQkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUFBQUFBQUFBQUFBSUFBQUFBQWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01BQUFBQUFBQURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCT1QxVk9RMFZGUTB0UFZWUk9SVU5VUlZSRlExSkpRa1ZNVlZOSVJWUkZRVVJUUlVGU1EwaFNSMFZEVkVsV1NWUlpURVZPUkVGU1ZrVlBWRWxHV1ZCVVNVOU9VME5JVTBWQldWTlVRVlJEU0VkRlQxSkVTVkpGUTFSUFVsUlNRMGhRUVZKQlRVVlVSVkpWVWtORlFsTkRVa2xDUlVGU1JFOVhUa0ZEUlVsT1JFNUxRMHRWUWxORFVrbENSVWhVVkZBdlFVUlVVQzg9J1xuIiwKICAgICJtb2R1bGUuZXhwb3J0cyA9ICdBR0Z6YlFFQUFBQUJNQWhnQVg4QmYyQURmMzkvQVg5Z0JIOS9mMzhCZjJBQUFHQURmMzkvQUdBQmZ3QmdBbjkvQUdBR2YzOS9mMzkvQUFMTEFRZ0RaVzUyR0hkaGMyMWZiMjVmYUdWaFpHVnljMTlqYjIxd2JHVjBaUUFDQTJWdWRoVjNZWE50WDI5dVgyMWxjM05oWjJWZlltVm5hVzRBQUFObGJuWUxkMkZ6YlY5dmJsOTFjbXdBQVFObGJuWU9kMkZ6YlY5dmJsOXpkR0YwZFhNQUFRTmxibllVZDJGemJWOXZibDlvWldGa1pYSmZabWxsYkdRQUFRTmxibllVZDJGemJWOXZibDlvWldGa1pYSmZkbUZzZFdVQUFRTmxibllNZDJGemJWOXZibDlpYjJSNUFBRURaVzUyR0hkaGMyMWZiMjVmYldWemMyRm5aVjlqYjIxd2JHVjBaUUFBQTBaRkF3TUVBQUFGQUFBQUFBQUFCUUVGQUFVRkJRQUFCZ0FBQUFBR0JnWUdBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBQUFCQVFjQUFBVUZBd0FCQkFVQmNBRVNFZ1VEQVFBQ0JnZ0Jmd0ZCZ05RRUN3ZlJCU0lHYldWdGIzSjVBZ0FMWDJsdWFYUnBZV3hwZW1VQUNSbGZYMmx1WkdseVpXTjBYMloxYm1OMGFXOXVYM1JoWW14bEFRQUxiR3hvZEhSd1gybHVhWFFBQ2hoc2JHaDBkSEJmYzJodmRXeGtYMnRsWlhCZllXeHBkbVVBUVF4c2JHaDBkSEJmWVd4c2IyTUFEQVp0WVd4c2IyTUFSZ3RzYkdoMGRIQmZabkpsWlFBTkJHWnlaV1VBU0E5c2JHaDBkSEJmWjJWMFgzUjVjR1VBRGhWc2JHaDBkSEJmWjJWMFgyaDBkSEJmYldGcWIzSUFEeFZzYkdoMGRIQmZaMlYwWDJoMGRIQmZiV2x1YjNJQUVCRnNiR2gwZEhCZloyVjBYMjFsZEdodlpBQVJGbXhzYUhSMGNGOW5aWFJmYzNSaGRIVnpYMk52WkdVQUVoSnNiR2gwZEhCZloyVjBYM1Z3WjNKaFpHVUFFd3hzYkdoMGRIQmZjbVZ6WlhRQUZBNXNiR2gwZEhCZlpYaGxZM1YwWlFBVkZHeHNhSFIwY0Y5elpYUjBhVzVuYzE5cGJtbDBBQllOYkd4b2RIUndYMlpwYm1semFBQVhER3hzYUhSMGNGOXdZWFZ6WlFBWURXeHNhSFIwY0Y5eVpYTjFiV1VBR1J0c2JHaDBkSEJmY21WemRXMWxYMkZtZEdWeVgzVndaM0poWkdVQUdoQnNiR2gwZEhCZloyVjBYMlZ5Y201dkFCc1hiR3hvZEhSd1gyZGxkRjlsY25KdmNsOXlaV0Z6YjI0QUhCZHNiR2gwZEhCZmMyVjBYMlZ5Y205eVgzSmxZWE52YmdBZEZHeHNhSFIwY0Y5blpYUmZaWEp5YjNKZmNHOXpBQjRSYkd4b2RIUndYMlZ5Y201dlgyNWhiV1VBSHhKc2JHaDBkSEJmYldWMGFHOWtYMjVoYldVQUlCSnNiR2gwZEhCZmMzUmhkSFZ6WDI1aGJXVUFJUnBzYkdoMGRIQmZjMlYwWDJ4bGJtbGxiblJmYUdWaFpHVnljd0FpSVd4c2FIUjBjRjl6WlhSZmJHVnVhV1Z1ZEY5amFIVnVhMlZrWDJ4bGJtZDBhQUFqSFd4c2FIUjBjRjl6WlhSZmJHVnVhV1Z1ZEY5clpXVndYMkZzYVhabEFDUWtiR3hvZEhSd1gzTmxkRjlzWlc1cFpXNTBYM1J5WVc1elptVnlYMlZ1WTI5a2FXNW5BQ1VZYkd4b2RIUndYMjFsYzNOaFoyVmZibVZsWkhOZlpXOW1BRDhKRndFQVFRRUxFUUVDQXdRRkN3WUhOVGszTVM4dEp5c3BDckxnQWtVQ0FBc0lBQkNJZ0lDQUFBc1pBQ0FBRU1LQWdJQUFHaUFBSUFJMkFqZ2dBQ0FCT2dBb0N4d0FJQUFnQUM4Qk1pQUFMUUF1SUFBUXdZQ0FnQUFRZ0lDQWdBQUxLZ0VCZjBIQUFCREdnSUNBQUNJQkVNS0FnSUFBR2lBQlFZQ0lnSUFBTmdJNElBRWdBRG9BS0NBQkN3b0FJQUFReUlDQWdBQUxCd0FnQUMwQUtBc0hBQ0FBTFFBcUN3Y0FJQUF0QUNzTEJ3QWdBQzBBS1FzSEFDQUFMd0V5Q3djQUlBQXRBQzRMUlFFRWZ5QUFLQUlZSVFFZ0FDMEFMU0VDSUFBdEFDZ2hBeUFBS0FJNElRUWdBQkRDZ0lDQUFCb2dBQ0FFTmdJNElBQWdBem9BS0NBQUlBSTZBQzBnQUNBQk5nSVlDeEVBSUFBZ0FTQUJJQUpxRU1PQWdJQUFDeEFBSUFCQkFFSGNBQkRNZ0lDQUFCb0xad0VCZjBFQUlRRUNRQ0FBS0FJTURRQUNRQUpBQWtBQ1FDQUFMUUF2RGdNQkFBTUNDeUFBS0FJNElnRkZEUUFnQVNnQ0xDSUJSUTBBSUFBZ0FSR0FnSUNBQUFBaUFRMERDMEVBRHdzUXlvQ0FnQUFBQ3lBQVFjT1dnSUFBTmdJUVFRNGhBUXNnQVFzZUFBSkFJQUFvQWd3TkFDQUFRZEdiZ0lBQU5nSVFJQUJCRlRZQ0RBc0xGZ0FDUUNBQUtBSU1RUlZIRFFBZ0FFRUFOZ0lNQ3dzV0FBSkFJQUFvQWd4QkZrY05BQ0FBUVFBMkFnd0xDd2NBSUFBb0Fnd0xCd0FnQUNnQ0VBc0pBQ0FBSUFFMkFoQUxCd0FnQUNnQ0ZBc2lBQUpBSUFCQkpFa05BQkRLZ0lDQUFBQUxJQUJCQW5SQm9MT0FnQUJxS0FJQUN5SUFBa0FnQUVFdVNRMEFFTXFBZ0lBQUFBc2dBRUVDZEVHd3RJQ0FBR29vQWdBTDdnc0JBWDlCNjZpQWdBQWhBUUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBSUFCQm5IOXFEdlFEWTJJQUFXRmhZV0ZoWVFJREJBVmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoQmdjSUNRb0xEQTBPRDJGaFlXRmhFR0ZoWVdGaFlXRmhZV0ZoRVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVJJVEZCVVdGeGdaR2h0aFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaEhCMGVIeUFoSWlNa0pTWW5LQ2txS3l3dExpOHdNVEl6TkRVMllUYzRPVHBoWVdGaFlXRmhZVHRoWVdFOFlXRmhZVDArUDJGaFlXRmhZV0ZoUUdGaFFXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZVUpEUkVWR1IwaEpTa3RNVFU1UFVGRlNVMkZoWVdGaFlXRmhWRlZXVjFoWldsdGhYRjFoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGZVlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFgyQmhDMEhocDRDQUFBOExRYVNoZ0lBQUR3dEJ5NnlBZ0FBUEMwSCtzWUNBQUE4TFFjQ2tnSUFBRHd0QnE2U0FnQUFQQzBHTnFJQ0FBQThMUWVLbWdJQUFEd3RCZ0xDQWdBQVBDMEc1cjRDQUFBOExRZGVrZ0lBQUR3dEI3NStBZ0FBUEMwSGhuNENBQUE4TFFmcWZnSUFBRHd0QjhxQ0FnQUFQQzBHb3I0Q0FBQThMUWE2eWdJQUFEd3RCaUxDQWdBQVBDMEhzcDRDQUFBOExRWUtpZ0lBQUR3dEJqcDJBZ0FBUEMwSFFyb0NBQUE4TFFjcWpnSUFBRHd0QnhiS0FnQUFQQzBIZm5JQ0FBQThMUWRLY2dJQUFEd3RCeEtDQWdBQVBDMEhYb0lDQUFBOExRYUtmZ0lBQUR3dEI3YTZBZ0FBUEMwR3JzSUNBQUE4TFFkU2xnSUFBRHd0QnpLNkFnQUFQQzBINnJvQ0FBQThMUWZ5cmdJQUFEd3RCMHJDQWdBQVBDMEh4bllDQUFBOExRYnVnZ0lBQUR3dEI5NnVBZ0FBUEMwR1FzWUNBQUE4TFFkZXhnSUFBRHd0Qm9xMkFnQUFQQzBIVXA0Q0FBQThMUWVDcmdJQUFEd3RCbjZ5QWdBQVBDMEhyc1lDQUFBOExRZFdmZ0lBQUR3dEJ5ckdBZ0FBUEMwSGVwWUNBQUE4TFFkU2VnSUFBRHd0QjlKeUFnQUFQQzBHbnNvQ0FBQThMUWJHZGdJQUFEd3RCb0oyQWdBQVBDMEc1c1lDQUFBOExRYnl3Z0lBQUR3dEJrcUdBZ0FBUEMwR3pwb0NBQUE4TFFlbXNnSUFBRHd0QnJKNkFnQUFQQzBIVXE0Q0FBQThMUWZlbWdJQUFEd3RCZ0thQWdBQVBDMEd3b1lDQUFBOExRZjZlZ0lBQUR3dEJqYU9BZ0FBUEMwR0pyWUNBQUE4TFFmZWlnSUFBRHd0Qm9MR0FnQUFQQzBHdW40Q0FBQThMUWNhbGdJQUFEd3RCNko2QWdBQVBDMEdUb29DQUFBOExRY0t2Z0lBQUR3dEJ3NTJBZ0FBUEMwR0xySUNBQUE4TFFlR2RnSUFBRHd0QmphK0FnQUFQQzBIcW9ZQ0FBQThMUWJTdGdJQUFEd3RCMHErQWdBQVBDMEhmc29DQUFBOExRZEt5Z0lBQUR3dEI4TENBZ0FBUEMwR3Bvb0NBQUE4TFFmbWpnSUFBRHd0Qm1aNkFnQUFQQzBHMXJJQ0FBQThMUVp1d2dJQUFEd3RCa3JLQWdBQVBDMEcycTRDQUFBOExRY0tpZ0lBQUR3dEIrTEtBZ0FBUEMwR2VwWUNBQUE4TFFkQ2lnSUFBRHd0QnVwNkFnQUFQQzBHQm5vQ0FBQThMRU1xQWdJQUFBQXRCMXFHQWdBQWhBUXNnQVFzV0FDQUFJQUF0QUMxQi9nRnhJQUZCQUVkeU9nQXRDeGtBSUFBZ0FDMEFMVUg5QVhFZ0FVRUFSMEVCZEhJNkFDMExHUUFnQUNBQUxRQXRRZnNCY1NBQlFRQkhRUUowY2pvQUxRc1pBQ0FBSUFBdEFDMUI5d0Z4SUFGQkFFZEJBM1J5T2dBdEN5NEJBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWdBaUJFVU5BQ0FBSUFRUmdJQ0FnQUFBSVFNTElBTUxTUUVDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ0JDSUVSUTBBSUFBZ0FTQUNJQUZySUFRUmdZQ0FnQUFBSWdOQmYwY05BQ0FBUWNhUmdJQUFOZ0lRUVJnaEF3c2dBd3N1QVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSXdJZ1JGRFFBZ0FDQUVFWUNBZ0lBQUFDRURDeUFEQzBrQkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9BZ2dpQkVVTkFDQUFJQUVnQWlBQmF5QUVFWUdBZ0lBQUFDSURRWDlIRFFBZ0FFSDJpb0NBQURZQ0VFRVlJUU1MSUFNTExnRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDTkNJRVJRMEFJQUFnQkJHQWdJQ0FBQUFoQXdzZ0F3dEpBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FJTUlnUkZEUUFnQUNBQklBSWdBV3NnQkJHQmdJQ0FBQUFpQTBGL1J3MEFJQUJCN1pxQWdBQTJBaEJCR0NFREN5QURDeTRCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FqZ2lCRVVOQUNBQUlBUVJnSUNBZ0FBQUlRTUxJQU1MU1FFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NFQ0lFUlEwQUlBQWdBU0FDSUFGcklBUVJnWUNBZ0FBQUlnTkJmMGNOQUNBQVFaV1FnSUFBTmdJUVFSZ2hBd3NnQXdzdUFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUk4SWdSRkRRQWdBQ0FFRVlDQWdJQUFBQ0VEQ3lBREMwa0JBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWhRaUJFVU5BQ0FBSUFFZ0FpQUJheUFFRVlHQWdJQUFBQ0lEUVg5SERRQWdBRUdxbTRDQUFEWUNFRUVZSVFNTElBTUxMZ0VDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ1FDSUVSUTBBSUFBZ0JCR0FnSUNBQUFBaEF3c2dBd3RKQVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSVlJZ1JGRFFBZ0FDQUJJQUlnQVdzZ0JCR0JnSUNBQUFBaUEwRi9SdzBBSUFCQjdaT0FnQUEyQWhCQkdDRURDeUFEQ3k0QkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9Ba1FpQkVVTkFDQUFJQVFSZ0lDQWdBQUFJUU1MSUFNTExnRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDSkNJRVJRMEFJQUFnQkJHQWdJQ0FBQUFoQXdzZ0F3c3VBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FJc0lnUkZEUUFnQUNBRUVZQ0FnSUFBQUNFREN5QURDMGtCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FpZ2lCRVVOQUNBQUlBRWdBaUFCYXlBRUVZR0FnSUFBQUNJRFFYOUhEUUFnQUVIMmlJQ0FBRFlDRUVFWUlRTUxJQU1MTGdFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NVQ0lFUlEwQUlBQWdCQkdBZ0lDQUFBQWhBd3NnQXd0SkFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUljSWdSRkRRQWdBQ0FCSUFJZ0FXc2dCQkdCZ0lDQUFBQWlBMEYvUncwQUlBQkJ3cG1BZ0FBMkFoQkJHQ0VEQ3lBREN5NEJBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWtnaUJFVU5BQ0FBSUFRUmdJQ0FnQUFBSVFNTElBTUxTUUVDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ0lDSUVSUTBBSUFBZ0FTQUNJQUZySUFRUmdZQ0FnQUFBSWdOQmYwY05BQ0FBUVpTVWdJQUFOZ0lRUVJnaEF3c2dBd3N1QVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSk1JZ1JGRFFBZ0FDQUVFWUNBZ0lBQUFDRURDeUFEQ3k0QkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9BbFFpQkVVTkFDQUFJQVFSZ0lDQWdBQUFJUU1MSUFNTExnRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDV0NJRVJRMEFJQUFnQkJHQWdJQ0FBQUFoQXdzZ0F3dEZBUUYvQWtBQ1FDQUFMd0V3UVJSeFFSUkhEUUJCQVNFRElBQXRBQ2hCQVVZTkFTQUFMd0V5UWVVQVJpRUREQUVMSUFBdEFDbEJCVVloQXdzZ0FDQURPZ0F1UVFBTC9nRUJBMzlCQVNFREFrQWdBQzhCTUNJRVFRaHhEUUFnQUNrRElFSUFVaUVEQ3dKQUFrQWdBQzBBTGtVTkFFRUJJUVVnQUMwQUtVRUZSZzBCUVFFaEJTQUVRY0FBY1VVZ0EzRkJBVWNOQVF0QkFDRUZJQVJCd0FCeERRQkJBaUVGSUFSQi8vOERjU0lEUVFoeERRQUNRQ0FEUVlBRWNVVU5BQUpBSUFBdEFDaEJBVWNOQUNBQUxRQXRRUXB4RFFCQkJROExRUVFQQ3dKQUlBTkJJSEVOQUFKQUlBQXRBQ2hCQVVZTkFDQUFMd0V5UWYvL0EzRWlBRUdjZjJwQjVBQkpEUUFnQUVITUFVWU5BQ0FBUWJBQ1JnMEFRUVFoQlNBRVFTaHhSUTBDSUFOQmlBUnhRWUFFUmcwQ0MwRUFEd3RCQUVFRElBQXBBeUJRR3lFRkN5QUZDMklCQW45QkFDRUJBa0FnQUMwQUtFRUJSZzBBSUFBdkFUSkIvLzhEY1NJQ1FaeC9ha0hrQUVrTkFDQUNRY3dCUmcwQUlBSkJzQUpHRFFBZ0FDOEJNQ0lBUWNBQWNRMEFRUUVoQVNBQVFZZ0VjVUdBQkVZTkFDQUFRU2h4UlNFQkN5QUJDNmNCQVFOL0FrQUNRQUpBSUFBdEFDcEZEUUFnQUMwQUswVU5BRUVBSVFNZ0FDOEJNQ0lFUVFKeFJRMEJEQUlMUVFBaEF5QUFMd0V3SWdSQkFYRkZEUUVMUVFFaEF5QUFMUUFvUVFGR0RRQWdBQzhCTWtILy93TnhJZ1ZCbkg5cVFlUUFTUTBBSUFWQnpBRkdEUUFnQlVHd0FrWU5BQ0FFUWNBQWNRMEFRUUFoQXlBRVFZZ0VjVUdBQkVZTkFDQUVRU2h4UVFCSElRTUxJQUJCQURzQk1DQUFRUUE2QUM4Z0F3dVpBUUVDZndKQUFrQUNRQ0FBTFFBcVJRMEFJQUF0QUN0RkRRQkJBQ0VCSUFBdkFUQWlBa0VDY1VVTkFRd0NDMEVBSVFFZ0FDOEJNQ0lDUVFGeFJRMEJDMEVCSVFFZ0FDMEFLRUVCUmcwQUlBQXZBVEpCLy84RGNTSUFRWngvYWtIa0FFa05BQ0FBUWN3QlJnMEFJQUJCc0FKR0RRQWdBa0hBQUhFTkFFRUFJUUVnQWtHSUJIRkJnQVJHRFFBZ0FrRW9jVUVBUnlFQkN5QUJDMGtCQVhzZ0FFRVFhdjBNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ0lCL1FzREFDQUFJQUg5Q3dNQUlBQkJNR29nQWYwTEF3QWdBRUVnYWlBQi9Rc0RBQ0FBUWQwQk5nSWNRUUFMZXdFQmZ3SkFJQUFvQWd3aUF3MEFBa0FnQUNnQ0JFVU5BQ0FBSUFFMkFnUUxBa0FnQUNBQklBSVF4SUNBZ0FBaUF3MEFJQUFvQWd3UEN5QUFJQU0yQWh4QkFDRURJQUFvQWdRaUFVVU5BQ0FBSUFFZ0FpQUFLQUlJRVlHQWdJQUFBQ0lCUlEwQUlBQWdBallDRkNBQUlBRTJBZ3dnQVNFREN5QURDK1R6QVFNT2Z3TitCSDhqZ0lDQWdBQkJFR3NpQXlTQWdJQ0FBQ0FCSVFRZ0FTRUZJQUVoQmlBQklRY2dBU0VJSUFFaENTQUJJUW9nQVNFTElBRWhEQ0FCSVEwZ0FTRU9JQUVoRHdKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUNBQUtBSWNJaEJCZjJvTzNRSGFBUUhaQVFJREJBVUdCd2dKQ2dzTURRN1lBUThRMXdFUkV0WUJFeFFWRmhjWUdSb2I0QUhmQVJ3ZEh0VUJIeUFoSWlNa0pkUUJKaWNvS1NvckxOTUIwZ0V0THRFQjBBRXZNREV5TXpRMU5qYzRPVG83UEQwK1AwQkJRa05FUlViYkFVZElTVXJQQWM0QlM4MEJUTXdCVFU1UFVGRlNVMVJWVmxkWVdWcGJYRjFlWDJCaFltTmtaV1puYUdscWEyeHRibTl3Y1hKemRIVjJkM2g1ZW50OGZYNS9nQUdCQVlJQmd3R0VBWVVCaGdHSEFZZ0JpUUdLQVlzQmpBR05BWTRCandHUUFaRUJrZ0dUQVpRQmxRR1dBWmNCbUFHWkFab0Jtd0djQVowQm5nR2ZBYUFCb1FHaUFhTUJwQUdsQWFZQnB3R29BYWtCcWdHckFhd0JyUUd1QWE4QnNBR3hBYklCc3dHMEFiVUJ0Z0czQWNzQnlnRzRBY2tCdVFISUFib0J1d0c4QWIwQnZnRy9BY0FCd1FIQ0FjTUJ4QUhGQWNZQkFOd0JDMEVBSVJBTXhnRUxRUTRoRUF6RkFRdEJEU0VRRE1RQkMwRVBJUkFNd3dFTFFSQWhFQXpDQVF0QkV5RVFETUVCQzBFVUlSQU13QUVMUVJVaEVBeS9BUXRCRmlFUURMNEJDMEVYSVJBTXZRRUxRUmdoRUF5OEFRdEJHU0VRRExzQkMwRWFJUkFNdWdFTFFSc2hFQXk1QVF0QkhDRVFETGdCQzBFSUlSQU10d0VMUVIwaEVBeTJBUXRCSUNFUURMVUJDMEVmSVJBTXRBRUxRUWNoRUF5ekFRdEJJU0VRRExJQkMwRWlJUkFNc1FFTFFSNGhFQXl3QVF0Qkl5RVFESzhCQzBFU0lSQU1yZ0VMUVJFaEVBeXRBUXRCSkNFUURLd0JDMEVsSVJBTXF3RUxRU1loRUF5cUFRdEJKeUVRREtrQkMwSERBU0VRREtnQkMwRXBJUkFNcHdFTFFTc2hFQXltQVF0QkxDRVFES1VCQzBFdElSQU1wQUVMUVM0aEVBeWpBUXRCTHlFUURLSUJDMEhFQVNFUURLRUJDMEV3SVJBTW9BRUxRVFFoRUF5ZkFRdEJEQ0VRREo0QkMwRXhJUkFNblFFTFFUSWhFQXljQVF0Qk15RVFESnNCQzBFNUlSQU1tZ0VMUVRVaEVBeVpBUXRCeFFFaEVBeVlBUXRCQ3lFUURKY0JDMEU2SVJBTWxnRUxRVFloRUF5VkFRdEJDaUVRREpRQkMwRTNJUkFNa3dFTFFUZ2hFQXlTQVF0QlBDRVFESkVCQzBFN0lSQU1rQUVMUVQwaEVBeVBBUXRCQ1NFUURJNEJDMEVvSVJBTWpRRUxRVDRoRUF5TUFRdEJQeUVRRElzQkMwSEFBQ0VRRElvQkMwSEJBQ0VRRElrQkMwSENBQ0VRRElnQkMwSERBQ0VRREljQkMwSEVBQ0VRRElZQkMwSEZBQ0VRRElVQkMwSEdBQ0VRRElRQkMwRXFJUkFNZ3dFTFFjY0FJUkFNZ2dFTFFjZ0FJUkFNZ1FFTFFja0FJUkFNZ0FFTFFjb0FJUkFNZnd0Qnl3QWhFQXgrQzBITkFDRVFESDBMUWN3QUlSQU1mQXRCemdBaEVBeDdDMEhQQUNFUURIb0xRZEFBSVJBTWVRdEIwUUFoRUF4NEMwSFNBQ0VRREhjTFFkTUFJUkFNZGd0QjFBQWhFQXgxQzBIV0FDRVFESFFMUWRVQUlSQU1jd3RCQmlFUURISUxRZGNBSVJBTWNRdEJCU0VRREhBTFFkZ0FJUkFNYnd0QkJDRVFERzRMUWRrQUlSQU1iUXRCMmdBaEVBeHNDMEhiQUNFUURHc0xRZHdBSVJBTWFndEJBeUVRREdrTFFkMEFJUkFNYUF0QjNnQWhFQXhuQzBIZkFDRVFER1lMUWVFQUlSQU1aUXRCNEFBaEVBeGtDMEhpQUNFUURHTUxRZU1BSVJBTVlndEJBaUVRREdFTFFlUUFJUkFNWUF0QjVRQWhFQXhmQzBIbUFDRVFERjRMUWVjQUlSQU1YUXRCNkFBaEVBeGNDMEhwQUNFUURGc0xRZW9BSVJBTVdndEI2d0FoRUF4WkMwSHNBQ0VRREZnTFFlMEFJUkFNVnd0QjdnQWhFQXhXQzBIdkFDRVFERlVMUWZBQUlSQU1WQXRCOFFBaEVBeFRDMEh5QUNFUURGSUxRZk1BSVJBTVVRdEI5QUFoRUF4UUMwSDFBQ0VRREU4TFFmWUFJUkFNVGd0Qjl3QWhFQXhOQzBINEFDRVFERXdMUWZrQUlSQU1Td3RCK2dBaEVBeEtDMEg3QUNFUURFa0xRZndBSVJBTVNBdEIvUUFoRUF4SEMwSCtBQ0VRREVZTFFmOEFJUkFNUlF0QmdBRWhFQXhFQzBHQkFTRVFERU1MUVlJQklSQU1RZ3RCZ3dFaEVBeEJDMEdFQVNFUURFQUxRWVVCSVJBTVB3dEJoZ0VoRUF3K0MwR0hBU0VRREQwTFFZZ0JJUkFNUEF0QmlRRWhFQXc3QzBHS0FTRVFERG9MUVlzQklSQU1PUXRCakFFaEVBdzRDMEdOQVNFUUREY0xRWTRCSVJBTU5ndEJqd0VoRUF3MUMwR1FBU0VRRERRTFFaRUJJUkFNTXd0QmtnRWhFQXd5QzBHVEFTRVFEREVMUVpRQklSQU1NQXRCbFFFaEVBd3ZDMEdXQVNFUURDNExRWmNCSVJBTUxRdEJtQUVoRUF3c0MwR1pBU0VRRENzTFFab0JJUkFNS2d0Qm13RWhFQXdwQzBHY0FTRVFEQ2dMUVowQklSQU1Kd3RCbmdFaEVBd21DMEdmQVNFUURDVUxRYUFCSVJBTUpBdEJvUUVoRUF3akMwR2lBU0VRRENJTFFhTUJJUkFNSVF0QnBBRWhFQXdnQzBHbEFTRVFEQjhMUWFZQklSQU1IZ3RCcHdFaEVBd2RDMEdvQVNFUURCd0xRYWtCSVJBTUd3dEJxZ0VoRUF3YUMwR3JBU0VRREJrTFFhd0JJUkFNR0F0QnJRRWhFQXdYQzBHdUFTRVFEQllMUVFFaEVBd1ZDMEd2QVNFUURCUUxRYkFCSVJBTUV3dEJzUUVoRUF3U0MwR3pBU0VRREJFTFFiSUJJUkFNRUF0QnRBRWhFQXdQQzBHMUFTRVFEQTRMUWJZQklSQU1EUXRCdHdFaEVBd01DMEc0QVNFUURBc0xRYmtCSVJBTUNndEJ1Z0VoRUF3SkMwRzdBU0VRREFnTFFjWUJJUkFNQnd0QnZBRWhFQXdHQzBHOUFTRVFEQVVMUWI0QklSQU1CQXRCdndFaEVBd0RDMEhBQVNFUURBSUxRY0lCSVJBTUFRdEJ3UUVoRUFzRFFBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQkFPeHdFQUFRSURCQVVHQndnSkNnc01EUTRQRUJFU0V4UVZGaGNZR1JvYkhCNGZJQ0VqSlNnL1FFRkVSVVpIU0VsS1MweE5UMUJSVWxQZUExZFpXMXhkWUdKbFptZG9hV3ByYkcxdmNIRnljM1IxZG5kNGVYcDdmSDErZ0FHQ0FZVUJoZ0dIQVlrQml3R01BWTBCamdHUEFaQUJrUUdVQVpVQmxnR1hBWmdCbVFHYUFac0JuQUdkQVo0Qm53R2dBYUVCb2dHakFhUUJwUUdtQWFjQnFBR3BBYW9CcXdHc0FhMEJyZ0d2QWJBQnNRR3lBYk1CdEFHMUFiWUJ0d0c0QWJrQnVnRzdBYndCdlFHK0FiOEJ3QUhCQWNJQnd3SEVBY1VCeGdISEFjZ0J5UUhLQWNzQnpBSE5BYzRCendIUUFkRUIwZ0hUQWRRQjFRSFdBZGNCMkFIWkFkb0Iyd0hjQWQwQjNnSGdBZUVCNGdIakFlUUI1UUhtQWVjQjZBSHBBZW9CNndIc0FlMEI3Z0h2QWZBQjhRSHlBZk1CbVFLa0FyQUMvZ0wrQWdzZ0FTSUVJQUpIRGZNQlFkMEJJUkFNL3dNTElBRWlFQ0FDUnczZEFVSERBU0VRRFA0REN5QUJJZ0VnQWtjTmtBRkI5d0FoRUF6OUF3c2dBU0lCSUFKSERZWUJRZThBSVJBTS9BTUxJQUVpQVNBQ1J3MS9RZW9BSVJBTSt3TUxJQUVpQVNBQ1J3MTdRZWdBSVJBTStnTUxJQUVpQVNBQ1J3MTRRZVlBSVJBTStRTUxJQUVpQVNBQ1J3MGFRUmdoRUF6NEF3c2dBU0lCSUFKSERSUkJFaUVRRFBjREN5QUJJZ0VnQWtjTldVSEZBQ0VRRFBZREN5QUJJZ0VnQWtjTlNrRS9JUkFNOVFNTElBRWlBU0FDUncxSVFUd2hFQXowQXdzZ0FTSUJJQUpIRFVGQk1TRVFEUE1EQ3lBQUxRQXVRUUZHRGVzRERJY0NDeUFBSUFFaUFTQUNFTUNBZ0lBQVFRRkhEZVlCSUFCQ0FEY0RJQXpuQVFzZ0FDQUJJZ0VnQWhDMGdJQ0FBQ0lRRGVjQklBRWhBUXoxQWdzQ1FDQUJJZ0VnQWtjTkFFRUdJUkFNOEFNTElBQWdBVUVCYWlJQklBSVF1NENBZ0FBaUVBM29BU0FCSVFFTU1Rc2dBRUlBTndNZ1FSSWhFQXpWQXdzZ0FTSVFJQUpIRFN0QkhTRVFETzBEQ3dKQUlBRWlBU0FDUmcwQUlBRkJBV29oQVVFUUlSQU0xQU1MUVFjaEVBenNBd3NnQUVJQUlBQXBBeUFpRVNBQ0lBRWlFR3V0SWhKOUloTWdFeUFSVmhzM0F5QWdFU0FTVmlJVVJRM2xBVUVJSVJBTTZ3TUxBa0FnQVNJQklBSkdEUUFnQUVHSmdJQ0FBRFlDQ0NBQUlBRTJBZ1FnQVNFQlFSUWhFQXpTQXd0QkNTRVFET29EQ3lBQklRRWdBQ2tESUZBTjVBRWdBU0VCRFBJQ0N3SkFJQUVpQVNBQ1J3MEFRUXNoRUF6cEF3c2dBQ0FCUVFGcUlnRWdBaEMyZ0lDQUFDSVFEZVVCSUFFaEFRenlBZ3NnQUNBQklnRWdBaEM0Z0lDQUFDSVFEZVVCSUFFaEFRenlBZ3NnQUNBQklnRWdBaEM0Z0lDQUFDSVFEZVlCSUFFaEFRd05DeUFBSUFFaUFTQUNFTHFBZ0lBQUloQU41d0VnQVNFQkRQQUNDd0pBSUFFaUFTQUNSdzBBUVE4aEVBemxBd3NnQVMwQUFDSVFRVHRHRFFnZ0VFRU5SdzNvQVNBQlFRRnFJUUVNN3dJTElBQWdBU0lCSUFJUXVvQ0FnQUFpRUEzb0FTQUJJUUVNOGdJTEEwQUNRQ0FCTFFBQVFmQzFnSUFBYWkwQUFDSVFRUUZHRFFBZ0VFRUNSdzNyQVNBQUtBSUVJUkFnQUVFQU5nSUVJQUFnRUNBQlFRRnFJZ0VRdVlDQWdBQWlFQTNxQVNBQklRRU05QUlMSUFGQkFXb2lBU0FDUncwQUMwRVNJUkFNNGdNTElBQWdBU0lCSUFJUXVvQ0FnQUFpRUEzcEFTQUJJUUVNQ2dzZ0FTSUJJQUpIRFFaQkd5RVFET0FEQ3dKQUlBRWlBU0FDUncwQVFSWWhFQXpnQXdzZ0FFR0tnSUNBQURZQ0NDQUFJQUUyQWdRZ0FDQUJJQUlRdUlDQWdBQWlFQTNxQVNBQklRRkJJQ0VRRE1ZREN3SkFJQUVpQVNBQ1JnMEFBMEFDUUNBQkxRQUFRZkMzZ0lBQWFpMEFBQ0lRUVFKR0RRQUNRQ0FRUVg5cURnVGxBZXdCQU9zQjdBRUxJQUZCQVdvaEFVRUlJUkFNeUFNTElBRkJBV29pQVNBQ1J3MEFDMEVWSVJBTTN3TUxRUlVoRUF6ZUF3c0RRQUpBSUFFdEFBQkI4TG1BZ0FCcUxRQUFJaEJCQWtZTkFDQVFRWDlxRGdUZUFld0I0QUhyQWV3QkN5QUJRUUZxSWdFZ0FrY05BQXRCR0NFUUROMERDd0pBSUFFaUFTQUNSZzBBSUFCQmk0Q0FnQUEyQWdnZ0FDQUJOZ0lFSUFFaEFVRUhJUkFNeEFNTFFSa2hFQXpjQXdzZ0FVRUJhaUVCREFJTEFrQWdBU0lVSUFKSERRQkJHaUVRRE5zREN5QVVJUUVDUUNBVUxRQUFRWE5xRGhUZEF1NEM3Z0x1QXU0QzdnTHVBdTRDN2dMdUF1NEM3Z0x1QXU0QzdnTHVBdTRDN2dMdUFnRHVBZ3RCQUNFUUlBQkJBRFlDSENBQVFhK0xnSUFBTmdJUUlBQkJBallDRENBQUlCUkJBV28yQWhRTTJnTUxBa0FnQVMwQUFDSVFRVHRHRFFBZ0VFRU5SdzNvQVNBQlFRRnFJUUVNNVFJTElBRkJBV29oQVF0QklpRVFETDhEQ3dKQUlBRWlFQ0FDUncwQVFSd2hFQXpZQXd0Q0FDRVJJQkFoQVNBUUxRQUFRVkJxRGpmbkFlWUJBUUlEQkFVR0J3Z0FBQUFBQUFBQUNRb0xEQTBPQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFQRUJFU0V4UUFDMEVlSVJBTXZRTUxRZ0loRVF6bEFRdENBeUVSRE9RQkMwSUVJUkVNNHdFTFFnVWhFUXppQVF0Q0JpRVJET0VCQzBJSElSRU00QUVMUWdnaEVRemZBUXRDQ1NFUkRONEJDMElLSVJFTTNRRUxRZ3NoRVF6Y0FRdENEQ0VSRE5zQkMwSU5JUkVNMmdFTFFnNGhFUXpaQVF0Q0R5RVJETmdCQzBJS0lSRU0xd0VMUWdzaEVReldBUXRDRENFUkROVUJDMElOSVJFTTFBRUxRZzRoRVF6VEFRdENEeUVSRE5JQkMwSUFJUkVDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUlCQXRBQUJCVUdvT04rVUI1QUVBQVFJREJBVUdCK1lCNWdIbUFlWUI1Z0htQWVZQkNBa0tDd3dONWdIbUFlWUI1Z0htQWVZQjVnSG1BZVlCNWdIbUFlWUI1Z0htQWVZQjVnSG1BZVlCNWdIbUFlWUI1Z0htQWVZQjVnSG1BUTRQRUJFU0UrWUJDMElDSVJFTTVBRUxRZ01oRVF6akFRdENCQ0VSRE9JQkMwSUZJUkVNNFFFTFFnWWhFUXpnQVF0Q0J5RVJETjhCQzBJSUlSRU0zZ0VMUWdraEVRemRBUXRDQ2lFUkROd0JDMElMSVJFTTJ3RUxRZ3doRVF6YUFRdENEU0VSRE5rQkMwSU9JUkVNMkFFTFFnOGhFUXpYQVF0Q0NpRVJETllCQzBJTElSRU0xUUVMUWd3aEVRelVBUXRDRFNFUkROTUJDMElPSVJFTTBnRUxRZzhoRVF6UkFRc2dBRUlBSUFBcEF5QWlFU0FDSUFFaUVHdXRJaEo5SWhNZ0V5QVJWaHMzQXlBZ0VTQVNWaUlVUlEzU0FVRWZJUkFNd0FNTEFrQWdBU0lCSUFKR0RRQWdBRUdKZ0lDQUFEWUNDQ0FBSUFFMkFnUWdBU0VCUVNRaEVBeW5Bd3RCSUNFUURMOERDeUFBSUFFaUVDQUNFTDZBZ0lBQVFYOXFEZ1cyQVFERkFnSFJBZElCQzBFUklSQU1wQU1MSUFCQkFUb0FMeUFRSVFFTXV3TUxJQUVpQVNBQ1J3M1NBVUVrSVJBTXV3TUxJQUVpRFNBQ1J3MGVRY1lBSVJBTXVnTUxJQUFnQVNJQklBSVFzb0NBZ0FBaUVBM1VBU0FCSVFFTXRRRUxJQUVpRUNBQ1J3MG1RZEFBSVJBTXVBTUxBa0FnQVNJQklBSkhEUUJCS0NFUURMZ0RDeUFBUVFBMkFnUWdBRUdNZ0lDQUFEWUNDQ0FBSUFFZ0FSQ3hnSUNBQUNJUURkTUJJQUVoQVF6WUFRc0NRQ0FCSWhBZ0FrY05BRUVwSVJBTXR3TUxJQkF0QUFBaUFVRWdSZzBVSUFGQkNVY04wd0VnRUVFQmFpRUJEQlVMQWtBZ0FTSUJJQUpHRFFBZ0FVRUJhaUVCREJjTFFTb2hFQXkxQXdzQ1FDQUJJaEFnQWtjTkFFRXJJUkFNdFFNTEFrQWdFQzBBQUNJQlFRbEdEUUFnQVVFZ1J3M1ZBUXNnQUMwQUxFRUlSZzNUQVNBUUlRRU1rUU1MQWtBZ0FTSUJJQUpIRFFCQkxDRVFETFFEQ3lBQkxRQUFRUXBIRGRVQklBRkJBV29oQVF6SkFnc2dBU0lPSUFKSERkVUJRUzhoRUF5eUF3c0RRQUpBSUFFdEFBQWlFRUVnUmcwQUFrQWdFRUYyYWc0RUFOd0IzQUVBMmdFTElBRWhBUXpnQVFzZ0FVRUJhaUlCSUFKSERRQUxRVEVoRUF5eEF3dEJNaUVRSUFFaUZDQUNSZzJ3QXlBQ0lCUnJJQUFvQWdBaUFXb2hGU0FVSUFGclFRTnFJUllDUUFOQUlCUXRBQUFpRjBFZ2NpQVhJQmRCdjM5cVFmOEJjVUVhU1J0Qi93RnhJQUZCOEx1QWdBQnFMUUFBUncwQkFrQWdBVUVEUncwQVFRWWhBUXlXQXdzZ0FVRUJhaUVCSUJSQkFXb2lGQ0FDUncwQUN5QUFJQlUyQWdBTXNRTUxJQUJCQURZQ0FDQVVJUUVNMlFFTFFUTWhFQ0FCSWhRZ0FrWU5yd01nQWlBVWF5QUFLQUlBSWdGcUlSVWdGQ0FCYTBFSWFpRVdBa0FEUUNBVUxRQUFJaGRCSUhJZ0Z5QVhRYjkvYWtIL0FYRkJHa2tiUWY4QmNTQUJRZlM3Z0lBQWFpMEFBRWNOQVFKQUlBRkJDRWNOQUVFRklRRU1sUU1MSUFGQkFXb2hBU0FVUVFGcUloUWdBa2NOQUFzZ0FDQVZOZ0lBRExBREN5QUFRUUEyQWdBZ0ZDRUJETmdCQzBFMElSQWdBU0lVSUFKR0RhNERJQUlnRkdzZ0FDZ0NBQ0lCYWlFVklCUWdBV3RCQldvaEZnSkFBMEFnRkMwQUFDSVhRU0J5SUJjZ0YwRy9mMnBCL3dGeFFScEpHMEgvQVhFZ0FVSFF3b0NBQUdvdEFBQkhEUUVDUUNBQlFRVkhEUUJCQnlFQkRKUURDeUFCUVFGcUlRRWdGRUVCYWlJVUlBSkhEUUFMSUFBZ0ZUWUNBQXl2QXdzZ0FFRUFOZ0lBSUJRaEFRelhBUXNDUUNBQklnRWdBa1lOQUFOQUFrQWdBUzBBQUVHQXZvQ0FBR290QUFBaUVFRUJSZzBBSUJCQkFrWU5DaUFCSVFFTTNRRUxJQUZCQVdvaUFTQUNSdzBBQzBFd0lSQU1yZ01MUVRBaEVBeXRBd3NDUUNBQklnRWdBa1lOQUFOQUFrQWdBUzBBQUNJUVFTQkdEUUFnRUVGMmFnNEUyUUhhQWRvQjJRSGFBUXNnQVVFQmFpSUJJQUpIRFFBTFFUZ2hFQXl0QXd0Qk9DRVFES3dEQ3dOQUFrQWdBUzBBQUNJUVFTQkdEUUFnRUVFSlJ3MERDeUFCUVFGcUlnRWdBa2NOQUF0QlBDRVFES3NEQ3dOQUFrQWdBUzBBQUNJUVFTQkdEUUFDUUFKQUlCQkJkbW9PQk5vQkFRSGFBUUFMSUJCQkxFWU4yd0VMSUFFaEFRd0VDeUFCUVFGcUlnRWdBa2NOQUF0QlB5RVFES29EQ3lBQklRRU0yd0VMUWNBQUlSQWdBU0lVSUFKR0RhZ0RJQUlnRkdzZ0FDZ0NBQ0lCYWlFV0lCUWdBV3RCQm1vaEZ3SkFBMEFnRkMwQUFFRWdjaUFCUVlEQWdJQUFhaTBBQUVjTkFTQUJRUVpHRFk0RElBRkJBV29oQVNBVVFRRnFJaFFnQWtjTkFBc2dBQ0FXTmdJQURLa0RDeUFBUVFBMkFnQWdGQ0VCQzBFMklSQU1qZ01MQWtBZ0FTSVBJQUpIRFFCQndRQWhFQXluQXdzZ0FFR01nSUNBQURZQ0NDQUFJQTgyQWdRZ0R5RUJJQUF0QUN4QmYyb09CTTBCMVFIWEFka0Jod01MSUFGQkFXb2hBUXpNQVFzQ1FDQUJJZ0VnQWtZTkFBTkFBa0FnQVMwQUFDSVFRU0J5SUJBZ0VFRy9mMnBCL3dGeFFScEpHMEgvQVhFaUVFRUpSZzBBSUJCQklFWU5BQUpBQWtBQ1FBSkFJQkJCblg5cURoTUFBd01EQXdNREF3RURBd01EQXdNREF3TUNBd3NnQVVFQmFpRUJRVEVoRUF5UkF3c2dBVUVCYWlFQlFUSWhFQXlRQXdzZ0FVRUJhaUVCUVRNaEVBeVBBd3NnQVNFQkROQUJDeUFCUVFGcUlnRWdBa2NOQUF0Qk5TRVFES1VEQzBFMUlSQU1wQU1MQWtBZ0FTSUJJQUpHRFFBRFFBSkFJQUV0QUFCQmdMeUFnQUJxTFFBQVFRRkdEUUFnQVNFQkROTUJDeUFCUVFGcUlnRWdBa2NOQUF0QlBTRVFES1FEQzBFOUlSQU1vd01MSUFBZ0FTSUJJQUlRc0lDQWdBQWlFQTNXQVNBQklRRU1BUXNnRUVFQmFpRUJDMEU4SVJBTWh3TUxBa0FnQVNJQklBSkhEUUJCd2dBaEVBeWdBd3NDUUFOQUFrQWdBUzBBQUVGM2FnNFlBQUwrQXY0Q2hBUCtBdjRDL2dMK0F2NEMvZ0wrQXY0Qy9nTCtBdjRDL2dMK0F2NEMvZ0wrQXY0Qy9nSUEvZ0lMSUFGQkFXb2lBU0FDUncwQUMwSENBQ0VRREtBREN5QUJRUUZxSVFFZ0FDMEFMVUVCY1VVTnZRRWdBU0VCQzBFc0lSQU1oUU1MSUFFaUFTQUNSdzNUQVVIRUFDRVFESjBEQ3dOQUFrQWdBUzBBQUVHUXdJQ0FBR290QUFCQkFVWU5BQ0FCSVFFTXR3SUxJQUZCQVdvaUFTQUNSdzBBQzBIRkFDRVFESndEQ3lBTkxRQUFJaEJCSUVZTnN3RWdFRUU2UncyQkF5QUFLQUlFSVFFZ0FFRUFOZ0lFSUFBZ0FTQU5FSytBZ0lBQUlnRU4wQUVnRFVFQmFpRUJETE1DQzBISEFDRVFJQUVpRFNBQ1JnMmFBeUFDSUExcklBQW9BZ0FpQVdvaEZpQU5JQUZyUVFWcUlSY0RRQ0FOTFFBQUloUkJJSElnRkNBVVFiOS9ha0gvQVhGQkdra2JRZjhCY1NBQlFaRENnSUFBYWkwQUFFY05nQU1nQVVFRlJnMzBBaUFCUVFGcUlRRWdEVUVCYWlJTklBSkhEUUFMSUFBZ0ZqWUNBQXlhQXd0QnlBQWhFQ0FCSWcwZ0FrWU5tUU1nQWlBTmF5QUFLQUlBSWdGcUlSWWdEU0FCYTBFSmFpRVhBMEFnRFMwQUFDSVVRU0J5SUJRZ0ZFRy9mMnBCL3dGeFFScEpHMEgvQVhFZ0FVR1d3b0NBQUdvdEFBQkhEZjhDQWtBZ0FVRUpSdzBBUVFJaEFRejFBZ3NnQVVFQmFpRUJJQTFCQVdvaURTQUNSdzBBQ3lBQUlCWTJBZ0FNbVFNTEFrQWdBU0lOSUFKSERRQkJ5UUFoRUF5WkF3c0NRQUpBSUEwdEFBQWlBVUVnY2lBQklBRkJ2MzlxUWY4QmNVRWFTUnRCL3dGeFFaSi9hZzRIQUlBRGdBT0FBNEFEZ0FNQmdBTUxJQTFCQVdvaEFVRStJUkFNZ0FNTElBMUJBV29oQVVFL0lSQU0vd0lMUWNvQUlSQWdBU0lOSUFKR0RaY0RJQUlnRFdzZ0FDZ0NBQ0lCYWlFV0lBMGdBV3RCQVdvaEZ3TkFJQTB0QUFBaUZFRWdjaUFVSUJSQnYzOXFRZjhCY1VFYVNSdEIvd0Z4SUFGQm9NS0FnQUJxTFFBQVJ3MzlBaUFCUVFGR0RmQUNJQUZCQVdvaEFTQU5RUUZxSWcwZ0FrY05BQXNnQUNBV05nSUFESmNEQzBITEFDRVFJQUVpRFNBQ1JnMldBeUFDSUExcklBQW9BZ0FpQVdvaEZpQU5JQUZyUVE1cUlSY0RRQ0FOTFFBQUloUkJJSElnRkNBVVFiOS9ha0gvQVhGQkdra2JRZjhCY1NBQlFhTENnSUFBYWkwQUFFY04vQUlnQVVFT1JnM3dBaUFCUVFGcUlRRWdEVUVCYWlJTklBSkhEUUFMSUFBZ0ZqWUNBQXlXQXd0QnpBQWhFQ0FCSWcwZ0FrWU5sUU1nQWlBTmF5QUFLQUlBSWdGcUlSWWdEU0FCYTBFUGFpRVhBMEFnRFMwQUFDSVVRU0J5SUJRZ0ZFRy9mMnBCL3dGeFFScEpHMEgvQVhFZ0FVSEF3b0NBQUdvdEFBQkhEZnNDQWtBZ0FVRVBSdzBBUVFNaEFRenhBZ3NnQVVFQmFpRUJJQTFCQVdvaURTQUNSdzBBQ3lBQUlCWTJBZ0FNbFFNTFFjMEFJUkFnQVNJTklBSkdEWlFESUFJZ0RXc2dBQ2dDQUNJQmFpRVdJQTBnQVd0QkJXb2hGd05BSUEwdEFBQWlGRUVnY2lBVUlCUkJ2MzlxUWY4QmNVRWFTUnRCL3dGeElBRkIwTUtBZ0FCcUxRQUFSdzM2QWdKQUlBRkJCVWNOQUVFRUlRRU04QUlMSUFGQkFXb2hBU0FOUVFGcUlnMGdBa2NOQUFzZ0FDQVdOZ0lBREpRREN3SkFJQUVpRFNBQ1J3MEFRYzRBSVJBTWxBTUxBa0FDUUFKQUFrQWdEUzBBQUNJQlFTQnlJQUVnQVVHL2YycEIvd0Z4UVJwSkcwSC9BWEZCblg5cURoTUEvUUw5QXYwQy9RTDlBdjBDL1FMOUF2MEMvUUw5QXYwQ0FmMEMvUUw5QWdJRC9RSUxJQTFCQVdvaEFVSEJBQ0VRRFAwQ0N5QU5RUUZxSVFGQndnQWhFQXo4QWdzZ0RVRUJhaUVCUWNNQUlSQU0rd0lMSUExQkFXb2hBVUhFQUNFUURQb0NDd0pBSUFFaUFTQUNSZzBBSUFCQmpZQ0FnQUEyQWdnZ0FDQUJOZ0lFSUFFaEFVSEZBQ0VRRFBvQ0MwSFBBQ0VRREpJREN5QVFJUUVDUUFKQUlCQXRBQUJCZG1vT0JBR29BcWdDQUtnQ0N5QVFRUUZxSVFFTFFTY2hFQXo0QWdzQ1FDQUJJZ0VnQWtjTkFFSFJBQ0VRREpFREN3SkFJQUV0QUFCQklFWU5BQ0FCSVFFTWpRRUxJQUZCQVdvaEFTQUFMUUF0UVFGeFJRM0hBU0FCSVFFTWpBRUxJQUVpRnlBQ1J3M0lBVUhTQUNFUURJOERDMEhUQUNFUUlBRWlGQ0FDUmcyT0F5QUNJQlJySUFBb0FnQWlBV29oRmlBVUlBRnJRUUZxSVJjRFFDQVVMUUFBSUFGQjFzS0FnQUJxTFFBQVJ3M01BU0FCUVFGR0RjY0JJQUZCQVdvaEFTQVVRUUZxSWhRZ0FrY05BQXNnQUNBV05nSUFESTREQ3dKQUlBRWlBU0FDUncwQVFkVUFJUkFNamdNTElBRXRBQUJCQ2tjTnpBRWdBVUVCYWlFQkRNY0JDd0pBSUFFaUFTQUNSdzBBUWRZQUlSQU1qUU1MQWtBQ1FDQUJMUUFBUVhacURnUUF6UUhOQVFITkFRc2dBVUVCYWlFQkRNY0JDeUFCUVFGcUlRRkJ5Z0FoRUF6ekFnc2dBQ0FCSWdFZ0FoQ3VnSUNBQUNJUURjc0JJQUVoQVVITkFDRVFEUElDQ3lBQUxRQXBRU0pHRFlVRERLWUNDd0pBSUFFaUFTQUNSdzBBUWRzQUlSQU1pZ01MUVFBaEZFRUJJUmRCQVNFV1FRQWhFQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQ0FCTFFBQVFWQnFEZ3JVQWRNQkFBRUNBd1FGQmdqVkFRdEJBaUVRREFZTFFRTWhFQXdGQzBFRUlSQU1CQXRCQlNFUURBTUxRUVloRUF3Q0MwRUhJUkFNQVF0QkNDRVFDMEVBSVJkQkFDRVdRUUFoRkF6TUFRdEJDU0VRUVFFaEZFRUFJUmRCQUNFV0RNc0JDd0pBSUFFaUFTQUNSdzBBUWQwQUlSQU1pUU1MSUFFdEFBQkJMa2NOekFFZ0FVRUJhaUVCREtZQ0N5QUJJZ0VnQWtjTnpBRkIzd0FoRUF5SEF3c0NRQ0FCSWdFZ0FrWU5BQ0FBUVk2QWdJQUFOZ0lJSUFBZ0FUWUNCQ0FCSVFGQjBBQWhFQXp1QWd0QjRBQWhFQXlHQXd0QjRRQWhFQ0FCSWdFZ0FrWU5oUU1nQWlBQmF5QUFLQUlBSWhScUlSWWdBU0FVYTBFRGFpRVhBMEFnQVMwQUFDQVVRZUxDZ0lBQWFpMEFBRWNOelFFZ0ZFRURSZzNNQVNBVVFRRnFJUlFnQVVFQmFpSUJJQUpIRFFBTElBQWdGallDQUF5RkF3dEI0Z0FoRUNBQklnRWdBa1lOaEFNZ0FpQUJheUFBS0FJQUloUnFJUllnQVNBVWEwRUNhaUVYQTBBZ0FTMEFBQ0FVUWViQ2dJQUFhaTBBQUVjTnpBRWdGRUVDUmczT0FTQVVRUUZxSVJRZ0FVRUJhaUlCSUFKSERRQUxJQUFnRmpZQ0FBeUVBd3RCNHdBaEVDQUJJZ0VnQWtZTmd3TWdBaUFCYXlBQUtBSUFJaFJxSVJZZ0FTQVVhMEVEYWlFWEEwQWdBUzBBQUNBVVFlbkNnSUFBYWkwQUFFY055d0VnRkVFRFJnM09BU0FVUVFGcUlSUWdBVUVCYWlJQklBSkhEUUFMSUFBZ0ZqWUNBQXlEQXdzQ1FDQUJJZ0VnQWtjTkFFSGxBQ0VRRElNREN5QUFJQUZCQVdvaUFTQUNFS2lBZ0lBQUloQU56UUVnQVNFQlFkWUFJUkFNNlFJTEFrQWdBU0lCSUFKR0RRQURRQUpBSUFFdEFBQWlFRUVnUmcwQUFrQUNRQUpBSUJCQnVIOXFEZ3NBQWM4Qnp3SFBBYzhCendIUEFjOEJ6d0VDendFTElBRkJBV29oQVVIU0FDRVFETzBDQ3lBQlFRRnFJUUZCMHdBaEVBenNBZ3NnQVVFQmFpRUJRZFFBSVJBTTZ3SUxJQUZCQVdvaUFTQUNSdzBBQzBIa0FDRVFESUlEQzBIa0FDRVFESUVEQ3dOQUFrQWdBUzBBQUVId3dvQ0FBR290QUFBaUVFRUJSZzBBSUJCQmZtb09BODhCMEFIUkFkSUJDeUFCUVFGcUlnRWdBa2NOQUF0QjVnQWhFQXlBQXdzQ1FDQUJJZ0VnQWtZTkFDQUJRUUZxSVFFTUF3dEI1d0FoRUF6L0Fnc0RRQUpBSUFFdEFBQkI4TVNBZ0FCcUxRQUFJaEJCQVVZTkFBSkFJQkJCZm1vT0JOSUIwd0hVQVFEVkFRc2dBU0VCUWRjQUlSQU01d0lMSUFGQkFXb2lBU0FDUncwQUMwSG9BQ0VRRFA0Q0N3SkFJQUVpQVNBQ1J3MEFRZWtBSVJBTS9nSUxBa0FnQVMwQUFDSVFRWFpxRGhxNkFkVUIxUUc4QWRVQjFRSFZBZFVCMVFIVkFkVUIxUUhWQWRVQjFRSFZBZFVCMVFIVkFkVUIxUUhWQWNvQjFRSFZBUURUQVFzZ0FVRUJhaUVCQzBFR0lSQU00d0lMQTBBQ1FDQUJMUUFBUWZER2dJQUFhaTBBQUVFQlJnMEFJQUVoQVF5ZUFnc2dBVUVCYWlJQklBSkhEUUFMUWVvQUlSQU0rd0lMQWtBZ0FTSUJJQUpHRFFBZ0FVRUJhaUVCREFNTFFlc0FJUkFNK2dJTEFrQWdBU0lCSUFKSERRQkI3QUFoRUF6NkFnc2dBVUVCYWlFQkRBRUxBa0FnQVNJQklBSkhEUUJCN1FBaEVBejVBZ3NnQVVFQmFpRUJDMEVFSVJBTTNnSUxBa0FnQVNJVUlBSkhEUUJCN2dBaEVBejNBZ3NnRkNFQkFrQUNRQUpBSUJRdEFBQkI4TWlBZ0FCcUxRQUFRWDlxRGdmVUFkVUIxZ0VBbkFJQkF0Y0JDeUFVUVFGcUlRRU1DZ3NnRkVFQmFpRUJETTBCQzBFQUlSQWdBRUVBTmdJY0lBQkJtNUtBZ0FBMkFoQWdBRUVITmdJTUlBQWdGRUVCYWpZQ0ZBejJBZ3NDUUFOQUFrQWdBUzBBQUVId3lJQ0FBR290QUFBaUVFRUVSZzBBQWtBQ1FDQVFRWDlxRGdmU0FkTUIxQUhaQVFBRUFka0JDeUFCSVFGQjJnQWhFQXpnQWdzZ0FVRUJhaUVCUWR3QUlSQU0zd0lMSUFGQkFXb2lBU0FDUncwQUMwSHZBQ0VRRFBZQ0N5QUJRUUZxSVFFTXl3RUxBa0FnQVNJVUlBSkhEUUJCOEFBaEVBejFBZ3NnRkMwQUFFRXZSdzNVQVNBVVFRRnFJUUVNQmdzQ1FDQUJJaFFnQWtjTkFFSHhBQ0VRRFBRQ0N3SkFJQlF0QUFBaUFVRXZSdzBBSUJSQkFXb2hBVUhkQUNFUUROc0NDeUFCUVhacUlnUkJGa3NOMHdGQkFTQUVkRUdKZ0lBQ2NVVU4wd0VNeWdJTEFrQWdBU0lCSUFKR0RRQWdBVUVCYWlFQlFkNEFJUkFNMmdJTFFmSUFJUkFNOGdJTEFrQWdBU0lVSUFKSERRQkI5QUFoRUF6eUFnc2dGQ0VCQWtBZ0ZDMEFBRUh3eklDQUFHb3RBQUJCZjJvT0E4a0NsQUlBMUFFTFFlRUFJUkFNMkFJTEFrQWdBU0lVSUFKR0RRQURRQUpBSUJRdEFBQkI4TXFBZ0FCcUxRQUFJZ0ZCQTBZTkFBSkFJQUZCZjJvT0Fzc0NBTlVCQ3lBVUlRRkIzd0FoRUF6YUFnc2dGRUVCYWlJVUlBSkhEUUFMUWZNQUlSQU04UUlMUWZNQUlSQU04QUlMQWtBZ0FTSUJJQUpHRFFBZ0FFR1BnSUNBQURZQ0NDQUFJQUUyQWdRZ0FTRUJRZUFBSVJBTTF3SUxRZlVBSVJBTTd3SUxBa0FnQVNJQklBSkhEUUJCOWdBaEVBenZBZ3NnQUVHUGdJQ0FBRFlDQ0NBQUlBRTJBZ1FnQVNFQkMwRURJUkFNMUFJTEEwQWdBUzBBQUVFZ1J3M0RBaUFCUVFGcUlnRWdBa2NOQUF0Qjl3QWhFQXpzQWdzQ1FDQUJJZ0VnQWtjTkFFSDRBQ0VRRE93Q0N5QUJMUUFBUVNCSERjNEJJQUZCQVdvaEFRenZBUXNnQUNBQklnRWdBaENzZ0lDQUFDSVFEYzRCSUFFaEFReU9BZ3NDUUNBQklnUWdBa2NOQUVINkFDRVFET29DQ3lBRUxRQUFRY3dBUnczUkFTQUVRUUZxSVFGQkV5RVFETThCQ3dKQUlBRWlCQ0FDUncwQVFmc0FJUkFNNlFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJCV29oRUFOQUlBUXRBQUFnQVVId3pvQ0FBR290QUFCSERkQUJJQUZCQlVZTnpnRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkIrd0FoRUF6b0Fnc0NRQ0FCSWdRZ0FrY05BRUg4QUNFUURPZ0NDd0pBQWtBZ0JDMEFBRUc5ZjJvT0RBRFJBZEVCMFFIUkFkRUIwUUhSQWRFQjBRSFJBUUhSQVFzZ0JFRUJhaUVCUWVZQUlSQU16d0lMSUFSQkFXb2hBVUhuQUNFUURNNENDd0pBSUFFaUJDQUNSdzBBUWYwQUlSQU01d0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFtb2hFQUpBQTBBZ0JDMEFBQ0FCUWUzUGdJQUFhaTBBQUVjTnp3RWdBVUVDUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFmMEFJUkFNNXdJTElBQkJBRFlDQUNBUVFRRnFJUUZCRUNFUURNd0JDd0pBSUFFaUJDQUNSdzBBUWY0QUlSQU01Z0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkJXb2hFQUpBQTBBZ0JDMEFBQ0FCUWZiT2dJQUFhaTBBQUVjTnpnRWdBVUVGUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFmNEFJUkFNNWdJTElBQkJBRFlDQUNBUVFRRnFJUUZCRmlFUURNc0JDd0pBSUFFaUJDQUNSdzBBUWY4QUlSQU01UUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkEyb2hFQUpBQTBBZ0JDMEFBQ0FCUWZ6T2dJQUFhaTBBQUVjTnpRRWdBVUVEUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFmOEFJUkFNNVFJTElBQkJBRFlDQUNBUVFRRnFJUUZCQlNFUURNb0JDd0pBSUFFaUJDQUNSdzBBUVlBQklSQU01QUlMSUFRdEFBQkIyUUJIRGNzQklBUkJBV29oQVVFSUlSQU15UUVMQWtBZ0FTSUVJQUpIRFFCQmdRRWhFQXpqQWdzQ1FBSkFJQVF0QUFCQnNuOXFEZ01BekFFQnpBRUxJQVJCQVdvaEFVSHJBQ0VRRE1vQ0N5QUVRUUZxSVFGQjdBQWhFQXpKQWdzQ1FDQUJJZ1FnQWtjTkFFR0NBU0VRRE9JQ0N3SkFBa0FnQkMwQUFFRzRmMm9PQ0FETEFjc0J5d0hMQWNzQnl3RUJ5d0VMSUFSQkFXb2hBVUhxQUNFUURNa0NDeUFFUVFGcUlRRkI3UUFoRUF6SUFnc0NRQ0FCSWdRZ0FrY05BRUdEQVNFUURPRUNDeUFDSUFScklBQW9BZ0FpQVdvaEVDQUVJQUZyUVFKcUlSUUNRQU5BSUFRdEFBQWdBVUdBejRDQUFHb3RBQUJIRGNrQklBRkJBa1lOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdFRFlDQUVHREFTRVFET0VDQzBFQUlSQWdBRUVBTmdJQUlCUkJBV29oQVF6R0FRc0NRQ0FCSWdRZ0FrY05BRUdFQVNFUURPQUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFScUlSQUNRQU5BSUFRdEFBQWdBVUdEejRDQUFHb3RBQUJIRGNnQklBRkJCRVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHRUFTRVFET0FDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRU01oRUF6RkFRc0NRQ0FCSWdRZ0FrY05BRUdGQVNFUUROOENDd0pBQWtBZ0JDMEFBRUcwZjJvT0NBRElBY2dCeUFISUFjZ0J5QUVCeUFFTElBUkJBV29oQVVIdkFDRVFETVlDQ3lBRVFRRnFJUUZCOEFBaEVBekZBZ3NDUUNBQklnUWdBa2NOQUVHR0FTRVFETjRDQ3lBRUxRQUFRY1VBUnczRkFTQUVRUUZxSVFFTWd3SUxBa0FnQVNJRUlBSkhEUUJCaHdFaEVBemRBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFRGFpRVFBa0FEUUNBRUxRQUFJQUZCaU0rQWdBQnFMUUFBUnczRkFTQUJRUU5HRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQmh3RWhFQXpkQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUV0SVJBTXdnRUxBa0FnQVNJRUlBSkhEUUJCaUFFaEVBemNBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFSWFpRVFBa0FEUUNBRUxRQUFJQUZCME0rQWdBQnFMUUFBUnczRUFTQUJRUWhHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQmlBRWhFQXpjQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVwSVJBTXdRRUxBa0FnQVNJQklBSkhEUUJCaVFFaEVBemJBZ3RCQVNFUUlBRXRBQUJCM3dCSERjQUJJQUZCQVdvaEFReUJBZ3NDUUNBQklnUWdBa2NOQUVHS0FTRVFETm9DQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRRnFJUkFEUUNBRUxRQUFJQUZCak0rQWdBQnFMUUFBUnczQkFTQUJRUUZHRGE4Q0lBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFZb0JJUkFNMlFJTEFrQWdBU0lFSUFKSERRQkJpd0VoRUF6WkFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVDYWlFUUFrQURRQ0FFTFFBQUlBRkJqcytBZ0FCcUxRQUFSdzNCQVNBQlFRSkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCaXdFaEVBelpBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRUNJUkFNdmdFTEFrQWdBU0lFSUFKSERRQkJqQUVoRUF6WUFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVCYWlFUUFrQURRQ0FFTFFBQUlBRkI4TStBZ0FCcUxRQUFSdzNBQVNBQlFRRkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCakFFaEVBellBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRWZJUkFNdlFFTEFrQWdBU0lFSUFKSERRQkJqUUVoRUF6WEFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVCYWlFUUFrQURRQ0FFTFFBQUlBRkI4cytBZ0FCcUxRQUFSdzIvQVNBQlFRRkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCalFFaEVBelhBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRUpJUkFNdkFFTEFrQWdBU0lFSUFKSERRQkJqZ0VoRUF6V0Fnc0NRQUpBSUFRdEFBQkJ0MzlxRGdjQXZ3Ry9BYjhCdndHL0FRRy9BUXNnQkVFQmFpRUJRZmdBSVJBTXZRSUxJQVJCQVdvaEFVSDVBQ0VRREx3Q0N3SkFJQUVpQkNBQ1J3MEFRWThCSVJBTTFRSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQldvaEVBSkFBMEFnQkMwQUFDQUJRWkhQZ0lBQWFpMEFBRWNOdlFFZ0FVRUZSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVk4QklSQU0xUUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJHQ0VRRExvQkN3SkFJQUVpQkNBQ1J3MEFRWkFCSVJBTTFBSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQW1vaEVBSkFBMEFnQkMwQUFDQUJRWmZQZ0lBQWFpMEFBRWNOdkFFZ0FVRUNSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVpBQklSQU0xQUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJGeUVRRExrQkN3SkFJQUVpQkNBQ1J3MEFRWkVCSVJBTTB3SUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQm1vaEVBSkFBMEFnQkMwQUFDQUJRWnJQZ0lBQWFpMEFBRWNOdXdFZ0FVRUdSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVpFQklSQU0wd0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJGU0VRRExnQkN3SkFJQUVpQkNBQ1J3MEFRWklCSVJBTTBnSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQldvaEVBSkFBMEFnQkMwQUFDQUJRYUhQZ0lBQWFpMEFBRWNOdWdFZ0FVRUZSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVpJQklSQU0wZ0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJIaUVRRExjQkN3SkFJQUVpQkNBQ1J3MEFRWk1CSVJBTTBRSUxJQVF0QUFCQnpBQkhEYmdCSUFSQkFXb2hBVUVLSVJBTXRnRUxBa0FnQkNBQ1J3MEFRWlFCSVJBTTBBSUxBa0FDUUNBRUxRQUFRYjkvYWc0UEFMa0J1UUc1QWJrQnVRRzVBYmtCdVFHNUFia0J1UUc1QWJrQkFia0JDeUFFUVFGcUlRRkIvZ0FoRUF5M0Fnc2dCRUVCYWlFQlFmOEFJUkFNdGdJTEFrQWdCQ0FDUncwQVFaVUJJUkFNendJTEFrQUNRQ0FFTFFBQVFiOS9hZzREQUxnQkFiZ0JDeUFFUVFGcUlRRkIvUUFoRUF5MkFnc2dCRUVCYWlFRVFZQUJJUkFNdFFJTEFrQWdCQ0FDUncwQVFaWUJJUkFNemdJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBV29oRUFKQUEwQWdCQzBBQUNBQlFhZlBnSUFBYWkwQUFFY050Z0VnQVVFQlJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWllCSVJBTXpnSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkN5RVFETE1CQ3dKQUlBUWdBa2NOQUVHWEFTRVFETTBDQ3dKQUFrQUNRQUpBSUFRdEFBQkJVMm9PSXdDNEFiZ0J1QUc0QWJnQnVBRzRBYmdCdUFHNEFiZ0J1QUc0QWJnQnVBRzRBYmdCdUFHNEFiZ0J1QUc0QWJnQkFiZ0J1QUc0QWJnQnVBRUN1QUc0QWJnQkE3Z0JDeUFFUVFGcUlRRkIrd0FoRUF5MkFnc2dCRUVCYWlFQlFmd0FJUkFNdFFJTElBUkJBV29oQkVHQkFTRVFETFFDQ3lBRVFRRnFJUVJCZ2dFaEVBeXpBZ3NDUUNBRUlBSkhEUUJCbUFFaEVBek1BZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFRWFpRVFBa0FEUUNBRUxRQUFJQUZCcWMrQWdBQnFMUUFBUncyMEFTQUJRUVJHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQm1BRWhFQXpNQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVaSVJBTXNRRUxBa0FnQkNBQ1J3MEFRWmtCSVJBTXl3SUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQldvaEVBSkFBMEFnQkMwQUFDQUJRYTdQZ0lBQWFpMEFBRWNOc3dFZ0FVRUZSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVprQklSQU15d0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJCaUVRRExBQkN3SkFJQVFnQWtjTkFFR2FBU0VRRE1vQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUZxSVJBQ1FBTkFJQVF0QUFBZ0FVRzB6NENBQUdvdEFBQkhEYklCSUFGQkFVWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdhQVNFUURNb0NDeUFBUVFBMkFnQWdFRUVCYWlFQlFSd2hFQXl2QVFzQ1FDQUVJQUpIRFFCQm13RWhFQXpKQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUJhaUVRQWtBRFFDQUVMUUFBSUFGQnRzK0FnQUJxTFFBQVJ3MnhBU0FCUVFGR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJtd0VoRUF6SkFnc2dBRUVBTmdJQUlCQkJBV29oQVVFbklSQU1yZ0VMQWtBZ0JDQUNSdzBBUVp3QklSQU15QUlMQWtBQ1FDQUVMUUFBUWF4L2FnNENBQUd4QVFzZ0JFRUJhaUVFUVlZQklSQU1yd0lMSUFSQkFXb2hCRUdIQVNFUURLNENDd0pBSUFRZ0FrY05BRUdkQVNFUURNY0NDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFGcUlSQUNRQU5BSUFRdEFBQWdBVUc0ejRDQUFHb3RBQUJIRGE4QklBRkJBVVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHZEFTRVFETWNDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRU1loRUF5c0FRc0NRQ0FFSUFKSERRQkJuZ0VoRUF6R0Fnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVCYWlFUUFrQURRQ0FFTFFBQUlBRkJ1cytBZ0FCcUxRQUFSdzJ1QVNBQlFRRkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCbmdFaEVBekdBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRURJUkFNcXdFTEFrQWdCQ0FDUncwQVFaOEJJUkFNeFFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBbW9oRUFKQUEwQWdCQzBBQUNBQlFlM1BnSUFBYWkwQUFFY05yUUVnQVVFQ1JnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWjhCSVJBTXhRSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkRDRVFES29CQ3dKQUlBUWdBa2NOQUVHZ0FTRVFETVFDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRTnFJUkFDUUFOQUlBUXRBQUFnQVVHOHo0Q0FBR290QUFCSERhd0JJQUZCQTBZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR2dBU0VRRE1RQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVEwaEVBeXBBUXNDUUNBRUlBSkhEUUJCb1FFaEVBekRBZ3NDUUFKQUlBUXRBQUJCdW45cURnc0FyQUdzQWF3QnJBR3NBYXdCckFHc0Fhd0JBYXdCQ3lBRVFRRnFJUVJCaXdFaEVBeXFBZ3NnQkVFQmFpRUVRWXdCSVJBTXFRSUxBa0FnQkNBQ1J3MEFRYUlCSVJBTXdnSUxJQVF0QUFCQjBBQkhEYWtCSUFSQkFXb2hCQXpwQVFzQ1FDQUVJQUpIRFFCQm93RWhFQXpCQWdzQ1FBSkFJQVF0QUFCQnQzOXFEZ2NCcWdHcUFhb0JxZ0dxQVFDcUFRc2dCRUVCYWlFRVFZNEJJUkFNcUFJTElBUkJBV29oQVVFaUlSQU1wZ0VMQWtBZ0JDQUNSdzBBUWFRQklSQU13QUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFXb2hFQUpBQTBBZ0JDMEFBQ0FCUWNEUGdJQUFhaTBBQUVjTnFBRWdBVUVCUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFhUUJJUkFNd0FJTElBQkJBRFlDQUNBUVFRRnFJUUZCSFNFUURLVUJDd0pBSUFRZ0FrY05BRUdsQVNFUURMOENDd0pBQWtBZ0JDMEFBRUd1ZjJvT0F3Q29BUUdvQVFzZ0JFRUJhaUVFUVpBQklSQU1wZ0lMSUFSQkFXb2hBVUVFSVJBTXBBRUxBa0FnQkNBQ1J3MEFRYVlCSVJBTXZnSUxBa0FDUUFKQUFrQUNRQ0FFTFFBQVFiOS9hZzRWQUtvQnFnR3FBYW9CcWdHcUFhb0JxZ0dxQWFvQkFhb0JxZ0VDcWdHcUFRT3FBYW9CQktvQkN5QUVRUUZxSVFSQmlBRWhFQXlvQWdzZ0JFRUJhaUVFUVlrQklSQU1wd0lMSUFSQkFXb2hCRUdLQVNFUURLWUNDeUFFUVFGcUlRUkJqd0VoRUF5bEFnc2dCRUVCYWlFRVFaRUJJUkFNcEFJTEFrQWdCQ0FDUncwQVFhY0JJUkFNdlFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBbW9oRUFKQUEwQWdCQzBBQUNBQlFlM1BnSUFBYWkwQUFFY05wUUVnQVVFQ1JnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRYWNCSVJBTXZRSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkVTRVFES0lCQ3dKQUlBUWdBa2NOQUVHb0FTRVFETHdDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRSnFJUkFDUUFOQUlBUXRBQUFnQVVIQ3o0Q0FBR290QUFCSERhUUJJQUZCQWtZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR29BU0VRREx3Q0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVN3aEVBeWhBUXNDUUNBRUlBSkhEUUJCcVFFaEVBeTdBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFRWFpRVFBa0FEUUNBRUxRQUFJQUZCeGMrQWdBQnFMUUFBUncyakFTQUJRUVJHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQnFRRWhFQXk3QWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVySVJBTW9BRUxBa0FnQkNBQ1J3MEFRYW9CSVJBTXVnSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQW1vaEVBSkFBMEFnQkMwQUFDQUJRY3JQZ0lBQWFpMEFBRWNOb2dFZ0FVRUNSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWFvQklSQU11Z0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJGQ0VRREo4QkN3SkFJQVFnQWtjTkFFR3JBU0VRRExrQ0N3SkFBa0FDUUFKQUlBUXRBQUJCdm45cURnOEFBUUtrQWFRQnBBR2tBYVFCcEFHa0FhUUJwQUdrQWFRQkE2UUJDeUFFUVFGcUlRUkJrd0VoRUF5aUFnc2dCRUVCYWlFRVFaUUJJUkFNb1FJTElBUkJBV29oQkVHVkFTRVFES0FDQ3lBRVFRRnFJUVJCbGdFaEVBeWZBZ3NDUUNBRUlBSkhEUUJCckFFaEVBeTRBZ3NnQkMwQUFFSEZBRWNObndFZ0JFRUJhaUVFRE9BQkN3SkFJQVFnQWtjTkFFR3RBU0VRRExjQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUpxSVJBQ1FBTkFJQVF0QUFBZ0FVSE56NENBQUdvdEFBQkhEWjhCSUFGQkFrWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUd0QVNFUURMY0NDeUFBUVFBMkFnQWdFRUVCYWlFQlFRNGhFQXljQVFzQ1FDQUVJQUpIRFFCQnJnRWhFQXkyQWdzZ0JDMEFBRUhRQUVjTm5RRWdCRUVCYWlFQlFTVWhFQXliQVFzQ1FDQUVJQUpIRFFCQnJ3RWhFQXkxQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUlhaUVRQWtBRFFDQUVMUUFBSUFGQjBNK0FnQUJxTFFBQVJ3MmRBU0FCUVFoR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJyd0VoRUF5MUFnc2dBRUVBTmdJQUlCQkJBV29oQVVFcUlSQU1tZ0VMQWtBZ0JDQUNSdzBBUWJBQklSQU10QUlMQWtBQ1FDQUVMUUFBUWF0L2FnNExBSjBCblFHZEFaMEJuUUdkQVowQm5RR2RBUUdkQVFzZ0JFRUJhaUVFUVpvQklSQU1td0lMSUFSQkFXb2hCRUdiQVNFUURKb0NDd0pBSUFRZ0FrY05BRUd4QVNFUURMTUNDd0pBQWtBZ0JDMEFBRUcvZjJvT0ZBQ2NBWndCbkFHY0Fad0JuQUdjQVp3Qm5BR2NBWndCbkFHY0Fad0JuQUdjQVp3Qm5BRUJuQUVMSUFSQkFXb2hCRUdaQVNFUURKb0NDeUFFUVFGcUlRUkJuQUVoRUF5WkFnc0NRQ0FFSUFKSERRQkJzZ0VoRUF5eUFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVEYWlFUUFrQURRQ0FFTFFBQUlBRkIyYytBZ0FCcUxRQUFSdzJhQVNBQlFRTkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCc2dFaEVBeXlBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRWhJUkFNbHdFTEFrQWdCQ0FDUncwQVFiTUJJUkFNc1FJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJCbW9oRUFKQUEwQWdCQzBBQUNBQlFkM1BnSUFBYWkwQUFFY05tUUVnQVVFR1JnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRYk1CSVJBTXNRSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkdpRVFESllCQ3dKQUlBUWdBa2NOQUVHMEFTRVFETEFDQ3dKQUFrQUNRQ0FFTFFBQVFidC9hZzRSQUpvQm1nR2FBWm9CbWdHYUFab0JtZ0dhQVFHYUFab0JtZ0dhQVpvQkFwb0JDeUFFUVFGcUlRUkJuUUVoRUF5WUFnc2dCRUVCYWlFRVFaNEJJUkFNbHdJTElBUkJBV29oQkVHZkFTRVFESllDQ3dKQUlBUWdBa2NOQUVHMUFTRVFESzhDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRVnFJUkFDUUFOQUlBUXRBQUFnQVVIa3o0Q0FBR290QUFCSERaY0JJQUZCQlVZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFRzFBU0VRREs4Q0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVNnaEVBeVVBUXNDUUNBRUlBSkhEUUJCdGdFaEVBeXVBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFQ2FpRVFBa0FEUUNBRUxRQUFJQUZCNnMrQWdBQnFMUUFBUncyV0FTQUJRUUpHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQnRnRWhFQXl1QWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVISVJBTWt3RUxBa0FnQkNBQ1J3MEFRYmNCSVJBTXJRSUxBa0FDUUNBRUxRQUFRYnQvYWc0T0FKWUJsZ0dXQVpZQmxnR1dBWllCbGdHV0FaWUJsZ0dXQVFHV0FRc2dCRUVCYWlFRVFhRUJJUkFNbEFJTElBUkJBV29oQkVHaUFTRVFESk1DQ3dKQUlBUWdBa2NOQUVHNEFTRVFES3dDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRSnFJUkFDUUFOQUlBUXRBQUFnQVVIdHo0Q0FBR290QUFCSERaUUJJQUZCQWtZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFRzRBU0VRREt3Q0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVJJaEVBeVJBUXNDUUNBRUlBSkhEUUJCdVFFaEVBeXJBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFQmFpRVFBa0FEUUNBRUxRQUFJQUZCOE0rQWdBQnFMUUFBUncyVEFTQUJRUUZHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQnVRRWhFQXlyQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVnSVJBTWtBRUxBa0FnQkNBQ1J3MEFRYm9CSVJBTXFnSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQVdvaEVBSkFBMEFnQkMwQUFDQUJRZkxQZ0lBQWFpMEFBRWNOa2dFZ0FVRUJSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWJvQklSQU1xZ0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJEeUVRREk4QkN3SkFJQVFnQWtjTkFFRzdBU0VRREtrQ0N3SkFBa0FnQkMwQUFFRzNmMm9PQndDU0FaSUJrZ0dTQVpJQkFaSUJDeUFFUVFGcUlRUkJwUUVoRUF5UUFnc2dCRUVCYWlFRVFhWUJJUkFNandJTEFrQWdCQ0FDUncwQVFid0JJUkFNcUFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJCMm9oRUFKQUEwQWdCQzBBQUNBQlFmVFBnSUFBYWkwQUFFY05rQUVnQVVFSFJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRYndCSVJBTXFBSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkd5RVFESTBCQ3dKQUlBUWdBa2NOQUVHOUFTRVFES2NDQ3dKQUFrQUNRQ0FFTFFBQVFiNS9hZzRTQUpFQmtRR1JBWkVCa1FHUkFaRUJrUUdSQVFHUkFaRUJrUUdSQVpFQmtRRUNrUUVMSUFSQkFXb2hCRUdrQVNFUURJOENDeUFFUVFGcUlRUkJwd0VoRUF5T0Fnc2dCRUVCYWlFRVFhZ0JJUkFNalFJTEFrQWdCQ0FDUncwQVFiNEJJUkFNcGdJTElBUXRBQUJCemdCSERZMEJJQVJCQVdvaEJBelBBUXNDUUNBRUlBSkhEUUJCdndFaEVBeWxBZ3NDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FDQUVMUUFBUWI5L2FnNFZBQUVDQTV3QkJBVUduQUdjQVp3QkJ3Z0pDZ3VjQVF3TkRnK2NBUXNnQkVFQmFpRUJRZWdBSVJBTW1nSUxJQVJCQVdvaEFVSHBBQ0VRREprQ0N5QUVRUUZxSVFGQjdnQWhFQXlZQWdzZ0JFRUJhaUVCUWZJQUlSQU1sd0lMSUFSQkFXb2hBVUh6QUNFUURKWUNDeUFFUVFGcUlRRkI5Z0FoRUF5VkFnc2dCRUVCYWlFQlFmY0FJUkFNbEFJTElBUkJBV29oQVVINkFDRVFESk1DQ3lBRVFRRnFJUVJCZ3dFaEVBeVNBZ3NnQkVFQmFpRUVRWVFCSVJBTWtRSUxJQVJCQVdvaEJFR0ZBU0VRREpBQ0N5QUVRUUZxSVFSQmtnRWhFQXlQQWdzZ0JFRUJhaUVFUVpnQklSQU1qZ0lMSUFSQkFXb2hCRUdnQVNFUURJMENDeUFFUVFGcUlRUkJvd0VoRUF5TUFnc2dCRUVCYWlFRVFhb0JJUkFNaXdJTEFrQWdCQ0FDUmcwQUlBQkJrSUNBZ0FBMkFnZ2dBQ0FFTmdJRVFhc0JJUkFNaXdJTFFjQUJJUkFNb3dJTElBQWdCU0FDRUtxQWdJQUFJZ0VOaXdFZ0JTRUJERndMQWtBZ0JpQUNSZzBBSUFaQkFXb2hCUXlOQVF0QndnRWhFQXloQWdzRFFBSkFJQkF0QUFCQmRtb09CSXdCQUFDUEFRQUxJQkJCQVdvaUVDQUNSdzBBQzBIREFTRVFES0FDQ3dKQUlBY2dBa1lOQUNBQVFaR0FnSUFBTmdJSUlBQWdCellDQkNBSElRRkJBU0VRREljQ0MwSEVBU0VRREo4Q0N3SkFJQWNnQWtjTkFFSEZBU0VRREo4Q0N3SkFBa0FnQnkwQUFFRjJhZzRFQWM0QnpnRUF6Z0VMSUFkQkFXb2hCZ3lOQVFzZ0IwRUJhaUVGRElrQkN3SkFJQWNnQWtjTkFFSEdBU0VRREo0Q0N3SkFBa0FnQnkwQUFFRjJhZzRYQVk4Qmp3RUJqd0dQQVk4Qmp3R1BBWThCandHUEFZOEJqd0dQQVk4Qmp3R1BBWThCandHUEFZOEJBSThCQ3lBSFFRRnFJUWNMUWJBQklSQU1oQUlMQWtBZ0NDQUNSdzBBUWNnQklSQU1uUUlMSUFndEFBQkJJRWNOalFFZ0FFRUFPd0V5SUFoQkFXb2hBVUd6QVNFUURJTUNDeUFCSVJjQ1FBTkFJQmNpQnlBQ1JnMEJJQWN0QUFCQlVHcEIvd0Z4SWhCQkNrOE56QUVDUUNBQUx3RXlJaFJCbVROTERRQWdBQ0FVUVFwc0loUTdBVElnRUVILy93TnpJQlJCL3Y4RGNVa05BQ0FIUVFGcUlSY2dBQ0FVSUJCcUloQTdBVElnRUVILy93TnhRZWdIU1EwQkN3dEJBQ0VRSUFCQkFEWUNIQ0FBUWNHSmdJQUFOZ0lRSUFCQkRUWUNEQ0FBSUFkQkFXbzJBaFFNbkFJTFFjY0JJUkFNbXdJTElBQWdDQ0FDRUs2QWdJQUFJaEJGRGNvQklCQkJGVWNOakFFZ0FFSElBVFlDSENBQUlBZzJBaFFnQUVISmw0Q0FBRFlDRUNBQVFSVTJBZ3hCQUNFUURKb0NDd0pBSUFrZ0FrY05BRUhNQVNFUURKb0NDMEVBSVJSQkFTRVhRUUVoRmtFQUlSQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQWdDUzBBQUVGUWFnNEtsZ0dWQVFBQkFnTUVCUVlJbHdFTFFRSWhFQXdHQzBFRElSQU1CUXRCQkNFUURBUUxRUVVoRUF3REMwRUdJUkFNQWd0QkJ5RVFEQUVMUVFnaEVBdEJBQ0VYUVFBaEZrRUFJUlFNamdFTFFRa2hFRUVCSVJSQkFDRVhRUUFoRmd5TkFRc0NRQ0FLSUFKSERRQkJ6Z0VoRUF5WkFnc2dDaTBBQUVFdVJ3Mk9BU0FLUVFGcUlRa015Z0VMSUFzZ0FrY05qZ0ZCMEFFaEVBeVhBZ3NDUUNBTElBSkdEUUFnQUVHT2dJQ0FBRFlDQ0NBQUlBczJBZ1JCdHdFaEVBeitBUXRCMFFFaEVBeVdBZ3NDUUNBRUlBSkhEUUJCMGdFaEVBeVdBZ3NnQWlBRWF5QUFLQUlBSWhCcUlSUWdCQ0FRYTBFRWFpRUxBMEFnQkMwQUFDQVFRZnpQZ0lBQWFpMEFBRWNOamdFZ0VFRUVSZzNwQVNBUVFRRnFJUkFnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVIU0FTRVFESlVDQ3lBQUlBd2dBaENzZ0lDQUFDSUJEWTBCSUF3aEFReTRBUXNDUUNBRUlBSkhEUUJCMUFFaEVBeVVBZ3NnQWlBRWF5QUFLQUlBSWhCcUlSUWdCQ0FRYTBFQmFpRU1BMEFnQkMwQUFDQVFRWUhRZ0lBQWFpMEFBRWNOandFZ0VFRUJSZzJPQVNBUVFRRnFJUkFnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVIVUFTRVFESk1DQ3dKQUlBUWdBa2NOQUVIV0FTRVFESk1DQ3lBQ0lBUnJJQUFvQWdBaUVHb2hGQ0FFSUJCclFRSnFJUXNEUUNBRUxRQUFJQkJCZzlDQWdBQnFMUUFBUncyT0FTQVFRUUpHRFpBQklCQkJBV29oRUNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFkWUJJUkFNa2dJTEFrQWdCQ0FDUncwQVFkY0JJUkFNa2dJTEFrQUNRQ0FFTFFBQVFidC9hZzRRQUk4Qmp3R1BBWThCandHUEFZOEJqd0dQQVk4Qmp3R1BBWThCandFQmp3RUxJQVJCQVdvaEJFRzdBU0VRRFBrQkN5QUVRUUZxSVFSQnZBRWhFQXo0QVFzQ1FDQUVJQUpIRFFCQjJBRWhFQXlSQWdzZ0JDMEFBRUhJQUVjTmpBRWdCRUVCYWlFRURNUUJDd0pBSUFRZ0FrWU5BQ0FBUVpDQWdJQUFOZ0lJSUFBZ0JEWUNCRUcrQVNFUURQY0JDMEhaQVNFUURJOENDd0pBSUFRZ0FrY05BRUhhQVNFUURJOENDeUFFTFFBQVFjZ0FSZzNEQVNBQVFRRTZBQ2dNdVFFTElBQkJBam9BTHlBQUlBUWdBaENtZ0lDQUFDSVFEWTBCUWNJQklSQU05QUVMSUFBdEFDaEJmMm9PQXJjQnVRRzRBUXNEUUFKQUlBUXRBQUJCZG1vT0JBQ09BWTRCQUk0QkN5QUVRUUZxSWdRZ0FrY05BQXRCM1FFaEVBeUxBZ3NnQUVFQU9nQXZJQUF0QUMxQkJIRkZEWVFDQ3lBQVFRQTZBQzhnQUVFQk9nQTBJQUVoQVF5TUFRc2dFRUVWUmczYUFTQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnA0NkFnQUEyQWhBZ0FFRVNOZ0lNUVFBaEVBeUlBZ3NDUUNBQUlCQWdBaEMwZ0lDQUFDSUVEUUFnRUNFQkRJRUNDd0pBSUFSQkZVY05BQ0FBUVFNMkFod2dBQ0FRTmdJVUlBQkJzSmlBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXlJQWdzZ0FFRUFOZ0ljSUFBZ0VEWUNGQ0FBUWFlT2dJQUFOZ0lRSUFCQkVqWUNERUVBSVJBTWh3SUxJQkJCRlVZTjFnRWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFkcU5nSUFBTmdJUUlBQkJGRFlDREVFQUlSQU1oZ0lMSUFBb0FnUWhGeUFBUVFBMkFnUWdFQ0FScDJvaUZpRUJJQUFnRnlBUUlCWWdGQnNpRUJDMWdJQ0FBQ0lVUlEyTkFTQUFRUWMyQWh3Z0FDQVFOZ0lVSUFBZ0ZEWUNERUVBSVJBTWhRSUxJQUFnQUM4Qk1FR0FBWEk3QVRBZ0FTRUJDMEVxSVJBTTZnRUxJQkJCRlVZTjBRRWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFZT01nSUFBTmdJUUlBQkJFellDREVFQUlSQU1nZ0lMSUJCQkZVWU56d0VnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRWnFQZ0lBQU5nSVFJQUJCSWpZQ0RFRUFJUkFNZ1FJTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkMzZ0lDQUFDSVFEUUFnQVVFQmFpRUJESTBCQ3lBQVFRdzJBaHdnQUNBUU5nSU1JQUFnQVVFQmFqWUNGRUVBSVJBTWdBSUxJQkJCRlVZTnpBRWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFacVBnSUFBTmdJUUlBQkJJallDREVFQUlSQU0vd0VMSUFBb0FnUWhFQ0FBUVFBMkFnUUNRQ0FBSUJBZ0FSQzNnSUNBQUNJUURRQWdBVUVCYWlFQkRJd0JDeUFBUVEwMkFod2dBQ0FRTmdJTUlBQWdBVUVCYWpZQ0ZFRUFJUkFNL2dFTElCQkJGVVlOeVFFZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWNhTWdJQUFOZ0lRSUFCQkl6WUNERUVBSVJBTS9RRUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDNWdJQ0FBQ0lRRFFBZ0FVRUJhaUVCRElzQkN5QUFRUTQyQWh3Z0FDQVFOZ0lNSUFBZ0FVRUJhallDRkVFQUlSQU0vQUVMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUhBbFlDQUFEWUNFQ0FBUVFJMkFneEJBQ0VRRFBzQkN5QVFRUlZHRGNVQklBQkJBRFlDSENBQUlBRTJBaFFnQUVIR2pJQ0FBRFlDRUNBQVFTTTJBZ3hCQUNFUURQb0JDeUFBUVJBMkFod2dBQ0FCTmdJVUlBQWdFRFlDREVFQUlSQU0rUUVMSUFBb0FnUWhCQ0FBUVFBMkFnUUNRQ0FBSUFRZ0FSQzVnSUNBQUNJRURRQWdBVUVCYWlFQkRQRUJDeUFBUVJFMkFod2dBQ0FFTmdJTUlBQWdBVUVCYWpZQ0ZFRUFJUkFNK0FFTElCQkJGVVlOd1FFZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWNhTWdJQUFOZ0lRSUFCQkl6WUNERUVBSVJBTTl3RUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDNWdJQ0FBQ0lRRFFBZ0FVRUJhaUVCRElnQkN5QUFRUk0yQWh3Z0FDQVFOZ0lNSUFBZ0FVRUJhallDRkVFQUlSQU05Z0VMSUFBb0FnUWhCQ0FBUVFBMkFnUUNRQ0FBSUFRZ0FSQzVnSUNBQUNJRURRQWdBVUVCYWlFQkRPMEJDeUFBUVJRMkFod2dBQ0FFTmdJTUlBQWdBVUVCYWpZQ0ZFRUFJUkFNOVFFTElCQkJGVVlOdlFFZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVpxUGdJQUFOZ0lRSUFCQklqWUNERUVBSVJBTTlBRUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDM2dJQ0FBQ0lRRFFBZ0FVRUJhaUVCRElZQkN5QUFRUlkyQWh3Z0FDQVFOZ0lNSUFBZ0FVRUJhallDRkVFQUlSQU04d0VMSUFBb0FnUWhCQ0FBUVFBMkFnUUNRQ0FBSUFRZ0FSQzNnSUNBQUNJRURRQWdBVUVCYWlFQkRPa0JDeUFBUVJjMkFod2dBQ0FFTmdJTUlBQWdBVUVCYWpZQ0ZFRUFJUkFNOGdFTElBQkJBRFlDSENBQUlBRTJBaFFnQUVITms0Q0FBRFlDRUNBQVFRdzJBZ3hCQUNFUURQRUJDMElCSVJFTElCQkJBV29oQVFKQUlBQXBBeUFpRWtMLy8vLy8vLy8vL3c5V0RRQWdBQ0FTUWdTR0lCR0VOd01nSUFFaEFReUVBUXNnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRYTJKZ0lBQU5nSVFJQUJCRERZQ0RFRUFJUkFNN3dFTElBQkJBRFlDSENBQUlCQTJBaFFnQUVITms0Q0FBRFlDRUNBQVFRdzJBZ3hCQUNFUURPNEJDeUFBS0FJRUlSY2dBRUVBTmdJRUlCQWdFYWRxSWhZaEFTQUFJQmNnRUNBV0lCUWJJaEFRdFlDQWdBQWlGRVVOY3lBQVFRVTJBaHdnQUNBUU5nSVVJQUFnRkRZQ0RFRUFJUkFNN1FFTElBQkJBRFlDSENBQUlCQTJBaFFnQUVHcW5JQ0FBRFlDRUNBQVFRODJBZ3hCQUNFUURPd0JDeUFBSUJBZ0FoQzBnSUNBQUNJQkRRRWdFQ0VCQzBFT0lSQU0wUUVMQWtBZ0FVRVZSdzBBSUFCQkFqWUNIQ0FBSUJBMkFoUWdBRUd3bUlDQUFEWUNFQ0FBUVJVMkFneEJBQ0VRRE9vQkN5QUFRUUEyQWh3Z0FDQVFOZ0lVSUFCQnA0NkFnQUEyQWhBZ0FFRVNOZ0lNUVFBaEVBenBBUXNnQVVFQmFpRVFBa0FnQUM4Qk1DSUJRWUFCY1VVTkFBSkFJQUFnRUNBQ0VMdUFnSUFBSWdFTkFDQVFJUUVNY0FzZ0FVRVZSdzI2QVNBQVFRVTJBaHdnQUNBUU5nSVVJQUJCK1plQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF6cEFRc0NRQ0FCUWFBRWNVR2dCRWNOQUNBQUxRQXRRUUp4RFFBZ0FFRUFOZ0ljSUFBZ0VEWUNGQ0FBUVphVGdJQUFOZ0lRSUFCQkJEWUNERUVBSVJBTTZRRUxJQUFnRUNBQ0VMMkFnSUFBR2lBUUlRRUNRQUpBQWtBQ1FBSkFJQUFnRUNBQ0VMT0FnSUFBRGhZQ0FRQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUURCQXNnQUVFQk9nQXVDeUFBSUFBdkFUQkJ3QUJ5T3dFd0lCQWhBUXRCSmlFUURORUJDeUFBUVNNMkFod2dBQ0FRTmdJVUlBQkJwWmFBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXpwQVFzZ0FFRUFOZ0ljSUFBZ0VEWUNGQ0FBUWRXTGdJQUFOZ0lRSUFCQkVUWUNERUVBSVJBTTZBRUxJQUF0QUMxQkFYRkZEUUZCd3dFaEVBek9BUXNDUUNBTklBSkdEUUFEUUFKQUlBMHRBQUJCSUVZTkFDQU5JUUVNeEFFTElBMUJBV29pRFNBQ1J3MEFDMEVsSVJBTTV3RUxRU1VoRUF6bUFRc2dBQ2dDQkNFRUlBQkJBRFlDQkNBQUlBUWdEUkN2Z0lDQUFDSUVSUTJ0QVNBQVFTWTJBaHdnQUNBRU5nSU1JQUFnRFVFQmFqWUNGRUVBSVJBTTVRRUxJQkJCRlVZTnF3RWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFmMk5nSUFBTmdJUUlBQkJIVFlDREVFQUlSQU01QUVMSUFCQkp6WUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXpqQVFzZ0VDRUJRUUVoRkFKQUFrQUNRQUpBQWtBQ1FBSkFJQUF0QUN4QmZtb09Cd1lGQlFNQkFnQUZDeUFBSUFBdkFUQkJDSEk3QVRBTUF3dEJBaUVVREFFTFFRUWhGQXNnQUVFQk9nQXNJQUFnQUM4Qk1DQVVjanNCTUFzZ0VDRUJDMEVySVJBTXlnRUxJQUJCQURZQ0hDQUFJQkEyQWhRZ0FFR3Jrb0NBQURZQ0VDQUFRUXMyQWd4QkFDRVFET0lCQ3lBQVFRQTJBaHdnQUNBQk5nSVVJQUJCNFkrQWdBQTJBaEFnQUVFS05nSU1RUUFoRUF6aEFRc2dBRUVBT2dBc0lCQWhBUXk5QVFzZ0VDRUJRUUVoRkFKQUFrQUNRQUpBQWtBZ0FDMEFMRUY3YWc0RUF3RUNBQVVMSUFBZ0FDOEJNRUVJY2pzQk1Bd0RDMEVDSVJRTUFRdEJCQ0VVQ3lBQVFRRTZBQ3dnQUNBQUx3RXdJQlJ5T3dFd0N5QVFJUUVMUVNraEVBekZBUXNnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZkNVZ0lBQU5nSVFJQUJCQXpZQ0RFRUFJUkFNM1FFTEFrQWdEaTBBQUVFTlJ3MEFJQUFvQWdRaEFTQUFRUUEyQWdRQ1FDQUFJQUVnRGhDeGdJQ0FBQ0lCRFFBZ0RrRUJhaUVCREhVTElBQkJMRFlDSENBQUlBRTJBZ3dnQUNBT1FRRnFOZ0lVUVFBaEVBemRBUXNnQUMwQUxVRUJjVVVOQVVIRUFTRVFETU1CQ3dKQUlBNGdBa2NOQUVFdElSQU0zQUVMQWtBQ1FBTkFBa0FnRGkwQUFFRjJhZzRFQWdBQUF3QUxJQTVCQVdvaURpQUNSdzBBQzBFdElSQU0zUUVMSUFBb0FnUWhBU0FBUVFBMkFnUUNRQ0FBSUFFZ0RoQ3hnSUNBQUNJQkRRQWdEaUVCREhRTElBQkJMRFlDSENBQUlBNDJBaFFnQUNBQk5nSU1RUUFoRUF6Y0FRc2dBQ2dDQkNFQklBQkJBRFlDQkFKQUlBQWdBU0FPRUxHQWdJQUFJZ0VOQUNBT1FRRnFJUUVNY3dzZ0FFRXNOZ0ljSUFBZ0FUWUNEQ0FBSUE1QkFXbzJBaFJCQUNFUUROc0JDeUFBS0FJRUlRUWdBRUVBTmdJRUlBQWdCQ0FPRUxHQWdJQUFJZ1FOb0FFZ0RpRUJETTRCQ3lBUVFTeEhEUUVnQVVFQmFpRVFRUUVoQVFKQUFrQUNRQUpBQWtBZ0FDMEFMRUY3YWc0RUF3RUNCQUFMSUJBaEFRd0VDMEVDSVFFTUFRdEJCQ0VCQ3lBQVFRRTZBQ3dnQUNBQUx3RXdJQUZ5T3dFd0lCQWhBUXdCQ3lBQUlBQXZBVEJCQ0hJN0FUQWdFQ0VCQzBFNUlSQU12d0VMSUFCQkFEb0FMQ0FCSVFFTFFUUWhFQXk5QVFzZ0FDQUFMd0V3UVNCeU93RXdJQUVoQVF3Q0N5QUFLQUlFSVFRZ0FFRUFOZ0lFQWtBZ0FDQUVJQUVRc1lDQWdBQWlCQTBBSUFFaEFRekhBUXNnQUVFM05nSWNJQUFnQVRZQ0ZDQUFJQVEyQWd4QkFDRVFETlFCQ3lBQVFRZzZBQ3dnQVNFQkMwRXdJUkFNdVFFTEFrQWdBQzBBS0VFQlJnMEFJQUVoQVF3RUN5QUFMUUF0UVFoeFJRMlRBU0FCSVFFTUF3c2dBQzBBTUVFZ2NRMlVBVUhGQVNFUURMY0JDd0pBSUE4Z0FrWU5BQUpBQTBBQ1FDQVBMUUFBUVZCcUlnRkIvd0Z4UVFwSkRRQWdEeUVCUVRVaEVBeTZBUXNnQUNrRElDSVJRcG16NXN5WnMrYk1HVllOQVNBQUlCRkNDbjRpRVRjRElDQVJJQUd0UXY4Qmd5SVNRbitGVmcwQklBQWdFU0FTZkRjRElDQVBRUUZxSWc4Z0FrY05BQXRCT1NFUURORUJDeUFBS0FJRUlRSWdBRUVBTmdJRUlBQWdBaUFQUVFGcUlnUVFzWUNBZ0FBaUFnMlZBU0FFSVFFTXd3RUxRVGtoRUF6UEFRc0NRQ0FBTHdFd0lnRkJDSEZGRFFBZ0FDMEFLRUVCUncwQUlBQXRBQzFCQ0hGRkRaQUJDeUFBSUFGQjkvc0RjVUdBQkhJN0FUQWdEeUVCQzBFM0lSQU10QUVMSUFBZ0FDOEJNRUVRY2pzQk1BeXJBUXNnRUVFVlJnMkxBU0FBUVFBMkFod2dBQ0FCTmdJVUlBQkI4STZBZ0FBMkFoQWdBRUVjTmdJTVFRQWhFQXpMQVFzZ0FFSERBRFlDSENBQUlBRTJBZ3dnQUNBTlFRRnFOZ0lVUVFBaEVBektBUXNDUUNBQkxRQUFRVHBIRFFBZ0FDZ0NCQ0VRSUFCQkFEWUNCQUpBSUFBZ0VDQUJFSytBZ0lBQUloQU5BQ0FCUVFGcUlRRU1Zd3NnQUVIREFEWUNIQ0FBSUJBMkFnd2dBQ0FCUVFGcU5nSVVRUUFoRUF6S0FRc2dBRUVBTmdJY0lBQWdBVFlDRkNBQVFiR1JnSUFBTmdJUUlBQkJDallDREVFQUlSQU15UUVMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUdnbVlDQUFEWUNFQ0FBUVI0MkFneEJBQ0VRRE1nQkN5QUFRUUEyQWdBTElBQkJnQkk3QVNvZ0FDQVhRUUZxSWdFZ0FoQ29nSUNBQUNJUURRRWdBU0VCQzBISEFDRVFES3dCQ3lBUVFSVkhEWU1CSUFCQjBRQTJBaHdnQUNBQk5nSVVJQUJCNDVlQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF6RUFRc2dBQ2dDQkNFUUlBQkJBRFlDQkFKQUlBQWdFQ0FCRUtlQWdJQUFJaEFOQUNBQklRRU1YZ3NnQUVIU0FEWUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXpEQVFzZ0FFRUFOZ0ljSUFBZ0ZEWUNGQ0FBUWNHb2dJQUFOZ0lRSUFCQkJ6WUNEQ0FBUVFBMkFnQkJBQ0VRRE1JQkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRcDRDQWdBQWlFQTBBSUFFaEFReGRDeUFBUWRNQU5nSWNJQUFnQVRZQ0ZDQUFJQkEyQWd4QkFDRVFETUVCQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFZQ1JnSUFBTmdJUUlBQkJDVFlDREF6QUFRc2dFRUVWUmcxOUlBQkJBRFlDSENBQUlBRTJBaFFnQUVHVWpZQ0FBRFlDRUNBQVFTRTJBZ3hCQUNFUURMOEJDMEVCSVJaQkFDRVhRUUFoRkVFQklSQUxJQUFnRURvQUt5QUJRUUZxSVFFQ1FBSkFJQUF0QUMxQkVIRU5BQUpBQWtBQ1FDQUFMUUFxRGdNQkFBSUVDeUFXUlEwRERBSUxJQlFOQVF3Q0N5QVhSUTBCQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVFyWUNBZ0FBaUVBMEFJQUVoQVF4Y0N5QUFRZGdBTmdJY0lBQWdBVFlDRkNBQUlCQTJBZ3hCQUNFUURMNEJDeUFBS0FJRUlRUWdBRUVBTmdJRUFrQWdBQ0FFSUFFUXJZQ0FnQUFpQkEwQUlBRWhBUXl0QVFzZ0FFSFpBRFlDSENBQUlBRTJBaFFnQUNBRU5nSU1RUUFoRUF5OUFRc2dBQ2dDQkNFRUlBQkJBRFlDQkFKQUlBQWdCQ0FCRUsyQWdJQUFJZ1FOQUNBQklRRU1xd0VMSUFCQjJnQTJBaHdnQUNBQk5nSVVJQUFnQkRZQ0RFRUFJUkFNdkFFTElBQW9BZ1FoQkNBQVFRQTJBZ1FDUUNBQUlBUWdBUkN0Z0lDQUFDSUVEUUFnQVNFQkRLa0JDeUFBUWR3QU5nSWNJQUFnQVRZQ0ZDQUFJQVEyQWd4QkFDRVFETHNCQ3dKQUlBRXRBQUJCVUdvaUVFSC9BWEZCQ2s4TkFDQUFJQkE2QUNvZ0FVRUJhaUVCUWM4QUlSQU1vZ0VMSUFBb0FnUWhCQ0FBUVFBMkFnUUNRQ0FBSUFRZ0FSQ3RnSUNBQUNJRURRQWdBU0VCREtjQkN5QUFRZDRBTmdJY0lBQWdBVFlDRkNBQUlBUTJBZ3hCQUNFUURMb0JDeUFBUVFBMkFnQWdGMEVCYWlFQkFrQWdBQzBBS1VFalR3MEFJQUVoQVF4WkN5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQjA0bUFnQUEyQWhBZ0FFRUlOZ0lNUVFBaEVBeTVBUXNnQUVFQU5nSUFDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVpDemdJQUFOZ0lRSUFCQkNEWUNEQXkzQVFzZ0FFRUFOZ0lBSUJkQkFXb2hBUUpBSUFBdEFDbEJJVWNOQUNBQklRRU1WZ3NnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRWnVLZ0lBQU5nSVFJQUJCQ0RZQ0RFRUFJUkFNdGdFTElBQkJBRFlDQUNBWFFRRnFJUUVDUUNBQUxRQXBJaEJCWFdwQkMwOE5BQ0FCSVFFTVZRc0NRQ0FRUVFaTERRQkJBU0FRZEVIS0FIRkZEUUFnQVNFQkRGVUxRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCOTRtQWdBQTJBaEFnQUVFSU5nSU1ETFVCQ3lBUVFSVkdEWEVnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRYm1OZ0lBQU5nSVFJQUJCR2pZQ0RFRUFJUkFNdEFFTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkNuZ0lDQUFDSVFEUUFnQVNFQkRGUUxJQUJCNVFBMkFod2dBQ0FCTmdJVUlBQWdFRFlDREVFQUlSQU1zd0VMSUFBb0FnUWhFQ0FBUVFBMkFnUUNRQ0FBSUJBZ0FSQ25nSUNBQUNJUURRQWdBU0VCREUwTElBQkIwZ0EyQWh3Z0FDQUJOZ0lVSUFBZ0VEWUNERUVBSVJBTXNnRUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDbmdJQ0FBQ0lRRFFBZ0FTRUJERTBMSUFCQjB3QTJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNc1FFTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkNuZ0lDQUFDSVFEUUFnQVNFQkRGRUxJQUJCNVFBMkFod2dBQ0FCTmdJVUlBQWdFRFlDREVFQUlSQU1zQUVMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUhHaW9DQUFEWUNFQ0FBUVFjMkFneEJBQ0VRREs4QkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRcDRDQWdBQWlFQTBBSUFFaEFReEpDeUFBUWRJQU5nSWNJQUFnQVRZQ0ZDQUFJQkEyQWd4QkFDRVFESzRCQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVFwNENBZ0FBaUVBMEFJQUVoQVF4SkN5QUFRZE1BTmdJY0lBQWdBVFlDRkNBQUlCQTJBZ3hCQUNFUURLMEJDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXA0Q0FnQUFpRUEwQUlBRWhBUXhOQ3lBQVFlVUFOZ0ljSUFBZ0FUWUNGQ0FBSUJBMkFneEJBQ0VRREt3QkN5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQjNJaUFnQUEyQWhBZ0FFRUhOZ0lNUVFBaEVBeXJBUXNnRUVFL1J3MEJJQUZCQVdvaEFRdEJCU0VRREpBQkMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZjJTZ0lBQU5nSVFJQUJCQnpZQ0RBeW9BUXNnQUNnQ0JDRVFJQUJCQURZQ0JBSkFJQUFnRUNBQkVLZUFnSUFBSWhBTkFDQUJJUUVNUWdzZ0FFSFNBRFlDSENBQUlBRTJBaFFnQUNBUU5nSU1RUUFoRUF5bkFRc2dBQ2dDQkNFUUlBQkJBRFlDQkFKQUlBQWdFQ0FCRUtlQWdJQUFJaEFOQUNBQklRRU1RZ3NnQUVIVEFEWUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXltQVFzZ0FDZ0NCQ0VRSUFCQkFEWUNCQUpBSUFBZ0VDQUJFS2VBZ0lBQUloQU5BQ0FCSVFFTVJnc2dBRUhsQURZQ0hDQUFJQUUyQWhRZ0FDQVFOZ0lNUVFBaEVBeWxBUXNnQUNnQ0JDRUJJQUJCQURZQ0JBSkFJQUFnQVNBVUVLZUFnSUFBSWdFTkFDQVVJUUVNUHdzZ0FFSFNBRFlDSENBQUlCUTJBaFFnQUNBQk5nSU1RUUFoRUF5a0FRc2dBQ2dDQkNFQklBQkJBRFlDQkFKQUlBQWdBU0FVRUtlQWdJQUFJZ0VOQUNBVUlRRU1Qd3NnQUVIVEFEWUNIQ0FBSUJRMkFoUWdBQ0FCTmdJTVFRQWhFQXlqQVFzZ0FDZ0NCQ0VCSUFCQkFEWUNCQUpBSUFBZ0FTQVVFS2VBZ0lBQUlnRU5BQ0FVSVFFTVF3c2dBRUhsQURZQ0hDQUFJQlEyQWhRZ0FDQUJOZ0lNUVFBaEVBeWlBUXNnQUVFQU5nSWNJQUFnRkRZQ0ZDQUFRY09QZ0lBQU5nSVFJQUJCQnpZQ0RFRUFJUkFNb1FFTElBQkJBRFlDSENBQUlBRTJBaFFnQUVIRGo0Q0FBRFlDRUNBQVFRYzJBZ3hCQUNFUURLQUJDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0ZEWUNGQ0FBUVl5Y2dJQUFOZ0lRSUFCQkJ6WUNEQXlmQVFzZ0FFRUFOZ0ljSUFBZ0ZEWUNGQ0FBUVl5Y2dJQUFOZ0lRSUFCQkJ6WUNERUVBSVJBTW5nRUxJQUJCQURZQ0hDQUFJQlEyQWhRZ0FFSCtrWUNBQURZQ0VDQUFRUWMyQWd4QkFDRVFESjBCQ3lBQVFRQTJBaHdnQUNBQk5nSVVJQUJCanB1QWdBQTJBaEFnQUVFR05nSU1RUUFoRUF5Y0FRc2dFRUVWUmcxWElBQkJBRFlDSENBQUlBRTJBaFFnQUVITWpvQ0FBRFlDRUNBQVFTQTJBZ3hCQUNFUURKc0JDeUFBUVFBMkFnQWdFRUVCYWlFQlFTUWhFQXNnQUNBUU9nQXBJQUFvQWdRaEVDQUFRUUEyQWdRZ0FDQVFJQUVRcTRDQWdBQWlFQTFVSUFFaEFRdytDeUFBUVFBMkFnQUxRUUFoRUNBQVFRQTJBaHdnQUNBRU5nSVVJQUJCOFp1QWdBQTJBaEFnQUVFR05nSU1ESmNCQ3lBQlFSVkdEVkFnQUVFQU5nSWNJQUFnQlRZQ0ZDQUFRZkNNZ0lBQU5nSVFJQUJCR3pZQ0RFRUFJUkFNbGdFTElBQW9BZ1FoQlNBQVFRQTJBZ1FnQUNBRklCQVFxWUNBZ0FBaUJRMEJJQkJCQVdvaEJRdEJyUUVoRUF4N0N5QUFRY0VCTmdJY0lBQWdCVFlDRENBQUlCQkJBV28yQWhSQkFDRVFESk1CQ3lBQUtBSUVJUVlnQUVFQU5nSUVJQUFnQmlBUUVLbUFnSUFBSWdZTkFTQVFRUUZxSVFZTFFhNEJJUkFNZUFzZ0FFSENBVFlDSENBQUlBWTJBZ3dnQUNBUVFRRnFOZ0lVUVFBaEVBeVFBUXNnQUVFQU5nSWNJQUFnQnpZQ0ZDQUFRWmVMZ0lBQU5nSVFJQUJCRFRZQ0RFRUFJUkFNandFTElBQkJBRFlDSENBQUlBZzJBaFFnQUVIamtJQ0FBRFlDRUNBQVFRazJBZ3hCQUNFUURJNEJDeUFBUVFBMkFod2dBQ0FJTmdJVUlBQkJsSTJBZ0FBMkFoQWdBRUVoTmdJTVFRQWhFQXlOQVF0QkFTRVdRUUFoRjBFQUlSUkJBU0VRQ3lBQUlCQTZBQ3NnQ1VFQmFpRUlBa0FDUUNBQUxRQXRRUkJ4RFFBQ1FBSkFBa0FnQUMwQUtnNERBUUFDQkFzZ0ZrVU5Bd3dDQ3lBVURRRU1BZ3NnRjBVTkFRc2dBQ2dDQkNFUUlBQkJBRFlDQkNBQUlCQWdDQkN0Z0lDQUFDSVFSUTA5SUFCQnlRRTJBaHdnQUNBSU5nSVVJQUFnRURZQ0RFRUFJUkFNakFFTElBQW9BZ1FoQkNBQVFRQTJBZ1FnQUNBRUlBZ1FyWUNBZ0FBaUJFVU5kaUFBUWNvQk5nSWNJQUFnQ0RZQ0ZDQUFJQVEyQWd4QkFDRVFESXNCQ3lBQUtBSUVJUVFnQUVFQU5nSUVJQUFnQkNBSkVLMkFnSUFBSWdSRkRYUWdBRUhMQVRZQ0hDQUFJQWsyQWhRZ0FDQUVOZ0lNUVFBaEVBeUtBUXNnQUNnQ0JDRUVJQUJCQURZQ0JDQUFJQVFnQ2hDdGdJQ0FBQ0lFUlExeUlBQkJ6UUUyQWh3Z0FDQUtOZ0lVSUFBZ0JEWUNERUVBSVJBTWlRRUxBa0FnQ3kwQUFFRlFhaUlRUWY4QmNVRUtUdzBBSUFBZ0VEb0FLaUFMUVFGcUlRcEJ0Z0VoRUF4d0N5QUFLQUlFSVFRZ0FFRUFOZ0lFSUFBZ0JDQUxFSzJBZ0lBQUlnUkZEWEFnQUVIUEFUWUNIQ0FBSUFzMkFoUWdBQ0FFTmdJTVFRQWhFQXlJQVFzZ0FFRUFOZ0ljSUFBZ0JEWUNGQ0FBUVpDemdJQUFOZ0lRSUFCQkNEWUNEQ0FBUVFBMkFnQkJBQ0VRREljQkN5QUJRUlZHRFQ4Z0FFRUFOZ0ljSUFBZ0REWUNGQ0FBUWN5T2dJQUFOZ0lRSUFCQklEWUNERUVBSVJBTWhnRUxJQUJCZ1FRN0FTZ2dBQ2dDQkNFUUlBQkNBRGNEQUNBQUlCQWdERUVCYWlJTUVLdUFnSUFBSWhCRkRUZ2dBRUhUQVRZQ0hDQUFJQXcyQWhRZ0FDQVFOZ0lNUVFBaEVBeUZBUXNnQUVFQU5nSUFDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0JEWUNGQ0FBUWRpYmdJQUFOZ0lRSUFCQkNEWUNEQXlEQVFzZ0FDZ0NCQ0VRSUFCQ0FEY0RBQ0FBSUJBZ0MwRUJhaUlMRUt1QWdJQUFJaEFOQVVIR0FTRVFER2tMSUFCQkFqb0FLQXhWQ3lBQVFkVUJOZ0ljSUFBZ0N6WUNGQ0FBSUJBMkFneEJBQ0VRRElBQkN5QVFRUlZHRFRjZ0FFRUFOZ0ljSUFBZ0JEWUNGQ0FBUWFTTWdJQUFOZ0lRSUFCQkVEWUNERUVBSVJBTWZ3c2dBQzBBTkVFQlJ3MDBJQUFnQkNBQ0VMeUFnSUFBSWhCRkRUUWdFRUVWUncwMUlBQkIzQUUyQWh3Z0FDQUVOZ0lVSUFCQjFaYUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBeCtDMEVBSVJBZ0FFRUFOZ0ljSUFCQnI0dUFnQUEyQWhBZ0FFRUNOZ0lNSUFBZ0ZFRUJhallDRkF4OUMwRUFJUkFNWXd0QkFpRVFER0lMUVEwaEVBeGhDMEVQSVJBTVlBdEJKU0VRREY4TFFSTWhFQXhlQzBFVklSQU1YUXRCRmlFUURGd0xRUmNoRUF4YkMwRVlJUkFNV2d0QkdTRVFERmtMUVJvaEVBeFlDMEViSVJBTVZ3dEJIQ0VRREZZTFFSMGhFQXhWQzBFZklSQU1WQXRCSVNFUURGTUxRU01oRUF4U0MwSEdBQ0VRREZFTFFTNGhFQXhRQzBFdklSQU1Ud3RCT3lFUURFNExRVDBoRUF4TkMwSElBQ0VRREV3TFFja0FJUkFNU3d0Qnl3QWhFQXhLQzBITUFDRVFERWtMUWM0QUlSQU1TQXRCMFFBaEVBeEhDMEhWQUNFUURFWUxRZGdBSVJBTVJRdEIyUUFoRUF4RUMwSGJBQ0VRREVNTFFlUUFJUkFNUWd0QjVRQWhFQXhCQzBIeEFDRVFERUFMUWZRQUlSQU1Qd3RCalFFaEVBdytDMEdYQVNFUUREMExRYWtCSVJBTVBBdEJyQUVoRUF3N0MwSEFBU0VRRERvTFFia0JJUkFNT1F0QnJ3RWhFQXc0QzBHeEFTRVFERGNMUWJJQklSQU1OZ3RCdEFFaEVBdzFDMEcxQVNFUUREUUxRYm9CSVJBTU13dEJ2UUVoRUF3eUMwRy9BU0VRRERFTFFjRUJJUkFNTUFzZ0FFRUFOZ0ljSUFBZ0JEWUNGQ0FBUWVtTGdJQUFOZ0lRSUFCQkh6WUNERUVBSVJBTVNBc2dBRUhiQVRZQ0hDQUFJQVEyQWhRZ0FFSDZsb0NBQURZQ0VDQUFRUlUyQWd4QkFDRVFERWNMSUFCQitBQTJBaHdnQUNBTU5nSVVJQUJCeXBpQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF4R0N5QUFRZEVBTmdJY0lBQWdCVFlDRkNBQVFiQ1hnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1SUXNnQUVINUFEWUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXhFQ3lBQVFmZ0FOZ0ljSUFBZ0FUWUNGQ0FBUWNxWWdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTVF3c2dBRUhrQURZQ0hDQUFJQUUyQWhRZ0FFSGpsNENBQURZQ0VDQUFRUlUyQWd4QkFDRVFERUlMSUFCQjF3QTJBaHdnQUNBQk5nSVVJQUJCeVplQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF4QkN5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnVZMkFnQUEyQWhBZ0FFRWFOZ0lNUVFBaEVBeEFDeUFBUWNJQU5nSWNJQUFnQVRZQ0ZDQUFRZU9ZZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNUHdzZ0FFRUFOZ0lFSUFBZ0R5QVBFTEdBZ0lBQUlnUkZEUUVnQUVFNk5nSWNJQUFnQkRZQ0RDQUFJQTlCQVdvMkFoUkJBQ0VRREQ0TElBQW9BZ1FoQkNBQVFRQTJBZ1FDUUNBQUlBUWdBUkN4Z0lDQUFDSUVSUTBBSUFCQk96WUNIQ0FBSUFRMkFnd2dBQ0FCUVFGcU5nSVVRUUFoRUF3K0N5QUJRUUZxSVFFTUxRc2dEMEVCYWlFQkRDMExJQUJCQURZQ0hDQUFJQTgyQWhRZ0FFSGtrb0NBQURZQ0VDQUFRUVEyQWd4QkFDRVFERHNMSUFCQk5qWUNIQ0FBSUFRMkFoUWdBQ0FDTmdJTVFRQWhFQXc2Q3lBQVFTNDJBaHdnQUNBT05nSVVJQUFnQkRZQ0RFRUFJUkFNT1FzZ0FFSFFBRFlDSENBQUlBRTJBaFFnQUVHUm1JQ0FBRFlDRUNBQVFSVTJBZ3hCQUNFUUREZ0xJQTFCQVdvaEFRd3NDeUFBUVJVMkFod2dBQ0FCTmdJVUlBQkJncG1BZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXcyQ3lBQVFSczJBaHdnQUNBQk5nSVVJQUJCa1plQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF3MUN5QUFRUTgyQWh3Z0FDQUJOZ0lVSUFCQmtaZUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBdzBDeUFBUVFzMkFod2dBQ0FCTmdJVUlBQkJrWmVBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXd6Q3lBQVFSbzJBaHdnQUNBQk5nSVVJQUJCZ3BtQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF3eUN5QUFRUXMyQWh3Z0FDQUJOZ0lVSUFCQmdwbUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBd3hDeUFBUVFvMkFod2dBQ0FCTmdJVUlBQkI1SmFBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXd3Q3lBQVFSNDJBaHdnQUNBQk5nSVVJQUJCK1plQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF3dkN5QUFRUUEyQWh3Z0FDQVFOZ0lVSUFCQjJvMkFnQUEyQWhBZ0FFRVVOZ0lNUVFBaEVBd3VDeUFBUVFRMkFod2dBQ0FCTmdJVUlBQkJzSmlBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXd0Q3lBQVFRQTJBZ0FnQzBFQmFpRUxDMEc0QVNFUURCSUxJQUJCQURZQ0FDQVFRUUZxSVFGQjlRQWhFQXdSQ3lBQklRRUNRQ0FBTFFBcFFRVkhEUUJCNHdBaEVBd1JDMEhpQUNFUURCQUxRUUFoRUNBQVFRQTJBaHdnQUVIa2tZQ0FBRFlDRUNBQVFRYzJBZ3dnQUNBVVFRRnFOZ0lVRENnTElBQkJBRFlDQUNBWFFRRnFJUUZCd0FBaEVBd09DMEVCSVFFTElBQWdBVG9BTENBQVFRQTJBZ0FnRjBFQmFpRUJDMEVvSVJBTUN3c2dBU0VCQzBFNElSQU1DUXNDUUNBQklnOGdBa1lOQUFOQUFrQWdEeTBBQUVHQXZvQ0FBR290QUFBaUFVRUJSZzBBSUFGQkFrY05BeUFQUVFGcUlRRU1CQXNnRDBFQmFpSVBJQUpIRFFBTFFUNGhFQXdpQzBFK0lSQU1JUXNnQUVFQU9nQXNJQThoQVF3QkMwRUxJUkFNQmd0Qk9pRVFEQVVMSUFGQkFXb2hBVUV0SVJBTUJBc2dBQ0FCT2dBc0lBQkJBRFlDQUNBV1FRRnFJUUZCRENFUURBTUxJQUJCQURZQ0FDQVhRUUZxSVFGQkNpRVFEQUlMSUFCQkFEWUNBQXNnQUVFQU9nQXNJQTBoQVVFSklSQU1BQXNMUVFBaEVDQUFRUUEyQWh3Z0FDQUxOZ0lVSUFCQnpaQ0FnQUEyQWhBZ0FFRUpOZ0lNREJjTFFRQWhFQ0FBUVFBMkFod2dBQ0FLTmdJVUlBQkI2WXFBZ0FBMkFoQWdBRUVKTmdJTURCWUxRUUFoRUNBQVFRQTJBaHdnQUNBSk5nSVVJQUJCdDVDQWdBQTJBaEFnQUVFSk5nSU1EQlVMUVFBaEVDQUFRUUEyQWh3Z0FDQUlOZ0lVSUFCQm5KR0FnQUEyQWhBZ0FFRUpOZ0lNREJRTFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkJ6WkNBZ0FBMkFoQWdBRUVKTmdJTURCTUxRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCNllxQWdBQTJBaEFnQUVFSk5nSU1EQklMUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnQ1Q0FnQUEyQWhBZ0FFRUpOZ0lNREJFTFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkJuSkdBZ0FBMkFoQWdBRUVKTmdJTURCQUxRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCbDVXQWdBQTJBaEFnQUVFUE5nSU1EQThMUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQmw1V0FnQUEyQWhBZ0FFRVBOZ0lNREE0TFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkJ3SktBZ0FBMkFoQWdBRUVMTmdJTURBMExRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCbFltQWdBQTJBaEFnQUVFTE5nSU1EQXdMUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQjRZK0FnQUEyQWhBZ0FFRUtOZ0lNREFzTFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkIrNCtBZ0FBMkFoQWdBRUVLTmdJTURBb0xRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCOFptQWdBQTJBaEFnQUVFQ05nSU1EQWtMUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnhKU0FnQUEyQWhBZ0FFRUNOZ0lNREFnTFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkI4cFdBZ0FBMkFoQWdBRUVDTmdJTURBY0xJQUJCQWpZQ0hDQUFJQUUyQWhRZ0FFR2Ntb0NBQURZQ0VDQUFRUlkyQWd4QkFDRVFEQVlMUVFFaEVBd0ZDMEhVQUNFUUlBRWlCQ0FDUmcwRUlBTkJDR29nQUNBRUlBSkIyTUtBZ0FCQkNoREZnSUNBQUNBREtBSU1JUVFnQXlnQ0NBNERBUVFDQUFzUXlvQ0FnQUFBQ3lBQVFRQTJBaHdnQUVHMW1vQ0FBRFlDRUNBQVFSYzJBZ3dnQUNBRVFRRnFOZ0lVUVFBaEVBd0NDeUFBUVFBMkFod2dBQ0FFTmdJVUlBQkJ5cHFBZ0FBMkFoQWdBRUVKTmdJTVFRQWhFQXdCQ3dKQUlBRWlCQ0FDUncwQVFTSWhFQXdCQ3lBQVFZbUFnSUFBTmdJSUlBQWdCRFlDQkVFaElSQUxJQU5CRUdva2dJQ0FnQUFnRUF1dkFRRUNmeUFCS0FJQUlRWUNRQUpBSUFJZ0EwWU5BQ0FFSUFacUlRUWdCaUFEYWlBQ2F5RUhJQUlnQmtGL2N5QUZhaUlHYWlFRkEwQUNRQ0FDTFFBQUlBUXRBQUJHRFFCQkFpRUVEQU1MQWtBZ0JnMEFRUUFoQkNBRklRSU1Bd3NnQmtGL2FpRUdJQVJCQVdvaEJDQUNRUUZxSWdJZ0EwY05BQXNnQnlFR0lBTWhBZ3NnQUVFQk5nSUFJQUVnQmpZQ0FDQUFJQUkyQWdRUEN5QUJRUUEyQWdBZ0FDQUVOZ0lBSUFBZ0FqWUNCQXNLQUNBQUVNZUFnSUFBQy9JMkFRdC9JNENBZ0lBQVFSQnJJZ0VrZ0lDQWdBQUNRRUVBS0FLZzBJQ0FBQTBBUVFBUXk0Q0FnQUJCZ05TRWdBQnJJZ0pCMlFCSkRRQkJBQ0VEQWtCQkFDZ0M0Tk9BZ0FBaUJBMEFRUUJDZnpjQzdOT0FnQUJCQUVLQWdJU0FnSURBQURjQzVOT0FnQUJCQUNBQlFRaHFRWEJ4UWRpcTFhb0ZjeUlFTmdMZzA0Q0FBRUVBUVFBMkF2VFRnSUFBUVFCQkFEWUN4Tk9BZ0FBTFFRQWdBallDek5PQWdBQkJBRUdBMUlTQUFEWUN5Tk9BZ0FCQkFFR0ExSVNBQURZQ21OQ0FnQUJCQUNBRU5nS3MwSUNBQUVFQVFYODJBcWpRZ0lBQUEwQWdBMEhFMElDQUFHb2dBMEc0MElDQUFHb2lCRFlDQUNBRUlBTkJzTkNBZ0FCcUlnVTJBZ0FnQTBHODBJQ0FBR29nQlRZQ0FDQURRY3pRZ0lBQWFpQURRY0RRZ0lBQWFpSUZOZ0lBSUFVZ0JEWUNBQ0FEUWRUUWdJQUFhaUFEUWNqUWdJQUFhaUlFTmdJQUlBUWdCVFlDQUNBRFFkRFFnSUFBYWlBRU5nSUFJQU5CSUdvaUEwR0FBa2NOQUF0QmdOU0VnQUJCZUVHQTFJU0FBR3RCRDNGQkFFR0ExSVNBQUVFSWFrRVBjUnNpQTJvaUJFRUVhaUFDUVVocUlnVWdBMnNpQTBFQmNqWUNBRUVBUVFBb0F2RFRnSUFBTmdLazBJQ0FBRUVBSUFNMkFwVFFnSUFBUVFBZ0JEWUNvTkNBZ0FCQmdOU0VnQUFnQldwQk9EWUNCQXNDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQWdBRUhzQVVzTkFBSkFRUUFvQW9qUWdJQUFJZ1pCRUNBQVFSTnFRWEJ4SUFCQkMwa2JJZ0pCQTNZaUJIWWlBMEVEY1VVTkFBSkFBa0FnQTBFQmNTQUVja0VCY3lJRlFRTjBJZ1JCc05DQWdBQnFJZ01nQkVHNDBJQ0FBR29vQWdBaUJDZ0NDQ0lDUncwQVFRQWdCa0YrSUFWM2NUWUNpTkNBZ0FBTUFRc2dBeUFDTmdJSUlBSWdBellDREFzZ0JFRUlhaUVESUFRZ0JVRURkQ0lGUVFOeU5nSUVJQVFnQldvaUJDQUVLQUlFUVFGeU5nSUVEQXdMSUFKQkFDZ0NrTkNBZ0FBaUIwME5BUUpBSUFORkRRQUNRQUpBSUFNZ0JIUkJBaUFFZENJRFFRQWdBMnR5Y1NJRFFRQWdBMnR4UVg5cUlnTWdBMEVNZGtFUWNTSURkaUlFUVFWMlFRaHhJZ1VnQTNJZ0JDQUZkaUlEUVFKMlFRUnhJZ1J5SUFNZ0JIWWlBMEVCZGtFQ2NTSUVjaUFESUFSMklnTkJBWFpCQVhFaUJISWdBeUFFZG1vaUJFRURkQ0lEUWJEUWdJQUFhaUlGSUFOQnVOQ0FnQUJxS0FJQUlnTW9BZ2dpQUVjTkFFRUFJQVpCZmlBRWQzRWlCallDaU5DQWdBQU1BUXNnQlNBQU5nSUlJQUFnQlRZQ0RBc2dBeUFDUVFOeU5nSUVJQU1nQkVFRGRDSUVhaUFFSUFKcklnVTJBZ0FnQXlBQ2FpSUFJQVZCQVhJMkFnUUNRQ0FIUlEwQUlBZEJlSEZCc05DQWdBQnFJUUpCQUNnQ25OQ0FnQUFoQkFKQUFrQWdCa0VCSUFkQkEzWjBJZ2h4RFFCQkFDQUdJQWh5TmdLSTBJQ0FBQ0FDSVFnTUFRc2dBaWdDQ0NFSUN5QUlJQVEyQWd3Z0FpQUVOZ0lJSUFRZ0FqWUNEQ0FFSUFnMkFnZ0xJQU5CQ0dvaEEwRUFJQUEyQXB6UWdJQUFRUUFnQlRZQ2tOQ0FnQUFNREF0QkFDZ0NqTkNBZ0FBaUNVVU5BU0FKUVFBZ0NXdHhRWDlxSWdNZ0EwRU1ka0VRY1NJRGRpSUVRUVYyUVFoeElnVWdBM0lnQkNBRmRpSURRUUoyUVFSeElnUnlJQU1nQkhZaUEwRUJka0VDY1NJRWNpQURJQVIySWdOQkFYWkJBWEVpQkhJZ0F5QUVkbXBCQW5SQnVOS0FnQUJxS0FJQUlnQW9BZ1JCZUhFZ0Ftc2hCQ0FBSVFVQ1FBTkFBa0FnQlNnQ0VDSUREUUFnQlVFVWFpZ0NBQ0lEUlEwQ0N5QURLQUlFUVhoeElBSnJJZ1VnQkNBRklBUkpJZ1ViSVFRZ0F5QUFJQVViSVFBZ0F5RUZEQUFMQ3lBQUtBSVlJUW9DUUNBQUtBSU1JZ2dnQUVZTkFDQUFLQUlJSWdOQkFDZ0NtTkNBZ0FCSkdpQUlJQU0yQWdnZ0F5QUlOZ0lNREFzTEFrQWdBRUVVYWlJRktBSUFJZ01OQUNBQUtBSVFJZ05GRFFNZ0FFRVFhaUVGQ3dOQUlBVWhDeUFESWdoQkZHb2lCU2dDQUNJRERRQWdDRUVRYWlFRklBZ29BaEFpQXcwQUN5QUxRUUEyQWdBTUNndEJmeUVDSUFCQnYzOUxEUUFnQUVFVGFpSURRWEJ4SVFKQkFDZ0NqTkNBZ0FBaUIwVU5BRUVBSVFzQ1FDQUNRWUFDU1EwQVFSOGhDeUFDUWYvLy93ZExEUUFnQTBFSWRpSURJQU5CZ1A0L2FrRVFka0VJY1NJRGRDSUVJQVJCZ09BZmFrRVFka0VFY1NJRWRDSUZJQVZCZ0lBUGFrRVFka0VDY1NJRmRFRVBkaUFESUFSeUlBVnlheUlEUVFGMElBSWdBMEVWYW5aQkFYRnlRUnhxSVFzTFFRQWdBbXNoQkFKQUFrQUNRQUpBSUF0QkFuUkJ1TktBZ0FCcUtBSUFJZ1VOQUVFQUlRTkJBQ0VJREFFTFFRQWhBeUFDUVFCQkdTQUxRUUYyYXlBTFFSOUdHM1FoQUVFQUlRZ0RRQUpBSUFVb0FnUkJlSEVnQW1zaUJpQUVUdzBBSUFZaEJDQUZJUWdnQmcwQVFRQWhCQ0FGSVFnZ0JTRUREQU1MSUFNZ0JVRVVhaWdDQUNJR0lBWWdCU0FBUVIxMlFRUnhha0VRYWlnQ0FDSUZSaHNnQXlBR0d5RURJQUJCQVhRaEFDQUZEUUFMQ3dKQUlBTWdDSElOQUVFQUlRaEJBaUFMZENJRFFRQWdBMnR5SUFkeElnTkZEUU1nQTBFQUlBTnJjVUYvYWlJRElBTkJESFpCRUhFaUEzWWlCVUVGZGtFSWNTSUFJQU55SUFVZ0FIWWlBMEVDZGtFRWNTSUZjaUFESUFWMklnTkJBWFpCQW5FaUJYSWdBeUFGZGlJRFFRRjJRUUZ4SWdWeUlBTWdCWFpxUVFKMFFialNnSUFBYWlnQ0FDRURDeUFEUlEwQkN3TkFJQU1vQWdSQmVIRWdBbXNpQmlBRVNTRUFBa0FnQXlnQ0VDSUZEUUFnQTBFVWFpZ0NBQ0VGQ3lBR0lBUWdBQnNoQkNBRElBZ2dBQnNoQ0NBRklRTWdCUTBBQ3dzZ0NFVU5BQ0FFUVFBb0FwRFFnSUFBSUFKclR3MEFJQWdvQWhnaEN3SkFJQWdvQWd3aUFDQUlSZzBBSUFnb0FnZ2lBMEVBS0FLWTBJQ0FBRWthSUFBZ0F6WUNDQ0FESUFBMkFnd01DUXNDUUNBSVFSUnFJZ1VvQWdBaUF3MEFJQWdvQWhBaUEwVU5BeUFJUVJCcUlRVUxBMEFnQlNFR0lBTWlBRUVVYWlJRktBSUFJZ01OQUNBQVFSQnFJUVVnQUNnQ0VDSUREUUFMSUFaQkFEWUNBQXdJQ3dKQVFRQW9BcERRZ0lBQUlnTWdBa2tOQUVFQUtBS2MwSUNBQUNFRUFrQUNRQ0FESUFKcklnVkJFRWtOQUNBRUlBSnFJZ0FnQlVFQmNqWUNCRUVBSUFVMkFwRFFnSUFBUVFBZ0FEWUNuTkNBZ0FBZ0JDQURhaUFGTmdJQUlBUWdBa0VEY2pZQ0JBd0JDeUFFSUFOQkEzSTJBZ1FnQkNBRGFpSURJQU1vQWdSQkFYSTJBZ1JCQUVFQU5nS2MwSUNBQUVFQVFRQTJBcERRZ0lBQUN5QUVRUWhxSVFNTUNnc0NRRUVBS0FLVTBJQ0FBQ0lBSUFKTkRRQkJBQ2dDb05DQWdBQWlBeUFDYWlJRUlBQWdBbXNpQlVFQmNqWUNCRUVBSUFVMkFwVFFnSUFBUVFBZ0JEWUNvTkNBZ0FBZ0F5QUNRUU55TmdJRUlBTkJDR29oQXd3S0N3SkFBa0JCQUNnQzROT0FnQUJGRFFCQkFDZ0M2Tk9BZ0FBaEJBd0JDMEVBUW44M0F1elRnSUFBUVFCQ2dJQ0VnSUNBd0FBM0F1VFRnSUFBUVFBZ0FVRU1ha0Z3Y1VIWXF0V3FCWE0yQXVEVGdJQUFRUUJCQURZQzlOT0FnQUJCQUVFQU5nTEUwNENBQUVHQWdBUWhCQXRCQUNFREFrQWdCQ0FDUWNjQWFpSUhhaUlHUVFBZ0JHc2lDM0VpQ0NBQ1N3MEFRUUJCTURZQytOT0FnQUFNQ2dzQ1FFRUFLQUxBMDRDQUFDSURSUTBBQWtCQkFDZ0N1Tk9BZ0FBaUJDQUlhaUlGSUFSTkRRQWdCU0FEVFEwQkMwRUFJUU5CQUVFd05nTDQwNENBQUF3S0MwRUFMUURFMDRDQUFFRUVjUTBFQWtBQ1FBSkFRUUFvQXFEUWdJQUFJZ1JGRFFCQnlOT0FnQUFoQXdOQUFrQWdBeWdDQUNJRklBUkxEUUFnQlNBREtBSUVhaUFFU3cwREN5QURLQUlJSWdNTkFBc0xRUUFReTRDQWdBQWlBRUYvUmcwRklBZ2hCZ0pBUVFBb0F1VFRnSUFBSWdOQmYyb2lCQ0FBY1VVTkFDQUlJQUJySUFRZ0FHcEJBQ0FEYTNGcUlRWUxJQVlnQWswTkJTQUdRZjcvLy84SFN3MEZBa0JCQUNnQ3dOT0FnQUFpQTBVTkFFRUFLQUs0MDRDQUFDSUVJQVpxSWdVZ0JFME5CaUFGSUFOTERRWUxJQVlReTRDQWdBQWlBeUFBUncwQkRBY0xJQVlnQUdzZ0MzRWlCa0grLy8vL0Iwc05CQ0FHRU11QWdJQUFJZ0FnQXlnQ0FDQURLQUlFYWtZTkF5QUFJUU1MQWtBZ0EwRi9SZzBBSUFKQnlBQnFJQVpORFFBQ1FDQUhJQVpyUVFBb0F1alRnSUFBSWdScVFRQWdCR3R4SWdSQi92Ly8vd2RORFFBZ0F5RUFEQWNMQWtBZ0JCRExnSUNBQUVGL1JnMEFJQVFnQm1vaEJpQURJUUFNQnd0QkFDQUdheERMZ0lDQUFCb01CQXNnQXlFQUlBTkJmMGNOQlF3REMwRUFJUWdNQnd0QkFDRUFEQVVMSUFCQmYwY05BZ3RCQUVFQUtBTEUwNENBQUVFRWNqWUN4Tk9BZ0FBTElBaEIvdi8vL3dkTERRRWdDQkRMZ0lDQUFDRUFRUUFReTRDQWdBQWhBeUFBUVg5R0RRRWdBMEYvUmcwQklBQWdBMDhOQVNBRElBQnJJZ1lnQWtFNGFrME5BUXRCQUVFQUtBSzQwNENBQUNBR2FpSUROZ0s0MDRDQUFBSkFJQU5CQUNnQ3ZOT0FnQUJORFFCQkFDQUROZ0s4MDRDQUFBc0NRQUpBQWtBQ1FFRUFLQUtnMElDQUFDSUVSUTBBUWNqVGdJQUFJUU1EUUNBQUlBTW9BZ0FpQlNBREtBSUVJZ2hxUmcwQ0lBTW9BZ2dpQXcwQURBTUxDd0pBQWtCQkFDZ0NtTkNBZ0FBaUEwVU5BQ0FBSUFOUERRRUxRUUFnQURZQ21OQ0FnQUFMUVFBaEEwRUFJQVkyQXN6VGdJQUFRUUFnQURZQ3lOT0FnQUJCQUVGL05nS28wSUNBQUVFQVFRQW9BdURUZ0lBQU5nS3MwSUNBQUVFQVFRQTJBdFRUZ0lBQUEwQWdBMEhFMElDQUFHb2dBMEc0MElDQUFHb2lCRFlDQUNBRUlBTkJzTkNBZ0FCcUlnVTJBZ0FnQTBHODBJQ0FBR29nQlRZQ0FDQURRY3pRZ0lBQWFpQURRY0RRZ0lBQWFpSUZOZ0lBSUFVZ0JEWUNBQ0FEUWRUUWdJQUFhaUFEUWNqUWdJQUFhaUlFTmdJQUlBUWdCVFlDQUNBRFFkRFFnSUFBYWlBRU5nSUFJQU5CSUdvaUEwR0FBa2NOQUFzZ0FFRjRJQUJyUVE5eFFRQWdBRUVJYWtFUGNSc2lBMm9pQkNBR1FVaHFJZ1VnQTJzaUEwRUJjallDQkVFQVFRQW9BdkRUZ0lBQU5nS2swSUNBQUVFQUlBTTJBcFRRZ0lBQVFRQWdCRFlDb05DQWdBQWdBQ0FGYWtFNE5nSUVEQUlMSUFNdEFBeEJDSEVOQUNBRUlBVkpEUUFnQkNBQVR3MEFJQVJCZUNBRWEwRVBjVUVBSUFSQkNHcEJEM0ViSWdWcUlnQkJBQ2dDbE5DQWdBQWdCbW9pQ3lBRmF5SUZRUUZ5TmdJRUlBTWdDQ0FHYWpZQ0JFRUFRUUFvQXZEVGdJQUFOZ0trMElDQUFFRUFJQVUyQXBUUWdJQUFRUUFnQURZQ29OQ0FnQUFnQkNBTGFrRTROZ0lFREFFTEFrQWdBRUVBS0FLWTBJQ0FBQ0lJVHcwQVFRQWdBRFlDbU5DQWdBQWdBQ0VJQ3lBQUlBWnFJUVZCeU5PQWdBQWhBd0pBQWtBQ1FBSkFBa0FDUUFKQUEwQWdBeWdDQUNBRlJnMEJJQU1vQWdnaUF3MEFEQUlMQ3lBRExRQU1RUWh4UlEwQkMwSEkwNENBQUNFREEwQUNRQ0FES0FJQUlnVWdCRXNOQUNBRklBTW9BZ1JxSWdVZ0JFc05Bd3NnQXlnQ0NDRUREQUFMQ3lBRElBQTJBZ0FnQXlBREtBSUVJQVpxTmdJRUlBQkJlQ0FBYTBFUGNVRUFJQUJCQ0dwQkQzRWJhaUlMSUFKQkEzSTJBZ1FnQlVGNElBVnJRUTl4UVFBZ0JVRUlha0VQY1J0cUlnWWdDeUFDYWlJQ2F5RURBa0FnQmlBRVJ3MEFRUUFnQWpZQ29OQ0FnQUJCQUVFQUtBS1UwSUNBQUNBRGFpSUROZ0tVMElDQUFDQUNJQU5CQVhJMkFnUU1Bd3NDUUNBR1FRQW9BcHpRZ0lBQVJ3MEFRUUFnQWpZQ25OQ0FnQUJCQUVFQUtBS1EwSUNBQUNBRGFpSUROZ0tRMElDQUFDQUNJQU5CQVhJMkFnUWdBaUFEYWlBRE5nSUFEQU1MQWtBZ0JpZ0NCQ0lFUVFOeFFRRkhEUUFnQkVGNGNTRUhBa0FDUUNBRVFmOEJTdzBBSUFZb0FnZ2lCU0FFUVFOMklnaEJBM1JCc05DQWdBQnFJZ0JHR2dKQUlBWW9BZ3dpQkNBRlJ3MEFRUUJCQUNnQ2lOQ0FnQUJCZmlBSWQzRTJBb2pRZ0lBQURBSUxJQVFnQUVZYUlBUWdCVFlDQ0NBRklBUTJBZ3dNQVFzZ0JpZ0NHQ0VKQWtBQ1FDQUdLQUlNSWdBZ0JrWU5BQ0FHS0FJSUlnUWdDRWthSUFBZ0JEWUNDQ0FFSUFBMkFnd01BUXNDUUNBR1FSUnFJZ1FvQWdBaUJRMEFJQVpCRUdvaUJDZ0NBQ0lGRFFCQkFDRUFEQUVMQTBBZ0JDRUlJQVVpQUVFVWFpSUVLQUlBSWdVTkFDQUFRUkJxSVFRZ0FDZ0NFQ0lGRFFBTElBaEJBRFlDQUFzZ0NVVU5BQUpBQWtBZ0JpQUdLQUljSWdWQkFuUkJ1TktBZ0FCcUlnUW9BZ0JIRFFBZ0JDQUFOZ0lBSUFBTkFVRUFRUUFvQW96UWdJQUFRWDRnQlhkeE5nS00wSUNBQUF3Q0N5QUpRUkJCRkNBSktBSVFJQVpHRzJvZ0FEWUNBQ0FBUlEwQkN5QUFJQWsyQWhnQ1FDQUdLQUlRSWdSRkRRQWdBQ0FFTmdJUUlBUWdBRFlDR0FzZ0JpZ0NGQ0lFUlEwQUlBQkJGR29nQkRZQ0FDQUVJQUEyQWhnTElBY2dBMm9oQXlBR0lBZHFJZ1lvQWdRaEJBc2dCaUFFUVg1eE5nSUVJQUlnQTJvZ0F6WUNBQ0FDSUFOQkFYSTJBZ1FDUUNBRFFmOEJTdzBBSUFOQmVIRkJzTkNBZ0FCcUlRUUNRQUpBUVFBb0FvalFnSUFBSWdWQkFTQURRUU4yZENJRGNRMEFRUUFnQlNBRGNqWUNpTkNBZ0FBZ0JDRUREQUVMSUFRb0FnZ2hBd3NnQXlBQ05nSU1JQVFnQWpZQ0NDQUNJQVEyQWd3Z0FpQUROZ0lJREFNTFFSOGhCQUpBSUFOQi8vLy9CMHNOQUNBRFFRaDJJZ1FnQkVHQS9qOXFRUkIyUVFoeElnUjBJZ1VnQlVHQTRCOXFRUkIyUVFSeElnVjBJZ0FnQUVHQWdBOXFRUkIyUVFKeElnQjBRUTkySUFRZ0JYSWdBSEpySWdSQkFYUWdBeUFFUVJWcWRrRUJjWEpCSEdvaEJBc2dBaUFFTmdJY0lBSkNBRGNDRUNBRVFRSjBRYmpTZ0lBQWFpRUZBa0JCQUNnQ2pOQ0FnQUFpQUVFQklBUjBJZ2h4RFFBZ0JTQUNOZ0lBUVFBZ0FDQUljallDak5DQWdBQWdBaUFGTmdJWUlBSWdBallDQ0NBQ0lBSTJBZ3dNQXdzZ0EwRUFRUmtnQkVFQmRtc2dCRUVmUmh0MElRUWdCU2dDQUNFQUEwQWdBQ0lGS0FJRVFYaHhJQU5HRFFJZ0JFRWRkaUVBSUFSQkFYUWhCQ0FGSUFCQkJIRnFRUkJxSWdnb0FnQWlBQTBBQ3lBSUlBSTJBZ0FnQWlBRk5nSVlJQUlnQWpZQ0RDQUNJQUkyQWdnTUFnc2dBRUY0SUFCclFROXhRUUFnQUVFSWFrRVBjUnNpQTJvaUN5QUdRVWhxSWdnZ0Eyc2lBMEVCY2pZQ0JDQUFJQWhxUVRnMkFnUWdCQ0FGUVRjZ0JXdEJEM0ZCQUNBRlFVbHFRUTl4RzJwQlFXb2lDQ0FJSUFSQkVHcEpHeUlJUVNNMkFnUkJBRUVBS0FMdzA0Q0FBRFlDcE5DQWdBQkJBQ0FETmdLVTBJQ0FBRUVBSUFzMkFxRFFnSUFBSUFoQkVHcEJBQ2tDME5PQWdBQTNBZ0FnQ0VFQUtRTEkwNENBQURjQ0NFRUFJQWhCQ0dvMkF0RFRnSUFBUVFBZ0JqWUN6Tk9BZ0FCQkFDQUFOZ0xJMDRDQUFFRUFRUUEyQXRUVGdJQUFJQWhCSkdvaEF3TkFJQU5CQnpZQ0FDQURRUVJxSWdNZ0JVa05BQXNnQ0NBRVJnMERJQWdnQ0NnQ0JFRitjVFlDQkNBSUlBZ2dCR3NpQURZQ0FDQUVJQUJCQVhJMkFnUUNRQ0FBUWY4QlN3MEFJQUJCZUhGQnNOQ0FnQUJxSVFNQ1FBSkFRUUFvQW9qUWdJQUFJZ1ZCQVNBQVFRTjJkQ0lBY1EwQVFRQWdCU0FBY2pZQ2lOQ0FnQUFnQXlFRkRBRUxJQU1vQWdnaEJRc2dCU0FFTmdJTUlBTWdCRFlDQ0NBRUlBTTJBZ3dnQkNBRk5nSUlEQVFMUVI4aEF3SkFJQUJCLy8vL0Iwc05BQ0FBUVFoMklnTWdBMEdBL2o5cVFSQjJRUWh4SWdOMElnVWdCVUdBNEI5cVFSQjJRUVJ4SWdWMElnZ2dDRUdBZ0E5cVFSQjJRUUp4SWdoMFFROTJJQU1nQlhJZ0NISnJJZ05CQVhRZ0FDQURRUlZxZGtFQmNYSkJIR29oQXdzZ0JDQUROZ0ljSUFSQ0FEY0NFQ0FEUVFKMFFialNnSUFBYWlFRkFrQkJBQ2dDak5DQWdBQWlDRUVCSUFOMElnWnhEUUFnQlNBRU5nSUFRUUFnQ0NBR2NqWUNqTkNBZ0FBZ0JDQUZOZ0lZSUFRZ0JEWUNDQ0FFSUFRMkFnd01CQXNnQUVFQVFSa2dBMEVCZG1zZ0EwRWZSaHQwSVFNZ0JTZ0NBQ0VJQTBBZ0NDSUZLQUlFUVhoeElBQkdEUU1nQTBFZGRpRUlJQU5CQVhRaEF5QUZJQWhCQkhGcVFSQnFJZ1lvQWdBaUNBMEFDeUFHSUFRMkFnQWdCQ0FGTmdJWUlBUWdCRFlDRENBRUlBUTJBZ2dNQXdzZ0JTZ0NDQ0lESUFJMkFnd2dCU0FDTmdJSUlBSkJBRFlDR0NBQ0lBVTJBZ3dnQWlBRE5nSUlDeUFMUVFocUlRTU1CUXNnQlNnQ0NDSURJQVEyQWd3Z0JTQUVOZ0lJSUFSQkFEWUNHQ0FFSUFVMkFnd2dCQ0FETmdJSUMwRUFLQUtVMElDQUFDSURJQUpORFFCQkFDZ0NvTkNBZ0FBaUJDQUNhaUlGSUFNZ0Ftc2lBMEVCY2pZQ0JFRUFJQU0yQXBUUWdJQUFRUUFnQlRZQ29OQ0FnQUFnQkNBQ1FRTnlOZ0lFSUFSQkNHb2hBd3dEQzBFQUlRTkJBRUV3TmdMNDA0Q0FBQXdDQ3dKQUlBdEZEUUFDUUFKQUlBZ2dDQ2dDSENJRlFRSjBRYmpTZ0lBQWFpSURLQUlBUncwQUlBTWdBRFlDQUNBQURRRkJBQ0FIUVg0Z0JYZHhJZ2MyQW96UWdJQUFEQUlMSUF0QkVFRVVJQXNvQWhBZ0NFWWJhaUFBTmdJQUlBQkZEUUVMSUFBZ0N6WUNHQUpBSUFnb0FoQWlBMFVOQUNBQUlBTTJBaEFnQXlBQU5nSVlDeUFJUVJScUtBSUFJZ05GRFFBZ0FFRVVhaUFETmdJQUlBTWdBRFlDR0FzQ1FBSkFJQVJCRDBzTkFDQUlJQVFnQW1vaUEwRURjallDQkNBSUlBTnFJZ01nQXlnQ0JFRUJjallDQkF3QkN5QUlJQUpxSWdBZ0JFRUJjallDQkNBSUlBSkJBM0kyQWdRZ0FDQUVhaUFFTmdJQUFrQWdCRUgvQVVzTkFDQUVRWGh4UWJEUWdJQUFhaUVEQWtBQ1FFRUFLQUtJMElDQUFDSUZRUUVnQkVFRGRuUWlCSEVOQUVFQUlBVWdCSEkyQW9qUWdJQUFJQU1oQkF3QkN5QURLQUlJSVFRTElBUWdBRFlDRENBRElBQTJBZ2dnQUNBRE5nSU1JQUFnQkRZQ0NBd0JDMEVmSVFNQ1FDQUVRZi8vL3dkTERRQWdCRUVJZGlJRElBTkJnUDQvYWtFUWRrRUljU0lEZENJRklBVkJnT0FmYWtFUWRrRUVjU0lGZENJQ0lBSkJnSUFQYWtFUWRrRUNjU0lDZEVFUGRpQURJQVZ5SUFKeWF5SURRUUYwSUFRZ0EwRVZhblpCQVhGeVFSeHFJUU1MSUFBZ0F6WUNIQ0FBUWdBM0FoQWdBMEVDZEVHNDBvQ0FBR29oQlFKQUlBZEJBU0FEZENJQ2NRMEFJQVVnQURZQ0FFRUFJQWNnQW5JMkFvelFnSUFBSUFBZ0JUWUNHQ0FBSUFBMkFnZ2dBQ0FBTmdJTURBRUxJQVJCQUVFWklBTkJBWFpySUFOQkgwWWJkQ0VESUFVb0FnQWhBZ0pBQTBBZ0FpSUZLQUlFUVhoeElBUkdEUUVnQTBFZGRpRUNJQU5CQVhRaEF5QUZJQUpCQkhGcVFSQnFJZ1lvQWdBaUFnMEFDeUFHSUFBMkFnQWdBQ0FGTmdJWUlBQWdBRFlDRENBQUlBQTJBZ2dNQVFzZ0JTZ0NDQ0lESUFBMkFnd2dCU0FBTmdJSUlBQkJBRFlDR0NBQUlBVTJBZ3dnQUNBRE5nSUlDeUFJUVFocUlRTU1BUXNDUUNBS1JRMEFBa0FDUUNBQUlBQW9BaHdpQlVFQ2RFRzQwb0NBQUdvaUF5Z0NBRWNOQUNBRElBZzJBZ0FnQ0EwQlFRQWdDVUYrSUFWM2NUWUNqTkNBZ0FBTUFnc2dDa0VRUVJRZ0NpZ0NFQ0FBUmh0cUlBZzJBZ0FnQ0VVTkFRc2dDQ0FLTmdJWUFrQWdBQ2dDRUNJRFJRMEFJQWdnQXpZQ0VDQURJQWcyQWhnTElBQkJGR29vQWdBaUEwVU5BQ0FJUVJScUlBTTJBZ0FnQXlBSU5nSVlDd0pBQWtBZ0JFRVBTdzBBSUFBZ0JDQUNhaUlEUVFOeU5nSUVJQUFnQTJvaUF5QURLQUlFUVFGeU5nSUVEQUVMSUFBZ0Ftb2lCU0FFUVFGeU5nSUVJQUFnQWtFRGNqWUNCQ0FGSUFScUlBUTJBZ0FDUUNBSFJRMEFJQWRCZUhGQnNOQ0FnQUJxSVFKQkFDZ0NuTkNBZ0FBaEF3SkFBa0JCQVNBSFFRTjJkQ0lJSUFaeERRQkJBQ0FJSUFaeU5nS0kwSUNBQUNBQ0lRZ01BUXNnQWlnQ0NDRUlDeUFJSUFNMkFnd2dBaUFETmdJSUlBTWdBallDRENBRElBZzJBZ2dMUVFBZ0JUWUNuTkNBZ0FCQkFDQUVOZ0tRMElDQUFBc2dBRUVJYWlFREN5QUJRUkJxSklDQWdJQUFJQU1MQ2dBZ0FCREpnSUNBQUF2aURRRUhmd0pBSUFCRkRRQWdBRUY0YWlJQklBQkJmR29vQWdBaUFrRjRjU0lBYWlFREFrQWdBa0VCY1EwQUlBSkJBM0ZGRFFFZ0FTQUJLQUlBSWdKcklnRkJBQ2dDbU5DQWdBQWlCRWtOQVNBQ0lBQnFJUUFDUUNBQlFRQW9BcHpRZ0lBQVJnMEFBa0FnQWtIL0FVc05BQ0FCS0FJSUlnUWdBa0VEZGlJRlFRTjBRYkRRZ0lBQWFpSUdSaG9DUUNBQktBSU1JZ0lnQkVjTkFFRUFRUUFvQW9qUWdJQUFRWDRnQlhkeE5nS0kwSUNBQUF3REN5QUNJQVpHR2lBQ0lBUTJBZ2dnQkNBQ05nSU1EQUlMSUFFb0FoZ2hCd0pBQWtBZ0FTZ0NEQ0lHSUFGR0RRQWdBU2dDQ0NJQ0lBUkpHaUFHSUFJMkFnZ2dBaUFHTmdJTURBRUxBa0FnQVVFVWFpSUNLQUlBSWdRTkFDQUJRUkJxSWdJb0FnQWlCQTBBUVFBaEJnd0JDd05BSUFJaEJTQUVJZ1pCRkdvaUFpZ0NBQ0lFRFFBZ0JrRVFhaUVDSUFZb0FoQWlCQTBBQ3lBRlFRQTJBZ0FMSUFkRkRRRUNRQUpBSUFFZ0FTZ0NIQ0lFUVFKMFFialNnSUFBYWlJQ0tBSUFSdzBBSUFJZ0JqWUNBQ0FHRFFGQkFFRUFLQUtNMElDQUFFRitJQVIzY1RZQ2pOQ0FnQUFNQXdzZ0IwRVFRUlFnQnlnQ0VDQUJSaHRxSUFZMkFnQWdCa1VOQWdzZ0JpQUhOZ0lZQWtBZ0FTZ0NFQ0lDUlEwQUlBWWdBallDRUNBQ0lBWTJBaGdMSUFFb0FoUWlBa1VOQVNBR1FSUnFJQUkyQWdBZ0FpQUdOZ0lZREFFTElBTW9BZ1FpQWtFRGNVRURSdzBBSUFNZ0FrRitjVFlDQkVFQUlBQTJBcERRZ0lBQUlBRWdBR29nQURZQ0FDQUJJQUJCQVhJMkFnUVBDeUFCSUFOUERRQWdBeWdDQkNJQ1FRRnhSUTBBQWtBQ1FDQUNRUUp4RFFBQ1FDQURRUUFvQXFEUWdJQUFSdzBBUVFBZ0FUWUNvTkNBZ0FCQkFFRUFLQUtVMElDQUFDQUFhaUlBTmdLVTBJQ0FBQ0FCSUFCQkFYSTJBZ1FnQVVFQUtBS2MwSUNBQUVjTkEwRUFRUUEyQXBEUWdJQUFRUUJCQURZQ25OQ0FnQUFQQ3dKQUlBTkJBQ2dDbk5DQWdBQkhEUUJCQUNBQk5nS2MwSUNBQUVFQVFRQW9BcERRZ0lBQUlBQnFJZ0EyQXBEUWdJQUFJQUVnQUVFQmNqWUNCQ0FCSUFCcUlBQTJBZ0FQQ3lBQ1FYaHhJQUJxSVFBQ1FBSkFJQUpCL3dGTERRQWdBeWdDQ0NJRUlBSkJBM1lpQlVFRGRFR3cwSUNBQUdvaUJrWWFBa0FnQXlnQ0RDSUNJQVJIRFFCQkFFRUFLQUtJMElDQUFFRitJQVYzY1RZQ2lOQ0FnQUFNQWdzZ0FpQUdSaG9nQWlBRU5nSUlJQVFnQWpZQ0RBd0JDeUFES0FJWUlRY0NRQUpBSUFNb0Fnd2lCaUFEUmcwQUlBTW9BZ2dpQWtFQUtBS1kwSUNBQUVrYUlBWWdBallDQ0NBQ0lBWTJBZ3dNQVFzQ1FDQURRUlJxSWdJb0FnQWlCQTBBSUFOQkVHb2lBaWdDQUNJRURRQkJBQ0VHREFFTEEwQWdBaUVGSUFRaUJrRVVhaUlDS0FJQUlnUU5BQ0FHUVJCcUlRSWdCaWdDRUNJRURRQUxJQVZCQURZQ0FBc2dCMFVOQUFKQUFrQWdBeUFES0FJY0lnUkJBblJCdU5LQWdBQnFJZ0lvQWdCSERRQWdBaUFHTmdJQUlBWU5BVUVBUVFBb0FvelFnSUFBUVg0Z0JIZHhOZ0tNMElDQUFBd0NDeUFIUVJCQkZDQUhLQUlRSUFOR0cyb2dCallDQUNBR1JRMEJDeUFHSUFjMkFoZ0NRQ0FES0FJUUlnSkZEUUFnQmlBQ05nSVFJQUlnQmpZQ0dBc2dBeWdDRkNJQ1JRMEFJQVpCRkdvZ0FqWUNBQ0FDSUFZMkFoZ0xJQUVnQUdvZ0FEWUNBQ0FCSUFCQkFYSTJBZ1FnQVVFQUtBS2MwSUNBQUVjTkFVRUFJQUEyQXBEUWdJQUFEd3NnQXlBQ1FYNXhOZ0lFSUFFZ0FHb2dBRFlDQUNBQklBQkJBWEkyQWdRTEFrQWdBRUgvQVVzTkFDQUFRWGh4UWJEUWdJQUFhaUVDQWtBQ1FFRUFLQUtJMElDQUFDSUVRUUVnQUVFRGRuUWlBSEVOQUVFQUlBUWdBSEkyQW9qUWdJQUFJQUloQUF3QkN5QUNLQUlJSVFBTElBQWdBVFlDRENBQ0lBRTJBZ2dnQVNBQ05nSU1JQUVnQURZQ0NBOExRUjhoQWdKQUlBQkIvLy8vQjBzTkFDQUFRUWgySWdJZ0FrR0EvajlxUVJCMlFRaHhJZ0owSWdRZ0JFR0E0QjlxUVJCMlFRUnhJZ1IwSWdZZ0JrR0FnQTlxUVJCMlFRSnhJZ1owUVE5MklBSWdCSElnQm5KcklnSkJBWFFnQUNBQ1FSVnFka0VCY1hKQkhHb2hBZ3NnQVNBQ05nSWNJQUZDQURjQ0VDQUNRUUowUWJqU2dJQUFhaUVFQWtBQ1FFRUFLQUtNMElDQUFDSUdRUUVnQW5RaUEzRU5BQ0FFSUFFMkFnQkJBQ0FHSUFOeU5nS00wSUNBQUNBQklBUTJBaGdnQVNBQk5nSUlJQUVnQVRZQ0RBd0JDeUFBUVFCQkdTQUNRUUYyYXlBQ1FSOUdHM1FoQWlBRUtBSUFJUVlDUUFOQUlBWWlCQ2dDQkVGNGNTQUFSZzBCSUFKQkhYWWhCaUFDUVFGMElRSWdCQ0FHUVFSeGFrRVFhaUlES0FJQUlnWU5BQXNnQXlBQk5nSUFJQUVnQkRZQ0dDQUJJQUUyQWd3Z0FTQUJOZ0lJREFFTElBUW9BZ2dpQUNBQk5nSU1JQVFnQVRZQ0NDQUJRUUEyQWhnZ0FTQUVOZ0lNSUFFZ0FEWUNDQXRCQUVFQUtBS28wSUNBQUVGL2FpSUJRWDhnQVJzMkFxalFnSUFBQ3dzRUFBQUFDMDRBQWtBZ0FBMEFQd0JCRUhRUEN3SkFJQUJCLy84RGNRMEFJQUJCZjB3TkFBSkFJQUJCRUhaQUFDSUFRWDlIRFFCQkFFRXdOZ0w0MDRDQUFFRi9Ed3NnQUVFUWRBOExFTXFBZ0lBQUFBdnlBZ0lEZndGK0FrQWdBa1VOQUNBQUlBRTZBQUFnQWlBQWFpSURRWDlxSUFFNkFBQWdBa0VEU1EwQUlBQWdBVG9BQWlBQUlBRTZBQUVnQTBGOWFpQUJPZ0FBSUFOQmZtb2dBVG9BQUNBQ1FRZEpEUUFnQUNBQk9nQURJQU5CZkdvZ0FUb0FBQ0FDUVFsSkRRQWdBRUVBSUFCclFRTnhJZ1JxSWdNZ0FVSC9BWEZCZ1lLRUNHd2lBVFlDQUNBRElBSWdCR3RCZkhFaUJHb2lBa0Y4YWlBQk5nSUFJQVJCQ1VrTkFDQURJQUUyQWdnZ0F5QUJOZ0lFSUFKQmVHb2dBVFlDQUNBQ1FYUnFJQUUyQWdBZ0JFRVpTUTBBSUFNZ0FUWUNHQ0FESUFFMkFoUWdBeUFCTmdJUUlBTWdBVFlDRENBQ1FYQnFJQUUyQWdBZ0FrRnNhaUFCTmdJQUlBSkJhR29nQVRZQ0FDQUNRV1JxSUFFMkFnQWdCQ0FEUVFSeFFSaHlJZ1ZySWdKQklFa05BQ0FCclVLQmdJQ0FFSDRoQmlBRElBVnFJUUVEUUNBQklBWTNBeGdnQVNBR053TVFJQUVnQmpjRENDQUJJQVkzQXdBZ0FVRWdhaUVCSUFKQllHb2lBa0VmU3cwQUN3c2dBQXNMamtnQkFFR0FDQXVHU0FFQUFBQUNBQUFBQXdBQUFBQUFBQUFBQUFBQUJBQUFBQVVBQUFBQUFBQUFBQUFBQUFZQUFBQUhBQUFBQ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVNXNTJZV3hwWkNCamFHRnlJR2x1SUhWeWJDQnhkV1Z5ZVFCVGNHRnVJR05oYkd4aVlXTnJJR1Z5Y205eUlHbHVJRzl1WDJKdlpIa0FRMjl1ZEdWdWRDMU1aVzVuZEdnZ2IzWmxjbVpzYjNjQVEyaDFibXNnYzJsNlpTQnZkbVZ5Wm14dmR3QlNaWE53YjI1elpTQnZkbVZ5Wm14dmR3QkpiblpoYkdsa0lHMWxkR2h2WkNCbWIzSWdTRlJVVUM5NExuZ2djbVZ4ZFdWemRBQkpiblpoYkdsa0lHMWxkR2h2WkNCbWIzSWdVbFJUVUM5NExuZ2djbVZ4ZFdWemRBQkZlSEJsWTNSbFpDQlRUMVZTUTBVZ2JXVjBhRzlrSUdadmNpQkpRMFV2ZUM1NElISmxjWFZsYzNRQVNXNTJZV3hwWkNCamFHRnlJR2x1SUhWeWJDQm1jbUZuYldWdWRDQnpkR0Z5ZEFCRmVIQmxZM1JsWkNCa2IzUUFVM0JoYmlCallXeHNZbUZqYXlCbGNuSnZjaUJwYmlCdmJsOXpkR0YwZFhNQVNXNTJZV3hwWkNCeVpYTndiMjV6WlNCemRHRjBkWE1BU1c1MllXeHBaQ0JqYUdGeVlXTjBaWElnYVc0Z1kyaDFibXNnWlhoMFpXNXphVzl1Y3dCVmMyVnlJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDl5WlhObGRHQWdZMkZzYkdKaFkyc2daWEp5YjNJQVlHOXVYMk5vZFc1clgyaGxZV1JsY21BZ1kyRnNiR0poWTJzZ1pYSnliM0lBWUc5dVgyMWxjM05oWjJWZlltVm5hVzVnSUdOaGJHeGlZV05ySUdWeWNtOXlBR0J2Ymw5amFIVnVhMTlsZUhSbGJuTnBiMjVmZG1Gc2RXVmdJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDl6ZEdGMGRYTmZZMjl0Y0d4bGRHVmdJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDkyWlhKemFXOXVYMk52YlhCc1pYUmxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmZFhKc1gyTnZiWEJzWlhSbFlDQmpZV3hzWW1GamF5Qmxjbkp2Y2dCZ2IyNWZZMmgxYm10ZlkyOXRjR3hsZEdWZ0lHTmhiR3hpWVdOcklHVnljbTl5QUdCdmJsOW9aV0ZrWlhKZmRtRnNkV1ZmWTI5dGNHeGxkR1ZnSUdOaGJHeGlZV05ySUdWeWNtOXlBR0J2Ymw5dFpYTnpZV2RsWDJOdmJYQnNaWFJsWUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZmJXVjBhRzlrWDJOdmJYQnNaWFJsWUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZmFHVmhaR1Z5WDJacFpXeGtYMk52YlhCc1pYUmxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmWTJoMWJtdGZaWGgwWlc1emFXOXVYMjVoYldWZ0lHTmhiR3hpWVdOcklHVnljbTl5QUZWdVpYaHdaV04wWldRZ1kyaGhjaUJwYmlCMWNtd2djMlZ5ZG1WeUFFbHVkbUZzYVdRZ2FHVmhaR1Z5SUhaaGJIVmxJR05vWVhJQVNXNTJZV3hwWkNCb1pXRmtaWElnWm1sbGJHUWdZMmhoY2dCVGNHRnVJR05oYkd4aVlXTnJJR1Z5Y205eUlHbHVJRzl1WDNabGNuTnBiMjRBU1c1MllXeHBaQ0J0YVc1dmNpQjJaWEp6YVc5dUFFbHVkbUZzYVdRZ2JXRnFiM0lnZG1WeWMybHZiZ0JGZUhCbFkzUmxaQ0J6Y0dGalpTQmhablJsY2lCMlpYSnphVzl1QUVWNGNHVmpkR1ZrSUVOU1RFWWdZV1owWlhJZ2RtVnljMmx2YmdCSmJuWmhiR2xrSUVoVVZGQWdkbVZ5YzJsdmJnQkpiblpoYkdsa0lHaGxZV1JsY2lCMGIydGxiZ0JUY0dGdUlHTmhiR3hpWVdOcklHVnljbTl5SUdsdUlHOXVYM1Z5YkFCSmJuWmhiR2xrSUdOb1lYSmhZM1JsY25NZ2FXNGdkWEpzQUZWdVpYaHdaV04wWldRZ2MzUmhjblFnWTJoaGNpQnBiaUIxY213QVJHOTFZbXhsSUVBZ2FXNGdkWEpzQUVWdGNIUjVJRU52Ym5SbGJuUXRUR1Z1WjNSb0FFbHVkbUZzYVdRZ1kyaGhjbUZqZEdWeUlHbHVJRU52Ym5SbGJuUXRUR1Z1WjNSb0FFUjFjR3hwWTJGMFpTQkRiMjUwWlc1MExVeGxibWQwYUFCSmJuWmhiR2xrSUdOb1lYSWdhVzRnZFhKc0lIQmhkR2dBUTI5dWRHVnVkQzFNWlc1bmRHZ2dZMkZ1SjNRZ1ltVWdjSEpsYzJWdWRDQjNhWFJvSUZSeVlXNXpabVZ5TFVWdVkyOWthVzVuQUVsdWRtRnNhV1FnWTJoaGNtRmpkR1Z5SUdsdUlHTm9kVzVySUhOcGVtVUFVM0JoYmlCallXeHNZbUZqYXlCbGNuSnZjaUJwYmlCdmJsOW9aV0ZrWlhKZmRtRnNkV1VBVTNCaGJpQmpZV3hzWW1GamF5Qmxjbkp2Y2lCcGJpQnZibDlqYUhWdWExOWxlSFJsYm5OcGIyNWZkbUZzZFdVQVNXNTJZV3hwWkNCamFHRnlZV04wWlhJZ2FXNGdZMmgxYm1zZ1pYaDBaVzV6YVc5dWN5QjJZV3gxWlFCTmFYTnphVzVuSUdWNGNHVmpkR1ZrSUV4R0lHRm1kR1Z5SUdobFlXUmxjaUIyWVd4MVpRQkpiblpoYkdsa0lHQlVjbUZ1YzJabGNpMUZibU52WkdsdVoyQWdhR1ZoWkdWeUlIWmhiSFZsQUVsdWRtRnNhV1FnWTJoaGNtRmpkR1Z5SUdsdUlHTm9kVzVySUdWNGRHVnVjMmx2Ym5NZ2NYVnZkR1VnZG1Gc2RXVUFTVzUyWVd4cFpDQmphR0Z5WVdOMFpYSWdhVzRnWTJoMWJtc2daWGgwWlc1emFXOXVjeUJ4ZFc5MFpXUWdkbUZzZFdVQVVHRjFjMlZrSUdKNUlHOXVYMmhsWVdSbGNuTmZZMjl0Y0d4bGRHVUFTVzUyWVd4cFpDQkZUMFlnYzNSaGRHVUFiMjVmY21WelpYUWdjR0YxYzJVQWIyNWZZMmgxYm10ZmFHVmhaR1Z5SUhCaGRYTmxBRzl1WDIxbGMzTmhaMlZmWW1WbmFXNGdjR0YxYzJVQWIyNWZZMmgxYm10ZlpYaDBaVzV6YVc5dVgzWmhiSFZsSUhCaGRYTmxBRzl1WDNOMFlYUjFjMTlqYjIxd2JHVjBaU0J3WVhWelpRQnZibDkyWlhKemFXOXVYMk52YlhCc1pYUmxJSEJoZFhObEFHOXVYM1Z5YkY5amIyMXdiR1YwWlNCd1lYVnpaUUJ2Ymw5amFIVnVhMTlqYjIxd2JHVjBaU0J3WVhWelpRQnZibDlvWldGa1pYSmZkbUZzZFdWZlkyOXRjR3hsZEdVZ2NHRjFjMlVBYjI1ZmJXVnpjMkZuWlY5amIyMXdiR1YwWlNCd1lYVnpaUUJ2Ymw5dFpYUm9iMlJmWTI5dGNHeGxkR1VnY0dGMWMyVUFiMjVmYUdWaFpHVnlYMlpwWld4a1gyTnZiWEJzWlhSbElIQmhkWE5sQUc5dVgyTm9kVzVyWDJWNGRHVnVjMmx2Ymw5dVlXMWxJSEJoZFhObEFGVnVaWGh3WldOMFpXUWdjM0JoWTJVZ1lXWjBaWElnYzNSaGNuUWdiR2x1WlFCVGNHRnVJR05oYkd4aVlXTnJJR1Z5Y205eUlHbHVJRzl1WDJOb2RXNXJYMlY0ZEdWdWMybHZibDl1WVcxbEFFbHVkbUZzYVdRZ1kyaGhjbUZqZEdWeUlHbHVJR05vZFc1cklHVjRkR1Z1YzJsdmJuTWdibUZ0WlFCUVlYVnpaU0J2YmlCRFQwNU9SVU5VTDFWd1ozSmhaR1VBVUdGMWMyVWdiMjRnVUZKSkwxVndaM0poWkdVQVJYaHdaV04wWldRZ1NGUlVVQzh5SUVOdmJtNWxZM1JwYjI0Z1VISmxabUZqWlFCVGNHRnVJR05oYkd4aVlXTnJJR1Z5Y205eUlHbHVJRzl1WDIxbGRHaHZaQUJGZUhCbFkzUmxaQ0J6Y0dGalpTQmhablJsY2lCdFpYUm9iMlFBVTNCaGJpQmpZV3hzWW1GamF5Qmxjbkp2Y2lCcGJpQnZibDlvWldGa1pYSmZabWxsYkdRQVVHRjFjMlZrQUVsdWRtRnNhV1FnZDI5eVpDQmxibU52ZFc1MFpYSmxaQUJKYm5aaGJHbGtJRzFsZEdodlpDQmxibU52ZFc1MFpYSmxaQUJWYm1WNGNHVmpkR1ZrSUdOb1lYSWdhVzRnZFhKc0lITmphR1Z0WVFCU1pYRjFaWE4wSUdoaGN5QnBiblpoYkdsa0lHQlVjbUZ1YzJabGNpMUZibU52WkdsdVoyQUFVMWRKVkVOSVgxQlNUMWhaQUZWVFJWOVFVazlZV1FCTlMwRkRWRWxXU1ZSWkFGVk9VRkpQUTBWVFUwRkNURVZmUlU1VVNWUlpBRU5QVUZrQVRVOVdSVVJmVUVWU1RVRk9SVTVVVEZrQVZFOVBYMFZCVWt4WkFFNVBWRWxHV1FCR1FVbE1SVVJmUkVWUVJVNUVSVTVEV1FCQ1FVUmZSMEZVUlZkQldRQlFURUZaQUZCVlZBQkRTRVZEUzA5VlZBQkhRVlJGVjBGWlgxUkpUVVZQVlZRQVVrVlJWVVZUVkY5VVNVMUZUMVZVQUU1RlZGZFBVa3RmUTA5T1RrVkRWRjlVU1UxRlQxVlVBRU5QVGs1RlExUkpUMDVmVkVsTlJVOVZWQUJNVDBkSlRsOVVTVTFGVDFWVUFFNUZWRmRQVWt0ZlVrVkJSRjlVU1UxRlQxVlVBRkJQVTFRQVRVbFRSRWxTUlVOVVJVUmZVa1ZSVlVWVFZBQkRURWxGVGxSZlEweFBVMFZFWDFKRlVWVkZVMVFBUTB4SlJVNVVYME5NVDFORlJGOU1UMEZFWDBKQlRFRk9RMFZFWDFKRlVWVkZVMVFBUWtGRVgxSkZVVlZGVTFRQVNGUlVVRjlTUlZGVlJWTlVYMU5GVGxSZlZFOWZTRlJVVUZOZlVFOVNWQUJTUlZCUFVsUUFTVTFmUVY5VVJVRlFUMVFBVWtWVFJWUmZRMDlPVkVWT1ZBQk9UMTlEVDA1VVJVNVVBRkJCVWxSSlFVeGZRMDlPVkVWT1ZBQklVRVZmU1U1V1FVeEpSRjlEVDA1VFZFRk9WQUJJVUVWZlEwSmZVa1ZUUlZRQVIwVlVBRWhRUlY5VFZGSkpRMVFBUTA5T1JreEpRMVFBVkVWTlVFOVNRVkpaWDFKRlJFbFNSVU5VQUZCRlVrMUJUa1ZPVkY5U1JVUkpVa1ZEVkFCRFQwNU9SVU5VQUUxVlRGUkpYMU5VUVZSVlV3QklVRVZmU1U1V1FVeEpSRjlUVkVGVVZWTUFWRTlQWDAxQlRsbGZVa1ZSVlVWVFZGTUFSVUZTVEZsZlNFbE9WRk1BVlU1QlZrRkpURUZDVEVWZlJrOVNYMHhGUjBGTVgxSkZRVk5QVGxNQVQxQlVTVTlPVXdCVFYwbFVRMGhKVGtkZlVGSlBWRTlEVDB4VEFGWkJVa2xCVGxSZlFVeFRUMTlPUlVkUFZFbEJWRVZUQUUxVlRGUkpVRXhGWDBOSVQwbERSVk1BU1U1VVJWSk9RVXhmVTBWU1ZrVlNYMFZTVWs5U0FGZEZRbDlUUlZKV1JWSmZWVTVMVGs5WFRsOUZVbEpQVWdCU1FVbE1SMVZPWDBWU1VrOVNBRWxFUlU1VVNWUlpYMUJTVDFaSlJFVlNYMEZWVkVoRlRsUkpRMEZVU1U5T1gwVlNVazlTQUZOVFRGOURSVkpVU1VaSlEwRlVSVjlGVWxKUFVnQkpUbFpCVEVsRVgxaGZSazlTVjBGU1JFVkVYMFpQVWdCVFJWUmZVRUZTUVUxRlZFVlNBRWRGVkY5UVFWSkJUVVZVUlZJQVNGQkZYMVZUUlZJQVUwVkZYMDlVU0VWU0FFaFFSVjlEUWw5RFNGVk9TMTlJUlVGRVJWSUFUVXREUVV4RlRrUkJVZ0JUUlZSVlVBQlhSVUpmVTBWU1ZrVlNYMGxUWDBSUFYwNEFWRVZCVWtSUFYwNEFTRkJGWDBOTVQxTkZSRjlEVDA1T1JVTlVTVTlPQUVoRlZWSkpVMVJKUTE5RldGQkpVa0ZVU1U5T0FFUkpVME5QVGs1RlExUkZSRjlQVUVWU1FWUkpUMDRBVGs5T1gwRlZWRWhQVWtsVVFWUkpWa1ZmU1U1R1QxSk5RVlJKVDA0QVNGQkZYMGxPVmtGTVNVUmZWa1ZTVTBsUFRnQklVRVZmUTBKZlRVVlRVMEZIUlY5Q1JVZEpUZ0JUU1ZSRlgwbFRYMFpTVDFwRlRnQklVRVZmU1U1V1FVeEpSRjlJUlVGRVJWSmZWRTlMUlU0QVNVNVdRVXhKUkY5VVQwdEZUZ0JHVDFKQ1NVUkVSVTRBUlU1SVFVNURSVjlaVDFWU1gwTkJURTBBU0ZCRlgwbE9Wa0ZNU1VSZlZWSk1BRUpNVDBOTFJVUmZRbGxmVUVGU1JVNVVRVXhmUTA5T1ZGSlBUQUJOUzBOUFRBQkJRMHdBU0ZCRlgwbE9WRVZTVGtGTUFGSkZVVlZGVTFSZlNFVkJSRVZTWDBaSlJVeEVVMTlVVDA5ZlRFRlNSMFZmVlU1UFJrWkpRMGxCVEFCSVVFVmZUMHNBVlU1TVNVNUxBRlZPVEU5RFN3QlFVa2tBVWtWVVVsbGZWMGxVU0FCSVVFVmZTVTVXUVV4SlJGOURUMDVVUlU1VVgweEZUa2RVU0FCSVVFVmZWVTVGV0ZCRlExUkZSRjlEVDA1VVJVNVVYMHhGVGtkVVNBQkdURlZUU0FCUVVrOVFVRUZVUTBnQVRTMVRSVUZTUTBnQVZWSkpYMVJQVDE5TVQwNUhBRkJTVDBORlUxTkpUa2NBVFVsVFEwVk1URUZPUlU5VlUxOVFSVkpUU1ZOVVJVNVVYMWRCVWs1SlRrY0FUVWxUUTBWTVRFRk9SVTlWVTE5WFFWSk9TVTVIQUVoUVJWOUpUbFpCVEVsRVgxUlNRVTVUUmtWU1gwVk9RMDlFU1U1SEFFVjRjR1ZqZEdWa0lFTlNURVlBU0ZCRlgwbE9Wa0ZNU1VSZlEwaFZUa3RmVTBsYVJRQk5UMVpGQUVOUFRsUkpUbFZGQUVoUVJWOURRbDlUVkVGVVZWTmZRMDlOVUV4RlZFVUFTRkJGWDBOQ1gwaEZRVVJGVWxOZlEwOU5VRXhGVkVVQVNGQkZYME5DWDFaRlVsTkpUMDVmUTA5TlVFeEZWRVVBU0ZCRlgwTkNYMVZTVEY5RFQwMVFURVZVUlFCSVVFVmZRMEpmUTBoVlRrdGZRMDlOVUV4RlZFVUFTRkJGWDBOQ1gwaEZRVVJGVWw5V1FVeFZSVjlEVDAxUVRFVlVSUUJJVUVWZlEwSmZRMGhWVGt0ZlJWaFVSVTVUU1U5T1gxWkJURlZGWDBOUFRWQk1SVlJGQUVoUVJWOURRbDlEU0ZWT1MxOUZXRlJGVGxOSlQwNWZUa0ZOUlY5RFQwMVFURVZVUlFCSVVFVmZRMEpmVFVWVFUwRkhSVjlEVDAxUVRFVlVSUUJJVUVWZlEwSmZUVVZVU0U5RVgwTlBUVkJNUlZSRkFFaFFSVjlEUWw5SVJVRkVSVkpmUmtsRlRFUmZRMDlOVUV4RlZFVUFSRVZNUlZSRkFFaFFSVjlKVGxaQlRFbEVYMFZQUmw5VFZFRlVSUUJKVGxaQlRFbEVYMU5UVEY5RFJWSlVTVVpKUTBGVVJRQlFRVlZUUlFCT1QxOVNSVk5RVDA1VFJRQlZUbE5WVUZCUFVsUkZSRjlOUlVSSlFWOVVXVkJGQUVkUFRrVUFUazlVWDBGRFEwVlFWRUZDVEVVQVUwVlNWa2xEUlY5VlRrRldRVWxNUVVKTVJRQlNRVTVIUlY5T1QxUmZVMEZVU1ZOR1NVRkNURVVBVDFKSlIwbE9YMGxUWDFWT1VrVkJRMGhCUWt4RkFGSkZVMUJQVGxORlgwbFRYMU5VUVV4RkFGQlZVa2RGQUUxRlVrZEZBRkpGVVZWRlUxUmZTRVZCUkVWU1gwWkpSVXhFVTE5VVQwOWZURUZTUjBVQVVrVlJWVVZUVkY5SVJVRkVSVkpmVkU5UFgweEJVa2RGQUZCQldVeFBRVVJmVkU5UFgweEJVa2RGQUVsT1UxVkdSa2xEU1VWT1ZGOVRWRTlTUVVkRkFFaFFSVjlRUVZWVFJVUmZWVkJIVWtGRVJRQklVRVZmVUVGVlUwVkVYMGd5WDFWUVIxSkJSRVVBVTA5VlVrTkZBRUZPVGs5VlRrTkZBRlJTUVVORkFFaFFSVjlWVGtWWVVFVkRWRVZFWDFOUVFVTkZBRVJGVTBOU1NVSkZBRlZPVTFWQ1UwTlNTVUpGQUZKRlEwOVNSQUJJVUVWZlNVNVdRVXhKUkY5TlJWUklUMFFBVGs5VVgwWlBWVTVFQUZCU1QxQkdTVTVFQUZWT1FrbE9SQUJTUlVKSlRrUUFWVTVCVlZSSVQxSkpXa1ZFQUUxRlZFaFBSRjlPVDFSZlFVeE1UMWRGUkFCSVZGUlFYMVpGVWxOSlQwNWZUazlVWDFOVlVGQlBVbFJGUkFCQlRGSkZRVVJaWDFKRlVFOVNWRVZFQUVGRFEwVlFWRVZFQUU1UFZGOUpUVkJNUlUxRlRsUkZSQUJNVDA5UVgwUkZWRVZEVkVWRUFFaFFSVjlEVWw5RldGQkZRMVJGUkFCSVVFVmZURVpmUlZoUVJVTlVSVVFBUTFKRlFWUkZSQUJKVFY5VlUwVkVBRWhRUlY5UVFWVlRSVVFBVkVsTlJVOVZWRjlQUTBOVlVrVkVBRkJCV1UxRlRsUmZVa1ZSVlVsU1JVUUFVRkpGUTA5T1JFbFVTVTlPWDFKRlVWVkpVa1ZFQUZCU1QxaFpYMEZWVkVoRlRsUkpRMEZVU1U5T1gxSkZVVlZKVWtWRUFFNUZWRmRQVWt0ZlFWVlVTRVZPVkVsRFFWUkpUMDVmVWtWUlZVbFNSVVFBVEVWT1IxUklYMUpGVVZWSlVrVkVBRk5UVEY5RFJWSlVTVVpKUTBGVVJWOVNSVkZWU1ZKRlJBQlZVRWRTUVVSRlgxSkZVVlZKVWtWRUFGQkJSMFZmUlZoUVNWSkZSQUJRVWtWRFQwNUVTVlJKVDA1ZlJrRkpURVZFQUVWWVVFVkRWRUZVU1U5T1gwWkJTVXhGUkFCU1JWWkJURWxFUVZSSlQwNWZSa0ZKVEVWRUFGTlRURjlJUVU1RVUwaEJTMFZmUmtGSlRFVkVBRXhQUTB0RlJBQlVVa0ZPVTBaUFVrMUJWRWxQVGw5QlVGQk1TVVZFQUU1UFZGOU5UMFJKUmtsRlJBQk9UMVJmUlZoVVJVNUVSVVFBUWtGT1JGZEpSRlJJWDB4SlRVbFVYMFZZUTBWRlJFVkVBRk5KVkVWZlNWTmZUMVpGVWt4UFFVUkZSQUJJUlVGRUFFVjRjR1ZqZEdWa0lFaFVWRkF2QUFCZUV3QUFKaE1BQURBUUFBRHdGd0FBblJNQUFCVVNBQUE1RndBQThCSUFBQW9RQUFCMUVnQUFyUklBQUlJVEFBQlBGQUFBZnhBQUFLQVZBQUFqRkFBQWlSSUFBSXNVQUFCTkZRQUExQkVBQU04VUFBQVFHQUFBeVJZQUFOd1dBQURCRVFBQTRCY0FBTHNVQUFCMEZBQUFmQlVBQU9VVUFBQUlGd0FBSHhBQUFHVVZBQUNqRkFBQUtCVUFBQUlWQUFDWkZRQUFMQkFBQUlzWkFBQlBEd0FBMUE0QUFHb1FBQURPRUFBQUFoY0FBSWtPQUFCdUV3QUFIQk1BQUdZVUFBQldGd0FBd1JNQUFNMFRBQUJzRXdBQWFCY0FBR1lYQUFCZkZ3QUFJaE1BQU00UEFBQnBEZ0FBMkE0QUFHTVdBQURMRXdBQXFnNEFBQ2dYQUFBbUZ3QUF4Uk1BQUYwV0FBRG9FUUFBWnhNQUFHVVRBQUR5RmdBQWN4TUFBQjBYQUFENUZnQUE4eEVBQU04T0FBRE9GUUFBREJJQUFMTVJBQUNsRVFBQVlSQUFBRElYQUFDN0V3QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFQkFnRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFBQUFBQUFBQUFBQUFBQUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBZ01DQWdJQ0FnQUFBZ0lBQWdJQUFnSUNBZ0lDQWdJQ0FnQUVBQUFBQUFBQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdBQUFBSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBQUlBQWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFJQUFnSUNBZ0lBQUFJQ0FBSUNBQUlDQWdJQ0FnSUNBZ0lBQXdBRUFBQUFBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFBQUFDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdBQ0FBSUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJzYjNObFpXVndMV0ZzYVhabEFBQUFBQUFBQUFBQUFBQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQUFBQUFBQUFBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUVCQVFFQkFRRUJBUUVCQWdFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRmphSFZ1YTJWa0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQVFBQkFRRUJBUUFBQVFFQUFRRUFBUUVCQVFFQkFRRUJBUUFBQUFBQUFBQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUFBQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFFQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBR1ZqZEdsdmJtVnVkQzFzWlc1bmRHaHZibkp2ZUhrdFkyOXVibVZqZEdsdmJnQUFBQUFBQUFBQUFBQUFBQUFBQUhKaGJuTm1aWEl0Wlc1amIyUnBibWR3WjNKaFpHVU5DZzBLRFFwVFRRMEtEUXBVVkZBdlEwVXZWRk5RTHdBQUFBQUFBQUFBQUFBQUFBRUNBQUVEQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQUFBQUFBQUFBQUFCQWdBQkF3QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUJBUVVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBQUFBQUFBQUFBQUFRQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFFQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFBQUFBQUFBQUFBQUFCQUFBQ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUF3UUFBQVFFQkFRRUJBUUVCQVFFQlFRRUJBUUVCQVFFQkFRRUJBQUVBQVlIQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQUFRQUJBQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBQUFBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBZ0FBQUFBQUFBTURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREFBQUFBQUFBQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFBQUFBQUFBQUFBQUFnQUFBQUFDQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFEQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd0FBQUFBQUFBTURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUU1UFZVNURSVVZEUzA5VlZFNUZRMVJGVkVWRFVrbENSVXhWVTBoRlZFVkJSRk5GUVZKRFNGSkhSVU5VU1ZaSlZGbE1SVTVFUVZKV1JVOVVTVVpaVUZSSlQwNVRRMGhUUlVGWlUxUkJWRU5JUjBWUFVrUkpVa1ZEVkU5U1ZGSkRTRkJCVWtGTlJWUkZVbFZTUTBWQ1UwTlNTVUpGUVZKRVQxZE9RVU5GU1U1RVRrdERTMVZDVTBOU1NVSkZTRlJVVUM5QlJGUlFMdz09J1xuIiwKICAgICIvLyBAdHMtY2hlY2tcblxuJ3VzZSBzdHJpY3QnXG5cbi8qIGdsb2JhbCBXZWJBc3NlbWJseSAqL1xuXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgbmV0ID0gcmVxdWlyZSgnbmV0JylcbmNvbnN0IGh0dHAgPSByZXF1aXJlKCdodHRwJylcbmNvbnN0IHsgcGlwZWxpbmUgfSA9IHJlcXVpcmUoJ3N0cmVhbScpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi9jb3JlL3V0aWwnKVxuY29uc3QgdGltZXJzID0gcmVxdWlyZSgnLi90aW1lcnMnKVxuY29uc3QgUmVxdWVzdCA9IHJlcXVpcmUoJy4vY29yZS9yZXF1ZXN0JylcbmNvbnN0IERpc3BhdGNoZXJCYXNlID0gcmVxdWlyZSgnLi9kaXNwYXRjaGVyLWJhc2UnKVxuY29uc3Qge1xuICBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IsXG4gIFJlc3BvbnNlQ29udGVudExlbmd0aE1pc21hdGNoRXJyb3IsXG4gIEludmFsaWRBcmd1bWVudEVycm9yLFxuICBSZXF1ZXN0QWJvcnRlZEVycm9yLFxuICBIZWFkZXJzVGltZW91dEVycm9yLFxuICBIZWFkZXJzT3ZlcmZsb3dFcnJvcixcbiAgU29ja2V0RXJyb3IsXG4gIEluZm9ybWF0aW9uYWxFcnJvcixcbiAgQm9keVRpbWVvdXRFcnJvcixcbiAgSFRUUFBhcnNlckVycm9yLFxuICBSZXNwb25zZUV4Y2VlZGVkTWF4U2l6ZUVycm9yLFxuICBDbGllbnREZXN0cm95ZWRFcnJvclxufSA9IHJlcXVpcmUoJy4vY29yZS9lcnJvcnMnKVxuY29uc3QgYnVpbGRDb25uZWN0b3IgPSByZXF1aXJlKCcuL2NvcmUvY29ubmVjdCcpXG5jb25zdCB7XG4gIGtVcmwsXG4gIGtSZXNldCxcbiAga1NlcnZlck5hbWUsXG4gIGtDbGllbnQsXG4gIGtCdXN5LFxuICBrUGFyc2VyLFxuICBrQ29ubmVjdCxcbiAga0Jsb2NraW5nLFxuICBrUmVzdW1pbmcsXG4gIGtSdW5uaW5nLFxuICBrUGVuZGluZyxcbiAga1NpemUsXG4gIGtXcml0aW5nLFxuICBrUXVldWUsXG4gIGtDb25uZWN0ZWQsXG4gIGtDb25uZWN0aW5nLFxuICBrTmVlZERyYWluLFxuICBrTm9SZWYsXG4gIGtLZWVwQWxpdmVEZWZhdWx0VGltZW91dCxcbiAga0hvc3RIZWFkZXIsXG4gIGtQZW5kaW5nSWR4LFxuICBrUnVubmluZ0lkeCxcbiAga0Vycm9yLFxuICBrUGlwZWxpbmluZyxcbiAga1NvY2tldCxcbiAga0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZSxcbiAga01heEhlYWRlcnNTaXplLFxuICBrS2VlcEFsaXZlTWF4VGltZW91dCxcbiAga0tlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGQsXG4gIGtIZWFkZXJzVGltZW91dCxcbiAga0JvZHlUaW1lb3V0LFxuICBrU3RyaWN0Q29udGVudExlbmd0aCxcbiAga0Nvbm5lY3RvcixcbiAga01heFJlZGlyZWN0aW9ucyxcbiAga01heFJlcXVlc3RzLFxuICBrQ291bnRlcixcbiAga0Nsb3NlLFxuICBrRGVzdHJveSxcbiAga0Rpc3BhdGNoLFxuICBrSW50ZXJjZXB0b3JzLFxuICBrTG9jYWxBZGRyZXNzLFxuICBrTWF4UmVzcG9uc2VTaXplLFxuICBrSFRUUENvbm5WZXJzaW9uLFxuICAvLyBIVFRQMlxuICBrSG9zdCxcbiAga0hUVFAyU2Vzc2lvbixcbiAga0hUVFAyU2Vzc2lvblN0YXRlLFxuICBrSFRUUDJCdWlsZFJlcXVlc3QsXG4gIGtIVFRQMkNvcHlIZWFkZXJzLFxuICBrSFRUUDFCdWlsZFJlcXVlc3Rcbn0gPSByZXF1aXJlKCcuL2NvcmUvc3ltYm9scycpXG5cbi8qKiBAdHlwZSB7aW1wb3J0KCdodHRwMicpfSAqL1xubGV0IGh0dHAyXG50cnkge1xuICBodHRwMiA9IHJlcXVpcmUoJ2h0dHAyJylcbn0gY2F0Y2gge1xuICAvLyBAdHMtaWdub3JlXG4gIGh0dHAyID0geyBjb25zdGFudHM6IHt9IH1cbn1cblxuY29uc3Qge1xuICBjb25zdGFudHM6IHtcbiAgICBIVFRQMl9IRUFERVJfQVVUSE9SSVRZLFxuICAgIEhUVFAyX0hFQURFUl9NRVRIT0QsXG4gICAgSFRUUDJfSEVBREVSX1BBVEgsXG4gICAgSFRUUDJfSEVBREVSX1NDSEVNRSxcbiAgICBIVFRQMl9IRUFERVJfQ09OVEVOVF9MRU5HVEgsXG4gICAgSFRUUDJfSEVBREVSX0VYUEVDVCxcbiAgICBIVFRQMl9IRUFERVJfU1RBVFVTXG4gIH1cbn0gPSBodHRwMlxuXG4vLyBFeHBlcmltZW50YWxcbmxldCBoMkV4cGVyaW1lbnRhbFdhcm5lZCA9IGZhbHNlXG5cbmNvbnN0IEZhc3RCdWZmZXIgPSBCdWZmZXJbU3ltYm9sLnNwZWNpZXNdXG5cbmNvbnN0IGtDbG9zZWRSZXNvbHZlID0gU3ltYm9sKCdrQ2xvc2VkUmVzb2x2ZScpXG5cbmNvbnN0IGNoYW5uZWxzID0ge31cblxudHJ5IHtcbiAgY29uc3QgZGlhZ25vc3RpY3NDaGFubmVsID0gcmVxdWlyZSgnZGlhZ25vc3RpY3NfY2hhbm5lbCcpXG4gIGNoYW5uZWxzLnNlbmRIZWFkZXJzID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpjbGllbnQ6c2VuZEhlYWRlcnMnKVxuICBjaGFubmVscy5iZWZvcmVDb25uZWN0ID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpjbGllbnQ6YmVmb3JlQ29ubmVjdCcpXG4gIGNoYW5uZWxzLmNvbm5lY3RFcnJvciA9IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6Y2xpZW50OmNvbm5lY3RFcnJvcicpXG4gIGNoYW5uZWxzLmNvbm5lY3RlZCA9IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6Y2xpZW50OmNvbm5lY3RlZCcpXG59IGNhdGNoIHtcbiAgY2hhbm5lbHMuc2VuZEhlYWRlcnMgPSB7IGhhc1N1YnNjcmliZXJzOiBmYWxzZSB9XG4gIGNoYW5uZWxzLmJlZm9yZUNvbm5lY3QgPSB7IGhhc1N1YnNjcmliZXJzOiBmYWxzZSB9XG4gIGNoYW5uZWxzLmNvbm5lY3RFcnJvciA9IHsgaGFzU3Vic2NyaWJlcnM6IGZhbHNlIH1cbiAgY2hhbm5lbHMuY29ubmVjdGVkID0geyBoYXNTdWJzY3JpYmVyczogZmFsc2UgfVxufVxuXG4vKipcbiAqIEB0eXBlIHtpbXBvcnQoJy4uL3R5cGVzL2NsaWVudCcpLmRlZmF1bHR9XG4gKi9cbmNsYXNzIENsaWVudCBleHRlbmRzIERpc3BhdGNoZXJCYXNlIHtcbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfFVSTH0gdXJsXG4gICAqIEBwYXJhbSB7aW1wb3J0KCcuLi90eXBlcy9jbGllbnQnKS5DbGllbnQuT3B0aW9uc30gb3B0aW9uc1xuICAgKi9cbiAgY29uc3RydWN0b3IgKHVybCwge1xuICAgIGludGVyY2VwdG9ycyxcbiAgICBtYXhIZWFkZXJTaXplLFxuICAgIGhlYWRlcnNUaW1lb3V0LFxuICAgIHNvY2tldFRpbWVvdXQsXG4gICAgcmVxdWVzdFRpbWVvdXQsXG4gICAgY29ubmVjdFRpbWVvdXQsXG4gICAgYm9keVRpbWVvdXQsXG4gICAgaWRsZVRpbWVvdXQsXG4gICAga2VlcEFsaXZlLFxuICAgIGtlZXBBbGl2ZVRpbWVvdXQsXG4gICAgbWF4S2VlcEFsaXZlVGltZW91dCxcbiAgICBrZWVwQWxpdmVNYXhUaW1lb3V0LFxuICAgIGtlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGQsXG4gICAgc29ja2V0UGF0aCxcbiAgICBwaXBlbGluaW5nLFxuICAgIHRscyxcbiAgICBzdHJpY3RDb250ZW50TGVuZ3RoLFxuICAgIG1heENhY2hlZFNlc3Npb25zLFxuICAgIG1heFJlZGlyZWN0aW9ucyxcbiAgICBjb25uZWN0LFxuICAgIG1heFJlcXVlc3RzUGVyQ2xpZW50LFxuICAgIGxvY2FsQWRkcmVzcyxcbiAgICBtYXhSZXNwb25zZVNpemUsXG4gICAgYXV0b1NlbGVjdEZhbWlseSxcbiAgICBhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQsXG4gICAgLy8gaDJcbiAgICBhbGxvd0gyLFxuICAgIG1heENvbmN1cnJlbnRTdHJlYW1zXG4gIH0gPSB7fSkge1xuICAgIHN1cGVyKClcblxuICAgIGlmIChrZWVwQWxpdmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCd1bnN1cHBvcnRlZCBrZWVwQWxpdmUsIHVzZSBwaXBlbGluaW5nPTAgaW5zdGVhZCcpXG4gICAgfVxuXG4gICAgaWYgKHNvY2tldFRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCd1bnN1cHBvcnRlZCBzb2NrZXRUaW1lb3V0LCB1c2UgaGVhZGVyc1RpbWVvdXQgJiBib2R5VGltZW91dCBpbnN0ZWFkJylcbiAgICB9XG5cbiAgICBpZiAocmVxdWVzdFRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCd1bnN1cHBvcnRlZCByZXF1ZXN0VGltZW91dCwgdXNlIGhlYWRlcnNUaW1lb3V0ICYgYm9keVRpbWVvdXQgaW5zdGVhZCcpXG4gICAgfVxuXG4gICAgaWYgKGlkbGVUaW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndW5zdXBwb3J0ZWQgaWRsZVRpbWVvdXQsIHVzZSBrZWVwQWxpdmVUaW1lb3V0IGluc3RlYWQnKVxuICAgIH1cblxuICAgIGlmIChtYXhLZWVwQWxpdmVUaW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndW5zdXBwb3J0ZWQgbWF4S2VlcEFsaXZlVGltZW91dCwgdXNlIGtlZXBBbGl2ZU1heFRpbWVvdXQgaW5zdGVhZCcpXG4gICAgfVxuXG4gICAgaWYgKG1heEhlYWRlclNpemUgIT0gbnVsbCAmJiAhTnVtYmVyLmlzRmluaXRlKG1heEhlYWRlclNpemUpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgbWF4SGVhZGVyU2l6ZScpXG4gICAgfVxuXG4gICAgaWYgKHNvY2tldFBhdGggIT0gbnVsbCAmJiB0eXBlb2Ygc29ja2V0UGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBzb2NrZXRQYXRoJylcbiAgICB9XG5cbiAgICBpZiAoY29ubmVjdFRpbWVvdXQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0Zpbml0ZShjb25uZWN0VGltZW91dCkgfHwgY29ubmVjdFRpbWVvdXQgPCAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGNvbm5lY3RUaW1lb3V0JylcbiAgICB9XG5cbiAgICBpZiAoa2VlcEFsaXZlVGltZW91dCAhPSBudWxsICYmICghTnVtYmVyLmlzRmluaXRlKGtlZXBBbGl2ZVRpbWVvdXQpIHx8IGtlZXBBbGl2ZVRpbWVvdXQgPD0gMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBrZWVwQWxpdmVUaW1lb3V0JylcbiAgICB9XG5cbiAgICBpZiAoa2VlcEFsaXZlTWF4VGltZW91dCAhPSBudWxsICYmICghTnVtYmVyLmlzRmluaXRlKGtlZXBBbGl2ZU1heFRpbWVvdXQpIHx8IGtlZXBBbGl2ZU1heFRpbWVvdXQgPD0gMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBrZWVwQWxpdmVNYXhUaW1lb3V0JylcbiAgICB9XG5cbiAgICBpZiAoa2VlcEFsaXZlVGltZW91dFRocmVzaG9sZCAhPSBudWxsICYmICFOdW1iZXIuaXNGaW5pdGUoa2VlcEFsaXZlVGltZW91dFRocmVzaG9sZCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBrZWVwQWxpdmVUaW1lb3V0VGhyZXNob2xkJylcbiAgICB9XG5cbiAgICBpZiAoaGVhZGVyc1RpbWVvdXQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0ludGVnZXIoaGVhZGVyc1RpbWVvdXQpIHx8IGhlYWRlcnNUaW1lb3V0IDwgMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaGVhZGVyc1RpbWVvdXQgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgb3IgemVybycpXG4gICAgfVxuXG4gICAgaWYgKGJvZHlUaW1lb3V0ICE9IG51bGwgJiYgKCFOdW1iZXIuaXNJbnRlZ2VyKGJvZHlUaW1lb3V0KSB8fCBib2R5VGltZW91dCA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2JvZHlUaW1lb3V0IG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIG9yIHplcm8nKVxuICAgIH1cblxuICAgIGlmIChjb25uZWN0ICE9IG51bGwgJiYgdHlwZW9mIGNvbm5lY3QgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGNvbm5lY3QgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2Nvbm5lY3QgbXVzdCBiZSBhIGZ1bmN0aW9uIG9yIGFuIG9iamVjdCcpXG4gICAgfVxuXG4gICAgaWYgKG1heFJlZGlyZWN0aW9ucyAhPSBudWxsICYmICghTnVtYmVyLmlzSW50ZWdlcihtYXhSZWRpcmVjdGlvbnMpIHx8IG1heFJlZGlyZWN0aW9ucyA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ21heFJlZGlyZWN0aW9ucyBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJylcbiAgICB9XG5cbiAgICBpZiAobWF4UmVxdWVzdHNQZXJDbGllbnQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0ludGVnZXIobWF4UmVxdWVzdHNQZXJDbGllbnQpIHx8IG1heFJlcXVlc3RzUGVyQ2xpZW50IDwgMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignbWF4UmVxdWVzdHNQZXJDbGllbnQgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpXG4gICAgfVxuXG4gICAgaWYgKGxvY2FsQWRkcmVzcyAhPSBudWxsICYmICh0eXBlb2YgbG9jYWxBZGRyZXNzICE9PSAnc3RyaW5nJyB8fCBuZXQuaXNJUChsb2NhbEFkZHJlc3MpID09PSAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdsb2NhbEFkZHJlc3MgbXVzdCBiZSB2YWxpZCBzdHJpbmcgSVAgYWRkcmVzcycpXG4gICAgfVxuXG4gICAgaWYgKG1heFJlc3BvbnNlU2l6ZSAhPSBudWxsICYmICghTnVtYmVyLmlzSW50ZWdlcihtYXhSZXNwb25zZVNpemUpIHx8IG1heFJlc3BvbnNlU2l6ZSA8IC0xKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdtYXhSZXNwb25zZVNpemUgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgYXV0b1NlbGVjdEZhbWlseUF0dGVtcHRUaW1lb3V0ICE9IG51bGwgJiZcbiAgICAgICghTnVtYmVyLmlzSW50ZWdlcihhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQpIHx8IGF1dG9TZWxlY3RGYW1pbHlBdHRlbXB0VGltZW91dCA8IC0xKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpXG4gICAgfVxuXG4gICAgLy8gaDJcbiAgICBpZiAoYWxsb3dIMiAhPSBudWxsICYmIHR5cGVvZiBhbGxvd0gyICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignYWxsb3dIMiBtdXN0IGJlIGEgdmFsaWQgYm9vbGVhbiB2YWx1ZScpXG4gICAgfVxuXG4gICAgaWYgKG1heENvbmN1cnJlbnRTdHJlYW1zICE9IG51bGwgJiYgKHR5cGVvZiBtYXhDb25jdXJyZW50U3RyZWFtcyAhPT0gJ251bWJlcicgfHwgbWF4Q29uY3VycmVudFN0cmVhbXMgPCAxKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdtYXhDb25jdXJyZW50U3RyZWFtcyBtdXN0IGJlIGEgcG9zc2l0aXZlIGludGVnZXIsIGdyZWF0ZXIgdGhhbiAwJylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNvbm5lY3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbm5lY3QgPSBidWlsZENvbm5lY3Rvcih7XG4gICAgICAgIC4uLnRscyxcbiAgICAgICAgbWF4Q2FjaGVkU2Vzc2lvbnMsXG4gICAgICAgIGFsbG93SDIsXG4gICAgICAgIHNvY2tldFBhdGgsXG4gICAgICAgIHRpbWVvdXQ6IGNvbm5lY3RUaW1lb3V0LFxuICAgICAgICAuLi4odXRpbC5ub2RlSGFzQXV0b1NlbGVjdEZhbWlseSAmJiBhdXRvU2VsZWN0RmFtaWx5ID8geyBhdXRvU2VsZWN0RmFtaWx5LCBhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQgfSA6IHVuZGVmaW5lZCksXG4gICAgICAgIC4uLmNvbm5lY3RcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgdGhpc1trSW50ZXJjZXB0b3JzXSA9IGludGVyY2VwdG9ycyAmJiBpbnRlcmNlcHRvcnMuQ2xpZW50ICYmIEFycmF5LmlzQXJyYXkoaW50ZXJjZXB0b3JzLkNsaWVudClcbiAgICAgID8gaW50ZXJjZXB0b3JzLkNsaWVudFxuICAgICAgOiBbY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvcih7IG1heFJlZGlyZWN0aW9ucyB9KV1cbiAgICB0aGlzW2tVcmxdID0gdXRpbC5wYXJzZU9yaWdpbih1cmwpXG4gICAgdGhpc1trQ29ubmVjdG9yXSA9IGNvbm5lY3RcbiAgICB0aGlzW2tTb2NrZXRdID0gbnVsbFxuICAgIHRoaXNba1BpcGVsaW5pbmddID0gcGlwZWxpbmluZyAhPSBudWxsID8gcGlwZWxpbmluZyA6IDFcbiAgICB0aGlzW2tNYXhIZWFkZXJzU2l6ZV0gPSBtYXhIZWFkZXJTaXplIHx8IGh0dHAubWF4SGVhZGVyU2l6ZVxuICAgIHRoaXNba0tlZXBBbGl2ZURlZmF1bHRUaW1lb3V0XSA9IGtlZXBBbGl2ZVRpbWVvdXQgPT0gbnVsbCA/IDRlMyA6IGtlZXBBbGl2ZVRpbWVvdXRcbiAgICB0aGlzW2tLZWVwQWxpdmVNYXhUaW1lb3V0XSA9IGtlZXBBbGl2ZU1heFRpbWVvdXQgPT0gbnVsbCA/IDYwMGUzIDoga2VlcEFsaXZlTWF4VGltZW91dFxuICAgIHRoaXNba0tlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGRdID0ga2VlcEFsaXZlVGltZW91dFRocmVzaG9sZCA9PSBudWxsID8gMWUzIDoga2VlcEFsaXZlVGltZW91dFRocmVzaG9sZFxuICAgIHRoaXNba0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZV0gPSB0aGlzW2tLZWVwQWxpdmVEZWZhdWx0VGltZW91dF1cbiAgICB0aGlzW2tTZXJ2ZXJOYW1lXSA9IG51bGxcbiAgICB0aGlzW2tMb2NhbEFkZHJlc3NdID0gbG9jYWxBZGRyZXNzICE9IG51bGwgPyBsb2NhbEFkZHJlc3MgOiBudWxsXG4gICAgdGhpc1trUmVzdW1pbmddID0gMCAvLyAwLCBpZGxlLCAxLCBzY2hlZHVsZWQsIDIgcmVzdW1pbmdcbiAgICB0aGlzW2tOZWVkRHJhaW5dID0gMCAvLyAwLCBpZGxlLCAxLCBzY2hlZHVsZWQsIDIgcmVzdW1pbmdcbiAgICB0aGlzW2tIb3N0SGVhZGVyXSA9IGBob3N0OiAke3RoaXNba1VybF0uaG9zdG5hbWV9JHt0aGlzW2tVcmxdLnBvcnQgPyBgOiR7dGhpc1trVXJsXS5wb3J0fWAgOiAnJ31cXHJcXG5gXG4gICAgdGhpc1trQm9keVRpbWVvdXRdID0gYm9keVRpbWVvdXQgIT0gbnVsbCA/IGJvZHlUaW1lb3V0IDogMzAwZTNcbiAgICB0aGlzW2tIZWFkZXJzVGltZW91dF0gPSBoZWFkZXJzVGltZW91dCAhPSBudWxsID8gaGVhZGVyc1RpbWVvdXQgOiAzMDBlM1xuICAgIHRoaXNba1N0cmljdENvbnRlbnRMZW5ndGhdID0gc3RyaWN0Q29udGVudExlbmd0aCA9PSBudWxsID8gdHJ1ZSA6IHN0cmljdENvbnRlbnRMZW5ndGhcbiAgICB0aGlzW2tNYXhSZWRpcmVjdGlvbnNdID0gbWF4UmVkaXJlY3Rpb25zXG4gICAgdGhpc1trTWF4UmVxdWVzdHNdID0gbWF4UmVxdWVzdHNQZXJDbGllbnRcbiAgICB0aGlzW2tDbG9zZWRSZXNvbHZlXSA9IG51bGxcbiAgICB0aGlzW2tNYXhSZXNwb25zZVNpemVdID0gbWF4UmVzcG9uc2VTaXplID4gLTEgPyBtYXhSZXNwb25zZVNpemUgOiAtMVxuICAgIHRoaXNba0hUVFBDb25uVmVyc2lvbl0gPSAnaDEnXG5cbiAgICAvLyBIVFRQLzJcbiAgICB0aGlzW2tIVFRQMlNlc3Npb25dID0gbnVsbFxuICAgIHRoaXNba0hUVFAyU2Vzc2lvblN0YXRlXSA9ICFhbGxvd0gyXG4gICAgICA/IG51bGxcbiAgICAgIDoge1xuICAgICAgICAvLyBzdHJlYW1zOiBudWxsLCAvLyBGaXhlZCBxdWV1ZSBvZiBzdHJlYW1zIC0gRm9yIGZ1dHVyZSBzdXBwb3J0IG9mIGBwdXNoYFxuICAgICAgICAgIG9wZW5TdHJlYW1zOiAwLCAvLyBLZWVwIHRyYWNrIG9mIHRoZW0gdG8gZGVjaWRlIHdldGhlciBvciBub3QgdW5yZWYgdGhlIHNlc3Npb25cbiAgICAgICAgICBtYXhDb25jdXJyZW50U3RyZWFtczogbWF4Q29uY3VycmVudFN0cmVhbXMgIT0gbnVsbCA/IG1heENvbmN1cnJlbnRTdHJlYW1zIDogMTAwIC8vIE1heCBwZWVyQ29uY3VycmVudFN0cmVhbXMgZm9yIGEgTm9kZSBoMiBzZXJ2ZXJcbiAgICAgICAgfVxuICAgIHRoaXNba0hvc3RdID0gYCR7dGhpc1trVXJsXS5ob3N0bmFtZX0ke3RoaXNba1VybF0ucG9ydCA/IGA6JHt0aGlzW2tVcmxdLnBvcnR9YCA6ICcnfWBcblxuICAgIC8vIGtRdWV1ZSBpcyBidWlsdCB1cCBvZiAzIHNlY3Rpb25zIHNlcGFyYXRlZCBieVxuICAgIC8vIHRoZSBrUnVubmluZ0lkeCBhbmQga1BlbmRpbmdJZHggaW5kaWNlcy5cbiAgICAvLyB8ICAgY29tcGxldGUgICB8ICAgcnVubmluZyAgIHwgICBwZW5kaW5nICAgfFxuICAgIC8vICAgICAgICAgICAgICAgIF4ga1J1bm5pbmdJZHggXiBrUGVuZGluZ0lkeCBeIGtRdWV1ZS5sZW5ndGhcbiAgICAvLyBrUnVubmluZ0lkeCBwb2ludHMgdG8gdGhlIGZpcnN0IHJ1bm5pbmcgZWxlbWVudC5cbiAgICAvLyBrUGVuZGluZ0lkeCBwb2ludHMgdG8gdGhlIGZpcnN0IHBlbmRpbmcgZWxlbWVudC5cbiAgICAvLyBUaGlzIGltcGxlbWVudHMgYSBmYXN0IHF1ZXVlIHdpdGggYW4gYW1vcnRpemVkXG4gICAgLy8gdGltZSBvZiBPKDEpLlxuXG4gICAgdGhpc1trUXVldWVdID0gW11cbiAgICB0aGlzW2tSdW5uaW5nSWR4XSA9IDBcbiAgICB0aGlzW2tQZW5kaW5nSWR4XSA9IDBcbiAgfVxuXG4gIGdldCBwaXBlbGluaW5nICgpIHtcbiAgICByZXR1cm4gdGhpc1trUGlwZWxpbmluZ11cbiAgfVxuXG4gIHNldCBwaXBlbGluaW5nICh2YWx1ZSkge1xuICAgIHRoaXNba1BpcGVsaW5pbmddID0gdmFsdWVcbiAgICByZXN1bWUodGhpcywgdHJ1ZSlcbiAgfVxuXG4gIGdldCBba1BlbmRpbmddICgpIHtcbiAgICByZXR1cm4gdGhpc1trUXVldWVdLmxlbmd0aCAtIHRoaXNba1BlbmRpbmdJZHhdXG4gIH1cblxuICBnZXQgW2tSdW5uaW5nXSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1BlbmRpbmdJZHhdIC0gdGhpc1trUnVubmluZ0lkeF1cbiAgfVxuXG4gIGdldCBba1NpemVdICgpIHtcbiAgICByZXR1cm4gdGhpc1trUXVldWVdLmxlbmd0aCAtIHRoaXNba1J1bm5pbmdJZHhdXG4gIH1cblxuICBnZXQgW2tDb25uZWN0ZWRdICgpIHtcbiAgICByZXR1cm4gISF0aGlzW2tTb2NrZXRdICYmICF0aGlzW2tDb25uZWN0aW5nXSAmJiAhdGhpc1trU29ja2V0XS5kZXN0cm95ZWRcbiAgfVxuXG4gIGdldCBba0J1c3ldICgpIHtcbiAgICBjb25zdCBzb2NrZXQgPSB0aGlzW2tTb2NrZXRdXG4gICAgcmV0dXJuIChcbiAgICAgIChzb2NrZXQgJiYgKHNvY2tldFtrUmVzZXRdIHx8IHNvY2tldFtrV3JpdGluZ10gfHwgc29ja2V0W2tCbG9ja2luZ10pKSB8fFxuICAgICAgKHRoaXNba1NpemVdID49ICh0aGlzW2tQaXBlbGluaW5nXSB8fCAxKSkgfHxcbiAgICAgIHRoaXNba1BlbmRpbmddID4gMFxuICAgIClcbiAgfVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZTogb25seSB1c2VkIGZvciB0ZXN0ICovXG4gIFtrQ29ubmVjdF0gKGNiKSB7XG4gICAgY29ubmVjdCh0aGlzKVxuICAgIHRoaXMub25jZSgnY29ubmVjdCcsIGNiKVxuICB9XG5cbiAgW2tEaXNwYXRjaF0gKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBjb25zdCBvcmlnaW4gPSBvcHRzLm9yaWdpbiB8fCB0aGlzW2tVcmxdLm9yaWdpblxuXG4gICAgY29uc3QgcmVxdWVzdCA9IHRoaXNba0hUVFBDb25uVmVyc2lvbl0gPT09ICdoMidcbiAgICAgID8gUmVxdWVzdFtrSFRUUDJCdWlsZFJlcXVlc3RdKG9yaWdpbiwgb3B0cywgaGFuZGxlcilcbiAgICAgIDogUmVxdWVzdFtrSFRUUDFCdWlsZFJlcXVlc3RdKG9yaWdpbiwgb3B0cywgaGFuZGxlcilcblxuICAgIHRoaXNba1F1ZXVlXS5wdXNoKHJlcXVlc3QpXG4gICAgaWYgKHRoaXNba1Jlc3VtaW5nXSkge1xuICAgICAgLy8gRG8gbm90aGluZy5cbiAgICB9IGVsc2UgaWYgKHV0aWwuYm9keUxlbmd0aChyZXF1ZXN0LmJvZHkpID09IG51bGwgJiYgdXRpbC5pc0l0ZXJhYmxlKHJlcXVlc3QuYm9keSkpIHtcbiAgICAgIC8vIFdhaXQgYSB0aWNrIGluIGNhc2Ugc3RyZWFtL2l0ZXJhdG9yIGlzIGVuZGVkIGluIHRoZSBzYW1lIHRpY2suXG4gICAgICB0aGlzW2tSZXN1bWluZ10gPSAxXG4gICAgICBwcm9jZXNzLm5leHRUaWNrKHJlc3VtZSwgdGhpcylcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdW1lKHRoaXMsIHRydWUpXG4gICAgfVxuXG4gICAgaWYgKHRoaXNba1Jlc3VtaW5nXSAmJiB0aGlzW2tOZWVkRHJhaW5dICE9PSAyICYmIHRoaXNba0J1c3ldKSB7XG4gICAgICB0aGlzW2tOZWVkRHJhaW5dID0gMlxuICAgIH1cblxuICAgIHJldHVybiB0aGlzW2tOZWVkRHJhaW5dIDwgMlxuICB9XG5cbiAgYXN5bmMgW2tDbG9zZV0gKCkge1xuICAgIC8vIFRPRE86IGZvciBIMiB3ZSBuZWVkIHRvIGdyYWNlZnVsbHkgZmx1c2ggdGhlIHJlbWFpbmluZyBlbnF1ZXVlZFxuICAgIC8vIHJlcXVlc3QgYW5kIGNsb3NlIGVhY2ggc3RyZWFtLlxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgaWYgKCF0aGlzW2tTaXplXSkge1xuICAgICAgICByZXNvbHZlKG51bGwpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzW2tDbG9zZWRSZXNvbHZlXSA9IHJlc29sdmVcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgYXN5bmMgW2tEZXN0cm95XSAoZXJyKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBjb25zdCByZXF1ZXN0cyA9IHRoaXNba1F1ZXVlXS5zcGxpY2UodGhpc1trUGVuZGluZ0lkeF0pXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcXVlc3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSByZXF1ZXN0c1tpXVxuICAgICAgICBlcnJvclJlcXVlc3QodGhpcywgcmVxdWVzdCwgZXJyKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBjYWxsYmFjayA9ICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXNba0Nsb3NlZFJlc29sdmVdKSB7XG4gICAgICAgICAgLy8gVE9ETyAoZml4KTogU2hvdWxkIHdlIGVycm9yIGhlcmUgd2l0aCBDbGllbnREZXN0cm95ZWRFcnJvcj9cbiAgICAgICAgICB0aGlzW2tDbG9zZWRSZXNvbHZlXSgpXG4gICAgICAgICAgdGhpc1trQ2xvc2VkUmVzb2x2ZV0gPSBudWxsXG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZSgpXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzW2tIVFRQMlNlc3Npb25dICE9IG51bGwpIHtcbiAgICAgICAgdXRpbC5kZXN0cm95KHRoaXNba0hUVFAyU2Vzc2lvbl0sIGVycilcbiAgICAgICAgdGhpc1trSFRUUDJTZXNzaW9uXSA9IG51bGxcbiAgICAgICAgdGhpc1trSFRUUDJTZXNzaW9uU3RhdGVdID0gbnVsbFxuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXNba1NvY2tldF0pIHtcbiAgICAgICAgcXVldWVNaWNyb3Rhc2soY2FsbGJhY2spXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1dGlsLmRlc3Ryb3kodGhpc1trU29ja2V0XS5vbignY2xvc2UnLCBjYWxsYmFjayksIGVycilcbiAgICAgIH1cblxuICAgICAgcmVzdW1lKHRoaXMpXG4gICAgfSlcbiAgfVxufVxuXG5mdW5jdGlvbiBvbkh0dHAyU2Vzc2lvbkVycm9yIChlcnIpIHtcbiAgYXNzZXJ0KGVyci5jb2RlICE9PSAnRVJSX1RMU19DRVJUX0FMVE5BTUVfSU5WQUxJRCcpXG5cbiAgdGhpc1trU29ja2V0XVtrRXJyb3JdID0gZXJyXG5cbiAgb25FcnJvcih0aGlzW2tDbGllbnRdLCBlcnIpXG59XG5cbmZ1bmN0aW9uIG9uSHR0cDJGcmFtZUVycm9yICh0eXBlLCBjb2RlLCBpZCkge1xuICBjb25zdCBlcnIgPSBuZXcgSW5mb3JtYXRpb25hbEVycm9yKGBIVFRQLzI6IFwiZnJhbWVFcnJvclwiIHJlY2VpdmVkIC0gdHlwZSAke3R5cGV9LCBjb2RlICR7Y29kZX1gKVxuXG4gIGlmIChpZCA9PT0gMCkge1xuICAgIHRoaXNba1NvY2tldF1ba0Vycm9yXSA9IGVyclxuICAgIG9uRXJyb3IodGhpc1trQ2xpZW50XSwgZXJyKVxuICB9XG59XG5cbmZ1bmN0aW9uIG9uSHR0cDJTZXNzaW9uRW5kICgpIHtcbiAgdXRpbC5kZXN0cm95KHRoaXMsIG5ldyBTb2NrZXRFcnJvcignb3RoZXIgc2lkZSBjbG9zZWQnKSlcbiAgdXRpbC5kZXN0cm95KHRoaXNba1NvY2tldF0sIG5ldyBTb2NrZXRFcnJvcignb3RoZXIgc2lkZSBjbG9zZWQnKSlcbn1cblxuZnVuY3Rpb24gb25IVFRQMkdvQXdheSAoY29kZSkge1xuICBjb25zdCBjbGllbnQgPSB0aGlzW2tDbGllbnRdXG4gIGNvbnN0IGVyciA9IG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoYEhUVFAvMjogXCJHT0FXQVlcIiBmcmFtZSByZWNlaXZlZCB3aXRoIGNvZGUgJHtjb2RlfWApXG4gIGNsaWVudFtrU29ja2V0XSA9IG51bGxcbiAgY2xpZW50W2tIVFRQMlNlc3Npb25dID0gbnVsbFxuXG4gIGlmIChjbGllbnQuZGVzdHJveWVkKSB7XG4gICAgYXNzZXJ0KHRoaXNba1BlbmRpbmddID09PSAwKVxuXG4gICAgLy8gRmFpbCBlbnRpcmUgcXVldWUuXG4gICAgY29uc3QgcmVxdWVzdHMgPSBjbGllbnRba1F1ZXVlXS5zcGxpY2UoY2xpZW50W2tSdW5uaW5nSWR4XSlcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcXVlc3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCByZXF1ZXN0ID0gcmVxdWVzdHNbaV1cbiAgICAgIGVycm9yUmVxdWVzdCh0aGlzLCByZXF1ZXN0LCBlcnIpXG4gICAgfVxuICB9IGVsc2UgaWYgKGNsaWVudFtrUnVubmluZ10gPiAwKSB7XG4gICAgLy8gRmFpbCBoZWFkIG9mIHBpcGVsaW5lLlxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdXVxuICAgIGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF0rK10gPSBudWxsXG5cbiAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIpXG4gIH1cblxuICBjbGllbnRba1BlbmRpbmdJZHhdID0gY2xpZW50W2tSdW5uaW5nSWR4XVxuXG4gIGFzc2VydChjbGllbnRba1J1bm5pbmddID09PSAwKVxuXG4gIGNsaWVudC5lbWl0KCdkaXNjb25uZWN0JyxcbiAgICBjbGllbnRba1VybF0sXG4gICAgW2NsaWVudF0sXG4gICAgZXJyXG4gIClcblxuICByZXN1bWUoY2xpZW50KVxufVxuXG5jb25zdCBjb25zdGFudHMgPSByZXF1aXJlKCcuL2xsaHR0cC9jb25zdGFudHMnKVxuY29uc3QgY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvciA9IHJlcXVpcmUoJy4vaW50ZXJjZXB0b3IvcmVkaXJlY3RJbnRlcmNlcHRvcicpXG5jb25zdCBFTVBUWV9CVUYgPSBCdWZmZXIuYWxsb2MoMClcblxuYXN5bmMgZnVuY3Rpb24gbGF6eWxsaHR0cCAoKSB7XG4gIGNvbnN0IGxsaHR0cFdhc21EYXRhID0gcHJvY2Vzcy5lbnYuSkVTVF9XT1JLRVJfSUQgPyByZXF1aXJlKCcuL2xsaHR0cC9sbGh0dHAtd2FzbS5qcycpIDogdW5kZWZpbmVkXG5cbiAgbGV0IG1vZFxuICB0cnkge1xuICAgIG1vZCA9IGF3YWl0IFdlYkFzc2VtYmx5LmNvbXBpbGUoQnVmZmVyLmZyb20ocmVxdWlyZSgnLi9sbGh0dHAvbGxodHRwX3NpbWQtd2FzbS5qcycpLCAnYmFzZTY0JykpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXG4gICAgLy8gV2UgY291bGQgY2hlY2sgaWYgdGhlIGVycm9yIHdhcyBjYXVzZWQgYnkgdGhlIHNpbWQgb3B0aW9uIG5vdFxuICAgIC8vIGJlaW5nIGVuYWJsZWQsIGJ1dCB0aGUgb2NjdXJyaW5nIG9mIHRoaXMgb3RoZXIgZXJyb3JcbiAgICAvLyAqIGh0dHBzOi8vZ2l0aHViLmNvbS9lbXNjcmlwdGVuLWNvcmUvZW1zY3JpcHRlbi9pc3N1ZXMvMTE0OTVcbiAgICAvLyBnb3QgbWUgdG8gcmVtb3ZlIHRoYXQgY2hlY2sgdG8gYXZvaWQgYnJlYWtpbmcgTm9kZSAxMi5cbiAgICBtb2QgPSBhd2FpdCBXZWJBc3NlbWJseS5jb21waWxlKEJ1ZmZlci5mcm9tKGxsaHR0cFdhc21EYXRhIHx8IHJlcXVpcmUoJy4vbGxodHRwL2xsaHR0cC13YXNtLmpzJyksICdiYXNlNjQnKSlcbiAgfVxuXG4gIHJldHVybiBhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShtb2QsIHtcbiAgICBlbnY6IHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIGNhbWVsY2FzZSAqL1xuXG4gICAgICB3YXNtX29uX3VybDogKHAsIGF0LCBsZW4pID0+IHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgcmV0dXJuIDBcbiAgICAgIH0sXG4gICAgICB3YXNtX29uX3N0YXR1czogKHAsIGF0LCBsZW4pID0+IHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGN1cnJlbnRQYXJzZXIucHRyLCBwKVxuICAgICAgICBjb25zdCBzdGFydCA9IGF0IC0gY3VycmVudEJ1ZmZlclB0ciArIGN1cnJlbnRCdWZmZXJSZWYuYnl0ZU9mZnNldFxuICAgICAgICByZXR1cm4gY3VycmVudFBhcnNlci5vblN0YXR1cyhuZXcgRmFzdEJ1ZmZlcihjdXJyZW50QnVmZmVyUmVmLmJ1ZmZlciwgc3RhcnQsIGxlbikpIHx8IDBcbiAgICAgIH0sXG4gICAgICB3YXNtX29uX21lc3NhZ2VfYmVnaW46IChwKSA9PiB7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjdXJyZW50UGFyc2VyLnB0ciwgcClcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRQYXJzZXIub25NZXNzYWdlQmVnaW4oKSB8fCAwXG4gICAgICB9LFxuICAgICAgd2FzbV9vbl9oZWFkZXJfZmllbGQ6IChwLCBhdCwgbGVuKSA9PiB7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjdXJyZW50UGFyc2VyLnB0ciwgcClcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBhdCAtIGN1cnJlbnRCdWZmZXJQdHIgKyBjdXJyZW50QnVmZmVyUmVmLmJ5dGVPZmZzZXRcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRQYXJzZXIub25IZWFkZXJGaWVsZChuZXcgRmFzdEJ1ZmZlcihjdXJyZW50QnVmZmVyUmVmLmJ1ZmZlciwgc3RhcnQsIGxlbikpIHx8IDBcbiAgICAgIH0sXG4gICAgICB3YXNtX29uX2hlYWRlcl92YWx1ZTogKHAsIGF0LCBsZW4pID0+IHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGN1cnJlbnRQYXJzZXIucHRyLCBwKVxuICAgICAgICBjb25zdCBzdGFydCA9IGF0IC0gY3VycmVudEJ1ZmZlclB0ciArIGN1cnJlbnRCdWZmZXJSZWYuYnl0ZU9mZnNldFxuICAgICAgICByZXR1cm4gY3VycmVudFBhcnNlci5vbkhlYWRlclZhbHVlKG5ldyBGYXN0QnVmZmVyKGN1cnJlbnRCdWZmZXJSZWYuYnVmZmVyLCBzdGFydCwgbGVuKSkgfHwgMFxuICAgICAgfSxcbiAgICAgIHdhc21fb25faGVhZGVyc19jb21wbGV0ZTogKHAsIHN0YXR1c0NvZGUsIHVwZ3JhZGUsIHNob3VsZEtlZXBBbGl2ZSkgPT4ge1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY3VycmVudFBhcnNlci5wdHIsIHApXG4gICAgICAgIHJldHVybiBjdXJyZW50UGFyc2VyLm9uSGVhZGVyc0NvbXBsZXRlKHN0YXR1c0NvZGUsIEJvb2xlYW4odXBncmFkZSksIEJvb2xlYW4oc2hvdWxkS2VlcEFsaXZlKSkgfHwgMFxuICAgICAgfSxcbiAgICAgIHdhc21fb25fYm9keTogKHAsIGF0LCBsZW4pID0+IHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGN1cnJlbnRQYXJzZXIucHRyLCBwKVxuICAgICAgICBjb25zdCBzdGFydCA9IGF0IC0gY3VycmVudEJ1ZmZlclB0ciArIGN1cnJlbnRCdWZmZXJSZWYuYnl0ZU9mZnNldFxuICAgICAgICByZXR1cm4gY3VycmVudFBhcnNlci5vbkJvZHkobmV3IEZhc3RCdWZmZXIoY3VycmVudEJ1ZmZlclJlZi5idWZmZXIsIHN0YXJ0LCBsZW4pKSB8fCAwXG4gICAgICB9LFxuICAgICAgd2FzbV9vbl9tZXNzYWdlX2NvbXBsZXRlOiAocCkgPT4ge1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY3VycmVudFBhcnNlci5wdHIsIHApXG4gICAgICAgIHJldHVybiBjdXJyZW50UGFyc2VyLm9uTWVzc2FnZUNvbXBsZXRlKCkgfHwgMFxuICAgICAgfVxuXG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIGNhbWVsY2FzZSAqL1xuICAgIH1cbiAgfSlcbn1cblxubGV0IGxsaHR0cEluc3RhbmNlID0gbnVsbFxubGV0IGxsaHR0cFByb21pc2UgPSBsYXp5bGxodHRwKClcbmxsaHR0cFByb21pc2UuY2F0Y2goKVxuXG5sZXQgY3VycmVudFBhcnNlciA9IG51bGxcbmxldCBjdXJyZW50QnVmZmVyUmVmID0gbnVsbFxubGV0IGN1cnJlbnRCdWZmZXJTaXplID0gMFxubGV0IGN1cnJlbnRCdWZmZXJQdHIgPSBudWxsXG5cbmNvbnN0IFRJTUVPVVRfSEVBREVSUyA9IDFcbmNvbnN0IFRJTUVPVVRfQk9EWSA9IDJcbmNvbnN0IFRJTUVPVVRfSURMRSA9IDNcblxuY2xhc3MgUGFyc2VyIHtcbiAgY29uc3RydWN0b3IgKGNsaWVudCwgc29ja2V0LCB7IGV4cG9ydHMgfSkge1xuICAgIGFzc2VydChOdW1iZXIuaXNGaW5pdGUoY2xpZW50W2tNYXhIZWFkZXJzU2l6ZV0pICYmIGNsaWVudFtrTWF4SGVhZGVyc1NpemVdID4gMClcblxuICAgIHRoaXMubGxodHRwID0gZXhwb3J0c1xuICAgIHRoaXMucHRyID0gdGhpcy5sbGh0dHAubGxodHRwX2FsbG9jKGNvbnN0YW50cy5UWVBFLlJFU1BPTlNFKVxuICAgIHRoaXMuY2xpZW50ID0gY2xpZW50XG4gICAgdGhpcy5zb2NrZXQgPSBzb2NrZXRcbiAgICB0aGlzLnRpbWVvdXQgPSBudWxsXG4gICAgdGhpcy50aW1lb3V0VmFsdWUgPSBudWxsXG4gICAgdGhpcy50aW1lb3V0VHlwZSA9IG51bGxcbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBudWxsXG4gICAgdGhpcy5zdGF0dXNUZXh0ID0gJydcbiAgICB0aGlzLnVwZ3JhZGUgPSBmYWxzZVxuICAgIHRoaXMuaGVhZGVycyA9IFtdXG4gICAgdGhpcy5oZWFkZXJzU2l6ZSA9IDBcbiAgICB0aGlzLmhlYWRlcnNNYXhTaXplID0gY2xpZW50W2tNYXhIZWFkZXJzU2l6ZV1cbiAgICB0aGlzLnNob3VsZEtlZXBBbGl2ZSA9IGZhbHNlXG4gICAgdGhpcy5wYXVzZWQgPSBmYWxzZVxuICAgIHRoaXMucmVzdW1lID0gdGhpcy5yZXN1bWUuYmluZCh0aGlzKVxuXG4gICAgdGhpcy5ieXRlc1JlYWQgPSAwXG5cbiAgICB0aGlzLmtlZXBBbGl2ZSA9ICcnXG4gICAgdGhpcy5jb250ZW50TGVuZ3RoID0gJydcbiAgICB0aGlzLmNvbm5lY3Rpb24gPSAnJ1xuICAgIHRoaXMubWF4UmVzcG9uc2VTaXplID0gY2xpZW50W2tNYXhSZXNwb25zZVNpemVdXG4gIH1cblxuICBzZXRUaW1lb3V0ICh2YWx1ZSwgdHlwZSkge1xuICAgIHRoaXMudGltZW91dFR5cGUgPSB0eXBlXG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLnRpbWVvdXRWYWx1ZSkge1xuICAgICAgdGltZXJzLmNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpXG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgdGhpcy50aW1lb3V0ID0gdGltZXJzLnNldFRpbWVvdXQob25QYXJzZXJUaW1lb3V0LCB2YWx1ZSwgdGhpcylcbiAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIGVsc2U6IG9ubHkgZm9yIGplc3RcbiAgICAgICAgaWYgKHRoaXMudGltZW91dC51bnJlZikge1xuICAgICAgICAgIHRoaXMudGltZW91dC51bnJlZigpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudGltZW91dCA9IG51bGxcbiAgICAgIH1cbiAgICAgIHRoaXMudGltZW91dFZhbHVlID0gdmFsdWVcbiAgICB9IGVsc2UgaWYgKHRoaXMudGltZW91dCkge1xuICAgICAgLy8gaXN0YW5idWwgaWdub3JlIGVsc2U6IG9ubHkgZm9yIGplc3RcbiAgICAgIGlmICh0aGlzLnRpbWVvdXQucmVmcmVzaCkge1xuICAgICAgICB0aGlzLnRpbWVvdXQucmVmcmVzaCgpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmVzdW1lICgpIHtcbiAgICBpZiAodGhpcy5zb2NrZXQuZGVzdHJveWVkIHx8ICF0aGlzLnBhdXNlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgYXNzZXJ0KHRoaXMucHRyICE9IG51bGwpXG4gICAgYXNzZXJ0KGN1cnJlbnRQYXJzZXIgPT0gbnVsbClcblxuICAgIHRoaXMubGxodHRwLmxsaHR0cF9yZXN1bWUodGhpcy5wdHIpXG5cbiAgICBhc3NlcnQodGhpcy50aW1lb3V0VHlwZSA9PT0gVElNRU9VVF9CT0RZKVxuICAgIGlmICh0aGlzLnRpbWVvdXQpIHtcbiAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBvbmx5IGZvciBqZXN0XG4gICAgICBpZiAodGhpcy50aW1lb3V0LnJlZnJlc2gpIHtcbiAgICAgICAgdGhpcy50aW1lb3V0LnJlZnJlc2goKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucGF1c2VkID0gZmFsc2VcbiAgICB0aGlzLmV4ZWN1dGUodGhpcy5zb2NrZXQucmVhZCgpIHx8IEVNUFRZX0JVRikgLy8gRmx1c2ggcGFyc2VyLlxuICAgIHRoaXMucmVhZE1vcmUoKVxuICB9XG5cbiAgcmVhZE1vcmUgKCkge1xuICAgIHdoaWxlICghdGhpcy5wYXVzZWQgJiYgdGhpcy5wdHIpIHtcbiAgICAgIGNvbnN0IGNodW5rID0gdGhpcy5zb2NrZXQucmVhZCgpXG4gICAgICBpZiAoY2h1bmsgPT09IG51bGwpIHtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIHRoaXMuZXhlY3V0ZShjaHVuaylcbiAgICB9XG4gIH1cblxuICBleGVjdXRlIChkYXRhKSB7XG4gICAgYXNzZXJ0KHRoaXMucHRyICE9IG51bGwpXG4gICAgYXNzZXJ0KGN1cnJlbnRQYXJzZXIgPT0gbnVsbClcbiAgICBhc3NlcnQoIXRoaXMucGF1c2VkKVxuXG4gICAgY29uc3QgeyBzb2NrZXQsIGxsaHR0cCB9ID0gdGhpc1xuXG4gICAgaWYgKGRhdGEubGVuZ3RoID4gY3VycmVudEJ1ZmZlclNpemUpIHtcbiAgICAgIGlmIChjdXJyZW50QnVmZmVyUHRyKSB7XG4gICAgICAgIGxsaHR0cC5mcmVlKGN1cnJlbnRCdWZmZXJQdHIpXG4gICAgICB9XG4gICAgICBjdXJyZW50QnVmZmVyU2l6ZSA9IE1hdGguY2VpbChkYXRhLmxlbmd0aCAvIDQwOTYpICogNDA5NlxuICAgICAgY3VycmVudEJ1ZmZlclB0ciA9IGxsaHR0cC5tYWxsb2MoY3VycmVudEJ1ZmZlclNpemUpXG4gICAgfVxuXG4gICAgbmV3IFVpbnQ4QXJyYXkobGxodHRwLm1lbW9yeS5idWZmZXIsIGN1cnJlbnRCdWZmZXJQdHIsIGN1cnJlbnRCdWZmZXJTaXplKS5zZXQoZGF0YSlcblxuICAgIC8vIENhbGwgYGV4ZWN1dGVgIG9uIHRoZSB3YXNtIHBhcnNlci5cbiAgICAvLyBXZSBwYXNzIHRoZSBgbGxodHRwX3BhcnNlcmAgcG9pbnRlciBhZGRyZXNzLCB0aGUgcG9pbnRlciBhZGRyZXNzIG9mIGJ1ZmZlciB2aWV3IGRhdGEsXG4gICAgLy8gYW5kIGZpbmFsbHkgdGhlIGxlbmd0aCBvZiBieXRlcyB0byBwYXJzZS5cbiAgICAvLyBUaGUgcmV0dXJuIHZhbHVlIGlzIGFuIGVycm9yIGNvZGUgb3IgYGNvbnN0YW50cy5FUlJPUi5PS2AuXG4gICAgdHJ5IHtcbiAgICAgIGxldCByZXRcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY3VycmVudEJ1ZmZlclJlZiA9IGRhdGFcbiAgICAgICAgY3VycmVudFBhcnNlciA9IHRoaXNcbiAgICAgICAgcmV0ID0gbGxodHRwLmxsaHR0cF9leGVjdXRlKHRoaXMucHRyLCBjdXJyZW50QnVmZmVyUHRyLCBkYXRhLmxlbmd0aClcbiAgICAgICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY2F0Y2ggKi9cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogZGlmZmljdWx0IHRvIG1ha2UgYSB0ZXN0IGNhc2UgZm9yICovXG4gICAgICAgIHRocm93IGVyclxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgY3VycmVudFBhcnNlciA9IG51bGxcbiAgICAgICAgY3VycmVudEJ1ZmZlclJlZiA9IG51bGxcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb2Zmc2V0ID0gbGxodHRwLmxsaHR0cF9nZXRfZXJyb3JfcG9zKHRoaXMucHRyKSAtIGN1cnJlbnRCdWZmZXJQdHJcblxuICAgICAgaWYgKHJldCA9PT0gY29uc3RhbnRzLkVSUk9SLlBBVVNFRF9VUEdSQURFKSB7XG4gICAgICAgIHRoaXMub25VcGdyYWRlKGRhdGEuc2xpY2Uob2Zmc2V0KSlcbiAgICAgIH0gZWxzZSBpZiAocmV0ID09PSBjb25zdGFudHMuRVJST1IuUEFVU0VEKSB7XG4gICAgICAgIHRoaXMucGF1c2VkID0gdHJ1ZVxuICAgICAgICBzb2NrZXQudW5zaGlmdChkYXRhLnNsaWNlKG9mZnNldCkpXG4gICAgICB9IGVsc2UgaWYgKHJldCAhPT0gY29uc3RhbnRzLkVSUk9SLk9LKSB7XG4gICAgICAgIGNvbnN0IHB0ciA9IGxsaHR0cC5sbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbih0aGlzLnB0cilcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSAnJ1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogZGlmZmljdWx0IHRvIG1ha2UgYSB0ZXN0IGNhc2UgZm9yICovXG4gICAgICAgIGlmIChwdHIpIHtcbiAgICAgICAgICBjb25zdCBsZW4gPSBuZXcgVWludDhBcnJheShsbGh0dHAubWVtb3J5LmJ1ZmZlciwgcHRyKS5pbmRleE9mKDApXG4gICAgICAgICAgbWVzc2FnZSA9XG4gICAgICAgICAgICAnUmVzcG9uc2UgZG9lcyBub3QgbWF0Y2ggdGhlIEhUVFAvMS4xIHByb3RvY29sICgnICtcbiAgICAgICAgICAgIEJ1ZmZlci5mcm9tKGxsaHR0cC5tZW1vcnkuYnVmZmVyLCBwdHIsIGxlbikudG9TdHJpbmcoKSArXG4gICAgICAgICAgICAnKSdcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgSFRUUFBhcnNlckVycm9yKG1lc3NhZ2UsIGNvbnN0YW50cy5FUlJPUltyZXRdLCBkYXRhLnNsaWNlKG9mZnNldCkpXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBlcnIpXG4gICAgfVxuICB9XG5cbiAgZGVzdHJveSAoKSB7XG4gICAgYXNzZXJ0KHRoaXMucHRyICE9IG51bGwpXG4gICAgYXNzZXJ0KGN1cnJlbnRQYXJzZXIgPT0gbnVsbClcblxuICAgIHRoaXMubGxodHRwLmxsaHR0cF9mcmVlKHRoaXMucHRyKVxuICAgIHRoaXMucHRyID0gbnVsbFxuXG4gICAgdGltZXJzLmNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpXG4gICAgdGhpcy50aW1lb3V0ID0gbnVsbFxuICAgIHRoaXMudGltZW91dFZhbHVlID0gbnVsbFxuICAgIHRoaXMudGltZW91dFR5cGUgPSBudWxsXG5cbiAgICB0aGlzLnBhdXNlZCA9IGZhbHNlXG4gIH1cblxuICBvblN0YXR1cyAoYnVmKSB7XG4gICAgdGhpcy5zdGF0dXNUZXh0ID0gYnVmLnRvU3RyaW5nKClcbiAgfVxuXG4gIG9uTWVzc2FnZUJlZ2luICgpIHtcbiAgICBjb25zdCB7IHNvY2tldCwgY2xpZW50IH0gPSB0aGlzXG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogZGlmZmljdWx0IHRvIG1ha2UgYSB0ZXN0IGNhc2UgZm9yICovXG4gICAgaWYgKHNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdXVxuICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuICB9XG5cbiAgb25IZWFkZXJGaWVsZCAoYnVmKSB7XG4gICAgY29uc3QgbGVuID0gdGhpcy5oZWFkZXJzLmxlbmd0aFxuXG4gICAgaWYgKChsZW4gJiAxKSA9PT0gMCkge1xuICAgICAgdGhpcy5oZWFkZXJzLnB1c2goYnVmKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhlYWRlcnNbbGVuIC0gMV0gPSBCdWZmZXIuY29uY2F0KFt0aGlzLmhlYWRlcnNbbGVuIC0gMV0sIGJ1Zl0pXG4gICAgfVxuXG4gICAgdGhpcy50cmFja0hlYWRlcihidWYubGVuZ3RoKVxuICB9XG5cbiAgb25IZWFkZXJWYWx1ZSAoYnVmKSB7XG4gICAgbGV0IGxlbiA9IHRoaXMuaGVhZGVycy5sZW5ndGhcblxuICAgIGlmICgobGVuICYgMSkgPT09IDEpIHtcbiAgICAgIHRoaXMuaGVhZGVycy5wdXNoKGJ1ZilcbiAgICAgIGxlbiArPSAxXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGVhZGVyc1tsZW4gLSAxXSA9IEJ1ZmZlci5jb25jYXQoW3RoaXMuaGVhZGVyc1tsZW4gLSAxXSwgYnVmXSlcbiAgICB9XG5cbiAgICBjb25zdCBrZXkgPSB0aGlzLmhlYWRlcnNbbGVuIC0gMl1cbiAgICBpZiAoa2V5Lmxlbmd0aCA9PT0gMTAgJiYga2V5LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT0gJ2tlZXAtYWxpdmUnKSB7XG4gICAgICB0aGlzLmtlZXBBbGl2ZSArPSBidWYudG9TdHJpbmcoKVxuICAgIH0gZWxzZSBpZiAoa2V5Lmxlbmd0aCA9PT0gMTAgJiYga2V5LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT0gJ2Nvbm5lY3Rpb24nKSB7XG4gICAgICB0aGlzLmNvbm5lY3Rpb24gKz0gYnVmLnRvU3RyaW5nKClcbiAgICB9IGVsc2UgaWYgKGtleS5sZW5ndGggPT09IDE0ICYmIGtleS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT09ICdjb250ZW50LWxlbmd0aCcpIHtcbiAgICAgIHRoaXMuY29udGVudExlbmd0aCArPSBidWYudG9TdHJpbmcoKVxuICAgIH1cblxuICAgIHRoaXMudHJhY2tIZWFkZXIoYnVmLmxlbmd0aClcbiAgfVxuXG4gIHRyYWNrSGVhZGVyIChsZW4pIHtcbiAgICB0aGlzLmhlYWRlcnNTaXplICs9IGxlblxuICAgIGlmICh0aGlzLmhlYWRlcnNTaXplID49IHRoaXMuaGVhZGVyc01heFNpemUpIHtcbiAgICAgIHV0aWwuZGVzdHJveSh0aGlzLnNvY2tldCwgbmV3IEhlYWRlcnNPdmVyZmxvd0Vycm9yKCkpXG4gICAgfVxuICB9XG5cbiAgb25VcGdyYWRlIChoZWFkKSB7XG4gICAgY29uc3QgeyB1cGdyYWRlLCBjbGllbnQsIHNvY2tldCwgaGVhZGVycywgc3RhdHVzQ29kZSB9ID0gdGhpc1xuXG4gICAgYXNzZXJ0KHVwZ3JhZGUpXG5cbiAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XV1cbiAgICBhc3NlcnQocmVxdWVzdClcblxuICAgIGFzc2VydCghc29ja2V0LmRlc3Ryb3llZClcbiAgICBhc3NlcnQoc29ja2V0ID09PSBjbGllbnRba1NvY2tldF0pXG4gICAgYXNzZXJ0KCF0aGlzLnBhdXNlZClcbiAgICBhc3NlcnQocmVxdWVzdC51cGdyYWRlIHx8IHJlcXVlc3QubWV0aG9kID09PSAnQ09OTkVDVCcpXG5cbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBudWxsXG4gICAgdGhpcy5zdGF0dXNUZXh0ID0gJydcbiAgICB0aGlzLnNob3VsZEtlZXBBbGl2ZSA9IG51bGxcblxuICAgIGFzc2VydCh0aGlzLmhlYWRlcnMubGVuZ3RoICUgMiA9PT0gMClcbiAgICB0aGlzLmhlYWRlcnMgPSBbXVxuICAgIHRoaXMuaGVhZGVyc1NpemUgPSAwXG5cbiAgICBzb2NrZXQudW5zaGlmdChoZWFkKVxuXG4gICAgc29ja2V0W2tQYXJzZXJdLmRlc3Ryb3koKVxuICAgIHNvY2tldFtrUGFyc2VyXSA9IG51bGxcblxuICAgIHNvY2tldFtrQ2xpZW50XSA9IG51bGxcbiAgICBzb2NrZXRba0Vycm9yXSA9IG51bGxcbiAgICBzb2NrZXRcbiAgICAgIC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvblNvY2tldEVycm9yKVxuICAgICAgLnJlbW92ZUxpc3RlbmVyKCdyZWFkYWJsZScsIG9uU29ja2V0UmVhZGFibGUpXG4gICAgICAucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIG9uU29ja2V0RW5kKVxuICAgICAgLnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uU29ja2V0Q2xvc2UpXG5cbiAgICBjbGllbnRba1NvY2tldF0gPSBudWxsXG4gICAgY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XSsrXSA9IG51bGxcbiAgICBjbGllbnQuZW1pdCgnZGlzY29ubmVjdCcsIGNsaWVudFtrVXJsXSwgW2NsaWVudF0sIG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoJ3VwZ3JhZGUnKSlcblxuICAgIHRyeSB7XG4gICAgICByZXF1ZXN0Lm9uVXBncmFkZShzdGF0dXNDb2RlLCBoZWFkZXJzLCBzb2NrZXQpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBlcnIpXG4gICAgfVxuXG4gICAgcmVzdW1lKGNsaWVudClcbiAgfVxuXG4gIG9uSGVhZGVyc0NvbXBsZXRlIChzdGF0dXNDb2RlLCB1cGdyYWRlLCBzaG91bGRLZWVwQWxpdmUpIHtcbiAgICBjb25zdCB7IGNsaWVudCwgc29ja2V0LCBoZWFkZXJzLCBzdGF0dXNUZXh0IH0gPSB0aGlzXG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogZGlmZmljdWx0IHRvIG1ha2UgYSB0ZXN0IGNhc2UgZm9yICovXG4gICAgaWYgKHNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdXVxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IGRpZmZpY3VsdCB0byBtYWtlIGEgdGVzdCBjYXNlIGZvciAqL1xuICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgYXNzZXJ0KCF0aGlzLnVwZ3JhZGUpXG4gICAgYXNzZXJ0KHRoaXMuc3RhdHVzQ29kZSA8IDIwMClcblxuICAgIGlmIChzdGF0dXNDb2RlID09PSAxMDApIHtcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBTb2NrZXRFcnJvcignYmFkIHJlc3BvbnNlJywgdXRpbC5nZXRTb2NrZXRJbmZvKHNvY2tldCkpKVxuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgLyogdGhpcyBjYW4gb25seSBoYXBwZW4gaWYgc2VydmVyIGlzIG1pc2JlaGF2aW5nICovXG4gICAgaWYgKHVwZ3JhZGUgJiYgIXJlcXVlc3QudXBncmFkZSkge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IFNvY2tldEVycm9yKCdiYWQgdXBncmFkZScsIHV0aWwuZ2V0U29ja2V0SW5mbyhzb2NrZXQpKSlcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0aGlzLnRpbWVvdXRUeXBlLCBUSU1FT1VUX0hFQURFUlMpXG5cbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBzdGF0dXNDb2RlXG4gICAgdGhpcy5zaG91bGRLZWVwQWxpdmUgPSAoXG4gICAgICBzaG91bGRLZWVwQWxpdmUgfHxcbiAgICAgIC8vIE92ZXJyaWRlIGxsaHR0cCB2YWx1ZSB3aGljaCBkb2VzIG5vdCBhbGxvdyBrZWVwQWxpdmUgZm9yIEhFQUQuXG4gICAgICAocmVxdWVzdC5tZXRob2QgPT09ICdIRUFEJyAmJiAhc29ja2V0W2tSZXNldF0gJiYgdGhpcy5jb25uZWN0aW9uLnRvTG93ZXJDYXNlKCkgPT09ICdrZWVwLWFsaXZlJylcbiAgICApXG5cbiAgICBpZiAodGhpcy5zdGF0dXNDb2RlID49IDIwMCkge1xuICAgICAgY29uc3QgYm9keVRpbWVvdXQgPSByZXF1ZXN0LmJvZHlUaW1lb3V0ICE9IG51bGxcbiAgICAgICAgPyByZXF1ZXN0LmJvZHlUaW1lb3V0XG4gICAgICAgIDogY2xpZW50W2tCb2R5VGltZW91dF1cbiAgICAgIHRoaXMuc2V0VGltZW91dChib2R5VGltZW91dCwgVElNRU9VVF9CT0RZKVxuICAgIH0gZWxzZSBpZiAodGhpcy50aW1lb3V0KSB7XG4gICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogb25seSBmb3IgamVzdFxuICAgICAgaWYgKHRoaXMudGltZW91dC5yZWZyZXNoKSB7XG4gICAgICAgIHRoaXMudGltZW91dC5yZWZyZXNoKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocmVxdWVzdC5tZXRob2QgPT09ICdDT05ORUNUJykge1xuICAgICAgYXNzZXJ0KGNsaWVudFtrUnVubmluZ10gPT09IDEpXG4gICAgICB0aGlzLnVwZ3JhZGUgPSB0cnVlXG4gICAgICByZXR1cm4gMlxuICAgIH1cblxuICAgIGlmICh1cGdyYWRlKSB7XG4gICAgICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA9PT0gMSlcbiAgICAgIHRoaXMudXBncmFkZSA9IHRydWVcbiAgICAgIHJldHVybiAyXG4gICAgfVxuXG4gICAgYXNzZXJ0KHRoaXMuaGVhZGVycy5sZW5ndGggJSAyID09PSAwKVxuICAgIHRoaXMuaGVhZGVycyA9IFtdXG4gICAgdGhpcy5oZWFkZXJzU2l6ZSA9IDBcblxuICAgIGlmICh0aGlzLnNob3VsZEtlZXBBbGl2ZSAmJiBjbGllbnRba1BpcGVsaW5pbmddKSB7XG4gICAgICBjb25zdCBrZWVwQWxpdmVUaW1lb3V0ID0gdGhpcy5rZWVwQWxpdmUgPyB1dGlsLnBhcnNlS2VlcEFsaXZlVGltZW91dCh0aGlzLmtlZXBBbGl2ZSkgOiBudWxsXG5cbiAgICAgIGlmIChrZWVwQWxpdmVUaW1lb3V0ICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgdGltZW91dCA9IE1hdGgubWluKFxuICAgICAgICAgIGtlZXBBbGl2ZVRpbWVvdXQgLSBjbGllbnRba0tlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGRdLFxuICAgICAgICAgIGNsaWVudFtrS2VlcEFsaXZlTWF4VGltZW91dF1cbiAgICAgICAgKVxuICAgICAgICBpZiAodGltZW91dCA8PSAwKSB7XG4gICAgICAgICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2xpZW50W2tLZWVwQWxpdmVUaW1lb3V0VmFsdWVdID0gdGltZW91dFxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjbGllbnRba0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZV0gPSBjbGllbnRba0tlZXBBbGl2ZURlZmF1bHRUaW1lb3V0XVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTdG9wIG1vcmUgcmVxdWVzdHMgZnJvbSBiZWluZyBkaXNwYXRjaGVkLlxuICAgICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gICAgfVxuXG4gICAgY29uc3QgcGF1c2UgPSByZXF1ZXN0Lm9uSGVhZGVycyhzdGF0dXNDb2RlLCBoZWFkZXJzLCB0aGlzLnJlc3VtZSwgc3RhdHVzVGV4dCkgPT09IGZhbHNlXG5cbiAgICBpZiAocmVxdWVzdC5hYm9ydGVkKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICBpZiAocmVxdWVzdC5tZXRob2QgPT09ICdIRUFEJykge1xuICAgICAgcmV0dXJuIDFcbiAgICB9XG5cbiAgICBpZiAoc3RhdHVzQ29kZSA8IDIwMCkge1xuICAgICAgcmV0dXJuIDFcbiAgICB9XG5cbiAgICBpZiAoc29ja2V0W2tCbG9ja2luZ10pIHtcbiAgICAgIHNvY2tldFtrQmxvY2tpbmddID0gZmFsc2VcbiAgICAgIHJlc3VtZShjbGllbnQpXG4gICAgfVxuXG4gICAgcmV0dXJuIHBhdXNlID8gY29uc3RhbnRzLkVSUk9SLlBBVVNFRCA6IDBcbiAgfVxuXG4gIG9uQm9keSAoYnVmKSB7XG4gICAgY29uc3QgeyBjbGllbnQsIHNvY2tldCwgc3RhdHVzQ29kZSwgbWF4UmVzcG9uc2VTaXplIH0gPSB0aGlzXG5cbiAgICBpZiAoc29ja2V0LmRlc3Ryb3llZCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdCA9IGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF1dXG4gICAgYXNzZXJ0KHJlcXVlc3QpXG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwodGhpcy50aW1lb3V0VHlwZSwgVElNRU9VVF9CT0RZKVxuICAgIGlmICh0aGlzLnRpbWVvdXQpIHtcbiAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBvbmx5IGZvciBqZXN0XG4gICAgICBpZiAodGhpcy50aW1lb3V0LnJlZnJlc2gpIHtcbiAgICAgICAgdGhpcy50aW1lb3V0LnJlZnJlc2goKVxuICAgICAgfVxuICAgIH1cblxuICAgIGFzc2VydChzdGF0dXNDb2RlID49IDIwMClcblxuICAgIGlmIChtYXhSZXNwb25zZVNpemUgPiAtMSAmJiB0aGlzLmJ5dGVzUmVhZCArIGJ1Zi5sZW5ndGggPiBtYXhSZXNwb25zZVNpemUpIHtcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBSZXNwb25zZUV4Y2VlZGVkTWF4U2l6ZUVycm9yKCkpXG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICB0aGlzLmJ5dGVzUmVhZCArPSBidWYubGVuZ3RoXG5cbiAgICBpZiAocmVxdWVzdC5vbkRhdGEoYnVmKSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBjb25zdGFudHMuRVJST1IuUEFVU0VEXG4gICAgfVxuICB9XG5cbiAgb25NZXNzYWdlQ29tcGxldGUgKCkge1xuICAgIGNvbnN0IHsgY2xpZW50LCBzb2NrZXQsIHN0YXR1c0NvZGUsIHVwZ3JhZGUsIGhlYWRlcnMsIGNvbnRlbnRMZW5ndGgsIGJ5dGVzUmVhZCwgc2hvdWxkS2VlcEFsaXZlIH0gPSB0aGlzXG5cbiAgICBpZiAoc29ja2V0LmRlc3Ryb3llZCAmJiAoIXN0YXR1c0NvZGUgfHwgc2hvdWxkS2VlcEFsaXZlKSkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgaWYgKHVwZ3JhZGUpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdXVxuICAgIGFzc2VydChyZXF1ZXN0KVxuXG4gICAgYXNzZXJ0KHN0YXR1c0NvZGUgPj0gMTAwKVxuXG4gICAgdGhpcy5zdGF0dXNDb2RlID0gbnVsbFxuICAgIHRoaXMuc3RhdHVzVGV4dCA9ICcnXG4gICAgdGhpcy5ieXRlc1JlYWQgPSAwXG4gICAgdGhpcy5jb250ZW50TGVuZ3RoID0gJydcbiAgICB0aGlzLmtlZXBBbGl2ZSA9ICcnXG4gICAgdGhpcy5jb25uZWN0aW9uID0gJydcblxuICAgIGFzc2VydCh0aGlzLmhlYWRlcnMubGVuZ3RoICUgMiA9PT0gMClcbiAgICB0aGlzLmhlYWRlcnMgPSBbXVxuICAgIHRoaXMuaGVhZGVyc1NpemUgPSAwXG5cbiAgICBpZiAoc3RhdHVzQ29kZSA8IDIwMCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IHNob3VsZCBiZSBoYW5kbGVkIGJ5IGxsaHR0cD8gKi9cbiAgICBpZiAocmVxdWVzdC5tZXRob2QgIT09ICdIRUFEJyAmJiBjb250ZW50TGVuZ3RoICYmIGJ5dGVzUmVhZCAhPT0gcGFyc2VJbnQoY29udGVudExlbmd0aCwgMTApKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgUmVzcG9uc2VDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpKVxuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgcmVxdWVzdC5vbkNvbXBsZXRlKGhlYWRlcnMpXG5cbiAgICBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdKytdID0gbnVsbFxuXG4gICAgaWYgKHNvY2tldFtrV3JpdGluZ10pIHtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjbGllbnRba1J1bm5pbmddLCAwKVxuICAgICAgLy8gUmVzcG9uc2UgY29tcGxldGVkIGJlZm9yZSByZXF1ZXN0LlxuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEluZm9ybWF0aW9uYWxFcnJvcigncmVzZXQnKSlcbiAgICAgIHJldHVybiBjb25zdGFudHMuRVJST1IuUEFVU0VEXG4gICAgfSBlbHNlIGlmICghc2hvdWxkS2VlcEFsaXZlKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgSW5mb3JtYXRpb25hbEVycm9yKCdyZXNldCcpKVxuICAgICAgcmV0dXJuIGNvbnN0YW50cy5FUlJPUi5QQVVTRURcbiAgICB9IGVsc2UgaWYgKHNvY2tldFtrUmVzZXRdICYmIGNsaWVudFtrUnVubmluZ10gPT09IDApIHtcbiAgICAgIC8vIERlc3Ryb3kgc29ja2V0IG9uY2UgYWxsIHJlcXVlc3RzIGhhdmUgY29tcGxldGVkLlxuICAgICAgLy8gVGhlIHJlcXVlc3QgYXQgdGhlIHRhaWwgb2YgdGhlIHBpcGVsaW5lIGlzIHRoZSBvbmVcbiAgICAgIC8vIHRoYXQgcmVxdWVzdGVkIHJlc2V0IGFuZCBubyBmdXJ0aGVyIHJlcXVlc3RzIHNob3VsZFxuICAgICAgLy8gaGF2ZSBiZWVuIHF1ZXVlZCBzaW5jZSB0aGVuLlxuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEluZm9ybWF0aW9uYWxFcnJvcigncmVzZXQnKSlcbiAgICAgIHJldHVybiBjb25zdGFudHMuRVJST1IuUEFVU0VEXG4gICAgfSBlbHNlIGlmIChjbGllbnRba1BpcGVsaW5pbmddID09PSAxKSB7XG4gICAgICAvLyBXZSBtdXN0IHdhaXQgYSBmdWxsIGV2ZW50IGxvb3AgY3ljbGUgdG8gcmV1c2UgdGhpcyBzb2NrZXQgdG8gbWFrZSBzdXJlXG4gICAgICAvLyB0aGF0IG5vbi1zcGVjIGNvbXBsaWFudCBzZXJ2ZXJzIGFyZSBub3QgY2xvc2luZyB0aGUgY29ubmVjdGlvbiBldmVuIGlmIHRoZXlcbiAgICAgIC8vIHNhaWQgdGhleSB3b24ndC5cbiAgICAgIHNldEltbWVkaWF0ZShyZXN1bWUsIGNsaWVudClcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdW1lKGNsaWVudClcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gb25QYXJzZXJUaW1lb3V0IChwYXJzZXIpIHtcbiAgY29uc3QgeyBzb2NrZXQsIHRpbWVvdXRUeXBlLCBjbGllbnQgfSA9IHBhcnNlclxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmICh0aW1lb3V0VHlwZSA9PT0gVElNRU9VVF9IRUFERVJTKSB7XG4gICAgaWYgKCFzb2NrZXRba1dyaXRpbmddIHx8IHNvY2tldC53cml0YWJsZU5lZWREcmFpbiB8fCBjbGllbnRba1J1bm5pbmddID4gMSkge1xuICAgICAgYXNzZXJ0KCFwYXJzZXIucGF1c2VkLCAnY2Fubm90IGJlIHBhdXNlZCB3aGlsZSB3YWl0aW5nIGZvciBoZWFkZXJzJylcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBIZWFkZXJzVGltZW91dEVycm9yKCkpXG4gICAgfVxuICB9IGVsc2UgaWYgKHRpbWVvdXRUeXBlID09PSBUSU1FT1VUX0JPRFkpIHtcbiAgICBpZiAoIXBhcnNlci5wYXVzZWQpIHtcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBCb2R5VGltZW91dEVycm9yKCkpXG4gICAgfVxuICB9IGVsc2UgaWYgKHRpbWVvdXRUeXBlID09PSBUSU1FT1VUX0lETEUpIHtcbiAgICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA9PT0gMCAmJiBjbGllbnRba0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZV0pXG4gICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEluZm9ybWF0aW9uYWxFcnJvcignc29ja2V0IGlkbGUgdGltZW91dCcpKVxuICB9XG59XG5cbmZ1bmN0aW9uIG9uU29ja2V0UmVhZGFibGUgKCkge1xuICBjb25zdCB7IFtrUGFyc2VyXTogcGFyc2VyIH0gPSB0aGlzXG4gIGlmIChwYXJzZXIpIHtcbiAgICBwYXJzZXIucmVhZE1vcmUoKVxuICB9XG59XG5cbmZ1bmN0aW9uIG9uU29ja2V0RXJyb3IgKGVycikge1xuICBjb25zdCB7IFtrQ2xpZW50XTogY2xpZW50LCBba1BhcnNlcl06IHBhcnNlciB9ID0gdGhpc1xuXG4gIGFzc2VydChlcnIuY29kZSAhPT0gJ0VSUl9UTFNfQ0VSVF9BTFROQU1FX0lOVkFMSUQnKVxuXG4gIGlmIChjbGllbnRba0hUVFBDb25uVmVyc2lvbl0gIT09ICdoMicpIHtcbiAgICAvLyBPbiBNYWMgT1MsIHdlIGdldCBhbiBFQ09OTlJFU0VUIGV2ZW4gaWYgdGhlcmUgaXMgYSBmdWxsIGJvZHkgdG8gYmUgZm9yd2FyZGVkXG4gICAgLy8gdG8gdGhlIHVzZXIuXG4gICAgaWYgKGVyci5jb2RlID09PSAnRUNPTk5SRVNFVCcgJiYgcGFyc2VyLnN0YXR1c0NvZGUgJiYgIXBhcnNlci5zaG91bGRLZWVwQWxpdmUpIHtcbiAgICAgIC8vIFdlIHRyZWF0IGFsbCBpbmNvbWluZyBkYXRhIHNvIGZvciBhcyBhIHZhbGlkIHJlc3BvbnNlLlxuICAgICAgcGFyc2VyLm9uTWVzc2FnZUNvbXBsZXRlKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgfVxuXG4gIHRoaXNba0Vycm9yXSA9IGVyclxuXG4gIG9uRXJyb3IodGhpc1trQ2xpZW50XSwgZXJyKVxufVxuXG5mdW5jdGlvbiBvbkVycm9yIChjbGllbnQsIGVycikge1xuICBpZiAoXG4gICAgY2xpZW50W2tSdW5uaW5nXSA9PT0gMCAmJlxuICAgIGVyci5jb2RlICE9PSAnVU5EX0VSUl9JTkZPJyAmJlxuICAgIGVyci5jb2RlICE9PSAnVU5EX0VSUl9TT0NLRVQnXG4gICkge1xuICAgIC8vIEVycm9yIGlzIG5vdCBjYXVzZWQgYnkgcnVubmluZyByZXF1ZXN0IGFuZCBub3QgYSByZWNvdmVyYWJsZVxuICAgIC8vIHNvY2tldCBlcnJvci5cblxuICAgIGFzc2VydChjbGllbnRba1BlbmRpbmdJZHhdID09PSBjbGllbnRba1J1bm5pbmdJZHhdKVxuXG4gICAgY29uc3QgcmVxdWVzdHMgPSBjbGllbnRba1F1ZXVlXS5zcGxpY2UoY2xpZW50W2tSdW5uaW5nSWR4XSlcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcXVlc3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCByZXF1ZXN0ID0gcmVxdWVzdHNbaV1cbiAgICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIGVycilcbiAgICB9XG4gICAgYXNzZXJ0KGNsaWVudFtrU2l6ZV0gPT09IDApXG4gIH1cbn1cblxuZnVuY3Rpb24gb25Tb2NrZXRFbmQgKCkge1xuICBjb25zdCB7IFtrUGFyc2VyXTogcGFyc2VyLCBba0NsaWVudF06IGNsaWVudCB9ID0gdGhpc1xuXG4gIGlmIChjbGllbnRba0hUVFBDb25uVmVyc2lvbl0gIT09ICdoMicpIHtcbiAgICBpZiAocGFyc2VyLnN0YXR1c0NvZGUgJiYgIXBhcnNlci5zaG91bGRLZWVwQWxpdmUpIHtcbiAgICAgIC8vIFdlIHRyZWF0IGFsbCBpbmNvbWluZyBkYXRhIHNvIGZhciBhcyBhIHZhbGlkIHJlc3BvbnNlLlxuICAgICAgcGFyc2VyLm9uTWVzc2FnZUNvbXBsZXRlKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgfVxuXG4gIHV0aWwuZGVzdHJveSh0aGlzLCBuZXcgU29ja2V0RXJyb3IoJ290aGVyIHNpZGUgY2xvc2VkJywgdXRpbC5nZXRTb2NrZXRJbmZvKHRoaXMpKSlcbn1cblxuZnVuY3Rpb24gb25Tb2NrZXRDbG9zZSAoKSB7XG4gIGNvbnN0IHsgW2tDbGllbnRdOiBjbGllbnQsIFtrUGFyc2VyXTogcGFyc2VyIH0gPSB0aGlzXG5cbiAgaWYgKGNsaWVudFtrSFRUUENvbm5WZXJzaW9uXSA9PT0gJ2gxJyAmJiBwYXJzZXIpIHtcbiAgICBpZiAoIXRoaXNba0Vycm9yXSAmJiBwYXJzZXIuc3RhdHVzQ29kZSAmJiAhcGFyc2VyLnNob3VsZEtlZXBBbGl2ZSkge1xuICAgICAgLy8gV2UgdHJlYXQgYWxsIGluY29taW5nIGRhdGEgc28gZmFyIGFzIGEgdmFsaWQgcmVzcG9uc2UuXG4gICAgICBwYXJzZXIub25NZXNzYWdlQ29tcGxldGUoKVxuICAgIH1cblxuICAgIHRoaXNba1BhcnNlcl0uZGVzdHJveSgpXG4gICAgdGhpc1trUGFyc2VyXSA9IG51bGxcbiAgfVxuXG4gIGNvbnN0IGVyciA9IHRoaXNba0Vycm9yXSB8fCBuZXcgU29ja2V0RXJyb3IoJ2Nsb3NlZCcsIHV0aWwuZ2V0U29ja2V0SW5mbyh0aGlzKSlcblxuICBjbGllbnRba1NvY2tldF0gPSBudWxsXG5cbiAgaWYgKGNsaWVudC5kZXN0cm95ZWQpIHtcbiAgICBhc3NlcnQoY2xpZW50W2tQZW5kaW5nXSA9PT0gMClcblxuICAgIC8vIEZhaWwgZW50aXJlIHF1ZXVlLlxuICAgIGNvbnN0IHJlcXVlc3RzID0gY2xpZW50W2tRdWV1ZV0uc3BsaWNlKGNsaWVudFtrUnVubmluZ0lkeF0pXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXF1ZXN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgcmVxdWVzdCA9IHJlcXVlc3RzW2ldXG4gICAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIpXG4gICAgfVxuICB9IGVsc2UgaWYgKGNsaWVudFtrUnVubmluZ10gPiAwICYmIGVyci5jb2RlICE9PSAnVU5EX0VSUl9JTkZPJykge1xuICAgIC8vIEZhaWwgaGVhZCBvZiBwaXBlbGluZS5cbiAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XV1cbiAgICBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdKytdID0gbnVsbFxuXG4gICAgZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyKVxuICB9XG5cbiAgY2xpZW50W2tQZW5kaW5nSWR4XSA9IGNsaWVudFtrUnVubmluZ0lkeF1cblxuICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA9PT0gMClcblxuICBjbGllbnQuZW1pdCgnZGlzY29ubmVjdCcsIGNsaWVudFtrVXJsXSwgW2NsaWVudF0sIGVycilcblxuICByZXN1bWUoY2xpZW50KVxufVxuXG5hc3luYyBmdW5jdGlvbiBjb25uZWN0IChjbGllbnQpIHtcbiAgYXNzZXJ0KCFjbGllbnRba0Nvbm5lY3RpbmddKVxuICBhc3NlcnQoIWNsaWVudFtrU29ja2V0XSlcblxuICBsZXQgeyBob3N0LCBob3N0bmFtZSwgcHJvdG9jb2wsIHBvcnQgfSA9IGNsaWVudFtrVXJsXVxuXG4gIC8vIFJlc29sdmUgaXB2NlxuICBpZiAoaG9zdG5hbWVbMF0gPT09ICdbJykge1xuICAgIGNvbnN0IGlkeCA9IGhvc3RuYW1lLmluZGV4T2YoJ10nKVxuXG4gICAgYXNzZXJ0KGlkeCAhPT0gLTEpXG4gICAgY29uc3QgaXAgPSBob3N0bmFtZS5zdWJzdHJpbmcoMSwgaWR4KVxuXG4gICAgYXNzZXJ0KG5ldC5pc0lQKGlwKSlcbiAgICBob3N0bmFtZSA9IGlwXG4gIH1cblxuICBjbGllbnRba0Nvbm5lY3RpbmddID0gdHJ1ZVxuXG4gIGlmIChjaGFubmVscy5iZWZvcmVDb25uZWN0Lmhhc1N1YnNjcmliZXJzKSB7XG4gICAgY2hhbm5lbHMuYmVmb3JlQ29ubmVjdC5wdWJsaXNoKHtcbiAgICAgIGNvbm5lY3RQYXJhbXM6IHtcbiAgICAgICAgaG9zdCxcbiAgICAgICAgaG9zdG5hbWUsXG4gICAgICAgIHByb3RvY29sLFxuICAgICAgICBwb3J0LFxuICAgICAgICBzZXJ2ZXJuYW1lOiBjbGllbnRba1NlcnZlck5hbWVdLFxuICAgICAgICBsb2NhbEFkZHJlc3M6IGNsaWVudFtrTG9jYWxBZGRyZXNzXVxuICAgICAgfSxcbiAgICAgIGNvbm5lY3RvcjogY2xpZW50W2tDb25uZWN0b3JdXG4gICAgfSlcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3Qgc29ja2V0ID0gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY2xpZW50W2tDb25uZWN0b3JdKHtcbiAgICAgICAgaG9zdCxcbiAgICAgICAgaG9zdG5hbWUsXG4gICAgICAgIHByb3RvY29sLFxuICAgICAgICBwb3J0LFxuICAgICAgICBzZXJ2ZXJuYW1lOiBjbGllbnRba1NlcnZlck5hbWVdLFxuICAgICAgICBsb2NhbEFkZHJlc3M6IGNsaWVudFtrTG9jYWxBZGRyZXNzXVxuICAgICAgfSwgKGVyciwgc29ja2V0KSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICByZWplY3QoZXJyKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc29sdmUoc29ja2V0KVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0pXG5cbiAgICBpZiAoY2xpZW50LmRlc3Ryb3llZCkge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldC5vbignZXJyb3InLCAoKSA9PiB7fSksIG5ldyBDbGllbnREZXN0cm95ZWRFcnJvcigpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY2xpZW50W2tDb25uZWN0aW5nXSA9IGZhbHNlXG5cbiAgICBhc3NlcnQoc29ja2V0KVxuXG4gICAgY29uc3QgaXNIMiA9IHNvY2tldC5hbHBuUHJvdG9jb2wgPT09ICdoMidcbiAgICBpZiAoaXNIMikge1xuICAgICAgaWYgKCFoMkV4cGVyaW1lbnRhbFdhcm5lZCkge1xuICAgICAgICBoMkV4cGVyaW1lbnRhbFdhcm5lZCA9IHRydWVcbiAgICAgICAgcHJvY2Vzcy5lbWl0V2FybmluZygnSDIgc3VwcG9ydCBpcyBleHBlcmltZW50YWwsIGV4cGVjdCB0aGVtIHRvIGNoYW5nZSBhdCBhbnkgdGltZS4nLCB7XG4gICAgICAgICAgY29kZTogJ1VORElDSS1IMidcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2Vzc2lvbiA9IGh0dHAyLmNvbm5lY3QoY2xpZW50W2tVcmxdLCB7XG4gICAgICAgIGNyZWF0ZUNvbm5lY3Rpb246ICgpID0+IHNvY2tldCxcbiAgICAgICAgcGVlck1heENvbmN1cnJlbnRTdHJlYW1zOiBjbGllbnRba0hUVFAyU2Vzc2lvblN0YXRlXS5tYXhDb25jdXJyZW50U3RyZWFtc1xuICAgICAgfSlcblxuICAgICAgY2xpZW50W2tIVFRQQ29ublZlcnNpb25dID0gJ2gyJ1xuICAgICAgc2Vzc2lvbltrQ2xpZW50XSA9IGNsaWVudFxuICAgICAgc2Vzc2lvbltrU29ja2V0XSA9IHNvY2tldFxuICAgICAgc2Vzc2lvbi5vbignZXJyb3InLCBvbkh0dHAyU2Vzc2lvbkVycm9yKVxuICAgICAgc2Vzc2lvbi5vbignZnJhbWVFcnJvcicsIG9uSHR0cDJGcmFtZUVycm9yKVxuICAgICAgc2Vzc2lvbi5vbignZW5kJywgb25IdHRwMlNlc3Npb25FbmQpXG4gICAgICBzZXNzaW9uLm9uKCdnb2F3YXknLCBvbkhUVFAyR29Bd2F5KVxuICAgICAgc2Vzc2lvbi5vbignY2xvc2UnLCBvblNvY2tldENsb3NlKVxuICAgICAgc2Vzc2lvbi51bnJlZigpXG5cbiAgICAgIGNsaWVudFtrSFRUUDJTZXNzaW9uXSA9IHNlc3Npb25cbiAgICAgIHNvY2tldFtrSFRUUDJTZXNzaW9uXSA9IHNlc3Npb25cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFsbGh0dHBJbnN0YW5jZSkge1xuICAgICAgICBsbGh0dHBJbnN0YW5jZSA9IGF3YWl0IGxsaHR0cFByb21pc2VcbiAgICAgICAgbGxodHRwUHJvbWlzZSA9IG51bGxcbiAgICAgIH1cblxuICAgICAgc29ja2V0W2tOb1JlZl0gPSBmYWxzZVxuICAgICAgc29ja2V0W2tXcml0aW5nXSA9IGZhbHNlXG4gICAgICBzb2NrZXRba1Jlc2V0XSA9IGZhbHNlXG4gICAgICBzb2NrZXRba0Jsb2NraW5nXSA9IGZhbHNlXG4gICAgICBzb2NrZXRba1BhcnNlcl0gPSBuZXcgUGFyc2VyKGNsaWVudCwgc29ja2V0LCBsbGh0dHBJbnN0YW5jZSlcbiAgICB9XG5cbiAgICBzb2NrZXRba0NvdW50ZXJdID0gMFxuICAgIHNvY2tldFtrTWF4UmVxdWVzdHNdID0gY2xpZW50W2tNYXhSZXF1ZXN0c11cbiAgICBzb2NrZXRba0NsaWVudF0gPSBjbGllbnRcbiAgICBzb2NrZXRba0Vycm9yXSA9IG51bGxcblxuICAgIHNvY2tldFxuICAgICAgLm9uKCdlcnJvcicsIG9uU29ja2V0RXJyb3IpXG4gICAgICAub24oJ3JlYWRhYmxlJywgb25Tb2NrZXRSZWFkYWJsZSlcbiAgICAgIC5vbignZW5kJywgb25Tb2NrZXRFbmQpXG4gICAgICAub24oJ2Nsb3NlJywgb25Tb2NrZXRDbG9zZSlcblxuICAgIGNsaWVudFtrU29ja2V0XSA9IHNvY2tldFxuXG4gICAgaWYgKGNoYW5uZWxzLmNvbm5lY3RlZC5oYXNTdWJzY3JpYmVycykge1xuICAgICAgY2hhbm5lbHMuY29ubmVjdGVkLnB1Ymxpc2goe1xuICAgICAgICBjb25uZWN0UGFyYW1zOiB7XG4gICAgICAgICAgaG9zdCxcbiAgICAgICAgICBob3N0bmFtZSxcbiAgICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgICBwb3J0LFxuICAgICAgICAgIHNlcnZlcm5hbWU6IGNsaWVudFtrU2VydmVyTmFtZV0sXG4gICAgICAgICAgbG9jYWxBZGRyZXNzOiBjbGllbnRba0xvY2FsQWRkcmVzc11cbiAgICAgICAgfSxcbiAgICAgICAgY29ubmVjdG9yOiBjbGllbnRba0Nvbm5lY3Rvcl0sXG4gICAgICAgIHNvY2tldFxuICAgICAgfSlcbiAgICB9XG4gICAgY2xpZW50LmVtaXQoJ2Nvbm5lY3QnLCBjbGllbnRba1VybF0sIFtjbGllbnRdKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoY2xpZW50LmRlc3Ryb3llZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY2xpZW50W2tDb25uZWN0aW5nXSA9IGZhbHNlXG5cbiAgICBpZiAoY2hhbm5lbHMuY29ubmVjdEVycm9yLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICBjaGFubmVscy5jb25uZWN0RXJyb3IucHVibGlzaCh7XG4gICAgICAgIGNvbm5lY3RQYXJhbXM6IHtcbiAgICAgICAgICBob3N0LFxuICAgICAgICAgIGhvc3RuYW1lLFxuICAgICAgICAgIHByb3RvY29sLFxuICAgICAgICAgIHBvcnQsXG4gICAgICAgICAgc2VydmVybmFtZTogY2xpZW50W2tTZXJ2ZXJOYW1lXSxcbiAgICAgICAgICBsb2NhbEFkZHJlc3M6IGNsaWVudFtrTG9jYWxBZGRyZXNzXVxuICAgICAgICB9LFxuICAgICAgICBjb25uZWN0b3I6IGNsaWVudFtrQ29ubmVjdG9yXSxcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAoZXJyLmNvZGUgPT09ICdFUlJfVExTX0NFUlRfQUxUTkFNRV9JTlZBTElEJykge1xuICAgICAgYXNzZXJ0KGNsaWVudFtrUnVubmluZ10gPT09IDApXG4gICAgICB3aGlsZSAoY2xpZW50W2tQZW5kaW5nXSA+IDAgJiYgY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tQZW5kaW5nSWR4XV0uc2VydmVybmFtZSA9PT0gY2xpZW50W2tTZXJ2ZXJOYW1lXSkge1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tQZW5kaW5nSWR4XSsrXVxuICAgICAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG9uRXJyb3IoY2xpZW50LCBlcnIpXG4gICAgfVxuXG4gICAgY2xpZW50LmVtaXQoJ2Nvbm5lY3Rpb25FcnJvcicsIGNsaWVudFtrVXJsXSwgW2NsaWVudF0sIGVycilcbiAgfVxuXG4gIHJlc3VtZShjbGllbnQpXG59XG5cbmZ1bmN0aW9uIGVtaXREcmFpbiAoY2xpZW50KSB7XG4gIGNsaWVudFtrTmVlZERyYWluXSA9IDBcbiAgY2xpZW50LmVtaXQoJ2RyYWluJywgY2xpZW50W2tVcmxdLCBbY2xpZW50XSlcbn1cblxuZnVuY3Rpb24gcmVzdW1lIChjbGllbnQsIHN5bmMpIHtcbiAgaWYgKGNsaWVudFtrUmVzdW1pbmddID09PSAyKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBjbGllbnRba1Jlc3VtaW5nXSA9IDJcblxuICBfcmVzdW1lKGNsaWVudCwgc3luYylcbiAgY2xpZW50W2tSZXN1bWluZ10gPSAwXG5cbiAgaWYgKGNsaWVudFtrUnVubmluZ0lkeF0gPiAyNTYpIHtcbiAgICBjbGllbnRba1F1ZXVlXS5zcGxpY2UoMCwgY2xpZW50W2tSdW5uaW5nSWR4XSlcbiAgICBjbGllbnRba1BlbmRpbmdJZHhdIC09IGNsaWVudFtrUnVubmluZ0lkeF1cbiAgICBjbGllbnRba1J1bm5pbmdJZHhdID0gMFxuICB9XG59XG5cbmZ1bmN0aW9uIF9yZXN1bWUgKGNsaWVudCwgc3luYykge1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIGlmIChjbGllbnQuZGVzdHJveWVkKSB7XG4gICAgICBhc3NlcnQoY2xpZW50W2tQZW5kaW5nXSA9PT0gMClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChjbGllbnRba0Nsb3NlZFJlc29sdmVdICYmICFjbGllbnRba1NpemVdKSB7XG4gICAgICBjbGllbnRba0Nsb3NlZFJlc29sdmVdKClcbiAgICAgIGNsaWVudFtrQ2xvc2VkUmVzb2x2ZV0gPSBudWxsXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBzb2NrZXQgPSBjbGllbnRba1NvY2tldF1cblxuICAgIGlmIChzb2NrZXQgJiYgIXNvY2tldC5kZXN0cm95ZWQgJiYgc29ja2V0LmFscG5Qcm90b2NvbCAhPT0gJ2gyJykge1xuICAgICAgaWYgKGNsaWVudFtrU2l6ZV0gPT09IDApIHtcbiAgICAgICAgaWYgKCFzb2NrZXRba05vUmVmXSAmJiBzb2NrZXQudW5yZWYpIHtcbiAgICAgICAgICBzb2NrZXQudW5yZWYoKVxuICAgICAgICAgIHNvY2tldFtrTm9SZWZdID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHNvY2tldFtrTm9SZWZdICYmIHNvY2tldC5yZWYpIHtcbiAgICAgICAgc29ja2V0LnJlZigpXG4gICAgICAgIHNvY2tldFtrTm9SZWZdID0gZmFsc2VcbiAgICAgIH1cblxuICAgICAgaWYgKGNsaWVudFtrU2l6ZV0gPT09IDApIHtcbiAgICAgICAgaWYgKHNvY2tldFtrUGFyc2VyXS50aW1lb3V0VHlwZSAhPT0gVElNRU9VVF9JRExFKSB7XG4gICAgICAgICAgc29ja2V0W2tQYXJzZXJdLnNldFRpbWVvdXQoY2xpZW50W2tLZWVwQWxpdmVUaW1lb3V0VmFsdWVdLCBUSU1FT1VUX0lETEUpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDAgJiYgc29ja2V0W2tQYXJzZXJdLnN0YXR1c0NvZGUgPCAyMDApIHtcbiAgICAgICAgaWYgKHNvY2tldFtrUGFyc2VyXS50aW1lb3V0VHlwZSAhPT0gVElNRU9VVF9IRUFERVJTKSB7XG4gICAgICAgICAgY29uc3QgcmVxdWVzdCA9IGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF1dXG4gICAgICAgICAgY29uc3QgaGVhZGVyc1RpbWVvdXQgPSByZXF1ZXN0LmhlYWRlcnNUaW1lb3V0ICE9IG51bGxcbiAgICAgICAgICAgID8gcmVxdWVzdC5oZWFkZXJzVGltZW91dFxuICAgICAgICAgICAgOiBjbGllbnRba0hlYWRlcnNUaW1lb3V0XVxuICAgICAgICAgIHNvY2tldFtrUGFyc2VyXS5zZXRUaW1lb3V0KGhlYWRlcnNUaW1lb3V0LCBUSU1FT1VUX0hFQURFUlMpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tCdXN5XSkge1xuICAgICAgY2xpZW50W2tOZWVkRHJhaW5dID0gMlxuICAgIH0gZWxzZSBpZiAoY2xpZW50W2tOZWVkRHJhaW5dID09PSAyKSB7XG4gICAgICBpZiAoc3luYykge1xuICAgICAgICBjbGllbnRba05lZWREcmFpbl0gPSAxXG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soZW1pdERyYWluLCBjbGllbnQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbWl0RHJhaW4oY2xpZW50KVxuICAgICAgfVxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tQZW5kaW5nXSA9PT0gMCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGNsaWVudFtrUnVubmluZ10gPj0gKGNsaWVudFtrUGlwZWxpbmluZ10gfHwgMSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1BlbmRpbmdJZHhdXVxuXG4gICAgaWYgKGNsaWVudFtrVXJsXS5wcm90b2NvbCA9PT0gJ2h0dHBzOicgJiYgY2xpZW50W2tTZXJ2ZXJOYW1lXSAhPT0gcmVxdWVzdC5zZXJ2ZXJuYW1lKSB7XG4gICAgICBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDApIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNsaWVudFtrU2VydmVyTmFtZV0gPSByZXF1ZXN0LnNlcnZlcm5hbWVcblxuICAgICAgaWYgKHNvY2tldCAmJiBzb2NrZXQuc2VydmVybmFtZSAhPT0gcmVxdWVzdC5zZXJ2ZXJuYW1lKSB7XG4gICAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoJ3NlcnZlcm5hbWUgY2hhbmdlZCcpKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tDb25uZWN0aW5nXSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKCFzb2NrZXQgJiYgIWNsaWVudFtrSFRUUDJTZXNzaW9uXSkge1xuICAgICAgY29ubmVjdChjbGllbnQpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoc29ja2V0LmRlc3Ryb3llZCB8fCBzb2NrZXRba1dyaXRpbmddIHx8IHNvY2tldFtrUmVzZXRdIHx8IHNvY2tldFtrQmxvY2tpbmddKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDAgJiYgIXJlcXVlc3QuaWRlbXBvdGVudCkge1xuICAgICAgLy8gTm9uLWlkZW1wb3RlbnQgcmVxdWVzdCBjYW5ub3QgYmUgcmV0cmllZC5cbiAgICAgIC8vIEVuc3VyZSB0aGF0IG5vIG90aGVyIHJlcXVlc3RzIGFyZSBpbmZsaWdodCBhbmRcbiAgICAgIC8vIGNvdWxkIGNhdXNlIGZhaWx1cmUuXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDAgJiYgKHJlcXVlc3QudXBncmFkZSB8fCByZXF1ZXN0Lm1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSkge1xuICAgICAgLy8gRG9uJ3QgZGlzcGF0Y2ggYW4gdXBncmFkZSB1bnRpbCBhbGwgcHJlY2VkaW5nIHJlcXVlc3RzIGhhdmUgY29tcGxldGVkLlxuICAgICAgLy8gQSBtaXNiZWhhdmluZyBzZXJ2ZXIgbWlnaHQgdXBncmFkZSB0aGUgY29ubmVjdGlvbiBiZWZvcmUgYWxsIHBpcGVsaW5lZFxuICAgICAgLy8gcmVxdWVzdCBoYXMgY29tcGxldGVkLlxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGNsaWVudFtrUnVubmluZ10gPiAwICYmIHV0aWwuYm9keUxlbmd0aChyZXF1ZXN0LmJvZHkpICE9PSAwICYmXG4gICAgICAodXRpbC5pc1N0cmVhbShyZXF1ZXN0LmJvZHkpIHx8IHV0aWwuaXNBc3luY0l0ZXJhYmxlKHJlcXVlc3QuYm9keSkpKSB7XG4gICAgICAvLyBSZXF1ZXN0IHdpdGggc3RyZWFtIG9yIGl0ZXJhdG9yIGJvZHkgY2FuIGVycm9yIHdoaWxlIG90aGVyIHJlcXVlc3RzXG4gICAgICAvLyBhcmUgaW5mbGlnaHQgYW5kIGluZGlyZWN0bHkgZXJyb3IgdGhvc2UgYXMgd2VsbC5cbiAgICAgIC8vIEVuc3VyZSB0aGlzIGRvZXNuJ3QgaGFwcGVuIGJ5IHdhaXRpbmcgZm9yIGluZmxpZ2h0XG4gICAgICAvLyB0byBjb21wbGV0ZSBiZWZvcmUgZGlzcGF0Y2hpbmcuXG5cbiAgICAgIC8vIFJlcXVlc3Qgd2l0aCBzdHJlYW0gb3IgaXRlcmF0b3IgYm9keSBjYW5ub3QgYmUgcmV0cmllZC5cbiAgICAgIC8vIEVuc3VyZSB0aGF0IG5vIG90aGVyIHJlcXVlc3RzIGFyZSBpbmZsaWdodCBhbmRcbiAgICAgIC8vIGNvdWxkIGNhdXNlIGZhaWx1cmUuXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIXJlcXVlc3QuYWJvcnRlZCAmJiB3cml0ZShjbGllbnQsIHJlcXVlc3QpKSB7XG4gICAgICBjbGllbnRba1BlbmRpbmdJZHhdKytcbiAgICB9IGVsc2Uge1xuICAgICAgY2xpZW50W2tRdWV1ZV0uc3BsaWNlKGNsaWVudFtrUGVuZGluZ0lkeF0sIDEpXG4gICAgfVxuICB9XG59XG5cbi8vIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM3MjMwI3NlY3Rpb24tMy4zLjJcbmZ1bmN0aW9uIHNob3VsZFNlbmRDb250ZW50TGVuZ3RoIChtZXRob2QpIHtcbiAgcmV0dXJuIG1ldGhvZCAhPT0gJ0dFVCcgJiYgbWV0aG9kICE9PSAnSEVBRCcgJiYgbWV0aG9kICE9PSAnT1BUSU9OUycgJiYgbWV0aG9kICE9PSAnVFJBQ0UnICYmIG1ldGhvZCAhPT0gJ0NPTk5FQ1QnXG59XG5cbmZ1bmN0aW9uIHdyaXRlIChjbGllbnQsIHJlcXVlc3QpIHtcbiAgaWYgKGNsaWVudFtrSFRUUENvbm5WZXJzaW9uXSA9PT0gJ2gyJykge1xuICAgIHdyaXRlSDIoY2xpZW50LCBjbGllbnRba0hUVFAyU2Vzc2lvbl0sIHJlcXVlc3QpXG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCB7IGJvZHksIG1ldGhvZCwgcGF0aCwgaG9zdCwgdXBncmFkZSwgaGVhZGVycywgYmxvY2tpbmcsIHJlc2V0IH0gPSByZXF1ZXN0XG5cbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi00LjMuMVxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTQuMy4yXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNC4zLjVcblxuICAvLyBTZW5kaW5nIGEgcGF5bG9hZCBib2R5IG9uIGEgcmVxdWVzdCB0aGF0IGRvZXMgbm90XG4gIC8vIGV4cGVjdCBpdCBjYW4gY2F1c2UgdW5kZWZpbmVkIGJlaGF2aW9yIG9uIHNvbWVcbiAgLy8gc2VydmVycyBhbmQgY29ycnVwdCBjb25uZWN0aW9uIHN0YXRlLiBEbyBub3RcbiAgLy8gcmUtdXNlIHRoZSBjb25uZWN0aW9uIGZvciBmdXJ0aGVyIHJlcXVlc3RzLlxuXG4gIGNvbnN0IGV4cGVjdHNQYXlsb2FkID0gKFxuICAgIG1ldGhvZCA9PT0gJ1BVVCcgfHxcbiAgICBtZXRob2QgPT09ICdQT1NUJyB8fFxuICAgIG1ldGhvZCA9PT0gJ1BBVENIJ1xuICApXG5cbiAgaWYgKGJvZHkgJiYgdHlwZW9mIGJvZHkucmVhZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIFRyeSB0byByZWFkIEVPRiBpbiBvcmRlciB0byBnZXQgbGVuZ3RoLlxuICAgIGJvZHkucmVhZCgwKVxuICB9XG5cbiAgY29uc3QgYm9keUxlbmd0aCA9IHV0aWwuYm9keUxlbmd0aChib2R5KVxuXG4gIGxldCBjb250ZW50TGVuZ3RoID0gYm9keUxlbmd0aFxuXG4gIGlmIChjb250ZW50TGVuZ3RoID09PSBudWxsKSB7XG4gICAgY29udGVudExlbmd0aCA9IHJlcXVlc3QuY29udGVudExlbmd0aFxuICB9XG5cbiAgaWYgKGNvbnRlbnRMZW5ndGggPT09IDAgJiYgIWV4cGVjdHNQYXlsb2FkKSB7XG4gICAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjMuMlxuICAgIC8vIEEgdXNlciBhZ2VudCBTSE9VTEQgTk9UIHNlbmQgYSBDb250ZW50LUxlbmd0aCBoZWFkZXIgZmllbGQgd2hlblxuICAgIC8vIHRoZSByZXF1ZXN0IG1lc3NhZ2UgZG9lcyBub3QgY29udGFpbiBhIHBheWxvYWQgYm9keSBhbmQgdGhlIG1ldGhvZFxuICAgIC8vIHNlbWFudGljcyBkbyBub3QgYW50aWNpcGF0ZSBzdWNoIGEgYm9keS5cblxuICAgIGNvbnRlbnRMZW5ndGggPSBudWxsXG4gIH1cblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMjA0NlxuICAvLyBBIHVzZXIgYWdlbnQgbWF5IHNlbmQgYSBDb250ZW50LUxlbmd0aCBoZWFkZXIgd2l0aCAwIHZhbHVlLCB0aGlzIHNob3VsZCBiZSBhbGxvd2VkLlxuICBpZiAoc2hvdWxkU2VuZENvbnRlbnRMZW5ndGgobWV0aG9kKSAmJiBjb250ZW50TGVuZ3RoID4gMCAmJiByZXF1ZXN0LmNvbnRlbnRMZW5ndGggIT09IG51bGwgJiYgcmVxdWVzdC5jb250ZW50TGVuZ3RoICE9PSBjb250ZW50TGVuZ3RoKSB7XG4gICAgaWYgKGNsaWVudFtrU3RyaWN0Q29udGVudExlbmd0aF0pIHtcbiAgICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKSlcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIHByb2Nlc3MuZW1pdFdhcm5pbmcobmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpKVxuICB9XG5cbiAgY29uc3Qgc29ja2V0ID0gY2xpZW50W2tTb2NrZXRdXG5cbiAgdHJ5IHtcbiAgICByZXF1ZXN0Lm9uQ29ubmVjdCgoZXJyKSA9PiB7XG4gICAgICBpZiAocmVxdWVzdC5hYm9ydGVkIHx8IHJlcXVlc3QuY29tcGxldGVkKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIgfHwgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKSlcblxuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEluZm9ybWF0aW9uYWxFcnJvcignYWJvcnRlZCcpKVxuICAgIH0pXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIGVycilcbiAgfVxuXG4gIGlmIChyZXF1ZXN0LmFib3J0ZWQpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlmIChtZXRob2QgPT09ICdIRUFEJykge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tY29sbGluYS91bmRpY2kvaXNzdWVzLzI1OFxuICAgIC8vIENsb3NlIGFmdGVyIGEgSEVBRCByZXF1ZXN0IHRvIGludGVyb3Agd2l0aCBtaXNiZWhhdmluZyBzZXJ2ZXJzXG4gICAgLy8gdGhhdCBtYXkgc2VuZCBhIGJvZHkgaW4gdGhlIHJlc3BvbnNlLlxuXG4gICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gIH1cblxuICBpZiAodXBncmFkZSB8fCBtZXRob2QgPT09ICdDT05ORUNUJykge1xuICAgIC8vIE9uIENPTk5FQ1Qgb3IgdXBncmFkZSwgYmxvY2sgcGlwZWxpbmUgZnJvbSBkaXNwYXRjaGluZyBmdXJ0aGVyXG4gICAgLy8gcmVxdWVzdHMgb24gdGhpcyBjb25uZWN0aW9uLlxuXG4gICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gIH1cblxuICBpZiAocmVzZXQgIT0gbnVsbCkge1xuICAgIHNvY2tldFtrUmVzZXRdID0gcmVzZXRcbiAgfVxuXG4gIGlmIChjbGllbnRba01heFJlcXVlc3RzXSAmJiBzb2NrZXRba0NvdW50ZXJdKysgPj0gY2xpZW50W2tNYXhSZXF1ZXN0c10pIHtcbiAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgfVxuXG4gIGlmIChibG9ja2luZykge1xuICAgIHNvY2tldFtrQmxvY2tpbmddID0gdHJ1ZVxuICB9XG5cbiAgbGV0IGhlYWRlciA9IGAke21ldGhvZH0gJHtwYXRofSBIVFRQLzEuMVxcclxcbmBcblxuICBpZiAodHlwZW9mIGhvc3QgPT09ICdzdHJpbmcnKSB7XG4gICAgaGVhZGVyICs9IGBob3N0OiAke2hvc3R9XFxyXFxuYFxuICB9IGVsc2Uge1xuICAgIGhlYWRlciArPSBjbGllbnRba0hvc3RIZWFkZXJdXG4gIH1cblxuICBpZiAodXBncmFkZSkge1xuICAgIGhlYWRlciArPSBgY29ubmVjdGlvbjogdXBncmFkZVxcclxcbnVwZ3JhZGU6ICR7dXBncmFkZX1cXHJcXG5gXG4gIH0gZWxzZSBpZiAoY2xpZW50W2tQaXBlbGluaW5nXSAmJiAhc29ja2V0W2tSZXNldF0pIHtcbiAgICBoZWFkZXIgKz0gJ2Nvbm5lY3Rpb246IGtlZXAtYWxpdmVcXHJcXG4nXG4gIH0gZWxzZSB7XG4gICAgaGVhZGVyICs9ICdjb25uZWN0aW9uOiBjbG9zZVxcclxcbidcbiAgfVxuXG4gIGlmIChoZWFkZXJzKSB7XG4gICAgaGVhZGVyICs9IGhlYWRlcnNcbiAgfVxuXG4gIGlmIChjaGFubmVscy5zZW5kSGVhZGVycy5oYXNTdWJzY3JpYmVycykge1xuICAgIGNoYW5uZWxzLnNlbmRIZWFkZXJzLnB1Ymxpc2goeyByZXF1ZXN0LCBoZWFkZXJzOiBoZWFkZXIsIHNvY2tldCB9KVxuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2U6IGFzc2VydGlvbiAqL1xuICBpZiAoIWJvZHkgfHwgYm9keUxlbmd0aCA9PT0gMCkge1xuICAgIGlmIChjb250ZW50TGVuZ3RoID09PSAwKSB7XG4gICAgICBzb2NrZXQud3JpdGUoYCR7aGVhZGVyfWNvbnRlbnQtbGVuZ3RoOiAwXFxyXFxuXFxyXFxuYCwgJ2xhdGluMScpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydChjb250ZW50TGVuZ3RoID09PSBudWxsLCAnbm8gYm9keSBtdXN0IG5vdCBoYXZlIGNvbnRlbnQgbGVuZ3RoJylcbiAgICAgIHNvY2tldC53cml0ZShgJHtoZWFkZXJ9XFxyXFxuYCwgJ2xhdGluMScpXG4gICAgfVxuICAgIHJlcXVlc3Qub25SZXF1ZXN0U2VudCgpXG4gIH0gZWxzZSBpZiAodXRpbC5pc0J1ZmZlcihib2R5KSkge1xuICAgIGFzc2VydChjb250ZW50TGVuZ3RoID09PSBib2R5LmJ5dGVMZW5ndGgsICdidWZmZXIgYm9keSBtdXN0IGhhdmUgY29udGVudCBsZW5ndGgnKVxuXG4gICAgc29ja2V0LmNvcmsoKVxuICAgIHNvY2tldC53cml0ZShgJHtoZWFkZXJ9Y29udGVudC1sZW5ndGg6ICR7Y29udGVudExlbmd0aH1cXHJcXG5cXHJcXG5gLCAnbGF0aW4xJylcbiAgICBzb2NrZXQud3JpdGUoYm9keSlcbiAgICBzb2NrZXQudW5jb3JrKClcbiAgICByZXF1ZXN0Lm9uQm9keVNlbnQoYm9keSlcbiAgICByZXF1ZXN0Lm9uUmVxdWVzdFNlbnQoKVxuICAgIGlmICghZXhwZWN0c1BheWxvYWQpIHtcbiAgICAgIHNvY2tldFtrUmVzZXRdID0gdHJ1ZVxuICAgIH1cbiAgfSBlbHNlIGlmICh1dGlsLmlzQmxvYkxpa2UoYm9keSkpIHtcbiAgICBpZiAodHlwZW9mIGJvZHkuc3RyZWFtID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB3cml0ZUl0ZXJhYmxlKHsgYm9keTogYm9keS5zdHJlYW0oKSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgd3JpdGVCbG9iKHsgYm9keSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQgfSlcbiAgICB9XG4gIH0gZWxzZSBpZiAodXRpbC5pc1N0cmVhbShib2R5KSkge1xuICAgIHdyaXRlU3RyZWFtKHsgYm9keSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQgfSlcbiAgfSBlbHNlIGlmICh1dGlsLmlzSXRlcmFibGUoYm9keSkpIHtcbiAgICB3cml0ZUl0ZXJhYmxlKHsgYm9keSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQgfSlcbiAgfSBlbHNlIHtcbiAgICBhc3NlcnQoZmFsc2UpXG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiB3cml0ZUgyIChjbGllbnQsIHNlc3Npb24sIHJlcXVlc3QpIHtcbiAgY29uc3QgeyBib2R5LCBtZXRob2QsIHBhdGgsIGhvc3QsIHVwZ3JhZGUsIGV4cGVjdENvbnRpbnVlLCBzaWduYWwsIGhlYWRlcnM6IHJlcUhlYWRlcnMgfSA9IHJlcXVlc3RcblxuICBsZXQgaGVhZGVyc1xuICBpZiAodHlwZW9mIHJlcUhlYWRlcnMgPT09ICdzdHJpbmcnKSBoZWFkZXJzID0gUmVxdWVzdFtrSFRUUDJDb3B5SGVhZGVyc10ocmVxSGVhZGVycy50cmltKCkpXG4gIGVsc2UgaGVhZGVycyA9IHJlcUhlYWRlcnNcblxuICBpZiAodXBncmFkZSkge1xuICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIG5ldyBFcnJvcignVXBncmFkZSBub3Qgc3VwcG9ydGVkIGZvciBIMicpKVxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBUT0RPKEhUVFAvMik6IFNob3VsZCB3ZSBjYWxsIG9uQ29ubmVjdCBpbW1lZGlhdGVseSBvciBvbiBzdHJlYW0gcmVhZHkgZXZlbnQ/XG4gICAgcmVxdWVzdC5vbkNvbm5lY3QoKGVycikgPT4ge1xuICAgICAgaWYgKHJlcXVlc3QuYWJvcnRlZCB8fCByZXF1ZXN0LmNvbXBsZXRlZCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyIHx8IG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKCkpXG4gICAgfSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyKVxuICB9XG5cbiAgaWYgKHJlcXVlc3QuYWJvcnRlZCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLyoqIEB0eXBlIHtpbXBvcnQoJ25vZGU6aHR0cDInKS5DbGllbnRIdHRwMlN0cmVhbX0gKi9cbiAgbGV0IHN0cmVhbVxuICBjb25zdCBoMlN0YXRlID0gY2xpZW50W2tIVFRQMlNlc3Npb25TdGF0ZV1cblxuICBoZWFkZXJzW0hUVFAyX0hFQURFUl9BVVRIT1JJVFldID0gaG9zdCB8fCBjbGllbnRba0hvc3RdXG4gIGhlYWRlcnNbSFRUUDJfSEVBREVSX01FVEhPRF0gPSBtZXRob2RcblxuICBpZiAobWV0aG9kID09PSAnQ09OTkVDVCcpIHtcbiAgICBzZXNzaW9uLnJlZigpXG4gICAgLy8gd2UgYXJlIGFscmVhZHkgY29ubmVjdGVkLCBzdHJlYW1zIGFyZSBwZW5kaW5nLCBmaXJzdCByZXF1ZXN0XG4gICAgLy8gd2lsbCBjcmVhdGUgYSBuZXcgc3RyZWFtLiBXZSB0cmlnZ2VyIGEgcmVxdWVzdCB0byBjcmVhdGUgdGhlIHN0cmVhbSBhbmQgd2FpdCB1bnRpbFxuICAgIC8vIGByZWFkeWAgZXZlbnQgaXMgdHJpZ2dlcmVkXG4gICAgLy8gV2UgZGlzYWJsZWQgZW5kU3RyZWFtIHRvIGFsbG93IHRoZSB1c2VyIHRvIHdyaXRlIHRvIHRoZSBzdHJlYW1cbiAgICBzdHJlYW0gPSBzZXNzaW9uLnJlcXVlc3QoaGVhZGVycywgeyBlbmRTdHJlYW06IGZhbHNlLCBzaWduYWwgfSlcblxuICAgIGlmIChzdHJlYW0uaWQgJiYgIXN0cmVhbS5wZW5kaW5nKSB7XG4gICAgICByZXF1ZXN0Lm9uVXBncmFkZShudWxsLCBudWxsLCBzdHJlYW0pXG4gICAgICArK2gyU3RhdGUub3BlblN0cmVhbXNcbiAgICB9IGVsc2Uge1xuICAgICAgc3RyZWFtLm9uY2UoJ3JlYWR5JywgKCkgPT4ge1xuICAgICAgICByZXF1ZXN0Lm9uVXBncmFkZShudWxsLCBudWxsLCBzdHJlYW0pXG4gICAgICAgICsraDJTdGF0ZS5vcGVuU3RyZWFtc1xuICAgICAgfSlcbiAgICB9XG5cbiAgICBzdHJlYW0ub25jZSgnY2xvc2UnLCAoKSA9PiB7XG4gICAgICBoMlN0YXRlLm9wZW5TdHJlYW1zIC09IDFcbiAgICAgIC8vIFRPRE8oSFRUUC8yKTogdW5yZWYgb25seSBpZiBjdXJyZW50IHN0cmVhbXMgY291bnQgaXMgMFxuICAgICAgaWYgKGgyU3RhdGUub3BlblN0cmVhbXMgPT09IDApIHNlc3Npb24udW5yZWYoKVxuICAgIH0pXG5cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc1NDAjc2VjdGlvbi04LjNcbiAgLy8gOnBhdGggYW5kIDpzY2hlbWUgaGVhZGVycyBtdXN0IGJlIG9taXRlZCB3aGVuIHNlbmRpbmcgQ09OTkVDVFxuXG4gIGhlYWRlcnNbSFRUUDJfSEVBREVSX1BBVEhdID0gcGF0aFxuICBoZWFkZXJzW0hUVFAyX0hFQURFUl9TQ0hFTUVdID0gJ2h0dHBzJ1xuXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNC4zLjFcbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi00LjMuMlxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTQuMy41XG5cbiAgLy8gU2VuZGluZyBhIHBheWxvYWQgYm9keSBvbiBhIHJlcXVlc3QgdGhhdCBkb2VzIG5vdFxuICAvLyBleHBlY3QgaXQgY2FuIGNhdXNlIHVuZGVmaW5lZCBiZWhhdmlvciBvbiBzb21lXG4gIC8vIHNlcnZlcnMgYW5kIGNvcnJ1cHQgY29ubmVjdGlvbiBzdGF0ZS4gRG8gbm90XG4gIC8vIHJlLXVzZSB0aGUgY29ubmVjdGlvbiBmb3IgZnVydGhlciByZXF1ZXN0cy5cblxuICBjb25zdCBleHBlY3RzUGF5bG9hZCA9IChcbiAgICBtZXRob2QgPT09ICdQVVQnIHx8XG4gICAgbWV0aG9kID09PSAnUE9TVCcgfHxcbiAgICBtZXRob2QgPT09ICdQQVRDSCdcbiAgKVxuXG4gIGlmIChib2R5ICYmIHR5cGVvZiBib2R5LnJlYWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBUcnkgdG8gcmVhZCBFT0YgaW4gb3JkZXIgdG8gZ2V0IGxlbmd0aC5cbiAgICBib2R5LnJlYWQoMClcbiAgfVxuXG4gIGxldCBjb250ZW50TGVuZ3RoID0gdXRpbC5ib2R5TGVuZ3RoKGJvZHkpXG5cbiAgaWYgKGNvbnRlbnRMZW5ndGggPT0gbnVsbCkge1xuICAgIGNvbnRlbnRMZW5ndGggPSByZXF1ZXN0LmNvbnRlbnRMZW5ndGhcbiAgfVxuXG4gIGlmIChjb250ZW50TGVuZ3RoID09PSAwIHx8ICFleHBlY3RzUGF5bG9hZCkge1xuICAgIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4zLjJcbiAgICAvLyBBIHVzZXIgYWdlbnQgU0hPVUxEIE5PVCBzZW5kIGEgQ29udGVudC1MZW5ndGggaGVhZGVyIGZpZWxkIHdoZW5cbiAgICAvLyB0aGUgcmVxdWVzdCBtZXNzYWdlIGRvZXMgbm90IGNvbnRhaW4gYSBwYXlsb2FkIGJvZHkgYW5kIHRoZSBtZXRob2RcbiAgICAvLyBzZW1hbnRpY3MgZG8gbm90IGFudGljaXBhdGUgc3VjaCBhIGJvZHkuXG5cbiAgICBjb250ZW50TGVuZ3RoID0gbnVsbFxuICB9XG5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzIwNDZcbiAgLy8gQSB1c2VyIGFnZW50IG1heSBzZW5kIGEgQ29udGVudC1MZW5ndGggaGVhZGVyIHdpdGggMCB2YWx1ZSwgdGhpcyBzaG91bGQgYmUgYWxsb3dlZC5cbiAgaWYgKHNob3VsZFNlbmRDb250ZW50TGVuZ3RoKG1ldGhvZCkgJiYgY29udGVudExlbmd0aCA+IDAgJiYgcmVxdWVzdC5jb250ZW50TGVuZ3RoICE9IG51bGwgJiYgcmVxdWVzdC5jb250ZW50TGVuZ3RoICE9PSBjb250ZW50TGVuZ3RoKSB7XG4gICAgaWYgKGNsaWVudFtrU3RyaWN0Q29udGVudExlbmd0aF0pIHtcbiAgICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKSlcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIHByb2Nlc3MuZW1pdFdhcm5pbmcobmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpKVxuICB9XG5cbiAgaWYgKGNvbnRlbnRMZW5ndGggIT0gbnVsbCkge1xuICAgIGFzc2VydChib2R5LCAnbm8gYm9keSBtdXN0IG5vdCBoYXZlIGNvbnRlbnQgbGVuZ3RoJylcbiAgICBoZWFkZXJzW0hUVFAyX0hFQURFUl9DT05URU5UX0xFTkdUSF0gPSBgJHtjb250ZW50TGVuZ3RofWBcbiAgfVxuXG4gIHNlc3Npb24ucmVmKClcblxuICBjb25zdCBzaG91bGRFbmRTdHJlYW0gPSBtZXRob2QgPT09ICdHRVQnIHx8IG1ldGhvZCA9PT0gJ0hFQUQnXG4gIGlmIChleHBlY3RDb250aW51ZSkge1xuICAgIGhlYWRlcnNbSFRUUDJfSEVBREVSX0VYUEVDVF0gPSAnMTAwLWNvbnRpbnVlJ1xuICAgIHN0cmVhbSA9IHNlc3Npb24ucmVxdWVzdChoZWFkZXJzLCB7IGVuZFN0cmVhbTogc2hvdWxkRW5kU3RyZWFtLCBzaWduYWwgfSlcblxuICAgIHN0cmVhbS5vbmNlKCdjb250aW51ZScsIHdyaXRlQm9keUgyKVxuICB9IGVsc2Uge1xuICAgIHN0cmVhbSA9IHNlc3Npb24ucmVxdWVzdChoZWFkZXJzLCB7XG4gICAgICBlbmRTdHJlYW06IHNob3VsZEVuZFN0cmVhbSxcbiAgICAgIHNpZ25hbFxuICAgIH0pXG4gICAgd3JpdGVCb2R5SDIoKVxuICB9XG5cbiAgLy8gSW5jcmVtZW50IGNvdW50ZXIgYXMgd2UgaGF2ZSBuZXcgc2V2ZXJhbCBzdHJlYW1zIG9wZW5cbiAgKytoMlN0YXRlLm9wZW5TdHJlYW1zXG5cbiAgc3RyZWFtLm9uY2UoJ3Jlc3BvbnNlJywgaGVhZGVycyA9PiB7XG4gICAgY29uc3QgeyBbSFRUUDJfSEVBREVSX1NUQVRVU106IHN0YXR1c0NvZGUsIC4uLnJlYWxIZWFkZXJzIH0gPSBoZWFkZXJzXG5cbiAgICBpZiAocmVxdWVzdC5vbkhlYWRlcnMoTnVtYmVyKHN0YXR1c0NvZGUpLCByZWFsSGVhZGVycywgc3RyZWFtLnJlc3VtZS5iaW5kKHN0cmVhbSksICcnKSA9PT0gZmFsc2UpIHtcbiAgICAgIHN0cmVhbS5wYXVzZSgpXG4gICAgfVxuICB9KVxuXG4gIHN0cmVhbS5vbmNlKCdlbmQnLCAoKSA9PiB7XG4gICAgcmVxdWVzdC5vbkNvbXBsZXRlKFtdKVxuICB9KVxuXG4gIHN0cmVhbS5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgIGlmIChyZXF1ZXN0Lm9uRGF0YShjaHVuaykgPT09IGZhbHNlKSB7XG4gICAgICBzdHJlYW0ucGF1c2UoKVxuICAgIH1cbiAgfSlcblxuICBzdHJlYW0ub25jZSgnY2xvc2UnLCAoKSA9PiB7XG4gICAgaDJTdGF0ZS5vcGVuU3RyZWFtcyAtPSAxXG4gICAgLy8gVE9ETyhIVFRQLzIpOiB1bnJlZiBvbmx5IGlmIGN1cnJlbnQgc3RyZWFtcyBjb3VudCBpcyAwXG4gICAgaWYgKGgyU3RhdGUub3BlblN0cmVhbXMgPT09IDApIHtcbiAgICAgIHNlc3Npb24udW5yZWYoKVxuICAgIH1cbiAgfSlcblxuICBzdHJlYW0ub25jZSgnZXJyb3InLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgaWYgKGNsaWVudFtrSFRUUDJTZXNzaW9uXSAmJiAhY2xpZW50W2tIVFRQMlNlc3Npb25dLmRlc3Ryb3llZCAmJiAhdGhpcy5jbG9zZWQgJiYgIXRoaXMuZGVzdHJveWVkKSB7XG4gICAgICBoMlN0YXRlLnN0cmVhbXMgLT0gMVxuICAgICAgdXRpbC5kZXN0cm95KHN0cmVhbSwgZXJyKVxuICAgIH1cbiAgfSlcblxuICBzdHJlYW0ub25jZSgnZnJhbWVFcnJvcicsICh0eXBlLCBjb2RlKSA9PiB7XG4gICAgY29uc3QgZXJyID0gbmV3IEluZm9ybWF0aW9uYWxFcnJvcihgSFRUUC8yOiBcImZyYW1lRXJyb3JcIiByZWNlaXZlZCAtIHR5cGUgJHt0eXBlfSwgY29kZSAke2NvZGV9YClcbiAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIpXG5cbiAgICBpZiAoY2xpZW50W2tIVFRQMlNlc3Npb25dICYmICFjbGllbnRba0hUVFAyU2Vzc2lvbl0uZGVzdHJveWVkICYmICF0aGlzLmNsb3NlZCAmJiAhdGhpcy5kZXN0cm95ZWQpIHtcbiAgICAgIGgyU3RhdGUuc3RyZWFtcyAtPSAxXG4gICAgICB1dGlsLmRlc3Ryb3koc3RyZWFtLCBlcnIpXG4gICAgfVxuICB9KVxuXG4gIC8vIHN0cmVhbS5vbignYWJvcnRlZCcsICgpID0+IHtcbiAgLy8gICAvLyBUT0RPKEhUVFAvMik6IFN1cHBvcnQgYWJvcnRlZFxuICAvLyB9KVxuXG4gIC8vIHN0cmVhbS5vbigndGltZW91dCcsICgpID0+IHtcbiAgLy8gICAvLyBUT0RPKEhUVFAvMik6IFN1cHBvcnQgdGltZW91dFxuICAvLyB9KVxuXG4gIC8vIHN0cmVhbS5vbigncHVzaCcsIGhlYWRlcnMgPT4ge1xuICAvLyAgIC8vIFRPRE8oSFRUUC8yKTogU3VwcG9yIHB1c2hcbiAgLy8gfSlcblxuICAvLyBzdHJlYW0ub24oJ3RyYWlsZXJzJywgaGVhZGVycyA9PiB7XG4gIC8vICAgLy8gVE9ETyhIVFRQLzIpOiBTdXBwb3J0IHRyYWlsZXJzXG4gIC8vIH0pXG5cbiAgcmV0dXJuIHRydWVcblxuICBmdW5jdGlvbiB3cml0ZUJvZHlIMiAoKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2U6IGFzc2VydGlvbiAqL1xuICAgIGlmICghYm9keSkge1xuICAgICAgcmVxdWVzdC5vblJlcXVlc3RTZW50KClcbiAgICB9IGVsc2UgaWYgKHV0aWwuaXNCdWZmZXIoYm9keSkpIHtcbiAgICAgIGFzc2VydChjb250ZW50TGVuZ3RoID09PSBib2R5LmJ5dGVMZW5ndGgsICdidWZmZXIgYm9keSBtdXN0IGhhdmUgY29udGVudCBsZW5ndGgnKVxuICAgICAgc3RyZWFtLmNvcmsoKVxuICAgICAgc3RyZWFtLndyaXRlKGJvZHkpXG4gICAgICBzdHJlYW0udW5jb3JrKClcbiAgICAgIHN0cmVhbS5lbmQoKVxuICAgICAgcmVxdWVzdC5vbkJvZHlTZW50KGJvZHkpXG4gICAgICByZXF1ZXN0Lm9uUmVxdWVzdFNlbnQoKVxuICAgIH0gZWxzZSBpZiAodXRpbC5pc0Jsb2JMaWtlKGJvZHkpKSB7XG4gICAgICBpZiAodHlwZW9mIGJvZHkuc3RyZWFtID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHdyaXRlSXRlcmFibGUoe1xuICAgICAgICAgIGNsaWVudCxcbiAgICAgICAgICByZXF1ZXN0LFxuICAgICAgICAgIGNvbnRlbnRMZW5ndGgsXG4gICAgICAgICAgaDJzdHJlYW06IHN0cmVhbSxcbiAgICAgICAgICBleHBlY3RzUGF5bG9hZCxcbiAgICAgICAgICBib2R5OiBib2R5LnN0cmVhbSgpLFxuICAgICAgICAgIHNvY2tldDogY2xpZW50W2tTb2NrZXRdLFxuICAgICAgICAgIGhlYWRlcjogJydcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdyaXRlQmxvYih7XG4gICAgICAgICAgYm9keSxcbiAgICAgICAgICBjbGllbnQsXG4gICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgICBjb250ZW50TGVuZ3RoLFxuICAgICAgICAgIGV4cGVjdHNQYXlsb2FkLFxuICAgICAgICAgIGgyc3RyZWFtOiBzdHJlYW0sXG4gICAgICAgICAgaGVhZGVyOiAnJyxcbiAgICAgICAgICBzb2NrZXQ6IGNsaWVudFtrU29ja2V0XVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodXRpbC5pc1N0cmVhbShib2R5KSkge1xuICAgICAgd3JpdGVTdHJlYW0oe1xuICAgICAgICBib2R5LFxuICAgICAgICBjbGllbnQsXG4gICAgICAgIHJlcXVlc3QsXG4gICAgICAgIGNvbnRlbnRMZW5ndGgsXG4gICAgICAgIGV4cGVjdHNQYXlsb2FkLFxuICAgICAgICBzb2NrZXQ6IGNsaWVudFtrU29ja2V0XSxcbiAgICAgICAgaDJzdHJlYW06IHN0cmVhbSxcbiAgICAgICAgaGVhZGVyOiAnJ1xuICAgICAgfSlcbiAgICB9IGVsc2UgaWYgKHV0aWwuaXNJdGVyYWJsZShib2R5KSkge1xuICAgICAgd3JpdGVJdGVyYWJsZSh7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGNsaWVudCxcbiAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgZXhwZWN0c1BheWxvYWQsXG4gICAgICAgIGhlYWRlcjogJycsXG4gICAgICAgIGgyc3RyZWFtOiBzdHJlYW0sXG4gICAgICAgIHNvY2tldDogY2xpZW50W2tTb2NrZXRdXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBhc3NlcnQoZmFsc2UpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHdyaXRlU3RyZWFtICh7IGgyc3RyZWFtLCBib2R5LCBjbGllbnQsIHJlcXVlc3QsIHNvY2tldCwgY29udGVudExlbmd0aCwgaGVhZGVyLCBleHBlY3RzUGF5bG9hZCB9KSB7XG4gIGFzc2VydChjb250ZW50TGVuZ3RoICE9PSAwIHx8IGNsaWVudFtrUnVubmluZ10gPT09IDAsICdzdHJlYW0gYm9keSBjYW5ub3QgYmUgcGlwZWxpbmVkJylcblxuICBpZiAoY2xpZW50W2tIVFRQQ29ublZlcnNpb25dID09PSAnaDInKSB7XG4gICAgLy8gRm9yIEhUVFAvMiwgaXMgZW5vdWdoIHRvIHBpcGUgdGhlIHN0cmVhbVxuICAgIGNvbnN0IHBpcGUgPSBwaXBlbGluZShcbiAgICAgIGJvZHksXG4gICAgICBoMnN0cmVhbSxcbiAgICAgIChlcnIpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHV0aWwuZGVzdHJveShib2R5LCBlcnIpXG4gICAgICAgICAgdXRpbC5kZXN0cm95KGgyc3RyZWFtLCBlcnIpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVxdWVzdC5vblJlcXVlc3RTZW50KClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIClcblxuICAgIHBpcGUub24oJ2RhdGEnLCBvblBpcGVEYXRhKVxuICAgIHBpcGUub25jZSgnZW5kJywgKCkgPT4ge1xuICAgICAgcGlwZS5yZW1vdmVMaXN0ZW5lcignZGF0YScsIG9uUGlwZURhdGEpXG4gICAgICB1dGlsLmRlc3Ryb3kocGlwZSlcbiAgICB9KVxuXG4gICAgZnVuY3Rpb24gb25QaXBlRGF0YSAoY2h1bmspIHtcbiAgICAgIHJlcXVlc3Qub25Cb2R5U2VudChjaHVuaylcbiAgICB9XG5cbiAgICByZXR1cm5cbiAgfVxuXG4gIGxldCBmaW5pc2hlZCA9IGZhbHNlXG5cbiAgY29uc3Qgd3JpdGVyID0gbmV3IEFzeW5jV3JpdGVyKHsgc29ja2V0LCByZXF1ZXN0LCBjb250ZW50TGVuZ3RoLCBjbGllbnQsIGV4cGVjdHNQYXlsb2FkLCBoZWFkZXIgfSlcblxuICBjb25zdCBvbkRhdGEgPSBmdW5jdGlvbiAoY2h1bmspIHtcbiAgICBpZiAoZmluaXNoZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBpZiAoIXdyaXRlci53cml0ZShjaHVuaykgJiYgdGhpcy5wYXVzZSkge1xuICAgICAgICB0aGlzLnBhdXNlKClcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHV0aWwuZGVzdHJveSh0aGlzLCBlcnIpXG4gICAgfVxuICB9XG4gIGNvbnN0IG9uRHJhaW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGZpbmlzaGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoYm9keS5yZXN1bWUpIHtcbiAgICAgIGJvZHkucmVzdW1lKClcbiAgICB9XG4gIH1cbiAgY29uc3Qgb25BYm9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoZmluaXNoZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjb25zdCBlcnIgPSBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gb25GaW5pc2hlZChlcnIpKVxuICB9XG4gIGNvbnN0IG9uRmluaXNoZWQgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgaWYgKGZpbmlzaGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBmaW5pc2hlZCA9IHRydWVcblxuICAgIGFzc2VydChzb2NrZXQuZGVzdHJveWVkIHx8IChzb2NrZXRba1dyaXRpbmddICYmIGNsaWVudFtrUnVubmluZ10gPD0gMSkpXG5cbiAgICBzb2NrZXRcbiAgICAgIC5vZmYoJ2RyYWluJywgb25EcmFpbilcbiAgICAgIC5vZmYoJ2Vycm9yJywgb25GaW5pc2hlZClcblxuICAgIGJvZHlcbiAgICAgIC5yZW1vdmVMaXN0ZW5lcignZGF0YScsIG9uRGF0YSlcbiAgICAgIC5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25GaW5pc2hlZClcbiAgICAgIC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbkZpbmlzaGVkKVxuICAgICAgLnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uQWJvcnQpXG5cbiAgICBpZiAoIWVycikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgd3JpdGVyLmVuZCgpXG4gICAgICB9IGNhdGNoIChlcikge1xuICAgICAgICBlcnIgPSBlclxuICAgICAgfVxuICAgIH1cblxuICAgIHdyaXRlci5kZXN0cm95KGVycilcblxuICAgIGlmIChlcnIgJiYgKGVyci5jb2RlICE9PSAnVU5EX0VSUl9JTkZPJyB8fCBlcnIubWVzc2FnZSAhPT0gJ3Jlc2V0JykpIHtcbiAgICAgIHV0aWwuZGVzdHJveShib2R5LCBlcnIpXG4gICAgfSBlbHNlIHtcbiAgICAgIHV0aWwuZGVzdHJveShib2R5KVxuICAgIH1cbiAgfVxuXG4gIGJvZHlcbiAgICAub24oJ2RhdGEnLCBvbkRhdGEpXG4gICAgLm9uKCdlbmQnLCBvbkZpbmlzaGVkKVxuICAgIC5vbignZXJyb3InLCBvbkZpbmlzaGVkKVxuICAgIC5vbignY2xvc2UnLCBvbkFib3J0KVxuXG4gIGlmIChib2R5LnJlc3VtZSkge1xuICAgIGJvZHkucmVzdW1lKClcbiAgfVxuXG4gIHNvY2tldFxuICAgIC5vbignZHJhaW4nLCBvbkRyYWluKVxuICAgIC5vbignZXJyb3InLCBvbkZpbmlzaGVkKVxufVxuXG5hc3luYyBmdW5jdGlvbiB3cml0ZUJsb2IgKHsgaDJzdHJlYW0sIGJvZHksIGNsaWVudCwgcmVxdWVzdCwgc29ja2V0LCBjb250ZW50TGVuZ3RoLCBoZWFkZXIsIGV4cGVjdHNQYXlsb2FkIH0pIHtcbiAgYXNzZXJ0KGNvbnRlbnRMZW5ndGggPT09IGJvZHkuc2l6ZSwgJ2Jsb2IgYm9keSBtdXN0IGhhdmUgY29udGVudCBsZW5ndGgnKVxuXG4gIGNvbnN0IGlzSDIgPSBjbGllbnRba0hUVFBDb25uVmVyc2lvbl0gPT09ICdoMidcbiAgdHJ5IHtcbiAgICBpZiAoY29udGVudExlbmd0aCAhPSBudWxsICYmIGNvbnRlbnRMZW5ndGggIT09IGJvZHkuc2l6ZSkge1xuICAgICAgdGhyb3cgbmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpXG4gICAgfVxuXG4gICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20oYXdhaXQgYm9keS5hcnJheUJ1ZmZlcigpKVxuXG4gICAgaWYgKGlzSDIpIHtcbiAgICAgIGgyc3RyZWFtLmNvcmsoKVxuICAgICAgaDJzdHJlYW0ud3JpdGUoYnVmZmVyKVxuICAgICAgaDJzdHJlYW0udW5jb3JrKClcbiAgICB9IGVsc2Uge1xuICAgICAgc29ja2V0LmNvcmsoKVxuICAgICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn1jb250ZW50LWxlbmd0aDogJHtjb250ZW50TGVuZ3RofVxcclxcblxcclxcbmAsICdsYXRpbjEnKVxuICAgICAgc29ja2V0LndyaXRlKGJ1ZmZlcilcbiAgICAgIHNvY2tldC51bmNvcmsoKVxuICAgIH1cblxuICAgIHJlcXVlc3Qub25Cb2R5U2VudChidWZmZXIpXG4gICAgcmVxdWVzdC5vblJlcXVlc3RTZW50KClcblxuICAgIGlmICghZXhwZWN0c1BheWxvYWQpIHtcbiAgICAgIHNvY2tldFtrUmVzZXRdID0gdHJ1ZVxuICAgIH1cblxuICAgIHJlc3VtZShjbGllbnQpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHV0aWwuZGVzdHJveShpc0gyID8gaDJzdHJlYW0gOiBzb2NrZXQsIGVycilcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiB3cml0ZUl0ZXJhYmxlICh7IGgyc3RyZWFtLCBib2R5LCBjbGllbnQsIHJlcXVlc3QsIHNvY2tldCwgY29udGVudExlbmd0aCwgaGVhZGVyLCBleHBlY3RzUGF5bG9hZCB9KSB7XG4gIGFzc2VydChjb250ZW50TGVuZ3RoICE9PSAwIHx8IGNsaWVudFtrUnVubmluZ10gPT09IDAsICdpdGVyYXRvciBib2R5IGNhbm5vdCBiZSBwaXBlbGluZWQnKVxuXG4gIGxldCBjYWxsYmFjayA9IG51bGxcbiAgZnVuY3Rpb24gb25EcmFpbiAoKSB7XG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBjb25zdCBjYiA9IGNhbGxiYWNrXG4gICAgICBjYWxsYmFjayA9IG51bGxcbiAgICAgIGNiKClcbiAgICB9XG4gIH1cblxuICBjb25zdCB3YWl0Rm9yRHJhaW4gPSAoKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgYXNzZXJ0KGNhbGxiYWNrID09PSBudWxsKVxuXG4gICAgaWYgKHNvY2tldFtrRXJyb3JdKSB7XG4gICAgICByZWplY3Qoc29ja2V0W2tFcnJvcl0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbGxiYWNrID0gcmVzb2x2ZVxuICAgIH1cbiAgfSlcblxuICBpZiAoY2xpZW50W2tIVFRQQ29ublZlcnNpb25dID09PSAnaDInKSB7XG4gICAgaDJzdHJlYW1cbiAgICAgIC5vbignY2xvc2UnLCBvbkRyYWluKVxuICAgICAgLm9uKCdkcmFpbicsIG9uRHJhaW4pXG5cbiAgICB0cnkge1xuICAgICAgLy8gSXQncyB1cCB0byB0aGUgdXNlciB0byBzb21laG93IGFib3J0IHRoZSBhc3luYyBpdGVyYWJsZS5cbiAgICAgIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgYm9keSkge1xuICAgICAgICBpZiAoc29ja2V0W2tFcnJvcl0pIHtcbiAgICAgICAgICB0aHJvdyBzb2NrZXRba0Vycm9yXVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzID0gaDJzdHJlYW0ud3JpdGUoY2h1bmspXG4gICAgICAgIHJlcXVlc3Qub25Cb2R5U2VudChjaHVuaylcbiAgICAgICAgaWYgKCFyZXMpIHtcbiAgICAgICAgICBhd2FpdCB3YWl0Rm9yRHJhaW4oKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBoMnN0cmVhbS5kZXN0cm95KGVycilcbiAgICB9IGZpbmFsbHkge1xuICAgICAgcmVxdWVzdC5vblJlcXVlc3RTZW50KClcbiAgICAgIGgyc3RyZWFtLmVuZCgpXG4gICAgICBoMnN0cmVhbVxuICAgICAgICAub2ZmKCdjbG9zZScsIG9uRHJhaW4pXG4gICAgICAgIC5vZmYoJ2RyYWluJywgb25EcmFpbilcbiAgICB9XG5cbiAgICByZXR1cm5cbiAgfVxuXG4gIHNvY2tldFxuICAgIC5vbignY2xvc2UnLCBvbkRyYWluKVxuICAgIC5vbignZHJhaW4nLCBvbkRyYWluKVxuXG4gIGNvbnN0IHdyaXRlciA9IG5ldyBBc3luY1dyaXRlcih7IHNvY2tldCwgcmVxdWVzdCwgY29udGVudExlbmd0aCwgY2xpZW50LCBleHBlY3RzUGF5bG9hZCwgaGVhZGVyIH0pXG4gIHRyeSB7XG4gICAgLy8gSXQncyB1cCB0byB0aGUgdXNlciB0byBzb21laG93IGFib3J0IHRoZSBhc3luYyBpdGVyYWJsZS5cbiAgICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIGJvZHkpIHtcbiAgICAgIGlmIChzb2NrZXRba0Vycm9yXSkge1xuICAgICAgICB0aHJvdyBzb2NrZXRba0Vycm9yXVxuICAgICAgfVxuXG4gICAgICBpZiAoIXdyaXRlci53cml0ZShjaHVuaykpIHtcbiAgICAgICAgYXdhaXQgd2FpdEZvckRyYWluKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICB3cml0ZXIuZW5kKClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgd3JpdGVyLmRlc3Ryb3koZXJyKVxuICB9IGZpbmFsbHkge1xuICAgIHNvY2tldFxuICAgICAgLm9mZignY2xvc2UnLCBvbkRyYWluKVxuICAgICAgLm9mZignZHJhaW4nLCBvbkRyYWluKVxuICB9XG59XG5cbmNsYXNzIEFzeW5jV3JpdGVyIHtcbiAgY29uc3RydWN0b3IgKHsgc29ja2V0LCByZXF1ZXN0LCBjb250ZW50TGVuZ3RoLCBjbGllbnQsIGV4cGVjdHNQYXlsb2FkLCBoZWFkZXIgfSkge1xuICAgIHRoaXMuc29ja2V0ID0gc29ja2V0XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdFxuICAgIHRoaXMuY29udGVudExlbmd0aCA9IGNvbnRlbnRMZW5ndGhcbiAgICB0aGlzLmNsaWVudCA9IGNsaWVudFxuICAgIHRoaXMuYnl0ZXNXcml0dGVuID0gMFxuICAgIHRoaXMuZXhwZWN0c1BheWxvYWQgPSBleHBlY3RzUGF5bG9hZFxuICAgIHRoaXMuaGVhZGVyID0gaGVhZGVyXG5cbiAgICBzb2NrZXRba1dyaXRpbmddID0gdHJ1ZVxuICB9XG5cbiAgd3JpdGUgKGNodW5rKSB7XG4gICAgY29uc3QgeyBzb2NrZXQsIHJlcXVlc3QsIGNvbnRlbnRMZW5ndGgsIGNsaWVudCwgYnl0ZXNXcml0dGVuLCBleHBlY3RzUGF5bG9hZCwgaGVhZGVyIH0gPSB0aGlzXG5cbiAgICBpZiAoc29ja2V0W2tFcnJvcl0pIHtcbiAgICAgIHRocm93IHNvY2tldFtrRXJyb3JdXG4gICAgfVxuXG4gICAgaWYgKHNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGNvbnN0IGxlbiA9IEJ1ZmZlci5ieXRlTGVuZ3RoKGNodW5rKVxuICAgIGlmICghbGVuKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIC8vIFdlIHNob3VsZCBkZWZlciB3cml0aW5nIGNodW5rcy5cbiAgICBpZiAoY29udGVudExlbmd0aCAhPT0gbnVsbCAmJiBieXRlc1dyaXR0ZW4gKyBsZW4gPiBjb250ZW50TGVuZ3RoKSB7XG4gICAgICBpZiAoY2xpZW50W2tTdHJpY3RDb250ZW50TGVuZ3RoXSkge1xuICAgICAgICB0aHJvdyBuZXcgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKClcbiAgICAgIH1cblxuICAgICAgcHJvY2Vzcy5lbWl0V2FybmluZyhuZXcgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKCkpXG4gICAgfVxuXG4gICAgc29ja2V0LmNvcmsoKVxuXG4gICAgaWYgKGJ5dGVzV3JpdHRlbiA9PT0gMCkge1xuICAgICAgaWYgKCFleHBlY3RzUGF5bG9hZCkge1xuICAgICAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbnRlbnRMZW5ndGggPT09IG51bGwpIHtcbiAgICAgICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn10cmFuc2Zlci1lbmNvZGluZzogY2h1bmtlZFxcclxcbmAsICdsYXRpbjEnKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn1jb250ZW50LWxlbmd0aDogJHtjb250ZW50TGVuZ3RofVxcclxcblxcclxcbmAsICdsYXRpbjEnKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb250ZW50TGVuZ3RoID09PSBudWxsKSB7XG4gICAgICBzb2NrZXQud3JpdGUoYFxcclxcbiR7bGVuLnRvU3RyaW5nKDE2KX1cXHJcXG5gLCAnbGF0aW4xJylcbiAgICB9XG5cbiAgICB0aGlzLmJ5dGVzV3JpdHRlbiArPSBsZW5cblxuICAgIGNvbnN0IHJldCA9IHNvY2tldC53cml0ZShjaHVuaylcblxuICAgIHNvY2tldC51bmNvcmsoKVxuXG4gICAgcmVxdWVzdC5vbkJvZHlTZW50KGNodW5rKVxuXG4gICAgaWYgKCFyZXQpIHtcbiAgICAgIGlmIChzb2NrZXRba1BhcnNlcl0udGltZW91dCAmJiBzb2NrZXRba1BhcnNlcl0udGltZW91dFR5cGUgPT09IFRJTUVPVVRfSEVBREVSUykge1xuICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogb25seSBmb3IgamVzdFxuICAgICAgICBpZiAoc29ja2V0W2tQYXJzZXJdLnRpbWVvdXQucmVmcmVzaCkge1xuICAgICAgICAgIHNvY2tldFtrUGFyc2VyXS50aW1lb3V0LnJlZnJlc2goKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgZW5kICgpIHtcbiAgICBjb25zdCB7IHNvY2tldCwgY29udGVudExlbmd0aCwgY2xpZW50LCBieXRlc1dyaXR0ZW4sIGV4cGVjdHNQYXlsb2FkLCBoZWFkZXIsIHJlcXVlc3QgfSA9IHRoaXNcbiAgICByZXF1ZXN0Lm9uUmVxdWVzdFNlbnQoKVxuXG4gICAgc29ja2V0W2tXcml0aW5nXSA9IGZhbHNlXG5cbiAgICBpZiAoc29ja2V0W2tFcnJvcl0pIHtcbiAgICAgIHRocm93IHNvY2tldFtrRXJyb3JdXG4gICAgfVxuXG4gICAgaWYgKHNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChieXRlc1dyaXR0ZW4gPT09IDApIHtcbiAgICAgIGlmIChleHBlY3RzUGF5bG9hZCkge1xuICAgICAgICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMCNzZWN0aW9uLTMuMy4yXG4gICAgICAgIC8vIEEgdXNlciBhZ2VudCBTSE9VTEQgc2VuZCBhIENvbnRlbnQtTGVuZ3RoIGluIGEgcmVxdWVzdCBtZXNzYWdlIHdoZW5cbiAgICAgICAgLy8gbm8gVHJhbnNmZXItRW5jb2RpbmcgaXMgc2VudCBhbmQgdGhlIHJlcXVlc3QgbWV0aG9kIGRlZmluZXMgYSBtZWFuaW5nXG4gICAgICAgIC8vIGZvciBhbiBlbmNsb3NlZCBwYXlsb2FkIGJvZHkuXG5cbiAgICAgICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn1jb250ZW50LWxlbmd0aDogMFxcclxcblxcclxcbmAsICdsYXRpbjEnKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn1cXHJcXG5gLCAnbGF0aW4xJylcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNvbnRlbnRMZW5ndGggPT09IG51bGwpIHtcbiAgICAgIHNvY2tldC53cml0ZSgnXFxyXFxuMFxcclxcblxcclxcbicsICdsYXRpbjEnKVxuICAgIH1cblxuICAgIGlmIChjb250ZW50TGVuZ3RoICE9PSBudWxsICYmIGJ5dGVzV3JpdHRlbiAhPT0gY29udGVudExlbmd0aCkge1xuICAgICAgaWYgKGNsaWVudFtrU3RyaWN0Q29udGVudExlbmd0aF0pIHtcbiAgICAgICAgdGhyb3cgbmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9jZXNzLmVtaXRXYXJuaW5nKG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc29ja2V0W2tQYXJzZXJdLnRpbWVvdXQgJiYgc29ja2V0W2tQYXJzZXJdLnRpbWVvdXRUeXBlID09PSBUSU1FT1VUX0hFQURFUlMpIHtcbiAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBvbmx5IGZvciBqZXN0XG4gICAgICBpZiAoc29ja2V0W2tQYXJzZXJdLnRpbWVvdXQucmVmcmVzaCkge1xuICAgICAgICBzb2NrZXRba1BhcnNlcl0udGltZW91dC5yZWZyZXNoKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXN1bWUoY2xpZW50KVxuICB9XG5cbiAgZGVzdHJveSAoZXJyKSB7XG4gICAgY29uc3QgeyBzb2NrZXQsIGNsaWVudCB9ID0gdGhpc1xuXG4gICAgc29ja2V0W2tXcml0aW5nXSA9IGZhbHNlXG5cbiAgICBpZiAoZXJyKSB7XG4gICAgICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA8PSAxLCAncGlwZWxpbmUgc2hvdWxkIG9ubHkgY29udGFpbiB0aGlzIHJlcXVlc3QnKVxuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgZXJyKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBlcnJvclJlcXVlc3QgKGNsaWVudCwgcmVxdWVzdCwgZXJyKSB7XG4gIHRyeSB7XG4gICAgcmVxdWVzdC5vbkVycm9yKGVycilcbiAgICBhc3NlcnQocmVxdWVzdC5hYm9ydGVkKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjbGllbnQuZW1pdCgnZXJyb3InLCBlcnIpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBDbGllbnRcbiIsCiAgICAiLyogZXNsaW50LWRpc2FibGUgKi9cblxuJ3VzZSBzdHJpY3QnXG5cbi8vIEV4dHJhY3RlZCBmcm9tIG5vZGUvbGliL2ludGVybmFsL2ZpeGVkX3F1ZXVlLmpzXG5cbi8vIEN1cnJlbnRseSBvcHRpbWFsIHF1ZXVlIHNpemUsIHRlc3RlZCBvbiBWOCA2LjAgLSA2LjYuIE11c3QgYmUgcG93ZXIgb2YgdHdvLlxuY29uc3Qga1NpemUgPSAyMDQ4O1xuY29uc3Qga01hc2sgPSBrU2l6ZSAtIDE7XG5cbi8vIFRoZSBGaXhlZFF1ZXVlIGlzIGltcGxlbWVudGVkIGFzIGEgc2luZ2x5LWxpbmtlZCBsaXN0IG9mIGZpeGVkLXNpemVcbi8vIGNpcmN1bGFyIGJ1ZmZlcnMuIEl0IGxvb2tzIHNvbWV0aGluZyBsaWtlIHRoaXM6XG4vL1xuLy8gIGhlYWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFpbFxuLy8gICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4vLyAgICB2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZcbi8vICstLS0tLS0tLS0tLSsgPC0tLS0tXFwgICAgICAgKy0tLS0tLS0tLS0tKyA8LS0tLS0tXFwgICAgICAgICArLS0tLS0tLS0tLS0rXG4vLyB8ICBbbnVsbF0gICB8ICAgICAgICBcXC0tLS0tIHwgICBuZXh0ICAgIHwgICAgICAgICBcXC0tLS0tLS0gfCAgIG5leHQgICAgfFxuLy8gKy0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rXG4vLyB8ICAgaXRlbSAgICB8IDwtLSBib3R0b20gICAgfCAgIGl0ZW0gICAgfCA8LS0gYm90dG9tICAgICAgIHwgIFtlbXB0eV0gIHxcbi8vIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgfCAgW2VtcHR5XSAgfFxuLy8gfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICB8ICBbZW1wdHldICB8XG4vLyB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgIHwgIFtlbXB0eV0gIHxcbi8vIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgIGJvdHRvbSAtLT4gfCAgIGl0ZW0gICAgfFxuLy8gfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8XG4vLyB8ICAgIC4uLiAgICB8ICAgICAgICAgICAgICAgfCAgICAuLi4gICAgfCAgICAgICAgICAgICAgICAgIHwgICAgLi4uICAgIHxcbi8vIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfFxuLy8gfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8XG4vLyB8ICBbZW1wdHldICB8IDwtLSB0b3AgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHxcbi8vIHwgIFtlbXB0eV0gIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfFxuLy8gfCAgW2VtcHR5XSAgfCAgICAgICAgICAgICAgIHwgIFtlbXB0eV0gIHwgPC0tIHRvcCAgdG9wIC0tPiB8ICBbZW1wdHldICB8XG4vLyArLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLStcbi8vXG4vLyBPciwgaWYgdGhlcmUgaXMgb25seSBvbmUgY2lyY3VsYXIgYnVmZmVyLCBpdCBsb29rcyBzb21ldGhpbmdcbi8vIGxpa2UgZWl0aGVyIG9mIHRoZXNlOlxuLy9cbi8vICBoZWFkICAgdGFpbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWQgICB0YWlsXG4vLyAgICB8ICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHxcbi8vICAgIHYgICAgIHYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdiAgICAgdlxuLy8gKy0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rXG4vLyB8ICBbbnVsbF0gICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFtudWxsXSAgIHxcbi8vICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tK1xuLy8gfCAgW2VtcHR5XSAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8XG4vLyB8ICBbZW1wdHldICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHxcbi8vIHwgICBpdGVtICAgIHwgPC0tIGJvdHRvbSAgICAgICAgICAgIHRvcCAtLT4gfCAgW2VtcHR5XSAgfFxuLy8gfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBbZW1wdHldICB8XG4vLyB8ICBbZW1wdHldICB8IDwtLSB0b3AgICAgICAgICAgICBib3R0b20gLS0+IHwgICBpdGVtICAgIHxcbi8vIHwgIFtlbXB0eV0gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfFxuLy8gKy0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rXG4vL1xuLy8gQWRkaW5nIGEgdmFsdWUgbWVhbnMgbW92aW5nIGB0b3BgIGZvcndhcmQgYnkgb25lLCByZW1vdmluZyBtZWFuc1xuLy8gbW92aW5nIGBib3R0b21gIGZvcndhcmQgYnkgb25lLiBBZnRlciByZWFjaGluZyB0aGUgZW5kLCB0aGUgcXVldWVcbi8vIHdyYXBzIGFyb3VuZC5cbi8vXG4vLyBXaGVuIGB0b3AgPT09IGJvdHRvbWAgdGhlIGN1cnJlbnQgcXVldWUgaXMgZW1wdHkgYW5kIHdoZW5cbi8vIGB0b3AgKyAxID09PSBib3R0b21gIGl0J3MgZnVsbC4gVGhpcyB3YXN0ZXMgYSBzaW5nbGUgc3BhY2Ugb2Ygc3RvcmFnZVxuLy8gYnV0IGFsbG93cyBtdWNoIHF1aWNrZXIgY2hlY2tzLlxuXG5jbGFzcyBGaXhlZENpcmN1bGFyQnVmZmVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5ib3R0b20gPSAwO1xuICAgIHRoaXMudG9wID0gMDtcbiAgICB0aGlzLmxpc3QgPSBuZXcgQXJyYXkoa1NpemUpO1xuICAgIHRoaXMubmV4dCA9IG51bGw7XG4gIH1cblxuICBpc0VtcHR5KCkge1xuICAgIHJldHVybiB0aGlzLnRvcCA9PT0gdGhpcy5ib3R0b207XG4gIH1cblxuICBpc0Z1bGwoKSB7XG4gICAgcmV0dXJuICgodGhpcy50b3AgKyAxKSAmIGtNYXNrKSA9PT0gdGhpcy5ib3R0b207XG4gIH1cblxuICBwdXNoKGRhdGEpIHtcbiAgICB0aGlzLmxpc3RbdGhpcy50b3BdID0gZGF0YTtcbiAgICB0aGlzLnRvcCA9ICh0aGlzLnRvcCArIDEpICYga01hc2s7XG4gIH1cblxuICBzaGlmdCgpIHtcbiAgICBjb25zdCBuZXh0SXRlbSA9IHRoaXMubGlzdFt0aGlzLmJvdHRvbV07XG4gICAgaWYgKG5leHRJdGVtID09PSB1bmRlZmluZWQpXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB0aGlzLmxpc3RbdGhpcy5ib3R0b21dID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuYm90dG9tID0gKHRoaXMuYm90dG9tICsgMSkgJiBrTWFzaztcbiAgICByZXR1cm4gbmV4dEl0ZW07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBGaXhlZFF1ZXVlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5oZWFkID0gdGhpcy50YWlsID0gbmV3IEZpeGVkQ2lyY3VsYXJCdWZmZXIoKTtcbiAgfVxuXG4gIGlzRW1wdHkoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGVhZC5pc0VtcHR5KCk7XG4gIH1cblxuICBwdXNoKGRhdGEpIHtcbiAgICBpZiAodGhpcy5oZWFkLmlzRnVsbCgpKSB7XG4gICAgICAvLyBIZWFkIGlzIGZ1bGw6IENyZWF0ZXMgYSBuZXcgcXVldWUsIHNldHMgdGhlIG9sZCBxdWV1ZSdzIGAubmV4dGAgdG8gaXQsXG4gICAgICAvLyBhbmQgc2V0cyBpdCBhcyB0aGUgbmV3IG1haW4gcXVldWUuXG4gICAgICB0aGlzLmhlYWQgPSB0aGlzLmhlYWQubmV4dCA9IG5ldyBGaXhlZENpcmN1bGFyQnVmZmVyKCk7XG4gICAgfVxuICAgIHRoaXMuaGVhZC5wdXNoKGRhdGEpO1xuICB9XG5cbiAgc2hpZnQoKSB7XG4gICAgY29uc3QgdGFpbCA9IHRoaXMudGFpbDtcbiAgICBjb25zdCBuZXh0ID0gdGFpbC5zaGlmdCgpO1xuICAgIGlmICh0YWlsLmlzRW1wdHkoKSAmJiB0YWlsLm5leHQgIT09IG51bGwpIHtcbiAgICAgIC8vIElmIHRoZXJlIGlzIGFub3RoZXIgcXVldWUsIGl0IGZvcm1zIHRoZSBuZXcgdGFpbC5cbiAgICAgIHRoaXMudGFpbCA9IHRhaWwubmV4dDtcbiAgICB9XG4gICAgcmV0dXJuIG5leHQ7XG4gIH1cbn07XG4iLAogICAgImNvbnN0IHsga0ZyZWUsIGtDb25uZWN0ZWQsIGtQZW5kaW5nLCBrUXVldWVkLCBrUnVubmluZywga1NpemUgfSA9IHJlcXVpcmUoJy4vY29yZS9zeW1ib2xzJylcbmNvbnN0IGtQb29sID0gU3ltYm9sKCdwb29sJylcblxuY2xhc3MgUG9vbFN0YXRzIHtcbiAgY29uc3RydWN0b3IgKHBvb2wpIHtcbiAgICB0aGlzW2tQb29sXSA9IHBvb2xcbiAgfVxuXG4gIGdldCBjb25uZWN0ZWQgKCkge1xuICAgIHJldHVybiB0aGlzW2tQb29sXVtrQ29ubmVjdGVkXVxuICB9XG5cbiAgZ2V0IGZyZWUgKCkge1xuICAgIHJldHVybiB0aGlzW2tQb29sXVtrRnJlZV1cbiAgfVxuXG4gIGdldCBwZW5kaW5nICgpIHtcbiAgICByZXR1cm4gdGhpc1trUG9vbF1ba1BlbmRpbmddXG4gIH1cblxuICBnZXQgcXVldWVkICgpIHtcbiAgICByZXR1cm4gdGhpc1trUG9vbF1ba1F1ZXVlZF1cbiAgfVxuXG4gIGdldCBydW5uaW5nICgpIHtcbiAgICByZXR1cm4gdGhpc1trUG9vbF1ba1J1bm5pbmddXG4gIH1cblxuICBnZXQgc2l6ZSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1Bvb2xdW2tTaXplXVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUG9vbFN0YXRzXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBEaXNwYXRjaGVyQmFzZSA9IHJlcXVpcmUoJy4vZGlzcGF0Y2hlci1iYXNlJylcbmNvbnN0IEZpeGVkUXVldWUgPSByZXF1aXJlKCcuL25vZGUvZml4ZWQtcXVldWUnKVxuY29uc3QgeyBrQ29ubmVjdGVkLCBrU2l6ZSwga1J1bm5pbmcsIGtQZW5kaW5nLCBrUXVldWVkLCBrQnVzeSwga0ZyZWUsIGtVcmwsIGtDbG9zZSwga0Rlc3Ryb3ksIGtEaXNwYXRjaCB9ID0gcmVxdWlyZSgnLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgUG9vbFN0YXRzID0gcmVxdWlyZSgnLi9wb29sLXN0YXRzJylcblxuY29uc3Qga0NsaWVudHMgPSBTeW1ib2woJ2NsaWVudHMnKVxuY29uc3Qga05lZWREcmFpbiA9IFN5bWJvbCgnbmVlZERyYWluJylcbmNvbnN0IGtRdWV1ZSA9IFN5bWJvbCgncXVldWUnKVxuY29uc3Qga0Nsb3NlZFJlc29sdmUgPSBTeW1ib2woJ2Nsb3NlZCByZXNvbHZlJylcbmNvbnN0IGtPbkRyYWluID0gU3ltYm9sKCdvbkRyYWluJylcbmNvbnN0IGtPbkNvbm5lY3QgPSBTeW1ib2woJ29uQ29ubmVjdCcpXG5jb25zdCBrT25EaXNjb25uZWN0ID0gU3ltYm9sKCdvbkRpc2Nvbm5lY3QnKVxuY29uc3Qga09uQ29ubmVjdGlvbkVycm9yID0gU3ltYm9sKCdvbkNvbm5lY3Rpb25FcnJvcicpXG5jb25zdCBrR2V0RGlzcGF0Y2hlciA9IFN5bWJvbCgnZ2V0IGRpc3BhdGNoZXInKVxuY29uc3Qga0FkZENsaWVudCA9IFN5bWJvbCgnYWRkIGNsaWVudCcpXG5jb25zdCBrUmVtb3ZlQ2xpZW50ID0gU3ltYm9sKCdyZW1vdmUgY2xpZW50JylcbmNvbnN0IGtTdGF0cyA9IFN5bWJvbCgnc3RhdHMnKVxuXG5jbGFzcyBQb29sQmFzZSBleHRlbmRzIERpc3BhdGNoZXJCYXNlIHtcbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXNba1F1ZXVlXSA9IG5ldyBGaXhlZFF1ZXVlKClcbiAgICB0aGlzW2tDbGllbnRzXSA9IFtdXG4gICAgdGhpc1trUXVldWVkXSA9IDBcblxuICAgIGNvbnN0IHBvb2wgPSB0aGlzXG5cbiAgICB0aGlzW2tPbkRyYWluXSA9IGZ1bmN0aW9uIG9uRHJhaW4gKG9yaWdpbiwgdGFyZ2V0cykge1xuICAgICAgY29uc3QgcXVldWUgPSBwb29sW2tRdWV1ZV1cblxuICAgICAgbGV0IG5lZWREcmFpbiA9IGZhbHNlXG5cbiAgICAgIHdoaWxlICghbmVlZERyYWluKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBxdWV1ZS5zaGlmdCgpXG4gICAgICAgIGlmICghaXRlbSkge1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgcG9vbFtrUXVldWVkXS0tXG4gICAgICAgIG5lZWREcmFpbiA9ICF0aGlzLmRpc3BhdGNoKGl0ZW0ub3B0cywgaXRlbS5oYW5kbGVyKVxuICAgICAgfVxuXG4gICAgICB0aGlzW2tOZWVkRHJhaW5dID0gbmVlZERyYWluXG5cbiAgICAgIGlmICghdGhpc1trTmVlZERyYWluXSAmJiBwb29sW2tOZWVkRHJhaW5dKSB7XG4gICAgICAgIHBvb2xba05lZWREcmFpbl0gPSBmYWxzZVxuICAgICAgICBwb29sLmVtaXQoJ2RyYWluJywgb3JpZ2luLCBbcG9vbCwgLi4udGFyZ2V0c10pXG4gICAgICB9XG5cbiAgICAgIGlmIChwb29sW2tDbG9zZWRSZXNvbHZlXSAmJiBxdWV1ZS5pc0VtcHR5KCkpIHtcbiAgICAgICAgUHJvbWlzZVxuICAgICAgICAgIC5hbGwocG9vbFtrQ2xpZW50c10ubWFwKGMgPT4gYy5jbG9zZSgpKSlcbiAgICAgICAgICAudGhlbihwb29sW2tDbG9zZWRSZXNvbHZlXSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzW2tPbkNvbm5lY3RdID0gKG9yaWdpbiwgdGFyZ2V0cykgPT4ge1xuICAgICAgcG9vbC5lbWl0KCdjb25uZWN0Jywgb3JpZ2luLCBbcG9vbCwgLi4udGFyZ2V0c10pXG4gICAgfVxuXG4gICAgdGhpc1trT25EaXNjb25uZWN0XSA9IChvcmlnaW4sIHRhcmdldHMsIGVycikgPT4ge1xuICAgICAgcG9vbC5lbWl0KCdkaXNjb25uZWN0Jywgb3JpZ2luLCBbcG9vbCwgLi4udGFyZ2V0c10sIGVycilcbiAgICB9XG5cbiAgICB0aGlzW2tPbkNvbm5lY3Rpb25FcnJvcl0gPSAob3JpZ2luLCB0YXJnZXRzLCBlcnIpID0+IHtcbiAgICAgIHBvb2wuZW1pdCgnY29ubmVjdGlvbkVycm9yJywgb3JpZ2luLCBbcG9vbCwgLi4udGFyZ2V0c10sIGVycilcbiAgICB9XG5cbiAgICB0aGlzW2tTdGF0c10gPSBuZXcgUG9vbFN0YXRzKHRoaXMpXG4gIH1cblxuICBnZXQgW2tCdXN5XSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba05lZWREcmFpbl1cbiAgfVxuXG4gIGdldCBba0Nvbm5lY3RlZF0gKCkge1xuICAgIHJldHVybiB0aGlzW2tDbGllbnRzXS5maWx0ZXIoY2xpZW50ID0+IGNsaWVudFtrQ29ubmVjdGVkXSkubGVuZ3RoXG4gIH1cblxuICBnZXQgW2tGcmVlXSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0NsaWVudHNdLmZpbHRlcihjbGllbnQgPT4gY2xpZW50W2tDb25uZWN0ZWRdICYmICFjbGllbnRba05lZWREcmFpbl0pLmxlbmd0aFxuICB9XG5cbiAgZ2V0IFtrUGVuZGluZ10gKCkge1xuICAgIGxldCByZXQgPSB0aGlzW2tRdWV1ZWRdXG4gICAgZm9yIChjb25zdCB7IFtrUGVuZGluZ106IHBlbmRpbmcgfSBvZiB0aGlzW2tDbGllbnRzXSkge1xuICAgICAgcmV0ICs9IHBlbmRpbmdcbiAgICB9XG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgZ2V0IFtrUnVubmluZ10gKCkge1xuICAgIGxldCByZXQgPSAwXG4gICAgZm9yIChjb25zdCB7IFtrUnVubmluZ106IHJ1bm5pbmcgfSBvZiB0aGlzW2tDbGllbnRzXSkge1xuICAgICAgcmV0ICs9IHJ1bm5pbmdcbiAgICB9XG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgZ2V0IFtrU2l6ZV0gKCkge1xuICAgIGxldCByZXQgPSB0aGlzW2tRdWV1ZWRdXG4gICAgZm9yIChjb25zdCB7IFtrU2l6ZV06IHNpemUgfSBvZiB0aGlzW2tDbGllbnRzXSkge1xuICAgICAgcmV0ICs9IHNpemVcbiAgICB9XG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgZ2V0IHN0YXRzICgpIHtcbiAgICByZXR1cm4gdGhpc1trU3RhdHNdXG4gIH1cblxuICBhc3luYyBba0Nsb3NlXSAoKSB7XG4gICAgaWYgKHRoaXNba1F1ZXVlXS5pc0VtcHR5KCkpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLmFsbCh0aGlzW2tDbGllbnRzXS5tYXAoYyA9PiBjLmNsb3NlKCkpKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgdGhpc1trQ2xvc2VkUmVzb2x2ZV0gPSByZXNvbHZlXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIFtrRGVzdHJveV0gKGVycikge1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCBpdGVtID0gdGhpc1trUXVldWVdLnNoaWZ0KClcbiAgICAgIGlmICghaXRlbSkge1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgaXRlbS5oYW5kbGVyLm9uRXJyb3IoZXJyKVxuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLmFsbCh0aGlzW2tDbGllbnRzXS5tYXAoYyA9PiBjLmRlc3Ryb3koZXJyKSkpXG4gIH1cblxuICBba0Rpc3BhdGNoXSAob3B0cywgaGFuZGxlcikge1xuICAgIGNvbnN0IGRpc3BhdGNoZXIgPSB0aGlzW2tHZXREaXNwYXRjaGVyXSgpXG5cbiAgICBpZiAoIWRpc3BhdGNoZXIpIHtcbiAgICAgIHRoaXNba05lZWREcmFpbl0gPSB0cnVlXG4gICAgICB0aGlzW2tRdWV1ZV0ucHVzaCh7IG9wdHMsIGhhbmRsZXIgfSlcbiAgICAgIHRoaXNba1F1ZXVlZF0rK1xuICAgIH0gZWxzZSBpZiAoIWRpc3BhdGNoZXIuZGlzcGF0Y2gob3B0cywgaGFuZGxlcikpIHtcbiAgICAgIGRpc3BhdGNoZXJba05lZWREcmFpbl0gPSB0cnVlXG4gICAgICB0aGlzW2tOZWVkRHJhaW5dID0gIXRoaXNba0dldERpc3BhdGNoZXJdKClcbiAgICB9XG5cbiAgICByZXR1cm4gIXRoaXNba05lZWREcmFpbl1cbiAgfVxuXG4gIFtrQWRkQ2xpZW50XSAoY2xpZW50KSB7XG4gICAgY2xpZW50XG4gICAgICAub24oJ2RyYWluJywgdGhpc1trT25EcmFpbl0pXG4gICAgICAub24oJ2Nvbm5lY3QnLCB0aGlzW2tPbkNvbm5lY3RdKVxuICAgICAgLm9uKCdkaXNjb25uZWN0JywgdGhpc1trT25EaXNjb25uZWN0XSlcbiAgICAgIC5vbignY29ubmVjdGlvbkVycm9yJywgdGhpc1trT25Db25uZWN0aW9uRXJyb3JdKVxuXG4gICAgdGhpc1trQ2xpZW50c10ucHVzaChjbGllbnQpXG5cbiAgICBpZiAodGhpc1trTmVlZERyYWluXSkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzW2tOZWVkRHJhaW5dKSB7XG4gICAgICAgICAgdGhpc1trT25EcmFpbl0oY2xpZW50W2tVcmxdLCBbdGhpcywgY2xpZW50XSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgW2tSZW1vdmVDbGllbnRdIChjbGllbnQpIHtcbiAgICBjbGllbnQuY2xvc2UoKCkgPT4ge1xuICAgICAgY29uc3QgaWR4ID0gdGhpc1trQ2xpZW50c10uaW5kZXhPZihjbGllbnQpXG4gICAgICBpZiAoaWR4ICE9PSAtMSkge1xuICAgICAgICB0aGlzW2tDbGllbnRzXS5zcGxpY2UoaWR4LCAxKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICB0aGlzW2tOZWVkRHJhaW5dID0gdGhpc1trQ2xpZW50c10uc29tZShkaXNwYXRjaGVyID0+IChcbiAgICAgICFkaXNwYXRjaGVyW2tOZWVkRHJhaW5dICYmXG4gICAgICBkaXNwYXRjaGVyLmNsb3NlZCAhPT0gdHJ1ZSAmJlxuICAgICAgZGlzcGF0Y2hlci5kZXN0cm95ZWQgIT09IHRydWVcbiAgICApKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBQb29sQmFzZSxcbiAga0NsaWVudHMsXG4gIGtOZWVkRHJhaW4sXG4gIGtBZGRDbGllbnQsXG4gIGtSZW1vdmVDbGllbnQsXG4gIGtHZXREaXNwYXRjaGVyXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIFBvb2xCYXNlLFxuICBrQ2xpZW50cyxcbiAga05lZWREcmFpbixcbiAga0FkZENsaWVudCxcbiAga0dldERpc3BhdGNoZXJcbn0gPSByZXF1aXJlKCcuL3Bvb2wtYmFzZScpXG5jb25zdCBDbGllbnQgPSByZXF1aXJlKCcuL2NsaWVudCcpXG5jb25zdCB7XG4gIEludmFsaWRBcmd1bWVudEVycm9yXG59ID0gcmVxdWlyZSgnLi9jb3JlL2Vycm9ycycpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBrVXJsLCBrSW50ZXJjZXB0b3JzIH0gPSByZXF1aXJlKCcuL2NvcmUvc3ltYm9scycpXG5jb25zdCBidWlsZENvbm5lY3RvciA9IHJlcXVpcmUoJy4vY29yZS9jb25uZWN0JylcblxuY29uc3Qga09wdGlvbnMgPSBTeW1ib2woJ29wdGlvbnMnKVxuY29uc3Qga0Nvbm5lY3Rpb25zID0gU3ltYm9sKCdjb25uZWN0aW9ucycpXG5jb25zdCBrRmFjdG9yeSA9IFN5bWJvbCgnZmFjdG9yeScpXG5cbmZ1bmN0aW9uIGRlZmF1bHRGYWN0b3J5IChvcmlnaW4sIG9wdHMpIHtcbiAgcmV0dXJuIG5ldyBDbGllbnQob3JpZ2luLCBvcHRzKVxufVxuXG5jbGFzcyBQb29sIGV4dGVuZHMgUG9vbEJhc2Uge1xuICBjb25zdHJ1Y3RvciAob3JpZ2luLCB7XG4gICAgY29ubmVjdGlvbnMsXG4gICAgZmFjdG9yeSA9IGRlZmF1bHRGYWN0b3J5LFxuICAgIGNvbm5lY3QsXG4gICAgY29ubmVjdFRpbWVvdXQsXG4gICAgdGxzLFxuICAgIG1heENhY2hlZFNlc3Npb25zLFxuICAgIHNvY2tldFBhdGgsXG4gICAgYXV0b1NlbGVjdEZhbWlseSxcbiAgICBhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQsXG4gICAgYWxsb3dIMixcbiAgICAuLi5vcHRpb25zXG4gIH0gPSB7fSkge1xuICAgIHN1cGVyKClcblxuICAgIGlmIChjb25uZWN0aW9ucyAhPSBudWxsICYmICghTnVtYmVyLmlzRmluaXRlKGNvbm5lY3Rpb25zKSB8fCBjb25uZWN0aW9ucyA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY29ubmVjdGlvbnMnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZmFjdG9yeSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdmYWN0b3J5IG11c3QgYmUgYSBmdW5jdGlvbi4nKVxuICAgIH1cblxuICAgIGlmIChjb25uZWN0ICE9IG51bGwgJiYgdHlwZW9mIGNvbm5lY3QgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGNvbm5lY3QgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2Nvbm5lY3QgbXVzdCBiZSBhIGZ1bmN0aW9uIG9yIGFuIG9iamVjdCcpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjb25uZWN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25uZWN0ID0gYnVpbGRDb25uZWN0b3Ioe1xuICAgICAgICAuLi50bHMsXG4gICAgICAgIG1heENhY2hlZFNlc3Npb25zLFxuICAgICAgICBhbGxvd0gyLFxuICAgICAgICBzb2NrZXRQYXRoLFxuICAgICAgICB0aW1lb3V0OiBjb25uZWN0VGltZW91dCxcbiAgICAgICAgLi4uKHV0aWwubm9kZUhhc0F1dG9TZWxlY3RGYW1pbHkgJiYgYXV0b1NlbGVjdEZhbWlseSA/IHsgYXV0b1NlbGVjdEZhbWlseSwgYXV0b1NlbGVjdEZhbWlseUF0dGVtcHRUaW1lb3V0IH0gOiB1bmRlZmluZWQpLFxuICAgICAgICAuLi5jb25uZWN0XG4gICAgICB9KVxuICAgIH1cblxuICAgIHRoaXNba0ludGVyY2VwdG9yc10gPSBvcHRpb25zLmludGVyY2VwdG9ycyAmJiBvcHRpb25zLmludGVyY2VwdG9ycy5Qb29sICYmIEFycmF5LmlzQXJyYXkob3B0aW9ucy5pbnRlcmNlcHRvcnMuUG9vbClcbiAgICAgID8gb3B0aW9ucy5pbnRlcmNlcHRvcnMuUG9vbFxuICAgICAgOiBbXVxuICAgIHRoaXNba0Nvbm5lY3Rpb25zXSA9IGNvbm5lY3Rpb25zIHx8IG51bGxcbiAgICB0aGlzW2tVcmxdID0gdXRpbC5wYXJzZU9yaWdpbihvcmlnaW4pXG4gICAgdGhpc1trT3B0aW9uc10gPSB7IC4uLnV0aWwuZGVlcENsb25lKG9wdGlvbnMpLCBjb25uZWN0LCBhbGxvd0gyIH1cbiAgICB0aGlzW2tPcHRpb25zXS5pbnRlcmNlcHRvcnMgPSBvcHRpb25zLmludGVyY2VwdG9yc1xuICAgICAgPyB7IC4uLm9wdGlvbnMuaW50ZXJjZXB0b3JzIH1cbiAgICAgIDogdW5kZWZpbmVkXG4gICAgdGhpc1trRmFjdG9yeV0gPSBmYWN0b3J5XG4gIH1cblxuICBba0dldERpc3BhdGNoZXJdICgpIHtcbiAgICBsZXQgZGlzcGF0Y2hlciA9IHRoaXNba0NsaWVudHNdLmZpbmQoZGlzcGF0Y2hlciA9PiAhZGlzcGF0Y2hlcltrTmVlZERyYWluXSlcblxuICAgIGlmIChkaXNwYXRjaGVyKSB7XG4gICAgICByZXR1cm4gZGlzcGF0Y2hlclxuICAgIH1cblxuICAgIGlmICghdGhpc1trQ29ubmVjdGlvbnNdIHx8IHRoaXNba0NsaWVudHNdLmxlbmd0aCA8IHRoaXNba0Nvbm5lY3Rpb25zXSkge1xuICAgICAgZGlzcGF0Y2hlciA9IHRoaXNba0ZhY3RvcnldKHRoaXNba1VybF0sIHRoaXNba09wdGlvbnNdKVxuICAgICAgdGhpc1trQWRkQ2xpZW50XShkaXNwYXRjaGVyKVxuICAgIH1cblxuICAgIHJldHVybiBkaXNwYXRjaGVyXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBQb29sXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIEJhbGFuY2VkUG9vbE1pc3NpbmdVcHN0cmVhbUVycm9yLFxuICBJbnZhbGlkQXJndW1lbnRFcnJvclxufSA9IHJlcXVpcmUoJy4vY29yZS9lcnJvcnMnKVxuY29uc3Qge1xuICBQb29sQmFzZSxcbiAga0NsaWVudHMsXG4gIGtOZWVkRHJhaW4sXG4gIGtBZGRDbGllbnQsXG4gIGtSZW1vdmVDbGllbnQsXG4gIGtHZXREaXNwYXRjaGVyXG59ID0gcmVxdWlyZSgnLi9wb29sLWJhc2UnKVxuY29uc3QgUG9vbCA9IHJlcXVpcmUoJy4vcG9vbCcpXG5jb25zdCB7IGtVcmwsIGtJbnRlcmNlcHRvcnMgfSA9IHJlcXVpcmUoJy4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsgcGFyc2VPcmlnaW4gfSA9IHJlcXVpcmUoJy4vY29yZS91dGlsJylcbmNvbnN0IGtGYWN0b3J5ID0gU3ltYm9sKCdmYWN0b3J5JylcblxuY29uc3Qga09wdGlvbnMgPSBTeW1ib2woJ29wdGlvbnMnKVxuY29uc3Qga0dyZWF0ZXN0Q29tbW9uRGl2aXNvciA9IFN5bWJvbCgna0dyZWF0ZXN0Q29tbW9uRGl2aXNvcicpXG5jb25zdCBrQ3VycmVudFdlaWdodCA9IFN5bWJvbCgna0N1cnJlbnRXZWlnaHQnKVxuY29uc3Qga0luZGV4ID0gU3ltYm9sKCdrSW5kZXgnKVxuY29uc3Qga1dlaWdodCA9IFN5bWJvbCgna1dlaWdodCcpXG5jb25zdCBrTWF4V2VpZ2h0UGVyU2VydmVyID0gU3ltYm9sKCdrTWF4V2VpZ2h0UGVyU2VydmVyJylcbmNvbnN0IGtFcnJvclBlbmFsdHkgPSBTeW1ib2woJ2tFcnJvclBlbmFsdHknKVxuXG5mdW5jdGlvbiBnZXRHcmVhdGVzdENvbW1vbkRpdmlzb3IgKGEsIGIpIHtcbiAgaWYgKGIgPT09IDApIHJldHVybiBhXG4gIHJldHVybiBnZXRHcmVhdGVzdENvbW1vbkRpdmlzb3IoYiwgYSAlIGIpXG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRGYWN0b3J5IChvcmlnaW4sIG9wdHMpIHtcbiAgcmV0dXJuIG5ldyBQb29sKG9yaWdpbiwgb3B0cylcbn1cblxuY2xhc3MgQmFsYW5jZWRQb29sIGV4dGVuZHMgUG9vbEJhc2Uge1xuICBjb25zdHJ1Y3RvciAodXBzdHJlYW1zID0gW10sIHsgZmFjdG9yeSA9IGRlZmF1bHRGYWN0b3J5LCAuLi5vcHRzIH0gPSB7fSkge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXNba09wdGlvbnNdID0gb3B0c1xuICAgIHRoaXNba0luZGV4XSA9IC0xXG4gICAgdGhpc1trQ3VycmVudFdlaWdodF0gPSAwXG5cbiAgICB0aGlzW2tNYXhXZWlnaHRQZXJTZXJ2ZXJdID0gdGhpc1trT3B0aW9uc10ubWF4V2VpZ2h0UGVyU2VydmVyIHx8IDEwMFxuICAgIHRoaXNba0Vycm9yUGVuYWx0eV0gPSB0aGlzW2tPcHRpb25zXS5lcnJvclBlbmFsdHkgfHwgMTVcblxuICAgIGlmICghQXJyYXkuaXNBcnJheSh1cHN0cmVhbXMpKSB7XG4gICAgICB1cHN0cmVhbXMgPSBbdXBzdHJlYW1zXVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZmFjdG9yeSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdmYWN0b3J5IG11c3QgYmUgYSBmdW5jdGlvbi4nKVxuICAgIH1cblxuICAgIHRoaXNba0ludGVyY2VwdG9yc10gPSBvcHRzLmludGVyY2VwdG9ycyAmJiBvcHRzLmludGVyY2VwdG9ycy5CYWxhbmNlZFBvb2wgJiYgQXJyYXkuaXNBcnJheShvcHRzLmludGVyY2VwdG9ycy5CYWxhbmNlZFBvb2wpXG4gICAgICA/IG9wdHMuaW50ZXJjZXB0b3JzLkJhbGFuY2VkUG9vbFxuICAgICAgOiBbXVxuICAgIHRoaXNba0ZhY3RvcnldID0gZmFjdG9yeVxuXG4gICAgZm9yIChjb25zdCB1cHN0cmVhbSBvZiB1cHN0cmVhbXMpIHtcbiAgICAgIHRoaXMuYWRkVXBzdHJlYW0odXBzdHJlYW0pXG4gICAgfVxuICAgIHRoaXMuX3VwZGF0ZUJhbGFuY2VkUG9vbFN0YXRzKClcbiAgfVxuXG4gIGFkZFVwc3RyZWFtICh1cHN0cmVhbSkge1xuICAgIGNvbnN0IHVwc3RyZWFtT3JpZ2luID0gcGFyc2VPcmlnaW4odXBzdHJlYW0pLm9yaWdpblxuXG4gICAgaWYgKHRoaXNba0NsaWVudHNdLmZpbmQoKHBvb2wpID0+IChcbiAgICAgIHBvb2xba1VybF0ub3JpZ2luID09PSB1cHN0cmVhbU9yaWdpbiAmJlxuICAgICAgcG9vbC5jbG9zZWQgIT09IHRydWUgJiZcbiAgICAgIHBvb2wuZGVzdHJveWVkICE9PSB0cnVlXG4gICAgKSkpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuICAgIGNvbnN0IHBvb2wgPSB0aGlzW2tGYWN0b3J5XSh1cHN0cmVhbU9yaWdpbiwgT2JqZWN0LmFzc2lnbih7fSwgdGhpc1trT3B0aW9uc10pKVxuXG4gICAgdGhpc1trQWRkQ2xpZW50XShwb29sKVxuICAgIHBvb2wub24oJ2Nvbm5lY3QnLCAoKSA9PiB7XG4gICAgICBwb29sW2tXZWlnaHRdID0gTWF0aC5taW4odGhpc1trTWF4V2VpZ2h0UGVyU2VydmVyXSwgcG9vbFtrV2VpZ2h0XSArIHRoaXNba0Vycm9yUGVuYWx0eV0pXG4gICAgfSlcblxuICAgIHBvb2wub24oJ2Nvbm5lY3Rpb25FcnJvcicsICgpID0+IHtcbiAgICAgIHBvb2xba1dlaWdodF0gPSBNYXRoLm1heCgxLCBwb29sW2tXZWlnaHRdIC0gdGhpc1trRXJyb3JQZW5hbHR5XSlcbiAgICAgIHRoaXMuX3VwZGF0ZUJhbGFuY2VkUG9vbFN0YXRzKClcbiAgICB9KVxuXG4gICAgcG9vbC5vbignZGlzY29ubmVjdCcsICguLi5hcmdzKSA9PiB7XG4gICAgICBjb25zdCBlcnIgPSBhcmdzWzJdXG4gICAgICBpZiAoZXJyICYmIGVyci5jb2RlID09PSAnVU5EX0VSUl9TT0NLRVQnKSB7XG4gICAgICAgIC8vIGRlY3JlYXNlIHRoZSB3ZWlnaHQgb2YgdGhlIHBvb2wuXG4gICAgICAgIHBvb2xba1dlaWdodF0gPSBNYXRoLm1heCgxLCBwb29sW2tXZWlnaHRdIC0gdGhpc1trRXJyb3JQZW5hbHR5XSlcbiAgICAgICAgdGhpcy5fdXBkYXRlQmFsYW5jZWRQb29sU3RhdHMoKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBmb3IgKGNvbnN0IGNsaWVudCBvZiB0aGlzW2tDbGllbnRzXSkge1xuICAgICAgY2xpZW50W2tXZWlnaHRdID0gdGhpc1trTWF4V2VpZ2h0UGVyU2VydmVyXVxuICAgIH1cblxuICAgIHRoaXMuX3VwZGF0ZUJhbGFuY2VkUG9vbFN0YXRzKClcblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBfdXBkYXRlQmFsYW5jZWRQb29sU3RhdHMgKCkge1xuICAgIHRoaXNba0dyZWF0ZXN0Q29tbW9uRGl2aXNvcl0gPSB0aGlzW2tDbGllbnRzXS5tYXAocCA9PiBwW2tXZWlnaHRdKS5yZWR1Y2UoZ2V0R3JlYXRlc3RDb21tb25EaXZpc29yLCAwKVxuICB9XG5cbiAgcmVtb3ZlVXBzdHJlYW0gKHVwc3RyZWFtKSB7XG4gICAgY29uc3QgdXBzdHJlYW1PcmlnaW4gPSBwYXJzZU9yaWdpbih1cHN0cmVhbSkub3JpZ2luXG5cbiAgICBjb25zdCBwb29sID0gdGhpc1trQ2xpZW50c10uZmluZCgocG9vbCkgPT4gKFxuICAgICAgcG9vbFtrVXJsXS5vcmlnaW4gPT09IHVwc3RyZWFtT3JpZ2luICYmXG4gICAgICBwb29sLmNsb3NlZCAhPT0gdHJ1ZSAmJlxuICAgICAgcG9vbC5kZXN0cm95ZWQgIT09IHRydWVcbiAgICApKVxuXG4gICAgaWYgKHBvb2wpIHtcbiAgICAgIHRoaXNba1JlbW92ZUNsaWVudF0ocG9vbClcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgZ2V0IHVwc3RyZWFtcyAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0NsaWVudHNdXG4gICAgICAuZmlsdGVyKGRpc3BhdGNoZXIgPT4gZGlzcGF0Y2hlci5jbG9zZWQgIT09IHRydWUgJiYgZGlzcGF0Y2hlci5kZXN0cm95ZWQgIT09IHRydWUpXG4gICAgICAubWFwKChwKSA9PiBwW2tVcmxdLm9yaWdpbilcbiAgfVxuXG4gIFtrR2V0RGlzcGF0Y2hlcl0gKCkge1xuICAgIC8vIFdlIHZhbGlkYXRlIHRoYXQgcG9vbHMgaXMgZ3JlYXRlciB0aGFuIDAsXG4gICAgLy8gb3RoZXJ3aXNlIHdlIHdvdWxkIGhhdmUgdG8gd2FpdCB1bnRpbCBhbiB1cHN0cmVhbVxuICAgIC8vIGlzIGFkZGVkLCB3aGljaCBtaWdodCBuZXZlciBoYXBwZW4uXG4gICAgaWYgKHRoaXNba0NsaWVudHNdLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEJhbGFuY2VkUG9vbE1pc3NpbmdVcHN0cmVhbUVycm9yKClcbiAgICB9XG5cbiAgICBjb25zdCBkaXNwYXRjaGVyID0gdGhpc1trQ2xpZW50c10uZmluZChkaXNwYXRjaGVyID0+IChcbiAgICAgICFkaXNwYXRjaGVyW2tOZWVkRHJhaW5dICYmXG4gICAgICBkaXNwYXRjaGVyLmNsb3NlZCAhPT0gdHJ1ZSAmJlxuICAgICAgZGlzcGF0Y2hlci5kZXN0cm95ZWQgIT09IHRydWVcbiAgICApKVxuXG4gICAgaWYgKCFkaXNwYXRjaGVyKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBhbGxDbGllbnRzQnVzeSA9IHRoaXNba0NsaWVudHNdLm1hcChwb29sID0+IHBvb2xba05lZWREcmFpbl0pLnJlZHVjZSgoYSwgYikgPT4gYSAmJiBiLCB0cnVlKVxuXG4gICAgaWYgKGFsbENsaWVudHNCdXN5KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBsZXQgY291bnRlciA9IDBcblxuICAgIGxldCBtYXhXZWlnaHRJbmRleCA9IHRoaXNba0NsaWVudHNdLmZpbmRJbmRleChwb29sID0+ICFwb29sW2tOZWVkRHJhaW5dKVxuXG4gICAgd2hpbGUgKGNvdW50ZXIrKyA8IHRoaXNba0NsaWVudHNdLmxlbmd0aCkge1xuICAgICAgdGhpc1trSW5kZXhdID0gKHRoaXNba0luZGV4XSArIDEpICUgdGhpc1trQ2xpZW50c10ubGVuZ3RoXG4gICAgICBjb25zdCBwb29sID0gdGhpc1trQ2xpZW50c11bdGhpc1trSW5kZXhdXVxuXG4gICAgICAvLyBmaW5kIHBvb2wgaW5kZXggd2l0aCB0aGUgbGFyZ2VzdCB3ZWlnaHRcbiAgICAgIGlmIChwb29sW2tXZWlnaHRdID4gdGhpc1trQ2xpZW50c11bbWF4V2VpZ2h0SW5kZXhdW2tXZWlnaHRdICYmICFwb29sW2tOZWVkRHJhaW5dKSB7XG4gICAgICAgIG1heFdlaWdodEluZGV4ID0gdGhpc1trSW5kZXhdXG4gICAgICB9XG5cbiAgICAgIC8vIGRlY3JlYXNlIHRoZSBjdXJyZW50IHdlaWdodCBldmVyeSBgdGhpc1trQ2xpZW50c10ubGVuZ3RoYC5cbiAgICAgIGlmICh0aGlzW2tJbmRleF0gPT09IDApIHtcbiAgICAgICAgLy8gU2V0IHRoZSBjdXJyZW50IHdlaWdodCB0byB0aGUgbmV4dCBsb3dlciB3ZWlnaHQuXG4gICAgICAgIHRoaXNba0N1cnJlbnRXZWlnaHRdID0gdGhpc1trQ3VycmVudFdlaWdodF0gLSB0aGlzW2tHcmVhdGVzdENvbW1vbkRpdmlzb3JdXG5cbiAgICAgICAgaWYgKHRoaXNba0N1cnJlbnRXZWlnaHRdIDw9IDApIHtcbiAgICAgICAgICB0aGlzW2tDdXJyZW50V2VpZ2h0XSA9IHRoaXNba01heFdlaWdodFBlclNlcnZlcl1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHBvb2xba1dlaWdodF0gPj0gdGhpc1trQ3VycmVudFdlaWdodF0gJiYgKCFwb29sW2tOZWVkRHJhaW5dKSkge1xuICAgICAgICByZXR1cm4gcG9vbFxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXNba0N1cnJlbnRXZWlnaHRdID0gdGhpc1trQ2xpZW50c11bbWF4V2VpZ2h0SW5kZXhdW2tXZWlnaHRdXG4gICAgdGhpc1trSW5kZXhdID0gbWF4V2VpZ2h0SW5kZXhcbiAgICByZXR1cm4gdGhpc1trQ2xpZW50c11bbWF4V2VpZ2h0SW5kZXhdXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBCYWxhbmNlZFBvb2xcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBmaWxlOiBvbmx5IGZvciBOb2RlIDEyICovXG5cbmNvbnN0IHsga0Nvbm5lY3RlZCwga1NpemUgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5cbmNsYXNzIENvbXBhdFdlYWtSZWYge1xuICBjb25zdHJ1Y3RvciAodmFsdWUpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWVcbiAgfVxuXG4gIGRlcmVmICgpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZVtrQ29ubmVjdGVkXSA9PT0gMCAmJiB0aGlzLnZhbHVlW2tTaXplXSA9PT0gMFxuICAgICAgPyB1bmRlZmluZWRcbiAgICAgIDogdGhpcy52YWx1ZVxuICB9XG59XG5cbmNsYXNzIENvbXBhdEZpbmFsaXplciB7XG4gIGNvbnN0cnVjdG9yIChmaW5hbGl6ZXIpIHtcbiAgICB0aGlzLmZpbmFsaXplciA9IGZpbmFsaXplclxuICB9XG5cbiAgcmVnaXN0ZXIgKGRpc3BhdGNoZXIsIGtleSkge1xuICAgIGlmIChkaXNwYXRjaGVyLm9uKSB7XG4gICAgICBkaXNwYXRjaGVyLm9uKCdkaXNjb25uZWN0JywgKCkgPT4ge1xuICAgICAgICBpZiAoZGlzcGF0Y2hlcltrQ29ubmVjdGVkXSA9PT0gMCAmJiBkaXNwYXRjaGVyW2tTaXplXSA9PT0gMCkge1xuICAgICAgICAgIHRoaXMuZmluYWxpemVyKGtleSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIEZJWE1FOiByZW1vdmUgd29ya2Fyb3VuZCB3aGVuIHRoZSBOb2RlIGJ1ZyBpcyBmaXhlZFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvaXNzdWVzLzQ5MzQ0I2lzc3VlY29tbWVudC0xNzQxNzc2MzA4XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX1Y4X0NPVkVSQUdFKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFdlYWtSZWY6IENvbXBhdFdlYWtSZWYsXG4gICAgICBGaW5hbGl6YXRpb25SZWdpc3RyeTogQ29tcGF0RmluYWxpemVyXG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgV2Vha1JlZjogZ2xvYmFsLldlYWtSZWYgfHwgQ29tcGF0V2Vha1JlZixcbiAgICBGaW5hbGl6YXRpb25SZWdpc3RyeTogZ2xvYmFsLkZpbmFsaXphdGlvblJlZ2lzdHJ5IHx8IENvbXBhdEZpbmFsaXplclxuICB9XG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gPSByZXF1aXJlKCcuL2NvcmUvZXJyb3JzJylcbmNvbnN0IHsga0NsaWVudHMsIGtSdW5uaW5nLCBrQ2xvc2UsIGtEZXN0cm95LCBrRGlzcGF0Y2gsIGtJbnRlcmNlcHRvcnMgfSA9IHJlcXVpcmUoJy4vY29yZS9zeW1ib2xzJylcbmNvbnN0IERpc3BhdGNoZXJCYXNlID0gcmVxdWlyZSgnLi9kaXNwYXRjaGVyLWJhc2UnKVxuY29uc3QgUG9vbCA9IHJlcXVpcmUoJy4vcG9vbCcpXG5jb25zdCBDbGllbnQgPSByZXF1aXJlKCcuL2NsaWVudCcpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi9jb3JlL3V0aWwnKVxuY29uc3QgY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvciA9IHJlcXVpcmUoJy4vaW50ZXJjZXB0b3IvcmVkaXJlY3RJbnRlcmNlcHRvcicpXG5jb25zdCB7IFdlYWtSZWYsIEZpbmFsaXphdGlvblJlZ2lzdHJ5IH0gPSByZXF1aXJlKCcuL2NvbXBhdC9kaXNwYXRjaGVyLXdlYWtyZWYnKSgpXG5cbmNvbnN0IGtPbkNvbm5lY3QgPSBTeW1ib2woJ29uQ29ubmVjdCcpXG5jb25zdCBrT25EaXNjb25uZWN0ID0gU3ltYm9sKCdvbkRpc2Nvbm5lY3QnKVxuY29uc3Qga09uQ29ubmVjdGlvbkVycm9yID0gU3ltYm9sKCdvbkNvbm5lY3Rpb25FcnJvcicpXG5jb25zdCBrTWF4UmVkaXJlY3Rpb25zID0gU3ltYm9sKCdtYXhSZWRpcmVjdGlvbnMnKVxuY29uc3Qga09uRHJhaW4gPSBTeW1ib2woJ29uRHJhaW4nKVxuY29uc3Qga0ZhY3RvcnkgPSBTeW1ib2woJ2ZhY3RvcnknKVxuY29uc3Qga0ZpbmFsaXplciA9IFN5bWJvbCgnZmluYWxpemVyJylcbmNvbnN0IGtPcHRpb25zID0gU3ltYm9sKCdvcHRpb25zJylcblxuZnVuY3Rpb24gZGVmYXVsdEZhY3RvcnkgKG9yaWdpbiwgb3B0cykge1xuICByZXR1cm4gb3B0cyAmJiBvcHRzLmNvbm5lY3Rpb25zID09PSAxXG4gICAgPyBuZXcgQ2xpZW50KG9yaWdpbiwgb3B0cylcbiAgICA6IG5ldyBQb29sKG9yaWdpbiwgb3B0cylcbn1cblxuY2xhc3MgQWdlbnQgZXh0ZW5kcyBEaXNwYXRjaGVyQmFzZSB7XG4gIGNvbnN0cnVjdG9yICh7IGZhY3RvcnkgPSBkZWZhdWx0RmFjdG9yeSwgbWF4UmVkaXJlY3Rpb25zID0gMCwgY29ubmVjdCwgLi4ub3B0aW9ucyB9ID0ge30pIHtcbiAgICBzdXBlcigpXG5cbiAgICBpZiAodHlwZW9mIGZhY3RvcnkgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignZmFjdG9yeSBtdXN0IGJlIGEgZnVuY3Rpb24uJylcbiAgICB9XG5cbiAgICBpZiAoY29ubmVjdCAhPSBudWxsICYmIHR5cGVvZiBjb25uZWN0ICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBjb25uZWN0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdjb25uZWN0IG11c3QgYmUgYSBmdW5jdGlvbiBvciBhbiBvYmplY3QnKVxuICAgIH1cblxuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihtYXhSZWRpcmVjdGlvbnMpIHx8IG1heFJlZGlyZWN0aW9ucyA8IDApIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignbWF4UmVkaXJlY3Rpb25zIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKVxuICAgIH1cblxuICAgIGlmIChjb25uZWN0ICYmIHR5cGVvZiBjb25uZWN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25uZWN0ID0geyAuLi5jb25uZWN0IH1cbiAgICB9XG5cbiAgICB0aGlzW2tJbnRlcmNlcHRvcnNdID0gb3B0aW9ucy5pbnRlcmNlcHRvcnMgJiYgb3B0aW9ucy5pbnRlcmNlcHRvcnMuQWdlbnQgJiYgQXJyYXkuaXNBcnJheShvcHRpb25zLmludGVyY2VwdG9ycy5BZ2VudClcbiAgICAgID8gb3B0aW9ucy5pbnRlcmNlcHRvcnMuQWdlbnRcbiAgICAgIDogW2NyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3IoeyBtYXhSZWRpcmVjdGlvbnMgfSldXG5cbiAgICB0aGlzW2tPcHRpb25zXSA9IHsgLi4udXRpbC5kZWVwQ2xvbmUob3B0aW9ucyksIGNvbm5lY3QgfVxuICAgIHRoaXNba09wdGlvbnNdLmludGVyY2VwdG9ycyA9IG9wdGlvbnMuaW50ZXJjZXB0b3JzXG4gICAgICA/IHsgLi4ub3B0aW9ucy5pbnRlcmNlcHRvcnMgfVxuICAgICAgOiB1bmRlZmluZWRcbiAgICB0aGlzW2tNYXhSZWRpcmVjdGlvbnNdID0gbWF4UmVkaXJlY3Rpb25zXG4gICAgdGhpc1trRmFjdG9yeV0gPSBmYWN0b3J5XG4gICAgdGhpc1trQ2xpZW50c10gPSBuZXcgTWFwKClcbiAgICB0aGlzW2tGaW5hbGl6ZXJdID0gbmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBnYyBpcyB1bmRldGVybWluaXN0aWMgKi8ga2V5ID0+IHtcbiAgICAgIGNvbnN0IHJlZiA9IHRoaXNba0NsaWVudHNdLmdldChrZXkpXG4gICAgICBpZiAocmVmICE9PSB1bmRlZmluZWQgJiYgcmVmLmRlcmVmKCkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzW2tDbGllbnRzXS5kZWxldGUoa2V5KVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBjb25zdCBhZ2VudCA9IHRoaXNcblxuICAgIHRoaXNba09uRHJhaW5dID0gKG9yaWdpbiwgdGFyZ2V0cykgPT4ge1xuICAgICAgYWdlbnQuZW1pdCgnZHJhaW4nLCBvcmlnaW4sIFthZ2VudCwgLi4udGFyZ2V0c10pXG4gICAgfVxuXG4gICAgdGhpc1trT25Db25uZWN0XSA9IChvcmlnaW4sIHRhcmdldHMpID0+IHtcbiAgICAgIGFnZW50LmVtaXQoJ2Nvbm5lY3QnLCBvcmlnaW4sIFthZ2VudCwgLi4udGFyZ2V0c10pXG4gICAgfVxuXG4gICAgdGhpc1trT25EaXNjb25uZWN0XSA9IChvcmlnaW4sIHRhcmdldHMsIGVycikgPT4ge1xuICAgICAgYWdlbnQuZW1pdCgnZGlzY29ubmVjdCcsIG9yaWdpbiwgW2FnZW50LCAuLi50YXJnZXRzXSwgZXJyKVxuICAgIH1cblxuICAgIHRoaXNba09uQ29ubmVjdGlvbkVycm9yXSA9IChvcmlnaW4sIHRhcmdldHMsIGVycikgPT4ge1xuICAgICAgYWdlbnQuZW1pdCgnY29ubmVjdGlvbkVycm9yJywgb3JpZ2luLCBbYWdlbnQsIC4uLnRhcmdldHNdLCBlcnIpXG4gICAgfVxuICB9XG5cbiAgZ2V0IFtrUnVubmluZ10gKCkge1xuICAgIGxldCByZXQgPSAwXG4gICAgZm9yIChjb25zdCByZWYgb2YgdGhpc1trQ2xpZW50c10udmFsdWVzKCkpIHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IHJlZi5kZXJlZigpXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogZ2MgaXMgdW5kZXRlcm1pbmlzdGljICovXG4gICAgICBpZiAoY2xpZW50KSB7XG4gICAgICAgIHJldCArPSBjbGllbnRba1J1bm5pbmddXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXRcbiAgfVxuXG4gIFtrRGlzcGF0Y2hdIChvcHRzLCBoYW5kbGVyKSB7XG4gICAgbGV0IGtleVxuICAgIGlmIChvcHRzLm9yaWdpbiAmJiAodHlwZW9mIG9wdHMub3JpZ2luID09PSAnc3RyaW5nJyB8fCBvcHRzLm9yaWdpbiBpbnN0YW5jZW9mIFVSTCkpIHtcbiAgICAgIGtleSA9IFN0cmluZyhvcHRzLm9yaWdpbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdvcHRzLm9yaWdpbiBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyBvciBVUkwuJylcbiAgICB9XG5cbiAgICBjb25zdCByZWYgPSB0aGlzW2tDbGllbnRzXS5nZXQoa2V5KVxuXG4gICAgbGV0IGRpc3BhdGNoZXIgPSByZWYgPyByZWYuZGVyZWYoKSA6IG51bGxcbiAgICBpZiAoIWRpc3BhdGNoZXIpIHtcbiAgICAgIGRpc3BhdGNoZXIgPSB0aGlzW2tGYWN0b3J5XShvcHRzLm9yaWdpbiwgdGhpc1trT3B0aW9uc10pXG4gICAgICAgIC5vbignZHJhaW4nLCB0aGlzW2tPbkRyYWluXSlcbiAgICAgICAgLm9uKCdjb25uZWN0JywgdGhpc1trT25Db25uZWN0XSlcbiAgICAgICAgLm9uKCdkaXNjb25uZWN0JywgdGhpc1trT25EaXNjb25uZWN0XSlcbiAgICAgICAgLm9uKCdjb25uZWN0aW9uRXJyb3InLCB0aGlzW2tPbkNvbm5lY3Rpb25FcnJvcl0pXG5cbiAgICAgIHRoaXNba0NsaWVudHNdLnNldChrZXksIG5ldyBXZWFrUmVmKGRpc3BhdGNoZXIpKVxuICAgICAgdGhpc1trRmluYWxpemVyXS5yZWdpc3RlcihkaXNwYXRjaGVyLCBrZXkpXG4gICAgfVxuXG4gICAgcmV0dXJuIGRpc3BhdGNoZXIuZGlzcGF0Y2gob3B0cywgaGFuZGxlcilcbiAgfVxuXG4gIGFzeW5jIFtrQ2xvc2VdICgpIHtcbiAgICBjb25zdCBjbG9zZVByb21pc2VzID0gW11cbiAgICBmb3IgKGNvbnN0IHJlZiBvZiB0aGlzW2tDbGllbnRzXS52YWx1ZXMoKSkge1xuICAgICAgY29uc3QgY2xpZW50ID0gcmVmLmRlcmVmKClcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBnYyBpcyB1bmRldGVybWluaXN0aWMgKi9cbiAgICAgIGlmIChjbGllbnQpIHtcbiAgICAgICAgY2xvc2VQcm9taXNlcy5wdXNoKGNsaWVudC5jbG9zZSgpKVxuICAgICAgfVxuICAgIH1cblxuICAgIGF3YWl0IFByb21pc2UuYWxsKGNsb3NlUHJvbWlzZXMpXG4gIH1cblxuICBhc3luYyBba0Rlc3Ryb3ldIChlcnIpIHtcbiAgICBjb25zdCBkZXN0cm95UHJvbWlzZXMgPSBbXVxuICAgIGZvciAoY29uc3QgcmVmIG9mIHRoaXNba0NsaWVudHNdLnZhbHVlcygpKSB7XG4gICAgICBjb25zdCBjbGllbnQgPSByZWYuZGVyZWYoKVxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2U6IGdjIGlzIHVuZGV0ZXJtaW5pc3RpYyAqL1xuICAgICAgaWYgKGNsaWVudCkge1xuICAgICAgICBkZXN0cm95UHJvbWlzZXMucHVzaChjbGllbnQuZGVzdHJveShlcnIpKVxuICAgICAgfVxuICAgIH1cblxuICAgIGF3YWl0IFByb21pc2UuYWxsKGRlc3Ryb3lQcm9taXNlcylcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEFnZW50XG4iLAogICAgIi8vIFBvcnRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL3B1bGwvOTA3XG5cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBSZWFkYWJsZSB9ID0gcmVxdWlyZSgnc3RyZWFtJylcbmNvbnN0IHsgUmVxdWVzdEFib3J0ZWRFcnJvciwgTm90U3VwcG9ydGVkRXJyb3IsIEludmFsaWRBcmd1bWVudEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgUmVhZGFibGVTdHJlYW1Gcm9tLCB0b1VTVlN0cmluZyB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcblxubGV0IEJsb2JcblxuY29uc3Qga0NvbnN1bWUgPSBTeW1ib2woJ2tDb25zdW1lJylcbmNvbnN0IGtSZWFkaW5nID0gU3ltYm9sKCdrUmVhZGluZycpXG5jb25zdCBrQm9keSA9IFN5bWJvbCgna0JvZHknKVxuY29uc3Qga0Fib3J0ID0gU3ltYm9sKCdhYm9ydCcpXG5jb25zdCBrQ29udGVudFR5cGUgPSBTeW1ib2woJ2tDb250ZW50VHlwZScpXG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7fVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIEJvZHlSZWFkYWJsZSBleHRlbmRzIFJlYWRhYmxlIHtcbiAgY29uc3RydWN0b3IgKHtcbiAgICByZXN1bWUsXG4gICAgYWJvcnQsXG4gICAgY29udGVudFR5cGUgPSAnJyxcbiAgICBoaWdoV2F0ZXJNYXJrID0gNjQgKiAxMDI0IC8vIFNhbWUgYXMgbm9kZWpzIGZzIHN0cmVhbXMuXG4gIH0pIHtcbiAgICBzdXBlcih7XG4gICAgICBhdXRvRGVzdHJveTogdHJ1ZSxcbiAgICAgIHJlYWQ6IHJlc3VtZSxcbiAgICAgIGhpZ2hXYXRlck1hcmtcbiAgICB9KVxuXG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5kYXRhRW1pdHRlZCA9IGZhbHNlXG5cbiAgICB0aGlzW2tBYm9ydF0gPSBhYm9ydFxuICAgIHRoaXNba0NvbnN1bWVdID0gbnVsbFxuICAgIHRoaXNba0JvZHldID0gbnVsbFxuICAgIHRoaXNba0NvbnRlbnRUeXBlXSA9IGNvbnRlbnRUeXBlXG5cbiAgICAvLyBJcyBzdHJlYW0gYmVpbmcgY29uc3VtZWQgdGhyb3VnaCBSZWFkYWJsZSBBUEk/XG4gICAgLy8gVGhpcyBpcyBhbiBvcHRpbWl6YXRpb24gc28gdGhhdCB3ZSBhdm9pZCBjaGVja2luZ1xuICAgIC8vIGZvciAnZGF0YScgYW5kICdyZWFkYWJsZScgbGlzdGVuZXJzIGluIHRoZSBob3QgcGF0aFxuICAgIC8vIGluc2lkZSBwdXNoKCkuXG4gICAgdGhpc1trUmVhZGluZ10gPSBmYWxzZVxuICB9XG5cbiAgZGVzdHJveSAoZXJyKSB7XG4gICAgaWYgKHRoaXMuZGVzdHJveWVkKSB7XG4gICAgICAvLyBOb2RlIDwgMTZcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuXG4gICAgaWYgKCFlcnIgJiYgIXRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCkge1xuICAgICAgZXJyID0gbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgIH1cblxuICAgIGlmIChlcnIpIHtcbiAgICAgIHRoaXNba0Fib3J0XSgpXG4gICAgfVxuXG4gICAgcmV0dXJuIHN1cGVyLmRlc3Ryb3koZXJyKVxuICB9XG5cbiAgZW1pdCAoZXYsIC4uLmFyZ3MpIHtcbiAgICBpZiAoZXYgPT09ICdkYXRhJykge1xuICAgICAgLy8gTm9kZSA8IDE2LjdcbiAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGF0YUVtaXR0ZWQgPSB0cnVlXG4gICAgfSBlbHNlIGlmIChldiA9PT0gJ2Vycm9yJykge1xuICAgICAgLy8gTm9kZSA8IDE2XG4gICAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmVycm9yRW1pdHRlZCA9IHRydWVcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLmVtaXQoZXYsIC4uLmFyZ3MpXG4gIH1cblxuICBvbiAoZXYsIC4uLmFyZ3MpIHtcbiAgICBpZiAoZXYgPT09ICdkYXRhJyB8fCBldiA9PT0gJ3JlYWRhYmxlJykge1xuICAgICAgdGhpc1trUmVhZGluZ10gPSB0cnVlXG4gICAgfVxuICAgIHJldHVybiBzdXBlci5vbihldiwgLi4uYXJncylcbiAgfVxuXG4gIGFkZExpc3RlbmVyIChldiwgLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLm9uKGV2LCAuLi5hcmdzKVxuICB9XG5cbiAgb2ZmIChldiwgLi4uYXJncykge1xuICAgIGNvbnN0IHJldCA9IHN1cGVyLm9mZihldiwgLi4uYXJncylcbiAgICBpZiAoZXYgPT09ICdkYXRhJyB8fCBldiA9PT0gJ3JlYWRhYmxlJykge1xuICAgICAgdGhpc1trUmVhZGluZ10gPSAoXG4gICAgICAgIHRoaXMubGlzdGVuZXJDb3VudCgnZGF0YScpID4gMCB8fFxuICAgICAgICB0aGlzLmxpc3RlbmVyQ291bnQoJ3JlYWRhYmxlJykgPiAwXG4gICAgICApXG4gICAgfVxuICAgIHJldHVybiByZXRcbiAgfVxuXG4gIHJlbW92ZUxpc3RlbmVyIChldiwgLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLm9mZihldiwgLi4uYXJncylcbiAgfVxuXG4gIHB1c2ggKGNodW5rKSB7XG4gICAgaWYgKHRoaXNba0NvbnN1bWVdICYmIGNodW5rICE9PSBudWxsICYmIHRoaXMucmVhZGFibGVMZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnN1bWVQdXNoKHRoaXNba0NvbnN1bWVdLCBjaHVuaylcbiAgICAgIHJldHVybiB0aGlzW2tSZWFkaW5nXSA/IHN1cGVyLnB1c2goY2h1bmspIDogdHJ1ZVxuICAgIH1cbiAgICByZXR1cm4gc3VwZXIucHVzaChjaHVuaylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS10ZXh0XG4gIGFzeW5jIHRleHQgKCkge1xuICAgIHJldHVybiBjb25zdW1lKHRoaXMsICd0ZXh0JylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS1qc29uXG4gIGFzeW5jIGpzb24gKCkge1xuICAgIHJldHVybiBjb25zdW1lKHRoaXMsICdqc29uJylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS1ibG9iXG4gIGFzeW5jIGJsb2IgKCkge1xuICAgIHJldHVybiBjb25zdW1lKHRoaXMsICdibG9iJylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS1hcnJheWJ1ZmZlclxuICBhc3luYyBhcnJheUJ1ZmZlciAoKSB7XG4gICAgcmV0dXJuIGNvbnN1bWUodGhpcywgJ2FycmF5QnVmZmVyJylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS1mb3JtZGF0YVxuICBhc3luYyBmb3JtRGF0YSAoKSB7XG4gICAgLy8gVE9ETzogSW1wbGVtZW50LlxuICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWRFcnJvcigpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWJvZHktYm9keXVzZWRcbiAgZ2V0IGJvZHlVc2VkICgpIHtcbiAgICByZXR1cm4gdXRpbC5pc0Rpc3R1cmJlZCh0aGlzKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1ib2R5LWJvZHlcbiAgZ2V0IGJvZHkgKCkge1xuICAgIGlmICghdGhpc1trQm9keV0pIHtcbiAgICAgIHRoaXNba0JvZHldID0gUmVhZGFibGVTdHJlYW1Gcm9tKHRoaXMpXG4gICAgICBpZiAodGhpc1trQ29uc3VtZV0pIHtcbiAgICAgICAgLy8gVE9ETzogSXMgdGhpcyB0aGUgYmVzdCB3YXkgdG8gZm9yY2UgYSBsb2NrP1xuICAgICAgICB0aGlzW2tCb2R5XS5nZXRSZWFkZXIoKSAvLyBFbnN1cmUgc3RyZWFtIGlzIGxvY2tlZC5cbiAgICAgICAgYXNzZXJ0KHRoaXNba0JvZHldLmxvY2tlZClcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXNba0JvZHldXG4gIH1cblxuICBkdW1wIChvcHRzKSB7XG4gICAgbGV0IGxpbWl0ID0gb3B0cyAmJiBOdW1iZXIuaXNGaW5pdGUob3B0cy5saW1pdCkgPyBvcHRzLmxpbWl0IDogMjYyMTQ0XG4gICAgY29uc3Qgc2lnbmFsID0gb3B0cyAmJiBvcHRzLnNpZ25hbFxuXG4gICAgaWYgKHNpZ25hbCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBzaWduYWwgIT09ICdvYmplY3QnIHx8ICEoJ2Fib3J0ZWQnIGluIHNpZ25hbCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3NpZ25hbCBtdXN0IGJlIGFuIEFib3J0U2lnbmFsJylcbiAgICAgICAgfVxuICAgICAgICB1dGlsLnRocm93SWZBYm9ydGVkKHNpZ25hbClcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBzaWduYWxMaXN0ZW5lckNsZWFudXAgPSBzaWduYWxcbiAgICAgICAgPyB1dGlsLmFkZEFib3J0TGlzdGVuZXIoc2lnbmFsLCAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5kZXN0cm95KClcbiAgICAgICAgfSlcbiAgICAgICAgOiBub29wXG5cbiAgICAgIHRoaXNcbiAgICAgICAgLm9uKCdjbG9zZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBzaWduYWxMaXN0ZW5lckNsZWFudXAoKVxuICAgICAgICAgIGlmIChzaWduYWwgJiYgc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgICAgIHJlamVjdChzaWduYWwucmVhc29uIHx8IE9iamVjdC5hc3NpZ24obmV3IEVycm9yKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkJyksIHsgbmFtZTogJ0Fib3J0RXJyb3InIH0pKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNvbHZlKG51bGwpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAub24oJ2Vycm9yJywgbm9vcClcbiAgICAgICAgLm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7XG4gICAgICAgICAgbGltaXQgLT0gY2h1bmsubGVuZ3RoXG4gICAgICAgICAgaWYgKGxpbWl0IDw9IDApIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdHJveSgpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAucmVzdW1lKClcbiAgICB9KVxuICB9XG59XG5cbi8vIGh0dHBzOi8vc3RyZWFtcy5zcGVjLndoYXR3Zy5vcmcvI3JlYWRhYmxlc3RyZWFtLWxvY2tlZFxuZnVuY3Rpb24gaXNMb2NrZWQgKHNlbGYpIHtcbiAgLy8gQ29uc3VtZSBpcyBhbiBpbXBsaWNpdCBsb2NrLlxuICByZXR1cm4gKHNlbGZba0JvZHldICYmIHNlbGZba0JvZHldLmxvY2tlZCA9PT0gdHJ1ZSkgfHwgc2VsZltrQ29uc3VtZV1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2JvZHktdW51c2FibGVcbmZ1bmN0aW9uIGlzVW51c2FibGUgKHNlbGYpIHtcbiAgcmV0dXJuIHV0aWwuaXNEaXN0dXJiZWQoc2VsZikgfHwgaXNMb2NrZWQoc2VsZilcbn1cblxuYXN5bmMgZnVuY3Rpb24gY29uc3VtZSAoc3RyZWFtLCB0eXBlKSB7XG4gIGlmIChpc1VudXNhYmxlKHN0cmVhbSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd1bnVzYWJsZScpXG4gIH1cblxuICBhc3NlcnQoIXN0cmVhbVtrQ29uc3VtZV0pXG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBzdHJlYW1ba0NvbnN1bWVdID0ge1xuICAgICAgdHlwZSxcbiAgICAgIHN0cmVhbSxcbiAgICAgIHJlc29sdmUsXG4gICAgICByZWplY3QsXG4gICAgICBsZW5ndGg6IDAsXG4gICAgICBib2R5OiBbXVxuICAgIH1cblxuICAgIHN0cmVhbVxuICAgICAgLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgY29uc3VtZUZpbmlzaCh0aGlzW2tDb25zdW1lXSwgZXJyKVxuICAgICAgfSlcbiAgICAgIC5vbignY2xvc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzW2tDb25zdW1lXS5ib2R5ICE9PSBudWxsKSB7XG4gICAgICAgICAgY29uc3VtZUZpbmlzaCh0aGlzW2tDb25zdW1lXSwgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKSlcbiAgICAgICAgfVxuICAgICAgfSlcblxuICAgIHByb2Nlc3MubmV4dFRpY2soY29uc3VtZVN0YXJ0LCBzdHJlYW1ba0NvbnN1bWVdKVxuICB9KVxufVxuXG5mdW5jdGlvbiBjb25zdW1lU3RhcnQgKGNvbnN1bWUpIHtcbiAgaWYgKGNvbnN1bWUuYm9keSA9PT0gbnVsbCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgY29uc3QgeyBfcmVhZGFibGVTdGF0ZTogc3RhdGUgfSA9IGNvbnN1bWUuc3RyZWFtXG5cbiAgZm9yIChjb25zdCBjaHVuayBvZiBzdGF0ZS5idWZmZXIpIHtcbiAgICBjb25zdW1lUHVzaChjb25zdW1lLCBjaHVuaylcbiAgfVxuXG4gIGlmIChzdGF0ZS5lbmRFbWl0dGVkKSB7XG4gICAgY29uc3VtZUVuZCh0aGlzW2tDb25zdW1lXSlcbiAgfSBlbHNlIHtcbiAgICBjb25zdW1lLnN0cmVhbS5vbignZW5kJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3VtZUVuZCh0aGlzW2tDb25zdW1lXSlcbiAgICB9KVxuICB9XG5cbiAgY29uc3VtZS5zdHJlYW0ucmVzdW1lKClcblxuICB3aGlsZSAoY29uc3VtZS5zdHJlYW0ucmVhZCgpICE9IG51bGwpIHtcbiAgICAvLyBMb29wXG4gIH1cbn1cblxuZnVuY3Rpb24gY29uc3VtZUVuZCAoY29uc3VtZSkge1xuICBjb25zdCB7IHR5cGUsIGJvZHksIHJlc29sdmUsIHN0cmVhbSwgbGVuZ3RoIH0gPSBjb25zdW1lXG5cbiAgdHJ5IHtcbiAgICBpZiAodHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICByZXNvbHZlKHRvVVNWU3RyaW5nKEJ1ZmZlci5jb25jYXQoYm9keSkpKVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2pzb24nKSB7XG4gICAgICByZXNvbHZlKEpTT04ucGFyc2UoQnVmZmVyLmNvbmNhdChib2R5KSkpXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnYXJyYXlCdWZmZXInKSB7XG4gICAgICBjb25zdCBkc3QgPSBuZXcgVWludDhBcnJheShsZW5ndGgpXG5cbiAgICAgIGxldCBwb3MgPSAwXG4gICAgICBmb3IgKGNvbnN0IGJ1ZiBvZiBib2R5KSB7XG4gICAgICAgIGRzdC5zZXQoYnVmLCBwb3MpXG4gICAgICAgIHBvcyArPSBidWYuYnl0ZUxlbmd0aFxuICAgICAgfVxuXG4gICAgICByZXNvbHZlKGRzdC5idWZmZXIpXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnYmxvYicpIHtcbiAgICAgIGlmICghQmxvYikge1xuICAgICAgICBCbG9iID0gcmVxdWlyZSgnYnVmZmVyJykuQmxvYlxuICAgICAgfVxuICAgICAgcmVzb2x2ZShuZXcgQmxvYihib2R5LCB7IHR5cGU6IHN0cmVhbVtrQ29udGVudFR5cGVdIH0pKVxuICAgIH1cblxuICAgIGNvbnN1bWVGaW5pc2goY29uc3VtZSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgc3RyZWFtLmRlc3Ryb3koZXJyKVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbnN1bWVQdXNoIChjb25zdW1lLCBjaHVuaykge1xuICBjb25zdW1lLmxlbmd0aCArPSBjaHVuay5sZW5ndGhcbiAgY29uc3VtZS5ib2R5LnB1c2goY2h1bmspXG59XG5cbmZ1bmN0aW9uIGNvbnN1bWVGaW5pc2ggKGNvbnN1bWUsIGVycikge1xuICBpZiAoY29uc3VtZS5ib2R5ID09PSBudWxsKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoZXJyKSB7XG4gICAgY29uc3VtZS5yZWplY3QoZXJyKVxuICB9IGVsc2Uge1xuICAgIGNvbnN1bWUucmVzb2x2ZSgpXG4gIH1cblxuICBjb25zdW1lLnR5cGUgPSBudWxsXG4gIGNvbnN1bWUuc3RyZWFtID0gbnVsbFxuICBjb25zdW1lLnJlc29sdmUgPSBudWxsXG4gIGNvbnN1bWUucmVqZWN0ID0gbnVsbFxuICBjb25zdW1lLmxlbmd0aCA9IDBcbiAgY29uc3VtZS5ib2R5ID0gbnVsbFxufVxuIiwKICAgICJjb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3Qge1xuICBSZXNwb25zZVN0YXR1c0NvZGVFcnJvclxufSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHsgdG9VU1ZTdHJpbmcgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5cbmFzeW5jIGZ1bmN0aW9uIGdldFJlc29sdmVFcnJvckJvZHlDYWxsYmFjayAoeyBjYWxsYmFjaywgYm9keSwgY29udGVudFR5cGUsIHN0YXR1c0NvZGUsIHN0YXR1c01lc3NhZ2UsIGhlYWRlcnMgfSkge1xuICBhc3NlcnQoYm9keSlcblxuICBsZXQgY2h1bmtzID0gW11cbiAgbGV0IGxpbWl0ID0gMFxuXG4gIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgYm9keSkge1xuICAgIGNodW5rcy5wdXNoKGNodW5rKVxuICAgIGxpbWl0ICs9IGNodW5rLmxlbmd0aFxuICAgIGlmIChsaW1pdCA+IDEyOCAqIDEwMjQpIHtcbiAgICAgIGNodW5rcyA9IG51bGxcbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaWYgKHN0YXR1c0NvZGUgPT09IDIwNCB8fCAhY29udGVudFR5cGUgfHwgIWNodW5rcykge1xuICAgIHByb2Nlc3MubmV4dFRpY2soY2FsbGJhY2ssIG5ldyBSZXNwb25zZVN0YXR1c0NvZGVFcnJvcihgUmVzcG9uc2Ugc3RhdHVzIGNvZGUgJHtzdGF0dXNDb2RlfSR7c3RhdHVzTWVzc2FnZSA/IGA6ICR7c3RhdHVzTWVzc2FnZX1gIDogJyd9YCwgc3RhdHVzQ29kZSwgaGVhZGVycykpXG4gICAgcmV0dXJuXG4gIH1cblxuICB0cnkge1xuICAgIGlmIChjb250ZW50VHlwZS5zdGFydHNXaXRoKCdhcHBsaWNhdGlvbi9qc29uJykpIHtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSBKU09OLnBhcnNlKHRvVVNWU3RyaW5nKEJ1ZmZlci5jb25jYXQoY2h1bmtzKSkpXG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGNhbGxiYWNrLCBuZXcgUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IoYFJlc3BvbnNlIHN0YXR1cyBjb2RlICR7c3RhdHVzQ29kZX0ke3N0YXR1c01lc3NhZ2UgPyBgOiAke3N0YXR1c01lc3NhZ2V9YCA6ICcnfWAsIHN0YXR1c0NvZGUsIGhlYWRlcnMsIHBheWxvYWQpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGNvbnRlbnRUeXBlLnN0YXJ0c1dpdGgoJ3RleHQvJykpIHtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSB0b1VTVlN0cmluZyhCdWZmZXIuY29uY2F0KGNodW5rcykpXG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGNhbGxiYWNrLCBuZXcgUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IoYFJlc3BvbnNlIHN0YXR1cyBjb2RlICR7c3RhdHVzQ29kZX0ke3N0YXR1c01lc3NhZ2UgPyBgOiAke3N0YXR1c01lc3NhZ2V9YCA6ICcnfWAsIHN0YXR1c0NvZGUsIGhlYWRlcnMsIHBheWxvYWQpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBQcm9jZXNzIGluIGEgZmFsbGJhY2sgaWYgZXJyb3JcbiAgfVxuXG4gIHByb2Nlc3MubmV4dFRpY2soY2FsbGJhY2ssIG5ldyBSZXNwb25zZVN0YXR1c0NvZGVFcnJvcihgUmVzcG9uc2Ugc3RhdHVzIGNvZGUgJHtzdGF0dXNDb2RlfSR7c3RhdHVzTWVzc2FnZSA/IGA6ICR7c3RhdHVzTWVzc2FnZX1gIDogJyd9YCwgc3RhdHVzQ29kZSwgaGVhZGVycykpXG59XG5cbm1vZHVsZS5leHBvcnRzID0geyBnZXRSZXNvbHZlRXJyb3JCb2R5Q2FsbGJhY2sgfVxuIiwKICAgICJjb25zdCB7IGFkZEFib3J0TGlzdGVuZXIgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IFJlcXVlc3RBYm9ydGVkRXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcblxuY29uc3Qga0xpc3RlbmVyID0gU3ltYm9sKCdrTGlzdGVuZXInKVxuY29uc3Qga1NpZ25hbCA9IFN5bWJvbCgna1NpZ25hbCcpXG5cbmZ1bmN0aW9uIGFib3J0IChzZWxmKSB7XG4gIGlmIChzZWxmLmFib3J0KSB7XG4gICAgc2VsZi5hYm9ydCgpXG4gIH0gZWxzZSB7XG4gICAgc2VsZi5vbkVycm9yKG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKCkpXG4gIH1cbn1cblxuZnVuY3Rpb24gYWRkU2lnbmFsIChzZWxmLCBzaWduYWwpIHtcbiAgc2VsZltrU2lnbmFsXSA9IG51bGxcbiAgc2VsZltrTGlzdGVuZXJdID0gbnVsbFxuXG4gIGlmICghc2lnbmFsKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcbiAgICBhYm9ydChzZWxmKVxuICAgIHJldHVyblxuICB9XG5cbiAgc2VsZltrU2lnbmFsXSA9IHNpZ25hbFxuICBzZWxmW2tMaXN0ZW5lcl0gPSAoKSA9PiB7XG4gICAgYWJvcnQoc2VsZilcbiAgfVxuXG4gIGFkZEFib3J0TGlzdGVuZXIoc2VsZltrU2lnbmFsXSwgc2VsZltrTGlzdGVuZXJdKVxufVxuXG5mdW5jdGlvbiByZW1vdmVTaWduYWwgKHNlbGYpIHtcbiAgaWYgKCFzZWxmW2tTaWduYWxdKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoJ3JlbW92ZUV2ZW50TGlzdGVuZXInIGluIHNlbGZba1NpZ25hbF0pIHtcbiAgICBzZWxmW2tTaWduYWxdLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgc2VsZltrTGlzdGVuZXJdKVxuICB9IGVsc2Uge1xuICAgIHNlbGZba1NpZ25hbF0ucmVtb3ZlTGlzdGVuZXIoJ2Fib3J0Jywgc2VsZltrTGlzdGVuZXJdKVxuICB9XG5cbiAgc2VsZltrU2lnbmFsXSA9IG51bGxcbiAgc2VsZltrTGlzdGVuZXJdID0gbnVsbFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgYWRkU2lnbmFsLFxuICByZW1vdmVTaWduYWxcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFJlYWRhYmxlID0gcmVxdWlyZSgnLi9yZWFkYWJsZScpXG5jb25zdCB7XG4gIEludmFsaWRBcmd1bWVudEVycm9yLFxuICBSZXF1ZXN0QWJvcnRlZEVycm9yXG59ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGdldFJlc29sdmVFcnJvckJvZHlDYWxsYmFjayB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgQXN5bmNSZXNvdXJjZSB9ID0gcmVxdWlyZSgnYXN5bmNfaG9va3MnKVxuY29uc3QgeyBhZGRTaWduYWwsIHJlbW92ZVNpZ25hbCB9ID0gcmVxdWlyZSgnLi9hYm9ydC1zaWduYWwnKVxuXG5jbGFzcyBSZXF1ZXN0SGFuZGxlciBleHRlbmRzIEFzeW5jUmVzb3VyY2Uge1xuICBjb25zdHJ1Y3RvciAob3B0cywgY2FsbGJhY2spIHtcbiAgICBpZiAoIW9wdHMgfHwgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb3B0cycpXG4gICAgfVxuXG4gICAgY29uc3QgeyBzaWduYWwsIG1ldGhvZCwgb3BhcXVlLCBib2R5LCBvbkluZm8sIHJlc3BvbnNlSGVhZGVycywgdGhyb3dPbkVycm9yLCBoaWdoV2F0ZXJNYXJrIH0gPSBvcHRzXG5cbiAgICB0cnkge1xuICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY2FsbGJhY2snKVxuICAgICAgfVxuXG4gICAgICBpZiAoaGlnaFdhdGVyTWFyayAmJiAodHlwZW9mIGhpZ2hXYXRlck1hcmsgIT09ICdudW1iZXInIHx8IGhpZ2hXYXRlck1hcmsgPCAwKSkge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgaGlnaFdhdGVyTWFyaycpXG4gICAgICB9XG5cbiAgICAgIGlmIChzaWduYWwgJiYgdHlwZW9mIHNpZ25hbC5vbiAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2Ygc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdzaWduYWwgbXVzdCBiZSBhbiBFdmVudEVtaXR0ZXIgb3IgRXZlbnRUYXJnZXQnKVxuICAgICAgfVxuXG4gICAgICBpZiAobWV0aG9kID09PSAnQ09OTkVDVCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG1ldGhvZCcpXG4gICAgICB9XG5cbiAgICAgIGlmIChvbkluZm8gJiYgdHlwZW9mIG9uSW5mbyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25JbmZvIGNhbGxiYWNrJylcbiAgICAgIH1cblxuICAgICAgc3VwZXIoJ1VORElDSV9SRVFVRVNUJylcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICh1dGlsLmlzU3RyZWFtKGJvZHkpKSB7XG4gICAgICAgIHV0aWwuZGVzdHJveShib2R5Lm9uKCdlcnJvcicsIHV0aWwubm9wKSwgZXJyKVxuICAgICAgfVxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuXG4gICAgdGhpcy5yZXNwb25zZUhlYWRlcnMgPSByZXNwb25zZUhlYWRlcnMgfHwgbnVsbFxuICAgIHRoaXMub3BhcXVlID0gb3BhcXVlIHx8IG51bGxcbiAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2tcbiAgICB0aGlzLnJlcyA9IG51bGxcbiAgICB0aGlzLmFib3J0ID0gbnVsbFxuICAgIHRoaXMuYm9keSA9IGJvZHlcbiAgICB0aGlzLnRyYWlsZXJzID0ge31cbiAgICB0aGlzLmNvbnRleHQgPSBudWxsXG4gICAgdGhpcy5vbkluZm8gPSBvbkluZm8gfHwgbnVsbFxuICAgIHRoaXMudGhyb3dPbkVycm9yID0gdGhyb3dPbkVycm9yXG4gICAgdGhpcy5oaWdoV2F0ZXJNYXJrID0gaGlnaFdhdGVyTWFya1xuXG4gICAgaWYgKHV0aWwuaXNTdHJlYW0oYm9keSkpIHtcbiAgICAgIGJvZHkub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgICB0aGlzLm9uRXJyb3IoZXJyKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBhZGRTaWduYWwodGhpcywgc2lnbmFsKVxuICB9XG5cbiAgb25Db25uZWN0IChhYm9ydCwgY29udGV4dCkge1xuICAgIGlmICghdGhpcy5jYWxsYmFjaykge1xuICAgICAgdGhyb3cgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgIH1cblxuICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHRcbiAgfVxuXG4gIG9uSGVhZGVycyAoc3RhdHVzQ29kZSwgcmF3SGVhZGVycywgcmVzdW1lLCBzdGF0dXNNZXNzYWdlKSB7XG4gICAgY29uc3QgeyBjYWxsYmFjaywgb3BhcXVlLCBhYm9ydCwgY29udGV4dCwgcmVzcG9uc2VIZWFkZXJzLCBoaWdoV2F0ZXJNYXJrIH0gPSB0aGlzXG5cbiAgICBjb25zdCBoZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VSYXdIZWFkZXJzKHJhd0hlYWRlcnMpIDogdXRpbC5wYXJzZUhlYWRlcnMocmF3SGVhZGVycylcblxuICAgIGlmIChzdGF0dXNDb2RlIDwgMjAwKSB7XG4gICAgICBpZiAodGhpcy5vbkluZm8pIHtcbiAgICAgICAgdGhpcy5vbkluZm8oeyBzdGF0dXNDb2RlLCBoZWFkZXJzIH0pXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBwYXJzZWRIZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpIDogaGVhZGVyc1xuICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcGFyc2VkSGVhZGVyc1snY29udGVudC10eXBlJ11cbiAgICBjb25zdCBib2R5ID0gbmV3IFJlYWRhYmxlKHsgcmVzdW1lLCBhYm9ydCwgY29udGVudFR5cGUsIGhpZ2hXYXRlck1hcmsgfSlcblxuICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG4gICAgdGhpcy5yZXMgPSBib2R5XG4gICAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICBpZiAodGhpcy50aHJvd09uRXJyb3IgJiYgc3RhdHVzQ29kZSA+PSA0MDApIHtcbiAgICAgICAgdGhpcy5ydW5JbkFzeW5jU2NvcGUoZ2V0UmVzb2x2ZUVycm9yQm9keUNhbGxiYWNrLCBudWxsLFxuICAgICAgICAgIHsgY2FsbGJhY2ssIGJvZHksIGNvbnRlbnRUeXBlLCBzdGF0dXNDb2RlLCBzdGF0dXNNZXNzYWdlLCBoZWFkZXJzIH1cbiAgICAgICAgKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5ydW5JbkFzeW5jU2NvcGUoY2FsbGJhY2ssIG51bGwsIG51bGwsIHtcbiAgICAgICAgICBzdGF0dXNDb2RlLFxuICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgdHJhaWxlcnM6IHRoaXMudHJhaWxlcnMsXG4gICAgICAgICAgb3BhcXVlLFxuICAgICAgICAgIGJvZHksXG4gICAgICAgICAgY29udGV4dFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uRGF0YSAoY2h1bmspIHtcbiAgICBjb25zdCB7IHJlcyB9ID0gdGhpc1xuICAgIHJldHVybiByZXMucHVzaChjaHVuaylcbiAgfVxuXG4gIG9uQ29tcGxldGUgKHRyYWlsZXJzKSB7XG4gICAgY29uc3QgeyByZXMgfSA9IHRoaXNcblxuICAgIHJlbW92ZVNpZ25hbCh0aGlzKVxuXG4gICAgdXRpbC5wYXJzZUhlYWRlcnModHJhaWxlcnMsIHRoaXMudHJhaWxlcnMpXG5cbiAgICByZXMucHVzaChudWxsKVxuICB9XG5cbiAgb25FcnJvciAoZXJyKSB7XG4gICAgY29uc3QgeyByZXMsIGNhbGxiYWNrLCBib2R5LCBvcGFxdWUgfSA9IHRoaXNcblxuICAgIHJlbW92ZVNpZ25hbCh0aGlzKVxuXG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAvLyBUT0RPOiBEb2VzIHRoaXMgbmVlZCBxdWV1ZU1pY3JvdGFzaz9cbiAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGNhbGxiYWNrLCBudWxsLCBlcnIsIHsgb3BhcXVlIH0pXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChyZXMpIHtcbiAgICAgIHRoaXMucmVzID0gbnVsbFxuICAgICAgLy8gRW5zdXJlIGFsbCBxdWV1ZWQgaGFuZGxlcnMgYXJlIGludm9rZWQgYmVmb3JlIGRlc3Ryb3lpbmcgcmVzLlxuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICB1dGlsLmRlc3Ryb3kocmVzLCBlcnIpXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChib2R5KSB7XG4gICAgICB0aGlzLmJvZHkgPSBudWxsXG4gICAgICB1dGlsLmRlc3Ryb3koYm9keSwgZXJyKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiByZXF1ZXN0IChvcHRzLCBjYWxsYmFjaykge1xuICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICByZXF1ZXN0LmNhbGwodGhpcywgb3B0cywgKGVyciwgZGF0YSkgPT4ge1xuICAgICAgICByZXR1cm4gZXJyID8gcmVqZWN0KGVycikgOiByZXNvbHZlKGRhdGEpXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICB0cnkge1xuICAgIHRoaXMuZGlzcGF0Y2gob3B0cywgbmV3IFJlcXVlc3RIYW5kbGVyKG9wdHMsIGNhbGxiYWNrKSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICAgIGNvbnN0IG9wYXF1ZSA9IG9wdHMgJiYgb3B0cy5vcGFxdWVcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhlcnIsIHsgb3BhcXVlIH0pKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWVzdFxubW9kdWxlLmV4cG9ydHMuUmVxdWVzdEhhbmRsZXIgPSBSZXF1ZXN0SGFuZGxlclxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBmaW5pc2hlZCwgUGFzc1Rocm91Z2ggfSA9IHJlcXVpcmUoJ3N0cmVhbScpXG5jb25zdCB7XG4gIEludmFsaWRBcmd1bWVudEVycm9yLFxuICBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcixcbiAgUmVxdWVzdEFib3J0ZWRFcnJvclxufSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBnZXRSZXNvbHZlRXJyb3JCb2R5Q2FsbGJhY2sgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IEFzeW5jUmVzb3VyY2UgfSA9IHJlcXVpcmUoJ2FzeW5jX2hvb2tzJylcbmNvbnN0IHsgYWRkU2lnbmFsLCByZW1vdmVTaWduYWwgfSA9IHJlcXVpcmUoJy4vYWJvcnQtc2lnbmFsJylcblxuY2xhc3MgU3RyZWFtSGFuZGxlciBleHRlbmRzIEFzeW5jUmVzb3VyY2Uge1xuICBjb25zdHJ1Y3RvciAob3B0cywgZmFjdG9yeSwgY2FsbGJhY2spIHtcbiAgICBpZiAoIW9wdHMgfHwgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb3B0cycpXG4gICAgfVxuXG4gICAgY29uc3QgeyBzaWduYWwsIG1ldGhvZCwgb3BhcXVlLCBib2R5LCBvbkluZm8sIHJlc3BvbnNlSGVhZGVycywgdGhyb3dPbkVycm9yIH0gPSBvcHRzXG5cbiAgICB0cnkge1xuICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY2FsbGJhY2snKVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGZhY3RvcnkgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGZhY3RvcnknKVxuICAgICAgfVxuXG4gICAgICBpZiAoc2lnbmFsICYmIHR5cGVvZiBzaWduYWwub24gIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignc2lnbmFsIG11c3QgYmUgYW4gRXZlbnRFbWl0dGVyIG9yIEV2ZW50VGFyZ2V0JylcbiAgICAgIH1cblxuICAgICAgaWYgKG1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBtZXRob2QnKVxuICAgICAgfVxuXG4gICAgICBpZiAob25JbmZvICYmIHR5cGVvZiBvbkluZm8gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uSW5mbyBjYWxsYmFjaycpXG4gICAgICB9XG5cbiAgICAgIHN1cGVyKCdVTkRJQ0lfU1RSRUFNJylcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICh1dGlsLmlzU3RyZWFtKGJvZHkpKSB7XG4gICAgICAgIHV0aWwuZGVzdHJveShib2R5Lm9uKCdlcnJvcicsIHV0aWwubm9wKSwgZXJyKVxuICAgICAgfVxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuXG4gICAgdGhpcy5yZXNwb25zZUhlYWRlcnMgPSByZXNwb25zZUhlYWRlcnMgfHwgbnVsbFxuICAgIHRoaXMub3BhcXVlID0gb3BhcXVlIHx8IG51bGxcbiAgICB0aGlzLmZhY3RvcnkgPSBmYWN0b3J5XG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrXG4gICAgdGhpcy5yZXMgPSBudWxsXG4gICAgdGhpcy5hYm9ydCA9IG51bGxcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsXG4gICAgdGhpcy50cmFpbGVycyA9IG51bGxcbiAgICB0aGlzLmJvZHkgPSBib2R5XG4gICAgdGhpcy5vbkluZm8gPSBvbkluZm8gfHwgbnVsbFxuICAgIHRoaXMudGhyb3dPbkVycm9yID0gdGhyb3dPbkVycm9yIHx8IGZhbHNlXG5cbiAgICBpZiAodXRpbC5pc1N0cmVhbShib2R5KSkge1xuICAgICAgYm9keS5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMub25FcnJvcihlcnIpXG4gICAgICB9KVxuICAgIH1cblxuICAgIGFkZFNpZ25hbCh0aGlzLCBzaWduYWwpXG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0LCBjb250ZXh0KSB7XG4gICAgaWYgKCF0aGlzLmNhbGxiYWNrKSB7XG4gICAgICB0aHJvdyBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gICAgfVxuXG4gICAgdGhpcy5hYm9ydCA9IGFib3J0XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dFxuICB9XG5cbiAgb25IZWFkZXJzIChzdGF0dXNDb2RlLCByYXdIZWFkZXJzLCByZXN1bWUsIHN0YXR1c01lc3NhZ2UpIHtcbiAgICBjb25zdCB7IGZhY3RvcnksIG9wYXF1ZSwgY29udGV4dCwgY2FsbGJhY2ssIHJlc3BvbnNlSGVhZGVycyB9ID0gdGhpc1xuXG4gICAgY29uc3QgaGVhZGVycyA9IHJlc3BvbnNlSGVhZGVycyA9PT0gJ3JhdycgPyB1dGlsLnBhcnNlUmF3SGVhZGVycyhyYXdIZWFkZXJzKSA6IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpXG5cbiAgICBpZiAoc3RhdHVzQ29kZSA8IDIwMCkge1xuICAgICAgaWYgKHRoaXMub25JbmZvKSB7XG4gICAgICAgIHRoaXMub25JbmZvKHsgc3RhdHVzQ29kZSwgaGVhZGVycyB9KVxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5mYWN0b3J5ID0gbnVsbFxuXG4gICAgbGV0IHJlc1xuXG4gICAgaWYgKHRoaXMudGhyb3dPbkVycm9yICYmIHN0YXR1c0NvZGUgPj0gNDAwKSB7XG4gICAgICBjb25zdCBwYXJzZWRIZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpIDogaGVhZGVyc1xuICAgICAgY29uc3QgY29udGVudFR5cGUgPSBwYXJzZWRIZWFkZXJzWydjb250ZW50LXR5cGUnXVxuICAgICAgcmVzID0gbmV3IFBhc3NUaHJvdWdoKClcblxuICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGxcbiAgICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGdldFJlc29sdmVFcnJvckJvZHlDYWxsYmFjaywgbnVsbCxcbiAgICAgICAgeyBjYWxsYmFjaywgYm9keTogcmVzLCBjb250ZW50VHlwZSwgc3RhdHVzQ29kZSwgc3RhdHVzTWVzc2FnZSwgaGVhZGVycyB9XG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChmYWN0b3J5ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICByZXMgPSB0aGlzLnJ1bkluQXN5bmNTY29wZShmYWN0b3J5LCBudWxsLCB7XG4gICAgICAgIHN0YXR1c0NvZGUsXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIG9wYXF1ZSxcbiAgICAgICAgY29udGV4dFxuICAgICAgfSlcblxuICAgICAgaWYgKFxuICAgICAgICAhcmVzIHx8XG4gICAgICAgIHR5cGVvZiByZXMud3JpdGUgIT09ICdmdW5jdGlvbicgfHxcbiAgICAgICAgdHlwZW9mIHJlcy5lbmQgIT09ICdmdW5jdGlvbicgfHxcbiAgICAgICAgdHlwZW9mIHJlcy5vbiAhPT0gJ2Z1bmN0aW9uJ1xuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcignZXhwZWN0ZWQgV3JpdGFibGUnKVxuICAgICAgfVxuXG4gICAgICAvLyBUT0RPOiBBdm9pZCBmaW5pc2hlZC4gSXQgcmVnaXN0ZXJzIGFuIHVubmVjZXNzYXJ5IGFtb3VudCBvZiBsaXN0ZW5lcnMuXG4gICAgICBmaW5pc2hlZChyZXMsIHsgcmVhZGFibGU6IGZhbHNlIH0sIChlcnIpID0+IHtcbiAgICAgICAgY29uc3QgeyBjYWxsYmFjaywgcmVzLCBvcGFxdWUsIHRyYWlsZXJzLCBhYm9ydCB9ID0gdGhpc1xuXG4gICAgICAgIHRoaXMucmVzID0gbnVsbFxuICAgICAgICBpZiAoZXJyIHx8ICFyZXMucmVhZGFibGUpIHtcbiAgICAgICAgICB1dGlsLmRlc3Ryb3kocmVzLCBlcnIpXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNhbGxiYWNrID0gbnVsbFxuICAgICAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgZXJyIHx8IG51bGwsIHsgb3BhcXVlLCB0cmFpbGVycyB9KVxuXG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICBhYm9ydCgpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmVzLm9uKCdkcmFpbicsIHJlc3VtZSlcblxuICAgIHRoaXMucmVzID0gcmVzXG5cbiAgICBjb25zdCBuZWVkRHJhaW4gPSByZXMud3JpdGFibGVOZWVkRHJhaW4gIT09IHVuZGVmaW5lZFxuICAgICAgPyByZXMud3JpdGFibGVOZWVkRHJhaW5cbiAgICAgIDogcmVzLl93cml0YWJsZVN0YXRlICYmIHJlcy5fd3JpdGFibGVTdGF0ZS5uZWVkRHJhaW5cblxuICAgIHJldHVybiBuZWVkRHJhaW4gIT09IHRydWVcbiAgfVxuXG4gIG9uRGF0YSAoY2h1bmspIHtcbiAgICBjb25zdCB7IHJlcyB9ID0gdGhpc1xuXG4gICAgcmV0dXJuIHJlcyA/IHJlcy53cml0ZShjaHVuaykgOiB0cnVlXG4gIH1cblxuICBvbkNvbXBsZXRlICh0cmFpbGVycykge1xuICAgIGNvbnN0IHsgcmVzIH0gPSB0aGlzXG5cbiAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgIGlmICghcmVzKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLnRyYWlsZXJzID0gdXRpbC5wYXJzZUhlYWRlcnModHJhaWxlcnMpXG5cbiAgICByZXMuZW5kKClcbiAgfVxuXG4gIG9uRXJyb3IgKGVycikge1xuICAgIGNvbnN0IHsgcmVzLCBjYWxsYmFjaywgb3BhcXVlLCBib2R5IH0gPSB0aGlzXG5cbiAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgIHRoaXMuZmFjdG9yeSA9IG51bGxcblxuICAgIGlmIChyZXMpIHtcbiAgICAgIHRoaXMucmVzID0gbnVsbFxuICAgICAgdXRpbC5kZXN0cm95KHJlcywgZXJyKVxuICAgIH0gZWxzZSBpZiAoY2FsbGJhY2spIHtcbiAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGNhbGxiYWNrLCBudWxsLCBlcnIsIHsgb3BhcXVlIH0pXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChib2R5KSB7XG4gICAgICB0aGlzLmJvZHkgPSBudWxsXG4gICAgICB1dGlsLmRlc3Ryb3koYm9keSwgZXJyKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzdHJlYW0gKG9wdHMsIGZhY3RvcnksIGNhbGxiYWNrKSB7XG4gIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHN0cmVhbS5jYWxsKHRoaXMsIG9wdHMsIGZhY3RvcnksIChlcnIsIGRhdGEpID0+IHtcbiAgICAgICAgcmV0dXJuIGVyciA/IHJlamVjdChlcnIpIDogcmVzb2x2ZShkYXRhKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgdHJ5IHtcbiAgICB0aGlzLmRpc3BhdGNoKG9wdHMsIG5ldyBTdHJlYW1IYW5kbGVyKG9wdHMsIGZhY3RvcnksIGNhbGxiYWNrKSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICAgIGNvbnN0IG9wYXF1ZSA9IG9wdHMgJiYgb3B0cy5vcGFxdWVcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhlcnIsIHsgb3BhcXVlIH0pKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RyZWFtXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIFJlYWRhYmxlLFxuICBEdXBsZXgsXG4gIFBhc3NUaHJvdWdoXG59ID0gcmVxdWlyZSgnc3RyZWFtJylcbmNvbnN0IHtcbiAgSW52YWxpZEFyZ3VtZW50RXJyb3IsXG4gIEludmFsaWRSZXR1cm5WYWx1ZUVycm9yLFxuICBSZXF1ZXN0QWJvcnRlZEVycm9yXG59ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IEFzeW5jUmVzb3VyY2UgfSA9IHJlcXVpcmUoJ2FzeW5jX2hvb2tzJylcbmNvbnN0IHsgYWRkU2lnbmFsLCByZW1vdmVTaWduYWwgfSA9IHJlcXVpcmUoJy4vYWJvcnQtc2lnbmFsJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5cbmNvbnN0IGtSZXN1bWUgPSBTeW1ib2woJ3Jlc3VtZScpXG5cbmNsYXNzIFBpcGVsaW5lUmVxdWVzdCBleHRlbmRzIFJlYWRhYmxlIHtcbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHN1cGVyKHsgYXV0b0Rlc3Ryb3k6IHRydWUgfSlcblxuICAgIHRoaXNba1Jlc3VtZV0gPSBudWxsXG4gIH1cblxuICBfcmVhZCAoKSB7XG4gICAgY29uc3QgeyBba1Jlc3VtZV06IHJlc3VtZSB9ID0gdGhpc1xuXG4gICAgaWYgKHJlc3VtZSkge1xuICAgICAgdGhpc1trUmVzdW1lXSA9IG51bGxcbiAgICAgIHJlc3VtZSgpXG4gICAgfVxuICB9XG5cbiAgX2Rlc3Ryb3kgKGVyciwgY2FsbGJhY2spIHtcbiAgICB0aGlzLl9yZWFkKClcblxuICAgIGNhbGxiYWNrKGVycilcbiAgfVxufVxuXG5jbGFzcyBQaXBlbGluZVJlc3BvbnNlIGV4dGVuZHMgUmVhZGFibGUge1xuICBjb25zdHJ1Y3RvciAocmVzdW1lKSB7XG4gICAgc3VwZXIoeyBhdXRvRGVzdHJveTogdHJ1ZSB9KVxuICAgIHRoaXNba1Jlc3VtZV0gPSByZXN1bWVcbiAgfVxuXG4gIF9yZWFkICgpIHtcbiAgICB0aGlzW2tSZXN1bWVdKClcbiAgfVxuXG4gIF9kZXN0cm95IChlcnIsIGNhbGxiYWNrKSB7XG4gICAgaWYgKCFlcnIgJiYgIXRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCkge1xuICAgICAgZXJyID0gbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgIH1cblxuICAgIGNhbGxiYWNrKGVycilcbiAgfVxufVxuXG5jbGFzcyBQaXBlbGluZUhhbmRsZXIgZXh0ZW5kcyBBc3luY1Jlc291cmNlIHtcbiAgY29uc3RydWN0b3IgKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBpZiAoIW9wdHMgfHwgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb3B0cycpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBoYW5kbGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgaGFuZGxlcicpXG4gICAgfVxuXG4gICAgY29uc3QgeyBzaWduYWwsIG1ldGhvZCwgb3BhcXVlLCBvbkluZm8sIHJlc3BvbnNlSGVhZGVycyB9ID0gb3B0c1xuXG4gICAgaWYgKHNpZ25hbCAmJiB0eXBlb2Ygc2lnbmFsLm9uICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdzaWduYWwgbXVzdCBiZSBhbiBFdmVudEVtaXR0ZXIgb3IgRXZlbnRUYXJnZXQnKVxuICAgIH1cblxuICAgIGlmIChtZXRob2QgPT09ICdDT05ORUNUJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG1ldGhvZCcpXG4gICAgfVxuXG4gICAgaWYgKG9uSW5mbyAmJiB0eXBlb2Ygb25JbmZvICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25JbmZvIGNhbGxiYWNrJylcbiAgICB9XG5cbiAgICBzdXBlcignVU5ESUNJX1BJUEVMSU5FJylcblxuICAgIHRoaXMub3BhcXVlID0gb3BhcXVlIHx8IG51bGxcbiAgICB0aGlzLnJlc3BvbnNlSGVhZGVycyA9IHJlc3BvbnNlSGVhZGVycyB8fCBudWxsXG4gICAgdGhpcy5oYW5kbGVyID0gaGFuZGxlclxuICAgIHRoaXMuYWJvcnQgPSBudWxsXG4gICAgdGhpcy5jb250ZXh0ID0gbnVsbFxuICAgIHRoaXMub25JbmZvID0gb25JbmZvIHx8IG51bGxcblxuICAgIHRoaXMucmVxID0gbmV3IFBpcGVsaW5lUmVxdWVzdCgpLm9uKCdlcnJvcicsIHV0aWwubm9wKVxuXG4gICAgdGhpcy5yZXQgPSBuZXcgRHVwbGV4KHtcbiAgICAgIHJlYWRhYmxlT2JqZWN0TW9kZTogb3B0cy5vYmplY3RNb2RlLFxuICAgICAgYXV0b0Rlc3Ryb3k6IHRydWUsXG4gICAgICByZWFkOiAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgYm9keSB9ID0gdGhpc1xuXG4gICAgICAgIGlmIChib2R5ICYmIGJvZHkucmVzdW1lKSB7XG4gICAgICAgICAgYm9keS5yZXN1bWUoKVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgd3JpdGU6IChjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcmVxIH0gPSB0aGlzXG5cbiAgICAgICAgaWYgKHJlcS5wdXNoKGNodW5rLCBlbmNvZGluZykgfHwgcmVxLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCkge1xuICAgICAgICAgIGNhbGxiYWNrKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXFba1Jlc3VtZV0gPSBjYWxsYmFja1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZGVzdHJveTogKGVyciwgY2FsbGJhY2spID0+IHtcbiAgICAgICAgY29uc3QgeyBib2R5LCByZXEsIHJlcywgcmV0LCBhYm9ydCB9ID0gdGhpc1xuXG4gICAgICAgIGlmICghZXJyICYmICFyZXQuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCkge1xuICAgICAgICAgIGVyciA9IG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKClcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhYm9ydCAmJiBlcnIpIHtcbiAgICAgICAgICBhYm9ydCgpXG4gICAgICAgIH1cblxuICAgICAgICB1dGlsLmRlc3Ryb3koYm9keSwgZXJyKVxuICAgICAgICB1dGlsLmRlc3Ryb3kocmVxLCBlcnIpXG4gICAgICAgIHV0aWwuZGVzdHJveShyZXMsIGVycilcblxuICAgICAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgICAgICBjYWxsYmFjayhlcnIpXG4gICAgICB9XG4gICAgfSkub24oJ3ByZWZpbmlzaCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgcmVxIH0gPSB0aGlzXG5cbiAgICAgIC8vIE5vZGUgPCAxNSBkb2VzIG5vdCBjYWxsIF9maW5hbCBpbiBzYW1lIHRpY2suXG4gICAgICByZXEucHVzaChudWxsKVxuICAgIH0pXG5cbiAgICB0aGlzLnJlcyA9IG51bGxcblxuICAgIGFkZFNpZ25hbCh0aGlzLCBzaWduYWwpXG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0LCBjb250ZXh0KSB7XG4gICAgY29uc3QgeyByZXQsIHJlcyB9ID0gdGhpc1xuXG4gICAgYXNzZXJ0KCFyZXMsICdwaXBlbGluZSBjYW5ub3QgYmUgcmV0cmllZCcpXG5cbiAgICBpZiAocmV0LmRlc3Ryb3llZCkge1xuICAgICAgdGhyb3cgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgIH1cblxuICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHRcbiAgfVxuXG4gIG9uSGVhZGVycyAoc3RhdHVzQ29kZSwgcmF3SGVhZGVycywgcmVzdW1lKSB7XG4gICAgY29uc3QgeyBvcGFxdWUsIGhhbmRsZXIsIGNvbnRleHQgfSA9IHRoaXNcblxuICAgIGlmIChzdGF0dXNDb2RlIDwgMjAwKSB7XG4gICAgICBpZiAodGhpcy5vbkluZm8pIHtcbiAgICAgICAgY29uc3QgaGVhZGVycyA9IHRoaXMucmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VSYXdIZWFkZXJzKHJhd0hlYWRlcnMpIDogdXRpbC5wYXJzZUhlYWRlcnMocmF3SGVhZGVycylcbiAgICAgICAgdGhpcy5vbkluZm8oeyBzdGF0dXNDb2RlLCBoZWFkZXJzIH0pXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLnJlcyA9IG5ldyBQaXBlbGluZVJlc3BvbnNlKHJlc3VtZSlcblxuICAgIGxldCBib2R5XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuaGFuZGxlciA9IG51bGxcbiAgICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLnJlc3BvbnNlSGVhZGVycyA9PT0gJ3JhdycgPyB1dGlsLnBhcnNlUmF3SGVhZGVycyhyYXdIZWFkZXJzKSA6IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpXG4gICAgICBib2R5ID0gdGhpcy5ydW5JbkFzeW5jU2NvcGUoaGFuZGxlciwgbnVsbCwge1xuICAgICAgICBzdGF0dXNDb2RlLFxuICAgICAgICBoZWFkZXJzLFxuICAgICAgICBvcGFxdWUsXG4gICAgICAgIGJvZHk6IHRoaXMucmVzLFxuICAgICAgICBjb250ZXh0XG4gICAgICB9KVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5yZXMub24oJ2Vycm9yJywgdXRpbC5ub3ApXG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG5cbiAgICBpZiAoIWJvZHkgfHwgdHlwZW9mIGJvZHkub24gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcignZXhwZWN0ZWQgUmVhZGFibGUnKVxuICAgIH1cblxuICAgIGJvZHlcbiAgICAgIC5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgICAgICBjb25zdCB7IHJldCwgYm9keSB9ID0gdGhpc1xuXG4gICAgICAgIGlmICghcmV0LnB1c2goY2h1bmspICYmIGJvZHkucGF1c2UpIHtcbiAgICAgICAgICBib2R5LnBhdXNlKClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcmV0IH0gPSB0aGlzXG5cbiAgICAgICAgdXRpbC5kZXN0cm95KHJldCwgZXJyKVxuICAgICAgfSlcbiAgICAgIC5vbignZW5kJywgKCkgPT4ge1xuICAgICAgICBjb25zdCB7IHJldCB9ID0gdGhpc1xuXG4gICAgICAgIHJldC5wdXNoKG51bGwpXG4gICAgICB9KVxuICAgICAgLm9uKCdjbG9zZScsICgpID0+IHtcbiAgICAgICAgY29uc3QgeyByZXQgfSA9IHRoaXNcblxuICAgICAgICBpZiAoIXJldC5fcmVhZGFibGVTdGF0ZS5lbmRlZCkge1xuICAgICAgICAgIHV0aWwuZGVzdHJveShyZXQsIG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKCkpXG4gICAgICAgIH1cbiAgICAgIH0pXG5cbiAgICB0aGlzLmJvZHkgPSBib2R5XG4gIH1cblxuICBvbkRhdGEgKGNodW5rKSB7XG4gICAgY29uc3QgeyByZXMgfSA9IHRoaXNcbiAgICByZXR1cm4gcmVzLnB1c2goY2h1bmspXG4gIH1cblxuICBvbkNvbXBsZXRlICh0cmFpbGVycykge1xuICAgIGNvbnN0IHsgcmVzIH0gPSB0aGlzXG4gICAgcmVzLnB1c2gobnVsbClcbiAgfVxuXG4gIG9uRXJyb3IgKGVycikge1xuICAgIGNvbnN0IHsgcmV0IH0gPSB0aGlzXG4gICAgdGhpcy5oYW5kbGVyID0gbnVsbFxuICAgIHV0aWwuZGVzdHJveShyZXQsIGVycilcbiAgfVxufVxuXG5mdW5jdGlvbiBwaXBlbGluZSAob3B0cywgaGFuZGxlcikge1xuICB0cnkge1xuICAgIGNvbnN0IHBpcGVsaW5lSGFuZGxlciA9IG5ldyBQaXBlbGluZUhhbmRsZXIob3B0cywgaGFuZGxlcilcbiAgICB0aGlzLmRpc3BhdGNoKHsgLi4ub3B0cywgYm9keTogcGlwZWxpbmVIYW5kbGVyLnJlcSB9LCBwaXBlbGluZUhhbmRsZXIpXG4gICAgcmV0dXJuIHBpcGVsaW5lSGFuZGxlci5yZXRcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIG5ldyBQYXNzVGhyb3VnaCgpLmRlc3Ryb3koZXJyKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGlwZWxpbmVcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IsIFJlcXVlc3RBYm9ydGVkRXJyb3IsIFNvY2tldEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB7IEFzeW5jUmVzb3VyY2UgfSA9IHJlcXVpcmUoJ2FzeW5jX2hvb2tzJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBhZGRTaWduYWwsIHJlbW92ZVNpZ25hbCB9ID0gcmVxdWlyZSgnLi9hYm9ydC1zaWduYWwnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcblxuY2xhc3MgVXBncmFkZUhhbmRsZXIgZXh0ZW5kcyBBc3luY1Jlc291cmNlIHtcbiAgY29uc3RydWN0b3IgKG9wdHMsIGNhbGxiYWNrKSB7XG4gICAgaWYgKCFvcHRzIHx8IHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9wdHMnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjYWxsYmFjaycpXG4gICAgfVxuXG4gICAgY29uc3QgeyBzaWduYWwsIG9wYXF1ZSwgcmVzcG9uc2VIZWFkZXJzIH0gPSBvcHRzXG5cbiAgICBpZiAoc2lnbmFsICYmIHR5cGVvZiBzaWduYWwub24gIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3NpZ25hbCBtdXN0IGJlIGFuIEV2ZW50RW1pdHRlciBvciBFdmVudFRhcmdldCcpXG4gICAgfVxuXG4gICAgc3VwZXIoJ1VORElDSV9VUEdSQURFJylcblxuICAgIHRoaXMucmVzcG9uc2VIZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzIHx8IG51bGxcbiAgICB0aGlzLm9wYXF1ZSA9IG9wYXF1ZSB8fCBudWxsXG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrXG4gICAgdGhpcy5hYm9ydCA9IG51bGxcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsXG5cbiAgICBhZGRTaWduYWwodGhpcywgc2lnbmFsKVxuICB9XG5cbiAgb25Db25uZWN0IChhYm9ydCwgY29udGV4dCkge1xuICAgIGlmICghdGhpcy5jYWxsYmFjaykge1xuICAgICAgdGhyb3cgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgIH1cblxuICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIHRoaXMuY29udGV4dCA9IG51bGxcbiAgfVxuXG4gIG9uSGVhZGVycyAoKSB7XG4gICAgdGhyb3cgbmV3IFNvY2tldEVycm9yKCdiYWQgdXBncmFkZScsIG51bGwpXG4gIH1cblxuICBvblVwZ3JhZGUgKHN0YXR1c0NvZGUsIHJhd0hlYWRlcnMsIHNvY2tldCkge1xuICAgIGNvbnN0IHsgY2FsbGJhY2ssIG9wYXF1ZSwgY29udGV4dCB9ID0gdGhpc1xuXG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHN0YXR1c0NvZGUsIDEwMSlcblxuICAgIHJlbW92ZVNpZ25hbCh0aGlzKVxuXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGxcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5yZXNwb25zZUhlYWRlcnMgPT09ICdyYXcnID8gdXRpbC5wYXJzZVJhd0hlYWRlcnMocmF3SGVhZGVycykgOiB1dGlsLnBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKVxuICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGNhbGxiYWNrLCBudWxsLCBudWxsLCB7XG4gICAgICBoZWFkZXJzLFxuICAgICAgc29ja2V0LFxuICAgICAgb3BhcXVlLFxuICAgICAgY29udGV4dFxuICAgIH0pXG4gIH1cblxuICBvbkVycm9yIChlcnIpIHtcbiAgICBjb25zdCB7IGNhbGxiYWNrLCBvcGFxdWUgfSA9IHRoaXNcblxuICAgIHJlbW92ZVNpZ25hbCh0aGlzKVxuXG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICB0aGlzLmNhbGxiYWNrID0gbnVsbFxuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgZXJyLCB7IG9wYXF1ZSB9KVxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdXBncmFkZSAob3B0cywgY2FsbGJhY2spIHtcbiAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdXBncmFkZS5jYWxsKHRoaXMsIG9wdHMsIChlcnIsIGRhdGEpID0+IHtcbiAgICAgICAgcmV0dXJuIGVyciA/IHJlamVjdChlcnIpIDogcmVzb2x2ZShkYXRhKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB1cGdyYWRlSGFuZGxlciA9IG5ldyBVcGdyYWRlSGFuZGxlcihvcHRzLCBjYWxsYmFjaylcbiAgICB0aGlzLmRpc3BhdGNoKHtcbiAgICAgIC4uLm9wdHMsXG4gICAgICBtZXRob2Q6IG9wdHMubWV0aG9kIHx8ICdHRVQnLFxuICAgICAgdXBncmFkZTogb3B0cy5wcm90b2NvbCB8fCAnV2Vic29ja2V0J1xuICAgIH0sIHVwZ3JhZGVIYW5kbGVyKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gICAgY29uc3Qgb3BhcXVlID0gb3B0cyAmJiBvcHRzLm9wYXF1ZVxuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGNhbGxiYWNrKGVyciwgeyBvcGFxdWUgfSkpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB1cGdyYWRlXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IEFzeW5jUmVzb3VyY2UgfSA9IHJlcXVpcmUoJ2FzeW5jX2hvb2tzJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IsIFJlcXVlc3RBYm9ydGVkRXJyb3IsIFNvY2tldEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgYWRkU2lnbmFsLCByZW1vdmVTaWduYWwgfSA9IHJlcXVpcmUoJy4vYWJvcnQtc2lnbmFsJylcblxuY2xhc3MgQ29ubmVjdEhhbmRsZXIgZXh0ZW5kcyBBc3luY1Jlc291cmNlIHtcbiAgY29uc3RydWN0b3IgKG9wdHMsIGNhbGxiYWNrKSB7XG4gICAgaWYgKCFvcHRzIHx8IHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9wdHMnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjYWxsYmFjaycpXG4gICAgfVxuXG4gICAgY29uc3QgeyBzaWduYWwsIG9wYXF1ZSwgcmVzcG9uc2VIZWFkZXJzIH0gPSBvcHRzXG5cbiAgICBpZiAoc2lnbmFsICYmIHR5cGVvZiBzaWduYWwub24gIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3NpZ25hbCBtdXN0IGJlIGFuIEV2ZW50RW1pdHRlciBvciBFdmVudFRhcmdldCcpXG4gICAgfVxuXG4gICAgc3VwZXIoJ1VORElDSV9DT05ORUNUJylcblxuICAgIHRoaXMub3BhcXVlID0gb3BhcXVlIHx8IG51bGxcbiAgICB0aGlzLnJlc3BvbnNlSGVhZGVycyA9IHJlc3BvbnNlSGVhZGVycyB8fCBudWxsXG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrXG4gICAgdGhpcy5hYm9ydCA9IG51bGxcblxuICAgIGFkZFNpZ25hbCh0aGlzLCBzaWduYWwpXG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0LCBjb250ZXh0KSB7XG4gICAgaWYgKCF0aGlzLmNhbGxiYWNrKSB7XG4gICAgICB0aHJvdyBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gICAgfVxuXG4gICAgdGhpcy5hYm9ydCA9IGFib3J0XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dFxuICB9XG5cbiAgb25IZWFkZXJzICgpIHtcbiAgICB0aHJvdyBuZXcgU29ja2V0RXJyb3IoJ2JhZCBjb25uZWN0JywgbnVsbClcbiAgfVxuXG4gIG9uVXBncmFkZSAoc3RhdHVzQ29kZSwgcmF3SGVhZGVycywgc29ja2V0KSB7XG4gICAgY29uc3QgeyBjYWxsYmFjaywgb3BhcXVlLCBjb250ZXh0IH0gPSB0aGlzXG5cbiAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG5cbiAgICBsZXQgaGVhZGVycyA9IHJhd0hlYWRlcnNcbiAgICAvLyBJbmRpY2F0ZXMgaXMgYW4gSFRUUDJTZXNzaW9uXG4gICAgaWYgKGhlYWRlcnMgIT0gbnVsbCkge1xuICAgICAgaGVhZGVycyA9IHRoaXMucmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VSYXdIZWFkZXJzKHJhd0hlYWRlcnMpIDogdXRpbC5wYXJzZUhlYWRlcnMocmF3SGVhZGVycylcbiAgICB9XG5cbiAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgbnVsbCwge1xuICAgICAgc3RhdHVzQ29kZSxcbiAgICAgIGhlYWRlcnMsXG4gICAgICBzb2NrZXQsXG4gICAgICBvcGFxdWUsXG4gICAgICBjb250ZXh0XG4gICAgfSlcbiAgfVxuXG4gIG9uRXJyb3IgKGVycikge1xuICAgIGNvbnN0IHsgY2FsbGJhY2ssIG9wYXF1ZSB9ID0gdGhpc1xuXG4gICAgcmVtb3ZlU2lnbmFsKHRoaXMpXG5cbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGNhbGxiYWNrLCBudWxsLCBlcnIsIHsgb3BhcXVlIH0pXG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb25uZWN0IChvcHRzLCBjYWxsYmFjaykge1xuICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25uZWN0LmNhbGwodGhpcywgb3B0cywgKGVyciwgZGF0YSkgPT4ge1xuICAgICAgICByZXR1cm4gZXJyID8gcmVqZWN0KGVycikgOiByZXNvbHZlKGRhdGEpXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IGNvbm5lY3RIYW5kbGVyID0gbmV3IENvbm5lY3RIYW5kbGVyKG9wdHMsIGNhbGxiYWNrKVxuICAgIHRoaXMuZGlzcGF0Y2goeyAuLi5vcHRzLCBtZXRob2Q6ICdDT05ORUNUJyB9LCBjb25uZWN0SGFuZGxlcilcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICAgIGNvbnN0IG9wYXF1ZSA9IG9wdHMgJiYgb3B0cy5vcGFxdWVcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhlcnIsIHsgb3BhcXVlIH0pKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29ubmVjdFxuIiwKICAgICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMucmVxdWVzdCA9IHJlcXVpcmUoJy4vYXBpLXJlcXVlc3QnKVxubW9kdWxlLmV4cG9ydHMuc3RyZWFtID0gcmVxdWlyZSgnLi9hcGktc3RyZWFtJylcbm1vZHVsZS5leHBvcnRzLnBpcGVsaW5lID0gcmVxdWlyZSgnLi9hcGktcGlwZWxpbmUnKVxubW9kdWxlLmV4cG9ydHMudXBncmFkZSA9IHJlcXVpcmUoJy4vYXBpLXVwZ3JhZGUnKVxubW9kdWxlLmV4cG9ydHMuY29ubmVjdCA9IHJlcXVpcmUoJy4vYXBpLWNvbm5lY3QnKVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBVbmRpY2lFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuXG5jbGFzcyBNb2NrTm90TWF0Y2hlZEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgTW9ja05vdE1hdGNoZWRFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnTW9ja05vdE1hdGNoZWRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdUaGUgcmVxdWVzdCBkb2VzIG5vdCBtYXRjaCBhbnkgcmVnaXN0ZXJlZCBtb2NrIGRpc3BhdGNoZXMnXG4gICAgdGhpcy5jb2RlID0gJ1VORF9NT0NLX0VSUl9NT0NLX05PVF9NQVRDSEVEJ1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBNb2NrTm90TWF0Y2hlZEVycm9yXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAga0FnZW50OiBTeW1ib2woJ2FnZW50JyksXG4gIGtPcHRpb25zOiBTeW1ib2woJ29wdGlvbnMnKSxcbiAga0ZhY3Rvcnk6IFN5bWJvbCgnZmFjdG9yeScpLFxuICBrRGlzcGF0Y2hlczogU3ltYm9sKCdkaXNwYXRjaGVzJyksXG4gIGtEaXNwYXRjaEtleTogU3ltYm9sKCdkaXNwYXRjaCBrZXknKSxcbiAga0RlZmF1bHRIZWFkZXJzOiBTeW1ib2woJ2RlZmF1bHQgaGVhZGVycycpLFxuICBrRGVmYXVsdFRyYWlsZXJzOiBTeW1ib2woJ2RlZmF1bHQgdHJhaWxlcnMnKSxcbiAga0NvbnRlbnRMZW5ndGg6IFN5bWJvbCgnY29udGVudCBsZW5ndGgnKSxcbiAga01vY2tBZ2VudDogU3ltYm9sKCdtb2NrIGFnZW50JyksXG4gIGtNb2NrQWdlbnRTZXQ6IFN5bWJvbCgnbW9jayBhZ2VudCBzZXQnKSxcbiAga01vY2tBZ2VudEdldDogU3ltYm9sKCdtb2NrIGFnZW50IGdldCcpLFxuICBrTW9ja0Rpc3BhdGNoOiBTeW1ib2woJ21vY2sgZGlzcGF0Y2gnKSxcbiAga0Nsb3NlOiBTeW1ib2woJ2Nsb3NlJyksXG4gIGtPcmlnaW5hbENsb3NlOiBTeW1ib2woJ29yaWdpbmFsIGFnZW50IGNsb3NlJyksXG4gIGtPcmlnaW46IFN5bWJvbCgnb3JpZ2luJyksXG4gIGtJc01vY2tBY3RpdmU6IFN5bWJvbCgnaXMgbW9jayBhY3RpdmUnKSxcbiAga05ldENvbm5lY3Q6IFN5bWJvbCgnbmV0IGNvbm5lY3QnKSxcbiAga0dldE5ldENvbm5lY3Q6IFN5bWJvbCgnZ2V0IG5ldCBjb25uZWN0JyksXG4gIGtDb25uZWN0ZWQ6IFN5bWJvbCgnY29ubmVjdGVkJylcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgTW9ja05vdE1hdGNoZWRFcnJvciB9ID0gcmVxdWlyZSgnLi9tb2NrLWVycm9ycycpXG5jb25zdCB7XG4gIGtEaXNwYXRjaGVzLFxuICBrTW9ja0FnZW50LFxuICBrT3JpZ2luYWxEaXNwYXRjaCxcbiAga09yaWdpbixcbiAga0dldE5ldENvbm5lY3Rcbn0gPSByZXF1aXJlKCcuL21vY2stc3ltYm9scycpXG5jb25zdCB7IGJ1aWxkVVJMLCBub3AgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IFNUQVRVU19DT0RFUyB9ID0gcmVxdWlyZSgnaHR0cCcpXG5jb25zdCB7XG4gIHR5cGVzOiB7XG4gICAgaXNQcm9taXNlXG4gIH1cbn0gPSByZXF1aXJlKCd1dGlsJylcblxuZnVuY3Rpb24gbWF0Y2hWYWx1ZSAobWF0Y2gsIHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgbWF0Y2ggPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIG1hdGNoID09PSB2YWx1ZVxuICB9XG4gIGlmIChtYXRjaCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgIHJldHVybiBtYXRjaC50ZXN0KHZhbHVlKVxuICB9XG4gIGlmICh0eXBlb2YgbWF0Y2ggPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gbWF0Y2godmFsdWUpID09PSB0cnVlXG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmZ1bmN0aW9uIGxvd2VyQ2FzZUVudHJpZXMgKGhlYWRlcnMpIHtcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhoZWFkZXJzKS5tYXAoKFtoZWFkZXJOYW1lLCBoZWFkZXJWYWx1ZV0pID0+IHtcbiAgICAgIHJldHVybiBbaGVhZGVyTmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpLCBoZWFkZXJWYWx1ZV1cbiAgICB9KVxuICApXG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4uLy4uL2luZGV4JykuSGVhZGVyc3xzdHJpbmdbXXxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSBoZWFkZXJzXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKi9cbmZ1bmN0aW9uIGdldEhlYWRlckJ5TmFtZSAoaGVhZGVycywga2V5KSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICBpZiAoaGVhZGVyc1tpXS50b0xvY2FsZUxvd2VyQ2FzZSgpID09PSBrZXkudG9Mb2NhbGVMb3dlckNhc2UoKSkge1xuICAgICAgICByZXR1cm4gaGVhZGVyc1tpICsgMV1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH0gZWxzZSBpZiAodHlwZW9mIGhlYWRlcnMuZ2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGhlYWRlcnMuZ2V0KGtleSlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbG93ZXJDYXNlRW50cmllcyhoZWFkZXJzKVtrZXkudG9Mb2NhbGVMb3dlckNhc2UoKV1cbiAgfVxufVxuXG4vKiogQHBhcmFtIHtzdHJpbmdbXX0gaGVhZGVycyAqL1xuZnVuY3Rpb24gYnVpbGRIZWFkZXJzRnJvbUFycmF5IChoZWFkZXJzKSB7IC8vIGZldGNoIEhlYWRlcnNMaXN0XG4gIGNvbnN0IGNsb25lID0gaGVhZGVycy5zbGljZSgpXG4gIGNvbnN0IGVudHJpZXMgPSBbXVxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgY2xvbmUubGVuZ3RoOyBpbmRleCArPSAyKSB7XG4gICAgZW50cmllcy5wdXNoKFtjbG9uZVtpbmRleF0sIGNsb25lW2luZGV4ICsgMV1dKVxuICB9XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoZW50cmllcylcbn1cblxuZnVuY3Rpb24gbWF0Y2hIZWFkZXJzIChtb2NrRGlzcGF0Y2gsIGhlYWRlcnMpIHtcbiAgaWYgKHR5cGVvZiBtb2NrRGlzcGF0Y2guaGVhZGVycyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7IC8vIGZldGNoIEhlYWRlcnNMaXN0XG4gICAgICBoZWFkZXJzID0gYnVpbGRIZWFkZXJzRnJvbUFycmF5KGhlYWRlcnMpXG4gICAgfVxuICAgIHJldHVybiBtb2NrRGlzcGF0Y2guaGVhZGVycyhoZWFkZXJzID8gbG93ZXJDYXNlRW50cmllcyhoZWFkZXJzKSA6IHt9KVxuICB9XG4gIGlmICh0eXBlb2YgbW9ja0Rpc3BhdGNoLmhlYWRlcnMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICBpZiAodHlwZW9mIGhlYWRlcnMgIT09ICdvYmplY3QnIHx8IHR5cGVvZiBtb2NrRGlzcGF0Y2guaGVhZGVycyAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGZvciAoY29uc3QgW21hdGNoSGVhZGVyTmFtZSwgbWF0Y2hIZWFkZXJWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMobW9ja0Rpc3BhdGNoLmhlYWRlcnMpKSB7XG4gICAgY29uc3QgaGVhZGVyVmFsdWUgPSBnZXRIZWFkZXJCeU5hbWUoaGVhZGVycywgbWF0Y2hIZWFkZXJOYW1lKVxuXG4gICAgaWYgKCFtYXRjaFZhbHVlKG1hdGNoSGVhZGVyVmFsdWUsIGhlYWRlclZhbHVlKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlXG59XG5cbmZ1bmN0aW9uIHNhZmVVcmwgKHBhdGgpIHtcbiAgaWYgKHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBwYXRoXG4gIH1cblxuICBjb25zdCBwYXRoU2VnbWVudHMgPSBwYXRoLnNwbGl0KCc/JylcblxuICBpZiAocGF0aFNlZ21lbnRzLmxlbmd0aCAhPT0gMikge1xuICAgIHJldHVybiBwYXRoXG4gIH1cblxuICBjb25zdCBxcCA9IG5ldyBVUkxTZWFyY2hQYXJhbXMocGF0aFNlZ21lbnRzLnBvcCgpKVxuICBxcC5zb3J0KClcbiAgcmV0dXJuIFsuLi5wYXRoU2VnbWVudHMsIHFwLnRvU3RyaW5nKCldLmpvaW4oJz8nKVxufVxuXG5mdW5jdGlvbiBtYXRjaEtleSAobW9ja0Rpc3BhdGNoLCB7IHBhdGgsIG1ldGhvZCwgYm9keSwgaGVhZGVycyB9KSB7XG4gIGNvbnN0IHBhdGhNYXRjaCA9IG1hdGNoVmFsdWUobW9ja0Rpc3BhdGNoLnBhdGgsIHBhdGgpXG4gIGNvbnN0IG1ldGhvZE1hdGNoID0gbWF0Y2hWYWx1ZShtb2NrRGlzcGF0Y2gubWV0aG9kLCBtZXRob2QpXG4gIGNvbnN0IGJvZHlNYXRjaCA9IHR5cGVvZiBtb2NrRGlzcGF0Y2guYm9keSAhPT0gJ3VuZGVmaW5lZCcgPyBtYXRjaFZhbHVlKG1vY2tEaXNwYXRjaC5ib2R5LCBib2R5KSA6IHRydWVcbiAgY29uc3QgaGVhZGVyc01hdGNoID0gbWF0Y2hIZWFkZXJzKG1vY2tEaXNwYXRjaCwgaGVhZGVycylcbiAgcmV0dXJuIHBhdGhNYXRjaCAmJiBtZXRob2RNYXRjaCAmJiBib2R5TWF0Y2ggJiYgaGVhZGVyc01hdGNoXG59XG5cbmZ1bmN0aW9uIGdldFJlc3BvbnNlRGF0YSAoZGF0YSkge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKGRhdGEpKSB7XG4gICAgcmV0dXJuIGRhdGFcbiAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZGF0YSlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZGF0YS50b1N0cmluZygpXG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0TW9ja0Rpc3BhdGNoIChtb2NrRGlzcGF0Y2hlcywga2V5KSB7XG4gIGNvbnN0IGJhc2VQYXRoID0ga2V5LnF1ZXJ5ID8gYnVpbGRVUkwoa2V5LnBhdGgsIGtleS5xdWVyeSkgOiBrZXkucGF0aFxuICBjb25zdCByZXNvbHZlZFBhdGggPSB0eXBlb2YgYmFzZVBhdGggPT09ICdzdHJpbmcnID8gc2FmZVVybChiYXNlUGF0aCkgOiBiYXNlUGF0aFxuXG4gIC8vIE1hdGNoIHBhdGhcbiAgbGV0IG1hdGNoZWRNb2NrRGlzcGF0Y2hlcyA9IG1vY2tEaXNwYXRjaGVzLmZpbHRlcigoeyBjb25zdW1lZCB9KSA9PiAhY29uc3VtZWQpLmZpbHRlcigoeyBwYXRoIH0pID0+IG1hdGNoVmFsdWUoc2FmZVVybChwYXRoKSwgcmVzb2x2ZWRQYXRoKSlcbiAgaWYgKG1hdGNoZWRNb2NrRGlzcGF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgTW9ja05vdE1hdGNoZWRFcnJvcihgTW9jayBkaXNwYXRjaCBub3QgbWF0Y2hlZCBmb3IgcGF0aCAnJHtyZXNvbHZlZFBhdGh9J2ApXG4gIH1cblxuICAvLyBNYXRjaCBtZXRob2RcbiAgbWF0Y2hlZE1vY2tEaXNwYXRjaGVzID0gbWF0Y2hlZE1vY2tEaXNwYXRjaGVzLmZpbHRlcigoeyBtZXRob2QgfSkgPT4gbWF0Y2hWYWx1ZShtZXRob2QsIGtleS5tZXRob2QpKVxuICBpZiAobWF0Y2hlZE1vY2tEaXNwYXRjaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBNb2NrTm90TWF0Y2hlZEVycm9yKGBNb2NrIGRpc3BhdGNoIG5vdCBtYXRjaGVkIGZvciBtZXRob2QgJyR7a2V5Lm1ldGhvZH0nYClcbiAgfVxuXG4gIC8vIE1hdGNoIGJvZHlcbiAgbWF0Y2hlZE1vY2tEaXNwYXRjaGVzID0gbWF0Y2hlZE1vY2tEaXNwYXRjaGVzLmZpbHRlcigoeyBib2R5IH0pID0+IHR5cGVvZiBib2R5ICE9PSAndW5kZWZpbmVkJyA/IG1hdGNoVmFsdWUoYm9keSwga2V5LmJvZHkpIDogdHJ1ZSlcbiAgaWYgKG1hdGNoZWRNb2NrRGlzcGF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgTW9ja05vdE1hdGNoZWRFcnJvcihgTW9jayBkaXNwYXRjaCBub3QgbWF0Y2hlZCBmb3IgYm9keSAnJHtrZXkuYm9keX0nYClcbiAgfVxuXG4gIC8vIE1hdGNoIGhlYWRlcnNcbiAgbWF0Y2hlZE1vY2tEaXNwYXRjaGVzID0gbWF0Y2hlZE1vY2tEaXNwYXRjaGVzLmZpbHRlcigobW9ja0Rpc3BhdGNoKSA9PiBtYXRjaEhlYWRlcnMobW9ja0Rpc3BhdGNoLCBrZXkuaGVhZGVycykpXG4gIGlmIChtYXRjaGVkTW9ja0Rpc3BhdGNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IE1vY2tOb3RNYXRjaGVkRXJyb3IoYE1vY2sgZGlzcGF0Y2ggbm90IG1hdGNoZWQgZm9yIGhlYWRlcnMgJyR7dHlwZW9mIGtleS5oZWFkZXJzID09PSAnb2JqZWN0JyA/IEpTT04uc3RyaW5naWZ5KGtleS5oZWFkZXJzKSA6IGtleS5oZWFkZXJzfSdgKVxuICB9XG5cbiAgcmV0dXJuIG1hdGNoZWRNb2NrRGlzcGF0Y2hlc1swXVxufVxuXG5mdW5jdGlvbiBhZGRNb2NrRGlzcGF0Y2ggKG1vY2tEaXNwYXRjaGVzLCBrZXksIGRhdGEpIHtcbiAgY29uc3QgYmFzZURhdGEgPSB7IHRpbWVzSW52b2tlZDogMCwgdGltZXM6IDEsIHBlcnNpc3Q6IGZhbHNlLCBjb25zdW1lZDogZmFsc2UgfVxuICBjb25zdCByZXBseURhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ2Z1bmN0aW9uJyA/IHsgY2FsbGJhY2s6IGRhdGEgfSA6IHsgLi4uZGF0YSB9XG4gIGNvbnN0IG5ld01vY2tEaXNwYXRjaCA9IHsgLi4uYmFzZURhdGEsIC4uLmtleSwgcGVuZGluZzogdHJ1ZSwgZGF0YTogeyBlcnJvcjogbnVsbCwgLi4ucmVwbHlEYXRhIH0gfVxuICBtb2NrRGlzcGF0Y2hlcy5wdXNoKG5ld01vY2tEaXNwYXRjaClcbiAgcmV0dXJuIG5ld01vY2tEaXNwYXRjaFxufVxuXG5mdW5jdGlvbiBkZWxldGVNb2NrRGlzcGF0Y2ggKG1vY2tEaXNwYXRjaGVzLCBrZXkpIHtcbiAgY29uc3QgaW5kZXggPSBtb2NrRGlzcGF0Y2hlcy5maW5kSW5kZXgoZGlzcGF0Y2ggPT4ge1xuICAgIGlmICghZGlzcGF0Y2guY29uc3VtZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICByZXR1cm4gbWF0Y2hLZXkoZGlzcGF0Y2gsIGtleSlcbiAgfSlcbiAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgIG1vY2tEaXNwYXRjaGVzLnNwbGljZShpbmRleCwgMSlcbiAgfVxufVxuXG5mdW5jdGlvbiBidWlsZEtleSAob3B0cykge1xuICBjb25zdCB7IHBhdGgsIG1ldGhvZCwgYm9keSwgaGVhZGVycywgcXVlcnkgfSA9IG9wdHNcbiAgcmV0dXJuIHtcbiAgICBwYXRoLFxuICAgIG1ldGhvZCxcbiAgICBib2R5LFxuICAgIGhlYWRlcnMsXG4gICAgcXVlcnlcbiAgfVxufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUtleVZhbHVlcyAoZGF0YSkge1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoZGF0YSkucmVkdWNlKChrZXlWYWx1ZVBhaXJzLCBba2V5LCB2YWx1ZV0pID0+IFtcbiAgICAuLi5rZXlWYWx1ZVBhaXJzLFxuICAgIEJ1ZmZlci5mcm9tKGAke2tleX1gKSxcbiAgICBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLm1hcCh4ID0+IEJ1ZmZlci5mcm9tKGAke3h9YCkpIDogQnVmZmVyLmZyb20oYCR7dmFsdWV9YClcbiAgXSwgW10pXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL1N0YXR1c1xuICogQHBhcmFtIHtudW1iZXJ9IHN0YXR1c0NvZGVcbiAqL1xuZnVuY3Rpb24gZ2V0U3RhdHVzVGV4dCAoc3RhdHVzQ29kZSkge1xuICByZXR1cm4gU1RBVFVTX0NPREVTW3N0YXR1c0NvZGVdIHx8ICd1bmtub3duJ1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRSZXNwb25zZSAoYm9keSkge1xuICBjb25zdCBidWZmZXJzID0gW11cbiAgZm9yIGF3YWl0IChjb25zdCBkYXRhIG9mIGJvZHkpIHtcbiAgICBidWZmZXJzLnB1c2goZGF0YSlcbiAgfVxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChidWZmZXJzKS50b1N0cmluZygndXRmOCcpXG59XG5cbi8qKlxuICogTW9jayBkaXNwYXRjaCBmdW5jdGlvbiB1c2VkIHRvIHNpbXVsYXRlIHVuZGljaSBkaXNwYXRjaGVzXG4gKi9cbmZ1bmN0aW9uIG1vY2tEaXNwYXRjaCAob3B0cywgaGFuZGxlcikge1xuICAvLyBHZXQgbW9jayBkaXNwYXRjaCBmcm9tIGJ1aWx0IGtleVxuICBjb25zdCBrZXkgPSBidWlsZEtleShvcHRzKVxuICBjb25zdCBtb2NrRGlzcGF0Y2ggPSBnZXRNb2NrRGlzcGF0Y2godGhpc1trRGlzcGF0Y2hlc10sIGtleSlcblxuICBtb2NrRGlzcGF0Y2gudGltZXNJbnZva2VkKytcblxuICAvLyBIZXJlJ3Mgd2hlcmUgd2UgcmVzb2x2ZSBhIGNhbGxiYWNrIGlmIGEgY2FsbGJhY2sgaXMgcHJlc2VudCBmb3IgdGhlIGRpc3BhdGNoIGRhdGEuXG4gIGlmIChtb2NrRGlzcGF0Y2guZGF0YS5jYWxsYmFjaykge1xuICAgIG1vY2tEaXNwYXRjaC5kYXRhID0geyAuLi5tb2NrRGlzcGF0Y2guZGF0YSwgLi4ubW9ja0Rpc3BhdGNoLmRhdGEuY2FsbGJhY2sob3B0cykgfVxuICB9XG5cbiAgLy8gUGFyc2UgbW9ja0Rpc3BhdGNoIGRhdGFcbiAgY29uc3QgeyBkYXRhOiB7IHN0YXR1c0NvZGUsIGRhdGEsIGhlYWRlcnMsIHRyYWlsZXJzLCBlcnJvciB9LCBkZWxheSwgcGVyc2lzdCB9ID0gbW9ja0Rpc3BhdGNoXG4gIGNvbnN0IHsgdGltZXNJbnZva2VkLCB0aW1lcyB9ID0gbW9ja0Rpc3BhdGNoXG5cbiAgLy8gSWYgaXQncyB1c2VkIHVwIGFuZCBub3QgcGVyc2lzdGVudCwgbWFyayBhcyBjb25zdW1lZFxuICBtb2NrRGlzcGF0Y2guY29uc3VtZWQgPSAhcGVyc2lzdCAmJiB0aW1lc0ludm9rZWQgPj0gdGltZXNcbiAgbW9ja0Rpc3BhdGNoLnBlbmRpbmcgPSB0aW1lc0ludm9rZWQgPCB0aW1lc1xuXG4gIC8vIElmIHNwZWNpZmllZCwgdHJpZ2dlciBkaXNwYXRjaCBlcnJvclxuICBpZiAoZXJyb3IgIT09IG51bGwpIHtcbiAgICBkZWxldGVNb2NrRGlzcGF0Y2godGhpc1trRGlzcGF0Y2hlc10sIGtleSlcbiAgICBoYW5kbGVyLm9uRXJyb3IoZXJyb3IpXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8vIEhhbmRsZSB0aGUgcmVxdWVzdCB3aXRoIGEgZGVsYXkgaWYgbmVjZXNzYXJ5XG4gIGlmICh0eXBlb2YgZGVsYXkgPT09ICdudW1iZXInICYmIGRlbGF5ID4gMCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaGFuZGxlUmVwbHkodGhpc1trRGlzcGF0Y2hlc10pXG4gICAgfSwgZGVsYXkpXG4gIH0gZWxzZSB7XG4gICAgaGFuZGxlUmVwbHkodGhpc1trRGlzcGF0Y2hlc10pXG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVSZXBseSAobW9ja0Rpc3BhdGNoZXMsIF9kYXRhID0gZGF0YSkge1xuICAgIC8vIGZldGNoJ3MgSGVhZGVyc0xpc3QgaXMgYSAxRCBzdHJpbmcgYXJyYXlcbiAgICBjb25zdCBvcHRzSGVhZGVycyA9IEFycmF5LmlzQXJyYXkob3B0cy5oZWFkZXJzKVxuICAgICAgPyBidWlsZEhlYWRlcnNGcm9tQXJyYXkob3B0cy5oZWFkZXJzKVxuICAgICAgOiBvcHRzLmhlYWRlcnNcbiAgICBjb25zdCBib2R5ID0gdHlwZW9mIF9kYXRhID09PSAnZnVuY3Rpb24nXG4gICAgICA/IF9kYXRhKHsgLi4ub3B0cywgaGVhZGVyczogb3B0c0hlYWRlcnMgfSlcbiAgICAgIDogX2RhdGFcblxuICAgIC8vIHV0aWwudHlwZXMuaXNQcm9taXNlIGlzIGxpa2VseSBuZWVkZWQgZm9yIGplc3QuXG4gICAgaWYgKGlzUHJvbWlzZShib2R5KSkge1xuICAgICAgLy8gSWYgaGFuZGxlUmVwbHkgaXMgYXN5bmNocm9ub3VzLCB0aHJvd2luZyBhbiBlcnJvclxuICAgICAgLy8gaW4gdGhlIGNhbGxiYWNrIHdpbGwgcmVqZWN0IHRoZSBwcm9taXNlLCByYXRoZXIgdGhhblxuICAgICAgLy8gc3luY2hyb25vdXNseSB0aHJvdyB0aGUgZXJyb3IsIHdoaWNoIGJyZWFrcyBzb21lIHRlc3RzLlxuICAgICAgLy8gUmF0aGVyLCB3ZSB3YWl0IGZvciB0aGUgY2FsbGJhY2sgdG8gcmVzb2x2ZSBpZiBpdCBpcyBhXG4gICAgICAvLyBwcm9taXNlLCBhbmQgdGhlbiByZS1ydW4gaGFuZGxlUmVwbHkgd2l0aCB0aGUgbmV3IGJvZHkuXG4gICAgICBib2R5LnRoZW4oKG5ld0RhdGEpID0+IGhhbmRsZVJlcGx5KG1vY2tEaXNwYXRjaGVzLCBuZXdEYXRhKSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9IGdldFJlc3BvbnNlRGF0YShib2R5KVxuICAgIGNvbnN0IHJlc3BvbnNlSGVhZGVycyA9IGdlbmVyYXRlS2V5VmFsdWVzKGhlYWRlcnMpXG4gICAgY29uc3QgcmVzcG9uc2VUcmFpbGVycyA9IGdlbmVyYXRlS2V5VmFsdWVzKHRyYWlsZXJzKVxuXG4gICAgaGFuZGxlci5hYm9ydCA9IG5vcFxuICAgIGhhbmRsZXIub25IZWFkZXJzKHN0YXR1c0NvZGUsIHJlc3BvbnNlSGVhZGVycywgcmVzdW1lLCBnZXRTdGF0dXNUZXh0KHN0YXR1c0NvZGUpKVxuICAgIGhhbmRsZXIub25EYXRhKEJ1ZmZlci5mcm9tKHJlc3BvbnNlRGF0YSkpXG4gICAgaGFuZGxlci5vbkNvbXBsZXRlKHJlc3BvbnNlVHJhaWxlcnMpXG4gICAgZGVsZXRlTW9ja0Rpc3BhdGNoKG1vY2tEaXNwYXRjaGVzLCBrZXkpXG4gIH1cblxuICBmdW5jdGlvbiByZXN1bWUgKCkge31cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiBidWlsZE1vY2tEaXNwYXRjaCAoKSB7XG4gIGNvbnN0IGFnZW50ID0gdGhpc1trTW9ja0FnZW50XVxuICBjb25zdCBvcmlnaW4gPSB0aGlzW2tPcmlnaW5dXG4gIGNvbnN0IG9yaWdpbmFsRGlzcGF0Y2ggPSB0aGlzW2tPcmlnaW5hbERpc3BhdGNoXVxuXG4gIHJldHVybiBmdW5jdGlvbiBkaXNwYXRjaCAob3B0cywgaGFuZGxlcikge1xuICAgIGlmIChhZ2VudC5pc01vY2tBY3RpdmUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG1vY2tEaXNwYXRjaC5jYWxsKHRoaXMsIG9wdHMsIGhhbmRsZXIpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBNb2NrTm90TWF0Y2hlZEVycm9yKSB7XG4gICAgICAgICAgY29uc3QgbmV0Q29ubmVjdCA9IGFnZW50W2tHZXROZXRDb25uZWN0XSgpXG4gICAgICAgICAgaWYgKG5ldENvbm5lY3QgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgTW9ja05vdE1hdGNoZWRFcnJvcihgJHtlcnJvci5tZXNzYWdlfTogc3Vic2VxdWVudCByZXF1ZXN0IHRvIG9yaWdpbiAke29yaWdpbn0gd2FzIG5vdCBhbGxvd2VkIChuZXQuY29ubmVjdCBkaXNhYmxlZClgKVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY2hlY2tOZXRDb25uZWN0KG5ldENvbm5lY3QsIG9yaWdpbikpIHtcbiAgICAgICAgICAgIG9yaWdpbmFsRGlzcGF0Y2guY2FsbCh0aGlzLCBvcHRzLCBoYW5kbGVyKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgTW9ja05vdE1hdGNoZWRFcnJvcihgJHtlcnJvci5tZXNzYWdlfTogc3Vic2VxdWVudCByZXF1ZXN0IHRvIG9yaWdpbiAke29yaWdpbn0gd2FzIG5vdCBhbGxvd2VkIChuZXQuY29ubmVjdCBpcyBub3QgZW5hYmxlZCBmb3IgdGhpcyBvcmlnaW4pYClcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvcmlnaW5hbERpc3BhdGNoLmNhbGwodGhpcywgb3B0cywgaGFuZGxlcilcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tOZXRDb25uZWN0IChuZXRDb25uZWN0LCBvcmlnaW4pIHtcbiAgY29uc3QgdXJsID0gbmV3IFVSTChvcmlnaW4pXG4gIGlmIChuZXRDb25uZWN0ID09PSB0cnVlKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG5ldENvbm5lY3QpICYmIG5ldENvbm5lY3Quc29tZSgobWF0Y2hlcikgPT4gbWF0Y2hWYWx1ZShtYXRjaGVyLCB1cmwuaG9zdCkpKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gYnVpbGRNb2NrT3B0aW9ucyAob3B0cykge1xuICBpZiAob3B0cykge1xuICAgIGNvbnN0IHsgYWdlbnQsIC4uLm1vY2tPcHRpb25zIH0gPSBvcHRzXG4gICAgcmV0dXJuIG1vY2tPcHRpb25zXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldFJlc3BvbnNlRGF0YSxcbiAgZ2V0TW9ja0Rpc3BhdGNoLFxuICBhZGRNb2NrRGlzcGF0Y2gsXG4gIGRlbGV0ZU1vY2tEaXNwYXRjaCxcbiAgYnVpbGRLZXksXG4gIGdlbmVyYXRlS2V5VmFsdWVzLFxuICBtYXRjaFZhbHVlLFxuICBnZXRSZXNwb25zZSxcbiAgZ2V0U3RhdHVzVGV4dCxcbiAgbW9ja0Rpc3BhdGNoLFxuICBidWlsZE1vY2tEaXNwYXRjaCxcbiAgY2hlY2tOZXRDb25uZWN0LFxuICBidWlsZE1vY2tPcHRpb25zLFxuICBnZXRIZWFkZXJCeU5hbWVcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgZ2V0UmVzcG9uc2VEYXRhLCBidWlsZEtleSwgYWRkTW9ja0Rpc3BhdGNoIH0gPSByZXF1aXJlKCcuL21vY2stdXRpbHMnKVxuY29uc3Qge1xuICBrRGlzcGF0Y2hlcyxcbiAga0Rpc3BhdGNoS2V5LFxuICBrRGVmYXVsdEhlYWRlcnMsXG4gIGtEZWZhdWx0VHJhaWxlcnMsXG4gIGtDb250ZW50TGVuZ3RoLFxuICBrTW9ja0Rpc3BhdGNoXG59ID0gcmVxdWlyZSgnLi9tb2NrLXN5bWJvbHMnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgeyBidWlsZFVSTCB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcblxuLyoqXG4gKiBEZWZpbmVzIHRoZSBzY29wZSBBUEkgZm9yIGFuIGludGVyY2VwdG9yIHJlcGx5XG4gKi9cbmNsYXNzIE1vY2tTY29wZSB7XG4gIGNvbnN0cnVjdG9yIChtb2NrRGlzcGF0Y2gpIHtcbiAgICB0aGlzW2tNb2NrRGlzcGF0Y2hdID0gbW9ja0Rpc3BhdGNoXG4gIH1cblxuICAvKipcbiAgICogRGVsYXkgYSByZXBseSBieSBhIHNldCBhbW91bnQgaW4gbXMuXG4gICAqL1xuICBkZWxheSAod2FpdEluTXMpIHtcbiAgICBpZiAodHlwZW9mIHdhaXRJbk1zICE9PSAnbnVtYmVyJyB8fCAhTnVtYmVyLmlzSW50ZWdlcih3YWl0SW5NcykgfHwgd2FpdEluTXMgPD0gMCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCd3YWl0SW5NcyBtdXN0IGJlIGEgdmFsaWQgaW50ZWdlciA+IDAnKVxuICAgIH1cblxuICAgIHRoaXNba01vY2tEaXNwYXRjaF0uZGVsYXkgPSB3YWl0SW5Nc1xuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogRm9yIGEgZGVmaW5lZCByZXBseSwgbmV2ZXIgbWFyayBhcyBjb25zdW1lZC5cbiAgICovXG4gIHBlcnNpc3QgKCkge1xuICAgIHRoaXNba01vY2tEaXNwYXRjaF0ucGVyc2lzdCA9IHRydWVcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93IG9uZSB0byBkZWZpbmUgYSByZXBseSBmb3IgYSBzZXQgYW1vdW50IG9mIG1hdGNoaW5nIHJlcXVlc3RzLlxuICAgKi9cbiAgdGltZXMgKHJlcGVhdFRpbWVzKSB7XG4gICAgaWYgKHR5cGVvZiByZXBlYXRUaW1lcyAhPT0gJ251bWJlcicgfHwgIU51bWJlci5pc0ludGVnZXIocmVwZWF0VGltZXMpIHx8IHJlcGVhdFRpbWVzIDw9IDApIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigncmVwZWF0VGltZXMgbXVzdCBiZSBhIHZhbGlkIGludGVnZXIgPiAwJylcbiAgICB9XG5cbiAgICB0aGlzW2tNb2NrRGlzcGF0Y2hdLnRpbWVzID0gcmVwZWF0VGltZXNcbiAgICByZXR1cm4gdGhpc1xuICB9XG59XG5cbi8qKlxuICogRGVmaW5lcyBhbiBpbnRlcmNlcHRvciBmb3IgYSBNb2NrXG4gKi9cbmNsYXNzIE1vY2tJbnRlcmNlcHRvciB7XG4gIGNvbnN0cnVjdG9yIChvcHRzLCBtb2NrRGlzcGF0Y2hlcykge1xuICAgIGlmICh0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignb3B0cyBtdXN0IGJlIGFuIG9iamVjdCcpXG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3B0cy5wYXRoID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdvcHRzLnBhdGggbXVzdCBiZSBkZWZpbmVkJylcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvcHRzLm1ldGhvZCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIG9wdHMubWV0aG9kID0gJ0dFVCdcbiAgICB9XG4gICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8xMjQ1XG4gICAgLy8gQXMgcGVyIFJGQyAzOTg2LCBjbGllbnRzIGFyZSBub3Qgc3VwcG9zZWQgdG8gc2VuZCBVUklcbiAgICAvLyBmcmFnbWVudHMgdG8gc2VydmVycyB3aGVuIHRoZXkgcmV0cmlldmUgYSBkb2N1bWVudCxcbiAgICBpZiAodHlwZW9mIG9wdHMucGF0aCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmIChvcHRzLnF1ZXJ5KSB7XG4gICAgICAgIG9wdHMucGF0aCA9IGJ1aWxkVVJMKG9wdHMucGF0aCwgb3B0cy5xdWVyeSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE1hdGNoZXMgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvYmxvYi9tYWluL2xpYi9mZXRjaC9pbmRleC5qcyNMMTgxMVxuICAgICAgICBjb25zdCBwYXJzZWRVUkwgPSBuZXcgVVJMKG9wdHMucGF0aCwgJ2RhdGE6Ly8nKVxuICAgICAgICBvcHRzLnBhdGggPSBwYXJzZWRVUkwucGF0aG5hbWUgKyBwYXJzZWRVUkwuc2VhcmNoXG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3B0cy5tZXRob2QgPT09ICdzdHJpbmcnKSB7XG4gICAgICBvcHRzLm1ldGhvZCA9IG9wdHMubWV0aG9kLnRvVXBwZXJDYXNlKClcbiAgICB9XG5cbiAgICB0aGlzW2tEaXNwYXRjaEtleV0gPSBidWlsZEtleShvcHRzKVxuICAgIHRoaXNba0Rpc3BhdGNoZXNdID0gbW9ja0Rpc3BhdGNoZXNcbiAgICB0aGlzW2tEZWZhdWx0SGVhZGVyc10gPSB7fVxuICAgIHRoaXNba0RlZmF1bHRUcmFpbGVyc10gPSB7fVxuICAgIHRoaXNba0NvbnRlbnRMZW5ndGhdID0gZmFsc2VcbiAgfVxuXG4gIGNyZWF0ZU1vY2tTY29wZURpc3BhdGNoRGF0YSAoc3RhdHVzQ29kZSwgZGF0YSwgcmVzcG9uc2VPcHRpb25zID0ge30pIHtcbiAgICBjb25zdCByZXNwb25zZURhdGEgPSBnZXRSZXNwb25zZURhdGEoZGF0YSlcbiAgICBjb25zdCBjb250ZW50TGVuZ3RoID0gdGhpc1trQ29udGVudExlbmd0aF0gPyB7ICdjb250ZW50LWxlbmd0aCc6IHJlc3BvbnNlRGF0YS5sZW5ndGggfSA6IHt9XG4gICAgY29uc3QgaGVhZGVycyA9IHsgLi4udGhpc1trRGVmYXVsdEhlYWRlcnNdLCAuLi5jb250ZW50TGVuZ3RoLCAuLi5yZXNwb25zZU9wdGlvbnMuaGVhZGVycyB9XG4gICAgY29uc3QgdHJhaWxlcnMgPSB7IC4uLnRoaXNba0RlZmF1bHRUcmFpbGVyc10sIC4uLnJlc3BvbnNlT3B0aW9ucy50cmFpbGVycyB9XG5cbiAgICByZXR1cm4geyBzdGF0dXNDb2RlLCBkYXRhLCBoZWFkZXJzLCB0cmFpbGVycyB9XG4gIH1cblxuICB2YWxpZGF0ZVJlcGx5UGFyYW1ldGVycyAoc3RhdHVzQ29kZSwgZGF0YSwgcmVzcG9uc2VPcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBzdGF0dXNDb2RlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdzdGF0dXNDb2RlIG11c3QgYmUgZGVmaW5lZCcpXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignZGF0YSBtdXN0IGJlIGRlZmluZWQnKVxuICAgIH1cbiAgICBpZiAodHlwZW9mIHJlc3BvbnNlT3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigncmVzcG9uc2VPcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0JylcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTW9jayBhbiB1bmRpY2kgcmVxdWVzdCB3aXRoIGEgZGVmaW5lZCByZXBseS5cbiAgICovXG4gIHJlcGx5IChyZXBseURhdGEpIHtcbiAgICAvLyBWYWx1ZXMgb2YgcmVwbHkgYXJlbid0IGF2YWlsYWJsZSByaWdodCBub3cgYXMgdGhleVxuICAgIC8vIGNhbiBvbmx5IGJlIGF2YWlsYWJsZSB3aGVuIHRoZSByZXBseSBjYWxsYmFjayBpcyBpbnZva2VkLlxuICAgIGlmICh0eXBlb2YgcmVwbHlEYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBXZSdsbCBmaXJzdCB3cmFwIHRoZSBwcm92aWRlZCBjYWxsYmFjayBpbiBhbm90aGVyIGZ1bmN0aW9uLFxuICAgICAgLy8gdGhpcyBmdW5jdGlvbiB3aWxsIHByb3Blcmx5IHJlc29sdmUgdGhlIGRhdGEgZnJvbSB0aGUgY2FsbGJhY2tcbiAgICAgIC8vIHdoZW4gaW52b2tlZC5cbiAgICAgIGNvbnN0IHdyYXBwZWREZWZhdWx0c0NhbGxiYWNrID0gKG9wdHMpID0+IHtcbiAgICAgICAgLy8gT3VyIHJlcGx5IG9wdGlvbnMgY2FsbGJhY2sgY29udGFpbnMgdGhlIHBhcmFtZXRlciBmb3Igc3RhdHVzQ29kZSwgZGF0YSBhbmQgb3B0aW9ucy5cbiAgICAgICAgY29uc3QgcmVzb2x2ZWREYXRhID0gcmVwbHlEYXRhKG9wdHMpXG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgaXQgaXMgaW4gdGhlIHJpZ2h0IGZvcm1hdFxuICAgICAgICBpZiAodHlwZW9mIHJlc29sdmVkRGF0YSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3JlcGx5IG9wdGlvbnMgY2FsbGJhY2sgbXVzdCByZXR1cm4gYW4gb2JqZWN0JylcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgc3RhdHVzQ29kZSwgZGF0YSA9ICcnLCByZXNwb25zZU9wdGlvbnMgPSB7fSB9ID0gcmVzb2x2ZWREYXRhXG4gICAgICAgIHRoaXMudmFsaWRhdGVSZXBseVBhcmFtZXRlcnMoc3RhdHVzQ29kZSwgZGF0YSwgcmVzcG9uc2VPcHRpb25zKVxuICAgICAgICAvLyBTaW5jZSB0aGUgdmFsdWVzIGNhbiBiZSBvYnRhaW5lZCBpbW1lZGlhdGVseSB3ZSByZXR1cm4gdGhlbVxuICAgICAgICAvLyBmcm9tIHRoaXMgaGlnaGVyIG9yZGVyIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSByZXNvbHZlZCBsYXRlci5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi50aGlzLmNyZWF0ZU1vY2tTY29wZURpc3BhdGNoRGF0YShzdGF0dXNDb2RlLCBkYXRhLCByZXNwb25zZU9wdGlvbnMpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQWRkIHVzdWFsIGRpc3BhdGNoIGRhdGEsIGJ1dCB0aGlzIHRpbWUgc2V0IHRoZSBkYXRhIHBhcmFtZXRlciB0byBmdW5jdGlvbiB0aGF0IHdpbGwgZXZlbnR1YWxseSBwcm92aWRlIGRhdGEuXG4gICAgICBjb25zdCBuZXdNb2NrRGlzcGF0Y2ggPSBhZGRNb2NrRGlzcGF0Y2godGhpc1trRGlzcGF0Y2hlc10sIHRoaXNba0Rpc3BhdGNoS2V5XSwgd3JhcHBlZERlZmF1bHRzQ2FsbGJhY2spXG4gICAgICByZXR1cm4gbmV3IE1vY2tTY29wZShuZXdNb2NrRGlzcGF0Y2gpXG4gICAgfVxuXG4gICAgLy8gV2UgY2FuIGhhdmUgZWl0aGVyIG9uZSBvciB0aHJlZSBwYXJhbWV0ZXJzLCBpZiB3ZSBnZXQgaGVyZSxcbiAgICAvLyB3ZSBzaG91bGQgaGF2ZSAxLTMgcGFyYW1ldGVycy4gU28gd2Ugc3ByZWFkIHRoZSBhcmd1bWVudHMgb2ZcbiAgICAvLyB0aGlzIGZ1bmN0aW9uIHRvIG9idGFpbiB0aGUgcGFyYW1ldGVycywgc2luY2UgcmVwbHlEYXRhIHdpbGwgYWx3YXlzXG4gICAgLy8ganVzdCBiZSB0aGUgc3RhdHVzQ29kZS5cbiAgICBjb25zdCBbc3RhdHVzQ29kZSwgZGF0YSA9ICcnLCByZXNwb25zZU9wdGlvbnMgPSB7fV0gPSBbLi4uYXJndW1lbnRzXVxuICAgIHRoaXMudmFsaWRhdGVSZXBseVBhcmFtZXRlcnMoc3RhdHVzQ29kZSwgZGF0YSwgcmVzcG9uc2VPcHRpb25zKVxuXG4gICAgLy8gU2VuZCBpbi1hbHJlYWR5IHByb3ZpZGVkIGRhdGEgbGlrZSB1c3VhbFxuICAgIGNvbnN0IGRpc3BhdGNoRGF0YSA9IHRoaXMuY3JlYXRlTW9ja1Njb3BlRGlzcGF0Y2hEYXRhKHN0YXR1c0NvZGUsIGRhdGEsIHJlc3BvbnNlT3B0aW9ucylcbiAgICBjb25zdCBuZXdNb2NrRGlzcGF0Y2ggPSBhZGRNb2NrRGlzcGF0Y2godGhpc1trRGlzcGF0Y2hlc10sIHRoaXNba0Rpc3BhdGNoS2V5XSwgZGlzcGF0Y2hEYXRhKVxuICAgIHJldHVybiBuZXcgTW9ja1Njb3BlKG5ld01vY2tEaXNwYXRjaClcbiAgfVxuXG4gIC8qKlxuICAgKiBNb2NrIGFuIHVuZGljaSByZXF1ZXN0IHdpdGggYSBkZWZpbmVkIGVycm9yLlxuICAgKi9cbiAgcmVwbHlXaXRoRXJyb3IgKGVycm9yKSB7XG4gICAgaWYgKHR5cGVvZiBlcnJvciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignZXJyb3IgbXVzdCBiZSBkZWZpbmVkJylcbiAgICB9XG5cbiAgICBjb25zdCBuZXdNb2NrRGlzcGF0Y2ggPSBhZGRNb2NrRGlzcGF0Y2godGhpc1trRGlzcGF0Y2hlc10sIHRoaXNba0Rpc3BhdGNoS2V5XSwgeyBlcnJvciB9KVxuICAgIHJldHVybiBuZXcgTW9ja1Njb3BlKG5ld01vY2tEaXNwYXRjaClcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgZGVmYXVsdCByZXBseSBoZWFkZXJzIG9uIHRoZSBpbnRlcmNlcHRvciBmb3Igc3Vic2VxdWVudCByZXBsaWVzXG4gICAqL1xuICBkZWZhdWx0UmVwbHlIZWFkZXJzIChoZWFkZXJzKSB7XG4gICAgaWYgKHR5cGVvZiBoZWFkZXJzID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdoZWFkZXJzIG11c3QgYmUgZGVmaW5lZCcpXG4gICAgfVxuXG4gICAgdGhpc1trRGVmYXVsdEhlYWRlcnNdID0gaGVhZGVyc1xuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogU2V0IGRlZmF1bHQgcmVwbHkgdHJhaWxlcnMgb24gdGhlIGludGVyY2VwdG9yIGZvciBzdWJzZXF1ZW50IHJlcGxpZXNcbiAgICovXG4gIGRlZmF1bHRSZXBseVRyYWlsZXJzICh0cmFpbGVycykge1xuICAgIGlmICh0eXBlb2YgdHJhaWxlcnMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3RyYWlsZXJzIG11c3QgYmUgZGVmaW5lZCcpXG4gICAgfVxuXG4gICAgdGhpc1trRGVmYXVsdFRyYWlsZXJzXSA9IHRyYWlsZXJzXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgcmVwbHkgY29udGVudCBsZW5ndGggaGVhZGVyIGZvciByZXBsaWVzIG9uIHRoZSBpbnRlcmNlcHRvclxuICAgKi9cbiAgcmVwbHlDb250ZW50TGVuZ3RoICgpIHtcbiAgICB0aGlzW2tDb250ZW50TGVuZ3RoXSA9IHRydWVcbiAgICByZXR1cm4gdGhpc1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzLk1vY2tJbnRlcmNlcHRvciA9IE1vY2tJbnRlcmNlcHRvclxubW9kdWxlLmV4cG9ydHMuTW9ja1Njb3BlID0gTW9ja1Njb3BlXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHByb21pc2lmeSB9ID0gcmVxdWlyZSgndXRpbCcpXG5jb25zdCBDbGllbnQgPSByZXF1aXJlKCcuLi9jbGllbnQnKVxuY29uc3QgeyBidWlsZE1vY2tEaXNwYXRjaCB9ID0gcmVxdWlyZSgnLi9tb2NrLXV0aWxzJylcbmNvbnN0IHtcbiAga0Rpc3BhdGNoZXMsXG4gIGtNb2NrQWdlbnQsXG4gIGtDbG9zZSxcbiAga09yaWdpbmFsQ2xvc2UsXG4gIGtPcmlnaW4sXG4gIGtPcmlnaW5hbERpc3BhdGNoLFxuICBrQ29ubmVjdGVkXG59ID0gcmVxdWlyZSgnLi9tb2NrLXN5bWJvbHMnKVxuY29uc3QgeyBNb2NrSW50ZXJjZXB0b3IgfSA9IHJlcXVpcmUoJy4vbW9jay1pbnRlcmNlcHRvcicpXG5jb25zdCBTeW1ib2xzID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcblxuLyoqXG4gKiBNb2NrQ2xpZW50IHByb3ZpZGVzIGFuIEFQSSB0aGF0IGV4dGVuZHMgdGhlIENsaWVudCB0byBpbmZsdWVuY2UgdGhlIG1vY2tEaXNwYXRjaGVzLlxuICovXG5jbGFzcyBNb2NrQ2xpZW50IGV4dGVuZHMgQ2xpZW50IHtcbiAgY29uc3RydWN0b3IgKG9yaWdpbiwgb3B0cykge1xuICAgIHN1cGVyKG9yaWdpbiwgb3B0cylcblxuICAgIGlmICghb3B0cyB8fCAhb3B0cy5hZ2VudCB8fCB0eXBlb2Ygb3B0cy5hZ2VudC5kaXNwYXRjaCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdBcmd1bWVudCBvcHRzLmFnZW50IG11c3QgaW1wbGVtZW50IEFnZW50JylcbiAgICB9XG5cbiAgICB0aGlzW2tNb2NrQWdlbnRdID0gb3B0cy5hZ2VudFxuICAgIHRoaXNba09yaWdpbl0gPSBvcmlnaW5cbiAgICB0aGlzW2tEaXNwYXRjaGVzXSA9IFtdXG4gICAgdGhpc1trQ29ubmVjdGVkXSA9IDFcbiAgICB0aGlzW2tPcmlnaW5hbERpc3BhdGNoXSA9IHRoaXMuZGlzcGF0Y2hcbiAgICB0aGlzW2tPcmlnaW5hbENsb3NlXSA9IHRoaXMuY2xvc2UuYmluZCh0aGlzKVxuXG4gICAgdGhpcy5kaXNwYXRjaCA9IGJ1aWxkTW9ja0Rpc3BhdGNoLmNhbGwodGhpcylcbiAgICB0aGlzLmNsb3NlID0gdGhpc1trQ2xvc2VdXG4gIH1cblxuICBnZXQgW1N5bWJvbHMua0Nvbm5lY3RlZF0gKCkge1xuICAgIHJldHVybiB0aGlzW2tDb25uZWN0ZWRdXG4gIH1cblxuICAvKipcbiAgICogU2V0cyB1cCB0aGUgYmFzZSBpbnRlcmNlcHRvciBmb3IgbW9ja2luZyByZXBsaWVzIGZyb20gdW5kaWNpLlxuICAgKi9cbiAgaW50ZXJjZXB0IChvcHRzKSB7XG4gICAgcmV0dXJuIG5ldyBNb2NrSW50ZXJjZXB0b3Iob3B0cywgdGhpc1trRGlzcGF0Y2hlc10pXG4gIH1cblxuICBhc3luYyBba0Nsb3NlXSAoKSB7XG4gICAgYXdhaXQgcHJvbWlzaWZ5KHRoaXNba09yaWdpbmFsQ2xvc2VdKSgpXG4gICAgdGhpc1trQ29ubmVjdGVkXSA9IDBcbiAgICB0aGlzW2tNb2NrQWdlbnRdW1N5bWJvbHMua0NsaWVudHNdLmRlbGV0ZSh0aGlzW2tPcmlnaW5dKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gTW9ja0NsaWVudFxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBwcm9taXNpZnkgfSA9IHJlcXVpcmUoJ3V0aWwnKVxuY29uc3QgUG9vbCA9IHJlcXVpcmUoJy4uL3Bvb2wnKVxuY29uc3QgeyBidWlsZE1vY2tEaXNwYXRjaCB9ID0gcmVxdWlyZSgnLi9tb2NrLXV0aWxzJylcbmNvbnN0IHtcbiAga0Rpc3BhdGNoZXMsXG4gIGtNb2NrQWdlbnQsXG4gIGtDbG9zZSxcbiAga09yaWdpbmFsQ2xvc2UsXG4gIGtPcmlnaW4sXG4gIGtPcmlnaW5hbERpc3BhdGNoLFxuICBrQ29ubmVjdGVkXG59ID0gcmVxdWlyZSgnLi9tb2NrLXN5bWJvbHMnKVxuY29uc3QgeyBNb2NrSW50ZXJjZXB0b3IgfSA9IHJlcXVpcmUoJy4vbW9jay1pbnRlcmNlcHRvcicpXG5jb25zdCBTeW1ib2xzID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcblxuLyoqXG4gKiBNb2NrUG9vbCBwcm92aWRlcyBhbiBBUEkgdGhhdCBleHRlbmRzIHRoZSBQb29sIHRvIGluZmx1ZW5jZSB0aGUgbW9ja0Rpc3BhdGNoZXMuXG4gKi9cbmNsYXNzIE1vY2tQb29sIGV4dGVuZHMgUG9vbCB7XG4gIGNvbnN0cnVjdG9yIChvcmlnaW4sIG9wdHMpIHtcbiAgICBzdXBlcihvcmlnaW4sIG9wdHMpXG5cbiAgICBpZiAoIW9wdHMgfHwgIW9wdHMuYWdlbnQgfHwgdHlwZW9mIG9wdHMuYWdlbnQuZGlzcGF0Y2ggIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignQXJndW1lbnQgb3B0cy5hZ2VudCBtdXN0IGltcGxlbWVudCBBZ2VudCcpXG4gICAgfVxuXG4gICAgdGhpc1trTW9ja0FnZW50XSA9IG9wdHMuYWdlbnRcbiAgICB0aGlzW2tPcmlnaW5dID0gb3JpZ2luXG4gICAgdGhpc1trRGlzcGF0Y2hlc10gPSBbXVxuICAgIHRoaXNba0Nvbm5lY3RlZF0gPSAxXG4gICAgdGhpc1trT3JpZ2luYWxEaXNwYXRjaF0gPSB0aGlzLmRpc3BhdGNoXG4gICAgdGhpc1trT3JpZ2luYWxDbG9zZV0gPSB0aGlzLmNsb3NlLmJpbmQodGhpcylcblxuICAgIHRoaXMuZGlzcGF0Y2ggPSBidWlsZE1vY2tEaXNwYXRjaC5jYWxsKHRoaXMpXG4gICAgdGhpcy5jbG9zZSA9IHRoaXNba0Nsb3NlXVxuICB9XG5cbiAgZ2V0IFtTeW1ib2xzLmtDb25uZWN0ZWRdICgpIHtcbiAgICByZXR1cm4gdGhpc1trQ29ubmVjdGVkXVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdXAgdGhlIGJhc2UgaW50ZXJjZXB0b3IgZm9yIG1vY2tpbmcgcmVwbGllcyBmcm9tIHVuZGljaS5cbiAgICovXG4gIGludGVyY2VwdCAob3B0cykge1xuICAgIHJldHVybiBuZXcgTW9ja0ludGVyY2VwdG9yKG9wdHMsIHRoaXNba0Rpc3BhdGNoZXNdKVxuICB9XG5cbiAgYXN5bmMgW2tDbG9zZV0gKCkge1xuICAgIGF3YWl0IHByb21pc2lmeSh0aGlzW2tPcmlnaW5hbENsb3NlXSkoKVxuICAgIHRoaXNba0Nvbm5lY3RlZF0gPSAwXG4gICAgdGhpc1trTW9ja0FnZW50XVtTeW1ib2xzLmtDbGllbnRzXS5kZWxldGUodGhpc1trT3JpZ2luXSlcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IE1vY2tQb29sXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBzaW5ndWxhcnMgPSB7XG4gIHByb25vdW46ICdpdCcsXG4gIGlzOiAnaXMnLFxuICB3YXM6ICd3YXMnLFxuICB0aGlzOiAndGhpcydcbn1cblxuY29uc3QgcGx1cmFscyA9IHtcbiAgcHJvbm91bjogJ3RoZXknLFxuICBpczogJ2FyZScsXG4gIHdhczogJ3dlcmUnLFxuICB0aGlzOiAndGhlc2UnXG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xhc3MgUGx1cmFsaXplciB7XG4gIGNvbnN0cnVjdG9yIChzaW5ndWxhciwgcGx1cmFsKSB7XG4gICAgdGhpcy5zaW5ndWxhciA9IHNpbmd1bGFyXG4gICAgdGhpcy5wbHVyYWwgPSBwbHVyYWxcbiAgfVxuXG4gIHBsdXJhbGl6ZSAoY291bnQpIHtcbiAgICBjb25zdCBvbmUgPSBjb3VudCA9PT0gMVxuICAgIGNvbnN0IGtleXMgPSBvbmUgPyBzaW5ndWxhcnMgOiBwbHVyYWxzXG4gICAgY29uc3Qgbm91biA9IG9uZSA/IHRoaXMuc2luZ3VsYXIgOiB0aGlzLnBsdXJhbFxuICAgIHJldHVybiB7IC4uLmtleXMsIGNvdW50LCBub3VuIH1cbiAgfVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBUcmFuc2Zvcm0gfSA9IHJlcXVpcmUoJ3N0cmVhbScpXG5jb25zdCB7IENvbnNvbGUgfSA9IHJlcXVpcmUoJ2NvbnNvbGUnKVxuXG4vKipcbiAqIEdldHMgdGhlIG91dHB1dCBvZiBgY29uc29sZS50YWJsZSjigKYpYCBhcyBhIHN0cmluZy5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBQZW5kaW5nSW50ZXJjZXB0b3JzRm9ybWF0dGVyIHtcbiAgY29uc3RydWN0b3IgKHsgZGlzYWJsZUNvbG9ycyB9ID0ge30pIHtcbiAgICB0aGlzLnRyYW5zZm9ybSA9IG5ldyBUcmFuc2Zvcm0oe1xuICAgICAgdHJhbnNmb3JtIChjaHVuaywgX2VuYywgY2IpIHtcbiAgICAgICAgY2IobnVsbCwgY2h1bmspXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXMubG9nZ2VyID0gbmV3IENvbnNvbGUoe1xuICAgICAgc3Rkb3V0OiB0aGlzLnRyYW5zZm9ybSxcbiAgICAgIGluc3BlY3RPcHRpb25zOiB7XG4gICAgICAgIGNvbG9yczogIWRpc2FibGVDb2xvcnMgJiYgIXByb2Nlc3MuZW52LkNJXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGZvcm1hdCAocGVuZGluZ0ludGVyY2VwdG9ycykge1xuICAgIGNvbnN0IHdpdGhQcmV0dHlIZWFkZXJzID0gcGVuZGluZ0ludGVyY2VwdG9ycy5tYXAoXG4gICAgICAoeyBtZXRob2QsIHBhdGgsIGRhdGE6IHsgc3RhdHVzQ29kZSB9LCBwZXJzaXN0LCB0aW1lcywgdGltZXNJbnZva2VkLCBvcmlnaW4gfSkgPT4gKHtcbiAgICAgICAgTWV0aG9kOiBtZXRob2QsXG4gICAgICAgIE9yaWdpbjogb3JpZ2luLFxuICAgICAgICBQYXRoOiBwYXRoLFxuICAgICAgICAnU3RhdHVzIGNvZGUnOiBzdGF0dXNDb2RlLFxuICAgICAgICBQZXJzaXN0ZW50OiBwZXJzaXN0ID8gJ+KchScgOiAn4p2MJyxcbiAgICAgICAgSW52b2NhdGlvbnM6IHRpbWVzSW52b2tlZCxcbiAgICAgICAgUmVtYWluaW5nOiBwZXJzaXN0ID8gSW5maW5pdHkgOiB0aW1lcyAtIHRpbWVzSW52b2tlZFxuICAgICAgfSkpXG5cbiAgICB0aGlzLmxvZ2dlci50YWJsZSh3aXRoUHJldHR5SGVhZGVycylcbiAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm0ucmVhZCgpLnRvU3RyaW5nKClcbiAgfVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBrQ2xpZW50cyB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IEFnZW50ID0gcmVxdWlyZSgnLi4vYWdlbnQnKVxuY29uc3Qge1xuICBrQWdlbnQsXG4gIGtNb2NrQWdlbnRTZXQsXG4gIGtNb2NrQWdlbnRHZXQsXG4gIGtEaXNwYXRjaGVzLFxuICBrSXNNb2NrQWN0aXZlLFxuICBrTmV0Q29ubmVjdCxcbiAga0dldE5ldENvbm5lY3QsXG4gIGtPcHRpb25zLFxuICBrRmFjdG9yeVxufSA9IHJlcXVpcmUoJy4vbW9jay1zeW1ib2xzJylcbmNvbnN0IE1vY2tDbGllbnQgPSByZXF1aXJlKCcuL21vY2stY2xpZW50JylcbmNvbnN0IE1vY2tQb29sID0gcmVxdWlyZSgnLi9tb2NrLXBvb2wnKVxuY29uc3QgeyBtYXRjaFZhbHVlLCBidWlsZE1vY2tPcHRpb25zIH0gPSByZXF1aXJlKCcuL21vY2stdXRpbHMnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciwgVW5kaWNpRXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IERpc3BhdGNoZXIgPSByZXF1aXJlKCcuLi9kaXNwYXRjaGVyJylcbmNvbnN0IFBsdXJhbGl6ZXIgPSByZXF1aXJlKCcuL3BsdXJhbGl6ZXInKVxuY29uc3QgUGVuZGluZ0ludGVyY2VwdG9yc0Zvcm1hdHRlciA9IHJlcXVpcmUoJy4vcGVuZGluZy1pbnRlcmNlcHRvcnMtZm9ybWF0dGVyJylcblxuY2xhc3MgRmFrZVdlYWtSZWYge1xuICBjb25zdHJ1Y3RvciAodmFsdWUpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWVcbiAgfVxuXG4gIGRlcmVmICgpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZVxuICB9XG59XG5cbmNsYXNzIE1vY2tBZ2VudCBleHRlbmRzIERpc3BhdGNoZXIge1xuICBjb25zdHJ1Y3RvciAob3B0cykge1xuICAgIHN1cGVyKG9wdHMpXG5cbiAgICB0aGlzW2tOZXRDb25uZWN0XSA9IHRydWVcbiAgICB0aGlzW2tJc01vY2tBY3RpdmVdID0gdHJ1ZVxuXG4gICAgLy8gSW5zdGFudGlhdGUgQWdlbnQgYW5kIGVuY2Fwc3VsYXRlXG4gICAgaWYgKChvcHRzICYmIG9wdHMuYWdlbnQgJiYgdHlwZW9mIG9wdHMuYWdlbnQuZGlzcGF0Y2ggIT09ICdmdW5jdGlvbicpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0FyZ3VtZW50IG9wdHMuYWdlbnQgbXVzdCBpbXBsZW1lbnQgQWdlbnQnKVxuICAgIH1cbiAgICBjb25zdCBhZ2VudCA9IG9wdHMgJiYgb3B0cy5hZ2VudCA/IG9wdHMuYWdlbnQgOiBuZXcgQWdlbnQob3B0cylcbiAgICB0aGlzW2tBZ2VudF0gPSBhZ2VudFxuXG4gICAgdGhpc1trQ2xpZW50c10gPSBhZ2VudFtrQ2xpZW50c11cbiAgICB0aGlzW2tPcHRpb25zXSA9IGJ1aWxkTW9ja09wdGlvbnMob3B0cylcbiAgfVxuXG4gIGdldCAob3JpZ2luKSB7XG4gICAgbGV0IGRpc3BhdGNoZXIgPSB0aGlzW2tNb2NrQWdlbnRHZXRdKG9yaWdpbilcblxuICAgIGlmICghZGlzcGF0Y2hlcikge1xuICAgICAgZGlzcGF0Y2hlciA9IHRoaXNba0ZhY3RvcnldKG9yaWdpbilcbiAgICAgIHRoaXNba01vY2tBZ2VudFNldF0ob3JpZ2luLCBkaXNwYXRjaGVyKVxuICAgIH1cbiAgICByZXR1cm4gZGlzcGF0Y2hlclxuICB9XG5cbiAgZGlzcGF0Y2ggKG9wdHMsIGhhbmRsZXIpIHtcbiAgICAvLyBDYWxsIE1vY2tBZ2VudC5nZXQgdG8gcGVyZm9ybSBhZGRpdGlvbmFsIHNldHVwIGJlZm9yZSBkaXNwYXRjaGluZyBhcyBub3JtYWxcbiAgICB0aGlzLmdldChvcHRzLm9yaWdpbilcbiAgICByZXR1cm4gdGhpc1trQWdlbnRdLmRpc3BhdGNoKG9wdHMsIGhhbmRsZXIpXG4gIH1cblxuICBhc3luYyBjbG9zZSAoKSB7XG4gICAgYXdhaXQgdGhpc1trQWdlbnRdLmNsb3NlKClcbiAgICB0aGlzW2tDbGllbnRzXS5jbGVhcigpXG4gIH1cblxuICBkZWFjdGl2YXRlICgpIHtcbiAgICB0aGlzW2tJc01vY2tBY3RpdmVdID0gZmFsc2VcbiAgfVxuXG4gIGFjdGl2YXRlICgpIHtcbiAgICB0aGlzW2tJc01vY2tBY3RpdmVdID0gdHJ1ZVxuICB9XG5cbiAgZW5hYmxlTmV0Q29ubmVjdCAobWF0Y2hlcikge1xuICAgIGlmICh0eXBlb2YgbWF0Y2hlciA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG1hdGNoZXIgPT09ICdmdW5jdGlvbicgfHwgbWF0Y2hlciBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpc1trTmV0Q29ubmVjdF0pKSB7XG4gICAgICAgIHRoaXNba05ldENvbm5lY3RdLnB1c2gobWF0Y2hlcilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXNba05ldENvbm5lY3RdID0gW21hdGNoZXJdXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbWF0Y2hlciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRoaXNba05ldENvbm5lY3RdID0gdHJ1ZVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ1Vuc3VwcG9ydGVkIG1hdGNoZXIuIE11c3QgYmUgb25lIG9mIFN0cmluZ3xGdW5jdGlvbnxSZWdFeHAuJylcbiAgICB9XG4gIH1cblxuICBkaXNhYmxlTmV0Q29ubmVjdCAoKSB7XG4gICAgdGhpc1trTmV0Q29ubmVjdF0gPSBmYWxzZVxuICB9XG5cbiAgLy8gVGhpcyBpcyByZXF1aXJlZCB0byBieXBhc3MgaXNzdWVzIGNhdXNlZCBieSB1c2luZyBnbG9iYWwgc3ltYm9scyAtIHNlZTpcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzE0NDdcbiAgZ2V0IGlzTW9ja0FjdGl2ZSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0lzTW9ja0FjdGl2ZV1cbiAgfVxuXG4gIFtrTW9ja0FnZW50U2V0XSAob3JpZ2luLCBkaXNwYXRjaGVyKSB7XG4gICAgdGhpc1trQ2xpZW50c10uc2V0KG9yaWdpbiwgbmV3IEZha2VXZWFrUmVmKGRpc3BhdGNoZXIpKVxuICB9XG5cbiAgW2tGYWN0b3J5XSAob3JpZ2luKSB7XG4gICAgY29uc3QgbW9ja09wdGlvbnMgPSBPYmplY3QuYXNzaWduKHsgYWdlbnQ6IHRoaXMgfSwgdGhpc1trT3B0aW9uc10pXG4gICAgcmV0dXJuIHRoaXNba09wdGlvbnNdICYmIHRoaXNba09wdGlvbnNdLmNvbm5lY3Rpb25zID09PSAxXG4gICAgICA/IG5ldyBNb2NrQ2xpZW50KG9yaWdpbiwgbW9ja09wdGlvbnMpXG4gICAgICA6IG5ldyBNb2NrUG9vbChvcmlnaW4sIG1vY2tPcHRpb25zKVxuICB9XG5cbiAgW2tNb2NrQWdlbnRHZXRdIChvcmlnaW4pIHtcbiAgICAvLyBGaXJzdCBjaGVjayBpZiB3ZSBjYW4gaW1tZWRpYXRlbHkgZmluZCBpdFxuICAgIGNvbnN0IHJlZiA9IHRoaXNba0NsaWVudHNdLmdldChvcmlnaW4pXG4gICAgaWYgKHJlZikge1xuICAgICAgcmV0dXJuIHJlZi5kZXJlZigpXG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIG9yaWdpbiBpcyBub3QgYSBzdHJpbmcgY3JlYXRlIGEgZHVtbXkgcGFyZW50IHBvb2wgYW5kIHJldHVybiB0byB1c2VyXG4gICAgaWYgKHR5cGVvZiBvcmlnaW4gIT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBkaXNwYXRjaGVyID0gdGhpc1trRmFjdG9yeV0oJ2h0dHA6Ly9sb2NhbGhvc3Q6OTk5OScpXG4gICAgICB0aGlzW2tNb2NrQWdlbnRTZXRdKG9yaWdpbiwgZGlzcGF0Y2hlcilcbiAgICAgIHJldHVybiBkaXNwYXRjaGVyXG4gICAgfVxuXG4gICAgLy8gSWYgd2UgbWF0Y2gsIGNyZWF0ZSBhIHBvb2wgYW5kIGFzc2lnbiB0aGUgc2FtZSBkaXNwYXRjaGVzXG4gICAgZm9yIChjb25zdCBba2V5TWF0Y2hlciwgbm9uRXhwbGljaXRSZWZdIG9mIEFycmF5LmZyb20odGhpc1trQ2xpZW50c10pKSB7XG4gICAgICBjb25zdCBub25FeHBsaWNpdERpc3BhdGNoZXIgPSBub25FeHBsaWNpdFJlZi5kZXJlZigpXG4gICAgICBpZiAobm9uRXhwbGljaXREaXNwYXRjaGVyICYmIHR5cGVvZiBrZXlNYXRjaGVyICE9PSAnc3RyaW5nJyAmJiBtYXRjaFZhbHVlKGtleU1hdGNoZXIsIG9yaWdpbikpIHtcbiAgICAgICAgY29uc3QgZGlzcGF0Y2hlciA9IHRoaXNba0ZhY3RvcnldKG9yaWdpbilcbiAgICAgICAgdGhpc1trTW9ja0FnZW50U2V0XShvcmlnaW4sIGRpc3BhdGNoZXIpXG4gICAgICAgIGRpc3BhdGNoZXJba0Rpc3BhdGNoZXNdID0gbm9uRXhwbGljaXREaXNwYXRjaGVyW2tEaXNwYXRjaGVzXVxuICAgICAgICByZXR1cm4gZGlzcGF0Y2hlclxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIFtrR2V0TmV0Q29ubmVjdF0gKCkge1xuICAgIHJldHVybiB0aGlzW2tOZXRDb25uZWN0XVxuICB9XG5cbiAgcGVuZGluZ0ludGVyY2VwdG9ycyAoKSB7XG4gICAgY29uc3QgbW9ja0FnZW50Q2xpZW50cyA9IHRoaXNba0NsaWVudHNdXG5cbiAgICByZXR1cm4gQXJyYXkuZnJvbShtb2NrQWdlbnRDbGllbnRzLmVudHJpZXMoKSlcbiAgICAgIC5mbGF0TWFwKChbb3JpZ2luLCBzY29wZV0pID0+IHNjb3BlLmRlcmVmKClba0Rpc3BhdGNoZXNdLm1hcChkaXNwYXRjaCA9PiAoeyAuLi5kaXNwYXRjaCwgb3JpZ2luIH0pKSlcbiAgICAgIC5maWx0ZXIoKHsgcGVuZGluZyB9KSA9PiBwZW5kaW5nKVxuICB9XG5cbiAgYXNzZXJ0Tm9QZW5kaW5nSW50ZXJjZXB0b3JzICh7IHBlbmRpbmdJbnRlcmNlcHRvcnNGb3JtYXR0ZXIgPSBuZXcgUGVuZGluZ0ludGVyY2VwdG9yc0Zvcm1hdHRlcigpIH0gPSB7fSkge1xuICAgIGNvbnN0IHBlbmRpbmcgPSB0aGlzLnBlbmRpbmdJbnRlcmNlcHRvcnMoKVxuXG4gICAgaWYgKHBlbmRpbmcubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBwbHVyYWxpemVyID0gbmV3IFBsdXJhbGl6ZXIoJ2ludGVyY2VwdG9yJywgJ2ludGVyY2VwdG9ycycpLnBsdXJhbGl6ZShwZW5kaW5nLmxlbmd0aClcblxuICAgIHRocm93IG5ldyBVbmRpY2lFcnJvcihgXG4ke3BsdXJhbGl6ZXIuY291bnR9ICR7cGx1cmFsaXplci5ub3VufSAke3BsdXJhbGl6ZXIuaXN9IHBlbmRpbmc6XG5cbiR7cGVuZGluZ0ludGVyY2VwdG9yc0Zvcm1hdHRlci5mb3JtYXQocGVuZGluZyl9XG5gLnRyaW0oKSlcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IE1vY2tBZ2VudFxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBrUHJveHksIGtDbG9zZSwga0Rlc3Ryb3ksIGtJbnRlcmNlcHRvcnMgfSA9IHJlcXVpcmUoJy4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsgVVJMIH0gPSByZXF1aXJlKCd1cmwnKVxuY29uc3QgQWdlbnQgPSByZXF1aXJlKCcuL2FnZW50JylcbmNvbnN0IFBvb2wgPSByZXF1aXJlKCcuL3Bvb2wnKVxuY29uc3QgRGlzcGF0Y2hlckJhc2UgPSByZXF1aXJlKCcuL2Rpc3BhdGNoZXItYmFzZScpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yLCBSZXF1ZXN0QWJvcnRlZEVycm9yIH0gPSByZXF1aXJlKCcuL2NvcmUvZXJyb3JzJylcbmNvbnN0IGJ1aWxkQ29ubmVjdG9yID0gcmVxdWlyZSgnLi9jb3JlL2Nvbm5lY3QnKVxuXG5jb25zdCBrQWdlbnQgPSBTeW1ib2woJ3Byb3h5IGFnZW50JylcbmNvbnN0IGtDbGllbnQgPSBTeW1ib2woJ3Byb3h5IGNsaWVudCcpXG5jb25zdCBrUHJveHlIZWFkZXJzID0gU3ltYm9sKCdwcm94eSBoZWFkZXJzJylcbmNvbnN0IGtSZXF1ZXN0VGxzID0gU3ltYm9sKCdyZXF1ZXN0IHRscyBzZXR0aW5ncycpXG5jb25zdCBrUHJveHlUbHMgPSBTeW1ib2woJ3Byb3h5IHRscyBzZXR0aW5ncycpXG5jb25zdCBrQ29ubmVjdEVuZHBvaW50ID0gU3ltYm9sKCdjb25uZWN0IGVuZHBvaW50IGZ1bmN0aW9uJylcblxuZnVuY3Rpb24gZGVmYXVsdFByb3RvY29sUG9ydCAocHJvdG9jb2wpIHtcbiAgcmV0dXJuIHByb3RvY29sID09PSAnaHR0cHM6JyA/IDQ0MyA6IDgwXG59XG5cbmZ1bmN0aW9uIGJ1aWxkUHJveHlPcHRpb25zIChvcHRzKSB7XG4gIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ3N0cmluZycpIHtcbiAgICBvcHRzID0geyB1cmk6IG9wdHMgfVxuICB9XG5cbiAgaWYgKCFvcHRzIHx8ICFvcHRzLnVyaSkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignUHJveHkgb3B0cy51cmkgaXMgbWFuZGF0b3J5JylcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdXJpOiBvcHRzLnVyaSxcbiAgICBwcm90b2NvbDogb3B0cy5wcm90b2NvbCB8fCAnaHR0cHMnXG4gIH1cbn1cblxuZnVuY3Rpb24gZGVmYXVsdEZhY3RvcnkgKG9yaWdpbiwgb3B0cykge1xuICByZXR1cm4gbmV3IFBvb2wob3JpZ2luLCBvcHRzKVxufVxuXG5jbGFzcyBQcm94eUFnZW50IGV4dGVuZHMgRGlzcGF0Y2hlckJhc2Uge1xuICBjb25zdHJ1Y3RvciAob3B0cykge1xuICAgIHN1cGVyKG9wdHMpXG4gICAgdGhpc1trUHJveHldID0gYnVpbGRQcm94eU9wdGlvbnMob3B0cylcbiAgICB0aGlzW2tBZ2VudF0gPSBuZXcgQWdlbnQob3B0cylcbiAgICB0aGlzW2tJbnRlcmNlcHRvcnNdID0gb3B0cy5pbnRlcmNlcHRvcnMgJiYgb3B0cy5pbnRlcmNlcHRvcnMuUHJveHlBZ2VudCAmJiBBcnJheS5pc0FycmF5KG9wdHMuaW50ZXJjZXB0b3JzLlByb3h5QWdlbnQpXG4gICAgICA/IG9wdHMuaW50ZXJjZXB0b3JzLlByb3h5QWdlbnRcbiAgICAgIDogW11cblxuICAgIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG9wdHMgPSB7IHVyaTogb3B0cyB9XG4gICAgfVxuXG4gICAgaWYgKCFvcHRzIHx8ICFvcHRzLnVyaSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdQcm94eSBvcHRzLnVyaSBpcyBtYW5kYXRvcnknKVxuICAgIH1cblxuICAgIGNvbnN0IHsgY2xpZW50RmFjdG9yeSA9IGRlZmF1bHRGYWN0b3J5IH0gPSBvcHRzXG5cbiAgICBpZiAodHlwZW9mIGNsaWVudEZhY3RvcnkgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignUHJveHkgb3B0cy5jbGllbnRGYWN0b3J5IG11c3QgYmUgYSBmdW5jdGlvbi4nKVxuICAgIH1cblxuICAgIHRoaXNba1JlcXVlc3RUbHNdID0gb3B0cy5yZXF1ZXN0VGxzXG4gICAgdGhpc1trUHJveHlUbHNdID0gb3B0cy5wcm94eVRsc1xuICAgIHRoaXNba1Byb3h5SGVhZGVyc10gPSBvcHRzLmhlYWRlcnMgfHwge31cblxuICAgIGNvbnN0IHJlc29sdmVkVXJsID0gbmV3IFVSTChvcHRzLnVyaSlcbiAgICBjb25zdCB7IG9yaWdpbiwgcG9ydCwgaG9zdCwgdXNlcm5hbWUsIHBhc3N3b3JkIH0gPSByZXNvbHZlZFVybFxuXG4gICAgaWYgKG9wdHMuYXV0aCAmJiBvcHRzLnRva2VuKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ29wdHMuYXV0aCBjYW5ub3QgYmUgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIG9wdHMudG9rZW4nKVxuICAgIH0gZWxzZSBpZiAob3B0cy5hdXRoKSB7XG4gICAgICAvKiBAZGVwcmVjYXRlZCBpbiBmYXZvdXIgb2Ygb3B0cy50b2tlbiAqL1xuICAgICAgdGhpc1trUHJveHlIZWFkZXJzXVsncHJveHktYXV0aG9yaXphdGlvbiddID0gYEJhc2ljICR7b3B0cy5hdXRofWBcbiAgICB9IGVsc2UgaWYgKG9wdHMudG9rZW4pIHtcbiAgICAgIHRoaXNba1Byb3h5SGVhZGVyc11bJ3Byb3h5LWF1dGhvcml6YXRpb24nXSA9IG9wdHMudG9rZW5cbiAgICB9IGVsc2UgaWYgKHVzZXJuYW1lICYmIHBhc3N3b3JkKSB7XG4gICAgICB0aGlzW2tQcm94eUhlYWRlcnNdWydwcm94eS1hdXRob3JpemF0aW9uJ10gPSBgQmFzaWMgJHtCdWZmZXIuZnJvbShgJHtkZWNvZGVVUklDb21wb25lbnQodXNlcm5hbWUpfToke2RlY29kZVVSSUNvbXBvbmVudChwYXNzd29yZCl9YCkudG9TdHJpbmcoJ2Jhc2U2NCcpfWBcbiAgICB9XG5cbiAgICBjb25zdCBjb25uZWN0ID0gYnVpbGRDb25uZWN0b3IoeyAuLi5vcHRzLnByb3h5VGxzIH0pXG4gICAgdGhpc1trQ29ubmVjdEVuZHBvaW50XSA9IGJ1aWxkQ29ubmVjdG9yKHsgLi4ub3B0cy5yZXF1ZXN0VGxzIH0pXG4gICAgdGhpc1trQ2xpZW50XSA9IGNsaWVudEZhY3RvcnkocmVzb2x2ZWRVcmwsIHsgY29ubmVjdCB9KVxuICAgIHRoaXNba0FnZW50XSA9IG5ldyBBZ2VudCh7XG4gICAgICAuLi5vcHRzLFxuICAgICAgY29ubmVjdDogYXN5bmMgKG9wdHMsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGxldCByZXF1ZXN0ZWRIb3N0ID0gb3B0cy5ob3N0XG4gICAgICAgIGlmICghb3B0cy5wb3J0KSB7XG4gICAgICAgICAgcmVxdWVzdGVkSG9zdCArPSBgOiR7ZGVmYXVsdFByb3RvY29sUG9ydChvcHRzLnByb3RvY29sKX1gXG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB7IHNvY2tldCwgc3RhdHVzQ29kZSB9ID0gYXdhaXQgdGhpc1trQ2xpZW50XS5jb25uZWN0KHtcbiAgICAgICAgICAgIG9yaWdpbixcbiAgICAgICAgICAgIHBvcnQsXG4gICAgICAgICAgICBwYXRoOiByZXF1ZXN0ZWRIb3N0LFxuICAgICAgICAgICAgc2lnbmFsOiBvcHRzLnNpZ25hbCxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgLi4udGhpc1trUHJveHlIZWFkZXJzXSxcbiAgICAgICAgICAgICAgaG9zdFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICAgaWYgKHN0YXR1c0NvZGUgIT09IDIwMCkge1xuICAgICAgICAgICAgc29ja2V0Lm9uKCdlcnJvcicsICgpID0+IHt9KS5kZXN0cm95KClcbiAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKGBQcm94eSByZXNwb25zZSAoJHtzdGF0dXNDb2RlfSkgIT09IDIwMCB3aGVuIEhUVFAgVHVubmVsaW5nYCkpXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChvcHRzLnByb3RvY29sICE9PSAnaHR0cHM6Jykge1xuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgc29ja2V0KVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICAgIGxldCBzZXJ2ZXJuYW1lXG4gICAgICAgICAgaWYgKHRoaXNba1JlcXVlc3RUbHNdKSB7XG4gICAgICAgICAgICBzZXJ2ZXJuYW1lID0gdGhpc1trUmVxdWVzdFRsc10uc2VydmVybmFtZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXJ2ZXJuYW1lID0gb3B0cy5zZXJ2ZXJuYW1lXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXNba0Nvbm5lY3RFbmRwb2ludF0oeyAuLi5vcHRzLCBzZXJ2ZXJuYW1lLCBodHRwU29ja2V0OiBzb2NrZXQgfSwgY2FsbGJhY2spXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNhbGxiYWNrKGVycilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBkaXNwYXRjaCAob3B0cywgaGFuZGxlcikge1xuICAgIGNvbnN0IHsgaG9zdCB9ID0gbmV3IFVSTChvcHRzLm9yaWdpbilcbiAgICBjb25zdCBoZWFkZXJzID0gYnVpbGRIZWFkZXJzKG9wdHMuaGVhZGVycylcbiAgICB0aHJvd0lmUHJveHlBdXRoSXNTZW50KGhlYWRlcnMpXG4gICAgcmV0dXJuIHRoaXNba0FnZW50XS5kaXNwYXRjaChcbiAgICAgIHtcbiAgICAgICAgLi4ub3B0cyxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIC4uLmhlYWRlcnMsXG4gICAgICAgICAgaG9zdFxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgaGFuZGxlclxuICAgIClcbiAgfVxuXG4gIGFzeW5jIFtrQ2xvc2VdICgpIHtcbiAgICBhd2FpdCB0aGlzW2tBZ2VudF0uY2xvc2UoKVxuICAgIGF3YWl0IHRoaXNba0NsaWVudF0uY2xvc2UoKVxuICB9XG5cbiAgYXN5bmMgW2tEZXN0cm95XSAoKSB7XG4gICAgYXdhaXQgdGhpc1trQWdlbnRdLmRlc3Ryb3koKVxuICAgIGF3YWl0IHRoaXNba0NsaWVudF0uZGVzdHJveSgpXG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ1tdIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nPn0gaGVhZGVyc1xuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHN0cmluZz59XG4gKi9cbmZ1bmN0aW9uIGJ1aWxkSGVhZGVycyAoaGVhZGVycykge1xuICAvLyBXaGVuIHVzaW5nIHVuZGljaS5mZXRjaCwgdGhlIGhlYWRlcnMgbGlzdCBpcyBzdG9yZWRcbiAgLy8gYXMgYW4gYXJyYXkuXG4gIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSAqL1xuICAgIGNvbnN0IGhlYWRlcnNQYWlyID0ge31cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGVhZGVycy5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgaGVhZGVyc1BhaXJbaGVhZGVyc1tpXV0gPSBoZWFkZXJzW2kgKyAxXVxuICAgIH1cblxuICAgIHJldHVybiBoZWFkZXJzUGFpclxuICB9XG5cbiAgcmV0dXJuIGhlYWRlcnNcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIHN0cmluZz59IGhlYWRlcnNcbiAqXG4gKiBQcmV2aW91cyB2ZXJzaW9ucyBvZiBQcm94eUFnZW50IHN1Z2dlc3RzIHRoZSBQcm94eS1BdXRob3JpemF0aW9uIGluIHJlcXVlc3QgaGVhZGVyc1xuICogTmV2ZXJ0aGVsZXNzLCBpdCB3YXMgY2hhbmdlZCBhbmQgdG8gYXZvaWQgYSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5IGJ5IGVuZCB1c2Vyc1xuICogdGhpcyBjaGVjayB3YXMgY3JlYXRlZC5cbiAqIEl0IHNob3VsZCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24gZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnNcbiAqL1xuZnVuY3Rpb24gdGhyb3dJZlByb3h5QXV0aElzU2VudCAoaGVhZGVycykge1xuICBjb25zdCBleGlzdFByb3h5QXV0aCA9IGhlYWRlcnMgJiYgT2JqZWN0LmtleXMoaGVhZGVycylcbiAgICAuZmluZCgoa2V5KSA9PiBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3Byb3h5LWF1dGhvcml6YXRpb24nKVxuICBpZiAoZXhpc3RQcm94eUF1dGgpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ1Byb3h5LUF1dGhvcml6YXRpb24gc2hvdWxkIGJlIHNlbnQgaW4gUHJveHlBZ2VudCBjb25zdHJ1Y3RvcicpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBQcm94eUFnZW50XG4iLAogICAgImNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5cbmNvbnN0IHsga1JldHJ5SGFuZGxlckRlZmF1bHRSZXRyeSB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsgUmVxdWVzdFJldHJ5RXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHsgaXNEaXN0dXJiZWQsIHBhcnNlSGVhZGVycywgcGFyc2VSYW5nZUhlYWRlciB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcblxuZnVuY3Rpb24gY2FsY3VsYXRlUmV0cnlBZnRlckhlYWRlciAocmV0cnlBZnRlcikge1xuICBjb25zdCBjdXJyZW50ID0gRGF0ZS5ub3coKVxuICBjb25zdCBkaWZmID0gbmV3IERhdGUocmV0cnlBZnRlcikuZ2V0VGltZSgpIC0gY3VycmVudFxuXG4gIHJldHVybiBkaWZmXG59XG5cbmNsYXNzIFJldHJ5SGFuZGxlciB7XG4gIGNvbnN0cnVjdG9yIChvcHRzLCBoYW5kbGVycykge1xuICAgIGNvbnN0IHsgcmV0cnlPcHRpb25zLCAuLi5kaXNwYXRjaE9wdHMgfSA9IG9wdHNcbiAgICBjb25zdCB7XG4gICAgICAvLyBSZXRyeSBzY29wZWRcbiAgICAgIHJldHJ5OiByZXRyeUZuLFxuICAgICAgbWF4UmV0cmllcyxcbiAgICAgIG1heFRpbWVvdXQsXG4gICAgICBtaW5UaW1lb3V0LFxuICAgICAgdGltZW91dEZhY3RvcixcbiAgICAgIC8vIFJlc3BvbnNlIHNjb3BlZFxuICAgICAgbWV0aG9kcyxcbiAgICAgIGVycm9yQ29kZXMsXG4gICAgICByZXRyeUFmdGVyLFxuICAgICAgc3RhdHVzQ29kZXNcbiAgICB9ID0gcmV0cnlPcHRpb25zID8/IHt9XG5cbiAgICB0aGlzLmRpc3BhdGNoID0gaGFuZGxlcnMuZGlzcGF0Y2hcbiAgICB0aGlzLmhhbmRsZXIgPSBoYW5kbGVycy5oYW5kbGVyXG4gICAgdGhpcy5vcHRzID0gZGlzcGF0Y2hPcHRzXG4gICAgdGhpcy5hYm9ydCA9IG51bGxcbiAgICB0aGlzLmFib3J0ZWQgPSBmYWxzZVxuICAgIHRoaXMucmV0cnlPcHRzID0ge1xuICAgICAgcmV0cnk6IHJldHJ5Rm4gPz8gUmV0cnlIYW5kbGVyW2tSZXRyeUhhbmRsZXJEZWZhdWx0UmV0cnldLFxuICAgICAgcmV0cnlBZnRlcjogcmV0cnlBZnRlciA/PyB0cnVlLFxuICAgICAgbWF4VGltZW91dDogbWF4VGltZW91dCA/PyAzMCAqIDEwMDAsIC8vIDMwcyxcbiAgICAgIHRpbWVvdXQ6IG1pblRpbWVvdXQgPz8gNTAwLCAvLyAuNXNcbiAgICAgIHRpbWVvdXRGYWN0b3I6IHRpbWVvdXRGYWN0b3IgPz8gMixcbiAgICAgIG1heFJldHJpZXM6IG1heFJldHJpZXMgPz8gNSxcbiAgICAgIC8vIFdoYXQgZXJyb3JzIHdlIHNob3VsZCByZXRyeVxuICAgICAgbWV0aG9kczogbWV0aG9kcyA/PyBbJ0dFVCcsICdIRUFEJywgJ09QVElPTlMnLCAnUFVUJywgJ0RFTEVURScsICdUUkFDRSddLFxuICAgICAgLy8gSW5kaWNhdGVzIHdoaWNoIGVycm9ycyB0byByZXRyeVxuICAgICAgc3RhdHVzQ29kZXM6IHN0YXR1c0NvZGVzID8/IFs1MDAsIDUwMiwgNTAzLCA1MDQsIDQyOV0sXG4gICAgICAvLyBMaXN0IG9mIGVycm9ycyB0byByZXRyeVxuICAgICAgZXJyb3JDb2RlczogZXJyb3JDb2RlcyA/PyBbXG4gICAgICAgICdFQ09OTlJFU0VUJyxcbiAgICAgICAgJ0VDT05OUkVGVVNFRCcsXG4gICAgICAgICdFTk9URk9VTkQnLFxuICAgICAgICAnRU5FVERPV04nLFxuICAgICAgICAnRU5FVFVOUkVBQ0gnLFxuICAgICAgICAnRUhPU1RET1dOJyxcbiAgICAgICAgJ0VIT1NUVU5SRUFDSCcsXG4gICAgICAgICdFUElQRSdcbiAgICAgIF1cbiAgICB9XG5cbiAgICB0aGlzLnJldHJ5Q291bnQgPSAwXG4gICAgdGhpcy5zdGFydCA9IDBcbiAgICB0aGlzLmVuZCA9IG51bGxcbiAgICB0aGlzLmV0YWcgPSBudWxsXG4gICAgdGhpcy5yZXN1bWUgPSBudWxsXG5cbiAgICAvLyBIYW5kbGUgcG9zc2libGUgb25Db25uZWN0IGR1cGxpY2F0aW9uXG4gICAgdGhpcy5oYW5kbGVyLm9uQ29ubmVjdChyZWFzb24gPT4ge1xuICAgICAgdGhpcy5hYm9ydGVkID0gdHJ1ZVxuICAgICAgaWYgKHRoaXMuYWJvcnQpIHtcbiAgICAgICAgdGhpcy5hYm9ydChyZWFzb24pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlYXNvbiA9IHJlYXNvblxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBvblJlcXVlc3RTZW50ICgpIHtcbiAgICBpZiAodGhpcy5oYW5kbGVyLm9uUmVxdWVzdFNlbnQpIHtcbiAgICAgIHRoaXMuaGFuZGxlci5vblJlcXVlc3RTZW50KClcbiAgICB9XG4gIH1cblxuICBvblVwZ3JhZGUgKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHNvY2tldCkge1xuICAgIGlmICh0aGlzLmhhbmRsZXIub25VcGdyYWRlKSB7XG4gICAgICB0aGlzLmhhbmRsZXIub25VcGdyYWRlKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHNvY2tldClcbiAgICB9XG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0KSB7XG4gICAgaWYgKHRoaXMuYWJvcnRlZCkge1xuICAgICAgYWJvcnQodGhpcy5yZWFzb24pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIH1cbiAgfVxuXG4gIG9uQm9keVNlbnQgKGNodW5rKSB7XG4gICAgaWYgKHRoaXMuaGFuZGxlci5vbkJvZHlTZW50KSByZXR1cm4gdGhpcy5oYW5kbGVyLm9uQm9keVNlbnQoY2h1bmspXG4gIH1cblxuICBzdGF0aWMgW2tSZXRyeUhhbmRsZXJEZWZhdWx0UmV0cnldIChlcnIsIHsgc3RhdGUsIG9wdHMgfSwgY2IpIHtcbiAgICBjb25zdCB7IHN0YXR1c0NvZGUsIGNvZGUsIGhlYWRlcnMgfSA9IGVyclxuICAgIGNvbnN0IHsgbWV0aG9kLCByZXRyeU9wdGlvbnMgfSA9IG9wdHNcbiAgICBjb25zdCB7XG4gICAgICBtYXhSZXRyaWVzLFxuICAgICAgdGltZW91dCxcbiAgICAgIG1heFRpbWVvdXQsXG4gICAgICB0aW1lb3V0RmFjdG9yLFxuICAgICAgc3RhdHVzQ29kZXMsXG4gICAgICBlcnJvckNvZGVzLFxuICAgICAgbWV0aG9kc1xuICAgIH0gPSByZXRyeU9wdGlvbnNcbiAgICBsZXQgeyBjb3VudGVyLCBjdXJyZW50VGltZW91dCB9ID0gc3RhdGVcblxuICAgIGN1cnJlbnRUaW1lb3V0ID1cbiAgICAgIGN1cnJlbnRUaW1lb3V0ICE9IG51bGwgJiYgY3VycmVudFRpbWVvdXQgPiAwID8gY3VycmVudFRpbWVvdXQgOiB0aW1lb3V0XG5cbiAgICAvLyBBbnkgY29kZSB0aGF0IGlzIG5vdCBhIFVuZGljaSdzIG9yaWdpbmF0ZWQgYW5kIGFsbG93ZWQgdG8gcmV0cnlcbiAgICBpZiAoXG4gICAgICBjb2RlICYmXG4gICAgICBjb2RlICE9PSAnVU5EX0VSUl9SRVFfUkVUUlknICYmXG4gICAgICBjb2RlICE9PSAnVU5EX0VSUl9TT0NLRVQnICYmXG4gICAgICAhZXJyb3JDb2Rlcy5pbmNsdWRlcyhjb2RlKVxuICAgICkge1xuICAgICAgY2IoZXJyKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gSWYgYSBzZXQgb2YgbWV0aG9kIGFyZSBwcm92aWRlZCBhbmQgdGhlIGN1cnJlbnQgbWV0aG9kIGlzIG5vdCBpbiB0aGUgbGlzdFxuICAgIGlmIChBcnJheS5pc0FycmF5KG1ldGhvZHMpICYmICFtZXRob2RzLmluY2x1ZGVzKG1ldGhvZCkpIHtcbiAgICAgIGNiKGVycilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIElmIGEgc2V0IG9mIHN0YXR1cyBjb2RlIGFyZSBwcm92aWRlZCBhbmQgdGhlIGN1cnJlbnQgc3RhdHVzIGNvZGUgaXMgbm90IGluIHRoZSBsaXN0XG4gICAgaWYgKFxuICAgICAgc3RhdHVzQ29kZSAhPSBudWxsICYmXG4gICAgICBBcnJheS5pc0FycmF5KHN0YXR1c0NvZGVzKSAmJlxuICAgICAgIXN0YXR1c0NvZGVzLmluY2x1ZGVzKHN0YXR1c0NvZGUpXG4gICAgKSB7XG4gICAgICBjYihlcnIpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBJZiB3ZSByZWFjaGVkIHRoZSBtYXggbnVtYmVyIG9mIHJldHJpZXNcbiAgICBpZiAoY291bnRlciA+IG1heFJldHJpZXMpIHtcbiAgICAgIGNiKGVycilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGxldCByZXRyeUFmdGVySGVhZGVyID0gaGVhZGVycyAhPSBudWxsICYmIGhlYWRlcnNbJ3JldHJ5LWFmdGVyJ11cbiAgICBpZiAocmV0cnlBZnRlckhlYWRlcikge1xuICAgICAgcmV0cnlBZnRlckhlYWRlciA9IE51bWJlcihyZXRyeUFmdGVySGVhZGVyKVxuICAgICAgcmV0cnlBZnRlckhlYWRlciA9IGlzTmFOKHJldHJ5QWZ0ZXJIZWFkZXIpXG4gICAgICAgID8gY2FsY3VsYXRlUmV0cnlBZnRlckhlYWRlcihyZXRyeUFmdGVySGVhZGVyKVxuICAgICAgICA6IHJldHJ5QWZ0ZXJIZWFkZXIgKiAxZTMgLy8gUmV0cnktQWZ0ZXIgaXMgaW4gc2Vjb25kc1xuICAgIH1cblxuICAgIGNvbnN0IHJldHJ5VGltZW91dCA9XG4gICAgICByZXRyeUFmdGVySGVhZGVyID4gMFxuICAgICAgICA/IE1hdGgubWluKHJldHJ5QWZ0ZXJIZWFkZXIsIG1heFRpbWVvdXQpXG4gICAgICAgIDogTWF0aC5taW4oY3VycmVudFRpbWVvdXQgKiB0aW1lb3V0RmFjdG9yICoqIGNvdW50ZXIsIG1heFRpbWVvdXQpXG5cbiAgICBzdGF0ZS5jdXJyZW50VGltZW91dCA9IHJldHJ5VGltZW91dFxuXG4gICAgc2V0VGltZW91dCgoKSA9PiBjYihudWxsKSwgcmV0cnlUaW1lb3V0KVxuICB9XG5cbiAgb25IZWFkZXJzIChzdGF0dXNDb2RlLCByYXdIZWFkZXJzLCByZXN1bWUsIHN0YXR1c01lc3NhZ2UpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gcGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpXG5cbiAgICB0aGlzLnJldHJ5Q291bnQgKz0gMVxuXG4gICAgaWYgKHN0YXR1c0NvZGUgPj0gMzAwKSB7XG4gICAgICB0aGlzLmFib3J0KFxuICAgICAgICBuZXcgUmVxdWVzdFJldHJ5RXJyb3IoJ1JlcXVlc3QgZmFpbGVkJywgc3RhdHVzQ29kZSwge1xuICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgY291bnQ6IHRoaXMucmV0cnlDb3VudFxuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgLy8gQ2hlY2twb2ludCBmb3IgcmVzdW1lIGZyb20gd2hlcmUgd2UgbGVmdCBpdFxuICAgIGlmICh0aGlzLnJlc3VtZSAhPSBudWxsKSB7XG4gICAgICB0aGlzLnJlc3VtZSA9IG51bGxcblxuICAgICAgaWYgKHN0YXR1c0NvZGUgIT09IDIwNikge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuXG4gICAgICBjb25zdCBjb250ZW50UmFuZ2UgPSBwYXJzZVJhbmdlSGVhZGVyKGhlYWRlcnNbJ2NvbnRlbnQtcmFuZ2UnXSlcbiAgICAgIC8vIElmIG5vIGNvbnRlbnQgcmFuZ2VcbiAgICAgIGlmICghY29udGVudFJhbmdlKSB7XG4gICAgICAgIHRoaXMuYWJvcnQoXG4gICAgICAgICAgbmV3IFJlcXVlc3RSZXRyeUVycm9yKCdDb250ZW50LVJhbmdlIG1pc21hdGNoJywgc3RhdHVzQ29kZSwge1xuICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICAgIGNvdW50OiB0aGlzLnJldHJ5Q291bnRcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuXG4gICAgICAvLyBMZXQncyBzdGFydCB3aXRoIGEgd2VhayBldGFnIGNoZWNrXG4gICAgICBpZiAodGhpcy5ldGFnICE9IG51bGwgJiYgdGhpcy5ldGFnICE9PSBoZWFkZXJzLmV0YWcpIHtcbiAgICAgICAgdGhpcy5hYm9ydChcbiAgICAgICAgICBuZXcgUmVxdWVzdFJldHJ5RXJyb3IoJ0VUYWcgbWlzbWF0Y2gnLCBzdGF0dXNDb2RlLCB7XG4gICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgICAgY291bnQ6IHRoaXMucmV0cnlDb3VudFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgc3RhcnQsIHNpemUsIGVuZCA9IHNpemUgfSA9IGNvbnRlbnRSYW5nZVxuXG4gICAgICBhc3NlcnQodGhpcy5zdGFydCA9PT0gc3RhcnQsICdjb250ZW50LXJhbmdlIG1pc21hdGNoJylcbiAgICAgIGFzc2VydCh0aGlzLmVuZCA9PSBudWxsIHx8IHRoaXMuZW5kID09PSBlbmQsICdjb250ZW50LXJhbmdlIG1pc21hdGNoJylcblxuICAgICAgdGhpcy5yZXN1bWUgPSByZXN1bWVcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZW5kID09IG51bGwpIHtcbiAgICAgIGlmIChzdGF0dXNDb2RlID09PSAyMDYpIHtcbiAgICAgICAgLy8gRmlyc3QgdGltZSB3ZSByZWNlaXZlIDIwNlxuICAgICAgICBjb25zdCByYW5nZSA9IHBhcnNlUmFuZ2VIZWFkZXIoaGVhZGVyc1snY29udGVudC1yYW5nZSddKVxuXG4gICAgICAgIGlmIChyYW5nZSA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkhlYWRlcnMoXG4gICAgICAgICAgICBzdGF0dXNDb2RlLFxuICAgICAgICAgICAgcmF3SGVhZGVycyxcbiAgICAgICAgICAgIHJlc3VtZSxcbiAgICAgICAgICAgIHN0YXR1c01lc3NhZ2VcbiAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IHN0YXJ0LCBzaXplLCBlbmQgPSBzaXplIH0gPSByYW5nZVxuXG4gICAgICAgIGFzc2VydChcbiAgICAgICAgICBzdGFydCAhPSBudWxsICYmIE51bWJlci5pc0Zpbml0ZShzdGFydCkgJiYgdGhpcy5zdGFydCAhPT0gc3RhcnQsXG4gICAgICAgICAgJ2NvbnRlbnQtcmFuZ2UgbWlzbWF0Y2gnXG4gICAgICAgIClcbiAgICAgICAgYXNzZXJ0KE51bWJlci5pc0Zpbml0ZShzdGFydCkpXG4gICAgICAgIGFzc2VydChcbiAgICAgICAgICBlbmQgIT0gbnVsbCAmJiBOdW1iZXIuaXNGaW5pdGUoZW5kKSAmJiB0aGlzLmVuZCAhPT0gZW5kLFxuICAgICAgICAgICdpbnZhbGlkIGNvbnRlbnQtbGVuZ3RoJ1xuICAgICAgICApXG5cbiAgICAgICAgdGhpcy5zdGFydCA9IHN0YXJ0XG4gICAgICAgIHRoaXMuZW5kID0gZW5kXG4gICAgICB9XG5cbiAgICAgIC8vIFdlIG1ha2Ugb3VyIGJlc3QgdG8gY2hlY2twb2ludCB0aGUgYm9keSBmb3IgZnVydGhlciByYW5nZSBoZWFkZXJzXG4gICAgICBpZiAodGhpcy5lbmQgPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBjb250ZW50TGVuZ3RoID0gaGVhZGVyc1snY29udGVudC1sZW5ndGgnXVxuICAgICAgICB0aGlzLmVuZCA9IGNvbnRlbnRMZW5ndGggIT0gbnVsbCA/IE51bWJlcihjb250ZW50TGVuZ3RoKSA6IG51bGxcbiAgICAgIH1cblxuICAgICAgYXNzZXJ0KE51bWJlci5pc0Zpbml0ZSh0aGlzLnN0YXJ0KSlcbiAgICAgIGFzc2VydChcbiAgICAgICAgdGhpcy5lbmQgPT0gbnVsbCB8fCBOdW1iZXIuaXNGaW5pdGUodGhpcy5lbmQpLFxuICAgICAgICAnaW52YWxpZCBjb250ZW50LWxlbmd0aCdcbiAgICAgIClcblxuICAgICAgdGhpcy5yZXN1bWUgPSByZXN1bWVcbiAgICAgIHRoaXMuZXRhZyA9IGhlYWRlcnMuZXRhZyAhPSBudWxsID8gaGVhZGVycy5ldGFnIDogbnVsbFxuXG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uSGVhZGVycyhcbiAgICAgICAgc3RhdHVzQ29kZSxcbiAgICAgICAgcmF3SGVhZGVycyxcbiAgICAgICAgcmVzdW1lLFxuICAgICAgICBzdGF0dXNNZXNzYWdlXG4gICAgICApXG4gICAgfVxuXG4gICAgY29uc3QgZXJyID0gbmV3IFJlcXVlc3RSZXRyeUVycm9yKCdSZXF1ZXN0IGZhaWxlZCcsIHN0YXR1c0NvZGUsIHtcbiAgICAgIGhlYWRlcnMsXG4gICAgICBjb3VudDogdGhpcy5yZXRyeUNvdW50XG4gICAgfSlcblxuICAgIHRoaXMuYWJvcnQoZXJyKVxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBvbkRhdGEgKGNodW5rKSB7XG4gICAgdGhpcy5zdGFydCArPSBjaHVuay5sZW5ndGhcblxuICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25EYXRhKGNodW5rKVxuICB9XG5cbiAgb25Db21wbGV0ZSAocmF3VHJhaWxlcnMpIHtcbiAgICB0aGlzLnJldHJ5Q291bnQgPSAwXG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkNvbXBsZXRlKHJhd1RyYWlsZXJzKVxuICB9XG5cbiAgb25FcnJvciAoZXJyKSB7XG4gICAgaWYgKHRoaXMuYWJvcnRlZCB8fCBpc0Rpc3R1cmJlZCh0aGlzLm9wdHMuYm9keSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25FcnJvcihlcnIpXG4gICAgfVxuXG4gICAgdGhpcy5yZXRyeU9wdHMucmV0cnkoXG4gICAgICBlcnIsXG4gICAgICB7XG4gICAgICAgIHN0YXRlOiB7IGNvdW50ZXI6IHRoaXMucmV0cnlDb3VudCsrLCBjdXJyZW50VGltZW91dDogdGhpcy5yZXRyeUFmdGVyIH0sXG4gICAgICAgIG9wdHM6IHsgcmV0cnlPcHRpb25zOiB0aGlzLnJldHJ5T3B0cywgLi4udGhpcy5vcHRzIH1cbiAgICAgIH0sXG4gICAgICBvblJldHJ5LmJpbmQodGhpcylcbiAgICApXG5cbiAgICBmdW5jdGlvbiBvblJldHJ5IChlcnIpIHtcbiAgICAgIGlmIChlcnIgIT0gbnVsbCB8fCB0aGlzLmFib3J0ZWQgfHwgaXNEaXN0dXJiZWQodGhpcy5vcHRzLmJvZHkpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25FcnJvcihlcnIpXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnN0YXJ0ICE9PSAwKSB7XG4gICAgICAgIHRoaXMub3B0cyA9IHtcbiAgICAgICAgICAuLi50aGlzLm9wdHMsXG4gICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgLi4udGhpcy5vcHRzLmhlYWRlcnMsXG4gICAgICAgICAgICByYW5nZTogYGJ5dGVzPSR7dGhpcy5zdGFydH0tJHt0aGlzLmVuZCA/PyAnJ31gXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2godGhpcy5vcHRzLCB0aGlzKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlci5vbkVycm9yKGVycilcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBSZXRyeUhhbmRsZXJcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbi8vIFdlIGluY2x1ZGUgYSB2ZXJzaW9uIG51bWJlciBmb3IgdGhlIERpc3BhdGNoZXIgQVBJLiBJbiBjYXNlIG9mIGJyZWFraW5nIGNoYW5nZXMsXG4vLyB0aGlzIHZlcnNpb24gbnVtYmVyIG11c3QgYmUgaW5jcmVhc2VkIHRvIGF2b2lkIGNvbmZsaWN0cy5cbmNvbnN0IGdsb2JhbERpc3BhdGNoZXIgPSBTeW1ib2wuZm9yKCd1bmRpY2kuZ2xvYmFsRGlzcGF0Y2hlci4xJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IHJlcXVpcmUoJy4vY29yZS9lcnJvcnMnKVxuY29uc3QgQWdlbnQgPSByZXF1aXJlKCcuL2FnZW50JylcblxuaWYgKGdldEdsb2JhbERpc3BhdGNoZXIoKSA9PT0gdW5kZWZpbmVkKSB7XG4gIHNldEdsb2JhbERpc3BhdGNoZXIobmV3IEFnZW50KCkpXG59XG5cbmZ1bmN0aW9uIHNldEdsb2JhbERpc3BhdGNoZXIgKGFnZW50KSB7XG4gIGlmICghYWdlbnQgfHwgdHlwZW9mIGFnZW50LmRpc3BhdGNoICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdBcmd1bWVudCBhZ2VudCBtdXN0IGltcGxlbWVudCBBZ2VudCcpXG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGdsb2JhbFRoaXMsIGdsb2JhbERpc3BhdGNoZXIsIHtcbiAgICB2YWx1ZTogYWdlbnQsXG4gICAgd3JpdGFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiBmYWxzZVxuICB9KVxufVxuXG5mdW5jdGlvbiBnZXRHbG9iYWxEaXNwYXRjaGVyICgpIHtcbiAgcmV0dXJuIGdsb2JhbFRoaXNbZ2xvYmFsRGlzcGF0Y2hlcl1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldEdsb2JhbERpc3BhdGNoZXIsXG4gIGdldEdsb2JhbERpc3BhdGNoZXJcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0gY2xhc3MgRGVjb3JhdG9ySGFuZGxlciB7XG4gIGNvbnN0cnVjdG9yIChoYW5kbGVyKSB7XG4gICAgdGhpcy5oYW5kbGVyID0gaGFuZGxlclxuICB9XG5cbiAgb25Db25uZWN0ICguLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkNvbm5lY3QoLi4uYXJncylcbiAgfVxuXG4gIG9uRXJyb3IgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uRXJyb3IoLi4uYXJncylcbiAgfVxuXG4gIG9uVXBncmFkZSAoLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25VcGdyYWRlKC4uLmFyZ3MpXG4gIH1cblxuICBvbkhlYWRlcnMgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uSGVhZGVycyguLi5hcmdzKVxuICB9XG5cbiAgb25EYXRhICguLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkRhdGEoLi4uYXJncylcbiAgfVxuXG4gIG9uQ29tcGxldGUgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uQ29tcGxldGUoLi4uYXJncylcbiAgfVxuXG4gIG9uQm9keVNlbnQgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uQm9keVNlbnQoLi4uYXJncylcbiAgfVxufVxuIiwKICAgICIvLyBodHRwczovL2dpdGh1Yi5jb20vRXRoYW4tQXJyb3dvb2QvdW5kaWNpLWZldGNoXG5cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGtIZWFkZXJzTGlzdCwga0NvbnN0cnVjdCB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsga0d1YXJkIH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5IH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3Qge1xuICBtYWtlSXRlcmF0b3IsXG4gIGlzVmFsaWRIZWFkZXJOYW1lLFxuICBpc1ZhbGlkSGVhZGVyVmFsdWVcbn0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4vd2ViaWRsJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5cbmNvbnN0IGtIZWFkZXJzTWFwID0gU3ltYm9sKCdoZWFkZXJzIG1hcCcpXG5jb25zdCBrSGVhZGVyc1NvcnRlZE1hcCA9IFN5bWJvbCgnaGVhZGVycyBtYXAgc29ydGVkJylcblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gY29kZVxuICovXG5mdW5jdGlvbiBpc0hUVFBXaGl0ZVNwYWNlQ2hhckNvZGUgKGNvZGUpIHtcbiAgcmV0dXJuIGNvZGUgPT09IDB4MDBhIHx8IGNvZGUgPT09IDB4MDBkIHx8IGNvZGUgPT09IDB4MDA5IHx8IGNvZGUgPT09IDB4MDIwXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXItdmFsdWUtbm9ybWFsaXplXG4gKiBAcGFyYW0ge3N0cmluZ30gcG90ZW50aWFsVmFsdWVcbiAqL1xuZnVuY3Rpb24gaGVhZGVyVmFsdWVOb3JtYWxpemUgKHBvdGVudGlhbFZhbHVlKSB7XG4gIC8vICBUbyBub3JtYWxpemUgYSBieXRlIHNlcXVlbmNlIHBvdGVudGlhbFZhbHVlLCByZW1vdmVcbiAgLy8gIGFueSBsZWFkaW5nIGFuZCB0cmFpbGluZyBIVFRQIHdoaXRlc3BhY2UgYnl0ZXMgZnJvbVxuICAvLyAgcG90ZW50aWFsVmFsdWUuXG4gIGxldCBpID0gMDsgbGV0IGogPSBwb3RlbnRpYWxWYWx1ZS5sZW5ndGhcblxuICB3aGlsZSAoaiA+IGkgJiYgaXNIVFRQV2hpdGVTcGFjZUNoYXJDb2RlKHBvdGVudGlhbFZhbHVlLmNoYXJDb2RlQXQoaiAtIDEpKSkgLS1qXG4gIHdoaWxlIChqID4gaSAmJiBpc0hUVFBXaGl0ZVNwYWNlQ2hhckNvZGUocG90ZW50aWFsVmFsdWUuY2hhckNvZGVBdChpKSkpICsraVxuXG4gIHJldHVybiBpID09PSAwICYmIGogPT09IHBvdGVudGlhbFZhbHVlLmxlbmd0aCA/IHBvdGVudGlhbFZhbHVlIDogcG90ZW50aWFsVmFsdWUuc3Vic3RyaW5nKGksIGopXG59XG5cbmZ1bmN0aW9uIGZpbGwgKGhlYWRlcnMsIG9iamVjdCkge1xuICAvLyBUbyBmaWxsIGEgSGVhZGVycyBvYmplY3QgaGVhZGVycyB3aXRoIGEgZ2l2ZW4gb2JqZWN0IG9iamVjdCwgcnVuIHRoZXNlIHN0ZXBzOlxuXG4gIC8vIDEuIElmIG9iamVjdCBpcyBhIHNlcXVlbmNlLCB0aGVuIGZvciBlYWNoIGhlYWRlciBpbiBvYmplY3Q6XG4gIC8vIE5vdGU6IHdlYmlkbCBjb252ZXJzaW9uIHRvIGFycmF5IGhhcyBhbHJlYWR5IGJlZW4gZG9uZS5cbiAgaWYgKEFycmF5LmlzQXJyYXkob2JqZWN0KSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2JqZWN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICBjb25zdCBoZWFkZXIgPSBvYmplY3RbaV1cbiAgICAgIC8vIDEuIElmIGhlYWRlciBkb2VzIG5vdCBjb250YWluIGV4YWN0bHkgdHdvIGl0ZW1zLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgaWYgKGhlYWRlci5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgIGhlYWRlcjogJ0hlYWRlcnMgY29uc3RydWN0b3InLFxuICAgICAgICAgIG1lc3NhZ2U6IGBleHBlY3RlZCBuYW1lL3ZhbHVlIHBhaXIgdG8gYmUgbGVuZ3RoIDIsIGZvdW5kICR7aGVhZGVyLmxlbmd0aH0uYFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICAvLyAyLiBBcHBlbmQgKGhlYWRlcuKAmXMgZmlyc3QgaXRlbSwgaGVhZGVy4oCZcyBzZWNvbmQgaXRlbSkgdG8gaGVhZGVycy5cbiAgICAgIGFwcGVuZEhlYWRlcihoZWFkZXJzLCBoZWFkZXJbMF0sIGhlYWRlclsxXSlcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsKSB7XG4gICAgLy8gTm90ZTogbnVsbCBzaG91bGQgdGhyb3dcblxuICAgIC8vIDIuIE90aGVyd2lzZSwgb2JqZWN0IGlzIGEgcmVjb3JkLCB0aGVuIGZvciBlYWNoIGtleSDihpIgdmFsdWUgaW4gb2JqZWN0LFxuICAgIC8vICAgIGFwcGVuZCAoa2V5LCB2YWx1ZSkgdG8gaGVhZGVyc1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICBhcHBlbmRIZWFkZXIoaGVhZGVycywga2V5c1tpXSwgb2JqZWN0W2tleXNbaV1dKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmNvbnZlcnNpb25GYWlsZWQoe1xuICAgICAgcHJlZml4OiAnSGVhZGVycyBjb25zdHJ1Y3RvcicsXG4gICAgICBhcmd1bWVudDogJ0FyZ3VtZW50IDEnLFxuICAgICAgdHlwZXM6IFsnc2VxdWVuY2U8c2VxdWVuY2U8Qnl0ZVN0cmluZz4+JywgJ3JlY29yZDxCeXRlU3RyaW5nLCBCeXRlU3RyaW5nPiddXG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtaGVhZGVycy1hcHBlbmRcbiAqL1xuZnVuY3Rpb24gYXBwZW5kSGVhZGVyIChoZWFkZXJzLCBuYW1lLCB2YWx1ZSkge1xuICAvLyAxLiBOb3JtYWxpemUgdmFsdWUuXG4gIHZhbHVlID0gaGVhZGVyVmFsdWVOb3JtYWxpemUodmFsdWUpXG5cbiAgLy8gMi4gSWYgbmFtZSBpcyBub3QgYSBoZWFkZXIgbmFtZSBvciB2YWx1ZSBpcyBub3QgYVxuICAvLyAgICBoZWFkZXIgdmFsdWUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIGlmICghaXNWYWxpZEhlYWRlck5hbWUobmFtZSkpIHtcbiAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmludmFsaWRBcmd1bWVudCh7XG4gICAgICBwcmVmaXg6ICdIZWFkZXJzLmFwcGVuZCcsXG4gICAgICB2YWx1ZTogbmFtZSxcbiAgICAgIHR5cGU6ICdoZWFkZXIgbmFtZSdcbiAgICB9KVxuICB9IGVsc2UgaWYgKCFpc1ZhbGlkSGVhZGVyVmFsdWUodmFsdWUpKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5pbnZhbGlkQXJndW1lbnQoe1xuICAgICAgcHJlZml4OiAnSGVhZGVycy5hcHBlbmQnLFxuICAgICAgdmFsdWUsXG4gICAgICB0eXBlOiAnaGVhZGVyIHZhbHVlJ1xuICAgIH0pXG4gIH1cblxuICAvLyAzLiBJZiBoZWFkZXJz4oCZcyBndWFyZCBpcyBcImltbXV0YWJsZVwiLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAvLyA0LiBPdGhlcndpc2UsIGlmIGhlYWRlcnPigJlzIGd1YXJkIGlzIFwicmVxdWVzdFwiIGFuZCBuYW1lIGlzIGFcbiAgLy8gICAgZm9yYmlkZGVuIGhlYWRlciBuYW1lLCByZXR1cm4uXG4gIC8vIE5vdGU6IHVuZGljaSBkb2VzIG5vdCBpbXBsZW1lbnQgZm9yYmlkZGVuIGhlYWRlciBuYW1lc1xuICBpZiAoaGVhZGVyc1trR3VhcmRdID09PSAnaW1tdXRhYmxlJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ltbXV0YWJsZScpXG4gIH0gZWxzZSBpZiAoaGVhZGVyc1trR3VhcmRdID09PSAncmVxdWVzdC1uby1jb3JzJykge1xuICAgIC8vIDUuIE90aGVyd2lzZSwgaWYgaGVhZGVyc+KAmXMgZ3VhcmQgaXMgXCJyZXF1ZXN0LW5vLWNvcnNcIjpcbiAgICAvLyBUT0RPXG4gIH1cblxuICAvLyA2LiBPdGhlcndpc2UsIGlmIGhlYWRlcnPigJlzIGd1YXJkIGlzIFwicmVzcG9uc2VcIiBhbmQgbmFtZSBpcyBhXG4gIC8vICAgIGZvcmJpZGRlbiByZXNwb25zZS1oZWFkZXIgbmFtZSwgcmV0dXJuLlxuXG4gIC8vIDcuIEFwcGVuZCAobmFtZSwgdmFsdWUpIHRvIGhlYWRlcnPigJlzIGhlYWRlciBsaXN0LlxuICByZXR1cm4gaGVhZGVyc1trSGVhZGVyc0xpc3RdLmFwcGVuZChuYW1lLCB2YWx1ZSlcblxuICAvLyA4LiBJZiBoZWFkZXJz4oCZcyBndWFyZCBpcyBcInJlcXVlc3Qtbm8tY29yc1wiLCB0aGVuIHJlbW92ZVxuICAvLyAgICBwcml2aWxlZ2VkIG5vLUNPUlMgcmVxdWVzdCBoZWFkZXJzIGZyb20gaGVhZGVyc1xufVxuXG5jbGFzcyBIZWFkZXJzTGlzdCB7XG4gIC8qKiBAdHlwZSB7W3N0cmluZywgc3RyaW5nXVtdfG51bGx9ICovXG4gIGNvb2tpZXMgPSBudWxsXG5cbiAgY29uc3RydWN0b3IgKGluaXQpIHtcbiAgICBpZiAoaW5pdCBpbnN0YW5jZW9mIEhlYWRlcnNMaXN0KSB7XG4gICAgICB0aGlzW2tIZWFkZXJzTWFwXSA9IG5ldyBNYXAoaW5pdFtrSGVhZGVyc01hcF0pXG4gICAgICB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXSA9IGluaXRba0hlYWRlcnNTb3J0ZWRNYXBdXG4gICAgICB0aGlzLmNvb2tpZXMgPSBpbml0LmNvb2tpZXMgPT09IG51bGwgPyBudWxsIDogWy4uLmluaXQuY29va2llc11cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trSGVhZGVyc01hcF0gPSBuZXcgTWFwKGluaXQpXG4gICAgICB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXSA9IG51bGxcbiAgICB9XG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaGVhZGVyLWxpc3QtY29udGFpbnNcbiAgY29udGFpbnMgKG5hbWUpIHtcbiAgICAvLyBBIGhlYWRlciBsaXN0IGxpc3QgY29udGFpbnMgYSBoZWFkZXIgbmFtZSBuYW1lIGlmIGxpc3RcbiAgICAvLyBjb250YWlucyBhIGhlYWRlciB3aG9zZSBuYW1lIGlzIGEgYnl0ZS1jYXNlLWluc2Vuc2l0aXZlXG4gICAgLy8gbWF0Y2ggZm9yIG5hbWUuXG4gICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKVxuXG4gICAgcmV0dXJuIHRoaXNba0hlYWRlcnNNYXBdLmhhcyhuYW1lKVxuICB9XG5cbiAgY2xlYXIgKCkge1xuICAgIHRoaXNba0hlYWRlcnNNYXBdLmNsZWFyKClcbiAgICB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXSA9IG51bGxcbiAgICB0aGlzLmNvb2tpZXMgPSBudWxsXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXItbGlzdC1hcHBlbmRcbiAgYXBwZW5kIChuYW1lLCB2YWx1ZSkge1xuICAgIHRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdID0gbnVsbFxuXG4gICAgLy8gMS4gSWYgbGlzdCBjb250YWlucyBuYW1lLCB0aGVuIHNldCBuYW1lIHRvIHRoZSBmaXJzdCBzdWNoXG4gICAgLy8gICAgaGVhZGVy4oCZcyBuYW1lLlxuICAgIGNvbnN0IGxvd2VyY2FzZU5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKClcbiAgICBjb25zdCBleGlzdHMgPSB0aGlzW2tIZWFkZXJzTWFwXS5nZXQobG93ZXJjYXNlTmFtZSlcblxuICAgIC8vIDIuIEFwcGVuZCAobmFtZSwgdmFsdWUpIHRvIGxpc3QuXG4gICAgaWYgKGV4aXN0cykge1xuICAgICAgY29uc3QgZGVsaW1pdGVyID0gbG93ZXJjYXNlTmFtZSA9PT0gJ2Nvb2tpZScgPyAnOyAnIDogJywgJ1xuICAgICAgdGhpc1trSGVhZGVyc01hcF0uc2V0KGxvd2VyY2FzZU5hbWUsIHtcbiAgICAgICAgbmFtZTogZXhpc3RzLm5hbWUsXG4gICAgICAgIHZhbHVlOiBgJHtleGlzdHMudmFsdWV9JHtkZWxpbWl0ZXJ9JHt2YWx1ZX1gXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tIZWFkZXJzTWFwXS5zZXQobG93ZXJjYXNlTmFtZSwgeyBuYW1lLCB2YWx1ZSB9KVxuICAgIH1cblxuICAgIGlmIChsb3dlcmNhc2VOYW1lID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgIHRoaXMuY29va2llcyA/Pz0gW11cbiAgICAgIHRoaXMuY29va2llcy5wdXNoKHZhbHVlKVxuICAgIH1cbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWhlYWRlci1saXN0LXNldFxuICBzZXQgKG5hbWUsIHZhbHVlKSB7XG4gICAgdGhpc1trSGVhZGVyc1NvcnRlZE1hcF0gPSBudWxsXG4gICAgY29uc3QgbG93ZXJjYXNlTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKVxuXG4gICAgaWYgKGxvd2VyY2FzZU5hbWUgPT09ICdzZXQtY29va2llJykge1xuICAgICAgdGhpcy5jb29raWVzID0gW3ZhbHVlXVxuICAgIH1cblxuICAgIC8vIDEuIElmIGxpc3QgY29udGFpbnMgbmFtZSwgdGhlbiBzZXQgdGhlIHZhbHVlIG9mXG4gICAgLy8gICAgdGhlIGZpcnN0IHN1Y2ggaGVhZGVyIHRvIHZhbHVlIGFuZCByZW1vdmUgdGhlXG4gICAgLy8gICAgb3RoZXJzLlxuICAgIC8vIDIuIE90aGVyd2lzZSwgYXBwZW5kIGhlYWRlciAobmFtZSwgdmFsdWUpIHRvIGxpc3QuXG4gICAgdGhpc1trSGVhZGVyc01hcF0uc2V0KGxvd2VyY2FzZU5hbWUsIHsgbmFtZSwgdmFsdWUgfSlcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWhlYWRlci1saXN0LWRlbGV0ZVxuICBkZWxldGUgKG5hbWUpIHtcbiAgICB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXSA9IG51bGxcblxuICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKClcblxuICAgIGlmIChuYW1lID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgIHRoaXMuY29va2llcyA9IG51bGxcbiAgICB9XG5cbiAgICB0aGlzW2tIZWFkZXJzTWFwXS5kZWxldGUobmFtZSlcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWhlYWRlci1saXN0LWdldFxuICBnZXQgKG5hbWUpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXNba0hlYWRlcnNNYXBdLmdldChuYW1lLnRvTG93ZXJDYXNlKCkpXG5cbiAgICAvLyAxLiBJZiBsaXN0IGRvZXMgbm90IGNvbnRhaW4gbmFtZSwgdGhlbiByZXR1cm4gbnVsbC5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIHZhbHVlcyBvZiBhbGwgaGVhZGVycyBpbiBsaXN0IHdob3NlIG5hbWVcbiAgICAvLyAgICBpcyBhIGJ5dGUtY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBmb3IgbmFtZSxcbiAgICAvLyAgICBzZXBhcmF0ZWQgZnJvbSBlYWNoIG90aGVyIGJ5IDB4MkMgMHgyMCwgaW4gb3JkZXIuXG4gICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyBudWxsIDogdmFsdWUudmFsdWVcbiAgfVxuXG4gICogW1N5bWJvbC5pdGVyYXRvcl0gKCkge1xuICAgIC8vIHVzZSB0aGUgbG93ZXJjYXNlZCBuYW1lXG4gICAgZm9yIChjb25zdCBbbmFtZSwgeyB2YWx1ZSB9XSBvZiB0aGlzW2tIZWFkZXJzTWFwXSkge1xuICAgICAgeWllbGQgW25hbWUsIHZhbHVlXVxuICAgIH1cbiAgfVxuXG4gIGdldCBlbnRyaWVzICgpIHtcbiAgICBjb25zdCBoZWFkZXJzID0ge31cblxuICAgIGlmICh0aGlzW2tIZWFkZXJzTWFwXS5zaXplKSB7XG4gICAgICBmb3IgKGNvbnN0IHsgbmFtZSwgdmFsdWUgfSBvZiB0aGlzW2tIZWFkZXJzTWFwXS52YWx1ZXMoKSkge1xuICAgICAgICBoZWFkZXJzW25hbWVdID0gdmFsdWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaGVhZGVyc1xuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNoZWFkZXJzLWNsYXNzXG5jbGFzcyBIZWFkZXJzIHtcbiAgY29uc3RydWN0b3IgKGluaXQgPSB1bmRlZmluZWQpIHtcbiAgICBpZiAoaW5pdCA9PT0ga0NvbnN0cnVjdCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHRoaXNba0hlYWRlcnNMaXN0XSA9IG5ldyBIZWFkZXJzTGlzdCgpXG5cbiAgICAvLyBUaGUgbmV3IEhlYWRlcnMoaW5pdCkgY29uc3RydWN0b3Igc3RlcHMgYXJlOlxuXG4gICAgLy8gMS4gU2V0IHRoaXPigJlzIGd1YXJkIHRvIFwibm9uZVwiLlxuICAgIHRoaXNba0d1YXJkXSA9ICdub25lJ1xuXG4gICAgLy8gMi4gSWYgaW5pdCBpcyBnaXZlbiwgdGhlbiBmaWxsIHRoaXMgd2l0aCBpbml0LlxuICAgIGlmIChpbml0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGluaXQgPSB3ZWJpZGwuY29udmVydGVycy5IZWFkZXJzSW5pdChpbml0KVxuICAgICAgZmlsbCh0aGlzLCBpbml0KVxuICAgIH1cbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20taGVhZGVycy1hcHBlbmRcbiAgYXBwZW5kIChuYW1lLCB2YWx1ZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnSGVhZGVycy5hcHBlbmQnIH0pXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyhuYW1lKVxuICAgIHZhbHVlID0gd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyh2YWx1ZSlcblxuICAgIHJldHVybiBhcHBlbmRIZWFkZXIodGhpcywgbmFtZSwgdmFsdWUpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWhlYWRlcnMtZGVsZXRlXG4gIGRlbGV0ZSAobmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnSGVhZGVycy5kZWxldGUnIH0pXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyhuYW1lKVxuXG4gICAgLy8gMS4gSWYgbmFtZSBpcyBub3QgYSBoZWFkZXIgbmFtZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoIWlzVmFsaWRIZWFkZXJOYW1lKG5hbWUpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmludmFsaWRBcmd1bWVudCh7XG4gICAgICAgIHByZWZpeDogJ0hlYWRlcnMuZGVsZXRlJyxcbiAgICAgICAgdmFsdWU6IG5hbWUsXG4gICAgICAgIHR5cGU6ICdoZWFkZXIgbmFtZSdcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gSWYgdGhpc+KAmXMgZ3VhcmQgaXMgXCJpbW11dGFibGVcIiwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAvLyAzLiBPdGhlcndpc2UsIGlmIHRoaXPigJlzIGd1YXJkIGlzIFwicmVxdWVzdFwiIGFuZCBuYW1lIGlzIGFcbiAgICAvLyAgICBmb3JiaWRkZW4gaGVhZGVyIG5hbWUsIHJldHVybi5cbiAgICAvLyA0LiBPdGhlcndpc2UsIGlmIHRoaXPigJlzIGd1YXJkIGlzIFwicmVxdWVzdC1uby1jb3JzXCIsIG5hbWVcbiAgICAvLyAgICBpcyBub3QgYSBuby1DT1JTLXNhZmVsaXN0ZWQgcmVxdWVzdC1oZWFkZXIgbmFtZSwgYW5kXG4gICAgLy8gICAgbmFtZSBpcyBub3QgYSBwcml2aWxlZ2VkIG5vLUNPUlMgcmVxdWVzdC1oZWFkZXIgbmFtZSxcbiAgICAvLyAgICByZXR1cm4uXG4gICAgLy8gNS4gT3RoZXJ3aXNlLCBpZiB0aGlz4oCZcyBndWFyZCBpcyBcInJlc3BvbnNlXCIgYW5kIG5hbWUgaXNcbiAgICAvLyAgICBhIGZvcmJpZGRlbiByZXNwb25zZS1oZWFkZXIgbmFtZSwgcmV0dXJuLlxuICAgIC8vIE5vdGU6IHVuZGljaSBkb2VzIG5vdCBpbXBsZW1lbnQgZm9yYmlkZGVuIGhlYWRlciBuYW1lc1xuICAgIGlmICh0aGlzW2tHdWFyZF0gPT09ICdpbW11dGFibGUnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbW11dGFibGUnKVxuICAgIH0gZWxzZSBpZiAodGhpc1trR3VhcmRdID09PSAncmVxdWVzdC1uby1jb3JzJykge1xuICAgICAgLy8gVE9ET1xuICAgIH1cblxuICAgIC8vIDYuIElmIHRoaXPigJlzIGhlYWRlciBsaXN0IGRvZXMgbm90IGNvbnRhaW4gbmFtZSwgdGhlblxuICAgIC8vICAgIHJldHVybi5cbiAgICBpZiAoIXRoaXNba0hlYWRlcnNMaXN0XS5jb250YWlucyhuYW1lKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gNy4gRGVsZXRlIG5hbWUgZnJvbSB0aGlz4oCZcyBoZWFkZXIgbGlzdC5cbiAgICAvLyA4LiBJZiB0aGlz4oCZcyBndWFyZCBpcyBcInJlcXVlc3Qtbm8tY29yc1wiLCB0aGVuIHJlbW92ZVxuICAgIC8vICAgIHByaXZpbGVnZWQgbm8tQ09SUyByZXF1ZXN0IGhlYWRlcnMgZnJvbSB0aGlzLlxuICAgIHRoaXNba0hlYWRlcnNMaXN0XS5kZWxldGUobmFtZSlcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20taGVhZGVycy1nZXRcbiAgZ2V0IChuYW1lKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdIZWFkZXJzLmdldCcgfSlcblxuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nKG5hbWUpXG5cbiAgICAvLyAxLiBJZiBuYW1lIGlzIG5vdCBhIGhlYWRlciBuYW1lLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICghaXNWYWxpZEhlYWRlck5hbWUobmFtZSkpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuaW52YWxpZEFyZ3VtZW50KHtcbiAgICAgICAgcHJlZml4OiAnSGVhZGVycy5nZXQnLFxuICAgICAgICB2YWx1ZTogbmFtZSxcbiAgICAgICAgdHlwZTogJ2hlYWRlciBuYW1lJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBnZXR0aW5nIG5hbWUgZnJvbSB0aGlz4oCZcyBoZWFkZXJcbiAgICAvLyAgICBsaXN0LlxuICAgIHJldHVybiB0aGlzW2tIZWFkZXJzTGlzdF0uZ2V0KG5hbWUpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWhlYWRlcnMtaGFzXG4gIGhhcyAobmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnSGVhZGVycy5oYXMnIH0pXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyhuYW1lKVxuXG4gICAgLy8gMS4gSWYgbmFtZSBpcyBub3QgYSBoZWFkZXIgbmFtZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoIWlzVmFsaWRIZWFkZXJOYW1lKG5hbWUpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmludmFsaWRBcmd1bWVudCh7XG4gICAgICAgIHByZWZpeDogJ0hlYWRlcnMuaGFzJyxcbiAgICAgICAgdmFsdWU6IG5hbWUsXG4gICAgICAgIHR5cGU6ICdoZWFkZXIgbmFtZSdcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gUmV0dXJuIHRydWUgaWYgdGhpc+KAmXMgaGVhZGVyIGxpc3QgY29udGFpbnMgbmFtZTtcbiAgICAvLyAgICBvdGhlcndpc2UgZmFsc2UuXG4gICAgcmV0dXJuIHRoaXNba0hlYWRlcnNMaXN0XS5jb250YWlucyhuYW1lKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1oZWFkZXJzLXNldFxuICBzZXQgKG5hbWUsIHZhbHVlKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMiwgeyBoZWFkZXI6ICdIZWFkZXJzLnNldCcgfSlcblxuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nKG5hbWUpXG4gICAgdmFsdWUgPSB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nKHZhbHVlKVxuXG4gICAgLy8gMS4gTm9ybWFsaXplIHZhbHVlLlxuICAgIHZhbHVlID0gaGVhZGVyVmFsdWVOb3JtYWxpemUodmFsdWUpXG5cbiAgICAvLyAyLiBJZiBuYW1lIGlzIG5vdCBhIGhlYWRlciBuYW1lIG9yIHZhbHVlIGlzIG5vdCBhXG4gICAgLy8gICAgaGVhZGVyIHZhbHVlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICghaXNWYWxpZEhlYWRlck5hbWUobmFtZSkpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuaW52YWxpZEFyZ3VtZW50KHtcbiAgICAgICAgcHJlZml4OiAnSGVhZGVycy5zZXQnLFxuICAgICAgICB2YWx1ZTogbmFtZSxcbiAgICAgICAgdHlwZTogJ2hlYWRlciBuYW1lJ1xuICAgICAgfSlcbiAgICB9IGVsc2UgaWYgKCFpc1ZhbGlkSGVhZGVyVmFsdWUodmFsdWUpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmludmFsaWRBcmd1bWVudCh7XG4gICAgICAgIHByZWZpeDogJ0hlYWRlcnMuc2V0JyxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHR5cGU6ICdoZWFkZXIgdmFsdWUnXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDMuIElmIHRoaXPigJlzIGd1YXJkIGlzIFwiaW1tdXRhYmxlXCIsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgLy8gNC4gT3RoZXJ3aXNlLCBpZiB0aGlz4oCZcyBndWFyZCBpcyBcInJlcXVlc3RcIiBhbmQgbmFtZSBpcyBhXG4gICAgLy8gICAgZm9yYmlkZGVuIGhlYWRlciBuYW1lLCByZXR1cm4uXG4gICAgLy8gNS4gT3RoZXJ3aXNlLCBpZiB0aGlz4oCZcyBndWFyZCBpcyBcInJlcXVlc3Qtbm8tY29yc1wiIGFuZFxuICAgIC8vICAgIG5hbWUvdmFsdWUgaXMgbm90IGEgbm8tQ09SUy1zYWZlbGlzdGVkIHJlcXVlc3QtaGVhZGVyLFxuICAgIC8vICAgIHJldHVybi5cbiAgICAvLyA2LiBPdGhlcndpc2UsIGlmIHRoaXPigJlzIGd1YXJkIGlzIFwicmVzcG9uc2VcIiBhbmQgbmFtZSBpcyBhXG4gICAgLy8gICAgZm9yYmlkZGVuIHJlc3BvbnNlLWhlYWRlciBuYW1lLCByZXR1cm4uXG4gICAgLy8gTm90ZTogdW5kaWNpIGRvZXMgbm90IGltcGxlbWVudCBmb3JiaWRkZW4gaGVhZGVyIG5hbWVzXG4gICAgaWYgKHRoaXNba0d1YXJkXSA9PT0gJ2ltbXV0YWJsZScpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ltbXV0YWJsZScpXG4gICAgfSBlbHNlIGlmICh0aGlzW2tHdWFyZF0gPT09ICdyZXF1ZXN0LW5vLWNvcnMnKSB7XG4gICAgICAvLyBUT0RPXG4gICAgfVxuXG4gICAgLy8gNy4gU2V0IChuYW1lLCB2YWx1ZSkgaW4gdGhpc+KAmXMgaGVhZGVyIGxpc3QuXG4gICAgLy8gOC4gSWYgdGhpc+KAmXMgZ3VhcmQgaXMgXCJyZXF1ZXN0LW5vLWNvcnNcIiwgdGhlbiByZW1vdmVcbiAgICAvLyAgICBwcml2aWxlZ2VkIG5vLUNPUlMgcmVxdWVzdCBoZWFkZXJzIGZyb20gdGhpc1xuICAgIHRoaXNba0hlYWRlcnNMaXN0XS5zZXQobmFtZSwgdmFsdWUpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWhlYWRlcnMtZ2V0c2V0Y29va2llXG4gIGdldFNldENvb2tpZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIC8vIDEuIElmIHRoaXPigJlzIGhlYWRlciBsaXN0IGRvZXMgbm90IGNvbnRhaW4gYFNldC1Db29raWVgLCB0aGVuIHJldHVybiDCqyDCuy5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIHZhbHVlcyBvZiBhbGwgaGVhZGVycyBpbiB0aGlz4oCZcyBoZWFkZXIgbGlzdCB3aG9zZSBuYW1lIGlzXG4gICAgLy8gICAgYSBieXRlLWNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yIGBTZXQtQ29va2llYCwgaW4gb3JkZXIuXG5cbiAgICBjb25zdCBsaXN0ID0gdGhpc1trSGVhZGVyc0xpc3RdLmNvb2tpZXNcblxuICAgIGlmIChsaXN0KSB7XG4gICAgICByZXR1cm4gWy4uLmxpc3RdXG4gICAgfVxuXG4gICAgcmV0dXJuIFtdXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXItbGlzdC1zb3J0LWFuZC1jb21iaW5lXG4gIGdldCBba0hlYWRlcnNTb3J0ZWRNYXBdICgpIHtcbiAgICBpZiAodGhpc1trSGVhZGVyc0xpc3RdW2tIZWFkZXJzU29ydGVkTWFwXSkge1xuICAgICAgcmV0dXJuIHRoaXNba0hlYWRlcnNMaXN0XVtrSGVhZGVyc1NvcnRlZE1hcF1cbiAgICB9XG5cbiAgICAvLyAxLiBMZXQgaGVhZGVycyBiZSBhbiBlbXB0eSBsaXN0IG9mIGhlYWRlcnMgd2l0aCB0aGUga2V5IGJlaW5nIHRoZSBuYW1lXG4gICAgLy8gICAgYW5kIHZhbHVlIHRoZSB2YWx1ZS5cbiAgICBjb25zdCBoZWFkZXJzID0gW11cblxuICAgIC8vIDIuIExldCBuYW1lcyBiZSB0aGUgcmVzdWx0IG9mIGNvbnZlcnQgaGVhZGVyIG5hbWVzIHRvIGEgc29ydGVkLWxvd2VyY2FzZVxuICAgIC8vICAgIHNldCB3aXRoIGFsbCB0aGUgbmFtZXMgb2YgdGhlIGhlYWRlcnMgaW4gbGlzdC5cbiAgICBjb25zdCBuYW1lcyA9IFsuLi50aGlzW2tIZWFkZXJzTGlzdF1dLnNvcnQoKGEsIGIpID0+IGFbMF0gPCBiWzBdID8gLTEgOiAxKVxuICAgIGNvbnN0IGNvb2tpZXMgPSB0aGlzW2tIZWFkZXJzTGlzdF0uY29va2llc1xuXG4gICAgLy8gMy4gRm9yIGVhY2ggbmFtZSBvZiBuYW1lczpcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgKytpKSB7XG4gICAgICBjb25zdCBbbmFtZSwgdmFsdWVdID0gbmFtZXNbaV1cbiAgICAgIC8vIDEuIElmIG5hbWUgaXMgYHNldC1jb29raWVgLCB0aGVuOlxuICAgICAgaWYgKG5hbWUgPT09ICdzZXQtY29va2llJykge1xuICAgICAgICAvLyAxLiBMZXQgdmFsdWVzIGJlIGEgbGlzdCBvZiBhbGwgdmFsdWVzIG9mIGhlYWRlcnMgaW4gbGlzdCB3aG9zZSBuYW1lXG4gICAgICAgIC8vICAgIGlzIGEgYnl0ZS1jYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvciBuYW1lLCBpbiBvcmRlci5cblxuICAgICAgICAvLyAyLiBGb3IgZWFjaCB2YWx1ZSBvZiB2YWx1ZXM6XG4gICAgICAgIC8vIDEuIEFwcGVuZCAobmFtZSwgdmFsdWUpIHRvIGhlYWRlcnMuXG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29va2llcy5sZW5ndGg7ICsraikge1xuICAgICAgICAgIGhlYWRlcnMucHVzaChbbmFtZSwgY29va2llc1tqXV0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIDIuIE90aGVyd2lzZTpcblxuICAgICAgICAvLyAxLiBMZXQgdmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBnZXR0aW5nIG5hbWUgZnJvbSBsaXN0LlxuXG4gICAgICAgIC8vIDIuIEFzc2VydDogdmFsdWUgaXMgbm9uLW51bGwuXG4gICAgICAgIGFzc2VydCh2YWx1ZSAhPT0gbnVsbClcblxuICAgICAgICAvLyAzLiBBcHBlbmQgKG5hbWUsIHZhbHVlKSB0byBoZWFkZXJzLlxuICAgICAgICBoZWFkZXJzLnB1c2goW25hbWUsIHZhbHVlXSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzW2tIZWFkZXJzTGlzdF1ba0hlYWRlcnNTb3J0ZWRNYXBdID0gaGVhZGVyc1xuXG4gICAgLy8gNC4gUmV0dXJuIGhlYWRlcnMuXG4gICAgcmV0dXJuIGhlYWRlcnNcbiAgfVxuXG4gIGtleXMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICBpZiAodGhpc1trR3VhcmRdID09PSAnaW1tdXRhYmxlJykge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXVxuICAgICAgcmV0dXJuIG1ha2VJdGVyYXRvcigoKSA9PiB2YWx1ZSwgJ0hlYWRlcnMnLFxuICAgICAgICAna2V5JylcbiAgICB9XG5cbiAgICByZXR1cm4gbWFrZUl0ZXJhdG9yKFxuICAgICAgKCkgPT4gWy4uLnRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdLnZhbHVlcygpXSxcbiAgICAgICdIZWFkZXJzJyxcbiAgICAgICdrZXknXG4gICAgKVxuICB9XG5cbiAgdmFsdWVzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBIZWFkZXJzKVxuXG4gICAgaWYgKHRoaXNba0d1YXJkXSA9PT0gJ2ltbXV0YWJsZScpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1trSGVhZGVyc1NvcnRlZE1hcF1cbiAgICAgIHJldHVybiBtYWtlSXRlcmF0b3IoKCkgPT4gdmFsdWUsICdIZWFkZXJzJyxcbiAgICAgICAgJ3ZhbHVlJylcbiAgICB9XG5cbiAgICByZXR1cm4gbWFrZUl0ZXJhdG9yKFxuICAgICAgKCkgPT4gWy4uLnRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdLnZhbHVlcygpXSxcbiAgICAgICdIZWFkZXJzJyxcbiAgICAgICd2YWx1ZSdcbiAgICApXG4gIH1cblxuICBlbnRyaWVzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBIZWFkZXJzKVxuXG4gICAgaWYgKHRoaXNba0d1YXJkXSA9PT0gJ2ltbXV0YWJsZScpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1trSGVhZGVyc1NvcnRlZE1hcF1cbiAgICAgIHJldHVybiBtYWtlSXRlcmF0b3IoKCkgPT4gdmFsdWUsICdIZWFkZXJzJyxcbiAgICAgICAgJ2tleSt2YWx1ZScpXG4gICAgfVxuXG4gICAgcmV0dXJuIG1ha2VJdGVyYXRvcihcbiAgICAgICgpID0+IFsuLi50aGlzW2tIZWFkZXJzU29ydGVkTWFwXS52YWx1ZXMoKV0sXG4gICAgICAnSGVhZGVycycsXG4gICAgICAna2V5K3ZhbHVlJ1xuICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0geyh2YWx1ZTogc3RyaW5nLCBrZXk6IHN0cmluZywgc2VsZjogSGVhZGVycykgPT4gdm9pZH0gY2FsbGJhY2tGblxuICAgKiBAcGFyYW0ge3Vua25vd259IHRoaXNBcmdcbiAgICovXG4gIGZvckVhY2ggKGNhbGxiYWNrRm4sIHRoaXNBcmcgPSBnbG9iYWxUaGlzKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdIZWFkZXJzLmZvckVhY2gnIH0pXG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrRm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ2ZvckVhY2gnIG9uICdIZWFkZXJzJzogcGFyYW1ldGVyIDEgaXMgbm90IG9mIHR5cGUgJ0Z1bmN0aW9uJy5cIlxuICAgICAgKVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHRoaXMpIHtcbiAgICAgIGNhbGxiYWNrRm4uYXBwbHkodGhpc0FyZywgW3ZhbHVlLCBrZXksIHRoaXNdKVxuICAgIH1cbiAgfVxuXG4gIFtTeW1ib2wuZm9yKCdub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbScpXSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIHJldHVybiB0aGlzW2tIZWFkZXJzTGlzdF1cbiAgfVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdID0gSGVhZGVycy5wcm90b3R5cGUuZW50cmllc1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhIZWFkZXJzLnByb3RvdHlwZSwge1xuICBhcHBlbmQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGRlbGV0ZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZ2V0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBoYXM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHNldDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZ2V0U2V0Q29va2llOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBrZXlzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICB2YWx1ZXM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGVudHJpZXM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGZvckVhY2g6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIFtTeW1ib2wuaXRlcmF0b3JdOiB7IGVudW1lcmFibGU6IGZhbHNlIH0sXG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdIZWFkZXJzJyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfVxufSlcblxud2ViaWRsLmNvbnZlcnRlcnMuSGVhZGVyc0luaXQgPSBmdW5jdGlvbiAoVikge1xuICBpZiAod2ViaWRsLnV0aWwuVHlwZShWKSA9PT0gJ09iamVjdCcpIHtcbiAgICBpZiAoVltTeW1ib2wuaXRlcmF0b3JdKSB7XG4gICAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPHNlcXVlbmNlPEJ5dGVTdHJpbmc+PiddKFYpXG4gICAgfVxuXG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzWydyZWNvcmQ8Qnl0ZVN0cmluZywgQnl0ZVN0cmluZz4nXShWKVxuICB9XG5cbiAgdGhyb3cgd2ViaWRsLmVycm9ycy5jb252ZXJzaW9uRmFpbGVkKHtcbiAgICBwcmVmaXg6ICdIZWFkZXJzIGNvbnN0cnVjdG9yJyxcbiAgICBhcmd1bWVudDogJ0FyZ3VtZW50IDEnLFxuICAgIHR5cGVzOiBbJ3NlcXVlbmNlPHNlcXVlbmNlPEJ5dGVTdHJpbmc+PicsICdyZWNvcmQ8Qnl0ZVN0cmluZywgQnl0ZVN0cmluZz4nXVxuICB9KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZmlsbCxcbiAgSGVhZGVycyxcbiAgSGVhZGVyc0xpc3Rcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgSGVhZGVycywgSGVhZGVyc0xpc3QsIGZpbGwgfSA9IHJlcXVpcmUoJy4vaGVhZGVycycpXG5jb25zdCB7IGV4dHJhY3RCb2R5LCBjbG9uZUJvZHksIG1peGluQm9keSB9ID0gcmVxdWlyZSgnLi9ib2R5JylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5IH0gPSB1dGlsXG5jb25zdCB7XG4gIGlzVmFsaWRSZWFzb25QaHJhc2UsXG4gIGlzQ2FuY2VsbGVkLFxuICBpc0Fib3J0ZWQsXG4gIGlzQmxvYkxpa2UsXG4gIHNlcmlhbGl6ZUphdmFzY3JpcHRWYWx1ZVRvSlNPTlN0cmluZyxcbiAgaXNFcnJvckxpa2UsXG4gIGlzb21vcnBoaWNFbmNvZGVcbn0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3Qge1xuICByZWRpcmVjdFN0YXR1c1NldCxcbiAgbnVsbEJvZHlTdGF0dXMsXG4gIERPTUV4Y2VwdGlvblxufSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IHsga1N0YXRlLCBrSGVhZGVycywga0d1YXJkLCBrUmVhbG0gfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi93ZWJpZGwnKVxuY29uc3QgeyBGb3JtRGF0YSB9ID0gcmVxdWlyZSgnLi9mb3JtZGF0YScpXG5jb25zdCB7IGdldEdsb2JhbE9yaWdpbiB9ID0gcmVxdWlyZSgnLi9nbG9iYWwnKVxuY29uc3QgeyBVUkxTZXJpYWxpemVyIH0gPSByZXF1aXJlKCcuL2RhdGFVUkwnKVxuY29uc3QgeyBrSGVhZGVyc0xpc3QsIGtDb25zdHJ1Y3QgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyB0eXBlcyB9ID0gcmVxdWlyZSgndXRpbCcpXG5cbmNvbnN0IFJlYWRhYmxlU3RyZWFtID0gZ2xvYmFsVGhpcy5SZWFkYWJsZVN0cmVhbSB8fCByZXF1aXJlKCdzdHJlYW0vd2ViJykuUmVhZGFibGVTdHJlYW1cbmNvbnN0IHRleHRFbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCd1dGYtOCcpXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXNwb25zZS1jbGFzc1xuY2xhc3MgUmVzcG9uc2Uge1xuICAvLyBDcmVhdGVzIG5ldHdvcmsgZXJyb3IgUmVzcG9uc2UuXG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgLy8gVE9ET1xuICAgIGNvbnN0IHJlbGV2YW50UmVhbG0gPSB7IHNldHRpbmdzT2JqZWN0OiB7fSB9XG5cbiAgICAvLyBUaGUgc3RhdGljIGVycm9yKCkgbWV0aG9kIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhXG4gICAgLy8gUmVzcG9uc2Ugb2JqZWN0LCBnaXZlbiBhIG5ldyBuZXR3b3JrIGVycm9yLCBcImltbXV0YWJsZVwiLCBhbmQgdGhpc+KAmXNcbiAgICAvLyByZWxldmFudCBSZWFsbS5cbiAgICBjb25zdCByZXNwb25zZU9iamVjdCA9IG5ldyBSZXNwb25zZSgpXG4gICAgcmVzcG9uc2VPYmplY3Rba1N0YXRlXSA9IG1ha2VOZXR3b3JrRXJyb3IoKVxuICAgIHJlc3BvbnNlT2JqZWN0W2tSZWFsbV0gPSByZWxldmFudFJlYWxtXG4gICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tIZWFkZXJzTGlzdF0gPSByZXNwb25zZU9iamVjdFtrU3RhdGVdLmhlYWRlcnNMaXN0XG4gICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tHdWFyZF0gPSAnaW1tdXRhYmxlJ1xuICAgIHJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrUmVhbG1dID0gcmVsZXZhbnRSZWFsbVxuICAgIHJldHVybiByZXNwb25zZU9iamVjdFxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1yZXNwb25zZS1qc29uXG4gIHN0YXRpYyBqc29uIChkYXRhLCBpbml0ID0ge30pIHtcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnUmVzcG9uc2UuanNvbicgfSlcblxuICAgIGlmIChpbml0ICE9PSBudWxsKSB7XG4gICAgICBpbml0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVzcG9uc2VJbml0KGluaXQpXG4gICAgfVxuXG4gICAgLy8gMS4gTGV0IGJ5dGVzIHRoZSByZXN1bHQgb2YgcnVubmluZyBzZXJpYWxpemUgYSBKYXZhU2NyaXB0IHZhbHVlIHRvIEpTT04gYnl0ZXMgb24gZGF0YS5cbiAgICBjb25zdCBieXRlcyA9IHRleHRFbmNvZGVyLmVuY29kZShcbiAgICAgIHNlcmlhbGl6ZUphdmFzY3JpcHRWYWx1ZVRvSlNPTlN0cmluZyhkYXRhKVxuICAgIClcblxuICAgIC8vIDIuIExldCBib2R5IGJlIHRoZSByZXN1bHQgb2YgZXh0cmFjdGluZyBieXRlcy5cbiAgICBjb25zdCBib2R5ID0gZXh0cmFjdEJvZHkoYnl0ZXMpXG5cbiAgICAvLyAzLiBMZXQgcmVzcG9uc2VPYmplY3QgYmUgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhIFJlc3BvbnNlIG9iamVjdCwgZ2l2ZW4gYSBuZXcgcmVzcG9uc2UsXG4gICAgLy8gICAgXCJyZXNwb25zZVwiLCBhbmQgdGhpc+KAmXMgcmVsZXZhbnQgUmVhbG0uXG4gICAgY29uc3QgcmVsZXZhbnRSZWFsbSA9IHsgc2V0dGluZ3NPYmplY3Q6IHt9IH1cbiAgICBjb25zdCByZXNwb25zZU9iamVjdCA9IG5ldyBSZXNwb25zZSgpXG4gICAgcmVzcG9uc2VPYmplY3Rba1JlYWxtXSA9IHJlbGV2YW50UmVhbG1cbiAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba0d1YXJkXSA9ICdyZXNwb25zZSdcbiAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba1JlYWxtXSA9IHJlbGV2YW50UmVhbG1cblxuICAgIC8vIDQuIFBlcmZvcm0gaW5pdGlhbGl6ZSBhIHJlc3BvbnNlIGdpdmVuIHJlc3BvbnNlT2JqZWN0LCBpbml0LCBhbmQgKGJvZHksIFwiYXBwbGljYXRpb24vanNvblwiKS5cbiAgICBpbml0aWFsaXplUmVzcG9uc2UocmVzcG9uc2VPYmplY3QsIGluaXQsIHsgYm9keTogYm9keVswXSwgdHlwZTogJ2FwcGxpY2F0aW9uL2pzb24nIH0pXG5cbiAgICAvLyA1LiBSZXR1cm4gcmVzcG9uc2VPYmplY3QuXG4gICAgcmV0dXJuIHJlc3BvbnNlT2JqZWN0XG4gIH1cblxuICAvLyBDcmVhdGVzIGEgcmVkaXJlY3QgUmVzcG9uc2UgdGhhdCByZWRpcmVjdHMgdG8gdXJsIHdpdGggc3RhdHVzIHN0YXR1cy5cbiAgc3RhdGljIHJlZGlyZWN0ICh1cmwsIHN0YXR1cyA9IDMwMikge1xuICAgIGNvbnN0IHJlbGV2YW50UmVhbG0gPSB7IHNldHRpbmdzT2JqZWN0OiB7fSB9XG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnUmVzcG9uc2UucmVkaXJlY3QnIH0pXG5cbiAgICB1cmwgPSB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcodXJsKVxuICAgIHN0YXR1cyA9IHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBzaG9ydCddKHN0YXR1cylcblxuICAgIC8vIDEuIExldCBwYXJzZWRVUkwgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIHVybCB3aXRoIGN1cnJlbnQgc2V0dGluZ3NcbiAgICAvLyBvYmplY3TigJlzIEFQSSBiYXNlIFVSTC5cbiAgICAvLyAyLiBJZiBwYXJzZWRVUkwgaXMgZmFpbHVyZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAvLyBUT0RPOiBiYXNlLVVSTD9cbiAgICBsZXQgcGFyc2VkVVJMXG4gICAgdHJ5IHtcbiAgICAgIHBhcnNlZFVSTCA9IG5ldyBVUkwodXJsLCBnZXRHbG9iYWxPcmlnaW4oKSlcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRocm93IE9iamVjdC5hc3NpZ24obmV3IFR5cGVFcnJvcignRmFpbGVkIHRvIHBhcnNlIFVSTCBmcm9tICcgKyB1cmwpLCB7XG4gICAgICAgIGNhdXNlOiBlcnJcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMy4gSWYgc3RhdHVzIGlzIG5vdCBhIHJlZGlyZWN0IHN0YXR1cywgdGhlbiB0aHJvdyBhIFJhbmdlRXJyb3IuXG4gICAgaWYgKCFyZWRpcmVjdFN0YXR1c1NldC5oYXMoc3RhdHVzKSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgc3RhdHVzIGNvZGUgJyArIHN0YXR1cylcbiAgICB9XG5cbiAgICAvLyA0LiBMZXQgcmVzcG9uc2VPYmplY3QgYmUgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhIFJlc3BvbnNlIG9iamVjdCxcbiAgICAvLyBnaXZlbiBhIG5ldyByZXNwb25zZSwgXCJpbW11dGFibGVcIiwgYW5kIHRoaXPigJlzIHJlbGV2YW50IFJlYWxtLlxuICAgIGNvbnN0IHJlc3BvbnNlT2JqZWN0ID0gbmV3IFJlc3BvbnNlKClcbiAgICByZXNwb25zZU9iamVjdFtrUmVhbG1dID0gcmVsZXZhbnRSZWFsbVxuICAgIHJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrR3VhcmRdID0gJ2ltbXV0YWJsZSdcbiAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba1JlYWxtXSA9IHJlbGV2YW50UmVhbG1cblxuICAgIC8vIDUuIFNldCByZXNwb25zZU9iamVjdOKAmXMgcmVzcG9uc2XigJlzIHN0YXR1cyB0byBzdGF0dXMuXG4gICAgcmVzcG9uc2VPYmplY3Rba1N0YXRlXS5zdGF0dXMgPSBzdGF0dXNcblxuICAgIC8vIDYuIExldCB2YWx1ZSBiZSBwYXJzZWRVUkwsIHNlcmlhbGl6ZWQgYW5kIGlzb21vcnBoaWMgZW5jb2RlZC5cbiAgICBjb25zdCB2YWx1ZSA9IGlzb21vcnBoaWNFbmNvZGUoVVJMU2VyaWFsaXplcihwYXJzZWRVUkwpKVxuXG4gICAgLy8gNy4gQXBwZW5kIGBMb2NhdGlvbmAvdmFsdWUgdG8gcmVzcG9uc2VPYmplY3TigJlzIHJlc3BvbnNl4oCZcyBoZWFkZXIgbGlzdC5cbiAgICByZXNwb25zZU9iamVjdFtrU3RhdGVdLmhlYWRlcnNMaXN0LmFwcGVuZCgnbG9jYXRpb24nLCB2YWx1ZSlcblxuICAgIC8vIDguIFJldHVybiByZXNwb25zZU9iamVjdC5cbiAgICByZXR1cm4gcmVzcG9uc2VPYmplY3RcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tcmVzcG9uc2VcbiAgY29uc3RydWN0b3IgKGJvZHkgPSBudWxsLCBpbml0ID0ge30pIHtcbiAgICBpZiAoYm9keSAhPT0gbnVsbCkge1xuICAgICAgYm9keSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkJvZHlJbml0KGJvZHkpXG4gICAgfVxuXG4gICAgaW5pdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlc3BvbnNlSW5pdChpbml0KVxuXG4gICAgLy8gVE9ET1xuICAgIHRoaXNba1JlYWxtXSA9IHsgc2V0dGluZ3NPYmplY3Q6IHt9IH1cblxuICAgIC8vIDEuIFNldCB0aGlz4oCZcyByZXNwb25zZSB0byBhIG5ldyByZXNwb25zZS5cbiAgICB0aGlzW2tTdGF0ZV0gPSBtYWtlUmVzcG9uc2Uoe30pXG5cbiAgICAvLyAyLiBTZXQgdGhpc+KAmXMgaGVhZGVycyB0byBhIG5ldyBIZWFkZXJzIG9iamVjdCB3aXRoIHRoaXPigJlzIHJlbGV2YW50XG4gICAgLy8gUmVhbG0sIHdob3NlIGhlYWRlciBsaXN0IGlzIHRoaXPigJlzIHJlc3BvbnNl4oCZcyBoZWFkZXIgbGlzdCBhbmQgZ3VhcmRcbiAgICAvLyBpcyBcInJlc3BvbnNlXCIuXG4gICAgdGhpc1trSGVhZGVyc10gPSBuZXcgSGVhZGVycyhrQ29uc3RydWN0KVxuICAgIHRoaXNba0hlYWRlcnNdW2tHdWFyZF0gPSAncmVzcG9uc2UnXG4gICAgdGhpc1trSGVhZGVyc11ba0hlYWRlcnNMaXN0XSA9IHRoaXNba1N0YXRlXS5oZWFkZXJzTGlzdFxuICAgIHRoaXNba0hlYWRlcnNdW2tSZWFsbV0gPSB0aGlzW2tSZWFsbV1cblxuICAgIC8vIDMuIExldCBib2R5V2l0aFR5cGUgYmUgbnVsbC5cbiAgICBsZXQgYm9keVdpdGhUeXBlID0gbnVsbFxuXG4gICAgLy8gNC4gSWYgYm9keSBpcyBub24tbnVsbCwgdGhlbiBzZXQgYm9keVdpdGhUeXBlIHRvIHRoZSByZXN1bHQgb2YgZXh0cmFjdGluZyBib2R5LlxuICAgIGlmIChib2R5ICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IFtleHRyYWN0ZWRCb2R5LCB0eXBlXSA9IGV4dHJhY3RCb2R5KGJvZHkpXG4gICAgICBib2R5V2l0aFR5cGUgPSB7IGJvZHk6IGV4dHJhY3RlZEJvZHksIHR5cGUgfVxuICAgIH1cblxuICAgIC8vIDUuIFBlcmZvcm0gaW5pdGlhbGl6ZSBhIHJlc3BvbnNlIGdpdmVuIHRoaXMsIGluaXQsIGFuZCBib2R5V2l0aFR5cGUuXG4gICAgaW5pdGlhbGl6ZVJlc3BvbnNlKHRoaXMsIGluaXQsIGJvZHlXaXRoVHlwZSlcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2XigJlzIHR5cGUsIGUuZy4sIFwiY29yc1wiLlxuICBnZXQgdHlwZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICAvLyBUaGUgdHlwZSBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlz4oCZcyByZXNwb25zZeKAmXMgdHlwZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnR5cGVcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2XigJlzIFVSTCwgaWYgaXQgaGFzIG9uZTsgb3RoZXJ3aXNlIHRoZSBlbXB0eSBzdHJpbmcuXG4gIGdldCB1cmwgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgY29uc3QgdXJsTGlzdCA9IHRoaXNba1N0YXRlXS51cmxMaXN0XG5cbiAgICAvLyBUaGUgdXJsIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoZSBlbXB0eSBzdHJpbmcgaWYgdGhpc+KAmXNcbiAgICAvLyByZXNwb25zZeKAmXMgVVJMIGlzIG51bGw7IG90aGVyd2lzZSB0aGlz4oCZcyByZXNwb25zZeKAmXMgVVJMLFxuICAgIC8vIHNlcmlhbGl6ZWQgd2l0aCBleGNsdWRlIGZyYWdtZW50IHNldCB0byB0cnVlLlxuICAgIGNvbnN0IHVybCA9IHVybExpc3RbdXJsTGlzdC5sZW5ndGggLSAxXSA/PyBudWxsXG5cbiAgICBpZiAodXJsID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG5cbiAgICByZXR1cm4gVVJMU2VyaWFsaXplcih1cmwsIHRydWUpXG4gIH1cblxuICAvLyBSZXR1cm5zIHdoZXRoZXIgcmVzcG9uc2Ugd2FzIG9idGFpbmVkIHRocm91Z2ggYSByZWRpcmVjdC5cbiAgZ2V0IHJlZGlyZWN0ZWQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgLy8gVGhlIHJlZGlyZWN0ZWQgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdHJ1ZSBpZiB0aGlz4oCZcyByZXNwb25zZeKAmXMgVVJMXG4gICAgLy8gbGlzdCBoYXMgbW9yZSB0aGFuIG9uZSBpdGVtOyBvdGhlcndpc2UgZmFsc2UuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS51cmxMaXN0Lmxlbmd0aCA+IDFcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2XigJlzIHN0YXR1cy5cbiAgZ2V0IHN0YXR1cyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICAvLyBUaGUgc3RhdHVzIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXPigJlzIHJlc3BvbnNl4oCZcyBzdGF0dXMuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5zdGF0dXNcbiAgfVxuXG4gIC8vIFJldHVybnMgd2hldGhlciByZXNwb25zZeKAmXMgc3RhdHVzIGlzIGFuIG9rIHN0YXR1cy5cbiAgZ2V0IG9rICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXNwb25zZSlcblxuICAgIC8vIFRoZSBvayBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0cnVlIGlmIHRoaXPigJlzIHJlc3BvbnNl4oCZcyBzdGF0dXMgaXMgYW5cbiAgICAvLyBvayBzdGF0dXM7IG90aGVyd2lzZSBmYWxzZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnN0YXR1cyA+PSAyMDAgJiYgdGhpc1trU3RhdGVdLnN0YXR1cyA8PSAyOTlcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2XigJlzIHN0YXR1cyBtZXNzYWdlLlxuICBnZXQgc3RhdHVzVGV4dCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICAvLyBUaGUgc3RhdHVzVGV4dCBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlz4oCZcyByZXNwb25zZeKAmXMgc3RhdHVzXG4gICAgLy8gbWVzc2FnZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnN0YXR1c1RleHRcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2XigJlzIGhlYWRlcnMgYXMgSGVhZGVycy5cbiAgZ2V0IGhlYWRlcnMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgLy8gVGhlIGhlYWRlcnMgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc+KAmXMgaGVhZGVycy5cbiAgICByZXR1cm4gdGhpc1trSGVhZGVyc11cbiAgfVxuXG4gIGdldCBib2R5ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXNwb25zZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uYm9keSA/IHRoaXNba1N0YXRlXS5ib2R5LnN0cmVhbSA6IG51bGxcbiAgfVxuXG4gIGdldCBib2R5VXNlZCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICByZXR1cm4gISF0aGlzW2tTdGF0ZV0uYm9keSAmJiB1dGlsLmlzRGlzdHVyYmVkKHRoaXNba1N0YXRlXS5ib2R5LnN0cmVhbSlcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBjbG9uZSBvZiByZXNwb25zZS5cbiAgY2xvbmUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgLy8gMS4gSWYgdGhpcyBpcyB1bnVzYWJsZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAodGhpcy5ib2R5VXNlZCB8fCAodGhpcy5ib2R5ICYmIHRoaXMuYm9keS5sb2NrZWQpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ1Jlc3BvbnNlLmNsb25lJyxcbiAgICAgICAgbWVzc2FnZTogJ0JvZHkgaGFzIGFscmVhZHkgYmVlbiBjb25zdW1lZC4nXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDIuIExldCBjbG9uZWRSZXNwb25zZSBiZSB0aGUgcmVzdWx0IG9mIGNsb25pbmcgdGhpc+KAmXMgcmVzcG9uc2UuXG4gICAgY29uc3QgY2xvbmVkUmVzcG9uc2UgPSBjbG9uZVJlc3BvbnNlKHRoaXNba1N0YXRlXSlcblxuICAgIC8vIDMuIFJldHVybiB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEgUmVzcG9uc2Ugb2JqZWN0LCBnaXZlblxuICAgIC8vIGNsb25lZFJlc3BvbnNlLCB0aGlz4oCZcyBoZWFkZXJz4oCZcyBndWFyZCwgYW5kIHRoaXPigJlzIHJlbGV2YW50IFJlYWxtLlxuICAgIGNvbnN0IGNsb25lZFJlc3BvbnNlT2JqZWN0ID0gbmV3IFJlc3BvbnNlKClcbiAgICBjbG9uZWRSZXNwb25zZU9iamVjdFtrU3RhdGVdID0gY2xvbmVkUmVzcG9uc2VcbiAgICBjbG9uZWRSZXNwb25zZU9iamVjdFtrUmVhbG1dID0gdGhpc1trUmVhbG1dXG4gICAgY2xvbmVkUmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tIZWFkZXJzTGlzdF0gPSBjbG9uZWRSZXNwb25zZS5oZWFkZXJzTGlzdFxuICAgIGNsb25lZFJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrR3VhcmRdID0gdGhpc1trSGVhZGVyc11ba0d1YXJkXVxuICAgIGNsb25lZFJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrUmVhbG1dID0gdGhpc1trSGVhZGVyc11ba1JlYWxtXVxuXG4gICAgcmV0dXJuIGNsb25lZFJlc3BvbnNlT2JqZWN0XG4gIH1cbn1cblxubWl4aW5Cb2R5KFJlc3BvbnNlKVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhSZXNwb25zZS5wcm90b3R5cGUsIHtcbiAgdHlwZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgdXJsOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBzdGF0dXM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9rOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWRpcmVjdGVkOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBzdGF0dXNUZXh0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBoZWFkZXJzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBjbG9uZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYm9keToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYm9keVVzZWQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdSZXNwb25zZScsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH1cbn0pXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFJlc3BvbnNlLCB7XG4gIGpzb246IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlZGlyZWN0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBlcnJvcjoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtcmVzcG9uc2UtY2xvbmVcbmZ1bmN0aW9uIGNsb25lUmVzcG9uc2UgKHJlc3BvbnNlKSB7XG4gIC8vIFRvIGNsb25lIGEgcmVzcG9uc2UgcmVzcG9uc2UsIHJ1biB0aGVzZSBzdGVwczpcblxuICAvLyAxLiBJZiByZXNwb25zZSBpcyBhIGZpbHRlcmVkIHJlc3BvbnNlLCB0aGVuIHJldHVybiBhIG5ldyBpZGVudGljYWxcbiAgLy8gZmlsdGVyZWQgcmVzcG9uc2Ugd2hvc2UgaW50ZXJuYWwgcmVzcG9uc2UgaXMgYSBjbG9uZSBvZiByZXNwb25zZeKAmXNcbiAgLy8gaW50ZXJuYWwgcmVzcG9uc2UuXG4gIGlmIChyZXNwb25zZS5pbnRlcm5hbFJlc3BvbnNlKSB7XG4gICAgcmV0dXJuIGZpbHRlclJlc3BvbnNlKFxuICAgICAgY2xvbmVSZXNwb25zZShyZXNwb25zZS5pbnRlcm5hbFJlc3BvbnNlKSxcbiAgICAgIHJlc3BvbnNlLnR5cGVcbiAgICApXG4gIH1cblxuICAvLyAyLiBMZXQgbmV3UmVzcG9uc2UgYmUgYSBjb3B5IG9mIHJlc3BvbnNlLCBleGNlcHQgZm9yIGl0cyBib2R5LlxuICBjb25zdCBuZXdSZXNwb25zZSA9IG1ha2VSZXNwb25zZSh7IC4uLnJlc3BvbnNlLCBib2R5OiBudWxsIH0pXG5cbiAgLy8gMy4gSWYgcmVzcG9uc2XigJlzIGJvZHkgaXMgbm9uLW51bGwsIHRoZW4gc2V0IG5ld1Jlc3BvbnNl4oCZcyBib2R5IHRvIHRoZVxuICAvLyByZXN1bHQgb2YgY2xvbmluZyByZXNwb25zZeKAmXMgYm9keS5cbiAgaWYgKHJlc3BvbnNlLmJvZHkgIT0gbnVsbCkge1xuICAgIG5ld1Jlc3BvbnNlLmJvZHkgPSBjbG9uZUJvZHkocmVzcG9uc2UuYm9keSlcbiAgfVxuXG4gIC8vIDQuIFJldHVybiBuZXdSZXNwb25zZS5cbiAgcmV0dXJuIG5ld1Jlc3BvbnNlXG59XG5cbmZ1bmN0aW9uIG1ha2VSZXNwb25zZSAoaW5pdCkge1xuICByZXR1cm4ge1xuICAgIGFib3J0ZWQ6IGZhbHNlLFxuICAgIHJhbmdlUmVxdWVzdGVkOiBmYWxzZSxcbiAgICB0aW1pbmdBbGxvd1Bhc3NlZDogZmFsc2UsXG4gICAgcmVxdWVzdEluY2x1ZGVzQ3JlZGVudGlhbHM6IGZhbHNlLFxuICAgIHR5cGU6ICdkZWZhdWx0JyxcbiAgICBzdGF0dXM6IDIwMCxcbiAgICB0aW1pbmdJbmZvOiBudWxsLFxuICAgIGNhY2hlU3RhdGU6ICcnLFxuICAgIHN0YXR1c1RleHQ6ICcnLFxuICAgIC4uLmluaXQsXG4gICAgaGVhZGVyc0xpc3Q6IGluaXQuaGVhZGVyc0xpc3RcbiAgICAgID8gbmV3IEhlYWRlcnNMaXN0KGluaXQuaGVhZGVyc0xpc3QpXG4gICAgICA6IG5ldyBIZWFkZXJzTGlzdCgpLFxuICAgIHVybExpc3Q6IGluaXQudXJsTGlzdCA/IFsuLi5pbml0LnVybExpc3RdIDogW11cbiAgfVxufVxuXG5mdW5jdGlvbiBtYWtlTmV0d29ya0Vycm9yIChyZWFzb24pIHtcbiAgY29uc3QgaXNFcnJvciA9IGlzRXJyb3JMaWtlKHJlYXNvbilcbiAgcmV0dXJuIG1ha2VSZXNwb25zZSh7XG4gICAgdHlwZTogJ2Vycm9yJyxcbiAgICBzdGF0dXM6IDAsXG4gICAgZXJyb3I6IGlzRXJyb3JcbiAgICAgID8gcmVhc29uXG4gICAgICA6IG5ldyBFcnJvcihyZWFzb24gPyBTdHJpbmcocmVhc29uKSA6IHJlYXNvbiksXG4gICAgYWJvcnRlZDogcmVhc29uICYmIHJlYXNvbi5uYW1lID09PSAnQWJvcnRFcnJvcidcbiAgfSlcbn1cblxuZnVuY3Rpb24gbWFrZUZpbHRlcmVkUmVzcG9uc2UgKHJlc3BvbnNlLCBzdGF0ZSkge1xuICBzdGF0ZSA9IHtcbiAgICBpbnRlcm5hbFJlc3BvbnNlOiByZXNwb25zZSxcbiAgICAuLi5zdGF0ZVxuICB9XG5cbiAgcmV0dXJuIG5ldyBQcm94eShyZXNwb25zZSwge1xuICAgIGdldCAodGFyZ2V0LCBwKSB7XG4gICAgICByZXR1cm4gcCBpbiBzdGF0ZSA/IHN0YXRlW3BdIDogdGFyZ2V0W3BdXG4gICAgfSxcbiAgICBzZXQgKHRhcmdldCwgcCwgdmFsdWUpIHtcbiAgICAgIGFzc2VydCghKHAgaW4gc3RhdGUpKVxuICAgICAgdGFyZ2V0W3BdID0gdmFsdWVcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICB9KVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1maWx0ZXJlZC1yZXNwb25zZVxuZnVuY3Rpb24gZmlsdGVyUmVzcG9uc2UgKHJlc3BvbnNlLCB0eXBlKSB7XG4gIC8vIFNldCByZXNwb25zZSB0byB0aGUgZm9sbG93aW5nIGZpbHRlcmVkIHJlc3BvbnNlIHdpdGggcmVzcG9uc2UgYXMgaXRzXG4gIC8vIGludGVybmFsIHJlc3BvbnNlLCBkZXBlbmRpbmcgb24gcmVxdWVzdOKAmXMgcmVzcG9uc2UgdGFpbnRpbmc6XG4gIGlmICh0eXBlID09PSAnYmFzaWMnKSB7XG4gICAgLy8gQSBiYXNpYyBmaWx0ZXJlZCByZXNwb25zZSBpcyBhIGZpbHRlcmVkIHJlc3BvbnNlIHdob3NlIHR5cGUgaXMgXCJiYXNpY1wiXG4gICAgLy8gYW5kIGhlYWRlciBsaXN0IGV4Y2x1ZGVzIGFueSBoZWFkZXJzIGluIGludGVybmFsIHJlc3BvbnNl4oCZcyBoZWFkZXIgbGlzdFxuICAgIC8vIHdob3NlIG5hbWUgaXMgYSBmb3JiaWRkZW4gcmVzcG9uc2UtaGVhZGVyIG5hbWUuXG5cbiAgICAvLyBOb3RlOiB1bmRpY2kgZG9lcyBub3QgaW1wbGVtZW50IGZvcmJpZGRlbiByZXNwb25zZS1oZWFkZXIgbmFtZXNcbiAgICByZXR1cm4gbWFrZUZpbHRlcmVkUmVzcG9uc2UocmVzcG9uc2UsIHtcbiAgICAgIHR5cGU6ICdiYXNpYycsXG4gICAgICBoZWFkZXJzTGlzdDogcmVzcG9uc2UuaGVhZGVyc0xpc3RcbiAgICB9KVxuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdjb3JzJykge1xuICAgIC8vIEEgQ09SUyBmaWx0ZXJlZCByZXNwb25zZSBpcyBhIGZpbHRlcmVkIHJlc3BvbnNlIHdob3NlIHR5cGUgaXMgXCJjb3JzXCJcbiAgICAvLyBhbmQgaGVhZGVyIGxpc3QgZXhjbHVkZXMgYW55IGhlYWRlcnMgaW4gaW50ZXJuYWwgcmVzcG9uc2XigJlzIGhlYWRlclxuICAgIC8vIGxpc3Qgd2hvc2UgbmFtZSBpcyBub3QgYSBDT1JTLXNhZmVsaXN0ZWQgcmVzcG9uc2UtaGVhZGVyIG5hbWUsIGdpdmVuXG4gICAgLy8gaW50ZXJuYWwgcmVzcG9uc2XigJlzIENPUlMtZXhwb3NlZCBoZWFkZXItbmFtZSBsaXN0LlxuXG4gICAgLy8gTm90ZTogdW5kaWNpIGRvZXMgbm90IGltcGxlbWVudCBDT1JTLXNhZmVsaXN0ZWQgcmVzcG9uc2UtaGVhZGVyIG5hbWVzXG4gICAgcmV0dXJuIG1ha2VGaWx0ZXJlZFJlc3BvbnNlKHJlc3BvbnNlLCB7XG4gICAgICB0eXBlOiAnY29ycycsXG4gICAgICBoZWFkZXJzTGlzdDogcmVzcG9uc2UuaGVhZGVyc0xpc3RcbiAgICB9KVxuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdvcGFxdWUnKSB7XG4gICAgLy8gQW4gb3BhcXVlIGZpbHRlcmVkIHJlc3BvbnNlIGlzIGEgZmlsdGVyZWQgcmVzcG9uc2Ugd2hvc2UgdHlwZSBpc1xuICAgIC8vIFwib3BhcXVlXCIsIFVSTCBsaXN0IGlzIHRoZSBlbXB0eSBsaXN0LCBzdGF0dXMgaXMgMCwgc3RhdHVzIG1lc3NhZ2VcbiAgICAvLyBpcyB0aGUgZW1wdHkgYnl0ZSBzZXF1ZW5jZSwgaGVhZGVyIGxpc3QgaXMgZW1wdHksIGFuZCBib2R5IGlzIG51bGwuXG5cbiAgICByZXR1cm4gbWFrZUZpbHRlcmVkUmVzcG9uc2UocmVzcG9uc2UsIHtcbiAgICAgIHR5cGU6ICdvcGFxdWUnLFxuICAgICAgdXJsTGlzdDogT2JqZWN0LmZyZWV6ZShbXSksXG4gICAgICBzdGF0dXM6IDAsXG4gICAgICBzdGF0dXNUZXh0OiAnJyxcbiAgICAgIGJvZHk6IG51bGxcbiAgICB9KVxuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdvcGFxdWVyZWRpcmVjdCcpIHtcbiAgICAvLyBBbiBvcGFxdWUtcmVkaXJlY3QgZmlsdGVyZWQgcmVzcG9uc2UgaXMgYSBmaWx0ZXJlZCByZXNwb25zZSB3aG9zZSB0eXBlXG4gICAgLy8gaXMgXCJvcGFxdWVyZWRpcmVjdFwiLCBzdGF0dXMgaXMgMCwgc3RhdHVzIG1lc3NhZ2UgaXMgdGhlIGVtcHR5IGJ5dGVcbiAgICAvLyBzZXF1ZW5jZSwgaGVhZGVyIGxpc3QgaXMgZW1wdHksIGFuZCBib2R5IGlzIG51bGwuXG5cbiAgICByZXR1cm4gbWFrZUZpbHRlcmVkUmVzcG9uc2UocmVzcG9uc2UsIHtcbiAgICAgIHR5cGU6ICdvcGFxdWVyZWRpcmVjdCcsXG4gICAgICBzdGF0dXM6IDAsXG4gICAgICBzdGF0dXNUZXh0OiAnJyxcbiAgICAgIGhlYWRlcnNMaXN0OiBbXSxcbiAgICAgIGJvZHk6IG51bGxcbiAgICB9KVxuICB9IGVsc2Uge1xuICAgIGFzc2VydChmYWxzZSlcbiAgfVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYXBwcm9wcmlhdGUtbmV0d29yay1lcnJvclxuZnVuY3Rpb24gbWFrZUFwcHJvcHJpYXRlTmV0d29ya0Vycm9yIChmZXRjaFBhcmFtcywgZXJyID0gbnVsbCkge1xuICAvLyAxLiBBc3NlcnQ6IGZldGNoUGFyYW1zIGlzIGNhbmNlbGVkLlxuICBhc3NlcnQoaXNDYW5jZWxsZWQoZmV0Y2hQYXJhbXMpKVxuXG4gIC8vIDIuIFJldHVybiBhbiBhYm9ydGVkIG5ldHdvcmsgZXJyb3IgaWYgZmV0Y2hQYXJhbXMgaXMgYWJvcnRlZDtcbiAgLy8gb3RoZXJ3aXNlIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gIHJldHVybiBpc0Fib3J0ZWQoZmV0Y2hQYXJhbXMpXG4gICAgPyBtYWtlTmV0d29ya0Vycm9yKE9iamVjdC5hc3NpZ24obmV3IERPTUV4Y2VwdGlvbignVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC4nLCAnQWJvcnRFcnJvcicpLCB7IGNhdXNlOiBlcnIgfSkpXG4gICAgOiBtYWtlTmV0d29ya0Vycm9yKE9iamVjdC5hc3NpZ24obmV3IERPTUV4Y2VwdGlvbignUmVxdWVzdCB3YXMgY2FuY2VsbGVkLicpLCB7IGNhdXNlOiBlcnIgfSkpXG59XG5cbi8vIGh0dHBzOi8vd2hhdHByLm9yZy9mZXRjaC8xMzkyLmh0bWwjaW5pdGlhbGl6ZS1hLXJlc3BvbnNlXG5mdW5jdGlvbiBpbml0aWFsaXplUmVzcG9uc2UgKHJlc3BvbnNlLCBpbml0LCBib2R5KSB7XG4gIC8vIDEuIElmIGluaXRbXCJzdGF0dXNcIl0gaXMgbm90IGluIHRoZSByYW5nZSAyMDAgdG8gNTk5LCBpbmNsdXNpdmUsIHRoZW5cbiAgLy8gICAgdGhyb3cgYSBSYW5nZUVycm9yLlxuICBpZiAoaW5pdC5zdGF0dXMgIT09IG51bGwgJiYgKGluaXQuc3RhdHVzIDwgMjAwIHx8IGluaXQuc3RhdHVzID4gNTk5KSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdpbml0W1wic3RhdHVzXCJdIG11c3QgYmUgaW4gdGhlIHJhbmdlIG9mIDIwMCB0byA1OTksIGluY2x1c2l2ZS4nKVxuICB9XG5cbiAgLy8gMi4gSWYgaW5pdFtcInN0YXR1c1RleHRcIl0gZG9lcyBub3QgbWF0Y2ggdGhlIHJlYXNvbi1waHJhc2UgdG9rZW4gcHJvZHVjdGlvbixcbiAgLy8gICAgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKCdzdGF0dXNUZXh0JyBpbiBpbml0ICYmIGluaXQuc3RhdHVzVGV4dCAhPSBudWxsKSB7XG4gICAgLy8gU2VlLCBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjEuMjpcbiAgICAvLyAgIHJlYXNvbi1waHJhc2UgID0gKiggSFRBQiAvIFNQIC8gVkNIQVIgLyBvYnMtdGV4dCApXG4gICAgaWYgKCFpc1ZhbGlkUmVhc29uUGhyYXNlKFN0cmluZyhpbml0LnN0YXR1c1RleHQpKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBzdGF0dXNUZXh0JylcbiAgICB9XG4gIH1cblxuICAvLyAzLiBTZXQgcmVzcG9uc2XigJlzIHJlc3BvbnNl4oCZcyBzdGF0dXMgdG8gaW5pdFtcInN0YXR1c1wiXS5cbiAgaWYgKCdzdGF0dXMnIGluIGluaXQgJiYgaW5pdC5zdGF0dXMgIT0gbnVsbCkge1xuICAgIHJlc3BvbnNlW2tTdGF0ZV0uc3RhdHVzID0gaW5pdC5zdGF0dXNcbiAgfVxuXG4gIC8vIDQuIFNldCByZXNwb25zZeKAmXMgcmVzcG9uc2XigJlzIHN0YXR1cyBtZXNzYWdlIHRvIGluaXRbXCJzdGF0dXNUZXh0XCJdLlxuICBpZiAoJ3N0YXR1c1RleHQnIGluIGluaXQgJiYgaW5pdC5zdGF0dXNUZXh0ICE9IG51bGwpIHtcbiAgICByZXNwb25zZVtrU3RhdGVdLnN0YXR1c1RleHQgPSBpbml0LnN0YXR1c1RleHRcbiAgfVxuXG4gIC8vIDUuIElmIGluaXRbXCJoZWFkZXJzXCJdIGV4aXN0cywgdGhlbiBmaWxsIHJlc3BvbnNl4oCZcyBoZWFkZXJzIHdpdGggaW5pdFtcImhlYWRlcnNcIl0uXG4gIGlmICgnaGVhZGVycycgaW4gaW5pdCAmJiBpbml0LmhlYWRlcnMgIT0gbnVsbCkge1xuICAgIGZpbGwocmVzcG9uc2Vba0hlYWRlcnNdLCBpbml0LmhlYWRlcnMpXG4gIH1cblxuICAvLyA2LiBJZiBib2R5IHdhcyBnaXZlbiwgdGhlbjpcbiAgaWYgKGJvZHkpIHtcbiAgICAvLyAxLiBJZiByZXNwb25zZSdzIHN0YXR1cyBpcyBhIG51bGwgYm9keSBzdGF0dXMsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKG51bGxCb2R5U3RhdHVzLmluY2x1ZGVzKHJlc3BvbnNlLnN0YXR1cykpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnUmVzcG9uc2UgY29uc3RydWN0b3InLFxuICAgICAgICBtZXNzYWdlOiAnSW52YWxpZCByZXNwb25zZSBzdGF0dXMgY29kZSAnICsgcmVzcG9uc2Uuc3RhdHVzXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDIuIFNldCByZXNwb25zZSdzIGJvZHkgdG8gYm9keSdzIGJvZHkuXG4gICAgcmVzcG9uc2Vba1N0YXRlXS5ib2R5ID0gYm9keS5ib2R5XG5cbiAgICAvLyAzLiBJZiBib2R5J3MgdHlwZSBpcyBub24tbnVsbCBhbmQgcmVzcG9uc2UncyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluXG4gICAgLy8gICAgYENvbnRlbnQtVHlwZWAsIHRoZW4gYXBwZW5kIChgQ29udGVudC1UeXBlYCwgYm9keSdzIHR5cGUpIHRvIHJlc3BvbnNlJ3MgaGVhZGVyIGxpc3QuXG4gICAgaWYgKGJvZHkudHlwZSAhPSBudWxsICYmICFyZXNwb25zZVtrU3RhdGVdLmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdDb250ZW50LVR5cGUnKSkge1xuICAgICAgcmVzcG9uc2Vba1N0YXRlXS5oZWFkZXJzTGlzdC5hcHBlbmQoJ2NvbnRlbnQtdHlwZScsIGJvZHkudHlwZSlcbiAgICB9XG4gIH1cbn1cblxud2ViaWRsLmNvbnZlcnRlcnMuUmVhZGFibGVTdHJlYW0gPSB3ZWJpZGwuaW50ZXJmYWNlQ29udmVydGVyKFxuICBSZWFkYWJsZVN0cmVhbVxuKVxuXG53ZWJpZGwuY29udmVydGVycy5Gb3JtRGF0YSA9IHdlYmlkbC5pbnRlcmZhY2VDb252ZXJ0ZXIoXG4gIEZvcm1EYXRhXG4pXG5cbndlYmlkbC5jb252ZXJ0ZXJzLlVSTFNlYXJjaFBhcmFtcyA9IHdlYmlkbC5pbnRlcmZhY2VDb252ZXJ0ZXIoXG4gIFVSTFNlYXJjaFBhcmFtc1xuKVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jdHlwZWRlZmRlZi14bWxodHRwcmVxdWVzdGJvZHlpbml0XG53ZWJpZGwuY29udmVydGVycy5YTUxIdHRwUmVxdWVzdEJvZHlJbml0ID0gZnVuY3Rpb24gKFYpIHtcbiAgaWYgKHR5cGVvZiBWID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcoVilcbiAgfVxuXG4gIGlmIChpc0Jsb2JMaWtlKFYpKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkJsb2IoViwgeyBzdHJpY3Q6IGZhbHNlIH0pXG4gIH1cblxuICBpZiAodHlwZXMuaXNBcnJheUJ1ZmZlcihWKSB8fCB0eXBlcy5pc1R5cGVkQXJyYXkoVikgfHwgdHlwZXMuaXNEYXRhVmlldyhWKSkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5CdWZmZXJTb3VyY2UoVilcbiAgfVxuXG4gIGlmICh1dGlsLmlzRm9ybURhdGFMaWtlKFYpKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkZvcm1EYXRhKFYsIHsgc3RyaWN0OiBmYWxzZSB9KVxuICB9XG5cbiAgaWYgKFYgaW5zdGFuY2VvZiBVUkxTZWFyY2hQYXJhbXMpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuVVJMU2VhcmNoUGFyYW1zKFYpXG4gIH1cblxuICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKFYpXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNib2R5aW5pdFxud2ViaWRsLmNvbnZlcnRlcnMuQm9keUluaXQgPSBmdW5jdGlvbiAoVikge1xuICBpZiAoViBpbnN0YW5jZW9mIFJlYWRhYmxlU3RyZWFtKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLlJlYWRhYmxlU3RyZWFtKFYpXG4gIH1cblxuICAvLyBOb3RlOiB0aGUgc3BlYyBkb2Vzbid0IGluY2x1ZGUgYXN5bmMgaXRlcmFibGVzLFxuICAvLyB0aGlzIGlzIGFuIHVuZGljaSBleHRlbnNpb24uXG4gIGlmIChWPy5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdKSB7XG4gICAgcmV0dXJuIFZcbiAgfVxuXG4gIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5YTUxIdHRwUmVxdWVzdEJvZHlJbml0KFYpXG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLlJlc3BvbnNlSW5pdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGtleTogJ3N0YXR1cycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgc2hvcnQnXSxcbiAgICBkZWZhdWx0VmFsdWU6IDIwMFxuICB9LFxuICB7XG4gICAga2V5OiAnc3RhdHVzVGV4dCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZTogJydcbiAgfSxcbiAge1xuICAgIGtleTogJ2hlYWRlcnMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuSGVhZGVyc0luaXRcbiAgfVxuXSlcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1ha2VOZXR3b3JrRXJyb3IsXG4gIG1ha2VSZXNwb25zZSxcbiAgbWFrZUFwcHJvcHJpYXRlTmV0d29ya0Vycm9yLFxuICBmaWx0ZXJSZXNwb25zZSxcbiAgUmVzcG9uc2UsXG4gIGNsb25lUmVzcG9uc2Vcbn1cbiIsCiAgICAiLyogZ2xvYmFscyBBYm9ydENvbnRyb2xsZXIgKi9cblxuJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgZXh0cmFjdEJvZHksIG1peGluQm9keSwgY2xvbmVCb2R5IH0gPSByZXF1aXJlKCcuL2JvZHknKVxuY29uc3QgeyBIZWFkZXJzLCBmaWxsOiBmaWxsSGVhZGVycywgSGVhZGVyc0xpc3QgfSA9IHJlcXVpcmUoJy4vaGVhZGVycycpXG5jb25zdCB7IEZpbmFsaXphdGlvblJlZ2lzdHJ5IH0gPSByZXF1aXJlKCcuLi9jb21wYXQvZGlzcGF0Y2hlci13ZWFrcmVmJykoKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7XG4gIGlzVmFsaWRIVFRQVG9rZW4sXG4gIHNhbWVPcmlnaW4sXG4gIG5vcm1hbGl6ZU1ldGhvZCxcbiAgbWFrZVBvbGljeUNvbnRhaW5lcixcbiAgbm9ybWFsaXplTWV0aG9kUmVjb3JkXG59ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHtcbiAgZm9yYmlkZGVuTWV0aG9kc1NldCxcbiAgY29yc1NhZmVMaXN0ZWRNZXRob2RzU2V0LFxuICByZWZlcnJlclBvbGljeSxcbiAgcmVxdWVzdFJlZGlyZWN0LFxuICByZXF1ZXN0TW9kZSxcbiAgcmVxdWVzdENyZWRlbnRpYWxzLFxuICByZXF1ZXN0Q2FjaGUsXG4gIHJlcXVlc3REdXBsZXhcbn0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7IGtFbnVtZXJhYmxlUHJvcGVydHkgfSA9IHV0aWxcbmNvbnN0IHsga0hlYWRlcnMsIGtTaWduYWwsIGtTdGF0ZSwga0d1YXJkLCBrUmVhbG0gfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi93ZWJpZGwnKVxuY29uc3QgeyBnZXRHbG9iYWxPcmlnaW4gfSA9IHJlcXVpcmUoJy4vZ2xvYmFsJylcbmNvbnN0IHsgVVJMU2VyaWFsaXplciB9ID0gcmVxdWlyZSgnLi9kYXRhVVJMJylcbmNvbnN0IHsga0hlYWRlcnNMaXN0LCBrQ29uc3RydWN0IH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbmNvbnN0IHsgZ2V0TWF4TGlzdGVuZXJzLCBzZXRNYXhMaXN0ZW5lcnMsIGdldEV2ZW50TGlzdGVuZXJzLCBkZWZhdWx0TWF4TGlzdGVuZXJzIH0gPSByZXF1aXJlKCdldmVudHMnKVxuXG5sZXQgVHJhbnNmb3JtU3RyZWFtID0gZ2xvYmFsVGhpcy5UcmFuc2Zvcm1TdHJlYW1cblxuY29uc3Qga0Fib3J0Q29udHJvbGxlciA9IFN5bWJvbCgnYWJvcnRDb250cm9sbGVyJylcblxuY29uc3QgcmVxdWVzdEZpbmFsaXplciA9IG5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeSgoeyBzaWduYWwsIGFib3J0IH0pID0+IHtcbiAgc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnQpXG59KVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdC1jbGFzc1xuY2xhc3MgUmVxdWVzdCB7XG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tcmVxdWVzdFxuICBjb25zdHJ1Y3RvciAoaW5wdXQsIGluaXQgPSB7fSkge1xuICAgIGlmIChpbnB1dCA9PT0ga0NvbnN0cnVjdCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ1JlcXVlc3QgY29uc3RydWN0b3InIH0pXG5cbiAgICBpbnB1dCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKGlucHV0KVxuICAgIGluaXQgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5pdChpbml0KVxuXG4gICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvd2ViYXBwYXBpcy5odG1sI2Vudmlyb25tZW50LXNldHRpbmdzLW9iamVjdFxuICAgIHRoaXNba1JlYWxtXSA9IHtcbiAgICAgIHNldHRpbmdzT2JqZWN0OiB7XG4gICAgICAgIGJhc2VVcmw6IGdldEdsb2JhbE9yaWdpbigpLFxuICAgICAgICBnZXQgb3JpZ2luICgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5iYXNlVXJsPy5vcmlnaW5cbiAgICAgICAgfSxcbiAgICAgICAgcG9saWN5Q29udGFpbmVyOiBtYWtlUG9saWN5Q29udGFpbmVyKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAxLiBMZXQgcmVxdWVzdCBiZSBudWxsLlxuICAgIGxldCByZXF1ZXN0ID0gbnVsbFxuXG4gICAgLy8gMi4gTGV0IGZhbGxiYWNrTW9kZSBiZSBudWxsLlxuICAgIGxldCBmYWxsYmFja01vZGUgPSBudWxsXG5cbiAgICAvLyAzLiBMZXQgYmFzZVVSTCBiZSB0aGlz4oCZcyByZWxldmFudCBzZXR0aW5ncyBvYmplY3TigJlzIEFQSSBiYXNlIFVSTC5cbiAgICBjb25zdCBiYXNlVXJsID0gdGhpc1trUmVhbG1dLnNldHRpbmdzT2JqZWN0LmJhc2VVcmxcblxuICAgIC8vIDQuIExldCBzaWduYWwgYmUgbnVsbC5cbiAgICBsZXQgc2lnbmFsID0gbnVsbFxuXG4gICAgLy8gNS4gSWYgaW5wdXQgaXMgYSBzdHJpbmcsIHRoZW46XG4gICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIDEuIExldCBwYXJzZWRVUkwgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIGlucHV0IHdpdGggYmFzZVVSTC5cbiAgICAgIC8vIDIuIElmIHBhcnNlZFVSTCBpcyBmYWlsdXJlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgbGV0IHBhcnNlZFVSTFxuICAgICAgdHJ5IHtcbiAgICAgICAgcGFyc2VkVVJMID0gbmV3IFVSTChpbnB1dCwgYmFzZVVybClcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGYWlsZWQgdG8gcGFyc2UgVVJMIGZyb20gJyArIGlucHV0LCB7IGNhdXNlOiBlcnIgfSlcbiAgICAgIH1cblxuICAgICAgLy8gMy4gSWYgcGFyc2VkVVJMIGluY2x1ZGVzIGNyZWRlbnRpYWxzLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgaWYgKHBhcnNlZFVSTC51c2VybmFtZSB8fCBwYXJzZWRVUkwucGFzc3dvcmQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAnUmVxdWVzdCBjYW5ub3QgYmUgY29uc3RydWN0ZWQgZnJvbSBhIFVSTCB0aGF0IGluY2x1ZGVzIGNyZWRlbnRpYWxzOiAnICtcbiAgICAgICAgICAgIGlucHV0XG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgLy8gNC4gU2V0IHJlcXVlc3QgdG8gYSBuZXcgcmVxdWVzdCB3aG9zZSBVUkwgaXMgcGFyc2VkVVJMLlxuICAgICAgcmVxdWVzdCA9IG1ha2VSZXF1ZXN0KHsgdXJsTGlzdDogW3BhcnNlZFVSTF0gfSlcblxuICAgICAgLy8gNS4gU2V0IGZhbGxiYWNrTW9kZSB0byBcImNvcnNcIi5cbiAgICAgIGZhbGxiYWNrTW9kZSA9ICdjb3JzJ1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyA2LiBPdGhlcndpc2U6XG5cbiAgICAgIC8vIDcuIEFzc2VydDogaW5wdXQgaXMgYSBSZXF1ZXN0IG9iamVjdC5cbiAgICAgIGFzc2VydChpbnB1dCBpbnN0YW5jZW9mIFJlcXVlc3QpXG5cbiAgICAgIC8vIDguIFNldCByZXF1ZXN0IHRvIGlucHV04oCZcyByZXF1ZXN0LlxuICAgICAgcmVxdWVzdCA9IGlucHV0W2tTdGF0ZV1cblxuICAgICAgLy8gOS4gU2V0IHNpZ25hbCB0byBpbnB1dOKAmXMgc2lnbmFsLlxuICAgICAgc2lnbmFsID0gaW5wdXRba1NpZ25hbF1cbiAgICB9XG5cbiAgICAvLyA3LiBMZXQgb3JpZ2luIGJlIHRoaXPigJlzIHJlbGV2YW50IHNldHRpbmdzIG9iamVjdOKAmXMgb3JpZ2luLlxuICAgIGNvbnN0IG9yaWdpbiA9IHRoaXNba1JlYWxtXS5zZXR0aW5nc09iamVjdC5vcmlnaW5cblxuICAgIC8vIDguIExldCB3aW5kb3cgYmUgXCJjbGllbnRcIi5cbiAgICBsZXQgd2luZG93ID0gJ2NsaWVudCdcblxuICAgIC8vIDkuIElmIHJlcXVlc3TigJlzIHdpbmRvdyBpcyBhbiBlbnZpcm9ubWVudCBzZXR0aW5ncyBvYmplY3QgYW5kIGl0cyBvcmlnaW5cbiAgICAvLyBpcyBzYW1lIG9yaWdpbiB3aXRoIG9yaWdpbiwgdGhlbiBzZXQgd2luZG93IHRvIHJlcXVlc3TigJlzIHdpbmRvdy5cbiAgICBpZiAoXG4gICAgICByZXF1ZXN0LndpbmRvdz8uY29uc3RydWN0b3I/Lm5hbWUgPT09ICdFbnZpcm9ubWVudFNldHRpbmdzT2JqZWN0JyAmJlxuICAgICAgc2FtZU9yaWdpbihyZXF1ZXN0LndpbmRvdywgb3JpZ2luKVxuICAgICkge1xuICAgICAgd2luZG93ID0gcmVxdWVzdC53aW5kb3dcbiAgICB9XG5cbiAgICAvLyAxMC4gSWYgaW5pdFtcIndpbmRvd1wiXSBleGlzdHMgYW5kIGlzIG5vbi1udWxsLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmIChpbml0LndpbmRvdyAhPSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAnd2luZG93JyBvcHRpb24gJyR7d2luZG93fScgbXVzdCBiZSBudWxsYClcbiAgICB9XG5cbiAgICAvLyAxMS4gSWYgaW5pdFtcIndpbmRvd1wiXSBleGlzdHMsIHRoZW4gc2V0IHdpbmRvdyB0byBcIm5vLXdpbmRvd1wiLlxuICAgIGlmICgnd2luZG93JyBpbiBpbml0KSB7XG4gICAgICB3aW5kb3cgPSAnbm8td2luZG93J1xuICAgIH1cblxuICAgIC8vIDEyLiBTZXQgcmVxdWVzdCB0byBhIG5ldyByZXF1ZXN0IHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICAgIHJlcXVlc3QgPSBtYWtlUmVxdWVzdCh7XG4gICAgICAvLyBVUkwgcmVxdWVzdOKAmXMgVVJMLlxuICAgICAgLy8gdW5kaWNpIGltcGxlbWVudGF0aW9uIG5vdGU6IHRoaXMgaXMgc2V0IGFzIHRoZSBmaXJzdCBpdGVtIGluIHJlcXVlc3QncyB1cmxMaXN0IGluIG1ha2VSZXF1ZXN0XG4gICAgICAvLyBtZXRob2QgcmVxdWVzdOKAmXMgbWV0aG9kLlxuICAgICAgbWV0aG9kOiByZXF1ZXN0Lm1ldGhvZCxcbiAgICAgIC8vIGhlYWRlciBsaXN0IEEgY29weSBvZiByZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cbiAgICAgIC8vIHVuZGljaSBpbXBsZW1lbnRhdGlvbiBub3RlOiBoZWFkZXJzTGlzdCBpcyBjbG9uZWQgaW4gbWFrZVJlcXVlc3RcbiAgICAgIGhlYWRlcnNMaXN0OiByZXF1ZXN0LmhlYWRlcnNMaXN0LFxuICAgICAgLy8gdW5zYWZlLXJlcXVlc3QgZmxhZyBTZXQuXG4gICAgICB1bnNhZmVSZXF1ZXN0OiByZXF1ZXN0LnVuc2FmZVJlcXVlc3QsXG4gICAgICAvLyBjbGllbnQgVGhpc+KAmXMgcmVsZXZhbnQgc2V0dGluZ3Mgb2JqZWN0LlxuICAgICAgY2xpZW50OiB0aGlzW2tSZWFsbV0uc2V0dGluZ3NPYmplY3QsXG4gICAgICAvLyB3aW5kb3cgd2luZG93LlxuICAgICAgd2luZG93LFxuICAgICAgLy8gcHJpb3JpdHkgcmVxdWVzdOKAmXMgcHJpb3JpdHkuXG4gICAgICBwcmlvcml0eTogcmVxdWVzdC5wcmlvcml0eSxcbiAgICAgIC8vIG9yaWdpbiByZXF1ZXN04oCZcyBvcmlnaW4uIFRoZSBwcm9wYWdhdGlvbiBvZiB0aGUgb3JpZ2luIGlzIG9ubHkgc2lnbmlmaWNhbnQgZm9yIG5hdmlnYXRpb24gcmVxdWVzdHNcbiAgICAgIC8vIGJlaW5nIGhhbmRsZWQgYnkgYSBzZXJ2aWNlIHdvcmtlci4gSW4gdGhpcyBzY2VuYXJpbyBhIHJlcXVlc3QgY2FuIGhhdmUgYW4gb3JpZ2luIHRoYXQgaXMgZGlmZmVyZW50XG4gICAgICAvLyBmcm9tIHRoZSBjdXJyZW50IGNsaWVudC5cbiAgICAgIG9yaWdpbjogcmVxdWVzdC5vcmlnaW4sXG4gICAgICAvLyByZWZlcnJlciByZXF1ZXN04oCZcyByZWZlcnJlci5cbiAgICAgIHJlZmVycmVyOiByZXF1ZXN0LnJlZmVycmVyLFxuICAgICAgLy8gcmVmZXJyZXIgcG9saWN5IHJlcXVlc3TigJlzIHJlZmVycmVyIHBvbGljeS5cbiAgICAgIHJlZmVycmVyUG9saWN5OiByZXF1ZXN0LnJlZmVycmVyUG9saWN5LFxuICAgICAgLy8gbW9kZSByZXF1ZXN04oCZcyBtb2RlLlxuICAgICAgbW9kZTogcmVxdWVzdC5tb2RlLFxuICAgICAgLy8gY3JlZGVudGlhbHMgbW9kZSByZXF1ZXN04oCZcyBjcmVkZW50aWFscyBtb2RlLlxuICAgICAgY3JlZGVudGlhbHM6IHJlcXVlc3QuY3JlZGVudGlhbHMsXG4gICAgICAvLyBjYWNoZSBtb2RlIHJlcXVlc3TigJlzIGNhY2hlIG1vZGUuXG4gICAgICBjYWNoZTogcmVxdWVzdC5jYWNoZSxcbiAgICAgIC8vIHJlZGlyZWN0IG1vZGUgcmVxdWVzdOKAmXMgcmVkaXJlY3QgbW9kZS5cbiAgICAgIHJlZGlyZWN0OiByZXF1ZXN0LnJlZGlyZWN0LFxuICAgICAgLy8gaW50ZWdyaXR5IG1ldGFkYXRhIHJlcXVlc3TigJlzIGludGVncml0eSBtZXRhZGF0YS5cbiAgICAgIGludGVncml0eTogcmVxdWVzdC5pbnRlZ3JpdHksXG4gICAgICAvLyBrZWVwYWxpdmUgcmVxdWVzdOKAmXMga2VlcGFsaXZlLlxuICAgICAga2VlcGFsaXZlOiByZXF1ZXN0LmtlZXBhbGl2ZSxcbiAgICAgIC8vIHJlbG9hZC1uYXZpZ2F0aW9uIGZsYWcgcmVxdWVzdOKAmXMgcmVsb2FkLW5hdmlnYXRpb24gZmxhZy5cbiAgICAgIHJlbG9hZE5hdmlnYXRpb246IHJlcXVlc3QucmVsb2FkTmF2aWdhdGlvbixcbiAgICAgIC8vIGhpc3RvcnktbmF2aWdhdGlvbiBmbGFnIHJlcXVlc3TigJlzIGhpc3RvcnktbmF2aWdhdGlvbiBmbGFnLlxuICAgICAgaGlzdG9yeU5hdmlnYXRpb246IHJlcXVlc3QuaGlzdG9yeU5hdmlnYXRpb24sXG4gICAgICAvLyBVUkwgbGlzdCBBIGNsb25lIG9mIHJlcXVlc3TigJlzIFVSTCBsaXN0LlxuICAgICAgdXJsTGlzdDogWy4uLnJlcXVlc3QudXJsTGlzdF1cbiAgICB9KVxuXG4gICAgY29uc3QgaW5pdEhhc0tleSA9IE9iamVjdC5rZXlzKGluaXQpLmxlbmd0aCAhPT0gMFxuXG4gICAgLy8gMTMuIElmIGluaXQgaXMgbm90IGVtcHR5LCB0aGVuOlxuICAgIGlmIChpbml0SGFzS2V5KSB7XG4gICAgICAvLyAxLiBJZiByZXF1ZXN04oCZcyBtb2RlIGlzIFwibmF2aWdhdGVcIiwgdGhlbiBzZXQgaXQgdG8gXCJzYW1lLW9yaWdpblwiLlxuICAgICAgaWYgKHJlcXVlc3QubW9kZSA9PT0gJ25hdmlnYXRlJykge1xuICAgICAgICByZXF1ZXN0Lm1vZGUgPSAnc2FtZS1vcmlnaW4nXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIFVuc2V0IHJlcXVlc3TigJlzIHJlbG9hZC1uYXZpZ2F0aW9uIGZsYWcuXG4gICAgICByZXF1ZXN0LnJlbG9hZE5hdmlnYXRpb24gPSBmYWxzZVxuXG4gICAgICAvLyAzLiBVbnNldCByZXF1ZXN04oCZcyBoaXN0b3J5LW5hdmlnYXRpb24gZmxhZy5cbiAgICAgIHJlcXVlc3QuaGlzdG9yeU5hdmlnYXRpb24gPSBmYWxzZVxuXG4gICAgICAvLyA0LiBTZXQgcmVxdWVzdOKAmXMgb3JpZ2luIHRvIFwiY2xpZW50XCIuXG4gICAgICByZXF1ZXN0Lm9yaWdpbiA9ICdjbGllbnQnXG5cbiAgICAgIC8vIDUuIFNldCByZXF1ZXN04oCZcyByZWZlcnJlciB0byBcImNsaWVudFwiXG4gICAgICByZXF1ZXN0LnJlZmVycmVyID0gJ2NsaWVudCdcblxuICAgICAgLy8gNi4gU2V0IHJlcXVlc3TigJlzIHJlZmVycmVyIHBvbGljeSB0byB0aGUgZW1wdHkgc3RyaW5nLlxuICAgICAgcmVxdWVzdC5yZWZlcnJlclBvbGljeSA9ICcnXG5cbiAgICAgIC8vIDcuIFNldCByZXF1ZXN04oCZcyBVUkwgdG8gcmVxdWVzdOKAmXMgY3VycmVudCBVUkwuXG4gICAgICByZXF1ZXN0LnVybCA9IHJlcXVlc3QudXJsTGlzdFtyZXF1ZXN0LnVybExpc3QubGVuZ3RoIC0gMV1cblxuICAgICAgLy8gOC4gU2V0IHJlcXVlc3TigJlzIFVSTCBsaXN0IHRvIMKrIHJlcXVlc3TigJlzIFVSTCDCuy5cbiAgICAgIHJlcXVlc3QudXJsTGlzdCA9IFtyZXF1ZXN0LnVybF1cbiAgICB9XG5cbiAgICAvLyAxNC4gSWYgaW5pdFtcInJlZmVycmVyXCJdIGV4aXN0cywgdGhlbjpcbiAgICBpZiAoaW5pdC5yZWZlcnJlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyAxLiBMZXQgcmVmZXJyZXIgYmUgaW5pdFtcInJlZmVycmVyXCJdLlxuICAgICAgY29uc3QgcmVmZXJyZXIgPSBpbml0LnJlZmVycmVyXG5cbiAgICAgIC8vIDIuIElmIHJlZmVycmVyIGlzIHRoZSBlbXB0eSBzdHJpbmcsIHRoZW4gc2V0IHJlcXVlc3TigJlzIHJlZmVycmVyIHRvIFwibm8tcmVmZXJyZXJcIi5cbiAgICAgIGlmIChyZWZlcnJlciA9PT0gJycpIHtcbiAgICAgICAgcmVxdWVzdC5yZWZlcnJlciA9ICduby1yZWZlcnJlcidcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIDEuIExldCBwYXJzZWRSZWZlcnJlciBiZSB0aGUgcmVzdWx0IG9mIHBhcnNpbmcgcmVmZXJyZXIgd2l0aFxuICAgICAgICAvLyBiYXNlVVJMLlxuICAgICAgICAvLyAyLiBJZiBwYXJzZWRSZWZlcnJlciBpcyBmYWlsdXJlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgICBsZXQgcGFyc2VkUmVmZXJyZXJcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBwYXJzZWRSZWZlcnJlciA9IG5ldyBVUkwocmVmZXJyZXIsIGJhc2VVcmwpXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFJlZmVycmVyIFwiJHtyZWZlcnJlcn1cIiBpcyBub3QgYSB2YWxpZCBVUkwuYCwgeyBjYXVzZTogZXJyIH0pXG4gICAgICAgIH1cblxuICAgICAgICAvLyAzLiBJZiBvbmUgb2YgdGhlIGZvbGxvd2luZyBpcyB0cnVlXG4gICAgICAgIC8vIC0gcGFyc2VkUmVmZXJyZXLigJlzIHNjaGVtZSBpcyBcImFib3V0XCIgYW5kIHBhdGggaXMgdGhlIHN0cmluZyBcImNsaWVudFwiXG4gICAgICAgIC8vIC0gcGFyc2VkUmVmZXJyZXLigJlzIG9yaWdpbiBpcyBub3Qgc2FtZSBvcmlnaW4gd2l0aCBvcmlnaW5cbiAgICAgICAgLy8gdGhlbiBzZXQgcmVxdWVzdOKAmXMgcmVmZXJyZXIgdG8gXCJjbGllbnRcIi5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIChwYXJzZWRSZWZlcnJlci5wcm90b2NvbCA9PT0gJ2Fib3V0OicgJiYgcGFyc2VkUmVmZXJyZXIuaG9zdG5hbWUgPT09ICdjbGllbnQnKSB8fFxuICAgICAgICAgIChvcmlnaW4gJiYgIXNhbWVPcmlnaW4ocGFyc2VkUmVmZXJyZXIsIHRoaXNba1JlYWxtXS5zZXR0aW5nc09iamVjdC5iYXNlVXJsKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmVxdWVzdC5yZWZlcnJlciA9ICdjbGllbnQnXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gNC4gT3RoZXJ3aXNlLCBzZXQgcmVxdWVzdOKAmXMgcmVmZXJyZXIgdG8gcGFyc2VkUmVmZXJyZXIuXG4gICAgICAgICAgcmVxdWVzdC5yZWZlcnJlciA9IHBhcnNlZFJlZmVycmVyXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAxNS4gSWYgaW5pdFtcInJlZmVycmVyUG9saWN5XCJdIGV4aXN0cywgdGhlbiBzZXQgcmVxdWVzdOKAmXMgcmVmZXJyZXIgcG9saWN5XG4gICAgLy8gdG8gaXQuXG4gICAgaWYgKGluaXQucmVmZXJyZXJQb2xpY3kgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVxdWVzdC5yZWZlcnJlclBvbGljeSA9IGluaXQucmVmZXJyZXJQb2xpY3lcbiAgICB9XG5cbiAgICAvLyAxNi4gTGV0IG1vZGUgYmUgaW5pdFtcIm1vZGVcIl0gaWYgaXQgZXhpc3RzLCBhbmQgZmFsbGJhY2tNb2RlIG90aGVyd2lzZS5cbiAgICBsZXQgbW9kZVxuICAgIGlmIChpbml0Lm1vZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbW9kZSA9IGluaXQubW9kZVxuICAgIH0gZWxzZSB7XG4gICAgICBtb2RlID0gZmFsbGJhY2tNb2RlXG4gICAgfVxuXG4gICAgLy8gMTcuIElmIG1vZGUgaXMgXCJuYXZpZ2F0ZVwiLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmIChtb2RlID09PSAnbmF2aWdhdGUnKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ1JlcXVlc3QgY29uc3RydWN0b3InLFxuICAgICAgICBtZXNzYWdlOiAnaW52YWxpZCByZXF1ZXN0IG1vZGUgbmF2aWdhdGUuJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAxOC4gSWYgbW9kZSBpcyBub24tbnVsbCwgc2V0IHJlcXVlc3TigJlzIG1vZGUgdG8gbW9kZS5cbiAgICBpZiAobW9kZSAhPSBudWxsKSB7XG4gICAgICByZXF1ZXN0Lm1vZGUgPSBtb2RlXG4gICAgfVxuXG4gICAgLy8gMTkuIElmIGluaXRbXCJjcmVkZW50aWFsc1wiXSBleGlzdHMsIHRoZW4gc2V0IHJlcXVlc3TigJlzIGNyZWRlbnRpYWxzIG1vZGVcbiAgICAvLyB0byBpdC5cbiAgICBpZiAoaW5pdC5jcmVkZW50aWFscyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXF1ZXN0LmNyZWRlbnRpYWxzID0gaW5pdC5jcmVkZW50aWFsc1xuICAgIH1cblxuICAgIC8vIDE4LiBJZiBpbml0W1wiY2FjaGVcIl0gZXhpc3RzLCB0aGVuIHNldCByZXF1ZXN04oCZcyBjYWNoZSBtb2RlIHRvIGl0LlxuICAgIGlmIChpbml0LmNhY2hlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlcXVlc3QuY2FjaGUgPSBpbml0LmNhY2hlXG4gICAgfVxuXG4gICAgLy8gMjEuIElmIHJlcXVlc3TigJlzIGNhY2hlIG1vZGUgaXMgXCJvbmx5LWlmLWNhY2hlZFwiIGFuZCByZXF1ZXN04oCZcyBtb2RlIGlzXG4gICAgLy8gbm90IFwic2FtZS1vcmlnaW5cIiwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAocmVxdWVzdC5jYWNoZSA9PT0gJ29ubHktaWYtY2FjaGVkJyAmJiByZXF1ZXN0Lm1vZGUgIT09ICdzYW1lLW9yaWdpbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIFwiJ29ubHktaWYtY2FjaGVkJyBjYW4gYmUgc2V0IG9ubHkgd2l0aCAnc2FtZS1vcmlnaW4nIG1vZGVcIlxuICAgICAgKVxuICAgIH1cblxuICAgIC8vIDIyLiBJZiBpbml0W1wicmVkaXJlY3RcIl0gZXhpc3RzLCB0aGVuIHNldCByZXF1ZXN04oCZcyByZWRpcmVjdCBtb2RlIHRvIGl0LlxuICAgIGlmIChpbml0LnJlZGlyZWN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlcXVlc3QucmVkaXJlY3QgPSBpbml0LnJlZGlyZWN0XG4gICAgfVxuXG4gICAgLy8gMjMuIElmIGluaXRbXCJpbnRlZ3JpdHlcIl0gZXhpc3RzLCB0aGVuIHNldCByZXF1ZXN04oCZcyBpbnRlZ3JpdHkgbWV0YWRhdGEgdG8gaXQuXG4gICAgaWYgKGluaXQuaW50ZWdyaXR5ICE9IG51bGwpIHtcbiAgICAgIHJlcXVlc3QuaW50ZWdyaXR5ID0gU3RyaW5nKGluaXQuaW50ZWdyaXR5KVxuICAgIH1cblxuICAgIC8vIDI0LiBJZiBpbml0W1wia2VlcGFsaXZlXCJdIGV4aXN0cywgdGhlbiBzZXQgcmVxdWVzdOKAmXMga2VlcGFsaXZlIHRvIGl0LlxuICAgIGlmIChpbml0LmtlZXBhbGl2ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXF1ZXN0LmtlZXBhbGl2ZSA9IEJvb2xlYW4oaW5pdC5rZWVwYWxpdmUpXG4gICAgfVxuXG4gICAgLy8gMjUuIElmIGluaXRbXCJtZXRob2RcIl0gZXhpc3RzLCB0aGVuOlxuICAgIGlmIChpbml0Lm1ldGhvZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyAxLiBMZXQgbWV0aG9kIGJlIGluaXRbXCJtZXRob2RcIl0uXG4gICAgICBsZXQgbWV0aG9kID0gaW5pdC5tZXRob2RcblxuICAgICAgLy8gMi4gSWYgbWV0aG9kIGlzIG5vdCBhIG1ldGhvZCBvciBtZXRob2QgaXMgYSBmb3JiaWRkZW4gbWV0aG9kLCB0aGVuXG4gICAgICAvLyB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGlmICghaXNWYWxpZEhUVFBUb2tlbihtZXRob2QpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCcke21ldGhvZH0nIGlzIG5vdCBhIHZhbGlkIEhUVFAgbWV0aG9kLmApXG4gICAgICB9XG5cbiAgICAgIGlmIChmb3JiaWRkZW5NZXRob2RzU2V0LmhhcyhtZXRob2QudG9VcHBlckNhc2UoKSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJyR7bWV0aG9kfScgSFRUUCBtZXRob2QgaXMgdW5zdXBwb3J0ZWQuYClcbiAgICAgIH1cblxuICAgICAgLy8gMy4gTm9ybWFsaXplIG1ldGhvZC5cbiAgICAgIG1ldGhvZCA9IG5vcm1hbGl6ZU1ldGhvZFJlY29yZFttZXRob2RdID8/IG5vcm1hbGl6ZU1ldGhvZChtZXRob2QpXG5cbiAgICAgIC8vIDQuIFNldCByZXF1ZXN04oCZcyBtZXRob2QgdG8gbWV0aG9kLlxuICAgICAgcmVxdWVzdC5tZXRob2QgPSBtZXRob2RcbiAgICB9XG5cbiAgICAvLyAyNi4gSWYgaW5pdFtcInNpZ25hbFwiXSBleGlzdHMsIHRoZW4gc2V0IHNpZ25hbCB0byBpdC5cbiAgICBpZiAoaW5pdC5zaWduYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgc2lnbmFsID0gaW5pdC5zaWduYWxcbiAgICB9XG5cbiAgICAvLyAyNy4gU2V0IHRoaXPigJlzIHJlcXVlc3QgdG8gcmVxdWVzdC5cbiAgICB0aGlzW2tTdGF0ZV0gPSByZXF1ZXN0XG5cbiAgICAvLyAyOC4gU2V0IHRoaXPigJlzIHNpZ25hbCB0byBhIG5ldyBBYm9ydFNpZ25hbCBvYmplY3Qgd2l0aCB0aGlz4oCZcyByZWxldmFudFxuICAgIC8vIFJlYWxtLlxuICAgIC8vIFRPRE86IGNvdWxkIHRoaXMgYmUgc2ltcGxpZmllZCB3aXRoIEFib3J0U2lnbmFsLmFueVxuICAgIC8vIChodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2RvbS1hYm9ydHNpZ25hbC1hbnkpXG4gICAgY29uc3QgYWMgPSBuZXcgQWJvcnRDb250cm9sbGVyKClcbiAgICB0aGlzW2tTaWduYWxdID0gYWMuc2lnbmFsXG4gICAgdGhpc1trU2lnbmFsXVtrUmVhbG1dID0gdGhpc1trUmVhbG1dXG5cbiAgICAvLyAyOS4gSWYgc2lnbmFsIGlzIG5vdCBudWxsLCB0aGVuIG1ha2UgdGhpc+KAmXMgc2lnbmFsIGZvbGxvdyBzaWduYWwuXG4gICAgaWYgKHNpZ25hbCAhPSBudWxsKSB7XG4gICAgICBpZiAoXG4gICAgICAgICFzaWduYWwgfHxcbiAgICAgICAgdHlwZW9mIHNpZ25hbC5hYm9ydGVkICE9PSAnYm9vbGVhbicgfHxcbiAgICAgICAgdHlwZW9mIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyICE9PSAnZnVuY3Rpb24nXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICBcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ1JlcXVlc3QnOiBtZW1iZXIgc2lnbmFsIGlzIG5vdCBvZiB0eXBlIEFib3J0U2lnbmFsLlwiXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgIGFjLmFib3J0KHNpZ25hbC5yZWFzb24pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBLZWVwIGEgc3Ryb25nIHJlZiB0byBhYyB3aGlsZSByZXF1ZXN0IG9iamVjdFxuICAgICAgICAvLyBpcyBhbGl2ZS4gVGhpcyBpcyBuZWVkZWQgdG8gcHJldmVudCBBYm9ydENvbnRyb2xsZXJcbiAgICAgICAgLy8gZnJvbSBiZWluZyBwcmVtYXR1cmVseSBnYXJiYWdlIGNvbGxlY3RlZC5cbiAgICAgICAgLy8gU2VlLCBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMTkyNi5cbiAgICAgICAgdGhpc1trQWJvcnRDb250cm9sbGVyXSA9IGFjXG5cbiAgICAgICAgY29uc3QgYWNSZWYgPSBuZXcgV2Vha1JlZihhYylcbiAgICAgICAgY29uc3QgYWJvcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3QgYWMgPSBhY1JlZi5kZXJlZigpXG4gICAgICAgICAgaWYgKGFjICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGFjLmFib3J0KHRoaXMucmVhc29uKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoaXJkLXBhcnR5IEFib3J0Q29udHJvbGxlcnMgbWF5IG5vdCB3b3JrIHdpdGggdGhlc2UuXG4gICAgICAgIC8vIFNlZSwgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvcHVsbC8xOTEwI2lzc3VlY29tbWVudC0xNDY0NDk1NjE5LlxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIElmIHRoZSBtYXggYW1vdW50IG9mIGxpc3RlbmVycyBpcyBlcXVhbCB0byB0aGUgZGVmYXVsdCwgaW5jcmVhc2UgaXRcbiAgICAgICAgICAvLyBUaGlzIGlzIG9ubHkgYXZhaWxhYmxlIGluIG5vZGUgPj0gdjE5LjkuMFxuICAgICAgICAgIGlmICh0eXBlb2YgZ2V0TWF4TGlzdGVuZXJzID09PSAnZnVuY3Rpb24nICYmIGdldE1heExpc3RlbmVycyhzaWduYWwpID09PSBkZWZhdWx0TWF4TGlzdGVuZXJzKSB7XG4gICAgICAgICAgICBzZXRNYXhMaXN0ZW5lcnMoMTAwLCBzaWduYWwpXG4gICAgICAgICAgfSBlbHNlIGlmIChnZXRFdmVudExpc3RlbmVycyhzaWduYWwsICdhYm9ydCcpLmxlbmd0aCA+PSBkZWZhdWx0TWF4TGlzdGVuZXJzKSB7XG4gICAgICAgICAgICBzZXRNYXhMaXN0ZW5lcnMoMTAwLCBzaWduYWwpXG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIHt9XG5cbiAgICAgICAgdXRpbC5hZGRBYm9ydExpc3RlbmVyKHNpZ25hbCwgYWJvcnQpXG4gICAgICAgIHJlcXVlc3RGaW5hbGl6ZXIucmVnaXN0ZXIoYWMsIHsgc2lnbmFsLCBhYm9ydCB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDMwLiBTZXQgdGhpc+KAmXMgaGVhZGVycyB0byBhIG5ldyBIZWFkZXJzIG9iamVjdCB3aXRoIHRoaXPigJlzIHJlbGV2YW50XG4gICAgLy8gUmVhbG0sIHdob3NlIGhlYWRlciBsaXN0IGlzIHJlcXVlc3TigJlzIGhlYWRlciBsaXN0IGFuZCBndWFyZCBpc1xuICAgIC8vIFwicmVxdWVzdFwiLlxuICAgIHRoaXNba0hlYWRlcnNdID0gbmV3IEhlYWRlcnMoa0NvbnN0cnVjdClcbiAgICB0aGlzW2tIZWFkZXJzXVtrSGVhZGVyc0xpc3RdID0gcmVxdWVzdC5oZWFkZXJzTGlzdFxuICAgIHRoaXNba0hlYWRlcnNdW2tHdWFyZF0gPSAncmVxdWVzdCdcbiAgICB0aGlzW2tIZWFkZXJzXVtrUmVhbG1dID0gdGhpc1trUmVhbG1dXG5cbiAgICAvLyAzMS4gSWYgdGhpc+KAmXMgcmVxdWVzdOKAmXMgbW9kZSBpcyBcIm5vLWNvcnNcIiwgdGhlbjpcbiAgICBpZiAobW9kZSA9PT0gJ25vLWNvcnMnKSB7XG4gICAgICAvLyAxLiBJZiB0aGlz4oCZcyByZXF1ZXN04oCZcyBtZXRob2QgaXMgbm90IGEgQ09SUy1zYWZlbGlzdGVkIG1ldGhvZCxcbiAgICAgIC8vIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICBpZiAoIWNvcnNTYWZlTGlzdGVkTWV0aG9kc1NldC5oYXMocmVxdWVzdC5tZXRob2QpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgYCcke3JlcXVlc3QubWV0aG9kfSBpcyB1bnN1cHBvcnRlZCBpbiBuby1jb3JzIG1vZGUuYFxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIFNldCB0aGlz4oCZcyBoZWFkZXJz4oCZcyBndWFyZCB0byBcInJlcXVlc3Qtbm8tY29yc1wiLlxuICAgICAgdGhpc1trSGVhZGVyc11ba0d1YXJkXSA9ICdyZXF1ZXN0LW5vLWNvcnMnXG4gICAgfVxuXG4gICAgLy8gMzIuIElmIGluaXQgaXMgbm90IGVtcHR5LCB0aGVuOlxuICAgIGlmIChpbml0SGFzS2V5KSB7XG4gICAgICAvKiogQHR5cGUge0hlYWRlcnNMaXN0fSAqL1xuICAgICAgY29uc3QgaGVhZGVyc0xpc3QgPSB0aGlzW2tIZWFkZXJzXVtrSGVhZGVyc0xpc3RdXG4gICAgICAvLyAxLiBMZXQgaGVhZGVycyBiZSBhIGNvcHkgb2YgdGhpc+KAmXMgaGVhZGVycyBhbmQgaXRzIGFzc29jaWF0ZWQgaGVhZGVyXG4gICAgICAvLyBsaXN0LlxuICAgICAgLy8gMi4gSWYgaW5pdFtcImhlYWRlcnNcIl0gZXhpc3RzLCB0aGVuIHNldCBoZWFkZXJzIHRvIGluaXRbXCJoZWFkZXJzXCJdLlxuICAgICAgY29uc3QgaGVhZGVycyA9IGluaXQuaGVhZGVycyAhPT0gdW5kZWZpbmVkID8gaW5pdC5oZWFkZXJzIDogbmV3IEhlYWRlcnNMaXN0KGhlYWRlcnNMaXN0KVxuXG4gICAgICAvLyAzLiBFbXB0eSB0aGlz4oCZcyBoZWFkZXJz4oCZcyBoZWFkZXIgbGlzdC5cbiAgICAgIGhlYWRlcnNMaXN0LmNsZWFyKClcblxuICAgICAgLy8gNC4gSWYgaGVhZGVycyBpcyBhIEhlYWRlcnMgb2JqZWN0LCB0aGVuIGZvciBlYWNoIGhlYWRlciBpbiBpdHMgaGVhZGVyXG4gICAgICAvLyBsaXN0LCBhcHBlbmQgaGVhZGVy4oCZcyBuYW1lL2hlYWRlcuKAmXMgdmFsdWUgdG8gdGhpc+KAmXMgaGVhZGVycy5cbiAgICAgIGlmIChoZWFkZXJzIGluc3RhbmNlb2YgSGVhZGVyc0xpc3QpIHtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIGhlYWRlcnMpIHtcbiAgICAgICAgICBoZWFkZXJzTGlzdC5hcHBlbmQoa2V5LCB2YWwpXG4gICAgICAgIH1cbiAgICAgICAgLy8gTm90ZTogQ29weSB0aGUgYHNldC1jb29raWVgIG1ldGEtZGF0YS5cbiAgICAgICAgaGVhZGVyc0xpc3QuY29va2llcyA9IGhlYWRlcnMuY29va2llc1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gNS4gT3RoZXJ3aXNlLCBmaWxsIHRoaXPigJlzIGhlYWRlcnMgd2l0aCBoZWFkZXJzLlxuICAgICAgICBmaWxsSGVhZGVycyh0aGlzW2tIZWFkZXJzXSwgaGVhZGVycylcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAzMy4gTGV0IGlucHV0Qm9keSBiZSBpbnB1dOKAmXMgcmVxdWVzdOKAmXMgYm9keSBpZiBpbnB1dCBpcyBhIFJlcXVlc3RcbiAgICAvLyBvYmplY3Q7IG90aGVyd2lzZSBudWxsLlxuICAgIGNvbnN0IGlucHV0Qm9keSA9IGlucHV0IGluc3RhbmNlb2YgUmVxdWVzdCA/IGlucHV0W2tTdGF0ZV0uYm9keSA6IG51bGxcblxuICAgIC8vIDM0LiBJZiBlaXRoZXIgaW5pdFtcImJvZHlcIl0gZXhpc3RzIGFuZCBpcyBub24tbnVsbCBvciBpbnB1dEJvZHkgaXNcbiAgICAvLyBub24tbnVsbCwgYW5kIHJlcXVlc3TigJlzIG1ldGhvZCBpcyBgR0VUYCBvciBgSEVBRGAsIHRoZW4gdGhyb3cgYVxuICAgIC8vIFR5cGVFcnJvci5cbiAgICBpZiAoXG4gICAgICAoaW5pdC5ib2R5ICE9IG51bGwgfHwgaW5wdXRCb2R5ICE9IG51bGwpICYmXG4gICAgICAocmVxdWVzdC5tZXRob2QgPT09ICdHRVQnIHx8IHJlcXVlc3QubWV0aG9kID09PSAnSEVBRCcpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZXF1ZXN0IHdpdGggR0VUL0hFQUQgbWV0aG9kIGNhbm5vdCBoYXZlIGJvZHkuJylcbiAgICB9XG5cbiAgICAvLyAzNS4gTGV0IGluaXRCb2R5IGJlIG51bGwuXG4gICAgbGV0IGluaXRCb2R5ID0gbnVsbFxuXG4gICAgLy8gMzYuIElmIGluaXRbXCJib2R5XCJdIGV4aXN0cyBhbmQgaXMgbm9uLW51bGwsIHRoZW46XG4gICAgaWYgKGluaXQuYm9keSAhPSBudWxsKSB7XG4gICAgICAvLyAxLiBMZXQgQ29udGVudC1UeXBlIGJlIG51bGwuXG4gICAgICAvLyAyLiBTZXQgaW5pdEJvZHkgYW5kIENvbnRlbnQtVHlwZSB0byB0aGUgcmVzdWx0IG9mIGV4dHJhY3RpbmdcbiAgICAgIC8vIGluaXRbXCJib2R5XCJdLCB3aXRoIGtlZXBhbGl2ZSBzZXQgdG8gcmVxdWVzdOKAmXMga2VlcGFsaXZlLlxuICAgICAgY29uc3QgW2V4dHJhY3RlZEJvZHksIGNvbnRlbnRUeXBlXSA9IGV4dHJhY3RCb2R5KFxuICAgICAgICBpbml0LmJvZHksXG4gICAgICAgIHJlcXVlc3Qua2VlcGFsaXZlXG4gICAgICApXG4gICAgICBpbml0Qm9keSA9IGV4dHJhY3RlZEJvZHlcblxuICAgICAgLy8gMywgSWYgQ29udGVudC1UeXBlIGlzIG5vbi1udWxsIGFuZCB0aGlz4oCZcyBoZWFkZXJz4oCZcyBoZWFkZXIgbGlzdCBkb2VzXG4gICAgICAvLyBub3QgY29udGFpbiBgQ29udGVudC1UeXBlYCwgdGhlbiBhcHBlbmQgYENvbnRlbnQtVHlwZWAvQ29udGVudC1UeXBlIHRvXG4gICAgICAvLyB0aGlz4oCZcyBoZWFkZXJzLlxuICAgICAgaWYgKGNvbnRlbnRUeXBlICYmICF0aGlzW2tIZWFkZXJzXVtrSGVhZGVyc0xpc3RdLmNvbnRhaW5zKCdjb250ZW50LXR5cGUnKSkge1xuICAgICAgICB0aGlzW2tIZWFkZXJzXS5hcHBlbmQoJ2NvbnRlbnQtdHlwZScsIGNvbnRlbnRUeXBlKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDM3LiBMZXQgaW5wdXRPckluaXRCb2R5IGJlIGluaXRCb2R5IGlmIGl0IGlzIG5vbi1udWxsOyBvdGhlcndpc2VcbiAgICAvLyBpbnB1dEJvZHkuXG4gICAgY29uc3QgaW5wdXRPckluaXRCb2R5ID0gaW5pdEJvZHkgPz8gaW5wdXRCb2R5XG5cbiAgICAvLyAzOC4gSWYgaW5wdXRPckluaXRCb2R5IGlzIG5vbi1udWxsIGFuZCBpbnB1dE9ySW5pdEJvZHnigJlzIHNvdXJjZSBpc1xuICAgIC8vIG51bGwsIHRoZW46XG4gICAgaWYgKGlucHV0T3JJbml0Qm9keSAhPSBudWxsICYmIGlucHV0T3JJbml0Qm9keS5zb3VyY2UgPT0gbnVsbCkge1xuICAgICAgLy8gMS4gSWYgaW5pdEJvZHkgaXMgbm9uLW51bGwgYW5kIGluaXRbXCJkdXBsZXhcIl0gZG9lcyBub3QgZXhpc3QsXG4gICAgICAvLyAgICB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgaWYgKGluaXRCb2R5ICE9IG51bGwgJiYgaW5pdC5kdXBsZXggPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZXF1ZXN0SW5pdDogZHVwbGV4IG9wdGlvbiBpcyByZXF1aXJlZCB3aGVuIHNlbmRpbmcgYSBib2R5LicpXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIElmIHRoaXPigJlzIHJlcXVlc3TigJlzIG1vZGUgaXMgbmVpdGhlciBcInNhbWUtb3JpZ2luXCIgbm9yIFwiY29yc1wiLFxuICAgICAgLy8gdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGlmIChyZXF1ZXN0Lm1vZGUgIT09ICdzYW1lLW9yaWdpbicgJiYgcmVxdWVzdC5tb2RlICE9PSAnY29ycycpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAnSWYgcmVxdWVzdCBpcyBtYWRlIGZyb20gUmVhZGFibGVTdHJlYW0sIG1vZGUgc2hvdWxkIGJlIFwic2FtZS1vcmlnaW5cIiBvciBcImNvcnNcIidcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICAvLyAzLiBTZXQgdGhpc+KAmXMgcmVxdWVzdOKAmXMgdXNlLUNPUlMtcHJlZmxpZ2h0IGZsYWcuXG4gICAgICByZXF1ZXN0LnVzZUNPUlNQcmVmbGlnaHRGbGFnID0gdHJ1ZVxuICAgIH1cblxuICAgIC8vIDM5LiBMZXQgZmluYWxCb2R5IGJlIGlucHV0T3JJbml0Qm9keS5cbiAgICBsZXQgZmluYWxCb2R5ID0gaW5wdXRPckluaXRCb2R5XG5cbiAgICAvLyA0MC4gSWYgaW5pdEJvZHkgaXMgbnVsbCBhbmQgaW5wdXRCb2R5IGlzIG5vbi1udWxsLCB0aGVuOlxuICAgIGlmIChpbml0Qm9keSA9PSBudWxsICYmIGlucHV0Qm9keSAhPSBudWxsKSB7XG4gICAgICAvLyAxLiBJZiBpbnB1dCBpcyB1bnVzYWJsZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGlmICh1dGlsLmlzRGlzdHVyYmVkKGlucHV0Qm9keS5zdHJlYW0pIHx8IGlucHV0Qm9keS5zdHJlYW0ubG9ja2VkKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgJ0Nhbm5vdCBjb25zdHJ1Y3QgYSBSZXF1ZXN0IHdpdGggYSBSZXF1ZXN0IG9iamVjdCB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gdXNlZC4nXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgLy8gMi4gU2V0IGZpbmFsQm9keSB0byB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEgcHJveHkgZm9yIGlucHV0Qm9keS5cbiAgICAgIGlmICghVHJhbnNmb3JtU3RyZWFtKSB7XG4gICAgICAgIFRyYW5zZm9ybVN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbS93ZWInKS5UcmFuc2Zvcm1TdHJlYW1cbiAgICAgIH1cblxuICAgICAgLy8gaHR0cHM6Ly9zdHJlYW1zLnNwZWMud2hhdHdnLm9yZy8jcmVhZGFibGVzdHJlYW0tY3JlYXRlLWEtcHJveHlcbiAgICAgIGNvbnN0IGlkZW50aXR5VHJhbnNmb3JtID0gbmV3IFRyYW5zZm9ybVN0cmVhbSgpXG4gICAgICBpbnB1dEJvZHkuc3RyZWFtLnBpcGVUaHJvdWdoKGlkZW50aXR5VHJhbnNmb3JtKVxuICAgICAgZmluYWxCb2R5ID0ge1xuICAgICAgICBzb3VyY2U6IGlucHV0Qm9keS5zb3VyY2UsXG4gICAgICAgIGxlbmd0aDogaW5wdXRCb2R5Lmxlbmd0aCxcbiAgICAgICAgc3RyZWFtOiBpZGVudGl0eVRyYW5zZm9ybS5yZWFkYWJsZVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDQxLiBTZXQgdGhpc+KAmXMgcmVxdWVzdOKAmXMgYm9keSB0byBmaW5hbEJvZHkuXG4gICAgdGhpc1trU3RhdGVdLmJvZHkgPSBmaW5hbEJvZHlcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVxdWVzdOKAmXMgSFRUUCBtZXRob2QsIHdoaWNoIGlzIFwiR0VUXCIgYnkgZGVmYXVsdC5cbiAgZ2V0IG1ldGhvZCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBtZXRob2QgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc+KAmXMgcmVxdWVzdOKAmXMgbWV0aG9kLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ubWV0aG9kXG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSBVUkwgb2YgcmVxdWVzdCBhcyBhIHN0cmluZy5cbiAgZ2V0IHVybCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSB1cmwgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc+KAmXMgcmVxdWVzdOKAmXMgVVJMLCBzZXJpYWxpemVkLlxuICAgIHJldHVybiBVUkxTZXJpYWxpemVyKHRoaXNba1N0YXRlXS51cmwpXG4gIH1cblxuICAvLyBSZXR1cm5zIGEgSGVhZGVycyBvYmplY3QgY29uc2lzdGluZyBvZiB0aGUgaGVhZGVycyBhc3NvY2lhdGVkIHdpdGggcmVxdWVzdC5cbiAgLy8gTm90ZSB0aGF0IGhlYWRlcnMgYWRkZWQgaW4gdGhlIG5ldHdvcmsgbGF5ZXIgYnkgdGhlIHVzZXIgYWdlbnQgd2lsbCBub3RcbiAgLy8gYmUgYWNjb3VudGVkIGZvciBpbiB0aGlzIG9iamVjdCwgZS5nLiwgdGhlIFwiSG9zdFwiIGhlYWRlci5cbiAgZ2V0IGhlYWRlcnMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgaGVhZGVycyBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlz4oCZcyBoZWFkZXJzLlxuICAgIHJldHVybiB0aGlzW2tIZWFkZXJzXVxuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUga2luZCBvZiByZXNvdXJjZSByZXF1ZXN0ZWQgYnkgcmVxdWVzdCwgZS5nLiwgXCJkb2N1bWVudFwiXG4gIC8vIG9yIFwic2NyaXB0XCIuXG4gIGdldCBkZXN0aW5hdGlvbiAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBkZXN0aW5hdGlvbiBnZXR0ZXIgYXJlIHRvIHJldHVybiB0aGlz4oCZcyByZXF1ZXN04oCZcyBkZXN0aW5hdGlvbi5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmRlc3RpbmF0aW9uXG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSByZWZlcnJlciBvZiByZXF1ZXN0LiBJdHMgdmFsdWUgY2FuIGJlIGEgc2FtZS1vcmlnaW4gVVJMIGlmXG4gIC8vIGV4cGxpY2l0bHkgc2V0IGluIGluaXQsIHRoZSBlbXB0eSBzdHJpbmcgdG8gaW5kaWNhdGUgbm8gcmVmZXJyZXIsIGFuZFxuICAvLyBcImFib3V0OmNsaWVudFwiIHdoZW4gZGVmYXVsdGluZyB0byB0aGUgZ2xvYmFs4oCZcyBkZWZhdWx0LiBUaGlzIGlzIHVzZWRcbiAgLy8gZHVyaW5nIGZldGNoaW5nIHRvIGRldGVybWluZSB0aGUgdmFsdWUgb2YgdGhlIGBSZWZlcmVyYCBoZWFkZXIgb2YgdGhlXG4gIC8vIHJlcXVlc3QgYmVpbmcgbWFkZS5cbiAgZ2V0IHJlZmVycmVyICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gMS4gSWYgdGhpc+KAmXMgcmVxdWVzdOKAmXMgcmVmZXJyZXIgaXMgXCJuby1yZWZlcnJlclwiLCB0aGVuIHJldHVybiB0aGVcbiAgICAvLyBlbXB0eSBzdHJpbmcuXG4gICAgaWYgKHRoaXNba1N0YXRlXS5yZWZlcnJlciA9PT0gJ25vLXJlZmVycmVyJykge1xuICAgICAgcmV0dXJuICcnXG4gICAgfVxuXG4gICAgLy8gMi4gSWYgdGhpc+KAmXMgcmVxdWVzdOKAmXMgcmVmZXJyZXIgaXMgXCJjbGllbnRcIiwgdGhlbiByZXR1cm5cbiAgICAvLyBcImFib3V0OmNsaWVudFwiLlxuICAgIGlmICh0aGlzW2tTdGF0ZV0ucmVmZXJyZXIgPT09ICdjbGllbnQnKSB7XG4gICAgICByZXR1cm4gJ2Fib3V0OmNsaWVudCdcbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gdGhpc+KAmXMgcmVxdWVzdOKAmXMgcmVmZXJyZXIsIHNlcmlhbGl6ZWQuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5yZWZlcnJlci50b1N0cmluZygpXG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSByZWZlcnJlciBwb2xpY3kgYXNzb2NpYXRlZCB3aXRoIHJlcXVlc3QuXG4gIC8vIFRoaXMgaXMgdXNlZCBkdXJpbmcgZmV0Y2hpbmcgdG8gY29tcHV0ZSB0aGUgdmFsdWUgb2YgdGhlIHJlcXVlc3TigJlzXG4gIC8vIHJlZmVycmVyLlxuICBnZXQgcmVmZXJyZXJQb2xpY3kgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgcmVmZXJyZXJQb2xpY3kgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc+KAmXMgcmVxdWVzdOKAmXMgcmVmZXJyZXIgcG9saWN5LlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ucmVmZXJyZXJQb2xpY3lcbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIG1vZGUgYXNzb2NpYXRlZCB3aXRoIHJlcXVlc3QsIHdoaWNoIGlzIGEgc3RyaW5nIGluZGljYXRpbmdcbiAgLy8gd2hldGhlciB0aGUgcmVxdWVzdCB3aWxsIHVzZSBDT1JTLCBvciB3aWxsIGJlIHJlc3RyaWN0ZWQgdG8gc2FtZS1vcmlnaW5cbiAgLy8gVVJMcy5cbiAgZ2V0IG1vZGUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgbW9kZSBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlz4oCZcyByZXF1ZXN04oCZcyBtb2RlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ubW9kZVxuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgY3JlZGVudGlhbHMgbW9kZSBhc3NvY2lhdGVkIHdpdGggcmVxdWVzdCxcbiAgLy8gd2hpY2ggaXMgYSBzdHJpbmcgaW5kaWNhdGluZyB3aGV0aGVyIGNyZWRlbnRpYWxzIHdpbGwgYmUgc2VudCB3aXRoIHRoZVxuICAvLyByZXF1ZXN0IGFsd2F5cywgbmV2ZXIsIG9yIG9ubHkgd2hlbiBzZW50IHRvIGEgc2FtZS1vcmlnaW4gVVJMLlxuICBnZXQgY3JlZGVudGlhbHMgKCkge1xuICAgIC8vIFRoZSBjcmVkZW50aWFscyBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlz4oCZcyByZXF1ZXN04oCZcyBjcmVkZW50aWFscyBtb2RlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uY3JlZGVudGlhbHNcbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIGNhY2hlIG1vZGUgYXNzb2NpYXRlZCB3aXRoIHJlcXVlc3QsXG4gIC8vIHdoaWNoIGlzIGEgc3RyaW5nIGluZGljYXRpbmcgaG93IHRoZSByZXF1ZXN0IHdpbGxcbiAgLy8gaW50ZXJhY3Qgd2l0aCB0aGUgYnJvd3NlcuKAmXMgY2FjaGUgd2hlbiBmZXRjaGluZy5cbiAgZ2V0IGNhY2hlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIGNhY2hlIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXPigJlzIHJlcXVlc3TigJlzIGNhY2hlIG1vZGUuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5jYWNoZVxuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgcmVkaXJlY3QgbW9kZSBhc3NvY2lhdGVkIHdpdGggcmVxdWVzdCxcbiAgLy8gd2hpY2ggaXMgYSBzdHJpbmcgaW5kaWNhdGluZyBob3cgcmVkaXJlY3RzIGZvciB0aGVcbiAgLy8gcmVxdWVzdCB3aWxsIGJlIGhhbmRsZWQgZHVyaW5nIGZldGNoaW5nLiBBIHJlcXVlc3RcbiAgLy8gd2lsbCBmb2xsb3cgcmVkaXJlY3RzIGJ5IGRlZmF1bHQuXG4gIGdldCByZWRpcmVjdCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSByZWRpcmVjdCBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlz4oCZcyByZXF1ZXN04oCZcyByZWRpcmVjdCBtb2RlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ucmVkaXJlY3RcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVxdWVzdOKAmXMgc3VicmVzb3VyY2UgaW50ZWdyaXR5IG1ldGFkYXRhLCB3aGljaCBpcyBhXG4gIC8vIGNyeXB0b2dyYXBoaWMgaGFzaCBvZiB0aGUgcmVzb3VyY2UgYmVpbmcgZmV0Y2hlZC4gSXRzIHZhbHVlXG4gIC8vIGNvbnNpc3RzIG9mIG11bHRpcGxlIGhhc2hlcyBzZXBhcmF0ZWQgYnkgd2hpdGVzcGFjZS4gW1NSSV1cbiAgZ2V0IGludGVncml0eSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBpbnRlZ3JpdHkgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc+KAmXMgcmVxdWVzdOKAmXMgaW50ZWdyaXR5XG4gICAgLy8gbWV0YWRhdGEuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5pbnRlZ3JpdHlcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgcmVxdWVzdCBjYW4gb3V0bGl2ZSB0aGVcbiAgLy8gZ2xvYmFsIGluIHdoaWNoIGl0IHdhcyBjcmVhdGVkLlxuICBnZXQga2VlcGFsaXZlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIGtlZXBhbGl2ZSBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlz4oCZcyByZXF1ZXN04oCZcyBrZWVwYWxpdmUuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5rZWVwYWxpdmVcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgcmVxdWVzdCBpcyBmb3IgYSByZWxvYWRcbiAgLy8gbmF2aWdhdGlvbi5cbiAgZ2V0IGlzUmVsb2FkTmF2aWdhdGlvbiAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBpc1JlbG9hZE5hdmlnYXRpb24gZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdHJ1ZSBpZiB0aGlz4oCZc1xuICAgIC8vIHJlcXVlc3TigJlzIHJlbG9hZC1uYXZpZ2F0aW9uIGZsYWcgaXMgc2V0OyBvdGhlcndpc2UgZmFsc2UuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5yZWxvYWROYXZpZ2F0aW9uXG4gIH1cblxuICAvLyBSZXR1cm5zIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90IHJlcXVlc3QgaXMgZm9yIGEgaGlzdG9yeVxuICAvLyBuYXZpZ2F0aW9uIChhLmsuYS4gYmFjay1mb3dhcmQgbmF2aWdhdGlvbikuXG4gIGdldCBpc0hpc3RvcnlOYXZpZ2F0aW9uICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIGlzSGlzdG9yeU5hdmlnYXRpb24gZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdHJ1ZSBpZiB0aGlz4oCZcyByZXF1ZXN04oCZc1xuICAgIC8vIGhpc3RvcnktbmF2aWdhdGlvbiBmbGFnIGlzIHNldDsgb3RoZXJ3aXNlIGZhbHNlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uaGlzdG9yeU5hdmlnYXRpb25cbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIHNpZ25hbCBhc3NvY2lhdGVkIHdpdGggcmVxdWVzdCwgd2hpY2ggaXMgYW4gQWJvcnRTaWduYWxcbiAgLy8gb2JqZWN0IGluZGljYXRpbmcgd2hldGhlciBvciBub3QgcmVxdWVzdCBoYXMgYmVlbiBhYm9ydGVkLCBhbmQgaXRzXG4gIC8vIGFib3J0IGV2ZW50IGhhbmRsZXIuXG4gIGdldCBzaWduYWwgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgc2lnbmFsIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXPigJlzIHNpZ25hbC5cbiAgICByZXR1cm4gdGhpc1trU2lnbmFsXVxuICB9XG5cbiAgZ2V0IGJvZHkgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmJvZHkgPyB0aGlzW2tTdGF0ZV0uYm9keS5zdHJlYW0gOiBudWxsXG4gIH1cblxuICBnZXQgYm9keVVzZWQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICByZXR1cm4gISF0aGlzW2tTdGF0ZV0uYm9keSAmJiB1dGlsLmlzRGlzdHVyYmVkKHRoaXNba1N0YXRlXS5ib2R5LnN0cmVhbSlcbiAgfVxuXG4gIGdldCBkdXBsZXggKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICByZXR1cm4gJ2hhbGYnXG4gIH1cblxuICAvLyBSZXR1cm5zIGEgY2xvbmUgb2YgcmVxdWVzdC5cbiAgY2xvbmUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyAxLiBJZiB0aGlzIGlzIHVudXNhYmxlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICh0aGlzLmJvZHlVc2VkIHx8IHRoaXMuYm9keT8ubG9ja2VkKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd1bnVzYWJsZScpXG4gICAgfVxuXG4gICAgLy8gMi4gTGV0IGNsb25lZFJlcXVlc3QgYmUgdGhlIHJlc3VsdCBvZiBjbG9uaW5nIHRoaXPigJlzIHJlcXVlc3QuXG4gICAgY29uc3QgY2xvbmVkUmVxdWVzdCA9IGNsb25lUmVxdWVzdCh0aGlzW2tTdGF0ZV0pXG5cbiAgICAvLyAzLiBMZXQgY2xvbmVkUmVxdWVzdE9iamVjdCBiZSB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEgUmVxdWVzdCBvYmplY3QsXG4gICAgLy8gZ2l2ZW4gY2xvbmVkUmVxdWVzdCwgdGhpc+KAmXMgaGVhZGVyc+KAmXMgZ3VhcmQsIGFuZCB0aGlz4oCZcyByZWxldmFudCBSZWFsbS5cbiAgICBjb25zdCBjbG9uZWRSZXF1ZXN0T2JqZWN0ID0gbmV3IFJlcXVlc3Qoa0NvbnN0cnVjdClcbiAgICBjbG9uZWRSZXF1ZXN0T2JqZWN0W2tTdGF0ZV0gPSBjbG9uZWRSZXF1ZXN0XG4gICAgY2xvbmVkUmVxdWVzdE9iamVjdFtrUmVhbG1dID0gdGhpc1trUmVhbG1dXG4gICAgY2xvbmVkUmVxdWVzdE9iamVjdFtrSGVhZGVyc10gPSBuZXcgSGVhZGVycyhrQ29uc3RydWN0KVxuICAgIGNsb25lZFJlcXVlc3RPYmplY3Rba0hlYWRlcnNdW2tIZWFkZXJzTGlzdF0gPSBjbG9uZWRSZXF1ZXN0LmhlYWRlcnNMaXN0XG4gICAgY2xvbmVkUmVxdWVzdE9iamVjdFtrSGVhZGVyc11ba0d1YXJkXSA9IHRoaXNba0hlYWRlcnNdW2tHdWFyZF1cbiAgICBjbG9uZWRSZXF1ZXN0T2JqZWN0W2tIZWFkZXJzXVtrUmVhbG1dID0gdGhpc1trSGVhZGVyc11ba1JlYWxtXVxuXG4gICAgLy8gNC4gTWFrZSBjbG9uZWRSZXF1ZXN0T2JqZWN04oCZcyBzaWduYWwgZm9sbG93IHRoaXPigJlzIHNpZ25hbC5cbiAgICBjb25zdCBhYyA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuICAgIGlmICh0aGlzLnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICBhYy5hYm9ydCh0aGlzLnNpZ25hbC5yZWFzb24pXG4gICAgfSBlbHNlIHtcbiAgICAgIHV0aWwuYWRkQWJvcnRMaXN0ZW5lcihcbiAgICAgICAgdGhpcy5zaWduYWwsXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBhYy5hYm9ydCh0aGlzLnNpZ25hbC5yZWFzb24pXG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9XG4gICAgY2xvbmVkUmVxdWVzdE9iamVjdFtrU2lnbmFsXSA9IGFjLnNpZ25hbFxuXG4gICAgLy8gNC4gUmV0dXJuIGNsb25lZFJlcXVlc3RPYmplY3QuXG4gICAgcmV0dXJuIGNsb25lZFJlcXVlc3RPYmplY3RcbiAgfVxufVxuXG5taXhpbkJvZHkoUmVxdWVzdClcblxuZnVuY3Rpb24gbWFrZVJlcXVlc3QgKGluaXQpIHtcbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3RzXG4gIGNvbnN0IHJlcXVlc3QgPSB7XG4gICAgbWV0aG9kOiAnR0VUJyxcbiAgICBsb2NhbFVSTHNPbmx5OiBmYWxzZSxcbiAgICB1bnNhZmVSZXF1ZXN0OiBmYWxzZSxcbiAgICBib2R5OiBudWxsLFxuICAgIGNsaWVudDogbnVsbCxcbiAgICByZXNlcnZlZENsaWVudDogbnVsbCxcbiAgICByZXBsYWNlc0NsaWVudElkOiAnJyxcbiAgICB3aW5kb3c6ICdjbGllbnQnLFxuICAgIGtlZXBhbGl2ZTogZmFsc2UsXG4gICAgc2VydmljZVdvcmtlcnM6ICdhbGwnLFxuICAgIGluaXRpYXRvcjogJycsXG4gICAgZGVzdGluYXRpb246ICcnLFxuICAgIHByaW9yaXR5OiBudWxsLFxuICAgIG9yaWdpbjogJ2NsaWVudCcsXG4gICAgcG9saWN5Q29udGFpbmVyOiAnY2xpZW50JyxcbiAgICByZWZlcnJlcjogJ2NsaWVudCcsXG4gICAgcmVmZXJyZXJQb2xpY3k6ICcnLFxuICAgIG1vZGU6ICduby1jb3JzJyxcbiAgICB1c2VDT1JTUHJlZmxpZ2h0RmxhZzogZmFsc2UsXG4gICAgY3JlZGVudGlhbHM6ICdzYW1lLW9yaWdpbicsXG4gICAgdXNlQ3JlZGVudGlhbHM6IGZhbHNlLFxuICAgIGNhY2hlOiAnZGVmYXVsdCcsXG4gICAgcmVkaXJlY3Q6ICdmb2xsb3cnLFxuICAgIGludGVncml0eTogJycsXG4gICAgY3J5cHRvR3JhcGhpY3NOb25jZU1ldGFkYXRhOiAnJyxcbiAgICBwYXJzZXJNZXRhZGF0YTogJycsXG4gICAgcmVsb2FkTmF2aWdhdGlvbjogZmFsc2UsXG4gICAgaGlzdG9yeU5hdmlnYXRpb246IGZhbHNlLFxuICAgIHVzZXJBY3RpdmF0aW9uOiBmYWxzZSxcbiAgICB0YWludGVkT3JpZ2luOiBmYWxzZSxcbiAgICByZWRpcmVjdENvdW50OiAwLFxuICAgIHJlc3BvbnNlVGFpbnRpbmc6ICdiYXNpYycsXG4gICAgcHJldmVudE5vQ2FjaGVDYWNoZUNvbnRyb2xIZWFkZXJNb2RpZmljYXRpb246IGZhbHNlLFxuICAgIGRvbmU6IGZhbHNlLFxuICAgIHRpbWluZ0FsbG93RmFpbGVkOiBmYWxzZSxcbiAgICAuLi5pbml0LFxuICAgIGhlYWRlcnNMaXN0OiBpbml0LmhlYWRlcnNMaXN0XG4gICAgICA/IG5ldyBIZWFkZXJzTGlzdChpbml0LmhlYWRlcnNMaXN0KVxuICAgICAgOiBuZXcgSGVhZGVyc0xpc3QoKVxuICB9XG4gIHJlcXVlc3QudXJsID0gcmVxdWVzdC51cmxMaXN0WzBdXG4gIHJldHVybiByZXF1ZXN0XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LXJlcXVlc3QtY2xvbmVcbmZ1bmN0aW9uIGNsb25lUmVxdWVzdCAocmVxdWVzdCkge1xuICAvLyBUbyBjbG9uZSBhIHJlcXVlc3QgcmVxdWVzdCwgcnVuIHRoZXNlIHN0ZXBzOlxuXG4gIC8vIDEuIExldCBuZXdSZXF1ZXN0IGJlIGEgY29weSBvZiByZXF1ZXN0LCBleGNlcHQgZm9yIGl0cyBib2R5LlxuICBjb25zdCBuZXdSZXF1ZXN0ID0gbWFrZVJlcXVlc3QoeyAuLi5yZXF1ZXN0LCBib2R5OiBudWxsIH0pXG5cbiAgLy8gMi4gSWYgcmVxdWVzdOKAmXMgYm9keSBpcyBub24tbnVsbCwgc2V0IG5ld1JlcXVlc3TigJlzIGJvZHkgdG8gdGhlXG4gIC8vIHJlc3VsdCBvZiBjbG9uaW5nIHJlcXVlc3TigJlzIGJvZHkuXG4gIGlmIChyZXF1ZXN0LmJvZHkgIT0gbnVsbCkge1xuICAgIG5ld1JlcXVlc3QuYm9keSA9IGNsb25lQm9keShyZXF1ZXN0LmJvZHkpXG4gIH1cblxuICAvLyAzLiBSZXR1cm4gbmV3UmVxdWVzdC5cbiAgcmV0dXJuIG5ld1JlcXVlc3Rcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUmVxdWVzdC5wcm90b3R5cGUsIHtcbiAgbWV0aG9kOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICB1cmw6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGhlYWRlcnM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlZGlyZWN0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBjbG9uZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgc2lnbmFsOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBkdXBsZXg6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGRlc3RpbmF0aW9uOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBib2R5OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBib2R5VXNlZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgaXNIaXN0b3J5TmF2aWdhdGlvbjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgaXNSZWxvYWROYXZpZ2F0aW9uOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBrZWVwYWxpdmU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGludGVncml0eToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgY2FjaGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNyZWRlbnRpYWxzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBhdHRyaWJ1dGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlZmVycmVyUG9saWN5OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWZlcnJlcjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgbW9kZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ1JlcXVlc3QnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9XG59KVxuXG53ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0ID0gd2ViaWRsLmludGVyZmFjZUNvbnZlcnRlcihcbiAgUmVxdWVzdFxuKVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdGluZm9cbndlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvID0gZnVuY3Rpb24gKFYpIHtcbiAgaWYgKHR5cGVvZiBWID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcoVilcbiAgfVxuXG4gIGlmIChWIGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0KFYpXG4gIH1cblxuICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKFYpXG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLkFib3J0U2lnbmFsID0gd2ViaWRsLmludGVyZmFjZUNvbnZlcnRlcihcbiAgQWJvcnRTaWduYWxcbilcblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3Rpbml0XG53ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5pdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGtleTogJ21ldGhvZCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdoZWFkZXJzJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkhlYWRlcnNJbml0XG4gIH0sXG4gIHtcbiAgICBrZXk6ICdib2R5JyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcihcbiAgICAgIHdlYmlkbC5jb252ZXJ0ZXJzLkJvZHlJbml0XG4gICAgKVxuICB9LFxuICB7XG4gICAga2V5OiAncmVmZXJyZXInLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdyZWZlcnJlclBvbGljeScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAgLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1yZWZlcnJlci1wb2xpY3kvI3JlZmVycmVyLXBvbGljeVxuICAgIGFsbG93ZWRWYWx1ZXM6IHJlZmVycmVyUG9saWN5XG4gIH0sXG4gIHtcbiAgICBrZXk6ICdtb2RlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1yZXF1ZXN0LW1vZGVcbiAgICBhbGxvd2VkVmFsdWVzOiByZXF1ZXN0TW9kZVxuICB9LFxuICB7XG4gICAga2V5OiAnY3JlZGVudGlhbHMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXF1ZXN0Y3JlZGVudGlhbHNcbiAgICBhbGxvd2VkVmFsdWVzOiByZXF1ZXN0Q3JlZGVudGlhbHNcbiAgfSxcbiAge1xuICAgIGtleTogJ2NhY2hlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdGNhY2hlXG4gICAgYWxsb3dlZFZhbHVlczogcmVxdWVzdENhY2hlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdyZWRpcmVjdCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3RyZWRpcmVjdFxuICAgIGFsbG93ZWRWYWx1ZXM6IHJlcXVlc3RSZWRpcmVjdFxuICB9LFxuICB7XG4gICAga2V5OiAnaW50ZWdyaXR5JyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZ1xuICB9LFxuICB7XG4gICAga2V5OiAna2VlcGFsaXZlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW5cbiAgfSxcbiAge1xuICAgIGtleTogJ3NpZ25hbCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIoXG4gICAgICAoc2lnbmFsKSA9PiB3ZWJpZGwuY29udmVydGVycy5BYm9ydFNpZ25hbChcbiAgICAgICAgc2lnbmFsLFxuICAgICAgICB7IHN0cmljdDogZmFsc2UgfVxuICAgICAgKVxuICAgIClcbiAgfSxcbiAge1xuICAgIGtleTogJ3dpbmRvdycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5hbnlcbiAgfSxcbiAge1xuICAgIGtleTogJ2R1cGxleCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAgYWxsb3dlZFZhbHVlczogcmVxdWVzdER1cGxleFxuICB9XG5dKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHsgUmVxdWVzdCwgbWFrZVJlcXVlc3QgfVxuIiwKICAgICIvLyBodHRwczovL2dpdGh1Yi5jb20vRXRoYW4tQXJyb3dvb2QvdW5kaWNpLWZldGNoXG5cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIFJlc3BvbnNlLFxuICBtYWtlTmV0d29ya0Vycm9yLFxuICBtYWtlQXBwcm9wcmlhdGVOZXR3b3JrRXJyb3IsXG4gIGZpbHRlclJlc3BvbnNlLFxuICBtYWtlUmVzcG9uc2Vcbn0gPSByZXF1aXJlKCcuL3Jlc3BvbnNlJylcbmNvbnN0IHsgSGVhZGVycyB9ID0gcmVxdWlyZSgnLi9oZWFkZXJzJylcbmNvbnN0IHsgUmVxdWVzdCwgbWFrZVJlcXVlc3QgfSA9IHJlcXVpcmUoJy4vcmVxdWVzdCcpXG5jb25zdCB6bGliID0gcmVxdWlyZSgnemxpYicpXG5jb25zdCB7XG4gIGJ5dGVzTWF0Y2gsXG4gIG1ha2VQb2xpY3lDb250YWluZXIsXG4gIGNsb25lUG9saWN5Q29udGFpbmVyLFxuICByZXF1ZXN0QmFkUG9ydCxcbiAgVEFPQ2hlY2ssXG4gIGFwcGVuZFJlcXVlc3RPcmlnaW5IZWFkZXIsXG4gIHJlc3BvbnNlTG9jYXRpb25VUkwsXG4gIHJlcXVlc3RDdXJyZW50VVJMLFxuICBzZXRSZXF1ZXN0UmVmZXJyZXJQb2xpY3lPblJlZGlyZWN0LFxuICB0cnlVcGdyYWRlUmVxdWVzdFRvQVBvdGVudGlhbGx5VHJ1c3R3b3J0aHlVUkwsXG4gIGNyZWF0ZU9wYXF1ZVRpbWluZ0luZm8sXG4gIGFwcGVuZEZldGNoTWV0YWRhdGEsXG4gIGNvcnNDaGVjayxcbiAgY3Jvc3NPcmlnaW5SZXNvdXJjZVBvbGljeUNoZWNrLFxuICBkZXRlcm1pbmVSZXF1ZXN0c1JlZmVycmVyLFxuICBjb2Fyc2VuZWRTaGFyZWRDdXJyZW50VGltZSxcbiAgY3JlYXRlRGVmZXJyZWRQcm9taXNlLFxuICBpc0Jsb2JMaWtlLFxuICBzYW1lT3JpZ2luLFxuICBpc0NhbmNlbGxlZCxcbiAgaXNBYm9ydGVkLFxuICBpc0Vycm9yTGlrZSxcbiAgZnVsbHlSZWFkQm9keSxcbiAgcmVhZGFibGVTdHJlYW1DbG9zZSxcbiAgaXNvbW9ycGhpY0VuY29kZSxcbiAgdXJsSXNMb2NhbCxcbiAgdXJsSXNIdHRwSHR0cHNTY2hlbWUsXG4gIHVybEhhc0h0dHBzU2NoZW1lXG59ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsga1N0YXRlLCBrSGVhZGVycywga0d1YXJkLCBrUmVhbG0gfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBzYWZlbHlFeHRyYWN0Qm9keSB9ID0gcmVxdWlyZSgnLi9ib2R5JylcbmNvbnN0IHtcbiAgcmVkaXJlY3RTdGF0dXNTZXQsXG4gIG51bGxCb2R5U3RhdHVzLFxuICBzYWZlTWV0aG9kc1NldCxcbiAgcmVxdWVzdEJvZHlIZWFkZXIsXG4gIHN1YnJlc291cmNlU2V0LFxuICBET01FeGNlcHRpb25cbn0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7IGtIZWFkZXJzTGlzdCB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IEVFID0gcmVxdWlyZSgnZXZlbnRzJylcbmNvbnN0IHsgUmVhZGFibGUsIHBpcGVsaW5lIH0gPSByZXF1aXJlKCdzdHJlYW0nKVxuY29uc3QgeyBhZGRBYm9ydExpc3RlbmVyLCBpc0Vycm9yZWQsIGlzUmVhZGFibGUsIG5vZGVNYWpvciwgbm9kZU1pbm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBkYXRhVVJMUHJvY2Vzc29yLCBzZXJpYWxpemVBTWltZVR5cGUgfSA9IHJlcXVpcmUoJy4vZGF0YVVSTCcpXG5jb25zdCB7IFRyYW5zZm9ybVN0cmVhbSB9ID0gcmVxdWlyZSgnc3RyZWFtL3dlYicpXG5jb25zdCB7IGdldEdsb2JhbERpc3BhdGNoZXIgfSA9IHJlcXVpcmUoJy4uL2dsb2JhbCcpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi93ZWJpZGwnKVxuY29uc3QgeyBTVEFUVVNfQ09ERVMgfSA9IHJlcXVpcmUoJ2h0dHAnKVxuY29uc3QgR0VUX09SX0hFQUQgPSBbJ0dFVCcsICdIRUFEJ11cblxuLyoqIEB0eXBlIHtpbXBvcnQoJ2J1ZmZlcicpLnJlc29sdmVPYmplY3RVUkx9ICovXG5sZXQgcmVzb2x2ZU9iamVjdFVSTFxubGV0IFJlYWRhYmxlU3RyZWFtID0gZ2xvYmFsVGhpcy5SZWFkYWJsZVN0cmVhbVxuXG5jbGFzcyBGZXRjaCBleHRlbmRzIEVFIHtcbiAgY29uc3RydWN0b3IgKGRpc3BhdGNoZXIpIHtcbiAgICBzdXBlcigpXG5cbiAgICB0aGlzLmRpc3BhdGNoZXIgPSBkaXNwYXRjaGVyXG4gICAgdGhpcy5jb25uZWN0aW9uID0gbnVsbFxuICAgIHRoaXMuZHVtcCA9IGZhbHNlXG4gICAgdGhpcy5zdGF0ZSA9ICdvbmdvaW5nJ1xuICAgIC8vIDIgdGVybWluYXRlZCBsaXN0ZW5lcnMgZ2V0IGFkZGVkIHBlciByZXF1ZXN0LFxuICAgIC8vIGJ1dCBvbmx5IDEgZ2V0cyByZW1vdmVkLiBJZiB0aGVyZSBhcmUgMjAgcmVkaXJlY3RzLFxuICAgIC8vIDIxIGxpc3RlbmVycyB3aWxsIGJlIGFkZGVkLlxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMTcxMVxuICAgIC8vIFRPRE8gKGZpeCk6IEZpbmQgYW5kIGZpeCByb290IGNhdXNlIGZvciBsZWFrZWQgbGlzdGVuZXIuXG4gICAgdGhpcy5zZXRNYXhMaXN0ZW5lcnMoMjEpXG4gIH1cblxuICB0ZXJtaW5hdGUgKHJlYXNvbikge1xuICAgIGlmICh0aGlzLnN0YXRlICE9PSAnb25nb2luZycpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuc3RhdGUgPSAndGVybWluYXRlZCdcbiAgICB0aGlzLmNvbm5lY3Rpb24/LmRlc3Ryb3kocmVhc29uKVxuICAgIHRoaXMuZW1pdCgndGVybWluYXRlZCcsIHJlYXNvbilcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmZXRjaC1jb250cm9sbGVyLWFib3J0XG4gIGFib3J0IChlcnJvcikge1xuICAgIGlmICh0aGlzLnN0YXRlICE9PSAnb25nb2luZycpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIDEuIFNldCBjb250cm9sbGVy4oCZcyBzdGF0ZSB0byBcImFib3J0ZWRcIi5cbiAgICB0aGlzLnN0YXRlID0gJ2Fib3J0ZWQnXG5cbiAgICAvLyAyLiBMZXQgZmFsbGJhY2tFcnJvciBiZSBhbiBcIkFib3J0RXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgLy8gMy4gU2V0IGVycm9yIHRvIGZhbGxiYWNrRXJyb3IgaWYgaXQgaXMgbm90IGdpdmVuLlxuICAgIGlmICghZXJyb3IpIHtcbiAgICAgIGVycm9yID0gbmV3IERPTUV4Y2VwdGlvbignVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC4nLCAnQWJvcnRFcnJvcicpXG4gICAgfVxuXG4gICAgLy8gNC4gTGV0IHNlcmlhbGl6ZWRFcnJvciBiZSBTdHJ1Y3R1cmVkU2VyaWFsaXplKGVycm9yKS5cbiAgICAvLyAgICBJZiB0aGF0IHRocmV3IGFuIGV4Y2VwdGlvbiwgY2F0Y2ggaXQsIGFuZCBsZXRcbiAgICAvLyAgICBzZXJpYWxpemVkRXJyb3IgYmUgU3RydWN0dXJlZFNlcmlhbGl6ZShmYWxsYmFja0Vycm9yKS5cblxuICAgIC8vIDUuIFNldCBjb250cm9sbGVy4oCZcyBzZXJpYWxpemVkIGFib3J0IHJlYXNvbiB0byBzZXJpYWxpemVkRXJyb3IuXG4gICAgdGhpcy5zZXJpYWxpemVkQWJvcnRSZWFzb24gPSBlcnJvclxuXG4gICAgdGhpcy5jb25uZWN0aW9uPy5kZXN0cm95KGVycm9yKVxuICAgIHRoaXMuZW1pdCgndGVybWluYXRlZCcsIGVycm9yKVxuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmZXRjaC1tZXRob2RcbmZ1bmN0aW9uIGZldGNoIChpbnB1dCwgaW5pdCA9IHt9KSB7XG4gIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdnbG9iYWxUaGlzLmZldGNoJyB9KVxuXG4gIC8vIDEuIExldCBwIGJlIGEgbmV3IHByb21pc2UuXG4gIGNvbnN0IHAgPSBjcmVhdGVEZWZlcnJlZFByb21pc2UoKVxuXG4gIC8vIDIuIExldCByZXF1ZXN0T2JqZWN0IGJlIHRoZSByZXN1bHQgb2YgaW52b2tpbmcgdGhlIGluaXRpYWwgdmFsdWUgb2ZcbiAgLy8gUmVxdWVzdCBhcyBjb25zdHJ1Y3RvciB3aXRoIGlucHV0IGFuZCBpbml0IGFzIGFyZ3VtZW50cy4gSWYgdGhpcyB0aHJvd3NcbiAgLy8gYW4gZXhjZXB0aW9uLCByZWplY3QgcCB3aXRoIGl0IGFuZCByZXR1cm4gcC5cbiAgbGV0IHJlcXVlc3RPYmplY3RcblxuICB0cnkge1xuICAgIHJlcXVlc3RPYmplY3QgPSBuZXcgUmVxdWVzdChpbnB1dCwgaW5pdClcbiAgfSBjYXRjaCAoZSkge1xuICAgIHAucmVqZWN0KGUpXG4gICAgcmV0dXJuIHAucHJvbWlzZVxuICB9XG5cbiAgLy8gMy4gTGV0IHJlcXVlc3QgYmUgcmVxdWVzdE9iamVjdOKAmXMgcmVxdWVzdC5cbiAgY29uc3QgcmVxdWVzdCA9IHJlcXVlc3RPYmplY3Rba1N0YXRlXVxuXG4gIC8vIDQuIElmIHJlcXVlc3RPYmplY3TigJlzIHNpZ25hbOKAmXMgYWJvcnRlZCBmbGFnIGlzIHNldCwgdGhlbjpcbiAgaWYgKHJlcXVlc3RPYmplY3Quc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAvLyAxLiBBYm9ydCB0aGUgZmV0Y2goKSBjYWxsIHdpdGggcCwgcmVxdWVzdCwgbnVsbCwgYW5kXG4gICAgLy8gICAgcmVxdWVzdE9iamVjdOKAmXMgc2lnbmFs4oCZcyBhYm9ydCByZWFzb24uXG4gICAgYWJvcnRGZXRjaChwLCByZXF1ZXN0LCBudWxsLCByZXF1ZXN0T2JqZWN0LnNpZ25hbC5yZWFzb24pXG5cbiAgICAvLyAyLiBSZXR1cm4gcC5cbiAgICByZXR1cm4gcC5wcm9taXNlXG4gIH1cblxuICAvLyA1LiBMZXQgZ2xvYmFsT2JqZWN0IGJlIHJlcXVlc3TigJlzIGNsaWVudOKAmXMgZ2xvYmFsIG9iamVjdC5cbiAgY29uc3QgZ2xvYmFsT2JqZWN0ID0gcmVxdWVzdC5jbGllbnQuZ2xvYmFsT2JqZWN0XG5cbiAgLy8gNi4gSWYgZ2xvYmFsT2JqZWN0IGlzIGEgU2VydmljZVdvcmtlckdsb2JhbFNjb3BlIG9iamVjdCwgdGhlbiBzZXRcbiAgLy8gcmVxdWVzdOKAmXMgc2VydmljZS13b3JrZXJzIG1vZGUgdG8gXCJub25lXCIuXG4gIGlmIChnbG9iYWxPYmplY3Q/LmNvbnN0cnVjdG9yPy5uYW1lID09PSAnU2VydmljZVdvcmtlckdsb2JhbFNjb3BlJykge1xuICAgIHJlcXVlc3Quc2VydmljZVdvcmtlcnMgPSAnbm9uZSdcbiAgfVxuXG4gIC8vIDcuIExldCByZXNwb25zZU9iamVjdCBiZSBudWxsLlxuICBsZXQgcmVzcG9uc2VPYmplY3QgPSBudWxsXG5cbiAgLy8gOC4gTGV0IHJlbGV2YW50UmVhbG0gYmUgdGhpc+KAmXMgcmVsZXZhbnQgUmVhbG0uXG4gIGNvbnN0IHJlbGV2YW50UmVhbG0gPSBudWxsXG5cbiAgLy8gOS4gTGV0IGxvY2FsbHlBYm9ydGVkIGJlIGZhbHNlLlxuICBsZXQgbG9jYWxseUFib3J0ZWQgPSBmYWxzZVxuXG4gIC8vIDEwLiBMZXQgY29udHJvbGxlciBiZSBudWxsLlxuICBsZXQgY29udHJvbGxlciA9IG51bGxcblxuICAvLyAxMS4gQWRkIHRoZSBmb2xsb3dpbmcgYWJvcnQgc3RlcHMgdG8gcmVxdWVzdE9iamVjdOKAmXMgc2lnbmFsOlxuICBhZGRBYm9ydExpc3RlbmVyKFxuICAgIHJlcXVlc3RPYmplY3Quc2lnbmFsLFxuICAgICgpID0+IHtcbiAgICAgIC8vIDEuIFNldCBsb2NhbGx5QWJvcnRlZCB0byB0cnVlLlxuICAgICAgbG9jYWxseUFib3J0ZWQgPSB0cnVlXG5cbiAgICAgIC8vIDIuIEFzc2VydDogY29udHJvbGxlciBpcyBub24tbnVsbC5cbiAgICAgIGFzc2VydChjb250cm9sbGVyICE9IG51bGwpXG5cbiAgICAgIC8vIDMuIEFib3J0IGNvbnRyb2xsZXIgd2l0aCByZXF1ZXN0T2JqZWN04oCZcyBzaWduYWzigJlzIGFib3J0IHJlYXNvbi5cbiAgICAgIGNvbnRyb2xsZXIuYWJvcnQocmVxdWVzdE9iamVjdC5zaWduYWwucmVhc29uKVxuXG4gICAgICAvLyA0LiBBYm9ydCB0aGUgZmV0Y2goKSBjYWxsIHdpdGggcCwgcmVxdWVzdCwgcmVzcG9uc2VPYmplY3QsXG4gICAgICAvLyAgICBhbmQgcmVxdWVzdE9iamVjdOKAmXMgc2lnbmFs4oCZcyBhYm9ydCByZWFzb24uXG4gICAgICBhYm9ydEZldGNoKHAsIHJlcXVlc3QsIHJlc3BvbnNlT2JqZWN0LCByZXF1ZXN0T2JqZWN0LnNpZ25hbC5yZWFzb24pXG4gICAgfVxuICApXG5cbiAgLy8gMTIuIExldCBoYW5kbGVGZXRjaERvbmUgZ2l2ZW4gcmVzcG9uc2UgcmVzcG9uc2UgYmUgdG8gZmluYWxpemUgYW5kXG4gIC8vIHJlcG9ydCB0aW1pbmcgd2l0aCByZXNwb25zZSwgZ2xvYmFsT2JqZWN0LCBhbmQgXCJmZXRjaFwiLlxuICBjb25zdCBoYW5kbGVGZXRjaERvbmUgPSAocmVzcG9uc2UpID0+XG4gICAgZmluYWxpemVBbmRSZXBvcnRUaW1pbmcocmVzcG9uc2UsICdmZXRjaCcpXG5cbiAgLy8gMTMuIFNldCBjb250cm9sbGVyIHRvIHRoZSByZXN1bHQgb2YgY2FsbGluZyBmZXRjaCBnaXZlbiByZXF1ZXN0LFxuICAvLyB3aXRoIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSBzZXQgdG8gaGFuZGxlRmV0Y2hEb25lLCBhbmQgcHJvY2Vzc1Jlc3BvbnNlXG4gIC8vIGdpdmVuIHJlc3BvbnNlIGJlaW5nIHRoZXNlIHN1YnN0ZXBzOlxuXG4gIGNvbnN0IHByb2Nlc3NSZXNwb25zZSA9IChyZXNwb25zZSkgPT4ge1xuICAgIC8vIDEuIElmIGxvY2FsbHlBYm9ydGVkIGlzIHRydWUsIHRlcm1pbmF0ZSB0aGVzZSBzdWJzdGVwcy5cbiAgICBpZiAobG9jYWxseUFib3J0ZWQpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgIH1cblxuICAgIC8vIDIuIElmIHJlc3BvbnNl4oCZcyBhYm9ydGVkIGZsYWcgaXMgc2V0LCB0aGVuOlxuICAgIGlmIChyZXNwb25zZS5hYm9ydGVkKSB7XG4gICAgICAvLyAxLiBMZXQgZGVzZXJpYWxpemVkRXJyb3IgYmUgdGhlIHJlc3VsdCBvZiBkZXNlcmlhbGl6ZSBhIHNlcmlhbGl6ZWRcbiAgICAgIC8vICAgIGFib3J0IHJlYXNvbiBnaXZlbiBjb250cm9sbGVy4oCZcyBzZXJpYWxpemVkIGFib3J0IHJlYXNvbiBhbmRcbiAgICAgIC8vICAgIHJlbGV2YW50UmVhbG0uXG5cbiAgICAgIC8vIDIuIEFib3J0IHRoZSBmZXRjaCgpIGNhbGwgd2l0aCBwLCByZXF1ZXN0LCByZXNwb25zZU9iamVjdCwgYW5kXG4gICAgICAvLyAgICBkZXNlcmlhbGl6ZWRFcnJvci5cblxuICAgICAgYWJvcnRGZXRjaChwLCByZXF1ZXN0LCByZXNwb25zZU9iamVjdCwgY29udHJvbGxlci5zZXJpYWxpemVkQWJvcnRSZWFzb24pXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICB9XG5cbiAgICAvLyAzLiBJZiByZXNwb25zZSBpcyBhIG5ldHdvcmsgZXJyb3IsIHRoZW4gcmVqZWN0IHAgd2l0aCBhIFR5cGVFcnJvclxuICAgIC8vIGFuZCB0ZXJtaW5hdGUgdGhlc2Ugc3Vic3RlcHMuXG4gICAgaWYgKHJlc3BvbnNlLnR5cGUgPT09ICdlcnJvcicpIHtcbiAgICAgIHAucmVqZWN0KFxuICAgICAgICBPYmplY3QuYXNzaWduKG5ldyBUeXBlRXJyb3IoJ2ZldGNoIGZhaWxlZCcpLCB7IGNhdXNlOiByZXNwb25zZS5lcnJvciB9KVxuICAgICAgKVxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgfVxuXG4gICAgLy8gNC4gU2V0IHJlc3BvbnNlT2JqZWN0IHRvIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYSBSZXNwb25zZSBvYmplY3QsXG4gICAgLy8gZ2l2ZW4gcmVzcG9uc2UsIFwiaW1tdXRhYmxlXCIsIGFuZCByZWxldmFudFJlYWxtLlxuICAgIHJlc3BvbnNlT2JqZWN0ID0gbmV3IFJlc3BvbnNlKClcbiAgICByZXNwb25zZU9iamVjdFtrU3RhdGVdID0gcmVzcG9uc2VcbiAgICByZXNwb25zZU9iamVjdFtrUmVhbG1dID0gcmVsZXZhbnRSZWFsbVxuICAgIHJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrSGVhZGVyc0xpc3RdID0gcmVzcG9uc2UuaGVhZGVyc0xpc3RcbiAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba0d1YXJkXSA9ICdpbW11dGFibGUnXG4gICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tSZWFsbV0gPSByZWxldmFudFJlYWxtXG5cbiAgICAvLyA1LiBSZXNvbHZlIHAgd2l0aCByZXNwb25zZU9iamVjdC5cbiAgICBwLnJlc29sdmUocmVzcG9uc2VPYmplY3QpXG4gIH1cblxuICBjb250cm9sbGVyID0gZmV0Y2hpbmcoe1xuICAgIHJlcXVlc3QsXG4gICAgcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5OiBoYW5kbGVGZXRjaERvbmUsXG4gICAgcHJvY2Vzc1Jlc3BvbnNlLFxuICAgIGRpc3BhdGNoZXI6IGluaXQuZGlzcGF0Y2hlciA/PyBnZXRHbG9iYWxEaXNwYXRjaGVyKCkgLy8gdW5kaWNpXG4gIH0pXG5cbiAgLy8gMTQuIFJldHVybiBwLlxuICByZXR1cm4gcC5wcm9taXNlXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmaW5hbGl6ZS1hbmQtcmVwb3J0LXRpbWluZ1xuZnVuY3Rpb24gZmluYWxpemVBbmRSZXBvcnRUaW1pbmcgKHJlc3BvbnNlLCBpbml0aWF0b3JUeXBlID0gJ290aGVyJykge1xuICAvLyAxLiBJZiByZXNwb25zZSBpcyBhbiBhYm9ydGVkIG5ldHdvcmsgZXJyb3IsIHRoZW4gcmV0dXJuLlxuICBpZiAocmVzcG9uc2UudHlwZSA9PT0gJ2Vycm9yJyAmJiByZXNwb25zZS5hYm9ydGVkKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyAyLiBJZiByZXNwb25zZeKAmXMgVVJMIGxpc3QgaXMgbnVsbCBvciBlbXB0eSwgdGhlbiByZXR1cm4uXG4gIGlmICghcmVzcG9uc2UudXJsTGlzdD8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyAzLiBMZXQgb3JpZ2luYWxVUkwgYmUgcmVzcG9uc2XigJlzIFVSTCBsaXN0WzBdLlxuICBjb25zdCBvcmlnaW5hbFVSTCA9IHJlc3BvbnNlLnVybExpc3RbMF1cblxuICAvLyA0LiBMZXQgdGltaW5nSW5mbyBiZSByZXNwb25zZeKAmXMgdGltaW5nIGluZm8uXG4gIGxldCB0aW1pbmdJbmZvID0gcmVzcG9uc2UudGltaW5nSW5mb1xuXG4gIC8vIDUuIExldCBjYWNoZVN0YXRlIGJlIHJlc3BvbnNl4oCZcyBjYWNoZSBzdGF0ZS5cbiAgbGV0IGNhY2hlU3RhdGUgPSByZXNwb25zZS5jYWNoZVN0YXRlXG5cbiAgLy8gNi4gSWYgb3JpZ2luYWxVUkzigJlzIHNjaGVtZSBpcyBub3QgYW4gSFRUUChTKSBzY2hlbWUsIHRoZW4gcmV0dXJuLlxuICBpZiAoIXVybElzSHR0cEh0dHBzU2NoZW1lKG9yaWdpbmFsVVJMKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgLy8gNy4gSWYgdGltaW5nSW5mbyBpcyBudWxsLCB0aGVuIHJldHVybi5cbiAgaWYgKHRpbWluZ0luZm8gPT09IG51bGwpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIDguIElmIHJlc3BvbnNl4oCZcyB0aW1pbmcgYWxsb3cgcGFzc2VkIGZsYWcgaXMgbm90IHNldCwgdGhlbjpcbiAgaWYgKCFyZXNwb25zZS50aW1pbmdBbGxvd1Bhc3NlZCkge1xuICAgIC8vICAxLiBTZXQgdGltaW5nSW5mbyB0byBhIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYW4gb3BhcXVlIHRpbWluZyBpbmZvIGZvciB0aW1pbmdJbmZvLlxuICAgIHRpbWluZ0luZm8gPSBjcmVhdGVPcGFxdWVUaW1pbmdJbmZvKHtcbiAgICAgIHN0YXJ0VGltZTogdGltaW5nSW5mby5zdGFydFRpbWVcbiAgICB9KVxuXG4gICAgLy8gIDIuIFNldCBjYWNoZVN0YXRlIHRvIHRoZSBlbXB0eSBzdHJpbmcuXG4gICAgY2FjaGVTdGF0ZSA9ICcnXG4gIH1cblxuICAvLyA5LiBTZXQgdGltaW5nSW5mb+KAmXMgZW5kIHRpbWUgdG8gdGhlIGNvYXJzZW5lZCBzaGFyZWQgY3VycmVudCB0aW1lXG4gIC8vIGdpdmVuIGdsb2JhbOKAmXMgcmVsZXZhbnQgc2V0dGluZ3Mgb2JqZWN04oCZcyBjcm9zcy1vcmlnaW4gaXNvbGF0ZWRcbiAgLy8gY2FwYWJpbGl0eS5cbiAgLy8gVE9ETzogZ2l2ZW4gZ2xvYmFs4oCZcyByZWxldmFudCBzZXR0aW5ncyBvYmplY3TigJlzIGNyb3NzLW9yaWdpbiBpc29sYXRlZFxuICAvLyBjYXBhYmlsaXR5P1xuICB0aW1pbmdJbmZvLmVuZFRpbWUgPSBjb2Fyc2VuZWRTaGFyZWRDdXJyZW50VGltZSgpXG5cbiAgLy8gMTAuIFNldCByZXNwb25zZeKAmXMgdGltaW5nIGluZm8gdG8gdGltaW5nSW5mby5cbiAgcmVzcG9uc2UudGltaW5nSW5mbyA9IHRpbWluZ0luZm9cblxuICAvLyAxMS4gTWFyayByZXNvdXJjZSB0aW1pbmcgZm9yIHRpbWluZ0luZm8sIG9yaWdpbmFsVVJMLCBpbml0aWF0b3JUeXBlLFxuICAvLyBnbG9iYWwsIGFuZCBjYWNoZVN0YXRlLlxuICBtYXJrUmVzb3VyY2VUaW1pbmcoXG4gICAgdGltaW5nSW5mbyxcbiAgICBvcmlnaW5hbFVSTCxcbiAgICBpbml0aWF0b3JUeXBlLFxuICAgIGdsb2JhbFRoaXMsXG4gICAgY2FjaGVTdGF0ZVxuICApXG59XG5cbi8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9yZXNvdXJjZS10aW1pbmcvI2Rmbi1tYXJrLXJlc291cmNlLXRpbWluZ1xuZnVuY3Rpb24gbWFya1Jlc291cmNlVGltaW5nICh0aW1pbmdJbmZvLCBvcmlnaW5hbFVSTCwgaW5pdGlhdG9yVHlwZSwgZ2xvYmFsVGhpcywgY2FjaGVTdGF0ZSkge1xuICBpZiAobm9kZU1ham9yID4gMTggfHwgKG5vZGVNYWpvciA9PT0gMTggJiYgbm9kZU1pbm9yID49IDIpKSB7XG4gICAgcGVyZm9ybWFuY2UubWFya1Jlc291cmNlVGltaW5nKHRpbWluZ0luZm8sIG9yaWdpbmFsVVJMLmhyZWYsIGluaXRpYXRvclR5cGUsIGdsb2JhbFRoaXMsIGNhY2hlU3RhdGUpXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2Fib3J0LWZldGNoXG5mdW5jdGlvbiBhYm9ydEZldGNoIChwLCByZXF1ZXN0LCByZXNwb25zZU9iamVjdCwgZXJyb3IpIHtcbiAgLy8gTm90ZTogQWJvcnRTaWduYWwucmVhc29uIHdhcyBhZGRlZCBpbiBub2RlIHYxNy4yLjBcbiAgLy8gd2hpY2ggd291bGQgZ2l2ZSB1cyBhbiB1bmRlZmluZWQgZXJyb3IgdG8gcmVqZWN0IHdpdGguXG4gIC8vIFJlbW92ZSB0aGlzIG9uY2Ugbm9kZSB2MTYgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC5cbiAgaWYgKCFlcnJvcikge1xuICAgIGVycm9yID0gbmV3IERPTUV4Y2VwdGlvbignVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC4nLCAnQWJvcnRFcnJvcicpXG4gIH1cblxuICAvLyAxLiBSZWplY3QgcHJvbWlzZSB3aXRoIGVycm9yLlxuICBwLnJlamVjdChlcnJvcilcblxuICAvLyAyLiBJZiByZXF1ZXN04oCZcyBib2R5IGlzIG5vdCBudWxsIGFuZCBpcyByZWFkYWJsZSwgdGhlbiBjYW5jZWwgcmVxdWVzdOKAmXNcbiAgLy8gYm9keSB3aXRoIGVycm9yLlxuICBpZiAocmVxdWVzdC5ib2R5ICE9IG51bGwgJiYgaXNSZWFkYWJsZShyZXF1ZXN0LmJvZHk/LnN0cmVhbSkpIHtcbiAgICByZXF1ZXN0LmJvZHkuc3RyZWFtLmNhbmNlbChlcnJvcikuY2F0Y2goKGVycikgPT4ge1xuICAgICAgaWYgKGVyci5jb2RlID09PSAnRVJSX0lOVkFMSURfU1RBVEUnKSB7XG4gICAgICAgIC8vIE5vZGUgYnVnP1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIHRocm93IGVyclxuICAgIH0pXG4gIH1cblxuICAvLyAzLiBJZiByZXNwb25zZU9iamVjdCBpcyBudWxsLCB0aGVuIHJldHVybi5cbiAgaWYgKHJlc3BvbnNlT2JqZWN0ID09IG51bGwpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIDQuIExldCByZXNwb25zZSBiZSByZXNwb25zZU9iamVjdOKAmXMgcmVzcG9uc2UuXG4gIGNvbnN0IHJlc3BvbnNlID0gcmVzcG9uc2VPYmplY3Rba1N0YXRlXVxuXG4gIC8vIDUuIElmIHJlc3BvbnNl4oCZcyBib2R5IGlzIG5vdCBudWxsIGFuZCBpcyByZWFkYWJsZSwgdGhlbiBlcnJvciByZXNwb25zZeKAmXNcbiAgLy8gYm9keSB3aXRoIGVycm9yLlxuICBpZiAocmVzcG9uc2UuYm9keSAhPSBudWxsICYmIGlzUmVhZGFibGUocmVzcG9uc2UuYm9keT8uc3RyZWFtKSkge1xuICAgIHJlc3BvbnNlLmJvZHkuc3RyZWFtLmNhbmNlbChlcnJvcikuY2F0Y2goKGVycikgPT4ge1xuICAgICAgaWYgKGVyci5jb2RlID09PSAnRVJSX0lOVkFMSURfU1RBVEUnKSB7XG4gICAgICAgIC8vIE5vZGUgYnVnP1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIHRocm93IGVyclxuICAgIH0pXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2ZldGNoaW5nXG5mdW5jdGlvbiBmZXRjaGluZyAoe1xuICByZXF1ZXN0LFxuICBwcm9jZXNzUmVxdWVzdEJvZHlDaHVua0xlbmd0aCxcbiAgcHJvY2Vzc1JlcXVlc3RFbmRPZkJvZHksXG4gIHByb2Nlc3NSZXNwb25zZSxcbiAgcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5LFxuICBwcm9jZXNzUmVzcG9uc2VDb25zdW1lQm9keSxcbiAgdXNlUGFyYWxsZWxRdWV1ZSA9IGZhbHNlLFxuICBkaXNwYXRjaGVyIC8vIHVuZGljaVxufSkge1xuICAvLyAxLiBMZXQgdGFza0Rlc3RpbmF0aW9uIGJlIG51bGwuXG4gIGxldCB0YXNrRGVzdGluYXRpb24gPSBudWxsXG5cbiAgLy8gMi4gTGV0IGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5IGJlIGZhbHNlLlxuICBsZXQgY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkgPSBmYWxzZVxuXG4gIC8vIDMuIElmIHJlcXVlc3TigJlzIGNsaWVudCBpcyBub24tbnVsbCwgdGhlbjpcbiAgaWYgKHJlcXVlc3QuY2xpZW50ICE9IG51bGwpIHtcbiAgICAvLyAxLiBTZXQgdGFza0Rlc3RpbmF0aW9uIHRvIHJlcXVlc3TigJlzIGNsaWVudOKAmXMgZ2xvYmFsIG9iamVjdC5cbiAgICB0YXNrRGVzdGluYXRpb24gPSByZXF1ZXN0LmNsaWVudC5nbG9iYWxPYmplY3RcblxuICAgIC8vIDIuIFNldCBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSB0byByZXF1ZXN04oCZcyBjbGllbnTigJlzIGNyb3NzLW9yaWdpblxuICAgIC8vIGlzb2xhdGVkIGNhcGFiaWxpdHkuXG4gICAgY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkgPVxuICAgICAgcmVxdWVzdC5jbGllbnQuY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHlcbiAgfVxuXG4gIC8vIDQuIElmIHVzZVBhcmFsbGVsUXVldWUgaXMgdHJ1ZSwgdGhlbiBzZXQgdGFza0Rlc3RpbmF0aW9uIHRvIHRoZSByZXN1bHQgb2ZcbiAgLy8gc3RhcnRpbmcgYSBuZXcgcGFyYWxsZWwgcXVldWUuXG4gIC8vIFRPRE9cblxuICAvLyA1LiBMZXQgdGltaW5nSW5mbyBiZSBhIG5ldyBmZXRjaCB0aW1pbmcgaW5mbyB3aG9zZSBzdGFydCB0aW1lIGFuZFxuICAvLyBwb3N0LXJlZGlyZWN0IHN0YXJ0IHRpbWUgYXJlIHRoZSBjb2Fyc2VuZWQgc2hhcmVkIGN1cnJlbnQgdGltZSBnaXZlblxuICAvLyBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eS5cbiAgY29uc3QgY3VycmVuVGltZSA9IGNvYXJzZW5lZFNoYXJlZEN1cnJlbnRUaW1lKGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5KVxuICBjb25zdCB0aW1pbmdJbmZvID0gY3JlYXRlT3BhcXVlVGltaW5nSW5mbyh7XG4gICAgc3RhcnRUaW1lOiBjdXJyZW5UaW1lXG4gIH0pXG5cbiAgLy8gNi4gTGV0IGZldGNoUGFyYW1zIGJlIGEgbmV3IGZldGNoIHBhcmFtcyB3aG9zZVxuICAvLyByZXF1ZXN0IGlzIHJlcXVlc3QsXG4gIC8vIHRpbWluZyBpbmZvIGlzIHRpbWluZ0luZm8sXG4gIC8vIHByb2Nlc3MgcmVxdWVzdCBib2R5IGNodW5rIGxlbmd0aCBpcyBwcm9jZXNzUmVxdWVzdEJvZHlDaHVua0xlbmd0aCxcbiAgLy8gcHJvY2VzcyByZXF1ZXN0IGVuZC1vZi1ib2R5IGlzIHByb2Nlc3NSZXF1ZXN0RW5kT2ZCb2R5LFxuICAvLyBwcm9jZXNzIHJlc3BvbnNlIGlzIHByb2Nlc3NSZXNwb25zZSxcbiAgLy8gcHJvY2VzcyByZXNwb25zZSBjb25zdW1lIGJvZHkgaXMgcHJvY2Vzc1Jlc3BvbnNlQ29uc3VtZUJvZHksXG4gIC8vIHByb2Nlc3MgcmVzcG9uc2UgZW5kLW9mLWJvZHkgaXMgcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5LFxuICAvLyB0YXNrIGRlc3RpbmF0aW9uIGlzIHRhc2tEZXN0aW5hdGlvbixcbiAgLy8gYW5kIGNyb3NzLW9yaWdpbiBpc29sYXRlZCBjYXBhYmlsaXR5IGlzIGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5LlxuICBjb25zdCBmZXRjaFBhcmFtcyA9IHtcbiAgICBjb250cm9sbGVyOiBuZXcgRmV0Y2goZGlzcGF0Y2hlciksXG4gICAgcmVxdWVzdCxcbiAgICB0aW1pbmdJbmZvLFxuICAgIHByb2Nlc3NSZXF1ZXN0Qm9keUNodW5rTGVuZ3RoLFxuICAgIHByb2Nlc3NSZXF1ZXN0RW5kT2ZCb2R5LFxuICAgIHByb2Nlc3NSZXNwb25zZSxcbiAgICBwcm9jZXNzUmVzcG9uc2VDb25zdW1lQm9keSxcbiAgICBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHksXG4gICAgdGFza0Rlc3RpbmF0aW9uLFxuICAgIGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5XG4gIH1cblxuICAvLyA3LiBJZiByZXF1ZXN04oCZcyBib2R5IGlzIGEgYnl0ZSBzZXF1ZW5jZSwgdGhlbiBzZXQgcmVxdWVzdOKAmXMgYm9keSB0b1xuICAvLyAgICByZXF1ZXN04oCZcyBib2R5IGFzIGEgYm9keS5cbiAgLy8gTk9URTogU2luY2UgZmV0Y2hpbmcgaXMgb25seSBjYWxsZWQgZnJvbSBmZXRjaCwgYm9keSBzaG91bGQgYWxyZWFkeSBiZVxuICAvLyBleHRyYWN0ZWQuXG4gIGFzc2VydCghcmVxdWVzdC5ib2R5IHx8IHJlcXVlc3QuYm9keS5zdHJlYW0pXG5cbiAgLy8gOC4gSWYgcmVxdWVzdOKAmXMgd2luZG93IGlzIFwiY2xpZW50XCIsIHRoZW4gc2V0IHJlcXVlc3TigJlzIHdpbmRvdyB0byByZXF1ZXN04oCZc1xuICAvLyBjbGllbnQsIGlmIHJlcXVlc3TigJlzIGNsaWVudOKAmXMgZ2xvYmFsIG9iamVjdCBpcyBhIFdpbmRvdyBvYmplY3Q7IG90aGVyd2lzZVxuICAvLyBcIm5vLXdpbmRvd1wiLlxuICBpZiAocmVxdWVzdC53aW5kb3cgPT09ICdjbGllbnQnKSB7XG4gICAgLy8gVE9ETzogV2hhdCBpZiByZXF1ZXN0LmNsaWVudCBpcyBudWxsP1xuICAgIHJlcXVlc3Qud2luZG93ID1cbiAgICAgIHJlcXVlc3QuY2xpZW50Py5nbG9iYWxPYmplY3Q/LmNvbnN0cnVjdG9yPy5uYW1lID09PSAnV2luZG93J1xuICAgICAgICA/IHJlcXVlc3QuY2xpZW50XG4gICAgICAgIDogJ25vLXdpbmRvdydcbiAgfVxuXG4gIC8vIDkuIElmIHJlcXVlc3TigJlzIG9yaWdpbiBpcyBcImNsaWVudFwiLCB0aGVuIHNldCByZXF1ZXN04oCZcyBvcmlnaW4gdG8gcmVxdWVzdOKAmXNcbiAgLy8gY2xpZW504oCZcyBvcmlnaW4uXG4gIGlmIChyZXF1ZXN0Lm9yaWdpbiA9PT0gJ2NsaWVudCcpIHtcbiAgICAvLyBUT0RPOiBXaGF0IGlmIHJlcXVlc3QuY2xpZW50IGlzIG51bGw/XG4gICAgcmVxdWVzdC5vcmlnaW4gPSByZXF1ZXN0LmNsaWVudD8ub3JpZ2luXG4gIH1cblxuICAvLyAxMC4gSWYgYWxsIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgdHJ1ZTpcbiAgLy8gVE9ET1xuXG4gIC8vIDExLiBJZiByZXF1ZXN04oCZcyBwb2xpY3kgY29udGFpbmVyIGlzIFwiY2xpZW50XCIsIHRoZW46XG4gIGlmIChyZXF1ZXN0LnBvbGljeUNvbnRhaW5lciA9PT0gJ2NsaWVudCcpIHtcbiAgICAvLyAxLiBJZiByZXF1ZXN04oCZcyBjbGllbnQgaXMgbm9uLW51bGwsIHRoZW4gc2V0IHJlcXVlc3TigJlzIHBvbGljeVxuICAgIC8vIGNvbnRhaW5lciB0byBhIGNsb25lIG9mIHJlcXVlc3TigJlzIGNsaWVudOKAmXMgcG9saWN5IGNvbnRhaW5lci4gW0hUTUxdXG4gICAgaWYgKHJlcXVlc3QuY2xpZW50ICE9IG51bGwpIHtcbiAgICAgIHJlcXVlc3QucG9saWN5Q29udGFpbmVyID0gY2xvbmVQb2xpY3lDb250YWluZXIoXG4gICAgICAgIHJlcXVlc3QuY2xpZW50LnBvbGljeUNvbnRhaW5lclxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyAyLiBPdGhlcndpc2UsIHNldCByZXF1ZXN04oCZcyBwb2xpY3kgY29udGFpbmVyIHRvIGEgbmV3IHBvbGljeVxuICAgICAgLy8gY29udGFpbmVyLlxuICAgICAgcmVxdWVzdC5wb2xpY3lDb250YWluZXIgPSBtYWtlUG9saWN5Q29udGFpbmVyKClcbiAgICB9XG4gIH1cblxuICAvLyAxMi4gSWYgcmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgQWNjZXB0YCwgdGhlbjpcbiAgaWYgKCFyZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdhY2NlcHQnKSkge1xuICAgIC8vIDEuIExldCB2YWx1ZSBiZSBgKi8qYC5cbiAgICBjb25zdCB2YWx1ZSA9ICcqLyonXG5cbiAgICAvLyAyLiBBIHVzZXIgYWdlbnQgc2hvdWxkIHNldCB2YWx1ZSB0byB0aGUgZmlyc3QgbWF0Y2hpbmcgc3RhdGVtZW50LCBpZlxuICAgIC8vIGFueSwgc3dpdGNoaW5nIG9uIHJlcXVlc3TigJlzIGRlc3RpbmF0aW9uOlxuICAgIC8vIFwiZG9jdW1lbnRcIlxuICAgIC8vIFwiZnJhbWVcIlxuICAgIC8vIFwiaWZyYW1lXCJcbiAgICAvLyBgdGV4dC9odG1sLGFwcGxpY2F0aW9uL3hodG1sK3htbCxhcHBsaWNhdGlvbi94bWw7cT0wLjksKi8qO3E9MC44YFxuICAgIC8vIFwiaW1hZ2VcIlxuICAgIC8vIGBpbWFnZS9wbmcsaW1hZ2Uvc3ZnK3htbCxpbWFnZS8qO3E9MC44LCovKjtxPTAuNWBcbiAgICAvLyBcInN0eWxlXCJcbiAgICAvLyBgdGV4dC9jc3MsKi8qO3E9MC4xYFxuICAgIC8vIFRPRE9cblxuICAgIC8vIDMuIEFwcGVuZCBgQWNjZXB0YC92YWx1ZSB0byByZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cbiAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnYWNjZXB0JywgdmFsdWUpXG4gIH1cblxuICAvLyAxMy4gSWYgcmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgQWNjZXB0LUxhbmd1YWdlYCwgdGhlblxuICAvLyB1c2VyIGFnZW50cyBzaG91bGQgYXBwZW5kIGBBY2NlcHQtTGFuZ3VhZ2VgL2FuIGFwcHJvcHJpYXRlIHZhbHVlIHRvXG4gIC8vIHJlcXVlc3TigJlzIGhlYWRlciBsaXN0LlxuICBpZiAoIXJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2FjY2VwdC1sYW5ndWFnZScpKSB7XG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ2FjY2VwdC1sYW5ndWFnZScsICcqJylcbiAgfVxuXG4gIC8vIDE0LiBJZiByZXF1ZXN04oCZcyBwcmlvcml0eSBpcyBudWxsLCB0aGVuIHVzZSByZXF1ZXN04oCZcyBpbml0aWF0b3IgYW5kXG4gIC8vIGRlc3RpbmF0aW9uIGFwcHJvcHJpYXRlbHkgaW4gc2V0dGluZyByZXF1ZXN04oCZcyBwcmlvcml0eSB0byBhXG4gIC8vIHVzZXItYWdlbnQtZGVmaW5lZCBvYmplY3QuXG4gIGlmIChyZXF1ZXN0LnByaW9yaXR5ID09PSBudWxsKSB7XG4gICAgLy8gVE9ET1xuICB9XG5cbiAgLy8gMTUuIElmIHJlcXVlc3QgaXMgYSBzdWJyZXNvdXJjZSByZXF1ZXN0LCB0aGVuOlxuICBpZiAoc3VicmVzb3VyY2VTZXQuaGFzKHJlcXVlc3QuZGVzdGluYXRpb24pKSB7XG4gICAgLy8gVE9ET1xuICB9XG5cbiAgLy8gMTYuIFJ1biBtYWluIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLlxuICBtYWluRmV0Y2goZmV0Y2hQYXJhbXMpXG4gICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnRlcm1pbmF0ZShlcnIpXG4gICAgfSlcblxuICAvLyAxNy4gUmV0dXJuIGZldGNoUGFyYW0ncyBjb250cm9sbGVyXG4gIHJldHVybiBmZXRjaFBhcmFtcy5jb250cm9sbGVyXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LW1haW4tZmV0Y2hcbmFzeW5jIGZ1bmN0aW9uIG1haW5GZXRjaCAoZmV0Y2hQYXJhbXMsIHJlY3Vyc2l2ZSA9IGZhbHNlKSB7XG4gIC8vIDEuIExldCByZXF1ZXN0IGJlIGZldGNoUGFyYW1z4oCZcyByZXF1ZXN0LlxuICBjb25zdCByZXF1ZXN0ID0gZmV0Y2hQYXJhbXMucmVxdWVzdFxuXG4gIC8vIDIuIExldCByZXNwb25zZSBiZSBudWxsLlxuICBsZXQgcmVzcG9uc2UgPSBudWxsXG5cbiAgLy8gMy4gSWYgcmVxdWVzdOKAmXMgbG9jYWwtVVJMcy1vbmx5IGZsYWcgaXMgc2V0IGFuZCByZXF1ZXN04oCZcyBjdXJyZW50IFVSTCBpc1xuICAvLyBub3QgbG9jYWwsIHRoZW4gc2V0IHJlc3BvbnNlIHRvIGEgbmV0d29yayBlcnJvci5cbiAgaWYgKHJlcXVlc3QubG9jYWxVUkxzT25seSAmJiAhdXJsSXNMb2NhbChyZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KSkpIHtcbiAgICByZXNwb25zZSA9IG1ha2VOZXR3b3JrRXJyb3IoJ2xvY2FsIFVSTHMgb25seScpXG4gIH1cblxuICAvLyA0LiBSdW4gcmVwb3J0IENvbnRlbnQgU2VjdXJpdHkgUG9saWN5IHZpb2xhdGlvbnMgZm9yIHJlcXVlc3QuXG4gIC8vIFRPRE9cblxuICAvLyA1LiBVcGdyYWRlIHJlcXVlc3QgdG8gYSBwb3RlbnRpYWxseSB0cnVzdHdvcnRoeSBVUkwsIGlmIGFwcHJvcHJpYXRlLlxuICB0cnlVcGdyYWRlUmVxdWVzdFRvQVBvdGVudGlhbGx5VHJ1c3R3b3J0aHlVUkwocmVxdWVzdClcblxuICAvLyA2LiBJZiBzaG91bGQgcmVxdWVzdCBiZSBibG9ja2VkIGR1ZSB0byBhIGJhZCBwb3J0LCBzaG91bGQgZmV0Y2hpbmcgcmVxdWVzdFxuICAvLyBiZSBibG9ja2VkIGFzIG1peGVkIGNvbnRlbnQsIG9yIHNob3VsZCByZXF1ZXN0IGJlIGJsb2NrZWQgYnkgQ29udGVudFxuICAvLyBTZWN1cml0eSBQb2xpY3kgcmV0dXJucyBibG9ja2VkLCB0aGVuIHNldCByZXNwb25zZSB0byBhIG5ldHdvcmsgZXJyb3IuXG4gIGlmIChyZXF1ZXN0QmFkUG9ydChyZXF1ZXN0KSA9PT0gJ2Jsb2NrZWQnKSB7XG4gICAgcmVzcG9uc2UgPSBtYWtlTmV0d29ya0Vycm9yKCdiYWQgcG9ydCcpXG4gIH1cbiAgLy8gVE9ETzogc2hvdWxkIGZldGNoaW5nIHJlcXVlc3QgYmUgYmxvY2tlZCBhcyBtaXhlZCBjb250ZW50P1xuICAvLyBUT0RPOiBzaG91bGQgcmVxdWVzdCBiZSBibG9ja2VkIGJ5IENvbnRlbnQgU2VjdXJpdHkgUG9saWN5P1xuXG4gIC8vIDcuIElmIHJlcXVlc3TigJlzIHJlZmVycmVyIHBvbGljeSBpcyB0aGUgZW1wdHkgc3RyaW5nLCB0aGVuIHNldCByZXF1ZXN04oCZc1xuICAvLyByZWZlcnJlciBwb2xpY3kgdG8gcmVxdWVzdOKAmXMgcG9saWN5IGNvbnRhaW5lcuKAmXMgcmVmZXJyZXIgcG9saWN5LlxuICBpZiAocmVxdWVzdC5yZWZlcnJlclBvbGljeSA9PT0gJycpIHtcbiAgICByZXF1ZXN0LnJlZmVycmVyUG9saWN5ID0gcmVxdWVzdC5wb2xpY3lDb250YWluZXIucmVmZXJyZXJQb2xpY3lcbiAgfVxuXG4gIC8vIDguIElmIHJlcXVlc3TigJlzIHJlZmVycmVyIGlzIG5vdCBcIm5vLXJlZmVycmVyXCIsIHRoZW4gc2V0IHJlcXVlc3TigJlzXG4gIC8vIHJlZmVycmVyIHRvIHRoZSByZXN1bHQgb2YgaW52b2tpbmcgZGV0ZXJtaW5lIHJlcXVlc3TigJlzIHJlZmVycmVyLlxuICBpZiAocmVxdWVzdC5yZWZlcnJlciAhPT0gJ25vLXJlZmVycmVyJykge1xuICAgIHJlcXVlc3QucmVmZXJyZXIgPSBkZXRlcm1pbmVSZXF1ZXN0c1JlZmVycmVyKHJlcXVlc3QpXG4gIH1cblxuICAvLyA5LiBTZXQgcmVxdWVzdOKAmXMgY3VycmVudCBVUkzigJlzIHNjaGVtZSB0byBcImh0dHBzXCIgaWYgYWxsIG9mIHRoZSBmb2xsb3dpbmdcbiAgLy8gY29uZGl0aW9ucyBhcmUgdHJ1ZTpcbiAgLy8gLSByZXF1ZXN04oCZcyBjdXJyZW50IFVSTOKAmXMgc2NoZW1lIGlzIFwiaHR0cFwiXG4gIC8vIC0gcmVxdWVzdOKAmXMgY3VycmVudCBVUkzigJlzIGhvc3QgaXMgYSBkb21haW5cbiAgLy8gLSBNYXRjaGluZyByZXF1ZXN04oCZcyBjdXJyZW50IFVSTOKAmXMgaG9zdCBwZXIgS25vd24gSFNUUyBIb3N0IERvbWFpbiBOYW1lXG4gIC8vICAgTWF0Y2hpbmcgcmVzdWx0cyBpbiBlaXRoZXIgYSBzdXBlcmRvbWFpbiBtYXRjaCB3aXRoIGFuIGFzc2VydGVkXG4gIC8vICAgaW5jbHVkZVN1YkRvbWFpbnMgZGlyZWN0aXZlIG9yIGEgY29uZ3J1ZW50IG1hdGNoICh3aXRoIG9yIHdpdGhvdXQgYW5cbiAgLy8gICBhc3NlcnRlZCBpbmNsdWRlU3ViRG9tYWlucyBkaXJlY3RpdmUpLiBbSFNUU11cbiAgLy8gVE9ET1xuXG4gIC8vIDEwLiBJZiByZWN1cnNpdmUgaXMgZmFsc2UsIHRoZW4gcnVuIHRoZSByZW1haW5pbmcgc3RlcHMgaW4gcGFyYWxsZWwuXG4gIC8vIFRPRE9cblxuICAvLyAxMS4gSWYgcmVzcG9uc2UgaXMgbnVsbCwgdGhlbiBzZXQgcmVzcG9uc2UgdG8gdGhlIHJlc3VsdCBvZiBydW5uaW5nXG4gIC8vIHRoZSBzdGVwcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBmaXJzdCBtYXRjaGluZyBzdGF0ZW1lbnQ6XG4gIGlmIChyZXNwb25zZSA9PT0gbnVsbCkge1xuICAgIHJlc3BvbnNlID0gYXdhaXQgKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRVUkwgPSByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KVxuXG4gICAgICBpZiAoXG4gICAgICAgIC8vIC0gcmVxdWVzdOKAmXMgY3VycmVudCBVUkzigJlzIG9yaWdpbiBpcyBzYW1lIG9yaWdpbiB3aXRoIHJlcXVlc3TigJlzIG9yaWdpbixcbiAgICAgICAgLy8gICBhbmQgcmVxdWVzdOKAmXMgcmVzcG9uc2UgdGFpbnRpbmcgaXMgXCJiYXNpY1wiXG4gICAgICAgIChzYW1lT3JpZ2luKGN1cnJlbnRVUkwsIHJlcXVlc3QudXJsKSAmJiByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdiYXNpYycpIHx8XG4gICAgICAgIC8vIHJlcXVlc3TigJlzIGN1cnJlbnQgVVJM4oCZcyBzY2hlbWUgaXMgXCJkYXRhXCJcbiAgICAgICAgKGN1cnJlbnRVUkwucHJvdG9jb2wgPT09ICdkYXRhOicpIHx8XG4gICAgICAgIC8vIC0gcmVxdWVzdOKAmXMgbW9kZSBpcyBcIm5hdmlnYXRlXCIgb3IgXCJ3ZWJzb2NrZXRcIlxuICAgICAgICAocmVxdWVzdC5tb2RlID09PSAnbmF2aWdhdGUnIHx8IHJlcXVlc3QubW9kZSA9PT0gJ3dlYnNvY2tldCcpXG4gICAgICApIHtcbiAgICAgICAgLy8gMS4gU2V0IHJlcXVlc3TigJlzIHJlc3BvbnNlIHRhaW50aW5nIHRvIFwiYmFzaWNcIi5cbiAgICAgICAgcmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID0gJ2Jhc2ljJ1xuXG4gICAgICAgIC8vIDIuIFJldHVybiB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgc2NoZW1lIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLlxuICAgICAgICByZXR1cm4gYXdhaXQgc2NoZW1lRmV0Y2goZmV0Y2hQYXJhbXMpXG4gICAgICB9XG5cbiAgICAgIC8vIHJlcXVlc3TigJlzIG1vZGUgaXMgXCJzYW1lLW9yaWdpblwiXG4gICAgICBpZiAocmVxdWVzdC5tb2RlID09PSAnc2FtZS1vcmlnaW4nKSB7XG4gICAgICAgIC8vIDEuIFJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdyZXF1ZXN0IG1vZGUgY2Fubm90IGJlIFwic2FtZS1vcmlnaW5cIicpXG4gICAgICB9XG5cbiAgICAgIC8vIHJlcXVlc3TigJlzIG1vZGUgaXMgXCJuby1jb3JzXCJcbiAgICAgIGlmIChyZXF1ZXN0Lm1vZGUgPT09ICduby1jb3JzJykge1xuICAgICAgICAvLyAxLiBJZiByZXF1ZXN04oCZcyByZWRpcmVjdCBtb2RlIGlzIG5vdCBcImZvbGxvd1wiLCB0aGVuIHJldHVybiBhIG5ldHdvcmtcbiAgICAgICAgLy8gZXJyb3IuXG4gICAgICAgIGlmIChyZXF1ZXN0LnJlZGlyZWN0ICE9PSAnZm9sbG93Jykge1xuICAgICAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKFxuICAgICAgICAgICAgJ3JlZGlyZWN0IG1vZGUgY2Fubm90IGJlIFwiZm9sbG93XCIgZm9yIFwibm8tY29yc1wiIHJlcXVlc3QnXG4gICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gMi4gU2V0IHJlcXVlc3TigJlzIHJlc3BvbnNlIHRhaW50aW5nIHRvIFwib3BhcXVlXCIuXG4gICAgICAgIHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9ICdvcGFxdWUnXG5cbiAgICAgICAgLy8gMy4gUmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZyBzY2hlbWUgZmV0Y2ggZ2l2ZW4gZmV0Y2hQYXJhbXMuXG4gICAgICAgIHJldHVybiBhd2FpdCBzY2hlbWVGZXRjaChmZXRjaFBhcmFtcylcbiAgICAgIH1cblxuICAgICAgLy8gcmVxdWVzdOKAmXMgY3VycmVudCBVUkzigJlzIHNjaGVtZSBpcyBub3QgYW4gSFRUUChTKSBzY2hlbWVcbiAgICAgIGlmICghdXJsSXNIdHRwSHR0cHNTY2hlbWUocmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdCkpKSB7XG4gICAgICAgIC8vIFJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdVUkwgc2NoZW1lIG11c3QgYmUgYSBIVFRQKFMpIHNjaGVtZScpXG4gICAgICB9XG5cbiAgICAgIC8vIC0gcmVxdWVzdOKAmXMgdXNlLUNPUlMtcHJlZmxpZ2h0IGZsYWcgaXMgc2V0XG4gICAgICAvLyAtIHJlcXVlc3TigJlzIHVuc2FmZS1yZXF1ZXN0IGZsYWcgaXMgc2V0IGFuZCBlaXRoZXIgcmVxdWVzdOKAmXMgbWV0aG9kIGlzXG4gICAgICAvLyAgIG5vdCBhIENPUlMtc2FmZWxpc3RlZCBtZXRob2Qgb3IgQ09SUy11bnNhZmUgcmVxdWVzdC1oZWFkZXIgbmFtZXMgd2l0aFxuICAgICAgLy8gICByZXF1ZXN04oCZcyBoZWFkZXIgbGlzdCBpcyBub3QgZW1wdHlcbiAgICAgIC8vICAgIDEuIFNldCByZXF1ZXN04oCZcyByZXNwb25zZSB0YWludGluZyB0byBcImNvcnNcIi5cbiAgICAgIC8vICAgIDIuIExldCBjb3JzV2l0aFByZWZsaWdodFJlc3BvbnNlIGJlIHRoZSByZXN1bHQgb2YgcnVubmluZyBIVFRQIGZldGNoXG4gICAgICAvLyAgICBnaXZlbiBmZXRjaFBhcmFtcyBhbmQgdHJ1ZS5cbiAgICAgIC8vICAgIDMuIElmIGNvcnNXaXRoUHJlZmxpZ2h0UmVzcG9uc2UgaXMgYSBuZXR3b3JrIGVycm9yLCB0aGVuIGNsZWFyIGNhY2hlXG4gICAgICAvLyAgICBlbnRyaWVzIHVzaW5nIHJlcXVlc3QuXG4gICAgICAvLyAgICA0LiBSZXR1cm4gY29yc1dpdGhQcmVmbGlnaHRSZXNwb25zZS5cbiAgICAgIC8vIFRPRE9cblxuICAgICAgLy8gT3RoZXJ3aXNlXG4gICAgICAvLyAgICAxLiBTZXQgcmVxdWVzdOKAmXMgcmVzcG9uc2UgdGFpbnRpbmcgdG8gXCJjb3JzXCIuXG4gICAgICByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPSAnY29ycydcblxuICAgICAgLy8gICAgMi4gUmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZyBIVFRQIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLlxuICAgICAgcmV0dXJuIGF3YWl0IGh0dHBGZXRjaChmZXRjaFBhcmFtcylcbiAgICB9KSgpXG4gIH1cblxuICAvLyAxMi4gSWYgcmVjdXJzaXZlIGlzIHRydWUsIHRoZW4gcmV0dXJuIHJlc3BvbnNlLlxuICBpZiAocmVjdXJzaXZlKSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlXG4gIH1cblxuICAvLyAxMy4gSWYgcmVzcG9uc2UgaXMgbm90IGEgbmV0d29yayBlcnJvciBhbmQgcmVzcG9uc2UgaXMgbm90IGEgZmlsdGVyZWRcbiAgLy8gcmVzcG9uc2UsIHRoZW46XG4gIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IDAgJiYgIXJlc3BvbnNlLmludGVybmFsUmVzcG9uc2UpIHtcbiAgICAvLyBJZiByZXF1ZXN04oCZcyByZXNwb25zZSB0YWludGluZyBpcyBcImNvcnNcIiwgdGhlbjpcbiAgICBpZiAocmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnY29ycycpIHtcbiAgICAgIC8vIDEuIExldCBoZWFkZXJOYW1lcyBiZSB0aGUgcmVzdWx0IG9mIGV4dHJhY3RpbmcgaGVhZGVyIGxpc3QgdmFsdWVzXG4gICAgICAvLyBnaXZlbiBgQWNjZXNzLUNvbnRyb2wtRXhwb3NlLUhlYWRlcnNgIGFuZCByZXNwb25zZeKAmXMgaGVhZGVyIGxpc3QuXG4gICAgICAvLyBUT0RPXG4gICAgICAvLyAyLiBJZiByZXF1ZXN04oCZcyBjcmVkZW50aWFscyBtb2RlIGlzIG5vdCBcImluY2x1ZGVcIiBhbmQgaGVhZGVyTmFtZXNcbiAgICAgIC8vIGNvbnRhaW5zIGAqYCwgdGhlbiBzZXQgcmVzcG9uc2XigJlzIENPUlMtZXhwb3NlZCBoZWFkZXItbmFtZSBsaXN0IHRvXG4gICAgICAvLyBhbGwgdW5pcXVlIGhlYWRlciBuYW1lcyBpbiByZXNwb25zZeKAmXMgaGVhZGVyIGxpc3QuXG4gICAgICAvLyBUT0RPXG4gICAgICAvLyAzLiBPdGhlcndpc2UsIGlmIGhlYWRlck5hbWVzIGlzIG5vdCBudWxsIG9yIGZhaWx1cmUsIHRoZW4gc2V0XG4gICAgICAvLyByZXNwb25zZeKAmXMgQ09SUy1leHBvc2VkIGhlYWRlci1uYW1lIGxpc3QgdG8gaGVhZGVyTmFtZXMuXG4gICAgICAvLyBUT0RPXG4gICAgfVxuXG4gICAgLy8gU2V0IHJlc3BvbnNlIHRvIHRoZSBmb2xsb3dpbmcgZmlsdGVyZWQgcmVzcG9uc2Ugd2l0aCByZXNwb25zZSBhcyBpdHNcbiAgICAvLyBpbnRlcm5hbCByZXNwb25zZSwgZGVwZW5kaW5nIG9uIHJlcXVlc3TigJlzIHJlc3BvbnNlIHRhaW50aW5nOlxuICAgIGlmIChyZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdiYXNpYycpIHtcbiAgICAgIHJlc3BvbnNlID0gZmlsdGVyUmVzcG9uc2UocmVzcG9uc2UsICdiYXNpYycpXG4gICAgfSBlbHNlIGlmIChyZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdjb3JzJykge1xuICAgICAgcmVzcG9uc2UgPSBmaWx0ZXJSZXNwb25zZShyZXNwb25zZSwgJ2NvcnMnKVxuICAgIH0gZWxzZSBpZiAocmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnb3BhcXVlJykge1xuICAgICAgcmVzcG9uc2UgPSBmaWx0ZXJSZXNwb25zZShyZXNwb25zZSwgJ29wYXF1ZScpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydChmYWxzZSlcbiAgICB9XG4gIH1cblxuICAvLyAxNC4gTGV0IGludGVybmFsUmVzcG9uc2UgYmUgcmVzcG9uc2UsIGlmIHJlc3BvbnNlIGlzIGEgbmV0d29yayBlcnJvcixcbiAgLy8gYW5kIHJlc3BvbnNl4oCZcyBpbnRlcm5hbCByZXNwb25zZSBvdGhlcndpc2UuXG4gIGxldCBpbnRlcm5hbFJlc3BvbnNlID1cbiAgICByZXNwb25zZS5zdGF0dXMgPT09IDAgPyByZXNwb25zZSA6IHJlc3BvbnNlLmludGVybmFsUmVzcG9uc2VcblxuICAvLyAxNS4gSWYgaW50ZXJuYWxSZXNwb25zZeKAmXMgVVJMIGxpc3QgaXMgZW1wdHksIHRoZW4gc2V0IGl0IHRvIGEgY2xvbmUgb2ZcbiAgLy8gcmVxdWVzdOKAmXMgVVJMIGxpc3QuXG4gIGlmIChpbnRlcm5hbFJlc3BvbnNlLnVybExpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgaW50ZXJuYWxSZXNwb25zZS51cmxMaXN0LnB1c2goLi4ucmVxdWVzdC51cmxMaXN0KVxuICB9XG5cbiAgLy8gMTYuIElmIHJlcXVlc3TigJlzIHRpbWluZyBhbGxvdyBmYWlsZWQgZmxhZyBpcyB1bnNldCwgdGhlbiBzZXRcbiAgLy8gaW50ZXJuYWxSZXNwb25zZeKAmXMgdGltaW5nIGFsbG93IHBhc3NlZCBmbGFnLlxuICBpZiAoIXJlcXVlc3QudGltaW5nQWxsb3dGYWlsZWQpIHtcbiAgICByZXNwb25zZS50aW1pbmdBbGxvd1Bhc3NlZCA9IHRydWVcbiAgfVxuXG4gIC8vIDE3LiBJZiByZXNwb25zZSBpcyBub3QgYSBuZXR3b3JrIGVycm9yIGFuZCBhbnkgb2YgdGhlIGZvbGxvd2luZyByZXR1cm5zXG4gIC8vIGJsb2NrZWRcbiAgLy8gLSBzaG91bGQgaW50ZXJuYWxSZXNwb25zZSB0byByZXF1ZXN0IGJlIGJsb2NrZWQgYXMgbWl4ZWQgY29udGVudFxuICAvLyAtIHNob3VsZCBpbnRlcm5hbFJlc3BvbnNlIHRvIHJlcXVlc3QgYmUgYmxvY2tlZCBieSBDb250ZW50IFNlY3VyaXR5IFBvbGljeVxuICAvLyAtIHNob3VsZCBpbnRlcm5hbFJlc3BvbnNlIHRvIHJlcXVlc3QgYmUgYmxvY2tlZCBkdWUgdG8gaXRzIE1JTUUgdHlwZVxuICAvLyAtIHNob3VsZCBpbnRlcm5hbFJlc3BvbnNlIHRvIHJlcXVlc3QgYmUgYmxvY2tlZCBkdWUgdG8gbm9zbmlmZlxuICAvLyBUT0RPXG5cbiAgLy8gMTguIElmIHJlc3BvbnNl4oCZcyB0eXBlIGlzIFwib3BhcXVlXCIsIGludGVybmFsUmVzcG9uc2XigJlzIHN0YXR1cyBpcyAyMDYsXG4gIC8vIGludGVybmFsUmVzcG9uc2XigJlzIHJhbmdlLXJlcXVlc3RlZCBmbGFnIGlzIHNldCwgYW5kIHJlcXVlc3TigJlzIGhlYWRlclxuICAvLyBsaXN0IGRvZXMgbm90IGNvbnRhaW4gYFJhbmdlYCwgdGhlbiBzZXQgcmVzcG9uc2UgYW5kIGludGVybmFsUmVzcG9uc2VcbiAgLy8gdG8gYSBuZXR3b3JrIGVycm9yLlxuICBpZiAoXG4gICAgcmVzcG9uc2UudHlwZSA9PT0gJ29wYXF1ZScgJiZcbiAgICBpbnRlcm5hbFJlc3BvbnNlLnN0YXR1cyA9PT0gMjA2ICYmXG4gICAgaW50ZXJuYWxSZXNwb25zZS5yYW5nZVJlcXVlc3RlZCAmJlxuICAgICFyZXF1ZXN0LmhlYWRlcnMuY29udGFpbnMoJ3JhbmdlJylcbiAgKSB7XG4gICAgcmVzcG9uc2UgPSBpbnRlcm5hbFJlc3BvbnNlID0gbWFrZU5ldHdvcmtFcnJvcigpXG4gIH1cblxuICAvLyAxOS4gSWYgcmVzcG9uc2UgaXMgbm90IGEgbmV0d29yayBlcnJvciBhbmQgZWl0aGVyIHJlcXVlc3TigJlzIG1ldGhvZCBpc1xuICAvLyBgSEVBRGAgb3IgYENPTk5FQ1RgLCBvciBpbnRlcm5hbFJlc3BvbnNl4oCZcyBzdGF0dXMgaXMgYSBudWxsIGJvZHkgc3RhdHVzLFxuICAvLyBzZXQgaW50ZXJuYWxSZXNwb25zZeKAmXMgYm9keSB0byBudWxsIGFuZCBkaXNyZWdhcmQgYW55IGVucXVldWluZyB0b3dhcmRcbiAgLy8gaXQgKGlmIGFueSkuXG4gIGlmIChcbiAgICByZXNwb25zZS5zdGF0dXMgIT09IDAgJiZcbiAgICAocmVxdWVzdC5tZXRob2QgPT09ICdIRUFEJyB8fFxuICAgICAgcmVxdWVzdC5tZXRob2QgPT09ICdDT05ORUNUJyB8fFxuICAgICAgbnVsbEJvZHlTdGF0dXMuaW5jbHVkZXMoaW50ZXJuYWxSZXNwb25zZS5zdGF0dXMpKVxuICApIHtcbiAgICBpbnRlcm5hbFJlc3BvbnNlLmJvZHkgPSBudWxsXG4gICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5kdW1wID0gdHJ1ZVxuICB9XG5cbiAgLy8gMjAuIElmIHJlcXVlc3TigJlzIGludGVncml0eSBtZXRhZGF0YSBpcyBub3QgdGhlIGVtcHR5IHN0cmluZywgdGhlbjpcbiAgaWYgKHJlcXVlc3QuaW50ZWdyaXR5KSB7XG4gICAgLy8gMS4gTGV0IHByb2Nlc3NCb2R5RXJyb3IgYmUgdGhpcyBzdGVwOiBydW4gZmV0Y2ggZmluYWxlIGdpdmVuIGZldGNoUGFyYW1zXG4gICAgLy8gYW5kIGEgbmV0d29yayBlcnJvci5cbiAgICBjb25zdCBwcm9jZXNzQm9keUVycm9yID0gKHJlYXNvbikgPT5cbiAgICAgIGZldGNoRmluYWxlKGZldGNoUGFyYW1zLCBtYWtlTmV0d29ya0Vycm9yKHJlYXNvbikpXG5cbiAgICAvLyAyLiBJZiByZXF1ZXN04oCZcyByZXNwb25zZSB0YWludGluZyBpcyBcIm9wYXF1ZVwiLCBvciByZXNwb25zZeKAmXMgYm9keSBpcyBudWxsLFxuICAgIC8vIHRoZW4gcnVuIHByb2Nlc3NCb2R5RXJyb3IgYW5kIGFib3J0IHRoZXNlIHN0ZXBzLlxuICAgIGlmIChyZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdvcGFxdWUnIHx8IHJlc3BvbnNlLmJvZHkgPT0gbnVsbCkge1xuICAgICAgcHJvY2Vzc0JvZHlFcnJvcihyZXNwb25zZS5lcnJvcilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIDMuIExldCBwcm9jZXNzQm9keSBnaXZlbiBieXRlcyBiZSB0aGVzZSBzdGVwczpcbiAgICBjb25zdCBwcm9jZXNzQm9keSA9IChieXRlcykgPT4ge1xuICAgICAgLy8gMS4gSWYgYnl0ZXMgZG8gbm90IG1hdGNoIHJlcXVlc3TigJlzIGludGVncml0eSBtZXRhZGF0YSxcbiAgICAgIC8vIHRoZW4gcnVuIHByb2Nlc3NCb2R5RXJyb3IgYW5kIGFib3J0IHRoZXNlIHN0ZXBzLiBbU1JJXVxuICAgICAgaWYgKCFieXRlc01hdGNoKGJ5dGVzLCByZXF1ZXN0LmludGVncml0eSkpIHtcbiAgICAgICAgcHJvY2Vzc0JvZHlFcnJvcignaW50ZWdyaXR5IG1pc21hdGNoJylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIFNldCByZXNwb25zZeKAmXMgYm9keSB0byBieXRlcyBhcyBhIGJvZHkuXG4gICAgICByZXNwb25zZS5ib2R5ID0gc2FmZWx5RXh0cmFjdEJvZHkoYnl0ZXMpWzBdXG5cbiAgICAgIC8vIDMuIFJ1biBmZXRjaCBmaW5hbGUgZ2l2ZW4gZmV0Y2hQYXJhbXMgYW5kIHJlc3BvbnNlLlxuICAgICAgZmV0Y2hGaW5hbGUoZmV0Y2hQYXJhbXMsIHJlc3BvbnNlKVxuICAgIH1cblxuICAgIC8vIDQuIEZ1bGx5IHJlYWQgcmVzcG9uc2XigJlzIGJvZHkgZ2l2ZW4gcHJvY2Vzc0JvZHkgYW5kIHByb2Nlc3NCb2R5RXJyb3IuXG4gICAgYXdhaXQgZnVsbHlSZWFkQm9keShyZXNwb25zZS5ib2R5LCBwcm9jZXNzQm9keSwgcHJvY2Vzc0JvZHlFcnJvcilcbiAgfSBlbHNlIHtcbiAgICAvLyAyMS4gT3RoZXJ3aXNlLCBydW4gZmV0Y2ggZmluYWxlIGdpdmVuIGZldGNoUGFyYW1zIGFuZCByZXNwb25zZS5cbiAgICBmZXRjaEZpbmFsZShmZXRjaFBhcmFtcywgcmVzcG9uc2UpXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtc2NoZW1lLWZldGNoXG4vLyBnaXZlbiBhIGZldGNoIHBhcmFtcyBmZXRjaFBhcmFtc1xuZnVuY3Rpb24gc2NoZW1lRmV0Y2ggKGZldGNoUGFyYW1zKSB7XG4gIC8vIE5vdGU6IHNpbmNlIHRoZSBjb25uZWN0aW9uIGlzIGRlc3Ryb3llZCBvbiByZWRpcmVjdCwgd2hpY2ggc2V0cyBmZXRjaFBhcmFtcyB0byBhXG4gIC8vIGNhbmNlbGxlZCBzdGF0ZSwgd2UgZG8gbm90IHdhbnQgdGhpcyBjb25kaXRpb24gdG8gdHJpZ2dlciAqdW5sZXNzKiB0aGVyZSBoYXZlIGJlZW5cbiAgLy8gbm8gcmVkaXJlY3RzLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzE3NzZcbiAgLy8gMS4gSWYgZmV0Y2hQYXJhbXMgaXMgY2FuY2VsZWQsIHRoZW4gcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSBuZXR3b3JrIGVycm9yIGZvciBmZXRjaFBhcmFtcy5cbiAgaWYgKGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSAmJiBmZXRjaFBhcmFtcy5yZXF1ZXN0LnJlZGlyZWN0Q291bnQgPT09IDApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VBcHByb3ByaWF0ZU5ldHdvcmtFcnJvcihmZXRjaFBhcmFtcykpXG4gIH1cblxuICAvLyAyLiBMZXQgcmVxdWVzdCBiZSBmZXRjaFBhcmFtc+KAmXMgcmVxdWVzdC5cbiAgY29uc3QgeyByZXF1ZXN0IH0gPSBmZXRjaFBhcmFtc1xuXG4gIGNvbnN0IHsgcHJvdG9jb2w6IHNjaGVtZSB9ID0gcmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdClcblxuICAvLyAzLiBTd2l0Y2ggb24gcmVxdWVzdOKAmXMgY3VycmVudCBVUkzigJlzIHNjaGVtZSBhbmQgcnVuIHRoZSBhc3NvY2lhdGVkIHN0ZXBzOlxuICBzd2l0Y2ggKHNjaGVtZSkge1xuICAgIGNhc2UgJ2Fib3V0Oic6IHtcbiAgICAgIC8vIElmIHJlcXVlc3TigJlzIGN1cnJlbnQgVVJM4oCZcyBwYXRoIGlzIHRoZSBzdHJpbmcgXCJibGFua1wiLCB0aGVuIHJldHVybiBhIG5ldyByZXNwb25zZVxuICAgICAgLy8gd2hvc2Ugc3RhdHVzIG1lc3NhZ2UgaXMgYE9LYCwgaGVhZGVyIGxpc3QgaXMgwqsgKGBDb250ZW50LVR5cGVgLCBgdGV4dC9odG1sO2NoYXJzZXQ9dXRmLThgKSDCuyxcbiAgICAgIC8vIGFuZCBib2R5IGlzIHRoZSBlbXB0eSBieXRlIHNlcXVlbmNlIGFzIGEgYm9keS5cblxuICAgICAgLy8gT3RoZXJ3aXNlLCByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKCdhYm91dCBzY2hlbWUgaXMgbm90IHN1cHBvcnRlZCcpKVxuICAgIH1cbiAgICBjYXNlICdibG9iOic6IHtcbiAgICAgIGlmICghcmVzb2x2ZU9iamVjdFVSTCkge1xuICAgICAgICByZXNvbHZlT2JqZWN0VVJMID0gcmVxdWlyZSgnYnVmZmVyJykucmVzb2x2ZU9iamVjdFVSTFxuICAgICAgfVxuXG4gICAgICAvLyAxLiBMZXQgYmxvYlVSTEVudHJ5IGJlIHJlcXVlc3TigJlzIGN1cnJlbnQgVVJM4oCZcyBibG9iIFVSTCBlbnRyeS5cbiAgICAgIGNvbnN0IGJsb2JVUkxFbnRyeSA9IHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpXG5cbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS93ZWItcGxhdGZvcm0tdGVzdHMvd3B0L2Jsb2IvN2IwZWJhY2NjNjJiNTY2YTE5NjUzOTZlNWJlN2JiMmJjMDZmODQxZi9GaWxlQVBJL3VybC9yZXNvdXJjZXMvZmV0Y2gtdGVzdHMuanMjTDUyLUw1NlxuICAgICAgLy8gQnVmZmVyLnJlc29sdmVPYmplY3RVUkwgZG9lcyBub3QgaWdub3JlIFVSTCBxdWVyaWVzLlxuICAgICAgaWYgKGJsb2JVUkxFbnRyeS5zZWFyY2gubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignTmV0d29ya0Vycm9yIHdoZW4gYXR0ZW1wdGluZyB0byBmZXRjaCByZXNvdXJjZS4nKSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgYmxvYlVSTEVudHJ5T2JqZWN0ID0gcmVzb2x2ZU9iamVjdFVSTChibG9iVVJMRW50cnkudG9TdHJpbmcoKSlcblxuICAgICAgLy8gMi4gSWYgcmVxdWVzdOKAmXMgbWV0aG9kIGlzIG5vdCBgR0VUYCwgYmxvYlVSTEVudHJ5IGlzIG51bGwsIG9yIGJsb2JVUkxFbnRyeeKAmXNcbiAgICAgIC8vICAgIG9iamVjdCBpcyBub3QgYSBCbG9iIG9iamVjdCwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICAgICAgaWYgKHJlcXVlc3QubWV0aG9kICE9PSAnR0VUJyB8fCAhaXNCbG9iTGlrZShibG9iVVJMRW50cnlPYmplY3QpKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignaW52YWxpZCBtZXRob2QnKSlcbiAgICAgIH1cblxuICAgICAgLy8gMy4gTGV0IGJvZHlXaXRoVHlwZSBiZSB0aGUgcmVzdWx0IG9mIHNhZmVseSBleHRyYWN0aW5nIGJsb2JVUkxFbnRyeeKAmXMgb2JqZWN0LlxuICAgICAgY29uc3QgYm9keVdpdGhUeXBlID0gc2FmZWx5RXh0cmFjdEJvZHkoYmxvYlVSTEVudHJ5T2JqZWN0KVxuXG4gICAgICAvLyA0LiBMZXQgYm9keSBiZSBib2R5V2l0aFR5cGXigJlzIGJvZHkuXG4gICAgICBjb25zdCBib2R5ID0gYm9keVdpdGhUeXBlWzBdXG5cbiAgICAgIC8vIDUuIExldCBsZW5ndGggYmUgYm9keeKAmXMgbGVuZ3RoLCBzZXJpYWxpemVkIGFuZCBpc29tb3JwaGljIGVuY29kZWQuXG4gICAgICBjb25zdCBsZW5ndGggPSBpc29tb3JwaGljRW5jb2RlKGAke2JvZHkubGVuZ3RofWApXG5cbiAgICAgIC8vIDYuIExldCB0eXBlIGJlIGJvZHlXaXRoVHlwZeKAmXMgdHlwZSBpZiBpdCBpcyBub24tbnVsbDsgb3RoZXJ3aXNlIHRoZSBlbXB0eSBieXRlIHNlcXVlbmNlLlxuICAgICAgY29uc3QgdHlwZSA9IGJvZHlXaXRoVHlwZVsxXSA/PyAnJ1xuXG4gICAgICAvLyA3LiBSZXR1cm4gYSBuZXcgcmVzcG9uc2Ugd2hvc2Ugc3RhdHVzIG1lc3NhZ2UgaXMgYE9LYCwgaGVhZGVyIGxpc3QgaXNcbiAgICAgIC8vICAgIMKrIChgQ29udGVudC1MZW5ndGhgLCBsZW5ndGgpLCAoYENvbnRlbnQtVHlwZWAsIHR5cGUpIMK7LCBhbmQgYm9keSBpcyBib2R5LlxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBtYWtlUmVzcG9uc2Uoe1xuICAgICAgICBzdGF0dXNUZXh0OiAnT0snLFxuICAgICAgICBoZWFkZXJzTGlzdDogW1xuICAgICAgICAgIFsnY29udGVudC1sZW5ndGgnLCB7IG5hbWU6ICdDb250ZW50LUxlbmd0aCcsIHZhbHVlOiBsZW5ndGggfV0sXG4gICAgICAgICAgWydjb250ZW50LXR5cGUnLCB7IG5hbWU6ICdDb250ZW50LVR5cGUnLCB2YWx1ZTogdHlwZSB9XVxuICAgICAgICBdXG4gICAgICB9KVxuXG4gICAgICByZXNwb25zZS5ib2R5ID0gYm9keVxuXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3BvbnNlKVxuICAgIH1cbiAgICBjYXNlICdkYXRhOic6IHtcbiAgICAgIC8vIDEuIExldCBkYXRhVVJMU3RydWN0IGJlIHRoZSByZXN1bHQgb2YgcnVubmluZyB0aGVcbiAgICAgIC8vICAgIGRhdGE6IFVSTCBwcm9jZXNzb3Igb24gcmVxdWVzdOKAmXMgY3VycmVudCBVUkwuXG4gICAgICBjb25zdCBjdXJyZW50VVJMID0gcmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdClcbiAgICAgIGNvbnN0IGRhdGFVUkxTdHJ1Y3QgPSBkYXRhVVJMUHJvY2Vzc29yKGN1cnJlbnRVUkwpXG5cbiAgICAgIC8vIDIuIElmIGRhdGFVUkxTdHJ1Y3QgaXMgZmFpbHVyZSwgdGhlbiByZXR1cm4gYVxuICAgICAgLy8gICAgbmV0d29yayBlcnJvci5cbiAgICAgIGlmIChkYXRhVVJMU3RydWN0ID09PSAnZmFpbHVyZScpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKCdmYWlsZWQgdG8gZmV0Y2ggdGhlIGRhdGEgVVJMJykpXG4gICAgICB9XG5cbiAgICAgIC8vIDMuIExldCBtaW1lVHlwZSBiZSBkYXRhVVJMU3RydWN04oCZcyBNSU1FIHR5cGUsIHNlcmlhbGl6ZWQuXG4gICAgICBjb25zdCBtaW1lVHlwZSA9IHNlcmlhbGl6ZUFNaW1lVHlwZShkYXRhVVJMU3RydWN0Lm1pbWVUeXBlKVxuXG4gICAgICAvLyA0LiBSZXR1cm4gYSByZXNwb25zZSB3aG9zZSBzdGF0dXMgbWVzc2FnZSBpcyBgT0tgLFxuICAgICAgLy8gICAgaGVhZGVyIGxpc3QgaXMgwqsgKGBDb250ZW50LVR5cGVgLCBtaW1lVHlwZSkgwrssXG4gICAgICAvLyAgICBhbmQgYm9keSBpcyBkYXRhVVJMU3RydWN04oCZcyBib2R5IGFzIGEgYm9keS5cbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZVJlc3BvbnNlKHtcbiAgICAgICAgc3RhdHVzVGV4dDogJ09LJyxcbiAgICAgICAgaGVhZGVyc0xpc3Q6IFtcbiAgICAgICAgICBbJ2NvbnRlbnQtdHlwZScsIHsgbmFtZTogJ0NvbnRlbnQtVHlwZScsIHZhbHVlOiBtaW1lVHlwZSB9XVxuICAgICAgICBdLFxuICAgICAgICBib2R5OiBzYWZlbHlFeHRyYWN0Qm9keShkYXRhVVJMU3RydWN0LmJvZHkpWzBdXG4gICAgICB9KSlcbiAgICB9XG4gICAgY2FzZSAnZmlsZTonOiB7XG4gICAgICAvLyBGb3Igbm93LCB1bmZvcnR1bmF0ZSBhcyBpdCBpcywgZmlsZSBVUkxzIGFyZSBsZWZ0IGFzIGFuIGV4ZXJjaXNlIGZvciB0aGUgcmVhZGVyLlxuICAgICAgLy8gV2hlbiBpbiBkb3VidCwgcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignbm90IGltcGxlbWVudGVkLi4uIHlldC4uLicpKVxuICAgIH1cbiAgICBjYXNlICdodHRwOic6XG4gICAgY2FzZSAnaHR0cHM6Jzoge1xuICAgICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZyBIVFRQIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLlxuXG4gICAgICByZXR1cm4gaHR0cEZldGNoKGZldGNoUGFyYW1zKVxuICAgICAgICAuY2F0Y2goKGVycikgPT4gbWFrZU5ldHdvcmtFcnJvcihlcnIpKVxuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoJ3Vua25vd24gc2NoZW1lJykpXG4gICAgfVxuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmaW5hbGl6ZS1yZXNwb25zZVxuZnVuY3Rpb24gZmluYWxpemVSZXNwb25zZSAoZmV0Y2hQYXJhbXMsIHJlc3BvbnNlKSB7XG4gIC8vIDEuIFNldCBmZXRjaFBhcmFtc+KAmXMgcmVxdWVzdOKAmXMgZG9uZSBmbGFnLlxuICBmZXRjaFBhcmFtcy5yZXF1ZXN0LmRvbmUgPSB0cnVlXG5cbiAgLy8gMiwgSWYgZmV0Y2hQYXJhbXPigJlzIHByb2Nlc3MgcmVzcG9uc2UgZG9uZSBpcyBub3QgbnVsbCwgdGhlbiBxdWV1ZSBhIGZldGNoXG4gIC8vIHRhc2sgdG8gcnVuIGZldGNoUGFyYW1z4oCZcyBwcm9jZXNzIHJlc3BvbnNlIGRvbmUgZ2l2ZW4gcmVzcG9uc2UsIHdpdGhcbiAgLy8gZmV0Y2hQYXJhbXPigJlzIHRhc2sgZGVzdGluYXRpb24uXG4gIGlmIChmZXRjaFBhcmFtcy5wcm9jZXNzUmVzcG9uc2VEb25lICE9IG51bGwpIHtcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBmZXRjaFBhcmFtcy5wcm9jZXNzUmVzcG9uc2VEb25lKHJlc3BvbnNlKSlcbiAgfVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZmV0Y2gtZmluYWxlXG5mdW5jdGlvbiBmZXRjaEZpbmFsZSAoZmV0Y2hQYXJhbXMsIHJlc3BvbnNlKSB7XG4gIC8vIDEuIElmIHJlc3BvbnNlIGlzIGEgbmV0d29yayBlcnJvciwgdGhlbjpcbiAgaWYgKHJlc3BvbnNlLnR5cGUgPT09ICdlcnJvcicpIHtcbiAgICAvLyAxLiBTZXQgcmVzcG9uc2XigJlzIFVSTCBsaXN0IHRvIMKrIGZldGNoUGFyYW1z4oCZcyByZXF1ZXN04oCZcyBVUkwgbGlzdFswXSDCuy5cbiAgICByZXNwb25zZS51cmxMaXN0ID0gW2ZldGNoUGFyYW1zLnJlcXVlc3QudXJsTGlzdFswXV1cblxuICAgIC8vIDIuIFNldCByZXNwb25zZeKAmXMgdGltaW5nIGluZm8gdG8gdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhbiBvcGFxdWUgdGltaW5nXG4gICAgLy8gaW5mbyBmb3IgZmV0Y2hQYXJhbXPigJlzIHRpbWluZyBpbmZvLlxuICAgIHJlc3BvbnNlLnRpbWluZ0luZm8gPSBjcmVhdGVPcGFxdWVUaW1pbmdJbmZvKHtcbiAgICAgIHN0YXJ0VGltZTogZmV0Y2hQYXJhbXMudGltaW5nSW5mby5zdGFydFRpbWVcbiAgICB9KVxuICB9XG5cbiAgLy8gMi4gTGV0IHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSBiZSB0aGUgZm9sbG93aW5nIHN0ZXBzOlxuICBjb25zdCBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHkgPSAoKSA9PiB7XG4gICAgLy8gMS4gU2V0IGZldGNoUGFyYW1z4oCZcyByZXF1ZXN04oCZcyBkb25lIGZsYWcuXG4gICAgZmV0Y2hQYXJhbXMucmVxdWVzdC5kb25lID0gdHJ1ZVxuXG4gICAgLy8gSWYgZmV0Y2hQYXJhbXPigJlzIHByb2Nlc3MgcmVzcG9uc2UgZW5kLW9mLWJvZHkgaXMgbm90IG51bGwsXG4gICAgLy8gdGhlbiBxdWV1ZSBhIGZldGNoIHRhc2sgdG8gcnVuIGZldGNoUGFyYW1z4oCZcyBwcm9jZXNzIHJlc3BvbnNlXG4gICAgLy8gZW5kLW9mLWJvZHkgZ2l2ZW4gcmVzcG9uc2Ugd2l0aCBmZXRjaFBhcmFtc+KAmXMgdGFzayBkZXN0aW5hdGlvbi5cbiAgICBpZiAoZmV0Y2hQYXJhbXMucHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5ICE9IG51bGwpIHtcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZUVuZE9mQm9keShyZXNwb25zZSkpXG4gICAgfVxuICB9XG5cbiAgLy8gMy4gSWYgZmV0Y2hQYXJhbXPigJlzIHByb2Nlc3MgcmVzcG9uc2UgaXMgbm9uLW51bGwsIHRoZW4gcXVldWUgYSBmZXRjaCB0YXNrXG4gIC8vIHRvIHJ1biBmZXRjaFBhcmFtc+KAmXMgcHJvY2VzcyByZXNwb25zZSBnaXZlbiByZXNwb25zZSwgd2l0aCBmZXRjaFBhcmFtc+KAmXNcbiAgLy8gdGFzayBkZXN0aW5hdGlvbi5cbiAgaWYgKGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZSAhPSBudWxsKSB7XG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gZmV0Y2hQYXJhbXMucHJvY2Vzc1Jlc3BvbnNlKHJlc3BvbnNlKSlcbiAgfVxuXG4gIC8vIDQuIElmIHJlc3BvbnNl4oCZcyBib2R5IGlzIG51bGwsIHRoZW4gcnVuIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keS5cbiAgaWYgKHJlc3BvbnNlLmJvZHkgPT0gbnVsbCkge1xuICAgIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSgpXG4gIH0gZWxzZSB7XG4gIC8vIDUuIE90aGVyd2lzZTpcblxuICAgIC8vIDEuIExldCB0cmFuc2Zvcm1TdHJlYW0gYmUgYSBuZXcgYSBUcmFuc2Zvcm1TdHJlYW0uXG5cbiAgICAvLyAyLiBMZXQgaWRlbnRpdHlUcmFuc2Zvcm1BbGdvcml0aG0gYmUgYW4gYWxnb3JpdGhtIHdoaWNoLCBnaXZlbiBjaHVuayxcbiAgICAvLyBlbnF1ZXVlcyBjaHVuayBpbiB0cmFuc2Zvcm1TdHJlYW0uXG4gICAgY29uc3QgaWRlbnRpdHlUcmFuc2Zvcm1BbGdvcml0aG0gPSAoY2h1bmssIGNvbnRyb2xsZXIpID0+IHtcbiAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShjaHVuaylcbiAgICB9XG5cbiAgICAvLyAzLiBTZXQgdXAgdHJhbnNmb3JtU3RyZWFtIHdpdGggdHJhbnNmb3JtQWxnb3JpdGhtIHNldCB0byBpZGVudGl0eVRyYW5zZm9ybUFsZ29yaXRobVxuICAgIC8vIGFuZCBmbHVzaEFsZ29yaXRobSBzZXQgdG8gcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5LlxuICAgIGNvbnN0IHRyYW5zZm9ybVN0cmVhbSA9IG5ldyBUcmFuc2Zvcm1TdHJlYW0oe1xuICAgICAgc3RhcnQgKCkge30sXG4gICAgICB0cmFuc2Zvcm06IGlkZW50aXR5VHJhbnNmb3JtQWxnb3JpdGhtLFxuICAgICAgZmx1c2g6IHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keVxuICAgIH0sIHtcbiAgICAgIHNpemUgKCkge1xuICAgICAgICByZXR1cm4gMVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIHNpemUgKCkge1xuICAgICAgICByZXR1cm4gMVxuICAgICAgfVxuICAgIH0pXG5cbiAgICAvLyA0LiBTZXQgcmVzcG9uc2XigJlzIGJvZHkgdG8gdGhlIHJlc3VsdCBvZiBwaXBpbmcgcmVzcG9uc2XigJlzIGJvZHkgdGhyb3VnaCB0cmFuc2Zvcm1TdHJlYW0uXG4gICAgcmVzcG9uc2UuYm9keSA9IHsgc3RyZWFtOiByZXNwb25zZS5ib2R5LnN0cmVhbS5waXBlVGhyb3VnaCh0cmFuc2Zvcm1TdHJlYW0pIH1cbiAgfVxuXG4gIC8vIDYuIElmIGZldGNoUGFyYW1z4oCZcyBwcm9jZXNzIHJlc3BvbnNlIGNvbnN1bWUgYm9keSBpcyBub24tbnVsbCwgdGhlbjpcbiAgaWYgKGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZUNvbnN1bWVCb2R5ICE9IG51bGwpIHtcbiAgICAvLyAxLiBMZXQgcHJvY2Vzc0JvZHkgZ2l2ZW4gbnVsbE9yQnl0ZXMgYmUgdGhpcyBzdGVwOiBydW4gZmV0Y2hQYXJhbXPigJlzXG4gICAgLy8gcHJvY2VzcyByZXNwb25zZSBjb25zdW1lIGJvZHkgZ2l2ZW4gcmVzcG9uc2UgYW5kIG51bGxPckJ5dGVzLlxuICAgIGNvbnN0IHByb2Nlc3NCb2R5ID0gKG51bGxPckJ5dGVzKSA9PiBmZXRjaFBhcmFtcy5wcm9jZXNzUmVzcG9uc2VDb25zdW1lQm9keShyZXNwb25zZSwgbnVsbE9yQnl0ZXMpXG5cbiAgICAvLyAyLiBMZXQgcHJvY2Vzc0JvZHlFcnJvciBiZSB0aGlzIHN0ZXA6IHJ1biBmZXRjaFBhcmFtc+KAmXMgcHJvY2Vzc1xuICAgIC8vIHJlc3BvbnNlIGNvbnN1bWUgYm9keSBnaXZlbiByZXNwb25zZSBhbmQgZmFpbHVyZS5cbiAgICBjb25zdCBwcm9jZXNzQm9keUVycm9yID0gKGZhaWx1cmUpID0+IGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZUNvbnN1bWVCb2R5KHJlc3BvbnNlLCBmYWlsdXJlKVxuXG4gICAgLy8gMy4gSWYgcmVzcG9uc2XigJlzIGJvZHkgaXMgbnVsbCwgdGhlbiBxdWV1ZSBhIGZldGNoIHRhc2sgdG8gcnVuIHByb2Nlc3NCb2R5XG4gICAgLy8gZ2l2ZW4gbnVsbCwgd2l0aCBmZXRjaFBhcmFtc+KAmXMgdGFzayBkZXN0aW5hdGlvbi5cbiAgICBpZiAocmVzcG9uc2UuYm9keSA9PSBudWxsKSB7XG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBwcm9jZXNzQm9keShudWxsKSlcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gNC4gT3RoZXJ3aXNlLCBmdWxseSByZWFkIHJlc3BvbnNl4oCZcyBib2R5IGdpdmVuIHByb2Nlc3NCb2R5LCBwcm9jZXNzQm9keUVycm9yLFxuICAgICAgLy8gYW5kIGZldGNoUGFyYW1z4oCZcyB0YXNrIGRlc3RpbmF0aW9uLlxuICAgICAgcmV0dXJuIGZ1bGx5UmVhZEJvZHkocmVzcG9uc2UuYm9keSwgcHJvY2Vzc0JvZHksIHByb2Nlc3NCb2R5RXJyb3IpXG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNodHRwLWZldGNoXG5hc3luYyBmdW5jdGlvbiBodHRwRmV0Y2ggKGZldGNoUGFyYW1zKSB7XG4gIC8vIDEuIExldCByZXF1ZXN0IGJlIGZldGNoUGFyYW1z4oCZcyByZXF1ZXN0LlxuICBjb25zdCByZXF1ZXN0ID0gZmV0Y2hQYXJhbXMucmVxdWVzdFxuXG4gIC8vIDIuIExldCByZXNwb25zZSBiZSBudWxsLlxuICBsZXQgcmVzcG9uc2UgPSBudWxsXG5cbiAgLy8gMy4gTGV0IGFjdHVhbFJlc3BvbnNlIGJlIG51bGwuXG4gIGxldCBhY3R1YWxSZXNwb25zZSA9IG51bGxcblxuICAvLyA0LiBMZXQgdGltaW5nSW5mbyBiZSBmZXRjaFBhcmFtc+KAmXMgdGltaW5nIGluZm8uXG4gIGNvbnN0IHRpbWluZ0luZm8gPSBmZXRjaFBhcmFtcy50aW1pbmdJbmZvXG5cbiAgLy8gNS4gSWYgcmVxdWVzdOKAmXMgc2VydmljZS13b3JrZXJzIG1vZGUgaXMgXCJhbGxcIiwgdGhlbjpcbiAgaWYgKHJlcXVlc3Quc2VydmljZVdvcmtlcnMgPT09ICdhbGwnKSB7XG4gICAgLy8gVE9ET1xuICB9XG5cbiAgLy8gNi4gSWYgcmVzcG9uc2UgaXMgbnVsbCwgdGhlbjpcbiAgaWYgKHJlc3BvbnNlID09PSBudWxsKSB7XG4gICAgLy8gMS4gSWYgbWFrZUNPUlNQcmVmbGlnaHQgaXMgdHJ1ZSBhbmQgb25lIG9mIHRoZXNlIGNvbmRpdGlvbnMgaXMgdHJ1ZTpcbiAgICAvLyBUT0RPXG5cbiAgICAvLyAyLiBJZiByZXF1ZXN04oCZcyByZWRpcmVjdCBtb2RlIGlzIFwiZm9sbG93XCIsIHRoZW4gc2V0IHJlcXVlc3TigJlzXG4gICAgLy8gc2VydmljZS13b3JrZXJzIG1vZGUgdG8gXCJub25lXCIuXG4gICAgaWYgKHJlcXVlc3QucmVkaXJlY3QgPT09ICdmb2xsb3cnKSB7XG4gICAgICByZXF1ZXN0LnNlcnZpY2VXb3JrZXJzID0gJ25vbmUnXG4gICAgfVxuXG4gICAgLy8gMy4gU2V0IHJlc3BvbnNlIGFuZCBhY3R1YWxSZXNwb25zZSB0byB0aGUgcmVzdWx0IG9mIHJ1bm5pbmdcbiAgICAvLyBIVFRQLW5ldHdvcmstb3ItY2FjaGUgZmV0Y2ggZ2l2ZW4gZmV0Y2hQYXJhbXMuXG4gICAgYWN0dWFsUmVzcG9uc2UgPSByZXNwb25zZSA9IGF3YWl0IGh0dHBOZXR3b3JrT3JDYWNoZUZldGNoKGZldGNoUGFyYW1zKVxuXG4gICAgLy8gNC4gSWYgcmVxdWVzdOKAmXMgcmVzcG9uc2UgdGFpbnRpbmcgaXMgXCJjb3JzXCIgYW5kIGEgQ09SUyBjaGVja1xuICAgIC8vIGZvciByZXF1ZXN0IGFuZCByZXNwb25zZSByZXR1cm5zIGZhaWx1cmUsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgICBpZiAoXG4gICAgICByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdjb3JzJyAmJlxuICAgICAgY29yc0NoZWNrKHJlcXVlc3QsIHJlc3BvbnNlKSA9PT0gJ2ZhaWx1cmUnXG4gICAgKSB7XG4gICAgICByZXR1cm4gbWFrZU5ldHdvcmtFcnJvcignY29ycyBmYWlsdXJlJylcbiAgICB9XG5cbiAgICAvLyA1LiBJZiB0aGUgVEFPIGNoZWNrIGZvciByZXF1ZXN0IGFuZCByZXNwb25zZSByZXR1cm5zIGZhaWx1cmUsIHRoZW4gc2V0XG4gICAgLy8gcmVxdWVzdOKAmXMgdGltaW5nIGFsbG93IGZhaWxlZCBmbGFnLlxuICAgIGlmIChUQU9DaGVjayhyZXF1ZXN0LCByZXNwb25zZSkgPT09ICdmYWlsdXJlJykge1xuICAgICAgcmVxdWVzdC50aW1pbmdBbGxvd0ZhaWxlZCA9IHRydWVcbiAgICB9XG4gIH1cblxuICAvLyA3LiBJZiBlaXRoZXIgcmVxdWVzdOKAmXMgcmVzcG9uc2UgdGFpbnRpbmcgb3IgcmVzcG9uc2XigJlzIHR5cGVcbiAgLy8gaXMgXCJvcGFxdWVcIiwgYW5kIHRoZSBjcm9zcy1vcmlnaW4gcmVzb3VyY2UgcG9saWN5IGNoZWNrIHdpdGhcbiAgLy8gcmVxdWVzdOKAmXMgb3JpZ2luLCByZXF1ZXN04oCZcyBjbGllbnQsIHJlcXVlc3TigJlzIGRlc3RpbmF0aW9uLFxuICAvLyBhbmQgYWN0dWFsUmVzcG9uc2UgcmV0dXJucyBibG9ja2VkLCB0aGVuIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gIGlmIChcbiAgICAocmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnb3BhcXVlJyB8fCByZXNwb25zZS50eXBlID09PSAnb3BhcXVlJykgJiZcbiAgICBjcm9zc09yaWdpblJlc291cmNlUG9saWN5Q2hlY2soXG4gICAgICByZXF1ZXN0Lm9yaWdpbixcbiAgICAgIHJlcXVlc3QuY2xpZW50LFxuICAgICAgcmVxdWVzdC5kZXN0aW5hdGlvbixcbiAgICAgIGFjdHVhbFJlc3BvbnNlXG4gICAgKSA9PT0gJ2Jsb2NrZWQnXG4gICkge1xuICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdibG9ja2VkJylcbiAgfVxuXG4gIC8vIDguIElmIGFjdHVhbFJlc3BvbnNl4oCZcyBzdGF0dXMgaXMgYSByZWRpcmVjdCBzdGF0dXMsIHRoZW46XG4gIGlmIChyZWRpcmVjdFN0YXR1c1NldC5oYXMoYWN0dWFsUmVzcG9uc2Uuc3RhdHVzKSkge1xuICAgIC8vIDEuIElmIGFjdHVhbFJlc3BvbnNl4oCZcyBzdGF0dXMgaXMgbm90IDMwMywgcmVxdWVzdOKAmXMgYm9keSBpcyBub3QgbnVsbCxcbiAgICAvLyBhbmQgdGhlIGNvbm5lY3Rpb24gdXNlcyBIVFRQLzIsIHRoZW4gdXNlciBhZ2VudHMgbWF5LCBhbmQgYXJlIGV2ZW5cbiAgICAvLyBlbmNvdXJhZ2VkIHRvLCB0cmFuc21pdCBhbiBSU1RfU1RSRUFNIGZyYW1lLlxuICAgIC8vIFNlZSwgaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy9mZXRjaC9pc3N1ZXMvMTI4OFxuICAgIGlmIChyZXF1ZXN0LnJlZGlyZWN0ICE9PSAnbWFudWFsJykge1xuICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb25uZWN0aW9uLmRlc3Ryb3koKVxuICAgIH1cblxuICAgIC8vIDIuIFN3aXRjaCBvbiByZXF1ZXN04oCZcyByZWRpcmVjdCBtb2RlOlxuICAgIGlmIChyZXF1ZXN0LnJlZGlyZWN0ID09PSAnZXJyb3InKSB7XG4gICAgICAvLyBTZXQgcmVzcG9uc2UgdG8gYSBuZXR3b3JrIGVycm9yLlxuICAgICAgcmVzcG9uc2UgPSBtYWtlTmV0d29ya0Vycm9yKCd1bmV4cGVjdGVkIHJlZGlyZWN0JylcbiAgICB9IGVsc2UgaWYgKHJlcXVlc3QucmVkaXJlY3QgPT09ICdtYW51YWwnKSB7XG4gICAgICAvLyBTZXQgcmVzcG9uc2UgdG8gYW4gb3BhcXVlLXJlZGlyZWN0IGZpbHRlcmVkIHJlc3BvbnNlIHdob3NlIGludGVybmFsXG4gICAgICAvLyByZXNwb25zZSBpcyBhY3R1YWxSZXNwb25zZS5cbiAgICAgIC8vIE5PVEUoc3BlYyk6IE9uIHRoZSB3ZWIgdGhpcyB3b3VsZCByZXR1cm4gYW4gYG9wYXF1ZXJlZGlyZWN0YCByZXNwb25zZSxcbiAgICAgIC8vIGJ1dCB0aGF0IGRvZXNuJ3QgbWFrZSBzZW5zZSBzZXJ2ZXIgc2lkZS5cbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMTE5My5cbiAgICAgIHJlc3BvbnNlID0gYWN0dWFsUmVzcG9uc2VcbiAgICB9IGVsc2UgaWYgKHJlcXVlc3QucmVkaXJlY3QgPT09ICdmb2xsb3cnKSB7XG4gICAgICAvLyBTZXQgcmVzcG9uc2UgdG8gdGhlIHJlc3VsdCBvZiBydW5uaW5nIEhUVFAtcmVkaXJlY3QgZmV0Y2ggZ2l2ZW5cbiAgICAgIC8vIGZldGNoUGFyYW1zIGFuZCByZXNwb25zZS5cbiAgICAgIHJlc3BvbnNlID0gYXdhaXQgaHR0cFJlZGlyZWN0RmV0Y2goZmV0Y2hQYXJhbXMsIHJlc3BvbnNlKVxuICAgIH0gZWxzZSB7XG4gICAgICBhc3NlcnQoZmFsc2UpXG4gICAgfVxuICB9XG5cbiAgLy8gOS4gU2V0IHJlc3BvbnNl4oCZcyB0aW1pbmcgaW5mbyB0byB0aW1pbmdJbmZvLlxuICByZXNwb25zZS50aW1pbmdJbmZvID0gdGltaW5nSW5mb1xuXG4gIC8vIDEwLiBSZXR1cm4gcmVzcG9uc2UuXG4gIHJldHVybiByZXNwb25zZVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC1yZWRpcmVjdC1mZXRjaFxuZnVuY3Rpb24gaHR0cFJlZGlyZWN0RmV0Y2ggKGZldGNoUGFyYW1zLCByZXNwb25zZSkge1xuICAvLyAxLiBMZXQgcmVxdWVzdCBiZSBmZXRjaFBhcmFtc+KAmXMgcmVxdWVzdC5cbiAgY29uc3QgcmVxdWVzdCA9IGZldGNoUGFyYW1zLnJlcXVlc3RcblxuICAvLyAyLiBMZXQgYWN0dWFsUmVzcG9uc2UgYmUgcmVzcG9uc2UsIGlmIHJlc3BvbnNlIGlzIG5vdCBhIGZpbHRlcmVkIHJlc3BvbnNlLFxuICAvLyBhbmQgcmVzcG9uc2XigJlzIGludGVybmFsIHJlc3BvbnNlIG90aGVyd2lzZS5cbiAgY29uc3QgYWN0dWFsUmVzcG9uc2UgPSByZXNwb25zZS5pbnRlcm5hbFJlc3BvbnNlXG4gICAgPyByZXNwb25zZS5pbnRlcm5hbFJlc3BvbnNlXG4gICAgOiByZXNwb25zZVxuXG4gIC8vIDMuIExldCBsb2NhdGlvblVSTCBiZSBhY3R1YWxSZXNwb25zZeKAmXMgbG9jYXRpb24gVVJMIGdpdmVuIHJlcXVlc3TigJlzIGN1cnJlbnRcbiAgLy8gVVJM4oCZcyBmcmFnbWVudC5cbiAgbGV0IGxvY2F0aW9uVVJMXG5cbiAgdHJ5IHtcbiAgICBsb2NhdGlvblVSTCA9IHJlc3BvbnNlTG9jYXRpb25VUkwoXG4gICAgICBhY3R1YWxSZXNwb25zZSxcbiAgICAgIHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpLmhhc2hcbiAgICApXG5cbiAgICAvLyA0LiBJZiBsb2NhdGlvblVSTCBpcyBudWxsLCB0aGVuIHJldHVybiByZXNwb25zZS5cbiAgICBpZiAobG9jYXRpb25VUkwgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyA1LiBJZiBsb2NhdGlvblVSTCBpcyBmYWlsdXJlLCB0aGVuIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKGVycikpXG4gIH1cblxuICAvLyA2LiBJZiBsb2NhdGlvblVSTOKAmXMgc2NoZW1lIGlzIG5vdCBhbiBIVFRQKFMpIHNjaGVtZSwgdGhlbiByZXR1cm4gYSBuZXR3b3JrXG4gIC8vIGVycm9yLlxuICBpZiAoIXVybElzSHR0cEh0dHBzU2NoZW1lKGxvY2F0aW9uVVJMKSkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignVVJMIHNjaGVtZSBtdXN0IGJlIGEgSFRUUChTKSBzY2hlbWUnKSlcbiAgfVxuXG4gIC8vIDcuIElmIHJlcXVlc3TigJlzIHJlZGlyZWN0IGNvdW50IGlzIDIwLCB0aGVuIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gIGlmIChyZXF1ZXN0LnJlZGlyZWN0Q291bnQgPT09IDIwKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKCdyZWRpcmVjdCBjb3VudCBleGNlZWRlZCcpKVxuICB9XG5cbiAgLy8gOC4gSW5jcmVhc2UgcmVxdWVzdOKAmXMgcmVkaXJlY3QgY291bnQgYnkgMS5cbiAgcmVxdWVzdC5yZWRpcmVjdENvdW50ICs9IDFcblxuICAvLyA5LiBJZiByZXF1ZXN04oCZcyBtb2RlIGlzIFwiY29yc1wiLCBsb2NhdGlvblVSTCBpbmNsdWRlcyBjcmVkZW50aWFscywgYW5kXG4gIC8vIHJlcXVlc3TigJlzIG9yaWdpbiBpcyBub3Qgc2FtZSBvcmlnaW4gd2l0aCBsb2NhdGlvblVSTOKAmXMgb3JpZ2luLCB0aGVuIHJldHVyblxuICAvLyAgYSBuZXR3b3JrIGVycm9yLlxuICBpZiAoXG4gICAgcmVxdWVzdC5tb2RlID09PSAnY29ycycgJiZcbiAgICAobG9jYXRpb25VUkwudXNlcm5hbWUgfHwgbG9jYXRpb25VUkwucGFzc3dvcmQpICYmXG4gICAgIXNhbWVPcmlnaW4ocmVxdWVzdCwgbG9jYXRpb25VUkwpXG4gICkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignY3Jvc3Mgb3JpZ2luIG5vdCBhbGxvd2VkIGZvciByZXF1ZXN0IG1vZGUgXCJjb3JzXCInKSlcbiAgfVxuXG4gIC8vIDEwLiBJZiByZXF1ZXN04oCZcyByZXNwb25zZSB0YWludGluZyBpcyBcImNvcnNcIiBhbmQgbG9jYXRpb25VUkwgaW5jbHVkZXNcbiAgLy8gY3JlZGVudGlhbHMsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgaWYgKFxuICAgIHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ2NvcnMnICYmXG4gICAgKGxvY2F0aW9uVVJMLnVzZXJuYW1lIHx8IGxvY2F0aW9uVVJMLnBhc3N3b3JkKVxuICApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoXG4gICAgICAnVVJMIGNhbm5vdCBjb250YWluIGNyZWRlbnRpYWxzIGZvciByZXF1ZXN0IG1vZGUgXCJjb3JzXCInXG4gICAgKSlcbiAgfVxuXG4gIC8vIDExLiBJZiBhY3R1YWxSZXNwb25zZeKAmXMgc3RhdHVzIGlzIG5vdCAzMDMsIHJlcXVlc3TigJlzIGJvZHkgaXMgbm9uLW51bGwsXG4gIC8vIGFuZCByZXF1ZXN04oCZcyBib2R54oCZcyBzb3VyY2UgaXMgbnVsbCwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICBpZiAoXG4gICAgYWN0dWFsUmVzcG9uc2Uuc3RhdHVzICE9PSAzMDMgJiZcbiAgICByZXF1ZXN0LmJvZHkgIT0gbnVsbCAmJlxuICAgIHJlcXVlc3QuYm9keS5zb3VyY2UgPT0gbnVsbFxuICApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoKSlcbiAgfVxuXG4gIC8vIDEyLiBJZiBvbmUgb2YgdGhlIGZvbGxvd2luZyBpcyB0cnVlXG4gIC8vIC0gYWN0dWFsUmVzcG9uc2XigJlzIHN0YXR1cyBpcyAzMDEgb3IgMzAyIGFuZCByZXF1ZXN04oCZcyBtZXRob2QgaXMgYFBPU1RgXG4gIC8vIC0gYWN0dWFsUmVzcG9uc2XigJlzIHN0YXR1cyBpcyAzMDMgYW5kIHJlcXVlc3TigJlzIG1ldGhvZCBpcyBub3QgYEdFVGAgb3IgYEhFQURgXG4gIGlmIChcbiAgICAoWzMwMSwgMzAyXS5pbmNsdWRlcyhhY3R1YWxSZXNwb25zZS5zdGF0dXMpICYmIHJlcXVlc3QubWV0aG9kID09PSAnUE9TVCcpIHx8XG4gICAgKGFjdHVhbFJlc3BvbnNlLnN0YXR1cyA9PT0gMzAzICYmXG4gICAgICAhR0VUX09SX0hFQUQuaW5jbHVkZXMocmVxdWVzdC5tZXRob2QpKVxuICApIHtcbiAgICAvLyB0aGVuOlxuICAgIC8vIDEuIFNldCByZXF1ZXN04oCZcyBtZXRob2QgdG8gYEdFVGAgYW5kIHJlcXVlc3TigJlzIGJvZHkgdG8gbnVsbC5cbiAgICByZXF1ZXN0Lm1ldGhvZCA9ICdHRVQnXG4gICAgcmVxdWVzdC5ib2R5ID0gbnVsbFxuXG4gICAgLy8gMi4gRm9yIGVhY2ggaGVhZGVyTmFtZSBvZiByZXF1ZXN0LWJvZHktaGVhZGVyIG5hbWUsIGRlbGV0ZSBoZWFkZXJOYW1lIGZyb21cbiAgICAvLyByZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cbiAgICBmb3IgKGNvbnN0IGhlYWRlck5hbWUgb2YgcmVxdWVzdEJvZHlIZWFkZXIpIHtcbiAgICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QuZGVsZXRlKGhlYWRlck5hbWUpXG4gICAgfVxuICB9XG5cbiAgLy8gMTMuIElmIHJlcXVlc3TigJlzIGN1cnJlbnQgVVJM4oCZcyBvcmlnaW4gaXMgbm90IHNhbWUgb3JpZ2luIHdpdGggbG9jYXRpb25VUkzigJlzXG4gIC8vICAgICBvcmlnaW4sIHRoZW4gZm9yIGVhY2ggaGVhZGVyTmFtZSBvZiBDT1JTIG5vbi13aWxkY2FyZCByZXF1ZXN0LWhlYWRlciBuYW1lLFxuICAvLyAgICAgZGVsZXRlIGhlYWRlck5hbWUgZnJvbSByZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cbiAgaWYgKCFzYW1lT3JpZ2luKHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpLCBsb2NhdGlvblVSTCkpIHtcbiAgICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29ycy1ub24td2lsZGNhcmQtcmVxdWVzdC1oZWFkZXItbmFtZVxuICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QuZGVsZXRlKCdhdXRob3JpemF0aW9uJylcblxuICAgIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNhdXRoZW50aWNhdGlvbi1lbnRyaWVzXG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5kZWxldGUoJ3Byb3h5LWF1dGhvcml6YXRpb24nLCB0cnVlKVxuXG4gICAgLy8gXCJDb29raWVcIiBhbmQgXCJIb3N0XCIgYXJlIGZvcmJpZGRlbiByZXF1ZXN0LWhlYWRlcnMsIHdoaWNoIHVuZGljaSBkb2Vzbid0IGltcGxlbWVudC5cbiAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmRlbGV0ZSgnY29va2llJylcbiAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmRlbGV0ZSgnaG9zdCcpXG4gIH1cblxuICAvLyAxNC4gSWYgcmVxdWVzdOKAmXMgYm9keSBpcyBub24tbnVsbCwgdGhlbiBzZXQgcmVxdWVzdOKAmXMgYm9keSB0byB0aGUgZmlyc3QgcmV0dXJuXG4gIC8vIHZhbHVlIG9mIHNhZmVseSBleHRyYWN0aW5nIHJlcXVlc3TigJlzIGJvZHnigJlzIHNvdXJjZS5cbiAgaWYgKHJlcXVlc3QuYm9keSAhPSBudWxsKSB7XG4gICAgYXNzZXJ0KHJlcXVlc3QuYm9keS5zb3VyY2UgIT0gbnVsbClcbiAgICByZXF1ZXN0LmJvZHkgPSBzYWZlbHlFeHRyYWN0Qm9keShyZXF1ZXN0LmJvZHkuc291cmNlKVswXVxuICB9XG5cbiAgLy8gMTUuIExldCB0aW1pbmdJbmZvIGJlIGZldGNoUGFyYW1z4oCZcyB0aW1pbmcgaW5mby5cbiAgY29uc3QgdGltaW5nSW5mbyA9IGZldGNoUGFyYW1zLnRpbWluZ0luZm9cblxuICAvLyAxNi4gU2V0IHRpbWluZ0luZm/igJlzIHJlZGlyZWN0IGVuZCB0aW1lIGFuZCBwb3N0LXJlZGlyZWN0IHN0YXJ0IHRpbWUgdG8gdGhlXG4gIC8vIGNvYXJzZW5lZCBzaGFyZWQgY3VycmVudCB0aW1lIGdpdmVuIGZldGNoUGFyYW1z4oCZcyBjcm9zcy1vcmlnaW4gaXNvbGF0ZWRcbiAgLy8gY2FwYWJpbGl0eS5cbiAgdGltaW5nSW5mby5yZWRpcmVjdEVuZFRpbWUgPSB0aW1pbmdJbmZvLnBvc3RSZWRpcmVjdFN0YXJ0VGltZSA9XG4gICAgY29hcnNlbmVkU2hhcmVkQ3VycmVudFRpbWUoZmV0Y2hQYXJhbXMuY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkpXG5cbiAgLy8gMTcuIElmIHRpbWluZ0luZm/igJlzIHJlZGlyZWN0IHN0YXJ0IHRpbWUgaXMgMCwgdGhlbiBzZXQgdGltaW5nSW5mb+KAmXNcbiAgLy8gIHJlZGlyZWN0IHN0YXJ0IHRpbWUgdG8gdGltaW5nSW5mb+KAmXMgc3RhcnQgdGltZS5cbiAgaWYgKHRpbWluZ0luZm8ucmVkaXJlY3RTdGFydFRpbWUgPT09IDApIHtcbiAgICB0aW1pbmdJbmZvLnJlZGlyZWN0U3RhcnRUaW1lID0gdGltaW5nSW5mby5zdGFydFRpbWVcbiAgfVxuXG4gIC8vIDE4LiBBcHBlbmQgbG9jYXRpb25VUkwgdG8gcmVxdWVzdOKAmXMgVVJMIGxpc3QuXG4gIHJlcXVlc3QudXJsTGlzdC5wdXNoKGxvY2F0aW9uVVJMKVxuXG4gIC8vIDE5LiBJbnZva2Ugc2V0IHJlcXVlc3TigJlzIHJlZmVycmVyIHBvbGljeSBvbiByZWRpcmVjdCBvbiByZXF1ZXN0IGFuZFxuICAvLyBhY3R1YWxSZXNwb25zZS5cbiAgc2V0UmVxdWVzdFJlZmVycmVyUG9saWN5T25SZWRpcmVjdChyZXF1ZXN0LCBhY3R1YWxSZXNwb25zZSlcblxuICAvLyAyMC4gUmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZyBtYWluIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zIGFuZCB0cnVlLlxuICByZXR1cm4gbWFpbkZldGNoKGZldGNoUGFyYW1zLCB0cnVlKVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC1uZXR3b3JrLW9yLWNhY2hlLWZldGNoXG5hc3luYyBmdW5jdGlvbiBodHRwTmV0d29ya09yQ2FjaGVGZXRjaCAoXG4gIGZldGNoUGFyYW1zLFxuICBpc0F1dGhlbnRpY2F0aW9uRmV0Y2ggPSBmYWxzZSxcbiAgaXNOZXdDb25uZWN0aW9uRmV0Y2ggPSBmYWxzZVxuKSB7XG4gIC8vIDEuIExldCByZXF1ZXN0IGJlIGZldGNoUGFyYW1z4oCZcyByZXF1ZXN0LlxuICBjb25zdCByZXF1ZXN0ID0gZmV0Y2hQYXJhbXMucmVxdWVzdFxuXG4gIC8vIDIuIExldCBodHRwRmV0Y2hQYXJhbXMgYmUgbnVsbC5cbiAgbGV0IGh0dHBGZXRjaFBhcmFtcyA9IG51bGxcblxuICAvLyAzLiBMZXQgaHR0cFJlcXVlc3QgYmUgbnVsbC5cbiAgbGV0IGh0dHBSZXF1ZXN0ID0gbnVsbFxuXG4gIC8vIDQuIExldCByZXNwb25zZSBiZSBudWxsLlxuICBsZXQgcmVzcG9uc2UgPSBudWxsXG5cbiAgLy8gNS4gTGV0IHN0b3JlZFJlc3BvbnNlIGJlIG51bGwuXG4gIC8vIFRPRE86IGNhY2hlXG5cbiAgLy8gNi4gTGV0IGh0dHBDYWNoZSBiZSBudWxsLlxuICBjb25zdCBodHRwQ2FjaGUgPSBudWxsXG5cbiAgLy8gNy4gTGV0IHRoZSByZXZhbGlkYXRpbmdGbGFnIGJlIHVuc2V0LlxuICBjb25zdCByZXZhbGlkYXRpbmdGbGFnID0gZmFsc2VcblxuICAvLyA4LiBSdW4gdGhlc2Ugc3RlcHMsIGJ1dCBhYm9ydCB3aGVuIHRoZSBvbmdvaW5nIGZldGNoIGlzIHRlcm1pbmF0ZWQ6XG5cbiAgLy8gICAgMS4gSWYgcmVxdWVzdOKAmXMgd2luZG93IGlzIFwibm8td2luZG93XCIgYW5kIHJlcXVlc3TigJlzIHJlZGlyZWN0IG1vZGUgaXNcbiAgLy8gICAgXCJlcnJvclwiLCB0aGVuIHNldCBodHRwRmV0Y2hQYXJhbXMgdG8gZmV0Y2hQYXJhbXMgYW5kIGh0dHBSZXF1ZXN0IHRvXG4gIC8vICAgIHJlcXVlc3QuXG4gIGlmIChyZXF1ZXN0LndpbmRvdyA9PT0gJ25vLXdpbmRvdycgJiYgcmVxdWVzdC5yZWRpcmVjdCA9PT0gJ2Vycm9yJykge1xuICAgIGh0dHBGZXRjaFBhcmFtcyA9IGZldGNoUGFyYW1zXG4gICAgaHR0cFJlcXVlc3QgPSByZXF1ZXN0XG4gIH0gZWxzZSB7XG4gICAgLy8gT3RoZXJ3aXNlOlxuXG4gICAgLy8gMS4gU2V0IGh0dHBSZXF1ZXN0IHRvIGEgY2xvbmUgb2YgcmVxdWVzdC5cbiAgICBodHRwUmVxdWVzdCA9IG1ha2VSZXF1ZXN0KHJlcXVlc3QpXG5cbiAgICAvLyAyLiBTZXQgaHR0cEZldGNoUGFyYW1zIHRvIGEgY29weSBvZiBmZXRjaFBhcmFtcy5cbiAgICBodHRwRmV0Y2hQYXJhbXMgPSB7IC4uLmZldGNoUGFyYW1zIH1cblxuICAgIC8vIDMuIFNldCBodHRwRmV0Y2hQYXJhbXPigJlzIHJlcXVlc3QgdG8gaHR0cFJlcXVlc3QuXG4gICAgaHR0cEZldGNoUGFyYW1zLnJlcXVlc3QgPSBodHRwUmVxdWVzdFxuICB9XG5cbiAgLy8gICAgMy4gTGV0IGluY2x1ZGVDcmVkZW50aWFscyBiZSB0cnVlIGlmIG9uZSBvZlxuICBjb25zdCBpbmNsdWRlQ3JlZGVudGlhbHMgPVxuICAgIHJlcXVlc3QuY3JlZGVudGlhbHMgPT09ICdpbmNsdWRlJyB8fFxuICAgIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnc2FtZS1vcmlnaW4nICYmXG4gICAgICByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdiYXNpYycpXG5cbiAgLy8gICAgNC4gTGV0IGNvbnRlbnRMZW5ndGggYmUgaHR0cFJlcXVlc3TigJlzIGJvZHnigJlzIGxlbmd0aCwgaWYgaHR0cFJlcXVlc3TigJlzXG4gIC8vICAgIGJvZHkgaXMgbm9uLW51bGw7IG90aGVyd2lzZSBudWxsLlxuICBjb25zdCBjb250ZW50TGVuZ3RoID0gaHR0cFJlcXVlc3QuYm9keSA/IGh0dHBSZXF1ZXN0LmJvZHkubGVuZ3RoIDogbnVsbFxuXG4gIC8vICAgIDUuIExldCBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgYmUgbnVsbC5cbiAgbGV0IGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSA9IG51bGxcblxuICAvLyAgICA2LiBJZiBodHRwUmVxdWVzdOKAmXMgYm9keSBpcyBudWxsIGFuZCBodHRwUmVxdWVzdOKAmXMgbWV0aG9kIGlzIGBQT1NUYCBvclxuICAvLyAgICBgUFVUYCwgdGhlbiBzZXQgY29udGVudExlbmd0aEhlYWRlclZhbHVlIHRvIGAwYC5cbiAgaWYgKFxuICAgIGh0dHBSZXF1ZXN0LmJvZHkgPT0gbnVsbCAmJlxuICAgIFsnUE9TVCcsICdQVVQnXS5pbmNsdWRlcyhodHRwUmVxdWVzdC5tZXRob2QpXG4gICkge1xuICAgIGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSA9ICcwJ1xuICB9XG5cbiAgLy8gICAgNy4gSWYgY29udGVudExlbmd0aCBpcyBub24tbnVsbCwgdGhlbiBzZXQgY29udGVudExlbmd0aEhlYWRlclZhbHVlIHRvXG4gIC8vICAgIGNvbnRlbnRMZW5ndGgsIHNlcmlhbGl6ZWQgYW5kIGlzb21vcnBoaWMgZW5jb2RlZC5cbiAgaWYgKGNvbnRlbnRMZW5ndGggIT0gbnVsbCkge1xuICAgIGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSA9IGlzb21vcnBoaWNFbmNvZGUoYCR7Y29udGVudExlbmd0aH1gKVxuICB9XG5cbiAgLy8gICAgOC4gSWYgY29udGVudExlbmd0aEhlYWRlclZhbHVlIGlzIG5vbi1udWxsLCB0aGVuIGFwcGVuZFxuICAvLyAgICBgQ29udGVudC1MZW5ndGhgL2NvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSB0byBodHRwUmVxdWVzdOKAmXMgaGVhZGVyXG4gIC8vICAgIGxpc3QuXG4gIGlmIChjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgIT0gbnVsbCkge1xuICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnY29udGVudC1sZW5ndGgnLCBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUpXG4gIH1cblxuICAvLyAgICA5LiBJZiBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgaXMgbm9uLW51bGwsIHRoZW4gYXBwZW5kIChgQ29udGVudC1MZW5ndGhgLFxuICAvLyAgICBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUpIHRvIGh0dHBSZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cblxuICAvLyAgICAxMC4gSWYgY29udGVudExlbmd0aCBpcyBub24tbnVsbCBhbmQgaHR0cFJlcXVlc3TigJlzIGtlZXBhbGl2ZSBpcyB0cnVlLFxuICAvLyAgICB0aGVuOlxuICBpZiAoY29udGVudExlbmd0aCAhPSBudWxsICYmIGh0dHBSZXF1ZXN0LmtlZXBhbGl2ZSkge1xuICAgIC8vIE5PVEU6IGtlZXBhbGl2ZSBpcyBhIG5vb3Agb3V0c2lkZSBvZiBicm93c2VyIGNvbnRleHQuXG4gIH1cblxuICAvLyAgICAxMS4gSWYgaHR0cFJlcXVlc3TigJlzIHJlZmVycmVyIGlzIGEgVVJMLCB0aGVuIGFwcGVuZFxuICAvLyAgICBgUmVmZXJlcmAvaHR0cFJlcXVlc3TigJlzIHJlZmVycmVyLCBzZXJpYWxpemVkIGFuZCBpc29tb3JwaGljIGVuY29kZWQsXG4gIC8vICAgICB0byBodHRwUmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QuXG4gIGlmIChodHRwUmVxdWVzdC5yZWZlcnJlciBpbnN0YW5jZW9mIFVSTCkge1xuICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgncmVmZXJlcicsIGlzb21vcnBoaWNFbmNvZGUoaHR0cFJlcXVlc3QucmVmZXJyZXIuaHJlZikpXG4gIH1cblxuICAvLyAgICAxMi4gQXBwZW5kIGEgcmVxdWVzdCBgT3JpZ2luYCBoZWFkZXIgZm9yIGh0dHBSZXF1ZXN0LlxuICBhcHBlbmRSZXF1ZXN0T3JpZ2luSGVhZGVyKGh0dHBSZXF1ZXN0KVxuXG4gIC8vICAgIDEzLiBBcHBlbmQgdGhlIEZldGNoIG1ldGFkYXRhIGhlYWRlcnMgZm9yIGh0dHBSZXF1ZXN0LiBbRkVUQ0gtTUVUQURBVEFdXG4gIGFwcGVuZEZldGNoTWV0YWRhdGEoaHR0cFJlcXVlc3QpXG5cbiAgLy8gICAgMTQuIElmIGh0dHBSZXF1ZXN04oCZcyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluIGBVc2VyLUFnZW50YCwgdGhlblxuICAvLyAgICB1c2VyIGFnZW50cyBzaG91bGQgYXBwZW5kIGBVc2VyLUFnZW50YC9kZWZhdWx0IGBVc2VyLUFnZW50YCB2YWx1ZSB0b1xuICAvLyAgICBodHRwUmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QuXG4gIGlmICghaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ3VzZXItYWdlbnQnKSkge1xuICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgndXNlci1hZ2VudCcsIHR5cGVvZiBlc2J1aWxkRGV0ZWN0aW9uID09PSAndW5kZWZpbmVkJyA/ICd1bmRpY2knIDogJ25vZGUnKVxuICB9XG5cbiAgLy8gICAgMTUuIElmIGh0dHBSZXF1ZXN04oCZcyBjYWNoZSBtb2RlIGlzIFwiZGVmYXVsdFwiIGFuZCBodHRwUmVxdWVzdOKAmXMgaGVhZGVyXG4gIC8vICAgIGxpc3QgY29udGFpbnMgYElmLU1vZGlmaWVkLVNpbmNlYCwgYElmLU5vbmUtTWF0Y2hgLFxuICAvLyAgICBgSWYtVW5tb2RpZmllZC1TaW5jZWAsIGBJZi1NYXRjaGAsIG9yIGBJZi1SYW5nZWAsIHRoZW4gc2V0XG4gIC8vICAgIGh0dHBSZXF1ZXN04oCZcyBjYWNoZSBtb2RlIHRvIFwibm8tc3RvcmVcIi5cbiAgaWYgKFxuICAgIGh0dHBSZXF1ZXN0LmNhY2hlID09PSAnZGVmYXVsdCcgJiZcbiAgICAoaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2lmLW1vZGlmaWVkLXNpbmNlJykgfHxcbiAgICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdpZi1ub25lLW1hdGNoJykgfHxcbiAgICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdpZi11bm1vZGlmaWVkLXNpbmNlJykgfHxcbiAgICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdpZi1tYXRjaCcpIHx8XG4gICAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygnaWYtcmFuZ2UnKSlcbiAgKSB7XG4gICAgaHR0cFJlcXVlc3QuY2FjaGUgPSAnbm8tc3RvcmUnXG4gIH1cblxuICAvLyAgICAxNi4gSWYgaHR0cFJlcXVlc3TigJlzIGNhY2hlIG1vZGUgaXMgXCJuby1jYWNoZVwiLCBodHRwUmVxdWVzdOKAmXMgcHJldmVudFxuICAvLyAgICBuby1jYWNoZSBjYWNoZS1jb250cm9sIGhlYWRlciBtb2RpZmljYXRpb24gZmxhZyBpcyB1bnNldCwgYW5kXG4gIC8vICAgIGh0dHBSZXF1ZXN04oCZcyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluIGBDYWNoZS1Db250cm9sYCwgdGhlbiBhcHBlbmRcbiAgLy8gICAgYENhY2hlLUNvbnRyb2xgL2BtYXgtYWdlPTBgIHRvIGh0dHBSZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cbiAgaWYgKFxuICAgIGh0dHBSZXF1ZXN0LmNhY2hlID09PSAnbm8tY2FjaGUnICYmXG4gICAgIWh0dHBSZXF1ZXN0LnByZXZlbnROb0NhY2hlQ2FjaGVDb250cm9sSGVhZGVyTW9kaWZpY2F0aW9uICYmXG4gICAgIWh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdjYWNoZS1jb250cm9sJylcbiAgKSB7XG4gICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdjYWNoZS1jb250cm9sJywgJ21heC1hZ2U9MCcpXG4gIH1cblxuICAvLyAgICAxNy4gSWYgaHR0cFJlcXVlc3TigJlzIGNhY2hlIG1vZGUgaXMgXCJuby1zdG9yZVwiIG9yIFwicmVsb2FkXCIsIHRoZW46XG4gIGlmIChodHRwUmVxdWVzdC5jYWNoZSA9PT0gJ25vLXN0b3JlJyB8fCBodHRwUmVxdWVzdC5jYWNoZSA9PT0gJ3JlbG9hZCcpIHtcbiAgICAvLyAxLiBJZiBodHRwUmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgUHJhZ21hYCwgdGhlbiBhcHBlbmRcbiAgICAvLyBgUHJhZ21hYC9gbm8tY2FjaGVgIHRvIGh0dHBSZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cbiAgICBpZiAoIWh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdwcmFnbWEnKSkge1xuICAgICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdwcmFnbWEnLCAnbm8tY2FjaGUnKVxuICAgIH1cblxuICAgIC8vIDIuIElmIGh0dHBSZXF1ZXN04oCZcyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluIGBDYWNoZS1Db250cm9sYCxcbiAgICAvLyB0aGVuIGFwcGVuZCBgQ2FjaGUtQ29udHJvbGAvYG5vLWNhY2hlYCB0byBodHRwUmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QuXG4gICAgaWYgKCFodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygnY2FjaGUtY29udHJvbCcpKSB7XG4gICAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ2NhY2hlLWNvbnRyb2wnLCAnbm8tY2FjaGUnKVxuICAgIH1cbiAgfVxuXG4gIC8vICAgIDE4LiBJZiBodHRwUmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QgY29udGFpbnMgYFJhbmdlYCwgdGhlbiBhcHBlbmRcbiAgLy8gICAgYEFjY2VwdC1FbmNvZGluZ2AvYGlkZW50aXR5YCB0byBodHRwUmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QuXG4gIGlmIChodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygncmFuZ2UnKSkge1xuICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnYWNjZXB0LWVuY29kaW5nJywgJ2lkZW50aXR5JylcbiAgfVxuXG4gIC8vICAgIDE5LiBNb2RpZnkgaHR0cFJlcXVlc3TigJlzIGhlYWRlciBsaXN0IHBlciBIVFRQLiBEbyBub3QgYXBwZW5kIGEgZ2l2ZW5cbiAgLy8gICAgaGVhZGVyIGlmIGh0dHBSZXF1ZXN04oCZcyBoZWFkZXIgbGlzdCBjb250YWlucyB0aGF0IGhlYWRlcuKAmXMgbmFtZS5cbiAgLy8gICAgVE9ETzogaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy9mZXRjaC9pc3N1ZXMvMTI4NSNpc3N1ZWNvbW1lbnQtODk2NTYwMTI5XG4gIGlmICghaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2FjY2VwdC1lbmNvZGluZycpKSB7XG4gICAgaWYgKHVybEhhc0h0dHBzU2NoZW1lKHJlcXVlc3RDdXJyZW50VVJMKGh0dHBSZXF1ZXN0KSkpIHtcbiAgICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnYWNjZXB0LWVuY29kaW5nJywgJ2JyLCBnemlwLCBkZWZsYXRlJylcbiAgICB9IGVsc2Uge1xuICAgICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdhY2NlcHQtZW5jb2RpbmcnLCAnZ3ppcCwgZGVmbGF0ZScpXG4gICAgfVxuICB9XG5cbiAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuZGVsZXRlKCdob3N0JylcblxuICAvLyAgICAyMC4gSWYgaW5jbHVkZUNyZWRlbnRpYWxzIGlzIHRydWUsIHRoZW46XG4gIGlmIChpbmNsdWRlQ3JlZGVudGlhbHMpIHtcbiAgICAvLyAxLiBJZiB0aGUgdXNlciBhZ2VudCBpcyBub3QgY29uZmlndXJlZCB0byBibG9jayBjb29raWVzIGZvciBodHRwUmVxdWVzdFxuICAgIC8vIChzZWUgc2VjdGlvbiA3IG9mIFtDT09LSUVTXSksIHRoZW46XG4gICAgLy8gVE9ETzogY3JlZGVudGlhbHNcbiAgICAvLyAyLiBJZiBodHRwUmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgQXV0aG9yaXphdGlvbmAsIHRoZW46XG4gICAgLy8gVE9ETzogY3JlZGVudGlhbHNcbiAgfVxuXG4gIC8vICAgIDIxLiBJZiB0aGVyZeKAmXMgYSBwcm94eS1hdXRoZW50aWNhdGlvbiBlbnRyeSwgdXNlIGl0IGFzIGFwcHJvcHJpYXRlLlxuICAvLyAgICBUT0RPOiBwcm94eS1hdXRoZW50aWNhdGlvblxuXG4gIC8vICAgIDIyLiBTZXQgaHR0cENhY2hlIHRvIHRoZSByZXN1bHQgb2YgZGV0ZXJtaW5pbmcgdGhlIEhUVFAgY2FjaGVcbiAgLy8gICAgcGFydGl0aW9uLCBnaXZlbiBodHRwUmVxdWVzdC5cbiAgLy8gICAgVE9ETzogY2FjaGVcblxuICAvLyAgICAyMy4gSWYgaHR0cENhY2hlIGlzIG51bGwsIHRoZW4gc2V0IGh0dHBSZXF1ZXN04oCZcyBjYWNoZSBtb2RlIHRvXG4gIC8vICAgIFwibm8tc3RvcmVcIi5cbiAgaWYgKGh0dHBDYWNoZSA9PSBudWxsKSB7XG4gICAgaHR0cFJlcXVlc3QuY2FjaGUgPSAnbm8tc3RvcmUnXG4gIH1cblxuICAvLyAgICAyNC4gSWYgaHR0cFJlcXVlc3TigJlzIGNhY2hlIG1vZGUgaXMgbmVpdGhlciBcIm5vLXN0b3JlXCIgbm9yIFwicmVsb2FkXCIsXG4gIC8vICAgIHRoZW46XG4gIGlmIChodHRwUmVxdWVzdC5tb2RlICE9PSAnbm8tc3RvcmUnICYmIGh0dHBSZXF1ZXN0Lm1vZGUgIT09ICdyZWxvYWQnKSB7XG4gICAgLy8gVE9ETzogY2FjaGVcbiAgfVxuXG4gIC8vIDkuIElmIGFib3J0ZWQsIHRoZW4gcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSBuZXR3b3JrIGVycm9yIGZvciBmZXRjaFBhcmFtcy5cbiAgLy8gVE9ET1xuXG4gIC8vIDEwLiBJZiByZXNwb25zZSBpcyBudWxsLCB0aGVuOlxuICBpZiAocmVzcG9uc2UgPT0gbnVsbCkge1xuICAgIC8vIDEuIElmIGh0dHBSZXF1ZXN04oCZcyBjYWNoZSBtb2RlIGlzIFwib25seS1pZi1jYWNoZWRcIiwgdGhlbiByZXR1cm4gYVxuICAgIC8vIG5ldHdvcmsgZXJyb3IuXG4gICAgaWYgKGh0dHBSZXF1ZXN0Lm1vZGUgPT09ICdvbmx5LWlmLWNhY2hlZCcpIHtcbiAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdvbmx5IGlmIGNhY2hlZCcpXG4gICAgfVxuXG4gICAgLy8gMi4gTGV0IGZvcndhcmRSZXNwb25zZSBiZSB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgSFRUUC1uZXR3b3JrIGZldGNoXG4gICAgLy8gZ2l2ZW4gaHR0cEZldGNoUGFyYW1zLCBpbmNsdWRlQ3JlZGVudGlhbHMsIGFuZCBpc05ld0Nvbm5lY3Rpb25GZXRjaC5cbiAgICBjb25zdCBmb3J3YXJkUmVzcG9uc2UgPSBhd2FpdCBodHRwTmV0d29ya0ZldGNoKFxuICAgICAgaHR0cEZldGNoUGFyYW1zLFxuICAgICAgaW5jbHVkZUNyZWRlbnRpYWxzLFxuICAgICAgaXNOZXdDb25uZWN0aW9uRmV0Y2hcbiAgICApXG5cbiAgICAvLyAzLiBJZiBodHRwUmVxdWVzdOKAmXMgbWV0aG9kIGlzIHVuc2FmZSBhbmQgZm9yd2FyZFJlc3BvbnNl4oCZcyBzdGF0dXMgaXNcbiAgICAvLyBpbiB0aGUgcmFuZ2UgMjAwIHRvIDM5OSwgaW5jbHVzaXZlLCBpbnZhbGlkYXRlIGFwcHJvcHJpYXRlIHN0b3JlZFxuICAgIC8vIHJlc3BvbnNlcyBpbiBodHRwQ2FjaGUsIGFzIHBlciB0aGUgXCJJbnZhbGlkYXRpb25cIiBjaGFwdGVyIG9mIEhUVFBcbiAgICAvLyBDYWNoaW5nLCBhbmQgc2V0IHN0b3JlZFJlc3BvbnNlIHRvIG51bGwuIFtIVFRQLUNBQ0hJTkddXG4gICAgaWYgKFxuICAgICAgIXNhZmVNZXRob2RzU2V0LmhhcyhodHRwUmVxdWVzdC5tZXRob2QpICYmXG4gICAgICBmb3J3YXJkUmVzcG9uc2Uuc3RhdHVzID49IDIwMCAmJlxuICAgICAgZm9yd2FyZFJlc3BvbnNlLnN0YXR1cyA8PSAzOTlcbiAgICApIHtcbiAgICAgIC8vIFRPRE86IGNhY2hlXG4gICAgfVxuXG4gICAgLy8gNC4gSWYgdGhlIHJldmFsaWRhdGluZ0ZsYWcgaXMgc2V0IGFuZCBmb3J3YXJkUmVzcG9uc2XigJlzIHN0YXR1cyBpcyAzMDQsXG4gICAgLy8gdGhlbjpcbiAgICBpZiAocmV2YWxpZGF0aW5nRmxhZyAmJiBmb3J3YXJkUmVzcG9uc2Uuc3RhdHVzID09PSAzMDQpIHtcbiAgICAgIC8vIFRPRE86IGNhY2hlXG4gICAgfVxuXG4gICAgLy8gNS4gSWYgcmVzcG9uc2UgaXMgbnVsbCwgdGhlbjpcbiAgICBpZiAocmVzcG9uc2UgPT0gbnVsbCkge1xuICAgICAgLy8gMS4gU2V0IHJlc3BvbnNlIHRvIGZvcndhcmRSZXNwb25zZS5cbiAgICAgIHJlc3BvbnNlID0gZm9yd2FyZFJlc3BvbnNlXG5cbiAgICAgIC8vIDIuIFN0b3JlIGh0dHBSZXF1ZXN0IGFuZCBmb3J3YXJkUmVzcG9uc2UgaW4gaHR0cENhY2hlLCBhcyBwZXIgdGhlXG4gICAgICAvLyBcIlN0b3JpbmcgUmVzcG9uc2VzIGluIENhY2hlc1wiIGNoYXB0ZXIgb2YgSFRUUCBDYWNoaW5nLiBbSFRUUC1DQUNISU5HXVxuICAgICAgLy8gVE9ETzogY2FjaGVcbiAgICB9XG4gIH1cblxuICAvLyAxMS4gU2V0IHJlc3BvbnNl4oCZcyBVUkwgbGlzdCB0byBhIGNsb25lIG9mIGh0dHBSZXF1ZXN04oCZcyBVUkwgbGlzdC5cbiAgcmVzcG9uc2UudXJsTGlzdCA9IFsuLi5odHRwUmVxdWVzdC51cmxMaXN0XVxuXG4gIC8vIDEyLiBJZiBodHRwUmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QgY29udGFpbnMgYFJhbmdlYCwgdGhlbiBzZXQgcmVzcG9uc2XigJlzXG4gIC8vIHJhbmdlLXJlcXVlc3RlZCBmbGFnLlxuICBpZiAoaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ3JhbmdlJykpIHtcbiAgICByZXNwb25zZS5yYW5nZVJlcXVlc3RlZCA9IHRydWVcbiAgfVxuXG4gIC8vIDEzLiBTZXQgcmVzcG9uc2XigJlzIHJlcXVlc3QtaW5jbHVkZXMtY3JlZGVudGlhbHMgdG8gaW5jbHVkZUNyZWRlbnRpYWxzLlxuICByZXNwb25zZS5yZXF1ZXN0SW5jbHVkZXNDcmVkZW50aWFscyA9IGluY2x1ZGVDcmVkZW50aWFsc1xuXG4gIC8vIDE0LiBJZiByZXNwb25zZeKAmXMgc3RhdHVzIGlzIDQwMSwgaHR0cFJlcXVlc3TigJlzIHJlc3BvbnNlIHRhaW50aW5nIGlzIG5vdFxuICAvLyBcImNvcnNcIiwgaW5jbHVkZUNyZWRlbnRpYWxzIGlzIHRydWUsIGFuZCByZXF1ZXN04oCZcyB3aW5kb3cgaXMgYW4gZW52aXJvbm1lbnRcbiAgLy8gc2V0dGluZ3Mgb2JqZWN0LCB0aGVuOlxuICAvLyBUT0RPXG5cbiAgLy8gMTUuIElmIHJlc3BvbnNl4oCZcyBzdGF0dXMgaXMgNDA3LCB0aGVuOlxuICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDcpIHtcbiAgICAvLyAxLiBJZiByZXF1ZXN04oCZcyB3aW5kb3cgaXMgXCJuby13aW5kb3dcIiwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICAgIGlmIChyZXF1ZXN0LndpbmRvdyA9PT0gJ25vLXdpbmRvdycpIHtcbiAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKClcbiAgICB9XG5cbiAgICAvLyAyLiA/Pz9cblxuICAgIC8vIDMuIElmIGZldGNoUGFyYW1zIGlzIGNhbmNlbGVkLCB0aGVuIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgbmV0d29yayBlcnJvciBmb3IgZmV0Y2hQYXJhbXMuXG4gICAgaWYgKGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSkge1xuICAgICAgcmV0dXJuIG1ha2VBcHByb3ByaWF0ZU5ldHdvcmtFcnJvcihmZXRjaFBhcmFtcylcbiAgICB9XG5cbiAgICAvLyA0LiBQcm9tcHQgdGhlIGVuZCB1c2VyIGFzIGFwcHJvcHJpYXRlIGluIHJlcXVlc3TigJlzIHdpbmRvdyBhbmQgc3RvcmVcbiAgICAvLyB0aGUgcmVzdWx0IGFzIGEgcHJveHktYXV0aGVudGljYXRpb24gZW50cnkuIFtIVFRQLUFVVEhdXG4gICAgLy8gVE9ETzogSW52b2tlIHNvbWUga2luZCBvZiBjYWxsYmFjaz9cblxuICAgIC8vIDUuIFNldCByZXNwb25zZSB0byB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgSFRUUC1uZXR3b3JrLW9yLWNhY2hlIGZldGNoIGdpdmVuXG4gICAgLy8gZmV0Y2hQYXJhbXMuXG4gICAgLy8gVE9ET1xuICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdwcm94eSBhdXRoZW50aWNhdGlvbiByZXF1aXJlZCcpXG4gIH1cblxuICAvLyAxNi4gSWYgYWxsIG9mIHRoZSBmb2xsb3dpbmcgYXJlIHRydWVcbiAgaWYgKFxuICAgIC8vIHJlc3BvbnNl4oCZcyBzdGF0dXMgaXMgNDIxXG4gICAgcmVzcG9uc2Uuc3RhdHVzID09PSA0MjEgJiZcbiAgICAvLyBpc05ld0Nvbm5lY3Rpb25GZXRjaCBpcyBmYWxzZVxuICAgICFpc05ld0Nvbm5lY3Rpb25GZXRjaCAmJlxuICAgIC8vIHJlcXVlc3TigJlzIGJvZHkgaXMgbnVsbCwgb3IgcmVxdWVzdOKAmXMgYm9keSBpcyBub24tbnVsbCBhbmQgcmVxdWVzdOKAmXMgYm9keeKAmXMgc291cmNlIGlzIG5vbi1udWxsXG4gICAgKHJlcXVlc3QuYm9keSA9PSBudWxsIHx8IHJlcXVlc3QuYm9keS5zb3VyY2UgIT0gbnVsbClcbiAgKSB7XG4gICAgLy8gdGhlbjpcblxuICAgIC8vIDEuIElmIGZldGNoUGFyYW1zIGlzIGNhbmNlbGVkLCB0aGVuIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgbmV0d29yayBlcnJvciBmb3IgZmV0Y2hQYXJhbXMuXG4gICAgaWYgKGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSkge1xuICAgICAgcmV0dXJuIG1ha2VBcHByb3ByaWF0ZU5ldHdvcmtFcnJvcihmZXRjaFBhcmFtcylcbiAgICB9XG5cbiAgICAvLyAyLiBTZXQgcmVzcG9uc2UgdG8gdGhlIHJlc3VsdCBvZiBydW5uaW5nIEhUVFAtbmV0d29yay1vci1jYWNoZVxuICAgIC8vIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLCBpc0F1dGhlbnRpY2F0aW9uRmV0Y2gsIGFuZCB0cnVlLlxuXG4gICAgLy8gVE9ETyAoc3BlYyk6IFRoZSBzcGVjIGRvZXNuJ3Qgc3BlY2lmeSB0aGlzIGJ1dCB3ZSBuZWVkIHRvIGNhbmNlbFxuICAgIC8vIHRoZSBhY3RpdmUgcmVzcG9uc2UgYmVmb3JlIHdlIGNhbiBzdGFydCBhIG5ldyBvbmUuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy9mZXRjaC9pc3N1ZXMvMTI5M1xuICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29ubmVjdGlvbi5kZXN0cm95KClcblxuICAgIHJlc3BvbnNlID0gYXdhaXQgaHR0cE5ldHdvcmtPckNhY2hlRmV0Y2goXG4gICAgICBmZXRjaFBhcmFtcyxcbiAgICAgIGlzQXV0aGVudGljYXRpb25GZXRjaCxcbiAgICAgIHRydWVcbiAgICApXG4gIH1cblxuICAvLyAxNy4gSWYgaXNBdXRoZW50aWNhdGlvbkZldGNoIGlzIHRydWUsIHRoZW4gY3JlYXRlIGFuIGF1dGhlbnRpY2F0aW9uIGVudHJ5XG4gIGlmIChpc0F1dGhlbnRpY2F0aW9uRmV0Y2gpIHtcbiAgICAvLyBUT0RPXG4gIH1cblxuICAvLyAxOC4gUmV0dXJuIHJlc3BvbnNlLlxuICByZXR1cm4gcmVzcG9uc2Vcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtbmV0d29yay1mZXRjaFxuYXN5bmMgZnVuY3Rpb24gaHR0cE5ldHdvcmtGZXRjaCAoXG4gIGZldGNoUGFyYW1zLFxuICBpbmNsdWRlQ3JlZGVudGlhbHMgPSBmYWxzZSxcbiAgZm9yY2VOZXdDb25uZWN0aW9uID0gZmFsc2Vcbikge1xuICBhc3NlcnQoIWZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29ubmVjdGlvbiB8fCBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbm5lY3Rpb24uZGVzdHJveWVkKVxuXG4gIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29ubmVjdGlvbiA9IHtcbiAgICBhYm9ydDogbnVsbCxcbiAgICBkZXN0cm95ZWQ6IGZhbHNlLFxuICAgIGRlc3Ryb3kgKGVycikge1xuICAgICAgaWYgKCF0aGlzLmRlc3Ryb3llZCkge1xuICAgICAgICB0aGlzLmRlc3Ryb3llZCA9IHRydWVcbiAgICAgICAgdGhpcy5hYm9ydD8uKGVyciA/PyBuZXcgRE9NRXhjZXB0aW9uKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLicsICdBYm9ydEVycm9yJykpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gMS4gTGV0IHJlcXVlc3QgYmUgZmV0Y2hQYXJhbXPigJlzIHJlcXVlc3QuXG4gIGNvbnN0IHJlcXVlc3QgPSBmZXRjaFBhcmFtcy5yZXF1ZXN0XG5cbiAgLy8gMi4gTGV0IHJlc3BvbnNlIGJlIG51bGwuXG4gIGxldCByZXNwb25zZSA9IG51bGxcblxuICAvLyAzLiBMZXQgdGltaW5nSW5mbyBiZSBmZXRjaFBhcmFtc+KAmXMgdGltaW5nIGluZm8uXG4gIGNvbnN0IHRpbWluZ0luZm8gPSBmZXRjaFBhcmFtcy50aW1pbmdJbmZvXG5cbiAgLy8gNC4gTGV0IGh0dHBDYWNoZSBiZSB0aGUgcmVzdWx0IG9mIGRldGVybWluaW5nIHRoZSBIVFRQIGNhY2hlIHBhcnRpdGlvbixcbiAgLy8gZ2l2ZW4gcmVxdWVzdC5cbiAgLy8gVE9ETzogY2FjaGVcbiAgY29uc3QgaHR0cENhY2hlID0gbnVsbFxuXG4gIC8vIDUuIElmIGh0dHBDYWNoZSBpcyBudWxsLCB0aGVuIHNldCByZXF1ZXN04oCZcyBjYWNoZSBtb2RlIHRvIFwibm8tc3RvcmVcIi5cbiAgaWYgKGh0dHBDYWNoZSA9PSBudWxsKSB7XG4gICAgcmVxdWVzdC5jYWNoZSA9ICduby1zdG9yZSdcbiAgfVxuXG4gIC8vIDYuIExldCBuZXR3b3JrUGFydGl0aW9uS2V5IGJlIHRoZSByZXN1bHQgb2YgZGV0ZXJtaW5pbmcgdGhlIG5ldHdvcmtcbiAgLy8gcGFydGl0aW9uIGtleSBnaXZlbiByZXF1ZXN0LlxuICAvLyBUT0RPXG5cbiAgLy8gNy4gTGV0IG5ld0Nvbm5lY3Rpb24gYmUgXCJ5ZXNcIiBpZiBmb3JjZU5ld0Nvbm5lY3Rpb24gaXMgdHJ1ZTsgb3RoZXJ3aXNlXG4gIC8vIFwibm9cIi5cbiAgY29uc3QgbmV3Q29ubmVjdGlvbiA9IGZvcmNlTmV3Q29ubmVjdGlvbiA/ICd5ZXMnIDogJ25vJyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG5cbiAgLy8gOC4gU3dpdGNoIG9uIHJlcXVlc3TigJlzIG1vZGU6XG4gIGlmIChyZXF1ZXN0Lm1vZGUgPT09ICd3ZWJzb2NrZXQnKSB7XG4gICAgLy8gTGV0IGNvbm5lY3Rpb24gYmUgdGhlIHJlc3VsdCBvZiBvYnRhaW5pbmcgYSBXZWJTb2NrZXQgY29ubmVjdGlvbixcbiAgICAvLyBnaXZlbiByZXF1ZXN04oCZcyBjdXJyZW50IFVSTC5cbiAgICAvLyBUT0RPXG4gIH0gZWxzZSB7XG4gICAgLy8gTGV0IGNvbm5lY3Rpb24gYmUgdGhlIHJlc3VsdCBvZiBvYnRhaW5pbmcgYSBjb25uZWN0aW9uLCBnaXZlblxuICAgIC8vIG5ldHdvcmtQYXJ0aXRpb25LZXksIHJlcXVlc3TigJlzIGN1cnJlbnQgVVJM4oCZcyBvcmlnaW4sXG4gICAgLy8gaW5jbHVkZUNyZWRlbnRpYWxzLCBhbmQgZm9yY2VOZXdDb25uZWN0aW9uLlxuICAgIC8vIFRPRE9cbiAgfVxuXG4gIC8vIDkuIFJ1biB0aGVzZSBzdGVwcywgYnV0IGFib3J0IHdoZW4gdGhlIG9uZ29pbmcgZmV0Y2ggaXMgdGVybWluYXRlZDpcblxuICAvLyAgICAxLiBJZiBjb25uZWN0aW9uIGlzIGZhaWx1cmUsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cblxuICAvLyAgICAyLiBTZXQgdGltaW5nSW5mb+KAmXMgZmluYWwgY29ubmVjdGlvbiB0aW1pbmcgaW5mbyB0byB0aGUgcmVzdWx0IG9mXG4gIC8vICAgIGNhbGxpbmcgY2xhbXAgYW5kIGNvYXJzZW4gY29ubmVjdGlvbiB0aW1pbmcgaW5mbyB3aXRoIGNvbm5lY3Rpb27igJlzXG4gIC8vICAgIHRpbWluZyBpbmZvLCB0aW1pbmdJbmZv4oCZcyBwb3N0LXJlZGlyZWN0IHN0YXJ0IHRpbWUsIGFuZCBmZXRjaFBhcmFtc+KAmXNcbiAgLy8gICAgY3Jvc3Mtb3JpZ2luIGlzb2xhdGVkIGNhcGFiaWxpdHkuXG5cbiAgLy8gICAgMy4gSWYgY29ubmVjdGlvbiBpcyBub3QgYW4gSFRUUC8yIGNvbm5lY3Rpb24sIHJlcXVlc3TigJlzIGJvZHkgaXMgbm9uLW51bGwsXG4gIC8vICAgIGFuZCByZXF1ZXN04oCZcyBib2R54oCZcyBzb3VyY2UgaXMgbnVsbCwgdGhlbiBhcHBlbmQgKGBUcmFuc2Zlci1FbmNvZGluZ2AsXG4gIC8vICAgIGBjaHVua2VkYCkgdG8gcmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QuXG5cbiAgLy8gICAgNC4gU2V0IHRpbWluZ0luZm/igJlzIGZpbmFsIG5ldHdvcmstcmVxdWVzdCBzdGFydCB0aW1lIHRvIHRoZSBjb2Fyc2VuZWRcbiAgLy8gICAgc2hhcmVkIGN1cnJlbnQgdGltZSBnaXZlbiBmZXRjaFBhcmFtc+KAmXMgY3Jvc3Mtb3JpZ2luIGlzb2xhdGVkXG4gIC8vICAgIGNhcGFiaWxpdHkuXG5cbiAgLy8gICAgNS4gU2V0IHJlc3BvbnNlIHRvIHRoZSByZXN1bHQgb2YgbWFraW5nIGFuIEhUVFAgcmVxdWVzdCBvdmVyIGNvbm5lY3Rpb25cbiAgLy8gICAgdXNpbmcgcmVxdWVzdCB3aXRoIHRoZSBmb2xsb3dpbmcgY2F2ZWF0czpcblxuICAvLyAgICAgICAgLSBGb2xsb3cgdGhlIHJlbGV2YW50IHJlcXVpcmVtZW50cyBmcm9tIEhUVFAuIFtIVFRQXSBbSFRUUC1TRU1BTlRJQ1NdXG4gIC8vICAgICAgICBbSFRUUC1DT05EXSBbSFRUUC1DQUNISU5HXSBbSFRUUC1BVVRIXVxuXG4gIC8vICAgICAgICAtIElmIHJlcXVlc3TigJlzIGJvZHkgaXMgbm9uLW51bGwsIGFuZCByZXF1ZXN04oCZcyBib2R54oCZcyBzb3VyY2UgaXMgbnVsbCxcbiAgLy8gICAgICAgIHRoZW4gdGhlIHVzZXIgYWdlbnQgbWF5IGhhdmUgYSBidWZmZXIgb2YgdXAgdG8gNjQga2liaWJ5dGVzIGFuZCBzdG9yZVxuICAvLyAgICAgICAgYSBwYXJ0IG9mIHJlcXVlc3TigJlzIGJvZHkgaW4gdGhhdCBidWZmZXIuIElmIHRoZSB1c2VyIGFnZW50IHJlYWRzIGZyb21cbiAgLy8gICAgICAgIHJlcXVlc3TigJlzIGJvZHkgYmV5b25kIHRoYXQgYnVmZmVy4oCZcyBzaXplIGFuZCB0aGUgdXNlciBhZ2VudCBuZWVkcyB0b1xuICAvLyAgICAgICAgcmVzZW5kIHJlcXVlc3QsIHRoZW4gaW5zdGVhZCByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuXG4gIC8vICAgICAgICAtIFNldCB0aW1pbmdJbmZv4oCZcyBmaW5hbCBuZXR3b3JrLXJlc3BvbnNlIHN0YXJ0IHRpbWUgdG8gdGhlIGNvYXJzZW5lZFxuICAvLyAgICAgICAgc2hhcmVkIGN1cnJlbnQgdGltZSBnaXZlbiBmZXRjaFBhcmFtc+KAmXMgY3Jvc3Mtb3JpZ2luIGlzb2xhdGVkIGNhcGFiaWxpdHksXG4gIC8vICAgICAgICBpbW1lZGlhdGVseSBhZnRlciB0aGUgdXNlciBhZ2VudOKAmXMgSFRUUCBwYXJzZXIgcmVjZWl2ZXMgdGhlIGZpcnN0IGJ5dGVcbiAgLy8gICAgICAgIG9mIHRoZSByZXNwb25zZSAoZS5nLiwgZnJhbWUgaGVhZGVyIGJ5dGVzIGZvciBIVFRQLzIgb3IgcmVzcG9uc2Ugc3RhdHVzXG4gIC8vICAgICAgICBsaW5lIGZvciBIVFRQLzEueCkuXG5cbiAgLy8gICAgICAgIC0gV2FpdCB1bnRpbCBhbGwgdGhlIGhlYWRlcnMgYXJlIHRyYW5zbWl0dGVkLlxuXG4gIC8vICAgICAgICAtIEFueSByZXNwb25zZXMgd2hvc2Ugc3RhdHVzIGlzIGluIHRoZSByYW5nZSAxMDAgdG8gMTk5LCBpbmNsdXNpdmUsXG4gIC8vICAgICAgICBhbmQgaXMgbm90IDEwMSwgYXJlIHRvIGJlIGlnbm9yZWQsIGV4Y2VwdCBmb3IgdGhlIHB1cnBvc2VzIG9mIHNldHRpbmdcbiAgLy8gICAgICAgIHRpbWluZ0luZm/igJlzIGZpbmFsIG5ldHdvcmstcmVzcG9uc2Ugc3RhcnQgdGltZSBhYm92ZS5cblxuICAvLyAgICAtIElmIHJlcXVlc3TigJlzIGhlYWRlciBsaXN0IGNvbnRhaW5zIGBUcmFuc2Zlci1FbmNvZGluZ2AvYGNodW5rZWRgIGFuZFxuICAvLyAgICByZXNwb25zZSBpcyB0cmFuc2ZlcnJlZCB2aWEgSFRUUC8xLjAgb3Igb2xkZXIsIHRoZW4gcmV0dXJuIGEgbmV0d29ya1xuICAvLyAgICBlcnJvci5cblxuICAvLyAgICAtIElmIHRoZSBIVFRQIHJlcXVlc3QgcmVzdWx0cyBpbiBhIFRMUyBjbGllbnQgY2VydGlmaWNhdGUgZGlhbG9nLCB0aGVuOlxuXG4gIC8vICAgICAgICAxLiBJZiByZXF1ZXN04oCZcyB3aW5kb3cgaXMgYW4gZW52aXJvbm1lbnQgc2V0dGluZ3Mgb2JqZWN0LCBtYWtlIHRoZVxuICAvLyAgICAgICAgZGlhbG9nIGF2YWlsYWJsZSBpbiByZXF1ZXN04oCZcyB3aW5kb3cuXG5cbiAgLy8gICAgICAgIDIuIE90aGVyd2lzZSwgcmV0dXJuIGEgbmV0d29yayBlcnJvci5cblxuICAvLyBUbyB0cmFuc21pdCByZXF1ZXN04oCZcyBib2R5IGJvZHksIHJ1biB0aGVzZSBzdGVwczpcbiAgbGV0IHJlcXVlc3RCb2R5ID0gbnVsbFxuICAvLyAxLiBJZiBib2R5IGlzIG51bGwgYW5kIGZldGNoUGFyYW1z4oCZcyBwcm9jZXNzIHJlcXVlc3QgZW5kLW9mLWJvZHkgaXNcbiAgLy8gbm9uLW51bGwsIHRoZW4gcXVldWUgYSBmZXRjaCB0YXNrIGdpdmVuIGZldGNoUGFyYW1z4oCZcyBwcm9jZXNzIHJlcXVlc3RcbiAgLy8gZW5kLW9mLWJvZHkgYW5kIGZldGNoUGFyYW1z4oCZcyB0YXNrIGRlc3RpbmF0aW9uLlxuICBpZiAocmVxdWVzdC5ib2R5ID09IG51bGwgJiYgZmV0Y2hQYXJhbXMucHJvY2Vzc1JlcXVlc3RFbmRPZkJvZHkpIHtcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBmZXRjaFBhcmFtcy5wcm9jZXNzUmVxdWVzdEVuZE9mQm9keSgpKVxuICB9IGVsc2UgaWYgKHJlcXVlc3QuYm9keSAhPSBudWxsKSB7XG4gICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiBib2R5IGlzIG5vbi1udWxsOlxuXG4gICAgLy8gICAgMS4gTGV0IHByb2Nlc3NCb2R5Q2h1bmsgZ2l2ZW4gYnl0ZXMgYmUgdGhlc2Ugc3RlcHM6XG4gICAgY29uc3QgcHJvY2Vzc0JvZHlDaHVuayA9IGFzeW5jIGZ1bmN0aW9uICogKGJ5dGVzKSB7XG4gICAgICAvLyAxLiBJZiB0aGUgb25nb2luZyBmZXRjaCBpcyB0ZXJtaW5hdGVkLCB0aGVuIGFib3J0IHRoZXNlIHN0ZXBzLlxuICAgICAgaWYgKGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gMi4gUnVuIHRoaXMgc3RlcCBpbiBwYXJhbGxlbDogdHJhbnNtaXQgYnl0ZXMuXG4gICAgICB5aWVsZCBieXRlc1xuXG4gICAgICAvLyAzLiBJZiBmZXRjaFBhcmFtc+KAmXMgcHJvY2VzcyByZXF1ZXN0IGJvZHkgaXMgbm9uLW51bGwsIHRoZW4gcnVuXG4gICAgICAvLyBmZXRjaFBhcmFtc+KAmXMgcHJvY2VzcyByZXF1ZXN0IGJvZHkgZ2l2ZW4gYnl0ZXPigJlzIGxlbmd0aC5cbiAgICAgIGZldGNoUGFyYW1zLnByb2Nlc3NSZXF1ZXN0Qm9keUNodW5rTGVuZ3RoPy4oYnl0ZXMuYnl0ZUxlbmd0aClcbiAgICB9XG5cbiAgICAvLyAyLiBMZXQgcHJvY2Vzc0VuZE9mQm9keSBiZSB0aGVzZSBzdGVwczpcbiAgICBjb25zdCBwcm9jZXNzRW5kT2ZCb2R5ID0gKCkgPT4ge1xuICAgICAgLy8gMS4gSWYgZmV0Y2hQYXJhbXMgaXMgY2FuY2VsZWQsIHRoZW4gYWJvcnQgdGhlc2Ugc3RlcHMuXG4gICAgICBpZiAoaXNDYW5jZWxsZWQoZmV0Y2hQYXJhbXMpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyAyLiBJZiBmZXRjaFBhcmFtc+KAmXMgcHJvY2VzcyByZXF1ZXN0IGVuZC1vZi1ib2R5IGlzIG5vbi1udWxsLFxuICAgICAgLy8gdGhlbiBydW4gZmV0Y2hQYXJhbXPigJlzIHByb2Nlc3MgcmVxdWVzdCBlbmQtb2YtYm9keS5cbiAgICAgIGlmIChmZXRjaFBhcmFtcy5wcm9jZXNzUmVxdWVzdEVuZE9mQm9keSkge1xuICAgICAgICBmZXRjaFBhcmFtcy5wcm9jZXNzUmVxdWVzdEVuZE9mQm9keSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gMy4gTGV0IHByb2Nlc3NCb2R5RXJyb3IgZ2l2ZW4gZSBiZSB0aGVzZSBzdGVwczpcbiAgICBjb25zdCBwcm9jZXNzQm9keUVycm9yID0gKGUpID0+IHtcbiAgICAgIC8vIDEuIElmIGZldGNoUGFyYW1zIGlzIGNhbmNlbGVkLCB0aGVuIGFib3J0IHRoZXNlIHN0ZXBzLlxuICAgICAgaWYgKGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gMi4gSWYgZSBpcyBhbiBcIkFib3J0RXJyb3JcIiBET01FeGNlcHRpb24sIHRoZW4gYWJvcnQgZmV0Y2hQYXJhbXPigJlzIGNvbnRyb2xsZXIuXG4gICAgICBpZiAoZS5uYW1lID09PSAnQWJvcnRFcnJvcicpIHtcbiAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5hYm9ydCgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnRlcm1pbmF0ZShlKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDQuIEluY3JlbWVudGFsbHkgcmVhZCByZXF1ZXN04oCZcyBib2R5IGdpdmVuIHByb2Nlc3NCb2R5Q2h1bmssIHByb2Nlc3NFbmRPZkJvZHksXG4gICAgLy8gcHJvY2Vzc0JvZHlFcnJvciwgYW5kIGZldGNoUGFyYW1z4oCZcyB0YXNrIGRlc3RpbmF0aW9uLlxuICAgIHJlcXVlc3RCb2R5ID0gKGFzeW5jIGZ1bmN0aW9uICogKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm9yIGF3YWl0IChjb25zdCBieXRlcyBvZiByZXF1ZXN0LmJvZHkuc3RyZWFtKSB7XG4gICAgICAgICAgeWllbGQgKiBwcm9jZXNzQm9keUNodW5rKGJ5dGVzKVxuICAgICAgICB9XG4gICAgICAgIHByb2Nlc3NFbmRPZkJvZHkoKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHByb2Nlc3NCb2R5RXJyb3IoZXJyKVxuICAgICAgfVxuICAgIH0pKClcbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gc29ja2V0IGlzIG9ubHkgcHJvdmlkZWQgZm9yIHdlYnNvY2tldHNcbiAgICBjb25zdCB7IGJvZHksIHN0YXR1cywgc3RhdHVzVGV4dCwgaGVhZGVyc0xpc3QsIHNvY2tldCB9ID0gYXdhaXQgZGlzcGF0Y2goeyBib2R5OiByZXF1ZXN0Qm9keSB9KVxuXG4gICAgaWYgKHNvY2tldCkge1xuICAgICAgcmVzcG9uc2UgPSBtYWtlUmVzcG9uc2UoeyBzdGF0dXMsIHN0YXR1c1RleHQsIGhlYWRlcnNMaXN0LCBzb2NrZXQgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgaXRlcmF0b3IgPSBib2R5W1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpXG4gICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLm5leHQgPSAoKSA9PiBpdGVyYXRvci5uZXh0KClcblxuICAgICAgcmVzcG9uc2UgPSBtYWtlUmVzcG9uc2UoeyBzdGF0dXMsIHN0YXR1c1RleHQsIGhlYWRlcnNMaXN0IH0pXG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyAxMC4gSWYgYWJvcnRlZCwgdGhlbjpcbiAgICBpZiAoZXJyLm5hbWUgPT09ICdBYm9ydEVycm9yJykge1xuICAgICAgLy8gMS4gSWYgY29ubmVjdGlvbiB1c2VzIEhUVFAvMiwgdGhlbiB0cmFuc21pdCBhbiBSU1RfU1RSRUFNIGZyYW1lLlxuICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb25uZWN0aW9uLmRlc3Ryb3koKVxuXG4gICAgICAvLyAyLiBSZXR1cm4gdGhlIGFwcHJvcHJpYXRlIG5ldHdvcmsgZXJyb3IgZm9yIGZldGNoUGFyYW1zLlxuICAgICAgcmV0dXJuIG1ha2VBcHByb3ByaWF0ZU5ldHdvcmtFcnJvcihmZXRjaFBhcmFtcywgZXJyKVxuICAgIH1cblxuICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKGVycilcbiAgfVxuXG4gIC8vIDExLiBMZXQgcHVsbEFsZ29yaXRobSBiZSBhbiBhY3Rpb24gdGhhdCByZXN1bWVzIHRoZSBvbmdvaW5nIGZldGNoXG4gIC8vIGlmIGl0IGlzIHN1c3BlbmRlZC5cbiAgY29uc3QgcHVsbEFsZ29yaXRobSA9ICgpID0+IHtcbiAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnJlc3VtZSgpXG4gIH1cblxuICAvLyAxMi4gTGV0IGNhbmNlbEFsZ29yaXRobSBiZSBhbiBhbGdvcml0aG0gdGhhdCBhYm9ydHMgZmV0Y2hQYXJhbXPigJlzXG4gIC8vIGNvbnRyb2xsZXIgd2l0aCByZWFzb24sIGdpdmVuIHJlYXNvbi5cbiAgY29uc3QgY2FuY2VsQWxnb3JpdGhtID0gKHJlYXNvbikgPT4ge1xuICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuYWJvcnQocmVhc29uKVxuICB9XG5cbiAgLy8gMTMuIExldCBoaWdoV2F0ZXJNYXJrIGJlIGEgbm9uLW5lZ2F0aXZlLCBub24tTmFOIG51bWJlciwgY2hvc2VuIGJ5XG4gIC8vIHRoZSB1c2VyIGFnZW50LlxuICAvLyBUT0RPXG5cbiAgLy8gMTQuIExldCBzaXplQWxnb3JpdGhtIGJlIGFuIGFsZ29yaXRobSB0aGF0IGFjY2VwdHMgYSBjaHVuayBvYmplY3RcbiAgLy8gYW5kIHJldHVybnMgYSBub24tbmVnYXRpdmUsIG5vbi1OYU4sIG5vbi1pbmZpbml0ZSBudW1iZXIsIGNob3NlbiBieSB0aGUgdXNlciBhZ2VudC5cbiAgLy8gVE9ET1xuXG4gIC8vIDE1LiBMZXQgc3RyZWFtIGJlIGEgbmV3IFJlYWRhYmxlU3RyZWFtLlxuICAvLyAxNi4gU2V0IHVwIHN0cmVhbSB3aXRoIHB1bGxBbGdvcml0aG0gc2V0IHRvIHB1bGxBbGdvcml0aG0sXG4gIC8vIGNhbmNlbEFsZ29yaXRobSBzZXQgdG8gY2FuY2VsQWxnb3JpdGhtLCBoaWdoV2F0ZXJNYXJrIHNldCB0b1xuICAvLyBoaWdoV2F0ZXJNYXJrLCBhbmQgc2l6ZUFsZ29yaXRobSBzZXQgdG8gc2l6ZUFsZ29yaXRobS5cbiAgaWYgKCFSZWFkYWJsZVN0cmVhbSkge1xuICAgIFJlYWRhYmxlU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtL3dlYicpLlJlYWRhYmxlU3RyZWFtXG4gIH1cblxuICBjb25zdCBzdHJlYW0gPSBuZXcgUmVhZGFibGVTdHJlYW0oXG4gICAge1xuICAgICAgYXN5bmMgc3RhcnQgKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb250cm9sbGVyID0gY29udHJvbGxlclxuICAgICAgfSxcbiAgICAgIGFzeW5jIHB1bGwgKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgYXdhaXQgcHVsbEFsZ29yaXRobShjb250cm9sbGVyKVxuICAgICAgfSxcbiAgICAgIGFzeW5jIGNhbmNlbCAocmVhc29uKSB7XG4gICAgICAgIGF3YWl0IGNhbmNlbEFsZ29yaXRobShyZWFzb24pXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBoaWdoV2F0ZXJNYXJrOiAwLFxuICAgICAgc2l6ZSAoKSB7XG4gICAgICAgIHJldHVybiAxXG4gICAgICB9XG4gICAgfVxuICApXG5cbiAgLy8gMTcuIFJ1biB0aGVzZSBzdGVwcywgYnV0IGFib3J0IHdoZW4gdGhlIG9uZ29pbmcgZmV0Y2ggaXMgdGVybWluYXRlZDpcblxuICAvLyAgICAxLiBTZXQgcmVzcG9uc2XigJlzIGJvZHkgdG8gYSBuZXcgYm9keSB3aG9zZSBzdHJlYW0gaXMgc3RyZWFtLlxuICByZXNwb25zZS5ib2R5ID0geyBzdHJlYW0gfVxuXG4gIC8vICAgIDIuIElmIHJlc3BvbnNlIGlzIG5vdCBhIG5ldHdvcmsgZXJyb3IgYW5kIHJlcXVlc3TigJlzIGNhY2hlIG1vZGUgaXNcbiAgLy8gICAgbm90IFwibm8tc3RvcmVcIiwgdGhlbiB1cGRhdGUgcmVzcG9uc2UgaW4gaHR0cENhY2hlIGZvciByZXF1ZXN0LlxuICAvLyAgICBUT0RPXG5cbiAgLy8gICAgMy4gSWYgaW5jbHVkZUNyZWRlbnRpYWxzIGlzIHRydWUgYW5kIHRoZSB1c2VyIGFnZW50IGlzIG5vdCBjb25maWd1cmVkXG4gIC8vICAgIHRvIGJsb2NrIGNvb2tpZXMgZm9yIHJlcXVlc3QgKHNlZSBzZWN0aW9uIDcgb2YgW0NPT0tJRVNdKSwgdGhlbiBydW4gdGhlXG4gIC8vICAgIFwic2V0LWNvb2tpZS1zdHJpbmdcIiBwYXJzaW5nIGFsZ29yaXRobSAoc2VlIHNlY3Rpb24gNS4yIG9mIFtDT09LSUVTXSkgb25cbiAgLy8gICAgdGhlIHZhbHVlIG9mIGVhY2ggaGVhZGVyIHdob3NlIG5hbWUgaXMgYSBieXRlLWNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yXG4gIC8vICAgIGBTZXQtQ29va2llYCBpbiByZXNwb25zZeKAmXMgaGVhZGVyIGxpc3QsIGlmIGFueSwgYW5kIHJlcXVlc3TigJlzIGN1cnJlbnQgVVJMLlxuICAvLyAgICBUT0RPXG5cbiAgLy8gMTguIElmIGFib3J0ZWQsIHRoZW46XG4gIC8vIFRPRE9cblxuICAvLyAxOS4gUnVuIHRoZXNlIHN0ZXBzIGluIHBhcmFsbGVsOlxuXG4gIC8vICAgIDEuIFJ1biB0aGVzZSBzdGVwcywgYnV0IGFib3J0IHdoZW4gZmV0Y2hQYXJhbXMgaXMgY2FuY2VsZWQ6XG4gIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIub24oJ3Rlcm1pbmF0ZWQnLCBvbkFib3J0ZWQpXG4gIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIucmVzdW1lID0gYXN5bmMgKCkgPT4ge1xuICAgIC8vIDEuIFdoaWxlIHRydWVcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgLy8gMS0zLiBTZWUgb25EYXRhLi4uXG5cbiAgICAgIC8vIDQuIFNldCBieXRlcyB0byB0aGUgcmVzdWx0IG9mIGhhbmRsaW5nIGNvbnRlbnQgY29kaW5ncyBnaXZlblxuICAgICAgLy8gY29kaW5ncyBhbmQgYnl0ZXMuXG4gICAgICBsZXQgYnl0ZXNcbiAgICAgIGxldCBpc0ZhaWx1cmVcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IGZldGNoUGFyYW1zLmNvbnRyb2xsZXIubmV4dCgpXG5cbiAgICAgICAgaWYgKGlzQWJvcnRlZChmZXRjaFBhcmFtcykpIHtcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG5cbiAgICAgICAgYnl0ZXMgPSBkb25lID8gdW5kZWZpbmVkIDogdmFsdWVcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoZmV0Y2hQYXJhbXMuY29udHJvbGxlci5lbmRlZCAmJiAhdGltaW5nSW5mby5lbmNvZGVkQm9keVNpemUpIHtcbiAgICAgICAgICAvLyB6bGliIGRvZXNuJ3QgbGlrZSBlbXB0eSBzdHJlYW1zLlxuICAgICAgICAgIGJ5dGVzID0gdW5kZWZpbmVkXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnl0ZXMgPSBlcnJcblxuICAgICAgICAgIC8vIGVyciBtYXkgYmUgcHJvcGFnYXRlZCBmcm9tIHRoZSByZXN1bHQgb2YgY2FsbGluZyByZWFkYWJsZXN0cmVhbS5jYW5jZWwsXG4gICAgICAgICAgLy8gd2hpY2ggbWlnaHQgbm90IGJlIGFuIGVycm9yLiBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMjAwOVxuICAgICAgICAgIGlzRmFpbHVyZSA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoYnl0ZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyAyLiBPdGhlcndpc2UsIGlmIHRoZSBieXRlcyB0cmFuc21pc3Npb24gZm9yIHJlc3BvbnNl4oCZcyBtZXNzYWdlXG4gICAgICAgIC8vIGJvZHkgaXMgZG9uZSBub3JtYWxseSBhbmQgc3RyZWFtIGlzIHJlYWRhYmxlLCB0aGVuIGNsb3NlXG4gICAgICAgIC8vIHN0cmVhbSwgZmluYWxpemUgcmVzcG9uc2UgZm9yIGZldGNoUGFyYW1zIGFuZCByZXNwb25zZSwgYW5kXG4gICAgICAgIC8vIGFib3J0IHRoZXNlIGluLXBhcmFsbGVsIHN0ZXBzLlxuICAgICAgICByZWFkYWJsZVN0cmVhbUNsb3NlKGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29udHJvbGxlcilcblxuICAgICAgICBmaW5hbGl6ZVJlc3BvbnNlKGZldGNoUGFyYW1zLCByZXNwb25zZSlcblxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gNS4gSW5jcmVhc2UgdGltaW5nSW5mb+KAmXMgZGVjb2RlZCBib2R5IHNpemUgYnkgYnl0ZXPigJlzIGxlbmd0aC5cbiAgICAgIHRpbWluZ0luZm8uZGVjb2RlZEJvZHlTaXplICs9IGJ5dGVzPy5ieXRlTGVuZ3RoID8/IDBcblxuICAgICAgLy8gNi4gSWYgYnl0ZXMgaXMgZmFpbHVyZSwgdGhlbiB0ZXJtaW5hdGUgZmV0Y2hQYXJhbXPigJlzIGNvbnRyb2xsZXIuXG4gICAgICBpZiAoaXNGYWlsdXJlKSB7XG4gICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIudGVybWluYXRlKGJ5dGVzKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gNy4gRW5xdWV1ZSBhIFVpbnQ4QXJyYXkgd3JhcHBpbmcgYW4gQXJyYXlCdWZmZXIgY29udGFpbmluZyBieXRlc1xuICAgICAgLy8gaW50byBzdHJlYW0uXG4gICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbnRyb2xsZXIuZW5xdWV1ZShuZXcgVWludDhBcnJheShieXRlcykpXG5cbiAgICAgIC8vIDguIElmIHN0cmVhbSBpcyBlcnJvcmVkLCB0aGVuIHRlcm1pbmF0ZSB0aGUgb25nb2luZyBmZXRjaC5cbiAgICAgIGlmIChpc0Vycm9yZWQoc3RyZWFtKSkge1xuICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnRlcm1pbmF0ZSgpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyA5LiBJZiBzdHJlYW0gZG9lc27igJl0IG5lZWQgbW9yZSBkYXRhIGFzayB0aGUgdXNlciBhZ2VudCB0byBzdXNwZW5kXG4gICAgICAvLyB0aGUgb25nb2luZyBmZXRjaC5cbiAgICAgIGlmICghZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb250cm9sbGVyLmRlc2lyZWRTaXplKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vICAgIDIuIElmIGFib3J0ZWQsIHRoZW46XG4gIGZ1bmN0aW9uIG9uQWJvcnRlZCAocmVhc29uKSB7XG4gICAgLy8gMi4gSWYgZmV0Y2hQYXJhbXMgaXMgYWJvcnRlZCwgdGhlbjpcbiAgICBpZiAoaXNBYm9ydGVkKGZldGNoUGFyYW1zKSkge1xuICAgICAgLy8gMS4gU2V0IHJlc3BvbnNl4oCZcyBhYm9ydGVkIGZsYWcuXG4gICAgICByZXNwb25zZS5hYm9ydGVkID0gdHJ1ZVxuXG4gICAgICAvLyAyLiBJZiBzdHJlYW0gaXMgcmVhZGFibGUsIHRoZW4gZXJyb3Igc3RyZWFtIHdpdGggdGhlIHJlc3VsdCBvZlxuICAgICAgLy8gICAgZGVzZXJpYWxpemUgYSBzZXJpYWxpemVkIGFib3J0IHJlYXNvbiBnaXZlbiBmZXRjaFBhcmFtc+KAmXNcbiAgICAgIC8vICAgIGNvbnRyb2xsZXLigJlzIHNlcmlhbGl6ZWQgYWJvcnQgcmVhc29uIGFuZCBhblxuICAgICAgLy8gICAgaW1wbGVtZW50YXRpb24tZGVmaW5lZCByZWFsbS5cbiAgICAgIGlmIChpc1JlYWRhYmxlKHN0cmVhbSkpIHtcbiAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb250cm9sbGVyLmVycm9yKFxuICAgICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuc2VyaWFsaXplZEFib3J0UmVhc29uXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gMy4gT3RoZXJ3aXNlLCBpZiBzdHJlYW0gaXMgcmVhZGFibGUsIGVycm9yIHN0cmVhbSB3aXRoIGEgVHlwZUVycm9yLlxuICAgICAgaWYgKGlzUmVhZGFibGUoc3RyZWFtKSkge1xuICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbnRyb2xsZXIuZXJyb3IobmV3IFR5cGVFcnJvcigndGVybWluYXRlZCcsIHtcbiAgICAgICAgICBjYXVzZTogaXNFcnJvckxpa2UocmVhc29uKSA/IHJlYXNvbiA6IHVuZGVmaW5lZFxuICAgICAgICB9KSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA0LiBJZiBjb25uZWN0aW9uIHVzZXMgSFRUUC8yLCB0aGVuIHRyYW5zbWl0IGFuIFJTVF9TVFJFQU0gZnJhbWUuXG4gICAgLy8gNS4gT3RoZXJ3aXNlLCB0aGUgdXNlciBhZ2VudCBzaG91bGQgY2xvc2UgY29ubmVjdGlvbiB1bmxlc3MgaXQgd291bGQgYmUgYmFkIGZvciBwZXJmb3JtYW5jZSB0byBkbyBzby5cbiAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbm5lY3Rpb24uZGVzdHJveSgpXG4gIH1cblxuICAvLyAyMC4gUmV0dXJuIHJlc3BvbnNlLlxuICByZXR1cm4gcmVzcG9uc2VcblxuICBhc3luYyBmdW5jdGlvbiBkaXNwYXRjaCAoeyBib2R5IH0pIHtcbiAgICBjb25zdCB1cmwgPSByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KVxuICAgIC8qKiBAdHlwZSB7aW1wb3J0KCcuLi8uLicpLkFnZW50fSAqL1xuICAgIGNvbnN0IGFnZW50ID0gZmV0Y2hQYXJhbXMuY29udHJvbGxlci5kaXNwYXRjaGVyXG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gYWdlbnQuZGlzcGF0Y2goXG4gICAgICB7XG4gICAgICAgIHBhdGg6IHVybC5wYXRobmFtZSArIHVybC5zZWFyY2gsXG4gICAgICAgIG9yaWdpbjogdXJsLm9yaWdpbixcbiAgICAgICAgbWV0aG9kOiByZXF1ZXN0Lm1ldGhvZCxcbiAgICAgICAgYm9keTogZmV0Y2hQYXJhbXMuY29udHJvbGxlci5kaXNwYXRjaGVyLmlzTW9ja0FjdGl2ZSA/IHJlcXVlc3QuYm9keSAmJiAocmVxdWVzdC5ib2R5LnNvdXJjZSB8fCByZXF1ZXN0LmJvZHkuc3RyZWFtKSA6IGJvZHksXG4gICAgICAgIGhlYWRlcnM6IHJlcXVlc3QuaGVhZGVyc0xpc3QuZW50cmllcyxcbiAgICAgICAgbWF4UmVkaXJlY3Rpb25zOiAwLFxuICAgICAgICB1cGdyYWRlOiByZXF1ZXN0Lm1vZGUgPT09ICd3ZWJzb2NrZXQnID8gJ3dlYnNvY2tldCcgOiB1bmRlZmluZWRcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJvZHk6IG51bGwsXG4gICAgICAgIGFib3J0OiBudWxsLFxuXG4gICAgICAgIG9uQ29ubmVjdCAoYWJvcnQpIHtcbiAgICAgICAgICAvLyBUT0RPIChmaXgpOiBEbyB3ZSBuZWVkIGNvbm5lY3Rpb24gaGVyZT9cbiAgICAgICAgICBjb25zdCB7IGNvbm5lY3Rpb24gfSA9IGZldGNoUGFyYW1zLmNvbnRyb2xsZXJcblxuICAgICAgICAgIGlmIChjb25uZWN0aW9uLmRlc3Ryb3llZCkge1xuICAgICAgICAgICAgYWJvcnQobmV3IERPTUV4Y2VwdGlvbignVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC4nLCAnQWJvcnRFcnJvcicpKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLm9uKCd0ZXJtaW5hdGVkJywgYWJvcnQpXG4gICAgICAgICAgICB0aGlzLmFib3J0ID0gY29ubmVjdGlvbi5hYm9ydCA9IGFib3J0XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIG9uSGVhZGVycyAoc3RhdHVzLCBoZWFkZXJzTGlzdCwgcmVzdW1lLCBzdGF0dXNUZXh0KSB7XG4gICAgICAgICAgaWYgKHN0YXR1cyA8IDIwMCkge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IGNvZGluZ3MgPSBbXVxuICAgICAgICAgIGxldCBsb2NhdGlvbiA9ICcnXG5cbiAgICAgICAgICBjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKVxuXG4gICAgICAgICAgLy8gRm9yIEgyLCB0aGUgaGVhZGVycyBhcmUgYSBwbGFpbiBKUyBvYmplY3RcbiAgICAgICAgICAvLyBXZSBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZW0gYW5kIGl0ZXJhdGUgYWNjb3JkaW5nbHlcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzTGlzdCkpIHtcbiAgICAgICAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgaGVhZGVyc0xpc3QubGVuZ3RoOyBuICs9IDIpIHtcbiAgICAgICAgICAgICAgY29uc3Qga2V5ID0gaGVhZGVyc0xpc3RbbiArIDBdLnRvU3RyaW5nKCdsYXRpbjEnKVxuICAgICAgICAgICAgICBjb25zdCB2YWwgPSBoZWFkZXJzTGlzdFtuICsgMV0udG9TdHJpbmcoJ2xhdGluMScpXG4gICAgICAgICAgICAgIGlmIChrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtZW5jb2RpbmcnKSB7XG4gICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzcyMzEjc2VjdGlvbi0zLjEuMi4xXG4gICAgICAgICAgICAgICAgLy8gXCJBbGwgY29udGVudC1jb2RpbmcgdmFsdWVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlLi4uXCJcbiAgICAgICAgICAgICAgICBjb2RpbmdzID0gdmFsLnRvTG93ZXJDYXNlKCkuc3BsaXQoJywnKS5tYXAoKHgpID0+IHgudHJpbSgpKVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleS50b0xvd2VyQ2FzZSgpID09PSAnbG9jYXRpb24nKSB7XG4gICAgICAgICAgICAgICAgbG9jYXRpb24gPSB2YWxcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGhlYWRlcnNba0hlYWRlcnNMaXN0XS5hcHBlbmQoa2V5LCB2YWwpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhoZWFkZXJzTGlzdClcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgICAgICAgY29uc3QgdmFsID0gaGVhZGVyc0xpc3Rba2V5XVxuICAgICAgICAgICAgICBpZiAoa2V5LnRvTG93ZXJDYXNlKCkgPT09ICdjb250ZW50LWVuY29kaW5nJykge1xuICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM3MjMxI3NlY3Rpb24tMy4xLjIuMVxuICAgICAgICAgICAgICAgIC8vIFwiQWxsIGNvbnRlbnQtY29kaW5nIHZhbHVlcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZS4uLlwiXG4gICAgICAgICAgICAgICAgY29kaW5ncyA9IHZhbC50b0xvd2VyQ2FzZSgpLnNwbGl0KCcsJykubWFwKCh4KSA9PiB4LnRyaW0oKSkucmV2ZXJzZSgpXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5LnRvTG93ZXJDYXNlKCkgPT09ICdsb2NhdGlvbicpIHtcbiAgICAgICAgICAgICAgICBsb2NhdGlvbiA9IHZhbFxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaGVhZGVyc1trSGVhZGVyc0xpc3RdLmFwcGVuZChrZXksIHZhbClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmJvZHkgPSBuZXcgUmVhZGFibGUoeyByZWFkOiByZXN1bWUgfSlcblxuICAgICAgICAgIGNvbnN0IGRlY29kZXJzID0gW11cblxuICAgICAgICAgIGNvbnN0IHdpbGxGb2xsb3cgPSByZXF1ZXN0LnJlZGlyZWN0ID09PSAnZm9sbG93JyAmJlxuICAgICAgICAgICAgbG9jYXRpb24gJiZcbiAgICAgICAgICAgIHJlZGlyZWN0U3RhdHVzU2V0LmhhcyhzdGF0dXMpXG5cbiAgICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvQ29udGVudC1FbmNvZGluZ1xuICAgICAgICAgIGlmIChyZXF1ZXN0Lm1ldGhvZCAhPT0gJ0hFQUQnICYmIHJlcXVlc3QubWV0aG9kICE9PSAnQ09OTkVDVCcgJiYgIW51bGxCb2R5U3RhdHVzLmluY2x1ZGVzKHN0YXR1cykgJiYgIXdpbGxGb2xsb3cpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29kaW5nIG9mIGNvZGluZ3MpIHtcbiAgICAgICAgICAgICAgLy8gaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzkxMTIuaHRtbCNzZWN0aW9uLTcuMlxuICAgICAgICAgICAgICBpZiAoY29kaW5nID09PSAneC1nemlwJyB8fCBjb2RpbmcgPT09ICdnemlwJykge1xuICAgICAgICAgICAgICAgIGRlY29kZXJzLnB1c2goemxpYi5jcmVhdGVHdW56aXAoe1xuICAgICAgICAgICAgICAgICAgLy8gQmUgbGVzcyBzdHJpY3Qgd2hlbiBkZWNvZGluZyBjb21wcmVzc2VkIHJlc3BvbnNlcywgc2luY2Ugc29tZXRpbWVzXG4gICAgICAgICAgICAgICAgICAvLyBzZXJ2ZXJzIHNlbmQgc2xpZ2h0bHkgaW52YWxpZCByZXNwb25zZXMgdGhhdCBhcmUgc3RpbGwgYWNjZXB0ZWRcbiAgICAgICAgICAgICAgICAgIC8vIGJ5IGNvbW1vbiBicm93c2Vycy5cbiAgICAgICAgICAgICAgICAgIC8vIEFsd2F5cyB1c2luZyBaX1NZTkNfRkxVU0ggaXMgd2hhdCBjVVJMIGRvZXMuXG4gICAgICAgICAgICAgICAgICBmbHVzaDogemxpYi5jb25zdGFudHMuWl9TWU5DX0ZMVVNILFxuICAgICAgICAgICAgICAgICAgZmluaXNoRmx1c2g6IHpsaWIuY29uc3RhbnRzLlpfU1lOQ19GTFVTSFxuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvZGluZyA9PT0gJ2RlZmxhdGUnKSB7XG4gICAgICAgICAgICAgICAgZGVjb2RlcnMucHVzaCh6bGliLmNyZWF0ZUluZmxhdGUoKSlcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb2RpbmcgPT09ICdicicpIHtcbiAgICAgICAgICAgICAgICBkZWNvZGVycy5wdXNoKHpsaWIuY3JlYXRlQnJvdGxpRGVjb21wcmVzcygpKVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRlY29kZXJzLmxlbmd0aCA9IDBcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgICBzdGF0dXNUZXh0LFxuICAgICAgICAgICAgaGVhZGVyc0xpc3Q6IGhlYWRlcnNba0hlYWRlcnNMaXN0XSxcbiAgICAgICAgICAgIGJvZHk6IGRlY29kZXJzLmxlbmd0aFxuICAgICAgICAgICAgICA/IHBpcGVsaW5lKHRoaXMuYm9keSwgLi4uZGVjb2RlcnMsICgpID0+IHsgfSlcbiAgICAgICAgICAgICAgOiB0aGlzLmJvZHkub24oJ2Vycm9yJywgKCkgPT4ge30pXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH0sXG5cbiAgICAgICAgb25EYXRhIChjaHVuaykge1xuICAgICAgICAgIGlmIChmZXRjaFBhcmFtcy5jb250cm9sbGVyLmR1bXApIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDEuIElmIG9uZSBvciBtb3JlIGJ5dGVzIGhhdmUgYmVlbiB0cmFuc21pdHRlZCBmcm9tIHJlc3BvbnNl4oCZc1xuICAgICAgICAgIC8vIG1lc3NhZ2UgYm9keSwgdGhlbjpcblxuICAgICAgICAgIC8vICAxLiBMZXQgYnl0ZXMgYmUgdGhlIHRyYW5zbWl0dGVkIGJ5dGVzLlxuICAgICAgICAgIGNvbnN0IGJ5dGVzID0gY2h1bmtcblxuICAgICAgICAgIC8vICAyLiBMZXQgY29kaW5ncyBiZSB0aGUgcmVzdWx0IG9mIGV4dHJhY3RpbmcgaGVhZGVyIGxpc3QgdmFsdWVzXG4gICAgICAgICAgLy8gIGdpdmVuIGBDb250ZW50LUVuY29kaW5nYCBhbmQgcmVzcG9uc2XigJlzIGhlYWRlciBsaXN0LlxuICAgICAgICAgIC8vICBTZWUgcHVsbEFsZ29yaXRobS5cblxuICAgICAgICAgIC8vICAzLiBJbmNyZWFzZSB0aW1pbmdJbmZv4oCZcyBlbmNvZGVkIGJvZHkgc2l6ZSBieSBieXRlc+KAmXMgbGVuZ3RoLlxuICAgICAgICAgIHRpbWluZ0luZm8uZW5jb2RlZEJvZHlTaXplICs9IGJ5dGVzLmJ5dGVMZW5ndGhcblxuICAgICAgICAgIC8vICA0LiBTZWUgcHVsbEFsZ29yaXRobS4uLlxuXG4gICAgICAgICAgcmV0dXJuIHRoaXMuYm9keS5wdXNoKGJ5dGVzKVxuICAgICAgICB9LFxuXG4gICAgICAgIG9uQ29tcGxldGUgKCkge1xuICAgICAgICAgIGlmICh0aGlzLmFib3J0KSB7XG4gICAgICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLm9mZigndGVybWluYXRlZCcsIHRoaXMuYWJvcnQpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5lbmRlZCA9IHRydWVcblxuICAgICAgICAgIHRoaXMuYm9keS5wdXNoKG51bGwpXG4gICAgICAgIH0sXG5cbiAgICAgICAgb25FcnJvciAoZXJyb3IpIHtcbiAgICAgICAgICBpZiAodGhpcy5hYm9ydCkge1xuICAgICAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5vZmYoJ3Rlcm1pbmF0ZWQnLCB0aGlzLmFib3J0KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuYm9keT8uZGVzdHJveShlcnJvcilcblxuICAgICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIudGVybWluYXRlKGVycm9yKVxuXG4gICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICB9LFxuXG4gICAgICAgIG9uVXBncmFkZSAoc3RhdHVzLCBoZWFkZXJzTGlzdCwgc29ja2V0KSB7XG4gICAgICAgICAgaWYgKHN0YXR1cyAhPT0gMTAxKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKVxuXG4gICAgICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBoZWFkZXJzTGlzdC5sZW5ndGg7IG4gKz0gMikge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gaGVhZGVyc0xpc3RbbiArIDBdLnRvU3RyaW5nKCdsYXRpbjEnKVxuICAgICAgICAgICAgY29uc3QgdmFsID0gaGVhZGVyc0xpc3RbbiArIDFdLnRvU3RyaW5nKCdsYXRpbjEnKVxuXG4gICAgICAgICAgICBoZWFkZXJzW2tIZWFkZXJzTGlzdF0uYXBwZW5kKGtleSwgdmFsKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgICAgc3RhdHVzVGV4dDogU1RBVFVTX0NPREVTW3N0YXR1c10sXG4gICAgICAgICAgICBoZWFkZXJzTGlzdDogaGVhZGVyc1trSGVhZGVyc0xpc3RdLFxuICAgICAgICAgICAgc29ja2V0XG4gICAgICAgICAgfSlcblxuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBmZXRjaCxcbiAgRmV0Y2gsXG4gIGZldGNoaW5nLFxuICBmaW5hbGl6ZUFuZFJlcG9ydFRpbWluZ1xufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGtTdGF0ZTogU3ltYm9sKCdGaWxlUmVhZGVyIHN0YXRlJyksXG4gIGtSZXN1bHQ6IFN5bWJvbCgnRmlsZVJlYWRlciByZXN1bHQnKSxcbiAga0Vycm9yOiBTeW1ib2woJ0ZpbGVSZWFkZXIgZXJyb3InKSxcbiAga0xhc3RQcm9ncmVzc0V2ZW50RmlyZWQ6IFN5bWJvbCgnRmlsZVJlYWRlciBsYXN0IHByb2dyZXNzIGV2ZW50IGZpcmVkIHRpbWVzdGFtcCcpLFxuICBrRXZlbnRzOiBTeW1ib2woJ0ZpbGVSZWFkZXIgZXZlbnRzJyksXG4gIGtBYm9ydGVkOiBTeW1ib2woJ0ZpbGVSZWFkZXIgYWJvcnRlZCcpXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvd2ViaWRsJylcblxuY29uc3Qga1N0YXRlID0gU3ltYm9sKCdQcm9ncmVzc0V2ZW50IHN0YXRlJylcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8veGhyLnNwZWMud2hhdHdnLm9yZy8jcHJvZ3Jlc3NldmVudFxuICovXG5jbGFzcyBQcm9ncmVzc0V2ZW50IGV4dGVuZHMgRXZlbnQge1xuICBjb25zdHJ1Y3RvciAodHlwZSwgZXZlbnRJbml0RGljdCA9IHt9KSB7XG4gICAgdHlwZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyh0eXBlKVxuICAgIGV2ZW50SW5pdERpY3QgPSB3ZWJpZGwuY29udmVydGVycy5Qcm9ncmVzc0V2ZW50SW5pdChldmVudEluaXREaWN0ID8/IHt9KVxuXG4gICAgc3VwZXIodHlwZSwgZXZlbnRJbml0RGljdClcblxuICAgIHRoaXNba1N0YXRlXSA9IHtcbiAgICAgIGxlbmd0aENvbXB1dGFibGU6IGV2ZW50SW5pdERpY3QubGVuZ3RoQ29tcHV0YWJsZSxcbiAgICAgIGxvYWRlZDogZXZlbnRJbml0RGljdC5sb2FkZWQsXG4gICAgICB0b3RhbDogZXZlbnRJbml0RGljdC50b3RhbFxuICAgIH1cbiAgfVxuXG4gIGdldCBsZW5ndGhDb21wdXRhYmxlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBQcm9ncmVzc0V2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5sZW5ndGhDb21wdXRhYmxlXG4gIH1cblxuICBnZXQgbG9hZGVkICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBQcm9ncmVzc0V2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5sb2FkZWRcbiAgfVxuXG4gIGdldCB0b3RhbCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUHJvZ3Jlc3NFdmVudClcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0udG90YWxcbiAgfVxufVxuXG53ZWJpZGwuY29udmVydGVycy5Qcm9ncmVzc0V2ZW50SW5pdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGtleTogJ2xlbmd0aENvbXB1dGFibGUnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdsb2FkZWQnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIGxvbmcgbG9uZyddLFxuICAgIGRlZmF1bHRWYWx1ZTogMFxuICB9LFxuICB7XG4gICAga2V5OiAndG90YWwnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIGxvbmcgbG9uZyddLFxuICAgIGRlZmF1bHRWYWx1ZTogMFxuICB9LFxuICB7XG4gICAga2V5OiAnYnViYmxlcycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2VcbiAgfSxcbiAge1xuICAgIGtleTogJ2NhbmNlbGFibGUnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjb21wb3NlZCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2VcbiAgfVxuXSlcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFByb2dyZXNzRXZlbnRcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbi8qKlxuICogQHNlZSBodHRwczovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1lbmNvZGluZy1nZXRcbiAqIEBwYXJhbSB7c3RyaW5nfHVuZGVmaW5lZH0gbGFiZWxcbiAqL1xuZnVuY3Rpb24gZ2V0RW5jb2RpbmcgKGxhYmVsKSB7XG4gIGlmICghbGFiZWwpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICAvLyAxLiBSZW1vdmUgYW55IGxlYWRpbmcgYW5kIHRyYWlsaW5nIEFTQ0lJIHdoaXRlc3BhY2UgZnJvbSBsYWJlbC5cbiAgLy8gMi4gSWYgbGFiZWwgaXMgYW4gQVNDSUkgY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBmb3IgYW55IG9mIHRoZVxuICAvLyAgICBsYWJlbHMgbGlzdGVkIGluIHRoZSB0YWJsZSBiZWxvdywgdGhlbiByZXR1cm4gdGhlXG4gIC8vICAgIGNvcnJlc3BvbmRpbmcgZW5jb2Rpbmc7IG90aGVyd2lzZSByZXR1cm4gZmFpbHVyZS5cbiAgc3dpdGNoIChsYWJlbC50cmltKCkudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgJ3VuaWNvZGUtMS0xLXV0Zi04JzpcbiAgICBjYXNlICd1bmljb2RlMTF1dGY4JzpcbiAgICBjYXNlICd1bmljb2RlMjB1dGY4JzpcbiAgICBjYXNlICd1dGYtOCc6XG4gICAgY2FzZSAndXRmOCc6XG4gICAgY2FzZSAneC11bmljb2RlMjB1dGY4JzpcbiAgICAgIHJldHVybiAnVVRGLTgnXG4gICAgY2FzZSAnODY2JzpcbiAgICBjYXNlICdjcDg2Nic6XG4gICAgY2FzZSAnY3NpYm04NjYnOlxuICAgIGNhc2UgJ2libTg2Nic6XG4gICAgICByZXR1cm4gJ0lCTTg2NidcbiAgICBjYXNlICdjc2lzb2xhdGluMic6XG4gICAgY2FzZSAnaXNvLTg4NTktMic6XG4gICAgY2FzZSAnaXNvLWlyLTEwMSc6XG4gICAgY2FzZSAnaXNvODg1OS0yJzpcbiAgICBjYXNlICdpc284ODU5Mic6XG4gICAgY2FzZSAnaXNvXzg4NTktMic6XG4gICAgY2FzZSAnaXNvXzg4NTktMjoxOTg3JzpcbiAgICBjYXNlICdsMic6XG4gICAgY2FzZSAnbGF0aW4yJzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktMidcbiAgICBjYXNlICdjc2lzb2xhdGluMyc6XG4gICAgY2FzZSAnaXNvLTg4NTktMyc6XG4gICAgY2FzZSAnaXNvLWlyLTEwOSc6XG4gICAgY2FzZSAnaXNvODg1OS0zJzpcbiAgICBjYXNlICdpc284ODU5Myc6XG4gICAgY2FzZSAnaXNvXzg4NTktMyc6XG4gICAgY2FzZSAnaXNvXzg4NTktMzoxOTg4JzpcbiAgICBjYXNlICdsMyc6XG4gICAgY2FzZSAnbGF0aW4zJzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktMydcbiAgICBjYXNlICdjc2lzb2xhdGluNCc6XG4gICAgY2FzZSAnaXNvLTg4NTktNCc6XG4gICAgY2FzZSAnaXNvLWlyLTExMCc6XG4gICAgY2FzZSAnaXNvODg1OS00JzpcbiAgICBjYXNlICdpc284ODU5NCc6XG4gICAgY2FzZSAnaXNvXzg4NTktNCc6XG4gICAgY2FzZSAnaXNvXzg4NTktNDoxOTg4JzpcbiAgICBjYXNlICdsNCc6XG4gICAgY2FzZSAnbGF0aW40JzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktNCdcbiAgICBjYXNlICdjc2lzb2xhdGluY3lyaWxsaWMnOlxuICAgIGNhc2UgJ2N5cmlsbGljJzpcbiAgICBjYXNlICdpc28tODg1OS01JzpcbiAgICBjYXNlICdpc28taXItMTQ0JzpcbiAgICBjYXNlICdpc284ODU5LTUnOlxuICAgIGNhc2UgJ2lzbzg4NTk1JzpcbiAgICBjYXNlICdpc29fODg1OS01JzpcbiAgICBjYXNlICdpc29fODg1OS01OjE5ODgnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS01J1xuICAgIGNhc2UgJ2FyYWJpYyc6XG4gICAgY2FzZSAnYXNtby03MDgnOlxuICAgIGNhc2UgJ2NzaXNvODg1OTZlJzpcbiAgICBjYXNlICdjc2lzbzg4NTk2aSc6XG4gICAgY2FzZSAnY3Npc29sYXRpbmFyYWJpYyc6XG4gICAgY2FzZSAnZWNtYS0xMTQnOlxuICAgIGNhc2UgJ2lzby04ODU5LTYnOlxuICAgIGNhc2UgJ2lzby04ODU5LTYtZSc6XG4gICAgY2FzZSAnaXNvLTg4NTktNi1pJzpcbiAgICBjYXNlICdpc28taXItMTI3JzpcbiAgICBjYXNlICdpc284ODU5LTYnOlxuICAgIGNhc2UgJ2lzbzg4NTk2JzpcbiAgICBjYXNlICdpc29fODg1OS02JzpcbiAgICBjYXNlICdpc29fODg1OS02OjE5ODcnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS02J1xuICAgIGNhc2UgJ2NzaXNvbGF0aW5ncmVlayc6XG4gICAgY2FzZSAnZWNtYS0xMTgnOlxuICAgIGNhc2UgJ2Vsb3RfOTI4JzpcbiAgICBjYXNlICdncmVlayc6XG4gICAgY2FzZSAnZ3JlZWs4JzpcbiAgICBjYXNlICdpc28tODg1OS03JzpcbiAgICBjYXNlICdpc28taXItMTI2JzpcbiAgICBjYXNlICdpc284ODU5LTcnOlxuICAgIGNhc2UgJ2lzbzg4NTk3JzpcbiAgICBjYXNlICdpc29fODg1OS03JzpcbiAgICBjYXNlICdpc29fODg1OS03OjE5ODcnOlxuICAgIGNhc2UgJ3N1bl9ldV9ncmVlayc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTcnXG4gICAgY2FzZSAnY3Npc284ODU5OGUnOlxuICAgIGNhc2UgJ2NzaXNvbGF0aW5oZWJyZXcnOlxuICAgIGNhc2UgJ2hlYnJldyc6XG4gICAgY2FzZSAnaXNvLTg4NTktOCc6XG4gICAgY2FzZSAnaXNvLTg4NTktOC1lJzpcbiAgICBjYXNlICdpc28taXItMTM4JzpcbiAgICBjYXNlICdpc284ODU5LTgnOlxuICAgIGNhc2UgJ2lzbzg4NTk4JzpcbiAgICBjYXNlICdpc29fODg1OS04JzpcbiAgICBjYXNlICdpc29fODg1OS04OjE5ODgnOlxuICAgIGNhc2UgJ3Zpc3VhbCc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTgnXG4gICAgY2FzZSAnY3Npc284ODU5OGknOlxuICAgIGNhc2UgJ2lzby04ODU5LTgtaSc6XG4gICAgY2FzZSAnbG9naWNhbCc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTgtSSdcbiAgICBjYXNlICdjc2lzb2xhdGluNic6XG4gICAgY2FzZSAnaXNvLTg4NTktMTAnOlxuICAgIGNhc2UgJ2lzby1pci0xNTcnOlxuICAgIGNhc2UgJ2lzbzg4NTktMTAnOlxuICAgIGNhc2UgJ2lzbzg4NTkxMCc6XG4gICAgY2FzZSAnbDYnOlxuICAgIGNhc2UgJ2xhdGluNic6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTEwJ1xuICAgIGNhc2UgJ2lzby04ODU5LTEzJzpcbiAgICBjYXNlICdpc284ODU5LTEzJzpcbiAgICBjYXNlICdpc284ODU5MTMnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS0xMydcbiAgICBjYXNlICdpc28tODg1OS0xNCc6XG4gICAgY2FzZSAnaXNvODg1OS0xNCc6XG4gICAgY2FzZSAnaXNvODg1OTE0JzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktMTQnXG4gICAgY2FzZSAnY3Npc29sYXRpbjknOlxuICAgIGNhc2UgJ2lzby04ODU5LTE1JzpcbiAgICBjYXNlICdpc284ODU5LTE1JzpcbiAgICBjYXNlICdpc284ODU5MTUnOlxuICAgIGNhc2UgJ2lzb184ODU5LTE1JzpcbiAgICBjYXNlICdsOSc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTE1J1xuICAgIGNhc2UgJ2lzby04ODU5LTE2JzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktMTYnXG4gICAgY2FzZSAnY3Nrb2k4cic6XG4gICAgY2FzZSAna29pJzpcbiAgICBjYXNlICdrb2k4JzpcbiAgICBjYXNlICdrb2k4LXInOlxuICAgIGNhc2UgJ2tvaThfcic6XG4gICAgICByZXR1cm4gJ0tPSTgtUidcbiAgICBjYXNlICdrb2k4LXJ1JzpcbiAgICBjYXNlICdrb2k4LXUnOlxuICAgICAgcmV0dXJuICdLT0k4LVUnXG4gICAgY2FzZSAnY3NtYWNpbnRvc2gnOlxuICAgIGNhc2UgJ21hYyc6XG4gICAgY2FzZSAnbWFjaW50b3NoJzpcbiAgICBjYXNlICd4LW1hYy1yb21hbic6XG4gICAgICByZXR1cm4gJ21hY2ludG9zaCdcbiAgICBjYXNlICdpc28tODg1OS0xMSc6XG4gICAgY2FzZSAnaXNvODg1OS0xMSc6XG4gICAgY2FzZSAnaXNvODg1OTExJzpcbiAgICBjYXNlICd0aXMtNjIwJzpcbiAgICBjYXNlICd3aW5kb3dzLTg3NCc6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtODc0J1xuICAgIGNhc2UgJ2NwMTI1MCc6XG4gICAgY2FzZSAnd2luZG93cy0xMjUwJzpcbiAgICBjYXNlICd4LWNwMTI1MCc6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtMTI1MCdcbiAgICBjYXNlICdjcDEyNTEnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMTI1MSc6XG4gICAgY2FzZSAneC1jcDEyNTEnOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTEyNTEnXG4gICAgY2FzZSAnYW5zaV94My40LTE5NjgnOlxuICAgIGNhc2UgJ2FzY2lpJzpcbiAgICBjYXNlICdjcDEyNTInOlxuICAgIGNhc2UgJ2NwODE5JzpcbiAgICBjYXNlICdjc2lzb2xhdGluMSc6XG4gICAgY2FzZSAnaWJtODE5JzpcbiAgICBjYXNlICdpc28tODg1OS0xJzpcbiAgICBjYXNlICdpc28taXItMTAwJzpcbiAgICBjYXNlICdpc284ODU5LTEnOlxuICAgIGNhc2UgJ2lzbzg4NTkxJzpcbiAgICBjYXNlICdpc29fODg1OS0xJzpcbiAgICBjYXNlICdpc29fODg1OS0xOjE5ODcnOlxuICAgIGNhc2UgJ2wxJzpcbiAgICBjYXNlICdsYXRpbjEnOlxuICAgIGNhc2UgJ3VzLWFzY2lpJzpcbiAgICBjYXNlICd3aW5kb3dzLTEyNTInOlxuICAgIGNhc2UgJ3gtY3AxMjUyJzpcbiAgICAgIHJldHVybiAnd2luZG93cy0xMjUyJ1xuICAgIGNhc2UgJ2NwMTI1Myc6XG4gICAgY2FzZSAnd2luZG93cy0xMjUzJzpcbiAgICBjYXNlICd4LWNwMTI1Myc6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtMTI1MydcbiAgICBjYXNlICdjcDEyNTQnOlxuICAgIGNhc2UgJ2NzaXNvbGF0aW41JzpcbiAgICBjYXNlICdpc28tODg1OS05JzpcbiAgICBjYXNlICdpc28taXItMTQ4JzpcbiAgICBjYXNlICdpc284ODU5LTknOlxuICAgIGNhc2UgJ2lzbzg4NTk5JzpcbiAgICBjYXNlICdpc29fODg1OS05JzpcbiAgICBjYXNlICdpc29fODg1OS05OjE5ODknOlxuICAgIGNhc2UgJ2w1JzpcbiAgICBjYXNlICdsYXRpbjUnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMTI1NCc6XG4gICAgY2FzZSAneC1jcDEyNTQnOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTEyNTQnXG4gICAgY2FzZSAnY3AxMjU1JzpcbiAgICBjYXNlICd3aW5kb3dzLTEyNTUnOlxuICAgIGNhc2UgJ3gtY3AxMjU1JzpcbiAgICAgIHJldHVybiAnd2luZG93cy0xMjU1J1xuICAgIGNhc2UgJ2NwMTI1Nic6XG4gICAgY2FzZSAnd2luZG93cy0xMjU2JzpcbiAgICBjYXNlICd4LWNwMTI1Nic6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtMTI1NidcbiAgICBjYXNlICdjcDEyNTcnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMTI1Nyc6XG4gICAgY2FzZSAneC1jcDEyNTcnOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTEyNTcnXG4gICAgY2FzZSAnY3AxMjU4JzpcbiAgICBjYXNlICd3aW5kb3dzLTEyNTgnOlxuICAgIGNhc2UgJ3gtY3AxMjU4JzpcbiAgICAgIHJldHVybiAnd2luZG93cy0xMjU4J1xuICAgIGNhc2UgJ3gtbWFjLWN5cmlsbGljJzpcbiAgICBjYXNlICd4LW1hYy11a3JhaW5pYW4nOlxuICAgICAgcmV0dXJuICd4LW1hYy1jeXJpbGxpYydcbiAgICBjYXNlICdjaGluZXNlJzpcbiAgICBjYXNlICdjc2diMjMxMic6XG4gICAgY2FzZSAnY3Npc281OGdiMjMxMjgwJzpcbiAgICBjYXNlICdnYjIzMTInOlxuICAgIGNhc2UgJ2diXzIzMTInOlxuICAgIGNhc2UgJ2diXzIzMTItODAnOlxuICAgIGNhc2UgJ2diayc6XG4gICAgY2FzZSAnaXNvLWlyLTU4JzpcbiAgICBjYXNlICd4LWdiayc6XG4gICAgICByZXR1cm4gJ0dCSydcbiAgICBjYXNlICdnYjE4MDMwJzpcbiAgICAgIHJldHVybiAnZ2IxODAzMCdcbiAgICBjYXNlICdiaWc1JzpcbiAgICBjYXNlICdiaWc1LWhrc2NzJzpcbiAgICBjYXNlICdjbi1iaWc1JzpcbiAgICBjYXNlICdjc2JpZzUnOlxuICAgIGNhc2UgJ3gteC1iaWc1JzpcbiAgICAgIHJldHVybiAnQmlnNSdcbiAgICBjYXNlICdjc2V1Y3BrZGZtdGphcGFuZXNlJzpcbiAgICBjYXNlICdldWMtanAnOlxuICAgIGNhc2UgJ3gtZXVjLWpwJzpcbiAgICAgIHJldHVybiAnRVVDLUpQJ1xuICAgIGNhc2UgJ2NzaXNvMjAyMmpwJzpcbiAgICBjYXNlICdpc28tMjAyMi1qcCc6XG4gICAgICByZXR1cm4gJ0lTTy0yMDIyLUpQJ1xuICAgIGNhc2UgJ2Nzc2hpZnRqaXMnOlxuICAgIGNhc2UgJ21zOTMyJzpcbiAgICBjYXNlICdtc19rYW5qaSc6XG4gICAgY2FzZSAnc2hpZnQtamlzJzpcbiAgICBjYXNlICdzaGlmdF9qaXMnOlxuICAgIGNhc2UgJ3NqaXMnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMzFqJzpcbiAgICBjYXNlICd4LXNqaXMnOlxuICAgICAgcmV0dXJuICdTaGlmdF9KSVMnXG4gICAgY2FzZSAnY3NldWNrcic6XG4gICAgY2FzZSAnY3Nrc2M1NjAxMTk4Nyc6XG4gICAgY2FzZSAnZXVjLWtyJzpcbiAgICBjYXNlICdpc28taXItMTQ5JzpcbiAgICBjYXNlICdrb3JlYW4nOlxuICAgIGNhc2UgJ2tzX2NfNTYwMS0xOTg3JzpcbiAgICBjYXNlICdrc19jXzU2MDEtMTk4OSc6XG4gICAgY2FzZSAna3NjNTYwMSc6XG4gICAgY2FzZSAna3NjXzU2MDEnOlxuICAgIGNhc2UgJ3dpbmRvd3MtOTQ5JzpcbiAgICAgIHJldHVybiAnRVVDLUtSJ1xuICAgIGNhc2UgJ2NzaXNvMjAyMmtyJzpcbiAgICBjYXNlICdoei1nYi0yMzEyJzpcbiAgICBjYXNlICdpc28tMjAyMi1jbic6XG4gICAgY2FzZSAnaXNvLTIwMjItY24tZXh0JzpcbiAgICBjYXNlICdpc28tMjAyMi1rcic6XG4gICAgY2FzZSAncmVwbGFjZW1lbnQnOlxuICAgICAgcmV0dXJuICdyZXBsYWNlbWVudCdcbiAgICBjYXNlICd1bmljb2RlZmZmZSc6XG4gICAgY2FzZSAndXRmLTE2YmUnOlxuICAgICAgcmV0dXJuICdVVEYtMTZCRSdcbiAgICBjYXNlICdjc3VuaWNvZGUnOlxuICAgIGNhc2UgJ2lzby0xMDY0Ni11Y3MtMic6XG4gICAgY2FzZSAndWNzLTInOlxuICAgIGNhc2UgJ3VuaWNvZGUnOlxuICAgIGNhc2UgJ3VuaWNvZGVmZWZmJzpcbiAgICBjYXNlICd1dGYtMTYnOlxuICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgIHJldHVybiAnVVRGLTE2TEUnXG4gICAgY2FzZSAneC11c2VyLWRlZmluZWQnOlxuICAgICAgcmV0dXJuICd4LXVzZXItZGVmaW5lZCdcbiAgICBkZWZhdWx0OiByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldEVuY29kaW5nXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIGtTdGF0ZSxcbiAga0Vycm9yLFxuICBrUmVzdWx0LFxuICBrQWJvcnRlZCxcbiAga0xhc3RQcm9ncmVzc0V2ZW50RmlyZWRcbn0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBQcm9ncmVzc0V2ZW50IH0gPSByZXF1aXJlKCcuL3Byb2dyZXNzZXZlbnQnKVxuY29uc3QgeyBnZXRFbmNvZGluZyB9ID0gcmVxdWlyZSgnLi9lbmNvZGluZycpXG5jb25zdCB7IERPTUV4Y2VwdGlvbiB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvY29uc3RhbnRzJylcbmNvbnN0IHsgc2VyaWFsaXplQU1pbWVUeXBlLCBwYXJzZU1JTUVUeXBlIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9kYXRhVVJMJylcbmNvbnN0IHsgdHlwZXMgfSA9IHJlcXVpcmUoJ3V0aWwnKVxuY29uc3QgeyBTdHJpbmdEZWNvZGVyIH0gPSByZXF1aXJlKCdzdHJpbmdfZGVjb2RlcicpXG5jb25zdCB7IGJ0b2EgfSA9IHJlcXVpcmUoJ2J1ZmZlcicpXG5cbi8qKiBAdHlwZSB7UHJvcGVydHlEZXNjcmlwdG9yfSAqL1xuY29uc3Qgc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyA9IHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgd3JpdGFibGU6IGZhbHNlLFxuICBjb25maWd1cmFibGU6IGZhbHNlXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jcmVhZE9wZXJhdGlvblxuICogQHBhcmFtIHtpbXBvcnQoJy4vZmlsZXJlYWRlcicpLkZpbGVSZWFkZXJ9IGZyXG4gKiBAcGFyYW0ge2ltcG9ydCgnYnVmZmVyJykuQmxvYn0gYmxvYlxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nP30gZW5jb2RpbmdOYW1lXG4gKi9cbmZ1bmN0aW9uIHJlYWRPcGVyYXRpb24gKGZyLCBibG9iLCB0eXBlLCBlbmNvZGluZ05hbWUpIHtcbiAgLy8gMS4gSWYgZnLigJlzIHN0YXRlIGlzIFwibG9hZGluZ1wiLCB0aHJvdyBhbiBJbnZhbGlkU3RhdGVFcnJvclxuICAvLyAgICBET01FeGNlcHRpb24uXG4gIGlmIChmcltrU3RhdGVdID09PSAnbG9hZGluZycpIHtcbiAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCdJbnZhbGlkIHN0YXRlJywgJ0ludmFsaWRTdGF0ZUVycm9yJylcbiAgfVxuXG4gIC8vIDIuIFNldCBmcuKAmXMgc3RhdGUgdG8gXCJsb2FkaW5nXCIuXG4gIGZyW2tTdGF0ZV0gPSAnbG9hZGluZydcblxuICAvLyAzLiBTZXQgZnLigJlzIHJlc3VsdCB0byBudWxsLlxuICBmcltrUmVzdWx0XSA9IG51bGxcblxuICAvLyA0LiBTZXQgZnLigJlzIGVycm9yIHRvIG51bGwuXG4gIGZyW2tFcnJvcl0gPSBudWxsXG5cbiAgLy8gNS4gTGV0IHN0cmVhbSBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgZ2V0IHN0cmVhbSBvbiBibG9iLlxuICAvKiogQHR5cGUge2ltcG9ydCgnc3RyZWFtL3dlYicpLlJlYWRhYmxlU3RyZWFtfSAqL1xuICBjb25zdCBzdHJlYW0gPSBibG9iLnN0cmVhbSgpXG5cbiAgLy8gNi4gTGV0IHJlYWRlciBiZSB0aGUgcmVzdWx0IG9mIGdldHRpbmcgYSByZWFkZXIgZnJvbSBzdHJlYW0uXG4gIGNvbnN0IHJlYWRlciA9IHN0cmVhbS5nZXRSZWFkZXIoKVxuXG4gIC8vIDcuIExldCBieXRlcyBiZSBhbiBlbXB0eSBieXRlIHNlcXVlbmNlLlxuICAvKiogQHR5cGUge1VpbnQ4QXJyYXlbXX0gKi9cbiAgY29uc3QgYnl0ZXMgPSBbXVxuXG4gIC8vIDguIExldCBjaHVua1Byb21pc2UgYmUgdGhlIHJlc3VsdCBvZiByZWFkaW5nIGEgY2h1bmsgZnJvbVxuICAvLyAgICBzdHJlYW0gd2l0aCByZWFkZXIuXG4gIGxldCBjaHVua1Byb21pc2UgPSByZWFkZXIucmVhZCgpXG5cbiAgLy8gOS4gTGV0IGlzRmlyc3RDaHVuayBiZSB0cnVlLlxuICBsZXQgaXNGaXJzdENodW5rID0gdHJ1ZVxuXG4gIC8vIDEwLiBJbiBwYXJhbGxlbCwgd2hpbGUgdHJ1ZTpcbiAgLy8gTm90ZTogXCJJbiBwYXJhbGxlbFwiIGp1c3QgbWVhbnMgbm9uLWJsb2NraW5nXG4gIC8vIE5vdGUgMjogcmVhZE9wZXJhdGlvbiBpdHNlbGYgY2Fubm90IGJlIGFzeW5jIGFzIGRvdWJsZVxuICAvLyByZWFkaW5nIHRoZSBib2R5IHdvdWxkIHRoZW4gcmVqZWN0IHRoZSBwcm9taXNlLCBpbnN0ZWFkXG4gIC8vIG9mIHRocm93aW5nIGFuIGVycm9yLlxuICA7KGFzeW5jICgpID0+IHtcbiAgICB3aGlsZSAoIWZyW2tBYm9ydGVkXSkge1xuICAgICAgLy8gMS4gV2FpdCBmb3IgY2h1bmtQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZCBvciByZWplY3RlZC5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IGNodW5rUHJvbWlzZVxuXG4gICAgICAgIC8vIDIuIElmIGNodW5rUHJvbWlzZSBpcyBmdWxmaWxsZWQsIGFuZCBpc0ZpcnN0Q2h1bmsgaXNcbiAgICAgICAgLy8gICAgdHJ1ZSwgcXVldWUgYSB0YXNrIHRvIGZpcmUgYSBwcm9ncmVzcyBldmVudCBjYWxsZWRcbiAgICAgICAgLy8gICAgbG9hZHN0YXJ0IGF0IGZyLlxuICAgICAgICBpZiAoaXNGaXJzdENodW5rICYmICFmcltrQWJvcnRlZF0pIHtcbiAgICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgICAgICBmaXJlQVByb2dyZXNzRXZlbnQoJ2xvYWRzdGFydCcsIGZyKVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgICAgICAvLyAzLiBTZXQgaXNGaXJzdENodW5rIHRvIGZhbHNlLlxuICAgICAgICBpc0ZpcnN0Q2h1bmsgPSBmYWxzZVxuXG4gICAgICAgIC8vIDQuIElmIGNodW5rUHJvbWlzZSBpcyBmdWxmaWxsZWQgd2l0aCBhbiBvYmplY3Qgd2hvc2VcbiAgICAgICAgLy8gICAgZG9uZSBwcm9wZXJ0eSBpcyBmYWxzZSBhbmQgd2hvc2UgdmFsdWUgcHJvcGVydHkgaXNcbiAgICAgICAgLy8gICAgYSBVaW50OEFycmF5IG9iamVjdCwgcnVuIHRoZXNlIHN0ZXBzOlxuICAgICAgICBpZiAoIWRvbmUgJiYgdHlwZXMuaXNVaW50OEFycmF5KHZhbHVlKSkge1xuICAgICAgICAgIC8vIDEuIExldCBicyBiZSB0aGUgYnl0ZSBzZXF1ZW5jZSByZXByZXNlbnRlZCBieSB0aGVcbiAgICAgICAgICAvLyAgICBVaW50OEFycmF5IG9iamVjdC5cblxuICAgICAgICAgIC8vIDIuIEFwcGVuZCBicyB0byBieXRlcy5cbiAgICAgICAgICBieXRlcy5wdXNoKHZhbHVlKVxuXG4gICAgICAgICAgLy8gMy4gSWYgcm91Z2hseSA1MG1zIGhhdmUgcGFzc2VkIHNpbmNlIHRoZXNlIHN0ZXBzXG4gICAgICAgICAgLy8gICAgd2VyZSBsYXN0IGludm9rZWQsIHF1ZXVlIGEgdGFzayB0byBmaXJlIGFcbiAgICAgICAgICAvLyAgICBwcm9ncmVzcyBldmVudCBjYWxsZWQgcHJvZ3Jlc3MgYXQgZnIuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgKFxuICAgICAgICAgICAgICBmcltrTGFzdFByb2dyZXNzRXZlbnRGaXJlZF0gPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICBEYXRlLm5vdygpIC0gZnJba0xhc3RQcm9ncmVzc0V2ZW50RmlyZWRdID49IDUwXG4gICAgICAgICAgICApICYmXG4gICAgICAgICAgICAhZnJba0Fib3J0ZWRdXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBmcltrTGFzdFByb2dyZXNzRXZlbnRGaXJlZF0gPSBEYXRlLm5vdygpXG4gICAgICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgICAgICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgncHJvZ3Jlc3MnLCBmcilcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gNC4gU2V0IGNodW5rUHJvbWlzZSB0byB0aGUgcmVzdWx0IG9mIHJlYWRpbmcgYVxuICAgICAgICAgIC8vICAgIGNodW5rIGZyb20gc3RyZWFtIHdpdGggcmVhZGVyLlxuICAgICAgICAgIGNodW5rUHJvbWlzZSA9IHJlYWRlci5yZWFkKClcbiAgICAgICAgfSBlbHNlIGlmIChkb25lKSB7XG4gICAgICAgICAgLy8gNS4gT3RoZXJ3aXNlLCBpZiBjaHVua1Byb21pc2UgaXMgZnVsZmlsbGVkIHdpdGggYW5cbiAgICAgICAgICAvLyAgICBvYmplY3Qgd2hvc2UgZG9uZSBwcm9wZXJ0eSBpcyB0cnVlLCBxdWV1ZSBhIHRhc2tcbiAgICAgICAgICAvLyAgICB0byBydW4gdGhlIGZvbGxvd2luZyBzdGVwcyBhbmQgYWJvcnQgdGhpcyBhbGdvcml0aG06XG4gICAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICAgICAgLy8gMS4gU2V0IGZy4oCZcyBzdGF0ZSB0byBcImRvbmVcIi5cbiAgICAgICAgICAgIGZyW2tTdGF0ZV0gPSAnZG9uZSdcblxuICAgICAgICAgICAgLy8gMi4gTGV0IHJlc3VsdCBiZSB0aGUgcmVzdWx0IG9mIHBhY2thZ2UgZGF0YSBnaXZlblxuICAgICAgICAgICAgLy8gICAgYnl0ZXMsIHR5cGUsIGJsb2LigJlzIHR5cGUsIGFuZCBlbmNvZGluZ05hbWUuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYWNrYWdlRGF0YShieXRlcywgdHlwZSwgYmxvYi50eXBlLCBlbmNvZGluZ05hbWUpXG5cbiAgICAgICAgICAgICAgLy8gNC4gRWxzZTpcblxuICAgICAgICAgICAgICBpZiAoZnJba0Fib3J0ZWRdKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAvLyAxLiBTZXQgZnLigJlzIHJlc3VsdCB0byByZXN1bHQuXG4gICAgICAgICAgICAgIGZyW2tSZXN1bHRdID0gcmVzdWx0XG5cbiAgICAgICAgICAgICAgLy8gMi4gRmlyZSBhIHByb2dyZXNzIGV2ZW50IGNhbGxlZCBsb2FkIGF0IHRoZSBmci5cbiAgICAgICAgICAgICAgZmlyZUFQcm9ncmVzc0V2ZW50KCdsb2FkJywgZnIpXG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAvLyAzLiBJZiBwYWNrYWdlIGRhdGEgdGhyZXcgYW4gZXhjZXB0aW9uIGVycm9yOlxuXG4gICAgICAgICAgICAgIC8vIDEuIFNldCBmcuKAmXMgZXJyb3IgdG8gZXJyb3IuXG4gICAgICAgICAgICAgIGZyW2tFcnJvcl0gPSBlcnJvclxuXG4gICAgICAgICAgICAgIC8vIDIuIEZpcmUgYSBwcm9ncmVzcyBldmVudCBjYWxsZWQgZXJyb3IgYXQgZnIuXG4gICAgICAgICAgICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgnZXJyb3InLCBmcilcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gNS4gSWYgZnLigJlzIHN0YXRlIGlzIG5vdCBcImxvYWRpbmdcIiwgZmlyZSBhIHByb2dyZXNzXG4gICAgICAgICAgICAvLyAgICBldmVudCBjYWxsZWQgbG9hZGVuZCBhdCB0aGUgZnIuXG4gICAgICAgICAgICBpZiAoZnJba1N0YXRlXSAhPT0gJ2xvYWRpbmcnKSB7XG4gICAgICAgICAgICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgnbG9hZGVuZCcsIGZyKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoZnJba0Fib3J0ZWRdKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICAvLyA2LiBPdGhlcndpc2UsIGlmIGNodW5rUHJvbWlzZSBpcyByZWplY3RlZCB3aXRoIGFuXG4gICAgICAgIC8vICAgIGVycm9yIGVycm9yLCBxdWV1ZSBhIHRhc2sgdG8gcnVuIHRoZSBmb2xsb3dpbmdcbiAgICAgICAgLy8gICAgc3RlcHMgYW5kIGFib3J0IHRoaXMgYWxnb3JpdGhtOlxuICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgICAgLy8gMS4gU2V0IGZy4oCZcyBzdGF0ZSB0byBcImRvbmVcIi5cbiAgICAgICAgICBmcltrU3RhdGVdID0gJ2RvbmUnXG5cbiAgICAgICAgICAvLyAyLiBTZXQgZnLigJlzIGVycm9yIHRvIGVycm9yLlxuICAgICAgICAgIGZyW2tFcnJvcl0gPSBlcnJvclxuXG4gICAgICAgICAgLy8gMy4gRmlyZSBhIHByb2dyZXNzIGV2ZW50IGNhbGxlZCBlcnJvciBhdCBmci5cbiAgICAgICAgICBmaXJlQVByb2dyZXNzRXZlbnQoJ2Vycm9yJywgZnIpXG5cbiAgICAgICAgICAvLyA0LiBJZiBmcuKAmXMgc3RhdGUgaXMgbm90IFwibG9hZGluZ1wiLCBmaXJlIGEgcHJvZ3Jlc3NcbiAgICAgICAgICAvLyAgICBldmVudCBjYWxsZWQgbG9hZGVuZCBhdCBmci5cbiAgICAgICAgICBpZiAoZnJba1N0YXRlXSAhPT0gJ2xvYWRpbmcnKSB7XG4gICAgICAgICAgICBmaXJlQVByb2dyZXNzRXZlbnQoJ2xvYWRlbmQnLCBmcilcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG5cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gIH0pKClcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNmaXJlLWEtcHJvZ3Jlc3MtZXZlbnRcbiAqIEBzZWUgaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWV2ZW50LWZpcmVcbiAqIEBwYXJhbSB7c3RyaW5nfSBlIFRoZSBuYW1lIG9mIHRoZSBldmVudFxuICogQHBhcmFtIHtpbXBvcnQoJy4vZmlsZXJlYWRlcicpLkZpbGVSZWFkZXJ9IHJlYWRlclxuICovXG5mdW5jdGlvbiBmaXJlQVByb2dyZXNzRXZlbnQgKGUsIHJlYWRlcikge1xuICAvLyBUaGUgcHJvZ3Jlc3MgZXZlbnQgZSBkb2VzIG5vdCBidWJibGUuIGUuYnViYmxlcyBtdXN0IGJlIGZhbHNlXG4gIC8vIFRoZSBwcm9ncmVzcyBldmVudCBlIGlzIE5PVCBjYW5jZWxhYmxlLiBlLmNhbmNlbGFibGUgbXVzdCBiZSBmYWxzZVxuICBjb25zdCBldmVudCA9IG5ldyBQcm9ncmVzc0V2ZW50KGUsIHtcbiAgICBidWJibGVzOiBmYWxzZSxcbiAgICBjYW5jZWxhYmxlOiBmYWxzZVxuICB9KVxuXG4gIHJlYWRlci5kaXNwYXRjaEV2ZW50KGV2ZW50KVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2Jsb2ItcGFja2FnZS1kYXRhXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXlbXX0gYnl0ZXNcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge3N0cmluZz99IG1pbWVUeXBlXG4gKiBAcGFyYW0ge3N0cmluZz99IGVuY29kaW5nTmFtZVxuICovXG5mdW5jdGlvbiBwYWNrYWdlRGF0YSAoYnl0ZXMsIHR5cGUsIG1pbWVUeXBlLCBlbmNvZGluZ05hbWUpIHtcbiAgLy8gMS4gQSBCbG9iIGhhcyBhbiBhc3NvY2lhdGVkIHBhY2thZ2UgZGF0YSBhbGdvcml0aG0sIGdpdmVuXG4gIC8vICAgIGJ5dGVzLCBhIHR5cGUsIGEgb3B0aW9uYWwgbWltZVR5cGUsIGFuZCBhIG9wdGlvbmFsXG4gIC8vICAgIGVuY29kaW5nTmFtZSwgd2hpY2ggc3dpdGNoZXMgb24gdHlwZSBhbmQgcnVucyB0aGVcbiAgLy8gICAgYXNzb2NpYXRlZCBzdGVwczpcblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdEYXRhVVJMJzoge1xuICAgICAgLy8gMS4gUmV0dXJuIGJ5dGVzIGFzIGEgRGF0YVVSTCBbUkZDMjM5N10gc3ViamVjdCB0b1xuICAgICAgLy8gICAgdGhlIGNvbnNpZGVyYXRpb25zIGJlbG93OlxuICAgICAgLy8gICogVXNlIG1pbWVUeXBlIGFzIHBhcnQgb2YgdGhlIERhdGEgVVJMIGlmIGl0IGlzXG4gICAgICAvLyAgICBhdmFpbGFibGUgaW4ga2VlcGluZyB3aXRoIHRoZSBEYXRhIFVSTFxuICAgICAgLy8gICAgc3BlY2lmaWNhdGlvbiBbUkZDMjM5N10uXG4gICAgICAvLyAgKiBJZiBtaW1lVHlwZSBpcyBub3QgYXZhaWxhYmxlIHJldHVybiBhIERhdGEgVVJMXG4gICAgICAvLyAgICB3aXRob3V0IGEgbWVkaWEtdHlwZS4gW1JGQzIzOTddLlxuXG4gICAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzIzOTcjc2VjdGlvbi0zXG4gICAgICAvLyBkYXRhdXJsICAgIDo9IFwiZGF0YTpcIiBbIG1lZGlhdHlwZSBdIFsgXCI7YmFzZTY0XCIgXSBcIixcIiBkYXRhXG4gICAgICAvLyBtZWRpYXR5cGUgIDo9IFsgdHlwZSBcIi9cIiBzdWJ0eXBlIF0gKiggXCI7XCIgcGFyYW1ldGVyIClcbiAgICAgIC8vIGRhdGEgICAgICAgOj0gKnVybGNoYXJcbiAgICAgIC8vIHBhcmFtZXRlciAgOj0gYXR0cmlidXRlIFwiPVwiIHZhbHVlXG4gICAgICBsZXQgZGF0YVVSTCA9ICdkYXRhOidcblxuICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VNSU1FVHlwZShtaW1lVHlwZSB8fCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJylcblxuICAgICAgaWYgKHBhcnNlZCAhPT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgIGRhdGFVUkwgKz0gc2VyaWFsaXplQU1pbWVUeXBlKHBhcnNlZClcbiAgICAgIH1cblxuICAgICAgZGF0YVVSTCArPSAnO2Jhc2U2NCwnXG5cbiAgICAgIGNvbnN0IGRlY29kZXIgPSBuZXcgU3RyaW5nRGVjb2RlcignbGF0aW4xJylcblxuICAgICAgZm9yIChjb25zdCBjaHVuayBvZiBieXRlcykge1xuICAgICAgICBkYXRhVVJMICs9IGJ0b2EoZGVjb2Rlci53cml0ZShjaHVuaykpXG4gICAgICB9XG5cbiAgICAgIGRhdGFVUkwgKz0gYnRvYShkZWNvZGVyLmVuZCgpKVxuXG4gICAgICByZXR1cm4gZGF0YVVSTFxuICAgIH1cbiAgICBjYXNlICdUZXh0Jzoge1xuICAgICAgLy8gMS4gTGV0IGVuY29kaW5nIGJlIGZhaWx1cmVcbiAgICAgIGxldCBlbmNvZGluZyA9ICdmYWlsdXJlJ1xuXG4gICAgICAvLyAyLiBJZiB0aGUgZW5jb2RpbmdOYW1lIGlzIHByZXNlbnQsIHNldCBlbmNvZGluZyB0byB0aGVcbiAgICAgIC8vICAgIHJlc3VsdCBvZiBnZXR0aW5nIGFuIGVuY29kaW5nIGZyb20gZW5jb2RpbmdOYW1lLlxuICAgICAgaWYgKGVuY29kaW5nTmFtZSkge1xuICAgICAgICBlbmNvZGluZyA9IGdldEVuY29kaW5nKGVuY29kaW5nTmFtZSlcbiAgICAgIH1cblxuICAgICAgLy8gMy4gSWYgZW5jb2RpbmcgaXMgZmFpbHVyZSwgYW5kIG1pbWVUeXBlIGlzIHByZXNlbnQ6XG4gICAgICBpZiAoZW5jb2RpbmcgPT09ICdmYWlsdXJlJyAmJiBtaW1lVHlwZSkge1xuICAgICAgICAvLyAxLiBMZXQgdHlwZSBiZSB0aGUgcmVzdWx0IG9mIHBhcnNlIGEgTUlNRSB0eXBlXG4gICAgICAgIC8vICAgIGdpdmVuIG1pbWVUeXBlLlxuICAgICAgICBjb25zdCB0eXBlID0gcGFyc2VNSU1FVHlwZShtaW1lVHlwZSlcblxuICAgICAgICAvLyAyLiBJZiB0eXBlIGlzIG5vdCBmYWlsdXJlLCBzZXQgZW5jb2RpbmcgdG8gdGhlIHJlc3VsdFxuICAgICAgICAvLyAgICBvZiBnZXR0aW5nIGFuIGVuY29kaW5nIGZyb20gdHlwZeKAmXMgcGFyYW1ldGVyc1tcImNoYXJzZXRcIl0uXG4gICAgICAgIGlmICh0eXBlICE9PSAnZmFpbHVyZScpIHtcbiAgICAgICAgICBlbmNvZGluZyA9IGdldEVuY29kaW5nKHR5cGUucGFyYW1ldGVycy5nZXQoJ2NoYXJzZXQnKSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyA0LiBJZiBlbmNvZGluZyBpcyBmYWlsdXJlLCB0aGVuIHNldCBlbmNvZGluZyB0byBVVEYtOC5cbiAgICAgIGlmIChlbmNvZGluZyA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgIGVuY29kaW5nID0gJ1VURi04J1xuICAgICAgfVxuXG4gICAgICAvLyA1LiBEZWNvZGUgYnl0ZXMgdXNpbmcgZmFsbGJhY2sgZW5jb2RpbmcgZW5jb2RpbmcsIGFuZFxuICAgICAgLy8gICAgcmV0dXJuIHRoZSByZXN1bHQuXG4gICAgICByZXR1cm4gZGVjb2RlKGJ5dGVzLCBlbmNvZGluZylcbiAgICB9XG4gICAgY2FzZSAnQXJyYXlCdWZmZXInOiB7XG4gICAgICAvLyBSZXR1cm4gYSBuZXcgQXJyYXlCdWZmZXIgd2hvc2UgY29udGVudHMgYXJlIGJ5dGVzLlxuICAgICAgY29uc3Qgc2VxdWVuY2UgPSBjb21iaW5lQnl0ZVNlcXVlbmNlcyhieXRlcylcblxuICAgICAgcmV0dXJuIHNlcXVlbmNlLmJ1ZmZlclxuICAgIH1cbiAgICBjYXNlICdCaW5hcnlTdHJpbmcnOiB7XG4gICAgICAvLyBSZXR1cm4gYnl0ZXMgYXMgYSBiaW5hcnkgc3RyaW5nLCBpbiB3aGljaCBldmVyeSBieXRlXG4gICAgICAvLyAgaXMgcmVwcmVzZW50ZWQgYnkgYSBjb2RlIHVuaXQgb2YgZXF1YWwgdmFsdWUgWzAuLjI1NV0uXG4gICAgICBsZXQgYmluYXJ5U3RyaW5nID0gJydcblxuICAgICAgY29uc3QgZGVjb2RlciA9IG5ldyBTdHJpbmdEZWNvZGVyKCdsYXRpbjEnKVxuXG4gICAgICBmb3IgKGNvbnN0IGNodW5rIG9mIGJ5dGVzKSB7XG4gICAgICAgIGJpbmFyeVN0cmluZyArPSBkZWNvZGVyLndyaXRlKGNodW5rKVxuICAgICAgfVxuXG4gICAgICBiaW5hcnlTdHJpbmcgKz0gZGVjb2Rlci5lbmQoKVxuXG4gICAgICByZXR1cm4gYmluYXJ5U3RyaW5nXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy8jZGVjb2RlXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXlbXX0gaW9RdWV1ZVxuICogQHBhcmFtIHtzdHJpbmd9IGVuY29kaW5nXG4gKi9cbmZ1bmN0aW9uIGRlY29kZSAoaW9RdWV1ZSwgZW5jb2RpbmcpIHtcbiAgY29uc3QgYnl0ZXMgPSBjb21iaW5lQnl0ZVNlcXVlbmNlcyhpb1F1ZXVlKVxuXG4gIC8vIDEuIExldCBCT01FbmNvZGluZyBiZSB0aGUgcmVzdWx0IG9mIEJPTSBzbmlmZmluZyBpb1F1ZXVlLlxuICBjb25zdCBCT01FbmNvZGluZyA9IEJPTVNuaWZmaW5nKGJ5dGVzKVxuXG4gIGxldCBzbGljZSA9IDBcblxuICAvLyAyLiBJZiBCT01FbmNvZGluZyBpcyBub24tbnVsbDpcbiAgaWYgKEJPTUVuY29kaW5nICE9PSBudWxsKSB7XG4gICAgLy8gMS4gU2V0IGVuY29kaW5nIHRvIEJPTUVuY29kaW5nLlxuICAgIGVuY29kaW5nID0gQk9NRW5jb2RpbmdcblxuICAgIC8vIDIuIFJlYWQgdGhyZWUgYnl0ZXMgZnJvbSBpb1F1ZXVlLCBpZiBCT01FbmNvZGluZyBpc1xuICAgIC8vICAgIFVURi04OyBvdGhlcndpc2UgcmVhZCB0d28gYnl0ZXMuXG4gICAgLy8gICAgKERvIG5vdGhpbmcgd2l0aCB0aG9zZSBieXRlcy4pXG4gICAgc2xpY2UgPSBCT01FbmNvZGluZyA9PT0gJ1VURi04JyA/IDMgOiAyXG4gIH1cblxuICAvLyAzLiBQcm9jZXNzIGEgcXVldWUgd2l0aCBhbiBpbnN0YW5jZSBvZiBlbmNvZGluZ+KAmXNcbiAgLy8gICAgZGVjb2RlciwgaW9RdWV1ZSwgb3V0cHV0LCBhbmQgXCJyZXBsYWNlbWVudFwiLlxuXG4gIC8vIDQuIFJldHVybiBvdXRwdXQuXG5cbiAgY29uc3Qgc2xpY2VkID0gYnl0ZXMuc2xpY2Uoc2xpY2UpXG4gIHJldHVybiBuZXcgVGV4dERlY29kZXIoZW5jb2RpbmcpLmRlY29kZShzbGljZWQpXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy8jYm9tLXNuaWZmXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGlvUXVldWVcbiAqL1xuZnVuY3Rpb24gQk9NU25pZmZpbmcgKGlvUXVldWUpIHtcbiAgLy8gMS4gTGV0IEJPTSBiZSB0aGUgcmVzdWx0IG9mIHBlZWtpbmcgMyBieXRlcyBmcm9tIGlvUXVldWUsXG4gIC8vICAgIGNvbnZlcnRlZCB0byBhIGJ5dGUgc2VxdWVuY2UuXG4gIGNvbnN0IFthLCBiLCBjXSA9IGlvUXVldWVcblxuICAvLyAyLiBGb3IgZWFjaCBvZiB0aGUgcm93cyBpbiB0aGUgdGFibGUgYmVsb3csIHN0YXJ0aW5nIHdpdGhcbiAgLy8gICAgdGhlIGZpcnN0IG9uZSBhbmQgZ29pbmcgZG93biwgaWYgQk9NIHN0YXJ0cyB3aXRoIHRoZVxuICAvLyAgICBieXRlcyBnaXZlbiBpbiB0aGUgZmlyc3QgY29sdW1uLCB0aGVuIHJldHVybiB0aGVcbiAgLy8gICAgZW5jb2RpbmcgZ2l2ZW4gaW4gdGhlIGNlbGwgaW4gdGhlIHNlY29uZCBjb2x1bW4gb2YgdGhhdFxuICAvLyAgICByb3cuIE90aGVyd2lzZSwgcmV0dXJuIG51bGwuXG4gIGlmIChhID09PSAweEVGICYmIGIgPT09IDB4QkIgJiYgYyA9PT0gMHhCRikge1xuICAgIHJldHVybiAnVVRGLTgnXG4gIH0gZWxzZSBpZiAoYSA9PT0gMHhGRSAmJiBiID09PSAweEZGKSB7XG4gICAgcmV0dXJuICdVVEYtMTZCRSdcbiAgfSBlbHNlIGlmIChhID09PSAweEZGICYmIGIgPT09IDB4RkUpIHtcbiAgICByZXR1cm4gJ1VURi0xNkxFJ1xuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXlbXX0gc2VxdWVuY2VzXG4gKi9cbmZ1bmN0aW9uIGNvbWJpbmVCeXRlU2VxdWVuY2VzIChzZXF1ZW5jZXMpIHtcbiAgY29uc3Qgc2l6ZSA9IHNlcXVlbmNlcy5yZWR1Y2UoKGEsIGIpID0+IHtcbiAgICByZXR1cm4gYSArIGIuYnl0ZUxlbmd0aFxuICB9LCAwKVxuXG4gIGxldCBvZmZzZXQgPSAwXG5cbiAgcmV0dXJuIHNlcXVlbmNlcy5yZWR1Y2UoKGEsIGIpID0+IHtcbiAgICBhLnNldChiLCBvZmZzZXQpXG4gICAgb2Zmc2V0ICs9IGIuYnl0ZUxlbmd0aFxuICAgIHJldHVybiBhXG4gIH0sIG5ldyBVaW50OEFycmF5KHNpemUpKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgcmVhZE9wZXJhdGlvbixcbiAgZmlyZUFQcm9ncmVzc0V2ZW50XG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIHJlYWRPcGVyYXRpb24sXG4gIGZpcmVBUHJvZ3Jlc3NFdmVudFxufSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7XG4gIGtTdGF0ZSxcbiAga0Vycm9yLFxuICBrUmVzdWx0LFxuICBrRXZlbnRzLFxuICBrQWJvcnRlZFxufSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvd2ViaWRsJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcblxuY2xhc3MgRmlsZVJlYWRlciBleHRlbmRzIEV2ZW50VGFyZ2V0IHtcbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXNba1N0YXRlXSA9ICdlbXB0eSdcbiAgICB0aGlzW2tSZXN1bHRdID0gbnVsbFxuICAgIHRoaXNba0Vycm9yXSA9IG51bGxcbiAgICB0aGlzW2tFdmVudHNdID0ge1xuICAgICAgbG9hZGVuZDogbnVsbCxcbiAgICAgIGVycm9yOiBudWxsLFxuICAgICAgYWJvcnQ6IG51bGwsXG4gICAgICBsb2FkOiBudWxsLFxuICAgICAgcHJvZ3Jlc3M6IG51bGwsXG4gICAgICBsb2Fkc3RhcnQ6IG51bGxcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZGZuLXJlYWRBc0FycmF5QnVmZmVyXG4gICAqIEBwYXJhbSB7aW1wb3J0KCdidWZmZXInKS5CbG9ifSBibG9iXG4gICAqL1xuICByZWFkQXNBcnJheUJ1ZmZlciAoYmxvYikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRmlsZVJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcicgfSlcblxuICAgIGJsb2IgPSB3ZWJpZGwuY29udmVydGVycy5CbG9iKGJsb2IsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gICAgLy8gVGhlIHJlYWRBc0FycmF5QnVmZmVyKGJsb2IpIG1ldGhvZCwgd2hlbiBpbnZva2VkLFxuICAgIC8vIG11c3QgaW5pdGlhdGUgYSByZWFkIG9wZXJhdGlvbiBmb3IgYmxvYiB3aXRoIEFycmF5QnVmZmVyLlxuICAgIHJlYWRPcGVyYXRpb24odGhpcywgYmxvYiwgJ0FycmF5QnVmZmVyJylcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNyZWFkQXNCaW5hcnlTdHJpbmdcbiAgICogQHBhcmFtIHtpbXBvcnQoJ2J1ZmZlcicpLkJsb2J9IGJsb2JcbiAgICovXG4gIHJlYWRBc0JpbmFyeVN0cmluZyAoYmxvYikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRmlsZVJlYWRlci5yZWFkQXNCaW5hcnlTdHJpbmcnIH0pXG5cbiAgICBibG9iID0gd2ViaWRsLmNvbnZlcnRlcnMuQmxvYihibG9iLCB7IHN0cmljdDogZmFsc2UgfSlcblxuICAgIC8vIFRoZSByZWFkQXNCaW5hcnlTdHJpbmcoYmxvYikgbWV0aG9kLCB3aGVuIGludm9rZWQsXG4gICAgLy8gbXVzdCBpbml0aWF0ZSBhIHJlYWQgb3BlcmF0aW9uIGZvciBibG9iIHdpdGggQmluYXJ5U3RyaW5nLlxuICAgIHJlYWRPcGVyYXRpb24odGhpcywgYmxvYiwgJ0JpbmFyeVN0cmluZycpXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jcmVhZEFzRGF0YVRleHRcbiAgICogQHBhcmFtIHtpbXBvcnQoJ2J1ZmZlcicpLkJsb2J9IGJsb2JcbiAgICogQHBhcmFtIHtzdHJpbmc/fSBlbmNvZGluZ1xuICAgKi9cbiAgcmVhZEFzVGV4dCAoYmxvYiwgZW5jb2RpbmcgPSB1bmRlZmluZWQpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0ZpbGVSZWFkZXIucmVhZEFzVGV4dCcgfSlcblxuICAgIGJsb2IgPSB3ZWJpZGwuY29udmVydGVycy5CbG9iKGJsb2IsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gICAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGVuY29kaW5nID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKGVuY29kaW5nKVxuICAgIH1cblxuICAgIC8vIFRoZSByZWFkQXNUZXh0KGJsb2IsIGVuY29kaW5nKSBtZXRob2QsIHdoZW4gaW52b2tlZCxcbiAgICAvLyBtdXN0IGluaXRpYXRlIGEgcmVhZCBvcGVyYXRpb24gZm9yIGJsb2Igd2l0aCBUZXh0IGFuZCBlbmNvZGluZy5cbiAgICByZWFkT3BlcmF0aW9uKHRoaXMsIGJsb2IsICdUZXh0JywgZW5jb2RpbmcpXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZGZuLXJlYWRBc0RhdGFVUkxcbiAgICogQHBhcmFtIHtpbXBvcnQoJ2J1ZmZlcicpLkJsb2J9IGJsb2JcbiAgICovXG4gIHJlYWRBc0RhdGFVUkwgKGJsb2IpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0ZpbGVSZWFkZXIucmVhZEFzRGF0YVVSTCcgfSlcblxuICAgIGJsb2IgPSB3ZWJpZGwuY29udmVydGVycy5CbG9iKGJsb2IsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gICAgLy8gVGhlIHJlYWRBc0RhdGFVUkwoYmxvYikgbWV0aG9kLCB3aGVuIGludm9rZWQsIG11c3RcbiAgICAvLyBpbml0aWF0ZSBhIHJlYWQgb3BlcmF0aW9uIGZvciBibG9iIHdpdGggRGF0YVVSTC5cbiAgICByZWFkT3BlcmF0aW9uKHRoaXMsIGJsb2IsICdEYXRhVVJMJylcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNkZm4tYWJvcnRcbiAgICovXG4gIGFib3J0ICgpIHtcbiAgICAvLyAxLiBJZiB0aGlzJ3Mgc3RhdGUgaXMgXCJlbXB0eVwiIG9yIGlmIHRoaXMncyBzdGF0ZSBpc1xuICAgIC8vICAgIFwiZG9uZVwiIHNldCB0aGlzJ3MgcmVzdWx0IHRvIG51bGwgYW5kIHRlcm1pbmF0ZVxuICAgIC8vICAgIHRoaXMgYWxnb3JpdGhtLlxuICAgIGlmICh0aGlzW2tTdGF0ZV0gPT09ICdlbXB0eScgfHwgdGhpc1trU3RhdGVdID09PSAnZG9uZScpIHtcbiAgICAgIHRoaXNba1Jlc3VsdF0gPSBudWxsXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyAyLiBJZiB0aGlzJ3Mgc3RhdGUgaXMgXCJsb2FkaW5nXCIgc2V0IHRoaXMncyBzdGF0ZSB0b1xuICAgIC8vICAgIFwiZG9uZVwiIGFuZCBzZXQgdGhpcydzIHJlc3VsdCB0byBudWxsLlxuICAgIGlmICh0aGlzW2tTdGF0ZV0gPT09ICdsb2FkaW5nJykge1xuICAgICAgdGhpc1trU3RhdGVdID0gJ2RvbmUnXG4gICAgICB0aGlzW2tSZXN1bHRdID0gbnVsbFxuICAgIH1cblxuICAgIC8vIDMuIElmIHRoZXJlIGFyZSBhbnkgdGFza3MgZnJvbSB0aGlzIG9uIHRoZSBmaWxlIHJlYWRpbmdcbiAgICAvLyAgICB0YXNrIHNvdXJjZSBpbiBhbiBhZmZpbGlhdGVkIHRhc2sgcXVldWUsIHRoZW4gcmVtb3ZlXG4gICAgLy8gICAgdGhvc2UgdGFza3MgZnJvbSB0aGF0IHRhc2sgcXVldWUuXG4gICAgdGhpc1trQWJvcnRlZF0gPSB0cnVlXG5cbiAgICAvLyA0LiBUZXJtaW5hdGUgdGhlIGFsZ29yaXRobSBmb3IgdGhlIHJlYWQgbWV0aG9kIGJlaW5nIHByb2Nlc3NlZC5cbiAgICAvLyBUT0RPXG5cbiAgICAvLyA1LiBGaXJlIGEgcHJvZ3Jlc3MgZXZlbnQgY2FsbGVkIGFib3J0IGF0IHRoaXMuXG4gICAgZmlyZUFQcm9ncmVzc0V2ZW50KCdhYm9ydCcsIHRoaXMpXG5cbiAgICAvLyA2LiBJZiB0aGlzJ3Mgc3RhdGUgaXMgbm90IFwibG9hZGluZ1wiLCBmaXJlIGEgcHJvZ3Jlc3NcbiAgICAvLyAgICBldmVudCBjYWxsZWQgbG9hZGVuZCBhdCB0aGlzLlxuICAgIGlmICh0aGlzW2tTdGF0ZV0gIT09ICdsb2FkaW5nJykge1xuICAgICAgZmlyZUFQcm9ncmVzc0V2ZW50KCdsb2FkZW5kJywgdGhpcylcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZG9tLWZpbGVyZWFkZXItcmVhZHlzdGF0ZVxuICAgKi9cbiAgZ2V0IHJlYWR5U3RhdGUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICBzd2l0Y2ggKHRoaXNba1N0YXRlXSkge1xuICAgICAgY2FzZSAnZW1wdHknOiByZXR1cm4gdGhpcy5FTVBUWVxuICAgICAgY2FzZSAnbG9hZGluZyc6IHJldHVybiB0aGlzLkxPQURJTkdcbiAgICAgIGNhc2UgJ2RvbmUnOiByZXR1cm4gdGhpcy5ET05FXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2RvbS1maWxlcmVhZGVyLXJlc3VsdFxuICAgKi9cbiAgZ2V0IHJlc3VsdCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIC8vIFRoZSByZXN1bHQgYXR0cmlidXRl4oCZcyBnZXR0ZXIsIHdoZW4gaW52b2tlZCwgbXVzdCByZXR1cm5cbiAgICAvLyB0aGlzJ3MgcmVzdWx0LlxuICAgIHJldHVybiB0aGlzW2tSZXN1bHRdXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZG9tLWZpbGVyZWFkZXItZXJyb3JcbiAgICovXG4gIGdldCBlcnJvciAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIC8vIFRoZSBlcnJvciBhdHRyaWJ1dGXigJlzIGdldHRlciwgd2hlbiBpbnZva2VkLCBtdXN0IHJldHVyblxuICAgIC8vIHRoaXMncyBlcnJvci5cbiAgICByZXR1cm4gdGhpc1trRXJyb3JdXG4gIH1cblxuICBnZXQgb25sb2FkZW5kICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgcmV0dXJuIHRoaXNba0V2ZW50c10ubG9hZGVuZFxuICB9XG5cbiAgc2V0IG9ubG9hZGVuZCAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgaWYgKHRoaXNba0V2ZW50c10ubG9hZGVuZCkge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkZW5kJywgdGhpc1trRXZlbnRzXS5sb2FkZW5kKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXNba0V2ZW50c10ubG9hZGVuZCA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlbmQnLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trRXZlbnRzXS5sb2FkZW5kID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBvbmVycm9yICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgcmV0dXJuIHRoaXNba0V2ZW50c10uZXJyb3JcbiAgfVxuXG4gIHNldCBvbmVycm9yIChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICBpZiAodGhpc1trRXZlbnRzXS5lcnJvcikge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXNba0V2ZW50c10uZXJyb3IpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpc1trRXZlbnRzXS5lcnJvciA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgZm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNba0V2ZW50c10uZXJyb3IgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgZ2V0IG9ubG9hZHN0YXJ0ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgcmV0dXJuIHRoaXNba0V2ZW50c10ubG9hZHN0YXJ0XG4gIH1cblxuICBzZXQgb25sb2Fkc3RhcnQgKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIGlmICh0aGlzW2tFdmVudHNdLmxvYWRzdGFydCkge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2Fkc3RhcnQnLCB0aGlzW2tFdmVudHNdLmxvYWRzdGFydClcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmxvYWRzdGFydCA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRzdGFydCcsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmxvYWRzdGFydCA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgb25wcm9ncmVzcyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIHJldHVybiB0aGlzW2tFdmVudHNdLnByb2dyZXNzXG4gIH1cblxuICBzZXQgb25wcm9ncmVzcyAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgaWYgKHRoaXNba0V2ZW50c10ucHJvZ3Jlc3MpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzW2tFdmVudHNdLnByb2dyZXNzKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXNba0V2ZW50c10ucHJvZ3Jlc3MgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tFdmVudHNdLnByb2dyZXNzID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBvbmxvYWQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICByZXR1cm4gdGhpc1trRXZlbnRzXS5sb2FkXG4gIH1cblxuICBzZXQgb25sb2FkIChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICBpZiAodGhpc1trRXZlbnRzXS5sb2FkKSB7XG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzW2tFdmVudHNdLmxvYWQpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpc1trRXZlbnRzXS5sb2FkID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmxvYWQgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgZ2V0IG9uYWJvcnQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICByZXR1cm4gdGhpc1trRXZlbnRzXS5hYm9ydFxuICB9XG5cbiAgc2V0IG9uYWJvcnQgKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIGlmICh0aGlzW2tFdmVudHNdLmFib3J0KSB7XG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgdGhpc1trRXZlbnRzXS5hYm9ydClcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmFib3J0ID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trRXZlbnRzXS5hYm9ydCA9IG51bGxcbiAgICB9XG4gIH1cbn1cblxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2RvbS1maWxlcmVhZGVyLWVtcHR5XG5GaWxlUmVhZGVyLkVNUFRZID0gRmlsZVJlYWRlci5wcm90b3R5cGUuRU1QVFkgPSAwXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZG9tLWZpbGVyZWFkZXItbG9hZGluZ1xuRmlsZVJlYWRlci5MT0FESU5HID0gRmlsZVJlYWRlci5wcm90b3R5cGUuTE9BRElORyA9IDFcbi8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNkb20tZmlsZXJlYWRlci1kb25lXG5GaWxlUmVhZGVyLkRPTkUgPSBGaWxlUmVhZGVyLnByb3RvdHlwZS5ET05FID0gMlxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhGaWxlUmVhZGVyLnByb3RvdHlwZSwge1xuICBFTVBUWTogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgTE9BRElORzogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgRE9ORTogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgcmVhZEFzQXJyYXlCdWZmZXI6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlYWRBc0JpbmFyeVN0cmluZzoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcmVhZEFzVGV4dDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcmVhZEFzRGF0YVVSTDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYWJvcnQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlYWR5U3RhdGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlc3VsdDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZXJyb3I6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9ubG9hZHN0YXJ0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbnByb2dyZXNzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbmxvYWQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9uYWJvcnQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9uZXJyb3I6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9ubG9hZGVuZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0ZpbGVSZWFkZXInLFxuICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfVxufSlcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRmlsZVJlYWRlciwge1xuICBFTVBUWTogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgTE9BRElORzogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgRE9ORTogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9yc1xufSlcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEZpbGVSZWFkZXJcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBrQ29uc3RydWN0OiByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKS5rQ29uc3RydWN0XG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBVUkxTZXJpYWxpemVyIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9kYXRhVVJMJylcbmNvbnN0IHsgaXNWYWxpZEhlYWRlck5hbWUgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3V0aWwnKVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LXVybC1lcXVhbHNcbiAqIEBwYXJhbSB7VVJMfSBBXG4gKiBAcGFyYW0ge1VSTH0gQlxuICogQHBhcmFtIHtib29sZWFuIHwgdW5kZWZpbmVkfSBleGNsdWRlRnJhZ21lbnRcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiB1cmxFcXVhbHMgKEEsIEIsIGV4Y2x1ZGVGcmFnbWVudCA9IGZhbHNlKSB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRBID0gVVJMU2VyaWFsaXplcihBLCBleGNsdWRlRnJhZ21lbnQpXG5cbiAgY29uc3Qgc2VyaWFsaXplZEIgPSBVUkxTZXJpYWxpemVyKEIsIGV4Y2x1ZGVGcmFnbWVudClcblxuICByZXR1cm4gc2VyaWFsaXplZEEgPT09IHNlcmlhbGl6ZWRCXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vY2hyb21pdW0vY2hyb21pdW0vYmxvYi82OTRkMjBkMTM0Y2I1NTNkOGQ4OWU1NTAwYjkxNDgwMTJiMWJhMjk5L2NvbnRlbnQvYnJvd3Nlci9jYWNoZV9zdG9yYWdlL2NhY2hlX3N0b3JhZ2VfY2FjaGUuY2MjTDI2MC1MMjYyXG4gKiBAcGFyYW0ge3N0cmluZ30gaGVhZGVyXG4gKi9cbmZ1bmN0aW9uIGZpZWxkVmFsdWVzIChoZWFkZXIpIHtcbiAgYXNzZXJ0KGhlYWRlciAhPT0gbnVsbClcblxuICBjb25zdCB2YWx1ZXMgPSBbXVxuXG4gIGZvciAobGV0IHZhbHVlIG9mIGhlYWRlci5zcGxpdCgnLCcpKSB7XG4gICAgdmFsdWUgPSB2YWx1ZS50cmltKClcblxuICAgIGlmICghdmFsdWUubGVuZ3RoKSB7XG4gICAgICBjb250aW51ZVxuICAgIH0gZWxzZSBpZiAoIWlzVmFsaWRIZWFkZXJOYW1lKHZhbHVlKSkge1xuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICB2YWx1ZXMucHVzaCh2YWx1ZSlcbiAgfVxuXG4gIHJldHVybiB2YWx1ZXNcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHVybEVxdWFscyxcbiAgZmllbGRWYWx1ZXNcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsga0NvbnN0cnVjdCB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgdXJsRXF1YWxzLCBmaWVsZFZhbHVlczogZ2V0RmllbGRWYWx1ZXMgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IGtFbnVtZXJhYmxlUHJvcGVydHksIGlzRGlzdHVyYmVkIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBrSGVhZGVyc0xpc3QgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvd2ViaWRsJylcbmNvbnN0IHsgUmVzcG9uc2UsIGNsb25lUmVzcG9uc2UgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3Jlc3BvbnNlJylcbmNvbnN0IHsgUmVxdWVzdCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvcmVxdWVzdCcpXG5jb25zdCB7IGtTdGF0ZSwga0hlYWRlcnMsIGtHdWFyZCwga1JlYWxtIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9zeW1ib2xzJylcbmNvbnN0IHsgZmV0Y2hpbmcgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2luZGV4JylcbmNvbnN0IHsgdXJsSXNIdHRwSHR0cHNTY2hlbWUsIGNyZWF0ZURlZmVycmVkUHJvbWlzZSwgcmVhZEFsbEJ5dGVzIH0gPSByZXF1aXJlKCcuLi9mZXRjaC91dGlsJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7IGdldEdsb2JhbERpc3BhdGNoZXIgfSA9IHJlcXVpcmUoJy4uL2dsb2JhbCcpXG5cbi8qKlxuICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jZGZuLWNhY2hlLWJhdGNoLW9wZXJhdGlvblxuICogQHR5cGVkZWYge09iamVjdH0gQ2FjaGVCYXRjaE9wZXJhdGlvblxuICogQHByb3BlcnR5IHsnZGVsZXRlJyB8ICdwdXQnfSB0eXBlXG4gKiBAcHJvcGVydHkge2FueX0gcmVxdWVzdFxuICogQHByb3BlcnR5IHthbnl9IHJlc3BvbnNlXG4gKiBAcHJvcGVydHkge2ltcG9ydCgnLi4vLi4vdHlwZXMvY2FjaGUnKS5DYWNoZVF1ZXJ5T3B0aW9uc30gb3B0aW9uc1xuICovXG5cbi8qKlxuICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jZGZuLXJlcXVlc3QtcmVzcG9uc2UtbGlzdFxuICogQHR5cGVkZWYge1thbnksIGFueV1bXX0gcmVxdWVzdFJlc3BvbnNlTGlzdFxuICovXG5cbmNsYXNzIENhY2hlIHtcbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2Rmbi1yZWxldmFudC1yZXF1ZXN0LXJlc3BvbnNlLWxpc3RcbiAgICogQHR5cGUge3JlcXVlc3RSZXNwb25zZUxpc3R9XG4gICAqL1xuICAjcmVsZXZhbnRSZXF1ZXN0UmVzcG9uc2VMaXN0XG5cbiAgY29uc3RydWN0b3IgKCkge1xuICAgIGlmIChhcmd1bWVudHNbMF0gIT09IGtDb25zdHJ1Y3QpIHtcbiAgICAgIHdlYmlkbC5pbGxlZ2FsQ29uc3RydWN0b3IoKVxuICAgIH1cblxuICAgIHRoaXMuI3JlbGV2YW50UmVxdWVzdFJlc3BvbnNlTGlzdCA9IGFyZ3VtZW50c1sxXVxuICB9XG5cbiAgYXN5bmMgbWF0Y2ggKHJlcXVlc3QsIG9wdGlvbnMgPSB7fSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlKVxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdDYWNoZS5tYXRjaCcgfSlcblxuICAgIHJlcXVlc3QgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mbyhyZXF1ZXN0KVxuICAgIG9wdGlvbnMgPSB3ZWJpZGwuY29udmVydGVycy5DYWNoZVF1ZXJ5T3B0aW9ucyhvcHRpb25zKVxuXG4gICAgY29uc3QgcCA9IGF3YWl0IHRoaXMubWF0Y2hBbGwocmVxdWVzdCwgb3B0aW9ucylcblxuICAgIGlmIChwLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgcmV0dXJuIHBbMF1cbiAgfVxuXG4gIGFzeW5jIG1hdGNoQWxsIChyZXF1ZXN0ID0gdW5kZWZpbmVkLCBvcHRpb25zID0ge30pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZSlcblxuICAgIGlmIChyZXF1ZXN0ICE9PSB1bmRlZmluZWQpIHJlcXVlc3QgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mbyhyZXF1ZXN0KVxuICAgIG9wdGlvbnMgPSB3ZWJpZGwuY29udmVydGVycy5DYWNoZVF1ZXJ5T3B0aW9ucyhvcHRpb25zKVxuXG4gICAgLy8gMS5cbiAgICBsZXQgciA9IG51bGxcblxuICAgIC8vIDIuXG4gICAgaWYgKHJlcXVlc3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHJlcXVlc3QgaW5zdGFuY2VvZiBSZXF1ZXN0KSB7XG4gICAgICAgIC8vIDIuMS4xXG4gICAgICAgIHIgPSByZXF1ZXN0W2tTdGF0ZV1cblxuICAgICAgICAvLyAyLjEuMlxuICAgICAgICBpZiAoci5tZXRob2QgIT09ICdHRVQnICYmICFvcHRpb25zLmlnbm9yZU1ldGhvZCkge1xuICAgICAgICAgIHJldHVybiBbXVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiByZXF1ZXN0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAvLyAyLjIuMVxuICAgICAgICByID0gbmV3IFJlcXVlc3QocmVxdWVzdClba1N0YXRlXVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDUuXG4gICAgLy8gNS4xXG4gICAgY29uc3QgcmVzcG9uc2VzID0gW11cblxuICAgIC8vIDUuMlxuICAgIGlmIChyZXF1ZXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIDUuMi4xXG4gICAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiB0aGlzLiNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3QpIHtcbiAgICAgICAgcmVzcG9uc2VzLnB1c2gocmVxdWVzdFJlc3BvbnNlWzFdKVxuICAgICAgfVxuICAgIH0gZWxzZSB7IC8vIDUuM1xuICAgICAgLy8gNS4zLjFcbiAgICAgIGNvbnN0IHJlcXVlc3RSZXNwb25zZXMgPSB0aGlzLiNxdWVyeUNhY2hlKHIsIG9wdGlvbnMpXG5cbiAgICAgIC8vIDUuMy4yXG4gICAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiByZXF1ZXN0UmVzcG9uc2VzKSB7XG4gICAgICAgIHJlc3BvbnNlcy5wdXNoKHJlcXVlc3RSZXNwb25zZVsxXSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA1LjRcbiAgICAvLyBXZSBkb24ndCBpbXBsZW1lbnQgQ09ScyBzbyB3ZSBkb24ndCBuZWVkIHRvIGxvb3Agb3ZlciB0aGUgcmVzcG9uc2VzLCB5YXkhXG5cbiAgICAvLyA1LjUuMVxuICAgIGNvbnN0IHJlc3BvbnNlTGlzdCA9IFtdXG5cbiAgICAvLyA1LjUuMlxuICAgIGZvciAoY29uc3QgcmVzcG9uc2Ugb2YgcmVzcG9uc2VzKSB7XG4gICAgICAvLyA1LjUuMi4xXG4gICAgICBjb25zdCByZXNwb25zZU9iamVjdCA9IG5ldyBSZXNwb25zZShyZXNwb25zZS5ib2R5Py5zb3VyY2UgPz8gbnVsbClcbiAgICAgIGNvbnN0IGJvZHkgPSByZXNwb25zZU9iamVjdFtrU3RhdGVdLmJvZHlcbiAgICAgIHJlc3BvbnNlT2JqZWN0W2tTdGF0ZV0gPSByZXNwb25zZVxuICAgICAgcmVzcG9uc2VPYmplY3Rba1N0YXRlXS5ib2R5ID0gYm9keVxuICAgICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tIZWFkZXJzTGlzdF0gPSByZXNwb25zZS5oZWFkZXJzTGlzdFxuICAgICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tHdWFyZF0gPSAnaW1tdXRhYmxlJ1xuXG4gICAgICByZXNwb25zZUxpc3QucHVzaChyZXNwb25zZU9iamVjdClcbiAgICB9XG5cbiAgICAvLyA2LlxuICAgIHJldHVybiBPYmplY3QuZnJlZXplKHJlc3BvbnNlTGlzdClcbiAgfVxuXG4gIGFzeW5jIGFkZCAocmVxdWVzdCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlKVxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdDYWNoZS5hZGQnIH0pXG5cbiAgICByZXF1ZXN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluZm8ocmVxdWVzdClcblxuICAgIC8vIDEuXG4gICAgY29uc3QgcmVxdWVzdHMgPSBbcmVxdWVzdF1cblxuICAgIC8vIDIuXG4gICAgY29uc3QgcmVzcG9uc2VBcnJheVByb21pc2UgPSB0aGlzLmFkZEFsbChyZXF1ZXN0cylcblxuICAgIC8vIDMuXG4gICAgcmV0dXJuIGF3YWl0IHJlc3BvbnNlQXJyYXlQcm9taXNlXG4gIH1cblxuICBhc3luYyBhZGRBbGwgKHJlcXVlc3RzKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGUpXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0NhY2hlLmFkZEFsbCcgfSlcblxuICAgIHJlcXVlc3RzID0gd2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPFJlcXVlc3RJbmZvPiddKHJlcXVlc3RzKVxuXG4gICAgLy8gMS5cbiAgICBjb25zdCByZXNwb25zZVByb21pc2VzID0gW11cblxuICAgIC8vIDIuXG4gICAgY29uc3QgcmVxdWVzdExpc3QgPSBbXVxuXG4gICAgLy8gMy5cbiAgICBmb3IgKGNvbnN0IHJlcXVlc3Qgb2YgcmVxdWVzdHMpIHtcbiAgICAgIGlmICh0eXBlb2YgcmVxdWVzdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gMy4xXG4gICAgICBjb25zdCByID0gcmVxdWVzdFtrU3RhdGVdXG5cbiAgICAgIC8vIDMuMlxuICAgICAgaWYgKCF1cmxJc0h0dHBIdHRwc1NjaGVtZShyLnVybCkgfHwgci5tZXRob2QgIT09ICdHRVQnKSB7XG4gICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICBoZWFkZXI6ICdDYWNoZS5hZGRBbGwnLFxuICAgICAgICAgIG1lc3NhZ2U6ICdFeHBlY3RlZCBodHRwL3Mgc2NoZW1lIHdoZW4gbWV0aG9kIGlzIG5vdCBHRVQuJ1xuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDQuXG4gICAgLyoqIEB0eXBlIHtSZXR1cm5UeXBlPHR5cGVvZiBmZXRjaGluZz5bXX0gKi9cbiAgICBjb25zdCBmZXRjaENvbnRyb2xsZXJzID0gW11cblxuICAgIC8vIDUuXG4gICAgZm9yIChjb25zdCByZXF1ZXN0IG9mIHJlcXVlc3RzKSB7XG4gICAgICAvLyA1LjFcbiAgICAgIGNvbnN0IHIgPSBuZXcgUmVxdWVzdChyZXF1ZXN0KVtrU3RhdGVdXG5cbiAgICAgIC8vIDUuMlxuICAgICAgaWYgKCF1cmxJc0h0dHBIdHRwc1NjaGVtZShyLnVybCkpIHtcbiAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLmFkZEFsbCcsXG4gICAgICAgICAgbWVzc2FnZTogJ0V4cGVjdGVkIGh0dHAvcyBzY2hlbWUuJ1xuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICAvLyA1LjRcbiAgICAgIHIuaW5pdGlhdG9yID0gJ2ZldGNoJ1xuICAgICAgci5kZXN0aW5hdGlvbiA9ICdzdWJyZXNvdXJjZSdcblxuICAgICAgLy8gNS41XG4gICAgICByZXF1ZXN0TGlzdC5wdXNoKHIpXG5cbiAgICAgIC8vIDUuNlxuICAgICAgY29uc3QgcmVzcG9uc2VQcm9taXNlID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKClcblxuICAgICAgLy8gNS43XG4gICAgICBmZXRjaENvbnRyb2xsZXJzLnB1c2goZmV0Y2hpbmcoe1xuICAgICAgICByZXF1ZXN0OiByLFxuICAgICAgICBkaXNwYXRjaGVyOiBnZXRHbG9iYWxEaXNwYXRjaGVyKCksXG4gICAgICAgIHByb2Nlc3NSZXNwb25zZSAocmVzcG9uc2UpIHtcbiAgICAgICAgICAvLyAxLlxuICAgICAgICAgIGlmIChyZXNwb25zZS50eXBlID09PSAnZXJyb3InIHx8IHJlc3BvbnNlLnN0YXR1cyA9PT0gMjA2IHx8IHJlc3BvbnNlLnN0YXR1cyA8IDIwMCB8fCByZXNwb25zZS5zdGF0dXMgPiAyOTkpIHtcbiAgICAgICAgICAgIHJlc3BvbnNlUHJvbWlzZS5yZWplY3Qod2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgICBoZWFkZXI6ICdDYWNoZS5hZGRBbGwnLFxuICAgICAgICAgICAgICBtZXNzYWdlOiAnUmVjZWl2ZWQgYW4gaW52YWxpZCBzdGF0dXMgY29kZSBvciB0aGUgcmVxdWVzdCBmYWlsZWQuJ1xuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgfSBlbHNlIGlmIChyZXNwb25zZS5oZWFkZXJzTGlzdC5jb250YWlucygndmFyeScpKSB7IC8vIDIuXG4gICAgICAgICAgICAvLyAyLjFcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkVmFsdWVzID0gZ2V0RmllbGRWYWx1ZXMocmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCd2YXJ5JykpXG5cbiAgICAgICAgICAgIC8vIDIuMlxuICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZFZhbHVlIG9mIGZpZWxkVmFsdWVzKSB7XG4gICAgICAgICAgICAgIC8vIDIuMi4xXG4gICAgICAgICAgICAgIGlmIChmaWVsZFZhbHVlID09PSAnKicpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVByb21pc2UucmVqZWN0KHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLmFkZEFsbCcsXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnaW52YWxpZCB2YXJ5IGZpZWxkIHZhbHVlJ1xuICAgICAgICAgICAgICAgIH0pKVxuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBjb250cm9sbGVyIG9mIGZldGNoQ29udHJvbGxlcnMpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuYWJvcnQoKVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHkgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgLy8gMS5cbiAgICAgICAgICBpZiAocmVzcG9uc2UuYWJvcnRlZCkge1xuICAgICAgICAgICAgcmVzcG9uc2VQcm9taXNlLnJlamVjdChuZXcgRE9NRXhjZXB0aW9uKCdhYm9ydGVkJywgJ0Fib3J0RXJyb3InKSlcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDIuXG4gICAgICAgICAgcmVzcG9uc2VQcm9taXNlLnJlc29sdmUocmVzcG9uc2UpXG4gICAgICAgIH1cbiAgICAgIH0pKVxuXG4gICAgICAvLyA1LjhcbiAgICAgIHJlc3BvbnNlUHJvbWlzZXMucHVzaChyZXNwb25zZVByb21pc2UucHJvbWlzZSlcbiAgICB9XG5cbiAgICAvLyA2LlxuICAgIGNvbnN0IHAgPSBQcm9taXNlLmFsbChyZXNwb25zZVByb21pc2VzKVxuXG4gICAgLy8gNy5cbiAgICBjb25zdCByZXNwb25zZXMgPSBhd2FpdCBwXG5cbiAgICAvLyA3LjFcbiAgICBjb25zdCBvcGVyYXRpb25zID0gW11cblxuICAgIC8vIDcuMlxuICAgIGxldCBpbmRleCA9IDBcblxuICAgIC8vIDcuM1xuICAgIGZvciAoY29uc3QgcmVzcG9uc2Ugb2YgcmVzcG9uc2VzKSB7XG4gICAgICAvLyA3LjMuMVxuICAgICAgLyoqIEB0eXBlIHtDYWNoZUJhdGNoT3BlcmF0aW9ufSAqL1xuICAgICAgY29uc3Qgb3BlcmF0aW9uID0ge1xuICAgICAgICB0eXBlOiAncHV0JywgLy8gNy4zLjJcbiAgICAgICAgcmVxdWVzdDogcmVxdWVzdExpc3RbaW5kZXhdLCAvLyA3LjMuM1xuICAgICAgICByZXNwb25zZSAvLyA3LjMuNFxuICAgICAgfVxuXG4gICAgICBvcGVyYXRpb25zLnB1c2gob3BlcmF0aW9uKSAvLyA3LjMuNVxuXG4gICAgICBpbmRleCsrIC8vIDcuMy42XG4gICAgfVxuXG4gICAgLy8gNy41XG4gICAgY29uc3QgY2FjaGVKb2JQcm9taXNlID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKClcblxuICAgIC8vIDcuNi4xXG4gICAgbGV0IGVycm9yRGF0YSA9IG51bGxcblxuICAgIC8vIDcuNi4yXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuI2JhdGNoQ2FjaGVPcGVyYXRpb25zKG9wZXJhdGlvbnMpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZXJyb3JEYXRhID0gZVxuICAgIH1cblxuICAgIC8vIDcuNi4zXG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgLy8gNy42LjMuMVxuICAgICAgaWYgKGVycm9yRGF0YSA9PT0gbnVsbCkge1xuICAgICAgICBjYWNoZUpvYlByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyA3LjYuMy4yXG4gICAgICAgIGNhY2hlSm9iUHJvbWlzZS5yZWplY3QoZXJyb3JEYXRhKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICAvLyA3LjdcbiAgICByZXR1cm4gY2FjaGVKb2JQcm9taXNlLnByb21pc2VcbiAgfVxuXG4gIGFzeW5jIHB1dCAocmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZSlcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnQ2FjaGUucHV0JyB9KVxuXG4gICAgcmVxdWVzdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKHJlcXVlc3QpXG4gICAgcmVzcG9uc2UgPSB3ZWJpZGwuY29udmVydGVycy5SZXNwb25zZShyZXNwb25zZSlcblxuICAgIC8vIDEuXG4gICAgbGV0IGlubmVyUmVxdWVzdCA9IG51bGxcblxuICAgIC8vIDIuXG4gICAgaWYgKHJlcXVlc3QgaW5zdGFuY2VvZiBSZXF1ZXN0KSB7XG4gICAgICBpbm5lclJlcXVlc3QgPSByZXF1ZXN0W2tTdGF0ZV1cbiAgICB9IGVsc2UgeyAvLyAzLlxuICAgICAgaW5uZXJSZXF1ZXN0ID0gbmV3IFJlcXVlc3QocmVxdWVzdClba1N0YXRlXVxuICAgIH1cblxuICAgIC8vIDQuXG4gICAgaWYgKCF1cmxJc0h0dHBIdHRwc1NjaGVtZShpbm5lclJlcXVlc3QudXJsKSB8fCBpbm5lclJlcXVlc3QubWV0aG9kICE9PSAnR0VUJykge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6ICdDYWNoZS5wdXQnLFxuICAgICAgICBtZXNzYWdlOiAnRXhwZWN0ZWQgYW4gaHR0cC9zIHNjaGVtZSB3aGVuIG1ldGhvZCBpcyBub3QgR0VUJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyA1LlxuICAgIGNvbnN0IGlubmVyUmVzcG9uc2UgPSByZXNwb25zZVtrU3RhdGVdXG5cbiAgICAvLyA2LlxuICAgIGlmIChpbm5lclJlc3BvbnNlLnN0YXR1cyA9PT0gMjA2KSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ0NhY2hlLnB1dCcsXG4gICAgICAgIG1lc3NhZ2U6ICdHb3QgMjA2IHN0YXR1cydcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gNy5cbiAgICBpZiAoaW5uZXJSZXNwb25zZS5oZWFkZXJzTGlzdC5jb250YWlucygndmFyeScpKSB7XG4gICAgICAvLyA3LjEuXG4gICAgICBjb25zdCBmaWVsZFZhbHVlcyA9IGdldEZpZWxkVmFsdWVzKGlubmVyUmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCd2YXJ5JykpXG5cbiAgICAgIC8vIDcuMi5cbiAgICAgIGZvciAoY29uc3QgZmllbGRWYWx1ZSBvZiBmaWVsZFZhbHVlcykge1xuICAgICAgICAvLyA3LjIuMVxuICAgICAgICBpZiAoZmllbGRWYWx1ZSA9PT0gJyonKSB7XG4gICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgaGVhZGVyOiAnQ2FjaGUucHV0JyxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdHb3QgKiB2YXJ5IGZpZWxkIHZhbHVlJ1xuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA4LlxuICAgIGlmIChpbm5lclJlc3BvbnNlLmJvZHkgJiYgKGlzRGlzdHVyYmVkKGlubmVyUmVzcG9uc2UuYm9keS5zdHJlYW0pIHx8IGlubmVyUmVzcG9uc2UuYm9keS5zdHJlYW0ubG9ja2VkKSkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6ICdDYWNoZS5wdXQnLFxuICAgICAgICBtZXNzYWdlOiAnUmVzcG9uc2UgYm9keSBpcyBsb2NrZWQgb3IgZGlzdHVyYmVkJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyA5LlxuICAgIGNvbnN0IGNsb25lZFJlc3BvbnNlID0gY2xvbmVSZXNwb25zZShpbm5lclJlc3BvbnNlKVxuXG4gICAgLy8gMTAuXG4gICAgY29uc3QgYm9keVJlYWRQcm9taXNlID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKClcblxuICAgIC8vIDExLlxuICAgIGlmIChpbm5lclJlc3BvbnNlLmJvZHkgIT0gbnVsbCkge1xuICAgICAgLy8gMTEuMVxuICAgICAgY29uc3Qgc3RyZWFtID0gaW5uZXJSZXNwb25zZS5ib2R5LnN0cmVhbVxuXG4gICAgICAvLyAxMS4yXG4gICAgICBjb25zdCByZWFkZXIgPSBzdHJlYW0uZ2V0UmVhZGVyKClcblxuICAgICAgLy8gMTEuM1xuICAgICAgcmVhZEFsbEJ5dGVzKHJlYWRlcikudGhlbihib2R5UmVhZFByb21pc2UucmVzb2x2ZSwgYm9keVJlYWRQcm9taXNlLnJlamVjdClcbiAgICB9IGVsc2Uge1xuICAgICAgYm9keVJlYWRQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKVxuICAgIH1cblxuICAgIC8vIDEyLlxuICAgIC8qKiBAdHlwZSB7Q2FjaGVCYXRjaE9wZXJhdGlvbltdfSAqL1xuICAgIGNvbnN0IG9wZXJhdGlvbnMgPSBbXVxuXG4gICAgLy8gMTMuXG4gICAgLyoqIEB0eXBlIHtDYWNoZUJhdGNoT3BlcmF0aW9ufSAqL1xuICAgIGNvbnN0IG9wZXJhdGlvbiA9IHtcbiAgICAgIHR5cGU6ICdwdXQnLCAvLyAxNC5cbiAgICAgIHJlcXVlc3Q6IGlubmVyUmVxdWVzdCwgLy8gMTUuXG4gICAgICByZXNwb25zZTogY2xvbmVkUmVzcG9uc2UgLy8gMTYuXG4gICAgfVxuXG4gICAgLy8gMTcuXG4gICAgb3BlcmF0aW9ucy5wdXNoKG9wZXJhdGlvbilcblxuICAgIC8vIDE5LlxuICAgIGNvbnN0IGJ5dGVzID0gYXdhaXQgYm9keVJlYWRQcm9taXNlLnByb21pc2VcblxuICAgIGlmIChjbG9uZWRSZXNwb25zZS5ib2R5ICE9IG51bGwpIHtcbiAgICAgIGNsb25lZFJlc3BvbnNlLmJvZHkuc291cmNlID0gYnl0ZXNcbiAgICB9XG5cbiAgICAvLyAxOS4xXG4gICAgY29uc3QgY2FjaGVKb2JQcm9taXNlID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKClcblxuICAgIC8vIDE5LjIuMVxuICAgIGxldCBlcnJvckRhdGEgPSBudWxsXG5cbiAgICAvLyAxOS4yLjJcbiAgICB0cnkge1xuICAgICAgdGhpcy4jYmF0Y2hDYWNoZU9wZXJhdGlvbnMob3BlcmF0aW9ucylcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlcnJvckRhdGEgPSBlXG4gICAgfVxuXG4gICAgLy8gMTkuMi4zXG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgLy8gMTkuMi4zLjFcbiAgICAgIGlmIChlcnJvckRhdGEgPT09IG51bGwpIHtcbiAgICAgICAgY2FjaGVKb2JQcm9taXNlLnJlc29sdmUoKVxuICAgICAgfSBlbHNlIHsgLy8gMTkuMi4zLjJcbiAgICAgICAgY2FjaGVKb2JQcm9taXNlLnJlamVjdChlcnJvckRhdGEpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHJldHVybiBjYWNoZUpvYlByb21pc2UucHJvbWlzZVxuICB9XG5cbiAgYXN5bmMgZGVsZXRlIChyZXF1ZXN0LCBvcHRpb25zID0ge30pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZSlcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnQ2FjaGUuZGVsZXRlJyB9KVxuXG4gICAgcmVxdWVzdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKHJlcXVlc3QpXG4gICAgb3B0aW9ucyA9IHdlYmlkbC5jb252ZXJ0ZXJzLkNhY2hlUXVlcnlPcHRpb25zKG9wdGlvbnMpXG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7UmVxdWVzdH1cbiAgICAgKi9cbiAgICBsZXQgciA9IG51bGxcblxuICAgIGlmIChyZXF1ZXN0IGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgICAgciA9IHJlcXVlc3Rba1N0YXRlXVxuXG4gICAgICBpZiAoci5tZXRob2QgIT09ICdHRVQnICYmICFvcHRpb25zLmlnbm9yZU1ldGhvZCkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYXNzZXJ0KHR5cGVvZiByZXF1ZXN0ID09PSAnc3RyaW5nJylcblxuICAgICAgciA9IG5ldyBSZXF1ZXN0KHJlcXVlc3QpW2tTdGF0ZV1cbiAgICB9XG5cbiAgICAvKiogQHR5cGUge0NhY2hlQmF0Y2hPcGVyYXRpb25bXX0gKi9cbiAgICBjb25zdCBvcGVyYXRpb25zID0gW11cblxuICAgIC8qKiBAdHlwZSB7Q2FjaGVCYXRjaE9wZXJhdGlvbn0gKi9cbiAgICBjb25zdCBvcGVyYXRpb24gPSB7XG4gICAgICB0eXBlOiAnZGVsZXRlJyxcbiAgICAgIHJlcXVlc3Q6IHIsXG4gICAgICBvcHRpb25zXG4gICAgfVxuXG4gICAgb3BlcmF0aW9ucy5wdXNoKG9wZXJhdGlvbilcblxuICAgIGNvbnN0IGNhY2hlSm9iUHJvbWlzZSA9IGNyZWF0ZURlZmVycmVkUHJvbWlzZSgpXG5cbiAgICBsZXQgZXJyb3JEYXRhID0gbnVsbFxuICAgIGxldCByZXF1ZXN0UmVzcG9uc2VzXG5cbiAgICB0cnkge1xuICAgICAgcmVxdWVzdFJlc3BvbnNlcyA9IHRoaXMuI2JhdGNoQ2FjaGVPcGVyYXRpb25zKG9wZXJhdGlvbnMpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZXJyb3JEYXRhID0gZVxuICAgIH1cblxuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgIGlmIChlcnJvckRhdGEgPT09IG51bGwpIHtcbiAgICAgICAgY2FjaGVKb2JQcm9taXNlLnJlc29sdmUoISFyZXF1ZXN0UmVzcG9uc2VzPy5sZW5ndGgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWNoZUpvYlByb21pc2UucmVqZWN0KGVycm9yRGF0YSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIGNhY2hlSm9iUHJvbWlzZS5wcm9taXNlXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jZG9tLWNhY2hlLWtleXNcbiAgICogQHBhcmFtIHthbnl9IHJlcXVlc3RcbiAgICogQHBhcmFtIHtpbXBvcnQoJy4uLy4uL3R5cGVzL2NhY2hlJykuQ2FjaGVRdWVyeU9wdGlvbnN9IG9wdGlvbnNcbiAgICogQHJldHVybnMge3JlYWRvbmx5IFJlcXVlc3RbXX1cbiAgICovXG4gIGFzeW5jIGtleXMgKHJlcXVlc3QgPSB1bmRlZmluZWQsIG9wdGlvbnMgPSB7fSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlKVxuXG4gICAgaWYgKHJlcXVlc3QgIT09IHVuZGVmaW5lZCkgcmVxdWVzdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKHJlcXVlc3QpXG4gICAgb3B0aW9ucyA9IHdlYmlkbC5jb252ZXJ0ZXJzLkNhY2hlUXVlcnlPcHRpb25zKG9wdGlvbnMpXG5cbiAgICAvLyAxLlxuICAgIGxldCByID0gbnVsbFxuXG4gICAgLy8gMi5cbiAgICBpZiAocmVxdWVzdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyAyLjFcbiAgICAgIGlmIChyZXF1ZXN0IGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgICAgICAvLyAyLjEuMVxuICAgICAgICByID0gcmVxdWVzdFtrU3RhdGVdXG5cbiAgICAgICAgLy8gMi4xLjJcbiAgICAgICAgaWYgKHIubWV0aG9kICE9PSAnR0VUJyAmJiAhb3B0aW9ucy5pZ25vcmVNZXRob2QpIHtcbiAgICAgICAgICByZXR1cm4gW11cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcmVxdWVzdCA9PT0gJ3N0cmluZycpIHsgLy8gMi4yXG4gICAgICAgIHIgPSBuZXcgUmVxdWVzdChyZXF1ZXN0KVtrU3RhdGVdXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNC5cbiAgICBjb25zdCBwcm9taXNlID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKClcblxuICAgIC8vIDUuXG4gICAgLy8gNS4xXG4gICAgY29uc3QgcmVxdWVzdHMgPSBbXVxuXG4gICAgLy8gNS4yXG4gICAgaWYgKHJlcXVlc3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gNS4yLjFcbiAgICAgIGZvciAoY29uc3QgcmVxdWVzdFJlc3BvbnNlIG9mIHRoaXMuI3JlbGV2YW50UmVxdWVzdFJlc3BvbnNlTGlzdCkge1xuICAgICAgICAvLyA1LjIuMS4xXG4gICAgICAgIHJlcXVlc3RzLnB1c2gocmVxdWVzdFJlc3BvbnNlWzBdKVxuICAgICAgfVxuICAgIH0gZWxzZSB7IC8vIDUuM1xuICAgICAgLy8gNS4zLjFcbiAgICAgIGNvbnN0IHJlcXVlc3RSZXNwb25zZXMgPSB0aGlzLiNxdWVyeUNhY2hlKHIsIG9wdGlvbnMpXG5cbiAgICAgIC8vIDUuMy4yXG4gICAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiByZXF1ZXN0UmVzcG9uc2VzKSB7XG4gICAgICAgIC8vIDUuMy4yLjFcbiAgICAgICAgcmVxdWVzdHMucHVzaChyZXF1ZXN0UmVzcG9uc2VbMF0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNS40XG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgLy8gNS40LjFcbiAgICAgIGNvbnN0IHJlcXVlc3RMaXN0ID0gW11cblxuICAgICAgLy8gNS40LjJcbiAgICAgIGZvciAoY29uc3QgcmVxdWVzdCBvZiByZXF1ZXN0cykge1xuICAgICAgICBjb25zdCByZXF1ZXN0T2JqZWN0ID0gbmV3IFJlcXVlc3QoJ2h0dHBzOi8vYScpXG4gICAgICAgIHJlcXVlc3RPYmplY3Rba1N0YXRlXSA9IHJlcXVlc3RcbiAgICAgICAgcmVxdWVzdE9iamVjdFtrSGVhZGVyc11ba0hlYWRlcnNMaXN0XSA9IHJlcXVlc3QuaGVhZGVyc0xpc3RcbiAgICAgICAgcmVxdWVzdE9iamVjdFtrSGVhZGVyc11ba0d1YXJkXSA9ICdpbW11dGFibGUnXG4gICAgICAgIHJlcXVlc3RPYmplY3Rba1JlYWxtXSA9IHJlcXVlc3QuY2xpZW50XG5cbiAgICAgICAgLy8gNS40LjIuMVxuICAgICAgICByZXF1ZXN0TGlzdC5wdXNoKHJlcXVlc3RPYmplY3QpXG4gICAgICB9XG5cbiAgICAgIC8vIDUuNC4zXG4gICAgICBwcm9taXNlLnJlc29sdmUoT2JqZWN0LmZyZWV6ZShyZXF1ZXN0TGlzdCkpXG4gICAgfSlcblxuICAgIHJldHVybiBwcm9taXNlLnByb21pc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNiYXRjaC1jYWNoZS1vcGVyYXRpb25zLWFsZ29yaXRobVxuICAgKiBAcGFyYW0ge0NhY2hlQmF0Y2hPcGVyYXRpb25bXX0gb3BlcmF0aW9uc1xuICAgKiBAcmV0dXJucyB7cmVxdWVzdFJlc3BvbnNlTGlzdH1cbiAgICovXG4gICNiYXRjaENhY2hlT3BlcmF0aW9ucyAob3BlcmF0aW9ucykge1xuICAgIC8vIDEuXG4gICAgY29uc3QgY2FjaGUgPSB0aGlzLiNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3RcblxuICAgIC8vIDIuXG4gICAgY29uc3QgYmFja3VwQ2FjaGUgPSBbLi4uY2FjaGVdXG5cbiAgICAvLyAzLlxuICAgIGNvbnN0IGFkZGVkSXRlbXMgPSBbXVxuXG4gICAgLy8gNC4xXG4gICAgY29uc3QgcmVzdWx0TGlzdCA9IFtdXG5cbiAgICB0cnkge1xuICAgICAgLy8gNC4yXG4gICAgICBmb3IgKGNvbnN0IG9wZXJhdGlvbiBvZiBvcGVyYXRpb25zKSB7XG4gICAgICAgIC8vIDQuMi4xXG4gICAgICAgIGlmIChvcGVyYXRpb24udHlwZSAhPT0gJ2RlbGV0ZScgJiYgb3BlcmF0aW9uLnR5cGUgIT09ICdwdXQnKSB7XG4gICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgaGVhZGVyOiAnQ2FjaGUuI2JhdGNoQ2FjaGVPcGVyYXRpb25zJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdvcGVyYXRpb24gdHlwZSBkb2VzIG5vdCBtYXRjaCBcImRlbGV0ZVwiIG9yIFwicHV0XCInXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDQuMi4yXG4gICAgICAgIGlmIChvcGVyYXRpb24udHlwZSA9PT0gJ2RlbGV0ZScgJiYgb3BlcmF0aW9uLnJlc3BvbnNlICE9IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICBoZWFkZXI6ICdDYWNoZS4jYmF0Y2hDYWNoZU9wZXJhdGlvbnMnLFxuICAgICAgICAgICAgbWVzc2FnZTogJ2RlbGV0ZSBvcGVyYXRpb24gc2hvdWxkIG5vdCBoYXZlIGFuIGFzc29jaWF0ZWQgcmVzcG9uc2UnXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDQuMi4zXG4gICAgICAgIGlmICh0aGlzLiNxdWVyeUNhY2hlKG9wZXJhdGlvbi5yZXF1ZXN0LCBvcGVyYXRpb24ub3B0aW9ucywgYWRkZWRJdGVtcykubGVuZ3RoKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignPz8/JywgJ0ludmFsaWRTdGF0ZUVycm9yJylcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDQuMi40XG4gICAgICAgIGxldCByZXF1ZXN0UmVzcG9uc2VzXG5cbiAgICAgICAgLy8gNC4yLjVcbiAgICAgICAgaWYgKG9wZXJhdGlvbi50eXBlID09PSAnZGVsZXRlJykge1xuICAgICAgICAgIC8vIDQuMi41LjFcbiAgICAgICAgICByZXF1ZXN0UmVzcG9uc2VzID0gdGhpcy4jcXVlcnlDYWNoZShvcGVyYXRpb24ucmVxdWVzdCwgb3BlcmF0aW9uLm9wdGlvbnMpXG5cbiAgICAgICAgICAvLyBUT0RPOiB0aGUgc3BlYyBpcyB3cm9uZywgdGhpcyBpcyBuZWVkZWQgdG8gcGFzcyBXUFRzXG4gICAgICAgICAgaWYgKHJlcXVlc3RSZXNwb25zZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gW11cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyA0LjIuNS4yXG4gICAgICAgICAgZm9yIChjb25zdCByZXF1ZXN0UmVzcG9uc2Ugb2YgcmVxdWVzdFJlc3BvbnNlcykge1xuICAgICAgICAgICAgY29uc3QgaWR4ID0gY2FjaGUuaW5kZXhPZihyZXF1ZXN0UmVzcG9uc2UpXG4gICAgICAgICAgICBhc3NlcnQoaWR4ICE9PSAtMSlcblxuICAgICAgICAgICAgLy8gNC4yLjUuMi4xXG4gICAgICAgICAgICBjYWNoZS5zcGxpY2UoaWR4LCAxKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24udHlwZSA9PT0gJ3B1dCcpIHsgLy8gNC4yLjZcbiAgICAgICAgICAvLyA0LjIuNi4xXG4gICAgICAgICAgaWYgKG9wZXJhdGlvbi5yZXNwb25zZSA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLiNiYXRjaENhY2hlT3BlcmF0aW9ucycsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdwdXQgb3BlcmF0aW9uIHNob3VsZCBoYXZlIGFuIGFzc29jaWF0ZWQgcmVzcG9uc2UnXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDQuMi42LjJcbiAgICAgICAgICBjb25zdCByID0gb3BlcmF0aW9uLnJlcXVlc3RcblxuICAgICAgICAgIC8vIDQuMi42LjNcbiAgICAgICAgICBpZiAoIXVybElzSHR0cEh0dHBzU2NoZW1lKHIudXJsKSkge1xuICAgICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgICBoZWFkZXI6ICdDYWNoZS4jYmF0Y2hDYWNoZU9wZXJhdGlvbnMnLFxuICAgICAgICAgICAgICBtZXNzYWdlOiAnZXhwZWN0ZWQgaHR0cCBvciBodHRwcyBzY2hlbWUnXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDQuMi42LjRcbiAgICAgICAgICBpZiAoci5tZXRob2QgIT09ICdHRVQnKSB7XG4gICAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLiNiYXRjaENhY2hlT3BlcmF0aW9ucycsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdub3QgZ2V0IG1ldGhvZCdcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gNC4yLjYuNVxuICAgICAgICAgIGlmIChvcGVyYXRpb24ub3B0aW9ucyAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLiNiYXRjaENhY2hlT3BlcmF0aW9ucycsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdvcHRpb25zIG11c3Qgbm90IGJlIGRlZmluZWQnXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDQuMi42LjZcbiAgICAgICAgICByZXF1ZXN0UmVzcG9uc2VzID0gdGhpcy4jcXVlcnlDYWNoZShvcGVyYXRpb24ucmVxdWVzdClcblxuICAgICAgICAgIC8vIDQuMi42LjdcbiAgICAgICAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiByZXF1ZXN0UmVzcG9uc2VzKSB7XG4gICAgICAgICAgICBjb25zdCBpZHggPSBjYWNoZS5pbmRleE9mKHJlcXVlc3RSZXNwb25zZSlcbiAgICAgICAgICAgIGFzc2VydChpZHggIT09IC0xKVxuXG4gICAgICAgICAgICAvLyA0LjIuNi43LjFcbiAgICAgICAgICAgIGNhY2hlLnNwbGljZShpZHgsIDEpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gNC4yLjYuOFxuICAgICAgICAgIGNhY2hlLnB1c2goW29wZXJhdGlvbi5yZXF1ZXN0LCBvcGVyYXRpb24ucmVzcG9uc2VdKVxuXG4gICAgICAgICAgLy8gNC4yLjYuMTBcbiAgICAgICAgICBhZGRlZEl0ZW1zLnB1c2goW29wZXJhdGlvbi5yZXF1ZXN0LCBvcGVyYXRpb24ucmVzcG9uc2VdKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gNC4yLjdcbiAgICAgICAgcmVzdWx0TGlzdC5wdXNoKFtvcGVyYXRpb24ucmVxdWVzdCwgb3BlcmF0aW9uLnJlc3BvbnNlXSlcbiAgICAgIH1cblxuICAgICAgLy8gNC4zXG4gICAgICByZXR1cm4gcmVzdWx0TGlzdFxuICAgIH0gY2F0Y2ggKGUpIHsgLy8gNS5cbiAgICAgIC8vIDUuMVxuICAgICAgdGhpcy4jcmVsZXZhbnRSZXF1ZXN0UmVzcG9uc2VMaXN0Lmxlbmd0aCA9IDBcblxuICAgICAgLy8gNS4yXG4gICAgICB0aGlzLiNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3QgPSBiYWNrdXBDYWNoZVxuXG4gICAgICAvLyA1LjNcbiAgICAgIHRocm93IGVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jcXVlcnktY2FjaGVcbiAgICogQHBhcmFtIHthbnl9IHJlcXVlc3RRdWVyeVxuICAgKiBAcGFyYW0ge2ltcG9ydCgnLi4vLi4vdHlwZXMvY2FjaGUnKS5DYWNoZVF1ZXJ5T3B0aW9uc30gb3B0aW9uc1xuICAgKiBAcGFyYW0ge3JlcXVlc3RSZXNwb25zZUxpc3R9IHRhcmdldFN0b3JhZ2VcbiAgICogQHJldHVybnMge3JlcXVlc3RSZXNwb25zZUxpc3R9XG4gICAqL1xuICAjcXVlcnlDYWNoZSAocmVxdWVzdFF1ZXJ5LCBvcHRpb25zLCB0YXJnZXRTdG9yYWdlKSB7XG4gICAgLyoqIEB0eXBlIHtyZXF1ZXN0UmVzcG9uc2VMaXN0fSAqL1xuICAgIGNvbnN0IHJlc3VsdExpc3QgPSBbXVxuXG4gICAgY29uc3Qgc3RvcmFnZSA9IHRhcmdldFN0b3JhZ2UgPz8gdGhpcy4jcmVsZXZhbnRSZXF1ZXN0UmVzcG9uc2VMaXN0XG5cbiAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiBzdG9yYWdlKSB7XG4gICAgICBjb25zdCBbY2FjaGVkUmVxdWVzdCwgY2FjaGVkUmVzcG9uc2VdID0gcmVxdWVzdFJlc3BvbnNlXG4gICAgICBpZiAodGhpcy4jcmVxdWVzdE1hdGNoZXNDYWNoZWRJdGVtKHJlcXVlc3RRdWVyeSwgY2FjaGVkUmVxdWVzdCwgY2FjaGVkUmVzcG9uc2UsIG9wdGlvbnMpKSB7XG4gICAgICAgIHJlc3VsdExpc3QucHVzaChyZXF1ZXN0UmVzcG9uc2UpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdExpc3RcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNyZXF1ZXN0LW1hdGNoZXMtY2FjaGVkLWl0ZW0tYWxnb3JpdGhtXG4gICAqIEBwYXJhbSB7YW55fSByZXF1ZXN0UXVlcnlcbiAgICogQHBhcmFtIHthbnl9IHJlcXVlc3RcbiAgICogQHBhcmFtIHthbnkgfCBudWxsfSByZXNwb25zZVxuICAgKiBAcGFyYW0ge2ltcG9ydCgnLi4vLi4vdHlwZXMvY2FjaGUnKS5DYWNoZVF1ZXJ5T3B0aW9ucyB8IHVuZGVmaW5lZH0gb3B0aW9uc1xuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gICNyZXF1ZXN0TWF0Y2hlc0NhY2hlZEl0ZW0gKHJlcXVlc3RRdWVyeSwgcmVxdWVzdCwgcmVzcG9uc2UgPSBudWxsLCBvcHRpb25zKSB7XG4gICAgLy8gaWYgKG9wdGlvbnM/Lmlnbm9yZU1ldGhvZCA9PT0gZmFsc2UgJiYgcmVxdWVzdC5tZXRob2QgPT09ICdHRVQnKSB7XG4gICAgLy8gICByZXR1cm4gZmFsc2VcbiAgICAvLyB9XG5cbiAgICBjb25zdCBxdWVyeVVSTCA9IG5ldyBVUkwocmVxdWVzdFF1ZXJ5LnVybClcblxuICAgIGNvbnN0IGNhY2hlZFVSTCA9IG5ldyBVUkwocmVxdWVzdC51cmwpXG5cbiAgICBpZiAob3B0aW9ucz8uaWdub3JlU2VhcmNoKSB7XG4gICAgICBjYWNoZWRVUkwuc2VhcmNoID0gJydcblxuICAgICAgcXVlcnlVUkwuc2VhcmNoID0gJydcbiAgICB9XG5cbiAgICBpZiAoIXVybEVxdWFscyhxdWVyeVVSTCwgY2FjaGVkVVJMLCB0cnVlKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgcmVzcG9uc2UgPT0gbnVsbCB8fFxuICAgICAgb3B0aW9ucz8uaWdub3JlVmFyeSB8fFxuICAgICAgIXJlc3BvbnNlLmhlYWRlcnNMaXN0LmNvbnRhaW5zKCd2YXJ5JylcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgY29uc3QgZmllbGRWYWx1ZXMgPSBnZXRGaWVsZFZhbHVlcyhyZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ3ZhcnknKSlcblxuICAgIGZvciAoY29uc3QgZmllbGRWYWx1ZSBvZiBmaWVsZFZhbHVlcykge1xuICAgICAgaWYgKGZpZWxkVmFsdWUgPT09ICcqJykge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVxdWVzdFZhbHVlID0gcmVxdWVzdC5oZWFkZXJzTGlzdC5nZXQoZmllbGRWYWx1ZSlcbiAgICAgIGNvbnN0IHF1ZXJ5VmFsdWUgPSByZXF1ZXN0UXVlcnkuaGVhZGVyc0xpc3QuZ2V0KGZpZWxkVmFsdWUpXG5cbiAgICAgIC8vIElmIG9uZSBoYXMgdGhlIGhlYWRlciBhbmQgdGhlIG90aGVyIGRvZXNuJ3QsIG9yIG9uZSBoYXNcbiAgICAgIC8vIGEgZGlmZmVyZW50IHZhbHVlIHRoYW4gdGhlIG90aGVyLCByZXR1cm4gZmFsc2VcbiAgICAgIGlmIChyZXF1ZXN0VmFsdWUgIT09IHF1ZXJ5VmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWVcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDYWNoZS5wcm90b3R5cGUsIHtcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0NhY2hlJyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSxcbiAgbWF0Y2g6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG1hdGNoQWxsOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBhZGQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGFkZEFsbDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcHV0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBkZWxldGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGtleXM6IGtFbnVtZXJhYmxlUHJvcGVydHlcbn0pXG5cbmNvbnN0IGNhY2hlUXVlcnlPcHRpb25Db252ZXJ0ZXJzID0gW1xuICB7XG4gICAga2V5OiAnaWdub3JlU2VhcmNoJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4sXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZVxuICB9LFxuICB7XG4gICAga2V5OiAnaWdub3JlTWV0aG9kJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4sXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZVxuICB9LFxuICB7XG4gICAga2V5OiAnaWdub3JlVmFyeScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2VcbiAgfVxuXVxuXG53ZWJpZGwuY29udmVydGVycy5DYWNoZVF1ZXJ5T3B0aW9ucyA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKGNhY2hlUXVlcnlPcHRpb25Db252ZXJ0ZXJzKVxuXG53ZWJpZGwuY29udmVydGVycy5NdWx0aUNhY2hlUXVlcnlPcHRpb25zID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICAuLi5jYWNoZVF1ZXJ5T3B0aW9uQ29udmVydGVycyxcbiAge1xuICAgIGtleTogJ2NhY2hlTmFtZScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmdcbiAgfVxuXSlcblxud2ViaWRsLmNvbnZlcnRlcnMuUmVzcG9uc2UgPSB3ZWJpZGwuaW50ZXJmYWNlQ29udmVydGVyKFJlc3BvbnNlKVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8UmVxdWVzdEluZm8+J10gPSB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvXG4pXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBDYWNoZVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBrQ29uc3RydWN0IH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBDYWNoZSB9ID0gcmVxdWlyZSgnLi9jYWNoZScpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvd2ViaWRsJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcblxuY2xhc3MgQ2FjaGVTdG9yYWdlIHtcbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2Rmbi1yZWxldmFudC1uYW1lLXRvLWNhY2hlLW1hcFxuICAgKiBAdHlwZSB7TWFwPHN0cmluZywgaW1wb3J0KCcuL2NhY2hlJykucmVxdWVzdFJlc3BvbnNlTGlzdH1cbiAgICovXG4gICNjYWNoZXMgPSBuZXcgTWFwKClcblxuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgaWYgKGFyZ3VtZW50c1swXSAhPT0ga0NvbnN0cnVjdCkge1xuICAgICAgd2ViaWRsLmlsbGVnYWxDb25zdHJ1Y3RvcigpXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbWF0Y2ggKHJlcXVlc3QsIG9wdGlvbnMgPSB7fSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlU3RvcmFnZSlcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnQ2FjaGVTdG9yYWdlLm1hdGNoJyB9KVxuXG4gICAgcmVxdWVzdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKHJlcXVlc3QpXG4gICAgb3B0aW9ucyA9IHdlYmlkbC5jb252ZXJ0ZXJzLk11bHRpQ2FjaGVRdWVyeU9wdGlvbnMob3B0aW9ucylcblxuICAgIC8vIDEuXG4gICAgaWYgKG9wdGlvbnMuY2FjaGVOYW1lICE9IG51bGwpIHtcbiAgICAgIC8vIDEuMS4xLjFcbiAgICAgIGlmICh0aGlzLiNjYWNoZXMuaGFzKG9wdGlvbnMuY2FjaGVOYW1lKSkge1xuICAgICAgICAvLyAxLjEuMS4xLjFcbiAgICAgICAgY29uc3QgY2FjaGVMaXN0ID0gdGhpcy4jY2FjaGVzLmdldChvcHRpb25zLmNhY2hlTmFtZSlcbiAgICAgICAgY29uc3QgY2FjaGUgPSBuZXcgQ2FjaGUoa0NvbnN0cnVjdCwgY2FjaGVMaXN0KVxuXG4gICAgICAgIHJldHVybiBhd2FpdCBjYWNoZS5tYXRjaChyZXF1ZXN0LCBvcHRpb25zKVxuICAgICAgfVxuICAgIH0gZWxzZSB7IC8vIDIuXG4gICAgICAvLyAyLjJcbiAgICAgIGZvciAoY29uc3QgY2FjaGVMaXN0IG9mIHRoaXMuI2NhY2hlcy52YWx1ZXMoKSkge1xuICAgICAgICBjb25zdCBjYWNoZSA9IG5ldyBDYWNoZShrQ29uc3RydWN0LCBjYWNoZUxpc3QpXG5cbiAgICAgICAgLy8gMi4yLjEuMlxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNhY2hlLm1hdGNoKHJlcXVlc3QsIG9wdGlvbnMpXG5cbiAgICAgICAgaWYgKHJlc3BvbnNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNjYWNoZS1zdG9yYWdlLWhhc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fVxuICAgKi9cbiAgYXN5bmMgaGFzIChjYWNoZU5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZVN0b3JhZ2UpXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0NhY2hlU3RvcmFnZS5oYXMnIH0pXG5cbiAgICBjYWNoZU5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcoY2FjaGVOYW1lKVxuXG4gICAgLy8gMi4xLjFcbiAgICAvLyAyLjJcbiAgICByZXR1cm4gdGhpcy4jY2FjaGVzLmhhcyhjYWNoZU5hbWUpXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jZG9tLWNhY2hlc3RvcmFnZS1vcGVuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWVcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2FjaGU+fVxuICAgKi9cbiAgYXN5bmMgb3BlbiAoY2FjaGVOYW1lKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGVTdG9yYWdlKVxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdDYWNoZVN0b3JhZ2Uub3BlbicgfSlcblxuICAgIGNhY2hlTmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyhjYWNoZU5hbWUpXG5cbiAgICAvLyAyLjFcbiAgICBpZiAodGhpcy4jY2FjaGVzLmhhcyhjYWNoZU5hbWUpKSB7XG4gICAgICAvLyBhd2FpdCBjYWNoZXMub3BlbigndjEnKSAhPT0gYXdhaXQgY2FjaGVzLm9wZW4oJ3YxJylcblxuICAgICAgLy8gMi4xLjFcbiAgICAgIGNvbnN0IGNhY2hlID0gdGhpcy4jY2FjaGVzLmdldChjYWNoZU5hbWUpXG5cbiAgICAgIC8vIDIuMS4xLjFcbiAgICAgIHJldHVybiBuZXcgQ2FjaGUoa0NvbnN0cnVjdCwgY2FjaGUpXG4gICAgfVxuXG4gICAgLy8gMi4yXG4gICAgY29uc3QgY2FjaGUgPSBbXVxuXG4gICAgLy8gMi4zXG4gICAgdGhpcy4jY2FjaGVzLnNldChjYWNoZU5hbWUsIGNhY2hlKVxuXG4gICAgLy8gMi40XG4gICAgcmV0dXJuIG5ldyBDYWNoZShrQ29uc3RydWN0LCBjYWNoZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNjYWNoZS1zdG9yYWdlLWRlbGV0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fVxuICAgKi9cbiAgYXN5bmMgZGVsZXRlIChjYWNoZU5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZVN0b3JhZ2UpXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0NhY2hlU3RvcmFnZS5kZWxldGUnIH0pXG5cbiAgICBjYWNoZU5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcoY2FjaGVOYW1lKVxuXG4gICAgcmV0dXJuIHRoaXMuI2NhY2hlcy5kZWxldGUoY2FjaGVOYW1lKVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2NhY2hlLXN0b3JhZ2Uta2V5c1xuICAgKiBAcmV0dXJucyB7c3RyaW5nW119XG4gICAqL1xuICBhc3luYyBrZXlzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZVN0b3JhZ2UpXG5cbiAgICAvLyAyLjFcbiAgICBjb25zdCBrZXlzID0gdGhpcy4jY2FjaGVzLmtleXMoKVxuXG4gICAgLy8gMi4yXG4gICAgcmV0dXJuIFsuLi5rZXlzXVxuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENhY2hlU3RvcmFnZS5wcm90b3R5cGUsIHtcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0NhY2hlU3RvcmFnZScsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0sXG4gIG1hdGNoOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBoYXM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9wZW46IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGRlbGV0ZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAga2V5czoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIENhY2hlU3RvcmFnZVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuLy8gaHR0cHM6Ly93aWNnLmdpdGh1Yi5pby9jb29raWUtc3RvcmUvI2Nvb2tpZS1tYXhpbXVtLWF0dHJpYnV0ZS12YWx1ZS1zaXplXG5jb25zdCBtYXhBdHRyaWJ1dGVWYWx1ZVNpemUgPSAxMDI0XG5cbi8vIGh0dHBzOi8vd2ljZy5naXRodWIuaW8vY29va2llLXN0b3JlLyNjb29raWUtbWF4aW11bS1uYW1lLXZhbHVlLXBhaXItc2l6ZVxuY29uc3QgbWF4TmFtZVZhbHVlUGFpclNpemUgPSA0MDk2XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtYXhBdHRyaWJ1dGVWYWx1ZVNpemUsXG4gIG1heE5hbWVWYWx1ZVBhaXJTaXplXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBrSGVhZGVyc0xpc3QgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5cbmZ1bmN0aW9uIGlzQ1RMRXhjbHVkaW5nSHRhYiAodmFsdWUpIHtcbiAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgZm9yIChjb25zdCBjaGFyIG9mIHZhbHVlKSB7XG4gICAgY29uc3QgY29kZSA9IGNoYXIuY2hhckNvZGVBdCgwKVxuXG4gICAgaWYgKFxuICAgICAgKGNvZGUgPj0gMHgwMCB8fCBjb2RlIDw9IDB4MDgpIHx8XG4gICAgICAoY29kZSA+PSAweDBBIHx8IGNvZGUgPD0gMHgxRikgfHxcbiAgICAgIGNvZGUgPT09IDB4N0ZcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiBDSEFSICAgICAgICAgICA9IDxhbnkgVVMtQVNDSUkgY2hhcmFjdGVyIChvY3RldHMgMCAtIDEyNyk+XG4gdG9rZW4gICAgICAgICAgPSAxKjxhbnkgQ0hBUiBleGNlcHQgQ1RMcyBvciBzZXBhcmF0b3JzPlxuIHNlcGFyYXRvcnMgICAgID0gXCIoXCIgfCBcIilcIiB8IFwiPFwiIHwgXCI+XCIgfCBcIkBcIlxuICAgICAgICAgICAgICAgIHwgXCIsXCIgfCBcIjtcIiB8IFwiOlwiIHwgXCJcXFwiIHwgPFwiPlxuICAgICAgICAgICAgICAgIHwgXCIvXCIgfCBcIltcIiB8IFwiXVwiIHwgXCI/XCIgfCBcIj1cIlxuICAgICAgICAgICAgICAgIHwgXCJ7XCIgfCBcIn1cIiB8IFNQIHwgSFRcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQ29va2llTmFtZSAobmFtZSkge1xuICBmb3IgKGNvbnN0IGNoYXIgb2YgbmFtZSkge1xuICAgIGNvbnN0IGNvZGUgPSBjaGFyLmNoYXJDb2RlQXQoMClcblxuICAgIGlmIChcbiAgICAgIChjb2RlIDw9IDB4MjAgfHwgY29kZSA+IDB4N0YpIHx8XG4gICAgICBjaGFyID09PSAnKCcgfHxcbiAgICAgIGNoYXIgPT09ICcpJyB8fFxuICAgICAgY2hhciA9PT0gJz4nIHx8XG4gICAgICBjaGFyID09PSAnPCcgfHxcbiAgICAgIGNoYXIgPT09ICdAJyB8fFxuICAgICAgY2hhciA9PT0gJywnIHx8XG4gICAgICBjaGFyID09PSAnOycgfHxcbiAgICAgIGNoYXIgPT09ICc6JyB8fFxuICAgICAgY2hhciA9PT0gJ1xcXFwnIHx8XG4gICAgICBjaGFyID09PSAnXCInIHx8XG4gICAgICBjaGFyID09PSAnLycgfHxcbiAgICAgIGNoYXIgPT09ICdbJyB8fFxuICAgICAgY2hhciA9PT0gJ10nIHx8XG4gICAgICBjaGFyID09PSAnPycgfHxcbiAgICAgIGNoYXIgPT09ICc9JyB8fFxuICAgICAgY2hhciA9PT0gJ3snIHx8XG4gICAgICBjaGFyID09PSAnfSdcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb29raWUgbmFtZScpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuIGNvb2tpZS12YWx1ZSAgICAgID0gKmNvb2tpZS1vY3RldCAvICggRFFVT1RFICpjb29raWUtb2N0ZXQgRFFVT1RFIClcbiBjb29raWUtb2N0ZXQgICAgICA9ICV4MjEgLyAleDIzLTJCIC8gJXgyRC0zQSAvICV4M0MtNUIgLyAleDVELTdFXG4gICAgICAgICAgICAgICAgICAgICAgIDsgVVMtQVNDSUkgY2hhcmFjdGVycyBleGNsdWRpbmcgQ1RMcyxcbiAgICAgICAgICAgICAgICAgICAgICAgOyB3aGl0ZXNwYWNlIERRVU9URSwgY29tbWEsIHNlbWljb2xvbixcbiAgICAgICAgICAgICAgICAgICAgICAgOyBhbmQgYmFja3NsYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVDb29raWVWYWx1ZSAodmFsdWUpIHtcbiAgZm9yIChjb25zdCBjaGFyIG9mIHZhbHVlKSB7XG4gICAgY29uc3QgY29kZSA9IGNoYXIuY2hhckNvZGVBdCgwKVxuXG4gICAgaWYgKFxuICAgICAgY29kZSA8IDB4MjEgfHwgLy8gZXhjbHVkZSBDVExzICgwLTMxKVxuICAgICAgY29kZSA9PT0gMHgyMiB8fFxuICAgICAgY29kZSA9PT0gMHgyQyB8fFxuICAgICAgY29kZSA9PT0gMHgzQiB8fFxuICAgICAgY29kZSA9PT0gMHg1QyB8fFxuICAgICAgY29kZSA+IDB4N0UgLy8gbm9uLWFzY2lpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaGVhZGVyIHZhbHVlJylcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBwYXRoLXZhbHVlICAgICAgICA9IDxhbnkgQ0hBUiBleGNlcHQgQ1RMcyBvciBcIjtcIj5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQ29va2llUGF0aCAocGF0aCkge1xuICBmb3IgKGNvbnN0IGNoYXIgb2YgcGF0aCkge1xuICAgIGNvbnN0IGNvZGUgPSBjaGFyLmNoYXJDb2RlQXQoMClcblxuICAgIGlmIChjb2RlIDwgMHgyMSB8fCBjaGFyID09PSAnOycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb29raWUgcGF0aCcpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogSSBoYXZlIG5vIGlkZWEgd2h5IHRoZXNlIHZhbHVlcyBhcmVuJ3QgYWxsb3dlZCB0byBiZSBob25lc3QsXG4gKiBidXQgRGVubyB0ZXN0cyB0aGVzZS4gLSBLaGFmcmFcbiAqIEBwYXJhbSB7c3RyaW5nfSBkb21haW5cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVDb29raWVEb21haW4gKGRvbWFpbikge1xuICBpZiAoXG4gICAgZG9tYWluLnN0YXJ0c1dpdGgoJy0nKSB8fFxuICAgIGRvbWFpbi5lbmRzV2l0aCgnLicpIHx8XG4gICAgZG9tYWluLmVuZHNXaXRoKCctJylcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvb2tpZSBkb21haW4nKVxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNzIzMSNzZWN0aW9uLTcuMS4xLjFcbiAqIEBwYXJhbSB7bnVtYmVyfERhdGV9IGRhdGVcbiAgSU1GLWZpeGRhdGUgID0gZGF5LW5hbWUgXCIsXCIgU1AgZGF0ZTEgU1AgdGltZS1vZi1kYXkgU1AgR01UXG4gIDsgZml4ZWQgbGVuZ3RoL3pvbmUvY2FwaXRhbGl6YXRpb24gc3Vic2V0IG9mIHRoZSBmb3JtYXRcbiAgOyBzZWUgU2VjdGlvbiAzLjMgb2YgW1JGQzUzMjJdXG5cbiAgZGF5LW5hbWUgICAgID0gJXg0RC42Ri42RSA7IFwiTW9uXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg1NC43NS42NSA7IFwiVHVlXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg1Ny42NS42NCA7IFwiV2VkXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg1NC42OC43NSA7IFwiVGh1XCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0Ni43Mi42OSA7IFwiRnJpXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg1My42MS43NCA7IFwiU2F0XCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg1My43NS42RSA7IFwiU3VuXCIsIGNhc2Utc2Vuc2l0aXZlXG4gIGRhdGUxICAgICAgICA9IGRheSBTUCBtb250aCBTUCB5ZWFyXG4gICAgICAgICAgICAgICAgICA7IGUuZy4sIDAyIEp1biAxOTgyXG5cbiAgZGF5ICAgICAgICAgID0gMkRJR0lUXG4gIG1vbnRoICAgICAgICA9ICV4NEEuNjEuNkUgOyBcIkphblwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NDYuNjUuNjIgOyBcIkZlYlwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NEQuNjEuNzIgOyBcIk1hclwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NDEuNzAuNzIgOyBcIkFwclwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NEQuNjEuNzkgOyBcIk1heVwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NEEuNzUuNkUgOyBcIkp1blwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NEEuNzUuNkMgOyBcIkp1bFwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NDEuNzUuNjcgOyBcIkF1Z1wiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NTMuNjUuNzAgOyBcIlNlcFwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NEYuNjMuNzQgOyBcIk9jdFwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NEUuNkYuNzYgOyBcIk5vdlwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NDQuNjUuNjMgOyBcIkRlY1wiLCBjYXNlLXNlbnNpdGl2ZVxuICB5ZWFyICAgICAgICAgPSA0RElHSVRcblxuICBHTVQgICAgICAgICAgPSAleDQ3LjRELjU0IDsgXCJHTVRcIiwgY2FzZS1zZW5zaXRpdmVcblxuICB0aW1lLW9mLWRheSAgPSBob3VyIFwiOlwiIG1pbnV0ZSBcIjpcIiBzZWNvbmRcbiAgICAgICAgICAgICAgOyAwMDowMDowMCAtIDIzOjU5OjYwIChsZWFwIHNlY29uZClcblxuICBob3VyICAgICAgICAgPSAyRElHSVRcbiAgbWludXRlICAgICAgID0gMkRJR0lUXG4gIHNlY29uZCAgICAgICA9IDJESUdJVFxuICovXG5mdW5jdGlvbiB0b0lNRkRhdGUgKGRhdGUpIHtcbiAgaWYgKHR5cGVvZiBkYXRlID09PSAnbnVtYmVyJykge1xuICAgIGRhdGUgPSBuZXcgRGF0ZShkYXRlKVxuICB9XG5cbiAgY29uc3QgZGF5cyA9IFtcbiAgICAnU3VuJywgJ01vbicsICdUdWUnLCAnV2VkJyxcbiAgICAnVGh1JywgJ0ZyaScsICdTYXQnXG4gIF1cblxuICBjb25zdCBtb250aHMgPSBbXG4gICAgJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJyxcbiAgICAnSnVsJywgJ0F1ZycsICdTZXAnLCAnT2N0JywgJ05vdicsICdEZWMnXG4gIF1cblxuICBjb25zdCBkYXlOYW1lID0gZGF5c1tkYXRlLmdldFVUQ0RheSgpXVxuICBjb25zdCBkYXkgPSBkYXRlLmdldFVUQ0RhdGUoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcbiAgY29uc3QgbW9udGggPSBtb250aHNbZGF0ZS5nZXRVVENNb250aCgpXVxuICBjb25zdCB5ZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpXG4gIGNvbnN0IGhvdXIgPSBkYXRlLmdldFVUQ0hvdXJzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpXG4gIGNvbnN0IG1pbnV0ZSA9IGRhdGUuZ2V0VVRDTWludXRlcygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKVxuICBjb25zdCBzZWNvbmQgPSBkYXRlLmdldFVUQ1NlY29uZHMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcblxuICByZXR1cm4gYCR7ZGF5TmFtZX0sICR7ZGF5fSAke21vbnRofSAke3llYXJ9ICR7aG91cn06JHttaW51dGV9OiR7c2Vjb25kfSBHTVRgXG59XG5cbi8qKlxuIG1heC1hZ2UtYXYgICAgICAgID0gXCJNYXgtQWdlPVwiIG5vbi16ZXJvLWRpZ2l0ICpESUdJVFxuICAgICAgICAgICAgICAgICAgICAgICA7IEluIHByYWN0aWNlLCBib3RoIGV4cGlyZXMtYXYgYW5kIG1heC1hZ2UtYXZcbiAgICAgICAgICAgICAgICAgICAgICAgOyBhcmUgbGltaXRlZCB0byBkYXRlcyByZXByZXNlbnRhYmxlIGJ5IHRoZVxuICAgICAgICAgICAgICAgICAgICAgICA7IHVzZXIgYWdlbnQuXG4gKiBAcGFyYW0ge251bWJlcn0gbWF4QWdlXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQ29va2llTWF4QWdlIChtYXhBZ2UpIHtcbiAgaWYgKG1heEFnZSA8IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29va2llIG1heC1hZ2UnKVxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNjI2NSNzZWN0aW9uLTQuMS4xXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbmRleCcpLkNvb2tpZX0gY29va2llXG4gKi9cbmZ1bmN0aW9uIHN0cmluZ2lmeSAoY29va2llKSB7XG4gIGlmIChjb29raWUubmFtZS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgdmFsaWRhdGVDb29raWVOYW1lKGNvb2tpZS5uYW1lKVxuICB2YWxpZGF0ZUNvb2tpZVZhbHVlKGNvb2tpZS52YWx1ZSlcblxuICBjb25zdCBvdXQgPSBbYCR7Y29va2llLm5hbWV9PSR7Y29va2llLnZhbHVlfWBdXG5cbiAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtY29va2llLXByZWZpeGVzLTAwI3NlY3Rpb24tMy4xXG4gIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLWNvb2tpZS1wcmVmaXhlcy0wMCNzZWN0aW9uLTMuMlxuICBpZiAoY29va2llLm5hbWUuc3RhcnRzV2l0aCgnX19TZWN1cmUtJykpIHtcbiAgICBjb29raWUuc2VjdXJlID0gdHJ1ZVxuICB9XG5cbiAgaWYgKGNvb2tpZS5uYW1lLnN0YXJ0c1dpdGgoJ19fSG9zdC0nKSkge1xuICAgIGNvb2tpZS5zZWN1cmUgPSB0cnVlXG4gICAgY29va2llLmRvbWFpbiA9IG51bGxcbiAgICBjb29raWUucGF0aCA9ICcvJ1xuICB9XG5cbiAgaWYgKGNvb2tpZS5zZWN1cmUpIHtcbiAgICBvdXQucHVzaCgnU2VjdXJlJylcbiAgfVxuXG4gIGlmIChjb29raWUuaHR0cE9ubHkpIHtcbiAgICBvdXQucHVzaCgnSHR0cE9ubHknKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBjb29raWUubWF4QWdlID09PSAnbnVtYmVyJykge1xuICAgIHZhbGlkYXRlQ29va2llTWF4QWdlKGNvb2tpZS5tYXhBZ2UpXG4gICAgb3V0LnB1c2goYE1heC1BZ2U9JHtjb29raWUubWF4QWdlfWApXG4gIH1cblxuICBpZiAoY29va2llLmRvbWFpbikge1xuICAgIHZhbGlkYXRlQ29va2llRG9tYWluKGNvb2tpZS5kb21haW4pXG4gICAgb3V0LnB1c2goYERvbWFpbj0ke2Nvb2tpZS5kb21haW59YClcbiAgfVxuXG4gIGlmIChjb29raWUucGF0aCkge1xuICAgIHZhbGlkYXRlQ29va2llUGF0aChjb29raWUucGF0aClcbiAgICBvdXQucHVzaChgUGF0aD0ke2Nvb2tpZS5wYXRofWApXG4gIH1cblxuICBpZiAoY29va2llLmV4cGlyZXMgJiYgY29va2llLmV4cGlyZXMudG9TdHJpbmcoKSAhPT0gJ0ludmFsaWQgRGF0ZScpIHtcbiAgICBvdXQucHVzaChgRXhwaXJlcz0ke3RvSU1GRGF0ZShjb29raWUuZXhwaXJlcyl9YClcbiAgfVxuXG4gIGlmIChjb29raWUuc2FtZVNpdGUpIHtcbiAgICBvdXQucHVzaChgU2FtZVNpdGU9JHtjb29raWUuc2FtZVNpdGV9YClcbiAgfVxuXG4gIGZvciAoY29uc3QgcGFydCBvZiBjb29raWUudW5wYXJzZWQpIHtcbiAgICBpZiAoIXBhcnQuaW5jbHVkZXMoJz0nKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHVucGFyc2VkJylcbiAgICB9XG5cbiAgICBjb25zdCBba2V5LCAuLi52YWx1ZV0gPSBwYXJ0LnNwbGl0KCc9JylcblxuICAgIG91dC5wdXNoKGAke2tleS50cmltKCl9PSR7dmFsdWUuam9pbignPScpfWApXG4gIH1cblxuICByZXR1cm4gb3V0LmpvaW4oJzsgJylcbn1cblxubGV0IGtIZWFkZXJzTGlzdE5vZGVcblxuZnVuY3Rpb24gZ2V0SGVhZGVyc0xpc3QgKGhlYWRlcnMpIHtcbiAgaWYgKGhlYWRlcnNba0hlYWRlcnNMaXN0XSkge1xuICAgIHJldHVybiBoZWFkZXJzW2tIZWFkZXJzTGlzdF1cbiAgfVxuXG4gIGlmICgha0hlYWRlcnNMaXN0Tm9kZSkge1xuICAgIGtIZWFkZXJzTGlzdE5vZGUgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGhlYWRlcnMpLmZpbmQoXG4gICAgICAoc3ltYm9sKSA9PiBzeW1ib2wuZGVzY3JpcHRpb24gPT09ICdoZWFkZXJzIGxpc3QnXG4gICAgKVxuXG4gICAgYXNzZXJ0KGtIZWFkZXJzTGlzdE5vZGUsICdIZWFkZXJzIGNhbm5vdCBiZSBwYXJzZWQnKVxuICB9XG5cbiAgY29uc3QgaGVhZGVyc0xpc3QgPSBoZWFkZXJzW2tIZWFkZXJzTGlzdE5vZGVdXG4gIGFzc2VydChoZWFkZXJzTGlzdClcblxuICByZXR1cm4gaGVhZGVyc0xpc3Rcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGlzQ1RMRXhjbHVkaW5nSHRhYixcbiAgc3RyaW5naWZ5LFxuICBnZXRIZWFkZXJzTGlzdFxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBtYXhOYW1lVmFsdWVQYWlyU2l6ZSwgbWF4QXR0cmlidXRlVmFsdWVTaXplIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7IGlzQ1RMRXhjbHVkaW5nSHRhYiB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2RhdGFVUkwnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUGFyc2VzIHRoZSBmaWVsZC12YWx1ZSBhdHRyaWJ1dGVzIG9mIGEgc2V0LWNvb2tpZSBoZWFkZXIgc3RyaW5nLlxuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1yZmM2MjY1YmlzI3NlY3Rpb24tNS40XG4gKiBAcGFyYW0ge3N0cmluZ30gaGVhZGVyXG4gKiBAcmV0dXJucyBpZiB0aGUgaGVhZGVyIGlzIGludmFsaWQsIG51bGwgd2lsbCBiZSByZXR1cm5lZFxuICovXG5mdW5jdGlvbiBwYXJzZVNldENvb2tpZSAoaGVhZGVyKSB7XG4gIC8vIDEuIElmIHRoZSBzZXQtY29va2llLXN0cmluZyBjb250YWlucyBhICV4MDAtMDggLyAleDBBLTFGIC8gJXg3RlxuICAvLyAgICBjaGFyYWN0ZXIgKENUTCBjaGFyYWN0ZXJzIGV4Y2x1ZGluZyBIVEFCKTogQWJvcnQgdGhlc2Ugc3RlcHMgYW5kXG4gIC8vICAgIGlnbm9yZSB0aGUgc2V0LWNvb2tpZS1zdHJpbmcgZW50aXJlbHkuXG4gIGlmIChpc0NUTEV4Y2x1ZGluZ0h0YWIoaGVhZGVyKSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBsZXQgbmFtZVZhbHVlUGFpciA9ICcnXG4gIGxldCB1bnBhcnNlZEF0dHJpYnV0ZXMgPSAnJ1xuICBsZXQgbmFtZSA9ICcnXG4gIGxldCB2YWx1ZSA9ICcnXG5cbiAgLy8gMi4gSWYgdGhlIHNldC1jb29raWUtc3RyaW5nIGNvbnRhaW5zIGEgJXgzQiAoXCI7XCIpIGNoYXJhY3RlcjpcbiAgaWYgKGhlYWRlci5pbmNsdWRlcygnOycpKSB7XG4gICAgLy8gMS4gVGhlIG5hbWUtdmFsdWUtcGFpciBzdHJpbmcgY29uc2lzdHMgb2YgdGhlIGNoYXJhY3RlcnMgdXAgdG8sXG4gICAgLy8gICAgYnV0IG5vdCBpbmNsdWRpbmcsIHRoZSBmaXJzdCAleDNCIChcIjtcIiksIGFuZCB0aGUgdW5wYXJzZWQtXG4gICAgLy8gICAgYXR0cmlidXRlcyBjb25zaXN0IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHNldC1jb29raWUtc3RyaW5nXG4gICAgLy8gICAgKGluY2x1ZGluZyB0aGUgJXgzQiAoXCI7XCIpIGluIHF1ZXN0aW9uKS5cbiAgICBjb25zdCBwb3NpdGlvbiA9IHsgcG9zaXRpb246IDAgfVxuXG4gICAgbmFtZVZhbHVlUGFpciA9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0KCc7JywgaGVhZGVyLCBwb3NpdGlvbilcbiAgICB1bnBhcnNlZEF0dHJpYnV0ZXMgPSBoZWFkZXIuc2xpY2UocG9zaXRpb24ucG9zaXRpb24pXG4gIH0gZWxzZSB7XG4gICAgLy8gT3RoZXJ3aXNlOlxuXG4gICAgLy8gMS4gVGhlIG5hbWUtdmFsdWUtcGFpciBzdHJpbmcgY29uc2lzdHMgb2YgYWxsIHRoZSBjaGFyYWN0ZXJzXG4gICAgLy8gICAgY29udGFpbmVkIGluIHRoZSBzZXQtY29va2llLXN0cmluZywgYW5kIHRoZSB1bnBhcnNlZC1cbiAgICAvLyAgICBhdHRyaWJ1dGVzIGlzIHRoZSBlbXB0eSBzdHJpbmcuXG4gICAgbmFtZVZhbHVlUGFpciA9IGhlYWRlclxuICB9XG5cbiAgLy8gMy4gSWYgdGhlIG5hbWUtdmFsdWUtcGFpciBzdHJpbmcgbGFja3MgYSAleDNEIChcIj1cIikgY2hhcmFjdGVyLCB0aGVuXG4gIC8vICAgIHRoZSBuYW1lIHN0cmluZyBpcyBlbXB0eSwgYW5kIHRoZSB2YWx1ZSBzdHJpbmcgaXMgdGhlIHZhbHVlIG9mXG4gIC8vICAgIG5hbWUtdmFsdWUtcGFpci5cbiAgaWYgKCFuYW1lVmFsdWVQYWlyLmluY2x1ZGVzKCc9JykpIHtcbiAgICB2YWx1ZSA9IG5hbWVWYWx1ZVBhaXJcbiAgfSBlbHNlIHtcbiAgICAvLyAgICBPdGhlcndpc2UsIHRoZSBuYW1lIHN0cmluZyBjb25zaXN0cyBvZiB0aGUgY2hhcmFjdGVycyB1cCB0bywgYnV0XG4gICAgLy8gICAgbm90IGluY2x1ZGluZywgdGhlIGZpcnN0ICV4M0QgKFwiPVwiKSBjaGFyYWN0ZXIsIGFuZCB0aGUgKHBvc3NpYmx5XG4gICAgLy8gICAgZW1wdHkpIHZhbHVlIHN0cmluZyBjb25zaXN0cyBvZiB0aGUgY2hhcmFjdGVycyBhZnRlciB0aGUgZmlyc3RcbiAgICAvLyAgICAleDNEIChcIj1cIikgY2hhcmFjdGVyLlxuICAgIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogMCB9XG4gICAgbmFtZSA9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0KFxuICAgICAgJz0nLFxuICAgICAgbmFtZVZhbHVlUGFpcixcbiAgICAgIHBvc2l0aW9uXG4gICAgKVxuICAgIHZhbHVlID0gbmFtZVZhbHVlUGFpci5zbGljZShwb3NpdGlvbi5wb3NpdGlvbiArIDEpXG4gIH1cblxuICAvLyA0LiBSZW1vdmUgYW55IGxlYWRpbmcgb3IgdHJhaWxpbmcgV1NQIGNoYXJhY3RlcnMgZnJvbSB0aGUgbmFtZVxuICAvLyAgICBzdHJpbmcgYW5kIHRoZSB2YWx1ZSBzdHJpbmcuXG4gIG5hbWUgPSBuYW1lLnRyaW0oKVxuICB2YWx1ZSA9IHZhbHVlLnRyaW0oKVxuXG4gIC8vIDUuIElmIHRoZSBzdW0gb2YgdGhlIGxlbmd0aHMgb2YgdGhlIG5hbWUgc3RyaW5nIGFuZCB0aGUgdmFsdWUgc3RyaW5nXG4gIC8vICAgIGlzIG1vcmUgdGhhbiA0MDk2IG9jdGV0cywgYWJvcnQgdGhlc2Ugc3RlcHMgYW5kIGlnbm9yZSB0aGUgc2V0LVxuICAvLyAgICBjb29raWUtc3RyaW5nIGVudGlyZWx5LlxuICBpZiAobmFtZS5sZW5ndGggKyB2YWx1ZS5sZW5ndGggPiBtYXhOYW1lVmFsdWVQYWlyU2l6ZSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvLyA2LiBUaGUgY29va2llLW5hbWUgaXMgdGhlIG5hbWUgc3RyaW5nLCBhbmQgdGhlIGNvb2tpZS12YWx1ZSBpcyB0aGVcbiAgLy8gICAgdmFsdWUgc3RyaW5nLlxuICByZXR1cm4ge1xuICAgIG5hbWUsIHZhbHVlLCAuLi5wYXJzZVVucGFyc2VkQXR0cmlidXRlcyh1bnBhcnNlZEF0dHJpYnV0ZXMpXG4gIH1cbn1cblxuLyoqXG4gKiBQYXJzZXMgdGhlIHJlbWFpbmluZyBhdHRyaWJ1dGVzIG9mIGEgc2V0LWNvb2tpZSBoZWFkZXJcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtcmZjNjI2NWJpcyNzZWN0aW9uLTUuNFxuICogQHBhcmFtIHtzdHJpbmd9IHVucGFyc2VkQXR0cmlidXRlc1xuICogQHBhcmFtIHtbT2JqZWN0LjxzdHJpbmcsIHVua25vd24+XT17fX0gY29va2llQXR0cmlidXRlTGlzdFxuICovXG5mdW5jdGlvbiBwYXJzZVVucGFyc2VkQXR0cmlidXRlcyAodW5wYXJzZWRBdHRyaWJ1dGVzLCBjb29raWVBdHRyaWJ1dGVMaXN0ID0ge30pIHtcbiAgLy8gMS4gSWYgdGhlIHVucGFyc2VkLWF0dHJpYnV0ZXMgc3RyaW5nIGlzIGVtcHR5LCBza2lwIHRoZSByZXN0IG9mXG4gIC8vICAgIHRoZXNlIHN0ZXBzLlxuICBpZiAodW5wYXJzZWRBdHRyaWJ1dGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBjb29raWVBdHRyaWJ1dGVMaXN0XG4gIH1cblxuICAvLyAyLiBEaXNjYXJkIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIHVucGFyc2VkLWF0dHJpYnV0ZXMgKHdoaWNoXG4gIC8vICAgIHdpbGwgYmUgYSAleDNCIChcIjtcIikgY2hhcmFjdGVyKS5cbiAgYXNzZXJ0KHVucGFyc2VkQXR0cmlidXRlc1swXSA9PT0gJzsnKVxuICB1bnBhcnNlZEF0dHJpYnV0ZXMgPSB1bnBhcnNlZEF0dHJpYnV0ZXMuc2xpY2UoMSlcblxuICBsZXQgY29va2llQXYgPSAnJ1xuXG4gIC8vIDMuIElmIHRoZSByZW1haW5pbmcgdW5wYXJzZWQtYXR0cmlidXRlcyBjb250YWlucyBhICV4M0IgKFwiO1wiKVxuICAvLyAgICBjaGFyYWN0ZXI6XG4gIGlmICh1bnBhcnNlZEF0dHJpYnV0ZXMuaW5jbHVkZXMoJzsnKSkge1xuICAgIC8vIDEuIENvbnN1bWUgdGhlIGNoYXJhY3RlcnMgb2YgdGhlIHVucGFyc2VkLWF0dHJpYnV0ZXMgdXAgdG8sIGJ1dFxuICAgIC8vICAgIG5vdCBpbmNsdWRpbmcsIHRoZSBmaXJzdCAleDNCIChcIjtcIikgY2hhcmFjdGVyLlxuICAgIGNvb2tpZUF2ID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoXG4gICAgICAnOycsXG4gICAgICB1bnBhcnNlZEF0dHJpYnV0ZXMsXG4gICAgICB7IHBvc2l0aW9uOiAwIH1cbiAgICApXG4gICAgdW5wYXJzZWRBdHRyaWJ1dGVzID0gdW5wYXJzZWRBdHRyaWJ1dGVzLnNsaWNlKGNvb2tpZUF2Lmxlbmd0aClcbiAgfSBlbHNlIHtcbiAgICAvLyBPdGhlcndpc2U6XG5cbiAgICAvLyAxLiBDb25zdW1lIHRoZSByZW1haW5kZXIgb2YgdGhlIHVucGFyc2VkLWF0dHJpYnV0ZXMuXG4gICAgY29va2llQXYgPSB1bnBhcnNlZEF0dHJpYnV0ZXNcbiAgICB1bnBhcnNlZEF0dHJpYnV0ZXMgPSAnJ1xuICB9XG5cbiAgLy8gTGV0IHRoZSBjb29raWUtYXYgc3RyaW5nIGJlIHRoZSBjaGFyYWN0ZXJzIGNvbnN1bWVkIGluIHRoaXMgc3RlcC5cblxuICBsZXQgYXR0cmlidXRlTmFtZSA9ICcnXG4gIGxldCBhdHRyaWJ1dGVWYWx1ZSA9ICcnXG5cbiAgLy8gNC4gSWYgdGhlIGNvb2tpZS1hdiBzdHJpbmcgY29udGFpbnMgYSAleDNEIChcIj1cIikgY2hhcmFjdGVyOlxuICBpZiAoY29va2llQXYuaW5jbHVkZXMoJz0nKSkge1xuICAgIC8vIDEuIFRoZSAocG9zc2libHkgZW1wdHkpIGF0dHJpYnV0ZS1uYW1lIHN0cmluZyBjb25zaXN0cyBvZiB0aGVcbiAgICAvLyAgICBjaGFyYWN0ZXJzIHVwIHRvLCBidXQgbm90IGluY2x1ZGluZywgdGhlIGZpcnN0ICV4M0QgKFwiPVwiKVxuICAgIC8vICAgIGNoYXJhY3RlciwgYW5kIHRoZSAocG9zc2libHkgZW1wdHkpIGF0dHJpYnV0ZS12YWx1ZSBzdHJpbmdcbiAgICAvLyAgICBjb25zaXN0cyBvZiB0aGUgY2hhcmFjdGVycyBhZnRlciB0aGUgZmlyc3QgJXgzRCAoXCI9XCIpXG4gICAgLy8gICAgY2hhcmFjdGVyLlxuICAgIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogMCB9XG5cbiAgICBhdHRyaWJ1dGVOYW1lID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoXG4gICAgICAnPScsXG4gICAgICBjb29raWVBdixcbiAgICAgIHBvc2l0aW9uXG4gICAgKVxuICAgIGF0dHJpYnV0ZVZhbHVlID0gY29va2llQXYuc2xpY2UocG9zaXRpb24ucG9zaXRpb24gKyAxKVxuICB9IGVsc2Uge1xuICAgIC8vIE90aGVyd2lzZTpcblxuICAgIC8vIDEuIFRoZSBhdHRyaWJ1dGUtbmFtZSBzdHJpbmcgY29uc2lzdHMgb2YgdGhlIGVudGlyZSBjb29raWUtYXZcbiAgICAvLyAgICBzdHJpbmcsIGFuZCB0aGUgYXR0cmlidXRlLXZhbHVlIHN0cmluZyBpcyBlbXB0eS5cbiAgICBhdHRyaWJ1dGVOYW1lID0gY29va2llQXZcbiAgfVxuXG4gIC8vIDUuIFJlbW92ZSBhbnkgbGVhZGluZyBvciB0cmFpbGluZyBXU1AgY2hhcmFjdGVycyBmcm9tIHRoZSBhdHRyaWJ1dGUtXG4gIC8vICAgIG5hbWUgc3RyaW5nIGFuZCB0aGUgYXR0cmlidXRlLXZhbHVlIHN0cmluZy5cbiAgYXR0cmlidXRlTmFtZSA9IGF0dHJpYnV0ZU5hbWUudHJpbSgpXG4gIGF0dHJpYnV0ZVZhbHVlID0gYXR0cmlidXRlVmFsdWUudHJpbSgpXG5cbiAgLy8gNi4gSWYgdGhlIGF0dHJpYnV0ZS12YWx1ZSBpcyBsb25nZXIgdGhhbiAxMDI0IG9jdGV0cywgaWdub3JlIHRoZVxuICAvLyAgICBjb29raWUtYXYgc3RyaW5nIGFuZCByZXR1cm4gdG8gU3RlcCAxIG9mIHRoaXMgYWxnb3JpdGhtLlxuICBpZiAoYXR0cmlidXRlVmFsdWUubGVuZ3RoID4gbWF4QXR0cmlidXRlVmFsdWVTaXplKSB7XG4gICAgcmV0dXJuIHBhcnNlVW5wYXJzZWRBdHRyaWJ1dGVzKHVucGFyc2VkQXR0cmlidXRlcywgY29va2llQXR0cmlidXRlTGlzdClcbiAgfVxuXG4gIC8vIDcuIFByb2Nlc3MgdGhlIGF0dHJpYnV0ZS1uYW1lIGFuZCBhdHRyaWJ1dGUtdmFsdWUgYWNjb3JkaW5nIHRvIHRoZVxuICAvLyAgICByZXF1aXJlbWVudHMgaW4gdGhlIGZvbGxvd2luZyBzdWJzZWN0aW9ucy4gIChOb3RpY2UgdGhhdFxuICAvLyAgICBhdHRyaWJ1dGVzIHdpdGggdW5yZWNvZ25pemVkIGF0dHJpYnV0ZS1uYW1lcyBhcmUgaWdub3JlZC4pXG4gIGNvbnN0IGF0dHJpYnV0ZU5hbWVMb3dlcmNhc2UgPSBhdHRyaWJ1dGVOYW1lLnRvTG93ZXJDYXNlKClcblxuICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1yZmM2MjY1YmlzI3NlY3Rpb24tNS40LjFcbiAgLy8gSWYgdGhlIGF0dHJpYnV0ZS1uYW1lIGNhc2UtaW5zZW5zaXRpdmVseSBtYXRjaGVzIHRoZSBzdHJpbmdcbiAgLy8gXCJFeHBpcmVzXCIsIHRoZSB1c2VyIGFnZW50IE1VU1QgcHJvY2VzcyB0aGUgY29va2llLWF2IGFzIGZvbGxvd3MuXG4gIGlmIChhdHRyaWJ1dGVOYW1lTG93ZXJjYXNlID09PSAnZXhwaXJlcycpIHtcbiAgICAvLyAxLiBMZXQgdGhlIGV4cGlyeS10aW1lIGJlIHRoZSByZXN1bHQgb2YgcGFyc2luZyB0aGUgYXR0cmlidXRlLXZhbHVlXG4gICAgLy8gICAgYXMgY29va2llLWRhdGUgKHNlZSBTZWN0aW9uIDUuMS4xKS5cbiAgICBjb25zdCBleHBpcnlUaW1lID0gbmV3IERhdGUoYXR0cmlidXRlVmFsdWUpXG5cbiAgICAvLyAyLiBJZiB0aGUgYXR0cmlidXRlLXZhbHVlIGZhaWxlZCB0byBwYXJzZSBhcyBhIGNvb2tpZSBkYXRlLCBpZ25vcmVcbiAgICAvLyAgICB0aGUgY29va2llLWF2LlxuXG4gICAgY29va2llQXR0cmlidXRlTGlzdC5leHBpcmVzID0gZXhwaXJ5VGltZVxuICB9IGVsc2UgaWYgKGF0dHJpYnV0ZU5hbWVMb3dlcmNhc2UgPT09ICdtYXgtYWdlJykge1xuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjQuMlxuICAgIC8vIElmIHRoZSBhdHRyaWJ1dGUtbmFtZSBjYXNlLWluc2Vuc2l0aXZlbHkgbWF0Y2hlcyB0aGUgc3RyaW5nIFwiTWF4LVxuICAgIC8vIEFnZVwiLCB0aGUgdXNlciBhZ2VudCBNVVNUIHByb2Nlc3MgdGhlIGNvb2tpZS1hdiBhcyBmb2xsb3dzLlxuXG4gICAgLy8gMS4gSWYgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgYXR0cmlidXRlLXZhbHVlIGlzIG5vdCBhIERJR0lUIG9yIGFcbiAgICAvLyAgICBcIi1cIiBjaGFyYWN0ZXIsIGlnbm9yZSB0aGUgY29va2llLWF2LlxuICAgIGNvbnN0IGNoYXJDb2RlID0gYXR0cmlidXRlVmFsdWUuY2hhckNvZGVBdCgwKVxuXG4gICAgaWYgKChjaGFyQ29kZSA8IDQ4IHx8IGNoYXJDb2RlID4gNTcpICYmIGF0dHJpYnV0ZVZhbHVlWzBdICE9PSAnLScpIHtcbiAgICAgIHJldHVybiBwYXJzZVVucGFyc2VkQXR0cmlidXRlcyh1bnBhcnNlZEF0dHJpYnV0ZXMsIGNvb2tpZUF0dHJpYnV0ZUxpc3QpXG4gICAgfVxuXG4gICAgLy8gMi4gSWYgdGhlIHJlbWFpbmRlciBvZiBhdHRyaWJ1dGUtdmFsdWUgY29udGFpbnMgYSBub24tRElHSVRcbiAgICAvLyAgICBjaGFyYWN0ZXIsIGlnbm9yZSB0aGUgY29va2llLWF2LlxuICAgIGlmICghL15cXGQrJC8udGVzdChhdHRyaWJ1dGVWYWx1ZSkpIHtcbiAgICAgIHJldHVybiBwYXJzZVVucGFyc2VkQXR0cmlidXRlcyh1bnBhcnNlZEF0dHJpYnV0ZXMsIGNvb2tpZUF0dHJpYnV0ZUxpc3QpXG4gICAgfVxuXG4gICAgLy8gMy4gTGV0IGRlbHRhLXNlY29uZHMgYmUgdGhlIGF0dHJpYnV0ZS12YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gaW50ZWdlci5cbiAgICBjb25zdCBkZWx0YVNlY29uZHMgPSBOdW1iZXIoYXR0cmlidXRlVmFsdWUpXG5cbiAgICAvLyA0LiBMZXQgY29va2llLWFnZS1saW1pdCBiZSB0aGUgbWF4aW11bSBhZ2Ugb2YgdGhlIGNvb2tpZSAod2hpY2hcbiAgICAvLyAgICBTSE9VTEQgYmUgNDAwIGRheXMgb3IgbGVzcywgc2VlIFNlY3Rpb24gNC4xLjIuMikuXG5cbiAgICAvLyA1LiBTZXQgZGVsdGEtc2Vjb25kcyB0byB0aGUgc21hbGxlciBvZiBpdHMgcHJlc2VudCB2YWx1ZSBhbmQgY29va2llLVxuICAgIC8vICAgIGFnZS1saW1pdC5cbiAgICAvLyBkZWx0YVNlY29uZHMgPSBNYXRoLm1pbihkZWx0YVNlY29uZHMgKiAxMDAwLCBtYXhFeHBpcmVzTXMpXG5cbiAgICAvLyA2LiBJZiBkZWx0YS1zZWNvbmRzIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB6ZXJvICgwKSwgbGV0IGV4cGlyeS1cbiAgICAvLyAgICB0aW1lIGJlIHRoZSBlYXJsaWVzdCByZXByZXNlbnRhYmxlIGRhdGUgYW5kIHRpbWUuICBPdGhlcndpc2UsIGxldFxuICAgIC8vICAgIHRoZSBleHBpcnktdGltZSBiZSB0aGUgY3VycmVudCBkYXRlIGFuZCB0aW1lIHBsdXMgZGVsdGEtc2Vjb25kc1xuICAgIC8vICAgIHNlY29uZHMuXG4gICAgLy8gY29uc3QgZXhwaXJ5VGltZSA9IGRlbHRhU2Vjb25kcyA8PSAwID8gRGF0ZS5ub3coKSA6IERhdGUubm93KCkgKyBkZWx0YVNlY29uZHNcblxuICAgIC8vIDcuIEFwcGVuZCBhbiBhdHRyaWJ1dGUgdG8gdGhlIGNvb2tpZS1hdHRyaWJ1dGUtbGlzdCB3aXRoIGFuXG4gICAgLy8gICAgYXR0cmlidXRlLW5hbWUgb2YgTWF4LUFnZSBhbmQgYW4gYXR0cmlidXRlLXZhbHVlIG9mIGV4cGlyeS10aW1lLlxuICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3QubWF4QWdlID0gZGVsdGFTZWNvbmRzXG4gIH0gZWxzZSBpZiAoYXR0cmlidXRlTmFtZUxvd2VyY2FzZSA9PT0gJ2RvbWFpbicpIHtcbiAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1yZmM2MjY1YmlzI3NlY3Rpb24tNS40LjNcbiAgICAvLyBJZiB0aGUgYXR0cmlidXRlLW5hbWUgY2FzZS1pbnNlbnNpdGl2ZWx5IG1hdGNoZXMgdGhlIHN0cmluZyBcIkRvbWFpblwiLFxuICAgIC8vIHRoZSB1c2VyIGFnZW50IE1VU1QgcHJvY2VzcyB0aGUgY29va2llLWF2IGFzIGZvbGxvd3MuXG5cbiAgICAvLyAxLiBMZXQgY29va2llLWRvbWFpbiBiZSB0aGUgYXR0cmlidXRlLXZhbHVlLlxuICAgIGxldCBjb29raWVEb21haW4gPSBhdHRyaWJ1dGVWYWx1ZVxuXG4gICAgLy8gMi4gSWYgY29va2llLWRvbWFpbiBzdGFydHMgd2l0aCAleDJFIChcIi5cIiksIGxldCBjb29raWUtZG9tYWluIGJlXG4gICAgLy8gICAgY29va2llLWRvbWFpbiB3aXRob3V0IGl0cyBsZWFkaW5nICV4MkUgKFwiLlwiKS5cbiAgICBpZiAoY29va2llRG9tYWluWzBdID09PSAnLicpIHtcbiAgICAgIGNvb2tpZURvbWFpbiA9IGNvb2tpZURvbWFpbi5zbGljZSgxKVxuICAgIH1cblxuICAgIC8vIDMuIENvbnZlcnQgdGhlIGNvb2tpZS1kb21haW4gdG8gbG93ZXIgY2FzZS5cbiAgICBjb29raWVEb21haW4gPSBjb29raWVEb21haW4udG9Mb3dlckNhc2UoKVxuXG4gICAgLy8gNC4gQXBwZW5kIGFuIGF0dHJpYnV0ZSB0byB0aGUgY29va2llLWF0dHJpYnV0ZS1saXN0IHdpdGggYW5cbiAgICAvLyAgICBhdHRyaWJ1dGUtbmFtZSBvZiBEb21haW4gYW5kIGFuIGF0dHJpYnV0ZS12YWx1ZSBvZiBjb29raWUtZG9tYWluLlxuICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3QuZG9tYWluID0gY29va2llRG9tYWluXG4gIH0gZWxzZSBpZiAoYXR0cmlidXRlTmFtZUxvd2VyY2FzZSA9PT0gJ3BhdGgnKSB7XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtcmZjNjI2NWJpcyNzZWN0aW9uLTUuNC40XG4gICAgLy8gSWYgdGhlIGF0dHJpYnV0ZS1uYW1lIGNhc2UtaW5zZW5zaXRpdmVseSBtYXRjaGVzIHRoZSBzdHJpbmcgXCJQYXRoXCIsXG4gICAgLy8gdGhlIHVzZXIgYWdlbnQgTVVTVCBwcm9jZXNzIHRoZSBjb29raWUtYXYgYXMgZm9sbG93cy5cblxuICAgIC8vIDEuIElmIHRoZSBhdHRyaWJ1dGUtdmFsdWUgaXMgZW1wdHkgb3IgaWYgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGVcbiAgICAvLyAgICBhdHRyaWJ1dGUtdmFsdWUgaXMgbm90ICV4MkYgKFwiL1wiKTpcbiAgICBsZXQgY29va2llUGF0aCA9ICcnXG4gICAgaWYgKGF0dHJpYnV0ZVZhbHVlLmxlbmd0aCA9PT0gMCB8fCBhdHRyaWJ1dGVWYWx1ZVswXSAhPT0gJy8nKSB7XG4gICAgICAvLyAxLiBMZXQgY29va2llLXBhdGggYmUgdGhlIGRlZmF1bHQtcGF0aC5cbiAgICAgIGNvb2tpZVBhdGggPSAnLydcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT3RoZXJ3aXNlOlxuXG4gICAgICAvLyAxLiBMZXQgY29va2llLXBhdGggYmUgdGhlIGF0dHJpYnV0ZS12YWx1ZS5cbiAgICAgIGNvb2tpZVBhdGggPSBhdHRyaWJ1dGVWYWx1ZVxuICAgIH1cblxuICAgIC8vIDIuIEFwcGVuZCBhbiBhdHRyaWJ1dGUgdG8gdGhlIGNvb2tpZS1hdHRyaWJ1dGUtbGlzdCB3aXRoIGFuXG4gICAgLy8gICAgYXR0cmlidXRlLW5hbWUgb2YgUGF0aCBhbmQgYW4gYXR0cmlidXRlLXZhbHVlIG9mIGNvb2tpZS1wYXRoLlxuICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3QucGF0aCA9IGNvb2tpZVBhdGhcbiAgfSBlbHNlIGlmIChhdHRyaWJ1dGVOYW1lTG93ZXJjYXNlID09PSAnc2VjdXJlJykge1xuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjQuNVxuICAgIC8vIElmIHRoZSBhdHRyaWJ1dGUtbmFtZSBjYXNlLWluc2Vuc2l0aXZlbHkgbWF0Y2hlcyB0aGUgc3RyaW5nIFwiU2VjdXJlXCIsXG4gICAgLy8gdGhlIHVzZXIgYWdlbnQgTVVTVCBhcHBlbmQgYW4gYXR0cmlidXRlIHRvIHRoZSBjb29raWUtYXR0cmlidXRlLWxpc3RcbiAgICAvLyB3aXRoIGFuIGF0dHJpYnV0ZS1uYW1lIG9mIFNlY3VyZSBhbmQgYW4gZW1wdHkgYXR0cmlidXRlLXZhbHVlLlxuXG4gICAgY29va2llQXR0cmlidXRlTGlzdC5zZWN1cmUgPSB0cnVlXG4gIH0gZWxzZSBpZiAoYXR0cmlidXRlTmFtZUxvd2VyY2FzZSA9PT0gJ2h0dHBvbmx5Jykge1xuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjQuNlxuICAgIC8vIElmIHRoZSBhdHRyaWJ1dGUtbmFtZSBjYXNlLWluc2Vuc2l0aXZlbHkgbWF0Y2hlcyB0aGUgc3RyaW5nXG4gICAgLy8gXCJIdHRwT25seVwiLCB0aGUgdXNlciBhZ2VudCBNVVNUIGFwcGVuZCBhbiBhdHRyaWJ1dGUgdG8gdGhlIGNvb2tpZS1cbiAgICAvLyBhdHRyaWJ1dGUtbGlzdCB3aXRoIGFuIGF0dHJpYnV0ZS1uYW1lIG9mIEh0dHBPbmx5IGFuZCBhbiBlbXB0eVxuICAgIC8vIGF0dHJpYnV0ZS12YWx1ZS5cblxuICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3QuaHR0cE9ubHkgPSB0cnVlXG4gIH0gZWxzZSBpZiAoYXR0cmlidXRlTmFtZUxvd2VyY2FzZSA9PT0gJ3NhbWVzaXRlJykge1xuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjQuN1xuICAgIC8vIElmIHRoZSBhdHRyaWJ1dGUtbmFtZSBjYXNlLWluc2Vuc2l0aXZlbHkgbWF0Y2hlcyB0aGUgc3RyaW5nXG4gICAgLy8gXCJTYW1lU2l0ZVwiLCB0aGUgdXNlciBhZ2VudCBNVVNUIHByb2Nlc3MgdGhlIGNvb2tpZS1hdiBhcyBmb2xsb3dzOlxuXG4gICAgLy8gMS4gTGV0IGVuZm9yY2VtZW50IGJlIFwiRGVmYXVsdFwiLlxuICAgIGxldCBlbmZvcmNlbWVudCA9ICdEZWZhdWx0J1xuXG4gICAgY29uc3QgYXR0cmlidXRlVmFsdWVMb3dlcmNhc2UgPSBhdHRyaWJ1dGVWYWx1ZS50b0xvd2VyQ2FzZSgpXG4gICAgLy8gMi4gSWYgY29va2llLWF2J3MgYXR0cmlidXRlLXZhbHVlIGlzIGEgY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBmb3JcbiAgICAvLyAgICBcIk5vbmVcIiwgc2V0IGVuZm9yY2VtZW50IHRvIFwiTm9uZVwiLlxuICAgIGlmIChhdHRyaWJ1dGVWYWx1ZUxvd2VyY2FzZS5pbmNsdWRlcygnbm9uZScpKSB7XG4gICAgICBlbmZvcmNlbWVudCA9ICdOb25lJ1xuICAgIH1cblxuICAgIC8vIDMuIElmIGNvb2tpZS1hdidzIGF0dHJpYnV0ZS12YWx1ZSBpcyBhIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yXG4gICAgLy8gICAgXCJTdHJpY3RcIiwgc2V0IGVuZm9yY2VtZW50IHRvIFwiU3RyaWN0XCIuXG4gICAgaWYgKGF0dHJpYnV0ZVZhbHVlTG93ZXJjYXNlLmluY2x1ZGVzKCdzdHJpY3QnKSkge1xuICAgICAgZW5mb3JjZW1lbnQgPSAnU3RyaWN0J1xuICAgIH1cblxuICAgIC8vIDQuIElmIGNvb2tpZS1hdidzIGF0dHJpYnV0ZS12YWx1ZSBpcyBhIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yXG4gICAgLy8gICAgXCJMYXhcIiwgc2V0IGVuZm9yY2VtZW50IHRvIFwiTGF4XCIuXG4gICAgaWYgKGF0dHJpYnV0ZVZhbHVlTG93ZXJjYXNlLmluY2x1ZGVzKCdsYXgnKSkge1xuICAgICAgZW5mb3JjZW1lbnQgPSAnTGF4J1xuICAgIH1cblxuICAgIC8vIDUuIEFwcGVuZCBhbiBhdHRyaWJ1dGUgdG8gdGhlIGNvb2tpZS1hdHRyaWJ1dGUtbGlzdCB3aXRoIGFuXG4gICAgLy8gICAgYXR0cmlidXRlLW5hbWUgb2YgXCJTYW1lU2l0ZVwiIGFuZCBhbiBhdHRyaWJ1dGUtdmFsdWUgb2ZcbiAgICAvLyAgICBlbmZvcmNlbWVudC5cbiAgICBjb29raWVBdHRyaWJ1dGVMaXN0LnNhbWVTaXRlID0gZW5mb3JjZW1lbnRcbiAgfSBlbHNlIHtcbiAgICBjb29raWVBdHRyaWJ1dGVMaXN0LnVucGFyc2VkID8/PSBbXVxuXG4gICAgY29va2llQXR0cmlidXRlTGlzdC51bnBhcnNlZC5wdXNoKGAke2F0dHJpYnV0ZU5hbWV9PSR7YXR0cmlidXRlVmFsdWV9YClcbiAgfVxuXG4gIC8vIDguIFJldHVybiB0byBTdGVwIDEgb2YgdGhpcyBhbGdvcml0aG0uXG4gIHJldHVybiBwYXJzZVVucGFyc2VkQXR0cmlidXRlcyh1bnBhcnNlZEF0dHJpYnV0ZXMsIGNvb2tpZUF0dHJpYnV0ZUxpc3QpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBwYXJzZVNldENvb2tpZSxcbiAgcGFyc2VVbnBhcnNlZEF0dHJpYnV0ZXNcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgcGFyc2VTZXRDb29raWUgfSA9IHJlcXVpcmUoJy4vcGFyc2UnKVxuY29uc3QgeyBzdHJpbmdpZnksIGdldEhlYWRlcnNMaXN0IH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3dlYmlkbCcpXG5jb25zdCB7IEhlYWRlcnMgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2hlYWRlcnMnKVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IENvb2tpZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IG5hbWVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2YWx1ZVxuICogQHByb3BlcnR5IHtEYXRlfG51bWJlcnx1bmRlZmluZWR9IGV4cGlyZXNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfHVuZGVmaW5lZH0gbWF4QWdlXG4gKiBAcHJvcGVydHkge3N0cmluZ3x1bmRlZmluZWR9IGRvbWFpblxuICogQHByb3BlcnR5IHtzdHJpbmd8dW5kZWZpbmVkfSBwYXRoXG4gKiBAcHJvcGVydHkge2Jvb2xlYW58dW5kZWZpbmVkfSBzZWN1cmVcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbnx1bmRlZmluZWR9IGh0dHBPbmx5XG4gKiBAcHJvcGVydHkgeydTdHJpY3QnfCdMYXgnfCdOb25lJ30gc2FtZVNpdGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IHVucGFyc2VkXG4gKi9cblxuLyoqXG4gKiBAcGFyYW0ge0hlYWRlcnN9IGhlYWRlcnNcbiAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fVxuICovXG5mdW5jdGlvbiBnZXRDb29raWVzIChoZWFkZXJzKSB7XG4gIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdnZXRDb29raWVzJyB9KVxuXG4gIHdlYmlkbC5icmFuZENoZWNrKGhlYWRlcnMsIEhlYWRlcnMsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gIGNvbnN0IGNvb2tpZSA9IGhlYWRlcnMuZ2V0KCdjb29raWUnKVxuICBjb25zdCBvdXQgPSB7fVxuXG4gIGlmICghY29va2llKSB7XG4gICAgcmV0dXJuIG91dFxuICB9XG5cbiAgZm9yIChjb25zdCBwaWVjZSBvZiBjb29raWUuc3BsaXQoJzsnKSkge1xuICAgIGNvbnN0IFtuYW1lLCAuLi52YWx1ZV0gPSBwaWVjZS5zcGxpdCgnPScpXG5cbiAgICBvdXRbbmFtZS50cmltKCldID0gdmFsdWUuam9pbignPScpXG4gIH1cblxuICByZXR1cm4gb3V0XG59XG5cbi8qKlxuICogQHBhcmFtIHtIZWFkZXJzfSBoZWFkZXJzXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHt7IHBhdGg/OiBzdHJpbmcsIGRvbWFpbj86IHN0cmluZyB9fHVuZGVmaW5lZH0gYXR0cmlidXRlc1xuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIGRlbGV0ZUNvb2tpZSAoaGVhZGVycywgbmFtZSwgYXR0cmlidXRlcykge1xuICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnZGVsZXRlQ29va2llJyB9KVxuXG4gIHdlYmlkbC5icmFuZENoZWNrKGhlYWRlcnMsIEhlYWRlcnMsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcobmFtZSlcbiAgYXR0cmlidXRlcyA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRlbGV0ZUNvb2tpZUF0dHJpYnV0ZXMoYXR0cmlidXRlcylcblxuICAvLyBNYXRjaGVzIGJlaGF2aW9yIG9mXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9kZW5vbGFuZC9kZW5vX3N0ZC9ibG9iLzYzODI3YjE2MzMwYjgyNDg5YTA0NjE0MDI3YzMzYjc5MDRlMDhiZTUvaHR0cC9jb29raWUudHMjTDI3OFxuICBzZXRDb29raWUoaGVhZGVycywge1xuICAgIG5hbWUsXG4gICAgdmFsdWU6ICcnLFxuICAgIGV4cGlyZXM6IG5ldyBEYXRlKDApLFxuICAgIC4uLmF0dHJpYnV0ZXNcbiAgfSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0hlYWRlcnN9IGhlYWRlcnNcbiAqIEByZXR1cm5zIHtDb29raWVbXX1cbiAqL1xuZnVuY3Rpb24gZ2V0U2V0Q29va2llcyAoaGVhZGVycykge1xuICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnZ2V0U2V0Q29va2llcycgfSlcblxuICB3ZWJpZGwuYnJhbmRDaGVjayhoZWFkZXJzLCBIZWFkZXJzLCB7IHN0cmljdDogZmFsc2UgfSlcblxuICBjb25zdCBjb29raWVzID0gZ2V0SGVhZGVyc0xpc3QoaGVhZGVycykuY29va2llc1xuXG4gIGlmICghY29va2llcykge1xuICAgIHJldHVybiBbXVxuICB9XG5cbiAgLy8gSW4gb2xkZXIgdmVyc2lvbnMgb2YgdW5kaWNpLCBjb29raWVzIGlzIGEgbGlzdCBvZiBuYW1lOnZhbHVlLlxuICByZXR1cm4gY29va2llcy5tYXAoKHBhaXIpID0+IHBhcnNlU2V0Q29va2llKEFycmF5LmlzQXJyYXkocGFpcikgPyBwYWlyWzFdIDogcGFpcikpXG59XG5cbi8qKlxuICogQHBhcmFtIHtIZWFkZXJzfSBoZWFkZXJzXG4gKiBAcGFyYW0ge0Nvb2tpZX0gY29va2llXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gc2V0Q29va2llIChoZWFkZXJzLCBjb29raWUpIHtcbiAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAyLCB7IGhlYWRlcjogJ3NldENvb2tpZScgfSlcblxuICB3ZWJpZGwuYnJhbmRDaGVjayhoZWFkZXJzLCBIZWFkZXJzLCB7IHN0cmljdDogZmFsc2UgfSlcblxuICBjb29raWUgPSB3ZWJpZGwuY29udmVydGVycy5Db29raWUoY29va2llKVxuXG4gIGNvbnN0IHN0ciA9IHN0cmluZ2lmeShjb29raWUpXG5cbiAgaWYgKHN0cikge1xuICAgIGhlYWRlcnMuYXBwZW5kKCdTZXQtQ29va2llJywgc3RyaW5naWZ5KGNvb2tpZSkpXG4gIH1cbn1cblxud2ViaWRsLmNvbnZlcnRlcnMuRGVsZXRlQ29va2llQXR0cmlidXRlcyA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyksXG4gICAga2V5OiAncGF0aCcsXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcih3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcpLFxuICAgIGtleTogJ2RvbWFpbicsXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH1cbl0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzLkNvb2tpZSA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIGtleTogJ25hbWUnXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICBrZXk6ICd2YWx1ZSdcbiAgfSxcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKCh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBsb25nIGxvbmcnXSh2YWx1ZSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBEYXRlKHZhbHVlKVxuICAgIH0pLFxuICAgIGtleTogJ2V4cGlyZXMnLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbFxuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnNbJ2xvbmcgbG9uZyddKSxcbiAgICBrZXk6ICdtYXhBZ2UnLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbFxuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKSxcbiAgICBrZXk6ICdkb21haW4nLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbFxuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKSxcbiAgICBrZXk6ICdwYXRoJyxcbiAgICBkZWZhdWx0VmFsdWU6IG51bGxcbiAgfSxcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4pLFxuICAgIGtleTogJ3NlY3VyZScsXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcih3ZWJpZGwuY29udmVydGVycy5ib29sZWFuKSxcbiAgICBrZXk6ICdodHRwT25seScsXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyxcbiAgICBrZXk6ICdzYW1lU2l0ZScsXG4gICAgYWxsb3dlZFZhbHVlczogWydTdHJpY3QnLCAnTGF4JywgJ05vbmUnXVxuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKSxcbiAgICBrZXk6ICd1bnBhcnNlZCcsXG4gICAgZGVmYXVsdFZhbHVlOiBbXVxuICB9XG5dKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0Q29va2llcyxcbiAgZGVsZXRlQ29va2llLFxuICBnZXRTZXRDb29raWVzLFxuICBzZXRDb29raWVcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbi8vIFRoaXMgaXMgYSBHbG9iYWxseSBVbmlxdWUgSWRlbnRpZmllciB1bmlxdWUgdXNlZFxuLy8gdG8gdmFsaWRhdGUgdGhhdCB0aGUgZW5kcG9pbnQgYWNjZXB0cyB3ZWJzb2NrZXRcbi8vIGNvbm5lY3Rpb25zLlxuLy8gU2VlIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM2NDU1Lmh0bWwjc2VjdGlvbi0xLjNcbmNvbnN0IHVpZCA9ICcyNThFQUZBNS1FOTE0LTQ3REEtOTVDQS1DNUFCMERDODVCMTEnXG5cbi8qKiBAdHlwZSB7UHJvcGVydHlEZXNjcmlwdG9yfSAqL1xuY29uc3Qgc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyA9IHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgd3JpdGFibGU6IGZhbHNlLFxuICBjb25maWd1cmFibGU6IGZhbHNlXG59XG5cbmNvbnN0IHN0YXRlcyA9IHtcbiAgQ09OTkVDVElORzogMCxcbiAgT1BFTjogMSxcbiAgQ0xPU0lORzogMixcbiAgQ0xPU0VEOiAzXG59XG5cbmNvbnN0IG9wY29kZXMgPSB7XG4gIENPTlRJTlVBVElPTjogMHgwLFxuICBURVhUOiAweDEsXG4gIEJJTkFSWTogMHgyLFxuICBDTE9TRTogMHg4LFxuICBQSU5HOiAweDksXG4gIFBPTkc6IDB4QVxufVxuXG5jb25zdCBtYXhVbnNpZ25lZDE2Qml0ID0gMiAqKiAxNiAtIDEgLy8gNjU1MzVcblxuY29uc3QgcGFyc2VyU3RhdGVzID0ge1xuICBJTkZPOiAwLFxuICBQQVlMT0FETEVOR1RIXzE2OiAyLFxuICBQQVlMT0FETEVOR1RIXzY0OiAzLFxuICBSRUFEX0RBVEE6IDRcbn1cblxuY29uc3QgZW1wdHlCdWZmZXIgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMClcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHVpZCxcbiAgc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgc3RhdGVzLFxuICBvcGNvZGVzLFxuICBtYXhVbnNpZ25lZDE2Qml0LFxuICBwYXJzZXJTdGF0ZXMsXG4gIGVtcHR5QnVmZmVyXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAga1dlYlNvY2tldFVSTDogU3ltYm9sKCd1cmwnKSxcbiAga1JlYWR5U3RhdGU6IFN5bWJvbCgncmVhZHkgc3RhdGUnKSxcbiAga0NvbnRyb2xsZXI6IFN5bWJvbCgnY29udHJvbGxlcicpLFxuICBrUmVzcG9uc2U6IFN5bWJvbCgncmVzcG9uc2UnKSxcbiAga0JpbmFyeVR5cGU6IFN5bWJvbCgnYmluYXJ5IHR5cGUnKSxcbiAga1NlbnRDbG9zZTogU3ltYm9sKCdzZW50IGNsb3NlJyksXG4gIGtSZWNlaXZlZENsb3NlOiBTeW1ib2woJ3JlY2VpdmVkIGNsb3NlJyksXG4gIGtCeXRlUGFyc2VyOiBTeW1ib2woJ2J5dGUgcGFyc2VyJylcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuLi9mZXRjaC93ZWJpZGwnKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5IH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBNZXNzYWdlUG9ydCB9ID0gcmVxdWlyZSgnd29ya2VyX3RocmVhZHMnKVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvY29tbXMuaHRtbCNtZXNzYWdlZXZlbnRcbiAqL1xuY2xhc3MgTWVzc2FnZUV2ZW50IGV4dGVuZHMgRXZlbnQge1xuICAjZXZlbnRJbml0XG5cbiAgY29uc3RydWN0b3IgKHR5cGUsIGV2ZW50SW5pdERpY3QgPSB7fSkge1xuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdNZXNzYWdlRXZlbnQgY29uc3RydWN0b3InIH0pXG5cbiAgICB0eXBlID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKHR5cGUpXG4gICAgZXZlbnRJbml0RGljdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLk1lc3NhZ2VFdmVudEluaXQoZXZlbnRJbml0RGljdClcblxuICAgIHN1cGVyKHR5cGUsIGV2ZW50SW5pdERpY3QpXG5cbiAgICB0aGlzLiNldmVudEluaXQgPSBldmVudEluaXREaWN0XG4gIH1cblxuICBnZXQgZGF0YSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgTWVzc2FnZUV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5kYXRhXG4gIH1cblxuICBnZXQgb3JpZ2luICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBNZXNzYWdlRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0Lm9yaWdpblxuICB9XG5cbiAgZ2V0IGxhc3RFdmVudElkICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBNZXNzYWdlRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0Lmxhc3RFdmVudElkXG4gIH1cblxuICBnZXQgc291cmNlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBNZXNzYWdlRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LnNvdXJjZVxuICB9XG5cbiAgZ2V0IHBvcnRzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBNZXNzYWdlRXZlbnQpXG5cbiAgICBpZiAoIU9iamVjdC5pc0Zyb3plbih0aGlzLiNldmVudEluaXQucG9ydHMpKSB7XG4gICAgICBPYmplY3QuZnJlZXplKHRoaXMuI2V2ZW50SW5pdC5wb3J0cylcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LnBvcnRzXG4gIH1cblxuICBpbml0TWVzc2FnZUV2ZW50IChcbiAgICB0eXBlLFxuICAgIGJ1YmJsZXMgPSBmYWxzZSxcbiAgICBjYW5jZWxhYmxlID0gZmFsc2UsXG4gICAgZGF0YSA9IG51bGwsXG4gICAgb3JpZ2luID0gJycsXG4gICAgbGFzdEV2ZW50SWQgPSAnJyxcbiAgICBzb3VyY2UgPSBudWxsLFxuICAgIHBvcnRzID0gW11cbiAgKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgTWVzc2FnZUV2ZW50KVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ01lc3NhZ2VFdmVudC5pbml0TWVzc2FnZUV2ZW50JyB9KVxuXG4gICAgcmV0dXJuIG5ldyBNZXNzYWdlRXZlbnQodHlwZSwge1xuICAgICAgYnViYmxlcywgY2FuY2VsYWJsZSwgZGF0YSwgb3JpZ2luLCBsYXN0RXZlbnRJZCwgc291cmNlLCBwb3J0c1xuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI3RoZS1jbG9zZWV2ZW50LWludGVyZmFjZVxuICovXG5jbGFzcyBDbG9zZUV2ZW50IGV4dGVuZHMgRXZlbnQge1xuICAjZXZlbnRJbml0XG5cbiAgY29uc3RydWN0b3IgKHR5cGUsIGV2ZW50SW5pdERpY3QgPSB7fSkge1xuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdDbG9zZUV2ZW50IGNvbnN0cnVjdG9yJyB9KVxuXG4gICAgdHlwZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyh0eXBlKVxuICAgIGV2ZW50SW5pdERpY3QgPSB3ZWJpZGwuY29udmVydGVycy5DbG9zZUV2ZW50SW5pdChldmVudEluaXREaWN0KVxuXG4gICAgc3VwZXIodHlwZSwgZXZlbnRJbml0RGljdClcblxuICAgIHRoaXMuI2V2ZW50SW5pdCA9IGV2ZW50SW5pdERpY3RcbiAgfVxuXG4gIGdldCB3YXNDbGVhbiAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2xvc2VFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQud2FzQ2xlYW5cbiAgfVxuXG4gIGdldCBjb2RlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDbG9zZUV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5jb2RlXG4gIH1cblxuICBnZXQgcmVhc29uICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDbG9zZUV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5yZWFzb25cbiAgfVxufVxuXG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS93ZWJhcHBhcGlzLmh0bWwjdGhlLWVycm9yZXZlbnQtaW50ZXJmYWNlXG5jbGFzcyBFcnJvckV2ZW50IGV4dGVuZHMgRXZlbnQge1xuICAjZXZlbnRJbml0XG5cbiAgY29uc3RydWN0b3IgKHR5cGUsIGV2ZW50SW5pdERpY3QpIHtcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRXJyb3JFdmVudCBjb25zdHJ1Y3RvcicgfSlcblxuICAgIHN1cGVyKHR5cGUsIGV2ZW50SW5pdERpY3QpXG5cbiAgICB0eXBlID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKHR5cGUpXG4gICAgZXZlbnRJbml0RGljdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLkVycm9yRXZlbnRJbml0KGV2ZW50SW5pdERpY3QgPz8ge30pXG5cbiAgICB0aGlzLiNldmVudEluaXQgPSBldmVudEluaXREaWN0XG4gIH1cblxuICBnZXQgbWVzc2FnZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRXJyb3JFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQubWVzc2FnZVxuICB9XG5cbiAgZ2V0IGZpbGVuYW1lICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBFcnJvckV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5maWxlbmFtZVxuICB9XG5cbiAgZ2V0IGxpbmVubyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRXJyb3JFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQubGluZW5vXG4gIH1cblxuICBnZXQgY29sbm8gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEVycm9yRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LmNvbG5vXG4gIH1cblxuICBnZXQgZXJyb3IgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEVycm9yRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LmVycm9yXG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTWVzc2FnZUV2ZW50LnByb3RvdHlwZSwge1xuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnTWVzc2FnZUV2ZW50JyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSxcbiAgZGF0YToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb3JpZ2luOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBsYXN0RXZlbnRJZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgc291cmNlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBwb3J0czoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgaW5pdE1lc3NhZ2VFdmVudDoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2xvc2VFdmVudC5wcm90b3R5cGUsIHtcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0Nsb3NlRXZlbnQnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9LFxuICByZWFzb246IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNvZGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHdhc0NsZWFuOiBrRW51bWVyYWJsZVByb3BlcnR5XG59KVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhFcnJvckV2ZW50LnByb3RvdHlwZSwge1xuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnRXJyb3JFdmVudCcsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0sXG4gIG1lc3NhZ2U6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGZpbGVuYW1lOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBsaW5lbm86IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNvbG5vOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBlcnJvcjoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxud2ViaWRsLmNvbnZlcnRlcnMuTWVzc2FnZVBvcnQgPSB3ZWJpZGwuaW50ZXJmYWNlQ29udmVydGVyKE1lc3NhZ2VQb3J0KVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8TWVzc2FnZVBvcnQ+J10gPSB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLk1lc3NhZ2VQb3J0XG4pXG5cbmNvbnN0IGV2ZW50SW5pdCA9IFtcbiAge1xuICAgIGtleTogJ2J1YmJsZXMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjYW5jZWxhYmxlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4sXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZVxuICB9LFxuICB7XG4gICAga2V5OiAnY29tcG9zZWQnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH1cbl1cblxud2ViaWRsLmNvbnZlcnRlcnMuTWVzc2FnZUV2ZW50SW5pdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAgLi4uZXZlbnRJbml0LFxuICB7XG4gICAga2V5OiAnZGF0YScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5hbnksXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdvcmlnaW4nLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZTogJydcbiAgfSxcbiAge1xuICAgIGtleTogJ2xhc3RFdmVudElkJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6ICcnXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdzb3VyY2UnLFxuICAgIC8vIE5vZGUgZG9lc24ndCBpbXBsZW1lbnQgV2luZG93UHJveHkgb3IgU2VydmljZVdvcmtlciwgc28gdGhlIG9ubHlcbiAgICAvLyB2YWxpZCB2YWx1ZSBmb3Igc291cmNlIGlzIGEgTWVzc2FnZVBvcnQuXG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuTWVzc2FnZVBvcnQpLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbFxuICB9LFxuICB7XG4gICAga2V5OiAncG9ydHMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPE1lc3NhZ2VQb3J0PiddLFxuICAgIGdldCBkZWZhdWx0VmFsdWUgKCkge1xuICAgICAgcmV0dXJuIFtdXG4gICAgfVxuICB9XG5dKVxuXG53ZWJpZGwuY29udmVydGVycy5DbG9zZUV2ZW50SW5pdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAgLi4uZXZlbnRJbml0LFxuICB7XG4gICAga2V5OiAnd2FzQ2xlYW4nLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjb2RlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBzaG9ydCddLFxuICAgIGRlZmF1bHRWYWx1ZTogMFxuICB9LFxuICB7XG4gICAga2V5OiAncmVhc29uJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6ICcnXG4gIH1cbl0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzLkVycm9yRXZlbnRJbml0ID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICAuLi5ldmVudEluaXQsXG4gIHtcbiAgICBrZXk6ICdtZXNzYWdlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6ICcnXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdmaWxlbmFtZScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcsXG4gICAgZGVmYXVsdFZhbHVlOiAnJ1xuICB9LFxuICB7XG4gICAga2V5OiAnbGluZW5vJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBsb25nJ10sXG4gICAgZGVmYXVsdFZhbHVlOiAwXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjb2xubycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgbG9uZyddLFxuICAgIGRlZmF1bHRWYWx1ZTogMFxuICB9LFxuICB7XG4gICAga2V5OiAnZXJyb3InLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYW55XG4gIH1cbl0pXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBNZXNzYWdlRXZlbnQsXG4gIENsb3NlRXZlbnQsXG4gIEVycm9yRXZlbnRcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsga1JlYWR5U3RhdGUsIGtDb250cm9sbGVyLCBrUmVzcG9uc2UsIGtCaW5hcnlUeXBlLCBrV2ViU29ja2V0VVJMIH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBzdGF0ZXMsIG9wY29kZXMgfSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IHsgTWVzc2FnZUV2ZW50LCBFcnJvckV2ZW50IH0gPSByZXF1aXJlKCcuL2V2ZW50cycpXG5cbi8qIGdsb2JhbHMgQmxvYiAqL1xuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL3dlYnNvY2tldCcpLldlYlNvY2tldH0gd3NcbiAqL1xuZnVuY3Rpb24gaXNFc3RhYmxpc2hlZCAod3MpIHtcbiAgLy8gSWYgdGhlIHNlcnZlcidzIHJlc3BvbnNlIGlzIHZhbGlkYXRlZCBhcyBwcm92aWRlZCBmb3IgYWJvdmUsIGl0IGlzXG4gIC8vIHNhaWQgdGhhdCBfVGhlIFdlYlNvY2tldCBDb25uZWN0aW9uIGlzIEVzdGFibGlzaGVkXyBhbmQgdGhhdCB0aGVcbiAgLy8gV2ViU29ja2V0IENvbm5lY3Rpb24gaXMgaW4gdGhlIE9QRU4gc3RhdGUuXG4gIHJldHVybiB3c1trUmVhZHlTdGF0ZV0gPT09IHN0YXRlcy5PUEVOXG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vd2Vic29ja2V0JykuV2ViU29ja2V0fSB3c1xuICovXG5mdW5jdGlvbiBpc0Nsb3NpbmcgKHdzKSB7XG4gIC8vIFVwb24gZWl0aGVyIHNlbmRpbmcgb3IgcmVjZWl2aW5nIGEgQ2xvc2UgY29udHJvbCBmcmFtZSwgaXQgaXMgc2FpZFxuICAvLyB0aGF0IF9UaGUgV2ViU29ja2V0IENsb3NpbmcgSGFuZHNoYWtlIGlzIFN0YXJ0ZWRfIGFuZCB0aGF0IHRoZVxuICAvLyBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBpbiB0aGUgQ0xPU0lORyBzdGF0ZS5cbiAgcmV0dXJuIHdzW2tSZWFkeVN0YXRlXSA9PT0gc3RhdGVzLkNMT1NJTkdcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi93ZWJzb2NrZXQnKS5XZWJTb2NrZXR9IHdzXG4gKi9cbmZ1bmN0aW9uIGlzQ2xvc2VkICh3cykge1xuICByZXR1cm4gd3Nba1JlYWR5U3RhdGVdID09PSBzdGF0ZXMuQ0xPU0VEXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtZXZlbnQtZmlyZVxuICogQHBhcmFtIHtzdHJpbmd9IGVcbiAqIEBwYXJhbSB7RXZlbnRUYXJnZXR9IHRhcmdldFxuICogQHBhcmFtIHtFdmVudEluaXQgfCB1bmRlZmluZWR9IGV2ZW50SW5pdERpY3RcbiAqL1xuZnVuY3Rpb24gZmlyZUV2ZW50IChlLCB0YXJnZXQsIGV2ZW50Q29uc3RydWN0b3IgPSBFdmVudCwgZXZlbnRJbml0RGljdCkge1xuICAvLyAxLiBJZiBldmVudENvbnN0cnVjdG9yIGlzIG5vdCBnaXZlbiwgdGhlbiBsZXQgZXZlbnRDb25zdHJ1Y3RvciBiZSBFdmVudC5cblxuICAvLyAyLiBMZXQgZXZlbnQgYmUgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhbiBldmVudCBnaXZlbiBldmVudENvbnN0cnVjdG9yLFxuICAvLyAgICBpbiB0aGUgcmVsZXZhbnQgcmVhbG0gb2YgdGFyZ2V0LlxuICAvLyAzLiBJbml0aWFsaXplIGV2ZW504oCZcyB0eXBlIGF0dHJpYnV0ZSB0byBlLlxuICBjb25zdCBldmVudCA9IG5ldyBldmVudENvbnN0cnVjdG9yKGUsIGV2ZW50SW5pdERpY3QpIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbmV3LWNhcFxuXG4gIC8vIDQuIEluaXRpYWxpemUgYW55IG90aGVyIElETCBhdHRyaWJ1dGVzIG9mIGV2ZW50IGFzIGRlc2NyaWJlZCBpbiB0aGVcbiAgLy8gICAgaW52b2NhdGlvbiBvZiB0aGlzIGFsZ29yaXRobS5cblxuICAvLyA1LiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBkaXNwYXRjaGluZyBldmVudCBhdCB0YXJnZXQsIHdpdGggbGVnYWN5IHRhcmdldFxuICAvLyAgICBvdmVycmlkZSBmbGFnIHNldCBpZiBzZXQuXG4gIHRhcmdldC5kaXNwYXRjaEV2ZW50KGV2ZW50KVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZmVlZGJhY2stZnJvbS10aGUtcHJvdG9jb2xcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL3dlYnNvY2tldCcpLldlYlNvY2tldH0gd3NcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlIE9wY29kZVxuICogQHBhcmFtIHtCdWZmZXJ9IGRhdGEgYXBwbGljYXRpb24gZGF0YVxuICovXG5mdW5jdGlvbiB3ZWJzb2NrZXRNZXNzYWdlUmVjZWl2ZWQgKHdzLCB0eXBlLCBkYXRhKSB7XG4gIC8vIDEuIElmIHJlYWR5IHN0YXRlIGlzIG5vdCBPUEVOICgxKSwgdGhlbiByZXR1cm4uXG4gIGlmICh3c1trUmVhZHlTdGF0ZV0gIT09IHN0YXRlcy5PUEVOKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyAyLiBMZXQgZGF0YUZvckV2ZW50IGJlIGRldGVybWluZWQgYnkgc3dpdGNoaW5nIG9uIHR5cGUgYW5kIGJpbmFyeSB0eXBlOlxuICBsZXQgZGF0YUZvckV2ZW50XG5cbiAgaWYgKHR5cGUgPT09IG9wY29kZXMuVEVYVCkge1xuICAgIC8vIC0+IHR5cGUgaW5kaWNhdGVzIHRoYXQgdGhlIGRhdGEgaXMgVGV4dFxuICAgIC8vICAgICAgYSBuZXcgRE9NU3RyaW5nIGNvbnRhaW5pbmcgZGF0YVxuICAgIHRyeSB7XG4gICAgICBkYXRhRm9yRXZlbnQgPSBuZXcgVGV4dERlY29kZXIoJ3V0Zi04JywgeyBmYXRhbDogdHJ1ZSB9KS5kZWNvZGUoZGF0YSlcbiAgICB9IGNhdGNoIHtcbiAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnUmVjZWl2ZWQgaW52YWxpZCBVVEYtOCBpbiB0ZXh0IGZyYW1lLicpXG4gICAgICByZXR1cm5cbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gb3Bjb2Rlcy5CSU5BUlkpIHtcbiAgICBpZiAod3Nba0JpbmFyeVR5cGVdID09PSAnYmxvYicpIHtcbiAgICAgIC8vIC0+IHR5cGUgaW5kaWNhdGVzIHRoYXQgdGhlIGRhdGEgaXMgQmluYXJ5IGFuZCBiaW5hcnkgdHlwZSBpcyBcImJsb2JcIlxuICAgICAgLy8gICAgICBhIG5ldyBCbG9iIG9iamVjdCwgY3JlYXRlZCBpbiB0aGUgcmVsZXZhbnQgUmVhbG0gb2YgdGhlIFdlYlNvY2tldFxuICAgICAgLy8gICAgICBvYmplY3QsIHRoYXQgcmVwcmVzZW50cyBkYXRhIGFzIGl0cyByYXcgZGF0YVxuICAgICAgZGF0YUZvckV2ZW50ID0gbmV3IEJsb2IoW2RhdGFdKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyAtPiB0eXBlIGluZGljYXRlcyB0aGF0IHRoZSBkYXRhIGlzIEJpbmFyeSBhbmQgYmluYXJ5IHR5cGUgaXMgXCJhcnJheWJ1ZmZlclwiXG4gICAgICAvLyAgICAgIGEgbmV3IEFycmF5QnVmZmVyIG9iamVjdCwgY3JlYXRlZCBpbiB0aGUgcmVsZXZhbnQgUmVhbG0gb2YgdGhlXG4gICAgICAvLyAgICAgIFdlYlNvY2tldCBvYmplY3QsIHdob3NlIGNvbnRlbnRzIGFyZSBkYXRhXG4gICAgICBkYXRhRm9yRXZlbnQgPSBuZXcgVWludDhBcnJheShkYXRhKS5idWZmZXJcbiAgICB9XG4gIH1cblxuICAvLyAzLiBGaXJlIGFuIGV2ZW50IG5hbWVkIG1lc3NhZ2UgYXQgdGhlIFdlYlNvY2tldCBvYmplY3QsIHVzaW5nIE1lc3NhZ2VFdmVudCxcbiAgLy8gICAgd2l0aCB0aGUgb3JpZ2luIGF0dHJpYnV0ZSBpbml0aWFsaXplZCB0byB0aGUgc2VyaWFsaXphdGlvbiBvZiB0aGUgV2ViU29ja2V0XG4gIC8vICAgIG9iamVjdOKAmXMgdXJsJ3Mgb3JpZ2luLCBhbmQgdGhlIGRhdGEgYXR0cmlidXRlIGluaXRpYWxpemVkIHRvIGRhdGFGb3JFdmVudC5cbiAgZmlyZUV2ZW50KCdtZXNzYWdlJywgd3MsIE1lc3NhZ2VFdmVudCwge1xuICAgIG9yaWdpbjogd3Nba1dlYlNvY2tldFVSTF0ub3JpZ2luLFxuICAgIGRhdGE6IGRhdGFGb3JFdmVudFxuICB9KVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1XG4gKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMjYxNlxuICogQHNlZSBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0zOTg0MDdcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm90b2NvbFxuICovXG5mdW5jdGlvbiBpc1ZhbGlkU3VicHJvdG9jb2wgKHByb3RvY29sKSB7XG4gIC8vIElmIHByZXNlbnQsIHRoaXMgdmFsdWUgaW5kaWNhdGVzIG9uZVxuICAvLyBvciBtb3JlIGNvbW1hLXNlcGFyYXRlZCBzdWJwcm90b2NvbCB0aGUgY2xpZW50IHdpc2hlcyB0byBzcGVhayxcbiAgLy8gb3JkZXJlZCBieSBwcmVmZXJlbmNlLiAgVGhlIGVsZW1lbnRzIHRoYXQgY29tcHJpc2UgdGhpcyB2YWx1ZVxuICAvLyBNVVNUIGJlIG5vbi1lbXB0eSBzdHJpbmdzIHdpdGggY2hhcmFjdGVycyBpbiB0aGUgcmFuZ2UgVSswMDIxIHRvXG4gIC8vIFUrMDA3RSBub3QgaW5jbHVkaW5nIHNlcGFyYXRvciBjaGFyYWN0ZXJzIGFzIGRlZmluZWQgaW5cbiAgLy8gW1JGQzI2MTZdIGFuZCBNVVNUIGFsbCBiZSB1bmlxdWUgc3RyaW5ncy5cbiAgaWYgKHByb3RvY29sLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgZm9yIChjb25zdCBjaGFyIG9mIHByb3RvY29sKSB7XG4gICAgY29uc3QgY29kZSA9IGNoYXIuY2hhckNvZGVBdCgwKVxuXG4gICAgaWYgKFxuICAgICAgY29kZSA8IDB4MjEgfHxcbiAgICAgIGNvZGUgPiAweDdFIHx8XG4gICAgICBjaGFyID09PSAnKCcgfHxcbiAgICAgIGNoYXIgPT09ICcpJyB8fFxuICAgICAgY2hhciA9PT0gJzwnIHx8XG4gICAgICBjaGFyID09PSAnPicgfHxcbiAgICAgIGNoYXIgPT09ICdAJyB8fFxuICAgICAgY2hhciA9PT0gJywnIHx8XG4gICAgICBjaGFyID09PSAnOycgfHxcbiAgICAgIGNoYXIgPT09ICc6JyB8fFxuICAgICAgY2hhciA9PT0gJ1xcXFwnIHx8XG4gICAgICBjaGFyID09PSAnXCInIHx8XG4gICAgICBjaGFyID09PSAnLycgfHxcbiAgICAgIGNoYXIgPT09ICdbJyB8fFxuICAgICAgY2hhciA9PT0gJ10nIHx8XG4gICAgICBjaGFyID09PSAnPycgfHxcbiAgICAgIGNoYXIgPT09ICc9JyB8fFxuICAgICAgY2hhciA9PT0gJ3snIHx8XG4gICAgICBjaGFyID09PSAnfScgfHxcbiAgICAgIGNvZGUgPT09IDMyIHx8IC8vIFNQXG4gICAgICBjb2RlID09PSA5IC8vIEhUXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tNy00XG4gKiBAcGFyYW0ge251bWJlcn0gY29kZVxuICovXG5mdW5jdGlvbiBpc1ZhbGlkU3RhdHVzQ29kZSAoY29kZSkge1xuICBpZiAoY29kZSA+PSAxMDAwICYmIGNvZGUgPCAxMDE1KSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGNvZGUgIT09IDEwMDQgJiYgLy8gcmVzZXJ2ZWRcbiAgICAgIGNvZGUgIT09IDEwMDUgJiYgLy8gXCJNVVNUIE5PVCBiZSBzZXQgYXMgYSBzdGF0dXMgY29kZVwiXG4gICAgICBjb2RlICE9PSAxMDA2IC8vIFwiTVVTVCBOT1QgYmUgc2V0IGFzIGEgc3RhdHVzIGNvZGVcIlxuICAgIClcbiAgfVxuXG4gIHJldHVybiBjb2RlID49IDMwMDAgJiYgY29kZSA8PSA0OTk5XG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vd2Vic29ja2V0JykuV2ViU29ja2V0fSB3c1xuICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSByZWFzb25cbiAqL1xuZnVuY3Rpb24gZmFpbFdlYnNvY2tldENvbm5lY3Rpb24gKHdzLCByZWFzb24pIHtcbiAgY29uc3QgeyBba0NvbnRyb2xsZXJdOiBjb250cm9sbGVyLCBba1Jlc3BvbnNlXTogcmVzcG9uc2UgfSA9IHdzXG5cbiAgY29udHJvbGxlci5hYm9ydCgpXG5cbiAgaWYgKHJlc3BvbnNlPy5zb2NrZXQgJiYgIXJlc3BvbnNlLnNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICByZXNwb25zZS5zb2NrZXQuZGVzdHJveSgpXG4gIH1cblxuICBpZiAocmVhc29uKSB7XG4gICAgZmlyZUV2ZW50KCdlcnJvcicsIHdzLCBFcnJvckV2ZW50LCB7XG4gICAgICBlcnJvcjogbmV3IEVycm9yKHJlYXNvbilcbiAgICB9KVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc0VzdGFibGlzaGVkLFxuICBpc0Nsb3NpbmcsXG4gIGlzQ2xvc2VkLFxuICBmaXJlRXZlbnQsXG4gIGlzVmFsaWRTdWJwcm90b2NvbCxcbiAgaXNWYWxpZFN0YXR1c0NvZGUsXG4gIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uLFxuICB3ZWJzb2NrZXRNZXNzYWdlUmVjZWl2ZWRcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGRpYWdub3N0aWNzQ2hhbm5lbCA9IHJlcXVpcmUoJ2RpYWdub3N0aWNzX2NoYW5uZWwnKVxuY29uc3QgeyB1aWQsIHN0YXRlcyB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3Qge1xuICBrUmVhZHlTdGF0ZSxcbiAga1NlbnRDbG9zZSxcbiAga0J5dGVQYXJzZXIsXG4gIGtSZWNlaXZlZENsb3NlXG59ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgZmlyZUV2ZW50LCBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbiB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgQ2xvc2VFdmVudCB9ID0gcmVxdWlyZSgnLi9ldmVudHMnKVxuY29uc3QgeyBtYWtlUmVxdWVzdCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvcmVxdWVzdCcpXG5jb25zdCB7IGZldGNoaW5nIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9pbmRleCcpXG5jb25zdCB7IEhlYWRlcnMgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2hlYWRlcnMnKVxuY29uc3QgeyBnZXRHbG9iYWxEaXNwYXRjaGVyIH0gPSByZXF1aXJlKCcuLi9nbG9iYWwnKVxuY29uc3QgeyBrSGVhZGVyc0xpc3QgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5cbmNvbnN0IGNoYW5uZWxzID0ge31cbmNoYW5uZWxzLm9wZW4gPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOndlYnNvY2tldDpvcGVuJylcbmNoYW5uZWxzLmNsb3NlID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTp3ZWJzb2NrZXQ6Y2xvc2UnKVxuY2hhbm5lbHMuc29ja2V0RXJyb3IgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOndlYnNvY2tldDpzb2NrZXRfZXJyb3InKVxuXG4vKiogQHR5cGUge2ltcG9ydCgnY3J5cHRvJyl9ICovXG5sZXQgY3J5cHRvXG50cnkge1xuICBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKVxufSBjYXRjaCB7XG5cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtd2Vic29ja2V0LWVzdGFibGlzaFxuICogQHBhcmFtIHtVUkx9IHVybFxuICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IHByb3RvY29sc1xuICogQHBhcmFtIHtpbXBvcnQoJy4vd2Vic29ja2V0JykuV2ViU29ja2V0fSB3c1xuICogQHBhcmFtIHsocmVzcG9uc2U6IGFueSkgPT4gdm9pZH0gb25Fc3RhYmxpc2hcbiAqIEBwYXJhbSB7UGFydGlhbDxpbXBvcnQoJy4uLy4uL3R5cGVzL3dlYnNvY2tldCcpLldlYlNvY2tldEluaXQ+fSBvcHRpb25zXG4gKi9cbmZ1bmN0aW9uIGVzdGFibGlzaFdlYlNvY2tldENvbm5lY3Rpb24gKHVybCwgcHJvdG9jb2xzLCB3cywgb25Fc3RhYmxpc2gsIG9wdGlvbnMpIHtcbiAgLy8gMS4gTGV0IHJlcXVlc3RVUkwgYmUgYSBjb3B5IG9mIHVybCwgd2l0aCBpdHMgc2NoZW1lIHNldCB0byBcImh0dHBcIiwgaWYgdXJs4oCZc1xuICAvLyAgICBzY2hlbWUgaXMgXCJ3c1wiLCBhbmQgdG8gXCJodHRwc1wiIG90aGVyd2lzZS5cbiAgY29uc3QgcmVxdWVzdFVSTCA9IHVybFxuXG4gIHJlcXVlc3RVUkwucHJvdG9jb2wgPSB1cmwucHJvdG9jb2wgPT09ICd3czonID8gJ2h0dHA6JyA6ICdodHRwczonXG5cbiAgLy8gMi4gTGV0IHJlcXVlc3QgYmUgYSBuZXcgcmVxdWVzdCwgd2hvc2UgVVJMIGlzIHJlcXVlc3RVUkwsIGNsaWVudCBpcyBjbGllbnQsXG4gIC8vICAgIHNlcnZpY2Utd29ya2VycyBtb2RlIGlzIFwibm9uZVwiLCByZWZlcnJlciBpcyBcIm5vLXJlZmVycmVyXCIsIG1vZGUgaXNcbiAgLy8gICAgXCJ3ZWJzb2NrZXRcIiwgY3JlZGVudGlhbHMgbW9kZSBpcyBcImluY2x1ZGVcIiwgY2FjaGUgbW9kZSBpcyBcIm5vLXN0b3JlXCIgLFxuICAvLyAgICBhbmQgcmVkaXJlY3QgbW9kZSBpcyBcImVycm9yXCIuXG4gIGNvbnN0IHJlcXVlc3QgPSBtYWtlUmVxdWVzdCh7XG4gICAgdXJsTGlzdDogW3JlcXVlc3RVUkxdLFxuICAgIHNlcnZpY2VXb3JrZXJzOiAnbm9uZScsXG4gICAgcmVmZXJyZXI6ICduby1yZWZlcnJlcicsXG4gICAgbW9kZTogJ3dlYnNvY2tldCcsXG4gICAgY3JlZGVudGlhbHM6ICdpbmNsdWRlJyxcbiAgICBjYWNoZTogJ25vLXN0b3JlJyxcbiAgICByZWRpcmVjdDogJ2Vycm9yJ1xuICB9KVxuXG4gIC8vIE5vdGU6IHVuZGljaSBleHRlbnNpb24sIGFsbG93IHNldHRpbmcgY3VzdG9tIGhlYWRlcnMuXG4gIGlmIChvcHRpb25zLmhlYWRlcnMpIHtcbiAgICBjb25zdCBoZWFkZXJzTGlzdCA9IG5ldyBIZWFkZXJzKG9wdGlvbnMuaGVhZGVycylba0hlYWRlcnNMaXN0XVxuXG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdCA9IGhlYWRlcnNMaXN0XG4gIH1cblxuICAvLyAzLiBBcHBlbmQgKGBVcGdyYWRlYCwgYHdlYnNvY2tldGApIHRvIHJlcXVlc3TigJlzIGhlYWRlciBsaXN0LlxuICAvLyA0LiBBcHBlbmQgKGBDb25uZWN0aW9uYCwgYFVwZ3JhZGVgKSB0byByZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cbiAgLy8gTm90ZTogYm90aCBvZiB0aGVzZSBhcmUgaGFuZGxlZCBieSB1bmRpY2kgY3VycmVudGx5LlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9ibG9iLzY4YzI2OWM0MTQ0YzQ0NmYzZjEyMjA5NTEzMzhkYWVmNGE2YjVlYzQvbGliL2NsaWVudC5qcyNMMTM5N1xuXG4gIC8vIDUuIExldCBrZXlWYWx1ZSBiZSBhIG5vbmNlIGNvbnNpc3Rpbmcgb2YgYSByYW5kb21seSBzZWxlY3RlZFxuICAvLyAgICAxNi1ieXRlIHZhbHVlIHRoYXQgaGFzIGJlZW4gZm9yZ2l2aW5nLWJhc2U2NC1lbmNvZGVkIGFuZFxuICAvLyAgICBpc29tb3JwaGljIGVuY29kZWQuXG4gIGNvbnN0IGtleVZhbHVlID0gY3J5cHRvLnJhbmRvbUJ5dGVzKDE2KS50b1N0cmluZygnYmFzZTY0JylcblxuICAvLyA2LiBBcHBlbmQgKGBTZWMtV2ViU29ja2V0LUtleWAsIGtleVZhbHVlKSB0byByZXF1ZXN04oCZc1xuICAvLyAgICBoZWFkZXIgbGlzdC5cbiAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ3NlYy13ZWJzb2NrZXQta2V5Jywga2V5VmFsdWUpXG5cbiAgLy8gNy4gQXBwZW5kIChgU2VjLVdlYlNvY2tldC1WZXJzaW9uYCwgYDEzYCkgdG8gcmVxdWVzdOKAmXNcbiAgLy8gICAgaGVhZGVyIGxpc3QuXG4gIHJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdzZWMtd2Vic29ja2V0LXZlcnNpb24nLCAnMTMnKVxuXG4gIC8vIDguIEZvciBlYWNoIHByb3RvY29sIGluIHByb3RvY29scywgY29tYmluZVxuICAvLyAgICAoYFNlYy1XZWJTb2NrZXQtUHJvdG9jb2xgLCBwcm90b2NvbCkgaW4gcmVxdWVzdOKAmXMgaGVhZGVyXG4gIC8vICAgIGxpc3QuXG4gIGZvciAoY29uc3QgcHJvdG9jb2wgb2YgcHJvdG9jb2xzKSB7XG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ3NlYy13ZWJzb2NrZXQtcHJvdG9jb2wnLCBwcm90b2NvbClcbiAgfVxuXG4gIC8vIDkuIExldCBwZXJtZXNzYWdlRGVmbGF0ZSBiZSBhIHVzZXItYWdlbnQgZGVmaW5lZFxuICAvLyAgICBcInBlcm1lc3NhZ2UtZGVmbGF0ZVwiIGV4dGVuc2lvbiBoZWFkZXIgdmFsdWUuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL2dlY2tvLWRldi9ibG9iL2NlNzgyMzRmNWU2NTNhNWQzOTE2ODEzZmY5OTBmMDUzNTEwMjI3YmMvbmV0d2Vyay9wcm90b2NvbC93ZWJzb2NrZXQvV2ViU29ja2V0Q2hhbm5lbC5jcHAjTDI2NzNcbiAgLy8gVE9ETzogZW5hYmxlIG9uY2UgcGVybWVzc2FnZS1kZWZsYXRlIGlzIHN1cHBvcnRlZFxuICBjb25zdCBwZXJtZXNzYWdlRGVmbGF0ZSA9ICcnIC8vICdwZXJtZXNzYWdlLWRlZmxhdGU7IDE1J1xuXG4gIC8vIDEwLiBBcHBlbmQgKGBTZWMtV2ViU29ja2V0LUV4dGVuc2lvbnNgLCBwZXJtZXNzYWdlRGVmbGF0ZSkgdG9cbiAgLy8gICAgIHJlcXVlc3TigJlzIGhlYWRlciBsaXN0LlxuICAvLyByZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnc2VjLXdlYnNvY2tldC1leHRlbnNpb25zJywgcGVybWVzc2FnZURlZmxhdGUpXG5cbiAgLy8gMTEuIEZldGNoIHJlcXVlc3Qgd2l0aCB1c2VQYXJhbGxlbFF1ZXVlIHNldCB0byB0cnVlLCBhbmRcbiAgLy8gICAgIHByb2Nlc3NSZXNwb25zZSBnaXZlbiByZXNwb25zZSBiZWluZyB0aGVzZSBzdGVwczpcbiAgY29uc3QgY29udHJvbGxlciA9IGZldGNoaW5nKHtcbiAgICByZXF1ZXN0LFxuICAgIHVzZVBhcmFsbGVsUXVldWU6IHRydWUsXG4gICAgZGlzcGF0Y2hlcjogb3B0aW9ucy5kaXNwYXRjaGVyID8/IGdldEdsb2JhbERpc3BhdGNoZXIoKSxcbiAgICBwcm9jZXNzUmVzcG9uc2UgKHJlc3BvbnNlKSB7XG4gICAgICAvLyAxLiBJZiByZXNwb25zZSBpcyBhIG5ldHdvcmsgZXJyb3Igb3IgaXRzIHN0YXR1cyBpcyBub3QgMTAxLFxuICAgICAgLy8gICAgZmFpbCB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24uXG4gICAgICBpZiAocmVzcG9uc2UudHlwZSA9PT0gJ2Vycm9yJyB8fCByZXNwb25zZS5zdGF0dXMgIT09IDEwMSkge1xuICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1JlY2VpdmVkIG5ldHdvcmsgZXJyb3Igb3Igbm9uLTEwMSBzdGF0dXMgY29kZS4nKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gMi4gSWYgcHJvdG9jb2xzIGlzIG5vdCB0aGUgZW1wdHkgbGlzdCBhbmQgZXh0cmFjdGluZyBoZWFkZXJcbiAgICAgIC8vICAgIGxpc3QgdmFsdWVzIGdpdmVuIGBTZWMtV2ViU29ja2V0LVByb3RvY29sYCBhbmQgcmVzcG9uc2XigJlzXG4gICAgICAvLyAgICBoZWFkZXIgbGlzdCByZXN1bHRzIGluIG51bGwsIGZhaWx1cmUsIG9yIHRoZSBlbXB0eSBieXRlXG4gICAgICAvLyAgICBzZXF1ZW5jZSwgdGhlbiBmYWlsIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbi5cbiAgICAgIGlmIChwcm90b2NvbHMubGVuZ3RoICE9PSAwICYmICFyZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ1NlYy1XZWJTb2NrZXQtUHJvdG9jb2wnKSkge1xuICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1NlcnZlciBkaWQgbm90IHJlc3BvbmQgd2l0aCBzZW50IHByb3RvY29scy4nKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gMy4gRm9sbG93IHRoZSByZXF1aXJlbWVudHMgc3RhdGVkIHN0ZXAgMiB0byBzdGVwIDYsIGluY2x1c2l2ZSxcbiAgICAgIC8vICAgIG9mIHRoZSBsYXN0IHNldCBvZiBzdGVwcyBpbiBzZWN0aW9uIDQuMSBvZiBUaGUgV2ViU29ja2V0XG4gICAgICAvLyAgICBQcm90b2NvbCB0byB2YWxpZGF0ZSByZXNwb25zZS4gVGhpcyBlaXRoZXIgcmVzdWx0cyBpbiBmYWlsXG4gICAgICAvLyAgICB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gb3IgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzXG4gICAgICAvLyAgICBlc3RhYmxpc2hlZC5cblxuICAgICAgLy8gMi4gSWYgdGhlIHJlc3BvbnNlIGxhY2tzIGFuIHxVcGdyYWRlfCBoZWFkZXIgZmllbGQgb3IgdGhlIHxVcGdyYWRlfFxuICAgICAgLy8gICAgaGVhZGVyIGZpZWxkIGNvbnRhaW5zIGEgdmFsdWUgdGhhdCBpcyBub3QgYW4gQVNDSUkgY2FzZS1cbiAgICAgIC8vICAgIGluc2Vuc2l0aXZlIG1hdGNoIGZvciB0aGUgdmFsdWUgXCJ3ZWJzb2NrZXRcIiwgdGhlIGNsaWVudCBNVVNUXG4gICAgICAvLyAgICBfRmFpbCB0aGUgV2ViU29ja2V0IENvbm5lY3Rpb25fLlxuICAgICAgaWYgKHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnVXBncmFkZScpPy50b0xvd2VyQ2FzZSgpICE9PSAnd2Vic29ja2V0Jykge1xuICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1NlcnZlciBkaWQgbm90IHNldCBVcGdyYWRlIGhlYWRlciB0byBcIndlYnNvY2tldFwiLicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyAzLiBJZiB0aGUgcmVzcG9uc2UgbGFja3MgYSB8Q29ubmVjdGlvbnwgaGVhZGVyIGZpZWxkIG9yIHRoZVxuICAgICAgLy8gICAgfENvbm5lY3Rpb258IGhlYWRlciBmaWVsZCBkb2Vzbid0IGNvbnRhaW4gYSB0b2tlbiB0aGF0IGlzIGFuXG4gICAgICAvLyAgICBBU0NJSSBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvciB0aGUgdmFsdWUgXCJVcGdyYWRlXCIsIHRoZSBjbGllbnRcbiAgICAgIC8vICAgIE1VU1QgX0ZhaWwgdGhlIFdlYlNvY2tldCBDb25uZWN0aW9uXy5cbiAgICAgIGlmIChyZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ0Nvbm5lY3Rpb24nKT8udG9Mb3dlckNhc2UoKSAhPT0gJ3VwZ3JhZGUnKSB7XG4gICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnU2VydmVyIGRpZCBub3Qgc2V0IENvbm5lY3Rpb24gaGVhZGVyIHRvIFwidXBncmFkZVwiLicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyA0LiBJZiB0aGUgcmVzcG9uc2UgbGFja3MgYSB8U2VjLVdlYlNvY2tldC1BY2NlcHR8IGhlYWRlciBmaWVsZCBvclxuICAgICAgLy8gICAgdGhlIHxTZWMtV2ViU29ja2V0LUFjY2VwdHwgY29udGFpbnMgYSB2YWx1ZSBvdGhlciB0aGFuIHRoZVxuICAgICAgLy8gICAgYmFzZTY0LWVuY29kZWQgU0hBLTEgb2YgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlIHxTZWMtV2ViU29ja2V0LVxuICAgICAgLy8gICAgS2V5fCAoYXMgYSBzdHJpbmcsIG5vdCBiYXNlNjQtZGVjb2RlZCkgd2l0aCB0aGUgc3RyaW5nIFwiMjU4RUFGQTUtXG4gICAgICAvLyAgICBFOTE0LTQ3REEtOTVDQS1DNUFCMERDODVCMTFcIiBidXQgaWdub3JpbmcgYW55IGxlYWRpbmcgYW5kXG4gICAgICAvLyAgICB0cmFpbGluZyB3aGl0ZXNwYWNlLCB0aGUgY2xpZW50IE1VU1QgX0ZhaWwgdGhlIFdlYlNvY2tldFxuICAgICAgLy8gICAgQ29ubmVjdGlvbl8uXG4gICAgICBjb25zdCBzZWNXU0FjY2VwdCA9IHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnU2VjLVdlYlNvY2tldC1BY2NlcHQnKVxuICAgICAgY29uc3QgZGlnZXN0ID0gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTEnKS51cGRhdGUoa2V5VmFsdWUgKyB1aWQpLmRpZ2VzdCgnYmFzZTY0JylcbiAgICAgIGlmIChzZWNXU0FjY2VwdCAhPT0gZGlnZXN0KSB7XG4gICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnSW5jb3JyZWN0IGhhc2ggcmVjZWl2ZWQgaW4gU2VjLVdlYlNvY2tldC1BY2NlcHQgaGVhZGVyLicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyA1LiBJZiB0aGUgcmVzcG9uc2UgaW5jbHVkZXMgYSB8U2VjLVdlYlNvY2tldC1FeHRlbnNpb25zfCBoZWFkZXJcbiAgICAgIC8vICAgIGZpZWxkIGFuZCB0aGlzIGhlYWRlciBmaWVsZCBpbmRpY2F0ZXMgdGhlIHVzZSBvZiBhbiBleHRlbnNpb25cbiAgICAgIC8vICAgIHRoYXQgd2FzIG5vdCBwcmVzZW50IGluIHRoZSBjbGllbnQncyBoYW5kc2hha2UgKHRoZSBzZXJ2ZXIgaGFzXG4gICAgICAvLyAgICBpbmRpY2F0ZWQgYW4gZXh0ZW5zaW9uIG5vdCByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCksIHRoZSBjbGllbnRcbiAgICAgIC8vICAgIE1VU1QgX0ZhaWwgdGhlIFdlYlNvY2tldCBDb25uZWN0aW9uXy4gIChUaGUgcGFyc2luZyBvZiB0aGlzXG4gICAgICAvLyAgICBoZWFkZXIgZmllbGQgdG8gZGV0ZXJtaW5lIHdoaWNoIGV4dGVuc2lvbnMgYXJlIHJlcXVlc3RlZCBpc1xuICAgICAgLy8gICAgZGlzY3Vzc2VkIGluIFNlY3Rpb24gOS4xLilcbiAgICAgIGNvbnN0IHNlY0V4dGVuc2lvbiA9IHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnU2VjLVdlYlNvY2tldC1FeHRlbnNpb25zJylcblxuICAgICAgaWYgKHNlY0V4dGVuc2lvbiAhPT0gbnVsbCAmJiBzZWNFeHRlbnNpb24gIT09IHBlcm1lc3NhZ2VEZWZsYXRlKSB7XG4gICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnUmVjZWl2ZWQgZGlmZmVyZW50IHBlcm1lc3NhZ2UtZGVmbGF0ZSB0aGFuIHRoZSBvbmUgc2V0LicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyA2LiBJZiB0aGUgcmVzcG9uc2UgaW5jbHVkZXMgYSB8U2VjLVdlYlNvY2tldC1Qcm90b2NvbHwgaGVhZGVyIGZpZWxkXG4gICAgICAvLyAgICBhbmQgdGhpcyBoZWFkZXIgZmllbGQgaW5kaWNhdGVzIHRoZSB1c2Ugb2YgYSBzdWJwcm90b2NvbCB0aGF0IHdhc1xuICAgICAgLy8gICAgbm90IHByZXNlbnQgaW4gdGhlIGNsaWVudCdzIGhhbmRzaGFrZSAodGhlIHNlcnZlciBoYXMgaW5kaWNhdGVkIGFcbiAgICAgIC8vICAgIHN1YnByb3RvY29sIG5vdCByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCksIHRoZSBjbGllbnQgTVVTVCBfRmFpbFxuICAgICAgLy8gICAgdGhlIFdlYlNvY2tldCBDb25uZWN0aW9uXy5cbiAgICAgIGNvbnN0IHNlY1Byb3RvY29sID0gcmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdTZWMtV2ViU29ja2V0LVByb3RvY29sJylcblxuICAgICAgaWYgKHNlY1Byb3RvY29sICE9PSBudWxsICYmIHNlY1Byb3RvY29sICE9PSByZXF1ZXN0LmhlYWRlcnNMaXN0LmdldCgnU2VjLVdlYlNvY2tldC1Qcm90b2NvbCcpKSB7XG4gICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnUHJvdG9jb2wgd2FzIG5vdCBzZXQgaW4gdGhlIG9wZW5pbmcgaGFuZHNoYWtlLicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICByZXNwb25zZS5zb2NrZXQub24oJ2RhdGEnLCBvblNvY2tldERhdGEpXG4gICAgICByZXNwb25zZS5zb2NrZXQub24oJ2Nsb3NlJywgb25Tb2NrZXRDbG9zZSlcbiAgICAgIHJlc3BvbnNlLnNvY2tldC5vbignZXJyb3InLCBvblNvY2tldEVycm9yKVxuXG4gICAgICBpZiAoY2hhbm5lbHMub3Blbi5oYXNTdWJzY3JpYmVycykge1xuICAgICAgICBjaGFubmVscy5vcGVuLnB1Ymxpc2goe1xuICAgICAgICAgIGFkZHJlc3M6IHJlc3BvbnNlLnNvY2tldC5hZGRyZXNzKCksXG4gICAgICAgICAgcHJvdG9jb2w6IHNlY1Byb3RvY29sLFxuICAgICAgICAgIGV4dGVuc2lvbnM6IHNlY0V4dGVuc2lvblxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBvbkVzdGFibGlzaChyZXNwb25zZSlcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIGNvbnRyb2xsZXJcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0J1ZmZlcn0gY2h1bmtcbiAqL1xuZnVuY3Rpb24gb25Tb2NrZXREYXRhIChjaHVuaykge1xuICBpZiAoIXRoaXMud3Nba0J5dGVQYXJzZXJdLndyaXRlKGNodW5rKSkge1xuICAgIHRoaXMucGF1c2UoKVxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNmZWVkYmFjay1mcm9tLXRoZS1wcm90b2NvbFxuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzY0NTUjc2VjdGlvbi03LjEuNFxuICovXG5mdW5jdGlvbiBvblNvY2tldENsb3NlICgpIHtcbiAgY29uc3QgeyB3cyB9ID0gdGhpc1xuXG4gIC8vIElmIHRoZSBUQ1AgY29ubmVjdGlvbiB3YXMgY2xvc2VkIGFmdGVyIHRoZVxuICAvLyBXZWJTb2NrZXQgY2xvc2luZyBoYW5kc2hha2Ugd2FzIGNvbXBsZXRlZCwgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uXG4gIC8vIGlzIHNhaWQgdG8gaGF2ZSBiZWVuIGNsb3NlZCBfY2xlYW5seV8uXG4gIGNvbnN0IHdhc0NsZWFuID0gd3Nba1NlbnRDbG9zZV0gJiYgd3Nba1JlY2VpdmVkQ2xvc2VdXG5cbiAgbGV0IGNvZGUgPSAxMDA1XG4gIGxldCByZWFzb24gPSAnJ1xuXG4gIGNvbnN0IHJlc3VsdCA9IHdzW2tCeXRlUGFyc2VyXS5jbG9zaW5nSW5mb1xuXG4gIGlmIChyZXN1bHQpIHtcbiAgICBjb2RlID0gcmVzdWx0LmNvZGUgPz8gMTAwNVxuICAgIHJlYXNvbiA9IHJlc3VsdC5yZWFzb25cbiAgfSBlbHNlIGlmICghd3Nba1NlbnRDbG9zZV0pIHtcbiAgICAvLyBJZiBfVGhlIFdlYlNvY2tldFxuICAgIC8vIENvbm5lY3Rpb24gaXMgQ2xvc2VkXyBhbmQgbm8gQ2xvc2UgY29udHJvbCBmcmFtZSB3YXMgcmVjZWl2ZWQgYnkgdGhlXG4gICAgLy8gZW5kcG9pbnQgKHN1Y2ggYXMgY291bGQgb2NjdXIgaWYgdGhlIHVuZGVybHlpbmcgdHJhbnNwb3J0IGNvbm5lY3Rpb25cbiAgICAvLyBpcyBsb3N0KSwgX1RoZSBXZWJTb2NrZXQgQ29ubmVjdGlvbiBDbG9zZSBDb2RlXyBpcyBjb25zaWRlcmVkIHRvIGJlXG4gICAgLy8gMTAwNi5cbiAgICBjb2RlID0gMTAwNlxuICB9XG5cbiAgLy8gMS4gQ2hhbmdlIHRoZSByZWFkeSBzdGF0ZSB0byBDTE9TRUQgKDMpLlxuICB3c1trUmVhZHlTdGF0ZV0gPSBzdGF0ZXMuQ0xPU0VEXG5cbiAgLy8gMi4gSWYgdGhlIHVzZXIgYWdlbnQgd2FzIHJlcXVpcmVkIHRvIGZhaWwgdGhlIFdlYlNvY2tldFxuICAvLyAgICBjb25uZWN0aW9uLCBvciBpZiB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gd2FzIGNsb3NlZFxuICAvLyAgICBhZnRlciBiZWluZyBmbGFnZ2VkIGFzIGZ1bGwsIGZpcmUgYW4gZXZlbnQgbmFtZWQgZXJyb3JcbiAgLy8gICAgYXQgdGhlIFdlYlNvY2tldCBvYmplY3QuXG4gIC8vIFRPRE9cblxuICAvLyAzLiBGaXJlIGFuIGV2ZW50IG5hbWVkIGNsb3NlIGF0IHRoZSBXZWJTb2NrZXQgb2JqZWN0LFxuICAvLyAgICB1c2luZyBDbG9zZUV2ZW50LCB3aXRoIHRoZSB3YXNDbGVhbiBhdHRyaWJ1dGVcbiAgLy8gICAgaW5pdGlhbGl6ZWQgdG8gdHJ1ZSBpZiB0aGUgY29ubmVjdGlvbiBjbG9zZWQgY2xlYW5seVxuICAvLyAgICBhbmQgZmFsc2Ugb3RoZXJ3aXNlLCB0aGUgY29kZSBhdHRyaWJ1dGUgaW5pdGlhbGl6ZWQgdG9cbiAgLy8gICAgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGNsb3NlIGNvZGUsIGFuZCB0aGUgcmVhc29uXG4gIC8vICAgIGF0dHJpYnV0ZSBpbml0aWFsaXplZCB0byB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIFVURi04XG4gIC8vICAgIGRlY29kZSB3aXRob3V0IEJPTSB0byB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gY2xvc2VcbiAgLy8gICAgcmVhc29uLlxuICBmaXJlRXZlbnQoJ2Nsb3NlJywgd3MsIENsb3NlRXZlbnQsIHtcbiAgICB3YXNDbGVhbiwgY29kZSwgcmVhc29uXG4gIH0pXG5cbiAgaWYgKGNoYW5uZWxzLmNsb3NlLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgY2hhbm5lbHMuY2xvc2UucHVibGlzaCh7XG4gICAgICB3ZWJzb2NrZXQ6IHdzLFxuICAgICAgY29kZSxcbiAgICAgIHJlYXNvblxuICAgIH0pXG4gIH1cbn1cblxuZnVuY3Rpb24gb25Tb2NrZXRFcnJvciAoZXJyb3IpIHtcbiAgY29uc3QgeyB3cyB9ID0gdGhpc1xuXG4gIHdzW2tSZWFkeVN0YXRlXSA9IHN0YXRlcy5DTE9TSU5HXG5cbiAgaWYgKGNoYW5uZWxzLnNvY2tldEVycm9yLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgY2hhbm5lbHMuc29ja2V0RXJyb3IucHVibGlzaChlcnJvcilcbiAgfVxuXG4gIHRoaXMuZGVzdHJveSgpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBlc3RhYmxpc2hXZWJTb2NrZXRDb25uZWN0aW9uXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IG1heFVuc2lnbmVkMTZCaXQgfSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcblxuLyoqIEB0eXBlIHtpbXBvcnQoJ2NyeXB0bycpfSAqL1xubGV0IGNyeXB0b1xudHJ5IHtcbiAgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJylcbn0gY2F0Y2gge1xuXG59XG5cbmNsYXNzIFdlYnNvY2tldEZyYW1lU2VuZCB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge0J1ZmZlcnx1bmRlZmluZWR9IGRhdGFcbiAgICovXG4gIGNvbnN0cnVjdG9yIChkYXRhKSB7XG4gICAgdGhpcy5mcmFtZURhdGEgPSBkYXRhXG4gICAgdGhpcy5tYXNrS2V5ID0gY3J5cHRvLnJhbmRvbUJ5dGVzKDQpXG4gIH1cblxuICBjcmVhdGVGcmFtZSAob3Bjb2RlKSB7XG4gICAgY29uc3QgYm9keUxlbmd0aCA9IHRoaXMuZnJhbWVEYXRhPy5ieXRlTGVuZ3RoID8/IDBcblxuICAgIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICAgIGxldCBwYXlsb2FkTGVuZ3RoID0gYm9keUxlbmd0aCAvLyAwLTEyNVxuICAgIGxldCBvZmZzZXQgPSA2XG5cbiAgICBpZiAoYm9keUxlbmd0aCA+IG1heFVuc2lnbmVkMTZCaXQpIHtcbiAgICAgIG9mZnNldCArPSA4IC8vIHBheWxvYWQgbGVuZ3RoIGlzIG5leHQgOCBieXRlc1xuICAgICAgcGF5bG9hZExlbmd0aCA9IDEyN1xuICAgIH0gZWxzZSBpZiAoYm9keUxlbmd0aCA+IDEyNSkge1xuICAgICAgb2Zmc2V0ICs9IDIgLy8gcGF5bG9hZCBsZW5ndGggaXMgbmV4dCAyIGJ5dGVzXG4gICAgICBwYXlsb2FkTGVuZ3RoID0gMTI2XG4gICAgfVxuXG4gICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKGJvZHlMZW5ndGggKyBvZmZzZXQpXG5cbiAgICAvLyBDbGVhciBmaXJzdCAyIGJ5dGVzLCBldmVyeXRoaW5nIGVsc2UgaXMgb3ZlcndyaXR0ZW5cbiAgICBidWZmZXJbMF0gPSBidWZmZXJbMV0gPSAwXG4gICAgYnVmZmVyWzBdIHw9IDB4ODAgLy8gRklOXG4gICAgYnVmZmVyWzBdID0gKGJ1ZmZlclswXSAmIDB4RjApICsgb3Bjb2RlIC8vIG9wY29kZVxuXG4gICAgLyohIHdzLiBNSVQgTGljZW5zZS4gRWluYXIgT3R0byBTdGFuZ3ZpayA8ZWluYXJvc0BnbWFpbC5jb20+ICovXG4gICAgYnVmZmVyW29mZnNldCAtIDRdID0gdGhpcy5tYXNrS2V5WzBdXG4gICAgYnVmZmVyW29mZnNldCAtIDNdID0gdGhpcy5tYXNrS2V5WzFdXG4gICAgYnVmZmVyW29mZnNldCAtIDJdID0gdGhpcy5tYXNrS2V5WzJdXG4gICAgYnVmZmVyW29mZnNldCAtIDFdID0gdGhpcy5tYXNrS2V5WzNdXG5cbiAgICBidWZmZXJbMV0gPSBwYXlsb2FkTGVuZ3RoXG5cbiAgICBpZiAocGF5bG9hZExlbmd0aCA9PT0gMTI2KSB7XG4gICAgICBidWZmZXIud3JpdGVVSW50MTZCRShib2R5TGVuZ3RoLCAyKVxuICAgIH0gZWxzZSBpZiAocGF5bG9hZExlbmd0aCA9PT0gMTI3KSB7XG4gICAgICAvLyBDbGVhciBleHRlbmRlZCBwYXlsb2FkIGxlbmd0aFxuICAgICAgYnVmZmVyWzJdID0gYnVmZmVyWzNdID0gMFxuICAgICAgYnVmZmVyLndyaXRlVUludEJFKGJvZHlMZW5ndGgsIDQsIDYpXG4gICAgfVxuXG4gICAgYnVmZmVyWzFdIHw9IDB4ODAgLy8gTUFTS1xuXG4gICAgLy8gbWFzayBib2R5XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBib2R5TGVuZ3RoOyBpKyspIHtcbiAgICAgIGJ1ZmZlcltvZmZzZXQgKyBpXSA9IHRoaXMuZnJhbWVEYXRhW2ldIF4gdGhpcy5tYXNrS2V5W2kgJSA0XVxuICAgIH1cblxuICAgIHJldHVybiBidWZmZXJcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgV2Vic29ja2V0RnJhbWVTZW5kXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IFdyaXRhYmxlIH0gPSByZXF1aXJlKCdzdHJlYW0nKVxuY29uc3QgZGlhZ25vc3RpY3NDaGFubmVsID0gcmVxdWlyZSgnZGlhZ25vc3RpY3NfY2hhbm5lbCcpXG5jb25zdCB7IHBhcnNlclN0YXRlcywgb3Bjb2Rlcywgc3RhdGVzLCBlbXB0eUJ1ZmZlciB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3QgeyBrUmVhZHlTdGF0ZSwga1NlbnRDbG9zZSwga1Jlc3BvbnNlLCBrUmVjZWl2ZWRDbG9zZSB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgaXNWYWxpZFN0YXR1c0NvZGUsIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uLCB3ZWJzb2NrZXRNZXNzYWdlUmVjZWl2ZWQgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IFdlYnNvY2tldEZyYW1lU2VuZCB9ID0gcmVxdWlyZSgnLi9mcmFtZScpXG5cbi8vIFRoaXMgY29kZSB3YXMgaW5mbHVlbmNlZCBieSB3cyByZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4vLyBDb3B5cmlnaHQgKGMpIDIwMTEgRWluYXIgT3R0byBTdGFuZ3ZpayA8ZWluYXJvc0BnbWFpbC5jb20+XG4vLyBDb3B5cmlnaHQgKGMpIDIwMTMgQXJub3V0IEthemVtaWVyIGFuZCBjb250cmlidXRvcnNcbi8vIENvcHlyaWdodCAoYykgMjAxNiBMdWlnaSBQaW5jYSBhbmQgY29udHJpYnV0b3JzXG5cbmNvbnN0IGNoYW5uZWxzID0ge31cbmNoYW5uZWxzLnBpbmcgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOndlYnNvY2tldDpwaW5nJylcbmNoYW5uZWxzLnBvbmcgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOndlYnNvY2tldDpwb25nJylcblxuY2xhc3MgQnl0ZVBhcnNlciBleHRlbmRzIFdyaXRhYmxlIHtcbiAgI2J1ZmZlcnMgPSBbXVxuICAjYnl0ZU9mZnNldCA9IDBcblxuICAjc3RhdGUgPSBwYXJzZXJTdGF0ZXMuSU5GT1xuXG4gICNpbmZvID0ge31cbiAgI2ZyYWdtZW50cyA9IFtdXG5cbiAgY29uc3RydWN0b3IgKHdzKSB7XG4gICAgc3VwZXIoKVxuXG4gICAgdGhpcy53cyA9IHdzXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtCdWZmZXJ9IGNodW5rXG4gICAqIEBwYXJhbSB7KCkgPT4gdm9pZH0gY2FsbGJhY2tcbiAgICovXG4gIF93cml0ZSAoY2h1bmssIF8sIGNhbGxiYWNrKSB7XG4gICAgdGhpcy4jYnVmZmVycy5wdXNoKGNodW5rKVxuICAgIHRoaXMuI2J5dGVPZmZzZXQgKz0gY2h1bmsubGVuZ3RoXG5cbiAgICB0aGlzLnJ1bihjYWxsYmFjaylcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHdoZW5ldmVyIGEgbmV3IGNodW5rIGlzIHJlY2VpdmVkLlxuICAgKiBDYWxsYmFjayBpcyBjYWxsZWQgd2hlbmV2ZXIgdGhlcmUgYXJlIG5vIG1vcmUgY2h1bmtzIGJ1ZmZlcmluZyxcbiAgICogb3Igbm90IGVub3VnaCBieXRlcyBhcmUgYnVmZmVyZWQgdG8gcGFyc2UuXG4gICAqL1xuICBydW4gKGNhbGxiYWNrKSB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmICh0aGlzLiNzdGF0ZSA9PT0gcGFyc2VyU3RhdGVzLklORk8pIHtcbiAgICAgICAgLy8gSWYgdGhlcmUgYXJlbid0IGVub3VnaCBieXRlcyB0byBwYXJzZSB0aGUgcGF5bG9hZCBsZW5ndGgsIGV0Yy5cbiAgICAgICAgaWYgKHRoaXMuI2J5dGVPZmZzZXQgPCAyKSB7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IHRoaXMuY29uc3VtZSgyKVxuXG4gICAgICAgIHRoaXMuI2luZm8uZmluID0gKGJ1ZmZlclswXSAmIDB4ODApICE9PSAwXG4gICAgICAgIHRoaXMuI2luZm8ub3Bjb2RlID0gYnVmZmVyWzBdICYgMHgwRlxuXG4gICAgICAgIC8vIElmIHdlIHJlY2VpdmUgYSBmcmFnbWVudGVkIG1lc3NhZ2UsIHdlIHVzZSB0aGUgdHlwZSBvZiB0aGUgZmlyc3RcbiAgICAgICAgLy8gZnJhbWUgdG8gcGFyc2UgdGhlIGZ1bGwgbWVzc2FnZSBhcyBiaW5hcnkvdGV4dCwgd2hlbiBpdCdzIHRlcm1pbmF0ZWRcbiAgICAgICAgdGhpcy4jaW5mby5vcmlnaW5hbE9wY29kZSA/Pz0gdGhpcy4jaW5mby5vcGNvZGVcblxuICAgICAgICB0aGlzLiNpbmZvLmZyYWdtZW50ZWQgPSAhdGhpcy4jaW5mby5maW4gJiYgdGhpcy4jaW5mby5vcGNvZGUgIT09IG9wY29kZXMuQ09OVElOVUFUSU9OXG5cbiAgICAgICAgaWYgKHRoaXMuI2luZm8uZnJhZ21lbnRlZCAmJiB0aGlzLiNpbmZvLm9wY29kZSAhPT0gb3Bjb2Rlcy5CSU5BUlkgJiYgdGhpcy4jaW5mby5vcGNvZGUgIT09IG9wY29kZXMuVEVYVCkge1xuICAgICAgICAgIC8vIE9ubHkgdGV4dCBhbmQgYmluYXJ5IGZyYW1lcyBjYW4gYmUgZnJhZ21lbnRlZFxuICAgICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHRoaXMud3MsICdJbnZhbGlkIGZyYW1lIHR5cGUgd2FzIGZyYWdtZW50ZWQuJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBheWxvYWRMZW5ndGggPSBidWZmZXJbMV0gJiAweDdGXG5cbiAgICAgICAgaWYgKHBheWxvYWRMZW5ndGggPD0gMTI1KSB7XG4gICAgICAgICAgdGhpcy4jaW5mby5wYXlsb2FkTGVuZ3RoID0gcGF5bG9hZExlbmd0aFxuICAgICAgICAgIHRoaXMuI3N0YXRlID0gcGFyc2VyU3RhdGVzLlJFQURfREFUQVxuICAgICAgICB9IGVsc2UgaWYgKHBheWxvYWRMZW5ndGggPT09IDEyNikge1xuICAgICAgICAgIHRoaXMuI3N0YXRlID0gcGFyc2VyU3RhdGVzLlBBWUxPQURMRU5HVEhfMTZcbiAgICAgICAgfSBlbHNlIGlmIChwYXlsb2FkTGVuZ3RoID09PSAxMjcpIHtcbiAgICAgICAgICB0aGlzLiNzdGF0ZSA9IHBhcnNlclN0YXRlcy5QQVlMT0FETEVOR1RIXzY0XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy4jaW5mby5mcmFnbWVudGVkICYmIHBheWxvYWRMZW5ndGggPiAxMjUpIHtcbiAgICAgICAgICAvLyBBIGZyYWdtZW50ZWQgZnJhbWUgY2FuJ3QgYmUgZnJhZ21lbnRlZCBpdHNlbGZcbiAgICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih0aGlzLndzLCAnRnJhZ21lbnRlZCBmcmFtZSBleGNlZWRlZCAxMjUgYnl0ZXMuJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAodGhpcy4jaW5mby5vcGNvZGUgPT09IG9wY29kZXMuUElORyB8fFxuICAgICAgICAgICAgdGhpcy4jaW5mby5vcGNvZGUgPT09IG9wY29kZXMuUE9ORyB8fFxuICAgICAgICAgICAgdGhpcy4jaW5mby5vcGNvZGUgPT09IG9wY29kZXMuQ0xPU0UpICYmXG4gICAgICAgICAgcGF5bG9hZExlbmd0aCA+IDEyNVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBDb250cm9sIGZyYW1lcyBjYW4gaGF2ZSBhIHBheWxvYWQgbGVuZ3RoIG9mIDEyNSBieXRlcyBNQVhcbiAgICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih0aGlzLndzLCAnUGF5bG9hZCBsZW5ndGggZm9yIGNvbnRyb2wgZnJhbWUgZXhjZWVkZWQgMTI1IGJ5dGVzLicpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy4jaW5mby5vcGNvZGUgPT09IG9wY29kZXMuQ0xPU0UpIHtcbiAgICAgICAgICBpZiAocGF5bG9hZExlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24odGhpcy53cywgJ1JlY2VpdmVkIGNsb3NlIGZyYW1lIHdpdGggYSAxLWJ5dGUgYm9keS4nKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgYm9keSA9IHRoaXMuY29uc3VtZShwYXlsb2FkTGVuZ3RoKVxuXG4gICAgICAgICAgdGhpcy4jaW5mby5jbG9zZUluZm8gPSB0aGlzLnBhcnNlQ2xvc2VCb2R5KGZhbHNlLCBib2R5KVxuXG4gICAgICAgICAgaWYgKCF0aGlzLndzW2tTZW50Q2xvc2VdKSB7XG4gICAgICAgICAgICAvLyBJZiBhbiBlbmRwb2ludCByZWNlaXZlcyBhIENsb3NlIGZyYW1lIGFuZCBkaWQgbm90IHByZXZpb3VzbHkgc2VuZCBhXG4gICAgICAgICAgICAvLyBDbG9zZSBmcmFtZSwgdGhlIGVuZHBvaW50IE1VU1Qgc2VuZCBhIENsb3NlIGZyYW1lIGluIHJlc3BvbnNlLiAgKFdoZW5cbiAgICAgICAgICAgIC8vIHNlbmRpbmcgYSBDbG9zZSBmcmFtZSBpbiByZXNwb25zZSwgdGhlIGVuZHBvaW50IHR5cGljYWxseSBlY2hvcyB0aGVcbiAgICAgICAgICAgIC8vIHN0YXR1cyBjb2RlIGl0IHJlY2VpdmVkLilcbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMilcbiAgICAgICAgICAgIGJvZHkud3JpdGVVSW50MTZCRSh0aGlzLiNpbmZvLmNsb3NlSW5mby5jb2RlLCAwKVxuICAgICAgICAgICAgY29uc3QgY2xvc2VGcmFtZSA9IG5ldyBXZWJzb2NrZXRGcmFtZVNlbmQoYm9keSlcblxuICAgICAgICAgICAgdGhpcy53c1trUmVzcG9uc2VdLnNvY2tldC53cml0ZShcbiAgICAgICAgICAgICAgY2xvc2VGcmFtZS5jcmVhdGVGcmFtZShvcGNvZGVzLkNMT1NFKSxcbiAgICAgICAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghZXJyKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLndzW2tTZW50Q2xvc2VdID0gdHJ1ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFVwb24gZWl0aGVyIHNlbmRpbmcgb3IgcmVjZWl2aW5nIGEgQ2xvc2UgY29udHJvbCBmcmFtZSwgaXQgaXMgc2FpZFxuICAgICAgICAgIC8vIHRoYXQgX1RoZSBXZWJTb2NrZXQgQ2xvc2luZyBIYW5kc2hha2UgaXMgU3RhcnRlZF8gYW5kIHRoYXQgdGhlXG4gICAgICAgICAgLy8gV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgaW4gdGhlIENMT1NJTkcgc3RhdGUuXG4gICAgICAgICAgdGhpcy53c1trUmVhZHlTdGF0ZV0gPSBzdGF0ZXMuQ0xPU0lOR1xuICAgICAgICAgIHRoaXMud3Nba1JlY2VpdmVkQ2xvc2VdID0gdHJ1ZVxuXG4gICAgICAgICAgdGhpcy5lbmQoKVxuXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy4jaW5mby5vcGNvZGUgPT09IG9wY29kZXMuUElORykge1xuICAgICAgICAgIC8vIFVwb24gcmVjZWlwdCBvZiBhIFBpbmcgZnJhbWUsIGFuIGVuZHBvaW50IE1VU1Qgc2VuZCBhIFBvbmcgZnJhbWUgaW5cbiAgICAgICAgICAvLyByZXNwb25zZSwgdW5sZXNzIGl0IGFscmVhZHkgcmVjZWl2ZWQgYSBDbG9zZSBmcmFtZS5cbiAgICAgICAgICAvLyBBIFBvbmcgZnJhbWUgc2VudCBpbiByZXNwb25zZSB0byBhIFBpbmcgZnJhbWUgbXVzdCBoYXZlIGlkZW50aWNhbFxuICAgICAgICAgIC8vIFwiQXBwbGljYXRpb24gZGF0YVwiXG5cbiAgICAgICAgICBjb25zdCBib2R5ID0gdGhpcy5jb25zdW1lKHBheWxvYWRMZW5ndGgpXG5cbiAgICAgICAgICBpZiAoIXRoaXMud3Nba1JlY2VpdmVkQ2xvc2VdKSB7XG4gICAgICAgICAgICBjb25zdCBmcmFtZSA9IG5ldyBXZWJzb2NrZXRGcmFtZVNlbmQoYm9keSlcblxuICAgICAgICAgICAgdGhpcy53c1trUmVzcG9uc2VdLnNvY2tldC53cml0ZShmcmFtZS5jcmVhdGVGcmFtZShvcGNvZGVzLlBPTkcpKVxuXG4gICAgICAgICAgICBpZiAoY2hhbm5lbHMucGluZy5oYXNTdWJzY3JpYmVycykge1xuICAgICAgICAgICAgICBjaGFubmVscy5waW5nLnB1Ymxpc2goe1xuICAgICAgICAgICAgICAgIHBheWxvYWQ6IGJvZHlcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLiNzdGF0ZSA9IHBhcnNlclN0YXRlcy5JTkZPXG5cbiAgICAgICAgICBpZiAodGhpcy4jYnl0ZU9mZnNldCA+IDApIHtcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKClcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLiNpbmZvLm9wY29kZSA9PT0gb3Bjb2Rlcy5QT05HKSB7XG4gICAgICAgICAgLy8gQSBQb25nIGZyYW1lIE1BWSBiZSBzZW50IHVuc29saWNpdGVkLiAgVGhpcyBzZXJ2ZXMgYXMgYVxuICAgICAgICAgIC8vIHVuaWRpcmVjdGlvbmFsIGhlYXJ0YmVhdC4gIEEgcmVzcG9uc2UgdG8gYW4gdW5zb2xpY2l0ZWQgUG9uZyBmcmFtZSBpc1xuICAgICAgICAgIC8vIG5vdCBleHBlY3RlZC5cblxuICAgICAgICAgIGNvbnN0IGJvZHkgPSB0aGlzLmNvbnN1bWUocGF5bG9hZExlbmd0aClcblxuICAgICAgICAgIGlmIChjaGFubmVscy5wb25nLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICAgICAgICBjaGFubmVscy5wb25nLnB1Ymxpc2goe1xuICAgICAgICAgICAgICBwYXlsb2FkOiBib2R5XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0aGlzLiNieXRlT2Zmc2V0ID4gMCkge1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2soKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuI3N0YXRlID09PSBwYXJzZXJTdGF0ZXMuUEFZTE9BRExFTkdUSF8xNikge1xuICAgICAgICBpZiAodGhpcy4jYnl0ZU9mZnNldCA8IDIpIHtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYnVmZmVyID0gdGhpcy5jb25zdW1lKDIpXG5cbiAgICAgICAgdGhpcy4jaW5mby5wYXlsb2FkTGVuZ3RoID0gYnVmZmVyLnJlYWRVSW50MTZCRSgwKVxuICAgICAgICB0aGlzLiNzdGF0ZSA9IHBhcnNlclN0YXRlcy5SRUFEX0RBVEFcbiAgICAgIH0gZWxzZSBpZiAodGhpcy4jc3RhdGUgPT09IHBhcnNlclN0YXRlcy5QQVlMT0FETEVOR1RIXzY0KSB7XG4gICAgICAgIGlmICh0aGlzLiNieXRlT2Zmc2V0IDwgOCkge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBidWZmZXIgPSB0aGlzLmNvbnN1bWUoOClcbiAgICAgICAgY29uc3QgdXBwZXIgPSBidWZmZXIucmVhZFVJbnQzMkJFKDApXG5cbiAgICAgICAgLy8gMl4zMSBpcyB0aGUgbWF4aW5pbXVtIGJ5dGVzIGFuIGFycmF5YnVmZmVyIGNhbiBjb250YWluXG4gICAgICAgIC8vIG9uIDMyLWJpdCBzeXN0ZW1zLiBBbHRob3VnaCwgb24gNjQtYml0IHN5c3RlbXMsIHRoaXMgaXNcbiAgICAgICAgLy8gMl41My0xIGJ5dGVzLlxuICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9FcnJvcnMvSW52YWxpZF9hcnJheV9sZW5ndGhcbiAgICAgICAgLy8gaHR0cHM6Ly9zb3VyY2UuY2hyb21pdW0ub3JnL2Nocm9taXVtL2Nocm9taXVtL3NyYy8rL21haW46djgvc3JjL2NvbW1vbi9nbG9iYWxzLmg7ZHJjPTE5NDYyMTJhYzAxMDA2NjhmMTRlYjllMjg0M2JkZDg0NmU1MTBhMWU7YnB2PTE7YnB0PTE7bD0xMjc1XG4gICAgICAgIC8vIGh0dHBzOi8vc291cmNlLmNocm9taXVtLm9yZy9jaHJvbWl1bS9jaHJvbWl1bS9zcmMvKy9tYWluOnY4L3NyYy9vYmplY3RzL2pzLWFycmF5LWJ1ZmZlci5oO2w9MzQ7ZHJjPTE5NDYyMTJhYzAxMDA2NjhmMTRlYjllMjg0M2JkZDg0NmU1MTBhMWVcbiAgICAgICAgaWYgKHVwcGVyID4gMiAqKiAzMSAtIDEpIHtcbiAgICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih0aGlzLndzLCAnUmVjZWl2ZWQgcGF5bG9hZCBsZW5ndGggPiAyXjMxIGJ5dGVzLicpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsb3dlciA9IGJ1ZmZlci5yZWFkVUludDMyQkUoNClcblxuICAgICAgICB0aGlzLiNpbmZvLnBheWxvYWRMZW5ndGggPSAodXBwZXIgPDwgOCkgKyBsb3dlclxuICAgICAgICB0aGlzLiNzdGF0ZSA9IHBhcnNlclN0YXRlcy5SRUFEX0RBVEFcbiAgICAgIH0gZWxzZSBpZiAodGhpcy4jc3RhdGUgPT09IHBhcnNlclN0YXRlcy5SRUFEX0RBVEEpIHtcbiAgICAgICAgaWYgKHRoaXMuI2J5dGVPZmZzZXQgPCB0aGlzLiNpbmZvLnBheWxvYWRMZW5ndGgpIHtcbiAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBzdGlsbCBtb3JlIGRhdGEgaW4gdGhpcyBjaHVuayB0aGF0IG5lZWRzIHRvIGJlIHJlYWRcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuI2J5dGVPZmZzZXQgPj0gdGhpcy4jaW5mby5wYXlsb2FkTGVuZ3RoKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIHNlcnZlciBzZW50IG11bHRpcGxlIGZyYW1lcyBpbiBhIHNpbmdsZSBjaHVua1xuXG4gICAgICAgICAgY29uc3QgYm9keSA9IHRoaXMuY29uc3VtZSh0aGlzLiNpbmZvLnBheWxvYWRMZW5ndGgpXG5cbiAgICAgICAgICB0aGlzLiNmcmFnbWVudHMucHVzaChib2R5KVxuXG4gICAgICAgICAgLy8gSWYgdGhlIGZyYW1lIGlzIHVuZnJhZ21lbnRlZCwgb3IgYSBmcmFnbWVudGVkIGZyYW1lIHdhcyB0ZXJtaW5hdGVkLFxuICAgICAgICAgIC8vIGEgbWVzc2FnZSB3YXMgcmVjZWl2ZWRcbiAgICAgICAgICBpZiAoIXRoaXMuI2luZm8uZnJhZ21lbnRlZCB8fCAodGhpcy4jaW5mby5maW4gJiYgdGhpcy4jaW5mby5vcGNvZGUgPT09IG9wY29kZXMuQ09OVElOVUFUSU9OKSkge1xuICAgICAgICAgICAgY29uc3QgZnVsbE1lc3NhZ2UgPSBCdWZmZXIuY29uY2F0KHRoaXMuI2ZyYWdtZW50cylcblxuICAgICAgICAgICAgd2Vic29ja2V0TWVzc2FnZVJlY2VpdmVkKHRoaXMud3MsIHRoaXMuI2luZm8ub3JpZ2luYWxPcGNvZGUsIGZ1bGxNZXNzYWdlKVxuXG4gICAgICAgICAgICB0aGlzLiNpbmZvID0ge31cbiAgICAgICAgICAgIHRoaXMuI2ZyYWdtZW50cy5sZW5ndGggPSAwXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy4jc3RhdGUgPSBwYXJzZXJTdGF0ZXMuSU5GT1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLiNieXRlT2Zmc2V0ID4gMCkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2soKVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUYWtlIG4gYnl0ZXMgZnJvbSB0aGUgYnVmZmVyZWQgQnVmZmVyc1xuICAgKiBAcGFyYW0ge251bWJlcn0gblxuICAgKiBAcmV0dXJucyB7QnVmZmVyfG51bGx9XG4gICAqL1xuICBjb25zdW1lIChuKSB7XG4gICAgaWYgKG4gPiB0aGlzLiNieXRlT2Zmc2V0KSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0gZWxzZSBpZiAobiA9PT0gMCkge1xuICAgICAgcmV0dXJuIGVtcHR5QnVmZmVyXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuI2J1ZmZlcnNbMF0ubGVuZ3RoID09PSBuKSB7XG4gICAgICB0aGlzLiNieXRlT2Zmc2V0IC09IHRoaXMuI2J1ZmZlcnNbMF0ubGVuZ3RoXG4gICAgICByZXR1cm4gdGhpcy4jYnVmZmVycy5zaGlmdCgpXG4gICAgfVxuXG4gICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKG4pXG4gICAgbGV0IG9mZnNldCA9IDBcblxuICAgIHdoaWxlIChvZmZzZXQgIT09IG4pIHtcbiAgICAgIGNvbnN0IG5leHQgPSB0aGlzLiNidWZmZXJzWzBdXG4gICAgICBjb25zdCB7IGxlbmd0aCB9ID0gbmV4dFxuXG4gICAgICBpZiAobGVuZ3RoICsgb2Zmc2V0ID09PSBuKSB7XG4gICAgICAgIGJ1ZmZlci5zZXQodGhpcy4jYnVmZmVycy5zaGlmdCgpLCBvZmZzZXQpXG4gICAgICAgIGJyZWFrXG4gICAgICB9IGVsc2UgaWYgKGxlbmd0aCArIG9mZnNldCA+IG4pIHtcbiAgICAgICAgYnVmZmVyLnNldChuZXh0LnN1YmFycmF5KDAsIG4gLSBvZmZzZXQpLCBvZmZzZXQpXG4gICAgICAgIHRoaXMuI2J1ZmZlcnNbMF0gPSBuZXh0LnN1YmFycmF5KG4gLSBvZmZzZXQpXG4gICAgICAgIGJyZWFrXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBidWZmZXIuc2V0KHRoaXMuI2J1ZmZlcnMuc2hpZnQoKSwgb2Zmc2V0KVxuICAgICAgICBvZmZzZXQgKz0gbmV4dC5sZW5ndGhcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLiNieXRlT2Zmc2V0IC09IG5cblxuICAgIHJldHVybiBidWZmZXJcbiAgfVxuXG4gIHBhcnNlQ2xvc2VCb2R5IChvbmx5Q29kZSwgZGF0YSkge1xuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NSNzZWN0aW9uLTcuMS41XG4gICAgLyoqIEB0eXBlIHtudW1iZXJ8dW5kZWZpbmVkfSAqL1xuICAgIGxldCBjb2RlXG5cbiAgICBpZiAoZGF0YS5sZW5ndGggPj0gMikge1xuICAgICAgLy8gX1RoZSBXZWJTb2NrZXQgQ29ubmVjdGlvbiBDbG9zZSBDb2RlXyBpc1xuICAgICAgLy8gZGVmaW5lZCBhcyB0aGUgc3RhdHVzIGNvZGUgKFNlY3Rpb24gNy40KSBjb250YWluZWQgaW4gdGhlIGZpcnN0IENsb3NlXG4gICAgICAvLyBjb250cm9sIGZyYW1lIHJlY2VpdmVkIGJ5IHRoZSBhcHBsaWNhdGlvblxuICAgICAgY29kZSA9IGRhdGEucmVhZFVJbnQxNkJFKDApXG4gICAgfVxuXG4gICAgaWYgKG9ubHlDb2RlKSB7XG4gICAgICBpZiAoIWlzVmFsaWRTdGF0dXNDb2RlKGNvZGUpKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7IGNvZGUgfVxuICAgIH1cblxuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NSNzZWN0aW9uLTcuMS42XG4gICAgLyoqIEB0eXBlIHtCdWZmZXJ9ICovXG4gICAgbGV0IHJlYXNvbiA9IGRhdGEuc3ViYXJyYXkoMilcblxuICAgIC8vIFJlbW92ZSBCT01cbiAgICBpZiAocmVhc29uWzBdID09PSAweEVGICYmIHJlYXNvblsxXSA9PT0gMHhCQiAmJiByZWFzb25bMl0gPT09IDB4QkYpIHtcbiAgICAgIHJlYXNvbiA9IHJlYXNvbi5zdWJhcnJheSgzKVxuICAgIH1cblxuICAgIGlmIChjb2RlICE9PSB1bmRlZmluZWQgJiYgIWlzVmFsaWRTdGF0dXNDb2RlKGNvZGUpKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAvLyBUT0RPOiBvcHRpbWl6ZSB0aGlzXG4gICAgICByZWFzb24gPSBuZXcgVGV4dERlY29kZXIoJ3V0Zi04JywgeyBmYXRhbDogdHJ1ZSB9KS5kZWNvZGUocmVhc29uKVxuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICByZXR1cm4geyBjb2RlLCByZWFzb24gfVxuICB9XG5cbiAgZ2V0IGNsb3NpbmdJbmZvICgpIHtcbiAgICByZXR1cm4gdGhpcy4jaW5mby5jbG9zZUluZm9cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQnl0ZVBhcnNlclxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3dlYmlkbCcpXG5jb25zdCB7IERPTUV4Y2VwdGlvbiB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvY29uc3RhbnRzJylcbmNvbnN0IHsgVVJMU2VyaWFsaXplciB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvZGF0YVVSTCcpXG5jb25zdCB7IGdldEdsb2JhbE9yaWdpbiB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvZ2xvYmFsJylcbmNvbnN0IHsgc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycywgc3RhdGVzLCBvcGNvZGVzLCBlbXB0eUJ1ZmZlciB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3Qge1xuICBrV2ViU29ja2V0VVJMLFxuICBrUmVhZHlTdGF0ZSxcbiAga0NvbnRyb2xsZXIsXG4gIGtCaW5hcnlUeXBlLFxuICBrUmVzcG9uc2UsXG4gIGtTZW50Q2xvc2UsXG4gIGtCeXRlUGFyc2VyXG59ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgaXNFc3RhYmxpc2hlZCwgaXNDbG9zaW5nLCBpc1ZhbGlkU3VicHJvdG9jb2wsIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uLCBmaXJlRXZlbnQgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IGVzdGFibGlzaFdlYlNvY2tldENvbm5lY3Rpb24gfSA9IHJlcXVpcmUoJy4vY29ubmVjdGlvbicpXG5jb25zdCB7IFdlYnNvY2tldEZyYW1lU2VuZCB9ID0gcmVxdWlyZSgnLi9mcmFtZScpXG5jb25zdCB7IEJ5dGVQYXJzZXIgfSA9IHJlcXVpcmUoJy4vcmVjZWl2ZXInKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5LCBpc0Jsb2JMaWtlIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBnZXRHbG9iYWxEaXNwYXRjaGVyIH0gPSByZXF1aXJlKCcuLi9nbG9iYWwnKVxuY29uc3QgeyB0eXBlcyB9ID0gcmVxdWlyZSgndXRpbCcpXG5cbmxldCBleHBlcmltZW50YWxXYXJuZWQgPSBmYWxzZVxuXG4vLyBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNpbnRlcmZhY2UtZGVmaW5pdGlvblxuY2xhc3MgV2ViU29ja2V0IGV4dGVuZHMgRXZlbnRUYXJnZXQge1xuICAjZXZlbnRzID0ge1xuICAgIG9wZW46IG51bGwsXG4gICAgZXJyb3I6IG51bGwsXG4gICAgY2xvc2U6IG51bGwsXG4gICAgbWVzc2FnZTogbnVsbFxuICB9XG5cbiAgI2J1ZmZlcmVkQW1vdW50ID0gMFxuICAjcHJvdG9jb2wgPSAnJ1xuICAjZXh0ZW5zaW9ucyA9ICcnXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAgICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IHByb3RvY29sc1xuICAgKi9cbiAgY29uc3RydWN0b3IgKHVybCwgcHJvdG9jb2xzID0gW10pIHtcbiAgICBzdXBlcigpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnV2ViU29ja2V0IGNvbnN0cnVjdG9yJyB9KVxuXG4gICAgaWYgKCFleHBlcmltZW50YWxXYXJuZWQpIHtcbiAgICAgIGV4cGVyaW1lbnRhbFdhcm5lZCA9IHRydWVcbiAgICAgIHByb2Nlc3MuZW1pdFdhcm5pbmcoJ1dlYlNvY2tldHMgYXJlIGV4cGVyaW1lbnRhbCwgZXhwZWN0IHRoZW0gdG8gY2hhbmdlIGF0IGFueSB0aW1lLicsIHtcbiAgICAgICAgY29kZTogJ1VORElDSS1XUydcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgY29uc3Qgb3B0aW9ucyA9IHdlYmlkbC5jb252ZXJ0ZXJzWydET01TdHJpbmcgb3Igc2VxdWVuY2U8RE9NU3RyaW5nPiBvciBXZWJTb2NrZXRJbml0J10ocHJvdG9jb2xzKVxuXG4gICAgdXJsID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKHVybClcbiAgICBwcm90b2NvbHMgPSBvcHRpb25zLnByb3RvY29sc1xuXG4gICAgLy8gMS4gTGV0IGJhc2VVUkwgYmUgdGhpcydzIHJlbGV2YW50IHNldHRpbmdzIG9iamVjdCdzIEFQSSBiYXNlIFVSTC5cbiAgICBjb25zdCBiYXNlVVJMID0gZ2V0R2xvYmFsT3JpZ2luKClcblxuICAgIC8vIDEuIExldCB1cmxSZWNvcmQgYmUgdGhlIHJlc3VsdCBvZiBhcHBseWluZyB0aGUgVVJMIHBhcnNlciB0byB1cmwgd2l0aCBiYXNlVVJMLlxuICAgIGxldCB1cmxSZWNvcmRcblxuICAgIHRyeSB7XG4gICAgICB1cmxSZWNvcmQgPSBuZXcgVVJMKHVybCwgYmFzZVVSTClcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyAzLiBJZiB1cmxSZWNvcmQgaXMgZmFpbHVyZSwgdGhlbiB0aHJvdyBhIFwiU3ludGF4RXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKGUsICdTeW50YXhFcnJvcicpXG4gICAgfVxuXG4gICAgLy8gNC4gSWYgdXJsUmVjb3Jk4oCZcyBzY2hlbWUgaXMgXCJodHRwXCIsIHRoZW4gc2V0IHVybFJlY29yZOKAmXMgc2NoZW1lIHRvIFwid3NcIi5cbiAgICBpZiAodXJsUmVjb3JkLnByb3RvY29sID09PSAnaHR0cDonKSB7XG4gICAgICB1cmxSZWNvcmQucHJvdG9jb2wgPSAnd3M6J1xuICAgIH0gZWxzZSBpZiAodXJsUmVjb3JkLnByb3RvY29sID09PSAnaHR0cHM6Jykge1xuICAgICAgLy8gNS4gT3RoZXJ3aXNlLCBpZiB1cmxSZWNvcmTigJlzIHNjaGVtZSBpcyBcImh0dHBzXCIsIHNldCB1cmxSZWNvcmTigJlzIHNjaGVtZSB0byBcIndzc1wiLlxuICAgICAgdXJsUmVjb3JkLnByb3RvY29sID0gJ3dzczonXG4gICAgfVxuXG4gICAgLy8gNi4gSWYgdXJsUmVjb3Jk4oCZcyBzY2hlbWUgaXMgbm90IFwid3NcIiBvciBcIndzc1wiLCB0aGVuIHRocm93IGEgXCJTeW50YXhFcnJvclwiIERPTUV4Y2VwdGlvbi5cbiAgICBpZiAodXJsUmVjb3JkLnByb3RvY29sICE9PSAnd3M6JyAmJiB1cmxSZWNvcmQucHJvdG9jb2wgIT09ICd3c3M6Jykge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihcbiAgICAgICAgYEV4cGVjdGVkIGEgd3M6IG9yIHdzczogcHJvdG9jb2wsIGdvdCAke3VybFJlY29yZC5wcm90b2NvbH1gLFxuICAgICAgICAnU3ludGF4RXJyb3InXG4gICAgICApXG4gICAgfVxuXG4gICAgLy8gNy4gSWYgdXJsUmVjb3Jk4oCZcyBmcmFnbWVudCBpcyBub24tbnVsbCwgdGhlbiB0aHJvdyBhIFwiU3ludGF4RXJyb3JcIlxuICAgIC8vICAgIERPTUV4Y2VwdGlvbi5cbiAgICBpZiAodXJsUmVjb3JkLmhhc2ggfHwgdXJsUmVjb3JkLmhyZWYuZW5kc1dpdGgoJyMnKSkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignR290IGZyYWdtZW50JywgJ1N5bnRheEVycm9yJylcbiAgICB9XG5cbiAgICAvLyA4LiBJZiBwcm90b2NvbHMgaXMgYSBzdHJpbmcsIHNldCBwcm90b2NvbHMgdG8gYSBzZXF1ZW5jZSBjb25zaXN0aW5nXG4gICAgLy8gICAgb2YganVzdCB0aGF0IHN0cmluZy5cbiAgICBpZiAodHlwZW9mIHByb3RvY29scyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHByb3RvY29scyA9IFtwcm90b2NvbHNdXG4gICAgfVxuXG4gICAgLy8gOS4gSWYgYW55IG9mIHRoZSB2YWx1ZXMgaW4gcHJvdG9jb2xzIG9jY3VyIG1vcmUgdGhhbiBvbmNlIG9yIG90aGVyd2lzZVxuICAgIC8vICAgIGZhaWwgdG8gbWF0Y2ggdGhlIHJlcXVpcmVtZW50cyBmb3IgZWxlbWVudHMgdGhhdCBjb21wcmlzZSB0aGUgdmFsdWVcbiAgICAvLyAgICBvZiBgU2VjLVdlYlNvY2tldC1Qcm90b2NvbGAgZmllbGRzIGFzIGRlZmluZWQgYnkgVGhlIFdlYlNvY2tldFxuICAgIC8vICAgIHByb3RvY29sLCB0aGVuIHRocm93IGEgXCJTeW50YXhFcnJvclwiIERPTUV4Y2VwdGlvbi5cbiAgICBpZiAocHJvdG9jb2xzLmxlbmd0aCAhPT0gbmV3IFNldChwcm90b2NvbHMubWFwKHAgPT4gcC50b0xvd2VyQ2FzZSgpKSkuc2l6ZSkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignSW52YWxpZCBTZWMtV2ViU29ja2V0LVByb3RvY29sIHZhbHVlJywgJ1N5bnRheEVycm9yJylcbiAgICB9XG5cbiAgICBpZiAocHJvdG9jb2xzLmxlbmd0aCA+IDAgJiYgIXByb3RvY29scy5ldmVyeShwID0+IGlzVmFsaWRTdWJwcm90b2NvbChwKSkpIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oJ0ludmFsaWQgU2VjLVdlYlNvY2tldC1Qcm90b2NvbCB2YWx1ZScsICdTeW50YXhFcnJvcicpXG4gICAgfVxuXG4gICAgLy8gMTAuIFNldCB0aGlzJ3MgdXJsIHRvIHVybFJlY29yZC5cbiAgICB0aGlzW2tXZWJTb2NrZXRVUkxdID0gbmV3IFVSTCh1cmxSZWNvcmQuaHJlZilcblxuICAgIC8vIDExLiBMZXQgY2xpZW50IGJlIHRoaXMncyByZWxldmFudCBzZXR0aW5ncyBvYmplY3QuXG5cbiAgICAvLyAxMi4gUnVuIHRoaXMgc3RlcCBpbiBwYXJhbGxlbDpcblxuICAgIC8vICAgIDEuIEVzdGFibGlzaCBhIFdlYlNvY2tldCBjb25uZWN0aW9uIGdpdmVuIHVybFJlY29yZCwgcHJvdG9jb2xzLFxuICAgIC8vICAgICAgIGFuZCBjbGllbnQuXG4gICAgdGhpc1trQ29udHJvbGxlcl0gPSBlc3RhYmxpc2hXZWJTb2NrZXRDb25uZWN0aW9uKFxuICAgICAgdXJsUmVjb3JkLFxuICAgICAgcHJvdG9jb2xzLFxuICAgICAgdGhpcyxcbiAgICAgIChyZXNwb25zZSkgPT4gdGhpcy4jb25Db25uZWN0aW9uRXN0YWJsaXNoZWQocmVzcG9uc2UpLFxuICAgICAgb3B0aW9uc1xuICAgIClcblxuICAgIC8vIEVhY2ggV2ViU29ja2V0IG9iamVjdCBoYXMgYW4gYXNzb2NpYXRlZCByZWFkeSBzdGF0ZSwgd2hpY2ggaXMgYVxuICAgIC8vIG51bWJlciByZXByZXNlbnRpbmcgdGhlIHN0YXRlIG9mIHRoZSBjb25uZWN0aW9uLiBJbml0aWFsbHkgaXQgbXVzdFxuICAgIC8vIGJlIENPTk5FQ1RJTkcgKDApLlxuICAgIHRoaXNba1JlYWR5U3RhdGVdID0gV2ViU29ja2V0LkNPTk5FQ1RJTkdcblxuICAgIC8vIFRoZSBleHRlbnNpb25zIGF0dHJpYnV0ZSBtdXN0IGluaXRpYWxseSByZXR1cm4gdGhlIGVtcHR5IHN0cmluZy5cblxuICAgIC8vIFRoZSBwcm90b2NvbCBhdHRyaWJ1dGUgbXVzdCBpbml0aWFsbHkgcmV0dXJuIHRoZSBlbXB0eSBzdHJpbmcuXG5cbiAgICAvLyBFYWNoIFdlYlNvY2tldCBvYmplY3QgaGFzIGFuIGFzc29jaWF0ZWQgYmluYXJ5IHR5cGUsIHdoaWNoIGlzIGFcbiAgICAvLyBCaW5hcnlUeXBlLiBJbml0aWFsbHkgaXQgbXVzdCBiZSBcImJsb2JcIi5cbiAgICB0aGlzW2tCaW5hcnlUeXBlXSA9ICdibG9iJ1xuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZG9tLXdlYnNvY2tldC1jbG9zZVxuICAgKiBAcGFyYW0ge251bWJlcnx1bmRlZmluZWR9IGNvZGVcbiAgICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSByZWFzb25cbiAgICovXG4gIGNsb3NlIChjb2RlID0gdW5kZWZpbmVkLCByZWFzb24gPSB1bmRlZmluZWQpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICBpZiAoY29kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb2RlID0gd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIHNob3J0J10oY29kZSwgeyBjbGFtcDogdHJ1ZSB9KVxuICAgIH1cblxuICAgIGlmIChyZWFzb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVhc29uID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKHJlYXNvbilcbiAgICB9XG5cbiAgICAvLyAxLiBJZiBjb2RlIGlzIHByZXNlbnQsIGJ1dCBpcyBuZWl0aGVyIGFuIGludGVnZXIgZXF1YWwgdG8gMTAwMCBub3IgYW5cbiAgICAvLyAgICBpbnRlZ2VyIGluIHRoZSByYW5nZSAzMDAwIHRvIDQ5OTksIGluY2x1c2l2ZSwgdGhyb3cgYW5cbiAgICAvLyAgICBcIkludmFsaWRBY2Nlc3NFcnJvclwiIERPTUV4Y2VwdGlvbi5cbiAgICBpZiAoY29kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoY29kZSAhPT0gMTAwMCAmJiAoY29kZSA8IDMwMDAgfHwgY29kZSA+IDQ5OTkpKSB7XG4gICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oJ2ludmFsaWQgY29kZScsICdJbnZhbGlkQWNjZXNzRXJyb3InKVxuICAgICAgfVxuICAgIH1cblxuICAgIGxldCByZWFzb25CeXRlTGVuZ3RoID0gMFxuXG4gICAgLy8gMi4gSWYgcmVhc29uIGlzIHByZXNlbnQsIHRoZW4gcnVuIHRoZXNlIHN1YnN0ZXBzOlxuICAgIGlmIChyZWFzb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gMS4gTGV0IHJlYXNvbkJ5dGVzIGJlIHRoZSByZXN1bHQgb2YgZW5jb2RpbmcgcmVhc29uLlxuICAgICAgLy8gMi4gSWYgcmVhc29uQnl0ZXMgaXMgbG9uZ2VyIHRoYW4gMTIzIGJ5dGVzLCB0aGVuIHRocm93IGFcbiAgICAgIC8vICAgIFwiU3ludGF4RXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgICByZWFzb25CeXRlTGVuZ3RoID0gQnVmZmVyLmJ5dGVMZW5ndGgocmVhc29uKVxuXG4gICAgICBpZiAocmVhc29uQnl0ZUxlbmd0aCA+IDEyMykge1xuICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKFxuICAgICAgICAgIGBSZWFzb24gbXVzdCBiZSBsZXNzIHRoYW4gMTIzIGJ5dGVzOyByZWNlaXZlZCAke3JlYXNvbkJ5dGVMZW5ndGh9YCxcbiAgICAgICAgICAnU3ludGF4RXJyb3InXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAzLiBSdW4gdGhlIGZpcnN0IG1hdGNoaW5nIHN0ZXBzIGZyb20gdGhlIGZvbGxvd2luZyBsaXN0OlxuICAgIGlmICh0aGlzW2tSZWFkeVN0YXRlXSA9PT0gV2ViU29ja2V0LkNMT1NJTkcgfHwgdGhpc1trUmVhZHlTdGF0ZV0gPT09IFdlYlNvY2tldC5DTE9TRUQpIHtcbiAgICAgIC8vIElmIHRoaXMncyByZWFkeSBzdGF0ZSBpcyBDTE9TSU5HICgyKSBvciBDTE9TRUQgKDMpXG4gICAgICAvLyBEbyBub3RoaW5nLlxuICAgIH0gZWxzZSBpZiAoIWlzRXN0YWJsaXNoZWQodGhpcykpIHtcbiAgICAgIC8vIElmIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBub3QgeWV0IGVzdGFibGlzaGVkXG4gICAgICAvLyBGYWlsIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBhbmQgc2V0IHRoaXMncyByZWFkeSBzdGF0ZVxuICAgICAgLy8gdG8gQ0xPU0lORyAoMikuXG4gICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih0aGlzLCAnQ29ubmVjdGlvbiB3YXMgY2xvc2VkIGJlZm9yZSBpdCB3YXMgZXN0YWJsaXNoZWQuJylcbiAgICAgIHRoaXNba1JlYWR5U3RhdGVdID0gV2ViU29ja2V0LkNMT1NJTkdcbiAgICB9IGVsc2UgaWYgKCFpc0Nsb3NpbmcodGhpcykpIHtcbiAgICAgIC8vIElmIHRoZSBXZWJTb2NrZXQgY2xvc2luZyBoYW5kc2hha2UgaGFzIG5vdCB5ZXQgYmVlbiBzdGFydGVkXG4gICAgICAvLyBTdGFydCB0aGUgV2ViU29ja2V0IGNsb3NpbmcgaGFuZHNoYWtlIGFuZCBzZXQgdGhpcydzIHJlYWR5XG4gICAgICAvLyBzdGF0ZSB0byBDTE9TSU5HICgyKS5cbiAgICAgIC8vIC0gSWYgbmVpdGhlciBjb2RlIG5vciByZWFzb24gaXMgcHJlc2VudCwgdGhlIFdlYlNvY2tldCBDbG9zZVxuICAgICAgLy8gICBtZXNzYWdlIG11c3Qgbm90IGhhdmUgYSBib2R5LlxuICAgICAgLy8gLSBJZiBjb2RlIGlzIHByZXNlbnQsIHRoZW4gdGhlIHN0YXR1cyBjb2RlIHRvIHVzZSBpbiB0aGVcbiAgICAgIC8vICAgV2ViU29ja2V0IENsb3NlIG1lc3NhZ2UgbXVzdCBiZSB0aGUgaW50ZWdlciBnaXZlbiBieSBjb2RlLlxuICAgICAgLy8gLSBJZiByZWFzb24gaXMgYWxzbyBwcmVzZW50LCB0aGVuIHJlYXNvbkJ5dGVzIG11c3QgYmVcbiAgICAgIC8vICAgcHJvdmlkZWQgaW4gdGhlIENsb3NlIG1lc3NhZ2UgYWZ0ZXIgdGhlIHN0YXR1cyBjb2RlLlxuXG4gICAgICBjb25zdCBmcmFtZSA9IG5ldyBXZWJzb2NrZXRGcmFtZVNlbmQoKVxuXG4gICAgICAvLyBJZiBuZWl0aGVyIGNvZGUgbm9yIHJlYXNvbiBpcyBwcmVzZW50LCB0aGUgV2ViU29ja2V0IENsb3NlXG4gICAgICAvLyBtZXNzYWdlIG11c3Qgbm90IGhhdmUgYSBib2R5LlxuXG4gICAgICAvLyBJZiBjb2RlIGlzIHByZXNlbnQsIHRoZW4gdGhlIHN0YXR1cyBjb2RlIHRvIHVzZSBpbiB0aGVcbiAgICAgIC8vIFdlYlNvY2tldCBDbG9zZSBtZXNzYWdlIG11c3QgYmUgdGhlIGludGVnZXIgZ2l2ZW4gYnkgY29kZS5cbiAgICAgIGlmIChjb2RlICE9PSB1bmRlZmluZWQgJiYgcmVhc29uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZnJhbWUuZnJhbWVEYXRhID0gQnVmZmVyLmFsbG9jVW5zYWZlKDIpXG4gICAgICAgIGZyYW1lLmZyYW1lRGF0YS53cml0ZVVJbnQxNkJFKGNvZGUsIDApXG4gICAgICB9IGVsc2UgaWYgKGNvZGUgIT09IHVuZGVmaW5lZCAmJiByZWFzb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBJZiByZWFzb24gaXMgYWxzbyBwcmVzZW50LCB0aGVuIHJlYXNvbkJ5dGVzIG11c3QgYmVcbiAgICAgICAgLy8gcHJvdmlkZWQgaW4gdGhlIENsb3NlIG1lc3NhZ2UgYWZ0ZXIgdGhlIHN0YXR1cyBjb2RlLlxuICAgICAgICBmcmFtZS5mcmFtZURhdGEgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMiArIHJlYXNvbkJ5dGVMZW5ndGgpXG4gICAgICAgIGZyYW1lLmZyYW1lRGF0YS53cml0ZVVJbnQxNkJFKGNvZGUsIDApXG4gICAgICAgIC8vIHRoZSBib2R5IE1BWSBjb250YWluIFVURi04LWVuY29kZWQgZGF0YSB3aXRoIHZhbHVlIC9yZWFzb24vXG4gICAgICAgIGZyYW1lLmZyYW1lRGF0YS53cml0ZShyZWFzb24sIDIsICd1dGYtOCcpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmcmFtZS5mcmFtZURhdGEgPSBlbXB0eUJ1ZmZlclxuICAgICAgfVxuXG4gICAgICAvKiogQHR5cGUge2ltcG9ydCgnc3RyZWFtJykuRHVwbGV4fSAqL1xuICAgICAgY29uc3Qgc29ja2V0ID0gdGhpc1trUmVzcG9uc2VdLnNvY2tldFxuXG4gICAgICBzb2NrZXQud3JpdGUoZnJhbWUuY3JlYXRlRnJhbWUob3Bjb2Rlcy5DTE9TRSksIChlcnIpID0+IHtcbiAgICAgICAgaWYgKCFlcnIpIHtcbiAgICAgICAgICB0aGlzW2tTZW50Q2xvc2VdID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgICAvLyBVcG9uIGVpdGhlciBzZW5kaW5nIG9yIHJlY2VpdmluZyBhIENsb3NlIGNvbnRyb2wgZnJhbWUsIGl0IGlzIHNhaWRcbiAgICAgIC8vIHRoYXQgX1RoZSBXZWJTb2NrZXQgQ2xvc2luZyBIYW5kc2hha2UgaXMgU3RhcnRlZF8gYW5kIHRoYXQgdGhlXG4gICAgICAvLyBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBpbiB0aGUgQ0xPU0lORyBzdGF0ZS5cbiAgICAgIHRoaXNba1JlYWR5U3RhdGVdID0gc3RhdGVzLkNMT1NJTkdcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT3RoZXJ3aXNlXG4gICAgICAvLyBTZXQgdGhpcydzIHJlYWR5IHN0YXRlIHRvIENMT1NJTkcgKDIpLlxuICAgICAgdGhpc1trUmVhZHlTdGF0ZV0gPSBXZWJTb2NrZXQuQ0xPU0lOR1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2RvbS13ZWJzb2NrZXQtc2VuZFxuICAgKiBAcGFyYW0ge05vZGVKUy5UeXBlZEFycmF5fEFycmF5QnVmZmVyfEJsb2J8c3RyaW5nfSBkYXRhXG4gICAqL1xuICBzZW5kIChkYXRhKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ1dlYlNvY2tldC5zZW5kJyB9KVxuXG4gICAgZGF0YSA9IHdlYmlkbC5jb252ZXJ0ZXJzLldlYlNvY2tldFNlbmREYXRhKGRhdGEpXG5cbiAgICAvLyAxLiBJZiB0aGlzJ3MgcmVhZHkgc3RhdGUgaXMgQ09OTkVDVElORywgdGhlbiB0aHJvdyBhblxuICAgIC8vICAgIFwiSW52YWxpZFN0YXRlRXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgaWYgKHRoaXNba1JlYWR5U3RhdGVdID09PSBXZWJTb2NrZXQuQ09OTkVDVElORykge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignU2VudCBiZWZvcmUgY29ubmVjdGVkLicsICdJbnZhbGlkU3RhdGVFcnJvcicpXG4gICAgfVxuXG4gICAgLy8gMi4gUnVuIHRoZSBhcHByb3ByaWF0ZSBzZXQgb2Ygc3RlcHMgZnJvbSB0aGUgZm9sbG93aW5nIGxpc3Q6XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tNi4xXG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tNS4yXG5cbiAgICBpZiAoIWlzRXN0YWJsaXNoZWQodGhpcykgfHwgaXNDbG9zaW5nKHRoaXMpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvKiogQHR5cGUge2ltcG9ydCgnc3RyZWFtJykuRHVwbGV4fSAqL1xuICAgIGNvbnN0IHNvY2tldCA9IHRoaXNba1Jlc3BvbnNlXS5zb2NrZXRcblxuICAgIC8vIElmIGRhdGEgaXMgYSBzdHJpbmdcbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBJZiB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQgYW5kIHRoZSBXZWJTb2NrZXRcbiAgICAgIC8vIGNsb3NpbmcgaGFuZHNoYWtlIGhhcyBub3QgeWV0IHN0YXJ0ZWQsIHRoZW4gdGhlIHVzZXIgYWdlbnRcbiAgICAgIC8vIG11c3Qgc2VuZCBhIFdlYlNvY2tldCBNZXNzYWdlIGNvbXByaXNlZCBvZiB0aGUgZGF0YSBhcmd1bWVudFxuICAgICAgLy8gdXNpbmcgYSB0ZXh0IGZyYW1lIG9wY29kZTsgaWYgdGhlIGRhdGEgY2Fubm90IGJlIHNlbnQsIGUuZy5cbiAgICAgIC8vIGJlY2F1c2UgaXQgd291bGQgbmVlZCB0byBiZSBidWZmZXJlZCBidXQgdGhlIGJ1ZmZlciBpcyBmdWxsLFxuICAgICAgLy8gdGhlIHVzZXIgYWdlbnQgbXVzdCBmbGFnIHRoZSBXZWJTb2NrZXQgYXMgZnVsbCBhbmQgdGhlbiBjbG9zZVxuICAgICAgLy8gdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uLiBBbnkgaW52b2NhdGlvbiBvZiB0aGlzIG1ldGhvZCB3aXRoIGFcbiAgICAgIC8vIHN0cmluZyBhcmd1bWVudCB0aGF0IGRvZXMgbm90IHRocm93IGFuIGV4Y2VwdGlvbiBtdXN0IGluY3JlYXNlXG4gICAgICAvLyB0aGUgYnVmZmVyZWRBbW91bnQgYXR0cmlidXRlIGJ5IHRoZSBudW1iZXIgb2YgYnl0ZXMgbmVlZGVkIHRvXG4gICAgICAvLyBleHByZXNzIHRoZSBhcmd1bWVudCBhcyBVVEYtOC5cblxuICAgICAgY29uc3QgdmFsdWUgPSBCdWZmZXIuZnJvbShkYXRhKVxuICAgICAgY29uc3QgZnJhbWUgPSBuZXcgV2Vic29ja2V0RnJhbWVTZW5kKHZhbHVlKVxuICAgICAgY29uc3QgYnVmZmVyID0gZnJhbWUuY3JlYXRlRnJhbWUob3Bjb2Rlcy5URVhUKVxuXG4gICAgICB0aGlzLiNidWZmZXJlZEFtb3VudCArPSB2YWx1ZS5ieXRlTGVuZ3RoXG4gICAgICBzb2NrZXQud3JpdGUoYnVmZmVyLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuI2J1ZmZlcmVkQW1vdW50IC09IHZhbHVlLmJ5dGVMZW5ndGhcbiAgICAgIH0pXG4gICAgfSBlbHNlIGlmICh0eXBlcy5pc0FycmF5QnVmZmVyKGRhdGEpKSB7XG4gICAgICAvLyBJZiB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQsIGFuZCB0aGUgV2ViU29ja2V0XG4gICAgICAvLyBjbG9zaW5nIGhhbmRzaGFrZSBoYXMgbm90IHlldCBzdGFydGVkLCB0aGVuIHRoZSB1c2VyIGFnZW50IG11c3RcbiAgICAgIC8vIHNlbmQgYSBXZWJTb2NrZXQgTWVzc2FnZSBjb21wcmlzZWQgb2YgZGF0YSB1c2luZyBhIGJpbmFyeSBmcmFtZVxuICAgICAgLy8gb3Bjb2RlOyBpZiB0aGUgZGF0YSBjYW5ub3QgYmUgc2VudCwgZS5nLiBiZWNhdXNlIGl0IHdvdWxkIG5lZWRcbiAgICAgIC8vIHRvIGJlIGJ1ZmZlcmVkIGJ1dCB0aGUgYnVmZmVyIGlzIGZ1bGwsIHRoZSB1c2VyIGFnZW50IG11c3QgZmxhZ1xuICAgICAgLy8gdGhlIFdlYlNvY2tldCBhcyBmdWxsIGFuZCB0aGVuIGNsb3NlIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbi5cbiAgICAgIC8vIFRoZSBkYXRhIHRvIGJlIHNlbnQgaXMgdGhlIGRhdGEgc3RvcmVkIGluIHRoZSBidWZmZXIgZGVzY3JpYmVkXG4gICAgICAvLyBieSB0aGUgQXJyYXlCdWZmZXIgb2JqZWN0LiBBbnkgaW52b2NhdGlvbiBvZiB0aGlzIG1ldGhvZCB3aXRoIGFuXG4gICAgICAvLyBBcnJheUJ1ZmZlciBhcmd1bWVudCB0aGF0IGRvZXMgbm90IHRocm93IGFuIGV4Y2VwdGlvbiBtdXN0XG4gICAgICAvLyBpbmNyZWFzZSB0aGUgYnVmZmVyZWRBbW91bnQgYXR0cmlidXRlIGJ5IHRoZSBsZW5ndGggb2YgdGhlXG4gICAgICAvLyBBcnJheUJ1ZmZlciBpbiBieXRlcy5cblxuICAgICAgY29uc3QgdmFsdWUgPSBCdWZmZXIuZnJvbShkYXRhKVxuICAgICAgY29uc3QgZnJhbWUgPSBuZXcgV2Vic29ja2V0RnJhbWVTZW5kKHZhbHVlKVxuICAgICAgY29uc3QgYnVmZmVyID0gZnJhbWUuY3JlYXRlRnJhbWUob3Bjb2Rlcy5CSU5BUlkpXG5cbiAgICAgIHRoaXMuI2J1ZmZlcmVkQW1vdW50ICs9IHZhbHVlLmJ5dGVMZW5ndGhcbiAgICAgIHNvY2tldC53cml0ZShidWZmZXIsICgpID0+IHtcbiAgICAgICAgdGhpcy4jYnVmZmVyZWRBbW91bnQgLT0gdmFsdWUuYnl0ZUxlbmd0aFxuICAgICAgfSlcbiAgICB9IGVsc2UgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhkYXRhKSkge1xuICAgICAgLy8gSWYgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkLCBhbmQgdGhlIFdlYlNvY2tldFxuICAgICAgLy8gY2xvc2luZyBoYW5kc2hha2UgaGFzIG5vdCB5ZXQgc3RhcnRlZCwgdGhlbiB0aGUgdXNlciBhZ2VudCBtdXN0XG4gICAgICAvLyBzZW5kIGEgV2ViU29ja2V0IE1lc3NhZ2UgY29tcHJpc2VkIG9mIGRhdGEgdXNpbmcgYSBiaW5hcnkgZnJhbWVcbiAgICAgIC8vIG9wY29kZTsgaWYgdGhlIGRhdGEgY2Fubm90IGJlIHNlbnQsIGUuZy4gYmVjYXVzZSBpdCB3b3VsZCBuZWVkIHRvXG4gICAgICAvLyBiZSBidWZmZXJlZCBidXQgdGhlIGJ1ZmZlciBpcyBmdWxsLCB0aGUgdXNlciBhZ2VudCBtdXN0IGZsYWcgdGhlXG4gICAgICAvLyBXZWJTb2NrZXQgYXMgZnVsbCBhbmQgdGhlbiBjbG9zZSB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24uIFRoZVxuICAgICAgLy8gZGF0YSB0byBiZSBzZW50IGlzIHRoZSBkYXRhIHN0b3JlZCBpbiB0aGUgc2VjdGlvbiBvZiB0aGUgYnVmZmVyXG4gICAgICAvLyBkZXNjcmliZWQgYnkgdGhlIEFycmF5QnVmZmVyIG9iamVjdCB0aGF0IGRhdGEgcmVmZXJlbmNlcy4gQW55XG4gICAgICAvLyBpbnZvY2F0aW9uIG9mIHRoaXMgbWV0aG9kIHdpdGggdGhpcyBraW5kIG9mIGFyZ3VtZW50IHRoYXQgZG9lc1xuICAgICAgLy8gbm90IHRocm93IGFuIGV4Y2VwdGlvbiBtdXN0IGluY3JlYXNlIHRoZSBidWZmZXJlZEFtb3VudCBhdHRyaWJ1dGVcbiAgICAgIC8vIGJ5IHRoZSBsZW5ndGggb2YgZGF0YeKAmXMgYnVmZmVyIGluIGJ5dGVzLlxuXG4gICAgICBjb25zdCBhYiA9IEJ1ZmZlci5mcm9tKGRhdGEsIGRhdGEuYnl0ZU9mZnNldCwgZGF0YS5ieXRlTGVuZ3RoKVxuXG4gICAgICBjb25zdCBmcmFtZSA9IG5ldyBXZWJzb2NrZXRGcmFtZVNlbmQoYWIpXG4gICAgICBjb25zdCBidWZmZXIgPSBmcmFtZS5jcmVhdGVGcmFtZShvcGNvZGVzLkJJTkFSWSlcblxuICAgICAgdGhpcy4jYnVmZmVyZWRBbW91bnQgKz0gYWIuYnl0ZUxlbmd0aFxuICAgICAgc29ja2V0LndyaXRlKGJ1ZmZlciwgKCkgPT4ge1xuICAgICAgICB0aGlzLiNidWZmZXJlZEFtb3VudCAtPSBhYi5ieXRlTGVuZ3RoXG4gICAgICB9KVxuICAgIH0gZWxzZSBpZiAoaXNCbG9iTGlrZShkYXRhKSkge1xuICAgICAgLy8gSWYgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkLCBhbmQgdGhlIFdlYlNvY2tldFxuICAgICAgLy8gY2xvc2luZyBoYW5kc2hha2UgaGFzIG5vdCB5ZXQgc3RhcnRlZCwgdGhlbiB0aGUgdXNlciBhZ2VudCBtdXN0XG4gICAgICAvLyBzZW5kIGEgV2ViU29ja2V0IE1lc3NhZ2UgY29tcHJpc2VkIG9mIGRhdGEgdXNpbmcgYSBiaW5hcnkgZnJhbWVcbiAgICAgIC8vIG9wY29kZTsgaWYgdGhlIGRhdGEgY2Fubm90IGJlIHNlbnQsIGUuZy4gYmVjYXVzZSBpdCB3b3VsZCBuZWVkIHRvXG4gICAgICAvLyBiZSBidWZmZXJlZCBidXQgdGhlIGJ1ZmZlciBpcyBmdWxsLCB0aGUgdXNlciBhZ2VudCBtdXN0IGZsYWcgdGhlXG4gICAgICAvLyBXZWJTb2NrZXQgYXMgZnVsbCBhbmQgdGhlbiBjbG9zZSB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24uIFRoZSBkYXRhXG4gICAgICAvLyB0byBiZSBzZW50IGlzIHRoZSByYXcgZGF0YSByZXByZXNlbnRlZCBieSB0aGUgQmxvYiBvYmplY3QuIEFueVxuICAgICAgLy8gaW52b2NhdGlvbiBvZiB0aGlzIG1ldGhvZCB3aXRoIGEgQmxvYiBhcmd1bWVudCB0aGF0IGRvZXMgbm90IHRocm93XG4gICAgICAvLyBhbiBleGNlcHRpb24gbXVzdCBpbmNyZWFzZSB0aGUgYnVmZmVyZWRBbW91bnQgYXR0cmlidXRlIGJ5IHRoZSBzaXplXG4gICAgICAvLyBvZiB0aGUgQmxvYiBvYmplY3TigJlzIHJhdyBkYXRhLCBpbiBieXRlcy5cblxuICAgICAgY29uc3QgZnJhbWUgPSBuZXcgV2Vic29ja2V0RnJhbWVTZW5kKClcblxuICAgICAgZGF0YS5hcnJheUJ1ZmZlcigpLnRoZW4oKGFiKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gQnVmZmVyLmZyb20oYWIpXG4gICAgICAgIGZyYW1lLmZyYW1lRGF0YSA9IHZhbHVlXG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IGZyYW1lLmNyZWF0ZUZyYW1lKG9wY29kZXMuQklOQVJZKVxuXG4gICAgICAgIHRoaXMuI2J1ZmZlcmVkQW1vdW50ICs9IHZhbHVlLmJ5dGVMZW5ndGhcbiAgICAgICAgc29ja2V0LndyaXRlKGJ1ZmZlciwgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuI2J1ZmZlcmVkQW1vdW50IC09IHZhbHVlLmJ5dGVMZW5ndGhcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgZ2V0IHJlYWR5U3RhdGUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIC8vIFRoZSByZWFkeVN0YXRlIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXMncyByZWFkeSBzdGF0ZS5cbiAgICByZXR1cm4gdGhpc1trUmVhZHlTdGF0ZV1cbiAgfVxuXG4gIGdldCBidWZmZXJlZEFtb3VudCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgcmV0dXJuIHRoaXMuI2J1ZmZlcmVkQW1vdW50XG4gIH1cblxuICBnZXQgdXJsICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICAvLyBUaGUgdXJsIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXMncyB1cmwsIHNlcmlhbGl6ZWQuXG4gICAgcmV0dXJuIFVSTFNlcmlhbGl6ZXIodGhpc1trV2ViU29ja2V0VVJMXSlcbiAgfVxuXG4gIGdldCBleHRlbnNpb25zICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXh0ZW5zaW9uc1xuICB9XG5cbiAgZ2V0IHByb3RvY29sICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICByZXR1cm4gdGhpcy4jcHJvdG9jb2xcbiAgfVxuXG4gIGdldCBvbm9wZW4gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIHJldHVybiB0aGlzLiNldmVudHMub3BlblxuICB9XG5cbiAgc2V0IG9ub3BlbiAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICBpZiAodGhpcy4jZXZlbnRzLm9wZW4pIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignb3BlbicsIHRoaXMuI2V2ZW50cy5vcGVuKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5vcGVuID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignb3BlbicsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNldmVudHMub3BlbiA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgb25lcnJvciAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50cy5lcnJvclxuICB9XG5cbiAgc2V0IG9uZXJyb3IgKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgaWYgKHRoaXMuI2V2ZW50cy5lcnJvcikge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuI2V2ZW50cy5lcnJvcilcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLiNldmVudHMuZXJyb3IgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNldmVudHMuZXJyb3IgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgZ2V0IG9uY2xvc2UgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIHJldHVybiB0aGlzLiNldmVudHMuY2xvc2VcbiAgfVxuXG4gIHNldCBvbmNsb3NlIChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIGlmICh0aGlzLiNldmVudHMuY2xvc2UpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xvc2UnLCB0aGlzLiNldmVudHMuY2xvc2UpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy4jZXZlbnRzLmNsb3NlID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignY2xvc2UnLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy4jZXZlbnRzLmNsb3NlID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBvbm1lc3NhZ2UgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIHJldHVybiB0aGlzLiNldmVudHMubWVzc2FnZVxuICB9XG5cbiAgc2V0IG9ubWVzc2FnZSAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICBpZiAodGhpcy4jZXZlbnRzLm1lc3NhZ2UpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHRoaXMuI2V2ZW50cy5tZXNzYWdlKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5tZXNzYWdlID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNldmVudHMubWVzc2FnZSA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgYmluYXJ5VHlwZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgcmV0dXJuIHRoaXNba0JpbmFyeVR5cGVdXG4gIH1cblxuICBzZXQgYmluYXJ5VHlwZSAodHlwZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIGlmICh0eXBlICE9PSAnYmxvYicgJiYgdHlwZSAhPT0gJ2FycmF5YnVmZmVyJykge1xuICAgICAgdGhpc1trQmluYXJ5VHlwZV0gPSAnYmxvYidcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trQmluYXJ5VHlwZV0gPSB0eXBlXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZmVlZGJhY2stZnJvbS10aGUtcHJvdG9jb2xcbiAgICovXG4gICNvbkNvbm5lY3Rpb25Fc3RhYmxpc2hlZCAocmVzcG9uc2UpIHtcbiAgICAvLyBwcm9jZXNzUmVzcG9uc2UgaXMgY2FsbGVkIHdoZW4gdGhlIFwicmVzcG9uc2XigJlzIGhlYWRlciBsaXN0IGhhcyBiZWVuIHJlY2VpdmVkIGFuZCBpbml0aWFsaXplZC5cIlxuICAgIC8vIG9uY2UgdGhpcyBoYXBwZW5zLCB0aGUgY29ubmVjdGlvbiBpcyBvcGVuXG4gICAgdGhpc1trUmVzcG9uc2VdID0gcmVzcG9uc2VcblxuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBCeXRlUGFyc2VyKHRoaXMpXG4gICAgcGFyc2VyLm9uKCdkcmFpbicsIGZ1bmN0aW9uIG9uUGFyc2VyRHJhaW4gKCkge1xuICAgICAgdGhpcy53c1trUmVzcG9uc2VdLnNvY2tldC5yZXN1bWUoKVxuICAgIH0pXG5cbiAgICByZXNwb25zZS5zb2NrZXQud3MgPSB0aGlzXG4gICAgdGhpc1trQnl0ZVBhcnNlcl0gPSBwYXJzZXJcblxuICAgIC8vIDEuIENoYW5nZSB0aGUgcmVhZHkgc3RhdGUgdG8gT1BFTiAoMSkuXG4gICAgdGhpc1trUmVhZHlTdGF0ZV0gPSBzdGF0ZXMuT1BFTlxuXG4gICAgLy8gMi4gQ2hhbmdlIHRoZSBleHRlbnNpb25zIGF0dHJpYnV0ZeKAmXMgdmFsdWUgdG8gdGhlIGV4dGVuc2lvbnMgaW4gdXNlLCBpZlxuICAgIC8vICAgIGl0IGlzIG5vdCB0aGUgbnVsbCB2YWx1ZS5cbiAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzY0NTUjc2VjdGlvbi05LjFcbiAgICBjb25zdCBleHRlbnNpb25zID0gcmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdzZWMtd2Vic29ja2V0LWV4dGVuc2lvbnMnKVxuXG4gICAgaWYgKGV4dGVuc2lvbnMgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuI2V4dGVuc2lvbnMgPSBleHRlbnNpb25zXG4gICAgfVxuXG4gICAgLy8gMy4gQ2hhbmdlIHRoZSBwcm90b2NvbCBhdHRyaWJ1dGXigJlzIHZhbHVlIHRvIHRoZSBzdWJwcm90b2NvbCBpbiB1c2UsIGlmXG4gICAgLy8gICAgaXQgaXMgbm90IHRoZSBudWxsIHZhbHVlLlxuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NSNzZWN0aW9uLTEuOVxuICAgIGNvbnN0IHByb3RvY29sID0gcmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdzZWMtd2Vic29ja2V0LXByb3RvY29sJylcblxuICAgIGlmIChwcm90b2NvbCAhPT0gbnVsbCkge1xuICAgICAgdGhpcy4jcHJvdG9jb2wgPSBwcm90b2NvbFxuICAgIH1cblxuICAgIC8vIDQuIEZpcmUgYW4gZXZlbnQgbmFtZWQgb3BlbiBhdCB0aGUgV2ViU29ja2V0IG9iamVjdC5cbiAgICBmaXJlRXZlbnQoJ29wZW4nLCB0aGlzKVxuICB9XG59XG5cbi8vIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2RvbS13ZWJzb2NrZXQtY29ubmVjdGluZ1xuV2ViU29ja2V0LkNPTk5FQ1RJTkcgPSBXZWJTb2NrZXQucHJvdG90eXBlLkNPTk5FQ1RJTkcgPSBzdGF0ZXMuQ09OTkVDVElOR1xuLy8gaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZG9tLXdlYnNvY2tldC1vcGVuXG5XZWJTb2NrZXQuT1BFTiA9IFdlYlNvY2tldC5wcm90b3R5cGUuT1BFTiA9IHN0YXRlcy5PUEVOXG4vLyBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNkb20td2Vic29ja2V0LWNsb3NpbmdcbldlYlNvY2tldC5DTE9TSU5HID0gV2ViU29ja2V0LnByb3RvdHlwZS5DTE9TSU5HID0gc3RhdGVzLkNMT1NJTkdcbi8vIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2RvbS13ZWJzb2NrZXQtY2xvc2VkXG5XZWJTb2NrZXQuQ0xPU0VEID0gV2ViU29ja2V0LnByb3RvdHlwZS5DTE9TRUQgPSBzdGF0ZXMuQ0xPU0VEXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFdlYlNvY2tldC5wcm90b3R5cGUsIHtcbiAgQ09OTkVDVElORzogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgT1BFTjogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgQ0xPU0lORzogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgQ0xPU0VEOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICB1cmw6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlYWR5U3RhdGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGJ1ZmZlcmVkQW1vdW50OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbm9wZW46IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9uZXJyb3I6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9uY2xvc2U6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNsb3NlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbm1lc3NhZ2U6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGJpbmFyeVR5cGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHNlbmQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGV4dGVuc2lvbnM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHByb3RvY29sOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnV2ViU29ja2V0JyxcbiAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH1cbn0pXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFdlYlNvY2tldCwge1xuICBDT05ORUNUSU5HOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBPUEVOOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBDTE9TSU5HOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBDTE9TRUQ6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnNcbn0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxET01TdHJpbmc+J10gPSB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZ1xuKVxuXG53ZWJpZGwuY29udmVydGVyc1snRE9NU3RyaW5nIG9yIHNlcXVlbmNlPERPTVN0cmluZz4nXSA9IGZ1bmN0aW9uIChWKSB7XG4gIGlmICh3ZWJpZGwudXRpbC5UeXBlKFYpID09PSAnT2JqZWN0JyAmJiBTeW1ib2wuaXRlcmF0b3IgaW4gVikge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8RE9NU3RyaW5nPiddKFYpXG4gIH1cblxuICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKFYpXG59XG5cbi8vIFRoaXMgaW1wbGVtZW50cyB0aGUgcHJvcHNhbCBtYWRlIGluIGh0dHBzOi8vZ2l0aHViLmNvbS93aGF0d2cvd2Vic29ja2V0cy9pc3N1ZXMvNDJcbndlYmlkbC5jb252ZXJ0ZXJzLldlYlNvY2tldEluaXQgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIHtcbiAgICBrZXk6ICdwcm90b2NvbHMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ0RPTVN0cmluZyBvciBzZXF1ZW5jZTxET01TdHJpbmc+J10sXG4gICAgZ2V0IGRlZmF1bHRWYWx1ZSAoKSB7XG4gICAgICByZXR1cm4gW11cbiAgICB9XG4gIH0sXG4gIHtcbiAgICBrZXk6ICdkaXNwYXRjaGVyJyxcbiAgICBjb252ZXJ0ZXI6IChWKSA9PiBWLFxuICAgIGdldCBkZWZhdWx0VmFsdWUgKCkge1xuICAgICAgcmV0dXJuIGdldEdsb2JhbERpc3BhdGNoZXIoKVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGtleTogJ2hlYWRlcnMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzLkhlYWRlcnNJbml0KVxuICB9XG5dKVxuXG53ZWJpZGwuY29udmVydGVyc1snRE9NU3RyaW5nIG9yIHNlcXVlbmNlPERPTVN0cmluZz4gb3IgV2ViU29ja2V0SW5pdCddID0gZnVuY3Rpb24gKFYpIHtcbiAgaWYgKHdlYmlkbC51dGlsLlR5cGUoVikgPT09ICdPYmplY3QnICYmICEoU3ltYm9sLml0ZXJhdG9yIGluIFYpKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLldlYlNvY2tldEluaXQoVilcbiAgfVxuXG4gIHJldHVybiB7IHByb3RvY29sczogd2ViaWRsLmNvbnZlcnRlcnNbJ0RPTVN0cmluZyBvciBzZXF1ZW5jZTxET01TdHJpbmc+J10oVikgfVxufVxuXG53ZWJpZGwuY29udmVydGVycy5XZWJTb2NrZXRTZW5kRGF0YSA9IGZ1bmN0aW9uIChWKSB7XG4gIGlmICh3ZWJpZGwudXRpbC5UeXBlKFYpID09PSAnT2JqZWN0Jykge1xuICAgIGlmIChpc0Jsb2JMaWtlKFYpKSB7XG4gICAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuQmxvYihWLCB7IHN0cmljdDogZmFsc2UgfSlcbiAgICB9XG5cbiAgICBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KFYpIHx8IHR5cGVzLmlzQW55QXJyYXlCdWZmZXIoVikpIHtcbiAgICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5CdWZmZXJTb3VyY2UoVilcbiAgICB9XG4gIH1cblxuICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKFYpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBXZWJTb2NrZXRcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IENsaWVudCA9IHJlcXVpcmUoJy4vbGliL2NsaWVudCcpXG5jb25zdCBEaXNwYXRjaGVyID0gcmVxdWlyZSgnLi9saWIvZGlzcGF0Y2hlcicpXG5jb25zdCBlcnJvcnMgPSByZXF1aXJlKCcuL2xpYi9jb3JlL2Vycm9ycycpXG5jb25zdCBQb29sID0gcmVxdWlyZSgnLi9saWIvcG9vbCcpXG5jb25zdCBCYWxhbmNlZFBvb2wgPSByZXF1aXJlKCcuL2xpYi9iYWxhbmNlZC1wb29sJylcbmNvbnN0IEFnZW50ID0gcmVxdWlyZSgnLi9saWIvYWdlbnQnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4vbGliL2NvcmUvdXRpbCcpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gPSBlcnJvcnNcbmNvbnN0IGFwaSA9IHJlcXVpcmUoJy4vbGliL2FwaScpXG5jb25zdCBidWlsZENvbm5lY3RvciA9IHJlcXVpcmUoJy4vbGliL2NvcmUvY29ubmVjdCcpXG5jb25zdCBNb2NrQ2xpZW50ID0gcmVxdWlyZSgnLi9saWIvbW9jay9tb2NrLWNsaWVudCcpXG5jb25zdCBNb2NrQWdlbnQgPSByZXF1aXJlKCcuL2xpYi9tb2NrL21vY2stYWdlbnQnKVxuY29uc3QgTW9ja1Bvb2wgPSByZXF1aXJlKCcuL2xpYi9tb2NrL21vY2stcG9vbCcpXG5jb25zdCBtb2NrRXJyb3JzID0gcmVxdWlyZSgnLi9saWIvbW9jay9tb2NrLWVycm9ycycpXG5jb25zdCBQcm94eUFnZW50ID0gcmVxdWlyZSgnLi9saWIvcHJveHktYWdlbnQnKVxuY29uc3QgUmV0cnlIYW5kbGVyID0gcmVxdWlyZSgnLi9saWIvaGFuZGxlci9SZXRyeUhhbmRsZXInKVxuY29uc3QgeyBnZXRHbG9iYWxEaXNwYXRjaGVyLCBzZXRHbG9iYWxEaXNwYXRjaGVyIH0gPSByZXF1aXJlKCcuL2xpYi9nbG9iYWwnKVxuY29uc3QgRGVjb3JhdG9ySGFuZGxlciA9IHJlcXVpcmUoJy4vbGliL2hhbmRsZXIvRGVjb3JhdG9ySGFuZGxlcicpXG5jb25zdCBSZWRpcmVjdEhhbmRsZXIgPSByZXF1aXJlKCcuL2xpYi9oYW5kbGVyL1JlZGlyZWN0SGFuZGxlcicpXG5jb25zdCBjcmVhdGVSZWRpcmVjdEludGVyY2VwdG9yID0gcmVxdWlyZSgnLi9saWIvaW50ZXJjZXB0b3IvcmVkaXJlY3RJbnRlcmNlcHRvcicpXG5cbmxldCBoYXNDcnlwdG9cbnRyeSB7XG4gIHJlcXVpcmUoJ2NyeXB0bycpXG4gIGhhc0NyeXB0byA9IHRydWVcbn0gY2F0Y2gge1xuICBoYXNDcnlwdG8gPSBmYWxzZVxufVxuXG5PYmplY3QuYXNzaWduKERpc3BhdGNoZXIucHJvdG90eXBlLCBhcGkpXG5cbm1vZHVsZS5leHBvcnRzLkRpc3BhdGNoZXIgPSBEaXNwYXRjaGVyXG5tb2R1bGUuZXhwb3J0cy5DbGllbnQgPSBDbGllbnRcbm1vZHVsZS5leHBvcnRzLlBvb2wgPSBQb29sXG5tb2R1bGUuZXhwb3J0cy5CYWxhbmNlZFBvb2wgPSBCYWxhbmNlZFBvb2xcbm1vZHVsZS5leHBvcnRzLkFnZW50ID0gQWdlbnRcbm1vZHVsZS5leHBvcnRzLlByb3h5QWdlbnQgPSBQcm94eUFnZW50XG5tb2R1bGUuZXhwb3J0cy5SZXRyeUhhbmRsZXIgPSBSZXRyeUhhbmRsZXJcblxubW9kdWxlLmV4cG9ydHMuRGVjb3JhdG9ySGFuZGxlciA9IERlY29yYXRvckhhbmRsZXJcbm1vZHVsZS5leHBvcnRzLlJlZGlyZWN0SGFuZGxlciA9IFJlZGlyZWN0SGFuZGxlclxubW9kdWxlLmV4cG9ydHMuY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvciA9IGNyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3JcblxubW9kdWxlLmV4cG9ydHMuYnVpbGRDb25uZWN0b3IgPSBidWlsZENvbm5lY3RvclxubW9kdWxlLmV4cG9ydHMuZXJyb3JzID0gZXJyb3JzXG5cbmZ1bmN0aW9uIG1ha2VEaXNwYXRjaGVyIChmbikge1xuICByZXR1cm4gKHVybCwgb3B0cywgaGFuZGxlcikgPT4ge1xuICAgIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaGFuZGxlciA9IG9wdHNcbiAgICAgIG9wdHMgPSBudWxsXG4gICAgfVxuXG4gICAgaWYgKCF1cmwgfHwgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnICYmIHR5cGVvZiB1cmwgIT09ICdvYmplY3QnICYmICEodXJsIGluc3RhbmNlb2YgVVJMKSkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCB1cmwnKVxuICAgIH1cblxuICAgIGlmIChvcHRzICE9IG51bGwgJiYgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb3B0cycpXG4gICAgfVxuXG4gICAgaWYgKG9wdHMgJiYgb3B0cy5wYXRoICE9IG51bGwpIHtcbiAgICAgIGlmICh0eXBlb2Ygb3B0cy5wYXRoICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb3B0cy5wYXRoJylcbiAgICAgIH1cblxuICAgICAgbGV0IHBhdGggPSBvcHRzLnBhdGhcbiAgICAgIGlmICghb3B0cy5wYXRoLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgICBwYXRoID0gYC8ke3BhdGh9YFxuICAgICAgfVxuXG4gICAgICB1cmwgPSBuZXcgVVJMKHV0aWwucGFyc2VPcmlnaW4odXJsKS5vcmlnaW4gKyBwYXRoKVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIW9wdHMpIHtcbiAgICAgICAgb3B0cyA9IHR5cGVvZiB1cmwgPT09ICdvYmplY3QnID8gdXJsIDoge31cbiAgICAgIH1cblxuICAgICAgdXJsID0gdXRpbC5wYXJzZVVSTCh1cmwpXG4gICAgfVxuXG4gICAgY29uc3QgeyBhZ2VudCwgZGlzcGF0Y2hlciA9IGdldEdsb2JhbERpc3BhdGNoZXIoKSB9ID0gb3B0c1xuXG4gICAgaWYgKGFnZW50KSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3Vuc3VwcG9ydGVkIG9wdHMuYWdlbnQuIERpZCB5b3UgbWVhbiBvcHRzLmNsaWVudD8nKVxuICAgIH1cblxuICAgIHJldHVybiBmbi5jYWxsKGRpc3BhdGNoZXIsIHtcbiAgICAgIC4uLm9wdHMsXG4gICAgICBvcmlnaW46IHVybC5vcmlnaW4sXG4gICAgICBwYXRoOiB1cmwuc2VhcmNoID8gYCR7dXJsLnBhdGhuYW1lfSR7dXJsLnNlYXJjaH1gIDogdXJsLnBhdGhuYW1lLFxuICAgICAgbWV0aG9kOiBvcHRzLm1ldGhvZCB8fCAob3B0cy5ib2R5ID8gJ1BVVCcgOiAnR0VUJylcbiAgICB9LCBoYW5kbGVyKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzLnNldEdsb2JhbERpc3BhdGNoZXIgPSBzZXRHbG9iYWxEaXNwYXRjaGVyXG5tb2R1bGUuZXhwb3J0cy5nZXRHbG9iYWxEaXNwYXRjaGVyID0gZ2V0R2xvYmFsRGlzcGF0Y2hlclxuXG5pZiAodXRpbC5ub2RlTWFqb3IgPiAxNiB8fCAodXRpbC5ub2RlTWFqb3IgPT09IDE2ICYmIHV0aWwubm9kZU1pbm9yID49IDgpKSB7XG4gIGxldCBmZXRjaEltcGwgPSBudWxsXG4gIG1vZHVsZS5leHBvcnRzLmZldGNoID0gYXN5bmMgZnVuY3Rpb24gZmV0Y2ggKHJlc291cmNlKSB7XG4gICAgaWYgKCFmZXRjaEltcGwpIHtcbiAgICAgIGZldGNoSW1wbCA9IHJlcXVpcmUoJy4vbGliL2ZldGNoJykuZmV0Y2hcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGZldGNoSW1wbCguLi5hcmd1bWVudHMpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAodHlwZW9mIGVyciA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoZXJyLCB0aGlzKVxuICAgICAgfVxuXG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gIH1cbiAgbW9kdWxlLmV4cG9ydHMuSGVhZGVycyA9IHJlcXVpcmUoJy4vbGliL2ZldGNoL2hlYWRlcnMnKS5IZWFkZXJzXG4gIG1vZHVsZS5leHBvcnRzLlJlc3BvbnNlID0gcmVxdWlyZSgnLi9saWIvZmV0Y2gvcmVzcG9uc2UnKS5SZXNwb25zZVxuICBtb2R1bGUuZXhwb3J0cy5SZXF1ZXN0ID0gcmVxdWlyZSgnLi9saWIvZmV0Y2gvcmVxdWVzdCcpLlJlcXVlc3RcbiAgbW9kdWxlLmV4cG9ydHMuRm9ybURhdGEgPSByZXF1aXJlKCcuL2xpYi9mZXRjaC9mb3JtZGF0YScpLkZvcm1EYXRhXG4gIG1vZHVsZS5leHBvcnRzLkZpbGUgPSByZXF1aXJlKCcuL2xpYi9mZXRjaC9maWxlJykuRmlsZVxuICBtb2R1bGUuZXhwb3J0cy5GaWxlUmVhZGVyID0gcmVxdWlyZSgnLi9saWIvZmlsZWFwaS9maWxlcmVhZGVyJykuRmlsZVJlYWRlclxuXG4gIGNvbnN0IHsgc2V0R2xvYmFsT3JpZ2luLCBnZXRHbG9iYWxPcmlnaW4gfSA9IHJlcXVpcmUoJy4vbGliL2ZldGNoL2dsb2JhbCcpXG5cbiAgbW9kdWxlLmV4cG9ydHMuc2V0R2xvYmFsT3JpZ2luID0gc2V0R2xvYmFsT3JpZ2luXG4gIG1vZHVsZS5leHBvcnRzLmdldEdsb2JhbE9yaWdpbiA9IGdldEdsb2JhbE9yaWdpblxuXG4gIGNvbnN0IHsgQ2FjaGVTdG9yYWdlIH0gPSByZXF1aXJlKCcuL2xpYi9jYWNoZS9jYWNoZXN0b3JhZ2UnKVxuICBjb25zdCB7IGtDb25zdHJ1Y3QgfSA9IHJlcXVpcmUoJy4vbGliL2NhY2hlL3N5bWJvbHMnKVxuXG4gIC8vIENhY2hlICYgQ2FjaGVTdG9yYWdlIGFyZSB0aWdodGx5IGNvdXBsZWQgd2l0aCBmZXRjaC4gRXZlbiBpZiBpdCBtYXkgcnVuXG4gIC8vIGluIGFuIG9sZGVyIHZlcnNpb24gb2YgTm9kZSwgaXQgZG9lc24ndCBoYXZlIGFueSB1c2Ugd2l0aG91dCBmZXRjaC5cbiAgbW9kdWxlLmV4cG9ydHMuY2FjaGVzID0gbmV3IENhY2hlU3RvcmFnZShrQ29uc3RydWN0KVxufVxuXG5pZiAodXRpbC5ub2RlTWFqb3IgPj0gMTYpIHtcbiAgY29uc3QgeyBkZWxldGVDb29raWUsIGdldENvb2tpZXMsIGdldFNldENvb2tpZXMsIHNldENvb2tpZSB9ID0gcmVxdWlyZSgnLi9saWIvY29va2llcycpXG5cbiAgbW9kdWxlLmV4cG9ydHMuZGVsZXRlQ29va2llID0gZGVsZXRlQ29va2llXG4gIG1vZHVsZS5leHBvcnRzLmdldENvb2tpZXMgPSBnZXRDb29raWVzXG4gIG1vZHVsZS5leHBvcnRzLmdldFNldENvb2tpZXMgPSBnZXRTZXRDb29raWVzXG4gIG1vZHVsZS5leHBvcnRzLnNldENvb2tpZSA9IHNldENvb2tpZVxuXG4gIGNvbnN0IHsgcGFyc2VNSU1FVHlwZSwgc2VyaWFsaXplQU1pbWVUeXBlIH0gPSByZXF1aXJlKCcuL2xpYi9mZXRjaC9kYXRhVVJMJylcblxuICBtb2R1bGUuZXhwb3J0cy5wYXJzZU1JTUVUeXBlID0gcGFyc2VNSU1FVHlwZVxuICBtb2R1bGUuZXhwb3J0cy5zZXJpYWxpemVBTWltZVR5cGUgPSBzZXJpYWxpemVBTWltZVR5cGVcbn1cblxuaWYgKHV0aWwubm9kZU1ham9yID49IDE4ICYmIGhhc0NyeXB0bykge1xuICBjb25zdCB7IFdlYlNvY2tldCB9ID0gcmVxdWlyZSgnLi9saWIvd2Vic29ja2V0L3dlYnNvY2tldCcpXG5cbiAgbW9kdWxlLmV4cG9ydHMuV2ViU29ja2V0ID0gV2ViU29ja2V0XG59XG5cbm1vZHVsZS5leHBvcnRzLnJlcXVlc3QgPSBtYWtlRGlzcGF0Y2hlcihhcGkucmVxdWVzdClcbm1vZHVsZS5leHBvcnRzLnN0cmVhbSA9IG1ha2VEaXNwYXRjaGVyKGFwaS5zdHJlYW0pXG5tb2R1bGUuZXhwb3J0cy5waXBlbGluZSA9IG1ha2VEaXNwYXRjaGVyKGFwaS5waXBlbGluZSlcbm1vZHVsZS5leHBvcnRzLmNvbm5lY3QgPSBtYWtlRGlzcGF0Y2hlcihhcGkuY29ubmVjdClcbm1vZHVsZS5leHBvcnRzLnVwZ3JhZGUgPSBtYWtlRGlzcGF0Y2hlcihhcGkudXBncmFkZSlcblxubW9kdWxlLmV4cG9ydHMuTW9ja0NsaWVudCA9IE1vY2tDbGllbnRcbm1vZHVsZS5leHBvcnRzLk1vY2tQb29sID0gTW9ja1Bvb2xcbm1vZHVsZS5leHBvcnRzLk1vY2tBZ2VudCA9IE1vY2tBZ2VudFxubW9kdWxlLmV4cG9ydHMubW9ja0Vycm9ycyA9IG1vY2tFcnJvcnNcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5IdHRwQ2xpZW50ID0gZXhwb3J0cy5pc0h0dHBzID0gZXhwb3J0cy5IdHRwQ2xpZW50UmVzcG9uc2UgPSBleHBvcnRzLkh0dHBDbGllbnRFcnJvciA9IGV4cG9ydHMuZ2V0UHJveHlVcmwgPSBleHBvcnRzLk1lZGlhVHlwZXMgPSBleHBvcnRzLkhlYWRlcnMgPSBleHBvcnRzLkh0dHBDb2RlcyA9IHZvaWQgMDtcbmNvbnN0IGh0dHAgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcImh0dHBcIikpO1xuY29uc3QgaHR0cHMgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcImh0dHBzXCIpKTtcbmNvbnN0IHBtID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL3Byb3h5XCIpKTtcbmNvbnN0IHR1bm5lbCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwidHVubmVsXCIpKTtcbmNvbnN0IHVuZGljaV8xID0gcmVxdWlyZShcInVuZGljaVwiKTtcbnZhciBIdHRwQ29kZXM7XG4oZnVuY3Rpb24gKEh0dHBDb2Rlcykge1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJPS1wiXSA9IDIwMF0gPSBcIk9LXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIk11bHRpcGxlQ2hvaWNlc1wiXSA9IDMwMF0gPSBcIk11bHRpcGxlQ2hvaWNlc1wiO1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJNb3ZlZFBlcm1hbmVudGx5XCJdID0gMzAxXSA9IFwiTW92ZWRQZXJtYW5lbnRseVwiO1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJSZXNvdXJjZU1vdmVkXCJdID0gMzAyXSA9IFwiUmVzb3VyY2VNb3ZlZFwiO1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJTZWVPdGhlclwiXSA9IDMwM10gPSBcIlNlZU90aGVyXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIk5vdE1vZGlmaWVkXCJdID0gMzA0XSA9IFwiTm90TW9kaWZpZWRcIjtcbiAgICBIdHRwQ29kZXNbSHR0cENvZGVzW1wiVXNlUHJveHlcIl0gPSAzMDVdID0gXCJVc2VQcm94eVwiO1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJTd2l0Y2hQcm94eVwiXSA9IDMwNl0gPSBcIlN3aXRjaFByb3h5XCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIlRlbXBvcmFyeVJlZGlyZWN0XCJdID0gMzA3XSA9IFwiVGVtcG9yYXJ5UmVkaXJlY3RcIjtcbiAgICBIdHRwQ29kZXNbSHR0cENvZGVzW1wiUGVybWFuZW50UmVkaXJlY3RcIl0gPSAzMDhdID0gXCJQZXJtYW5lbnRSZWRpcmVjdFwiO1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJCYWRSZXF1ZXN0XCJdID0gNDAwXSA9IFwiQmFkUmVxdWVzdFwiO1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJVbmF1dGhvcml6ZWRcIl0gPSA0MDFdID0gXCJVbmF1dGhvcml6ZWRcIjtcbiAgICBIdHRwQ29kZXNbSHR0cENvZGVzW1wiUGF5bWVudFJlcXVpcmVkXCJdID0gNDAyXSA9IFwiUGF5bWVudFJlcXVpcmVkXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIkZvcmJpZGRlblwiXSA9IDQwM10gPSBcIkZvcmJpZGRlblwiO1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJOb3RGb3VuZFwiXSA9IDQwNF0gPSBcIk5vdEZvdW5kXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIk1ldGhvZE5vdEFsbG93ZWRcIl0gPSA0MDVdID0gXCJNZXRob2ROb3RBbGxvd2VkXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIk5vdEFjY2VwdGFibGVcIl0gPSA0MDZdID0gXCJOb3RBY2NlcHRhYmxlXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIlByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZFwiXSA9IDQwN10gPSBcIlByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZFwiO1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJSZXF1ZXN0VGltZW91dFwiXSA9IDQwOF0gPSBcIlJlcXVlc3RUaW1lb3V0XCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIkNvbmZsaWN0XCJdID0gNDA5XSA9IFwiQ29uZmxpY3RcIjtcbiAgICBIdHRwQ29kZXNbSHR0cENvZGVzW1wiR29uZVwiXSA9IDQxMF0gPSBcIkdvbmVcIjtcbiAgICBIdHRwQ29kZXNbSHR0cENvZGVzW1wiVG9vTWFueVJlcXVlc3RzXCJdID0gNDI5XSA9IFwiVG9vTWFueVJlcXVlc3RzXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIkludGVybmFsU2VydmVyRXJyb3JcIl0gPSA1MDBdID0gXCJJbnRlcm5hbFNlcnZlckVycm9yXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIk5vdEltcGxlbWVudGVkXCJdID0gNTAxXSA9IFwiTm90SW1wbGVtZW50ZWRcIjtcbiAgICBIdHRwQ29kZXNbSHR0cENvZGVzW1wiQmFkR2F0ZXdheVwiXSA9IDUwMl0gPSBcIkJhZEdhdGV3YXlcIjtcbiAgICBIdHRwQ29kZXNbSHR0cENvZGVzW1wiU2VydmljZVVuYXZhaWxhYmxlXCJdID0gNTAzXSA9IFwiU2VydmljZVVuYXZhaWxhYmxlXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIkdhdGV3YXlUaW1lb3V0XCJdID0gNTA0XSA9IFwiR2F0ZXdheVRpbWVvdXRcIjtcbn0pKEh0dHBDb2RlcyB8fCAoZXhwb3J0cy5IdHRwQ29kZXMgPSBIdHRwQ29kZXMgPSB7fSkpO1xudmFyIEhlYWRlcnM7XG4oZnVuY3Rpb24gKEhlYWRlcnMpIHtcbiAgICBIZWFkZXJzW1wiQWNjZXB0XCJdID0gXCJhY2NlcHRcIjtcbiAgICBIZWFkZXJzW1wiQ29udGVudFR5cGVcIl0gPSBcImNvbnRlbnQtdHlwZVwiO1xufSkoSGVhZGVycyB8fCAoZXhwb3J0cy5IZWFkZXJzID0gSGVhZGVycyA9IHt9KSk7XG52YXIgTWVkaWFUeXBlcztcbihmdW5jdGlvbiAoTWVkaWFUeXBlcykge1xuICAgIE1lZGlhVHlwZXNbXCJBcHBsaWNhdGlvbkpzb25cIl0gPSBcImFwcGxpY2F0aW9uL2pzb25cIjtcbn0pKE1lZGlhVHlwZXMgfHwgKGV4cG9ydHMuTWVkaWFUeXBlcyA9IE1lZGlhVHlwZXMgPSB7fSkpO1xuLyoqXG4gKiBSZXR1cm5zIHRoZSBwcm94eSBVUkwsIGRlcGVuZGluZyB1cG9uIHRoZSBzdXBwbGllZCB1cmwgYW5kIHByb3h5IGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiAqIEBwYXJhbSBzZXJ2ZXJVcmwgIFRoZSBzZXJ2ZXIgVVJMIHdoZXJlIHRoZSByZXF1ZXN0IHdpbGwgYmUgc2VudC4gRm9yIGV4YW1wbGUsIGh0dHBzOi8vYXBpLmdpdGh1Yi5jb21cbiAqL1xuZnVuY3Rpb24gZ2V0UHJveHlVcmwoc2VydmVyVXJsKSB7XG4gICAgY29uc3QgcHJveHlVcmwgPSBwbS5nZXRQcm94eVVybChuZXcgVVJMKHNlcnZlclVybCkpO1xuICAgIHJldHVybiBwcm94eVVybCA/IHByb3h5VXJsLmhyZWYgOiAnJztcbn1cbmV4cG9ydHMuZ2V0UHJveHlVcmwgPSBnZXRQcm94eVVybDtcbmNvbnN0IEh0dHBSZWRpcmVjdENvZGVzID0gW1xuICAgIEh0dHBDb2Rlcy5Nb3ZlZFBlcm1hbmVudGx5LFxuICAgIEh0dHBDb2Rlcy5SZXNvdXJjZU1vdmVkLFxuICAgIEh0dHBDb2Rlcy5TZWVPdGhlcixcbiAgICBIdHRwQ29kZXMuVGVtcG9yYXJ5UmVkaXJlY3QsXG4gICAgSHR0cENvZGVzLlBlcm1hbmVudFJlZGlyZWN0XG5dO1xuY29uc3QgSHR0cFJlc3BvbnNlUmV0cnlDb2RlcyA9IFtcbiAgICBIdHRwQ29kZXMuQmFkR2F0ZXdheSxcbiAgICBIdHRwQ29kZXMuU2VydmljZVVuYXZhaWxhYmxlLFxuICAgIEh0dHBDb2Rlcy5HYXRld2F5VGltZW91dFxuXTtcbmNvbnN0IFJldHJ5YWJsZUh0dHBWZXJicyA9IFsnT1BUSU9OUycsICdHRVQnLCAnREVMRVRFJywgJ0hFQUQnXTtcbmNvbnN0IEV4cG9uZW50aWFsQmFja29mZkNlaWxpbmcgPSAxMDtcbmNvbnN0IEV4cG9uZW50aWFsQmFja29mZlRpbWVTbGljZSA9IDU7XG5jbGFzcyBIdHRwQ2xpZW50RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZSwgc3RhdHVzQ29kZSkge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5uYW1lID0gJ0h0dHBDbGllbnRFcnJvcic7XG4gICAgICAgIHRoaXMuc3RhdHVzQ29kZSA9IHN0YXR1c0NvZGU7XG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBIdHRwQ2xpZW50RXJyb3IucHJvdG90eXBlKTtcbiAgICB9XG59XG5leHBvcnRzLkh0dHBDbGllbnRFcnJvciA9IEh0dHBDbGllbnRFcnJvcjtcbmNsYXNzIEh0dHBDbGllbnRSZXNwb25zZSB7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZSkge1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIH1cbiAgICByZWFkQm9keSgpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgIGxldCBvdXRwdXQgPSBCdWZmZXIuYWxsb2MoMCk7XG4gICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlLm9uKCdkYXRhJywgKGNodW5rKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IEJ1ZmZlci5jb25jYXQoW291dHB1dCwgY2h1bmtdKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2Uub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShvdXRwdXQudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZWFkQm9keUJ1ZmZlcigpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNodW5rcyA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZS5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjaHVua3MucHVzaChjaHVuayk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoQnVmZmVyLmNvbmNhdChjaHVua3MpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0cy5IdHRwQ2xpZW50UmVzcG9uc2UgPSBIdHRwQ2xpZW50UmVzcG9uc2U7XG5mdW5jdGlvbiBpc0h0dHBzKHJlcXVlc3RVcmwpIHtcbiAgICBjb25zdCBwYXJzZWRVcmwgPSBuZXcgVVJMKHJlcXVlc3RVcmwpO1xuICAgIHJldHVybiBwYXJzZWRVcmwucHJvdG9jb2wgPT09ICdodHRwczonO1xufVxuZXhwb3J0cy5pc0h0dHBzID0gaXNIdHRwcztcbmNsYXNzIEh0dHBDbGllbnQge1xuICAgIGNvbnN0cnVjdG9yKHVzZXJBZ2VudCwgaGFuZGxlcnMsIHJlcXVlc3RPcHRpb25zKSB7XG4gICAgICAgIHRoaXMuX2lnbm9yZVNzbEVycm9yID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2FsbG93UmVkaXJlY3RzID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fYWxsb3dSZWRpcmVjdERvd25ncmFkZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9tYXhSZWRpcmVjdHMgPSA1MDtcbiAgICAgICAgdGhpcy5fYWxsb3dSZXRyaWVzID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX21heFJldHJpZXMgPSAxO1xuICAgICAgICB0aGlzLl9rZWVwQWxpdmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fZGlzcG9zZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy51c2VyQWdlbnQgPSB1c2VyQWdlbnQ7XG4gICAgICAgIHRoaXMuaGFuZGxlcnMgPSBoYW5kbGVycyB8fCBbXTtcbiAgICAgICAgdGhpcy5yZXF1ZXN0T3B0aW9ucyA9IHJlcXVlc3RPcHRpb25zO1xuICAgICAgICBpZiAocmVxdWVzdE9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChyZXF1ZXN0T3B0aW9ucy5pZ25vcmVTc2xFcnJvciAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5faWdub3JlU3NsRXJyb3IgPSByZXF1ZXN0T3B0aW9ucy5pZ25vcmVTc2xFcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3NvY2tldFRpbWVvdXQgPSByZXF1ZXN0T3B0aW9ucy5zb2NrZXRUaW1lb3V0O1xuICAgICAgICAgICAgaWYgKHJlcXVlc3RPcHRpb25zLmFsbG93UmVkaXJlY3RzICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hbGxvd1JlZGlyZWN0cyA9IHJlcXVlc3RPcHRpb25zLmFsbG93UmVkaXJlY3RzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlcXVlc3RPcHRpb25zLmFsbG93UmVkaXJlY3REb3duZ3JhZGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FsbG93UmVkaXJlY3REb3duZ3JhZGUgPSByZXF1ZXN0T3B0aW9ucy5hbGxvd1JlZGlyZWN0RG93bmdyYWRlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlcXVlc3RPcHRpb25zLm1heFJlZGlyZWN0cyAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWF4UmVkaXJlY3RzID0gTWF0aC5tYXgocmVxdWVzdE9wdGlvbnMubWF4UmVkaXJlY3RzLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXF1ZXN0T3B0aW9ucy5rZWVwQWxpdmUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2tlZXBBbGl2ZSA9IHJlcXVlc3RPcHRpb25zLmtlZXBBbGl2ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXF1ZXN0T3B0aW9ucy5hbGxvd1JldHJpZXMgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FsbG93UmV0cmllcyA9IHJlcXVlc3RPcHRpb25zLmFsbG93UmV0cmllcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXF1ZXN0T3B0aW9ucy5tYXhSZXRyaWVzICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXhSZXRyaWVzID0gcmVxdWVzdE9wdGlvbnMubWF4UmV0cmllcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBvcHRpb25zKHJlcXVlc3RVcmwsIGFkZGl0aW9uYWxIZWFkZXJzKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KCdPUFRJT05TJywgcmVxdWVzdFVybCwgbnVsbCwgYWRkaXRpb25hbEhlYWRlcnMgfHwge30pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZ2V0KHJlcXVlc3RVcmwsIGFkZGl0aW9uYWxIZWFkZXJzKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KCdHRVQnLCByZXF1ZXN0VXJsLCBudWxsLCBhZGRpdGlvbmFsSGVhZGVycyB8fCB7fSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBkZWwocmVxdWVzdFVybCwgYWRkaXRpb25hbEhlYWRlcnMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QoJ0RFTEVURScsIHJlcXVlc3RVcmwsIG51bGwsIGFkZGl0aW9uYWxIZWFkZXJzIHx8IHt9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHBvc3QocmVxdWVzdFVybCwgZGF0YSwgYWRkaXRpb25hbEhlYWRlcnMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QoJ1BPU1QnLCByZXF1ZXN0VXJsLCBkYXRhLCBhZGRpdGlvbmFsSGVhZGVycyB8fCB7fSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwYXRjaChyZXF1ZXN0VXJsLCBkYXRhLCBhZGRpdGlvbmFsSGVhZGVycykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdCgnUEFUQ0gnLCByZXF1ZXN0VXJsLCBkYXRhLCBhZGRpdGlvbmFsSGVhZGVycyB8fCB7fSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwdXQocmVxdWVzdFVybCwgZGF0YSwgYWRkaXRpb25hbEhlYWRlcnMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QoJ1BVVCcsIHJlcXVlc3RVcmwsIGRhdGEsIGFkZGl0aW9uYWxIZWFkZXJzIHx8IHt9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGhlYWQocmVxdWVzdFVybCwgYWRkaXRpb25hbEhlYWRlcnMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QoJ0hFQUQnLCByZXF1ZXN0VXJsLCBudWxsLCBhZGRpdGlvbmFsSGVhZGVycyB8fCB7fSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBzZW5kU3RyZWFtKHZlcmIsIHJlcXVlc3RVcmwsIHN0cmVhbSwgYWRkaXRpb25hbEhlYWRlcnMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QodmVyYiwgcmVxdWVzdFVybCwgc3RyZWFtLCBhZGRpdGlvbmFsSGVhZGVycyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXRzIGEgdHlwZWQgb2JqZWN0IGZyb20gYW4gZW5kcG9pbnRcbiAgICAgKiBCZSBhd2FyZSB0aGF0IG5vdCBmb3VuZCByZXR1cm5zIGEgbnVsbC4gIE90aGVyIGVycm9ycyAoNHh4LCA1eHgpIHJlamVjdCB0aGUgcHJvbWlzZVxuICAgICAqL1xuICAgIGdldEpzb24ocmVxdWVzdFVybCwgYWRkaXRpb25hbEhlYWRlcnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgYWRkaXRpb25hbEhlYWRlcnNbSGVhZGVycy5BY2NlcHRdID0gdGhpcy5fZ2V0RXhpc3RpbmdPckRlZmF1bHRIZWFkZXIoYWRkaXRpb25hbEhlYWRlcnMsIEhlYWRlcnMuQWNjZXB0LCBNZWRpYVR5cGVzLkFwcGxpY2F0aW9uSnNvbik7XG4gICAgICAgICAgICBjb25zdCByZXMgPSB5aWVsZCB0aGlzLmdldChyZXF1ZXN0VXJsLCBhZGRpdGlvbmFsSGVhZGVycyk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJvY2Vzc1Jlc3BvbnNlKHJlcywgdGhpcy5yZXF1ZXN0T3B0aW9ucyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwb3N0SnNvbihyZXF1ZXN0VXJsLCBvYmosIGFkZGl0aW9uYWxIZWFkZXJzID0ge30pIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnN0cmluZ2lmeShvYmosIG51bGwsIDIpO1xuICAgICAgICAgICAgYWRkaXRpb25hbEhlYWRlcnNbSGVhZGVycy5BY2NlcHRdID0gdGhpcy5fZ2V0RXhpc3RpbmdPckRlZmF1bHRIZWFkZXIoYWRkaXRpb25hbEhlYWRlcnMsIEhlYWRlcnMuQWNjZXB0LCBNZWRpYVR5cGVzLkFwcGxpY2F0aW9uSnNvbik7XG4gICAgICAgICAgICBhZGRpdGlvbmFsSGVhZGVyc1tIZWFkZXJzLkNvbnRlbnRUeXBlXSA9IHRoaXMuX2dldEV4aXN0aW5nT3JEZWZhdWx0SGVhZGVyKGFkZGl0aW9uYWxIZWFkZXJzLCBIZWFkZXJzLkNvbnRlbnRUeXBlLCBNZWRpYVR5cGVzLkFwcGxpY2F0aW9uSnNvbik7XG4gICAgICAgICAgICBjb25zdCByZXMgPSB5aWVsZCB0aGlzLnBvc3QocmVxdWVzdFVybCwgZGF0YSwgYWRkaXRpb25hbEhlYWRlcnMpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2Nlc3NSZXNwb25zZShyZXMsIHRoaXMucmVxdWVzdE9wdGlvbnMpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcHV0SnNvbihyZXF1ZXN0VXJsLCBvYmosIGFkZGl0aW9uYWxIZWFkZXJzID0ge30pIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnN0cmluZ2lmeShvYmosIG51bGwsIDIpO1xuICAgICAgICAgICAgYWRkaXRpb25hbEhlYWRlcnNbSGVhZGVycy5BY2NlcHRdID0gdGhpcy5fZ2V0RXhpc3RpbmdPckRlZmF1bHRIZWFkZXIoYWRkaXRpb25hbEhlYWRlcnMsIEhlYWRlcnMuQWNjZXB0LCBNZWRpYVR5cGVzLkFwcGxpY2F0aW9uSnNvbik7XG4gICAgICAgICAgICBhZGRpdGlvbmFsSGVhZGVyc1tIZWFkZXJzLkNvbnRlbnRUeXBlXSA9IHRoaXMuX2dldEV4aXN0aW5nT3JEZWZhdWx0SGVhZGVyKGFkZGl0aW9uYWxIZWFkZXJzLCBIZWFkZXJzLkNvbnRlbnRUeXBlLCBNZWRpYVR5cGVzLkFwcGxpY2F0aW9uSnNvbik7XG4gICAgICAgICAgICBjb25zdCByZXMgPSB5aWVsZCB0aGlzLnB1dChyZXF1ZXN0VXJsLCBkYXRhLCBhZGRpdGlvbmFsSGVhZGVycyk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJvY2Vzc1Jlc3BvbnNlKHJlcywgdGhpcy5yZXF1ZXN0T3B0aW9ucyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwYXRjaEpzb24ocmVxdWVzdFVybCwgb2JqLCBhZGRpdGlvbmFsSGVhZGVycyA9IHt9KSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gSlNPTi5zdHJpbmdpZnkob2JqLCBudWxsLCAyKTtcbiAgICAgICAgICAgIGFkZGl0aW9uYWxIZWFkZXJzW0hlYWRlcnMuQWNjZXB0XSA9IHRoaXMuX2dldEV4aXN0aW5nT3JEZWZhdWx0SGVhZGVyKGFkZGl0aW9uYWxIZWFkZXJzLCBIZWFkZXJzLkFjY2VwdCwgTWVkaWFUeXBlcy5BcHBsaWNhdGlvbkpzb24pO1xuICAgICAgICAgICAgYWRkaXRpb25hbEhlYWRlcnNbSGVhZGVycy5Db250ZW50VHlwZV0gPSB0aGlzLl9nZXRFeGlzdGluZ09yRGVmYXVsdEhlYWRlcihhZGRpdGlvbmFsSGVhZGVycywgSGVhZGVycy5Db250ZW50VHlwZSwgTWVkaWFUeXBlcy5BcHBsaWNhdGlvbkpzb24pO1xuICAgICAgICAgICAgY29uc3QgcmVzID0geWllbGQgdGhpcy5wYXRjaChyZXF1ZXN0VXJsLCBkYXRhLCBhZGRpdGlvbmFsSGVhZGVycyk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJvY2Vzc1Jlc3BvbnNlKHJlcywgdGhpcy5yZXF1ZXN0T3B0aW9ucyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBNYWtlcyBhIHJhdyBodHRwIHJlcXVlc3QuXG4gICAgICogQWxsIG90aGVyIG1ldGhvZHMgc3VjaCBhcyBnZXQsIHBvc3QsIHBhdGNoLCBhbmQgcmVxdWVzdCB1bHRpbWF0ZWx5IGNhbGwgdGhpcy5cbiAgICAgKiBQcmVmZXIgZ2V0LCBkZWwsIHBvc3QgYW5kIHBhdGNoXG4gICAgICovXG4gICAgcmVxdWVzdCh2ZXJiLCByZXF1ZXN0VXJsLCBkYXRhLCBoZWFkZXJzKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NsaWVudCBoYXMgYWxyZWFkeSBiZWVuIGRpc3Bvc2VkLicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcGFyc2VkVXJsID0gbmV3IFVSTChyZXF1ZXN0VXJsKTtcbiAgICAgICAgICAgIGxldCBpbmZvID0gdGhpcy5fcHJlcGFyZVJlcXVlc3QodmVyYiwgcGFyc2VkVXJsLCBoZWFkZXJzKTtcbiAgICAgICAgICAgIC8vIE9ubHkgcGVyZm9ybSByZXRyaWVzIG9uIHJlYWRzIHNpbmNlIHdyaXRlcyBtYXkgbm90IGJlIGlkZW1wb3RlbnQuXG4gICAgICAgICAgICBjb25zdCBtYXhUcmllcyA9IHRoaXMuX2FsbG93UmV0cmllcyAmJiBSZXRyeWFibGVIdHRwVmVyYnMuaW5jbHVkZXModmVyYilcbiAgICAgICAgICAgICAgICA/IHRoaXMuX21heFJldHJpZXMgKyAxXG4gICAgICAgICAgICAgICAgOiAxO1xuICAgICAgICAgICAgbGV0IG51bVRyaWVzID0gMDtcbiAgICAgICAgICAgIGxldCByZXNwb25zZTtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZSA9IHlpZWxkIHRoaXMucmVxdWVzdFJhdyhpbmZvLCBkYXRhKTtcbiAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiBpdCdzIGFuIGF1dGhlbnRpY2F0aW9uIGNoYWxsZW5nZVxuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZSAmJlxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5tZXNzYWdlICYmXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLm1lc3NhZ2Uuc3RhdHVzQ29kZSA9PT0gSHR0cENvZGVzLlVuYXV0aG9yaXplZCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgYXV0aGVudGljYXRpb25IYW5kbGVyO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGhhbmRsZXIgb2YgdGhpcy5oYW5kbGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZXIuY2FuSGFuZGxlQXV0aGVudGljYXRpb24ocmVzcG9uc2UpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aGVudGljYXRpb25IYW5kbGVyID0gaGFuZGxlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoYXV0aGVudGljYXRpb25IYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXV0aGVudGljYXRpb25IYW5kbGVyLmhhbmRsZUF1dGhlbnRpY2F0aW9uKHRoaXMsIGluZm8sIGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSByZWNlaXZlZCBhbiB1bmF1dGhvcml6ZWQgcmVzcG9uc2UgYnV0IGhhdmUgbm8gaGFuZGxlcnMgdG8gaGFuZGxlIGl0LlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gTGV0IHRoZSByZXNwb25zZSByZXR1cm4gdG8gdGhlIGNhbGxlci5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgcmVkaXJlY3RzUmVtYWluaW5nID0gdGhpcy5fbWF4UmVkaXJlY3RzO1xuICAgICAgICAgICAgICAgIHdoaWxlIChyZXNwb25zZS5tZXNzYWdlLnN0YXR1c0NvZGUgJiZcbiAgICAgICAgICAgICAgICAgICAgSHR0cFJlZGlyZWN0Q29kZXMuaW5jbHVkZXMocmVzcG9uc2UubWVzc2FnZS5zdGF0dXNDb2RlKSAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hbGxvd1JlZGlyZWN0cyAmJlxuICAgICAgICAgICAgICAgICAgICByZWRpcmVjdHNSZW1haW5pbmcgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZGlyZWN0VXJsID0gcmVzcG9uc2UubWVzc2FnZS5oZWFkZXJzWydsb2NhdGlvbiddO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXJlZGlyZWN0VXJsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGVyZSdzIG5vIGxvY2F0aW9uIHRvIHJlZGlyZWN0IHRvLCB3ZSB3b24ndFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkUmVkaXJlY3RVcmwgPSBuZXcgVVJMKHJlZGlyZWN0VXJsKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlZFVybC5wcm90b2NvbCA9PT0gJ2h0dHBzOicgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZFVybC5wcm90b2NvbCAhPT0gcGFyc2VkUmVkaXJlY3RVcmwucHJvdG9jb2wgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICF0aGlzLl9hbGxvd1JlZGlyZWN0RG93bmdyYWRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlZGlyZWN0IGZyb20gSFRUUFMgdG8gSFRUUCBwcm90b2NvbC4gVGhpcyBkb3duZ3JhZGUgaXMgbm90IGFsbG93ZWQgZm9yIHNlY3VyaXR5IHJlYXNvbnMuIElmIHlvdSB3YW50IHRvIGFsbG93IHRoaXMgYmVoYXZpb3IsIHNldCB0aGUgYWxsb3dSZWRpcmVjdERvd25ncmFkZSBvcHRpb24gdG8gdHJ1ZS4nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIGZpbmlzaCByZWFkaW5nIHRoZSByZXNwb25zZSBiZWZvcmUgcmVhc3NpZ25pbmcgcmVzcG9uc2VcbiAgICAgICAgICAgICAgICAgICAgLy8gd2hpY2ggd2lsbCBsZWFrIHRoZSBvcGVuIHNvY2tldC5cbiAgICAgICAgICAgICAgICAgICAgeWllbGQgcmVzcG9uc2UucmVhZEJvZHkoKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gc3RyaXAgYXV0aG9yaXphdGlvbiBoZWFkZXIgaWYgcmVkaXJlY3RlZCB0byBhIGRpZmZlcmVudCBob3N0bmFtZVxuICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VkUmVkaXJlY3RVcmwuaG9zdG5hbWUgIT09IHBhcnNlZFVybC5ob3N0bmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBoZWFkZXIgaW4gaGVhZGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhlYWRlciBuYW1lcyBhcmUgY2FzZSBpbnNlbnNpdGl2ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoZWFkZXIudG9Mb3dlckNhc2UoKSA9PT0gJ2F1dGhvcml6YXRpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBoZWFkZXJzW2hlYWRlcl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIGxldCdzIG1ha2UgdGhlIHJlcXVlc3Qgd2l0aCB0aGUgbmV3IHJlZGlyZWN0VXJsXG4gICAgICAgICAgICAgICAgICAgIGluZm8gPSB0aGlzLl9wcmVwYXJlUmVxdWVzdCh2ZXJiLCBwYXJzZWRSZWRpcmVjdFVybCwgaGVhZGVycyk7XG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0geWllbGQgdGhpcy5yZXF1ZXN0UmF3KGluZm8sIGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICByZWRpcmVjdHNSZW1haW5pbmctLTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5tZXNzYWdlLnN0YXR1c0NvZGUgfHxcbiAgICAgICAgICAgICAgICAgICAgIUh0dHBSZXNwb25zZVJldHJ5Q29kZXMuaW5jbHVkZXMocmVzcG9uc2UubWVzc2FnZS5zdGF0dXNDb2RlKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBJZiBub3QgYSByZXRyeSBjb2RlLCByZXR1cm4gaW1tZWRpYXRlbHkgaW5zdGVhZCBvZiByZXRyeWluZ1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG51bVRyaWVzICs9IDE7XG4gICAgICAgICAgICAgICAgaWYgKG51bVRyaWVzIDwgbWF4VHJpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgcmVzcG9uc2UucmVhZEJvZHkoKTtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgdGhpcy5fcGVyZm9ybUV4cG9uZW50aWFsQmFja29mZihudW1Ucmllcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSB3aGlsZSAobnVtVHJpZXMgPCBtYXhUcmllcyk7XG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBOZWVkcyB0byBiZSBjYWxsZWQgaWYga2VlcEFsaXZlIGlzIHNldCB0byB0cnVlIGluIHJlcXVlc3Qgb3B0aW9ucy5cbiAgICAgKi9cbiAgICBkaXNwb3NlKCkge1xuICAgICAgICBpZiAodGhpcy5fYWdlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX2FnZW50LmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9kaXNwb3NlZCA9IHRydWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJhdyByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBpbmZvXG4gICAgICogQHBhcmFtIGRhdGFcbiAgICAgKi9cbiAgICByZXF1ZXN0UmF3KGluZm8sIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2tGb3JSZXN1bHQoZXJyLCByZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIXJlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgYGVycmAgaXMgbm90IHBhc3NlZCwgdGhlbiBgcmVzYCBtdXN0IGJlIHBhc3NlZC5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ1Vua25vd24gZXJyb3InKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5yZXF1ZXN0UmF3V2l0aENhbGxiYWNrKGluZm8sIGRhdGEsIGNhbGxiYWNrRm9yUmVzdWx0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmF3IHJlcXVlc3Qgd2l0aCBjYWxsYmFjay5cbiAgICAgKiBAcGFyYW0gaW5mb1xuICAgICAqIEBwYXJhbSBkYXRhXG4gICAgICogQHBhcmFtIG9uUmVzdWx0XG4gICAgICovXG4gICAgcmVxdWVzdFJhd1dpdGhDYWxsYmFjayhpbmZvLCBkYXRhLCBvblJlc3VsdCkge1xuICAgICAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBpZiAoIWluZm8ub3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgICAgICAgICAgICAgaW5mby5vcHRpb25zLmhlYWRlcnMgPSB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGluZm8ub3B0aW9ucy5oZWFkZXJzWydDb250ZW50LUxlbmd0aCddID0gQnVmZmVyLmJ5dGVMZW5ndGgoZGF0YSwgJ3V0ZjgnKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgY2FsbGJhY2tDYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgZnVuY3Rpb24gaGFuZGxlUmVzdWx0KGVyciwgcmVzKSB7XG4gICAgICAgICAgICBpZiAoIWNhbGxiYWNrQ2FsbGVkKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2tDYWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIG9uUmVzdWx0KGVyciwgcmVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXEgPSBpbmZvLmh0dHBNb2R1bGUucmVxdWVzdChpbmZvLm9wdGlvbnMsIChtc2cpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IG5ldyBIdHRwQ2xpZW50UmVzcG9uc2UobXNnKTtcbiAgICAgICAgICAgIGhhbmRsZVJlc3VsdCh1bmRlZmluZWQsIHJlcyk7XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgc29ja2V0O1xuICAgICAgICByZXEub24oJ3NvY2tldCcsIHNvY2sgPT4ge1xuICAgICAgICAgICAgc29ja2V0ID0gc29jaztcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIElmIHdlIGV2ZXIgZ2V0IGRpc2Nvbm5lY3RlZCwgd2Ugd2FudCB0aGUgc29ja2V0IHRvIHRpbWVvdXQgZXZlbnR1YWxseVxuICAgICAgICByZXEuc2V0VGltZW91dCh0aGlzLl9zb2NrZXRUaW1lb3V0IHx8IDMgKiA2MDAwMCwgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHNvY2tldCkge1xuICAgICAgICAgICAgICAgIHNvY2tldC5lbmQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGhhbmRsZVJlc3VsdChuZXcgRXJyb3IoYFJlcXVlc3QgdGltZW91dDogJHtpbmZvLm9wdGlvbnMucGF0aH1gKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXEub24oJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgLy8gZXJyIGhhcyBzdGF0dXNDb2RlIHByb3BlcnR5XG4gICAgICAgICAgICAvLyByZXMgc2hvdWxkIGhhdmUgaGVhZGVyc1xuICAgICAgICAgICAgaGFuZGxlUmVzdWx0KGVycik7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoZGF0YSAmJiB0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJlcS53cml0ZShkYXRhLCAndXRmOCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRhICYmIHR5cGVvZiBkYXRhICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZGF0YS5vbignY2xvc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmVxLmVuZCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBkYXRhLnBpcGUocmVxKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlcS5lbmQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXRzIGFuIGh0dHAgYWdlbnQuIFRoaXMgZnVuY3Rpb24gaXMgdXNlZnVsIHdoZW4geW91IG5lZWQgYW4gaHR0cCBhZ2VudCB0aGF0IGhhbmRsZXNcbiAgICAgKiByb3V0aW5nIHRocm91Z2ggYSBwcm94eSBzZXJ2ZXIgLSBkZXBlbmRpbmcgdXBvbiB0aGUgdXJsIGFuZCBwcm94eSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG4gICAgICogQHBhcmFtIHNlcnZlclVybCAgVGhlIHNlcnZlciBVUkwgd2hlcmUgdGhlIHJlcXVlc3Qgd2lsbCBiZSBzZW50LiBGb3IgZXhhbXBsZSwgaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbVxuICAgICAqL1xuICAgIGdldEFnZW50KHNlcnZlclVybCkge1xuICAgICAgICBjb25zdCBwYXJzZWRVcmwgPSBuZXcgVVJMKHNlcnZlclVybCk7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRBZ2VudChwYXJzZWRVcmwpO1xuICAgIH1cbiAgICBnZXRBZ2VudERpc3BhdGNoZXIoc2VydmVyVXJsKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFVybCA9IG5ldyBVUkwoc2VydmVyVXJsKTtcbiAgICAgICAgY29uc3QgcHJveHlVcmwgPSBwbS5nZXRQcm94eVVybChwYXJzZWRVcmwpO1xuICAgICAgICBjb25zdCB1c2VQcm94eSA9IHByb3h5VXJsICYmIHByb3h5VXJsLmhvc3RuYW1lO1xuICAgICAgICBpZiAoIXVzZVByb3h5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldFByb3h5QWdlbnREaXNwYXRjaGVyKHBhcnNlZFVybCwgcHJveHlVcmwpO1xuICAgIH1cbiAgICBfcHJlcGFyZVJlcXVlc3QobWV0aG9kLCByZXF1ZXN0VXJsLCBoZWFkZXJzKSB7XG4gICAgICAgIGNvbnN0IGluZm8gPSB7fTtcbiAgICAgICAgaW5mby5wYXJzZWRVcmwgPSByZXF1ZXN0VXJsO1xuICAgICAgICBjb25zdCB1c2luZ1NzbCA9IGluZm8ucGFyc2VkVXJsLnByb3RvY29sID09PSAnaHR0cHM6JztcbiAgICAgICAgaW5mby5odHRwTW9kdWxlID0gdXNpbmdTc2wgPyBodHRwcyA6IGh0dHA7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRQb3J0ID0gdXNpbmdTc2wgPyA0NDMgOiA4MDtcbiAgICAgICAgaW5mby5vcHRpb25zID0ge307XG4gICAgICAgIGluZm8ub3B0aW9ucy5ob3N0ID0gaW5mby5wYXJzZWRVcmwuaG9zdG5hbWU7XG4gICAgICAgIGluZm8ub3B0aW9ucy5wb3J0ID0gaW5mby5wYXJzZWRVcmwucG9ydFxuICAgICAgICAgICAgPyBwYXJzZUludChpbmZvLnBhcnNlZFVybC5wb3J0KVxuICAgICAgICAgICAgOiBkZWZhdWx0UG9ydDtcbiAgICAgICAgaW5mby5vcHRpb25zLnBhdGggPVxuICAgICAgICAgICAgKGluZm8ucGFyc2VkVXJsLnBhdGhuYW1lIHx8ICcnKSArIChpbmZvLnBhcnNlZFVybC5zZWFyY2ggfHwgJycpO1xuICAgICAgICBpbmZvLm9wdGlvbnMubWV0aG9kID0gbWV0aG9kO1xuICAgICAgICBpbmZvLm9wdGlvbnMuaGVhZGVycyA9IHRoaXMuX21lcmdlSGVhZGVycyhoZWFkZXJzKTtcbiAgICAgICAgaWYgKHRoaXMudXNlckFnZW50ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGluZm8ub3B0aW9ucy5oZWFkZXJzWyd1c2VyLWFnZW50J10gPSB0aGlzLnVzZXJBZ2VudDtcbiAgICAgICAgfVxuICAgICAgICBpbmZvLm9wdGlvbnMuYWdlbnQgPSB0aGlzLl9nZXRBZ2VudChpbmZvLnBhcnNlZFVybCk7XG4gICAgICAgIC8vIGdpdmVzIGhhbmRsZXJzIGFuIG9wcG9ydHVuaXR5IHRvIHBhcnRpY2lwYXRlXG4gICAgICAgIGlmICh0aGlzLmhhbmRsZXJzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGhhbmRsZXIgb2YgdGhpcy5oYW5kbGVycykge1xuICAgICAgICAgICAgICAgIGhhbmRsZXIucHJlcGFyZVJlcXVlc3QoaW5mby5vcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5mbztcbiAgICB9XG4gICAgX21lcmdlSGVhZGVycyhoZWFkZXJzKSB7XG4gICAgICAgIGlmICh0aGlzLnJlcXVlc3RPcHRpb25zICYmIHRoaXMucmVxdWVzdE9wdGlvbnMuaGVhZGVycykge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGxvd2VyY2FzZUtleXModGhpcy5yZXF1ZXN0T3B0aW9ucy5oZWFkZXJzKSwgbG93ZXJjYXNlS2V5cyhoZWFkZXJzIHx8IHt9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvd2VyY2FzZUtleXMoaGVhZGVycyB8fCB7fSk7XG4gICAgfVxuICAgIF9nZXRFeGlzdGluZ09yRGVmYXVsdEhlYWRlcihhZGRpdGlvbmFsSGVhZGVycywgaGVhZGVyLCBfZGVmYXVsdCkge1xuICAgICAgICBsZXQgY2xpZW50SGVhZGVyO1xuICAgICAgICBpZiAodGhpcy5yZXF1ZXN0T3B0aW9ucyAmJiB0aGlzLnJlcXVlc3RPcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgICAgICAgIGNsaWVudEhlYWRlciA9IGxvd2VyY2FzZUtleXModGhpcy5yZXF1ZXN0T3B0aW9ucy5oZWFkZXJzKVtoZWFkZXJdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhZGRpdGlvbmFsSGVhZGVyc1toZWFkZXJdIHx8IGNsaWVudEhlYWRlciB8fCBfZGVmYXVsdDtcbiAgICB9XG4gICAgX2dldEFnZW50KHBhcnNlZFVybCkge1xuICAgICAgICBsZXQgYWdlbnQ7XG4gICAgICAgIGNvbnN0IHByb3h5VXJsID0gcG0uZ2V0UHJveHlVcmwocGFyc2VkVXJsKTtcbiAgICAgICAgY29uc3QgdXNlUHJveHkgPSBwcm94eVVybCAmJiBwcm94eVVybC5ob3N0bmFtZTtcbiAgICAgICAgaWYgKHRoaXMuX2tlZXBBbGl2ZSAmJiB1c2VQcm94eSkge1xuICAgICAgICAgICAgYWdlbnQgPSB0aGlzLl9wcm94eUFnZW50O1xuICAgICAgICB9XG4gICAgICAgIGlmICghdXNlUHJveHkpIHtcbiAgICAgICAgICAgIGFnZW50ID0gdGhpcy5fYWdlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgYWdlbnQgaXMgYWxyZWFkeSBhc3NpZ25lZCB1c2UgdGhhdCBhZ2VudC5cbiAgICAgICAgaWYgKGFnZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gYWdlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdXNpbmdTc2wgPSBwYXJzZWRVcmwucHJvdG9jb2wgPT09ICdodHRwczonO1xuICAgICAgICBsZXQgbWF4U29ja2V0cyA9IDEwMDtcbiAgICAgICAgaWYgKHRoaXMucmVxdWVzdE9wdGlvbnMpIHtcbiAgICAgICAgICAgIG1heFNvY2tldHMgPSB0aGlzLnJlcXVlc3RPcHRpb25zLm1heFNvY2tldHMgfHwgaHR0cC5nbG9iYWxBZ2VudC5tYXhTb2NrZXRzO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRoaXMgaXMgYHVzZVByb3h5YCBhZ2FpbiwgYnV0IHdlIG5lZWQgdG8gY2hlY2sgYHByb3h5VVJsYCBkaXJlY3RseSBmb3IgVHlwZVNjcmlwdHMncyBmbG93IGFuYWx5c2lzLlxuICAgICAgICBpZiAocHJveHlVcmwgJiYgcHJveHlVcmwuaG9zdG5hbWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGFnZW50T3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICBtYXhTb2NrZXRzLFxuICAgICAgICAgICAgICAgIGtlZXBBbGl2ZTogdGhpcy5fa2VlcEFsaXZlLFxuICAgICAgICAgICAgICAgIHByb3h5OiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sICgocHJveHlVcmwudXNlcm5hbWUgfHwgcHJveHlVcmwucGFzc3dvcmQpICYmIHtcbiAgICAgICAgICAgICAgICAgICAgcHJveHlBdXRoOiBgJHtwcm94eVVybC51c2VybmFtZX06JHtwcm94eVVybC5wYXNzd29yZH1gXG4gICAgICAgICAgICAgICAgfSkpLCB7IGhvc3Q6IHByb3h5VXJsLmhvc3RuYW1lLCBwb3J0OiBwcm94eVVybC5wb3J0IH0pXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgbGV0IHR1bm5lbEFnZW50O1xuICAgICAgICAgICAgY29uc3Qgb3Zlckh0dHBzID0gcHJveHlVcmwucHJvdG9jb2wgPT09ICdodHRwczonO1xuICAgICAgICAgICAgaWYgKHVzaW5nU3NsKSB7XG4gICAgICAgICAgICAgICAgdHVubmVsQWdlbnQgPSBvdmVySHR0cHMgPyB0dW5uZWwuaHR0cHNPdmVySHR0cHMgOiB0dW5uZWwuaHR0cHNPdmVySHR0cDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHR1bm5lbEFnZW50ID0gb3Zlckh0dHBzID8gdHVubmVsLmh0dHBPdmVySHR0cHMgOiB0dW5uZWwuaHR0cE92ZXJIdHRwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWdlbnQgPSB0dW5uZWxBZ2VudChhZ2VudE9wdGlvbnMpO1xuICAgICAgICAgICAgdGhpcy5fcHJveHlBZ2VudCA9IGFnZW50O1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHR1bm5lbGluZyBhZ2VudCBpc24ndCBhc3NpZ25lZCBjcmVhdGUgYSBuZXcgYWdlbnRcbiAgICAgICAgaWYgKCFhZ2VudCkge1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHsga2VlcEFsaXZlOiB0aGlzLl9rZWVwQWxpdmUsIG1heFNvY2tldHMgfTtcbiAgICAgICAgICAgIGFnZW50ID0gdXNpbmdTc2wgPyBuZXcgaHR0cHMuQWdlbnQob3B0aW9ucykgOiBuZXcgaHR0cC5BZ2VudChvcHRpb25zKTtcbiAgICAgICAgICAgIHRoaXMuX2FnZW50ID0gYWdlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVzaW5nU3NsICYmIHRoaXMuX2lnbm9yZVNzbEVycm9yKSB7XG4gICAgICAgICAgICAvLyB3ZSBkb24ndCB3YW50IHRvIHNldCBOT0RFX1RMU19SRUpFQ1RfVU5BVVRIT1JJWkVEPTAgc2luY2UgdGhhdCB3aWxsIGFmZmVjdCByZXF1ZXN0IGZvciBlbnRpcmUgcHJvY2Vzc1xuICAgICAgICAgICAgLy8gaHR0cC5SZXF1ZXN0T3B0aW9ucyBkb2Vzbid0IGV4cG9zZSBhIHdheSB0byBtb2RpZnkgUmVxdWVzdE9wdGlvbnMuYWdlbnQub3B0aW9uc1xuICAgICAgICAgICAgLy8gd2UgaGF2ZSB0byBjYXN0IGl0IHRvIGFueSBhbmQgY2hhbmdlIGl0IGRpcmVjdGx5XG4gICAgICAgICAgICBhZ2VudC5vcHRpb25zID0gT2JqZWN0LmFzc2lnbihhZ2VudC5vcHRpb25zIHx8IHt9LCB7XG4gICAgICAgICAgICAgICAgcmVqZWN0VW5hdXRob3JpemVkOiBmYWxzZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFnZW50O1xuICAgIH1cbiAgICBfZ2V0UHJveHlBZ2VudERpc3BhdGNoZXIocGFyc2VkVXJsLCBwcm94eVVybCkge1xuICAgICAgICBsZXQgcHJveHlBZ2VudDtcbiAgICAgICAgaWYgKHRoaXMuX2tlZXBBbGl2ZSkge1xuICAgICAgICAgICAgcHJveHlBZ2VudCA9IHRoaXMuX3Byb3h5QWdlbnREaXNwYXRjaGVyO1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIGFnZW50IGlzIGFscmVhZHkgYXNzaWduZWQgdXNlIHRoYXQgYWdlbnQuXG4gICAgICAgIGlmIChwcm94eUFnZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gcHJveHlBZ2VudDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1c2luZ1NzbCA9IHBhcnNlZFVybC5wcm90b2NvbCA9PT0gJ2h0dHBzOic7XG4gICAgICAgIHByb3h5QWdlbnQgPSBuZXcgdW5kaWNpXzEuUHJveHlBZ2VudChPYmplY3QuYXNzaWduKHsgdXJpOiBwcm94eVVybC5ocmVmLCBwaXBlbGluaW5nOiAhdGhpcy5fa2VlcEFsaXZlID8gMCA6IDEgfSwgKChwcm94eVVybC51c2VybmFtZSB8fCBwcm94eVVybC5wYXNzd29yZCkgJiYge1xuICAgICAgICAgICAgdG9rZW46IGBCYXNpYyAke0J1ZmZlci5mcm9tKGAke3Byb3h5VXJsLnVzZXJuYW1lfToke3Byb3h5VXJsLnBhc3N3b3JkfWApLnRvU3RyaW5nKCdiYXNlNjQnKX1gXG4gICAgICAgIH0pKSk7XG4gICAgICAgIHRoaXMuX3Byb3h5QWdlbnREaXNwYXRjaGVyID0gcHJveHlBZ2VudDtcbiAgICAgICAgaWYgKHVzaW5nU3NsICYmIHRoaXMuX2lnbm9yZVNzbEVycm9yKSB7XG4gICAgICAgICAgICAvLyB3ZSBkb24ndCB3YW50IHRvIHNldCBOT0RFX1RMU19SRUpFQ1RfVU5BVVRIT1JJWkVEPTAgc2luY2UgdGhhdCB3aWxsIGFmZmVjdCByZXF1ZXN0IGZvciBlbnRpcmUgcHJvY2Vzc1xuICAgICAgICAgICAgLy8gaHR0cC5SZXF1ZXN0T3B0aW9ucyBkb2Vzbid0IGV4cG9zZSBhIHdheSB0byBtb2RpZnkgUmVxdWVzdE9wdGlvbnMuYWdlbnQub3B0aW9uc1xuICAgICAgICAgICAgLy8gd2UgaGF2ZSB0byBjYXN0IGl0IHRvIGFueSBhbmQgY2hhbmdlIGl0IGRpcmVjdGx5XG4gICAgICAgICAgICBwcm94eUFnZW50Lm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHByb3h5QWdlbnQub3B0aW9ucy5yZXF1ZXN0VGxzIHx8IHt9LCB7XG4gICAgICAgICAgICAgICAgcmVqZWN0VW5hdXRob3JpemVkOiBmYWxzZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb3h5QWdlbnQ7XG4gICAgfVxuICAgIF9wZXJmb3JtRXhwb25lbnRpYWxCYWNrb2ZmKHJldHJ5TnVtYmVyKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICByZXRyeU51bWJlciA9IE1hdGgubWluKEV4cG9uZW50aWFsQmFja29mZkNlaWxpbmcsIHJldHJ5TnVtYmVyKTtcbiAgICAgICAgICAgIGNvbnN0IG1zID0gRXhwb25lbnRpYWxCYWNrb2ZmVGltZVNsaWNlICogTWF0aC5wb3coMiwgcmV0cnlOdW1iZXIpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dCgoKSA9PiByZXNvbHZlKCksIG1zKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfcHJvY2Vzc1Jlc3BvbnNlKHJlcywgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGF0dXNDb2RlID0gcmVzLm1lc3NhZ2Uuc3RhdHVzQ29kZSB8fCAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0ge1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXNDb2RlLFxuICAgICAgICAgICAgICAgICAgICByZXN1bHQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHt9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAvLyBub3QgZm91bmQgbGVhZHMgdG8gbnVsbCBvYmogcmV0dXJuZWRcbiAgICAgICAgICAgICAgICBpZiAoc3RhdHVzQ29kZSA9PT0gSHR0cENvZGVzLk5vdEZvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBnZXQgdGhlIHJlc3VsdCBmcm9tIHRoZSBib2R5XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gZGF0ZVRpbWVEZXNlcmlhbGl6ZXIoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYSA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNOYU4oYS52YWx1ZU9mKCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgb2JqO1xuICAgICAgICAgICAgICAgIGxldCBjb250ZW50cztcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb250ZW50cyA9IHlpZWxkIHJlcy5yZWFkQm9keSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudHMgJiYgY29udGVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5kZXNlcmlhbGl6ZURhdGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqID0gSlNPTi5wYXJzZShjb250ZW50cywgZGF0ZVRpbWVEZXNlcmlhbGl6ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqID0gSlNPTi5wYXJzZShjb250ZW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5yZXN1bHQgPSBvYmo7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuaGVhZGVycyA9IHJlcy5tZXNzYWdlLmhlYWRlcnM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSW52YWxpZCByZXNvdXJjZSAoY29udGVudHMgbm90IGpzb24pOyAgbGVhdmluZyByZXN1bHQgb2JqIG51bGxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gbm90ZSB0aGF0IDN4eCByZWRpcmVjdHMgYXJlIGhhbmRsZWQgYnkgdGhlIGh0dHAgbGF5ZXIuXG4gICAgICAgICAgICAgICAgaWYgKHN0YXR1c0NvZGUgPiAyOTkpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG1zZztcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgZXhjZXB0aW9uL2Vycm9yIGluIGJvZHksIGF0dGVtcHQgdG8gZ2V0IGJldHRlciBlcnJvclxuICAgICAgICAgICAgICAgICAgICBpZiAob2JqICYmIG9iai5tZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSBvYmoubWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb250ZW50cyAmJiBjb250ZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpdCBtYXkgYmUgdGhlIGNhc2UgdGhhdCB0aGUgZXhjZXB0aW9uIGlzIGluIHRoZSBib2R5IG1lc3NhZ2UgYXMgc3RyaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSBjb250ZW50cztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9IGBGYWlsZWQgcmVxdWVzdDogKCR7c3RhdHVzQ29kZX0pYDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnIgPSBuZXcgSHR0cENsaWVudEVycm9yKG1zZywgc3RhdHVzQ29kZSk7XG4gICAgICAgICAgICAgICAgICAgIGVyci5yZXN1bHQgPSByZXNwb25zZS5yZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnRzLkh0dHBDbGllbnQgPSBIdHRwQ2xpZW50O1xuY29uc3QgbG93ZXJjYXNlS2V5cyA9IChvYmopID0+IE9iamVjdC5rZXlzKG9iaikucmVkdWNlKChjLCBrKSA9PiAoKGNbay50b0xvd2VyQ2FzZSgpXSA9IG9ialtrXSksIGMpLCB7fSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlBlcnNvbmFsQWNjZXNzVG9rZW5DcmVkZW50aWFsSGFuZGxlciA9IGV4cG9ydHMuQmVhcmVyQ3JlZGVudGlhbEhhbmRsZXIgPSBleHBvcnRzLkJhc2ljQ3JlZGVudGlhbEhhbmRsZXIgPSB2b2lkIDA7XG5jbGFzcyBCYXNpY0NyZWRlbnRpYWxIYW5kbGVyIHtcbiAgICBjb25zdHJ1Y3Rvcih1c2VybmFtZSwgcGFzc3dvcmQpIHtcbiAgICAgICAgdGhpcy51c2VybmFtZSA9IHVzZXJuYW1lO1xuICAgICAgICB0aGlzLnBhc3N3b3JkID0gcGFzc3dvcmQ7XG4gICAgfVxuICAgIHByZXBhcmVSZXF1ZXN0KG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKCFvcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCdUaGUgcmVxdWVzdCBoYXMgbm8gaGVhZGVycycpO1xuICAgICAgICB9XG4gICAgICAgIG9wdGlvbnMuaGVhZGVyc1snQXV0aG9yaXphdGlvbiddID0gYEJhc2ljICR7QnVmZmVyLmZyb20oYCR7dGhpcy51c2VybmFtZX06JHt0aGlzLnBhc3N3b3JkfWApLnRvU3RyaW5nKCdiYXNlNjQnKX1gO1xuICAgIH1cbiAgICAvLyBUaGlzIGhhbmRsZXIgY2Fubm90IGhhbmRsZSA0MDFcbiAgICBjYW5IYW5kbGVBdXRoZW50aWNhdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBoYW5kbGVBdXRoZW50aWNhdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbm90IGltcGxlbWVudGVkJyk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuQmFzaWNDcmVkZW50aWFsSGFuZGxlciA9IEJhc2ljQ3JlZGVudGlhbEhhbmRsZXI7XG5jbGFzcyBCZWFyZXJDcmVkZW50aWFsSGFuZGxlciB7XG4gICAgY29uc3RydWN0b3IodG9rZW4pIHtcbiAgICAgICAgdGhpcy50b2tlbiA9IHRva2VuO1xuICAgIH1cbiAgICAvLyBjdXJyZW50bHkgaW1wbGVtZW50cyBwcmUtYXV0aG9yaXphdGlvblxuICAgIC8vIFRPRE86IHN1cHBvcnQgcHJlQXV0aCA9IGZhbHNlIHdoZXJlIGl0IGhvb2tzIG9uIDQwMVxuICAgIHByZXBhcmVSZXF1ZXN0KG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKCFvcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCdUaGUgcmVxdWVzdCBoYXMgbm8gaGVhZGVycycpO1xuICAgICAgICB9XG4gICAgICAgIG9wdGlvbnMuaGVhZGVyc1snQXV0aG9yaXphdGlvbiddID0gYEJlYXJlciAke3RoaXMudG9rZW59YDtcbiAgICB9XG4gICAgLy8gVGhpcyBoYW5kbGVyIGNhbm5vdCBoYW5kbGUgNDAxXG4gICAgY2FuSGFuZGxlQXV0aGVudGljYXRpb24oKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaGFuZGxlQXV0aGVudGljYXRpb24oKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBpbXBsZW1lbnRlZCcpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnRzLkJlYXJlckNyZWRlbnRpYWxIYW5kbGVyID0gQmVhcmVyQ3JlZGVudGlhbEhhbmRsZXI7XG5jbGFzcyBQZXJzb25hbEFjY2Vzc1Rva2VuQ3JlZGVudGlhbEhhbmRsZXIge1xuICAgIGNvbnN0cnVjdG9yKHRva2VuKSB7XG4gICAgICAgIHRoaXMudG9rZW4gPSB0b2tlbjtcbiAgICB9XG4gICAgLy8gY3VycmVudGx5IGltcGxlbWVudHMgcHJlLWF1dGhvcml6YXRpb25cbiAgICAvLyBUT0RPOiBzdXBwb3J0IHByZUF1dGggPSBmYWxzZSB3aGVyZSBpdCBob29rcyBvbiA0MDFcbiAgICBwcmVwYXJlUmVxdWVzdChvcHRpb25zKSB7XG4gICAgICAgIGlmICghb3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcignVGhlIHJlcXVlc3QgaGFzIG5vIGhlYWRlcnMnKTtcbiAgICAgICAgfVxuICAgICAgICBvcHRpb25zLmhlYWRlcnNbJ0F1dGhvcml6YXRpb24nXSA9IGBCYXNpYyAke0J1ZmZlci5mcm9tKGBQQVQ6JHt0aGlzLnRva2VufWApLnRvU3RyaW5nKCdiYXNlNjQnKX1gO1xuICAgIH1cbiAgICAvLyBUaGlzIGhhbmRsZXIgY2Fubm90IGhhbmRsZSA0MDFcbiAgICBjYW5IYW5kbGVBdXRoZW50aWNhdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBoYW5kbGVBdXRoZW50aWNhdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbm90IGltcGxlbWVudGVkJyk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuUGVyc29uYWxBY2Nlc3NUb2tlbkNyZWRlbnRpYWxIYW5kbGVyID0gUGVyc29uYWxBY2Nlc3NUb2tlbkNyZWRlbnRpYWxIYW5kbGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXV0aC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk9pZGNDbGllbnQgPSB2b2lkIDA7XG5jb25zdCBodHRwX2NsaWVudF8xID0gcmVxdWlyZShcIkBhY3Rpb25zL2h0dHAtY2xpZW50XCIpO1xuY29uc3QgYXV0aF8xID0gcmVxdWlyZShcIkBhY3Rpb25zL2h0dHAtY2xpZW50L2xpYi9hdXRoXCIpO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIi4vY29yZVwiKTtcbmNsYXNzIE9pZGNDbGllbnQge1xuICAgIHN0YXRpYyBjcmVhdGVIdHRwQ2xpZW50KGFsbG93UmV0cnkgPSB0cnVlLCBtYXhSZXRyeSA9IDEwKSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zID0ge1xuICAgICAgICAgICAgYWxsb3dSZXRyaWVzOiBhbGxvd1JldHJ5LFxuICAgICAgICAgICAgbWF4UmV0cmllczogbWF4UmV0cnlcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG5ldyBodHRwX2NsaWVudF8xLkh0dHBDbGllbnQoJ2FjdGlvbnMvb2lkYy1jbGllbnQnLCBbbmV3IGF1dGhfMS5CZWFyZXJDcmVkZW50aWFsSGFuZGxlcihPaWRjQ2xpZW50LmdldFJlcXVlc3RUb2tlbigpKV0sIHJlcXVlc3RPcHRpb25zKTtcbiAgICB9XG4gICAgc3RhdGljIGdldFJlcXVlc3RUb2tlbigpIHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSBwcm9jZXNzLmVudlsnQUNUSU9OU19JRF9UT0tFTl9SRVFVRVNUX1RPS0VOJ107XG4gICAgICAgIGlmICghdG9rZW4pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGdldCBBQ1RJT05TX0lEX1RPS0VOX1JFUVVFU1RfVE9LRU4gZW52IHZhcmlhYmxlJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgIH1cbiAgICBzdGF0aWMgZ2V0SURUb2tlblVybCgpIHtcbiAgICAgICAgY29uc3QgcnVudGltZVVybCA9IHByb2Nlc3MuZW52WydBQ1RJT05TX0lEX1RPS0VOX1JFUVVFU1RfVVJMJ107XG4gICAgICAgIGlmICghcnVudGltZVVybCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gZ2V0IEFDVElPTlNfSURfVE9LRU5fUkVRVUVTVF9VUkwgZW52IHZhcmlhYmxlJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJ1bnRpbWVVcmw7XG4gICAgfVxuICAgIHN0YXRpYyBnZXRDYWxsKGlkX3Rva2VuX3VybCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCBodHRwY2xpZW50ID0gT2lkY0NsaWVudC5jcmVhdGVIdHRwQ2xpZW50KCk7XG4gICAgICAgICAgICBjb25zdCByZXMgPSB5aWVsZCBodHRwY2xpZW50XG4gICAgICAgICAgICAgICAgLmdldEpzb24oaWRfdG9rZW5fdXJsKVxuICAgICAgICAgICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZ2V0IElEIFRva2VuLiBcXG4gXG4gICAgICAgIEVycm9yIENvZGUgOiAke2Vycm9yLnN0YXR1c0NvZGV9XFxuIFxuICAgICAgICBFcnJvciBNZXNzYWdlOiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGlkX3Rva2VuID0gKF9hID0gcmVzLnJlc3VsdCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlO1xuICAgICAgICAgICAgaWYgKCFpZF90b2tlbikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVzcG9uc2UganNvbiBib2R5IGRvIG5vdCBoYXZlIElEIFRva2VuIGZpZWxkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaWRfdG9rZW47XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBzdGF0aWMgZ2V0SURUb2tlbihhdWRpZW5jZSkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAvLyBOZXcgSUQgVG9rZW4gaXMgcmVxdWVzdGVkIGZyb20gYWN0aW9uIHNlcnZpY2VcbiAgICAgICAgICAgICAgICBsZXQgaWRfdG9rZW5fdXJsID0gT2lkY0NsaWVudC5nZXRJRFRva2VuVXJsKCk7XG4gICAgICAgICAgICAgICAgaWYgKGF1ZGllbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuY29kZWRBdWRpZW5jZSA9IGVuY29kZVVSSUNvbXBvbmVudChhdWRpZW5jZSk7XG4gICAgICAgICAgICAgICAgICAgIGlkX3Rva2VuX3VybCA9IGAke2lkX3Rva2VuX3VybH0mYXVkaWVuY2U9JHtlbmNvZGVkQXVkaWVuY2V9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKDAsIGNvcmVfMS5kZWJ1ZykoYElEIHRva2VuIHVybCBpcyAke2lkX3Rva2VuX3VybH1gKTtcbiAgICAgICAgICAgICAgICBjb25zdCBpZF90b2tlbiA9IHlpZWxkIE9pZGNDbGllbnQuZ2V0Q2FsbChpZF90b2tlbl91cmwpO1xuICAgICAgICAgICAgICAgICgwLCBjb3JlXzEuc2V0U2VjcmV0KShpZF90b2tlbik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlkX3Rva2VuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBtZXNzYWdlOiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuT2lkY0NsaWVudCA9IE9pZGNDbGllbnQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1vaWRjLXV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc3VtbWFyeSA9IGV4cG9ydHMubWFya2Rvd25TdW1tYXJ5ID0gZXhwb3J0cy5TVU1NQVJZX0RPQ1NfVVJMID0gZXhwb3J0cy5TVU1NQVJZX0VOVl9WQVIgPSB2b2lkIDA7XG5jb25zdCBvc18xID0gcmVxdWlyZShcIm9zXCIpO1xuY29uc3QgZnNfMSA9IHJlcXVpcmUoXCJmc1wiKTtcbmNvbnN0IHsgYWNjZXNzLCBhcHBlbmRGaWxlLCB3cml0ZUZpbGUgfSA9IGZzXzEucHJvbWlzZXM7XG5leHBvcnRzLlNVTU1BUllfRU5WX1ZBUiA9ICdHSVRIVUJfU1RFUF9TVU1NQVJZJztcbmV4cG9ydHMuU1VNTUFSWV9ET0NTX1VSTCA9ICdodHRwczovL2RvY3MuZ2l0aHViLmNvbS9hY3Rpb25zL3VzaW5nLXdvcmtmbG93cy93b3JrZmxvdy1jb21tYW5kcy1mb3ItZ2l0aHViLWFjdGlvbnMjYWRkaW5nLWEtam9iLXN1bW1hcnknO1xuY2xhc3MgU3VtbWFyeSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuX2J1ZmZlciA9ICcnO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBGaW5kcyB0aGUgc3VtbWFyeSBmaWxlIHBhdGggZnJvbSB0aGUgZW52aXJvbm1lbnQsIHJlamVjdHMgaWYgZW52IHZhciBpcyBub3QgZm91bmQgb3IgZmlsZSBkb2VzIG5vdCBleGlzdFxuICAgICAqIEFsc28gY2hlY2tzIHIvdyBwZXJtaXNzaW9ucy5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHN0ZXAgc3VtbWFyeSBmaWxlIHBhdGhcbiAgICAgKi9cbiAgICBmaWxlUGF0aCgpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9maWxlUGF0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9maWxlUGF0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHBhdGhGcm9tRW52ID0gcHJvY2Vzcy5lbnZbZXhwb3J0cy5TVU1NQVJZX0VOVl9WQVJdO1xuICAgICAgICAgICAgaWYgKCFwYXRoRnJvbUVudikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGZpbmQgZW52aXJvbm1lbnQgdmFyaWFibGUgZm9yICQke2V4cG9ydHMuU1VNTUFSWV9FTlZfVkFSfS4gQ2hlY2sgaWYgeW91ciBydW50aW1lIGVudmlyb25tZW50IHN1cHBvcnRzIGpvYiBzdW1tYXJpZXMuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHlpZWxkIGFjY2VzcyhwYXRoRnJvbUVudiwgZnNfMS5jb25zdGFudHMuUl9PSyB8IGZzXzEuY29uc3RhbnRzLldfT0spO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gYWNjZXNzIHN1bW1hcnkgZmlsZTogJyR7cGF0aEZyb21FbnZ9Jy4gQ2hlY2sgaWYgdGhlIGZpbGUgaGFzIGNvcnJlY3QgcmVhZC93cml0ZSBwZXJtaXNzaW9ucy5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX2ZpbGVQYXRoID0gcGF0aEZyb21FbnY7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZmlsZVBhdGg7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXcmFwcyBjb250ZW50IGluIGFuIEhUTUwgdGFnLCBhZGRpbmcgYW55IEhUTUwgYXR0cmlidXRlc1xuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRhZyBIVE1MIHRhZyB0byB3cmFwXG4gICAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsfSBjb250ZW50IGNvbnRlbnQgd2l0aGluIHRoZSB0YWdcbiAgICAgKiBAcGFyYW0ge1thdHRyaWJ1dGU6IHN0cmluZ106IHN0cmluZ30gYXR0cnMga2V5LXZhbHVlIGxpc3Qgb2YgSFRNTCBhdHRyaWJ1dGVzIHRvIGFkZFxuICAgICAqXG4gICAgICogQHJldHVybnMge3N0cmluZ30gY29udGVudCB3cmFwcGVkIGluIEhUTUwgZWxlbWVudFxuICAgICAqL1xuICAgIHdyYXAodGFnLCBjb250ZW50LCBhdHRycyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IGh0bWxBdHRycyA9IE9iamVjdC5lbnRyaWVzKGF0dHJzKVxuICAgICAgICAgICAgLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBgICR7a2V5fT1cIiR7dmFsdWV9XCJgKVxuICAgICAgICAgICAgLmpvaW4oJycpO1xuICAgICAgICBpZiAoIWNvbnRlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBgPCR7dGFnfSR7aHRtbEF0dHJzfT5gO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgPCR7dGFnfSR7aHRtbEF0dHJzfT4ke2NvbnRlbnR9PC8ke3RhZ30+YDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGVzIHRleHQgaW4gdGhlIGJ1ZmZlciB0byB0aGUgc3VtbWFyeSBidWZmZXIgZmlsZSBhbmQgZW1wdGllcyBidWZmZXIuIFdpbGwgYXBwZW5kIGJ5IGRlZmF1bHQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N1bW1hcnlXcml0ZU9wdGlvbnN9IFtvcHRpb25zXSAob3B0aW9uYWwpIG9wdGlvbnMgZm9yIHdyaXRlIG9wZXJhdGlvblxuICAgICAqXG4gICAgICogQHJldHVybnMge1Byb21pc2U8U3VtbWFyeT59IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICB3cml0ZShvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCBvdmVyd3JpdGUgPSAhIShvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMub3ZlcndyaXRlKTtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVQYXRoID0geWllbGQgdGhpcy5maWxlUGF0aCgpO1xuICAgICAgICAgICAgY29uc3Qgd3JpdGVGdW5jID0gb3ZlcndyaXRlID8gd3JpdGVGaWxlIDogYXBwZW5kRmlsZTtcbiAgICAgICAgICAgIHlpZWxkIHdyaXRlRnVuYyhmaWxlUGF0aCwgdGhpcy5fYnVmZmVyLCB7IGVuY29kaW5nOiAndXRmOCcgfSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lbXB0eUJ1ZmZlcigpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2xlYXJzIHRoZSBzdW1tYXJ5IGJ1ZmZlciBhbmQgd2lwZXMgdGhlIHN1bW1hcnkgZmlsZVxuICAgICAqXG4gICAgICogQHJldHVybnMge1N1bW1hcnl9IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBjbGVhcigpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVtcHR5QnVmZmVyKCkud3JpdGUoeyBvdmVyd3JpdGU6IHRydWUgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHN1bW1hcnkgYnVmZmVyIGFzIGEgc3RyaW5nXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBzdHJpbmcgb2Ygc3VtbWFyeSBidWZmZXJcbiAgICAgKi9cbiAgICBzdHJpbmdpZnkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9idWZmZXI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElmIHRoZSBzdW1tYXJ5IGJ1ZmZlciBpcyBlbXB0eVxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlbn0gdHJ1ZSBpZiB0aGUgYnVmZmVyIGlzIGVtcHR5XG4gICAgICovXG4gICAgaXNFbXB0eUJ1ZmZlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlci5sZW5ndGggPT09IDA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlc2V0cyB0aGUgc3VtbWFyeSBidWZmZXIgd2l0aG91dCB3cml0aW5nIHRvIHN1bW1hcnkgZmlsZVxuICAgICAqXG4gICAgICogQHJldHVybnMge1N1bW1hcnl9IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBlbXB0eUJ1ZmZlcigpIHtcbiAgICAgICAgdGhpcy5fYnVmZmVyID0gJyc7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIHJhdyB0ZXh0IHRvIHRoZSBzdW1tYXJ5IGJ1ZmZlclxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgY29udGVudCB0byBhZGRcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthZGRFT0w9ZmFsc2VdIChvcHRpb25hbCkgYXBwZW5kIGFuIEVPTCB0byB0aGUgcmF3IHRleHQgKGRlZmF1bHQ6IGZhbHNlKVxuICAgICAqXG4gICAgICogQHJldHVybnMge1N1bW1hcnl9IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBhZGRSYXcodGV4dCwgYWRkRU9MID0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5fYnVmZmVyICs9IHRleHQ7XG4gICAgICAgIHJldHVybiBhZGRFT0wgPyB0aGlzLmFkZEVPTCgpIDogdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyB0aGUgb3BlcmF0aW5nIHN5c3RlbS1zcGVjaWZpYyBlbmQtb2YtbGluZSBtYXJrZXIgdG8gdGhlIGJ1ZmZlclxuICAgICAqXG4gICAgICogQHJldHVybnMge1N1bW1hcnl9IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBhZGRFT0woKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZFJhdyhvc18xLkVPTCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYW4gSFRNTCBjb2RlYmxvY2sgdG8gdGhlIHN1bW1hcnkgYnVmZmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY29kZSBjb250ZW50IHRvIHJlbmRlciB3aXRoaW4gZmVuY2VkIGNvZGUgYmxvY2tcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbGFuZyAob3B0aW9uYWwpIGxhbmd1YWdlIHRvIHN5bnRheCBoaWdobGlnaHQgY29kZVxuICAgICAqXG4gICAgICogQHJldHVybnMge1N1bW1hcnl9IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBhZGRDb2RlQmxvY2soY29kZSwgbGFuZykge1xuICAgICAgICBjb25zdCBhdHRycyA9IE9iamVjdC5hc3NpZ24oe30sIChsYW5nICYmIHsgbGFuZyB9KSk7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLndyYXAoJ3ByZScsIHRoaXMud3JhcCgnY29kZScsIGNvZGUpLCBhdHRycyk7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZFJhdyhlbGVtZW50KS5hZGRFT0woKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhbiBIVE1MIGxpc3QgdG8gdGhlIHN1bW1hcnkgYnVmZmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBpdGVtcyBsaXN0IG9mIGl0ZW1zIHRvIHJlbmRlclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29yZGVyZWQ9ZmFsc2VdIChvcHRpb25hbCkgaWYgdGhlIHJlbmRlcmVkIGxpc3Qgc2hvdWxkIGJlIG9yZGVyZWQgb3Igbm90IChkZWZhdWx0OiBmYWxzZSlcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtTdW1tYXJ5fSBzdW1tYXJ5IGluc3RhbmNlXG4gICAgICovXG4gICAgYWRkTGlzdChpdGVtcywgb3JkZXJlZCA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IHRhZyA9IG9yZGVyZWQgPyAnb2wnIDogJ3VsJztcbiAgICAgICAgY29uc3QgbGlzdEl0ZW1zID0gaXRlbXMubWFwKGl0ZW0gPT4gdGhpcy53cmFwKCdsaScsIGl0ZW0pKS5qb2luKCcnKTtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMud3JhcCh0YWcsIGxpc3RJdGVtcyk7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZFJhdyhlbGVtZW50KS5hZGRFT0woKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhbiBIVE1MIHRhYmxlIHRvIHRoZSBzdW1tYXJ5IGJ1ZmZlclxuICAgICAqXG4gICAgICogQHBhcmFtIHtTdW1tYXJ5VGFibGVDZWxsW119IHJvd3MgdGFibGUgcm93c1xuICAgICAqXG4gICAgICogQHJldHVybnMge1N1bW1hcnl9IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBhZGRUYWJsZShyb3dzKSB7XG4gICAgICAgIGNvbnN0IHRhYmxlQm9keSA9IHJvd3NcbiAgICAgICAgICAgIC5tYXAocm93ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNlbGxzID0gcm93XG4gICAgICAgICAgICAgICAgLm1hcChjZWxsID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNlbGwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLndyYXAoJ3RkJywgY2VsbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHsgaGVhZGVyLCBkYXRhLCBjb2xzcGFuLCByb3dzcGFuIH0gPSBjZWxsO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhZyA9IGhlYWRlciA/ICd0aCcgOiAndGQnO1xuICAgICAgICAgICAgICAgIGNvbnN0IGF0dHJzID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCAoY29sc3BhbiAmJiB7IGNvbHNwYW4gfSkpLCAocm93c3BhbiAmJiB7IHJvd3NwYW4gfSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLndyYXAodGFnLCBkYXRhLCBhdHRycyk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5qb2luKCcnKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLndyYXAoJ3RyJywgY2VsbHMpO1xuICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oJycpO1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy53cmFwKCd0YWJsZScsIHRhYmxlQm9keSk7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZFJhdyhlbGVtZW50KS5hZGRFT0woKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhIGNvbGxhcHNhYmxlIEhUTUwgZGV0YWlscyBlbGVtZW50IHRvIHRoZSBzdW1tYXJ5IGJ1ZmZlclxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGxhYmVsIHRleHQgZm9yIHRoZSBjbG9zZWQgc3RhdGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCBjb2xsYXBzYWJsZSBjb250ZW50XG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7U3VtbWFyeX0gc3VtbWFyeSBpbnN0YW5jZVxuICAgICAqL1xuICAgIGFkZERldGFpbHMobGFiZWwsIGNvbnRlbnQpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMud3JhcCgnZGV0YWlscycsIHRoaXMud3JhcCgnc3VtbWFyeScsIGxhYmVsKSArIGNvbnRlbnQpO1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRSYXcoZWxlbWVudCkuYWRkRU9MKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYW4gSFRNTCBpbWFnZSB0YWcgdG8gdGhlIHN1bW1hcnkgYnVmZmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3JjIHBhdGggdG8gdGhlIGltYWdlIHlvdSB0byBlbWJlZFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhbHQgdGV4dCBkZXNjcmlwdGlvbiBvZiB0aGUgaW1hZ2VcbiAgICAgKiBAcGFyYW0ge1N1bW1hcnlJbWFnZU9wdGlvbnN9IG9wdGlvbnMgKG9wdGlvbmFsKSBhZGRpdGlvbiBpbWFnZSBhdHRyaWJ1dGVzXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7U3VtbWFyeX0gc3VtbWFyeSBpbnN0YW5jZVxuICAgICAqL1xuICAgIGFkZEltYWdlKHNyYywgYWx0LCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgY29uc3QgYXR0cnMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sICh3aWR0aCAmJiB7IHdpZHRoIH0pKSwgKGhlaWdodCAmJiB7IGhlaWdodCB9KSk7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLndyYXAoJ2ltZycsIG51bGwsIE9iamVjdC5hc3NpZ24oeyBzcmMsIGFsdCB9LCBhdHRycykpO1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRSYXcoZWxlbWVudCkuYWRkRU9MKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYW4gSFRNTCBzZWN0aW9uIGhlYWRpbmcgZWxlbWVudFxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgaGVhZGluZyB0ZXh0XG4gICAgICogQHBhcmFtIHtudW1iZXIgfCBzdHJpbmd9IFtsZXZlbD0xXSAob3B0aW9uYWwpIHRoZSBoZWFkaW5nIGxldmVsLCBkZWZhdWx0OiAxXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7U3VtbWFyeX0gc3VtbWFyeSBpbnN0YW5jZVxuICAgICAqL1xuICAgIGFkZEhlYWRpbmcodGV4dCwgbGV2ZWwpIHtcbiAgICAgICAgY29uc3QgdGFnID0gYGgke2xldmVsfWA7XG4gICAgICAgIGNvbnN0IGFsbG93ZWRUYWcgPSBbJ2gxJywgJ2gyJywgJ2gzJywgJ2g0JywgJ2g1JywgJ2g2J10uaW5jbHVkZXModGFnKVxuICAgICAgICAgICAgPyB0YWdcbiAgICAgICAgICAgIDogJ2gxJztcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMud3JhcChhbGxvd2VkVGFnLCB0ZXh0KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkUmF3KGVsZW1lbnQpLmFkZEVPTCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGFuIEhUTUwgdGhlbWF0aWMgYnJlYWsgKDxocj4pIHRvIHRoZSBzdW1tYXJ5IGJ1ZmZlclxuICAgICAqXG4gICAgICogQHJldHVybnMge1N1bW1hcnl9IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBhZGRTZXBhcmF0b3IoKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLndyYXAoJ2hyJywgbnVsbCk7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZFJhdyhlbGVtZW50KS5hZGRFT0woKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhbiBIVE1MIGxpbmUgYnJlYWsgKDxicj4pIHRvIHRoZSBzdW1tYXJ5IGJ1ZmZlclxuICAgICAqXG4gICAgICogQHJldHVybnMge1N1bW1hcnl9IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBhZGRCcmVhaygpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMud3JhcCgnYnInLCBudWxsKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkUmF3KGVsZW1lbnQpLmFkZEVPTCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGFuIEhUTUwgYmxvY2txdW90ZSB0byB0aGUgc3VtbWFyeSBidWZmZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IHF1b3RlIHRleHRcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY2l0ZSAob3B0aW9uYWwpIGNpdGF0aW9uIHVybFxuICAgICAqXG4gICAgICogQHJldHVybnMge1N1bW1hcnl9IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBhZGRRdW90ZSh0ZXh0LCBjaXRlKSB7XG4gICAgICAgIGNvbnN0IGF0dHJzID0gT2JqZWN0LmFzc2lnbih7fSwgKGNpdGUgJiYgeyBjaXRlIH0pKTtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMud3JhcCgnYmxvY2txdW90ZScsIHRleHQsIGF0dHJzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkUmF3KGVsZW1lbnQpLmFkZEVPTCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGFuIEhUTUwgYW5jaG9yIHRhZyB0byB0aGUgc3VtbWFyeSBidWZmZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IGxpbmsgdGV4dC9jb250ZW50XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGhyZWYgaHlwZXJsaW5rXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7U3VtbWFyeX0gc3VtbWFyeSBpbnN0YW5jZVxuICAgICAqL1xuICAgIGFkZExpbmsodGV4dCwgaHJlZikge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy53cmFwKCdhJywgdGV4dCwgeyBocmVmIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRSYXcoZWxlbWVudCkuYWRkRU9MKCk7XG4gICAgfVxufVxuY29uc3QgX3N1bW1hcnkgPSBuZXcgU3VtbWFyeSgpO1xuLyoqXG4gKiBAZGVwcmVjYXRlZCB1c2UgYGNvcmUuc3VtbWFyeWBcbiAqL1xuZXhwb3J0cy5tYXJrZG93blN1bW1hcnkgPSBfc3VtbWFyeTtcbmV4cG9ydHMuc3VtbWFyeSA9IF9zdW1tYXJ5O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3VtbWFyeS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRvUGxhdGZvcm1QYXRoID0gZXhwb3J0cy50b1dpbjMyUGF0aCA9IGV4cG9ydHMudG9Qb3NpeFBhdGggPSB2b2lkIDA7XG5jb25zdCBwYXRoID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJwYXRoXCIpKTtcbi8qKlxuICogdG9Qb3NpeFBhdGggY29udmVydHMgdGhlIGdpdmVuIHBhdGggdG8gdGhlIHBvc2l4IGZvcm0uIE9uIFdpbmRvd3MsIFxcXFwgd2lsbCBiZVxuICogcmVwbGFjZWQgd2l0aCAvLlxuICpcbiAqIEBwYXJhbSBwdGguIFBhdGggdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiBzdHJpbmcgUG9zaXggcGF0aC5cbiAqL1xuZnVuY3Rpb24gdG9Qb3NpeFBhdGgocHRoKSB7XG4gICAgcmV0dXJuIHB0aC5yZXBsYWNlKC9bXFxcXF0vZywgJy8nKTtcbn1cbmV4cG9ydHMudG9Qb3NpeFBhdGggPSB0b1Bvc2l4UGF0aDtcbi8qKlxuICogdG9XaW4zMlBhdGggY29udmVydHMgdGhlIGdpdmVuIHBhdGggdG8gdGhlIHdpbjMyIGZvcm0uIE9uIExpbnV4LCAvIHdpbGwgYmVcbiAqIHJlcGxhY2VkIHdpdGggXFxcXC5cbiAqXG4gKiBAcGFyYW0gcHRoLiBQYXRoIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4gc3RyaW5nIFdpbjMyIHBhdGguXG4gKi9cbmZ1bmN0aW9uIHRvV2luMzJQYXRoKHB0aCkge1xuICAgIHJldHVybiBwdGgucmVwbGFjZSgvWy9dL2csICdcXFxcJyk7XG59XG5leHBvcnRzLnRvV2luMzJQYXRoID0gdG9XaW4zMlBhdGg7XG4vKipcbiAqIHRvUGxhdGZvcm1QYXRoIGNvbnZlcnRzIHRoZSBnaXZlbiBwYXRoIHRvIGEgcGxhdGZvcm0tc3BlY2lmaWMgcGF0aC4gSXQgZG9lc1xuICogdGhpcyBieSByZXBsYWNpbmcgaW5zdGFuY2VzIG9mIC8gYW5kIFxcIHdpdGggdGhlIHBsYXRmb3JtLXNwZWNpZmljIHBhdGhcbiAqIHNlcGFyYXRvci5cbiAqXG4gKiBAcGFyYW0gcHRoIFRoZSBwYXRoIHRvIHBsYXRmb3JtaXplLlxuICogQHJldHVybiBzdHJpbmcgVGhlIHBsYXRmb3JtLXNwZWNpZmljIHBhdGguXG4gKi9cbmZ1bmN0aW9uIHRvUGxhdGZvcm1QYXRoKHB0aCkge1xuICAgIHJldHVybiBwdGgucmVwbGFjZSgvWy9cXFxcXS9nLCBwYXRoLnNlcCk7XG59XG5leHBvcnRzLnRvUGxhdGZvcm1QYXRoID0gdG9QbGF0Zm9ybVBhdGg7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wYXRoLXV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfSk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG52YXIgX2E7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldENtZFBhdGggPSBleHBvcnRzLnRyeUdldEV4ZWN1dGFibGVQYXRoID0gZXhwb3J0cy5pc1Jvb3RlZCA9IGV4cG9ydHMuaXNEaXJlY3RvcnkgPSBleHBvcnRzLmV4aXN0cyA9IGV4cG9ydHMuUkVBRE9OTFkgPSBleHBvcnRzLlVWX0ZTX09fRVhMT0NLID0gZXhwb3J0cy5JU19XSU5ET1dTID0gZXhwb3J0cy51bmxpbmsgPSBleHBvcnRzLnN5bWxpbmsgPSBleHBvcnRzLnN0YXQgPSBleHBvcnRzLnJtZGlyID0gZXhwb3J0cy5ybSA9IGV4cG9ydHMucmVuYW1lID0gZXhwb3J0cy5yZWFkbGluayA9IGV4cG9ydHMucmVhZGRpciA9IGV4cG9ydHMub3BlbiA9IGV4cG9ydHMubWtkaXIgPSBleHBvcnRzLmxzdGF0ID0gZXhwb3J0cy5jb3B5RmlsZSA9IGV4cG9ydHMuY2htb2QgPSB2b2lkIDA7XG5jb25zdCBmcyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiZnNcIikpO1xuY29uc3QgcGF0aCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwicGF0aFwiKSk7XG5fYSA9IGZzLnByb21pc2VzXG4vLyBleHBvcnQgY29uc3Qge29wZW59ID0gJ2ZzJ1xuLCBleHBvcnRzLmNobW9kID0gX2EuY2htb2QsIGV4cG9ydHMuY29weUZpbGUgPSBfYS5jb3B5RmlsZSwgZXhwb3J0cy5sc3RhdCA9IF9hLmxzdGF0LCBleHBvcnRzLm1rZGlyID0gX2EubWtkaXIsIGV4cG9ydHMub3BlbiA9IF9hLm9wZW4sIGV4cG9ydHMucmVhZGRpciA9IF9hLnJlYWRkaXIsIGV4cG9ydHMucmVhZGxpbmsgPSBfYS5yZWFkbGluaywgZXhwb3J0cy5yZW5hbWUgPSBfYS5yZW5hbWUsIGV4cG9ydHMucm0gPSBfYS5ybSwgZXhwb3J0cy5ybWRpciA9IF9hLnJtZGlyLCBleHBvcnRzLnN0YXQgPSBfYS5zdGF0LCBleHBvcnRzLnN5bWxpbmsgPSBfYS5zeW1saW5rLCBleHBvcnRzLnVubGluayA9IF9hLnVubGluaztcbi8vIGV4cG9ydCBjb25zdCB7b3Blbn0gPSAnZnMnXG5leHBvcnRzLklTX1dJTkRPV1MgPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInO1xuLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL2QwMTUzYWVlMzY3NDIyZDA4NTgxMDVhYmVjMTg2ZGE0ZGZmMGEwYzUvZGVwcy91di9pbmNsdWRlL3V2L3dpbi5oI0w2OTFcbmV4cG9ydHMuVVZfRlNfT19FWExPQ0sgPSAweDEwMDAwMDAwO1xuZXhwb3J0cy5SRUFET05MWSA9IGZzLmNvbnN0YW50cy5PX1JET05MWTtcbmZ1bmN0aW9uIGV4aXN0cyhmc1BhdGgpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgeWllbGQgZXhwb3J0cy5zdGF0KGZzUGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZXhpc3RzID0gZXhpc3RzO1xuZnVuY3Rpb24gaXNEaXJlY3RvcnkoZnNQYXRoLCB1c2VTdGF0ID0gZmFsc2UpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBzdGF0cyA9IHVzZVN0YXQgPyB5aWVsZCBleHBvcnRzLnN0YXQoZnNQYXRoKSA6IHlpZWxkIGV4cG9ydHMubHN0YXQoZnNQYXRoKTtcbiAgICAgICAgcmV0dXJuIHN0YXRzLmlzRGlyZWN0b3J5KCk7XG4gICAgfSk7XG59XG5leHBvcnRzLmlzRGlyZWN0b3J5ID0gaXNEaXJlY3Rvcnk7XG4vKipcbiAqIE9uIE9TWC9MaW51eCwgdHJ1ZSBpZiBwYXRoIHN0YXJ0cyB3aXRoICcvJy4gT24gV2luZG93cywgdHJ1ZSBmb3IgcGF0aHMgbGlrZTpcbiAqIFxcLCBcXGhlbGxvLCBcXFxcaGVsbG9cXHNoYXJlLCBDOiwgYW5kIEM6XFxoZWxsbyAoYW5kIGNvcnJlc3BvbmRpbmcgYWx0ZXJuYXRlIHNlcGFyYXRvciBjYXNlcykuXG4gKi9cbmZ1bmN0aW9uIGlzUm9vdGVkKHApIHtcbiAgICBwID0gbm9ybWFsaXplU2VwYXJhdG9ycyhwKTtcbiAgICBpZiAoIXApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpc1Jvb3RlZCgpIHBhcmFtZXRlciBcInBcIiBjYW5ub3QgYmUgZW1wdHknKTtcbiAgICB9XG4gICAgaWYgKGV4cG9ydHMuSVNfV0lORE9XUykge1xuICAgICAgICByZXR1cm4gKHAuc3RhcnRzV2l0aCgnXFxcXCcpIHx8IC9eW0EtWl06L2kudGVzdChwKSAvLyBlLmcuIFxcIG9yIFxcaGVsbG8gb3IgXFxcXGhlbGxvXG4gICAgICAgICk7IC8vIGUuZy4gQzogb3IgQzpcXGhlbGxvXG4gICAgfVxuICAgIHJldHVybiBwLnN0YXJ0c1dpdGgoJy8nKTtcbn1cbmV4cG9ydHMuaXNSb290ZWQgPSBpc1Jvb3RlZDtcbi8qKlxuICogQmVzdCBlZmZvcnQgYXR0ZW1wdCB0byBkZXRlcm1pbmUgd2hldGhlciBhIGZpbGUgZXhpc3RzIGFuZCBpcyBleGVjdXRhYmxlLlxuICogQHBhcmFtIGZpbGVQYXRoICAgIGZpbGUgcGF0aCB0byBjaGVja1xuICogQHBhcmFtIGV4dGVuc2lvbnMgIGFkZGl0aW9uYWwgZmlsZSBleHRlbnNpb25zIHRvIHRyeVxuICogQHJldHVybiBpZiBmaWxlIGV4aXN0cyBhbmQgaXMgZXhlY3V0YWJsZSwgcmV0dXJucyB0aGUgZmlsZSBwYXRoLiBvdGhlcndpc2UgZW1wdHkgc3RyaW5nLlxuICovXG5mdW5jdGlvbiB0cnlHZXRFeGVjdXRhYmxlUGF0aChmaWxlUGF0aCwgZXh0ZW5zaW9ucykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGxldCBzdGF0cyA9IHVuZGVmaW5lZDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIHRlc3QgZmlsZSBleGlzdHNcbiAgICAgICAgICAgIHN0YXRzID0geWllbGQgZXhwb3J0cy5zdGF0KGZpbGVQYXRoKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyLmNvZGUgIT09ICdFTk9FTlQnKSB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgVW5leHBlY3RlZCBlcnJvciBhdHRlbXB0aW5nIHRvIGRldGVybWluZSBpZiBleGVjdXRhYmxlIGZpbGUgZXhpc3RzICcke2ZpbGVQYXRofSc6ICR7ZXJyfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0cyAmJiBzdGF0cy5pc0ZpbGUoKSkge1xuICAgICAgICAgICAgaWYgKGV4cG9ydHMuSVNfV0lORE9XUykge1xuICAgICAgICAgICAgICAgIC8vIG9uIFdpbmRvd3MsIHRlc3QgZm9yIHZhbGlkIGV4dGVuc2lvblxuICAgICAgICAgICAgICAgIGNvbnN0IHVwcGVyRXh0ID0gcGF0aC5leHRuYW1lKGZpbGVQYXRoKS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIGlmIChleHRlbnNpb25zLnNvbWUodmFsaWRFeHQgPT4gdmFsaWRFeHQudG9VcHBlckNhc2UoKSA9PT0gdXBwZXJFeHQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmaWxlUGF0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNVbml4RXhlY3V0YWJsZShzdGF0cykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpbGVQYXRoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyB0cnkgZWFjaCBleHRlbnNpb25cbiAgICAgICAgY29uc3Qgb3JpZ2luYWxGaWxlUGF0aCA9IGZpbGVQYXRoO1xuICAgICAgICBmb3IgKGNvbnN0IGV4dGVuc2lvbiBvZiBleHRlbnNpb25zKSB7XG4gICAgICAgICAgICBmaWxlUGF0aCA9IG9yaWdpbmFsRmlsZVBhdGggKyBleHRlbnNpb247XG4gICAgICAgICAgICBzdGF0cyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgc3RhdHMgPSB5aWVsZCBleHBvcnRzLnN0YXQoZmlsZVBhdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIuY29kZSAhPT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFVuZXhwZWN0ZWQgZXJyb3IgYXR0ZW1wdGluZyB0byBkZXRlcm1pbmUgaWYgZXhlY3V0YWJsZSBmaWxlIGV4aXN0cyAnJHtmaWxlUGF0aH0nOiAke2Vycn1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3RhdHMgJiYgc3RhdHMuaXNGaWxlKCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXhwb3J0cy5JU19XSU5ET1dTKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHByZXNlcnZlIHRoZSBjYXNlIG9mIHRoZSBhY3R1YWwgZmlsZSAoc2luY2UgYW4gZXh0ZW5zaW9uIHdhcyBhcHBlbmRlZClcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpcmVjdG9yeSA9IHBhdGguZGlybmFtZShmaWxlUGF0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cHBlck5hbWUgPSBwYXRoLmJhc2VuYW1lKGZpbGVQYXRoKS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBhY3R1YWxOYW1lIG9mIHlpZWxkIGV4cG9ydHMucmVhZGRpcihkaXJlY3RvcnkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVwcGVyTmFtZSA9PT0gYWN0dWFsTmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVQYXRoID0gcGF0aC5qb2luKGRpcmVjdG9yeSwgYWN0dWFsTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFVuZXhwZWN0ZWQgZXJyb3IgYXR0ZW1wdGluZyB0byBkZXRlcm1pbmUgdGhlIGFjdHVhbCBjYXNlIG9mIHRoZSBmaWxlICcke2ZpbGVQYXRofSc6ICR7ZXJyfWApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmaWxlUGF0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1VuaXhFeGVjdXRhYmxlKHN0YXRzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpbGVQYXRoO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9KTtcbn1cbmV4cG9ydHMudHJ5R2V0RXhlY3V0YWJsZVBhdGggPSB0cnlHZXRFeGVjdXRhYmxlUGF0aDtcbmZ1bmN0aW9uIG5vcm1hbGl6ZVNlcGFyYXRvcnMocCkge1xuICAgIHAgPSBwIHx8ICcnO1xuICAgIGlmIChleHBvcnRzLklTX1dJTkRPV1MpIHtcbiAgICAgICAgLy8gY29udmVydCBzbGFzaGVzIG9uIFdpbmRvd3NcbiAgICAgICAgcCA9IHAucmVwbGFjZSgvXFwvL2csICdcXFxcJyk7XG4gICAgICAgIC8vIHJlbW92ZSByZWR1bmRhbnQgc2xhc2hlc1xuICAgICAgICByZXR1cm4gcC5yZXBsYWNlKC9cXFxcXFxcXCsvZywgJ1xcXFwnKTtcbiAgICB9XG4gICAgLy8gcmVtb3ZlIHJlZHVuZGFudCBzbGFzaGVzXG4gICAgcmV0dXJuIHAucmVwbGFjZSgvXFwvXFwvKy9nLCAnLycpO1xufVxuLy8gb24gTWFjL0xpbnV4LCB0ZXN0IHRoZSBleGVjdXRlIGJpdFxuLy8gICAgIFIgICBXICBYICBSICBXIFggUiBXIFhcbi8vICAgMjU2IDEyOCA2NCAzMiAxNiA4IDQgMiAxXG5mdW5jdGlvbiBpc1VuaXhFeGVjdXRhYmxlKHN0YXRzKSB7XG4gICAgcmV0dXJuICgoc3RhdHMubW9kZSAmIDEpID4gMCB8fFxuICAgICAgICAoKHN0YXRzLm1vZGUgJiA4KSA+IDAgJiYgc3RhdHMuZ2lkID09PSBwcm9jZXNzLmdldGdpZCgpKSB8fFxuICAgICAgICAoKHN0YXRzLm1vZGUgJiA2NCkgPiAwICYmIHN0YXRzLnVpZCA9PT0gcHJvY2Vzcy5nZXR1aWQoKSkpO1xufVxuLy8gR2V0IHRoZSBwYXRoIG9mIGNtZC5leGUgaW4gd2luZG93c1xuZnVuY3Rpb24gZ2V0Q21kUGF0aCgpIHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuIChfYSA9IHByb2Nlc3MuZW52WydDT01TUEVDJ10pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGBjbWQuZXhlYDtcbn1cbmV4cG9ydHMuZ2V0Q21kUGF0aCA9IGdldENtZFBhdGg7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pby11dGlsLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfSk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmZpbmRJblBhdGggPSBleHBvcnRzLndoaWNoID0gZXhwb3J0cy5ta2RpclAgPSBleHBvcnRzLnJtUkYgPSBleHBvcnRzLm12ID0gZXhwb3J0cy5jcCA9IHZvaWQgMDtcbmNvbnN0IGFzc2VydF8xID0gcmVxdWlyZShcImFzc2VydFwiKTtcbmNvbnN0IHBhdGggPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcInBhdGhcIikpO1xuY29uc3QgaW9VdGlsID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL2lvLXV0aWxcIikpO1xuLyoqXG4gKiBDb3BpZXMgYSBmaWxlIG9yIGZvbGRlci5cbiAqIEJhc2VkIG9mZiBvZiBzaGVsbGpzIC0gaHR0cHM6Ly9naXRodWIuY29tL3NoZWxsanMvc2hlbGxqcy9ibG9iLzkyMzdmNjZjNTJlNWRhYTQwNDU4Zjk0Zjk1NjVlMThlODEzMmY1YTYvc3JjL2NwLmpzXG4gKlxuICogQHBhcmFtICAgICBzb3VyY2UgICAgc291cmNlIHBhdGhcbiAqIEBwYXJhbSAgICAgZGVzdCAgICAgIGRlc3RpbmF0aW9uIHBhdGhcbiAqIEBwYXJhbSAgICAgb3B0aW9ucyAgIG9wdGlvbmFsLiBTZWUgQ29weU9wdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIGNwKHNvdXJjZSwgZGVzdCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgeyBmb3JjZSwgcmVjdXJzaXZlLCBjb3B5U291cmNlRGlyZWN0b3J5IH0gPSByZWFkQ29weU9wdGlvbnMob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGRlc3RTdGF0ID0gKHlpZWxkIGlvVXRpbC5leGlzdHMoZGVzdCkpID8geWllbGQgaW9VdGlsLnN0YXQoZGVzdCkgOiBudWxsO1xuICAgICAgICAvLyBEZXN0IGlzIGFuIGV4aXN0aW5nIGZpbGUsIGJ1dCBub3QgZm9yY2luZ1xuICAgICAgICBpZiAoZGVzdFN0YXQgJiYgZGVzdFN0YXQuaXNGaWxlKCkgJiYgIWZvcmNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgZGVzdCBpcyBhbiBleGlzdGluZyBkaXJlY3RvcnksIHNob3VsZCBjb3B5IGluc2lkZS5cbiAgICAgICAgY29uc3QgbmV3RGVzdCA9IGRlc3RTdGF0ICYmIGRlc3RTdGF0LmlzRGlyZWN0b3J5KCkgJiYgY29weVNvdXJjZURpcmVjdG9yeVxuICAgICAgICAgICAgPyBwYXRoLmpvaW4oZGVzdCwgcGF0aC5iYXNlbmFtZShzb3VyY2UpKVxuICAgICAgICAgICAgOiBkZXN0O1xuICAgICAgICBpZiAoISh5aWVsZCBpb1V0aWwuZXhpc3RzKHNvdXJjZSkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYG5vIHN1Y2ggZmlsZSBvciBkaXJlY3Rvcnk6ICR7c291cmNlfWApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNvdXJjZVN0YXQgPSB5aWVsZCBpb1V0aWwuc3RhdChzb3VyY2UpO1xuICAgICAgICBpZiAoc291cmNlU3RhdC5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgICAgICBpZiAoIXJlY3Vyc2l2ZSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGNvcHkuICR7c291cmNlfSBpcyBhIGRpcmVjdG9yeSwgYnV0IHRyaWVkIHRvIGNvcHkgd2l0aG91dCByZWN1cnNpdmUgZmxhZy5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHlpZWxkIGNwRGlyUmVjdXJzaXZlKHNvdXJjZSwgbmV3RGVzdCwgMCwgZm9yY2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHBhdGgucmVsYXRpdmUoc291cmNlLCBuZXdEZXN0KSA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICAvLyBhIGZpbGUgY2Fubm90IGJlIGNvcGllZCB0byBpdHNlbGZcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCcke25ld0Rlc3R9JyBhbmQgJyR7c291cmNlfScgYXJlIHRoZSBzYW1lIGZpbGVgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHlpZWxkIGNvcHlGaWxlKHNvdXJjZSwgbmV3RGVzdCwgZm9yY2UpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5leHBvcnRzLmNwID0gY3A7XG4vKipcbiAqIE1vdmVzIGEgcGF0aC5cbiAqXG4gKiBAcGFyYW0gICAgIHNvdXJjZSAgICBzb3VyY2UgcGF0aFxuICogQHBhcmFtICAgICBkZXN0ICAgICAgZGVzdGluYXRpb24gcGF0aFxuICogQHBhcmFtICAgICBvcHRpb25zICAgb3B0aW9uYWwuIFNlZSBNb3ZlT3B0aW9ucy5cbiAqL1xuZnVuY3Rpb24gbXYoc291cmNlLCBkZXN0LCBvcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBpZiAoeWllbGQgaW9VdGlsLmV4aXN0cyhkZXN0KSkge1xuICAgICAgICAgICAgbGV0IGRlc3RFeGlzdHMgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKHlpZWxkIGlvVXRpbC5pc0RpcmVjdG9yeShkZXN0KSkge1xuICAgICAgICAgICAgICAgIC8vIElmIGRlc3QgaXMgZGlyZWN0b3J5IGNvcHkgc3JjIGludG8gZGVzdFxuICAgICAgICAgICAgICAgIGRlc3QgPSBwYXRoLmpvaW4oZGVzdCwgcGF0aC5iYXNlbmFtZShzb3VyY2UpKTtcbiAgICAgICAgICAgICAgICBkZXN0RXhpc3RzID0geWllbGQgaW9VdGlsLmV4aXN0cyhkZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkZXN0RXhpc3RzKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZm9yY2UgPT0gbnVsbCB8fCBvcHRpb25zLmZvcmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIHJtUkYoZGVzdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rlc3RpbmF0aW9uIGFscmVhZHkgZXhpc3RzJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHlpZWxkIG1rZGlyUChwYXRoLmRpcm5hbWUoZGVzdCkpO1xuICAgICAgICB5aWVsZCBpb1V0aWwucmVuYW1lKHNvdXJjZSwgZGVzdCk7XG4gICAgfSk7XG59XG5leHBvcnRzLm12ID0gbXY7XG4vKipcbiAqIFJlbW92ZSBhIHBhdGggcmVjdXJzaXZlbHkgd2l0aCBmb3JjZVxuICpcbiAqIEBwYXJhbSBpbnB1dFBhdGggcGF0aCB0byByZW1vdmVcbiAqL1xuZnVuY3Rpb24gcm1SRihpbnB1dFBhdGgpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBpZiAoaW9VdGlsLklTX1dJTkRPV1MpIHtcbiAgICAgICAgICAgIC8vIENoZWNrIGZvciBpbnZhbGlkIGNoYXJhY3RlcnNcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3dpbmRvd3Mvd2luMzIvZmlsZWlvL25hbWluZy1hLWZpbGVcbiAgICAgICAgICAgIGlmICgvWypcIjw+fF0vLnRlc3QoaW5wdXRQYXRoKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRmlsZSBwYXRoIG11c3Qgbm90IGNvbnRhaW4gYCpgLCBgXCJgLCBgPGAsIGA+YCBvciBgfGAgb24gV2luZG93cycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBub3RlIGlmIHBhdGggZG9lcyBub3QgZXhpc3QsIGVycm9yIGlzIHNpbGVudFxuICAgICAgICAgICAgeWllbGQgaW9VdGlsLnJtKGlucHV0UGF0aCwge1xuICAgICAgICAgICAgICAgIGZvcmNlOiB0cnVlLFxuICAgICAgICAgICAgICAgIG1heFJldHJpZXM6IDMsXG4gICAgICAgICAgICAgICAgcmVjdXJzaXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHJldHJ5RGVsYXk6IDMwMFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGaWxlIHdhcyB1bmFibGUgdG8gYmUgcmVtb3ZlZCAke2Vycn1gKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuZXhwb3J0cy5ybVJGID0gcm1SRjtcbi8qKlxuICogTWFrZSBhIGRpcmVjdG9yeS4gIENyZWF0ZXMgdGhlIGZ1bGwgcGF0aCB3aXRoIGZvbGRlcnMgaW4gYmV0d2VlblxuICogV2lsbCB0aHJvdyBpZiBpdCBmYWlsc1xuICpcbiAqIEBwYXJhbSAgIGZzUGF0aCAgICAgICAgcGF0aCB0byBjcmVhdGVcbiAqIEByZXR1cm5zIFByb21pc2U8dm9pZD5cbiAqL1xuZnVuY3Rpb24gbWtkaXJQKGZzUGF0aCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGFzc2VydF8xLm9rKGZzUGF0aCwgJ2EgcGF0aCBhcmd1bWVudCBtdXN0IGJlIHByb3ZpZGVkJyk7XG4gICAgICAgIHlpZWxkIGlvVXRpbC5ta2Rpcihmc1BhdGgsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIH0pO1xufVxuZXhwb3J0cy5ta2RpclAgPSBta2RpclA7XG4vKipcbiAqIFJldHVybnMgcGF0aCBvZiBhIHRvb2wgaGFkIHRoZSB0b29sIGFjdHVhbGx5IGJlZW4gaW52b2tlZC4gIFJlc29sdmVzIHZpYSBwYXRocy5cbiAqIElmIHlvdSBjaGVjayBhbmQgdGhlIHRvb2wgZG9lcyBub3QgZXhpc3QsIGl0IHdpbGwgdGhyb3cuXG4gKlxuICogQHBhcmFtICAgICB0b29sICAgICAgICAgICAgICBuYW1lIG9mIHRoZSB0b29sXG4gKiBAcGFyYW0gICAgIGNoZWNrICAgICAgICAgICAgIHdoZXRoZXIgdG8gY2hlY2sgaWYgdG9vbCBleGlzdHNcbiAqIEByZXR1cm5zICAgUHJvbWlzZTxzdHJpbmc+ICAgcGF0aCB0byB0b29sXG4gKi9cbmZ1bmN0aW9uIHdoaWNoKHRvb2wsIGNoZWNrKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgaWYgKCF0b29sKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJwYXJhbWV0ZXIgJ3Rvb2wnIGlzIHJlcXVpcmVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHJlY3Vyc2l2ZSB3aGVuIGNoZWNrPXRydWVcbiAgICAgICAgaWYgKGNoZWNrKSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB5aWVsZCB3aGljaCh0b29sLCBmYWxzZSk7XG4gICAgICAgICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICAgICAgICAgIGlmIChpb1V0aWwuSVNfV0lORE9XUykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBsb2NhdGUgZXhlY3V0YWJsZSBmaWxlOiAke3Rvb2x9LiBQbGVhc2UgdmVyaWZ5IGVpdGhlciB0aGUgZmlsZSBwYXRoIGV4aXN0cyBvciB0aGUgZmlsZSBjYW4gYmUgZm91bmQgd2l0aGluIGEgZGlyZWN0b3J5IHNwZWNpZmllZCBieSB0aGUgUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZS4gQWxzbyB2ZXJpZnkgdGhlIGZpbGUgaGFzIGEgdmFsaWQgZXh0ZW5zaW9uIGZvciBhbiBleGVjdXRhYmxlIGZpbGUuYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBsb2NhdGUgZXhlY3V0YWJsZSBmaWxlOiAke3Rvb2x9LiBQbGVhc2UgdmVyaWZ5IGVpdGhlciB0aGUgZmlsZSBwYXRoIGV4aXN0cyBvciB0aGUgZmlsZSBjYW4gYmUgZm91bmQgd2l0aGluIGEgZGlyZWN0b3J5IHNwZWNpZmllZCBieSB0aGUgUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZS4gQWxzbyBjaGVjayB0aGUgZmlsZSBtb2RlIHRvIHZlcmlmeSB0aGUgZmlsZSBpcyBleGVjdXRhYmxlLmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWF0Y2hlcyA9IHlpZWxkIGZpbmRJblBhdGgodG9vbCk7XG4gICAgICAgIGlmIChtYXRjaGVzICYmIG1hdGNoZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXNbMF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH0pO1xufVxuZXhwb3J0cy53aGljaCA9IHdoaWNoO1xuLyoqXG4gKiBSZXR1cm5zIGEgbGlzdCBvZiBhbGwgb2NjdXJyZW5jZXMgb2YgdGhlIGdpdmVuIHRvb2wgb24gdGhlIHN5c3RlbSBwYXRoLlxuICpcbiAqIEByZXR1cm5zICAgUHJvbWlzZTxzdHJpbmdbXT4gIHRoZSBwYXRocyBvZiB0aGUgdG9vbFxuICovXG5mdW5jdGlvbiBmaW5kSW5QYXRoKHRvb2wpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBpZiAoIXRvb2wpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInBhcmFtZXRlciAndG9vbCcgaXMgcmVxdWlyZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gYnVpbGQgdGhlIGxpc3Qgb2YgZXh0ZW5zaW9ucyB0byB0cnlcbiAgICAgICAgY29uc3QgZXh0ZW5zaW9ucyA9IFtdO1xuICAgICAgICBpZiAoaW9VdGlsLklTX1dJTkRPV1MgJiYgcHJvY2Vzcy5lbnZbJ1BBVEhFWFQnXSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBleHRlbnNpb24gb2YgcHJvY2Vzcy5lbnZbJ1BBVEhFWFQnXS5zcGxpdChwYXRoLmRlbGltaXRlcikpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXh0ZW5zaW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbnMucHVzaChleHRlbnNpb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBpZiBpdCdzIHJvb3RlZCwgcmV0dXJuIGl0IGlmIGV4aXN0cy4gb3RoZXJ3aXNlIHJldHVybiBlbXB0eS5cbiAgICAgICAgaWYgKGlvVXRpbC5pc1Jvb3RlZCh0b29sKSkge1xuICAgICAgICAgICAgY29uc3QgZmlsZVBhdGggPSB5aWVsZCBpb1V0aWwudHJ5R2V0RXhlY3V0YWJsZVBhdGgodG9vbCwgZXh0ZW5zaW9ucyk7XG4gICAgICAgICAgICBpZiAoZmlsZVBhdGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW2ZpbGVQYXRoXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiBhbnkgcGF0aCBzZXBhcmF0b3JzLCByZXR1cm4gZW1wdHlcbiAgICAgICAgaWYgKHRvb2wuaW5jbHVkZXMocGF0aC5zZXApKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgLy8gYnVpbGQgdGhlIGxpc3Qgb2YgZGlyZWN0b3JpZXNcbiAgICAgICAgLy9cbiAgICAgICAgLy8gTm90ZSwgdGVjaG5pY2FsbHkgXCJ3aGVyZVwiIGNoZWNrcyB0aGUgY3VycmVudCBkaXJlY3Rvcnkgb24gV2luZG93cy4gRnJvbSBhIHRvb2xraXQgcGVyc3BlY3RpdmUsXG4gICAgICAgIC8vIGl0IGZlZWxzIGxpa2Ugd2Ugc2hvdWxkIG5vdCBkbyB0aGlzLiBDaGVja2luZyB0aGUgY3VycmVudCBkaXJlY3Rvcnkgc2VlbXMgbGlrZSBtb3JlIG9mIGEgdXNlXG4gICAgICAgIC8vIGNhc2Ugb2YgYSBzaGVsbCwgYW5kIHRoZSB3aGljaCgpIGZ1bmN0aW9uIGV4cG9zZWQgYnkgdGhlIHRvb2xraXQgc2hvdWxkIHN0cml2ZSBmb3IgY29uc2lzdGVuY3lcbiAgICAgICAgLy8gYWNyb3NzIHBsYXRmb3Jtcy5cbiAgICAgICAgY29uc3QgZGlyZWN0b3JpZXMgPSBbXTtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52LlBBVEgpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcCBvZiBwcm9jZXNzLmVudi5QQVRILnNwbGl0KHBhdGguZGVsaW1pdGVyKSkge1xuICAgICAgICAgICAgICAgIGlmIChwKSB7XG4gICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yaWVzLnB1c2gocCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGZpbmQgYWxsIG1hdGNoZXNcbiAgICAgICAgY29uc3QgbWF0Y2hlcyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGRpcmVjdG9yeSBvZiBkaXJlY3Rvcmllcykge1xuICAgICAgICAgICAgY29uc3QgZmlsZVBhdGggPSB5aWVsZCBpb1V0aWwudHJ5R2V0RXhlY3V0YWJsZVBhdGgocGF0aC5qb2luKGRpcmVjdG9yeSwgdG9vbCksIGV4dGVuc2lvbnMpO1xuICAgICAgICAgICAgaWYgKGZpbGVQYXRoKSB7XG4gICAgICAgICAgICAgICAgbWF0Y2hlcy5wdXNoKGZpbGVQYXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWF0Y2hlcztcbiAgICB9KTtcbn1cbmV4cG9ydHMuZmluZEluUGF0aCA9IGZpbmRJblBhdGg7XG5mdW5jdGlvbiByZWFkQ29weU9wdGlvbnMob3B0aW9ucykge1xuICAgIGNvbnN0IGZvcmNlID0gb3B0aW9ucy5mb3JjZSA9PSBudWxsID8gdHJ1ZSA6IG9wdGlvbnMuZm9yY2U7XG4gICAgY29uc3QgcmVjdXJzaXZlID0gQm9vbGVhbihvcHRpb25zLnJlY3Vyc2l2ZSk7XG4gICAgY29uc3QgY29weVNvdXJjZURpcmVjdG9yeSA9IG9wdGlvbnMuY29weVNvdXJjZURpcmVjdG9yeSA9PSBudWxsXG4gICAgICAgID8gdHJ1ZVxuICAgICAgICA6IEJvb2xlYW4ob3B0aW9ucy5jb3B5U291cmNlRGlyZWN0b3J5KTtcbiAgICByZXR1cm4geyBmb3JjZSwgcmVjdXJzaXZlLCBjb3B5U291cmNlRGlyZWN0b3J5IH07XG59XG5mdW5jdGlvbiBjcERpclJlY3Vyc2l2ZShzb3VyY2VEaXIsIGRlc3REaXIsIGN1cnJlbnREZXB0aCwgZm9yY2UpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAvLyBFbnN1cmUgdGhlcmUgaXMgbm90IGEgcnVuIGF3YXkgcmVjdXJzaXZlIGNvcHlcbiAgICAgICAgaWYgKGN1cnJlbnREZXB0aCA+PSAyNTUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGN1cnJlbnREZXB0aCsrO1xuICAgICAgICB5aWVsZCBta2RpclAoZGVzdERpcik7XG4gICAgICAgIGNvbnN0IGZpbGVzID0geWllbGQgaW9VdGlsLnJlYWRkaXIoc291cmNlRGlyKTtcbiAgICAgICAgZm9yIChjb25zdCBmaWxlTmFtZSBvZiBmaWxlcykge1xuICAgICAgICAgICAgY29uc3Qgc3JjRmlsZSA9IGAke3NvdXJjZURpcn0vJHtmaWxlTmFtZX1gO1xuICAgICAgICAgICAgY29uc3QgZGVzdEZpbGUgPSBgJHtkZXN0RGlyfS8ke2ZpbGVOYW1lfWA7XG4gICAgICAgICAgICBjb25zdCBzcmNGaWxlU3RhdCA9IHlpZWxkIGlvVXRpbC5sc3RhdChzcmNGaWxlKTtcbiAgICAgICAgICAgIGlmIChzcmNGaWxlU3RhdC5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgICAgICAgICAgLy8gUmVjdXJzZVxuICAgICAgICAgICAgICAgIHlpZWxkIGNwRGlyUmVjdXJzaXZlKHNyY0ZpbGUsIGRlc3RGaWxlLCBjdXJyZW50RGVwdGgsIGZvcmNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHlpZWxkIGNvcHlGaWxlKHNyY0ZpbGUsIGRlc3RGaWxlLCBmb3JjZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2hhbmdlIHRoZSBtb2RlIGZvciB0aGUgbmV3bHkgY3JlYXRlZCBkaXJlY3RvcnlcbiAgICAgICAgeWllbGQgaW9VdGlsLmNobW9kKGRlc3REaXIsICh5aWVsZCBpb1V0aWwuc3RhdChzb3VyY2VEaXIpKS5tb2RlKTtcbiAgICB9KTtcbn1cbi8vIEJ1ZmZlcmVkIGZpbGUgY29weVxuZnVuY3Rpb24gY29weUZpbGUoc3JjRmlsZSwgZGVzdEZpbGUsIGZvcmNlKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgaWYgKCh5aWVsZCBpb1V0aWwubHN0YXQoc3JjRmlsZSkpLmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICAgICAgICAgIC8vIHVubGluay9yZS1saW5rIGl0XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHlpZWxkIGlvVXRpbC5sc3RhdChkZXN0RmlsZSk7XG4gICAgICAgICAgICAgICAgeWllbGQgaW9VdGlsLnVubGluayhkZXN0RmlsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIC8vIFRyeSB0byBvdmVycmlkZSBmaWxlIHBlcm1pc3Npb25cbiAgICAgICAgICAgICAgICBpZiAoZS5jb2RlID09PSAnRVBFUk0nKSB7XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIGlvVXRpbC5jaG1vZChkZXN0RmlsZSwgJzA2NjYnKTtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgaW9VdGlsLnVubGluayhkZXN0RmlsZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIG90aGVyIGVycm9ycyA9IGl0IGRvZXNuJ3QgZXhpc3QsIG5vIHdvcmsgdG8gZG9cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIENvcHkgb3ZlciBzeW1saW5rXG4gICAgICAgICAgICBjb25zdCBzeW1saW5rRnVsbCA9IHlpZWxkIGlvVXRpbC5yZWFkbGluayhzcmNGaWxlKTtcbiAgICAgICAgICAgIHlpZWxkIGlvVXRpbC5zeW1saW5rKHN5bWxpbmtGdWxsLCBkZXN0RmlsZSwgaW9VdGlsLklTX1dJTkRPV1MgPyAnanVuY3Rpb24nIDogbnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoISh5aWVsZCBpb1V0aWwuZXhpc3RzKGRlc3RGaWxlKSkgfHwgZm9yY2UpIHtcbiAgICAgICAgICAgIHlpZWxkIGlvVXRpbC5jb3B5RmlsZShzcmNGaWxlLCBkZXN0RmlsZSk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlvLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfSk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmFyZ1N0cmluZ1RvQXJyYXkgPSBleHBvcnRzLlRvb2xSdW5uZXIgPSB2b2lkIDA7XG5jb25zdCBvcyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwib3NcIikpO1xuY29uc3QgZXZlbnRzID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJldmVudHNcIikpO1xuY29uc3QgY2hpbGQgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcImNoaWxkX3Byb2Nlc3NcIikpO1xuY29uc3QgcGF0aCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwicGF0aFwiKSk7XG5jb25zdCBpbyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiQGFjdGlvbnMvaW9cIikpO1xuY29uc3QgaW9VdGlsID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJAYWN0aW9ucy9pby9saWIvaW8tdXRpbFwiKSk7XG5jb25zdCB0aW1lcnNfMSA9IHJlcXVpcmUoXCJ0aW1lcnNcIik7XG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvdW5ib3VuZC1tZXRob2QgKi9cbmNvbnN0IElTX1dJTkRPV1MgPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInO1xuLypcbiAqIENsYXNzIGZvciBydW5uaW5nIGNvbW1hbmQgbGluZSB0b29scy4gSGFuZGxlcyBxdW90aW5nIGFuZCBhcmcgcGFyc2luZyBpbiBhIHBsYXRmb3JtIGFnbm9zdGljIHdheS5cbiAqL1xuY2xhc3MgVG9vbFJ1bm5lciBleHRlbmRzIGV2ZW50cy5FdmVudEVtaXR0ZXIge1xuICAgIGNvbnN0cnVjdG9yKHRvb2xQYXRoLCBhcmdzLCBvcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIGlmICghdG9vbFBhdGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhcmFtZXRlciAndG9vbFBhdGgnIGNhbm5vdCBiZSBudWxsIG9yIGVtcHR5LlwiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRvb2xQYXRoID0gdG9vbFBhdGg7XG4gICAgICAgIHRoaXMuYXJncyA9IGFyZ3MgfHwgW107XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgfVxuICAgIF9kZWJ1ZyhtZXNzYWdlKSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMubGlzdGVuZXJzICYmIHRoaXMub3B0aW9ucy5saXN0ZW5lcnMuZGVidWcpIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5saXN0ZW5lcnMuZGVidWcobWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX2dldENvbW1hbmRTdHJpbmcob3B0aW9ucywgbm9QcmVmaXgpIHtcbiAgICAgICAgY29uc3QgdG9vbFBhdGggPSB0aGlzLl9nZXRTcGF3bkZpbGVOYW1lKCk7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSB0aGlzLl9nZXRTcGF3bkFyZ3Mob3B0aW9ucyk7XG4gICAgICAgIGxldCBjbWQgPSBub1ByZWZpeCA/ICcnIDogJ1tjb21tYW5kXSc7IC8vIG9taXQgcHJlZml4IHdoZW4gcGlwZWQgdG8gYSBzZWNvbmQgdG9vbFxuICAgICAgICBpZiAoSVNfV0lORE9XUykge1xuICAgICAgICAgICAgLy8gV2luZG93cyArIGNtZCBmaWxlXG4gICAgICAgICAgICBpZiAodGhpcy5faXNDbWRGaWxlKCkpIHtcbiAgICAgICAgICAgICAgICBjbWQgKz0gdG9vbFBhdGg7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBhIG9mIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgY21kICs9IGAgJHthfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gV2luZG93cyArIHZlcmJhdGltXG4gICAgICAgICAgICBlbHNlIGlmIChvcHRpb25zLndpbmRvd3NWZXJiYXRpbUFyZ3VtZW50cykge1xuICAgICAgICAgICAgICAgIGNtZCArPSBgXCIke3Rvb2xQYXRofVwiYDtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGEgb2YgYXJncykge1xuICAgICAgICAgICAgICAgICAgICBjbWQgKz0gYCAke2F9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBXaW5kb3dzIChyZWd1bGFyKVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY21kICs9IHRoaXMuX3dpbmRvd3NRdW90ZUNtZEFyZyh0b29sUGF0aCk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBhIG9mIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgY21kICs9IGAgJHt0aGlzLl93aW5kb3dzUXVvdGVDbWRBcmcoYSl9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBPU1gvTGludXggLSB0aGlzIGNhbiBsaWtlbHkgYmUgaW1wcm92ZWQgd2l0aCBzb21lIGZvcm0gb2YgcXVvdGluZy5cbiAgICAgICAgICAgIC8vIGNyZWF0aW5nIHByb2Nlc3NlcyBvbiBVbml4IGlzIGZ1bmRhbWVudGFsbHkgZGlmZmVyZW50IHRoYW4gV2luZG93cy5cbiAgICAgICAgICAgIC8vIG9uIFVuaXgsIGV4ZWN2cCgpIHRha2VzIGFuIGFyZyBhcnJheS5cbiAgICAgICAgICAgIGNtZCArPSB0b29sUGF0aDtcbiAgICAgICAgICAgIGZvciAoY29uc3QgYSBvZiBhcmdzKSB7XG4gICAgICAgICAgICAgICAgY21kICs9IGAgJHthfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNtZDtcbiAgICB9XG4gICAgX3Byb2Nlc3NMaW5lQnVmZmVyKGRhdGEsIHN0ckJ1ZmZlciwgb25MaW5lKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsZXQgcyA9IHN0ckJ1ZmZlciArIGRhdGEudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIGxldCBuID0gcy5pbmRleE9mKG9zLkVPTCk7XG4gICAgICAgICAgICB3aGlsZSAobiA+IC0xKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGluZSA9IHMuc3Vic3RyaW5nKDAsIG4pO1xuICAgICAgICAgICAgICAgIG9uTGluZShsaW5lKTtcbiAgICAgICAgICAgICAgICAvLyB0aGUgcmVzdCBvZiB0aGUgc3RyaW5nIC4uLlxuICAgICAgICAgICAgICAgIHMgPSBzLnN1YnN0cmluZyhuICsgb3MuRU9MLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgbiA9IHMuaW5kZXhPZihvcy5FT0wpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHM7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgLy8gc3RyZWFtaW5nIGxpbmVzIHRvIGNvbnNvbGUgaXMgYmVzdCBlZmZvcnQuICBEb24ndCBmYWlsIGEgYnVpbGQuXG4gICAgICAgICAgICB0aGlzLl9kZWJ1ZyhgZXJyb3IgcHJvY2Vzc2luZyBsaW5lLiBGYWlsZWQgd2l0aCBlcnJvciAke2Vycn1gKTtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgICBfZ2V0U3Bhd25GaWxlTmFtZSgpIHtcbiAgICAgICAgaWYgKElTX1dJTkRPV1MpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9pc0NtZEZpbGUoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcm9jZXNzLmVudlsnQ09NU1BFQyddIHx8ICdjbWQuZXhlJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy50b29sUGF0aDtcbiAgICB9XG4gICAgX2dldFNwYXduQXJncyhvcHRpb25zKSB7XG4gICAgICAgIGlmIChJU19XSU5ET1dTKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5faXNDbWRGaWxlKCkpIHtcbiAgICAgICAgICAgICAgICBsZXQgYXJnbGluZSA9IGAvRCAvUyAvQyBcIiR7dGhpcy5fd2luZG93c1F1b3RlQ21kQXJnKHRoaXMudG9vbFBhdGgpfWA7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBhIG9mIHRoaXMuYXJncykge1xuICAgICAgICAgICAgICAgICAgICBhcmdsaW5lICs9ICcgJztcbiAgICAgICAgICAgICAgICAgICAgYXJnbGluZSArPSBvcHRpb25zLndpbmRvd3NWZXJiYXRpbUFyZ3VtZW50c1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBhXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuX3dpbmRvd3NRdW90ZUNtZEFyZyhhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXJnbGluZSArPSAnXCInO1xuICAgICAgICAgICAgICAgIHJldHVybiBbYXJnbGluZV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuYXJncztcbiAgICB9XG4gICAgX2VuZHNXaXRoKHN0ciwgZW5kKSB7XG4gICAgICAgIHJldHVybiBzdHIuZW5kc1dpdGgoZW5kKTtcbiAgICB9XG4gICAgX2lzQ21kRmlsZSgpIHtcbiAgICAgICAgY29uc3QgdXBwZXJUb29sUGF0aCA9IHRoaXMudG9vbFBhdGgudG9VcHBlckNhc2UoKTtcbiAgICAgICAgcmV0dXJuICh0aGlzLl9lbmRzV2l0aCh1cHBlclRvb2xQYXRoLCAnLkNNRCcpIHx8XG4gICAgICAgICAgICB0aGlzLl9lbmRzV2l0aCh1cHBlclRvb2xQYXRoLCAnLkJBVCcpKTtcbiAgICB9XG4gICAgX3dpbmRvd3NRdW90ZUNtZEFyZyhhcmcpIHtcbiAgICAgICAgLy8gZm9yIC5leGUsIGFwcGx5IHRoZSBub3JtYWwgcXVvdGluZyBydWxlcyB0aGF0IGxpYnV2IGFwcGxpZXNcbiAgICAgICAgaWYgKCF0aGlzLl9pc0NtZEZpbGUoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3V2UXVvdGVDbWRBcmcoYXJnKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBvdGhlcndpc2UgYXBwbHkgcXVvdGluZyBydWxlcyBzcGVjaWZpYyB0byB0aGUgY21kLmV4ZSBjb21tYW5kIGxpbmUgcGFyc2VyLlxuICAgICAgICAvLyB0aGUgbGlidXYgcnVsZXMgYXJlIGdlbmVyaWMgYW5kIGFyZSBub3QgZGVzaWduZWQgc3BlY2lmaWNhbGx5IGZvciBjbWQuZXhlXG4gICAgICAgIC8vIGNvbW1hbmQgbGluZSBwYXJzZXIuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIGZvciBhIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHRoZSBjbWQuZXhlIGNvbW1hbmQgbGluZSBwYXJzZXIsIHJlZmVyIHRvXG4gICAgICAgIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNDA5NDY5OS9ob3ctZG9lcy10aGUtd2luZG93cy1jb21tYW5kLWludGVycHJldGVyLWNtZC1leGUtcGFyc2Utc2NyaXB0cy83OTcwOTEyIzc5NzA5MTJcbiAgICAgICAgLy8gbmVlZCBxdW90ZXMgZm9yIGVtcHR5IGFyZ1xuICAgICAgICBpZiAoIWFyZykge1xuICAgICAgICAgICAgcmV0dXJuICdcIlwiJztcbiAgICAgICAgfVxuICAgICAgICAvLyBkZXRlcm1pbmUgd2hldGhlciB0aGUgYXJnIG5lZWRzIHRvIGJlIHF1b3RlZFxuICAgICAgICBjb25zdCBjbWRTcGVjaWFsQ2hhcnMgPSBbXG4gICAgICAgICAgICAnICcsXG4gICAgICAgICAgICAnXFx0JyxcbiAgICAgICAgICAgICcmJyxcbiAgICAgICAgICAgICcoJyxcbiAgICAgICAgICAgICcpJyxcbiAgICAgICAgICAgICdbJyxcbiAgICAgICAgICAgICddJyxcbiAgICAgICAgICAgICd7JyxcbiAgICAgICAgICAgICd9JyxcbiAgICAgICAgICAgICdeJyxcbiAgICAgICAgICAgICc9JyxcbiAgICAgICAgICAgICc7JyxcbiAgICAgICAgICAgICchJyxcbiAgICAgICAgICAgIFwiJ1wiLFxuICAgICAgICAgICAgJysnLFxuICAgICAgICAgICAgJywnLFxuICAgICAgICAgICAgJ2AnLFxuICAgICAgICAgICAgJ34nLFxuICAgICAgICAgICAgJ3wnLFxuICAgICAgICAgICAgJzwnLFxuICAgICAgICAgICAgJz4nLFxuICAgICAgICAgICAgJ1wiJ1xuICAgICAgICBdO1xuICAgICAgICBsZXQgbmVlZHNRdW90ZXMgPSBmYWxzZTtcbiAgICAgICAgZm9yIChjb25zdCBjaGFyIG9mIGFyZykge1xuICAgICAgICAgICAgaWYgKGNtZFNwZWNpYWxDaGFycy5zb21lKHggPT4geCA9PT0gY2hhcikpIHtcbiAgICAgICAgICAgICAgICBuZWVkc1F1b3RlcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gc2hvcnQtY2lyY3VpdCBpZiBxdW90ZXMgbm90IG5lZWRlZFxuICAgICAgICBpZiAoIW5lZWRzUXVvdGVzKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJnO1xuICAgICAgICB9XG4gICAgICAgIC8vIHRoZSBmb2xsb3dpbmcgcXVvdGluZyBydWxlcyBhcmUgdmVyeSBzaW1pbGFyIHRvIHRoZSBydWxlcyB0aGF0IGJ5IGxpYnV2IGFwcGxpZXMuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIDEpIHdyYXAgdGhlIHN0cmluZyBpbiBxdW90ZXNcbiAgICAgICAgLy9cbiAgICAgICAgLy8gMikgZG91YmxlLXVwIHF1b3RlcyAtIGkuZS4gXCIgPT4gXCJcIlxuICAgICAgICAvL1xuICAgICAgICAvLyAgICB0aGlzIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBsaWJ1diBxdW90aW5nIHJ1bGVzLiBsaWJ1diByZXBsYWNlcyBcIiB3aXRoIFxcXCIsIHdoaWNoIHVuZm9ydHVuYXRlbHlcbiAgICAgICAgLy8gICAgZG9lc24ndCB3b3JrIHdlbGwgd2l0aCBhIGNtZC5leGUgY29tbWFuZCBsaW5lLlxuICAgICAgICAvL1xuICAgICAgICAvLyAgICBub3RlLCByZXBsYWNpbmcgXCIgd2l0aCBcIlwiIGFsc28gd29ya3Mgd2VsbCBpZiB0aGUgYXJnIGlzIHBhc3NlZCB0byBhIGRvd25zdHJlYW0gLk5FVCBjb25zb2xlIGFwcC5cbiAgICAgICAgLy8gICAgZm9yIGV4YW1wbGUsIHRoZSBjb21tYW5kIGxpbmU6XG4gICAgICAgIC8vICAgICAgICAgIGZvby5leGUgXCJteWFyZzpcIlwibXkgdmFsXCJcIlwiXG4gICAgICAgIC8vICAgIGlzIHBhcnNlZCBieSBhIC5ORVQgY29uc29sZSBhcHAgaW50byBhbiBhcmcgYXJyYXk6XG4gICAgICAgIC8vICAgICAgICAgIFsgXCJteWFyZzpcXFwibXkgdmFsXFxcIlwiIF1cbiAgICAgICAgLy8gICAgd2hpY2ggaXMgdGhlIHNhbWUgZW5kIHJlc3VsdCB3aGVuIGFwcGx5aW5nIGxpYnV2IHF1b3RpbmcgcnVsZXMuIGFsdGhvdWdoIHRoZSBhY3R1YWxcbiAgICAgICAgLy8gICAgY29tbWFuZCBsaW5lIGZyb20gbGlidXYgcXVvdGluZyBydWxlcyB3b3VsZCBsb29rIGxpa2U6XG4gICAgICAgIC8vICAgICAgICAgIGZvby5leGUgXCJteWFyZzpcXFwibXkgdmFsXFxcIlwiXG4gICAgICAgIC8vXG4gICAgICAgIC8vIDMpIGRvdWJsZS11cCBzbGFzaGVzIHRoYXQgcHJlY2VkZSBhIHF1b3RlLFxuICAgICAgICAvLyAgICBlLmcuICBoZWxsbyBcXHdvcmxkICAgID0+IFwiaGVsbG8gXFx3b3JsZFwiXG4gICAgICAgIC8vICAgICAgICAgIGhlbGxvXFxcIndvcmxkICAgID0+IFwiaGVsbG9cXFxcXCJcIndvcmxkXCJcbiAgICAgICAgLy8gICAgICAgICAgaGVsbG9cXFxcXCJ3b3JsZCAgID0+IFwiaGVsbG9cXFxcXFxcXFwiXCJ3b3JsZFwiXG4gICAgICAgIC8vICAgICAgICAgIGhlbGxvIHdvcmxkXFwgICAgPT4gXCJoZWxsbyB3b3JsZFxcXFxcIlxuICAgICAgICAvL1xuICAgICAgICAvLyAgICB0ZWNobmljYWxseSB0aGlzIGlzIG5vdCByZXF1aXJlZCBmb3IgYSBjbWQuZXhlIGNvbW1hbmQgbGluZSwgb3IgdGhlIGJhdGNoIGFyZ3VtZW50IHBhcnNlci5cbiAgICAgICAgLy8gICAgdGhlIHJlYXNvbnMgZm9yIGluY2x1ZGluZyB0aGlzIGFzIGEgLmNtZCBxdW90aW5nIHJ1bGUgYXJlOlxuICAgICAgICAvL1xuICAgICAgICAvLyAgICBhKSB0aGlzIGlzIG9wdGltaXplZCBmb3IgdGhlIHNjZW5hcmlvIHdoZXJlIHRoZSBhcmd1bWVudCBpcyBwYXNzZWQgZnJvbSB0aGUgLmNtZCBmaWxlIHRvIGFuXG4gICAgICAgIC8vICAgICAgIGV4dGVybmFsIHByb2dyYW0uIG1hbnkgcHJvZ3JhbXMgKGUuZy4gLk5FVCBjb25zb2xlIGFwcHMpIHJlbHkgb24gdGhlIHNsYXNoLWRvdWJsaW5nIHJ1bGUuXG4gICAgICAgIC8vXG4gICAgICAgIC8vICAgIGIpIGl0J3Mgd2hhdCB3ZSd2ZSBiZWVuIGRvaW5nIHByZXZpb3VzbHkgKGJ5IGRlZmVycmluZyB0byBub2RlIGRlZmF1bHQgYmVoYXZpb3IpIGFuZCB3ZVxuICAgICAgICAvLyAgICAgICBoYXZlbid0IGhlYXJkIGFueSBjb21wbGFpbnRzIGFib3V0IHRoYXQgYXNwZWN0LlxuICAgICAgICAvL1xuICAgICAgICAvLyBub3RlLCBhIHdlYWtuZXNzIG9mIHRoZSBxdW90aW5nIHJ1bGVzIGNob3NlbiBoZXJlLCBpcyB0aGF0ICUgaXMgbm90IGVzY2FwZWQuIGluIGZhY3QsICUgY2Fubm90IGJlXG4gICAgICAgIC8vIGVzY2FwZWQgd2hlbiB1c2VkIG9uIHRoZSBjb21tYW5kIGxpbmUgZGlyZWN0bHkgLSBldmVuIHRob3VnaCB3aXRoaW4gYSAuY21kIGZpbGUgJSBjYW4gYmUgZXNjYXBlZFxuICAgICAgICAvLyBieSB1c2luZyAlJS5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gdGhlIHNhdmluZyBncmFjZSBpcywgb24gdGhlIGNvbW1hbmQgbGluZSwgJXZhciUgaXMgbGVmdCBhcy1pcyBpZiB2YXIgaXMgbm90IGRlZmluZWQuIHRoaXMgY29udHJhc3RzXG4gICAgICAgIC8vIHRoZSBsaW5lIHBhcnNpbmcgcnVsZXMgd2l0aGluIGEgLmNtZCBmaWxlLCB3aGVyZSBpZiB2YXIgaXMgbm90IGRlZmluZWQgaXQgaXMgcmVwbGFjZWQgd2l0aCBub3RoaW5nLlxuICAgICAgICAvL1xuICAgICAgICAvLyBvbmUgb3B0aW9uIHRoYXQgd2FzIGV4cGxvcmVkIHdhcyByZXBsYWNpbmcgJSB3aXRoIF4lIC0gaS5lLiAldmFyJSA9PiBeJXZhcl4lLiB0aGlzIGhhY2sgd291bGRcbiAgICAgICAgLy8gb2Z0ZW4gd29yaywgc2luY2UgaXQgaXMgdW5saWtlbHkgdGhhdCB2YXJeIHdvdWxkIGV4aXN0LCBhbmQgdGhlIF4gY2hhcmFjdGVyIGlzIHJlbW92ZWQgd2hlbiB0aGVcbiAgICAgICAgLy8gdmFyaWFibGUgaXMgdXNlZC4gdGhlIHByb2JsZW0sIGhvd2V2ZXIsIGlzIHRoYXQgXiBpcyBub3QgcmVtb3ZlZCB3aGVuICUqIGlzIHVzZWQgdG8gcGFzcyB0aGUgYXJnc1xuICAgICAgICAvLyB0byBhbiBleHRlcm5hbCBwcm9ncmFtLlxuICAgICAgICAvL1xuICAgICAgICAvLyBhbiB1bmV4cGxvcmVkIHBvdGVudGlhbCBzb2x1dGlvbiBmb3IgdGhlICUgZXNjYXBpbmcgcHJvYmxlbSwgaXMgdG8gY3JlYXRlIGEgd3JhcHBlciAuY21kIGZpbGUuXG4gICAgICAgIC8vICUgY2FuIGJlIGVzY2FwZWQgd2l0aGluIGEgLmNtZCBmaWxlLlxuICAgICAgICBsZXQgcmV2ZXJzZSA9ICdcIic7XG4gICAgICAgIGxldCBxdW90ZUhpdCA9IHRydWU7XG4gICAgICAgIGZvciAobGV0IGkgPSBhcmcubGVuZ3RoOyBpID4gMDsgaS0tKSB7XG4gICAgICAgICAgICAvLyB3YWxrIHRoZSBzdHJpbmcgaW4gcmV2ZXJzZVxuICAgICAgICAgICAgcmV2ZXJzZSArPSBhcmdbaSAtIDFdO1xuICAgICAgICAgICAgaWYgKHF1b3RlSGl0ICYmIGFyZ1tpIC0gMV0gPT09ICdcXFxcJykge1xuICAgICAgICAgICAgICAgIHJldmVyc2UgKz0gJ1xcXFwnOyAvLyBkb3VibGUgdGhlIHNsYXNoXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChhcmdbaSAtIDFdID09PSAnXCInKSB7XG4gICAgICAgICAgICAgICAgcXVvdGVIaXQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldmVyc2UgKz0gJ1wiJzsgLy8gZG91YmxlIHRoZSBxdW90ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcXVvdGVIaXQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXZlcnNlICs9ICdcIic7XG4gICAgICAgIHJldHVybiByZXZlcnNlXG4gICAgICAgICAgICAuc3BsaXQoJycpXG4gICAgICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgICAgICAuam9pbignJyk7XG4gICAgfVxuICAgIF91dlF1b3RlQ21kQXJnKGFyZykge1xuICAgICAgICAvLyBUb29sIHJ1bm5lciB3cmFwcyBjaGlsZF9wcm9jZXNzLnNwYXduKCkgYW5kIG5lZWRzIHRvIGFwcGx5IHRoZSBzYW1lIHF1b3RpbmcgYXNcbiAgICAgICAgLy8gTm9kZSBpbiBjZXJ0YWluIGNhc2VzIHdoZXJlIHRoZSB1bmRvY3VtZW50ZWQgc3Bhd24gb3B0aW9uIHdpbmRvd3NWZXJiYXRpbUFyZ3VtZW50c1xuICAgICAgICAvLyBpcyB1c2VkLlxuICAgICAgICAvL1xuICAgICAgICAvLyBTaW5jZSB0aGlzIGZ1bmN0aW9uIGlzIGEgcG9ydCBvZiBxdW90ZV9jbWRfYXJnIGZyb20gTm9kZSA0LnggKHRlY2huaWNhbGx5LCBsaWIgVVYsXG4gICAgICAgIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvYmxvYi92NC54L2RlcHMvdXYvc3JjL3dpbi9wcm9jZXNzLmMgZm9yIGRldGFpbHMpLFxuICAgICAgICAvLyBwYXN0aW5nIGNvcHlyaWdodCBub3RpY2UgZnJvbSBOb2RlIHdpdGhpbiB0aGlzIGZ1bmN0aW9uOlxuICAgICAgICAvL1xuICAgICAgICAvLyAgICAgIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICAgICAgICAvL1xuICAgICAgICAvLyAgICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiAgICAgICAgLy8gICAgICBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0b1xuICAgICAgICAvLyAgICAgIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlXG4gICAgICAgIC8vICAgICAgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yXG4gICAgICAgIC8vICAgICAgc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiAgICAgICAgLy8gICAgICBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICAgICAgICAvL1xuICAgICAgICAvLyAgICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4gICAgICAgIC8vICAgICAgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gICAgICAgIC8vXG4gICAgICAgIC8vICAgICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICAgICAgICAvLyAgICAgIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICAgICAgICAvLyAgICAgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICAgICAgICAvLyAgICAgIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAgICAgICAgLy8gICAgICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lOR1xuICAgICAgICAvLyAgICAgIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1NcbiAgICAgICAgLy8gICAgICBJTiBUSEUgU09GVFdBUkUuXG4gICAgICAgIGlmICghYXJnKSB7XG4gICAgICAgICAgICAvLyBOZWVkIGRvdWJsZSBxdW90YXRpb24gZm9yIGVtcHR5IGFyZ3VtZW50XG4gICAgICAgICAgICByZXR1cm4gJ1wiXCInO1xuICAgICAgICB9XG4gICAgICAgIGlmICghYXJnLmluY2x1ZGVzKCcgJykgJiYgIWFyZy5pbmNsdWRlcygnXFx0JykgJiYgIWFyZy5pbmNsdWRlcygnXCInKSkge1xuICAgICAgICAgICAgLy8gTm8gcXVvdGF0aW9uIG5lZWRlZFxuICAgICAgICAgICAgcmV0dXJuIGFyZztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWFyZy5pbmNsdWRlcygnXCInKSAmJiAhYXJnLmluY2x1ZGVzKCdcXFxcJykpIHtcbiAgICAgICAgICAgIC8vIE5vIGVtYmVkZGVkIGRvdWJsZSBxdW90ZXMgb3IgYmFja3NsYXNoZXMsIHNvIEkgY2FuIGp1c3Qgd3JhcFxuICAgICAgICAgICAgLy8gcXVvdGUgbWFya3MgYXJvdW5kIHRoZSB3aG9sZSB0aGluZy5cbiAgICAgICAgICAgIHJldHVybiBgXCIke2FyZ31cImA7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRXhwZWN0ZWQgaW5wdXQvb3V0cHV0OlxuICAgICAgICAvLyAgIGlucHV0IDogaGVsbG9cIndvcmxkXG4gICAgICAgIC8vICAgb3V0cHV0OiBcImhlbGxvXFxcIndvcmxkXCJcbiAgICAgICAgLy8gICBpbnB1dCA6IGhlbGxvXCJcIndvcmxkXG4gICAgICAgIC8vICAgb3V0cHV0OiBcImhlbGxvXFxcIlxcXCJ3b3JsZFwiXG4gICAgICAgIC8vICAgaW5wdXQgOiBoZWxsb1xcd29ybGRcbiAgICAgICAgLy8gICBvdXRwdXQ6IGhlbGxvXFx3b3JsZFxuICAgICAgICAvLyAgIGlucHV0IDogaGVsbG9cXFxcd29ybGRcbiAgICAgICAgLy8gICBvdXRwdXQ6IGhlbGxvXFxcXHdvcmxkXG4gICAgICAgIC8vICAgaW5wdXQgOiBoZWxsb1xcXCJ3b3JsZFxuICAgICAgICAvLyAgIG91dHB1dDogXCJoZWxsb1xcXFxcXFwid29ybGRcIlxuICAgICAgICAvLyAgIGlucHV0IDogaGVsbG9cXFxcXCJ3b3JsZFxuICAgICAgICAvLyAgIG91dHB1dDogXCJoZWxsb1xcXFxcXFxcXFxcIndvcmxkXCJcbiAgICAgICAgLy8gICBpbnB1dCA6IGhlbGxvIHdvcmxkXFxcbiAgICAgICAgLy8gICBvdXRwdXQ6IFwiaGVsbG8gd29ybGRcXFxcXCIgLSBub3RlIHRoZSBjb21tZW50IGluIGxpYnV2IGFjdHVhbGx5IHJlYWRzIFwiaGVsbG8gd29ybGRcXFwiXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXQgaXQgYXBwZWFycyB0aGUgY29tbWVudCBpcyB3cm9uZywgaXQgc2hvdWxkIGJlIFwiaGVsbG8gd29ybGRcXFxcXCJcbiAgICAgICAgbGV0IHJldmVyc2UgPSAnXCInO1xuICAgICAgICBsZXQgcXVvdGVIaXQgPSB0cnVlO1xuICAgICAgICBmb3IgKGxldCBpID0gYXJnLmxlbmd0aDsgaSA+IDA7IGktLSkge1xuICAgICAgICAgICAgLy8gd2FsayB0aGUgc3RyaW5nIGluIHJldmVyc2VcbiAgICAgICAgICAgIHJldmVyc2UgKz0gYXJnW2kgLSAxXTtcbiAgICAgICAgICAgIGlmIChxdW90ZUhpdCAmJiBhcmdbaSAtIDFdID09PSAnXFxcXCcpIHtcbiAgICAgICAgICAgICAgICByZXZlcnNlICs9ICdcXFxcJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGFyZ1tpIC0gMV0gPT09ICdcIicpIHtcbiAgICAgICAgICAgICAgICBxdW90ZUhpdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV2ZXJzZSArPSAnXFxcXCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBxdW90ZUhpdCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldmVyc2UgKz0gJ1wiJztcbiAgICAgICAgcmV0dXJuIHJldmVyc2VcbiAgICAgICAgICAgIC5zcGxpdCgnJylcbiAgICAgICAgICAgIC5yZXZlcnNlKClcbiAgICAgICAgICAgIC5qb2luKCcnKTtcbiAgICB9XG4gICAgX2Nsb25lRXhlY09wdGlvbnMob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgICAgICAgY3dkOiBvcHRpb25zLmN3ZCB8fCBwcm9jZXNzLmN3ZCgpLFxuICAgICAgICAgICAgZW52OiBvcHRpb25zLmVudiB8fCBwcm9jZXNzLmVudixcbiAgICAgICAgICAgIHNpbGVudDogb3B0aW9ucy5zaWxlbnQgfHwgZmFsc2UsXG4gICAgICAgICAgICB3aW5kb3dzVmVyYmF0aW1Bcmd1bWVudHM6IG9wdGlvbnMud2luZG93c1ZlcmJhdGltQXJndW1lbnRzIHx8IGZhbHNlLFxuICAgICAgICAgICAgZmFpbE9uU3RkRXJyOiBvcHRpb25zLmZhaWxPblN0ZEVyciB8fCBmYWxzZSxcbiAgICAgICAgICAgIGlnbm9yZVJldHVybkNvZGU6IG9wdGlvbnMuaWdub3JlUmV0dXJuQ29kZSB8fCBmYWxzZSxcbiAgICAgICAgICAgIGRlbGF5OiBvcHRpb25zLmRlbGF5IHx8IDEwMDAwXG4gICAgICAgIH07XG4gICAgICAgIHJlc3VsdC5vdXRTdHJlYW0gPSBvcHRpb25zLm91dFN0cmVhbSB8fCBwcm9jZXNzLnN0ZG91dDtcbiAgICAgICAgcmVzdWx0LmVyclN0cmVhbSA9IG9wdGlvbnMuZXJyU3RyZWFtIHx8IHByb2Nlc3Muc3RkZXJyO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBfZ2V0U3Bhd25PcHRpb25zKG9wdGlvbnMsIHRvb2xQYXRoKSB7XG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgICAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICAgICAgcmVzdWx0LmN3ZCA9IG9wdGlvbnMuY3dkO1xuICAgICAgICByZXN1bHQuZW52ID0gb3B0aW9ucy5lbnY7XG4gICAgICAgIHJlc3VsdFsnd2luZG93c1ZlcmJhdGltQXJndW1lbnRzJ10gPVxuICAgICAgICAgICAgb3B0aW9ucy53aW5kb3dzVmVyYmF0aW1Bcmd1bWVudHMgfHwgdGhpcy5faXNDbWRGaWxlKCk7XG4gICAgICAgIGlmIChvcHRpb25zLndpbmRvd3NWZXJiYXRpbUFyZ3VtZW50cykge1xuICAgICAgICAgICAgcmVzdWx0LmFyZ3YwID0gYFwiJHt0b29sUGF0aH1cImA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRXhlYyBhIHRvb2wuXG4gICAgICogT3V0cHV0IHdpbGwgYmUgc3RyZWFtZWQgdG8gdGhlIGxpdmUgY29uc29sZS5cbiAgICAgKiBSZXR1cm5zIHByb21pc2Ugd2l0aCByZXR1cm4gY29kZVxuICAgICAqXG4gICAgICogQHBhcmFtICAgICB0b29sICAgICBwYXRoIHRvIHRvb2wgdG8gZXhlY1xuICAgICAqIEBwYXJhbSAgICAgb3B0aW9ucyAgb3B0aW9uYWwgZXhlYyBvcHRpb25zLiAgU2VlIEV4ZWNPcHRpb25zXG4gICAgICogQHJldHVybnMgICBudW1iZXJcbiAgICAgKi9cbiAgICBleGVjKCkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgLy8gcm9vdCB0aGUgdG9vbCBwYXRoIGlmIGl0IGlzIHVucm9vdGVkIGFuZCBjb250YWlucyByZWxhdGl2ZSBwYXRoaW5nXG4gICAgICAgICAgICBpZiAoIWlvVXRpbC5pc1Jvb3RlZCh0aGlzLnRvb2xQYXRoKSAmJlxuICAgICAgICAgICAgICAgICh0aGlzLnRvb2xQYXRoLmluY2x1ZGVzKCcvJykgfHxcbiAgICAgICAgICAgICAgICAgICAgKElTX1dJTkRPV1MgJiYgdGhpcy50b29sUGF0aC5pbmNsdWRlcygnXFxcXCcpKSkpIHtcbiAgICAgICAgICAgICAgICAvLyBwcmVmZXIgb3B0aW9ucy5jd2QgaWYgaXQgaXMgc3BlY2lmaWVkLCBob3dldmVyIG9wdGlvbnMuY3dkIG1heSBhbHNvIG5lZWQgdG8gYmUgcm9vdGVkXG4gICAgICAgICAgICAgICAgdGhpcy50b29sUGF0aCA9IHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCB0aGlzLm9wdGlvbnMuY3dkIHx8IHByb2Nlc3MuY3dkKCksIHRoaXMudG9vbFBhdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgdGhlIHRvb2wgaXMgb25seSBhIGZpbGUgbmFtZSwgdGhlbiByZXNvbHZlIGl0IGZyb20gdGhlIFBBVEhcbiAgICAgICAgICAgIC8vIG90aGVyd2lzZSB2ZXJpZnkgaXQgZXhpc3RzIChhZGQgZXh0ZW5zaW9uIG9uIFdpbmRvd3MgaWYgbmVjZXNzYXJ5KVxuICAgICAgICAgICAgdGhpcy50b29sUGF0aCA9IHlpZWxkIGlvLndoaWNoKHRoaXMudG9vbFBhdGgsIHRydWUpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kZWJ1ZyhgZXhlYyB0b29sOiAke3RoaXMudG9vbFBhdGh9YCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGVidWcoJ2FyZ3VtZW50czonKTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGFyZyBvZiB0aGlzLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVidWcoYCAgICR7YXJnfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25zTm9uTnVsbCA9IHRoaXMuX2Nsb25lRXhlY09wdGlvbnModGhpcy5vcHRpb25zKTtcbiAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnNOb25OdWxsLnNpbGVudCAmJiBvcHRpb25zTm9uTnVsbC5vdXRTdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uc05vbk51bGwub3V0U3RyZWFtLndyaXRlKHRoaXMuX2dldENvbW1hbmRTdHJpbmcob3B0aW9uc05vbk51bGwpICsgb3MuRU9MKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhdGUgPSBuZXcgRXhlY1N0YXRlKG9wdGlvbnNOb25OdWxsLCB0aGlzLnRvb2xQYXRoKTtcbiAgICAgICAgICAgICAgICBzdGF0ZS5vbignZGVidWcnLCAobWVzc2FnZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWJ1ZyhtZXNzYWdlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmN3ZCAmJiAhKHlpZWxkIGlvVXRpbC5leGlzdHModGhpcy5vcHRpb25zLmN3ZCkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yKGBUaGUgY3dkOiAke3RoaXMub3B0aW9ucy5jd2R9IGRvZXMgbm90IGV4aXN0IWApKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZU5hbWUgPSB0aGlzLl9nZXRTcGF3bkZpbGVOYW1lKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgY3AgPSBjaGlsZC5zcGF3bihmaWxlTmFtZSwgdGhpcy5fZ2V0U3Bhd25BcmdzKG9wdGlvbnNOb25OdWxsKSwgdGhpcy5fZ2V0U3Bhd25PcHRpb25zKHRoaXMub3B0aW9ucywgZmlsZU5hbWUpKTtcbiAgICAgICAgICAgICAgICBsZXQgc3RkYnVmZmVyID0gJyc7XG4gICAgICAgICAgICAgICAgaWYgKGNwLnN0ZG91dCkge1xuICAgICAgICAgICAgICAgICAgICBjcC5zdGRvdXQub24oJ2RhdGEnLCAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5saXN0ZW5lcnMgJiYgdGhpcy5vcHRpb25zLmxpc3RlbmVycy5zdGRvdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMubGlzdGVuZXJzLnN0ZG91dChkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9uc05vbk51bGwuc2lsZW50ICYmIG9wdGlvbnNOb25OdWxsLm91dFN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNOb25OdWxsLm91dFN0cmVhbS53cml0ZShkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGJ1ZmZlciA9IHRoaXMuX3Byb2Nlc3NMaW5lQnVmZmVyKGRhdGEsIHN0ZGJ1ZmZlciwgKGxpbmUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxpc3RlbmVycyAmJiB0aGlzLm9wdGlvbnMubGlzdGVuZXJzLnN0ZGxpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmxpc3RlbmVycy5zdGRsaW5lKGxpbmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IGVycmJ1ZmZlciA9ICcnO1xuICAgICAgICAgICAgICAgIGlmIChjcC5zdGRlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY3Auc3RkZXJyLm9uKCdkYXRhJywgKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnByb2Nlc3NTdGRlcnIgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5saXN0ZW5lcnMgJiYgdGhpcy5vcHRpb25zLmxpc3RlbmVycy5zdGRlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMubGlzdGVuZXJzLnN0ZGVycihkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9uc05vbk51bGwuc2lsZW50ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uc05vbk51bGwuZXJyU3RyZWFtICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uc05vbk51bGwub3V0U3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcyA9IG9wdGlvbnNOb25OdWxsLmZhaWxPblN0ZEVyclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG9wdGlvbnNOb25OdWxsLmVyclN0cmVhbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG9wdGlvbnNOb25OdWxsLm91dFN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLndyaXRlKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyYnVmZmVyID0gdGhpcy5fcHJvY2Vzc0xpbmVCdWZmZXIoZGF0YSwgZXJyYnVmZmVyLCAobGluZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMubGlzdGVuZXJzICYmIHRoaXMub3B0aW9ucy5saXN0ZW5lcnMuZXJybGluZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMubGlzdGVuZXJzLmVycmxpbmUobGluZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjcC5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLnByb2Nlc3NFcnJvciA9IGVyci5tZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5wcm9jZXNzRXhpdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUucHJvY2Vzc0Nsb3NlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLkNoZWNrQ29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjcC5vbignZXhpdCcsIChjb2RlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLnByb2Nlc3NFeGl0Q29kZSA9IGNvZGU7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLnByb2Nlc3NFeGl0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWJ1ZyhgRXhpdCBjb2RlICR7Y29kZX0gcmVjZWl2ZWQgZnJvbSB0b29sICcke3RoaXMudG9vbFBhdGh9J2ApO1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5DaGVja0NvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY3Aub24oJ2Nsb3NlJywgKGNvZGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUucHJvY2Vzc0V4aXRDb2RlID0gY29kZTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUucHJvY2Vzc0V4aXRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLnByb2Nlc3NDbG9zZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWJ1ZyhgU1RESU8gc3RyZWFtcyBoYXZlIGNsb3NlZCBmb3IgdG9vbCAnJHt0aGlzLnRvb2xQYXRofSdgKTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuQ2hlY2tDb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHN0YXRlLm9uKCdkb25lJywgKGVycm9yLCBleGl0Q29kZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3RkYnVmZmVyLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnc3RkbGluZScsIHN0ZGJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycmJ1ZmZlci5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2VycmxpbmUnLCBlcnJidWZmZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNwLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGV4aXRDb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjcC5zdGRpbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjaGlsZCBwcm9jZXNzIG1pc3Npbmcgc3RkaW4nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjcC5zdGRpbi5lbmQodGhpcy5vcHRpb25zLmlucHV0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuVG9vbFJ1bm5lciA9IFRvb2xSdW5uZXI7XG4vKipcbiAqIENvbnZlcnQgYW4gYXJnIHN0cmluZyB0byBhbiBhcnJheSBvZiBhcmdzLiBIYW5kbGVzIGVzY2FwaW5nXG4gKlxuICogQHBhcmFtICAgIGFyZ1N0cmluZyAgIHN0cmluZyBvZiBhcmd1bWVudHNcbiAqIEByZXR1cm5zICBzdHJpbmdbXSAgICBhcnJheSBvZiBhcmd1bWVudHNcbiAqL1xuZnVuY3Rpb24gYXJnU3RyaW5nVG9BcnJheShhcmdTdHJpbmcpIHtcbiAgICBjb25zdCBhcmdzID0gW107XG4gICAgbGV0IGluUXVvdGVzID0gZmFsc2U7XG4gICAgbGV0IGVzY2FwZWQgPSBmYWxzZTtcbiAgICBsZXQgYXJnID0gJyc7XG4gICAgZnVuY3Rpb24gYXBwZW5kKGMpIHtcbiAgICAgICAgLy8gd2Ugb25seSBlc2NhcGUgZG91YmxlIHF1b3Rlcy5cbiAgICAgICAgaWYgKGVzY2FwZWQgJiYgYyAhPT0gJ1wiJykge1xuICAgICAgICAgICAgYXJnICs9ICdcXFxcJztcbiAgICAgICAgfVxuICAgICAgICBhcmcgKz0gYztcbiAgICAgICAgZXNjYXBlZCA9IGZhbHNlO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ1N0cmluZy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBjID0gYXJnU3RyaW5nLmNoYXJBdChpKTtcbiAgICAgICAgaWYgKGMgPT09ICdcIicpIHtcbiAgICAgICAgICAgIGlmICghZXNjYXBlZCkge1xuICAgICAgICAgICAgICAgIGluUXVvdGVzID0gIWluUXVvdGVzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYXBwZW5kKGMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGMgPT09ICdcXFxcJyAmJiBlc2NhcGVkKSB7XG4gICAgICAgICAgICBhcHBlbmQoYyk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYyA9PT0gJ1xcXFwnICYmIGluUXVvdGVzKSB7XG4gICAgICAgICAgICBlc2NhcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjID09PSAnICcgJiYgIWluUXVvdGVzKSB7XG4gICAgICAgICAgICBpZiAoYXJnLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBhcmdzLnB1c2goYXJnKTtcbiAgICAgICAgICAgICAgICBhcmcgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGFwcGVuZChjKTtcbiAgICB9XG4gICAgaWYgKGFyZy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGFyZ3MucHVzaChhcmcudHJpbSgpKTtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5leHBvcnRzLmFyZ1N0cmluZ1RvQXJyYXkgPSBhcmdTdHJpbmdUb0FycmF5O1xuY2xhc3MgRXhlY1N0YXRlIGV4dGVuZHMgZXZlbnRzLkV2ZW50RW1pdHRlciB7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucywgdG9vbFBhdGgpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5wcm9jZXNzQ2xvc2VkID0gZmFsc2U7IC8vIHRyYWNrcyB3aGV0aGVyIHRoZSBwcm9jZXNzIGhhcyBleGl0ZWQgYW5kIHN0ZGlvIGlzIGNsb3NlZFxuICAgICAgICB0aGlzLnByb2Nlc3NFcnJvciA9ICcnO1xuICAgICAgICB0aGlzLnByb2Nlc3NFeGl0Q29kZSA9IDA7XG4gICAgICAgIHRoaXMucHJvY2Vzc0V4aXRlZCA9IGZhbHNlOyAvLyB0cmFja3Mgd2hldGhlciB0aGUgcHJvY2VzcyBoYXMgZXhpdGVkXG4gICAgICAgIHRoaXMucHJvY2Vzc1N0ZGVyciA9IGZhbHNlOyAvLyB0cmFja3Mgd2hldGhlciBzdGRlcnIgd2FzIHdyaXR0ZW4gdG9cbiAgICAgICAgdGhpcy5kZWxheSA9IDEwMDAwOyAvLyAxMCBzZWNvbmRzXG4gICAgICAgIHRoaXMuZG9uZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnRpbWVvdXQgPSBudWxsO1xuICAgICAgICBpZiAoIXRvb2xQYXRoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Rvb2xQYXRoIG11c3Qgbm90IGJlIGVtcHR5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgdGhpcy50b29sUGF0aCA9IHRvb2xQYXRoO1xuICAgICAgICBpZiAob3B0aW9ucy5kZWxheSkge1xuICAgICAgICAgICAgdGhpcy5kZWxheSA9IG9wdGlvbnMuZGVsYXk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgQ2hlY2tDb21wbGV0ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnByb2Nlc3NDbG9zZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldFJlc3VsdCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMucHJvY2Vzc0V4aXRlZCkge1xuICAgICAgICAgICAgdGhpcy50aW1lb3V0ID0gdGltZXJzXzEuc2V0VGltZW91dChFeGVjU3RhdGUuSGFuZGxlVGltZW91dCwgdGhpcy5kZWxheSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX2RlYnVnKG1lc3NhZ2UpIHtcbiAgICAgICAgdGhpcy5lbWl0KCdkZWJ1ZycsIG1lc3NhZ2UpO1xuICAgIH1cbiAgICBfc2V0UmVzdWx0KCkge1xuICAgICAgICAvLyBkZXRlcm1pbmUgd2hldGhlciB0aGVyZSBpcyBhbiBlcnJvclxuICAgICAgICBsZXQgZXJyb3I7XG4gICAgICAgIGlmICh0aGlzLnByb2Nlc3NFeGl0ZWQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByb2Nlc3NFcnJvcikge1xuICAgICAgICAgICAgICAgIGVycm9yID0gbmV3IEVycm9yKGBUaGVyZSB3YXMgYW4gZXJyb3Igd2hlbiBhdHRlbXB0aW5nIHRvIGV4ZWN1dGUgdGhlIHByb2Nlc3MgJyR7dGhpcy50b29sUGF0aH0nLiBUaGlzIG1heSBpbmRpY2F0ZSB0aGUgcHJvY2VzcyBmYWlsZWQgdG8gc3RhcnQuIEVycm9yOiAke3RoaXMucHJvY2Vzc0Vycm9yfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5wcm9jZXNzRXhpdENvZGUgIT09IDAgJiYgIXRoaXMub3B0aW9ucy5pZ25vcmVSZXR1cm5Db2RlKSB7XG4gICAgICAgICAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoYFRoZSBwcm9jZXNzICcke3RoaXMudG9vbFBhdGh9JyBmYWlsZWQgd2l0aCBleGl0IGNvZGUgJHt0aGlzLnByb2Nlc3NFeGl0Q29kZX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMucHJvY2Vzc1N0ZGVyciAmJiB0aGlzLm9wdGlvbnMuZmFpbE9uU3RkRXJyKSB7XG4gICAgICAgICAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoYFRoZSBwcm9jZXNzICcke3RoaXMudG9vbFBhdGh9JyBmYWlsZWQgYmVjYXVzZSBvbmUgb3IgbW9yZSBsaW5lcyB3ZXJlIHdyaXR0ZW4gdG8gdGhlIFNUREVSUiBzdHJlYW1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBjbGVhciB0aGUgdGltZW91dFxuICAgICAgICBpZiAodGhpcy50aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTtcbiAgICAgICAgICAgIHRoaXMudGltZW91dCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kb25lID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5lbWl0KCdkb25lJywgZXJyb3IsIHRoaXMucHJvY2Vzc0V4aXRDb2RlKTtcbiAgICB9XG4gICAgc3RhdGljIEhhbmRsZVRpbWVvdXQoc3RhdGUpIHtcbiAgICAgICAgaWYgKHN0YXRlLmRvbmUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXN0YXRlLnByb2Nlc3NDbG9zZWQgJiYgc3RhdGUucHJvY2Vzc0V4aXRlZCkge1xuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGBUaGUgU1RESU8gc3RyZWFtcyBkaWQgbm90IGNsb3NlIHdpdGhpbiAke3N0YXRlLmRlbGF5IC9cbiAgICAgICAgICAgICAgICAxMDAwfSBzZWNvbmRzIG9mIHRoZSBleGl0IGV2ZW50IGZyb20gcHJvY2VzcyAnJHtzdGF0ZS50b29sUGF0aH0nLiBUaGlzIG1heSBpbmRpY2F0ZSBhIGNoaWxkIHByb2Nlc3MgaW5oZXJpdGVkIHRoZSBTVERJTyBzdHJlYW1zIGFuZCBoYXMgbm90IHlldCBleGl0ZWQuYDtcbiAgICAgICAgICAgIHN0YXRlLl9kZWJ1ZyhtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZS5fc2V0UmVzdWx0KCk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dG9vbHJ1bm5lci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH0pO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRFeGVjT3V0cHV0ID0gZXhwb3J0cy5leGVjID0gdm9pZCAwO1xuY29uc3Qgc3RyaW5nX2RlY29kZXJfMSA9IHJlcXVpcmUoXCJzdHJpbmdfZGVjb2RlclwiKTtcbmNvbnN0IHRyID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL3Rvb2xydW5uZXJcIikpO1xuLyoqXG4gKiBFeGVjIGEgY29tbWFuZC5cbiAqIE91dHB1dCB3aWxsIGJlIHN0cmVhbWVkIHRvIHRoZSBsaXZlIGNvbnNvbGUuXG4gKiBSZXR1cm5zIHByb21pc2Ugd2l0aCByZXR1cm4gY29kZVxuICpcbiAqIEBwYXJhbSAgICAgY29tbWFuZExpbmUgICAgICAgIGNvbW1hbmQgdG8gZXhlY3V0ZSAoY2FuIGluY2x1ZGUgYWRkaXRpb25hbCBhcmdzKS4gTXVzdCBiZSBjb3JyZWN0bHkgZXNjYXBlZC5cbiAqIEBwYXJhbSAgICAgYXJncyAgICAgICAgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50cyBmb3IgdG9vbC4gRXNjYXBpbmcgaXMgaGFuZGxlZCBieSB0aGUgbGliLlxuICogQHBhcmFtICAgICBvcHRpb25zICAgICAgICAgICAgb3B0aW9uYWwgZXhlYyBvcHRpb25zLiAgU2VlIEV4ZWNPcHRpb25zXG4gKiBAcmV0dXJucyAgIFByb21pc2U8bnVtYmVyPiAgICBleGl0IGNvZGVcbiAqL1xuZnVuY3Rpb24gZXhlYyhjb21tYW5kTGluZSwgYXJncywgb3B0aW9ucykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IGNvbW1hbmRBcmdzID0gdHIuYXJnU3RyaW5nVG9BcnJheShjb21tYW5kTGluZSk7XG4gICAgICAgIGlmIChjb21tYW5kQXJncy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUGFyYW1ldGVyICdjb21tYW5kTGluZScgY2Fubm90IGJlIG51bGwgb3IgZW1wdHkuYCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUGF0aCB0byB0b29sIHRvIGV4ZWN1dGUgc2hvdWxkIGJlIGZpcnN0IGFyZ1xuICAgICAgICBjb25zdCB0b29sUGF0aCA9IGNvbW1hbmRBcmdzWzBdO1xuICAgICAgICBhcmdzID0gY29tbWFuZEFyZ3Muc2xpY2UoMSkuY29uY2F0KGFyZ3MgfHwgW10pO1xuICAgICAgICBjb25zdCBydW5uZXIgPSBuZXcgdHIuVG9vbFJ1bm5lcih0b29sUGF0aCwgYXJncywgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBydW5uZXIuZXhlYygpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5leGVjID0gZXhlYztcbi8qKlxuICogRXhlYyBhIGNvbW1hbmQgYW5kIGdldCB0aGUgb3V0cHV0LlxuICogT3V0cHV0IHdpbGwgYmUgc3RyZWFtZWQgdG8gdGhlIGxpdmUgY29uc29sZS5cbiAqIFJldHVybnMgcHJvbWlzZSB3aXRoIHRoZSBleGl0IGNvZGUgYW5kIGNvbGxlY3RlZCBzdGRvdXQgYW5kIHN0ZGVyclxuICpcbiAqIEBwYXJhbSAgICAgY29tbWFuZExpbmUgICAgICAgICAgIGNvbW1hbmQgdG8gZXhlY3V0ZSAoY2FuIGluY2x1ZGUgYWRkaXRpb25hbCBhcmdzKS4gTXVzdCBiZSBjb3JyZWN0bHkgZXNjYXBlZC5cbiAqIEBwYXJhbSAgICAgYXJncyAgICAgICAgICAgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50cyBmb3IgdG9vbC4gRXNjYXBpbmcgaXMgaGFuZGxlZCBieSB0aGUgbGliLlxuICogQHBhcmFtICAgICBvcHRpb25zICAgICAgICAgICAgICAgb3B0aW9uYWwgZXhlYyBvcHRpb25zLiAgU2VlIEV4ZWNPcHRpb25zXG4gKiBAcmV0dXJucyAgIFByb21pc2U8RXhlY091dHB1dD4gICBleGl0IGNvZGUsIHN0ZG91dCwgYW5kIHN0ZGVyclxuICovXG5mdW5jdGlvbiBnZXRFeGVjT3V0cHV0KGNvbW1hbmRMaW5lLCBhcmdzLCBvcHRpb25zKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBsZXQgc3Rkb3V0ID0gJyc7XG4gICAgICAgIGxldCBzdGRlcnIgPSAnJztcbiAgICAgICAgLy9Vc2luZyBzdHJpbmcgZGVjb2RlciBjb3ZlcnMgdGhlIGNhc2Ugd2hlcmUgYSBtdWx0LWJ5dGUgY2hhcmFjdGVyIGlzIHNwbGl0XG4gICAgICAgIGNvbnN0IHN0ZG91dERlY29kZXIgPSBuZXcgc3RyaW5nX2RlY29kZXJfMS5TdHJpbmdEZWNvZGVyKCd1dGY4Jyk7XG4gICAgICAgIGNvbnN0IHN0ZGVyckRlY29kZXIgPSBuZXcgc3RyaW5nX2RlY29kZXJfMS5TdHJpbmdEZWNvZGVyKCd1dGY4Jyk7XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsU3Rkb3V0TGlzdGVuZXIgPSAoX2EgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMubGlzdGVuZXJzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc3Rkb3V0O1xuICAgICAgICBjb25zdCBvcmlnaW5hbFN0ZEVyckxpc3RlbmVyID0gKF9iID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmxpc3RlbmVycykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnN0ZGVycjtcbiAgICAgICAgY29uc3Qgc3RkRXJyTGlzdGVuZXIgPSAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgc3RkZXJyICs9IHN0ZGVyckRlY29kZXIud3JpdGUoZGF0YSk7XG4gICAgICAgICAgICBpZiAob3JpZ2luYWxTdGRFcnJMaXN0ZW5lcikge1xuICAgICAgICAgICAgICAgIG9yaWdpbmFsU3RkRXJyTGlzdGVuZXIoZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHN0ZE91dExpc3RlbmVyID0gKGRhdGEpID0+IHtcbiAgICAgICAgICAgIHN0ZG91dCArPSBzdGRvdXREZWNvZGVyLndyaXRlKGRhdGEpO1xuICAgICAgICAgICAgaWYgKG9yaWdpbmFsU3Rkb3V0TGlzdGVuZXIpIHtcbiAgICAgICAgICAgICAgICBvcmlnaW5hbFN0ZG91dExpc3RlbmVyKGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5saXN0ZW5lcnMpLCB7IHN0ZG91dDogc3RkT3V0TGlzdGVuZXIsIHN0ZGVycjogc3RkRXJyTGlzdGVuZXIgfSk7XG4gICAgICAgIGNvbnN0IGV4aXRDb2RlID0geWllbGQgZXhlYyhjb21tYW5kTGluZSwgYXJncywgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKSwgeyBsaXN0ZW5lcnMgfSkpO1xuICAgICAgICAvL2ZsdXNoIGFueSByZW1haW5pbmcgY2hhcmFjdGVyc1xuICAgICAgICBzdGRvdXQgKz0gc3Rkb3V0RGVjb2Rlci5lbmQoKTtcbiAgICAgICAgc3RkZXJyICs9IHN0ZGVyckRlY29kZXIuZW5kKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBleGl0Q29kZSxcbiAgICAgICAgICAgIHN0ZG91dCxcbiAgICAgICAgICAgIHN0ZGVyclxuICAgICAgICB9O1xuICAgIH0pO1xufVxuZXhwb3J0cy5nZXRFeGVjT3V0cHV0ID0gZ2V0RXhlY091dHB1dDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWV4ZWMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldERldGFpbHMgPSBleHBvcnRzLmlzTGludXggPSBleHBvcnRzLmlzTWFjT1MgPSBleHBvcnRzLmlzV2luZG93cyA9IGV4cG9ydHMuYXJjaCA9IGV4cG9ydHMucGxhdGZvcm0gPSB2b2lkIDA7XG5jb25zdCBvc18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJvc1wiKSk7XG5jb25zdCBleGVjID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJAYWN0aW9ucy9leGVjXCIpKTtcbmNvbnN0IGdldFdpbmRvd3NJbmZvID0gKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgY29uc3QgeyBzdGRvdXQ6IHZlcnNpb24gfSA9IHlpZWxkIGV4ZWMuZ2V0RXhlY091dHB1dCgncG93ZXJzaGVsbCAtY29tbWFuZCBcIihHZXQtQ2ltSW5zdGFuY2UgLUNsYXNzTmFtZSBXaW4zMl9PcGVyYXRpbmdTeXN0ZW0pLlZlcnNpb25cIicsIHVuZGVmaW5lZCwge1xuICAgICAgICBzaWxlbnQ6IHRydWVcbiAgICB9KTtcbiAgICBjb25zdCB7IHN0ZG91dDogbmFtZSB9ID0geWllbGQgZXhlYy5nZXRFeGVjT3V0cHV0KCdwb3dlcnNoZWxsIC1jb21tYW5kIFwiKEdldC1DaW1JbnN0YW5jZSAtQ2xhc3NOYW1lIFdpbjMyX09wZXJhdGluZ1N5c3RlbSkuQ2FwdGlvblwiJywgdW5kZWZpbmVkLCB7XG4gICAgICAgIHNpbGVudDogdHJ1ZVxuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IG5hbWUudHJpbSgpLFxuICAgICAgICB2ZXJzaW9uOiB2ZXJzaW9uLnRyaW0oKVxuICAgIH07XG59KTtcbmNvbnN0IGdldE1hY09zSW5mbyA9ICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgIHZhciBfYSwgX2IsIF9jLCBfZDtcbiAgICBjb25zdCB7IHN0ZG91dCB9ID0geWllbGQgZXhlYy5nZXRFeGVjT3V0cHV0KCdzd192ZXJzJywgdW5kZWZpbmVkLCB7XG4gICAgICAgIHNpbGVudDogdHJ1ZVxuICAgIH0pO1xuICAgIGNvbnN0IHZlcnNpb24gPSAoX2IgPSAoX2EgPSBzdGRvdXQubWF0Y2goL1Byb2R1Y3RWZXJzaW9uOlxccyooLispLykpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVsxXSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XG4gICAgY29uc3QgbmFtZSA9IChfZCA9IChfYyA9IHN0ZG91dC5tYXRjaCgvUHJvZHVjdE5hbWU6XFxzKiguKykvKSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jWzFdKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiAnJztcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lLFxuICAgICAgICB2ZXJzaW9uXG4gICAgfTtcbn0pO1xuY29uc3QgZ2V0TGludXhJbmZvID0gKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgY29uc3QgeyBzdGRvdXQgfSA9IHlpZWxkIGV4ZWMuZ2V0RXhlY091dHB1dCgnbHNiX3JlbGVhc2UnLCBbJy1pJywgJy1yJywgJy1zJ10sIHtcbiAgICAgICAgc2lsZW50OiB0cnVlXG4gICAgfSk7XG4gICAgY29uc3QgW25hbWUsIHZlcnNpb25dID0gc3Rkb3V0LnRyaW0oKS5zcGxpdCgnXFxuJyk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgdmVyc2lvblxuICAgIH07XG59KTtcbmV4cG9ydHMucGxhdGZvcm0gPSBvc18xLmRlZmF1bHQucGxhdGZvcm0oKTtcbmV4cG9ydHMuYXJjaCA9IG9zXzEuZGVmYXVsdC5hcmNoKCk7XG5leHBvcnRzLmlzV2luZG93cyA9IGV4cG9ydHMucGxhdGZvcm0gPT09ICd3aW4zMic7XG5leHBvcnRzLmlzTWFjT1MgPSBleHBvcnRzLnBsYXRmb3JtID09PSAnZGFyd2luJztcbmV4cG9ydHMuaXNMaW51eCA9IGV4cG9ydHMucGxhdGZvcm0gPT09ICdsaW51eCc7XG5mdW5jdGlvbiBnZXREZXRhaWxzKCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sICh5aWVsZCAoZXhwb3J0cy5pc1dpbmRvd3NcbiAgICAgICAgICAgID8gZ2V0V2luZG93c0luZm8oKVxuICAgICAgICAgICAgOiBleHBvcnRzLmlzTWFjT1NcbiAgICAgICAgICAgICAgICA/IGdldE1hY09zSW5mbygpXG4gICAgICAgICAgICAgICAgOiBnZXRMaW51eEluZm8oKSkpKSwgeyBwbGF0Zm9ybTogZXhwb3J0cy5wbGF0Zm9ybSxcbiAgICAgICAgICAgIGFyY2g6IGV4cG9ydHMuYXJjaCxcbiAgICAgICAgICAgIGlzV2luZG93czogZXhwb3J0cy5pc1dpbmRvd3MsXG4gICAgICAgICAgICBpc01hY09TOiBleHBvcnRzLmlzTWFjT1MsXG4gICAgICAgICAgICBpc0xpbnV4OiBleHBvcnRzLmlzTGludXggfSk7XG4gICAgfSk7XG59XG5leHBvcnRzLmdldERldGFpbHMgPSBnZXREZXRhaWxzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGxhdGZvcm0uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnBsYXRmb3JtID0gZXhwb3J0cy50b1BsYXRmb3JtUGF0aCA9IGV4cG9ydHMudG9XaW4zMlBhdGggPSBleHBvcnRzLnRvUG9zaXhQYXRoID0gZXhwb3J0cy5tYXJrZG93blN1bW1hcnkgPSBleHBvcnRzLnN1bW1hcnkgPSBleHBvcnRzLmdldElEVG9rZW4gPSBleHBvcnRzLmdldFN0YXRlID0gZXhwb3J0cy5zYXZlU3RhdGUgPSBleHBvcnRzLmdyb3VwID0gZXhwb3J0cy5lbmRHcm91cCA9IGV4cG9ydHMuc3RhcnRHcm91cCA9IGV4cG9ydHMuaW5mbyA9IGV4cG9ydHMubm90aWNlID0gZXhwb3J0cy53YXJuaW5nID0gZXhwb3J0cy5lcnJvciA9IGV4cG9ydHMuZGVidWcgPSBleHBvcnRzLmlzRGVidWcgPSBleHBvcnRzLnNldEZhaWxlZCA9IGV4cG9ydHMuc2V0Q29tbWFuZEVjaG8gPSBleHBvcnRzLnNldE91dHB1dCA9IGV4cG9ydHMuZ2V0Qm9vbGVhbklucHV0ID0gZXhwb3J0cy5nZXRNdWx0aWxpbmVJbnB1dCA9IGV4cG9ydHMuZ2V0SW5wdXQgPSBleHBvcnRzLmFkZFBhdGggPSBleHBvcnRzLnNldFNlY3JldCA9IGV4cG9ydHMuZXhwb3J0VmFyaWFibGUgPSBleHBvcnRzLkV4aXRDb2RlID0gdm9pZCAwO1xuY29uc3QgY29tbWFuZF8xID0gcmVxdWlyZShcIi4vY29tbWFuZFwiKTtcbmNvbnN0IGZpbGVfY29tbWFuZF8xID0gcmVxdWlyZShcIi4vZmlsZS1jb21tYW5kXCIpO1xuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoXCIuL3V0aWxzXCIpO1xuY29uc3Qgb3MgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIm9zXCIpKTtcbmNvbnN0IHBhdGggPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcInBhdGhcIikpO1xuY29uc3Qgb2lkY191dGlsc18xID0gcmVxdWlyZShcIi4vb2lkYy11dGlsc1wiKTtcbi8qKlxuICogVGhlIGNvZGUgdG8gZXhpdCBhbiBhY3Rpb25cbiAqL1xudmFyIEV4aXRDb2RlO1xuKGZ1bmN0aW9uIChFeGl0Q29kZSkge1xuICAgIC8qKlxuICAgICAqIEEgY29kZSBpbmRpY2F0aW5nIHRoYXQgdGhlIGFjdGlvbiB3YXMgc3VjY2Vzc2Z1bFxuICAgICAqL1xuICAgIEV4aXRDb2RlW0V4aXRDb2RlW1wiU3VjY2Vzc1wiXSA9IDBdID0gXCJTdWNjZXNzXCI7XG4gICAgLyoqXG4gICAgICogQSBjb2RlIGluZGljYXRpbmcgdGhhdCB0aGUgYWN0aW9uIHdhcyBhIGZhaWx1cmVcbiAgICAgKi9cbiAgICBFeGl0Q29kZVtFeGl0Q29kZVtcIkZhaWx1cmVcIl0gPSAxXSA9IFwiRmFpbHVyZVwiO1xufSkoRXhpdENvZGUgfHwgKGV4cG9ydHMuRXhpdENvZGUgPSBFeGl0Q29kZSA9IHt9KSk7XG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBWYXJpYWJsZXNcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8qKlxuICogU2V0cyBlbnYgdmFyaWFibGUgZm9yIHRoaXMgYWN0aW9uIGFuZCBmdXR1cmUgYWN0aW9ucyBpbiB0aGUgam9iXG4gKiBAcGFyYW0gbmFtZSB0aGUgbmFtZSBvZiB0aGUgdmFyaWFibGUgdG8gc2V0XG4gKiBAcGFyYW0gdmFsIHRoZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUuIE5vbi1zdHJpbmcgdmFsdWVzIHdpbGwgYmUgY29udmVydGVkIHRvIGEgc3RyaW5nIHZpYSBKU09OLnN0cmluZ2lmeVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZnVuY3Rpb24gZXhwb3J0VmFyaWFibGUobmFtZSwgdmFsKSB7XG4gICAgY29uc3QgY29udmVydGVkVmFsID0gKDAsIHV0aWxzXzEudG9Db21tYW5kVmFsdWUpKHZhbCk7XG4gICAgcHJvY2Vzcy5lbnZbbmFtZV0gPSBjb252ZXJ0ZWRWYWw7XG4gICAgY29uc3QgZmlsZVBhdGggPSBwcm9jZXNzLmVudlsnR0lUSFVCX0VOViddIHx8ICcnO1xuICAgIGlmIChmaWxlUGF0aCkge1xuICAgICAgICByZXR1cm4gKDAsIGZpbGVfY29tbWFuZF8xLmlzc3VlRmlsZUNvbW1hbmQpKCdFTlYnLCAoMCwgZmlsZV9jb21tYW5kXzEucHJlcGFyZUtleVZhbHVlTWVzc2FnZSkobmFtZSwgdmFsKSk7XG4gICAgfVxuICAgICgwLCBjb21tYW5kXzEuaXNzdWVDb21tYW5kKSgnc2V0LWVudicsIHsgbmFtZSB9LCBjb252ZXJ0ZWRWYWwpO1xufVxuZXhwb3J0cy5leHBvcnRWYXJpYWJsZSA9IGV4cG9ydFZhcmlhYmxlO1xuLyoqXG4gKiBSZWdpc3RlcnMgYSBzZWNyZXQgd2hpY2ggd2lsbCBnZXQgbWFza2VkIGZyb20gbG9nc1xuICogQHBhcmFtIHNlY3JldCB2YWx1ZSBvZiB0aGUgc2VjcmV0XG4gKi9cbmZ1bmN0aW9uIHNldFNlY3JldChzZWNyZXQpIHtcbiAgICAoMCwgY29tbWFuZF8xLmlzc3VlQ29tbWFuZCkoJ2FkZC1tYXNrJywge30sIHNlY3JldCk7XG59XG5leHBvcnRzLnNldFNlY3JldCA9IHNldFNlY3JldDtcbi8qKlxuICogUHJlcGVuZHMgaW5wdXRQYXRoIHRvIHRoZSBQQVRIIChmb3IgdGhpcyBhY3Rpb24gYW5kIGZ1dHVyZSBhY3Rpb25zKVxuICogQHBhcmFtIGlucHV0UGF0aFxuICovXG5mdW5jdGlvbiBhZGRQYXRoKGlucHV0UGF0aCkge1xuICAgIGNvbnN0IGZpbGVQYXRoID0gcHJvY2Vzcy5lbnZbJ0dJVEhVQl9QQVRIJ10gfHwgJyc7XG4gICAgaWYgKGZpbGVQYXRoKSB7XG4gICAgICAgICgwLCBmaWxlX2NvbW1hbmRfMS5pc3N1ZUZpbGVDb21tYW5kKSgnUEFUSCcsIGlucHV0UGF0aCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICAoMCwgY29tbWFuZF8xLmlzc3VlQ29tbWFuZCkoJ2FkZC1wYXRoJywge30sIGlucHV0UGF0aCk7XG4gICAgfVxuICAgIHByb2Nlc3MuZW52WydQQVRIJ10gPSBgJHtpbnB1dFBhdGh9JHtwYXRoLmRlbGltaXRlcn0ke3Byb2Nlc3MuZW52WydQQVRIJ119YDtcbn1cbmV4cG9ydHMuYWRkUGF0aCA9IGFkZFBhdGg7XG4vKipcbiAqIEdldHMgdGhlIHZhbHVlIG9mIGFuIGlucHV0LlxuICogVW5sZXNzIHRyaW1XaGl0ZXNwYWNlIGlzIHNldCB0byBmYWxzZSBpbiBJbnB1dE9wdGlvbnMsIHRoZSB2YWx1ZSBpcyBhbHNvIHRyaW1tZWQuXG4gKiBSZXR1cm5zIGFuIGVtcHR5IHN0cmluZyBpZiB0aGUgdmFsdWUgaXMgbm90IGRlZmluZWQuXG4gKlxuICogQHBhcmFtICAgICBuYW1lICAgICBuYW1lIG9mIHRoZSBpbnB1dCB0byBnZXRcbiAqIEBwYXJhbSAgICAgb3B0aW9ucyAgb3B0aW9uYWwuIFNlZSBJbnB1dE9wdGlvbnMuXG4gKiBAcmV0dXJucyAgIHN0cmluZ1xuICovXG5mdW5jdGlvbiBnZXRJbnB1dChuYW1lLCBvcHRpb25zKSB7XG4gICAgY29uc3QgdmFsID0gcHJvY2Vzcy5lbnZbYElOUFVUXyR7bmFtZS5yZXBsYWNlKC8gL2csICdfJykudG9VcHBlckNhc2UoKX1gXSB8fCAnJztcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnJlcXVpcmVkICYmICF2YWwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnB1dCByZXF1aXJlZCBhbmQgbm90IHN1cHBsaWVkOiAke25hbWV9YCk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMudHJpbVdoaXRlc3BhY2UgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICAgIHJldHVybiB2YWwudHJpbSgpO1xufVxuZXhwb3J0cy5nZXRJbnB1dCA9IGdldElucHV0O1xuLyoqXG4gKiBHZXRzIHRoZSB2YWx1ZXMgb2YgYW4gbXVsdGlsaW5lIGlucHV0LiAgRWFjaCB2YWx1ZSBpcyBhbHNvIHRyaW1tZWQuXG4gKlxuICogQHBhcmFtICAgICBuYW1lICAgICBuYW1lIG9mIHRoZSBpbnB1dCB0byBnZXRcbiAqIEBwYXJhbSAgICAgb3B0aW9ucyAgb3B0aW9uYWwuIFNlZSBJbnB1dE9wdGlvbnMuXG4gKiBAcmV0dXJucyAgIHN0cmluZ1tdXG4gKlxuICovXG5mdW5jdGlvbiBnZXRNdWx0aWxpbmVJbnB1dChuYW1lLCBvcHRpb25zKSB7XG4gICAgY29uc3QgaW5wdXRzID0gZ2V0SW5wdXQobmFtZSwgb3B0aW9ucylcbiAgICAgICAgLnNwbGl0KCdcXG4nKVxuICAgICAgICAuZmlsdGVyKHggPT4geCAhPT0gJycpO1xuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMudHJpbVdoaXRlc3BhY2UgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBpbnB1dHM7XG4gICAgfVxuICAgIHJldHVybiBpbnB1dHMubWFwKGlucHV0ID0+IGlucHV0LnRyaW0oKSk7XG59XG5leHBvcnRzLmdldE11bHRpbGluZUlucHV0ID0gZ2V0TXVsdGlsaW5lSW5wdXQ7XG4vKipcbiAqIEdldHMgdGhlIGlucHV0IHZhbHVlIG9mIHRoZSBib29sZWFuIHR5cGUgaW4gdGhlIFlBTUwgMS4yIFwiY29yZSBzY2hlbWFcIiBzcGVjaWZpY2F0aW9uLlxuICogU3VwcG9ydCBib29sZWFuIGlucHV0IGxpc3Q6IGB0cnVlIHwgVHJ1ZSB8IFRSVUUgfCBmYWxzZSB8IEZhbHNlIHwgRkFMU0VgIC5cbiAqIFRoZSByZXR1cm4gdmFsdWUgaXMgYWxzbyBpbiBib29sZWFuIHR5cGUuXG4gKiByZWY6IGh0dHBzOi8veWFtbC5vcmcvc3BlYy8xLjIvc3BlYy5odG1sI2lkMjgwNDkyM1xuICpcbiAqIEBwYXJhbSAgICAgbmFtZSAgICAgbmFtZSBvZiB0aGUgaW5wdXQgdG8gZ2V0XG4gKiBAcGFyYW0gICAgIG9wdGlvbnMgIG9wdGlvbmFsLiBTZWUgSW5wdXRPcHRpb25zLlxuICogQHJldHVybnMgICBib29sZWFuXG4gKi9cbmZ1bmN0aW9uIGdldEJvb2xlYW5JbnB1dChuYW1lLCBvcHRpb25zKSB7XG4gICAgY29uc3QgdHJ1ZVZhbHVlID0gWyd0cnVlJywgJ1RydWUnLCAnVFJVRSddO1xuICAgIGNvbnN0IGZhbHNlVmFsdWUgPSBbJ2ZhbHNlJywgJ0ZhbHNlJywgJ0ZBTFNFJ107XG4gICAgY29uc3QgdmFsID0gZ2V0SW5wdXQobmFtZSwgb3B0aW9ucyk7XG4gICAgaWYgKHRydWVWYWx1ZS5pbmNsdWRlcyh2YWwpKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoZmFsc2VWYWx1ZS5pbmNsdWRlcyh2YWwpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgSW5wdXQgZG9lcyBub3QgbWVldCBZQU1MIDEuMiBcIkNvcmUgU2NoZW1hXCIgc3BlY2lmaWNhdGlvbjogJHtuYW1lfVxcbmAgK1xuICAgICAgICBgU3VwcG9ydCBib29sZWFuIGlucHV0IGxpc3Q6IFxcYHRydWUgfCBUcnVlIHwgVFJVRSB8IGZhbHNlIHwgRmFsc2UgfCBGQUxTRVxcYGApO1xufVxuZXhwb3J0cy5nZXRCb29sZWFuSW5wdXQgPSBnZXRCb29sZWFuSW5wdXQ7XG4vKipcbiAqIFNldHMgdGhlIHZhbHVlIG9mIGFuIG91dHB1dC5cbiAqXG4gKiBAcGFyYW0gICAgIG5hbWUgICAgIG5hbWUgb2YgdGhlIG91dHB1dCB0byBzZXRcbiAqIEBwYXJhbSAgICAgdmFsdWUgICAgdmFsdWUgdG8gc3RvcmUuIE5vbi1zdHJpbmcgdmFsdWVzIHdpbGwgYmUgY29udmVydGVkIHRvIGEgc3RyaW5nIHZpYSBKU09OLnN0cmluZ2lmeVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZnVuY3Rpb24gc2V0T3V0cHV0KG5hbWUsIHZhbHVlKSB7XG4gICAgY29uc3QgZmlsZVBhdGggPSBwcm9jZXNzLmVudlsnR0lUSFVCX09VVFBVVCddIHx8ICcnO1xuICAgIGlmIChmaWxlUGF0aCkge1xuICAgICAgICByZXR1cm4gKDAsIGZpbGVfY29tbWFuZF8xLmlzc3VlRmlsZUNvbW1hbmQpKCdPVVRQVVQnLCAoMCwgZmlsZV9jb21tYW5kXzEucHJlcGFyZUtleVZhbHVlTWVzc2FnZSkobmFtZSwgdmFsdWUpKTtcbiAgICB9XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUob3MuRU9MKTtcbiAgICAoMCwgY29tbWFuZF8xLmlzc3VlQ29tbWFuZCkoJ3NldC1vdXRwdXQnLCB7IG5hbWUgfSwgKDAsIHV0aWxzXzEudG9Db21tYW5kVmFsdWUpKHZhbHVlKSk7XG59XG5leHBvcnRzLnNldE91dHB1dCA9IHNldE91dHB1dDtcbi8qKlxuICogRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgZWNob2luZyBvZiBjb21tYW5kcyBpbnRvIHN0ZG91dCBmb3IgdGhlIHJlc3Qgb2YgdGhlIHN0ZXAuXG4gKiBFY2hvaW5nIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQgaWYgQUNUSU9OU19TVEVQX0RFQlVHIGlzIG5vdCBzZXQuXG4gKlxuICovXG5mdW5jdGlvbiBzZXRDb21tYW5kRWNobyhlbmFibGVkKSB7XG4gICAgKDAsIGNvbW1hbmRfMS5pc3N1ZSkoJ2VjaG8nLCBlbmFibGVkID8gJ29uJyA6ICdvZmYnKTtcbn1cbmV4cG9ydHMuc2V0Q29tbWFuZEVjaG8gPSBzZXRDb21tYW5kRWNobztcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJlc3VsdHNcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8qKlxuICogU2V0cyB0aGUgYWN0aW9uIHN0YXR1cyB0byBmYWlsZWQuXG4gKiBXaGVuIHRoZSBhY3Rpb24gZXhpdHMgaXQgd2lsbCBiZSB3aXRoIGFuIGV4aXQgY29kZSBvZiAxXG4gKiBAcGFyYW0gbWVzc2FnZSBhZGQgZXJyb3IgaXNzdWUgbWVzc2FnZVxuICovXG5mdW5jdGlvbiBzZXRGYWlsZWQobWVzc2FnZSkge1xuICAgIHByb2Nlc3MuZXhpdENvZGUgPSBFeGl0Q29kZS5GYWlsdXJlO1xuICAgIGVycm9yKG1lc3NhZ2UpO1xufVxuZXhwb3J0cy5zZXRGYWlsZWQgPSBzZXRGYWlsZWQ7XG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBMb2dnaW5nIENvbW1hbmRzXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vKipcbiAqIEdldHMgd2hldGhlciBBY3Rpb25zIFN0ZXAgRGVidWcgaXMgb24gb3Igbm90XG4gKi9cbmZ1bmN0aW9uIGlzRGVidWcoKSB7XG4gICAgcmV0dXJuIHByb2Nlc3MuZW52WydSVU5ORVJfREVCVUcnXSA9PT0gJzEnO1xufVxuZXhwb3J0cy5pc0RlYnVnID0gaXNEZWJ1Zztcbi8qKlxuICogV3JpdGVzIGRlYnVnIG1lc3NhZ2UgdG8gdXNlciBsb2dcbiAqIEBwYXJhbSBtZXNzYWdlIGRlYnVnIG1lc3NhZ2VcbiAqL1xuZnVuY3Rpb24gZGVidWcobWVzc2FnZSkge1xuICAgICgwLCBjb21tYW5kXzEuaXNzdWVDb21tYW5kKSgnZGVidWcnLCB7fSwgbWVzc2FnZSk7XG59XG5leHBvcnRzLmRlYnVnID0gZGVidWc7XG4vKipcbiAqIEFkZHMgYW4gZXJyb3IgaXNzdWVcbiAqIEBwYXJhbSBtZXNzYWdlIGVycm9yIGlzc3VlIG1lc3NhZ2UuIEVycm9ycyB3aWxsIGJlIGNvbnZlcnRlZCB0byBzdHJpbmcgdmlhIHRvU3RyaW5nKClcbiAqIEBwYXJhbSBwcm9wZXJ0aWVzIG9wdGlvbmFsIHByb3BlcnRpZXMgdG8gYWRkIHRvIHRoZSBhbm5vdGF0aW9uLlxuICovXG5mdW5jdGlvbiBlcnJvcihtZXNzYWdlLCBwcm9wZXJ0aWVzID0ge30pIHtcbiAgICAoMCwgY29tbWFuZF8xLmlzc3VlQ29tbWFuZCkoJ2Vycm9yJywgKDAsIHV0aWxzXzEudG9Db21tYW5kUHJvcGVydGllcykocHJvcGVydGllcyksIG1lc3NhZ2UgaW5zdGFuY2VvZiBFcnJvciA/IG1lc3NhZ2UudG9TdHJpbmcoKSA6IG1lc3NhZ2UpO1xufVxuZXhwb3J0cy5lcnJvciA9IGVycm9yO1xuLyoqXG4gKiBBZGRzIGEgd2FybmluZyBpc3N1ZVxuICogQHBhcmFtIG1lc3NhZ2Ugd2FybmluZyBpc3N1ZSBtZXNzYWdlLiBFcnJvcnMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gc3RyaW5nIHZpYSB0b1N0cmluZygpXG4gKiBAcGFyYW0gcHJvcGVydGllcyBvcHRpb25hbCBwcm9wZXJ0aWVzIHRvIGFkZCB0byB0aGUgYW5ub3RhdGlvbi5cbiAqL1xuZnVuY3Rpb24gd2FybmluZyhtZXNzYWdlLCBwcm9wZXJ0aWVzID0ge30pIHtcbiAgICAoMCwgY29tbWFuZF8xLmlzc3VlQ29tbWFuZCkoJ3dhcm5pbmcnLCAoMCwgdXRpbHNfMS50b0NvbW1hbmRQcm9wZXJ0aWVzKShwcm9wZXJ0aWVzKSwgbWVzc2FnZSBpbnN0YW5jZW9mIEVycm9yID8gbWVzc2FnZS50b1N0cmluZygpIDogbWVzc2FnZSk7XG59XG5leHBvcnRzLndhcm5pbmcgPSB3YXJuaW5nO1xuLyoqXG4gKiBBZGRzIGEgbm90aWNlIGlzc3VlXG4gKiBAcGFyYW0gbWVzc2FnZSBub3RpY2UgaXNzdWUgbWVzc2FnZS4gRXJyb3JzIHdpbGwgYmUgY29udmVydGVkIHRvIHN0cmluZyB2aWEgdG9TdHJpbmcoKVxuICogQHBhcmFtIHByb3BlcnRpZXMgb3B0aW9uYWwgcHJvcGVydGllcyB0byBhZGQgdG8gdGhlIGFubm90YXRpb24uXG4gKi9cbmZ1bmN0aW9uIG5vdGljZShtZXNzYWdlLCBwcm9wZXJ0aWVzID0ge30pIHtcbiAgICAoMCwgY29tbWFuZF8xLmlzc3VlQ29tbWFuZCkoJ25vdGljZScsICgwLCB1dGlsc18xLnRvQ29tbWFuZFByb3BlcnRpZXMpKHByb3BlcnRpZXMpLCBtZXNzYWdlIGluc3RhbmNlb2YgRXJyb3IgPyBtZXNzYWdlLnRvU3RyaW5nKCkgOiBtZXNzYWdlKTtcbn1cbmV4cG9ydHMubm90aWNlID0gbm90aWNlO1xuLyoqXG4gKiBXcml0ZXMgaW5mbyB0byBsb2cgd2l0aCBjb25zb2xlLmxvZy5cbiAqIEBwYXJhbSBtZXNzYWdlIGluZm8gbWVzc2FnZVxuICovXG5mdW5jdGlvbiBpbmZvKG1lc3NhZ2UpIHtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShtZXNzYWdlICsgb3MuRU9MKTtcbn1cbmV4cG9ydHMuaW5mbyA9IGluZm87XG4vKipcbiAqIEJlZ2luIGFuIG91dHB1dCBncm91cC5cbiAqXG4gKiBPdXRwdXQgdW50aWwgdGhlIG5leHQgYGdyb3VwRW5kYCB3aWxsIGJlIGZvbGRhYmxlIGluIHRoaXMgZ3JvdXBcbiAqXG4gKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgb3V0cHV0IGdyb3VwXG4gKi9cbmZ1bmN0aW9uIHN0YXJ0R3JvdXAobmFtZSkge1xuICAgICgwLCBjb21tYW5kXzEuaXNzdWUpKCdncm91cCcsIG5hbWUpO1xufVxuZXhwb3J0cy5zdGFydEdyb3VwID0gc3RhcnRHcm91cDtcbi8qKlxuICogRW5kIGFuIG91dHB1dCBncm91cC5cbiAqL1xuZnVuY3Rpb24gZW5kR3JvdXAoKSB7XG4gICAgKDAsIGNvbW1hbmRfMS5pc3N1ZSkoJ2VuZGdyb3VwJyk7XG59XG5leHBvcnRzLmVuZEdyb3VwID0gZW5kR3JvdXA7XG4vKipcbiAqIFdyYXAgYW4gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIGNhbGwgaW4gYSBncm91cC5cbiAqXG4gKiBSZXR1cm5zIHRoZSBzYW1lIHR5cGUgYXMgdGhlIGZ1bmN0aW9uIGl0c2VsZi5cbiAqXG4gKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgZ3JvdXBcbiAqIEBwYXJhbSBmbiBUaGUgZnVuY3Rpb24gdG8gd3JhcCBpbiB0aGUgZ3JvdXBcbiAqL1xuZnVuY3Rpb24gZ3JvdXAobmFtZSwgZm4pIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBzdGFydEdyb3VwKG5hbWUpO1xuICAgICAgICBsZXQgcmVzdWx0O1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmVzdWx0ID0geWllbGQgZm4oKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIGVuZEdyb3VwKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZ3JvdXAgPSBncm91cDtcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFdyYXBwZXIgYWN0aW9uIHN0YXRlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vKipcbiAqIFNhdmVzIHN0YXRlIGZvciBjdXJyZW50IGFjdGlvbiwgdGhlIHN0YXRlIGNhbiBvbmx5IGJlIHJldHJpZXZlZCBieSB0aGlzIGFjdGlvbidzIHBvc3Qgam9iIGV4ZWN1dGlvbi5cbiAqXG4gKiBAcGFyYW0gICAgIG5hbWUgICAgIG5hbWUgb2YgdGhlIHN0YXRlIHRvIHN0b3JlXG4gKiBAcGFyYW0gICAgIHZhbHVlICAgIHZhbHVlIHRvIHN0b3JlLiBOb24tc3RyaW5nIHZhbHVlcyB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIHN0cmluZyB2aWEgSlNPTi5zdHJpbmdpZnlcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmZ1bmN0aW9uIHNhdmVTdGF0ZShuYW1lLCB2YWx1ZSkge1xuICAgIGNvbnN0IGZpbGVQYXRoID0gcHJvY2Vzcy5lbnZbJ0dJVEhVQl9TVEFURSddIHx8ICcnO1xuICAgIGlmIChmaWxlUGF0aCkge1xuICAgICAgICByZXR1cm4gKDAsIGZpbGVfY29tbWFuZF8xLmlzc3VlRmlsZUNvbW1hbmQpKCdTVEFURScsICgwLCBmaWxlX2NvbW1hbmRfMS5wcmVwYXJlS2V5VmFsdWVNZXNzYWdlKShuYW1lLCB2YWx1ZSkpO1xuICAgIH1cbiAgICAoMCwgY29tbWFuZF8xLmlzc3VlQ29tbWFuZCkoJ3NhdmUtc3RhdGUnLCB7IG5hbWUgfSwgKDAsIHV0aWxzXzEudG9Db21tYW5kVmFsdWUpKHZhbHVlKSk7XG59XG5leHBvcnRzLnNhdmVTdGF0ZSA9IHNhdmVTdGF0ZTtcbi8qKlxuICogR2V0cyB0aGUgdmFsdWUgb2YgYW4gc3RhdGUgc2V0IGJ5IHRoaXMgYWN0aW9uJ3MgbWFpbiBleGVjdXRpb24uXG4gKlxuICogQHBhcmFtICAgICBuYW1lICAgICBuYW1lIG9mIHRoZSBzdGF0ZSB0byBnZXRcbiAqIEByZXR1cm5zICAgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGdldFN0YXRlKG5hbWUpIHtcbiAgICByZXR1cm4gcHJvY2Vzcy5lbnZbYFNUQVRFXyR7bmFtZX1gXSB8fCAnJztcbn1cbmV4cG9ydHMuZ2V0U3RhdGUgPSBnZXRTdGF0ZTtcbmZ1bmN0aW9uIGdldElEVG9rZW4oYXVkKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgcmV0dXJuIHlpZWxkIG9pZGNfdXRpbHNfMS5PaWRjQ2xpZW50LmdldElEVG9rZW4oYXVkKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZ2V0SURUb2tlbiA9IGdldElEVG9rZW47XG4vKipcbiAqIFN1bW1hcnkgZXhwb3J0c1xuICovXG52YXIgc3VtbWFyeV8xID0gcmVxdWlyZShcIi4vc3VtbWFyeVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN1bW1hcnlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN1bW1hcnlfMS5zdW1tYXJ5OyB9IH0pO1xuLyoqXG4gKiBAZGVwcmVjYXRlZCB1c2UgY29yZS5zdW1tYXJ5XG4gKi9cbnZhciBzdW1tYXJ5XzIgPSByZXF1aXJlKFwiLi9zdW1tYXJ5XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibWFya2Rvd25TdW1tYXJ5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzdW1tYXJ5XzIubWFya2Rvd25TdW1tYXJ5OyB9IH0pO1xuLyoqXG4gKiBQYXRoIGV4cG9ydHNcbiAqL1xudmFyIHBhdGhfdXRpbHNfMSA9IHJlcXVpcmUoXCIuL3BhdGgtdXRpbHNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0b1Bvc2l4UGF0aFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcGF0aF91dGlsc18xLnRvUG9zaXhQYXRoOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidG9XaW4zMlBhdGhcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBhdGhfdXRpbHNfMS50b1dpbjMyUGF0aDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRvUGxhdGZvcm1QYXRoXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwYXRoX3V0aWxzXzEudG9QbGF0Zm9ybVBhdGg7IH0gfSk7XG4vKipcbiAqIFBsYXRmb3JtIHV0aWxpdGllcyBleHBvcnRzXG4gKi9cbmV4cG9ydHMucGxhdGZvcm0gPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIi4vcGxhdGZvcm1cIikpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29yZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRVcGxvYWRDaHVua1RpbWVvdXQgPSBleHBvcnRzLmdldENvbmN1cnJlbmN5ID0gZXhwb3J0cy5nZXRHaXRIdWJXb3Jrc3BhY2VEaXIgPSBleHBvcnRzLmlzR2hlcyA9IGV4cG9ydHMuZ2V0UmVzdWx0c1NlcnZpY2VVcmwgPSBleHBvcnRzLmdldFJ1bnRpbWVUb2tlbiA9IGV4cG9ydHMuZ2V0VXBsb2FkQ2h1bmtTaXplID0gdm9pZCAwO1xuY29uc3Qgb3NfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwib3NcIikpO1xuLy8gVXNlZCBmb3IgY29udHJvbGxpbmcgdGhlIGhpZ2hXYXRlck1hcmsgdmFsdWUgb2YgdGhlIHppcCB0aGF0IGlzIGJlaW5nIHN0cmVhbWVkXG4vLyBUaGUgc2FtZSB2YWx1ZSBpcyB1c2VkIGFzIHRoZSBjaHVuayBzaXplIHRoYXQgaXMgdXNlIGR1cmluZyB1cGxvYWQgdG8gYmxvYiBzdG9yYWdlXG5mdW5jdGlvbiBnZXRVcGxvYWRDaHVua1NpemUoKSB7XG4gICAgcmV0dXJuIDggKiAxMDI0ICogMTAyNDsgLy8gOCBNQiBDaHVua3Ncbn1cbmV4cG9ydHMuZ2V0VXBsb2FkQ2h1bmtTaXplID0gZ2V0VXBsb2FkQ2h1bmtTaXplO1xuZnVuY3Rpb24gZ2V0UnVudGltZVRva2VuKCkge1xuICAgIGNvbnN0IHRva2VuID0gcHJvY2Vzcy5lbnZbJ0FDVElPTlNfUlVOVElNRV9UT0tFTiddO1xuICAgIGlmICghdG9rZW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gZ2V0IHRoZSBBQ1RJT05TX1JVTlRJTUVfVE9LRU4gZW52IHZhcmlhYmxlJyk7XG4gICAgfVxuICAgIHJldHVybiB0b2tlbjtcbn1cbmV4cG9ydHMuZ2V0UnVudGltZVRva2VuID0gZ2V0UnVudGltZVRva2VuO1xuZnVuY3Rpb24gZ2V0UmVzdWx0c1NlcnZpY2VVcmwoKSB7XG4gICAgY29uc3QgcmVzdWx0c1VybCA9IHByb2Nlc3MuZW52WydBQ1RJT05TX1JFU1VMVFNfVVJMJ107XG4gICAgaWYgKCFyZXN1bHRzVXJsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGdldCB0aGUgQUNUSU9OU19SRVNVTFRTX1VSTCBlbnYgdmFyaWFibGUnKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBVUkwocmVzdWx0c1VybCkub3JpZ2luO1xufVxuZXhwb3J0cy5nZXRSZXN1bHRzU2VydmljZVVybCA9IGdldFJlc3VsdHNTZXJ2aWNlVXJsO1xuZnVuY3Rpb24gaXNHaGVzKCkge1xuICAgIGNvbnN0IGdoVXJsID0gbmV3IFVSTChwcm9jZXNzLmVudlsnR0lUSFVCX1NFUlZFUl9VUkwnXSB8fCAnaHR0cHM6Ly9naXRodWIuY29tJyk7XG4gICAgY29uc3QgaG9zdG5hbWUgPSBnaFVybC5ob3N0bmFtZS50cmltRW5kKCkudG9VcHBlckNhc2UoKTtcbiAgICBjb25zdCBpc0dpdEh1Ykhvc3QgPSBob3N0bmFtZSA9PT0gJ0dJVEhVQi5DT00nO1xuICAgIGNvbnN0IGlzR2hlSG9zdCA9IGhvc3RuYW1lLmVuZHNXaXRoKCcuR0hFLkNPTScpO1xuICAgIGNvbnN0IGlzTG9jYWxIb3N0ID0gaG9zdG5hbWUuZW5kc1dpdGgoJy5MT0NBTEhPU1QnKTtcbiAgICByZXR1cm4gIWlzR2l0SHViSG9zdCAmJiAhaXNHaGVIb3N0ICYmICFpc0xvY2FsSG9zdDtcbn1cbmV4cG9ydHMuaXNHaGVzID0gaXNHaGVzO1xuZnVuY3Rpb24gZ2V0R2l0SHViV29ya3NwYWNlRGlyKCkge1xuICAgIGNvbnN0IGdoV29ya3NwYWNlRGlyID0gcHJvY2Vzcy5lbnZbJ0dJVEhVQl9XT1JLU1BBQ0UnXTtcbiAgICBpZiAoIWdoV29ya3NwYWNlRGlyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGdldCB0aGUgR0lUSFVCX1dPUktTUEFDRSBlbnYgdmFyaWFibGUnKTtcbiAgICB9XG4gICAgcmV0dXJuIGdoV29ya3NwYWNlRGlyO1xufVxuZXhwb3J0cy5nZXRHaXRIdWJXb3Jrc3BhY2VEaXIgPSBnZXRHaXRIdWJXb3Jrc3BhY2VEaXI7XG4vLyBNaW1pY3MgYmVoYXZpb3Igb2YgYXpjb3B5OiBodHRwczovL2xlYXJuLm1pY3Jvc29mdC5jb20vZW4tdXMvYXp1cmUvc3RvcmFnZS9jb21tb24vc3RvcmFnZS11c2UtYXpjb3B5LW9wdGltaXplXG4vLyBJZiB5b3VyIG1hY2hpbmUgaGFzIGZld2VyIHRoYW4gNSBDUFVzLCB0aGVuIHRoZSB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlIGlzIHNldCB0byAzMi5cbi8vIE90aGVyd2lzZSwgdGhlIGRlZmF1bHQgdmFsdWUgaXMgZXF1YWwgdG8gMTYgbXVsdGlwbGllZCBieSB0aGUgbnVtYmVyIG9mIENQVXMuIFRoZSBtYXhpbXVtIHZhbHVlIG9mIHRoaXMgdmFyaWFibGUgaXMgMzAwLlxuZnVuY3Rpb24gZ2V0Q29uY3VycmVuY3koKSB7XG4gICAgY29uc3QgbnVtQ1BVcyA9IG9zXzEuZGVmYXVsdC5jcHVzKCkubGVuZ3RoO1xuICAgIGlmIChudW1DUFVzIDw9IDQpIHtcbiAgICAgICAgcmV0dXJuIDMyO1xuICAgIH1cbiAgICBjb25zdCBjb25jdXJyZW5jeSA9IDE2ICogbnVtQ1BVcztcbiAgICByZXR1cm4gY29uY3VycmVuY3kgPiAzMDAgPyAzMDAgOiBjb25jdXJyZW5jeTtcbn1cbmV4cG9ydHMuZ2V0Q29uY3VycmVuY3kgPSBnZXRDb25jdXJyZW5jeTtcbmZ1bmN0aW9uIGdldFVwbG9hZENodW5rVGltZW91dCgpIHtcbiAgICByZXR1cm4gMzAwMDAwOyAvLyA1IG1pbnV0ZXNcbn1cbmV4cG9ydHMuZ2V0VXBsb2FkQ2h1bmtUaW1lb3V0ID0gZ2V0VXBsb2FkQ2h1bmtUaW1lb3V0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uZmlnLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlzSnNvbk9iamVjdCA9IGV4cG9ydHMudHlwZW9mSnNvblZhbHVlID0gdm9pZCAwO1xuLyoqXG4gKiBHZXQgdGhlIHR5cGUgb2YgYSBKU09OIHZhbHVlLlxuICogRGlzdGluZ3Vpc2hlcyBiZXR3ZWVuIGFycmF5LCBudWxsIGFuZCBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIHR5cGVvZkpzb25WYWx1ZSh2YWx1ZSkge1xuICAgIGxldCB0ID0gdHlwZW9mIHZhbHVlO1xuICAgIGlmICh0ID09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKVxuICAgICAgICAgICAgcmV0dXJuIFwiYXJyYXlcIjtcbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKVxuICAgICAgICAgICAgcmV0dXJuIFwibnVsbFwiO1xuICAgIH1cbiAgICByZXR1cm4gdDtcbn1cbmV4cG9ydHMudHlwZW9mSnNvblZhbHVlID0gdHlwZW9mSnNvblZhbHVlO1xuLyoqXG4gKiBJcyB0aGlzIGEgSlNPTiBvYmplY3QgKGluc3RlYWQgb2YgYW4gYXJyYXkgb3IgbnVsbCk/XG4gKi9cbmZ1bmN0aW9uIGlzSnNvbk9iamVjdCh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG59XG5leHBvcnRzLmlzSnNvbk9iamVjdCA9IGlzSnNvbk9iamVjdDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmJhc2U2NGVuY29kZSA9IGV4cG9ydHMuYmFzZTY0ZGVjb2RlID0gdm9pZCAwO1xuLy8gbG9va3VwIHRhYmxlIGZyb20gYmFzZTY0IGNoYXJhY3RlciB0byBieXRlXG5sZXQgZW5jVGFibGUgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLycuc3BsaXQoJycpO1xuLy8gbG9va3VwIHRhYmxlIGZyb20gYmFzZTY0IGNoYXJhY3RlciAqY29kZSogdG8gYnl0ZSBiZWNhdXNlIGxvb2t1cCBieSBudW1iZXIgaXMgZmFzdFxubGV0IGRlY1RhYmxlID0gW107XG5mb3IgKGxldCBpID0gMDsgaSA8IGVuY1RhYmxlLmxlbmd0aDsgaSsrKVxuICAgIGRlY1RhYmxlW2VuY1RhYmxlW2ldLmNoYXJDb2RlQXQoMCldID0gaTtcbi8vIHN1cHBvcnQgYmFzZTY0dXJsIHZhcmlhbnRzXG5kZWNUYWJsZVtcIi1cIi5jaGFyQ29kZUF0KDApXSA9IGVuY1RhYmxlLmluZGV4T2YoXCIrXCIpO1xuZGVjVGFibGVbXCJfXCIuY2hhckNvZGVBdCgwKV0gPSBlbmNUYWJsZS5pbmRleE9mKFwiL1wiKTtcbi8qKlxuICogRGVjb2RlcyBhIGJhc2U2NCBzdHJpbmcgdG8gYSBieXRlIGFycmF5LlxuICpcbiAqIC0gaWdub3JlcyB3aGl0ZS1zcGFjZSwgaW5jbHVkaW5nIGxpbmUgYnJlYWtzIGFuZCB0YWJzXG4gKiAtIGFsbG93cyBpbm5lciBwYWRkaW5nIChjYW4gZGVjb2RlIGNvbmNhdGVuYXRlZCBiYXNlNjQgc3RyaW5ncylcbiAqIC0gZG9lcyBub3QgcmVxdWlyZSBwYWRkaW5nXG4gKiAtIHVuZGVyc3RhbmRzIGJhc2U2NHVybCBlbmNvZGluZzpcbiAqICAgXCItXCIgaW5zdGVhZCBvZiBcIitcIixcbiAqICAgXCJfXCIgaW5zdGVhZCBvZiBcIi9cIixcbiAqICAgbm8gcGFkZGluZ1xuICovXG5mdW5jdGlvbiBiYXNlNjRkZWNvZGUoYmFzZTY0U3RyKSB7XG4gICAgLy8gZXN0aW1hdGUgYnl0ZSBzaXplLCBub3QgYWNjb3VudGluZyBmb3IgaW5uZXIgcGFkZGluZyBhbmQgd2hpdGVzcGFjZVxuICAgIGxldCBlcyA9IGJhc2U2NFN0ci5sZW5ndGggKiAzIC8gNDtcbiAgICAvLyBpZiAoZXMgJSAzICE9PSAwKVxuICAgIC8vIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBiYXNlNjQgc3RyaW5nJyk7XG4gICAgaWYgKGJhc2U2NFN0cltiYXNlNjRTdHIubGVuZ3RoIC0gMl0gPT0gJz0nKVxuICAgICAgICBlcyAtPSAyO1xuICAgIGVsc2UgaWYgKGJhc2U2NFN0cltiYXNlNjRTdHIubGVuZ3RoIC0gMV0gPT0gJz0nKVxuICAgICAgICBlcyAtPSAxO1xuICAgIGxldCBieXRlcyA9IG5ldyBVaW50OEFycmF5KGVzKSwgYnl0ZVBvcyA9IDAsIC8vIHBvc2l0aW9uIGluIGJ5dGUgYXJyYXlcbiAgICBncm91cFBvcyA9IDAsIC8vIHBvc2l0aW9uIGluIGJhc2U2NCBncm91cFxuICAgIGIsIC8vIGN1cnJlbnQgYnl0ZVxuICAgIHAgPSAwIC8vIHByZXZpb3VzIGJ5dGVcbiAgICA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiYXNlNjRTdHIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYiA9IGRlY1RhYmxlW2Jhc2U2NFN0ci5jaGFyQ29kZUF0KGkpXTtcbiAgICAgICAgaWYgKGIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gbm9pbnNwZWN0aW9uIEZhbGxUaHJvdWdoSW5Td2l0Y2hTdGF0ZW1lbnRKU1xuICAgICAgICAgICAgc3dpdGNoIChiYXNlNjRTdHJbaV0pIHtcbiAgICAgICAgICAgICAgICBjYXNlICc9JzpcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBQb3MgPSAwOyAvLyByZXNldCBzdGF0ZSB3aGVuIHBhZGRpbmcgZm91bmRcbiAgICAgICAgICAgICAgICBjYXNlICdcXG4nOlxuICAgICAgICAgICAgICAgIGNhc2UgJ1xccic6XG4gICAgICAgICAgICAgICAgY2FzZSAnXFx0JzpcbiAgICAgICAgICAgICAgICBjYXNlICcgJzpcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7IC8vIHNraXAgd2hpdGUtc3BhY2UsIGFuZCBwYWRkaW5nXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoYGludmFsaWQgYmFzZTY0IHN0cmluZy5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKGdyb3VwUG9zKSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgcCA9IGI7XG4gICAgICAgICAgICAgICAgZ3JvdXBQb3MgPSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgIGJ5dGVzW2J5dGVQb3MrK10gPSBwIDw8IDIgfCAoYiAmIDQ4KSA+PiA0O1xuICAgICAgICAgICAgICAgIHAgPSBiO1xuICAgICAgICAgICAgICAgIGdyb3VwUG9zID0gMjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICBieXRlc1tieXRlUG9zKytdID0gKHAgJiAxNSkgPDwgNCB8IChiICYgNjApID4+IDI7XG4gICAgICAgICAgICAgICAgcCA9IGI7XG4gICAgICAgICAgICAgICAgZ3JvdXBQb3MgPSAzO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgIGJ5dGVzW2J5dGVQb3MrK10gPSAocCAmIDMpIDw8IDYgfCBiO1xuICAgICAgICAgICAgICAgIGdyb3VwUG9zID0gMDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoZ3JvdXBQb3MgPT0gMSlcbiAgICAgICAgdGhyb3cgRXJyb3IoYGludmFsaWQgYmFzZTY0IHN0cmluZy5gKTtcbiAgICByZXR1cm4gYnl0ZXMuc3ViYXJyYXkoMCwgYnl0ZVBvcyk7XG59XG5leHBvcnRzLmJhc2U2NGRlY29kZSA9IGJhc2U2NGRlY29kZTtcbi8qKlxuICogRW5jb2RlcyBhIGJ5dGUgYXJyYXkgdG8gYSBiYXNlNjQgc3RyaW5nLlxuICogQWRkcyBwYWRkaW5nIGF0IHRoZSBlbmQuXG4gKiBEb2VzIG5vdCBpbnNlcnQgbmV3bGluZXMuXG4gKi9cbmZ1bmN0aW9uIGJhc2U2NGVuY29kZShieXRlcykge1xuICAgIGxldCBiYXNlNjQgPSAnJywgZ3JvdXBQb3MgPSAwLCAvLyBwb3NpdGlvbiBpbiBiYXNlNjQgZ3JvdXBcbiAgICBiLCAvLyBjdXJyZW50IGJ5dGVcbiAgICBwID0gMDsgLy8gY2Fycnkgb3ZlciBmcm9tIHByZXZpb3VzIGJ5dGVcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGIgPSBieXRlc1tpXTtcbiAgICAgICAgc3dpdGNoIChncm91cFBvcykge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgIGJhc2U2NCArPSBlbmNUYWJsZVtiID4+IDJdO1xuICAgICAgICAgICAgICAgIHAgPSAoYiAmIDMpIDw8IDQ7XG4gICAgICAgICAgICAgICAgZ3JvdXBQb3MgPSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgIGJhc2U2NCArPSBlbmNUYWJsZVtwIHwgYiA+PiA0XTtcbiAgICAgICAgICAgICAgICBwID0gKGIgJiAxNSkgPDwgMjtcbiAgICAgICAgICAgICAgICBncm91cFBvcyA9IDI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgYmFzZTY0ICs9IGVuY1RhYmxlW3AgfCBiID4+IDZdO1xuICAgICAgICAgICAgICAgIGJhc2U2NCArPSBlbmNUYWJsZVtiICYgNjNdO1xuICAgICAgICAgICAgICAgIGdyb3VwUG9zID0gMDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBwYWRkaW5nIHJlcXVpcmVkP1xuICAgIGlmIChncm91cFBvcykge1xuICAgICAgICBiYXNlNjQgKz0gZW5jVGFibGVbcF07XG4gICAgICAgIGJhc2U2NCArPSAnPSc7XG4gICAgICAgIGlmIChncm91cFBvcyA9PSAxKVxuICAgICAgICAgICAgYmFzZTY0ICs9ICc9JztcbiAgICB9XG4gICAgcmV0dXJuIGJhc2U2NDtcbn1cbmV4cG9ydHMuYmFzZTY0ZW5jb2RlID0gYmFzZTY0ZW5jb2RlO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgMjAxNiwgRGFuaWVsIFdpcnR6ICBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy9cbi8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZVxuLy8gbWV0OlxuLy9cbi8vICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbi8vICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuLy8gKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodFxuLy8gICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlXG4vLyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4vLyAqIE5laXRoZXIgdGhlIG5hbWUgb2YgaXRzIGF1dGhvciwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzXG4vLyAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZVxuLy8gICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cbi8vXG4vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTXG4vLyBcIkFTIElTXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UXG4vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Jcbi8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUXG4vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCxcbi8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Rcbi8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLFxuLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZXG4vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Vcbi8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnV0ZjhyZWFkID0gdm9pZCAwO1xuY29uc3QgZnJvbUNoYXJDb2RlcyA9IChjaHVuaykgPT4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsIGNodW5rKTtcbi8qKlxuICogQGRlcHJlY2F0ZWQgVGhpcyBmdW5jdGlvbiB3aWxsIG5vIGxvbmdlciBiZSBleHBvcnRlZCB3aXRoIHRoZSBuZXh0IG1ham9yXG4gKiByZWxlYXNlLCBzaW5jZSBwcm90b2J1Zi10cyBoYXMgc3dpdGNoIHRvIFRleHREZWNvZGVyIEFQSS4gSWYgeW91IG5lZWQgdGhpc1xuICogZnVuY3Rpb24sIHBsZWFzZSBtaWdyYXRlIHRvIEBwcm90b2J1ZmpzL3V0ZjguIEZvciBjb250ZXh0LCBzZWVcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS90aW1vc3RhbW0vcHJvdG9idWYtdHMvaXNzdWVzLzE4NFxuICpcbiAqIFJlYWRzIFVURjggYnl0ZXMgYXMgYSBzdHJpbmcuXG4gKlxuICogU2VlIFtwcm90b2J1ZmpzIC8gdXRmOF0oaHR0cHM6Ly9naXRodWIuY29tL3Byb3RvYnVmanMvcHJvdG9idWYuanMvYmxvYi85ODkzZTM1Yjg1NDYyMWNjZTY0YWY0YmY2YmUyY2ZmNGZiODkyNzk2L2xpYi91dGY4L2luZGV4LmpzI0w0MClcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTYsIERhbmllbCBXaXJ0elxuICovXG5mdW5jdGlvbiB1dGY4cmVhZChieXRlcykge1xuICAgIGlmIChieXRlcy5sZW5ndGggPCAxKVxuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICBsZXQgcG9zID0gMCwgLy8gcG9zaXRpb24gaW4gYnl0ZXNcbiAgICBwYXJ0cyA9IFtdLCBjaHVuayA9IFtdLCBpID0gMCwgLy8gY2hhciBvZmZzZXRcbiAgICB0OyAvLyB0ZW1wb3JhcnlcbiAgICBsZXQgbGVuID0gYnl0ZXMubGVuZ3RoO1xuICAgIHdoaWxlIChwb3MgPCBsZW4pIHtcbiAgICAgICAgdCA9IGJ5dGVzW3BvcysrXTtcbiAgICAgICAgaWYgKHQgPCAxMjgpXG4gICAgICAgICAgICBjaHVua1tpKytdID0gdDtcbiAgICAgICAgZWxzZSBpZiAodCA+IDE5MSAmJiB0IDwgMjI0KVxuICAgICAgICAgICAgY2h1bmtbaSsrXSA9ICh0ICYgMzEpIDw8IDYgfCBieXRlc1twb3MrK10gJiA2MztcbiAgICAgICAgZWxzZSBpZiAodCA+IDIzOSAmJiB0IDwgMzY1KSB7XG4gICAgICAgICAgICB0ID0gKCh0ICYgNykgPDwgMTggfCAoYnl0ZXNbcG9zKytdICYgNjMpIDw8IDEyIHwgKGJ5dGVzW3BvcysrXSAmIDYzKSA8PCA2IHwgYnl0ZXNbcG9zKytdICYgNjMpIC0gMHgxMDAwMDtcbiAgICAgICAgICAgIGNodW5rW2krK10gPSAweEQ4MDAgKyAodCA+PiAxMCk7XG4gICAgICAgICAgICBjaHVua1tpKytdID0gMHhEQzAwICsgKHQgJiAxMDIzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgICBjaHVua1tpKytdID0gKHQgJiAxNSkgPDwgMTIgfCAoYnl0ZXNbcG9zKytdICYgNjMpIDw8IDYgfCBieXRlc1twb3MrK10gJiA2MztcbiAgICAgICAgaWYgKGkgPiA4MTkxKSB7XG4gICAgICAgICAgICBwYXJ0cy5wdXNoKGZyb21DaGFyQ29kZXMoY2h1bmspKTtcbiAgICAgICAgICAgIGkgPSAwO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChwYXJ0cy5sZW5ndGgpIHtcbiAgICAgICAgaWYgKGkpXG4gICAgICAgICAgICBwYXJ0cy5wdXNoKGZyb21DaGFyQ29kZXMoY2h1bmsuc2xpY2UoMCwgaSkpKTtcbiAgICAgICAgcmV0dXJuIHBhcnRzLmpvaW4oXCJcIik7XG4gICAgfVxuICAgIHJldHVybiBmcm9tQ2hhckNvZGVzKGNodW5rLnNsaWNlKDAsIGkpKTtcbn1cbmV4cG9ydHMudXRmOHJlYWQgPSB1dGY4cmVhZDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLldpcmVUeXBlID0gZXhwb3J0cy5tZXJnZUJpbmFyeU9wdGlvbnMgPSBleHBvcnRzLlVua25vd25GaWVsZEhhbmRsZXIgPSB2b2lkIDA7XG4vKipcbiAqIFRoaXMgaGFuZGxlciBpbXBsZW1lbnRzIHRoZSBkZWZhdWx0IGJlaGF2aW91ciBmb3IgdW5rbm93biBmaWVsZHMuXG4gKiBXaGVuIHJlYWRpbmcgZGF0YSwgdW5rbm93biBmaWVsZHMgYXJlIHN0b3JlZCBvbiB0aGUgbWVzc2FnZSwgaW4gYVxuICogc3ltYm9sIHByb3BlcnR5LlxuICogV2hlbiB3cml0aW5nIGRhdGEsIHRoZSBzeW1ib2wgcHJvcGVydHkgaXMgcXVlcmllZCBhbmQgdW5rbm93biBmaWVsZHNcbiAqIGFyZSBzZXJpYWxpemVkIGludG8gdGhlIG91dHB1dCBhZ2Fpbi5cbiAqL1xudmFyIFVua25vd25GaWVsZEhhbmRsZXI7XG4oZnVuY3Rpb24gKFVua25vd25GaWVsZEhhbmRsZXIpIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3ltYm9sIHVzZWQgdG8gc3RvcmUgdW5rbm93biBmaWVsZHMgZm9yIGEgbWVzc2FnZS5cbiAgICAgKiBUaGUgcHJvcGVydHkgbXVzdCBjb25mb3JtIHRvIGBVbmtub3duRmllbGRDb250YWluZXJgLlxuICAgICAqL1xuICAgIFVua25vd25GaWVsZEhhbmRsZXIuc3ltYm9sID0gU3ltYm9sLmZvcihcInByb3RvYnVmLXRzL3Vua25vd25cIik7XG4gICAgLyoqXG4gICAgICogU3RvcmUgYW4gdW5rbm93biBmaWVsZCBkdXJpbmcgYmluYXJ5IHJlYWQgZGlyZWN0bHkgb24gdGhlIG1lc3NhZ2UuXG4gICAgICogVGhpcyBtZXRob2QgaXMgY29tcGF0aWJsZSB3aXRoIGBCaW5hcnlSZWFkT3B0aW9ucy5yZWFkVW5rbm93bkZpZWxkYC5cbiAgICAgKi9cbiAgICBVbmtub3duRmllbGRIYW5kbGVyLm9uUmVhZCA9ICh0eXBlTmFtZSwgbWVzc2FnZSwgZmllbGRObywgd2lyZVR5cGUsIGRhdGEpID0+IHtcbiAgICAgICAgbGV0IGNvbnRhaW5lciA9IGlzKG1lc3NhZ2UpID8gbWVzc2FnZVtVbmtub3duRmllbGRIYW5kbGVyLnN5bWJvbF0gOiBtZXNzYWdlW1Vua25vd25GaWVsZEhhbmRsZXIuc3ltYm9sXSA9IFtdO1xuICAgICAgICBjb250YWluZXIucHVzaCh7IG5vOiBmaWVsZE5vLCB3aXJlVHlwZSwgZGF0YSB9KTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFdyaXRlIHVua25vd24gZmllbGRzIHN0b3JlZCBmb3IgdGhlIG1lc3NhZ2UgdG8gdGhlIHdyaXRlci5cbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBjb21wYXRpYmxlIHdpdGggYEJpbmFyeVdyaXRlT3B0aW9ucy53cml0ZVVua25vd25GaWVsZHNgLlxuICAgICAqL1xuICAgIFVua25vd25GaWVsZEhhbmRsZXIub25Xcml0ZSA9ICh0eXBlTmFtZSwgbWVzc2FnZSwgd3JpdGVyKSA9PiB7XG4gICAgICAgIGZvciAobGV0IHsgbm8sIHdpcmVUeXBlLCBkYXRhIH0gb2YgVW5rbm93bkZpZWxkSGFuZGxlci5saXN0KG1lc3NhZ2UpKVxuICAgICAgICAgICAgd3JpdGVyLnRhZyhubywgd2lyZVR5cGUpLnJhdyhkYXRhKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIExpc3QgdW5rbm93biBmaWVsZHMgc3RvcmVkIGZvciB0aGUgbWVzc2FnZS5cbiAgICAgKiBOb3RlIHRoYXQgdGhlcmUgbWF5IGJlIG11bHRpcGxlcyBmaWVsZHMgd2l0aCB0aGUgc2FtZSBudW1iZXIuXG4gICAgICovXG4gICAgVW5rbm93bkZpZWxkSGFuZGxlci5saXN0ID0gKG1lc3NhZ2UsIGZpZWxkTm8pID0+IHtcbiAgICAgICAgaWYgKGlzKG1lc3NhZ2UpKSB7XG4gICAgICAgICAgICBsZXQgYWxsID0gbWVzc2FnZVtVbmtub3duRmllbGRIYW5kbGVyLnN5bWJvbF07XG4gICAgICAgICAgICByZXR1cm4gZmllbGRObyA/IGFsbC5maWx0ZXIodWYgPT4gdWYubm8gPT0gZmllbGRObykgOiBhbGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgbGFzdCB1bmtub3duIGZpZWxkIGJ5IGZpZWxkIG51bWJlci5cbiAgICAgKi9cbiAgICBVbmtub3duRmllbGRIYW5kbGVyLmxhc3QgPSAobWVzc2FnZSwgZmllbGRObykgPT4gVW5rbm93bkZpZWxkSGFuZGxlci5saXN0KG1lc3NhZ2UsIGZpZWxkTm8pLnNsaWNlKC0xKVswXTtcbiAgICBjb25zdCBpcyA9IChtZXNzYWdlKSA9PiBtZXNzYWdlICYmIEFycmF5LmlzQXJyYXkobWVzc2FnZVtVbmtub3duRmllbGRIYW5kbGVyLnN5bWJvbF0pO1xufSkoVW5rbm93bkZpZWxkSGFuZGxlciA9IGV4cG9ydHMuVW5rbm93bkZpZWxkSGFuZGxlciB8fCAoZXhwb3J0cy5Vbmtub3duRmllbGRIYW5kbGVyID0ge30pKTtcbi8qKlxuICogTWVyZ2VzIGJpbmFyeSB3cml0ZSBvciByZWFkIG9wdGlvbnMuIExhdGVyIHZhbHVlcyBvdmVycmlkZSBlYXJsaWVyIHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VCaW5hcnlPcHRpb25zKGEsIGIpIHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBhKSwgYik7XG59XG5leHBvcnRzLm1lcmdlQmluYXJ5T3B0aW9ucyA9IG1lcmdlQmluYXJ5T3B0aW9ucztcbi8qKlxuICogUHJvdG9idWYgYmluYXJ5IGZvcm1hdCB3aXJlIHR5cGVzLlxuICpcbiAqIEEgd2lyZSB0eXBlIHByb3ZpZGVzIGp1c3QgZW5vdWdoIGluZm9ybWF0aW9uIHRvIGZpbmQgdGhlIGxlbmd0aCBvZiB0aGVcbiAqIGZvbGxvd2luZyB2YWx1ZS5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL2VuY29kaW5nI3N0cnVjdHVyZVxuICovXG52YXIgV2lyZVR5cGU7XG4oZnVuY3Rpb24gKFdpcmVUeXBlKSB7XG4gICAgLyoqXG4gICAgICogVXNlZCBmb3IgaW50MzIsIGludDY0LCB1aW50MzIsIHVpbnQ2NCwgc2ludDMyLCBzaW50NjQsIGJvb2wsIGVudW1cbiAgICAgKi9cbiAgICBXaXJlVHlwZVtXaXJlVHlwZVtcIlZhcmludFwiXSA9IDBdID0gXCJWYXJpbnRcIjtcbiAgICAvKipcbiAgICAgKiBVc2VkIGZvciBmaXhlZDY0LCBzZml4ZWQ2NCwgZG91YmxlLlxuICAgICAqIEFsd2F5cyA4IGJ5dGVzIHdpdGggbGl0dGxlLWVuZGlhbiBieXRlIG9yZGVyLlxuICAgICAqL1xuICAgIFdpcmVUeXBlW1dpcmVUeXBlW1wiQml0NjRcIl0gPSAxXSA9IFwiQml0NjRcIjtcbiAgICAvKipcbiAgICAgKiBVc2VkIGZvciBzdHJpbmcsIGJ5dGVzLCBlbWJlZGRlZCBtZXNzYWdlcywgcGFja2VkIHJlcGVhdGVkIGZpZWxkc1xuICAgICAqXG4gICAgICogT25seSByZXBlYXRlZCBudW1lcmljIHR5cGVzICh0eXBlcyB3aGljaCB1c2UgdGhlIHZhcmludCwgMzItYml0LFxuICAgICAqIG9yIDY0LWJpdCB3aXJlIHR5cGVzKSBjYW4gYmUgcGFja2VkLiBJbiBwcm90bzMsIHN1Y2ggZmllbGRzIGFyZVxuICAgICAqIHBhY2tlZCBieSBkZWZhdWx0LlxuICAgICAqL1xuICAgIFdpcmVUeXBlW1dpcmVUeXBlW1wiTGVuZ3RoRGVsaW1pdGVkXCJdID0gMl0gPSBcIkxlbmd0aERlbGltaXRlZFwiO1xuICAgIC8qKlxuICAgICAqIFVzZWQgZm9yIGdyb3Vwc1xuICAgICAqIEBkZXByZWNhdGVkXG4gICAgICovXG4gICAgV2lyZVR5cGVbV2lyZVR5cGVbXCJTdGFydEdyb3VwXCJdID0gM10gPSBcIlN0YXJ0R3JvdXBcIjtcbiAgICAvKipcbiAgICAgKiBVc2VkIGZvciBncm91cHNcbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqL1xuICAgIFdpcmVUeXBlW1dpcmVUeXBlW1wiRW5kR3JvdXBcIl0gPSA0XSA9IFwiRW5kR3JvdXBcIjtcbiAgICAvKipcbiAgICAgKiBVc2VkIGZvciBmaXhlZDMyLCBzZml4ZWQzMiwgZmxvYXQuXG4gICAgICogQWx3YXlzIDQgYnl0ZXMgd2l0aCBsaXR0bGUtZW5kaWFuIGJ5dGUgb3JkZXIuXG4gICAgICovXG4gICAgV2lyZVR5cGVbV2lyZVR5cGVbXCJCaXQzMlwiXSA9IDVdID0gXCJCaXQzMlwiO1xufSkoV2lyZVR5cGUgPSBleHBvcnRzLldpcmVUeXBlIHx8IChleHBvcnRzLldpcmVUeXBlID0ge30pKTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vXG4vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbi8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmVcbi8vIG1ldDpcbi8vXG4vLyAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4vLyAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmVcbi8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXJcbi8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGVcbi8vIGRpc3RyaWJ1dGlvbi5cbi8vICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0c1xuLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb21cbi8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG4vL1xuLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SU1xuLy8gXCJBUyBJU1wiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVFxuLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SXG4vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVFxuLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsXG4vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UXG4vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSxcbi8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWVxuLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFXG4vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuLy9cbi8vIENvZGUgZ2VuZXJhdGVkIGJ5IHRoZSBQcm90b2NvbCBCdWZmZXIgY29tcGlsZXIgaXMgb3duZWQgYnkgdGhlIG93bmVyXG4vLyBvZiB0aGUgaW5wdXQgZmlsZSB1c2VkIHdoZW4gZ2VuZXJhdGluZyBpdC4gIFRoaXMgY29kZSBpcyBub3Rcbi8vIHN0YW5kYWxvbmUgYW5kIHJlcXVpcmVzIGEgc3VwcG9ydCBsaWJyYXJ5IHRvIGJlIGxpbmtlZCB3aXRoIGl0LiAgVGhpc1xuLy8gc3VwcG9ydCBsaWJyYXJ5IGlzIGl0c2VsZiBjb3ZlcmVkIGJ5IHRoZSBhYm92ZSBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy52YXJpbnQzMnJlYWQgPSBleHBvcnRzLnZhcmludDMyd3JpdGUgPSBleHBvcnRzLmludDY0dG9TdHJpbmcgPSBleHBvcnRzLmludDY0ZnJvbVN0cmluZyA9IGV4cG9ydHMudmFyaW50NjR3cml0ZSA9IGV4cG9ydHMudmFyaW50NjRyZWFkID0gdm9pZCAwO1xuLyoqXG4gKiBSZWFkIGEgNjQgYml0IHZhcmludCBhcyB0d28gSlMgbnVtYmVycy5cbiAqXG4gKiBSZXR1cm5zIHR1cGxlOlxuICogWzBdOiBsb3cgYml0c1xuICogWzBdOiBoaWdoIGJpdHNcbiAqXG4gKiBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3Byb3RvY29sYnVmZmVycy9wcm90b2J1Zi9ibG9iLzhhNzE5MjdkNzRhNGNlMzRlZmUyZDg3NjlmZGExOThmNTJkMjBkMTIvanMvZXhwZXJpbWVudGFsL3J1bnRpbWUva2VybmVsL2J1ZmZlcl9kZWNvZGVyLmpzI0wxNzVcbiAqL1xuZnVuY3Rpb24gdmFyaW50NjRyZWFkKCkge1xuICAgIGxldCBsb3dCaXRzID0gMDtcbiAgICBsZXQgaGlnaEJpdHMgPSAwO1xuICAgIGZvciAobGV0IHNoaWZ0ID0gMDsgc2hpZnQgPCAyODsgc2hpZnQgKz0gNykge1xuICAgICAgICBsZXQgYiA9IHRoaXMuYnVmW3RoaXMucG9zKytdO1xuICAgICAgICBsb3dCaXRzIHw9IChiICYgMHg3RikgPDwgc2hpZnQ7XG4gICAgICAgIGlmICgoYiAmIDB4ODApID09IDApIHtcbiAgICAgICAgICAgIHRoaXMuYXNzZXJ0Qm91bmRzKCk7XG4gICAgICAgICAgICByZXR1cm4gW2xvd0JpdHMsIGhpZ2hCaXRzXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBsZXQgbWlkZGxlQnl0ZSA9IHRoaXMuYnVmW3RoaXMucG9zKytdO1xuICAgIC8vIGxhc3QgZm91ciBiaXRzIG9mIHRoZSBmaXJzdCAzMiBiaXQgbnVtYmVyXG4gICAgbG93Qml0cyB8PSAobWlkZGxlQnl0ZSAmIDB4MEYpIDw8IDI4O1xuICAgIC8vIDMgdXBwZXIgYml0cyBhcmUgcGFydCBvZiB0aGUgbmV4dCAzMiBiaXQgbnVtYmVyXG4gICAgaGlnaEJpdHMgPSAobWlkZGxlQnl0ZSAmIDB4NzApID4+IDQ7XG4gICAgaWYgKChtaWRkbGVCeXRlICYgMHg4MCkgPT0gMCkge1xuICAgICAgICB0aGlzLmFzc2VydEJvdW5kcygpO1xuICAgICAgICByZXR1cm4gW2xvd0JpdHMsIGhpZ2hCaXRzXTtcbiAgICB9XG4gICAgZm9yIChsZXQgc2hpZnQgPSAzOyBzaGlmdCA8PSAzMTsgc2hpZnQgKz0gNykge1xuICAgICAgICBsZXQgYiA9IHRoaXMuYnVmW3RoaXMucG9zKytdO1xuICAgICAgICBoaWdoQml0cyB8PSAoYiAmIDB4N0YpIDw8IHNoaWZ0O1xuICAgICAgICBpZiAoKGIgJiAweDgwKSA9PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmFzc2VydEJvdW5kcygpO1xuICAgICAgICAgICAgcmV0dXJuIFtsb3dCaXRzLCBoaWdoQml0c107XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHZhcmludCcpO1xufVxuZXhwb3J0cy52YXJpbnQ2NHJlYWQgPSB2YXJpbnQ2NHJlYWQ7XG4vKipcbiAqIFdyaXRlIGEgNjQgYml0IHZhcmludCwgZ2l2ZW4gYXMgdHdvIEpTIG51bWJlcnMsIHRvIHRoZSBnaXZlbiBieXRlcyBhcnJheS5cbiAqXG4gKiBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3Byb3RvY29sYnVmZmVycy9wcm90b2J1Zi9ibG9iLzhhNzE5MjdkNzRhNGNlMzRlZmUyZDg3NjlmZGExOThmNTJkMjBkMTIvanMvZXhwZXJpbWVudGFsL3J1bnRpbWUva2VybmVsL3dyaXRlci5qcyNMMzQ0XG4gKi9cbmZ1bmN0aW9uIHZhcmludDY0d3JpdGUobG8sIGhpLCBieXRlcykge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMjg7IGkgPSBpICsgNykge1xuICAgICAgICBjb25zdCBzaGlmdCA9IGxvID4+PiBpO1xuICAgICAgICBjb25zdCBoYXNOZXh0ID0gISgoc2hpZnQgPj4+IDcpID09IDAgJiYgaGkgPT0gMCk7XG4gICAgICAgIGNvbnN0IGJ5dGUgPSAoaGFzTmV4dCA/IHNoaWZ0IHwgMHg4MCA6IHNoaWZ0KSAmIDB4RkY7XG4gICAgICAgIGJ5dGVzLnB1c2goYnl0ZSk7XG4gICAgICAgIGlmICghaGFzTmV4dCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHNwbGl0Qml0cyA9ICgobG8gPj4+IDI4KSAmIDB4MEYpIHwgKChoaSAmIDB4MDcpIDw8IDQpO1xuICAgIGNvbnN0IGhhc01vcmVCaXRzID0gISgoaGkgPj4gMykgPT0gMCk7XG4gICAgYnl0ZXMucHVzaCgoaGFzTW9yZUJpdHMgPyBzcGxpdEJpdHMgfCAweDgwIDogc3BsaXRCaXRzKSAmIDB4RkYpO1xuICAgIGlmICghaGFzTW9yZUJpdHMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMzsgaSA8IDMxOyBpID0gaSArIDcpIHtcbiAgICAgICAgY29uc3Qgc2hpZnQgPSBoaSA+Pj4gaTtcbiAgICAgICAgY29uc3QgaGFzTmV4dCA9ICEoKHNoaWZ0ID4+PiA3KSA9PSAwKTtcbiAgICAgICAgY29uc3QgYnl0ZSA9IChoYXNOZXh0ID8gc2hpZnQgfCAweDgwIDogc2hpZnQpICYgMHhGRjtcbiAgICAgICAgYnl0ZXMucHVzaChieXRlKTtcbiAgICAgICAgaWYgKCFoYXNOZXh0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG4gICAgYnl0ZXMucHVzaCgoaGkgPj4+IDMxKSAmIDB4MDEpO1xufVxuZXhwb3J0cy52YXJpbnQ2NHdyaXRlID0gdmFyaW50NjR3cml0ZTtcbi8vIGNvbnN0YW50cyBmb3IgYmluYXJ5IG1hdGhcbmNvbnN0IFRXT19QV1JfMzJfREJMID0gKDEgPDwgMTYpICogKDEgPDwgMTYpO1xuLyoqXG4gKiBQYXJzZSBkZWNpbWFsIHN0cmluZyBvZiA2NCBiaXQgaW50ZWdlciB2YWx1ZSBhcyB0d28gSlMgbnVtYmVycy5cbiAqXG4gKiBSZXR1cm5zIHR1cGxlOlxuICogWzBdOiBtaW51cyBzaWduP1xuICogWzFdOiBsb3cgYml0c1xuICogWzJdOiBoaWdoIGJpdHNcbiAqXG4gKiBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLlxuICovXG5mdW5jdGlvbiBpbnQ2NGZyb21TdHJpbmcoZGVjKSB7XG4gICAgLy8gQ2hlY2sgZm9yIG1pbnVzIHNpZ24uXG4gICAgbGV0IG1pbnVzID0gZGVjWzBdID09ICctJztcbiAgICBpZiAobWludXMpXG4gICAgICAgIGRlYyA9IGRlYy5zbGljZSgxKTtcbiAgICAvLyBXb3JrIDYgZGVjaW1hbCBkaWdpdHMgYXQgYSB0aW1lLCBhY3RpbmcgbGlrZSB3ZSdyZSBjb252ZXJ0aW5nIGJhc2UgMWU2XG4gICAgLy8gZGlnaXRzIHRvIGJpbmFyeS4gVGhpcyBpcyBzYWZlIHRvIGRvIHdpdGggZmxvYXRpbmcgcG9pbnQgbWF0aCBiZWNhdXNlXG4gICAgLy8gTnVtYmVyLmlzU2FmZUludGVnZXIoQUxMXzMyX0JJVFMgKiAxZTYpID09IHRydWUuXG4gICAgY29uc3QgYmFzZSA9IDFlNjtcbiAgICBsZXQgbG93Qml0cyA9IDA7XG4gICAgbGV0IGhpZ2hCaXRzID0gMDtcbiAgICBmdW5jdGlvbiBhZGQxZTZkaWdpdChiZWdpbiwgZW5kKSB7XG4gICAgICAgIC8vIE5vdGU6IE51bWJlcignJykgaXMgMC5cbiAgICAgICAgY29uc3QgZGlnaXQxZTYgPSBOdW1iZXIoZGVjLnNsaWNlKGJlZ2luLCBlbmQpKTtcbiAgICAgICAgaGlnaEJpdHMgKj0gYmFzZTtcbiAgICAgICAgbG93Qml0cyA9IGxvd0JpdHMgKiBiYXNlICsgZGlnaXQxZTY7XG4gICAgICAgIC8vIENhcnJ5IGJpdHMgZnJvbSBsb3dCaXRzIHRvIGhpZ2hCaXRzXG4gICAgICAgIGlmIChsb3dCaXRzID49IFRXT19QV1JfMzJfREJMKSB7XG4gICAgICAgICAgICBoaWdoQml0cyA9IGhpZ2hCaXRzICsgKChsb3dCaXRzIC8gVFdPX1BXUl8zMl9EQkwpIHwgMCk7XG4gICAgICAgICAgICBsb3dCaXRzID0gbG93Qml0cyAlIFRXT19QV1JfMzJfREJMO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFkZDFlNmRpZ2l0KC0yNCwgLTE4KTtcbiAgICBhZGQxZTZkaWdpdCgtMTgsIC0xMik7XG4gICAgYWRkMWU2ZGlnaXQoLTEyLCAtNik7XG4gICAgYWRkMWU2ZGlnaXQoLTYpO1xuICAgIHJldHVybiBbbWludXMsIGxvd0JpdHMsIGhpZ2hCaXRzXTtcbn1cbmV4cG9ydHMuaW50NjRmcm9tU3RyaW5nID0gaW50NjRmcm9tU3RyaW5nO1xuLyoqXG4gKiBGb3JtYXQgNjQgYml0IGludGVnZXIgdmFsdWUgKGFzIHR3byBKUyBudW1iZXJzKSB0byBkZWNpbWFsIHN0cmluZy5cbiAqXG4gKiBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLlxuICovXG5mdW5jdGlvbiBpbnQ2NHRvU3RyaW5nKGJpdHNMb3csIGJpdHNIaWdoKSB7XG4gICAgLy8gU2tpcCB0aGUgZXhwZW5zaXZlIGNvbnZlcnNpb24gaWYgdGhlIG51bWJlciBpcyBzbWFsbCBlbm91Z2ggdG8gdXNlIHRoZVxuICAgIC8vIGJ1aWx0LWluIGNvbnZlcnNpb25zLlxuICAgIGlmICgoYml0c0hpZ2ggPj4+IDApIDw9IDB4MUZGRkZGKSB7XG4gICAgICAgIHJldHVybiAnJyArIChUV09fUFdSXzMyX0RCTCAqIGJpdHNIaWdoICsgKGJpdHNMb3cgPj4+IDApKTtcbiAgICB9XG4gICAgLy8gV2hhdCB0aGlzIGNvZGUgaXMgZG9pbmcgaXMgZXNzZW50aWFsbHkgY29udmVydGluZyB0aGUgaW5wdXQgbnVtYmVyIGZyb21cbiAgICAvLyBiYXNlLTIgdG8gYmFzZS0xZTcsIHdoaWNoIGFsbG93cyB1cyB0byByZXByZXNlbnQgdGhlIDY0LWJpdCByYW5nZSB3aXRoXG4gICAgLy8gb25seSAzICh2ZXJ5IGxhcmdlKSBkaWdpdHMuIFRob3NlIGRpZ2l0cyBhcmUgdGhlbiB0cml2aWFsIHRvIGNvbnZlcnQgdG9cbiAgICAvLyBhIGJhc2UtMTAgc3RyaW5nLlxuICAgIC8vIFRoZSBtYWdpYyBudW1iZXJzIHVzZWQgaGVyZSBhcmUgLVxuICAgIC8vIDJeMjQgPSAxNjc3NzIxNiA9ICgxLDY3NzcyMTYpIGluIGJhc2UtMWU3LlxuICAgIC8vIDJeNDggPSAyODE0NzQ5NzY3MTA2NTYgPSAoMiw4MTQ3NDk3LDY3MTA2NTYpIGluIGJhc2UtMWU3LlxuICAgIC8vIFNwbGl0IDMyOjMyIHJlcHJlc2VudGF0aW9uIGludG8gMTY6MjQ6MjQgcmVwcmVzZW50YXRpb24gc28gb3VyXG4gICAgLy8gaW50ZXJtZWRpYXRlIGRpZ2l0cyBkb24ndCBvdmVyZmxvdy5cbiAgICBsZXQgbG93ID0gYml0c0xvdyAmIDB4RkZGRkZGO1xuICAgIGxldCBtaWQgPSAoKChiaXRzTG93ID4+PiAyNCkgfCAoYml0c0hpZ2ggPDwgOCkpID4+PiAwKSAmIDB4RkZGRkZGO1xuICAgIGxldCBoaWdoID0gKGJpdHNIaWdoID4+IDE2KSAmIDB4RkZGRjtcbiAgICAvLyBBc3NlbWJsZSBvdXIgdGhyZWUgYmFzZS0xZTcgZGlnaXRzLCBpZ25vcmluZyBjYXJyaWVzLiBUaGUgbWF4aW11bVxuICAgIC8vIHZhbHVlIGluIGEgZGlnaXQgYXQgdGhpcyBzdGVwIGlzIHJlcHJlc2VudGFibGUgYXMgYSA0OC1iaXQgaW50ZWdlciwgd2hpY2hcbiAgICAvLyBjYW4gYmUgc3RvcmVkIGluIGEgNjQtYml0IGZsb2F0aW5nIHBvaW50IG51bWJlci5cbiAgICBsZXQgZGlnaXRBID0gbG93ICsgKG1pZCAqIDY3NzcyMTYpICsgKGhpZ2ggKiA2NzEwNjU2KTtcbiAgICBsZXQgZGlnaXRCID0gbWlkICsgKGhpZ2ggKiA4MTQ3NDk3KTtcbiAgICBsZXQgZGlnaXRDID0gKGhpZ2ggKiAyKTtcbiAgICAvLyBBcHBseSBjYXJyaWVzIGZyb20gQSB0byBCIGFuZCBmcm9tIEIgdG8gQy5cbiAgICBsZXQgYmFzZSA9IDEwMDAwMDAwO1xuICAgIGlmIChkaWdpdEEgPj0gYmFzZSkge1xuICAgICAgICBkaWdpdEIgKz0gTWF0aC5mbG9vcihkaWdpdEEgLyBiYXNlKTtcbiAgICAgICAgZGlnaXRBICU9IGJhc2U7XG4gICAgfVxuICAgIGlmIChkaWdpdEIgPj0gYmFzZSkge1xuICAgICAgICBkaWdpdEMgKz0gTWF0aC5mbG9vcihkaWdpdEIgLyBiYXNlKTtcbiAgICAgICAgZGlnaXRCICU9IGJhc2U7XG4gICAgfVxuICAgIC8vIENvbnZlcnQgYmFzZS0xZTcgZGlnaXRzIHRvIGJhc2UtMTAsIHdpdGggb3B0aW9uYWwgbGVhZGluZyB6ZXJvZXMuXG4gICAgZnVuY3Rpb24gZGVjaW1hbEZyb20xZTcoZGlnaXQxZTcsIG5lZWRMZWFkaW5nWmVyb3MpIHtcbiAgICAgICAgbGV0IHBhcnRpYWwgPSBkaWdpdDFlNyA/IFN0cmluZyhkaWdpdDFlNykgOiAnJztcbiAgICAgICAgaWYgKG5lZWRMZWFkaW5nWmVyb3MpIHtcbiAgICAgICAgICAgIHJldHVybiAnMDAwMDAwMCcuc2xpY2UocGFydGlhbC5sZW5ndGgpICsgcGFydGlhbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFydGlhbDtcbiAgICB9XG4gICAgcmV0dXJuIGRlY2ltYWxGcm9tMWU3KGRpZ2l0QywgLypuZWVkTGVhZGluZ1plcm9zPSovIDApICtcbiAgICAgICAgZGVjaW1hbEZyb20xZTcoZGlnaXRCLCAvKm5lZWRMZWFkaW5nWmVyb3M9Ki8gZGlnaXRDKSArXG4gICAgICAgIC8vIElmIHRoZSBmaW5hbCAxZTcgZGlnaXQgZGlkbid0IG5lZWQgbGVhZGluZyB6ZXJvcywgd2Ugd291bGQgaGF2ZVxuICAgICAgICAvLyByZXR1cm5lZCB2aWEgdGhlIHRyaXZpYWwgY29kZSBwYXRoIGF0IHRoZSB0b3AuXG4gICAgICAgIGRlY2ltYWxGcm9tMWU3KGRpZ2l0QSwgLypuZWVkTGVhZGluZ1plcm9zPSovIDEpO1xufVxuZXhwb3J0cy5pbnQ2NHRvU3RyaW5nID0gaW50NjR0b1N0cmluZztcbi8qKlxuICogV3JpdGUgYSAzMiBiaXQgdmFyaW50LCBzaWduZWQgb3IgdW5zaWduZWQuIFNhbWUgYXMgYHZhcmludDY0d3JpdGUoMCwgdmFsdWUsIGJ5dGVzKWBcbiAqXG4gKiBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3Byb3RvY29sYnVmZmVycy9wcm90b2J1Zi9ibG9iLzFiMTg4MzNmNGYyYTJmNjgxZjRlNGEyNWNkZjNiMGE0MzExNWVjMjYvanMvYmluYXJ5L2VuY29kZXIuanMjTDE0NFxuICovXG5mdW5jdGlvbiB2YXJpbnQzMndyaXRlKHZhbHVlLCBieXRlcykge1xuICAgIGlmICh2YWx1ZSA+PSAwKSB7XG4gICAgICAgIC8vIHdyaXRlIHZhbHVlIGFzIHZhcmludCAzMlxuICAgICAgICB3aGlsZSAodmFsdWUgPiAweDdmKSB7XG4gICAgICAgICAgICBieXRlcy5wdXNoKCh2YWx1ZSAmIDB4N2YpIHwgMHg4MCk7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlID4+PiA3O1xuICAgICAgICB9XG4gICAgICAgIGJ5dGVzLnB1c2godmFsdWUpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA5OyBpKyspIHtcbiAgICAgICAgICAgIGJ5dGVzLnB1c2godmFsdWUgJiAxMjcgfCAxMjgpO1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSA+PiA3O1xuICAgICAgICB9XG4gICAgICAgIGJ5dGVzLnB1c2goMSk7XG4gICAgfVxufVxuZXhwb3J0cy52YXJpbnQzMndyaXRlID0gdmFyaW50MzJ3cml0ZTtcbi8qKlxuICogUmVhZCBhbiB1bnNpZ25lZCAzMiBiaXQgdmFyaW50LlxuICpcbiAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vcHJvdG9jb2xidWZmZXJzL3Byb3RvYnVmL2Jsb2IvOGE3MTkyN2Q3NGE0Y2UzNGVmZTJkODc2OWZkYTE5OGY1MmQyMGQxMi9qcy9leHBlcmltZW50YWwvcnVudGltZS9rZXJuZWwvYnVmZmVyX2RlY29kZXIuanMjTDIyMFxuICovXG5mdW5jdGlvbiB2YXJpbnQzMnJlYWQoKSB7XG4gICAgbGV0IGIgPSB0aGlzLmJ1Zlt0aGlzLnBvcysrXTtcbiAgICBsZXQgcmVzdWx0ID0gYiAmIDB4N0Y7XG4gICAgaWYgKChiICYgMHg4MCkgPT0gMCkge1xuICAgICAgICB0aGlzLmFzc2VydEJvdW5kcygpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBiID0gdGhpcy5idWZbdGhpcy5wb3MrK107XG4gICAgcmVzdWx0IHw9IChiICYgMHg3RikgPDwgNztcbiAgICBpZiAoKGIgJiAweDgwKSA9PSAwKSB7XG4gICAgICAgIHRoaXMuYXNzZXJ0Qm91bmRzKCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGIgPSB0aGlzLmJ1Zlt0aGlzLnBvcysrXTtcbiAgICByZXN1bHQgfD0gKGIgJiAweDdGKSA8PCAxNDtcbiAgICBpZiAoKGIgJiAweDgwKSA9PSAwKSB7XG4gICAgICAgIHRoaXMuYXNzZXJ0Qm91bmRzKCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGIgPSB0aGlzLmJ1Zlt0aGlzLnBvcysrXTtcbiAgICByZXN1bHQgfD0gKGIgJiAweDdGKSA8PCAyMTtcbiAgICBpZiAoKGIgJiAweDgwKSA9PSAwKSB7XG4gICAgICAgIHRoaXMuYXNzZXJ0Qm91bmRzKCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIC8vIEV4dHJhY3Qgb25seSBsYXN0IDQgYml0c1xuICAgIGIgPSB0aGlzLmJ1Zlt0aGlzLnBvcysrXTtcbiAgICByZXN1bHQgfD0gKGIgJiAweDBGKSA8PCAyODtcbiAgICBmb3IgKGxldCByZWFkQnl0ZXMgPSA1OyAoKGIgJiAweDgwKSAhPT0gMCkgJiYgcmVhZEJ5dGVzIDwgMTA7IHJlYWRCeXRlcysrKVxuICAgICAgICBiID0gdGhpcy5idWZbdGhpcy5wb3MrK107XG4gICAgaWYgKChiICYgMHg4MCkgIT0gMClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHZhcmludCcpO1xuICAgIHRoaXMuYXNzZXJ0Qm91bmRzKCk7XG4gICAgLy8gUmVzdWx0IGNhbiBoYXZlIDMyIGJpdHMsIGNvbnZlcnQgaXQgdG8gdW5zaWduZWRcbiAgICByZXR1cm4gcmVzdWx0ID4+PiAwO1xufVxuZXhwb3J0cy52YXJpbnQzMnJlYWQgPSB2YXJpbnQzMnJlYWQ7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5QYkxvbmcgPSBleHBvcnRzLlBiVUxvbmcgPSBleHBvcnRzLmRldGVjdEJpID0gdm9pZCAwO1xuY29uc3QgZ29vZ192YXJpbnRfMSA9IHJlcXVpcmUoXCIuL2dvb2ctdmFyaW50XCIpO1xubGV0IEJJO1xuZnVuY3Rpb24gZGV0ZWN0QmkoKSB7XG4gICAgY29uc3QgZHYgPSBuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDgpKTtcbiAgICBjb25zdCBvayA9IGdsb2JhbFRoaXMuQmlnSW50ICE9PSB1bmRlZmluZWRcbiAgICAgICAgJiYgdHlwZW9mIGR2LmdldEJpZ0ludDY0ID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgJiYgdHlwZW9mIGR2LmdldEJpZ1VpbnQ2NCA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICYmIHR5cGVvZiBkdi5zZXRCaWdJbnQ2NCA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICYmIHR5cGVvZiBkdi5zZXRCaWdVaW50NjQgPT09IFwiZnVuY3Rpb25cIjtcbiAgICBCSSA9IG9rID8ge1xuICAgICAgICBNSU46IEJpZ0ludChcIi05MjIzMzcyMDM2ODU0Nzc1ODA4XCIpLFxuICAgICAgICBNQVg6IEJpZ0ludChcIjkyMjMzNzIwMzY4NTQ3NzU4MDdcIiksXG4gICAgICAgIFVNSU46IEJpZ0ludChcIjBcIiksXG4gICAgICAgIFVNQVg6IEJpZ0ludChcIjE4NDQ2NzQ0MDczNzA5NTUxNjE1XCIpLFxuICAgICAgICBDOiBCaWdJbnQsXG4gICAgICAgIFY6IGR2LFxuICAgIH0gOiB1bmRlZmluZWQ7XG59XG5leHBvcnRzLmRldGVjdEJpID0gZGV0ZWN0Qmk7XG5kZXRlY3RCaSgpO1xuZnVuY3Rpb24gYXNzZXJ0QmkoYmkpIHtcbiAgICBpZiAoIWJpKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCaWdJbnQgdW5hdmFpbGFibGUsIHNlZSBodHRwczovL2dpdGh1Yi5jb20vdGltb3N0YW1tL3Byb3RvYnVmLXRzL2Jsb2IvdjEuMC44L01BTlVBTC5tZCNiaWdpbnQtc3VwcG9ydFwiKTtcbn1cbi8vIHVzZWQgdG8gdmFsaWRhdGUgZnJvbShzdHJpbmcpIGlucHV0ICh3aGVuIGJpZ2ludCBpcyB1bmF2YWlsYWJsZSlcbmNvbnN0IFJFX0RFQ0lNQUxfU1RSID0gL14tP1swLTldKyQvO1xuLy8gY29uc3RhbnRzIGZvciBiaW5hcnkgbWF0aFxuY29uc3QgVFdPX1BXUl8zMl9EQkwgPSAweDEwMDAwMDAwMDtcbmNvbnN0IEhBTEZfMl9QV1JfMzIgPSAweDA4MDAwMDAwMDtcbi8vIGJhc2UgY2xhc3MgZm9yIFBiTG9uZyBhbmQgUGJVTG9uZyBwcm92aWRlcyBzaGFyZWQgY29kZVxuY2xhc3MgU2hhcmVkUGJMb25nIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugd2l0aCB0aGUgZ2l2ZW4gYml0cy5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihsbywgaGkpIHtcbiAgICAgICAgdGhpcy5sbyA9IGxvIHwgMDtcbiAgICAgICAgdGhpcy5oaSA9IGhpIHwgMDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSXMgdGhpcyBpbnN0YW5jZSBlcXVhbCB0byAwP1xuICAgICAqL1xuICAgIGlzWmVybygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG8gPT0gMCAmJiB0aGlzLmhpID09IDA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgdG8gYSBuYXRpdmUgbnVtYmVyLlxuICAgICAqL1xuICAgIHRvTnVtYmVyKCkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gdGhpcy5oaSAqIFRXT19QV1JfMzJfREJMICsgKHRoaXMubG8gPj4+IDApO1xuICAgICAgICBpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKHJlc3VsdCkpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJjYW5ub3QgY29udmVydCB0byBzYWZlIG51bWJlclwiKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vKipcbiAqIDY0LWJpdCB1bnNpZ25lZCBpbnRlZ2VyIGFzIHR3byAzMi1iaXQgdmFsdWVzLlxuICogQ29udmVydHMgYmV0d2VlbiBgc3RyaW5nYCwgYG51bWJlcmAgYW5kIGBiaWdpbnRgIHJlcHJlc2VudGF0aW9ucy5cbiAqL1xuY2xhc3MgUGJVTG9uZyBleHRlbmRzIFNoYXJlZFBiTG9uZyB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGluc3RhbmNlIGZyb20gYSBgc3RyaW5nYCwgYG51bWJlcmAgb3IgYGJpZ2ludGAuXG4gICAgICovXG4gICAgc3RhdGljIGZyb20odmFsdWUpIHtcbiAgICAgICAgaWYgKEJJKVxuICAgICAgICAgICAgLy8gbm9pbnNwZWN0aW9uIEZhbGxUaHJvdWdoSW5Td2l0Y2hTdGF0ZW1lbnRKU1xuICAgICAgICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBcIjBcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLlpFUk87XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBcIlwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzdHJpbmcgaXMgbm8gaW50ZWdlcicpO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IEJJLkModmFsdWUpO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuWkVSTztcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBCSS5DKHZhbHVlKTtcbiAgICAgICAgICAgICAgICBjYXNlIFwiYmlnaW50XCI6XG4gICAgICAgICAgICAgICAgICAgIGlmICghdmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5aRVJPO1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPCBCSS5VTUlOKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzaWduZWQgdmFsdWUgZm9yIHVsb25nJyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA+IEJJLlVNQVgpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vsb25nIHRvbyBsYXJnZScpO1xuICAgICAgICAgICAgICAgICAgICBCSS5WLnNldEJpZ1VpbnQ2NCgwLCB2YWx1ZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUGJVTG9uZyhCSS5WLmdldEludDMyKDAsIHRydWUpLCBCSS5WLmdldEludDMyKDQsIHRydWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBcIjBcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLlpFUk87XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUudHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIVJFX0RFQ0lNQUxfU1RSLnRlc3QodmFsdWUpKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzdHJpbmcgaXMgbm8gaW50ZWdlcicpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgW21pbnVzLCBsbywgaGldID0gZ29vZ192YXJpbnRfMS5pbnQ2NGZyb21TdHJpbmcodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobWludXMpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NpZ25lZCB2YWx1ZSBmb3IgdWxvbmcnKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQYlVMb25nKGxvLCBoaSk7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLlpFUk87XG4gICAgICAgICAgICAgICAgICAgIGlmICghTnVtYmVyLmlzU2FmZUludGVnZXIodmFsdWUpKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdudW1iZXIgaXMgbm8gaW50ZWdlcicpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPCAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzaWduZWQgdmFsdWUgZm9yIHVsb25nJyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUGJVTG9uZyh2YWx1ZSwgdmFsdWUgLyBUV09fUFdSXzMyX0RCTCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biB2YWx1ZSAnICsgdHlwZW9mIHZhbHVlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29udmVydCB0byBkZWNpbWFsIHN0cmluZy5cbiAgICAgKi9cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIEJJID8gdGhpcy50b0JpZ0ludCgpLnRvU3RyaW5nKCkgOiBnb29nX3ZhcmludF8xLmludDY0dG9TdHJpbmcodGhpcy5sbywgdGhpcy5oaSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgdG8gbmF0aXZlIGJpZ2ludC5cbiAgICAgKi9cbiAgICB0b0JpZ0ludCgpIHtcbiAgICAgICAgYXNzZXJ0QmkoQkkpO1xuICAgICAgICBCSS5WLnNldEludDMyKDAsIHRoaXMubG8sIHRydWUpO1xuICAgICAgICBCSS5WLnNldEludDMyKDQsIHRoaXMuaGksIHRydWUpO1xuICAgICAgICByZXR1cm4gQkkuVi5nZXRCaWdVaW50NjQoMCwgdHJ1ZSk7XG4gICAgfVxufVxuZXhwb3J0cy5QYlVMb25nID0gUGJVTG9uZztcbi8qKlxuICogdWxvbmcgMCBzaW5nbGV0b24uXG4gKi9cblBiVUxvbmcuWkVSTyA9IG5ldyBQYlVMb25nKDAsIDApO1xuLyoqXG4gKiA2NC1iaXQgc2lnbmVkIGludGVnZXIgYXMgdHdvIDMyLWJpdCB2YWx1ZXMuXG4gKiBDb252ZXJ0cyBiZXR3ZWVuIGBzdHJpbmdgLCBgbnVtYmVyYCBhbmQgYGJpZ2ludGAgcmVwcmVzZW50YXRpb25zLlxuICovXG5jbGFzcyBQYkxvbmcgZXh0ZW5kcyBTaGFyZWRQYkxvbmcge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZSBpbnN0YW5jZSBmcm9tIGEgYHN0cmluZ2AsIGBudW1iZXJgIG9yIGBiaWdpbnRgLlxuICAgICAqL1xuICAgIHN0YXRpYyBmcm9tKHZhbHVlKSB7XG4gICAgICAgIGlmIChCSSlcbiAgICAgICAgICAgIC8vIG5vaW5zcGVjdGlvbiBGYWxsVGhyb3VnaEluU3dpdGNoU3RhdGVtZW50SlNcbiAgICAgICAgICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gXCIwXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5aRVJPO1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gXCJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc3RyaW5nIGlzIG5vIGludGVnZXInKTtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBCSS5DKHZhbHVlKTtcbiAgICAgICAgICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLlpFUk87XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gQkkuQyh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgY2FzZSBcImJpZ2ludFwiOlxuICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuWkVSTztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlIDwgQkkuTUlOKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzaWduZWQgbG9uZyB0b28gc21hbGwnKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID4gQkkuTUFYKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzaWduZWQgbG9uZyB0b28gbGFyZ2UnKTtcbiAgICAgICAgICAgICAgICAgICAgQkkuVi5zZXRCaWdJbnQ2NCgwLCB2YWx1ZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUGJMb25nKEJJLlYuZ2V0SW50MzIoMCwgdHJ1ZSksIEJJLlYuZ2V0SW50MzIoNCwgdHJ1ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IFwiMFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuWkVSTztcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS50cmltKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghUkVfREVDSU1BTF9TVFIudGVzdCh2YWx1ZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N0cmluZyBpcyBubyBpbnRlZ2VyJyk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBbbWludXMsIGxvLCBoaV0gPSBnb29nX3ZhcmludF8xLmludDY0ZnJvbVN0cmluZyh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtaW51cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhpID4gSEFMRl8yX1BXUl8zMiB8fCAoaGkgPT0gSEFMRl8yX1BXUl8zMiAmJiBsbyAhPSAwKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NpZ25lZCBsb25nIHRvbyBzbWFsbCcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGhpID49IEhBTEZfMl9QV1JfMzIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NpZ25lZCBsb25nIHRvbyBsYXJnZScpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgcGJsID0gbmV3IFBiTG9uZyhsbywgaGkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWludXMgPyBwYmwubmVnYXRlKCkgOiBwYmw7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLlpFUk87XG4gICAgICAgICAgICAgICAgICAgIGlmICghTnVtYmVyLmlzU2FmZUludGVnZXIodmFsdWUpKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdudW1iZXIgaXMgbm8gaW50ZWdlcicpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgPiAwXG4gICAgICAgICAgICAgICAgICAgICAgICA/IG5ldyBQYkxvbmcodmFsdWUsIHZhbHVlIC8gVFdPX1BXUl8zMl9EQkwpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG5ldyBQYkxvbmcoLXZhbHVlLCAtdmFsdWUgLyBUV09fUFdSXzMyX0RCTCkubmVnYXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biB2YWx1ZSAnICsgdHlwZW9mIHZhbHVlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRG8gd2UgaGF2ZSBhIG1pbnVzIHNpZ24/XG4gICAgICovXG4gICAgaXNOZWdhdGl2ZSgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLmhpICYgSEFMRl8yX1BXUl8zMikgIT09IDA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE5lZ2F0ZSB0d28ncyBjb21wbGVtZW50LlxuICAgICAqIEludmVydCBhbGwgdGhlIGJpdHMgYW5kIGFkZCBvbmUgdG8gdGhlIHJlc3VsdC5cbiAgICAgKi9cbiAgICBuZWdhdGUoKSB7XG4gICAgICAgIGxldCBoaSA9IH50aGlzLmhpLCBsbyA9IHRoaXMubG87XG4gICAgICAgIGlmIChsbylcbiAgICAgICAgICAgIGxvID0gfmxvICsgMTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgaGkgKz0gMTtcbiAgICAgICAgcmV0dXJuIG5ldyBQYkxvbmcobG8sIGhpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29udmVydCB0byBkZWNpbWFsIHN0cmluZy5cbiAgICAgKi9cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgaWYgKEJJKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9CaWdJbnQoKS50b1N0cmluZygpO1xuICAgICAgICBpZiAodGhpcy5pc05lZ2F0aXZlKCkpIHtcbiAgICAgICAgICAgIGxldCBuID0gdGhpcy5uZWdhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiAnLScgKyBnb29nX3ZhcmludF8xLmludDY0dG9TdHJpbmcobi5sbywgbi5oaSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdvb2dfdmFyaW50XzEuaW50NjR0b1N0cmluZyh0aGlzLmxvLCB0aGlzLmhpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29udmVydCB0byBuYXRpdmUgYmlnaW50LlxuICAgICAqL1xuICAgIHRvQmlnSW50KCkge1xuICAgICAgICBhc3NlcnRCaShCSSk7XG4gICAgICAgIEJJLlYuc2V0SW50MzIoMCwgdGhpcy5sbywgdHJ1ZSk7XG4gICAgICAgIEJJLlYuc2V0SW50MzIoNCwgdGhpcy5oaSwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiBCSS5WLmdldEJpZ0ludDY0KDAsIHRydWUpO1xuICAgIH1cbn1cbmV4cG9ydHMuUGJMb25nID0gUGJMb25nO1xuLyoqXG4gKiBsb25nIDAgc2luZ2xldG9uLlxuICovXG5QYkxvbmcuWkVSTyA9IG5ldyBQYkxvbmcoMCwgMCk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5CaW5hcnlSZWFkZXIgPSBleHBvcnRzLmJpbmFyeVJlYWRPcHRpb25zID0gdm9pZCAwO1xuY29uc3QgYmluYXJ5X2Zvcm1hdF9jb250cmFjdF8xID0gcmVxdWlyZShcIi4vYmluYXJ5LWZvcm1hdC1jb250cmFjdFwiKTtcbmNvbnN0IHBiX2xvbmdfMSA9IHJlcXVpcmUoXCIuL3BiLWxvbmdcIik7XG5jb25zdCBnb29nX3ZhcmludF8xID0gcmVxdWlyZShcIi4vZ29vZy12YXJpbnRcIik7XG5jb25zdCBkZWZhdWx0c1JlYWQgPSB7XG4gICAgcmVhZFVua25vd25GaWVsZDogdHJ1ZSxcbiAgICByZWFkZXJGYWN0b3J5OiBieXRlcyA9PiBuZXcgQmluYXJ5UmVhZGVyKGJ5dGVzKSxcbn07XG4vKipcbiAqIE1ha2Ugb3B0aW9ucyBmb3IgcmVhZGluZyBiaW5hcnkgZGF0YSBmb3JtIHBhcnRpYWwgb3B0aW9ucy5cbiAqL1xuZnVuY3Rpb24gYmluYXJ5UmVhZE9wdGlvbnMob3B0aW9ucykge1xuICAgIHJldHVybiBvcHRpb25zID8gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0c1JlYWQpLCBvcHRpb25zKSA6IGRlZmF1bHRzUmVhZDtcbn1cbmV4cG9ydHMuYmluYXJ5UmVhZE9wdGlvbnMgPSBiaW5hcnlSZWFkT3B0aW9ucztcbmNsYXNzIEJpbmFyeVJlYWRlciB7XG4gICAgY29uc3RydWN0b3IoYnVmLCB0ZXh0RGVjb2Rlcikge1xuICAgICAgICB0aGlzLnZhcmludDY0ID0gZ29vZ192YXJpbnRfMS52YXJpbnQ2NHJlYWQ7IC8vIGRpcnR5IGNhc3QgZm9yIGB0aGlzYFxuICAgICAgICAvKipcbiAgICAgICAgICogUmVhZCBhIGB1aW50MzJgIGZpZWxkLCBhbiB1bnNpZ25lZCAzMiBiaXQgdmFyaW50LlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy51aW50MzIgPSBnb29nX3ZhcmludF8xLnZhcmludDMycmVhZDsgLy8gZGlydHkgY2FzdCBmb3IgYHRoaXNgIGFuZCBhY2Nlc3MgdG8gcHJvdGVjdGVkIGBidWZgXG4gICAgICAgIHRoaXMuYnVmID0gYnVmO1xuICAgICAgICB0aGlzLmxlbiA9IGJ1Zi5sZW5ndGg7XG4gICAgICAgIHRoaXMucG9zID0gMDtcbiAgICAgICAgdGhpcy52aWV3ID0gbmV3IERhdGFWaWV3KGJ1Zi5idWZmZXIsIGJ1Zi5ieXRlT2Zmc2V0LCBidWYuYnl0ZUxlbmd0aCk7XG4gICAgICAgIHRoaXMudGV4dERlY29kZXIgPSB0ZXh0RGVjb2RlciAhPT0gbnVsbCAmJiB0ZXh0RGVjb2RlciAhPT0gdm9pZCAwID8gdGV4dERlY29kZXIgOiBuZXcgVGV4dERlY29kZXIoXCJ1dGYtOFwiLCB7XG4gICAgICAgICAgICBmYXRhbDogdHJ1ZSxcbiAgICAgICAgICAgIGlnbm9yZUJPTTogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWRzIGEgdGFnIC0gZmllbGQgbnVtYmVyIGFuZCB3aXJlIHR5cGUuXG4gICAgICovXG4gICAgdGFnKCkge1xuICAgICAgICBsZXQgdGFnID0gdGhpcy51aW50MzIoKSwgZmllbGRObyA9IHRhZyA+Pj4gMywgd2lyZVR5cGUgPSB0YWcgJiA3O1xuICAgICAgICBpZiAoZmllbGRObyA8PSAwIHx8IHdpcmVUeXBlIDwgMCB8fCB3aXJlVHlwZSA+IDUpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbGxlZ2FsIHRhZzogZmllbGQgbm8gXCIgKyBmaWVsZE5vICsgXCIgd2lyZSB0eXBlIFwiICsgd2lyZVR5cGUpO1xuICAgICAgICByZXR1cm4gW2ZpZWxkTm8sIHdpcmVUeXBlXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2tpcCBvbmUgZWxlbWVudCBvbiB0aGUgd2lyZSBhbmQgcmV0dXJuIHRoZSBza2lwcGVkIGRhdGEuXG4gICAgICogU3VwcG9ydHMgV2lyZVR5cGUuU3RhcnRHcm91cCBzaW5jZSB2Mi4wLjAtYWxwaGEuMjMuXG4gICAgICovXG4gICAgc2tpcCh3aXJlVHlwZSkge1xuICAgICAgICBsZXQgc3RhcnQgPSB0aGlzLnBvcztcbiAgICAgICAgLy8gbm9pbnNwZWN0aW9uIEZhbGxUaHJvdWdoSW5Td2l0Y2hTdGF0ZW1lbnRKU1xuICAgICAgICBzd2l0Y2ggKHdpcmVUeXBlKSB7XG4gICAgICAgICAgICBjYXNlIGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMS5XaXJlVHlwZS5WYXJpbnQ6XG4gICAgICAgICAgICAgICAgd2hpbGUgKHRoaXMuYnVmW3RoaXMucG9zKytdICYgMHg4MCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMS5XaXJlVHlwZS5CaXQ2NDpcbiAgICAgICAgICAgICAgICB0aGlzLnBvcyArPSA0O1xuICAgICAgICAgICAgY2FzZSBiaW5hcnlfZm9ybWF0X2NvbnRyYWN0XzEuV2lyZVR5cGUuQml0MzI6XG4gICAgICAgICAgICAgICAgdGhpcy5wb3MgKz0gNDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgYmluYXJ5X2Zvcm1hdF9jb250cmFjdF8xLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZDpcbiAgICAgICAgICAgICAgICBsZXQgbGVuID0gdGhpcy51aW50MzIoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBvcyArPSBsZW47XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMS5XaXJlVHlwZS5TdGFydEdyb3VwOlxuICAgICAgICAgICAgICAgIC8vIEZyb20gZGVzY3JpcHRvci5wcm90bzogR3JvdXAgdHlwZSBpcyBkZXByZWNhdGVkLCBub3Qgc3VwcG9ydGVkIGluIHByb3RvMy5cbiAgICAgICAgICAgICAgICAvLyBCdXQgd2UgbXVzdCBzdGlsbCBiZSBhYmxlIHRvIHBhcnNlIGFuZCB0cmVhdCBhcyB1bmtub3duLlxuICAgICAgICAgICAgICAgIGxldCB0O1xuICAgICAgICAgICAgICAgIHdoaWxlICgodCA9IHRoaXMudGFnKClbMV0pICE9PSBiaW5hcnlfZm9ybWF0X2NvbnRyYWN0XzEuV2lyZVR5cGUuRW5kR3JvdXApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5za2lwKHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiY2FudCBza2lwIHdpcmUgdHlwZSBcIiArIHdpcmVUeXBlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFzc2VydEJvdW5kcygpO1xuICAgICAgICByZXR1cm4gdGhpcy5idWYuc3ViYXJyYXkoc3RhcnQsIHRoaXMucG9zKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhyb3dzIGVycm9yIGlmIHBvc2l0aW9uIGluIGJ5dGUgYXJyYXkgaXMgb3V0IG9mIHJhbmdlLlxuICAgICAqL1xuICAgIGFzc2VydEJvdW5kcygpIHtcbiAgICAgICAgaWYgKHRoaXMucG9zID4gdGhpcy5sZW4pXG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcInByZW1hdHVyZSBFT0ZcIik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWQgYSBgaW50MzJgIGZpZWxkLCBhIHNpZ25lZCAzMiBiaXQgdmFyaW50LlxuICAgICAqL1xuICAgIGludDMyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy51aW50MzIoKSB8IDA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWQgYSBgc2ludDMyYCBmaWVsZCwgYSBzaWduZWQsIHppZ3phZy1lbmNvZGVkIDMyLWJpdCB2YXJpbnQuXG4gICAgICovXG4gICAgc2ludDMyKCkge1xuICAgICAgICBsZXQgenplID0gdGhpcy51aW50MzIoKTtcbiAgICAgICAgLy8gZGVjb2RlIHppZ3phZ1xuICAgICAgICByZXR1cm4gKHp6ZSA+Pj4gMSkgXiAtKHp6ZSAmIDEpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWFkIGEgYGludDY0YCBmaWVsZCwgYSBzaWduZWQgNjQtYml0IHZhcmludC5cbiAgICAgKi9cbiAgICBpbnQ2NCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBwYl9sb25nXzEuUGJMb25nKC4uLnRoaXMudmFyaW50NjQoKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWQgYSBgdWludDY0YCBmaWVsZCwgYW4gdW5zaWduZWQgNjQtYml0IHZhcmludC5cbiAgICAgKi9cbiAgICB1aW50NjQoKSB7XG4gICAgICAgIHJldHVybiBuZXcgcGJfbG9uZ18xLlBiVUxvbmcoLi4udGhpcy52YXJpbnQ2NCgpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVhZCBhIGBzaW50NjRgIGZpZWxkLCBhIHNpZ25lZCwgemlnLXphZy1lbmNvZGVkIDY0LWJpdCB2YXJpbnQuXG4gICAgICovXG4gICAgc2ludDY0KCkge1xuICAgICAgICBsZXQgW2xvLCBoaV0gPSB0aGlzLnZhcmludDY0KCk7XG4gICAgICAgIC8vIGRlY29kZSB6aWcgemFnXG4gICAgICAgIGxldCBzID0gLShsbyAmIDEpO1xuICAgICAgICBsbyA9ICgobG8gPj4+IDEgfCAoaGkgJiAxKSA8PCAzMSkgXiBzKTtcbiAgICAgICAgaGkgPSAoaGkgPj4+IDEgXiBzKTtcbiAgICAgICAgcmV0dXJuIG5ldyBwYl9sb25nXzEuUGJMb25nKGxvLCBoaSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWQgYSBgYm9vbGAgZmllbGQsIGEgdmFyaWFudC5cbiAgICAgKi9cbiAgICBib29sKCkge1xuICAgICAgICBsZXQgW2xvLCBoaV0gPSB0aGlzLnZhcmludDY0KCk7XG4gICAgICAgIHJldHVybiBsbyAhPT0gMCB8fCBoaSAhPT0gMDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVhZCBhIGBmaXhlZDMyYCBmaWVsZCwgYW4gdW5zaWduZWQsIGZpeGVkLWxlbmd0aCAzMi1iaXQgaW50ZWdlci5cbiAgICAgKi9cbiAgICBmaXhlZDMyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52aWV3LmdldFVpbnQzMigodGhpcy5wb3MgKz0gNCkgLSA0LCB0cnVlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVhZCBhIGBzZml4ZWQzMmAgZmllbGQsIGEgc2lnbmVkLCBmaXhlZC1sZW5ndGggMzItYml0IGludGVnZXIuXG4gICAgICovXG4gICAgc2ZpeGVkMzIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZXcuZ2V0SW50MzIoKHRoaXMucG9zICs9IDQpIC0gNCwgdHJ1ZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWQgYSBgZml4ZWQ2NGAgZmllbGQsIGFuIHVuc2lnbmVkLCBmaXhlZC1sZW5ndGggNjQgYml0IGludGVnZXIuXG4gICAgICovXG4gICAgZml4ZWQ2NCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBwYl9sb25nXzEuUGJVTG9uZyh0aGlzLnNmaXhlZDMyKCksIHRoaXMuc2ZpeGVkMzIoKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWQgYSBgZml4ZWQ2NGAgZmllbGQsIGEgc2lnbmVkLCBmaXhlZC1sZW5ndGggNjQtYml0IGludGVnZXIuXG4gICAgICovXG4gICAgc2ZpeGVkNjQoKSB7XG4gICAgICAgIHJldHVybiBuZXcgcGJfbG9uZ18xLlBiTG9uZyh0aGlzLnNmaXhlZDMyKCksIHRoaXMuc2ZpeGVkMzIoKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWQgYSBgZmxvYXRgIGZpZWxkLCAzMi1iaXQgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLlxuICAgICAqL1xuICAgIGZsb2F0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy52aWV3LmdldEZsb2F0MzIoKHRoaXMucG9zICs9IDQpIC0gNCwgdHJ1ZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWQgYSBgZG91YmxlYCBmaWVsZCwgYSA2NC1iaXQgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLlxuICAgICAqL1xuICAgIGRvdWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlldy5nZXRGbG9hdDY0KCh0aGlzLnBvcyArPSA4KSAtIDgsIHRydWUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWFkIGEgYGJ5dGVzYCBmaWVsZCwgbGVuZ3RoLWRlbGltaXRlZCBhcmJpdHJhcnkgZGF0YS5cbiAgICAgKi9cbiAgICBieXRlcygpIHtcbiAgICAgICAgbGV0IGxlbiA9IHRoaXMudWludDMyKCk7XG4gICAgICAgIGxldCBzdGFydCA9IHRoaXMucG9zO1xuICAgICAgICB0aGlzLnBvcyArPSBsZW47XG4gICAgICAgIHRoaXMuYXNzZXJ0Qm91bmRzKCk7XG4gICAgICAgIHJldHVybiB0aGlzLmJ1Zi5zdWJhcnJheShzdGFydCwgc3RhcnQgKyBsZW4pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWFkIGEgYHN0cmluZ2AgZmllbGQsIGxlbmd0aC1kZWxpbWl0ZWQgZGF0YSBjb252ZXJ0ZWQgdG8gVVRGLTggdGV4dC5cbiAgICAgKi9cbiAgICBzdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHREZWNvZGVyLmRlY29kZSh0aGlzLmJ5dGVzKCkpO1xuICAgIH1cbn1cbmV4cG9ydHMuQmluYXJ5UmVhZGVyID0gQmluYXJ5UmVhZGVyO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYXNzZXJ0RmxvYXQzMiA9IGV4cG9ydHMuYXNzZXJ0VUludDMyID0gZXhwb3J0cy5hc3NlcnRJbnQzMiA9IGV4cG9ydHMuYXNzZXJ0TmV2ZXIgPSBleHBvcnRzLmFzc2VydCA9IHZvaWQgMDtcbi8qKlxuICogYXNzZXJ0IHRoYXQgY29uZGl0aW9uIGlzIHRydWUgb3IgdGhyb3cgZXJyb3IgKHdpdGggbWVzc2FnZSlcbiAqL1xuZnVuY3Rpb24gYXNzZXJ0KGNvbmRpdGlvbiwgbXNnKSB7XG4gICAgaWYgKCFjb25kaXRpb24pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgfVxufVxuZXhwb3J0cy5hc3NlcnQgPSBhc3NlcnQ7XG4vKipcbiAqIGFzc2VydCB0aGF0IHZhbHVlIGNhbm5vdCBleGlzdCA9IHR5cGUgYG5ldmVyYC4gdGhyb3cgcnVudGltZSBlcnJvciBpZiBpdCBkb2VzLlxuICovXG5mdW5jdGlvbiBhc3NlcnROZXZlcih2YWx1ZSwgbXNnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKG1zZyAhPT0gbnVsbCAmJiBtc2cgIT09IHZvaWQgMCA/IG1zZyA6ICdVbmV4cGVjdGVkIG9iamVjdDogJyArIHZhbHVlKTtcbn1cbmV4cG9ydHMuYXNzZXJ0TmV2ZXIgPSBhc3NlcnROZXZlcjtcbmNvbnN0IEZMT0FUMzJfTUFYID0gMy40MDI4MjM0NjYzODUyODg2ZSszOCwgRkxPQVQzMl9NSU4gPSAtMy40MDI4MjM0NjYzODUyODg2ZSszOCwgVUlOVDMyX01BWCA9IDB4RkZGRkZGRkYsIElOVDMyX01BWCA9IDBYN0ZGRkZGRkYsIElOVDMyX01JTiA9IC0wWDgwMDAwMDAwO1xuZnVuY3Rpb24gYXNzZXJ0SW50MzIoYXJnKSB7XG4gICAgaWYgKHR5cGVvZiBhcmcgIT09IFwibnVtYmVyXCIpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBpbnQgMzI6ICcgKyB0eXBlb2YgYXJnKTtcbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoYXJnKSB8fCBhcmcgPiBJTlQzMl9NQVggfHwgYXJnIDwgSU5UMzJfTUlOKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgaW50IDMyOiAnICsgYXJnKTtcbn1cbmV4cG9ydHMuYXNzZXJ0SW50MzIgPSBhc3NlcnRJbnQzMjtcbmZ1bmN0aW9uIGFzc2VydFVJbnQzMihhcmcpIHtcbiAgICBpZiAodHlwZW9mIGFyZyAhPT0gXCJudW1iZXJcIilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHVpbnQgMzI6ICcgKyB0eXBlb2YgYXJnKTtcbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoYXJnKSB8fCBhcmcgPiBVSU5UMzJfTUFYIHx8IGFyZyA8IDApXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCB1aW50IDMyOiAnICsgYXJnKTtcbn1cbmV4cG9ydHMuYXNzZXJ0VUludDMyID0gYXNzZXJ0VUludDMyO1xuZnVuY3Rpb24gYXNzZXJ0RmxvYXQzMihhcmcpIHtcbiAgICBpZiAodHlwZW9mIGFyZyAhPT0gXCJudW1iZXJcIilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGZsb2F0IDMyOiAnICsgdHlwZW9mIGFyZyk7XG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoYXJnKSlcbiAgICAgICAgcmV0dXJuO1xuICAgIGlmIChhcmcgPiBGTE9BVDMyX01BWCB8fCBhcmcgPCBGTE9BVDMyX01JTilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGZsb2F0IDMyOiAnICsgYXJnKTtcbn1cbmV4cG9ydHMuYXNzZXJ0RmxvYXQzMiA9IGFzc2VydEZsb2F0MzI7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5CaW5hcnlXcml0ZXIgPSBleHBvcnRzLmJpbmFyeVdyaXRlT3B0aW9ucyA9IHZvaWQgMDtcbmNvbnN0IHBiX2xvbmdfMSA9IHJlcXVpcmUoXCIuL3BiLWxvbmdcIik7XG5jb25zdCBnb29nX3ZhcmludF8xID0gcmVxdWlyZShcIi4vZ29vZy12YXJpbnRcIik7XG5jb25zdCBhc3NlcnRfMSA9IHJlcXVpcmUoXCIuL2Fzc2VydFwiKTtcbmNvbnN0IGRlZmF1bHRzV3JpdGUgPSB7XG4gICAgd3JpdGVVbmtub3duRmllbGRzOiB0cnVlLFxuICAgIHdyaXRlckZhY3Rvcnk6ICgpID0+IG5ldyBCaW5hcnlXcml0ZXIoKSxcbn07XG4vKipcbiAqIE1ha2Ugb3B0aW9ucyBmb3Igd3JpdGluZyBiaW5hcnkgZGF0YSBmb3JtIHBhcnRpYWwgb3B0aW9ucy5cbiAqL1xuZnVuY3Rpb24gYmluYXJ5V3JpdGVPcHRpb25zKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gb3B0aW9ucyA/IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdHNXcml0ZSksIG9wdGlvbnMpIDogZGVmYXVsdHNXcml0ZTtcbn1cbmV4cG9ydHMuYmluYXJ5V3JpdGVPcHRpb25zID0gYmluYXJ5V3JpdGVPcHRpb25zO1xuY2xhc3MgQmluYXJ5V3JpdGVyIHtcbiAgICBjb25zdHJ1Y3Rvcih0ZXh0RW5jb2Rlcikge1xuICAgICAgICAvKipcbiAgICAgICAgICogUHJldmlvdXMgZm9yayBzdGF0ZXMuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnN0YWNrID0gW107XG4gICAgICAgIHRoaXMudGV4dEVuY29kZXIgPSB0ZXh0RW5jb2RlciAhPT0gbnVsbCAmJiB0ZXh0RW5jb2RlciAhPT0gdm9pZCAwID8gdGV4dEVuY29kZXIgOiBuZXcgVGV4dEVuY29kZXIoKTtcbiAgICAgICAgdGhpcy5jaHVua3MgPSBbXTtcbiAgICAgICAgdGhpcy5idWYgPSBbXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIGFsbCBieXRlcyB3cml0dGVuIGFuZCByZXNldCB0aGlzIHdyaXRlci5cbiAgICAgKi9cbiAgICBmaW5pc2goKSB7XG4gICAgICAgIHRoaXMuY2h1bmtzLnB1c2gobmV3IFVpbnQ4QXJyYXkodGhpcy5idWYpKTsgLy8gZmx1c2ggdGhlIGJ1ZmZlclxuICAgICAgICBsZXQgbGVuID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNodW5rcy5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIGxlbiArPSB0aGlzLmNodW5rc1tpXS5sZW5ndGg7XG4gICAgICAgIGxldCBieXRlcyA9IG5ldyBVaW50OEFycmF5KGxlbik7XG4gICAgICAgIGxldCBvZmZzZXQgPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY2h1bmtzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBieXRlcy5zZXQodGhpcy5jaHVua3NbaV0sIG9mZnNldCk7XG4gICAgICAgICAgICBvZmZzZXQgKz0gdGhpcy5jaHVua3NbaV0ubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2h1bmtzID0gW107XG4gICAgICAgIHJldHVybiBieXRlcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3RhcnQgYSBuZXcgZm9yayBmb3IgbGVuZ3RoLWRlbGltaXRlZCBkYXRhIGxpa2UgYSBtZXNzYWdlXG4gICAgICogb3IgYSBwYWNrZWQgcmVwZWF0ZWQgZmllbGQuXG4gICAgICpcbiAgICAgKiBNdXN0IGJlIGpvaW5lZCBsYXRlciB3aXRoIGBqb2luKClgLlxuICAgICAqL1xuICAgIGZvcmsoKSB7XG4gICAgICAgIHRoaXMuc3RhY2sucHVzaCh7IGNodW5rczogdGhpcy5jaHVua3MsIGJ1ZjogdGhpcy5idWYgfSk7XG4gICAgICAgIHRoaXMuY2h1bmtzID0gW107XG4gICAgICAgIHRoaXMuYnVmID0gW107XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBKb2luIHRoZSBsYXN0IGZvcmsuIFdyaXRlIGl0cyBsZW5ndGggYW5kIGJ5dGVzLCB0aGVuXG4gICAgICogcmV0dXJuIHRvIHRoZSBwcmV2aW91cyBzdGF0ZS5cbiAgICAgKi9cbiAgICBqb2luKCkge1xuICAgICAgICAvLyBnZXQgY2h1bmsgb2YgZm9ya1xuICAgICAgICBsZXQgY2h1bmsgPSB0aGlzLmZpbmlzaCgpO1xuICAgICAgICAvLyByZXN0b3JlIHByZXZpb3VzIHN0YXRlXG4gICAgICAgIGxldCBwcmV2ID0gdGhpcy5zdGFjay5wb3AoKTtcbiAgICAgICAgaWYgKCFwcmV2KVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHN0YXRlLCBmb3JrIHN0YWNrIGVtcHR5Jyk7XG4gICAgICAgIHRoaXMuY2h1bmtzID0gcHJldi5jaHVua3M7XG4gICAgICAgIHRoaXMuYnVmID0gcHJldi5idWY7XG4gICAgICAgIC8vIHdyaXRlIGxlbmd0aCBvZiBjaHVuayBhcyB2YXJpbnRcbiAgICAgICAgdGhpcy51aW50MzIoY2h1bmsuYnl0ZUxlbmd0aCk7XG4gICAgICAgIHJldHVybiB0aGlzLnJhdyhjaHVuayk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyaXRlcyBhIHRhZyAoZmllbGQgbnVtYmVyIGFuZCB3aXJlIHR5cGUpLlxuICAgICAqXG4gICAgICogRXF1aXZhbGVudCB0byBgdWludDMyKCAoZmllbGRObyA8PCAzIHwgdHlwZSkgPj4+IDAgKWAuXG4gICAgICpcbiAgICAgKiBHZW5lcmF0ZWQgY29kZSBzaG91bGQgY29tcHV0ZSB0aGUgdGFnIGFoZWFkIG9mIHRpbWUgYW5kIGNhbGwgYHVpbnQzMigpYC5cbiAgICAgKi9cbiAgICB0YWcoZmllbGRObywgdHlwZSkge1xuICAgICAgICByZXR1cm4gdGhpcy51aW50MzIoKGZpZWxkTm8gPDwgMyB8IHR5cGUpID4+PiAwKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGUgYSBjaHVuayBvZiByYXcgYnl0ZXMuXG4gICAgICovXG4gICAgcmF3KGNodW5rKSB7XG4gICAgICAgIGlmICh0aGlzLmJ1Zi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuY2h1bmtzLnB1c2gobmV3IFVpbnQ4QXJyYXkodGhpcy5idWYpKTtcbiAgICAgICAgICAgIHRoaXMuYnVmID0gW107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaHVua3MucHVzaChjaHVuayk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXcml0ZSBhIGB1aW50MzJgIHZhbHVlLCBhbiB1bnNpZ25lZCAzMiBiaXQgdmFyaW50LlxuICAgICAqL1xuICAgIHVpbnQzMih2YWx1ZSkge1xuICAgICAgICBhc3NlcnRfMS5hc3NlcnRVSW50MzIodmFsdWUpO1xuICAgICAgICAvLyB3cml0ZSB2YWx1ZSBhcyB2YXJpbnQgMzIsIGlubGluZWQgZm9yIHNwZWVkXG4gICAgICAgIHdoaWxlICh2YWx1ZSA+IDB4N2YpIHtcbiAgICAgICAgICAgIHRoaXMuYnVmLnB1c2goKHZhbHVlICYgMHg3ZikgfCAweDgwKTtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgPj4+IDc7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5idWYucHVzaCh2YWx1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXcml0ZSBhIGBpbnQzMmAgdmFsdWUsIGEgc2lnbmVkIDMyIGJpdCB2YXJpbnQuXG4gICAgICovXG4gICAgaW50MzIodmFsdWUpIHtcbiAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0SW50MzIodmFsdWUpO1xuICAgICAgICBnb29nX3ZhcmludF8xLnZhcmludDMyd3JpdGUodmFsdWUsIHRoaXMuYnVmKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyaXRlIGEgYGJvb2xgIHZhbHVlLCBhIHZhcmlhbnQuXG4gICAgICovXG4gICAgYm9vbCh2YWx1ZSkge1xuICAgICAgICB0aGlzLmJ1Zi5wdXNoKHZhbHVlID8gMSA6IDApO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGUgYSBgYnl0ZXNgIHZhbHVlLCBsZW5ndGgtZGVsaW1pdGVkIGFyYml0cmFyeSBkYXRhLlxuICAgICAqL1xuICAgIGJ5dGVzKHZhbHVlKSB7XG4gICAgICAgIHRoaXMudWludDMyKHZhbHVlLmJ5dGVMZW5ndGgpOyAvLyB3cml0ZSBsZW5ndGggb2YgY2h1bmsgYXMgdmFyaW50XG4gICAgICAgIHJldHVybiB0aGlzLnJhdyh2YWx1ZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyaXRlIGEgYHN0cmluZ2AgdmFsdWUsIGxlbmd0aC1kZWxpbWl0ZWQgZGF0YSBjb252ZXJ0ZWQgdG8gVVRGLTggdGV4dC5cbiAgICAgKi9cbiAgICBzdHJpbmcodmFsdWUpIHtcbiAgICAgICAgbGV0IGNodW5rID0gdGhpcy50ZXh0RW5jb2Rlci5lbmNvZGUodmFsdWUpO1xuICAgICAgICB0aGlzLnVpbnQzMihjaHVuay5ieXRlTGVuZ3RoKTsgLy8gd3JpdGUgbGVuZ3RoIG9mIGNodW5rIGFzIHZhcmludFxuICAgICAgICByZXR1cm4gdGhpcy5yYXcoY2h1bmspO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXcml0ZSBhIGBmbG9hdGAgdmFsdWUsIDMyLWJpdCBmbG9hdGluZyBwb2ludCBudW1iZXIuXG4gICAgICovXG4gICAgZmxvYXQodmFsdWUpIHtcbiAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0RmxvYXQzMih2YWx1ZSk7XG4gICAgICAgIGxldCBjaHVuayA9IG5ldyBVaW50OEFycmF5KDQpO1xuICAgICAgICBuZXcgRGF0YVZpZXcoY2h1bmsuYnVmZmVyKS5zZXRGbG9hdDMyKDAsIHZhbHVlLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucmF3KGNodW5rKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGUgYSBgZG91YmxlYCB2YWx1ZSwgYSA2NC1iaXQgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLlxuICAgICAqL1xuICAgIGRvdWJsZSh2YWx1ZSkge1xuICAgICAgICBsZXQgY2h1bmsgPSBuZXcgVWludDhBcnJheSg4KTtcbiAgICAgICAgbmV3IERhdGFWaWV3KGNodW5rLmJ1ZmZlcikuc2V0RmxvYXQ2NCgwLCB2YWx1ZSwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzLnJhdyhjaHVuayk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyaXRlIGEgYGZpeGVkMzJgIHZhbHVlLCBhbiB1bnNpZ25lZCwgZml4ZWQtbGVuZ3RoIDMyLWJpdCBpbnRlZ2VyLlxuICAgICAqL1xuICAgIGZpeGVkMzIodmFsdWUpIHtcbiAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0VUludDMyKHZhbHVlKTtcbiAgICAgICAgbGV0IGNodW5rID0gbmV3IFVpbnQ4QXJyYXkoNCk7XG4gICAgICAgIG5ldyBEYXRhVmlldyhjaHVuay5idWZmZXIpLnNldFVpbnQzMigwLCB2YWx1ZSwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzLnJhdyhjaHVuayk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyaXRlIGEgYHNmaXhlZDMyYCB2YWx1ZSwgYSBzaWduZWQsIGZpeGVkLWxlbmd0aCAzMi1iaXQgaW50ZWdlci5cbiAgICAgKi9cbiAgICBzZml4ZWQzMih2YWx1ZSkge1xuICAgICAgICBhc3NlcnRfMS5hc3NlcnRJbnQzMih2YWx1ZSk7XG4gICAgICAgIGxldCBjaHVuayA9IG5ldyBVaW50OEFycmF5KDQpO1xuICAgICAgICBuZXcgRGF0YVZpZXcoY2h1bmsuYnVmZmVyKS5zZXRJbnQzMigwLCB2YWx1ZSwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzLnJhdyhjaHVuayk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyaXRlIGEgYHNpbnQzMmAgdmFsdWUsIGEgc2lnbmVkLCB6aWd6YWctZW5jb2RlZCAzMi1iaXQgdmFyaW50LlxuICAgICAqL1xuICAgIHNpbnQzMih2YWx1ZSkge1xuICAgICAgICBhc3NlcnRfMS5hc3NlcnRJbnQzMih2YWx1ZSk7XG4gICAgICAgIC8vIHppZ3phZyBlbmNvZGVcbiAgICAgICAgdmFsdWUgPSAoKHZhbHVlIDw8IDEpIF4gKHZhbHVlID4+IDMxKSkgPj4+IDA7XG4gICAgICAgIGdvb2dfdmFyaW50XzEudmFyaW50MzJ3cml0ZSh2YWx1ZSwgdGhpcy5idWYpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGUgYSBgZml4ZWQ2NGAgdmFsdWUsIGEgc2lnbmVkLCBmaXhlZC1sZW5ndGggNjQtYml0IGludGVnZXIuXG4gICAgICovXG4gICAgc2ZpeGVkNjQodmFsdWUpIHtcbiAgICAgICAgbGV0IGNodW5rID0gbmV3IFVpbnQ4QXJyYXkoOCk7XG4gICAgICAgIGxldCB2aWV3ID0gbmV3IERhdGFWaWV3KGNodW5rLmJ1ZmZlcik7XG4gICAgICAgIGxldCBsb25nID0gcGJfbG9uZ18xLlBiTG9uZy5mcm9tKHZhbHVlKTtcbiAgICAgICAgdmlldy5zZXRJbnQzMigwLCBsb25nLmxvLCB0cnVlKTtcbiAgICAgICAgdmlldy5zZXRJbnQzMig0LCBsb25nLmhpLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucmF3KGNodW5rKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGUgYSBgZml4ZWQ2NGAgdmFsdWUsIGFuIHVuc2lnbmVkLCBmaXhlZC1sZW5ndGggNjQgYml0IGludGVnZXIuXG4gICAgICovXG4gICAgZml4ZWQ2NCh2YWx1ZSkge1xuICAgICAgICBsZXQgY2h1bmsgPSBuZXcgVWludDhBcnJheSg4KTtcbiAgICAgICAgbGV0IHZpZXcgPSBuZXcgRGF0YVZpZXcoY2h1bmsuYnVmZmVyKTtcbiAgICAgICAgbGV0IGxvbmcgPSBwYl9sb25nXzEuUGJVTG9uZy5mcm9tKHZhbHVlKTtcbiAgICAgICAgdmlldy5zZXRJbnQzMigwLCBsb25nLmxvLCB0cnVlKTtcbiAgICAgICAgdmlldy5zZXRJbnQzMig0LCBsb25nLmhpLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucmF3KGNodW5rKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGUgYSBgaW50NjRgIHZhbHVlLCBhIHNpZ25lZCA2NC1iaXQgdmFyaW50LlxuICAgICAqL1xuICAgIGludDY0KHZhbHVlKSB7XG4gICAgICAgIGxldCBsb25nID0gcGJfbG9uZ18xLlBiTG9uZy5mcm9tKHZhbHVlKTtcbiAgICAgICAgZ29vZ192YXJpbnRfMS52YXJpbnQ2NHdyaXRlKGxvbmcubG8sIGxvbmcuaGksIHRoaXMuYnVmKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyaXRlIGEgYHNpbnQ2NGAgdmFsdWUsIGEgc2lnbmVkLCB6aWctemFnLWVuY29kZWQgNjQtYml0IHZhcmludC5cbiAgICAgKi9cbiAgICBzaW50NjQodmFsdWUpIHtcbiAgICAgICAgbGV0IGxvbmcgPSBwYl9sb25nXzEuUGJMb25nLmZyb20odmFsdWUpLCBcbiAgICAgICAgLy8gemlnemFnIGVuY29kZVxuICAgICAgICBzaWduID0gbG9uZy5oaSA+PiAzMSwgbG8gPSAobG9uZy5sbyA8PCAxKSBeIHNpZ24sIGhpID0gKChsb25nLmhpIDw8IDEpIHwgKGxvbmcubG8gPj4+IDMxKSkgXiBzaWduO1xuICAgICAgICBnb29nX3ZhcmludF8xLnZhcmludDY0d3JpdGUobG8sIGhpLCB0aGlzLmJ1Zik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXcml0ZSBhIGB1aW50NjRgIHZhbHVlLCBhbiB1bnNpZ25lZCA2NC1iaXQgdmFyaW50LlxuICAgICAqL1xuICAgIHVpbnQ2NCh2YWx1ZSkge1xuICAgICAgICBsZXQgbG9uZyA9IHBiX2xvbmdfMS5QYlVMb25nLmZyb20odmFsdWUpO1xuICAgICAgICBnb29nX3ZhcmludF8xLnZhcmludDY0d3JpdGUobG9uZy5sbywgbG9uZy5oaSwgdGhpcy5idWYpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59XG5leHBvcnRzLkJpbmFyeVdyaXRlciA9IEJpbmFyeVdyaXRlcjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLm1lcmdlSnNvbk9wdGlvbnMgPSBleHBvcnRzLmpzb25Xcml0ZU9wdGlvbnMgPSBleHBvcnRzLmpzb25SZWFkT3B0aW9ucyA9IHZvaWQgMDtcbmNvbnN0IGRlZmF1bHRzV3JpdGUgPSB7XG4gICAgZW1pdERlZmF1bHRWYWx1ZXM6IGZhbHNlLFxuICAgIGVudW1Bc0ludGVnZXI6IGZhbHNlLFxuICAgIHVzZVByb3RvRmllbGROYW1lOiBmYWxzZSxcbiAgICBwcmV0dHlTcGFjZXM6IDAsXG59LCBkZWZhdWx0c1JlYWQgPSB7XG4gICAgaWdub3JlVW5rbm93bkZpZWxkczogZmFsc2UsXG59O1xuLyoqXG4gKiBNYWtlIG9wdGlvbnMgZm9yIHJlYWRpbmcgSlNPTiBkYXRhIGZyb20gcGFydGlhbCBvcHRpb25zLlxuICovXG5mdW5jdGlvbiBqc29uUmVhZE9wdGlvbnMob3B0aW9ucykge1xuICAgIHJldHVybiBvcHRpb25zID8gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0c1JlYWQpLCBvcHRpb25zKSA6IGRlZmF1bHRzUmVhZDtcbn1cbmV4cG9ydHMuanNvblJlYWRPcHRpb25zID0ganNvblJlYWRPcHRpb25zO1xuLyoqXG4gKiBNYWtlIG9wdGlvbnMgZm9yIHdyaXRpbmcgSlNPTiBkYXRhIGZyb20gcGFydGlhbCBvcHRpb25zLlxuICovXG5mdW5jdGlvbiBqc29uV3JpdGVPcHRpb25zKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gb3B0aW9ucyA/IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdHNXcml0ZSksIG9wdGlvbnMpIDogZGVmYXVsdHNXcml0ZTtcbn1cbmV4cG9ydHMuanNvbldyaXRlT3B0aW9ucyA9IGpzb25Xcml0ZU9wdGlvbnM7XG4vKipcbiAqIE1lcmdlcyBKU09OIHdyaXRlIG9yIHJlYWQgb3B0aW9ucy4gTGF0ZXIgdmFsdWVzIG92ZXJyaWRlIGVhcmxpZXIgdmFsdWVzLiBUeXBlIHJlZ2lzdHJpZXMgYXJlIG1lcmdlZC5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VKc29uT3B0aW9ucyhhLCBiKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICBsZXQgYyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYSksIGIpO1xuICAgIGMudHlwZVJlZ2lzdHJ5ID0gWy4uLigoX2EgPSBhID09PSBudWxsIHx8IGEgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGEudHlwZVJlZ2lzdHJ5KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBbXSksIC4uLigoX2IgPSBiID09PSBudWxsIHx8IGIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGIudHlwZVJlZ2lzdHJ5KSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBbXSldO1xuICAgIHJldHVybiBjO1xufVxuZXhwb3J0cy5tZXJnZUpzb25PcHRpb25zID0gbWVyZ2VKc29uT3B0aW9ucztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk1FU1NBR0VfVFlQRSA9IHZvaWQgMDtcbi8qKlxuICogVGhlIHN5bWJvbCB1c2VkIGFzIGEga2V5IG9uIG1lc3NhZ2Ugb2JqZWN0cyB0byBzdG9yZSB0aGUgbWVzc2FnZSB0eXBlLlxuICpcbiAqIE5vdGUgdGhhdCB0aGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBmZWF0dXJlIC0gaXQgaXMgaGVyZSB0byBzdGF5LCBidXRcbiAqIGltcGxlbWVudGF0aW9uIGRldGFpbHMgbWF5IGNoYW5nZSB3aXRob3V0IG5vdGljZS5cbiAqL1xuZXhwb3J0cy5NRVNTQUdFX1RZUEUgPSBTeW1ib2wuZm9yKFwicHJvdG9idWYtdHMvbWVzc2FnZS10eXBlXCIpO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubG93ZXJDYW1lbENhc2UgPSB2b2lkIDA7XG4vKipcbiAqIENvbnZlcnRzIHNuYWtlX2Nhc2UgdG8gbG93ZXJDYW1lbENhc2UuXG4gKlxuICogU2hvdWxkIGJlaGF2ZSBsaWtlIHByb3RvYzpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9wcm90b2NvbGJ1ZmZlcnMvcHJvdG9idWYvYmxvYi9lOGFlMTM3Yzk2NDQ0ZWEzMTM0ODVlZDExMThjNWU0M2IyMDk5Y2YxL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2hlbHBlcnMuY2MjTDExOFxuICovXG5mdW5jdGlvbiBsb3dlckNhbWVsQ2FzZShzbmFrZUNhc2UpIHtcbiAgICBsZXQgY2FwTmV4dCA9IGZhbHNlO1xuICAgIGNvbnN0IHNiID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzbmFrZUNhc2UubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGV0IG5leHQgPSBzbmFrZUNhc2UuY2hhckF0KGkpO1xuICAgICAgICBpZiAobmV4dCA9PSAnXycpIHtcbiAgICAgICAgICAgIGNhcE5leHQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKC9cXGQvLnRlc3QobmV4dCkpIHtcbiAgICAgICAgICAgIHNiLnB1c2gobmV4dCk7XG4gICAgICAgICAgICBjYXBOZXh0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjYXBOZXh0KSB7XG4gICAgICAgICAgICBzYi5wdXNoKG5leHQudG9VcHBlckNhc2UoKSk7XG4gICAgICAgICAgICBjYXBOZXh0ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaSA9PSAwKSB7XG4gICAgICAgICAgICBzYi5wdXNoKG5leHQudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzYi5wdXNoKG5leHQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzYi5qb2luKCcnKTtcbn1cbmV4cG9ydHMubG93ZXJDYW1lbENhc2UgPSBsb3dlckNhbWVsQ2FzZTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlYWRNZXNzYWdlT3B0aW9uID0gZXhwb3J0cy5yZWFkRmllbGRPcHRpb24gPSBleHBvcnRzLnJlYWRGaWVsZE9wdGlvbnMgPSBleHBvcnRzLm5vcm1hbGl6ZUZpZWxkSW5mbyA9IGV4cG9ydHMuUmVwZWF0VHlwZSA9IGV4cG9ydHMuTG9uZ1R5cGUgPSBleHBvcnRzLlNjYWxhclR5cGUgPSB2b2lkIDA7XG5jb25zdCBsb3dlcl9jYW1lbF9jYXNlXzEgPSByZXF1aXJlKFwiLi9sb3dlci1jYW1lbC1jYXNlXCIpO1xuLyoqXG4gKiBTY2FsYXIgdmFsdWUgdHlwZXMuIFRoaXMgaXMgYSBzdWJzZXQgb2YgZmllbGQgdHlwZXMgZGVjbGFyZWQgYnkgcHJvdG9idWZcbiAqIGVudW0gZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLlR5cGUgVGhlIHR5cGVzIEdST1VQIGFuZCBNRVNTQUdFXG4gKiBhcmUgb21pdHRlZCwgYnV0IHRoZSBudW1lcmljYWwgdmFsdWVzIGFyZSBpZGVudGljYWwuXG4gKi9cbnZhciBTY2FsYXJUeXBlO1xuKGZ1bmN0aW9uIChTY2FsYXJUeXBlKSB7XG4gICAgLy8gMCBpcyByZXNlcnZlZCBmb3IgZXJyb3JzLlxuICAgIC8vIE9yZGVyIGlzIHdlaXJkIGZvciBoaXN0b3JpY2FsIHJlYXNvbnMuXG4gICAgU2NhbGFyVHlwZVtTY2FsYXJUeXBlW1wiRE9VQkxFXCJdID0gMV0gPSBcIkRPVUJMRVwiO1xuICAgIFNjYWxhclR5cGVbU2NhbGFyVHlwZVtcIkZMT0FUXCJdID0gMl0gPSBcIkZMT0FUXCI7XG4gICAgLy8gTm90IFppZ1phZyBlbmNvZGVkLiAgTmVnYXRpdmUgbnVtYmVycyB0YWtlIDEwIGJ5dGVzLiAgVXNlIFRZUEVfU0lOVDY0IGlmXG4gICAgLy8gbmVnYXRpdmUgdmFsdWVzIGFyZSBsaWtlbHkuXG4gICAgU2NhbGFyVHlwZVtTY2FsYXJUeXBlW1wiSU5UNjRcIl0gPSAzXSA9IFwiSU5UNjRcIjtcbiAgICBTY2FsYXJUeXBlW1NjYWxhclR5cGVbXCJVSU5UNjRcIl0gPSA0XSA9IFwiVUlOVDY0XCI7XG4gICAgLy8gTm90IFppZ1phZyBlbmNvZGVkLiAgTmVnYXRpdmUgbnVtYmVycyB0YWtlIDEwIGJ5dGVzLiAgVXNlIFRZUEVfU0lOVDMyIGlmXG4gICAgLy8gbmVnYXRpdmUgdmFsdWVzIGFyZSBsaWtlbHkuXG4gICAgU2NhbGFyVHlwZVtTY2FsYXJUeXBlW1wiSU5UMzJcIl0gPSA1XSA9IFwiSU5UMzJcIjtcbiAgICBTY2FsYXJUeXBlW1NjYWxhclR5cGVbXCJGSVhFRDY0XCJdID0gNl0gPSBcIkZJWEVENjRcIjtcbiAgICBTY2FsYXJUeXBlW1NjYWxhclR5cGVbXCJGSVhFRDMyXCJdID0gN10gPSBcIkZJWEVEMzJcIjtcbiAgICBTY2FsYXJUeXBlW1NjYWxhclR5cGVbXCJCT09MXCJdID0gOF0gPSBcIkJPT0xcIjtcbiAgICBTY2FsYXJUeXBlW1NjYWxhclR5cGVbXCJTVFJJTkdcIl0gPSA5XSA9IFwiU1RSSU5HXCI7XG4gICAgLy8gVGFnLWRlbGltaXRlZCBhZ2dyZWdhdGUuXG4gICAgLy8gR3JvdXAgdHlwZSBpcyBkZXByZWNhdGVkIGFuZCBub3Qgc3VwcG9ydGVkIGluIHByb3RvMy4gSG93ZXZlciwgUHJvdG8zXG4gICAgLy8gaW1wbGVtZW50YXRpb25zIHNob3VsZCBzdGlsbCBiZSBhYmxlIHRvIHBhcnNlIHRoZSBncm91cCB3aXJlIGZvcm1hdCBhbmRcbiAgICAvLyB0cmVhdCBncm91cCBmaWVsZHMgYXMgdW5rbm93biBmaWVsZHMuXG4gICAgLy8gVFlQRV9HUk9VUCA9IDEwLFxuICAgIC8vIFRZUEVfTUVTU0FHRSA9IDExLCAgLy8gTGVuZ3RoLWRlbGltaXRlZCBhZ2dyZWdhdGUuXG4gICAgLy8gTmV3IGluIHZlcnNpb24gMi5cbiAgICBTY2FsYXJUeXBlW1NjYWxhclR5cGVbXCJCWVRFU1wiXSA9IDEyXSA9IFwiQllURVNcIjtcbiAgICBTY2FsYXJUeXBlW1NjYWxhclR5cGVbXCJVSU5UMzJcIl0gPSAxM10gPSBcIlVJTlQzMlwiO1xuICAgIC8vIFRZUEVfRU5VTSA9IDE0LFxuICAgIFNjYWxhclR5cGVbU2NhbGFyVHlwZVtcIlNGSVhFRDMyXCJdID0gMTVdID0gXCJTRklYRUQzMlwiO1xuICAgIFNjYWxhclR5cGVbU2NhbGFyVHlwZVtcIlNGSVhFRDY0XCJdID0gMTZdID0gXCJTRklYRUQ2NFwiO1xuICAgIFNjYWxhclR5cGVbU2NhbGFyVHlwZVtcIlNJTlQzMlwiXSA9IDE3XSA9IFwiU0lOVDMyXCI7XG4gICAgU2NhbGFyVHlwZVtTY2FsYXJUeXBlW1wiU0lOVDY0XCJdID0gMThdID0gXCJTSU5UNjRcIjtcbn0pKFNjYWxhclR5cGUgPSBleHBvcnRzLlNjYWxhclR5cGUgfHwgKGV4cG9ydHMuU2NhbGFyVHlwZSA9IHt9KSk7XG4vKipcbiAqIEphdmFTY3JpcHQgcmVwcmVzZW50YXRpb24gb2YgNjQgYml0IGludGVncmFsIHR5cGVzLiBFcXVpdmFsZW50IHRvIHRoZVxuICogZmllbGQgb3B0aW9uIFwianN0eXBlXCIuXG4gKlxuICogQnkgZGVmYXVsdCwgcHJvdG9idWYtdHMgcmVwcmVzZW50cyA2NCBiaXQgdHlwZXMgYXMgYGJpZ2ludGAuXG4gKlxuICogWW91IGNhbiBjaGFuZ2UgdGhlIGRlZmF1bHQgYmVoYXZpb3VyIGJ5IGVuYWJsaW5nIHRoZSBwbHVnaW4gcGFyYW1ldGVyXG4gKiBgbG9uZ190eXBlX3N0cmluZ2AsIHdoaWNoIHdpbGwgcmVwcmVzZW50IDY0IGJpdCB0eXBlcyBhcyBgc3RyaW5nYC5cbiAqXG4gKiBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGNoYW5nZSB0aGUgYmVoYXZpb3VyIGZvciBpbmRpdmlkdWFsIGZpZWxkc1xuICogd2l0aCB0aGUgZmllbGQgb3B0aW9uIFwianN0eXBlXCI6XG4gKlxuICogYGBgcHJvdG9idWZcbiAqIHVpbnQ2NCBteV9maWVsZCA9IDEgW2pzdHlwZSA9IEpTX1NUUklOR107XG4gKiB1aW50NjQgb3RoZXJfZmllbGQgPSAyIFtqc3R5cGUgPSBKU19OVU1CRVJdO1xuICogYGBgXG4gKi9cbnZhciBMb25nVHlwZTtcbihmdW5jdGlvbiAoTG9uZ1R5cGUpIHtcbiAgICAvKipcbiAgICAgKiBVc2UgSmF2YVNjcmlwdCBgYmlnaW50YC5cbiAgICAgKlxuICAgICAqIEZpZWxkIG9wdGlvbiBgW2pzdHlwZSA9IEpTX05PUk1BTF1gLlxuICAgICAqL1xuICAgIExvbmdUeXBlW0xvbmdUeXBlW1wiQklHSU5UXCJdID0gMF0gPSBcIkJJR0lOVFwiO1xuICAgIC8qKlxuICAgICAqIFVzZSBKYXZhU2NyaXB0IGBzdHJpbmdgLlxuICAgICAqXG4gICAgICogRmllbGQgb3B0aW9uIGBbanN0eXBlID0gSlNfU1RSSU5HXWAuXG4gICAgICovXG4gICAgTG9uZ1R5cGVbTG9uZ1R5cGVbXCJTVFJJTkdcIl0gPSAxXSA9IFwiU1RSSU5HXCI7XG4gICAgLyoqXG4gICAgICogVXNlIEphdmFTY3JpcHQgYG51bWJlcmAuXG4gICAgICpcbiAgICAgKiBMYXJnZSB2YWx1ZXMgd2lsbCBsb29zZSBwcmVjaXNpb24uXG4gICAgICpcbiAgICAgKiBGaWVsZCBvcHRpb24gYFtqc3R5cGUgPSBKU19OVU1CRVJdYC5cbiAgICAgKi9cbiAgICBMb25nVHlwZVtMb25nVHlwZVtcIk5VTUJFUlwiXSA9IDJdID0gXCJOVU1CRVJcIjtcbn0pKExvbmdUeXBlID0gZXhwb3J0cy5Mb25nVHlwZSB8fCAoZXhwb3J0cy5Mb25nVHlwZSA9IHt9KSk7XG4vKipcbiAqIFByb3RvYnVmIDIuMS4wIGludHJvZHVjZWQgcGFja2VkIHJlcGVhdGVkIGZpZWxkcy5cbiAqIFNldHRpbmcgdGhlIGZpZWxkIG9wdGlvbiBgW3BhY2tlZCA9IHRydWVdYCBlbmFibGVzIHBhY2tpbmcuXG4gKlxuICogSW4gcHJvdG8zLCBhbGwgcmVwZWF0ZWQgZmllbGRzIGFyZSBwYWNrZWQgYnkgZGVmYXVsdC5cbiAqIFNldHRpbmcgdGhlIGZpZWxkIG9wdGlvbiBgW3BhY2tlZCA9IGZhbHNlXWAgZGlzYWJsZXMgcGFja2luZy5cbiAqXG4gKiBQYWNrZWQgcmVwZWF0ZWQgZmllbGRzIGFyZSBlbmNvZGVkIHdpdGggYSBzaW5nbGUgdGFnLFxuICogdGhlbiBhIGxlbmd0aC1kZWxpbWl0ZXIsIHRoZW4gdGhlIGVsZW1lbnQgdmFsdWVzLlxuICpcbiAqIFVucGFja2VkIHJlcGVhdGVkIGZpZWxkcyBhcmUgZW5jb2RlZCB3aXRoIGEgdGFnIGFuZFxuICogdmFsdWUgZm9yIGVhY2ggZWxlbWVudC5cbiAqXG4gKiBgYnl0ZXNgIGFuZCBgc3RyaW5nYCBjYW5ub3QgYmUgcGFja2VkLlxuICovXG52YXIgUmVwZWF0VHlwZTtcbihmdW5jdGlvbiAoUmVwZWF0VHlwZSkge1xuICAgIC8qKlxuICAgICAqIFRoZSBmaWVsZCBpcyBub3QgcmVwZWF0ZWQuXG4gICAgICovXG4gICAgUmVwZWF0VHlwZVtSZXBlYXRUeXBlW1wiTk9cIl0gPSAwXSA9IFwiTk9cIjtcbiAgICAvKipcbiAgICAgKiBUaGUgZmllbGQgaXMgcmVwZWF0ZWQgYW5kIHNob3VsZCBiZSBwYWNrZWQuXG4gICAgICogSW52YWxpZCBmb3IgYGJ5dGVzYCBhbmQgYHN0cmluZ2AsIHRoZXkgY2Fubm90IGJlIHBhY2tlZC5cbiAgICAgKi9cbiAgICBSZXBlYXRUeXBlW1JlcGVhdFR5cGVbXCJQQUNLRURcIl0gPSAxXSA9IFwiUEFDS0VEXCI7XG4gICAgLyoqXG4gICAgICogVGhlIGZpZWxkIGlzIHJlcGVhdGVkIGJ1dCBzaG91bGQgbm90IGJlIHBhY2tlZC5cbiAgICAgKiBUaGUgb25seSB2YWxpZCByZXBlYXQgdHlwZSBmb3IgcmVwZWF0ZWQgYGJ5dGVzYCBhbmQgYHN0cmluZ2AuXG4gICAgICovXG4gICAgUmVwZWF0VHlwZVtSZXBlYXRUeXBlW1wiVU5QQUNLRURcIl0gPSAyXSA9IFwiVU5QQUNLRURcIjtcbn0pKFJlcGVhdFR5cGUgPSBleHBvcnRzLlJlcGVhdFR5cGUgfHwgKGV4cG9ydHMuUmVwZWF0VHlwZSA9IHt9KSk7XG4vKipcbiAqIFR1cm5zIFBhcnRpYWxGaWVsZEluZm8gaW50byBGaWVsZEluZm8uXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZUZpZWxkSW5mbyhmaWVsZCkge1xuICAgIHZhciBfYSwgX2IsIF9jLCBfZDtcbiAgICBmaWVsZC5sb2NhbE5hbWUgPSAoX2EgPSBmaWVsZC5sb2NhbE5hbWUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGxvd2VyX2NhbWVsX2Nhc2VfMS5sb3dlckNhbWVsQ2FzZShmaWVsZC5uYW1lKTtcbiAgICBmaWVsZC5qc29uTmFtZSA9IChfYiA9IGZpZWxkLmpzb25OYW1lKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBsb3dlcl9jYW1lbF9jYXNlXzEubG93ZXJDYW1lbENhc2UoZmllbGQubmFtZSk7XG4gICAgZmllbGQucmVwZWF0ID0gKF9jID0gZmllbGQucmVwZWF0KSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiBSZXBlYXRUeXBlLk5PO1xuICAgIGZpZWxkLm9wdCA9IChfZCA9IGZpZWxkLm9wdCkgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDogKGZpZWxkLnJlcGVhdCA/IGZhbHNlIDogZmllbGQub25lb2YgPyBmYWxzZSA6IGZpZWxkLmtpbmQgPT0gXCJtZXNzYWdlXCIpO1xuICAgIHJldHVybiBmaWVsZDtcbn1cbmV4cG9ydHMubm9ybWFsaXplRmllbGRJbmZvID0gbm9ybWFsaXplRmllbGRJbmZvO1xuLyoqXG4gKiBSZWFkIGN1c3RvbSBmaWVsZCBvcHRpb25zIGZyb20gYSBnZW5lcmF0ZWQgbWVzc2FnZSB0eXBlLlxuICpcbiAqIEBkZXByZWNhdGVkIHVzZSByZWFkRmllbGRPcHRpb24oKVxuICovXG5mdW5jdGlvbiByZWFkRmllbGRPcHRpb25zKG1lc3NhZ2VUeXBlLCBmaWVsZE5hbWUsIGV4dGVuc2lvbk5hbWUsIGV4dGVuc2lvblR5cGUpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3Qgb3B0aW9ucyA9IChfYSA9IG1lc3NhZ2VUeXBlLmZpZWxkcy5maW5kKChtLCBpKSA9PiBtLmxvY2FsTmFtZSA9PSBmaWVsZE5hbWUgfHwgaSA9PSBmaWVsZE5hbWUpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub3B0aW9ucztcbiAgICByZXR1cm4gb3B0aW9ucyAmJiBvcHRpb25zW2V4dGVuc2lvbk5hbWVdID8gZXh0ZW5zaW9uVHlwZS5mcm9tSnNvbihvcHRpb25zW2V4dGVuc2lvbk5hbWVdKSA6IHVuZGVmaW5lZDtcbn1cbmV4cG9ydHMucmVhZEZpZWxkT3B0aW9ucyA9IHJlYWRGaWVsZE9wdGlvbnM7XG5mdW5jdGlvbiByZWFkRmllbGRPcHRpb24obWVzc2FnZVR5cGUsIGZpZWxkTmFtZSwgZXh0ZW5zaW9uTmFtZSwgZXh0ZW5zaW9uVHlwZSkge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCBvcHRpb25zID0gKF9hID0gbWVzc2FnZVR5cGUuZmllbGRzLmZpbmQoKG0sIGkpID0+IG0ubG9jYWxOYW1lID09IGZpZWxkTmFtZSB8fCBpID09IGZpZWxkTmFtZSkpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5vcHRpb25zO1xuICAgIGlmICghb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBvcHRpb25WYWwgPSBvcHRpb25zW2V4dGVuc2lvbk5hbWVdO1xuICAgIGlmIChvcHRpb25WYWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gb3B0aW9uVmFsO1xuICAgIH1cbiAgICByZXR1cm4gZXh0ZW5zaW9uVHlwZSA/IGV4dGVuc2lvblR5cGUuZnJvbUpzb24ob3B0aW9uVmFsKSA6IG9wdGlvblZhbDtcbn1cbmV4cG9ydHMucmVhZEZpZWxkT3B0aW9uID0gcmVhZEZpZWxkT3B0aW9uO1xuZnVuY3Rpb24gcmVhZE1lc3NhZ2VPcHRpb24obWVzc2FnZVR5cGUsIGV4dGVuc2lvbk5hbWUsIGV4dGVuc2lvblR5cGUpIHtcbiAgICBjb25zdCBvcHRpb25zID0gbWVzc2FnZVR5cGUub3B0aW9ucztcbiAgICBjb25zdCBvcHRpb25WYWwgPSBvcHRpb25zW2V4dGVuc2lvbk5hbWVdO1xuICAgIGlmIChvcHRpb25WYWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gb3B0aW9uVmFsO1xuICAgIH1cbiAgICByZXR1cm4gZXh0ZW5zaW9uVHlwZSA/IGV4dGVuc2lvblR5cGUuZnJvbUpzb24ob3B0aW9uVmFsKSA6IG9wdGlvblZhbDtcbn1cbmV4cG9ydHMucmVhZE1lc3NhZ2VPcHRpb24gPSByZWFkTWVzc2FnZU9wdGlvbjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldFNlbGVjdGVkT25lb2ZWYWx1ZSA9IGV4cG9ydHMuY2xlYXJPbmVvZlZhbHVlID0gZXhwb3J0cy5zZXRVbmtub3duT25lb2ZWYWx1ZSA9IGV4cG9ydHMuc2V0T25lb2ZWYWx1ZSA9IGV4cG9ydHMuZ2V0T25lb2ZWYWx1ZSA9IGV4cG9ydHMuaXNPbmVvZkdyb3VwID0gdm9pZCAwO1xuLyoqXG4gKiBJcyB0aGUgZ2l2ZW4gdmFsdWUgYSB2YWxpZCBvbmVvZiBncm91cD9cbiAqXG4gKiBXZSByZXByZXNlbnQgcHJvdG9idWYgYG9uZW9mYCBhcyBhbGdlYnJhaWMgZGF0YSB0eXBlcyAoQURUKSBpbiBnZW5lcmF0ZWRcbiAqIGNvZGUuIEJ1dCB3aGVuIHdvcmtpbmcgd2l0aCBtZXNzYWdlcyBvZiB1bmtub3duIHR5cGUsIHRoZSBBRFQgZG9lcyBub3RcbiAqIGhlbHAgdXMuXG4gKlxuICogVGhpcyB0eXBlIGd1YXJkIGNoZWNrcyBpZiB0aGUgZ2l2ZW4gb2JqZWN0IGFkaGVyZXMgdG8gdGhlIEFEVCBydWxlcywgd2hpY2hcbiAqIGFyZSBhcyBmb2xsb3dzOlxuICpcbiAqIDEpIE11c3QgYmUgYW4gb2JqZWN0LlxuICpcbiAqIDIpIE11c3QgaGF2ZSBhIFwib25lb2ZLaW5kXCIgZGlzY3JpbWluYXRvciBwcm9wZXJ0eS5cbiAqXG4gKiAzKSBJZiBcIm9uZW9mS2luZFwiIGlzIGB1bmRlZmluZWRgLCBubyBtZW1iZXIgZmllbGQgaXMgc2VsZWN0ZWQuIFRoZSBvYmplY3RcbiAqIG11c3Qgbm90IGhhdmUgYW55IG90aGVyIHByb3BlcnRpZXMuXG4gKlxuICogNCkgSWYgXCJvbmVvZktpbmRcIiBpcyBhIGBzdHJpbmdgLCB0aGUgbWVtYmVyIGZpZWxkIHdpdGggdGhpcyBuYW1lIGlzXG4gKiBzZWxlY3RlZC5cbiAqXG4gKiA1KSBJZiBhIG1lbWJlciBmaWVsZCBpcyBzZWxlY3RlZCwgdGhlIG9iamVjdCBtdXN0IGhhdmUgYSBzZWNvbmQgcHJvcGVydHlcbiAqIHdpdGggdGhpcyBuYW1lLiBUaGUgcHJvcGVydHkgbXVzdCBub3QgYmUgYHVuZGVmaW5lZGAuXG4gKlxuICogNikgTm8gZXh0cmEgcHJvcGVydGllcyBhcmUgYWxsb3dlZC4gVGhlIG9iamVjdCBoYXMgZWl0aGVyIG9uZSBwcm9wZXJ0eVxuICogKG5vIHNlbGVjdGlvbikgb3IgdHdvIHByb3BlcnRpZXMgKHNlbGVjdGlvbikuXG4gKlxuICovXG5mdW5jdGlvbiBpc09uZW9mR3JvdXAoYW55KSB7XG4gICAgaWYgKHR5cGVvZiBhbnkgIT0gJ29iamVjdCcgfHwgYW55ID09PSBudWxsIHx8ICFhbnkuaGFzT3duUHJvcGVydHkoJ29uZW9mS2luZCcpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgc3dpdGNoICh0eXBlb2YgYW55Lm9uZW9mS2luZCkge1xuICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgICAgICBpZiAoYW55W2FueS5vbmVvZktpbmRdID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGFueSkubGVuZ3RoID09IDI7XG4gICAgICAgIGNhc2UgXCJ1bmRlZmluZWRcIjpcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhhbnkpLmxlbmd0aCA9PSAxO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbmV4cG9ydHMuaXNPbmVvZkdyb3VwID0gaXNPbmVvZkdyb3VwO1xuLyoqXG4gKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgZ2l2ZW4gZmllbGQgaW4gYSBvbmVvZiBncm91cC5cbiAqL1xuZnVuY3Rpb24gZ2V0T25lb2ZWYWx1ZShvbmVvZiwga2luZCkge1xuICAgIHJldHVybiBvbmVvZltraW5kXTtcbn1cbmV4cG9ydHMuZ2V0T25lb2ZWYWx1ZSA9IGdldE9uZW9mVmFsdWU7XG5mdW5jdGlvbiBzZXRPbmVvZlZhbHVlKG9uZW9mLCBraW5kLCB2YWx1ZSkge1xuICAgIGlmIChvbmVvZi5vbmVvZktpbmQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBkZWxldGUgb25lb2Zbb25lb2Yub25lb2ZLaW5kXTtcbiAgICB9XG4gICAgb25lb2Yub25lb2ZLaW5kID0ga2luZDtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBvbmVvZltraW5kXSA9IHZhbHVlO1xuICAgIH1cbn1cbmV4cG9ydHMuc2V0T25lb2ZWYWx1ZSA9IHNldE9uZW9mVmFsdWU7XG5mdW5jdGlvbiBzZXRVbmtub3duT25lb2ZWYWx1ZShvbmVvZiwga2luZCwgdmFsdWUpIHtcbiAgICBpZiAob25lb2Yub25lb2ZLaW5kICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZGVsZXRlIG9uZW9mW29uZW9mLm9uZW9mS2luZF07XG4gICAgfVxuICAgIG9uZW9mLm9uZW9mS2luZCA9IGtpbmQ7XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYga2luZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG9uZW9mW2tpbmRdID0gdmFsdWU7XG4gICAgfVxufVxuZXhwb3J0cy5zZXRVbmtub3duT25lb2ZWYWx1ZSA9IHNldFVua25vd25PbmVvZlZhbHVlO1xuLyoqXG4gKiBSZW1vdmVzIHRoZSBzZWxlY3RlZCBmaWVsZCBpbiBhIG9uZW9mIGdyb3VwLlxuICpcbiAqIE5vdGUgdGhhdCB0aGUgcmVjb21tZW5kZWQgd2F5IHRvIG1vZGlmeSBhIG9uZW9mIGdyb3VwIGlzIHRvIHNldFxuICogYSBuZXcgb2JqZWN0OlxuICpcbiAqIGBgYHRzXG4gKiBtZXNzYWdlLnJlc3VsdCA9IHsgb25lb2ZLaW5kOiB1bmRlZmluZWQgfTtcbiAqIGBgYFxuICovXG5mdW5jdGlvbiBjbGVhck9uZW9mVmFsdWUob25lb2YpIHtcbiAgICBpZiAob25lb2Yub25lb2ZLaW5kICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZGVsZXRlIG9uZW9mW29uZW9mLm9uZW9mS2luZF07XG4gICAgfVxuICAgIG9uZW9mLm9uZW9mS2luZCA9IHVuZGVmaW5lZDtcbn1cbmV4cG9ydHMuY2xlYXJPbmVvZlZhbHVlID0gY2xlYXJPbmVvZlZhbHVlO1xuLyoqXG4gKiBSZXR1cm5zIHRoZSBzZWxlY3RlZCB2YWx1ZSBvZiB0aGUgZ2l2ZW4gb25lb2YgZ3JvdXAuXG4gKlxuICogTm90IHRoYXQgdGhlIHJlY29tbWVuZGVkIHdheSB0byBhY2Nlc3MgYSBvbmVvZiBncm91cCBpcyB0byBjaGVja1xuICogdGhlIFwib25lb2ZLaW5kXCIgcHJvcGVydHkgYW5kIGxldCBUeXBlU2NyaXB0IG5hcnJvdyBkb3duIHRoZSB1bmlvblxuICogdHlwZSBmb3IgeW91OlxuICpcbiAqIGBgYHRzXG4gKiBpZiAobWVzc2FnZS5yZXN1bHQub25lb2ZLaW5kID09PSBcImVycm9yXCIpIHtcbiAqICAgbWVzc2FnZS5yZXN1bHQuZXJyb3I7IC8vIHN0cmluZ1xuICogfVxuICogYGBgXG4gKlxuICogSW4gdGhlIHJhcmUgY2FzZSB5b3UganVzdCBuZWVkIHRoZSB2YWx1ZSwgYW5kIGRvIG5vdCBjYXJlIGFib3V0XG4gKiB3aGljaCBwcm90b2J1ZiBmaWVsZCBpcyBzZWxlY3RlZCwgeW91IGNhbiB1c2UgdGhpcyBmdW5jdGlvblxuICogZm9yIGNvbnZlbmllbmNlLlxuICovXG5mdW5jdGlvbiBnZXRTZWxlY3RlZE9uZW9mVmFsdWUob25lb2YpIHtcbiAgICBpZiAob25lb2Yub25lb2ZLaW5kID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIG9uZW9mW29uZW9mLm9uZW9mS2luZF07XG59XG5leHBvcnRzLmdldFNlbGVjdGVkT25lb2ZWYWx1ZSA9IGdldFNlbGVjdGVkT25lb2ZWYWx1ZTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlJlZmxlY3Rpb25UeXBlQ2hlY2sgPSB2b2lkIDA7XG5jb25zdCByZWZsZWN0aW9uX2luZm9fMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24taW5mb1wiKTtcbmNvbnN0IG9uZW9mXzEgPSByZXF1aXJlKFwiLi9vbmVvZlwiKTtcbi8vIG5vaW5zcGVjdGlvbiBKU01ldGhvZENhbkJlU3RhdGljXG5jbGFzcyBSZWZsZWN0aW9uVHlwZUNoZWNrIHtcbiAgICBjb25zdHJ1Y3RvcihpbmZvKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdGhpcy5maWVsZHMgPSAoX2EgPSBpbmZvLmZpZWxkcykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogW107XG4gICAgfVxuICAgIHByZXBhcmUoKSB7XG4gICAgICAgIGlmICh0aGlzLmRhdGEpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHJlcSA9IFtdLCBrbm93biA9IFtdLCBvbmVvZnMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgZmllbGQgb2YgdGhpcy5maWVsZHMpIHtcbiAgICAgICAgICAgIGlmIChmaWVsZC5vbmVvZikge1xuICAgICAgICAgICAgICAgIGlmICghb25lb2ZzLmluY2x1ZGVzKGZpZWxkLm9uZW9mKSkge1xuICAgICAgICAgICAgICAgICAgICBvbmVvZnMucHVzaChmaWVsZC5vbmVvZik7XG4gICAgICAgICAgICAgICAgICAgIHJlcS5wdXNoKGZpZWxkLm9uZW9mKTtcbiAgICAgICAgICAgICAgICAgICAga25vd24ucHVzaChmaWVsZC5vbmVvZik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAga25vd24ucHVzaChmaWVsZC5sb2NhbE5hbWUpO1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoZmllbGQua2luZCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwic2NhbGFyXCI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJlbnVtXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZpZWxkLm9wdCB8fCBmaWVsZC5yZXBlYXQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxLnB1c2goZmllbGQubG9jYWxOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwibWVzc2FnZVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLnJlcGVhdClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXEucHVzaChmaWVsZC5sb2NhbE5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJtYXBcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcS5wdXNoKGZpZWxkLmxvY2FsTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kYXRhID0geyByZXEsIGtub3duLCBvbmVvZnM6IE9iamVjdC52YWx1ZXMob25lb2ZzKSB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJcyB0aGUgYXJndW1lbnQgYSB2YWxpZCBtZXNzYWdlIGFzIHNwZWNpZmllZCBieSB0aGVcbiAgICAgKiByZWZsZWN0aW9uIGluZm9ybWF0aW9uP1xuICAgICAqXG4gICAgICogQ2hlY2tzIGFsbCBmaWVsZCB0eXBlcyByZWN1cnNpdmVseS4gVGhlIGBkZXB0aGBcbiAgICAgKiBzcGVjaWZpZXMgaG93IGRlZXAgaW50byB0aGUgc3RydWN0dXJlIHRoZSBjaGVjayB3aWxsIGJlLlxuICAgICAqXG4gICAgICogV2l0aCBhIGRlcHRoIG9mIDAsIG9ubHkgdGhlIHByZXNlbmNlIG9mIGZpZWxkc1xuICAgICAqIGlzIGNoZWNrZWQuXG4gICAgICpcbiAgICAgKiBXaXRoIGEgZGVwdGggb2YgMSBvciBtb3JlLCB0aGUgZmllbGQgdHlwZXMgYXJlIGNoZWNrZWQuXG4gICAgICpcbiAgICAgKiBXaXRoIGEgZGVwdGggb2YgMiBvciBtb3JlLCB0aGUgbWVtYmVycyBvZiBtYXAsIHJlcGVhdGVkXG4gICAgICogYW5kIG1lc3NhZ2UgZmllbGRzIGFyZSBjaGVja2VkLlxuICAgICAqXG4gICAgICogTWVzc2FnZSBmaWVsZHMgd2lsbCBiZSBjaGVja2VkIHJlY3Vyc2l2ZWx5IHdpdGggZGVwdGggLSAxLlxuICAgICAqXG4gICAgICogVGhlIG51bWJlciBvZiBtYXAgZW50cmllcyAvIHJlcGVhdGVkIHZhbHVlcyBiZWluZyBjaGVja2VkXG4gICAgICogaXMgPCBkZXB0aC5cbiAgICAgKi9cbiAgICBpcyhtZXNzYWdlLCBkZXB0aCwgYWxsb3dFeGNlc3NQcm9wZXJ0aWVzID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKGRlcHRoIDwgMClcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAobWVzc2FnZSA9PT0gbnVsbCB8fCBtZXNzYWdlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIG1lc3NhZ2UgIT0gJ29iamVjdCcpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHRoaXMucHJlcGFyZSgpO1xuICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzKG1lc3NhZ2UpLCBkYXRhID0gdGhpcy5kYXRhO1xuICAgICAgICAvLyBpZiBhIHJlcXVpcmVkIGZpZWxkIGlzIG1pc3NpbmcgaW4gYXJnLCB0aGlzIGNhbm5vdCBiZSBhIFRcbiAgICAgICAgaWYgKGtleXMubGVuZ3RoIDwgZGF0YS5yZXEubGVuZ3RoIHx8IGRhdGEucmVxLnNvbWUobiA9PiAha2V5cy5pbmNsdWRlcyhuKSkpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmICghYWxsb3dFeGNlc3NQcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAvLyBpZiB0aGUgYXJnIGNvbnRhaW5zIGEga2V5IHdlIGRvbnQga25vdywgdGhpcyBpcyBub3QgYSBsaXRlcmFsIFRcbiAgICAgICAgICAgIGlmIChrZXlzLnNvbWUoayA9PiAhZGF0YS5rbm93bi5pbmNsdWRlcyhrKSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIFwiV2l0aCBhIGRlcHRoIG9mIDAsIG9ubHkgdGhlIHByZXNlbmNlIGFuZCBhYnNlbmNlIG9mIGZpZWxkcyBpcyBjaGVja2VkLlwiXG4gICAgICAgIC8vIFwiV2l0aCBhIGRlcHRoIG9mIDEgb3IgbW9yZSwgdGhlIGZpZWxkIHR5cGVzIGFyZSBjaGVja2VkLlwiXG4gICAgICAgIGlmIChkZXB0aCA8IDEpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNoZWNrIG9uZW9mIGdyb3VwXG4gICAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBkYXRhLm9uZW9mcykge1xuICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSBtZXNzYWdlW25hbWVdO1xuICAgICAgICAgICAgaWYgKCFvbmVvZl8xLmlzT25lb2ZHcm91cChncm91cCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgaWYgKGdyb3VwLm9uZW9mS2luZCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLmZpZWxkcy5maW5kKGYgPT4gZi5sb2NhbE5hbWUgPT09IGdyb3VwLm9uZW9mS2luZCk7XG4gICAgICAgICAgICBpZiAoIWZpZWxkKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gd2UgZm91bmQgbm8gZmllbGQsIGJ1dCBoYXZlIGEga2luZCwgc29tZXRoaW5nIGlzIHdyb25nXG4gICAgICAgICAgICBpZiAoIXRoaXMuZmllbGQoZ3JvdXBbZ3JvdXAub25lb2ZLaW5kXSwgZmllbGQsIGFsbG93RXhjZXNzUHJvcGVydGllcywgZGVwdGgpKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjaGVjayB0eXBlc1xuICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIHRoaXMuZmllbGRzKSB7XG4gICAgICAgICAgICBpZiAoZmllbGQub25lb2YgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGlmICghdGhpcy5maWVsZChtZXNzYWdlW2ZpZWxkLmxvY2FsTmFtZV0sIGZpZWxkLCBhbGxvd0V4Y2Vzc1Byb3BlcnRpZXMsIGRlcHRoKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGZpZWxkKGFyZywgZmllbGQsIGFsbG93RXhjZXNzUHJvcGVydGllcywgZGVwdGgpIHtcbiAgICAgICAgbGV0IHJlcGVhdGVkID0gZmllbGQucmVwZWF0O1xuICAgICAgICBzd2l0Y2ggKGZpZWxkLmtpbmQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJzY2FsYXJcIjpcbiAgICAgICAgICAgICAgICBpZiAoYXJnID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmaWVsZC5vcHQ7XG4gICAgICAgICAgICAgICAgaWYgKHJlcGVhdGVkKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsYXJzKGFyZywgZmllbGQuVCwgZGVwdGgsIGZpZWxkLkwpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxhcihhcmcsIGZpZWxkLlQsIGZpZWxkLkwpO1xuICAgICAgICAgICAgY2FzZSBcImVudW1cIjpcbiAgICAgICAgICAgICAgICBpZiAoYXJnID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmaWVsZC5vcHQ7XG4gICAgICAgICAgICAgICAgaWYgKHJlcGVhdGVkKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsYXJzKGFyZywgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5JTlQzMiwgZGVwdGgpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxhcihhcmcsIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuSU5UMzIpO1xuICAgICAgICAgICAgY2FzZSBcIm1lc3NhZ2VcIjpcbiAgICAgICAgICAgICAgICBpZiAoYXJnID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIGlmIChyZXBlYXRlZClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWVzc2FnZXMoYXJnLCBmaWVsZC5UKCksIGFsbG93RXhjZXNzUHJvcGVydGllcywgZGVwdGgpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2UoYXJnLCBmaWVsZC5UKCksIGFsbG93RXhjZXNzUHJvcGVydGllcywgZGVwdGgpO1xuICAgICAgICAgICAgY2FzZSBcIm1hcFwiOlxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYXJnICE9ICdvYmplY3QnIHx8IGFyZyA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmIChkZXB0aCA8IDIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5tYXBLZXlzKGFyZywgZmllbGQuSywgZGVwdGgpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChmaWVsZC5WLmtpbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcInNjYWxhclwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGFycyhPYmplY3QudmFsdWVzKGFyZyksIGZpZWxkLlYuVCwgZGVwdGgsIGZpZWxkLlYuTCk7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJlbnVtXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsYXJzKE9iamVjdC52YWx1ZXMoYXJnKSwgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5JTlQzMiwgZGVwdGgpO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwibWVzc2FnZVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWVzc2FnZXMoT2JqZWN0LnZhbHVlcyhhcmcpLCBmaWVsZC5WLlQoKSwgYWxsb3dFeGNlc3NQcm9wZXJ0aWVzLCBkZXB0aCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBtZXNzYWdlKGFyZywgdHlwZSwgYWxsb3dFeGNlc3NQcm9wZXJ0aWVzLCBkZXB0aCkge1xuICAgICAgICBpZiAoYWxsb3dFeGNlc3NQcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICByZXR1cm4gdHlwZS5pc0Fzc2lnbmFibGUoYXJnLCBkZXB0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHR5cGUuaXMoYXJnLCBkZXB0aCk7XG4gICAgfVxuICAgIG1lc3NhZ2VzKGFyZywgdHlwZSwgYWxsb3dFeGNlc3NQcm9wZXJ0aWVzLCBkZXB0aCkge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJnKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKGRlcHRoIDwgMilcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAoYWxsb3dFeGNlc3NQcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZy5sZW5ndGggJiYgaSA8IGRlcHRoOyBpKyspXG4gICAgICAgICAgICAgICAgaWYgKCF0eXBlLmlzQXNzaWduYWJsZShhcmdbaV0sIGRlcHRoIC0gMSkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJnLmxlbmd0aCAmJiBpIDwgZGVwdGg7IGkrKylcbiAgICAgICAgICAgICAgICBpZiAoIXR5cGUuaXMoYXJnW2ldLCBkZXB0aCAtIDEpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHNjYWxhcihhcmcsIHR5cGUsIGxvbmdUeXBlKSB7XG4gICAgICAgIGxldCBhcmdUeXBlID0gdHlwZW9mIGFyZztcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuVUlOVDY0OlxuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkZJWEVENjQ6XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuSU5UNjQ6XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuU0ZJWEVENjQ6XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuU0lOVDY0OlxuICAgICAgICAgICAgICAgIHN3aXRjaCAobG9uZ1R5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5Mb25nVHlwZS5CSUdJTlQ6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJnVHlwZSA9PSBcImJpZ2ludFwiO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLkxvbmdUeXBlLk5VTUJFUjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhcmdUeXBlID09IFwibnVtYmVyXCIgJiYgIWlzTmFOKGFyZyk7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJnVHlwZSA9PSBcInN0cmluZ1wiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5CT09MOlxuICAgICAgICAgICAgICAgIHJldHVybiBhcmdUeXBlID09ICdib29sZWFuJztcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TVFJJTkc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFyZ1R5cGUgPT0gJ3N0cmluZyc7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuQllURVM6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFyZyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXk7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuRE9VQkxFOlxuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkZMT0FUOlxuICAgICAgICAgICAgICAgIHJldHVybiBhcmdUeXBlID09ICdudW1iZXInICYmICFpc05hTihhcmcpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAvLyBjYXNlIFNjYWxhclR5cGUuVUlOVDMyOlxuICAgICAgICAgICAgICAgIC8vIGNhc2UgU2NhbGFyVHlwZS5GSVhFRDMyOlxuICAgICAgICAgICAgICAgIC8vIGNhc2UgU2NhbGFyVHlwZS5JTlQzMjpcbiAgICAgICAgICAgICAgICAvLyBjYXNlIFNjYWxhclR5cGUuU0lOVDMyOlxuICAgICAgICAgICAgICAgIC8vIGNhc2UgU2NhbGFyVHlwZS5TRklYRUQzMjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJnVHlwZSA9PSAnbnVtYmVyJyAmJiBOdW1iZXIuaXNJbnRlZ2VyKGFyZyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2NhbGFycyhhcmcsIHR5cGUsIGRlcHRoLCBsb25nVHlwZSkge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJnKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKGRlcHRoIDwgMilcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhcmcpKVxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmcubGVuZ3RoICYmIGkgPCBkZXB0aDsgaSsrKVxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5zY2FsYXIoYXJnW2ldLCB0eXBlLCBsb25nVHlwZSkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIG1hcEtleXMobWFwLCB0eXBlLCBkZXB0aCkge1xuICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzKG1hcCk7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLklOVDMyOlxuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkZJWEVEMzI6XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuU0ZJWEVEMzI6XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuU0lOVDMyOlxuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlVJTlQzMjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsYXJzKGtleXMuc2xpY2UoMCwgZGVwdGgpLm1hcChrID0+IHBhcnNlSW50KGspKSwgdHlwZSwgZGVwdGgpO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkJPT0w6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGFycyhrZXlzLnNsaWNlKDAsIGRlcHRoKS5tYXAoayA9PiBrID09ICd0cnVlJyA/IHRydWUgOiBrID09ICdmYWxzZScgPyBmYWxzZSA6IGspLCB0eXBlLCBkZXB0aCk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxhcnMoa2V5cywgdHlwZSwgZGVwdGgsIHJlZmxlY3Rpb25faW5mb18xLkxvbmdUeXBlLlNUUklORyk7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLlJlZmxlY3Rpb25UeXBlQ2hlY2sgPSBSZWZsZWN0aW9uVHlwZUNoZWNrO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVmbGVjdGlvbkxvbmdDb252ZXJ0ID0gdm9pZCAwO1xuY29uc3QgcmVmbGVjdGlvbl9pbmZvXzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLWluZm9cIik7XG4vKipcbiAqIFV0aWxpdHkgbWV0aG9kIHRvIGNvbnZlcnQgYSBQYkxvbmcgb3IgUGJVbG9uZyB0byBhIEphdmFTY3JpcHRcbiAqIHJlcHJlc2VudGF0aW9uIGR1cmluZyBydW50aW1lLlxuICpcbiAqIFdvcmtzIHdpdGggZ2VuZXJhdGVkIGZpZWxkIGluZm9ybWF0aW9uLCBgdW5kZWZpbmVkYCBpcyBlcXVpdmFsZW50XG4gKiB0byBgU1RSSU5HYC5cbiAqL1xuZnVuY3Rpb24gcmVmbGVjdGlvbkxvbmdDb252ZXJ0KGxvbmcsIHR5cGUpIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5Mb25nVHlwZS5CSUdJTlQ6XG4gICAgICAgICAgICByZXR1cm4gbG9uZy50b0JpZ0ludCgpO1xuICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLkxvbmdUeXBlLk5VTUJFUjpcbiAgICAgICAgICAgIHJldHVybiBsb25nLnRvTnVtYmVyKCk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAvLyBjYXNlIHVuZGVmaW5lZDpcbiAgICAgICAgICAgIC8vIGNhc2UgTG9uZ1R5cGUuU1RSSU5HOlxuICAgICAgICAgICAgcmV0dXJuIGxvbmcudG9TdHJpbmcoKTtcbiAgICB9XG59XG5leHBvcnRzLnJlZmxlY3Rpb25Mb25nQ29udmVydCA9IHJlZmxlY3Rpb25Mb25nQ29udmVydDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlJlZmxlY3Rpb25Kc29uUmVhZGVyID0gdm9pZCAwO1xuY29uc3QganNvbl90eXBpbmdzXzEgPSByZXF1aXJlKFwiLi9qc29uLXR5cGluZ3NcIik7XG5jb25zdCBiYXNlNjRfMSA9IHJlcXVpcmUoXCIuL2Jhc2U2NFwiKTtcbmNvbnN0IHJlZmxlY3Rpb25faW5mb18xID0gcmVxdWlyZShcIi4vcmVmbGVjdGlvbi1pbmZvXCIpO1xuY29uc3QgcGJfbG9uZ18xID0gcmVxdWlyZShcIi4vcGItbG9uZ1wiKTtcbmNvbnN0IGFzc2VydF8xID0gcmVxdWlyZShcIi4vYXNzZXJ0XCIpO1xuY29uc3QgcmVmbGVjdGlvbl9sb25nX2NvbnZlcnRfMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24tbG9uZy1jb252ZXJ0XCIpO1xuLyoqXG4gKiBSZWFkcyBwcm90bzMgbWVzc2FnZXMgaW4gY2Fub25pY2FsIEpTT04gZm9ybWF0IHVzaW5nIHJlZmxlY3Rpb24gaW5mb3JtYXRpb24uXG4gKlxuICogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL3Byb3RvMyNqc29uXG4gKi9cbmNsYXNzIFJlZmxlY3Rpb25Kc29uUmVhZGVyIHtcbiAgICBjb25zdHJ1Y3RvcihpbmZvKSB7XG4gICAgICAgIHRoaXMuaW5mbyA9IGluZm87XG4gICAgfVxuICAgIHByZXBhcmUoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKHRoaXMuZk1hcCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmZNYXAgPSB7fTtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkc0lucHV0ID0gKF9hID0gdGhpcy5pbmZvLmZpZWxkcykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkc0lucHV0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mTWFwW2ZpZWxkLm5hbWVdID0gZmllbGQ7XG4gICAgICAgICAgICAgICAgdGhpcy5mTWFwW2ZpZWxkLmpzb25OYW1lXSA9IGZpZWxkO1xuICAgICAgICAgICAgICAgIHRoaXMuZk1hcFtmaWVsZC5sb2NhbE5hbWVdID0gZmllbGQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gQ2Fubm90IHBhcnNlIEpTT04gPHR5cGUgb2YganNvblZhbHVlPiBmb3IgPHR5cGUgbmFtZT4jPGZpZWxkTmFtZT4uXG4gICAgYXNzZXJ0KGNvbmRpdGlvbiwgZmllbGROYW1lLCBqc29uVmFsdWUpIHtcbiAgICAgICAgaWYgKCFjb25kaXRpb24pIHtcbiAgICAgICAgICAgIGxldCB3aGF0ID0ganNvbl90eXBpbmdzXzEudHlwZW9mSnNvblZhbHVlKGpzb25WYWx1ZSk7XG4gICAgICAgICAgICBpZiAod2hhdCA9PSBcIm51bWJlclwiIHx8IHdoYXQgPT0gXCJib29sZWFuXCIpXG4gICAgICAgICAgICAgICAgd2hhdCA9IGpzb25WYWx1ZS50b1N0cmluZygpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcGFyc2UgSlNPTiAke3doYXR9IGZvciAke3RoaXMuaW5mby50eXBlTmFtZX0jJHtmaWVsZE5hbWV9YCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVhZHMgYSBtZXNzYWdlIGZyb20gY2Fub25pY2FsIEpTT04gZm9ybWF0IGludG8gdGhlIHRhcmdldCBtZXNzYWdlLlxuICAgICAqXG4gICAgICogUmVwZWF0ZWQgZmllbGRzIGFyZSBhcHBlbmRlZC4gTWFwIGVudHJpZXMgYXJlIGFkZGVkLCBvdmVyd3JpdGluZ1xuICAgICAqIGV4aXN0aW5nIGtleXMuXG4gICAgICpcbiAgICAgKiBJZiBhIG1lc3NhZ2UgZmllbGQgaXMgYWxyZWFkeSBwcmVzZW50LCBpdCB3aWxsIGJlIG1lcmdlZCB3aXRoIHRoZVxuICAgICAqIG5ldyBkYXRhLlxuICAgICAqL1xuICAgIHJlYWQoaW5wdXQsIG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5wcmVwYXJlKCk7XG4gICAgICAgIGNvbnN0IG9uZW9mc0hhbmRsZWQgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBbanNvbktleSwganNvblZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5mTWFwW2pzb25LZXldO1xuICAgICAgICAgICAgaWYgKCFmaWVsZCkge1xuICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucy5pZ25vcmVVbmtub3duRmllbGRzKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZvdW5kIHVua25vd24gZmllbGQgd2hpbGUgcmVhZGluZyAke3RoaXMuaW5mby50eXBlTmFtZX0gZnJvbSBKU09OIGZvcm1hdC4gSlNPTiBrZXk6ICR7anNvbktleX1gKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGxvY2FsTmFtZSA9IGZpZWxkLmxvY2FsTmFtZTtcbiAgICAgICAgICAgIC8vIGhhbmRsZSBvbmVvZiBBRFRcbiAgICAgICAgICAgIGxldCB0YXJnZXQ7IC8vIHRoaXMgd2lsbCBiZSB0aGUgdGFyZ2V0IGZvciB0aGUgZmllbGQgdmFsdWUsIHdoZXRoZXIgaXQgaXMgbWVtYmVyIG9mIGEgb25lb2Ygb3Igbm90XG4gICAgICAgICAgICBpZiAoZmllbGQub25lb2YpIHtcbiAgICAgICAgICAgICAgICBpZiAoanNvblZhbHVlID09PSBudWxsICYmIChmaWVsZC5raW5kICE9PSAnZW51bScgfHwgZmllbGQuVCgpWzBdICE9PSAnZ29vZ2xlLnByb3RvYnVmLk51bGxWYWx1ZScpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBzaW5jZSBqc29uIG9iamVjdHMgYXJlIHVub3JkZXJlZCBieSBzcGVjaWZpY2F0aW9uLCBpdCBpcyBub3QgcG9zc2libGUgdG8gdGFrZSB0aGUgbGFzdCBvZiBtdWx0aXBsZSBvbmVvZnNcbiAgICAgICAgICAgICAgICBpZiAob25lb2ZzSGFuZGxlZC5pbmNsdWRlcyhmaWVsZC5vbmVvZikpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTXVsdGlwbGUgbWVtYmVycyBvZiB0aGUgb25lb2YgZ3JvdXAgXCIke2ZpZWxkLm9uZW9mfVwiIG9mICR7dGhpcy5pbmZvLnR5cGVOYW1lfSBhcmUgcHJlc2VudCBpbiBKU09OLmApO1xuICAgICAgICAgICAgICAgIG9uZW9mc0hhbmRsZWQucHVzaChmaWVsZC5vbmVvZik7XG4gICAgICAgICAgICAgICAgdGFyZ2V0ID0gbWVzc2FnZVtmaWVsZC5vbmVvZl0gPSB7XG4gICAgICAgICAgICAgICAgICAgIG9uZW9mS2luZDogbG9jYWxOYW1lXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRhcmdldCA9IG1lc3NhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB3ZSBoYXZlIGhhbmRsZWQgb25lb2YgYWJvdmUuIHdlIGp1c3QgaGF2ZSByZWFkIHRoZSB2YWx1ZSBpbnRvIGB0YXJnZXRgLlxuICAgICAgICAgICAgaWYgKGZpZWxkLmtpbmQgPT0gJ21hcCcpIHtcbiAgICAgICAgICAgICAgICBpZiAoanNvblZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBjaGVjayBpbnB1dFxuICAgICAgICAgICAgICAgIHRoaXMuYXNzZXJ0KGpzb25fdHlwaW5nc18xLmlzSnNvbk9iamVjdChqc29uVmFsdWUpLCBmaWVsZC5uYW1lLCBqc29uVmFsdWUpO1xuICAgICAgICAgICAgICAgIC8vIG91ciB0YXJnZXQgdG8gcHV0IG1hcCBlbnRyaWVzIGludG9cbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZE9iaiA9IHRhcmdldFtsb2NhbE5hbWVdO1xuICAgICAgICAgICAgICAgIC8vIHJlYWQgZW50cmllc1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2pzb25PYmpLZXksIGpzb25PYmpWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoanNvblZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFzc2VydChqc29uT2JqVmFsdWUgIT09IG51bGwsIGZpZWxkLm5hbWUgKyBcIiBtYXAgdmFsdWVcIiwgbnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHJlYWQgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgbGV0IHZhbDtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChmaWVsZC5WLmtpbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJtZXNzYWdlXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gZmllbGQuVi5UKCkuaW50ZXJuYWxKc29uUmVhZChqc29uT2JqVmFsdWUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImVudW1cIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSB0aGlzLmVudW0oZmllbGQuVi5UKCksIGpzb25PYmpWYWx1ZSwgZmllbGQubmFtZSwgb3B0aW9ucy5pZ25vcmVVbmtub3duRmllbGRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwic2NhbGFyXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gdGhpcy5zY2FsYXIoanNvbk9ialZhbHVlLCBmaWVsZC5WLlQsIGZpZWxkLlYuTCwgZmllbGQubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hc3NlcnQodmFsICE9PSB1bmRlZmluZWQsIGZpZWxkLm5hbWUgKyBcIiBtYXAgdmFsdWVcIiwganNvbk9ialZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVhZCBrZXlcbiAgICAgICAgICAgICAgICAgICAgbGV0IGtleSA9IGpzb25PYmpLZXk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZC5LID09IHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuQk9PTClcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IGtleSA9PSBcInRydWVcIiA/IHRydWUgOiBrZXkgPT0gXCJmYWxzZVwiID8gZmFsc2UgOiBrZXk7XG4gICAgICAgICAgICAgICAgICAgIGtleSA9IHRoaXMuc2NhbGFyKGtleSwgZmllbGQuSywgcmVmbGVjdGlvbl9pbmZvXzEuTG9uZ1R5cGUuU1RSSU5HLCBmaWVsZC5uYW1lKS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBmaWVsZE9ialtrZXldID0gdmFsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGZpZWxkLnJlcGVhdCkge1xuICAgICAgICAgICAgICAgIGlmIChqc29uVmFsdWUgPT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIC8vIGNoZWNrIGlucHV0XG4gICAgICAgICAgICAgICAgdGhpcy5hc3NlcnQoQXJyYXkuaXNBcnJheShqc29uVmFsdWUpLCBmaWVsZC5uYW1lLCBqc29uVmFsdWUpO1xuICAgICAgICAgICAgICAgIC8vIG91ciB0YXJnZXQgdG8gcHV0IGFycmF5IGVudHJpZXMgaW50b1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkQXJyID0gdGFyZ2V0W2xvY2FsTmFtZV07XG4gICAgICAgICAgICAgICAgLy8gcmVhZCBhcnJheSBlbnRyaWVzXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBqc29uSXRlbSBvZiBqc29uVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hc3NlcnQoanNvbkl0ZW0gIT09IG51bGwsIGZpZWxkLm5hbWUsIG51bGwpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgdmFsO1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGZpZWxkLmtpbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJtZXNzYWdlXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gZmllbGQuVCgpLmludGVybmFsSnNvblJlYWQoanNvbkl0ZW0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImVudW1cIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSB0aGlzLmVudW0oZmllbGQuVCgpLCBqc29uSXRlbSwgZmllbGQubmFtZSwgb3B0aW9ucy5pZ25vcmVVbmtub3duRmllbGRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwic2NhbGFyXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gdGhpcy5zY2FsYXIoanNvbkl0ZW0sIGZpZWxkLlQsIGZpZWxkLkwsIGZpZWxkLm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXNzZXJ0KHZhbCAhPT0gdW5kZWZpbmVkLCBmaWVsZC5uYW1lLCBqc29uVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBmaWVsZEFyci5wdXNoKHZhbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChmaWVsZC5raW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJtZXNzYWdlXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoanNvblZhbHVlID09PSBudWxsICYmIGZpZWxkLlQoKS50eXBlTmFtZSAhPSAnZ29vZ2xlLnByb3RvYnVmLlZhbHVlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXNzZXJ0KGZpZWxkLm9uZW9mID09PSB1bmRlZmluZWQsIGZpZWxkLm5hbWUgKyBcIiAob25lb2YgbWVtYmVyKVwiLCBudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFtsb2NhbE5hbWVdID0gZmllbGQuVCgpLmludGVybmFsSnNvblJlYWQoanNvblZhbHVlLCBvcHRpb25zLCB0YXJnZXRbbG9jYWxOYW1lXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImVudW1cIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWwgPSB0aGlzLmVudW0oZmllbGQuVCgpLCBqc29uVmFsdWUsIGZpZWxkLm5hbWUsIG9wdGlvbnMuaWdub3JlVW5rbm93bkZpZWxkcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFtsb2NhbE5hbWVdID0gdmFsO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJzY2FsYXJcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFtsb2NhbE5hbWVdID0gdGhpcy5zY2FsYXIoanNvblZhbHVlLCBmaWVsZC5ULCBmaWVsZC5MLCBmaWVsZC5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGBmYWxzZWAgZm9yIHVucmVjb2duaXplZCBzdHJpbmcgcmVwcmVzZW50YXRpb25zLlxuICAgICAqXG4gICAgICogZ29vZ2xlLnByb3RvYnVmLk51bGxWYWx1ZSBhY2NlcHRzIG9ubHkgSlNPTiBgbnVsbGAgKG9yIHRoZSBvbGQgYFwiTlVMTF9WQUxVRVwiYCkuXG4gICAgICovXG4gICAgZW51bSh0eXBlLCBqc29uLCBmaWVsZE5hbWUsIGlnbm9yZVVua25vd25GaWVsZHMpIHtcbiAgICAgICAgaWYgKHR5cGVbMF0gPT0gJ2dvb2dsZS5wcm90b2J1Zi5OdWxsVmFsdWUnKVxuICAgICAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KGpzb24gPT09IG51bGwgfHwganNvbiA9PT0gXCJOVUxMX1ZBTFVFXCIsIGBVbmFibGUgdG8gcGFyc2UgZmllbGQgJHt0aGlzLmluZm8udHlwZU5hbWV9IyR7ZmllbGROYW1lfSwgZW51bSAke3R5cGVbMF19IG9ubHkgYWNjZXB0cyBudWxsLmApO1xuICAgICAgICBpZiAoanNvbiA9PT0gbnVsbClcbiAgICAgICAgICAgIC8vIHdlIHJlcXVpcmUgMCB0byBiZSBkZWZhdWx0IHZhbHVlIGZvciBhbGwgZW51bXNcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICBzd2l0Y2ggKHR5cGVvZiBqc29uKSB7XG4gICAgICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KE51bWJlci5pc0ludGVnZXIoanNvbiksIGBVbmFibGUgdG8gcGFyc2UgZmllbGQgJHt0aGlzLmluZm8udHlwZU5hbWV9IyR7ZmllbGROYW1lfSwgZW51bSBjYW4gb25seSBiZSBpbnRlZ3JhbCBudW1iZXIsIGdvdCAke2pzb259LmApO1xuICAgICAgICAgICAgICAgIHJldHVybiBqc29uO1xuICAgICAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgICAgICAgIGxldCBsb2NhbEVudW1OYW1lID0ganNvbjtcbiAgICAgICAgICAgICAgICBpZiAodHlwZVsyXSAmJiBqc29uLnN1YnN0cmluZygwLCB0eXBlWzJdLmxlbmd0aCkgPT09IHR5cGVbMl0pXG4gICAgICAgICAgICAgICAgICAgIC8vIGxvb2t1cCB3aXRob3V0IHRoZSBzaGFyZWQgcHJlZml4XG4gICAgICAgICAgICAgICAgICAgIGxvY2FsRW51bU5hbWUgPSBqc29uLnN1YnN0cmluZyh0eXBlWzJdLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgbGV0IGVudW1OdW1iZXIgPSB0eXBlWzFdW2xvY2FsRW51bU5hbWVdO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZW51bU51bWJlciA9PT0gJ3VuZGVmaW5lZCcgJiYgaWdub3JlVW5rbm93bkZpZWxkcykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydCh0eXBlb2YgZW51bU51bWJlciA9PSBcIm51bWJlclwiLCBgVW5hYmxlIHRvIHBhcnNlIGZpZWxkICR7dGhpcy5pbmZvLnR5cGVOYW1lfSMke2ZpZWxkTmFtZX0sIGVudW0gJHt0eXBlWzBdfSBoYXMgbm8gdmFsdWUgZm9yIFwiJHtqc29ufVwiLmApO1xuICAgICAgICAgICAgICAgIHJldHVybiBlbnVtTnVtYmVyO1xuICAgICAgICB9XG4gICAgICAgIGFzc2VydF8xLmFzc2VydChmYWxzZSwgYFVuYWJsZSB0byBwYXJzZSBmaWVsZCAke3RoaXMuaW5mby50eXBlTmFtZX0jJHtmaWVsZE5hbWV9LCBjYW5ub3QgcGFyc2UgZW51bSB2YWx1ZSBmcm9tICR7dHlwZW9mIGpzb259XCIuYCk7XG4gICAgfVxuICAgIHNjYWxhcihqc29uLCB0eXBlLCBsb25nVHlwZSwgZmllbGROYW1lKSB7XG4gICAgICAgIGxldCBlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICAgICAgLy8gZmxvYXQsIGRvdWJsZTogSlNPTiB2YWx1ZSB3aWxsIGJlIGEgbnVtYmVyIG9yIG9uZSBvZiB0aGUgc3BlY2lhbCBzdHJpbmcgdmFsdWVzIFwiTmFOXCIsIFwiSW5maW5pdHlcIiwgYW5kIFwiLUluZmluaXR5XCIuXG4gICAgICAgICAgICAgICAgLy8gRWl0aGVyIG51bWJlcnMgb3Igc3RyaW5ncyBhcmUgYWNjZXB0ZWQuIEV4cG9uZW50IG5vdGF0aW9uIGlzIGFsc28gYWNjZXB0ZWQuXG4gICAgICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkRPVUJMRTpcbiAgICAgICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuRkxPQVQ6XG4gICAgICAgICAgICAgICAgICAgIGlmIChqc29uID09PSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC4wO1xuICAgICAgICAgICAgICAgICAgICBpZiAoanNvbiA9PT0gXCJOYU5cIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOdW1iZXIuTmFOO1xuICAgICAgICAgICAgICAgICAgICBpZiAoanNvbiA9PT0gXCJJbmZpbml0eVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24gPT09IFwiLUluZmluaXR5XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO1xuICAgICAgICAgICAgICAgICAgICBpZiAoanNvbiA9PT0gXCJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZSA9IFwiZW1wdHkgc3RyaW5nXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGpzb24gPT0gXCJzdHJpbmdcIiAmJiBqc29uLnRyaW0oKS5sZW5ndGggIT09IGpzb24ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlID0gXCJleHRyYSB3aGl0ZXNwYWNlXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGpzb24gIT0gXCJzdHJpbmdcIiAmJiB0eXBlb2YganNvbiAhPSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBsZXQgZmxvYXQgPSBOdW1iZXIoanNvbik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChOdW1iZXIuaXNOYU4oZmxvYXQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlID0gXCJub3QgYSBudW1iZXJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghTnVtYmVyLmlzRmluaXRlKGZsb2F0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5maW5pdHkgYW5kIC1pbmZpbml0eSBhcmUgaGFuZGxlZCBieSBzdHJpbmcgcmVwcmVzZW50YXRpb24gYWJvdmUsIHNvIHRoaXMgaXMgYW4gZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgIGUgPSBcInRvbyBsYXJnZSBvciBzbWFsbFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5GTE9BVClcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydEZsb2F0MzIoZmxvYXQpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmxvYXQ7XG4gICAgICAgICAgICAgICAgLy8gaW50MzIsIGZpeGVkMzIsIHVpbnQzMjogSlNPTiB2YWx1ZSB3aWxsIGJlIGEgZGVjaW1hbCBudW1iZXIuIEVpdGhlciBudW1iZXJzIG9yIHN0cmluZ3MgYXJlIGFjY2VwdGVkLlxuICAgICAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5JTlQzMjpcbiAgICAgICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuRklYRUQzMjpcbiAgICAgICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuU0ZJWEVEMzI6XG4gICAgICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNJTlQzMjpcbiAgICAgICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuVUlOVDMyOlxuICAgICAgICAgICAgICAgICAgICBpZiAoanNvbiA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgICAgICAgICBsZXQgaW50MzI7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YganNvbiA9PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgaW50MzIgPSBqc29uO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChqc29uID09PSBcIlwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgZSA9IFwiZW1wdHkgc3RyaW5nXCI7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBqc29uID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqc29uLnRyaW0oKS5sZW5ndGggIT09IGpzb24ubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgPSBcImV4dHJhIHdoaXRlc3BhY2VcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMiA9IE51bWJlcihqc29uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoaW50MzIgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlVJTlQzMilcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydFVJbnQzMihpbnQzMik7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydEludDMyKGludDMyKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGludDMyO1xuICAgICAgICAgICAgICAgIC8vIGludDY0LCBmaXhlZDY0LCB1aW50NjQ6IEpTT04gdmFsdWUgd2lsbCBiZSBhIGRlY2ltYWwgc3RyaW5nLiBFaXRoZXIgbnVtYmVycyBvciBzdHJpbmdzIGFyZSBhY2NlcHRlZC5cbiAgICAgICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuSU5UNjQ6XG4gICAgICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNGSVhFRDY0OlxuICAgICAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TSU5UNjQ6XG4gICAgICAgICAgICAgICAgICAgIGlmIChqc29uID09PSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlZmxlY3Rpb25fbG9uZ19jb252ZXJ0XzEucmVmbGVjdGlvbkxvbmdDb252ZXJ0KHBiX2xvbmdfMS5QYkxvbmcuWkVSTywgbG9uZ1R5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGpzb24gIT0gXCJudW1iZXJcIiAmJiB0eXBlb2YganNvbiAhPSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWZsZWN0aW9uX2xvbmdfY29udmVydF8xLnJlZmxlY3Rpb25Mb25nQ29udmVydChwYl9sb25nXzEuUGJMb25nLmZyb20oanNvbiksIGxvbmdUeXBlKTtcbiAgICAgICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuRklYRUQ2NDpcbiAgICAgICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuVUlOVDY0OlxuICAgICAgICAgICAgICAgICAgICBpZiAoanNvbiA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWZsZWN0aW9uX2xvbmdfY29udmVydF8xLnJlZmxlY3Rpb25Mb25nQ29udmVydChwYl9sb25nXzEuUGJVTG9uZy5aRVJPLCBsb25nVHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YganNvbiAhPSBcIm51bWJlclwiICYmIHR5cGVvZiBqc29uICE9IFwic3RyaW5nXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlZmxlY3Rpb25fbG9uZ19jb252ZXJ0XzEucmVmbGVjdGlvbkxvbmdDb252ZXJ0KHBiX2xvbmdfMS5QYlVMb25nLmZyb20oanNvbiksIGxvbmdUeXBlKTtcbiAgICAgICAgICAgICAgICAvLyBib29sOlxuICAgICAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5CT09MOlxuICAgICAgICAgICAgICAgICAgICBpZiAoanNvbiA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBqc29uICE9PSBcImJvb2xlYW5cIilcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ganNvbjtcbiAgICAgICAgICAgICAgICAvLyBzdHJpbmc6XG4gICAgICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNUUklORzpcbiAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24gPT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBqc29uICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlID0gXCJleHRyYSB3aGl0ZXNwYWNlXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KGpzb24pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlID0gXCJpbnZhbGlkIFVURjhcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBqc29uO1xuICAgICAgICAgICAgICAgIC8vIGJ5dGVzOiBKU09OIHZhbHVlIHdpbGwgYmUgdGhlIGRhdGEgZW5jb2RlZCBhcyBhIHN0cmluZyB1c2luZyBzdGFuZGFyZCBiYXNlNjQgZW5jb2Rpbmcgd2l0aCBwYWRkaW5ncy5cbiAgICAgICAgICAgICAgICAvLyBFaXRoZXIgc3RhbmRhcmQgb3IgVVJMLXNhZmUgYmFzZTY0IGVuY29kaW5nIHdpdGgvd2l0aG91dCBwYWRkaW5ncyBhcmUgYWNjZXB0ZWQuXG4gICAgICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkJZVEVTOlxuICAgICAgICAgICAgICAgICAgICBpZiAoanNvbiA9PT0gbnVsbCB8fCBqc29uID09PSBcIlwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KDApO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGpzb24gIT09ICdzdHJpbmcnKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBiYXNlNjRfMS5iYXNlNjRkZWNvZGUoanNvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBlID0gZXJyb3IubWVzc2FnZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFzc2VydChmYWxzZSwgZmllbGROYW1lICsgKGUgPyBcIiAtIFwiICsgZSA6IFwiXCIpLCBqc29uKTtcbiAgICB9XG59XG5leHBvcnRzLlJlZmxlY3Rpb25Kc29uUmVhZGVyID0gUmVmbGVjdGlvbkpzb25SZWFkZXI7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5SZWZsZWN0aW9uSnNvbldyaXRlciA9IHZvaWQgMDtcbmNvbnN0IGJhc2U2NF8xID0gcmVxdWlyZShcIi4vYmFzZTY0XCIpO1xuY29uc3QgcGJfbG9uZ18xID0gcmVxdWlyZShcIi4vcGItbG9uZ1wiKTtcbmNvbnN0IHJlZmxlY3Rpb25faW5mb18xID0gcmVxdWlyZShcIi4vcmVmbGVjdGlvbi1pbmZvXCIpO1xuY29uc3QgYXNzZXJ0XzEgPSByZXF1aXJlKFwiLi9hc3NlcnRcIik7XG4vKipcbiAqIFdyaXRlcyBwcm90bzMgbWVzc2FnZXMgaW4gY2Fub25pY2FsIEpTT04gZm9ybWF0IHVzaW5nIHJlZmxlY3Rpb25cbiAqIGluZm9ybWF0aW9uLlxuICpcbiAqIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvZG9jcy9wcm90bzMjanNvblxuICovXG5jbGFzcyBSZWZsZWN0aW9uSnNvbldyaXRlciB7XG4gICAgY29uc3RydWN0b3IoaW5mbykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHRoaXMuZmllbGRzID0gKF9hID0gaW5mby5maWVsZHMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFtdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyB0aGUgbWVzc2FnZSB0byBhIEpTT04gb2JqZWN0LCBiYXNlZCBvbiB0aGUgZmllbGQgZGVzY3JpcHRvcnMuXG4gICAgICovXG4gICAgd3JpdGUobWVzc2FnZSwgb3B0aW9ucykge1xuICAgICAgICBjb25zdCBqc29uID0ge30sIHNvdXJjZSA9IG1lc3NhZ2U7XG4gICAgICAgIGZvciAoY29uc3QgZmllbGQgb2YgdGhpcy5maWVsZHMpIHtcbiAgICAgICAgICAgIC8vIGZpZWxkIGlzIG5vdCBwYXJ0IG9mIGEgb25lb2YsIHNpbXBseSB3cml0ZSBhcyBpc1xuICAgICAgICAgICAgaWYgKCFmaWVsZC5vbmVvZikge1xuICAgICAgICAgICAgICAgIGxldCBqc29uVmFsdWUgPSB0aGlzLmZpZWxkKGZpZWxkLCBzb3VyY2VbZmllbGQubG9jYWxOYW1lXSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgaWYgKGpzb25WYWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICBqc29uW29wdGlvbnMudXNlUHJvdG9GaWVsZE5hbWUgPyBmaWVsZC5uYW1lIDogZmllbGQuanNvbk5hbWVdID0ganNvblZhbHVlO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZmllbGQgaXMgcGFydCBvZiBhIG9uZW9mXG4gICAgICAgICAgICBjb25zdCBncm91cCA9IHNvdXJjZVtmaWVsZC5vbmVvZl07XG4gICAgICAgICAgICBpZiAoZ3JvdXAub25lb2ZLaW5kICE9PSBmaWVsZC5sb2NhbE5hbWUpXG4gICAgICAgICAgICAgICAgY29udGludWU7IC8vIG5vdCBzZWxlY3RlZCwgc2tpcFxuICAgICAgICAgICAgY29uc3Qgb3B0ID0gZmllbGQua2luZCA9PSAnc2NhbGFyJyB8fCBmaWVsZC5raW5kID09ICdlbnVtJ1xuICAgICAgICAgICAgICAgID8gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKSwgeyBlbWl0RGVmYXVsdFZhbHVlczogdHJ1ZSB9KSA6IG9wdGlvbnM7XG4gICAgICAgICAgICBsZXQganNvblZhbHVlID0gdGhpcy5maWVsZChmaWVsZCwgZ3JvdXBbZmllbGQubG9jYWxOYW1lXSwgb3B0KTtcbiAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydChqc29uVmFsdWUgIT09IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICBqc29uW29wdGlvbnMudXNlUHJvdG9GaWVsZE5hbWUgPyBmaWVsZC5uYW1lIDogZmllbGQuanNvbk5hbWVdID0ganNvblZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBqc29uO1xuICAgIH1cbiAgICBmaWVsZChmaWVsZCwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgICAgICAgbGV0IGpzb25WYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKGZpZWxkLmtpbmQgPT0gJ21hcCcpIHtcbiAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydCh0eXBlb2YgdmFsdWUgPT0gXCJvYmplY3RcIiAmJiB2YWx1ZSAhPT0gbnVsbCk7XG4gICAgICAgICAgICBjb25zdCBqc29uT2JqID0ge307XG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkLlYua2luZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzY2FsYXJcIjpcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBbZW50cnlLZXksIGVudHJ5VmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsID0gdGhpcy5zY2FsYXIoZmllbGQuVi5ULCBlbnRyeVZhbHVlLCBmaWVsZC5uYW1lLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnQodmFsICE9PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAganNvbk9ialtlbnRyeUtleS50b1N0cmluZygpXSA9IHZhbDsgLy8gSlNPTiBzdGFuZGFyZCBhbGxvd3Mgb25seSAoZG91YmxlIHF1b3RlZCkgc3RyaW5nIGFzIHByb3BlcnR5IGtleVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJtZXNzYWdlXCI6XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2VUeXBlID0gZmllbGQuVi5UKCk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2VudHJ5S2V5LCBlbnRyeVZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbCA9IHRoaXMubWVzc2FnZShtZXNzYWdlVHlwZSwgZW50cnlWYWx1ZSwgZmllbGQubmFtZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnQodmFsICE9PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAganNvbk9ialtlbnRyeUtleS50b1N0cmluZygpXSA9IHZhbDsgLy8gSlNPTiBzdGFuZGFyZCBhbGxvd3Mgb25seSAoZG91YmxlIHF1b3RlZCkgc3RyaW5nIGFzIHByb3BlcnR5IGtleVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJlbnVtXCI6XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVudW1JbmZvID0gZmllbGQuVi5UKCk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2VudHJ5S2V5LCBlbnRyeVZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydChlbnRyeVZhbHVlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIGVudHJ5VmFsdWUgPT0gJ251bWJlcicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsID0gdGhpcy5lbnVtKGVudW1JbmZvLCBlbnRyeVZhbHVlLCBmaWVsZC5uYW1lLCBmYWxzZSwgdHJ1ZSwgb3B0aW9ucy5lbnVtQXNJbnRlZ2VyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydCh2YWwgIT09IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBqc29uT2JqW2VudHJ5S2V5LnRvU3RyaW5nKCldID0gdmFsOyAvLyBKU09OIHN0YW5kYXJkIGFsbG93cyBvbmx5IChkb3VibGUgcXVvdGVkKSBzdHJpbmcgYXMgcHJvcGVydHkga2V5XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5lbWl0RGVmYXVsdFZhbHVlcyB8fCBPYmplY3Qua2V5cyhqc29uT2JqKS5sZW5ndGggPiAwKVxuICAgICAgICAgICAgICAgIGpzb25WYWx1ZSA9IGpzb25PYmo7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZmllbGQucmVwZWF0KSB7XG4gICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnQoQXJyYXkuaXNBcnJheSh2YWx1ZSkpO1xuICAgICAgICAgICAgY29uc3QganNvbkFyciA9IFtdO1xuICAgICAgICAgICAgc3dpdGNoIChmaWVsZC5raW5kKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNjYWxhclwiOlxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWwgPSB0aGlzLnNjYWxhcihmaWVsZC5ULCB2YWx1ZVtpXSwgZmllbGQubmFtZSwgZmllbGQub3B0LCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydCh2YWwgIT09IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBqc29uQXJyLnB1c2godmFsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiZW51bVwiOlxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbnVtSW5mbyA9IGZpZWxkLlQoKTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KHZhbHVlW2ldID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHZhbHVlW2ldID09ICdudW1iZXInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbCA9IHRoaXMuZW51bShlbnVtSW5mbywgdmFsdWVbaV0sIGZpZWxkLm5hbWUsIGZpZWxkLm9wdCwgdHJ1ZSwgb3B0aW9ucy5lbnVtQXNJbnRlZ2VyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydCh2YWwgIT09IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBqc29uQXJyLnB1c2godmFsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwibWVzc2FnZVwiOlxuICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlVHlwZSA9IGZpZWxkLlQoKTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsID0gdGhpcy5tZXNzYWdlKG1lc3NhZ2VUeXBlLCB2YWx1ZVtpXSwgZmllbGQubmFtZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnQodmFsICE9PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAganNvbkFyci5wdXNoKHZhbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBhZGQgY29udmVydGVkIGFycmF5IHRvIGpzb24gb3V0cHV0XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5lbWl0RGVmYXVsdFZhbHVlcyB8fCBqc29uQXJyLmxlbmd0aCA+IDAgfHwgb3B0aW9ucy5lbWl0RGVmYXVsdFZhbHVlcylcbiAgICAgICAgICAgICAgICBqc29uVmFsdWUgPSBqc29uQXJyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc3dpdGNoIChmaWVsZC5raW5kKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNjYWxhclwiOlxuICAgICAgICAgICAgICAgICAgICBqc29uVmFsdWUgPSB0aGlzLnNjYWxhcihmaWVsZC5ULCB2YWx1ZSwgZmllbGQubmFtZSwgZmllbGQub3B0LCBvcHRpb25zLmVtaXREZWZhdWx0VmFsdWVzKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImVudW1cIjpcbiAgICAgICAgICAgICAgICAgICAganNvblZhbHVlID0gdGhpcy5lbnVtKGZpZWxkLlQoKSwgdmFsdWUsIGZpZWxkLm5hbWUsIGZpZWxkLm9wdCwgb3B0aW9ucy5lbWl0RGVmYXVsdFZhbHVlcywgb3B0aW9ucy5lbnVtQXNJbnRlZ2VyKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm1lc3NhZ2VcIjpcbiAgICAgICAgICAgICAgICAgICAganNvblZhbHVlID0gdGhpcy5tZXNzYWdlKGZpZWxkLlQoKSwgdmFsdWUsIGZpZWxkLm5hbWUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ganNvblZhbHVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGBudWxsYCBhcyB0aGUgZGVmYXVsdCBmb3IgZ29vZ2xlLnByb3RvYnVmLk51bGxWYWx1ZS5cbiAgICAgKi9cbiAgICBlbnVtKHR5cGUsIHZhbHVlLCBmaWVsZE5hbWUsIG9wdGlvbmFsLCBlbWl0RGVmYXVsdFZhbHVlcywgZW51bUFzSW50ZWdlcikge1xuICAgICAgICBpZiAodHlwZVswXSA9PSAnZ29vZ2xlLnByb3RvYnVmLk51bGxWYWx1ZScpXG4gICAgICAgICAgICByZXR1cm4gIWVtaXREZWZhdWx0VmFsdWVzICYmICFvcHRpb25hbCA/IHVuZGVmaW5lZCA6IG51bGw7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnQob3B0aW9uYWwpO1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgPT09IDAgJiYgIWVtaXREZWZhdWx0VmFsdWVzICYmICFvcHRpb25hbClcbiAgICAgICAgICAgIC8vIHdlIHJlcXVpcmUgMCB0byBiZSBkZWZhdWx0IHZhbHVlIGZvciBhbGwgZW51bXNcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIGFzc2VydF8xLmFzc2VydCh0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicpO1xuICAgICAgICBhc3NlcnRfMS5hc3NlcnQoTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkpO1xuICAgICAgICBpZiAoZW51bUFzSW50ZWdlciB8fCAhdHlwZVsxXS5oYXNPd25Qcm9wZXJ0eSh2YWx1ZSkpXG4gICAgICAgICAgICAvLyBpZiB3ZSBkb24ndCBub3cgdGhlIGVudW0gdmFsdWUsIGp1c3QgcmV0dXJuIHRoZSBudW1iZXJcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgaWYgKHR5cGVbMl0pXG4gICAgICAgICAgICAvLyByZXN0b3JlIHRoZSBkcm9wcGVkIHByZWZpeFxuICAgICAgICAgICAgcmV0dXJuIHR5cGVbMl0gKyB0eXBlWzFdW3ZhbHVlXTtcbiAgICAgICAgcmV0dXJuIHR5cGVbMV1bdmFsdWVdO1xuICAgIH1cbiAgICBtZXNzYWdlKHR5cGUsIHZhbHVlLCBmaWVsZE5hbWUsIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5lbWl0RGVmYXVsdFZhbHVlcyA/IG51bGwgOiB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiB0eXBlLmludGVybmFsSnNvbldyaXRlKHZhbHVlLCBvcHRpb25zKTtcbiAgICB9XG4gICAgc2NhbGFyKHR5cGUsIHZhbHVlLCBmaWVsZE5hbWUsIG9wdGlvbmFsLCBlbWl0RGVmYXVsdFZhbHVlcykge1xuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KG9wdGlvbmFsKTtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZWQgPSBlbWl0RGVmYXVsdFZhbHVlcyB8fCBvcHRpb25hbDtcbiAgICAgICAgLy8gbm9pbnNwZWN0aW9uIEZhbGxUaHJvdWdoSW5Td2l0Y2hTdGF0ZW1lbnRKU1xuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgIC8vIGludDMyLCBmaXhlZDMyLCB1aW50MzI6IEpTT04gdmFsdWUgd2lsbCBiZSBhIGRlY2ltYWwgbnVtYmVyLiBFaXRoZXIgbnVtYmVycyBvciBzdHJpbmdzIGFyZSBhY2NlcHRlZC5cbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5JTlQzMjpcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TRklYRUQzMjpcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TSU5UMzI6XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSAwKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWQgPyAwIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydEludDMyKHZhbHVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuRklYRUQzMjpcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5VSU5UMzI6XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSAwKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWQgPyAwIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydFVJbnQzMih2YWx1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgLy8gZmxvYXQsIGRvdWJsZTogSlNPTiB2YWx1ZSB3aWxsIGJlIGEgbnVtYmVyIG9yIG9uZSBvZiB0aGUgc3BlY2lhbCBzdHJpbmcgdmFsdWVzIFwiTmFOXCIsIFwiSW5maW5pdHlcIiwgYW5kIFwiLUluZmluaXR5XCIuXG4gICAgICAgICAgICAvLyBFaXRoZXIgbnVtYmVycyBvciBzdHJpbmdzIGFyZSBhY2NlcHRlZC4gRXhwb25lbnQgbm90YXRpb24gaXMgYWxzbyBhY2NlcHRlZC5cbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5GTE9BVDpcbiAgICAgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnRGbG9hdDMyKHZhbHVlKTtcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5ET1VCTEU6XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSAwKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWQgPyAwIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydCh0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicpO1xuICAgICAgICAgICAgICAgIGlmIChOdW1iZXIuaXNOYU4odmFsdWUpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ05hTic7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnSW5maW5pdHknO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJy1JbmZpbml0eSc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgLy8gc3RyaW5nOlxuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNUUklORzpcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IFwiXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlZCA/ICcnIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydCh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycpO1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIC8vIGJvb2w6XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuQk9PTDpcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWQgPyBmYWxzZSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnQodHlwZW9mIHZhbHVlID09ICdib29sZWFuJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgLy8gSlNPTiB2YWx1ZSB3aWxsIGJlIGEgZGVjaW1hbCBzdHJpbmcuIEVpdGhlciBudW1iZXJzIG9yIHN0cmluZ3MgYXJlIGFjY2VwdGVkLlxuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlVJTlQ2NDpcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5GSVhFRDY0OlxuICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydCh0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgfHwgdHlwZW9mIHZhbHVlID09ICdzdHJpbmcnIHx8IHR5cGVvZiB2YWx1ZSA9PSAnYmlnaW50Jyk7XG4gICAgICAgICAgICAgICAgbGV0IHVsb25nID0gcGJfbG9uZ18xLlBiVUxvbmcuZnJvbSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHVsb25nLmlzWmVybygpICYmICFlZClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdWxvbmcudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIC8vIEpTT04gdmFsdWUgd2lsbCBiZSBhIGRlY2ltYWwgc3RyaW5nLiBFaXRoZXIgbnVtYmVycyBvciBzdHJpbmdzIGFyZSBhY2NlcHRlZC5cbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5JTlQ2NDpcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TRklYRUQ2NDpcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TSU5UNjQ6XG4gICAgICAgICAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyB8fCB0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHwgdHlwZW9mIHZhbHVlID09ICdiaWdpbnQnKTtcbiAgICAgICAgICAgICAgICBsZXQgbG9uZyA9IHBiX2xvbmdfMS5QYkxvbmcuZnJvbSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKGxvbmcuaXNaZXJvKCkgJiYgIWVkKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHJldHVybiBsb25nLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAvLyBieXRlczogSlNPTiB2YWx1ZSB3aWxsIGJlIHRoZSBkYXRhIGVuY29kZWQgYXMgYSBzdHJpbmcgdXNpbmcgc3RhbmRhcmQgYmFzZTY0IGVuY29kaW5nIHdpdGggcGFkZGluZ3MuXG4gICAgICAgICAgICAvLyBFaXRoZXIgc3RhbmRhcmQgb3IgVVJMLXNhZmUgYmFzZTY0IGVuY29kaW5nIHdpdGgvd2l0aG91dCBwYWRkaW5ncyBhcmUgYWNjZXB0ZWQuXG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuQllURVM6XG4gICAgICAgICAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KHZhbHVlIGluc3RhbmNlb2YgVWludDhBcnJheSk7XG4gICAgICAgICAgICAgICAgaWYgKCF2YWx1ZS5ieXRlTGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWQgPyBcIlwiIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHJldHVybiBiYXNlNjRfMS5iYXNlNjRlbmNvZGUodmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5SZWZsZWN0aW9uSnNvbldyaXRlciA9IFJlZmxlY3Rpb25Kc29uV3JpdGVyO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVmbGVjdGlvblNjYWxhckRlZmF1bHQgPSB2b2lkIDA7XG5jb25zdCByZWZsZWN0aW9uX2luZm9fMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24taW5mb1wiKTtcbmNvbnN0IHJlZmxlY3Rpb25fbG9uZ19jb252ZXJ0XzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLWxvbmctY29udmVydFwiKTtcbmNvbnN0IHBiX2xvbmdfMSA9IHJlcXVpcmUoXCIuL3BiLWxvbmdcIik7XG4vKipcbiAqIENyZWF0ZXMgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIGEgc2NhbGFyIHR5cGUuXG4gKi9cbmZ1bmN0aW9uIHJlZmxlY3Rpb25TY2FsYXJEZWZhdWx0KHR5cGUsIGxvbmdUeXBlID0gcmVmbGVjdGlvbl9pbmZvXzEuTG9uZ1R5cGUuU1RSSU5HKSB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5CT09MOlxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuVUlOVDY0OlxuICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuRklYRUQ2NDpcbiAgICAgICAgICAgIHJldHVybiByZWZsZWN0aW9uX2xvbmdfY29udmVydF8xLnJlZmxlY3Rpb25Mb25nQ29udmVydChwYl9sb25nXzEuUGJVTG9uZy5aRVJPLCBsb25nVHlwZSk7XG4gICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5JTlQ2NDpcbiAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNGSVhFRDY0OlxuICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuU0lOVDY0OlxuICAgICAgICAgICAgcmV0dXJuIHJlZmxlY3Rpb25fbG9uZ19jb252ZXJ0XzEucmVmbGVjdGlvbkxvbmdDb252ZXJ0KHBiX2xvbmdfMS5QYkxvbmcuWkVSTywgbG9uZ1R5cGUpO1xuICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuRE9VQkxFOlxuICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuRkxPQVQ6XG4gICAgICAgICAgICByZXR1cm4gMC4wO1xuICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuQllURVM6XG4gICAgICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7XG4gICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TVFJJTkc6XG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIC8vIGNhc2UgU2NhbGFyVHlwZS5JTlQzMjpcbiAgICAgICAgICAgIC8vIGNhc2UgU2NhbGFyVHlwZS5VSU5UMzI6XG4gICAgICAgICAgICAvLyBjYXNlIFNjYWxhclR5cGUuU0lOVDMyOlxuICAgICAgICAgICAgLy8gY2FzZSBTY2FsYXJUeXBlLkZJWEVEMzI6XG4gICAgICAgICAgICAvLyBjYXNlIFNjYWxhclR5cGUuU0ZJWEVEMzI6XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICB9XG59XG5leHBvcnRzLnJlZmxlY3Rpb25TY2FsYXJEZWZhdWx0ID0gcmVmbGVjdGlvblNjYWxhckRlZmF1bHQ7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5SZWZsZWN0aW9uQmluYXJ5UmVhZGVyID0gdm9pZCAwO1xuY29uc3QgYmluYXJ5X2Zvcm1hdF9jb250cmFjdF8xID0gcmVxdWlyZShcIi4vYmluYXJ5LWZvcm1hdC1jb250cmFjdFwiKTtcbmNvbnN0IHJlZmxlY3Rpb25faW5mb18xID0gcmVxdWlyZShcIi4vcmVmbGVjdGlvbi1pbmZvXCIpO1xuY29uc3QgcmVmbGVjdGlvbl9sb25nX2NvbnZlcnRfMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24tbG9uZy1jb252ZXJ0XCIpO1xuY29uc3QgcmVmbGVjdGlvbl9zY2FsYXJfZGVmYXVsdF8xID0gcmVxdWlyZShcIi4vcmVmbGVjdGlvbi1zY2FsYXItZGVmYXVsdFwiKTtcbi8qKlxuICogUmVhZHMgcHJvdG8zIG1lc3NhZ2VzIGluIGJpbmFyeSBmb3JtYXQgdXNpbmcgcmVmbGVjdGlvbiBpbmZvcm1hdGlvbi5cbiAqXG4gKiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzL2RvY3MvZW5jb2RpbmdcbiAqL1xuY2xhc3MgUmVmbGVjdGlvbkJpbmFyeVJlYWRlciB7XG4gICAgY29uc3RydWN0b3IoaW5mbykge1xuICAgICAgICB0aGlzLmluZm8gPSBpbmZvO1xuICAgIH1cbiAgICBwcmVwYXJlKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICghdGhpcy5maWVsZE5vVG9GaWVsZCkge1xuICAgICAgICAgICAgY29uc3QgZmllbGRzSW5wdXQgPSAoX2EgPSB0aGlzLmluZm8uZmllbGRzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBbXTtcbiAgICAgICAgICAgIHRoaXMuZmllbGROb1RvRmllbGQgPSBuZXcgTWFwKGZpZWxkc0lucHV0Lm1hcChmaWVsZCA9PiBbZmllbGQubm8sIGZpZWxkXSkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWRzIGEgbWVzc2FnZSBmcm9tIGJpbmFyeSBmb3JtYXQgaW50byB0aGUgdGFyZ2V0IG1lc3NhZ2UuXG4gICAgICpcbiAgICAgKiBSZXBlYXRlZCBmaWVsZHMgYXJlIGFwcGVuZGVkLiBNYXAgZW50cmllcyBhcmUgYWRkZWQsIG92ZXJ3cml0aW5nXG4gICAgICogZXhpc3Rpbmcga2V5cy5cbiAgICAgKlxuICAgICAqIElmIGEgbWVzc2FnZSBmaWVsZCBpcyBhbHJlYWR5IHByZXNlbnQsIGl0IHdpbGwgYmUgbWVyZ2VkIHdpdGggdGhlXG4gICAgICogbmV3IGRhdGEuXG4gICAgICovXG4gICAgcmVhZChyZWFkZXIsIG1lc3NhZ2UsIG9wdGlvbnMsIGxlbmd0aCkge1xuICAgICAgICB0aGlzLnByZXBhcmUoKTtcbiAgICAgICAgY29uc3QgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgIC8vIHJlYWQgdGhlIHRhZyBhbmQgZmluZCB0aGUgZmllbGRcbiAgICAgICAgICAgIGNvbnN0IFtmaWVsZE5vLCB3aXJlVHlwZV0gPSByZWFkZXIudGFnKCksIGZpZWxkID0gdGhpcy5maWVsZE5vVG9GaWVsZC5nZXQoZmllbGRObyk7XG4gICAgICAgICAgICBpZiAoIWZpZWxkKSB7XG4gICAgICAgICAgICAgICAgbGV0IHUgPSBvcHRpb25zLnJlYWRVbmtub3duRmllbGQ7XG4gICAgICAgICAgICAgICAgaWYgKHUgPT0gXCJ0aHJvd1wiKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZmllbGQgJHtmaWVsZE5vfSAod2lyZSB0eXBlICR7d2lyZVR5cGV9KSBmb3IgJHt0aGlzLmluZm8udHlwZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgbGV0IGQgPSByZWFkZXIuc2tpcCh3aXJlVHlwZSk7XG4gICAgICAgICAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAodSA9PT0gdHJ1ZSA/IGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMS5Vbmtub3duRmllbGRIYW5kbGVyLm9uUmVhZCA6IHUpKHRoaXMuaW5mby50eXBlTmFtZSwgbWVzc2FnZSwgZmllbGRObywgd2lyZVR5cGUsIGQpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gdGFyZ2V0IG9iamVjdCBmb3IgdGhlIGZpZWxkIHdlIGFyZSByZWFkaW5nXG4gICAgICAgICAgICBsZXQgdGFyZ2V0ID0gbWVzc2FnZSwgcmVwZWF0ZWQgPSBmaWVsZC5yZXBlYXQsIGxvY2FsTmFtZSA9IGZpZWxkLmxvY2FsTmFtZTtcbiAgICAgICAgICAgIC8vIGlmIGZpZWxkIGlzIG1lbWJlciBvZiBvbmVvZiBBRFQsIHVzZSBBRFQgYXMgdGFyZ2V0XG4gICAgICAgICAgICBpZiAoZmllbGQub25lb2YpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXQgPSB0YXJnZXRbZmllbGQub25lb2ZdO1xuICAgICAgICAgICAgICAgIC8vIGlmIG90aGVyIG9uZW9mIG1lbWJlciBzZWxlY3RlZCwgc2V0IG5ldyBBRFRcbiAgICAgICAgICAgICAgICBpZiAodGFyZ2V0Lm9uZW9mS2luZCAhPT0gbG9jYWxOYW1lKVxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPSBtZXNzYWdlW2ZpZWxkLm9uZW9mXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uZW9mS2luZDogbG9jYWxOYW1lXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB3ZSBoYXZlIGhhbmRsZWQgb25lb2YgYWJvdmUsIHdlIGp1c3QgaGF2ZSByZWFkIHRoZSB2YWx1ZSBpbnRvIGB0YXJnZXRbbG9jYWxOYW1lXWBcbiAgICAgICAgICAgIHN3aXRjaCAoZmllbGQua2luZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzY2FsYXJcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwiZW51bVwiOlxuICAgICAgICAgICAgICAgICAgICBsZXQgVCA9IGZpZWxkLmtpbmQgPT0gXCJlbnVtXCIgPyByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLklOVDMyIDogZmllbGQuVDtcbiAgICAgICAgICAgICAgICAgICAgbGV0IEwgPSBmaWVsZC5raW5kID09IFwic2NhbGFyXCIgPyBmaWVsZC5MIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVwZWF0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhcnIgPSB0YXJnZXRbbG9jYWxOYW1lXTsgLy8gc2FmZSB0byBhc3N1bWUgcHJlc2VuY2Ugb2YgYXJyYXksIG9uZW9mIGNhbm5vdCBjb250YWluIHJlcGVhdGVkIHZhbHVlc1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdpcmVUeXBlID09IGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQgJiYgVCAhPSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNUUklORyAmJiBUICE9IHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuQllURVMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZSA9IHJlYWRlci51aW50MzIoKSArIHJlYWRlci5wb3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnIucHVzaCh0aGlzLnNjYWxhcihyZWFkZXIsIFQsIEwpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnIucHVzaCh0aGlzLnNjYWxhcihyZWFkZXIsIFQsIEwpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRbbG9jYWxOYW1lXSA9IHRoaXMuc2NhbGFyKHJlYWRlciwgVCwgTCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJtZXNzYWdlXCI6XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXBlYXRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFyciA9IHRhcmdldFtsb2NhbE5hbWVdOyAvLyBzYWZlIHRvIGFzc3VtZSBwcmVzZW5jZSBvZiBhcnJheSwgb25lb2YgY2Fubm90IGNvbnRhaW4gcmVwZWF0ZWQgdmFsdWVzXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbXNnID0gZmllbGQuVCgpLmludGVybmFsQmluYXJ5UmVhZChyZWFkZXIsIHJlYWRlci51aW50MzIoKSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcnIucHVzaChtc2cpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFtsb2NhbE5hbWVdID0gZmllbGQuVCgpLmludGVybmFsQmluYXJ5UmVhZChyZWFkZXIsIHJlYWRlci51aW50MzIoKSwgb3B0aW9ucywgdGFyZ2V0W2xvY2FsTmFtZV0pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwibWFwXCI6XG4gICAgICAgICAgICAgICAgICAgIGxldCBbbWFwS2V5LCBtYXBWYWxdID0gdGhpcy5tYXBFbnRyeShmaWVsZCwgcmVhZGVyLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gc2FmZSB0byBhc3N1bWUgcHJlc2VuY2Ugb2YgbWFwIG9iamVjdCwgb25lb2YgY2Fubm90IGNvbnRhaW4gcmVwZWF0ZWQgdmFsdWVzXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldFtsb2NhbE5hbWVdW21hcEtleV0gPSBtYXBWYWw7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWQgYSBtYXAgZmllbGQsIGV4cGVjdGluZyBrZXkgZmllbGQgPSAxLCB2YWx1ZSBmaWVsZCA9IDJcbiAgICAgKi9cbiAgICBtYXBFbnRyeShmaWVsZCwgcmVhZGVyLCBvcHRpb25zKSB7XG4gICAgICAgIGxldCBsZW5ndGggPSByZWFkZXIudWludDMyKCk7XG4gICAgICAgIGxldCBlbmQgPSByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgICAgICBsZXQga2V5ID0gdW5kZWZpbmVkOyAvLyBqYXZhc2NyaXB0IG9ubHkgYWxsb3dzIG51bWJlciBvciBzdHJpbmcgZm9yIG9iamVjdCBwcm9wZXJ0aWVzXG4gICAgICAgIGxldCB2YWwgPSB1bmRlZmluZWQ7XG4gICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICBsZXQgW2ZpZWxkTm8sIHdpcmVUeXBlXSA9IHJlYWRlci50YWcoKTtcbiAgICAgICAgICAgIHN3aXRjaCAoZmllbGRObykge1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLksgPT0gcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5CT09MKVxuICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gcmVhZGVyLmJvb2woKS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBsb25nIHR5cGVzIGFyZSByZWFkIGFzIHN0cmluZywgbnVtYmVyIHR5cGVzIGFyZSBva2F5IGFzIG51bWJlclxuICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gdGhpcy5zY2FsYXIocmVhZGVyLCBmaWVsZC5LLCByZWZsZWN0aW9uX2luZm9fMS5Mb25nVHlwZS5TVFJJTkcpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZmllbGQuVi5raW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwic2NhbGFyXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gdGhpcy5zY2FsYXIocmVhZGVyLCBmaWVsZC5WLlQsIGZpZWxkLlYuTCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZW51bVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IHJlYWRlci5pbnQzMigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIm1lc3NhZ2VcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSBmaWVsZC5WLlQoKS5pbnRlcm5hbEJpbmFyeVJlYWQocmVhZGVyLCByZWFkZXIudWludDMyKCksIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBmaWVsZCAke2ZpZWxkTm99ICh3aXJlIHR5cGUgJHt3aXJlVHlwZX0pIGluIG1hcCBlbnRyeSBmb3IgJHt0aGlzLmluZm8udHlwZU5hbWV9IyR7ZmllbGQubmFtZX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxldCBrZXlSYXcgPSByZWZsZWN0aW9uX3NjYWxhcl9kZWZhdWx0XzEucmVmbGVjdGlvblNjYWxhckRlZmF1bHQoZmllbGQuSyk7XG4gICAgICAgICAgICBrZXkgPSBmaWVsZC5LID09IHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuQk9PTCA/IGtleVJhdy50b1N0cmluZygpIDoga2V5UmF3O1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWwgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHN3aXRjaCAoZmllbGQuVi5raW5kKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNjYWxhclwiOlxuICAgICAgICAgICAgICAgICAgICB2YWwgPSByZWZsZWN0aW9uX3NjYWxhcl9kZWZhdWx0XzEucmVmbGVjdGlvblNjYWxhckRlZmF1bHQoZmllbGQuVi5ULCBmaWVsZC5WLkwpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiZW51bVwiOlxuICAgICAgICAgICAgICAgICAgICB2YWwgPSAwO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwibWVzc2FnZVwiOlxuICAgICAgICAgICAgICAgICAgICB2YWwgPSBmaWVsZC5WLlQoKS5jcmVhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIHJldHVybiBba2V5LCB2YWxdO1xuICAgIH1cbiAgICBzY2FsYXIocmVhZGVyLCB0eXBlLCBsb25nVHlwZSkge1xuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5JTlQzMjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVhZGVyLmludDMyKCk7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuU1RSSU5HOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuQk9PTDpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVhZGVyLmJvb2woKTtcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5ET1VCTEU6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlYWRlci5kb3VibGUoKTtcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5GTE9BVDpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVhZGVyLmZsb2F0KCk7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuSU5UNjQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmxlY3Rpb25fbG9uZ19jb252ZXJ0XzEucmVmbGVjdGlvbkxvbmdDb252ZXJ0KHJlYWRlci5pbnQ2NCgpLCBsb25nVHlwZSk7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuVUlOVDY0OlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZsZWN0aW9uX2xvbmdfY29udmVydF8xLnJlZmxlY3Rpb25Mb25nQ29udmVydChyZWFkZXIudWludDY0KCksIGxvbmdUeXBlKTtcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5GSVhFRDY0OlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZsZWN0aW9uX2xvbmdfY29udmVydF8xLnJlZmxlY3Rpb25Mb25nQ29udmVydChyZWFkZXIuZml4ZWQ2NCgpLCBsb25nVHlwZSk7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuRklYRUQzMjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVhZGVyLmZpeGVkMzIoKTtcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5CWVRFUzpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVhZGVyLmJ5dGVzKCk7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuVUlOVDMyOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWFkZXIudWludDMyKCk7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuU0ZJWEVEMzI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlYWRlci5zZml4ZWQzMigpO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNGSVhFRDY0OlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZsZWN0aW9uX2xvbmdfY29udmVydF8xLnJlZmxlY3Rpb25Mb25nQ29udmVydChyZWFkZXIuc2ZpeGVkNjQoKSwgbG9uZ1R5cGUpO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNJTlQzMjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVhZGVyLnNpbnQzMigpO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNJTlQ2NDpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmbGVjdGlvbl9sb25nX2NvbnZlcnRfMS5yZWZsZWN0aW9uTG9uZ0NvbnZlcnQocmVhZGVyLnNpbnQ2NCgpLCBsb25nVHlwZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLlJlZmxlY3Rpb25CaW5hcnlSZWFkZXIgPSBSZWZsZWN0aW9uQmluYXJ5UmVhZGVyO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUmVmbGVjdGlvbkJpbmFyeVdyaXRlciA9IHZvaWQgMDtcbmNvbnN0IGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMSA9IHJlcXVpcmUoXCIuL2JpbmFyeS1mb3JtYXQtY29udHJhY3RcIik7XG5jb25zdCByZWZsZWN0aW9uX2luZm9fMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24taW5mb1wiKTtcbmNvbnN0IGFzc2VydF8xID0gcmVxdWlyZShcIi4vYXNzZXJ0XCIpO1xuY29uc3QgcGJfbG9uZ18xID0gcmVxdWlyZShcIi4vcGItbG9uZ1wiKTtcbi8qKlxuICogV3JpdGVzIHByb3RvMyBtZXNzYWdlcyBpbiBiaW5hcnkgZm9ybWF0IHVzaW5nIHJlZmxlY3Rpb24gaW5mb3JtYXRpb24uXG4gKlxuICogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL2VuY29kaW5nXG4gKi9cbmNsYXNzIFJlZmxlY3Rpb25CaW5hcnlXcml0ZXIge1xuICAgIGNvbnN0cnVjdG9yKGluZm8pIHtcbiAgICAgICAgdGhpcy5pbmZvID0gaW5mbztcbiAgICB9XG4gICAgcHJlcGFyZSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmZpZWxkcykge1xuICAgICAgICAgICAgY29uc3QgZmllbGRzSW5wdXQgPSB0aGlzLmluZm8uZmllbGRzID8gdGhpcy5pbmZvLmZpZWxkcy5jb25jYXQoKSA6IFtdO1xuICAgICAgICAgICAgdGhpcy5maWVsZHMgPSBmaWVsZHNJbnB1dC5zb3J0KChhLCBiKSA9PiBhLm5vIC0gYi5ubyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBmb3JtYXQuXG4gICAgICovXG4gICAgd3JpdGUobWVzc2FnZSwgd3JpdGVyLCBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMucHJlcGFyZSgpO1xuICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIHRoaXMuZmllbGRzKSB7XG4gICAgICAgICAgICBsZXQgdmFsdWUsIC8vIHRoaXMgd2lsbCBiZSBvdXIgZmllbGQgdmFsdWUsIHdoZXRoZXIgaXQgaXMgbWVtYmVyIG9mIGEgb25lb2Ygb3Igbm90XG4gICAgICAgICAgICBlbWl0RGVmYXVsdCwgLy8gd2hldGhlciB3ZSBlbWl0IHRoZSBkZWZhdWx0IHZhbHVlIChvbmx5IHRydWUgZm9yIG9uZW9mIG1lbWJlcnMpXG4gICAgICAgICAgICByZXBlYXRlZCA9IGZpZWxkLnJlcGVhdCwgbG9jYWxOYW1lID0gZmllbGQubG9jYWxOYW1lO1xuICAgICAgICAgICAgLy8gaGFuZGxlIG9uZW9mIEFEVFxuICAgICAgICAgICAgaWYgKGZpZWxkLm9uZW9mKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSBtZXNzYWdlW2ZpZWxkLm9uZW9mXTtcbiAgICAgICAgICAgICAgICBpZiAoZ3JvdXAub25lb2ZLaW5kICE9PSBsb2NhbE5hbWUpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBpZiBmaWVsZCBpcyBub3Qgc2VsZWN0ZWQsIHNraXBcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGdyb3VwW2xvY2FsTmFtZV07XG4gICAgICAgICAgICAgICAgZW1pdERlZmF1bHQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBtZXNzYWdlW2xvY2FsTmFtZV07XG4gICAgICAgICAgICAgICAgZW1pdERlZmF1bHQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHdlIGhhdmUgaGFuZGxlZCBvbmVvZiBhYm92ZS4gd2UganVzdCBoYXZlIHRvIGhvbm9yIGBlbWl0RGVmYXVsdGAuXG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkLmtpbmQpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwic2NhbGFyXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcImVudW1cIjpcbiAgICAgICAgICAgICAgICAgICAgbGV0IFQgPSBmaWVsZC5raW5kID09IFwiZW51bVwiID8gcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5JTlQzMiA6IGZpZWxkLlQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXBlYXRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KEFycmF5LmlzQXJyYXkodmFsdWUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXBlYXRlZCA9PSByZWZsZWN0aW9uX2luZm9fMS5SZXBlYXRUeXBlLlBBQ0tFRClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhY2tlZCh3cml0ZXIsIFQsIGZpZWxkLm5vLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjYWxhcih3cml0ZXIsIFQsIGZpZWxkLm5vLCBpdGVtLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KGZpZWxkLm9wdCk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2NhbGFyKHdyaXRlciwgVCwgZmllbGQubm8sIHZhbHVlLCBlbWl0RGVmYXVsdCB8fCBmaWVsZC5vcHQpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwibWVzc2FnZVwiOlxuICAgICAgICAgICAgICAgICAgICBpZiAocmVwZWF0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydChBcnJheS5pc0FycmF5KHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlKHdyaXRlciwgb3B0aW9ucywgZmllbGQuVCgpLCBmaWVsZC5ubywgaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2Uod3JpdGVyLCBvcHRpb25zLCBmaWVsZC5UKCksIGZpZWxkLm5vLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm1hcFwiOlxuICAgICAgICAgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnQodHlwZW9mIHZhbHVlID09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIE9iamVjdC5lbnRyaWVzKHZhbHVlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWFwRW50cnkod3JpdGVyLCBvcHRpb25zLCBmaWVsZCwga2V5LCB2YWwpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgdSA9IG9wdGlvbnMud3JpdGVVbmtub3duRmllbGRzO1xuICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAodSA9PT0gdHJ1ZSA/IGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMS5Vbmtub3duRmllbGRIYW5kbGVyLm9uV3JpdGUgOiB1KSh0aGlzLmluZm8udHlwZU5hbWUsIG1lc3NhZ2UsIHdyaXRlcik7XG4gICAgfVxuICAgIG1hcEVudHJ5KHdyaXRlciwgb3B0aW9ucywgZmllbGQsIGtleSwgdmFsdWUpIHtcbiAgICAgICAgd3JpdGVyLnRhZyhmaWVsZC5ubywgYmluYXJ5X2Zvcm1hdF9jb250cmFjdF8xLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCk7XG4gICAgICAgIHdyaXRlci5mb3JrKCk7XG4gICAgICAgIC8vIGphdmFzY3JpcHQgb25seSBhbGxvd3MgbnVtYmVyIG9yIHN0cmluZyBmb3Igb2JqZWN0IHByb3BlcnRpZXNcbiAgICAgICAgLy8gd2UgY29udmVydCBmcm9tIG91ciByZXByZXNlbnRhdGlvbiB0byB0aGUgcHJvdG9idWYgdHlwZVxuICAgICAgICBsZXQga2V5VmFsdWUgPSBrZXk7XG4gICAgICAgIHN3aXRjaCAoZmllbGQuSykge1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLklOVDMyOlxuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkZJWEVEMzI6XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuVUlOVDMyOlxuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNGSVhFRDMyOlxuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNJTlQzMjpcbiAgICAgICAgICAgICAgICBrZXlWYWx1ZSA9IE51bWJlci5wYXJzZUludChrZXkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkJPT0w6XG4gICAgICAgICAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KGtleSA9PSAndHJ1ZScgfHwga2V5ID09ICdmYWxzZScpO1xuICAgICAgICAgICAgICAgIGtleVZhbHVlID0ga2V5ID09ICd0cnVlJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICAvLyB3cml0ZSBrZXksIGV4cGVjdGluZyBrZXkgZmllbGQgbnVtYmVyID0gMVxuICAgICAgICB0aGlzLnNjYWxhcih3cml0ZXIsIGZpZWxkLkssIDEsIGtleVZhbHVlLCB0cnVlKTtcbiAgICAgICAgLy8gd3JpdGUgdmFsdWUsIGV4cGVjdGluZyB2YWx1ZSBmaWVsZCBudW1iZXIgPSAyXG4gICAgICAgIHN3aXRjaCAoZmllbGQuVi5raW5kKSB7XG4gICAgICAgICAgICBjYXNlICdzY2FsYXInOlxuICAgICAgICAgICAgICAgIHRoaXMuc2NhbGFyKHdyaXRlciwgZmllbGQuVi5ULCAyLCB2YWx1ZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdlbnVtJzpcbiAgICAgICAgICAgICAgICB0aGlzLnNjYWxhcih3cml0ZXIsIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuSU5UMzIsIDIsIHZhbHVlLCB0cnVlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21lc3NhZ2UnOlxuICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSh3cml0ZXIsIG9wdGlvbnMsIGZpZWxkLlYuVCgpLCAyLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgd3JpdGVyLmpvaW4oKTtcbiAgICB9XG4gICAgbWVzc2FnZSh3cml0ZXIsIG9wdGlvbnMsIGhhbmRsZXIsIGZpZWxkTm8sIHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBoYW5kbGVyLmludGVybmFsQmluYXJ5V3JpdGUodmFsdWUsIHdyaXRlci50YWcoZmllbGRObywgYmluYXJ5X2Zvcm1hdF9jb250cmFjdF8xLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCkuZm9yaygpLCBvcHRpb25zKTtcbiAgICAgICAgd3JpdGVyLmpvaW4oKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGUgYSBzaW5nbGUgc2NhbGFyIHZhbHVlLlxuICAgICAqL1xuICAgIHNjYWxhcih3cml0ZXIsIHR5cGUsIGZpZWxkTm8sIHZhbHVlLCBlbWl0RGVmYXVsdCkge1xuICAgICAgICBsZXQgW3dpcmVUeXBlLCBtZXRob2QsIGlzRGVmYXVsdF0gPSB0aGlzLnNjYWxhckluZm8odHlwZSwgdmFsdWUpO1xuICAgICAgICBpZiAoIWlzRGVmYXVsdCB8fCBlbWl0RGVmYXVsdCkge1xuICAgICAgICAgICAgd3JpdGVyLnRhZyhmaWVsZE5vLCB3aXJlVHlwZSk7XG4gICAgICAgICAgICB3cml0ZXJbbWV0aG9kXSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGUgYW4gYXJyYXkgb2Ygc2NhbGFyIHZhbHVlcyBpbiBwYWNrZWQgZm9ybWF0LlxuICAgICAqL1xuICAgIHBhY2tlZCh3cml0ZXIsIHR5cGUsIGZpZWxkTm8sIHZhbHVlKSB7XG4gICAgICAgIGlmICghdmFsdWUubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBhc3NlcnRfMS5hc3NlcnQodHlwZSAhPT0gcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5CWVRFUyAmJiB0eXBlICE9PSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNUUklORyk7XG4gICAgICAgIC8vIHdyaXRlIHRhZ1xuICAgICAgICB3cml0ZXIudGFnKGZpZWxkTm8sIGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpO1xuICAgICAgICAvLyBiZWdpbiBsZW5ndGgtZGVsaW1pdGVkXG4gICAgICAgIHdyaXRlci5mb3JrKCk7XG4gICAgICAgIC8vIHdyaXRlIHZhbHVlcyB3aXRob3V0IHRhZ3NcbiAgICAgICAgbGV0IFssIG1ldGhvZCxdID0gdGhpcy5zY2FsYXJJbmZvKHR5cGUpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgd3JpdGVyW21ldGhvZF0odmFsdWVbaV0pO1xuICAgICAgICAvLyBlbmQgbGVuZ3RoIGRlbGltaXRlZFxuICAgICAgICB3cml0ZXIuam9pbigpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgaW5mb3JtYXRpb24gZm9yIHdyaXRpbmcgYSBzY2FsYXIgdmFsdWUuXG4gICAgICpcbiAgICAgKiBSZXR1cm5zIHR1cGxlOlxuICAgICAqIFswXTogYXBwcm9wcmlhdGUgV2lyZVR5cGVcbiAgICAgKiBbMV06IG5hbWUgb2YgdGhlIGFwcHJvcHJpYXRlIG1ldGhvZCBvZiBJQmluYXJ5V3JpdGVyXG4gICAgICogWzJdOiB3aGV0aGVyIHRoZSBnaXZlbiB2YWx1ZSBpcyBhIGRlZmF1bHQgdmFsdWVcbiAgICAgKlxuICAgICAqIElmIGFyZ3VtZW50IGB2YWx1ZWAgaXMgb21pdHRlZCwgWzJdIGlzIGFsd2F5cyBmYWxzZS5cbiAgICAgKi9cbiAgICBzY2FsYXJJbmZvKHR5cGUsIHZhbHVlKSB7XG4gICAgICAgIGxldCB0ID0gYmluYXJ5X2Zvcm1hdF9jb250cmFjdF8xLldpcmVUeXBlLlZhcmludDtcbiAgICAgICAgbGV0IG07XG4gICAgICAgIGxldCBpID0gdmFsdWUgPT09IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IGQgPSB2YWx1ZSA9PT0gMDtcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuSU5UMzI6XG4gICAgICAgICAgICAgICAgbSA9IFwiaW50MzJcIjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TVFJJTkc6XG4gICAgICAgICAgICAgICAgZCA9IGkgfHwgIXZhbHVlLmxlbmd0aDtcbiAgICAgICAgICAgICAgICB0ID0gYmluYXJ5X2Zvcm1hdF9jb250cmFjdF8xLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZDtcbiAgICAgICAgICAgICAgICBtID0gXCJzdHJpbmdcIjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5CT09MOlxuICAgICAgICAgICAgICAgIGQgPSB2YWx1ZSA9PT0gZmFsc2U7XG4gICAgICAgICAgICAgICAgbSA9IFwiYm9vbFwiO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlVJTlQzMjpcbiAgICAgICAgICAgICAgICBtID0gXCJ1aW50MzJcIjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5ET1VCTEU6XG4gICAgICAgICAgICAgICAgdCA9IGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMS5XaXJlVHlwZS5CaXQ2NDtcbiAgICAgICAgICAgICAgICBtID0gXCJkb3VibGVcIjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5GTE9BVDpcbiAgICAgICAgICAgICAgICB0ID0gYmluYXJ5X2Zvcm1hdF9jb250cmFjdF8xLldpcmVUeXBlLkJpdDMyO1xuICAgICAgICAgICAgICAgIG0gPSBcImZsb2F0XCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuSU5UNjQ6XG4gICAgICAgICAgICAgICAgZCA9IGkgfHwgcGJfbG9uZ18xLlBiTG9uZy5mcm9tKHZhbHVlKS5pc1plcm8oKTtcbiAgICAgICAgICAgICAgICBtID0gXCJpbnQ2NFwiO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlVJTlQ2NDpcbiAgICAgICAgICAgICAgICBkID0gaSB8fCBwYl9sb25nXzEuUGJVTG9uZy5mcm9tKHZhbHVlKS5pc1plcm8oKTtcbiAgICAgICAgICAgICAgICBtID0gXCJ1aW50NjRcIjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5GSVhFRDY0OlxuICAgICAgICAgICAgICAgIGQgPSBpIHx8IHBiX2xvbmdfMS5QYlVMb25nLmZyb20odmFsdWUpLmlzWmVybygpO1xuICAgICAgICAgICAgICAgIHQgPSBiaW5hcnlfZm9ybWF0X2NvbnRyYWN0XzEuV2lyZVR5cGUuQml0NjQ7XG4gICAgICAgICAgICAgICAgbSA9IFwiZml4ZWQ2NFwiO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkJZVEVTOlxuICAgICAgICAgICAgICAgIGQgPSBpIHx8ICF2YWx1ZS5ieXRlTGVuZ3RoO1xuICAgICAgICAgICAgICAgIHQgPSBiaW5hcnlfZm9ybWF0X2NvbnRyYWN0XzEuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkO1xuICAgICAgICAgICAgICAgIG0gPSBcImJ5dGVzXCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuRklYRUQzMjpcbiAgICAgICAgICAgICAgICB0ID0gYmluYXJ5X2Zvcm1hdF9jb250cmFjdF8xLldpcmVUeXBlLkJpdDMyO1xuICAgICAgICAgICAgICAgIG0gPSBcImZpeGVkMzJcIjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TRklYRUQzMjpcbiAgICAgICAgICAgICAgICB0ID0gYmluYXJ5X2Zvcm1hdF9jb250cmFjdF8xLldpcmVUeXBlLkJpdDMyO1xuICAgICAgICAgICAgICAgIG0gPSBcInNmaXhlZDMyXCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuU0ZJWEVENjQ6XG4gICAgICAgICAgICAgICAgZCA9IGkgfHwgcGJfbG9uZ18xLlBiTG9uZy5mcm9tKHZhbHVlKS5pc1plcm8oKTtcbiAgICAgICAgICAgICAgICB0ID0gYmluYXJ5X2Zvcm1hdF9jb250cmFjdF8xLldpcmVUeXBlLkJpdDY0O1xuICAgICAgICAgICAgICAgIG0gPSBcInNmaXhlZDY0XCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuU0lOVDMyOlxuICAgICAgICAgICAgICAgIG0gPSBcInNpbnQzMlwiO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNJTlQ2NDpcbiAgICAgICAgICAgICAgICBkID0gaSB8fCBwYl9sb25nXzEuUGJMb25nLmZyb20odmFsdWUpLmlzWmVybygpO1xuICAgICAgICAgICAgICAgIG0gPSBcInNpbnQ2NFwiO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbdCwgbSwgaSB8fCBkXTtcbiAgICB9XG59XG5leHBvcnRzLlJlZmxlY3Rpb25CaW5hcnlXcml0ZXIgPSBSZWZsZWN0aW9uQmluYXJ5V3JpdGVyO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVmbGVjdGlvbkNyZWF0ZSA9IHZvaWQgMDtcbmNvbnN0IHJlZmxlY3Rpb25fc2NhbGFyX2RlZmF1bHRfMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24tc2NhbGFyLWRlZmF1bHRcIik7XG5jb25zdCBtZXNzYWdlX3R5cGVfY29udHJhY3RfMSA9IHJlcXVpcmUoXCIuL21lc3NhZ2UtdHlwZS1jb250cmFjdFwiKTtcbi8qKlxuICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgZ2VuZXJpYyBtZXNzYWdlLCB1c2luZyB0aGUgZmllbGRcbiAqIGluZm9ybWF0aW9uLlxuICovXG5mdW5jdGlvbiByZWZsZWN0aW9uQ3JlYXRlKHR5cGUpIHtcbiAgICAvKipcbiAgICAgKiBUaGlzIHRlcm5hcnkgY2FuIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbi5cbiAgICAgKiBUaGUgYE9iamVjdC5jcmVhdGUoKWAgY29kZSBwYXRoIHV0aWxpemVzIGEgbmV3IGBtZXNzYWdlUHJvdG90eXBlYFxuICAgICAqIHByb3BlcnR5IG9uIHRoZSBgSU1lc3NhZ2VUeXBlYCB3aGljaCBoYXMgdGhpcyBzYW1lIGBNRVNTQUdFX1RZUEVgXG4gICAgICogbm9uLWVudW1lcmFibGUgcHJvcGVydHkgb24gaXQuIERvaW5nIGl0IHRoaXMgd2F5IG1lYW5zIHRoYXQgd2Ugb25seVxuICAgICAqIHBheSB0aGUgY29zdCBvZiBgT2JqZWN0LmRlZmluZVByb3BlcnR5KClgIG9uY2UgcGVyIGBJTWVzc2FnZVR5cGVgXG4gICAgICogY2xhc3Mgb2Ygb25jZSBwZXIgXCJpbnN0YW5jZVwiLiBUaGUgZmFsc3kgY29kZSBwYXRoIGlzIG9ubHkgcHJvdmlkZWRcbiAgICAgKiBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgaW4gY2FzZXMgd2hlcmUgdGhlIHJ1bnRpbWUgbGlicmFyeSBpc1xuICAgICAqIHVwZGF0ZWQgd2l0aG91dCBhbHNvIHVwZGF0aW5nIHRoZSBnZW5lcmF0ZWQgY29kZS5cbiAgICAgKi9cbiAgICBjb25zdCBtc2cgPSB0eXBlLm1lc3NhZ2VQcm90b3R5cGVcbiAgICAgICAgPyBPYmplY3QuY3JlYXRlKHR5cGUubWVzc2FnZVByb3RvdHlwZSlcbiAgICAgICAgOiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIG1lc3NhZ2VfdHlwZV9jb250cmFjdF8xLk1FU1NBR0VfVFlQRSwgeyB2YWx1ZTogdHlwZSB9KTtcbiAgICBmb3IgKGxldCBmaWVsZCBvZiB0eXBlLmZpZWxkcykge1xuICAgICAgICBsZXQgbmFtZSA9IGZpZWxkLmxvY2FsTmFtZTtcbiAgICAgICAgaWYgKGZpZWxkLm9wdClcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBpZiAoZmllbGQub25lb2YpXG4gICAgICAgICAgICBtc2dbZmllbGQub25lb2ZdID0geyBvbmVvZktpbmQ6IHVuZGVmaW5lZCB9O1xuICAgICAgICBlbHNlIGlmIChmaWVsZC5yZXBlYXQpXG4gICAgICAgICAgICBtc2dbbmFtZV0gPSBbXTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgc3dpdGNoIChmaWVsZC5raW5kKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNjYWxhclwiOlxuICAgICAgICAgICAgICAgICAgICBtc2dbbmFtZV0gPSByZWZsZWN0aW9uX3NjYWxhcl9kZWZhdWx0XzEucmVmbGVjdGlvblNjYWxhckRlZmF1bHQoZmllbGQuVCwgZmllbGQuTCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJlbnVtXCI6XG4gICAgICAgICAgICAgICAgICAgIC8vIHdlIHJlcXVpcmUgMCB0byBiZSBkZWZhdWx0IHZhbHVlIGZvciBhbGwgZW51bXNcbiAgICAgICAgICAgICAgICAgICAgbXNnW25hbWVdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm1hcFwiOlxuICAgICAgICAgICAgICAgICAgICBtc2dbbmFtZV0gPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtc2c7XG59XG5leHBvcnRzLnJlZmxlY3Rpb25DcmVhdGUgPSByZWZsZWN0aW9uQ3JlYXRlO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVmbGVjdGlvbk1lcmdlUGFydGlhbCA9IHZvaWQgMDtcbi8qKlxuICogQ29weSBwYXJ0aWFsIGRhdGEgaW50byB0aGUgdGFyZ2V0IG1lc3NhZ2UuXG4gKlxuICogSWYgYSBzaW5ndWxhciBzY2FsYXIgb3IgZW51bSBmaWVsZCBpcyBwcmVzZW50IGluIHRoZSBzb3VyY2UsIGl0XG4gKiByZXBsYWNlcyB0aGUgZmllbGQgaW4gdGhlIHRhcmdldC5cbiAqXG4gKiBJZiBhIHNpbmd1bGFyIG1lc3NhZ2UgZmllbGQgaXMgcHJlc2VudCBpbiB0aGUgc291cmNlLCBpdCBpcyBtZXJnZWRcbiAqIHdpdGggdGhlIHRhcmdldCBmaWVsZCBieSBjYWxsaW5nIG1lcmdlUGFydGlhbCgpIG9mIHRoZSByZXNwb25zaWJsZVxuICogbWVzc2FnZSB0eXBlLlxuICpcbiAqIElmIGEgcmVwZWF0ZWQgZmllbGQgaXMgcHJlc2VudCBpbiB0aGUgc291cmNlLCBpdHMgdmFsdWVzIHJlcGxhY2VcbiAqIGFsbCB2YWx1ZXMgaW4gdGhlIHRhcmdldCBhcnJheSwgcmVtb3ZpbmcgZXh0cmFuZW91cyB2YWx1ZXMuXG4gKiBSZXBlYXRlZCBtZXNzYWdlIGZpZWxkcyBhcmUgY29waWVkLCBub3QgbWVyZ2VkLlxuICpcbiAqIElmIGEgbWFwIGZpZWxkIGlzIHByZXNlbnQgaW4gdGhlIHNvdXJjZSwgZW50cmllcyBhcmUgYWRkZWQgdG8gdGhlXG4gKiB0YXJnZXQgbWFwLCByZXBsYWNpbmcgZW50cmllcyB3aXRoIHRoZSBzYW1lIGtleS4gRW50cmllcyB0aGF0IG9ubHlcbiAqIGV4aXN0IGluIHRoZSB0YXJnZXQgcmVtYWluLiBFbnRyaWVzIHdpdGggbWVzc2FnZSB2YWx1ZXMgYXJlIGNvcGllZCxcbiAqIG5vdCBtZXJnZWQuXG4gKlxuICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gZGlmZmVycyBmcm9tIHByb3RvYnVmIG1lcmdlIHNlbWFudGljcyxcbiAqIHdoaWNoIGFwcGVuZHMgcmVwZWF0ZWQgZmllbGRzLlxuICovXG5mdW5jdGlvbiByZWZsZWN0aW9uTWVyZ2VQYXJ0aWFsKGluZm8sIHRhcmdldCwgc291cmNlKSB7XG4gICAgbGV0IGZpZWxkVmFsdWUsIC8vIHRoZSBmaWVsZCB2YWx1ZSB3ZSBhcmUgd29ya2luZyB3aXRoXG4gICAgaW5wdXQgPSBzb3VyY2UsIG91dHB1dDsgLy8gd2hlcmUgd2Ugd2FudCBvdXIgZmllbGQgdmFsdWUgdG8gZ29cbiAgICBmb3IgKGxldCBmaWVsZCBvZiBpbmZvLmZpZWxkcykge1xuICAgICAgICBsZXQgbmFtZSA9IGZpZWxkLmxvY2FsTmFtZTtcbiAgICAgICAgaWYgKGZpZWxkLm9uZW9mKSB7XG4gICAgICAgICAgICBjb25zdCBncm91cCA9IGlucHV0W2ZpZWxkLm9uZW9mXTsgLy8gdGhpcyBpcyB0aGUgb25lb2ZgcyBncm91cCBpbiB0aGUgc291cmNlXG4gICAgICAgICAgICBpZiAoKGdyb3VwID09PSBudWxsIHx8IGdyb3VwID09PSB2b2lkIDAgPyB2b2lkIDAgOiBncm91cC5vbmVvZktpbmQpID09IHVuZGVmaW5lZCkgeyAvLyB0aGUgdXNlciBpcyBmcmVlIHRvIG9taXRcbiAgICAgICAgICAgICAgICBjb250aW51ZTsgLy8gd2Ugc2tpcCB0aGlzIGZpZWxkLCBhbmQgYWxsIG90aGVyIG1lbWJlcnMgdG9vXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaWVsZFZhbHVlID0gZ3JvdXBbbmFtZV07IC8vIG91ciB2YWx1ZSBjb21lcyBmcm9tIHRoZSB0aGUgb25lb2YgZ3JvdXAgb2YgdGhlIHNvdXJjZVxuICAgICAgICAgICAgb3V0cHV0ID0gdGFyZ2V0W2ZpZWxkLm9uZW9mXTsgLy8gYW5kIG91ciBvdXRwdXQgaXMgdGhlIG9uZW9mIGdyb3VwIG9mIHRoZSB0YXJnZXRcbiAgICAgICAgICAgIG91dHB1dC5vbmVvZktpbmQgPSBncm91cC5vbmVvZktpbmQ7IC8vIGFsd2F5cyB1cGRhdGUgZGlzY3JpbWluYXRvclxuICAgICAgICAgICAgaWYgKGZpZWxkVmFsdWUgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIG91dHB1dFtuYW1lXTsgLy8gcmVtb3ZlIGFueSBleGlzdGluZyB2YWx1ZVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBza2lwIGZ1cnRoZXIgd29yayBvbiBmaWVsZFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZmllbGRWYWx1ZSA9IGlucHV0W25hbWVdOyAvLyB3ZSBhcmUgdXNpbmcgdGhlIHNvdXJjZSBkaXJlY3RseVxuICAgICAgICAgICAgb3V0cHV0ID0gdGFyZ2V0OyAvLyB3ZSB3YW50IG91ciBmaWVsZCB2YWx1ZSB0byBnbyBkaXJlY3RseSBpbnRvIHRoZSB0YXJnZXRcbiAgICAgICAgICAgIGlmIChmaWVsZFZhbHVlID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBza2lwIGZ1cnRoZXIgd29yayBvbiBmaWVsZCwgZXhpc3RpbmcgdmFsdWUgaXMgdXNlZCBhcyBpc1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChmaWVsZC5yZXBlYXQpXG4gICAgICAgICAgICBvdXRwdXRbbmFtZV0ubGVuZ3RoID0gZmllbGRWYWx1ZS5sZW5ndGg7IC8vIHJlc2l6ZSB0YXJnZXQgYXJyYXkgdG8gbWF0Y2ggc291cmNlIGFycmF5XG4gICAgICAgIC8vIG5vdyB3ZSBqdXN0IHdvcmsgd2l0aCBgZmllbGRWYWx1ZWAgYW5kIGBvdXRwdXRgIHRvIG1lcmdlIHRoZSB2YWx1ZVxuICAgICAgICBzd2l0Y2ggKGZpZWxkLmtpbmQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJzY2FsYXJcIjpcbiAgICAgICAgICAgIGNhc2UgXCJlbnVtXCI6XG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkLnJlcGVhdClcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWVsZFZhbHVlLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0W25hbWVdW2ldID0gZmllbGRWYWx1ZVtpXTsgLy8gbm90IGEgcmVmZXJlbmNlIHR5cGVcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIG91dHB1dFtuYW1lXSA9IGZpZWxkVmFsdWU7IC8vIG5vdCBhIHJlZmVyZW5jZSB0eXBlXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWVzc2FnZVwiOlxuICAgICAgICAgICAgICAgIGxldCBUID0gZmllbGQuVCgpO1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZC5yZXBlYXQpXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmllbGRWYWx1ZS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFtuYW1lXVtpXSA9IFQuY3JlYXRlKGZpZWxkVmFsdWVbaV0pO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKG91dHB1dFtuYW1lXSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICBvdXRwdXRbbmFtZV0gPSBULmNyZWF0ZShmaWVsZFZhbHVlKTsgLy8gbm90aGluZyB0byBtZXJnZSB3aXRoXG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBULm1lcmdlUGFydGlhbChvdXRwdXRbbmFtZV0sIGZpZWxkVmFsdWUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm1hcFwiOlxuICAgICAgICAgICAgICAgIC8vIE1hcCBhbmQgcmVwZWF0ZWQgZmllbGRzIGFyZSBzaW1wbHkgb3ZlcndyaXR0ZW4sIG5vdCBhcHBlbmRlZCBvciBtZXJnZWRcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGZpZWxkLlYua2luZCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwic2NhbGFyXCI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJlbnVtXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKG91dHB1dFtuYW1lXSwgZmllbGRWYWx1ZSk7IC8vIGVsZW1lbnRzIGFyZSBub3QgcmVmZXJlbmNlIHR5cGVzXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcIm1lc3NhZ2VcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBUID0gZmllbGQuVi5UKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBrIG9mIE9iamVjdC5rZXlzKGZpZWxkVmFsdWUpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFtuYW1lXVtrXSA9IFQuY3JlYXRlKGZpZWxkVmFsdWVba10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5yZWZsZWN0aW9uTWVyZ2VQYXJ0aWFsID0gcmVmbGVjdGlvbk1lcmdlUGFydGlhbDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlZmxlY3Rpb25FcXVhbHMgPSB2b2lkIDA7XG5jb25zdCByZWZsZWN0aW9uX2luZm9fMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24taW5mb1wiKTtcbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHR3byBtZXNzYWdlIG9mIHRoZSBzYW1lIHR5cGUgaGF2ZSB0aGUgc2FtZSBmaWVsZCB2YWx1ZXMuXG4gKiBDaGVja3MgZm9yIGRlZXAgZXF1YWxpdHksIHRyYXZlcnNpbmcgcmVwZWF0ZWQgZmllbGRzLCBvbmVvZiBncm91cHMsIG1hcHNcbiAqIGFuZCBtZXNzYWdlcyByZWN1cnNpdmVseS5cbiAqIFdpbGwgYWxzbyByZXR1cm4gdHJ1ZSBpZiBib3RoIG1lc3NhZ2VzIGFyZSBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gcmVmbGVjdGlvbkVxdWFscyhpbmZvLCBhLCBiKSB7XG4gICAgaWYgKGEgPT09IGIpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIGlmICghYSB8fCAhYilcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGZvciAobGV0IGZpZWxkIG9mIGluZm8uZmllbGRzKSB7XG4gICAgICAgIGxldCBsb2NhbE5hbWUgPSBmaWVsZC5sb2NhbE5hbWU7XG4gICAgICAgIGxldCB2YWxfYSA9IGZpZWxkLm9uZW9mID8gYVtmaWVsZC5vbmVvZl1bbG9jYWxOYW1lXSA6IGFbbG9jYWxOYW1lXTtcbiAgICAgICAgbGV0IHZhbF9iID0gZmllbGQub25lb2YgPyBiW2ZpZWxkLm9uZW9mXVtsb2NhbE5hbWVdIDogYltsb2NhbE5hbWVdO1xuICAgICAgICBzd2l0Y2ggKGZpZWxkLmtpbmQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJlbnVtXCI6XG4gICAgICAgICAgICBjYXNlIFwic2NhbGFyXCI6XG4gICAgICAgICAgICAgICAgbGV0IHQgPSBmaWVsZC5raW5kID09IFwiZW51bVwiID8gcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5JTlQzMiA6IGZpZWxkLlQ7XG4gICAgICAgICAgICAgICAgaWYgKCEoZmllbGQucmVwZWF0XG4gICAgICAgICAgICAgICAgICAgID8gcmVwZWF0ZWRQcmltaXRpdmVFcSh0LCB2YWxfYSwgdmFsX2IpXG4gICAgICAgICAgICAgICAgICAgIDogcHJpbWl0aXZlRXEodCwgdmFsX2EsIHZhbF9iKSkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJtYXBcIjpcbiAgICAgICAgICAgICAgICBpZiAoIShmaWVsZC5WLmtpbmQgPT0gXCJtZXNzYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgPyByZXBlYXRlZE1zZ0VxKGZpZWxkLlYuVCgpLCBvYmplY3RWYWx1ZXModmFsX2EpLCBvYmplY3RWYWx1ZXModmFsX2IpKVxuICAgICAgICAgICAgICAgICAgICA6IHJlcGVhdGVkUHJpbWl0aXZlRXEoZmllbGQuVi5raW5kID09IFwiZW51bVwiID8gcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5JTlQzMiA6IGZpZWxkLlYuVCwgb2JqZWN0VmFsdWVzKHZhbF9hKSwgb2JqZWN0VmFsdWVzKHZhbF9iKSkpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWVzc2FnZVwiOlxuICAgICAgICAgICAgICAgIGxldCBUID0gZmllbGQuVCgpO1xuICAgICAgICAgICAgICAgIGlmICghKGZpZWxkLnJlcGVhdFxuICAgICAgICAgICAgICAgICAgICA/IHJlcGVhdGVkTXNnRXEoVCwgdmFsX2EsIHZhbF9iKVxuICAgICAgICAgICAgICAgICAgICA6IFQuZXF1YWxzKHZhbF9hLCB2YWxfYikpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5leHBvcnRzLnJlZmxlY3Rpb25FcXVhbHMgPSByZWZsZWN0aW9uRXF1YWxzO1xuY29uc3Qgb2JqZWN0VmFsdWVzID0gT2JqZWN0LnZhbHVlcztcbmZ1bmN0aW9uIHByaW1pdGl2ZUVxKHR5cGUsIGEsIGIpIHtcbiAgICBpZiAoYSA9PT0gYilcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgaWYgKHR5cGUgIT09IHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuQllURVMpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBsZXQgYmEgPSBhO1xuICAgIGxldCBiYiA9IGI7XG4gICAgaWYgKGJhLmxlbmd0aCAhPT0gYmIubGVuZ3RoKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiYS5sZW5ndGg7IGkrKylcbiAgICAgICAgaWYgKGJhW2ldICE9IGJiW2ldKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gcmVwZWF0ZWRQcmltaXRpdmVFcSh0eXBlLCBhLCBiKSB7XG4gICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKylcbiAgICAgICAgaWYgKCFwcmltaXRpdmVFcSh0eXBlLCBhW2ldLCBiW2ldKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIHJlcGVhdGVkTXNnRXEodHlwZSwgYSwgYikge1xuICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspXG4gICAgICAgIGlmICghdHlwZS5lcXVhbHMoYVtpXSwgYltpXSkpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG59XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5NZXNzYWdlVHlwZSA9IHZvaWQgMDtcbmNvbnN0IG1lc3NhZ2VfdHlwZV9jb250cmFjdF8xID0gcmVxdWlyZShcIi4vbWVzc2FnZS10eXBlLWNvbnRyYWN0XCIpO1xuY29uc3QgcmVmbGVjdGlvbl9pbmZvXzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLWluZm9cIik7XG5jb25zdCByZWZsZWN0aW9uX3R5cGVfY2hlY2tfMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24tdHlwZS1jaGVja1wiKTtcbmNvbnN0IHJlZmxlY3Rpb25fanNvbl9yZWFkZXJfMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24tanNvbi1yZWFkZXJcIik7XG5jb25zdCByZWZsZWN0aW9uX2pzb25fd3JpdGVyXzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLWpzb24td3JpdGVyXCIpO1xuY29uc3QgcmVmbGVjdGlvbl9iaW5hcnlfcmVhZGVyXzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLWJpbmFyeS1yZWFkZXJcIik7XG5jb25zdCByZWZsZWN0aW9uX2JpbmFyeV93cml0ZXJfMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24tYmluYXJ5LXdyaXRlclwiKTtcbmNvbnN0IHJlZmxlY3Rpb25fY3JlYXRlXzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLWNyZWF0ZVwiKTtcbmNvbnN0IHJlZmxlY3Rpb25fbWVyZ2VfcGFydGlhbF8xID0gcmVxdWlyZShcIi4vcmVmbGVjdGlvbi1tZXJnZS1wYXJ0aWFsXCIpO1xuY29uc3QganNvbl90eXBpbmdzXzEgPSByZXF1aXJlKFwiLi9qc29uLXR5cGluZ3NcIik7XG5jb25zdCBqc29uX2Zvcm1hdF9jb250cmFjdF8xID0gcmVxdWlyZShcIi4vanNvbi1mb3JtYXQtY29udHJhY3RcIik7XG5jb25zdCByZWZsZWN0aW9uX2VxdWFsc18xID0gcmVxdWlyZShcIi4vcmVmbGVjdGlvbi1lcXVhbHNcIik7XG5jb25zdCBiaW5hcnlfd3JpdGVyXzEgPSByZXF1aXJlKFwiLi9iaW5hcnktd3JpdGVyXCIpO1xuY29uc3QgYmluYXJ5X3JlYWRlcl8xID0gcmVxdWlyZShcIi4vYmluYXJ5LXJlYWRlclwiKTtcbmNvbnN0IGJhc2VEZXNjcmlwdG9ycyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdC5nZXRQcm90b3R5cGVPZih7fSkpO1xuLyoqXG4gKiBUaGlzIHN0YW5kYXJkIG1lc3NhZ2UgdHlwZSBwcm92aWRlcyByZWZsZWN0aW9uLWJhc2VkXG4gKiBvcGVyYXRpb25zIHRvIHdvcmsgd2l0aCBhIG1lc3NhZ2UuXG4gKi9cbmNsYXNzIE1lc3NhZ2VUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcihuYW1lLCBmaWVsZHMsIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5kZWZhdWx0Q2hlY2tEZXB0aCA9IDE2O1xuICAgICAgICB0aGlzLnR5cGVOYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5maWVsZHMgPSBmaWVsZHMubWFwKHJlZmxlY3Rpb25faW5mb18xLm5vcm1hbGl6ZUZpZWxkSW5mbyk7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwID8gb3B0aW9ucyA6IHt9O1xuICAgICAgICB0aGlzLm1lc3NhZ2VQcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKG51bGwsIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYmFzZURlc2NyaXB0b3JzKSwgeyBbbWVzc2FnZV90eXBlX2NvbnRyYWN0XzEuTUVTU0FHRV9UWVBFXTogeyB2YWx1ZTogdGhpcyB9IH0pKTtcbiAgICAgICAgdGhpcy5yZWZUeXBlQ2hlY2sgPSBuZXcgcmVmbGVjdGlvbl90eXBlX2NoZWNrXzEuUmVmbGVjdGlvblR5cGVDaGVjayh0aGlzKTtcbiAgICAgICAgdGhpcy5yZWZKc29uUmVhZGVyID0gbmV3IHJlZmxlY3Rpb25fanNvbl9yZWFkZXJfMS5SZWZsZWN0aW9uSnNvblJlYWRlcih0aGlzKTtcbiAgICAgICAgdGhpcy5yZWZKc29uV3JpdGVyID0gbmV3IHJlZmxlY3Rpb25fanNvbl93cml0ZXJfMS5SZWZsZWN0aW9uSnNvbldyaXRlcih0aGlzKTtcbiAgICAgICAgdGhpcy5yZWZCaW5SZWFkZXIgPSBuZXcgcmVmbGVjdGlvbl9iaW5hcnlfcmVhZGVyXzEuUmVmbGVjdGlvbkJpbmFyeVJlYWRlcih0aGlzKTtcbiAgICAgICAgdGhpcy5yZWZCaW5Xcml0ZXIgPSBuZXcgcmVmbGVjdGlvbl9iaW5hcnlfd3JpdGVyXzEuUmVmbGVjdGlvbkJpbmFyeVdyaXRlcih0aGlzKTtcbiAgICB9XG4gICAgY3JlYXRlKHZhbHVlKSB7XG4gICAgICAgIGxldCBtZXNzYWdlID0gcmVmbGVjdGlvbl9jcmVhdGVfMS5yZWZsZWN0aW9uQ3JlYXRlKHRoaXMpO1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmVmbGVjdGlvbl9tZXJnZV9wYXJ0aWFsXzEucmVmbGVjdGlvbk1lcmdlUGFydGlhbCh0aGlzLCBtZXNzYWdlLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENsb25lIHRoZSBtZXNzYWdlLlxuICAgICAqXG4gICAgICogVW5rbm93biBmaWVsZHMgYXJlIGRpc2NhcmRlZC5cbiAgICAgKi9cbiAgICBjbG9uZShtZXNzYWdlKSB7XG4gICAgICAgIGxldCBjb3B5ID0gdGhpcy5jcmVhdGUoKTtcbiAgICAgICAgcmVmbGVjdGlvbl9tZXJnZV9wYXJ0aWFsXzEucmVmbGVjdGlvbk1lcmdlUGFydGlhbCh0aGlzLCBjb3B5LCBtZXNzYWdlKTtcbiAgICAgICAgcmV0dXJuIGNvcHk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERldGVybWluZXMgd2hldGhlciB0d28gbWVzc2FnZSBvZiB0aGUgc2FtZSB0eXBlIGhhdmUgdGhlIHNhbWUgZmllbGQgdmFsdWVzLlxuICAgICAqIENoZWNrcyBmb3IgZGVlcCBlcXVhbGl0eSwgdHJhdmVyc2luZyByZXBlYXRlZCBmaWVsZHMsIG9uZW9mIGdyb3VwcywgbWFwc1xuICAgICAqIGFuZCBtZXNzYWdlcyByZWN1cnNpdmVseS5cbiAgICAgKiBXaWxsIGFsc28gcmV0dXJuIHRydWUgaWYgYm90aCBtZXNzYWdlcyBhcmUgYHVuZGVmaW5lZGAuXG4gICAgICovXG4gICAgZXF1YWxzKGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIHJlZmxlY3Rpb25fZXF1YWxzXzEucmVmbGVjdGlvbkVxdWFscyh0aGlzLCBhLCBiKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSXMgdGhlIGdpdmVuIHZhbHVlIGFzc2lnbmFibGUgdG8gb3VyIG1lc3NhZ2UgdHlwZVxuICAgICAqIGFuZCBjb250YWlucyBubyBbZXhjZXNzIHByb3BlcnRpZXNdKGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rL2ludGVyZmFjZXMuaHRtbCNleGNlc3MtcHJvcGVydHktY2hlY2tzKT9cbiAgICAgKi9cbiAgICBpcyhhcmcsIGRlcHRoID0gdGhpcy5kZWZhdWx0Q2hlY2tEZXB0aCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWZUeXBlQ2hlY2suaXMoYXJnLCBkZXB0aCwgZmFsc2UpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJcyB0aGUgZ2l2ZW4gdmFsdWUgYXNzaWduYWJsZSB0byBvdXIgbWVzc2FnZSB0eXBlLFxuICAgICAqIHJlZ2FyZGxlc3Mgb2YgW2V4Y2VzcyBwcm9wZXJ0aWVzXShodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay9pbnRlcmZhY2VzLmh0bWwjZXhjZXNzLXByb3BlcnR5LWNoZWNrcyk/XG4gICAgICovXG4gICAgaXNBc3NpZ25hYmxlKGFyZywgZGVwdGggPSB0aGlzLmRlZmF1bHRDaGVja0RlcHRoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZlR5cGVDaGVjay5pcyhhcmcsIGRlcHRoLCB0cnVlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29weSBwYXJ0aWFsIGRhdGEgaW50byB0aGUgdGFyZ2V0IG1lc3NhZ2UuXG4gICAgICovXG4gICAgbWVyZ2VQYXJ0aWFsKHRhcmdldCwgc291cmNlKSB7XG4gICAgICAgIHJlZmxlY3Rpb25fbWVyZ2VfcGFydGlhbF8xLnJlZmxlY3Rpb25NZXJnZVBhcnRpYWwodGhpcywgdGFyZ2V0LCBzb3VyY2UpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBuZXcgbWVzc2FnZSBmcm9tIGJpbmFyeSBmb3JtYXQuXG4gICAgICovXG4gICAgZnJvbUJpbmFyeShkYXRhLCBvcHRpb25zKSB7XG4gICAgICAgIGxldCBvcHQgPSBiaW5hcnlfcmVhZGVyXzEuYmluYXJ5UmVhZE9wdGlvbnMob3B0aW9ucyk7XG4gICAgICAgIHJldHVybiB0aGlzLmludGVybmFsQmluYXJ5UmVhZChvcHQucmVhZGVyRmFjdG9yeShkYXRhKSwgZGF0YS5ieXRlTGVuZ3RoLCBvcHQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWFkIGEgbmV3IG1lc3NhZ2UgZnJvbSBhIEpTT04gdmFsdWUuXG4gICAgICovXG4gICAgZnJvbUpzb24oanNvbiwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbEpzb25SZWFkKGpzb24sIGpzb25fZm9ybWF0X2NvbnRyYWN0XzEuanNvblJlYWRPcHRpb25zKG9wdGlvbnMpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVhZCBhIG5ldyBtZXNzYWdlIGZyb20gYSBKU09OIHN0cmluZy5cbiAgICAgKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gYFQuZnJvbUpzb24oSlNPTi5wYXJzZShqc29uKSlgLlxuICAgICAqL1xuICAgIGZyb21Kc29uU3RyaW5nKGpzb24sIG9wdGlvbnMpIHtcbiAgICAgICAgbGV0IHZhbHVlID0gSlNPTi5wYXJzZShqc29uKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZnJvbUpzb24odmFsdWUsIG9wdGlvbnMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXcml0ZSB0aGUgbWVzc2FnZSB0byBjYW5vbmljYWwgSlNPTiB2YWx1ZS5cbiAgICAgKi9cbiAgICB0b0pzb24obWVzc2FnZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbEpzb25Xcml0ZShtZXNzYWdlLCBqc29uX2Zvcm1hdF9jb250cmFjdF8xLmpzb25Xcml0ZU9wdGlvbnMob3B0aW9ucykpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IHRoZSBtZXNzYWdlIHRvIGNhbm9uaWNhbCBKU09OIHN0cmluZy5cbiAgICAgKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gYEpTT04uc3RyaW5naWZ5KFQudG9Kc29uKHQpKWBcbiAgICAgKi9cbiAgICB0b0pzb25TdHJpbmcobWVzc2FnZSwgb3B0aW9ucykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGxldCB2YWx1ZSA9IHRoaXMudG9Kc29uKG1lc3NhZ2UsIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUsIG51bGwsIChfYSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5wcmV0dHlTcGFjZXMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IDApO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXcml0ZSB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZm9ybWF0LlxuICAgICAqL1xuICAgIHRvQmluYXJ5KG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgbGV0IG9wdCA9IGJpbmFyeV93cml0ZXJfMS5iaW5hcnlXcml0ZU9wdGlvbnMob3B0aW9ucyk7XG4gICAgICAgIHJldHVybiB0aGlzLmludGVybmFsQmluYXJ5V3JpdGUobWVzc2FnZSwgb3B0LndyaXRlckZhY3RvcnkoKSwgb3B0KS5maW5pc2goKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhpcyBpcyBhbiBpbnRlcm5hbCBtZXRob2QuIElmIHlvdSBqdXN0IHdhbnQgdG8gcmVhZCBhIG1lc3NhZ2UgZnJvbVxuICAgICAqIEpTT04sIHVzZSBgZnJvbUpzb24oKWAgb3IgYGZyb21Kc29uU3RyaW5nKClgLlxuICAgICAqXG4gICAgICogUmVhZHMgSlNPTiB2YWx1ZSBhbmQgbWVyZ2VzIHRoZSBmaWVsZHMgaW50byB0aGUgdGFyZ2V0XG4gICAgICogYWNjb3JkaW5nIHRvIHByb3RvYnVmIHJ1bGVzLiBJZiB0aGUgdGFyZ2V0IGlzIG9taXR0ZWQsXG4gICAgICogYSBuZXcgaW5zdGFuY2UgaXMgY3JlYXRlZCBmaXJzdC5cbiAgICAgKi9cbiAgICBpbnRlcm5hbEpzb25SZWFkKGpzb24sIG9wdGlvbnMsIHRhcmdldCkge1xuICAgICAgICBpZiAoanNvbiAhPT0gbnVsbCAmJiB0eXBlb2YganNvbiA9PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KGpzb24pKSB7XG4gICAgICAgICAgICBsZXQgbWVzc2FnZSA9IHRhcmdldCAhPT0gbnVsbCAmJiB0YXJnZXQgIT09IHZvaWQgMCA/IHRhcmdldCA6IHRoaXMuY3JlYXRlKCk7XG4gICAgICAgICAgICB0aGlzLnJlZkpzb25SZWFkZXIucmVhZChqc29uLCBtZXNzYWdlLCBvcHRpb25zKTtcbiAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIHBhcnNlIG1lc3NhZ2UgJHt0aGlzLnR5cGVOYW1lfSBmcm9tIEpTT04gJHtqc29uX3R5cGluZ3NfMS50eXBlb2ZKc29uVmFsdWUoanNvbil9LmApO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIGFuIGludGVybmFsIG1ldGhvZC4gSWYgeW91IGp1c3Qgd2FudCB0byB3cml0ZSBhIG1lc3NhZ2VcbiAgICAgKiB0byBKU09OLCB1c2UgYHRvSnNvbigpYCBvciBgdG9Kc29uU3RyaW5nKCkuXG4gICAgICpcbiAgICAgKiBXcml0ZXMgSlNPTiB2YWx1ZSBhbmQgcmV0dXJucyBpdC5cbiAgICAgKi9cbiAgICBpbnRlcm5hbEpzb25Xcml0ZShtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZkpzb25Xcml0ZXIud3JpdGUobWVzc2FnZSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgYW4gaW50ZXJuYWwgbWV0aG9kLiBJZiB5b3UganVzdCB3YW50IHRvIHdyaXRlIGEgbWVzc2FnZVxuICAgICAqIGluIGJpbmFyeSBmb3JtYXQsIHVzZSBgdG9CaW5hcnkoKWAuXG4gICAgICpcbiAgICAgKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIGluIGJpbmFyeSBmb3JtYXQgYW5kIGFwcGVuZHMgaXQgdG8gdGhlIGdpdmVuXG4gICAgICogd3JpdGVyLiBSZXR1cm5zIHBhc3NlZCB3cml0ZXIuXG4gICAgICovXG4gICAgaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLCB3cml0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5yZWZCaW5Xcml0ZXIud3JpdGUobWVzc2FnZSwgd3JpdGVyLCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhpcyBpcyBhbiBpbnRlcm5hbCBtZXRob2QuIElmIHlvdSBqdXN0IHdhbnQgdG8gcmVhZCBhIG1lc3NhZ2UgZnJvbVxuICAgICAqIGJpbmFyeSBkYXRhLCB1c2UgYGZyb21CaW5hcnkoKWAuXG4gICAgICpcbiAgICAgKiBSZWFkcyBkYXRhIGZyb20gYmluYXJ5IGZvcm1hdCBhbmQgbWVyZ2VzIHRoZSBmaWVsZHMgaW50b1xuICAgICAqIHRoZSB0YXJnZXQgYWNjb3JkaW5nIHRvIHByb3RvYnVmIHJ1bGVzLiBJZiB0aGUgdGFyZ2V0IGlzXG4gICAgICogb21pdHRlZCwgYSBuZXcgaW5zdGFuY2UgaXMgY3JlYXRlZCBmaXJzdC5cbiAgICAgKi9cbiAgICBpbnRlcm5hbEJpbmFyeVJlYWQocmVhZGVyLCBsZW5ndGgsIG9wdGlvbnMsIHRhcmdldCkge1xuICAgICAgICBsZXQgbWVzc2FnZSA9IHRhcmdldCAhPT0gbnVsbCAmJiB0YXJnZXQgIT09IHZvaWQgMCA/IHRhcmdldCA6IHRoaXMuY3JlYXRlKCk7XG4gICAgICAgIHRoaXMucmVmQmluUmVhZGVyLnJlYWQocmVhZGVyLCBtZXNzYWdlLCBvcHRpb25zLCBsZW5ndGgpO1xuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG59XG5leHBvcnRzLk1lc3NhZ2VUeXBlID0gTWVzc2FnZVR5cGU7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jb250YWluc01lc3NhZ2VUeXBlID0gdm9pZCAwO1xuY29uc3QgbWVzc2FnZV90eXBlX2NvbnRyYWN0XzEgPSByZXF1aXJlKFwiLi9tZXNzYWdlLXR5cGUtY29udHJhY3RcIik7XG4vKipcbiAqIENoZWNrIGlmIHRoZSBwcm92aWRlZCBvYmplY3QgaXMgYSBwcm90byBtZXNzYWdlLlxuICpcbiAqIE5vdGUgdGhhdCB0aGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBmZWF0dXJlIC0gaXQgaXMgaGVyZSB0byBzdGF5LCBidXRcbiAqIGltcGxlbWVudGF0aW9uIGRldGFpbHMgbWF5IGNoYW5nZSB3aXRob3V0IG5vdGljZS5cbiAqL1xuZnVuY3Rpb24gY29udGFpbnNNZXNzYWdlVHlwZShtc2cpIHtcbiAgICByZXR1cm4gbXNnW21lc3NhZ2VfdHlwZV9jb250cmFjdF8xLk1FU1NBR0VfVFlQRV0gIT0gbnVsbDtcbn1cbmV4cG9ydHMuY29udGFpbnNNZXNzYWdlVHlwZSA9IGNvbnRhaW5zTWVzc2FnZVR5cGU7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5saXN0RW51bU51bWJlcnMgPSBleHBvcnRzLmxpc3RFbnVtTmFtZXMgPSBleHBvcnRzLmxpc3RFbnVtVmFsdWVzID0gZXhwb3J0cy5pc0VudW1PYmplY3QgPSB2b2lkIDA7XG4vKipcbiAqIElzIHRoaXMgYSBsb29rdXAgb2JqZWN0IGdlbmVyYXRlZCBieSBUeXBlc2NyaXB0LCBmb3IgYSBUeXBlc2NyaXB0IGVudW1cbiAqIGdlbmVyYXRlZCBieSBwcm90b2J1Zi10cz9cbiAqXG4gKiAtIE5vIGBjb25zdCBlbnVtYCAoZW51bSBtdXN0IG5vdCBiZSBpbmxpbmVkLCB3ZSBuZWVkIHJldmVyc2UgbWFwcGluZykuXG4gKiAtIE5vIHN0cmluZyBlbnVtICh3ZSBuZWVkIGludDMyIGZvciBwcm90b2J1ZikuXG4gKiAtIE11c3QgaGF2ZSBhIHZhbHVlIGZvciAwIChvdGhlcndpc2UsIHdlIHdvdWxkIG5lZWQgdG8gc3VwcG9ydCBjdXN0b20gZGVmYXVsdCB2YWx1ZXMpLlxuICovXG5mdW5jdGlvbiBpc0VudW1PYmplY3QoYXJnKSB7XG4gICAgaWYgKHR5cGVvZiBhcmcgIT0gJ29iamVjdCcgfHwgYXJnID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCFhcmcuaGFzT3duUHJvcGVydHkoMCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBmb3IgKGxldCBrIG9mIE9iamVjdC5rZXlzKGFyZykpIHtcbiAgICAgICAgbGV0IG51bSA9IHBhcnNlSW50KGspO1xuICAgICAgICBpZiAoIU51bWJlci5pc05hTihudW0pKSB7XG4gICAgICAgICAgICAvLyBpcyB0aGVyZSBhIG5hbWUgZm9yIHRoZSBudW1iZXI/XG4gICAgICAgICAgICBsZXQgbmFtID0gYXJnW251bV07XG4gICAgICAgICAgICBpZiAobmFtID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgLy8gZG9lcyB0aGUgbmFtZSByZXNvbHZlIGJhY2sgdG8gdGhlIG51bWJlcj9cbiAgICAgICAgICAgIGlmIChhcmdbbmFtXSAhPT0gbnVtKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIGlzIHRoZXJlIGEgbnVtYmVyIGZvciB0aGUgbmFtZT9cbiAgICAgICAgICAgIGxldCBudW0gPSBhcmdba107XG4gICAgICAgICAgICBpZiAobnVtID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgLy8gaXMgaXQgYSBzdHJpbmcgZW51bT9cbiAgICAgICAgICAgIGlmICh0eXBlb2YgbnVtICE9PSAnbnVtYmVyJylcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAvLyBkbyB3ZSBrbm93IHRoZSBudW1iZXI/XG4gICAgICAgICAgICBpZiAoYXJnW251bV0gPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5leHBvcnRzLmlzRW51bU9iamVjdCA9IGlzRW51bU9iamVjdDtcbi8qKlxuICogTGlzdHMgYWxsIHZhbHVlcyBvZiBhIFR5cGVzY3JpcHQgZW51bSwgYXMgYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIGEgXCJuYW1lXCJcbiAqIHByb3BlcnR5IGFuZCBhIFwibnVtYmVyXCIgcHJvcGVydHkuXG4gKlxuICogTm90ZSB0aGF0IGl0IGlzIHBvc3NpYmxlIHRoYXQgYSBudW1iZXIgYXBwZWFycyBtb3JlIHRoYW4gb25jZSwgYmVjYXVzZSBpdCBpc1xuICogcG9zc2libGUgdG8gaGF2ZSBhbGlhc2VzIGluIGFuIGVudW0uXG4gKlxuICogVGhyb3dzIGlmIHRoZSBlbnVtIGRvZXMgbm90IGFkaGVyZSB0byB0aGUgcnVsZXMgb2YgZW51bXMgZ2VuZXJhdGVkIGJ5XG4gKiBwcm90b2J1Zi10cy4gU2VlIGBpc0VudW1PYmplY3QoKWAuXG4gKi9cbmZ1bmN0aW9uIGxpc3RFbnVtVmFsdWVzKGVudW1PYmplY3QpIHtcbiAgICBpZiAoIWlzRW51bU9iamVjdChlbnVtT2JqZWN0KSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibm90IGEgdHlwZXNjcmlwdCBlbnVtIG9iamVjdFwiKTtcbiAgICBsZXQgdmFsdWVzID0gW107XG4gICAgZm9yIChsZXQgW25hbWUsIG51bWJlcl0gb2YgT2JqZWN0LmVudHJpZXMoZW51bU9iamVjdCkpXG4gICAgICAgIGlmICh0eXBlb2YgbnVtYmVyID09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICB2YWx1ZXMucHVzaCh7IG5hbWUsIG51bWJlciB9KTtcbiAgICByZXR1cm4gdmFsdWVzO1xufVxuZXhwb3J0cy5saXN0RW51bVZhbHVlcyA9IGxpc3RFbnVtVmFsdWVzO1xuLyoqXG4gKiBMaXN0cyB0aGUgbmFtZXMgb2YgYSBUeXBlc2NyaXB0IGVudW0uXG4gKlxuICogVGhyb3dzIGlmIHRoZSBlbnVtIGRvZXMgbm90IGFkaGVyZSB0byB0aGUgcnVsZXMgb2YgZW51bXMgZ2VuZXJhdGVkIGJ5XG4gKiBwcm90b2J1Zi10cy4gU2VlIGBpc0VudW1PYmplY3QoKWAuXG4gKi9cbmZ1bmN0aW9uIGxpc3RFbnVtTmFtZXMoZW51bU9iamVjdCkge1xuICAgIHJldHVybiBsaXN0RW51bVZhbHVlcyhlbnVtT2JqZWN0KS5tYXAodmFsID0+IHZhbC5uYW1lKTtcbn1cbmV4cG9ydHMubGlzdEVudW1OYW1lcyA9IGxpc3RFbnVtTmFtZXM7XG4vKipcbiAqIExpc3RzIHRoZSBudW1iZXJzIG9mIGEgVHlwZXNjcmlwdCBlbnVtLlxuICpcbiAqIFRocm93cyBpZiB0aGUgZW51bSBkb2VzIG5vdCBhZGhlcmUgdG8gdGhlIHJ1bGVzIG9mIGVudW1zIGdlbmVyYXRlZCBieVxuICogcHJvdG9idWYtdHMuIFNlZSBgaXNFbnVtT2JqZWN0KClgLlxuICovXG5mdW5jdGlvbiBsaXN0RW51bU51bWJlcnMoZW51bU9iamVjdCkge1xuICAgIHJldHVybiBsaXN0RW51bVZhbHVlcyhlbnVtT2JqZWN0KVxuICAgICAgICAubWFwKHZhbCA9PiB2YWwubnVtYmVyKVxuICAgICAgICAuZmlsdGVyKChudW0sIGluZGV4LCBhcnIpID0+IGFyci5pbmRleE9mKG51bSkgPT0gaW5kZXgpO1xufVxuZXhwb3J0cy5saXN0RW51bU51bWJlcnMgPSBsaXN0RW51bU51bWJlcnM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gUHVibGljIEFQSSBvZiB0aGUgcHJvdG9idWYtdHMgcnVudGltZS5cbi8vIE5vdGU6IHdlIGRvIG5vdCB1c2UgYGV4cG9ydCAqIGZyb20gLi4uYCB0byBoZWxwIHRyZWUgc2hha2Vycyxcbi8vIHdlYnBhY2sgdmVyYm9zZSBvdXRwdXQgaGludHMgdGhhdCB0aGlzIHNob3VsZCBiZSB1c2VmdWxcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8vIENvbnZlbmllbmNlIEpTT04gdHlwaW5ncyBhbmQgY29ycmVzcG9uZGluZyB0eXBlIGd1YXJkc1xudmFyIGpzb25fdHlwaW5nc18xID0gcmVxdWlyZShcIi4vanNvbi10eXBpbmdzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidHlwZW9mSnNvblZhbHVlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBqc29uX3R5cGluZ3NfMS50eXBlb2ZKc29uVmFsdWU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0pzb25PYmplY3RcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGpzb25fdHlwaW5nc18xLmlzSnNvbk9iamVjdDsgfSB9KTtcbi8vIEJhc2UgNjQgZW5jb2RpbmdcbnZhciBiYXNlNjRfMSA9IHJlcXVpcmUoXCIuL2Jhc2U2NFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImJhc2U2NGRlY29kZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYmFzZTY0XzEuYmFzZTY0ZGVjb2RlOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYmFzZTY0ZW5jb2RlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBiYXNlNjRfMS5iYXNlNjRlbmNvZGU7IH0gfSk7XG4vLyBVVEY4IGVuY29kaW5nXG52YXIgcHJvdG9idWZqc191dGY4XzEgPSByZXF1aXJlKFwiLi9wcm90b2J1ZmpzLXV0ZjhcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ1dGY4cmVhZFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcHJvdG9idWZqc191dGY4XzEudXRmOHJlYWQ7IH0gfSk7XG4vLyBCaW5hcnkgZm9ybWF0IGNvbnRyYWN0cywgb3B0aW9ucyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZywgZm9yIGV4YW1wbGVcbnZhciBiaW5hcnlfZm9ybWF0X2NvbnRyYWN0XzEgPSByZXF1aXJlKFwiLi9iaW5hcnktZm9ybWF0LWNvbnRyYWN0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiV2lyZVR5cGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMS5XaXJlVHlwZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm1lcmdlQmluYXJ5T3B0aW9uc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYmluYXJ5X2Zvcm1hdF9jb250cmFjdF8xLm1lcmdlQmluYXJ5T3B0aW9uczsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlVua25vd25GaWVsZEhhbmRsZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMS5Vbmtub3duRmllbGRIYW5kbGVyOyB9IH0pO1xuLy8gU3RhbmRhcmQgSUJpbmFyeVJlYWRlciBpbXBsZW1lbnRhdGlvblxudmFyIGJpbmFyeV9yZWFkZXJfMSA9IHJlcXVpcmUoXCIuL2JpbmFyeS1yZWFkZXJcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJCaW5hcnlSZWFkZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGJpbmFyeV9yZWFkZXJfMS5CaW5hcnlSZWFkZXI7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJiaW5hcnlSZWFkT3B0aW9uc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYmluYXJ5X3JlYWRlcl8xLmJpbmFyeVJlYWRPcHRpb25zOyB9IH0pO1xuLy8gU3RhbmRhcmQgSUJpbmFyeVdyaXRlciBpbXBsZW1lbnRhdGlvblxudmFyIGJpbmFyeV93cml0ZXJfMSA9IHJlcXVpcmUoXCIuL2JpbmFyeS13cml0ZXJcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJCaW5hcnlXcml0ZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGJpbmFyeV93cml0ZXJfMS5CaW5hcnlXcml0ZXI7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJiaW5hcnlXcml0ZU9wdGlvbnNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGJpbmFyeV93cml0ZXJfMS5iaW5hcnlXcml0ZU9wdGlvbnM7IH0gfSk7XG4vLyBJbnQ2NCBhbmQgVUludDY0IGltcGxlbWVudGF0aW9ucyByZXF1aXJlZCBmb3IgdGhlIGJpbmFyeSBmb3JtYXRcbnZhciBwYl9sb25nXzEgPSByZXF1aXJlKFwiLi9wYi1sb25nXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUGJMb25nXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwYl9sb25nXzEuUGJMb25nOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUGJVTG9uZ1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcGJfbG9uZ18xLlBiVUxvbmc7IH0gfSk7XG4vLyBKU09OIGZvcm1hdCBjb250cmFjdHMsIG9wdGlvbnMgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcsIGZvciBleGFtcGxlXG52YXIganNvbl9mb3JtYXRfY29udHJhY3RfMSA9IHJlcXVpcmUoXCIuL2pzb24tZm9ybWF0LWNvbnRyYWN0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwianNvblJlYWRPcHRpb25zXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBqc29uX2Zvcm1hdF9jb250cmFjdF8xLmpzb25SZWFkT3B0aW9uczsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImpzb25Xcml0ZU9wdGlvbnNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGpzb25fZm9ybWF0X2NvbnRyYWN0XzEuanNvbldyaXRlT3B0aW9uczsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm1lcmdlSnNvbk9wdGlvbnNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGpzb25fZm9ybWF0X2NvbnRyYWN0XzEubWVyZ2VKc29uT3B0aW9uczsgfSB9KTtcbi8vIE1lc3NhZ2UgdHlwZSBjb250cmFjdFxudmFyIG1lc3NhZ2VfdHlwZV9jb250cmFjdF8xID0gcmVxdWlyZShcIi4vbWVzc2FnZS10eXBlLWNvbnRyYWN0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTUVTU0FHRV9UWVBFXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBtZXNzYWdlX3R5cGVfY29udHJhY3RfMS5NRVNTQUdFX1RZUEU7IH0gfSk7XG4vLyBNZXNzYWdlIHR5cGUgaW1wbGVtZW50YXRpb24gdmlhIHJlZmxlY3Rpb25cbnZhciBtZXNzYWdlX3R5cGVfMSA9IHJlcXVpcmUoXCIuL21lc3NhZ2UtdHlwZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk1lc3NhZ2VUeXBlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBtZXNzYWdlX3R5cGVfMS5NZXNzYWdlVHlwZTsgfSB9KTtcbi8vIFJlZmxlY3Rpb24gaW5mbywgZ2VuZXJhdGVkIGJ5IHRoZSBwbHVnaW4sIGV4cG9zZWQgdG8gdGhlIHVzZXIsIHVzZWQgYnkgcmVmbGVjdGlvbiBvcHNcbnZhciByZWZsZWN0aW9uX2luZm9fMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24taW5mb1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlNjYWxhclR5cGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJMb25nVHlwZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVmbGVjdGlvbl9pbmZvXzEuTG9uZ1R5cGU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJSZXBlYXRUeXBlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZWZsZWN0aW9uX2luZm9fMS5SZXBlYXRUeXBlOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibm9ybWFsaXplRmllbGRJbmZvXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZWZsZWN0aW9uX2luZm9fMS5ub3JtYWxpemVGaWVsZEluZm87IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyZWFkRmllbGRPcHRpb25zXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZWZsZWN0aW9uX2luZm9fMS5yZWFkRmllbGRPcHRpb25zOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmVhZEZpZWxkT3B0aW9uXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZWZsZWN0aW9uX2luZm9fMS5yZWFkRmllbGRPcHRpb247IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyZWFkTWVzc2FnZU9wdGlvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVmbGVjdGlvbl9pbmZvXzEucmVhZE1lc3NhZ2VPcHRpb247IH0gfSk7XG4vLyBNZXNzYWdlIG9wZXJhdGlvbnMgdmlhIHJlZmxlY3Rpb25cbnZhciByZWZsZWN0aW9uX3R5cGVfY2hlY2tfMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24tdHlwZS1jaGVja1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlJlZmxlY3Rpb25UeXBlQ2hlY2tcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlZmxlY3Rpb25fdHlwZV9jaGVja18xLlJlZmxlY3Rpb25UeXBlQ2hlY2s7IH0gfSk7XG52YXIgcmVmbGVjdGlvbl9jcmVhdGVfMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24tY3JlYXRlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmVmbGVjdGlvbkNyZWF0ZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVmbGVjdGlvbl9jcmVhdGVfMS5yZWZsZWN0aW9uQ3JlYXRlOyB9IH0pO1xudmFyIHJlZmxlY3Rpb25fc2NhbGFyX2RlZmF1bHRfMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24tc2NhbGFyLWRlZmF1bHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyZWZsZWN0aW9uU2NhbGFyRGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVmbGVjdGlvbl9zY2FsYXJfZGVmYXVsdF8xLnJlZmxlY3Rpb25TY2FsYXJEZWZhdWx0OyB9IH0pO1xudmFyIHJlZmxlY3Rpb25fbWVyZ2VfcGFydGlhbF8xID0gcmVxdWlyZShcIi4vcmVmbGVjdGlvbi1tZXJnZS1wYXJ0aWFsXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmVmbGVjdGlvbk1lcmdlUGFydGlhbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVmbGVjdGlvbl9tZXJnZV9wYXJ0aWFsXzEucmVmbGVjdGlvbk1lcmdlUGFydGlhbDsgfSB9KTtcbnZhciByZWZsZWN0aW9uX2VxdWFsc18xID0gcmVxdWlyZShcIi4vcmVmbGVjdGlvbi1lcXVhbHNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyZWZsZWN0aW9uRXF1YWxzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZWZsZWN0aW9uX2VxdWFsc18xLnJlZmxlY3Rpb25FcXVhbHM7IH0gfSk7XG52YXIgcmVmbGVjdGlvbl9iaW5hcnlfcmVhZGVyXzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLWJpbmFyeS1yZWFkZXJcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJSZWZsZWN0aW9uQmluYXJ5UmVhZGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZWZsZWN0aW9uX2JpbmFyeV9yZWFkZXJfMS5SZWZsZWN0aW9uQmluYXJ5UmVhZGVyOyB9IH0pO1xudmFyIHJlZmxlY3Rpb25fYmluYXJ5X3dyaXRlcl8xID0gcmVxdWlyZShcIi4vcmVmbGVjdGlvbi1iaW5hcnktd3JpdGVyXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUmVmbGVjdGlvbkJpbmFyeVdyaXRlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVmbGVjdGlvbl9iaW5hcnlfd3JpdGVyXzEuUmVmbGVjdGlvbkJpbmFyeVdyaXRlcjsgfSB9KTtcbnZhciByZWZsZWN0aW9uX2pzb25fcmVhZGVyXzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLWpzb24tcmVhZGVyXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUmVmbGVjdGlvbkpzb25SZWFkZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlZmxlY3Rpb25fanNvbl9yZWFkZXJfMS5SZWZsZWN0aW9uSnNvblJlYWRlcjsgfSB9KTtcbnZhciByZWZsZWN0aW9uX2pzb25fd3JpdGVyXzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLWpzb24td3JpdGVyXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUmVmbGVjdGlvbkpzb25Xcml0ZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlZmxlY3Rpb25fanNvbl93cml0ZXJfMS5SZWZsZWN0aW9uSnNvbldyaXRlcjsgfSB9KTtcbnZhciByZWZsZWN0aW9uX2NvbnRhaW5zX21lc3NhZ2VfdHlwZV8xID0gcmVxdWlyZShcIi4vcmVmbGVjdGlvbi1jb250YWlucy1tZXNzYWdlLXR5cGVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb250YWluc01lc3NhZ2VUeXBlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZWZsZWN0aW9uX2NvbnRhaW5zX21lc3NhZ2VfdHlwZV8xLmNvbnRhaW5zTWVzc2FnZVR5cGU7IH0gfSk7XG4vLyBPbmVvZiBoZWxwZXJzXG52YXIgb25lb2ZfMSA9IHJlcXVpcmUoXCIuL29uZW9mXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNPbmVvZkdyb3VwXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBvbmVvZl8xLmlzT25lb2ZHcm91cDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNldE9uZW9mVmFsdWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9uZW9mXzEuc2V0T25lb2ZWYWx1ZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImdldE9uZW9mVmFsdWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9uZW9mXzEuZ2V0T25lb2ZWYWx1ZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNsZWFyT25lb2ZWYWx1ZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gb25lb2ZfMS5jbGVhck9uZW9mVmFsdWU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnZXRTZWxlY3RlZE9uZW9mVmFsdWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9uZW9mXzEuZ2V0U2VsZWN0ZWRPbmVvZlZhbHVlOyB9IH0pO1xuLy8gRW51bSBvYmplY3QgdHlwZSBndWFyZCBhbmQgcmVmbGVjdGlvbiB1dGlsLCBtYXkgYmUgaW50ZXJlc3RpbmcgdG8gdGhlIHVzZXIuXG52YXIgZW51bV9vYmplY3RfMSA9IHJlcXVpcmUoXCIuL2VudW0tb2JqZWN0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibGlzdEVudW1WYWx1ZXNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGVudW1fb2JqZWN0XzEubGlzdEVudW1WYWx1ZXM7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJsaXN0RW51bU5hbWVzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBlbnVtX29iamVjdF8xLmxpc3RFbnVtTmFtZXM7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJsaXN0RW51bU51bWJlcnNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGVudW1fb2JqZWN0XzEubGlzdEVudW1OdW1iZXJzOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNFbnVtT2JqZWN0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBlbnVtX29iamVjdF8xLmlzRW51bU9iamVjdDsgfSB9KTtcbi8vIGxvd2VyQ2FtZWxDYXNlKCkgaXMgZXhwb3J0ZWQgZm9yIHBsdWdpbiwgcnBjLXJ1bnRpbWUgYW5kIG90aGVyIHJwYyBwYWNrYWdlc1xudmFyIGxvd2VyX2NhbWVsX2Nhc2VfMSA9IHJlcXVpcmUoXCIuL2xvd2VyLWNhbWVsLWNhc2VcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJsb3dlckNhbWVsQ2FzZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbG93ZXJfY2FtZWxfY2FzZV8xLmxvd2VyQ2FtZWxDYXNlOyB9IH0pO1xuLy8gYXNzZXJ0aW9uIGZ1bmN0aW9ucyBhcmUgZXhwb3J0ZWQgZm9yIHBsdWdpbiwgbWF5IGFsc28gYmUgdXNlZnVsIHRvIHVzZXJcbnZhciBhc3NlcnRfMSA9IHJlcXVpcmUoXCIuL2Fzc2VydFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImFzc2VydFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYXNzZXJ0XzEuYXNzZXJ0OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYXNzZXJ0TmV2ZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFzc2VydF8xLmFzc2VydE5ldmVyOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYXNzZXJ0SW50MzJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFzc2VydF8xLmFzc2VydEludDMyOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYXNzZXJ0VUludDMyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBhc3NlcnRfMS5hc3NlcnRVSW50MzI7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhc3NlcnRGbG9hdDMyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBhc3NlcnRfMS5hc3NlcnRGbG9hdDMyOyB9IH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVGltZXN0YW1wID0gdm9pZCAwO1xuY29uc3QgcnVudGltZV8xID0gcmVxdWlyZShcIkBwcm90b2J1Zi10cy9ydW50aW1lXCIpO1xuY29uc3QgcnVudGltZV8yID0gcmVxdWlyZShcIkBwcm90b2J1Zi10cy9ydW50aW1lXCIpO1xuY29uc3QgcnVudGltZV8zID0gcmVxdWlyZShcIkBwcm90b2J1Zi10cy9ydW50aW1lXCIpO1xuY29uc3QgcnVudGltZV80ID0gcmVxdWlyZShcIkBwcm90b2J1Zi10cy9ydW50aW1lXCIpO1xuY29uc3QgcnVudGltZV81ID0gcmVxdWlyZShcIkBwcm90b2J1Zi10cy9ydW50aW1lXCIpO1xuY29uc3QgcnVudGltZV82ID0gcmVxdWlyZShcIkBwcm90b2J1Zi10cy9ydW50aW1lXCIpO1xuY29uc3QgcnVudGltZV83ID0gcmVxdWlyZShcIkBwcm90b2J1Zi10cy9ydW50aW1lXCIpO1xuLy8gQGdlbmVyYXRlZCBtZXNzYWdlIHR5cGUgd2l0aCByZWZsZWN0aW9uIGluZm9ybWF0aW9uLCBtYXkgcHJvdmlkZSBzcGVlZCBvcHRpbWl6ZWQgbWV0aG9kc1xuY2xhc3MgVGltZXN0YW1wJFR5cGUgZXh0ZW5kcyBydW50aW1lXzcuTWVzc2FnZVR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcImdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBcIiwgW1xuICAgICAgICAgICAgeyBubzogMSwgbmFtZTogXCJzZWNvbmRzXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDMgLypTY2FsYXJUeXBlLklOVDY0Ki8gfSxcbiAgICAgICAgICAgIHsgbm86IDIsIG5hbWU6IFwibmFub3NcIiwga2luZDogXCJzY2FsYXJcIiwgVDogNSAvKlNjYWxhclR5cGUuSU5UMzIqLyB9XG4gICAgICAgIF0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IGBUaW1lc3RhbXBgIGZvciB0aGUgY3VycmVudCB0aW1lLlxuICAgICAqL1xuICAgIG5vdygpIHtcbiAgICAgICAgY29uc3QgbXNnID0gdGhpcy5jcmVhdGUoKTtcbiAgICAgICAgY29uc3QgbXMgPSBEYXRlLm5vdygpO1xuICAgICAgICBtc2cuc2Vjb25kcyA9IHJ1bnRpbWVfNi5QYkxvbmcuZnJvbShNYXRoLmZsb29yKG1zIC8gMTAwMCkpLnRvU3RyaW5nKCk7XG4gICAgICAgIG1zZy5uYW5vcyA9IChtcyAlIDEwMDApICogMTAwMDAwMDtcbiAgICAgICAgcmV0dXJuIG1zZztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYSBgVGltZXN0YW1wYCB0byBhIEphdmFTY3JpcHQgRGF0ZS5cbiAgICAgKi9cbiAgICB0b0RhdGUobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUocnVudGltZV82LlBiTG9uZy5mcm9tKG1lc3NhZ2Uuc2Vjb25kcykudG9OdW1iZXIoKSAqIDEwMDAgKyBNYXRoLmNlaWwobWVzc2FnZS5uYW5vcyAvIDEwMDAwMDApKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYSBKYXZhU2NyaXB0IERhdGUgdG8gYSBgVGltZXN0YW1wYC5cbiAgICAgKi9cbiAgICBmcm9tRGF0ZShkYXRlKSB7XG4gICAgICAgIGNvbnN0IG1zZyA9IHRoaXMuY3JlYXRlKCk7XG4gICAgICAgIGNvbnN0IG1zID0gZGF0ZS5nZXRUaW1lKCk7XG4gICAgICAgIG1zZy5zZWNvbmRzID0gcnVudGltZV82LlBiTG9uZy5mcm9tKE1hdGguZmxvb3IobXMgLyAxMDAwKSkudG9TdHJpbmcoKTtcbiAgICAgICAgbXNnLm5hbm9zID0gKG1zICUgMTAwMCkgKiAxMDAwMDAwO1xuICAgICAgICByZXR1cm4gbXNnO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbiBKU09OIGZvcm1hdCwgdGhlIGBUaW1lc3RhbXBgIHR5cGUgaXMgZW5jb2RlZCBhcyBhIHN0cmluZ1xuICAgICAqIGluIHRoZSBSRkMgMzMzOSBmb3JtYXQuXG4gICAgICovXG4gICAgaW50ZXJuYWxKc29uV3JpdGUobWVzc2FnZSwgb3B0aW9ucykge1xuICAgICAgICBsZXQgbXMgPSBydW50aW1lXzYuUGJMb25nLmZyb20obWVzc2FnZS5zZWNvbmRzKS50b051bWJlcigpICogMTAwMDtcbiAgICAgICAgaWYgKG1zIDwgRGF0ZS5wYXJzZShcIjAwMDEtMDEtMDFUMDA6MDA6MDBaXCIpIHx8IG1zID4gRGF0ZS5wYXJzZShcIjk5OTktMTItMzFUMjM6NTk6NTlaXCIpKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIGVuY29kZSBUaW1lc3RhbXAgdG8gSlNPTi4gTXVzdCBiZSBmcm9tIDAwMDEtMDEtMDFUMDA6MDA6MDBaIHRvIDk5OTktMTItMzFUMjM6NTk6NTlaIGluY2x1c2l2ZS5cIik7XG4gICAgICAgIGlmIChtZXNzYWdlLm5hbm9zIDwgMClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBlbmNvZGUgaW52YWxpZCBUaW1lc3RhbXAgdG8gSlNPTi4gTmFub3MgbXVzdCBub3QgYmUgbmVnYXRpdmUuXCIpO1xuICAgICAgICBsZXQgeiA9IFwiWlwiO1xuICAgICAgICBpZiAobWVzc2FnZS5uYW5vcyA+IDApIHtcbiAgICAgICAgICAgIGxldCBuYW5vc1N0ciA9IChtZXNzYWdlLm5hbm9zICsgMTAwMDAwMDAwMCkudG9TdHJpbmcoKS5zdWJzdHJpbmcoMSk7XG4gICAgICAgICAgICBpZiAobmFub3NTdHIuc3Vic3RyaW5nKDMpID09PSBcIjAwMDAwMFwiKVxuICAgICAgICAgICAgICAgIHogPSBcIi5cIiArIG5hbm9zU3RyLnN1YnN0cmluZygwLCAzKSArIFwiWlwiO1xuICAgICAgICAgICAgZWxzZSBpZiAobmFub3NTdHIuc3Vic3RyaW5nKDYpID09PSBcIjAwMFwiKVxuICAgICAgICAgICAgICAgIHogPSBcIi5cIiArIG5hbm9zU3RyLnN1YnN0cmluZygwLCA2KSArIFwiWlwiO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHogPSBcIi5cIiArIG5hbm9zU3RyICsgXCJaXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKG1zKS50b0lTT1N0cmluZygpLnJlcGxhY2UoXCIuMDAwWlwiLCB6KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSW4gSlNPTiBmb3JtYXQsIHRoZSBgVGltZXN0YW1wYCB0eXBlIGlzIGVuY29kZWQgYXMgYSBzdHJpbmdcbiAgICAgKiBpbiB0aGUgUkZDIDMzMzkgZm9ybWF0LlxuICAgICAqL1xuICAgIGludGVybmFsSnNvblJlYWQoanNvbiwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGlmICh0eXBlb2YganNvbiAhPT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBwYXJzZSBUaW1lc3RhbXAgZnJvbSBKU09OIFwiICsgKDAsIHJ1bnRpbWVfNS50eXBlb2ZKc29uVmFsdWUpKGpzb24pICsgXCIuXCIpO1xuICAgICAgICBsZXQgbWF0Y2hlcyA9IGpzb24ubWF0Y2goL14oWzAtOV17NH0pLShbMC05XXsyfSktKFswLTldezJ9KVQoWzAtOV17Mn0pOihbMC05XXsyfSk6KFswLTldezJ9KSg/Olp8XFwuKFswLTldezMsOX0pWnwoWystXVswLTldWzAtOV06WzAtOV1bMC05XSkpJC8pO1xuICAgICAgICBpZiAoIW1hdGNoZXMpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gcGFyc2UgVGltZXN0YW1wIGZyb20gSlNPTi4gSW52YWxpZCBmb3JtYXQuXCIpO1xuICAgICAgICBsZXQgbXMgPSBEYXRlLnBhcnNlKG1hdGNoZXNbMV0gKyBcIi1cIiArIG1hdGNoZXNbMl0gKyBcIi1cIiArIG1hdGNoZXNbM10gKyBcIlRcIiArIG1hdGNoZXNbNF0gKyBcIjpcIiArIG1hdGNoZXNbNV0gKyBcIjpcIiArIG1hdGNoZXNbNl0gKyAobWF0Y2hlc1s4XSA/IG1hdGNoZXNbOF0gOiBcIlpcIikpO1xuICAgICAgICBpZiAoTnVtYmVyLmlzTmFOKG1zKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBwYXJzZSBUaW1lc3RhbXAgZnJvbSBKU09OLiBJbnZhbGlkIHZhbHVlLlwiKTtcbiAgICAgICAgaWYgKG1zIDwgRGF0ZS5wYXJzZShcIjAwMDEtMDEtMDFUMDA6MDA6MDBaXCIpIHx8IG1zID4gRGF0ZS5wYXJzZShcIjk5OTktMTItMzFUMjM6NTk6NTlaXCIpKVxuICAgICAgICAgICAgdGhyb3cgbmV3IGdsb2JhbFRoaXMuRXJyb3IoXCJVbmFibGUgdG8gcGFyc2UgVGltZXN0YW1wIGZyb20gSlNPTi4gTXVzdCBiZSBmcm9tIDAwMDEtMDEtMDFUMDA6MDA6MDBaIHRvIDk5OTktMTItMzFUMjM6NTk6NTlaIGluY2x1c2l2ZS5cIik7XG4gICAgICAgIGlmICghdGFyZ2V0KVxuICAgICAgICAgICAgdGFyZ2V0ID0gdGhpcy5jcmVhdGUoKTtcbiAgICAgICAgdGFyZ2V0LnNlY29uZHMgPSBydW50aW1lXzYuUGJMb25nLmZyb20obXMgLyAxMDAwKS50b1N0cmluZygpO1xuICAgICAgICB0YXJnZXQubmFub3MgPSAwO1xuICAgICAgICBpZiAobWF0Y2hlc1s3XSlcbiAgICAgICAgICAgIHRhcmdldC5uYW5vcyA9IChwYXJzZUludChcIjFcIiArIG1hdGNoZXNbN10gKyBcIjBcIi5yZXBlYXQoOSAtIG1hdGNoZXNbN10ubGVuZ3RoKSkgLSAxMDAwMDAwMDAwKTtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG4gICAgY3JlYXRlKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7IHNlY29uZHM6IFwiMFwiLCBuYW5vczogMCB9O1xuICAgICAgICBnbG9iYWxUaGlzLk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZXNzYWdlLCBydW50aW1lXzQuTUVTU0FHRV9UWVBFLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdGhpcyB9KTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAoMCwgcnVudGltZV8zLnJlZmxlY3Rpb25NZXJnZVBhcnRpYWwpKHRoaXMsIG1lc3NhZ2UsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5UmVhZChyZWFkZXIsIGxlbmd0aCwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGxldCBtZXNzYWdlID0gdGFyZ2V0ICE9PSBudWxsICYmIHRhcmdldCAhPT0gdm9pZCAwID8gdGFyZ2V0IDogdGhpcy5jcmVhdGUoKSwgZW5kID0gcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgIGxldCBbZmllbGRObywgd2lyZVR5cGVdID0gcmVhZGVyLnRhZygpO1xuICAgICAgICAgICAgc3dpdGNoIChmaWVsZE5vKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBpbnQ2NCBzZWNvbmRzICovIDE6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2Vjb25kcyA9IHJlYWRlci5pbnQ2NCgpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgLyogaW50MzIgbmFub3MgKi8gMjpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5uYW5vcyA9IHJlYWRlci5pbnQzMigpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBsZXQgdSA9IG9wdGlvbnMucmVhZFVua25vd25GaWVsZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgPT09IFwidGhyb3dcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBnbG9iYWxUaGlzLkVycm9yKGBVbmtub3duIGZpZWxkICR7ZmllbGROb30gKHdpcmUgdHlwZSAke3dpcmVUeXBlfSkgZm9yICR7dGhpcy50eXBlTmFtZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGQgPSByZWFkZXIuc2tpcCh3aXJlVHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICh1ID09PSB0cnVlID8gcnVudGltZV8yLlVua25vd25GaWVsZEhhbmRsZXIub25SZWFkIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgZmllbGRObywgd2lyZVR5cGUsIGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVdyaXRlKG1lc3NhZ2UsIHdyaXRlciwgb3B0aW9ucykge1xuICAgICAgICAvKiBpbnQ2NCBzZWNvbmRzID0gMTsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2Uuc2Vjb25kcyAhPT0gXCIwXCIpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDEsIHJ1bnRpbWVfMS5XaXJlVHlwZS5WYXJpbnQpLmludDY0KG1lc3NhZ2Uuc2Vjb25kcyk7XG4gICAgICAgIC8qIGludDMyIG5hbm9zID0gMjsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2UubmFub3MgIT09IDApXG4gICAgICAgICAgICB3cml0ZXIudGFnKDIsIHJ1bnRpbWVfMS5XaXJlVHlwZS5WYXJpbnQpLmludDMyKG1lc3NhZ2UubmFub3MpO1xuICAgICAgICBsZXQgdSA9IG9wdGlvbnMud3JpdGVVbmtub3duRmllbGRzO1xuICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAodSA9PSB0cnVlID8gcnVudGltZV8yLlVua25vd25GaWVsZEhhbmRsZXIub25Xcml0ZSA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIHdyaXRlcik7XG4gICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgfVxufVxuLyoqXG4gKiBAZ2VuZXJhdGVkIE1lc3NhZ2VUeXBlIGZvciBwcm90b2J1ZiBtZXNzYWdlIGdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBcbiAqL1xuZXhwb3J0cy5UaW1lc3RhbXAgPSBuZXcgVGltZXN0YW1wJFR5cGUoKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRpbWVzdGFtcC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5CeXRlc1ZhbHVlID0gZXhwb3J0cy5TdHJpbmdWYWx1ZSA9IGV4cG9ydHMuQm9vbFZhbHVlID0gZXhwb3J0cy5VSW50MzJWYWx1ZSA9IGV4cG9ydHMuSW50MzJWYWx1ZSA9IGV4cG9ydHMuVUludDY0VmFsdWUgPSBleHBvcnRzLkludDY0VmFsdWUgPSBleHBvcnRzLkZsb2F0VmFsdWUgPSBleHBvcnRzLkRvdWJsZVZhbHVlID0gdm9pZCAwO1xuLy8gQGdlbmVyYXRlZCBieSBwcm90b2J1Zi10cyAyLjkuMSB3aXRoIHBhcmFtZXRlciBsb25nX3R5cGVfc3RyaW5nLGNsaWVudF9ub25lLGdlbmVyYXRlX2RlcGVuZGVuY2llc1xuLy8gQGdlbmVyYXRlZCBmcm9tIHByb3RvYnVmIGZpbGUgXCJnb29nbGUvcHJvdG9idWYvd3JhcHBlcnMucHJvdG9cIiAocGFja2FnZSBcImdvb2dsZS5wcm90b2J1ZlwiLCBzeW50YXggcHJvdG8zKVxuLy8gdHNsaW50OmRpc2FibGVcbi8vXG4vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXRcbi8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9cbi8vXG4vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbi8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmVcbi8vIG1ldDpcbi8vXG4vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZVxuLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lclxuLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZVxuLy8gZGlzdHJpYnV0aW9uLlxuLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0c1xuLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb21cbi8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG4vL1xuLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SU1xuLy8gXCJBUyBJU1wiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVFxuLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SXG4vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVFxuLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsXG4vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UXG4vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSxcbi8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWVxuLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFXG4vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuLy9cbi8vXG4vLyBXcmFwcGVycyBmb3IgcHJpbWl0aXZlIChub24tbWVzc2FnZSkgdHlwZXMuIFRoZXNlIHR5cGVzIGFyZSB1c2VmdWxcbi8vIGZvciBlbWJlZGRpbmcgcHJpbWl0aXZlcyBpbiB0aGUgYGdvb2dsZS5wcm90b2J1Zi5BbnlgIHR5cGUgYW5kIGZvciBwbGFjZXNcbi8vIHdoZXJlIHdlIG5lZWQgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGUgYWJzZW5jZSBvZiBhIHByaW1pdGl2ZVxuLy8gdHlwZWQgZmllbGQgYW5kIGl0cyBkZWZhdWx0IHZhbHVlLlxuLy9cbmNvbnN0IHJ1bnRpbWVfMSA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbmNvbnN0IHJ1bnRpbWVfMiA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbmNvbnN0IHJ1bnRpbWVfMyA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbmNvbnN0IHJ1bnRpbWVfNCA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbmNvbnN0IHJ1bnRpbWVfNSA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbmNvbnN0IHJ1bnRpbWVfNiA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbmNvbnN0IHJ1bnRpbWVfNyA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbi8vIEBnZW5lcmF0ZWQgbWVzc2FnZSB0eXBlIHdpdGggcmVmbGVjdGlvbiBpbmZvcm1hdGlvbiwgbWF5IHByb3ZpZGUgc3BlZWQgb3B0aW1pemVkIG1ldGhvZHNcbmNsYXNzIERvdWJsZVZhbHVlJFR5cGUgZXh0ZW5kcyBydW50aW1lXzcuTWVzc2FnZVR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcImdvb2dsZS5wcm90b2J1Zi5Eb3VibGVWYWx1ZVwiLCBbXG4gICAgICAgICAgICB7IG5vOiAxLCBuYW1lOiBcInZhbHVlXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDEgLypTY2FsYXJUeXBlLkRPVUJMRSovIH1cbiAgICAgICAgXSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEVuY29kZSBgRG91YmxlVmFsdWVgIHRvIEpTT04gbnVtYmVyLlxuICAgICAqL1xuICAgIGludGVybmFsSnNvbldyaXRlKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmSnNvbldyaXRlci5zY2FsYXIoMiwgbWVzc2FnZS52YWx1ZSwgXCJ2YWx1ZVwiLCBmYWxzZSwgdHJ1ZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlY29kZSBgRG91YmxlVmFsdWVgIGZyb20gSlNPTiBudW1iZXIuXG4gICAgICovXG4gICAgaW50ZXJuYWxKc29uUmVhZChqc29uLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgaWYgKCF0YXJnZXQpXG4gICAgICAgICAgICB0YXJnZXQgPSB0aGlzLmNyZWF0ZSgpO1xuICAgICAgICB0YXJnZXQudmFsdWUgPSB0aGlzLnJlZkpzb25SZWFkZXIuc2NhbGFyKGpzb24sIDEsIHVuZGVmaW5lZCwgXCJ2YWx1ZVwiKTtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG4gICAgY3JlYXRlKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7IHZhbHVlOiAwIH07XG4gICAgICAgIGdsb2JhbFRoaXMuT2JqZWN0LmRlZmluZVByb3BlcnR5KG1lc3NhZ2UsIHJ1bnRpbWVfNi5NRVNTQUdFX1RZUEUsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0aGlzIH0pO1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICgwLCBydW50aW1lXzUucmVmbGVjdGlvbk1lcmdlUGFydGlhbCkodGhpcywgbWVzc2FnZSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlSZWFkKHJlYWRlciwgbGVuZ3RoLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSB0YXJnZXQgIT09IG51bGwgJiYgdGFyZ2V0ICE9PSB2b2lkIDAgPyB0YXJnZXQgOiB0aGlzLmNyZWF0ZSgpLCBlbmQgPSByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgbGV0IFtmaWVsZE5vLCB3aXJlVHlwZV0gPSByZWFkZXIudGFnKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkTm8pIHtcbiAgICAgICAgICAgICAgICBjYXNlIC8qIGRvdWJsZSB2YWx1ZSAqLyAxOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnZhbHVlID0gcmVhZGVyLmRvdWJsZSgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBsZXQgdSA9IG9wdGlvbnMucmVhZFVua25vd25GaWVsZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgPT09IFwidGhyb3dcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBnbG9iYWxUaGlzLkVycm9yKGBVbmtub3duIGZpZWxkICR7ZmllbGROb30gKHdpcmUgdHlwZSAke3dpcmVUeXBlfSkgZm9yICR7dGhpcy50eXBlTmFtZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGQgPSByZWFkZXIuc2tpcCh3aXJlVHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICh1ID09PSB0cnVlID8gcnVudGltZV80LlVua25vd25GaWVsZEhhbmRsZXIub25SZWFkIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgZmllbGRObywgd2lyZVR5cGUsIGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVdyaXRlKG1lc3NhZ2UsIHdyaXRlciwgb3B0aW9ucykge1xuICAgICAgICAvKiBkb3VibGUgdmFsdWUgPSAxOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS52YWx1ZSAhPT0gMClcbiAgICAgICAgICAgIHdyaXRlci50YWcoMSwgcnVudGltZV8zLldpcmVUeXBlLkJpdDY0KS5kb3VibGUobWVzc2FnZS52YWx1ZSk7XG4gICAgICAgIGxldCB1ID0gb3B0aW9ucy53cml0ZVVua25vd25GaWVsZHM7XG4gICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICh1ID09IHRydWUgPyBydW50aW1lXzQuVW5rbm93bkZpZWxkSGFuZGxlci5vbldyaXRlIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgd3JpdGVyKTtcbiAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICB9XG59XG4vKipcbiAqIEBnZW5lcmF0ZWQgTWVzc2FnZVR5cGUgZm9yIHByb3RvYnVmIG1lc3NhZ2UgZ29vZ2xlLnByb3RvYnVmLkRvdWJsZVZhbHVlXG4gKi9cbmV4cG9ydHMuRG91YmxlVmFsdWUgPSBuZXcgRG91YmxlVmFsdWUkVHlwZSgpO1xuLy8gQGdlbmVyYXRlZCBtZXNzYWdlIHR5cGUgd2l0aCByZWZsZWN0aW9uIGluZm9ybWF0aW9uLCBtYXkgcHJvdmlkZSBzcGVlZCBvcHRpbWl6ZWQgbWV0aG9kc1xuY2xhc3MgRmxvYXRWYWx1ZSRUeXBlIGV4dGVuZHMgcnVudGltZV83Lk1lc3NhZ2VUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoXCJnb29nbGUucHJvdG9idWYuRmxvYXRWYWx1ZVwiLCBbXG4gICAgICAgICAgICB7IG5vOiAxLCBuYW1lOiBcInZhbHVlXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDIgLypTY2FsYXJUeXBlLkZMT0FUKi8gfVxuICAgICAgICBdKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRW5jb2RlIGBGbG9hdFZhbHVlYCB0byBKU09OIG51bWJlci5cbiAgICAgKi9cbiAgICBpbnRlcm5hbEpzb25Xcml0ZShtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZkpzb25Xcml0ZXIuc2NhbGFyKDEsIG1lc3NhZ2UudmFsdWUsIFwidmFsdWVcIiwgZmFsc2UsIHRydWUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWNvZGUgYEZsb2F0VmFsdWVgIGZyb20gSlNPTiBudW1iZXIuXG4gICAgICovXG4gICAgaW50ZXJuYWxKc29uUmVhZChqc29uLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgaWYgKCF0YXJnZXQpXG4gICAgICAgICAgICB0YXJnZXQgPSB0aGlzLmNyZWF0ZSgpO1xuICAgICAgICB0YXJnZXQudmFsdWUgPSB0aGlzLnJlZkpzb25SZWFkZXIuc2NhbGFyKGpzb24sIDEsIHVuZGVmaW5lZCwgXCJ2YWx1ZVwiKTtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG4gICAgY3JlYXRlKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7IHZhbHVlOiAwIH07XG4gICAgICAgIGdsb2JhbFRoaXMuT2JqZWN0LmRlZmluZVByb3BlcnR5KG1lc3NhZ2UsIHJ1bnRpbWVfNi5NRVNTQUdFX1RZUEUsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0aGlzIH0pO1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICgwLCBydW50aW1lXzUucmVmbGVjdGlvbk1lcmdlUGFydGlhbCkodGhpcywgbWVzc2FnZSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlSZWFkKHJlYWRlciwgbGVuZ3RoLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSB0YXJnZXQgIT09IG51bGwgJiYgdGFyZ2V0ICE9PSB2b2lkIDAgPyB0YXJnZXQgOiB0aGlzLmNyZWF0ZSgpLCBlbmQgPSByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgbGV0IFtmaWVsZE5vLCB3aXJlVHlwZV0gPSByZWFkZXIudGFnKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkTm8pIHtcbiAgICAgICAgICAgICAgICBjYXNlIC8qIGZsb2F0IHZhbHVlICovIDE6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudmFsdWUgPSByZWFkZXIuZmxvYXQoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBvcHRpb25zLnJlYWRVbmtub3duRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ID09PSBcInRocm93XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZ2xvYmFsVGhpcy5FcnJvcihgVW5rbm93biBmaWVsZCAke2ZpZWxkTm99ICh3aXJlIHR5cGUgJHt3aXJlVHlwZX0pIGZvciAke3RoaXMudHlwZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkID0gcmVhZGVyLnNraXAod2lyZVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAodSA9PT0gdHJ1ZSA/IHJ1bnRpbWVfNC5Vbmtub3duRmllbGRIYW5kbGVyLm9uUmVhZCA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIGZpZWxkTm8sIHdpcmVUeXBlLCBkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLCB3cml0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgLyogZmxvYXQgdmFsdWUgPSAxOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS52YWx1ZSAhPT0gMClcbiAgICAgICAgICAgIHdyaXRlci50YWcoMSwgcnVudGltZV8zLldpcmVUeXBlLkJpdDMyKS5mbG9hdChtZXNzYWdlLnZhbHVlKTtcbiAgICAgICAgbGV0IHUgPSBvcHRpb25zLndyaXRlVW5rbm93bkZpZWxkcztcbiAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgKHUgPT0gdHJ1ZSA/IHJ1bnRpbWVfNC5Vbmtub3duRmllbGRIYW5kbGVyLm9uV3JpdGUgOiB1KSh0aGlzLnR5cGVOYW1lLCBtZXNzYWdlLCB3cml0ZXIpO1xuICAgICAgICByZXR1cm4gd3JpdGVyO1xuICAgIH1cbn1cbi8qKlxuICogQGdlbmVyYXRlZCBNZXNzYWdlVHlwZSBmb3IgcHJvdG9idWYgbWVzc2FnZSBnb29nbGUucHJvdG9idWYuRmxvYXRWYWx1ZVxuICovXG5leHBvcnRzLkZsb2F0VmFsdWUgPSBuZXcgRmxvYXRWYWx1ZSRUeXBlKCk7XG4vLyBAZ2VuZXJhdGVkIG1lc3NhZ2UgdHlwZSB3aXRoIHJlZmxlY3Rpb24gaW5mb3JtYXRpb24sIG1heSBwcm92aWRlIHNwZWVkIG9wdGltaXplZCBtZXRob2RzXG5jbGFzcyBJbnQ2NFZhbHVlJFR5cGUgZXh0ZW5kcyBydW50aW1lXzcuTWVzc2FnZVR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcImdvb2dsZS5wcm90b2J1Zi5JbnQ2NFZhbHVlXCIsIFtcbiAgICAgICAgICAgIHsgbm86IDEsIG5hbWU6IFwidmFsdWVcIiwga2luZDogXCJzY2FsYXJcIiwgVDogMyAvKlNjYWxhclR5cGUuSU5UNjQqLyB9XG4gICAgICAgIF0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFbmNvZGUgYEludDY0VmFsdWVgIHRvIEpTT04gc3RyaW5nLlxuICAgICAqL1xuICAgIGludGVybmFsSnNvbldyaXRlKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmSnNvbldyaXRlci5zY2FsYXIocnVudGltZV8xLlNjYWxhclR5cGUuSU5UNjQsIG1lc3NhZ2UudmFsdWUsIFwidmFsdWVcIiwgZmFsc2UsIHRydWUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWNvZGUgYEludDY0VmFsdWVgIGZyb20gSlNPTiBzdHJpbmcuXG4gICAgICovXG4gICAgaW50ZXJuYWxKc29uUmVhZChqc29uLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgaWYgKCF0YXJnZXQpXG4gICAgICAgICAgICB0YXJnZXQgPSB0aGlzLmNyZWF0ZSgpO1xuICAgICAgICB0YXJnZXQudmFsdWUgPSB0aGlzLnJlZkpzb25SZWFkZXIuc2NhbGFyKGpzb24sIHJ1bnRpbWVfMS5TY2FsYXJUeXBlLklOVDY0LCBydW50aW1lXzIuTG9uZ1R5cGUuU1RSSU5HLCBcInZhbHVlXCIpO1xuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cbiAgICBjcmVhdGUodmFsdWUpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IHsgdmFsdWU6IFwiMFwiIH07XG4gICAgICAgIGdsb2JhbFRoaXMuT2JqZWN0LmRlZmluZVByb3BlcnR5KG1lc3NhZ2UsIHJ1bnRpbWVfNi5NRVNTQUdFX1RZUEUsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0aGlzIH0pO1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICgwLCBydW50aW1lXzUucmVmbGVjdGlvbk1lcmdlUGFydGlhbCkodGhpcywgbWVzc2FnZSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlSZWFkKHJlYWRlciwgbGVuZ3RoLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSB0YXJnZXQgIT09IG51bGwgJiYgdGFyZ2V0ICE9PSB2b2lkIDAgPyB0YXJnZXQgOiB0aGlzLmNyZWF0ZSgpLCBlbmQgPSByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgbGV0IFtmaWVsZE5vLCB3aXJlVHlwZV0gPSByZWFkZXIudGFnKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkTm8pIHtcbiAgICAgICAgICAgICAgICBjYXNlIC8qIGludDY0IHZhbHVlICovIDE6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudmFsdWUgPSByZWFkZXIuaW50NjQoKS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBsZXQgdSA9IG9wdGlvbnMucmVhZFVua25vd25GaWVsZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgPT09IFwidGhyb3dcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBnbG9iYWxUaGlzLkVycm9yKGBVbmtub3duIGZpZWxkICR7ZmllbGROb30gKHdpcmUgdHlwZSAke3dpcmVUeXBlfSkgZm9yICR7dGhpcy50eXBlTmFtZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGQgPSByZWFkZXIuc2tpcCh3aXJlVHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICh1ID09PSB0cnVlID8gcnVudGltZV80LlVua25vd25GaWVsZEhhbmRsZXIub25SZWFkIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgZmllbGRObywgd2lyZVR5cGUsIGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVdyaXRlKG1lc3NhZ2UsIHdyaXRlciwgb3B0aW9ucykge1xuICAgICAgICAvKiBpbnQ2NCB2YWx1ZSA9IDE7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLnZhbHVlICE9PSBcIjBcIilcbiAgICAgICAgICAgIHdyaXRlci50YWcoMSwgcnVudGltZV8zLldpcmVUeXBlLlZhcmludCkuaW50NjQobWVzc2FnZS52YWx1ZSk7XG4gICAgICAgIGxldCB1ID0gb3B0aW9ucy53cml0ZVVua25vd25GaWVsZHM7XG4gICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICh1ID09IHRydWUgPyBydW50aW1lXzQuVW5rbm93bkZpZWxkSGFuZGxlci5vbldyaXRlIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgd3JpdGVyKTtcbiAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICB9XG59XG4vKipcbiAqIEBnZW5lcmF0ZWQgTWVzc2FnZVR5cGUgZm9yIHByb3RvYnVmIG1lc3NhZ2UgZ29vZ2xlLnByb3RvYnVmLkludDY0VmFsdWVcbiAqL1xuZXhwb3J0cy5JbnQ2NFZhbHVlID0gbmV3IEludDY0VmFsdWUkVHlwZSgpO1xuLy8gQGdlbmVyYXRlZCBtZXNzYWdlIHR5cGUgd2l0aCByZWZsZWN0aW9uIGluZm9ybWF0aW9uLCBtYXkgcHJvdmlkZSBzcGVlZCBvcHRpbWl6ZWQgbWV0aG9kc1xuY2xhc3MgVUludDY0VmFsdWUkVHlwZSBleHRlbmRzIHJ1bnRpbWVfNy5NZXNzYWdlVHlwZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiZ29vZ2xlLnByb3RvYnVmLlVJbnQ2NFZhbHVlXCIsIFtcbiAgICAgICAgICAgIHsgbm86IDEsIG5hbWU6IFwidmFsdWVcIiwga2luZDogXCJzY2FsYXJcIiwgVDogNCAvKlNjYWxhclR5cGUuVUlOVDY0Ki8gfVxuICAgICAgICBdKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRW5jb2RlIGBVSW50NjRWYWx1ZWAgdG8gSlNPTiBzdHJpbmcuXG4gICAgICovXG4gICAgaW50ZXJuYWxKc29uV3JpdGUobWVzc2FnZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWZKc29uV3JpdGVyLnNjYWxhcihydW50aW1lXzEuU2NhbGFyVHlwZS5VSU5UNjQsIG1lc3NhZ2UudmFsdWUsIFwidmFsdWVcIiwgZmFsc2UsIHRydWUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWNvZGUgYFVJbnQ2NFZhbHVlYCBmcm9tIEpTT04gc3RyaW5nLlxuICAgICAqL1xuICAgIGludGVybmFsSnNvblJlYWQoanNvbiwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGlmICghdGFyZ2V0KVxuICAgICAgICAgICAgdGFyZ2V0ID0gdGhpcy5jcmVhdGUoKTtcbiAgICAgICAgdGFyZ2V0LnZhbHVlID0gdGhpcy5yZWZKc29uUmVhZGVyLnNjYWxhcihqc29uLCBydW50aW1lXzEuU2NhbGFyVHlwZS5VSU5UNjQsIHJ1bnRpbWVfMi5Mb25nVHlwZS5TVFJJTkcsIFwidmFsdWVcIik7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuICAgIGNyZWF0ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0geyB2YWx1ZTogXCIwXCIgfTtcbiAgICAgICAgZ2xvYmFsVGhpcy5PYmplY3QuZGVmaW5lUHJvcGVydHkobWVzc2FnZSwgcnVudGltZV82Lk1FU1NBR0VfVFlQRSwgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRoaXMgfSk7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgKDAsIHJ1bnRpbWVfNS5yZWZsZWN0aW9uTWVyZ2VQYXJ0aWFsKSh0aGlzLCBtZXNzYWdlLCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVJlYWQocmVhZGVyLCBsZW5ndGgsIG9wdGlvbnMsIHRhcmdldCkge1xuICAgICAgICBsZXQgbWVzc2FnZSA9IHRhcmdldCAhPT0gbnVsbCAmJiB0YXJnZXQgIT09IHZvaWQgMCA/IHRhcmdldCA6IHRoaXMuY3JlYXRlKCksIGVuZCA9IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICBsZXQgW2ZpZWxkTm8sIHdpcmVUeXBlXSA9IHJlYWRlci50YWcoKTtcbiAgICAgICAgICAgIHN3aXRjaCAoZmllbGRObykge1xuICAgICAgICAgICAgICAgIGNhc2UgLyogdWludDY0IHZhbHVlICovIDE6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudmFsdWUgPSByZWFkZXIudWludDY0KCkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBvcHRpb25zLnJlYWRVbmtub3duRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ID09PSBcInRocm93XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZ2xvYmFsVGhpcy5FcnJvcihgVW5rbm93biBmaWVsZCAke2ZpZWxkTm99ICh3aXJlIHR5cGUgJHt3aXJlVHlwZX0pIGZvciAke3RoaXMudHlwZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkID0gcmVhZGVyLnNraXAod2lyZVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAodSA9PT0gdHJ1ZSA/IHJ1bnRpbWVfNC5Vbmtub3duRmllbGRIYW5kbGVyLm9uUmVhZCA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIGZpZWxkTm8sIHdpcmVUeXBlLCBkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLCB3cml0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgLyogdWludDY0IHZhbHVlID0gMTsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2UudmFsdWUgIT09IFwiMFwiKVxuICAgICAgICAgICAgd3JpdGVyLnRhZygxLCBydW50aW1lXzMuV2lyZVR5cGUuVmFyaW50KS51aW50NjQobWVzc2FnZS52YWx1ZSk7XG4gICAgICAgIGxldCB1ID0gb3B0aW9ucy53cml0ZVVua25vd25GaWVsZHM7XG4gICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICh1ID09IHRydWUgPyBydW50aW1lXzQuVW5rbm93bkZpZWxkSGFuZGxlci5vbldyaXRlIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgd3JpdGVyKTtcbiAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICB9XG59XG4vKipcbiAqIEBnZW5lcmF0ZWQgTWVzc2FnZVR5cGUgZm9yIHByb3RvYnVmIG1lc3NhZ2UgZ29vZ2xlLnByb3RvYnVmLlVJbnQ2NFZhbHVlXG4gKi9cbmV4cG9ydHMuVUludDY0VmFsdWUgPSBuZXcgVUludDY0VmFsdWUkVHlwZSgpO1xuLy8gQGdlbmVyYXRlZCBtZXNzYWdlIHR5cGUgd2l0aCByZWZsZWN0aW9uIGluZm9ybWF0aW9uLCBtYXkgcHJvdmlkZSBzcGVlZCBvcHRpbWl6ZWQgbWV0aG9kc1xuY2xhc3MgSW50MzJWYWx1ZSRUeXBlIGV4dGVuZHMgcnVudGltZV83Lk1lc3NhZ2VUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoXCJnb29nbGUucHJvdG9idWYuSW50MzJWYWx1ZVwiLCBbXG4gICAgICAgICAgICB7IG5vOiAxLCBuYW1lOiBcInZhbHVlXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDUgLypTY2FsYXJUeXBlLklOVDMyKi8gfVxuICAgICAgICBdKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRW5jb2RlIGBJbnQzMlZhbHVlYCB0byBKU09OIHN0cmluZy5cbiAgICAgKi9cbiAgICBpbnRlcm5hbEpzb25Xcml0ZShtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZkpzb25Xcml0ZXIuc2NhbGFyKDUsIG1lc3NhZ2UudmFsdWUsIFwidmFsdWVcIiwgZmFsc2UsIHRydWUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWNvZGUgYEludDMyVmFsdWVgIGZyb20gSlNPTiBzdHJpbmcuXG4gICAgICovXG4gICAgaW50ZXJuYWxKc29uUmVhZChqc29uLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgaWYgKCF0YXJnZXQpXG4gICAgICAgICAgICB0YXJnZXQgPSB0aGlzLmNyZWF0ZSgpO1xuICAgICAgICB0YXJnZXQudmFsdWUgPSB0aGlzLnJlZkpzb25SZWFkZXIuc2NhbGFyKGpzb24sIDUsIHVuZGVmaW5lZCwgXCJ2YWx1ZVwiKTtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG4gICAgY3JlYXRlKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7IHZhbHVlOiAwIH07XG4gICAgICAgIGdsb2JhbFRoaXMuT2JqZWN0LmRlZmluZVByb3BlcnR5KG1lc3NhZ2UsIHJ1bnRpbWVfNi5NRVNTQUdFX1RZUEUsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0aGlzIH0pO1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICgwLCBydW50aW1lXzUucmVmbGVjdGlvbk1lcmdlUGFydGlhbCkodGhpcywgbWVzc2FnZSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlSZWFkKHJlYWRlciwgbGVuZ3RoLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSB0YXJnZXQgIT09IG51bGwgJiYgdGFyZ2V0ICE9PSB2b2lkIDAgPyB0YXJnZXQgOiB0aGlzLmNyZWF0ZSgpLCBlbmQgPSByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgbGV0IFtmaWVsZE5vLCB3aXJlVHlwZV0gPSByZWFkZXIudGFnKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkTm8pIHtcbiAgICAgICAgICAgICAgICBjYXNlIC8qIGludDMyIHZhbHVlICovIDE6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudmFsdWUgPSByZWFkZXIuaW50MzIoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBvcHRpb25zLnJlYWRVbmtub3duRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ID09PSBcInRocm93XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZ2xvYmFsVGhpcy5FcnJvcihgVW5rbm93biBmaWVsZCAke2ZpZWxkTm99ICh3aXJlIHR5cGUgJHt3aXJlVHlwZX0pIGZvciAke3RoaXMudHlwZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkID0gcmVhZGVyLnNraXAod2lyZVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAodSA9PT0gdHJ1ZSA/IHJ1bnRpbWVfNC5Vbmtub3duRmllbGRIYW5kbGVyLm9uUmVhZCA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIGZpZWxkTm8sIHdpcmVUeXBlLCBkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLCB3cml0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgLyogaW50MzIgdmFsdWUgPSAxOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS52YWx1ZSAhPT0gMClcbiAgICAgICAgICAgIHdyaXRlci50YWcoMSwgcnVudGltZV8zLldpcmVUeXBlLlZhcmludCkuaW50MzIobWVzc2FnZS52YWx1ZSk7XG4gICAgICAgIGxldCB1ID0gb3B0aW9ucy53cml0ZVVua25vd25GaWVsZHM7XG4gICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICh1ID09IHRydWUgPyBydW50aW1lXzQuVW5rbm93bkZpZWxkSGFuZGxlci5vbldyaXRlIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgd3JpdGVyKTtcbiAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICB9XG59XG4vKipcbiAqIEBnZW5lcmF0ZWQgTWVzc2FnZVR5cGUgZm9yIHByb3RvYnVmIG1lc3NhZ2UgZ29vZ2xlLnByb3RvYnVmLkludDMyVmFsdWVcbiAqL1xuZXhwb3J0cy5JbnQzMlZhbHVlID0gbmV3IEludDMyVmFsdWUkVHlwZSgpO1xuLy8gQGdlbmVyYXRlZCBtZXNzYWdlIHR5cGUgd2l0aCByZWZsZWN0aW9uIGluZm9ybWF0aW9uLCBtYXkgcHJvdmlkZSBzcGVlZCBvcHRpbWl6ZWQgbWV0aG9kc1xuY2xhc3MgVUludDMyVmFsdWUkVHlwZSBleHRlbmRzIHJ1bnRpbWVfNy5NZXNzYWdlVHlwZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiZ29vZ2xlLnByb3RvYnVmLlVJbnQzMlZhbHVlXCIsIFtcbiAgICAgICAgICAgIHsgbm86IDEsIG5hbWU6IFwidmFsdWVcIiwga2luZDogXCJzY2FsYXJcIiwgVDogMTMgLypTY2FsYXJUeXBlLlVJTlQzMiovIH1cbiAgICAgICAgXSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEVuY29kZSBgVUludDMyVmFsdWVgIHRvIEpTT04gc3RyaW5nLlxuICAgICAqL1xuICAgIGludGVybmFsSnNvbldyaXRlKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmSnNvbldyaXRlci5zY2FsYXIoMTMsIG1lc3NhZ2UudmFsdWUsIFwidmFsdWVcIiwgZmFsc2UsIHRydWUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWNvZGUgYFVJbnQzMlZhbHVlYCBmcm9tIEpTT04gc3RyaW5nLlxuICAgICAqL1xuICAgIGludGVybmFsSnNvblJlYWQoanNvbiwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGlmICghdGFyZ2V0KVxuICAgICAgICAgICAgdGFyZ2V0ID0gdGhpcy5jcmVhdGUoKTtcbiAgICAgICAgdGFyZ2V0LnZhbHVlID0gdGhpcy5yZWZKc29uUmVhZGVyLnNjYWxhcihqc29uLCAxMywgdW5kZWZpbmVkLCBcInZhbHVlXCIpO1xuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cbiAgICBjcmVhdGUodmFsdWUpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IHsgdmFsdWU6IDAgfTtcbiAgICAgICAgZ2xvYmFsVGhpcy5PYmplY3QuZGVmaW5lUHJvcGVydHkobWVzc2FnZSwgcnVudGltZV82Lk1FU1NBR0VfVFlQRSwgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRoaXMgfSk7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgKDAsIHJ1bnRpbWVfNS5yZWZsZWN0aW9uTWVyZ2VQYXJ0aWFsKSh0aGlzLCBtZXNzYWdlLCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVJlYWQocmVhZGVyLCBsZW5ndGgsIG9wdGlvbnMsIHRhcmdldCkge1xuICAgICAgICBsZXQgbWVzc2FnZSA9IHRhcmdldCAhPT0gbnVsbCAmJiB0YXJnZXQgIT09IHZvaWQgMCA/IHRhcmdldCA6IHRoaXMuY3JlYXRlKCksIGVuZCA9IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICBsZXQgW2ZpZWxkTm8sIHdpcmVUeXBlXSA9IHJlYWRlci50YWcoKTtcbiAgICAgICAgICAgIHN3aXRjaCAoZmllbGRObykge1xuICAgICAgICAgICAgICAgIGNhc2UgLyogdWludDMyIHZhbHVlICovIDE6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudmFsdWUgPSByZWFkZXIudWludDMyKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGxldCB1ID0gb3B0aW9ucy5yZWFkVW5rbm93bkZpZWxkO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSA9PT0gXCJ0aHJvd1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGdsb2JhbFRoaXMuRXJyb3IoYFVua25vd24gZmllbGQgJHtmaWVsZE5vfSAod2lyZSB0eXBlICR7d2lyZVR5cGV9KSBmb3IgJHt0aGlzLnR5cGVOYW1lfWApO1xuICAgICAgICAgICAgICAgICAgICBsZXQgZCA9IHJlYWRlci5za2lwKHdpcmVUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgKHUgPT09IHRydWUgPyBydW50aW1lXzQuVW5rbm93bkZpZWxkSGFuZGxlci5vblJlYWQgOiB1KSh0aGlzLnR5cGVOYW1lLCBtZXNzYWdlLCBmaWVsZE5vLCB3aXJlVHlwZSwgZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5V3JpdGUobWVzc2FnZSwgd3JpdGVyLCBvcHRpb25zKSB7XG4gICAgICAgIC8qIHVpbnQzMiB2YWx1ZSA9IDE7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLnZhbHVlICE9PSAwKVxuICAgICAgICAgICAgd3JpdGVyLnRhZygxLCBydW50aW1lXzMuV2lyZVR5cGUuVmFyaW50KS51aW50MzIobWVzc2FnZS52YWx1ZSk7XG4gICAgICAgIGxldCB1ID0gb3B0aW9ucy53cml0ZVVua25vd25GaWVsZHM7XG4gICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICh1ID09IHRydWUgPyBydW50aW1lXzQuVW5rbm93bkZpZWxkSGFuZGxlci5vbldyaXRlIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgd3JpdGVyKTtcbiAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICB9XG59XG4vKipcbiAqIEBnZW5lcmF0ZWQgTWVzc2FnZVR5cGUgZm9yIHByb3RvYnVmIG1lc3NhZ2UgZ29vZ2xlLnByb3RvYnVmLlVJbnQzMlZhbHVlXG4gKi9cbmV4cG9ydHMuVUludDMyVmFsdWUgPSBuZXcgVUludDMyVmFsdWUkVHlwZSgpO1xuLy8gQGdlbmVyYXRlZCBtZXNzYWdlIHR5cGUgd2l0aCByZWZsZWN0aW9uIGluZm9ybWF0aW9uLCBtYXkgcHJvdmlkZSBzcGVlZCBvcHRpbWl6ZWQgbWV0aG9kc1xuY2xhc3MgQm9vbFZhbHVlJFR5cGUgZXh0ZW5kcyBydW50aW1lXzcuTWVzc2FnZVR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcImdvb2dsZS5wcm90b2J1Zi5Cb29sVmFsdWVcIiwgW1xuICAgICAgICAgICAgeyBubzogMSwgbmFtZTogXCJ2YWx1ZVwiLCBraW5kOiBcInNjYWxhclwiLCBUOiA4IC8qU2NhbGFyVHlwZS5CT09MKi8gfVxuICAgICAgICBdKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRW5jb2RlIGBCb29sVmFsdWVgIHRvIEpTT04gYm9vbC5cbiAgICAgKi9cbiAgICBpbnRlcm5hbEpzb25Xcml0ZShtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBtZXNzYWdlLnZhbHVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWNvZGUgYEJvb2xWYWx1ZWAgZnJvbSBKU09OIGJvb2wuXG4gICAgICovXG4gICAgaW50ZXJuYWxKc29uUmVhZChqc29uLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgaWYgKCF0YXJnZXQpXG4gICAgICAgICAgICB0YXJnZXQgPSB0aGlzLmNyZWF0ZSgpO1xuICAgICAgICB0YXJnZXQudmFsdWUgPSB0aGlzLnJlZkpzb25SZWFkZXIuc2NhbGFyKGpzb24sIDgsIHVuZGVmaW5lZCwgXCJ2YWx1ZVwiKTtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG4gICAgY3JlYXRlKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7IHZhbHVlOiBmYWxzZSB9O1xuICAgICAgICBnbG9iYWxUaGlzLk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZXNzYWdlLCBydW50aW1lXzYuTUVTU0FHRV9UWVBFLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdGhpcyB9KTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAoMCwgcnVudGltZV81LnJlZmxlY3Rpb25NZXJnZVBhcnRpYWwpKHRoaXMsIG1lc3NhZ2UsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5UmVhZChyZWFkZXIsIGxlbmd0aCwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGxldCBtZXNzYWdlID0gdGFyZ2V0ICE9PSBudWxsICYmIHRhcmdldCAhPT0gdm9pZCAwID8gdGFyZ2V0IDogdGhpcy5jcmVhdGUoKSwgZW5kID0gcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgIGxldCBbZmllbGRObywgd2lyZVR5cGVdID0gcmVhZGVyLnRhZygpO1xuICAgICAgICAgICAgc3dpdGNoIChmaWVsZE5vKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBib29sIHZhbHVlICovIDE6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudmFsdWUgPSByZWFkZXIuYm9vbCgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBsZXQgdSA9IG9wdGlvbnMucmVhZFVua25vd25GaWVsZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgPT09IFwidGhyb3dcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBnbG9iYWxUaGlzLkVycm9yKGBVbmtub3duIGZpZWxkICR7ZmllbGROb30gKHdpcmUgdHlwZSAke3dpcmVUeXBlfSkgZm9yICR7dGhpcy50eXBlTmFtZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGQgPSByZWFkZXIuc2tpcCh3aXJlVHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICh1ID09PSB0cnVlID8gcnVudGltZV80LlVua25vd25GaWVsZEhhbmRsZXIub25SZWFkIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgZmllbGRObywgd2lyZVR5cGUsIGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVdyaXRlKG1lc3NhZ2UsIHdyaXRlciwgb3B0aW9ucykge1xuICAgICAgICAvKiBib29sIHZhbHVlID0gMTsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2UudmFsdWUgIT09IGZhbHNlKVxuICAgICAgICAgICAgd3JpdGVyLnRhZygxLCBydW50aW1lXzMuV2lyZVR5cGUuVmFyaW50KS5ib29sKG1lc3NhZ2UudmFsdWUpO1xuICAgICAgICBsZXQgdSA9IG9wdGlvbnMud3JpdGVVbmtub3duRmllbGRzO1xuICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAodSA9PSB0cnVlID8gcnVudGltZV80LlVua25vd25GaWVsZEhhbmRsZXIub25Xcml0ZSA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIHdyaXRlcik7XG4gICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgfVxufVxuLyoqXG4gKiBAZ2VuZXJhdGVkIE1lc3NhZ2VUeXBlIGZvciBwcm90b2J1ZiBtZXNzYWdlIGdvb2dsZS5wcm90b2J1Zi5Cb29sVmFsdWVcbiAqL1xuZXhwb3J0cy5Cb29sVmFsdWUgPSBuZXcgQm9vbFZhbHVlJFR5cGUoKTtcbi8vIEBnZW5lcmF0ZWQgbWVzc2FnZSB0eXBlIHdpdGggcmVmbGVjdGlvbiBpbmZvcm1hdGlvbiwgbWF5IHByb3ZpZGUgc3BlZWQgb3B0aW1pemVkIG1ldGhvZHNcbmNsYXNzIFN0cmluZ1ZhbHVlJFR5cGUgZXh0ZW5kcyBydW50aW1lXzcuTWVzc2FnZVR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcImdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZVwiLCBbXG4gICAgICAgICAgICB7IG5vOiAxLCBuYW1lOiBcInZhbHVlXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDkgLypTY2FsYXJUeXBlLlNUUklORyovIH1cbiAgICAgICAgXSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEVuY29kZSBgU3RyaW5nVmFsdWVgIHRvIEpTT04gc3RyaW5nLlxuICAgICAqL1xuICAgIGludGVybmFsSnNvbldyaXRlKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2UudmFsdWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlY29kZSBgU3RyaW5nVmFsdWVgIGZyb20gSlNPTiBzdHJpbmcuXG4gICAgICovXG4gICAgaW50ZXJuYWxKc29uUmVhZChqc29uLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgaWYgKCF0YXJnZXQpXG4gICAgICAgICAgICB0YXJnZXQgPSB0aGlzLmNyZWF0ZSgpO1xuICAgICAgICB0YXJnZXQudmFsdWUgPSB0aGlzLnJlZkpzb25SZWFkZXIuc2NhbGFyKGpzb24sIDksIHVuZGVmaW5lZCwgXCJ2YWx1ZVwiKTtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG4gICAgY3JlYXRlKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7IHZhbHVlOiBcIlwiIH07XG4gICAgICAgIGdsb2JhbFRoaXMuT2JqZWN0LmRlZmluZVByb3BlcnR5KG1lc3NhZ2UsIHJ1bnRpbWVfNi5NRVNTQUdFX1RZUEUsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0aGlzIH0pO1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICgwLCBydW50aW1lXzUucmVmbGVjdGlvbk1lcmdlUGFydGlhbCkodGhpcywgbWVzc2FnZSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlSZWFkKHJlYWRlciwgbGVuZ3RoLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSB0YXJnZXQgIT09IG51bGwgJiYgdGFyZ2V0ICE9PSB2b2lkIDAgPyB0YXJnZXQgOiB0aGlzLmNyZWF0ZSgpLCBlbmQgPSByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgbGV0IFtmaWVsZE5vLCB3aXJlVHlwZV0gPSByZWFkZXIudGFnKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkTm8pIHtcbiAgICAgICAgICAgICAgICBjYXNlIC8qIHN0cmluZyB2YWx1ZSAqLyAxOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnZhbHVlID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBsZXQgdSA9IG9wdGlvbnMucmVhZFVua25vd25GaWVsZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgPT09IFwidGhyb3dcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBnbG9iYWxUaGlzLkVycm9yKGBVbmtub3duIGZpZWxkICR7ZmllbGROb30gKHdpcmUgdHlwZSAke3dpcmVUeXBlfSkgZm9yICR7dGhpcy50eXBlTmFtZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGQgPSByZWFkZXIuc2tpcCh3aXJlVHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICh1ID09PSB0cnVlID8gcnVudGltZV80LlVua25vd25GaWVsZEhhbmRsZXIub25SZWFkIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgZmllbGRObywgd2lyZVR5cGUsIGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVdyaXRlKG1lc3NhZ2UsIHdyaXRlciwgb3B0aW9ucykge1xuICAgICAgICAvKiBzdHJpbmcgdmFsdWUgPSAxOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS52YWx1ZSAhPT0gXCJcIilcbiAgICAgICAgICAgIHdyaXRlci50YWcoMSwgcnVudGltZV8zLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCkuc3RyaW5nKG1lc3NhZ2UudmFsdWUpO1xuICAgICAgICBsZXQgdSA9IG9wdGlvbnMud3JpdGVVbmtub3duRmllbGRzO1xuICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAodSA9PSB0cnVlID8gcnVudGltZV80LlVua25vd25GaWVsZEhhbmRsZXIub25Xcml0ZSA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIHdyaXRlcik7XG4gICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgfVxufVxuLyoqXG4gKiBAZ2VuZXJhdGVkIE1lc3NhZ2VUeXBlIGZvciBwcm90b2J1ZiBtZXNzYWdlIGdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZVxuICovXG5leHBvcnRzLlN0cmluZ1ZhbHVlID0gbmV3IFN0cmluZ1ZhbHVlJFR5cGUoKTtcbi8vIEBnZW5lcmF0ZWQgbWVzc2FnZSB0eXBlIHdpdGggcmVmbGVjdGlvbiBpbmZvcm1hdGlvbiwgbWF5IHByb3ZpZGUgc3BlZWQgb3B0aW1pemVkIG1ldGhvZHNcbmNsYXNzIEJ5dGVzVmFsdWUkVHlwZSBleHRlbmRzIHJ1bnRpbWVfNy5NZXNzYWdlVHlwZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiZ29vZ2xlLnByb3RvYnVmLkJ5dGVzVmFsdWVcIiwgW1xuICAgICAgICAgICAgeyBubzogMSwgbmFtZTogXCJ2YWx1ZVwiLCBraW5kOiBcInNjYWxhclwiLCBUOiAxMiAvKlNjYWxhclR5cGUuQllURVMqLyB9XG4gICAgICAgIF0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFbmNvZGUgYEJ5dGVzVmFsdWVgIHRvIEpTT04gc3RyaW5nLlxuICAgICAqL1xuICAgIGludGVybmFsSnNvbldyaXRlKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmSnNvbldyaXRlci5zY2FsYXIoMTIsIG1lc3NhZ2UudmFsdWUsIFwidmFsdWVcIiwgZmFsc2UsIHRydWUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWNvZGUgYEJ5dGVzVmFsdWVgIGZyb20gSlNPTiBzdHJpbmcuXG4gICAgICovXG4gICAgaW50ZXJuYWxKc29uUmVhZChqc29uLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgaWYgKCF0YXJnZXQpXG4gICAgICAgICAgICB0YXJnZXQgPSB0aGlzLmNyZWF0ZSgpO1xuICAgICAgICB0YXJnZXQudmFsdWUgPSB0aGlzLnJlZkpzb25SZWFkZXIuc2NhbGFyKGpzb24sIDEyLCB1bmRlZmluZWQsIFwidmFsdWVcIik7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuICAgIGNyZWF0ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0geyB2YWx1ZTogbmV3IFVpbnQ4QXJyYXkoMCkgfTtcbiAgICAgICAgZ2xvYmFsVGhpcy5PYmplY3QuZGVmaW5lUHJvcGVydHkobWVzc2FnZSwgcnVudGltZV82Lk1FU1NBR0VfVFlQRSwgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRoaXMgfSk7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgKDAsIHJ1bnRpbWVfNS5yZWZsZWN0aW9uTWVyZ2VQYXJ0aWFsKSh0aGlzLCBtZXNzYWdlLCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVJlYWQocmVhZGVyLCBsZW5ndGgsIG9wdGlvbnMsIHRhcmdldCkge1xuICAgICAgICBsZXQgbWVzc2FnZSA9IHRhcmdldCAhPT0gbnVsbCAmJiB0YXJnZXQgIT09IHZvaWQgMCA/IHRhcmdldCA6IHRoaXMuY3JlYXRlKCksIGVuZCA9IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICBsZXQgW2ZpZWxkTm8sIHdpcmVUeXBlXSA9IHJlYWRlci50YWcoKTtcbiAgICAgICAgICAgIHN3aXRjaCAoZmllbGRObykge1xuICAgICAgICAgICAgICAgIGNhc2UgLyogYnl0ZXMgdmFsdWUgKi8gMTpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS52YWx1ZSA9IHJlYWRlci5ieXRlcygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBsZXQgdSA9IG9wdGlvbnMucmVhZFVua25vd25GaWVsZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgPT09IFwidGhyb3dcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBnbG9iYWxUaGlzLkVycm9yKGBVbmtub3duIGZpZWxkICR7ZmllbGROb30gKHdpcmUgdHlwZSAke3dpcmVUeXBlfSkgZm9yICR7dGhpcy50eXBlTmFtZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGQgPSByZWFkZXIuc2tpcCh3aXJlVHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICh1ID09PSB0cnVlID8gcnVudGltZV80LlVua25vd25GaWVsZEhhbmRsZXIub25SZWFkIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgZmllbGRObywgd2lyZVR5cGUsIGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVdyaXRlKG1lc3NhZ2UsIHdyaXRlciwgb3B0aW9ucykge1xuICAgICAgICAvKiBieXRlcyB2YWx1ZSA9IDE7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLnZhbHVlLmxlbmd0aClcbiAgICAgICAgICAgIHdyaXRlci50YWcoMSwgcnVudGltZV8zLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCkuYnl0ZXMobWVzc2FnZS52YWx1ZSk7XG4gICAgICAgIGxldCB1ID0gb3B0aW9ucy53cml0ZVVua25vd25GaWVsZHM7XG4gICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICh1ID09IHRydWUgPyBydW50aW1lXzQuVW5rbm93bkZpZWxkSGFuZGxlci5vbldyaXRlIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgd3JpdGVyKTtcbiAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICB9XG59XG4vKipcbiAqIEBnZW5lcmF0ZWQgTWVzc2FnZVR5cGUgZm9yIHByb3RvYnVmIG1lc3NhZ2UgZ29vZ2xlLnByb3RvYnVmLkJ5dGVzVmFsdWVcbiAqL1xuZXhwb3J0cy5CeXRlc1ZhbHVlID0gbmV3IEJ5dGVzVmFsdWUkVHlwZSgpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9d3JhcHBlcnMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVhZFNlcnZpY2VPcHRpb24gPSBleHBvcnRzLnJlYWRNZXRob2RPcHRpb24gPSBleHBvcnRzLnJlYWRNZXRob2RPcHRpb25zID0gZXhwb3J0cy5ub3JtYWxpemVNZXRob2RJbmZvID0gdm9pZCAwO1xuY29uc3QgcnVudGltZV8xID0gcmVxdWlyZShcIkBwcm90b2J1Zi10cy9ydW50aW1lXCIpO1xuLyoqXG4gKiBUdXJucyBQYXJ0aWFsTWV0aG9kSW5mbyBpbnRvIE1ldGhvZEluZm8uXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZU1ldGhvZEluZm8obWV0aG9kLCBzZXJ2aWNlKSB7XG4gICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgbGV0IG0gPSBtZXRob2Q7XG4gICAgbS5zZXJ2aWNlID0gc2VydmljZTtcbiAgICBtLmxvY2FsTmFtZSA9IChfYSA9IG0ubG9jYWxOYW1lKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBydW50aW1lXzEubG93ZXJDYW1lbENhc2UobS5uYW1lKTtcbiAgICAvLyBub2luc3BlY3Rpb24gUG9pbnRsZXNzQm9vbGVhbkV4cHJlc3Npb25KU1xuICAgIG0uc2VydmVyU3RyZWFtaW5nID0gISFtLnNlcnZlclN0cmVhbWluZztcbiAgICAvLyBub2luc3BlY3Rpb24gUG9pbnRsZXNzQm9vbGVhbkV4cHJlc3Npb25KU1xuICAgIG0uY2xpZW50U3RyZWFtaW5nID0gISFtLmNsaWVudFN0cmVhbWluZztcbiAgICBtLm9wdGlvbnMgPSAoX2IgPSBtLm9wdGlvbnMpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IHt9O1xuICAgIG0uaWRlbXBvdGVuY3kgPSAoX2MgPSBtLmlkZW1wb3RlbmN5KSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIG07XG59XG5leHBvcnRzLm5vcm1hbGl6ZU1ldGhvZEluZm8gPSBub3JtYWxpemVNZXRob2RJbmZvO1xuLyoqXG4gKiBSZWFkIGN1c3RvbSBtZXRob2Qgb3B0aW9ucyBmcm9tIGEgZ2VuZXJhdGVkIHNlcnZpY2UgY2xpZW50LlxuICpcbiAqIEBkZXByZWNhdGVkIHVzZSByZWFkTWV0aG9kT3B0aW9uKClcbiAqL1xuZnVuY3Rpb24gcmVhZE1ldGhvZE9wdGlvbnMoc2VydmljZSwgbWV0aG9kTmFtZSwgZXh0ZW5zaW9uTmFtZSwgZXh0ZW5zaW9uVHlwZSkge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCBvcHRpb25zID0gKF9hID0gc2VydmljZS5tZXRob2RzLmZpbmQoKG0sIGkpID0+IG0ubG9jYWxOYW1lID09PSBtZXRob2ROYW1lIHx8IGkgPT09IG1ldGhvZE5hbWUpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub3B0aW9ucztcbiAgICByZXR1cm4gb3B0aW9ucyAmJiBvcHRpb25zW2V4dGVuc2lvbk5hbWVdID8gZXh0ZW5zaW9uVHlwZS5mcm9tSnNvbihvcHRpb25zW2V4dGVuc2lvbk5hbWVdKSA6IHVuZGVmaW5lZDtcbn1cbmV4cG9ydHMucmVhZE1ldGhvZE9wdGlvbnMgPSByZWFkTWV0aG9kT3B0aW9ucztcbmZ1bmN0aW9uIHJlYWRNZXRob2RPcHRpb24oc2VydmljZSwgbWV0aG9kTmFtZSwgZXh0ZW5zaW9uTmFtZSwgZXh0ZW5zaW9uVHlwZSkge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCBvcHRpb25zID0gKF9hID0gc2VydmljZS5tZXRob2RzLmZpbmQoKG0sIGkpID0+IG0ubG9jYWxOYW1lID09PSBtZXRob2ROYW1lIHx8IGkgPT09IG1ldGhvZE5hbWUpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub3B0aW9ucztcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3Qgb3B0aW9uVmFsID0gb3B0aW9uc1tleHRlbnNpb25OYW1lXTtcbiAgICBpZiAob3B0aW9uVmFsID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvblZhbDtcbiAgICB9XG4gICAgcmV0dXJuIGV4dGVuc2lvblR5cGUgPyBleHRlbnNpb25UeXBlLmZyb21Kc29uKG9wdGlvblZhbCkgOiBvcHRpb25WYWw7XG59XG5leHBvcnRzLnJlYWRNZXRob2RPcHRpb24gPSByZWFkTWV0aG9kT3B0aW9uO1xuZnVuY3Rpb24gcmVhZFNlcnZpY2VPcHRpb24oc2VydmljZSwgZXh0ZW5zaW9uTmFtZSwgZXh0ZW5zaW9uVHlwZSkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBzZXJ2aWNlLm9wdGlvbnM7XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IG9wdGlvblZhbCA9IG9wdGlvbnNbZXh0ZW5zaW9uTmFtZV07XG4gICAgaWYgKG9wdGlvblZhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBvcHRpb25WYWw7XG4gICAgfVxuICAgIHJldHVybiBleHRlbnNpb25UeXBlID8gZXh0ZW5zaW9uVHlwZS5mcm9tSnNvbihvcHRpb25WYWwpIDogb3B0aW9uVmFsO1xufVxuZXhwb3J0cy5yZWFkU2VydmljZU9wdGlvbiA9IHJlYWRTZXJ2aWNlT3B0aW9uO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU2VydmljZVR5cGUgPSB2b2lkIDA7XG5jb25zdCByZWZsZWN0aW9uX2luZm9fMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24taW5mb1wiKTtcbmNsYXNzIFNlcnZpY2VUeXBlIHtcbiAgICBjb25zdHJ1Y3Rvcih0eXBlTmFtZSwgbWV0aG9kcywgb3B0aW9ucykge1xuICAgICAgICB0aGlzLnR5cGVOYW1lID0gdHlwZU5hbWU7XG4gICAgICAgIHRoaXMubWV0aG9kcyA9IG1ldGhvZHMubWFwKGkgPT4gcmVmbGVjdGlvbl9pbmZvXzEubm9ybWFsaXplTWV0aG9kSW5mbyhpLCB0aGlzKSk7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwID8gb3B0aW9ucyA6IHt9O1xuICAgIH1cbn1cbmV4cG9ydHMuU2VydmljZVR5cGUgPSBTZXJ2aWNlVHlwZTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlJwY0Vycm9yID0gdm9pZCAwO1xuLyoqXG4gKiBBbiBlcnJvciB0aGF0IG9jY3VycmVkIHdoaWxlIGNhbGxpbmcgYSBSUEMgbWV0aG9kLlxuICovXG5jbGFzcyBScGNFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlLCBjb2RlID0gJ1VOS05PV04nLCBtZXRhKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLm5hbWUgPSAnUnBjRXJyb3InO1xuICAgICAgICAvLyBzZWUgaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svcmVsZWFzZS1ub3Rlcy90eXBlc2NyaXB0LTItMi5odG1sI2V4YW1wbGVcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIG5ldy50YXJnZXQucHJvdG90eXBlKTtcbiAgICAgICAgdGhpcy5jb2RlID0gY29kZTtcbiAgICAgICAgdGhpcy5tZXRhID0gbWV0YSAhPT0gbnVsbCAmJiBtZXRhICE9PSB2b2lkIDAgPyBtZXRhIDoge307XG4gICAgfVxuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICBjb25zdCBsID0gW3RoaXMubmFtZSArICc6ICcgKyB0aGlzLm1lc3NhZ2VdO1xuICAgICAgICBpZiAodGhpcy5jb2RlKSB7XG4gICAgICAgICAgICBsLnB1c2goJycpO1xuICAgICAgICAgICAgbC5wdXNoKCdDb2RlOiAnICsgdGhpcy5jb2RlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zZXJ2aWNlTmFtZSAmJiB0aGlzLm1ldGhvZE5hbWUpIHtcbiAgICAgICAgICAgIGwucHVzaCgnTWV0aG9kOiAnICsgdGhpcy5zZXJ2aWNlTmFtZSArICcvJyArIHRoaXMubWV0aG9kTmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG0gPSBPYmplY3QuZW50cmllcyh0aGlzLm1ldGEpO1xuICAgICAgICBpZiAobS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGwucHVzaCgnJyk7XG4gICAgICAgICAgICBsLnB1c2goJ01ldGE6Jyk7XG4gICAgICAgICAgICBmb3IgKGxldCBbaywgdl0gb2YgbSkge1xuICAgICAgICAgICAgICAgIGwucHVzaChgICAke2t9OiAke3Z9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGwuam9pbignXFxuJyk7XG4gICAgfVxufVxuZXhwb3J0cy5ScGNFcnJvciA9IFJwY0Vycm9yO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubWVyZ2VScGNPcHRpb25zID0gdm9pZCAwO1xuY29uc3QgcnVudGltZV8xID0gcmVxdWlyZShcIkBwcm90b2J1Zi10cy9ydW50aW1lXCIpO1xuLyoqXG4gKiBNZXJnZXMgY3VzdG9tIFJQQyBvcHRpb25zIHdpdGggZGVmYXVsdHMuIFJldHVybnMgYSBuZXcgaW5zdGFuY2UgYW5kIGtlZXBzXG4gKiB0aGUgXCJkZWZhdWx0c1wiIGFuZCB0aGUgXCJvcHRpb25zXCIgdW5tb2RpZmllZC5cbiAqXG4gKiBNZXJnZXMgYFJwY01ldGFkYXRhYCBcIm1ldGFcIiwgb3ZlcndyaXRpbmcgdmFsdWVzIGZyb20gXCJkZWZhdWx0c1wiIHdpdGhcbiAqIHZhbHVlcyBmcm9tIFwib3B0aW9uc1wiLiBEb2VzIG5vdCBhcHBlbmQgdmFsdWVzIHRvIGV4aXN0aW5nIGVudHJpZXMuXG4gKlxuICogTWVyZ2VzIFwianNvbk9wdGlvbnNcIiwgaW5jbHVkaW5nIFwianNvbk9wdGlvbnMudHlwZVJlZ2lzdHJ5XCIsIGJ5IGNyZWF0aW5nXG4gKiBhIG5ldyBhcnJheSB0aGF0IGNvbnRhaW5zIHR5cGVzIGZyb20gXCJvcHRpb25zLmpzb25PcHRpb25zLnR5cGVSZWdpc3RyeVwiXG4gKiBmaXJzdCwgdGhlbiB0eXBlcyBmcm9tIFwiZGVmYXVsdHMuanNvbk9wdGlvbnMudHlwZVJlZ2lzdHJ5XCIuXG4gKlxuICogTWVyZ2VzIFwiYmluYXJ5T3B0aW9uc1wiLlxuICpcbiAqIE1lcmdlcyBcImludGVyY2VwdG9yc1wiIGJ5IGNyZWF0aW5nIGEgbmV3IGFycmF5IHRoYXQgY29udGFpbnMgaW50ZXJjZXB0b3JzXG4gKiBmcm9tIFwiZGVmYXVsdHNcIiBmaXJzdCwgdGhlbiBpbnRlcmNlcHRvcnMgZnJvbSBcIm9wdGlvbnNcIi5cbiAqXG4gKiBXb3JrcyB3aXRoIG9iamVjdHMgdGhhdCBleHRlbmQgYFJwY09wdGlvbnNgLCBidXQgb25seSBpZiB0aGUgYWRkZWRcbiAqIHByb3BlcnRpZXMgYXJlIG9mIHR5cGUgRGF0ZSwgcHJpbWl0aXZlIGxpa2Ugc3RyaW5nLCBib29sZWFuLCBvciBBcnJheVxuICogb2YgcHJpbWl0aXZlcy4gSWYgeW91IGhhdmUgb3RoZXIgcHJvcGVydHkgdHlwZXMsIHlvdSBoYXZlIHRvIG1lcmdlIHRoZW1cbiAqIHlvdXJzZWxmLlxuICovXG5mdW5jdGlvbiBtZXJnZVJwY09wdGlvbnMoZGVmYXVsdHMsIG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMpXG4gICAgICAgIHJldHVybiBkZWZhdWx0cztcbiAgICBsZXQgbyA9IHt9O1xuICAgIGNvcHkoZGVmYXVsdHMsIG8pO1xuICAgIGNvcHkob3B0aW9ucywgbyk7XG4gICAgZm9yIChsZXQga2V5IG9mIE9iamVjdC5rZXlzKG9wdGlvbnMpKSB7XG4gICAgICAgIGxldCB2YWwgPSBvcHRpb25zW2tleV07XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlIFwianNvbk9wdGlvbnNcIjpcbiAgICAgICAgICAgICAgICBvLmpzb25PcHRpb25zID0gcnVudGltZV8xLm1lcmdlSnNvbk9wdGlvbnMoZGVmYXVsdHMuanNvbk9wdGlvbnMsIG8uanNvbk9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImJpbmFyeU9wdGlvbnNcIjpcbiAgICAgICAgICAgICAgICBvLmJpbmFyeU9wdGlvbnMgPSBydW50aW1lXzEubWVyZ2VCaW5hcnlPcHRpb25zKGRlZmF1bHRzLmJpbmFyeU9wdGlvbnMsIG8uYmluYXJ5T3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWV0YVwiOlxuICAgICAgICAgICAgICAgIG8ubWV0YSA9IHt9O1xuICAgICAgICAgICAgICAgIGNvcHkoZGVmYXVsdHMubWV0YSwgby5tZXRhKTtcbiAgICAgICAgICAgICAgICBjb3B5KG9wdGlvbnMubWV0YSwgby5tZXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJpbnRlcmNlcHRvcnNcIjpcbiAgICAgICAgICAgICAgICBvLmludGVyY2VwdG9ycyA9IGRlZmF1bHRzLmludGVyY2VwdG9ycyA/IGRlZmF1bHRzLmludGVyY2VwdG9ycy5jb25jYXQodmFsKSA6IHZhbC5jb25jYXQoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbztcbn1cbmV4cG9ydHMubWVyZ2VScGNPcHRpb25zID0gbWVyZ2VScGNPcHRpb25zO1xuZnVuY3Rpb24gY29weShhLCBpbnRvKSB7XG4gICAgaWYgKCFhKVxuICAgICAgICByZXR1cm47XG4gICAgbGV0IGMgPSBpbnRvO1xuICAgIGZvciAobGV0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhhKSkge1xuICAgICAgICBpZiAodiBpbnN0YW5jZW9mIERhdGUpXG4gICAgICAgICAgICBjW2tdID0gbmV3IERhdGUodi5nZXRUaW1lKCkpO1xuICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHYpKVxuICAgICAgICAgICAgY1trXSA9IHYuY29uY2F0KCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIGNba10gPSB2O1xuICAgIH1cbn1cbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkRlZmVycmVkID0gZXhwb3J0cy5EZWZlcnJlZFN0YXRlID0gdm9pZCAwO1xudmFyIERlZmVycmVkU3RhdGU7XG4oZnVuY3Rpb24gKERlZmVycmVkU3RhdGUpIHtcbiAgICBEZWZlcnJlZFN0YXRlW0RlZmVycmVkU3RhdGVbXCJQRU5ESU5HXCJdID0gMF0gPSBcIlBFTkRJTkdcIjtcbiAgICBEZWZlcnJlZFN0YXRlW0RlZmVycmVkU3RhdGVbXCJSRUpFQ1RFRFwiXSA9IDFdID0gXCJSRUpFQ1RFRFwiO1xuICAgIERlZmVycmVkU3RhdGVbRGVmZXJyZWRTdGF0ZVtcIlJFU09MVkVEXCJdID0gMl0gPSBcIlJFU09MVkVEXCI7XG59KShEZWZlcnJlZFN0YXRlID0gZXhwb3J0cy5EZWZlcnJlZFN0YXRlIHx8IChleHBvcnRzLkRlZmVycmVkU3RhdGUgPSB7fSkpO1xuLyoqXG4gKiBBIGRlZmVycmVkIHByb21pc2UuIFRoaXMgaXMgYSBcImNvbnRyb2xsZXJcIiBmb3IgYSBwcm9taXNlLCB3aGljaCBsZXRzIHlvdVxuICogcGFzcyBhIHByb21pc2UgYXJvdW5kIGFuZCByZWplY3Qgb3IgcmVzb2x2ZSBpdCBmcm9tIHRoZSBvdXRzaWRlLlxuICpcbiAqIFdhcm5pbmc6IFRoaXMgY2xhc3MgaXMgdG8gYmUgdXNlZCB3aXRoIGNhcmUuIFVzaW5nIGl0IGNhbiBtYWtlIGNvZGUgdmVyeVxuICogZGlmZmljdWx0IHRvIHJlYWQuIEl0IGlzIGludGVuZGVkIGZvciB1c2UgaW4gbGlicmFyeSBjb2RlIHRoYXQgZXhwb3Nlc1xuICogcHJvbWlzZXMsIG5vdCBmb3IgcmVndWxhciBidXNpbmVzcyBsb2dpYy5cbiAqL1xuY2xhc3MgRGVmZXJyZWQge1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSBwcmV2ZW50VW5oYW5kbGVkUmVqZWN0aW9uV2FybmluZyAtIHByZXZlbnRzIHRoZSB3YXJuaW5nXG4gICAgICogXCJVbmhhbmRsZWQgUHJvbWlzZSByZWplY3Rpb25cIiBieSBhZGRpbmcgYSBub29wIHJlamVjdGlvbiBoYW5kbGVyLlxuICAgICAqIFdvcmtpbmcgd2l0aCBjYWxscyByZXR1cm5lZCBmcm9tIHRoZSBydW50aW1lLXJwYyBwYWNrYWdlIGluIGFuXG4gICAgICogYXN5bmMgZnVuY3Rpb24gdXN1YWxseSBtZWFucyBhd2FpdGluZyBvbmUgY2FsbCBwcm9wZXJ0eSBhZnRlclxuICAgICAqIHRoZSBvdGhlci4gVGhpcyBtZWFucyB0aGF0IHRoZSBcInN0YXR1c1wiIGlzIG5vdCBiZWluZyBhd2FpdGVkIHdoZW5cbiAgICAgKiBhbiBlYXJsaWVyIGF3YWl0IGZvciB0aGUgXCJoZWFkZXJzXCIgaXMgcmVqZWN0ZWQuIFRoaXMgY2F1c2VzIHRoZVxuICAgICAqIFwidW5oYW5kbGVkIHByb21pc2UgcmVqZWN0XCIgd2FybmluZy4gQSBtb3JlIGNvcnJlY3QgYmVoYXZpb3VyIGZvclxuICAgICAqIGNhbGxzIG1pZ2h0IGJlIHRvIGJlY29tZSBhd2FyZSB3aGV0aGVyIGF0IGxlYXN0IG9uZSBvZiB0aGVcbiAgICAgKiBwcm9taXNlcyBpcyBoYW5kbGVkIGFuZCBzd2FsbG93IHRoZSByZWplY3Rpb24gd2FybmluZyBmb3IgdGhlXG4gICAgICogb3RoZXJzLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHByZXZlbnRVbmhhbmRsZWRSZWplY3Rpb25XYXJuaW5nID0gdHJ1ZSkge1xuICAgICAgICB0aGlzLl9zdGF0ZSA9IERlZmVycmVkU3RhdGUuUEVORElORztcbiAgICAgICAgdGhpcy5fcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgICAgICAgICAgdGhpcy5fcmVqZWN0ID0gcmVqZWN0O1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHByZXZlbnRVbmhhbmRsZWRSZWplY3Rpb25XYXJuaW5nKSB7XG4gICAgICAgICAgICB0aGlzLl9wcm9taXNlLmNhdGNoKF8gPT4geyB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHByb21pc2UuXG4gICAgICovXG4gICAgZ2V0IHN0YXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgZGVmZXJyZWQgcHJvbWlzZS5cbiAgICAgKi9cbiAgICBnZXQgcHJvbWlzZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb21pc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlc29sdmUgdGhlIHByb21pc2UuIFRocm93cyBpZiB0aGUgcHJvbWlzZSBpcyBhbHJlYWR5IHJlc29sdmVkIG9yIHJlamVjdGVkLlxuICAgICAqL1xuICAgIHJlc29sdmUodmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgIT09IERlZmVycmVkU3RhdGUuUEVORElORylcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgY2Fubm90IHJlc29sdmUgJHtEZWZlcnJlZFN0YXRlW3RoaXMuc3RhdGVdLnRvTG93ZXJDYXNlKCl9YCk7XG4gICAgICAgIHRoaXMuX3Jlc29sdmUodmFsdWUpO1xuICAgICAgICB0aGlzLl9zdGF0ZSA9IERlZmVycmVkU3RhdGUuUkVTT0xWRUQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlamVjdCB0aGUgcHJvbWlzZS4gVGhyb3dzIGlmIHRoZSBwcm9taXNlIGlzIGFscmVhZHkgcmVzb2x2ZWQgb3IgcmVqZWN0ZWQuXG4gICAgICovXG4gICAgcmVqZWN0KHJlYXNvbikge1xuICAgICAgICBpZiAodGhpcy5zdGF0ZSAhPT0gRGVmZXJyZWRTdGF0ZS5QRU5ESU5HKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBjYW5ub3QgcmVqZWN0ICR7RGVmZXJyZWRTdGF0ZVt0aGlzLnN0YXRlXS50b0xvd2VyQ2FzZSgpfWApO1xuICAgICAgICB0aGlzLl9yZWplY3QocmVhc29uKTtcbiAgICAgICAgdGhpcy5fc3RhdGUgPSBEZWZlcnJlZFN0YXRlLlJFSkVDVEVEO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXNvbHZlIHRoZSBwcm9taXNlLiBJZ25vcmUgaWYgbm90IHBlbmRpbmcuXG4gICAgICovXG4gICAgcmVzb2x2ZVBlbmRpbmcodmFsKSB7XG4gICAgICAgIGlmICh0aGlzLl9zdGF0ZSA9PT0gRGVmZXJyZWRTdGF0ZS5QRU5ESU5HKVxuICAgICAgICAgICAgdGhpcy5yZXNvbHZlKHZhbCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlamVjdCB0aGUgcHJvbWlzZS4gSWdub3JlIGlmIG5vdCBwZW5kaW5nLlxuICAgICAqL1xuICAgIHJlamVjdFBlbmRpbmcocmVhc29uKSB7XG4gICAgICAgIGlmICh0aGlzLl9zdGF0ZSA9PT0gRGVmZXJyZWRTdGF0ZS5QRU5ESU5HKVxuICAgICAgICAgICAgdGhpcy5yZWplY3QocmVhc29uKTtcbiAgICB9XG59XG5leHBvcnRzLkRlZmVycmVkID0gRGVmZXJyZWQ7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5ScGNPdXRwdXRTdHJlYW1Db250cm9sbGVyID0gdm9pZCAwO1xuY29uc3QgZGVmZXJyZWRfMSA9IHJlcXVpcmUoXCIuL2RlZmVycmVkXCIpO1xuY29uc3QgcnVudGltZV8xID0gcmVxdWlyZShcIkBwcm90b2J1Zi10cy9ydW50aW1lXCIpO1xuLyoqXG4gKiBBIGBScGNPdXRwdXRTdHJlYW1gIHRoYXQgeW91IGNvbnRyb2wuXG4gKi9cbmNsYXNzIFJwY091dHB1dFN0cmVhbUNvbnRyb2xsZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLl9saXMgPSB7XG4gICAgICAgICAgICBueHQ6IFtdLFxuICAgICAgICAgICAgbXNnOiBbXSxcbiAgICAgICAgICAgIGVycjogW10sXG4gICAgICAgICAgICBjbXA6IFtdLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLl9jbG9zZWQgPSBmYWxzZTtcbiAgICB9XG4gICAgLy8gLS0tIFJwY091dHB1dFN0cmVhbSBjYWxsYmFjayBBUElcbiAgICBvbk5leHQoY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkTGlzKGNhbGxiYWNrLCB0aGlzLl9saXMubnh0KTtcbiAgICB9XG4gICAgb25NZXNzYWdlKGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZExpcyhjYWxsYmFjaywgdGhpcy5fbGlzLm1zZyk7XG4gICAgfVxuICAgIG9uRXJyb3IoY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkTGlzKGNhbGxiYWNrLCB0aGlzLl9saXMuZXJyKTtcbiAgICB9XG4gICAgb25Db21wbGV0ZShjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRMaXMoY2FsbGJhY2ssIHRoaXMuX2xpcy5jbXApO1xuICAgIH1cbiAgICBhZGRMaXMoY2FsbGJhY2ssIGxpc3QpIHtcbiAgICAgICAgbGlzdC5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGxldCBpID0gbGlzdC5pbmRleE9mKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIGlmIChpID49IDApXG4gICAgICAgICAgICAgICAgbGlzdC5zcGxpY2UoaSwgMSk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8vIHJlbW92ZSBhbGwgbGlzdGVuZXJzXG4gICAgY2xlYXJMaXMoKSB7XG4gICAgICAgIGZvciAobGV0IGwgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLl9saXMpKVxuICAgICAgICAgICAgbC5zcGxpY2UoMCwgbC5sZW5ndGgpO1xuICAgIH1cbiAgICAvLyAtLS0gQ29udHJvbGxlciBBUElcbiAgICAvKipcbiAgICAgKiBJcyB0aGlzIHN0cmVhbSBhbHJlYWR5IGNsb3NlZCBieSBhIGNvbXBsZXRpb24gb3IgZXJyb3I/XG4gICAgICovXG4gICAgZ2V0IGNsb3NlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Nsb3NlZCAhPT0gZmFsc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEVtaXQgbWVzc2FnZSwgY2xvc2Ugd2l0aCBlcnJvciwgb3IgY2xvc2Ugc3VjY2Vzc2Z1bGx5LCBidXQgb25seSBvbmVcbiAgICAgKiBhdCBhIHRpbWUuXG4gICAgICogQ2FuIGJlIHVzZWQgdG8gd3JhcCBhIHN0cmVhbSBieSB1c2luZyB0aGUgb3RoZXIgc3RyZWFtJ3MgYG9uTmV4dGAuXG4gICAgICovXG4gICAgbm90aWZ5TmV4dChtZXNzYWdlLCBlcnJvciwgY29tcGxldGUpIHtcbiAgICAgICAgcnVudGltZV8xLmFzc2VydCgobWVzc2FnZSA/IDEgOiAwKSArIChlcnJvciA/IDEgOiAwKSArIChjb21wbGV0ZSA/IDEgOiAwKSA8PSAxLCAnb25seSBvbmUgZW1pc3Npb24gYXQgYSB0aW1lJyk7XG4gICAgICAgIGlmIChtZXNzYWdlKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnlNZXNzYWdlKG1lc3NhZ2UpO1xuICAgICAgICBpZiAoZXJyb3IpXG4gICAgICAgICAgICB0aGlzLm5vdGlmeUVycm9yKGVycm9yKTtcbiAgICAgICAgaWYgKGNvbXBsZXRlKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnlDb21wbGV0ZSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFbWl0cyBhIG5ldyBtZXNzYWdlLiBUaHJvd3MgaWYgc3RyZWFtIGlzIGNsb3NlZC5cbiAgICAgKlxuICAgICAqIFRyaWdnZXJzIG9uTmV4dCBhbmQgb25NZXNzYWdlIGNhbGxiYWNrcy5cbiAgICAgKi9cbiAgICBub3RpZnlNZXNzYWdlKG1lc3NhZ2UpIHtcbiAgICAgICAgcnVudGltZV8xLmFzc2VydCghdGhpcy5jbG9zZWQsICdzdHJlYW0gaXMgY2xvc2VkJyk7XG4gICAgICAgIHRoaXMucHVzaEl0KHsgdmFsdWU6IG1lc3NhZ2UsIGRvbmU6IGZhbHNlIH0pO1xuICAgICAgICB0aGlzLl9saXMubXNnLmZvckVhY2gobCA9PiBsKG1lc3NhZ2UpKTtcbiAgICAgICAgdGhpcy5fbGlzLm54dC5mb3JFYWNoKGwgPT4gbChtZXNzYWdlLCB1bmRlZmluZWQsIGZhbHNlKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENsb3NlcyB0aGUgc3RyZWFtIHdpdGggYW4gZXJyb3IuIFRocm93cyBpZiBzdHJlYW0gaXMgY2xvc2VkLlxuICAgICAqXG4gICAgICogVHJpZ2dlcnMgb25OZXh0IGFuZCBvbkVycm9yIGNhbGxiYWNrcy5cbiAgICAgKi9cbiAgICBub3RpZnlFcnJvcihlcnJvcikge1xuICAgICAgICBydW50aW1lXzEuYXNzZXJ0KCF0aGlzLmNsb3NlZCwgJ3N0cmVhbSBpcyBjbG9zZWQnKTtcbiAgICAgICAgdGhpcy5fY2xvc2VkID0gZXJyb3I7XG4gICAgICAgIHRoaXMucHVzaEl0KGVycm9yKTtcbiAgICAgICAgdGhpcy5fbGlzLmVyci5mb3JFYWNoKGwgPT4gbChlcnJvcikpO1xuICAgICAgICB0aGlzLl9saXMubnh0LmZvckVhY2gobCA9PiBsKHVuZGVmaW5lZCwgZXJyb3IsIGZhbHNlKSk7XG4gICAgICAgIHRoaXMuY2xlYXJMaXMoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2xvc2VzIHRoZSBzdHJlYW0gc3VjY2Vzc2Z1bGx5LiBUaHJvd3MgaWYgc3RyZWFtIGlzIGNsb3NlZC5cbiAgICAgKlxuICAgICAqIFRyaWdnZXJzIG9uTmV4dCBhbmQgb25Db21wbGV0ZSBjYWxsYmFja3MuXG4gICAgICovXG4gICAgbm90aWZ5Q29tcGxldGUoKSB7XG4gICAgICAgIHJ1bnRpbWVfMS5hc3NlcnQoIXRoaXMuY2xvc2VkLCAnc3RyZWFtIGlzIGNsb3NlZCcpO1xuICAgICAgICB0aGlzLl9jbG9zZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnB1c2hJdCh7IHZhbHVlOiBudWxsLCBkb25lOiB0cnVlIH0pO1xuICAgICAgICB0aGlzLl9saXMuY21wLmZvckVhY2gobCA9PiBsKCkpO1xuICAgICAgICB0aGlzLl9saXMubnh0LmZvckVhY2gobCA9PiBsKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB0cnVlKSk7XG4gICAgICAgIHRoaXMuY2xlYXJMaXMoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhc3luYyBpdGVyYXRvciAodGhhdCBjYW4gYmUgdXNlZCB3aXRoIGBmb3IgYXdhaXQgey4uLn1gKVxuICAgICAqIHRvIGNvbnN1bWUgdGhlIHN0cmVhbS5cbiAgICAgKlxuICAgICAqIFNvbWUgdGhpbmdzIHRvIG5vdGU6XG4gICAgICogLSBJZiBhbiBlcnJvciBvY2N1cnMsIHRoZSBgZm9yIGF3YWl0YCB3aWxsIHRocm93IGl0LlxuICAgICAqIC0gSWYgYW4gZXJyb3Igb2NjdXJyZWQgYmVmb3JlIHRoZSBgZm9yIGF3YWl0YCB3YXMgc3RhcnRlZCwgYGZvciBhd2FpdGBcbiAgICAgKiAgIHdpbGwgcmUtdGhyb3cgaXQuXG4gICAgICogLSBJZiB0aGUgc3RyZWFtIGlzIGFscmVhZHkgY29tcGxldGUsIHRoZSBgZm9yIGF3YWl0YCB3aWxsIGJlIGVtcHR5LlxuICAgICAqIC0gSWYgeW91ciBgZm9yIGF3YWl0YCBjb25zdW1lcyBzbG93ZXIgdGhhbiB0aGUgc3RyZWFtIHByb2R1Y2VzLFxuICAgICAqICAgZm9yIGV4YW1wbGUgYmVjYXVzZSB5b3UgYXJlIHJlbGF5aW5nIG1lc3NhZ2VzIGluIGEgc2xvdyBvcGVyYXRpb24sXG4gICAgICogICBtZXNzYWdlcyBhcmUgcXVldWVkLlxuICAgICAqL1xuICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSB7XG4gICAgICAgIC8vIGluaXQgdGhlIGl0ZXJhdG9yIHN0YXRlLCBlbmFibGluZyBwdXNoSXQoKVxuICAgICAgICBpZiAoIXRoaXMuX2l0U3RhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuX2l0U3RhdGUgPSB7IHE6IFtdIH07XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgd2UgYXJlIGNsb3NlZCwgd2UgYXJlIGRlZmluaXRlbHkgbm90IHJlY2VpdmluZyBhbnkgbW9yZSBtZXNzYWdlcy5cbiAgICAgICAgLy8gYnV0IHdlIGNhbid0IGxldCB0aGUgaXRlcmF0b3IgZ2V0IHN0dWNrLiB3ZSB3YW50IHRvIGVpdGhlcjpcbiAgICAgICAgLy8gYSkgZmluaXNoIHRoZSBuZXcgaXRlcmF0b3IgaW1tZWRpYXRlbHksIGJlY2F1c2Ugd2UgYXJlIGNvbXBsZXRlZFxuICAgICAgICAvLyBiKSByZWplY3QgdGhlIG5ldyBpdGVyYXRvciwgYmVjYXVzZSB3ZSBlcnJvcmVkXG4gICAgICAgIGlmICh0aGlzLl9jbG9zZWQgPT09IHRydWUpXG4gICAgICAgICAgICB0aGlzLnB1c2hJdCh7IHZhbHVlOiBudWxsLCBkb25lOiB0cnVlIH0pO1xuICAgICAgICBlbHNlIGlmICh0aGlzLl9jbG9zZWQgIT09IGZhbHNlKVxuICAgICAgICAgICAgdGhpcy5wdXNoSXQodGhpcy5fY2xvc2VkKTtcbiAgICAgICAgLy8gdGhlIGFzeW5jIGl0ZXJhdG9yXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IHN0YXRlID0gdGhpcy5faXRTdGF0ZTtcbiAgICAgICAgICAgICAgICBydW50aW1lXzEuYXNzZXJ0KHN0YXRlLCBcImJhZCBzdGF0ZVwiKTsgLy8gaWYgd2UgZG9uJ3QgaGF2ZSBhIHN0YXRlIGhlcmUsIGNvZGUgaXMgYnJva2VuXG4gICAgICAgICAgICAgICAgLy8gdGhlcmUgc2hvdWxkIGJlIG5vIHBlbmRpbmcgcmVzdWx0LlxuICAgICAgICAgICAgICAgIC8vIGRpZCB0aGUgY29uc3VtZXIgY2FsbCBuZXh0KCkgYmVmb3JlIHdlIHJlc29sdmVkIG91ciBwcmV2aW91cyByZXN1bHQgcHJvbWlzZT9cbiAgICAgICAgICAgICAgICBydW50aW1lXzEuYXNzZXJ0KCFzdGF0ZS5wLCBcIml0ZXJhdG9yIGNvbnRyYWN0IGJyb2tlblwiKTtcbiAgICAgICAgICAgICAgICAvLyBkaWQgd2UgcHJvZHVjZSBmYXN0ZXIgdGhhbiB0aGUgaXRlcmF0b3IgY29uc3VtZWQ/XG4gICAgICAgICAgICAgICAgLy8gcmV0dXJuIHRoZSBvbGRlc3QgcmVzdWx0IGZyb20gdGhlIHF1ZXVlLlxuICAgICAgICAgICAgICAgIGxldCBmaXJzdCA9IHN0YXRlLnEuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICBpZiAoZmlyc3QpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoXCJ2YWx1ZVwiIGluIGZpcnN0KSA/IFByb21pc2UucmVzb2x2ZShmaXJzdCkgOiBQcm9taXNlLnJlamVjdChmaXJzdCk7XG4gICAgICAgICAgICAgICAgLy8gd2UgaGF2ZSBubyByZXN1bHQgQVRNLCBidXQgd2UgcHJvbWlzZSBvbmUuXG4gICAgICAgICAgICAgICAgLy8gYXMgc29vbiBhcyB3ZSBoYXZlIGEgcmVzdWx0LCB3ZSBtdXN0IHJlc29sdmUgcHJvbWlzZS5cbiAgICAgICAgICAgICAgICBzdGF0ZS5wID0gbmV3IGRlZmVycmVkXzEuRGVmZXJyZWQoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGUucC5wcm9taXNlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLy8gXCJwdXNoXCIgYSBuZXcgaXRlcmF0b3IgcmVzdWx0LlxuICAgIC8vIHRoaXMgZWl0aGVyIHJlc29sdmVzIGEgcGVuZGluZyBwcm9taXNlLCBvciBlbnF1ZXVlcyB0aGUgcmVzdWx0LlxuICAgIHB1c2hJdChyZXN1bHQpIHtcbiAgICAgICAgbGV0IHN0YXRlID0gdGhpcy5faXRTdGF0ZTtcbiAgICAgICAgaWYgKCFzdGF0ZSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgLy8gaXMgdGhlIGNvbnN1bWVyIHdhaXRpbmcgZm9yIHVzP1xuICAgICAgICBpZiAoc3RhdGUucCkge1xuICAgICAgICAgICAgLy8geWVzLCBjb25zdW1lciBpcyB3YWl0aW5nIGZvciB0aGlzIHByb21pc2UuXG4gICAgICAgICAgICBjb25zdCBwID0gc3RhdGUucDtcbiAgICAgICAgICAgIHJ1bnRpbWVfMS5hc3NlcnQocC5zdGF0ZSA9PSBkZWZlcnJlZF8xLkRlZmVycmVkU3RhdGUuUEVORElORywgXCJpdGVyYXRvciBjb250cmFjdCBicm9rZW5cIik7XG4gICAgICAgICAgICAvLyByZXNvbHZlIHRoZSBwcm9taXNlXG4gICAgICAgICAgICAoXCJ2YWx1ZVwiIGluIHJlc3VsdCkgPyBwLnJlc29sdmUocmVzdWx0KSA6IHAucmVqZWN0KHJlc3VsdCk7XG4gICAgICAgICAgICAvLyBtdXN0IGNsZWFudXAsIG90aGVyd2lzZSBpdGVyYXRvci5uZXh0KCkgd291bGQgcGljayBpdCB1cCBhZ2Fpbi5cbiAgICAgICAgICAgIGRlbGV0ZSBzdGF0ZS5wO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gd2UgYXJlIHByb2R1Y2luZyBmYXN0ZXIgdGhhbiB0aGUgaXRlcmF0b3IgY29uc3VtZXMuXG4gICAgICAgICAgICAvLyBwdXNoIHJlc3VsdCBvbnRvIHF1ZXVlLlxuICAgICAgICAgICAgc3RhdGUucS5wdXNoKHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLlJwY091dHB1dFN0cmVhbUNvbnRyb2xsZXIgPSBScGNPdXRwdXRTdHJlYW1Db250cm9sbGVyO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5VbmFyeUNhbGwgPSB2b2lkIDA7XG4vKipcbiAqIEEgdW5hcnkgUlBDIGNhbGwuIFVuYXJ5IG1lYW5zIHRoZXJlIGlzIGV4YWN0bHkgb25lIGlucHV0IG1lc3NhZ2UgYW5kXG4gKiBleGFjdGx5IG9uZSBvdXRwdXQgbWVzc2FnZSB1bmxlc3MgYW4gZXJyb3Igb2NjdXJyZWQuXG4gKi9cbmNsYXNzIFVuYXJ5Q2FsbCB7XG4gICAgY29uc3RydWN0b3IobWV0aG9kLCByZXF1ZXN0SGVhZGVycywgcmVxdWVzdCwgaGVhZGVycywgcmVzcG9uc2UsIHN0YXR1cywgdHJhaWxlcnMpIHtcbiAgICAgICAgdGhpcy5tZXRob2QgPSBtZXRob2Q7XG4gICAgICAgIHRoaXMucmVxdWVzdEhlYWRlcnMgPSByZXF1ZXN0SGVhZGVycztcbiAgICAgICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICAgICAgdGhpcy5oZWFkZXJzID0gaGVhZGVycztcbiAgICAgICAgdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnN0YXR1cyA9IHN0YXR1cztcbiAgICAgICAgdGhpcy50cmFpbGVycyA9IHRyYWlsZXJzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJZiB5b3UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiB0aGUgZmluYWwgb3V0Y29tZSBvZiB0aGlzIGNhbGwsXG4gICAgICogeW91IGNhbiBhd2FpdCBpdCB0byByZWNlaXZlIGEgYEZpbmlzaGVkVW5hcnlDYWxsYC5cbiAgICAgKi9cbiAgICB0aGVuKG9uZnVsZmlsbGVkLCBvbnJlamVjdGVkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb21pc2VGaW5pc2hlZCgpLnRoZW4odmFsdWUgPT4gb25mdWxmaWxsZWQgPyBQcm9taXNlLnJlc29sdmUob25mdWxmaWxsZWQodmFsdWUpKSA6IHZhbHVlLCByZWFzb24gPT4gb25yZWplY3RlZCA/IFByb21pc2UucmVzb2x2ZShvbnJlamVjdGVkKHJlYXNvbikpIDogUHJvbWlzZS5yZWplY3QocmVhc29uKSk7XG4gICAgfVxuICAgIHByb21pc2VGaW5pc2hlZCgpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGxldCBbaGVhZGVycywgcmVzcG9uc2UsIHN0YXR1cywgdHJhaWxlcnNdID0geWllbGQgUHJvbWlzZS5hbGwoW3RoaXMuaGVhZGVycywgdGhpcy5yZXNwb25zZSwgdGhpcy5zdGF0dXMsIHRoaXMudHJhaWxlcnNdKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiB0aGlzLm1ldGhvZCxcbiAgICAgICAgICAgICAgICByZXF1ZXN0SGVhZGVyczogdGhpcy5yZXF1ZXN0SGVhZGVycyxcbiAgICAgICAgICAgICAgICByZXF1ZXN0OiB0aGlzLnJlcXVlc3QsXG4gICAgICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICAgICAgICByZXNwb25zZSxcbiAgICAgICAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgICAgICAgdHJhaWxlcnNcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuVW5hcnlDYWxsID0gVW5hcnlDYWxsO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TZXJ2ZXJTdHJlYW1pbmdDYWxsID0gdm9pZCAwO1xuLyoqXG4gKiBBIHNlcnZlciBzdHJlYW1pbmcgUlBDIGNhbGwuIFRoZSBjbGllbnQgcHJvdmlkZXMgZXhhY3RseSBvbmUgaW5wdXQgbWVzc2FnZVxuICogYnV0IHRoZSBzZXJ2ZXIgbWF5IHJlc3BvbmQgd2l0aCAwLCAxLCBvciBtb3JlIG1lc3NhZ2VzLlxuICovXG5jbGFzcyBTZXJ2ZXJTdHJlYW1pbmdDYWxsIHtcbiAgICBjb25zdHJ1Y3RvcihtZXRob2QsIHJlcXVlc3RIZWFkZXJzLCByZXF1ZXN0LCBoZWFkZXJzLCByZXNwb25zZSwgc3RhdHVzLCB0cmFpbGVycykge1xuICAgICAgICB0aGlzLm1ldGhvZCA9IG1ldGhvZDtcbiAgICAgICAgdGhpcy5yZXF1ZXN0SGVhZGVycyA9IHJlcXVlc3RIZWFkZXJzO1xuICAgICAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgICAgICB0aGlzLmhlYWRlcnMgPSBoZWFkZXJzO1xuICAgICAgICB0aGlzLnJlc3BvbnNlcyA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnN0YXR1cyA9IHN0YXR1cztcbiAgICAgICAgdGhpcy50cmFpbGVycyA9IHRyYWlsZXJzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbnN0ZWFkIG9mIGF3YWl0aW5nIHRoZSByZXNwb25zZSBzdGF0dXMgYW5kIHRyYWlsZXJzLCB5b3UgY2FuXG4gICAgICoganVzdCBhcyB3ZWxsIGF3YWl0IHRoaXMgY2FsbCBpdHNlbGYgdG8gcmVjZWl2ZSB0aGUgc2VydmVyIG91dGNvbWUuXG4gICAgICogWW91IHNob3VsZCBmaXJzdCBzZXR1cCBzb21lIGxpc3RlbmVycyB0byB0aGUgYHJlcXVlc3RgIHRvXG4gICAgICogc2VlIHRoZSBhY3R1YWwgbWVzc2FnZXMgdGhlIHNlcnZlciByZXBsaWVkIHdpdGguXG4gICAgICovXG4gICAgdGhlbihvbmZ1bGZpbGxlZCwgb25yZWplY3RlZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9taXNlRmluaXNoZWQoKS50aGVuKHZhbHVlID0+IG9uZnVsZmlsbGVkID8gUHJvbWlzZS5yZXNvbHZlKG9uZnVsZmlsbGVkKHZhbHVlKSkgOiB2YWx1ZSwgcmVhc29uID0+IG9ucmVqZWN0ZWQgPyBQcm9taXNlLnJlc29sdmUob25yZWplY3RlZChyZWFzb24pKSA6IFByb21pc2UucmVqZWN0KHJlYXNvbikpO1xuICAgIH1cbiAgICBwcm9taXNlRmluaXNoZWQoKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBsZXQgW2hlYWRlcnMsIHN0YXR1cywgdHJhaWxlcnNdID0geWllbGQgUHJvbWlzZS5hbGwoW3RoaXMuaGVhZGVycywgdGhpcy5zdGF0dXMsIHRoaXMudHJhaWxlcnNdKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiB0aGlzLm1ldGhvZCxcbiAgICAgICAgICAgICAgICByZXF1ZXN0SGVhZGVyczogdGhpcy5yZXF1ZXN0SGVhZGVycyxcbiAgICAgICAgICAgICAgICByZXF1ZXN0OiB0aGlzLnJlcXVlc3QsXG4gICAgICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgICAgICAgdHJhaWxlcnMsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnRzLlNlcnZlclN0cmVhbWluZ0NhbGwgPSBTZXJ2ZXJTdHJlYW1pbmdDYWxsO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5DbGllbnRTdHJlYW1pbmdDYWxsID0gdm9pZCAwO1xuLyoqXG4gKiBBIGNsaWVudCBzdHJlYW1pbmcgUlBDIGNhbGwuIFRoaXMgbWVhbnMgdGhhdCB0aGUgY2xpZW50cyBzZW5kcyAwLCAxLCBvclxuICogbW9yZSBtZXNzYWdlcyB0byB0aGUgc2VydmVyLCBhbmQgdGhlIHNlcnZlciByZXBsaWVzIHdpdGggZXhhY3RseSBvbmVcbiAqIG1lc3NhZ2UuXG4gKi9cbmNsYXNzIENsaWVudFN0cmVhbWluZ0NhbGwge1xuICAgIGNvbnN0cnVjdG9yKG1ldGhvZCwgcmVxdWVzdEhlYWRlcnMsIHJlcXVlc3QsIGhlYWRlcnMsIHJlc3BvbnNlLCBzdGF0dXMsIHRyYWlsZXJzKSB7XG4gICAgICAgIHRoaXMubWV0aG9kID0gbWV0aG9kO1xuICAgICAgICB0aGlzLnJlcXVlc3RIZWFkZXJzID0gcmVxdWVzdEhlYWRlcnM7XG4gICAgICAgIHRoaXMucmVxdWVzdHMgPSByZXF1ZXN0O1xuICAgICAgICB0aGlzLmhlYWRlcnMgPSBoZWFkZXJzO1xuICAgICAgICB0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzO1xuICAgICAgICB0aGlzLnRyYWlsZXJzID0gdHJhaWxlcnM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEluc3RlYWQgb2YgYXdhaXRpbmcgdGhlIHJlc3BvbnNlIHN0YXR1cyBhbmQgdHJhaWxlcnMsIHlvdSBjYW5cbiAgICAgKiBqdXN0IGFzIHdlbGwgYXdhaXQgdGhpcyBjYWxsIGl0c2VsZiB0byByZWNlaXZlIHRoZSBzZXJ2ZXIgb3V0Y29tZS5cbiAgICAgKiBOb3RlIHRoYXQgaXQgbWF5IHN0aWxsIGJlIHZhbGlkIHRvIHNlbmQgbW9yZSByZXF1ZXN0IG1lc3NhZ2VzLlxuICAgICAqL1xuICAgIHRoZW4ob25mdWxmaWxsZWQsIG9ucmVqZWN0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvbWlzZUZpbmlzaGVkKCkudGhlbih2YWx1ZSA9PiBvbmZ1bGZpbGxlZCA/IFByb21pc2UucmVzb2x2ZShvbmZ1bGZpbGxlZCh2YWx1ZSkpIDogdmFsdWUsIHJlYXNvbiA9PiBvbnJlamVjdGVkID8gUHJvbWlzZS5yZXNvbHZlKG9ucmVqZWN0ZWQocmVhc29uKSkgOiBQcm9taXNlLnJlamVjdChyZWFzb24pKTtcbiAgICB9XG4gICAgcHJvbWlzZUZpbmlzaGVkKCkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgbGV0IFtoZWFkZXJzLCByZXNwb25zZSwgc3RhdHVzLCB0cmFpbGVyc10gPSB5aWVsZCBQcm9taXNlLmFsbChbdGhpcy5oZWFkZXJzLCB0aGlzLnJlc3BvbnNlLCB0aGlzLnN0YXR1cywgdGhpcy50cmFpbGVyc10pO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6IHRoaXMubWV0aG9kLFxuICAgICAgICAgICAgICAgIHJlcXVlc3RIZWFkZXJzOiB0aGlzLnJlcXVlc3RIZWFkZXJzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgICAgICAgIHRyYWlsZXJzXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnRzLkNsaWVudFN0cmVhbWluZ0NhbGwgPSBDbGllbnRTdHJlYW1pbmdDYWxsO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5EdXBsZXhTdHJlYW1pbmdDYWxsID0gdm9pZCAwO1xuLyoqXG4gKiBBIGR1cGxleCBzdHJlYW1pbmcgUlBDIGNhbGwuIFRoaXMgbWVhbnMgdGhhdCB0aGUgY2xpZW50cyBzZW5kcyBhblxuICogYXJiaXRyYXJ5IGFtb3VudCBvZiBtZXNzYWdlcyB0byB0aGUgc2VydmVyLCB3aGlsZSBhdCB0aGUgc2FtZSB0aW1lLFxuICogdGhlIHNlcnZlciBzZW5kcyBhbiBhcmJpdHJhcnkgYW1vdW50IG9mIG1lc3NhZ2VzIHRvIHRoZSBjbGllbnQuXG4gKi9cbmNsYXNzIER1cGxleFN0cmVhbWluZ0NhbGwge1xuICAgIGNvbnN0cnVjdG9yKG1ldGhvZCwgcmVxdWVzdEhlYWRlcnMsIHJlcXVlc3QsIGhlYWRlcnMsIHJlc3BvbnNlLCBzdGF0dXMsIHRyYWlsZXJzKSB7XG4gICAgICAgIHRoaXMubWV0aG9kID0gbWV0aG9kO1xuICAgICAgICB0aGlzLnJlcXVlc3RIZWFkZXJzID0gcmVxdWVzdEhlYWRlcnM7XG4gICAgICAgIHRoaXMucmVxdWVzdHMgPSByZXF1ZXN0O1xuICAgICAgICB0aGlzLmhlYWRlcnMgPSBoZWFkZXJzO1xuICAgICAgICB0aGlzLnJlc3BvbnNlcyA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnN0YXR1cyA9IHN0YXR1cztcbiAgICAgICAgdGhpcy50cmFpbGVycyA9IHRyYWlsZXJzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbnN0ZWFkIG9mIGF3YWl0aW5nIHRoZSByZXNwb25zZSBzdGF0dXMgYW5kIHRyYWlsZXJzLCB5b3UgY2FuXG4gICAgICoganVzdCBhcyB3ZWxsIGF3YWl0IHRoaXMgY2FsbCBpdHNlbGYgdG8gcmVjZWl2ZSB0aGUgc2VydmVyIG91dGNvbWUuXG4gICAgICogTm90ZSB0aGF0IGl0IG1heSBzdGlsbCBiZSB2YWxpZCB0byBzZW5kIG1vcmUgcmVxdWVzdCBtZXNzYWdlcy5cbiAgICAgKi9cbiAgICB0aGVuKG9uZnVsZmlsbGVkLCBvbnJlamVjdGVkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb21pc2VGaW5pc2hlZCgpLnRoZW4odmFsdWUgPT4gb25mdWxmaWxsZWQgPyBQcm9taXNlLnJlc29sdmUob25mdWxmaWxsZWQodmFsdWUpKSA6IHZhbHVlLCByZWFzb24gPT4gb25yZWplY3RlZCA/IFByb21pc2UucmVzb2x2ZShvbnJlamVjdGVkKHJlYXNvbikpIDogUHJvbWlzZS5yZWplY3QocmVhc29uKSk7XG4gICAgfVxuICAgIHByb21pc2VGaW5pc2hlZCgpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGxldCBbaGVhZGVycywgc3RhdHVzLCB0cmFpbGVyc10gPSB5aWVsZCBQcm9taXNlLmFsbChbdGhpcy5oZWFkZXJzLCB0aGlzLnN0YXR1cywgdGhpcy50cmFpbGVyc10pO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6IHRoaXMubWV0aG9kLFxuICAgICAgICAgICAgICAgIHJlcXVlc3RIZWFkZXJzOiB0aGlzLnJlcXVlc3RIZWFkZXJzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgICAgICAgIHRyYWlsZXJzLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0cy5EdXBsZXhTdHJlYW1pbmdDYWxsID0gRHVwbGV4U3RyZWFtaW5nQ2FsbDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVGVzdFRyYW5zcG9ydCA9IHZvaWQgMDtcbmNvbnN0IHJwY19lcnJvcl8xID0gcmVxdWlyZShcIi4vcnBjLWVycm9yXCIpO1xuY29uc3QgcnVudGltZV8xID0gcmVxdWlyZShcIkBwcm90b2J1Zi10cy9ydW50aW1lXCIpO1xuY29uc3QgcnBjX291dHB1dF9zdHJlYW1fMSA9IHJlcXVpcmUoXCIuL3JwYy1vdXRwdXQtc3RyZWFtXCIpO1xuY29uc3QgcnBjX29wdGlvbnNfMSA9IHJlcXVpcmUoXCIuL3JwYy1vcHRpb25zXCIpO1xuY29uc3QgdW5hcnlfY2FsbF8xID0gcmVxdWlyZShcIi4vdW5hcnktY2FsbFwiKTtcbmNvbnN0IHNlcnZlcl9zdHJlYW1pbmdfY2FsbF8xID0gcmVxdWlyZShcIi4vc2VydmVyLXN0cmVhbWluZy1jYWxsXCIpO1xuY29uc3QgY2xpZW50X3N0cmVhbWluZ19jYWxsXzEgPSByZXF1aXJlKFwiLi9jbGllbnQtc3RyZWFtaW5nLWNhbGxcIik7XG5jb25zdCBkdXBsZXhfc3RyZWFtaW5nX2NhbGxfMSA9IHJlcXVpcmUoXCIuL2R1cGxleC1zdHJlYW1pbmctY2FsbFwiKTtcbi8qKlxuICogVHJhbnNwb3J0IGZvciB0ZXN0aW5nLlxuICovXG5jbGFzcyBUZXN0VHJhbnNwb3J0IHtcbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplIHdpdGggbW9jayBkYXRhLiBPbWl0dGVkIGZpZWxkcyBoYXZlIGRlZmF1bHQgdmFsdWUuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoZGF0YSkge1xuICAgICAgICAvKipcbiAgICAgICAgICogU3VwcHJlc3Mgd2FybmluZyAvIGVycm9yIGFib3V0IHVuY2F1Z2h0IHJlamVjdGlvbnMgb2ZcbiAgICAgICAgICogXCJzdGF0dXNcIiBhbmQgXCJ0cmFpbGVyc1wiLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5zdXBwcmVzc1VuY2F1Z2h0UmVqZWN0aW9ucyA9IHRydWU7XG4gICAgICAgIHRoaXMuaGVhZGVyRGVsYXkgPSAxMDtcbiAgICAgICAgdGhpcy5yZXNwb25zZURlbGF5ID0gNTA7XG4gICAgICAgIHRoaXMuYmV0d2VlblJlc3BvbnNlRGVsYXkgPSAxMDtcbiAgICAgICAgdGhpcy5hZnRlclJlc3BvbnNlRGVsYXkgPSAxMDtcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YSAhPT0gbnVsbCAmJiBkYXRhICE9PSB2b2lkIDAgPyBkYXRhIDoge307XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNlbnQgbWVzc2FnZShzKSBkdXJpbmcgdGhlIGxhc3Qgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGdldCBzZW50TWVzc2FnZXMoKSB7XG4gICAgICAgIGlmICh0aGlzLmxhc3RJbnB1dCBpbnN0YW5jZW9mIFRlc3RJbnB1dFN0cmVhbSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubGFzdElucHV0LnNlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHRoaXMubGFzdElucHV0ID09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIHJldHVybiBbdGhpcy5sYXN0SW5wdXQuc2luZ2xlXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNlbmRpbmcgbWVzc2FnZShzKSBjb21wbGV0ZWQ/XG4gICAgICovXG4gICAgZ2V0IHNlbmRDb21wbGV0ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMubGFzdElucHV0IGluc3RhbmNlb2YgVGVzdElucHV0U3RyZWFtKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sYXN0SW5wdXQuY29tcGxldGVkO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiB0aGlzLmxhc3RJbnB1dCA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8vIENyZWF0ZXMgYSBwcm9taXNlIGZvciByZXNwb25zZSBoZWFkZXJzIGZyb20gdGhlIG1vY2sgZGF0YS5cbiAgICBwcm9taXNlSGVhZGVycygpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBoZWFkZXJzID0gKF9hID0gdGhpcy5kYXRhLmhlYWRlcnMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFRlc3RUcmFuc3BvcnQuZGVmYXVsdEhlYWRlcnM7XG4gICAgICAgIHJldHVybiBoZWFkZXJzIGluc3RhbmNlb2YgcnBjX2Vycm9yXzEuUnBjRXJyb3JcbiAgICAgICAgICAgID8gUHJvbWlzZS5yZWplY3QoaGVhZGVycylcbiAgICAgICAgICAgIDogUHJvbWlzZS5yZXNvbHZlKGhlYWRlcnMpO1xuICAgIH1cbiAgICAvLyBDcmVhdGVzIGEgcHJvbWlzZSBmb3IgYSBzaW5nbGUsIHZhbGlkLCBtZXNzYWdlIGZyb20gdGhlIG1vY2sgZGF0YS5cbiAgICBwcm9taXNlU2luZ2xlUmVzcG9uc2UobWV0aG9kKSB7XG4gICAgICAgIGlmICh0aGlzLmRhdGEucmVzcG9uc2UgaW5zdGFuY2VvZiBycGNfZXJyb3JfMS5ScGNFcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHRoaXMuZGF0YS5yZXNwb25zZSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHI7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZGF0YS5yZXNwb25zZSkpIHtcbiAgICAgICAgICAgIHJ1bnRpbWVfMS5hc3NlcnQodGhpcy5kYXRhLnJlc3BvbnNlLmxlbmd0aCA+IDApO1xuICAgICAgICAgICAgciA9IHRoaXMuZGF0YS5yZXNwb25zZVswXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmRhdGEucmVzcG9uc2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgciA9IHRoaXMuZGF0YS5yZXNwb25zZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHIgPSBtZXRob2QuTy5jcmVhdGUoKTtcbiAgICAgICAgfVxuICAgICAgICBydW50aW1lXzEuYXNzZXJ0KG1ldGhvZC5PLmlzKHIpKTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUHVzaGVzIHJlc3BvbnNlIG1lc3NhZ2VzIGZyb20gdGhlIG1vY2sgZGF0YSB0byB0aGUgb3V0cHV0IHN0cmVhbS5cbiAgICAgKiBJZiBhbiBlcnJvciByZXNwb25zZSwgc3RhdHVzIG9yIHRyYWlsZXJzIGFyZSBtb2NrZWQsIHRoZSBzdHJlYW0gaXNcbiAgICAgKiBjbG9zZWQgd2l0aCB0aGUgcmVzcGVjdGl2ZSBlcnJvci5cbiAgICAgKiBPdGhlcndpc2UsIHN0cmVhbSBpcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlxuICAgICAqXG4gICAgICogVGhlIHJldHVybmVkIHByb21pc2UgcmVzb2x2ZXMgd2hlbiB0aGUgc3RyZWFtIGlzIGNsb3NlZC4gSXQgc2hvdWxkXG4gICAgICogbm90IHJlamVjdC4gSWYgaXQgZG9lcywgY29kZSBpcyBicm9rZW4uXG4gICAgICovXG4gICAgc3RyZWFtUmVzcG9uc2VzKG1ldGhvZCwgc3RyZWFtLCBhYm9ydCkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgLy8gbm9ybWFsaXplIFwiZGF0YS5yZXNwb25zZVwiIGludG8gYW4gYXJyYXkgb2YgdmFsaWQgb3V0cHV0IG1lc3NhZ2VzXG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlcyA9IFtdO1xuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YS5yZXNwb25zZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZXMucHVzaChtZXRob2QuTy5jcmVhdGUoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZGF0YS5yZXNwb25zZSkpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBtc2cgb2YgdGhpcy5kYXRhLnJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bnRpbWVfMS5hc3NlcnQobWV0aG9kLk8uaXMobXNnKSk7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VzLnB1c2gobXNnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICghKHRoaXMuZGF0YS5yZXNwb25zZSBpbnN0YW5jZW9mIHJwY19lcnJvcl8xLlJwY0Vycm9yKSkge1xuICAgICAgICAgICAgICAgIHJ1bnRpbWVfMS5hc3NlcnQobWV0aG9kLk8uaXModGhpcy5kYXRhLnJlc3BvbnNlKSk7XG4gICAgICAgICAgICAgICAgbWVzc2FnZXMucHVzaCh0aGlzLmRhdGEucmVzcG9uc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gc3RhcnQgdGhlIHN0cmVhbSB3aXRoIGFuIGluaXRpYWwgZGVsYXkuXG4gICAgICAgICAgICAvLyBpZiB0aGUgcmVxdWVzdCBpcyBjYW5jZWxsZWQsIG5vdGlmeSgpIGVycm9yIGFuZCBleGl0LlxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB5aWVsZCBkZWxheSh0aGlzLnJlc3BvbnNlRGVsYXksIGFib3J0KSh1bmRlZmluZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgc3RyZWFtLm5vdGlmeUVycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBpZiBlcnJvciByZXNwb25zZSB3YXMgbW9ja2VkLCBub3RpZnkoKSBlcnJvciAoc3RyZWFtIGlzIG5vdyBjbG9zZWQgd2l0aCBlcnJvcikgYW5kIGV4aXQuXG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhLnJlc3BvbnNlIGluc3RhbmNlb2YgcnBjX2Vycm9yXzEuUnBjRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBzdHJlYW0ubm90aWZ5RXJyb3IodGhpcy5kYXRhLnJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyByZWd1bGFyIHJlc3BvbnNlIG1lc3NhZ2VzIHdlcmUgbW9ja2VkLiBub3RpZnkoKSB0aGVtLlxuICAgICAgICAgICAgZm9yIChsZXQgbXNnIG9mIG1lc3NhZ2VzKSB7XG4gICAgICAgICAgICAgICAgc3RyZWFtLm5vdGlmeU1lc3NhZ2UobXNnKTtcbiAgICAgICAgICAgICAgICAvLyBhZGQgYSBzaG9ydCBkZWxheSBiZXR3ZWVuIHJlc3BvbnNlc1xuICAgICAgICAgICAgICAgIC8vIGlmIHRoZSByZXF1ZXN0IGlzIGNhbmNlbGxlZCwgbm90aWZ5KCkgZXJyb3IgYW5kIGV4aXQuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgZGVsYXkodGhpcy5iZXR3ZWVuUmVzcG9uc2VEZWxheSwgYWJvcnQpKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBzdHJlYW0ubm90aWZ5RXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZXJyb3Igc3RhdHVzIHdhcyBtb2NrZWQsIG5vdGlmeSgpIGVycm9yIChzdHJlYW0gaXMgbm93IGNsb3NlZCB3aXRoIGVycm9yKSBhbmQgZXhpdC5cbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGEuc3RhdHVzIGluc3RhbmNlb2YgcnBjX2Vycm9yXzEuUnBjRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBzdHJlYW0ubm90aWZ5RXJyb3IodGhpcy5kYXRhLnN0YXR1cyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZXJyb3IgdHJhaWxlcnMgd2VyZSBtb2NrZWQsIG5vdGlmeSgpIGVycm9yIChzdHJlYW0gaXMgbm93IGNsb3NlZCB3aXRoIGVycm9yKSBhbmQgZXhpdC5cbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGEudHJhaWxlcnMgaW5zdGFuY2VvZiBycGNfZXJyb3JfMS5ScGNFcnJvcikge1xuICAgICAgICAgICAgICAgIHN0cmVhbS5ub3RpZnlFcnJvcih0aGlzLmRhdGEudHJhaWxlcnMpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHN0cmVhbSBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XG4gICAgICAgICAgICBzdHJlYW0ubm90aWZ5Q29tcGxldGUoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIENyZWF0ZXMgYSBwcm9taXNlIGZvciByZXNwb25zZSBzdGF0dXMgZnJvbSB0aGUgbW9jayBkYXRhLlxuICAgIHByb21pc2VTdGF0dXMoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gKF9hID0gdGhpcy5kYXRhLnN0YXR1cykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogVGVzdFRyYW5zcG9ydC5kZWZhdWx0U3RhdHVzO1xuICAgICAgICByZXR1cm4gc3RhdHVzIGluc3RhbmNlb2YgcnBjX2Vycm9yXzEuUnBjRXJyb3JcbiAgICAgICAgICAgID8gUHJvbWlzZS5yZWplY3Qoc3RhdHVzKVxuICAgICAgICAgICAgOiBQcm9taXNlLnJlc29sdmUoc3RhdHVzKTtcbiAgICB9XG4gICAgLy8gQ3JlYXRlcyBhIHByb21pc2UgZm9yIHJlc3BvbnNlIHRyYWlsZXJzIGZyb20gdGhlIG1vY2sgZGF0YS5cbiAgICBwcm9taXNlVHJhaWxlcnMoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgdHJhaWxlcnMgPSAoX2EgPSB0aGlzLmRhdGEudHJhaWxlcnMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFRlc3RUcmFuc3BvcnQuZGVmYXVsdFRyYWlsZXJzO1xuICAgICAgICByZXR1cm4gdHJhaWxlcnMgaW5zdGFuY2VvZiBycGNfZXJyb3JfMS5ScGNFcnJvclxuICAgICAgICAgICAgPyBQcm9taXNlLnJlamVjdCh0cmFpbGVycylcbiAgICAgICAgICAgIDogUHJvbWlzZS5yZXNvbHZlKHRyYWlsZXJzKTtcbiAgICB9XG4gICAgbWF5YmVTdXBwcmVzc1VuY2F1Z2h0KC4uLnByb21pc2UpIHtcbiAgICAgICAgaWYgKHRoaXMuc3VwcHJlc3NVbmNhdWdodFJlamVjdGlvbnMpIHtcbiAgICAgICAgICAgIGZvciAobGV0IHAgb2YgcHJvbWlzZSkge1xuICAgICAgICAgICAgICAgIHAuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIG1lcmdlT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBycGNfb3B0aW9uc18xLm1lcmdlUnBjT3B0aW9ucyh7fSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIHVuYXJ5KG1ldGhvZCwgaW5wdXQsIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCByZXF1ZXN0SGVhZGVycyA9IChfYSA9IG9wdGlvbnMubWV0YSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoge30sIGhlYWRlcnNQcm9taXNlID0gdGhpcy5wcm9taXNlSGVhZGVycygpXG4gICAgICAgICAgICAudGhlbihkZWxheSh0aGlzLmhlYWRlckRlbGF5LCBvcHRpb25zLmFib3J0KSksIHJlc3BvbnNlUHJvbWlzZSA9IGhlYWRlcnNQcm9taXNlXG4gICAgICAgICAgICAuY2F0Y2goXyA9PiB7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbihkZWxheSh0aGlzLnJlc3BvbnNlRGVsYXksIG9wdGlvbnMuYWJvcnQpKVxuICAgICAgICAgICAgLnRoZW4oXyA9PiB0aGlzLnByb21pc2VTaW5nbGVSZXNwb25zZShtZXRob2QpKSwgc3RhdHVzUHJvbWlzZSA9IHJlc3BvbnNlUHJvbWlzZVxuICAgICAgICAgICAgLmNhdGNoKF8gPT4ge1xuICAgICAgICB9KVxuICAgICAgICAgICAgLnRoZW4oZGVsYXkodGhpcy5hZnRlclJlc3BvbnNlRGVsYXksIG9wdGlvbnMuYWJvcnQpKVxuICAgICAgICAgICAgLnRoZW4oXyA9PiB0aGlzLnByb21pc2VTdGF0dXMoKSksIHRyYWlsZXJzUHJvbWlzZSA9IHJlc3BvbnNlUHJvbWlzZVxuICAgICAgICAgICAgLmNhdGNoKF8gPT4ge1xuICAgICAgICB9KVxuICAgICAgICAgICAgLnRoZW4oZGVsYXkodGhpcy5hZnRlclJlc3BvbnNlRGVsYXksIG9wdGlvbnMuYWJvcnQpKVxuICAgICAgICAgICAgLnRoZW4oXyA9PiB0aGlzLnByb21pc2VUcmFpbGVycygpKTtcbiAgICAgICAgdGhpcy5tYXliZVN1cHByZXNzVW5jYXVnaHQoc3RhdHVzUHJvbWlzZSwgdHJhaWxlcnNQcm9taXNlKTtcbiAgICAgICAgdGhpcy5sYXN0SW5wdXQgPSB7IHNpbmdsZTogaW5wdXQgfTtcbiAgICAgICAgcmV0dXJuIG5ldyB1bmFyeV9jYWxsXzEuVW5hcnlDYWxsKG1ldGhvZCwgcmVxdWVzdEhlYWRlcnMsIGlucHV0LCBoZWFkZXJzUHJvbWlzZSwgcmVzcG9uc2VQcm9taXNlLCBzdGF0dXNQcm9taXNlLCB0cmFpbGVyc1Byb21pc2UpO1xuICAgIH1cbiAgICBzZXJ2ZXJTdHJlYW1pbmcobWV0aG9kLCBpbnB1dCwgb3B0aW9ucykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzID0gKF9hID0gb3B0aW9ucy5tZXRhKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB7fSwgaGVhZGVyc1Byb21pc2UgPSB0aGlzLnByb21pc2VIZWFkZXJzKClcbiAgICAgICAgICAgIC50aGVuKGRlbGF5KHRoaXMuaGVhZGVyRGVsYXksIG9wdGlvbnMuYWJvcnQpKSwgb3V0cHV0U3RyZWFtID0gbmV3IHJwY19vdXRwdXRfc3RyZWFtXzEuUnBjT3V0cHV0U3RyZWFtQ29udHJvbGxlcigpLCByZXNwb25zZVN0cmVhbUNsb3NlZFByb21pc2UgPSBoZWFkZXJzUHJvbWlzZVxuICAgICAgICAgICAgLnRoZW4oZGVsYXkodGhpcy5yZXNwb25zZURlbGF5LCBvcHRpb25zLmFib3J0KSlcbiAgICAgICAgICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbigoKSA9PiB0aGlzLnN0cmVhbVJlc3BvbnNlcyhtZXRob2QsIG91dHB1dFN0cmVhbSwgb3B0aW9ucy5hYm9ydCkpXG4gICAgICAgICAgICAudGhlbihkZWxheSh0aGlzLmFmdGVyUmVzcG9uc2VEZWxheSwgb3B0aW9ucy5hYm9ydCkpLCBzdGF0dXNQcm9taXNlID0gcmVzcG9uc2VTdHJlYW1DbG9zZWRQcm9taXNlXG4gICAgICAgICAgICAudGhlbigoKSA9PiB0aGlzLnByb21pc2VTdGF0dXMoKSksIHRyYWlsZXJzUHJvbWlzZSA9IHJlc3BvbnNlU3RyZWFtQ2xvc2VkUHJvbWlzZVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5wcm9taXNlVHJhaWxlcnMoKSk7XG4gICAgICAgIHRoaXMubWF5YmVTdXBwcmVzc1VuY2F1Z2h0KHN0YXR1c1Byb21pc2UsIHRyYWlsZXJzUHJvbWlzZSk7XG4gICAgICAgIHRoaXMubGFzdElucHV0ID0geyBzaW5nbGU6IGlucHV0IH07XG4gICAgICAgIHJldHVybiBuZXcgc2VydmVyX3N0cmVhbWluZ19jYWxsXzEuU2VydmVyU3RyZWFtaW5nQ2FsbChtZXRob2QsIHJlcXVlc3RIZWFkZXJzLCBpbnB1dCwgaGVhZGVyc1Byb21pc2UsIG91dHB1dFN0cmVhbSwgc3RhdHVzUHJvbWlzZSwgdHJhaWxlcnNQcm9taXNlKTtcbiAgICB9XG4gICAgY2xpZW50U3RyZWFtaW5nKG1ldGhvZCwgb3B0aW9ucykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzID0gKF9hID0gb3B0aW9ucy5tZXRhKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB7fSwgaGVhZGVyc1Byb21pc2UgPSB0aGlzLnByb21pc2VIZWFkZXJzKClcbiAgICAgICAgICAgIC50aGVuKGRlbGF5KHRoaXMuaGVhZGVyRGVsYXksIG9wdGlvbnMuYWJvcnQpKSwgcmVzcG9uc2VQcm9taXNlID0gaGVhZGVyc1Byb21pc2VcbiAgICAgICAgICAgIC5jYXRjaChfID0+IHtcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuKGRlbGF5KHRoaXMucmVzcG9uc2VEZWxheSwgb3B0aW9ucy5hYm9ydCkpXG4gICAgICAgICAgICAudGhlbihfID0+IHRoaXMucHJvbWlzZVNpbmdsZVJlc3BvbnNlKG1ldGhvZCkpLCBzdGF0dXNQcm9taXNlID0gcmVzcG9uc2VQcm9taXNlXG4gICAgICAgICAgICAuY2F0Y2goXyA9PiB7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbihkZWxheSh0aGlzLmFmdGVyUmVzcG9uc2VEZWxheSwgb3B0aW9ucy5hYm9ydCkpXG4gICAgICAgICAgICAudGhlbihfID0+IHRoaXMucHJvbWlzZVN0YXR1cygpKSwgdHJhaWxlcnNQcm9taXNlID0gcmVzcG9uc2VQcm9taXNlXG4gICAgICAgICAgICAuY2F0Y2goXyA9PiB7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbihkZWxheSh0aGlzLmFmdGVyUmVzcG9uc2VEZWxheSwgb3B0aW9ucy5hYm9ydCkpXG4gICAgICAgICAgICAudGhlbihfID0+IHRoaXMucHJvbWlzZVRyYWlsZXJzKCkpO1xuICAgICAgICB0aGlzLm1heWJlU3VwcHJlc3NVbmNhdWdodChzdGF0dXNQcm9taXNlLCB0cmFpbGVyc1Byb21pc2UpO1xuICAgICAgICB0aGlzLmxhc3RJbnB1dCA9IG5ldyBUZXN0SW5wdXRTdHJlYW0odGhpcy5kYXRhLCBvcHRpb25zLmFib3J0KTtcbiAgICAgICAgcmV0dXJuIG5ldyBjbGllbnRfc3RyZWFtaW5nX2NhbGxfMS5DbGllbnRTdHJlYW1pbmdDYWxsKG1ldGhvZCwgcmVxdWVzdEhlYWRlcnMsIHRoaXMubGFzdElucHV0LCBoZWFkZXJzUHJvbWlzZSwgcmVzcG9uc2VQcm9taXNlLCBzdGF0dXNQcm9taXNlLCB0cmFpbGVyc1Byb21pc2UpO1xuICAgIH1cbiAgICBkdXBsZXgobWV0aG9kLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgcmVxdWVzdEhlYWRlcnMgPSAoX2EgPSBvcHRpb25zLm1ldGEpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHt9LCBoZWFkZXJzUHJvbWlzZSA9IHRoaXMucHJvbWlzZUhlYWRlcnMoKVxuICAgICAgICAgICAgLnRoZW4oZGVsYXkodGhpcy5oZWFkZXJEZWxheSwgb3B0aW9ucy5hYm9ydCkpLCBvdXRwdXRTdHJlYW0gPSBuZXcgcnBjX291dHB1dF9zdHJlYW1fMS5ScGNPdXRwdXRTdHJlYW1Db250cm9sbGVyKCksIHJlc3BvbnNlU3RyZWFtQ2xvc2VkUHJvbWlzZSA9IGhlYWRlcnNQcm9taXNlXG4gICAgICAgICAgICAudGhlbihkZWxheSh0aGlzLnJlc3BvbnNlRGVsYXksIG9wdGlvbnMuYWJvcnQpKVxuICAgICAgICAgICAgLmNhdGNoKCgpID0+IHtcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHRoaXMuc3RyZWFtUmVzcG9uc2VzKG1ldGhvZCwgb3V0cHV0U3RyZWFtLCBvcHRpb25zLmFib3J0KSlcbiAgICAgICAgICAgIC50aGVuKGRlbGF5KHRoaXMuYWZ0ZXJSZXNwb25zZURlbGF5LCBvcHRpb25zLmFib3J0KSksIHN0YXR1c1Byb21pc2UgPSByZXNwb25zZVN0cmVhbUNsb3NlZFByb21pc2VcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHRoaXMucHJvbWlzZVN0YXR1cygpKSwgdHJhaWxlcnNQcm9taXNlID0gcmVzcG9uc2VTdHJlYW1DbG9zZWRQcm9taXNlXG4gICAgICAgICAgICAudGhlbigoKSA9PiB0aGlzLnByb21pc2VUcmFpbGVycygpKTtcbiAgICAgICAgdGhpcy5tYXliZVN1cHByZXNzVW5jYXVnaHQoc3RhdHVzUHJvbWlzZSwgdHJhaWxlcnNQcm9taXNlKTtcbiAgICAgICAgdGhpcy5sYXN0SW5wdXQgPSBuZXcgVGVzdElucHV0U3RyZWFtKHRoaXMuZGF0YSwgb3B0aW9ucy5hYm9ydCk7XG4gICAgICAgIHJldHVybiBuZXcgZHVwbGV4X3N0cmVhbWluZ19jYWxsXzEuRHVwbGV4U3RyZWFtaW5nQ2FsbChtZXRob2QsIHJlcXVlc3RIZWFkZXJzLCB0aGlzLmxhc3RJbnB1dCwgaGVhZGVyc1Byb21pc2UsIG91dHB1dFN0cmVhbSwgc3RhdHVzUHJvbWlzZSwgdHJhaWxlcnNQcm9taXNlKTtcbiAgICB9XG59XG5leHBvcnRzLlRlc3RUcmFuc3BvcnQgPSBUZXN0VHJhbnNwb3J0O1xuVGVzdFRyYW5zcG9ydC5kZWZhdWx0SGVhZGVycyA9IHtcbiAgICByZXNwb25zZUhlYWRlcjogXCJ0ZXN0XCJcbn07XG5UZXN0VHJhbnNwb3J0LmRlZmF1bHRTdGF0dXMgPSB7XG4gICAgY29kZTogXCJPS1wiLCBkZXRhaWw6IFwiYWxsIGdvb2RcIlxufTtcblRlc3RUcmFuc3BvcnQuZGVmYXVsdFRyYWlsZXJzID0ge1xuICAgIHJlc3BvbnNlVHJhaWxlcjogXCJ0ZXN0XCJcbn07XG5mdW5jdGlvbiBkZWxheShtcywgYWJvcnQpIHtcbiAgICByZXR1cm4gKHYpID0+IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgaWYgKGFib3J0ID09PSBudWxsIHx8IGFib3J0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBhYm9ydC5hYm9ydGVkKSB7XG4gICAgICAgICAgICByZWplY3QobmV3IHJwY19lcnJvcl8xLlJwY0Vycm9yKFwidXNlciBjYW5jZWxcIiwgXCJDQU5DRUxMRURcIikpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgaWQgPSBzZXRUaW1lb3V0KCgpID0+IHJlc29sdmUodiksIG1zKTtcbiAgICAgICAgICAgIGlmIChhYm9ydCkge1xuICAgICAgICAgICAgICAgIGFib3J0LmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBldiA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChpZCk7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgcnBjX2Vycm9yXzEuUnBjRXJyb3IoXCJ1c2VyIGNhbmNlbFwiLCBcIkNBTkNFTExFRFwiKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbmNsYXNzIFRlc3RJbnB1dFN0cmVhbSB7XG4gICAgY29uc3RydWN0b3IoZGF0YSwgYWJvcnQpIHtcbiAgICAgICAgdGhpcy5fY29tcGxldGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3NlbnQgPSBbXTtcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICAgICAgdGhpcy5hYm9ydCA9IGFib3J0O1xuICAgIH1cbiAgICBnZXQgc2VudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbnQ7XG4gICAgfVxuICAgIGdldCBjb21wbGV0ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb21wbGV0ZWQ7XG4gICAgfVxuICAgIHNlbmQobWVzc2FnZSkge1xuICAgICAgICBpZiAodGhpcy5kYXRhLmlucHV0TWVzc2FnZSBpbnN0YW5jZW9mIHJwY19lcnJvcl8xLlJwY0Vycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QodGhpcy5kYXRhLmlucHV0TWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGVsYXlNcyA9IHRoaXMuZGF0YS5pbnB1dE1lc3NhZ2UgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyAxMFxuICAgICAgICAgICAgOiB0aGlzLmRhdGEuaW5wdXRNZXNzYWdlO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZClcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3NlbnQucHVzaChtZXNzYWdlKTtcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuKGRlbGF5KGRlbGF5TXMsIHRoaXMuYWJvcnQpKTtcbiAgICB9XG4gICAgY29tcGxldGUoKSB7XG4gICAgICAgIGlmICh0aGlzLmRhdGEuaW5wdXRDb21wbGV0ZSBpbnN0YW5jZW9mIHJwY19lcnJvcl8xLlJwY0Vycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QodGhpcy5kYXRhLmlucHV0Q29tcGxldGUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRlbGF5TXMgPSB0aGlzLmRhdGEuaW5wdXRDb21wbGV0ZSA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IDEwXG4gICAgICAgICAgICA6IHRoaXMuZGF0YS5pbnB1dENvbXBsZXRlO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZClcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2NvbXBsZXRlZCA9IHRydWU7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbihkZWxheShkZWxheU1zLCB0aGlzLmFib3J0KSk7XG4gICAgfVxufVxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc3RhY2tEdXBsZXhTdHJlYW1pbmdJbnRlcmNlcHRvcnMgPSBleHBvcnRzLnN0YWNrQ2xpZW50U3RyZWFtaW5nSW50ZXJjZXB0b3JzID0gZXhwb3J0cy5zdGFja1NlcnZlclN0cmVhbWluZ0ludGVyY2VwdG9ycyA9IGV4cG9ydHMuc3RhY2tVbmFyeUludGVyY2VwdG9ycyA9IGV4cG9ydHMuc3RhY2tJbnRlcmNlcHQgPSB2b2lkIDA7XG5jb25zdCBydW50aW1lXzEgPSByZXF1aXJlKFwiQHByb3RvYnVmLXRzL3J1bnRpbWVcIik7XG4vKipcbiAqIENyZWF0ZXMgYSBcInN0YWNrXCIgb2Ygb2YgYWxsIGludGVyY2VwdG9ycyBzcGVjaWZpZWQgaW4gdGhlIGdpdmVuIGBScGNPcHRpb25zYC5cbiAqIFVzZWQgYnkgZ2VuZXJhdGVkIGNsaWVudCBpbXBsZW1lbnRhdGlvbnMuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gc3RhY2tJbnRlcmNlcHQoa2luZCwgdHJhbnNwb3J0LCBtZXRob2QsIG9wdGlvbnMsIGlucHV0KSB7XG4gICAgdmFyIF9hLCBfYiwgX2MsIF9kO1xuICAgIGlmIChraW5kID09IFwidW5hcnlcIikge1xuICAgICAgICBsZXQgdGFpbCA9IChtdGQsIGlucCwgb3B0KSA9PiB0cmFuc3BvcnQudW5hcnkobXRkLCBpbnAsIG9wdCk7XG4gICAgICAgIGZvciAoY29uc3QgY3VyciBvZiAoKF9hID0gb3B0aW9ucy5pbnRlcmNlcHRvcnMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFtdKS5maWx0ZXIoaSA9PiBpLmludGVyY2VwdFVuYXJ5KS5yZXZlcnNlKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IG5leHQgPSB0YWlsO1xuICAgICAgICAgICAgdGFpbCA9IChtdGQsIGlucCwgb3B0KSA9PiBjdXJyLmludGVyY2VwdFVuYXJ5KG5leHQsIG10ZCwgaW5wLCBvcHQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0YWlsKG1ldGhvZCwgaW5wdXQsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBpZiAoa2luZCA9PSBcInNlcnZlclN0cmVhbWluZ1wiKSB7XG4gICAgICAgIGxldCB0YWlsID0gKG10ZCwgaW5wLCBvcHQpID0+IHRyYW5zcG9ydC5zZXJ2ZXJTdHJlYW1pbmcobXRkLCBpbnAsIG9wdCk7XG4gICAgICAgIGZvciAoY29uc3QgY3VyciBvZiAoKF9iID0gb3B0aW9ucy5pbnRlcmNlcHRvcnMpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IFtdKS5maWx0ZXIoaSA9PiBpLmludGVyY2VwdFNlcnZlclN0cmVhbWluZykucmV2ZXJzZSgpKSB7XG4gICAgICAgICAgICBjb25zdCBuZXh0ID0gdGFpbDtcbiAgICAgICAgICAgIHRhaWwgPSAobXRkLCBpbnAsIG9wdCkgPT4gY3Vyci5pbnRlcmNlcHRTZXJ2ZXJTdHJlYW1pbmcobmV4dCwgbXRkLCBpbnAsIG9wdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRhaWwobWV0aG9kLCBpbnB1dCwgb3B0aW9ucyk7XG4gICAgfVxuICAgIGlmIChraW5kID09IFwiY2xpZW50U3RyZWFtaW5nXCIpIHtcbiAgICAgICAgbGV0IHRhaWwgPSAobXRkLCBvcHQpID0+IHRyYW5zcG9ydC5jbGllbnRTdHJlYW1pbmcobXRkLCBvcHQpO1xuICAgICAgICBmb3IgKGNvbnN0IGN1cnIgb2YgKChfYyA9IG9wdGlvbnMuaW50ZXJjZXB0b3JzKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiBbXSkuZmlsdGVyKGkgPT4gaS5pbnRlcmNlcHRDbGllbnRTdHJlYW1pbmcpLnJldmVyc2UoKSkge1xuICAgICAgICAgICAgY29uc3QgbmV4dCA9IHRhaWw7XG4gICAgICAgICAgICB0YWlsID0gKG10ZCwgb3B0KSA9PiBjdXJyLmludGVyY2VwdENsaWVudFN0cmVhbWluZyhuZXh0LCBtdGQsIG9wdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRhaWwobWV0aG9kLCBvcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKGtpbmQgPT0gXCJkdXBsZXhcIikge1xuICAgICAgICBsZXQgdGFpbCA9IChtdGQsIG9wdCkgPT4gdHJhbnNwb3J0LmR1cGxleChtdGQsIG9wdCk7XG4gICAgICAgIGZvciAoY29uc3QgY3VyciBvZiAoKF9kID0gb3B0aW9ucy5pbnRlcmNlcHRvcnMpICE9PSBudWxsICYmIF9kICE9PSB2b2lkIDAgPyBfZCA6IFtdKS5maWx0ZXIoaSA9PiBpLmludGVyY2VwdER1cGxleCkucmV2ZXJzZSgpKSB7XG4gICAgICAgICAgICBjb25zdCBuZXh0ID0gdGFpbDtcbiAgICAgICAgICAgIHRhaWwgPSAobXRkLCBvcHQpID0+IGN1cnIuaW50ZXJjZXB0RHVwbGV4KG5leHQsIG10ZCwgb3B0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFpbChtZXRob2QsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBydW50aW1lXzEuYXNzZXJ0TmV2ZXIoa2luZCk7XG59XG5leHBvcnRzLnN0YWNrSW50ZXJjZXB0ID0gc3RhY2tJbnRlcmNlcHQ7XG4vKipcbiAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIGJ5IGBzdGFja0ludGVyY2VwdCgpYCwgc3RpbGwgaGVyZSB0byBzdXBwb3J0IG9sZGVyIGdlbmVyYXRlZCBjb2RlXG4gKi9cbmZ1bmN0aW9uIHN0YWNrVW5hcnlJbnRlcmNlcHRvcnModHJhbnNwb3J0LCBtZXRob2QsIGlucHV0LCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIHN0YWNrSW50ZXJjZXB0KFwidW5hcnlcIiwgdHJhbnNwb3J0LCBtZXRob2QsIG9wdGlvbnMsIGlucHV0KTtcbn1cbmV4cG9ydHMuc3RhY2tVbmFyeUludGVyY2VwdG9ycyA9IHN0YWNrVW5hcnlJbnRlcmNlcHRvcnM7XG4vKipcbiAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIGJ5IGBzdGFja0ludGVyY2VwdCgpYCwgc3RpbGwgaGVyZSB0byBzdXBwb3J0IG9sZGVyIGdlbmVyYXRlZCBjb2RlXG4gKi9cbmZ1bmN0aW9uIHN0YWNrU2VydmVyU3RyZWFtaW5nSW50ZXJjZXB0b3JzKHRyYW5zcG9ydCwgbWV0aG9kLCBpbnB1dCwgb3B0aW9ucykge1xuICAgIHJldHVybiBzdGFja0ludGVyY2VwdChcInNlcnZlclN0cmVhbWluZ1wiLCB0cmFuc3BvcnQsIG1ldGhvZCwgb3B0aW9ucywgaW5wdXQpO1xufVxuZXhwb3J0cy5zdGFja1NlcnZlclN0cmVhbWluZ0ludGVyY2VwdG9ycyA9IHN0YWNrU2VydmVyU3RyZWFtaW5nSW50ZXJjZXB0b3JzO1xuLyoqXG4gKiBAZGVwcmVjYXRlZCByZXBsYWNlZCBieSBgc3RhY2tJbnRlcmNlcHQoKWAsIHN0aWxsIGhlcmUgdG8gc3VwcG9ydCBvbGRlciBnZW5lcmF0ZWQgY29kZVxuICovXG5mdW5jdGlvbiBzdGFja0NsaWVudFN0cmVhbWluZ0ludGVyY2VwdG9ycyh0cmFuc3BvcnQsIG1ldGhvZCwgb3B0aW9ucykge1xuICAgIHJldHVybiBzdGFja0ludGVyY2VwdChcImNsaWVudFN0cmVhbWluZ1wiLCB0cmFuc3BvcnQsIG1ldGhvZCwgb3B0aW9ucyk7XG59XG5leHBvcnRzLnN0YWNrQ2xpZW50U3RyZWFtaW5nSW50ZXJjZXB0b3JzID0gc3RhY2tDbGllbnRTdHJlYW1pbmdJbnRlcmNlcHRvcnM7XG4vKipcbiAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIGJ5IGBzdGFja0ludGVyY2VwdCgpYCwgc3RpbGwgaGVyZSB0byBzdXBwb3J0IG9sZGVyIGdlbmVyYXRlZCBjb2RlXG4gKi9cbmZ1bmN0aW9uIHN0YWNrRHVwbGV4U3RyZWFtaW5nSW50ZXJjZXB0b3JzKHRyYW5zcG9ydCwgbWV0aG9kLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIHN0YWNrSW50ZXJjZXB0KFwiZHVwbGV4XCIsIHRyYW5zcG9ydCwgbWV0aG9kLCBvcHRpb25zKTtcbn1cbmV4cG9ydHMuc3RhY2tEdXBsZXhTdHJlYW1pbmdJbnRlcmNlcHRvcnMgPSBzdGFja0R1cGxleFN0cmVhbWluZ0ludGVyY2VwdG9ycztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlNlcnZlckNhbGxDb250ZXh0Q29udHJvbGxlciA9IHZvaWQgMDtcbmNsYXNzIFNlcnZlckNhbGxDb250ZXh0Q29udHJvbGxlciB7XG4gICAgY29uc3RydWN0b3IobWV0aG9kLCBoZWFkZXJzLCBkZWFkbGluZSwgc2VuZFJlc3BvbnNlSGVhZGVyc0ZuLCBkZWZhdWx0U3RhdHVzID0geyBjb2RlOiAnT0snLCBkZXRhaWw6ICcnIH0pIHtcbiAgICAgICAgdGhpcy5fY2FuY2VsbGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2xpc3RlbmVycyA9IFtdO1xuICAgICAgICB0aGlzLm1ldGhvZCA9IG1ldGhvZDtcbiAgICAgICAgdGhpcy5oZWFkZXJzID0gaGVhZGVycztcbiAgICAgICAgdGhpcy5kZWFkbGluZSA9IGRlYWRsaW5lO1xuICAgICAgICB0aGlzLnRyYWlsZXJzID0ge307XG4gICAgICAgIHRoaXMuX3NlbmRSSCA9IHNlbmRSZXNwb25zZUhlYWRlcnNGbjtcbiAgICAgICAgdGhpcy5zdGF0dXMgPSBkZWZhdWx0U3RhdHVzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIGNhbGwgY2FuY2VsbGVkLlxuICAgICAqXG4gICAgICogSW52b2tlcyBhbGwgY2FsbGJhY2tzIHJlZ2lzdGVyZWQgd2l0aCBvbkNhbmNlbCgpIGFuZFxuICAgICAqIHNldHMgYGNhbmNlbGxlZCA9IHRydWVgLlxuICAgICAqL1xuICAgIG5vdGlmeUNhbmNlbGxlZCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9jYW5jZWxsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2NhbmNlbGxlZCA9IHRydWU7XG4gICAgICAgICAgICBmb3IgKGxldCBsIG9mIHRoaXMuX2xpc3RlbmVycykge1xuICAgICAgICAgICAgICAgIGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZW5kIHJlc3BvbnNlIGhlYWRlcnMuXG4gICAgICovXG4gICAgc2VuZFJlc3BvbnNlSGVhZGVycyhkYXRhKSB7XG4gICAgICAgIHRoaXMuX3NlbmRSSChkYXRhKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSXMgdGhlIGNhbGwgY2FuY2VsbGVkP1xuICAgICAqXG4gICAgICogV2hlbiB0aGUgY2xpZW50IGNsb3NlcyB0aGUgY29ubmVjdGlvbiBiZWZvcmUgdGhlIHNlcnZlclxuICAgICAqIGlzIGRvbmUsIHRoZSBjYWxsIGlzIGNhbmNlbGxlZC5cbiAgICAgKlxuICAgICAqIElmIHlvdSB3YW50IHRvIGNhbmNlbCBhIHJlcXVlc3Qgb24gdGhlIHNlcnZlciwgdGhyb3cgYVxuICAgICAqIFJwY0Vycm9yIHdpdGggdGhlIENBTkNFTExFRCBzdGF0dXMgY29kZS5cbiAgICAgKi9cbiAgICBnZXQgY2FuY2VsbGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2FuY2VsbGVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGQgYSBjYWxsYmFjayBmb3IgY2FuY2VsbGF0aW9uLlxuICAgICAqL1xuICAgIG9uQ2FuY2VsKGNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IGwgPSB0aGlzLl9saXN0ZW5lcnM7XG4gICAgICAgIGwucHVzaChjYWxsYmFjayk7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBsZXQgaSA9IGwuaW5kZXhPZihjYWxsYmFjayk7XG4gICAgICAgICAgICBpZiAoaSA+PSAwKVxuICAgICAgICAgICAgICAgIGwuc3BsaWNlKGksIDEpO1xuICAgICAgICB9O1xuICAgIH1cbn1cbmV4cG9ydHMuU2VydmVyQ2FsbENvbnRleHRDb250cm9sbGVyID0gU2VydmVyQ2FsbENvbnRleHRDb250cm9sbGVyO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIFB1YmxpYyBBUEkgb2YgdGhlIHJwYyBydW50aW1lLlxuLy8gTm90ZTogd2UgZG8gbm90IHVzZSBgZXhwb3J0ICogZnJvbSAuLi5gIHRvIGhlbHAgdHJlZSBzaGFrZXJzLFxuLy8gd2VicGFjayB2ZXJib3NlIG91dHB1dCBoaW50cyB0aGF0IHRoaXMgc2hvdWxkIGJlIHVzZWZ1bFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHNlcnZpY2VfdHlwZV8xID0gcmVxdWlyZShcIi4vc2VydmljZS10eXBlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiU2VydmljZVR5cGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNlcnZpY2VfdHlwZV8xLlNlcnZpY2VUeXBlOyB9IH0pO1xudmFyIHJlZmxlY3Rpb25faW5mb18xID0gcmVxdWlyZShcIi4vcmVmbGVjdGlvbi1pbmZvXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmVhZE1ldGhvZE9wdGlvbnNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlZmxlY3Rpb25faW5mb18xLnJlYWRNZXRob2RPcHRpb25zOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmVhZE1ldGhvZE9wdGlvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVmbGVjdGlvbl9pbmZvXzEucmVhZE1ldGhvZE9wdGlvbjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlYWRTZXJ2aWNlT3B0aW9uXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZWZsZWN0aW9uX2luZm9fMS5yZWFkU2VydmljZU9wdGlvbjsgfSB9KTtcbnZhciBycGNfZXJyb3JfMSA9IHJlcXVpcmUoXCIuL3JwYy1lcnJvclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlJwY0Vycm9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBycGNfZXJyb3JfMS5ScGNFcnJvcjsgfSB9KTtcbnZhciBycGNfb3B0aW9uc18xID0gcmVxdWlyZShcIi4vcnBjLW9wdGlvbnNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtZXJnZVJwY09wdGlvbnNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJwY19vcHRpb25zXzEubWVyZ2VScGNPcHRpb25zOyB9IH0pO1xudmFyIHJwY19vdXRwdXRfc3RyZWFtXzEgPSByZXF1aXJlKFwiLi9ycGMtb3V0cHV0LXN0cmVhbVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlJwY091dHB1dFN0cmVhbUNvbnRyb2xsZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJwY19vdXRwdXRfc3RyZWFtXzEuUnBjT3V0cHV0U3RyZWFtQ29udHJvbGxlcjsgfSB9KTtcbnZhciB0ZXN0X3RyYW5zcG9ydF8xID0gcmVxdWlyZShcIi4vdGVzdC10cmFuc3BvcnRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJUZXN0VHJhbnNwb3J0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0ZXN0X3RyYW5zcG9ydF8xLlRlc3RUcmFuc3BvcnQ7IH0gfSk7XG52YXIgZGVmZXJyZWRfMSA9IHJlcXVpcmUoXCIuL2RlZmVycmVkXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRGVmZXJyZWRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRlZmVycmVkXzEuRGVmZXJyZWQ7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJEZWZlcnJlZFN0YXRlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkZWZlcnJlZF8xLkRlZmVycmVkU3RhdGU7IH0gfSk7XG52YXIgZHVwbGV4X3N0cmVhbWluZ19jYWxsXzEgPSByZXF1aXJlKFwiLi9kdXBsZXgtc3RyZWFtaW5nLWNhbGxcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJEdXBsZXhTdHJlYW1pbmdDYWxsXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkdXBsZXhfc3RyZWFtaW5nX2NhbGxfMS5EdXBsZXhTdHJlYW1pbmdDYWxsOyB9IH0pO1xudmFyIGNsaWVudF9zdHJlYW1pbmdfY2FsbF8xID0gcmVxdWlyZShcIi4vY2xpZW50LXN0cmVhbWluZy1jYWxsXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQ2xpZW50U3RyZWFtaW5nQ2FsbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY2xpZW50X3N0cmVhbWluZ19jYWxsXzEuQ2xpZW50U3RyZWFtaW5nQ2FsbDsgfSB9KTtcbnZhciBzZXJ2ZXJfc3RyZWFtaW5nX2NhbGxfMSA9IHJlcXVpcmUoXCIuL3NlcnZlci1zdHJlYW1pbmctY2FsbFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlNlcnZlclN0cmVhbWluZ0NhbGxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNlcnZlcl9zdHJlYW1pbmdfY2FsbF8xLlNlcnZlclN0cmVhbWluZ0NhbGw7IH0gfSk7XG52YXIgdW5hcnlfY2FsbF8xID0gcmVxdWlyZShcIi4vdW5hcnktY2FsbFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlVuYXJ5Q2FsbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdW5hcnlfY2FsbF8xLlVuYXJ5Q2FsbDsgfSB9KTtcbnZhciBycGNfaW50ZXJjZXB0b3JfMSA9IHJlcXVpcmUoXCIuL3JwYy1pbnRlcmNlcHRvclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0YWNrSW50ZXJjZXB0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBycGNfaW50ZXJjZXB0b3JfMS5zdGFja0ludGVyY2VwdDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0YWNrRHVwbGV4U3RyZWFtaW5nSW50ZXJjZXB0b3JzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBycGNfaW50ZXJjZXB0b3JfMS5zdGFja0R1cGxleFN0cmVhbWluZ0ludGVyY2VwdG9yczsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0YWNrQ2xpZW50U3RyZWFtaW5nSW50ZXJjZXB0b3JzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBycGNfaW50ZXJjZXB0b3JfMS5zdGFja0NsaWVudFN0cmVhbWluZ0ludGVyY2VwdG9yczsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0YWNrU2VydmVyU3RyZWFtaW5nSW50ZXJjZXB0b3JzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBycGNfaW50ZXJjZXB0b3JfMS5zdGFja1NlcnZlclN0cmVhbWluZ0ludGVyY2VwdG9yczsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0YWNrVW5hcnlJbnRlcmNlcHRvcnNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJwY19pbnRlcmNlcHRvcl8xLnN0YWNrVW5hcnlJbnRlcmNlcHRvcnM7IH0gfSk7XG52YXIgc2VydmVyX2NhbGxfY29udGV4dF8xID0gcmVxdWlyZShcIi4vc2VydmVyLWNhbGwtY29udGV4dFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlNlcnZlckNhbGxDb250ZXh0Q29udHJvbGxlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2VydmVyX2NhbGxfY29udGV4dF8xLlNlcnZlckNhbGxDb250ZXh0Q29udHJvbGxlcjsgfSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkFydGlmYWN0U2VydmljZSA9IGV4cG9ydHMuRGVsZXRlQXJ0aWZhY3RSZXNwb25zZSA9IGV4cG9ydHMuRGVsZXRlQXJ0aWZhY3RSZXF1ZXN0ID0gZXhwb3J0cy5HZXRTaWduZWRBcnRpZmFjdFVSTFJlc3BvbnNlID0gZXhwb3J0cy5HZXRTaWduZWRBcnRpZmFjdFVSTFJlcXVlc3QgPSBleHBvcnRzLkxpc3RBcnRpZmFjdHNSZXNwb25zZV9Nb25vbGl0aEFydGlmYWN0ID0gZXhwb3J0cy5MaXN0QXJ0aWZhY3RzUmVzcG9uc2UgPSBleHBvcnRzLkxpc3RBcnRpZmFjdHNSZXF1ZXN0ID0gZXhwb3J0cy5GaW5hbGl6ZUFydGlmYWN0UmVzcG9uc2UgPSBleHBvcnRzLkZpbmFsaXplQXJ0aWZhY3RSZXF1ZXN0ID0gZXhwb3J0cy5DcmVhdGVBcnRpZmFjdFJlc3BvbnNlID0gZXhwb3J0cy5DcmVhdGVBcnRpZmFjdFJlcXVlc3QgPSB2b2lkIDA7XG4vLyBAZ2VuZXJhdGVkIGJ5IHByb3RvYnVmLXRzIDIuOS4xIHdpdGggcGFyYW1ldGVyIGxvbmdfdHlwZV9zdHJpbmcsY2xpZW50X25vbmUsZ2VuZXJhdGVfZGVwZW5kZW5jaWVzXG4vLyBAZ2VuZXJhdGVkIGZyb20gcHJvdG9idWYgZmlsZSBcInJlc3VsdHMvYXBpL3YxL2FydGlmYWN0LnByb3RvXCIgKHBhY2thZ2UgXCJnaXRodWIuYWN0aW9ucy5yZXN1bHRzLmFwaS52MVwiLCBzeW50YXggcHJvdG8zKVxuLy8gdHNsaW50OmRpc2FibGVcbmNvbnN0IHJ1bnRpbWVfcnBjXzEgPSByZXF1aXJlKFwiQHByb3RvYnVmLXRzL3J1bnRpbWUtcnBjXCIpO1xuY29uc3QgcnVudGltZV8xID0gcmVxdWlyZShcIkBwcm90b2J1Zi10cy9ydW50aW1lXCIpO1xuY29uc3QgcnVudGltZV8yID0gcmVxdWlyZShcIkBwcm90b2J1Zi10cy9ydW50aW1lXCIpO1xuY29uc3QgcnVudGltZV8zID0gcmVxdWlyZShcIkBwcm90b2J1Zi10cy9ydW50aW1lXCIpO1xuY29uc3QgcnVudGltZV80ID0gcmVxdWlyZShcIkBwcm90b2J1Zi10cy9ydW50aW1lXCIpO1xuY29uc3QgcnVudGltZV81ID0gcmVxdWlyZShcIkBwcm90b2J1Zi10cy9ydW50aW1lXCIpO1xuY29uc3Qgd3JhcHBlcnNfMSA9IHJlcXVpcmUoXCIuLi8uLi8uLi9nb29nbGUvcHJvdG9idWYvd3JhcHBlcnNcIik7XG5jb25zdCB3cmFwcGVyc18yID0gcmVxdWlyZShcIi4uLy4uLy4uL2dvb2dsZS9wcm90b2J1Zi93cmFwcGVyc1wiKTtcbmNvbnN0IHRpbWVzdGFtcF8xID0gcmVxdWlyZShcIi4uLy4uLy4uL2dvb2dsZS9wcm90b2J1Zi90aW1lc3RhbXBcIik7XG4vLyBAZ2VuZXJhdGVkIG1lc3NhZ2UgdHlwZSB3aXRoIHJlZmxlY3Rpb24gaW5mb3JtYXRpb24sIG1heSBwcm92aWRlIHNwZWVkIG9wdGltaXplZCBtZXRob2RzXG5jbGFzcyBDcmVhdGVBcnRpZmFjdFJlcXVlc3QkVHlwZSBleHRlbmRzIHJ1bnRpbWVfNS5NZXNzYWdlVHlwZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuQ3JlYXRlQXJ0aWZhY3RSZXF1ZXN0XCIsIFtcbiAgICAgICAgICAgIHsgbm86IDEsIG5hbWU6IFwid29ya2Zsb3dfcnVuX2JhY2tlbmRfaWRcIiwga2luZDogXCJzY2FsYXJcIiwgVDogOSAvKlNjYWxhclR5cGUuU1RSSU5HKi8gfSxcbiAgICAgICAgICAgIHsgbm86IDIsIG5hbWU6IFwid29ya2Zsb3dfam9iX3J1bl9iYWNrZW5kX2lkXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDkgLypTY2FsYXJUeXBlLlNUUklORyovIH0sXG4gICAgICAgICAgICB7IG5vOiAzLCBuYW1lOiBcIm5hbWVcIiwga2luZDogXCJzY2FsYXJcIiwgVDogOSAvKlNjYWxhclR5cGUuU1RSSU5HKi8gfSxcbiAgICAgICAgICAgIHsgbm86IDQsIG5hbWU6IFwiZXhwaXJlc19hdFwiLCBraW5kOiBcIm1lc3NhZ2VcIiwgVDogKCkgPT4gdGltZXN0YW1wXzEuVGltZXN0YW1wIH0sXG4gICAgICAgICAgICB7IG5vOiA1LCBuYW1lOiBcInZlcnNpb25cIiwga2luZDogXCJzY2FsYXJcIiwgVDogNSAvKlNjYWxhclR5cGUuSU5UMzIqLyB9XG4gICAgICAgIF0pO1xuICAgIH1cbiAgICBjcmVhdGUodmFsdWUpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IHsgd29ya2Zsb3dSdW5CYWNrZW5kSWQ6IFwiXCIsIHdvcmtmbG93Sm9iUnVuQmFja2VuZElkOiBcIlwiLCBuYW1lOiBcIlwiLCB2ZXJzaW9uOiAwIH07XG4gICAgICAgIGdsb2JhbFRoaXMuT2JqZWN0LmRlZmluZVByb3BlcnR5KG1lc3NhZ2UsIHJ1bnRpbWVfNC5NRVNTQUdFX1RZUEUsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0aGlzIH0pO1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICgwLCBydW50aW1lXzMucmVmbGVjdGlvbk1lcmdlUGFydGlhbCkodGhpcywgbWVzc2FnZSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlSZWFkKHJlYWRlciwgbGVuZ3RoLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSB0YXJnZXQgIT09IG51bGwgJiYgdGFyZ2V0ICE9PSB2b2lkIDAgPyB0YXJnZXQgOiB0aGlzLmNyZWF0ZSgpLCBlbmQgPSByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgbGV0IFtmaWVsZE5vLCB3aXJlVHlwZV0gPSByZWFkZXIudGFnKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkTm8pIHtcbiAgICAgICAgICAgICAgICBjYXNlIC8qIHN0cmluZyB3b3JrZmxvd19ydW5fYmFja2VuZF9pZCAqLyAxOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLndvcmtmbG93UnVuQmFja2VuZElkID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIC8qIHN0cmluZyB3b3JrZmxvd19qb2JfcnVuX2JhY2tlbmRfaWQgKi8gMjpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS53b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZCA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBzdHJpbmcgbmFtZSAqLyAzOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLm5hbWUgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgLyogZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCBleHBpcmVzX2F0ICovIDQ6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZXhwaXJlc0F0ID0gdGltZXN0YW1wXzEuVGltZXN0YW1wLmludGVybmFsQmluYXJ5UmVhZChyZWFkZXIsIHJlYWRlci51aW50MzIoKSwgb3B0aW9ucywgbWVzc2FnZS5leHBpcmVzQXQpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIC8qIGludDMyIHZlcnNpb24gKi8gNTpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS52ZXJzaW9uID0gcmVhZGVyLmludDMyKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGxldCB1ID0gb3B0aW9ucy5yZWFkVW5rbm93bkZpZWxkO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSA9PT0gXCJ0aHJvd1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGdsb2JhbFRoaXMuRXJyb3IoYFVua25vd24gZmllbGQgJHtmaWVsZE5vfSAod2lyZSB0eXBlICR7d2lyZVR5cGV9KSBmb3IgJHt0aGlzLnR5cGVOYW1lfWApO1xuICAgICAgICAgICAgICAgICAgICBsZXQgZCA9IHJlYWRlci5za2lwKHdpcmVUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgKHUgPT09IHRydWUgPyBydW50aW1lXzIuVW5rbm93bkZpZWxkSGFuZGxlci5vblJlYWQgOiB1KSh0aGlzLnR5cGVOYW1lLCBtZXNzYWdlLCBmaWVsZE5vLCB3aXJlVHlwZSwgZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5V3JpdGUobWVzc2FnZSwgd3JpdGVyLCBvcHRpb25zKSB7XG4gICAgICAgIC8qIHN0cmluZyB3b3JrZmxvd19ydW5fYmFja2VuZF9pZCA9IDE7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLndvcmtmbG93UnVuQmFja2VuZElkICE9PSBcIlwiKVxuICAgICAgICAgICAgd3JpdGVyLnRhZygxLCBydW50aW1lXzEuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKS5zdHJpbmcobWVzc2FnZS53b3JrZmxvd1J1bkJhY2tlbmRJZCk7XG4gICAgICAgIC8qIHN0cmluZyB3b3JrZmxvd19qb2JfcnVuX2JhY2tlbmRfaWQgPSAyOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS53b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZCAhPT0gXCJcIilcbiAgICAgICAgICAgIHdyaXRlci50YWcoMiwgcnVudGltZV8xLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCkuc3RyaW5nKG1lc3NhZ2Uud29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQpO1xuICAgICAgICAvKiBzdHJpbmcgbmFtZSA9IDM7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLm5hbWUgIT09IFwiXCIpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDMsIHJ1bnRpbWVfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLnN0cmluZyhtZXNzYWdlLm5hbWUpO1xuICAgICAgICAvKiBnb29nbGUucHJvdG9idWYuVGltZXN0YW1wIGV4cGlyZXNfYXQgPSA0OyAqL1xuICAgICAgICBpZiAobWVzc2FnZS5leHBpcmVzQXQpXG4gICAgICAgICAgICB0aW1lc3RhbXBfMS5UaW1lc3RhbXAuaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLmV4cGlyZXNBdCwgd3JpdGVyLnRhZyg0LCBydW50aW1lXzEuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKS5mb3JrKCksIG9wdGlvbnMpLmpvaW4oKTtcbiAgICAgICAgLyogaW50MzIgdmVyc2lvbiA9IDU7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLnZlcnNpb24gIT09IDApXG4gICAgICAgICAgICB3cml0ZXIudGFnKDUsIHJ1bnRpbWVfMS5XaXJlVHlwZS5WYXJpbnQpLmludDMyKG1lc3NhZ2UudmVyc2lvbik7XG4gICAgICAgIGxldCB1ID0gb3B0aW9ucy53cml0ZVVua25vd25GaWVsZHM7XG4gICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICh1ID09IHRydWUgPyBydW50aW1lXzIuVW5rbm93bkZpZWxkSGFuZGxlci5vbldyaXRlIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgd3JpdGVyKTtcbiAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICB9XG59XG4vKipcbiAqIEBnZW5lcmF0ZWQgTWVzc2FnZVR5cGUgZm9yIHByb3RvYnVmIG1lc3NhZ2UgZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuQ3JlYXRlQXJ0aWZhY3RSZXF1ZXN0XG4gKi9cbmV4cG9ydHMuQ3JlYXRlQXJ0aWZhY3RSZXF1ZXN0ID0gbmV3IENyZWF0ZUFydGlmYWN0UmVxdWVzdCRUeXBlKCk7XG4vLyBAZ2VuZXJhdGVkIG1lc3NhZ2UgdHlwZSB3aXRoIHJlZmxlY3Rpb24gaW5mb3JtYXRpb24sIG1heSBwcm92aWRlIHNwZWVkIG9wdGltaXplZCBtZXRob2RzXG5jbGFzcyBDcmVhdGVBcnRpZmFjdFJlc3BvbnNlJFR5cGUgZXh0ZW5kcyBydW50aW1lXzUuTWVzc2FnZVR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcImdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkNyZWF0ZUFydGlmYWN0UmVzcG9uc2VcIiwgW1xuICAgICAgICAgICAgeyBubzogMSwgbmFtZTogXCJva1wiLCBraW5kOiBcInNjYWxhclwiLCBUOiA4IC8qU2NhbGFyVHlwZS5CT09MKi8gfSxcbiAgICAgICAgICAgIHsgbm86IDIsIG5hbWU6IFwic2lnbmVkX3VwbG9hZF91cmxcIiwga2luZDogXCJzY2FsYXJcIiwgVDogOSAvKlNjYWxhclR5cGUuU1RSSU5HKi8gfVxuICAgICAgICBdKTtcbiAgICB9XG4gICAgY3JlYXRlKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7IG9rOiBmYWxzZSwgc2lnbmVkVXBsb2FkVXJsOiBcIlwiIH07XG4gICAgICAgIGdsb2JhbFRoaXMuT2JqZWN0LmRlZmluZVByb3BlcnR5KG1lc3NhZ2UsIHJ1bnRpbWVfNC5NRVNTQUdFX1RZUEUsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0aGlzIH0pO1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICgwLCBydW50aW1lXzMucmVmbGVjdGlvbk1lcmdlUGFydGlhbCkodGhpcywgbWVzc2FnZSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlSZWFkKHJlYWRlciwgbGVuZ3RoLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSB0YXJnZXQgIT09IG51bGwgJiYgdGFyZ2V0ICE9PSB2b2lkIDAgPyB0YXJnZXQgOiB0aGlzLmNyZWF0ZSgpLCBlbmQgPSByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgbGV0IFtmaWVsZE5vLCB3aXJlVHlwZV0gPSByZWFkZXIudGFnKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkTm8pIHtcbiAgICAgICAgICAgICAgICBjYXNlIC8qIGJvb2wgb2sgKi8gMTpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5vayA9IHJlYWRlci5ib29sKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgLyogc3RyaW5nIHNpZ25lZF91cGxvYWRfdXJsICovIDI6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2lnbmVkVXBsb2FkVXJsID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBsZXQgdSA9IG9wdGlvbnMucmVhZFVua25vd25GaWVsZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgPT09IFwidGhyb3dcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBnbG9iYWxUaGlzLkVycm9yKGBVbmtub3duIGZpZWxkICR7ZmllbGROb30gKHdpcmUgdHlwZSAke3dpcmVUeXBlfSkgZm9yICR7dGhpcy50eXBlTmFtZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGQgPSByZWFkZXIuc2tpcCh3aXJlVHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICh1ID09PSB0cnVlID8gcnVudGltZV8yLlVua25vd25GaWVsZEhhbmRsZXIub25SZWFkIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgZmllbGRObywgd2lyZVR5cGUsIGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVdyaXRlKG1lc3NhZ2UsIHdyaXRlciwgb3B0aW9ucykge1xuICAgICAgICAvKiBib29sIG9rID0gMTsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2Uub2sgIT09IGZhbHNlKVxuICAgICAgICAgICAgd3JpdGVyLnRhZygxLCBydW50aW1lXzEuV2lyZVR5cGUuVmFyaW50KS5ib29sKG1lc3NhZ2Uub2spO1xuICAgICAgICAvKiBzdHJpbmcgc2lnbmVkX3VwbG9hZF91cmwgPSAyOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS5zaWduZWRVcGxvYWRVcmwgIT09IFwiXCIpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDIsIHJ1bnRpbWVfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLnN0cmluZyhtZXNzYWdlLnNpZ25lZFVwbG9hZFVybCk7XG4gICAgICAgIGxldCB1ID0gb3B0aW9ucy53cml0ZVVua25vd25GaWVsZHM7XG4gICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICh1ID09IHRydWUgPyBydW50aW1lXzIuVW5rbm93bkZpZWxkSGFuZGxlci5vbldyaXRlIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgd3JpdGVyKTtcbiAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICB9XG59XG4vKipcbiAqIEBnZW5lcmF0ZWQgTWVzc2FnZVR5cGUgZm9yIHByb3RvYnVmIG1lc3NhZ2UgZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuQ3JlYXRlQXJ0aWZhY3RSZXNwb25zZVxuICovXG5leHBvcnRzLkNyZWF0ZUFydGlmYWN0UmVzcG9uc2UgPSBuZXcgQ3JlYXRlQXJ0aWZhY3RSZXNwb25zZSRUeXBlKCk7XG4vLyBAZ2VuZXJhdGVkIG1lc3NhZ2UgdHlwZSB3aXRoIHJlZmxlY3Rpb24gaW5mb3JtYXRpb24sIG1heSBwcm92aWRlIHNwZWVkIG9wdGltaXplZCBtZXRob2RzXG5jbGFzcyBGaW5hbGl6ZUFydGlmYWN0UmVxdWVzdCRUeXBlIGV4dGVuZHMgcnVudGltZV81Lk1lc3NhZ2VUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoXCJnaXRodWIuYWN0aW9ucy5yZXN1bHRzLmFwaS52MS5GaW5hbGl6ZUFydGlmYWN0UmVxdWVzdFwiLCBbXG4gICAgICAgICAgICB7IG5vOiAxLCBuYW1lOiBcIndvcmtmbG93X3J1bl9iYWNrZW5kX2lkXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDkgLypTY2FsYXJUeXBlLlNUUklORyovIH0sXG4gICAgICAgICAgICB7IG5vOiAyLCBuYW1lOiBcIndvcmtmbG93X2pvYl9ydW5fYmFja2VuZF9pZFwiLCBraW5kOiBcInNjYWxhclwiLCBUOiA5IC8qU2NhbGFyVHlwZS5TVFJJTkcqLyB9LFxuICAgICAgICAgICAgeyBubzogMywgbmFtZTogXCJuYW1lXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDkgLypTY2FsYXJUeXBlLlNUUklORyovIH0sXG4gICAgICAgICAgICB7IG5vOiA0LCBuYW1lOiBcInNpemVcIiwga2luZDogXCJzY2FsYXJcIiwgVDogMyAvKlNjYWxhclR5cGUuSU5UNjQqLyB9LFxuICAgICAgICAgICAgeyBubzogNSwgbmFtZTogXCJoYXNoXCIsIGtpbmQ6IFwibWVzc2FnZVwiLCBUOiAoKSA9PiB3cmFwcGVyc18yLlN0cmluZ1ZhbHVlIH1cbiAgICAgICAgXSk7XG4gICAgfVxuICAgIGNyZWF0ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0geyB3b3JrZmxvd1J1bkJhY2tlbmRJZDogXCJcIiwgd29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQ6IFwiXCIsIG5hbWU6IFwiXCIsIHNpemU6IFwiMFwiIH07XG4gICAgICAgIGdsb2JhbFRoaXMuT2JqZWN0LmRlZmluZVByb3BlcnR5KG1lc3NhZ2UsIHJ1bnRpbWVfNC5NRVNTQUdFX1RZUEUsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0aGlzIH0pO1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICgwLCBydW50aW1lXzMucmVmbGVjdGlvbk1lcmdlUGFydGlhbCkodGhpcywgbWVzc2FnZSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlSZWFkKHJlYWRlciwgbGVuZ3RoLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSB0YXJnZXQgIT09IG51bGwgJiYgdGFyZ2V0ICE9PSB2b2lkIDAgPyB0YXJnZXQgOiB0aGlzLmNyZWF0ZSgpLCBlbmQgPSByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgbGV0IFtmaWVsZE5vLCB3aXJlVHlwZV0gPSByZWFkZXIudGFnKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkTm8pIHtcbiAgICAgICAgICAgICAgICBjYXNlIC8qIHN0cmluZyB3b3JrZmxvd19ydW5fYmFja2VuZF9pZCAqLyAxOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLndvcmtmbG93UnVuQmFja2VuZElkID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIC8qIHN0cmluZyB3b3JrZmxvd19qb2JfcnVuX2JhY2tlbmRfaWQgKi8gMjpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS53b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZCA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBzdHJpbmcgbmFtZSAqLyAzOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLm5hbWUgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgLyogaW50NjQgc2l6ZSAqLyA0OlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnNpemUgPSByZWFkZXIuaW50NjQoKS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIC8qIGdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZSBoYXNoICovIDU6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuaGFzaCA9IHdyYXBwZXJzXzIuU3RyaW5nVmFsdWUuaW50ZXJuYWxCaW5hcnlSZWFkKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpLCBvcHRpb25zLCBtZXNzYWdlLmhhc2gpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBsZXQgdSA9IG9wdGlvbnMucmVhZFVua25vd25GaWVsZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgPT09IFwidGhyb3dcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBnbG9iYWxUaGlzLkVycm9yKGBVbmtub3duIGZpZWxkICR7ZmllbGROb30gKHdpcmUgdHlwZSAke3dpcmVUeXBlfSkgZm9yICR7dGhpcy50eXBlTmFtZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGQgPSByZWFkZXIuc2tpcCh3aXJlVHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICh1ID09PSB0cnVlID8gcnVudGltZV8yLlVua25vd25GaWVsZEhhbmRsZXIub25SZWFkIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgZmllbGRObywgd2lyZVR5cGUsIGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVdyaXRlKG1lc3NhZ2UsIHdyaXRlciwgb3B0aW9ucykge1xuICAgICAgICAvKiBzdHJpbmcgd29ya2Zsb3dfcnVuX2JhY2tlbmRfaWQgPSAxOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS53b3JrZmxvd1J1bkJhY2tlbmRJZCAhPT0gXCJcIilcbiAgICAgICAgICAgIHdyaXRlci50YWcoMSwgcnVudGltZV8xLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCkuc3RyaW5nKG1lc3NhZ2Uud29ya2Zsb3dSdW5CYWNrZW5kSWQpO1xuICAgICAgICAvKiBzdHJpbmcgd29ya2Zsb3dfam9iX3J1bl9iYWNrZW5kX2lkID0gMjsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2Uud29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQgIT09IFwiXCIpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDIsIHJ1bnRpbWVfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLnN0cmluZyhtZXNzYWdlLndvcmtmbG93Sm9iUnVuQmFja2VuZElkKTtcbiAgICAgICAgLyogc3RyaW5nIG5hbWUgPSAzOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS5uYW1lICE9PSBcIlwiKVxuICAgICAgICAgICAgd3JpdGVyLnRhZygzLCBydW50aW1lXzEuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKS5zdHJpbmcobWVzc2FnZS5uYW1lKTtcbiAgICAgICAgLyogaW50NjQgc2l6ZSA9IDQ7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLnNpemUgIT09IFwiMFwiKVxuICAgICAgICAgICAgd3JpdGVyLnRhZyg0LCBydW50aW1lXzEuV2lyZVR5cGUuVmFyaW50KS5pbnQ2NChtZXNzYWdlLnNpemUpO1xuICAgICAgICAvKiBnb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUgaGFzaCA9IDU7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLmhhc2gpXG4gICAgICAgICAgICB3cmFwcGVyc18yLlN0cmluZ1ZhbHVlLmludGVybmFsQmluYXJ5V3JpdGUobWVzc2FnZS5oYXNoLCB3cml0ZXIudGFnKDUsIHJ1bnRpbWVfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLmZvcmsoKSwgb3B0aW9ucykuam9pbigpO1xuICAgICAgICBsZXQgdSA9IG9wdGlvbnMud3JpdGVVbmtub3duRmllbGRzO1xuICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAodSA9PSB0cnVlID8gcnVudGltZV8yLlVua25vd25GaWVsZEhhbmRsZXIub25Xcml0ZSA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIHdyaXRlcik7XG4gICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgfVxufVxuLyoqXG4gKiBAZ2VuZXJhdGVkIE1lc3NhZ2VUeXBlIGZvciBwcm90b2J1ZiBtZXNzYWdlIGdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkZpbmFsaXplQXJ0aWZhY3RSZXF1ZXN0XG4gKi9cbmV4cG9ydHMuRmluYWxpemVBcnRpZmFjdFJlcXVlc3QgPSBuZXcgRmluYWxpemVBcnRpZmFjdFJlcXVlc3QkVHlwZSgpO1xuLy8gQGdlbmVyYXRlZCBtZXNzYWdlIHR5cGUgd2l0aCByZWZsZWN0aW9uIGluZm9ybWF0aW9uLCBtYXkgcHJvdmlkZSBzcGVlZCBvcHRpbWl6ZWQgbWV0aG9kc1xuY2xhc3MgRmluYWxpemVBcnRpZmFjdFJlc3BvbnNlJFR5cGUgZXh0ZW5kcyBydW50aW1lXzUuTWVzc2FnZVR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcImdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkZpbmFsaXplQXJ0aWZhY3RSZXNwb25zZVwiLCBbXG4gICAgICAgICAgICB7IG5vOiAxLCBuYW1lOiBcIm9rXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDggLypTY2FsYXJUeXBlLkJPT0wqLyB9LFxuICAgICAgICAgICAgeyBubzogMiwgbmFtZTogXCJhcnRpZmFjdF9pZFwiLCBraW5kOiBcInNjYWxhclwiLCBUOiAzIC8qU2NhbGFyVHlwZS5JTlQ2NCovIH1cbiAgICAgICAgXSk7XG4gICAgfVxuICAgIGNyZWF0ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0geyBvazogZmFsc2UsIGFydGlmYWN0SWQ6IFwiMFwiIH07XG4gICAgICAgIGdsb2JhbFRoaXMuT2JqZWN0LmRlZmluZVByb3BlcnR5KG1lc3NhZ2UsIHJ1bnRpbWVfNC5NRVNTQUdFX1RZUEUsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0aGlzIH0pO1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICgwLCBydW50aW1lXzMucmVmbGVjdGlvbk1lcmdlUGFydGlhbCkodGhpcywgbWVzc2FnZSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlSZWFkKHJlYWRlciwgbGVuZ3RoLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSB0YXJnZXQgIT09IG51bGwgJiYgdGFyZ2V0ICE9PSB2b2lkIDAgPyB0YXJnZXQgOiB0aGlzLmNyZWF0ZSgpLCBlbmQgPSByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgbGV0IFtmaWVsZE5vLCB3aXJlVHlwZV0gPSByZWFkZXIudGFnKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkTm8pIHtcbiAgICAgICAgICAgICAgICBjYXNlIC8qIGJvb2wgb2sgKi8gMTpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5vayA9IHJlYWRlci5ib29sKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgLyogaW50NjQgYXJ0aWZhY3RfaWQgKi8gMjpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5hcnRpZmFjdElkID0gcmVhZGVyLmludDY0KCkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBvcHRpb25zLnJlYWRVbmtub3duRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ID09PSBcInRocm93XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZ2xvYmFsVGhpcy5FcnJvcihgVW5rbm93biBmaWVsZCAke2ZpZWxkTm99ICh3aXJlIHR5cGUgJHt3aXJlVHlwZX0pIGZvciAke3RoaXMudHlwZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkID0gcmVhZGVyLnNraXAod2lyZVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAodSA9PT0gdHJ1ZSA/IHJ1bnRpbWVfMi5Vbmtub3duRmllbGRIYW5kbGVyLm9uUmVhZCA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIGZpZWxkTm8sIHdpcmVUeXBlLCBkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLCB3cml0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgLyogYm9vbCBvayA9IDE7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLm9rICE9PSBmYWxzZSlcbiAgICAgICAgICAgIHdyaXRlci50YWcoMSwgcnVudGltZV8xLldpcmVUeXBlLlZhcmludCkuYm9vbChtZXNzYWdlLm9rKTtcbiAgICAgICAgLyogaW50NjQgYXJ0aWZhY3RfaWQgPSAyOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS5hcnRpZmFjdElkICE9PSBcIjBcIilcbiAgICAgICAgICAgIHdyaXRlci50YWcoMiwgcnVudGltZV8xLldpcmVUeXBlLlZhcmludCkuaW50NjQobWVzc2FnZS5hcnRpZmFjdElkKTtcbiAgICAgICAgbGV0IHUgPSBvcHRpb25zLndyaXRlVW5rbm93bkZpZWxkcztcbiAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgKHUgPT0gdHJ1ZSA/IHJ1bnRpbWVfMi5Vbmtub3duRmllbGRIYW5kbGVyLm9uV3JpdGUgOiB1KSh0aGlzLnR5cGVOYW1lLCBtZXNzYWdlLCB3cml0ZXIpO1xuICAgICAgICByZXR1cm4gd3JpdGVyO1xuICAgIH1cbn1cbi8qKlxuICogQGdlbmVyYXRlZCBNZXNzYWdlVHlwZSBmb3IgcHJvdG9idWYgbWVzc2FnZSBnaXRodWIuYWN0aW9ucy5yZXN1bHRzLmFwaS52MS5GaW5hbGl6ZUFydGlmYWN0UmVzcG9uc2VcbiAqL1xuZXhwb3J0cy5GaW5hbGl6ZUFydGlmYWN0UmVzcG9uc2UgPSBuZXcgRmluYWxpemVBcnRpZmFjdFJlc3BvbnNlJFR5cGUoKTtcbi8vIEBnZW5lcmF0ZWQgbWVzc2FnZSB0eXBlIHdpdGggcmVmbGVjdGlvbiBpbmZvcm1hdGlvbiwgbWF5IHByb3ZpZGUgc3BlZWQgb3B0aW1pemVkIG1ldGhvZHNcbmNsYXNzIExpc3RBcnRpZmFjdHNSZXF1ZXN0JFR5cGUgZXh0ZW5kcyBydW50aW1lXzUuTWVzc2FnZVR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcImdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkxpc3RBcnRpZmFjdHNSZXF1ZXN0XCIsIFtcbiAgICAgICAgICAgIHsgbm86IDEsIG5hbWU6IFwid29ya2Zsb3dfcnVuX2JhY2tlbmRfaWRcIiwga2luZDogXCJzY2FsYXJcIiwgVDogOSAvKlNjYWxhclR5cGUuU1RSSU5HKi8gfSxcbiAgICAgICAgICAgIHsgbm86IDIsIG5hbWU6IFwid29ya2Zsb3dfam9iX3J1bl9iYWNrZW5kX2lkXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDkgLypTY2FsYXJUeXBlLlNUUklORyovIH0sXG4gICAgICAgICAgICB7IG5vOiAzLCBuYW1lOiBcIm5hbWVfZmlsdGVyXCIsIGtpbmQ6IFwibWVzc2FnZVwiLCBUOiAoKSA9PiB3cmFwcGVyc18yLlN0cmluZ1ZhbHVlIH0sXG4gICAgICAgICAgICB7IG5vOiA0LCBuYW1lOiBcImlkX2ZpbHRlclwiLCBraW5kOiBcIm1lc3NhZ2VcIiwgVDogKCkgPT4gd3JhcHBlcnNfMS5JbnQ2NFZhbHVlIH1cbiAgICAgICAgXSk7XG4gICAgfVxuICAgIGNyZWF0ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0geyB3b3JrZmxvd1J1bkJhY2tlbmRJZDogXCJcIiwgd29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQ6IFwiXCIgfTtcbiAgICAgICAgZ2xvYmFsVGhpcy5PYmplY3QuZGVmaW5lUHJvcGVydHkobWVzc2FnZSwgcnVudGltZV80Lk1FU1NBR0VfVFlQRSwgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRoaXMgfSk7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgKDAsIHJ1bnRpbWVfMy5yZWZsZWN0aW9uTWVyZ2VQYXJ0aWFsKSh0aGlzLCBtZXNzYWdlLCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVJlYWQocmVhZGVyLCBsZW5ndGgsIG9wdGlvbnMsIHRhcmdldCkge1xuICAgICAgICBsZXQgbWVzc2FnZSA9IHRhcmdldCAhPT0gbnVsbCAmJiB0YXJnZXQgIT09IHZvaWQgMCA/IHRhcmdldCA6IHRoaXMuY3JlYXRlKCksIGVuZCA9IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICBsZXQgW2ZpZWxkTm8sIHdpcmVUeXBlXSA9IHJlYWRlci50YWcoKTtcbiAgICAgICAgICAgIHN3aXRjaCAoZmllbGRObykge1xuICAgICAgICAgICAgICAgIGNhc2UgLyogc3RyaW5nIHdvcmtmbG93X3J1bl9iYWNrZW5kX2lkICovIDE6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uud29ya2Zsb3dSdW5CYWNrZW5kSWQgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgLyogc3RyaW5nIHdvcmtmbG93X2pvYl9ydW5fYmFja2VuZF9pZCAqLyAyOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLndvcmtmbG93Sm9iUnVuQmFja2VuZElkID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIC8qIGdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZSBuYW1lX2ZpbHRlciAqLyAzOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLm5hbWVGaWx0ZXIgPSB3cmFwcGVyc18yLlN0cmluZ1ZhbHVlLmludGVybmFsQmluYXJ5UmVhZChyZWFkZXIsIHJlYWRlci51aW50MzIoKSwgb3B0aW9ucywgbWVzc2FnZS5uYW1lRmlsdGVyKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBnb29nbGUucHJvdG9idWYuSW50NjRWYWx1ZSBpZF9maWx0ZXIgKi8gNDpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5pZEZpbHRlciA9IHdyYXBwZXJzXzEuSW50NjRWYWx1ZS5pbnRlcm5hbEJpbmFyeVJlYWQocmVhZGVyLCByZWFkZXIudWludDMyKCksIG9wdGlvbnMsIG1lc3NhZ2UuaWRGaWx0ZXIpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBsZXQgdSA9IG9wdGlvbnMucmVhZFVua25vd25GaWVsZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgPT09IFwidGhyb3dcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBnbG9iYWxUaGlzLkVycm9yKGBVbmtub3duIGZpZWxkICR7ZmllbGROb30gKHdpcmUgdHlwZSAke3dpcmVUeXBlfSkgZm9yICR7dGhpcy50eXBlTmFtZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGQgPSByZWFkZXIuc2tpcCh3aXJlVHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICh1ID09PSB0cnVlID8gcnVudGltZV8yLlVua25vd25GaWVsZEhhbmRsZXIub25SZWFkIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgZmllbGRObywgd2lyZVR5cGUsIGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVdyaXRlKG1lc3NhZ2UsIHdyaXRlciwgb3B0aW9ucykge1xuICAgICAgICAvKiBzdHJpbmcgd29ya2Zsb3dfcnVuX2JhY2tlbmRfaWQgPSAxOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS53b3JrZmxvd1J1bkJhY2tlbmRJZCAhPT0gXCJcIilcbiAgICAgICAgICAgIHdyaXRlci50YWcoMSwgcnVudGltZV8xLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCkuc3RyaW5nKG1lc3NhZ2Uud29ya2Zsb3dSdW5CYWNrZW5kSWQpO1xuICAgICAgICAvKiBzdHJpbmcgd29ya2Zsb3dfam9iX3J1bl9iYWNrZW5kX2lkID0gMjsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2Uud29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQgIT09IFwiXCIpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDIsIHJ1bnRpbWVfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLnN0cmluZyhtZXNzYWdlLndvcmtmbG93Sm9iUnVuQmFja2VuZElkKTtcbiAgICAgICAgLyogZ29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlIG5hbWVfZmlsdGVyID0gMzsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2UubmFtZUZpbHRlcilcbiAgICAgICAgICAgIHdyYXBwZXJzXzIuU3RyaW5nVmFsdWUuaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLm5hbWVGaWx0ZXIsIHdyaXRlci50YWcoMywgcnVudGltZV8xLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCkuZm9yaygpLCBvcHRpb25zKS5qb2luKCk7XG4gICAgICAgIC8qIGdvb2dsZS5wcm90b2J1Zi5JbnQ2NFZhbHVlIGlkX2ZpbHRlciA9IDQ7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLmlkRmlsdGVyKVxuICAgICAgICAgICAgd3JhcHBlcnNfMS5JbnQ2NFZhbHVlLmludGVybmFsQmluYXJ5V3JpdGUobWVzc2FnZS5pZEZpbHRlciwgd3JpdGVyLnRhZyg0LCBydW50aW1lXzEuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKS5mb3JrKCksIG9wdGlvbnMpLmpvaW4oKTtcbiAgICAgICAgbGV0IHUgPSBvcHRpb25zLndyaXRlVW5rbm93bkZpZWxkcztcbiAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgKHUgPT0gdHJ1ZSA/IHJ1bnRpbWVfMi5Vbmtub3duRmllbGRIYW5kbGVyLm9uV3JpdGUgOiB1KSh0aGlzLnR5cGVOYW1lLCBtZXNzYWdlLCB3cml0ZXIpO1xuICAgICAgICByZXR1cm4gd3JpdGVyO1xuICAgIH1cbn1cbi8qKlxuICogQGdlbmVyYXRlZCBNZXNzYWdlVHlwZSBmb3IgcHJvdG9idWYgbWVzc2FnZSBnaXRodWIuYWN0aW9ucy5yZXN1bHRzLmFwaS52MS5MaXN0QXJ0aWZhY3RzUmVxdWVzdFxuICovXG5leHBvcnRzLkxpc3RBcnRpZmFjdHNSZXF1ZXN0ID0gbmV3IExpc3RBcnRpZmFjdHNSZXF1ZXN0JFR5cGUoKTtcbi8vIEBnZW5lcmF0ZWQgbWVzc2FnZSB0eXBlIHdpdGggcmVmbGVjdGlvbiBpbmZvcm1hdGlvbiwgbWF5IHByb3ZpZGUgc3BlZWQgb3B0aW1pemVkIG1ldGhvZHNcbmNsYXNzIExpc3RBcnRpZmFjdHNSZXNwb25zZSRUeXBlIGV4dGVuZHMgcnVudGltZV81Lk1lc3NhZ2VUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoXCJnaXRodWIuYWN0aW9ucy5yZXN1bHRzLmFwaS52MS5MaXN0QXJ0aWZhY3RzUmVzcG9uc2VcIiwgW1xuICAgICAgICAgICAgeyBubzogMSwgbmFtZTogXCJhcnRpZmFjdHNcIiwga2luZDogXCJtZXNzYWdlXCIsIHJlcGVhdDogMSAvKlJlcGVhdFR5cGUuUEFDS0VEKi8sIFQ6ICgpID0+IGV4cG9ydHMuTGlzdEFydGlmYWN0c1Jlc3BvbnNlX01vbm9saXRoQXJ0aWZhY3QgfVxuICAgICAgICBdKTtcbiAgICB9XG4gICAgY3JlYXRlKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7IGFydGlmYWN0czogW10gfTtcbiAgICAgICAgZ2xvYmFsVGhpcy5PYmplY3QuZGVmaW5lUHJvcGVydHkobWVzc2FnZSwgcnVudGltZV80Lk1FU1NBR0VfVFlQRSwgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRoaXMgfSk7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgKDAsIHJ1bnRpbWVfMy5yZWZsZWN0aW9uTWVyZ2VQYXJ0aWFsKSh0aGlzLCBtZXNzYWdlLCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVJlYWQocmVhZGVyLCBsZW5ndGgsIG9wdGlvbnMsIHRhcmdldCkge1xuICAgICAgICBsZXQgbWVzc2FnZSA9IHRhcmdldCAhPT0gbnVsbCAmJiB0YXJnZXQgIT09IHZvaWQgMCA/IHRhcmdldCA6IHRoaXMuY3JlYXRlKCksIGVuZCA9IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICBsZXQgW2ZpZWxkTm8sIHdpcmVUeXBlXSA9IHJlYWRlci50YWcoKTtcbiAgICAgICAgICAgIHN3aXRjaCAoZmllbGRObykge1xuICAgICAgICAgICAgICAgIGNhc2UgLyogcmVwZWF0ZWQgZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuTGlzdEFydGlmYWN0c1Jlc3BvbnNlLk1vbm9saXRoQXJ0aWZhY3QgYXJ0aWZhY3RzICovIDE6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYXJ0aWZhY3RzLnB1c2goZXhwb3J0cy5MaXN0QXJ0aWZhY3RzUmVzcG9uc2VfTW9ub2xpdGhBcnRpZmFjdC5pbnRlcm5hbEJpbmFyeVJlYWQocmVhZGVyLCByZWFkZXIudWludDMyKCksIG9wdGlvbnMpKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBvcHRpb25zLnJlYWRVbmtub3duRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ID09PSBcInRocm93XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZ2xvYmFsVGhpcy5FcnJvcihgVW5rbm93biBmaWVsZCAke2ZpZWxkTm99ICh3aXJlIHR5cGUgJHt3aXJlVHlwZX0pIGZvciAke3RoaXMudHlwZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkID0gcmVhZGVyLnNraXAod2lyZVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAodSA9PT0gdHJ1ZSA/IHJ1bnRpbWVfMi5Vbmtub3duRmllbGRIYW5kbGVyLm9uUmVhZCA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIGZpZWxkTm8sIHdpcmVUeXBlLCBkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLCB3cml0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgLyogcmVwZWF0ZWQgZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuTGlzdEFydGlmYWN0c1Jlc3BvbnNlLk1vbm9saXRoQXJ0aWZhY3QgYXJ0aWZhY3RzID0gMTsgKi9cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtZXNzYWdlLmFydGlmYWN0cy5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIGV4cG9ydHMuTGlzdEFydGlmYWN0c1Jlc3BvbnNlX01vbm9saXRoQXJ0aWZhY3QuaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLmFydGlmYWN0c1tpXSwgd3JpdGVyLnRhZygxLCBydW50aW1lXzEuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKS5mb3JrKCksIG9wdGlvbnMpLmpvaW4oKTtcbiAgICAgICAgbGV0IHUgPSBvcHRpb25zLndyaXRlVW5rbm93bkZpZWxkcztcbiAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgKHUgPT0gdHJ1ZSA/IHJ1bnRpbWVfMi5Vbmtub3duRmllbGRIYW5kbGVyLm9uV3JpdGUgOiB1KSh0aGlzLnR5cGVOYW1lLCBtZXNzYWdlLCB3cml0ZXIpO1xuICAgICAgICByZXR1cm4gd3JpdGVyO1xuICAgIH1cbn1cbi8qKlxuICogQGdlbmVyYXRlZCBNZXNzYWdlVHlwZSBmb3IgcHJvdG9idWYgbWVzc2FnZSBnaXRodWIuYWN0aW9ucy5yZXN1bHRzLmFwaS52MS5MaXN0QXJ0aWZhY3RzUmVzcG9uc2VcbiAqL1xuZXhwb3J0cy5MaXN0QXJ0aWZhY3RzUmVzcG9uc2UgPSBuZXcgTGlzdEFydGlmYWN0c1Jlc3BvbnNlJFR5cGUoKTtcbi8vIEBnZW5lcmF0ZWQgbWVzc2FnZSB0eXBlIHdpdGggcmVmbGVjdGlvbiBpbmZvcm1hdGlvbiwgbWF5IHByb3ZpZGUgc3BlZWQgb3B0aW1pemVkIG1ldGhvZHNcbmNsYXNzIExpc3RBcnRpZmFjdHNSZXNwb25zZV9Nb25vbGl0aEFydGlmYWN0JFR5cGUgZXh0ZW5kcyBydW50aW1lXzUuTWVzc2FnZVR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcImdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkxpc3RBcnRpZmFjdHNSZXNwb25zZS5Nb25vbGl0aEFydGlmYWN0XCIsIFtcbiAgICAgICAgICAgIHsgbm86IDEsIG5hbWU6IFwid29ya2Zsb3dfcnVuX2JhY2tlbmRfaWRcIiwga2luZDogXCJzY2FsYXJcIiwgVDogOSAvKlNjYWxhclR5cGUuU1RSSU5HKi8gfSxcbiAgICAgICAgICAgIHsgbm86IDIsIG5hbWU6IFwid29ya2Zsb3dfam9iX3J1bl9iYWNrZW5kX2lkXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDkgLypTY2FsYXJUeXBlLlNUUklORyovIH0sXG4gICAgICAgICAgICB7IG5vOiAzLCBuYW1lOiBcImRhdGFiYXNlX2lkXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDMgLypTY2FsYXJUeXBlLklOVDY0Ki8gfSxcbiAgICAgICAgICAgIHsgbm86IDQsIG5hbWU6IFwibmFtZVwiLCBraW5kOiBcInNjYWxhclwiLCBUOiA5IC8qU2NhbGFyVHlwZS5TVFJJTkcqLyB9LFxuICAgICAgICAgICAgeyBubzogNSwgbmFtZTogXCJzaXplXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDMgLypTY2FsYXJUeXBlLklOVDY0Ki8gfSxcbiAgICAgICAgICAgIHsgbm86IDYsIG5hbWU6IFwiY3JlYXRlZF9hdFwiLCBraW5kOiBcIm1lc3NhZ2VcIiwgVDogKCkgPT4gdGltZXN0YW1wXzEuVGltZXN0YW1wIH1cbiAgICAgICAgXSk7XG4gICAgfVxuICAgIGNyZWF0ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0geyB3b3JrZmxvd1J1bkJhY2tlbmRJZDogXCJcIiwgd29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQ6IFwiXCIsIGRhdGFiYXNlSWQ6IFwiMFwiLCBuYW1lOiBcIlwiLCBzaXplOiBcIjBcIiB9O1xuICAgICAgICBnbG9iYWxUaGlzLk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZXNzYWdlLCBydW50aW1lXzQuTUVTU0FHRV9UWVBFLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdGhpcyB9KTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAoMCwgcnVudGltZV8zLnJlZmxlY3Rpb25NZXJnZVBhcnRpYWwpKHRoaXMsIG1lc3NhZ2UsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5UmVhZChyZWFkZXIsIGxlbmd0aCwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGxldCBtZXNzYWdlID0gdGFyZ2V0ICE9PSBudWxsICYmIHRhcmdldCAhPT0gdm9pZCAwID8gdGFyZ2V0IDogdGhpcy5jcmVhdGUoKSwgZW5kID0gcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgIGxldCBbZmllbGRObywgd2lyZVR5cGVdID0gcmVhZGVyLnRhZygpO1xuICAgICAgICAgICAgc3dpdGNoIChmaWVsZE5vKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBzdHJpbmcgd29ya2Zsb3dfcnVuX2JhY2tlbmRfaWQgKi8gMTpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS53b3JrZmxvd1J1bkJhY2tlbmRJZCA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBzdHJpbmcgd29ya2Zsb3dfam9iX3J1bl9iYWNrZW5kX2lkICovIDI6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uud29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgLyogaW50NjQgZGF0YWJhc2VfaWQgKi8gMzpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5kYXRhYmFzZUlkID0gcmVhZGVyLmludDY0KCkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBzdHJpbmcgbmFtZSAqLyA0OlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLm5hbWUgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgLyogaW50NjQgc2l6ZSAqLyA1OlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnNpemUgPSByZWFkZXIuaW50NjQoKS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIC8qIGdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAgY3JlYXRlZF9hdCAqLyA2OlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmNyZWF0ZWRBdCA9IHRpbWVzdGFtcF8xLlRpbWVzdGFtcC5pbnRlcm5hbEJpbmFyeVJlYWQocmVhZGVyLCByZWFkZXIudWludDMyKCksIG9wdGlvbnMsIG1lc3NhZ2UuY3JlYXRlZEF0KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBvcHRpb25zLnJlYWRVbmtub3duRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ID09PSBcInRocm93XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZ2xvYmFsVGhpcy5FcnJvcihgVW5rbm93biBmaWVsZCAke2ZpZWxkTm99ICh3aXJlIHR5cGUgJHt3aXJlVHlwZX0pIGZvciAke3RoaXMudHlwZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkID0gcmVhZGVyLnNraXAod2lyZVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAodSA9PT0gdHJ1ZSA/IHJ1bnRpbWVfMi5Vbmtub3duRmllbGRIYW5kbGVyLm9uUmVhZCA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIGZpZWxkTm8sIHdpcmVUeXBlLCBkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLCB3cml0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgLyogc3RyaW5nIHdvcmtmbG93X3J1bl9iYWNrZW5kX2lkID0gMTsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2Uud29ya2Zsb3dSdW5CYWNrZW5kSWQgIT09IFwiXCIpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDEsIHJ1bnRpbWVfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLnN0cmluZyhtZXNzYWdlLndvcmtmbG93UnVuQmFja2VuZElkKTtcbiAgICAgICAgLyogc3RyaW5nIHdvcmtmbG93X2pvYl9ydW5fYmFja2VuZF9pZCA9IDI7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLndvcmtmbG93Sm9iUnVuQmFja2VuZElkICE9PSBcIlwiKVxuICAgICAgICAgICAgd3JpdGVyLnRhZygyLCBydW50aW1lXzEuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKS5zdHJpbmcobWVzc2FnZS53b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZCk7XG4gICAgICAgIC8qIGludDY0IGRhdGFiYXNlX2lkID0gMzsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2UuZGF0YWJhc2VJZCAhPT0gXCIwXCIpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDMsIHJ1bnRpbWVfMS5XaXJlVHlwZS5WYXJpbnQpLmludDY0KG1lc3NhZ2UuZGF0YWJhc2VJZCk7XG4gICAgICAgIC8qIHN0cmluZyBuYW1lID0gNDsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2UubmFtZSAhPT0gXCJcIilcbiAgICAgICAgICAgIHdyaXRlci50YWcoNCwgcnVudGltZV8xLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCkuc3RyaW5nKG1lc3NhZ2UubmFtZSk7XG4gICAgICAgIC8qIGludDY0IHNpemUgPSA1OyAqL1xuICAgICAgICBpZiAobWVzc2FnZS5zaXplICE9PSBcIjBcIilcbiAgICAgICAgICAgIHdyaXRlci50YWcoNSwgcnVudGltZV8xLldpcmVUeXBlLlZhcmludCkuaW50NjQobWVzc2FnZS5zaXplKTtcbiAgICAgICAgLyogZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCBjcmVhdGVkX2F0ID0gNjsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2UuY3JlYXRlZEF0KVxuICAgICAgICAgICAgdGltZXN0YW1wXzEuVGltZXN0YW1wLmludGVybmFsQmluYXJ5V3JpdGUobWVzc2FnZS5jcmVhdGVkQXQsIHdyaXRlci50YWcoNiwgcnVudGltZV8xLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCkuZm9yaygpLCBvcHRpb25zKS5qb2luKCk7XG4gICAgICAgIGxldCB1ID0gb3B0aW9ucy53cml0ZVVua25vd25GaWVsZHM7XG4gICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICh1ID09IHRydWUgPyBydW50aW1lXzIuVW5rbm93bkZpZWxkSGFuZGxlci5vbldyaXRlIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgd3JpdGVyKTtcbiAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICB9XG59XG4vKipcbiAqIEBnZW5lcmF0ZWQgTWVzc2FnZVR5cGUgZm9yIHByb3RvYnVmIG1lc3NhZ2UgZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuTGlzdEFydGlmYWN0c1Jlc3BvbnNlLk1vbm9saXRoQXJ0aWZhY3RcbiAqL1xuZXhwb3J0cy5MaXN0QXJ0aWZhY3RzUmVzcG9uc2VfTW9ub2xpdGhBcnRpZmFjdCA9IG5ldyBMaXN0QXJ0aWZhY3RzUmVzcG9uc2VfTW9ub2xpdGhBcnRpZmFjdCRUeXBlKCk7XG4vLyBAZ2VuZXJhdGVkIG1lc3NhZ2UgdHlwZSB3aXRoIHJlZmxlY3Rpb24gaW5mb3JtYXRpb24sIG1heSBwcm92aWRlIHNwZWVkIG9wdGltaXplZCBtZXRob2RzXG5jbGFzcyBHZXRTaWduZWRBcnRpZmFjdFVSTFJlcXVlc3QkVHlwZSBleHRlbmRzIHJ1bnRpbWVfNS5NZXNzYWdlVHlwZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuR2V0U2lnbmVkQXJ0aWZhY3RVUkxSZXF1ZXN0XCIsIFtcbiAgICAgICAgICAgIHsgbm86IDEsIG5hbWU6IFwid29ya2Zsb3dfcnVuX2JhY2tlbmRfaWRcIiwga2luZDogXCJzY2FsYXJcIiwgVDogOSAvKlNjYWxhclR5cGUuU1RSSU5HKi8gfSxcbiAgICAgICAgICAgIHsgbm86IDIsIG5hbWU6IFwid29ya2Zsb3dfam9iX3J1bl9iYWNrZW5kX2lkXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDkgLypTY2FsYXJUeXBlLlNUUklORyovIH0sXG4gICAgICAgICAgICB7IG5vOiAzLCBuYW1lOiBcIm5hbWVcIiwga2luZDogXCJzY2FsYXJcIiwgVDogOSAvKlNjYWxhclR5cGUuU1RSSU5HKi8gfVxuICAgICAgICBdKTtcbiAgICB9XG4gICAgY3JlYXRlKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7IHdvcmtmbG93UnVuQmFja2VuZElkOiBcIlwiLCB3b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZDogXCJcIiwgbmFtZTogXCJcIiB9O1xuICAgICAgICBnbG9iYWxUaGlzLk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZXNzYWdlLCBydW50aW1lXzQuTUVTU0FHRV9UWVBFLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdGhpcyB9KTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAoMCwgcnVudGltZV8zLnJlZmxlY3Rpb25NZXJnZVBhcnRpYWwpKHRoaXMsIG1lc3NhZ2UsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5UmVhZChyZWFkZXIsIGxlbmd0aCwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGxldCBtZXNzYWdlID0gdGFyZ2V0ICE9PSBudWxsICYmIHRhcmdldCAhPT0gdm9pZCAwID8gdGFyZ2V0IDogdGhpcy5jcmVhdGUoKSwgZW5kID0gcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgIGxldCBbZmllbGRObywgd2lyZVR5cGVdID0gcmVhZGVyLnRhZygpO1xuICAgICAgICAgICAgc3dpdGNoIChmaWVsZE5vKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBzdHJpbmcgd29ya2Zsb3dfcnVuX2JhY2tlbmRfaWQgKi8gMTpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS53b3JrZmxvd1J1bkJhY2tlbmRJZCA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBzdHJpbmcgd29ya2Zsb3dfam9iX3J1bl9iYWNrZW5kX2lkICovIDI6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uud29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgLyogc3RyaW5nIG5hbWUgKi8gMzpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5uYW1lID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBsZXQgdSA9IG9wdGlvbnMucmVhZFVua25vd25GaWVsZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgPT09IFwidGhyb3dcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBnbG9iYWxUaGlzLkVycm9yKGBVbmtub3duIGZpZWxkICR7ZmllbGROb30gKHdpcmUgdHlwZSAke3dpcmVUeXBlfSkgZm9yICR7dGhpcy50eXBlTmFtZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGQgPSByZWFkZXIuc2tpcCh3aXJlVHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICh1ID09PSB0cnVlID8gcnVudGltZV8yLlVua25vd25GaWVsZEhhbmRsZXIub25SZWFkIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgZmllbGRObywgd2lyZVR5cGUsIGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVdyaXRlKG1lc3NhZ2UsIHdyaXRlciwgb3B0aW9ucykge1xuICAgICAgICAvKiBzdHJpbmcgd29ya2Zsb3dfcnVuX2JhY2tlbmRfaWQgPSAxOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS53b3JrZmxvd1J1bkJhY2tlbmRJZCAhPT0gXCJcIilcbiAgICAgICAgICAgIHdyaXRlci50YWcoMSwgcnVudGltZV8xLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCkuc3RyaW5nKG1lc3NhZ2Uud29ya2Zsb3dSdW5CYWNrZW5kSWQpO1xuICAgICAgICAvKiBzdHJpbmcgd29ya2Zsb3dfam9iX3J1bl9iYWNrZW5kX2lkID0gMjsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2Uud29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQgIT09IFwiXCIpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDIsIHJ1bnRpbWVfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLnN0cmluZyhtZXNzYWdlLndvcmtmbG93Sm9iUnVuQmFja2VuZElkKTtcbiAgICAgICAgLyogc3RyaW5nIG5hbWUgPSAzOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS5uYW1lICE9PSBcIlwiKVxuICAgICAgICAgICAgd3JpdGVyLnRhZygzLCBydW50aW1lXzEuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKS5zdHJpbmcobWVzc2FnZS5uYW1lKTtcbiAgICAgICAgbGV0IHUgPSBvcHRpb25zLndyaXRlVW5rbm93bkZpZWxkcztcbiAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgKHUgPT0gdHJ1ZSA/IHJ1bnRpbWVfMi5Vbmtub3duRmllbGRIYW5kbGVyLm9uV3JpdGUgOiB1KSh0aGlzLnR5cGVOYW1lLCBtZXNzYWdlLCB3cml0ZXIpO1xuICAgICAgICByZXR1cm4gd3JpdGVyO1xuICAgIH1cbn1cbi8qKlxuICogQGdlbmVyYXRlZCBNZXNzYWdlVHlwZSBmb3IgcHJvdG9idWYgbWVzc2FnZSBnaXRodWIuYWN0aW9ucy5yZXN1bHRzLmFwaS52MS5HZXRTaWduZWRBcnRpZmFjdFVSTFJlcXVlc3RcbiAqL1xuZXhwb3J0cy5HZXRTaWduZWRBcnRpZmFjdFVSTFJlcXVlc3QgPSBuZXcgR2V0U2lnbmVkQXJ0aWZhY3RVUkxSZXF1ZXN0JFR5cGUoKTtcbi8vIEBnZW5lcmF0ZWQgbWVzc2FnZSB0eXBlIHdpdGggcmVmbGVjdGlvbiBpbmZvcm1hdGlvbiwgbWF5IHByb3ZpZGUgc3BlZWQgb3B0aW1pemVkIG1ldGhvZHNcbmNsYXNzIEdldFNpZ25lZEFydGlmYWN0VVJMUmVzcG9uc2UkVHlwZSBleHRlbmRzIHJ1bnRpbWVfNS5NZXNzYWdlVHlwZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuR2V0U2lnbmVkQXJ0aWZhY3RVUkxSZXNwb25zZVwiLCBbXG4gICAgICAgICAgICB7IG5vOiAxLCBuYW1lOiBcInNpZ25lZF91cmxcIiwga2luZDogXCJzY2FsYXJcIiwgVDogOSAvKlNjYWxhclR5cGUuU1RSSU5HKi8gfVxuICAgICAgICBdKTtcbiAgICB9XG4gICAgY3JlYXRlKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7IHNpZ25lZFVybDogXCJcIiB9O1xuICAgICAgICBnbG9iYWxUaGlzLk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZXNzYWdlLCBydW50aW1lXzQuTUVTU0FHRV9UWVBFLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdGhpcyB9KTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAoMCwgcnVudGltZV8zLnJlZmxlY3Rpb25NZXJnZVBhcnRpYWwpKHRoaXMsIG1lc3NhZ2UsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5UmVhZChyZWFkZXIsIGxlbmd0aCwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGxldCBtZXNzYWdlID0gdGFyZ2V0ICE9PSBudWxsICYmIHRhcmdldCAhPT0gdm9pZCAwID8gdGFyZ2V0IDogdGhpcy5jcmVhdGUoKSwgZW5kID0gcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgIGxldCBbZmllbGRObywgd2lyZVR5cGVdID0gcmVhZGVyLnRhZygpO1xuICAgICAgICAgICAgc3dpdGNoIChmaWVsZE5vKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBzdHJpbmcgc2lnbmVkX3VybCAqLyAxOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnNpZ25lZFVybCA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBvcHRpb25zLnJlYWRVbmtub3duRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ID09PSBcInRocm93XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZ2xvYmFsVGhpcy5FcnJvcihgVW5rbm93biBmaWVsZCAke2ZpZWxkTm99ICh3aXJlIHR5cGUgJHt3aXJlVHlwZX0pIGZvciAke3RoaXMudHlwZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkID0gcmVhZGVyLnNraXAod2lyZVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAodSA9PT0gdHJ1ZSA/IHJ1bnRpbWVfMi5Vbmtub3duRmllbGRIYW5kbGVyLm9uUmVhZCA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIGZpZWxkTm8sIHdpcmVUeXBlLCBkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLCB3cml0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgLyogc3RyaW5nIHNpZ25lZF91cmwgPSAxOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS5zaWduZWRVcmwgIT09IFwiXCIpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDEsIHJ1bnRpbWVfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLnN0cmluZyhtZXNzYWdlLnNpZ25lZFVybCk7XG4gICAgICAgIGxldCB1ID0gb3B0aW9ucy53cml0ZVVua25vd25GaWVsZHM7XG4gICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICh1ID09IHRydWUgPyBydW50aW1lXzIuVW5rbm93bkZpZWxkSGFuZGxlci5vbldyaXRlIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgd3JpdGVyKTtcbiAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICB9XG59XG4vKipcbiAqIEBnZW5lcmF0ZWQgTWVzc2FnZVR5cGUgZm9yIHByb3RvYnVmIG1lc3NhZ2UgZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuR2V0U2lnbmVkQXJ0aWZhY3RVUkxSZXNwb25zZVxuICovXG5leHBvcnRzLkdldFNpZ25lZEFydGlmYWN0VVJMUmVzcG9uc2UgPSBuZXcgR2V0U2lnbmVkQXJ0aWZhY3RVUkxSZXNwb25zZSRUeXBlKCk7XG4vLyBAZ2VuZXJhdGVkIG1lc3NhZ2UgdHlwZSB3aXRoIHJlZmxlY3Rpb24gaW5mb3JtYXRpb24sIG1heSBwcm92aWRlIHNwZWVkIG9wdGltaXplZCBtZXRob2RzXG5jbGFzcyBEZWxldGVBcnRpZmFjdFJlcXVlc3QkVHlwZSBleHRlbmRzIHJ1bnRpbWVfNS5NZXNzYWdlVHlwZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuRGVsZXRlQXJ0aWZhY3RSZXF1ZXN0XCIsIFtcbiAgICAgICAgICAgIHsgbm86IDEsIG5hbWU6IFwid29ya2Zsb3dfcnVuX2JhY2tlbmRfaWRcIiwga2luZDogXCJzY2FsYXJcIiwgVDogOSAvKlNjYWxhclR5cGUuU1RSSU5HKi8gfSxcbiAgICAgICAgICAgIHsgbm86IDIsIG5hbWU6IFwid29ya2Zsb3dfam9iX3J1bl9iYWNrZW5kX2lkXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDkgLypTY2FsYXJUeXBlLlNUUklORyovIH0sXG4gICAgICAgICAgICB7IG5vOiAzLCBuYW1lOiBcIm5hbWVcIiwga2luZDogXCJzY2FsYXJcIiwgVDogOSAvKlNjYWxhclR5cGUuU1RSSU5HKi8gfVxuICAgICAgICBdKTtcbiAgICB9XG4gICAgY3JlYXRlKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7IHdvcmtmbG93UnVuQmFja2VuZElkOiBcIlwiLCB3b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZDogXCJcIiwgbmFtZTogXCJcIiB9O1xuICAgICAgICBnbG9iYWxUaGlzLk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZXNzYWdlLCBydW50aW1lXzQuTUVTU0FHRV9UWVBFLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdGhpcyB9KTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAoMCwgcnVudGltZV8zLnJlZmxlY3Rpb25NZXJnZVBhcnRpYWwpKHRoaXMsIG1lc3NhZ2UsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5UmVhZChyZWFkZXIsIGxlbmd0aCwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGxldCBtZXNzYWdlID0gdGFyZ2V0ICE9PSBudWxsICYmIHRhcmdldCAhPT0gdm9pZCAwID8gdGFyZ2V0IDogdGhpcy5jcmVhdGUoKSwgZW5kID0gcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgIGxldCBbZmllbGRObywgd2lyZVR5cGVdID0gcmVhZGVyLnRhZygpO1xuICAgICAgICAgICAgc3dpdGNoIChmaWVsZE5vKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBzdHJpbmcgd29ya2Zsb3dfcnVuX2JhY2tlbmRfaWQgKi8gMTpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS53b3JrZmxvd1J1bkJhY2tlbmRJZCA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBzdHJpbmcgd29ya2Zsb3dfam9iX3J1bl9iYWNrZW5kX2lkICovIDI6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uud29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgLyogc3RyaW5nIG5hbWUgKi8gMzpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5uYW1lID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBsZXQgdSA9IG9wdGlvbnMucmVhZFVua25vd25GaWVsZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgPT09IFwidGhyb3dcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBnbG9iYWxUaGlzLkVycm9yKGBVbmtub3duIGZpZWxkICR7ZmllbGROb30gKHdpcmUgdHlwZSAke3dpcmVUeXBlfSkgZm9yICR7dGhpcy50eXBlTmFtZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGQgPSByZWFkZXIuc2tpcCh3aXJlVHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICh1ID09PSB0cnVlID8gcnVudGltZV8yLlVua25vd25GaWVsZEhhbmRsZXIub25SZWFkIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgZmllbGRObywgd2lyZVR5cGUsIGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVdyaXRlKG1lc3NhZ2UsIHdyaXRlciwgb3B0aW9ucykge1xuICAgICAgICAvKiBzdHJpbmcgd29ya2Zsb3dfcnVuX2JhY2tlbmRfaWQgPSAxOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS53b3JrZmxvd1J1bkJhY2tlbmRJZCAhPT0gXCJcIilcbiAgICAgICAgICAgIHdyaXRlci50YWcoMSwgcnVudGltZV8xLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCkuc3RyaW5nKG1lc3NhZ2Uud29ya2Zsb3dSdW5CYWNrZW5kSWQpO1xuICAgICAgICAvKiBzdHJpbmcgd29ya2Zsb3dfam9iX3J1bl9iYWNrZW5kX2lkID0gMjsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2Uud29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQgIT09IFwiXCIpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDIsIHJ1bnRpbWVfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLnN0cmluZyhtZXNzYWdlLndvcmtmbG93Sm9iUnVuQmFja2VuZElkKTtcbiAgICAgICAgLyogc3RyaW5nIG5hbWUgPSAzOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS5uYW1lICE9PSBcIlwiKVxuICAgICAgICAgICAgd3JpdGVyLnRhZygzLCBydW50aW1lXzEuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKS5zdHJpbmcobWVzc2FnZS5uYW1lKTtcbiAgICAgICAgbGV0IHUgPSBvcHRpb25zLndyaXRlVW5rbm93bkZpZWxkcztcbiAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgKHUgPT0gdHJ1ZSA/IHJ1bnRpbWVfMi5Vbmtub3duRmllbGRIYW5kbGVyLm9uV3JpdGUgOiB1KSh0aGlzLnR5cGVOYW1lLCBtZXNzYWdlLCB3cml0ZXIpO1xuICAgICAgICByZXR1cm4gd3JpdGVyO1xuICAgIH1cbn1cbi8qKlxuICogQGdlbmVyYXRlZCBNZXNzYWdlVHlwZSBmb3IgcHJvdG9idWYgbWVzc2FnZSBnaXRodWIuYWN0aW9ucy5yZXN1bHRzLmFwaS52MS5EZWxldGVBcnRpZmFjdFJlcXVlc3RcbiAqL1xuZXhwb3J0cy5EZWxldGVBcnRpZmFjdFJlcXVlc3QgPSBuZXcgRGVsZXRlQXJ0aWZhY3RSZXF1ZXN0JFR5cGUoKTtcbi8vIEBnZW5lcmF0ZWQgbWVzc2FnZSB0eXBlIHdpdGggcmVmbGVjdGlvbiBpbmZvcm1hdGlvbiwgbWF5IHByb3ZpZGUgc3BlZWQgb3B0aW1pemVkIG1ldGhvZHNcbmNsYXNzIERlbGV0ZUFydGlmYWN0UmVzcG9uc2UkVHlwZSBleHRlbmRzIHJ1bnRpbWVfNS5NZXNzYWdlVHlwZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuRGVsZXRlQXJ0aWZhY3RSZXNwb25zZVwiLCBbXG4gICAgICAgICAgICB7IG5vOiAxLCBuYW1lOiBcIm9rXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDggLypTY2FsYXJUeXBlLkJPT0wqLyB9LFxuICAgICAgICAgICAgeyBubzogMiwgbmFtZTogXCJhcnRpZmFjdF9pZFwiLCBraW5kOiBcInNjYWxhclwiLCBUOiAzIC8qU2NhbGFyVHlwZS5JTlQ2NCovIH1cbiAgICAgICAgXSk7XG4gICAgfVxuICAgIGNyZWF0ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0geyBvazogZmFsc2UsIGFydGlmYWN0SWQ6IFwiMFwiIH07XG4gICAgICAgIGdsb2JhbFRoaXMuT2JqZWN0LmRlZmluZVByb3BlcnR5KG1lc3NhZ2UsIHJ1bnRpbWVfNC5NRVNTQUdFX1RZUEUsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0aGlzIH0pO1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICgwLCBydW50aW1lXzMucmVmbGVjdGlvbk1lcmdlUGFydGlhbCkodGhpcywgbWVzc2FnZSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlSZWFkKHJlYWRlciwgbGVuZ3RoLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSB0YXJnZXQgIT09IG51bGwgJiYgdGFyZ2V0ICE9PSB2b2lkIDAgPyB0YXJnZXQgOiB0aGlzLmNyZWF0ZSgpLCBlbmQgPSByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgbGV0IFtmaWVsZE5vLCB3aXJlVHlwZV0gPSByZWFkZXIudGFnKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkTm8pIHtcbiAgICAgICAgICAgICAgICBjYXNlIC8qIGJvb2wgb2sgKi8gMTpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5vayA9IHJlYWRlci5ib29sKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgLyogaW50NjQgYXJ0aWZhY3RfaWQgKi8gMjpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5hcnRpZmFjdElkID0gcmVhZGVyLmludDY0KCkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBvcHRpb25zLnJlYWRVbmtub3duRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ID09PSBcInRocm93XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZ2xvYmFsVGhpcy5FcnJvcihgVW5rbm93biBmaWVsZCAke2ZpZWxkTm99ICh3aXJlIHR5cGUgJHt3aXJlVHlwZX0pIGZvciAke3RoaXMudHlwZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkID0gcmVhZGVyLnNraXAod2lyZVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAodSA9PT0gdHJ1ZSA/IHJ1bnRpbWVfMi5Vbmtub3duRmllbGRIYW5kbGVyLm9uUmVhZCA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIGZpZWxkTm8sIHdpcmVUeXBlLCBkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLCB3cml0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgLyogYm9vbCBvayA9IDE7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLm9rICE9PSBmYWxzZSlcbiAgICAgICAgICAgIHdyaXRlci50YWcoMSwgcnVudGltZV8xLldpcmVUeXBlLlZhcmludCkuYm9vbChtZXNzYWdlLm9rKTtcbiAgICAgICAgLyogaW50NjQgYXJ0aWZhY3RfaWQgPSAyOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS5hcnRpZmFjdElkICE9PSBcIjBcIilcbiAgICAgICAgICAgIHdyaXRlci50YWcoMiwgcnVudGltZV8xLldpcmVUeXBlLlZhcmludCkuaW50NjQobWVzc2FnZS5hcnRpZmFjdElkKTtcbiAgICAgICAgbGV0IHUgPSBvcHRpb25zLndyaXRlVW5rbm93bkZpZWxkcztcbiAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgKHUgPT0gdHJ1ZSA/IHJ1bnRpbWVfMi5Vbmtub3duRmllbGRIYW5kbGVyLm9uV3JpdGUgOiB1KSh0aGlzLnR5cGVOYW1lLCBtZXNzYWdlLCB3cml0ZXIpO1xuICAgICAgICByZXR1cm4gd3JpdGVyO1xuICAgIH1cbn1cbi8qKlxuICogQGdlbmVyYXRlZCBNZXNzYWdlVHlwZSBmb3IgcHJvdG9idWYgbWVzc2FnZSBnaXRodWIuYWN0aW9ucy5yZXN1bHRzLmFwaS52MS5EZWxldGVBcnRpZmFjdFJlc3BvbnNlXG4gKi9cbmV4cG9ydHMuRGVsZXRlQXJ0aWZhY3RSZXNwb25zZSA9IG5ldyBEZWxldGVBcnRpZmFjdFJlc3BvbnNlJFR5cGUoKTtcbi8qKlxuICogQGdlbmVyYXRlZCBTZXJ2aWNlVHlwZSBmb3IgcHJvdG9idWYgc2VydmljZSBnaXRodWIuYWN0aW9ucy5yZXN1bHRzLmFwaS52MS5BcnRpZmFjdFNlcnZpY2VcbiAqL1xuZXhwb3J0cy5BcnRpZmFjdFNlcnZpY2UgPSBuZXcgcnVudGltZV9ycGNfMS5TZXJ2aWNlVHlwZShcImdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkFydGlmYWN0U2VydmljZVwiLCBbXG4gICAgeyBuYW1lOiBcIkNyZWF0ZUFydGlmYWN0XCIsIG9wdGlvbnM6IHt9LCBJOiBleHBvcnRzLkNyZWF0ZUFydGlmYWN0UmVxdWVzdCwgTzogZXhwb3J0cy5DcmVhdGVBcnRpZmFjdFJlc3BvbnNlIH0sXG4gICAgeyBuYW1lOiBcIkZpbmFsaXplQXJ0aWZhY3RcIiwgb3B0aW9uczoge30sIEk6IGV4cG9ydHMuRmluYWxpemVBcnRpZmFjdFJlcXVlc3QsIE86IGV4cG9ydHMuRmluYWxpemVBcnRpZmFjdFJlc3BvbnNlIH0sXG4gICAgeyBuYW1lOiBcIkxpc3RBcnRpZmFjdHNcIiwgb3B0aW9uczoge30sIEk6IGV4cG9ydHMuTGlzdEFydGlmYWN0c1JlcXVlc3QsIE86IGV4cG9ydHMuTGlzdEFydGlmYWN0c1Jlc3BvbnNlIH0sXG4gICAgeyBuYW1lOiBcIkdldFNpZ25lZEFydGlmYWN0VVJMXCIsIG9wdGlvbnM6IHt9LCBJOiBleHBvcnRzLkdldFNpZ25lZEFydGlmYWN0VVJMUmVxdWVzdCwgTzogZXhwb3J0cy5HZXRTaWduZWRBcnRpZmFjdFVSTFJlc3BvbnNlIH0sXG4gICAgeyBuYW1lOiBcIkRlbGV0ZUFydGlmYWN0XCIsIG9wdGlvbnM6IHt9LCBJOiBleHBvcnRzLkRlbGV0ZUFydGlmYWN0UmVxdWVzdCwgTzogZXhwb3J0cy5EZWxldGVBcnRpZmFjdFJlc3BvbnNlIH1cbl0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXJ0aWZhY3QuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNIb29rID0gZXhwb3J0cy5jaGFpbkhvb2tzID0gdm9pZCAwO1xuLy8gQ2hhaW5Ib29rcyBjcmVhdGVzIGEgbmV3IFNlcnZlckhvb2sgd2hpY2ggY2hhaW5zIHRoZSBjYWxsYmFja3MgaW5cbi8vIGVhY2ggb2YgdGhlIGNvbnN0aXR1ZW50IGhvb2tzIHBhc3NlZCBpbi4gRWFjaCBob29rIGZ1bmN0aW9uIHdpbGwgYmVcbi8vIGNhbGxlZCBpbiB0aGUgb3JkZXIgb2YgdGhlIFNlcnZlckhvb2tzIHZhbHVlcyBwYXNzZWQgaW4uXG4vL1xuLy8gRm9yIHRoZSBlcnJvcmluZyBob29rcywgUmVxdWVzdFJlY2VpdmVkIGFuZCBSZXF1ZXN0Um91dGVkLCBhbnkgcmV0dXJuZWRcbi8vIGVycm9ycyBwcmV2ZW50IHByb2Nlc3NpbmcgYnkgbGF0ZXIgaG9va3MuXG5mdW5jdGlvbiBjaGFpbkhvb2tzKC4uLmhvb2tzKSB7XG4gICAgaWYgKGhvb2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKGhvb2tzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gaG9va3NbMF07XG4gICAgfVxuICAgIGNvbnN0IHNlcnZlckhvb2sgPSB7XG4gICAgICAgIHJlcXVlc3RSZWNlaXZlZChjdHgpIHtcbiAgICAgICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBob29rIG9mIGhvb2tzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaG9vay5yZXF1ZXN0UmVjZWl2ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIGhvb2sucmVxdWVzdFJlY2VpdmVkKGN0eCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlcXVlc3RQcmVwYXJlZChjdHgpIHtcbiAgICAgICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBob29rIG9mIGhvb2tzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaG9vay5yZXF1ZXN0UHJlcGFyZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcImhvb2sgcmVxdWVzdFByZXBhcmVkIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCByZWxlYXNlLiBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlBsZWFzZSB1c2UgcmVzcG9uc2VQcmVwYXJlZCBpbnN0ZWFkLlwiKTtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgaG9vay5yZXF1ZXN0UHJlcGFyZWQoY3R4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVzcG9uc2VQcmVwYXJlZChjdHgpIHtcbiAgICAgICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBob29rIG9mIGhvb2tzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaG9vay5yZXNwb25zZVByZXBhcmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB5aWVsZCBob29rLnJlc3BvbnNlUHJlcGFyZWQoY3R4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVxdWVzdFNlbnQoY3R4KSB7XG4gICAgICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaG9vayBvZiBob29rcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWhvb2sucmVxdWVzdFNlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcImhvb2sgcmVxdWVzdFNlbnQgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IHJlbGVhc2UuIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiUGxlYXNlIHVzZSByZXNwb25zZVNlbnQgaW5zdGVhZC5cIik7XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIGhvb2sucmVxdWVzdFNlbnQoY3R4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVzcG9uc2VTZW50KGN0eCkge1xuICAgICAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGhvb2sgb2YgaG9va3MpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFob29rLnJlc3BvbnNlU2VudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgeWllbGQgaG9vay5yZXNwb25zZVNlbnQoY3R4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVxdWVzdFJvdXRlZChjdHgpIHtcbiAgICAgICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBob29rIG9mIGhvb2tzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaG9vay5yZXF1ZXN0Um91dGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB5aWVsZCBob29rLnJlcXVlc3RSb3V0ZWQoY3R4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3IoY3R4LCBlcnIpIHtcbiAgICAgICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBob29rIG9mIGhvb2tzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaG9vay5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgeWllbGQgaG9vay5lcnJvcihjdHgsIGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgfTtcbiAgICByZXR1cm4gc2VydmVySG9vaztcbn1cbmV4cG9ydHMuY2hhaW5Ib29rcyA9IGNoYWluSG9va3M7XG5mdW5jdGlvbiBpc0hvb2sob2JqZWN0KSB7XG4gICAgcmV0dXJuIChcInJlcXVlc3RSZWNlaXZlZFwiIGluIG9iamVjdCB8fFxuICAgICAgICBcInJlcXVlc3RQcmVwYXJlZFwiIGluIG9iamVjdCB8fFxuICAgICAgICBcInJlcXVlc3RTZW50XCIgaW4gb2JqZWN0IHx8XG4gICAgICAgIFwicmVxdWVzdFJvdXRlZFwiIGluIG9iamVjdCB8fFxuICAgICAgICBcInJlc3BvbnNlUHJlcGFyZWRcIiBpbiBvYmplY3QgfHxcbiAgICAgICAgXCJyZXNwb25zZVNlbnRcIiBpbiBvYmplY3QgfHxcbiAgICAgICAgXCJlcnJvclwiIGluIG9iamVjdCk7XG59XG5leHBvcnRzLmlzSG9vayA9IGlzSG9vaztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlzVmFsaWRFcnJvckNvZGUgPSBleHBvcnRzLmh0dHBTdGF0dXNGcm9tRXJyb3JDb2RlID0gZXhwb3J0cy5Ud2lycEVycm9yQ29kZSA9IGV4cG9ydHMuQmFkUm91dGVFcnJvciA9IGV4cG9ydHMuSW50ZXJuYWxTZXJ2ZXJFcnJvcldpdGggPSBleHBvcnRzLkludGVybmFsU2VydmVyRXJyb3IgPSBleHBvcnRzLlJlcXVpcmVkQXJndW1lbnRFcnJvciA9IGV4cG9ydHMuSW52YWxpZEFyZ3VtZW50RXJyb3IgPSBleHBvcnRzLk5vdEZvdW5kRXJyb3IgPSBleHBvcnRzLlR3aXJwRXJyb3IgPSB2b2lkIDA7XG4vKipcbiAqIFJlcHJlc2VudHMgYSB0d2lycCBlcnJvclxuICovXG5jbGFzcyBUd2lycEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKGNvZGUsIG1zZykge1xuICAgICAgICBzdXBlcihtc2cpO1xuICAgICAgICB0aGlzLmNvZGUgPSBUd2lycEVycm9yQ29kZS5JbnRlcm5hbDtcbiAgICAgICAgdGhpcy5tZXRhID0ge307XG4gICAgICAgIHRoaXMuY29kZSA9IGNvZGU7XG4gICAgICAgIHRoaXMubXNnID0gbXNnO1xuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgVHdpcnBFcnJvci5wcm90b3R5cGUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgbWV0YWRhdGEga3YgdG8gdGhlIGVycm9yXG4gICAgICogQHBhcmFtIGtleVxuICAgICAqIEBwYXJhbSB2YWx1ZVxuICAgICAqL1xuICAgIHdpdGhNZXRhKGtleSwgdmFsdWUpIHtcbiAgICAgICAgdGhpcy5tZXRhW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBzaW5nbGUgbWV0YWRhdGEgdmFsdWVcbiAgICAgKiByZXR1cm4gXCJcIiBpZiBub3QgZm91bmRcbiAgICAgKiBAcGFyYW0ga2V5XG4gICAgICovXG4gICAgZ2V0TWV0YShrZXkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWV0YVtrZXldIHx8IFwiXCI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZCB0aGUgb3JpZ2luYWwgZXJyb3IgY2F1c2VcbiAgICAgKiBAcGFyYW0gZXJyXG4gICAgICogQHBhcmFtIGFkZE1ldGFcbiAgICAgKi9cbiAgICB3aXRoQ2F1c2UoZXJyLCBhZGRNZXRhID0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5fb3JpZ2luYWxDYXVzZSA9IGVycjtcbiAgICAgICAgaWYgKGFkZE1ldGEpIHtcbiAgICAgICAgICAgIHRoaXMud2l0aE1ldGEoXCJjYXVzZVwiLCBlcnIubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGNhdXNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fb3JpZ2luYWxDYXVzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZXJyb3IgcmVwcmVzZW50YXRpb24gdG8gSlNPTlxuICAgICAqL1xuICAgIHRvSlNPTigpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgY29kZTogdGhpcy5jb2RlLFxuICAgICAgICAgICAgICAgIG1zZzogdGhpcy5tc2csXG4gICAgICAgICAgICAgICAgbWV0YTogdGhpcy5tZXRhLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBge1wiY29kZVwiOiBcImludGVybmFsXCIsIFwibXNnXCI6IFwiVGhlcmUgd2FzIGFuIGVycm9yIGJ1dCBpdCBjb3VsZCBub3QgYmUgc2VyaWFsaXplZCBpbnRvIEpTT05cIn1gO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIHR3aXJwIGVycm9yIGZyb20gYW4gb2JqZWN0XG4gICAgICogQHBhcmFtIG9ialxuICAgICAqL1xuICAgIHN0YXRpYyBmcm9tT2JqZWN0KG9iaikge1xuICAgICAgICBjb25zdCBjb2RlID0gb2JqW1wiY29kZVwiXSB8fCBUd2lycEVycm9yQ29kZS5Vbmtub3duO1xuICAgICAgICBjb25zdCBtc2cgPSBvYmpbXCJtc2dcIl0gfHwgXCJ1bmtub3duXCI7XG4gICAgICAgIGNvbnN0IGVycm9yID0gbmV3IFR3aXJwRXJyb3IoY29kZSwgbXNnKTtcbiAgICAgICAgaWYgKG9ialtcIm1ldGFcIl0pIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKG9ialtcIm1ldGFcIl0pLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIGVycm9yLndpdGhNZXRhKGtleSwgb2JqW1wibWV0YVwiXVtrZXldKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlcnJvcjtcbiAgICB9XG59XG5leHBvcnRzLlR3aXJwRXJyb3IgPSBUd2lycEVycm9yO1xuLyoqXG4gKiBOb3RGb3VuZEVycm9yIGNvbnN0cnVjdG9yIGZvciB0aGUgY29tbW9uIE5vdEZvdW5kIGVycm9yLlxuICovXG5jbGFzcyBOb3RGb3VuZEVycm9yIGV4dGVuZHMgVHdpcnBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobXNnKSB7XG4gICAgICAgIHN1cGVyKFR3aXJwRXJyb3JDb2RlLk5vdEZvdW5kLCBtc2cpO1xuICAgIH1cbn1cbmV4cG9ydHMuTm90Rm91bmRFcnJvciA9IE5vdEZvdW5kRXJyb3I7XG4vKipcbiAqIEludmFsaWRBcmd1bWVudEVycm9yIGNvbnN0cnVjdG9yIGZvciB0aGUgY29tbW9uIEludmFsaWRBcmd1bWVudCBlcnJvci4gQ2FuIGJlXG4gKiB1c2VkIHdoZW4gYW4gYXJndW1lbnQgaGFzIGludmFsaWQgZm9ybWF0LCBpcyBhIG51bWJlciBvdXQgb2YgcmFuZ2UsIGlzIGEgYmFkXG4gKiBvcHRpb24sIGV0YykuXG4gKi9cbmNsYXNzIEludmFsaWRBcmd1bWVudEVycm9yIGV4dGVuZHMgVHdpcnBFcnJvciB7XG4gICAgY29uc3RydWN0b3IoYXJndW1lbnQsIHZhbGlkYXRpb25Nc2cpIHtcbiAgICAgICAgc3VwZXIoVHdpcnBFcnJvckNvZGUuSW52YWxpZEFyZ3VtZW50LCBhcmd1bWVudCArIFwiIFwiICsgdmFsaWRhdGlvbk1zZyk7XG4gICAgICAgIHRoaXMud2l0aE1ldGEoXCJhcmd1bWVudFwiLCBhcmd1bWVudCk7XG4gICAgfVxufVxuZXhwb3J0cy5JbnZhbGlkQXJndW1lbnRFcnJvciA9IEludmFsaWRBcmd1bWVudEVycm9yO1xuLyoqXG4gKiBSZXF1aXJlZEFyZ3VtZW50RXJyb3IgaXMgYSBtb3JlIHNwZWNpZmljIGNvbnN0cnVjdG9yIGZvciBJbnZhbGlkQXJndW1lbnRcbiAqIGVycm9yLiBTaG91bGQgYmUgdXNlZCB3aGVuIHRoZSBhcmd1bWVudCBpcyByZXF1aXJlZCAoZXhwZWN0ZWQgdG8gaGF2ZSBhXG4gKiBub24temVybyB2YWx1ZSkuXG4gKi9cbmNsYXNzIFJlcXVpcmVkQXJndW1lbnRFcnJvciBleHRlbmRzIEludmFsaWRBcmd1bWVudEVycm9yIHtcbiAgICBjb25zdHJ1Y3Rvcihhcmd1bWVudCkge1xuICAgICAgICBzdXBlcihhcmd1bWVudCwgXCJpcyByZXF1aXJlZFwiKTtcbiAgICB9XG59XG5leHBvcnRzLlJlcXVpcmVkQXJndW1lbnRFcnJvciA9IFJlcXVpcmVkQXJndW1lbnRFcnJvcjtcbi8qKlxuICogSW50ZXJuYWxFcnJvciBjb25zdHJ1Y3RvciBmb3IgdGhlIGNvbW1vbiBJbnRlcm5hbCBlcnJvci4gU2hvdWxkIGJlIHVzZWQgdG9cbiAqIHNwZWNpZnkgdGhhdCBzb21ldGhpbmcgYmFkIG9yIHVuZXhwZWN0ZWQgaGFwcGVuZWQuXG4gKi9cbmNsYXNzIEludGVybmFsU2VydmVyRXJyb3IgZXh0ZW5kcyBUd2lycEVycm9yIHtcbiAgICBjb25zdHJ1Y3Rvcihtc2cpIHtcbiAgICAgICAgc3VwZXIoVHdpcnBFcnJvckNvZGUuSW50ZXJuYWwsIG1zZyk7XG4gICAgfVxufVxuZXhwb3J0cy5JbnRlcm5hbFNlcnZlckVycm9yID0gSW50ZXJuYWxTZXJ2ZXJFcnJvcjtcbi8qKlxuICogSW50ZXJuYWxFcnJvcldpdGggbWFrZXMgYW4gaW50ZXJuYWwgZXJyb3IsIHdyYXBwaW5nIHRoZSBvcmlnaW5hbCBlcnJvciBhbmQgdXNpbmcgaXRcbiAqIGZvciB0aGUgZXJyb3IgbWVzc2FnZSwgYW5kIHdpdGggbWV0YWRhdGEgXCJjYXVzZVwiIHdpdGggdGhlIG9yaWdpbmFsIGVycm9yIHR5cGUuXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYnkgVHdpcnAgc2VydmljZXMgdG8gd3JhcCBub24tVHdpcnAgZXJyb3JzIGFzIGludGVybmFsIGVycm9ycy5cbiAqIFRoZSB3cmFwcGVkIGVycm9yIGNhbiBiZSBleHRyYWN0ZWQgbGF0ZXIgd2l0aCBlcnIuY2F1c2UoKVxuICovXG5jbGFzcyBJbnRlcm5hbFNlcnZlckVycm9yV2l0aCBleHRlbmRzIEludGVybmFsU2VydmVyRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKGVycikge1xuICAgICAgICBzdXBlcihlcnIubWVzc2FnZSk7XG4gICAgICAgIHRoaXMud2l0aE1ldGEoXCJjYXVzZVwiLCBlcnIubmFtZSk7XG4gICAgICAgIHRoaXMud2l0aENhdXNlKGVycik7XG4gICAgfVxufVxuZXhwb3J0cy5JbnRlcm5hbFNlcnZlckVycm9yV2l0aCA9IEludGVybmFsU2VydmVyRXJyb3JXaXRoO1xuLyoqXG4gKiBBIHN0YW5kYXJkIEJhZFJvdXRlIEVycm9yXG4gKi9cbmNsYXNzIEJhZFJvdXRlRXJyb3IgZXh0ZW5kcyBUd2lycEVycm9yIHtcbiAgICBjb25zdHJ1Y3Rvcihtc2csIG1ldGhvZCwgdXJsKSB7XG4gICAgICAgIHN1cGVyKFR3aXJwRXJyb3JDb2RlLkJhZFJvdXRlLCBtc2cpO1xuICAgICAgICB0aGlzLndpdGhNZXRhKFwidHdpcnBfaW52YWxpZF9yb3V0ZVwiLCBtZXRob2QgKyBcIiBcIiArIHVybCk7XG4gICAgfVxufVxuZXhwb3J0cy5CYWRSb3V0ZUVycm9yID0gQmFkUm91dGVFcnJvcjtcbnZhciBUd2lycEVycm9yQ29kZTtcbihmdW5jdGlvbiAoVHdpcnBFcnJvckNvZGUpIHtcbiAgICAvLyBDYW5jZWxlZCBpbmRpY2F0ZXMgdGhlIG9wZXJhdGlvbiB3YXMgY2FuY2VsbGVkICh0eXBpY2FsbHkgYnkgdGhlIGNhbGxlcikuXG4gICAgVHdpcnBFcnJvckNvZGVbXCJDYW5jZWxlZFwiXSA9IFwiY2FuY2VsZWRcIjtcbiAgICAvLyBVbmtub3duIGVycm9yLiBGb3IgZXhhbXBsZSB3aGVuIGhhbmRsaW5nIGVycm9ycyByYWlzZWQgYnkgQVBJcyB0aGF0IGRvIG5vdFxuICAgIC8vIHJldHVybiBlbm91Z2ggZXJyb3IgaW5mb3JtYXRpb24uXG4gICAgVHdpcnBFcnJvckNvZGVbXCJVbmtub3duXCJdID0gXCJ1bmtub3duXCI7XG4gICAgLy8gSW52YWxpZEFyZ3VtZW50IGluZGljYXRlcyBjbGllbnQgc3BlY2lmaWVkIGFuIGludmFsaWQgYXJndW1lbnQuIEl0XG4gICAgLy8gaW5kaWNhdGVzIGFyZ3VtZW50cyB0aGF0IGFyZSBwcm9ibGVtYXRpYyByZWdhcmRsZXNzIG9mIHRoZSBzdGF0ZSBvZiB0aGVcbiAgICAvLyBzeXN0ZW0gKGkuZS4gYSBtYWxmb3JtZWQgZmlsZSBuYW1lLCByZXF1aXJlZCBhcmd1bWVudCwgbnVtYmVyIG91dCBvZiByYW5nZSxcbiAgICAvLyBldGMuKS5cbiAgICBUd2lycEVycm9yQ29kZVtcIkludmFsaWRBcmd1bWVudFwiXSA9IFwiaW52YWxpZF9hcmd1bWVudFwiO1xuICAgIC8vIE1hbGZvcm1lZCBpbmRpY2F0ZXMgYW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgZGVjb2RpbmcgdGhlIGNsaWVudCdzIHJlcXVlc3QuXG4gICAgLy8gVGhpcyBtYXkgbWVhbiB0aGF0IHRoZSBtZXNzYWdlIHdhcyBlbmNvZGVkIGltcHJvcGVybHksIG9yIHRoYXQgdGhlcmUgaXMgYVxuICAgIC8vIGRpc2FncmVlbWVudCBpbiBtZXNzYWdlIGZvcm1hdCBiZXR3ZWVuIHRoZSBjbGllbnQgYW5kIHNlcnZlci5cbiAgICBUd2lycEVycm9yQ29kZVtcIk1hbGZvcm1lZFwiXSA9IFwibWFsZm9ybWVkXCI7XG4gICAgLy8gRGVhZGxpbmVFeGNlZWRlZCBtZWFucyBvcGVyYXRpb24gZXhwaXJlZCBiZWZvcmUgY29tcGxldGlvbi4gRm9yIG9wZXJhdGlvbnNcbiAgICAvLyB0aGF0IGNoYW5nZSB0aGUgc3RhdGUgb2YgdGhlIHN5c3RlbSwgdGhpcyBlcnJvciBtYXkgYmUgcmV0dXJuZWQgZXZlbiBpZiB0aGVcbiAgICAvLyBvcGVyYXRpb24gaGFzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgKHRpbWVvdXQpLlxuICAgIFR3aXJwRXJyb3JDb2RlW1wiRGVhZGxpbmVFeGNlZWRlZFwiXSA9IFwiZGVhZGxpbmVfZXhjZWVkZWRcIjtcbiAgICAvLyBOb3RGb3VuZCBtZWFucyBzb21lIHJlcXVlc3RlZCBlbnRpdHkgd2FzIG5vdCBmb3VuZC5cbiAgICBUd2lycEVycm9yQ29kZVtcIk5vdEZvdW5kXCJdID0gXCJub3RfZm91bmRcIjtcbiAgICAvLyBCYWRSb3V0ZSBtZWFucyB0aGF0IHRoZSByZXF1ZXN0ZWQgVVJMIHBhdGggd2Fzbid0IHJvdXRhYmxlIHRvIGEgVHdpcnBcbiAgICAvLyBzZXJ2aWNlIGFuZCBtZXRob2QuIFRoaXMgaXMgcmV0dXJuZWQgYnkgdGhlIGdlbmVyYXRlZCBzZXJ2ZXIsIGFuZCB1c3VhbGx5XG4gICAgLy8gc2hvdWxkbid0IGJlIHJldHVybmVkIGJ5IGFwcGxpY2F0aW9ucy4gSW5zdGVhZCwgYXBwbGljYXRpb25zIHNob3VsZCB1c2VcbiAgICAvLyBOb3RGb3VuZCBvciBVbmltcGxlbWVudGVkLlxuICAgIFR3aXJwRXJyb3JDb2RlW1wiQmFkUm91dGVcIl0gPSBcImJhZF9yb3V0ZVwiO1xuICAgIC8vIEFscmVhZHlFeGlzdHMgbWVhbnMgYW4gYXR0ZW1wdCB0byBjcmVhdGUgYW4gZW50aXR5IGZhaWxlZCBiZWNhdXNlIG9uZVxuICAgIC8vIGFscmVhZHkgZXhpc3RzLlxuICAgIFR3aXJwRXJyb3JDb2RlW1wiQWxyZWFkeUV4aXN0c1wiXSA9IFwiYWxyZWFkeV9leGlzdHNcIjtcbiAgICAvLyBQZXJtaXNzaW9uRGVuaWVkIGluZGljYXRlcyB0aGUgY2FsbGVyIGRvZXMgbm90IGhhdmUgcGVybWlzc2lvbiB0byBleGVjdXRlXG4gICAgLy8gdGhlIHNwZWNpZmllZCBvcGVyYXRpb24uIEl0IG11c3Qgbm90IGJlIHVzZWQgaWYgdGhlIGNhbGxlciBjYW5ub3QgYmVcbiAgICAvLyBpZGVudGlmaWVkIChVbmF1dGhlbnRpY2F0ZWQpLlxuICAgIFR3aXJwRXJyb3JDb2RlW1wiUGVybWlzc2lvbkRlbmllZFwiXSA9IFwicGVybWlzc2lvbl9kZW5pZWRcIjtcbiAgICAvLyBVbmF1dGhlbnRpY2F0ZWQgaW5kaWNhdGVzIHRoZSByZXF1ZXN0IGRvZXMgbm90IGhhdmUgdmFsaWQgYXV0aGVudGljYXRpb25cbiAgICAvLyBjcmVkZW50aWFscyBmb3IgdGhlIG9wZXJhdGlvbi5cbiAgICBUd2lycEVycm9yQ29kZVtcIlVuYXV0aGVudGljYXRlZFwiXSA9IFwidW5hdXRoZW50aWNhdGVkXCI7XG4gICAgLy8gUmVzb3VyY2VFeGhhdXN0ZWQgaW5kaWNhdGVzIHNvbWUgcmVzb3VyY2UgaGFzIGJlZW4gZXhoYXVzdGVkLCBwZXJoYXBzIGFcbiAgICAvLyBwZXItdXNlciBxdW90YSwgb3IgcGVyaGFwcyB0aGUgZW50aXJlIGZpbGUgc3lzdGVtIGlzIG91dCBvZiBzcGFjZS5cbiAgICBUd2lycEVycm9yQ29kZVtcIlJlc291cmNlRXhoYXVzdGVkXCJdID0gXCJyZXNvdXJjZV9leGhhdXN0ZWRcIjtcbiAgICAvLyBGYWlsZWRQcmVjb25kaXRpb24gaW5kaWNhdGVzIG9wZXJhdGlvbiB3YXMgcmVqZWN0ZWQgYmVjYXVzZSB0aGUgc3lzdGVtIGlzXG4gICAgLy8gbm90IGluIGEgc3RhdGUgcmVxdWlyZWQgZm9yIHRoZSBvcGVyYXRpb24ncyBleGVjdXRpb24uIEZvciBleGFtcGxlLCBkb2luZ1xuICAgIC8vIGFuIHJtZGlyIG9wZXJhdGlvbiBvbiBhIGRpcmVjdG9yeSB0aGF0IGlzIG5vbi1lbXB0eSwgb3Igb24gYSBub24tZGlyZWN0b3J5XG4gICAgLy8gb2JqZWN0LCBvciB3aGVuIGhhdmluZyBjb25mbGljdGluZyByZWFkLW1vZGlmeS13cml0ZSBvbiB0aGUgc2FtZSByZXNvdXJjZS5cbiAgICBUd2lycEVycm9yQ29kZVtcIkZhaWxlZFByZWNvbmRpdGlvblwiXSA9IFwiZmFpbGVkX3ByZWNvbmRpdGlvblwiO1xuICAgIC8vIEFib3J0ZWQgaW5kaWNhdGVzIHRoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQsIHR5cGljYWxseSBkdWUgdG8gYSBjb25jdXJyZW5jeVxuICAgIC8vIGlzc3VlIGxpa2Ugc2VxdWVuY2VyIGNoZWNrIGZhaWx1cmVzLCB0cmFuc2FjdGlvbiBhYm9ydHMsIGV0Yy5cbiAgICBUd2lycEVycm9yQ29kZVtcIkFib3J0ZWRcIl0gPSBcImFib3J0ZWRcIjtcbiAgICAvLyBPdXRPZlJhbmdlIG1lYW5zIG9wZXJhdGlvbiB3YXMgYXR0ZW1wdGVkIHBhc3QgdGhlIHZhbGlkIHJhbmdlLiBGb3IgZXhhbXBsZSxcbiAgICAvLyBzZWVraW5nIG9yIHJlYWRpbmcgcGFzdCBlbmQgb2YgYSBwYWdpbmF0ZWQgY29sbGVjdGlvbi5cbiAgICAvL1xuICAgIC8vIFVubGlrZSBJbnZhbGlkQXJndW1lbnQsIHRoaXMgZXJyb3IgaW5kaWNhdGVzIGEgcHJvYmxlbSB0aGF0IG1heSBiZSBmaXhlZCBpZlxuICAgIC8vIHRoZSBzeXN0ZW0gc3RhdGUgY2hhbmdlcyAoaS5lLiBhZGRpbmcgbW9yZSBpdGVtcyB0byB0aGUgY29sbGVjdGlvbikuXG4gICAgLy9cbiAgICAvLyBUaGVyZSBpcyBhIGZhaXIgYml0IG9mIG92ZXJsYXAgYmV0d2VlbiBGYWlsZWRQcmVjb25kaXRpb24gYW5kIE91dE9mUmFuZ2UuXG4gICAgLy8gV2UgcmVjb21tZW5kIHVzaW5nIE91dE9mUmFuZ2UgKHRoZSBtb3JlIHNwZWNpZmljIGVycm9yKSB3aGVuIGl0IGFwcGxpZXMgc29cbiAgICAvLyB0aGF0IGNhbGxlcnMgd2hvIGFyZSBpdGVyYXRpbmcgdGhyb3VnaCBhIHNwYWNlIGNhbiBlYXNpbHkgbG9vayBmb3IgYW5cbiAgICAvLyBPdXRPZlJhbmdlIGVycm9yIHRvIGRldGVjdCB3aGVuIHRoZXkgYXJlIGRvbmUuXG4gICAgVHdpcnBFcnJvckNvZGVbXCJPdXRPZlJhbmdlXCJdID0gXCJvdXRfb2ZfcmFuZ2VcIjtcbiAgICAvLyBVbmltcGxlbWVudGVkIGluZGljYXRlcyBvcGVyYXRpb24gaXMgbm90IGltcGxlbWVudGVkIG9yIG5vdFxuICAgIC8vIHN1cHBvcnRlZC9lbmFibGVkIGluIHRoaXMgc2VydmljZS5cbiAgICBUd2lycEVycm9yQ29kZVtcIlVuaW1wbGVtZW50ZWRcIl0gPSBcInVuaW1wbGVtZW50ZWRcIjtcbiAgICAvLyBJbnRlcm5hbCBlcnJvcnMuIFdoZW4gc29tZSBpbnZhcmlhbnRzIGV4cGVjdGVkIGJ5IHRoZSB1bmRlcmx5aW5nIHN5c3RlbVxuICAgIC8vIGhhdmUgYmVlbiBicm9rZW4uIEluIG90aGVyIHdvcmRzLCBzb21ldGhpbmcgYmFkIGhhcHBlbmVkIGluIHRoZSBsaWJyYXJ5IG9yXG4gICAgLy8gYmFja2VuZCBzZXJ2aWNlLiBEbyBub3QgY29uZnVzZSB3aXRoIEhUVFAgSW50ZXJuYWwgU2VydmVyIEVycm9yOyBhblxuICAgIC8vIEludGVybmFsIGVycm9yIGNvdWxkIGFsc28gaGFwcGVuIG9uIHRoZSBjbGllbnQgY29kZSwgaS5lLiB3aGVuIHBhcnNpbmcgYVxuICAgIC8vIHNlcnZlciByZXNwb25zZS5cbiAgICBUd2lycEVycm9yQ29kZVtcIkludGVybmFsXCJdID0gXCJpbnRlcm5hbFwiO1xuICAgIC8vIFVuYXZhaWxhYmxlIGluZGljYXRlcyB0aGUgc2VydmljZSBpcyBjdXJyZW50bHkgdW5hdmFpbGFibGUuIFRoaXMgaXMgYSBtb3N0XG4gICAgLy8gbGlrZWx5IGEgdHJhbnNpZW50IGNvbmRpdGlvbiBhbmQgbWF5IGJlIGNvcnJlY3RlZCBieSByZXRyeWluZyB3aXRoIGFcbiAgICAvLyBiYWNrb2ZmLlxuICAgIFR3aXJwRXJyb3JDb2RlW1wiVW5hdmFpbGFibGVcIl0gPSBcInVuYXZhaWxhYmxlXCI7XG4gICAgLy8gRGF0YUxvc3MgaW5kaWNhdGVzIHVucmVjb3ZlcmFibGUgZGF0YSBsb3NzIG9yIGNvcnJ1cHRpb24uXG4gICAgVHdpcnBFcnJvckNvZGVbXCJEYXRhTG9zc1wiXSA9IFwiZGF0YV9sb3NzXCI7XG59KShUd2lycEVycm9yQ29kZSA9IGV4cG9ydHMuVHdpcnBFcnJvckNvZGUgfHwgKGV4cG9ydHMuVHdpcnBFcnJvckNvZGUgPSB7fSkpO1xuLy8gU2VydmVySFRUUFN0YXR1c0Zyb21FcnJvckNvZGUgbWFwcyBhIFR3aXJwIGVycm9yIHR5cGUgaW50byBhIHNpbWlsYXIgSFRUUFxuLy8gcmVzcG9uc2Ugc3RhdHVzLiBJdCBpcyB1c2VkIGJ5IHRoZSBUd2lycCBzZXJ2ZXIgaGFuZGxlciB0byBzZXQgdGhlIEhUVFBcbi8vIHJlc3BvbnNlIHN0YXR1cyBjb2RlLiBSZXR1cm5zIDAgaWYgdGhlIEVycm9yQ29kZSBpcyBpbnZhbGlkLlxuZnVuY3Rpb24gaHR0cFN0YXR1c0Zyb21FcnJvckNvZGUoY29kZSkge1xuICAgIHN3aXRjaCAoY29kZSkge1xuICAgICAgICBjYXNlIFR3aXJwRXJyb3JDb2RlLkNhbmNlbGVkOlxuICAgICAgICAgICAgcmV0dXJuIDQwODsgLy8gUmVxdWVzdFRpbWVvdXRcbiAgICAgICAgY2FzZSBUd2lycEVycm9yQ29kZS5Vbmtub3duOlxuICAgICAgICAgICAgcmV0dXJuIDUwMDsgLy8gSW50ZXJuYWwgU2VydmVyIEVycm9yXG4gICAgICAgIGNhc2UgVHdpcnBFcnJvckNvZGUuSW52YWxpZEFyZ3VtZW50OlxuICAgICAgICAgICAgcmV0dXJuIDQwMDsgLy8gQmFkUmVxdWVzdFxuICAgICAgICBjYXNlIFR3aXJwRXJyb3JDb2RlLk1hbGZvcm1lZDpcbiAgICAgICAgICAgIHJldHVybiA0MDA7IC8vIEJhZFJlcXVlc3RcbiAgICAgICAgY2FzZSBUd2lycEVycm9yQ29kZS5EZWFkbGluZUV4Y2VlZGVkOlxuICAgICAgICAgICAgcmV0dXJuIDQwODsgLy8gUmVxdWVzdFRpbWVvdXRcbiAgICAgICAgY2FzZSBUd2lycEVycm9yQ29kZS5Ob3RGb3VuZDpcbiAgICAgICAgICAgIHJldHVybiA0MDQ7IC8vIE5vdCBGb3VuZFxuICAgICAgICBjYXNlIFR3aXJwRXJyb3JDb2RlLkJhZFJvdXRlOlxuICAgICAgICAgICAgcmV0dXJuIDQwNDsgLy8gTm90IEZvdW5kXG4gICAgICAgIGNhc2UgVHdpcnBFcnJvckNvZGUuQWxyZWFkeUV4aXN0czpcbiAgICAgICAgICAgIHJldHVybiA0MDk7IC8vIENvbmZsaWN0XG4gICAgICAgIGNhc2UgVHdpcnBFcnJvckNvZGUuUGVybWlzc2lvbkRlbmllZDpcbiAgICAgICAgICAgIHJldHVybiA0MDM7IC8vIEZvcmJpZGRlblxuICAgICAgICBjYXNlIFR3aXJwRXJyb3JDb2RlLlVuYXV0aGVudGljYXRlZDpcbiAgICAgICAgICAgIHJldHVybiA0MDE7IC8vIFVuYXV0aG9yaXplZFxuICAgICAgICBjYXNlIFR3aXJwRXJyb3JDb2RlLlJlc291cmNlRXhoYXVzdGVkOlxuICAgICAgICAgICAgcmV0dXJuIDQyOTsgLy8gVG9vIE1hbnkgUmVxdWVzdHNcbiAgICAgICAgY2FzZSBUd2lycEVycm9yQ29kZS5GYWlsZWRQcmVjb25kaXRpb246XG4gICAgICAgICAgICByZXR1cm4gNDEyOyAvLyBQcmVjb25kaXRpb24gRmFpbGVkXG4gICAgICAgIGNhc2UgVHdpcnBFcnJvckNvZGUuQWJvcnRlZDpcbiAgICAgICAgICAgIHJldHVybiA0MDk7IC8vIENvbmZsaWN0XG4gICAgICAgIGNhc2UgVHdpcnBFcnJvckNvZGUuT3V0T2ZSYW5nZTpcbiAgICAgICAgICAgIHJldHVybiA0MDA7IC8vIEJhZCBSZXF1ZXN0XG4gICAgICAgIGNhc2UgVHdpcnBFcnJvckNvZGUuVW5pbXBsZW1lbnRlZDpcbiAgICAgICAgICAgIHJldHVybiA1MDE7IC8vIE5vdCBJbXBsZW1lbnRlZFxuICAgICAgICBjYXNlIFR3aXJwRXJyb3JDb2RlLkludGVybmFsOlxuICAgICAgICAgICAgcmV0dXJuIDUwMDsgLy8gSW50ZXJuYWwgU2VydmVyIEVycm9yXG4gICAgICAgIGNhc2UgVHdpcnBFcnJvckNvZGUuVW5hdmFpbGFibGU6XG4gICAgICAgICAgICByZXR1cm4gNTAzOyAvLyBTZXJ2aWNlIFVuYXZhaWxhYmxlXG4gICAgICAgIGNhc2UgVHdpcnBFcnJvckNvZGUuRGF0YUxvc3M6XG4gICAgICAgICAgICByZXR1cm4gNTAwOyAvLyBJbnRlcm5hbCBTZXJ2ZXIgRXJyb3JcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiAwOyAvLyBJbnZhbGlkIVxuICAgIH1cbn1cbmV4cG9ydHMuaHR0cFN0YXR1c0Zyb21FcnJvckNvZGUgPSBodHRwU3RhdHVzRnJvbUVycm9yQ29kZTtcbi8vIElzVmFsaWRFcnJvckNvZGUgcmV0dXJucyB0cnVlIGlmIGlzIG9uZSBvZiB0aGUgdmFsaWQgcHJlZGVmaW5lZCBjb25zdGFudHMuXG5mdW5jdGlvbiBpc1ZhbGlkRXJyb3JDb2RlKGNvZGUpIHtcbiAgICByZXR1cm4gaHR0cFN0YXR1c0Zyb21FcnJvckNvZGUoY29kZSkgIT0gMDtcbn1cbmV4cG9ydHMuaXNWYWxpZEVycm9yQ29kZSA9IGlzVmFsaWRFcnJvckNvZGU7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnBhcnNlVHdpcnBQYXRoID0gZXhwb3J0cy5nZXRSZXF1ZXN0RGF0YSA9IGV4cG9ydHMudmFsaWRhdGVSZXF1ZXN0ID0gZXhwb3J0cy5nZXRDb250ZW50VHlwZSA9IGV4cG9ydHMuVHdpcnBDb250ZW50VHlwZSA9IHZvaWQgMDtcbmNvbnN0IGVycm9yc18xID0gcmVxdWlyZShcIi4vZXJyb3JzXCIpO1xuLyoqXG4gKiBTdXBwb3J0ZWQgVHdpcnAgQ29udGVudC1UeXBlXG4gKi9cbnZhciBUd2lycENvbnRlbnRUeXBlO1xuKGZ1bmN0aW9uIChUd2lycENvbnRlbnRUeXBlKSB7XG4gICAgVHdpcnBDb250ZW50VHlwZVtUd2lycENvbnRlbnRUeXBlW1wiUHJvdG9idWZcIl0gPSAwXSA9IFwiUHJvdG9idWZcIjtcbiAgICBUd2lycENvbnRlbnRUeXBlW1R3aXJwQ29udGVudFR5cGVbXCJKU09OXCJdID0gMV0gPSBcIkpTT05cIjtcbiAgICBUd2lycENvbnRlbnRUeXBlW1R3aXJwQ29udGVudFR5cGVbXCJVbmtub3duXCJdID0gMl0gPSBcIlVua25vd25cIjtcbn0pKFR3aXJwQ29udGVudFR5cGUgPSBleHBvcnRzLlR3aXJwQ29udGVudFR5cGUgfHwgKGV4cG9ydHMuVHdpcnBDb250ZW50VHlwZSA9IHt9KSk7XG4vKipcbiAqIEdldCBzdXBwb3J0ZWQgY29udGVudC10eXBlXG4gKiBAcGFyYW0gbWltZVR5cGVcbiAqL1xuZnVuY3Rpb24gZ2V0Q29udGVudFR5cGUobWltZVR5cGUpIHtcbiAgICBzd2l0Y2ggKG1pbWVUeXBlKSB7XG4gICAgICAgIGNhc2UgXCJhcHBsaWNhdGlvbi9wcm90b2J1ZlwiOlxuICAgICAgICAgICAgcmV0dXJuIFR3aXJwQ29udGVudFR5cGUuUHJvdG9idWY7XG4gICAgICAgIGNhc2UgXCJhcHBsaWNhdGlvbi9qc29uXCI6XG4gICAgICAgICAgICByZXR1cm4gVHdpcnBDb250ZW50VHlwZS5KU09OO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIFR3aXJwQ29udGVudFR5cGUuVW5rbm93bjtcbiAgICB9XG59XG5leHBvcnRzLmdldENvbnRlbnRUeXBlID0gZ2V0Q29udGVudFR5cGU7XG4vKipcbiAqIFZhbGlkYXRlIGEgdHdpcnAgcmVxdWVzdFxuICogQHBhcmFtIGN0eFxuICogQHBhcmFtIHJlcXVlc3RcbiAqIEBwYXJhbSBwYXRoUHJlZml4XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlUmVxdWVzdChjdHgsIHJlcXVlc3QsIHBhdGhQcmVmaXgpIHtcbiAgICBpZiAocmVxdWVzdC5tZXRob2QgIT09IFwiUE9TVFwiKSB7XG4gICAgICAgIGNvbnN0IG1zZyA9IGB1bnN1cHBvcnRlZCBtZXRob2QgJHtyZXF1ZXN0Lm1ldGhvZH0gKG9ubHkgUE9TVCBpcyBhbGxvd2VkKWA7XG4gICAgICAgIHRocm93IG5ldyBlcnJvcnNfMS5CYWRSb3V0ZUVycm9yKG1zZywgcmVxdWVzdC5tZXRob2QgfHwgXCJcIiwgcmVxdWVzdC51cmwgfHwgXCJcIik7XG4gICAgfVxuICAgIGNvbnN0IHBhdGggPSBwYXJzZVR3aXJwUGF0aChyZXF1ZXN0LnVybCB8fCBcIlwiKTtcbiAgICBpZiAocGF0aC5wa2dTZXJ2aWNlICE9PVxuICAgICAgICAoY3R4LnBhY2thZ2VOYW1lID8gY3R4LnBhY2thZ2VOYW1lICsgXCIuXCIgOiBcIlwiKSArIGN0eC5zZXJ2aWNlTmFtZSkge1xuICAgICAgICBjb25zdCBtc2cgPSBgbm8gaGFuZGxlciBmb3IgcGF0aCAke3JlcXVlc3QudXJsfWA7XG4gICAgICAgIHRocm93IG5ldyBlcnJvcnNfMS5CYWRSb3V0ZUVycm9yKG1zZywgcmVxdWVzdC5tZXRob2QgfHwgXCJcIiwgcmVxdWVzdC51cmwgfHwgXCJcIik7XG4gICAgfVxuICAgIGlmIChwYXRoLnByZWZpeCAhPT0gcGF0aFByZWZpeCkge1xuICAgICAgICBjb25zdCBtc2cgPSBgaW52YWxpZCBwYXRoIHByZWZpeCAke3BhdGgucHJlZml4fSwgZXhwZWN0ZWQgJHtwYXRoUHJlZml4fSwgb24gcGF0aCAke3JlcXVlc3QudXJsfWA7XG4gICAgICAgIHRocm93IG5ldyBlcnJvcnNfMS5CYWRSb3V0ZUVycm9yKG1zZywgcmVxdWVzdC5tZXRob2QgfHwgXCJcIiwgcmVxdWVzdC51cmwgfHwgXCJcIik7XG4gICAgfVxuICAgIGNvbnN0IG1pbWVDb250ZW50VHlwZSA9IHJlcXVlc3QuaGVhZGVyc1tcImNvbnRlbnQtdHlwZVwiXSB8fCBcIlwiO1xuICAgIGlmIChjdHguY29udGVudFR5cGUgPT09IFR3aXJwQ29udGVudFR5cGUuVW5rbm93bikge1xuICAgICAgICBjb25zdCBtc2cgPSBgdW5leHBlY3RlZCBDb250ZW50LVR5cGU6ICR7cmVxdWVzdC5oZWFkZXJzW1wiY29udGVudC10eXBlXCJdfWA7XG4gICAgICAgIHRocm93IG5ldyBlcnJvcnNfMS5CYWRSb3V0ZUVycm9yKG1zZywgcmVxdWVzdC5tZXRob2QgfHwgXCJcIiwgcmVxdWVzdC51cmwgfHwgXCJcIik7XG4gICAgfVxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHBhdGgpLCB7IG1pbWVDb250ZW50VHlwZSwgY29udGVudFR5cGU6IGN0eC5jb250ZW50VHlwZSB9KTtcbn1cbmV4cG9ydHMudmFsaWRhdGVSZXF1ZXN0ID0gdmFsaWRhdGVSZXF1ZXN0O1xuLyoqXG4gKiBHZXQgcmVxdWVzdCBkYXRhIGZyb20gdGhlIGJvZHlcbiAqIEBwYXJhbSByZXFcbiAqL1xuZnVuY3Rpb24gZ2V0UmVxdWVzdERhdGEocmVxKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgcmVxV2l0aFJhd0JvZHkgPSByZXE7XG4gICAgICAgIGlmIChyZXFXaXRoUmF3Qm9keS5yYXdCb2R5IGluc3RhbmNlb2YgQnVmZmVyKSB7XG4gICAgICAgICAgICByZXNvbHZlKHJlcVdpdGhSYXdCb2R5LnJhd0JvZHkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNodW5rcyA9IFtdO1xuICAgICAgICByZXEub24oXCJkYXRhXCIsIChjaHVuaykgPT4gY2h1bmtzLnB1c2goY2h1bmspKTtcbiAgICAgICAgcmVxLm9uKFwiZW5kXCIsICgpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBCdWZmZXIuY29uY2F0KGNodW5rcyk7XG4gICAgICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgICB9KSk7XG4gICAgICAgIHJlcS5vbihcImVycm9yXCIsIChlcnIpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXEuYWJvcnRlZCkge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgZXJyb3JzXzEuVHdpcnBFcnJvcihlcnJvcnNfMS5Ud2lycEVycm9yQ29kZS5EZWFkbGluZUV4Y2VlZGVkLCBcImZhaWxlZCB0byByZWFkIHJlcXVlc3Q6IGRlYWRsaW5lIGV4Y2VlZGVkXCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgZXJyb3JzXzEuVHdpcnBFcnJvcihlcnJvcnNfMS5Ud2lycEVycm9yQ29kZS5NYWxmb3JtZWQsIGVyci5tZXNzYWdlKS53aXRoQ2F1c2UoZXJyKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXEub24oXCJjbG9zZVwiLCAoKSA9PiB7XG4gICAgICAgICAgICByZWplY3QobmV3IGVycm9yc18xLlR3aXJwRXJyb3IoZXJyb3JzXzEuVHdpcnBFcnJvckNvZGUuQ2FuY2VsZWQsIFwiZmFpbGVkIHRvIHJlYWQgcmVxdWVzdDogY29udGV4dCBjYW5jZWxlZFwiKSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZXhwb3J0cy5nZXRSZXF1ZXN0RGF0YSA9IGdldFJlcXVlc3REYXRhO1xuLyoqXG4gKiBQYXJzZXMgdHdpcnAgdXJsIHBhdGhcbiAqIEBwYXJhbSBwYXRoXG4gKi9cbmZ1bmN0aW9uIHBhcnNlVHdpcnBQYXRoKHBhdGgpIHtcbiAgICBjb25zdCBwYXJ0cyA9IHBhdGguc3BsaXQoXCIvXCIpO1xuICAgIGlmIChwYXJ0cy5sZW5ndGggPCAyKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwa2dTZXJ2aWNlOiBcIlwiLFxuICAgICAgICAgICAgbWV0aG9kOiBcIlwiLFxuICAgICAgICAgICAgcHJlZml4OiBcIlwiLFxuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBtZXRob2Q6IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdLFxuICAgICAgICBwa2dTZXJ2aWNlOiBwYXJ0c1twYXJ0cy5sZW5ndGggLSAyXSxcbiAgICAgICAgcHJlZml4OiBwYXJ0cy5zbGljZSgwLCBwYXJ0cy5sZW5ndGggLSAyKS5qb2luKFwiL1wiKSxcbiAgICB9O1xufVxuZXhwb3J0cy5wYXJzZVR3aXJwUGF0aCA9IHBhcnNlVHdpcnBQYXRoO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy53cml0ZUVycm9yID0gZXhwb3J0cy5Ud2lycFNlcnZlciA9IHZvaWQgMDtcbmNvbnN0IGhvb2tzXzEgPSByZXF1aXJlKFwiLi9ob29rc1wiKTtcbmNvbnN0IHJlcXVlc3RfMSA9IHJlcXVpcmUoXCIuL3JlcXVlc3RcIik7XG5jb25zdCBlcnJvcnNfMSA9IHJlcXVpcmUoXCIuL2Vycm9yc1wiKTtcbi8qKlxuICogUnVudGltZSBzZXJ2ZXIgaW1wbGVtZW50YXRpb24gb2YgYSBUd2lycFNlcnZlclxuICovXG5jbGFzcyBUd2lycFNlcnZlciB7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICB0aGlzLnBhdGhQcmVmaXggPSBcIi90d2lycFwiO1xuICAgICAgICB0aGlzLmhvb2tzID0gW107XG4gICAgICAgIHRoaXMuaW50ZXJjZXB0b3JzID0gW107XG4gICAgICAgIHRoaXMucGFja2FnZU5hbWUgPSBvcHRpb25zLnBhY2thZ2VOYW1lO1xuICAgICAgICB0aGlzLnNlcnZpY2VOYW1lID0gb3B0aW9ucy5zZXJ2aWNlTmFtZTtcbiAgICAgICAgdGhpcy5tZXRob2RMaXN0ID0gb3B0aW9ucy5tZXRob2RMaXN0O1xuICAgICAgICB0aGlzLm1hdGNoUm91dGUgPSBvcHRpb25zLm1hdGNoUm91dGU7XG4gICAgICAgIHRoaXMuc2VydmljZSA9IG9wdGlvbnMuc2VydmljZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgcHJlZml4IGZvciB0aGlzIHNlcnZlclxuICAgICAqL1xuICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhdGhQcmVmaXg7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBodHRwIGhhbmRsZXIgZm9yIHR3aXJwIGNvbXBsYWludCBlbmRwb2ludHNcbiAgICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgICAqL1xuICAgIGh0dHBIYW5kbGVyKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIChyZXEsIHJlc3ApID0+IHtcbiAgICAgICAgICAgIC8vIHNldHVwIHByZWZpeFxuICAgICAgICAgICAgaWYgKChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMucHJlZml4KSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy53aXRoUHJlZml4KG9wdGlvbnMucHJlZml4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9odHRwSGFuZGxlcihyZXEsIHJlc3ApO1xuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGludGVyY2VwdG9ycyBvciBob29rcyB0byB0aGUgcmVxdWVzdCBzdGFja1xuICAgICAqIEBwYXJhbSBtaWRkbGV3YXJlc1xuICAgICAqL1xuICAgIHVzZSguLi5taWRkbGV3YXJlcykge1xuICAgICAgICBtaWRkbGV3YXJlcy5mb3JFYWNoKChtaWRkbGV3YXJlKSA9PiB7XG4gICAgICAgICAgICBpZiAoaG9va3NfMS5pc0hvb2sobWlkZGxld2FyZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhvb2tzLnB1c2gobWlkZGxld2FyZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmludGVyY2VwdG9ycy5wdXNoKG1pZGRsZXdhcmUpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBwcmVmaXggdG8gdGhlIHNlcnZpY2UgdXJsIHBhdGhcbiAgICAgKiBAcGFyYW0gcHJlZml4XG4gICAgICovXG4gICAgd2l0aFByZWZpeChwcmVmaXgpIHtcbiAgICAgICAgaWYgKHByZWZpeCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHRoaXMucGF0aFByZWZpeCA9IFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnBhdGhQcmVmaXggPSBwcmVmaXg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHJlZ2V4IG1hdGNoaW5nIHBhdGggZm9yIHRoaXMgdHdpcnAgc2VydmVyXG4gICAgICovXG4gICAgbWF0Y2hpbmdQYXRoKCkge1xuICAgICAgICBjb25zdCBiYXNlUmVnZXggPSB0aGlzLmJhc2VVUkkoKS5yZXBsYWNlKC9cXC4vZywgXCJcXFxcLlwiKTtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoYCR7YmFzZVJlZ2V4fVxcLygke3RoaXMubWV0aG9kTGlzdC5qb2luKFwifFwiKX0pYCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGJhc2UgVVJJIGZvciB0aGlzIHR3aXJwIHNlcnZlclxuICAgICAqL1xuICAgIGJhc2VVUkkoKSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLnBhdGhQcmVmaXh9LyR7dGhpcy5wYWNrYWdlTmFtZSA/IHRoaXMucGFja2FnZU5hbWUgKyBcIi5cIiA6IFwiXCJ9JHt0aGlzLnNlcnZpY2VOYW1lfWA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIHR3aXJwIGNvbnRleHRcbiAgICAgKiBAcGFyYW0gcmVxXG4gICAgICogQHBhcmFtIHJlc1xuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgY3JlYXRlQ29udGV4dChyZXEsIHJlcykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcGFja2FnZU5hbWU6IHRoaXMucGFja2FnZU5hbWUsXG4gICAgICAgICAgICBzZXJ2aWNlTmFtZTogdGhpcy5zZXJ2aWNlTmFtZSxcbiAgICAgICAgICAgIG1ldGhvZE5hbWU6IFwiXCIsXG4gICAgICAgICAgICBjb250ZW50VHlwZTogcmVxdWVzdF8xLmdldENvbnRlbnRUeXBlKHJlcS5oZWFkZXJzW1wiY29udGVudC10eXBlXCJdKSxcbiAgICAgICAgICAgIHJlcTogcmVxLFxuICAgICAgICAgICAgcmVzOiByZXMsXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFR3cmlwIHNlcnZlciBodHRwIGhhbmRsZXIgaW1wbGVtZW50YXRpb25cbiAgICAgKiBAcGFyYW0gcmVxXG4gICAgICogQHBhcmFtIHJlc3BcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF9odHRwSGFuZGxlcihyZXEsIHJlc3ApIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuY3JlYXRlQ29udGV4dChyZXEsIHJlc3ApO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB5aWVsZCB0aGlzLmludm9rZUhvb2soXCJyZXF1ZXN0UmVjZWl2ZWRcIiwgY3R4KTtcbiAgICAgICAgICAgICAgICBjb25zdCB7IG1ldGhvZCwgbWltZUNvbnRlbnRUeXBlIH0gPSByZXF1ZXN0XzEudmFsaWRhdGVSZXF1ZXN0KGN0eCwgcmVxLCB0aGlzLnBhdGhQcmVmaXggfHwgXCJcIik7XG4gICAgICAgICAgICAgICAgY29uc3QgaGFuZGxlciA9IHRoaXMubWF0Y2hSb3V0ZShtZXRob2QsIHtcbiAgICAgICAgICAgICAgICAgICAgb25NYXRjaDogKGN0eCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW52b2tlSG9vayhcInJlcXVlc3RSb3V0ZWRcIiwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgb25Ob3RGb3VuZDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXNnID0gYG5vIGhhbmRsZXIgZm9yIHBhdGggJHtyZXEudXJsfWA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuQmFkUm91dGVFcnJvcihtc2csIHJlcS5tZXRob2QgfHwgXCJcIiwgcmVxLnVybCB8fCBcIlwiKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCBib2R5ID0geWllbGQgcmVxdWVzdF8xLmdldFJlcXVlc3REYXRhKHJlcSk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSB5aWVsZCBoYW5kbGVyKGN0eCwgdGhpcy5zZXJ2aWNlLCBib2R5LCB0aGlzLmludGVyY2VwdG9ycyk7XG4gICAgICAgICAgICAgICAgeWllbGQgUHJvbWlzZS5hbGwoW1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludm9rZUhvb2soXCJyZXNwb25zZVByZXBhcmVkXCIsIGN0eCksXG4gICAgICAgICAgICAgICAgICAgIC8vIGtlZXAgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgdGlsbCBuZXh0IHJlbGVhc2VcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZva2VIb29rKFwicmVxdWVzdFByZXBhcmVkXCIsIGN0eCksXG4gICAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICAgICAgcmVzcC5zdGF0dXNDb2RlID0gMjAwO1xuICAgICAgICAgICAgICAgIHJlc3Auc2V0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIG1pbWVDb250ZW50VHlwZSk7XG4gICAgICAgICAgICAgICAgcmVzcC5lbmQocmVzcG9uc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICB5aWVsZCB0aGlzLmludm9rZUhvb2soXCJlcnJvclwiLCBjdHgsIG11c3RCZVR3aXJwRXJyb3IoZSkpO1xuICAgICAgICAgICAgICAgIGlmICghcmVzcC5oZWFkZXJzU2VudCkge1xuICAgICAgICAgICAgICAgICAgICB3cml0ZUVycm9yKHJlc3AsIGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHlpZWxkIFByb21pc2UuYWxsKFtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZva2VIb29rKFwicmVzcG9uc2VTZW50XCIsIGN0eCksXG4gICAgICAgICAgICAgICAgICAgIC8vIGtlZXAgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgdGlsbCBuZXh0IHJlbGVhc2VcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZva2VIb29rKFwicmVxdWVzdFNlbnRcIiwgY3R4KSxcbiAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEludm9rZSBhIGhvb2tcbiAgICAgKiBAcGFyYW0gaG9va05hbWVcbiAgICAgKiBAcGFyYW0gY3R4XG4gICAgICogQHBhcmFtIGVyclxuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbiAgICBpbnZva2VIb29rKGhvb2tOYW1lLCBjdHgsIGVycikge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaG9va3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY2hhaW5lZEhvb2tzID0gaG9va3NfMS5jaGFpbkhvb2tzKC4uLnRoaXMuaG9va3MpO1xuICAgICAgICAgICAgY29uc3QgaG9vayA9IGNoYWluZWRIb29rcyA9PT0gbnVsbCB8fCBjaGFpbmVkSG9va3MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNoYWluZWRIb29rc1tob29rTmFtZV07XG4gICAgICAgICAgICBpZiAoaG9vaykge1xuICAgICAgICAgICAgICAgIHlpZWxkIGhvb2soY3R4LCBlcnIgfHwgbmV3IGVycm9yc18xLkludGVybmFsU2VydmVyRXJyb3IoXCJpbnRlcm5hbCBzZXJ2ZXIgZXJyb3JcIikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnRzLlR3aXJwU2VydmVyID0gVHdpcnBTZXJ2ZXI7XG4vKipcbiAqIFdyaXRlIGh0dHAgZXJyb3IgcmVzcG9uc2VcbiAqIEBwYXJhbSByZXNcbiAqIEBwYXJhbSBlcnJvclxuICovXG5mdW5jdGlvbiB3cml0ZUVycm9yKHJlcywgZXJyb3IpIHtcbiAgICBjb25zdCB0d2lycEVycm9yID0gbXVzdEJlVHdpcnBFcnJvcihlcnJvcik7XG4gICAgcmVzLnNldEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb25cIik7XG4gICAgcmVzLnN0YXR1c0NvZGUgPSBlcnJvcnNfMS5odHRwU3RhdHVzRnJvbUVycm9yQ29kZSh0d2lycEVycm9yLmNvZGUpO1xuICAgIHJlcy5lbmQodHdpcnBFcnJvci50b0pTT04oKSk7XG59XG5leHBvcnRzLndyaXRlRXJyb3IgPSB3cml0ZUVycm9yO1xuLyoqXG4gKiBNYWtlIHN1cmUgdGhhdCB0aGUgZXJyb3IgcGFzc2VkIGlzIGEgVHdpcnBFcnJvclxuICogb3RoZXJ3aXNlIGl0IHdpbGwgd3JhcCBpdCBpbnRvIGFuIEludGVybmFsRXJyb3JcbiAqIEBwYXJhbSBlcnJcbiAqL1xuZnVuY3Rpb24gbXVzdEJlVHdpcnBFcnJvcihlcnIpIHtcbiAgICBpZiAoZXJyIGluc3RhbmNlb2YgZXJyb3JzXzEuVHdpcnBFcnJvcikge1xuICAgICAgICByZXR1cm4gZXJyO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IGVycm9yc18xLkludGVybmFsU2VydmVyRXJyb3JXaXRoKGVycik7XG59XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNoYWluSW50ZXJjZXB0b3JzID0gdm9pZCAwO1xuLy8gY2hhaW5zIG11bHRpcGxlIEludGVyY2VwdG9ycyBpbnRvIGEgc2luZ2xlIEludGVyY2VwdG9yLlxuLy8gVGhlIGZpcnN0IGludGVyY2VwdG9yIHdyYXBzIHRoZSBzZWNvbmQgb25lLCBhbmQgc28gb24uXG4vLyBSZXR1cm5zIG51bGwgaWYgaW50ZXJjZXB0b3JzIGlzIGVtcHR5LlxuZnVuY3Rpb24gY2hhaW5JbnRlcmNlcHRvcnMoLi4uaW50ZXJjZXB0b3JzKSB7XG4gICAgaWYgKGludGVyY2VwdG9ycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaW50ZXJjZXB0b3JzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gaW50ZXJjZXB0b3JzWzBdO1xuICAgIH1cbiAgICBjb25zdCBmaXJzdCA9IGludGVyY2VwdG9yc1swXTtcbiAgICByZXR1cm4gKGN0eCwgcmVxdWVzdCwgaGFuZGxlcikgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBsZXQgbmV4dCA9IGhhbmRsZXI7XG4gICAgICAgIGZvciAobGV0IGkgPSBpbnRlcmNlcHRvcnMubGVuZ3RoIC0gMTsgaSA+IDA7IGktLSkge1xuICAgICAgICAgICAgbmV4dCA9ICgobmV4dCkgPT4gKGN0eCwgdHlwZWRSZXF1ZXN0KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGludGVyY2VwdG9yc1tpXShjdHgsIHR5cGVkUmVxdWVzdCwgbmV4dCk7XG4gICAgICAgICAgICB9KShuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlyc3QoY3R4LCByZXF1ZXN0LCBuZXh0KTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuY2hhaW5JbnRlcmNlcHRvcnMgPSBjaGFpbkludGVyY2VwdG9ycztcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmZ1bmN0aW9uIF9wcm9jZXNzICh2LCBtb2QpIHtcbiAgdmFyIGlcbiAgdmFyIHJcblxuICBpZiAodHlwZW9mIG1vZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHIgPSBtb2QodilcbiAgICBpZiAociAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2ID0gclxuICAgIH1cbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG1vZCkpIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbW9kLmxlbmd0aDsgaSsrKSB7XG4gICAgICByID0gbW9kW2ldKHYpXG4gICAgICBpZiAociAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHYgPSByXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZcbn1cblxuZnVuY3Rpb24gcGFyc2VLZXkgKGtleSwgdmFsKSB7XG4gIC8vIGRldGVjdCBuZWdhdGl2ZSBpbmRleCBub3RhdGlvblxuICBpZiAoa2V5WzBdID09PSAnLScgJiYgQXJyYXkuaXNBcnJheSh2YWwpICYmIC9eLVxcZCskLy50ZXN0KGtleSkpIHtcbiAgICByZXR1cm4gdmFsLmxlbmd0aCArIHBhcnNlSW50KGtleSwgMTApXG4gIH1cbiAgcmV0dXJuIGtleVxufVxuXG5mdW5jdGlvbiBpc0luZGV4IChrKSB7XG4gIHJldHVybiAvXlxcZCskLy50ZXN0KGspXG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0ICh2YWwpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBPYmplY3RdJ1xufVxuXG5mdW5jdGlvbiBpc0FycmF5T3JPYmplY3QgKHZhbCkge1xuICByZXR1cm4gT2JqZWN0KHZhbCkgPT09IHZhbFxufVxuXG5mdW5jdGlvbiBpc0VtcHR5T2JqZWN0ICh2YWwpIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKHZhbCkubGVuZ3RoID09PSAwXG59XG5cbnZhciBibGFja2xpc3QgPSBbJ19fcHJvdG9fXycsICdwcm90b3R5cGUnLCAnY29uc3RydWN0b3InXVxudmFyIGJsYWNrbGlzdEZpbHRlciA9IGZ1bmN0aW9uIChwYXJ0KSB7IHJldHVybiBibGFja2xpc3QuaW5kZXhPZihwYXJ0KSA9PT0gLTEgfVxuXG5mdW5jdGlvbiBwYXJzZVBhdGggKHBhdGgsIHNlcCkge1xuICBpZiAocGF0aC5pbmRleE9mKCdbJykgPj0gMCkge1xuICAgIHBhdGggPSBwYXRoLnJlcGxhY2UoL1xcWy9nLCBzZXApLnJlcGxhY2UoL10vZywgJycpXG4gIH1cblxuICB2YXIgcGFydHMgPSBwYXRoLnNwbGl0KHNlcClcblxuICB2YXIgY2hlY2sgPSBwYXJ0cy5maWx0ZXIoYmxhY2tsaXN0RmlsdGVyKVxuXG4gIGlmIChjaGVjay5sZW5ndGggIT09IHBhcnRzLmxlbmd0aCkge1xuICAgIHRocm93IEVycm9yKCdSZWZ1c2luZyB0byB1cGRhdGUgYmxhY2tsaXN0ZWQgcHJvcGVydHkgJyArIHBhdGgpXG4gIH1cblxuICByZXR1cm4gcGFydHNcbn1cblxudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eVxuXG5mdW5jdGlvbiBEb3RPYmplY3QgKHNlcGFyYXRvciwgb3ZlcnJpZGUsIHVzZUFycmF5LCB1c2VCcmFja2V0cykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRG90T2JqZWN0KSkge1xuICAgIHJldHVybiBuZXcgRG90T2JqZWN0KHNlcGFyYXRvciwgb3ZlcnJpZGUsIHVzZUFycmF5LCB1c2VCcmFja2V0cylcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb3ZlcnJpZGUgPT09ICd1bmRlZmluZWQnKSBvdmVycmlkZSA9IGZhbHNlXG4gIGlmICh0eXBlb2YgdXNlQXJyYXkgPT09ICd1bmRlZmluZWQnKSB1c2VBcnJheSA9IHRydWVcbiAgaWYgKHR5cGVvZiB1c2VCcmFja2V0cyA9PT0gJ3VuZGVmaW5lZCcpIHVzZUJyYWNrZXRzID0gdHJ1ZVxuICB0aGlzLnNlcGFyYXRvciA9IHNlcGFyYXRvciB8fCAnLidcbiAgdGhpcy5vdmVycmlkZSA9IG92ZXJyaWRlXG4gIHRoaXMudXNlQXJyYXkgPSB1c2VBcnJheVxuICB0aGlzLnVzZUJyYWNrZXRzID0gdXNlQnJhY2tldHNcbiAgdGhpcy5rZWVwQXJyYXkgPSBmYWxzZVxuXG4gIC8vIGNvbnRhaW5zIHRvdWNoZWQgYXJyYXlzXG4gIHRoaXMuY2xlYW51cCA9IFtdXG59XG5cbnZhciBkb3REZWZhdWx0ID0gbmV3IERvdE9iamVjdCgnLicsIGZhbHNlLCB0cnVlLCB0cnVlKVxuZnVuY3Rpb24gd3JhcCAobWV0aG9kKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGRvdERlZmF1bHRbbWV0aG9kXS5hcHBseShkb3REZWZhdWx0LCBhcmd1bWVudHMpXG4gIH1cbn1cblxuRG90T2JqZWN0LnByb3RvdHlwZS5fZmlsbCA9IGZ1bmN0aW9uIChhLCBvYmosIHYsIG1vZCkge1xuICB2YXIgayA9IGEuc2hpZnQoKVxuXG4gIGlmIChhLmxlbmd0aCA+IDApIHtcbiAgICBvYmpba10gPSBvYmpba10gfHwgKHRoaXMudXNlQXJyYXkgJiYgaXNJbmRleChhWzBdKSA/IFtdIDoge30pXG5cbiAgICBpZiAoIWlzQXJyYXlPck9iamVjdChvYmpba10pKSB7XG4gICAgICBpZiAodGhpcy5vdmVycmlkZSkge1xuICAgICAgICBvYmpba10gPSB7fVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCEoaXNBcnJheU9yT2JqZWN0KHYpICYmIGlzRW1wdHlPYmplY3QodikpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgJ1RyeWluZyB0byByZWRlZmluZSBgJyArIGsgKyAnYCB3aGljaCBpcyBhICcgKyB0eXBlb2Ygb2JqW2tdXG4gICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fZmlsbChhLCBvYmpba10sIHYsIG1vZClcbiAgfSBlbHNlIHtcbiAgICBpZiAoIXRoaXMub3ZlcnJpZGUgJiYgaXNBcnJheU9yT2JqZWN0KG9ialtrXSkgJiYgIWlzRW1wdHlPYmplY3Qob2JqW2tdKSkge1xuICAgICAgaWYgKCEoaXNBcnJheU9yT2JqZWN0KHYpICYmIGlzRW1wdHlPYmplY3QodikpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRyeWluZyB0byByZWRlZmluZSBub24tZW1wdHkgb2JqWydcIiArIGsgKyBcIiddXCIpXG4gICAgICB9XG5cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIG9ialtrXSA9IF9wcm9jZXNzKHYsIG1vZClcbiAgfVxufVxuXG4vKipcbiAqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgd2l0aCBkb3R0ZWQta2V5L3ZhbHVlIHBhaXJzIHRvIGl0J3MgZXhwYW5kZWQgdmVyc2lvblxuICpcbiAqIE9wdGlvbmFsbHkgdHJhbnNmb3JtZWQgYnkgYSBzZXQgb2YgbW9kaWZpZXJzLlxuICpcbiAqIFVzYWdlOlxuICpcbiAqICAgdmFyIHJvdyA9IHtcbiAqICAgICAnbnInOiAyMDAsXG4gKiAgICAgJ2RvYy5uYW1lJzogJyAgTXkgRG9jdW1lbnQgICdcbiAqICAgfVxuICpcbiAqICAgdmFyIG1vZHMgPSB7XG4gKiAgICAgJ2RvYy5uYW1lJzogW19zLnRyaW0sIF9zLnVuZGVyc2NvcmVkXVxuICogICB9XG4gKlxuICogICBkb3Qub2JqZWN0KHJvdywgbW9kcylcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcGFyYW0ge09iamVjdH0gbW9kc1xuICovXG5Eb3RPYmplY3QucHJvdG90eXBlLm9iamVjdCA9IGZ1bmN0aW9uIChvYmosIG1vZHMpIHtcbiAgdmFyIHNlbGYgPSB0aGlzXG5cbiAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgdmFyIG1vZCA9IG1vZHMgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBtb2RzW2tdXG4gICAgLy8gbm9ybWFsaXplIGFycmF5IG5vdGF0aW9uLlxuICAgIHZhciBvayA9IHBhcnNlUGF0aChrLCBzZWxmLnNlcGFyYXRvcikuam9pbihzZWxmLnNlcGFyYXRvcilcblxuICAgIGlmIChvay5pbmRleE9mKHNlbGYuc2VwYXJhdG9yKSAhPT0gLTEpIHtcbiAgICAgIHNlbGYuX2ZpbGwob2suc3BsaXQoc2VsZi5zZXBhcmF0b3IpLCBvYmosIG9ialtrXSwgbW9kKVxuICAgICAgZGVsZXRlIG9ialtrXVxuICAgIH0gZWxzZSB7XG4gICAgICBvYmpba10gPSBfcHJvY2VzcyhvYmpba10sIG1vZClcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIG9ialxufVxuXG4vKipcbiAqIEBwYXJhbSB7U3RyaW5nfSBwYXRoIGRvdHRlZCBwYXRoXG4gKiBAcGFyYW0ge1N0cmluZ30gdiB2YWx1ZSB0byBiZSBzZXRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogb2JqZWN0IHRvIGJlIG1vZGlmaWVkXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufEFycmF5fSBtb2Qgb3B0aW9uYWwgbW9kaWZpZXJcbiAqL1xuRG90T2JqZWN0LnByb3RvdHlwZS5zdHIgPSBmdW5jdGlvbiAocGF0aCwgdiwgb2JqLCBtb2QpIHtcbiAgdmFyIG9rID0gcGFyc2VQYXRoKHBhdGgsIHRoaXMuc2VwYXJhdG9yKS5qb2luKHRoaXMuc2VwYXJhdG9yKVxuXG4gIGlmIChwYXRoLmluZGV4T2YodGhpcy5zZXBhcmF0b3IpICE9PSAtMSkge1xuICAgIHRoaXMuX2ZpbGwob2suc3BsaXQodGhpcy5zZXBhcmF0b3IpLCBvYmosIHYsIG1vZClcbiAgfSBlbHNlIHtcbiAgICBvYmpbcGF0aF0gPSBfcHJvY2Vzcyh2LCBtb2QpXG4gIH1cblxuICByZXR1cm4gb2JqXG59XG5cbi8qKlxuICpcbiAqIFBpY2sgYSB2YWx1ZSBmcm9tIGFuIG9iamVjdCB1c2luZyBkb3Qgbm90YXRpb24uXG4gKlxuICogT3B0aW9uYWxseSByZW1vdmUgdGhlIHZhbHVlXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHBhdGhcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gcmVtb3ZlXG4gKi9cbkRvdE9iamVjdC5wcm90b3R5cGUucGljayA9IGZ1bmN0aW9uIChwYXRoLCBvYmosIHJlbW92ZSwgcmVpbmRleEFycmF5KSB7XG4gIHZhciBpXG4gIHZhciBrZXlzXG4gIHZhciB2YWxcbiAgdmFyIGtleVxuICB2YXIgY3BcblxuICBrZXlzID0gcGFyc2VQYXRoKHBhdGgsIHRoaXMuc2VwYXJhdG9yKVxuICBmb3IgKGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGtleSA9IHBhcnNlS2V5KGtleXNbaV0sIG9iailcbiAgICBpZiAob2JqICYmIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIGtleSBpbiBvYmopIHtcbiAgICAgIGlmIChpID09PSBrZXlzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgaWYgKHJlbW92ZSkge1xuICAgICAgICAgIHZhbCA9IG9ialtrZXldXG4gICAgICAgICAgaWYgKHJlaW5kZXhBcnJheSAmJiBBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgICAgICAgIG9iai5zcGxpY2Uoa2V5LCAxKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZWxldGUgb2JqW2tleV1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgICAgICAgY3AgPSBrZXlzLnNsaWNlKDAsIC0xKS5qb2luKCcuJylcbiAgICAgICAgICAgIGlmICh0aGlzLmNsZWFudXAuaW5kZXhPZihjcCkgPT09IC0xKSB7XG4gICAgICAgICAgICAgIHRoaXMuY2xlYW51cC5wdXNoKGNwKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdmFsXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG9ialtrZXldXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9iaiA9IG9ialtrZXldXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG4gIH1cbiAgaWYgKHJlbW92ZSAmJiBBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICBvYmogPSBvYmouZmlsdGVyKGZ1bmN0aW9uIChuKSB7XG4gICAgICByZXR1cm4gbiAhPT0gdW5kZWZpbmVkXG4gICAgfSlcbiAgfVxuICByZXR1cm4gb2JqXG59XG4vKipcbiAqXG4gKiBEZWxldGUgdmFsdWUgZnJvbSBhbiBvYmplY3QgdXNpbmcgZG90IG5vdGF0aW9uLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBwYXRoXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcmV0dXJuIHthbnl9IFRoZSByZW1vdmVkIHZhbHVlXG4gKi9cbkRvdE9iamVjdC5wcm90b3R5cGUuZGVsZXRlID0gZnVuY3Rpb24gKHBhdGgsIG9iaikge1xuICByZXR1cm4gdGhpcy5yZW1vdmUocGF0aCwgb2JqLCB0cnVlKVxufVxuXG4vKipcbiAqXG4gKiBSZW1vdmUgdmFsdWUgZnJvbSBhbiBvYmplY3QgdXNpbmcgZG90IG5vdGF0aW9uLlxuICpcbiAqIFdpbGwgcmVtb3ZlIG11bHRpcGxlIGl0ZW1zIGlmIHBhdGggaXMgYW4gYXJyYXkuXG4gKiBJbiB0aGlzIGNhc2UgYXJyYXkgaW5kZXhlcyB3aWxsIGJlIHJldGFpbmVkIHVudGlsIGFsbFxuICogcmVtb3ZhbHMgaGF2ZSBiZWVuIHByb2Nlc3NlZC5cbiAqXG4gKiBVc2UgZG90LmRlbGV0ZSgpIHRvIGF1dG9tYXRpY2FsbHkgIHJlLWluZGV4IGFycmF5cy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ3xBcnJheTxTdHJpbmc+fSBwYXRoXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcGFyYW0ge0Jvb2xlYW59IHJlaW5kZXhBcnJheVxuICogQHJldHVybiB7YW55fSBUaGUgcmVtb3ZlZCB2YWx1ZVxuICovXG5Eb3RPYmplY3QucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uIChwYXRoLCBvYmosIHJlaW5kZXhBcnJheSkge1xuICB2YXIgaVxuXG4gIHRoaXMuY2xlYW51cCA9IFtdXG4gIGlmIChBcnJheS5pc0FycmF5KHBhdGgpKSB7XG4gICAgZm9yIChpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMucGljayhwYXRoW2ldLCBvYmosIHRydWUsIHJlaW5kZXhBcnJheSlcbiAgICB9XG4gICAgaWYgKCFyZWluZGV4QXJyYXkpIHtcbiAgICAgIHRoaXMuX2NsZWFudXAob2JqKVxuICAgIH1cbiAgICByZXR1cm4gb2JqXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHRoaXMucGljayhwYXRoLCBvYmosIHRydWUsIHJlaW5kZXhBcnJheSlcbiAgfVxufVxuXG5Eb3RPYmplY3QucHJvdG90eXBlLl9jbGVhbnVwID0gZnVuY3Rpb24gKG9iaikge1xuICB2YXIgcmV0XG4gIHZhciBpXG4gIHZhciBrZXlzXG4gIHZhciByb290XG4gIGlmICh0aGlzLmNsZWFudXAubGVuZ3RoKSB7XG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuY2xlYW51cC5sZW5ndGg7IGkrKykge1xuICAgICAga2V5cyA9IHRoaXMuY2xlYW51cFtpXS5zcGxpdCgnLicpXG4gICAgICByb290ID0ga2V5cy5zcGxpY2UoMCwgLTEpLmpvaW4oJy4nKVxuICAgICAgcmV0ID0gcm9vdCA/IHRoaXMucGljayhyb290LCBvYmopIDogb2JqXG4gICAgICByZXQgPSByZXRba2V5c1swXV0uZmlsdGVyKGZ1bmN0aW9uICh2KSB7XG4gICAgICAgIHJldHVybiB2ICE9PSB1bmRlZmluZWRcbiAgICAgIH0pXG4gICAgICB0aGlzLnNldCh0aGlzLmNsZWFudXBbaV0sIHJldCwgb2JqKVxuICAgIH1cbiAgICB0aGlzLmNsZWFudXAgPSBbXVxuICB9XG59XG5cbi8qKlxuICogQWxpYXMgbWV0aG9kICBmb3IgYGRvdC5yZW1vdmVgXG4gKlxuICogTm90ZTogdGhpcyBpcyBub3QgYW4gYWxpYXMgZm9yIGRvdC5kZWxldGUoKVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfEFycmF5PFN0cmluZz59IHBhdGhcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gcmVpbmRleEFycmF5XG4gKiBAcmV0dXJuIHthbnl9IFRoZSByZW1vdmVkIHZhbHVlXG4gKi9cbkRvdE9iamVjdC5wcm90b3R5cGUuZGVsID0gRG90T2JqZWN0LnByb3RvdHlwZS5yZW1vdmVcblxuLyoqXG4gKlxuICogTW92ZSBhIHByb3BlcnR5IGZyb20gb25lIHBsYWNlIHRvIHRoZSBvdGhlci5cbiAqXG4gKiBJZiB0aGUgc291cmNlIHBhdGggZG9lcyBub3QgZXhpc3QgKHVuZGVmaW5lZClcbiAqIHRoZSB0YXJnZXQgcHJvcGVydHkgd2lsbCBub3QgYmUgc2V0LlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzb3VyY2VcbiAqIEBwYXJhbSB7U3RyaW5nfSB0YXJnZXRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEBwYXJhbSB7RnVuY3Rpb258QXJyYXl9IG1vZHNcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gbWVyZ2VcbiAqL1xuRG90T2JqZWN0LnByb3RvdHlwZS5tb3ZlID0gZnVuY3Rpb24gKHNvdXJjZSwgdGFyZ2V0LCBvYmosIG1vZHMsIG1lcmdlKSB7XG4gIGlmICh0eXBlb2YgbW9kcyA9PT0gJ2Z1bmN0aW9uJyB8fCBBcnJheS5pc0FycmF5KG1vZHMpKSB7XG4gICAgdGhpcy5zZXQodGFyZ2V0LCBfcHJvY2Vzcyh0aGlzLnBpY2soc291cmNlLCBvYmosIHRydWUpLCBtb2RzKSwgb2JqLCBtZXJnZSlcbiAgfSBlbHNlIHtcbiAgICBtZXJnZSA9IG1vZHNcbiAgICB0aGlzLnNldCh0YXJnZXQsIHRoaXMucGljayhzb3VyY2UsIG9iaiwgdHJ1ZSksIG9iaiwgbWVyZ2UpXG4gIH1cblxuICByZXR1cm4gb2JqXG59XG5cbi8qKlxuICpcbiAqIFRyYW5zZmVyIGEgcHJvcGVydHkgZnJvbSBvbmUgb2JqZWN0IHRvIGFub3RoZXIgb2JqZWN0LlxuICpcbiAqIElmIHRoZSBzb3VyY2UgcGF0aCBkb2VzIG5vdCBleGlzdCAodW5kZWZpbmVkKVxuICogdGhlIHByb3BlcnR5IG9uIHRoZSBvdGhlciBvYmplY3Qgd2lsbCBub3QgYmUgc2V0LlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzb3VyY2VcbiAqIEBwYXJhbSB7U3RyaW5nfSB0YXJnZXRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmoxXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqMlxuICogQHBhcmFtIHtGdW5jdGlvbnxBcnJheX0gbW9kc1xuICogQHBhcmFtIHtCb29sZWFufSBtZXJnZVxuICovXG5Eb3RPYmplY3QucHJvdG90eXBlLnRyYW5zZmVyID0gZnVuY3Rpb24gKFxuICBzb3VyY2UsXG4gIHRhcmdldCxcbiAgb2JqMSxcbiAgb2JqMixcbiAgbW9kcyxcbiAgbWVyZ2Vcbikge1xuICBpZiAodHlwZW9mIG1vZHMgPT09ICdmdW5jdGlvbicgfHwgQXJyYXkuaXNBcnJheShtb2RzKSkge1xuICAgIHRoaXMuc2V0KFxuICAgICAgdGFyZ2V0LFxuICAgICAgX3Byb2Nlc3ModGhpcy5waWNrKHNvdXJjZSwgb2JqMSwgdHJ1ZSksIG1vZHMpLFxuICAgICAgb2JqMixcbiAgICAgIG1lcmdlXG4gICAgKVxuICB9IGVsc2Uge1xuICAgIG1lcmdlID0gbW9kc1xuICAgIHRoaXMuc2V0KHRhcmdldCwgdGhpcy5waWNrKHNvdXJjZSwgb2JqMSwgdHJ1ZSksIG9iajIsIG1lcmdlKVxuICB9XG5cbiAgcmV0dXJuIG9iajJcbn1cblxuLyoqXG4gKlxuICogQ29weSBhIHByb3BlcnR5IGZyb20gb25lIG9iamVjdCB0byBhbm90aGVyIG9iamVjdC5cbiAqXG4gKiBJZiB0aGUgc291cmNlIHBhdGggZG9lcyBub3QgZXhpc3QgKHVuZGVmaW5lZClcbiAqIHRoZSBwcm9wZXJ0eSBvbiB0aGUgb3RoZXIgb2JqZWN0IHdpbGwgbm90IGJlIHNldC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc291cmNlXG4gKiBAcGFyYW0ge1N0cmluZ30gdGFyZ2V0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqMVxuICogQHBhcmFtIHtPYmplY3R9IG9iajJcbiAqIEBwYXJhbSB7RnVuY3Rpb258QXJyYXl9IG1vZHNcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gbWVyZ2VcbiAqL1xuRG90T2JqZWN0LnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gKHNvdXJjZSwgdGFyZ2V0LCBvYmoxLCBvYmoyLCBtb2RzLCBtZXJnZSkge1xuICBpZiAodHlwZW9mIG1vZHMgPT09ICdmdW5jdGlvbicgfHwgQXJyYXkuaXNBcnJheShtb2RzKSkge1xuICAgIHRoaXMuc2V0KFxuICAgICAgdGFyZ2V0LFxuICAgICAgX3Byb2Nlc3MoXG4gICAgICAgIC8vIGNsb25lIHdoYXQgaXMgcGlja2VkXG4gICAgICAgIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5waWNrKHNvdXJjZSwgb2JqMSwgZmFsc2UpKSksXG4gICAgICAgIG1vZHNcbiAgICAgICksXG4gICAgICBvYmoyLFxuICAgICAgbWVyZ2VcbiAgICApXG4gIH0gZWxzZSB7XG4gICAgbWVyZ2UgPSBtb2RzXG4gICAgdGhpcy5zZXQodGFyZ2V0LCB0aGlzLnBpY2soc291cmNlLCBvYmoxLCBmYWxzZSksIG9iajIsIG1lcmdlKVxuICB9XG5cbiAgcmV0dXJuIG9iajJcbn1cblxuLyoqXG4gKlxuICogU2V0IGEgcHJvcGVydHkgb24gYW4gb2JqZWN0IHVzaW5nIGRvdCBub3RhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gcGF0aFxuICogQHBhcmFtIHthbnl9IHZhbFxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHBhcmFtIHtCb29sZWFufSBtZXJnZVxuICovXG5Eb3RPYmplY3QucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChwYXRoLCB2YWwsIG9iaiwgbWVyZ2UpIHtcbiAgdmFyIGlcbiAgdmFyIGtcbiAgdmFyIGtleXNcbiAgdmFyIGtleVxuXG4gIC8vIERvIG5vdCBvcGVyYXRlIGlmIHRoZSB2YWx1ZSBpcyB1bmRlZmluZWQuXG4gIGlmICh0eXBlb2YgdmFsID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBvYmpcbiAgfVxuICBrZXlzID0gcGFyc2VQYXRoKHBhdGgsIHRoaXMuc2VwYXJhdG9yKVxuXG4gIGZvciAoaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAga2V5ID0ga2V5c1tpXVxuICAgIGlmIChpID09PSBrZXlzLmxlbmd0aCAtIDEpIHtcbiAgICAgIGlmIChtZXJnZSAmJiBpc09iamVjdCh2YWwpICYmIGlzT2JqZWN0KG9ialtrZXldKSkge1xuICAgICAgICBmb3IgKGsgaW4gdmFsKSB7XG4gICAgICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwodmFsLCBrKSkge1xuICAgICAgICAgICAgb2JqW2tleV1ba10gPSB2YWxba11cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAobWVyZ2UgJiYgQXJyYXkuaXNBcnJheShvYmpba2V5XSkgJiYgQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdmFsLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgb2JqW2tleXNbaV1dLnB1c2godmFsW2pdKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvYmpba2V5XSA9IHZhbFxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICAvLyBmb3JjZSB0aGUgdmFsdWUgdG8gYmUgYW4gb2JqZWN0XG4gICAgICAhaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkgfHxcbiAgICAgICghaXNPYmplY3Qob2JqW2tleV0pICYmICFBcnJheS5pc0FycmF5KG9ialtrZXldKSlcbiAgICApIHtcbiAgICAgIC8vIGluaXRpYWxpemUgYXMgYXJyYXkgaWYgbmV4dCBrZXkgaXMgbnVtZXJpY1xuICAgICAgaWYgKC9eXFxkKyQvLnRlc3Qoa2V5c1tpICsgMV0pKSB7XG4gICAgICAgIG9ialtrZXldID0gW11cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9ialtrZXldID0ge31cbiAgICAgIH1cbiAgICB9XG4gICAgb2JqID0gb2JqW2tleV1cbiAgfVxuICByZXR1cm4gb2JqXG59XG5cbi8qKlxuICpcbiAqIFRyYW5zZm9ybSBhbiBvYmplY3RcbiAqXG4gKiBVc2FnZTpcbiAqXG4gKiAgIHZhciBvYmogPSB7XG4gKiAgICAgXCJpZFwiOiAxLFxuICogICAgXCJzb21lXCI6IHtcbiAqICAgICAgXCJ0aGluZ1wiOiBcImVsc2VcIlxuICogICAgfVxuICogICB9XG4gKlxuICogICB2YXIgdHJhbnNmb3JtID0ge1xuICogICAgIFwiaWRcIjogXCJuclwiLFxuICogICAgXCJzb21lLnRoaW5nXCI6IFwibmFtZVwiXG4gKiAgIH1cbiAqXG4gKiAgIHZhciB0Z3QgPSBkb3QudHJhbnNmb3JtKHRyYW5zZm9ybSwgb2JqKVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSByZWNpcGUgVHJhbnNmb3JtIHJlY2lwZVxuICogQHBhcmFtIHtPYmplY3R9IG9iaiBPYmplY3QgdG8gYmUgdHJhbnNmb3JtZWRcbiAqIEBwYXJhbSB7QXJyYXl9IG1vZHMgbW9kaWZpZXJzIGZvciB0aGUgdGFyZ2V0XG4gKi9cbkRvdE9iamVjdC5wcm90b3R5cGUudHJhbnNmb3JtID0gZnVuY3Rpb24gKHJlY2lwZSwgb2JqLCB0Z3QpIHtcbiAgb2JqID0gb2JqIHx8IHt9XG4gIHRndCA9IHRndCB8fCB7fVxuICBPYmplY3Qua2V5cyhyZWNpcGUpLmZvckVhY2goXG4gICAgZnVuY3Rpb24gKGtleSkge1xuICAgICAgdGhpcy5zZXQocmVjaXBlW2tleV0sIHRoaXMucGljayhrZXksIG9iaiksIHRndClcbiAgICB9LmJpbmQodGhpcylcbiAgKVxuICByZXR1cm4gdGd0XG59XG5cbi8qKlxuICpcbiAqIENvbnZlcnQgb2JqZWN0IHRvIGRvdHRlZC1rZXkvdmFsdWUgcGFpclxuICpcbiAqIFVzYWdlOlxuICpcbiAqICAgdmFyIHRndCA9IGRvdC5kb3Qob2JqKVxuICpcbiAqICAgb3JcbiAqXG4gKiAgIHZhciB0Z3QgPSB7fVxuICogICBkb3QuZG90KG9iaiwgdGd0KVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogc291cmNlIG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IHRndCB0YXJnZXQgb2JqZWN0XG4gKiBAcGFyYW0ge0FycmF5fSBwYXRoIHBhdGggYXJyYXkgKGludGVybmFsKVxuICovXG5Eb3RPYmplY3QucHJvdG90eXBlLmRvdCA9IGZ1bmN0aW9uIChvYmosIHRndCwgcGF0aCkge1xuICB0Z3QgPSB0Z3QgfHwge31cbiAgcGF0aCA9IHBhdGggfHwgW11cbiAgdmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5KG9iailcblxuICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goXG4gICAgZnVuY3Rpb24gKGtleSkge1xuICAgICAgdmFyIGluZGV4ID0gaXNBcnJheSAmJiB0aGlzLnVzZUJyYWNrZXRzID8gJ1snICsga2V5ICsgJ10nIDoga2V5XG4gICAgICBpZiAoXG4gICAgICAgIGlzQXJyYXlPck9iamVjdChvYmpba2V5XSkgJiZcbiAgICAgICAgKChpc09iamVjdChvYmpba2V5XSkgJiYgIWlzRW1wdHlPYmplY3Qob2JqW2tleV0pKSB8fFxuICAgICAgICAgIChBcnJheS5pc0FycmF5KG9ialtrZXldKSAmJiAhdGhpcy5rZWVwQXJyYXkgJiYgb2JqW2tleV0ubGVuZ3RoICE9PSAwKSlcbiAgICAgICkge1xuICAgICAgICBpZiAoaXNBcnJheSAmJiB0aGlzLnVzZUJyYWNrZXRzKSB7XG4gICAgICAgICAgdmFyIHByZXZpb3VzS2V5ID0gcGF0aFtwYXRoLmxlbmd0aCAtIDFdIHx8ICcnXG4gICAgICAgICAgcmV0dXJuIHRoaXMuZG90KFxuICAgICAgICAgICAgb2JqW2tleV0sXG4gICAgICAgICAgICB0Z3QsXG4gICAgICAgICAgICBwYXRoLnNsaWNlKDAsIC0xKS5jb25jYXQocHJldmlvdXNLZXkgKyBpbmRleClcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZG90KG9ialtrZXldLCB0Z3QsIHBhdGguY29uY2F0KGluZGV4KSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGlzQXJyYXkgJiYgdGhpcy51c2VCcmFja2V0cykge1xuICAgICAgICAgIHRndFtwYXRoLmpvaW4odGhpcy5zZXBhcmF0b3IpLmNvbmNhdCgnWycgKyBrZXkgKyAnXScpXSA9IG9ialtrZXldXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGd0W3BhdGguY29uY2F0KGluZGV4KS5qb2luKHRoaXMuc2VwYXJhdG9yKV0gPSBvYmpba2V5XVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfS5iaW5kKHRoaXMpXG4gIClcbiAgcmV0dXJuIHRndFxufVxuXG5Eb3RPYmplY3QucGljayA9IHdyYXAoJ3BpY2snKVxuRG90T2JqZWN0Lm1vdmUgPSB3cmFwKCdtb3ZlJylcbkRvdE9iamVjdC50cmFuc2ZlciA9IHdyYXAoJ3RyYW5zZmVyJylcbkRvdE9iamVjdC50cmFuc2Zvcm0gPSB3cmFwKCd0cmFuc2Zvcm0nKVxuRG90T2JqZWN0LmNvcHkgPSB3cmFwKCdjb3B5JylcbkRvdE9iamVjdC5vYmplY3QgPSB3cmFwKCdvYmplY3QnKVxuRG90T2JqZWN0LnN0ciA9IHdyYXAoJ3N0cicpXG5Eb3RPYmplY3Quc2V0ID0gd3JhcCgnc2V0JylcbkRvdE9iamVjdC5kZWxldGUgPSB3cmFwKCdkZWxldGUnKVxuRG90T2JqZWN0LmRlbCA9IERvdE9iamVjdC5yZW1vdmUgPSB3cmFwKCdyZW1vdmUnKVxuRG90T2JqZWN0LmRvdCA9IHdyYXAoJ2RvdCcpO1xuWydvdmVycmlkZScsICdvdmVyd3JpdGUnXS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEb3RPYmplY3QsIHByb3AsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBkb3REZWZhdWx0Lm92ZXJyaWRlXG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIGRvdERlZmF1bHQub3ZlcnJpZGUgPSAhIXZhbFxuICAgIH1cbiAgfSlcbn0pO1xuWyd1c2VBcnJheScsICdrZWVwQXJyYXknLCAndXNlQnJhY2tldHMnXS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEb3RPYmplY3QsIHByb3AsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBkb3REZWZhdWx0W3Byb3BdXG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIGRvdERlZmF1bHRbcHJvcF0gPSB2YWxcbiAgICB9XG4gIH0pXG59KVxuXG5Eb3RPYmplY3QuX3Byb2Nlc3MgPSBfcHJvY2Vzc1xuXG5tb2R1bGUuZXhwb3J0cyA9IERvdE9iamVjdFxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9KTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkZldGNoUlBDID0gZXhwb3J0cy53cmFwRXJyb3JSZXNwb25zZVRvVHdpcnBFcnJvciA9IGV4cG9ydHMuTm9kZUh0dHBSUEMgPSB2b2lkIDA7XG5jb25zdCBodHRwID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJodHRwXCIpKTtcbmNvbnN0IGh0dHBzID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJodHRwc1wiKSk7XG5jb25zdCB1cmxfMSA9IHJlcXVpcmUoXCJ1cmxcIik7XG5jb25zdCBlcnJvcnNfMSA9IHJlcXVpcmUoXCIuL2Vycm9yc1wiKTtcbi8qKlxuICogYSBub2RlIEhUVFAgUlBDIGltcGxlbWVudGF0aW9uXG4gKiBAcGFyYW0gb3B0aW9uc1xuICogQGNvbnN0cnVjdG9yXG4gKi9cbmNvbnN0IE5vZGVIdHRwUlBDID0gKG9wdGlvbnMpID0+ICh7XG4gICAgcmVxdWVzdChzZXJ2aWNlLCBtZXRob2QsIGNvbnRlbnRUeXBlLCBkYXRhKSB7XG4gICAgICAgIGxldCBjbGllbnQ7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0ZWQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlQ2h1bmtzID0gW107XG4gICAgICAgICAgICBjb25zdCByZXF1ZXN0RGF0YSA9IGNvbnRlbnRUeXBlID09PSBcImFwcGxpY2F0aW9uL3Byb3RvYnVmXCJcbiAgICAgICAgICAgICAgICA/IEJ1ZmZlci5mcm9tKGRhdGEpXG4gICAgICAgICAgICAgICAgOiBKU09OLnN0cmluZ2lmeShkYXRhKTtcbiAgICAgICAgICAgIGNvbnN0IHVybCA9IG5ldyB1cmxfMS5VUkwob3B0aW9ucy5iYXNlVXJsKTtcbiAgICAgICAgICAgIGNvbnN0IGlzSHR0cHMgPSB1cmwucHJvdG9jb2wgPT09IFwiaHR0cHM6XCI7XG4gICAgICAgICAgICBpZiAoaXNIdHRwcykge1xuICAgICAgICAgICAgICAgIGNsaWVudCA9IGh0dHBzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY2xpZW50ID0gaHR0cDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHByZWZpeCA9IHVybC5wYXRobmFtZSAhPT0gXCIvXCIgPyB1cmwucGF0aG5hbWUgOiBcIlwiO1xuICAgICAgICAgICAgY29uc3QgcmVxID0gY2xpZW50XG4gICAgICAgICAgICAgICAgLnJlcXVlc3QoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCAob3B0aW9ucyA/IG9wdGlvbnMgOiB7fSkpLCB7IG1ldGhvZDogXCJQT1NUXCIsIHByb3RvY29sOiB1cmwucHJvdG9jb2wsIGhvc3Q6IHVybC5ob3N0bmFtZSwgcG9ydDogdXJsLnBvcnQgPyB1cmwucG9ydCA6IGlzSHR0cHMgPyA0NDMgOiA4MCwgcGF0aDogYCR7cHJlZml4fS8ke3NlcnZpY2V9LyR7bWV0aG9kfWAsIGhlYWRlcnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgKG9wdGlvbnMuaGVhZGVycyA/IG9wdGlvbnMuaGVhZGVycyA6IHt9KSksIHsgXCJDb250ZW50LVR5cGVcIjogY29udGVudFR5cGUsIFwiQ29udGVudC1MZW5ndGhcIjogY29udGVudFR5cGUgPT09IFwiYXBwbGljYXRpb24vcHJvdG9idWZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPyBCdWZmZXIuYnl0ZUxlbmd0aChyZXF1ZXN0RGF0YSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogQnVmZmVyLmZyb20ocmVxdWVzdERhdGEpLmJ5dGVMZW5ndGggfSkgfSksIChyZXMpID0+IHtcbiAgICAgICAgICAgICAgICByZXMub24oXCJkYXRhXCIsIChjaHVuaykgPT4gcmVzcG9uc2VDaHVua3MucHVzaChjaHVuaykpO1xuICAgICAgICAgICAgICAgIHJlcy5vbihcImVuZFwiLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBCdWZmZXIuY29uY2F0KHJlc3BvbnNlQ2h1bmtzKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcy5zdGF0dXNDb2RlICE9IDIwMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0ZWQod3JhcEVycm9yUmVzcG9uc2VUb1R3aXJwRXJyb3IoZGF0YS50b1N0cmluZygpKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudFR5cGUgPT09IFwiYXBwbGljYXRpb24vanNvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShKU09OLnBhcnNlKGRhdGEudG9TdHJpbmcoKSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJlcy5vbihcImVycm9yXCIsIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0ZWQoZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLm9uKFwiZXJyb3JcIiwgKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIHJlamVjdGVkKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJlcS5lbmQocmVxdWVzdERhdGEpO1xuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG5leHBvcnRzLk5vZGVIdHRwUlBDID0gTm9kZUh0dHBSUEM7XG5mdW5jdGlvbiB3cmFwRXJyb3JSZXNwb25zZVRvVHdpcnBFcnJvcihlcnJvclJlc3BvbnNlKSB7XG4gICAgcmV0dXJuIGVycm9yc18xLlR3aXJwRXJyb3IuZnJvbU9iamVjdChKU09OLnBhcnNlKGVycm9yUmVzcG9uc2UpKTtcbn1cbmV4cG9ydHMud3JhcEVycm9yUmVzcG9uc2VUb1R3aXJwRXJyb3IgPSB3cmFwRXJyb3JSZXNwb25zZVRvVHdpcnBFcnJvcjtcbi8qKlxuICogYSBicm93c2VyIGZldGNoIFJQQyBpbXBsZW1lbnRhdGlvblxuICovXG5jb25zdCBGZXRjaFJQQyA9IChvcHRpb25zKSA9PiAoe1xuICAgIHJlcXVlc3Qoc2VydmljZSwgbWV0aG9kLCBjb250ZW50VHlwZSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgY29uc3QgaGVhZGVycyA9IG5ldyBIZWFkZXJzKG9wdGlvbnMuaGVhZGVycyk7XG4gICAgICAgICAgICBoZWFkZXJzLnNldChcImNvbnRlbnQtdHlwZVwiLCBjb250ZW50VHlwZSk7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IHlpZWxkIGZldGNoKGAke29wdGlvbnMuYmFzZVVybH0vJHtzZXJ2aWNlfS8ke21ldGhvZH1gLCBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMpLCB7IG1ldGhvZDogXCJQT1NUXCIsIGhlYWRlcnMsIGJvZHk6IGRhdGEgaW5zdGFuY2VvZiBVaW50OEFycmF5ID8gZGF0YSA6IEpTT04uc3RyaW5naWZ5KGRhdGEpIH0pKTtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgICAgIGlmIChjb250ZW50VHlwZSA9PT0gXCJhcHBsaWNhdGlvbi9qc29uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHlpZWxkIHJlc3BvbnNlLmpzb24oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHlpZWxkIHJlc3BvbnNlLmFycmF5QnVmZmVyKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3JzXzEuVHdpcnBFcnJvci5mcm9tT2JqZWN0KHlpZWxkIHJlc3BvbnNlLmpzb24oKSk7XG4gICAgICAgIH0pO1xuICAgIH0sXG59KTtcbmV4cG9ydHMuRmV0Y2hSUEMgPSBGZXRjaFJQQztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfSk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9fcmVzdCA9ICh0aGlzICYmIHRoaXMuX19yZXN0KSB8fCBmdW5jdGlvbiAocywgZSkge1xuICAgIHZhciB0ID0ge307XG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXG4gICAgICAgIHRbcF0gPSBzW3BdO1xuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xuICAgICAgICB9XG4gICAgcmV0dXJuIHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5HYXRld2F5ID0gZXhwb3J0cy5QYXR0ZXJuID0gdm9pZCAwO1xuY29uc3QgcXVlcnlzdHJpbmdfMSA9IHJlcXVpcmUoXCJxdWVyeXN0cmluZ1wiKTtcbmNvbnN0IGRvdE9iamVjdCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiZG90LW9iamVjdFwiKSk7XG5jb25zdCByZXF1ZXN0XzEgPSByZXF1aXJlKFwiLi9yZXF1ZXN0XCIpO1xuY29uc3QgZXJyb3JzXzEgPSByZXF1aXJlKFwiLi9lcnJvcnNcIik7XG5jb25zdCBodHRwX2NsaWVudF8xID0gcmVxdWlyZShcIi4vaHR0cC5jbGllbnRcIik7XG5jb25zdCBzZXJ2ZXJfMSA9IHJlcXVpcmUoXCIuL3NlcnZlclwiKTtcbnZhciBQYXR0ZXJuO1xuKGZ1bmN0aW9uIChQYXR0ZXJuKSB7XG4gICAgUGF0dGVybltcIlBPU1RcIl0gPSBcInBvc3RcIjtcbiAgICBQYXR0ZXJuW1wiR0VUXCJdID0gXCJnZXRcIjtcbiAgICBQYXR0ZXJuW1wiUEFUQ0hcIl0gPSBcInBhdGNoXCI7XG4gICAgUGF0dGVybltcIlBVVFwiXSA9IFwicHV0XCI7XG4gICAgUGF0dGVybltcIkRFTEVURVwiXSA9IFwiZGVsZXRlXCI7XG59KShQYXR0ZXJuID0gZXhwb3J0cy5QYXR0ZXJuIHx8IChleHBvcnRzLlBhdHRlcm4gPSB7fSkpO1xuLyoqXG4gKiBUaGUgR2F0ZXdheSBwcm94aWVzIGh0dHAgcmVxdWVzdHMgdG8gVHdpcnAgQ29tcGxpYW50XG4gKiBoYW5kbGVyc1xuICovXG5jbGFzcyBHYXRld2F5IHtcbiAgICBjb25zdHJ1Y3Rvcihyb3V0ZXMpIHtcbiAgICAgICAgdGhpcy5yb3V0ZXMgPSByb3V0ZXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1pZGRsZXdhcmUgdGhhdCByZXdyaXRlIHRoZSBjdXJyZW50IHJlcXVlc3RcbiAgICAgKiB0byBhIFR3aXJwIGNvbXBsaWFudCByZXF1ZXN0XG4gICAgICovXG4gICAgdHdpcnBSZXdyaXRlKHByZWZpeCA9IFwiL3R3aXJwXCIpIHtcbiAgICAgICAgcmV0dXJuIChyZXEsIHJlc3AsIG5leHQpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmV3cml0ZShyZXEsIHJlc3AsIHByZWZpeClcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiBuZXh0KCkpXG4gICAgICAgICAgICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBlcnJvcnNfMS5Ud2lycEVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlLmNvZGUgIT09IGVycm9yc18xLlR3aXJwRXJyb3JDb2RlLk5vdEZvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfMS53cml0ZUVycm9yKHJlc3AsIGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJld3JpdGUgYW4gaW5jb21pbmcgcmVxdWVzdCB0byBhIFR3aXJwIGNvbXBsaWFudCByZXF1ZXN0XG4gICAgICogQHBhcmFtIHJlcVxuICAgICAqIEBwYXJhbSByZXNwXG4gICAgICogQHBhcmFtIHByZWZpeFxuICAgICAqL1xuICAgIHJld3JpdGUocmVxLCByZXNwLCBwcmVmaXggPSBcIi90d2lycFwiKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCBbbWF0Y2gsIHJvdXRlXSA9IHRoaXMubWF0Y2hSb3V0ZShyZXEpO1xuICAgICAgICAgICAgY29uc3QgYm9keSA9IHlpZWxkIHRoaXMucHJlcGFyZVR3aXJwQm9keShyZXEsIG1hdGNoLCByb3V0ZSk7XG4gICAgICAgICAgICBjb25zdCB0d2lycFVybCA9IGAke3ByZWZpeH0vJHtyb3V0ZS5wYWNrYWdlTmFtZX0uJHtyb3V0ZS5zZXJ2aWNlTmFtZX0vJHtyb3V0ZS5tZXRob2ROYW1lfWA7XG4gICAgICAgICAgICByZXEudXJsID0gdHdpcnBVcmw7XG4gICAgICAgICAgICByZXEub3JpZ2luYWxVcmwgPSB0d2lycFVybDtcbiAgICAgICAgICAgIHJlcS5tZXRob2QgPSBcIlBPU1RcIjtcbiAgICAgICAgICAgIHJlcS5oZWFkZXJzW1wiY29udGVudC10eXBlXCJdID0gXCJhcHBsaWNhdGlvbi9qc29uXCI7XG4gICAgICAgICAgICByZXEucmF3Qm9keSA9IEJ1ZmZlci5mcm9tKEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcbiAgICAgICAgICAgIGlmIChyb3V0ZS5yZXNwb25zZUJvZHlLZXkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmRGbiA9IHJlc3AuZW5kLmJpbmQocmVzcCk7XG4gICAgICAgICAgICAgICAgcmVzcC5lbmQgPSBmdW5jdGlvbiAoY2h1bmspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3Auc3RhdHVzQ29kZSA9PT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRGbihgeyBcIiR7cm91dGUucmVzcG9uc2VCb2R5S2V5fVwiOiAke2NodW5rfSB9YCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRGbihjaHVuayk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgcmV2ZXJzZSBwcm94eSBoYW5kbGVyIHRvXG4gICAgICogcHJveHkgaHR0cCByZXF1ZXN0cyB0byBUd2lycCBDb21wbGlhbnQgaGFuZGxlcnNcbiAgICAgKiBAcGFyYW0gaHR0cENsaWVudE9wdGlvblxuICAgICAqL1xuICAgIHJldmVyc2VQcm94eShodHRwQ2xpZW50T3B0aW9uKSB7XG4gICAgICAgIGNvbnN0IGNsaWVudCA9IGh0dHBfY2xpZW50XzEuTm9kZUh0dHBSUEMoaHR0cENsaWVudE9wdGlvbik7XG4gICAgICAgIHJldHVybiAocmVxLCByZXMpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgW21hdGNoLCByb3V0ZV0gPSB0aGlzLm1hdGNoUm91dGUocmVxKTtcbiAgICAgICAgICAgICAgICBjb25zdCBib2R5ID0geWllbGQgdGhpcy5wcmVwYXJlVHdpcnBCb2R5KHJlcSwgbWF0Y2gsIHJvdXRlKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IHlpZWxkIGNsaWVudC5yZXF1ZXN0KGAke3JvdXRlLnBhY2thZ2VOYW1lfS4ke3JvdXRlLnNlcnZpY2VOYW1lfWAsIHJvdXRlLm1ldGhvZE5hbWUsIFwiYXBwbGljYXRpb24vanNvblwiLCBib2R5KTtcbiAgICAgICAgICAgICAgICByZXMuc3RhdHVzQ29kZSA9IDIwMDtcbiAgICAgICAgICAgICAgICByZXMuc2V0SGVhZGVyKFwiY29udGVudC10eXBlXCIsIFwiYXBwbGljYXRpb24vanNvblwiKTtcbiAgICAgICAgICAgICAgICBsZXQganNvblJlc3BvbnNlO1xuICAgICAgICAgICAgICAgIGlmIChyb3V0ZS5yZXNwb25zZUJvZHlLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAganNvblJlc3BvbnNlID0gSlNPTi5zdHJpbmdpZnkoeyBbcm91dGUucmVzcG9uc2VCb2R5S2V5XTogcmVzcG9uc2UgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBqc29uUmVzcG9uc2UgPSBKU09OLnN0cmluZ2lmeShyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlcy5lbmQoanNvblJlc3BvbnNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgc2VydmVyXzEud3JpdGVFcnJvcihyZXMsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUHJlcGFyZXMgdHdpcnAgYm9keSByZXF1ZXN0cyB1c2luZyBodHRwLmdvb2dsZS5hbm5vdGlvbnNcbiAgICAgKiBjb21wbGlhbnQgc3BlY1xuICAgICAqXG4gICAgICogQHBhcmFtIHJlcVxuICAgICAqIEBwYXJhbSBtYXRjaFxuICAgICAqIEBwYXJhbSByb3V0ZVxuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbiAgICBwcmVwYXJlVHdpcnBCb2R5KHJlcSwgbWF0Y2gsIHJvdXRlKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCBfYSA9IG1hdGNoLnBhcmFtcywgeyBxdWVyeV9zdHJpbmcgfSA9IF9hLCBwYXJhbXMgPSBfX3Jlc3QoX2EsIFtcInF1ZXJ5X3N0cmluZ1wiXSk7XG4gICAgICAgICAgICBsZXQgcmVxdWVzdEJvZHkgPSBPYmplY3QuYXNzaWduKHt9LCBwYXJhbXMpO1xuICAgICAgICAgICAgaWYgKHF1ZXJ5X3N0cmluZyAmJiByb3V0ZS5ib2R5S2V5ICE9PSBcIipcIikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gdGhpcy5wYXJzZVF1ZXJ5U3RyaW5nKHF1ZXJ5X3N0cmluZyk7XG4gICAgICAgICAgICAgICAgcmVxdWVzdEJvZHkgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHF1ZXJ5UGFyYW1zKSwgcmVxdWVzdEJvZHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGJvZHkgPSB7fTtcbiAgICAgICAgICAgIGlmIChyb3V0ZS5ib2R5S2V5KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IHlpZWxkIHJlcXVlc3RfMS5nZXRSZXF1ZXN0RGF0YShyZXEpO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGpzb25Cb2R5ID0gSlNPTi5wYXJzZShkYXRhLnRvU3RyaW5nKCkgfHwgXCJ7fVwiKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJvdXRlLmJvZHlLZXkgPT09IFwiKlwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5ID0ganNvbkJvZHk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5W3JvdXRlLmJvZHlLZXldID0ganNvbkJvZHk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbXNnID0gXCJ0aGUganNvbiByZXF1ZXN0IGNvdWxkIG5vdCBiZSBkZWNvZGVkXCI7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBlcnJvcnNfMS5Ud2lycEVycm9yKGVycm9yc18xLlR3aXJwRXJyb3JDb2RlLk1hbGZvcm1lZCwgbXNnKS53aXRoQ2F1c2UoZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYm9keSksIHJlcXVlc3RCb2R5KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1hdGNoZXMgYSByb3V0ZVxuICAgICAqIEBwYXJhbSByZXFcbiAgICAgKi9cbiAgICBtYXRjaFJvdXRlKHJlcSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IGh0dHBNZXRob2QgPSAoX2EgPSByZXEubWV0aG9kKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKCFodHRwTWV0aG9kKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuQmFkUm91dGVFcnJvcihgbWV0aG9kIG5vdCBhbGxvd2VkYCwgcmVxLm1ldGhvZCB8fCBcIlwiLCByZXEudXJsIHx8IFwiXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJvdXRlcyA9IHRoaXMucm91dGVzW2h0dHBNZXRob2RdO1xuICAgICAgICBmb3IgKGNvbnN0IHJvdXRlIG9mIHJvdXRlcykge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSByb3V0ZS5tYXRjaGVyKHJlcS51cmwgfHwgXCIvXCIpO1xuICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFttYXRjaCwgcm91dGVdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBlcnJvcnNfMS5Ob3RGb3VuZEVycm9yKGB1cmwgJHtyZXEudXJsfSBub3QgZm91bmRgKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUGFyc2UgcXVlcnkgc3RyaW5nXG4gICAgICogQHBhcmFtIHF1ZXJ5U3RyaW5nXG4gICAgICovXG4gICAgcGFyc2VRdWVyeVN0cmluZyhxdWVyeVN0cmluZykge1xuICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHF1ZXJ5c3RyaW5nXzEucGFyc2UocXVlcnlTdHJpbmcucmVwbGFjZShcIj9cIiwgXCJcIikpO1xuICAgICAgICByZXR1cm4gZG90T2JqZWN0Lm9iamVjdChxdWVyeVBhcmFtcyk7XG4gICAgfVxufVxuZXhwb3J0cy5HYXRld2F5ID0gR2F0ZXdheTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfSk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fZXhwb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19leHBvcnRTdGFyKSB8fCBmdW5jdGlvbihtLCBleHBvcnRzKSB7XG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChleHBvcnRzLCBwKSkgX19jcmVhdGVCaW5kaW5nKGV4cG9ydHMsIG0sIHApO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVHdpcnBDb250ZW50VHlwZSA9IHZvaWQgMDtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9jb250ZXh0XCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9zZXJ2ZXJcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2ludGVyY2VwdG9yc1wiKSwgZXhwb3J0cyk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vaG9va3NcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2Vycm9yc1wiKSwgZXhwb3J0cyk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vZ2F0ZXdheVwiKSwgZXhwb3J0cyk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vaHR0cC5jbGllbnRcIiksIGV4cG9ydHMpO1xudmFyIHJlcXVlc3RfMSA9IHJlcXVpcmUoXCIuL3JlcXVlc3RcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJUd2lycENvbnRlbnRUeXBlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZXF1ZXN0XzEuVHdpcnBDb250ZW50VHlwZTsgfSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlQXJ0aWZhY3RTZXJ2aWNlU2VydmVyID0gZXhwb3J0cy5BcnRpZmFjdFNlcnZpY2VNZXRob2RMaXN0ID0gZXhwb3J0cy5BcnRpZmFjdFNlcnZpY2VNZXRob2QgPSBleHBvcnRzLkFydGlmYWN0U2VydmljZUNsaWVudFByb3RvYnVmID0gZXhwb3J0cy5BcnRpZmFjdFNlcnZpY2VDbGllbnRKU09OID0gdm9pZCAwO1xuY29uc3QgdHdpcnBfdHNfMSA9IHJlcXVpcmUoXCJ0d2lycC10c1wiKTtcbmNvbnN0IGFydGlmYWN0XzEgPSByZXF1aXJlKFwiLi9hcnRpZmFjdFwiKTtcbmNsYXNzIEFydGlmYWN0U2VydmljZUNsaWVudEpTT04ge1xuICAgIGNvbnN0cnVjdG9yKHJwYykge1xuICAgICAgICB0aGlzLnJwYyA9IHJwYztcbiAgICAgICAgdGhpcy5DcmVhdGVBcnRpZmFjdC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLkZpbmFsaXplQXJ0aWZhY3QuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5MaXN0QXJ0aWZhY3RzLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuR2V0U2lnbmVkQXJ0aWZhY3RVUkwuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5EZWxldGVBcnRpZmFjdC5iaW5kKHRoaXMpO1xuICAgIH1cbiAgICBDcmVhdGVBcnRpZmFjdChyZXF1ZXN0KSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhcnRpZmFjdF8xLkNyZWF0ZUFydGlmYWN0UmVxdWVzdC50b0pzb24ocmVxdWVzdCwge1xuICAgICAgICAgICAgdXNlUHJvdG9GaWVsZE5hbWU6IHRydWUsXG4gICAgICAgICAgICBlbWl0RGVmYXVsdFZhbHVlczogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBwcm9taXNlID0gdGhpcy5ycGMucmVxdWVzdChcImdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkFydGlmYWN0U2VydmljZVwiLCBcIkNyZWF0ZUFydGlmYWN0XCIsIFwiYXBwbGljYXRpb24vanNvblwiLCBkYXRhKTtcbiAgICAgICAgcmV0dXJuIHByb21pc2UudGhlbigoZGF0YSkgPT4gYXJ0aWZhY3RfMS5DcmVhdGVBcnRpZmFjdFJlc3BvbnNlLmZyb21Kc29uKGRhdGEsIHtcbiAgICAgICAgICAgIGlnbm9yZVVua25vd25GaWVsZHM6IHRydWUsXG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgRmluYWxpemVBcnRpZmFjdChyZXF1ZXN0KSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhcnRpZmFjdF8xLkZpbmFsaXplQXJ0aWZhY3RSZXF1ZXN0LnRvSnNvbihyZXF1ZXN0LCB7XG4gICAgICAgICAgICB1c2VQcm90b0ZpZWxkTmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGVtaXREZWZhdWx0VmFsdWVzOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLnJwYy5yZXF1ZXN0KFwiZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuQXJ0aWZhY3RTZXJ2aWNlXCIsIFwiRmluYWxpemVBcnRpZmFjdFwiLCBcImFwcGxpY2F0aW9uL2pzb25cIiwgZGF0YSk7XG4gICAgICAgIHJldHVybiBwcm9taXNlLnRoZW4oKGRhdGEpID0+IGFydGlmYWN0XzEuRmluYWxpemVBcnRpZmFjdFJlc3BvbnNlLmZyb21Kc29uKGRhdGEsIHtcbiAgICAgICAgICAgIGlnbm9yZVVua25vd25GaWVsZHM6IHRydWUsXG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgTGlzdEFydGlmYWN0cyhyZXF1ZXN0KSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhcnRpZmFjdF8xLkxpc3RBcnRpZmFjdHNSZXF1ZXN0LnRvSnNvbihyZXF1ZXN0LCB7XG4gICAgICAgICAgICB1c2VQcm90b0ZpZWxkTmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGVtaXREZWZhdWx0VmFsdWVzOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLnJwYy5yZXF1ZXN0KFwiZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuQXJ0aWZhY3RTZXJ2aWNlXCIsIFwiTGlzdEFydGlmYWN0c1wiLCBcImFwcGxpY2F0aW9uL2pzb25cIiwgZGF0YSk7XG4gICAgICAgIHJldHVybiBwcm9taXNlLnRoZW4oKGRhdGEpID0+IGFydGlmYWN0XzEuTGlzdEFydGlmYWN0c1Jlc3BvbnNlLmZyb21Kc29uKGRhdGEsIHsgaWdub3JlVW5rbm93bkZpZWxkczogdHJ1ZSB9KSk7XG4gICAgfVxuICAgIEdldFNpZ25lZEFydGlmYWN0VVJMKHJlcXVlc3QpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGFydGlmYWN0XzEuR2V0U2lnbmVkQXJ0aWZhY3RVUkxSZXF1ZXN0LnRvSnNvbihyZXF1ZXN0LCB7XG4gICAgICAgICAgICB1c2VQcm90b0ZpZWxkTmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGVtaXREZWZhdWx0VmFsdWVzOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLnJwYy5yZXF1ZXN0KFwiZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuQXJ0aWZhY3RTZXJ2aWNlXCIsIFwiR2V0U2lnbmVkQXJ0aWZhY3RVUkxcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIsIGRhdGEpO1xuICAgICAgICByZXR1cm4gcHJvbWlzZS50aGVuKChkYXRhKSA9PiBhcnRpZmFjdF8xLkdldFNpZ25lZEFydGlmYWN0VVJMUmVzcG9uc2UuZnJvbUpzb24oZGF0YSwge1xuICAgICAgICAgICAgaWdub3JlVW5rbm93bkZpZWxkczogdHJ1ZSxcbiAgICAgICAgfSkpO1xuICAgIH1cbiAgICBEZWxldGVBcnRpZmFjdChyZXF1ZXN0KSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhcnRpZmFjdF8xLkRlbGV0ZUFydGlmYWN0UmVxdWVzdC50b0pzb24ocmVxdWVzdCwge1xuICAgICAgICAgICAgdXNlUHJvdG9GaWVsZE5hbWU6IHRydWUsXG4gICAgICAgICAgICBlbWl0RGVmYXVsdFZhbHVlczogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBwcm9taXNlID0gdGhpcy5ycGMucmVxdWVzdChcImdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkFydGlmYWN0U2VydmljZVwiLCBcIkRlbGV0ZUFydGlmYWN0XCIsIFwiYXBwbGljYXRpb24vanNvblwiLCBkYXRhKTtcbiAgICAgICAgcmV0dXJuIHByb21pc2UudGhlbigoZGF0YSkgPT4gYXJ0aWZhY3RfMS5EZWxldGVBcnRpZmFjdFJlc3BvbnNlLmZyb21Kc29uKGRhdGEsIHtcbiAgICAgICAgICAgIGlnbm9yZVVua25vd25GaWVsZHM6IHRydWUsXG4gICAgICAgIH0pKTtcbiAgICB9XG59XG5leHBvcnRzLkFydGlmYWN0U2VydmljZUNsaWVudEpTT04gPSBBcnRpZmFjdFNlcnZpY2VDbGllbnRKU09OO1xuY2xhc3MgQXJ0aWZhY3RTZXJ2aWNlQ2xpZW50UHJvdG9idWYge1xuICAgIGNvbnN0cnVjdG9yKHJwYykge1xuICAgICAgICB0aGlzLnJwYyA9IHJwYztcbiAgICAgICAgdGhpcy5DcmVhdGVBcnRpZmFjdC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLkZpbmFsaXplQXJ0aWZhY3QuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5MaXN0QXJ0aWZhY3RzLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuR2V0U2lnbmVkQXJ0aWZhY3RVUkwuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5EZWxldGVBcnRpZmFjdC5iaW5kKHRoaXMpO1xuICAgIH1cbiAgICBDcmVhdGVBcnRpZmFjdChyZXF1ZXN0KSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhcnRpZmFjdF8xLkNyZWF0ZUFydGlmYWN0UmVxdWVzdC50b0JpbmFyeShyZXF1ZXN0KTtcbiAgICAgICAgY29uc3QgcHJvbWlzZSA9IHRoaXMucnBjLnJlcXVlc3QoXCJnaXRodWIuYWN0aW9ucy5yZXN1bHRzLmFwaS52MS5BcnRpZmFjdFNlcnZpY2VcIiwgXCJDcmVhdGVBcnRpZmFjdFwiLCBcImFwcGxpY2F0aW9uL3Byb3RvYnVmXCIsIGRhdGEpO1xuICAgICAgICByZXR1cm4gcHJvbWlzZS50aGVuKChkYXRhKSA9PiBhcnRpZmFjdF8xLkNyZWF0ZUFydGlmYWN0UmVzcG9uc2UuZnJvbUJpbmFyeShkYXRhKSk7XG4gICAgfVxuICAgIEZpbmFsaXplQXJ0aWZhY3QocmVxdWVzdCkge1xuICAgICAgICBjb25zdCBkYXRhID0gYXJ0aWZhY3RfMS5GaW5hbGl6ZUFydGlmYWN0UmVxdWVzdC50b0JpbmFyeShyZXF1ZXN0KTtcbiAgICAgICAgY29uc3QgcHJvbWlzZSA9IHRoaXMucnBjLnJlcXVlc3QoXCJnaXRodWIuYWN0aW9ucy5yZXN1bHRzLmFwaS52MS5BcnRpZmFjdFNlcnZpY2VcIiwgXCJGaW5hbGl6ZUFydGlmYWN0XCIsIFwiYXBwbGljYXRpb24vcHJvdG9idWZcIiwgZGF0YSk7XG4gICAgICAgIHJldHVybiBwcm9taXNlLnRoZW4oKGRhdGEpID0+IGFydGlmYWN0XzEuRmluYWxpemVBcnRpZmFjdFJlc3BvbnNlLmZyb21CaW5hcnkoZGF0YSkpO1xuICAgIH1cbiAgICBMaXN0QXJ0aWZhY3RzKHJlcXVlc3QpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGFydGlmYWN0XzEuTGlzdEFydGlmYWN0c1JlcXVlc3QudG9CaW5hcnkocmVxdWVzdCk7XG4gICAgICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLnJwYy5yZXF1ZXN0KFwiZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuQXJ0aWZhY3RTZXJ2aWNlXCIsIFwiTGlzdEFydGlmYWN0c1wiLCBcImFwcGxpY2F0aW9uL3Byb3RvYnVmXCIsIGRhdGEpO1xuICAgICAgICByZXR1cm4gcHJvbWlzZS50aGVuKChkYXRhKSA9PiBhcnRpZmFjdF8xLkxpc3RBcnRpZmFjdHNSZXNwb25zZS5mcm9tQmluYXJ5KGRhdGEpKTtcbiAgICB9XG4gICAgR2V0U2lnbmVkQXJ0aWZhY3RVUkwocmVxdWVzdCkge1xuICAgICAgICBjb25zdCBkYXRhID0gYXJ0aWZhY3RfMS5HZXRTaWduZWRBcnRpZmFjdFVSTFJlcXVlc3QudG9CaW5hcnkocmVxdWVzdCk7XG4gICAgICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLnJwYy5yZXF1ZXN0KFwiZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuQXJ0aWZhY3RTZXJ2aWNlXCIsIFwiR2V0U2lnbmVkQXJ0aWZhY3RVUkxcIiwgXCJhcHBsaWNhdGlvbi9wcm90b2J1ZlwiLCBkYXRhKTtcbiAgICAgICAgcmV0dXJuIHByb21pc2UudGhlbigoZGF0YSkgPT4gYXJ0aWZhY3RfMS5HZXRTaWduZWRBcnRpZmFjdFVSTFJlc3BvbnNlLmZyb21CaW5hcnkoZGF0YSkpO1xuICAgIH1cbiAgICBEZWxldGVBcnRpZmFjdChyZXF1ZXN0KSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhcnRpZmFjdF8xLkRlbGV0ZUFydGlmYWN0UmVxdWVzdC50b0JpbmFyeShyZXF1ZXN0KTtcbiAgICAgICAgY29uc3QgcHJvbWlzZSA9IHRoaXMucnBjLnJlcXVlc3QoXCJnaXRodWIuYWN0aW9ucy5yZXN1bHRzLmFwaS52MS5BcnRpZmFjdFNlcnZpY2VcIiwgXCJEZWxldGVBcnRpZmFjdFwiLCBcImFwcGxpY2F0aW9uL3Byb3RvYnVmXCIsIGRhdGEpO1xuICAgICAgICByZXR1cm4gcHJvbWlzZS50aGVuKChkYXRhKSA9PiBhcnRpZmFjdF8xLkRlbGV0ZUFydGlmYWN0UmVzcG9uc2UuZnJvbUJpbmFyeShkYXRhKSk7XG4gICAgfVxufVxuZXhwb3J0cy5BcnRpZmFjdFNlcnZpY2VDbGllbnRQcm90b2J1ZiA9IEFydGlmYWN0U2VydmljZUNsaWVudFByb3RvYnVmO1xudmFyIEFydGlmYWN0U2VydmljZU1ldGhvZDtcbihmdW5jdGlvbiAoQXJ0aWZhY3RTZXJ2aWNlTWV0aG9kKSB7XG4gICAgQXJ0aWZhY3RTZXJ2aWNlTWV0aG9kW1wiQ3JlYXRlQXJ0aWZhY3RcIl0gPSBcIkNyZWF0ZUFydGlmYWN0XCI7XG4gICAgQXJ0aWZhY3RTZXJ2aWNlTWV0aG9kW1wiRmluYWxpemVBcnRpZmFjdFwiXSA9IFwiRmluYWxpemVBcnRpZmFjdFwiO1xuICAgIEFydGlmYWN0U2VydmljZU1ldGhvZFtcIkxpc3RBcnRpZmFjdHNcIl0gPSBcIkxpc3RBcnRpZmFjdHNcIjtcbiAgICBBcnRpZmFjdFNlcnZpY2VNZXRob2RbXCJHZXRTaWduZWRBcnRpZmFjdFVSTFwiXSA9IFwiR2V0U2lnbmVkQXJ0aWZhY3RVUkxcIjtcbiAgICBBcnRpZmFjdFNlcnZpY2VNZXRob2RbXCJEZWxldGVBcnRpZmFjdFwiXSA9IFwiRGVsZXRlQXJ0aWZhY3RcIjtcbn0pKEFydGlmYWN0U2VydmljZU1ldGhvZCB8fCAoZXhwb3J0cy5BcnRpZmFjdFNlcnZpY2VNZXRob2QgPSBBcnRpZmFjdFNlcnZpY2VNZXRob2QgPSB7fSkpO1xuZXhwb3J0cy5BcnRpZmFjdFNlcnZpY2VNZXRob2RMaXN0ID0gW1xuICAgIEFydGlmYWN0U2VydmljZU1ldGhvZC5DcmVhdGVBcnRpZmFjdCxcbiAgICBBcnRpZmFjdFNlcnZpY2VNZXRob2QuRmluYWxpemVBcnRpZmFjdCxcbiAgICBBcnRpZmFjdFNlcnZpY2VNZXRob2QuTGlzdEFydGlmYWN0cyxcbiAgICBBcnRpZmFjdFNlcnZpY2VNZXRob2QuR2V0U2lnbmVkQXJ0aWZhY3RVUkwsXG4gICAgQXJ0aWZhY3RTZXJ2aWNlTWV0aG9kLkRlbGV0ZUFydGlmYWN0LFxuXTtcbmZ1bmN0aW9uIGNyZWF0ZUFydGlmYWN0U2VydmljZVNlcnZlcihzZXJ2aWNlKSB7XG4gICAgcmV0dXJuIG5ldyB0d2lycF90c18xLlR3aXJwU2VydmVyKHtcbiAgICAgICAgc2VydmljZSxcbiAgICAgICAgcGFja2FnZU5hbWU6IFwiZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjFcIixcbiAgICAgICAgc2VydmljZU5hbWU6IFwiQXJ0aWZhY3RTZXJ2aWNlXCIsXG4gICAgICAgIG1ldGhvZExpc3Q6IGV4cG9ydHMuQXJ0aWZhY3RTZXJ2aWNlTWV0aG9kTGlzdCxcbiAgICAgICAgbWF0Y2hSb3V0ZTogbWF0Y2hBcnRpZmFjdFNlcnZpY2VSb3V0ZSxcbiAgICB9KTtcbn1cbmV4cG9ydHMuY3JlYXRlQXJ0aWZhY3RTZXJ2aWNlU2VydmVyID0gY3JlYXRlQXJ0aWZhY3RTZXJ2aWNlU2VydmVyO1xuZnVuY3Rpb24gbWF0Y2hBcnRpZmFjdFNlcnZpY2VSb3V0ZShtZXRob2QsIGV2ZW50cykge1xuICAgIHN3aXRjaCAobWV0aG9kKSB7XG4gICAgICAgIGNhc2UgXCJDcmVhdGVBcnRpZmFjdFwiOlxuICAgICAgICAgICAgcmV0dXJuIChjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycykgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgIGN0eCA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgY3R4KSwgeyBtZXRob2ROYW1lOiBcIkNyZWF0ZUFydGlmYWN0XCIgfSk7XG4gICAgICAgICAgICAgICAgeWllbGQgZXZlbnRzLm9uTWF0Y2goY3R4KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlQ3JlYXRlQXJ0aWZhY3RSZXF1ZXN0KGN0eCwgc2VydmljZSwgZGF0YSwgaW50ZXJjZXB0b3JzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICBjYXNlIFwiRmluYWxpemVBcnRpZmFjdFwiOlxuICAgICAgICAgICAgcmV0dXJuIChjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycykgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgIGN0eCA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgY3R4KSwgeyBtZXRob2ROYW1lOiBcIkZpbmFsaXplQXJ0aWZhY3RcIiB9KTtcbiAgICAgICAgICAgICAgICB5aWVsZCBldmVudHMub25NYXRjaChjdHgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGVBcnRpZmFjdFNlcnZpY2VGaW5hbGl6ZUFydGlmYWN0UmVxdWVzdChjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgY2FzZSBcIkxpc3RBcnRpZmFjdHNcIjpcbiAgICAgICAgICAgIHJldHVybiAoY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICBjdHggPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGN0eCksIHsgbWV0aG9kTmFtZTogXCJMaXN0QXJ0aWZhY3RzXCIgfSk7XG4gICAgICAgICAgICAgICAgeWllbGQgZXZlbnRzLm9uTWF0Y2goY3R4KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlTGlzdEFydGlmYWN0c1JlcXVlc3QoY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIGNhc2UgXCJHZXRTaWduZWRBcnRpZmFjdFVSTFwiOlxuICAgICAgICAgICAgcmV0dXJuIChjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycykgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgIGN0eCA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgY3R4KSwgeyBtZXRob2ROYW1lOiBcIkdldFNpZ25lZEFydGlmYWN0VVJMXCIgfSk7XG4gICAgICAgICAgICAgICAgeWllbGQgZXZlbnRzLm9uTWF0Y2goY3R4KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlR2V0U2lnbmVkQXJ0aWZhY3RVUkxSZXF1ZXN0KGN0eCwgc2VydmljZSwgZGF0YSwgaW50ZXJjZXB0b3JzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICBjYXNlIFwiRGVsZXRlQXJ0aWZhY3RcIjpcbiAgICAgICAgICAgIHJldHVybiAoY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICBjdHggPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGN0eCksIHsgbWV0aG9kTmFtZTogXCJEZWxldGVBcnRpZmFjdFwiIH0pO1xuICAgICAgICAgICAgICAgIHlpZWxkIGV2ZW50cy5vbk1hdGNoKGN0eCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUFydGlmYWN0U2VydmljZURlbGV0ZUFydGlmYWN0UmVxdWVzdChjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGV2ZW50cy5vbk5vdEZvdW5kKCk7XG4gICAgICAgICAgICBjb25zdCBtc2cgPSBgbm8gaGFuZGxlciBmb3VuZGA7XG4gICAgICAgICAgICB0aHJvdyBuZXcgdHdpcnBfdHNfMS5Ud2lycEVycm9yKHR3aXJwX3RzXzEuVHdpcnBFcnJvckNvZGUuQmFkUm91dGUsIG1zZyk7XG4gICAgfVxufVxuZnVuY3Rpb24gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlQ3JlYXRlQXJ0aWZhY3RSZXF1ZXN0KGN0eCwgc2VydmljZSwgZGF0YSwgaW50ZXJjZXB0b3JzKSB7XG4gICAgc3dpdGNoIChjdHguY29udGVudFR5cGUpIHtcbiAgICAgICAgY2FzZSB0d2lycF90c18xLlR3aXJwQ29udGVudFR5cGUuSlNPTjpcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVBcnRpZmFjdFNlcnZpY2VDcmVhdGVBcnRpZmFjdEpTT04oY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpO1xuICAgICAgICBjYXNlIHR3aXJwX3RzXzEuVHdpcnBDb250ZW50VHlwZS5Qcm90b2J1ZjpcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVBcnRpZmFjdFNlcnZpY2VDcmVhdGVBcnRpZmFjdFByb3RvYnVmKGN0eCwgc2VydmljZSwgZGF0YSwgaW50ZXJjZXB0b3JzKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNvbnN0IG1zZyA9IFwidW5leHBlY3RlZCBDb250ZW50LVR5cGVcIjtcbiAgICAgICAgICAgIHRocm93IG5ldyB0d2lycF90c18xLlR3aXJwRXJyb3IodHdpcnBfdHNfMS5Ud2lycEVycm9yQ29kZS5CYWRSb3V0ZSwgbXNnKTtcbiAgICB9XG59XG5mdW5jdGlvbiBoYW5kbGVBcnRpZmFjdFNlcnZpY2VGaW5hbGl6ZUFydGlmYWN0UmVxdWVzdChjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycykge1xuICAgIHN3aXRjaCAoY3R4LmNvbnRlbnRUeXBlKSB7XG4gICAgICAgIGNhc2UgdHdpcnBfdHNfMS5Ud2lycENvbnRlbnRUeXBlLkpTT046XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlRmluYWxpemVBcnRpZmFjdEpTT04oY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpO1xuICAgICAgICBjYXNlIHR3aXJwX3RzXzEuVHdpcnBDb250ZW50VHlwZS5Qcm90b2J1ZjpcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVBcnRpZmFjdFNlcnZpY2VGaW5hbGl6ZUFydGlmYWN0UHJvdG9idWYoY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgY29uc3QgbXNnID0gXCJ1bmV4cGVjdGVkIENvbnRlbnQtVHlwZVwiO1xuICAgICAgICAgICAgdGhyb3cgbmV3IHR3aXJwX3RzXzEuVHdpcnBFcnJvcih0d2lycF90c18xLlR3aXJwRXJyb3JDb2RlLkJhZFJvdXRlLCBtc2cpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGhhbmRsZUFydGlmYWN0U2VydmljZUxpc3RBcnRpZmFjdHNSZXF1ZXN0KGN0eCwgc2VydmljZSwgZGF0YSwgaW50ZXJjZXB0b3JzKSB7XG4gICAgc3dpdGNoIChjdHguY29udGVudFR5cGUpIHtcbiAgICAgICAgY2FzZSB0d2lycF90c18xLlR3aXJwQ29udGVudFR5cGUuSlNPTjpcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVBcnRpZmFjdFNlcnZpY2VMaXN0QXJ0aWZhY3RzSlNPTihjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycyk7XG4gICAgICAgIGNhc2UgdHdpcnBfdHNfMS5Ud2lycENvbnRlbnRUeXBlLlByb3RvYnVmOlxuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUFydGlmYWN0U2VydmljZUxpc3RBcnRpZmFjdHNQcm90b2J1ZihjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycyk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zdCBtc2cgPSBcInVuZXhwZWN0ZWQgQ29udGVudC1UeXBlXCI7XG4gICAgICAgICAgICB0aHJvdyBuZXcgdHdpcnBfdHNfMS5Ud2lycEVycm9yKHR3aXJwX3RzXzEuVHdpcnBFcnJvckNvZGUuQmFkUm91dGUsIG1zZyk7XG4gICAgfVxufVxuZnVuY3Rpb24gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlR2V0U2lnbmVkQXJ0aWZhY3RVUkxSZXF1ZXN0KGN0eCwgc2VydmljZSwgZGF0YSwgaW50ZXJjZXB0b3JzKSB7XG4gICAgc3dpdGNoIChjdHguY29udGVudFR5cGUpIHtcbiAgICAgICAgY2FzZSB0d2lycF90c18xLlR3aXJwQ29udGVudFR5cGUuSlNPTjpcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVBcnRpZmFjdFNlcnZpY2VHZXRTaWduZWRBcnRpZmFjdFVSTEpTT04oY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpO1xuICAgICAgICBjYXNlIHR3aXJwX3RzXzEuVHdpcnBDb250ZW50VHlwZS5Qcm90b2J1ZjpcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVBcnRpZmFjdFNlcnZpY2VHZXRTaWduZWRBcnRpZmFjdFVSTFByb3RvYnVmKGN0eCwgc2VydmljZSwgZGF0YSwgaW50ZXJjZXB0b3JzKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNvbnN0IG1zZyA9IFwidW5leHBlY3RlZCBDb250ZW50LVR5cGVcIjtcbiAgICAgICAgICAgIHRocm93IG5ldyB0d2lycF90c18xLlR3aXJwRXJyb3IodHdpcnBfdHNfMS5Ud2lycEVycm9yQ29kZS5CYWRSb3V0ZSwgbXNnKTtcbiAgICB9XG59XG5mdW5jdGlvbiBoYW5kbGVBcnRpZmFjdFNlcnZpY2VEZWxldGVBcnRpZmFjdFJlcXVlc3QoY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpIHtcbiAgICBzd2l0Y2ggKGN0eC5jb250ZW50VHlwZSkge1xuICAgICAgICBjYXNlIHR3aXJwX3RzXzEuVHdpcnBDb250ZW50VHlwZS5KU09OOlxuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUFydGlmYWN0U2VydmljZURlbGV0ZUFydGlmYWN0SlNPTihjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycyk7XG4gICAgICAgIGNhc2UgdHdpcnBfdHNfMS5Ud2lycENvbnRlbnRUeXBlLlByb3RvYnVmOlxuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUFydGlmYWN0U2VydmljZURlbGV0ZUFydGlmYWN0UHJvdG9idWYoY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgY29uc3QgbXNnID0gXCJ1bmV4cGVjdGVkIENvbnRlbnQtVHlwZVwiO1xuICAgICAgICAgICAgdGhyb3cgbmV3IHR3aXJwX3RzXzEuVHdpcnBFcnJvcih0d2lycF90c18xLlR3aXJwRXJyb3JDb2RlLkJhZFJvdXRlLCBtc2cpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGhhbmRsZUFydGlmYWN0U2VydmljZUNyZWF0ZUFydGlmYWN0SlNPTihjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGxldCByZXF1ZXN0O1xuICAgICAgICBsZXQgcmVzcG9uc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5wYXJzZShkYXRhLnRvU3RyaW5nKCkgfHwgXCJ7fVwiKTtcbiAgICAgICAgICAgIHJlcXVlc3QgPSBhcnRpZmFjdF8xLkNyZWF0ZUFydGlmYWN0UmVxdWVzdC5mcm9tSnNvbihib2R5LCB7XG4gICAgICAgICAgICAgICAgaWdub3JlVW5rbm93bkZpZWxkczogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbXNnID0gXCJ0aGUganNvbiByZXF1ZXN0IGNvdWxkIG5vdCBiZSBkZWNvZGVkXCI7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IHR3aXJwX3RzXzEuVHdpcnBFcnJvcih0d2lycF90c18xLlR3aXJwRXJyb3JDb2RlLk1hbGZvcm1lZCwgbXNnKS53aXRoQ2F1c2UoZSwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGludGVyY2VwdG9ycyAmJiBpbnRlcmNlcHRvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgaW50ZXJjZXB0b3IgPSAoMCwgdHdpcnBfdHNfMS5jaGFpbkludGVyY2VwdG9ycykoLi4uaW50ZXJjZXB0b3JzKTtcbiAgICAgICAgICAgIHJlc3BvbnNlID0geWllbGQgaW50ZXJjZXB0b3IoY3R4LCByZXF1ZXN0LCAoY3R4LCBpbnB1dFJlcSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBzZXJ2aWNlLkNyZWF0ZUFydGlmYWN0KGN0eCwgaW5wdXRSZXEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXNwb25zZSA9IHlpZWxkIHNlcnZpY2UuQ3JlYXRlQXJ0aWZhY3QoY3R4LCByZXF1ZXN0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoYXJ0aWZhY3RfMS5DcmVhdGVBcnRpZmFjdFJlc3BvbnNlLnRvSnNvbihyZXNwb25zZSwge1xuICAgICAgICAgICAgdXNlUHJvdG9GaWVsZE5hbWU6IHRydWUsXG4gICAgICAgICAgICBlbWl0RGVmYXVsdFZhbHVlczogZmFsc2UsXG4gICAgICAgIH0pKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGhhbmRsZUFydGlmYWN0U2VydmljZUZpbmFsaXplQXJ0aWZhY3RKU09OKGN0eCwgc2VydmljZSwgZGF0YSwgaW50ZXJjZXB0b3JzKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgbGV0IHJlcXVlc3Q7XG4gICAgICAgIGxldCByZXNwb25zZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBKU09OLnBhcnNlKGRhdGEudG9TdHJpbmcoKSB8fCBcInt9XCIpO1xuICAgICAgICAgICAgcmVxdWVzdCA9IGFydGlmYWN0XzEuRmluYWxpemVBcnRpZmFjdFJlcXVlc3QuZnJvbUpzb24oYm9keSwge1xuICAgICAgICAgICAgICAgIGlnbm9yZVVua25vd25GaWVsZHM6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1zZyA9IFwidGhlIGpzb24gcmVxdWVzdCBjb3VsZCBub3QgYmUgZGVjb2RlZFwiO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyB0d2lycF90c18xLlR3aXJwRXJyb3IodHdpcnBfdHNfMS5Ud2lycEVycm9yQ29kZS5NYWxmb3JtZWQsIG1zZykud2l0aENhdXNlKGUsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpbnRlcmNlcHRvcnMgJiYgaW50ZXJjZXB0b3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGludGVyY2VwdG9yID0gKDAsIHR3aXJwX3RzXzEuY2hhaW5JbnRlcmNlcHRvcnMpKC4uLmludGVyY2VwdG9ycyk7XG4gICAgICAgICAgICByZXNwb25zZSA9IHlpZWxkIGludGVyY2VwdG9yKGN0eCwgcmVxdWVzdCwgKGN0eCwgaW5wdXRSZXEpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VydmljZS5GaW5hbGl6ZUFydGlmYWN0KGN0eCwgaW5wdXRSZXEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXNwb25zZSA9IHlpZWxkIHNlcnZpY2UuRmluYWxpemVBcnRpZmFjdChjdHgsIHJlcXVlc3QpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShhcnRpZmFjdF8xLkZpbmFsaXplQXJ0aWZhY3RSZXNwb25zZS50b0pzb24ocmVzcG9uc2UsIHtcbiAgICAgICAgICAgIHVzZVByb3RvRmllbGROYW1lOiB0cnVlLFxuICAgICAgICAgICAgZW1pdERlZmF1bHRWYWx1ZXM6IGZhbHNlLFxuICAgICAgICB9KSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBoYW5kbGVBcnRpZmFjdFNlcnZpY2VMaXN0QXJ0aWZhY3RzSlNPTihjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGxldCByZXF1ZXN0O1xuICAgICAgICBsZXQgcmVzcG9uc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5wYXJzZShkYXRhLnRvU3RyaW5nKCkgfHwgXCJ7fVwiKTtcbiAgICAgICAgICAgIHJlcXVlc3QgPSBhcnRpZmFjdF8xLkxpc3RBcnRpZmFjdHNSZXF1ZXN0LmZyb21Kc29uKGJvZHksIHtcbiAgICAgICAgICAgICAgICBpZ25vcmVVbmtub3duRmllbGRzOiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtc2cgPSBcInRoZSBqc29uIHJlcXVlc3QgY291bGQgbm90IGJlIGRlY29kZWRcIjtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgdHdpcnBfdHNfMS5Ud2lycEVycm9yKHR3aXJwX3RzXzEuVHdpcnBFcnJvckNvZGUuTWFsZm9ybWVkLCBtc2cpLndpdGhDYXVzZShlLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaW50ZXJjZXB0b3JzICYmIGludGVyY2VwdG9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBpbnRlcmNlcHRvciA9ICgwLCB0d2lycF90c18xLmNoYWluSW50ZXJjZXB0b3JzKSguLi5pbnRlcmNlcHRvcnMpO1xuICAgICAgICAgICAgcmVzcG9uc2UgPSB5aWVsZCBpbnRlcmNlcHRvcihjdHgsIHJlcXVlc3QsIChjdHgsIGlucHV0UmVxKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlcnZpY2UuTGlzdEFydGlmYWN0cyhjdHgsIGlucHV0UmVxKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzcG9uc2UgPSB5aWVsZCBzZXJ2aWNlLkxpc3RBcnRpZmFjdHMoY3R4LCByZXF1ZXN0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoYXJ0aWZhY3RfMS5MaXN0QXJ0aWZhY3RzUmVzcG9uc2UudG9Kc29uKHJlc3BvbnNlLCB7XG4gICAgICAgICAgICB1c2VQcm90b0ZpZWxkTmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGVtaXREZWZhdWx0VmFsdWVzOiBmYWxzZSxcbiAgICAgICAgfSkpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlR2V0U2lnbmVkQXJ0aWZhY3RVUkxKU09OKGN0eCwgc2VydmljZSwgZGF0YSwgaW50ZXJjZXB0b3JzKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgbGV0IHJlcXVlc3Q7XG4gICAgICAgIGxldCByZXNwb25zZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBKU09OLnBhcnNlKGRhdGEudG9TdHJpbmcoKSB8fCBcInt9XCIpO1xuICAgICAgICAgICAgcmVxdWVzdCA9IGFydGlmYWN0XzEuR2V0U2lnbmVkQXJ0aWZhY3RVUkxSZXF1ZXN0LmZyb21Kc29uKGJvZHksIHtcbiAgICAgICAgICAgICAgICBpZ25vcmVVbmtub3duRmllbGRzOiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtc2cgPSBcInRoZSBqc29uIHJlcXVlc3QgY291bGQgbm90IGJlIGRlY29kZWRcIjtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgdHdpcnBfdHNfMS5Ud2lycEVycm9yKHR3aXJwX3RzXzEuVHdpcnBFcnJvckNvZGUuTWFsZm9ybWVkLCBtc2cpLndpdGhDYXVzZShlLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaW50ZXJjZXB0b3JzICYmIGludGVyY2VwdG9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBpbnRlcmNlcHRvciA9ICgwLCB0d2lycF90c18xLmNoYWluSW50ZXJjZXB0b3JzKSguLi5pbnRlcmNlcHRvcnMpO1xuICAgICAgICAgICAgcmVzcG9uc2UgPSB5aWVsZCBpbnRlcmNlcHRvcihjdHgsIHJlcXVlc3QsIChjdHgsIGlucHV0UmVxKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlcnZpY2UuR2V0U2lnbmVkQXJ0aWZhY3RVUkwoY3R4LCBpbnB1dFJlcSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3BvbnNlID0geWllbGQgc2VydmljZS5HZXRTaWduZWRBcnRpZmFjdFVSTChjdHgsIHJlcXVlc3QpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShhcnRpZmFjdF8xLkdldFNpZ25lZEFydGlmYWN0VVJMUmVzcG9uc2UudG9Kc29uKHJlc3BvbnNlLCB7XG4gICAgICAgICAgICB1c2VQcm90b0ZpZWxkTmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGVtaXREZWZhdWx0VmFsdWVzOiBmYWxzZSxcbiAgICAgICAgfSkpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlRGVsZXRlQXJ0aWZhY3RKU09OKGN0eCwgc2VydmljZSwgZGF0YSwgaW50ZXJjZXB0b3JzKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgbGV0IHJlcXVlc3Q7XG4gICAgICAgIGxldCByZXNwb25zZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBKU09OLnBhcnNlKGRhdGEudG9TdHJpbmcoKSB8fCBcInt9XCIpO1xuICAgICAgICAgICAgcmVxdWVzdCA9IGFydGlmYWN0XzEuRGVsZXRlQXJ0aWZhY3RSZXF1ZXN0LmZyb21Kc29uKGJvZHksIHtcbiAgICAgICAgICAgICAgICBpZ25vcmVVbmtub3duRmllbGRzOiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtc2cgPSBcInRoZSBqc29uIHJlcXVlc3QgY291bGQgbm90IGJlIGRlY29kZWRcIjtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgdHdpcnBfdHNfMS5Ud2lycEVycm9yKHR3aXJwX3RzXzEuVHdpcnBFcnJvckNvZGUuTWFsZm9ybWVkLCBtc2cpLndpdGhDYXVzZShlLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaW50ZXJjZXB0b3JzICYmIGludGVyY2VwdG9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBpbnRlcmNlcHRvciA9ICgwLCB0d2lycF90c18xLmNoYWluSW50ZXJjZXB0b3JzKSguLi5pbnRlcmNlcHRvcnMpO1xuICAgICAgICAgICAgcmVzcG9uc2UgPSB5aWVsZCBpbnRlcmNlcHRvcihjdHgsIHJlcXVlc3QsIChjdHgsIGlucHV0UmVxKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlcnZpY2UuRGVsZXRlQXJ0aWZhY3QoY3R4LCBpbnB1dFJlcSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3BvbnNlID0geWllbGQgc2VydmljZS5EZWxldGVBcnRpZmFjdChjdHgsIHJlcXVlc3QpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShhcnRpZmFjdF8xLkRlbGV0ZUFydGlmYWN0UmVzcG9uc2UudG9Kc29uKHJlc3BvbnNlLCB7XG4gICAgICAgICAgICB1c2VQcm90b0ZpZWxkTmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGVtaXREZWZhdWx0VmFsdWVzOiBmYWxzZSxcbiAgICAgICAgfSkpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlQ3JlYXRlQXJ0aWZhY3RQcm90b2J1ZihjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGxldCByZXF1ZXN0O1xuICAgICAgICBsZXQgcmVzcG9uc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXF1ZXN0ID0gYXJ0aWZhY3RfMS5DcmVhdGVBcnRpZmFjdFJlcXVlc3QuZnJvbUJpbmFyeShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1zZyA9IFwidGhlIHByb3RvYnVmIHJlcXVlc3QgY291bGQgbm90IGJlIGRlY29kZWRcIjtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgdHdpcnBfdHNfMS5Ud2lycEVycm9yKHR3aXJwX3RzXzEuVHdpcnBFcnJvckNvZGUuTWFsZm9ybWVkLCBtc2cpLndpdGhDYXVzZShlLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaW50ZXJjZXB0b3JzICYmIGludGVyY2VwdG9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBpbnRlcmNlcHRvciA9ICgwLCB0d2lycF90c18xLmNoYWluSW50ZXJjZXB0b3JzKSguLi5pbnRlcmNlcHRvcnMpO1xuICAgICAgICAgICAgcmVzcG9uc2UgPSB5aWVsZCBpbnRlcmNlcHRvcihjdHgsIHJlcXVlc3QsIChjdHgsIGlucHV0UmVxKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlcnZpY2UuQ3JlYXRlQXJ0aWZhY3QoY3R4LCBpbnB1dFJlcSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3BvbnNlID0geWllbGQgc2VydmljZS5DcmVhdGVBcnRpZmFjdChjdHgsIHJlcXVlc3QpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShhcnRpZmFjdF8xLkNyZWF0ZUFydGlmYWN0UmVzcG9uc2UudG9CaW5hcnkocmVzcG9uc2UpKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGhhbmRsZUFydGlmYWN0U2VydmljZUZpbmFsaXplQXJ0aWZhY3RQcm90b2J1ZihjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGxldCByZXF1ZXN0O1xuICAgICAgICBsZXQgcmVzcG9uc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXF1ZXN0ID0gYXJ0aWZhY3RfMS5GaW5hbGl6ZUFydGlmYWN0UmVxdWVzdC5mcm9tQmluYXJ5KGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbXNnID0gXCJ0aGUgcHJvdG9idWYgcmVxdWVzdCBjb3VsZCBub3QgYmUgZGVjb2RlZFwiO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyB0d2lycF90c18xLlR3aXJwRXJyb3IodHdpcnBfdHNfMS5Ud2lycEVycm9yQ29kZS5NYWxmb3JtZWQsIG1zZykud2l0aENhdXNlKGUsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpbnRlcmNlcHRvcnMgJiYgaW50ZXJjZXB0b3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGludGVyY2VwdG9yID0gKDAsIHR3aXJwX3RzXzEuY2hhaW5JbnRlcmNlcHRvcnMpKC4uLmludGVyY2VwdG9ycyk7XG4gICAgICAgICAgICByZXNwb25zZSA9IHlpZWxkIGludGVyY2VwdG9yKGN0eCwgcmVxdWVzdCwgKGN0eCwgaW5wdXRSZXEpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VydmljZS5GaW5hbGl6ZUFydGlmYWN0KGN0eCwgaW5wdXRSZXEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXNwb25zZSA9IHlpZWxkIHNlcnZpY2UuRmluYWxpemVBcnRpZmFjdChjdHgsIHJlcXVlc3QpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShhcnRpZmFjdF8xLkZpbmFsaXplQXJ0aWZhY3RSZXNwb25zZS50b0JpbmFyeShyZXNwb25zZSkpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlTGlzdEFydGlmYWN0c1Byb3RvYnVmKGN0eCwgc2VydmljZSwgZGF0YSwgaW50ZXJjZXB0b3JzKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgbGV0IHJlcXVlc3Q7XG4gICAgICAgIGxldCByZXNwb25zZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlcXVlc3QgPSBhcnRpZmFjdF8xLkxpc3RBcnRpZmFjdHNSZXF1ZXN0LmZyb21CaW5hcnkoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtc2cgPSBcInRoZSBwcm90b2J1ZiByZXF1ZXN0IGNvdWxkIG5vdCBiZSBkZWNvZGVkXCI7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IHR3aXJwX3RzXzEuVHdpcnBFcnJvcih0d2lycF90c18xLlR3aXJwRXJyb3JDb2RlLk1hbGZvcm1lZCwgbXNnKS53aXRoQ2F1c2UoZSwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGludGVyY2VwdG9ycyAmJiBpbnRlcmNlcHRvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgaW50ZXJjZXB0b3IgPSAoMCwgdHdpcnBfdHNfMS5jaGFpbkludGVyY2VwdG9ycykoLi4uaW50ZXJjZXB0b3JzKTtcbiAgICAgICAgICAgIHJlc3BvbnNlID0geWllbGQgaW50ZXJjZXB0b3IoY3R4LCByZXF1ZXN0LCAoY3R4LCBpbnB1dFJlcSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBzZXJ2aWNlLkxpc3RBcnRpZmFjdHMoY3R4LCBpbnB1dFJlcSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3BvbnNlID0geWllbGQgc2VydmljZS5MaXN0QXJ0aWZhY3RzKGN0eCwgcmVxdWVzdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGFydGlmYWN0XzEuTGlzdEFydGlmYWN0c1Jlc3BvbnNlLnRvQmluYXJ5KHJlc3BvbnNlKSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBoYW5kbGVBcnRpZmFjdFNlcnZpY2VHZXRTaWduZWRBcnRpZmFjdFVSTFByb3RvYnVmKGN0eCwgc2VydmljZSwgZGF0YSwgaW50ZXJjZXB0b3JzKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgbGV0IHJlcXVlc3Q7XG4gICAgICAgIGxldCByZXNwb25zZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlcXVlc3QgPSBhcnRpZmFjdF8xLkdldFNpZ25lZEFydGlmYWN0VVJMUmVxdWVzdC5mcm9tQmluYXJ5KGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbXNnID0gXCJ0aGUgcHJvdG9idWYgcmVxdWVzdCBjb3VsZCBub3QgYmUgZGVjb2RlZFwiO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyB0d2lycF90c18xLlR3aXJwRXJyb3IodHdpcnBfdHNfMS5Ud2lycEVycm9yQ29kZS5NYWxmb3JtZWQsIG1zZykud2l0aENhdXNlKGUsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpbnRlcmNlcHRvcnMgJiYgaW50ZXJjZXB0b3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGludGVyY2VwdG9yID0gKDAsIHR3aXJwX3RzXzEuY2hhaW5JbnRlcmNlcHRvcnMpKC4uLmludGVyY2VwdG9ycyk7XG4gICAgICAgICAgICByZXNwb25zZSA9IHlpZWxkIGludGVyY2VwdG9yKGN0eCwgcmVxdWVzdCwgKGN0eCwgaW5wdXRSZXEpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VydmljZS5HZXRTaWduZWRBcnRpZmFjdFVSTChjdHgsIGlucHV0UmVxKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzcG9uc2UgPSB5aWVsZCBzZXJ2aWNlLkdldFNpZ25lZEFydGlmYWN0VVJMKGN0eCwgcmVxdWVzdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGFydGlmYWN0XzEuR2V0U2lnbmVkQXJ0aWZhY3RVUkxSZXNwb25zZS50b0JpbmFyeShyZXNwb25zZSkpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlRGVsZXRlQXJ0aWZhY3RQcm90b2J1ZihjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGxldCByZXF1ZXN0O1xuICAgICAgICBsZXQgcmVzcG9uc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXF1ZXN0ID0gYXJ0aWZhY3RfMS5EZWxldGVBcnRpZmFjdFJlcXVlc3QuZnJvbUJpbmFyeShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1zZyA9IFwidGhlIHByb3RvYnVmIHJlcXVlc3QgY291bGQgbm90IGJlIGRlY29kZWRcIjtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgdHdpcnBfdHNfMS5Ud2lycEVycm9yKHR3aXJwX3RzXzEuVHdpcnBFcnJvckNvZGUuTWFsZm9ybWVkLCBtc2cpLndpdGhDYXVzZShlLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaW50ZXJjZXB0b3JzICYmIGludGVyY2VwdG9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBpbnRlcmNlcHRvciA9ICgwLCB0d2lycF90c18xLmNoYWluSW50ZXJjZXB0b3JzKSguLi5pbnRlcmNlcHRvcnMpO1xuICAgICAgICAgICAgcmVzcG9uc2UgPSB5aWVsZCBpbnRlcmNlcHRvcihjdHgsIHJlcXVlc3QsIChjdHgsIGlucHV0UmVxKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlcnZpY2UuRGVsZXRlQXJ0aWZhY3QoY3R4LCBpbnB1dFJlcSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3BvbnNlID0geWllbGQgc2VydmljZS5EZWxldGVBcnRpZmFjdChjdHgsIHJlcXVlc3QpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShhcnRpZmFjdF8xLkRlbGV0ZUFydGlmYWN0UmVzcG9uc2UudG9CaW5hcnkocmVzcG9uc2UpKTtcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFydGlmYWN0LnR3aXJwLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fZXhwb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19leHBvcnRTdGFyKSB8fCBmdW5jdGlvbihtLCBleHBvcnRzKSB7XG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChleHBvcnRzLCBwKSkgX19jcmVhdGVCaW5kaW5nKGV4cG9ydHMsIG0sIHApO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9nb29nbGUvcHJvdG9idWYvdGltZXN0YW1wXCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9nb29nbGUvcHJvdG9idWYvd3JhcHBlcnNcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3Jlc3VsdHMvYXBpL3YxL2FydGlmYWN0XCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9yZXN1bHRzL2FwaS92MS9hcnRpZmFjdC50d2lycFwiKSwgZXhwb3J0cyk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldEV4cGlyYXRpb24gPSB2b2lkIDA7XG5jb25zdCBnZW5lcmF0ZWRfMSA9IHJlcXVpcmUoXCIuLi8uLi9nZW5lcmF0ZWRcIik7XG5jb25zdCBjb3JlID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJAYWN0aW9ucy9jb3JlXCIpKTtcbmZ1bmN0aW9uIGdldEV4cGlyYXRpb24ocmV0ZW50aW9uRGF5cykge1xuICAgIGlmICghcmV0ZW50aW9uRGF5cykge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBtYXhSZXRlbnRpb25EYXlzID0gZ2V0UmV0ZW50aW9uRGF5cygpO1xuICAgIGlmIChtYXhSZXRlbnRpb25EYXlzICYmIG1heFJldGVudGlvbkRheXMgPCByZXRlbnRpb25EYXlzKSB7XG4gICAgICAgIGNvcmUud2FybmluZyhgUmV0ZW50aW9uIGRheXMgY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiB0aGUgbWF4aW11bSBhbGxvd2VkIHJldGVudGlvbiBzZXQgd2l0aGluIHRoZSByZXBvc2l0b3J5LiBVc2luZyAke21heFJldGVudGlvbkRheXN9IGluc3RlYWQuYCk7XG4gICAgICAgIHJldGVudGlvbkRheXMgPSBtYXhSZXRlbnRpb25EYXlzO1xuICAgIH1cbiAgICBjb25zdCBleHBpcmF0aW9uRGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgZXhwaXJhdGlvbkRhdGUuc2V0RGF0ZShleHBpcmF0aW9uRGF0ZS5nZXREYXRlKCkgKyByZXRlbnRpb25EYXlzKTtcbiAgICByZXR1cm4gZ2VuZXJhdGVkXzEuVGltZXN0YW1wLmZyb21EYXRlKGV4cGlyYXRpb25EYXRlKTtcbn1cbmV4cG9ydHMuZ2V0RXhwaXJhdGlvbiA9IGdldEV4cGlyYXRpb247XG5mdW5jdGlvbiBnZXRSZXRlbnRpb25EYXlzKCkge1xuICAgIGNvbnN0IHJldGVudGlvbkRheXMgPSBwcm9jZXNzLmVudlsnR0lUSFVCX1JFVEVOVElPTl9EQVlTJ107XG4gICAgaWYgKCFyZXRlbnRpb25EYXlzKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IGRheXMgPSBwYXJzZUludChyZXRlbnRpb25EYXlzKTtcbiAgICBpZiAoaXNOYU4oZGF5cykpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIGRheXM7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZXRlbnRpb24uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudmFsaWRhdGVGaWxlUGF0aCA9IGV4cG9ydHMudmFsaWRhdGVBcnRpZmFjdE5hbWUgPSB2b2lkIDA7XG5jb25zdCBjb3JlXzEgPSByZXF1aXJlKFwiQGFjdGlvbnMvY29yZVwiKTtcbi8qKlxuICogSW52YWxpZCBjaGFyYWN0ZXJzIHRoYXQgY2Fubm90IGJlIGluIHRoZSBhcnRpZmFjdCBuYW1lIG9yIGFuIHVwbG9hZGVkIGZpbGUuIFdpbGwgYmUgcmVqZWN0ZWRcbiAqIGZyb20gdGhlIHNlcnZlciBpZiBhdHRlbXB0ZWQgdG8gYmUgc2VudCBvdmVyLiBUaGVzZSBjaGFyYWN0ZXJzIGFyZSBub3QgYWxsb3dlZCBkdWUgdG8gbGltaXRhdGlvbnMgd2l0aCBjZXJ0YWluXG4gKiBmaWxlIHN5c3RlbXMgc3VjaCBhcyBOVEZTLiBUbyBtYWludGFpbiBwbGF0Zm9ybS1hZ25vc3RpYyBiZWhhdmlvciwgYWxsIGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90IHN1cHBvcnRlZCBieSBhblxuICogaW5kaXZpZHVhbCBmaWxlc3lzdGVtL3BsYXRmb3JtIHdpbGwgbm90IGJlIHN1cHBvcnRlZCBvbiBhbGwgZmlsZVN5c3RlbXMvcGxhdGZvcm1zXG4gKlxuICogRmlsZVBhdGhzIGNhbiBpbmNsdWRlIGNoYXJhY3RlcnMgc3VjaCBhcyBcXCBhbmQgLyB3aGljaCBhcmUgbm90IHBlcm1pdHRlZCBpbiB0aGUgYXJ0aWZhY3QgbmFtZSBhbG9uZVxuICovXG5jb25zdCBpbnZhbGlkQXJ0aWZhY3RGaWxlUGF0aENoYXJhY3RlcnMgPSBuZXcgTWFwKFtcbiAgICBbJ1wiJywgJyBEb3VibGUgcXVvdGUgXCInXSxcbiAgICBbJzonLCAnIENvbG9uIDonXSxcbiAgICBbJzwnLCAnIExlc3MgdGhhbiA8J10sXG4gICAgWyc+JywgJyBHcmVhdGVyIHRoYW4gPiddLFxuICAgIFsnfCcsICcgVmVydGljYWwgYmFyIHwnXSxcbiAgICBbJyonLCAnIEFzdGVyaXNrIConXSxcbiAgICBbJz8nLCAnIFF1ZXN0aW9uIG1hcmsgPyddLFxuICAgIFsnXFxyJywgJyBDYXJyaWFnZSByZXR1cm4gXFxcXHInXSxcbiAgICBbJ1xcbicsICcgTGluZSBmZWVkIFxcXFxuJ11cbl0pO1xuY29uc3QgaW52YWxpZEFydGlmYWN0TmFtZUNoYXJhY3RlcnMgPSBuZXcgTWFwKFtcbiAgICAuLi5pbnZhbGlkQXJ0aWZhY3RGaWxlUGF0aENoYXJhY3RlcnMsXG4gICAgWydcXFxcJywgJyBCYWNrc2xhc2ggXFxcXCddLFxuICAgIFsnLycsICcgRm9yd2FyZCBzbGFzaCAvJ11cbl0pO1xuLyoqXG4gKiBWYWxpZGF0ZXMgdGhlIG5hbWUgb2YgdGhlIGFydGlmYWN0IHRvIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gaWxsZWdhbCBjaGFyYWN0ZXJzXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQXJ0aWZhY3ROYW1lKG5hbWUpIHtcbiAgICBpZiAoIW5hbWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQcm92aWRlZCBhcnRpZmFjdCBuYW1lIGlucHV0IGR1cmluZyB2YWxpZGF0aW9uIGlzIGVtcHR5YCk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgW2ludmFsaWRDaGFyYWN0ZXJLZXksIGVycm9yTWVzc2FnZUZvckNoYXJhY3Rlcl0gb2YgaW52YWxpZEFydGlmYWN0TmFtZUNoYXJhY3RlcnMpIHtcbiAgICAgICAgaWYgKG5hbWUuaW5jbHVkZXMoaW52YWxpZENoYXJhY3RlcktleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGFydGlmYWN0IG5hbWUgaXMgbm90IHZhbGlkOiAke25hbWV9LiBDb250YWlucyB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcjogJHtlcnJvck1lc3NhZ2VGb3JDaGFyYWN0ZXJ9XG4gICAgICAgICAgXG5JbnZhbGlkIGNoYXJhY3RlcnMgaW5jbHVkZTogJHtBcnJheS5mcm9tKGludmFsaWRBcnRpZmFjdE5hbWVDaGFyYWN0ZXJzLnZhbHVlcygpKS50b1N0cmluZygpfVxuICAgICAgICAgIFxuVGhlc2UgY2hhcmFjdGVycyBhcmUgbm90IGFsbG93ZWQgaW4gdGhlIGFydGlmYWN0IG5hbWUgZHVlIHRvIGxpbWl0YXRpb25zIHdpdGggY2VydGFpbiBmaWxlIHN5c3RlbXMgc3VjaCBhcyBOVEZTLiBUbyBtYWludGFpbiBmaWxlIHN5c3RlbSBhZ25vc3RpYyBiZWhhdmlvciwgdGhlc2UgY2hhcmFjdGVycyBhcmUgaW50ZW50aW9uYWxseSBub3QgYWxsb3dlZCB0byBwcmV2ZW50IHBvdGVudGlhbCBwcm9ibGVtcyB3aXRoIGRvd25sb2FkcyBvbiBkaWZmZXJlbnQgZmlsZSBzeXN0ZW1zLmApO1xuICAgICAgICB9XG4gICAgfVxuICAgICgwLCBjb3JlXzEuaW5mbykoYEFydGlmYWN0IG5hbWUgaXMgdmFsaWQhYCk7XG59XG5leHBvcnRzLnZhbGlkYXRlQXJ0aWZhY3ROYW1lID0gdmFsaWRhdGVBcnRpZmFjdE5hbWU7XG4vKipcbiAqIFZhbGlkYXRlcyBmaWxlIHBhdGhzIHRvIGNoZWNrIGZvciBhbnkgaWxsZWdhbCBjaGFyYWN0ZXJzIHRoYXQgY2FuIGNhdXNlIHByb2JsZW1zIG9uIGRpZmZlcmVudCBmaWxlIHN5c3RlbXNcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVGaWxlUGF0aChwYXRoKSB7XG4gICAgaWYgKCFwYXRoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgUHJvdmlkZWQgZmlsZSBwYXRoIGlucHV0IGR1cmluZyB2YWxpZGF0aW9uIGlzIGVtcHR5YCk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgW2ludmFsaWRDaGFyYWN0ZXJLZXksIGVycm9yTWVzc2FnZUZvckNoYXJhY3Rlcl0gb2YgaW52YWxpZEFydGlmYWN0RmlsZVBhdGhDaGFyYWN0ZXJzKSB7XG4gICAgICAgIGlmIChwYXRoLmluY2x1ZGVzKGludmFsaWRDaGFyYWN0ZXJLZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBwYXRoIGZvciBvbmUgb2YgdGhlIGZpbGVzIGluIGFydGlmYWN0IGlzIG5vdCB2YWxpZDogJHtwYXRofS4gQ29udGFpbnMgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXI6ICR7ZXJyb3JNZXNzYWdlRm9yQ2hhcmFjdGVyfVxuICAgICAgICAgIFxuSW52YWxpZCBjaGFyYWN0ZXJzIGluY2x1ZGU6ICR7QXJyYXkuZnJvbShpbnZhbGlkQXJ0aWZhY3RGaWxlUGF0aENoYXJhY3RlcnMudmFsdWVzKCkpLnRvU3RyaW5nKCl9XG4gICAgICAgICAgXG5UaGUgZm9sbG93aW5nIGNoYXJhY3RlcnMgYXJlIG5vdCBhbGxvd2VkIGluIGZpbGVzIHRoYXQgYXJlIHVwbG9hZGVkIGR1ZSB0byBsaW1pdGF0aW9ucyB3aXRoIGNlcnRhaW4gZmlsZSBzeXN0ZW1zIHN1Y2ggYXMgTlRGUy4gVG8gbWFpbnRhaW4gZmlsZSBzeXN0ZW0gYWdub3N0aWMgYmVoYXZpb3IsIHRoZXNlIGNoYXJhY3RlcnMgYXJlIGludGVudGlvbmFsbHkgbm90IGFsbG93ZWQgdG8gcHJldmVudCBwb3RlbnRpYWwgcHJvYmxlbXMgd2l0aCBkb3dubG9hZHMgb24gZGlmZmVyZW50IGZpbGUgc3lzdGVtcy5cbiAgICAgICAgICBgKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMudmFsaWRhdGVGaWxlUGF0aCA9IHZhbGlkYXRlRmlsZVBhdGg7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wYXRoLWFuZC1hcnRpZmFjdC1uYW1lLXZhbGlkYXRpb24uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0VXNlckFnZW50U3RyaW5nID0gdm9pZCAwO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby12YXItcmVxdWlyZXMsIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbmNvbnN0IHBhY2thZ2VKc29uID0gcmVxdWlyZSgnLi4vLi4vLi4vcGFja2FnZS5qc29uJyk7XG4vKipcbiAqIEVuc3VyZSB0aGF0IHRoaXMgVXNlciBBZ2VudCBTdHJpbmcgaXMgdXNlZCBpbiBhbGwgSFRUUCBjYWxscyBzbyB0aGF0IHdlIGNhbiBtb25pdG9yIHRlbGVtZXRyeSBiZXR3ZWVuIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiB0aGlzIHBhY2thZ2VcbiAqL1xuZnVuY3Rpb24gZ2V0VXNlckFnZW50U3RyaW5nKCkge1xuICAgIHJldHVybiBgQGFjdGlvbnMvYXJ0aWZhY3QtJHtwYWNrYWdlSnNvbi52ZXJzaW9ufWA7XG59XG5leHBvcnRzLmdldFVzZXJBZ2VudFN0cmluZyA9IGdldFVzZXJBZ2VudFN0cmluZztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzZXItYWdlbnQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVXNhZ2VFcnJvciA9IGV4cG9ydHMuTmV0d29ya0Vycm9yID0gZXhwb3J0cy5HSEVTTm90U3VwcG9ydGVkRXJyb3IgPSBleHBvcnRzLkFydGlmYWN0Tm90Rm91bmRFcnJvciA9IGV4cG9ydHMuSW52YWxpZFJlc3BvbnNlRXJyb3IgPSBleHBvcnRzLkZpbGVzTm90Rm91bmRFcnJvciA9IHZvaWQgMDtcbmNsYXNzIEZpbGVzTm90Rm91bmRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihmaWxlcyA9IFtdKSB7XG4gICAgICAgIGxldCBtZXNzYWdlID0gJ05vIGZpbGVzIHdlcmUgZm91bmQgdG8gdXBsb2FkJztcbiAgICAgICAgaWYgKGZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIG1lc3NhZ2UgKz0gYDogJHtmaWxlcy5qb2luKCcsICcpfWA7XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XG4gICAgICAgIHRoaXMuZmlsZXMgPSBmaWxlcztcbiAgICAgICAgdGhpcy5uYW1lID0gJ0ZpbGVzTm90Rm91bmRFcnJvcic7XG4gICAgfVxufVxuZXhwb3J0cy5GaWxlc05vdEZvdW5kRXJyb3IgPSBGaWxlc05vdEZvdW5kRXJyb3I7XG5jbGFzcyBJbnZhbGlkUmVzcG9uc2VFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLm5hbWUgPSAnSW52YWxpZFJlc3BvbnNlRXJyb3InO1xuICAgIH1cbn1cbmV4cG9ydHMuSW52YWxpZFJlc3BvbnNlRXJyb3IgPSBJbnZhbGlkUmVzcG9uc2VFcnJvcjtcbmNsYXNzIEFydGlmYWN0Tm90Rm91bmRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlID0gJ0FydGlmYWN0IG5vdCBmb3VuZCcpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XG4gICAgICAgIHRoaXMubmFtZSA9ICdBcnRpZmFjdE5vdEZvdW5kRXJyb3InO1xuICAgIH1cbn1cbmV4cG9ydHMuQXJ0aWZhY3ROb3RGb3VuZEVycm9yID0gQXJ0aWZhY3ROb3RGb3VuZEVycm9yO1xuY2xhc3MgR0hFU05vdFN1cHBvcnRlZEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2UgPSAnQGFjdGlvbnMvYXJ0aWZhY3QgdjIuMC4wKywgdXBsb2FkLWFydGlmYWN0QHY0KyBhbmQgZG93bmxvYWQtYXJ0aWZhY3RAdjQrIGFyZSBub3QgY3VycmVudGx5IHN1cHBvcnRlZCBvbiBHSEVTLicpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XG4gICAgICAgIHRoaXMubmFtZSA9ICdHSEVTTm90U3VwcG9ydGVkRXJyb3InO1xuICAgIH1cbn1cbmV4cG9ydHMuR0hFU05vdFN1cHBvcnRlZEVycm9yID0gR0hFU05vdFN1cHBvcnRlZEVycm9yO1xuY2xhc3MgTmV0d29ya0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKGNvZGUpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGBVbmFibGUgdG8gbWFrZSByZXF1ZXN0OiAke2NvZGV9XFxuSWYgeW91IGFyZSB1c2luZyBzZWxmLWhvc3RlZCBydW5uZXJzLCBwbGVhc2UgbWFrZSBzdXJlIHlvdXIgcnVubmVyIGhhcyBhY2Nlc3MgdG8gYWxsIEdpdEh1YiBlbmRwb2ludHM6IGh0dHBzOi8vZG9jcy5naXRodWIuY29tL2VuL2FjdGlvbnMvaG9zdGluZy15b3VyLW93bi1ydW5uZXJzL21hbmFnaW5nLXNlbGYtaG9zdGVkLXJ1bm5lcnMvYWJvdXQtc2VsZi1ob3N0ZWQtcnVubmVycyNjb21tdW5pY2F0aW9uLWJldHdlZW4tc2VsZi1ob3N0ZWQtcnVubmVycy1hbmQtZ2l0aHViYDtcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XG4gICAgICAgIHRoaXMuY29kZSA9IGNvZGU7XG4gICAgICAgIHRoaXMubmFtZSA9ICdOZXR3b3JrRXJyb3InO1xuICAgIH1cbn1cbmV4cG9ydHMuTmV0d29ya0Vycm9yID0gTmV0d29ya0Vycm9yO1xuTmV0d29ya0Vycm9yLmlzTmV0d29ya0Vycm9yQ29kZSA9IChjb2RlKSA9PiB7XG4gICAgaWYgKCFjb2RlKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgJ0VDT05OUkVTRVQnLFxuICAgICAgICAnRU5PVEZPVU5EJyxcbiAgICAgICAgJ0VUSU1FRE9VVCcsXG4gICAgICAgICdFQ09OTlJFRlVTRUQnLFxuICAgICAgICAnRUhPU1RVTlJFQUNIJ1xuICAgIF0uaW5jbHVkZXMoY29kZSk7XG59O1xuY2xhc3MgVXNhZ2VFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGBBcnRpZmFjdCBzdG9yYWdlIHF1b3RhIGhhcyBiZWVuIGhpdC4gVW5hYmxlIHRvIHVwbG9hZCBhbnkgbmV3IGFydGlmYWN0cy4gVXNhZ2UgaXMgcmVjYWxjdWxhdGVkIGV2ZXJ5IDYtMTIgaG91cnMuXFxuTW9yZSBpbmZvIG9uIHN0b3JhZ2UgbGltaXRzOiBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9lbi9iaWxsaW5nL21hbmFnaW5nLWJpbGxpbmctZm9yLWdpdGh1Yi1hY3Rpb25zL2Fib3V0LWJpbGxpbmctZm9yLWdpdGh1Yi1hY3Rpb25zI2NhbGN1bGF0aW5nLW1pbnV0ZS1hbmQtc3RvcmFnZS1zcGVuZGluZ2A7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLm5hbWUgPSAnVXNhZ2VFcnJvcic7XG4gICAgfVxufVxuZXhwb3J0cy5Vc2FnZUVycm9yID0gVXNhZ2VFcnJvcjtcblVzYWdlRXJyb3IuaXNVc2FnZUVycm9yTWVzc2FnZSA9IChtc2cpID0+IHtcbiAgICBpZiAoIW1zZylcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBtc2cuaW5jbHVkZXMoJ2luc3VmZmljaWVudCB1c2FnZScpO1xufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVycm9ycy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmludGVybmFsQXJ0aWZhY3RUd2lycENsaWVudCA9IHZvaWQgMDtcbmNvbnN0IGh0dHBfY2xpZW50XzEgPSByZXF1aXJlKFwiQGFjdGlvbnMvaHR0cC1jbGllbnRcIik7XG5jb25zdCBhdXRoXzEgPSByZXF1aXJlKFwiQGFjdGlvbnMvaHR0cC1jbGllbnQvbGliL2F1dGhcIik7XG5jb25zdCBjb3JlXzEgPSByZXF1aXJlKFwiQGFjdGlvbnMvY29yZVwiKTtcbmNvbnN0IGdlbmVyYXRlZF8xID0gcmVxdWlyZShcIi4uLy4uL2dlbmVyYXRlZFwiKTtcbmNvbnN0IGNvbmZpZ18xID0gcmVxdWlyZShcIi4vY29uZmlnXCIpO1xuY29uc3QgdXNlcl9hZ2VudF8xID0gcmVxdWlyZShcIi4vdXNlci1hZ2VudFwiKTtcbmNvbnN0IGVycm9yc18xID0gcmVxdWlyZShcIi4vZXJyb3JzXCIpO1xuY2xhc3MgQXJ0aWZhY3RIdHRwQ2xpZW50IHtcbiAgICBjb25zdHJ1Y3Rvcih1c2VyQWdlbnQsIG1heEF0dGVtcHRzLCBiYXNlUmV0cnlJbnRlcnZhbE1pbGxpc2Vjb25kcywgcmV0cnlNdWx0aXBsaWVyKSB7XG4gICAgICAgIHRoaXMubWF4QXR0ZW1wdHMgPSA1O1xuICAgICAgICB0aGlzLmJhc2VSZXRyeUludGVydmFsTWlsbGlzZWNvbmRzID0gMzAwMDtcbiAgICAgICAgdGhpcy5yZXRyeU11bHRpcGxpZXIgPSAxLjU7XG4gICAgICAgIGNvbnN0IHRva2VuID0gKDAsIGNvbmZpZ18xLmdldFJ1bnRpbWVUb2tlbikoKTtcbiAgICAgICAgdGhpcy5iYXNlVXJsID0gKDAsIGNvbmZpZ18xLmdldFJlc3VsdHNTZXJ2aWNlVXJsKSgpO1xuICAgICAgICBpZiAobWF4QXR0ZW1wdHMpIHtcbiAgICAgICAgICAgIHRoaXMubWF4QXR0ZW1wdHMgPSBtYXhBdHRlbXB0cztcbiAgICAgICAgfVxuICAgICAgICBpZiAoYmFzZVJldHJ5SW50ZXJ2YWxNaWxsaXNlY29uZHMpIHtcbiAgICAgICAgICAgIHRoaXMuYmFzZVJldHJ5SW50ZXJ2YWxNaWxsaXNlY29uZHMgPSBiYXNlUmV0cnlJbnRlcnZhbE1pbGxpc2Vjb25kcztcbiAgICAgICAgfVxuICAgICAgICBpZiAocmV0cnlNdWx0aXBsaWVyKSB7XG4gICAgICAgICAgICB0aGlzLnJldHJ5TXVsdGlwbGllciA9IHJldHJ5TXVsdGlwbGllcjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmh0dHBDbGllbnQgPSBuZXcgaHR0cF9jbGllbnRfMS5IdHRwQ2xpZW50KHVzZXJBZ2VudCwgW1xuICAgICAgICAgICAgbmV3IGF1dGhfMS5CZWFyZXJDcmVkZW50aWFsSGFuZGxlcih0b2tlbilcbiAgICAgICAgXSk7XG4gICAgfVxuICAgIC8vIFRoaXMgZnVuY3Rpb24gc2F0aXNmaWVzIHRoZSBScGMgaW50ZXJmYWNlLiBJdCBpcyBjb21wYXRpYmxlIHdpdGggdGhlIEpTT05cbiAgICAvLyBKU09OIGdlbmVyYXRlZCBjbGllbnQuXG4gICAgcmVxdWVzdChzZXJ2aWNlLCBtZXRob2QsIGNvbnRlbnRUeXBlLCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKGAvdHdpcnAvJHtzZXJ2aWNlfS8ke21ldGhvZH1gLCB0aGlzLmJhc2VVcmwpLmhyZWY7XG4gICAgICAgICAgICAoMCwgY29yZV8xLmRlYnVnKShgW1JlcXVlc3RdICR7bWV0aG9kfSAke3VybH1gKTtcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6IGNvbnRlbnRUeXBlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGJvZHkgfSA9IHlpZWxkIHRoaXMucmV0cnlhYmxlUmVxdWVzdCgoKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7IHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdCh1cmwsIEpTT04uc3RyaW5naWZ5KGRhdGEpLCBoZWFkZXJzKTsgfSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiBib2R5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gJHttZXRob2R9OiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXRyeWFibGVSZXF1ZXN0KG9wZXJhdGlvbikge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgbGV0IGF0dGVtcHQgPSAwO1xuICAgICAgICAgICAgbGV0IGVycm9yTWVzc2FnZSA9ICcnO1xuICAgICAgICAgICAgbGV0IHJhd0JvZHkgPSAnJztcbiAgICAgICAgICAgIHdoaWxlIChhdHRlbXB0IDwgdGhpcy5tYXhBdHRlbXB0cykge1xuICAgICAgICAgICAgICAgIGxldCBpc1JldHJ5YWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0geWllbGQgb3BlcmF0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXR1c0NvZGUgPSByZXNwb25zZS5tZXNzYWdlLnN0YXR1c0NvZGU7XG4gICAgICAgICAgICAgICAgICAgIHJhd0JvZHkgPSB5aWVsZCByZXNwb25zZS5yZWFkQm9keSgpO1xuICAgICAgICAgICAgICAgICAgICAoMCwgY29yZV8xLmRlYnVnKShgW1Jlc3BvbnNlXSAtICR7cmVzcG9uc2UubWVzc2FnZS5zdGF0dXNDb2RlfWApO1xuICAgICAgICAgICAgICAgICAgICAoMCwgY29yZV8xLmRlYnVnKShgSGVhZGVyczogJHtKU09OLnN0cmluZ2lmeShyZXNwb25zZS5tZXNzYWdlLmhlYWRlcnMsIG51bGwsIDIpfWApO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5wYXJzZShyYXdCb2R5KTtcbiAgICAgICAgICAgICAgICAgICAgKDAsIGNvcmVfMS5kZWJ1ZykoYEJvZHk6ICR7SlNPTi5zdHJpbmdpZnkoYm9keSwgbnVsbCwgMil9YCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzU3VjY2Vzc1N0YXR1c0NvZGUoc3RhdHVzQ29kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHJlc3BvbnNlLCBib2R5IH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaXNSZXRyeWFibGUgPSB0aGlzLmlzUmV0cnlhYmxlSHR0cFN0YXR1c0NvZGUoc3RhdHVzQ29kZSk7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGBGYWlsZWQgcmVxdWVzdDogKCR7c3RhdHVzQ29kZX0pICR7cmVzcG9uc2UubWVzc2FnZS5zdGF0dXNNZXNzYWdlfWA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChib2R5Lm1zZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yc18xLlVzYWdlRXJyb3IuaXNVc2FnZUVycm9yTWVzc2FnZShib2R5Lm1zZykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuVXNhZ2VFcnJvcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gYCR7ZXJyb3JNZXNzYWdlfTogJHtib2R5Lm1zZ31gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgKDAsIGNvcmVfMS5kZWJ1ZykoYFJhdyBCb2R5OiAke3Jhd0JvZHl9YCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgZXJyb3JzXzEuVXNhZ2VFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yc18xLk5ldHdvcmtFcnJvci5pc05ldHdvcmtFcnJvckNvZGUoZXJyb3IgPT09IG51bGwgfHwgZXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGVycm9yLmNvZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuTmV0d29ya0Vycm9yKGVycm9yID09PSBudWxsIHx8IGVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlcnJvci5jb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpc1JldHJ5YWJsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGVycm9yLm1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghaXNSZXRyeWFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBSZWNlaXZlZCBub24tcmV0cnlhYmxlIGVycm9yOiAke2Vycm9yTWVzc2FnZX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGF0dGVtcHQgKyAxID09PSB0aGlzLm1heEF0dGVtcHRzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIG1ha2UgcmVxdWVzdCBhZnRlciAke3RoaXMubWF4QXR0ZW1wdHN9IGF0dGVtcHRzOiAke2Vycm9yTWVzc2FnZX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcmV0cnlUaW1lTWlsbGlzZWNvbmRzID0gdGhpcy5nZXRFeHBvbmVudGlhbFJldHJ5VGltZU1pbGxpc2Vjb25kcyhhdHRlbXB0KTtcbiAgICAgICAgICAgICAgICAoMCwgY29yZV8xLmluZm8pKGBBdHRlbXB0ICR7YXR0ZW1wdCArIDF9IG9mICR7dGhpcy5tYXhBdHRlbXB0c30gZmFpbGVkIHdpdGggZXJyb3I6ICR7ZXJyb3JNZXNzYWdlfS4gUmV0cnlpbmcgcmVxdWVzdCBpbiAke3JldHJ5VGltZU1pbGxpc2Vjb25kc30gbXMuLi5gKTtcbiAgICAgICAgICAgICAgICB5aWVsZCB0aGlzLnNsZWVwKHJldHJ5VGltZU1pbGxpc2Vjb25kcyk7XG4gICAgICAgICAgICAgICAgYXR0ZW1wdCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBSZXF1ZXN0IGZhaWxlZGApO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgaXNTdWNjZXNzU3RhdHVzQ29kZShzdGF0dXNDb2RlKSB7XG4gICAgICAgIGlmICghc3RhdHVzQ29kZSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHN0YXR1c0NvZGUgPj0gMjAwICYmIHN0YXR1c0NvZGUgPCAzMDA7XG4gICAgfVxuICAgIGlzUmV0cnlhYmxlSHR0cFN0YXR1c0NvZGUoc3RhdHVzQ29kZSkge1xuICAgICAgICBpZiAoIXN0YXR1c0NvZGUpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNvbnN0IHJldHJ5YWJsZVN0YXR1c0NvZGVzID0gW1xuICAgICAgICAgICAgaHR0cF9jbGllbnRfMS5IdHRwQ29kZXMuQmFkR2F0ZXdheSxcbiAgICAgICAgICAgIGh0dHBfY2xpZW50XzEuSHR0cENvZGVzLkdhdGV3YXlUaW1lb3V0LFxuICAgICAgICAgICAgaHR0cF9jbGllbnRfMS5IdHRwQ29kZXMuSW50ZXJuYWxTZXJ2ZXJFcnJvcixcbiAgICAgICAgICAgIGh0dHBfY2xpZW50XzEuSHR0cENvZGVzLlNlcnZpY2VVbmF2YWlsYWJsZSxcbiAgICAgICAgICAgIGh0dHBfY2xpZW50XzEuSHR0cENvZGVzLlRvb01hbnlSZXF1ZXN0c1xuICAgICAgICBdO1xuICAgICAgICByZXR1cm4gcmV0cnlhYmxlU3RhdHVzQ29kZXMuaW5jbHVkZXMoc3RhdHVzQ29kZSk7XG4gICAgfVxuICAgIHNsZWVwKG1pbGxpc2Vjb25kcykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtaWxsaXNlY29uZHMpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGdldEV4cG9uZW50aWFsUmV0cnlUaW1lTWlsbGlzZWNvbmRzKGF0dGVtcHQpIHtcbiAgICAgICAgaWYgKGF0dGVtcHQgPCAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2F0dGVtcHQgc2hvdWxkIGJlIGEgcG9zaXRpdmUgaW50ZWdlcicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhdHRlbXB0ID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5iYXNlUmV0cnlJbnRlcnZhbE1pbGxpc2Vjb25kcztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtaW5UaW1lID0gdGhpcy5iYXNlUmV0cnlJbnRlcnZhbE1pbGxpc2Vjb25kcyAqIE1hdGgucG93KHRoaXMucmV0cnlNdWx0aXBsaWVyLCBhdHRlbXB0KTtcbiAgICAgICAgY29uc3QgbWF4VGltZSA9IG1pblRpbWUgKiB0aGlzLnJldHJ5TXVsdGlwbGllcjtcbiAgICAgICAgLy8gcmV0dXJucyBhIHJhbmRvbSBudW1iZXIgYmV0d2VlbiBtaW5UaW1lIGFuZCBtYXhUaW1lIChleGNsdXNpdmUpXG4gICAgICAgIHJldHVybiBNYXRoLnRydW5jKE1hdGgucmFuZG9tKCkgKiAobWF4VGltZSAtIG1pblRpbWUpICsgbWluVGltZSk7XG4gICAgfVxufVxuZnVuY3Rpb24gaW50ZXJuYWxBcnRpZmFjdFR3aXJwQ2xpZW50KG9wdGlvbnMpIHtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgQXJ0aWZhY3RIdHRwQ2xpZW50KCgwLCB1c2VyX2FnZW50XzEuZ2V0VXNlckFnZW50U3RyaW5nKSgpLCBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMubWF4QXR0ZW1wdHMsIG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5yZXRyeUludGVydmFsTXMsIG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5yZXRyeU11bHRpcGxpZXIpO1xuICAgIHJldHVybiBuZXcgZ2VuZXJhdGVkXzEuQXJ0aWZhY3RTZXJ2aWNlQ2xpZW50SlNPTihjbGllbnQpO1xufVxuZXhwb3J0cy5pbnRlcm5hbEFydGlmYWN0VHdpcnBDbGllbnQgPSBpbnRlcm5hbEFydGlmYWN0VHdpcnBDbGllbnQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hcnRpZmFjdC10d2lycC1jbGllbnQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRVcGxvYWRaaXBTcGVjaWZpY2F0aW9uID0gZXhwb3J0cy52YWxpZGF0ZVJvb3REaXJlY3RvcnkgPSB2b2lkIDA7XG5jb25zdCBmcyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiZnNcIikpO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIkBhY3Rpb25zL2NvcmVcIik7XG5jb25zdCBwYXRoXzEgPSByZXF1aXJlKFwicGF0aFwiKTtcbmNvbnN0IHBhdGhfYW5kX2FydGlmYWN0X25hbWVfdmFsaWRhdGlvbl8xID0gcmVxdWlyZShcIi4vcGF0aC1hbmQtYXJ0aWZhY3QtbmFtZS12YWxpZGF0aW9uXCIpO1xuLyoqXG4gKiBDaGVja3MgaWYgYSByb290IGRpcmVjdG9yeSBleGlzdHMgYW5kIGlzIHZhbGlkXG4gKiBAcGFyYW0gcm9vdERpcmVjdG9yeSBhbiBhYnNvbHV0ZSByb290IGRpcmVjdG9yeSBwYXRoIGNvbW1vbiB0byBhbGwgaW5wdXQgZmlsZXMgdGhhdCB0aGF0IHdpbGwgYmUgdHJpbW1lZCBmcm9tIHRoZSBmaW5hbCB6aXAgc3RydWN0dXJlXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlUm9vdERpcmVjdG9yeShyb290RGlyZWN0b3J5KSB7XG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKHJvb3REaXJlY3RvcnkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIHByb3ZpZGVkIHJvb3REaXJlY3RvcnkgJHtyb290RGlyZWN0b3J5fSBkb2VzIG5vdCBleGlzdGApO1xuICAgIH1cbiAgICBpZiAoIWZzLnN0YXRTeW5jKHJvb3REaXJlY3RvcnkpLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgcHJvdmlkZWQgcm9vdERpcmVjdG9yeSAke3Jvb3REaXJlY3Rvcnl9IGlzIG5vdCBhIHZhbGlkIGRpcmVjdG9yeWApO1xuICAgIH1cbiAgICAoMCwgY29yZV8xLmluZm8pKGBSb290IGRpcmVjdG9yeSBpbnB1dCBpcyB2YWxpZCFgKTtcbn1cbmV4cG9ydHMudmFsaWRhdGVSb290RGlyZWN0b3J5ID0gdmFsaWRhdGVSb290RGlyZWN0b3J5O1xuLyoqXG4gKiBDcmVhdGVzIGEgc3BlY2lmaWNhdGlvbiB0aGF0IGRlc2NyaWJlcyBob3cgYSB6aXAgZmlsZSB3aWxsIGJlIGNyZWF0ZWQgZm9yIGEgc2V0IG9mIGlucHV0IGZpbGVzXG4gKiBAcGFyYW0gZmlsZXNUb1ppcCBhIGxpc3Qgb2YgZmlsZSB0aGF0IHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgemlwXG4gKiBAcGFyYW0gcm9vdERpcmVjdG9yeSBhbiBhYnNvbHV0ZSByb290IGRpcmVjdG9yeSBwYXRoIGNvbW1vbiB0byBhbGwgaW5wdXQgZmlsZXMgdGhhdCB0aGF0IHdpbGwgYmUgdHJpbW1lZCBmcm9tIHRoZSBmaW5hbCB6aXAgc3RydWN0dXJlXG4gKi9cbmZ1bmN0aW9uIGdldFVwbG9hZFppcFNwZWNpZmljYXRpb24oZmlsZXNUb1ppcCwgcm9vdERpcmVjdG9yeSkge1xuICAgIGNvbnN0IHNwZWNpZmljYXRpb24gPSBbXTtcbiAgICAvLyBOb3JtYWxpemUgYW5kIHJlc29sdmUsIHRoaXMgYWxsb3dzIGZvciBlaXRoZXIgYWJzb2x1dGUgb3IgcmVsYXRpdmUgcGF0aHMgdG8gYmUgdXNlZFxuICAgIHJvb3REaXJlY3RvcnkgPSAoMCwgcGF0aF8xLm5vcm1hbGl6ZSkocm9vdERpcmVjdG9yeSk7XG4gICAgcm9vdERpcmVjdG9yeSA9ICgwLCBwYXRoXzEucmVzb2x2ZSkocm9vdERpcmVjdG9yeSk7XG4gICAgLypcbiAgICAgICBFeGFtcGxlXG4gICAgICAgXG4gICAgICAgSW5wdXQ6XG4gICAgICAgICByb290RGlyZWN0b3J5OiAnL2hvbWUvdXNlci9maWxlcy9wbHotdXBsb2FkJ1xuICAgICAgICAgYXJ0aWZhY3RGaWxlczogW1xuICAgICAgICAgICAnL2hvbWUvdXNlci9maWxlcy9wbHotdXBsb2FkL2ZpbGUxLnR4dCcsXG4gICAgICAgICAgICcvaG9tZS91c2VyL2ZpbGVzL3Bsei11cGxvYWQvZmlsZTIudHh0JyxcbiAgICAgICAgICAgJy9ob21lL3VzZXIvZmlsZXMvcGx6LXVwbG9hZC9kaXIvZmlsZTMudHh0J1xuICAgICAgICAgXVxuICAgICAgIFxuICAgICAgIE91dHB1dDpcbiAgICAgICAgIHNwZWNpZmljYXRpb25zOiBbXG4gICAgICAgICAgIFsnL2hvbWUvdXNlci9maWxlcy9wbHotdXBsb2FkL2ZpbGUxLnR4dCcsICcvZmlsZTEudHh0J10sXG4gICAgICAgICAgIFsnL2hvbWUvdXNlci9maWxlcy9wbHotdXBsb2FkL2ZpbGUxLnR4dCcsICcvZmlsZTIudHh0J10sXG4gICAgICAgICAgIFsnL2hvbWUvdXNlci9maWxlcy9wbHotdXBsb2FkL2ZpbGUxLnR4dCcsICcvZGlyL2ZpbGUzLnR4dCddXG4gICAgICAgICBdXG4gIFxuICAgICAgICBUaGUgZmluYWwgemlwIHRoYXQgaXMgbGF0ZXIgdXBsb2FkZWQgd2lsbCBsb29rIGxpa2UgdGhpczpcbiAgXG4gICAgICAgIG15LWFydGlmYWN0LnppcFxuICAgICAgICAgIC0gZmlsZS50eHRcbiAgICAgICAgICAtIGZpbGUyLnR4dFxuICAgICAgICAgIC0gZGlyL1xuICAgICAgICAgICAgLSBmaWxlMy50eHRcbiAgICAqL1xuICAgIGZvciAobGV0IGZpbGUgb2YgZmlsZXNUb1ppcCkge1xuICAgICAgICBjb25zdCBzdGF0cyA9IGZzLmxzdGF0U3luYyhmaWxlLCB7IHRocm93SWZOb0VudHJ5OiBmYWxzZSB9KTtcbiAgICAgICAgaWYgKCFzdGF0cykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGaWxlICR7ZmlsZX0gZG9lcyBub3QgZXhpc3RgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgICAgIC8vIE5vcm1hbGl6ZSBhbmQgcmVzb2x2ZSwgdGhpcyBhbGxvd3MgZm9yIGVpdGhlciBhYnNvbHV0ZSBvciByZWxhdGl2ZSBwYXRocyB0byBiZSB1c2VkXG4gICAgICAgICAgICBmaWxlID0gKDAsIHBhdGhfMS5ub3JtYWxpemUpKGZpbGUpO1xuICAgICAgICAgICAgZmlsZSA9ICgwLCBwYXRoXzEucmVzb2x2ZSkoZmlsZSk7XG4gICAgICAgICAgICBpZiAoIWZpbGUuc3RhcnRzV2l0aChyb290RGlyZWN0b3J5KSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIHJvb3REaXJlY3Rvcnk6ICR7cm9vdERpcmVjdG9yeX0gaXMgbm90IGEgcGFyZW50IGRpcmVjdG9yeSBvZiB0aGUgZmlsZTogJHtmaWxlfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIGZvcmJpZGRlbiBjaGFyYWN0ZXJzIGluIGZpbGUgcGF0aHMgdGhhdCBtYXkgY2F1c2UgYW1iaWd1b3VzIGJlaGF2aW9yIGlmIGRvd25sb2FkZWQgb24gZGlmZmVyZW50IGZpbGUgc3lzdGVtc1xuICAgICAgICAgICAgY29uc3QgdXBsb2FkUGF0aCA9IGZpbGUucmVwbGFjZShyb290RGlyZWN0b3J5LCAnJyk7XG4gICAgICAgICAgICAoMCwgcGF0aF9hbmRfYXJ0aWZhY3RfbmFtZV92YWxpZGF0aW9uXzEudmFsaWRhdGVGaWxlUGF0aCkodXBsb2FkUGF0aCk7XG4gICAgICAgICAgICBzcGVjaWZpY2F0aW9uLnB1c2goe1xuICAgICAgICAgICAgICAgIHNvdXJjZVBhdGg6IGZpbGUsXG4gICAgICAgICAgICAgICAgZGVzdGluYXRpb25QYXRoOiB1cGxvYWRQYXRoLFxuICAgICAgICAgICAgICAgIHN0YXRzXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIEVtcHR5IGRpcmVjdG9yeVxuICAgICAgICAgICAgY29uc3QgZGlyZWN0b3J5UGF0aCA9IGZpbGUucmVwbGFjZShyb290RGlyZWN0b3J5LCAnJyk7XG4gICAgICAgICAgICAoMCwgcGF0aF9hbmRfYXJ0aWZhY3RfbmFtZV92YWxpZGF0aW9uXzEudmFsaWRhdGVGaWxlUGF0aCkoZGlyZWN0b3J5UGF0aCk7XG4gICAgICAgICAgICBzcGVjaWZpY2F0aW9uLnB1c2goe1xuICAgICAgICAgICAgICAgIHNvdXJjZVBhdGg6IG51bGwsXG4gICAgICAgICAgICAgICAgZGVzdGluYXRpb25QYXRoOiBkaXJlY3RvcnlQYXRoLFxuICAgICAgICAgICAgICAgIHN0YXRzXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3BlY2lmaWNhdGlvbjtcbn1cbmV4cG9ydHMuZ2V0VXBsb2FkWmlwU3BlY2lmaWNhdGlvbiA9IGdldFVwbG9hZFppcFNwZWNpZmljYXRpb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD11cGxvYWQtemlwLXNwZWNpZmljYXRpb24uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBlKGUpe3RoaXMubWVzc2FnZT1lfWUucHJvdG90eXBlPW5ldyBFcnJvcixlLnByb3RvdHlwZS5uYW1lPVwiSW52YWxpZENoYXJhY3RlckVycm9yXCI7dmFyIHI9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93LmF0b2ImJndpbmRvdy5hdG9iLmJpbmQod2luZG93KXx8ZnVuY3Rpb24ocil7dmFyIHQ9U3RyaW5nKHIpLnJlcGxhY2UoLz0rJC8sXCJcIik7aWYodC5sZW5ndGglND09MSl0aHJvdyBuZXcgZShcIidhdG9iJyBmYWlsZWQ6IFRoZSBzdHJpbmcgdG8gYmUgZGVjb2RlZCBpcyBub3QgY29ycmVjdGx5IGVuY29kZWQuXCIpO2Zvcih2YXIgbixvLGE9MCxpPTAsYz1cIlwiO289dC5jaGFyQXQoaSsrKTt+byYmKG49YSU0PzY0Km4rbzpvLGErKyU0KT9jKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDI1NSZuPj4oLTIqYSY2KSk6MClvPVwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz1cIi5pbmRleE9mKG8pO3JldHVybiBjfTtmdW5jdGlvbiB0KGUpe3ZhciB0PWUucmVwbGFjZSgvLS9nLFwiK1wiKS5yZXBsYWNlKC9fL2csXCIvXCIpO3N3aXRjaCh0Lmxlbmd0aCU0KXtjYXNlIDA6YnJlYWs7Y2FzZSAyOnQrPVwiPT1cIjticmVhaztjYXNlIDM6dCs9XCI9XCI7YnJlYWs7ZGVmYXVsdDp0aHJvd1wiSWxsZWdhbCBiYXNlNjR1cmwgc3RyaW5nIVwifXRyeXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChyKGUpLnJlcGxhY2UoLyguKS9nLChmdW5jdGlvbihlLHIpe3ZhciB0PXIuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtyZXR1cm4gdC5sZW5ndGg8MiYmKHQ9XCIwXCIrdCksXCIlXCIrdH0pKSl9KHQpfWNhdGNoKGUpe3JldHVybiByKHQpfX1mdW5jdGlvbiBuKGUpe3RoaXMubWVzc2FnZT1lfWZ1bmN0aW9uIG8oZSxyKXtpZihcInN0cmluZ1wiIT10eXBlb2YgZSl0aHJvdyBuZXcgbihcIkludmFsaWQgdG9rZW4gc3BlY2lmaWVkXCIpO3ZhciBvPSEwPT09KHI9cnx8e30pLmhlYWRlcj8wOjE7dHJ5e3JldHVybiBKU09OLnBhcnNlKHQoZS5zcGxpdChcIi5cIilbb10pKX1jYXRjaChlKXt0aHJvdyBuZXcgbihcIkludmFsaWQgdG9rZW4gc3BlY2lmaWVkOiBcIitlLm1lc3NhZ2UpfX1uLnByb3RvdHlwZT1uZXcgRXJyb3Isbi5wcm90b3R5cGUubmFtZT1cIkludmFsaWRUb2tlbkVycm9yXCI7Y29uc3QgYT1vO2EuZGVmYXVsdD1vLGEuSW52YWxpZFRva2VuRXJyb3I9bixtb2R1bGUuZXhwb3J0cz1hO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9and0LWRlY29kZS5janMuanMubWFwXG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldEJhY2tlbmRJZHNGcm9tVG9rZW4gPSB2b2lkIDA7XG5jb25zdCBjb3JlID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJAYWN0aW9ucy9jb3JlXCIpKTtcbmNvbnN0IGNvbmZpZ18xID0gcmVxdWlyZShcIi4vY29uZmlnXCIpO1xuY29uc3Qgand0X2RlY29kZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJqd3QtZGVjb2RlXCIpKTtcbmNvbnN0IEludmFsaWRKd3RFcnJvciA9IG5ldyBFcnJvcignRmFpbGVkIHRvIGdldCBiYWNrZW5kIElEczogVGhlIHByb3ZpZGVkIEpXVCB0b2tlbiBpcyBpbnZhbGlkIGFuZC9vciBtaXNzaW5nIGNsYWltcycpO1xuLy8gdXNlcyB0aGUgSldUIHRva2VuIGNsYWltcyB0byBnZXQgdGhlXG4vLyB3b3JrZmxvdyBydW4gYW5kIHdvcmtmbG93IGpvYiBydW4gYmFja2VuZCBpZHNcbmZ1bmN0aW9uIGdldEJhY2tlbmRJZHNGcm9tVG9rZW4oKSB7XG4gICAgY29uc3QgdG9rZW4gPSAoMCwgY29uZmlnXzEuZ2V0UnVudGltZVRva2VuKSgpO1xuICAgIGNvbnN0IGRlY29kZWQgPSAoMCwgand0X2RlY29kZV8xLmRlZmF1bHQpKHRva2VuKTtcbiAgICBpZiAoIWRlY29kZWQuc2NwKSB7XG4gICAgICAgIHRocm93IEludmFsaWRKd3RFcnJvcjtcbiAgICB9XG4gICAgLypcbiAgICAgKiBleGFtcGxlIGRlY29kZWQ6XG4gICAgICoge1xuICAgICAqICAgc2NwOiBcIkFjdGlvbnMuRXhhbXBsZVNjb3BlIEFjdGlvbnMuUmVzdWx0czpjZTdmNTRjNy02MWM3LTRhYWUtODg3Zi0zMGRhNDc1ZjVmMWE6Y2EzOTUwODUtMDQwYS01MjZiLTJjZTgtYmRjODVmNjkyNzc0XCJcbiAgICAgKiB9XG4gICAgICovXG4gICAgY29uc3Qgc2NwUGFydHMgPSBkZWNvZGVkLnNjcC5zcGxpdCgnICcpO1xuICAgIGlmIChzY3BQYXJ0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhyb3cgSW52YWxpZEp3dEVycm9yO1xuICAgIH1cbiAgICAvKlxuICAgICAqIGV4YW1wbGUgc2NwUGFydHM6XG4gICAgICogW1wiQWN0aW9ucy5FeGFtcGxlU2NvcGVcIiwgXCJBY3Rpb25zLlJlc3VsdHM6Y2U3ZjU0YzctNjFjNy00YWFlLTg4N2YtMzBkYTQ3NWY1ZjFhOmNhMzk1MDg1LTA0MGEtNTI2Yi0yY2U4LWJkYzg1ZjY5Mjc3NFwiXVxuICAgICAqL1xuICAgIGZvciAoY29uc3Qgc2NvcGVzIG9mIHNjcFBhcnRzKSB7XG4gICAgICAgIGNvbnN0IHNjb3BlUGFydHMgPSBzY29wZXMuc3BsaXQoJzonKTtcbiAgICAgICAgaWYgKChzY29wZVBhcnRzID09PSBudWxsIHx8IHNjb3BlUGFydHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNjb3BlUGFydHNbMF0pICE9PSAnQWN0aW9ucy5SZXN1bHRzJykge1xuICAgICAgICAgICAgLy8gbm90IHRoZSBBY3Rpb25zLlJlc3VsdHMgc2NvcGVcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIC8qXG4gICAgICAgICAqIGV4YW1wbGUgc2NvcGVQYXJ0czpcbiAgICAgICAgICogW1wiQWN0aW9ucy5SZXN1bHRzXCIsIFwiY2U3ZjU0YzctNjFjNy00YWFlLTg4N2YtMzBkYTQ3NWY1ZjFhXCIsIFwiY2EzOTUwODUtMDQwYS01MjZiLTJjZTgtYmRjODVmNjkyNzc0XCJdXG4gICAgICAgICAqL1xuICAgICAgICBpZiAoc2NvcGVQYXJ0cy5sZW5ndGggIT09IDMpIHtcbiAgICAgICAgICAgIC8vIG1pc3NpbmcgZXhwZWN0ZWQgbnVtYmVyIG9mIGNsYWltc1xuICAgICAgICAgICAgdGhyb3cgSW52YWxpZEp3dEVycm9yO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlkcyA9IHtcbiAgICAgICAgICAgIHdvcmtmbG93UnVuQmFja2VuZElkOiBzY29wZVBhcnRzWzFdLFxuICAgICAgICAgICAgd29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQ6IHNjb3BlUGFydHNbMl1cbiAgICAgICAgfTtcbiAgICAgICAgY29yZS5kZWJ1ZyhgV29ya2Zsb3cgUnVuIEJhY2tlbmQgSUQ6ICR7aWRzLndvcmtmbG93UnVuQmFja2VuZElkfWApO1xuICAgICAgICBjb3JlLmRlYnVnKGBXb3JrZmxvdyBKb2IgUnVuIEJhY2tlbmQgSUQ6ICR7aWRzLndvcmtmbG93Sm9iUnVuQmFja2VuZElkfWApO1xuICAgICAgICByZXR1cm4gaWRzO1xuICAgIH1cbiAgICB0aHJvdyBJbnZhbGlkSnd0RXJyb3I7XG59XG5leHBvcnRzLmdldEJhY2tlbmRJZHNGcm9tVG9rZW4gPSBnZXRCYWNrZW5kSWRzRnJvbVRva2VuO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNyZWF0ZUVtcHR5UGlwZWxpbmUgPSBjcmVhdGVFbXB0eVBpcGVsaW5lO1xuY29uc3QgVmFsaWRQaGFzZU5hbWVzID0gbmV3IFNldChbXCJEZXNlcmlhbGl6ZVwiLCBcIlNlcmlhbGl6ZVwiLCBcIlJldHJ5XCIsIFwiU2lnblwiXSk7XG4vKipcbiAqIEEgcHJpdmF0ZSBpbXBsZW1lbnRhdGlvbiBvZiBQaXBlbGluZS5cbiAqIERvIG5vdCBleHBvcnQgdGhpcyBjbGFzcyBmcm9tIHRoZSBwYWNrYWdlLlxuICogQGludGVybmFsXG4gKi9cbmNsYXNzIEh0dHBQaXBlbGluZSB7XG4gICAgY29uc3RydWN0b3IocG9saWNpZXMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB0aGlzLl9wb2xpY2llcyA9IFtdO1xuICAgICAgICB0aGlzLl9wb2xpY2llcyA9IChfYSA9IHBvbGljaWVzID09PSBudWxsIHx8IHBvbGljaWVzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwb2xpY2llcy5zbGljZSgwKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogW107XG4gICAgICAgIHRoaXMuX29yZGVyZWRQb2xpY2llcyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgYWRkUG9saWN5KHBvbGljeSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGlmIChvcHRpb25zLnBoYXNlICYmIG9wdGlvbnMuYWZ0ZXJQaGFzZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUG9saWNpZXMgaW5zaWRlIGEgcGhhc2UgY2Fubm90IHNwZWNpZnkgYWZ0ZXJQaGFzZS5cIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMucGhhc2UgJiYgIVZhbGlkUGhhc2VOYW1lcy5oYXMob3B0aW9ucy5waGFzZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwaGFzZSBuYW1lOiAke29wdGlvbnMucGhhc2V9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuYWZ0ZXJQaGFzZSAmJiAhVmFsaWRQaGFzZU5hbWVzLmhhcyhvcHRpb25zLmFmdGVyUGhhc2UpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgYWZ0ZXJQaGFzZSBuYW1lOiAke29wdGlvbnMuYWZ0ZXJQaGFzZX1gKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9wb2xpY2llcy5wdXNoKHtcbiAgICAgICAgICAgIHBvbGljeSxcbiAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9vcmRlcmVkUG9saWNpZXMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJlbW92ZVBvbGljeShvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHJlbW92ZWRQb2xpY2llcyA9IFtdO1xuICAgICAgICB0aGlzLl9wb2xpY2llcyA9IHRoaXMuX3BvbGljaWVzLmZpbHRlcigocG9saWN5RGVzY3JpcHRvcikgPT4ge1xuICAgICAgICAgICAgaWYgKChvcHRpb25zLm5hbWUgJiYgcG9saWN5RGVzY3JpcHRvci5wb2xpY3kubmFtZSA9PT0gb3B0aW9ucy5uYW1lKSB8fFxuICAgICAgICAgICAgICAgIChvcHRpb25zLnBoYXNlICYmIHBvbGljeURlc2NyaXB0b3Iub3B0aW9ucy5waGFzZSA9PT0gb3B0aW9ucy5waGFzZSkpIHtcbiAgICAgICAgICAgICAgICByZW1vdmVkUG9saWNpZXMucHVzaChwb2xpY3lEZXNjcmlwdG9yLnBvbGljeSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9vcmRlcmVkUG9saWNpZXMgPSB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiByZW1vdmVkUG9saWNpZXM7XG4gICAgfVxuICAgIHNlbmRSZXF1ZXN0KGh0dHBDbGllbnQsIHJlcXVlc3QpIHtcbiAgICAgICAgY29uc3QgcG9saWNpZXMgPSB0aGlzLmdldE9yZGVyZWRQb2xpY2llcygpO1xuICAgICAgICBjb25zdCBwaXBlbGluZSA9IHBvbGljaWVzLnJlZHVjZVJpZ2h0KChuZXh0LCBwb2xpY3kpID0+IHtcbiAgICAgICAgICAgIHJldHVybiAocmVxKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBvbGljeS5zZW5kUmVxdWVzdChyZXEsIG5leHQpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSwgKHJlcSkgPT4gaHR0cENsaWVudC5zZW5kUmVxdWVzdChyZXEpKTtcbiAgICAgICAgcmV0dXJuIHBpcGVsaW5lKHJlcXVlc3QpO1xuICAgIH1cbiAgICBnZXRPcmRlcmVkUG9saWNpZXMoKSB7XG4gICAgICAgIGlmICghdGhpcy5fb3JkZXJlZFBvbGljaWVzKSB7XG4gICAgICAgICAgICB0aGlzLl9vcmRlcmVkUG9saWNpZXMgPSB0aGlzLm9yZGVyUG9saWNpZXMoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fb3JkZXJlZFBvbGljaWVzO1xuICAgIH1cbiAgICBjbG9uZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBIdHRwUGlwZWxpbmUodGhpcy5fcG9saWNpZXMpO1xuICAgIH1cbiAgICBzdGF0aWMgY3JlYXRlKCkge1xuICAgICAgICByZXR1cm4gbmV3IEh0dHBQaXBlbGluZSgpO1xuICAgIH1cbiAgICBvcmRlclBvbGljaWVzKCkge1xuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIGdvYWwgb2YgdGhpcyBtZXRob2QgaXMgdG8gcmVsaWFibHkgb3JkZXIgcGlwZWxpbmUgcG9saWNpZXNcbiAgICAgICAgICogYmFzZWQgb24gdGhlaXIgZGVjbGFyZWQgcmVxdWlyZW1lbnRzIHdoZW4gdGhleSB3ZXJlIGFkZGVkLlxuICAgICAgICAgKlxuICAgICAgICAgKiBPcmRlciBpcyBmaXJzdCBkZXRlcm1pbmVkIGJ5IHBoYXNlOlxuICAgICAgICAgKlxuICAgICAgICAgKiAxLiBTZXJpYWxpemUgUGhhc2VcbiAgICAgICAgICogMi4gUG9saWNpZXMgbm90IGluIGEgcGhhc2VcbiAgICAgICAgICogMy4gRGVzZXJpYWxpemUgUGhhc2VcbiAgICAgICAgICogNC4gUmV0cnkgUGhhc2VcbiAgICAgICAgICogNS4gU2lnbiBQaGFzZVxuICAgICAgICAgKlxuICAgICAgICAgKiBXaXRoaW4gZWFjaCBwaGFzZSwgcG9saWNpZXMgYXJlIGV4ZWN1dGVkIGluIHRoZSBvcmRlclxuICAgICAgICAgKiB0aGV5IHdlcmUgYWRkZWQgdW5sZXNzIHRoZXkgd2VyZSBzcGVjaWZpZWQgdG8gZXhlY3V0ZVxuICAgICAgICAgKiBiZWZvcmUvYWZ0ZXIgb3RoZXIgcG9saWNpZXMgb3IgYWZ0ZXIgYSBwYXJ0aWN1bGFyIHBoYXNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBUbyBkZXRlcm1pbmUgdGhlIGZpbmFsIG9yZGVyLCB3ZSB3aWxsIHdhbGsgdGhlIHBvbGljeSBsaXN0XG4gICAgICAgICAqIGluIHBoYXNlIG9yZGVyIG11bHRpcGxlIHRpbWVzIHVudGlsIGFsbCBkZXBlbmRlbmNpZXMgYXJlXG4gICAgICAgICAqIHNhdGlzZmllZC5cbiAgICAgICAgICpcbiAgICAgICAgICogYGFmdGVyUG9saWNpZXNgIGFyZSB0aGUgc2V0IG9mIHBvbGljaWVzIHRoYXQgbXVzdCBiZVxuICAgICAgICAgKiBleGVjdXRlZCBiZWZvcmUgYSBnaXZlbiBwb2xpY3kuIFRoaXMgcmVxdWlyZW1lbnQgaXNcbiAgICAgICAgICogY29uc2lkZXJlZCBzYXRpc2ZpZWQgd2hlbiBlYWNoIG9mIHRoZSBsaXN0ZWQgcG9saWNpZXNcbiAgICAgICAgICogaGF2ZSBiZWVuIHNjaGVkdWxlZC5cbiAgICAgICAgICpcbiAgICAgICAgICogYGJlZm9yZVBvbGljaWVzYCBhcmUgdGhlIHNldCBvZiBwb2xpY2llcyB0aGF0IG11c3QgYmVcbiAgICAgICAgICogZXhlY3V0ZWQgYWZ0ZXIgYSBnaXZlbiBwb2xpY3kuIFNpbmNlIHRoaXMgZGVwZW5kZW5jeVxuICAgICAgICAgKiBjYW4gYmUgZXhwcmVzc2VkIGJ5IGNvbnZlcnRpbmcgaXQgaW50byBhIGVxdWl2YWxlbnRcbiAgICAgICAgICogYGFmdGVyUG9saWNpZXNgIGRlY2xhcmF0aW9ucywgdGhleSBhcmUgbm9ybWFsaXplZFxuICAgICAgICAgKiBpbnRvIHRoYXQgZm9ybSBmb3Igc2ltcGxpY2l0eS5cbiAgICAgICAgICpcbiAgICAgICAgICogQW4gYGFmdGVyUGhhc2VgIGRlcGVuZGVuY3kgaXMgY29uc2lkZXJlZCBzYXRpc2ZpZWQgd2hlbiBhbGxcbiAgICAgICAgICogcG9saWNpZXMgaW4gdGhhdCBwaGFzZSBoYXZlIHNjaGVkdWxlZC5cbiAgICAgICAgICpcbiAgICAgICAgICovXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgICAvLyBUcmFjayBhbGwgcG9saWNpZXMgd2Uga25vdyBhYm91dC5cbiAgICAgICAgY29uc3QgcG9saWN5TWFwID0gbmV3IE1hcCgpO1xuICAgICAgICBmdW5jdGlvbiBjcmVhdGVQaGFzZShuYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgcG9saWNpZXM6IG5ldyBTZXQoKSxcbiAgICAgICAgICAgICAgICBoYXNSdW46IGZhbHNlLFxuICAgICAgICAgICAgICAgIGhhc0FmdGVyUG9saWNpZXM6IGZhbHNlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUcmFjayBwb2xpY2llcyBmb3IgZWFjaCBwaGFzZS5cbiAgICAgICAgY29uc3Qgc2VyaWFsaXplUGhhc2UgPSBjcmVhdGVQaGFzZShcIlNlcmlhbGl6ZVwiKTtcbiAgICAgICAgY29uc3Qgbm9QaGFzZSA9IGNyZWF0ZVBoYXNlKFwiTm9uZVwiKTtcbiAgICAgICAgY29uc3QgZGVzZXJpYWxpemVQaGFzZSA9IGNyZWF0ZVBoYXNlKFwiRGVzZXJpYWxpemVcIik7XG4gICAgICAgIGNvbnN0IHJldHJ5UGhhc2UgPSBjcmVhdGVQaGFzZShcIlJldHJ5XCIpO1xuICAgICAgICBjb25zdCBzaWduUGhhc2UgPSBjcmVhdGVQaGFzZShcIlNpZ25cIik7XG4gICAgICAgIC8vIGEgbGlzdCBvZiBwaGFzZXMgaW4gb3JkZXJcbiAgICAgICAgY29uc3Qgb3JkZXJlZFBoYXNlcyA9IFtzZXJpYWxpemVQaGFzZSwgbm9QaGFzZSwgZGVzZXJpYWxpemVQaGFzZSwgcmV0cnlQaGFzZSwgc2lnblBoYXNlXTtcbiAgICAgICAgLy8gU21hbGwgaGVscGVyIGZ1bmN0aW9uIHRvIG1hcCBwaGFzZSBuYW1lIHRvIGVhY2ggUGhhc2VcbiAgICAgICAgZnVuY3Rpb24gZ2V0UGhhc2UocGhhc2UpIHtcbiAgICAgICAgICAgIGlmIChwaGFzZSA9PT0gXCJSZXRyeVwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldHJ5UGhhc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChwaGFzZSA9PT0gXCJTZXJpYWxpemVcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemVQaGFzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHBoYXNlID09PSBcIkRlc2VyaWFsaXplXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGVzZXJpYWxpemVQaGFzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHBoYXNlID09PSBcIlNpZ25cIikge1xuICAgICAgICAgICAgICAgIHJldHVybiBzaWduUGhhc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbm9QaGFzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBGaXJzdCB3YWxrIGVhY2ggcG9saWN5IGFuZCBjcmVhdGUgYSBub2RlIHRvIHRyYWNrIG1ldGFkYXRhLlxuICAgICAgICBmb3IgKGNvbnN0IGRlc2NyaXB0b3Igb2YgdGhpcy5fcG9saWNpZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHBvbGljeSA9IGRlc2NyaXB0b3IucG9saWN5O1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGRlc2NyaXB0b3Iub3B0aW9ucztcbiAgICAgICAgICAgIGNvbnN0IHBvbGljeU5hbWUgPSBwb2xpY3kubmFtZTtcbiAgICAgICAgICAgIGlmIChwb2xpY3lNYXAuaGFzKHBvbGljeU5hbWUpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRHVwbGljYXRlIHBvbGljeSBuYW1lcyBub3QgYWxsb3dlZCBpbiBwaXBlbGluZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB7XG4gICAgICAgICAgICAgICAgcG9saWN5LFxuICAgICAgICAgICAgICAgIGRlcGVuZHNPbjogbmV3IFNldCgpLFxuICAgICAgICAgICAgICAgIGRlcGVuZGFudHM6IG5ldyBTZXQoKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5hZnRlclBoYXNlKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5hZnRlclBoYXNlID0gZ2V0UGhhc2Uob3B0aW9ucy5hZnRlclBoYXNlKTtcbiAgICAgICAgICAgICAgICBub2RlLmFmdGVyUGhhc2UuaGFzQWZ0ZXJQb2xpY2llcyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwb2xpY3lNYXAuc2V0KHBvbGljeU5hbWUsIG5vZGUpO1xuICAgICAgICAgICAgY29uc3QgcGhhc2UgPSBnZXRQaGFzZShvcHRpb25zLnBoYXNlKTtcbiAgICAgICAgICAgIHBoYXNlLnBvbGljaWVzLmFkZChub2RlKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBOb3cgdGhhdCBlYWNoIHBvbGljeSBoYXMgYSBub2RlLCBjb25uZWN0IGRlcGVuZGVuY3kgcmVmZXJlbmNlcy5cbiAgICAgICAgZm9yIChjb25zdCBkZXNjcmlwdG9yIG9mIHRoaXMuX3BvbGljaWVzKSB7XG4gICAgICAgICAgICBjb25zdCB7IHBvbGljeSwgb3B0aW9ucyB9ID0gZGVzY3JpcHRvcjtcbiAgICAgICAgICAgIGNvbnN0IHBvbGljeU5hbWUgPSBwb2xpY3kubmFtZTtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBwb2xpY3lNYXAuZ2V0KHBvbGljeU5hbWUpO1xuICAgICAgICAgICAgaWYgKCFub2RlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIG5vZGUgZm9yIHBvbGljeSAke3BvbGljeU5hbWV9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5hZnRlclBvbGljaWVzKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBhZnRlclBvbGljeU5hbWUgb2Ygb3B0aW9ucy5hZnRlclBvbGljaWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFmdGVyTm9kZSA9IHBvbGljeU1hcC5nZXQoYWZ0ZXJQb2xpY3lOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFmdGVyTm9kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gTGlua2luZyBpbiBib3RoIGRpcmVjdGlvbnMgaGVscHMgbGF0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdoZW4gd2Ugd2FudCB0byBub3RpZnkgZGVwZW5kYW50cy5cbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuZGVwZW5kc09uLmFkZChhZnRlck5vZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJOb2RlLmRlcGVuZGFudHMuYWRkKG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuYmVmb3JlUG9saWNpZXMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGJlZm9yZVBvbGljeU5hbWUgb2Ygb3B0aW9ucy5iZWZvcmVQb2xpY2llcykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBiZWZvcmVOb2RlID0gcG9saWN5TWFwLmdldChiZWZvcmVQb2xpY3lOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJlZm9yZU5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRvIGV4ZWN1dGUgYmVmb3JlIGFub3RoZXIgbm9kZSwgbWFrZSBpdFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVwZW5kIG9uIHRoZSBjdXJyZW50IG5vZGUuXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmVOb2RlLmRlcGVuZHNPbi5hZGQobm9kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLmRlcGVuZGFudHMuYWRkKGJlZm9yZU5vZGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHdhbGtQaGFzZShwaGFzZSkge1xuICAgICAgICAgICAgcGhhc2UuaGFzUnVuID0gdHJ1ZTtcbiAgICAgICAgICAgIC8vIFNldHMgaXRlcmF0ZSBpbiBpbnNlcnRpb24gb3JkZXJcbiAgICAgICAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBwaGFzZS5wb2xpY2llcykge1xuICAgICAgICAgICAgICAgIGlmIChub2RlLmFmdGVyUGhhc2UgJiYgKCFub2RlLmFmdGVyUGhhc2UuaGFzUnVuIHx8IG5vZGUuYWZ0ZXJQaGFzZS5wb2xpY2llcy5zaXplKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIG5vZGUgaXMgd2FpdGluZyBvbiBhIHBoYXNlIHRvIGNvbXBsZXRlLFxuICAgICAgICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIHNraXAgaXQgZm9yIG5vdy5cbiAgICAgICAgICAgICAgICAgICAgLy8gRXZlbiBpZiB0aGUgcGhhc2UgaXMgZW1wdHksIHdlIHNob3VsZCB3YWl0IGZvciBpdFxuICAgICAgICAgICAgICAgICAgICAvLyB0byBiZSB3YWxrZWQgdG8gYXZvaWQgcmUtb3JkZXJpbmcgcG9saWNpZXMuXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobm9kZS5kZXBlbmRzT24uc2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSdzIG5vdGhpbmcgZWxzZSB3ZSdyZSB3YWl0aW5nIGZvciwgd2UgY2FuXG4gICAgICAgICAgICAgICAgICAgIC8vIGFkZCB0aGlzIHBvbGljeSB0byB0aGUgcmVzdWx0IGxpc3QuXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5vZGUucG9saWN5KTtcbiAgICAgICAgICAgICAgICAgICAgLy8gTm90aWZ5IGFueXRoaW5nIHRoYXQgZGVwZW5kcyBvbiB0aGlzIHBvbGljeSB0aGF0XG4gICAgICAgICAgICAgICAgICAgIC8vIHRoZSBwb2xpY3kgaGFzIGJlZW4gc2NoZWR1bGVkLlxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGRlcGVuZGFudCBvZiBub2RlLmRlcGVuZGFudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZGFudC5kZXBlbmRzT24uZGVsZXRlKG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHBvbGljeU1hcC5kZWxldGUobm9kZS5wb2xpY3kubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIHBoYXNlLnBvbGljaWVzLmRlbGV0ZShub2RlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gd2Fsa1BoYXNlcygpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcGhhc2Ugb2Ygb3JkZXJlZFBoYXNlcykge1xuICAgICAgICAgICAgICAgIHdhbGtQaGFzZShwaGFzZSk7XG4gICAgICAgICAgICAgICAgLy8gaWYgdGhlIHBoYXNlIGlzbid0IGNvbXBsZXRlXG4gICAgICAgICAgICAgICAgaWYgKHBoYXNlLnBvbGljaWVzLnNpemUgPiAwICYmIHBoYXNlICE9PSBub1BoYXNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghbm9QaGFzZS5oYXNSdW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRyeSBydW5uaW5nIG5vUGhhc2UgdG8gc2VlIGlmIHRoYXQgdW5ibG9ja3MgdGhpcyBwaGFzZSBuZXh0IHRpY2suXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gaWYgYSBwaGFzZSB0aGF0IGhhcHBlbnMgYmVmb3JlIG5vUGhhc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlzIHdhaXRpbmcgb24gYSBub1BoYXNlIHBvbGljeSB0byBjb21wbGV0ZS5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdhbGtQaGFzZShub1BoYXNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCBwcm9jZWVkIHRvIHRoZSBuZXh0IHBoYXNlIHVudGlsIHRoaXMgcGhhc2UgZmluaXNoZXMuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHBoYXNlLmhhc0FmdGVyUG9saWNpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gUnVuIGFueSBwb2xpY2llcyB1bmJsb2NrZWQgYnkgdGhpcyBwaGFzZVxuICAgICAgICAgICAgICAgICAgICB3YWxrUGhhc2Uobm9QaGFzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIEl0ZXJhdGUgdW50aWwgd2UndmUgcHV0IGV2ZXJ5IG5vZGUgaW4gdGhlIHJlc3VsdCBsaXN0LlxuICAgICAgICBsZXQgaXRlcmF0aW9uID0gMDtcbiAgICAgICAgd2hpbGUgKHBvbGljeU1hcC5zaXplID4gMCkge1xuICAgICAgICAgICAgaXRlcmF0aW9uKys7XG4gICAgICAgICAgICBjb25zdCBpbml0aWFsUmVzdWx0TGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcbiAgICAgICAgICAgIC8vIEtlZXAgd2Fsa2luZyBlYWNoIHBoYXNlIGluIG9yZGVyIHVudGlsIHdlIGNhbiBvcmRlciBldmVyeSBub2RlLlxuICAgICAgICAgICAgd2Fsa1BoYXNlcygpO1xuICAgICAgICAgICAgLy8gVGhlIHJlc3VsdCBsaXN0ICpzaG91bGQqIGdldCBhdCBsZWFzdCBvbmUgbGFyZ2VyIGVhY2ggdGltZVxuICAgICAgICAgICAgLy8gYWZ0ZXIgdGhlIGZpcnN0IGZ1bGwgcGFzcy5cbiAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgd2UncmUgZ29pbmcgdG8gbG9vcCBmb3JldmVyLlxuICAgICAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPD0gaW5pdGlhbFJlc3VsdExlbmd0aCAmJiBpdGVyYXRpb24gPiAxKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IHNhdGlzZnkgcG9saWN5IGRlcGVuZGVuY2llcyBkdWUgdG8gcmVxdWlyZW1lbnRzIGN5Y2xlLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8qKlxuICogQ3JlYXRlcyBhIHRvdGFsbHkgZW1wdHkgcGlwZWxpbmUuXG4gKiBVc2VmdWwgZm9yIHRlc3Rpbmcgb3IgY3JlYXRpbmcgYSBjdXN0b20gb25lLlxuICovXG5mdW5jdGlvbiBjcmVhdGVFbXB0eVBpcGVsaW5lKCkge1xuICAgIHJldHVybiBIdHRwUGlwZWxpbmUuY3JlYXRlKCk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1waXBlbGluZS5qcy5tYXAiLAogICAgIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXHJcblxyXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcclxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxyXG5cclxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxyXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcclxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxyXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cclxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1JcclxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxyXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG4vKiBnbG9iYWwgZ2xvYmFsLCBkZWZpbmUsIFN5bWJvbCwgUmVmbGVjdCwgUHJvbWlzZSwgU3VwcHJlc3NlZEVycm9yLCBJdGVyYXRvciAqL1xyXG52YXIgX19leHRlbmRzO1xyXG52YXIgX19hc3NpZ247XHJcbnZhciBfX3Jlc3Q7XHJcbnZhciBfX2RlY29yYXRlO1xyXG52YXIgX19wYXJhbTtcclxudmFyIF9fZXNEZWNvcmF0ZTtcclxudmFyIF9fcnVuSW5pdGlhbGl6ZXJzO1xyXG52YXIgX19wcm9wS2V5O1xyXG52YXIgX19zZXRGdW5jdGlvbk5hbWU7XHJcbnZhciBfX21ldGFkYXRhO1xyXG52YXIgX19hd2FpdGVyO1xyXG52YXIgX19nZW5lcmF0b3I7XHJcbnZhciBfX2V4cG9ydFN0YXI7XHJcbnZhciBfX3ZhbHVlcztcclxudmFyIF9fcmVhZDtcclxudmFyIF9fc3ByZWFkO1xyXG52YXIgX19zcHJlYWRBcnJheXM7XHJcbnZhciBfX3NwcmVhZEFycmF5O1xyXG52YXIgX19hd2FpdDtcclxudmFyIF9fYXN5bmNHZW5lcmF0b3I7XHJcbnZhciBfX2FzeW5jRGVsZWdhdG9yO1xyXG52YXIgX19hc3luY1ZhbHVlcztcclxudmFyIF9fbWFrZVRlbXBsYXRlT2JqZWN0O1xyXG52YXIgX19pbXBvcnRTdGFyO1xyXG52YXIgX19pbXBvcnREZWZhdWx0O1xyXG52YXIgX19jbGFzc1ByaXZhdGVGaWVsZEdldDtcclxudmFyIF9fY2xhc3NQcml2YXRlRmllbGRTZXQ7XHJcbnZhciBfX2NsYXNzUHJpdmF0ZUZpZWxkSW47XHJcbnZhciBfX2NyZWF0ZUJpbmRpbmc7XHJcbnZhciBfX2FkZERpc3Bvc2FibGVSZXNvdXJjZTtcclxudmFyIF9fZGlzcG9zZVJlc291cmNlcztcclxudmFyIF9fcmV3cml0ZVJlbGF0aXZlSW1wb3J0RXh0ZW5zaW9uO1xyXG4oZnVuY3Rpb24gKGZhY3RvcnkpIHtcclxuICAgIHZhciByb290ID0gdHlwZW9mIGdsb2JhbCA9PT0gXCJvYmplY3RcIiA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmID09PSBcIm9iamVjdFwiID8gc2VsZiA6IHR5cGVvZiB0aGlzID09PSBcIm9iamVjdFwiID8gdGhpcyA6IHt9O1xyXG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XHJcbiAgICAgICAgZGVmaW5lKFwidHNsaWJcIiwgW1wiZXhwb3J0c1wiXSwgZnVuY3Rpb24gKGV4cG9ydHMpIHsgZmFjdG9yeShjcmVhdGVFeHBvcnRlcihyb290LCBjcmVhdGVFeHBvcnRlcihleHBvcnRzKSkpOyB9KTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZS5leHBvcnRzID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgZmFjdG9yeShjcmVhdGVFeHBvcnRlcihyb290LCBjcmVhdGVFeHBvcnRlcihtb2R1bGUuZXhwb3J0cykpKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGZhY3RvcnkoY3JlYXRlRXhwb3J0ZXIocm9vdCkpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gY3JlYXRlRXhwb3J0ZXIoZXhwb3J0cywgcHJldmlvdXMpIHtcclxuICAgICAgICBpZiAoZXhwb3J0cyAhPT0gcm9vdCkge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIE9iamVjdC5jcmVhdGUgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGlkLCB2KSB7IHJldHVybiBleHBvcnRzW2lkXSA9IHByZXZpb3VzID8gcHJldmlvdXMoaWQsIHYpIDogdjsgfTtcclxuICAgIH1cclxufSlcclxuKGZ1bmN0aW9uIChleHBvcnRlcikge1xyXG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcclxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XHJcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcclxuXHJcbiAgICBfX2V4dGVuZHMgPSBmdW5jdGlvbiAoZCwgYikge1xyXG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcclxuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcclxuICAgIH07XHJcblxyXG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0KSB7XHJcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XHJcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgfTtcclxuXHJcbiAgICBfX3Jlc3QgPSBmdW5jdGlvbiAocywgZSkge1xyXG4gICAgICAgIHZhciB0ID0ge307XHJcbiAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXHJcbiAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxyXG4gICAgICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHQ7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fZGVjb3JhdGUgPSBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgICAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xyXG4gICAgICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICAgICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgICAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX3BhcmFtID0gZnVuY3Rpb24gKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHsgZGVjb3JhdG9yKHRhcmdldCwga2V5LCBwYXJhbUluZGV4KTsgfVxyXG4gICAgfTtcclxuXHJcbiAgICBfX2VzRGVjb3JhdGUgPSBmdW5jdGlvbiAoY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHtcclxuICAgICAgICBmdW5jdGlvbiBhY2NlcHQoZikgeyBpZiAoZiAhPT0gdm9pZCAwICYmIHR5cGVvZiBmICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGdW5jdGlvbiBleHBlY3RlZFwiKTsgcmV0dXJuIGY7IH1cclxuICAgICAgICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkgPSBraW5kID09PSBcImdldHRlclwiID8gXCJnZXRcIiA6IGtpbmQgPT09IFwic2V0dGVyXCIgPyBcInNldFwiIDogXCJ2YWx1ZVwiO1xyXG4gICAgICAgIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bXCJzdGF0aWNcIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsO1xyXG4gICAgICAgIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pO1xyXG4gICAgICAgIHZhciBfLCBkb25lID0gZmFsc2U7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICAgICAgdmFyIGNvbnRleHQgPSB7fTtcclxuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBjb250ZXh0SW4pIGNvbnRleHRbcF0gPSBwID09PSBcImFjY2Vzc1wiID8ge30gOiBjb250ZXh0SW5bcF07XHJcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dC5hY2Nlc3NbcF0gPSBjb250ZXh0SW4uYWNjZXNzW3BdO1xyXG4gICAgICAgICAgICBjb250ZXh0LmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24gKGYpIHsgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWRcIik7IGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGYgfHwgbnVsbCkpOyB9O1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaV0pKGtpbmQgPT09IFwiYWNjZXNzb3JcIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXldLCBjb250ZXh0KTtcclxuICAgICAgICAgICAgaWYgKGtpbmQgPT09IFwiYWNjZXNzb3JcIikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gXCJvYmplY3RcIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBleHBlY3RlZFwiKTtcclxuICAgICAgICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF87XHJcbiAgICAgICAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfO1xyXG4gICAgICAgICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChfID0gYWNjZXB0KHJlc3VsdCkpIHtcclxuICAgICAgICAgICAgICAgIGlmIChraW5kID09PSBcImZpZWxkXCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF8pO1xyXG4gICAgICAgICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleV0gPSBfO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTtcclxuICAgICAgICBkb25lID0gdHJ1ZTtcclxuICAgIH07XHJcblxyXG4gICAgX19ydW5Jbml0aWFsaXplcnMgPSBmdW5jdGlvbiAodGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZSkge1xyXG4gICAgICAgIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnLCB2YWx1ZSkgOiBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUgOiB2b2lkIDA7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fcHJvcEtleSA9IGZ1bmN0aW9uICh4KSB7XHJcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB4ID09PSBcInN5bWJvbFwiID8geCA6IFwiXCIuY29uY2F0KHgpO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX3NldEZ1bmN0aW9uTmFtZSA9IGZ1bmN0aW9uIChmLCBuYW1lLCBwcmVmaXgpIHtcclxuICAgICAgICBpZiAodHlwZW9mIG5hbWUgPT09IFwic3ltYm9sXCIpIG5hbWUgPSBuYW1lLmRlc2NyaXB0aW9uID8gXCJbXCIuY29uY2F0KG5hbWUuZGVzY3JpcHRpb24sIFwiXVwiKSA6IFwiXCI7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLCBcIm5hbWVcIiwgeyBjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiBwcmVmaXggPyBcIlwiLmNvbmNhdChwcmVmaXgsIFwiIFwiLCBuYW1lKSA6IG5hbWUgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fbWV0YWRhdGEgPSBmdW5jdGlvbiAobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2F3YWl0ZXIgPSBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XHJcbiAgICAgICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XHJcbiAgICAgICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcblxyXG4gICAgX19nZW5lcmF0b3IgPSBmdW5jdGlvbiAodGhpc0FyZywgYm9keSkge1xyXG4gICAgICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGcgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgSXRlcmF0b3IgPT09IFwiZnVuY3Rpb25cIiA/IEl0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpO1xyXG4gICAgICAgIHJldHVybiBnLm5leHQgPSB2ZXJiKDApLCBnW1widGhyb3dcIl0gPSB2ZXJiKDEpLCBnW1wicmV0dXJuXCJdID0gdmVyYigyKSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xyXG4gICAgICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcclxuICAgICAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xyXG4gICAgICAgICAgICB3aGlsZSAoZyAmJiAoZyA9IDAsIG9wWzBdICYmIChfID0gMCkpLCBfKSB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xyXG4gICAgICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cclxuICAgICAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBfX2V4cG9ydFN0YXIgPSBmdW5jdGlvbihtLCBvKSB7XHJcbiAgICAgICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBwKSkgX19jcmVhdGVCaW5kaW5nKG8sIG0sIHApO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2NyZWF0ZUJpbmRpbmcgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XHJcbiAgICAgICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgICAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XHJcbiAgICAgICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcclxuICAgICAgICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcclxuICAgIH0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XHJcbiAgICAgICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgICAgICBvW2syXSA9IG1ba107XHJcbiAgICB9KTtcclxuXHJcbiAgICBfX3ZhbHVlcyA9IGZ1bmN0aW9uIChvKSB7XHJcbiAgICAgICAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcclxuICAgICAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcclxuICAgICAgICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XHJcbiAgICAgICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIH07XHJcblxyXG4gICAgX19yZWFkID0gZnVuY3Rpb24gKG8sIG4pIHtcclxuICAgICAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XHJcbiAgICAgICAgaWYgKCFtKSByZXR1cm4gbztcclxuICAgICAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XHJcbiAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGFyO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKiogQGRlcHJlY2F0ZWQgKi9cclxuICAgIF9fc3ByZWFkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICBhciA9IGFyLmNvbmNhdChfX3JlYWQoYXJndW1lbnRzW2ldKSk7XHJcbiAgICAgICAgcmV0dXJuIGFyO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKiogQGRlcHJlY2F0ZWQgKi9cclxuICAgIF9fc3ByZWFkQXJyYXlzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGZvciAodmFyIHMgPSAwLCBpID0gMCwgaWwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWw7IGkrKykgcyArPSBhcmd1bWVudHNbaV0ubGVuZ3RoO1xyXG4gICAgICAgIGZvciAodmFyIHIgPSBBcnJheShzKSwgayA9IDAsIGkgPSAwOyBpIDwgaWw7IGkrKylcclxuICAgICAgICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXHJcbiAgICAgICAgICAgICAgICByW2tdID0gYVtqXTtcclxuICAgICAgICByZXR1cm4gcjtcclxuICAgIH07XHJcblxyXG4gICAgX19zcHJlYWRBcnJheSA9IGZ1bmN0aW9uICh0bywgZnJvbSwgcGFjaykge1xyXG4gICAgICAgIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcclxuICAgICAgICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XHJcbiAgICAgICAgICAgICAgICBhcltpXSA9IGZyb21baV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fYXdhaXQgPSBmdW5jdGlvbiAodikge1xyXG4gICAgICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2FzeW5jR2VuZXJhdG9yID0gZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xyXG4gICAgICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICAgICAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcclxuICAgICAgICByZXR1cm4gaSA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBBc3luY0l0ZXJhdG9yID09PSBcImZ1bmN0aW9uXCIgPyBBc3luY0l0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpLCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIsIGF3YWl0UmV0dXJuKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgICAgIGZ1bmN0aW9uIGF3YWl0UmV0dXJuKGYpIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBQcm9taXNlLnJlc29sdmUodikudGhlbihmLCByZWplY3QpOyB9OyB9XHJcbiAgICAgICAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlmIChnW25dKSB7IGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IGlmIChmKSBpW25dID0gZihpW25dKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgfVxyXG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cclxuICAgICAgICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XHJcbiAgICAgICAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxyXG4gICAgfTtcclxuXHJcbiAgICBfX2FzeW5jRGVsZWdhdG9yID0gZnVuY3Rpb24gKG8pIHtcclxuICAgICAgICB2YXIgaSwgcDtcclxuICAgICAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIsIGZ1bmN0aW9uIChlKSB7IHRocm93IGU7IH0pLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IGZhbHNlIH0gOiBmID8gZih2KSA6IHY7IH0gOiBmOyB9XHJcbiAgICB9O1xyXG5cclxuICAgIF9fYXN5bmNWYWx1ZXMgPSBmdW5jdGlvbiAobykge1xyXG4gICAgICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICAgICAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcclxuICAgICAgICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XHJcbiAgICAgICAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxyXG4gICAgICAgIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cclxuICAgIH07XHJcblxyXG4gICAgX19tYWtlVGVtcGxhdGVPYmplY3QgPSBmdW5jdGlvbiAoY29va2VkLCByYXcpIHtcclxuICAgICAgICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb29rZWQsIFwicmF3XCIsIHsgdmFsdWU6IHJhdyB9KTsgfSBlbHNlIHsgY29va2VkLnJhdyA9IHJhdzsgfVxyXG4gICAgICAgIHJldHVybiBjb29rZWQ7XHJcbiAgICB9O1xyXG5cclxuICAgIHZhciBfX3NldE1vZHVsZURlZmF1bHQgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XHJcbiAgICB9KSA6IGZ1bmN0aW9uKG8sIHYpIHtcclxuICAgICAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XHJcbiAgICB9O1xyXG5cclxuICAgIF9faW1wb3J0U3RhciA9IGZ1bmN0aW9uIChtb2QpIHtcclxuICAgICAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xyXG4gICAgICAgIHZhciByZXN1bHQgPSB7fTtcclxuICAgICAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XHJcbiAgICAgICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2ltcG9ydERlZmF1bHQgPSBmdW5jdGlvbiAobW9kKSB7XHJcbiAgICAgICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XHJcbiAgICB9O1xyXG5cclxuICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQgPSBmdW5jdGlvbiAocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XHJcbiAgICAgICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO1xyXG4gICAgICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xyXG4gICAgICAgIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQgPSBmdW5jdGlvbiAocmVjZWl2ZXIsIHN0YXRlLCB2YWx1ZSwga2luZCwgZikge1xyXG4gICAgICAgIGlmIChraW5kID09PSBcIm1cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZVwiKTtcclxuICAgICAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXJcIik7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcclxuICAgICAgICByZXR1cm4gKGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyLCB2YWx1ZSkgOiBmID8gZi52YWx1ZSA9IHZhbHVlIDogc3RhdGUuc2V0KHJlY2VpdmVyLCB2YWx1ZSkpLCB2YWx1ZTtcclxuICAgIH07XHJcblxyXG4gICAgX19jbGFzc1ByaXZhdGVGaWVsZEluID0gZnVuY3Rpb24gKHN0YXRlLCByZWNlaXZlcikge1xyXG4gICAgICAgIGlmIChyZWNlaXZlciA9PT0gbnVsbCB8fCAodHlwZW9mIHJlY2VpdmVyICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiByZWNlaXZlciAhPT0gXCJmdW5jdGlvblwiKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB1c2UgJ2luJyBvcGVyYXRvciBvbiBub24tb2JqZWN0XCIpO1xyXG4gICAgICAgIHJldHVybiB0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyID09PSBzdGF0ZSA6IHN0YXRlLmhhcyhyZWNlaXZlcik7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fYWRkRGlzcG9zYWJsZVJlc291cmNlID0gZnVuY3Rpb24gKGVudiwgdmFsdWUsIGFzeW5jKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB2b2lkIDApIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBleHBlY3RlZC5cIik7XHJcbiAgICAgICAgICAgIHZhciBkaXNwb3NlLCBpbm5lcjtcclxuICAgICAgICAgICAgaWYgKGFzeW5jKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIVN5bWJvbC5hc3luY0Rpc3Bvc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNEaXNwb3NlIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgICAgICAgICAgICAgIGRpc3Bvc2UgPSB2YWx1ZVtTeW1ib2wuYXN5bmNEaXNwb3NlXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZGlzcG9zZSA9PT0gdm9pZCAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIVN5bWJvbC5kaXNwb3NlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmRpc3Bvc2UgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgICAgICAgICAgICAgZGlzcG9zZSA9IHZhbHVlW1N5bWJvbC5kaXNwb3NlXTtcclxuICAgICAgICAgICAgICAgIGlmIChhc3luYykgaW5uZXIgPSBkaXNwb3NlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZGlzcG9zZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiT2JqZWN0IG5vdCBkaXNwb3NhYmxlLlwiKTtcclxuICAgICAgICAgICAgaWYgKGlubmVyKSBkaXNwb3NlID0gZnVuY3Rpb24oKSB7IHRyeSB7IGlubmVyLmNhbGwodGhpcyk7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIFByb21pc2UucmVqZWN0KGUpOyB9IH07XHJcbiAgICAgICAgICAgIGVudi5zdGFjay5wdXNoKHsgdmFsdWU6IHZhbHVlLCBkaXNwb3NlOiBkaXNwb3NlLCBhc3luYzogYXN5bmMgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGFzeW5jKSB7XHJcbiAgICAgICAgICAgIGVudi5zdGFjay5wdXNoKHsgYXN5bmM6IHRydWUgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH07XHJcblxyXG4gICAgdmFyIF9TdXBwcmVzc2VkRXJyb3IgPSB0eXBlb2YgU3VwcHJlc3NlZEVycm9yID09PSBcImZ1bmN0aW9uXCIgPyBTdXBwcmVzc2VkRXJyb3IgOiBmdW5jdGlvbiAoZXJyb3IsIHN1cHByZXNzZWQsIG1lc3NhZ2UpIHtcclxuICAgICAgICB2YXIgZSA9IG5ldyBFcnJvcihtZXNzYWdlKTtcclxuICAgICAgICByZXR1cm4gZS5uYW1lID0gXCJTdXBwcmVzc2VkRXJyb3JcIiwgZS5lcnJvciA9IGVycm9yLCBlLnN1cHByZXNzZWQgPSBzdXBwcmVzc2VkLCBlO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2Rpc3Bvc2VSZXNvdXJjZXMgPSBmdW5jdGlvbiAoZW52KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZmFpbChlKSB7XHJcbiAgICAgICAgICAgIGVudi5lcnJvciA9IGVudi5oYXNFcnJvciA/IG5ldyBfU3VwcHJlc3NlZEVycm9yKGUsIGVudi5lcnJvciwgXCJBbiBlcnJvciB3YXMgc3VwcHJlc3NlZCBkdXJpbmcgZGlzcG9zYWwuXCIpIDogZTtcclxuICAgICAgICAgICAgZW52Lmhhc0Vycm9yID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHIsIHMgPSAwO1xyXG4gICAgICAgIGZ1bmN0aW9uIG5leHQoKSB7XHJcbiAgICAgICAgICAgIHdoaWxlIChyID0gZW52LnN0YWNrLnBvcCgpKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghci5hc3luYyAmJiBzID09PSAxKSByZXR1cm4gcyA9IDAsIGVudi5zdGFjay5wdXNoKHIpLCBQcm9taXNlLnJlc29sdmUoKS50aGVuKG5leHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyLmRpc3Bvc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHIuZGlzcG9zZS5jYWxsKHIudmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoci5hc3luYykgcmV0dXJuIHMgfD0gMiwgUHJvbWlzZS5yZXNvbHZlKHJlc3VsdCkudGhlbihuZXh0LCBmdW5jdGlvbihlKSB7IGZhaWwoZSk7IHJldHVybiBuZXh0KCk7IH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHMgfD0gMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmFpbChlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocyA9PT0gMSkgcmV0dXJuIGVudi5oYXNFcnJvciA/IFByb21pc2UucmVqZWN0KGVudi5lcnJvcikgOiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgICAgICAgICAgaWYgKGVudi5oYXNFcnJvcikgdGhyb3cgZW52LmVycm9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV4dCgpO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX3Jld3JpdGVSZWxhdGl2ZUltcG9ydEV4dGVuc2lvbiA9IGZ1bmN0aW9uIChwYXRoLCBwcmVzZXJ2ZUpzeCkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgcGF0aCA9PT0gXCJzdHJpbmdcIiAmJiAvXlxcLlxcLj9cXC8vLnRlc3QocGF0aCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHBhdGgucmVwbGFjZSgvXFwuKHRzeCkkfCgoPzpcXC5kKT8pKCg/OlxcLlteLi9dKz8pPylcXC4oW2NtXT8pdHMkL2ksIGZ1bmN0aW9uIChtLCB0c3gsIGQsIGV4dCwgY20pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0c3ggPyBwcmVzZXJ2ZUpzeCA/IFwiLmpzeFwiIDogXCIuanNcIiA6IGQgJiYgKCFleHQgfHwgIWNtKSA/IG0gOiAoZCArIGV4dCArIFwiLlwiICsgY20udG9Mb3dlckNhc2UoKSArIFwianNcIik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcGF0aDtcclxuICAgIH07XHJcblxyXG4gICAgZXhwb3J0ZXIoXCJfX2V4dGVuZHNcIiwgX19leHRlbmRzKTtcclxuICAgIGV4cG9ydGVyKFwiX19hc3NpZ25cIiwgX19hc3NpZ24pO1xyXG4gICAgZXhwb3J0ZXIoXCJfX3Jlc3RcIiwgX19yZXN0KTtcclxuICAgIGV4cG9ydGVyKFwiX19kZWNvcmF0ZVwiLCBfX2RlY29yYXRlKTtcclxuICAgIGV4cG9ydGVyKFwiX19wYXJhbVwiLCBfX3BhcmFtKTtcclxuICAgIGV4cG9ydGVyKFwiX19lc0RlY29yYXRlXCIsIF9fZXNEZWNvcmF0ZSk7XHJcbiAgICBleHBvcnRlcihcIl9fcnVuSW5pdGlhbGl6ZXJzXCIsIF9fcnVuSW5pdGlhbGl6ZXJzKTtcclxuICAgIGV4cG9ydGVyKFwiX19wcm9wS2V5XCIsIF9fcHJvcEtleSk7XHJcbiAgICBleHBvcnRlcihcIl9fc2V0RnVuY3Rpb25OYW1lXCIsIF9fc2V0RnVuY3Rpb25OYW1lKTtcclxuICAgIGV4cG9ydGVyKFwiX19tZXRhZGF0YVwiLCBfX21ldGFkYXRhKTtcclxuICAgIGV4cG9ydGVyKFwiX19hd2FpdGVyXCIsIF9fYXdhaXRlcik7XHJcbiAgICBleHBvcnRlcihcIl9fZ2VuZXJhdG9yXCIsIF9fZ2VuZXJhdG9yKTtcclxuICAgIGV4cG9ydGVyKFwiX19leHBvcnRTdGFyXCIsIF9fZXhwb3J0U3Rhcik7XHJcbiAgICBleHBvcnRlcihcIl9fY3JlYXRlQmluZGluZ1wiLCBfX2NyZWF0ZUJpbmRpbmcpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX3ZhbHVlc1wiLCBfX3ZhbHVlcyk7XHJcbiAgICBleHBvcnRlcihcIl9fcmVhZFwiLCBfX3JlYWQpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX3NwcmVhZFwiLCBfX3NwcmVhZCk7XHJcbiAgICBleHBvcnRlcihcIl9fc3ByZWFkQXJyYXlzXCIsIF9fc3ByZWFkQXJyYXlzKTtcclxuICAgIGV4cG9ydGVyKFwiX19zcHJlYWRBcnJheVwiLCBfX3NwcmVhZEFycmF5KTtcclxuICAgIGV4cG9ydGVyKFwiX19hd2FpdFwiLCBfX2F3YWl0KTtcclxuICAgIGV4cG9ydGVyKFwiX19hc3luY0dlbmVyYXRvclwiLCBfX2FzeW5jR2VuZXJhdG9yKTtcclxuICAgIGV4cG9ydGVyKFwiX19hc3luY0RlbGVnYXRvclwiLCBfX2FzeW5jRGVsZWdhdG9yKTtcclxuICAgIGV4cG9ydGVyKFwiX19hc3luY1ZhbHVlc1wiLCBfX2FzeW5jVmFsdWVzKTtcclxuICAgIGV4cG9ydGVyKFwiX19tYWtlVGVtcGxhdGVPYmplY3RcIiwgX19tYWtlVGVtcGxhdGVPYmplY3QpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2ltcG9ydFN0YXJcIiwgX19pbXBvcnRTdGFyKTtcclxuICAgIGV4cG9ydGVyKFwiX19pbXBvcnREZWZhdWx0XCIsIF9faW1wb3J0RGVmYXVsdCk7XHJcbiAgICBleHBvcnRlcihcIl9fY2xhc3NQcml2YXRlRmllbGRHZXRcIiwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCk7XHJcbiAgICBleHBvcnRlcihcIl9fY2xhc3NQcml2YXRlRmllbGRTZXRcIiwgX19jbGFzc1ByaXZhdGVGaWVsZFNldCk7XHJcbiAgICBleHBvcnRlcihcIl9fY2xhc3NQcml2YXRlRmllbGRJblwiLCBfX2NsYXNzUHJpdmF0ZUZpZWxkSW4pO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2FkZERpc3Bvc2FibGVSZXNvdXJjZVwiLCBfX2FkZERpc3Bvc2FibGVSZXNvdXJjZSk7XHJcbiAgICBleHBvcnRlcihcIl9fZGlzcG9zZVJlc291cmNlc1wiLCBfX2Rpc3Bvc2VSZXNvdXJjZXMpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX3Jld3JpdGVSZWxhdGl2ZUltcG9ydEV4dGVuc2lvblwiLCBfX3Jld3JpdGVSZWxhdGl2ZUltcG9ydEV4dGVuc2lvbik7XHJcbn0pO1xyXG5cclxuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XHJcbiAgICBfX2V4dGVuZHMsXHJcbiAgICBfX2Fzc2lnbixcclxuICAgIF9fcmVzdCxcclxuICAgIF9fZGVjb3JhdGUsXHJcbiAgICBfX3BhcmFtLFxyXG4gICAgX19lc0RlY29yYXRlLFxyXG4gICAgX19ydW5Jbml0aWFsaXplcnMsXHJcbiAgICBfX3Byb3BLZXksXHJcbiAgICBfX3NldEZ1bmN0aW9uTmFtZSxcclxuICAgIF9fbWV0YWRhdGEsXHJcbiAgICBfX2F3YWl0ZXIsXHJcbiAgICBfX2dlbmVyYXRvcixcclxuICAgIF9fZXhwb3J0U3RhcixcclxuICAgIF9fY3JlYXRlQmluZGluZyxcclxuICAgIF9fdmFsdWVzLFxyXG4gICAgX19yZWFkLFxyXG4gICAgX19zcHJlYWQsXHJcbiAgICBfX3NwcmVhZEFycmF5cyxcclxuICAgIF9fc3ByZWFkQXJyYXksXHJcbiAgICBfX2F3YWl0LFxyXG4gICAgX19hc3luY0dlbmVyYXRvcixcclxuICAgIF9fYXN5bmNEZWxlZ2F0b3IsXHJcbiAgICBfX2FzeW5jVmFsdWVzLFxyXG4gICAgX19tYWtlVGVtcGxhdGVPYmplY3QsXHJcbiAgICBfX2ltcG9ydFN0YXIsXHJcbiAgICBfX2ltcG9ydERlZmF1bHQsXHJcbiAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0LFxyXG4gICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCxcclxuICAgIF9fY2xhc3NQcml2YXRlRmllbGRJbixcclxuICAgIF9fYWRkRGlzcG9zYWJsZVJlc291cmNlLFxyXG4gICAgX19kaXNwb3NlUmVzb3VyY2VzLFxyXG4gICAgX19yZXdyaXRlUmVsYXRpdmVJbXBvcnRFeHRlbnNpb24sXHJcbn0pO1xyXG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmxvZyA9IGxvZztcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG5jb25zdCBub2RlX29zXzEgPSByZXF1aXJlKFwibm9kZTpvc1wiKTtcbmNvbnN0IG5vZGVfdXRpbF8xID0gdHNsaWJfMS5fX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIm5vZGU6dXRpbFwiKSk7XG5jb25zdCBwcm9jZXNzID0gdHNsaWJfMS5fX2ltcG9ydFN0YXIocmVxdWlyZShcIm5vZGU6cHJvY2Vzc1wiKSk7XG5mdW5jdGlvbiBsb2cobWVzc2FnZSwgLi4uYXJncykge1xuICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKGAke25vZGVfdXRpbF8xLmRlZmF1bHQuZm9ybWF0KG1lc3NhZ2UsIC4uLmFyZ3MpfSR7bm9kZV9vc18xLkVPTH1gKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxvZy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBsb2dfanNfMSA9IHJlcXVpcmUoXCIuL2xvZy5qc1wiKTtcbmNvbnN0IGRlYnVnRW52VmFyaWFibGUgPSAodHlwZW9mIHByb2Nlc3MgIT09IFwidW5kZWZpbmVkXCIgJiYgcHJvY2Vzcy5lbnYgJiYgcHJvY2Vzcy5lbnYuREVCVUcpIHx8IHVuZGVmaW5lZDtcbmxldCBlbmFibGVkU3RyaW5nO1xubGV0IGVuYWJsZWROYW1lc3BhY2VzID0gW107XG5sZXQgc2tpcHBlZE5hbWVzcGFjZXMgPSBbXTtcbmNvbnN0IGRlYnVnZ2VycyA9IFtdO1xuaWYgKGRlYnVnRW52VmFyaWFibGUpIHtcbiAgICBlbmFibGUoZGVidWdFbnZWYXJpYWJsZSk7XG59XG5jb25zdCBkZWJ1Z09iaiA9IE9iamVjdC5hc3NpZ24oKG5hbWVzcGFjZSkgPT4ge1xuICAgIHJldHVybiBjcmVhdGVEZWJ1Z2dlcihuYW1lc3BhY2UpO1xufSwge1xuICAgIGVuYWJsZSxcbiAgICBlbmFibGVkLFxuICAgIGRpc2FibGUsXG4gICAgbG9nOiBsb2dfanNfMS5sb2csXG59KTtcbmZ1bmN0aW9uIGVuYWJsZShuYW1lc3BhY2VzKSB7XG4gICAgZW5hYmxlZFN0cmluZyA9IG5hbWVzcGFjZXM7XG4gICAgZW5hYmxlZE5hbWVzcGFjZXMgPSBbXTtcbiAgICBza2lwcGVkTmFtZXNwYWNlcyA9IFtdO1xuICAgIGNvbnN0IHdpbGRjYXJkID0gL1xcKi9nO1xuICAgIGNvbnN0IG5hbWVzcGFjZUxpc3QgPSBuYW1lc3BhY2VzLnNwbGl0KFwiLFwiKS5tYXAoKG5zKSA9PiBucy50cmltKCkucmVwbGFjZSh3aWxkY2FyZCwgXCIuKj9cIikpO1xuICAgIGZvciAoY29uc3QgbnMgb2YgbmFtZXNwYWNlTGlzdCkge1xuICAgICAgICBpZiAobnMuc3RhcnRzV2l0aChcIi1cIikpIHtcbiAgICAgICAgICAgIHNraXBwZWROYW1lc3BhY2VzLnB1c2gobmV3IFJlZ0V4cChgXiR7bnMuc3Vic3RyKDEpfSRgKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBlbmFibGVkTmFtZXNwYWNlcy5wdXNoKG5ldyBSZWdFeHAoYF4ke25zfSRgKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBpbnN0YW5jZSBvZiBkZWJ1Z2dlcnMpIHtcbiAgICAgICAgaW5zdGFuY2UuZW5hYmxlZCA9IGVuYWJsZWQoaW5zdGFuY2UubmFtZXNwYWNlKTtcbiAgICB9XG59XG5mdW5jdGlvbiBlbmFibGVkKG5hbWVzcGFjZSkge1xuICAgIGlmIChuYW1lc3BhY2UuZW5kc1dpdGgoXCIqXCIpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHNraXBwZWQgb2Ygc2tpcHBlZE5hbWVzcGFjZXMpIHtcbiAgICAgICAgaWYgKHNraXBwZWQudGVzdChuYW1lc3BhY2UpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBlbmFibGVkTmFtZXNwYWNlIG9mIGVuYWJsZWROYW1lc3BhY2VzKSB7XG4gICAgICAgIGlmIChlbmFibGVkTmFtZXNwYWNlLnRlc3QobmFtZXNwYWNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gZGlzYWJsZSgpIHtcbiAgICBjb25zdCByZXN1bHQgPSBlbmFibGVkU3RyaW5nIHx8IFwiXCI7XG4gICAgZW5hYmxlKFwiXCIpO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBjcmVhdGVEZWJ1Z2dlcihuYW1lc3BhY2UpIHtcbiAgICBjb25zdCBuZXdEZWJ1Z2dlciA9IE9iamVjdC5hc3NpZ24oZGVidWcsIHtcbiAgICAgICAgZW5hYmxlZDogZW5hYmxlZChuYW1lc3BhY2UpLFxuICAgICAgICBkZXN0cm95LFxuICAgICAgICBsb2c6IGRlYnVnT2JqLmxvZyxcbiAgICAgICAgbmFtZXNwYWNlLFxuICAgICAgICBleHRlbmQsXG4gICAgfSk7XG4gICAgZnVuY3Rpb24gZGVidWcoLi4uYXJncykge1xuICAgICAgICBpZiAoIW5ld0RlYnVnZ2VyLmVuYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXJncy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBhcmdzWzBdID0gYCR7bmFtZXNwYWNlfSAke2FyZ3NbMF19YDtcbiAgICAgICAgfVxuICAgICAgICBuZXdEZWJ1Z2dlci5sb2coLi4uYXJncyk7XG4gICAgfVxuICAgIGRlYnVnZ2Vycy5wdXNoKG5ld0RlYnVnZ2VyKTtcbiAgICByZXR1cm4gbmV3RGVidWdnZXI7XG59XG5mdW5jdGlvbiBkZXN0cm95KCkge1xuICAgIGNvbnN0IGluZGV4ID0gZGVidWdnZXJzLmluZGV4T2YodGhpcyk7XG4gICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgZGVidWdnZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBleHRlbmQobmFtZXNwYWNlKSB7XG4gICAgY29uc3QgbmV3RGVidWdnZXIgPSBjcmVhdGVEZWJ1Z2dlcihgJHt0aGlzLm5hbWVzcGFjZX06JHtuYW1lc3BhY2V9YCk7XG4gICAgbmV3RGVidWdnZXIubG9nID0gdGhpcy5sb2c7XG4gICAgcmV0dXJuIG5ld0RlYnVnZ2VyO1xufVxuZXhwb3J0cy5kZWZhdWx0ID0gZGVidWdPYmo7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZWJ1Zy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkF6dXJlTG9nZ2VyID0gdm9pZCAwO1xuZXhwb3J0cy5zZXRMb2dMZXZlbCA9IHNldExvZ0xldmVsO1xuZXhwb3J0cy5nZXRMb2dMZXZlbCA9IGdldExvZ0xldmVsO1xuZXhwb3J0cy5jcmVhdGVDbGllbnRMb2dnZXIgPSBjcmVhdGVDbGllbnRMb2dnZXI7XG5jb25zdCB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xuY29uc3QgZGVidWdfanNfMSA9IHRzbGliXzEuX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL2RlYnVnLmpzXCIpKTtcbmNvbnN0IHJlZ2lzdGVyZWRMb2dnZXJzID0gbmV3IFNldCgpO1xuY29uc3QgbG9nTGV2ZWxGcm9tRW52ID0gKHR5cGVvZiBwcm9jZXNzICE9PSBcInVuZGVmaW5lZFwiICYmIHByb2Nlc3MuZW52ICYmIHByb2Nlc3MuZW52LkFaVVJFX0xPR19MRVZFTCkgfHwgdW5kZWZpbmVkO1xubGV0IGF6dXJlTG9nTGV2ZWw7XG4vKipcbiAqIFRoZSBBenVyZUxvZ2dlciBwcm92aWRlcyBhIG1lY2hhbmlzbSBmb3Igb3ZlcnJpZGluZyB3aGVyZSBsb2dzIGFyZSBvdXRwdXQgdG8uXG4gKiBCeSBkZWZhdWx0LCBsb2dzIGFyZSBzZW50IHRvIHN0ZGVyci5cbiAqIE92ZXJyaWRlIHRoZSBgbG9nYCBtZXRob2QgdG8gcmVkaXJlY3QgbG9ncyB0byBhbm90aGVyIGxvY2F0aW9uLlxuICovXG5leHBvcnRzLkF6dXJlTG9nZ2VyID0gKDAsIGRlYnVnX2pzXzEuZGVmYXVsdCkoXCJhenVyZVwiKTtcbmV4cG9ydHMuQXp1cmVMb2dnZXIubG9nID0gKC4uLmFyZ3MpID0+IHtcbiAgICBkZWJ1Z19qc18xLmRlZmF1bHQubG9nKC4uLmFyZ3MpO1xufTtcbmNvbnN0IEFaVVJFX0xPR19MRVZFTFMgPSBbXCJ2ZXJib3NlXCIsIFwiaW5mb1wiLCBcIndhcm5pbmdcIiwgXCJlcnJvclwiXTtcbmlmIChsb2dMZXZlbEZyb21FbnYpIHtcbiAgICAvLyBhdm9pZCBjYWxsaW5nIHNldExvZ0xldmVsIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCBhIG1pcy1zZXQgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gY3Jhc2hcbiAgICBpZiAoaXNBenVyZUxvZ0xldmVsKGxvZ0xldmVsRnJvbUVudikpIHtcbiAgICAgICAgc2V0TG9nTGV2ZWwobG9nTGV2ZWxGcm9tRW52KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYEFaVVJFX0xPR19MRVZFTCBzZXQgdG8gdW5rbm93biBsb2cgbGV2ZWwgJyR7bG9nTGV2ZWxGcm9tRW52fSc7IGxvZ2dpbmcgaXMgbm90IGVuYWJsZWQuIEFjY2VwdGFibGUgdmFsdWVzOiAke0FaVVJFX0xPR19MRVZFTFMuam9pbihcIiwgXCIpfS5gKTtcbiAgICB9XG59XG4vKipcbiAqIEltbWVkaWF0ZWx5IGVuYWJsZXMgbG9nZ2luZyBhdCB0aGUgc3BlY2lmaWVkIGxvZyBsZXZlbC4gSWYgbm8gbGV2ZWwgaXMgc3BlY2lmaWVkLCBsb2dnaW5nIGlzIGRpc2FibGVkLlxuICogQHBhcmFtIGxldmVsIC0gVGhlIGxvZyBsZXZlbCB0byBlbmFibGUgZm9yIGxvZ2dpbmcuXG4gKiBPcHRpb25zIGZyb20gbW9zdCB2ZXJib3NlIHRvIGxlYXN0IHZlcmJvc2UgYXJlOlxuICogLSB2ZXJib3NlXG4gKiAtIGluZm9cbiAqIC0gd2FybmluZ1xuICogLSBlcnJvclxuICovXG5mdW5jdGlvbiBzZXRMb2dMZXZlbChsZXZlbCkge1xuICAgIGlmIChsZXZlbCAmJiAhaXNBenVyZUxvZ0xldmVsKGxldmVsKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gbG9nIGxldmVsICcke2xldmVsfScuIEFjY2VwdGFibGUgdmFsdWVzOiAke0FaVVJFX0xPR19MRVZFTFMuam9pbihcIixcIil9YCk7XG4gICAgfVxuICAgIGF6dXJlTG9nTGV2ZWwgPSBsZXZlbDtcbiAgICBjb25zdCBlbmFibGVkTmFtZXNwYWNlcyA9IFtdO1xuICAgIGZvciAoY29uc3QgbG9nZ2VyIG9mIHJlZ2lzdGVyZWRMb2dnZXJzKSB7XG4gICAgICAgIGlmIChzaG91bGRFbmFibGUobG9nZ2VyKSkge1xuICAgICAgICAgICAgZW5hYmxlZE5hbWVzcGFjZXMucHVzaChsb2dnZXIubmFtZXNwYWNlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBkZWJ1Z19qc18xLmRlZmF1bHQuZW5hYmxlKGVuYWJsZWROYW1lc3BhY2VzLmpvaW4oXCIsXCIpKTtcbn1cbi8qKlxuICogUmV0cmlldmVzIHRoZSBjdXJyZW50bHkgc3BlY2lmaWVkIGxvZyBsZXZlbC5cbiAqL1xuZnVuY3Rpb24gZ2V0TG9nTGV2ZWwoKSB7XG4gICAgcmV0dXJuIGF6dXJlTG9nTGV2ZWw7XG59XG5jb25zdCBsZXZlbE1hcCA9IHtcbiAgICB2ZXJib3NlOiA0MDAsXG4gICAgaW5mbzogMzAwLFxuICAgIHdhcm5pbmc6IDIwMCxcbiAgICBlcnJvcjogMTAwLFxufTtcbi8qKlxuICogQ3JlYXRlcyBhIGxvZ2dlciBmb3IgdXNlIGJ5IHRoZSBBenVyZSBTREtzIHRoYXQgaW5oZXJpdHMgZnJvbSBgQXp1cmVMb2dnZXJgLlxuICogQHBhcmFtIG5hbWVzcGFjZSAtIFRoZSBuYW1lIG9mIHRoZSBTREsgcGFja2FnZS5cbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQ2xpZW50TG9nZ2VyKG5hbWVzcGFjZSkge1xuICAgIGNvbnN0IGNsaWVudFJvb3RMb2dnZXIgPSBleHBvcnRzLkF6dXJlTG9nZ2VyLmV4dGVuZChuYW1lc3BhY2UpO1xuICAgIHBhdGNoTG9nTWV0aG9kKGV4cG9ydHMuQXp1cmVMb2dnZXIsIGNsaWVudFJvb3RMb2dnZXIpO1xuICAgIHJldHVybiB7XG4gICAgICAgIGVycm9yOiBjcmVhdGVMb2dnZXIoY2xpZW50Um9vdExvZ2dlciwgXCJlcnJvclwiKSxcbiAgICAgICAgd2FybmluZzogY3JlYXRlTG9nZ2VyKGNsaWVudFJvb3RMb2dnZXIsIFwid2FybmluZ1wiKSxcbiAgICAgICAgaW5mbzogY3JlYXRlTG9nZ2VyKGNsaWVudFJvb3RMb2dnZXIsIFwiaW5mb1wiKSxcbiAgICAgICAgdmVyYm9zZTogY3JlYXRlTG9nZ2VyKGNsaWVudFJvb3RMb2dnZXIsIFwidmVyYm9zZVwiKSxcbiAgICB9O1xufVxuZnVuY3Rpb24gcGF0Y2hMb2dNZXRob2QocGFyZW50LCBjaGlsZCkge1xuICAgIGNoaWxkLmxvZyA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIHBhcmVudC5sb2coLi4uYXJncyk7XG4gICAgfTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUxvZ2dlcihwYXJlbnQsIGxldmVsKSB7XG4gICAgY29uc3QgbG9nZ2VyID0gT2JqZWN0LmFzc2lnbihwYXJlbnQuZXh0ZW5kKGxldmVsKSwge1xuICAgICAgICBsZXZlbCxcbiAgICB9KTtcbiAgICBwYXRjaExvZ01ldGhvZChwYXJlbnQsIGxvZ2dlcik7XG4gICAgaWYgKHNob3VsZEVuYWJsZShsb2dnZXIpKSB7XG4gICAgICAgIGNvbnN0IGVuYWJsZWROYW1lc3BhY2VzID0gZGVidWdfanNfMS5kZWZhdWx0LmRpc2FibGUoKTtcbiAgICAgICAgZGVidWdfanNfMS5kZWZhdWx0LmVuYWJsZShlbmFibGVkTmFtZXNwYWNlcyArIFwiLFwiICsgbG9nZ2VyLm5hbWVzcGFjZSk7XG4gICAgfVxuICAgIHJlZ2lzdGVyZWRMb2dnZXJzLmFkZChsb2dnZXIpO1xuICAgIHJldHVybiBsb2dnZXI7XG59XG5mdW5jdGlvbiBzaG91bGRFbmFibGUobG9nZ2VyKSB7XG4gICAgcmV0dXJuIEJvb2xlYW4oYXp1cmVMb2dMZXZlbCAmJiBsZXZlbE1hcFtsb2dnZXIubGV2ZWxdIDw9IGxldmVsTWFwW2F6dXJlTG9nTGV2ZWxdKTtcbn1cbmZ1bmN0aW9uIGlzQXp1cmVMb2dMZXZlbChsb2dMZXZlbCkge1xuICAgIHJldHVybiBBWlVSRV9MT0dfTEVWRUxTLmluY2x1ZGVzKGxvZ0xldmVsKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubG9nZ2VyID0gdm9pZCAwO1xuY29uc3QgbG9nZ2VyXzEgPSByZXF1aXJlKFwiQGF6dXJlL2xvZ2dlclwiKTtcbmV4cG9ydHMubG9nZ2VyID0gKDAsIGxvZ2dlcl8xLmNyZWF0ZUNsaWVudExvZ2dlcikoXCJjb3JlLXJlc3QtcGlwZWxpbmVcIik7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1sb2cuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5BYm9ydEVycm9yID0gdm9pZCAwO1xuLyoqXG4gKiBUaGlzIGVycm9yIGlzIHRocm93biB3aGVuIGFuIGFzeW5jaHJvbm91cyBvcGVyYXRpb24gaGFzIGJlZW4gYWJvcnRlZC5cbiAqIENoZWNrIGZvciB0aGlzIGVycm9yIGJ5IHRlc3RpbmcgdGhlIGBuYW1lYCB0aGF0IHRoZSBuYW1lIHByb3BlcnR5IG9mIHRoZVxuICogZXJyb3IgbWF0Y2hlcyBgXCJBYm9ydEVycm9yXCJgLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAqIGNvbnRyb2xsZXIuYWJvcnQoKTtcbiAqIHRyeSB7XG4gKiAgIGRvQXN5bmNXb3JrKGNvbnRyb2xsZXIuc2lnbmFsKVxuICogfSBjYXRjaCAoZSkge1xuICogICBpZiAoZS5uYW1lID09PSAnQWJvcnRFcnJvcicpIHtcbiAqICAgICAvLyBoYW5kbGUgYWJvcnQgZXJyb3IgaGVyZS5cbiAqICAgfVxuICogfVxuICogYGBgXG4gKi9cbmNsYXNzIEFib3J0RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZSkge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJBYm9ydEVycm9yXCI7XG4gICAgfVxufVxuZXhwb3J0cy5BYm9ydEVycm9yID0gQWJvcnRFcnJvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFib3J0RXJyb3IuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5BYm9ydEVycm9yID0gdm9pZCAwO1xudmFyIEFib3J0RXJyb3JfanNfMSA9IHJlcXVpcmUoXCIuL0Fib3J0RXJyb3IuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJBYm9ydEVycm9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBBYm9ydEVycm9yX2pzXzEuQWJvcnRFcnJvcjsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlQWJvcnRhYmxlUHJvbWlzZSA9IGNyZWF0ZUFib3J0YWJsZVByb21pc2U7XG5jb25zdCBhYm9ydF9jb250cm9sbGVyXzEgPSByZXF1aXJlKFwiQGF6dXJlL2Fib3J0LWNvbnRyb2xsZXJcIik7XG4vKipcbiAqIENyZWF0ZXMgYW4gYWJvcnRhYmxlIHByb21pc2UuXG4gKiBAcGFyYW0gYnVpbGRQcm9taXNlIC0gQSBmdW5jdGlvbiB0aGF0IHRha2VzIHRoZSByZXNvbHZlIGFuZCByZWplY3QgZnVuY3Rpb25zIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciB0aGUgYWJvcnRhYmxlIHByb21pc2UuXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCBjYW4gYmUgYWJvcnRlZC5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQWJvcnRhYmxlUHJvbWlzZShidWlsZFByb21pc2UsIG9wdGlvbnMpIHtcbiAgICBjb25zdCB7IGNsZWFudXBCZWZvcmVBYm9ydCwgYWJvcnRTaWduYWwsIGFib3J0RXJyb3JNc2cgfSA9IG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwID8gb3B0aW9ucyA6IHt9O1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdE9uQWJvcnQoKSB7XG4gICAgICAgICAgICByZWplY3QobmV3IGFib3J0X2NvbnRyb2xsZXJfMS5BYm9ydEVycm9yKGFib3J0RXJyb3JNc2cgIT09IG51bGwgJiYgYWJvcnRFcnJvck1zZyAhPT0gdm9pZCAwID8gYWJvcnRFcnJvck1zZyA6IFwiVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC5cIikpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVycygpIHtcbiAgICAgICAgICAgIGFib3J0U2lnbmFsID09PSBudWxsIHx8IGFib3J0U2lnbmFsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBhYm9ydFNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgb25BYm9ydCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gb25BYm9ydCgpIHtcbiAgICAgICAgICAgIGNsZWFudXBCZWZvcmVBYm9ydCA9PT0gbnVsbCB8fCBjbGVhbnVwQmVmb3JlQWJvcnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNsZWFudXBCZWZvcmVBYm9ydCgpO1xuICAgICAgICAgICAgcmVtb3ZlTGlzdGVuZXJzKCk7XG4gICAgICAgICAgICByZWplY3RPbkFib3J0KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFib3J0U2lnbmFsID09PSBudWxsIHx8IGFib3J0U2lnbmFsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBhYm9ydFNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0T25BYm9ydCgpO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBidWlsZFByb21pc2UoKHgpID0+IHtcbiAgICAgICAgICAgICAgICByZW1vdmVMaXN0ZW5lcnMoKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHgpO1xuICAgICAgICAgICAgfSwgKHgpID0+IHtcbiAgICAgICAgICAgICAgICByZW1vdmVMaXN0ZW5lcnMoKTtcbiAgICAgICAgICAgICAgICByZWplY3QoeCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgICBhYm9ydFNpZ25hbCA9PT0gbnVsbCB8fCBhYm9ydFNpZ25hbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogYWJvcnRTaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uQWJvcnQpO1xuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y3JlYXRlQWJvcnRhYmxlUHJvbWlzZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldFJhbmRvbUludGVnZXJJbmNsdXNpdmUgPSBnZXRSYW5kb21JbnRlZ2VySW5jbHVzaXZlO1xuLyoqXG4gKiBSZXR1cm5zIGEgcmFuZG9tIGludGVnZXIgdmFsdWUgYmV0d2VlbiBhIGxvd2VyIGFuZCB1cHBlciBib3VuZCxcbiAqIGluY2x1c2l2ZSBvZiBib3RoIGJvdW5kcy5cbiAqIE5vdGUgdGhhdCB0aGlzIHVzZXMgTWF0aC5yYW5kb20gYW5kIGlzbid0IHNlY3VyZS4gSWYgeW91IG5lZWQgdG8gdXNlXG4gKiB0aGlzIGZvciBhbnkga2luZCBvZiBzZWN1cml0eSBwdXJwb3NlLCBmaW5kIGEgYmV0dGVyIHNvdXJjZSBvZiByYW5kb20uXG4gKiBAcGFyYW0gbWluIC0gVGhlIHNtYWxsZXN0IGludGVnZXIgdmFsdWUgYWxsb3dlZC5cbiAqIEBwYXJhbSBtYXggLSBUaGUgbGFyZ2VzdCBpbnRlZ2VyIHZhbHVlIGFsbG93ZWQuXG4gKi9cbmZ1bmN0aW9uIGdldFJhbmRvbUludGVnZXJJbmNsdXNpdmUobWluLCBtYXgpIHtcbiAgICAvLyBNYWtlIHN1cmUgaW5wdXRzIGFyZSBpbnRlZ2Vycy5cbiAgICBtaW4gPSBNYXRoLmNlaWwobWluKTtcbiAgICBtYXggPSBNYXRoLmZsb29yKG1heCk7XG4gICAgLy8gUGljayBhIHJhbmRvbSBvZmZzZXQgZnJvbSB6ZXJvIHRvIHRoZSBzaXplIG9mIHRoZSByYW5nZS5cbiAgICAvLyBTaW5jZSBNYXRoLnJhbmRvbSgpIGNhbiBuZXZlciByZXR1cm4gMSwgd2UgaGF2ZSB0byBtYWtlIHRoZSByYW5nZSBvbmUgbGFyZ2VyXG4gICAgLy8gaW4gb3JkZXIgdG8gYmUgaW5jbHVzaXZlIG9mIHRoZSBtYXhpbXVtIHZhbHVlIGFmdGVyIHdlIHRha2UgdGhlIGZsb29yLlxuICAgIGNvbnN0IG9mZnNldCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4gKyAxKSk7XG4gICAgcmV0dXJuIG9mZnNldCArIG1pbjtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJhbmRvbS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlbGF5ID0gZGVsYXk7XG5leHBvcnRzLmNhbGN1bGF0ZVJldHJ5RGVsYXkgPSBjYWxjdWxhdGVSZXRyeURlbGF5O1xuY29uc3QgY3JlYXRlQWJvcnRhYmxlUHJvbWlzZV9qc18xID0gcmVxdWlyZShcIi4vY3JlYXRlQWJvcnRhYmxlUHJvbWlzZS5qc1wiKTtcbmNvbnN0IHJhbmRvbV9qc18xID0gcmVxdWlyZShcIi4vcmFuZG9tLmpzXCIpO1xuY29uc3QgU3RhbmRhcmRBYm9ydE1lc3NhZ2UgPSBcIlRoZSBkZWxheSB3YXMgYWJvcnRlZC5cIjtcbi8qKlxuICogQSB3cmFwcGVyIGZvciBzZXRUaW1lb3V0IHRoYXQgcmVzb2x2ZXMgYSBwcm9taXNlIGFmdGVyIHRpbWVJbk1zIG1pbGxpc2Vjb25kcy5cbiAqIEBwYXJhbSB0aW1lSW5NcyAtIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIGJlIGRlbGF5ZWQuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciBkZWxheSAtIGN1cnJlbnRseSBhYm9ydCBvcHRpb25zXG4gKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgYWZ0ZXIgdGltZUluTXNcbiAqL1xuZnVuY3Rpb24gZGVsYXkodGltZUluTXMsIG9wdGlvbnMpIHtcbiAgICBsZXQgdG9rZW47XG4gICAgY29uc3QgeyBhYm9ydFNpZ25hbCwgYWJvcnRFcnJvck1zZyB9ID0gb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgPyBvcHRpb25zIDoge307XG4gICAgcmV0dXJuICgwLCBjcmVhdGVBYm9ydGFibGVQcm9taXNlX2pzXzEuY3JlYXRlQWJvcnRhYmxlUHJvbWlzZSkoKHJlc29sdmUpID0+IHtcbiAgICAgICAgdG9rZW4gPSBzZXRUaW1lb3V0KHJlc29sdmUsIHRpbWVJbk1zKTtcbiAgICB9LCB7XG4gICAgICAgIGNsZWFudXBCZWZvcmVBYm9ydDogKCkgPT4gY2xlYXJUaW1lb3V0KHRva2VuKSxcbiAgICAgICAgYWJvcnRTaWduYWwsXG4gICAgICAgIGFib3J0RXJyb3JNc2c6IGFib3J0RXJyb3JNc2cgIT09IG51bGwgJiYgYWJvcnRFcnJvck1zZyAhPT0gdm9pZCAwID8gYWJvcnRFcnJvck1zZyA6IFN0YW5kYXJkQWJvcnRNZXNzYWdlLFxuICAgIH0pO1xufVxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBkZWxheSBpbnRlcnZhbCBmb3IgcmV0cnkgYXR0ZW1wdHMgdXNpbmcgZXhwb25lbnRpYWwgZGVsYXkgd2l0aCBqaXR0ZXIuXG4gKiBAcGFyYW0gcmV0cnlBdHRlbXB0IC0gVGhlIGN1cnJlbnQgcmV0cnkgYXR0ZW1wdCBudW1iZXIuXG4gKiBAcGFyYW0gY29uZmlnIC0gVGhlIGV4cG9uZW50aWFsIHJldHJ5IGNvbmZpZ3VyYXRpb24uXG4gKiBAcmV0dXJucyBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgY2FsY3VsYXRlZCByZXRyeSBkZWxheS5cbiAqL1xuZnVuY3Rpb24gY2FsY3VsYXRlUmV0cnlEZWxheShyZXRyeUF0dGVtcHQsIGNvbmZpZykge1xuICAgIC8vIEV4cG9uZW50aWFsbHkgaW5jcmVhc2UgdGhlIGRlbGF5IGVhY2ggdGltZVxuICAgIGNvbnN0IGV4cG9uZW50aWFsRGVsYXkgPSBjb25maWcucmV0cnlEZWxheUluTXMgKiBNYXRoLnBvdygyLCByZXRyeUF0dGVtcHQpO1xuICAgIC8vIERvbid0IGxldCB0aGUgZGVsYXkgZXhjZWVkIHRoZSBtYXhpbXVtXG4gICAgY29uc3QgY2xhbXBlZERlbGF5ID0gTWF0aC5taW4oY29uZmlnLm1heFJldHJ5RGVsYXlJbk1zLCBleHBvbmVudGlhbERlbGF5KTtcbiAgICAvLyBBbGxvdyB0aGUgZmluYWwgdmFsdWUgdG8gaGF2ZSBzb21lIFwiaml0dGVyXCIgKHdpdGhpbiA1MCUgb2YgdGhlIGRlbGF5IHNpemUpIHNvXG4gICAgLy8gdGhhdCByZXRyaWVzIGFjcm9zcyBtdWx0aXBsZSBjbGllbnRzIGRvbid0IG9jY3VyIHNpbXVsdGFuZW91c2x5LlxuICAgIGNvbnN0IHJldHJ5QWZ0ZXJJbk1zID0gY2xhbXBlZERlbGF5IC8gMiArICgwLCByYW5kb21fanNfMS5nZXRSYW5kb21JbnRlZ2VySW5jbHVzaXZlKSgwLCBjbGFtcGVkRGVsYXkgLyAyKTtcbiAgICByZXR1cm4geyByZXRyeUFmdGVySW5NcyB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGVsYXkuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jYW5jZWxhYmxlUHJvbWlzZVJhY2UgPSBjYW5jZWxhYmxlUHJvbWlzZVJhY2U7XG4vKipcbiAqIHByb21pc2UucmFjZSgpIHdyYXBwZXIgdGhhdCBhYm9ydHMgcmVzdCBvZiBwcm9taXNlcyBhcyBzb29uIGFzIHRoZSBmaXJzdCBwcm9taXNlIHNldHRsZXMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNhbmNlbGFibGVQcm9taXNlUmFjZShhYm9ydGFibGVQcm9taXNlQnVpbGRlcnMsIG9wdGlvbnMpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGNvbnN0IGFib3J0ZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgZnVuY3Rpb24gYWJvcnRIYW5kbGVyKCkge1xuICAgICAgICBhYm9ydGVyLmFib3J0KCk7XG4gICAgfVxuICAgIChfYSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5hYm9ydFNpZ25hbCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBhYm9ydEhhbmRsZXIpO1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBQcm9taXNlLnJhY2UoYWJvcnRhYmxlUHJvbWlzZUJ1aWxkZXJzLm1hcCgocCkgPT4gcCh7IGFib3J0U2lnbmFsOiBhYm9ydGVyLnNpZ25hbCB9KSkpO1xuICAgIH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgYWJvcnRlci5hYm9ydCgpO1xuICAgICAgICAoX2IgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuYWJvcnRTaWduYWwpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgYWJvcnRIYW5kbGVyKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hYm9ydGVyVXRpbHMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc09iamVjdCA9IGlzT2JqZWN0O1xuLyoqXG4gKiBIZWxwZXIgdG8gZGV0ZXJtaW5lIHdoZW4gYW4gaW5wdXQgaXMgYSBnZW5lcmljIEpTIG9iamVjdC5cbiAqIEByZXR1cm5zIHRydWUgd2hlbiBpbnB1dCBpcyBhbiBvYmplY3QgdHlwZSB0aGF0IGlzIG5vdCBudWxsLCBBcnJheSwgUmVnRXhwLCBvciBEYXRlLlxuICovXG5mdW5jdGlvbiBpc09iamVjdChpbnB1dCkge1xuICAgIHJldHVybiAodHlwZW9mIGlucHV0ID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgIGlucHV0ICE9PSBudWxsICYmXG4gICAgICAgICFBcnJheS5pc0FycmF5KGlucHV0KSAmJlxuICAgICAgICAhKGlucHV0IGluc3RhbmNlb2YgUmVnRXhwKSAmJlxuICAgICAgICAhKGlucHV0IGluc3RhbmNlb2YgRGF0ZSkpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9b2JqZWN0LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNFcnJvciA9IGlzRXJyb3I7XG5leHBvcnRzLmdldEVycm9yTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZTtcbmNvbnN0IG9iamVjdF9qc18xID0gcmVxdWlyZShcIi4vb2JqZWN0LmpzXCIpO1xuLyoqXG4gKiBUeXBlZ3VhcmQgZm9yIGFuIGVycm9yIG9iamVjdCBzaGFwZSAoaGFzIG5hbWUgYW5kIG1lc3NhZ2UpXG4gKiBAcGFyYW0gZSAtIFNvbWV0aGluZyBjYXVnaHQgYnkgYSBjYXRjaCBjbGF1c2UuXG4gKi9cbmZ1bmN0aW9uIGlzRXJyb3IoZSkge1xuICAgIGlmICgoMCwgb2JqZWN0X2pzXzEuaXNPYmplY3QpKGUpKSB7XG4gICAgICAgIGNvbnN0IGhhc05hbWUgPSB0eXBlb2YgZS5uYW1lID09PSBcInN0cmluZ1wiO1xuICAgICAgICBjb25zdCBoYXNNZXNzYWdlID0gdHlwZW9mIGUubWVzc2FnZSA9PT0gXCJzdHJpbmdcIjtcbiAgICAgICAgcmV0dXJuIGhhc05hbWUgJiYgaGFzTWVzc2FnZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuLyoqXG4gKiBHaXZlbiB3aGF0IGlzIHRob3VnaHQgdG8gYmUgYW4gZXJyb3Igb2JqZWN0LCByZXR1cm4gdGhlIG1lc3NhZ2UgaWYgcG9zc2libGUuXG4gKiBJZiB0aGUgbWVzc2FnZSBpcyBtaXNzaW5nLCByZXR1cm5zIGEgc3RyaW5naWZpZWQgdmVyc2lvbiBvZiB0aGUgaW5wdXQuXG4gKiBAcGFyYW0gZSAtIFNvbWV0aGluZyB0aHJvd24gZnJvbSBhIHRyeSBibG9ja1xuICogQHJldHVybnMgVGhlIGVycm9yIG1lc3NhZ2Ugb3IgYSBzdHJpbmcgb2YgdGhlIGlucHV0XG4gKi9cbmZ1bmN0aW9uIGdldEVycm9yTWVzc2FnZShlKSB7XG4gICAgaWYgKGlzRXJyb3IoZSkpIHtcbiAgICAgICAgcmV0dXJuIGUubWVzc2FnZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGxldCBzdHJpbmdpZmllZDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZSA9PT0gXCJvYmplY3RcIiAmJiBlKSB7XG4gICAgICAgICAgICAgICAgc3RyaW5naWZpZWQgPSBKU09OLnN0cmluZ2lmeShlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0cmluZ2lmaWVkID0gU3RyaW5nKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHN0cmluZ2lmaWVkID0gXCJbdW5hYmxlIHRvIHN0cmluZ2lmeSBpbnB1dF1cIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYFVua25vd24gZXJyb3IgJHtzdHJpbmdpZmllZH1gO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVycm9yLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY29tcHV0ZVNoYTI1NkhtYWMgPSBjb21wdXRlU2hhMjU2SG1hYztcbmV4cG9ydHMuY29tcHV0ZVNoYTI1Nkhhc2ggPSBjb21wdXRlU2hhMjU2SGFzaDtcbmNvbnN0IGNyeXB0b18xID0gcmVxdWlyZShcImNyeXB0b1wiKTtcbi8qKlxuICogR2VuZXJhdGVzIGEgU0hBLTI1NiBITUFDIHNpZ25hdHVyZS5cbiAqIEBwYXJhbSBrZXkgLSBUaGUgSE1BQyBrZXkgcmVwcmVzZW50ZWQgYXMgYSBiYXNlNjQgc3RyaW5nLCB1c2VkIHRvIGdlbmVyYXRlIHRoZSBjcnlwdG9ncmFwaGljIEhNQUMgaGFzaC5cbiAqIEBwYXJhbSBzdHJpbmdUb1NpZ24gLSBUaGUgZGF0YSB0byBiZSBzaWduZWQuXG4gKiBAcGFyYW0gZW5jb2RpbmcgLSBUaGUgdGV4dHVhbCBlbmNvZGluZyB0byB1c2UgZm9yIHRoZSByZXR1cm5lZCBITUFDIGRpZ2VzdC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gY29tcHV0ZVNoYTI1NkhtYWMoa2V5LCBzdHJpbmdUb1NpZ24sIGVuY29kaW5nKSB7XG4gICAgY29uc3QgZGVjb2RlZEtleSA9IEJ1ZmZlci5mcm9tKGtleSwgXCJiYXNlNjRcIik7XG4gICAgcmV0dXJuICgwLCBjcnlwdG9fMS5jcmVhdGVIbWFjKShcInNoYTI1NlwiLCBkZWNvZGVkS2V5KS51cGRhdGUoc3RyaW5nVG9TaWduKS5kaWdlc3QoZW5jb2RpbmcpO1xufVxuLyoqXG4gKiBHZW5lcmF0ZXMgYSBTSEEtMjU2IGhhc2guXG4gKiBAcGFyYW0gY29udGVudCAtIFRoZSBkYXRhIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBoYXNoLlxuICogQHBhcmFtIGVuY29kaW5nIC0gVGhlIHRleHR1YWwgZW5jb2RpbmcgdG8gdXNlIGZvciB0aGUgcmV0dXJuZWQgaGFzaC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gY29tcHV0ZVNoYTI1Nkhhc2goY29udGVudCwgZW5jb2RpbmcpIHtcbiAgICByZXR1cm4gKDAsIGNyeXB0b18xLmNyZWF0ZUhhc2gpKFwic2hhMjU2XCIpLnVwZGF0ZShjb250ZW50KS5kaWdlc3QoZW5jb2RpbmcpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2hhMjU2LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNEZWZpbmVkID0gaXNEZWZpbmVkO1xuZXhwb3J0cy5pc09iamVjdFdpdGhQcm9wZXJ0aWVzID0gaXNPYmplY3RXaXRoUHJvcGVydGllcztcbmV4cG9ydHMub2JqZWN0SGFzUHJvcGVydHkgPSBvYmplY3RIYXNQcm9wZXJ0eTtcbi8qKlxuICogSGVscGVyIFR5cGVHdWFyZCB0aGF0IGNoZWNrcyBpZiBzb21ldGhpbmcgaXMgZGVmaW5lZCBvciBub3QuXG4gKiBAcGFyYW0gdGhpbmcgLSBBbnl0aGluZ1xuICovXG5mdW5jdGlvbiBpc0RlZmluZWQodGhpbmcpIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaW5nICE9PSBcInVuZGVmaW5lZFwiICYmIHRoaW5nICE9PSBudWxsO1xufVxuLyoqXG4gKiBIZWxwZXIgVHlwZUd1YXJkIHRoYXQgY2hlY2tzIGlmIHRoZSBpbnB1dCBpcyBhbiBvYmplY3Qgd2l0aCB0aGUgc3BlY2lmaWVkIHByb3BlcnRpZXMuXG4gKiBAcGFyYW0gdGhpbmcgLSBBbnl0aGluZy5cbiAqIEBwYXJhbSBwcm9wZXJ0aWVzIC0gVGhlIG5hbWUgb2YgdGhlIHByb3BlcnRpZXMgdGhhdCBzaG91bGQgYXBwZWFyIGluIHRoZSBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0V2l0aFByb3BlcnRpZXModGhpbmcsIHByb3BlcnRpZXMpIHtcbiAgICBpZiAoIWlzRGVmaW5lZCh0aGluZykgfHwgdHlwZW9mIHRoaW5nICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBwcm9wZXJ0aWVzKSB7XG4gICAgICAgIGlmICghb2JqZWN0SGFzUHJvcGVydHkodGhpbmcsIHByb3BlcnR5KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuLyoqXG4gKiBIZWxwZXIgVHlwZUd1YXJkIHRoYXQgY2hlY2tzIGlmIHRoZSBpbnB1dCBpcyBhbiBvYmplY3Qgd2l0aCB0aGUgc3BlY2lmaWVkIHByb3BlcnR5LlxuICogQHBhcmFtIHRoaW5nIC0gQW55IG9iamVjdC5cbiAqIEBwYXJhbSBwcm9wZXJ0eSAtIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IHNob3VsZCBhcHBlYXIgaW4gdGhlIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gb2JqZWN0SGFzUHJvcGVydHkodGhpbmcsIHByb3BlcnR5KSB7XG4gICAgcmV0dXJuIChpc0RlZmluZWQodGhpbmcpICYmIHR5cGVvZiB0aGluZyA9PT0gXCJvYmplY3RcIiAmJiBwcm9wZXJ0eSBpbiB0aGluZyk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD10eXBlR3VhcmRzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbnZhciBfYTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmFuZG9tVVVJRCA9IHJhbmRvbVVVSUQ7XG5jb25zdCBjcnlwdG9fMSA9IHJlcXVpcmUoXCJjcnlwdG9cIik7XG4vLyBOT1RFOiBUaGlzIGlzIGEgd29ya2Fyb3VuZCB1bnRpbCB3ZSBjYW4gdXNlIGBnbG9iYWxUaGlzLmNyeXB0by5yYW5kb21VVUlEYCBpbiBOb2RlLmpzIDE5Ky5cbmNvbnN0IHV1aWRGdW5jdGlvbiA9IHR5cGVvZiAoKF9hID0gZ2xvYmFsVGhpcyA9PT0gbnVsbCB8fCBnbG9iYWxUaGlzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBnbG9iYWxUaGlzLmNyeXB0bykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnJhbmRvbVVVSUQpID09PSBcImZ1bmN0aW9uXCJcbiAgICA/IGdsb2JhbFRoaXMuY3J5cHRvLnJhbmRvbVVVSUQuYmluZChnbG9iYWxUaGlzLmNyeXB0bylcbiAgICA6IGNyeXB0b18xLnJhbmRvbVVVSUQ7XG4vKipcbiAqIEdlbmVyYXRlZCBVbml2ZXJzYWxseSBVbmlxdWUgSWRlbnRpZmllclxuICpcbiAqIEByZXR1cm5zIFJGQzQxMjIgdjQgVVVJRC5cbiAqL1xuZnVuY3Rpb24gcmFuZG9tVVVJRCgpIHtcbiAgICByZXR1cm4gdXVpZEZ1bmN0aW9uKCk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD11dWlkVXRpbHMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxudmFyIF9hLCBfYiwgX2MsIF9kO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc1JlYWN0TmF0aXZlID0gZXhwb3J0cy5pc05vZGVSdW50aW1lID0gZXhwb3J0cy5pc05vZGUgPSBleHBvcnRzLmlzTm9kZUxpa2UgPSBleHBvcnRzLmlzQnVuID0gZXhwb3J0cy5pc0Rlbm8gPSBleHBvcnRzLmlzV2ViV29ya2VyID0gZXhwb3J0cy5pc0Jyb3dzZXIgPSB2b2lkIDA7XG4vKipcbiAqIEEgY29uc3RhbnQgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgZW52aXJvbm1lbnQgdGhlIGNvZGUgaXMgcnVubmluZyBpcyBhIFdlYiBCcm93c2VyLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGF6dXJlL2F6dXJlLXNkay90cy1uby13aW5kb3dcbmV4cG9ydHMuaXNCcm93c2VyID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiO1xuLyoqXG4gKiBBIGNvbnN0YW50IHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGVudmlyb25tZW50IHRoZSBjb2RlIGlzIHJ1bm5pbmcgaXMgYSBXZWIgV29ya2VyLlxuICovXG5leHBvcnRzLmlzV2ViV29ya2VyID0gdHlwZW9mIHNlbGYgPT09IFwib2JqZWN0XCIgJiZcbiAgICB0eXBlb2YgKHNlbGYgPT09IG51bGwgfHwgc2VsZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsZi5pbXBvcnRTY3JpcHRzKSA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgKCgoX2EgPSBzZWxmLmNvbnN0cnVjdG9yKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubmFtZSkgPT09IFwiRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGVcIiB8fFxuICAgICAgICAoKF9iID0gc2VsZi5jb25zdHJ1Y3RvcikgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLm5hbWUpID09PSBcIlNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZVwiIHx8XG4gICAgICAgICgoX2MgPSBzZWxmLmNvbnN0cnVjdG9yKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MubmFtZSkgPT09IFwiU2hhcmVkV29ya2VyR2xvYmFsU2NvcGVcIik7XG4vKipcbiAqIEEgY29uc3RhbnQgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgZW52aXJvbm1lbnQgdGhlIGNvZGUgaXMgcnVubmluZyBpcyBEZW5vLlxuICovXG5leHBvcnRzLmlzRGVubyA9IHR5cGVvZiBEZW5vICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgdHlwZW9mIERlbm8udmVyc2lvbiAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgIHR5cGVvZiBEZW5vLnZlcnNpb24uZGVubyAhPT0gXCJ1bmRlZmluZWRcIjtcbi8qKlxuICogQSBjb25zdGFudCB0aGF0IGluZGljYXRlcyB3aGV0aGVyIHRoZSBlbnZpcm9ubWVudCB0aGUgY29kZSBpcyBydW5uaW5nIGlzIEJ1bi5zaC5cbiAqL1xuZXhwb3J0cy5pc0J1biA9IHR5cGVvZiBCdW4gIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIEJ1bi52ZXJzaW9uICE9PSBcInVuZGVmaW5lZFwiO1xuLyoqXG4gKiBBIGNvbnN0YW50IHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGVudmlyb25tZW50IHRoZSBjb2RlIGlzIHJ1bm5pbmcgaXMgYSBOb2RlLmpzIGNvbXBhdGlibGUgZW52aXJvbm1lbnQuXG4gKi9cbmV4cG9ydHMuaXNOb2RlTGlrZSA9IHR5cGVvZiBnbG9iYWxUaGlzLnByb2Nlc3MgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICBCb29sZWFuKGdsb2JhbFRoaXMucHJvY2Vzcy52ZXJzaW9uKSAmJlxuICAgIEJvb2xlYW4oKF9kID0gZ2xvYmFsVGhpcy5wcm9jZXNzLnZlcnNpb25zKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Qubm9kZSk7XG4vKipcbiAqIEEgY29uc3RhbnQgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgZW52aXJvbm1lbnQgdGhlIGNvZGUgaXMgcnVubmluZyBpcyBhIE5vZGUuanMgY29tcGF0aWJsZSBlbnZpcm9ubWVudC5cbiAqIEBkZXByZWNhdGVkIFVzZSBgaXNOb2RlTGlrZWAgaW5zdGVhZC5cbiAqL1xuZXhwb3J0cy5pc05vZGUgPSBleHBvcnRzLmlzTm9kZUxpa2U7XG4vKipcbiAqIEEgY29uc3RhbnQgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgZW52aXJvbm1lbnQgdGhlIGNvZGUgaXMgcnVubmluZyBpcyBOb2RlLkpTLlxuICovXG5leHBvcnRzLmlzTm9kZVJ1bnRpbWUgPSBleHBvcnRzLmlzTm9kZUxpa2UgJiYgIWV4cG9ydHMuaXNCdW4gJiYgIWV4cG9ydHMuaXNEZW5vO1xuLyoqXG4gKiBBIGNvbnN0YW50IHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGVudmlyb25tZW50IHRoZSBjb2RlIGlzIHJ1bm5pbmcgaXMgaW4gUmVhY3QtTmF0aXZlLlxuICovXG4vLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QtbmF0aXZlL2Jsb2IvbWFpbi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0NvcmUvc2V0VXBOYXZpZ2F0b3IuanNcbmV4cG9ydHMuaXNSZWFjdE5hdGl2ZSA9IHR5cGVvZiBuYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCIgJiYgKG5hdmlnYXRvciA9PT0gbnVsbCB8fCBuYXZpZ2F0b3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG5hdmlnYXRvci5wcm9kdWN0KSA9PT0gXCJSZWFjdE5hdGl2ZVwiO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y2hlY2tFbnZpcm9ubWVudC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnVpbnQ4QXJyYXlUb1N0cmluZyA9IHVpbnQ4QXJyYXlUb1N0cmluZztcbmV4cG9ydHMuc3RyaW5nVG9VaW50OEFycmF5ID0gc3RyaW5nVG9VaW50OEFycmF5O1xuLyoqXG4gKiBUaGUgaGVscGVyIHRoYXQgdHJhbnNmb3JtcyBieXRlcyB3aXRoIHNwZWNpZmljIGNoYXJhY3RlciBlbmNvZGluZyBpbnRvIHN0cmluZ1xuICogQHBhcmFtIGJ5dGVzIC0gdGhlIHVpbnQ4YXJyYXkgYnl0ZXNcbiAqIEBwYXJhbSBmb3JtYXQgLSB0aGUgZm9ybWF0IHdlIHVzZSB0byBlbmNvZGUgdGhlIGJ5dGVcbiAqIEByZXR1cm5zIGEgc3RyaW5nIG9mIHRoZSBlbmNvZGVkIHN0cmluZ1xuICovXG5mdW5jdGlvbiB1aW50OEFycmF5VG9TdHJpbmcoYnl0ZXMsIGZvcm1hdCkge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShieXRlcykudG9TdHJpbmcoZm9ybWF0KTtcbn1cbi8qKlxuICogVGhlIGhlbHBlciB0aGF0IHRyYW5zZm9ybXMgc3RyaW5nIHRvIHNwZWNpZmljIGNoYXJhY3RlciBlbmNvZGVkIGJ5dGVzIGFycmF5LlxuICogQHBhcmFtIHZhbHVlIC0gdGhlIHN0cmluZyB0byBiZSBjb252ZXJ0ZWRcbiAqIEBwYXJhbSBmb3JtYXQgLSB0aGUgZm9ybWF0IHdlIHVzZSB0byBkZWNvZGUgdGhlIHZhbHVlXG4gKiBAcmV0dXJucyBhIHVpbnQ4YXJyYXlcbiAqL1xuZnVuY3Rpb24gc3RyaW5nVG9VaW50OEFycmF5KHZhbHVlLCBmb3JtYXQpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20odmFsdWUsIGZvcm1hdCk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ieXRlc0VuY29kaW5nLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc3RyaW5nVG9VaW50OEFycmF5ID0gZXhwb3J0cy51aW50OEFycmF5VG9TdHJpbmcgPSBleHBvcnRzLmlzV2ViV29ya2VyID0gZXhwb3J0cy5pc1JlYWN0TmF0aXZlID0gZXhwb3J0cy5pc0Rlbm8gPSBleHBvcnRzLmlzTm9kZVJ1bnRpbWUgPSBleHBvcnRzLmlzTm9kZUxpa2UgPSBleHBvcnRzLmlzTm9kZSA9IGV4cG9ydHMuaXNCdW4gPSBleHBvcnRzLmlzQnJvd3NlciA9IGV4cG9ydHMucmFuZG9tVVVJRCA9IGV4cG9ydHMub2JqZWN0SGFzUHJvcGVydHkgPSBleHBvcnRzLmlzT2JqZWN0V2l0aFByb3BlcnRpZXMgPSBleHBvcnRzLmlzRGVmaW5lZCA9IGV4cG9ydHMuY29tcHV0ZVNoYTI1NkhtYWMgPSBleHBvcnRzLmNvbXB1dGVTaGEyNTZIYXNoID0gZXhwb3J0cy5nZXRFcnJvck1lc3NhZ2UgPSBleHBvcnRzLmlzRXJyb3IgPSBleHBvcnRzLmlzT2JqZWN0ID0gZXhwb3J0cy5nZXRSYW5kb21JbnRlZ2VySW5jbHVzaXZlID0gZXhwb3J0cy5jcmVhdGVBYm9ydGFibGVQcm9taXNlID0gZXhwb3J0cy5jYW5jZWxhYmxlUHJvbWlzZVJhY2UgPSBleHBvcnRzLmNhbGN1bGF0ZVJldHJ5RGVsYXkgPSBleHBvcnRzLmRlbGF5ID0gdm9pZCAwO1xudmFyIGRlbGF5X2pzXzEgPSByZXF1aXJlKFwiLi9kZWxheS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlbGF5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkZWxheV9qc18xLmRlbGF5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY2FsY3VsYXRlUmV0cnlEZWxheVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZGVsYXlfanNfMS5jYWxjdWxhdGVSZXRyeURlbGF5OyB9IH0pO1xudmFyIGFib3J0ZXJVdGlsc19qc18xID0gcmVxdWlyZShcIi4vYWJvcnRlclV0aWxzLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY2FuY2VsYWJsZVByb21pc2VSYWNlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBhYm9ydGVyVXRpbHNfanNfMS5jYW5jZWxhYmxlUHJvbWlzZVJhY2U7IH0gfSk7XG52YXIgY3JlYXRlQWJvcnRhYmxlUHJvbWlzZV9qc18xID0gcmVxdWlyZShcIi4vY3JlYXRlQWJvcnRhYmxlUHJvbWlzZS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUFib3J0YWJsZVByb21pc2VcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNyZWF0ZUFib3J0YWJsZVByb21pc2VfanNfMS5jcmVhdGVBYm9ydGFibGVQcm9taXNlOyB9IH0pO1xudmFyIHJhbmRvbV9qc18xID0gcmVxdWlyZShcIi4vcmFuZG9tLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZ2V0UmFuZG9tSW50ZWdlckluY2x1c2l2ZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmFuZG9tX2pzXzEuZ2V0UmFuZG9tSW50ZWdlckluY2x1c2l2ZTsgfSB9KTtcbnZhciBvYmplY3RfanNfMSA9IHJlcXVpcmUoXCIuL29iamVjdC5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzT2JqZWN0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBvYmplY3RfanNfMS5pc09iamVjdDsgfSB9KTtcbnZhciBlcnJvcl9qc18xID0gcmVxdWlyZShcIi4vZXJyb3IuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0Vycm9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBlcnJvcl9qc18xLmlzRXJyb3I7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnZXRFcnJvck1lc3NhZ2VcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGVycm9yX2pzXzEuZ2V0RXJyb3JNZXNzYWdlOyB9IH0pO1xudmFyIHNoYTI1Nl9qc18xID0gcmVxdWlyZShcIi4vc2hhMjU2LmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29tcHV0ZVNoYTI1Nkhhc2hcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNoYTI1Nl9qc18xLmNvbXB1dGVTaGEyNTZIYXNoOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29tcHV0ZVNoYTI1NkhtYWNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNoYTI1Nl9qc18xLmNvbXB1dGVTaGEyNTZIbWFjOyB9IH0pO1xudmFyIHR5cGVHdWFyZHNfanNfMSA9IHJlcXVpcmUoXCIuL3R5cGVHdWFyZHMuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0RlZmluZWRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHR5cGVHdWFyZHNfanNfMS5pc0RlZmluZWQ7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc09iamVjdFdpdGhQcm9wZXJ0aWVzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0eXBlR3VhcmRzX2pzXzEuaXNPYmplY3RXaXRoUHJvcGVydGllczsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm9iamVjdEhhc1Byb3BlcnR5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0eXBlR3VhcmRzX2pzXzEub2JqZWN0SGFzUHJvcGVydHk7IH0gfSk7XG52YXIgdXVpZFV0aWxzX2pzXzEgPSByZXF1aXJlKFwiLi91dWlkVXRpbHMuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyYW5kb21VVUlEXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB1dWlkVXRpbHNfanNfMS5yYW5kb21VVUlEOyB9IH0pO1xudmFyIGNoZWNrRW52aXJvbm1lbnRfanNfMSA9IHJlcXVpcmUoXCIuL2NoZWNrRW52aXJvbm1lbnQuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0Jyb3dzZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNoZWNrRW52aXJvbm1lbnRfanNfMS5pc0Jyb3dzZXI7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0J1blwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY2hlY2tFbnZpcm9ubWVudF9qc18xLmlzQnVuOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNOb2RlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjaGVja0Vudmlyb25tZW50X2pzXzEuaXNOb2RlOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNOb2RlTGlrZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY2hlY2tFbnZpcm9ubWVudF9qc18xLmlzTm9kZUxpa2U7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc05vZGVSdW50aW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjaGVja0Vudmlyb25tZW50X2pzXzEuaXNOb2RlUnVudGltZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzRGVub1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY2hlY2tFbnZpcm9ubWVudF9qc18xLmlzRGVubzsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzUmVhY3ROYXRpdmVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNoZWNrRW52aXJvbm1lbnRfanNfMS5pc1JlYWN0TmF0aXZlOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNXZWJXb3JrZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNoZWNrRW52aXJvbm1lbnRfanNfMS5pc1dlYldvcmtlcjsgfSB9KTtcbnZhciBieXRlc0VuY29kaW5nX2pzXzEgPSByZXF1aXJlKFwiLi9ieXRlc0VuY29kaW5nLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidWludDhBcnJheVRvU3RyaW5nXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBieXRlc0VuY29kaW5nX2pzXzEudWludDhBcnJheVRvU3RyaW5nOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3RyaW5nVG9VaW50OEFycmF5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBieXRlc0VuY29kaW5nX2pzXzEuc3RyaW5nVG9VaW50OEFycmF5OyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TYW5pdGl6ZXIgPSB2b2lkIDA7XG5jb25zdCBjb3JlX3V0aWxfMSA9IHJlcXVpcmUoXCJAYXp1cmUvY29yZS11dGlsXCIpO1xuY29uc3QgUmVkYWN0ZWRTdHJpbmcgPSBcIlJFREFDVEVEXCI7XG4vLyBNYWtlIHN1cmUgdGhpcyBsaXN0IGlzIHVwLXRvLWRhdGUgd2l0aCB0aGUgb25lIHVuZGVyIGNvcmUvbG9nZ2VyL1JlYWRtZSNLZXljb25jZXB0c1xuY29uc3QgZGVmYXVsdEFsbG93ZWRIZWFkZXJOYW1lcyA9IFtcbiAgICBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICBcIngtbXMtcmV0dXJuLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgXCJ4LW1zLXVzZXJhZ2VudFwiLFxuICAgIFwieC1tcy1jb3JyZWxhdGlvbi1yZXF1ZXN0LWlkXCIsXG4gICAgXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICBcImNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgXCJtcy1jdlwiLFxuICAgIFwicmV0dXJuLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgXCJ0cmFjZXBhcmVudFwiLFxuICAgIFwiQWNjZXNzLUNvbnRyb2wtQWxsb3ctQ3JlZGVudGlhbHNcIixcbiAgICBcIkFjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnNcIixcbiAgICBcIkFjY2Vzcy1Db250cm9sLUFsbG93LU1ldGhvZHNcIixcbiAgICBcIkFjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpblwiLFxuICAgIFwiQWNjZXNzLUNvbnRyb2wtRXhwb3NlLUhlYWRlcnNcIixcbiAgICBcIkFjY2Vzcy1Db250cm9sLU1heC1BZ2VcIixcbiAgICBcIkFjY2Vzcy1Db250cm9sLVJlcXVlc3QtSGVhZGVyc1wiLFxuICAgIFwiQWNjZXNzLUNvbnRyb2wtUmVxdWVzdC1NZXRob2RcIixcbiAgICBcIk9yaWdpblwiLFxuICAgIFwiQWNjZXB0XCIsXG4gICAgXCJBY2NlcHQtRW5jb2RpbmdcIixcbiAgICBcIkNhY2hlLUNvbnRyb2xcIixcbiAgICBcIkNvbm5lY3Rpb25cIixcbiAgICBcIkNvbnRlbnQtTGVuZ3RoXCIsXG4gICAgXCJDb250ZW50LVR5cGVcIixcbiAgICBcIkRhdGVcIixcbiAgICBcIkVUYWdcIixcbiAgICBcIkV4cGlyZXNcIixcbiAgICBcIklmLU1hdGNoXCIsXG4gICAgXCJJZi1Nb2RpZmllZC1TaW5jZVwiLFxuICAgIFwiSWYtTm9uZS1NYXRjaFwiLFxuICAgIFwiSWYtVW5tb2RpZmllZC1TaW5jZVwiLFxuICAgIFwiTGFzdC1Nb2RpZmllZFwiLFxuICAgIFwiUHJhZ21hXCIsXG4gICAgXCJSZXF1ZXN0LUlkXCIsXG4gICAgXCJSZXRyeS1BZnRlclwiLFxuICAgIFwiU2VydmVyXCIsXG4gICAgXCJUcmFuc2Zlci1FbmNvZGluZ1wiLFxuICAgIFwiVXNlci1BZ2VudFwiLFxuICAgIFwiV1dXLUF1dGhlbnRpY2F0ZVwiLFxuXTtcbmNvbnN0IGRlZmF1bHRBbGxvd2VkUXVlcnlQYXJhbWV0ZXJzID0gW1wiYXBpLXZlcnNpb25cIl07XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5jbGFzcyBTYW5pdGl6ZXIge1xuICAgIGNvbnN0cnVjdG9yKHsgYWRkaXRpb25hbEFsbG93ZWRIZWFkZXJOYW1lczogYWxsb3dlZEhlYWRlck5hbWVzID0gW10sIGFkZGl0aW9uYWxBbGxvd2VkUXVlcnlQYXJhbWV0ZXJzOiBhbGxvd2VkUXVlcnlQYXJhbWV0ZXJzID0gW10sIH0gPSB7fSkge1xuICAgICAgICBhbGxvd2VkSGVhZGVyTmFtZXMgPSBkZWZhdWx0QWxsb3dlZEhlYWRlck5hbWVzLmNvbmNhdChhbGxvd2VkSGVhZGVyTmFtZXMpO1xuICAgICAgICBhbGxvd2VkUXVlcnlQYXJhbWV0ZXJzID0gZGVmYXVsdEFsbG93ZWRRdWVyeVBhcmFtZXRlcnMuY29uY2F0KGFsbG93ZWRRdWVyeVBhcmFtZXRlcnMpO1xuICAgICAgICB0aGlzLmFsbG93ZWRIZWFkZXJOYW1lcyA9IG5ldyBTZXQoYWxsb3dlZEhlYWRlck5hbWVzLm1hcCgobikgPT4gbi50b0xvd2VyQ2FzZSgpKSk7XG4gICAgICAgIHRoaXMuYWxsb3dlZFF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBTZXQoYWxsb3dlZFF1ZXJ5UGFyYW1ldGVycy5tYXAoKHApID0+IHAudG9Mb3dlckNhc2UoKSkpO1xuICAgIH1cbiAgICBzYW5pdGl6ZShvYmopIHtcbiAgICAgICAgY29uc3Qgc2VlbiA9IG5ldyBTZXQoKTtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iaiwgKGtleSwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgIC8vIEVuc3VyZSBFcnJvcnMgaW5jbHVkZSB0aGVpciBpbnRlcmVzdGluZyBub24tZW51bWVyYWJsZSBtZW1iZXJzXG4gICAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHZhbHVlKSwgeyBuYW1lOiB2YWx1ZS5uYW1lLCBtZXNzYWdlOiB2YWx1ZS5tZXNzYWdlIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGtleSA9PT0gXCJoZWFkZXJzXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZUhlYWRlcnModmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoa2V5ID09PSBcInVybFwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2FuaXRpemVVcmwodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoa2V5ID09PSBcInF1ZXJ5XCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZVF1ZXJ5KHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSA9PT0gXCJib2R5XCIpIHtcbiAgICAgICAgICAgICAgICAvLyBEb24ndCBsb2cgdGhlIHJlcXVlc3QgYm9keVxuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChrZXkgPT09IFwicmVzcG9uc2VcIikge1xuICAgICAgICAgICAgICAgIC8vIERvbid0IGxvZyByZXNwb25zZSBhZ2FpblxuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChrZXkgPT09IFwib3BlcmF0aW9uU3BlY1wiKSB7XG4gICAgICAgICAgICAgICAgLy8gV2hlbiB1c2luZyBzZW5kT3BlcmF0aW9uUmVxdWVzdCwgdGhlIHJlcXVlc3QgY2FycmllcyBhIG1hc3NpdmVcbiAgICAgICAgICAgICAgICAvLyBmaWVsZCB3aXRoIHRoZSBhdXRvcmVzdCBzcGVjLiBObyBuZWVkIHRvIGxvZyBpdC5cbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgfHwgKDAsIGNvcmVfdXRpbF8xLmlzT2JqZWN0KSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2Vlbi5oYXModmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcIltDaXJjdWxhcl1cIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2Vlbi5hZGQodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9LCAyKTtcbiAgICB9XG4gICAgc2FuaXRpemVVcmwodmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJzdHJpbmdcIiB8fCB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gXCJcIikge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwodmFsdWUpO1xuICAgICAgICBpZiAoIXVybC5zZWFyY2gpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IFtrZXldIG9mIHVybC5zZWFyY2hQYXJhbXMpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5hbGxvd2VkUXVlcnlQYXJhbWV0ZXJzLmhhcyhrZXkudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgICAgICB1cmwuc2VhcmNoUGFyYW1zLnNldChrZXksIFJlZGFjdGVkU3RyaW5nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdXJsLnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIHNhbml0aXplSGVhZGVycyhvYmopIHtcbiAgICAgICAgY29uc3Qgc2FuaXRpemVkID0ge307XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG9iaikpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmFsbG93ZWRIZWFkZXJOYW1lcy5oYXMoa2V5LnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICAgICAgc2FuaXRpemVkW2tleV0gPSBvYmpba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHNhbml0aXplZFtrZXldID0gUmVkYWN0ZWRTdHJpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNhbml0aXplZDtcbiAgICB9XG4gICAgc2FuaXRpemVRdWVyeSh2YWx1ZSkge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2FuaXRpemVkID0ge307XG4gICAgICAgIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmFsbG93ZWRRdWVyeVBhcmFtZXRlcnMuaGFzKGsudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgICAgICBzYW5pdGl6ZWRba10gPSB2YWx1ZVtrXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHNhbml0aXplZFtrXSA9IFJlZGFjdGVkU3RyaW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzYW5pdGl6ZWQ7XG4gICAgfVxufVxuZXhwb3J0cy5TYW5pdGl6ZXIgPSBTYW5pdGl6ZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zYW5pdGl6ZXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5sb2dQb2xpY3lOYW1lID0gdm9pZCAwO1xuZXhwb3J0cy5sb2dQb2xpY3kgPSBsb2dQb2xpY3k7XG5jb25zdCBsb2dfanNfMSA9IHJlcXVpcmUoXCIuLi9sb2cuanNcIik7XG5jb25zdCBzYW5pdGl6ZXJfanNfMSA9IHJlcXVpcmUoXCIuLi91dGlsL3Nhbml0aXplci5qc1wiKTtcbi8qKlxuICogVGhlIHByb2dyYW1tYXRpYyBpZGVudGlmaWVyIG9mIHRoZSBsb2dQb2xpY3kuXG4gKi9cbmV4cG9ydHMubG9nUG9saWN5TmFtZSA9IFwibG9nUG9saWN5XCI7XG4vKipcbiAqIEEgcG9saWN5IHRoYXQgbG9ncyBhbGwgcmVxdWVzdHMgYW5kIHJlc3BvbnNlcy5cbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBjb25maWd1cmUgbG9nUG9saWN5LlxuICovXG5mdW5jdGlvbiBsb2dQb2xpY3kob3B0aW9ucyA9IHt9KSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IGxvZ2dlciA9IChfYSA9IG9wdGlvbnMubG9nZ2VyKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBsb2dfanNfMS5sb2dnZXIuaW5mbztcbiAgICBjb25zdCBzYW5pdGl6ZXIgPSBuZXcgc2FuaXRpemVyX2pzXzEuU2FuaXRpemVyKHtcbiAgICAgICAgYWRkaXRpb25hbEFsbG93ZWRIZWFkZXJOYW1lczogb3B0aW9ucy5hZGRpdGlvbmFsQWxsb3dlZEhlYWRlck5hbWVzLFxuICAgICAgICBhZGRpdGlvbmFsQWxsb3dlZFF1ZXJ5UGFyYW1ldGVyczogb3B0aW9ucy5hZGRpdGlvbmFsQWxsb3dlZFF1ZXJ5UGFyYW1ldGVycyxcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBleHBvcnRzLmxvZ1BvbGljeU5hbWUsXG4gICAgICAgIGFzeW5jIHNlbmRSZXF1ZXN0KHJlcXVlc3QsIG5leHQpIHtcbiAgICAgICAgICAgIGlmICghbG9nZ2VyLmVuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dChyZXF1ZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxvZ2dlcihgUmVxdWVzdDogJHtzYW5pdGl6ZXIuc2FuaXRpemUocmVxdWVzdCl9YCk7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG5leHQocmVxdWVzdCk7XG4gICAgICAgICAgICBsb2dnZXIoYFJlc3BvbnNlIHN0YXR1cyBjb2RlOiAke3Jlc3BvbnNlLnN0YXR1c31gKTtcbiAgICAgICAgICAgIGxvZ2dlcihgSGVhZGVyczogJHtzYW5pdGl6ZXIuc2FuaXRpemUocmVzcG9uc2UuaGVhZGVycyl9YCk7XG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxvZ1BvbGljeS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlZGlyZWN0UG9saWN5TmFtZSA9IHZvaWQgMDtcbmV4cG9ydHMucmVkaXJlY3RQb2xpY3kgPSByZWRpcmVjdFBvbGljeTtcbi8qKlxuICogVGhlIHByb2dyYW1tYXRpYyBpZGVudGlmaWVyIG9mIHRoZSByZWRpcmVjdFBvbGljeS5cbiAqL1xuZXhwb3J0cy5yZWRpcmVjdFBvbGljeU5hbWUgPSBcInJlZGlyZWN0UG9saWN5XCI7XG4vKipcbiAqIE1ldGhvZHMgdGhhdCBhcmUgYWxsb3dlZCB0byBmb2xsb3cgcmVkaXJlY3RzIDMwMSBhbmQgMzAyXG4gKi9cbmNvbnN0IGFsbG93ZWRSZWRpcmVjdCA9IFtcIkdFVFwiLCBcIkhFQURcIl07XG4vKipcbiAqIEEgcG9saWN5IHRvIGZvbGxvdyBMb2NhdGlvbiBoZWFkZXJzIGZyb20gdGhlIHNlcnZlciBpbiBvcmRlclxuICogdG8gc3VwcG9ydCBzZXJ2ZXItc2lkZSByZWRpcmVjdGlvbi5cbiAqIEluIHRoZSBicm93c2VyLCB0aGlzIHBvbGljeSBpcyBub3QgdXNlZC5cbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBjb250cm9sIHBvbGljeSBiZWhhdmlvci5cbiAqL1xuZnVuY3Rpb24gcmVkaXJlY3RQb2xpY3kob3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgeyBtYXhSZXRyaWVzID0gMjAgfSA9IG9wdGlvbnM7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogZXhwb3J0cy5yZWRpcmVjdFBvbGljeU5hbWUsXG4gICAgICAgIGFzeW5jIHNlbmRSZXF1ZXN0KHJlcXVlc3QsIG5leHQpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgbmV4dChyZXF1ZXN0KTtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVSZWRpcmVjdChuZXh0LCByZXNwb25zZSwgbWF4UmV0cmllcyk7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZVJlZGlyZWN0KG5leHQsIHJlc3BvbnNlLCBtYXhSZXRyaWVzLCBjdXJyZW50UmV0cmllcyA9IDApIHtcbiAgICBjb25zdCB7IHJlcXVlc3QsIHN0YXR1cywgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgY29uc3QgbG9jYXRpb25IZWFkZXIgPSBoZWFkZXJzLmdldChcImxvY2F0aW9uXCIpO1xuICAgIGlmIChsb2NhdGlvbkhlYWRlciAmJlxuICAgICAgICAoc3RhdHVzID09PSAzMDAgfHxcbiAgICAgICAgICAgIChzdGF0dXMgPT09IDMwMSAmJiBhbGxvd2VkUmVkaXJlY3QuaW5jbHVkZXMocmVxdWVzdC5tZXRob2QpKSB8fFxuICAgICAgICAgICAgKHN0YXR1cyA9PT0gMzAyICYmIGFsbG93ZWRSZWRpcmVjdC5pbmNsdWRlcyhyZXF1ZXN0Lm1ldGhvZCkpIHx8XG4gICAgICAgICAgICAoc3RhdHVzID09PSAzMDMgJiYgcmVxdWVzdC5tZXRob2QgPT09IFwiUE9TVFwiKSB8fFxuICAgICAgICAgICAgc3RhdHVzID09PSAzMDcpICYmXG4gICAgICAgIGN1cnJlbnRSZXRyaWVzIDwgbWF4UmV0cmllcykge1xuICAgICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKGxvY2F0aW9uSGVhZGVyLCByZXF1ZXN0LnVybCk7XG4gICAgICAgIHJlcXVlc3QudXJsID0gdXJsLnRvU3RyaW5nKCk7XG4gICAgICAgIC8vIFBPU1QgcmVxdWVzdCB3aXRoIFN0YXR1cyBjb2RlIDMwMyBzaG91bGQgYmUgY29udmVydGVkIGludG8gYVxuICAgICAgICAvLyByZWRpcmVjdGVkIEdFVCByZXF1ZXN0IGlmIHRoZSByZWRpcmVjdCB1cmwgaXMgcHJlc2VudCBpbiB0aGUgbG9jYXRpb24gaGVhZGVyXG4gICAgICAgIGlmIChzdGF0dXMgPT09IDMwMykge1xuICAgICAgICAgICAgcmVxdWVzdC5tZXRob2QgPSBcIkdFVFwiO1xuICAgICAgICAgICAgcmVxdWVzdC5oZWFkZXJzLmRlbGV0ZShcIkNvbnRlbnQtTGVuZ3RoXCIpO1xuICAgICAgICAgICAgZGVsZXRlIHJlcXVlc3QuYm9keTtcbiAgICAgICAgfVxuICAgICAgICByZXF1ZXN0LmhlYWRlcnMuZGVsZXRlKFwiQXV0aG9yaXphdGlvblwiKTtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgbmV4dChyZXF1ZXN0KTtcbiAgICAgICAgcmV0dXJuIGhhbmRsZVJlZGlyZWN0KG5leHQsIHJlcywgbWF4UmV0cmllcywgY3VycmVudFJldHJpZXMgKyAxKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3BvbnNlO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVkaXJlY3RQb2xpY3kuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRIZWFkZXJOYW1lID0gZ2V0SGVhZGVyTmFtZTtcbmV4cG9ydHMuc2V0UGxhdGZvcm1TcGVjaWZpY0RhdGEgPSBzZXRQbGF0Zm9ybVNwZWNpZmljRGF0YTtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG5jb25zdCBvcyA9IHRzbGliXzEuX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJub2RlOm9zXCIpKTtcbmNvbnN0IHByb2Nlc3MgPSB0c2xpYl8xLl9faW1wb3J0U3RhcihyZXF1aXJlKFwibm9kZTpwcm9jZXNzXCIpKTtcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIGdldEhlYWRlck5hbWUoKSB7XG4gICAgcmV0dXJuIFwiVXNlci1BZ2VudFwiO1xufVxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuYXN5bmMgZnVuY3Rpb24gc2V0UGxhdGZvcm1TcGVjaWZpY0RhdGEobWFwKSB7XG4gICAgaWYgKHByb2Nlc3MgJiYgcHJvY2Vzcy52ZXJzaW9ucykge1xuICAgICAgICBjb25zdCB2ZXJzaW9ucyA9IHByb2Nlc3MudmVyc2lvbnM7XG4gICAgICAgIGlmICh2ZXJzaW9ucy5idW4pIHtcbiAgICAgICAgICAgIG1hcC5zZXQoXCJCdW5cIiwgdmVyc2lvbnMuYnVuKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2ZXJzaW9ucy5kZW5vKSB7XG4gICAgICAgICAgICBtYXAuc2V0KFwiRGVub1wiLCB2ZXJzaW9ucy5kZW5vKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2ZXJzaW9ucy5ub2RlKSB7XG4gICAgICAgICAgICBtYXAuc2V0KFwiTm9kZVwiLCB2ZXJzaW9ucy5ub2RlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBtYXAuc2V0KFwiT1NcIiwgYCgke29zLmFyY2goKX0tJHtvcy50eXBlKCl9LSR7b3MucmVsZWFzZSgpfSlgKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzZXJBZ2VudFBsYXRmb3JtLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuREVGQVVMVF9SRVRSWV9QT0xJQ1lfQ09VTlQgPSBleHBvcnRzLlNES19WRVJTSU9OID0gdm9pZCAwO1xuZXhwb3J0cy5TREtfVkVSU0lPTiA9IFwiMS4xNy4wXCI7XG5leHBvcnRzLkRFRkFVTFRfUkVUUllfUE9MSUNZX0NPVU5UID0gMztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0YW50cy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldFVzZXJBZ2VudEhlYWRlck5hbWUgPSBnZXRVc2VyQWdlbnRIZWFkZXJOYW1lO1xuZXhwb3J0cy5nZXRVc2VyQWdlbnRWYWx1ZSA9IGdldFVzZXJBZ2VudFZhbHVlO1xuY29uc3QgdXNlckFnZW50UGxhdGZvcm1fanNfMSA9IHJlcXVpcmUoXCIuL3VzZXJBZ2VudFBsYXRmb3JtLmpzXCIpO1xuY29uc3QgY29uc3RhbnRzX2pzXzEgPSByZXF1aXJlKFwiLi4vY29uc3RhbnRzLmpzXCIpO1xuZnVuY3Rpb24gZ2V0VXNlckFnZW50U3RyaW5nKHRlbGVtZXRyeUluZm8pIHtcbiAgICBjb25zdCBwYXJ0cyA9IFtdO1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHRlbGVtZXRyeUluZm8pIHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSB2YWx1ZSA/IGAke2tleX0vJHt2YWx1ZX1gIDoga2V5O1xuICAgICAgICBwYXJ0cy5wdXNoKHRva2VuKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnRzLmpvaW4oXCIgXCIpO1xufVxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gZ2V0VXNlckFnZW50SGVhZGVyTmFtZSgpIHtcbiAgICByZXR1cm4gKDAsIHVzZXJBZ2VudFBsYXRmb3JtX2pzXzEuZ2V0SGVhZGVyTmFtZSkoKTtcbn1cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFVzZXJBZ2VudFZhbHVlKHByZWZpeCkge1xuICAgIGNvbnN0IHJ1bnRpbWVJbmZvID0gbmV3IE1hcCgpO1xuICAgIHJ1bnRpbWVJbmZvLnNldChcImNvcmUtcmVzdC1waXBlbGluZVwiLCBjb25zdGFudHNfanNfMS5TREtfVkVSU0lPTik7XG4gICAgYXdhaXQgKDAsIHVzZXJBZ2VudFBsYXRmb3JtX2pzXzEuc2V0UGxhdGZvcm1TcGVjaWZpY0RhdGEpKHJ1bnRpbWVJbmZvKTtcbiAgICBjb25zdCBkZWZhdWx0QWdlbnQgPSBnZXRVc2VyQWdlbnRTdHJpbmcocnVudGltZUluZm8pO1xuICAgIGNvbnN0IHVzZXJBZ2VudFZhbHVlID0gcHJlZml4ID8gYCR7cHJlZml4fSAke2RlZmF1bHRBZ2VudH1gIDogZGVmYXVsdEFnZW50O1xuICAgIHJldHVybiB1c2VyQWdlbnRWYWx1ZTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzZXJBZ2VudC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnVzZXJBZ2VudFBvbGljeU5hbWUgPSB2b2lkIDA7XG5leHBvcnRzLnVzZXJBZ2VudFBvbGljeSA9IHVzZXJBZ2VudFBvbGljeTtcbmNvbnN0IHVzZXJBZ2VudF9qc18xID0gcmVxdWlyZShcIi4uL3V0aWwvdXNlckFnZW50LmpzXCIpO1xuY29uc3QgVXNlckFnZW50SGVhZGVyTmFtZSA9ICgwLCB1c2VyQWdlbnRfanNfMS5nZXRVc2VyQWdlbnRIZWFkZXJOYW1lKSgpO1xuLyoqXG4gKiBUaGUgcHJvZ3JhbW1hdGljIGlkZW50aWZpZXIgb2YgdGhlIHVzZXJBZ2VudFBvbGljeS5cbiAqL1xuZXhwb3J0cy51c2VyQWdlbnRQb2xpY3lOYW1lID0gXCJ1c2VyQWdlbnRQb2xpY3lcIjtcbi8qKlxuICogQSBwb2xpY3kgdGhhdCBzZXRzIHRoZSBVc2VyLUFnZW50IGhlYWRlciAob3IgZXF1aXZhbGVudCkgdG8gcmVmbGVjdFxuICogdGhlIGxpYnJhcnkgdmVyc2lvbi5cbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBjdXN0b21pemUgdGhlIHVzZXIgYWdlbnQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHVzZXJBZ2VudFBvbGljeShvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCB1c2VyQWdlbnRWYWx1ZSA9ICgwLCB1c2VyQWdlbnRfanNfMS5nZXRVc2VyQWdlbnRWYWx1ZSkob3B0aW9ucy51c2VyQWdlbnRQcmVmaXgpO1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGV4cG9ydHMudXNlckFnZW50UG9saWN5TmFtZSxcbiAgICAgICAgYXN5bmMgc2VuZFJlcXVlc3QocmVxdWVzdCwgbmV4dCkge1xuICAgICAgICAgICAgaWYgKCFyZXF1ZXN0LmhlYWRlcnMuaGFzKFVzZXJBZ2VudEhlYWRlck5hbWUpKSB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdC5oZWFkZXJzLnNldChVc2VyQWdlbnRIZWFkZXJOYW1lLCBhd2FpdCB1c2VyQWdlbnRWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV4dChyZXF1ZXN0KTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXNlckFnZW50UG9saWN5LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNOb2RlUmVhZGFibGVTdHJlYW0gPSBpc05vZGVSZWFkYWJsZVN0cmVhbTtcbmV4cG9ydHMuaXNXZWJSZWFkYWJsZVN0cmVhbSA9IGlzV2ViUmVhZGFibGVTdHJlYW07XG5leHBvcnRzLmlzUmVhZGFibGVTdHJlYW0gPSBpc1JlYWRhYmxlU3RyZWFtO1xuZXhwb3J0cy5pc0Jsb2IgPSBpc0Jsb2I7XG5mdW5jdGlvbiBpc05vZGVSZWFkYWJsZVN0cmVhbSh4KSB7XG4gICAgcmV0dXJuIEJvb2xlYW4oeCAmJiB0eXBlb2YgeFtcInBpcGVcIl0gPT09IFwiZnVuY3Rpb25cIik7XG59XG5mdW5jdGlvbiBpc1dlYlJlYWRhYmxlU3RyZWFtKHgpIHtcbiAgICByZXR1cm4gQm9vbGVhbih4ICYmXG4gICAgICAgIHR5cGVvZiB4LmdldFJlYWRlciA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgICAgIHR5cGVvZiB4LnRlZSA9PT0gXCJmdW5jdGlvblwiKTtcbn1cbmZ1bmN0aW9uIGlzUmVhZGFibGVTdHJlYW0oeCkge1xuICAgIHJldHVybiBpc05vZGVSZWFkYWJsZVN0cmVhbSh4KSB8fCBpc1dlYlJlYWRhYmxlU3RyZWFtKHgpO1xufVxuZnVuY3Rpb24gaXNCbG9iKHgpIHtcbiAgICByZXR1cm4gdHlwZW9mIHguc3RyZWFtID09PSBcImZ1bmN0aW9uXCI7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD10eXBlR3VhcmRzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0UmF3Q29udGVudCA9IGdldFJhd0NvbnRlbnQ7XG5leHBvcnRzLmNyZWF0ZUZpbGVGcm9tU3RyZWFtID0gY3JlYXRlRmlsZUZyb21TdHJlYW07XG5leHBvcnRzLmNyZWF0ZUZpbGUgPSBjcmVhdGVGaWxlO1xuY29uc3QgY29yZV91dGlsXzEgPSByZXF1aXJlKFwiQGF6dXJlL2NvcmUtdXRpbFwiKTtcbmNvbnN0IHR5cGVHdWFyZHNfanNfMSA9IHJlcXVpcmUoXCIuL3R5cGVHdWFyZHMuanNcIik7XG5jb25zdCB1bmltcGxlbWVudGVkTWV0aG9kcyA9IHtcbiAgICBhcnJheUJ1ZmZlcjogKCkgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJOb3QgaW1wbGVtZW50ZWRcIik7XG4gICAgfSxcbiAgICBzbGljZTogKCkgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJOb3QgaW1wbGVtZW50ZWRcIik7XG4gICAgfSxcbiAgICB0ZXh0OiAoKSA9PiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgICB9LFxufTtcbi8qKlxuICogUHJpdmF0ZSBzeW1ib2wgdXNlZCBhcyBrZXkgb24gb2JqZWN0cyBjcmVhdGVkIHVzaW5nIGNyZWF0ZUZpbGUgY29udGFpbmluZyB0aGVcbiAqIG9yaWdpbmFsIHNvdXJjZSBvZiB0aGUgZmlsZSBvYmplY3QuXG4gKlxuICogVGhpcyBpcyB1c2VkIGluIE5vZGUgdG8gYWNjZXNzIHRoZSBvcmlnaW5hbCBOb2RlIHN0cmVhbSB3aXRob3V0IHVzaW5nIEJsb2Ijc3RyZWFtLCB3aGljaFxuICogcmV0dXJucyBhIHdlYiBzdHJlYW0uIFRoaXMgaXMgZG9uZSB0byBhdm9pZCBhIGNvdXBsZSBvZiBidWdzIHRvIGRvIHdpdGggQmxvYiNzdHJlYW0gYW5kXG4gKiBSZWFkYWJsZSN0by9mcm9tV2ViIGluIE5vZGUgdmVyc2lvbnMgd2Ugc3VwcG9ydDpcbiAqIC0gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2lzc3Vlcy80MjY5NCAoZml4ZWQgaW4gTm9kZSAxOC4xNClcbiAqIC0gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2lzc3Vlcy80ODkxNiAoZml4ZWQgaW4gTm9kZSAyMC42KVxuICpcbiAqIE9uY2UgdGhlc2UgdmVyc2lvbnMgYXJlIG5vIGxvbmdlciBzdXBwb3J0ZWQsIHdlIG1heSBiZSBhYmxlIHRvIHN0b3AgZG9pbmcgdGhpcy5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuY29uc3QgcmF3Q29udGVudCA9IFN5bWJvbChcInJhd0NvbnRlbnRcIik7XG5mdW5jdGlvbiBoYXNSYXdDb250ZW50KHgpIHtcbiAgICByZXR1cm4gdHlwZW9mIHhbcmF3Q29udGVudF0gPT09IFwiZnVuY3Rpb25cIjtcbn1cbi8qKlxuICogRXh0cmFjdCB0aGUgcmF3IGNvbnRlbnQgZnJvbSBhIGdpdmVuIGJsb2ItbGlrZSBvYmplY3QuIElmIHRoZSBpbnB1dCB3YXMgY3JlYXRlZCB1c2luZyBjcmVhdGVGaWxlXG4gKiBvciBjcmVhdGVGaWxlRnJvbVN0cmVhbSwgdGhlIGV4YWN0IGNvbnRlbnQgcGFzc2VkIGludG8gY3JlYXRlRmlsZS9jcmVhdGVGaWxlRnJvbVN0cmVhbSB3aWxsIGJlIHVzZWQuXG4gKiBGb3IgdHJ1ZSBpbnN0YW5jZXMgb2YgQmxvYiBhbmQgRmlsZSwgcmV0dXJucyB0aGUgYmxvYidzIGNvbnRlbnQgYXMgYSBXZWIgUmVhZGFibGVTdHJlYW08VWludDhBcnJheT4uXG4gKlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIGdldFJhd0NvbnRlbnQoYmxvYikge1xuICAgIGlmIChoYXNSYXdDb250ZW50KGJsb2IpKSB7XG4gICAgICAgIHJldHVybiBibG9iW3Jhd0NvbnRlbnRdKCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gYmxvYi5zdHJlYW0oKTtcbiAgICB9XG59XG4vKipcbiAqIENyZWF0ZSBhbiBvYmplY3QgdGhhdCBpbXBsZW1lbnRzIHRoZSBGaWxlIGludGVyZmFjZS4gVGhpcyBvYmplY3QgaXMgaW50ZW5kZWQgdG8gYmVcbiAqIHBhc3NlZCBpbnRvIFJlcXVlc3RCb2R5VHlwZS5mb3JtRGF0YSwgYW5kIGlzIG5vdCBndWFyYW50ZWVkIHRvIHdvcmsgYXMgZXhwZWN0ZWQgaW5cbiAqIG90aGVyIHNpdHVhdGlvbnMuXG4gKlxuICogVXNlIHRoaXMgZnVuY3Rpb24gdG86XG4gKiAtIENyZWF0ZSBhIEZpbGUgb2JqZWN0IGZvciB1c2UgaW4gUmVxdWVzdEJvZHlUeXBlLmZvcm1EYXRhIGluIGVudmlyb25tZW50cyB3aGVyZSB0aGVcbiAqICAgZ2xvYmFsIEZpbGUgb2JqZWN0IGlzIHVuYXZhaWxhYmxlLlxuICogLSBDcmVhdGUgYSBGaWxlLWxpa2Ugb2JqZWN0IGZyb20gYSByZWFkYWJsZSBzdHJlYW0gd2l0aG91dCByZWFkaW5nIHRoZSBzdHJlYW0gaW50byBtZW1vcnkuXG4gKlxuICogQHBhcmFtIHN0cmVhbSAtIHRoZSBjb250ZW50IG9mIHRoZSBmaWxlIGFzIGEgY2FsbGJhY2sgcmV0dXJuaW5nIGEgc3RyZWFtLiBXaGVuIGEgRmlsZSBvYmplY3QgbWFkZSB1c2luZyBjcmVhdGVGaWxlIGlzXG4gKiAgICAgICAgICAgICAgICAgIHBhc3NlZCBpbiBhIHJlcXVlc3QncyBmb3JtIGRhdGEgbWFwLCB0aGUgc3RyZWFtIHdpbGwgbm90IGJlIHJlYWQgaW50byBtZW1vcnlcbiAqICAgICAgICAgICAgICAgICAgYW5kIGluc3RlYWQgd2lsbCBiZSBzdHJlYW1lZCB3aGVuIHRoZSByZXF1ZXN0IGlzIG1hZGUuIEluIHRoZSBldmVudCBvZiBhIHJldHJ5LCB0aGVcbiAqICAgICAgICAgICAgICAgICAgc3RyZWFtIG5lZWRzIHRvIGJlIHJlYWQgYWdhaW4sIHNvIHRoaXMgY2FsbGJhY2sgU0hPVUxEIHJldHVybiBhIGZyZXNoIHN0cmVhbSBpZiBwb3NzaWJsZS5cbiAqIEBwYXJhbSBuYW1lIC0gdGhlIG5hbWUgb2YgdGhlIGZpbGUuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIG9wdGlvbmFsIG1ldGFkYXRhIGFib3V0IHRoZSBmaWxlLCBlLmcuIGZpbGUgbmFtZSwgZmlsZSBzaXplLCBNSU1FIHR5cGUuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUZpbGVGcm9tU3RyZWFtKHN0cmVhbSwgbmFtZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgdmFyIF9hLCBfYiwgX2MsIF9kO1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHVuaW1wbGVtZW50ZWRNZXRob2RzKSwgeyB0eXBlOiAoX2EgPSBvcHRpb25zLnR5cGUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFwiXCIsIGxhc3RNb2RpZmllZDogKF9iID0gb3B0aW9ucy5sYXN0TW9kaWZpZWQpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IG5ldyBEYXRlKCkuZ2V0VGltZSgpLCB3ZWJraXRSZWxhdGl2ZVBhdGg6IChfYyA9IG9wdGlvbnMud2Via2l0UmVsYXRpdmVQYXRoKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiBcIlwiLCBzaXplOiAoX2QgPSBvcHRpb25zLnNpemUpICE9PSBudWxsICYmIF9kICE9PSB2b2lkIDAgPyBfZCA6IC0xLCBuYW1lLCBzdHJlYW06ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHMgPSBzdHJlYW0oKTtcbiAgICAgICAgICAgIGlmICgoMCwgdHlwZUd1YXJkc19qc18xLmlzTm9kZVJlYWRhYmxlU3RyZWFtKShzKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vdCBzdXBwb3J0ZWQ6IGEgTm9kZSBzdHJlYW0gd2FzIHByb3ZpZGVkIGFzIGlucHV0IHRvIGNyZWF0ZUZpbGVGcm9tU3RyZWFtLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzO1xuICAgICAgICB9LCBbcmF3Q29udGVudF06IHN0cmVhbSB9KTtcbn1cbi8qKlxuICogQ3JlYXRlIGFuIG9iamVjdCB0aGF0IGltcGxlbWVudHMgdGhlIEZpbGUgaW50ZXJmYWNlLiBUaGlzIG9iamVjdCBpcyBpbnRlbmRlZCB0byBiZVxuICogcGFzc2VkIGludG8gUmVxdWVzdEJvZHlUeXBlLmZvcm1EYXRhLCBhbmQgaXMgbm90IGd1YXJhbnRlZWQgdG8gd29yayBhcyBleHBlY3RlZCBpblxuICogb3RoZXIgc2l0dWF0aW9ucy5cbiAqXG4gKiBVc2UgdGhpcyBmdW5jdGlvbiBjcmVhdGUgYSBGaWxlIG9iamVjdCBmb3IgdXNlIGluIFJlcXVlc3RCb2R5VHlwZS5mb3JtRGF0YSBpbiBlbnZpcm9ubWVudHMgd2hlcmUgdGhlIGdsb2JhbCBGaWxlIG9iamVjdCBpcyB1bmF2YWlsYWJsZS5cbiAqXG4gKiBAcGFyYW0gY29udGVudCAtIHRoZSBjb250ZW50IG9mIHRoZSBmaWxlIGFzIGEgVWludDhBcnJheSBpbiBtZW1vcnkuXG4gKiBAcGFyYW0gbmFtZSAtIHRoZSBuYW1lIG9mIHRoZSBmaWxlLlxuICogQHBhcmFtIG9wdGlvbnMgLSBvcHRpb25hbCBtZXRhZGF0YSBhYm91dCB0aGUgZmlsZSwgZS5nLiBmaWxlIG5hbWUsIGZpbGUgc2l6ZSwgTUlNRSB0eXBlLlxuICovXG5mdW5jdGlvbiBjcmVhdGVGaWxlKGNvbnRlbnQsIG5hbWUsIG9wdGlvbnMgPSB7fSkge1xuICAgIHZhciBfYSwgX2IsIF9jO1xuICAgIGlmIChjb3JlX3V0aWxfMS5pc05vZGVMaWtlKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHVuaW1wbGVtZW50ZWRNZXRob2RzKSwgeyB0eXBlOiAoX2EgPSBvcHRpb25zLnR5cGUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFwiXCIsIGxhc3RNb2RpZmllZDogKF9iID0gb3B0aW9ucy5sYXN0TW9kaWZpZWQpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IG5ldyBEYXRlKCkuZ2V0VGltZSgpLCB3ZWJraXRSZWxhdGl2ZVBhdGg6IChfYyA9IG9wdGlvbnMud2Via2l0UmVsYXRpdmVQYXRoKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiBcIlwiLCBzaXplOiBjb250ZW50LmJ5dGVMZW5ndGgsIG5hbWUsIGFycmF5QnVmZmVyOiBhc3luYyAoKSA9PiBjb250ZW50LmJ1ZmZlciwgc3RyZWFtOiAoKSA9PiBuZXcgQmxvYihbY29udGVudF0pLnN0cmVhbSgpLCBbcmF3Q29udGVudF06ICgpID0+IGNvbnRlbnQgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gbmV3IEZpbGUoW2NvbnRlbnRdLCBuYW1lLCBvcHRpb25zKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1maWxlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY29uY2F0ID0gY29uY2F0O1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbmNvbnN0IG5vZGVfc3RyZWFtXzEgPSByZXF1aXJlKFwibm9kZTpzdHJlYW1cIik7XG5jb25zdCB0eXBlR3VhcmRzX2pzXzEgPSByZXF1aXJlKFwiLi90eXBlR3VhcmRzLmpzXCIpO1xuY29uc3QgZmlsZV9qc18xID0gcmVxdWlyZShcIi4vZmlsZS5qc1wiKTtcbmZ1bmN0aW9uIHN0cmVhbUFzeW5jSXRlcmF0b3IoKSB7XG4gICAgcmV0dXJuIHRzbGliXzEuX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKiBzdHJlYW1Bc3luY0l0ZXJhdG9yXzEoKSB7XG4gICAgICAgIGNvbnN0IHJlYWRlciA9IHRoaXMuZ2V0UmVhZGVyKCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IHlpZWxkIHRzbGliXzEuX19hd2FpdChyZWFkZXIucmVhZCgpKTtcbiAgICAgICAgICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geWllbGQgdHNsaWJfMS5fX2F3YWl0KHZvaWQgMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHlpZWxkIHlpZWxkIHRzbGliXzEuX19hd2FpdCh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICByZWFkZXIucmVsZWFzZUxvY2soKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuZnVuY3Rpb24gbWFrZUFzeW5jSXRlcmFibGUod2ViU3RyZWFtKSB7XG4gICAgaWYgKCF3ZWJTdHJlYW1bU3ltYm9sLmFzeW5jSXRlcmF0b3JdKSB7XG4gICAgICAgIHdlYlN0cmVhbVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBzdHJlYW1Bc3luY0l0ZXJhdG9yLmJpbmQod2ViU3RyZWFtKTtcbiAgICB9XG4gICAgaWYgKCF3ZWJTdHJlYW0udmFsdWVzKSB7XG4gICAgICAgIHdlYlN0cmVhbS52YWx1ZXMgPSBzdHJlYW1Bc3luY0l0ZXJhdG9yLmJpbmQod2ViU3RyZWFtKTtcbiAgICB9XG59XG5mdW5jdGlvbiBlbnN1cmVOb2RlU3RyZWFtKHN0cmVhbSkge1xuICAgIGlmIChzdHJlYW0gaW5zdGFuY2VvZiBSZWFkYWJsZVN0cmVhbSkge1xuICAgICAgICBtYWtlQXN5bmNJdGVyYWJsZShzdHJlYW0pO1xuICAgICAgICByZXR1cm4gbm9kZV9zdHJlYW1fMS5SZWFkYWJsZS5mcm9tV2ViKHN0cmVhbSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gc3RyZWFtO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHRvU3RyZWFtKHNvdXJjZSkge1xuICAgIGlmIChzb3VyY2UgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XG4gICAgICAgIHJldHVybiBub2RlX3N0cmVhbV8xLlJlYWRhYmxlLmZyb20oQnVmZmVyLmZyb20oc291cmNlKSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKCgwLCB0eXBlR3VhcmRzX2pzXzEuaXNCbG9iKShzb3VyY2UpKSB7XG4gICAgICAgIHJldHVybiB0b1N0cmVhbSgoMCwgZmlsZV9qc18xLmdldFJhd0NvbnRlbnQpKHNvdXJjZSkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGVuc3VyZU5vZGVTdHJlYW0oc291cmNlKTtcbiAgICB9XG59XG4vKipcbiAqIFV0aWxpdHkgZnVuY3Rpb24gdGhhdCBjb25jYXRlbmF0ZXMgYSBzZXQgb2YgYmluYXJ5IGlucHV0cyBpbnRvIG9uZSBjb21iaW5lZCBvdXRwdXQuXG4gKlxuICogQHBhcmFtIHNvdXJjZXMgLSBhcnJheSBvZiBzb3VyY2VzIGZvciB0aGUgY29uY2F0ZW5hdGlvblxuICogQHJldHVybnMgLSBpbiBOb2RlLCBhICgoKSA9XFw+IE5vZGVKUy5SZWFkYWJsZVN0cmVhbSkgd2hpY2gsIHdoZW4gcmVhZCwgcHJvZHVjZXMgYSBjb25jYXRlbmF0aW9uIG9mIGFsbCB0aGUgaW5wdXRzLlxuICogICAgICAgICAgIEluIGJyb3dzZXIsIHJldHVybnMgYSBgQmxvYmAgcmVwcmVzZW50aW5nIGFsbCB0aGUgY29uY2F0ZW5hdGVkIGlucHV0cy5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuYXN5bmMgZnVuY3Rpb24gY29uY2F0KHNvdXJjZXMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBzdHJlYW1zID0gc291cmNlcy5tYXAoKHgpID0+ICh0eXBlb2YgeCA9PT0gXCJmdW5jdGlvblwiID8geCgpIDogeCkpLm1hcCh0b1N0cmVhbSk7XG4gICAgICAgIHJldHVybiBub2RlX3N0cmVhbV8xLlJlYWRhYmxlLmZyb20oKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0c2xpYl8xLl9fYXN5bmNHZW5lcmF0b3IodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgIHZhciBfYSwgZV8xLCBfYiwgX2M7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBzdHJlYW0gb2Ygc3RyZWFtcykge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2QgPSB0cnVlLCBzdHJlYW1fMSA9IChlXzEgPSB2b2lkIDAsIHRzbGliXzEuX19hc3luY1ZhbHVlcyhzdHJlYW0pKSwgc3RyZWFtXzFfMTsgc3RyZWFtXzFfMSA9IHlpZWxkIHRzbGliXzEuX19hd2FpdChzdHJlYW1fMS5uZXh0KCkpLCBfYSA9IHN0cmVhbV8xXzEuZG9uZSwgIV9hOyBfZCA9IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyA9IHN0cmVhbV8xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaHVuayA9IF9jO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIHlpZWxkIHRzbGliXzEuX19hd2FpdChjaHVuayk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghX2QgJiYgIV9hICYmIChfYiA9IHN0cmVhbV8xLnJldHVybikpIHlpZWxkIHRzbGliXzEuX19hd2FpdChfYi5jYWxsKHN0cmVhbV8xKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSkoKSk7XG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbmNhdC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLm11bHRpcGFydFBvbGljeU5hbWUgPSB2b2lkIDA7XG5leHBvcnRzLm11bHRpcGFydFBvbGljeSA9IG11bHRpcGFydFBvbGljeTtcbmNvbnN0IGNvcmVfdXRpbF8xID0gcmVxdWlyZShcIkBhenVyZS9jb3JlLXV0aWxcIik7XG5jb25zdCBjb25jYXRfanNfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2NvbmNhdC5qc1wiKTtcbmNvbnN0IHR5cGVHdWFyZHNfanNfMSA9IHJlcXVpcmUoXCIuLi91dGlsL3R5cGVHdWFyZHMuanNcIik7XG5mdW5jdGlvbiBnZW5lcmF0ZUJvdW5kYXJ5KCkge1xuICAgIHJldHVybiBgLS0tLUF6U0RLRm9ybUJvdW5kYXJ5JHsoMCwgY29yZV91dGlsXzEucmFuZG9tVVVJRCkoKX1gO1xufVxuZnVuY3Rpb24gZW5jb2RlSGVhZGVycyhoZWFkZXJzKSB7XG4gICAgbGV0IHJlc3VsdCA9IFwiXCI7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgaGVhZGVycykge1xuICAgICAgICByZXN1bHQgKz0gYCR7a2V5fTogJHt2YWx1ZX1cXHJcXG5gO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gZ2V0TGVuZ3RoKHNvdXJjZSkge1xuICAgIGlmIChzb3VyY2UgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XG4gICAgICAgIHJldHVybiBzb3VyY2UuYnl0ZUxlbmd0aDtcbiAgICB9XG4gICAgZWxzZSBpZiAoKDAsIHR5cGVHdWFyZHNfanNfMS5pc0Jsb2IpKHNvdXJjZSkpIHtcbiAgICAgICAgLy8gaWYgd2FzIGNyZWF0ZWQgdXNpbmcgY3JlYXRlRmlsZSB0aGVuIC0xIG1lYW5zIHdlIGhhdmUgYW4gdW5rbm93biBzaXplXG4gICAgICAgIHJldHVybiBzb3VyY2Uuc2l6ZSA9PT0gLTEgPyB1bmRlZmluZWQgOiBzb3VyY2Uuc2l6ZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0VG90YWxMZW5ndGgoc291cmNlcykge1xuICAgIGxldCB0b3RhbCA9IDA7XG4gICAgZm9yIChjb25zdCBzb3VyY2Ugb2Ygc291cmNlcykge1xuICAgICAgICBjb25zdCBwYXJ0TGVuZ3RoID0gZ2V0TGVuZ3RoKHNvdXJjZSk7XG4gICAgICAgIGlmIChwYXJ0TGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0b3RhbCArPSBwYXJ0TGVuZ3RoO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0b3RhbDtcbn1cbmFzeW5jIGZ1bmN0aW9uIGJ1aWxkUmVxdWVzdEJvZHkocmVxdWVzdCwgcGFydHMsIGJvdW5kYXJ5KSB7XG4gICAgY29uc3Qgc291cmNlcyA9IFtcbiAgICAgICAgKDAsIGNvcmVfdXRpbF8xLnN0cmluZ1RvVWludDhBcnJheSkoYC0tJHtib3VuZGFyeX1gLCBcInV0Zi04XCIpLFxuICAgICAgICAuLi5wYXJ0cy5mbGF0TWFwKChwYXJ0KSA9PiBbXG4gICAgICAgICAgICAoMCwgY29yZV91dGlsXzEuc3RyaW5nVG9VaW50OEFycmF5KShcIlxcclxcblwiLCBcInV0Zi04XCIpLFxuICAgICAgICAgICAgKDAsIGNvcmVfdXRpbF8xLnN0cmluZ1RvVWludDhBcnJheSkoZW5jb2RlSGVhZGVycyhwYXJ0LmhlYWRlcnMpLCBcInV0Zi04XCIpLFxuICAgICAgICAgICAgKDAsIGNvcmVfdXRpbF8xLnN0cmluZ1RvVWludDhBcnJheSkoXCJcXHJcXG5cIiwgXCJ1dGYtOFwiKSxcbiAgICAgICAgICAgIHBhcnQuYm9keSxcbiAgICAgICAgICAgICgwLCBjb3JlX3V0aWxfMS5zdHJpbmdUb1VpbnQ4QXJyYXkpKGBcXHJcXG4tLSR7Ym91bmRhcnl9YCwgXCJ1dGYtOFwiKSxcbiAgICAgICAgXSksXG4gICAgICAgICgwLCBjb3JlX3V0aWxfMS5zdHJpbmdUb1VpbnQ4QXJyYXkpKFwiLS1cXHJcXG5cXHJcXG5cIiwgXCJ1dGYtOFwiKSxcbiAgICBdO1xuICAgIGNvbnN0IGNvbnRlbnRMZW5ndGggPSBnZXRUb3RhbExlbmd0aChzb3VyY2VzKTtcbiAgICBpZiAoY29udGVudExlbmd0aCkge1xuICAgICAgICByZXF1ZXN0LmhlYWRlcnMuc2V0KFwiQ29udGVudC1MZW5ndGhcIiwgY29udGVudExlbmd0aCk7XG4gICAgfVxuICAgIHJlcXVlc3QuYm9keSA9IGF3YWl0ICgwLCBjb25jYXRfanNfMS5jb25jYXQpKHNvdXJjZXMpO1xufVxuLyoqXG4gKiBOYW1lIG9mIG11bHRpcGFydCBwb2xpY3lcbiAqL1xuZXhwb3J0cy5tdWx0aXBhcnRQb2xpY3lOYW1lID0gXCJtdWx0aXBhcnRQb2xpY3lcIjtcbmNvbnN0IG1heEJvdW5kYXJ5TGVuZ3RoID0gNzA7XG5jb25zdCB2YWxpZEJvdW5kYXJ5Q2hhcmFjdGVycyA9IG5ldyBTZXQoYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVowMTIzNDU2Nzg5JygpKywtLi86PT9gKTtcbmZ1bmN0aW9uIGFzc2VydFZhbGlkQm91bmRhcnkoYm91bmRhcnkpIHtcbiAgICBpZiAoYm91bmRhcnkubGVuZ3RoID4gbWF4Qm91bmRhcnlMZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNdWx0aXBhcnQgYm91bmRhcnkgXCIke2JvdW5kYXJ5fVwiIGV4Y2VlZHMgbWF4aW11bSBsZW5ndGggb2YgNzAgY2hhcmFjdGVyc2ApO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuZnJvbShib3VuZGFyeSkuc29tZSgoeCkgPT4gIXZhbGlkQm91bmRhcnlDaGFyYWN0ZXJzLmhhcyh4KSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNdWx0aXBhcnQgYm91bmRhcnkgXCIke2JvdW5kYXJ5fVwiIGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVyc2ApO1xuICAgIH1cbn1cbi8qKlxuICogUGlwZWxpbmUgcG9saWN5IGZvciBtdWx0aXBhcnQgcmVxdWVzdHNcbiAqL1xuZnVuY3Rpb24gbXVsdGlwYXJ0UG9saWN5KCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGV4cG9ydHMubXVsdGlwYXJ0UG9saWN5TmFtZSxcbiAgICAgICAgYXN5bmMgc2VuZFJlcXVlc3QocmVxdWVzdCwgbmV4dCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgaWYgKCFyZXF1ZXN0Lm11bHRpcGFydEJvZHkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dChyZXF1ZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXF1ZXN0LmJvZHkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJtdWx0aXBhcnRCb2R5IGFuZCByZWd1bGFyIGJvZHkgY2Fubm90IGJlIHNldCBhdCB0aGUgc2FtZSB0aW1lXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGJvdW5kYXJ5ID0gcmVxdWVzdC5tdWx0aXBhcnRCb2R5LmJvdW5kYXJ5O1xuICAgICAgICAgICAgY29uc3QgY29udGVudFR5cGVIZWFkZXIgPSAoX2EgPSByZXF1ZXN0LmhlYWRlcnMuZ2V0KFwiQ29udGVudC1UeXBlXCIpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBcIm11bHRpcGFydC9taXhlZFwiO1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkSGVhZGVyID0gY29udGVudFR5cGVIZWFkZXIubWF0Y2goL14obXVsdGlwYXJ0XFwvW14gO10rKSg/OjsgKmJvdW5kYXJ5PSguKykpPyQvKTtcbiAgICAgICAgICAgIGlmICghcGFyc2VkSGVhZGVyKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBHb3QgbXVsdGlwYXJ0IHJlcXVlc3QgYm9keSwgYnV0IGNvbnRlbnQtdHlwZSBoZWFkZXIgd2FzIG5vdCBtdWx0aXBhcnQ6ICR7Y29udGVudFR5cGVIZWFkZXJ9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBbLCBjb250ZW50VHlwZSwgcGFyc2VkQm91bmRhcnldID0gcGFyc2VkSGVhZGVyO1xuICAgICAgICAgICAgaWYgKHBhcnNlZEJvdW5kYXJ5ICYmIGJvdW5kYXJ5ICYmIHBhcnNlZEJvdW5kYXJ5ICE9PSBib3VuZGFyeSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTXVsdGlwYXJ0IGJvdW5kYXJ5IHdhcyBzcGVjaWZpZWQgYXMgJHtwYXJzZWRCb3VuZGFyeX0gaW4gdGhlIGhlYWRlciwgYnV0IGdvdCAke2JvdW5kYXJ5fSBpbiB0aGUgcmVxdWVzdCBib2R5YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBib3VuZGFyeSAhPT0gbnVsbCAmJiBib3VuZGFyeSAhPT0gdm9pZCAwID8gYm91bmRhcnkgOiAoYm91bmRhcnkgPSBwYXJzZWRCb3VuZGFyeSk7XG4gICAgICAgICAgICBpZiAoYm91bmRhcnkpIHtcbiAgICAgICAgICAgICAgICBhc3NlcnRWYWxpZEJvdW5kYXJ5KGJvdW5kYXJ5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGJvdW5kYXJ5ID0gZ2VuZXJhdGVCb3VuZGFyeSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVxdWVzdC5oZWFkZXJzLnNldChcIkNvbnRlbnQtVHlwZVwiLCBgJHtjb250ZW50VHlwZX07IGJvdW5kYXJ5PSR7Ym91bmRhcnl9YCk7XG4gICAgICAgICAgICBhd2FpdCBidWlsZFJlcXVlc3RCb2R5KHJlcXVlc3QsIHJlcXVlc3QubXVsdGlwYXJ0Qm9keS5wYXJ0cywgYm91bmRhcnkpO1xuICAgICAgICAgICAgcmVxdWVzdC5tdWx0aXBhcnRCb2R5ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgcmV0dXJuIG5leHQocmVxdWVzdCk7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW11bHRpcGFydFBvbGljeS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlY29tcHJlc3NSZXNwb25zZVBvbGljeU5hbWUgPSB2b2lkIDA7XG5leHBvcnRzLmRlY29tcHJlc3NSZXNwb25zZVBvbGljeSA9IGRlY29tcHJlc3NSZXNwb25zZVBvbGljeTtcbi8qKlxuICogVGhlIHByb2dyYW1tYXRpYyBpZGVudGlmaWVyIG9mIHRoZSBkZWNvbXByZXNzUmVzcG9uc2VQb2xpY3kuXG4gKi9cbmV4cG9ydHMuZGVjb21wcmVzc1Jlc3BvbnNlUG9saWN5TmFtZSA9IFwiZGVjb21wcmVzc1Jlc3BvbnNlUG9saWN5XCI7XG4vKipcbiAqIEEgcG9saWN5IHRvIGVuYWJsZSByZXNwb25zZSBkZWNvbXByZXNzaW9uIGFjY29yZGluZyB0byBBY2NlcHQtRW5jb2RpbmcgaGVhZGVyXG4gKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvQWNjZXB0LUVuY29kaW5nXG4gKi9cbmZ1bmN0aW9uIGRlY29tcHJlc3NSZXNwb25zZVBvbGljeSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBleHBvcnRzLmRlY29tcHJlc3NSZXNwb25zZVBvbGljeU5hbWUsXG4gICAgICAgIGFzeW5jIHNlbmRSZXF1ZXN0KHJlcXVlc3QsIG5leHQpIHtcbiAgICAgICAgICAgIC8vIEhFQUQgcmVxdWVzdHMgaGF2ZSBubyBib2R5XG4gICAgICAgICAgICBpZiAocmVxdWVzdC5tZXRob2QgIT09IFwiSEVBRFwiKSB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdC5oZWFkZXJzLnNldChcIkFjY2VwdC1FbmNvZGluZ1wiLCBcImd6aXAsZGVmbGF0ZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXh0KHJlcXVlc3QpO1xuICAgICAgICB9LFxuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZWNvbXByZXNzUmVzcG9uc2VQb2xpY3kuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZWxheSA9IGRlbGF5O1xuZXhwb3J0cy5wYXJzZUhlYWRlclZhbHVlQXNOdW1iZXIgPSBwYXJzZUhlYWRlclZhbHVlQXNOdW1iZXI7XG5jb25zdCBhYm9ydF9jb250cm9sbGVyXzEgPSByZXF1aXJlKFwiQGF6dXJlL2Fib3J0LWNvbnRyb2xsZXJcIik7XG5jb25zdCBTdGFuZGFyZEFib3J0TWVzc2FnZSA9IFwiVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC5cIjtcbi8qKlxuICogQSB3cmFwcGVyIGZvciBzZXRUaW1lb3V0IHRoYXQgcmVzb2x2ZXMgYSBwcm9taXNlIGFmdGVyIGRlbGF5SW5NcyBtaWxsaXNlY29uZHMuXG4gKiBAcGFyYW0gZGVsYXlJbk1zIC0gVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gYmUgZGVsYXllZC5cbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBiZSByZXNvbHZlZCB3aXRoIGFmdGVyIGEgdGltZW91dCBvZiB0IG1pbGxpc2Vjb25kcy5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIGRlbGF5IC0gY3VycmVudGx5IGFib3J0IG9wdGlvbnNcbiAqICAgICAgICAgICAgICAgICAgLSBhYm9ydFNpZ25hbCAtIFRoZSBhYm9ydFNpZ25hbCBhc3NvY2lhdGVkIHdpdGggY29udGFpbmluZyBvcGVyYXRpb24uXG4gKiAgICAgICAgICAgICAgICAgIC0gYWJvcnRFcnJvck1zZyAtIFRoZSBhYm9ydCBlcnJvciBtZXNzYWdlIGFzc29jaWF0ZWQgd2l0aCBjb250YWluaW5nIG9wZXJhdGlvbi5cbiAqIEByZXR1cm5zIFJlc29sdmVkIHByb21pc2VcbiAqL1xuZnVuY3Rpb24gZGVsYXkoZGVsYXlJbk1zLCB2YWx1ZSwgb3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGxldCB0aW1lciA9IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IG9uQWJvcnRlZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgcmVqZWN0T25BYm9ydCA9ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QobmV3IGFib3J0X2NvbnRyb2xsZXJfMS5BYm9ydEVycm9yKChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuYWJvcnRFcnJvck1zZykgPyBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuYWJvcnRFcnJvck1zZyA6IFN0YW5kYXJkQWJvcnRNZXNzYWdlKSk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHJlbW92ZUxpc3RlbmVycyA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmICgob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmFib3J0U2lnbmFsKSAmJiBvbkFib3J0ZWQpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLmFib3J0U2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0ZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBvbkFib3J0ZWQgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGltZXIpIHtcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVtb3ZlTGlzdGVuZXJzKCk7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0T25BYm9ydCgpO1xuICAgICAgICB9O1xuICAgICAgICBpZiAoKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5hYm9ydFNpZ25hbCkgJiYgb3B0aW9ucy5hYm9ydFNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0T25BYm9ydCgpO1xuICAgICAgICB9XG4gICAgICAgIHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICByZW1vdmVMaXN0ZW5lcnMoKTtcbiAgICAgICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICB9LCBkZWxheUluTXMpO1xuICAgICAgICBpZiAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmFib3J0U2lnbmFsKSB7XG4gICAgICAgICAgICBvcHRpb25zLmFib3J0U2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0ZWQpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG4vKipcbiAqIEBpbnRlcm5hbFxuICogQHJldHVybnMgdGhlIHBhcnNlZCB2YWx1ZSBvciB1bmRlZmluZWQgaWYgdGhlIHBhcnNlZCB2YWx1ZSBpcyBpbnZhbGlkLlxuICovXG5mdW5jdGlvbiBwYXJzZUhlYWRlclZhbHVlQXNOdW1iZXIocmVzcG9uc2UsIGhlYWRlck5hbWUpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KGhlYWRlck5hbWUpO1xuICAgIGlmICghdmFsdWUpXG4gICAgICAgIHJldHVybjtcbiAgICBjb25zdCB2YWx1ZUFzTnVtID0gTnVtYmVyKHZhbHVlKTtcbiAgICBpZiAoTnVtYmVyLmlzTmFOKHZhbHVlQXNOdW0pKVxuICAgICAgICByZXR1cm47XG4gICAgcmV0dXJuIHZhbHVlQXNOdW07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1oZWxwZXJzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNUaHJvdHRsaW5nUmV0cnlSZXNwb25zZSA9IGlzVGhyb3R0bGluZ1JldHJ5UmVzcG9uc2U7XG5leHBvcnRzLnRocm90dGxpbmdSZXRyeVN0cmF0ZWd5ID0gdGhyb3R0bGluZ1JldHJ5U3RyYXRlZ3k7XG5jb25zdCBoZWxwZXJzX2pzXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9oZWxwZXJzLmpzXCIpO1xuLyoqXG4gKiBUaGUgaGVhZGVyIHRoYXQgY29tZXMgYmFjayBmcm9tIEF6dXJlIHNlcnZpY2VzIHJlcHJlc2VudGluZ1xuICogdGhlIGFtb3VudCBvZiB0aW1lIChtaW5pbXVtKSB0byB3YWl0IHRvIHJldHJ5IChpbiBzZWNvbmRzIG9yIHRpbWVzdGFtcCBhZnRlciB3aGljaCB3ZSBjYW4gcmV0cnkpLlxuICovXG5jb25zdCBSZXRyeUFmdGVySGVhZGVyID0gXCJSZXRyeS1BZnRlclwiO1xuLyoqXG4gKiBUaGUgaGVhZGVycyB0aGF0IGNvbWUgYmFjayBmcm9tIEF6dXJlIHNlcnZpY2VzIHJlcHJlc2VudGluZ1xuICogdGhlIGFtb3VudCBvZiB0aW1lIChtaW5pbXVtKSB0byB3YWl0IHRvIHJldHJ5LlxuICpcbiAqIFwicmV0cnktYWZ0ZXItbXNcIiwgXCJ4LW1zLXJldHJ5LWFmdGVyLW1zXCIgOiBtaWxsaXNlY29uZHNcbiAqIFwiUmV0cnktQWZ0ZXJcIiA6IHNlY29uZHMgb3IgdGltZXN0YW1wXG4gKi9cbmNvbnN0IEFsbFJldHJ5QWZ0ZXJIZWFkZXJzID0gW1wicmV0cnktYWZ0ZXItbXNcIiwgXCJ4LW1zLXJldHJ5LWFmdGVyLW1zXCIsIFJldHJ5QWZ0ZXJIZWFkZXJdO1xuLyoqXG4gKiBBIHJlc3BvbnNlIGlzIGEgdGhyb3R0bGluZyByZXRyeSByZXNwb25zZSBpZiBpdCBoYXMgYSB0aHJvdHRsaW5nIHN0YXR1cyBjb2RlICg0Mjkgb3IgNTAzKSxcbiAqIGFzIGxvbmcgYXMgb25lIG9mIHRoZSBbIFwiUmV0cnktQWZ0ZXJcIiBvciBcInJldHJ5LWFmdGVyLW1zXCIgb3IgXCJ4LW1zLXJldHJ5LWFmdGVyLW1zXCIgXSBoZWFkZXJzIGhhcyBhIHZhbGlkIHZhbHVlLlxuICpcbiAqIFJldHVybnMgdGhlIGByZXRyeUFmdGVySW5Nc2AgdmFsdWUgaWYgdGhlIHJlc3BvbnNlIGlzIGEgdGhyb3R0bGluZyByZXRyeSByZXNwb25zZS5cbiAqIElmIG5vdCB0aHJvdHRsaW5nIHJldHJ5IHJlc3BvbnNlLCByZXR1cm5zIGB1bmRlZmluZWRgLlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBnZXRSZXRyeUFmdGVySW5NcyhyZXNwb25zZSkge1xuICAgIGlmICghKHJlc3BvbnNlICYmIFs0MjksIDUwM10uaW5jbHVkZXMocmVzcG9uc2Uuc3RhdHVzKSkpXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gSGVhZGVyczogXCJyZXRyeS1hZnRlci1tc1wiLCBcIngtbXMtcmV0cnktYWZ0ZXItbXNcIiwgXCJSZXRyeS1BZnRlclwiXG4gICAgICAgIGZvciAoY29uc3QgaGVhZGVyIG9mIEFsbFJldHJ5QWZ0ZXJIZWFkZXJzKSB7XG4gICAgICAgICAgICBjb25zdCByZXRyeUFmdGVyVmFsdWUgPSAoMCwgaGVscGVyc19qc18xLnBhcnNlSGVhZGVyVmFsdWVBc051bWJlcikocmVzcG9uc2UsIGhlYWRlcik7XG4gICAgICAgICAgICBpZiAocmV0cnlBZnRlclZhbHVlID09PSAwIHx8IHJldHJ5QWZ0ZXJWYWx1ZSkge1xuICAgICAgICAgICAgICAgIC8vIFwiUmV0cnktQWZ0ZXJcIiBoZWFkZXIgPT0+IHNlY29uZHNcbiAgICAgICAgICAgICAgICAvLyBcInJldHJ5LWFmdGVyLW1zXCIsIFwieC1tcy1yZXRyeS1hZnRlci1tc1wiIGhlYWRlcnMgPT0+IG1pbGxpLXNlY29uZHNcbiAgICAgICAgICAgICAgICBjb25zdCBtdWx0aXBseWluZ0ZhY3RvciA9IGhlYWRlciA9PT0gUmV0cnlBZnRlckhlYWRlciA/IDEwMDAgOiAxO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXRyeUFmdGVyVmFsdWUgKiBtdWx0aXBseWluZ0ZhY3RvcjsgLy8gaW4gbWlsbGktc2Vjb25kc1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFJldHJ5QWZ0ZXJIZWFkZXIgKFwiUmV0cnktQWZ0ZXJcIikgaGFzIGEgc3BlY2lhbCBjYXNlIHdoZXJlIGl0IG1pZ2h0IGJlIGZvcm1hdHRlZCBhcyBhIGRhdGUgaW5zdGVhZCBvZiBhIG51bWJlciBvZiBzZWNvbmRzXG4gICAgICAgIGNvbnN0IHJldHJ5QWZ0ZXJIZWFkZXIgPSByZXNwb25zZS5oZWFkZXJzLmdldChSZXRyeUFmdGVySGVhZGVyKTtcbiAgICAgICAgaWYgKCFyZXRyeUFmdGVySGVhZGVyKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBkYXRlID0gRGF0ZS5wYXJzZShyZXRyeUFmdGVySGVhZGVyKTtcbiAgICAgICAgY29uc3QgZGlmZiA9IGRhdGUgLSBEYXRlLm5vdygpO1xuICAgICAgICAvLyBuZWdhdGl2ZSBkaWZmIHdvdWxkIG1lYW4gYSBkYXRlIGluIHRoZSBwYXN0LCBzbyByZXRyeSBhc2FwIHdpdGggMCBtaWxsaXNlY29uZHNcbiAgICAgICAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShkaWZmKSA/IE1hdGgubWF4KDAsIGRpZmYpIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjYXRjaCAoX2EpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59XG4vKipcbiAqIEEgcmVzcG9uc2UgaXMgYSByZXRyeSByZXNwb25zZSBpZiBpdCBoYXMgYSB0aHJvdHRsaW5nIHN0YXR1cyBjb2RlICg0Mjkgb3IgNTAzKSxcbiAqIGFzIGxvbmcgYXMgb25lIG9mIHRoZSBbIFwiUmV0cnktQWZ0ZXJcIiBvciBcInJldHJ5LWFmdGVyLW1zXCIgb3IgXCJ4LW1zLXJldHJ5LWFmdGVyLW1zXCIgXSBoZWFkZXJzIGhhcyBhIHZhbGlkIHZhbHVlLlxuICovXG5mdW5jdGlvbiBpc1Rocm90dGxpbmdSZXRyeVJlc3BvbnNlKHJlc3BvbnNlKSB7XG4gICAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShnZXRSZXRyeUFmdGVySW5NcyhyZXNwb25zZSkpO1xufVxuZnVuY3Rpb24gdGhyb3R0bGluZ1JldHJ5U3RyYXRlZ3koKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogXCJ0aHJvdHRsaW5nUmV0cnlTdHJhdGVneVwiLFxuICAgICAgICByZXRyeSh7IHJlc3BvbnNlIH0pIHtcbiAgICAgICAgICAgIGNvbnN0IHJldHJ5QWZ0ZXJJbk1zID0gZ2V0UmV0cnlBZnRlckluTXMocmVzcG9uc2UpO1xuICAgICAgICAgICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUocmV0cnlBZnRlckluTXMpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgc2tpcFN0cmF0ZWd5OiB0cnVlIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHJldHJ5QWZ0ZXJJbk1zLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGhyb3R0bGluZ1JldHJ5U3RyYXRlZ3kuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5leHBvbmVudGlhbFJldHJ5U3RyYXRlZ3kgPSBleHBvbmVudGlhbFJldHJ5U3RyYXRlZ3k7XG5leHBvcnRzLmlzRXhwb25lbnRpYWxSZXRyeVJlc3BvbnNlID0gaXNFeHBvbmVudGlhbFJldHJ5UmVzcG9uc2U7XG5leHBvcnRzLmlzU3lzdGVtRXJyb3IgPSBpc1N5c3RlbUVycm9yO1xuY29uc3QgY29yZV91dGlsXzEgPSByZXF1aXJlKFwiQGF6dXJlL2NvcmUtdXRpbFwiKTtcbmNvbnN0IHRocm90dGxpbmdSZXRyeVN0cmF0ZWd5X2pzXzEgPSByZXF1aXJlKFwiLi90aHJvdHRsaW5nUmV0cnlTdHJhdGVneS5qc1wiKTtcbi8vIGludGVydmFscyBhcmUgaW4gbWlsbGlzZWNvbmRzXG5jb25zdCBERUZBVUxUX0NMSUVOVF9SRVRSWV9JTlRFUlZBTCA9IDEwMDA7XG5jb25zdCBERUZBVUxUX0NMSUVOVF9NQVhfUkVUUllfSU5URVJWQUwgPSAxMDAwICogNjQ7XG4vKipcbiAqIEEgcmV0cnkgc3RyYXRlZ3kgdGhhdCByZXRyaWVzIHdpdGggYW4gZXhwb25lbnRpYWxseSBpbmNyZWFzaW5nIGRlbGF5IGluIHRoZXNlIHR3byBjYXNlczpcbiAqIC0gV2hlbiB0aGVyZSBhcmUgZXJyb3JzIGluIHRoZSB1bmRlcmx5aW5nIHRyYW5zcG9ydCBsYXllciAoZS5nLiBETlMgbG9va3VwIGZhaWx1cmVzKS5cbiAqIC0gT3Igb3RoZXJ3aXNlIGlmIHRoZSBvdXRnb2luZyByZXF1ZXN0IGZhaWxzICg0MDgsIGdyZWF0ZXIgb3IgZXF1YWwgdGhhbiA1MDAsIGV4Y2VwdCBmb3IgNTAxIGFuZCA1MDUpLlxuICovXG5mdW5jdGlvbiBleHBvbmVudGlhbFJldHJ5U3RyYXRlZ3kob3B0aW9ucyA9IHt9KSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICBjb25zdCByZXRyeUludGVydmFsID0gKF9hID0gb3B0aW9ucy5yZXRyeURlbGF5SW5NcykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogREVGQVVMVF9DTElFTlRfUkVUUllfSU5URVJWQUw7XG4gICAgY29uc3QgbWF4UmV0cnlJbnRlcnZhbCA9IChfYiA9IG9wdGlvbnMubWF4UmV0cnlEZWxheUluTXMpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IERFRkFVTFRfQ0xJRU5UX01BWF9SRVRSWV9JTlRFUlZBTDtcbiAgICBsZXQgcmV0cnlBZnRlckluTXMgPSByZXRyeUludGVydmFsO1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IFwiZXhwb25lbnRpYWxSZXRyeVN0cmF0ZWd5XCIsXG4gICAgICAgIHJldHJ5KHsgcmV0cnlDb3VudCwgcmVzcG9uc2UsIHJlc3BvbnNlRXJyb3IgfSkge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2hlZFN5c3RlbUVycm9yID0gaXNTeXN0ZW1FcnJvcihyZXNwb25zZUVycm9yKTtcbiAgICAgICAgICAgIGNvbnN0IGlnbm9yZVN5c3RlbUVycm9ycyA9IG1hdGNoZWRTeXN0ZW1FcnJvciAmJiBvcHRpb25zLmlnbm9yZVN5c3RlbUVycm9ycztcbiAgICAgICAgICAgIGNvbnN0IGlzRXhwb25lbnRpYWwgPSBpc0V4cG9uZW50aWFsUmV0cnlSZXNwb25zZShyZXNwb25zZSk7XG4gICAgICAgICAgICBjb25zdCBpZ25vcmVFeHBvbmVudGlhbFJlc3BvbnNlID0gaXNFeHBvbmVudGlhbCAmJiBvcHRpb25zLmlnbm9yZUh0dHBTdGF0dXNDb2RlcztcbiAgICAgICAgICAgIGNvbnN0IHVua25vd25SZXNwb25zZSA9IHJlc3BvbnNlICYmICgoMCwgdGhyb3R0bGluZ1JldHJ5U3RyYXRlZ3lfanNfMS5pc1Rocm90dGxpbmdSZXRyeVJlc3BvbnNlKShyZXNwb25zZSkgfHwgIWlzRXhwb25lbnRpYWwpO1xuICAgICAgICAgICAgaWYgKHVua25vd25SZXNwb25zZSB8fCBpZ25vcmVFeHBvbmVudGlhbFJlc3BvbnNlIHx8IGlnbm9yZVN5c3RlbUVycm9ycykge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHNraXBTdHJhdGVneTogdHJ1ZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlRXJyb3IgJiYgIW1hdGNoZWRTeXN0ZW1FcnJvciAmJiAhaXNFeHBvbmVudGlhbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGVycm9yVG9UaHJvdzogcmVzcG9uc2VFcnJvciB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gRXhwb25lbnRpYWxseSBpbmNyZWFzZSB0aGUgZGVsYXkgZWFjaCB0aW1lXG4gICAgICAgICAgICBjb25zdCBleHBvbmVudGlhbERlbGF5ID0gcmV0cnlBZnRlckluTXMgKiBNYXRoLnBvdygyLCByZXRyeUNvdW50KTtcbiAgICAgICAgICAgIC8vIERvbid0IGxldCB0aGUgZGVsYXkgZXhjZWVkIHRoZSBtYXhpbXVtXG4gICAgICAgICAgICBjb25zdCBjbGFtcGVkRXhwb25lbnRpYWxEZWxheSA9IE1hdGgubWluKG1heFJldHJ5SW50ZXJ2YWwsIGV4cG9uZW50aWFsRGVsYXkpO1xuICAgICAgICAgICAgLy8gQWxsb3cgdGhlIGZpbmFsIHZhbHVlIHRvIGhhdmUgc29tZSBcImppdHRlclwiICh3aXRoaW4gNTAlIG9mIHRoZSBkZWxheSBzaXplKSBzb1xuICAgICAgICAgICAgLy8gdGhhdCByZXRyaWVzIGFjcm9zcyBtdWx0aXBsZSBjbGllbnRzIGRvbid0IG9jY3VyIHNpbXVsdGFuZW91c2x5LlxuICAgICAgICAgICAgcmV0cnlBZnRlckluTXMgPVxuICAgICAgICAgICAgICAgIGNsYW1wZWRFeHBvbmVudGlhbERlbGF5IC8gMiArICgwLCBjb3JlX3V0aWxfMS5nZXRSYW5kb21JbnRlZ2VySW5jbHVzaXZlKSgwLCBjbGFtcGVkRXhwb25lbnRpYWxEZWxheSAvIDIpO1xuICAgICAgICAgICAgcmV0dXJuIHsgcmV0cnlBZnRlckluTXMgfTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuLyoqXG4gKiBBIHJlc3BvbnNlIGlzIGEgcmV0cnkgcmVzcG9uc2UgaWYgaXQgaGFzIHN0YXR1cyBjb2RlczpcbiAqIC0gNDA4LCBvclxuICogLSBHcmVhdGVyIG9yIGVxdWFsIHRoYW4gNTAwLCBleGNlcHQgZm9yIDUwMSBhbmQgNTA1LlxuICovXG5mdW5jdGlvbiBpc0V4cG9uZW50aWFsUmV0cnlSZXNwb25zZShyZXNwb25zZSkge1xuICAgIHJldHVybiBCb29sZWFuKHJlc3BvbnNlICYmXG4gICAgICAgIHJlc3BvbnNlLnN0YXR1cyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIChyZXNwb25zZS5zdGF0dXMgPj0gNTAwIHx8IHJlc3BvbnNlLnN0YXR1cyA9PT0gNDA4KSAmJlxuICAgICAgICByZXNwb25zZS5zdGF0dXMgIT09IDUwMSAmJlxuICAgICAgICByZXNwb25zZS5zdGF0dXMgIT09IDUwNSk7XG59XG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciBhbiBlcnJvciBmcm9tIGEgcGlwZWxpbmUgcmVzcG9uc2Ugd2FzIHRyaWdnZXJlZCBpbiB0aGUgbmV0d29yayBsYXllci5cbiAqL1xuZnVuY3Rpb24gaXNTeXN0ZW1FcnJvcihlcnIpIHtcbiAgICBpZiAoIWVycikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiAoZXJyLmNvZGUgPT09IFwiRVRJTUVET1VUXCIgfHxcbiAgICAgICAgZXJyLmNvZGUgPT09IFwiRVNPQ0tFVFRJTUVET1VUXCIgfHxcbiAgICAgICAgZXJyLmNvZGUgPT09IFwiRUNPTk5SRUZVU0VEXCIgfHxcbiAgICAgICAgZXJyLmNvZGUgPT09IFwiRUNPTk5SRVNFVFwiIHx8XG4gICAgICAgIGVyci5jb2RlID09PSBcIkVOT0VOVFwiIHx8XG4gICAgICAgIGVyci5jb2RlID09PSBcIkVOT1RGT1VORFwiKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWV4cG9uZW50aWFsUmV0cnlTdHJhdGVneS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJldHJ5UG9saWN5ID0gcmV0cnlQb2xpY3k7XG5jb25zdCBoZWxwZXJzX2pzXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9oZWxwZXJzLmpzXCIpO1xuY29uc3QgbG9nZ2VyXzEgPSByZXF1aXJlKFwiQGF6dXJlL2xvZ2dlclwiKTtcbmNvbnN0IGFib3J0X2NvbnRyb2xsZXJfMSA9IHJlcXVpcmUoXCJAYXp1cmUvYWJvcnQtY29udHJvbGxlclwiKTtcbmNvbnN0IGNvbnN0YW50c19qc18xID0gcmVxdWlyZShcIi4uL2NvbnN0YW50cy5qc1wiKTtcbmNvbnN0IHJldHJ5UG9saWN5TG9nZ2VyID0gKDAsIGxvZ2dlcl8xLmNyZWF0ZUNsaWVudExvZ2dlcikoXCJjb3JlLXJlc3QtcGlwZWxpbmUgcmV0cnlQb2xpY3lcIik7XG4vKipcbiAqIFRoZSBwcm9ncmFtbWF0aWMgaWRlbnRpZmllciBvZiB0aGUgcmV0cnlQb2xpY3kuXG4gKi9cbmNvbnN0IHJldHJ5UG9saWN5TmFtZSA9IFwicmV0cnlQb2xpY3lcIjtcbi8qKlxuICogcmV0cnlQb2xpY3kgaXMgYSBnZW5lcmljIHBvbGljeSB0byBlbmFibGUgcmV0cnlpbmcgcmVxdWVzdHMgd2hlbiBjZXJ0YWluIGNvbmRpdGlvbnMgYXJlIG1ldFxuICovXG5mdW5jdGlvbiByZXRyeVBvbGljeShzdHJhdGVnaWVzLCBvcHRpb25zID0geyBtYXhSZXRyaWVzOiBjb25zdGFudHNfanNfMS5ERUZBVUxUX1JFVFJZX1BPTElDWV9DT1VOVCB9KSB7XG4gICAgY29uc3QgbG9nZ2VyID0gb3B0aW9ucy5sb2dnZXIgfHwgcmV0cnlQb2xpY3lMb2dnZXI7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogcmV0cnlQb2xpY3lOYW1lLFxuICAgICAgICBhc3luYyBzZW5kUmVxdWVzdChyZXF1ZXN0LCBuZXh0KSB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgICAgbGV0IHJlc3BvbnNlO1xuICAgICAgICAgICAgbGV0IHJlc3BvbnNlRXJyb3I7XG4gICAgICAgICAgICBsZXQgcmV0cnlDb3VudCA9IC0xO1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnN0YW50LWNvbmRpdGlvblxuICAgICAgICAgICAgcmV0cnlSZXF1ZXN0OiB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgICAgIHJldHJ5Q291bnQgKz0gMTtcbiAgICAgICAgICAgICAgICByZXNwb25zZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICByZXNwb25zZUVycm9yID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBSZXRyeSAke3JldHJ5Q291bnR9OiBBdHRlbXB0aW5nIHRvIHNlbmQgcmVxdWVzdGAsIHJlcXVlc3QucmVxdWVzdElkKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCBuZXh0KHJlcXVlc3QpO1xuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhgUmV0cnkgJHtyZXRyeUNvdW50fTogUmVjZWl2ZWQgYSByZXNwb25zZSBmcm9tIHJlcXVlc3RgLCByZXF1ZXN0LnJlcXVlc3RJZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihgUmV0cnkgJHtyZXRyeUNvdW50fTogUmVjZWl2ZWQgYW4gZXJyb3IgZnJvbSByZXF1ZXN0YCwgcmVxdWVzdC5yZXF1ZXN0SWQpO1xuICAgICAgICAgICAgICAgICAgICAvLyBSZXN0RXJyb3JzIGFyZSB2YWxpZCB0YXJnZXRzIGZvciB0aGUgcmV0cnkgc3RyYXRlZ2llcy5cbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgbm9uZSBvZiB0aGUgcmV0cnkgc3RyYXRlZ2llcyBjYW4gd29yayB3aXRoIHRoZW0sIHRoZXkgd2lsbCBiZSB0aHJvd24gbGF0ZXIgaW4gdGhpcyBwb2xpY3kuXG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSByZWNlaXZlZCBlcnJvciBpcyBub3QgYSBSZXN0RXJyb3IsIGl0IGlzIGltbWVkaWF0ZWx5IHRocm93bi5cbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VFcnJvciA9IGU7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZSB8fCByZXNwb25zZUVycm9yLm5hbWUgIT09IFwiUmVzdEVycm9yXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSByZXNwb25zZUVycm9yLnJlc3BvbnNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoKF9hID0gcmVxdWVzdC5hYm9ydFNpZ25hbCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmFib3J0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGBSZXRyeSAke3JldHJ5Q291bnR9OiBSZXF1ZXN0IGFib3J0ZWQuYCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFib3J0RXJyb3IgPSBuZXcgYWJvcnRfY29udHJvbGxlcl8xLkFib3J0RXJyb3IoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgYWJvcnRFcnJvcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJldHJ5Q291bnQgPj0gKChfYiA9IG9wdGlvbnMubWF4UmV0cmllcykgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogY29uc3RhbnRzX2pzXzEuREVGQVVMVF9SRVRSWV9QT0xJQ1lfQ09VTlQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBSZXRyeSAke3JldHJ5Q291bnR9OiBNYXhpbXVtIHJldHJpZXMgcmVhY2hlZC4gUmV0dXJuaW5nIHRoZSBsYXN0IHJlY2VpdmVkIHJlc3BvbnNlLCBvciB0aHJvd2luZyB0aGUgbGFzdCByZWNlaXZlZCBlcnJvci5gKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IHJlc3BvbnNlRXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1heGltdW0gcmV0cmllcyByZWFjaGVkIHdpdGggbm8gcmVzcG9uc2Ugb3IgZXJyb3IgdG8gdGhyb3dcIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYFJldHJ5ICR7cmV0cnlDb3VudH06IFByb2Nlc3NpbmcgJHtzdHJhdGVnaWVzLmxlbmd0aH0gcmV0cnkgc3RyYXRlZ2llcy5gKTtcbiAgICAgICAgICAgICAgICBzdHJhdGVnaWVzTG9vcDogZm9yIChjb25zdCBzdHJhdGVneSBvZiBzdHJhdGVnaWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmF0ZWd5TG9nZ2VyID0gc3RyYXRlZ3kubG9nZ2VyIHx8IHJldHJ5UG9saWN5TG9nZ2VyO1xuICAgICAgICAgICAgICAgICAgICBzdHJhdGVneUxvZ2dlci5pbmZvKGBSZXRyeSAke3JldHJ5Q291bnR9OiBQcm9jZXNzaW5nIHJldHJ5IHN0cmF0ZWd5ICR7c3RyYXRlZ3kubmFtZX0uYCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1vZGlmaWVycyA9IHN0cmF0ZWd5LnJldHJ5KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHJ5Q291bnQsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlRXJyb3IsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAobW9kaWZpZXJzLnNraXBTdHJhdGVneSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyYXRlZ3lMb2dnZXIuaW5mbyhgUmV0cnkgJHtyZXRyeUNvdW50fTogU2tpcHBlZC5gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIHN0cmF0ZWdpZXNMb29wO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgZXJyb3JUb1Rocm93LCByZXRyeUFmdGVySW5NcywgcmVkaXJlY3RUbyB9ID0gbW9kaWZpZXJzO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3JUb1Rocm93KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJhdGVneUxvZ2dlci5lcnJvcihgUmV0cnkgJHtyZXRyeUNvdW50fTogUmV0cnkgc3RyYXRlZ3kgJHtzdHJhdGVneS5uYW1lfSB0aHJvd3MgZXJyb3I6YCwgZXJyb3JUb1Rocm93KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9yVG9UaHJvdztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAocmV0cnlBZnRlckluTXMgfHwgcmV0cnlBZnRlckluTXMgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmF0ZWd5TG9nZ2VyLmluZm8oYFJldHJ5ICR7cmV0cnlDb3VudH06IFJldHJ5IHN0cmF0ZWd5ICR7c3RyYXRlZ3kubmFtZX0gcmV0cmllcyBhZnRlciAke3JldHJ5QWZ0ZXJJbk1zfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgKDAsIGhlbHBlcnNfanNfMS5kZWxheSkocmV0cnlBZnRlckluTXMsIHVuZGVmaW5lZCwgeyBhYm9ydFNpZ25hbDogcmVxdWVzdC5hYm9ydFNpZ25hbCB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIHJldHJ5UmVxdWVzdDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAocmVkaXJlY3RUbykge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyYXRlZ3lMb2dnZXIuaW5mbyhgUmV0cnkgJHtyZXRyeUNvdW50fTogUmV0cnkgc3RyYXRlZ3kgJHtzdHJhdGVneS5uYW1lfSByZWRpcmVjdHMgdG8gJHtyZWRpcmVjdFRvfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC51cmwgPSByZWRpcmVjdFRvO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUgcmV0cnlSZXF1ZXN0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZUVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBOb25lIG9mIHRoZSByZXRyeSBzdHJhdGVnaWVzIGNvdWxkIHdvcmsgd2l0aCB0aGUgcmVjZWl2ZWQgZXJyb3IuIFRocm93aW5nIGl0LmApO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyByZXNwb25zZUVycm9yO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYE5vbmUgb2YgdGhlIHJldHJ5IHN0cmF0ZWdpZXMgY291bGQgd29yayB3aXRoIHRoZSByZWNlaXZlZCByZXNwb25zZS4gUmV0dXJuaW5nIGl0LmApO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIElmIGFsbCB0aGUgcmV0cmllcyBza2lwIGFuZCB0aGVyZSdzIG5vIHJlc3BvbnNlLFxuICAgICAgICAgICAgICAgIC8vIHdlJ3JlIHN0aWxsIGluIHRoZSByZXRyeSBsb29wLCBzbyBhIG5ldyByZXF1ZXN0IHdpbGwgYmUgc2VudFxuICAgICAgICAgICAgICAgIC8vIHVudGlsIGBtYXhSZXRyaWVzYCBpcyByZWFjaGVkLlxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZXRyeVBvbGljeS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlZmF1bHRSZXRyeVBvbGljeU5hbWUgPSB2b2lkIDA7XG5leHBvcnRzLmRlZmF1bHRSZXRyeVBvbGljeSA9IGRlZmF1bHRSZXRyeVBvbGljeTtcbmNvbnN0IGV4cG9uZW50aWFsUmV0cnlTdHJhdGVneV9qc18xID0gcmVxdWlyZShcIi4uL3JldHJ5U3RyYXRlZ2llcy9leHBvbmVudGlhbFJldHJ5U3RyYXRlZ3kuanNcIik7XG5jb25zdCB0aHJvdHRsaW5nUmV0cnlTdHJhdGVneV9qc18xID0gcmVxdWlyZShcIi4uL3JldHJ5U3RyYXRlZ2llcy90aHJvdHRsaW5nUmV0cnlTdHJhdGVneS5qc1wiKTtcbmNvbnN0IHJldHJ5UG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9yZXRyeVBvbGljeS5qc1wiKTtcbmNvbnN0IGNvbnN0YW50c19qc18xID0gcmVxdWlyZShcIi4uL2NvbnN0YW50cy5qc1wiKTtcbi8qKlxuICogTmFtZSBvZiB0aGUge0BsaW5rIGRlZmF1bHRSZXRyeVBvbGljeX1cbiAqL1xuZXhwb3J0cy5kZWZhdWx0UmV0cnlQb2xpY3lOYW1lID0gXCJkZWZhdWx0UmV0cnlQb2xpY3lcIjtcbi8qKlxuICogQSBwb2xpY3kgdGhhdCByZXRyaWVzIGFjY29yZGluZyB0byB0aHJlZSBzdHJhdGVnaWVzOlxuICogLSBXaGVuIHRoZSBzZXJ2ZXIgc2VuZHMgYSA0MjkgcmVzcG9uc2Ugd2l0aCBhIFJldHJ5LUFmdGVyIGhlYWRlci5cbiAqIC0gV2hlbiB0aGVyZSBhcmUgZXJyb3JzIGluIHRoZSB1bmRlcmx5aW5nIHRyYW5zcG9ydCBsYXllciAoZS5nLiBETlMgbG9va3VwIGZhaWx1cmVzKS5cbiAqIC0gT3Igb3RoZXJ3aXNlIGlmIHRoZSBvdXRnb2luZyByZXF1ZXN0IGZhaWxzLCBpdCB3aWxsIHJldHJ5IHdpdGggYW4gZXhwb25lbnRpYWxseSBpbmNyZWFzaW5nIGRlbGF5LlxuICovXG5mdW5jdGlvbiBkZWZhdWx0UmV0cnlQb2xpY3kob3B0aW9ucyA9IHt9KSB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGV4cG9ydHMuZGVmYXVsdFJldHJ5UG9saWN5TmFtZSxcbiAgICAgICAgc2VuZFJlcXVlc3Q6ICgwLCByZXRyeVBvbGljeV9qc18xLnJldHJ5UG9saWN5KShbKDAsIHRocm90dGxpbmdSZXRyeVN0cmF0ZWd5X2pzXzEudGhyb3R0bGluZ1JldHJ5U3RyYXRlZ3kpKCksICgwLCBleHBvbmVudGlhbFJldHJ5U3RyYXRlZ3lfanNfMS5leHBvbmVudGlhbFJldHJ5U3RyYXRlZ3kpKG9wdGlvbnMpXSwge1xuICAgICAgICAgICAgbWF4UmV0cmllczogKF9hID0gb3B0aW9ucy5tYXhSZXRyaWVzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBjb25zdGFudHNfanNfMS5ERUZBVUxUX1JFVFJZX1BPTElDWV9DT1VOVCxcbiAgICAgICAgfSkuc2VuZFJlcXVlc3QsXG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlZmF1bHRSZXRyeVBvbGljeS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNyZWF0ZUh0dHBIZWFkZXJzID0gY3JlYXRlSHR0cEhlYWRlcnM7XG5mdW5jdGlvbiBub3JtYWxpemVOYW1lKG5hbWUpIHtcbiAgICByZXR1cm4gbmFtZS50b0xvd2VyQ2FzZSgpO1xufVxuZnVuY3Rpb24qIGhlYWRlckl0ZXJhdG9yKG1hcCkge1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgbWFwLnZhbHVlcygpKSB7XG4gICAgICAgIHlpZWxkIFtlbnRyeS5uYW1lLCBlbnRyeS52YWx1ZV07XG4gICAgfVxufVxuY2xhc3MgSHR0cEhlYWRlcnNJbXBsIHtcbiAgICBjb25zdHJ1Y3RvcihyYXdIZWFkZXJzKSB7XG4gICAgICAgIHRoaXMuX2hlYWRlcnNNYXAgPSBuZXcgTWFwKCk7XG4gICAgICAgIGlmIChyYXdIZWFkZXJzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGhlYWRlck5hbWUgb2YgT2JqZWN0LmtleXMocmF3SGVhZGVycykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldChoZWFkZXJOYW1lLCByYXdIZWFkZXJzW2hlYWRlck5hbWVdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXQgYSBoZWFkZXIgaW4gdGhpcyBjb2xsZWN0aW9uIHdpdGggdGhlIHByb3ZpZGVkIG5hbWUgYW5kIHZhbHVlLiBUaGUgbmFtZSBpc1xuICAgICAqIGNhc2UtaW5zZW5zaXRpdmUuXG4gICAgICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgaGVhZGVyIHRvIHNldC4gVGhpcyB2YWx1ZSBpcyBjYXNlLWluc2Vuc2l0aXZlLlxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSBvZiB0aGUgaGVhZGVyIHRvIHNldC5cbiAgICAgKi9cbiAgICBzZXQobmFtZSwgdmFsdWUpIHtcbiAgICAgICAgdGhpcy5faGVhZGVyc01hcC5zZXQobm9ybWFsaXplTmFtZShuYW1lKSwgeyBuYW1lLCB2YWx1ZTogU3RyaW5nKHZhbHVlKS50cmltKCkgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgaGVhZGVyIHZhbHVlIGZvciB0aGUgcHJvdmlkZWQgaGVhZGVyIG5hbWUsIG9yIHVuZGVmaW5lZCBpZiBubyBoZWFkZXIgZXhpc3RzIGluIHRoaXNcbiAgICAgKiBjb2xsZWN0aW9uIHdpdGggdGhlIHByb3ZpZGVkIG5hbWUuXG4gICAgICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgaGVhZGVyLiBUaGlzIHZhbHVlIGlzIGNhc2UtaW5zZW5zaXRpdmUuXG4gICAgICovXG4gICAgZ2V0KG5hbWUpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gKF9hID0gdGhpcy5faGVhZGVyc01hcC5nZXQobm9ybWFsaXplTmFtZShuYW1lKSkpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IHdoZXRoZXIgb3Igbm90IHRoaXMgaGVhZGVyIGNvbGxlY3Rpb24gY29udGFpbnMgYSBoZWFkZXIgZW50cnkgZm9yIHRoZSBwcm92aWRlZCBoZWFkZXIgbmFtZS5cbiAgICAgKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBoZWFkZXIgdG8gc2V0LiBUaGlzIHZhbHVlIGlzIGNhc2UtaW5zZW5zaXRpdmUuXG4gICAgICovXG4gICAgaGFzKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hlYWRlcnNNYXAuaGFzKG5vcm1hbGl6ZU5hbWUobmFtZSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZW1vdmUgdGhlIGhlYWRlciB3aXRoIHRoZSBwcm92aWRlZCBoZWFkZXJOYW1lLlxuICAgICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGhlYWRlciB0byByZW1vdmUuXG4gICAgICovXG4gICAgZGVsZXRlKG5hbWUpIHtcbiAgICAgICAgdGhpcy5faGVhZGVyc01hcC5kZWxldGUobm9ybWFsaXplTmFtZShuYW1lKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgSlNPTiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBIVFRQIGhlYWRlciBjb2xsZWN0aW9uLlxuICAgICAqL1xuICAgIHRvSlNPTihvcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgICAgIGlmIChvcHRpb25zLnByZXNlcnZlQ2FzZSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLl9oZWFkZXJzTWFwLnZhbHVlcygpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0W2VudHJ5Lm5hbWVdID0gZW50cnkudmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtub3JtYWxpemVkTmFtZSwgZW50cnldIG9mIHRoaXMuX2hlYWRlcnNNYXApIHtcbiAgICAgICAgICAgICAgICByZXN1bHRbbm9ybWFsaXplZE5hbWVdID0gZW50cnkudmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBIVFRQIGhlYWRlciBjb2xsZWN0aW9uLlxuICAgICAqL1xuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy50b0pTT04oeyBwcmVzZXJ2ZUNhc2U6IHRydWUgfSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJdGVyYXRlIG92ZXIgdHVwbGVzIG9mIGhlYWRlciBbbmFtZSwgdmFsdWVdIHBhaXJzLlxuICAgICAqL1xuICAgIFtTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgICAgICByZXR1cm4gaGVhZGVySXRlcmF0b3IodGhpcy5faGVhZGVyc01hcCk7XG4gICAgfVxufVxuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCB0aGF0IHNhdGlzZmllcyB0aGUgYEh0dHBIZWFkZXJzYCBpbnRlcmZhY2UuXG4gKiBAcGFyYW0gcmF3SGVhZGVycyAtIEEgc2ltcGxlIG9iamVjdCByZXByZXNlbnRpbmcgaW5pdGlhbCBoZWFkZXJzXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUh0dHBIZWFkZXJzKHJhd0hlYWRlcnMpIHtcbiAgICByZXR1cm4gbmV3IEh0dHBIZWFkZXJzSW1wbChyYXdIZWFkZXJzKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWh0dHBIZWFkZXJzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZm9ybURhdGFQb2xpY3lOYW1lID0gdm9pZCAwO1xuZXhwb3J0cy5mb3JtRGF0YVBvbGljeSA9IGZvcm1EYXRhUG9saWN5O1xuY29uc3QgY29yZV91dGlsXzEgPSByZXF1aXJlKFwiQGF6dXJlL2NvcmUtdXRpbFwiKTtcbmNvbnN0IGh0dHBIZWFkZXJzX2pzXzEgPSByZXF1aXJlKFwiLi4vaHR0cEhlYWRlcnMuanNcIik7XG4vKipcbiAqIFRoZSBwcm9ncmFtbWF0aWMgaWRlbnRpZmllciBvZiB0aGUgZm9ybURhdGFQb2xpY3kuXG4gKi9cbmV4cG9ydHMuZm9ybURhdGFQb2xpY3lOYW1lID0gXCJmb3JtRGF0YVBvbGljeVwiO1xuZnVuY3Rpb24gZm9ybURhdGFUb0Zvcm1EYXRhTWFwKGZvcm1EYXRhKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IGZvcm1EYXRhTWFwID0ge307XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgZm9ybURhdGEuZW50cmllcygpKSB7XG4gICAgICAgIChfYSA9IGZvcm1EYXRhTWFwW2tleV0pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IChmb3JtRGF0YU1hcFtrZXldID0gW10pO1xuICAgICAgICBmb3JtRGF0YU1hcFtrZXldLnB1c2godmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gZm9ybURhdGFNYXA7XG59XG4vKipcbiAqIEEgcG9saWN5IHRoYXQgZW5jb2RlcyBGb3JtRGF0YSBvbiB0aGUgcmVxdWVzdCBpbnRvIHRoZSBib2R5LlxuICovXG5mdW5jdGlvbiBmb3JtRGF0YVBvbGljeSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBleHBvcnRzLmZvcm1EYXRhUG9saWN5TmFtZSxcbiAgICAgICAgYXN5bmMgc2VuZFJlcXVlc3QocmVxdWVzdCwgbmV4dCkge1xuICAgICAgICAgICAgaWYgKGNvcmVfdXRpbF8xLmlzTm9kZUxpa2UgJiYgdHlwZW9mIEZvcm1EYXRhICE9PSBcInVuZGVmaW5lZFwiICYmIHJlcXVlc3QuYm9keSBpbnN0YW5jZW9mIEZvcm1EYXRhKSB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdC5mb3JtRGF0YSA9IGZvcm1EYXRhVG9Gb3JtRGF0YU1hcChyZXF1ZXN0LmJvZHkpO1xuICAgICAgICAgICAgICAgIHJlcXVlc3QuYm9keSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXF1ZXN0LmZvcm1EYXRhKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29udGVudFR5cGUgPSByZXF1ZXN0LmhlYWRlcnMuZ2V0KFwiQ29udGVudC1UeXBlXCIpO1xuICAgICAgICAgICAgICAgIGlmIChjb250ZW50VHlwZSAmJiBjb250ZW50VHlwZS5pbmRleE9mKFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmJvZHkgPSB3d3dGb3JtVXJsRW5jb2RlKHJlcXVlc3QuZm9ybURhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgcHJlcGFyZUZvcm1EYXRhKHJlcXVlc3QuZm9ybURhdGEsIHJlcXVlc3QpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXF1ZXN0LmZvcm1EYXRhID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5leHQocmVxdWVzdCk7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbmZ1bmN0aW9uIHd3d0Zvcm1VcmxFbmNvZGUoZm9ybURhdGEpIHtcbiAgICBjb25zdCB1cmxTZWFyY2hQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZm9ybURhdGEpKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBzdWJWYWx1ZSBvZiB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHVybFNlYXJjaFBhcmFtcy5hcHBlbmQoa2V5LCBzdWJWYWx1ZS50b1N0cmluZygpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHVybFNlYXJjaFBhcmFtcy5hcHBlbmQoa2V5LCB2YWx1ZS50b1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdXJsU2VhcmNoUGFyYW1zLnRvU3RyaW5nKCk7XG59XG5hc3luYyBmdW5jdGlvbiBwcmVwYXJlRm9ybURhdGEoZm9ybURhdGEsIHJlcXVlc3QpIHtcbiAgICAvLyB2YWxpZGF0ZSBjb250ZW50IHR5cGUgKG11bHRpcGFydC9mb3JtLWRhdGEpXG4gICAgY29uc3QgY29udGVudFR5cGUgPSByZXF1ZXN0LmhlYWRlcnMuZ2V0KFwiQ29udGVudC1UeXBlXCIpO1xuICAgIGlmIChjb250ZW50VHlwZSAmJiAhY29udGVudFR5cGUuc3RhcnRzV2l0aChcIm11bHRpcGFydC9mb3JtLWRhdGFcIikpIHtcbiAgICAgICAgLy8gY29udGVudCB0eXBlIGlzIHNwZWNpZmllZCBhbmQgaXMgbm90IG11bHRpcGFydC9mb3JtLWRhdGEuIEV4aXQuXG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmVxdWVzdC5oZWFkZXJzLnNldChcIkNvbnRlbnQtVHlwZVwiLCBjb250ZW50VHlwZSAhPT0gbnVsbCAmJiBjb250ZW50VHlwZSAhPT0gdm9pZCAwID8gY29udGVudFR5cGUgOiBcIm11bHRpcGFydC9mb3JtLWRhdGFcIik7XG4gICAgLy8gc2V0IGJvZHkgdG8gTXVsdGlwYXJ0UmVxdWVzdEJvZHkgdXNpbmcgY29udGVudCBmcm9tIEZvcm1EYXRhTWFwXG4gICAgY29uc3QgcGFydHMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IFtmaWVsZE5hbWUsIHZhbHVlc10gb2YgT2JqZWN0LmVudHJpZXMoZm9ybURhdGEpKSB7XG4gICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgQXJyYXkuaXNBcnJheSh2YWx1ZXMpID8gdmFsdWVzIDogW3ZhbHVlc10pIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBwYXJ0cy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogKDAsIGh0dHBIZWFkZXJzX2pzXzEuY3JlYXRlSHR0cEhlYWRlcnMpKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiQ29udGVudC1EaXNwb3NpdGlvblwiOiBgZm9ybS1kYXRhOyBuYW1lPVwiJHtmaWVsZE5hbWV9XCJgLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgYm9keTogKDAsIGNvcmVfdXRpbF8xLnN0cmluZ1RvVWludDhBcnJheSkodmFsdWUsIFwidXRmLThcIiksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCB2YWx1ZSBmb3Iga2V5ICR7ZmllbGROYW1lfTogJHt2YWx1ZX0uIFZhbHVlIHNob3VsZCBiZSBzZXJpYWxpemVkIHRvIHN0cmluZyBmaXJzdC5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIHVzaW5nIHx8IGluc3RlYWQgb2YgPz8gaGVyZSBzaW5jZSBpZiB2YWx1ZS5uYW1lIGlzIGVtcHR5IHdlIHNob3VsZCBjcmVhdGUgYSBmaWxlIG5hbWVcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlTmFtZSA9IHZhbHVlLm5hbWUgfHwgXCJibG9iXCI7XG4gICAgICAgICAgICAgICAgY29uc3QgaGVhZGVycyA9ICgwLCBodHRwSGVhZGVyc19qc18xLmNyZWF0ZUh0dHBIZWFkZXJzKSgpO1xuICAgICAgICAgICAgICAgIGhlYWRlcnMuc2V0KFwiQ29udGVudC1EaXNwb3NpdGlvblwiLCBgZm9ybS1kYXRhOyBuYW1lPVwiJHtmaWVsZE5hbWV9XCI7IGZpbGVuYW1lPVwiJHtmaWxlTmFtZX1cImApO1xuICAgICAgICAgICAgICAgIC8vIGFnYWluLCB8fCBpcyB1c2VkIHNpbmNlIGFuIGVtcHR5IHZhbHVlLnR5cGUgbWVhbnMgdGhlIGNvbnRlbnQgdHlwZSBpcyB1bnNldFxuICAgICAgICAgICAgICAgIGhlYWRlcnMuc2V0KFwiQ29udGVudC1UeXBlXCIsIHZhbHVlLnR5cGUgfHwgXCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIik7XG4gICAgICAgICAgICAgICAgcGFydHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgIGJvZHk6IHZhbHVlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJlcXVlc3QubXVsdGlwYXJ0Qm9keSA9IHsgcGFydHMgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZvcm1EYXRhUG9saWN5LmpzLm1hcCIsCiAgICAiLyoqXG4gKiBIZWxwZXJzLlxuICovXG5cbnZhciBzID0gMTAwMDtcbnZhciBtID0gcyAqIDYwO1xudmFyIGggPSBtICogNjA7XG52YXIgZCA9IGggKiAyNDtcbnZhciB3ID0gZCAqIDc7XG52YXIgeSA9IGQgKiAzNjUuMjU7XG5cbi8qKlxuICogUGFyc2Ugb3IgZm9ybWF0IHRoZSBnaXZlbiBgdmFsYC5cbiAqXG4gKiBPcHRpb25zOlxuICpcbiAqICAtIGBsb25nYCB2ZXJib3NlIGZvcm1hdHRpbmcgW2ZhbHNlXVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfE51bWJlcn0gdmFsXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhyb3cgYW4gZXJyb3IgaWYgdmFsIGlzIG5vdCBhIG5vbi1lbXB0eSBzdHJpbmcgb3IgYSBudW1iZXJcbiAqIEByZXR1cm4ge1N0cmluZ3xOdW1iZXJ9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHZhbCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsO1xuICBpZiAodHlwZSA9PT0gJ3N0cmluZycgJiYgdmFsLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gcGFyc2UodmFsKTtcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZSh2YWwpKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMubG9uZyA/IGZtdExvbmcodmFsKSA6IGZtdFNob3J0KHZhbCk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgICd2YWwgaXMgbm90IGEgbm9uLWVtcHR5IHN0cmluZyBvciBhIHZhbGlkIG51bWJlci4gdmFsPScgK1xuICAgICAgSlNPTi5zdHJpbmdpZnkodmFsKVxuICApO1xufTtcblxuLyoqXG4gKiBQYXJzZSB0aGUgZ2l2ZW4gYHN0cmAgYW5kIHJldHVybiBtaWxsaXNlY29uZHMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHJldHVybiB7TnVtYmVyfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gcGFyc2Uoc3RyKSB7XG4gIHN0ciA9IFN0cmluZyhzdHIpO1xuICBpZiAoc3RyLmxlbmd0aCA+IDEwMCkge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgbWF0Y2ggPSAvXigtPyg/OlxcZCspP1xcLj9cXGQrKSAqKG1pbGxpc2Vjb25kcz98bXNlY3M/fG1zfHNlY29uZHM/fHNlY3M/fHN8bWludXRlcz98bWlucz98bXxob3Vycz98aHJzP3xofGRheXM/fGR8d2Vla3M/fHd8eWVhcnM/fHlycz98eSk/JC9pLmV4ZWMoXG4gICAgc3RyXG4gICk7XG4gIGlmICghbWF0Y2gpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIG4gPSBwYXJzZUZsb2F0KG1hdGNoWzFdKTtcbiAgdmFyIHR5cGUgPSAobWF0Y2hbMl0gfHwgJ21zJykudG9Mb3dlckNhc2UoKTtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAneWVhcnMnOlxuICAgIGNhc2UgJ3llYXInOlxuICAgIGNhc2UgJ3lycyc6XG4gICAgY2FzZSAneXInOlxuICAgIGNhc2UgJ3knOlxuICAgICAgcmV0dXJuIG4gKiB5O1xuICAgIGNhc2UgJ3dlZWtzJzpcbiAgICBjYXNlICd3ZWVrJzpcbiAgICBjYXNlICd3JzpcbiAgICAgIHJldHVybiBuICogdztcbiAgICBjYXNlICdkYXlzJzpcbiAgICBjYXNlICdkYXknOlxuICAgIGNhc2UgJ2QnOlxuICAgICAgcmV0dXJuIG4gKiBkO1xuICAgIGNhc2UgJ2hvdXJzJzpcbiAgICBjYXNlICdob3VyJzpcbiAgICBjYXNlICdocnMnOlxuICAgIGNhc2UgJ2hyJzpcbiAgICBjYXNlICdoJzpcbiAgICAgIHJldHVybiBuICogaDtcbiAgICBjYXNlICdtaW51dGVzJzpcbiAgICBjYXNlICdtaW51dGUnOlxuICAgIGNhc2UgJ21pbnMnOlxuICAgIGNhc2UgJ21pbic6XG4gICAgY2FzZSAnbSc6XG4gICAgICByZXR1cm4gbiAqIG07XG4gICAgY2FzZSAnc2Vjb25kcyc6XG4gICAgY2FzZSAnc2Vjb25kJzpcbiAgICBjYXNlICdzZWNzJzpcbiAgICBjYXNlICdzZWMnOlxuICAgIGNhc2UgJ3MnOlxuICAgICAgcmV0dXJuIG4gKiBzO1xuICAgIGNhc2UgJ21pbGxpc2Vjb25kcyc6XG4gICAgY2FzZSAnbWlsbGlzZWNvbmQnOlxuICAgIGNhc2UgJ21zZWNzJzpcbiAgICBjYXNlICdtc2VjJzpcbiAgICBjYXNlICdtcyc6XG4gICAgICByZXR1cm4gbjtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIFNob3J0IGZvcm1hdCBmb3IgYG1zYC5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gbXNcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGZtdFNob3J0KG1zKSB7XG4gIHZhciBtc0FicyA9IE1hdGguYWJzKG1zKTtcbiAgaWYgKG1zQWJzID49IGQpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIGQpICsgJ2QnO1xuICB9XG4gIGlmIChtc0FicyA+PSBoKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBoKSArICdoJztcbiAgfVxuICBpZiAobXNBYnMgPj0gbSkge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gbSkgKyAnbSc7XG4gIH1cbiAgaWYgKG1zQWJzID49IHMpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIHMpICsgJ3MnO1xuICB9XG4gIHJldHVybiBtcyArICdtcyc7XG59XG5cbi8qKlxuICogTG9uZyBmb3JtYXQgZm9yIGBtc2AuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IG1zXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBmbXRMb25nKG1zKSB7XG4gIHZhciBtc0FicyA9IE1hdGguYWJzKG1zKTtcbiAgaWYgKG1zQWJzID49IGQpIHtcbiAgICByZXR1cm4gcGx1cmFsKG1zLCBtc0FicywgZCwgJ2RheScpO1xuICB9XG4gIGlmIChtc0FicyA+PSBoKSB7XG4gICAgcmV0dXJuIHBsdXJhbChtcywgbXNBYnMsIGgsICdob3VyJyk7XG4gIH1cbiAgaWYgKG1zQWJzID49IG0pIHtcbiAgICByZXR1cm4gcGx1cmFsKG1zLCBtc0FicywgbSwgJ21pbnV0ZScpO1xuICB9XG4gIGlmIChtc0FicyA+PSBzKSB7XG4gICAgcmV0dXJuIHBsdXJhbChtcywgbXNBYnMsIHMsICdzZWNvbmQnKTtcbiAgfVxuICByZXR1cm4gbXMgKyAnIG1zJztcbn1cblxuLyoqXG4gKiBQbHVyYWxpemF0aW9uIGhlbHBlci5cbiAqL1xuXG5mdW5jdGlvbiBwbHVyYWwobXMsIG1zQWJzLCBuLCBuYW1lKSB7XG4gIHZhciBpc1BsdXJhbCA9IG1zQWJzID49IG4gKiAxLjU7XG4gIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gbikgKyAnICcgKyBuYW1lICsgKGlzUGx1cmFsID8gJ3MnIDogJycpO1xufVxuIiwKICAgICJcbi8qKlxuICogVGhpcyBpcyB0aGUgY29tbW9uIGxvZ2ljIGZvciBib3RoIHRoZSBOb2RlLmpzIGFuZCB3ZWIgYnJvd3NlclxuICogaW1wbGVtZW50YXRpb25zIG9mIGBkZWJ1ZygpYC5cbiAqL1xuXG5mdW5jdGlvbiBzZXR1cChlbnYpIHtcblx0Y3JlYXRlRGVidWcuZGVidWcgPSBjcmVhdGVEZWJ1Zztcblx0Y3JlYXRlRGVidWcuZGVmYXVsdCA9IGNyZWF0ZURlYnVnO1xuXHRjcmVhdGVEZWJ1Zy5jb2VyY2UgPSBjb2VyY2U7XG5cdGNyZWF0ZURlYnVnLmRpc2FibGUgPSBkaXNhYmxlO1xuXHRjcmVhdGVEZWJ1Zy5lbmFibGUgPSBlbmFibGU7XG5cdGNyZWF0ZURlYnVnLmVuYWJsZWQgPSBlbmFibGVkO1xuXHRjcmVhdGVEZWJ1Zy5odW1hbml6ZSA9IHJlcXVpcmUoJ21zJyk7XG5cdGNyZWF0ZURlYnVnLmRlc3Ryb3kgPSBkZXN0cm95O1xuXG5cdE9iamVjdC5rZXlzKGVudikuZm9yRWFjaChrZXkgPT4ge1xuXHRcdGNyZWF0ZURlYnVnW2tleV0gPSBlbnZba2V5XTtcblx0fSk7XG5cblx0LyoqXG5cdCogVGhlIGN1cnJlbnRseSBhY3RpdmUgZGVidWcgbW9kZSBuYW1lcywgYW5kIG5hbWVzIHRvIHNraXAuXG5cdCovXG5cblx0Y3JlYXRlRGVidWcubmFtZXMgPSBbXTtcblx0Y3JlYXRlRGVidWcuc2tpcHMgPSBbXTtcblxuXHQvKipcblx0KiBNYXAgb2Ygc3BlY2lhbCBcIiVuXCIgaGFuZGxpbmcgZnVuY3Rpb25zLCBmb3IgdGhlIGRlYnVnIFwiZm9ybWF0XCIgYXJndW1lbnQuXG5cdCpcblx0KiBWYWxpZCBrZXkgbmFtZXMgYXJlIGEgc2luZ2xlLCBsb3dlciBvciB1cHBlci1jYXNlIGxldHRlciwgaS5lLiBcIm5cIiBhbmQgXCJOXCIuXG5cdCovXG5cdGNyZWF0ZURlYnVnLmZvcm1hdHRlcnMgPSB7fTtcblxuXHQvKipcblx0KiBTZWxlY3RzIGEgY29sb3IgZm9yIGEgZGVidWcgbmFtZXNwYWNlXG5cdCogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZSBUaGUgbmFtZXNwYWNlIHN0cmluZyBmb3IgdGhlIGRlYnVnIGluc3RhbmNlIHRvIGJlIGNvbG9yZWRcblx0KiBAcmV0dXJuIHtOdW1iZXJ8U3RyaW5nfSBBbiBBTlNJIGNvbG9yIGNvZGUgZm9yIHRoZSBnaXZlbiBuYW1lc3BhY2Vcblx0KiBAYXBpIHByaXZhdGVcblx0Ki9cblx0ZnVuY3Rpb24gc2VsZWN0Q29sb3IobmFtZXNwYWNlKSB7XG5cdFx0bGV0IGhhc2ggPSAwO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBuYW1lc3BhY2UubGVuZ3RoOyBpKyspIHtcblx0XHRcdGhhc2ggPSAoKGhhc2ggPDwgNSkgLSBoYXNoKSArIG5hbWVzcGFjZS5jaGFyQ29kZUF0KGkpO1xuXHRcdFx0aGFzaCB8PSAwOyAvLyBDb252ZXJ0IHRvIDMyYml0IGludGVnZXJcblx0XHR9XG5cblx0XHRyZXR1cm4gY3JlYXRlRGVidWcuY29sb3JzW01hdGguYWJzKGhhc2gpICUgY3JlYXRlRGVidWcuY29sb3JzLmxlbmd0aF07XG5cdH1cblx0Y3JlYXRlRGVidWcuc2VsZWN0Q29sb3IgPSBzZWxlY3RDb2xvcjtcblxuXHQvKipcblx0KiBDcmVhdGUgYSBkZWJ1Z2dlciB3aXRoIHRoZSBnaXZlbiBgbmFtZXNwYWNlYC5cblx0KlxuXHQqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2Vcblx0KiBAcmV0dXJuIHtGdW5jdGlvbn1cblx0KiBAYXBpIHB1YmxpY1xuXHQqL1xuXHRmdW5jdGlvbiBjcmVhdGVEZWJ1ZyhuYW1lc3BhY2UpIHtcblx0XHRsZXQgcHJldlRpbWU7XG5cdFx0bGV0IGVuYWJsZU92ZXJyaWRlID0gbnVsbDtcblx0XHRsZXQgbmFtZXNwYWNlc0NhY2hlO1xuXHRcdGxldCBlbmFibGVkQ2FjaGU7XG5cblx0XHRmdW5jdGlvbiBkZWJ1ZyguLi5hcmdzKSB7XG5cdFx0XHQvLyBEaXNhYmxlZD9cblx0XHRcdGlmICghZGVidWcuZW5hYmxlZCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHNlbGYgPSBkZWJ1ZztcblxuXHRcdFx0Ly8gU2V0IGBkaWZmYCB0aW1lc3RhbXBcblx0XHRcdGNvbnN0IGN1cnIgPSBOdW1iZXIobmV3IERhdGUoKSk7XG5cdFx0XHRjb25zdCBtcyA9IGN1cnIgLSAocHJldlRpbWUgfHwgY3Vycik7XG5cdFx0XHRzZWxmLmRpZmYgPSBtcztcblx0XHRcdHNlbGYucHJldiA9IHByZXZUaW1lO1xuXHRcdFx0c2VsZi5jdXJyID0gY3Vycjtcblx0XHRcdHByZXZUaW1lID0gY3VycjtcblxuXHRcdFx0YXJnc1swXSA9IGNyZWF0ZURlYnVnLmNvZXJjZShhcmdzWzBdKTtcblxuXHRcdFx0aWYgKHR5cGVvZiBhcmdzWzBdICE9PSAnc3RyaW5nJykge1xuXHRcdFx0XHQvLyBBbnl0aGluZyBlbHNlIGxldCdzIGluc3BlY3Qgd2l0aCAlT1xuXHRcdFx0XHRhcmdzLnVuc2hpZnQoJyVPJyk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFwcGx5IGFueSBgZm9ybWF0dGVyc2AgdHJhbnNmb3JtYXRpb25zXG5cdFx0XHRsZXQgaW5kZXggPSAwO1xuXHRcdFx0YXJnc1swXSA9IGFyZ3NbMF0ucmVwbGFjZSgvJShbYS16QS1aJV0pL2csIChtYXRjaCwgZm9ybWF0KSA9PiB7XG5cdFx0XHRcdC8vIElmIHdlIGVuY291bnRlciBhbiBlc2NhcGVkICUgdGhlbiBkb24ndCBpbmNyZWFzZSB0aGUgYXJyYXkgaW5kZXhcblx0XHRcdFx0aWYgKG1hdGNoID09PSAnJSUnKSB7XG5cdFx0XHRcdFx0cmV0dXJuICclJztcblx0XHRcdFx0fVxuXHRcdFx0XHRpbmRleCsrO1xuXHRcdFx0XHRjb25zdCBmb3JtYXR0ZXIgPSBjcmVhdGVEZWJ1Zy5mb3JtYXR0ZXJzW2Zvcm1hdF07XG5cdFx0XHRcdGlmICh0eXBlb2YgZm9ybWF0dGVyID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0Y29uc3QgdmFsID0gYXJnc1tpbmRleF07XG5cdFx0XHRcdFx0bWF0Y2ggPSBmb3JtYXR0ZXIuY2FsbChzZWxmLCB2YWwpO1xuXG5cdFx0XHRcdFx0Ly8gTm93IHdlIG5lZWQgdG8gcmVtb3ZlIGBhcmdzW2luZGV4XWAgc2luY2UgaXQncyBpbmxpbmVkIGluIHRoZSBgZm9ybWF0YFxuXHRcdFx0XHRcdGFyZ3Muc3BsaWNlKGluZGV4LCAxKTtcblx0XHRcdFx0XHRpbmRleC0tO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBtYXRjaDtcblx0XHRcdH0pO1xuXG5cdFx0XHQvLyBBcHBseSBlbnYtc3BlY2lmaWMgZm9ybWF0dGluZyAoY29sb3JzLCBldGMuKVxuXHRcdFx0Y3JlYXRlRGVidWcuZm9ybWF0QXJncy5jYWxsKHNlbGYsIGFyZ3MpO1xuXG5cdFx0XHRjb25zdCBsb2dGbiA9IHNlbGYubG9nIHx8IGNyZWF0ZURlYnVnLmxvZztcblx0XHRcdGxvZ0ZuLmFwcGx5KHNlbGYsIGFyZ3MpO1xuXHRcdH1cblxuXHRcdGRlYnVnLm5hbWVzcGFjZSA9IG5hbWVzcGFjZTtcblx0XHRkZWJ1Zy51c2VDb2xvcnMgPSBjcmVhdGVEZWJ1Zy51c2VDb2xvcnMoKTtcblx0XHRkZWJ1Zy5jb2xvciA9IGNyZWF0ZURlYnVnLnNlbGVjdENvbG9yKG5hbWVzcGFjZSk7XG5cdFx0ZGVidWcuZXh0ZW5kID0gZXh0ZW5kO1xuXHRcdGRlYnVnLmRlc3Ryb3kgPSBjcmVhdGVEZWJ1Zy5kZXN0cm95OyAvLyBYWFggVGVtcG9yYXJ5LiBXaWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZS5cblxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkZWJ1ZywgJ2VuYWJsZWQnLCB7XG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcblx0XHRcdGdldDogKCkgPT4ge1xuXHRcdFx0XHRpZiAoZW5hYmxlT3ZlcnJpZGUgIT09IG51bGwpIHtcblx0XHRcdFx0XHRyZXR1cm4gZW5hYmxlT3ZlcnJpZGU7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG5hbWVzcGFjZXNDYWNoZSAhPT0gY3JlYXRlRGVidWcubmFtZXNwYWNlcykge1xuXHRcdFx0XHRcdG5hbWVzcGFjZXNDYWNoZSA9IGNyZWF0ZURlYnVnLm5hbWVzcGFjZXM7XG5cdFx0XHRcdFx0ZW5hYmxlZENhY2hlID0gY3JlYXRlRGVidWcuZW5hYmxlZChuYW1lc3BhY2UpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGVuYWJsZWRDYWNoZTtcblx0XHRcdH0sXG5cdFx0XHRzZXQ6IHYgPT4ge1xuXHRcdFx0XHRlbmFibGVPdmVycmlkZSA9IHY7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHQvLyBFbnYtc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gbG9naWMgZm9yIGRlYnVnIGluc3RhbmNlc1xuXHRcdGlmICh0eXBlb2YgY3JlYXRlRGVidWcuaW5pdCA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0Y3JlYXRlRGVidWcuaW5pdChkZWJ1Zyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGRlYnVnO1xuXHR9XG5cblx0ZnVuY3Rpb24gZXh0ZW5kKG5hbWVzcGFjZSwgZGVsaW1pdGVyKSB7XG5cdFx0Y29uc3QgbmV3RGVidWcgPSBjcmVhdGVEZWJ1Zyh0aGlzLm5hbWVzcGFjZSArICh0eXBlb2YgZGVsaW1pdGVyID09PSAndW5kZWZpbmVkJyA/ICc6JyA6IGRlbGltaXRlcikgKyBuYW1lc3BhY2UpO1xuXHRcdG5ld0RlYnVnLmxvZyA9IHRoaXMubG9nO1xuXHRcdHJldHVybiBuZXdEZWJ1Zztcblx0fVxuXG5cdC8qKlxuXHQqIEVuYWJsZXMgYSBkZWJ1ZyBtb2RlIGJ5IG5hbWVzcGFjZXMuIFRoaXMgY2FuIGluY2x1ZGUgbW9kZXNcblx0KiBzZXBhcmF0ZWQgYnkgYSBjb2xvbiBhbmQgd2lsZGNhcmRzLlxuXHQqXG5cdCogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZXNcblx0KiBAYXBpIHB1YmxpY1xuXHQqL1xuXHRmdW5jdGlvbiBlbmFibGUobmFtZXNwYWNlcykge1xuXHRcdGNyZWF0ZURlYnVnLnNhdmUobmFtZXNwYWNlcyk7XG5cdFx0Y3JlYXRlRGVidWcubmFtZXNwYWNlcyA9IG5hbWVzcGFjZXM7XG5cblx0XHRjcmVhdGVEZWJ1Zy5uYW1lcyA9IFtdO1xuXHRcdGNyZWF0ZURlYnVnLnNraXBzID0gW107XG5cblx0XHRsZXQgaTtcblx0XHRjb25zdCBzcGxpdCA9ICh0eXBlb2YgbmFtZXNwYWNlcyA9PT0gJ3N0cmluZycgPyBuYW1lc3BhY2VzIDogJycpLnNwbGl0KC9bXFxzLF0rLyk7XG5cdFx0Y29uc3QgbGVuID0gc3BsaXQubGVuZ3RoO1xuXG5cdFx0Zm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0XHRpZiAoIXNwbGl0W2ldKSB7XG5cdFx0XHRcdC8vIGlnbm9yZSBlbXB0eSBzdHJpbmdzXG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRuYW1lc3BhY2VzID0gc3BsaXRbaV0ucmVwbGFjZSgvXFwqL2csICcuKj8nKTtcblxuXHRcdFx0aWYgKG5hbWVzcGFjZXNbMF0gPT09ICctJykge1xuXHRcdFx0XHRjcmVhdGVEZWJ1Zy5za2lwcy5wdXNoKG5ldyBSZWdFeHAoJ14nICsgbmFtZXNwYWNlcy5zbGljZSgxKSArICckJykpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y3JlYXRlRGVidWcubmFtZXMucHVzaChuZXcgUmVnRXhwKCdeJyArIG5hbWVzcGFjZXMgKyAnJCcpKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0KiBEaXNhYmxlIGRlYnVnIG91dHB1dC5cblx0KlxuXHQqIEByZXR1cm4ge1N0cmluZ30gbmFtZXNwYWNlc1xuXHQqIEBhcGkgcHVibGljXG5cdCovXG5cdGZ1bmN0aW9uIGRpc2FibGUoKSB7XG5cdFx0Y29uc3QgbmFtZXNwYWNlcyA9IFtcblx0XHRcdC4uLmNyZWF0ZURlYnVnLm5hbWVzLm1hcCh0b05hbWVzcGFjZSksXG5cdFx0XHQuLi5jcmVhdGVEZWJ1Zy5za2lwcy5tYXAodG9OYW1lc3BhY2UpLm1hcChuYW1lc3BhY2UgPT4gJy0nICsgbmFtZXNwYWNlKVxuXHRcdF0uam9pbignLCcpO1xuXHRcdGNyZWF0ZURlYnVnLmVuYWJsZSgnJyk7XG5cdFx0cmV0dXJuIG5hbWVzcGFjZXM7XG5cdH1cblxuXHQvKipcblx0KiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIG1vZGUgbmFtZSBpcyBlbmFibGVkLCBmYWxzZSBvdGhlcndpc2UuXG5cdCpcblx0KiBAcGFyYW0ge1N0cmluZ30gbmFtZVxuXHQqIEByZXR1cm4ge0Jvb2xlYW59XG5cdCogQGFwaSBwdWJsaWNcblx0Ki9cblx0ZnVuY3Rpb24gZW5hYmxlZChuYW1lKSB7XG5cdFx0aWYgKG5hbWVbbmFtZS5sZW5ndGggLSAxXSA9PT0gJyonKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRsZXQgaTtcblx0XHRsZXQgbGVuO1xuXG5cdFx0Zm9yIChpID0gMCwgbGVuID0gY3JlYXRlRGVidWcuc2tpcHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcblx0XHRcdGlmIChjcmVhdGVEZWJ1Zy5za2lwc1tpXS50ZXN0KG5hbWUpKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmb3IgKGkgPSAwLCBsZW4gPSBjcmVhdGVEZWJ1Zy5uYW1lcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuXHRcdFx0aWYgKGNyZWF0ZURlYnVnLm5hbWVzW2ldLnRlc3QobmFtZSkpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCogQ29udmVydCByZWdleHAgdG8gbmFtZXNwYWNlXG5cdCpcblx0KiBAcGFyYW0ge1JlZ0V4cH0gcmVneGVwXG5cdCogQHJldHVybiB7U3RyaW5nfSBuYW1lc3BhY2Vcblx0KiBAYXBpIHByaXZhdGVcblx0Ki9cblx0ZnVuY3Rpb24gdG9OYW1lc3BhY2UocmVnZXhwKSB7XG5cdFx0cmV0dXJuIHJlZ2V4cC50b1N0cmluZygpXG5cdFx0XHQuc3Vic3RyaW5nKDIsIHJlZ2V4cC50b1N0cmluZygpLmxlbmd0aCAtIDIpXG5cdFx0XHQucmVwbGFjZSgvXFwuXFwqXFw/JC8sICcqJyk7XG5cdH1cblxuXHQvKipcblx0KiBDb2VyY2UgYHZhbGAuXG5cdCpcblx0KiBAcGFyYW0ge01peGVkfSB2YWxcblx0KiBAcmV0dXJuIHtNaXhlZH1cblx0KiBAYXBpIHByaXZhdGVcblx0Ki9cblx0ZnVuY3Rpb24gY29lcmNlKHZhbCkge1xuXHRcdGlmICh2YWwgaW5zdGFuY2VvZiBFcnJvcikge1xuXHRcdFx0cmV0dXJuIHZhbC5zdGFjayB8fCB2YWwubWVzc2FnZTtcblx0XHR9XG5cdFx0cmV0dXJuIHZhbDtcblx0fVxuXG5cdC8qKlxuXHQqIFhYWCBETyBOT1QgVVNFLiBUaGlzIGlzIGEgdGVtcG9yYXJ5IHN0dWIgZnVuY3Rpb24uXG5cdCogWFhYIEl0IFdJTEwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlLlxuXHQqL1xuXHRmdW5jdGlvbiBkZXN0cm95KCkge1xuXHRcdGNvbnNvbGUud2FybignSW5zdGFuY2UgbWV0aG9kIGBkZWJ1Zy5kZXN0cm95KClgIGlzIGRlcHJlY2F0ZWQgYW5kIG5vIGxvbmdlciBkb2VzIGFueXRoaW5nLiBJdCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbiBvZiBgZGVidWdgLicpO1xuXHR9XG5cblx0Y3JlYXRlRGVidWcuZW5hYmxlKGNyZWF0ZURlYnVnLmxvYWQoKSk7XG5cblx0cmV0dXJuIGNyZWF0ZURlYnVnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldHVwO1xuIiwKICAgICIvKiBlc2xpbnQtZW52IGJyb3dzZXIgKi9cblxuLyoqXG4gKiBUaGlzIGlzIHRoZSB3ZWIgYnJvd3NlciBpbXBsZW1lbnRhdGlvbiBvZiBgZGVidWcoKWAuXG4gKi9cblxuZXhwb3J0cy5mb3JtYXRBcmdzID0gZm9ybWF0QXJncztcbmV4cG9ydHMuc2F2ZSA9IHNhdmU7XG5leHBvcnRzLmxvYWQgPSBsb2FkO1xuZXhwb3J0cy51c2VDb2xvcnMgPSB1c2VDb2xvcnM7XG5leHBvcnRzLnN0b3JhZ2UgPSBsb2NhbHN0b3JhZ2UoKTtcbmV4cG9ydHMuZGVzdHJveSA9ICgoKSA9PiB7XG5cdGxldCB3YXJuZWQgPSBmYWxzZTtcblxuXHRyZXR1cm4gKCkgPT4ge1xuXHRcdGlmICghd2FybmVkKSB7XG5cdFx0XHR3YXJuZWQgPSB0cnVlO1xuXHRcdFx0Y29uc29sZS53YXJuKCdJbnN0YW5jZSBtZXRob2QgYGRlYnVnLmRlc3Ryb3koKWAgaXMgZGVwcmVjYXRlZCBhbmQgbm8gbG9uZ2VyIGRvZXMgYW55dGhpbmcuIEl0IHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIGBkZWJ1Z2AuJyk7XG5cdFx0fVxuXHR9O1xufSkoKTtcblxuLyoqXG4gKiBDb2xvcnMuXG4gKi9cblxuZXhwb3J0cy5jb2xvcnMgPSBbXG5cdCcjMDAwMENDJyxcblx0JyMwMDAwRkYnLFxuXHQnIzAwMzNDQycsXG5cdCcjMDAzM0ZGJyxcblx0JyMwMDY2Q0MnLFxuXHQnIzAwNjZGRicsXG5cdCcjMDA5OUNDJyxcblx0JyMwMDk5RkYnLFxuXHQnIzAwQ0MwMCcsXG5cdCcjMDBDQzMzJyxcblx0JyMwMENDNjYnLFxuXHQnIzAwQ0M5OScsXG5cdCcjMDBDQ0NDJyxcblx0JyMwMENDRkYnLFxuXHQnIzMzMDBDQycsXG5cdCcjMzMwMEZGJyxcblx0JyMzMzMzQ0MnLFxuXHQnIzMzMzNGRicsXG5cdCcjMzM2NkNDJyxcblx0JyMzMzY2RkYnLFxuXHQnIzMzOTlDQycsXG5cdCcjMzM5OUZGJyxcblx0JyMzM0NDMDAnLFxuXHQnIzMzQ0MzMycsXG5cdCcjMzNDQzY2Jyxcblx0JyMzM0NDOTknLFxuXHQnIzMzQ0NDQycsXG5cdCcjMzNDQ0ZGJyxcblx0JyM2NjAwQ0MnLFxuXHQnIzY2MDBGRicsXG5cdCcjNjYzM0NDJyxcblx0JyM2NjMzRkYnLFxuXHQnIzY2Q0MwMCcsXG5cdCcjNjZDQzMzJyxcblx0JyM5OTAwQ0MnLFxuXHQnIzk5MDBGRicsXG5cdCcjOTkzM0NDJyxcblx0JyM5OTMzRkYnLFxuXHQnIzk5Q0MwMCcsXG5cdCcjOTlDQzMzJyxcblx0JyNDQzAwMDAnLFxuXHQnI0NDMDAzMycsXG5cdCcjQ0MwMDY2Jyxcblx0JyNDQzAwOTknLFxuXHQnI0NDMDBDQycsXG5cdCcjQ0MwMEZGJyxcblx0JyNDQzMzMDAnLFxuXHQnI0NDMzMzMycsXG5cdCcjQ0MzMzY2Jyxcblx0JyNDQzMzOTknLFxuXHQnI0NDMzNDQycsXG5cdCcjQ0MzM0ZGJyxcblx0JyNDQzY2MDAnLFxuXHQnI0NDNjYzMycsXG5cdCcjQ0M5OTAwJyxcblx0JyNDQzk5MzMnLFxuXHQnI0NDQ0MwMCcsXG5cdCcjQ0NDQzMzJyxcblx0JyNGRjAwMDAnLFxuXHQnI0ZGMDAzMycsXG5cdCcjRkYwMDY2Jyxcblx0JyNGRjAwOTknLFxuXHQnI0ZGMDBDQycsXG5cdCcjRkYwMEZGJyxcblx0JyNGRjMzMDAnLFxuXHQnI0ZGMzMzMycsXG5cdCcjRkYzMzY2Jyxcblx0JyNGRjMzOTknLFxuXHQnI0ZGMzNDQycsXG5cdCcjRkYzM0ZGJyxcblx0JyNGRjY2MDAnLFxuXHQnI0ZGNjYzMycsXG5cdCcjRkY5OTAwJyxcblx0JyNGRjk5MzMnLFxuXHQnI0ZGQ0MwMCcsXG5cdCcjRkZDQzMzJ1xuXTtcblxuLyoqXG4gKiBDdXJyZW50bHkgb25seSBXZWJLaXQtYmFzZWQgV2ViIEluc3BlY3RvcnMsIEZpcmVmb3ggPj0gdjMxLFxuICogYW5kIHRoZSBGaXJlYnVnIGV4dGVuc2lvbiAoYW55IEZpcmVmb3ggdmVyc2lvbikgYXJlIGtub3duXG4gKiB0byBzdXBwb3J0IFwiJWNcIiBDU1MgY3VzdG9taXphdGlvbnMuXG4gKlxuICogVE9ETzogYWRkIGEgYGxvY2FsU3RvcmFnZWAgdmFyaWFibGUgdG8gZXhwbGljaXRseSBlbmFibGUvZGlzYWJsZSBjb2xvcnNcbiAqL1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZnVuY3Rpb24gdXNlQ29sb3JzKCkge1xuXHQvLyBOQjogSW4gYW4gRWxlY3Ryb24gcHJlbG9hZCBzY3JpcHQsIGRvY3VtZW50IHdpbGwgYmUgZGVmaW5lZCBidXQgbm90IGZ1bGx5XG5cdC8vIGluaXRpYWxpemVkLiBTaW5jZSB3ZSBrbm93IHdlJ3JlIGluIENocm9tZSwgd2UnbGwganVzdCBkZXRlY3QgdGhpcyBjYXNlXG5cdC8vIGV4cGxpY2l0bHlcblx0aWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5wcm9jZXNzICYmICh3aW5kb3cucHJvY2Vzcy50eXBlID09PSAncmVuZGVyZXInIHx8IHdpbmRvdy5wcm9jZXNzLl9fbndqcykpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8vIEludGVybmV0IEV4cGxvcmVyIGFuZCBFZGdlIGRvIG5vdCBzdXBwb3J0IGNvbG9ycy5cblx0aWYgKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci51c2VyQWdlbnQgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC8oZWRnZXx0cmlkZW50KVxcLyhcXGQrKS8pKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0bGV0IG07XG5cblx0Ly8gSXMgd2Via2l0PyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8xNjQ1OTYwNi8zNzY3NzNcblx0Ly8gZG9jdW1lbnQgaXMgdW5kZWZpbmVkIGluIHJlYWN0LW5hdGl2ZTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0LW5hdGl2ZS9wdWxsLzE2MzJcblx0cmV0dXJuICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLldlYmtpdEFwcGVhcmFuY2UpIHx8XG5cdFx0Ly8gSXMgZmlyZWJ1Zz8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzk4MTIwLzM3Njc3M1xuXHRcdCh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuY29uc29sZSAmJiAod2luZG93LmNvbnNvbGUuZmlyZWJ1ZyB8fCAod2luZG93LmNvbnNvbGUuZXhjZXB0aW9uICYmIHdpbmRvdy5jb25zb2xlLnRhYmxlKSkpIHx8XG5cdFx0Ly8gSXMgZmlyZWZveCA+PSB2MzE/XG5cdFx0Ly8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9Ub29scy9XZWJfQ29uc29sZSNTdHlsaW5nX21lc3NhZ2VzXG5cdFx0KHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci51c2VyQWdlbnQgJiYgKG0gPSBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goL2ZpcmVmb3hcXC8oXFxkKykvKSkgJiYgcGFyc2VJbnQobVsxXSwgMTApID49IDMxKSB8fFxuXHRcdC8vIERvdWJsZSBjaGVjayB3ZWJraXQgaW4gdXNlckFnZW50IGp1c3QgaW4gY2FzZSB3ZSBhcmUgaW4gYSB3b3JrZXJcblx0XHQodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCAmJiBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goL2FwcGxld2Via2l0XFwvKFxcZCspLykpO1xufVxuXG4vKipcbiAqIENvbG9yaXplIGxvZyBhcmd1bWVudHMgaWYgZW5hYmxlZC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGZvcm1hdEFyZ3MoYXJncykge1xuXHRhcmdzWzBdID0gKHRoaXMudXNlQ29sb3JzID8gJyVjJyA6ICcnKSArXG5cdFx0dGhpcy5uYW1lc3BhY2UgK1xuXHRcdCh0aGlzLnVzZUNvbG9ycyA/ICcgJWMnIDogJyAnKSArXG5cdFx0YXJnc1swXSArXG5cdFx0KHRoaXMudXNlQ29sb3JzID8gJyVjICcgOiAnICcpICtcblx0XHQnKycgKyBtb2R1bGUuZXhwb3J0cy5odW1hbml6ZSh0aGlzLmRpZmYpO1xuXG5cdGlmICghdGhpcy51c2VDb2xvcnMpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRjb25zdCBjID0gJ2NvbG9yOiAnICsgdGhpcy5jb2xvcjtcblx0YXJncy5zcGxpY2UoMSwgMCwgYywgJ2NvbG9yOiBpbmhlcml0Jyk7XG5cblx0Ly8gVGhlIGZpbmFsIFwiJWNcIiBpcyBzb21ld2hhdCB0cmlja3ksIGJlY2F1c2UgdGhlcmUgY291bGQgYmUgb3RoZXJcblx0Ly8gYXJndW1lbnRzIHBhc3NlZCBlaXRoZXIgYmVmb3JlIG9yIGFmdGVyIHRoZSAlYywgc28gd2UgbmVlZCB0b1xuXHQvLyBmaWd1cmUgb3V0IHRoZSBjb3JyZWN0IGluZGV4IHRvIGluc2VydCB0aGUgQ1NTIGludG9cblx0bGV0IGluZGV4ID0gMDtcblx0bGV0IGxhc3RDID0gMDtcblx0YXJnc1swXS5yZXBsYWNlKC8lW2EtekEtWiVdL2csIG1hdGNoID0+IHtcblx0XHRpZiAobWF0Y2ggPT09ICclJScpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aW5kZXgrKztcblx0XHRpZiAobWF0Y2ggPT09ICclYycpIHtcblx0XHRcdC8vIFdlIG9ubHkgYXJlIGludGVyZXN0ZWQgaW4gdGhlICpsYXN0KiAlY1xuXHRcdFx0Ly8gKHRoZSB1c2VyIG1heSBoYXZlIHByb3ZpZGVkIHRoZWlyIG93bilcblx0XHRcdGxhc3RDID0gaW5kZXg7XG5cdFx0fVxuXHR9KTtcblxuXHRhcmdzLnNwbGljZShsYXN0QywgMCwgYyk7XG59XG5cbi8qKlxuICogSW52b2tlcyBgY29uc29sZS5kZWJ1ZygpYCB3aGVuIGF2YWlsYWJsZS5cbiAqIE5vLW9wIHdoZW4gYGNvbnNvbGUuZGVidWdgIGlzIG5vdCBhIFwiZnVuY3Rpb25cIi5cbiAqIElmIGBjb25zb2xlLmRlYnVnYCBpcyBub3QgYXZhaWxhYmxlLCBmYWxscyBiYWNrXG4gKiB0byBgY29uc29sZS5sb2dgLlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cbmV4cG9ydHMubG9nID0gY29uc29sZS5kZWJ1ZyB8fCBjb25zb2xlLmxvZyB8fCAoKCkgPT4ge30pO1xuXG4vKipcbiAqIFNhdmUgYG5hbWVzcGFjZXNgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2VzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gc2F2ZShuYW1lc3BhY2VzKSB7XG5cdHRyeSB7XG5cdFx0aWYgKG5hbWVzcGFjZXMpIHtcblx0XHRcdGV4cG9ydHMuc3RvcmFnZS5zZXRJdGVtKCdkZWJ1ZycsIG5hbWVzcGFjZXMpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRleHBvcnRzLnN0b3JhZ2UucmVtb3ZlSXRlbSgnZGVidWcnKTtcblx0XHR9XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0Ly8gU3dhbGxvd1xuXHRcdC8vIFhYWCAoQFFpeC0pIHNob3VsZCB3ZSBiZSBsb2dnaW5nIHRoZXNlP1xuXHR9XG59XG5cbi8qKlxuICogTG9hZCBgbmFtZXNwYWNlc2AuXG4gKlxuICogQHJldHVybiB7U3RyaW5nfSByZXR1cm5zIHRoZSBwcmV2aW91c2x5IHBlcnNpc3RlZCBkZWJ1ZyBtb2Rlc1xuICogQGFwaSBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGxvYWQoKSB7XG5cdGxldCByO1xuXHR0cnkge1xuXHRcdHIgPSBleHBvcnRzLnN0b3JhZ2UuZ2V0SXRlbSgnZGVidWcnKTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHQvLyBTd2FsbG93XG5cdFx0Ly8gWFhYIChAUWl4LSkgc2hvdWxkIHdlIGJlIGxvZ2dpbmcgdGhlc2U/XG5cdH1cblxuXHQvLyBJZiBkZWJ1ZyBpc24ndCBzZXQgaW4gTFMsIGFuZCB3ZSdyZSBpbiBFbGVjdHJvbiwgdHJ5IHRvIGxvYWQgJERFQlVHXG5cdGlmICghciAmJiB0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgJ2VudicgaW4gcHJvY2Vzcykge1xuXHRcdHIgPSBwcm9jZXNzLmVudi5ERUJVRztcblx0fVxuXG5cdHJldHVybiByO1xufVxuXG4vKipcbiAqIExvY2Fsc3RvcmFnZSBhdHRlbXB0cyB0byByZXR1cm4gdGhlIGxvY2Fsc3RvcmFnZS5cbiAqXG4gKiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHNhZmFyaSB0aHJvd3NcbiAqIHdoZW4gYSB1c2VyIGRpc2FibGVzIGNvb2tpZXMvbG9jYWxzdG9yYWdlXG4gKiBhbmQgeW91IGF0dGVtcHQgdG8gYWNjZXNzIGl0LlxuICpcbiAqIEByZXR1cm4ge0xvY2FsU3RvcmFnZX1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGxvY2Fsc3RvcmFnZSgpIHtcblx0dHJ5IHtcblx0XHQvLyBUVk1MS2l0IChBcHBsZSBUViBKUyBSdW50aW1lKSBkb2VzIG5vdCBoYXZlIGEgd2luZG93IG9iamVjdCwganVzdCBsb2NhbFN0b3JhZ2UgaW4gdGhlIGdsb2JhbCBjb250ZXh0XG5cdFx0Ly8gVGhlIEJyb3dzZXIgYWxzbyBoYXMgbG9jYWxTdG9yYWdlIGluIHRoZSBnbG9iYWwgY29udGV4dC5cblx0XHRyZXR1cm4gbG9jYWxTdG9yYWdlO1xuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdC8vIFN3YWxsb3dcblx0XHQvLyBYWFggKEBRaXgtKSBzaG91bGQgd2UgYmUgbG9nZ2luZyB0aGVzZT9cblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY29tbW9uJykoZXhwb3J0cyk7XG5cbmNvbnN0IHtmb3JtYXR0ZXJzfSA9IG1vZHVsZS5leHBvcnRzO1xuXG4vKipcbiAqIE1hcCAlaiB0byBgSlNPTi5zdHJpbmdpZnkoKWAsIHNpbmNlIG5vIFdlYiBJbnNwZWN0b3JzIGRvIHRoYXQgYnkgZGVmYXVsdC5cbiAqL1xuXG5mb3JtYXR0ZXJzLmogPSBmdW5jdGlvbiAodikge1xuXHR0cnkge1xuXHRcdHJldHVybiBKU09OLnN0cmluZ2lmeSh2KTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRyZXR1cm4gJ1tVbmV4cGVjdGVkSlNPTlBhcnNlRXJyb3JdOiAnICsgZXJyb3IubWVzc2FnZTtcblx0fVxufTtcbiIsCiAgICAiLyoqXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzLlxuICovXG5cbmNvbnN0IHR0eSA9IHJlcXVpcmUoJ3R0eScpO1xuY29uc3QgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcblxuLyoqXG4gKiBUaGlzIGlzIHRoZSBOb2RlLmpzIGltcGxlbWVudGF0aW9uIG9mIGBkZWJ1ZygpYC5cbiAqL1xuXG5leHBvcnRzLmluaXQgPSBpbml0O1xuZXhwb3J0cy5sb2cgPSBsb2c7XG5leHBvcnRzLmZvcm1hdEFyZ3MgPSBmb3JtYXRBcmdzO1xuZXhwb3J0cy5zYXZlID0gc2F2ZTtcbmV4cG9ydHMubG9hZCA9IGxvYWQ7XG5leHBvcnRzLnVzZUNvbG9ycyA9IHVzZUNvbG9ycztcbmV4cG9ydHMuZGVzdHJveSA9IHV0aWwuZGVwcmVjYXRlKFxuXHQoKSA9PiB7fSxcblx0J0luc3RhbmNlIG1ldGhvZCBgZGVidWcuZGVzdHJveSgpYCBpcyBkZXByZWNhdGVkIGFuZCBubyBsb25nZXIgZG9lcyBhbnl0aGluZy4gSXQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24gb2YgYGRlYnVnYC4nXG4pO1xuXG4vKipcbiAqIENvbG9ycy5cbiAqL1xuXG5leHBvcnRzLmNvbG9ycyA9IFs2LCAyLCAzLCA0LCA1LCAxXTtcblxudHJ5IHtcblx0Ly8gT3B0aW9uYWwgZGVwZW5kZW5jeSAoYXMgaW4sIGRvZXNuJ3QgbmVlZCB0byBiZSBpbnN0YWxsZWQsIE5PVCBsaWtlIG9wdGlvbmFsRGVwZW5kZW5jaWVzIGluIHBhY2thZ2UuanNvbilcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llc1xuXHRjb25zdCBzdXBwb3J0c0NvbG9yID0gcmVxdWlyZSgnc3VwcG9ydHMtY29sb3InKTtcblxuXHRpZiAoc3VwcG9ydHNDb2xvciAmJiAoc3VwcG9ydHNDb2xvci5zdGRlcnIgfHwgc3VwcG9ydHNDb2xvcikubGV2ZWwgPj0gMikge1xuXHRcdGV4cG9ydHMuY29sb3JzID0gW1xuXHRcdFx0MjAsXG5cdFx0XHQyMSxcblx0XHRcdDI2LFxuXHRcdFx0MjcsXG5cdFx0XHQzMixcblx0XHRcdDMzLFxuXHRcdFx0MzgsXG5cdFx0XHQzOSxcblx0XHRcdDQwLFxuXHRcdFx0NDEsXG5cdFx0XHQ0Mixcblx0XHRcdDQzLFxuXHRcdFx0NDQsXG5cdFx0XHQ0NSxcblx0XHRcdDU2LFxuXHRcdFx0NTcsXG5cdFx0XHQ2Mixcblx0XHRcdDYzLFxuXHRcdFx0NjgsXG5cdFx0XHQ2OSxcblx0XHRcdDc0LFxuXHRcdFx0NzUsXG5cdFx0XHQ3Nixcblx0XHRcdDc3LFxuXHRcdFx0NzgsXG5cdFx0XHQ3OSxcblx0XHRcdDgwLFxuXHRcdFx0ODEsXG5cdFx0XHQ5Mixcblx0XHRcdDkzLFxuXHRcdFx0OTgsXG5cdFx0XHQ5OSxcblx0XHRcdDExMixcblx0XHRcdDExMyxcblx0XHRcdDEyOCxcblx0XHRcdDEyOSxcblx0XHRcdDEzNCxcblx0XHRcdDEzNSxcblx0XHRcdDE0OCxcblx0XHRcdDE0OSxcblx0XHRcdDE2MCxcblx0XHRcdDE2MSxcblx0XHRcdDE2Mixcblx0XHRcdDE2Myxcblx0XHRcdDE2NCxcblx0XHRcdDE2NSxcblx0XHRcdDE2Nixcblx0XHRcdDE2Nyxcblx0XHRcdDE2OCxcblx0XHRcdDE2OSxcblx0XHRcdDE3MCxcblx0XHRcdDE3MSxcblx0XHRcdDE3Mixcblx0XHRcdDE3Myxcblx0XHRcdDE3OCxcblx0XHRcdDE3OSxcblx0XHRcdDE4NCxcblx0XHRcdDE4NSxcblx0XHRcdDE5Nixcblx0XHRcdDE5Nyxcblx0XHRcdDE5OCxcblx0XHRcdDE5OSxcblx0XHRcdDIwMCxcblx0XHRcdDIwMSxcblx0XHRcdDIwMixcblx0XHRcdDIwMyxcblx0XHRcdDIwNCxcblx0XHRcdDIwNSxcblx0XHRcdDIwNixcblx0XHRcdDIwNyxcblx0XHRcdDIwOCxcblx0XHRcdDIwOSxcblx0XHRcdDIxNCxcblx0XHRcdDIxNSxcblx0XHRcdDIyMCxcblx0XHRcdDIyMVxuXHRcdF07XG5cdH1cbn0gY2F0Y2ggKGVycm9yKSB7XG5cdC8vIFN3YWxsb3cgLSB3ZSBvbmx5IGNhcmUgaWYgYHN1cHBvcnRzLWNvbG9yYCBpcyBhdmFpbGFibGU7IGl0IGRvZXNuJ3QgaGF2ZSB0byBiZS5cbn1cblxuLyoqXG4gKiBCdWlsZCB1cCB0aGUgZGVmYXVsdCBgaW5zcGVjdE9wdHNgIG9iamVjdCBmcm9tIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG4gKlxuICogICAkIERFQlVHX0NPTE9SUz1ubyBERUJVR19ERVBUSD0xMCBERUJVR19TSE9XX0hJRERFTj1lbmFibGVkIG5vZGUgc2NyaXB0LmpzXG4gKi9cblxuZXhwb3J0cy5pbnNwZWN0T3B0cyA9IE9iamVjdC5rZXlzKHByb2Nlc3MuZW52KS5maWx0ZXIoa2V5ID0+IHtcblx0cmV0dXJuIC9eZGVidWdfL2kudGVzdChrZXkpO1xufSkucmVkdWNlKChvYmosIGtleSkgPT4ge1xuXHQvLyBDYW1lbC1jYXNlXG5cdGNvbnN0IHByb3AgPSBrZXlcblx0XHQuc3Vic3RyaW5nKDYpXG5cdFx0LnRvTG93ZXJDYXNlKClcblx0XHQucmVwbGFjZSgvXyhbYS16XSkvZywgKF8sIGspID0+IHtcblx0XHRcdHJldHVybiBrLnRvVXBwZXJDYXNlKCk7XG5cdFx0fSk7XG5cblx0Ly8gQ29lcmNlIHN0cmluZyB2YWx1ZSBpbnRvIEpTIHZhbHVlXG5cdGxldCB2YWwgPSBwcm9jZXNzLmVudltrZXldO1xuXHRpZiAoL14oeWVzfG9ufHRydWV8ZW5hYmxlZCkkL2kudGVzdCh2YWwpKSB7XG5cdFx0dmFsID0gdHJ1ZTtcblx0fSBlbHNlIGlmICgvXihub3xvZmZ8ZmFsc2V8ZGlzYWJsZWQpJC9pLnRlc3QodmFsKSkge1xuXHRcdHZhbCA9IGZhbHNlO1xuXHR9IGVsc2UgaWYgKHZhbCA9PT0gJ251bGwnKSB7XG5cdFx0dmFsID0gbnVsbDtcblx0fSBlbHNlIHtcblx0XHR2YWwgPSBOdW1iZXIodmFsKTtcblx0fVxuXG5cdG9ialtwcm9wXSA9IHZhbDtcblx0cmV0dXJuIG9iajtcbn0sIHt9KTtcblxuLyoqXG4gKiBJcyBzdGRvdXQgYSBUVFk/IENvbG9yZWQgb3V0cHV0IGlzIGVuYWJsZWQgd2hlbiBgdHJ1ZWAuXG4gKi9cblxuZnVuY3Rpb24gdXNlQ29sb3JzKCkge1xuXHRyZXR1cm4gJ2NvbG9ycycgaW4gZXhwb3J0cy5pbnNwZWN0T3B0cyA/XG5cdFx0Qm9vbGVhbihleHBvcnRzLmluc3BlY3RPcHRzLmNvbG9ycykgOlxuXHRcdHR0eS5pc2F0dHkocHJvY2Vzcy5zdGRlcnIuZmQpO1xufVxuXG4vKipcbiAqIEFkZHMgQU5TSSBjb2xvciBlc2NhcGUgY29kZXMgaWYgZW5hYmxlZC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGZvcm1hdEFyZ3MoYXJncykge1xuXHRjb25zdCB7bmFtZXNwYWNlOiBuYW1lLCB1c2VDb2xvcnN9ID0gdGhpcztcblxuXHRpZiAodXNlQ29sb3JzKSB7XG5cdFx0Y29uc3QgYyA9IHRoaXMuY29sb3I7XG5cdFx0Y29uc3QgY29sb3JDb2RlID0gJ1xcdTAwMUJbMycgKyAoYyA8IDggPyBjIDogJzg7NTsnICsgYyk7XG5cdFx0Y29uc3QgcHJlZml4ID0gYCAgJHtjb2xvckNvZGV9OzFtJHtuYW1lfSBcXHUwMDFCWzBtYDtcblxuXHRcdGFyZ3NbMF0gPSBwcmVmaXggKyBhcmdzWzBdLnNwbGl0KCdcXG4nKS5qb2luKCdcXG4nICsgcHJlZml4KTtcblx0XHRhcmdzLnB1c2goY29sb3JDb2RlICsgJ20rJyArIG1vZHVsZS5leHBvcnRzLmh1bWFuaXplKHRoaXMuZGlmZikgKyAnXFx1MDAxQlswbScpO1xuXHR9IGVsc2Uge1xuXHRcdGFyZ3NbMF0gPSBnZXREYXRlKCkgKyBuYW1lICsgJyAnICsgYXJnc1swXTtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXREYXRlKCkge1xuXHRpZiAoZXhwb3J0cy5pbnNwZWN0T3B0cy5oaWRlRGF0ZSkge1xuXHRcdHJldHVybiAnJztcblx0fVxuXHRyZXR1cm4gbmV3IERhdGUoKS50b0lTT1N0cmluZygpICsgJyAnO1xufVxuXG4vKipcbiAqIEludm9rZXMgYHV0aWwuZm9ybWF0V2l0aE9wdGlvbnMoKWAgd2l0aCB0aGUgc3BlY2lmaWVkIGFyZ3VtZW50cyBhbmQgd3JpdGVzIHRvIHN0ZGVyci5cbiAqL1xuXG5mdW5jdGlvbiBsb2coLi4uYXJncykge1xuXHRyZXR1cm4gcHJvY2Vzcy5zdGRlcnIud3JpdGUodXRpbC5mb3JtYXRXaXRoT3B0aW9ucyhleHBvcnRzLmluc3BlY3RPcHRzLCAuLi5hcmdzKSArICdcXG4nKTtcbn1cblxuLyoqXG4gKiBTYXZlIGBuYW1lc3BhY2VzYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlc1xuICogQGFwaSBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNhdmUobmFtZXNwYWNlcykge1xuXHRpZiAobmFtZXNwYWNlcykge1xuXHRcdHByb2Nlc3MuZW52LkRFQlVHID0gbmFtZXNwYWNlcztcblx0fSBlbHNlIHtcblx0XHQvLyBJZiB5b3Ugc2V0IGEgcHJvY2Vzcy5lbnYgZmllbGQgdG8gbnVsbCBvciB1bmRlZmluZWQsIGl0IGdldHMgY2FzdCB0byB0aGVcblx0XHQvLyBzdHJpbmcgJ251bGwnIG9yICd1bmRlZmluZWQnLiBKdXN0IGRlbGV0ZSBpbnN0ZWFkLlxuXHRcdGRlbGV0ZSBwcm9jZXNzLmVudi5ERUJVRztcblx0fVxufVxuXG4vKipcbiAqIExvYWQgYG5hbWVzcGFjZXNgLlxuICpcbiAqIEByZXR1cm4ge1N0cmluZ30gcmV0dXJucyB0aGUgcHJldmlvdXNseSBwZXJzaXN0ZWQgZGVidWcgbW9kZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGxvYWQoKSB7XG5cdHJldHVybiBwcm9jZXNzLmVudi5ERUJVRztcbn1cblxuLyoqXG4gKiBJbml0IGxvZ2ljIGZvciBgZGVidWdgIGluc3RhbmNlcy5cbiAqXG4gKiBDcmVhdGUgYSBuZXcgYGluc3BlY3RPcHRzYCBvYmplY3QgaW4gY2FzZSBgdXNlQ29sb3JzYCBpcyBzZXRcbiAqIGRpZmZlcmVudGx5IGZvciBhIHBhcnRpY3VsYXIgYGRlYnVnYCBpbnN0YW5jZS5cbiAqL1xuXG5mdW5jdGlvbiBpbml0KGRlYnVnKSB7XG5cdGRlYnVnLmluc3BlY3RPcHRzID0ge307XG5cblx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGV4cG9ydHMuaW5zcGVjdE9wdHMpO1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcblx0XHRkZWJ1Zy5pbnNwZWN0T3B0c1trZXlzW2ldXSA9IGV4cG9ydHMuaW5zcGVjdE9wdHNba2V5c1tpXV07XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2NvbW1vbicpKGV4cG9ydHMpO1xuXG5jb25zdCB7Zm9ybWF0dGVyc30gPSBtb2R1bGUuZXhwb3J0cztcblxuLyoqXG4gKiBNYXAgJW8gdG8gYHV0aWwuaW5zcGVjdCgpYCwgYWxsIG9uIGEgc2luZ2xlIGxpbmUuXG4gKi9cblxuZm9ybWF0dGVycy5vID0gZnVuY3Rpb24gKHYpIHtcblx0dGhpcy5pbnNwZWN0T3B0cy5jb2xvcnMgPSB0aGlzLnVzZUNvbG9ycztcblx0cmV0dXJuIHV0aWwuaW5zcGVjdCh2LCB0aGlzLmluc3BlY3RPcHRzKVxuXHRcdC5zcGxpdCgnXFxuJylcblx0XHQubWFwKHN0ciA9PiBzdHIudHJpbSgpKVxuXHRcdC5qb2luKCcgJyk7XG59O1xuXG4vKipcbiAqIE1hcCAlTyB0byBgdXRpbC5pbnNwZWN0KClgLCBhbGxvd2luZyBtdWx0aXBsZSBsaW5lcyBpZiBuZWVkZWQuXG4gKi9cblxuZm9ybWF0dGVycy5PID0gZnVuY3Rpb24gKHYpIHtcblx0dGhpcy5pbnNwZWN0T3B0cy5jb2xvcnMgPSB0aGlzLnVzZUNvbG9ycztcblx0cmV0dXJuIHV0aWwuaW5zcGVjdCh2LCB0aGlzLmluc3BlY3RPcHRzKTtcbn07XG4iLAogICAgIi8qKlxuICogRGV0ZWN0IEVsZWN0cm9uIHJlbmRlcmVyIC8gbndqcyBwcm9jZXNzLCB3aGljaCBpcyBub2RlLCBidXQgd2Ugc2hvdWxkXG4gKiB0cmVhdCBhcyBhIGJyb3dzZXIuXG4gKi9cblxuaWYgKHR5cGVvZiBwcm9jZXNzID09PSAndW5kZWZpbmVkJyB8fCBwcm9jZXNzLnR5cGUgPT09ICdyZW5kZXJlcicgfHwgcHJvY2Vzcy5icm93c2VyID09PSB0cnVlIHx8IHByb2Nlc3MuX19ud2pzKSB7XG5cdG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9icm93c2VyLmpzJyk7XG59IGVsc2Uge1xuXHRtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbm9kZS5qcycpO1xufVxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yZXEgPSBleHBvcnRzLmpzb24gPSBleHBvcnRzLnRvQnVmZmVyID0gdm9pZCAwO1xuY29uc3QgaHR0cCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiaHR0cFwiKSk7XG5jb25zdCBodHRwcyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiaHR0cHNcIikpO1xuYXN5bmMgZnVuY3Rpb24gdG9CdWZmZXIoc3RyZWFtKSB7XG4gICAgbGV0IGxlbmd0aCA9IDA7XG4gICAgY29uc3QgY2h1bmtzID0gW107XG4gICAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBzdHJlYW0pIHtcbiAgICAgICAgbGVuZ3RoICs9IGNodW5rLmxlbmd0aDtcbiAgICAgICAgY2h1bmtzLnB1c2goY2h1bmspO1xuICAgIH1cbiAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChjaHVua3MsIGxlbmd0aCk7XG59XG5leHBvcnRzLnRvQnVmZmVyID0gdG9CdWZmZXI7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuYXN5bmMgZnVuY3Rpb24ganNvbihzdHJlYW0pIHtcbiAgICBjb25zdCBidWYgPSBhd2FpdCB0b0J1ZmZlcihzdHJlYW0pO1xuICAgIGNvbnN0IHN0ciA9IGJ1Zi50b1N0cmluZygndXRmOCcpO1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKHN0cik7XG4gICAgfVxuICAgIGNhdGNoIChfZXJyKSB7XG4gICAgICAgIGNvbnN0IGVyciA9IF9lcnI7XG4gICAgICAgIGVyci5tZXNzYWdlICs9IGAgKGlucHV0OiAke3N0cn0pYDtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbn1cbmV4cG9ydHMuanNvbiA9IGpzb247XG5mdW5jdGlvbiByZXEodXJsLCBvcHRzID0ge30pIHtcbiAgICBjb25zdCBocmVmID0gdHlwZW9mIHVybCA9PT0gJ3N0cmluZycgPyB1cmwgOiB1cmwuaHJlZjtcbiAgICBjb25zdCByZXEgPSAoaHJlZi5zdGFydHNXaXRoKCdodHRwczonKSA/IGh0dHBzIDogaHR0cCkucmVxdWVzdCh1cmwsIG9wdHMpO1xuICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHJlcVxuICAgICAgICAgICAgLm9uY2UoJ3Jlc3BvbnNlJywgcmVzb2x2ZSlcbiAgICAgICAgICAgIC5vbmNlKCdlcnJvcicsIHJlamVjdClcbiAgICAgICAgICAgIC5lbmQoKTtcbiAgICB9KTtcbiAgICByZXEudGhlbiA9IHByb21pc2UudGhlbi5iaW5kKHByb21pc2UpO1xuICAgIHJldHVybiByZXE7XG59XG5leHBvcnRzLnJlcSA9IHJlcTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWhlbHBlcnMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9fZXhwb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19leHBvcnRTdGFyKSB8fCBmdW5jdGlvbihtLCBleHBvcnRzKSB7XG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChleHBvcnRzLCBwKSkgX19jcmVhdGVCaW5kaW5nKGV4cG9ydHMsIG0sIHApO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQWdlbnQgPSB2b2lkIDA7XG5jb25zdCBuZXQgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIm5ldFwiKSk7XG5jb25zdCBodHRwID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJodHRwXCIpKTtcbmNvbnN0IGh0dHBzXzEgPSByZXF1aXJlKFwiaHR0cHNcIik7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vaGVscGVyc1wiKSwgZXhwb3J0cyk7XG5jb25zdCBJTlRFUk5BTCA9IFN5bWJvbCgnQWdlbnRCYXNlSW50ZXJuYWxTdGF0ZScpO1xuY2xhc3MgQWdlbnQgZXh0ZW5kcyBodHRwLkFnZW50IHtcbiAgICBjb25zdHJ1Y3RvcihvcHRzKSB7XG4gICAgICAgIHN1cGVyKG9wdHMpO1xuICAgICAgICB0aGlzW0lOVEVSTkFMXSA9IHt9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmUgd2hldGhlciB0aGlzIGlzIGFuIGBodHRwYCBvciBgaHR0cHNgIHJlcXVlc3QuXG4gICAgICovXG4gICAgaXNTZWN1cmVFbmRwb2ludChvcHRpb25zKSB7XG4gICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICAvLyBGaXJzdCBjaGVjayB0aGUgYHNlY3VyZUVuZHBvaW50YCBwcm9wZXJ0eSBleHBsaWNpdGx5LCBzaW5jZSB0aGlzXG4gICAgICAgICAgICAvLyBtZWFucyB0aGF0IGEgcGFyZW50IGBBZ2VudGAgaXMgXCJwYXNzaW5nIHRocm91Z2hcIiB0byB0aGlzIGluc3RhbmNlLlxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5zZWN1cmVFbmRwb2ludCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMuc2VjdXJlRW5kcG9pbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBJZiBubyBleHBsaWNpdCBgc2VjdXJlYCBlbmRwb2ludCwgY2hlY2sgaWYgYHByb3RvY29sYCBwcm9wZXJ0eSBpc1xuICAgICAgICAgICAgLy8gc2V0LiBUaGlzIHdpbGwgdXN1YWxseSBiZSB0aGUgY2FzZSBzaW5jZSB1c2luZyBhIGZ1bGwgc3RyaW5nIFVSTFxuICAgICAgICAgICAgLy8gb3IgYFVSTGAgaW5zdGFuY2Ugc2hvdWxkIGJlIHRoZSBtb3N0IGNvbW1vbiB1c2FnZS5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5wcm90b2NvbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5wcm90b2NvbCA9PT0gJ2h0dHBzOic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gRmluYWxseSwgaWYgbm8gYHByb3RvY29sYCBwcm9wZXJ0eSB3YXMgc2V0LCB0aGVuIGZhbGwgYmFjayB0b1xuICAgICAgICAvLyBjaGVja2luZyB0aGUgc3RhY2sgdHJhY2Ugb2YgdGhlIGN1cnJlbnQgY2FsbCBzdGFjaywgYW5kIHRyeSB0b1xuICAgICAgICAvLyBkZXRlY3QgdGhlIFwiaHR0cHNcIiBtb2R1bGUuXG4gICAgICAgIGNvbnN0IHsgc3RhY2sgfSA9IG5ldyBFcnJvcigpO1xuICAgICAgICBpZiAodHlwZW9mIHN0YWNrICE9PSAnc3RyaW5nJylcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHN0YWNrXG4gICAgICAgICAgICAuc3BsaXQoJ1xcbicpXG4gICAgICAgICAgICAuc29tZSgobCkgPT4gbC5pbmRleE9mKCcoaHR0cHMuanM6JykgIT09IC0xIHx8XG4gICAgICAgICAgICBsLmluZGV4T2YoJ25vZGU6aHR0cHM6JykgIT09IC0xKTtcbiAgICB9XG4gICAgLy8gSW4gb3JkZXIgdG8gc3VwcG9ydCBhc3luYyBzaWduYXR1cmVzIGluIGBjb25uZWN0KClgIGFuZCBOb2RlJ3MgbmF0aXZlXG4gICAgLy8gY29ubmVjdGlvbiBwb29saW5nIGluIGBodHRwLkFnZW50YCwgdGhlIGFycmF5IG9mIHNvY2tldHMgZm9yIGVhY2ggb3JpZ2luXG4gICAgLy8gaGFzIHRvIGJlIHVwZGF0ZWQgc3luY2hyb25vdXNseS4gVGhpcyBpcyBzbyB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheSBpc1xuICAgIC8vIGFjY3VyYXRlIHdoZW4gYGFkZFJlcXVlc3QoKWAgaXMgbmV4dCBjYWxsZWQuIFdlIGFjaGlldmUgdGhpcyBieSBjcmVhdGluZyBhXG4gICAgLy8gZmFrZSBzb2NrZXQgYW5kIGFkZGluZyBpdCB0byBgc29ja2V0c1tvcmlnaW5dYCBhbmQgaW5jcmVtZW50aW5nXG4gICAgLy8gYHRvdGFsU29ja2V0Q291bnRgLlxuICAgIGluY3JlbWVudFNvY2tldHMobmFtZSkge1xuICAgICAgICAvLyBJZiBgbWF4U29ja2V0c2AgYW5kIGBtYXhUb3RhbFNvY2tldHNgIGFyZSBib3RoIEluZmluaXR5IHRoZW4gdGhlcmUgaXMgbm9cbiAgICAgICAgLy8gbmVlZCB0byBjcmVhdGUgYSBmYWtlIHNvY2tldCBiZWNhdXNlIE5vZGUuanMgbmF0aXZlIGNvbm5lY3Rpb24gcG9vbGluZ1xuICAgICAgICAvLyB3aWxsIG5ldmVyIGJlIGludm9rZWQuXG4gICAgICAgIGlmICh0aGlzLm1heFNvY2tldHMgPT09IEluZmluaXR5ICYmIHRoaXMubWF4VG90YWxTb2NrZXRzID09PSBJbmZpbml0eSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQWxsIGluc3RhbmNlcyBvZiBgc29ja2V0c2AgYXJlIGV4cGVjdGVkIFR5cGVTY3JpcHQgZXJyb3JzLiBUaGVcbiAgICAgICAgLy8gYWx0ZXJuYXRpdmUgaXMgdG8gYWRkIGl0IGFzIGEgcHJpdmF0ZSBwcm9wZXJ0eSBvZiB0aGlzIGNsYXNzIGJ1dCB0aGF0XG4gICAgICAgIC8vIHdpbGwgYnJlYWsgVHlwZVNjcmlwdCBzdWJjbGFzc2luZy5cbiAgICAgICAgaWYgKCF0aGlzLnNvY2tldHNbbmFtZV0pIHtcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgYHNvY2tldHNgIGlzIHJlYWRvbmx5IGluIGBAdHlwZXMvbm9kZWBcbiAgICAgICAgICAgIHRoaXMuc29ja2V0c1tuYW1lXSA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZha2VTb2NrZXQgPSBuZXcgbmV0LlNvY2tldCh7IHdyaXRhYmxlOiBmYWxzZSB9KTtcbiAgICAgICAgdGhpcy5zb2NrZXRzW25hbWVdLnB1c2goZmFrZVNvY2tldCk7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgYHRvdGFsU29ja2V0Q291bnRgIGlzbid0IGRlZmluZWQgaW4gYEB0eXBlcy9ub2RlYFxuICAgICAgICB0aGlzLnRvdGFsU29ja2V0Q291bnQrKztcbiAgICAgICAgcmV0dXJuIGZha2VTb2NrZXQ7XG4gICAgfVxuICAgIGRlY3JlbWVudFNvY2tldHMobmFtZSwgc29ja2V0KSB7XG4gICAgICAgIGlmICghdGhpcy5zb2NrZXRzW25hbWVdIHx8IHNvY2tldCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNvY2tldHMgPSB0aGlzLnNvY2tldHNbbmFtZV07XG4gICAgICAgIGNvbnN0IGluZGV4ID0gc29ja2V0cy5pbmRleE9mKHNvY2tldCk7XG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIHNvY2tldHMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgIGB0b3RhbFNvY2tldENvdW50YCBpc24ndCBkZWZpbmVkIGluIGBAdHlwZXMvbm9kZWBcbiAgICAgICAgICAgIHRoaXMudG90YWxTb2NrZXRDb3VudC0tO1xuICAgICAgICAgICAgaWYgKHNvY2tldHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBgc29ja2V0c2AgaXMgcmVhZG9ubHkgaW4gYEB0eXBlcy9ub2RlYFxuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnNvY2tldHNbbmFtZV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gSW4gb3JkZXIgdG8gcHJvcGVybHkgdXBkYXRlIHRoZSBzb2NrZXQgcG9vbCwgd2UgbmVlZCB0byBjYWxsIGBnZXROYW1lKClgIG9uXG4gICAgLy8gdGhlIGNvcmUgYGh0dHBzLkFnZW50YCBpZiBpdCBpcyBhIHNlY3VyZUVuZHBvaW50LlxuICAgIGdldE5hbWUob3B0aW9ucykge1xuICAgICAgICBjb25zdCBzZWN1cmVFbmRwb2ludCA9IHR5cGVvZiBvcHRpb25zLnNlY3VyZUVuZHBvaW50ID09PSAnYm9vbGVhbidcbiAgICAgICAgICAgID8gb3B0aW9ucy5zZWN1cmVFbmRwb2ludFxuICAgICAgICAgICAgOiB0aGlzLmlzU2VjdXJlRW5kcG9pbnQob3B0aW9ucyk7XG4gICAgICAgIGlmIChzZWN1cmVFbmRwb2ludCkge1xuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBgZ2V0TmFtZSgpYCBpc24ndCBkZWZpbmVkIGluIGBAdHlwZXMvbm9kZWBcbiAgICAgICAgICAgIHJldHVybiBodHRwc18xLkFnZW50LnByb3RvdHlwZS5nZXROYW1lLmNhbGwodGhpcywgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBgZ2V0TmFtZSgpYCBpc24ndCBkZWZpbmVkIGluIGBAdHlwZXMvbm9kZWBcbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldE5hbWUob3B0aW9ucyk7XG4gICAgfVxuICAgIGNyZWF0ZVNvY2tldChyZXEsIG9wdGlvbnMsIGNiKSB7XG4gICAgICAgIGNvbnN0IGNvbm5lY3RPcHRzID0ge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIHNlY3VyZUVuZHBvaW50OiB0aGlzLmlzU2VjdXJlRW5kcG9pbnQob3B0aW9ucyksXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLmdldE5hbWUoY29ubmVjdE9wdHMpO1xuICAgICAgICBjb25zdCBmYWtlU29ja2V0ID0gdGhpcy5pbmNyZW1lbnRTb2NrZXRzKG5hbWUpO1xuICAgICAgICBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5jb25uZWN0KHJlcSwgY29ubmVjdE9wdHMpKVxuICAgICAgICAgICAgLnRoZW4oKHNvY2tldCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5kZWNyZW1lbnRTb2NrZXRzKG5hbWUsIGZha2VTb2NrZXQpO1xuICAgICAgICAgICAgaWYgKHNvY2tldCBpbnN0YW5jZW9mIGh0dHAuQWdlbnQpIHtcbiAgICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGBhZGRSZXF1ZXN0KClgIGlzbid0IGRlZmluZWQgaW4gYEB0eXBlcy9ub2RlYFxuICAgICAgICAgICAgICAgIHJldHVybiBzb2NrZXQuYWRkUmVxdWVzdChyZXEsIGNvbm5lY3RPcHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXNbSU5URVJOQUxdLmN1cnJlbnRTb2NrZXQgPSBzb2NrZXQ7XG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGBjcmVhdGVTb2NrZXQoKWAgaXNuJ3QgZGVmaW5lZCBpbiBgQHR5cGVzL25vZGVgXG4gICAgICAgICAgICBzdXBlci5jcmVhdGVTb2NrZXQocmVxLCBvcHRpb25zLCBjYik7XG4gICAgICAgIH0sIChlcnIpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZGVjcmVtZW50U29ja2V0cyhuYW1lLCBmYWtlU29ja2V0KTtcbiAgICAgICAgICAgIGNiKGVycik7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjcmVhdGVDb25uZWN0aW9uKCkge1xuICAgICAgICBjb25zdCBzb2NrZXQgPSB0aGlzW0lOVEVSTkFMXS5jdXJyZW50U29ja2V0O1xuICAgICAgICB0aGlzW0lOVEVSTkFMXS5jdXJyZW50U29ja2V0ID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoIXNvY2tldCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBzb2NrZXQgd2FzIHJldHVybmVkIGluIHRoZSBgY29ubmVjdCgpYCBmdW5jdGlvbicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzb2NrZXQ7XG4gICAgfVxuICAgIGdldCBkZWZhdWx0UG9ydCgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzW0lOVEVSTkFMXS5kZWZhdWx0UG9ydCA/P1xuICAgICAgICAgICAgKHRoaXMucHJvdG9jb2wgPT09ICdodHRwczonID8gNDQzIDogODApKTtcbiAgICB9XG4gICAgc2V0IGRlZmF1bHRQb3J0KHYpIHtcbiAgICAgICAgaWYgKHRoaXNbSU5URVJOQUxdKSB7XG4gICAgICAgICAgICB0aGlzW0lOVEVSTkFMXS5kZWZhdWx0UG9ydCA9IHY7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IHByb3RvY29sKCkge1xuICAgICAgICByZXR1cm4gKHRoaXNbSU5URVJOQUxdLnByb3RvY29sID8/XG4gICAgICAgICAgICAodGhpcy5pc1NlY3VyZUVuZHBvaW50KCkgPyAnaHR0cHM6JyA6ICdodHRwOicpKTtcbiAgICB9XG4gICAgc2V0IHByb3RvY29sKHYpIHtcbiAgICAgICAgaWYgKHRoaXNbSU5URVJOQUxdKSB7XG4gICAgICAgICAgICB0aGlzW0lOVEVSTkFMXS5wcm90b2NvbCA9IHY7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLkFnZW50ID0gQWdlbnQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5wYXJzZVByb3h5UmVzcG9uc2UgPSB2b2lkIDA7XG5jb25zdCBkZWJ1Z18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJkZWJ1Z1wiKSk7XG5jb25zdCBkZWJ1ZyA9ICgwLCBkZWJ1Z18xLmRlZmF1bHQpKCdodHRwcy1wcm94eS1hZ2VudDpwYXJzZS1wcm94eS1yZXNwb25zZScpO1xuZnVuY3Rpb24gcGFyc2VQcm94eVJlc3BvbnNlKHNvY2tldCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIC8vIHdlIG5lZWQgdG8gYnVmZmVyIGFueSBIVFRQIHRyYWZmaWMgdGhhdCBoYXBwZW5zIHdpdGggdGhlIHByb3h5IGJlZm9yZSB3ZSBnZXRcbiAgICAgICAgLy8gdGhlIENPTk5FQ1QgcmVzcG9uc2UsIHNvIHRoYXQgaWYgdGhlIHJlc3BvbnNlIGlzIGFueXRoaW5nIG90aGVyIHRoYW4gYW4gXCIyMDBcIlxuICAgICAgICAvLyByZXNwb25zZSBjb2RlLCB0aGVuIHdlIGNhbiByZS1wbGF5IHRoZSBcImRhdGFcIiBldmVudHMgb24gdGhlIHNvY2tldCBvbmNlIHRoZVxuICAgICAgICAvLyBIVFRQIHBhcnNlciBpcyBob29rZWQgdXAuLi5cbiAgICAgICAgbGV0IGJ1ZmZlcnNMZW5ndGggPSAwO1xuICAgICAgICBjb25zdCBidWZmZXJzID0gW107XG4gICAgICAgIGZ1bmN0aW9uIHJlYWQoKSB7XG4gICAgICAgICAgICBjb25zdCBiID0gc29ja2V0LnJlYWQoKTtcbiAgICAgICAgICAgIGlmIChiKVxuICAgICAgICAgICAgICAgIG9uZGF0YShiKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBzb2NrZXQub25jZSgncmVhZGFibGUnLCByZWFkKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBjbGVhbnVwKCkge1xuICAgICAgICAgICAgc29ja2V0LnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBvbmVuZCk7XG4gICAgICAgICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgb25lcnJvcik7XG4gICAgICAgICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ3JlYWRhYmxlJywgcmVhZCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gb25lbmQoKSB7XG4gICAgICAgICAgICBjbGVhbnVwKCk7XG4gICAgICAgICAgICBkZWJ1Zygnb25lbmQnKTtcbiAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ1Byb3h5IGNvbm5lY3Rpb24gZW5kZWQgYmVmb3JlIHJlY2VpdmluZyBDT05ORUNUIHJlc3BvbnNlJykpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIG9uZXJyb3IoZXJyKSB7XG4gICAgICAgICAgICBjbGVhbnVwKCk7XG4gICAgICAgICAgICBkZWJ1Zygnb25lcnJvciAlbycsIGVycik7XG4gICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBvbmRhdGEoYikge1xuICAgICAgICAgICAgYnVmZmVycy5wdXNoKGIpO1xuICAgICAgICAgICAgYnVmZmVyc0xlbmd0aCArPSBiLmxlbmd0aDtcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZlcmVkID0gQnVmZmVyLmNvbmNhdChidWZmZXJzLCBidWZmZXJzTGVuZ3RoKTtcbiAgICAgICAgICAgIGNvbnN0IGVuZE9mSGVhZGVycyA9IGJ1ZmZlcmVkLmluZGV4T2YoJ1xcclxcblxcclxcbicpO1xuICAgICAgICAgICAgaWYgKGVuZE9mSGVhZGVycyA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAvLyBrZWVwIGJ1ZmZlcmluZ1xuICAgICAgICAgICAgICAgIGRlYnVnKCdoYXZlIG5vdCByZWNlaXZlZCBlbmQgb2YgSFRUUCBoZWFkZXJzIHlldC4uLicpO1xuICAgICAgICAgICAgICAgIHJlYWQoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBoZWFkZXJQYXJ0cyA9IGJ1ZmZlcmVkXG4gICAgICAgICAgICAgICAgLnNsaWNlKDAsIGVuZE9mSGVhZGVycylcbiAgICAgICAgICAgICAgICAudG9TdHJpbmcoJ2FzY2lpJylcbiAgICAgICAgICAgICAgICAuc3BsaXQoJ1xcclxcbicpO1xuICAgICAgICAgICAgY29uc3QgZmlyc3RMaW5lID0gaGVhZGVyUGFydHMuc2hpZnQoKTtcbiAgICAgICAgICAgIGlmICghZmlyc3RMaW5lKSB7XG4gICAgICAgICAgICAgICAgc29ja2V0LmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcignTm8gaGVhZGVyIHJlY2VpdmVkIGZyb20gcHJveHkgQ09OTkVDVCByZXNwb25zZScpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGZpcnN0TGluZVBhcnRzID0gZmlyc3RMaW5lLnNwbGl0KCcgJyk7XG4gICAgICAgICAgICBjb25zdCBzdGF0dXNDb2RlID0gK2ZpcnN0TGluZVBhcnRzWzFdO1xuICAgICAgICAgICAgY29uc3Qgc3RhdHVzVGV4dCA9IGZpcnN0TGluZVBhcnRzLnNsaWNlKDIpLmpvaW4oJyAnKTtcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7fTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaGVhZGVyIG9mIGhlYWRlclBhcnRzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFoZWFkZXIpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0Q29sb24gPSBoZWFkZXIuaW5kZXhPZignOicpO1xuICAgICAgICAgICAgICAgIGlmIChmaXJzdENvbG9uID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBzb2NrZXQuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcihgSW52YWxpZCBoZWFkZXIgZnJvbSBwcm94eSBDT05ORUNUIHJlc3BvbnNlOiBcIiR7aGVhZGVyfVwiYCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBoZWFkZXIuc2xpY2UoMCwgZmlyc3RDb2xvbikudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGhlYWRlci5zbGljZShmaXJzdENvbG9uICsgMSkudHJpbVN0YXJ0KCk7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudCA9IGhlYWRlcnNba2V5XTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnNba2V5XSA9IFtjdXJyZW50LCB2YWx1ZV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoY3VycmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudC5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnNba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlYnVnKCdnb3QgcHJveHkgc2VydmVyIHJlc3BvbnNlOiAlbyAlbycsIGZpcnN0TGluZSwgaGVhZGVycyk7XG4gICAgICAgICAgICBjbGVhbnVwKCk7XG4gICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICBjb25uZWN0OiB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1c0NvZGUsXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1c1RleHQsXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBidWZmZXJlZCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHNvY2tldC5vbignZXJyb3InLCBvbmVycm9yKTtcbiAgICAgICAgc29ja2V0Lm9uKCdlbmQnLCBvbmVuZCk7XG4gICAgICAgIHJlYWQoKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMucGFyc2VQcm94eVJlc3BvbnNlID0gcGFyc2VQcm94eVJlc3BvbnNlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGFyc2UtcHJveHktcmVzcG9uc2UuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5IdHRwc1Byb3h5QWdlbnQgPSB2b2lkIDA7XG5jb25zdCBuZXQgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIm5ldFwiKSk7XG5jb25zdCB0bHMgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcInRsc1wiKSk7XG5jb25zdCBhc3NlcnRfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiYXNzZXJ0XCIpKTtcbmNvbnN0IGRlYnVnXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImRlYnVnXCIpKTtcbmNvbnN0IGFnZW50X2Jhc2VfMSA9IHJlcXVpcmUoXCJhZ2VudC1iYXNlXCIpO1xuY29uc3QgdXJsXzEgPSByZXF1aXJlKFwidXJsXCIpO1xuY29uc3QgcGFyc2VfcHJveHlfcmVzcG9uc2VfMSA9IHJlcXVpcmUoXCIuL3BhcnNlLXByb3h5LXJlc3BvbnNlXCIpO1xuY29uc3QgZGVidWcgPSAoMCwgZGVidWdfMS5kZWZhdWx0KSgnaHR0cHMtcHJveHktYWdlbnQnKTtcbi8qKlxuICogVGhlIGBIdHRwc1Byb3h5QWdlbnRgIGltcGxlbWVudHMgYW4gSFRUUCBBZ2VudCBzdWJjbGFzcyB0aGF0IGNvbm5lY3RzIHRvXG4gKiB0aGUgc3BlY2lmaWVkIFwiSFRUUChzKSBwcm94eSBzZXJ2ZXJcIiBpbiBvcmRlciB0byBwcm94eSBIVFRQUyByZXF1ZXN0cy5cbiAqXG4gKiBPdXRnb2luZyBIVFRQIHJlcXVlc3RzIGFyZSBmaXJzdCB0dW5uZWxlZCB0aHJvdWdoIHRoZSBwcm94eSBzZXJ2ZXIgdXNpbmcgdGhlXG4gKiBgQ09OTkVDVGAgSFRUUCByZXF1ZXN0IG1ldGhvZCB0byBlc3RhYmxpc2ggYSBjb25uZWN0aW9uIHRvIHRoZSBwcm94eSBzZXJ2ZXIsXG4gKiBhbmQgdGhlbiB0aGUgcHJveHkgc2VydmVyIGNvbm5lY3RzIHRvIHRoZSBkZXN0aW5hdGlvbiB0YXJnZXQgYW5kIGlzc3VlcyB0aGVcbiAqIEhUVFAgcmVxdWVzdCBmcm9tIHRoZSBwcm94eSBzZXJ2ZXIuXG4gKlxuICogYGh0dHBzOmAgcmVxdWVzdHMgaGF2ZSB0aGVpciBzb2NrZXQgY29ubmVjdGlvbiB1cGdyYWRlZCB0byBUTFMgb25jZVxuICogdGhlIGNvbm5lY3Rpb24gdG8gdGhlIHByb3h5IHNlcnZlciBoYXMgYmVlbiBlc3RhYmxpc2hlZC5cbiAqL1xuY2xhc3MgSHR0cHNQcm94eUFnZW50IGV4dGVuZHMgYWdlbnRfYmFzZV8xLkFnZW50IHtcbiAgICBjb25zdHJ1Y3Rvcihwcm94eSwgb3B0cykge1xuICAgICAgICBzdXBlcihvcHRzKTtcbiAgICAgICAgdGhpcy5vcHRpb25zID0geyBwYXRoOiB1bmRlZmluZWQgfTtcbiAgICAgICAgdGhpcy5wcm94eSA9IHR5cGVvZiBwcm94eSA9PT0gJ3N0cmluZycgPyBuZXcgdXJsXzEuVVJMKHByb3h5KSA6IHByb3h5O1xuICAgICAgICB0aGlzLnByb3h5SGVhZGVycyA9IG9wdHM/LmhlYWRlcnMgPz8ge307XG4gICAgICAgIGRlYnVnKCdDcmVhdGluZyBuZXcgSHR0cHNQcm94eUFnZW50IGluc3RhbmNlOiAlbycsIHRoaXMucHJveHkuaHJlZik7XG4gICAgICAgIC8vIFRyaW0gb2ZmIHRoZSBicmFja2V0cyBmcm9tIElQdjYgYWRkcmVzc2VzXG4gICAgICAgIGNvbnN0IGhvc3QgPSAodGhpcy5wcm94eS5ob3N0bmFtZSB8fCB0aGlzLnByb3h5Lmhvc3QpLnJlcGxhY2UoL15cXFt8XFxdJC9nLCAnJyk7XG4gICAgICAgIGNvbnN0IHBvcnQgPSB0aGlzLnByb3h5LnBvcnRcbiAgICAgICAgICAgID8gcGFyc2VJbnQodGhpcy5wcm94eS5wb3J0LCAxMClcbiAgICAgICAgICAgIDogdGhpcy5wcm94eS5wcm90b2NvbCA9PT0gJ2h0dHBzOidcbiAgICAgICAgICAgICAgICA/IDQ0M1xuICAgICAgICAgICAgICAgIDogODA7XG4gICAgICAgIHRoaXMuY29ubmVjdE9wdHMgPSB7XG4gICAgICAgICAgICAvLyBBdHRlbXB0IHRvIG5lZ290aWF0ZSBodHRwLzEuMSBmb3IgcHJveHkgc2VydmVycyB0aGF0IHN1cHBvcnQgaHR0cC8yXG4gICAgICAgICAgICBBTFBOUHJvdG9jb2xzOiBbJ2h0dHAvMS4xJ10sXG4gICAgICAgICAgICAuLi4ob3B0cyA/IG9taXQob3B0cywgJ2hlYWRlcnMnKSA6IG51bGwpLFxuICAgICAgICAgICAgaG9zdCxcbiAgICAgICAgICAgIHBvcnQsXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENhbGxlZCB3aGVuIHRoZSBub2RlLWNvcmUgSFRUUCBjbGllbnQgbGlicmFyeSBpcyBjcmVhdGluZyBhXG4gICAgICogbmV3IEhUVFAgcmVxdWVzdC5cbiAgICAgKi9cbiAgICBhc3luYyBjb25uZWN0KHJlcSwgb3B0cykge1xuICAgICAgICBjb25zdCB7IHByb3h5IH0gPSB0aGlzO1xuICAgICAgICBpZiAoIW9wdHMuaG9zdCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gXCJob3N0XCIgcHJvdmlkZWQnKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBDcmVhdGUgYSBzb2NrZXQgY29ubmVjdGlvbiB0byB0aGUgcHJveHkgc2VydmVyLlxuICAgICAgICBsZXQgc29ja2V0O1xuICAgICAgICBpZiAocHJveHkucHJvdG9jb2wgPT09ICdodHRwczonKSB7XG4gICAgICAgICAgICBkZWJ1ZygnQ3JlYXRpbmcgYHRscy5Tb2NrZXRgOiAlbycsIHRoaXMuY29ubmVjdE9wdHMpO1xuICAgICAgICAgICAgY29uc3Qgc2VydmVybmFtZSA9IHRoaXMuY29ubmVjdE9wdHMuc2VydmVybmFtZSB8fCB0aGlzLmNvbm5lY3RPcHRzLmhvc3Q7XG4gICAgICAgICAgICBzb2NrZXQgPSB0bHMuY29ubmVjdCh7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5jb25uZWN0T3B0cyxcbiAgICAgICAgICAgICAgICBzZXJ2ZXJuYW1lLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkZWJ1ZygnQ3JlYXRpbmcgYG5ldC5Tb2NrZXRgOiAlbycsIHRoaXMuY29ubmVjdE9wdHMpO1xuICAgICAgICAgICAgc29ja2V0ID0gbmV0LmNvbm5lY3QodGhpcy5jb25uZWN0T3B0cyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaGVhZGVycyA9IHR5cGVvZiB0aGlzLnByb3h5SGVhZGVycyA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgPyB0aGlzLnByb3h5SGVhZGVycygpXG4gICAgICAgICAgICA6IHsgLi4udGhpcy5wcm94eUhlYWRlcnMgfTtcbiAgICAgICAgY29uc3QgaG9zdCA9IG5ldC5pc0lQdjYob3B0cy5ob3N0KSA/IGBbJHtvcHRzLmhvc3R9XWAgOiBvcHRzLmhvc3Q7XG4gICAgICAgIGxldCBwYXlsb2FkID0gYENPTk5FQ1QgJHtob3N0fToke29wdHMucG9ydH0gSFRUUC8xLjFcXHJcXG5gO1xuICAgICAgICAvLyBJbmplY3QgdGhlIGBQcm94eS1BdXRob3JpemF0aW9uYCBoZWFkZXIgaWYgbmVjZXNzYXJ5LlxuICAgICAgICBpZiAocHJveHkudXNlcm5hbWUgfHwgcHJveHkucGFzc3dvcmQpIHtcbiAgICAgICAgICAgIGNvbnN0IGF1dGggPSBgJHtkZWNvZGVVUklDb21wb25lbnQocHJveHkudXNlcm5hbWUpfToke2RlY29kZVVSSUNvbXBvbmVudChwcm94eS5wYXNzd29yZCl9YDtcbiAgICAgICAgICAgIGhlYWRlcnNbJ1Byb3h5LUF1dGhvcml6YXRpb24nXSA9IGBCYXNpYyAke0J1ZmZlci5mcm9tKGF1dGgpLnRvU3RyaW5nKCdiYXNlNjQnKX1gO1xuICAgICAgICB9XG4gICAgICAgIGhlYWRlcnMuSG9zdCA9IGAke2hvc3R9OiR7b3B0cy5wb3J0fWA7XG4gICAgICAgIGlmICghaGVhZGVyc1snUHJveHktQ29ubmVjdGlvbiddKSB7XG4gICAgICAgICAgICBoZWFkZXJzWydQcm94eS1Db25uZWN0aW9uJ10gPSB0aGlzLmtlZXBBbGl2ZVxuICAgICAgICAgICAgICAgID8gJ0tlZXAtQWxpdmUnXG4gICAgICAgICAgICAgICAgOiAnY2xvc2UnO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3Qua2V5cyhoZWFkZXJzKSkge1xuICAgICAgICAgICAgcGF5bG9hZCArPSBgJHtuYW1lfTogJHtoZWFkZXJzW25hbWVdfVxcclxcbmA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJveHlSZXNwb25zZVByb21pc2UgPSAoMCwgcGFyc2VfcHJveHlfcmVzcG9uc2VfMS5wYXJzZVByb3h5UmVzcG9uc2UpKHNvY2tldCk7XG4gICAgICAgIHNvY2tldC53cml0ZShgJHtwYXlsb2FkfVxcclxcbmApO1xuICAgICAgICBjb25zdCB7IGNvbm5lY3QsIGJ1ZmZlcmVkIH0gPSBhd2FpdCBwcm94eVJlc3BvbnNlUHJvbWlzZTtcbiAgICAgICAgcmVxLmVtaXQoJ3Byb3h5Q29ubmVjdCcsIGNvbm5lY3QpO1xuICAgICAgICB0aGlzLmVtaXQoJ3Byb3h5Q29ubmVjdCcsIGNvbm5lY3QsIHJlcSk7XG4gICAgICAgIGlmIChjb25uZWN0LnN0YXR1c0NvZGUgPT09IDIwMCkge1xuICAgICAgICAgICAgcmVxLm9uY2UoJ3NvY2tldCcsIHJlc3VtZSk7XG4gICAgICAgICAgICBpZiAob3B0cy5zZWN1cmVFbmRwb2ludCkge1xuICAgICAgICAgICAgICAgIC8vIFRoZSBwcm94eSBpcyBjb25uZWN0aW5nIHRvIGEgVExTIHNlcnZlciwgc28gdXBncmFkZVxuICAgICAgICAgICAgICAgIC8vIHRoaXMgc29ja2V0IGNvbm5lY3Rpb24gdG8gYSBUTFMgY29ubmVjdGlvbi5cbiAgICAgICAgICAgICAgICBkZWJ1ZygnVXBncmFkaW5nIHNvY2tldCBjb25uZWN0aW9uIHRvIFRMUycpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlcnZlcm5hbWUgPSBvcHRzLnNlcnZlcm5hbWUgfHwgb3B0cy5ob3N0O1xuICAgICAgICAgICAgICAgIHJldHVybiB0bHMuY29ubmVjdCh7XG4gICAgICAgICAgICAgICAgICAgIC4uLm9taXQob3B0cywgJ2hvc3QnLCAncGF0aCcsICdwb3J0JyksXG4gICAgICAgICAgICAgICAgICAgIHNvY2tldCxcbiAgICAgICAgICAgICAgICAgICAgc2VydmVybmFtZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzb2NrZXQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU29tZSBvdGhlciBzdGF0dXMgY29kZSB0aGF0J3Mgbm90IDIwMC4uLiBuZWVkIHRvIHJlLXBsYXkgdGhlIEhUVFBcbiAgICAgICAgLy8gaGVhZGVyIFwiZGF0YVwiIGV2ZW50cyBvbnRvIHRoZSBzb2NrZXQgb25jZSB0aGUgSFRUUCBtYWNoaW5lcnkgaXNcbiAgICAgICAgLy8gYXR0YWNoZWQgc28gdGhhdCB0aGUgbm9kZSBjb3JlIGBodHRwYCBjYW4gcGFyc2UgYW5kIGhhbmRsZSB0aGVcbiAgICAgICAgLy8gZXJyb3Igc3RhdHVzIGNvZGUuXG4gICAgICAgIC8vIENsb3NlIHRoZSBvcmlnaW5hbCBzb2NrZXQsIGFuZCBhIG5ldyBcImZha2VcIiBzb2NrZXQgaXMgcmV0dXJuZWRcbiAgICAgICAgLy8gaW5zdGVhZCwgc28gdGhhdCB0aGUgcHJveHkgZG9lc24ndCBnZXQgdGhlIEhUVFAgcmVxdWVzdFxuICAgICAgICAvLyB3cml0dGVuIHRvIGl0ICh3aGljaCBtYXkgY29udGFpbiBgQXV0aG9yaXphdGlvbmAgaGVhZGVycyBvciBvdGhlclxuICAgICAgICAvLyBzZW5zaXRpdmUgZGF0YSkuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFNlZTogaHR0cHM6Ly9oYWNrZXJvbmUuY29tL3JlcG9ydHMvNTQxNTAyXG4gICAgICAgIHNvY2tldC5kZXN0cm95KCk7XG4gICAgICAgIGNvbnN0IGZha2VTb2NrZXQgPSBuZXcgbmV0LlNvY2tldCh7IHdyaXRhYmxlOiBmYWxzZSB9KTtcbiAgICAgICAgZmFrZVNvY2tldC5yZWFkYWJsZSA9IHRydWU7XG4gICAgICAgIC8vIE5lZWQgdG8gd2FpdCBmb3IgdGhlIFwic29ja2V0XCIgZXZlbnQgdG8gcmUtcGxheSB0aGUgXCJkYXRhXCIgZXZlbnRzLlxuICAgICAgICByZXEub25jZSgnc29ja2V0JywgKHMpID0+IHtcbiAgICAgICAgICAgIGRlYnVnKCdSZXBsYXlpbmcgcHJveHkgYnVmZmVyIGZvciBmYWlsZWQgcmVxdWVzdCcpO1xuICAgICAgICAgICAgKDAsIGFzc2VydF8xLmRlZmF1bHQpKHMubGlzdGVuZXJDb3VudCgnZGF0YScpID4gMCk7XG4gICAgICAgICAgICAvLyBSZXBsYXkgdGhlIFwiYnVmZmVyZWRcIiBCdWZmZXIgb250byB0aGUgZmFrZSBgc29ja2V0YCwgc2luY2UgYXRcbiAgICAgICAgICAgIC8vIHRoaXMgcG9pbnQgdGhlIEhUVFAgbW9kdWxlIG1hY2hpbmVyeSBoYXMgYmVlbiBob29rZWQgdXAgZm9yXG4gICAgICAgICAgICAvLyB0aGUgdXNlci5cbiAgICAgICAgICAgIHMucHVzaChidWZmZXJlZCk7XG4gICAgICAgICAgICBzLnB1c2gobnVsbCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZmFrZVNvY2tldDtcbiAgICB9XG59XG5IdHRwc1Byb3h5QWdlbnQucHJvdG9jb2xzID0gWydodHRwJywgJ2h0dHBzJ107XG5leHBvcnRzLkh0dHBzUHJveHlBZ2VudCA9IEh0dHBzUHJveHlBZ2VudDtcbmZ1bmN0aW9uIHJlc3VtZShzb2NrZXQpIHtcbiAgICBzb2NrZXQucmVzdW1lKCk7XG59XG5mdW5jdGlvbiBvbWl0KG9iaiwgLi4ua2V5cykge1xuICAgIGNvbnN0IHJldCA9IHt9O1xuICAgIGxldCBrZXk7XG4gICAgZm9yIChrZXkgaW4gb2JqKSB7XG4gICAgICAgIGlmICgha2V5cy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgICAgICByZXRba2V5XSA9IG9ialtrZXldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkh0dHBQcm94eUFnZW50ID0gdm9pZCAwO1xuY29uc3QgbmV0ID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJuZXRcIikpO1xuY29uc3QgdGxzID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJ0bHNcIikpO1xuY29uc3QgZGVidWdfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiZGVidWdcIikpO1xuY29uc3QgZXZlbnRzXzEgPSByZXF1aXJlKFwiZXZlbnRzXCIpO1xuY29uc3QgYWdlbnRfYmFzZV8xID0gcmVxdWlyZShcImFnZW50LWJhc2VcIik7XG5jb25zdCB1cmxfMSA9IHJlcXVpcmUoXCJ1cmxcIik7XG5jb25zdCBkZWJ1ZyA9ICgwLCBkZWJ1Z18xLmRlZmF1bHQpKCdodHRwLXByb3h5LWFnZW50Jyk7XG4vKipcbiAqIFRoZSBgSHR0cFByb3h5QWdlbnRgIGltcGxlbWVudHMgYW4gSFRUUCBBZ2VudCBzdWJjbGFzcyB0aGF0IGNvbm5lY3RzXG4gKiB0byB0aGUgc3BlY2lmaWVkIFwiSFRUUCBwcm94eSBzZXJ2ZXJcIiBpbiBvcmRlciB0byBwcm94eSBIVFRQIHJlcXVlc3RzLlxuICovXG5jbGFzcyBIdHRwUHJveHlBZ2VudCBleHRlbmRzIGFnZW50X2Jhc2VfMS5BZ2VudCB7XG4gICAgY29uc3RydWN0b3IocHJveHksIG9wdHMpIHtcbiAgICAgICAgc3VwZXIob3B0cyk7XG4gICAgICAgIHRoaXMucHJveHkgPSB0eXBlb2YgcHJveHkgPT09ICdzdHJpbmcnID8gbmV3IHVybF8xLlVSTChwcm94eSkgOiBwcm94eTtcbiAgICAgICAgdGhpcy5wcm94eUhlYWRlcnMgPSBvcHRzPy5oZWFkZXJzID8/IHt9O1xuICAgICAgICBkZWJ1ZygnQ3JlYXRpbmcgbmV3IEh0dHBQcm94eUFnZW50IGluc3RhbmNlOiAlbycsIHRoaXMucHJveHkuaHJlZik7XG4gICAgICAgIC8vIFRyaW0gb2ZmIHRoZSBicmFja2V0cyBmcm9tIElQdjYgYWRkcmVzc2VzXG4gICAgICAgIGNvbnN0IGhvc3QgPSAodGhpcy5wcm94eS5ob3N0bmFtZSB8fCB0aGlzLnByb3h5Lmhvc3QpLnJlcGxhY2UoL15cXFt8XFxdJC9nLCAnJyk7XG4gICAgICAgIGNvbnN0IHBvcnQgPSB0aGlzLnByb3h5LnBvcnRcbiAgICAgICAgICAgID8gcGFyc2VJbnQodGhpcy5wcm94eS5wb3J0LCAxMClcbiAgICAgICAgICAgIDogdGhpcy5wcm94eS5wcm90b2NvbCA9PT0gJ2h0dHBzOidcbiAgICAgICAgICAgICAgICA/IDQ0M1xuICAgICAgICAgICAgICAgIDogODA7XG4gICAgICAgIHRoaXMuY29ubmVjdE9wdHMgPSB7XG4gICAgICAgICAgICAuLi4ob3B0cyA/IG9taXQob3B0cywgJ2hlYWRlcnMnKSA6IG51bGwpLFxuICAgICAgICAgICAgaG9zdCxcbiAgICAgICAgICAgIHBvcnQsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGFkZFJlcXVlc3QocmVxLCBvcHRzKSB7XG4gICAgICAgIHJlcS5faGVhZGVyID0gbnVsbDtcbiAgICAgICAgdGhpcy5zZXRSZXF1ZXN0UHJvcHMocmVxLCBvcHRzKTtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBgYWRkUmVxdWVzdCgpYCBpc24ndCBkZWZpbmVkIGluIGBAdHlwZXMvbm9kZWBcbiAgICAgICAgc3VwZXIuYWRkUmVxdWVzdChyZXEsIG9wdHMpO1xuICAgIH1cbiAgICBzZXRSZXF1ZXN0UHJvcHMocmVxLCBvcHRzKSB7XG4gICAgICAgIGNvbnN0IHsgcHJveHkgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IHByb3RvY29sID0gb3B0cy5zZWN1cmVFbmRwb2ludCA/ICdodHRwczonIDogJ2h0dHA6JztcbiAgICAgICAgY29uc3QgaG9zdG5hbWUgPSByZXEuZ2V0SGVhZGVyKCdob3N0JykgfHwgJ2xvY2FsaG9zdCc7XG4gICAgICAgIGNvbnN0IGJhc2UgPSBgJHtwcm90b2NvbH0vLyR7aG9zdG5hbWV9YDtcbiAgICAgICAgY29uc3QgdXJsID0gbmV3IHVybF8xLlVSTChyZXEucGF0aCwgYmFzZSk7XG4gICAgICAgIGlmIChvcHRzLnBvcnQgIT09IDgwKSB7XG4gICAgICAgICAgICB1cmwucG9ydCA9IFN0cmluZyhvcHRzLnBvcnQpO1xuICAgICAgICB9XG4gICAgICAgIC8vIENoYW5nZSB0aGUgYGh0dHAuQ2xpZW50UmVxdWVzdGAgaW5zdGFuY2UncyBcInBhdGhcIiBmaWVsZFxuICAgICAgICAvLyB0byB0aGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgVVJMIHRoYXQgd2lsbCBiZSByZXF1ZXN0ZWQuXG4gICAgICAgIHJlcS5wYXRoID0gU3RyaW5nKHVybCk7XG4gICAgICAgIC8vIEluamVjdCB0aGUgYFByb3h5LUF1dGhvcml6YXRpb25gIGhlYWRlciBpZiBuZWNlc3NhcnkuXG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB0eXBlb2YgdGhpcy5wcm94eUhlYWRlcnMgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICAgID8gdGhpcy5wcm94eUhlYWRlcnMoKVxuICAgICAgICAgICAgOiB7IC4uLnRoaXMucHJveHlIZWFkZXJzIH07XG4gICAgICAgIGlmIChwcm94eS51c2VybmFtZSB8fCBwcm94eS5wYXNzd29yZCkge1xuICAgICAgICAgICAgY29uc3QgYXV0aCA9IGAke2RlY29kZVVSSUNvbXBvbmVudChwcm94eS51c2VybmFtZSl9OiR7ZGVjb2RlVVJJQ29tcG9uZW50KHByb3h5LnBhc3N3b3JkKX1gO1xuICAgICAgICAgICAgaGVhZGVyc1snUHJveHktQXV0aG9yaXphdGlvbiddID0gYEJhc2ljICR7QnVmZmVyLmZyb20oYXV0aCkudG9TdHJpbmcoJ2Jhc2U2NCcpfWA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFoZWFkZXJzWydQcm94eS1Db25uZWN0aW9uJ10pIHtcbiAgICAgICAgICAgIGhlYWRlcnNbJ1Byb3h5LUNvbm5lY3Rpb24nXSA9IHRoaXMua2VlcEFsaXZlXG4gICAgICAgICAgICAgICAgPyAnS2VlcC1BbGl2ZSdcbiAgICAgICAgICAgICAgICA6ICdjbG9zZSc7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBuYW1lIG9mIE9iamVjdC5rZXlzKGhlYWRlcnMpKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGhlYWRlcnNbbmFtZV07XG4gICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXEuc2V0SGVhZGVyKG5hbWUsIHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBjb25uZWN0KHJlcSwgb3B0cykge1xuICAgICAgICByZXEuX2hlYWRlciA9IG51bGw7XG4gICAgICAgIGlmICghcmVxLnBhdGguaW5jbHVkZXMoJzovLycpKSB7XG4gICAgICAgICAgICB0aGlzLnNldFJlcXVlc3RQcm9wcyhyZXEsIG9wdHMpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEF0IHRoaXMgcG9pbnQsIHRoZSBodHRwIENsaWVudFJlcXVlc3QncyBpbnRlcm5hbCBgX2hlYWRlcmAgZmllbGRcbiAgICAgICAgLy8gbWlnaHQgaGF2ZSBhbHJlYWR5IGJlZW4gc2V0LiBJZiB0aGlzIGlzIHRoZSBjYXNlIHRoZW4gd2UnbGwgbmVlZFxuICAgICAgICAvLyB0byByZS1nZW5lcmF0ZSB0aGUgc3RyaW5nIHNpbmNlIHdlIGp1c3QgY2hhbmdlZCB0aGUgYHJlcS5wYXRoYC5cbiAgICAgICAgbGV0IGZpcnN0O1xuICAgICAgICBsZXQgZW5kT2ZIZWFkZXJzO1xuICAgICAgICBkZWJ1ZygnUmVnZW5lcmF0aW5nIHN0b3JlZCBIVFRQIGhlYWRlciBzdHJpbmcgZm9yIHJlcXVlc3QnKTtcbiAgICAgICAgcmVxLl9pbXBsaWNpdEhlYWRlcigpO1xuICAgICAgICBpZiAocmVxLm91dHB1dERhdGEgJiYgcmVxLm91dHB1dERhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZGVidWcoJ1BhdGNoaW5nIGNvbm5lY3Rpb24gd3JpdGUoKSBvdXRwdXQgYnVmZmVyIHdpdGggdXBkYXRlZCBoZWFkZXInKTtcbiAgICAgICAgICAgIGZpcnN0ID0gcmVxLm91dHB1dERhdGFbMF0uZGF0YTtcbiAgICAgICAgICAgIGVuZE9mSGVhZGVycyA9IGZpcnN0LmluZGV4T2YoJ1xcclxcblxcclxcbicpICsgNDtcbiAgICAgICAgICAgIHJlcS5vdXRwdXREYXRhWzBdLmRhdGEgPVxuICAgICAgICAgICAgICAgIHJlcS5faGVhZGVyICsgZmlyc3Quc3Vic3RyaW5nKGVuZE9mSGVhZGVycyk7XG4gICAgICAgICAgICBkZWJ1ZygnT3V0cHV0IGJ1ZmZlcjogJW8nLCByZXEub3V0cHV0RGF0YVswXS5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBDcmVhdGUgYSBzb2NrZXQgY29ubmVjdGlvbiB0byB0aGUgcHJveHkgc2VydmVyLlxuICAgICAgICBsZXQgc29ja2V0O1xuICAgICAgICBpZiAodGhpcy5wcm94eS5wcm90b2NvbCA9PT0gJ2h0dHBzOicpIHtcbiAgICAgICAgICAgIGRlYnVnKCdDcmVhdGluZyBgdGxzLlNvY2tldGA6ICVvJywgdGhpcy5jb25uZWN0T3B0cyk7XG4gICAgICAgICAgICBzb2NrZXQgPSB0bHMuY29ubmVjdCh0aGlzLmNvbm5lY3RPcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGRlYnVnKCdDcmVhdGluZyBgbmV0LlNvY2tldGA6ICVvJywgdGhpcy5jb25uZWN0T3B0cyk7XG4gICAgICAgICAgICBzb2NrZXQgPSBuZXQuY29ubmVjdCh0aGlzLmNvbm5lY3RPcHRzKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBXYWl0IGZvciB0aGUgc29ja2V0J3MgYGNvbm5lY3RgIGV2ZW50LCBzbyB0aGF0IHRoaXMgYGNhbGxiYWNrKClgXG4gICAgICAgIC8vIGZ1bmN0aW9uIHRocm93cyBpbnN0ZWFkIG9mIHRoZSBgaHR0cGAgcmVxdWVzdCBtYWNoaW5lcnkuIFRoaXMgaXNcbiAgICAgICAgLy8gaW1wb3J0YW50IGZvciBpLmUuIGBQYWNQcm94eUFnZW50YCB3aGljaCBkZXRlcm1pbmVzIGEgZmFpbGVkIHByb3h5XG4gICAgICAgIC8vIGNvbm5lY3Rpb24gdmlhIHRoZSBgY2FsbGJhY2soKWAgZnVuY3Rpb24gdGhyb3dpbmcuXG4gICAgICAgIGF3YWl0ICgwLCBldmVudHNfMS5vbmNlKShzb2NrZXQsICdjb25uZWN0Jyk7XG4gICAgICAgIHJldHVybiBzb2NrZXQ7XG4gICAgfVxufVxuSHR0cFByb3h5QWdlbnQucHJvdG9jb2xzID0gWydodHRwJywgJ2h0dHBzJ107XG5leHBvcnRzLkh0dHBQcm94eUFnZW50ID0gSHR0cFByb3h5QWdlbnQ7XG5mdW5jdGlvbiBvbWl0KG9iaiwgLi4ua2V5cykge1xuICAgIGNvbnN0IHJldCA9IHt9O1xuICAgIGxldCBrZXk7XG4gICAgZm9yIChrZXkgaW4gb2JqKSB7XG4gICAgICAgIGlmICgha2V5cy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgICAgICByZXRba2V5XSA9IG9ialtrZXldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdsb2JhbE5vUHJveHlMaXN0ID0gZXhwb3J0cy5wcm94eVBvbGljeU5hbWUgPSB2b2lkIDA7XG5leHBvcnRzLmxvYWROb1Byb3h5ID0gbG9hZE5vUHJveHk7XG5leHBvcnRzLmdldERlZmF1bHRQcm94eVNldHRpbmdzID0gZ2V0RGVmYXVsdFByb3h5U2V0dGluZ3M7XG5leHBvcnRzLnByb3h5UG9saWN5ID0gcHJveHlQb2xpY3k7XG5jb25zdCBodHRwc19wcm94eV9hZ2VudF8xID0gcmVxdWlyZShcImh0dHBzLXByb3h5LWFnZW50XCIpO1xuY29uc3QgaHR0cF9wcm94eV9hZ2VudF8xID0gcmVxdWlyZShcImh0dHAtcHJveHktYWdlbnRcIik7XG5jb25zdCBsb2dfanNfMSA9IHJlcXVpcmUoXCIuLi9sb2cuanNcIik7XG5jb25zdCBIVFRQU19QUk9YWSA9IFwiSFRUUFNfUFJPWFlcIjtcbmNvbnN0IEhUVFBfUFJPWFkgPSBcIkhUVFBfUFJPWFlcIjtcbmNvbnN0IEFMTF9QUk9YWSA9IFwiQUxMX1BST1hZXCI7XG5jb25zdCBOT19QUk9YWSA9IFwiTk9fUFJPWFlcIjtcbi8qKlxuICogVGhlIHByb2dyYW1tYXRpYyBpZGVudGlmaWVyIG9mIHRoZSBwcm94eVBvbGljeS5cbiAqL1xuZXhwb3J0cy5wcm94eVBvbGljeU5hbWUgPSBcInByb3h5UG9saWN5XCI7XG4vKipcbiAqIFN0b3JlcyB0aGUgcGF0dGVybnMgc3BlY2lmaWVkIGluIE5PX1BST1hZIGVudmlyb25tZW50IHZhcmlhYmxlLlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydHMuZ2xvYmFsTm9Qcm94eUxpc3QgPSBbXTtcbmxldCBub1Byb3h5TGlzdExvYWRlZCA9IGZhbHNlO1xuLyoqIEEgY2FjaGUgb2Ygd2hldGhlciBhIGhvc3Qgc2hvdWxkIGJ5cGFzcyB0aGUgcHJveHkuICovXG5jb25zdCBnbG9iYWxCeXBhc3NlZE1hcCA9IG5ldyBNYXAoKTtcbmZ1bmN0aW9uIGdldEVudmlyb25tZW50VmFsdWUobmFtZSkge1xuICAgIGlmIChwcm9jZXNzLmVudltuYW1lXSkge1xuICAgICAgICByZXR1cm4gcHJvY2Vzcy5lbnZbbmFtZV07XG4gICAgfVxuICAgIGVsc2UgaWYgKHByb2Nlc3MuZW52W25hbWUudG9Mb3dlckNhc2UoKV0pIHtcbiAgICAgICAgcmV0dXJuIHByb2Nlc3MuZW52W25hbWUudG9Mb3dlckNhc2UoKV07XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBsb2FkRW52aXJvbm1lbnRQcm94eVZhbHVlKCkge1xuICAgIGlmICghcHJvY2Vzcykge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBodHRwc1Byb3h5ID0gZ2V0RW52aXJvbm1lbnRWYWx1ZShIVFRQU19QUk9YWSk7XG4gICAgY29uc3QgYWxsUHJveHkgPSBnZXRFbnZpcm9ubWVudFZhbHVlKEFMTF9QUk9YWSk7XG4gICAgY29uc3QgaHR0cFByb3h5ID0gZ2V0RW52aXJvbm1lbnRWYWx1ZShIVFRQX1BST1hZKTtcbiAgICByZXR1cm4gaHR0cHNQcm94eSB8fCBhbGxQcm94eSB8fCBodHRwUHJveHk7XG59XG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdGhlIGhvc3Qgb2YgYSBnaXZlbiBgdXJpYCBtYXRjaGVzIGFueSBwYXR0ZXJuIGluIHRoZSBubyBwcm94eSBsaXN0LlxuICogSWYgdGhlcmUncyBhIG1hdGNoLCBhbnkgcmVxdWVzdCBzZW50IHRvIHRoZSBzYW1lIGhvc3Qgc2hvdWxkbid0IGhhdmUgdGhlIHByb3h5IHNldHRpbmdzIHNldC5cbiAqIFRoaXMgaW1wbGVtZW50YXRpb24gaXMgYSBwb3J0IG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9BenVyZS9henVyZS1zZGstZm9yLW5ldC9ibG9iLzhjY2E4MTEzNzExNTllNTI3MTU5YzdlYjY1NjAyNDc3ODk4NjgzZTIvc2RrL2NvcmUvQXp1cmUuQ29yZS9zcmMvUGlwZWxpbmUvSW50ZXJuYWwvSHR0cEVudmlyb25tZW50UHJveHkuY3MjTDIxMFxuICovXG5mdW5jdGlvbiBpc0J5cGFzc2VkKHVyaSwgbm9Qcm94eUxpc3QsIGJ5cGFzc2VkTWFwKSB7XG4gICAgaWYgKG5vUHJveHlMaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGhvc3QgPSBuZXcgVVJMKHVyaSkuaG9zdG5hbWU7XG4gICAgaWYgKGJ5cGFzc2VkTWFwID09PSBudWxsIHx8IGJ5cGFzc2VkTWFwID09PSB2b2lkIDAgPyB2b2lkIDAgOiBieXBhc3NlZE1hcC5oYXMoaG9zdCkpIHtcbiAgICAgICAgcmV0dXJuIGJ5cGFzc2VkTWFwLmdldChob3N0KTtcbiAgICB9XG4gICAgbGV0IGlzQnlwYXNzZWRGbGFnID0gZmFsc2U7XG4gICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIG5vUHJveHlMaXN0KSB7XG4gICAgICAgIGlmIChwYXR0ZXJuWzBdID09PSBcIi5cIikge1xuICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgbWF0Y2ggZWl0aGVyIGRvbWFpbiBpdCBzZWxmIG9yIGFueSBzdWJkb21haW4gb3IgaG9zdFxuICAgICAgICAgICAgLy8gLmZvby5jb20gd2lsbCBtYXRjaCBmb28uY29tIGl0IHNlbGYgb3IgKi5mb28uY29tXG4gICAgICAgICAgICBpZiAoaG9zdC5lbmRzV2l0aChwYXR0ZXJuKSkge1xuICAgICAgICAgICAgICAgIGlzQnlwYXNzZWRGbGFnID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChob3N0Lmxlbmd0aCA9PT0gcGF0dGVybi5sZW5ndGggLSAxICYmIGhvc3QgPT09IHBhdHRlcm4uc2xpY2UoMSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaXNCeXBhc3NlZEZsYWcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChob3N0ID09PSBwYXR0ZXJuKSB7XG4gICAgICAgICAgICAgICAgaXNCeXBhc3NlZEZsYWcgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGJ5cGFzc2VkTWFwID09PSBudWxsIHx8IGJ5cGFzc2VkTWFwID09PSB2b2lkIDAgPyB2b2lkIDAgOiBieXBhc3NlZE1hcC5zZXQoaG9zdCwgaXNCeXBhc3NlZEZsYWcpO1xuICAgIHJldHVybiBpc0J5cGFzc2VkRmxhZztcbn1cbmZ1bmN0aW9uIGxvYWROb1Byb3h5KCkge1xuICAgIGNvbnN0IG5vUHJveHkgPSBnZXRFbnZpcm9ubWVudFZhbHVlKE5PX1BST1hZKTtcbiAgICBub1Byb3h5TGlzdExvYWRlZCA9IHRydWU7XG4gICAgaWYgKG5vUHJveHkpIHtcbiAgICAgICAgcmV0dXJuIG5vUHJveHlcbiAgICAgICAgICAgIC5zcGxpdChcIixcIilcbiAgICAgICAgICAgIC5tYXAoKGl0ZW0pID0+IGl0ZW0udHJpbSgpKVxuICAgICAgICAgICAgLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5sZW5ndGgpO1xuICAgIH1cbiAgICByZXR1cm4gW107XG59XG4vKipcbiAqIFRoaXMgbWV0aG9kIGNvbnZlcnRzIGEgcHJveHkgdXJsIGludG8gYFByb3h5U2V0dGluZ3NgIGZvciB1c2Ugd2l0aCBQcm94eVBvbGljeS5cbiAqIElmIG5vIGFyZ3VtZW50IGlzIGdpdmVuLCBpdCBhdHRlbXB0cyB0byBwYXJzZSBhIHByb3h5IFVSTCBmcm9tIHRoZSBlbnZpcm9ubWVudFxuICogdmFyaWFibGVzIGBIVFRQU19QUk9YWWAgb3IgYEhUVFBfUFJPWFlgLlxuICogQHBhcmFtIHByb3h5VXJsIC0gVGhlIHVybCBvZiB0aGUgcHJveHkgdG8gdXNlLiBNYXkgY29udGFpbiBhdXRoZW50aWNhdGlvbiBpbmZvcm1hdGlvbi5cbiAqIEBkZXByZWNhdGVkIC0gSW50ZXJuYWxseSB0aGlzIG1ldGhvZCBpcyBubyBsb25nZXIgbmVjZXNzYXJ5IHdoZW4gc2V0dGluZyBwcm94eSBpbmZvcm1hdGlvbi5cbiAqL1xuZnVuY3Rpb24gZ2V0RGVmYXVsdFByb3h5U2V0dGluZ3MocHJveHlVcmwpIHtcbiAgICBpZiAoIXByb3h5VXJsKSB7XG4gICAgICAgIHByb3h5VXJsID0gbG9hZEVudmlyb25tZW50UHJveHlWYWx1ZSgpO1xuICAgICAgICBpZiAoIXByb3h5VXJsKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHBhcnNlZFVybCA9IG5ldyBVUkwocHJveHlVcmwpO1xuICAgIGNvbnN0IHNjaGVtYSA9IHBhcnNlZFVybC5wcm90b2NvbCA/IHBhcnNlZFVybC5wcm90b2NvbCArIFwiLy9cIiA6IFwiXCI7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgaG9zdDogc2NoZW1hICsgcGFyc2VkVXJsLmhvc3RuYW1lLFxuICAgICAgICBwb3J0OiBOdW1iZXIucGFyc2VJbnQocGFyc2VkVXJsLnBvcnQgfHwgXCI4MFwiKSxcbiAgICAgICAgdXNlcm5hbWU6IHBhcnNlZFVybC51c2VybmFtZSxcbiAgICAgICAgcGFzc3dvcmQ6IHBhcnNlZFVybC5wYXNzd29yZCxcbiAgICB9O1xufVxuLyoqXG4gKiBUaGlzIG1ldGhvZCBhdHRlbXB0cyB0byBwYXJzZSBhIHByb3h5IFVSTCBmcm9tIHRoZSBlbnZpcm9ubWVudFxuICogdmFyaWFibGVzIGBIVFRQU19QUk9YWWAgb3IgYEhUVFBfUFJPWFlgLlxuICovXG5mdW5jdGlvbiBnZXREZWZhdWx0UHJveHlTZXR0aW5nc0ludGVybmFsKCkge1xuICAgIGNvbnN0IGVudlByb3h5ID0gbG9hZEVudmlyb25tZW50UHJveHlWYWx1ZSgpO1xuICAgIHJldHVybiBlbnZQcm94eSA/IG5ldyBVUkwoZW52UHJveHkpIDogdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gZ2V0VXJsRnJvbVByb3h5U2V0dGluZ3Moc2V0dGluZ3MpIHtcbiAgICBsZXQgcGFyc2VkUHJveHlVcmw7XG4gICAgdHJ5IHtcbiAgICAgICAgcGFyc2VkUHJveHlVcmwgPSBuZXcgVVJMKHNldHRpbmdzLmhvc3QpO1xuICAgIH1cbiAgICBjYXRjaCAoX2EpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RpbmcgYSB2YWxpZCBob3N0IHN0cmluZyBpbiBwcm94eSBzZXR0aW5ncywgYnV0IGZvdW5kIFwiJHtzZXR0aW5ncy5ob3N0fVwiLmApO1xuICAgIH1cbiAgICBwYXJzZWRQcm94eVVybC5wb3J0ID0gU3RyaW5nKHNldHRpbmdzLnBvcnQpO1xuICAgIGlmIChzZXR0aW5ncy51c2VybmFtZSkge1xuICAgICAgICBwYXJzZWRQcm94eVVybC51c2VybmFtZSA9IHNldHRpbmdzLnVzZXJuYW1lO1xuICAgIH1cbiAgICBpZiAoc2V0dGluZ3MucGFzc3dvcmQpIHtcbiAgICAgICAgcGFyc2VkUHJveHlVcmwucGFzc3dvcmQgPSBzZXR0aW5ncy5wYXNzd29yZDtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlZFByb3h5VXJsO1xufVxuZnVuY3Rpb24gc2V0UHJveHlBZ2VudE9uUmVxdWVzdChyZXF1ZXN0LCBjYWNoZWRBZ2VudHMsIHByb3h5VXJsKSB7XG4gICAgLy8gQ3VzdG9tIEFnZW50IHNob3VsZCB0YWtlIHByZWNlZGVuY2Ugc28gaWYgb25lIGlzIHByZXNlbnRcbiAgICAvLyB3ZSBzaG91bGQgc2tpcCB0byBhdm9pZCBvdmVyd3JpdGluZyBpdC5cbiAgICBpZiAocmVxdWVzdC5hZ2VudCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwocmVxdWVzdC51cmwpO1xuICAgIGNvbnN0IGlzSW5zZWN1cmUgPSB1cmwucHJvdG9jb2wgIT09IFwiaHR0cHM6XCI7XG4gICAgaWYgKHJlcXVlc3QudGxzU2V0dGluZ3MpIHtcbiAgICAgICAgbG9nX2pzXzEubG9nZ2VyLndhcm5pbmcoXCJUTFMgc2V0dGluZ3MgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gY29tYmluYXRpb24gd2l0aCBjdXN0b20gUHJveHksIGNlcnRpZmljYXRlcyBwcm92aWRlZCB0byB0aGUgY2xpZW50IHdpbGwgYmUgaWdub3JlZC5cIik7XG4gICAgfVxuICAgIGNvbnN0IGhlYWRlcnMgPSByZXF1ZXN0LmhlYWRlcnMudG9KU09OKCk7XG4gICAgaWYgKGlzSW5zZWN1cmUpIHtcbiAgICAgICAgaWYgKCFjYWNoZWRBZ2VudHMuaHR0cFByb3h5QWdlbnQpIHtcbiAgICAgICAgICAgIGNhY2hlZEFnZW50cy5odHRwUHJveHlBZ2VudCA9IG5ldyBodHRwX3Byb3h5X2FnZW50XzEuSHR0cFByb3h5QWdlbnQocHJveHlVcmwsIHsgaGVhZGVycyB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXF1ZXN0LmFnZW50ID0gY2FjaGVkQWdlbnRzLmh0dHBQcm94eUFnZW50O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKCFjYWNoZWRBZ2VudHMuaHR0cHNQcm94eUFnZW50KSB7XG4gICAgICAgICAgICBjYWNoZWRBZ2VudHMuaHR0cHNQcm94eUFnZW50ID0gbmV3IGh0dHBzX3Byb3h5X2FnZW50XzEuSHR0cHNQcm94eUFnZW50KHByb3h5VXJsLCB7IGhlYWRlcnMgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVxdWVzdC5hZ2VudCA9IGNhY2hlZEFnZW50cy5odHRwc1Byb3h5QWdlbnQ7XG4gICAgfVxufVxuLyoqXG4gKiBBIHBvbGljeSB0aGF0IGFsbG93cyBvbmUgdG8gYXBwbHkgcHJveHkgc2V0dGluZ3MgdG8gYWxsIHJlcXVlc3RzLlxuICogSWYgbm90IHBhc3NlZCBzdGF0aWMgc2V0dGluZ3MsIHRoZXkgd2lsbCBiZSByZXRyaWV2ZWQgZnJvbSB0aGUgSFRUUFNfUFJPWFlcbiAqIG9yIEhUVFBfUFJPWFkgZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuICogQHBhcmFtIHByb3h5U2V0dGluZ3MgLSBQcm94eVNldHRpbmdzIHRvIHVzZSBvbiBlYWNoIHJlcXVlc3QuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIGFkZGl0aW9uYWwgc2V0dGluZ3MsIGZvciBleGFtcGxlLCBjdXN0b20gTk9fUFJPWFkgcGF0dGVybnNcbiAqL1xuZnVuY3Rpb24gcHJveHlQb2xpY3kocHJveHlTZXR0aW5ncywgb3B0aW9ucykge1xuICAgIGlmICghbm9Qcm94eUxpc3RMb2FkZWQpIHtcbiAgICAgICAgZXhwb3J0cy5nbG9iYWxOb1Byb3h5TGlzdC5wdXNoKC4uLmxvYWROb1Byb3h5KCkpO1xuICAgIH1cbiAgICBjb25zdCBkZWZhdWx0UHJveHkgPSBwcm94eVNldHRpbmdzXG4gICAgICAgID8gZ2V0VXJsRnJvbVByb3h5U2V0dGluZ3MocHJveHlTZXR0aW5ncylcbiAgICAgICAgOiBnZXREZWZhdWx0UHJveHlTZXR0aW5nc0ludGVybmFsKCk7XG4gICAgY29uc3QgY2FjaGVkQWdlbnRzID0ge307XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogZXhwb3J0cy5wcm94eVBvbGljeU5hbWUsXG4gICAgICAgIGFzeW5jIHNlbmRSZXF1ZXN0KHJlcXVlc3QsIG5leHQpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGlmICghcmVxdWVzdC5wcm94eVNldHRpbmdzICYmXG4gICAgICAgICAgICAgICAgZGVmYXVsdFByb3h5ICYmXG4gICAgICAgICAgICAgICAgIWlzQnlwYXNzZWQocmVxdWVzdC51cmwsIChfYSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5jdXN0b21Ob1Byb3h5TGlzdCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZXhwb3J0cy5nbG9iYWxOb1Byb3h5TGlzdCwgKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5jdXN0b21Ob1Byb3h5TGlzdCkgPyB1bmRlZmluZWQgOiBnbG9iYWxCeXBhc3NlZE1hcCkpIHtcbiAgICAgICAgICAgICAgICBzZXRQcm94eUFnZW50T25SZXF1ZXN0KHJlcXVlc3QsIGNhY2hlZEFnZW50cywgZGVmYXVsdFByb3h5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHJlcXVlc3QucHJveHlTZXR0aW5ncykge1xuICAgICAgICAgICAgICAgIHNldFByb3h5QWdlbnRPblJlcXVlc3QocmVxdWVzdCwgY2FjaGVkQWdlbnRzLCBnZXRVcmxGcm9tUHJveHlTZXR0aW5ncyhyZXF1ZXN0LnByb3h5U2V0dGluZ3MpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXh0KHJlcXVlc3QpO1xuICAgICAgICB9LFxuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wcm94eVBvbGljeS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnNldENsaWVudFJlcXVlc3RJZFBvbGljeU5hbWUgPSB2b2lkIDA7XG5leHBvcnRzLnNldENsaWVudFJlcXVlc3RJZFBvbGljeSA9IHNldENsaWVudFJlcXVlc3RJZFBvbGljeTtcbi8qKlxuICogVGhlIHByb2dyYW1tYXRpYyBpZGVudGlmaWVyIG9mIHRoZSBzZXRDbGllbnRSZXF1ZXN0SWRQb2xpY3kuXG4gKi9cbmV4cG9ydHMuc2V0Q2xpZW50UmVxdWVzdElkUG9saWN5TmFtZSA9IFwic2V0Q2xpZW50UmVxdWVzdElkUG9saWN5XCI7XG4vKipcbiAqIEVhY2ggUGlwZWxpbmVSZXF1ZXN0IGdldHMgYSB1bmlxdWUgaWQgdXBvbiBjcmVhdGlvbi5cbiAqIFRoaXMgcG9saWN5IHBhc3NlcyB0aGF0IHVuaXF1ZSBpZCBhbG9uZyB2aWEgYW4gSFRUUCBoZWFkZXIgdG8gZW5hYmxlIGJldHRlclxuICogdGVsZW1ldHJ5IGFuZCB0cmFjaW5nLlxuICogQHBhcmFtIHJlcXVlc3RJZEhlYWRlck5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgaGVhZGVyIHRvIHBhc3MgdGhlIHJlcXVlc3QgSUQgdG8uXG4gKi9cbmZ1bmN0aW9uIHNldENsaWVudFJlcXVlc3RJZFBvbGljeShyZXF1ZXN0SWRIZWFkZXJOYW1lID0gXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBleHBvcnRzLnNldENsaWVudFJlcXVlc3RJZFBvbGljeU5hbWUsXG4gICAgICAgIGFzeW5jIHNlbmRSZXF1ZXN0KHJlcXVlc3QsIG5leHQpIHtcbiAgICAgICAgICAgIGlmICghcmVxdWVzdC5oZWFkZXJzLmhhcyhyZXF1ZXN0SWRIZWFkZXJOYW1lKSkge1xuICAgICAgICAgICAgICAgIHJlcXVlc3QuaGVhZGVycy5zZXQocmVxdWVzdElkSGVhZGVyTmFtZSwgcmVxdWVzdC5yZXF1ZXN0SWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5leHQocmVxdWVzdCk7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNldENsaWVudFJlcXVlc3RJZFBvbGljeS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRsc1BvbGljeU5hbWUgPSB2b2lkIDA7XG5leHBvcnRzLnRsc1BvbGljeSA9IHRsc1BvbGljeTtcbi8qKlxuICogTmFtZSBvZiB0aGUgVExTIFBvbGljeVxuICovXG5leHBvcnRzLnRsc1BvbGljeU5hbWUgPSBcInRsc1BvbGljeVwiO1xuLyoqXG4gKiBHZXRzIGEgcGlwZWxpbmUgcG9saWN5IHRoYXQgYWRkcyB0aGUgY2xpZW50IGNlcnRpZmljYXRlIHRvIHRoZSBIdHRwQ2xpZW50IGFnZW50IGZvciBhdXRoZW50aWNhdGlvbi5cbiAqL1xuZnVuY3Rpb24gdGxzUG9saWN5KHRsc1NldHRpbmdzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogZXhwb3J0cy50bHNQb2xpY3lOYW1lLFxuICAgICAgICBzZW5kUmVxdWVzdDogYXN5bmMgKHJlcSwgbmV4dCkgPT4ge1xuICAgICAgICAgICAgLy8gVXNlcnMgbWF5IGRlZmluZSBhIHJlcXVlc3QgdGxzU2V0dGluZ3MsIGhvbm9yIHRob3NlIG92ZXIgdGhlIGNsaWVudCBsZXZlbCBvbmVcbiAgICAgICAgICAgIGlmICghcmVxLnRsc1NldHRpbmdzKSB7XG4gICAgICAgICAgICAgICAgcmVxLnRsc1NldHRpbmdzID0gdGxzU2V0dGluZ3M7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV4dChyZXEpO1xuICAgICAgICB9LFxuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD10bHNQb2xpY3kuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5UcmFjaW5nQ29udGV4dEltcGwgPSBleHBvcnRzLmtub3duQ29udGV4dEtleXMgPSB2b2lkIDA7XG5leHBvcnRzLmNyZWF0ZVRyYWNpbmdDb250ZXh0ID0gY3JlYXRlVHJhY2luZ0NvbnRleHQ7XG4vKiogQGludGVybmFsICovXG5leHBvcnRzLmtub3duQ29udGV4dEtleXMgPSB7XG4gICAgc3BhbjogU3ltYm9sLmZvcihcIkBhenVyZS9jb3JlLXRyYWNpbmcgc3BhblwiKSxcbiAgICBuYW1lc3BhY2U6IFN5bWJvbC5mb3IoXCJAYXp1cmUvY29yZS10cmFjaW5nIG5hbWVzcGFjZVwiKSxcbn07XG4vKipcbiAqIENyZWF0ZXMgYSBuZXcge0BsaW5rIFRyYWNpbmdDb250ZXh0fSB3aXRoIHRoZSBnaXZlbiBvcHRpb25zLlxuICogQHBhcmFtIG9wdGlvbnMgLSBBIHNldCBvZiBrbm93biBrZXlzIHRoYXQgbWF5IGJlIHNldCBvbiB0aGUgY29udGV4dC5cbiAqIEByZXR1cm5zIEEgbmV3IHtAbGluayBUcmFjaW5nQ29udGV4dH0gd2l0aCB0aGUgZ2l2ZW4gb3B0aW9ucy5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gY3JlYXRlVHJhY2luZ0NvbnRleHQob3B0aW9ucyA9IHt9KSB7XG4gICAgbGV0IGNvbnRleHQgPSBuZXcgVHJhY2luZ0NvbnRleHRJbXBsKG9wdGlvbnMucGFyZW50Q29udGV4dCk7XG4gICAgaWYgKG9wdGlvbnMuc3Bhbikge1xuICAgICAgICBjb250ZXh0ID0gY29udGV4dC5zZXRWYWx1ZShleHBvcnRzLmtub3duQ29udGV4dEtleXMuc3Bhbiwgb3B0aW9ucy5zcGFuKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMubmFtZXNwYWNlKSB7XG4gICAgICAgIGNvbnRleHQgPSBjb250ZXh0LnNldFZhbHVlKGV4cG9ydHMua25vd25Db250ZXh0S2V5cy5uYW1lc3BhY2UsIG9wdGlvbnMubmFtZXNwYWNlKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRleHQ7XG59XG4vKiogQGludGVybmFsICovXG5jbGFzcyBUcmFjaW5nQ29udGV4dEltcGwge1xuICAgIGNvbnN0cnVjdG9yKGluaXRpYWxDb250ZXh0KSB7XG4gICAgICAgIHRoaXMuX2NvbnRleHRNYXAgPVxuICAgICAgICAgICAgaW5pdGlhbENvbnRleHQgaW5zdGFuY2VvZiBUcmFjaW5nQ29udGV4dEltcGxcbiAgICAgICAgICAgICAgICA/IG5ldyBNYXAoaW5pdGlhbENvbnRleHQuX2NvbnRleHRNYXApXG4gICAgICAgICAgICAgICAgOiBuZXcgTWFwKCk7XG4gICAgfVxuICAgIHNldFZhbHVlKGtleSwgdmFsdWUpIHtcbiAgICAgICAgY29uc3QgbmV3Q29udGV4dCA9IG5ldyBUcmFjaW5nQ29udGV4dEltcGwodGhpcyk7XG4gICAgICAgIG5ld0NvbnRleHQuX2NvbnRleHRNYXAuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gbmV3Q29udGV4dDtcbiAgICB9XG4gICAgZ2V0VmFsdWUoa2V5KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb250ZXh0TWFwLmdldChrZXkpO1xuICAgIH1cbiAgICBkZWxldGVWYWx1ZShrZXkpIHtcbiAgICAgICAgY29uc3QgbmV3Q29udGV4dCA9IG5ldyBUcmFjaW5nQ29udGV4dEltcGwodGhpcyk7XG4gICAgICAgIG5ld0NvbnRleHQuX2NvbnRleHRNYXAuZGVsZXRlKGtleSk7XG4gICAgICAgIHJldHVybiBuZXdDb250ZXh0O1xuICAgIH1cbn1cbmV4cG9ydHMuVHJhY2luZ0NvbnRleHRJbXBsID0gVHJhY2luZ0NvbnRleHRJbXBsO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dHJhY2luZ0NvbnRleHQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5zdGF0ZSA9IHZvaWQgMDtcbi8qKlxuICogQGludGVybmFsXG4gKlxuICogSG9sZHMgdGhlIHNpbmdsZXRvbiBpbnN0cnVtZW50ZXIsIHRvIGJlIHNoYXJlZCBhY3Jvc3MgQ0pTIGFuZCBFU00gaW1wb3J0cy5cbiAqL1xuZXhwb3J0cy5zdGF0ZSA9IHtcbiAgICBpbnN0cnVtZW50ZXJJbXBsZW1lbnRhdGlvbjogdW5kZWZpbmVkLFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN0YXRlLWNqcy5janMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jcmVhdGVEZWZhdWx0VHJhY2luZ1NwYW4gPSBjcmVhdGVEZWZhdWx0VHJhY2luZ1NwYW47XG5leHBvcnRzLmNyZWF0ZURlZmF1bHRJbnN0cnVtZW50ZXIgPSBjcmVhdGVEZWZhdWx0SW5zdHJ1bWVudGVyO1xuZXhwb3J0cy51c2VJbnN0cnVtZW50ZXIgPSB1c2VJbnN0cnVtZW50ZXI7XG5leHBvcnRzLmdldEluc3RydW1lbnRlciA9IGdldEluc3RydW1lbnRlcjtcbmNvbnN0IHRyYWNpbmdDb250ZXh0X2pzXzEgPSByZXF1aXJlKFwiLi90cmFjaW5nQ29udGV4dC5qc1wiKTtcbmNvbnN0IHN0YXRlX2pzXzEgPSByZXF1aXJlKFwiLi9zdGF0ZS5qc1wiKTtcbmZ1bmN0aW9uIGNyZWF0ZURlZmF1bHRUcmFjaW5nU3BhbigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBlbmQ6ICgpID0+IHtcbiAgICAgICAgICAgIC8vIG5vb3BcbiAgICAgICAgfSxcbiAgICAgICAgaXNSZWNvcmRpbmc6ICgpID0+IGZhbHNlLFxuICAgICAgICByZWNvcmRFeGNlcHRpb246ICgpID0+IHtcbiAgICAgICAgICAgIC8vIG5vb3BcbiAgICAgICAgfSxcbiAgICAgICAgc2V0QXR0cmlidXRlOiAoKSA9PiB7XG4gICAgICAgICAgICAvLyBub29wXG4gICAgICAgIH0sXG4gICAgICAgIHNldFN0YXR1czogKCkgPT4ge1xuICAgICAgICAgICAgLy8gbm9vcFxuICAgICAgICB9LFxuICAgICAgICBhZGRFdmVudDogKCkgPT4ge1xuICAgICAgICAgICAgLy8gbm9vcFxuICAgICAgICB9LFxuICAgIH07XG59XG5mdW5jdGlvbiBjcmVhdGVEZWZhdWx0SW5zdHJ1bWVudGVyKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGNyZWF0ZVJlcXVlc3RIZWFkZXJzOiAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH0sXG4gICAgICAgIHBhcnNlVHJhY2VwYXJlbnRIZWFkZXI6ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH0sXG4gICAgICAgIHN0YXJ0U3BhbjogKF9uYW1lLCBzcGFuT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBzcGFuOiBjcmVhdGVEZWZhdWx0VHJhY2luZ1NwYW4oKSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nQ29udGV4dDogKDAsIHRyYWNpbmdDb250ZXh0X2pzXzEuY3JlYXRlVHJhY2luZ0NvbnRleHQpKHsgcGFyZW50Q29udGV4dDogc3Bhbk9wdGlvbnMudHJhY2luZ0NvbnRleHQgfSksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgICB3aXRoQ29udGV4dChfY29udGV4dCwgY2FsbGJhY2ssIC4uLmNhbGxiYWNrQXJncykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKC4uLmNhbGxiYWNrQXJncyk7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbi8qKlxuICogRXh0ZW5kcyB0aGUgQXp1cmUgU0RLIHdpdGggc3VwcG9ydCBmb3IgYSBnaXZlbiBpbnN0cnVtZW50ZXIgaW1wbGVtZW50YXRpb24uXG4gKlxuICogQHBhcmFtIGluc3RydW1lbnRlciAtIFRoZSBpbnN0cnVtZW50ZXIgaW1wbGVtZW50YXRpb24gdG8gdXNlLlxuICovXG5mdW5jdGlvbiB1c2VJbnN0cnVtZW50ZXIoaW5zdHJ1bWVudGVyKSB7XG4gICAgc3RhdGVfanNfMS5zdGF0ZS5pbnN0cnVtZW50ZXJJbXBsZW1lbnRhdGlvbiA9IGluc3RydW1lbnRlcjtcbn1cbi8qKlxuICogR2V0cyB0aGUgY3VycmVudGx5IHNldCBpbnN0cnVtZW50ZXIsIGEgTm8tT3AgaW5zdHJ1bWVudGVyIGJ5IGRlZmF1bHQuXG4gKlxuICogQHJldHVybnMgVGhlIGN1cnJlbnRseSBzZXQgaW5zdHJ1bWVudGVyXG4gKi9cbmZ1bmN0aW9uIGdldEluc3RydW1lbnRlcigpIHtcbiAgICBpZiAoIXN0YXRlX2pzXzEuc3RhdGUuaW5zdHJ1bWVudGVySW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgc3RhdGVfanNfMS5zdGF0ZS5pbnN0cnVtZW50ZXJJbXBsZW1lbnRhdGlvbiA9IGNyZWF0ZURlZmF1bHRJbnN0cnVtZW50ZXIoKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0YXRlX2pzXzEuc3RhdGUuaW5zdHJ1bWVudGVySW1wbGVtZW50YXRpb247XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbnN0cnVtZW50ZXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jcmVhdGVUcmFjaW5nQ2xpZW50ID0gY3JlYXRlVHJhY2luZ0NsaWVudDtcbmNvbnN0IGluc3RydW1lbnRlcl9qc18xID0gcmVxdWlyZShcIi4vaW5zdHJ1bWVudGVyLmpzXCIpO1xuY29uc3QgdHJhY2luZ0NvbnRleHRfanNfMSA9IHJlcXVpcmUoXCIuL3RyYWNpbmdDb250ZXh0LmpzXCIpO1xuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHRyYWNpbmcgY2xpZW50LlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgdHJhY2luZyBjbGllbnQuXG4gKiBAcmV0dXJucyAtIEFuIGluc3RhbmNlIG9mIHtAbGluayBUcmFjaW5nQ2xpZW50fS5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlVHJhY2luZ0NsaWVudChvcHRpb25zKSB7XG4gICAgY29uc3QgeyBuYW1lc3BhY2UsIHBhY2thZ2VOYW1lLCBwYWNrYWdlVmVyc2lvbiB9ID0gb3B0aW9ucztcbiAgICBmdW5jdGlvbiBzdGFydFNwYW4obmFtZSwgb3BlcmF0aW9uT3B0aW9ucywgc3Bhbk9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBzdGFydFNwYW5SZXN1bHQgPSAoMCwgaW5zdHJ1bWVudGVyX2pzXzEuZ2V0SW5zdHJ1bWVudGVyKSgpLnN0YXJ0U3BhbihuYW1lLCBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHNwYW5PcHRpb25zKSwgeyBwYWNrYWdlTmFtZTogcGFja2FnZU5hbWUsIHBhY2thZ2VWZXJzaW9uOiBwYWNrYWdlVmVyc2lvbiwgdHJhY2luZ0NvbnRleHQ6IChfYSA9IG9wZXJhdGlvbk9wdGlvbnMgPT09IG51bGwgfHwgb3BlcmF0aW9uT3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3BlcmF0aW9uT3B0aW9ucy50cmFjaW5nT3B0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRyYWNpbmdDb250ZXh0IH0pKTtcbiAgICAgICAgbGV0IHRyYWNpbmdDb250ZXh0ID0gc3RhcnRTcGFuUmVzdWx0LnRyYWNpbmdDb250ZXh0O1xuICAgICAgICBjb25zdCBzcGFuID0gc3RhcnRTcGFuUmVzdWx0LnNwYW47XG4gICAgICAgIGlmICghdHJhY2luZ0NvbnRleHQuZ2V0VmFsdWUodHJhY2luZ0NvbnRleHRfanNfMS5rbm93bkNvbnRleHRLZXlzLm5hbWVzcGFjZSkpIHtcbiAgICAgICAgICAgIHRyYWNpbmdDb250ZXh0ID0gdHJhY2luZ0NvbnRleHQuc2V0VmFsdWUodHJhY2luZ0NvbnRleHRfanNfMS5rbm93bkNvbnRleHRLZXlzLm5hbWVzcGFjZSwgbmFtZXNwYWNlKTtcbiAgICAgICAgfVxuICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShcImF6Lm5hbWVzcGFjZVwiLCB0cmFjaW5nQ29udGV4dC5nZXRWYWx1ZSh0cmFjaW5nQ29udGV4dF9qc18xLmtub3duQ29udGV4dEtleXMubmFtZXNwYWNlKSk7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRPcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgb3BlcmF0aW9uT3B0aW9ucywge1xuICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3BlcmF0aW9uT3B0aW9ucyA9PT0gbnVsbCB8fCBvcGVyYXRpb25PcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcGVyYXRpb25PcHRpb25zLnRyYWNpbmdPcHRpb25zKSwgeyB0cmFjaW5nQ29udGV4dCB9KSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzcGFuLFxuICAgICAgICAgICAgdXBkYXRlZE9wdGlvbnMsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGFzeW5jIGZ1bmN0aW9uIHdpdGhTcGFuKG5hbWUsIG9wZXJhdGlvbk9wdGlvbnMsIGNhbGxiYWNrLCBzcGFuT3B0aW9ucykge1xuICAgICAgICBjb25zdCB7IHNwYW4sIHVwZGF0ZWRPcHRpb25zIH0gPSBzdGFydFNwYW4obmFtZSwgb3BlcmF0aW9uT3B0aW9ucywgc3Bhbk9wdGlvbnMpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgd2l0aENvbnRleHQodXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMudHJhY2luZ0NvbnRleHQsICgpID0+IFByb21pc2UucmVzb2x2ZShjYWxsYmFjayh1cGRhdGVkT3B0aW9ucywgc3BhbikpKTtcbiAgICAgICAgICAgIHNwYW4uc2V0U3RhdHVzKHsgc3RhdHVzOiBcInN1Y2Nlc3NcIiB9KTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgc3Bhbi5zZXRTdGF0dXMoeyBzdGF0dXM6IFwiZXJyb3JcIiwgZXJyb3I6IGVyciB9KTtcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gd2l0aENvbnRleHQoY29udGV4dCwgY2FsbGJhY2ssIC4uLmNhbGxiYWNrQXJncykge1xuICAgICAgICByZXR1cm4gKDAsIGluc3RydW1lbnRlcl9qc18xLmdldEluc3RydW1lbnRlcikoKS53aXRoQ29udGV4dChjb250ZXh0LCBjYWxsYmFjaywgLi4uY2FsbGJhY2tBcmdzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUGFyc2VzIGEgdHJhY2VwYXJlbnQgaGVhZGVyIHZhbHVlIGludG8gYSBzcGFuIGlkZW50aWZpZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdHJhY2VwYXJlbnRIZWFkZXIgLSBUaGUgdHJhY2VwYXJlbnQgaGVhZGVyIHRvIHBhcnNlLlxuICAgICAqIEByZXR1cm5zIEFuIGltcGxlbWVudGF0aW9uLXNwZWNpZmljIGlkZW50aWZpZXIgZm9yIHRoZSBzcGFuLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHBhcnNlVHJhY2VwYXJlbnRIZWFkZXIodHJhY2VwYXJlbnRIZWFkZXIpIHtcbiAgICAgICAgcmV0dXJuICgwLCBpbnN0cnVtZW50ZXJfanNfMS5nZXRJbnN0cnVtZW50ZXIpKCkucGFyc2VUcmFjZXBhcmVudEhlYWRlcih0cmFjZXBhcmVudEhlYWRlcik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBzZXQgb2YgcmVxdWVzdCBoZWFkZXJzIHRvIHByb3BhZ2F0ZSB0cmFjaW5nIGluZm9ybWF0aW9uIHRvIGEgYmFja2VuZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0cmFjaW5nQ29udGV4dCAtIFRoZSBjb250ZXh0IGNvbnRhaW5pbmcgdGhlIHNwYW4gdG8gc2VyaWFsaXplLlxuICAgICAqIEByZXR1cm5zIFRoZSBzZXQgb2YgaGVhZGVycyB0byBhZGQgdG8gYSByZXF1ZXN0LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZVJlcXVlc3RIZWFkZXJzKHRyYWNpbmdDb250ZXh0KSB7XG4gICAgICAgIHJldHVybiAoMCwgaW5zdHJ1bWVudGVyX2pzXzEuZ2V0SW5zdHJ1bWVudGVyKSgpLmNyZWF0ZVJlcXVlc3RIZWFkZXJzKHRyYWNpbmdDb250ZXh0KTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc3RhcnRTcGFuLFxuICAgICAgICB3aXRoU3BhbixcbiAgICAgICAgd2l0aENvbnRleHQsXG4gICAgICAgIHBhcnNlVHJhY2VwYXJlbnRIZWFkZXIsXG4gICAgICAgIGNyZWF0ZVJlcXVlc3RIZWFkZXJzLFxuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD10cmFjaW5nQ2xpZW50LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlVHJhY2luZ0NsaWVudCA9IGV4cG9ydHMudXNlSW5zdHJ1bWVudGVyID0gdm9pZCAwO1xudmFyIGluc3RydW1lbnRlcl9qc18xID0gcmVxdWlyZShcIi4vaW5zdHJ1bWVudGVyLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidXNlSW5zdHJ1bWVudGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBpbnN0cnVtZW50ZXJfanNfMS51c2VJbnN0cnVtZW50ZXI7IH0gfSk7XG52YXIgdHJhY2luZ0NsaWVudF9qc18xID0gcmVxdWlyZShcIi4vdHJhY2luZ0NsaWVudC5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVRyYWNpbmdDbGllbnRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRyYWNpbmdDbGllbnRfanNfMS5jcmVhdGVUcmFjaW5nQ2xpZW50OyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jdXN0b20gPSB2b2lkIDA7XG5jb25zdCBub2RlX3V0aWxfMSA9IHJlcXVpcmUoXCJub2RlOnV0aWxcIik7XG5leHBvcnRzLmN1c3RvbSA9IG5vZGVfdXRpbF8xLmluc3BlY3QuY3VzdG9tO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5zcGVjdC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlJlc3RFcnJvciA9IHZvaWQgMDtcbmV4cG9ydHMuaXNSZXN0RXJyb3IgPSBpc1Jlc3RFcnJvcjtcbmNvbnN0IGNvcmVfdXRpbF8xID0gcmVxdWlyZShcIkBhenVyZS9jb3JlLXV0aWxcIik7XG5jb25zdCBpbnNwZWN0X2pzXzEgPSByZXF1aXJlKFwiLi91dGlsL2luc3BlY3QuanNcIik7XG5jb25zdCBzYW5pdGl6ZXJfanNfMSA9IHJlcXVpcmUoXCIuL3V0aWwvc2FuaXRpemVyLmpzXCIpO1xuY29uc3QgZXJyb3JTYW5pdGl6ZXIgPSBuZXcgc2FuaXRpemVyX2pzXzEuU2FuaXRpemVyKCk7XG4vKipcbiAqIEEgY3VzdG9tIGVycm9yIHR5cGUgZm9yIGZhaWxlZCBwaXBlbGluZSByZXF1ZXN0cy5cbiAqL1xuY2xhc3MgUmVzdEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2UsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJSZXN0RXJyb3JcIjtcbiAgICAgICAgdGhpcy5jb2RlID0gb3B0aW9ucy5jb2RlO1xuICAgICAgICB0aGlzLnN0YXR1c0NvZGUgPSBvcHRpb25zLnN0YXR1c0NvZGU7XG4gICAgICAgIC8vIFRoZSByZXF1ZXN0IGFuZCByZXNwb25zZSBtYXkgY29udGFpbiBzZW5zaXRpdmUgaW5mb3JtYXRpb24gaW4gdGhlIGhlYWRlcnMgb3IgYm9keS5cbiAgICAgICAgLy8gVG8gaGVscCBwcmV2ZW50IHRoaXMgc2Vuc2l0aXZlIGluZm9ybWF0aW9uIGJlaW5nIGFjY2lkZW50YWxseSBsb2dnZWQsIHRoZSByZXF1ZXN0IGFuZCByZXNwb25zZVxuICAgICAgICAvLyBwcm9wZXJ0aWVzIGFyZSBtYXJrZWQgYXMgbm9uLWVudW1lcmFibGUgaGVyZS4gVGhpcyBwcmV2ZW50cyB0aGVtIHNob3dpbmcgdXAgaW4gdGhlIG91dHB1dCBvZlxuICAgICAgICAvLyBKU09OLnN0cmluZ2lmeSBhbmQgY29uc29sZS5sb2cuXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInJlcXVlc3RcIiwgeyB2YWx1ZTogb3B0aW9ucy5yZXF1ZXN0LCBlbnVtZXJhYmxlOiBmYWxzZSB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwicmVzcG9uc2VcIiwgeyB2YWx1ZTogb3B0aW9ucy5yZXNwb25zZSwgZW51bWVyYWJsZTogZmFsc2UgfSk7XG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBSZXN0RXJyb3IucHJvdG90eXBlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTG9nZ2luZyBtZXRob2QgZm9yIHV0aWwuaW5zcGVjdCBpbiBOb2RlXG4gICAgICovXG4gICAgW2luc3BlY3RfanNfMS5jdXN0b21dKCkge1xuICAgICAgICAvLyBFeHRyYWN0IG5vbi1lbnVtZXJhYmxlIHByb3BlcnRpZXMgYW5kIGFkZCB0aGVtIGJhY2suIFRoaXMgaXMgT0sgc2luY2UgaW4gdGhpcyBvdXRwdXQgdGhlIHJlcXVlc3QgYW5kXG4gICAgICAgIC8vIHJlc3BvbnNlIGdldCBzYW5pdGl6ZWQuXG4gICAgICAgIHJldHVybiBgUmVzdEVycm9yOiAke3RoaXMubWVzc2FnZX0gXFxuICR7ZXJyb3JTYW5pdGl6ZXIuc2FuaXRpemUoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCB0aGlzKSwgeyByZXF1ZXN0OiB0aGlzLnJlcXVlc3QsIHJlc3BvbnNlOiB0aGlzLnJlc3BvbnNlIH0pKX1gO1xuICAgIH1cbn1cbmV4cG9ydHMuUmVzdEVycm9yID0gUmVzdEVycm9yO1xuLyoqXG4gKiBTb21ldGhpbmcgd2VudCB3cm9uZyB3aGVuIG1ha2luZyB0aGUgcmVxdWVzdC5cbiAqIFRoaXMgbWVhbnMgdGhlIGFjdHVhbCByZXF1ZXN0IGZhaWxlZCBmb3Igc29tZSByZWFzb24sXG4gKiBzdWNoIGFzIGEgRE5TIGlzc3VlIG9yIHRoZSBjb25uZWN0aW9uIGJlaW5nIGxvc3QuXG4gKi9cblJlc3RFcnJvci5SRVFVRVNUX1NFTkRfRVJST1IgPSBcIlJFUVVFU1RfU0VORF9FUlJPUlwiO1xuLyoqXG4gKiBUaGlzIG1lYW5zIHRoYXQgcGFyc2luZyB0aGUgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyIGZhaWxlZC5cbiAqIEl0IG1heSBoYXZlIGJlZW4gbWFsZm9ybWVkLlxuICovXG5SZXN0RXJyb3IuUEFSU0VfRVJST1IgPSBcIlBBUlNFX0VSUk9SXCI7XG4vKipcbiAqIFR5cGVndWFyZCBmb3IgUmVzdEVycm9yXG4gKiBAcGFyYW0gZSAtIFNvbWV0aGluZyBjYXVnaHQgYnkgYSBjYXRjaCBjbGF1c2UuXG4gKi9cbmZ1bmN0aW9uIGlzUmVzdEVycm9yKGUpIHtcbiAgICBpZiAoZSBpbnN0YW5jZW9mIFJlc3RFcnJvcikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuICgwLCBjb3JlX3V0aWxfMS5pc0Vycm9yKShlKSAmJiBlLm5hbWUgPT09IFwiUmVzdEVycm9yXCI7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZXN0RXJyb3IuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFjaW5nUG9saWN5TmFtZSA9IHZvaWQgMDtcbmV4cG9ydHMudHJhY2luZ1BvbGljeSA9IHRyYWNpbmdQb2xpY3k7XG5jb25zdCBjb3JlX3RyYWNpbmdfMSA9IHJlcXVpcmUoXCJAYXp1cmUvY29yZS10cmFjaW5nXCIpO1xuY29uc3QgY29uc3RhbnRzX2pzXzEgPSByZXF1aXJlKFwiLi4vY29uc3RhbnRzLmpzXCIpO1xuY29uc3QgdXNlckFnZW50X2pzXzEgPSByZXF1aXJlKFwiLi4vdXRpbC91c2VyQWdlbnQuanNcIik7XG5jb25zdCBsb2dfanNfMSA9IHJlcXVpcmUoXCIuLi9sb2cuanNcIik7XG5jb25zdCBjb3JlX3V0aWxfMSA9IHJlcXVpcmUoXCJAYXp1cmUvY29yZS11dGlsXCIpO1xuY29uc3QgcmVzdEVycm9yX2pzXzEgPSByZXF1aXJlKFwiLi4vcmVzdEVycm9yLmpzXCIpO1xuY29uc3Qgc2FuaXRpemVyX2pzXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9zYW5pdGl6ZXIuanNcIik7XG4vKipcbiAqIFRoZSBwcm9ncmFtbWF0aWMgaWRlbnRpZmllciBvZiB0aGUgdHJhY2luZ1BvbGljeS5cbiAqL1xuZXhwb3J0cy50cmFjaW5nUG9saWN5TmFtZSA9IFwidHJhY2luZ1BvbGljeVwiO1xuLyoqXG4gKiBBIHNpbXBsZSBwb2xpY3kgdG8gY3JlYXRlIE9wZW5UZWxlbWV0cnkgU3BhbnMgZm9yIGVhY2ggcmVxdWVzdCBtYWRlIGJ5IHRoZSBwaXBlbGluZVxuICogdGhhdCBoYXMgU3Bhbk9wdGlvbnMgd2l0aCBhIHBhcmVudC5cbiAqIFJlcXVlc3RzIG1hZGUgd2l0aG91dCBhIHBhcmVudCBTcGFuIHdpbGwgbm90IGJlIHJlY29yZGVkLlxuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIGNvbmZpZ3VyZSB0aGUgdGVsZW1ldHJ5IGxvZ2dlZCBieSB0aGUgdHJhY2luZyBwb2xpY3kuXG4gKi9cbmZ1bmN0aW9uIHRyYWNpbmdQb2xpY3kob3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgdXNlckFnZW50UHJvbWlzZSA9ICgwLCB1c2VyQWdlbnRfanNfMS5nZXRVc2VyQWdlbnRWYWx1ZSkob3B0aW9ucy51c2VyQWdlbnRQcmVmaXgpO1xuICAgIGNvbnN0IHNhbml0aXplciA9IG5ldyBzYW5pdGl6ZXJfanNfMS5TYW5pdGl6ZXIoe1xuICAgICAgICBhZGRpdGlvbmFsQWxsb3dlZFF1ZXJ5UGFyYW1ldGVyczogb3B0aW9ucy5hZGRpdGlvbmFsQWxsb3dlZFF1ZXJ5UGFyYW1ldGVycyxcbiAgICB9KTtcbiAgICBjb25zdCB0cmFjaW5nQ2xpZW50ID0gdHJ5Q3JlYXRlVHJhY2luZ0NsaWVudCgpO1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGV4cG9ydHMudHJhY2luZ1BvbGljeU5hbWUsXG4gICAgICAgIGFzeW5jIHNlbmRSZXF1ZXN0KHJlcXVlc3QsIG5leHQpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGlmICghdHJhY2luZ0NsaWVudCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0KHJlcXVlc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdXNlckFnZW50ID0gYXdhaXQgdXNlckFnZW50UHJvbWlzZTtcbiAgICAgICAgICAgIGNvbnN0IHNwYW5BdHRyaWJ1dGVzID0ge1xuICAgICAgICAgICAgICAgIFwiaHR0cC51cmxcIjogc2FuaXRpemVyLnNhbml0aXplVXJsKHJlcXVlc3QudXJsKSxcbiAgICAgICAgICAgICAgICBcImh0dHAubWV0aG9kXCI6IHJlcXVlc3QubWV0aG9kLFxuICAgICAgICAgICAgICAgIFwiaHR0cC51c2VyX2FnZW50XCI6IHVzZXJBZ2VudCxcbiAgICAgICAgICAgICAgICByZXF1ZXN0SWQ6IHJlcXVlc3QucmVxdWVzdElkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmICh1c2VyQWdlbnQpIHtcbiAgICAgICAgICAgICAgICBzcGFuQXR0cmlidXRlc1tcImh0dHAudXNlcl9hZ2VudFwiXSA9IHVzZXJBZ2VudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHsgc3BhbiwgdHJhY2luZ0NvbnRleHQgfSA9IChfYSA9IHRyeUNyZWF0ZVNwYW4odHJhY2luZ0NsaWVudCwgcmVxdWVzdCwgc3BhbkF0dHJpYnV0ZXMpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB7fTtcbiAgICAgICAgICAgIGlmICghc3BhbiB8fCAhdHJhY2luZ0NvbnRleHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dChyZXF1ZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0cmFjaW5nQ2xpZW50LndpdGhDb250ZXh0KHRyYWNpbmdDb250ZXh0LCBuZXh0LCByZXF1ZXN0KTtcbiAgICAgICAgICAgICAgICB0cnlQcm9jZXNzUmVzcG9uc2Uoc3BhbiwgcmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICB0cnlQcm9jZXNzRXJyb3Ioc3BhbiwgZXJyKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbmZ1bmN0aW9uIHRyeUNyZWF0ZVRyYWNpbmdDbGllbnQoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuICgwLCBjb3JlX3RyYWNpbmdfMS5jcmVhdGVUcmFjaW5nQ2xpZW50KSh7XG4gICAgICAgICAgICBuYW1lc3BhY2U6IFwiXCIsXG4gICAgICAgICAgICBwYWNrYWdlTmFtZTogXCJAYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lXCIsXG4gICAgICAgICAgICBwYWNrYWdlVmVyc2lvbjogY29uc3RhbnRzX2pzXzEuU0RLX1ZFUlNJT04sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBsb2dfanNfMS5sb2dnZXIud2FybmluZyhgRXJyb3Igd2hlbiBjcmVhdGluZyB0aGUgVHJhY2luZ0NsaWVudDogJHsoMCwgY29yZV91dGlsXzEuZ2V0RXJyb3JNZXNzYWdlKShlKX1gKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59XG5mdW5jdGlvbiB0cnlDcmVhdGVTcGFuKHRyYWNpbmdDbGllbnQsIHJlcXVlc3QsIHNwYW5BdHRyaWJ1dGVzKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gQXMgcGVyIHNwZWMsIHdlIGRvIG5vdCBuZWVkIHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBIVFRQIGFuZCBIVFRQUyBpbiBzcGFuIG5hbWUuXG4gICAgICAgIGNvbnN0IHsgc3BhbiwgdXBkYXRlZE9wdGlvbnMgfSA9IHRyYWNpbmdDbGllbnQuc3RhcnRTcGFuKGBIVFRQICR7cmVxdWVzdC5tZXRob2R9YCwgeyB0cmFjaW5nT3B0aW9uczogcmVxdWVzdC50cmFjaW5nT3B0aW9ucyB9LCB7XG4gICAgICAgICAgICBzcGFuS2luZDogXCJjbGllbnRcIixcbiAgICAgICAgICAgIHNwYW5BdHRyaWJ1dGVzLFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gSWYgdGhlIHNwYW4gaXMgbm90IHJlY29yZGluZywgZG9uJ3QgZG8gYW55IG1vcmUgd29yay5cbiAgICAgICAgaWYgKCFzcGFuLmlzUmVjb3JkaW5nKCkpIHtcbiAgICAgICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIC8vIHNldCBoZWFkZXJzXG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB0cmFjaW5nQ2xpZW50LmNyZWF0ZVJlcXVlc3RIZWFkZXJzKHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLnRyYWNpbmdDb250ZXh0KTtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoaGVhZGVycykpIHtcbiAgICAgICAgICAgIHJlcXVlc3QuaGVhZGVycy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgc3BhbiwgdHJhY2luZ0NvbnRleHQ6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLnRyYWNpbmdDb250ZXh0IH07XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIGxvZ19qc18xLmxvZ2dlci53YXJuaW5nKGBTa2lwcGluZyBjcmVhdGluZyBhIHRyYWNpbmcgc3BhbiBkdWUgdG8gYW4gZXJyb3I6ICR7KDAsIGNvcmVfdXRpbF8xLmdldEVycm9yTWVzc2FnZSkoZSl9YCk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufVxuZnVuY3Rpb24gdHJ5UHJvY2Vzc0Vycm9yKHNwYW4sIGVycm9yKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgc3Bhbi5zZXRTdGF0dXMoe1xuICAgICAgICAgICAgc3RhdHVzOiBcImVycm9yXCIsXG4gICAgICAgICAgICBlcnJvcjogKDAsIGNvcmVfdXRpbF8xLmlzRXJyb3IpKGVycm9yKSA/IGVycm9yIDogdW5kZWZpbmVkLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCgwLCByZXN0RXJyb3JfanNfMS5pc1Jlc3RFcnJvcikoZXJyb3IpICYmIGVycm9yLnN0YXR1c0NvZGUpIHtcbiAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKFwiaHR0cC5zdGF0dXNfY29kZVwiLCBlcnJvci5zdGF0dXNDb2RlKTtcbiAgICAgICAgfVxuICAgICAgICBzcGFuLmVuZCgpO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBsb2dfanNfMS5sb2dnZXIud2FybmluZyhgU2tpcHBpbmcgdHJhY2luZyBzcGFuIHByb2Nlc3NpbmcgZHVlIHRvIGFuIGVycm9yOiAkeygwLCBjb3JlX3V0aWxfMS5nZXRFcnJvck1lc3NhZ2UpKGUpfWApO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHRyeVByb2Nlc3NSZXNwb25zZShzcGFuLCByZXNwb25zZSkge1xuICAgIHRyeSB7XG4gICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKFwiaHR0cC5zdGF0dXNfY29kZVwiLCByZXNwb25zZS5zdGF0dXMpO1xuICAgICAgICBjb25zdCBzZXJ2aWNlUmVxdWVzdElkID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoXCJ4LW1zLXJlcXVlc3QtaWRcIik7XG4gICAgICAgIGlmIChzZXJ2aWNlUmVxdWVzdElkKSB7XG4gICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShcInNlcnZpY2VSZXF1ZXN0SWRcIiwgc2VydmljZVJlcXVlc3RJZCk7XG4gICAgICAgIH1cbiAgICAgICAgc3Bhbi5zZXRTdGF0dXMoe1xuICAgICAgICAgICAgc3RhdHVzOiBcInN1Y2Nlc3NcIixcbiAgICAgICAgfSk7XG4gICAgICAgIHNwYW4uZW5kKCk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIGxvZ19qc18xLmxvZ2dlci53YXJuaW5nKGBTa2lwcGluZyB0cmFjaW5nIHNwYW4gcHJvY2Vzc2luZyBkdWUgdG8gYW4gZXJyb3I6ICR7KDAsIGNvcmVfdXRpbF8xLmdldEVycm9yTWVzc2FnZSkoZSl9YCk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dHJhY2luZ1BvbGljeS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNyZWF0ZVBpcGVsaW5lRnJvbU9wdGlvbnMgPSBjcmVhdGVQaXBlbGluZUZyb21PcHRpb25zO1xuY29uc3QgbG9nUG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9wb2xpY2llcy9sb2dQb2xpY3kuanNcIik7XG5jb25zdCBwaXBlbGluZV9qc18xID0gcmVxdWlyZShcIi4vcGlwZWxpbmUuanNcIik7XG5jb25zdCByZWRpcmVjdFBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvcmVkaXJlY3RQb2xpY3kuanNcIik7XG5jb25zdCB1c2VyQWdlbnRQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL3VzZXJBZ2VudFBvbGljeS5qc1wiKTtcbmNvbnN0IG11bHRpcGFydFBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvbXVsdGlwYXJ0UG9saWN5LmpzXCIpO1xuY29uc3QgZGVjb21wcmVzc1Jlc3BvbnNlUG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9wb2xpY2llcy9kZWNvbXByZXNzUmVzcG9uc2VQb2xpY3kuanNcIik7XG5jb25zdCBkZWZhdWx0UmV0cnlQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL2RlZmF1bHRSZXRyeVBvbGljeS5qc1wiKTtcbmNvbnN0IGZvcm1EYXRhUG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9wb2xpY2llcy9mb3JtRGF0YVBvbGljeS5qc1wiKTtcbmNvbnN0IGNvcmVfdXRpbF8xID0gcmVxdWlyZShcIkBhenVyZS9jb3JlLXV0aWxcIik7XG5jb25zdCBwcm94eVBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvcHJveHlQb2xpY3kuanNcIik7XG5jb25zdCBzZXRDbGllbnRSZXF1ZXN0SWRQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL3NldENsaWVudFJlcXVlc3RJZFBvbGljeS5qc1wiKTtcbmNvbnN0IHRsc1BvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvdGxzUG9saWN5LmpzXCIpO1xuY29uc3QgdHJhY2luZ1BvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvdHJhY2luZ1BvbGljeS5qc1wiKTtcbi8qKlxuICogQ3JlYXRlIGEgbmV3IHBpcGVsaW5lIHdpdGggYSBkZWZhdWx0IHNldCBvZiBjdXN0b21pemFibGUgcG9saWNpZXMuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gY29uZmlndXJlIGEgY3VzdG9tIHBpcGVsaW5lLlxuICovXG5mdW5jdGlvbiBjcmVhdGVQaXBlbGluZUZyb21PcHRpb25zKG9wdGlvbnMpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3QgcGlwZWxpbmUgPSAoMCwgcGlwZWxpbmVfanNfMS5jcmVhdGVFbXB0eVBpcGVsaW5lKSgpO1xuICAgIGlmIChjb3JlX3V0aWxfMS5pc05vZGVMaWtlKSB7XG4gICAgICAgIGlmIChvcHRpb25zLnRsc09wdGlvbnMpIHtcbiAgICAgICAgICAgIHBpcGVsaW5lLmFkZFBvbGljeSgoMCwgdGxzUG9saWN5X2pzXzEudGxzUG9saWN5KShvcHRpb25zLnRsc09wdGlvbnMpKTtcbiAgICAgICAgfVxuICAgICAgICBwaXBlbGluZS5hZGRQb2xpY3koKDAsIHByb3h5UG9saWN5X2pzXzEucHJveHlQb2xpY3kpKG9wdGlvbnMucHJveHlPcHRpb25zKSk7XG4gICAgICAgIHBpcGVsaW5lLmFkZFBvbGljeSgoMCwgZGVjb21wcmVzc1Jlc3BvbnNlUG9saWN5X2pzXzEuZGVjb21wcmVzc1Jlc3BvbnNlUG9saWN5KSgpKTtcbiAgICB9XG4gICAgcGlwZWxpbmUuYWRkUG9saWN5KCgwLCBmb3JtRGF0YVBvbGljeV9qc18xLmZvcm1EYXRhUG9saWN5KSgpLCB7IGJlZm9yZVBvbGljaWVzOiBbbXVsdGlwYXJ0UG9saWN5X2pzXzEubXVsdGlwYXJ0UG9saWN5TmFtZV0gfSk7XG4gICAgcGlwZWxpbmUuYWRkUG9saWN5KCgwLCB1c2VyQWdlbnRQb2xpY3lfanNfMS51c2VyQWdlbnRQb2xpY3kpKG9wdGlvbnMudXNlckFnZW50T3B0aW9ucykpO1xuICAgIHBpcGVsaW5lLmFkZFBvbGljeSgoMCwgc2V0Q2xpZW50UmVxdWVzdElkUG9saWN5X2pzXzEuc2V0Q2xpZW50UmVxdWVzdElkUG9saWN5KSgoX2EgPSBvcHRpb25zLnRlbGVtZXRyeU9wdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jbGllbnRSZXF1ZXN0SWRIZWFkZXJOYW1lKSk7XG4gICAgLy8gVGhlIG11bHRpcGFydCBwb2xpY3kgaXMgYWRkZWQgYWZ0ZXIgcG9saWNpZXMgd2l0aCBubyBwaGFzZSwgc28gdGhhdFxuICAgIC8vIHBvbGljaWVzIGNhbiBiZSBhZGRlZCBiZXR3ZWVuIGl0IGFuZCBmb3JtRGF0YVBvbGljeSB0byBtb2RpZnlcbiAgICAvLyBwcm9wZXJ0aWVzIChlLmcuLCBtYWtpbmcgdGhlIGJvdW5kYXJ5IGNvbnN0YW50IGluIHJlY29yZGVkIHRlc3RzKS5cbiAgICBwaXBlbGluZS5hZGRQb2xpY3koKDAsIG11bHRpcGFydFBvbGljeV9qc18xLm11bHRpcGFydFBvbGljeSkoKSwgeyBhZnRlclBoYXNlOiBcIkRlc2VyaWFsaXplXCIgfSk7XG4gICAgcGlwZWxpbmUuYWRkUG9saWN5KCgwLCBkZWZhdWx0UmV0cnlQb2xpY3lfanNfMS5kZWZhdWx0UmV0cnlQb2xpY3kpKG9wdGlvbnMucmV0cnlPcHRpb25zKSwgeyBwaGFzZTogXCJSZXRyeVwiIH0pO1xuICAgIHBpcGVsaW5lLmFkZFBvbGljeSgoMCwgdHJhY2luZ1BvbGljeV9qc18xLnRyYWNpbmdQb2xpY3kpKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy51c2VyQWdlbnRPcHRpb25zKSwgb3B0aW9ucy5sb2dnaW5nT3B0aW9ucykpLCB7XG4gICAgICAgIGFmdGVyUGhhc2U6IFwiUmV0cnlcIixcbiAgICB9KTtcbiAgICBpZiAoY29yZV91dGlsXzEuaXNOb2RlTGlrZSkge1xuICAgICAgICAvLyBCb3RoIFhIUiBhbmQgRmV0Y2ggZXhwZWN0IHRvIGhhbmRsZSByZWRpcmVjdHMgYXV0b21hdGljYWxseSxcbiAgICAgICAgLy8gc28gb25seSBpbmNsdWRlIHRoaXMgcG9saWN5IHdoZW4gd2UncmUgaW4gTm9kZS5cbiAgICAgICAgcGlwZWxpbmUuYWRkUG9saWN5KCgwLCByZWRpcmVjdFBvbGljeV9qc18xLnJlZGlyZWN0UG9saWN5KShvcHRpb25zLnJlZGlyZWN0T3B0aW9ucyksIHsgYWZ0ZXJQaGFzZTogXCJSZXRyeVwiIH0pO1xuICAgIH1cbiAgICBwaXBlbGluZS5hZGRQb2xpY3koKDAsIGxvZ1BvbGljeV9qc18xLmxvZ1BvbGljeSkob3B0aW9ucy5sb2dnaW5nT3B0aW9ucyksIHsgYWZ0ZXJQaGFzZTogXCJTaWduXCIgfSk7XG4gICAgcmV0dXJuIHBpcGVsaW5lO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y3JlYXRlUGlwZWxpbmVGcm9tT3B0aW9ucy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldEJvZHlMZW5ndGggPSBnZXRCb2R5TGVuZ3RoO1xuZXhwb3J0cy5jcmVhdGVOb2RlSHR0cENsaWVudCA9IGNyZWF0ZU5vZGVIdHRwQ2xpZW50O1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbmNvbnN0IGh0dHAgPSB0c2xpYl8xLl9faW1wb3J0U3RhcihyZXF1aXJlKFwibm9kZTpodHRwXCIpKTtcbmNvbnN0IGh0dHBzID0gdHNsaWJfMS5fX2ltcG9ydFN0YXIocmVxdWlyZShcIm5vZGU6aHR0cHNcIikpO1xuY29uc3QgemxpYiA9IHRzbGliXzEuX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJub2RlOnpsaWJcIikpO1xuY29uc3Qgbm9kZV9zdHJlYW1fMSA9IHJlcXVpcmUoXCJub2RlOnN0cmVhbVwiKTtcbmNvbnN0IGFib3J0X2NvbnRyb2xsZXJfMSA9IHJlcXVpcmUoXCJAYXp1cmUvYWJvcnQtY29udHJvbGxlclwiKTtcbmNvbnN0IGh0dHBIZWFkZXJzX2pzXzEgPSByZXF1aXJlKFwiLi9odHRwSGVhZGVycy5qc1wiKTtcbmNvbnN0IHJlc3RFcnJvcl9qc18xID0gcmVxdWlyZShcIi4vcmVzdEVycm9yLmpzXCIpO1xuY29uc3QgbG9nX2pzXzEgPSByZXF1aXJlKFwiLi9sb2cuanNcIik7XG5jb25zdCBERUZBVUxUX1RMU19TRVRUSU5HUyA9IHt9O1xuZnVuY3Rpb24gaXNSZWFkYWJsZVN0cmVhbShib2R5KSB7XG4gICAgcmV0dXJuIGJvZHkgJiYgdHlwZW9mIGJvZHkucGlwZSA9PT0gXCJmdW5jdGlvblwiO1xufVxuZnVuY3Rpb24gaXNTdHJlYW1Db21wbGV0ZShzdHJlYW0pIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgY29uc3QgaGFuZGxlciA9ICgpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcihcImNsb3NlXCIsIGhhbmRsZXIpO1xuICAgICAgICAgICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKFwiZW5kXCIsIGhhbmRsZXIpO1xuICAgICAgICAgICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKFwiZXJyb3JcIiwgaGFuZGxlcik7XG4gICAgICAgIH07XG4gICAgICAgIHN0cmVhbS5vbihcImNsb3NlXCIsIGhhbmRsZXIpO1xuICAgICAgICBzdHJlYW0ub24oXCJlbmRcIiwgaGFuZGxlcik7XG4gICAgICAgIHN0cmVhbS5vbihcImVycm9yXCIsIGhhbmRsZXIpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gaXNBcnJheUJ1ZmZlcihib2R5KSB7XG4gICAgcmV0dXJuIGJvZHkgJiYgdHlwZW9mIGJvZHkuYnl0ZUxlbmd0aCA9PT0gXCJudW1iZXJcIjtcbn1cbmNsYXNzIFJlcG9ydFRyYW5zZm9ybSBleHRlbmRzIG5vZGVfc3RyZWFtXzEuVHJhbnNmb3JtIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1mdW5jdGlvbi10eXBlXG4gICAgX3RyYW5zZm9ybShjaHVuaywgX2VuY29kaW5nLCBjYWxsYmFjaykge1xuICAgICAgICB0aGlzLnB1c2goY2h1bmspO1xuICAgICAgICB0aGlzLmxvYWRlZEJ5dGVzICs9IGNodW5rLmxlbmd0aDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3NDYWxsYmFjayh7IGxvYWRlZEJ5dGVzOiB0aGlzLmxvYWRlZEJ5dGVzIH0pO1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY2FsbGJhY2soZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3RydWN0b3IocHJvZ3Jlc3NDYWxsYmFjaykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmxvYWRlZEJ5dGVzID0gMDtcbiAgICAgICAgdGhpcy5wcm9ncmVzc0NhbGxiYWNrID0gcHJvZ3Jlc3NDYWxsYmFjaztcbiAgICB9XG59XG4vKipcbiAqIEEgSHR0cENsaWVudCBpbXBsZW1lbnRhdGlvbiB0aGF0IHVzZXMgTm9kZSdzIFwiaHR0cHNcIiBtb2R1bGUgdG8gc2VuZCBIVFRQUyByZXF1ZXN0cy5cbiAqIEBpbnRlcm5hbFxuICovXG5jbGFzcyBOb2RlSHR0cENsaWVudCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuY2FjaGVkSHR0cHNBZ2VudHMgPSBuZXcgV2Vha01hcCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBNYWtlcyBhIHJlcXVlc3Qgb3ZlciBhbiB1bmRlcmx5aW5nIHRyYW5zcG9ydCBsYXllciBhbmQgcmV0dXJucyB0aGUgcmVzcG9uc2UuXG4gICAgICogQHBhcmFtIHJlcXVlc3QgLSBUaGUgcmVxdWVzdCB0byBiZSBtYWRlLlxuICAgICAqL1xuICAgIGFzeW5jIHNlbmRSZXF1ZXN0KHJlcXVlc3QpIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgIGNvbnN0IGFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICAgICAgbGV0IGFib3J0TGlzdGVuZXI7XG4gICAgICAgIGlmIChyZXF1ZXN0LmFib3J0U2lnbmFsKSB7XG4gICAgICAgICAgICBpZiAocmVxdWVzdC5hYm9ydFNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGFib3J0X2NvbnRyb2xsZXJfMS5BYm9ydEVycm9yKFwiVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhYm9ydExpc3RlbmVyID0gKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiYWJvcnRcIikge1xuICAgICAgICAgICAgICAgICAgICBhYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVxdWVzdC5hYm9ydFNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgYWJvcnRMaXN0ZW5lcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlcXVlc3QudGltZW91dCA+IDApIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGFib3J0Q29udHJvbGxlci5hYm9ydCgpO1xuICAgICAgICAgICAgfSwgcmVxdWVzdC50aW1lb3V0KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhY2NlcHRFbmNvZGluZyA9IHJlcXVlc3QuaGVhZGVycy5nZXQoXCJBY2NlcHQtRW5jb2RpbmdcIik7XG4gICAgICAgIGNvbnN0IHNob3VsZERlY29tcHJlc3MgPSAoYWNjZXB0RW5jb2RpbmcgPT09IG51bGwgfHwgYWNjZXB0RW5jb2RpbmcgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGFjY2VwdEVuY29kaW5nLmluY2x1ZGVzKFwiZ3ppcFwiKSkgfHwgKGFjY2VwdEVuY29kaW5nID09PSBudWxsIHx8IGFjY2VwdEVuY29kaW5nID09PSB2b2lkIDAgPyB2b2lkIDAgOiBhY2NlcHRFbmNvZGluZy5pbmNsdWRlcyhcImRlZmxhdGVcIikpO1xuICAgICAgICBsZXQgYm9keSA9IHR5cGVvZiByZXF1ZXN0LmJvZHkgPT09IFwiZnVuY3Rpb25cIiA/IHJlcXVlc3QuYm9keSgpIDogcmVxdWVzdC5ib2R5O1xuICAgICAgICBpZiAoYm9keSAmJiAhcmVxdWVzdC5oZWFkZXJzLmhhcyhcIkNvbnRlbnQtTGVuZ3RoXCIpKSB7XG4gICAgICAgICAgICBjb25zdCBib2R5TGVuZ3RoID0gZ2V0Qm9keUxlbmd0aChib2R5KTtcbiAgICAgICAgICAgIGlmIChib2R5TGVuZ3RoICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdC5oZWFkZXJzLnNldChcIkNvbnRlbnQtTGVuZ3RoXCIsIGJvZHlMZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZVN0cmVhbTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChib2R5ICYmIHJlcXVlc3Qub25VcGxvYWRQcm9ncmVzcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9uVXBsb2FkUHJvZ3Jlc3MgPSByZXF1ZXN0Lm9uVXBsb2FkUHJvZ3Jlc3M7XG4gICAgICAgICAgICAgICAgY29uc3QgdXBsb2FkUmVwb3J0U3RyZWFtID0gbmV3IFJlcG9ydFRyYW5zZm9ybShvblVwbG9hZFByb2dyZXNzKTtcbiAgICAgICAgICAgICAgICB1cGxvYWRSZXBvcnRTdHJlYW0ub24oXCJlcnJvclwiLCAoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsb2dfanNfMS5sb2dnZXIuZXJyb3IoXCJFcnJvciBpbiB1cGxvYWQgcHJvZ3Jlc3NcIiwgZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKGlzUmVhZGFibGVTdHJlYW0oYm9keSkpIHtcbiAgICAgICAgICAgICAgICAgICAgYm9keS5waXBlKHVwbG9hZFJlcG9ydFN0cmVhbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB1cGxvYWRSZXBvcnRTdHJlYW0uZW5kKGJvZHkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBib2R5ID0gdXBsb2FkUmVwb3J0U3RyZWFtO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5tYWtlUmVxdWVzdChyZXF1ZXN0LCBhYm9ydENvbnRyb2xsZXIsIGJvZHkpO1xuICAgICAgICAgICAgY29uc3QgaGVhZGVycyA9IGdldFJlc3BvbnNlSGVhZGVycyhyZXMpO1xuICAgICAgICAgICAgY29uc3Qgc3RhdHVzID0gKF9hID0gcmVzLnN0YXR1c0NvZGUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IDA7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IHtcbiAgICAgICAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICAgICAgICByZXF1ZXN0LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vIFJlc3BvbnNlcyB0byBIRUFEIG11c3Qgbm90IGhhdmUgYSBib2R5LlxuICAgICAgICAgICAgLy8gSWYgdGhleSBkbyByZXR1cm4gYSBib2R5LCB0aGF0IGJvZHkgbXVzdCBiZSBpZ25vcmVkLlxuICAgICAgICAgICAgaWYgKHJlcXVlc3QubWV0aG9kID09PSBcIkhFQURcIikge1xuICAgICAgICAgICAgICAgIC8vIGNhbGwgcmVzdW1lKCkgYW5kIG5vdCBkZXN0cm95KCkgdG8gYXZvaWQgY2xvc2luZyB0aGUgc29ja2V0XG4gICAgICAgICAgICAgICAgLy8gYW5kIGxvc2luZyBrZWVwIGFsaXZlXG4gICAgICAgICAgICAgICAgcmVzLnJlc3VtZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3BvbnNlU3RyZWFtID0gc2hvdWxkRGVjb21wcmVzcyA/IGdldERlY29kZWRSZXNwb25zZVN0cmVhbShyZXMsIGhlYWRlcnMpIDogcmVzO1xuICAgICAgICAgICAgY29uc3Qgb25Eb3dubG9hZFByb2dyZXNzID0gcmVxdWVzdC5vbkRvd25sb2FkUHJvZ3Jlc3M7XG4gICAgICAgICAgICBpZiAob25Eb3dubG9hZFByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZG93bmxvYWRSZXBvcnRTdHJlYW0gPSBuZXcgUmVwb3J0VHJhbnNmb3JtKG9uRG93bmxvYWRQcm9ncmVzcyk7XG4gICAgICAgICAgICAgICAgZG93bmxvYWRSZXBvcnRTdHJlYW0ub24oXCJlcnJvclwiLCAoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsb2dfanNfMS5sb2dnZXIuZXJyb3IoXCJFcnJvciBpbiBkb3dubG9hZCBwcm9ncmVzc1wiLCBlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXNwb25zZVN0cmVhbS5waXBlKGRvd25sb2FkUmVwb3J0U3RyZWFtKTtcbiAgICAgICAgICAgICAgICByZXNwb25zZVN0cmVhbSA9IGRvd25sb2FkUmVwb3J0U3RyZWFtO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgLy8gVmFsdWUgb2YgUE9TSVRJVkVfSU5GSU5JVFkgaW4gc3RyZWFtUmVzcG9uc2VTdGF0dXNDb2RlcyBpcyBjb25zaWRlcmVkIGFzIGFueSBzdGF0dXMgY29kZVxuICAgICAgICAgICAgKChfYiA9IHJlcXVlc3Quc3RyZWFtUmVzcG9uc2VTdGF0dXNDb2RlcykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmhhcyhOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpKSB8fFxuICAgICAgICAgICAgICAgICgoX2MgPSByZXF1ZXN0LnN0cmVhbVJlc3BvbnNlU3RhdHVzQ29kZXMpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5oYXMocmVzcG9uc2Uuc3RhdHVzKSkpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZS5yZWFkYWJsZVN0cmVhbUJvZHkgPSByZXNwb25zZVN0cmVhbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlLmJvZHlBc1RleHQgPSBhd2FpdCBzdHJlYW1Ub1RleHQocmVzcG9uc2VTdHJlYW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgLy8gY2xlYW4gdXAgZXZlbnQgbGlzdGVuZXJcbiAgICAgICAgICAgIGlmIChyZXF1ZXN0LmFib3J0U2lnbmFsICYmIGFib3J0TGlzdGVuZXIpIHtcbiAgICAgICAgICAgICAgICBsZXQgdXBsb2FkU3RyZWFtRG9uZSA9IFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIGlmIChpc1JlYWRhYmxlU3RyZWFtKGJvZHkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHVwbG9hZFN0cmVhbURvbmUgPSBpc1N0cmVhbUNvbXBsZXRlKGJvZHkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgZG93bmxvYWRTdHJlYW1Eb25lID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgaWYgKGlzUmVhZGFibGVTdHJlYW0ocmVzcG9uc2VTdHJlYW0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvd25sb2FkU3RyZWFtRG9uZSA9IGlzU3RyZWFtQ29tcGxldGUocmVzcG9uc2VTdHJlYW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBQcm9taXNlLmFsbChbdXBsb2FkU3RyZWFtRG9uZSwgZG93bmxvYWRTdHJlYW1Eb25lXSlcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcm9taXNlL2Fsd2F5cy1yZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGFib3J0TGlzdGVuZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIChfYSA9IHJlcXVlc3QuYWJvcnRTaWduYWwpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgYWJvcnRMaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbG9nX2pzXzEubG9nZ2VyLndhcm5pbmcoXCJFcnJvciB3aGVuIGNsZWFuaW5nIHVwIGFib3J0TGlzdGVuZXIgb24gaHR0cFJlcXVlc3RcIiwgZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgbWFrZVJlcXVlc3QocmVxdWVzdCwgYWJvcnRDb250cm9sbGVyLCBib2R5KSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgdXJsID0gbmV3IFVSTChyZXF1ZXN0LnVybCk7XG4gICAgICAgIGNvbnN0IGlzSW5zZWN1cmUgPSB1cmwucHJvdG9jb2wgIT09IFwiaHR0cHM6XCI7XG4gICAgICAgIGlmIChpc0luc2VjdXJlICYmICFyZXF1ZXN0LmFsbG93SW5zZWN1cmVDb25uZWN0aW9uKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjb25uZWN0IHRvICR7cmVxdWVzdC51cmx9IHdoaWxlIGFsbG93SW5zZWN1cmVDb25uZWN0aW9uIGlzIGZhbHNlLmApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFnZW50ID0gKF9hID0gcmVxdWVzdC5hZ2VudCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdGhpcy5nZXRPckNyZWF0ZUFnZW50KHJlcXVlc3QsIGlzSW5zZWN1cmUpO1xuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgYWdlbnQsXG4gICAgICAgICAgICBob3N0bmFtZTogdXJsLmhvc3RuYW1lLFxuICAgICAgICAgICAgcGF0aDogYCR7dXJsLnBhdGhuYW1lfSR7dXJsLnNlYXJjaH1gLFxuICAgICAgICAgICAgcG9ydDogdXJsLnBvcnQsXG4gICAgICAgICAgICBtZXRob2Q6IHJlcXVlc3QubWV0aG9kLFxuICAgICAgICAgICAgaGVhZGVyczogcmVxdWVzdC5oZWFkZXJzLnRvSlNPTih7IHByZXNlcnZlQ2FzZTogdHJ1ZSB9KSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlcSA9IGlzSW5zZWN1cmUgPyBodHRwLnJlcXVlc3Qob3B0aW9ucywgcmVzb2x2ZSkgOiBodHRwcy5yZXF1ZXN0KG9wdGlvbnMsIHJlc29sdmUpO1xuICAgICAgICAgICAgcmVxLm9uY2UoXCJlcnJvclwiLCAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgcmVzdEVycm9yX2pzXzEuUmVzdEVycm9yKGVyci5tZXNzYWdlLCB7IGNvZGU6IChfYSA9IGVyci5jb2RlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiByZXN0RXJyb3JfanNfMS5SZXN0RXJyb3IuUkVRVUVTVF9TRU5EX0VSUk9SLCByZXF1ZXN0IH0pKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYWJvcnRDb250cm9sbGVyLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFib3J0RXJyb3IgPSBuZXcgYWJvcnRfY29udHJvbGxlcl8xLkFib3J0RXJyb3IoXCJUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLlwiKTtcbiAgICAgICAgICAgICAgICByZXEuZGVzdHJveShhYm9ydEVycm9yKTtcbiAgICAgICAgICAgICAgICByZWplY3QoYWJvcnRFcnJvcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChib2R5ICYmIGlzUmVhZGFibGVTdHJlYW0oYm9keSkpIHtcbiAgICAgICAgICAgICAgICBib2R5LnBpcGUocmVxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGJvZHkpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGJvZHkgPT09IFwic3RyaW5nXCIgfHwgQnVmZmVyLmlzQnVmZmVyKGJvZHkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcS5lbmQoYm9keSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzQXJyYXlCdWZmZXIoYm9keSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVxLmVuZChBcnJheUJ1ZmZlci5pc1ZpZXcoYm9keSkgPyBCdWZmZXIuZnJvbShib2R5LmJ1ZmZlcikgOiBCdWZmZXIuZnJvbShib2R5KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsb2dfanNfMS5sb2dnZXIuZXJyb3IoXCJVbnJlY29nbml6ZWQgYm9keSB0eXBlXCIsIGJvZHkpO1xuICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IHJlc3RFcnJvcl9qc18xLlJlc3RFcnJvcihcIlVucmVjb2duaXplZCBib2R5IHR5cGVcIikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIHN0cmVhbXMgZG9uJ3QgbGlrZSBcInVuZGVmaW5lZFwiIGJlaW5nIHBhc3NlZCBhcyBkYXRhXG4gICAgICAgICAgICAgICAgcmVxLmVuZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZ2V0T3JDcmVhdGVBZ2VudChyZXF1ZXN0LCBpc0luc2VjdXJlKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgZGlzYWJsZUtlZXBBbGl2ZSA9IHJlcXVlc3QuZGlzYWJsZUtlZXBBbGl2ZTtcbiAgICAgICAgLy8gSGFuZGxlIEluc2VjdXJlIHJlcXVlc3RzIGZpcnN0XG4gICAgICAgIGlmIChpc0luc2VjdXJlKSB7XG4gICAgICAgICAgICBpZiAoZGlzYWJsZUtlZXBBbGl2ZSkge1xuICAgICAgICAgICAgICAgIC8vIGtlZXBBbGl2ZTpmYWxzZSBpcyB0aGUgZGVmYXVsdCBzbyB3ZSBkb24ndCBuZWVkIGEgY3VzdG9tIEFnZW50XG4gICAgICAgICAgICAgICAgcmV0dXJuIGh0dHAuZ2xvYmFsQWdlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuY2FjaGVkSHR0cEFnZW50KSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gY2FjaGVkIGFnZW50IGNyZWF0ZSBhIG5ldyBvbmUgYW5kIGNhY2hlIGl0LlxuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVkSHR0cEFnZW50ID0gbmV3IGh0dHAuQWdlbnQoeyBrZWVwQWxpdmU6IHRydWUgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYWNoZWRIdHRwQWdlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoZGlzYWJsZUtlZXBBbGl2ZSAmJiAhcmVxdWVzdC50bHNTZXR0aW5ncykge1xuICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhlcmUgYXJlIG5vIHRsc1NldHRpbmdzIGFuZCBrZWVwQWxpdmUgaXMgZmFsc2VcbiAgICAgICAgICAgICAgICAvLyB3ZSBkb24ndCBuZWVkIGEgY3VzdG9tIGFnZW50XG4gICAgICAgICAgICAgICAgcmV0dXJuIGh0dHBzLmdsb2JhbEFnZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gV2UgdXNlIHRoZSB0bHNTZXR0aW5ncyB0byBpbmRleCBjYWNoZWQgY2xpZW50c1xuICAgICAgICAgICAgY29uc3QgdGxzU2V0dGluZ3MgPSAoX2EgPSByZXF1ZXN0LnRsc1NldHRpbmdzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBERUZBVUxUX1RMU19TRVRUSU5HUztcbiAgICAgICAgICAgIC8vIEdldCB0aGUgY2FjaGVkIGFnZW50IG9yIGNyZWF0ZSBhIG5ldyBvbmUgd2l0aCB0aGVcbiAgICAgICAgICAgIC8vIHByb3ZpZGVkIHZhbHVlcyBmb3Iga2VlcEFsaXZlIGFuZCB0bHNTZXR0aW5nc1xuICAgICAgICAgICAgbGV0IGFnZW50ID0gdGhpcy5jYWNoZWRIdHRwc0FnZW50cy5nZXQodGxzU2V0dGluZ3MpO1xuICAgICAgICAgICAgaWYgKGFnZW50ICYmIGFnZW50Lm9wdGlvbnMua2VlcEFsaXZlID09PSAhZGlzYWJsZUtlZXBBbGl2ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhZ2VudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxvZ19qc18xLmxvZ2dlci5pbmZvKFwiTm8gY2FjaGVkIFRMUyBBZ2VudCBleGlzdCwgY3JlYXRpbmcgYSBuZXcgQWdlbnRcIik7XG4gICAgICAgICAgICBhZ2VudCA9IG5ldyBodHRwcy5BZ2VudChPYmplY3QuYXNzaWduKHsgXG4gICAgICAgICAgICAgICAgLy8ga2VlcEFsaXZlIGlzIHRydWUgaWYgZGlzYWJsZUtlZXBBbGl2ZSBpcyBmYWxzZS5cbiAgICAgICAgICAgICAgICBrZWVwQWxpdmU6ICFkaXNhYmxlS2VlcEFsaXZlIH0sIHRsc1NldHRpbmdzKSk7XG4gICAgICAgICAgICB0aGlzLmNhY2hlZEh0dHBzQWdlbnRzLnNldCh0bHNTZXR0aW5ncywgYWdlbnQpO1xuICAgICAgICAgICAgcmV0dXJuIGFnZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0UmVzcG9uc2VIZWFkZXJzKHJlcykge1xuICAgIGNvbnN0IGhlYWRlcnMgPSAoMCwgaHR0cEhlYWRlcnNfanNfMS5jcmVhdGVIdHRwSGVhZGVycykoKTtcbiAgICBmb3IgKGNvbnN0IGhlYWRlciBvZiBPYmplY3Qua2V5cyhyZXMuaGVhZGVycykpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSByZXMuaGVhZGVyc1toZWFkZXJdO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgaGVhZGVycy5zZXQoaGVhZGVyLCB2YWx1ZVswXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIGhlYWRlcnMuc2V0KGhlYWRlciwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBoZWFkZXJzO1xufVxuZnVuY3Rpb24gZ2V0RGVjb2RlZFJlc3BvbnNlU3RyZWFtKHN0cmVhbSwgaGVhZGVycykge1xuICAgIGNvbnN0IGNvbnRlbnRFbmNvZGluZyA9IGhlYWRlcnMuZ2V0KFwiQ29udGVudC1FbmNvZGluZ1wiKTtcbiAgICBpZiAoY29udGVudEVuY29kaW5nID09PSBcImd6aXBcIikge1xuICAgICAgICBjb25zdCB1bnppcCA9IHpsaWIuY3JlYXRlR3VuemlwKCk7XG4gICAgICAgIHN0cmVhbS5waXBlKHVuemlwKTtcbiAgICAgICAgcmV0dXJuIHVuemlwO1xuICAgIH1cbiAgICBlbHNlIGlmIChjb250ZW50RW5jb2RpbmcgPT09IFwiZGVmbGF0ZVwiKSB7XG4gICAgICAgIGNvbnN0IGluZmxhdGUgPSB6bGliLmNyZWF0ZUluZmxhdGUoKTtcbiAgICAgICAgc3RyZWFtLnBpcGUoaW5mbGF0ZSk7XG4gICAgICAgIHJldHVybiBpbmZsYXRlO1xuICAgIH1cbiAgICByZXR1cm4gc3RyZWFtO1xufVxuZnVuY3Rpb24gc3RyZWFtVG9UZXh0KHN0cmVhbSkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IFtdO1xuICAgICAgICBzdHJlYW0ub24oXCJkYXRhXCIsIChjaHVuaykgPT4ge1xuICAgICAgICAgICAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihjaHVuaykpIHtcbiAgICAgICAgICAgICAgICBidWZmZXIucHVzaChjaHVuayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBidWZmZXIucHVzaChCdWZmZXIuZnJvbShjaHVuaykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgc3RyZWFtLm9uKFwiZW5kXCIsICgpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUoQnVmZmVyLmNvbmNhdChidWZmZXIpLnRvU3RyaW5nKFwidXRmOFwiKSk7XG4gICAgICAgIH0pO1xuICAgICAgICBzdHJlYW0ub24oXCJlcnJvclwiLCAoZSkgPT4ge1xuICAgICAgICAgICAgaWYgKGUgJiYgKGUgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZS5uYW1lKSA9PT0gXCJBYm9ydEVycm9yXCIpIHtcbiAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IHJlc3RFcnJvcl9qc18xLlJlc3RFcnJvcihgRXJyb3IgcmVhZGluZyByZXNwb25zZSBhcyB0ZXh0OiAke2UubWVzc2FnZX1gLCB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IHJlc3RFcnJvcl9qc18xLlJlc3RFcnJvci5QQVJTRV9FUlJPUixcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gZ2V0Qm9keUxlbmd0aChib2R5KSB7XG4gICAgaWYgKCFib2R5KSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICBlbHNlIGlmIChCdWZmZXIuaXNCdWZmZXIoYm9keSkpIHtcbiAgICAgICAgcmV0dXJuIGJvZHkubGVuZ3RoO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc1JlYWRhYmxlU3RyZWFtKGJvZHkpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc0FycmF5QnVmZmVyKGJvZHkpKSB7XG4gICAgICAgIHJldHVybiBib2R5LmJ5dGVMZW5ndGg7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBib2R5ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShib2R5KS5sZW5ndGg7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59XG4vKipcbiAqIENyZWF0ZSBhIG5ldyBIdHRwQ2xpZW50IGluc3RhbmNlIGZvciB0aGUgTm9kZUpTIGVudmlyb25tZW50LlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZU5vZGVIdHRwQ2xpZW50KCkge1xuICAgIHJldHVybiBuZXcgTm9kZUh0dHBDbGllbnQoKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW5vZGVIdHRwQ2xpZW50LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlRGVmYXVsdEh0dHBDbGllbnQgPSBjcmVhdGVEZWZhdWx0SHR0cENsaWVudDtcbmNvbnN0IG5vZGVIdHRwQ2xpZW50X2pzXzEgPSByZXF1aXJlKFwiLi9ub2RlSHR0cENsaWVudC5qc1wiKTtcbi8qKlxuICogQ3JlYXRlIHRoZSBjb3JyZWN0IEh0dHBDbGllbnQgZm9yIHRoZSBjdXJyZW50IGVudmlyb25tZW50LlxuICovXG5mdW5jdGlvbiBjcmVhdGVEZWZhdWx0SHR0cENsaWVudCgpIHtcbiAgICByZXR1cm4gKDAsIG5vZGVIdHRwQ2xpZW50X2pzXzEuY3JlYXRlTm9kZUh0dHBDbGllbnQpKCk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZWZhdWx0SHR0cENsaWVudC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNyZWF0ZVBpcGVsaW5lUmVxdWVzdCA9IGNyZWF0ZVBpcGVsaW5lUmVxdWVzdDtcbmNvbnN0IGh0dHBIZWFkZXJzX2pzXzEgPSByZXF1aXJlKFwiLi9odHRwSGVhZGVycy5qc1wiKTtcbmNvbnN0IGNvcmVfdXRpbF8xID0gcmVxdWlyZShcIkBhenVyZS9jb3JlLXV0aWxcIik7XG5jbGFzcyBQaXBlbGluZVJlcXVlc3RJbXBsIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2UsIF9mLCBfZztcbiAgICAgICAgdGhpcy51cmwgPSBvcHRpb25zLnVybDtcbiAgICAgICAgdGhpcy5ib2R5ID0gb3B0aW9ucy5ib2R5O1xuICAgICAgICB0aGlzLmhlYWRlcnMgPSAoX2EgPSBvcHRpb25zLmhlYWRlcnMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICgwLCBodHRwSGVhZGVyc19qc18xLmNyZWF0ZUh0dHBIZWFkZXJzKSgpO1xuICAgICAgICB0aGlzLm1ldGhvZCA9IChfYiA9IG9wdGlvbnMubWV0aG9kKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBcIkdFVFwiO1xuICAgICAgICB0aGlzLnRpbWVvdXQgPSAoX2MgPSBvcHRpb25zLnRpbWVvdXQpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IDA7XG4gICAgICAgIHRoaXMubXVsdGlwYXJ0Qm9keSA9IG9wdGlvbnMubXVsdGlwYXJ0Qm9keTtcbiAgICAgICAgdGhpcy5mb3JtRGF0YSA9IG9wdGlvbnMuZm9ybURhdGE7XG4gICAgICAgIHRoaXMuZGlzYWJsZUtlZXBBbGl2ZSA9IChfZCA9IG9wdGlvbnMuZGlzYWJsZUtlZXBBbGl2ZSkgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDogZmFsc2U7XG4gICAgICAgIHRoaXMucHJveHlTZXR0aW5ncyA9IG9wdGlvbnMucHJveHlTZXR0aW5ncztcbiAgICAgICAgdGhpcy5zdHJlYW1SZXNwb25zZVN0YXR1c0NvZGVzID0gb3B0aW9ucy5zdHJlYW1SZXNwb25zZVN0YXR1c0NvZGVzO1xuICAgICAgICB0aGlzLndpdGhDcmVkZW50aWFscyA9IChfZSA9IG9wdGlvbnMud2l0aENyZWRlbnRpYWxzKSAhPT0gbnVsbCAmJiBfZSAhPT0gdm9pZCAwID8gX2UgOiBmYWxzZTtcbiAgICAgICAgdGhpcy5hYm9ydFNpZ25hbCA9IG9wdGlvbnMuYWJvcnRTaWduYWw7XG4gICAgICAgIHRoaXMudHJhY2luZ09wdGlvbnMgPSBvcHRpb25zLnRyYWNpbmdPcHRpb25zO1xuICAgICAgICB0aGlzLm9uVXBsb2FkUHJvZ3Jlc3MgPSBvcHRpb25zLm9uVXBsb2FkUHJvZ3Jlc3M7XG4gICAgICAgIHRoaXMub25Eb3dubG9hZFByb2dyZXNzID0gb3B0aW9ucy5vbkRvd25sb2FkUHJvZ3Jlc3M7XG4gICAgICAgIHRoaXMucmVxdWVzdElkID0gb3B0aW9ucy5yZXF1ZXN0SWQgfHwgKDAsIGNvcmVfdXRpbF8xLnJhbmRvbVVVSUQpKCk7XG4gICAgICAgIHRoaXMuYWxsb3dJbnNlY3VyZUNvbm5lY3Rpb24gPSAoX2YgPSBvcHRpb25zLmFsbG93SW5zZWN1cmVDb25uZWN0aW9uKSAhPT0gbnVsbCAmJiBfZiAhPT0gdm9pZCAwID8gX2YgOiBmYWxzZTtcbiAgICAgICAgdGhpcy5lbmFibGVCcm93c2VyU3RyZWFtcyA9IChfZyA9IG9wdGlvbnMuZW5hYmxlQnJvd3NlclN0cmVhbXMpICE9PSBudWxsICYmIF9nICE9PSB2b2lkIDAgPyBfZyA6IGZhbHNlO1xuICAgIH1cbn1cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBwaXBlbGluZSByZXF1ZXN0IHdpdGggdGhlIGdpdmVuIG9wdGlvbnMuXG4gKiBUaGlzIG1ldGhvZCBpcyB0byBhbGxvdyBmb3IgdGhlIGVhc3kgc2V0dGluZyBvZiBkZWZhdWx0IHZhbHVlcyBhbmQgbm90IHJlcXVpcmVkLlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyB0byBjcmVhdGUgdGhlIHJlcXVlc3Qgd2l0aC5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlUGlwZWxpbmVSZXF1ZXN0KG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IFBpcGVsaW5lUmVxdWVzdEltcGwob3B0aW9ucyk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1waXBlbGluZVJlcXVlc3QuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5leHBvbmVudGlhbFJldHJ5UG9saWN5TmFtZSA9IHZvaWQgMDtcbmV4cG9ydHMuZXhwb25lbnRpYWxSZXRyeVBvbGljeSA9IGV4cG9uZW50aWFsUmV0cnlQb2xpY3k7XG5jb25zdCBleHBvbmVudGlhbFJldHJ5U3RyYXRlZ3lfanNfMSA9IHJlcXVpcmUoXCIuLi9yZXRyeVN0cmF0ZWdpZXMvZXhwb25lbnRpYWxSZXRyeVN0cmF0ZWd5LmpzXCIpO1xuY29uc3QgcmV0cnlQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3JldHJ5UG9saWN5LmpzXCIpO1xuY29uc3QgY29uc3RhbnRzX2pzXzEgPSByZXF1aXJlKFwiLi4vY29uc3RhbnRzLmpzXCIpO1xuLyoqXG4gKiBUaGUgcHJvZ3JhbW1hdGljIGlkZW50aWZpZXIgb2YgdGhlIGV4cG9uZW50aWFsUmV0cnlQb2xpY3kuXG4gKi9cbmV4cG9ydHMuZXhwb25lbnRpYWxSZXRyeVBvbGljeU5hbWUgPSBcImV4cG9uZW50aWFsUmV0cnlQb2xpY3lcIjtcbi8qKlxuICogQSBwb2xpY3kgdGhhdCBhdHRlbXB0cyB0byByZXRyeSByZXF1ZXN0cyB3aGlsZSBpbnRyb2R1Y2luZyBhbiBleHBvbmVudGlhbGx5IGluY3JlYXNpbmcgZGVsYXkuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdGhhdCBjb25maWd1cmUgcmV0cnkgbG9naWMuXG4gKi9cbmZ1bmN0aW9uIGV4cG9uZW50aWFsUmV0cnlQb2xpY3kob3B0aW9ucyA9IHt9KSB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiAoMCwgcmV0cnlQb2xpY3lfanNfMS5yZXRyeVBvbGljeSkoW1xuICAgICAgICAoMCwgZXhwb25lbnRpYWxSZXRyeVN0cmF0ZWd5X2pzXzEuZXhwb25lbnRpYWxSZXRyeVN0cmF0ZWd5KShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMpLCB7IGlnbm9yZVN5c3RlbUVycm9yczogdHJ1ZSB9KSksXG4gICAgXSwge1xuICAgICAgICBtYXhSZXRyaWVzOiAoX2EgPSBvcHRpb25zLm1heFJldHJpZXMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGNvbnN0YW50c19qc18xLkRFRkFVTFRfUkVUUllfUE9MSUNZX0NPVU5ULFxuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXhwb25lbnRpYWxSZXRyeVBvbGljeS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnN5c3RlbUVycm9yUmV0cnlQb2xpY3lOYW1lID0gdm9pZCAwO1xuZXhwb3J0cy5zeXN0ZW1FcnJvclJldHJ5UG9saWN5ID0gc3lzdGVtRXJyb3JSZXRyeVBvbGljeTtcbmNvbnN0IGV4cG9uZW50aWFsUmV0cnlTdHJhdGVneV9qc18xID0gcmVxdWlyZShcIi4uL3JldHJ5U3RyYXRlZ2llcy9leHBvbmVudGlhbFJldHJ5U3RyYXRlZ3kuanNcIik7XG5jb25zdCByZXRyeVBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcmV0cnlQb2xpY3kuanNcIik7XG5jb25zdCBjb25zdGFudHNfanNfMSA9IHJlcXVpcmUoXCIuLi9jb25zdGFudHMuanNcIik7XG4vKipcbiAqIE5hbWUgb2YgdGhlIHtAbGluayBzeXN0ZW1FcnJvclJldHJ5UG9saWN5fVxuICovXG5leHBvcnRzLnN5c3RlbUVycm9yUmV0cnlQb2xpY3lOYW1lID0gXCJzeXN0ZW1FcnJvclJldHJ5UG9saWN5XCI7XG4vKipcbiAqIEEgcmV0cnkgcG9saWN5IHRoYXQgc3BlY2lmaWNhbGx5IHNlZWtzIHRvIGhhbmRsZSBlcnJvcnMgaW4gdGhlXG4gKiB1bmRlcmx5aW5nIHRyYW5zcG9ydCBsYXllciAoZS5nLiBETlMgbG9va3VwIGZhaWx1cmVzKSByYXRoZXIgdGhhblxuICogcmV0cnlhYmxlIGVycm9yIGNvZGVzIGZyb20gdGhlIHNlcnZlciBpdHNlbGYuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdGhhdCBjdXN0b21pemUgdGhlIHBvbGljeS5cbiAqL1xuZnVuY3Rpb24gc3lzdGVtRXJyb3JSZXRyeVBvbGljeShvcHRpb25zID0ge30pIHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogZXhwb3J0cy5zeXN0ZW1FcnJvclJldHJ5UG9saWN5TmFtZSxcbiAgICAgICAgc2VuZFJlcXVlc3Q6ICgwLCByZXRyeVBvbGljeV9qc18xLnJldHJ5UG9saWN5KShbXG4gICAgICAgICAgICAoMCwgZXhwb25lbnRpYWxSZXRyeVN0cmF0ZWd5X2pzXzEuZXhwb25lbnRpYWxSZXRyeVN0cmF0ZWd5KShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMpLCB7IGlnbm9yZUh0dHBTdGF0dXNDb2RlczogdHJ1ZSB9KSksXG4gICAgICAgIF0sIHtcbiAgICAgICAgICAgIG1heFJldHJpZXM6IChfYSA9IG9wdGlvbnMubWF4UmV0cmllcykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogY29uc3RhbnRzX2pzXzEuREVGQVVMVF9SRVRSWV9QT0xJQ1lfQ09VTlQsXG4gICAgICAgIH0pLnNlbmRSZXF1ZXN0LFxuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zeXN0ZW1FcnJvclJldHJ5UG9saWN5LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudGhyb3R0bGluZ1JldHJ5UG9saWN5TmFtZSA9IHZvaWQgMDtcbmV4cG9ydHMudGhyb3R0bGluZ1JldHJ5UG9saWN5ID0gdGhyb3R0bGluZ1JldHJ5UG9saWN5O1xuY29uc3QgdGhyb3R0bGluZ1JldHJ5U3RyYXRlZ3lfanNfMSA9IHJlcXVpcmUoXCIuLi9yZXRyeVN0cmF0ZWdpZXMvdGhyb3R0bGluZ1JldHJ5U3RyYXRlZ3kuanNcIik7XG5jb25zdCByZXRyeVBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcmV0cnlQb2xpY3kuanNcIik7XG5jb25zdCBjb25zdGFudHNfanNfMSA9IHJlcXVpcmUoXCIuLi9jb25zdGFudHMuanNcIik7XG4vKipcbiAqIE5hbWUgb2YgdGhlIHtAbGluayB0aHJvdHRsaW5nUmV0cnlQb2xpY3l9XG4gKi9cbmV4cG9ydHMudGhyb3R0bGluZ1JldHJ5UG9saWN5TmFtZSA9IFwidGhyb3R0bGluZ1JldHJ5UG9saWN5XCI7XG4vKipcbiAqIEEgcG9saWN5IHRoYXQgcmV0cmllcyB3aGVuIHRoZSBzZXJ2ZXIgc2VuZHMgYSA0MjkgcmVzcG9uc2Ugd2l0aCBhIFJldHJ5LUFmdGVyIGhlYWRlci5cbiAqXG4gKiBUbyBsZWFybiBtb3JlLCBwbGVhc2UgcmVmZXIgdG9cbiAqIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL2F6dXJlL2F6dXJlLXJlc291cmNlLW1hbmFnZXIvcmVzb3VyY2UtbWFuYWdlci1yZXF1ZXN0LWxpbWl0cyxcbiAqIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL2F6dXJlL2F6dXJlLXN1YnNjcmlwdGlvbi1zZXJ2aWNlLWxpbWl0cyBhbmRcbiAqIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL2F6dXJlL3ZpcnR1YWwtbWFjaGluZXMvdHJvdWJsZXNob290aW5nL3Ryb3VibGVzaG9vdGluZy10aHJvdHRsaW5nLWVycm9yc1xuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0aGF0IGNvbmZpZ3VyZSByZXRyeSBsb2dpYy5cbiAqL1xuZnVuY3Rpb24gdGhyb3R0bGluZ1JldHJ5UG9saWN5KG9wdGlvbnMgPSB7fSkge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBleHBvcnRzLnRocm90dGxpbmdSZXRyeVBvbGljeU5hbWUsXG4gICAgICAgIHNlbmRSZXF1ZXN0OiAoMCwgcmV0cnlQb2xpY3lfanNfMS5yZXRyeVBvbGljeSkoWygwLCB0aHJvdHRsaW5nUmV0cnlTdHJhdGVneV9qc18xLnRocm90dGxpbmdSZXRyeVN0cmF0ZWd5KSgpXSwge1xuICAgICAgICAgICAgbWF4UmV0cmllczogKF9hID0gb3B0aW9ucy5tYXhSZXRyaWVzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBjb25zdGFudHNfanNfMS5ERUZBVUxUX1JFVFJZX1BPTElDWV9DT1VOVCxcbiAgICAgICAgfSkuc2VuZFJlcXVlc3QsXG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRocm90dGxpbmdSZXRyeVBvbGljeS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkRFRkFVTFRfQ1lDTEVSX09QVElPTlMgPSB2b2lkIDA7XG5leHBvcnRzLmNyZWF0ZVRva2VuQ3ljbGVyID0gY3JlYXRlVG9rZW5DeWNsZXI7XG5jb25zdCBoZWxwZXJzX2pzXzEgPSByZXF1aXJlKFwiLi9oZWxwZXJzLmpzXCIpO1xuLy8gRGVmYXVsdCBvcHRpb25zIGZvciB0aGUgY3ljbGVyIGlmIG5vbmUgYXJlIHByb3ZpZGVkXG5leHBvcnRzLkRFRkFVTFRfQ1lDTEVSX09QVElPTlMgPSB7XG4gICAgZm9yY2VkUmVmcmVzaFdpbmRvd0luTXM6IDEwMDAsIC8vIEZvcmNlIHdhaXRpbmcgZm9yIGEgcmVmcmVzaCAxcyBiZWZvcmUgdGhlIHRva2VuIGV4cGlyZXNcbiAgICByZXRyeUludGVydmFsSW5NczogMzAwMCwgLy8gQWxsb3cgcmVmcmVzaCBhdHRlbXB0cyBldmVyeSAzc1xuICAgIHJlZnJlc2hXaW5kb3dJbk1zOiAxMDAwICogNjAgKiAyLCAvLyBTdGFydCByZWZyZXNoaW5nIDJtIGJlZm9yZSBleHBpcnlcbn07XG4vKipcbiAqIENvbnZlcnRzIGFuIGFuIHVucmVsaWFibGUgYWNjZXNzIHRva2VuIGdldHRlciAod2hpY2ggbWF5IHJlc29sdmUgd2l0aCBudWxsKVxuICogaW50byBhbiBBY2Nlc3NUb2tlbkdldHRlciBieSByZXRyeWluZyB0aGUgdW5yZWxpYWJsZSBnZXR0ZXIgaW4gYSByZWd1bGFyXG4gKiBpbnRlcnZhbC5cbiAqXG4gKiBAcGFyYW0gZ2V0QWNjZXNzVG9rZW4gLSBBIGZ1bmN0aW9uIHRoYXQgcHJvZHVjZXMgYSBwcm9taXNlIG9mIGFuIGFjY2VzcyB0b2tlbiB0aGF0IG1heSBmYWlsIGJ5IHJldHVybmluZyBudWxsLlxuICogQHBhcmFtIHJldHJ5SW50ZXJ2YWxJbk1zIC0gVGhlIHRpbWUgKGluIG1pbGxpc2Vjb25kcykgdG8gd2FpdCBiZXR3ZWVuIHJldHJ5IGF0dGVtcHRzLlxuICogQHBhcmFtIHJlZnJlc2hUaW1lb3V0IC0gVGhlIHRpbWVzdGFtcCBhZnRlciB3aGljaCB0aGUgcmVmcmVzaCBhdHRlbXB0IHdpbGwgZmFpbCwgdGhyb3dpbmcgYW4gZXhjZXB0aW9uLlxuICogQHJldHVybnMgLSBBIHByb21pc2UgdGhhdCwgaWYgaXQgcmVzb2x2ZXMsIHdpbGwgcmVzb2x2ZSB3aXRoIGFuIGFjY2VzcyB0b2tlbi5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gYmVnaW5SZWZyZXNoKGdldEFjY2Vzc1Rva2VuLCByZXRyeUludGVydmFsSW5NcywgcmVmcmVzaFRpbWVvdXQpIHtcbiAgICAvLyBUaGlzIHdyYXBwZXIgaGFuZGxlcyBleGNlcHRpb25zIGdyYWNlZnVsbHkgYXMgbG9uZyBhcyB3ZSBoYXZlbid0IGV4Y2VlZGVkXG4gICAgLy8gdGhlIHRpbWVvdXQuXG4gICAgYXN5bmMgZnVuY3Rpb24gdHJ5R2V0QWNjZXNzVG9rZW4oKSB7XG4gICAgICAgIGlmIChEYXRlLm5vdygpIDwgcmVmcmVzaFRpbWVvdXQpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGdldEFjY2Vzc1Rva2VuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoX2EpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbmFsVG9rZW4gPSBhd2FpdCBnZXRBY2Nlc3NUb2tlbigpO1xuICAgICAgICAgICAgLy8gVGltZW91dCBpcyB1cCwgc28gdGhyb3cgaWYgaXQncyBzdGlsbCBudWxsXG4gICAgICAgICAgICBpZiAoZmluYWxUb2tlbiA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byByZWZyZXNoIGFjY2VzcyB0b2tlbi5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmluYWxUb2tlbjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBsZXQgdG9rZW4gPSBhd2FpdCB0cnlHZXRBY2Nlc3NUb2tlbigpO1xuICAgIHdoaWxlICh0b2tlbiA9PT0gbnVsbCkge1xuICAgICAgICBhd2FpdCAoMCwgaGVscGVyc19qc18xLmRlbGF5KShyZXRyeUludGVydmFsSW5Ncyk7XG4gICAgICAgIHRva2VuID0gYXdhaXQgdHJ5R2V0QWNjZXNzVG9rZW4oKTtcbiAgICB9XG4gICAgcmV0dXJuIHRva2VuO1xufVxuLyoqXG4gKiBDcmVhdGVzIGEgdG9rZW4gY3ljbGVyIGZyb20gYSBjcmVkZW50aWFsLCBzY29wZXMsIGFuZCBvcHRpb25hbCBzZXR0aW5ncy5cbiAqXG4gKiBBIHRva2VuIGN5Y2xlciByZXByZXNlbnRzIGEgd2F5IHRvIHJlbGlhYmx5IHJldHJpZXZlIGEgdmFsaWQgYWNjZXNzIHRva2VuXG4gKiBmcm9tIGEgVG9rZW5DcmVkZW50aWFsLiBJdCB3aWxsIGhhbmRsZSBpbml0aWFsaXppbmcgdGhlIHRva2VuLCByZWZyZXNoaW5nIGl0XG4gKiB3aGVuIGl0IG5lYXJzIGV4cGlyYXRpb24sIGFuZCBzeW5jaHJvbml6ZXMgcmVmcmVzaCBhdHRlbXB0cyB0byBhdm9pZFxuICogY29uY3VycmVuY3kgaGF6YXJkcy5cbiAqXG4gKiBAcGFyYW0gY3JlZGVudGlhbCAtIHRoZSB1bmRlcmx5aW5nIFRva2VuQ3JlZGVudGlhbCB0aGF0IHByb3ZpZGVzIHRoZSBhY2Nlc3NcbiAqIHRva2VuXG4gKiBAcGFyYW0gdG9rZW5DeWNsZXJPcHRpb25zIC0gb3B0aW9uYWxseSBvdmVycmlkZSBkZWZhdWx0IHNldHRpbmdzIGZvciB0aGUgY3ljbGVyXG4gKlxuICogQHJldHVybnMgLSBhIGZ1bmN0aW9uIHRoYXQgcmVsaWFibHkgcHJvZHVjZXMgYSB2YWxpZCBhY2Nlc3MgdG9rZW5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlVG9rZW5DeWNsZXIoY3JlZGVudGlhbCwgdG9rZW5DeWNsZXJPcHRpb25zKSB7XG4gICAgbGV0IHJlZnJlc2hXb3JrZXIgPSBudWxsO1xuICAgIGxldCB0b2tlbiA9IG51bGw7XG4gICAgbGV0IHRlbmFudElkO1xuICAgIGNvbnN0IG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGV4cG9ydHMuREVGQVVMVF9DWUNMRVJfT1BUSU9OUyksIHRva2VuQ3ljbGVyT3B0aW9ucyk7XG4gICAgLyoqXG4gICAgICogVGhpcyBsaXR0bGUgaG9sZGVyIGRlZmluZXMgc2V2ZXJhbCBwcmVkaWNhdGVzIHRoYXQgd2UgdXNlIHRvIGNvbnN0cnVjdFxuICAgICAqIHRoZSBydWxlcyBvZiByZWZyZXNoaW5nIHRoZSB0b2tlbi5cbiAgICAgKi9cbiAgICBjb25zdCBjeWNsZXIgPSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQcm9kdWNlcyB0cnVlIGlmIGEgcmVmcmVzaCBqb2IgaXMgY3VycmVudGx5IGluIHByb2dyZXNzLlxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0IGlzUmVmcmVzaGluZygpIHtcbiAgICAgICAgICAgIHJldHVybiByZWZyZXNoV29ya2VyICE9PSBudWxsO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogUHJvZHVjZXMgdHJ1ZSBpZiB0aGUgY3ljbGVyIFNIT1VMRCByZWZyZXNoICh3ZSBhcmUgd2l0aGluIHRoZSByZWZyZXNoXG4gICAgICAgICAqIHdpbmRvdyBhbmQgbm90IGFscmVhZHkgcmVmcmVzaGluZylcbiAgICAgICAgICovXG4gICAgICAgIGdldCBzaG91bGRSZWZyZXNoKCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgaWYgKGN5Y2xlci5pc1JlZnJlc2hpbmcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoKHRva2VuID09PSBudWxsIHx8IHRva2VuID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0b2tlbi5yZWZyZXNoQWZ0ZXJUaW1lc3RhbXApICYmIHRva2VuLnJlZnJlc2hBZnRlclRpbWVzdGFtcCA8IERhdGUubm93KCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAoKF9hID0gdG9rZW4gPT09IG51bGwgfHwgdG9rZW4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRva2VuLmV4cGlyZXNPblRpbWVzdGFtcCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogMCkgLSBvcHRpb25zLnJlZnJlc2hXaW5kb3dJbk1zIDwgRGF0ZS5ub3coKTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFByb2R1Y2VzIHRydWUgaWYgdGhlIGN5Y2xlciBNVVNUIHJlZnJlc2ggKG51bGwgb3IgbmVhcmx5LWV4cGlyZWRcbiAgICAgICAgICogdG9rZW4pLlxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0IG11c3RSZWZyZXNoKCkge1xuICAgICAgICAgICAgcmV0dXJuICh0b2tlbiA9PT0gbnVsbCB8fCB0b2tlbi5leHBpcmVzT25UaW1lc3RhbXAgLSBvcHRpb25zLmZvcmNlZFJlZnJlc2hXaW5kb3dJbk1zIDwgRGF0ZS5ub3coKSk7XG4gICAgICAgIH0sXG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBTdGFydHMgYSByZWZyZXNoIGpvYiBvciByZXR1cm5zIHRoZSBleGlzdGluZyBqb2IgaWYgb25lIGlzIGFscmVhZHlcbiAgICAgKiBydW5uaW5nLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJlZnJlc2goc2NvcGVzLCBnZXRUb2tlbk9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoIWN5Y2xlci5pc1JlZnJlc2hpbmcpIHtcbiAgICAgICAgICAgIC8vIFdlIGJpbmQgYHNjb3Blc2AgaGVyZSB0byBhdm9pZCBwYXNzaW5nIGl0IGFyb3VuZCBhIGxvdFxuICAgICAgICAgICAgY29uc3QgdHJ5R2V0QWNjZXNzVG9rZW4gPSAoKSA9PiBjcmVkZW50aWFsLmdldFRva2VuKHNjb3BlcywgZ2V0VG9rZW5PcHRpb25zKTtcbiAgICAgICAgICAgIC8vIFRha2UgYWR2YW50YWdlIG9mIHByb21pc2UgY2hhaW5pbmcgdG8gaW5zZXJ0IGFuIGFzc2lnbm1lbnQgdG8gYHRva2VuYFxuICAgICAgICAgICAgLy8gYmVmb3JlIHRoZSByZWZyZXNoIGNhbiBiZSBjb25zaWRlcmVkIGRvbmUuXG4gICAgICAgICAgICByZWZyZXNoV29ya2VyID0gYmVnaW5SZWZyZXNoKHRyeUdldEFjY2Vzc1Rva2VuLCBvcHRpb25zLnJldHJ5SW50ZXJ2YWxJbk1zLCBcbiAgICAgICAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYSB0b2tlbiwgdGhlbiB3ZSBzaG91bGQgdGltZW91dCBpbW1lZGlhdGVseVxuICAgICAgICAgICAgKF9hID0gdG9rZW4gPT09IG51bGwgfHwgdG9rZW4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRva2VuLmV4cGlyZXNPblRpbWVzdGFtcCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogRGF0ZS5ub3coKSlcbiAgICAgICAgICAgICAgICAudGhlbigoX3Rva2VuKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVmcmVzaFdvcmtlciA9IG51bGw7XG4gICAgICAgICAgICAgICAgdG9rZW4gPSBfdG9rZW47XG4gICAgICAgICAgICAgICAgdGVuYW50SWQgPSBnZXRUb2tlbk9wdGlvbnMudGVuYW50SWQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuY2F0Y2goKHJlYXNvbikgPT4ge1xuICAgICAgICAgICAgICAgIC8vIFdlIGFsc28gc2hvdWxkIHJlc2V0IHRoZSByZWZyZXNoZXIgaWYgd2UgZW50ZXIgYSBmYWlsZWQgc3RhdGUuICBBbGxcbiAgICAgICAgICAgICAgICAvLyBleGlzdGluZyBhd2FpdGVycyB3aWxsIHRocm93LCBidXQgc3Vic2VxdWVudCByZXF1ZXN0cyB3aWxsIHN0YXJ0IGFcbiAgICAgICAgICAgICAgICAvLyBuZXcgcmV0cnkgY2hhaW4uXG4gICAgICAgICAgICAgICAgcmVmcmVzaFdvcmtlciA9IG51bGw7XG4gICAgICAgICAgICAgICAgdG9rZW4gPSBudWxsO1xuICAgICAgICAgICAgICAgIHRlbmFudElkID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHRocm93IHJlYXNvbjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZWZyZXNoV29ya2VyO1xuICAgIH1cbiAgICByZXR1cm4gYXN5bmMgKHNjb3BlcywgdG9rZW5PcHRpb25zKSA9PiB7XG4gICAgICAgIC8vXG4gICAgICAgIC8vIFNpbXBsZSBydWxlczpcbiAgICAgICAgLy8gLSBJZiB3ZSBNVVNUIHJlZnJlc2gsIHRoZW4gcmV0dXJuIHRoZSByZWZyZXNoIHRhc2ssIGJsb2NraW5nXG4gICAgICAgIC8vICAgdGhlIHBpcGVsaW5lIHVudGlsIGEgdG9rZW4gaXMgYXZhaWxhYmxlLlxuICAgICAgICAvLyAtIElmIHdlIFNIT1VMRCByZWZyZXNoLCB0aGVuIHJ1biByZWZyZXNoIGJ1dCBkb24ndCByZXR1cm4gaXRcbiAgICAgICAgLy8gICAod2UgY2FuIHN0aWxsIHVzZSB0aGUgY2FjaGVkIHRva2VuKS5cbiAgICAgICAgLy8gLSBSZXR1cm4gdGhlIHRva2VuLCBzaW5jZSBpdCdzIGZpbmUgaWYgd2UgZGlkbid0IHJldHVybiBpblxuICAgICAgICAvLyAgIHN0ZXAgMS5cbiAgICAgICAgLy9cbiAgICAgICAgY29uc3QgaGFzQ2xhaW1DaGFsbGVuZ2UgPSBCb29sZWFuKHRva2VuT3B0aW9ucy5jbGFpbXMpO1xuICAgICAgICBjb25zdCB0ZW5hbnRJZENoYW5nZWQgPSB0ZW5hbnRJZCAhPT0gdG9rZW5PcHRpb25zLnRlbmFudElkO1xuICAgICAgICBpZiAoaGFzQ2xhaW1DaGFsbGVuZ2UpIHtcbiAgICAgICAgICAgIC8vIElmIHdlJ3ZlIHJlY2VpdmVkIGEgY2xhaW0sIHdlIGtub3cgdGhlIGV4aXN0aW5nIHRva2VuIGlzbid0IHZhbGlkXG4gICAgICAgICAgICAvLyBXZSB3YW50IHRvIGNsZWFyIGl0IHNvIHRoYXQgdGhhdCByZWZyZXNoIHdvcmtlciB3b24ndCB1c2UgdGhlIG9sZCBleHBpcmF0aW9uIHRpbWUgYXMgYSB0aW1lb3V0XG4gICAgICAgICAgICB0b2tlbiA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgdGhlIHRlbmFudElkIHBhc3NlZCBpbiB0b2tlbiBvcHRpb25zIGlzIGRpZmZlcmVudCB0byB0aGUgb25lIHdlIGhhdmVcbiAgICAgICAgLy8gT3IgaWYgd2UgYXJlIGluIGNsYWltIGNoYWxsZW5nZSBhbmQgdGhlIHRva2VuIHdhcyByZWplY3RlZCBhbmQgYSBuZXcgYWNjZXNzIHRva2VuIG5lZWQgdG8gYmUgaXNzdWVkLCB3ZSBuZWVkIHRvXG4gICAgICAgIC8vIHJlZnJlc2ggdGhlIHRva2VuIHdpdGggdGhlIG5ldyB0ZW5hbnRJZCBvciB0b2tlbi5cbiAgICAgICAgY29uc3QgbXVzdFJlZnJlc2ggPSB0ZW5hbnRJZENoYW5nZWQgfHwgaGFzQ2xhaW1DaGFsbGVuZ2UgfHwgY3ljbGVyLm11c3RSZWZyZXNoO1xuICAgICAgICBpZiAobXVzdFJlZnJlc2gpIHtcbiAgICAgICAgICAgIHJldHVybiByZWZyZXNoKHNjb3BlcywgdG9rZW5PcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY3ljbGVyLnNob3VsZFJlZnJlc2gpIHtcbiAgICAgICAgICAgIHJlZnJlc2goc2NvcGVzLCB0b2tlbk9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0b2tlbjtcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dG9rZW5DeWNsZXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5iZWFyZXJUb2tlbkF1dGhlbnRpY2F0aW9uUG9saWN5TmFtZSA9IHZvaWQgMDtcbmV4cG9ydHMuYmVhcmVyVG9rZW5BdXRoZW50aWNhdGlvblBvbGljeSA9IGJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3k7XG5jb25zdCB0b2tlbkN5Y2xlcl9qc18xID0gcmVxdWlyZShcIi4uL3V0aWwvdG9rZW5DeWNsZXIuanNcIik7XG5jb25zdCBsb2dfanNfMSA9IHJlcXVpcmUoXCIuLi9sb2cuanNcIik7XG4vKipcbiAqIFRoZSBwcm9ncmFtbWF0aWMgaWRlbnRpZmllciBvZiB0aGUgYmVhcmVyVG9rZW5BdXRoZW50aWNhdGlvblBvbGljeS5cbiAqL1xuZXhwb3J0cy5iZWFyZXJUb2tlbkF1dGhlbnRpY2F0aW9uUG9saWN5TmFtZSA9IFwiYmVhcmVyVG9rZW5BdXRoZW50aWNhdGlvblBvbGljeVwiO1xuLyoqXG4gKiBEZWZhdWx0IGF1dGhvcml6ZSByZXF1ZXN0IGhhbmRsZXJcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZGVmYXVsdEF1dGhvcml6ZVJlcXVlc3Qob3B0aW9ucykge1xuICAgIGNvbnN0IHsgc2NvcGVzLCBnZXRBY2Nlc3NUb2tlbiwgcmVxdWVzdCB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBnZXRUb2tlbk9wdGlvbnMgPSB7XG4gICAgICAgIGFib3J0U2lnbmFsOiByZXF1ZXN0LmFib3J0U2lnbmFsLFxuICAgICAgICB0cmFjaW5nT3B0aW9uczogcmVxdWVzdC50cmFjaW5nT3B0aW9ucyxcbiAgICB9O1xuICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gYXdhaXQgZ2V0QWNjZXNzVG9rZW4oc2NvcGVzLCBnZXRUb2tlbk9wdGlvbnMpO1xuICAgIGlmIChhY2Nlc3NUb2tlbikge1xuICAgICAgICBvcHRpb25zLnJlcXVlc3QuaGVhZGVycy5zZXQoXCJBdXRob3JpemF0aW9uXCIsIGBCZWFyZXIgJHthY2Nlc3NUb2tlbi50b2tlbn1gKTtcbiAgICB9XG59XG4vKipcbiAqIFdlIHdpbGwgcmV0cmlldmUgdGhlIGNoYWxsZW5nZSBvbmx5IGlmIHRoZSByZXNwb25zZSBzdGF0dXMgY29kZSB3YXMgNDAxLFxuICogYW5kIGlmIHRoZSByZXNwb25zZSBjb250YWluZWQgdGhlIGhlYWRlciBcIldXVy1BdXRoZW50aWNhdGVcIiB3aXRoIGEgbm9uLWVtcHR5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBnZXRDaGFsbGVuZ2UocmVzcG9uc2UpIHtcbiAgICBjb25zdCBjaGFsbGVuZ2UgPSByZXNwb25zZS5oZWFkZXJzLmdldChcIldXVy1BdXRoZW50aWNhdGVcIik7XG4gICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAxICYmIGNoYWxsZW5nZSkge1xuICAgICAgICByZXR1cm4gY2hhbGxlbmdlO1xuICAgIH1cbiAgICByZXR1cm47XG59XG4vKipcbiAqIEEgcG9saWN5IHRoYXQgY2FuIHJlcXVlc3QgYSB0b2tlbiBmcm9tIGEgVG9rZW5DcmVkZW50aWFsIGltcGxlbWVudGF0aW9uIGFuZFxuICogdGhlbiBhcHBseSBpdCB0byB0aGUgQXV0aG9yaXphdGlvbiBoZWFkZXIgb2YgYSByZXF1ZXN0IGFzIGEgQmVhcmVyIHRva2VuLlxuICovXG5mdW5jdGlvbiBiZWFyZXJUb2tlbkF1dGhlbnRpY2F0aW9uUG9saWN5KG9wdGlvbnMpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3QgeyBjcmVkZW50aWFsLCBzY29wZXMsIGNoYWxsZW5nZUNhbGxiYWNrcyB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBsb2dnZXIgPSBvcHRpb25zLmxvZ2dlciB8fCBsb2dfanNfMS5sb2dnZXI7XG4gICAgY29uc3QgY2FsbGJhY2tzID0gT2JqZWN0LmFzc2lnbih7IGF1dGhvcml6ZVJlcXVlc3Q6IChfYSA9IGNoYWxsZW5nZUNhbGxiYWNrcyA9PT0gbnVsbCB8fCBjaGFsbGVuZ2VDYWxsYmFja3MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNoYWxsZW5nZUNhbGxiYWNrcy5hdXRob3JpemVSZXF1ZXN0KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBkZWZhdWx0QXV0aG9yaXplUmVxdWVzdCwgYXV0aG9yaXplUmVxdWVzdE9uQ2hhbGxlbmdlOiBjaGFsbGVuZ2VDYWxsYmFja3MgPT09IG51bGwgfHwgY2hhbGxlbmdlQ2FsbGJhY2tzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjaGFsbGVuZ2VDYWxsYmFja3MuYXV0aG9yaXplUmVxdWVzdE9uQ2hhbGxlbmdlIH0sIGNoYWxsZW5nZUNhbGxiYWNrcyk7XG4gICAgLy8gVGhpcyBmdW5jdGlvbiBlbmNhcHN1bGF0ZXMgdGhlIGVudGlyZSBwcm9jZXNzIG9mIHJlbGlhYmx5IHJldHJpZXZpbmcgdGhlIHRva2VuXG4gICAgLy8gVGhlIG9wdGlvbnMgYXJlIGxlZnQgb3V0IG9mIHRoZSBwdWJsaWMgQVBJIHVudGlsIHRoZXJlJ3MgZGVtYW5kIHRvIGNvbmZpZ3VyZSB0aGlzLlxuICAgIC8vIFJlbWVtYmVyIHRvIGV4dGVuZCBgQmVhcmVyVG9rZW5BdXRoZW50aWNhdGlvblBvbGljeU9wdGlvbnNgIHdpdGggYFRva2VuQ3ljbGVyT3B0aW9uc2BcbiAgICAvLyBpbiBvcmRlciB0byBwYXNzIHRocm91Z2ggdGhlIGBvcHRpb25zYCBvYmplY3QuXG4gICAgY29uc3QgZ2V0QWNjZXNzVG9rZW4gPSBjcmVkZW50aWFsXG4gICAgICAgID8gKDAsIHRva2VuQ3ljbGVyX2pzXzEuY3JlYXRlVG9rZW5DeWNsZXIpKGNyZWRlbnRpYWwgLyogLCBvcHRpb25zICovKVxuICAgICAgICA6ICgpID0+IFByb21pc2UucmVzb2x2ZShudWxsKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBleHBvcnRzLmJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3lOYW1lLFxuICAgICAgICAvKipcbiAgICAgICAgICogSWYgdGhlcmUncyBubyBjaGFsbGVuZ2UgcGFyYW1ldGVyOlxuICAgICAgICAgKiAtIEl0IHdpbGwgdHJ5IHRvIHJldHJpZXZlIHRoZSB0b2tlbiB1c2luZyB0aGUgY2FjaGUsIG9yIHRoZSBjcmVkZW50aWFsJ3MgZ2V0VG9rZW4uXG4gICAgICAgICAqIC0gVGhlbiBpdCB3aWxsIHRyeSB0aGUgbmV4dCBwb2xpY3kgd2l0aCBvciB3aXRob3V0IHRoZSByZXRyaWV2ZWQgdG9rZW4uXG4gICAgICAgICAqXG4gICAgICAgICAqIEl0IHVzZXMgdGhlIGNoYWxsZW5nZSBwYXJhbWV0ZXJzIHRvOlxuICAgICAgICAgKiAtIFNraXAgYSBmaXJzdCBhdHRlbXB0IHRvIGdldCB0aGUgdG9rZW4gZnJvbSB0aGUgY3JlZGVudGlhbCBpZiB0aGVyZSdzIG5vIGNhY2hlZCB0b2tlbixcbiAgICAgICAgICogICBzaW5jZSBpdCBleHBlY3RzIHRoZSB0b2tlbiB0byBiZSByZXRyaWV2YWJsZSBvbmx5IGFmdGVyIHRoZSBjaGFsbGVuZ2UuXG4gICAgICAgICAqIC0gUHJlcGFyZSB0aGUgb3V0Z29pbmcgcmVxdWVzdCBpZiB0aGUgYHByZXBhcmVSZXF1ZXN0YCBtZXRob2QgaGFzIGJlZW4gcHJvdmlkZWQuXG4gICAgICAgICAqIC0gU2VuZCBhbiBpbml0aWFsIHJlcXVlc3QgdG8gcmVjZWl2ZSB0aGUgY2hhbGxlbmdlIGlmIGl0IGZhaWxzLlxuICAgICAgICAgKiAtIFByb2Nlc3MgYSBjaGFsbGVuZ2UgaWYgdGhlIHJlc3BvbnNlIGNvbnRhaW5zIGl0LlxuICAgICAgICAgKiAtIFJldHJpZXZlIGEgdG9rZW4gd2l0aCB0aGUgY2hhbGxlbmdlIGluZm9ybWF0aW9uLCB0aGVuIHJlLXNlbmQgdGhlIHJlcXVlc3QuXG4gICAgICAgICAqL1xuICAgICAgICBhc3luYyBzZW5kUmVxdWVzdChyZXF1ZXN0LCBuZXh0KSB7XG4gICAgICAgICAgICBpZiAoIXJlcXVlc3QudXJsLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChcImh0dHBzOi8vXCIpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmVhcmVyIHRva2VuIGF1dGhlbnRpY2F0aW9uIGlzIG5vdCBwZXJtaXR0ZWQgZm9yIG5vbi1UTFMgcHJvdGVjdGVkIChub24taHR0cHMpIFVSTHMuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXdhaXQgY2FsbGJhY2tzLmF1dGhvcml6ZVJlcXVlc3Qoe1xuICAgICAgICAgICAgICAgIHNjb3BlczogQXJyYXkuaXNBcnJheShzY29wZXMpID8gc2NvcGVzIDogW3Njb3Blc10sXG4gICAgICAgICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgICAgICAgICBnZXRBY2Nlc3NUb2tlbixcbiAgICAgICAgICAgICAgICBsb2dnZXIsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxldCByZXNwb25zZTtcbiAgICAgICAgICAgIGxldCBlcnJvcjtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCBuZXh0KHJlcXVlc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIGVycm9yID0gZXJyO1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gZXJyLnJlc3BvbnNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNhbGxiYWNrcy5hdXRob3JpemVSZXF1ZXN0T25DaGFsbGVuZ2UgJiZcbiAgICAgICAgICAgICAgICAocmVzcG9uc2UgPT09IG51bGwgfHwgcmVzcG9uc2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlc3BvbnNlLnN0YXR1cykgPT09IDQwMSAmJlxuICAgICAgICAgICAgICAgIGdldENoYWxsZW5nZShyZXNwb25zZSkpIHtcbiAgICAgICAgICAgICAgICAvLyBwcm9jZXNzZXMgY2hhbGxlbmdlXG4gICAgICAgICAgICAgICAgY29uc3Qgc2hvdWxkU2VuZFJlcXVlc3QgPSBhd2FpdCBjYWxsYmFja3MuYXV0aG9yaXplUmVxdWVzdE9uQ2hhbGxlbmdlKHtcbiAgICAgICAgICAgICAgICAgICAgc2NvcGVzOiBBcnJheS5pc0FycmF5KHNjb3BlcykgPyBzY29wZXMgOiBbc2NvcGVzXSxcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgICAgIGdldEFjY2Vzc1Rva2VuLFxuICAgICAgICAgICAgICAgICAgICBsb2dnZXIsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKHNob3VsZFNlbmRSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXh0KHJlcXVlc3QpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1iZWFyZXJUb2tlbkF1dGhlbnRpY2F0aW9uUG9saWN5LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubmRKc29uUG9saWN5TmFtZSA9IHZvaWQgMDtcbmV4cG9ydHMubmRKc29uUG9saWN5ID0gbmRKc29uUG9saWN5O1xuLyoqXG4gKiBUaGUgcHJvZ3JhbW1hdGljIGlkZW50aWZpZXIgb2YgdGhlIG5kSnNvblBvbGljeS5cbiAqL1xuZXhwb3J0cy5uZEpzb25Qb2xpY3lOYW1lID0gXCJuZEpzb25Qb2xpY3lcIjtcbi8qKlxuICogbmRKc29uUG9saWN5IGlzIGEgcG9saWN5IHVzZWQgdG8gY29udHJvbCBrZWVwIGFsaXZlIHNldHRpbmdzIGZvciBldmVyeSByZXF1ZXN0LlxuICovXG5mdW5jdGlvbiBuZEpzb25Qb2xpY3koKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogZXhwb3J0cy5uZEpzb25Qb2xpY3lOYW1lLFxuICAgICAgICBhc3luYyBzZW5kUmVxdWVzdChyZXF1ZXN0LCBuZXh0KSB7XG4gICAgICAgICAgICAvLyBUaGVyZSBjdXJyZW50bHkgaXNuJ3QgYSBnb29kIHdheSB0byBieXBhc3MgdGhlIHNlcmlhbGl6ZXJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmVxdWVzdC5ib2R5ID09PSBcInN0cmluZ1wiICYmIHJlcXVlc3QuYm9keS5zdGFydHNXaXRoKFwiW1wiKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBKU09OLnBhcnNlKHJlcXVlc3QuYm9keSk7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYm9keSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5ib2R5ID0gYm9keS5tYXAoKGl0ZW0pID0+IEpTT04uc3RyaW5naWZ5KGl0ZW0pICsgXCJcXG5cIikuam9pbihcIlwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV4dChyZXF1ZXN0KTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bmRKc29uUG9saWN5LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYXV4aWxpYXJ5QXV0aGVudGljYXRpb25IZWFkZXJQb2xpY3lOYW1lID0gdm9pZCAwO1xuZXhwb3J0cy5hdXhpbGlhcnlBdXRoZW50aWNhdGlvbkhlYWRlclBvbGljeSA9IGF1eGlsaWFyeUF1dGhlbnRpY2F0aW9uSGVhZGVyUG9saWN5O1xuY29uc3QgdG9rZW5DeWNsZXJfanNfMSA9IHJlcXVpcmUoXCIuLi91dGlsL3Rva2VuQ3ljbGVyLmpzXCIpO1xuY29uc3QgbG9nX2pzXzEgPSByZXF1aXJlKFwiLi4vbG9nLmpzXCIpO1xuLyoqXG4gKiBUaGUgcHJvZ3JhbW1hdGljIGlkZW50aWZpZXIgb2YgdGhlIGF1eGlsaWFyeUF1dGhlbnRpY2F0aW9uSGVhZGVyUG9saWN5LlxuICovXG5leHBvcnRzLmF1eGlsaWFyeUF1dGhlbnRpY2F0aW9uSGVhZGVyUG9saWN5TmFtZSA9IFwiYXV4aWxpYXJ5QXV0aGVudGljYXRpb25IZWFkZXJQb2xpY3lcIjtcbmNvbnN0IEFVVEhPUklaQVRJT05fQVVYSUxJQVJZX0hFQURFUiA9IFwieC1tcy1hdXRob3JpemF0aW9uLWF1eGlsaWFyeVwiO1xuYXN5bmMgZnVuY3Rpb24gc2VuZEF1dGhvcml6ZVJlcXVlc3Qob3B0aW9ucykge1xuICAgIHZhciBfYSwgX2I7XG4gICAgY29uc3QgeyBzY29wZXMsIGdldEFjY2Vzc1Rva2VuLCByZXF1ZXN0IH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IGdldFRva2VuT3B0aW9ucyA9IHtcbiAgICAgICAgYWJvcnRTaWduYWw6IHJlcXVlc3QuYWJvcnRTaWduYWwsXG4gICAgICAgIHRyYWNpbmdPcHRpb25zOiByZXF1ZXN0LnRyYWNpbmdPcHRpb25zLFxuICAgIH07XG4gICAgcmV0dXJuIChfYiA9IChfYSA9IChhd2FpdCBnZXRBY2Nlc3NUb2tlbihzY29wZXMsIGdldFRva2VuT3B0aW9ucykpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudG9rZW4pICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IFwiXCI7XG59XG4vKipcbiAqIEEgcG9saWN5IGZvciBleHRlcm5hbCB0b2tlbnMgdG8gYHgtbXMtYXV0aG9yaXphdGlvbi1hdXhpbGlhcnlgIGhlYWRlci5cbiAqIFRoaXMgaGVhZGVyIHdpbGwgYmUgdXNlZCB3aGVuIGNyZWF0aW5nIGEgY3Jvc3MtdGVuYW50IGFwcGxpY2F0aW9uIHdlIG1heSBuZWVkIHRvIGhhbmRsZSBhdXRoZW50aWNhdGlvbiByZXF1ZXN0c1xuICogZm9yIHJlc291cmNlcyB0aGF0IGFyZSBpbiBkaWZmZXJlbnQgdGVuYW50cy5cbiAqIFlvdSBjb3VsZCBzZWUgW0FSTSBkb2NzXShodHRwczovL2xlYXJuLm1pY3Jvc29mdC5jb20vZW4tdXMvYXp1cmUvYXp1cmUtcmVzb3VyY2UtbWFuYWdlci9tYW5hZ2VtZW50L2F1dGhlbnRpY2F0ZS1tdWx0aS10ZW5hbnQpIGZvciBhIHJ1bmRvd24gb2YgaG93IHRoaXMgZmVhdHVyZSB3b3Jrc1xuICovXG5mdW5jdGlvbiBhdXhpbGlhcnlBdXRoZW50aWNhdGlvbkhlYWRlclBvbGljeShvcHRpb25zKSB7XG4gICAgY29uc3QgeyBjcmVkZW50aWFscywgc2NvcGVzIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IGxvZ2dlciA9IG9wdGlvbnMubG9nZ2VyIHx8IGxvZ19qc18xLmxvZ2dlcjtcbiAgICBjb25zdCB0b2tlbkN5Y2xlck1hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogZXhwb3J0cy5hdXhpbGlhcnlBdXRoZW50aWNhdGlvbkhlYWRlclBvbGljeU5hbWUsXG4gICAgICAgIGFzeW5jIHNlbmRSZXF1ZXN0KHJlcXVlc3QsIG5leHQpIHtcbiAgICAgICAgICAgIGlmICghcmVxdWVzdC51cmwudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKFwiaHR0cHM6Ly9cIikpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCZWFyZXIgdG9rZW4gYXV0aGVudGljYXRpb24gZm9yIGF1eGlsaWFyeSBoZWFkZXIgaXMgbm90IHBlcm1pdHRlZCBmb3Igbm9uLVRMUyBwcm90ZWN0ZWQgKG5vbi1odHRwcykgVVJMcy5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWNyZWRlbnRpYWxzIHx8IGNyZWRlbnRpYWxzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGAke2V4cG9ydHMuYXV4aWxpYXJ5QXV0aGVudGljYXRpb25IZWFkZXJQb2xpY3lOYW1lfSBoZWFkZXIgd2lsbCBub3QgYmUgc2V0IGR1ZSB0byBlbXB0eSBjcmVkZW50aWFscy5gKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dChyZXF1ZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHRva2VuUHJvbWlzZXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY3JlZGVudGlhbCBvZiBjcmVkZW50aWFscykge1xuICAgICAgICAgICAgICAgIGxldCBnZXRBY2Nlc3NUb2tlbiA9IHRva2VuQ3ljbGVyTWFwLmdldChjcmVkZW50aWFsKTtcbiAgICAgICAgICAgICAgICBpZiAoIWdldEFjY2Vzc1Rva2VuKSB7XG4gICAgICAgICAgICAgICAgICAgIGdldEFjY2Vzc1Rva2VuID0gKDAsIHRva2VuQ3ljbGVyX2pzXzEuY3JlYXRlVG9rZW5DeWNsZXIpKGNyZWRlbnRpYWwpO1xuICAgICAgICAgICAgICAgICAgICB0b2tlbkN5Y2xlck1hcC5zZXQoY3JlZGVudGlhbCwgZ2V0QWNjZXNzVG9rZW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0b2tlblByb21pc2VzLnB1c2goc2VuZEF1dGhvcml6ZVJlcXVlc3Qoe1xuICAgICAgICAgICAgICAgICAgICBzY29wZXM6IEFycmF5LmlzQXJyYXkoc2NvcGVzKSA/IHNjb3BlcyA6IFtzY29wZXNdLFxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LFxuICAgICAgICAgICAgICAgICAgICBnZXRBY2Nlc3NUb2tlbixcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLFxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGF1eGlsaWFyeVRva2VucyA9IChhd2FpdCBQcm9taXNlLmFsbCh0b2tlblByb21pc2VzKSkuZmlsdGVyKCh0b2tlbikgPT4gQm9vbGVhbih0b2tlbikpO1xuICAgICAgICAgICAgaWYgKGF1eGlsaWFyeVRva2Vucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBsb2dnZXIud2FybmluZyhgTm9uZSBvZiB0aGUgYXV4aWxpYXJ5IHRva2VucyBhcmUgdmFsaWQuICR7QVVUSE9SSVpBVElPTl9BVVhJTElBUllfSEVBREVSfSBoZWFkZXIgd2lsbCBub3QgYmUgc2V0LmApO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0KHJlcXVlc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVxdWVzdC5oZWFkZXJzLnNldChBVVRIT1JJWkFUSU9OX0FVWElMSUFSWV9IRUFERVIsIGF1eGlsaWFyeVRva2Vucy5tYXAoKHRva2VuKSA9PiBgQmVhcmVyICR7dG9rZW59YCkuam9pbihcIiwgXCIpKTtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KHJlcXVlc3QpO1xuICAgICAgICB9LFxuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hdXhpbGlhcnlBdXRoZW50aWNhdGlvbkhlYWRlclBvbGljeS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNyZWF0ZUZpbGVGcm9tU3RyZWFtID0gZXhwb3J0cy5jcmVhdGVGaWxlID0gZXhwb3J0cy5hdXhpbGlhcnlBdXRoZW50aWNhdGlvbkhlYWRlclBvbGljeU5hbWUgPSBleHBvcnRzLmF1eGlsaWFyeUF1dGhlbnRpY2F0aW9uSGVhZGVyUG9saWN5ID0gZXhwb3J0cy5uZEpzb25Qb2xpY3lOYW1lID0gZXhwb3J0cy5uZEpzb25Qb2xpY3kgPSBleHBvcnRzLmJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3lOYW1lID0gZXhwb3J0cy5iZWFyZXJUb2tlbkF1dGhlbnRpY2F0aW9uUG9saWN5ID0gZXhwb3J0cy5mb3JtRGF0YVBvbGljeU5hbWUgPSBleHBvcnRzLmZvcm1EYXRhUG9saWN5ID0gZXhwb3J0cy50bHNQb2xpY3lOYW1lID0gZXhwb3J0cy50bHNQb2xpY3kgPSBleHBvcnRzLnVzZXJBZ2VudFBvbGljeU5hbWUgPSBleHBvcnRzLnVzZXJBZ2VudFBvbGljeSA9IGV4cG9ydHMuZGVmYXVsdFJldHJ5UG9saWN5ID0gZXhwb3J0cy50cmFjaW5nUG9saWN5TmFtZSA9IGV4cG9ydHMudHJhY2luZ1BvbGljeSA9IGV4cG9ydHMucmV0cnlQb2xpY3kgPSBleHBvcnRzLnRocm90dGxpbmdSZXRyeVBvbGljeU5hbWUgPSBleHBvcnRzLnRocm90dGxpbmdSZXRyeVBvbGljeSA9IGV4cG9ydHMuc3lzdGVtRXJyb3JSZXRyeVBvbGljeU5hbWUgPSBleHBvcnRzLnN5c3RlbUVycm9yUmV0cnlQb2xpY3kgPSBleHBvcnRzLnJlZGlyZWN0UG9saWN5TmFtZSA9IGV4cG9ydHMucmVkaXJlY3RQb2xpY3kgPSBleHBvcnRzLmdldERlZmF1bHRQcm94eVNldHRpbmdzID0gZXhwb3J0cy5wcm94eVBvbGljeU5hbWUgPSBleHBvcnRzLnByb3h5UG9saWN5ID0gZXhwb3J0cy5tdWx0aXBhcnRQb2xpY3lOYW1lID0gZXhwb3J0cy5tdWx0aXBhcnRQb2xpY3kgPSBleHBvcnRzLmxvZ1BvbGljeU5hbWUgPSBleHBvcnRzLmxvZ1BvbGljeSA9IGV4cG9ydHMuc2V0Q2xpZW50UmVxdWVzdElkUG9saWN5TmFtZSA9IGV4cG9ydHMuc2V0Q2xpZW50UmVxdWVzdElkUG9saWN5ID0gZXhwb3J0cy5leHBvbmVudGlhbFJldHJ5UG9saWN5TmFtZSA9IGV4cG9ydHMuZXhwb25lbnRpYWxSZXRyeVBvbGljeSA9IGV4cG9ydHMuZGVjb21wcmVzc1Jlc3BvbnNlUG9saWN5TmFtZSA9IGV4cG9ydHMuZGVjb21wcmVzc1Jlc3BvbnNlUG9saWN5ID0gZXhwb3J0cy5pc1Jlc3RFcnJvciA9IGV4cG9ydHMuUmVzdEVycm9yID0gZXhwb3J0cy5jcmVhdGVQaXBlbGluZVJlcXVlc3QgPSBleHBvcnRzLmNyZWF0ZUh0dHBIZWFkZXJzID0gZXhwb3J0cy5jcmVhdGVEZWZhdWx0SHR0cENsaWVudCA9IGV4cG9ydHMuY3JlYXRlUGlwZWxpbmVGcm9tT3B0aW9ucyA9IGV4cG9ydHMuY3JlYXRlRW1wdHlQaXBlbGluZSA9IHZvaWQgMDtcbnZhciBwaXBlbGluZV9qc18xID0gcmVxdWlyZShcIi4vcGlwZWxpbmUuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVFbXB0eVBpcGVsaW5lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwaXBlbGluZV9qc18xLmNyZWF0ZUVtcHR5UGlwZWxpbmU7IH0gfSk7XG52YXIgY3JlYXRlUGlwZWxpbmVGcm9tT3B0aW9uc19qc18xID0gcmVxdWlyZShcIi4vY3JlYXRlUGlwZWxpbmVGcm9tT3B0aW9ucy5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVBpcGVsaW5lRnJvbU9wdGlvbnNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNyZWF0ZVBpcGVsaW5lRnJvbU9wdGlvbnNfanNfMS5jcmVhdGVQaXBlbGluZUZyb21PcHRpb25zOyB9IH0pO1xudmFyIGRlZmF1bHRIdHRwQ2xpZW50X2pzXzEgPSByZXF1aXJlKFwiLi9kZWZhdWx0SHR0cENsaWVudC5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZURlZmF1bHRIdHRwQ2xpZW50XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkZWZhdWx0SHR0cENsaWVudF9qc18xLmNyZWF0ZURlZmF1bHRIdHRwQ2xpZW50OyB9IH0pO1xudmFyIGh0dHBIZWFkZXJzX2pzXzEgPSByZXF1aXJlKFwiLi9odHRwSGVhZGVycy5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUh0dHBIZWFkZXJzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBodHRwSGVhZGVyc19qc18xLmNyZWF0ZUh0dHBIZWFkZXJzOyB9IH0pO1xudmFyIHBpcGVsaW5lUmVxdWVzdF9qc18xID0gcmVxdWlyZShcIi4vcGlwZWxpbmVSZXF1ZXN0LmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUGlwZWxpbmVSZXF1ZXN0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwaXBlbGluZVJlcXVlc3RfanNfMS5jcmVhdGVQaXBlbGluZVJlcXVlc3Q7IH0gfSk7XG52YXIgcmVzdEVycm9yX2pzXzEgPSByZXF1aXJlKFwiLi9yZXN0RXJyb3IuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJSZXN0RXJyb3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlc3RFcnJvcl9qc18xLlJlc3RFcnJvcjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzUmVzdEVycm9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZXN0RXJyb3JfanNfMS5pc1Jlc3RFcnJvcjsgfSB9KTtcbnZhciBkZWNvbXByZXNzUmVzcG9uc2VQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL2RlY29tcHJlc3NSZXNwb25zZVBvbGljeS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlY29tcHJlc3NSZXNwb25zZVBvbGljeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZGVjb21wcmVzc1Jlc3BvbnNlUG9saWN5X2pzXzEuZGVjb21wcmVzc1Jlc3BvbnNlUG9saWN5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVjb21wcmVzc1Jlc3BvbnNlUG9saWN5TmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZGVjb21wcmVzc1Jlc3BvbnNlUG9saWN5X2pzXzEuZGVjb21wcmVzc1Jlc3BvbnNlUG9saWN5TmFtZTsgfSB9KTtcbnZhciBleHBvbmVudGlhbFJldHJ5UG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9wb2xpY2llcy9leHBvbmVudGlhbFJldHJ5UG9saWN5LmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZXhwb25lbnRpYWxSZXRyeVBvbGljeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZXhwb25lbnRpYWxSZXRyeVBvbGljeV9qc18xLmV4cG9uZW50aWFsUmV0cnlQb2xpY3k7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJleHBvbmVudGlhbFJldHJ5UG9saWN5TmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZXhwb25lbnRpYWxSZXRyeVBvbGljeV9qc18xLmV4cG9uZW50aWFsUmV0cnlQb2xpY3lOYW1lOyB9IH0pO1xudmFyIHNldENsaWVudFJlcXVlc3RJZFBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvc2V0Q2xpZW50UmVxdWVzdElkUG9saWN5LmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2V0Q2xpZW50UmVxdWVzdElkUG9saWN5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZXRDbGllbnRSZXF1ZXN0SWRQb2xpY3lfanNfMS5zZXRDbGllbnRSZXF1ZXN0SWRQb2xpY3k7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzZXRDbGllbnRSZXF1ZXN0SWRQb2xpY3lOYW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZXRDbGllbnRSZXF1ZXN0SWRQb2xpY3lfanNfMS5zZXRDbGllbnRSZXF1ZXN0SWRQb2xpY3lOYW1lOyB9IH0pO1xudmFyIGxvZ1BvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvbG9nUG9saWN5LmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibG9nUG9saWN5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBsb2dQb2xpY3lfanNfMS5sb2dQb2xpY3k7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJsb2dQb2xpY3lOYW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBsb2dQb2xpY3lfanNfMS5sb2dQb2xpY3lOYW1lOyB9IH0pO1xudmFyIG11bHRpcGFydFBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvbXVsdGlwYXJ0UG9saWN5LmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibXVsdGlwYXJ0UG9saWN5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBtdWx0aXBhcnRQb2xpY3lfanNfMS5tdWx0aXBhcnRQb2xpY3k7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtdWx0aXBhcnRQb2xpY3lOYW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBtdWx0aXBhcnRQb2xpY3lfanNfMS5tdWx0aXBhcnRQb2xpY3lOYW1lOyB9IH0pO1xudmFyIHByb3h5UG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9wb2xpY2llcy9wcm94eVBvbGljeS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInByb3h5UG9saWN5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwcm94eVBvbGljeV9qc18xLnByb3h5UG9saWN5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicHJveHlQb2xpY3lOYW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwcm94eVBvbGljeV9qc18xLnByb3h5UG9saWN5TmFtZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImdldERlZmF1bHRQcm94eVNldHRpbmdzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwcm94eVBvbGljeV9qc18xLmdldERlZmF1bHRQcm94eVNldHRpbmdzOyB9IH0pO1xudmFyIHJlZGlyZWN0UG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9wb2xpY2llcy9yZWRpcmVjdFBvbGljeS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlZGlyZWN0UG9saWN5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZWRpcmVjdFBvbGljeV9qc18xLnJlZGlyZWN0UG9saWN5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmVkaXJlY3RQb2xpY3lOYW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZWRpcmVjdFBvbGljeV9qc18xLnJlZGlyZWN0UG9saWN5TmFtZTsgfSB9KTtcbnZhciBzeXN0ZW1FcnJvclJldHJ5UG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9wb2xpY2llcy9zeXN0ZW1FcnJvclJldHJ5UG9saWN5LmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3lzdGVtRXJyb3JSZXRyeVBvbGljeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc3lzdGVtRXJyb3JSZXRyeVBvbGljeV9qc18xLnN5c3RlbUVycm9yUmV0cnlQb2xpY3k7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzeXN0ZW1FcnJvclJldHJ5UG9saWN5TmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc3lzdGVtRXJyb3JSZXRyeVBvbGljeV9qc18xLnN5c3RlbUVycm9yUmV0cnlQb2xpY3lOYW1lOyB9IH0pO1xudmFyIHRocm90dGxpbmdSZXRyeVBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvdGhyb3R0bGluZ1JldHJ5UG9saWN5LmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidGhyb3R0bGluZ1JldHJ5UG9saWN5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aHJvdHRsaW5nUmV0cnlQb2xpY3lfanNfMS50aHJvdHRsaW5nUmV0cnlQb2xpY3k7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0aHJvdHRsaW5nUmV0cnlQb2xpY3lOYW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aHJvdHRsaW5nUmV0cnlQb2xpY3lfanNfMS50aHJvdHRsaW5nUmV0cnlQb2xpY3lOYW1lOyB9IH0pO1xudmFyIHJldHJ5UG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9wb2xpY2llcy9yZXRyeVBvbGljeS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJldHJ5UG9saWN5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZXRyeVBvbGljeV9qc18xLnJldHJ5UG9saWN5OyB9IH0pO1xudmFyIHRyYWNpbmdQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL3RyYWNpbmdQb2xpY3kuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0cmFjaW5nUG9saWN5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0cmFjaW5nUG9saWN5X2pzXzEudHJhY2luZ1BvbGljeTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRyYWNpbmdQb2xpY3lOYW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0cmFjaW5nUG9saWN5X2pzXzEudHJhY2luZ1BvbGljeU5hbWU7IH0gfSk7XG52YXIgZGVmYXVsdFJldHJ5UG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9wb2xpY2llcy9kZWZhdWx0UmV0cnlQb2xpY3kuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZWZhdWx0UmV0cnlQb2xpY3lcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRlZmF1bHRSZXRyeVBvbGljeV9qc18xLmRlZmF1bHRSZXRyeVBvbGljeTsgfSB9KTtcbnZhciB1c2VyQWdlbnRQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL3VzZXJBZ2VudFBvbGljeS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInVzZXJBZ2VudFBvbGljeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdXNlckFnZW50UG9saWN5X2pzXzEudXNlckFnZW50UG9saWN5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidXNlckFnZW50UG9saWN5TmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdXNlckFnZW50UG9saWN5X2pzXzEudXNlckFnZW50UG9saWN5TmFtZTsgfSB9KTtcbnZhciB0bHNQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL3Rsc1BvbGljeS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRsc1BvbGljeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGxzUG9saWN5X2pzXzEudGxzUG9saWN5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidGxzUG9saWN5TmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGxzUG9saWN5X2pzXzEudGxzUG9saWN5TmFtZTsgfSB9KTtcbnZhciBmb3JtRGF0YVBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvZm9ybURhdGFQb2xpY3kuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJmb3JtRGF0YVBvbGljeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZm9ybURhdGFQb2xpY3lfanNfMS5mb3JtRGF0YVBvbGljeTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZvcm1EYXRhUG9saWN5TmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZm9ybURhdGFQb2xpY3lfanNfMS5mb3JtRGF0YVBvbGljeU5hbWU7IH0gfSk7XG52YXIgYmVhcmVyVG9rZW5BdXRoZW50aWNhdGlvblBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvYmVhcmVyVG9rZW5BdXRoZW50aWNhdGlvblBvbGljeS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3lcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3lfanNfMS5iZWFyZXJUb2tlbkF1dGhlbnRpY2F0aW9uUG9saWN5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYmVhcmVyVG9rZW5BdXRoZW50aWNhdGlvblBvbGljeU5hbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3lfanNfMS5iZWFyZXJUb2tlbkF1dGhlbnRpY2F0aW9uUG9saWN5TmFtZTsgfSB9KTtcbnZhciBuZEpzb25Qb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL25kSnNvblBvbGljeS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm5kSnNvblBvbGljeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbmRKc29uUG9saWN5X2pzXzEubmRKc29uUG9saWN5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibmRKc29uUG9saWN5TmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbmRKc29uUG9saWN5X2pzXzEubmRKc29uUG9saWN5TmFtZTsgfSB9KTtcbnZhciBhdXhpbGlhcnlBdXRoZW50aWNhdGlvbkhlYWRlclBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvYXV4aWxpYXJ5QXV0aGVudGljYXRpb25IZWFkZXJQb2xpY3kuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhdXhpbGlhcnlBdXRoZW50aWNhdGlvbkhlYWRlclBvbGljeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYXV4aWxpYXJ5QXV0aGVudGljYXRpb25IZWFkZXJQb2xpY3lfanNfMS5hdXhpbGlhcnlBdXRoZW50aWNhdGlvbkhlYWRlclBvbGljeTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImF1eGlsaWFyeUF1dGhlbnRpY2F0aW9uSGVhZGVyUG9saWN5TmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYXV4aWxpYXJ5QXV0aGVudGljYXRpb25IZWFkZXJQb2xpY3lfanNfMS5hdXhpbGlhcnlBdXRoZW50aWNhdGlvbkhlYWRlclBvbGljeU5hbWU7IH0gfSk7XG52YXIgZmlsZV9qc18xID0gcmVxdWlyZShcIi4vdXRpbC9maWxlLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRmlsZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZmlsZV9qc18xLmNyZWF0ZUZpbGU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVGaWxlRnJvbVN0cmVhbVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZmlsZV9qc18xLmNyZWF0ZUZpbGVGcm9tU3RyZWFtOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5BenVyZUtleUNyZWRlbnRpYWwgPSB2b2lkIDA7XG4vKipcbiAqIEEgc3RhdGljLWtleS1iYXNlZCBjcmVkZW50aWFsIHRoYXQgc3VwcG9ydHMgdXBkYXRpbmdcbiAqIHRoZSB1bmRlcmx5aW5nIGtleSB2YWx1ZS5cbiAqL1xuY2xhc3MgQXp1cmVLZXlDcmVkZW50aWFsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdmFsdWUgb2YgdGhlIGtleSB0byBiZSB1c2VkIGluIGF1dGhlbnRpY2F0aW9uXG4gICAgICovXG4gICAgZ2V0IGtleSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2tleTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIGFuIEF6dXJlS2V5Q3JlZGVudGlhbCBmb3IgdXNlXG4gICAgICogd2l0aCBhIHNlcnZpY2UgY2xpZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGtleSAtIFRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSBrZXkgdG8gdXNlIGluIGF1dGhlbnRpY2F0aW9uXG4gICAgICovXG4gICAgY29uc3RydWN0b3Ioa2V5KSB7XG4gICAgICAgIGlmICgha2V5KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJrZXkgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmdcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fa2V5ID0ga2V5O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDaGFuZ2UgdGhlIHZhbHVlIG9mIHRoZSBrZXkuXG4gICAgICpcbiAgICAgKiBVcGRhdGVzIHdpbGwgdGFrZSBlZmZlY3QgdXBvbiB0aGUgbmV4dCByZXF1ZXN0IGFmdGVyXG4gICAgICogdXBkYXRpbmcgdGhlIGtleSB2YWx1ZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBuZXdLZXkgLSBUaGUgbmV3IGtleSB2YWx1ZSB0byBiZSB1c2VkXG4gICAgICovXG4gICAgdXBkYXRlKG5ld0tleSkge1xuICAgICAgICB0aGlzLl9rZXkgPSBuZXdLZXk7XG4gICAgfVxufVxuZXhwb3J0cy5BenVyZUtleUNyZWRlbnRpYWwgPSBBenVyZUtleUNyZWRlbnRpYWw7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1henVyZUtleUNyZWRlbnRpYWwuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc0tleUNyZWRlbnRpYWwgPSBpc0tleUNyZWRlbnRpYWw7XG5jb25zdCBjb3JlX3V0aWxfMSA9IHJlcXVpcmUoXCJAYXp1cmUvY29yZS11dGlsXCIpO1xuLyoqXG4gKiBUZXN0cyBhbiBvYmplY3QgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgaXQgaW1wbGVtZW50cyBLZXlDcmVkZW50aWFsLlxuICpcbiAqIEBwYXJhbSBjcmVkZW50aWFsIC0gVGhlIGFzc3VtZWQgS2V5Q3JlZGVudGlhbCB0byBiZSB0ZXN0ZWQuXG4gKi9cbmZ1bmN0aW9uIGlzS2V5Q3JlZGVudGlhbChjcmVkZW50aWFsKSB7XG4gICAgcmV0dXJuICgwLCBjb3JlX3V0aWxfMS5pc09iamVjdFdpdGhQcm9wZXJ0aWVzKShjcmVkZW50aWFsLCBbXCJrZXlcIl0pICYmIHR5cGVvZiBjcmVkZW50aWFsLmtleSA9PT0gXCJzdHJpbmdcIjtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWtleUNyZWRlbnRpYWwuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5BenVyZU5hbWVkS2V5Q3JlZGVudGlhbCA9IHZvaWQgMDtcbmV4cG9ydHMuaXNOYW1lZEtleUNyZWRlbnRpYWwgPSBpc05hbWVkS2V5Q3JlZGVudGlhbDtcbmNvbnN0IGNvcmVfdXRpbF8xID0gcmVxdWlyZShcIkBhenVyZS9jb3JlLXV0aWxcIik7XG4vKipcbiAqIEEgc3RhdGljIG5hbWUva2V5LWJhc2VkIGNyZWRlbnRpYWwgdGhhdCBzdXBwb3J0cyB1cGRhdGluZ1xuICogdGhlIHVuZGVybHlpbmcgbmFtZSBhbmQga2V5IHZhbHVlcy5cbiAqL1xuY2xhc3MgQXp1cmVOYW1lZEtleUNyZWRlbnRpYWwge1xuICAgIC8qKlxuICAgICAqIFRoZSB2YWx1ZSBvZiB0aGUga2V5IHRvIGJlIHVzZWQgaW4gYXV0aGVudGljYXRpb24uXG4gICAgICovXG4gICAgZ2V0IGtleSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2tleTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIHZhbHVlIG9mIHRoZSBuYW1lIHRvIGJlIHVzZWQgaW4gYXV0aGVudGljYXRpb24uXG4gICAgICovXG4gICAgZ2V0IG5hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9uYW1lO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgYW4gQXp1cmVOYW1lZEtleUNyZWRlbnRpYWwgZm9yIHVzZVxuICAgICAqIHdpdGggYSBzZXJ2aWNlIGNsaWVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBuYW1lIC0gVGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIG5hbWUgdG8gdXNlIGluIGF1dGhlbnRpY2F0aW9uLlxuICAgICAqIEBwYXJhbSBrZXkgLSBUaGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUga2V5IHRvIHVzZSBpbiBhdXRoZW50aWNhdGlvbi5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihuYW1lLCBrZXkpIHtcbiAgICAgICAgaWYgKCFuYW1lIHx8ICFrZXkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJuYW1lIGFuZCBrZXkgbXVzdCBiZSBub24tZW1wdHkgc3RyaW5nc1wiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5fa2V5ID0ga2V5O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDaGFuZ2UgdGhlIHZhbHVlIG9mIHRoZSBrZXkuXG4gICAgICpcbiAgICAgKiBVcGRhdGVzIHdpbGwgdGFrZSBlZmZlY3QgdXBvbiB0aGUgbmV4dCByZXF1ZXN0IGFmdGVyXG4gICAgICogdXBkYXRpbmcgdGhlIGtleSB2YWx1ZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBuZXdOYW1lIC0gVGhlIG5ldyBuYW1lIHZhbHVlIHRvIGJlIHVzZWQuXG4gICAgICogQHBhcmFtIG5ld0tleSAtIFRoZSBuZXcga2V5IHZhbHVlIHRvIGJlIHVzZWQuXG4gICAgICovXG4gICAgdXBkYXRlKG5ld05hbWUsIG5ld0tleSkge1xuICAgICAgICBpZiAoIW5ld05hbWUgfHwgIW5ld0tleSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIm5ld05hbWUgYW5kIG5ld0tleSBtdXN0IGJlIG5vbi1lbXB0eSBzdHJpbmdzXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX25hbWUgPSBuZXdOYW1lO1xuICAgICAgICB0aGlzLl9rZXkgPSBuZXdLZXk7XG4gICAgfVxufVxuZXhwb3J0cy5BenVyZU5hbWVkS2V5Q3JlZGVudGlhbCA9IEF6dXJlTmFtZWRLZXlDcmVkZW50aWFsO1xuLyoqXG4gKiBUZXN0cyBhbiBvYmplY3QgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgaXQgaW1wbGVtZW50cyBOYW1lZEtleUNyZWRlbnRpYWwuXG4gKlxuICogQHBhcmFtIGNyZWRlbnRpYWwgLSBUaGUgYXNzdW1lZCBOYW1lZEtleUNyZWRlbnRpYWwgdG8gYmUgdGVzdGVkLlxuICovXG5mdW5jdGlvbiBpc05hbWVkS2V5Q3JlZGVudGlhbChjcmVkZW50aWFsKSB7XG4gICAgcmV0dXJuICgoMCwgY29yZV91dGlsXzEuaXNPYmplY3RXaXRoUHJvcGVydGllcykoY3JlZGVudGlhbCwgW1wibmFtZVwiLCBcImtleVwiXSkgJiZcbiAgICAgICAgdHlwZW9mIGNyZWRlbnRpYWwua2V5ID09PSBcInN0cmluZ1wiICYmXG4gICAgICAgIHR5cGVvZiBjcmVkZW50aWFsLm5hbWUgPT09IFwic3RyaW5nXCIpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXp1cmVOYW1lZEtleUNyZWRlbnRpYWwuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5BenVyZVNBU0NyZWRlbnRpYWwgPSB2b2lkIDA7XG5leHBvcnRzLmlzU0FTQ3JlZGVudGlhbCA9IGlzU0FTQ3JlZGVudGlhbDtcbmNvbnN0IGNvcmVfdXRpbF8xID0gcmVxdWlyZShcIkBhenVyZS9jb3JlLXV0aWxcIik7XG4vKipcbiAqIEEgc3RhdGljLXNpZ25hdHVyZS1iYXNlZCBjcmVkZW50aWFsIHRoYXQgc3VwcG9ydHMgdXBkYXRpbmdcbiAqIHRoZSB1bmRlcmx5aW5nIHNpZ25hdHVyZSB2YWx1ZS5cbiAqL1xuY2xhc3MgQXp1cmVTQVNDcmVkZW50aWFsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdmFsdWUgb2YgdGhlIHNoYXJlZCBhY2Nlc3Mgc2lnbmF0dXJlIHRvIGJlIHVzZWQgaW4gYXV0aGVudGljYXRpb25cbiAgICAgKi9cbiAgICBnZXQgc2lnbmF0dXJlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2lnbmF0dXJlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgYW4gQXp1cmVTQVNDcmVkZW50aWFsIGZvciB1c2VcbiAgICAgKiB3aXRoIGEgc2VydmljZSBjbGllbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc2lnbmF0dXJlIC0gVGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIHNoYXJlZCBhY2Nlc3Mgc2lnbmF0dXJlIHRvIHVzZSBpbiBhdXRoZW50aWNhdGlvblxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHNpZ25hdHVyZSkge1xuICAgICAgICBpZiAoIXNpZ25hdHVyZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwic2hhcmVkIGFjY2VzcyBzaWduYXR1cmUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmdcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2lnbmF0dXJlID0gc2lnbmF0dXJlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDaGFuZ2UgdGhlIHZhbHVlIG9mIHRoZSBzaWduYXR1cmUuXG4gICAgICpcbiAgICAgKiBVcGRhdGVzIHdpbGwgdGFrZSBlZmZlY3QgdXBvbiB0aGUgbmV4dCByZXF1ZXN0IGFmdGVyXG4gICAgICogdXBkYXRpbmcgdGhlIHNpZ25hdHVyZSB2YWx1ZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBuZXdTaWduYXR1cmUgLSBUaGUgbmV3IHNoYXJlZCBhY2Nlc3Mgc2lnbmF0dXJlIHZhbHVlIHRvIGJlIHVzZWRcbiAgICAgKi9cbiAgICB1cGRhdGUobmV3U2lnbmF0dXJlKSB7XG4gICAgICAgIGlmICghbmV3U2lnbmF0dXJlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzaGFyZWQgYWNjZXNzIHNpZ25hdHVyZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZ1wiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zaWduYXR1cmUgPSBuZXdTaWduYXR1cmU7XG4gICAgfVxufVxuZXhwb3J0cy5BenVyZVNBU0NyZWRlbnRpYWwgPSBBenVyZVNBU0NyZWRlbnRpYWw7XG4vKipcbiAqIFRlc3RzIGFuIG9iamVjdCB0byBkZXRlcm1pbmUgd2hldGhlciBpdCBpbXBsZW1lbnRzIFNBU0NyZWRlbnRpYWwuXG4gKlxuICogQHBhcmFtIGNyZWRlbnRpYWwgLSBUaGUgYXNzdW1lZCBTQVNDcmVkZW50aWFsIHRvIGJlIHRlc3RlZC5cbiAqL1xuZnVuY3Rpb24gaXNTQVNDcmVkZW50aWFsKGNyZWRlbnRpYWwpIHtcbiAgICByZXR1cm4gKCgwLCBjb3JlX3V0aWxfMS5pc09iamVjdFdpdGhQcm9wZXJ0aWVzKShjcmVkZW50aWFsLCBbXCJzaWduYXR1cmVcIl0pICYmIHR5cGVvZiBjcmVkZW50aWFsLnNpZ25hdHVyZSA9PT0gXCJzdHJpbmdcIik7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1henVyZVNBU0NyZWRlbnRpYWwuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc0JlYXJlclRva2VuID0gaXNCZWFyZXJUb2tlbjtcbmV4cG9ydHMuaXNQb3BUb2tlbiA9IGlzUG9wVG9rZW47XG5leHBvcnRzLmlzVG9rZW5DcmVkZW50aWFsID0gaXNUb2tlbkNyZWRlbnRpYWw7XG4vKipcbiAqIEBpbnRlcm5hbFxuICogQHBhcmFtIGFjY2Vzc1Rva2VuIC0gQWNjZXNzIHRva2VuXG4gKiBAcmV0dXJucyBXaGV0aGVyIGEgdG9rZW4gaXMgYmVhcmVyIHR5cGUgb3Igbm90XG4gKi9cbmZ1bmN0aW9uIGlzQmVhcmVyVG9rZW4oYWNjZXNzVG9rZW4pIHtcbiAgICByZXR1cm4gIWFjY2Vzc1Rva2VuLnRva2VuVHlwZSB8fCBhY2Nlc3NUb2tlbi50b2tlblR5cGUgPT09IFwiQmVhcmVyXCI7XG59XG4vKipcbiAqIEBpbnRlcm5hbFxuICogQHBhcmFtIGFjY2Vzc1Rva2VuIC0gQWNjZXNzIHRva2VuXG4gKiBAcmV0dXJucyBXaGV0aGVyIGEgdG9rZW4gaXMgUG9wIHRva2VuIG9yIG5vdFxuICovXG5mdW5jdGlvbiBpc1BvcFRva2VuKGFjY2Vzc1Rva2VuKSB7XG4gICAgcmV0dXJuIGFjY2Vzc1Rva2VuLnRva2VuVHlwZSA9PT0gXCJwb3BcIjtcbn1cbi8qKlxuICogVGVzdHMgYW4gb2JqZWN0IHRvIGRldGVybWluZSB3aGV0aGVyIGl0IGltcGxlbWVudHMgVG9rZW5DcmVkZW50aWFsLlxuICpcbiAqIEBwYXJhbSBjcmVkZW50aWFsIC0gVGhlIGFzc3VtZWQgVG9rZW5DcmVkZW50aWFsIHRvIGJlIHRlc3RlZC5cbiAqL1xuZnVuY3Rpb24gaXNUb2tlbkNyZWRlbnRpYWwoY3JlZGVudGlhbCkge1xuICAgIC8vIENoZWNrIGZvciBhbiBvYmplY3Qgd2l0aCBhICdnZXRUb2tlbicgZnVuY3Rpb24gYW5kIHBvc3NpYmx5IHdpdGhcbiAgICAvLyBhICdzaWduUmVxdWVzdCcgZnVuY3Rpb24uICBXZSBkbyB0aGlzIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGF0XG4gICAgLy8gYSBTZXJ2aWNlQ2xpZW50Q3JlZGVudGlhbHMgaW1wbGVtZW50b3IgKGxpa2UgVG9rZW5DbGllbnRDcmVkZW50aWFsc1xuICAgIC8vIGluIG1zLXJlc3Qtbm9kZWF1dGgpIGRvZXNuJ3QgZ2V0IG1pc3Rha2VuIGZvciBhIFRva2VuQ3JlZGVudGlhbCBpZlxuICAgIC8vIGl0IGRvZXNuJ3QgYWN0dWFsbHkgaW1wbGVtZW50IFRva2VuQ3JlZGVudGlhbCBhbHNvLlxuICAgIGNvbnN0IGNhc3RDcmVkZW50aWFsID0gY3JlZGVudGlhbDtcbiAgICByZXR1cm4gKGNhc3RDcmVkZW50aWFsICYmXG4gICAgICAgIHR5cGVvZiBjYXN0Q3JlZGVudGlhbC5nZXRUb2tlbiA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgICAgIChjYXN0Q3JlZGVudGlhbC5zaWduUmVxdWVzdCA9PT0gdW5kZWZpbmVkIHx8IGNhc3RDcmVkZW50aWFsLmdldFRva2VuLmxlbmd0aCA+IDApKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRva2VuQ3JlZGVudGlhbC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc1Rva2VuQ3JlZGVudGlhbCA9IGV4cG9ydHMuaXNTQVNDcmVkZW50aWFsID0gZXhwb3J0cy5BenVyZVNBU0NyZWRlbnRpYWwgPSBleHBvcnRzLmlzTmFtZWRLZXlDcmVkZW50aWFsID0gZXhwb3J0cy5BenVyZU5hbWVkS2V5Q3JlZGVudGlhbCA9IGV4cG9ydHMuaXNLZXlDcmVkZW50aWFsID0gZXhwb3J0cy5BenVyZUtleUNyZWRlbnRpYWwgPSB2b2lkIDA7XG52YXIgYXp1cmVLZXlDcmVkZW50aWFsX2pzXzEgPSByZXF1aXJlKFwiLi9henVyZUtleUNyZWRlbnRpYWwuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJBenVyZUtleUNyZWRlbnRpYWxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGF6dXJlS2V5Q3JlZGVudGlhbF9qc18xLkF6dXJlS2V5Q3JlZGVudGlhbDsgfSB9KTtcbnZhciBrZXlDcmVkZW50aWFsX2pzXzEgPSByZXF1aXJlKFwiLi9rZXlDcmVkZW50aWFsLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNLZXlDcmVkZW50aWFsXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBrZXlDcmVkZW50aWFsX2pzXzEuaXNLZXlDcmVkZW50aWFsOyB9IH0pO1xudmFyIGF6dXJlTmFtZWRLZXlDcmVkZW50aWFsX2pzXzEgPSByZXF1aXJlKFwiLi9henVyZU5hbWVkS2V5Q3JlZGVudGlhbC5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkF6dXJlTmFtZWRLZXlDcmVkZW50aWFsXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBhenVyZU5hbWVkS2V5Q3JlZGVudGlhbF9qc18xLkF6dXJlTmFtZWRLZXlDcmVkZW50aWFsOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNOYW1lZEtleUNyZWRlbnRpYWxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGF6dXJlTmFtZWRLZXlDcmVkZW50aWFsX2pzXzEuaXNOYW1lZEtleUNyZWRlbnRpYWw7IH0gfSk7XG52YXIgYXp1cmVTQVNDcmVkZW50aWFsX2pzXzEgPSByZXF1aXJlKFwiLi9henVyZVNBU0NyZWRlbnRpYWwuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJBenVyZVNBU0NyZWRlbnRpYWxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGF6dXJlU0FTQ3JlZGVudGlhbF9qc18xLkF6dXJlU0FTQ3JlZGVudGlhbDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzU0FTQ3JlZGVudGlhbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYXp1cmVTQVNDcmVkZW50aWFsX2pzXzEuaXNTQVNDcmVkZW50aWFsOyB9IH0pO1xudmFyIHRva2VuQ3JlZGVudGlhbF9qc18xID0gcmVxdWlyZShcIi4vdG9rZW5DcmVkZW50aWFsLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNUb2tlbkNyZWRlbnRpYWxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRva2VuQ3JlZGVudGlhbF9qc18xLmlzVG9rZW5DcmVkZW50aWFsOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5waXBlbGluZUNvbnRhaW5zRGlzYWJsZUtlZXBBbGl2ZVBvbGljeSA9IGV4cG9ydHMuY3JlYXRlRGlzYWJsZUtlZXBBbGl2ZVBvbGljeSA9IGV4cG9ydHMuZGlzYWJsZUtlZXBBbGl2ZVBvbGljeU5hbWUgPSB2b2lkIDA7XG5leHBvcnRzLmRpc2FibGVLZWVwQWxpdmVQb2xpY3lOYW1lID0gXCJEaXNhYmxlS2VlcEFsaXZlUG9saWN5XCI7XG5mdW5jdGlvbiBjcmVhdGVEaXNhYmxlS2VlcEFsaXZlUG9saWN5KCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGV4cG9ydHMuZGlzYWJsZUtlZXBBbGl2ZVBvbGljeU5hbWUsXG4gICAgICAgIGFzeW5jIHNlbmRSZXF1ZXN0KHJlcXVlc3QsIG5leHQpIHtcbiAgICAgICAgICAgIHJlcXVlc3QuZGlzYWJsZUtlZXBBbGl2ZSA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gbmV4dChyZXF1ZXN0KTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuZXhwb3J0cy5jcmVhdGVEaXNhYmxlS2VlcEFsaXZlUG9saWN5ID0gY3JlYXRlRGlzYWJsZUtlZXBBbGl2ZVBvbGljeTtcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIHBpcGVsaW5lQ29udGFpbnNEaXNhYmxlS2VlcEFsaXZlUG9saWN5KHBpcGVsaW5lKSB7XG4gICAgcmV0dXJuIHBpcGVsaW5lLmdldE9yZGVyZWRQb2xpY2llcygpLnNvbWUoKHBvbGljeSkgPT4gcG9saWN5Lm5hbWUgPT09IGV4cG9ydHMuZGlzYWJsZUtlZXBBbGl2ZVBvbGljeU5hbWUpO1xufVxuZXhwb3J0cy5waXBlbGluZUNvbnRhaW5zRGlzYWJsZUtlZXBBbGl2ZVBvbGljeSA9IHBpcGVsaW5lQ29udGFpbnNEaXNhYmxlS2VlcEFsaXZlUG9saWN5O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGlzYWJsZUtlZXBBbGl2ZVBvbGljeS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlY29kZVN0cmluZ1RvU3RyaW5nID0gZXhwb3J0cy5kZWNvZGVTdHJpbmcgPSBleHBvcnRzLmVuY29kZUJ5dGVBcnJheSA9IGV4cG9ydHMuZW5jb2RlU3RyaW5nID0gdm9pZCAwO1xuLyoqXG4gKiBFbmNvZGVzIGEgc3RyaW5nIGluIGJhc2U2NCBmb3JtYXQuXG4gKiBAcGFyYW0gdmFsdWUgLSB0aGUgc3RyaW5nIHRvIGVuY29kZVxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIGVuY29kZVN0cmluZyh2YWx1ZSkge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbSh2YWx1ZSkudG9TdHJpbmcoXCJiYXNlNjRcIik7XG59XG5leHBvcnRzLmVuY29kZVN0cmluZyA9IGVuY29kZVN0cmluZztcbi8qKlxuICogRW5jb2RlcyBhIGJ5dGUgYXJyYXkgaW4gYmFzZTY0IGZvcm1hdC5cbiAqIEBwYXJhbSB2YWx1ZSAtIHRoZSBVaW50OEFyYXkgdG8gZW5jb2RlXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gZW5jb2RlQnl0ZUFycmF5KHZhbHVlKSB7XG4gICAgY29uc3QgYnVmZmVyVmFsdWUgPSB2YWx1ZSBpbnN0YW5jZW9mIEJ1ZmZlciA/IHZhbHVlIDogQnVmZmVyLmZyb20odmFsdWUuYnVmZmVyKTtcbiAgICByZXR1cm4gYnVmZmVyVmFsdWUudG9TdHJpbmcoXCJiYXNlNjRcIik7XG59XG5leHBvcnRzLmVuY29kZUJ5dGVBcnJheSA9IGVuY29kZUJ5dGVBcnJheTtcbi8qKlxuICogRGVjb2RlcyBhIGJhc2U2NCBzdHJpbmcgaW50byBhIGJ5dGUgYXJyYXkuXG4gKiBAcGFyYW0gdmFsdWUgLSB0aGUgYmFzZTY0IHN0cmluZyB0byBkZWNvZGVcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBkZWNvZGVTdHJpbmcodmFsdWUpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20odmFsdWUsIFwiYmFzZTY0XCIpO1xufVxuZXhwb3J0cy5kZWNvZGVTdHJpbmcgPSBkZWNvZGVTdHJpbmc7XG4vKipcbiAqIERlY29kZXMgYSBiYXNlNjQgc3RyaW5nIGludG8gYSBzdHJpbmcuXG4gKiBAcGFyYW0gdmFsdWUgLSB0aGUgYmFzZTY0IHN0cmluZyB0byBkZWNvZGVcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBkZWNvZGVTdHJpbmdUb1N0cmluZyh2YWx1ZSkge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbSh2YWx1ZSwgXCJiYXNlNjRcIikudG9TdHJpbmcoKTtcbn1cbmV4cG9ydHMuZGVjb2RlU3RyaW5nVG9TdHJpbmcgPSBkZWNvZGVTdHJpbmdUb1N0cmluZztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJhc2U2NC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlhNTF9DSEFSS0VZID0gZXhwb3J0cy5YTUxfQVRUUktFWSA9IHZvaWQgMDtcbi8qKlxuICogRGVmYXVsdCBrZXkgdXNlZCB0byBhY2Nlc3MgdGhlIFhNTCBhdHRyaWJ1dGVzLlxuICovXG5leHBvcnRzLlhNTF9BVFRSS0VZID0gXCIkXCI7XG4vKipcbiAqIERlZmF1bHQga2V5IHVzZWQgdG8gYWNjZXNzIHRoZSBYTUwgdmFsdWUgY29udGVudC5cbiAqL1xuZXhwb3J0cy5YTUxfQ0hBUktFWSA9IFwiX1wiO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW50ZXJmYWNlcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmZsYXR0ZW5SZXNwb25zZSA9IGV4cG9ydHMuaXNWYWxpZFV1aWQgPSBleHBvcnRzLmlzRHVyYXRpb24gPSBleHBvcnRzLmlzUHJpbWl0aXZlQm9keSA9IHZvaWQgMDtcbi8qKlxuICogQSB0eXBlIGd1YXJkIGZvciBhIHByaW1pdGl2ZSByZXNwb25zZSBib2R5LlxuICogQHBhcmFtIHZhbHVlIC0gVmFsdWUgdG8gdGVzdFxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBpc1ByaW1pdGl2ZUJvZHkodmFsdWUsIG1hcHBlclR5cGVOYW1lKSB7XG4gICAgcmV0dXJuIChtYXBwZXJUeXBlTmFtZSAhPT0gXCJDb21wb3NpdGVcIiAmJlxuICAgICAgICBtYXBwZXJUeXBlTmFtZSAhPT0gXCJEaWN0aW9uYXJ5XCIgJiZcbiAgICAgICAgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fFxuICAgICAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiIHx8XG4gICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwiYm9vbGVhblwiIHx8XG4gICAgICAgICAgICAobWFwcGVyVHlwZU5hbWUgPT09IG51bGwgfHwgbWFwcGVyVHlwZU5hbWUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG1hcHBlclR5cGVOYW1lLm1hdGNoKC9eKERhdGV8RGF0ZVRpbWV8RGF0ZVRpbWVSZmMxMTIzfFVuaXhUaW1lfEJ5dGVBcnJheXxCYXNlNjRVcmwpJC9pKSkgIT09XG4gICAgICAgICAgICAgICAgbnVsbCB8fFxuICAgICAgICAgICAgdmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgdmFsdWUgPT09IG51bGwpKTtcbn1cbmV4cG9ydHMuaXNQcmltaXRpdmVCb2R5ID0gaXNQcmltaXRpdmVCb2R5O1xuY29uc3QgdmFsaWRhdGVJU09EdXJhdGlvbiA9IC9eKC18XFwrKT9QKD86KFstK10/WzAtOSwuXSopWSk/KD86KFstK10/WzAtOSwuXSopTSk/KD86KFstK10/WzAtOSwuXSopVyk/KD86KFstK10/WzAtOSwuXSopRCk/KD86VCg/OihbLStdP1swLTksLl0qKUgpPyg/OihbLStdP1swLTksLl0qKU0pPyg/OihbLStdP1swLTksLl0qKVMpPyk/JC87XG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gc3RyaW5nIGlzIGluIElTTyA4NjAxIGZvcm1hdC5cbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBiZSB2YWxpZGF0ZWQgZm9yIElTTyA4NjAxIGR1cmF0aW9uIGZvcm1hdC5cbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBpc0R1cmF0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbGlkYXRlSVNPRHVyYXRpb24udGVzdCh2YWx1ZSk7XG59XG5leHBvcnRzLmlzRHVyYXRpb24gPSBpc0R1cmF0aW9uO1xuY29uc3QgdmFsaWRVdWlkUmVnZXggPSAvXlswLTlhLWZBLUZdezh9LVswLTlhLWZBLUZdezR9LVswLTlhLWZBLUZdezR9LVswLTlhLWZBLUZdezR9LVswLTlhLWZBLUZdezEyfSQvaTtcbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBwcm92aWRlZCB1dWlkIGlzIHZhbGlkLlxuICpcbiAqIEBwYXJhbSB1dWlkIC0gVGhlIHV1aWQgdGhhdCBuZWVkcyB0byBiZSB2YWxpZGF0ZWQuXG4gKlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRVdWlkKHV1aWQpIHtcbiAgICByZXR1cm4gdmFsaWRVdWlkUmVnZXgudGVzdCh1dWlkKTtcbn1cbmV4cG9ydHMuaXNWYWxpZFV1aWQgPSBpc1ZhbGlkVXVpZDtcbi8qKlxuICogTWFwcyB0aGUgcmVzcG9uc2UgYXMgZm9sbG93czpcbiAqIC0gd3JhcHMgdGhlIHJlc3BvbnNlIGJvZHkgaWYgbmVlZGVkICh0eXBpY2FsbHkgaWYgaXRzIHR5cGUgaXMgcHJpbWl0aXZlKS5cbiAqIC0gcmV0dXJucyBudWxsIGlmIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgaGVhZGVycyBhbmQgdGhlIGJvZHkgaXMgZW1wdHkuXG4gKiAtIG90aGVyd2lzZSwgcmV0dXJucyB0aGUgY29tYmluYXRpb24gb2YgdGhlIGhlYWRlcnMgYW5kIHRoZSBib2R5LlxuICpcbiAqIEBwYXJhbSByZXNwb25zZU9iamVjdCAtIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHBhcnNlZCByZXNwb25zZVxuICogQHJldHVybnMgdGhlIHJlc3BvbnNlIHRoYXQgd2lsbCBiZSByZXR1cm5lZCB0byB0aGUgdXNlciB3aGljaCBjYW4gYmUgbnVsbCBhbmQvb3Igd3JhcHBlZFxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBoYW5kbGVOdWxsYWJsZVJlc3BvbnNlQW5kV3JhcHBhYmxlQm9keShyZXNwb25zZU9iamVjdCkge1xuICAgIGNvbnN0IGNvbWJpbmVkSGVhZGVyc0FuZEJvZHkgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHJlc3BvbnNlT2JqZWN0LmhlYWRlcnMpLCByZXNwb25zZU9iamVjdC5ib2R5KTtcbiAgICBpZiAocmVzcG9uc2VPYmplY3QuaGFzTnVsbGFibGVUeXBlICYmXG4gICAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGNvbWJpbmVkSGVhZGVyc0FuZEJvZHkpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VPYmplY3Quc2hvdWxkV3JhcEJvZHkgPyB7IGJvZHk6IG51bGwgfSA6IG51bGw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VPYmplY3Quc2hvdWxkV3JhcEJvZHlcbiAgICAgICAgICAgID8gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCByZXNwb25zZU9iamVjdC5oZWFkZXJzKSwgeyBib2R5OiByZXNwb25zZU9iamVjdC5ib2R5IH0pIDogY29tYmluZWRIZWFkZXJzQW5kQm9keTtcbiAgICB9XG59XG4vKipcbiAqIFRha2UgYSBgRnVsbE9wZXJhdGlvblJlc3BvbnNlYCBhbmQgdHVybiBpdCBpbnRvIGEgZmxhdFxuICogcmVzcG9uc2Ugb2JqZWN0IHRvIGhhbmQgYmFjayB0byB0aGUgY29uc3VtZXIuXG4gKiBAcGFyYW0gZnVsbFJlc3BvbnNlIC0gVGhlIHByb2Nlc3NlZCByZXNwb25zZSBmcm9tIHRoZSBvcGVyYXRpb24gcmVxdWVzdFxuICogQHBhcmFtIHJlc3BvbnNlU3BlYyAtIFRoZSByZXNwb25zZSBtYXAgZnJvbSB0aGUgT3BlcmF0aW9uU3BlY1xuICpcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBmbGF0dGVuUmVzcG9uc2UoZnVsbFJlc3BvbnNlLCByZXNwb25zZVNwZWMpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGNvbnN0IHBhcnNlZEhlYWRlcnMgPSBmdWxsUmVzcG9uc2UucGFyc2VkSGVhZGVycztcbiAgICAvLyBoZWFkIG1ldGhvZHMgbmV2ZXIgaGF2ZSBhIGJvZHksIGJ1dCB3ZSByZXR1cm4gYSBib29sZWFuIHNldCB0byBib2R5IHByb3BlcnR5XG4gICAgLy8gdG8gaW5kaWNhdGUgcHJlc2VuY2UvYWJzZW5jZSBvZiB0aGUgcmVzb3VyY2VcbiAgICBpZiAoZnVsbFJlc3BvbnNlLnJlcXVlc3QubWV0aG9kID09PSBcIkhFQURcIikge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwYXJzZWRIZWFkZXJzKSwgeyBib2R5OiBmdWxsUmVzcG9uc2UucGFyc2VkQm9keSB9KTtcbiAgICB9XG4gICAgY29uc3QgYm9keU1hcHBlciA9IHJlc3BvbnNlU3BlYyAmJiByZXNwb25zZVNwZWMuYm9keU1hcHBlcjtcbiAgICBjb25zdCBpc051bGxhYmxlID0gQm9vbGVhbihib2R5TWFwcGVyID09PSBudWxsIHx8IGJvZHlNYXBwZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGJvZHlNYXBwZXIubnVsbGFibGUpO1xuICAgIGNvbnN0IGV4cGVjdGVkQm9keVR5cGVOYW1lID0gYm9keU1hcHBlciA9PT0gbnVsbCB8fCBib2R5TWFwcGVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBib2R5TWFwcGVyLnR5cGUubmFtZTtcbiAgICAvKiogSWYgdGhlIGJvZHkgaXMgYXNrZWQgZm9yLCB3ZSBsb29rIGF0IHRoZSBleHBlY3RlZCBib2R5IHR5cGUgdG8gaGFuZGxlIGl0ICovXG4gICAgaWYgKGV4cGVjdGVkQm9keVR5cGVOYW1lID09PSBcIlN0cmVhbVwiKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHBhcnNlZEhlYWRlcnMpLCB7IGJsb2JCb2R5OiBmdWxsUmVzcG9uc2UuYmxvYkJvZHksIHJlYWRhYmxlU3RyZWFtQm9keTogZnVsbFJlc3BvbnNlLnJlYWRhYmxlU3RyZWFtQm9keSB9KTtcbiAgICB9XG4gICAgY29uc3QgbW9kZWxQcm9wZXJ0aWVzID0gKGV4cGVjdGVkQm9keVR5cGVOYW1lID09PSBcIkNvbXBvc2l0ZVwiICYmXG4gICAgICAgIGJvZHlNYXBwZXIudHlwZS5tb2RlbFByb3BlcnRpZXMpIHx8XG4gICAgICAgIHt9O1xuICAgIGNvbnN0IGlzUGFnZWFibGVSZXNwb25zZSA9IE9iamVjdC5rZXlzKG1vZGVsUHJvcGVydGllcykuc29tZSgoaykgPT4gbW9kZWxQcm9wZXJ0aWVzW2tdLnNlcmlhbGl6ZWROYW1lID09PSBcIlwiKTtcbiAgICBpZiAoZXhwZWN0ZWRCb2R5VHlwZU5hbWUgPT09IFwiU2VxdWVuY2VcIiB8fCBpc1BhZ2VhYmxlUmVzcG9uc2UpIHtcbiAgICAgICAgY29uc3QgYXJyYXlSZXNwb25zZSA9IChfYSA9IGZ1bGxSZXNwb25zZS5wYXJzZWRCb2R5KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBbXTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMobW9kZWxQcm9wZXJ0aWVzKSkge1xuICAgICAgICAgICAgaWYgKG1vZGVsUHJvcGVydGllc1trZXldLnNlcmlhbGl6ZWROYW1lKSB7XG4gICAgICAgICAgICAgICAgYXJyYXlSZXNwb25zZVtrZXldID0gKF9iID0gZnVsbFJlc3BvbnNlLnBhcnNlZEJvZHkpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYltrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJzZWRIZWFkZXJzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhwYXJzZWRIZWFkZXJzKSkge1xuICAgICAgICAgICAgICAgIGFycmF5UmVzcG9uc2Vba2V5XSA9IHBhcnNlZEhlYWRlcnNba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNOdWxsYWJsZSAmJlxuICAgICAgICAgICAgIWZ1bGxSZXNwb25zZS5wYXJzZWRCb2R5ICYmXG4gICAgICAgICAgICAhcGFyc2VkSGVhZGVycyAmJlxuICAgICAgICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobW9kZWxQcm9wZXJ0aWVzKS5sZW5ndGggPT09IDBcbiAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgOiBhcnJheVJlc3BvbnNlO1xuICAgIH1cbiAgICByZXR1cm4gaGFuZGxlTnVsbGFibGVSZXNwb25zZUFuZFdyYXBwYWJsZUJvZHkoe1xuICAgICAgICBib2R5OiBmdWxsUmVzcG9uc2UucGFyc2VkQm9keSxcbiAgICAgICAgaGVhZGVyczogcGFyc2VkSGVhZGVycyxcbiAgICAgICAgaGFzTnVsbGFibGVUeXBlOiBpc051bGxhYmxlLFxuICAgICAgICBzaG91bGRXcmFwQm9keTogaXNQcmltaXRpdmVCb2R5KGZ1bGxSZXNwb25zZS5wYXJzZWRCb2R5LCBleHBlY3RlZEJvZHlUeXBlTmFtZSksXG4gICAgfSk7XG59XG5leHBvcnRzLmZsYXR0ZW5SZXNwb25zZSA9IGZsYXR0ZW5SZXNwb25zZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTWFwcGVyVHlwZU5hbWVzID0gZXhwb3J0cy5jcmVhdGVTZXJpYWxpemVyID0gdm9pZCAwO1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbmNvbnN0IGJhc2U2NCA9IHRzbGliXzEuX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL2Jhc2U2NC5qc1wiKSk7XG5jb25zdCBpbnRlcmZhY2VzX2pzXzEgPSByZXF1aXJlKFwiLi9pbnRlcmZhY2VzLmpzXCIpO1xuY29uc3QgdXRpbHNfanNfMSA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY2xhc3MgU2VyaWFsaXplckltcGwge1xuICAgIGNvbnN0cnVjdG9yKG1vZGVsTWFwcGVycyA9IHt9LCBpc1hNTCA9IGZhbHNlKSB7XG4gICAgICAgIHRoaXMubW9kZWxNYXBwZXJzID0gbW9kZWxNYXBwZXJzO1xuICAgICAgICB0aGlzLmlzWE1MID0gaXNYTUw7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIFJlbW92aW5nIHRoZSBjb25zdHJhaW50cyB2YWxpZGF0aW9uIG9uIGNsaWVudCBzaWRlLlxuICAgICAqL1xuICAgIHZhbGlkYXRlQ29uc3RyYWludHMobWFwcGVyLCB2YWx1ZSwgb2JqZWN0TmFtZSkge1xuICAgICAgICBjb25zdCBmYWlsVmFsaWRhdGlvbiA9IChjb25zdHJhaW50TmFtZSwgY29uc3RyYWludFZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFwiJHtvYmplY3ROYW1lfVwiIHdpdGggdmFsdWUgXCIke3ZhbHVlfVwiIHNob3VsZCBzYXRpc2Z5IHRoZSBjb25zdHJhaW50IFwiJHtjb25zdHJhaW50TmFtZX1cIjogJHtjb25zdHJhaW50VmFsdWV9LmApO1xuICAgICAgICB9O1xuICAgICAgICBpZiAobWFwcGVyLmNvbnN0cmFpbnRzICYmIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgRXhjbHVzaXZlTWF4aW11bSwgRXhjbHVzaXZlTWluaW11bSwgSW5jbHVzaXZlTWF4aW11bSwgSW5jbHVzaXZlTWluaW11bSwgTWF4SXRlbXMsIE1heExlbmd0aCwgTWluSXRlbXMsIE1pbkxlbmd0aCwgTXVsdGlwbGVPZiwgUGF0dGVybiwgVW5pcXVlSXRlbXMsIH0gPSBtYXBwZXIuY29uc3RyYWludHM7XG4gICAgICAgICAgICBpZiAoRXhjbHVzaXZlTWF4aW11bSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlID49IEV4Y2x1c2l2ZU1heGltdW0pIHtcbiAgICAgICAgICAgICAgICBmYWlsVmFsaWRhdGlvbihcIkV4Y2x1c2l2ZU1heGltdW1cIiwgRXhjbHVzaXZlTWF4aW11bSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoRXhjbHVzaXZlTWluaW11bSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlIDw9IEV4Y2x1c2l2ZU1pbmltdW0pIHtcbiAgICAgICAgICAgICAgICBmYWlsVmFsaWRhdGlvbihcIkV4Y2x1c2l2ZU1pbmltdW1cIiwgRXhjbHVzaXZlTWluaW11bSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoSW5jbHVzaXZlTWF4aW11bSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlID4gSW5jbHVzaXZlTWF4aW11bSkge1xuICAgICAgICAgICAgICAgIGZhaWxWYWxpZGF0aW9uKFwiSW5jbHVzaXZlTWF4aW11bVwiLCBJbmNsdXNpdmVNYXhpbXVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChJbmNsdXNpdmVNaW5pbXVtICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgPCBJbmNsdXNpdmVNaW5pbXVtKSB7XG4gICAgICAgICAgICAgICAgZmFpbFZhbGlkYXRpb24oXCJJbmNsdXNpdmVNaW5pbXVtXCIsIEluY2x1c2l2ZU1pbmltdW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKE1heEl0ZW1zICE9PSB1bmRlZmluZWQgJiYgdmFsdWUubGVuZ3RoID4gTWF4SXRlbXMpIHtcbiAgICAgICAgICAgICAgICBmYWlsVmFsaWRhdGlvbihcIk1heEl0ZW1zXCIsIE1heEl0ZW1zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChNYXhMZW5ndGggIT09IHVuZGVmaW5lZCAmJiB2YWx1ZS5sZW5ndGggPiBNYXhMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBmYWlsVmFsaWRhdGlvbihcIk1heExlbmd0aFwiLCBNYXhMZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKE1pbkl0ZW1zICE9PSB1bmRlZmluZWQgJiYgdmFsdWUubGVuZ3RoIDwgTWluSXRlbXMpIHtcbiAgICAgICAgICAgICAgICBmYWlsVmFsaWRhdGlvbihcIk1pbkl0ZW1zXCIsIE1pbkl0ZW1zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChNaW5MZW5ndGggIT09IHVuZGVmaW5lZCAmJiB2YWx1ZS5sZW5ndGggPCBNaW5MZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBmYWlsVmFsaWRhdGlvbihcIk1pbkxlbmd0aFwiLCBNaW5MZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKE11bHRpcGxlT2YgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAlIE11bHRpcGxlT2YgIT09IDApIHtcbiAgICAgICAgICAgICAgICBmYWlsVmFsaWRhdGlvbihcIk11bHRpcGxlT2ZcIiwgTXVsdGlwbGVPZik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoUGF0dGVybikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhdHRlcm4gPSB0eXBlb2YgUGF0dGVybiA9PT0gXCJzdHJpbmdcIiA/IG5ldyBSZWdFeHAoUGF0dGVybikgOiBQYXR0ZXJuO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIgfHwgdmFsdWUubWF0Y2gocGF0dGVybikgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgZmFpbFZhbGlkYXRpb24oXCJQYXR0ZXJuXCIsIFBhdHRlcm4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChVbmlxdWVJdGVtcyAmJlxuICAgICAgICAgICAgICAgIHZhbHVlLnNvbWUoKGl0ZW0sIGksIGFyKSA9PiBhci5pbmRleE9mKGl0ZW0pICE9PSBpKSkge1xuICAgICAgICAgICAgICAgIGZhaWxWYWxpZGF0aW9uKFwiVW5pcXVlSXRlbXNcIiwgVW5pcXVlSXRlbXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNlcmlhbGl6ZSB0aGUgZ2l2ZW4gb2JqZWN0IGJhc2VkIG9uIGl0cyBtZXRhZGF0YSBkZWZpbmVkIGluIHRoZSBtYXBwZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSBtYXBwZXIgLSBUaGUgbWFwcGVyIHdoaWNoIGRlZmluZXMgdGhlIG1ldGFkYXRhIG9mIHRoZSBzZXJpYWxpemFibGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gb2JqZWN0IC0gQSB2YWxpZCBKYXZhc2NyaXB0IG9iamVjdCB0byBiZSBzZXJpYWxpemVkXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb2JqZWN0TmFtZSAtIE5hbWUgb2YgdGhlIHNlcmlhbGl6ZWQgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIGFkZGl0aW9uYWwgb3B0aW9ucyB0byBzZXJpYWxpemF0aW9uXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBBIHZhbGlkIHNlcmlhbGl6ZWQgSmF2YXNjcmlwdCBvYmplY3RcbiAgICAgKi9cbiAgICBzZXJpYWxpemUobWFwcGVyLCBvYmplY3QsIG9iamVjdE5hbWUsIG9wdGlvbnMgPSB7IHhtbDoge30gfSkge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYztcbiAgICAgICAgY29uc3QgdXBkYXRlZE9wdGlvbnMgPSB7XG4gICAgICAgICAgICB4bWw6IHtcbiAgICAgICAgICAgICAgICByb290TmFtZTogKF9hID0gb3B0aW9ucy54bWwucm9vdE5hbWUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFwiXCIsXG4gICAgICAgICAgICAgICAgaW5jbHVkZVJvb3Q6IChfYiA9IG9wdGlvbnMueG1sLmluY2x1ZGVSb290KSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB4bWxDaGFyS2V5OiAoX2MgPSBvcHRpb25zLnhtbC54bWxDaGFyS2V5KSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiBpbnRlcmZhY2VzX2pzXzEuWE1MX0NIQVJLRVksXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBsZXQgcGF5bG9hZCA9IHt9O1xuICAgICAgICBjb25zdCBtYXBwZXJUeXBlID0gbWFwcGVyLnR5cGUubmFtZTtcbiAgICAgICAgaWYgKCFvYmplY3ROYW1lKSB7XG4gICAgICAgICAgICBvYmplY3ROYW1lID0gbWFwcGVyLnNlcmlhbGl6ZWROYW1lO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXBwZXJUeXBlLm1hdGNoKC9eU2VxdWVuY2UkL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICBwYXlsb2FkID0gW107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hcHBlci5pc0NvbnN0YW50KSB7XG4gICAgICAgICAgICBvYmplY3QgPSBtYXBwZXIuZGVmYXVsdFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRoaXMgdGFibGUgb2YgYWxsb3dlZCB2YWx1ZXMgc2hvdWxkIGhlbHAgZXhwbGFpblxuICAgICAgICAvLyB0aGUgbWFwcGVyLnJlcXVpcmVkIGFuZCBtYXBwZXIubnVsbGFibGUgcHJvcGVydGllcy5cbiAgICAgICAgLy8gWCBtZWFucyBcIm5laXRoZXIgdW5kZWZpbmVkIG9yIG51bGwgYXJlIGFsbG93ZWRcIi5cbiAgICAgICAgLy8gICAgICAgICAgIHx8IHJlcXVpcmVkXG4gICAgICAgIC8vICAgICAgICAgICB8fCB0cnVlICAgICAgfCBmYWxzZVxuICAgICAgICAvLyAgbnVsbGFibGUgfHwgPT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgICAgLy8gICAgICB0cnVlIHx8IG51bGwgICAgICB8IHVuZGVmaW5lZC9udWxsXG4gICAgICAgIC8vICAgICBmYWxzZSB8fCBYICAgICAgICAgfCB1bmRlZmluZWRcbiAgICAgICAgLy8gdW5kZWZpbmVkIHx8IFggICAgICAgICB8IHVuZGVmaW5lZC9udWxsXG4gICAgICAgIGNvbnN0IHsgcmVxdWlyZWQsIG51bGxhYmxlIH0gPSBtYXBwZXI7XG4gICAgICAgIGlmIChyZXF1aXJlZCAmJiBudWxsYWJsZSAmJiBvYmplY3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke29iamVjdE5hbWV9IGNhbm5vdCBiZSB1bmRlZmluZWQuYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlcXVpcmVkICYmICFudWxsYWJsZSAmJiAob2JqZWN0ID09PSB1bmRlZmluZWQgfHwgb2JqZWN0ID09PSBudWxsKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke29iamVjdE5hbWV9IGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC5gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXJlcXVpcmVkICYmIG51bGxhYmxlID09PSBmYWxzZSAmJiBvYmplY3QgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtvYmplY3ROYW1lfSBjYW5ub3QgYmUgbnVsbC5gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob2JqZWN0ID09PSB1bmRlZmluZWQgfHwgb2JqZWN0ID09PSBudWxsKSB7XG4gICAgICAgICAgICBwYXlsb2FkID0gb2JqZWN0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKG1hcHBlclR5cGUubWF0Y2goL15hbnkkL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZCA9IG9iamVjdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1hcHBlclR5cGUubWF0Y2goL14oTnVtYmVyfFN0cmluZ3xCb29sZWFufE9iamVjdHxTdHJlYW18VXVpZCkkL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZCA9IHNlcmlhbGl6ZUJhc2ljVHlwZXMobWFwcGVyVHlwZSwgb2JqZWN0TmFtZSwgb2JqZWN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1hcHBlclR5cGUubWF0Y2goL15FbnVtJC9pKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVudW1NYXBwZXIgPSBtYXBwZXI7XG4gICAgICAgICAgICAgICAgcGF5bG9hZCA9IHNlcmlhbGl6ZUVudW1UeXBlKG9iamVjdE5hbWUsIGVudW1NYXBwZXIudHlwZS5hbGxvd2VkVmFsdWVzLCBvYmplY3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobWFwcGVyVHlwZS5tYXRjaCgvXihEYXRlfERhdGVUaW1lfFRpbWVTcGFufERhdGVUaW1lUmZjMTEyM3xVbml4VGltZSkkL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZCA9IHNlcmlhbGl6ZURhdGVUeXBlcyhtYXBwZXJUeXBlLCBvYmplY3QsIG9iamVjdE5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobWFwcGVyVHlwZS5tYXRjaCgvXkJ5dGVBcnJheSQvaSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBwYXlsb2FkID0gc2VyaWFsaXplQnl0ZUFycmF5VHlwZShvYmplY3ROYW1lLCBvYmplY3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobWFwcGVyVHlwZS5tYXRjaCgvXkJhc2U2NFVybCQvaSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBwYXlsb2FkID0gc2VyaWFsaXplQmFzZTY0VXJsVHlwZShvYmplY3ROYW1lLCBvYmplY3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobWFwcGVyVHlwZS5tYXRjaCgvXlNlcXVlbmNlJC9pKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHBheWxvYWQgPSBzZXJpYWxpemVTZXF1ZW5jZVR5cGUodGhpcywgbWFwcGVyLCBvYmplY3QsIG9iamVjdE5hbWUsIEJvb2xlYW4odGhpcy5pc1hNTCksIHVwZGF0ZWRPcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1hcHBlclR5cGUubWF0Y2goL15EaWN0aW9uYXJ5JC9pKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHBheWxvYWQgPSBzZXJpYWxpemVEaWN0aW9uYXJ5VHlwZSh0aGlzLCBtYXBwZXIsIG9iamVjdCwgb2JqZWN0TmFtZSwgQm9vbGVhbih0aGlzLmlzWE1MKSwgdXBkYXRlZE9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobWFwcGVyVHlwZS5tYXRjaCgvXkNvbXBvc2l0ZSQvaSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBwYXlsb2FkID0gc2VyaWFsaXplQ29tcG9zaXRlVHlwZSh0aGlzLCBtYXBwZXIsIG9iamVjdCwgb2JqZWN0TmFtZSwgQm9vbGVhbih0aGlzLmlzWE1MKSwgdXBkYXRlZE9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZXNlcmlhbGl6ZSB0aGUgZ2l2ZW4gb2JqZWN0IGJhc2VkIG9uIGl0cyBtZXRhZGF0YSBkZWZpbmVkIGluIHRoZSBtYXBwZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSBtYXBwZXIgLSBUaGUgbWFwcGVyIHdoaWNoIGRlZmluZXMgdGhlIG1ldGFkYXRhIG9mIHRoZSBzZXJpYWxpemFibGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVzcG9uc2VCb2R5IC0gQSB2YWxpZCBKYXZhc2NyaXB0IGVudGl0eSB0byBiZSBkZXNlcmlhbGl6ZWRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvYmplY3ROYW1lIC0gTmFtZSBvZiB0aGUgZGVzZXJpYWxpemVkIG9iamVjdFxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBDb250cm9scyBiZWhhdmlvciBvZiBYTUwgcGFyc2VyIGFuZCBidWlsZGVyLlxuICAgICAqXG4gICAgICogQHJldHVybnMgQSB2YWxpZCBkZXNlcmlhbGl6ZWQgSmF2YXNjcmlwdCBvYmplY3RcbiAgICAgKi9cbiAgICBkZXNlcmlhbGl6ZShtYXBwZXIsIHJlc3BvbnNlQm9keSwgb2JqZWN0TmFtZSwgb3B0aW9ucyA9IHsgeG1sOiB7fSB9KSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZDtcbiAgICAgICAgY29uc3QgdXBkYXRlZE9wdGlvbnMgPSB7XG4gICAgICAgICAgICB4bWw6IHtcbiAgICAgICAgICAgICAgICByb290TmFtZTogKF9hID0gb3B0aW9ucy54bWwucm9vdE5hbWUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFwiXCIsXG4gICAgICAgICAgICAgICAgaW5jbHVkZVJvb3Q6IChfYiA9IG9wdGlvbnMueG1sLmluY2x1ZGVSb290KSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB4bWxDaGFyS2V5OiAoX2MgPSBvcHRpb25zLnhtbC54bWxDaGFyS2V5KSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiBpbnRlcmZhY2VzX2pzXzEuWE1MX0NIQVJLRVksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaWdub3JlVW5rbm93blByb3BlcnRpZXM6IChfZCA9IG9wdGlvbnMuaWdub3JlVW5rbm93blByb3BlcnRpZXMpICE9PSBudWxsICYmIF9kICE9PSB2b2lkIDAgPyBfZCA6IGZhbHNlLFxuICAgICAgICB9O1xuICAgICAgICBpZiAocmVzcG9uc2VCb2R5ID09PSB1bmRlZmluZWQgfHwgcmVzcG9uc2VCb2R5ID09PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1hNTCAmJiBtYXBwZXIudHlwZS5uYW1lID09PSBcIlNlcXVlbmNlXCIgJiYgIW1hcHBlci54bWxJc1dyYXBwZWQpIHtcbiAgICAgICAgICAgICAgICAvLyBFZGdlIGNhc2UgZm9yIGVtcHR5IFhNTCBub24td3JhcHBlZCBsaXN0cy4geG1sMmpzIGNhbid0IGRpc3Rpbmd1aXNoXG4gICAgICAgICAgICAgICAgLy8gYmV0d2VlbiB0aGUgbGlzdCBiZWluZyBlbXB0eSB2ZXJzdXMgYmVpbmcgbWlzc2luZyxcbiAgICAgICAgICAgICAgICAvLyBzbyBsZXQncyBkbyB0aGUgbW9yZSB1c2VyLWZyaWVuZGx5IHRoaW5nIGFuZCByZXR1cm4gYW4gZW1wdHkgbGlzdC5cbiAgICAgICAgICAgICAgICByZXNwb25zZUJvZHkgPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHNwZWNpZmljYWxseSBjaGVjayBmb3IgdW5kZWZpbmVkIGFzIGRlZmF1bHQgdmFsdWUgY2FuIGJlIGEgZmFsc2V5IHZhbHVlIGAwLCBcIlwiLCBmYWxzZSwgbnVsbGBcbiAgICAgICAgICAgIGlmIChtYXBwZXIuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZUJvZHkgPSBtYXBwZXIuZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlQm9keTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcGF5bG9hZDtcbiAgICAgICAgY29uc3QgbWFwcGVyVHlwZSA9IG1hcHBlci50eXBlLm5hbWU7XG4gICAgICAgIGlmICghb2JqZWN0TmFtZSkge1xuICAgICAgICAgICAgb2JqZWN0TmFtZSA9IG1hcHBlci5zZXJpYWxpemVkTmFtZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWFwcGVyVHlwZS5tYXRjaCgvXkNvbXBvc2l0ZSQvaSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHBheWxvYWQgPSBkZXNlcmlhbGl6ZUNvbXBvc2l0ZVR5cGUodGhpcywgbWFwcGVyLCByZXNwb25zZUJvZHksIG9iamVjdE5hbWUsIHVwZGF0ZWRPcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzWE1MKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeG1sQ2hhcktleSA9IHVwZGF0ZWRPcHRpb25zLnhtbC54bWxDaGFyS2V5O1xuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAqIElmIHRoZSBtYXBwZXIgc3BlY2lmaWVzIHRoaXMgYXMgYSBub24tY29tcG9zaXRlIHR5cGUgdmFsdWUgYnV0IHRoZSByZXNwb25zZUJvZHkgY29udGFpbnNcbiAgICAgICAgICAgICAgICAgKiBib3RoIGhlYWRlciAoXCIkXCIgaS5lLiwgWE1MX0FUVFJLRVkpIGFuZCBib2R5IChcIiNcIiBpLmUuLCBYTUxfQ0hBUktFWSkgcHJvcGVydGllcyxcbiAgICAgICAgICAgICAgICAgKiB0aGVuIGp1c3QgcmVkdWNlIHRoZSByZXNwb25zZUJvZHkgdmFsdWUgdG8gdGhlIGJvZHkgKFwiI1wiIGkuZS4sIFhNTF9DSEFSS0VZKSBwcm9wZXJ0eS5cbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2VCb2R5W2ludGVyZmFjZXNfanNfMS5YTUxfQVRUUktFWV0gIT09IHVuZGVmaW5lZCAmJiByZXNwb25zZUJvZHlbeG1sQ2hhcktleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICByZXNwb25zZUJvZHkgPSByZXNwb25zZUJvZHlbeG1sQ2hhcktleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1hcHBlclR5cGUubWF0Y2goL15OdW1iZXIkL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZCA9IHBhcnNlRmxvYXQocmVzcG9uc2VCb2R5KTtcbiAgICAgICAgICAgICAgICBpZiAoaXNOYU4ocGF5bG9hZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZCA9IHJlc3BvbnNlQm9keTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtYXBwZXJUeXBlLm1hdGNoKC9eQm9vbGVhbiQvaSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2VCb2R5ID09PSBcInRydWVcIikge1xuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAocmVzcG9uc2VCb2R5ID09PSBcImZhbHNlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZCA9IHJlc3BvbnNlQm9keTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtYXBwZXJUeXBlLm1hdGNoKC9eKFN0cmluZ3xFbnVtfE9iamVjdHxTdHJlYW18VXVpZHxUaW1lU3BhbnxhbnkpJC9pKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHBheWxvYWQgPSByZXNwb25zZUJvZHk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtYXBwZXJUeXBlLm1hdGNoKC9eKERhdGV8RGF0ZVRpbWV8RGF0ZVRpbWVSZmMxMTIzKSQvaSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBwYXlsb2FkID0gbmV3IERhdGUocmVzcG9uc2VCb2R5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1hcHBlclR5cGUubWF0Y2goL15Vbml4VGltZSQvaSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBwYXlsb2FkID0gdW5peFRpbWVUb0RhdGUocmVzcG9uc2VCb2R5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1hcHBlclR5cGUubWF0Y2goL15CeXRlQXJyYXkkL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZCA9IGJhc2U2NC5kZWNvZGVTdHJpbmcocmVzcG9uc2VCb2R5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1hcHBlclR5cGUubWF0Y2goL15CYXNlNjRVcmwkL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZCA9IGJhc2U2NFVybFRvQnl0ZUFycmF5KHJlc3BvbnNlQm9keSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtYXBwZXJUeXBlLm1hdGNoKC9eU2VxdWVuY2UkL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZCA9IGRlc2VyaWFsaXplU2VxdWVuY2VUeXBlKHRoaXMsIG1hcHBlciwgcmVzcG9uc2VCb2R5LCBvYmplY3ROYW1lLCB1cGRhdGVkT3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtYXBwZXJUeXBlLm1hdGNoKC9eRGljdGlvbmFyeSQvaSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBwYXlsb2FkID0gZGVzZXJpYWxpemVEaWN0aW9uYXJ5VHlwZSh0aGlzLCBtYXBwZXIsIHJlc3BvbnNlQm9keSwgb2JqZWN0TmFtZSwgdXBkYXRlZE9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtYXBwZXIuaXNDb25zdGFudCkge1xuICAgICAgICAgICAgcGF5bG9hZCA9IG1hcHBlci5kZWZhdWx0VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgfVxufVxuLyoqXG4gKiBNZXRob2QgdGhhdCBjcmVhdGVzIGFuZCByZXR1cm5zIGEgU2VyaWFsaXplci5cbiAqIEBwYXJhbSBtb2RlbE1hcHBlcnMgLSBLbm93biBtb2RlbHMgdG8gbWFwXG4gKiBAcGFyYW0gaXNYTUwgLSBJZiBYTUwgc2hvdWxkIGJlIHN1cHBvcnRlZFxuICovXG5mdW5jdGlvbiBjcmVhdGVTZXJpYWxpemVyKG1vZGVsTWFwcGVycyA9IHt9LCBpc1hNTCA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIG5ldyBTZXJpYWxpemVySW1wbChtb2RlbE1hcHBlcnMsIGlzWE1MKTtcbn1cbmV4cG9ydHMuY3JlYXRlU2VyaWFsaXplciA9IGNyZWF0ZVNlcmlhbGl6ZXI7XG5mdW5jdGlvbiB0cmltRW5kKHN0ciwgY2gpIHtcbiAgICBsZXQgbGVuID0gc3RyLmxlbmd0aDtcbiAgICB3aGlsZSAobGVuIC0gMSA+PSAwICYmIHN0cltsZW4gLSAxXSA9PT0gY2gpIHtcbiAgICAgICAgLS1sZW47XG4gICAgfVxuICAgIHJldHVybiBzdHIuc3Vic3RyKDAsIGxlbik7XG59XG5mdW5jdGlvbiBidWZmZXJUb0Jhc2U2NFVybChidWZmZXIpIHtcbiAgICBpZiAoIWJ1ZmZlcikge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAoIShidWZmZXIgaW5zdGFuY2VvZiBVaW50OEFycmF5KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFBsZWFzZSBwcm92aWRlIGFuIGlucHV0IG9mIHR5cGUgVWludDhBcnJheSBmb3IgY29udmVydGluZyB0byBCYXNlNjRVcmwuYCk7XG4gICAgfVxuICAgIC8vIFVpbnQ4QXJyYXkgdG8gQmFzZTY0LlxuICAgIGNvbnN0IHN0ciA9IGJhc2U2NC5lbmNvZGVCeXRlQXJyYXkoYnVmZmVyKTtcbiAgICAvLyBCYXNlNjQgdG8gQmFzZTY0VXJsLlxuICAgIHJldHVybiB0cmltRW5kKHN0ciwgXCI9XCIpLnJlcGxhY2UoL1xcKy9nLCBcIi1cIikucmVwbGFjZSgvXFwvL2csIFwiX1wiKTtcbn1cbmZ1bmN0aW9uIGJhc2U2NFVybFRvQnl0ZUFycmF5KHN0cikge1xuICAgIGlmICghc3RyKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmIChzdHIgJiYgdHlwZW9mIHN0ci52YWx1ZU9mKCkgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGxlYXNlIHByb3ZpZGUgYW4gaW5wdXQgb2YgdHlwZSBzdHJpbmcgZm9yIGNvbnZlcnRpbmcgdG8gVWludDhBcnJheVwiKTtcbiAgICB9XG4gICAgLy8gQmFzZTY0VXJsIHRvIEJhc2U2NC5cbiAgICBzdHIgPSBzdHIucmVwbGFjZSgvLS9nLCBcIitcIikucmVwbGFjZSgvXy9nLCBcIi9cIik7XG4gICAgLy8gQmFzZTY0IHRvIFVpbnQ4QXJyYXkuXG4gICAgcmV0dXJuIGJhc2U2NC5kZWNvZGVTdHJpbmcoc3RyKTtcbn1cbmZ1bmN0aW9uIHNwbGl0U2VyaWFsaXplTmFtZShwcm9wKSB7XG4gICAgY29uc3QgY2xhc3NlcyA9IFtdO1xuICAgIGxldCBwYXJ0aWFsY2xhc3MgPSBcIlwiO1xuICAgIGlmIChwcm9wKSB7XG4gICAgICAgIGNvbnN0IHN1YndvcmRzID0gcHJvcC5zcGxpdChcIi5cIik7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBzdWJ3b3Jkcykge1xuICAgICAgICAgICAgaWYgKGl0ZW0uY2hhckF0KGl0ZW0ubGVuZ3RoIC0gMSkgPT09IFwiXFxcXFwiKSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbGNsYXNzICs9IGl0ZW0uc3Vic3RyKDAsIGl0ZW0ubGVuZ3RoIC0gMSkgKyBcIi5cIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHBhcnRpYWxjbGFzcyArPSBpdGVtO1xuICAgICAgICAgICAgICAgIGNsYXNzZXMucHVzaChwYXJ0aWFsY2xhc3MpO1xuICAgICAgICAgICAgICAgIHBhcnRpYWxjbGFzcyA9IFwiXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNsYXNzZXM7XG59XG5mdW5jdGlvbiBkYXRlVG9Vbml4VGltZShkKSB7XG4gICAgaWYgKCFkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZC52YWx1ZU9mKCkgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgZCA9IG5ldyBEYXRlKGQpO1xuICAgIH1cbiAgICByZXR1cm4gTWF0aC5mbG9vcihkLmdldFRpbWUoKSAvIDEwMDApO1xufVxuZnVuY3Rpb24gdW5peFRpbWVUb0RhdGUobikge1xuICAgIGlmICghbikge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IERhdGUobiAqIDEwMDApO1xufVxuZnVuY3Rpb24gc2VyaWFsaXplQmFzaWNUeXBlcyh0eXBlTmFtZSwgb2JqZWN0TmFtZSwgdmFsdWUpIHtcbiAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZU5hbWUubWF0Y2goL15OdW1iZXIkL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke29iamVjdE5hbWV9IHdpdGggdmFsdWUgJHt2YWx1ZX0gbXVzdCBiZSBvZiB0eXBlIG51bWJlci5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlTmFtZS5tYXRjaCgvXlN0cmluZyQvaSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUudmFsdWVPZigpICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke29iamVjdE5hbWV9IHdpdGggdmFsdWUgXCIke3ZhbHVlfVwiIG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZU5hbWUubWF0Y2goL15VdWlkJC9pKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKCEodHlwZW9mIHZhbHVlLnZhbHVlT2YoKSA9PT0gXCJzdHJpbmdcIiAmJiAoMCwgdXRpbHNfanNfMS5pc1ZhbGlkVXVpZCkodmFsdWUpKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtvYmplY3ROYW1lfSB3aXRoIHZhbHVlIFwiJHt2YWx1ZX1cIiBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nIGFuZCBhIHZhbGlkIHV1aWQuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZU5hbWUubWF0Y2goL15Cb29sZWFuJC9pKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7b2JqZWN0TmFtZX0gd2l0aCB2YWx1ZSAke3ZhbHVlfSBtdXN0IGJlIG9mIHR5cGUgYm9vbGVhbi5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlTmFtZS5tYXRjaCgvXlN0cmVhbSQvaSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IG9iamVjdFR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gICAgICAgICAgICBpZiAob2JqZWN0VHlwZSAhPT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiB2YWx1ZS5waXBlICE9PSBcImZ1bmN0aW9uXCIgJiYgLy8gTm9kZUpTLlJlYWRhYmxlU3RyZWFtXG4gICAgICAgICAgICAgICAgdHlwZW9mIHZhbHVlLnRlZSAhPT0gXCJmdW5jdGlvblwiICYmIC8vIGJyb3dzZXIgUmVhZGFibGVTdHJlYW1cbiAgICAgICAgICAgICAgICAhKHZhbHVlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpICYmXG4gICAgICAgICAgICAgICAgIUFycmF5QnVmZmVyLmlzVmlldyh2YWx1ZSkgJiZcbiAgICAgICAgICAgICAgICAvLyBGaWxlIG9iamVjdHMgY291bnQgYXMgYSB0eXBlIG9mIEJsb2IsIHNvIHdlIHdhbnQgdG8gdXNlIGluc3RhbmNlb2YgZXhwbGljaXRseVxuICAgICAgICAgICAgICAgICEoKHR5cGVvZiBCbG9iID09PSBcImZ1bmN0aW9uXCIgfHwgdHlwZW9mIEJsb2IgPT09IFwib2JqZWN0XCIpICYmIHZhbHVlIGluc3RhbmNlb2YgQmxvYikgJiZcbiAgICAgICAgICAgICAgICBvYmplY3RUeXBlICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7b2JqZWN0TmFtZX0gbXVzdCBiZSBhIHN0cmluZywgQmxvYiwgQXJyYXlCdWZmZXIsIEFycmF5QnVmZmVyVmlldywgUmVhZGFibGVTdHJlYW0sIG9yICgpID0+IFJlYWRhYmxlU3RyZWFtLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbn1cbmZ1bmN0aW9uIHNlcmlhbGl6ZUVudW1UeXBlKG9iamVjdE5hbWUsIGFsbG93ZWRWYWx1ZXMsIHZhbHVlKSB7XG4gICAgaWYgKCFhbGxvd2VkVmFsdWVzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgUGxlYXNlIHByb3ZpZGUgYSBzZXQgb2YgYWxsb3dlZFZhbHVlcyB0byB2YWxpZGF0ZSAke29iamVjdE5hbWV9IGFzIGFuIEVudW0gVHlwZS5gKTtcbiAgICB9XG4gICAgY29uc3QgaXNQcmVzZW50ID0gYWxsb3dlZFZhbHVlcy5zb21lKChpdGVtKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgaXRlbS52YWx1ZU9mKCkgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtLnRvTG93ZXJDYXNlKCkgPT09IHZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW0gPT09IHZhbHVlO1xuICAgIH0pO1xuICAgIGlmICghaXNQcmVzZW50KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt2YWx1ZX0gaXMgbm90IGEgdmFsaWQgdmFsdWUgZm9yICR7b2JqZWN0TmFtZX0uIFRoZSB2YWxpZCB2YWx1ZXMgYXJlOiAke0pTT04uc3RyaW5naWZ5KGFsbG93ZWRWYWx1ZXMpfS5gKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuZnVuY3Rpb24gc2VyaWFsaXplQnl0ZUFycmF5VHlwZShvYmplY3ROYW1lLCB2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIGlmICghKHZhbHVlIGluc3RhbmNlb2YgVWludDhBcnJheSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtvYmplY3ROYW1lfSBtdXN0IGJlIG9mIHR5cGUgVWludDhBcnJheS5gKTtcbiAgICAgICAgfVxuICAgICAgICB2YWx1ZSA9IGJhc2U2NC5lbmNvZGVCeXRlQXJyYXkodmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59XG5mdW5jdGlvbiBzZXJpYWxpemVCYXNlNjRVcmxUeXBlKG9iamVjdE5hbWUsIHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKCEodmFsdWUgaW5zdGFuY2VvZiBVaW50OEFycmF5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke29iamVjdE5hbWV9IG11c3QgYmUgb2YgdHlwZSBVaW50OEFycmF5LmApO1xuICAgICAgICB9XG4gICAgICAgIHZhbHVlID0gYnVmZmVyVG9CYXNlNjRVcmwodmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59XG5mdW5jdGlvbiBzZXJpYWxpemVEYXRlVHlwZXModHlwZU5hbWUsIHZhbHVlLCBvYmplY3ROYW1lKSB7XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKHR5cGVOYW1lLm1hdGNoKC9eRGF0ZSQvaSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmICghKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSB8fFxuICAgICAgICAgICAgICAgICh0eXBlb2YgdmFsdWUudmFsdWVPZigpID09PSBcInN0cmluZ1wiICYmICFpc05hTihEYXRlLnBhcnNlKHZhbHVlKSkpKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtvYmplY3ROYW1lfSBtdXN0IGJlIGFuIGluc3RhbmNlb2YgRGF0ZSBvciBhIHN0cmluZyBpbiBJU084NjAxIGZvcm1hdC5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhbHVlID1cbiAgICAgICAgICAgICAgICB2YWx1ZSBpbnN0YW5jZW9mIERhdGVcbiAgICAgICAgICAgICAgICAgICAgPyB2YWx1ZS50b0lTT1N0cmluZygpLnN1YnN0cmluZygwLCAxMClcbiAgICAgICAgICAgICAgICAgICAgOiBuZXcgRGF0ZSh2YWx1ZSkudG9JU09TdHJpbmcoKS5zdWJzdHJpbmcoMCwgMTApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVOYW1lLm1hdGNoKC9eRGF0ZVRpbWUkL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoISh2YWx1ZSBpbnN0YW5jZW9mIERhdGUgfHxcbiAgICAgICAgICAgICAgICAodHlwZW9mIHZhbHVlLnZhbHVlT2YoKSA9PT0gXCJzdHJpbmdcIiAmJiAhaXNOYU4oRGF0ZS5wYXJzZSh2YWx1ZSkpKSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7b2JqZWN0TmFtZX0gbXVzdCBiZSBhbiBpbnN0YW5jZW9mIERhdGUgb3IgYSBzdHJpbmcgaW4gSVNPODYwMSBmb3JtYXQuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlIGluc3RhbmNlb2YgRGF0ZSA/IHZhbHVlLnRvSVNPU3RyaW5nKCkgOiBuZXcgRGF0ZSh2YWx1ZSkudG9JU09TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlTmFtZS5tYXRjaCgvXkRhdGVUaW1lUmZjMTEyMyQvaSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmICghKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSB8fFxuICAgICAgICAgICAgICAgICh0eXBlb2YgdmFsdWUudmFsdWVPZigpID09PSBcInN0cmluZ1wiICYmICFpc05hTihEYXRlLnBhcnNlKHZhbHVlKSkpKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtvYmplY3ROYW1lfSBtdXN0IGJlIGFuIGluc3RhbmNlb2YgRGF0ZSBvciBhIHN0cmluZyBpbiBSRkMtMTEyMyBmb3JtYXQuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlIGluc3RhbmNlb2YgRGF0ZSA/IHZhbHVlLnRvVVRDU3RyaW5nKCkgOiBuZXcgRGF0ZSh2YWx1ZSkudG9VVENTdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlTmFtZS5tYXRjaCgvXlVuaXhUaW1lJC9pKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKCEodmFsdWUgaW5zdGFuY2VvZiBEYXRlIHx8XG4gICAgICAgICAgICAgICAgKHR5cGVvZiB2YWx1ZS52YWx1ZU9mKCkgPT09IFwic3RyaW5nXCIgJiYgIWlzTmFOKERhdGUucGFyc2UodmFsdWUpKSkpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke29iamVjdE5hbWV9IG11c3QgYmUgYW4gaW5zdGFuY2VvZiBEYXRlIG9yIGEgc3RyaW5nIGluIFJGQy0xMTIzL0lTTzg2MDEgZm9ybWF0IGAgK1xuICAgICAgICAgICAgICAgICAgICBgZm9yIGl0IHRvIGJlIHNlcmlhbGl6ZWQgaW4gVW5peFRpbWUvRXBvY2ggZm9ybWF0LmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFsdWUgPSBkYXRlVG9Vbml4VGltZSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZU5hbWUubWF0Y2goL15UaW1lU3BhbiQvaSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmICghKDAsIHV0aWxzX2pzXzEuaXNEdXJhdGlvbikodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke29iamVjdE5hbWV9IG11c3QgYmUgYSBzdHJpbmcgaW4gSVNPIDg2MDEgZm9ybWF0LiBJbnN0ZWFkIHdhcyBcIiR7dmFsdWV9XCIuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuZnVuY3Rpb24gc2VyaWFsaXplU2VxdWVuY2VUeXBlKHNlcmlhbGl6ZXIsIG1hcHBlciwgb2JqZWN0LCBvYmplY3ROYW1lLCBpc1htbCwgb3B0aW9ucykge1xuICAgIHZhciBfYTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkob2JqZWN0KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7b2JqZWN0TmFtZX0gbXVzdCBiZSBvZiB0eXBlIEFycmF5LmApO1xuICAgIH1cbiAgICBsZXQgZWxlbWVudFR5cGUgPSBtYXBwZXIudHlwZS5lbGVtZW50O1xuICAgIGlmICghZWxlbWVudFR5cGUgfHwgdHlwZW9mIGVsZW1lbnRUeXBlICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgZWxlbWVudFwiIG1ldGFkYXRhIGZvciBhbiBBcnJheSBtdXN0IGJlIGRlZmluZWQgaW4gdGhlIGAgK1xuICAgICAgICAgICAgYG1hcHBlciBhbmQgaXQgbXVzdCBvZiB0eXBlIFwib2JqZWN0XCIgaW4gJHtvYmplY3ROYW1lfS5gKTtcbiAgICB9XG4gICAgLy8gUXVpcms6IENvbXBvc2l0ZSBtYXBwZXJzIHJlZmVyZW5jZWQgYnkgYGVsZW1lbnRgIG1pZ2h0XG4gICAgLy8gbm90IGhhdmUgKmFsbCogcHJvcGVydGllcyBkZWNsYXJlZCAobGlrZSB1YmVyUGFyZW50KSxcbiAgICAvLyBzbyBsZXQncyB0cnkgdG8gbG9vayB1cCB0aGUgZnVsbCBkZWZpbml0aW9uIGJ5IG5hbWUuXG4gICAgaWYgKGVsZW1lbnRUeXBlLnR5cGUubmFtZSA9PT0gXCJDb21wb3NpdGVcIiAmJiBlbGVtZW50VHlwZS50eXBlLmNsYXNzTmFtZSkge1xuICAgICAgICBlbGVtZW50VHlwZSA9IChfYSA9IHNlcmlhbGl6ZXIubW9kZWxNYXBwZXJzW2VsZW1lbnRUeXBlLnR5cGUuY2xhc3NOYW1lXSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZWxlbWVudFR5cGU7XG4gICAgfVxuICAgIGNvbnN0IHRlbXBBcnJheSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2JqZWN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZWRWYWx1ZSA9IHNlcmlhbGl6ZXIuc2VyaWFsaXplKGVsZW1lbnRUeXBlLCBvYmplY3RbaV0sIG9iamVjdE5hbWUsIG9wdGlvbnMpO1xuICAgICAgICBpZiAoaXNYbWwgJiYgZWxlbWVudFR5cGUueG1sTmFtZXNwYWNlKSB7XG4gICAgICAgICAgICBjb25zdCB4bWxuc0tleSA9IGVsZW1lbnRUeXBlLnhtbE5hbWVzcGFjZVByZWZpeFxuICAgICAgICAgICAgICAgID8gYHhtbG5zOiR7ZWxlbWVudFR5cGUueG1sTmFtZXNwYWNlUHJlZml4fWBcbiAgICAgICAgICAgICAgICA6IFwieG1sbnNcIjtcbiAgICAgICAgICAgIGlmIChlbGVtZW50VHlwZS50eXBlLm5hbWUgPT09IFwiQ29tcG9zaXRlXCIpIHtcbiAgICAgICAgICAgICAgICB0ZW1wQXJyYXlbaV0gPSBPYmplY3QuYXNzaWduKHt9LCBzZXJpYWxpemVkVmFsdWUpO1xuICAgICAgICAgICAgICAgIHRlbXBBcnJheVtpXVtpbnRlcmZhY2VzX2pzXzEuWE1MX0FUVFJLRVldID0geyBbeG1sbnNLZXldOiBlbGVtZW50VHlwZS54bWxOYW1lc3BhY2UgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRlbXBBcnJheVtpXSA9IHt9O1xuICAgICAgICAgICAgICAgIHRlbXBBcnJheVtpXVtvcHRpb25zLnhtbC54bWxDaGFyS2V5XSA9IHNlcmlhbGl6ZWRWYWx1ZTtcbiAgICAgICAgICAgICAgICB0ZW1wQXJyYXlbaV1baW50ZXJmYWNlc19qc18xLlhNTF9BVFRSS0VZXSA9IHsgW3htbG5zS2V5XTogZWxlbWVudFR5cGUueG1sTmFtZXNwYWNlIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0ZW1wQXJyYXlbaV0gPSBzZXJpYWxpemVkVmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRlbXBBcnJheTtcbn1cbmZ1bmN0aW9uIHNlcmlhbGl6ZURpY3Rpb25hcnlUeXBlKHNlcmlhbGl6ZXIsIG1hcHBlciwgb2JqZWN0LCBvYmplY3ROYW1lLCBpc1htbCwgb3B0aW9ucykge1xuICAgIGlmICh0eXBlb2Ygb2JqZWN0ICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtvYmplY3ROYW1lfSBtdXN0IGJlIG9mIHR5cGUgb2JqZWN0LmApO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZVR5cGUgPSBtYXBwZXIudHlwZS52YWx1ZTtcbiAgICBpZiAoIXZhbHVlVHlwZSB8fCB0eXBlb2YgdmFsdWVUeXBlICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgXCJ2YWx1ZVwiIG1ldGFkYXRhIGZvciBhIERpY3Rpb25hcnkgbXVzdCBiZSBkZWZpbmVkIGluIHRoZSBgICtcbiAgICAgICAgICAgIGBtYXBwZXIgYW5kIGl0IG11c3Qgb2YgdHlwZSBcIm9iamVjdFwiIGluICR7b2JqZWN0TmFtZX0uYCk7XG4gICAgfVxuICAgIGNvbnN0IHRlbXBEaWN0aW9uYXJ5ID0ge307XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMob2JqZWN0KSkge1xuICAgICAgICBjb25zdCBzZXJpYWxpemVkVmFsdWUgPSBzZXJpYWxpemVyLnNlcmlhbGl6ZSh2YWx1ZVR5cGUsIG9iamVjdFtrZXldLCBvYmplY3ROYW1lLCBvcHRpb25zKTtcbiAgICAgICAgLy8gSWYgdGhlIGVsZW1lbnQgbmVlZHMgYW4gWE1MIG5hbWVzcGFjZSB3ZSBuZWVkIHRvIGFkZCBpdCB3aXRoaW4gdGhlICQgcHJvcGVydHlcbiAgICAgICAgdGVtcERpY3Rpb25hcnlba2V5XSA9IGdldFhtbE9iamVjdFZhbHVlKHZhbHVlVHlwZSwgc2VyaWFsaXplZFZhbHVlLCBpc1htbCwgb3B0aW9ucyk7XG4gICAgfVxuICAgIC8vIEFkZCB0aGUgbmFtZXNwYWNlIHRvIHRoZSByb290IGVsZW1lbnQgaWYgbmVlZGVkXG4gICAgaWYgKGlzWG1sICYmIG1hcHBlci54bWxOYW1lc3BhY2UpIHtcbiAgICAgICAgY29uc3QgeG1sbnNLZXkgPSBtYXBwZXIueG1sTmFtZXNwYWNlUHJlZml4ID8gYHhtbG5zOiR7bWFwcGVyLnhtbE5hbWVzcGFjZVByZWZpeH1gIDogXCJ4bWxuc1wiO1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0ZW1wRGljdGlvbmFyeTtcbiAgICAgICAgcmVzdWx0W2ludGVyZmFjZXNfanNfMS5YTUxfQVRUUktFWV0gPSB7IFt4bWxuc0tleV06IG1hcHBlci54bWxOYW1lc3BhY2UgfTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgcmV0dXJuIHRlbXBEaWN0aW9uYXJ5O1xufVxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgYWRkaXRpb25hbFByb3BlcnRpZXMgcHJvcGVydHkgZnJvbSBhIHJlZmVyZW5jZWQgbWFwcGVyXG4gKiBAcGFyYW0gc2VyaWFsaXplciAtIHRoZSBzZXJpYWxpemVyIGNvbnRhaW5pbmcgdGhlIGVudGlyZSBzZXQgb2YgbWFwcGVyc1xuICogQHBhcmFtIG1hcHBlciAtIHRoZSBjb21wb3NpdGUgbWFwcGVyIHRvIHJlc29sdmVcbiAqIEBwYXJhbSBvYmplY3ROYW1lIC0gbmFtZSBvZiB0aGUgb2JqZWN0IGJlaW5nIHNlcmlhbGl6ZWRcbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZUFkZGl0aW9uYWxQcm9wZXJ0aWVzKHNlcmlhbGl6ZXIsIG1hcHBlciwgb2JqZWN0TmFtZSkge1xuICAgIGNvbnN0IGFkZGl0aW9uYWxQcm9wZXJ0aWVzID0gbWFwcGVyLnR5cGUuYWRkaXRpb25hbFByb3BlcnRpZXM7XG4gICAgaWYgKCFhZGRpdGlvbmFsUHJvcGVydGllcyAmJiBtYXBwZXIudHlwZS5jbGFzc05hbWUpIHtcbiAgICAgICAgY29uc3QgbW9kZWxNYXBwZXIgPSByZXNvbHZlUmVmZXJlbmNlZE1hcHBlcihzZXJpYWxpemVyLCBtYXBwZXIsIG9iamVjdE5hbWUpO1xuICAgICAgICByZXR1cm4gbW9kZWxNYXBwZXIgPT09IG51bGwgfHwgbW9kZWxNYXBwZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG1vZGVsTWFwcGVyLnR5cGUuYWRkaXRpb25hbFByb3BlcnRpZXM7XG4gICAgfVxuICAgIHJldHVybiBhZGRpdGlvbmFsUHJvcGVydGllcztcbn1cbi8qKlxuICogRmluZHMgdGhlIG1hcHBlciByZWZlcmVuY2VkIGJ5IGNsYXNzTmFtZVxuICogQHBhcmFtIHNlcmlhbGl6ZXIgLSB0aGUgc2VyaWFsaXplciBjb250YWluaW5nIHRoZSBlbnRpcmUgc2V0IG9mIG1hcHBlcnNcbiAqIEBwYXJhbSBtYXBwZXIgLSB0aGUgY29tcG9zaXRlIG1hcHBlciB0byByZXNvbHZlXG4gKiBAcGFyYW0gb2JqZWN0TmFtZSAtIG5hbWUgb2YgdGhlIG9iamVjdCBiZWluZyBzZXJpYWxpemVkXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVSZWZlcmVuY2VkTWFwcGVyKHNlcmlhbGl6ZXIsIG1hcHBlciwgb2JqZWN0TmFtZSkge1xuICAgIGNvbnN0IGNsYXNzTmFtZSA9IG1hcHBlci50eXBlLmNsYXNzTmFtZTtcbiAgICBpZiAoIWNsYXNzTmFtZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENsYXNzIG5hbWUgZm9yIG1vZGVsIFwiJHtvYmplY3ROYW1lfVwiIGlzIG5vdCBwcm92aWRlZCBpbiB0aGUgbWFwcGVyIFwiJHtKU09OLnN0cmluZ2lmeShtYXBwZXIsIHVuZGVmaW5lZCwgMil9XCIuYCk7XG4gICAgfVxuICAgIHJldHVybiBzZXJpYWxpemVyLm1vZGVsTWFwcGVyc1tjbGFzc05hbWVdO1xufVxuLyoqXG4gKiBSZXNvbHZlcyBhIGNvbXBvc2l0ZSBtYXBwZXIncyBtb2RlbFByb3BlcnRpZXMuXG4gKiBAcGFyYW0gc2VyaWFsaXplciAtIHRoZSBzZXJpYWxpemVyIGNvbnRhaW5pbmcgdGhlIGVudGlyZSBzZXQgb2YgbWFwcGVyc1xuICogQHBhcmFtIG1hcHBlciAtIHRoZSBjb21wb3NpdGUgbWFwcGVyIHRvIHJlc29sdmVcbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZU1vZGVsUHJvcGVydGllcyhzZXJpYWxpemVyLCBtYXBwZXIsIG9iamVjdE5hbWUpIHtcbiAgICBsZXQgbW9kZWxQcm9wcyA9IG1hcHBlci50eXBlLm1vZGVsUHJvcGVydGllcztcbiAgICBpZiAoIW1vZGVsUHJvcHMpIHtcbiAgICAgICAgY29uc3QgbW9kZWxNYXBwZXIgPSByZXNvbHZlUmVmZXJlbmNlZE1hcHBlcihzZXJpYWxpemVyLCBtYXBwZXIsIG9iamVjdE5hbWUpO1xuICAgICAgICBpZiAoIW1vZGVsTWFwcGVyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYG1hcHBlcigpIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZCBmb3IgbW9kZWwgXCIke21hcHBlci50eXBlLmNsYXNzTmFtZX1cIi5gKTtcbiAgICAgICAgfVxuICAgICAgICBtb2RlbFByb3BzID0gbW9kZWxNYXBwZXIgPT09IG51bGwgfHwgbW9kZWxNYXBwZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG1vZGVsTWFwcGVyLnR5cGUubW9kZWxQcm9wZXJ0aWVzO1xuICAgICAgICBpZiAoIW1vZGVsUHJvcHMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgbW9kZWxQcm9wZXJ0aWVzIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZCBpbiB0aGUgYCArXG4gICAgICAgICAgICAgICAgYG1hcHBlciBcIiR7SlNPTi5zdHJpbmdpZnkobW9kZWxNYXBwZXIpfVwiIG9mIHR5cGUgXCIke21hcHBlci50eXBlLmNsYXNzTmFtZX1cIiBmb3Igb2JqZWN0IFwiJHtvYmplY3ROYW1lfVwiLmApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtb2RlbFByb3BzO1xufVxuZnVuY3Rpb24gc2VyaWFsaXplQ29tcG9zaXRlVHlwZShzZXJpYWxpemVyLCBtYXBwZXIsIG9iamVjdCwgb2JqZWN0TmFtZSwgaXNYbWwsIG9wdGlvbnMpIHtcbiAgICBpZiAoZ2V0UG9seW1vcnBoaWNEaXNjcmltaW5hdG9yUmVjdXJzaXZlbHkoc2VyaWFsaXplciwgbWFwcGVyKSkge1xuICAgICAgICBtYXBwZXIgPSBnZXRQb2x5bW9ycGhpY01hcHBlcihzZXJpYWxpemVyLCBtYXBwZXIsIG9iamVjdCwgXCJjbGllbnROYW1lXCIpO1xuICAgIH1cbiAgICBpZiAob2JqZWN0ICE9PSB1bmRlZmluZWQgJiYgb2JqZWN0ICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSB7fTtcbiAgICAgICAgY29uc3QgbW9kZWxQcm9wcyA9IHJlc29sdmVNb2RlbFByb3BlcnRpZXMoc2VyaWFsaXplciwgbWFwcGVyLCBvYmplY3ROYW1lKTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMobW9kZWxQcm9wcykpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5TWFwcGVyID0gbW9kZWxQcm9wc1trZXldO1xuICAgICAgICAgICAgaWYgKHByb3BlcnR5TWFwcGVyLnJlYWRPbmx5KSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgcHJvcE5hbWU7XG4gICAgICAgICAgICBsZXQgcGFyZW50T2JqZWN0ID0gcGF5bG9hZDtcbiAgICAgICAgICAgIGlmIChzZXJpYWxpemVyLmlzWE1MKSB7XG4gICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5TWFwcGVyLnhtbElzV3JhcHBlZCkge1xuICAgICAgICAgICAgICAgICAgICBwcm9wTmFtZSA9IHByb3BlcnR5TWFwcGVyLnhtbE5hbWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwcm9wTmFtZSA9IHByb3BlcnR5TWFwcGVyLnhtbEVsZW1lbnROYW1lIHx8IHByb3BlcnR5TWFwcGVyLnhtbE5hbWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGF0aHMgPSBzcGxpdFNlcmlhbGl6ZU5hbWUocHJvcGVydHlNYXBwZXIuc2VyaWFsaXplZE5hbWUpO1xuICAgICAgICAgICAgICAgIHByb3BOYW1lID0gcGF0aHMucG9wKCk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBwYXRoTmFtZSBvZiBwYXRocykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZE9iamVjdCA9IHBhcmVudE9iamVjdFtwYXRoTmFtZV07XG4gICAgICAgICAgICAgICAgICAgIGlmICgoY2hpbGRPYmplY3QgPT09IHVuZGVmaW5lZCB8fCBjaGlsZE9iamVjdCA9PT0gbnVsbCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICgob2JqZWN0W2tleV0gIT09IHVuZGVmaW5lZCAmJiBvYmplY3Rba2V5XSAhPT0gbnVsbCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU1hcHBlci5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE9iamVjdFtwYXRoTmFtZV0gPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRPYmplY3QgPSBwYXJlbnRPYmplY3RbcGF0aE5hbWVdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwYXJlbnRPYmplY3QgIT09IHVuZGVmaW5lZCAmJiBwYXJlbnRPYmplY3QgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNYbWwgJiYgbWFwcGVyLnhtbE5hbWVzcGFjZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB4bWxuc0tleSA9IG1hcHBlci54bWxOYW1lc3BhY2VQcmVmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgID8gYHhtbG5zOiR7bWFwcGVyLnhtbE5hbWVzcGFjZVByZWZpeH1gXG4gICAgICAgICAgICAgICAgICAgICAgICA6IFwieG1sbnNcIjtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50T2JqZWN0W2ludGVyZmFjZXNfanNfMS5YTUxfQVRUUktFWV0gPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHBhcmVudE9iamVjdFtpbnRlcmZhY2VzX2pzXzEuWE1MX0FUVFJLRVldKSwgeyBbeG1sbnNLZXldOiBtYXBwZXIueG1sTmFtZXNwYWNlIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wZXJ0eU9iamVjdE5hbWUgPSBwcm9wZXJ0eU1hcHBlci5zZXJpYWxpemVkTmFtZSAhPT0gXCJcIlxuICAgICAgICAgICAgICAgICAgICA/IG9iamVjdE5hbWUgKyBcIi5cIiArIHByb3BlcnR5TWFwcGVyLnNlcmlhbGl6ZWROYW1lXG4gICAgICAgICAgICAgICAgICAgIDogb2JqZWN0TmFtZTtcbiAgICAgICAgICAgICAgICBsZXQgdG9TZXJpYWxpemUgPSBvYmplY3Rba2V5XTtcbiAgICAgICAgICAgICAgICBjb25zdCBwb2x5bW9ycGhpY0Rpc2NyaW1pbmF0b3IgPSBnZXRQb2x5bW9ycGhpY0Rpc2NyaW1pbmF0b3JSZWN1cnNpdmVseShzZXJpYWxpemVyLCBtYXBwZXIpO1xuICAgICAgICAgICAgICAgIGlmIChwb2x5bW9ycGhpY0Rpc2NyaW1pbmF0b3IgJiZcbiAgICAgICAgICAgICAgICAgICAgcG9seW1vcnBoaWNEaXNjcmltaW5hdG9yLmNsaWVudE5hbWUgPT09IGtleSAmJlxuICAgICAgICAgICAgICAgICAgICAodG9TZXJpYWxpemUgPT09IHVuZGVmaW5lZCB8fCB0b1NlcmlhbGl6ZSA9PT0gbnVsbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9TZXJpYWxpemUgPSBtYXBwZXIuc2VyaWFsaXplZE5hbWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHNlcmlhbGl6ZWRWYWx1ZSA9IHNlcmlhbGl6ZXIuc2VyaWFsaXplKHByb3BlcnR5TWFwcGVyLCB0b1NlcmlhbGl6ZSwgcHJvcGVydHlPYmplY3ROYW1lLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICBpZiAoc2VyaWFsaXplZFZhbHVlICE9PSB1bmRlZmluZWQgJiYgcHJvcE5hbWUgIT09IHVuZGVmaW5lZCAmJiBwcm9wTmFtZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGdldFhtbE9iamVjdFZhbHVlKHByb3BlcnR5TWFwcGVyLCBzZXJpYWxpemVkVmFsdWUsIGlzWG1sLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzWG1sICYmIHByb3BlcnR5TWFwcGVyLnhtbElzQXR0cmlidXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBYTUxfQVRUUktFWSwgaS5lLiwgJCBpcyB0aGUga2V5IGF0dHJpYnV0ZXMgYXJlIGtlcHQgdW5kZXIgaW4geG1sMmpzLlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBrZWVwcyB0aGluZ3Mgc2ltcGxlIHdoaWxlIHByZXZlbnRpbmcgbmFtZSBjb2xsaXNpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpdGggbmFtZXMgaW4gdXNlciBkb2N1bWVudHMuXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRPYmplY3RbaW50ZXJmYWNlc19qc18xLlhNTF9BVFRSS0VZXSA9IHBhcmVudE9iamVjdFtpbnRlcmZhY2VzX2pzXzEuWE1MX0FUVFJLRVldIHx8IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50T2JqZWN0W2ludGVyZmFjZXNfanNfMS5YTUxfQVRUUktFWV1bcHJvcE5hbWVdID0gc2VyaWFsaXplZFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzWG1sICYmIHByb3BlcnR5TWFwcGVyLnhtbElzV3JhcHBlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50T2JqZWN0W3Byb3BOYW1lXSA9IHsgW3Byb3BlcnR5TWFwcGVyLnhtbEVsZW1lbnROYW1lXTogdmFsdWUgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE9iamVjdFtwcm9wTmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhZGRpdGlvbmFsUHJvcGVydGllc01hcHBlciA9IHJlc29sdmVBZGRpdGlvbmFsUHJvcGVydGllcyhzZXJpYWxpemVyLCBtYXBwZXIsIG9iamVjdE5hbWUpO1xuICAgICAgICBpZiAoYWRkaXRpb25hbFByb3BlcnRpZXNNYXBwZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BOYW1lcyA9IE9iamVjdC5rZXlzKG1vZGVsUHJvcHMpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBjbGllbnRQcm9wTmFtZSBpbiBvYmplY3QpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0FkZGl0aW9uYWxQcm9wZXJ0eSA9IHByb3BOYW1lcy5ldmVyeSgocG4pID0+IHBuICE9PSBjbGllbnRQcm9wTmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKGlzQWRkaXRpb25hbFByb3BlcnR5KSB7XG4gICAgICAgICAgICAgICAgICAgIHBheWxvYWRbY2xpZW50UHJvcE5hbWVdID0gc2VyaWFsaXplci5zZXJpYWxpemUoYWRkaXRpb25hbFByb3BlcnRpZXNNYXBwZXIsIG9iamVjdFtjbGllbnRQcm9wTmFtZV0sIG9iamVjdE5hbWUgKyAnW1wiJyArIGNsaWVudFByb3BOYW1lICsgJ1wiXScsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdDtcbn1cbmZ1bmN0aW9uIGdldFhtbE9iamVjdFZhbHVlKHByb3BlcnR5TWFwcGVyLCBzZXJpYWxpemVkVmFsdWUsIGlzWG1sLCBvcHRpb25zKSB7XG4gICAgaWYgKCFpc1htbCB8fCAhcHJvcGVydHlNYXBwZXIueG1sTmFtZXNwYWNlKSB7XG4gICAgICAgIHJldHVybiBzZXJpYWxpemVkVmFsdWU7XG4gICAgfVxuICAgIGNvbnN0IHhtbG5zS2V5ID0gcHJvcGVydHlNYXBwZXIueG1sTmFtZXNwYWNlUHJlZml4XG4gICAgICAgID8gYHhtbG5zOiR7cHJvcGVydHlNYXBwZXIueG1sTmFtZXNwYWNlUHJlZml4fWBcbiAgICAgICAgOiBcInhtbG5zXCI7XG4gICAgY29uc3QgeG1sTmFtZXNwYWNlID0geyBbeG1sbnNLZXldOiBwcm9wZXJ0eU1hcHBlci54bWxOYW1lc3BhY2UgfTtcbiAgICBpZiAoW1wiQ29tcG9zaXRlXCJdLmluY2x1ZGVzKHByb3BlcnR5TWFwcGVyLnR5cGUubmFtZSkpIHtcbiAgICAgICAgaWYgKHNlcmlhbGl6ZWRWYWx1ZVtpbnRlcmZhY2VzX2pzXzEuWE1MX0FUVFJLRVldKSB7XG4gICAgICAgICAgICByZXR1cm4gc2VyaWFsaXplZFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gT2JqZWN0LmFzc2lnbih7fSwgc2VyaWFsaXplZFZhbHVlKTtcbiAgICAgICAgICAgIHJlc3VsdFtpbnRlcmZhY2VzX2pzXzEuWE1MX0FUVFJLRVldID0geG1sTmFtZXNwYWNlO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICByZXN1bHRbb3B0aW9ucy54bWwueG1sQ2hhcktleV0gPSBzZXJpYWxpemVkVmFsdWU7XG4gICAgcmVzdWx0W2ludGVyZmFjZXNfanNfMS5YTUxfQVRUUktFWV0gPSB4bWxOYW1lc3BhY2U7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIGlzU3BlY2lhbFhtbFByb3BlcnR5KHByb3BlcnR5TmFtZSwgb3B0aW9ucykge1xuICAgIHJldHVybiBbaW50ZXJmYWNlc19qc18xLlhNTF9BVFRSS0VZLCBvcHRpb25zLnhtbC54bWxDaGFyS2V5XS5pbmNsdWRlcyhwcm9wZXJ0eU5hbWUpO1xufVxuZnVuY3Rpb24gZGVzZXJpYWxpemVDb21wb3NpdGVUeXBlKHNlcmlhbGl6ZXIsIG1hcHBlciwgcmVzcG9uc2VCb2R5LCBvYmplY3ROYW1lLCBvcHRpb25zKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICBjb25zdCB4bWxDaGFyS2V5ID0gKF9hID0gb3B0aW9ucy54bWwueG1sQ2hhcktleSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogaW50ZXJmYWNlc19qc18xLlhNTF9DSEFSS0VZO1xuICAgIGlmIChnZXRQb2x5bW9ycGhpY0Rpc2NyaW1pbmF0b3JSZWN1cnNpdmVseShzZXJpYWxpemVyLCBtYXBwZXIpKSB7XG4gICAgICAgIG1hcHBlciA9IGdldFBvbHltb3JwaGljTWFwcGVyKHNlcmlhbGl6ZXIsIG1hcHBlciwgcmVzcG9uc2VCb2R5LCBcInNlcmlhbGl6ZWROYW1lXCIpO1xuICAgIH1cbiAgICBjb25zdCBtb2RlbFByb3BzID0gcmVzb2x2ZU1vZGVsUHJvcGVydGllcyhzZXJpYWxpemVyLCBtYXBwZXIsIG9iamVjdE5hbWUpO1xuICAgIGxldCBpbnN0YW5jZSA9IHt9O1xuICAgIGNvbnN0IGhhbmRsZWRQcm9wZXJ0eU5hbWVzID0gW107XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMobW9kZWxQcm9wcykpIHtcbiAgICAgICAgY29uc3QgcHJvcGVydHlNYXBwZXIgPSBtb2RlbFByb3BzW2tleV07XG4gICAgICAgIGNvbnN0IHBhdGhzID0gc3BsaXRTZXJpYWxpemVOYW1lKG1vZGVsUHJvcHNba2V5XS5zZXJpYWxpemVkTmFtZSk7XG4gICAgICAgIGhhbmRsZWRQcm9wZXJ0eU5hbWVzLnB1c2gocGF0aHNbMF0pO1xuICAgICAgICBjb25zdCB7IHNlcmlhbGl6ZWROYW1lLCB4bWxOYW1lLCB4bWxFbGVtZW50TmFtZSB9ID0gcHJvcGVydHlNYXBwZXI7XG4gICAgICAgIGxldCBwcm9wZXJ0eU9iamVjdE5hbWUgPSBvYmplY3ROYW1lO1xuICAgICAgICBpZiAoc2VyaWFsaXplZE5hbWUgIT09IFwiXCIgJiYgc2VyaWFsaXplZE5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcHJvcGVydHlPYmplY3ROYW1lID0gb2JqZWN0TmFtZSArIFwiLlwiICsgc2VyaWFsaXplZE5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaGVhZGVyQ29sbGVjdGlvblByZWZpeCA9IHByb3BlcnR5TWFwcGVyLmhlYWRlckNvbGxlY3Rpb25QcmVmaXg7XG4gICAgICAgIGlmIChoZWFkZXJDb2xsZWN0aW9uUHJlZml4KSB7XG4gICAgICAgICAgICBjb25zdCBkaWN0aW9uYXJ5ID0ge307XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGhlYWRlcktleSBvZiBPYmplY3Qua2V5cyhyZXNwb25zZUJvZHkpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhlYWRlcktleS5zdGFydHNXaXRoKGhlYWRlckNvbGxlY3Rpb25QcmVmaXgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRpY3Rpb25hcnlbaGVhZGVyS2V5LnN1YnN0cmluZyhoZWFkZXJDb2xsZWN0aW9uUHJlZml4Lmxlbmd0aCldID0gc2VyaWFsaXplci5kZXNlcmlhbGl6ZShwcm9wZXJ0eU1hcHBlci50eXBlLnZhbHVlLCByZXNwb25zZUJvZHlbaGVhZGVyS2V5XSwgcHJvcGVydHlPYmplY3ROYW1lLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaGFuZGxlZFByb3BlcnR5TmFtZXMucHVzaChoZWFkZXJLZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW5zdGFuY2Vba2V5XSA9IGRpY3Rpb25hcnk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc2VyaWFsaXplci5pc1hNTCkge1xuICAgICAgICAgICAgaWYgKHByb3BlcnR5TWFwcGVyLnhtbElzQXR0cmlidXRlICYmIHJlc3BvbnNlQm9keVtpbnRlcmZhY2VzX2pzXzEuWE1MX0FUVFJLRVldKSB7XG4gICAgICAgICAgICAgICAgaW5zdGFuY2Vba2V5XSA9IHNlcmlhbGl6ZXIuZGVzZXJpYWxpemUocHJvcGVydHlNYXBwZXIsIHJlc3BvbnNlQm9keVtpbnRlcmZhY2VzX2pzXzEuWE1MX0FUVFJLRVldW3htbE5hbWVdLCBwcm9wZXJ0eU9iamVjdE5hbWUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAocHJvcGVydHlNYXBwZXIueG1sSXNNc1RleHQpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2VCb2R5W3htbENoYXJLZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2Vba2V5XSA9IHJlc3BvbnNlQm9keVt4bWxDaGFyS2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIHJlc3BvbnNlQm9keSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICAvLyBUaGUgc3BlY2lhbCBjYXNlIHdoZXJlIHhtbCBwYXJzZXIgcGFyc2VzIFwiPE5hbWU+Y29udGVudDwvTmFtZT5cIiBpbnRvIEpTT04gb2ZcbiAgICAgICAgICAgICAgICAgICAgLy8gICBgeyBuYW1lOiBcImNvbnRlbnRcIn1gIGluc3RlYWQgb2YgYHsgbmFtZTogeyBcIl9cIjogXCJjb250ZW50XCIgfX1gXG4gICAgICAgICAgICAgICAgICAgIGluc3RhbmNlW2tleV0gPSByZXNwb25zZUJvZHk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvcGVydHlOYW1lID0geG1sRWxlbWVudE5hbWUgfHwgeG1sTmFtZSB8fCBzZXJpYWxpemVkTmFtZTtcbiAgICAgICAgICAgICAgICBpZiAocHJvcGVydHlNYXBwZXIueG1sSXNXcmFwcGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIC8qIGEgbGlzdCBvZiA8eG1sRWxlbWVudE5hbWU+IHdyYXBwZWQgYnkgPHhtbE5hbWU+XG4gICAgICAgICAgICAgICAgICAgICAgRm9yIHRoZSB4bWwgZXhhbXBsZSBiZWxvd1xuICAgICAgICAgICAgICAgICAgICAgICAgPENvcnM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxDb3JzUnVsZT4uLi48L0NvcnNSdWxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8Q29yc1J1bGU+Li4uPC9Db3JzUnVsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQ29ycz5cbiAgICAgICAgICAgICAgICAgICAgICB0aGUgcmVzcG9uc2VCb2R5IGhhc1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBDb3JzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29yc1J1bGU6IFt7Li4ufSwgey4uLn1dXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB4bWxOYW1lIGlzIFwiQ29yc1wiIGFuZCB4bWxFbGVtZW50TmFtZSBpc1wiQ29yc1J1bGVcIi5cbiAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgd3JhcHBlZCA9IHJlc3BvbnNlQm9keVt4bWxOYW1lXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudExpc3QgPSAoX2IgPSB3cmFwcGVkID09PSBudWxsIHx8IHdyYXBwZWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHdyYXBwZWRbeG1sRWxlbWVudE5hbWVdKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBbXTtcbiAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2Vba2V5XSA9IHNlcmlhbGl6ZXIuZGVzZXJpYWxpemUocHJvcGVydHlNYXBwZXIsIGVsZW1lbnRMaXN0LCBwcm9wZXJ0eU9iamVjdE5hbWUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBoYW5kbGVkUHJvcGVydHlOYW1lcy5wdXNoKHhtbE5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvcGVydHkgPSByZXNwb25zZUJvZHlbcHJvcGVydHlOYW1lXTtcbiAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2Vba2V5XSA9IHNlcmlhbGl6ZXIuZGVzZXJpYWxpemUocHJvcGVydHlNYXBwZXIsIHByb3BlcnR5LCBwcm9wZXJ0eU9iamVjdE5hbWUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBoYW5kbGVkUHJvcGVydHlOYW1lcy5wdXNoKHByb3BlcnR5TmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gZGVzZXJpYWxpemUgdGhlIHByb3BlcnR5IGlmIGl0IGlzIHByZXNlbnQgaW4gdGhlIHByb3ZpZGVkIHJlc3BvbnNlQm9keSBpbnN0YW5jZVxuICAgICAgICAgICAgbGV0IHByb3BlcnR5SW5zdGFuY2U7XG4gICAgICAgICAgICBsZXQgcmVzID0gcmVzcG9uc2VCb2R5O1xuICAgICAgICAgICAgLy8gdHJhdmVyc2luZyB0aGUgb2JqZWN0IHN0ZXAgYnkgc3RlcC5cbiAgICAgICAgICAgIGxldCBzdGVwcyA9IDA7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgcGF0aHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXJlcylcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgc3RlcHMrKztcbiAgICAgICAgICAgICAgICByZXMgPSByZXNbaXRlbV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBvbmx5IGFjY2VwdCBudWxsIHdoZW4gcmVhY2hpbmcgdGhlIGxhc3QgcG9zaXRpb24gb2Ygb2JqZWN0IG90aGVyd2lzZSBpdCB3b3VsZCBiZSB1bmRlZmluZWRcbiAgICAgICAgICAgIGlmIChyZXMgPT09IG51bGwgJiYgc3RlcHMgPCBwYXRocy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXMgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcm9wZXJ0eUluc3RhbmNlID0gcmVzO1xuICAgICAgICAgICAgY29uc3QgcG9seW1vcnBoaWNEaXNjcmltaW5hdG9yID0gbWFwcGVyLnR5cGUucG9seW1vcnBoaWNEaXNjcmltaW5hdG9yO1xuICAgICAgICAgICAgLy8gY2hlY2tpbmcgdGhhdCB0aGUgbW9kZWwgcHJvcGVydHkgbmFtZSAoa2V5KShleDogXCJmaXNodHlwZVwiKSBhbmQgdGhlXG4gICAgICAgICAgICAvLyBjbGllbnROYW1lIG9mIHRoZSBwb2x5bW9ycGhpY0Rpc2NyaW1pbmF0b3Ige21ldGFkYXRhfSAoZXg6IFwiZmlzaHR5cGVcIilcbiAgICAgICAgICAgIC8vIGluc3RlYWQgb2YgdGhlIHNlcmlhbGl6ZWROYW1lIG9mIHRoZSBwb2x5bW9ycGhpY0Rpc2NyaW1pbmF0b3IgKGV4OiBcImZpc2gudHlwZVwiKVxuICAgICAgICAgICAgLy8gaXMgYSBiZXR0ZXIgYXBwcm9hY2guIFRoZSBnZW5lcmF0b3IgaXMgbm90IGNvbnNpc3RlbnQgd2l0aCBlc2NhcGluZyAnXFwuJyBpbiB0aGVcbiAgICAgICAgICAgIC8vIHNlcmlhbGl6ZWROYW1lIG9mIHRoZSBwcm9wZXJ0eSAoZXg6IFwiZmlzaFxcLnR5cGVcIikgdGhhdCBpcyBtYXJrZWQgYXMgcG9seW1vcnBoaWMgZGlzY3JpbWluYXRvclxuICAgICAgICAgICAgLy8gYW5kIHRoZSBzZXJpYWxpemVkTmFtZSBvZiB0aGUgbWV0YWRhdGEgcG9seW1vcnBoaWNEaXNjcmltaW5hdG9yIChleDogXCJmaXNoLnR5cGVcIikuIEhvd2V2ZXIsXG4gICAgICAgICAgICAvLyB0aGUgY2xpZW50TmFtZSB0cmFuc2Zvcm1hdGlvbiBvZiB0aGUgcG9seW1vcnBoaWNEaXNjcmltaW5hdG9yIChleDogXCJmaXNodHlwZVwiKSBhbmRcbiAgICAgICAgICAgIC8vIHRoZSB0cmFuc2Zvcm1hdGlvbiBvZiBtb2RlbCBwcm9wZXJ0eSBuYW1lIChleDogXCJmaXNodHlwZVwiKSBpcyBkb25lIGNvbnNpc3RlbnRseS5cbiAgICAgICAgICAgIC8vIEhlbmNlLCBpdCBpcyBhIHNhZmVyIGJldCB0byByZWx5IG9uIHRoZSBjbGllbnROYW1lIG9mIHRoZSBwb2x5bW9ycGhpY0Rpc2NyaW1pbmF0b3IuXG4gICAgICAgICAgICBpZiAocG9seW1vcnBoaWNEaXNjcmltaW5hdG9yICYmXG4gICAgICAgICAgICAgICAga2V5ID09PSBwb2x5bW9ycGhpY0Rpc2NyaW1pbmF0b3IuY2xpZW50TmFtZSAmJlxuICAgICAgICAgICAgICAgIChwcm9wZXJ0eUluc3RhbmNlID09PSB1bmRlZmluZWQgfHwgcHJvcGVydHlJbnN0YW5jZSA9PT0gbnVsbCkpIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eUluc3RhbmNlID0gbWFwcGVyLnNlcmlhbGl6ZWROYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHNlcmlhbGl6ZWRWYWx1ZTtcbiAgICAgICAgICAgIC8vIHBhZ2luZ1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzcG9uc2VCb2R5W2tleV0pICYmIG1vZGVsUHJvcHNba2V5XS5zZXJpYWxpemVkTmFtZSA9PT0gXCJcIikge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5SW5zdGFuY2UgPSByZXNwb25zZUJvZHlba2V5XTtcbiAgICAgICAgICAgICAgICBjb25zdCBhcnJheUluc3RhbmNlID0gc2VyaWFsaXplci5kZXNlcmlhbGl6ZShwcm9wZXJ0eU1hcHBlciwgcHJvcGVydHlJbnN0YW5jZSwgcHJvcGVydHlPYmplY3ROYW1lLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAvLyBDb3B5IG92ZXIgYW55IHByb3BlcnRpZXMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBhZGRlZCBpbnRvIHRoZSBpbnN0YW5jZSwgd2hlcmUgdGhleSBkb1xuICAgICAgICAgICAgICAgIC8vIG5vdCBleGlzdCBvbiB0aGUgbmV3bHkgZGUtc2VyaWFsaXplZCBhcnJheVxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKGluc3RhbmNlKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhcnJheUluc3RhbmNlLCBrKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlJbnN0YW5jZVtrXSA9IHY7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaW5zdGFuY2UgPSBhcnJheUluc3RhbmNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAocHJvcGVydHlJbnN0YW5jZSAhPT0gdW5kZWZpbmVkIHx8IHByb3BlcnR5TWFwcGVyLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZFZhbHVlID0gc2VyaWFsaXplci5kZXNlcmlhbGl6ZShwcm9wZXJ0eU1hcHBlciwgcHJvcGVydHlJbnN0YW5jZSwgcHJvcGVydHlPYmplY3ROYW1lLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICBpbnN0YW5jZVtrZXldID0gc2VyaWFsaXplZFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGFkZGl0aW9uYWxQcm9wZXJ0aWVzTWFwcGVyID0gbWFwcGVyLnR5cGUuYWRkaXRpb25hbFByb3BlcnRpZXM7XG4gICAgaWYgKGFkZGl0aW9uYWxQcm9wZXJ0aWVzTWFwcGVyKSB7XG4gICAgICAgIGNvbnN0IGlzQWRkaXRpb25hbFByb3BlcnR5ID0gKHJlc3BvbnNlUHJvcE5hbWUpID0+IHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY2xpZW50UHJvcE5hbWUgaW4gbW9kZWxQcm9wcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGhzID0gc3BsaXRTZXJpYWxpemVOYW1lKG1vZGVsUHJvcHNbY2xpZW50UHJvcE5hbWVdLnNlcmlhbGl6ZWROYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAocGF0aHNbMF0gPT09IHJlc3BvbnNlUHJvcE5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9O1xuICAgICAgICBmb3IgKGNvbnN0IHJlc3BvbnNlUHJvcE5hbWUgaW4gcmVzcG9uc2VCb2R5KSB7XG4gICAgICAgICAgICBpZiAoaXNBZGRpdGlvbmFsUHJvcGVydHkocmVzcG9uc2VQcm9wTmFtZSkpIHtcbiAgICAgICAgICAgICAgICBpbnN0YW5jZVtyZXNwb25zZVByb3BOYW1lXSA9IHNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoYWRkaXRpb25hbFByb3BlcnRpZXNNYXBwZXIsIHJlc3BvbnNlQm9keVtyZXNwb25zZVByb3BOYW1lXSwgb2JqZWN0TmFtZSArICdbXCInICsgcmVzcG9uc2VQcm9wTmFtZSArICdcIl0nLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChyZXNwb25zZUJvZHkgJiYgIW9wdGlvbnMuaWdub3JlVW5rbm93blByb3BlcnRpZXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocmVzcG9uc2VCb2R5KSkge1xuICAgICAgICAgICAgaWYgKGluc3RhbmNlW2tleV0gPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICFoYW5kbGVkUHJvcGVydHlOYW1lcy5pbmNsdWRlcyhrZXkpICYmXG4gICAgICAgICAgICAgICAgIWlzU3BlY2lhbFhtbFByb3BlcnR5KGtleSwgb3B0aW9ucykpIHtcbiAgICAgICAgICAgICAgICBpbnN0YW5jZVtrZXldID0gcmVzcG9uc2VCb2R5W2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGluc3RhbmNlO1xufVxuZnVuY3Rpb24gZGVzZXJpYWxpemVEaWN0aW9uYXJ5VHlwZShzZXJpYWxpemVyLCBtYXBwZXIsIHJlc3BvbnNlQm9keSwgb2JqZWN0TmFtZSwgb3B0aW9ucykge1xuICAgIC8qIGpzaGludCB2YWxpZHRoaXM6IHRydWUgKi9cbiAgICBjb25zdCB2YWx1ZSA9IG1hcHBlci50eXBlLnZhbHVlO1xuICAgIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgXCJ2YWx1ZVwiIG1ldGFkYXRhIGZvciBhIERpY3Rpb25hcnkgbXVzdCBiZSBkZWZpbmVkIGluIHRoZSBgICtcbiAgICAgICAgICAgIGBtYXBwZXIgYW5kIGl0IG11c3Qgb2YgdHlwZSBcIm9iamVjdFwiIGluICR7b2JqZWN0TmFtZX1gKTtcbiAgICB9XG4gICAgaWYgKHJlc3BvbnNlQm9keSkge1xuICAgICAgICBjb25zdCB0ZW1wRGljdGlvbmFyeSA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhyZXNwb25zZUJvZHkpKSB7XG4gICAgICAgICAgICB0ZW1wRGljdGlvbmFyeVtrZXldID0gc2VyaWFsaXplci5kZXNlcmlhbGl6ZSh2YWx1ZSwgcmVzcG9uc2VCb2R5W2tleV0sIG9iamVjdE5hbWUsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0ZW1wRGljdGlvbmFyeTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3BvbnNlQm9keTtcbn1cbmZ1bmN0aW9uIGRlc2VyaWFsaXplU2VxdWVuY2VUeXBlKHNlcmlhbGl6ZXIsIG1hcHBlciwgcmVzcG9uc2VCb2R5LCBvYmplY3ROYW1lLCBvcHRpb25zKSB7XG4gICAgdmFyIF9hO1xuICAgIGxldCBlbGVtZW50ID0gbWFwcGVyLnR5cGUuZWxlbWVudDtcbiAgICBpZiAoIWVsZW1lbnQgfHwgdHlwZW9mIGVsZW1lbnQgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBlbGVtZW50XCIgbWV0YWRhdGEgZm9yIGFuIEFycmF5IG11c3QgYmUgZGVmaW5lZCBpbiB0aGUgYCArXG4gICAgICAgICAgICBgbWFwcGVyIGFuZCBpdCBtdXN0IG9mIHR5cGUgXCJvYmplY3RcIiBpbiAke29iamVjdE5hbWV9YCk7XG4gICAgfVxuICAgIGlmIChyZXNwb25zZUJvZHkpIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJlc3BvbnNlQm9keSkpIHtcbiAgICAgICAgICAgIC8vIHhtbDJqcyB3aWxsIGludGVycHJldCBhIHNpbmdsZSBlbGVtZW50IGFycmF5IGFzIGp1c3QgdGhlIGVsZW1lbnQsIHNvIGZvcmNlIGl0IHRvIGJlIGFuIGFycmF5XG4gICAgICAgICAgICByZXNwb25zZUJvZHkgPSBbcmVzcG9uc2VCb2R5XTtcbiAgICAgICAgfVxuICAgICAgICAvLyBRdWlyazogQ29tcG9zaXRlIG1hcHBlcnMgcmVmZXJlbmNlZCBieSBgZWxlbWVudGAgbWlnaHRcbiAgICAgICAgLy8gbm90IGhhdmUgKmFsbCogcHJvcGVydGllcyBkZWNsYXJlZCAobGlrZSB1YmVyUGFyZW50KSxcbiAgICAgICAgLy8gc28gbGV0J3MgdHJ5IHRvIGxvb2sgdXAgdGhlIGZ1bGwgZGVmaW5pdGlvbiBieSBuYW1lLlxuICAgICAgICBpZiAoZWxlbWVudC50eXBlLm5hbWUgPT09IFwiQ29tcG9zaXRlXCIgJiYgZWxlbWVudC50eXBlLmNsYXNzTmFtZSkge1xuICAgICAgICAgICAgZWxlbWVudCA9IChfYSA9IHNlcmlhbGl6ZXIubW9kZWxNYXBwZXJzW2VsZW1lbnQudHlwZS5jbGFzc05hbWVdKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBlbGVtZW50O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRlbXBBcnJheSA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc3BvbnNlQm9keS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGVtcEFycmF5W2ldID0gc2VyaWFsaXplci5kZXNlcmlhbGl6ZShlbGVtZW50LCByZXNwb25zZUJvZHlbaV0sIGAke29iamVjdE5hbWV9WyR7aX1dYCwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRlbXBBcnJheTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3BvbnNlQm9keTtcbn1cbmZ1bmN0aW9uIGdldEluZGV4RGlzY3JpbWluYXRvcihkaXNjcmltaW5hdG9ycywgZGlzY3JpbWluYXRvclZhbHVlLCB0eXBlTmFtZSkge1xuICAgIGNvbnN0IHR5cGVOYW1lc1RvQ2hlY2sgPSBbdHlwZU5hbWVdO1xuICAgIHdoaWxlICh0eXBlTmFtZXNUb0NoZWNrLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBjdXJyZW50TmFtZSA9IHR5cGVOYW1lc1RvQ2hlY2suc2hpZnQoKTtcbiAgICAgICAgY29uc3QgaW5kZXhEaXNjcmltaW5hdG9yID0gZGlzY3JpbWluYXRvclZhbHVlID09PSBjdXJyZW50TmFtZVxuICAgICAgICAgICAgPyBkaXNjcmltaW5hdG9yVmFsdWVcbiAgICAgICAgICAgIDogY3VycmVudE5hbWUgKyBcIi5cIiArIGRpc2NyaW1pbmF0b3JWYWx1ZTtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkaXNjcmltaW5hdG9ycywgaW5kZXhEaXNjcmltaW5hdG9yKSkge1xuICAgICAgICAgICAgcmV0dXJuIGRpc2NyaW1pbmF0b3JzW2luZGV4RGlzY3JpbWluYXRvcl07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtuYW1lLCBtYXBwZXJdIG9mIE9iamVjdC5lbnRyaWVzKGRpc2NyaW1pbmF0b3JzKSkge1xuICAgICAgICAgICAgICAgIGlmIChuYW1lLnN0YXJ0c1dpdGgoY3VycmVudE5hbWUgKyBcIi5cIikgJiZcbiAgICAgICAgICAgICAgICAgICAgbWFwcGVyLnR5cGUudWJlclBhcmVudCA9PT0gY3VycmVudE5hbWUgJiZcbiAgICAgICAgICAgICAgICAgICAgbWFwcGVyLnR5cGUuY2xhc3NOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGVOYW1lc1RvQ2hlY2sucHVzaChtYXBwZXIudHlwZS5jbGFzc05hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gZ2V0UG9seW1vcnBoaWNNYXBwZXIoc2VyaWFsaXplciwgbWFwcGVyLCBvYmplY3QsIHBvbHltb3JwaGljUHJvcGVydHlOYW1lKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IHBvbHltb3JwaGljRGlzY3JpbWluYXRvciA9IGdldFBvbHltb3JwaGljRGlzY3JpbWluYXRvclJlY3Vyc2l2ZWx5KHNlcmlhbGl6ZXIsIG1hcHBlcik7XG4gICAgaWYgKHBvbHltb3JwaGljRGlzY3JpbWluYXRvcikge1xuICAgICAgICBsZXQgZGlzY3JpbWluYXRvck5hbWUgPSBwb2x5bW9ycGhpY0Rpc2NyaW1pbmF0b3JbcG9seW1vcnBoaWNQcm9wZXJ0eU5hbWVdO1xuICAgICAgICBpZiAoZGlzY3JpbWluYXRvck5hbWUpIHtcbiAgICAgICAgICAgIC8vIFRoZSBzZXJpYWxpemVkTmFtZSBtaWdodCBoYXZlIFxcXFwsIHdoaWNoIHdlIGp1c3Qgd2FudCB0byBpZ25vcmVcbiAgICAgICAgICAgIGlmIChwb2x5bW9ycGhpY1Byb3BlcnR5TmFtZSA9PT0gXCJzZXJpYWxpemVkTmFtZVwiKSB7XG4gICAgICAgICAgICAgICAgZGlzY3JpbWluYXRvck5hbWUgPSBkaXNjcmltaW5hdG9yTmFtZS5yZXBsYWNlKC9cXFxcL2dpLCBcIlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRpc2NyaW1pbmF0b3JWYWx1ZSA9IG9iamVjdFtkaXNjcmltaW5hdG9yTmFtZV07XG4gICAgICAgICAgICBjb25zdCB0eXBlTmFtZSA9IChfYSA9IG1hcHBlci50eXBlLnViZXJQYXJlbnQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IG1hcHBlci50eXBlLmNsYXNzTmFtZTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZGlzY3JpbWluYXRvclZhbHVlID09PSBcInN0cmluZ1wiICYmIHR5cGVOYW1lKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcG9seW1vcnBoaWNNYXBwZXIgPSBnZXRJbmRleERpc2NyaW1pbmF0b3Ioc2VyaWFsaXplci5tb2RlbE1hcHBlcnMuZGlzY3JpbWluYXRvcnMsIGRpc2NyaW1pbmF0b3JWYWx1ZSwgdHlwZU5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChwb2x5bW9ycGhpY01hcHBlcikge1xuICAgICAgICAgICAgICAgICAgICBtYXBwZXIgPSBwb2x5bW9ycGhpY01hcHBlcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hcHBlcjtcbn1cbmZ1bmN0aW9uIGdldFBvbHltb3JwaGljRGlzY3JpbWluYXRvclJlY3Vyc2l2ZWx5KHNlcmlhbGl6ZXIsIG1hcHBlcikge1xuICAgIHJldHVybiAobWFwcGVyLnR5cGUucG9seW1vcnBoaWNEaXNjcmltaW5hdG9yIHx8XG4gICAgICAgIGdldFBvbHltb3JwaGljRGlzY3JpbWluYXRvclNhZmVseShzZXJpYWxpemVyLCBtYXBwZXIudHlwZS51YmVyUGFyZW50KSB8fFxuICAgICAgICBnZXRQb2x5bW9ycGhpY0Rpc2NyaW1pbmF0b3JTYWZlbHkoc2VyaWFsaXplciwgbWFwcGVyLnR5cGUuY2xhc3NOYW1lKSk7XG59XG5mdW5jdGlvbiBnZXRQb2x5bW9ycGhpY0Rpc2NyaW1pbmF0b3JTYWZlbHkoc2VyaWFsaXplciwgdHlwZU5hbWUpIHtcbiAgICByZXR1cm4gKHR5cGVOYW1lICYmXG4gICAgICAgIHNlcmlhbGl6ZXIubW9kZWxNYXBwZXJzW3R5cGVOYW1lXSAmJlxuICAgICAgICBzZXJpYWxpemVyLm1vZGVsTWFwcGVyc1t0eXBlTmFtZV0udHlwZS5wb2x5bW9ycGhpY0Rpc2NyaW1pbmF0b3IpO1xufVxuLyoqXG4gKiBLbm93biB0eXBlcyBvZiBNYXBwZXJzXG4gKi9cbmV4cG9ydHMuTWFwcGVyVHlwZU5hbWVzID0ge1xuICAgIEJhc2U2NFVybDogXCJCYXNlNjRVcmxcIixcbiAgICBCb29sZWFuOiBcIkJvb2xlYW5cIixcbiAgICBCeXRlQXJyYXk6IFwiQnl0ZUFycmF5XCIsXG4gICAgQ29tcG9zaXRlOiBcIkNvbXBvc2l0ZVwiLFxuICAgIERhdGU6IFwiRGF0ZVwiLFxuICAgIERhdGVUaW1lOiBcIkRhdGVUaW1lXCIsXG4gICAgRGF0ZVRpbWVSZmMxMTIzOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgIERpY3Rpb25hcnk6IFwiRGljdGlvbmFyeVwiLFxuICAgIEVudW06IFwiRW51bVwiLFxuICAgIE51bWJlcjogXCJOdW1iZXJcIixcbiAgICBPYmplY3Q6IFwiT2JqZWN0XCIsXG4gICAgU2VxdWVuY2U6IFwiU2VxdWVuY2VcIixcbiAgICBTdHJpbmc6IFwiU3RyaW5nXCIsXG4gICAgU3RyZWFtOiBcIlN0cmVhbVwiLFxuICAgIFRpbWVTcGFuOiBcIlRpbWVTcGFuXCIsXG4gICAgVW5peFRpbWU6IFwiVW5peFRpbWVcIixcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zZXJpYWxpemVyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc3RhdGUgPSB2b2lkIDA7XG4vKipcbiAqIEhvbGRzIHRoZSBzaW5nbGV0b24gb3BlcmF0aW9uUmVxdWVzdE1hcCwgdG8gYmUgc2hhcmVkIGFjcm9zcyBDSlMgYW5kIEVTTSBpbXBvcnRzLlxuICovXG5leHBvcnRzLnN0YXRlID0ge1xuICAgIG9wZXJhdGlvblJlcXVlc3RNYXA6IG5ldyBXZWFrTWFwKCksXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3RhdGUtY2pzLmNqcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldE9wZXJhdGlvblJlcXVlc3RJbmZvID0gZXhwb3J0cy5nZXRPcGVyYXRpb25Bcmd1bWVudFZhbHVlRnJvbVBhcmFtZXRlciA9IHZvaWQgMDtcbmNvbnN0IHN0YXRlX2pzXzEgPSByZXF1aXJlKFwiLi9zdGF0ZS5qc1wiKTtcbi8qKlxuICogQGludGVybmFsXG4gKiBSZXRyaWV2ZXMgdGhlIHZhbHVlIHRvIHVzZSBmb3IgYSBnaXZlbiBvcGVyYXRpb24gYXJndW1lbnRcbiAqIEBwYXJhbSBvcGVyYXRpb25Bcmd1bWVudHMgLSBUaGUgYXJndW1lbnRzIHBhc3NlZCBmcm9tIHRoZSBnZW5lcmF0ZWQgY2xpZW50XG4gKiBAcGFyYW0gcGFyYW1ldGVyIC0gVGhlIHBhcmFtZXRlciBkZXNjcmlwdGlvblxuICogQHBhcmFtIGZhbGxiYWNrT2JqZWN0IC0gSWYgc29tZXRoaW5nIGlzbid0IGZvdW5kIGluIHRoZSBhcmd1bWVudHMgYmFnLCBsb29rIGhlcmUuXG4gKiAgR2VuZXJhbGx5IHVzZWQgdG8gbG9vayBhdCB0aGUgc2VydmljZSBjbGllbnQgcHJvcGVydGllcy5cbiAqL1xuZnVuY3Rpb24gZ2V0T3BlcmF0aW9uQXJndW1lbnRWYWx1ZUZyb21QYXJhbWV0ZXIob3BlcmF0aW9uQXJndW1lbnRzLCBwYXJhbWV0ZXIsIGZhbGxiYWNrT2JqZWN0KSB7XG4gICAgbGV0IHBhcmFtZXRlclBhdGggPSBwYXJhbWV0ZXIucGFyYW1ldGVyUGF0aDtcbiAgICBjb25zdCBwYXJhbWV0ZXJNYXBwZXIgPSBwYXJhbWV0ZXIubWFwcGVyO1xuICAgIGxldCB2YWx1ZTtcbiAgICBpZiAodHlwZW9mIHBhcmFtZXRlclBhdGggPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcGFyYW1ldGVyUGF0aCA9IFtwYXJhbWV0ZXJQYXRoXTtcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocGFyYW1ldGVyUGF0aCkpIHtcbiAgICAgICAgaWYgKHBhcmFtZXRlclBhdGgubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgaWYgKHBhcmFtZXRlck1hcHBlci5pc0NvbnN0YW50KSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJhbWV0ZXJNYXBwZXIuZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbGV0IHByb3BlcnR5U2VhcmNoUmVzdWx0ID0gZ2V0UHJvcGVydHlGcm9tUGFyYW1ldGVyUGF0aChvcGVyYXRpb25Bcmd1bWVudHMsIHBhcmFtZXRlclBhdGgpO1xuICAgICAgICAgICAgICAgIGlmICghcHJvcGVydHlTZWFyY2hSZXN1bHQucHJvcGVydHlGb3VuZCAmJiBmYWxsYmFja09iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVNlYXJjaFJlc3VsdCA9IGdldFByb3BlcnR5RnJvbVBhcmFtZXRlclBhdGgoZmFsbGJhY2tPYmplY3QsIHBhcmFtZXRlclBhdGgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgdXNlRGVmYXVsdFZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKCFwcm9wZXJ0eVNlYXJjaFJlc3VsdC5wcm9wZXJ0eUZvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIHVzZURlZmF1bHRWYWx1ZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJNYXBwZXIucmVxdWlyZWQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGFyYW1ldGVyUGF0aFswXSA9PT0gXCJvcHRpb25zXCIgJiYgcGFyYW1ldGVyUGF0aC5sZW5ndGggPT09IDIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHVzZURlZmF1bHRWYWx1ZSA/IHBhcmFtZXRlck1hcHBlci5kZWZhdWx0VmFsdWUgOiBwcm9wZXJ0eVNlYXJjaFJlc3VsdC5wcm9wZXJ0eVZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAocGFyYW1ldGVyTWFwcGVyLnJlcXVpcmVkKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgcHJvcGVydHlOYW1lIGluIHBhcmFtZXRlclBhdGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5TWFwcGVyID0gcGFyYW1ldGVyTWFwcGVyLnR5cGUubW9kZWxQcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV07XG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0eVBhdGggPSBwYXJhbWV0ZXJQYXRoW3Byb3BlcnR5TmFtZV07XG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0eVZhbHVlID0gZ2V0T3BlcmF0aW9uQXJndW1lbnRWYWx1ZUZyb21QYXJhbWV0ZXIob3BlcmF0aW9uQXJndW1lbnRzLCB7XG4gICAgICAgICAgICAgICAgcGFyYW1ldGVyUGF0aDogcHJvcGVydHlQYXRoLFxuICAgICAgICAgICAgICAgIG1hcHBlcjogcHJvcGVydHlNYXBwZXIsXG4gICAgICAgICAgICB9LCBmYWxsYmFja09iamVjdCk7XG4gICAgICAgICAgICBpZiAocHJvcGVydHlWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YWx1ZVtwcm9wZXJ0eU5hbWVdID0gcHJvcGVydHlWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59XG5leHBvcnRzLmdldE9wZXJhdGlvbkFyZ3VtZW50VmFsdWVGcm9tUGFyYW1ldGVyID0gZ2V0T3BlcmF0aW9uQXJndW1lbnRWYWx1ZUZyb21QYXJhbWV0ZXI7XG5mdW5jdGlvbiBnZXRQcm9wZXJ0eUZyb21QYXJhbWV0ZXJQYXRoKHBhcmVudCwgcGFyYW1ldGVyUGF0aCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHsgcHJvcGVydHlGb3VuZDogZmFsc2UgfTtcbiAgICBsZXQgaSA9IDA7XG4gICAgZm9yICg7IGkgPCBwYXJhbWV0ZXJQYXRoLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGNvbnN0IHBhcmFtZXRlclBhdGhQYXJ0ID0gcGFyYW1ldGVyUGF0aFtpXTtcbiAgICAgICAgLy8gTWFrZSBzdXJlIHRvIGNoZWNrIGluaGVyaXRlZCBwcm9wZXJ0aWVzIHRvbywgc28gZG9uJ3QgdXNlIGhhc093blByb3BlcnR5KCkuXG4gICAgICAgIGlmIChwYXJlbnQgJiYgcGFyYW1ldGVyUGF0aFBhcnQgaW4gcGFyZW50KSB7XG4gICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnRbcGFyYW1ldGVyUGF0aFBhcnRdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGkgPT09IHBhcmFtZXRlclBhdGgubGVuZ3RoKSB7XG4gICAgICAgIHJlc3VsdC5wcm9wZXJ0eVZhbHVlID0gcGFyZW50O1xuICAgICAgICByZXN1bHQucHJvcGVydHlGb3VuZCA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5jb25zdCBvcmlnaW5hbFJlcXVlc3RTeW1ib2wgPSBTeW1ib2wuZm9yKFwiQGF6dXJlL2NvcmUtY2xpZW50IG9yaWdpbmFsIHJlcXVlc3RcIik7XG5mdW5jdGlvbiBoYXNPcmlnaW5hbFJlcXVlc3QocmVxdWVzdCkge1xuICAgIHJldHVybiBvcmlnaW5hbFJlcXVlc3RTeW1ib2wgaW4gcmVxdWVzdDtcbn1cbmZ1bmN0aW9uIGdldE9wZXJhdGlvblJlcXVlc3RJbmZvKHJlcXVlc3QpIHtcbiAgICBpZiAoaGFzT3JpZ2luYWxSZXF1ZXN0KHJlcXVlc3QpKSB7XG4gICAgICAgIHJldHVybiBnZXRPcGVyYXRpb25SZXF1ZXN0SW5mbyhyZXF1ZXN0W29yaWdpbmFsUmVxdWVzdFN5bWJvbF0pO1xuICAgIH1cbiAgICBsZXQgaW5mbyA9IHN0YXRlX2pzXzEuc3RhdGUub3BlcmF0aW9uUmVxdWVzdE1hcC5nZXQocmVxdWVzdCk7XG4gICAgaWYgKCFpbmZvKSB7XG4gICAgICAgIGluZm8gPSB7fTtcbiAgICAgICAgc3RhdGVfanNfMS5zdGF0ZS5vcGVyYXRpb25SZXF1ZXN0TWFwLnNldChyZXF1ZXN0LCBpbmZvKTtcbiAgICB9XG4gICAgcmV0dXJuIGluZm87XG59XG5leHBvcnRzLmdldE9wZXJhdGlvblJlcXVlc3RJbmZvID0gZ2V0T3BlcmF0aW9uUmVxdWVzdEluZm87XG4vLyMgc291cmNlTWFwcGluZ1VSTD1vcGVyYXRpb25IZWxwZXJzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZGVzZXJpYWxpemF0aW9uUG9saWN5ID0gZXhwb3J0cy5kZXNlcmlhbGl6YXRpb25Qb2xpY3lOYW1lID0gdm9pZCAwO1xuY29uc3QgaW50ZXJmYWNlc19qc18xID0gcmVxdWlyZShcIi4vaW50ZXJmYWNlcy5qc1wiKTtcbmNvbnN0IGNvcmVfcmVzdF9waXBlbGluZV8xID0gcmVxdWlyZShcIkBhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmVcIik7XG5jb25zdCBzZXJpYWxpemVyX2pzXzEgPSByZXF1aXJlKFwiLi9zZXJpYWxpemVyLmpzXCIpO1xuY29uc3Qgb3BlcmF0aW9uSGVscGVyc19qc18xID0gcmVxdWlyZShcIi4vb3BlcmF0aW9uSGVscGVycy5qc1wiKTtcbmNvbnN0IGRlZmF1bHRKc29uQ29udGVudFR5cGVzID0gW1wiYXBwbGljYXRpb24vanNvblwiLCBcInRleHQvanNvblwiXTtcbmNvbnN0IGRlZmF1bHRYbWxDb250ZW50VHlwZXMgPSBbXCJhcHBsaWNhdGlvbi94bWxcIiwgXCJhcHBsaWNhdGlvbi9hdG9tK3htbFwiXTtcbi8qKlxuICogVGhlIHByb2dyYW1tYXRpYyBpZGVudGlmaWVyIG9mIHRoZSBkZXNlcmlhbGl6YXRpb25Qb2xpY3kuXG4gKi9cbmV4cG9ydHMuZGVzZXJpYWxpemF0aW9uUG9saWN5TmFtZSA9IFwiZGVzZXJpYWxpemF0aW9uUG9saWN5XCI7XG4vKipcbiAqIFRoaXMgcG9saWN5IGhhbmRsZXMgcGFyc2luZyBvdXQgcmVzcG9uc2VzIGFjY29yZGluZyB0byBPcGVyYXRpb25TcGVjcyBvbiB0aGUgcmVxdWVzdC5cbiAqL1xuZnVuY3Rpb24gZGVzZXJpYWxpemF0aW9uUG9saWN5KG9wdGlvbnMgPSB7fSkge1xuICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2UsIF9mLCBfZztcbiAgICBjb25zdCBqc29uQ29udGVudFR5cGVzID0gKF9iID0gKF9hID0gb3B0aW9ucy5leHBlY3RlZENvbnRlbnRUeXBlcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmpzb24pICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IGRlZmF1bHRKc29uQ29udGVudFR5cGVzO1xuICAgIGNvbnN0IHhtbENvbnRlbnRUeXBlcyA9IChfZCA9IChfYyA9IG9wdGlvbnMuZXhwZWN0ZWRDb250ZW50VHlwZXMpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy54bWwpICE9PSBudWxsICYmIF9kICE9PSB2b2lkIDAgPyBfZCA6IGRlZmF1bHRYbWxDb250ZW50VHlwZXM7XG4gICAgY29uc3QgcGFyc2VYTUwgPSBvcHRpb25zLnBhcnNlWE1MO1xuICAgIGNvbnN0IHNlcmlhbGl6ZXJPcHRpb25zID0gb3B0aW9ucy5zZXJpYWxpemVyT3B0aW9ucztcbiAgICBjb25zdCB1cGRhdGVkT3B0aW9ucyA9IHtcbiAgICAgICAgeG1sOiB7XG4gICAgICAgICAgICByb290TmFtZTogKF9lID0gc2VyaWFsaXplck9wdGlvbnMgPT09IG51bGwgfHwgc2VyaWFsaXplck9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlcmlhbGl6ZXJPcHRpb25zLnhtbC5yb290TmFtZSkgIT09IG51bGwgJiYgX2UgIT09IHZvaWQgMCA/IF9lIDogXCJcIixcbiAgICAgICAgICAgIGluY2x1ZGVSb290OiAoX2YgPSBzZXJpYWxpemVyT3B0aW9ucyA9PT0gbnVsbCB8fCBzZXJpYWxpemVyT3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VyaWFsaXplck9wdGlvbnMueG1sLmluY2x1ZGVSb290KSAhPT0gbnVsbCAmJiBfZiAhPT0gdm9pZCAwID8gX2YgOiBmYWxzZSxcbiAgICAgICAgICAgIHhtbENoYXJLZXk6IChfZyA9IHNlcmlhbGl6ZXJPcHRpb25zID09PSBudWxsIHx8IHNlcmlhbGl6ZXJPcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZXJpYWxpemVyT3B0aW9ucy54bWwueG1sQ2hhcktleSkgIT09IG51bGwgJiYgX2cgIT09IHZvaWQgMCA/IF9nIDogaW50ZXJmYWNlc19qc18xLlhNTF9DSEFSS0VZLFxuICAgICAgICB9LFxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogZXhwb3J0cy5kZXNlcmlhbGl6YXRpb25Qb2xpY3lOYW1lLFxuICAgICAgICBhc3luYyBzZW5kUmVxdWVzdChyZXF1ZXN0LCBuZXh0KSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG5leHQocmVxdWVzdCk7XG4gICAgICAgICAgICByZXR1cm4gZGVzZXJpYWxpemVSZXNwb25zZUJvZHkoanNvbkNvbnRlbnRUeXBlcywgeG1sQ29udGVudFR5cGVzLCByZXNwb25zZSwgdXBkYXRlZE9wdGlvbnMsIHBhcnNlWE1MKTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuZXhwb3J0cy5kZXNlcmlhbGl6YXRpb25Qb2xpY3kgPSBkZXNlcmlhbGl6YXRpb25Qb2xpY3k7XG5mdW5jdGlvbiBnZXRPcGVyYXRpb25SZXNwb25zZU1hcChwYXJzZWRSZXNwb25zZSkge1xuICAgIGxldCByZXN1bHQ7XG4gICAgY29uc3QgcmVxdWVzdCA9IHBhcnNlZFJlc3BvbnNlLnJlcXVlc3Q7XG4gICAgY29uc3Qgb3BlcmF0aW9uSW5mbyA9ICgwLCBvcGVyYXRpb25IZWxwZXJzX2pzXzEuZ2V0T3BlcmF0aW9uUmVxdWVzdEluZm8pKHJlcXVlc3QpO1xuICAgIGNvbnN0IG9wZXJhdGlvblNwZWMgPSBvcGVyYXRpb25JbmZvID09PSBudWxsIHx8IG9wZXJhdGlvbkluZm8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wZXJhdGlvbkluZm8ub3BlcmF0aW9uU3BlYztcbiAgICBpZiAob3BlcmF0aW9uU3BlYykge1xuICAgICAgICBpZiAoIShvcGVyYXRpb25JbmZvID09PSBudWxsIHx8IG9wZXJhdGlvbkluZm8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wZXJhdGlvbkluZm8ub3BlcmF0aW9uUmVzcG9uc2VHZXR0ZXIpKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBvcGVyYXRpb25TcGVjLnJlc3BvbnNlc1twYXJzZWRSZXNwb25zZS5zdGF0dXNdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0ID0gb3BlcmF0aW9uSW5mbyA9PT0gbnVsbCB8fCBvcGVyYXRpb25JbmZvID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcGVyYXRpb25JbmZvLm9wZXJhdGlvblJlc3BvbnNlR2V0dGVyKG9wZXJhdGlvblNwZWMsIHBhcnNlZFJlc3BvbnNlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gc2hvdWxkRGVzZXJpYWxpemVSZXNwb25zZShwYXJzZWRSZXNwb25zZSkge1xuICAgIGNvbnN0IHJlcXVlc3QgPSBwYXJzZWRSZXNwb25zZS5yZXF1ZXN0O1xuICAgIGNvbnN0IG9wZXJhdGlvbkluZm8gPSAoMCwgb3BlcmF0aW9uSGVscGVyc19qc18xLmdldE9wZXJhdGlvblJlcXVlc3RJbmZvKShyZXF1ZXN0KTtcbiAgICBjb25zdCBzaG91bGREZXNlcmlhbGl6ZSA9IG9wZXJhdGlvbkluZm8gPT09IG51bGwgfHwgb3BlcmF0aW9uSW5mbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3BlcmF0aW9uSW5mby5zaG91bGREZXNlcmlhbGl6ZTtcbiAgICBsZXQgcmVzdWx0O1xuICAgIGlmIChzaG91bGREZXNlcmlhbGl6ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlc3VsdCA9IHRydWU7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBzaG91bGREZXNlcmlhbGl6ZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgcmVzdWx0ID0gc2hvdWxkRGVzZXJpYWxpemU7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXN1bHQgPSBzaG91bGREZXNlcmlhbGl6ZShwYXJzZWRSZXNwb25zZSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5hc3luYyBmdW5jdGlvbiBkZXNlcmlhbGl6ZVJlc3BvbnNlQm9keShqc29uQ29udGVudFR5cGVzLCB4bWxDb250ZW50VHlwZXMsIHJlc3BvbnNlLCBvcHRpb25zLCBwYXJzZVhNTCkge1xuICAgIGNvbnN0IHBhcnNlZFJlc3BvbnNlID0gYXdhaXQgcGFyc2UoanNvbkNvbnRlbnRUeXBlcywgeG1sQ29udGVudFR5cGVzLCByZXNwb25zZSwgb3B0aW9ucywgcGFyc2VYTUwpO1xuICAgIGlmICghc2hvdWxkRGVzZXJpYWxpemVSZXNwb25zZShwYXJzZWRSZXNwb25zZSkpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlZFJlc3BvbnNlO1xuICAgIH1cbiAgICBjb25zdCBvcGVyYXRpb25JbmZvID0gKDAsIG9wZXJhdGlvbkhlbHBlcnNfanNfMS5nZXRPcGVyYXRpb25SZXF1ZXN0SW5mbykocGFyc2VkUmVzcG9uc2UucmVxdWVzdCk7XG4gICAgY29uc3Qgb3BlcmF0aW9uU3BlYyA9IG9wZXJhdGlvbkluZm8gPT09IG51bGwgfHwgb3BlcmF0aW9uSW5mbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3BlcmF0aW9uSW5mby5vcGVyYXRpb25TcGVjO1xuICAgIGlmICghb3BlcmF0aW9uU3BlYyB8fCAhb3BlcmF0aW9uU3BlYy5yZXNwb25zZXMpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlZFJlc3BvbnNlO1xuICAgIH1cbiAgICBjb25zdCByZXNwb25zZVNwZWMgPSBnZXRPcGVyYXRpb25SZXNwb25zZU1hcChwYXJzZWRSZXNwb25zZSk7XG4gICAgY29uc3QgeyBlcnJvciwgc2hvdWxkUmV0dXJuUmVzcG9uc2UgfSA9IGhhbmRsZUVycm9yUmVzcG9uc2UocGFyc2VkUmVzcG9uc2UsIG9wZXJhdGlvblNwZWMsIHJlc3BvbnNlU3BlYywgb3B0aW9ucyk7XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgICBlbHNlIGlmIChzaG91bGRSZXR1cm5SZXNwb25zZSkge1xuICAgICAgICByZXR1cm4gcGFyc2VkUmVzcG9uc2U7XG4gICAgfVxuICAgIC8vIEFuIG9wZXJhdGlvbiByZXNwb25zZSBzcGVjIGRvZXMgZXhpc3QgZm9yIGN1cnJlbnQgc3RhdHVzIGNvZGUsIHNvXG4gICAgLy8gdXNlIGl0IHRvIGRlc2VyaWFsaXplIHRoZSByZXNwb25zZS5cbiAgICBpZiAocmVzcG9uc2VTcGVjKSB7XG4gICAgICAgIGlmIChyZXNwb25zZVNwZWMuYm9keU1hcHBlcikge1xuICAgICAgICAgICAgbGV0IHZhbHVlVG9EZXNlcmlhbGl6ZSA9IHBhcnNlZFJlc3BvbnNlLnBhcnNlZEJvZHk7XG4gICAgICAgICAgICBpZiAob3BlcmF0aW9uU3BlYy5pc1hNTCAmJiByZXNwb25zZVNwZWMuYm9keU1hcHBlci50eXBlLm5hbWUgPT09IHNlcmlhbGl6ZXJfanNfMS5NYXBwZXJUeXBlTmFtZXMuU2VxdWVuY2UpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZVRvRGVzZXJpYWxpemUgPVxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgdmFsdWVUb0Rlc2VyaWFsaXplID09PSBcIm9iamVjdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHZhbHVlVG9EZXNlcmlhbGl6ZVtyZXNwb25zZVNwZWMuYm9keU1hcHBlci54bWxFbGVtZW50TmFtZV1cbiAgICAgICAgICAgICAgICAgICAgICAgIDogW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBhcnNlZFJlc3BvbnNlLnBhcnNlZEJvZHkgPSBvcGVyYXRpb25TcGVjLnNlcmlhbGl6ZXIuZGVzZXJpYWxpemUocmVzcG9uc2VTcGVjLmJvZHlNYXBwZXIsIHZhbHVlVG9EZXNlcmlhbGl6ZSwgXCJvcGVyYXRpb25SZXMucGFyc2VkQm9keVwiLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChkZXNlcmlhbGl6ZUVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdEVycm9yID0gbmV3IGNvcmVfcmVzdF9waXBlbGluZV8xLlJlc3RFcnJvcihgRXJyb3IgJHtkZXNlcmlhbGl6ZUVycm9yfSBvY2N1cnJlZCBpbiBkZXNlcmlhbGl6aW5nIHRoZSByZXNwb25zZUJvZHkgLSAke3BhcnNlZFJlc3BvbnNlLmJvZHlBc1RleHR9YCwge1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXNDb2RlOiBwYXJzZWRSZXNwb25zZS5zdGF0dXMsXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3Q6IHBhcnNlZFJlc3BvbnNlLnJlcXVlc3QsXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlOiBwYXJzZWRSZXNwb25zZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aHJvdyByZXN0RXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAob3BlcmF0aW9uU3BlYy5odHRwTWV0aG9kID09PSBcIkhFQURcIikge1xuICAgICAgICAgICAgLy8gaGVhZCBtZXRob2RzIG5ldmVyIGhhdmUgYSBib2R5LCBidXQgd2UgcmV0dXJuIGEgYm9vbGVhbiB0byBpbmRpY2F0ZSBwcmVzZW5jZS9hYnNlbmNlIG9mIHRoZSByZXNvdXJjZVxuICAgICAgICAgICAgcGFyc2VkUmVzcG9uc2UucGFyc2VkQm9keSA9IHJlc3BvbnNlLnN0YXR1cyA+PSAyMDAgJiYgcmVzcG9uc2Uuc3RhdHVzIDwgMzAwO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXNwb25zZVNwZWMuaGVhZGVyc01hcHBlcikge1xuICAgICAgICAgICAgcGFyc2VkUmVzcG9uc2UucGFyc2VkSGVhZGVycyA9IG9wZXJhdGlvblNwZWMuc2VyaWFsaXplci5kZXNlcmlhbGl6ZShyZXNwb25zZVNwZWMuaGVhZGVyc01hcHBlciwgcGFyc2VkUmVzcG9uc2UuaGVhZGVycy50b0pTT04oKSwgXCJvcGVyYXRpb25SZXMucGFyc2VkSGVhZGVyc1wiLCB7IHhtbDoge30sIGlnbm9yZVVua25vd25Qcm9wZXJ0aWVzOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwYXJzZWRSZXNwb25zZTtcbn1cbmZ1bmN0aW9uIGlzT3BlcmF0aW9uU3BlY0VtcHR5KG9wZXJhdGlvblNwZWMpIHtcbiAgICBjb25zdCBleHBlY3RlZFN0YXR1c0NvZGVzID0gT2JqZWN0LmtleXMob3BlcmF0aW9uU3BlYy5yZXNwb25zZXMpO1xuICAgIHJldHVybiAoZXhwZWN0ZWRTdGF0dXNDb2Rlcy5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgKGV4cGVjdGVkU3RhdHVzQ29kZXMubGVuZ3RoID09PSAxICYmIGV4cGVjdGVkU3RhdHVzQ29kZXNbMF0gPT09IFwiZGVmYXVsdFwiKSk7XG59XG5mdW5jdGlvbiBoYW5kbGVFcnJvclJlc3BvbnNlKHBhcnNlZFJlc3BvbnNlLCBvcGVyYXRpb25TcGVjLCByZXNwb25zZVNwZWMsIG9wdGlvbnMpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3QgaXNTdWNjZXNzQnlTdGF0dXMgPSAyMDAgPD0gcGFyc2VkUmVzcG9uc2Uuc3RhdHVzICYmIHBhcnNlZFJlc3BvbnNlLnN0YXR1cyA8IDMwMDtcbiAgICBjb25zdCBpc0V4cGVjdGVkU3RhdHVzQ29kZSA9IGlzT3BlcmF0aW9uU3BlY0VtcHR5KG9wZXJhdGlvblNwZWMpXG4gICAgICAgID8gaXNTdWNjZXNzQnlTdGF0dXNcbiAgICAgICAgOiAhIXJlc3BvbnNlU3BlYztcbiAgICBpZiAoaXNFeHBlY3RlZFN0YXR1c0NvZGUpIHtcbiAgICAgICAgaWYgKHJlc3BvbnNlU3BlYykge1xuICAgICAgICAgICAgaWYgKCFyZXNwb25zZVNwZWMuaXNFcnJvcikge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGVycm9yOiBudWxsLCBzaG91bGRSZXR1cm5SZXNwb25zZTogZmFsc2UgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB7IGVycm9yOiBudWxsLCBzaG91bGRSZXR1cm5SZXNwb25zZTogZmFsc2UgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBlcnJvclJlc3BvbnNlU3BlYyA9IHJlc3BvbnNlU3BlYyAhPT0gbnVsbCAmJiByZXNwb25zZVNwZWMgIT09IHZvaWQgMCA/IHJlc3BvbnNlU3BlYyA6IG9wZXJhdGlvblNwZWMucmVzcG9uc2VzLmRlZmF1bHQ7XG4gICAgY29uc3QgaW5pdGlhbEVycm9yTWVzc2FnZSA9ICgoX2EgPSBwYXJzZWRSZXNwb25zZS5yZXF1ZXN0LnN0cmVhbVJlc3BvbnNlU3RhdHVzQ29kZXMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5oYXMocGFyc2VkUmVzcG9uc2Uuc3RhdHVzKSlcbiAgICAgICAgPyBgVW5leHBlY3RlZCBzdGF0dXMgY29kZTogJHtwYXJzZWRSZXNwb25zZS5zdGF0dXN9YFxuICAgICAgICA6IHBhcnNlZFJlc3BvbnNlLmJvZHlBc1RleHQ7XG4gICAgY29uc3QgZXJyb3IgPSBuZXcgY29yZV9yZXN0X3BpcGVsaW5lXzEuUmVzdEVycm9yKGluaXRpYWxFcnJvck1lc3NhZ2UsIHtcbiAgICAgICAgc3RhdHVzQ29kZTogcGFyc2VkUmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgICByZXF1ZXN0OiBwYXJzZWRSZXNwb25zZS5yZXF1ZXN0LFxuICAgICAgICByZXNwb25zZTogcGFyc2VkUmVzcG9uc2UsXG4gICAgfSk7XG4gICAgLy8gSWYgdGhlIGl0ZW0gZmFpbGVkIGJ1dCB0aGVyZSdzIG5vIGVycm9yIHNwZWMgb3IgZGVmYXVsdCBzcGVjIHRvIGRlc2VyaWFsaXplIHRoZSBlcnJvcixcbiAgICAvLyB3ZSBzaG91bGQgZmFpbCBzbyB3ZSBqdXN0IHRocm93IHRoZSBwYXJzZWQgcmVzcG9uc2VcbiAgICBpZiAoIWVycm9yUmVzcG9uc2VTcGVjKSB7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgICBjb25zdCBkZWZhdWx0Qm9keU1hcHBlciA9IGVycm9yUmVzcG9uc2VTcGVjLmJvZHlNYXBwZXI7XG4gICAgY29uc3QgZGVmYXVsdEhlYWRlcnNNYXBwZXIgPSBlcnJvclJlc3BvbnNlU3BlYy5oZWFkZXJzTWFwcGVyO1xuICAgIHRyeSB7XG4gICAgICAgIC8vIElmIGVycm9yIHJlc3BvbnNlIGhhcyBhIGJvZHksIHRyeSB0byBkZXNlcmlhbGl6ZSBpdCB1c2luZyBkZWZhdWx0IGJvZHkgbWFwcGVyLlxuICAgICAgICAvLyBUaGVuIHRyeSB0byBleHRyYWN0IGVycm9yIGNvZGUgJiBtZXNzYWdlIGZyb20gaXRcbiAgICAgICAgaWYgKHBhcnNlZFJlc3BvbnNlLnBhcnNlZEJvZHkpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZEJvZHkgPSBwYXJzZWRSZXNwb25zZS5wYXJzZWRCb2R5O1xuICAgICAgICAgICAgbGV0IGRlc2VyaWFsaXplZEVycm9yO1xuICAgICAgICAgICAgaWYgKGRlZmF1bHRCb2R5TWFwcGVyKSB7XG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlVG9EZXNlcmlhbGl6ZSA9IHBhcnNlZEJvZHk7XG4gICAgICAgICAgICAgICAgaWYgKG9wZXJhdGlvblNwZWMuaXNYTUwgJiYgZGVmYXVsdEJvZHlNYXBwZXIudHlwZS5uYW1lID09PSBzZXJpYWxpemVyX2pzXzEuTWFwcGVyVHlwZU5hbWVzLlNlcXVlbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlVG9EZXNlcmlhbGl6ZSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50TmFtZSA9IGRlZmF1bHRCb2R5TWFwcGVyLnhtbEVsZW1lbnROYW1lO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHBhcnNlZEJvZHkgPT09IFwib2JqZWN0XCIgJiYgZWxlbWVudE5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlVG9EZXNlcmlhbGl6ZSA9IHBhcnNlZEJvZHlbZWxlbWVudE5hbWVdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlc2VyaWFsaXplZEVycm9yID0gb3BlcmF0aW9uU3BlYy5zZXJpYWxpemVyLmRlc2VyaWFsaXplKGRlZmF1bHRCb2R5TWFwcGVyLCB2YWx1ZVRvRGVzZXJpYWxpemUsIFwiZXJyb3IucmVzcG9uc2UucGFyc2VkQm9keVwiLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGludGVybmFsRXJyb3IgPSBwYXJzZWRCb2R5LmVycm9yIHx8IGRlc2VyaWFsaXplZEVycm9yIHx8IHBhcnNlZEJvZHk7XG4gICAgICAgICAgICBlcnJvci5jb2RlID0gaW50ZXJuYWxFcnJvci5jb2RlO1xuICAgICAgICAgICAgaWYgKGludGVybmFsRXJyb3IubWVzc2FnZSkge1xuICAgICAgICAgICAgICAgIGVycm9yLm1lc3NhZ2UgPSBpbnRlcm5hbEVycm9yLm1lc3NhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGVmYXVsdEJvZHlNYXBwZXIpIHtcbiAgICAgICAgICAgICAgICBlcnJvci5yZXNwb25zZS5wYXJzZWRCb2R5ID0gZGVzZXJpYWxpemVkRXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgZXJyb3IgcmVzcG9uc2UgaGFzIGhlYWRlcnMsIHRyeSB0byBkZXNlcmlhbGl6ZSBpdCB1c2luZyBkZWZhdWx0IGhlYWRlciBtYXBwZXJcbiAgICAgICAgaWYgKHBhcnNlZFJlc3BvbnNlLmhlYWRlcnMgJiYgZGVmYXVsdEhlYWRlcnNNYXBwZXIpIHtcbiAgICAgICAgICAgIGVycm9yLnJlc3BvbnNlLnBhcnNlZEhlYWRlcnMgPVxuICAgICAgICAgICAgICAgIG9wZXJhdGlvblNwZWMuc2VyaWFsaXplci5kZXNlcmlhbGl6ZShkZWZhdWx0SGVhZGVyc01hcHBlciwgcGFyc2VkUmVzcG9uc2UuaGVhZGVycy50b0pTT04oKSwgXCJvcGVyYXRpb25SZXMucGFyc2VkSGVhZGVyc1wiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXRjaCAoZGVmYXVsdEVycm9yKSB7XG4gICAgICAgIGVycm9yLm1lc3NhZ2UgPSBgRXJyb3IgXCIke2RlZmF1bHRFcnJvci5tZXNzYWdlfVwiIG9jY3VycmVkIGluIGRlc2VyaWFsaXppbmcgdGhlIHJlc3BvbnNlQm9keSAtIFwiJHtwYXJzZWRSZXNwb25zZS5ib2R5QXNUZXh0fVwiIGZvciB0aGUgZGVmYXVsdCByZXNwb25zZS5gO1xuICAgIH1cbiAgICByZXR1cm4geyBlcnJvciwgc2hvdWxkUmV0dXJuUmVzcG9uc2U6IGZhbHNlIH07XG59XG5hc3luYyBmdW5jdGlvbiBwYXJzZShqc29uQ29udGVudFR5cGVzLCB4bWxDb250ZW50VHlwZXMsIG9wZXJhdGlvblJlc3BvbnNlLCBvcHRzLCBwYXJzZVhNTCkge1xuICAgIHZhciBfYTtcbiAgICBpZiAoISgoX2EgPSBvcGVyYXRpb25SZXNwb25zZS5yZXF1ZXN0LnN0cmVhbVJlc3BvbnNlU3RhdHVzQ29kZXMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5oYXMob3BlcmF0aW9uUmVzcG9uc2Uuc3RhdHVzKSkgJiZcbiAgICAgICAgb3BlcmF0aW9uUmVzcG9uc2UuYm9keUFzVGV4dCkge1xuICAgICAgICBjb25zdCB0ZXh0ID0gb3BlcmF0aW9uUmVzcG9uc2UuYm9keUFzVGV4dDtcbiAgICAgICAgY29uc3QgY29udGVudFR5cGUgPSBvcGVyYXRpb25SZXNwb25zZS5oZWFkZXJzLmdldChcIkNvbnRlbnQtVHlwZVwiKSB8fCBcIlwiO1xuICAgICAgICBjb25zdCBjb250ZW50Q29tcG9uZW50cyA9ICFjb250ZW50VHlwZVxuICAgICAgICAgICAgPyBbXVxuICAgICAgICAgICAgOiBjb250ZW50VHlwZS5zcGxpdChcIjtcIikubWFwKChjb21wb25lbnQpID0+IGNvbXBvbmVudC50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChjb250ZW50Q29tcG9uZW50cy5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAgICAgICBjb250ZW50Q29tcG9uZW50cy5zb21lKChjb21wb25lbnQpID0+IGpzb25Db250ZW50VHlwZXMuaW5kZXhPZihjb21wb25lbnQpICE9PSAtMSkpIHtcbiAgICAgICAgICAgICAgICBvcGVyYXRpb25SZXNwb25zZS5wYXJzZWRCb2R5ID0gSlNPTi5wYXJzZSh0ZXh0KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUmVzcG9uc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjb250ZW50Q29tcG9uZW50cy5zb21lKChjb21wb25lbnQpID0+IHhtbENvbnRlbnRUeXBlcy5pbmRleE9mKGNvbXBvbmVudCkgIT09IC0xKSkge1xuICAgICAgICAgICAgICAgIGlmICghcGFyc2VYTUwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFyc2luZyBYTUwgbm90IHN1cHBvcnRlZC5cIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBhd2FpdCBwYXJzZVhNTCh0ZXh0LCBvcHRzLnhtbCk7XG4gICAgICAgICAgICAgICAgb3BlcmF0aW9uUmVzcG9uc2UucGFyc2VkQm9keSA9IGJvZHk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblJlc3BvbnNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGNvbnN0IG1zZyA9IGBFcnJvciBcIiR7ZXJyfVwiIG9jY3VycmVkIHdoaWxlIHBhcnNpbmcgdGhlIHJlc3BvbnNlIGJvZHkgLSAke29wZXJhdGlvblJlc3BvbnNlLmJvZHlBc1RleHR9LmA7XG4gICAgICAgICAgICBjb25zdCBlcnJDb2RlID0gZXJyLmNvZGUgfHwgY29yZV9yZXN0X3BpcGVsaW5lXzEuUmVzdEVycm9yLlBBUlNFX0VSUk9SO1xuICAgICAgICAgICAgY29uc3QgZSA9IG5ldyBjb3JlX3Jlc3RfcGlwZWxpbmVfMS5SZXN0RXJyb3IobXNnLCB7XG4gICAgICAgICAgICAgICAgY29kZTogZXJyQ29kZSxcbiAgICAgICAgICAgICAgICBzdGF0dXNDb2RlOiBvcGVyYXRpb25SZXNwb25zZS5zdGF0dXMsXG4gICAgICAgICAgICAgICAgcmVxdWVzdDogb3BlcmF0aW9uUmVzcG9uc2UucmVxdWVzdCxcbiAgICAgICAgICAgICAgICByZXNwb25zZTogb3BlcmF0aW9uUmVzcG9uc2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9wZXJhdGlvblJlc3BvbnNlO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGVzZXJpYWxpemF0aW9uUG9saWN5LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0UGF0aFN0cmluZ0Zyb21QYXJhbWV0ZXIgPSBleHBvcnRzLmdldFN0cmVhbWluZ1Jlc3BvbnNlU3RhdHVzQ29kZXMgPSB2b2lkIDA7XG5jb25zdCBzZXJpYWxpemVyX2pzXzEgPSByZXF1aXJlKFwiLi9zZXJpYWxpemVyLmpzXCIpO1xuLyoqXG4gKiBHZXRzIHRoZSBsaXN0IG9mIHN0YXR1cyBjb2RlcyBmb3Igc3RyZWFtaW5nIHJlc3BvbnNlcy5cbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBnZXRTdHJlYW1pbmdSZXNwb25zZVN0YXR1c0NvZGVzKG9wZXJhdGlvblNwZWMpIHtcbiAgICBjb25zdCByZXN1bHQgPSBuZXcgU2V0KCk7XG4gICAgZm9yIChjb25zdCBzdGF0dXNDb2RlIGluIG9wZXJhdGlvblNwZWMucmVzcG9uc2VzKSB7XG4gICAgICAgIGNvbnN0IG9wZXJhdGlvblJlc3BvbnNlID0gb3BlcmF0aW9uU3BlYy5yZXNwb25zZXNbc3RhdHVzQ29kZV07XG4gICAgICAgIGlmIChvcGVyYXRpb25SZXNwb25zZS5ib2R5TWFwcGVyICYmXG4gICAgICAgICAgICBvcGVyYXRpb25SZXNwb25zZS5ib2R5TWFwcGVyLnR5cGUubmFtZSA9PT0gc2VyaWFsaXplcl9qc18xLk1hcHBlclR5cGVOYW1lcy5TdHJlYW0pIHtcbiAgICAgICAgICAgIHJlc3VsdC5hZGQoTnVtYmVyKHN0YXR1c0NvZGUpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZXhwb3J0cy5nZXRTdHJlYW1pbmdSZXNwb25zZVN0YXR1c0NvZGVzID0gZ2V0U3RyZWFtaW5nUmVzcG9uc2VTdGF0dXNDb2Rlcztcbi8qKlxuICogR2V0IHRoZSBwYXRoIHRvIHRoaXMgcGFyYW1ldGVyJ3MgdmFsdWUgYXMgYSBkb3R0ZWQgc3RyaW5nIChhLmIuYykuXG4gKiBAcGFyYW0gcGFyYW1ldGVyIC0gVGhlIHBhcmFtZXRlciB0byBnZXQgdGhlIHBhdGggc3RyaW5nIGZvci5cbiAqIEByZXR1cm5zIFRoZSBwYXRoIHRvIHRoaXMgcGFyYW1ldGVyJ3MgdmFsdWUgYXMgYSBkb3R0ZWQgc3RyaW5nLlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIGdldFBhdGhTdHJpbmdGcm9tUGFyYW1ldGVyKHBhcmFtZXRlcikge1xuICAgIGNvbnN0IHsgcGFyYW1ldGVyUGF0aCwgbWFwcGVyIH0gPSBwYXJhbWV0ZXI7XG4gICAgbGV0IHJlc3VsdDtcbiAgICBpZiAodHlwZW9mIHBhcmFtZXRlclBhdGggPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmVzdWx0ID0gcGFyYW1ldGVyUGF0aDtcbiAgICB9XG4gICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShwYXJhbWV0ZXJQYXRoKSkge1xuICAgICAgICByZXN1bHQgPSBwYXJhbWV0ZXJQYXRoLmpvaW4oXCIuXCIpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gbWFwcGVyLnNlcmlhbGl6ZWROYW1lO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZXhwb3J0cy5nZXRQYXRoU3RyaW5nRnJvbVBhcmFtZXRlciA9IGdldFBhdGhTdHJpbmdGcm9tUGFyYW1ldGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW50ZXJmYWNlSGVscGVycy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnNlcmlhbGl6ZVJlcXVlc3RCb2R5ID0gZXhwb3J0cy5zZXJpYWxpemVIZWFkZXJzID0gZXhwb3J0cy5zZXJpYWxpemF0aW9uUG9saWN5ID0gZXhwb3J0cy5zZXJpYWxpemF0aW9uUG9saWN5TmFtZSA9IHZvaWQgMDtcbmNvbnN0IGludGVyZmFjZXNfanNfMSA9IHJlcXVpcmUoXCIuL2ludGVyZmFjZXMuanNcIik7XG5jb25zdCBvcGVyYXRpb25IZWxwZXJzX2pzXzEgPSByZXF1aXJlKFwiLi9vcGVyYXRpb25IZWxwZXJzLmpzXCIpO1xuY29uc3Qgc2VyaWFsaXplcl9qc18xID0gcmVxdWlyZShcIi4vc2VyaWFsaXplci5qc1wiKTtcbmNvbnN0IGludGVyZmFjZUhlbHBlcnNfanNfMSA9IHJlcXVpcmUoXCIuL2ludGVyZmFjZUhlbHBlcnMuanNcIik7XG4vKipcbiAqIFRoZSBwcm9ncmFtbWF0aWMgaWRlbnRpZmllciBvZiB0aGUgc2VyaWFsaXphdGlvblBvbGljeS5cbiAqL1xuZXhwb3J0cy5zZXJpYWxpemF0aW9uUG9saWN5TmFtZSA9IFwic2VyaWFsaXphdGlvblBvbGljeVwiO1xuLyoqXG4gKiBUaGlzIHBvbGljeSBoYW5kbGVzIGFzc2VtYmxpbmcgdGhlIHJlcXVlc3QgYm9keSBhbmQgaGVhZGVycyB1c2luZ1xuICogYW4gT3BlcmF0aW9uU3BlYyBhbmQgT3BlcmF0aW9uQXJndW1lbnRzIG9uIHRoZSByZXF1ZXN0LlxuICovXG5mdW5jdGlvbiBzZXJpYWxpemF0aW9uUG9saWN5KG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHN0cmluZ2lmeVhNTCA9IG9wdGlvbnMuc3RyaW5naWZ5WE1MO1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGV4cG9ydHMuc2VyaWFsaXphdGlvblBvbGljeU5hbWUsXG4gICAgICAgIGFzeW5jIHNlbmRSZXF1ZXN0KHJlcXVlc3QsIG5leHQpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wZXJhdGlvbkluZm8gPSAoMCwgb3BlcmF0aW9uSGVscGVyc19qc18xLmdldE9wZXJhdGlvblJlcXVlc3RJbmZvKShyZXF1ZXN0KTtcbiAgICAgICAgICAgIGNvbnN0IG9wZXJhdGlvblNwZWMgPSBvcGVyYXRpb25JbmZvID09PSBudWxsIHx8IG9wZXJhdGlvbkluZm8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wZXJhdGlvbkluZm8ub3BlcmF0aW9uU3BlYztcbiAgICAgICAgICAgIGNvbnN0IG9wZXJhdGlvbkFyZ3VtZW50cyA9IG9wZXJhdGlvbkluZm8gPT09IG51bGwgfHwgb3BlcmF0aW9uSW5mbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3BlcmF0aW9uSW5mby5vcGVyYXRpb25Bcmd1bWVudHM7XG4gICAgICAgICAgICBpZiAob3BlcmF0aW9uU3BlYyAmJiBvcGVyYXRpb25Bcmd1bWVudHMpIHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVIZWFkZXJzKHJlcXVlc3QsIG9wZXJhdGlvbkFyZ3VtZW50cywgb3BlcmF0aW9uU3BlYyk7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplUmVxdWVzdEJvZHkocmVxdWVzdCwgb3BlcmF0aW9uQXJndW1lbnRzLCBvcGVyYXRpb25TcGVjLCBzdHJpbmdpZnlYTUwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5leHQocmVxdWVzdCk7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbmV4cG9ydHMuc2VyaWFsaXphdGlvblBvbGljeSA9IHNlcmlhbGl6YXRpb25Qb2xpY3k7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBzZXJpYWxpemVIZWFkZXJzKHJlcXVlc3QsIG9wZXJhdGlvbkFyZ3VtZW50cywgb3BlcmF0aW9uU3BlYykge1xuICAgIHZhciBfYSwgX2I7XG4gICAgaWYgKG9wZXJhdGlvblNwZWMuaGVhZGVyUGFyYW1ldGVycykge1xuICAgICAgICBmb3IgKGNvbnN0IGhlYWRlclBhcmFtZXRlciBvZiBvcGVyYXRpb25TcGVjLmhlYWRlclBhcmFtZXRlcnMpIHtcbiAgICAgICAgICAgIGxldCBoZWFkZXJWYWx1ZSA9ICgwLCBvcGVyYXRpb25IZWxwZXJzX2pzXzEuZ2V0T3BlcmF0aW9uQXJndW1lbnRWYWx1ZUZyb21QYXJhbWV0ZXIpKG9wZXJhdGlvbkFyZ3VtZW50cywgaGVhZGVyUGFyYW1ldGVyKTtcbiAgICAgICAgICAgIGlmICgoaGVhZGVyVmFsdWUgIT09IG51bGwgJiYgaGVhZGVyVmFsdWUgIT09IHVuZGVmaW5lZCkgfHwgaGVhZGVyUGFyYW1ldGVyLm1hcHBlci5yZXF1aXJlZCkge1xuICAgICAgICAgICAgICAgIGhlYWRlclZhbHVlID0gb3BlcmF0aW9uU3BlYy5zZXJpYWxpemVyLnNlcmlhbGl6ZShoZWFkZXJQYXJhbWV0ZXIubWFwcGVyLCBoZWFkZXJWYWx1ZSwgKDAsIGludGVyZmFjZUhlbHBlcnNfanNfMS5nZXRQYXRoU3RyaW5nRnJvbVBhcmFtZXRlcikoaGVhZGVyUGFyYW1ldGVyKSk7XG4gICAgICAgICAgICAgICAgY29uc3QgaGVhZGVyQ29sbGVjdGlvblByZWZpeCA9IGhlYWRlclBhcmFtZXRlci5tYXBwZXJcbiAgICAgICAgICAgICAgICAgICAgLmhlYWRlckNvbGxlY3Rpb25QcmVmaXg7XG4gICAgICAgICAgICAgICAgaWYgKGhlYWRlckNvbGxlY3Rpb25QcmVmaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoaGVhZGVyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmhlYWRlcnMuc2V0KGhlYWRlckNvbGxlY3Rpb25QcmVmaXggKyBrZXksIGhlYWRlclZhbHVlW2tleV0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmhlYWRlcnMuc2V0KGhlYWRlclBhcmFtZXRlci5tYXBwZXIuc2VyaWFsaXplZE5hbWUgfHwgKDAsIGludGVyZmFjZUhlbHBlcnNfanNfMS5nZXRQYXRoU3RyaW5nRnJvbVBhcmFtZXRlcikoaGVhZGVyUGFyYW1ldGVyKSwgaGVhZGVyVmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBjdXN0b21IZWFkZXJzID0gKF9iID0gKF9hID0gb3BlcmF0aW9uQXJndW1lbnRzLm9wdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5yZXF1ZXN0T3B0aW9ucykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmN1c3RvbUhlYWRlcnM7XG4gICAgaWYgKGN1c3RvbUhlYWRlcnMpIHtcbiAgICAgICAgZm9yIChjb25zdCBjdXN0b21IZWFkZXJOYW1lIG9mIE9iamVjdC5rZXlzKGN1c3RvbUhlYWRlcnMpKSB7XG4gICAgICAgICAgICByZXF1ZXN0LmhlYWRlcnMuc2V0KGN1c3RvbUhlYWRlck5hbWUsIGN1c3RvbUhlYWRlcnNbY3VzdG9tSGVhZGVyTmFtZV0pO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5zZXJpYWxpemVIZWFkZXJzID0gc2VyaWFsaXplSGVhZGVycztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIHNlcmlhbGl6ZVJlcXVlc3RCb2R5KHJlcXVlc3QsIG9wZXJhdGlvbkFyZ3VtZW50cywgb3BlcmF0aW9uU3BlYywgc3RyaW5naWZ5WE1MID0gZnVuY3Rpb24gKCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlhNTCBzZXJpYWxpemF0aW9uIHVuc3VwcG9ydGVkIVwiKTtcbn0pIHtcbiAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lO1xuICAgIGNvbnN0IHNlcmlhbGl6ZXJPcHRpb25zID0gKF9hID0gb3BlcmF0aW9uQXJndW1lbnRzLm9wdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zZXJpYWxpemVyT3B0aW9ucztcbiAgICBjb25zdCB1cGRhdGVkT3B0aW9ucyA9IHtcbiAgICAgICAgeG1sOiB7XG4gICAgICAgICAgICByb290TmFtZTogKF9iID0gc2VyaWFsaXplck9wdGlvbnMgPT09IG51bGwgfHwgc2VyaWFsaXplck9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlcmlhbGl6ZXJPcHRpb25zLnhtbC5yb290TmFtZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogXCJcIixcbiAgICAgICAgICAgIGluY2x1ZGVSb290OiAoX2MgPSBzZXJpYWxpemVyT3B0aW9ucyA9PT0gbnVsbCB8fCBzZXJpYWxpemVyT3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VyaWFsaXplck9wdGlvbnMueG1sLmluY2x1ZGVSb290KSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiBmYWxzZSxcbiAgICAgICAgICAgIHhtbENoYXJLZXk6IChfZCA9IHNlcmlhbGl6ZXJPcHRpb25zID09PSBudWxsIHx8IHNlcmlhbGl6ZXJPcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZXJpYWxpemVyT3B0aW9ucy54bWwueG1sQ2hhcktleSkgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDogaW50ZXJmYWNlc19qc18xLlhNTF9DSEFSS0VZLFxuICAgICAgICB9LFxuICAgIH07XG4gICAgY29uc3QgeG1sQ2hhcktleSA9IHVwZGF0ZWRPcHRpb25zLnhtbC54bWxDaGFyS2V5O1xuICAgIGlmIChvcGVyYXRpb25TcGVjLnJlcXVlc3RCb2R5ICYmIG9wZXJhdGlvblNwZWMucmVxdWVzdEJvZHkubWFwcGVyKSB7XG4gICAgICAgIHJlcXVlc3QuYm9keSA9ICgwLCBvcGVyYXRpb25IZWxwZXJzX2pzXzEuZ2V0T3BlcmF0aW9uQXJndW1lbnRWYWx1ZUZyb21QYXJhbWV0ZXIpKG9wZXJhdGlvbkFyZ3VtZW50cywgb3BlcmF0aW9uU3BlYy5yZXF1ZXN0Qm9keSk7XG4gICAgICAgIGNvbnN0IGJvZHlNYXBwZXIgPSBvcGVyYXRpb25TcGVjLnJlcXVlc3RCb2R5Lm1hcHBlcjtcbiAgICAgICAgY29uc3QgeyByZXF1aXJlZCwgc2VyaWFsaXplZE5hbWUsIHhtbE5hbWUsIHhtbEVsZW1lbnROYW1lLCB4bWxOYW1lc3BhY2UsIHhtbE5hbWVzcGFjZVByZWZpeCwgbnVsbGFibGUsIH0gPSBib2R5TWFwcGVyO1xuICAgICAgICBjb25zdCB0eXBlTmFtZSA9IGJvZHlNYXBwZXIudHlwZS5uYW1lO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKChyZXF1ZXN0LmJvZHkgIT09IHVuZGVmaW5lZCAmJiByZXF1ZXN0LmJvZHkgIT09IG51bGwpIHx8XG4gICAgICAgICAgICAgICAgKG51bGxhYmxlICYmIHJlcXVlc3QuYm9keSA9PT0gbnVsbCkgfHxcbiAgICAgICAgICAgICAgICByZXF1aXJlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RCb2R5UGFyYW1ldGVyUGF0aFN0cmluZyA9ICgwLCBpbnRlcmZhY2VIZWxwZXJzX2pzXzEuZ2V0UGF0aFN0cmluZ0Zyb21QYXJhbWV0ZXIpKG9wZXJhdGlvblNwZWMucmVxdWVzdEJvZHkpO1xuICAgICAgICAgICAgICAgIHJlcXVlc3QuYm9keSA9IG9wZXJhdGlvblNwZWMuc2VyaWFsaXplci5zZXJpYWxpemUoYm9keU1hcHBlciwgcmVxdWVzdC5ib2R5LCByZXF1ZXN0Qm9keVBhcmFtZXRlclBhdGhTdHJpbmcsIHVwZGF0ZWRPcHRpb25zKTtcbiAgICAgICAgICAgICAgICBjb25zdCBpc1N0cmVhbSA9IHR5cGVOYW1lID09PSBzZXJpYWxpemVyX2pzXzEuTWFwcGVyVHlwZU5hbWVzLlN0cmVhbTtcbiAgICAgICAgICAgICAgICBpZiAob3BlcmF0aW9uU3BlYy5pc1hNTCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB4bWxuc0tleSA9IHhtbE5hbWVzcGFjZVByZWZpeCA/IGB4bWxuczoke3htbE5hbWVzcGFjZVByZWZpeH1gIDogXCJ4bWxuc1wiO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGdldFhtbFZhbHVlV2l0aE5hbWVzcGFjZSh4bWxOYW1lc3BhY2UsIHhtbG5zS2V5LCB0eXBlTmFtZSwgcmVxdWVzdC5ib2R5LCB1cGRhdGVkT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlTmFtZSA9PT0gc2VyaWFsaXplcl9qc18xLk1hcHBlclR5cGVOYW1lcy5TZXF1ZW5jZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5ib2R5ID0gc3RyaW5naWZ5WE1MKHByZXBhcmVYTUxSb290TGlzdCh2YWx1ZSwgeG1sRWxlbWVudE5hbWUgfHwgeG1sTmFtZSB8fCBzZXJpYWxpemVkTmFtZSwgeG1sbnNLZXksIHhtbE5hbWVzcGFjZSksIHsgcm9vdE5hbWU6IHhtbE5hbWUgfHwgc2VyaWFsaXplZE5hbWUsIHhtbENoYXJLZXkgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIWlzU3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmJvZHkgPSBzdHJpbmdpZnlYTUwodmFsdWUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290TmFtZTogeG1sTmFtZSB8fCBzZXJpYWxpemVkTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxDaGFyS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZU5hbWUgPT09IHNlcmlhbGl6ZXJfanNfMS5NYXBwZXJUeXBlTmFtZXMuU3RyaW5nICYmXG4gICAgICAgICAgICAgICAgICAgICgoKF9lID0gb3BlcmF0aW9uU3BlYy5jb250ZW50VHlwZSkgPT09IG51bGwgfHwgX2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9lLm1hdGNoKFwidGV4dC9wbGFpblwiKSkgfHwgb3BlcmF0aW9uU3BlYy5tZWRpYVR5cGUgPT09IFwidGV4dFwiKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyB0aGUgU3RyaW5nIHNlcmlhbGl6ZXIgaGFzIHZhbGlkYXRlZCB0aGF0IHJlcXVlc3QgYm9keSBpcyBhIHN0cmluZ1xuICAgICAgICAgICAgICAgICAgICAvLyBzbyBqdXN0IHNlbmQgdGhlIHN0cmluZy5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICghaXNTdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5ib2R5ID0gSlNPTi5zdHJpbmdpZnkocmVxdWVzdC5ib2R5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIFwiJHtlcnJvci5tZXNzYWdlfVwiIG9jY3VycmVkIGluIHNlcmlhbGl6aW5nIHRoZSBwYXlsb2FkIC0gJHtKU09OLnN0cmluZ2lmeShzZXJpYWxpemVkTmFtZSwgdW5kZWZpbmVkLCBcIiAgXCIpfS5gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChvcGVyYXRpb25TcGVjLmZvcm1EYXRhUGFyYW1ldGVycyAmJiBvcGVyYXRpb25TcGVjLmZvcm1EYXRhUGFyYW1ldGVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJlcXVlc3QuZm9ybURhdGEgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBmb3JtRGF0YVBhcmFtZXRlciBvZiBvcGVyYXRpb25TcGVjLmZvcm1EYXRhUGFyYW1ldGVycykge1xuICAgICAgICAgICAgY29uc3QgZm9ybURhdGFQYXJhbWV0ZXJWYWx1ZSA9ICgwLCBvcGVyYXRpb25IZWxwZXJzX2pzXzEuZ2V0T3BlcmF0aW9uQXJndW1lbnRWYWx1ZUZyb21QYXJhbWV0ZXIpKG9wZXJhdGlvbkFyZ3VtZW50cywgZm9ybURhdGFQYXJhbWV0ZXIpO1xuICAgICAgICAgICAgaWYgKGZvcm1EYXRhUGFyYW1ldGVyVmFsdWUgIT09IHVuZGVmaW5lZCAmJiBmb3JtRGF0YVBhcmFtZXRlclZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZm9ybURhdGFQYXJhbWV0ZXJQcm9wZXJ0eU5hbWUgPSBmb3JtRGF0YVBhcmFtZXRlci5tYXBwZXIuc2VyaWFsaXplZE5hbWUgfHwgKDAsIGludGVyZmFjZUhlbHBlcnNfanNfMS5nZXRQYXRoU3RyaW5nRnJvbVBhcmFtZXRlcikoZm9ybURhdGFQYXJhbWV0ZXIpO1xuICAgICAgICAgICAgICAgIHJlcXVlc3QuZm9ybURhdGFbZm9ybURhdGFQYXJhbWV0ZXJQcm9wZXJ0eU5hbWVdID0gb3BlcmF0aW9uU3BlYy5zZXJpYWxpemVyLnNlcmlhbGl6ZShmb3JtRGF0YVBhcmFtZXRlci5tYXBwZXIsIGZvcm1EYXRhUGFyYW1ldGVyVmFsdWUsICgwLCBpbnRlcmZhY2VIZWxwZXJzX2pzXzEuZ2V0UGF0aFN0cmluZ0Zyb21QYXJhbWV0ZXIpKGZvcm1EYXRhUGFyYW1ldGVyKSwgdXBkYXRlZE9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5zZXJpYWxpemVSZXF1ZXN0Qm9keSA9IHNlcmlhbGl6ZVJlcXVlc3RCb2R5O1xuLyoqXG4gKiBBZGRzIGFuIHhtbCBuYW1lc3BhY2UgdG8gdGhlIHhtbCBzZXJpYWxpemVkIG9iamVjdCBpZiBuZWVkZWQsIG90aGVyd2lzZSBpdCBqdXN0IHJldHVybnMgdGhlIHZhbHVlIGl0c2VsZlxuICovXG5mdW5jdGlvbiBnZXRYbWxWYWx1ZVdpdGhOYW1lc3BhY2UoeG1sTmFtZXNwYWNlLCB4bWxuc0tleSwgdHlwZU5hbWUsIHNlcmlhbGl6ZWRWYWx1ZSwgb3B0aW9ucykge1xuICAgIC8vIENvbXBvc2l0ZSBhbmQgU2VxdWVuY2Ugc2NoZW1hcyBhbHJlYWR5IGdvdCB0aGVpciByb290IG5hbWVzcGFjZSBzZXQgZHVyaW5nIHNlcmlhbGl6YXRpb25cbiAgICAvLyBXZSBqdXN0IG5lZWQgdG8gYWRkIHhtbG5zIHRvIHRoZSBvdGhlciBzY2hlbWEgdHlwZXNcbiAgICBpZiAoeG1sTmFtZXNwYWNlICYmICFbXCJDb21wb3NpdGVcIiwgXCJTZXF1ZW5jZVwiLCBcIkRpY3Rpb25hcnlcIl0uaW5jbHVkZXModHlwZU5hbWUpKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgICAgICByZXN1bHRbb3B0aW9ucy54bWwueG1sQ2hhcktleV0gPSBzZXJpYWxpemVkVmFsdWU7XG4gICAgICAgIHJlc3VsdFtpbnRlcmZhY2VzX2pzXzEuWE1MX0FUVFJLRVldID0geyBbeG1sbnNLZXldOiB4bWxOYW1lc3BhY2UgfTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgcmV0dXJuIHNlcmlhbGl6ZWRWYWx1ZTtcbn1cbmZ1bmN0aW9uIHByZXBhcmVYTUxSb290TGlzdChvYmosIGVsZW1lbnROYW1lLCB4bWxOYW1lc3BhY2VLZXksIHhtbE5hbWVzcGFjZSkge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgICAgIG9iaiA9IFtvYmpdO1xuICAgIH1cbiAgICBpZiAoIXhtbE5hbWVzcGFjZUtleSB8fCAheG1sTmFtZXNwYWNlKSB7XG4gICAgICAgIHJldHVybiB7IFtlbGVtZW50TmFtZV06IG9iaiB9O1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSB7IFtlbGVtZW50TmFtZV06IG9iaiB9O1xuICAgIHJlc3VsdFtpbnRlcmZhY2VzX2pzXzEuWE1MX0FUVFJLRVldID0geyBbeG1sTmFtZXNwYWNlS2V5XTogeG1sTmFtZXNwYWNlIH07XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNlcmlhbGl6YXRpb25Qb2xpY3kuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jcmVhdGVDbGllbnRQaXBlbGluZSA9IHZvaWQgMDtcbmNvbnN0IGRlc2VyaWFsaXphdGlvblBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vZGVzZXJpYWxpemF0aW9uUG9saWN5LmpzXCIpO1xuY29uc3QgY29yZV9yZXN0X3BpcGVsaW5lXzEgPSByZXF1aXJlKFwiQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZVwiKTtcbmNvbnN0IHNlcmlhbGl6YXRpb25Qb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3NlcmlhbGl6YXRpb25Qb2xpY3kuanNcIik7XG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgUGlwZWxpbmUgZm9yIHVzZSB3aXRoIGEgU2VydmljZSBDbGllbnQuXG4gKiBBZGRzIGluIGRlc2VyaWFsaXphdGlvblBvbGljeSBieSBkZWZhdWx0LlxuICogQWxzbyBhZGRzIGluIGJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3kgaWYgcGFzc2VkIGEgVG9rZW5DcmVkZW50aWFsLlxuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIGN1c3RvbWl6ZSB0aGUgY3JlYXRlZCBwaXBlbGluZS5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQ2xpZW50UGlwZWxpbmUob3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgcGlwZWxpbmUgPSAoMCwgY29yZV9yZXN0X3BpcGVsaW5lXzEuY3JlYXRlUGlwZWxpbmVGcm9tT3B0aW9ucykob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgPyBvcHRpb25zIDoge30pO1xuICAgIGlmIChvcHRpb25zLmNyZWRlbnRpYWxPcHRpb25zKSB7XG4gICAgICAgIHBpcGVsaW5lLmFkZFBvbGljeSgoMCwgY29yZV9yZXN0X3BpcGVsaW5lXzEuYmVhcmVyVG9rZW5BdXRoZW50aWNhdGlvblBvbGljeSkoe1xuICAgICAgICAgICAgY3JlZGVudGlhbDogb3B0aW9ucy5jcmVkZW50aWFsT3B0aW9ucy5jcmVkZW50aWFsLFxuICAgICAgICAgICAgc2NvcGVzOiBvcHRpb25zLmNyZWRlbnRpYWxPcHRpb25zLmNyZWRlbnRpYWxTY29wZXMsXG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgcGlwZWxpbmUuYWRkUG9saWN5KCgwLCBzZXJpYWxpemF0aW9uUG9saWN5X2pzXzEuc2VyaWFsaXphdGlvblBvbGljeSkob3B0aW9ucy5zZXJpYWxpemF0aW9uT3B0aW9ucyksIHsgcGhhc2U6IFwiU2VyaWFsaXplXCIgfSk7XG4gICAgcGlwZWxpbmUuYWRkUG9saWN5KCgwLCBkZXNlcmlhbGl6YXRpb25Qb2xpY3lfanNfMS5kZXNlcmlhbGl6YXRpb25Qb2xpY3kpKG9wdGlvbnMuZGVzZXJpYWxpemF0aW9uT3B0aW9ucyksIHtcbiAgICAgICAgcGhhc2U6IFwiRGVzZXJpYWxpemVcIixcbiAgICB9KTtcbiAgICByZXR1cm4gcGlwZWxpbmU7XG59XG5leHBvcnRzLmNyZWF0ZUNsaWVudFBpcGVsaW5lID0gY3JlYXRlQ2xpZW50UGlwZWxpbmU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1waXBlbGluZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldENhY2hlZERlZmF1bHRIdHRwQ2xpZW50ID0gdm9pZCAwO1xuY29uc3QgY29yZV9yZXN0X3BpcGVsaW5lXzEgPSByZXF1aXJlKFwiQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZVwiKTtcbmxldCBjYWNoZWRIdHRwQ2xpZW50O1xuZnVuY3Rpb24gZ2V0Q2FjaGVkRGVmYXVsdEh0dHBDbGllbnQoKSB7XG4gICAgaWYgKCFjYWNoZWRIdHRwQ2xpZW50KSB7XG4gICAgICAgIGNhY2hlZEh0dHBDbGllbnQgPSAoMCwgY29yZV9yZXN0X3BpcGVsaW5lXzEuY3JlYXRlRGVmYXVsdEh0dHBDbGllbnQpKCk7XG4gICAgfVxuICAgIHJldHVybiBjYWNoZWRIdHRwQ2xpZW50O1xufVxuZXhwb3J0cy5nZXRDYWNoZWREZWZhdWx0SHR0cENsaWVudCA9IGdldENhY2hlZERlZmF1bHRIdHRwQ2xpZW50O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aHR0cENsaWVudENhY2hlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYXBwZW5kUXVlcnlQYXJhbXMgPSBleHBvcnRzLmdldFJlcXVlc3RVcmwgPSB2b2lkIDA7XG5jb25zdCBvcGVyYXRpb25IZWxwZXJzX2pzXzEgPSByZXF1aXJlKFwiLi9vcGVyYXRpb25IZWxwZXJzLmpzXCIpO1xuY29uc3QgaW50ZXJmYWNlSGVscGVyc19qc18xID0gcmVxdWlyZShcIi4vaW50ZXJmYWNlSGVscGVycy5qc1wiKTtcbmNvbnN0IENvbGxlY3Rpb25Gb3JtYXRUb0RlbGltaXRlck1hcCA9IHtcbiAgICBDU1Y6IFwiLFwiLFxuICAgIFNTVjogXCIgXCIsXG4gICAgTXVsdGk6IFwiTXVsdGlcIixcbiAgICBUU1Y6IFwiXFx0XCIsXG4gICAgUGlwZXM6IFwifFwiLFxufTtcbmZ1bmN0aW9uIGdldFJlcXVlc3RVcmwoYmFzZVVyaSwgb3BlcmF0aW9uU3BlYywgb3BlcmF0aW9uQXJndW1lbnRzLCBmYWxsYmFja09iamVjdCkge1xuICAgIGNvbnN0IHVybFJlcGxhY2VtZW50cyA9IGNhbGN1bGF0ZVVybFJlcGxhY2VtZW50cyhvcGVyYXRpb25TcGVjLCBvcGVyYXRpb25Bcmd1bWVudHMsIGZhbGxiYWNrT2JqZWN0KTtcbiAgICBsZXQgaXNBYnNvbHV0ZVBhdGggPSBmYWxzZTtcbiAgICBsZXQgcmVxdWVzdFVybCA9IHJlcGxhY2VBbGwoYmFzZVVyaSwgdXJsUmVwbGFjZW1lbnRzKTtcbiAgICBpZiAob3BlcmF0aW9uU3BlYy5wYXRoKSB7XG4gICAgICAgIGxldCBwYXRoID0gcmVwbGFjZUFsbChvcGVyYXRpb25TcGVjLnBhdGgsIHVybFJlcGxhY2VtZW50cyk7XG4gICAgICAgIC8vIFFVSVJLOiBzb21ldGltZXMgd2UgZ2V0IGEgcGF0aCBjb21wb25lbnQgbGlrZSAve25leHRMaW5rfVxuICAgICAgICAvLyB3aGljaCBtYXkgYmUgYSBmdWxseSBmb3JtZWQgVVJMIHdpdGggYSBsZWFkaW5nIC8uIEluIHRoYXQgY2FzZSwgd2Ugc2hvdWxkXG4gICAgICAgIC8vIHJlbW92ZSB0aGUgbGVhZGluZyAvXG4gICAgICAgIGlmIChvcGVyYXRpb25TcGVjLnBhdGggPT09IFwiL3tuZXh0TGlua31cIiAmJiBwYXRoLnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG4gICAgICAgICAgICBwYXRoID0gcGF0aC5zdWJzdHJpbmcoMSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUVVJUks6IHNvbWV0aW1lcyB3ZSBnZXQgYSBwYXRoIGNvbXBvbmVudCBsaWtlIHtuZXh0TGlua31cbiAgICAgICAgLy8gd2hpY2ggbWF5IGJlIGEgZnVsbHkgZm9ybWVkIFVSTC4gSW4gdGhhdCBjYXNlLCB3ZSBzaG91bGRcbiAgICAgICAgLy8gaWdub3JlIHRoZSBiYXNlVXJpLlxuICAgICAgICBpZiAoaXNBYnNvbHV0ZVVybChwYXRoKSkge1xuICAgICAgICAgICAgcmVxdWVzdFVybCA9IHBhdGg7XG4gICAgICAgICAgICBpc0Fic29sdXRlUGF0aCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXF1ZXN0VXJsID0gYXBwZW5kUGF0aChyZXF1ZXN0VXJsLCBwYXRoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCB7IHF1ZXJ5UGFyYW1zLCBzZXF1ZW5jZVBhcmFtcyB9ID0gY2FsY3VsYXRlUXVlcnlQYXJhbWV0ZXJzKG9wZXJhdGlvblNwZWMsIG9wZXJhdGlvbkFyZ3VtZW50cywgZmFsbGJhY2tPYmplY3QpO1xuICAgIC8qKlxuICAgICAqIE5vdGljZSB0aGF0IHRoaXMgY2FsbCBzZXRzIHRoZSBgbm9PdmVyd3JpdGVgIHBhcmFtZXRlciB0byB0cnVlIGlmIHRoZSBgcmVxdWVzdFVybGBcbiAgICAgKiBpcyBhbiBhYnNvbHV0ZSBwYXRoLiBUaGlzIGVuc3VyZXMgdGhhdCBleGlzdGluZyBxdWVyeSBwYXJhbWV0ZXIgdmFsdWVzIGluIGByZXF1ZXN0VXJsYFxuICAgICAqIGRvIG5vdCBnZXQgb3ZlcndyaXR0ZW4uIE9uIHRoZSBvdGhlciBoYW5kIHdoZW4gYHJlcXVlc3RVcmxgIGlzIG5vdCBhYnNvbHV0ZSBwYXRoLCBpdFxuICAgICAqIGlzIHN0aWxsIGJlaW5nIGJ1aWx0IHNvIHRoZXJlIGlzIG5vdGhpbmcgdG8gb3ZlcndyaXRlLlxuICAgICAqL1xuICAgIHJlcXVlc3RVcmwgPSBhcHBlbmRRdWVyeVBhcmFtcyhyZXF1ZXN0VXJsLCBxdWVyeVBhcmFtcywgc2VxdWVuY2VQYXJhbXMsIGlzQWJzb2x1dGVQYXRoKTtcbiAgICByZXR1cm4gcmVxdWVzdFVybDtcbn1cbmV4cG9ydHMuZ2V0UmVxdWVzdFVybCA9IGdldFJlcXVlc3RVcmw7XG5mdW5jdGlvbiByZXBsYWNlQWxsKGlucHV0LCByZXBsYWNlbWVudHMpIHtcbiAgICBsZXQgcmVzdWx0ID0gaW5wdXQ7XG4gICAgZm9yIChjb25zdCBbc2VhcmNoVmFsdWUsIHJlcGxhY2VWYWx1ZV0gb2YgcmVwbGFjZW1lbnRzKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdC5zcGxpdChzZWFyY2hWYWx1ZSkuam9pbihyZXBsYWNlVmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gY2FsY3VsYXRlVXJsUmVwbGFjZW1lbnRzKG9wZXJhdGlvblNwZWMsIG9wZXJhdGlvbkFyZ3VtZW50cywgZmFsbGJhY2tPYmplY3QpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IE1hcCgpO1xuICAgIGlmICgoX2EgPSBvcGVyYXRpb25TcGVjLnVybFBhcmFtZXRlcnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5sZW5ndGgpIHtcbiAgICAgICAgZm9yIChjb25zdCB1cmxQYXJhbWV0ZXIgb2Ygb3BlcmF0aW9uU3BlYy51cmxQYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgICBsZXQgdXJsUGFyYW1ldGVyVmFsdWUgPSAoMCwgb3BlcmF0aW9uSGVscGVyc19qc18xLmdldE9wZXJhdGlvbkFyZ3VtZW50VmFsdWVGcm9tUGFyYW1ldGVyKShvcGVyYXRpb25Bcmd1bWVudHMsIHVybFBhcmFtZXRlciwgZmFsbGJhY2tPYmplY3QpO1xuICAgICAgICAgICAgY29uc3QgcGFyYW1ldGVyUGF0aFN0cmluZyA9ICgwLCBpbnRlcmZhY2VIZWxwZXJzX2pzXzEuZ2V0UGF0aFN0cmluZ0Zyb21QYXJhbWV0ZXIpKHVybFBhcmFtZXRlcik7XG4gICAgICAgICAgICB1cmxQYXJhbWV0ZXJWYWx1ZSA9IG9wZXJhdGlvblNwZWMuc2VyaWFsaXplci5zZXJpYWxpemUodXJsUGFyYW1ldGVyLm1hcHBlciwgdXJsUGFyYW1ldGVyVmFsdWUsIHBhcmFtZXRlclBhdGhTdHJpbmcpO1xuICAgICAgICAgICAgaWYgKCF1cmxQYXJhbWV0ZXIuc2tpcEVuY29kaW5nKSB7XG4gICAgICAgICAgICAgICAgdXJsUGFyYW1ldGVyVmFsdWUgPSBlbmNvZGVVUklDb21wb25lbnQodXJsUGFyYW1ldGVyVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0LnNldChgeyR7dXJsUGFyYW1ldGVyLm1hcHBlci5zZXJpYWxpemVkTmFtZSB8fCBwYXJhbWV0ZXJQYXRoU3RyaW5nfX1gLCB1cmxQYXJhbWV0ZXJWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIGlzQWJzb2x1dGVVcmwodXJsKSB7XG4gICAgcmV0dXJuIHVybC5pbmNsdWRlcyhcIjovL1wiKTtcbn1cbmZ1bmN0aW9uIGFwcGVuZFBhdGgodXJsLCBwYXRoVG9BcHBlbmQpIHtcbiAgICBpZiAoIXBhdGhUb0FwcGVuZCkge1xuICAgICAgICByZXR1cm4gdXJsO1xuICAgIH1cbiAgICBjb25zdCBwYXJzZWRVcmwgPSBuZXcgVVJMKHVybCk7XG4gICAgbGV0IG5ld1BhdGggPSBwYXJzZWRVcmwucGF0aG5hbWU7XG4gICAgaWYgKCFuZXdQYXRoLmVuZHNXaXRoKFwiL1wiKSkge1xuICAgICAgICBuZXdQYXRoID0gYCR7bmV3UGF0aH0vYDtcbiAgICB9XG4gICAgaWYgKHBhdGhUb0FwcGVuZC5zdGFydHNXaXRoKFwiL1wiKSkge1xuICAgICAgICBwYXRoVG9BcHBlbmQgPSBwYXRoVG9BcHBlbmQuc3Vic3RyaW5nKDEpO1xuICAgIH1cbiAgICBjb25zdCBzZWFyY2hTdGFydCA9IHBhdGhUb0FwcGVuZC5pbmRleE9mKFwiP1wiKTtcbiAgICBpZiAoc2VhcmNoU3RhcnQgIT09IC0xKSB7XG4gICAgICAgIGNvbnN0IHBhdGggPSBwYXRoVG9BcHBlbmQuc3Vic3RyaW5nKDAsIHNlYXJjaFN0YXJ0KTtcbiAgICAgICAgY29uc3Qgc2VhcmNoID0gcGF0aFRvQXBwZW5kLnN1YnN0cmluZyhzZWFyY2hTdGFydCArIDEpO1xuICAgICAgICBuZXdQYXRoID0gbmV3UGF0aCArIHBhdGg7XG4gICAgICAgIGlmIChzZWFyY2gpIHtcbiAgICAgICAgICAgIHBhcnNlZFVybC5zZWFyY2ggPSBwYXJzZWRVcmwuc2VhcmNoID8gYCR7cGFyc2VkVXJsLnNlYXJjaH0mJHtzZWFyY2h9YCA6IHNlYXJjaDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgbmV3UGF0aCA9IG5ld1BhdGggKyBwYXRoVG9BcHBlbmQ7XG4gICAgfVxuICAgIHBhcnNlZFVybC5wYXRobmFtZSA9IG5ld1BhdGg7XG4gICAgcmV0dXJuIHBhcnNlZFVybC50b1N0cmluZygpO1xufVxuZnVuY3Rpb24gY2FsY3VsYXRlUXVlcnlQYXJhbWV0ZXJzKG9wZXJhdGlvblNwZWMsIG9wZXJhdGlvbkFyZ3VtZW50cywgZmFsbGJhY2tPYmplY3QpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0IHNlcXVlbmNlUGFyYW1zID0gbmV3IFNldCgpO1xuICAgIGlmICgoX2EgPSBvcGVyYXRpb25TcGVjLnF1ZXJ5UGFyYW1ldGVycykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmxlbmd0aCkge1xuICAgICAgICBmb3IgKGNvbnN0IHF1ZXJ5UGFyYW1ldGVyIG9mIG9wZXJhdGlvblNwZWMucXVlcnlQYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgICBpZiAocXVlcnlQYXJhbWV0ZXIubWFwcGVyLnR5cGUubmFtZSA9PT0gXCJTZXF1ZW5jZVwiICYmIHF1ZXJ5UGFyYW1ldGVyLm1hcHBlci5zZXJpYWxpemVkTmFtZSkge1xuICAgICAgICAgICAgICAgIHNlcXVlbmNlUGFyYW1zLmFkZChxdWVyeVBhcmFtZXRlci5tYXBwZXIuc2VyaWFsaXplZE5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHF1ZXJ5UGFyYW1ldGVyVmFsdWUgPSAoMCwgb3BlcmF0aW9uSGVscGVyc19qc18xLmdldE9wZXJhdGlvbkFyZ3VtZW50VmFsdWVGcm9tUGFyYW1ldGVyKShvcGVyYXRpb25Bcmd1bWVudHMsIHF1ZXJ5UGFyYW1ldGVyLCBmYWxsYmFja09iamVjdCk7XG4gICAgICAgICAgICBpZiAoKHF1ZXJ5UGFyYW1ldGVyVmFsdWUgIT09IHVuZGVmaW5lZCAmJiBxdWVyeVBhcmFtZXRlclZhbHVlICE9PSBudWxsKSB8fFxuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVyLm1hcHBlci5yZXF1aXJlZCkge1xuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVyVmFsdWUgPSBvcGVyYXRpb25TcGVjLnNlcmlhbGl6ZXIuc2VyaWFsaXplKHF1ZXJ5UGFyYW1ldGVyLm1hcHBlciwgcXVlcnlQYXJhbWV0ZXJWYWx1ZSwgKDAsIGludGVyZmFjZUhlbHBlcnNfanNfMS5nZXRQYXRoU3RyaW5nRnJvbVBhcmFtZXRlcikocXVlcnlQYXJhbWV0ZXIpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkZWxpbWl0ZXIgPSBxdWVyeVBhcmFtZXRlci5jb2xsZWN0aW9uRm9ybWF0XG4gICAgICAgICAgICAgICAgICAgID8gQ29sbGVjdGlvbkZvcm1hdFRvRGVsaW1pdGVyTWFwW3F1ZXJ5UGFyYW1ldGVyLmNvbGxlY3Rpb25Gb3JtYXRdXG4gICAgICAgICAgICAgICAgICAgIDogXCJcIjtcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShxdWVyeVBhcmFtZXRlclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyByZXBsYWNlIG51bGwgYW5kIHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtZXRlclZhbHVlID0gcXVlcnlQYXJhbWV0ZXJWYWx1ZS5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtID09PSBudWxsIHx8IGl0ZW0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocXVlcnlQYXJhbWV0ZXIuY29sbGVjdGlvbkZvcm1hdCA9PT0gXCJNdWx0aVwiICYmIHF1ZXJ5UGFyYW1ldGVyVmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHF1ZXJ5UGFyYW1ldGVyVmFsdWUpICYmXG4gICAgICAgICAgICAgICAgICAgIChxdWVyeVBhcmFtZXRlci5jb2xsZWN0aW9uRm9ybWF0ID09PSBcIlNTVlwiIHx8IHF1ZXJ5UGFyYW1ldGVyLmNvbGxlY3Rpb25Gb3JtYXQgPT09IFwiVFNWXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVyVmFsdWUgPSBxdWVyeVBhcmFtZXRlclZhbHVlLmpvaW4oZGVsaW1pdGVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFxdWVyeVBhcmFtZXRlci5za2lwRW5jb2RpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocXVlcnlQYXJhbWV0ZXJWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVyVmFsdWUgPSBxdWVyeVBhcmFtZXRlclZhbHVlLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVyVmFsdWUgPSBlbmNvZGVVUklDb21wb25lbnQocXVlcnlQYXJhbWV0ZXJWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gSm9pbiBwaXBlcyBhbmQgQ1NWICphZnRlciogZW5jb2RpbmcsIG9yIHRoZSBzZXJ2ZXIgd2lsbCBiZSB1cHNldC5cbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShxdWVyeVBhcmFtZXRlclZhbHVlKSAmJlxuICAgICAgICAgICAgICAgICAgICAocXVlcnlQYXJhbWV0ZXIuY29sbGVjdGlvbkZvcm1hdCA9PT0gXCJDU1ZcIiB8fCBxdWVyeVBhcmFtZXRlci5jb2xsZWN0aW9uRm9ybWF0ID09PSBcIlBpcGVzXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVyVmFsdWUgPSBxdWVyeVBhcmFtZXRlclZhbHVlLmpvaW4oZGVsaW1pdGVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzdWx0LnNldChxdWVyeVBhcmFtZXRlci5tYXBwZXIuc2VyaWFsaXplZE5hbWUgfHwgKDAsIGludGVyZmFjZUhlbHBlcnNfanNfMS5nZXRQYXRoU3RyaW5nRnJvbVBhcmFtZXRlcikocXVlcnlQYXJhbWV0ZXIpLCBxdWVyeVBhcmFtZXRlclZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBxdWVyeVBhcmFtczogcmVzdWx0LFxuICAgICAgICBzZXF1ZW5jZVBhcmFtcyxcbiAgICB9O1xufVxuZnVuY3Rpb24gc2ltcGxlUGFyc2VRdWVyeVBhcmFtcyhxdWVyeVN0cmluZykge1xuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBNYXAoKTtcbiAgICBpZiAoIXF1ZXJ5U3RyaW5nIHx8IHF1ZXJ5U3RyaW5nWzBdICE9PSBcIj9cIikge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICAvLyByZW1vdmUgdGhlIGxlYWRpbmcgP1xuICAgIHF1ZXJ5U3RyaW5nID0gcXVlcnlTdHJpbmcuc2xpY2UoMSk7XG4gICAgY29uc3QgcGFpcnMgPSBxdWVyeVN0cmluZy5zcGxpdChcIiZcIik7XG4gICAgZm9yIChjb25zdCBwYWlyIG9mIHBhaXJzKSB7XG4gICAgICAgIGNvbnN0IFtuYW1lLCB2YWx1ZV0gPSBwYWlyLnNwbGl0KFwiPVwiLCAyKTtcbiAgICAgICAgY29uc3QgZXhpc3RpbmdWYWx1ZSA9IHJlc3VsdC5nZXQobmFtZSk7XG4gICAgICAgIGlmIChleGlzdGluZ1ZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShleGlzdGluZ1ZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGV4aXN0aW5nVmFsdWUucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuc2V0KG5hbWUsIFtleGlzdGluZ1ZhbHVlLCB2YWx1ZV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0LnNldChuYW1lLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIGFwcGVuZFF1ZXJ5UGFyYW1zKHVybCwgcXVlcnlQYXJhbXMsIHNlcXVlbmNlUGFyYW1zLCBub092ZXJ3cml0ZSA9IGZhbHNlKSB7XG4gICAgaWYgKHF1ZXJ5UGFyYW1zLnNpemUgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG4gICAgY29uc3QgcGFyc2VkVXJsID0gbmV3IFVSTCh1cmwpO1xuICAgIC8vIFFVSVJLOiBwYXJzZWRVcmwuc2VhcmNoUGFyYW1zIHdpbGwgaGF2ZSB0aGVpciBuYW1lL3ZhbHVlIHBhaXJzIGRlY29kZWQsIHdoaWNoXG4gICAgLy8gY2FuIGNoYW5nZSB0aGVpciBtZWFuaW5nIHRvIHRoZSBzZXJ2ZXIsIHN1Y2ggYXMgaW4gdGhlIGNhc2Ugb2YgYSBTQVMgc2lnbmF0dXJlLlxuICAgIC8vIFRvIGF2b2lkIGFjY2lkZW50YWxseSB1bi1lbmNvZGluZyBhIHF1ZXJ5IHBhcmFtLCB3ZSBwYXJzZSB0aGUga2V5L3ZhbHVlcyBvdXJzZWx2ZXNcbiAgICBjb25zdCBjb21iaW5lZFBhcmFtcyA9IHNpbXBsZVBhcnNlUXVlcnlQYXJhbXMocGFyc2VkVXJsLnNlYXJjaCk7XG4gICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIHF1ZXJ5UGFyYW1zKSB7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nVmFsdWUgPSBjb21iaW5lZFBhcmFtcy5nZXQobmFtZSk7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGV4aXN0aW5nVmFsdWUpKSB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBleGlzdGluZ1ZhbHVlLnB1c2goLi4udmFsdWUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlU2V0ID0gbmV3IFNldChleGlzdGluZ1ZhbHVlKTtcbiAgICAgICAgICAgICAgICBjb21iaW5lZFBhcmFtcy5zZXQobmFtZSwgQXJyYXkuZnJvbSh2YWx1ZVNldCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZXhpc3RpbmdWYWx1ZS5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChleGlzdGluZ1ZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZS51bnNoaWZ0KGV4aXN0aW5nVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoc2VxdWVuY2VQYXJhbXMuaGFzKG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgY29tYmluZWRQYXJhbXMuc2V0KG5hbWUsIFtleGlzdGluZ1ZhbHVlLCB2YWx1ZV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFub092ZXJ3cml0ZSkge1xuICAgICAgICAgICAgICAgIGNvbWJpbmVkUGFyYW1zLnNldChuYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb21iaW5lZFBhcmFtcy5zZXQobmFtZSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHNlYXJjaFBpZWNlcyA9IFtdO1xuICAgIGZvciAoY29uc3QgW25hbWUsIHZhbHVlXSBvZiBjb21iaW5lZFBhcmFtcykge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBzZWFyY2hQaWVjZXMucHVzaChgJHtuYW1lfT0ke3ZhbHVlfWApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAvLyBRVUlSSzogSWYgd2UgZ2V0IGFuIGFycmF5IG9mIHZhbHVlcywgaW5jbHVkZSBtdWx0aXBsZSBrZXkvdmFsdWUgcGFpcnNcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc3ViVmFsdWUgb2YgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICBzZWFyY2hQaWVjZXMucHVzaChgJHtuYW1lfT0ke3N1YlZhbHVlfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc2VhcmNoUGllY2VzLnB1c2goYCR7bmFtZX09JHt2YWx1ZX1gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBRVUlSSzogd2UgaGF2ZSB0byBzZXQgc2VhcmNoIG1hbnVhbGx5IGFzIHNlYXJjaFBhcmFtcyB3aWxsIGVuY29kZSBjb21tYSB3aGVuIGl0IHNob3VsZG4ndC5cbiAgICBwYXJzZWRVcmwuc2VhcmNoID0gc2VhcmNoUGllY2VzLmxlbmd0aCA/IGA/JHtzZWFyY2hQaWVjZXMuam9pbihcIiZcIil9YCA6IFwiXCI7XG4gICAgcmV0dXJuIHBhcnNlZFVybC50b1N0cmluZygpO1xufVxuZXhwb3J0cy5hcHBlbmRRdWVyeVBhcmFtcyA9IGFwcGVuZFF1ZXJ5UGFyYW1zO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXJsSGVscGVycy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmxvZ2dlciA9IHZvaWQgMDtcbmNvbnN0IGxvZ2dlcl8xID0gcmVxdWlyZShcIkBhenVyZS9sb2dnZXJcIik7XG5leHBvcnRzLmxvZ2dlciA9ICgwLCBsb2dnZXJfMS5jcmVhdGVDbGllbnRMb2dnZXIpKFwiY29yZS1jbGllbnRcIik7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1sb2cuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TZXJ2aWNlQ2xpZW50ID0gdm9pZCAwO1xuY29uc3QgY29yZV9yZXN0X3BpcGVsaW5lXzEgPSByZXF1aXJlKFwiQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZVwiKTtcbmNvbnN0IHBpcGVsaW5lX2pzXzEgPSByZXF1aXJlKFwiLi9waXBlbGluZS5qc1wiKTtcbmNvbnN0IHV0aWxzX2pzXzEgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IGh0dHBDbGllbnRDYWNoZV9qc18xID0gcmVxdWlyZShcIi4vaHR0cENsaWVudENhY2hlLmpzXCIpO1xuY29uc3Qgb3BlcmF0aW9uSGVscGVyc19qc18xID0gcmVxdWlyZShcIi4vb3BlcmF0aW9uSGVscGVycy5qc1wiKTtcbmNvbnN0IHVybEhlbHBlcnNfanNfMSA9IHJlcXVpcmUoXCIuL3VybEhlbHBlcnMuanNcIik7XG5jb25zdCBpbnRlcmZhY2VIZWxwZXJzX2pzXzEgPSByZXF1aXJlKFwiLi9pbnRlcmZhY2VIZWxwZXJzLmpzXCIpO1xuY29uc3QgbG9nX2pzXzEgPSByZXF1aXJlKFwiLi9sb2cuanNcIik7XG4vKipcbiAqIEluaXRpYWxpemVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBTZXJ2aWNlQ2xpZW50LlxuICovXG5jbGFzcyBTZXJ2aWNlQ2xpZW50IHtcbiAgICAvKipcbiAgICAgKiBUaGUgU2VydmljZUNsaWVudCBjb25zdHJ1Y3RvclxuICAgICAqIEBwYXJhbSBjcmVkZW50aWFsIC0gVGhlIGNyZWRlbnRpYWxzIHVzZWQgZm9yIGF1dGhlbnRpY2F0aW9uIHdpdGggdGhlIHNlcnZpY2UuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgc2VydmljZSBjbGllbnQgb3B0aW9ucyB0aGF0IGdvdmVybiB0aGUgYmVoYXZpb3Igb2YgdGhlIGNsaWVudC5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgdGhpcy5fcmVxdWVzdENvbnRlbnRUeXBlID0gb3B0aW9ucy5yZXF1ZXN0Q29udGVudFR5cGU7XG4gICAgICAgIHRoaXMuX2VuZHBvaW50ID0gKF9hID0gb3B0aW9ucy5lbmRwb2ludCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogb3B0aW9ucy5iYXNlVXJpO1xuICAgICAgICBpZiAob3B0aW9ucy5iYXNlVXJpKSB7XG4gICAgICAgICAgICBsb2dfanNfMS5sb2dnZXIud2FybmluZyhcIlRoZSBiYXNlVXJpIG9wdGlvbiBmb3IgU0RLIENsaWVudHMgaGFzIGJlZW4gZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSBlbmRwb2ludCBpbnN0ZWFkLlwiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9hbGxvd0luc2VjdXJlQ29ubmVjdGlvbiA9IG9wdGlvbnMuYWxsb3dJbnNlY3VyZUNvbm5lY3Rpb247XG4gICAgICAgIHRoaXMuX2h0dHBDbGllbnQgPSBvcHRpb25zLmh0dHBDbGllbnQgfHwgKDAsIGh0dHBDbGllbnRDYWNoZV9qc18xLmdldENhY2hlZERlZmF1bHRIdHRwQ2xpZW50KSgpO1xuICAgICAgICB0aGlzLnBpcGVsaW5lID0gb3B0aW9ucy5waXBlbGluZSB8fCBjcmVhdGVEZWZhdWx0UGlwZWxpbmUob3B0aW9ucyk7XG4gICAgICAgIGlmICgoX2IgPSBvcHRpb25zLmFkZGl0aW9uYWxQb2xpY2llcykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmxlbmd0aCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCB7IHBvbGljeSwgcG9zaXRpb24gfSBvZiBvcHRpb25zLmFkZGl0aW9uYWxQb2xpY2llcykge1xuICAgICAgICAgICAgICAgIC8vIFNpZ24gaGFwcGVucyBhZnRlciBSZXRyeSBhbmQgaXMgY29tbW9ubHkgbmVlZGVkIHRvIG9jY3VyXG4gICAgICAgICAgICAgICAgLy8gYmVmb3JlIHBvbGljaWVzIHRoYXQgaW50ZXJjZXB0IHBvc3QtcmV0cnkuXG4gICAgICAgICAgICAgICAgY29uc3QgYWZ0ZXJQaGFzZSA9IHBvc2l0aW9uID09PSBcInBlclJldHJ5XCIgPyBcIlNpZ25cIiA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB0aGlzLnBpcGVsaW5lLmFkZFBvbGljeShwb2xpY3ksIHtcbiAgICAgICAgICAgICAgICAgICAgYWZ0ZXJQaGFzZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZW5kIHRoZSBwcm92aWRlZCBodHRwUmVxdWVzdC5cbiAgICAgKi9cbiAgICBhc3luYyBzZW5kUmVxdWVzdChyZXF1ZXN0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBpcGVsaW5lLnNlbmRSZXF1ZXN0KHRoaXMuX2h0dHBDbGllbnQsIHJlcXVlc3QpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZW5kIGFuIEhUVFAgcmVxdWVzdCB0aGF0IGlzIHBvcHVsYXRlZCB1c2luZyB0aGUgcHJvdmlkZWQgT3BlcmF0aW9uU3BlYy5cbiAgICAgKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZWQgcmVzdWx0IG9mIHRoZSByZXF1ZXN0LCBiYXNlZCBvbiB0aGUgT3BlcmF0aW9uU3BlYy5cbiAgICAgKiBAcGFyYW0gb3BlcmF0aW9uQXJndW1lbnRzIC0gVGhlIGFyZ3VtZW50cyB0aGF0IHRoZSBIVFRQIHJlcXVlc3QncyB0ZW1wbGF0ZWQgdmFsdWVzIHdpbGwgYmUgcG9wdWxhdGVkIGZyb20uXG4gICAgICogQHBhcmFtIG9wZXJhdGlvblNwZWMgLSBUaGUgT3BlcmF0aW9uU3BlYyB0byB1c2UgdG8gcG9wdWxhdGUgdGhlIGh0dHBSZXF1ZXN0LlxuICAgICAqL1xuICAgIGFzeW5jIHNlbmRPcGVyYXRpb25SZXF1ZXN0KG9wZXJhdGlvbkFyZ3VtZW50cywgb3BlcmF0aW9uU3BlYykge1xuICAgICAgICBjb25zdCBlbmRwb2ludCA9IG9wZXJhdGlvblNwZWMuYmFzZVVybCB8fCB0aGlzLl9lbmRwb2ludDtcbiAgICAgICAgaWYgKCFlbmRwb2ludCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSWYgb3BlcmF0aW9uU3BlYy5iYXNlVXJsIGlzIG5vdCBzcGVjaWZpZWQsIHRoZW4gdGhlIFNlcnZpY2VDbGllbnQgbXVzdCBoYXZlIGEgZW5kcG9pbnQgc3RyaW5nIHByb3BlcnR5IHRoYXQgY29udGFpbnMgdGhlIGJhc2UgVVJMIHRvIHVzZS5cIik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVGVtcGxhdGl6ZWQgVVJMcyBzb21ldGltZXMgcmVmZXJlbmNlIHByb3BlcnRpZXMgb24gdGhlIFNlcnZpY2VDbGllbnQgY2hpbGQgY2xhc3MsXG4gICAgICAgIC8vIHNvIHdlIGhhdmUgdG8gcGFzcyBgdGhpc2AgYmVsb3cgaW4gb3JkZXIgdG8gc2VhcmNoIHRoZXNlIHByb3BlcnRpZXMgaWYgdGhleSdyZVxuICAgICAgICAvLyBub3QgcGFydCBvZiBPcGVyYXRpb25Bcmd1bWVudHNcbiAgICAgICAgY29uc3QgdXJsID0gKDAsIHVybEhlbHBlcnNfanNfMS5nZXRSZXF1ZXN0VXJsKShlbmRwb2ludCwgb3BlcmF0aW9uU3BlYywgb3BlcmF0aW9uQXJndW1lbnRzLCB0aGlzKTtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9ICgwLCBjb3JlX3Jlc3RfcGlwZWxpbmVfMS5jcmVhdGVQaXBlbGluZVJlcXVlc3QpKHtcbiAgICAgICAgICAgIHVybCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJlcXVlc3QubWV0aG9kID0gb3BlcmF0aW9uU3BlYy5odHRwTWV0aG9kO1xuICAgICAgICBjb25zdCBvcGVyYXRpb25JbmZvID0gKDAsIG9wZXJhdGlvbkhlbHBlcnNfanNfMS5nZXRPcGVyYXRpb25SZXF1ZXN0SW5mbykocmVxdWVzdCk7XG4gICAgICAgIG9wZXJhdGlvbkluZm8ub3BlcmF0aW9uU3BlYyA9IG9wZXJhdGlvblNwZWM7XG4gICAgICAgIG9wZXJhdGlvbkluZm8ub3BlcmF0aW9uQXJndW1lbnRzID0gb3BlcmF0aW9uQXJndW1lbnRzO1xuICAgICAgICBjb25zdCBjb250ZW50VHlwZSA9IG9wZXJhdGlvblNwZWMuY29udGVudFR5cGUgfHwgdGhpcy5fcmVxdWVzdENvbnRlbnRUeXBlO1xuICAgICAgICBpZiAoY29udGVudFR5cGUgJiYgb3BlcmF0aW9uU3BlYy5yZXF1ZXN0Qm9keSkge1xuICAgICAgICAgICAgcmVxdWVzdC5oZWFkZXJzLnNldChcIkNvbnRlbnQtVHlwZVwiLCBjb250ZW50VHlwZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IG9wZXJhdGlvbkFyZ3VtZW50cy5vcHRpb25zO1xuICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgY29uc3QgcmVxdWVzdE9wdGlvbnMgPSBvcHRpb25zLnJlcXVlc3RPcHRpb25zO1xuICAgICAgICAgICAgaWYgKHJlcXVlc3RPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcXVlc3RPcHRpb25zLnRpbWVvdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC50aW1lb3V0ID0gcmVxdWVzdE9wdGlvbnMudGltZW91dDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlcXVlc3RPcHRpb25zLm9uVXBsb2FkUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5vblVwbG9hZFByb2dyZXNzID0gcmVxdWVzdE9wdGlvbnMub25VcGxvYWRQcm9ncmVzcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlcXVlc3RPcHRpb25zLm9uRG93bmxvYWRQcm9ncmVzcykge1xuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Lm9uRG93bmxvYWRQcm9ncmVzcyA9IHJlcXVlc3RPcHRpb25zLm9uRG93bmxvYWRQcm9ncmVzcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlcXVlc3RPcHRpb25zLnNob3VsZERlc2VyaWFsaXplICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uSW5mby5zaG91bGREZXNlcmlhbGl6ZSA9IHJlcXVlc3RPcHRpb25zLnNob3VsZERlc2VyaWFsaXplO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocmVxdWVzdE9wdGlvbnMuYWxsb3dJbnNlY3VyZUNvbm5lY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5hbGxvd0luc2VjdXJlQ29ubmVjdGlvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuYWJvcnRTaWduYWwpIHtcbiAgICAgICAgICAgICAgICByZXF1ZXN0LmFib3J0U2lnbmFsID0gb3B0aW9ucy5hYm9ydFNpZ25hbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHRpb25zLnRyYWNpbmdPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdC50cmFjaW5nT3B0aW9ucyA9IG9wdGlvbnMudHJhY2luZ09wdGlvbnM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2FsbG93SW5zZWN1cmVDb25uZWN0aW9uKSB7XG4gICAgICAgICAgICByZXF1ZXN0LmFsbG93SW5zZWN1cmVDb25uZWN0aW9uID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVxdWVzdC5zdHJlYW1SZXNwb25zZVN0YXR1c0NvZGVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJlcXVlc3Quc3RyZWFtUmVzcG9uc2VTdGF0dXNDb2RlcyA9ICgwLCBpbnRlcmZhY2VIZWxwZXJzX2pzXzEuZ2V0U3RyZWFtaW5nUmVzcG9uc2VTdGF0dXNDb2Rlcykob3BlcmF0aW9uU3BlYyk7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJhd1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdChyZXF1ZXN0KTtcbiAgICAgICAgICAgIGNvbnN0IGZsYXRSZXNwb25zZSA9ICgwLCB1dGlsc19qc18xLmZsYXR0ZW5SZXNwb25zZSkocmF3UmVzcG9uc2UsIG9wZXJhdGlvblNwZWMucmVzcG9uc2VzW3Jhd1Jlc3BvbnNlLnN0YXR1c10pO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5vblJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5vblJlc3BvbnNlKHJhd1Jlc3BvbnNlLCBmbGF0UmVzcG9uc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZsYXRSZXNwb25zZTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZXJyb3IgPT09IFwib2JqZWN0XCIgJiYgKGVycm9yID09PSBudWxsIHx8IGVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlcnJvci5yZXNwb25zZSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByYXdSZXNwb25zZSA9IGVycm9yLnJlc3BvbnNlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZsYXRSZXNwb25zZSA9ICgwLCB1dGlsc19qc18xLmZsYXR0ZW5SZXNwb25zZSkocmF3UmVzcG9uc2UsIG9wZXJhdGlvblNwZWMucmVzcG9uc2VzW2Vycm9yLnN0YXR1c0NvZGVdIHx8IG9wZXJhdGlvblNwZWMucmVzcG9uc2VzW1wiZGVmYXVsdFwiXSk7XG4gICAgICAgICAgICAgICAgZXJyb3IuZGV0YWlscyA9IGZsYXRSZXNwb25zZTtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLm9uUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5vblJlc3BvbnNlKHJhd1Jlc3BvbnNlLCBmbGF0UmVzcG9uc2UsIGVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuU2VydmljZUNsaWVudCA9IFNlcnZpY2VDbGllbnQ7XG5mdW5jdGlvbiBjcmVhdGVEZWZhdWx0UGlwZWxpbmUob3B0aW9ucykge1xuICAgIGNvbnN0IGNyZWRlbnRpYWxTY29wZXMgPSBnZXRDcmVkZW50aWFsU2NvcGVzKG9wdGlvbnMpO1xuICAgIGNvbnN0IGNyZWRlbnRpYWxPcHRpb25zID0gb3B0aW9ucy5jcmVkZW50aWFsICYmIGNyZWRlbnRpYWxTY29wZXNcbiAgICAgICAgPyB7IGNyZWRlbnRpYWxTY29wZXMsIGNyZWRlbnRpYWw6IG9wdGlvbnMuY3JlZGVudGlhbCB9XG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiAoMCwgcGlwZWxpbmVfanNfMS5jcmVhdGVDbGllbnRQaXBlbGluZSkoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKSwgeyBjcmVkZW50aWFsT3B0aW9ucyB9KSk7XG59XG5mdW5jdGlvbiBnZXRDcmVkZW50aWFsU2NvcGVzKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucy5jcmVkZW50aWFsU2NvcGVzKSB7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmNyZWRlbnRpYWxTY29wZXM7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmVuZHBvaW50KSB7XG4gICAgICAgIHJldHVybiBgJHtvcHRpb25zLmVuZHBvaW50fS8uZGVmYXVsdGA7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmJhc2VVcmkpIHtcbiAgICAgICAgcmV0dXJuIGAke29wdGlvbnMuYmFzZVVyaX0vLmRlZmF1bHRgO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5jcmVkZW50aWFsICYmICFvcHRpb25zLmNyZWRlbnRpYWxTY29wZXMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBXaGVuIHVzaW5nIGNyZWRlbnRpYWxzLCB0aGUgU2VydmljZUNsaWVudE9wdGlvbnMgbXVzdCBjb250YWluIGVpdGhlciBhIGVuZHBvaW50IG9yIGEgY3JlZGVudGlhbFNjb3Blcy4gVW5hYmxlIHRvIGNyZWF0ZSBhIGJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3lgKTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNlcnZpY2VDbGllbnQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5hdXRob3JpemVSZXF1ZXN0T25DbGFpbUNoYWxsZW5nZSA9IGV4cG9ydHMucGFyc2VDQUVDaGFsbGVuZ2UgPSB2b2lkIDA7XG5jb25zdCBsb2dfanNfMSA9IHJlcXVpcmUoXCIuL2xvZy5qc1wiKTtcbmNvbnN0IGJhc2U2NF9qc18xID0gcmVxdWlyZShcIi4vYmFzZTY0LmpzXCIpO1xuLyoqXG4gKiBDb252ZXJ0czogYEJlYXJlciBhPVwiYlwiLCBjPVwiZFwiLCBCZWFyZXIgZD1cImVcIiwgZj1cImdcImAuXG4gKiBJbnRvOiBgWyB7IGE6ICdiJywgYzogJ2QnIH0sIHsgZDogJ2UnLCBmOiAnZycgfSBdYC5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gcGFyc2VDQUVDaGFsbGVuZ2UoY2hhbGxlbmdlcykge1xuICAgIGNvbnN0IGJlYXJlckNoYWxsZW5nZXMgPSBgLCAke2NoYWxsZW5nZXMudHJpbSgpfWAuc3BsaXQoXCIsIEJlYXJlciBcIikuZmlsdGVyKCh4KSA9PiB4KTtcbiAgICByZXR1cm4gYmVhcmVyQ2hhbGxlbmdlcy5tYXAoKGNoYWxsZW5nZSkgPT4ge1xuICAgICAgICBjb25zdCBjaGFsbGVuZ2VQYXJ0cyA9IGAke2NoYWxsZW5nZS50cmltKCl9LCBgLnNwbGl0KCdcIiwgJykuZmlsdGVyKCh4KSA9PiB4KTtcbiAgICAgICAgY29uc3Qga2V5VmFsdWVQYWlycyA9IGNoYWxsZW5nZVBhcnRzLm1hcCgoa2V5VmFsdWUpID0+ICgoW2tleSwgdmFsdWVdKSA9PiAoeyBba2V5XTogdmFsdWUgfSkpKGtleVZhbHVlLnRyaW0oKS5zcGxpdCgnPVwiJykpKTtcbiAgICAgICAgLy8gS2V5LXZhbHVlIHBhaXJzIHRvIHBsYWluIG9iamVjdDpcbiAgICAgICAgcmV0dXJuIGtleVZhbHVlUGFpcnMucmVkdWNlKChhLCBiKSA9PiAoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBhKSwgYikpLCB7fSk7XG4gICAgfSk7XG59XG5leHBvcnRzLnBhcnNlQ0FFQ2hhbGxlbmdlID0gcGFyc2VDQUVDaGFsbGVuZ2U7XG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgYXMgYSBjYWxsYmFjayBmb3IgdGhlIGBiZWFyZXJUb2tlbkF1dGhlbnRpY2F0aW9uUG9saWN5YCBvZiBgQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZWAsIHRvIHN1cHBvcnQgQ0FFIGNoYWxsZW5nZXM6XG4gKiBbQ29udGludW91cyBBY2Nlc3MgRXZhbHVhdGlvbl0oaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vYXp1cmUvYWN0aXZlLWRpcmVjdG9yeS9jb25kaXRpb25hbC1hY2Nlc3MvY29uY2VwdC1jb250aW51b3VzLWFjY2Vzcy1ldmFsdWF0aW9uKS5cbiAqXG4gKiBDYWxsIHRoZSBgYmVhcmVyVG9rZW5BdXRoZW50aWNhdGlvblBvbGljeWAgd2l0aCB0aGUgZm9sbG93aW5nIG9wdGlvbnM6XG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3kgfSBmcm9tIFwiQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZVwiO1xuICogaW1wb3J0IHsgYXV0aG9yaXplUmVxdWVzdE9uQ2xhaW1DaGFsbGVuZ2UgfSBmcm9tIFwiQGF6dXJlL2NvcmUtY2xpZW50XCI7XG4gKlxuICogY29uc3QgYmVhcmVyVG9rZW5BdXRoZW50aWNhdGlvblBvbGljeSA9IGJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3koe1xuICogICBhdXRob3JpemVSZXF1ZXN0T25DaGFsbGVuZ2U6IGF1dGhvcml6ZVJlcXVlc3RPbkNsYWltQ2hhbGxlbmdlXG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIE9uY2UgcHJvdmlkZWQsIHRoZSBgYmVhcmVyVG9rZW5BdXRoZW50aWNhdGlvblBvbGljeWAgcG9saWN5IHdpbGwgaW50ZXJuYWxseSBoYW5kbGUgQ29udGludW91cyBBY2Nlc3MgRXZhbHVhdGlvbiAoQ0FFKSBjaGFsbGVuZ2VzLlxuICogV2hlbiBpdCBjYW4ndCBjb21wbGV0ZSBhIGNoYWxsZW5nZSBpdCB3aWxsIHJldHVybiB0aGUgNDAxICh1bmF1dGhvcml6ZWQpIHJlc3BvbnNlIGZyb20gQVJNLlxuICpcbiAqIEV4YW1wbGUgY2hhbGxlbmdlIHdpdGggY2xhaW1zOlxuICpcbiAqIGBgYFxuICogQmVhcmVyIGF1dGhvcml6YXRpb25fdXJpPVwiaHR0cHM6Ly9sb2dpbi53aW5kb3dzLXBwZS5uZXQvXCIsIGVycm9yPVwiaW52YWxpZF90b2tlblwiLFxuICogZXJyb3JfZGVzY3JpcHRpb249XCJVc2VyIHNlc3Npb24gaGFzIGJlZW4gcmV2b2tlZFwiLFxuICogY2xhaW1zPVwiZXlKaFkyTmxjM05mZEc5clpXNGlPbnNpYm1KbUlqcDdJbVZ6YzJWdWRHbGhiQ0k2ZEhKMVpTd2dJblpoYkhWbElqb2lNVFl3TXpjME1qZ3dNQ0o5ZlgwPVwiXG4gKiBgYGBcbiAqL1xuYXN5bmMgZnVuY3Rpb24gYXV0aG9yaXplUmVxdWVzdE9uQ2xhaW1DaGFsbGVuZ2Uob25DaGFsbGVuZ2VPcHRpb25zKSB7XG4gICAgY29uc3QgeyBzY29wZXMsIHJlc3BvbnNlIH0gPSBvbkNoYWxsZW5nZU9wdGlvbnM7XG4gICAgY29uc3QgbG9nZ2VyID0gb25DaGFsbGVuZ2VPcHRpb25zLmxvZ2dlciB8fCBsb2dfanNfMS5sb2dnZXI7XG4gICAgY29uc3QgY2hhbGxlbmdlID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoXCJXV1ctQXV0aGVudGljYXRlXCIpO1xuICAgIGlmICghY2hhbGxlbmdlKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKGBUaGUgV1dXLUF1dGhlbnRpY2F0ZSBoZWFkZXIgd2FzIG1pc3NpbmcuIEZhaWxlZCB0byBwZXJmb3JtIHRoZSBDb250aW51b3VzIEFjY2VzcyBFdmFsdWF0aW9uIGF1dGhlbnRpY2F0aW9uIGZsb3cuYCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgY2hhbGxlbmdlcyA9IHBhcnNlQ0FFQ2hhbGxlbmdlKGNoYWxsZW5nZSkgfHwgW107XG4gICAgY29uc3QgcGFyc2VkQ2hhbGxlbmdlID0gY2hhbGxlbmdlcy5maW5kKCh4KSA9PiB4LmNsYWltcyk7XG4gICAgaWYgKCFwYXJzZWRDaGFsbGVuZ2UpIHtcbiAgICAgICAgbG9nZ2VyLmluZm8oYFRoZSBXV1ctQXV0aGVudGljYXRlIGhlYWRlciB3YXMgbWlzc2luZyB0aGUgbmVjZXNzYXJ5IFwiY2xhaW1zXCIgdG8gcGVyZm9ybSB0aGUgQ29udGludW91cyBBY2Nlc3MgRXZhbHVhdGlvbiBhdXRoZW50aWNhdGlvbiBmbG93LmApO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gYXdhaXQgb25DaGFsbGVuZ2VPcHRpb25zLmdldEFjY2Vzc1Rva2VuKHBhcnNlZENoYWxsZW5nZS5zY29wZSA/IFtwYXJzZWRDaGFsbGVuZ2Uuc2NvcGVdIDogc2NvcGVzLCB7XG4gICAgICAgIGNsYWltczogKDAsIGJhc2U2NF9qc18xLmRlY29kZVN0cmluZ1RvU3RyaW5nKShwYXJzZWRDaGFsbGVuZ2UuY2xhaW1zKSxcbiAgICB9KTtcbiAgICBpZiAoIWFjY2Vzc1Rva2VuKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgb25DaGFsbGVuZ2VPcHRpb25zLnJlcXVlc3QuaGVhZGVycy5zZXQoXCJBdXRob3JpemF0aW9uXCIsIGBCZWFyZXIgJHthY2Nlc3NUb2tlbi50b2tlbn1gKTtcbiAgICByZXR1cm4gdHJ1ZTtcbn1cbmV4cG9ydHMuYXV0aG9yaXplUmVxdWVzdE9uQ2xhaW1DaGFsbGVuZ2UgPSBhdXRob3JpemVSZXF1ZXN0T25DbGFpbUNoYWxsZW5nZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWF1dGhvcml6ZVJlcXVlc3RPbkNsYWltQ2hhbGxlbmdlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYXV0aG9yaXplUmVxdWVzdE9uVGVuYW50Q2hhbGxlbmdlID0gdm9pZCAwO1xuLyoqXG4gKiBBIHNldCBvZiBjb25zdGFudHMgdXNlZCBpbnRlcm5hbGx5IHdoZW4gcHJvY2Vzc2luZyByZXF1ZXN0cy5cbiAqL1xuY29uc3QgQ29uc3RhbnRzID0ge1xuICAgIERlZmF1bHRTY29wZTogXCIvLmRlZmF1bHRcIixcbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIGNvbnN0YW50cyBmb3IgdXNlIHdpdGggSFRUUCBoZWFkZXJzLlxuICAgICAqL1xuICAgIEhlYWRlckNvbnN0YW50czoge1xuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIEF1dGhvcml6YXRpb24gaGVhZGVyLlxuICAgICAgICAgKi9cbiAgICAgICAgQVVUSE9SSVpBVElPTjogXCJhdXRob3JpemF0aW9uXCIsXG4gICAgfSxcbn07XG5mdW5jdGlvbiBpc1V1aWQodGV4dCkge1xuICAgIHJldHVybiAvXlswLTlhLWZBLUZdezh9XFxiLVswLTlhLWZBLUZdezR9XFxiLVswLTlhLWZBLUZdezR9XFxiLVswLTlhLWZBLUZdezR9XFxiLVswLTlhLWZBLUZdezEyfSQvLnRlc3QodGV4dCk7XG59XG4vKipcbiAqIERlZmluZXMgYSBjYWxsYmFjayB0byBoYW5kbGUgYXV0aCBjaGFsbGVuZ2UgZm9yIFN0b3JhZ2UgQVBJcy5cbiAqIFRoaXMgaW1wbGVtZW50cyB0aGUgYmVhcmVyIGNoYWxsZW5nZSBwcm9jZXNzIGRlc2NyaWJlZCBoZXJlOiBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvYXV0aG9yaXplLXdpdGgtYXp1cmUtYWN0aXZlLWRpcmVjdG9yeSNiZWFyZXItY2hhbGxlbmdlXG4gKiBIYW5kbGluZyBoYXMgc3BlY2lmaWMgZmVhdHVyZXMgZm9yIHN0b3JhZ2UgdGhhdCBkZXBhcnRzIHRvIHRoZSBnZW5lcmFsIEFBRCBjaGFsbGVuZ2UgZG9jcy5cbiAqKi9cbmNvbnN0IGF1dGhvcml6ZVJlcXVlc3RPblRlbmFudENoYWxsZW5nZSA9IGFzeW5jIChjaGFsbGVuZ2VPcHRpb25zKSA9PiB7XG4gICAgY29uc3QgcmVxdWVzdE9wdGlvbnMgPSByZXF1ZXN0VG9PcHRpb25zKGNoYWxsZW5nZU9wdGlvbnMucmVxdWVzdCk7XG4gICAgY29uc3QgY2hhbGxlbmdlID0gZ2V0Q2hhbGxlbmdlKGNoYWxsZW5nZU9wdGlvbnMucmVzcG9uc2UpO1xuICAgIGlmIChjaGFsbGVuZ2UpIHtcbiAgICAgICAgY29uc3QgY2hhbGxlbmdlSW5mbyA9IHBhcnNlQ2hhbGxlbmdlKGNoYWxsZW5nZSk7XG4gICAgICAgIGNvbnN0IGNoYWxsZW5nZVNjb3BlcyA9IGJ1aWxkU2NvcGVzKGNoYWxsZW5nZU9wdGlvbnMsIGNoYWxsZW5nZUluZm8pO1xuICAgICAgICBjb25zdCB0ZW5hbnRJZCA9IGV4dHJhY3RUZW5hbnRJZChjaGFsbGVuZ2VJbmZvKTtcbiAgICAgICAgaWYgKCF0ZW5hbnRJZCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gYXdhaXQgY2hhbGxlbmdlT3B0aW9ucy5nZXRBY2Nlc3NUb2tlbihjaGFsbGVuZ2VTY29wZXMsIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcmVxdWVzdE9wdGlvbnMpLCB7IHRlbmFudElkIH0pKTtcbiAgICAgICAgaWYgKCFhY2Nlc3NUb2tlbikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNoYWxsZW5nZU9wdGlvbnMucmVxdWVzdC5oZWFkZXJzLnNldChDb25zdGFudHMuSGVhZGVyQ29uc3RhbnRzLkFVVEhPUklaQVRJT04sIGBCZWFyZXIgJHthY2Nlc3NUb2tlbi50b2tlbn1gKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5leHBvcnRzLmF1dGhvcml6ZVJlcXVlc3RPblRlbmFudENoYWxsZW5nZSA9IGF1dGhvcml6ZVJlcXVlc3RPblRlbmFudENoYWxsZW5nZTtcbi8qKlxuICogRXh0cmFjdHMgdGhlIHRlbmFudCBpZCBmcm9tIHRoZSBjaGFsbGVuZ2UgaW5mb3JtYXRpb25cbiAqIFRoZSB0ZW5hbnQgaWQgaXMgY29udGFpbmVkIGluIHRoZSBhdXRob3JpemF0aW9uX3VyaSBhcyB0aGUgZmlyc3RcbiAqIHBhdGggcGFydC5cbiAqL1xuZnVuY3Rpb24gZXh0cmFjdFRlbmFudElkKGNoYWxsZW5nZUluZm8pIHtcbiAgICBjb25zdCBwYXJzZWRBdXRoVXJpID0gbmV3IFVSTChjaGFsbGVuZ2VJbmZvLmF1dGhvcml6YXRpb25fdXJpKTtcbiAgICBjb25zdCBwYXRoU2VnbWVudHMgPSBwYXJzZWRBdXRoVXJpLnBhdGhuYW1lLnNwbGl0KFwiL1wiKTtcbiAgICBjb25zdCB0ZW5hbnRJZCA9IHBhdGhTZWdtZW50c1sxXTtcbiAgICBpZiAodGVuYW50SWQgJiYgaXNVdWlkKHRlbmFudElkKSkge1xuICAgICAgICByZXR1cm4gdGVuYW50SWQ7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG4vKipcbiAqIEJ1aWxkcyB0aGUgYXV0aGVudGljYXRpb24gc2NvcGVzIGJhc2VkIG9uIHRoZSBpbmZvcm1hdGlvbiB0aGF0IGNvbWVzIGluIHRoZVxuICogY2hhbGxlbmdlIGluZm9ybWF0aW9uLiBTY29wZXMgdXJsIGlzIHByZXNlbnQgaW4gdGhlIHJlc291cmNlX2lkLCBpZiBpdCBpcyBlbXB0eVxuICogd2Uga2VlcCB1c2luZyB0aGUgb3JpZ2luYWwgc2NvcGVzLlxuICovXG5mdW5jdGlvbiBidWlsZFNjb3BlcyhjaGFsbGVuZ2VPcHRpb25zLCBjaGFsbGVuZ2VJbmZvKSB7XG4gICAgaWYgKCFjaGFsbGVuZ2VJbmZvLnJlc291cmNlX2lkKSB7XG4gICAgICAgIHJldHVybiBjaGFsbGVuZ2VPcHRpb25zLnNjb3BlcztcbiAgICB9XG4gICAgY29uc3QgY2hhbGxlbmdlU2NvcGVzID0gbmV3IFVSTChjaGFsbGVuZ2VJbmZvLnJlc291cmNlX2lkKTtcbiAgICBjaGFsbGVuZ2VTY29wZXMucGF0aG5hbWUgPSBDb25zdGFudHMuRGVmYXVsdFNjb3BlO1xuICAgIGxldCBzY29wZSA9IGNoYWxsZW5nZVNjb3Blcy50b1N0cmluZygpO1xuICAgIGlmIChzY29wZSA9PT0gXCJodHRwczovL2Rpc2suYXp1cmUuY29tLy5kZWZhdWx0XCIpIHtcbiAgICAgICAgLy8gdGhlIGV4dHJhIHNsYXNoIGlzIHJlcXVpcmVkIGJ5IHRoZSBzZXJ2aWNlXG4gICAgICAgIHNjb3BlID0gXCJodHRwczovL2Rpc2suYXp1cmUuY29tLy8uZGVmYXVsdFwiO1xuICAgIH1cbiAgICByZXR1cm4gW3Njb3BlXTtcbn1cbi8qKlxuICogV2Ugd2lsbCByZXRyaWV2ZSB0aGUgY2hhbGxlbmdlIG9ubHkgaWYgdGhlIHJlc3BvbnNlIHN0YXR1cyBjb2RlIHdhcyA0MDEsXG4gKiBhbmQgaWYgdGhlIHJlc3BvbnNlIGNvbnRhaW5lZCB0aGUgaGVhZGVyIFwiV1dXLUF1dGhlbnRpY2F0ZVwiIHdpdGggYSBub24tZW1wdHkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGdldENoYWxsZW5nZShyZXNwb25zZSkge1xuICAgIGNvbnN0IGNoYWxsZW5nZSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFwiV1dXLUF1dGhlbnRpY2F0ZVwiKTtcbiAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDEgJiYgY2hhbGxlbmdlKSB7XG4gICAgICAgIHJldHVybiBjaGFsbGVuZ2U7XG4gICAgfVxuICAgIHJldHVybjtcbn1cbi8qKlxuICogQ29udmVydHM6IGBCZWFyZXIgYT1cImJcIiBjPVwiZFwiYC5cbiAqIEludG86IGBbIHsgYTogJ2InLCBjOiAnZCcgfV1gLlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBwYXJzZUNoYWxsZW5nZShjaGFsbGVuZ2UpIHtcbiAgICBjb25zdCBiZWFyZXJDaGFsbGVuZ2UgPSBjaGFsbGVuZ2Uuc2xpY2UoXCJCZWFyZXIgXCIubGVuZ3RoKTtcbiAgICBjb25zdCBjaGFsbGVuZ2VQYXJ0cyA9IGAke2JlYXJlckNoYWxsZW5nZS50cmltKCl9IGAuc3BsaXQoXCIgXCIpLmZpbHRlcigoeCkgPT4geCk7XG4gICAgY29uc3Qga2V5VmFsdWVQYWlycyA9IGNoYWxsZW5nZVBhcnRzLm1hcCgoa2V5VmFsdWUpID0+ICgoW2tleSwgdmFsdWVdKSA9PiAoeyBba2V5XTogdmFsdWUgfSkpKGtleVZhbHVlLnRyaW0oKS5zcGxpdChcIj1cIikpKTtcbiAgICAvLyBLZXktdmFsdWUgcGFpcnMgdG8gcGxhaW4gb2JqZWN0OlxuICAgIHJldHVybiBrZXlWYWx1ZVBhaXJzLnJlZHVjZSgoYSwgYikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYSksIGIpKSwge30pO1xufVxuLyoqXG4gKiBFeHRyYWN0cyB0aGUgb3B0aW9ucyBmb3JtIGEgUGlwZWxpbmUgUmVxdWVzdCBmb3IgbGF0ZXIgcmUtdXNlXG4gKi9cbmZ1bmN0aW9uIHJlcXVlc3RUb09wdGlvbnMocmVxdWVzdCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGFib3J0U2lnbmFsOiByZXF1ZXN0LmFib3J0U2lnbmFsLFxuICAgICAgICByZXF1ZXN0T3B0aW9uczoge1xuICAgICAgICAgICAgdGltZW91dDogcmVxdWVzdC50aW1lb3V0LFxuICAgICAgICB9LFxuICAgICAgICB0cmFjaW5nT3B0aW9uczogcmVxdWVzdC50cmFjaW5nT3B0aW9ucyxcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXV0aG9yaXplUmVxdWVzdE9uVGVuYW50Q2hhbGxlbmdlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYXV0aG9yaXplUmVxdWVzdE9uVGVuYW50Q2hhbGxlbmdlID0gZXhwb3J0cy5hdXRob3JpemVSZXF1ZXN0T25DbGFpbUNoYWxsZW5nZSA9IGV4cG9ydHMuc2VyaWFsaXphdGlvblBvbGljeU5hbWUgPSBleHBvcnRzLnNlcmlhbGl6YXRpb25Qb2xpY3kgPSBleHBvcnRzLmRlc2VyaWFsaXphdGlvblBvbGljeU5hbWUgPSBleHBvcnRzLmRlc2VyaWFsaXphdGlvblBvbGljeSA9IGV4cG9ydHMuWE1MX0NIQVJLRVkgPSBleHBvcnRzLlhNTF9BVFRSS0VZID0gZXhwb3J0cy5jcmVhdGVDbGllbnRQaXBlbGluZSA9IGV4cG9ydHMuU2VydmljZUNsaWVudCA9IGV4cG9ydHMuTWFwcGVyVHlwZU5hbWVzID0gZXhwb3J0cy5jcmVhdGVTZXJpYWxpemVyID0gdm9pZCAwO1xudmFyIHNlcmlhbGl6ZXJfanNfMSA9IHJlcXVpcmUoXCIuL3NlcmlhbGl6ZXIuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTZXJpYWxpemVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZXJpYWxpemVyX2pzXzEuY3JlYXRlU2VyaWFsaXplcjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk1hcHBlclR5cGVOYW1lc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2VyaWFsaXplcl9qc18xLk1hcHBlclR5cGVOYW1lczsgfSB9KTtcbnZhciBzZXJ2aWNlQ2xpZW50X2pzXzEgPSByZXF1aXJlKFwiLi9zZXJ2aWNlQ2xpZW50LmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiU2VydmljZUNsaWVudFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2VydmljZUNsaWVudF9qc18xLlNlcnZpY2VDbGllbnQ7IH0gfSk7XG52YXIgcGlwZWxpbmVfanNfMSA9IHJlcXVpcmUoXCIuL3BpcGVsaW5lLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ2xpZW50UGlwZWxpbmVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBpcGVsaW5lX2pzXzEuY3JlYXRlQ2xpZW50UGlwZWxpbmU7IH0gfSk7XG52YXIgaW50ZXJmYWNlc19qc18xID0gcmVxdWlyZShcIi4vaW50ZXJmYWNlcy5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlhNTF9BVFRSS0VZXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBpbnRlcmZhY2VzX2pzXzEuWE1MX0FUVFJLRVk7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJYTUxfQ0hBUktFWVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gaW50ZXJmYWNlc19qc18xLlhNTF9DSEFSS0VZOyB9IH0pO1xudmFyIGRlc2VyaWFsaXphdGlvblBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vZGVzZXJpYWxpemF0aW9uUG9saWN5LmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVzZXJpYWxpemF0aW9uUG9saWN5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkZXNlcmlhbGl6YXRpb25Qb2xpY3lfanNfMS5kZXNlcmlhbGl6YXRpb25Qb2xpY3k7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZXNlcmlhbGl6YXRpb25Qb2xpY3lOYW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkZXNlcmlhbGl6YXRpb25Qb2xpY3lfanNfMS5kZXNlcmlhbGl6YXRpb25Qb2xpY3lOYW1lOyB9IH0pO1xudmFyIHNlcmlhbGl6YXRpb25Qb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3NlcmlhbGl6YXRpb25Qb2xpY3kuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzZXJpYWxpemF0aW9uUG9saWN5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZXJpYWxpemF0aW9uUG9saWN5X2pzXzEuc2VyaWFsaXphdGlvblBvbGljeTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNlcmlhbGl6YXRpb25Qb2xpY3lOYW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZXJpYWxpemF0aW9uUG9saWN5X2pzXzEuc2VyaWFsaXphdGlvblBvbGljeU5hbWU7IH0gfSk7XG52YXIgYXV0aG9yaXplUmVxdWVzdE9uQ2xhaW1DaGFsbGVuZ2VfanNfMSA9IHJlcXVpcmUoXCIuL2F1dGhvcml6ZVJlcXVlc3RPbkNsYWltQ2hhbGxlbmdlLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYXV0aG9yaXplUmVxdWVzdE9uQ2xhaW1DaGFsbGVuZ2VcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGF1dGhvcml6ZVJlcXVlc3RPbkNsYWltQ2hhbGxlbmdlX2pzXzEuYXV0aG9yaXplUmVxdWVzdE9uQ2xhaW1DaGFsbGVuZ2U7IH0gfSk7XG52YXIgYXV0aG9yaXplUmVxdWVzdE9uVGVuYW50Q2hhbGxlbmdlX2pzXzEgPSByZXF1aXJlKFwiLi9hdXRob3JpemVSZXF1ZXN0T25UZW5hbnRDaGFsbGVuZ2UuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhdXRob3JpemVSZXF1ZXN0T25UZW5hbnRDaGFsbGVuZ2VcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGF1dGhvcml6ZVJlcXVlc3RPblRlbmFudENoYWxsZW5nZV9qc18xLmF1dGhvcml6ZVJlcXVlc3RPblRlbmFudENoYWxsZW5nZTsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuSHR0cEhlYWRlcnMgPSBleHBvcnRzLnRvSHR0cEhlYWRlcnNMaWtlID0gZXhwb3J0cy50b1dlYlJlc291cmNlTGlrZSA9IGV4cG9ydHMudG9QaXBlbGluZVJlcXVlc3QgPSB2b2lkIDA7XG5jb25zdCBjb3JlX3Jlc3RfcGlwZWxpbmVfMSA9IHJlcXVpcmUoXCJAYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lXCIpO1xuLy8gV2UgdXNlIGEgY3VzdG9tIHN5bWJvbCB0byBjYWNoZSBhIHJlZmVyZW5jZSB0byB0aGUgb3JpZ2luYWwgcmVxdWVzdCB3aXRob3V0XG4vLyBleHBvc2luZyBpdCBvbiB0aGUgcHVibGljIGludGVyZmFjZS5cbmNvbnN0IG9yaWdpbmFsUmVxdWVzdFN5bWJvbCA9IFN5bWJvbChcIk9yaWdpbmFsIFBpcGVsaW5lUmVxdWVzdFwiKTtcbi8vIFN5bWJvbC5mb3IoKSB3aWxsIHJldHVybiB0aGUgc2FtZSBzeW1ib2wgaWYgaXQncyBhbHJlYWR5IGJlZW4gY3JlYXRlZFxuLy8gVGhpcyBwYXJ0aWN1bGFyIG9uZSBpcyB1c2VkIGluIGNvcmUtY2xpZW50IHRvIGhhbmRsZSB0aGUgY2FzZSBvZiB3aGVuIGEgcmVxdWVzdCBpc1xuLy8gY2xvbmVkIGJ1dCB3ZSBuZWVkIHRvIHJldHJpZXZlIHRoZSBPcGVyYXRpb25TcGVjIGFuZCBPcGVyYXRpb25Bcmd1bWVudHMgZnJvbSB0aGVcbi8vIG9yaWdpbmFsIHJlcXVlc3QuXG5jb25zdCBvcmlnaW5hbENsaWVudFJlcXVlc3RTeW1ib2wgPSBTeW1ib2wuZm9yKFwiQGF6dXJlL2NvcmUtY2xpZW50IG9yaWdpbmFsIHJlcXVlc3RcIik7XG5mdW5jdGlvbiB0b1BpcGVsaW5lUmVxdWVzdCh3ZWJSZXNvdXJjZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgY29tcGF0V2ViUmVzb3VyY2UgPSB3ZWJSZXNvdXJjZTtcbiAgICBjb25zdCByZXF1ZXN0ID0gY29tcGF0V2ViUmVzb3VyY2Vbb3JpZ2luYWxSZXF1ZXN0U3ltYm9sXTtcbiAgICBjb25zdCBoZWFkZXJzID0gKDAsIGNvcmVfcmVzdF9waXBlbGluZV8xLmNyZWF0ZUh0dHBIZWFkZXJzKSh3ZWJSZXNvdXJjZS5oZWFkZXJzLnRvSnNvbih7IHByZXNlcnZlQ2FzZTogdHJ1ZSB9KSk7XG4gICAgaWYgKHJlcXVlc3QpIHtcbiAgICAgICAgcmVxdWVzdC5oZWFkZXJzID0gaGVhZGVycztcbiAgICAgICAgcmV0dXJuIHJlcXVlc3Q7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjb25zdCBuZXdSZXF1ZXN0ID0gKDAsIGNvcmVfcmVzdF9waXBlbGluZV8xLmNyZWF0ZVBpcGVsaW5lUmVxdWVzdCkoe1xuICAgICAgICAgICAgdXJsOiB3ZWJSZXNvdXJjZS51cmwsXG4gICAgICAgICAgICBtZXRob2Q6IHdlYlJlc291cmNlLm1ldGhvZCxcbiAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHdlYlJlc291cmNlLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgICAgIHRpbWVvdXQ6IHdlYlJlc291cmNlLnRpbWVvdXQsXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHdlYlJlc291cmNlLnJlcXVlc3RJZCxcbiAgICAgICAgICAgIGFib3J0U2lnbmFsOiB3ZWJSZXNvdXJjZS5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgIGJvZHk6IHdlYlJlc291cmNlLmJvZHksXG4gICAgICAgICAgICBmb3JtRGF0YTogd2ViUmVzb3VyY2UuZm9ybURhdGEsXG4gICAgICAgICAgICBkaXNhYmxlS2VlcEFsaXZlOiAhIXdlYlJlc291cmNlLmtlZXBBbGl2ZSxcbiAgICAgICAgICAgIG9uRG93bmxvYWRQcm9ncmVzczogd2ViUmVzb3VyY2Uub25Eb3dubG9hZFByb2dyZXNzLFxuICAgICAgICAgICAgb25VcGxvYWRQcm9ncmVzczogd2ViUmVzb3VyY2Uub25VcGxvYWRQcm9ncmVzcyxcbiAgICAgICAgICAgIHByb3h5U2V0dGluZ3M6IHdlYlJlc291cmNlLnByb3h5U2V0dGluZ3MsXG4gICAgICAgICAgICBzdHJlYW1SZXNwb25zZVN0YXR1c0NvZGVzOiB3ZWJSZXNvdXJjZS5zdHJlYW1SZXNwb25zZVN0YXR1c0NvZGVzLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKG9wdGlvbnMub3JpZ2luYWxSZXF1ZXN0KSB7XG4gICAgICAgICAgICBuZXdSZXF1ZXN0W29yaWdpbmFsQ2xpZW50UmVxdWVzdFN5bWJvbF0gPVxuICAgICAgICAgICAgICAgIG9wdGlvbnMub3JpZ2luYWxSZXF1ZXN0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXdSZXF1ZXN0O1xuICAgIH1cbn1cbmV4cG9ydHMudG9QaXBlbGluZVJlcXVlc3QgPSB0b1BpcGVsaW5lUmVxdWVzdDtcbmZ1bmN0aW9uIHRvV2ViUmVzb3VyY2VMaWtlKHJlcXVlc3QsIG9wdGlvbnMpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3Qgb3JpZ2luYWxSZXF1ZXN0ID0gKF9hID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLm9yaWdpbmFsUmVxdWVzdCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogcmVxdWVzdDtcbiAgICBjb25zdCB3ZWJSZXNvdXJjZSA9IHtcbiAgICAgICAgdXJsOiByZXF1ZXN0LnVybCxcbiAgICAgICAgbWV0aG9kOiByZXF1ZXN0Lm1ldGhvZCxcbiAgICAgICAgaGVhZGVyczogdG9IdHRwSGVhZGVyc0xpa2UocmVxdWVzdC5oZWFkZXJzKSxcbiAgICAgICAgd2l0aENyZWRlbnRpYWxzOiByZXF1ZXN0LndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgdGltZW91dDogcmVxdWVzdC50aW1lb3V0LFxuICAgICAgICByZXF1ZXN0SWQ6IHJlcXVlc3QuaGVhZGVycy5nZXQoXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIpIHx8IHJlcXVlc3QucmVxdWVzdElkLFxuICAgICAgICBhYm9ydFNpZ25hbDogcmVxdWVzdC5hYm9ydFNpZ25hbCxcbiAgICAgICAgYm9keTogcmVxdWVzdC5ib2R5LFxuICAgICAgICBmb3JtRGF0YTogcmVxdWVzdC5mb3JtRGF0YSxcbiAgICAgICAga2VlcEFsaXZlOiAhIXJlcXVlc3QuZGlzYWJsZUtlZXBBbGl2ZSxcbiAgICAgICAgb25Eb3dubG9hZFByb2dyZXNzOiByZXF1ZXN0Lm9uRG93bmxvYWRQcm9ncmVzcyxcbiAgICAgICAgb25VcGxvYWRQcm9ncmVzczogcmVxdWVzdC5vblVwbG9hZFByb2dyZXNzLFxuICAgICAgICBwcm94eVNldHRpbmdzOiByZXF1ZXN0LnByb3h5U2V0dGluZ3MsXG4gICAgICAgIHN0cmVhbVJlc3BvbnNlU3RhdHVzQ29kZXM6IHJlcXVlc3Quc3RyZWFtUmVzcG9uc2VTdGF0dXNDb2RlcyxcbiAgICAgICAgY2xvbmUoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgY2xvbmUgYSBub24tcHJveGllZCBXZWJSZXNvdXJjZUxpa2VcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHByZXBhcmUoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJXZWJSZXNvdXJjZUxpa2UucHJlcGFyZSgpIGlzIG5vdCBzdXBwb3J0ZWQgYnkgQGF6dXJlL2NvcmUtaHR0cC1jb21wYXRcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHZhbGlkYXRlUmVxdWVzdFByb3BlcnRpZXMoKSB7XG4gICAgICAgICAgICAvKiogZG8gbm90aGluZyAqL1xuICAgICAgICB9LFxuICAgIH07XG4gICAgaWYgKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5jcmVhdGVQcm94eSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb3h5KHdlYlJlc291cmNlLCB7XG4gICAgICAgICAgICBnZXQodGFyZ2V0LCBwcm9wLCByZWNlaXZlcikge1xuICAgICAgICAgICAgICAgIGlmIChwcm9wID09PSBvcmlnaW5hbFJlcXVlc3RTeW1ib2wpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3Q7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHByb3AgPT09IFwiY2xvbmVcIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRvV2ViUmVzb3VyY2VMaWtlKHRvUGlwZWxpbmVSZXF1ZXN0KHdlYlJlc291cmNlLCB7IG9yaWdpbmFsUmVxdWVzdCB9KSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZVByb3h5OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsUmVxdWVzdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5nZXQodGFyZ2V0LCBwcm9wLCByZWNlaXZlcik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0KHRhcmdldCwgcHJvcCwgdmFsdWUsIHJlY2VpdmVyKSB7XG4gICAgICAgICAgICAgICAgaWYgKHByb3AgPT09IFwia2VlcEFsaXZlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5kaXNhYmxlS2VlcEFsaXZlID0gIXZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBwYXNzVGhyb3VnaFByb3BzID0gW1xuICAgICAgICAgICAgICAgICAgICBcInVybFwiLFxuICAgICAgICAgICAgICAgICAgICBcIm1ldGhvZFwiLFxuICAgICAgICAgICAgICAgICAgICBcIndpdGhDcmVkZW50aWFsc1wiLFxuICAgICAgICAgICAgICAgICAgICBcInRpbWVvdXRcIixcbiAgICAgICAgICAgICAgICAgICAgXCJyZXF1ZXN0SWRcIixcbiAgICAgICAgICAgICAgICAgICAgXCJhYm9ydFNpZ25hbFwiLFxuICAgICAgICAgICAgICAgICAgICBcImJvZHlcIixcbiAgICAgICAgICAgICAgICAgICAgXCJmb3JtRGF0YVwiLFxuICAgICAgICAgICAgICAgICAgICBcIm9uRG93bmxvYWRQcm9ncmVzc1wiLFxuICAgICAgICAgICAgICAgICAgICBcIm9uVXBsb2FkUHJvZ3Jlc3NcIixcbiAgICAgICAgICAgICAgICAgICAgXCJwcm94eVNldHRpbmdzXCIsXG4gICAgICAgICAgICAgICAgICAgIFwic3RyZWFtUmVzcG9uc2VTdGF0dXNDb2Rlc1wiLFxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwcm9wID09PSBcInN0cmluZ1wiICYmIHBhc3NUaHJvdWdoUHJvcHMuaW5jbHVkZXMocHJvcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFtwcm9wXSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5zZXQodGFyZ2V0LCBwcm9wLCB2YWx1ZSwgcmVjZWl2ZXIpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gd2ViUmVzb3VyY2U7XG4gICAgfVxufVxuZXhwb3J0cy50b1dlYlJlc291cmNlTGlrZSA9IHRvV2ViUmVzb3VyY2VMaWtlO1xuLyoqXG4gKiBDb252ZXJ0cyBIdHRwSGVhZGVycyBmcm9tIGNvcmUtcmVzdC1waXBlbGluZSB0byBsb29rIGxpa2VcbiAqIEh0dHBIZWFkZXJzIGZyb20gY29yZS1odHRwLlxuICogQHBhcmFtIGhlYWRlcnMgLSBIdHRwSGVhZGVycyBmcm9tIGNvcmUtcmVzdC1waXBlbGluZVxuICogQHJldHVybnMgSHR0cEhlYWRlcnMgYXMgdGhleSBsb29rZWQgaW4gY29yZS1odHRwXG4gKi9cbmZ1bmN0aW9uIHRvSHR0cEhlYWRlcnNMaWtlKGhlYWRlcnMpIHtcbiAgICByZXR1cm4gbmV3IEh0dHBIZWFkZXJzKGhlYWRlcnMudG9KU09OKHsgcHJlc2VydmVDYXNlOiB0cnVlIH0pKTtcbn1cbmV4cG9ydHMudG9IdHRwSGVhZGVyc0xpa2UgPSB0b0h0dHBIZWFkZXJzTGlrZTtcbi8qKlxuICogQSBjb2xsZWN0aW9uIG9mIEh0dHBIZWFkZXJzIHRoYXQgY2FuIGJlIHNlbnQgd2l0aCBhIEhUVFAgcmVxdWVzdC5cbiAqL1xuZnVuY3Rpb24gZ2V0SGVhZGVyS2V5KGhlYWRlck5hbWUpIHtcbiAgICByZXR1cm4gaGVhZGVyTmFtZS50b0xvd2VyQ2FzZSgpO1xufVxuLyoqXG4gKiBBIGNvbGxlY3Rpb24gb2YgSFRUUCBoZWFkZXIga2V5L3ZhbHVlIHBhaXJzLlxuICovXG5jbGFzcyBIdHRwSGVhZGVycyB7XG4gICAgY29uc3RydWN0b3IocmF3SGVhZGVycykge1xuICAgICAgICB0aGlzLl9oZWFkZXJzTWFwID0ge307XG4gICAgICAgIGlmIChyYXdIZWFkZXJzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGhlYWRlck5hbWUgaW4gcmF3SGVhZGVycykge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0KGhlYWRlck5hbWUsIHJhd0hlYWRlcnNbaGVhZGVyTmFtZV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldCBhIGhlYWRlciBpbiB0aGlzIGNvbGxlY3Rpb24gd2l0aCB0aGUgcHJvdmlkZWQgbmFtZSBhbmQgdmFsdWUuIFRoZSBuYW1lIGlzXG4gICAgICogY2FzZS1pbnNlbnNpdGl2ZS5cbiAgICAgKiBAcGFyYW0gaGVhZGVyTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBoZWFkZXIgdG8gc2V0LiBUaGlzIHZhbHVlIGlzIGNhc2UtaW5zZW5zaXRpdmUuXG4gICAgICogQHBhcmFtIGhlYWRlclZhbHVlIC0gVGhlIHZhbHVlIG9mIHRoZSBoZWFkZXIgdG8gc2V0LlxuICAgICAqL1xuICAgIHNldChoZWFkZXJOYW1lLCBoZWFkZXJWYWx1ZSkge1xuICAgICAgICB0aGlzLl9oZWFkZXJzTWFwW2dldEhlYWRlcktleShoZWFkZXJOYW1lKV0gPSB7XG4gICAgICAgICAgICBuYW1lOiBoZWFkZXJOYW1lLFxuICAgICAgICAgICAgdmFsdWU6IGhlYWRlclZhbHVlLnRvU3RyaW5nKCksXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgaGVhZGVyIHZhbHVlIGZvciB0aGUgcHJvdmlkZWQgaGVhZGVyIG5hbWUsIG9yIHVuZGVmaW5lZCBpZiBubyBoZWFkZXIgZXhpc3RzIGluIHRoaXNcbiAgICAgKiBjb2xsZWN0aW9uIHdpdGggdGhlIHByb3ZpZGVkIG5hbWUuXG4gICAgICogQHBhcmFtIGhlYWRlck5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgaGVhZGVyLlxuICAgICAqL1xuICAgIGdldChoZWFkZXJOYW1lKSB7XG4gICAgICAgIGNvbnN0IGhlYWRlciA9IHRoaXMuX2hlYWRlcnNNYXBbZ2V0SGVhZGVyS2V5KGhlYWRlck5hbWUpXTtcbiAgICAgICAgcmV0dXJuICFoZWFkZXIgPyB1bmRlZmluZWQgOiBoZWFkZXIudmFsdWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCB3aGV0aGVyIG9yIG5vdCB0aGlzIGhlYWRlciBjb2xsZWN0aW9uIGNvbnRhaW5zIGEgaGVhZGVyIGVudHJ5IGZvciB0aGUgcHJvdmlkZWQgaGVhZGVyIG5hbWUuXG4gICAgICovXG4gICAgY29udGFpbnMoaGVhZGVyTmFtZSkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9oZWFkZXJzTWFwW2dldEhlYWRlcktleShoZWFkZXJOYW1lKV07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlbW92ZSB0aGUgaGVhZGVyIHdpdGggdGhlIHByb3ZpZGVkIGhlYWRlck5hbWUuIFJldHVybiB3aGV0aGVyIG9yIG5vdCB0aGUgaGVhZGVyIGV4aXN0ZWQgYW5kXG4gICAgICogd2FzIHJlbW92ZWQuXG4gICAgICogQHBhcmFtIGhlYWRlck5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgaGVhZGVyIHRvIHJlbW92ZS5cbiAgICAgKi9cbiAgICByZW1vdmUoaGVhZGVyTmFtZSkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmNvbnRhaW5zKGhlYWRlck5hbWUpO1xuICAgICAgICBkZWxldGUgdGhpcy5faGVhZGVyc01hcFtnZXRIZWFkZXJLZXkoaGVhZGVyTmFtZSldO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGhlYWRlcnMgdGhhdCBhcmUgY29udGFpbmVkIHRoaXMgY29sbGVjdGlvbiBhcyBhbiBvYmplY3QuXG4gICAgICovXG4gICAgcmF3SGVhZGVycygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9Kc29uKHsgcHJlc2VydmVDYXNlOiB0cnVlIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGhlYWRlcnMgdGhhdCBhcmUgY29udGFpbmVkIGluIHRoaXMgY29sbGVjdGlvbiBhcyBhbiBhcnJheS5cbiAgICAgKi9cbiAgICBoZWFkZXJzQXJyYXkoKSB7XG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBoZWFkZXJLZXkgaW4gdGhpcy5faGVhZGVyc01hcCkge1xuICAgICAgICAgICAgaGVhZGVycy5wdXNoKHRoaXMuX2hlYWRlcnNNYXBbaGVhZGVyS2V5XSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGhlYWRlcnM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgaGVhZGVyIG5hbWVzIHRoYXQgYXJlIGNvbnRhaW5lZCBpbiB0aGlzIGNvbGxlY3Rpb24uXG4gICAgICovXG4gICAgaGVhZGVyTmFtZXMoKSB7XG4gICAgICAgIGNvbnN0IGhlYWRlck5hbWVzID0gW107XG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNBcnJheSgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGhlYWRlck5hbWVzLnB1c2goaGVhZGVyc1tpXS5uYW1lKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGVhZGVyTmFtZXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgaGVhZGVyIHZhbHVlcyB0aGF0IGFyZSBjb250YWluZWQgaW4gdGhpcyBjb2xsZWN0aW9uLlxuICAgICAqL1xuICAgIGhlYWRlclZhbHVlcygpIHtcbiAgICAgICAgY29uc3QgaGVhZGVyVmFsdWVzID0gW107XG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNBcnJheSgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGhlYWRlclZhbHVlcy5wdXNoKGhlYWRlcnNbaV0udmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoZWFkZXJWYWx1ZXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgSlNPTiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBIVFRQIGhlYWRlciBjb2xsZWN0aW9uLlxuICAgICAqL1xuICAgIHRvSnNvbihvcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgICAgIGlmIChvcHRpb25zLnByZXNlcnZlQ2FzZSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBoZWFkZXJLZXkgaW4gdGhpcy5faGVhZGVyc01hcCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRlciA9IHRoaXMuX2hlYWRlcnNNYXBbaGVhZGVyS2V5XTtcbiAgICAgICAgICAgICAgICByZXN1bHRbaGVhZGVyLm5hbWVdID0gaGVhZGVyLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZm9yIChjb25zdCBoZWFkZXJLZXkgaW4gdGhpcy5faGVhZGVyc01hcCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRlciA9IHRoaXMuX2hlYWRlcnNNYXBbaGVhZGVyS2V5XTtcbiAgICAgICAgICAgICAgICByZXN1bHRbZ2V0SGVhZGVyS2V5KGhlYWRlci5uYW1lKV0gPSBoZWFkZXIudmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBIVFRQIGhlYWRlciBjb2xsZWN0aW9uLlxuICAgICAqL1xuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy50b0pzb24oeyBwcmVzZXJ2ZUNhc2U6IHRydWUgfSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBkZWVwIGNsb25lL2NvcHkgb2YgdGhpcyBIdHRwSGVhZGVycyBjb2xsZWN0aW9uLlxuICAgICAqL1xuICAgIGNsb25lKCkge1xuICAgICAgICBjb25zdCByZXN1bHRQcmVzZXJ2aW5nQ2FzaW5nID0ge307XG4gICAgICAgIGZvciAoY29uc3QgaGVhZGVyS2V5IGluIHRoaXMuX2hlYWRlcnNNYXApIHtcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlciA9IHRoaXMuX2hlYWRlcnNNYXBbaGVhZGVyS2V5XTtcbiAgICAgICAgICAgIHJlc3VsdFByZXNlcnZpbmdDYXNpbmdbaGVhZGVyLm5hbWVdID0gaGVhZGVyLnZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgSHR0cEhlYWRlcnMocmVzdWx0UHJlc2VydmluZ0Nhc2luZyk7XG4gICAgfVxufVxuZXhwb3J0cy5IdHRwSGVhZGVycyA9IEh0dHBIZWFkZXJzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRvUGlwZWxpbmVSZXNwb25zZSA9IGV4cG9ydHMudG9Db21wYXRSZXNwb25zZSA9IHZvaWQgMDtcbmNvbnN0IGNvcmVfcmVzdF9waXBlbGluZV8xID0gcmVxdWlyZShcIkBhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmVcIik7XG5jb25zdCB1dGlsX2pzXzEgPSByZXF1aXJlKFwiLi91dGlsLmpzXCIpO1xuY29uc3Qgb3JpZ2luYWxSZXNwb25zZSA9IFN5bWJvbChcIk9yaWdpbmFsIEZ1bGxPcGVyYXRpb25SZXNwb25zZVwiKTtcbi8qKlxuICogQSBoZWxwZXIgdG8gY29udmVydCByZXNwb25zZSBvYmplY3RzIGZyb20gdGhlIG5ldyBwaXBlbGluZSBiYWNrIHRvIHRoZSBvbGQgb25lLlxuICogQHBhcmFtIHJlc3BvbnNlIC0gQSByZXNwb25zZSBvYmplY3QgZnJvbSBjb3JlLWNsaWVudC5cbiAqIEByZXR1cm5zIEEgcmVzcG9uc2UgY29tcGF0aWJsZSB3aXRoIGBIdHRwT3BlcmF0aW9uUmVzcG9uc2VgIGZyb20gY29yZS1odHRwLlxuICovXG5mdW5jdGlvbiB0b0NvbXBhdFJlc3BvbnNlKHJlc3BvbnNlLCBvcHRpb25zKSB7XG4gICAgbGV0IHJlcXVlc3QgPSAoMCwgdXRpbF9qc18xLnRvV2ViUmVzb3VyY2VMaWtlKShyZXNwb25zZS5yZXF1ZXN0KTtcbiAgICBsZXQgaGVhZGVycyA9ICgwLCB1dGlsX2pzXzEudG9IdHRwSGVhZGVyc0xpa2UpKHJlc3BvbnNlLmhlYWRlcnMpO1xuICAgIGlmIChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY3JlYXRlUHJveHkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm94eShyZXNwb25zZSwge1xuICAgICAgICAgICAgZ2V0KHRhcmdldCwgcHJvcCwgcmVjZWl2ZXIpIHtcbiAgICAgICAgICAgICAgICBpZiAocHJvcCA9PT0gXCJoZWFkZXJzXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhlYWRlcnM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHByb3AgPT09IFwicmVxdWVzdFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXF1ZXN0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChwcm9wID09PSBvcmlnaW5hbFJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0KHRhcmdldCwgcHJvcCwgcmVjZWl2ZXIpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldCh0YXJnZXQsIHByb3AsIHZhbHVlLCByZWNlaXZlcikge1xuICAgICAgICAgICAgICAgIGlmIChwcm9wID09PSBcImhlYWRlcnNcIikge1xuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHByb3AgPT09IFwicmVxdWVzdFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3QgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3Quc2V0KHRhcmdldCwgcHJvcCwgdmFsdWUsIHJlY2VpdmVyKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcmVzcG9uc2UpLCB7IHJlcXVlc3QsXG4gICAgICAgICAgICBoZWFkZXJzIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMudG9Db21wYXRSZXNwb25zZSA9IHRvQ29tcGF0UmVzcG9uc2U7XG4vKipcbiAqIEEgaGVscGVyIHRvIGNvbnZlcnQgYmFjayB0byBhIFBpcGVsaW5lUmVzcG9uc2VcbiAqIEBwYXJhbSBjb21wYXRSZXNwb25zZSAtIEEgcmVzcG9uc2UgY29tcGF0aWJsZSB3aXRoIGBIdHRwT3BlcmF0aW9uUmVzcG9uc2VgIGZyb20gY29yZS1odHRwLlxuICovXG5mdW5jdGlvbiB0b1BpcGVsaW5lUmVzcG9uc2UoY29tcGF0UmVzcG9uc2UpIHtcbiAgICBjb25zdCBleHRlbmRlZENvbXBhdFJlc3BvbnNlID0gY29tcGF0UmVzcG9uc2U7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBleHRlbmRlZENvbXBhdFJlc3BvbnNlW29yaWdpbmFsUmVzcG9uc2VdO1xuICAgIGNvbnN0IGhlYWRlcnMgPSAoMCwgY29yZV9yZXN0X3BpcGVsaW5lXzEuY3JlYXRlSHR0cEhlYWRlcnMpKGNvbXBhdFJlc3BvbnNlLmhlYWRlcnMudG9Kc29uKHsgcHJlc2VydmVDYXNlOiB0cnVlIH0pKTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgcmVzcG9uc2UuaGVhZGVycyA9IGhlYWRlcnM7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGNvbXBhdFJlc3BvbnNlKSwgeyBoZWFkZXJzLCByZXF1ZXN0OiAoMCwgdXRpbF9qc18xLnRvUGlwZWxpbmVSZXF1ZXN0KShjb21wYXRSZXNwb25zZS5yZXF1ZXN0KSB9KTtcbiAgICB9XG59XG5leHBvcnRzLnRvUGlwZWxpbmVSZXNwb25zZSA9IHRvUGlwZWxpbmVSZXNwb25zZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlc3BvbnNlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuRXh0ZW5kZWRTZXJ2aWNlQ2xpZW50ID0gdm9pZCAwO1xuY29uc3QgZGlzYWJsZUtlZXBBbGl2ZVBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvZGlzYWJsZUtlZXBBbGl2ZVBvbGljeS5qc1wiKTtcbmNvbnN0IGNvcmVfcmVzdF9waXBlbGluZV8xID0gcmVxdWlyZShcIkBhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmVcIik7XG5jb25zdCBjb3JlX2NsaWVudF8xID0gcmVxdWlyZShcIkBhenVyZS9jb3JlLWNsaWVudFwiKTtcbmNvbnN0IHJlc3BvbnNlX2pzXzEgPSByZXF1aXJlKFwiLi9yZXNwb25zZS5qc1wiKTtcbi8qKlxuICogQ2xpZW50IHRvIHByb3ZpZGUgY29tcGF0YWJpbGl0eSBiZXR3ZWVuIGNvcmUgVjEgJiBWMi5cbiAqL1xuY2xhc3MgRXh0ZW5kZWRTZXJ2aWNlQ2xpZW50IGV4dGVuZHMgY29yZV9jbGllbnRfMS5TZXJ2aWNlQ2xpZW50IHtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHN1cGVyKG9wdGlvbnMpO1xuICAgICAgICBpZiAoKChfYSA9IG9wdGlvbnMua2VlcEFsaXZlT3B0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmVuYWJsZSkgPT09IGZhbHNlICYmXG4gICAgICAgICAgICAhKDAsIGRpc2FibGVLZWVwQWxpdmVQb2xpY3lfanNfMS5waXBlbGluZUNvbnRhaW5zRGlzYWJsZUtlZXBBbGl2ZVBvbGljeSkodGhpcy5waXBlbGluZSkpIHtcbiAgICAgICAgICAgIHRoaXMucGlwZWxpbmUuYWRkUG9saWN5KCgwLCBkaXNhYmxlS2VlcEFsaXZlUG9saWN5X2pzXzEuY3JlYXRlRGlzYWJsZUtlZXBBbGl2ZVBvbGljeSkoKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCgoX2IgPSBvcHRpb25zLnJlZGlyZWN0T3B0aW9ucykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmhhbmRsZVJlZGlyZWN0cykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICB0aGlzLnBpcGVsaW5lLnJlbW92ZVBvbGljeSh7XG4gICAgICAgICAgICAgICAgbmFtZTogY29yZV9yZXN0X3BpcGVsaW5lXzEucmVkaXJlY3RQb2xpY3lOYW1lLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29tcGF0aWJsZSBzZW5kIG9wZXJhdGlvbiByZXF1ZXN0IGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wZXJhdGlvbkFyZ3VtZW50cyAtIE9wZXJhdGlvbiBhcmd1bWVudHNcbiAgICAgKiBAcGFyYW0gb3BlcmF0aW9uU3BlYyAtIE9wZXJhdGlvbiBTcGVjXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBhc3luYyBzZW5kT3BlcmF0aW9uUmVxdWVzdChvcGVyYXRpb25Bcmd1bWVudHMsIG9wZXJhdGlvblNwZWMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCB1c2VyUHJvdmlkZWRDYWxsQmFjayA9IChfYSA9IG9wZXJhdGlvbkFyZ3VtZW50cyA9PT0gbnVsbCB8fCBvcGVyYXRpb25Bcmd1bWVudHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wZXJhdGlvbkFyZ3VtZW50cy5vcHRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub25SZXNwb25zZTtcbiAgICAgICAgbGV0IGxhc3RSZXNwb25zZTtcbiAgICAgICAgZnVuY3Rpb24gb25SZXNwb25zZShyYXdSZXNwb25zZSwgZmxhdFJlc3BvbnNlLCBlcnJvcikge1xuICAgICAgICAgICAgbGFzdFJlc3BvbnNlID0gcmF3UmVzcG9uc2U7XG4gICAgICAgICAgICBpZiAodXNlclByb3ZpZGVkQ2FsbEJhY2spIHtcbiAgICAgICAgICAgICAgICB1c2VyUHJvdmlkZWRDYWxsQmFjayhyYXdSZXNwb25zZSwgZmxhdFJlc3BvbnNlLCBlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgb3BlcmF0aW9uQXJndW1lbnRzLm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wZXJhdGlvbkFyZ3VtZW50cy5vcHRpb25zKSwgeyBvblJlc3BvbnNlIH0pO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzdXBlci5zZW5kT3BlcmF0aW9uUmVxdWVzdChvcGVyYXRpb25Bcmd1bWVudHMsIG9wZXJhdGlvblNwZWMpO1xuICAgICAgICBpZiAobGFzdFJlc3BvbnNlKSB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVzdWx0LCBcIl9yZXNwb25zZVwiLCB7XG4gICAgICAgICAgICAgICAgdmFsdWU6ICgwLCByZXNwb25zZV9qc18xLnRvQ29tcGF0UmVzcG9uc2UpKGxhc3RSZXNwb25zZSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbmV4cG9ydHMuRXh0ZW5kZWRTZXJ2aWNlQ2xpZW50ID0gRXh0ZW5kZWRTZXJ2aWNlQ2xpZW50O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXh0ZW5kZWRDbGllbnQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jcmVhdGVSZXF1ZXN0UG9saWN5RmFjdG9yeVBvbGljeSA9IGV4cG9ydHMucmVxdWVzdFBvbGljeUZhY3RvcnlQb2xpY3lOYW1lID0gZXhwb3J0cy5IdHRwUGlwZWxpbmVMb2dMZXZlbCA9IHZvaWQgMDtcbmNvbnN0IHV0aWxfanNfMSA9IHJlcXVpcmUoXCIuLi91dGlsLmpzXCIpO1xuY29uc3QgcmVzcG9uc2VfanNfMSA9IHJlcXVpcmUoXCIuLi9yZXNwb25zZS5qc1wiKTtcbi8qKlxuICogQW4gZW51bSBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFJlcXVlc3RQb2xpY3lcbiAqL1xudmFyIEh0dHBQaXBlbGluZUxvZ0xldmVsO1xuKGZ1bmN0aW9uIChIdHRwUGlwZWxpbmVMb2dMZXZlbCkge1xuICAgIEh0dHBQaXBlbGluZUxvZ0xldmVsW0h0dHBQaXBlbGluZUxvZ0xldmVsW1wiRVJST1JcIl0gPSAxXSA9IFwiRVJST1JcIjtcbiAgICBIdHRwUGlwZWxpbmVMb2dMZXZlbFtIdHRwUGlwZWxpbmVMb2dMZXZlbFtcIklORk9cIl0gPSAzXSA9IFwiSU5GT1wiO1xuICAgIEh0dHBQaXBlbGluZUxvZ0xldmVsW0h0dHBQaXBlbGluZUxvZ0xldmVsW1wiT0ZGXCJdID0gMF0gPSBcIk9GRlwiO1xuICAgIEh0dHBQaXBlbGluZUxvZ0xldmVsW0h0dHBQaXBlbGluZUxvZ0xldmVsW1wiV0FSTklOR1wiXSA9IDJdID0gXCJXQVJOSU5HXCI7XG59KShIdHRwUGlwZWxpbmVMb2dMZXZlbCB8fCAoZXhwb3J0cy5IdHRwUGlwZWxpbmVMb2dMZXZlbCA9IEh0dHBQaXBlbGluZUxvZ0xldmVsID0ge30pKTtcbmNvbnN0IG1vY2tSZXF1ZXN0UG9saWN5T3B0aW9ucyA9IHtcbiAgICBsb2coX2xvZ0xldmVsLCBfbWVzc2FnZSkge1xuICAgICAgICAvKiBkbyBub3RoaW5nICovXG4gICAgfSxcbiAgICBzaG91bGRMb2coX2xvZ0xldmVsKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxufTtcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIFJlcXVlc3RQb2xpY3lGYWN0b3J5UG9saWN5XG4gKi9cbmV4cG9ydHMucmVxdWVzdFBvbGljeUZhY3RvcnlQb2xpY3lOYW1lID0gXCJSZXF1ZXN0UG9saWN5RmFjdG9yeVBvbGljeVwiO1xuLyoqXG4gKiBBIHBvbGljeSB0aGF0IHdyYXBzIHBvbGljaWVzIHdyaXR0ZW4gZm9yIGNvcmUtaHR0cC5cbiAqIEBwYXJhbSBmYWN0b3JpZXMgLSBBbiBhcnJheSBvZiBgUmVxdWVzdFBvbGljeUZhY3RvcnlgIG9iamVjdHMgZnJvbSBhIGNvcmUtaHR0cCBwaXBlbGluZVxuICovXG5mdW5jdGlvbiBjcmVhdGVSZXF1ZXN0UG9saWN5RmFjdG9yeVBvbGljeShmYWN0b3JpZXMpIHtcbiAgICBjb25zdCBvcmRlcmVkRmFjdG9yaWVzID0gZmFjdG9yaWVzLnNsaWNlKCkucmV2ZXJzZSgpO1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGV4cG9ydHMucmVxdWVzdFBvbGljeUZhY3RvcnlQb2xpY3lOYW1lLFxuICAgICAgICBhc3luYyBzZW5kUmVxdWVzdChyZXF1ZXN0LCBuZXh0KSB7XG4gICAgICAgICAgICBsZXQgaHR0cFBpcGVsaW5lID0ge1xuICAgICAgICAgICAgICAgIGFzeW5jIHNlbmRSZXF1ZXN0KGh0dHBSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgbmV4dCgoMCwgdXRpbF9qc18xLnRvUGlwZWxpbmVSZXF1ZXN0KShodHRwUmVxdWVzdCkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIHJlc3BvbnNlX2pzXzEudG9Db21wYXRSZXNwb25zZSkocmVzcG9uc2UsIHsgY3JlYXRlUHJveHk6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZhY3Rvcnkgb2Ygb3JkZXJlZEZhY3Rvcmllcykge1xuICAgICAgICAgICAgICAgIGh0dHBQaXBlbGluZSA9IGZhY3RvcnkuY3JlYXRlKGh0dHBQaXBlbGluZSwgbW9ja1JlcXVlc3RQb2xpY3lPcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHdlYlJlc291cmNlTGlrZSA9ICgwLCB1dGlsX2pzXzEudG9XZWJSZXNvdXJjZUxpa2UpKHJlcXVlc3QsIHsgY3JlYXRlUHJveHk6IHRydWUgfSk7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGh0dHBQaXBlbGluZS5zZW5kUmVxdWVzdCh3ZWJSZXNvdXJjZUxpa2UpO1xuICAgICAgICAgICAgcmV0dXJuICgwLCByZXNwb25zZV9qc18xLnRvUGlwZWxpbmVSZXNwb25zZSkocmVzcG9uc2UpO1xuICAgICAgICB9LFxuICAgIH07XG59XG5leHBvcnRzLmNyZWF0ZVJlcXVlc3RQb2xpY3lGYWN0b3J5UG9saWN5ID0gY3JlYXRlUmVxdWVzdFBvbGljeUZhY3RvcnlQb2xpY3k7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZXF1ZXN0UG9saWN5RmFjdG9yeVBvbGljeS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNvbnZlcnRIdHRwQ2xpZW50ID0gdm9pZCAwO1xuY29uc3QgcmVzcG9uc2VfanNfMSA9IHJlcXVpcmUoXCIuL3Jlc3BvbnNlLmpzXCIpO1xuY29uc3QgdXRpbF9qc18xID0gcmVxdWlyZShcIi4vdXRpbC5qc1wiKTtcbi8qKlxuICogQ29udmVydHMgYSBSZXF1ZXN0UG9saWN5IGJhc2VkIEh0dHBDbGllbnQgdG8gYSBQaXBlbGluZVJlcXVlc3QgYmFzZWQgSHR0cENsaWVudC5cbiAqIEBwYXJhbSByZXF1ZXN0UG9saWN5Q2xpZW50IC0gQSBIdHRwQ2xpZW50IGNvbXBhdGlibGUgd2l0aCBjb3JlLWh0dHBcbiAqIEByZXR1cm5zIEEgSHR0cENsaWVudCBjb21wYXRpYmxlIHdpdGggY29yZS1yZXN0LXBpcGVsaW5lXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRIdHRwQ2xpZW50KHJlcXVlc3RQb2xpY3lDbGllbnQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBzZW5kUmVxdWVzdDogYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdFBvbGljeUNsaWVudC5zZW5kUmVxdWVzdCgoMCwgdXRpbF9qc18xLnRvV2ViUmVzb3VyY2VMaWtlKShyZXF1ZXN0LCB7IGNyZWF0ZVByb3h5OiB0cnVlIH0pKTtcbiAgICAgICAgICAgIHJldHVybiAoMCwgcmVzcG9uc2VfanNfMS50b1BpcGVsaW5lUmVzcG9uc2UpKHJlc3BvbnNlKTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuZXhwb3J0cy5jb252ZXJ0SHR0cENsaWVudCA9IGNvbnZlcnRIdHRwQ2xpZW50O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aHR0cENsaWVudEFkYXB0ZXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50b0h0dHBIZWFkZXJzTGlrZSA9IGV4cG9ydHMuY29udmVydEh0dHBDbGllbnQgPSBleHBvcnRzLmRpc2FibGVLZWVwQWxpdmVQb2xpY3lOYW1lID0gZXhwb3J0cy5IdHRwUGlwZWxpbmVMb2dMZXZlbCA9IGV4cG9ydHMuY3JlYXRlUmVxdWVzdFBvbGljeUZhY3RvcnlQb2xpY3kgPSBleHBvcnRzLnJlcXVlc3RQb2xpY3lGYWN0b3J5UG9saWN5TmFtZSA9IGV4cG9ydHMuRXh0ZW5kZWRTZXJ2aWNlQ2xpZW50ID0gdm9pZCAwO1xuLyoqXG4gKiBBIFNoaW0gTGlicmFyeSB0aGF0IHByb3ZpZGVzIGNvbXBhdGliaWxpdHkgYmV0d2VlbiBDb3JlIFYxICYgVjIgUGFja2FnZXMuXG4gKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uXG4gKi9cbnZhciBleHRlbmRlZENsaWVudF9qc18xID0gcmVxdWlyZShcIi4vZXh0ZW5kZWRDbGllbnQuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJFeHRlbmRlZFNlcnZpY2VDbGllbnRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGV4dGVuZGVkQ2xpZW50X2pzXzEuRXh0ZW5kZWRTZXJ2aWNlQ2xpZW50OyB9IH0pO1xudmFyIHJlcXVlc3RQb2xpY3lGYWN0b3J5UG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9wb2xpY2llcy9yZXF1ZXN0UG9saWN5RmFjdG9yeVBvbGljeS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlcXVlc3RQb2xpY3lGYWN0b3J5UG9saWN5TmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVxdWVzdFBvbGljeUZhY3RvcnlQb2xpY3lfanNfMS5yZXF1ZXN0UG9saWN5RmFjdG9yeVBvbGljeU5hbWU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVSZXF1ZXN0UG9saWN5RmFjdG9yeVBvbGljeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVxdWVzdFBvbGljeUZhY3RvcnlQb2xpY3lfanNfMS5jcmVhdGVSZXF1ZXN0UG9saWN5RmFjdG9yeVBvbGljeTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkh0dHBQaXBlbGluZUxvZ0xldmVsXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZXF1ZXN0UG9saWN5RmFjdG9yeVBvbGljeV9qc18xLkh0dHBQaXBlbGluZUxvZ0xldmVsOyB9IH0pO1xudmFyIGRpc2FibGVLZWVwQWxpdmVQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL2Rpc2FibGVLZWVwQWxpdmVQb2xpY3kuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkaXNhYmxlS2VlcEFsaXZlUG9saWN5TmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZGlzYWJsZUtlZXBBbGl2ZVBvbGljeV9qc18xLmRpc2FibGVLZWVwQWxpdmVQb2xpY3lOYW1lOyB9IH0pO1xudmFyIGh0dHBDbGllbnRBZGFwdGVyX2pzXzEgPSByZXF1aXJlKFwiLi9odHRwQ2xpZW50QWRhcHRlci5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNvbnZlcnRIdHRwQ2xpZW50XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBodHRwQ2xpZW50QWRhcHRlcl9qc18xLmNvbnZlcnRIdHRwQ2xpZW50OyB9IH0pO1xudmFyIHV0aWxfanNfMSA9IHJlcXVpcmUoXCIuL3V0aWwuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0b0h0dHBIZWFkZXJzTGlrZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdXRpbF9qc18xLnRvSHR0cEhlYWRlcnNMaWtlOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICIndXNlIHN0cmljdCc7XG5cbmNvbnN0IG5hbWVTdGFydENoYXIgPSAnOkEtWmEtel9cXFxcdTAwQzAtXFxcXHUwMEQ2XFxcXHUwMEQ4LVxcXFx1MDBGNlxcXFx1MDBGOC1cXFxcdTAyRkZcXFxcdTAzNzAtXFxcXHUwMzdEXFxcXHUwMzdGLVxcXFx1MUZGRlxcXFx1MjAwQy1cXFxcdTIwMERcXFxcdTIwNzAtXFxcXHUyMThGXFxcXHUyQzAwLVxcXFx1MkZFRlxcXFx1MzAwMS1cXFxcdUQ3RkZcXFxcdUY5MDAtXFxcXHVGRENGXFxcXHVGREYwLVxcXFx1RkZGRCc7XG5jb25zdCBuYW1lQ2hhciA9IG5hbWVTdGFydENoYXIgKyAnXFxcXC0uXFxcXGRcXFxcdTAwQjdcXFxcdTAzMDAtXFxcXHUwMzZGXFxcXHUyMDNGLVxcXFx1MjA0MCc7XG5jb25zdCBuYW1lUmVnZXhwID0gJ1snICsgbmFtZVN0YXJ0Q2hhciArICddWycgKyBuYW1lQ2hhciArICddKidcbmNvbnN0IHJlZ2V4TmFtZSA9IG5ldyBSZWdFeHAoJ14nICsgbmFtZVJlZ2V4cCArICckJyk7XG5cbmNvbnN0IGdldEFsbE1hdGNoZXMgPSBmdW5jdGlvbihzdHJpbmcsIHJlZ2V4KSB7XG4gIGNvbnN0IG1hdGNoZXMgPSBbXTtcbiAgbGV0IG1hdGNoID0gcmVnZXguZXhlYyhzdHJpbmcpO1xuICB3aGlsZSAobWF0Y2gpIHtcbiAgICBjb25zdCBhbGxtYXRjaGVzID0gW107XG4gICAgYWxsbWF0Y2hlcy5zdGFydEluZGV4ID0gcmVnZXgubGFzdEluZGV4IC0gbWF0Y2hbMF0ubGVuZ3RoO1xuICAgIGNvbnN0IGxlbiA9IG1hdGNoLmxlbmd0aDtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbGVuOyBpbmRleCsrKSB7XG4gICAgICBhbGxtYXRjaGVzLnB1c2gobWF0Y2hbaW5kZXhdKTtcbiAgICB9XG4gICAgbWF0Y2hlcy5wdXNoKGFsbG1hdGNoZXMpO1xuICAgIG1hdGNoID0gcmVnZXguZXhlYyhzdHJpbmcpO1xuICB9XG4gIHJldHVybiBtYXRjaGVzO1xufTtcblxuY29uc3QgaXNOYW1lID0gZnVuY3Rpb24oc3RyaW5nKSB7XG4gIGNvbnN0IG1hdGNoID0gcmVnZXhOYW1lLmV4ZWMoc3RyaW5nKTtcbiAgcmV0dXJuICEobWF0Y2ggPT09IG51bGwgfHwgdHlwZW9mIG1hdGNoID09PSAndW5kZWZpbmVkJyk7XG59O1xuXG5leHBvcnRzLmlzRXhpc3QgPSBmdW5jdGlvbih2KSB7XG4gIHJldHVybiB0eXBlb2YgdiAhPT0gJ3VuZGVmaW5lZCc7XG59O1xuXG5leHBvcnRzLmlzRW1wdHlPYmplY3QgPSBmdW5jdGlvbihvYmopIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikubGVuZ3RoID09PSAwO1xufTtcblxuLyoqXG4gKiBDb3B5IGFsbCB0aGUgcHJvcGVydGllcyBvZiBhIGludG8gYi5cbiAqIEBwYXJhbSB7Kn0gdGFyZ2V0XG4gKiBAcGFyYW0geyp9IGFcbiAqL1xuZXhwb3J0cy5tZXJnZSA9IGZ1bmN0aW9uKHRhcmdldCwgYSwgYXJyYXlNb2RlKSB7XG4gIGlmIChhKSB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGEpOyAvLyB3aWxsIHJldHVybiBhbiBhcnJheSBvZiBvd24gcHJvcGVydGllc1xuICAgIGNvbnN0IGxlbiA9IGtleXMubGVuZ3RoOyAvL2Rvbid0IG1ha2UgaXQgaW5saW5lXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgaWYgKGFycmF5TW9kZSA9PT0gJ3N0cmljdCcpIHtcbiAgICAgICAgdGFyZ2V0W2tleXNbaV1dID0gWyBhW2tleXNbaV1dIF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXRba2V5c1tpXV0gPSBhW2tleXNbaV1dO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcbi8qIGV4cG9ydHMubWVyZ2UgPWZ1bmN0aW9uIChiLGEpe1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihiLGEpO1xufSAqL1xuXG5leHBvcnRzLmdldFZhbHVlID0gZnVuY3Rpb24odikge1xuICBpZiAoZXhwb3J0cy5pc0V4aXN0KHYpKSB7XG4gICAgcmV0dXJuIHY7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG59O1xuXG4vLyBjb25zdCBmYWtlQ2FsbCA9IGZ1bmN0aW9uKGEpIHtyZXR1cm4gYTt9O1xuLy8gY29uc3QgZmFrZUNhbGxOb1JldHVybiA9IGZ1bmN0aW9uKCkge307XG5cbmV4cG9ydHMuaXNOYW1lID0gaXNOYW1lO1xuZXhwb3J0cy5nZXRBbGxNYXRjaGVzID0gZ2V0QWxsTWF0Y2hlcztcbmV4cG9ydHMubmFtZVJlZ2V4cCA9IG5hbWVSZWdleHA7XG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xuXG5jb25zdCBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgYWxsb3dCb29sZWFuQXR0cmlidXRlczogZmFsc2UsIC8vQSB0YWcgY2FuIGhhdmUgYXR0cmlidXRlcyB3aXRob3V0IGFueSB2YWx1ZVxuICB1bnBhaXJlZFRhZ3M6IFtdXG59O1xuXG4vL2NvbnN0IHRhZ3NQYXR0ZXJuID0gbmV3IFJlZ0V4cChcIjxcXFxcLz8oW1xcXFx3OlxcXFwtX1xcLl0rKVxcXFxzKlxcLz8+XCIsXCJnXCIpO1xuZXhwb3J0cy52YWxpZGF0ZSA9IGZ1bmN0aW9uICh4bWxEYXRhLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0T3B0aW9ucywgb3B0aW9ucyk7XG5cbiAgLy94bWxEYXRhID0geG1sRGF0YS5yZXBsYWNlKC8oXFxyXFxufFxcbnxcXHIpL2dtLFwiXCIpOy8vbWFrZSBpdCBzaW5nbGUgbGluZVxuICAvL3htbERhdGEgPSB4bWxEYXRhLnJlcGxhY2UoLyheXFxzKjxcXD94bWwuKj9cXD8+KS9nLFwiXCIpOy8vUmVtb3ZlIFhNTCBzdGFydGluZyB0YWdcbiAgLy94bWxEYXRhID0geG1sRGF0YS5yZXBsYWNlKC8oPCFET0NUWVBFW1xcc1xcd1xcXCJcXC5cXC9cXC1cXDpdKyhcXFsuKlxcXSkqXFxzKj4pL2csXCJcIik7Ly9SZW1vdmUgRE9DVFlQRVxuICBjb25zdCB0YWdzID0gW107XG4gIGxldCB0YWdGb3VuZCA9IGZhbHNlO1xuXG4gIC8vaW5kaWNhdGVzIHRoYXQgdGhlIHJvb3QgdGFnIGhhcyBiZWVuIGNsb3NlZCAoYWthLiBkZXB0aCAwIGhhcyBiZWVuIHJlYWNoZWQpXG4gIGxldCByZWFjaGVkUm9vdCA9IGZhbHNlO1xuXG4gIGlmICh4bWxEYXRhWzBdID09PSAnXFx1ZmVmZicpIHtcbiAgICAvLyBjaGVjayBmb3IgYnl0ZSBvcmRlciBtYXJrIChCT00pXG4gICAgeG1sRGF0YSA9IHhtbERhdGEuc3Vic3RyKDEpO1xuICB9XG4gIFxuICBmb3IgKGxldCBpID0gMDsgaSA8IHhtbERhdGEubGVuZ3RoOyBpKyspIHtcblxuICAgIGlmICh4bWxEYXRhW2ldID09PSAnPCcgJiYgeG1sRGF0YVtpKzFdID09PSAnPycpIHtcbiAgICAgIGkrPTI7XG4gICAgICBpID0gcmVhZFBJKHhtbERhdGEsaSk7XG4gICAgICBpZiAoaS5lcnIpIHJldHVybiBpO1xuICAgIH1lbHNlIGlmICh4bWxEYXRhW2ldID09PSAnPCcpIHtcbiAgICAgIC8vc3RhcnRpbmcgb2YgdGFnXG4gICAgICAvL3JlYWQgdW50aWwgeW91IHJlYWNoIHRvICc+JyBhdm9pZGluZyBhbnkgJz4nIGluIGF0dHJpYnV0ZSB2YWx1ZVxuICAgICAgbGV0IHRhZ1N0YXJ0UG9zID0gaTtcbiAgICAgIGkrKztcbiAgICAgIFxuICAgICAgaWYgKHhtbERhdGFbaV0gPT09ICchJykge1xuICAgICAgICBpID0gcmVhZENvbW1lbnRBbmRDREFUQSh4bWxEYXRhLCBpKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgY2xvc2luZ1RhZyA9IGZhbHNlO1xuICAgICAgICBpZiAoeG1sRGF0YVtpXSA9PT0gJy8nKSB7XG4gICAgICAgICAgLy9jbG9zaW5nIHRhZ1xuICAgICAgICAgIGNsb3NpbmdUYWcgPSB0cnVlO1xuICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgICAvL3JlYWQgdGFnbmFtZVxuICAgICAgICBsZXQgdGFnTmFtZSA9ICcnO1xuICAgICAgICBmb3IgKDsgaSA8IHhtbERhdGEubGVuZ3RoICYmXG4gICAgICAgICAgeG1sRGF0YVtpXSAhPT0gJz4nICYmXG4gICAgICAgICAgeG1sRGF0YVtpXSAhPT0gJyAnICYmXG4gICAgICAgICAgeG1sRGF0YVtpXSAhPT0gJ1xcdCcgJiZcbiAgICAgICAgICB4bWxEYXRhW2ldICE9PSAnXFxuJyAmJlxuICAgICAgICAgIHhtbERhdGFbaV0gIT09ICdcXHInOyBpKytcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGFnTmFtZSArPSB4bWxEYXRhW2ldO1xuICAgICAgICB9XG4gICAgICAgIHRhZ05hbWUgPSB0YWdOYW1lLnRyaW0oKTtcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0YWdOYW1lKTtcblxuICAgICAgICBpZiAodGFnTmFtZVt0YWdOYW1lLmxlbmd0aCAtIDFdID09PSAnLycpIHtcbiAgICAgICAgICAvL3NlbGYgY2xvc2luZyB0YWcgd2l0aG91dCBhdHRyaWJ1dGVzXG4gICAgICAgICAgdGFnTmFtZSA9IHRhZ05hbWUuc3Vic3RyaW5nKDAsIHRhZ05hbWUubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgLy9jb250aW51ZTtcbiAgICAgICAgICBpLS07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF2YWxpZGF0ZVRhZ05hbWUodGFnTmFtZSkpIHtcbiAgICAgICAgICBsZXQgbXNnO1xuICAgICAgICAgIGlmICh0YWdOYW1lLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIG1zZyA9IFwiSW52YWxpZCBzcGFjZSBhZnRlciAnPCcuXCI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1zZyA9IFwiVGFnICdcIit0YWdOYW1lK1wiJyBpcyBhbiBpbnZhbGlkIG5hbWUuXCI7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBnZXRFcnJvck9iamVjdCgnSW52YWxpZFRhZycsIG1zZywgZ2V0TGluZU51bWJlckZvclBvc2l0aW9uKHhtbERhdGEsIGkpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHJlYWRBdHRyaWJ1dGVTdHIoeG1sRGF0YSwgaSk7XG4gICAgICAgIGlmIChyZXN1bHQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KCdJbnZhbGlkQXR0cicsIFwiQXR0cmlidXRlcyBmb3IgJ1wiK3RhZ05hbWUrXCInIGhhdmUgb3BlbiBxdW90ZS5cIiwgZ2V0TGluZU51bWJlckZvclBvc2l0aW9uKHhtbERhdGEsIGkpKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgYXR0clN0ciA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgaSA9IHJlc3VsdC5pbmRleDtcblxuICAgICAgICBpZiAoYXR0clN0clthdHRyU3RyLmxlbmd0aCAtIDFdID09PSAnLycpIHtcbiAgICAgICAgICAvL3NlbGYgY2xvc2luZyB0YWdcbiAgICAgICAgICBjb25zdCBhdHRyU3RyU3RhcnQgPSBpIC0gYXR0clN0ci5sZW5ndGg7XG4gICAgICAgICAgYXR0clN0ciA9IGF0dHJTdHIuc3Vic3RyaW5nKDAsIGF0dHJTdHIubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgY29uc3QgaXNWYWxpZCA9IHZhbGlkYXRlQXR0cmlidXRlU3RyaW5nKGF0dHJTdHIsIG9wdGlvbnMpO1xuICAgICAgICAgIGlmIChpc1ZhbGlkID09PSB0cnVlKSB7XG4gICAgICAgICAgICB0YWdGb3VuZCA9IHRydWU7XG4gICAgICAgICAgICAvL2NvbnRpbnVlOyAvL3RleHQgbWF5IHByZXNlbnRzIGFmdGVyIHNlbGYgY2xvc2luZyB0YWdcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy90aGUgcmVzdWx0IGZyb20gdGhlIG5lc3RlZCBmdW5jdGlvbiByZXR1cm5zIHRoZSBwb3NpdGlvbiBvZiB0aGUgZXJyb3Igd2l0aGluIHRoZSBhdHRyaWJ1dGVcbiAgICAgICAgICAgIC8vaW4gb3JkZXIgdG8gZ2V0IHRoZSAndHJ1ZScgZXJyb3IgbGluZSwgd2UgbmVlZCB0byBjYWxjdWxhdGUgdGhlIHBvc2l0aW9uIHdoZXJlIHRoZSBhdHRyaWJ1dGUgYmVnaW5zIChpIC0gYXR0clN0ci5sZW5ndGgpIGFuZCB0aGVuIGFkZCB0aGUgcG9zaXRpb24gd2l0aGluIHRoZSBhdHRyaWJ1dGVcbiAgICAgICAgICAgIC8vdGhpcyBnaXZlcyB1cyB0aGUgYWJzb2x1dGUgaW5kZXggaW4gdGhlIGVudGlyZSB4bWwsIHdoaWNoIHdlIGNhbiB1c2UgdG8gZmluZCB0aGUgbGluZSBhdCBsYXN0XG4gICAgICAgICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoaXNWYWxpZC5lcnIuY29kZSwgaXNWYWxpZC5lcnIubXNnLCBnZXRMaW5lTnVtYmVyRm9yUG9zaXRpb24oeG1sRGF0YSwgYXR0clN0clN0YXJ0ICsgaXNWYWxpZC5lcnIubGluZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChjbG9zaW5nVGFnKSB7XG4gICAgICAgICAgaWYgKCFyZXN1bHQudGFnQ2xvc2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRUYWcnLCBcIkNsb3NpbmcgdGFnICdcIit0YWdOYW1lK1wiJyBkb2Vzbid0IGhhdmUgcHJvcGVyIGNsb3NpbmcuXCIsIGdldExpbmVOdW1iZXJGb3JQb3NpdGlvbih4bWxEYXRhLCBpKSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChhdHRyU3RyLnRyaW0oKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRUYWcnLCBcIkNsb3NpbmcgdGFnICdcIit0YWdOYW1lK1wiJyBjYW4ndCBoYXZlIGF0dHJpYnV0ZXMgb3IgaW52YWxpZCBzdGFydGluZy5cIiwgZ2V0TGluZU51bWJlckZvclBvc2l0aW9uKHhtbERhdGEsIHRhZ1N0YXJ0UG9zKSk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0YWdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KCdJbnZhbGlkVGFnJywgXCJDbG9zaW5nIHRhZyAnXCIrdGFnTmFtZStcIicgaGFzIG5vdCBiZWVuIG9wZW5lZC5cIiwgZ2V0TGluZU51bWJlckZvclBvc2l0aW9uKHhtbERhdGEsIHRhZ1N0YXJ0UG9zKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG90ZyA9IHRhZ3MucG9wKCk7XG4gICAgICAgICAgICBpZiAodGFnTmFtZSAhPT0gb3RnLnRhZ05hbWUpIHtcbiAgICAgICAgICAgICAgbGV0IG9wZW5Qb3MgPSBnZXRMaW5lTnVtYmVyRm9yUG9zaXRpb24oeG1sRGF0YSwgb3RnLnRhZ1N0YXJ0UG9zKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KCdJbnZhbGlkVGFnJyxcbiAgICAgICAgICAgICAgICBcIkV4cGVjdGVkIGNsb3NpbmcgdGFnICdcIitvdGcudGFnTmFtZStcIicgKG9wZW5lZCBpbiBsaW5lIFwiK29wZW5Qb3MubGluZStcIiwgY29sIFwiK29wZW5Qb3MuY29sK1wiKSBpbnN0ZWFkIG9mIGNsb3NpbmcgdGFnICdcIit0YWdOYW1lK1wiJy5cIixcbiAgICAgICAgICAgICAgICBnZXRMaW5lTnVtYmVyRm9yUG9zaXRpb24oeG1sRGF0YSwgdGFnU3RhcnRQb3MpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy93aGVuIHRoZXJlIGFyZSBubyBtb3JlIHRhZ3MsIHdlIHJlYWNoZWQgdGhlIHJvb3QgbGV2ZWwuXG4gICAgICAgICAgICBpZiAodGFncy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICByZWFjaGVkUm9vdCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGlzVmFsaWQgPSB2YWxpZGF0ZUF0dHJpYnV0ZVN0cmluZyhhdHRyU3RyLCBvcHRpb25zKTtcbiAgICAgICAgICBpZiAoaXNWYWxpZCAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgLy90aGUgcmVzdWx0IGZyb20gdGhlIG5lc3RlZCBmdW5jdGlvbiByZXR1cm5zIHRoZSBwb3NpdGlvbiBvZiB0aGUgZXJyb3Igd2l0aGluIHRoZSBhdHRyaWJ1dGVcbiAgICAgICAgICAgIC8vaW4gb3JkZXIgdG8gZ2V0IHRoZSAndHJ1ZScgZXJyb3IgbGluZSwgd2UgbmVlZCB0byBjYWxjdWxhdGUgdGhlIHBvc2l0aW9uIHdoZXJlIHRoZSBhdHRyaWJ1dGUgYmVnaW5zIChpIC0gYXR0clN0ci5sZW5ndGgpIGFuZCB0aGVuIGFkZCB0aGUgcG9zaXRpb24gd2l0aGluIHRoZSBhdHRyaWJ1dGVcbiAgICAgICAgICAgIC8vdGhpcyBnaXZlcyB1cyB0aGUgYWJzb2x1dGUgaW5kZXggaW4gdGhlIGVudGlyZSB4bWwsIHdoaWNoIHdlIGNhbiB1c2UgdG8gZmluZCB0aGUgbGluZSBhdCBsYXN0XG4gICAgICAgICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoaXNWYWxpZC5lcnIuY29kZSwgaXNWYWxpZC5lcnIubXNnLCBnZXRMaW5lTnVtYmVyRm9yUG9zaXRpb24oeG1sRGF0YSwgaSAtIGF0dHJTdHIubGVuZ3RoICsgaXNWYWxpZC5lcnIubGluZSkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vaWYgdGhlIHJvb3QgbGV2ZWwgaGFzIGJlZW4gcmVhY2hlZCBiZWZvcmUgLi4uXG4gICAgICAgICAgaWYgKHJlYWNoZWRSb290ID09PSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRYbWwnLCAnTXVsdGlwbGUgcG9zc2libGUgcm9vdCBub2RlcyBmb3VuZC4nLCBnZXRMaW5lTnVtYmVyRm9yUG9zaXRpb24oeG1sRGF0YSwgaSkpO1xuICAgICAgICAgIH0gZWxzZSBpZihvcHRpb25zLnVucGFpcmVkVGFncy5pbmRleE9mKHRhZ05hbWUpICE9PSAtMSl7XG4gICAgICAgICAgICAvL2Rvbid0IHB1c2ggaW50byBzdGFja1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0YWdzLnB1c2goe3RhZ05hbWUsIHRhZ1N0YXJ0UG9zfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRhZ0ZvdW5kID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vc2tpcCB0YWcgdGV4dCB2YWx1ZVxuICAgICAgICAvL0l0IG1heSBpbmNsdWRlIGNvbW1lbnRzIGFuZCBDREFUQSB2YWx1ZVxuICAgICAgICBmb3IgKGkrKzsgaSA8IHhtbERhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoeG1sRGF0YVtpXSA9PT0gJzwnKSB7XG4gICAgICAgICAgICBpZiAoeG1sRGF0YVtpICsgMV0gPT09ICchJykge1xuICAgICAgICAgICAgICAvL2NvbW1lbnQgb3IgQ0FEQVRBXG4gICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgaSA9IHJlYWRDb21tZW50QW5kQ0RBVEEoeG1sRGF0YSwgaSk7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh4bWxEYXRhW2krMV0gPT09ICc/Jykge1xuICAgICAgICAgICAgICBpID0gcmVhZFBJKHhtbERhdGEsICsraSk7XG4gICAgICAgICAgICAgIGlmIChpLmVycikgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2V7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoeG1sRGF0YVtpXSA9PT0gJyYnKSB7XG4gICAgICAgICAgICBjb25zdCBhZnRlckFtcCA9IHZhbGlkYXRlQW1wZXJzYW5kKHhtbERhdGEsIGkpO1xuICAgICAgICAgICAgaWYgKGFmdGVyQW1wID09IC0xKVxuICAgICAgICAgICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRDaGFyJywgXCJjaGFyICcmJyBpcyBub3QgZXhwZWN0ZWQuXCIsIGdldExpbmVOdW1iZXJGb3JQb3NpdGlvbih4bWxEYXRhLCBpKSk7XG4gICAgICAgICAgICBpID0gYWZ0ZXJBbXA7XG4gICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBpZiAocmVhY2hlZFJvb3QgPT09IHRydWUgJiYgIWlzV2hpdGVTcGFjZSh4bWxEYXRhW2ldKSkge1xuICAgICAgICAgICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRYbWwnLCBcIkV4dHJhIHRleHQgYXQgdGhlIGVuZFwiLCBnZXRMaW5lTnVtYmVyRm9yUG9zaXRpb24oeG1sRGF0YSwgaSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSAvL2VuZCBvZiByZWFkaW5nIHRhZyB0ZXh0IHZhbHVlXG4gICAgICAgIGlmICh4bWxEYXRhW2ldID09PSAnPCcpIHtcbiAgICAgICAgICBpLS07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCBpc1doaXRlU3BhY2UoeG1sRGF0YVtpXSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRDaGFyJywgXCJjaGFyICdcIit4bWxEYXRhW2ldK1wiJyBpcyBub3QgZXhwZWN0ZWQuXCIsIGdldExpbmVOdW1iZXJGb3JQb3NpdGlvbih4bWxEYXRhLCBpKSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKCF0YWdGb3VuZCkge1xuICAgIHJldHVybiBnZXRFcnJvck9iamVjdCgnSW52YWxpZFhtbCcsICdTdGFydCB0YWcgZXhwZWN0ZWQuJywgMSk7XG4gIH1lbHNlIGlmICh0YWdzLmxlbmd0aCA9PSAxKSB7XG4gICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRUYWcnLCBcIlVuY2xvc2VkIHRhZyAnXCIrdGFnc1swXS50YWdOYW1lK1wiJy5cIiwgZ2V0TGluZU51bWJlckZvclBvc2l0aW9uKHhtbERhdGEsIHRhZ3NbMF0udGFnU3RhcnRQb3MpKTtcbiAgfWVsc2UgaWYgKHRhZ3MubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KCdJbnZhbGlkWG1sJywgXCJJbnZhbGlkICdcIitcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeSh0YWdzLm1hcCh0ID0+IHQudGFnTmFtZSksIG51bGwsIDQpLnJlcGxhY2UoL1xccj9cXG4vZywgJycpK1xuICAgICAgICAgIFwiJyBmb3VuZC5cIiwge2xpbmU6IDEsIGNvbDogMX0pO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5mdW5jdGlvbiBpc1doaXRlU3BhY2UoY2hhcil7XG4gIHJldHVybiBjaGFyID09PSAnICcgfHwgY2hhciA9PT0gJ1xcdCcgfHwgY2hhciA9PT0gJ1xcbicgIHx8IGNoYXIgPT09ICdcXHInO1xufVxuLyoqXG4gKiBSZWFkIFByb2Nlc3NpbmcgaW5zc3RydWN0aW9ucyBhbmQgc2tpcFxuICogQHBhcmFtIHsqfSB4bWxEYXRhXG4gKiBAcGFyYW0geyp9IGlcbiAqL1xuZnVuY3Rpb24gcmVhZFBJKHhtbERhdGEsIGkpIHtcbiAgY29uc3Qgc3RhcnQgPSBpO1xuICBmb3IgKDsgaSA8IHhtbERhdGEubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoeG1sRGF0YVtpXSA9PSAnPycgfHwgeG1sRGF0YVtpXSA9PSAnICcpIHtcbiAgICAgIC8vdGFnbmFtZVxuICAgICAgY29uc3QgdGFnbmFtZSA9IHhtbERhdGEuc3Vic3RyKHN0YXJ0LCBpIC0gc3RhcnQpO1xuICAgICAgaWYgKGkgPiA1ICYmIHRhZ25hbWUgPT09ICd4bWwnKSB7XG4gICAgICAgIHJldHVybiBnZXRFcnJvck9iamVjdCgnSW52YWxpZFhtbCcsICdYTUwgZGVjbGFyYXRpb24gYWxsb3dlZCBvbmx5IGF0IHRoZSBzdGFydCBvZiB0aGUgZG9jdW1lbnQuJywgZ2V0TGluZU51bWJlckZvclBvc2l0aW9uKHhtbERhdGEsIGkpKTtcbiAgICAgIH0gZWxzZSBpZiAoeG1sRGF0YVtpXSA9PSAnPycgJiYgeG1sRGF0YVtpICsgMV0gPT0gJz4nKSB7XG4gICAgICAgIC8vY2hlY2sgaWYgdmFsaWQgYXR0cmlidXQgc3RyaW5nXG4gICAgICAgIGkrKztcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGk7XG59XG5cbmZ1bmN0aW9uIHJlYWRDb21tZW50QW5kQ0RBVEEoeG1sRGF0YSwgaSkge1xuICBpZiAoeG1sRGF0YS5sZW5ndGggPiBpICsgNSAmJiB4bWxEYXRhW2kgKyAxXSA9PT0gJy0nICYmIHhtbERhdGFbaSArIDJdID09PSAnLScpIHtcbiAgICAvL2NvbW1lbnRcbiAgICBmb3IgKGkgKz0gMzsgaSA8IHhtbERhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh4bWxEYXRhW2ldID09PSAnLScgJiYgeG1sRGF0YVtpICsgMV0gPT09ICctJyAmJiB4bWxEYXRhW2kgKyAyXSA9PT0gJz4nKSB7XG4gICAgICAgIGkgKz0gMjtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKFxuICAgIHhtbERhdGEubGVuZ3RoID4gaSArIDggJiZcbiAgICB4bWxEYXRhW2kgKyAxXSA9PT0gJ0QnICYmXG4gICAgeG1sRGF0YVtpICsgMl0gPT09ICdPJyAmJlxuICAgIHhtbERhdGFbaSArIDNdID09PSAnQycgJiZcbiAgICB4bWxEYXRhW2kgKyA0XSA9PT0gJ1QnICYmXG4gICAgeG1sRGF0YVtpICsgNV0gPT09ICdZJyAmJlxuICAgIHhtbERhdGFbaSArIDZdID09PSAnUCcgJiZcbiAgICB4bWxEYXRhW2kgKyA3XSA9PT0gJ0UnXG4gICkge1xuICAgIGxldCBhbmdsZUJyYWNrZXRzQ291bnQgPSAxO1xuICAgIGZvciAoaSArPSA4OyBpIDwgeG1sRGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHhtbERhdGFbaV0gPT09ICc8Jykge1xuICAgICAgICBhbmdsZUJyYWNrZXRzQ291bnQrKztcbiAgICAgIH0gZWxzZSBpZiAoeG1sRGF0YVtpXSA9PT0gJz4nKSB7XG4gICAgICAgIGFuZ2xlQnJhY2tldHNDb3VudC0tO1xuICAgICAgICBpZiAoYW5nbGVCcmFja2V0c0NvdW50ID09PSAwKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAoXG4gICAgeG1sRGF0YS5sZW5ndGggPiBpICsgOSAmJlxuICAgIHhtbERhdGFbaSArIDFdID09PSAnWycgJiZcbiAgICB4bWxEYXRhW2kgKyAyXSA9PT0gJ0MnICYmXG4gICAgeG1sRGF0YVtpICsgM10gPT09ICdEJyAmJlxuICAgIHhtbERhdGFbaSArIDRdID09PSAnQScgJiZcbiAgICB4bWxEYXRhW2kgKyA1XSA9PT0gJ1QnICYmXG4gICAgeG1sRGF0YVtpICsgNl0gPT09ICdBJyAmJlxuICAgIHhtbERhdGFbaSArIDddID09PSAnWydcbiAgKSB7XG4gICAgZm9yIChpICs9IDg7IGkgPCB4bWxEYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoeG1sRGF0YVtpXSA9PT0gJ10nICYmIHhtbERhdGFbaSArIDFdID09PSAnXScgJiYgeG1sRGF0YVtpICsgMl0gPT09ICc+Jykge1xuICAgICAgICBpICs9IDI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpO1xufVxuXG5jb25zdCBkb3VibGVRdW90ZSA9ICdcIic7XG5jb25zdCBzaW5nbGVRdW90ZSA9IFwiJ1wiO1xuXG4vKipcbiAqIEtlZXAgcmVhZGluZyB4bWxEYXRhIHVudGlsICc8JyBpcyBmb3VuZCBvdXRzaWRlIHRoZSBhdHRyaWJ1dGUgdmFsdWUuXG4gKiBAcGFyYW0ge3N0cmluZ30geG1sRGF0YVxuICogQHBhcmFtIHtudW1iZXJ9IGlcbiAqL1xuZnVuY3Rpb24gcmVhZEF0dHJpYnV0ZVN0cih4bWxEYXRhLCBpKSB7XG4gIGxldCBhdHRyU3RyID0gJyc7XG4gIGxldCBzdGFydENoYXIgPSAnJztcbiAgbGV0IHRhZ0Nsb3NlZCA9IGZhbHNlO1xuICBmb3IgKDsgaSA8IHhtbERhdGEubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoeG1sRGF0YVtpXSA9PT0gZG91YmxlUXVvdGUgfHwgeG1sRGF0YVtpXSA9PT0gc2luZ2xlUXVvdGUpIHtcbiAgICAgIGlmIChzdGFydENoYXIgPT09ICcnKSB7XG4gICAgICAgIHN0YXJ0Q2hhciA9IHhtbERhdGFbaV07XG4gICAgICB9IGVsc2UgaWYgKHN0YXJ0Q2hhciAhPT0geG1sRGF0YVtpXSkge1xuICAgICAgICAvL2lmIHZhdWUgaXMgZW5jbG9zZWQgd2l0aCBkb3VibGUgcXVvdGUgdGhlbiBzaW5nbGUgcXVvdGVzIGFyZSBhbGxvd2VkIGluc2lkZSB0aGUgdmFsdWUgYW5kIHZpY2UgdmVyc2FcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXJ0Q2hhciA9ICcnO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoeG1sRGF0YVtpXSA9PT0gJz4nKSB7XG4gICAgICBpZiAoc3RhcnRDaGFyID09PSAnJykge1xuICAgICAgICB0YWdDbG9zZWQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgYXR0clN0ciArPSB4bWxEYXRhW2ldO1xuICB9XG4gIGlmIChzdGFydENoYXIgIT09ICcnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB2YWx1ZTogYXR0clN0cixcbiAgICBpbmRleDogaSxcbiAgICB0YWdDbG9zZWQ6IHRhZ0Nsb3NlZFxuICB9O1xufVxuXG4vKipcbiAqIFNlbGVjdCBhbGwgdGhlIGF0dHJpYnV0ZXMgd2hldGhlciB2YWxpZCBvciBpbnZhbGlkLlxuICovXG5jb25zdCB2YWxpZEF0dHJTdHJSZWd4cCA9IG5ldyBSZWdFeHAoJyhcXFxccyopKFteXFxcXHM9XSspKFxcXFxzKj0pPyhcXFxccyooW1xcJ1wiXSkoKFtcXFxcc1xcXFxTXSkqPylcXFxcNSk/JywgJ2cnKTtcblxuLy9hdHRyLCA9XCJzZFwiLCBhPVwiYW1pdCdzXCIsIGE9XCJzZFwiYj1cInNhZlwiLCBhYiAgY2Q9XCJcIlxuXG5mdW5jdGlvbiB2YWxpZGF0ZUF0dHJpYnV0ZVN0cmluZyhhdHRyU3RyLCBvcHRpb25zKSB7XG4gIC8vY29uc29sZS5sb2coXCJzdGFydDpcIithdHRyU3RyK1wiOmVuZFwiKTtcblxuICAvL2lmKGF0dHJTdHIudHJpbSgpLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRydWU7IC8vZW1wdHkgc3RyaW5nXG5cbiAgY29uc3QgbWF0Y2hlcyA9IHV0aWwuZ2V0QWxsTWF0Y2hlcyhhdHRyU3RyLCB2YWxpZEF0dHJTdHJSZWd4cCk7XG4gIGNvbnN0IGF0dHJOYW1lcyA9IHt9O1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWF0Y2hlcy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChtYXRjaGVzW2ldWzFdLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy9ub3NwYWNlIGJlZm9yZSBhdHRyaWJ1dGUgbmFtZTogYT1cInNkXCJiPVwic2FmXCJcbiAgICAgIHJldHVybiBnZXRFcnJvck9iamVjdCgnSW52YWxpZEF0dHInLCBcIkF0dHJpYnV0ZSAnXCIrbWF0Y2hlc1tpXVsyXStcIicgaGFzIG5vIHNwYWNlIGluIHN0YXJ0aW5nLlwiLCBnZXRQb3NpdGlvbkZyb21NYXRjaChtYXRjaGVzW2ldKSlcbiAgICB9IGVsc2UgaWYgKG1hdGNoZXNbaV1bM10gIT09IHVuZGVmaW5lZCAmJiBtYXRjaGVzW2ldWzRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBnZXRFcnJvck9iamVjdCgnSW52YWxpZEF0dHInLCBcIkF0dHJpYnV0ZSAnXCIrbWF0Y2hlc1tpXVsyXStcIicgaXMgd2l0aG91dCB2YWx1ZS5cIiwgZ2V0UG9zaXRpb25Gcm9tTWF0Y2gobWF0Y2hlc1tpXSkpO1xuICAgIH0gZWxzZSBpZiAobWF0Y2hlc1tpXVszXSA9PT0gdW5kZWZpbmVkICYmICFvcHRpb25zLmFsbG93Qm9vbGVhbkF0dHJpYnV0ZXMpIHtcbiAgICAgIC8vaW5kZXBlbmRlbnQgYXR0cmlidXRlOiBhYlxuICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KCdJbnZhbGlkQXR0cicsIFwiYm9vbGVhbiBhdHRyaWJ1dGUgJ1wiK21hdGNoZXNbaV1bMl0rXCInIGlzIG5vdCBhbGxvd2VkLlwiLCBnZXRQb3NpdGlvbkZyb21NYXRjaChtYXRjaGVzW2ldKSk7XG4gICAgfVxuICAgIC8qIGVsc2UgaWYobWF0Y2hlc1tpXVs2XSA9PT0gdW5kZWZpbmVkKXsvL2F0dHJpYnV0ZSB3aXRob3V0IHZhbHVlOiBhYj1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZXJyOiB7IGNvZGU6XCJJbnZhbGlkQXR0clwiLG1zZzpcImF0dHJpYnV0ZSBcIiArIG1hdGNoZXNbaV1bMl0gKyBcIiBoYXMgbm8gdmFsdWUgYXNzaWduZWQuXCJ9fTtcbiAgICAgICAgICAgICAgICB9ICovXG4gICAgY29uc3QgYXR0ck5hbWUgPSBtYXRjaGVzW2ldWzJdO1xuICAgIGlmICghdmFsaWRhdGVBdHRyTmFtZShhdHRyTmFtZSkpIHtcbiAgICAgIHJldHVybiBnZXRFcnJvck9iamVjdCgnSW52YWxpZEF0dHInLCBcIkF0dHJpYnV0ZSAnXCIrYXR0ck5hbWUrXCInIGlzIGFuIGludmFsaWQgbmFtZS5cIiwgZ2V0UG9zaXRpb25Gcm9tTWF0Y2gobWF0Y2hlc1tpXSkpO1xuICAgIH1cbiAgICBpZiAoIWF0dHJOYW1lcy5oYXNPd25Qcm9wZXJ0eShhdHRyTmFtZSkpIHtcbiAgICAgIC8vY2hlY2sgZm9yIGR1cGxpY2F0ZSBhdHRyaWJ1dGUuXG4gICAgICBhdHRyTmFtZXNbYXR0ck5hbWVdID0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KCdJbnZhbGlkQXR0cicsIFwiQXR0cmlidXRlICdcIithdHRyTmFtZStcIicgaXMgcmVwZWF0ZWQuXCIsIGdldFBvc2l0aW9uRnJvbU1hdGNoKG1hdGNoZXNbaV0pKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVOdW1iZXJBbXBlcnNhbmQoeG1sRGF0YSwgaSkge1xuICBsZXQgcmUgPSAvXFxkLztcbiAgaWYgKHhtbERhdGFbaV0gPT09ICd4Jykge1xuICAgIGkrKztcbiAgICByZSA9IC9bXFxkYS1mQS1GXS87XG4gIH1cbiAgZm9yICg7IGkgPCB4bWxEYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHhtbERhdGFbaV0gPT09ICc7JylcbiAgICAgIHJldHVybiBpO1xuICAgIGlmICgheG1sRGF0YVtpXS5tYXRjaChyZSkpXG4gICAgICBicmVhaztcbiAgfVxuICByZXR1cm4gLTE7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlQW1wZXJzYW5kKHhtbERhdGEsIGkpIHtcbiAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL3htbC8jZHQtY2hhcnJlZlxuICBpKys7XG4gIGlmICh4bWxEYXRhW2ldID09PSAnOycpXG4gICAgcmV0dXJuIC0xO1xuICBpZiAoeG1sRGF0YVtpXSA9PT0gJyMnKSB7XG4gICAgaSsrO1xuICAgIHJldHVybiB2YWxpZGF0ZU51bWJlckFtcGVyc2FuZCh4bWxEYXRhLCBpKTtcbiAgfVxuICBsZXQgY291bnQgPSAwO1xuICBmb3IgKDsgaSA8IHhtbERhdGEubGVuZ3RoOyBpKyssIGNvdW50KyspIHtcbiAgICBpZiAoeG1sRGF0YVtpXS5tYXRjaCgvXFx3LykgJiYgY291bnQgPCAyMClcbiAgICAgIGNvbnRpbnVlO1xuICAgIGlmICh4bWxEYXRhW2ldID09PSAnOycpXG4gICAgICBicmVhaztcbiAgICByZXR1cm4gLTE7XG4gIH1cbiAgcmV0dXJuIGk7XG59XG5cbmZ1bmN0aW9uIGdldEVycm9yT2JqZWN0KGNvZGUsIG1lc3NhZ2UsIGxpbmVOdW1iZXIpIHtcbiAgcmV0dXJuIHtcbiAgICBlcnI6IHtcbiAgICAgIGNvZGU6IGNvZGUsXG4gICAgICBtc2c6IG1lc3NhZ2UsXG4gICAgICBsaW5lOiBsaW5lTnVtYmVyLmxpbmUgfHwgbGluZU51bWJlcixcbiAgICAgIGNvbDogbGluZU51bWJlci5jb2wsXG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVBdHRyTmFtZShhdHRyTmFtZSkge1xuICByZXR1cm4gdXRpbC5pc05hbWUoYXR0ck5hbWUpO1xufVxuXG4vLyBjb25zdCBzdGFydHNXaXRoWE1MID0gL154bWwvaTtcblxuZnVuY3Rpb24gdmFsaWRhdGVUYWdOYW1lKHRhZ25hbWUpIHtcbiAgcmV0dXJuIHV0aWwuaXNOYW1lKHRhZ25hbWUpIC8qICYmICF0YWduYW1lLm1hdGNoKHN0YXJ0c1dpdGhYTUwpICovO1xufVxuXG4vL3RoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbGluZSBudW1iZXIgZm9yIHRoZSBjaGFyYWN0ZXIgYXQgdGhlIGdpdmVuIGluZGV4XG5mdW5jdGlvbiBnZXRMaW5lTnVtYmVyRm9yUG9zaXRpb24oeG1sRGF0YSwgaW5kZXgpIHtcbiAgY29uc3QgbGluZXMgPSB4bWxEYXRhLnN1YnN0cmluZygwLCBpbmRleCkuc3BsaXQoL1xccj9cXG4vKTtcbiAgcmV0dXJuIHtcbiAgICBsaW5lOiBsaW5lcy5sZW5ndGgsXG5cbiAgICAvLyBjb2x1bW4gbnVtYmVyIGlzIGxhc3QgbGluZSdzIGxlbmd0aCArIDEsIGJlY2F1c2UgY29sdW1uIG51bWJlcmluZyBzdGFydHMgYXQgMTpcbiAgICBjb2w6IGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLmxlbmd0aCArIDFcbiAgfTtcbn1cblxuLy90aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHBvc2l0aW9uIG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgbWF0Y2ggd2l0aGluIGF0dHJTdHJcbmZ1bmN0aW9uIGdldFBvc2l0aW9uRnJvbU1hdGNoKG1hdGNoKSB7XG4gIHJldHVybiBtYXRjaC5zdGFydEluZGV4ICsgbWF0Y2hbMV0ubGVuZ3RoO1xufVxuIiwKICAgICJcbmNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xuICAgIHByZXNlcnZlT3JkZXI6IGZhbHNlLFxuICAgIGF0dHJpYnV0ZU5hbWVQcmVmaXg6ICdAXycsXG4gICAgYXR0cmlidXRlc0dyb3VwTmFtZTogZmFsc2UsXG4gICAgdGV4dE5vZGVOYW1lOiAnI3RleHQnLFxuICAgIGlnbm9yZUF0dHJpYnV0ZXM6IHRydWUsXG4gICAgcmVtb3ZlTlNQcmVmaXg6IGZhbHNlLCAvLyByZW1vdmUgTlMgZnJvbSB0YWcgbmFtZSBvciBhdHRyaWJ1dGUgbmFtZSBpZiB0cnVlXG4gICAgYWxsb3dCb29sZWFuQXR0cmlidXRlczogZmFsc2UsIC8vYSB0YWcgY2FuIGhhdmUgYXR0cmlidXRlcyB3aXRob3V0IGFueSB2YWx1ZVxuICAgIC8vaWdub3JlUm9vdEVsZW1lbnQgOiBmYWxzZSxcbiAgICBwYXJzZVRhZ1ZhbHVlOiB0cnVlLFxuICAgIHBhcnNlQXR0cmlidXRlVmFsdWU6IGZhbHNlLFxuICAgIHRyaW1WYWx1ZXM6IHRydWUsIC8vVHJpbSBzdHJpbmcgdmFsdWVzIG9mIHRhZyBhbmQgYXR0cmlidXRlc1xuICAgIGNkYXRhUHJvcE5hbWU6IGZhbHNlLFxuICAgIG51bWJlclBhcnNlT3B0aW9uczoge1xuICAgICAgaGV4OiB0cnVlLFxuICAgICAgbGVhZGluZ1plcm9zOiB0cnVlLFxuICAgICAgZU5vdGF0aW9uOiB0cnVlXG4gICAgfSxcbiAgICB0YWdWYWx1ZVByb2Nlc3NvcjogZnVuY3Rpb24odGFnTmFtZSwgdmFsKSB7XG4gICAgICByZXR1cm4gdmFsO1xuICAgIH0sXG4gICAgYXR0cmlidXRlVmFsdWVQcm9jZXNzb3I6IGZ1bmN0aW9uKGF0dHJOYW1lLCB2YWwpIHtcbiAgICAgIHJldHVybiB2YWw7XG4gICAgfSxcbiAgICBzdG9wTm9kZXM6IFtdLCAvL25lc3RlZCB0YWdzIHdpbGwgbm90IGJlIHBhcnNlZCBldmVuIGZvciBlcnJvcnNcbiAgICBhbHdheXNDcmVhdGVUZXh0Tm9kZTogZmFsc2UsXG4gICAgaXNBcnJheTogKCkgPT4gZmFsc2UsXG4gICAgY29tbWVudFByb3BOYW1lOiBmYWxzZSxcbiAgICB1bnBhaXJlZFRhZ3M6IFtdLFxuICAgIHByb2Nlc3NFbnRpdGllczogdHJ1ZSxcbiAgICBodG1sRW50aXRpZXM6IGZhbHNlLFxuICAgIGlnbm9yZURlY2xhcmF0aW9uOiBmYWxzZSxcbiAgICBpZ25vcmVQaVRhZ3M6IGZhbHNlLFxuICAgIHRyYW5zZm9ybVRhZ05hbWU6IGZhbHNlLFxuICAgIHRyYW5zZm9ybUF0dHJpYnV0ZU5hbWU6IGZhbHNlLFxuICAgIHVwZGF0ZVRhZzogZnVuY3Rpb24odGFnTmFtZSwgalBhdGgsIGF0dHJzKXtcbiAgICAgIHJldHVybiB0YWdOYW1lXG4gICAgfSxcbiAgICAvLyBza2lwRW1wdHlMaXN0SXRlbTogZmFsc2Vcbn07XG4gICBcbmNvbnN0IGJ1aWxkT3B0aW9ucyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdE9wdGlvbnMsIG9wdGlvbnMpO1xufTtcblxuZXhwb3J0cy5idWlsZE9wdGlvbnMgPSBidWlsZE9wdGlvbnM7XG5leHBvcnRzLmRlZmF1bHRPcHRpb25zID0gZGVmYXVsdE9wdGlvbnM7IiwKICAgICIndXNlIHN0cmljdCc7XG5cbmNsYXNzIFhtbE5vZGV7XG4gIGNvbnN0cnVjdG9yKHRhZ25hbWUpIHtcbiAgICB0aGlzLnRhZ25hbWUgPSB0YWduYW1lO1xuICAgIHRoaXMuY2hpbGQgPSBbXTsgLy9uZXN0ZWQgdGFncywgdGV4dCwgY2RhdGEsIGNvbW1lbnRzIGluIG9yZGVyXG4gICAgdGhpc1tcIjpAXCJdID0ge307IC8vYXR0cmlidXRlcyBtYXBcbiAgfVxuICBhZGQoa2V5LHZhbCl7XG4gICAgLy8gdGhpcy5jaGlsZC5wdXNoKCB7bmFtZSA6IGtleSwgdmFsOiB2YWwsIGlzQ2RhdGE6IGlzQ2RhdGEgfSk7XG4gICAgaWYoa2V5ID09PSBcIl9fcHJvdG9fX1wiKSBrZXkgPSBcIiNfX3Byb3RvX19cIjtcbiAgICB0aGlzLmNoaWxkLnB1c2goIHtba2V5XTogdmFsIH0pO1xuICB9XG4gIGFkZENoaWxkKG5vZGUpIHtcbiAgICBpZihub2RlLnRhZ25hbWUgPT09IFwiX19wcm90b19fXCIpIG5vZGUudGFnbmFtZSA9IFwiI19fcHJvdG9fX1wiO1xuICAgIGlmKG5vZGVbXCI6QFwiXSAmJiBPYmplY3Qua2V5cyhub2RlW1wiOkBcIl0pLmxlbmd0aCA+IDApe1xuICAgICAgdGhpcy5jaGlsZC5wdXNoKCB7IFtub2RlLnRhZ25hbWVdOiBub2RlLmNoaWxkLCBbXCI6QFwiXTogbm9kZVtcIjpAXCJdIH0pO1xuICAgIH1lbHNle1xuICAgICAgdGhpcy5jaGlsZC5wdXNoKCB7IFtub2RlLnRhZ25hbWVdOiBub2RlLmNoaWxkIH0pO1xuICAgIH1cbiAgfTtcbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBYbWxOb2RlOyIsCiAgICAiY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL3V0aWwnKTtcblxuLy9UT0RPOiBoYW5kbGUgY29tbWVudHNcbmZ1bmN0aW9uIHJlYWREb2NUeXBlKHhtbERhdGEsIGkpe1xuICAgIFxuICAgIGNvbnN0IGVudGl0aWVzID0ge307XG4gICAgaWYoIHhtbERhdGFbaSArIDNdID09PSAnTycgJiZcbiAgICAgICAgIHhtbERhdGFbaSArIDRdID09PSAnQycgJiZcbiAgICAgICAgIHhtbERhdGFbaSArIDVdID09PSAnVCcgJiZcbiAgICAgICAgIHhtbERhdGFbaSArIDZdID09PSAnWScgJiZcbiAgICAgICAgIHhtbERhdGFbaSArIDddID09PSAnUCcgJiZcbiAgICAgICAgIHhtbERhdGFbaSArIDhdID09PSAnRScpXG4gICAgeyAgICBcbiAgICAgICAgaSA9IGkrOTtcbiAgICAgICAgbGV0IGFuZ2xlQnJhY2tldHNDb3VudCA9IDE7XG4gICAgICAgIGxldCBoYXNCb2R5ID0gZmFsc2UsIGNvbW1lbnQgPSBmYWxzZTtcbiAgICAgICAgbGV0IGV4cCA9IFwiXCI7XG4gICAgICAgIGZvcig7aTx4bWxEYXRhLmxlbmd0aDtpKyspe1xuICAgICAgICAgICAgaWYgKHhtbERhdGFbaV0gPT09ICc8JyAmJiAhY29tbWVudCkgeyAvL0RldGVybWluZSB0aGUgdGFnIHR5cGVcbiAgICAgICAgICAgICAgICBpZiggaGFzQm9keSAmJiBpc0VudGl0eSh4bWxEYXRhLCBpKSl7XG4gICAgICAgICAgICAgICAgICAgIGkgKz0gNzsgXG4gICAgICAgICAgICAgICAgICAgIFtlbnRpdHlOYW1lLCB2YWwsaV0gPSByZWFkRW50aXR5RXhwKHhtbERhdGEsaSsxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYodmFsLmluZGV4T2YoXCImXCIpID09PSAtMSkgLy9QYXJhbWV0ZXIgZW50aXRpZXMgYXJlIG5vdCBzdXBwb3J0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0aWVzWyB2YWxpZGF0ZUVudGl0eU5hbWUoZW50aXR5TmFtZSkgXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWd4IDogUmVnRXhwKCBgJiR7ZW50aXR5TmFtZX07YCxcImdcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsOiB2YWxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYoIGhhc0JvZHkgJiYgaXNFbGVtZW50KHhtbERhdGEsIGkpKSAgaSArPSA4Oy8vTm90IHN1cHBvcnRlZFxuICAgICAgICAgICAgICAgIGVsc2UgaWYoIGhhc0JvZHkgJiYgaXNBdHRsaXN0KHhtbERhdGEsIGkpKSAgaSArPSA4Oy8vTm90IHN1cHBvcnRlZFxuICAgICAgICAgICAgICAgIGVsc2UgaWYoIGhhc0JvZHkgJiYgaXNOb3RhdGlvbih4bWxEYXRhLCBpKSkgaSArPSA5Oy8vTm90IHN1cHBvcnRlZFxuICAgICAgICAgICAgICAgIGVsc2UgaWYoIGlzQ29tbWVudCkgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudCA9IHRydWU7XG4gICAgICAgICAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIERPQ1RZUEVcIik7XG5cbiAgICAgICAgICAgICAgICBhbmdsZUJyYWNrZXRzQ291bnQrKztcbiAgICAgICAgICAgICAgICBleHAgPSBcIlwiO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh4bWxEYXRhW2ldID09PSAnPicpIHsgLy9SZWFkIHRhZyBjb250ZW50XG4gICAgICAgICAgICAgICAgaWYoY29tbWVudCl7XG4gICAgICAgICAgICAgICAgICAgIGlmKCB4bWxEYXRhW2kgLSAxXSA9PT0gXCItXCIgJiYgeG1sRGF0YVtpIC0gMl0gPT09IFwiLVwiKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuZ2xlQnJhY2tldHNDb3VudC0tO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgIGFuZ2xlQnJhY2tldHNDb3VudC0tO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoYW5nbGVCcmFja2V0c0NvdW50ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9ZWxzZSBpZiggeG1sRGF0YVtpXSA9PT0gJ1snKXtcbiAgICAgICAgICAgICAgICBoYXNCb2R5ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIGV4cCArPSB4bWxEYXRhW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmKGFuZ2xlQnJhY2tldHNDb3VudCAhPT0gMCl7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuY2xvc2VkIERPQ1RZUEVgKTtcbiAgICAgICAgfVxuICAgIH1lbHNle1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgVGFnIGluc3RlYWQgb2YgRE9DVFlQRWApO1xuICAgIH1cbiAgICByZXR1cm4ge2VudGl0aWVzLCBpfTtcbn1cblxuZnVuY3Rpb24gcmVhZEVudGl0eUV4cCh4bWxEYXRhLGkpe1xuICAgIC8vRXh0ZXJuYWwgZW50aXRpZXMgYXJlIG5vdCBzdXBwb3J0ZWRcbiAgICAvLyAgICA8IUVOVElUWSBleHQgU1lTVEVNIFwiaHR0cDovL25vcm1hbC13ZWJzaXRlLmNvbVwiID5cblxuICAgIC8vUGFyYW1ldGVyIGVudGl0aWVzIGFyZSBub3Qgc3VwcG9ydGVkXG4gICAgLy8gICAgPCFFTlRJVFkgZW50aXR5bmFtZSBcIiZhbm90aGVyRWxlbWVudDtcIj5cblxuICAgIC8vSW50ZXJuYWwgZW50aXRpZXMgYXJlIHN1cHBvcnRlZFxuICAgIC8vICAgIDwhRU5USVRZIGVudGl0eW5hbWUgXCJyZXBsYWNlbWVudCB0ZXh0XCI+XG4gICAgXG4gICAgLy9yZWFkIEVudGl0eU5hbWVcbiAgICBsZXQgZW50aXR5TmFtZSA9IFwiXCI7XG4gICAgZm9yICg7IGkgPCB4bWxEYXRhLmxlbmd0aCAmJiAoeG1sRGF0YVtpXSAhPT0gXCInXCIgJiYgeG1sRGF0YVtpXSAhPT0gJ1wiJyApOyBpKyspIHtcbiAgICAgICAgLy8gaWYoeG1sRGF0YVtpXSA9PT0gXCIgXCIpIGNvbnRpbnVlO1xuICAgICAgICAvLyBlbHNlIFxuICAgICAgICBlbnRpdHlOYW1lICs9IHhtbERhdGFbaV07XG4gICAgfVxuICAgIGVudGl0eU5hbWUgPSBlbnRpdHlOYW1lLnRyaW0oKTtcbiAgICBpZihlbnRpdHlOYW1lLmluZGV4T2YoXCIgXCIpICE9PSAtMSkgdGhyb3cgbmV3IEVycm9yKFwiRXh0ZXJuYWwgZW50aXRlcyBhcmUgbm90IHN1cHBvcnRlZFwiKTtcblxuICAgIC8vcmVhZCBFbnRpdHkgVmFsdWVcbiAgICBjb25zdCBzdGFydENoYXIgPSB4bWxEYXRhW2krK107XG4gICAgbGV0IHZhbCA9IFwiXCJcbiAgICBmb3IgKDsgaSA8IHhtbERhdGEubGVuZ3RoICYmIHhtbERhdGFbaV0gIT09IHN0YXJ0Q2hhciA7IGkrKykge1xuICAgICAgICB2YWwgKz0geG1sRGF0YVtpXTtcbiAgICB9XG4gICAgcmV0dXJuIFtlbnRpdHlOYW1lLCB2YWwsIGldO1xufVxuXG5mdW5jdGlvbiBpc0NvbW1lbnQoeG1sRGF0YSwgaSl7XG4gICAgaWYoeG1sRGF0YVtpKzFdID09PSAnIScgJiZcbiAgICB4bWxEYXRhW2krMl0gPT09ICctJyAmJlxuICAgIHhtbERhdGFbaSszXSA9PT0gJy0nKSByZXR1cm4gdHJ1ZVxuICAgIHJldHVybiBmYWxzZVxufVxuZnVuY3Rpb24gaXNFbnRpdHkoeG1sRGF0YSwgaSl7XG4gICAgaWYoeG1sRGF0YVtpKzFdID09PSAnIScgJiZcbiAgICB4bWxEYXRhW2krMl0gPT09ICdFJyAmJlxuICAgIHhtbERhdGFbaSszXSA9PT0gJ04nICYmXG4gICAgeG1sRGF0YVtpKzRdID09PSAnVCcgJiZcbiAgICB4bWxEYXRhW2krNV0gPT09ICdJJyAmJlxuICAgIHhtbERhdGFbaSs2XSA9PT0gJ1QnICYmXG4gICAgeG1sRGF0YVtpKzddID09PSAnWScpIHJldHVybiB0cnVlXG4gICAgcmV0dXJuIGZhbHNlXG59XG5mdW5jdGlvbiBpc0VsZW1lbnQoeG1sRGF0YSwgaSl7XG4gICAgaWYoeG1sRGF0YVtpKzFdID09PSAnIScgJiZcbiAgICB4bWxEYXRhW2krMl0gPT09ICdFJyAmJlxuICAgIHhtbERhdGFbaSszXSA9PT0gJ0wnICYmXG4gICAgeG1sRGF0YVtpKzRdID09PSAnRScgJiZcbiAgICB4bWxEYXRhW2krNV0gPT09ICdNJyAmJlxuICAgIHhtbERhdGFbaSs2XSA9PT0gJ0UnICYmXG4gICAgeG1sRGF0YVtpKzddID09PSAnTicgJiZcbiAgICB4bWxEYXRhW2krOF0gPT09ICdUJykgcmV0dXJuIHRydWVcbiAgICByZXR1cm4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gaXNBdHRsaXN0KHhtbERhdGEsIGkpe1xuICAgIGlmKHhtbERhdGFbaSsxXSA9PT0gJyEnICYmXG4gICAgeG1sRGF0YVtpKzJdID09PSAnQScgJiZcbiAgICB4bWxEYXRhW2krM10gPT09ICdUJyAmJlxuICAgIHhtbERhdGFbaSs0XSA9PT0gJ1QnICYmXG4gICAgeG1sRGF0YVtpKzVdID09PSAnTCcgJiZcbiAgICB4bWxEYXRhW2krNl0gPT09ICdJJyAmJlxuICAgIHhtbERhdGFbaSs3XSA9PT0gJ1MnICYmXG4gICAgeG1sRGF0YVtpKzhdID09PSAnVCcpIHJldHVybiB0cnVlXG4gICAgcmV0dXJuIGZhbHNlXG59XG5mdW5jdGlvbiBpc05vdGF0aW9uKHhtbERhdGEsIGkpe1xuICAgIGlmKHhtbERhdGFbaSsxXSA9PT0gJyEnICYmXG4gICAgeG1sRGF0YVtpKzJdID09PSAnTicgJiZcbiAgICB4bWxEYXRhW2krM10gPT09ICdPJyAmJlxuICAgIHhtbERhdGFbaSs0XSA9PT0gJ1QnICYmXG4gICAgeG1sRGF0YVtpKzVdID09PSAnQScgJiZcbiAgICB4bWxEYXRhW2krNl0gPT09ICdUJyAmJlxuICAgIHhtbERhdGFbaSs3XSA9PT0gJ0knICYmXG4gICAgeG1sRGF0YVtpKzhdID09PSAnTycgJiZcbiAgICB4bWxEYXRhW2krOV0gPT09ICdOJykgcmV0dXJuIHRydWVcbiAgICByZXR1cm4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVFbnRpdHlOYW1lKG5hbWUpe1xuICAgIGlmICh1dGlsLmlzTmFtZShuYW1lKSlcblx0cmV0dXJuIG5hbWU7XG4gICAgZWxzZVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZW50aXR5IG5hbWUgJHtuYW1lfWApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHJlYWREb2NUeXBlO1xuIiwKICAgICJjb25zdCBoZXhSZWdleCA9IC9eWy0rXT8weFthLWZBLUYwLTldKyQvO1xuY29uc3QgbnVtUmVnZXggPSAvXihbXFwtXFwrXSk/KDAqKShcXC5bMC05XSsoW2VFXVxcLT9bMC05XSspP3xbMC05XSsoXFwuWzAtOV0rKFtlRV1cXC0/WzAtOV0rKT8pPykkLztcbi8vIGNvbnN0IG9jdFJlZ2V4ID0gLzB4W2EtejAtOV0rLztcbi8vIGNvbnN0IGJpblJlZ2V4ID0gLzB4W2EtejAtOV0rLztcblxuXG4vL3BvbHlmaWxsXG5pZiAoIU51bWJlci5wYXJzZUludCAmJiB3aW5kb3cucGFyc2VJbnQpIHtcbiAgICBOdW1iZXIucGFyc2VJbnQgPSB3aW5kb3cucGFyc2VJbnQ7XG59XG5pZiAoIU51bWJlci5wYXJzZUZsb2F0ICYmIHdpbmRvdy5wYXJzZUZsb2F0KSB7XG4gICAgTnVtYmVyLnBhcnNlRmxvYXQgPSB3aW5kb3cucGFyc2VGbG9hdDtcbn1cblxuICBcbmNvbnN0IGNvbnNpZGVyID0ge1xuICAgIGhleCA6ICB0cnVlLFxuICAgIGxlYWRpbmdaZXJvczogdHJ1ZSxcbiAgICBkZWNpbWFsUG9pbnQ6IFwiXFwuXCIsXG4gICAgZU5vdGF0aW9uOiB0cnVlXG4gICAgLy9za2lwTGlrZTogL3JlZ2V4L1xufTtcblxuZnVuY3Rpb24gdG9OdW1iZXIoc3RyLCBvcHRpb25zID0ge30pe1xuICAgIC8vIGNvbnN0IG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBjb25zaWRlcik7XG4gICAgLy8gaWYob3B0LmxlYWRpbmdaZXJvcyA9PT0gZmFsc2Upe1xuICAgIC8vICAgICBvcHRpb25zLmxlYWRpbmdaZXJvcyA9IGZhbHNlO1xuICAgIC8vIH1lbHNlIGlmKG9wdC5oZXggPT09IGZhbHNlKXtcbiAgICAvLyAgICAgb3B0aW9ucy5oZXggPSBmYWxzZTtcbiAgICAvLyB9XG5cbiAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgY29uc2lkZXIsIG9wdGlvbnMgKTtcbiAgICBpZighc3RyIHx8IHR5cGVvZiBzdHIgIT09IFwic3RyaW5nXCIgKSByZXR1cm4gc3RyO1xuICAgIFxuICAgIGxldCB0cmltbWVkU3RyICA9IHN0ci50cmltKCk7XG4gICAgLy8gaWYodHJpbW1lZFN0ciA9PT0gXCIwLjBcIikgcmV0dXJuIDA7XG4gICAgLy8gZWxzZSBpZih0cmltbWVkU3RyID09PSBcIiswLjBcIikgcmV0dXJuIDA7XG4gICAgLy8gZWxzZSBpZih0cmltbWVkU3RyID09PSBcIi0wLjBcIikgcmV0dXJuIC0wO1xuXG4gICAgaWYob3B0aW9ucy5za2lwTGlrZSAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbnMuc2tpcExpa2UudGVzdCh0cmltbWVkU3RyKSkgcmV0dXJuIHN0cjtcbiAgICBlbHNlIGlmIChvcHRpb25zLmhleCAmJiBoZXhSZWdleC50ZXN0KHRyaW1tZWRTdHIpKSB7XG4gICAgICAgIHJldHVybiBOdW1iZXIucGFyc2VJbnQodHJpbW1lZFN0ciwgMTYpO1xuICAgIC8vIH0gZWxzZSBpZiAob3B0aW9ucy5wYXJzZU9jdCAmJiBvY3RSZWdleC50ZXN0KHN0cikpIHtcbiAgICAvLyAgICAgcmV0dXJuIE51bWJlci5wYXJzZUludCh2YWwsIDgpO1xuICAgIC8vIH1lbHNlIGlmIChvcHRpb25zLnBhcnNlQmluICYmIGJpblJlZ2V4LnRlc3Qoc3RyKSkge1xuICAgIC8vICAgICByZXR1cm4gTnVtYmVyLnBhcnNlSW50KHZhbCwgMik7XG4gICAgfWVsc2V7XG4gICAgICAgIC8vc2VwYXJhdGUgbmVnYXRpdmUgc2lnbiwgbGVhZGluZyB6ZXJvcywgYW5kIHJlc3QgbnVtYmVyXG4gICAgICAgIGNvbnN0IG1hdGNoID0gbnVtUmVnZXguZXhlYyh0cmltbWVkU3RyKTtcbiAgICAgICAgaWYobWF0Y2gpe1xuICAgICAgICAgICAgY29uc3Qgc2lnbiA9IG1hdGNoWzFdO1xuICAgICAgICAgICAgY29uc3QgbGVhZGluZ1plcm9zID0gbWF0Y2hbMl07XG4gICAgICAgICAgICBsZXQgbnVtVHJpbW1lZEJ5WmVyb3MgPSB0cmltWmVyb3MobWF0Y2hbM10pOyAvL2NvbXBsZXRlIG51bSB3aXRob3V0IGxlYWRpbmcgemVyb3NcbiAgICAgICAgICAgIC8vdHJpbSBlbmRpbmcgemVyb3MgZm9yIGZsb2F0aW5nIG51bWJlclxuICAgICAgICAgICAgXG4gICAgICAgICAgICBjb25zdCBlTm90YXRpb24gPSBtYXRjaFs0XSB8fCBtYXRjaFs2XTtcbiAgICAgICAgICAgIGlmKCFvcHRpb25zLmxlYWRpbmdaZXJvcyAmJiBsZWFkaW5nWmVyb3MubGVuZ3RoID4gMCAmJiBzaWduICYmIHRyaW1tZWRTdHJbMl0gIT09IFwiLlwiKSByZXR1cm4gc3RyOyAvLy0wMTIzXG4gICAgICAgICAgICBlbHNlIGlmKCFvcHRpb25zLmxlYWRpbmdaZXJvcyAmJiBsZWFkaW5nWmVyb3MubGVuZ3RoID4gMCAmJiAhc2lnbiAmJiB0cmltbWVkU3RyWzFdICE9PSBcIi5cIikgcmV0dXJuIHN0cjsgLy8wMTIzXG4gICAgICAgICAgICBlbHNley8vbm8gbGVhZGluZyB6ZXJvcyBvciBsZWFkaW5nIHplcm9zIGFyZSBhbGxvd2VkXG4gICAgICAgICAgICAgICAgY29uc3QgbnVtID0gTnVtYmVyKHRyaW1tZWRTdHIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG51bVN0ciA9IFwiXCIgKyBudW07XG4gICAgICAgICAgICAgICAgaWYobnVtU3RyLnNlYXJjaCgvW2VFXS8pICE9PSAtMSl7IC8vZ2l2ZW4gbnVtYmVyIGlzIGxvbmcgYW5kIHBhcnNlZCB0byBlTm90YXRpb25cbiAgICAgICAgICAgICAgICAgICAgaWYob3B0aW9ucy5lTm90YXRpb24pIHJldHVybiBudW07XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgcmV0dXJuIHN0cjtcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZihlTm90YXRpb24peyAvL2dpdmVuIG51bWJlciBoYXMgZW5vdGF0aW9uXG4gICAgICAgICAgICAgICAgICAgIGlmKG9wdGlvbnMuZU5vdGF0aW9uKSByZXR1cm4gbnVtO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIHJldHVybiBzdHI7XG4gICAgICAgICAgICAgICAgfWVsc2UgaWYodHJpbW1lZFN0ci5pbmRleE9mKFwiLlwiKSAhPT0gLTEpeyAvL2Zsb2F0aW5nIG51bWJlclxuICAgICAgICAgICAgICAgICAgICAvLyBjb25zdCBkZWNpbWFsUGFydCA9IG1hdGNoWzVdLnN1YnN0cigxKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc3QgaW50UGFydCA9IHRyaW1tZWRTdHIuc3Vic3RyKDAsdHJpbW1lZFN0ci5pbmRleE9mKFwiLlwiKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnN0IHAgPSBudW1TdHIuaW5kZXhPZihcIi5cIik7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnN0IGdpdmVuSW50UGFydCA9IG51bVN0ci5zdWJzdHIoMCxwKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc3QgZ2l2ZW5EZWNQYXJ0ID0gbnVtU3RyLnN1YnN0cihwKzEpO1xuICAgICAgICAgICAgICAgICAgICBpZihudW1TdHIgPT09IFwiMFwiICYmIChudW1UcmltbWVkQnlaZXJvcyA9PT0gXCJcIikgKSByZXR1cm4gbnVtOyAvLzAuMFxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKG51bVN0ciA9PT0gbnVtVHJpbW1lZEJ5WmVyb3MpIHJldHVybiBudW07IC8vMC40NTYuIDAuNzkwMDBcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiggc2lnbiAmJiBudW1TdHIgPT09IFwiLVwiK251bVRyaW1tZWRCeVplcm9zKSByZXR1cm4gbnVtO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIHJldHVybiBzdHI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGlmKGxlYWRpbmdaZXJvcyl7XG4gICAgICAgICAgICAgICAgICAgIC8vIGlmKG51bVRyaW1tZWRCeVplcm9zID09PSBudW1TdHIpe1xuICAgICAgICAgICAgICAgICAgICAvLyAgICAgaWYob3B0aW9ucy5sZWFkaW5nWmVyb3MpIHJldHVybiBudW07XG4gICAgICAgICAgICAgICAgICAgIC8vICAgICBlbHNlIHJldHVybiBzdHI7XG4gICAgICAgICAgICAgICAgICAgIC8vIH1lbHNlIHJldHVybiBzdHI7XG4gICAgICAgICAgICAgICAgICAgIGlmKG51bVRyaW1tZWRCeVplcm9zID09PSBudW1TdHIpIHJldHVybiBudW07XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYoc2lnbitudW1UcmltbWVkQnlaZXJvcyA9PT0gbnVtU3RyKSByZXR1cm4gbnVtO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIHJldHVybiBzdHI7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYodHJpbW1lZFN0ciA9PT0gbnVtU3RyKSByZXR1cm4gbnVtO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYodHJpbW1lZFN0ciA9PT0gc2lnbitudW1TdHIpIHJldHVybiBudW07XG4gICAgICAgICAgICAgICAgLy8gZWxzZXtcbiAgICAgICAgICAgICAgICAvLyAgICAgLy9udW1iZXIgd2l0aCArLy0gc2lnblxuICAgICAgICAgICAgICAgIC8vICAgICB0cmltbWVkU3RyLnRlc3QoL1stK11bMC05XSk7XG5cbiAgICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0cjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGVsc2UgaWYoIWVOb3RhdGlvbiAmJiB0cmltbWVkU3RyICYmIHRyaW1tZWRTdHIgIT09IE51bWJlcih0cmltbWVkU3RyKSApIHJldHVybiBzdHI7XG4gICAgICAgICAgICBcbiAgICAgICAgfWVsc2V7IC8vbm9uLW51bWVyaWMgc3RyaW5nXG4gICAgICAgICAgICByZXR1cm4gc3RyO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vKipcbiAqIFxuICogQHBhcmFtIHtzdHJpbmd9IG51bVN0ciB3aXRob3V0IGxlYWRpbmcgemVyb3NcbiAqIEByZXR1cm5zIFxuICovXG5mdW5jdGlvbiB0cmltWmVyb3MobnVtU3RyKXtcbiAgICBpZihudW1TdHIgJiYgbnVtU3RyLmluZGV4T2YoXCIuXCIpICE9PSAtMSl7Ly9mbG9hdFxuICAgICAgICBudW1TdHIgPSBudW1TdHIucmVwbGFjZSgvMCskLywgXCJcIik7IC8vcmVtb3ZlIGVuZGluZyB6ZXJvc1xuICAgICAgICBpZihudW1TdHIgPT09IFwiLlwiKSAgbnVtU3RyID0gXCIwXCI7XG4gICAgICAgIGVsc2UgaWYobnVtU3RyWzBdID09PSBcIi5cIikgIG51bVN0ciA9IFwiMFwiK251bVN0cjtcbiAgICAgICAgZWxzZSBpZihudW1TdHJbbnVtU3RyLmxlbmd0aC0xXSA9PT0gXCIuXCIpICBudW1TdHIgPSBudW1TdHIuc3Vic3RyKDAsbnVtU3RyLmxlbmd0aC0xKTtcbiAgICAgICAgcmV0dXJuIG51bVN0cjtcbiAgICB9XG4gICAgcmV0dXJuIG51bVN0cjtcbn1cbm1vZHVsZS5leHBvcnRzID0gdG9OdW1iZXJcbiIsCiAgICAiZnVuY3Rpb24gZ2V0SWdub3JlQXR0cmlidXRlc0ZuKGlnbm9yZUF0dHJpYnV0ZXMpIHtcbiAgICBpZiAodHlwZW9mIGlnbm9yZUF0dHJpYnV0ZXMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIGlnbm9yZUF0dHJpYnV0ZXNcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaWdub3JlQXR0cmlidXRlcykpIHtcbiAgICAgICAgcmV0dXJuIChhdHRyTmFtZSkgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIGlnbm9yZUF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHBhdHRlcm4gPT09ICdzdHJpbmcnICYmIGF0dHJOYW1lID09PSBwYXR0ZXJuKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwYXR0ZXJuIGluc3RhbmNlb2YgUmVnRXhwICYmIHBhdHRlcm4udGVzdChhdHRyTmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuICgpID0+IGZhbHNlXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0SWdub3JlQXR0cmlidXRlc0ZuIiwKICAgICIndXNlIHN0cmljdCc7XG4vLy9AdHMtY2hlY2tcblxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL3V0aWwnKTtcbmNvbnN0IHhtbE5vZGUgPSByZXF1aXJlKCcuL3htbE5vZGUnKTtcbmNvbnN0IHJlYWREb2NUeXBlID0gcmVxdWlyZShcIi4vRG9jVHlwZVJlYWRlclwiKTtcbmNvbnN0IHRvTnVtYmVyID0gcmVxdWlyZShcInN0cm51bVwiKTtcbmNvbnN0IGdldElnbm9yZUF0dHJpYnV0ZXNGbiA9IHJlcXVpcmUoJy4uL2lnbm9yZUF0dHJpYnV0ZXMnKVxuXG4vLyBjb25zdCByZWd4ID1cbi8vICAgJzwoKCFcXFxcW0NEQVRBXFxcXFsoW1xcXFxzXFxcXFNdKj8pKF1dPikpfCgoTkFNRTopPyhOQU1FKSkoW14+XSopPnwoKFxcXFwvKShOQU1FKVxcXFxzKj4pKShbXjxdKiknXG4vLyAgIC5yZXBsYWNlKC9OQU1FL2csIHV0aWwubmFtZVJlZ2V4cCk7XG5cbi8vY29uc3QgdGFnc1JlZ3ggPSBuZXcgUmVnRXhwKFwiPChcXFxcLz9bXFxcXHc6XFxcXC1cXC5fXSspKFtePl0qKT4oXFxcXHMqXCIrY2RhdGFSZWd4K1wiKSooW148XSspP1wiLFwiZ1wiKTtcbi8vY29uc3QgdGFnc1JlZ3ggPSBuZXcgUmVnRXhwKFwiPChcXFxcLz8pKChcXFxcdyo6KT8oW1xcXFx3OlxcXFwtXFwuX10rKSkoW14+XSopPihbXjxdKikoXCIrY2RhdGFSZWd4K1wiKFtePF0qKSkqKFtePF0rKT9cIixcImdcIik7XG5cbmNsYXNzIE9yZGVyZWRPYmpQYXJzZXJ7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMpe1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy5jdXJyZW50Tm9kZSA9IG51bGw7XG4gICAgdGhpcy50YWdzTm9kZVN0YWNrID0gW107XG4gICAgdGhpcy5kb2NUeXBlRW50aXRpZXMgPSB7fTtcbiAgICB0aGlzLmxhc3RFbnRpdGllcyA9IHtcbiAgICAgIFwiYXBvc1wiIDogeyByZWdleDogLyYoYXBvc3wjMzl8I3gyNyk7L2csIHZhbCA6IFwiJ1wifSxcbiAgICAgIFwiZ3RcIiA6IHsgcmVnZXg6IC8mKGd0fCM2MnwjeDNFKTsvZywgdmFsIDogXCI+XCJ9LFxuICAgICAgXCJsdFwiIDogeyByZWdleDogLyYobHR8IzYwfCN4M0MpOy9nLCB2YWwgOiBcIjxcIn0sXG4gICAgICBcInF1b3RcIiA6IHsgcmVnZXg6IC8mKHF1b3R8IzM0fCN4MjIpOy9nLCB2YWwgOiBcIlxcXCJcIn0sXG4gICAgfTtcbiAgICB0aGlzLmFtcEVudGl0eSA9IHsgcmVnZXg6IC8mKGFtcHwjMzh8I3gyNik7L2csIHZhbCA6IFwiJlwifTtcbiAgICB0aGlzLmh0bWxFbnRpdGllcyA9IHtcbiAgICAgIFwic3BhY2VcIjogeyByZWdleDogLyYobmJzcHwjMTYwKTsvZywgdmFsOiBcIiBcIiB9LFxuICAgICAgLy8gXCJsdFwiIDogeyByZWdleDogLyYobHR8IzYwKTsvZywgdmFsOiBcIjxcIiB9LFxuICAgICAgLy8gXCJndFwiIDogeyByZWdleDogLyYoZ3R8IzYyKTsvZywgdmFsOiBcIj5cIiB9LFxuICAgICAgLy8gXCJhbXBcIiA6IHsgcmVnZXg6IC8mKGFtcHwjMzgpOy9nLCB2YWw6IFwiJlwiIH0sXG4gICAgICAvLyBcInF1b3RcIiA6IHsgcmVnZXg6IC8mKHF1b3R8IzM0KTsvZywgdmFsOiBcIlxcXCJcIiB9LFxuICAgICAgLy8gXCJhcG9zXCIgOiB7IHJlZ2V4OiAvJihhcG9zfCMzOSk7L2csIHZhbDogXCInXCIgfSxcbiAgICAgIFwiY2VudFwiIDogeyByZWdleDogLyYoY2VudHwjMTYyKTsvZywgdmFsOiBcIsKiXCIgfSxcbiAgICAgIFwicG91bmRcIiA6IHsgcmVnZXg6IC8mKHBvdW5kfCMxNjMpOy9nLCB2YWw6IFwiwqNcIiB9LFxuICAgICAgXCJ5ZW5cIiA6IHsgcmVnZXg6IC8mKHllbnwjMTY1KTsvZywgdmFsOiBcIsKlXCIgfSxcbiAgICAgIFwiZXVyb1wiIDogeyByZWdleDogLyYoZXVyb3wjODM2NCk7L2csIHZhbDogXCLigqxcIiB9LFxuICAgICAgXCJjb3B5cmlnaHRcIiA6IHsgcmVnZXg6IC8mKGNvcHl8IzE2OSk7L2csIHZhbDogXCLCqVwiIH0sXG4gICAgICBcInJlZ1wiIDogeyByZWdleDogLyYocmVnfCMxNzQpOy9nLCB2YWw6IFwiwq5cIiB9LFxuICAgICAgXCJpbnJcIiA6IHsgcmVnZXg6IC8mKGlucnwjODM3Nyk7L2csIHZhbDogXCLigrlcIiB9LFxuICAgICAgXCJudW1fZGVjXCI6IHsgcmVnZXg6IC8mIyhbMC05XXsxLDd9KTsvZywgdmFsIDogKF8sIHN0cikgPT4gU3RyaW5nLmZyb21DaGFyQ29kZShOdW1iZXIucGFyc2VJbnQoc3RyLCAxMCkpIH0sXG4gICAgICBcIm51bV9oZXhcIjogeyByZWdleDogLyYjeChbMC05YS1mQS1GXXsxLDZ9KTsvZywgdmFsIDogKF8sIHN0cikgPT4gU3RyaW5nLmZyb21DaGFyQ29kZShOdW1iZXIucGFyc2VJbnQoc3RyLCAxNikpIH0sXG4gICAgfTtcbiAgICB0aGlzLmFkZEV4dGVybmFsRW50aXRpZXMgPSBhZGRFeHRlcm5hbEVudGl0aWVzO1xuICAgIHRoaXMucGFyc2VYbWwgPSBwYXJzZVhtbDtcbiAgICB0aGlzLnBhcnNlVGV4dERhdGEgPSBwYXJzZVRleHREYXRhO1xuICAgIHRoaXMucmVzb2x2ZU5hbWVTcGFjZSA9IHJlc29sdmVOYW1lU3BhY2U7XG4gICAgdGhpcy5idWlsZEF0dHJpYnV0ZXNNYXAgPSBidWlsZEF0dHJpYnV0ZXNNYXA7XG4gICAgdGhpcy5pc0l0U3RvcE5vZGUgPSBpc0l0U3RvcE5vZGU7XG4gICAgdGhpcy5yZXBsYWNlRW50aXRpZXNWYWx1ZSA9IHJlcGxhY2VFbnRpdGllc1ZhbHVlO1xuICAgIHRoaXMucmVhZFN0b3BOb2RlRGF0YSA9IHJlYWRTdG9wTm9kZURhdGE7XG4gICAgdGhpcy5zYXZlVGV4dFRvUGFyZW50VGFnID0gc2F2ZVRleHRUb1BhcmVudFRhZztcbiAgICB0aGlzLmFkZENoaWxkID0gYWRkQ2hpbGQ7XG4gICAgdGhpcy5pZ25vcmVBdHRyaWJ1dGVzRm4gPSBnZXRJZ25vcmVBdHRyaWJ1dGVzRm4odGhpcy5vcHRpb25zLmlnbm9yZUF0dHJpYnV0ZXMpXG4gIH1cblxufVxuXG5mdW5jdGlvbiBhZGRFeHRlcm5hbEVudGl0aWVzKGV4dGVybmFsRW50aXRpZXMpe1xuICBjb25zdCBlbnRLZXlzID0gT2JqZWN0LmtleXMoZXh0ZXJuYWxFbnRpdGllcyk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZW50S2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGVudCA9IGVudEtleXNbaV07XG4gICAgdGhpcy5sYXN0RW50aXRpZXNbZW50XSA9IHtcbiAgICAgICByZWdleDogbmV3IFJlZ0V4cChcIiZcIitlbnQrXCI7XCIsXCJnXCIpLFxuICAgICAgIHZhbCA6IGV4dGVybmFsRW50aXRpZXNbZW50XVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWxcbiAqIEBwYXJhbSB7c3RyaW5nfSB0YWdOYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30galBhdGhcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gZG9udFRyaW1cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaGFzQXR0cmlidXRlc1xuICogQHBhcmFtIHtib29sZWFufSBpc0xlYWZOb2RlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGVzY2FwZUVudGl0aWVzXG4gKi9cbmZ1bmN0aW9uIHBhcnNlVGV4dERhdGEodmFsLCB0YWdOYW1lLCBqUGF0aCwgZG9udFRyaW0sIGhhc0F0dHJpYnV0ZXMsIGlzTGVhZk5vZGUsIGVzY2FwZUVudGl0aWVzKSB7XG4gIGlmICh2YWwgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMudHJpbVZhbHVlcyAmJiAhZG9udFRyaW0pIHtcbiAgICAgIHZhbCA9IHZhbC50cmltKCk7XG4gICAgfVxuICAgIGlmKHZhbC5sZW5ndGggPiAwKXtcbiAgICAgIGlmKCFlc2NhcGVFbnRpdGllcykgdmFsID0gdGhpcy5yZXBsYWNlRW50aXRpZXNWYWx1ZSh2YWwpO1xuICAgICAgXG4gICAgICBjb25zdCBuZXd2YWwgPSB0aGlzLm9wdGlvbnMudGFnVmFsdWVQcm9jZXNzb3IodGFnTmFtZSwgdmFsLCBqUGF0aCwgaGFzQXR0cmlidXRlcywgaXNMZWFmTm9kZSk7XG4gICAgICBpZihuZXd2YWwgPT09IG51bGwgfHwgbmV3dmFsID09PSB1bmRlZmluZWQpe1xuICAgICAgICAvL2Rvbid0IHBhcnNlXG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgICB9ZWxzZSBpZih0eXBlb2YgbmV3dmFsICE9PSB0eXBlb2YgdmFsIHx8IG5ld3ZhbCAhPT0gdmFsKXtcbiAgICAgICAgLy9vdmVyd3JpdGVcbiAgICAgICAgcmV0dXJuIG5ld3ZhbDtcbiAgICAgIH1lbHNlIGlmKHRoaXMub3B0aW9ucy50cmltVmFsdWVzKXtcbiAgICAgICAgcmV0dXJuIHBhcnNlVmFsdWUodmFsLCB0aGlzLm9wdGlvbnMucGFyc2VUYWdWYWx1ZSwgdGhpcy5vcHRpb25zLm51bWJlclBhcnNlT3B0aW9ucyk7XG4gICAgICB9ZWxzZXtcbiAgICAgICAgY29uc3QgdHJpbW1lZFZhbCA9IHZhbC50cmltKCk7XG4gICAgICAgIGlmKHRyaW1tZWRWYWwgPT09IHZhbCl7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlVmFsdWUodmFsLCB0aGlzLm9wdGlvbnMucGFyc2VUYWdWYWx1ZSwgdGhpcy5vcHRpb25zLm51bWJlclBhcnNlT3B0aW9ucyk7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgIHJldHVybiB2YWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzb2x2ZU5hbWVTcGFjZSh0YWduYW1lKSB7XG4gIGlmICh0aGlzLm9wdGlvbnMucmVtb3ZlTlNQcmVmaXgpIHtcbiAgICBjb25zdCB0YWdzID0gdGFnbmFtZS5zcGxpdCgnOicpO1xuICAgIGNvbnN0IHByZWZpeCA9IHRhZ25hbWUuY2hhckF0KDApID09PSAnLycgPyAnLycgOiAnJztcbiAgICBpZiAodGFnc1swXSA9PT0gJ3htbG5zJykge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBpZiAodGFncy5sZW5ndGggPT09IDIpIHtcbiAgICAgIHRhZ25hbWUgPSBwcmVmaXggKyB0YWdzWzFdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdGFnbmFtZTtcbn1cblxuLy9UT0RPOiBjaGFuZ2UgcmVnZXggdG8gY2FwdHVyZSBOU1xuLy9jb25zdCBhdHRyc1JlZ3ggPSBuZXcgUmVnRXhwKFwiKFtcXFxcd1xcXFwtXFxcXC5cXFxcOl0rKVxcXFxzKj1cXFxccyooWydcXFwiXSkoKC58XFxuKSo/KVxcXFwyXCIsXCJnbVwiKTtcbmNvbnN0IGF0dHJzUmVneCA9IG5ldyBSZWdFeHAoJyhbXlxcXFxzPV0rKVxcXFxzKig9XFxcXHMqKFtcXCdcIl0pKFtcXFxcc1xcXFxTXSo/KVxcXFwzKT8nLCAnZ20nKTtcblxuZnVuY3Rpb24gYnVpbGRBdHRyaWJ1dGVzTWFwKGF0dHJTdHIsIGpQYXRoLCB0YWdOYW1lKSB7XG4gIGlmICh0aGlzLm9wdGlvbnMuaWdub3JlQXR0cmlidXRlcyAhPT0gdHJ1ZSAmJiB0eXBlb2YgYXR0clN0ciA9PT0gJ3N0cmluZycpIHtcbiAgICAvLyBhdHRyU3RyID0gYXR0clN0ci5yZXBsYWNlKC9cXHI/XFxuL2csICcgJyk7XG4gICAgLy9hdHRyU3RyID0gYXR0clN0ciB8fCBhdHRyU3RyLnRyaW0oKTtcblxuICAgIGNvbnN0IG1hdGNoZXMgPSB1dGlsLmdldEFsbE1hdGNoZXMoYXR0clN0ciwgYXR0cnNSZWd4KTtcbiAgICBjb25zdCBsZW4gPSBtYXRjaGVzLmxlbmd0aDsgLy9kb24ndCBtYWtlIGl0IGlubGluZVxuICAgIGNvbnN0IGF0dHJzID0ge307XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgY29uc3QgYXR0ck5hbWUgPSB0aGlzLnJlc29sdmVOYW1lU3BhY2UobWF0Y2hlc1tpXVsxXSk7XG4gICAgICBpZiAodGhpcy5pZ25vcmVBdHRyaWJ1dGVzRm4oYXR0ck5hbWUsIGpQYXRoKSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgbGV0IG9sZFZhbCA9IG1hdGNoZXNbaV1bNF07XG4gICAgICBsZXQgYU5hbWUgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlTmFtZVByZWZpeCArIGF0dHJOYW1lO1xuICAgICAgaWYgKGF0dHJOYW1lLmxlbmd0aCkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnRyYW5zZm9ybUF0dHJpYnV0ZU5hbWUpIHtcbiAgICAgICAgICBhTmFtZSA9IHRoaXMub3B0aW9ucy50cmFuc2Zvcm1BdHRyaWJ1dGVOYW1lKGFOYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBpZihhTmFtZSA9PT0gXCJfX3Byb3RvX19cIikgYU5hbWUgID0gXCIjX19wcm90b19fXCI7XG4gICAgICAgIGlmIChvbGRWYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMudHJpbVZhbHVlcykge1xuICAgICAgICAgICAgb2xkVmFsID0gb2xkVmFsLnRyaW0oKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb2xkVmFsID0gdGhpcy5yZXBsYWNlRW50aXRpZXNWYWx1ZShvbGRWYWwpO1xuICAgICAgICAgIGNvbnN0IG5ld1ZhbCA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVWYWx1ZVByb2Nlc3NvcihhdHRyTmFtZSwgb2xkVmFsLCBqUGF0aCk7XG4gICAgICAgICAgaWYobmV3VmFsID09PSBudWxsIHx8IG5ld1ZhbCA9PT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgIC8vZG9uJ3QgcGFyc2VcbiAgICAgICAgICAgIGF0dHJzW2FOYW1lXSA9IG9sZFZhbDtcbiAgICAgICAgICB9ZWxzZSBpZih0eXBlb2YgbmV3VmFsICE9PSB0eXBlb2Ygb2xkVmFsIHx8IG5ld1ZhbCAhPT0gb2xkVmFsKXtcbiAgICAgICAgICAgIC8vb3ZlcndyaXRlXG4gICAgICAgICAgICBhdHRyc1thTmFtZV0gPSBuZXdWYWw7XG4gICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAvL3BhcnNlXG4gICAgICAgICAgICBhdHRyc1thTmFtZV0gPSBwYXJzZVZhbHVlKFxuICAgICAgICAgICAgICBvbGRWYWwsXG4gICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5wYXJzZUF0dHJpYnV0ZVZhbHVlLFxuICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMubnVtYmVyUGFyc2VPcHRpb25zXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMuYWxsb3dCb29sZWFuQXR0cmlidXRlcykge1xuICAgICAgICAgIGF0dHJzW2FOYW1lXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFPYmplY3Qua2V5cyhhdHRycykubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdGlvbnMuYXR0cmlidXRlc0dyb3VwTmFtZSkge1xuICAgICAgY29uc3QgYXR0ckNvbGxlY3Rpb24gPSB7fTtcbiAgICAgIGF0dHJDb2xsZWN0aW9uW3RoaXMub3B0aW9ucy5hdHRyaWJ1dGVzR3JvdXBOYW1lXSA9IGF0dHJzO1xuICAgICAgcmV0dXJuIGF0dHJDb2xsZWN0aW9uO1xuICAgIH1cbiAgICByZXR1cm4gYXR0cnNcbiAgfVxufVxuXG5jb25zdCBwYXJzZVhtbCA9IGZ1bmN0aW9uKHhtbERhdGEpIHtcbiAgeG1sRGF0YSA9IHhtbERhdGEucmVwbGFjZSgvXFxyXFxuPy9nLCBcIlxcblwiKTsgLy9UT0RPOiByZW1vdmUgdGhpcyBsaW5lXG4gIGNvbnN0IHhtbE9iaiA9IG5ldyB4bWxOb2RlKCcheG1sJyk7XG4gIGxldCBjdXJyZW50Tm9kZSA9IHhtbE9iajtcbiAgbGV0IHRleHREYXRhID0gXCJcIjtcbiAgbGV0IGpQYXRoID0gXCJcIjtcbiAgZm9yKGxldCBpPTA7IGk8IHhtbERhdGEubGVuZ3RoOyBpKyspey8vZm9yIGVhY2ggY2hhciBpbiBYTUwgZGF0YVxuICAgIGNvbnN0IGNoID0geG1sRGF0YVtpXTtcbiAgICBpZihjaCA9PT0gJzwnKXtcbiAgICAgIC8vIGNvbnN0IG5leHRJbmRleCA9IGkrMTtcbiAgICAgIC8vIGNvbnN0IF8ybmRDaGFyID0geG1sRGF0YVtuZXh0SW5kZXhdO1xuICAgICAgaWYoIHhtbERhdGFbaSsxXSA9PT0gJy8nKSB7Ly9DbG9zaW5nIFRhZ1xuICAgICAgICBjb25zdCBjbG9zZUluZGV4ID0gZmluZENsb3NpbmdJbmRleCh4bWxEYXRhLCBcIj5cIiwgaSwgXCJDbG9zaW5nIFRhZyBpcyBub3QgY2xvc2VkLlwiKVxuICAgICAgICBsZXQgdGFnTmFtZSA9IHhtbERhdGEuc3Vic3RyaW5nKGkrMixjbG9zZUluZGV4KS50cmltKCk7XG5cbiAgICAgICAgaWYodGhpcy5vcHRpb25zLnJlbW92ZU5TUHJlZml4KXtcbiAgICAgICAgICBjb25zdCBjb2xvbkluZGV4ID0gdGFnTmFtZS5pbmRleE9mKFwiOlwiKTtcbiAgICAgICAgICBpZihjb2xvbkluZGV4ICE9PSAtMSl7XG4gICAgICAgICAgICB0YWdOYW1lID0gdGFnTmFtZS5zdWJzdHIoY29sb25JbmRleCsxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZih0aGlzLm9wdGlvbnMudHJhbnNmb3JtVGFnTmFtZSkge1xuICAgICAgICAgIHRhZ05hbWUgPSB0aGlzLm9wdGlvbnMudHJhbnNmb3JtVGFnTmFtZSh0YWdOYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKGN1cnJlbnROb2RlKXtcbiAgICAgICAgICB0ZXh0RGF0YSA9IHRoaXMuc2F2ZVRleHRUb1BhcmVudFRhZyh0ZXh0RGF0YSwgY3VycmVudE5vZGUsIGpQYXRoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vY2hlY2sgaWYgbGFzdCB0YWcgb2YgbmVzdGVkIHRhZyB3YXMgdW5wYWlyZWQgdGFnXG4gICAgICAgIGNvbnN0IGxhc3RUYWdOYW1lID0galBhdGguc3Vic3RyaW5nKGpQYXRoLmxhc3RJbmRleE9mKFwiLlwiKSsxKTtcbiAgICAgICAgaWYodGFnTmFtZSAmJiB0aGlzLm9wdGlvbnMudW5wYWlyZWRUYWdzLmluZGV4T2YodGFnTmFtZSkgIT09IC0xICl7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnBhaXJlZCB0YWcgY2FuIG5vdCBiZSB1c2VkIGFzIGNsb3NpbmcgdGFnOiA8LyR7dGFnTmFtZX0+YCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHByb3BJbmRleCA9IDBcbiAgICAgICAgaWYobGFzdFRhZ05hbWUgJiYgdGhpcy5vcHRpb25zLnVucGFpcmVkVGFncy5pbmRleE9mKGxhc3RUYWdOYW1lKSAhPT0gLTEgKXtcbiAgICAgICAgICBwcm9wSW5kZXggPSBqUGF0aC5sYXN0SW5kZXhPZignLicsIGpQYXRoLmxhc3RJbmRleE9mKCcuJyktMSlcbiAgICAgICAgICB0aGlzLnRhZ3NOb2RlU3RhY2sucG9wKCk7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgIHByb3BJbmRleCA9IGpQYXRoLmxhc3RJbmRleE9mKFwiLlwiKTtcbiAgICAgICAgfVxuICAgICAgICBqUGF0aCA9IGpQYXRoLnN1YnN0cmluZygwLCBwcm9wSW5kZXgpO1xuXG4gICAgICAgIGN1cnJlbnROb2RlID0gdGhpcy50YWdzTm9kZVN0YWNrLnBvcCgpOy8vYXZvaWQgcmVjdXJzaW9uLCBzZXQgdGhlIHBhcmVudCB0YWcgc2NvcGVcbiAgICAgICAgdGV4dERhdGEgPSBcIlwiO1xuICAgICAgICBpID0gY2xvc2VJbmRleDtcbiAgICAgIH0gZWxzZSBpZiggeG1sRGF0YVtpKzFdID09PSAnPycpIHtcblxuICAgICAgICBsZXQgdGFnRGF0YSA9IHJlYWRUYWdFeHAoeG1sRGF0YSxpLCBmYWxzZSwgXCI/PlwiKTtcbiAgICAgICAgaWYoIXRhZ0RhdGEpIHRocm93IG5ldyBFcnJvcihcIlBpIFRhZyBpcyBub3QgY2xvc2VkLlwiKTtcblxuICAgICAgICB0ZXh0RGF0YSA9IHRoaXMuc2F2ZVRleHRUb1BhcmVudFRhZyh0ZXh0RGF0YSwgY3VycmVudE5vZGUsIGpQYXRoKTtcbiAgICAgICAgaWYoICh0aGlzLm9wdGlvbnMuaWdub3JlRGVjbGFyYXRpb24gJiYgdGFnRGF0YS50YWdOYW1lID09PSBcIj94bWxcIikgfHwgdGhpcy5vcHRpb25zLmlnbm9yZVBpVGFncyl7XG5cbiAgICAgICAgfWVsc2V7XG4gIFxuICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IG5ldyB4bWxOb2RlKHRhZ0RhdGEudGFnTmFtZSk7XG4gICAgICAgICAgY2hpbGROb2RlLmFkZCh0aGlzLm9wdGlvbnMudGV4dE5vZGVOYW1lLCBcIlwiKTtcbiAgICAgICAgICBcbiAgICAgICAgICBpZih0YWdEYXRhLnRhZ05hbWUgIT09IHRhZ0RhdGEudGFnRXhwICYmIHRhZ0RhdGEuYXR0ckV4cFByZXNlbnQpe1xuICAgICAgICAgICAgY2hpbGROb2RlW1wiOkBcIl0gPSB0aGlzLmJ1aWxkQXR0cmlidXRlc01hcCh0YWdEYXRhLnRhZ0V4cCwgalBhdGgsIHRhZ0RhdGEudGFnTmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuYWRkQ2hpbGQoY3VycmVudE5vZGUsIGNoaWxkTm9kZSwgalBhdGgpXG5cbiAgICAgICAgfVxuXG5cbiAgICAgICAgaSA9IHRhZ0RhdGEuY2xvc2VJbmRleCArIDE7XG4gICAgICB9IGVsc2UgaWYoeG1sRGF0YS5zdWJzdHIoaSArIDEsIDMpID09PSAnIS0tJykge1xuICAgICAgICBjb25zdCBlbmRJbmRleCA9IGZpbmRDbG9zaW5nSW5kZXgoeG1sRGF0YSwgXCItLT5cIiwgaSs0LCBcIkNvbW1lbnQgaXMgbm90IGNsb3NlZC5cIilcbiAgICAgICAgaWYodGhpcy5vcHRpb25zLmNvbW1lbnRQcm9wTmFtZSl7XG4gICAgICAgICAgY29uc3QgY29tbWVudCA9IHhtbERhdGEuc3Vic3RyaW5nKGkgKyA0LCBlbmRJbmRleCAtIDIpO1xuXG4gICAgICAgICAgdGV4dERhdGEgPSB0aGlzLnNhdmVUZXh0VG9QYXJlbnRUYWcodGV4dERhdGEsIGN1cnJlbnROb2RlLCBqUGF0aCk7XG5cbiAgICAgICAgICBjdXJyZW50Tm9kZS5hZGQodGhpcy5vcHRpb25zLmNvbW1lbnRQcm9wTmFtZSwgWyB7IFt0aGlzLm9wdGlvbnMudGV4dE5vZGVOYW1lXSA6IGNvbW1lbnQgfSBdKTtcbiAgICAgICAgfVxuICAgICAgICBpID0gZW5kSW5kZXg7XG4gICAgICB9IGVsc2UgaWYoIHhtbERhdGEuc3Vic3RyKGkgKyAxLCAyKSA9PT0gJyFEJykge1xuICAgICAgICBjb25zdCByZXN1bHQgPSByZWFkRG9jVHlwZSh4bWxEYXRhLCBpKTtcbiAgICAgICAgdGhpcy5kb2NUeXBlRW50aXRpZXMgPSByZXN1bHQuZW50aXRpZXM7XG4gICAgICAgIGkgPSByZXN1bHQuaTtcbiAgICAgIH1lbHNlIGlmKHhtbERhdGEuc3Vic3RyKGkgKyAxLCAyKSA9PT0gJyFbJykge1xuICAgICAgICBjb25zdCBjbG9zZUluZGV4ID0gZmluZENsb3NpbmdJbmRleCh4bWxEYXRhLCBcIl1dPlwiLCBpLCBcIkNEQVRBIGlzIG5vdCBjbG9zZWQuXCIpIC0gMjtcbiAgICAgICAgY29uc3QgdGFnRXhwID0geG1sRGF0YS5zdWJzdHJpbmcoaSArIDksY2xvc2VJbmRleCk7XG5cbiAgICAgICAgdGV4dERhdGEgPSB0aGlzLnNhdmVUZXh0VG9QYXJlbnRUYWcodGV4dERhdGEsIGN1cnJlbnROb2RlLCBqUGF0aCk7XG5cbiAgICAgICAgbGV0IHZhbCA9IHRoaXMucGFyc2VUZXh0RGF0YSh0YWdFeHAsIGN1cnJlbnROb2RlLnRhZ25hbWUsIGpQYXRoLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgIGlmKHZhbCA9PSB1bmRlZmluZWQpIHZhbCA9IFwiXCI7XG5cbiAgICAgICAgLy9jZGF0YSBzaG91bGQgYmUgc2V0IGV2ZW4gaWYgaXQgaXMgMCBsZW5ndGggc3RyaW5nXG4gICAgICAgIGlmKHRoaXMub3B0aW9ucy5jZGF0YVByb3BOYW1lKXtcbiAgICAgICAgICBjdXJyZW50Tm9kZS5hZGQodGhpcy5vcHRpb25zLmNkYXRhUHJvcE5hbWUsIFsgeyBbdGhpcy5vcHRpb25zLnRleHROb2RlTmFtZV0gOiB0YWdFeHAgfSBdKTtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgY3VycmVudE5vZGUuYWRkKHRoaXMub3B0aW9ucy50ZXh0Tm9kZU5hbWUsIHZhbCk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGkgPSBjbG9zZUluZGV4ICsgMjtcbiAgICAgIH1lbHNlIHsvL09wZW5pbmcgdGFnXG4gICAgICAgIGxldCByZXN1bHQgPSByZWFkVGFnRXhwKHhtbERhdGEsaSwgdGhpcy5vcHRpb25zLnJlbW92ZU5TUHJlZml4KTtcbiAgICAgICAgbGV0IHRhZ05hbWU9IHJlc3VsdC50YWdOYW1lO1xuICAgICAgICBjb25zdCByYXdUYWdOYW1lID0gcmVzdWx0LnJhd1RhZ05hbWU7XG4gICAgICAgIGxldCB0YWdFeHAgPSByZXN1bHQudGFnRXhwO1xuICAgICAgICBsZXQgYXR0ckV4cFByZXNlbnQgPSByZXN1bHQuYXR0ckV4cFByZXNlbnQ7XG4gICAgICAgIGxldCBjbG9zZUluZGV4ID0gcmVzdWx0LmNsb3NlSW5kZXg7XG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy50cmFuc2Zvcm1UYWdOYW1lKSB7XG4gICAgICAgICAgdGFnTmFtZSA9IHRoaXMub3B0aW9ucy50cmFuc2Zvcm1UYWdOYW1lKHRhZ05hbWUpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvL3NhdmUgdGV4dCBhcyBjaGlsZCBub2RlXG4gICAgICAgIGlmIChjdXJyZW50Tm9kZSAmJiB0ZXh0RGF0YSkge1xuICAgICAgICAgIGlmKGN1cnJlbnROb2RlLnRhZ25hbWUgIT09ICcheG1sJyl7XG4gICAgICAgICAgICAvL3doZW4gbmVzdGVkIHRhZyBpcyBmb3VuZFxuICAgICAgICAgICAgdGV4dERhdGEgPSB0aGlzLnNhdmVUZXh0VG9QYXJlbnRUYWcodGV4dERhdGEsIGN1cnJlbnROb2RlLCBqUGF0aCwgZmFsc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vY2hlY2sgaWYgbGFzdCB0YWcgd2FzIHVucGFpcmVkIHRhZ1xuICAgICAgICBjb25zdCBsYXN0VGFnID0gY3VycmVudE5vZGU7XG4gICAgICAgIGlmKGxhc3RUYWcgJiYgdGhpcy5vcHRpb25zLnVucGFpcmVkVGFncy5pbmRleE9mKGxhc3RUYWcudGFnbmFtZSkgIT09IC0xICl7XG4gICAgICAgICAgY3VycmVudE5vZGUgPSB0aGlzLnRhZ3NOb2RlU3RhY2sucG9wKCk7XG4gICAgICAgICAgalBhdGggPSBqUGF0aC5zdWJzdHJpbmcoMCwgalBhdGgubGFzdEluZGV4T2YoXCIuXCIpKTtcbiAgICAgICAgfVxuICAgICAgICBpZih0YWdOYW1lICE9PSB4bWxPYmoudGFnbmFtZSl7XG4gICAgICAgICAgalBhdGggKz0galBhdGggPyBcIi5cIiArIHRhZ05hbWUgOiB0YWdOYW1lO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzSXRTdG9wTm9kZSh0aGlzLm9wdGlvbnMuc3RvcE5vZGVzLCBqUGF0aCwgdGFnTmFtZSkpIHtcbiAgICAgICAgICBsZXQgdGFnQ29udGVudCA9IFwiXCI7XG4gICAgICAgICAgLy9zZWxmLWNsb3NpbmcgdGFnXG4gICAgICAgICAgaWYodGFnRXhwLmxlbmd0aCA+IDAgJiYgdGFnRXhwLmxhc3RJbmRleE9mKFwiL1wiKSA9PT0gdGFnRXhwLmxlbmd0aCAtIDEpe1xuICAgICAgICAgICAgaWYodGFnTmFtZVt0YWdOYW1lLmxlbmd0aCAtIDFdID09PSBcIi9cIil7IC8vcmVtb3ZlIHRyYWlsaW5nICcvJ1xuICAgICAgICAgICAgICB0YWdOYW1lID0gdGFnTmFtZS5zdWJzdHIoMCwgdGFnTmFtZS5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgICAgalBhdGggPSBqUGF0aC5zdWJzdHIoMCwgalBhdGgubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAgIHRhZ0V4cCA9IHRhZ05hbWU7XG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgdGFnRXhwID0gdGFnRXhwLnN1YnN0cigwLCB0YWdFeHAubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpID0gcmVzdWx0LmNsb3NlSW5kZXg7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vdW5wYWlyZWQgdGFnXG4gICAgICAgICAgZWxzZSBpZih0aGlzLm9wdGlvbnMudW5wYWlyZWRUYWdzLmluZGV4T2YodGFnTmFtZSkgIT09IC0xKXtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaSA9IHJlc3VsdC5jbG9zZUluZGV4O1xuICAgICAgICAgIH1cbiAgICAgICAgICAvL25vcm1hbCB0YWdcbiAgICAgICAgICBlbHNle1xuICAgICAgICAgICAgLy9yZWFkIHVudGlsIGNsb3NpbmcgdGFnIGlzIGZvdW5kXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLnJlYWRTdG9wTm9kZURhdGEoeG1sRGF0YSwgcmF3VGFnTmFtZSwgY2xvc2VJbmRleCArIDEpO1xuICAgICAgICAgICAgaWYoIXJlc3VsdCkgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIGVuZCBvZiAke3Jhd1RhZ05hbWV9YCk7XG4gICAgICAgICAgICBpID0gcmVzdWx0Lmk7XG4gICAgICAgICAgICB0YWdDb250ZW50ID0gcmVzdWx0LnRhZ0NvbnRlbnQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgY2hpbGROb2RlID0gbmV3IHhtbE5vZGUodGFnTmFtZSk7XG4gICAgICAgICAgaWYodGFnTmFtZSAhPT0gdGFnRXhwICYmIGF0dHJFeHBQcmVzZW50KXtcbiAgICAgICAgICAgIGNoaWxkTm9kZVtcIjpAXCJdID0gdGhpcy5idWlsZEF0dHJpYnV0ZXNNYXAodGFnRXhwLCBqUGF0aCwgdGFnTmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmKHRhZ0NvbnRlbnQpIHtcbiAgICAgICAgICAgIHRhZ0NvbnRlbnQgPSB0aGlzLnBhcnNlVGV4dERhdGEodGFnQ29udGVudCwgdGFnTmFtZSwgalBhdGgsIHRydWUsIGF0dHJFeHBQcmVzZW50LCB0cnVlLCB0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgalBhdGggPSBqUGF0aC5zdWJzdHIoMCwgalBhdGgubGFzdEluZGV4T2YoXCIuXCIpKTtcbiAgICAgICAgICBjaGlsZE5vZGUuYWRkKHRoaXMub3B0aW9ucy50ZXh0Tm9kZU5hbWUsIHRhZ0NvbnRlbnQpO1xuICAgICAgICAgIFxuICAgICAgICAgIHRoaXMuYWRkQ2hpbGQoY3VycmVudE5vZGUsIGNoaWxkTm9kZSwgalBhdGgpXG4gICAgICAgIH1lbHNle1xuICAvL3NlbGZDbG9zaW5nIHRhZ1xuICAgICAgICAgIGlmKHRhZ0V4cC5sZW5ndGggPiAwICYmIHRhZ0V4cC5sYXN0SW5kZXhPZihcIi9cIikgPT09IHRhZ0V4cC5sZW5ndGggLSAxKXtcbiAgICAgICAgICAgIGlmKHRhZ05hbWVbdGFnTmFtZS5sZW5ndGggLSAxXSA9PT0gXCIvXCIpeyAvL3JlbW92ZSB0cmFpbGluZyAnLydcbiAgICAgICAgICAgICAgdGFnTmFtZSA9IHRhZ05hbWUuc3Vic3RyKDAsIHRhZ05hbWUubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAgIGpQYXRoID0galBhdGguc3Vic3RyKDAsIGpQYXRoLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgICB0YWdFeHAgPSB0YWdOYW1lO1xuICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgIHRhZ0V4cCA9IHRhZ0V4cC5zdWJzdHIoMCwgdGFnRXhwLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZih0aGlzLm9wdGlvbnMudHJhbnNmb3JtVGFnTmFtZSkge1xuICAgICAgICAgICAgICB0YWdOYW1lID0gdGhpcy5vcHRpb25zLnRyYW5zZm9ybVRhZ05hbWUodGFnTmFtZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IG5ldyB4bWxOb2RlKHRhZ05hbWUpO1xuICAgICAgICAgICAgaWYodGFnTmFtZSAhPT0gdGFnRXhwICYmIGF0dHJFeHBQcmVzZW50KXtcbiAgICAgICAgICAgICAgY2hpbGROb2RlW1wiOkBcIl0gPSB0aGlzLmJ1aWxkQXR0cmlidXRlc01hcCh0YWdFeHAsIGpQYXRoLCB0YWdOYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYWRkQ2hpbGQoY3VycmVudE5vZGUsIGNoaWxkTm9kZSwgalBhdGgpXG4gICAgICAgICAgICBqUGF0aCA9IGpQYXRoLnN1YnN0cigwLCBqUGF0aC5sYXN0SW5kZXhPZihcIi5cIikpO1xuICAgICAgICAgIH1cbiAgICAvL29wZW5pbmcgdGFnXG4gICAgICAgICAgZWxzZXtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IG5ldyB4bWxOb2RlKCB0YWdOYW1lKTtcbiAgICAgICAgICAgIHRoaXMudGFnc05vZGVTdGFjay5wdXNoKGN1cnJlbnROb2RlKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYodGFnTmFtZSAhPT0gdGFnRXhwICYmIGF0dHJFeHBQcmVzZW50KXtcbiAgICAgICAgICAgICAgY2hpbGROb2RlW1wiOkBcIl0gPSB0aGlzLmJ1aWxkQXR0cmlidXRlc01hcCh0YWdFeHAsIGpQYXRoLCB0YWdOYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYWRkQ2hpbGQoY3VycmVudE5vZGUsIGNoaWxkTm9kZSwgalBhdGgpXG4gICAgICAgICAgICBjdXJyZW50Tm9kZSA9IGNoaWxkTm9kZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGV4dERhdGEgPSBcIlwiO1xuICAgICAgICAgIGkgPSBjbG9zZUluZGV4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfWVsc2V7XG4gICAgICB0ZXh0RGF0YSArPSB4bWxEYXRhW2ldO1xuICAgIH1cbiAgfVxuICByZXR1cm4geG1sT2JqLmNoaWxkO1xufVxuXG5mdW5jdGlvbiBhZGRDaGlsZChjdXJyZW50Tm9kZSwgY2hpbGROb2RlLCBqUGF0aCl7XG4gIGNvbnN0IHJlc3VsdCA9IHRoaXMub3B0aW9ucy51cGRhdGVUYWcoY2hpbGROb2RlLnRhZ25hbWUsIGpQYXRoLCBjaGlsZE5vZGVbXCI6QFwiXSlcbiAgaWYocmVzdWx0ID09PSBmYWxzZSl7XG4gIH1lbHNlIGlmKHR5cGVvZiByZXN1bHQgPT09IFwic3RyaW5nXCIpe1xuICAgIGNoaWxkTm9kZS50YWduYW1lID0gcmVzdWx0XG4gICAgY3VycmVudE5vZGUuYWRkQ2hpbGQoY2hpbGROb2RlKTtcbiAgfWVsc2V7XG4gICAgY3VycmVudE5vZGUuYWRkQ2hpbGQoY2hpbGROb2RlKTtcbiAgfVxufVxuXG5jb25zdCByZXBsYWNlRW50aXRpZXNWYWx1ZSA9IGZ1bmN0aW9uKHZhbCl7XG5cbiAgaWYodGhpcy5vcHRpb25zLnByb2Nlc3NFbnRpdGllcyl7XG4gICAgZm9yKGxldCBlbnRpdHlOYW1lIGluIHRoaXMuZG9jVHlwZUVudGl0aWVzKXtcbiAgICAgIGNvbnN0IGVudGl0eSA9IHRoaXMuZG9jVHlwZUVudGl0aWVzW2VudGl0eU5hbWVdO1xuICAgICAgdmFsID0gdmFsLnJlcGxhY2UoIGVudGl0eS5yZWd4LCBlbnRpdHkudmFsKTtcbiAgICB9XG4gICAgZm9yKGxldCBlbnRpdHlOYW1lIGluIHRoaXMubGFzdEVudGl0aWVzKXtcbiAgICAgIGNvbnN0IGVudGl0eSA9IHRoaXMubGFzdEVudGl0aWVzW2VudGl0eU5hbWVdO1xuICAgICAgdmFsID0gdmFsLnJlcGxhY2UoIGVudGl0eS5yZWdleCwgZW50aXR5LnZhbCk7XG4gICAgfVxuICAgIGlmKHRoaXMub3B0aW9ucy5odG1sRW50aXRpZXMpe1xuICAgICAgZm9yKGxldCBlbnRpdHlOYW1lIGluIHRoaXMuaHRtbEVudGl0aWVzKXtcbiAgICAgICAgY29uc3QgZW50aXR5ID0gdGhpcy5odG1sRW50aXRpZXNbZW50aXR5TmFtZV07XG4gICAgICAgIHZhbCA9IHZhbC5yZXBsYWNlKCBlbnRpdHkucmVnZXgsIGVudGl0eS52YWwpO1xuICAgICAgfVxuICAgIH1cbiAgICB2YWwgPSB2YWwucmVwbGFjZSggdGhpcy5hbXBFbnRpdHkucmVnZXgsIHRoaXMuYW1wRW50aXR5LnZhbCk7XG4gIH1cbiAgcmV0dXJuIHZhbDtcbn1cbmZ1bmN0aW9uIHNhdmVUZXh0VG9QYXJlbnRUYWcodGV4dERhdGEsIGN1cnJlbnROb2RlLCBqUGF0aCwgaXNMZWFmTm9kZSkge1xuICBpZiAodGV4dERhdGEpIHsgLy9zdG9yZSBwcmV2aW91c2x5IGNvbGxlY3RlZCBkYXRhIGFzIHRleHROb2RlXG4gICAgaWYoaXNMZWFmTm9kZSA9PT0gdW5kZWZpbmVkKSBpc0xlYWZOb2RlID0gT2JqZWN0LmtleXMoY3VycmVudE5vZGUuY2hpbGQpLmxlbmd0aCA9PT0gMFxuICAgIFxuICAgIHRleHREYXRhID0gdGhpcy5wYXJzZVRleHREYXRhKHRleHREYXRhLFxuICAgICAgY3VycmVudE5vZGUudGFnbmFtZSxcbiAgICAgIGpQYXRoLFxuICAgICAgZmFsc2UsXG4gICAgICBjdXJyZW50Tm9kZVtcIjpAXCJdID8gT2JqZWN0LmtleXMoY3VycmVudE5vZGVbXCI6QFwiXSkubGVuZ3RoICE9PSAwIDogZmFsc2UsXG4gICAgICBpc0xlYWZOb2RlKTtcblxuICAgIGlmICh0ZXh0RGF0YSAhPT0gdW5kZWZpbmVkICYmIHRleHREYXRhICE9PSBcIlwiKVxuICAgICAgY3VycmVudE5vZGUuYWRkKHRoaXMub3B0aW9ucy50ZXh0Tm9kZU5hbWUsIHRleHREYXRhKTtcbiAgICB0ZXh0RGF0YSA9IFwiXCI7XG4gIH1cbiAgcmV0dXJuIHRleHREYXRhO1xufVxuXG4vL1RPRE86IHVzZSBqUGF0aCB0byBzaW1wbGlmeSB0aGUgbG9naWNcbi8qKlxuICogXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBzdG9wTm9kZXMgXG4gKiBAcGFyYW0ge3N0cmluZ30galBhdGhcbiAqIEBwYXJhbSB7c3RyaW5nfSBjdXJyZW50VGFnTmFtZSBcbiAqL1xuZnVuY3Rpb24gaXNJdFN0b3BOb2RlKHN0b3BOb2RlcywgalBhdGgsIGN1cnJlbnRUYWdOYW1lKXtcbiAgY29uc3QgYWxsTm9kZXNFeHAgPSBcIiouXCIgKyBjdXJyZW50VGFnTmFtZTtcbiAgZm9yIChjb25zdCBzdG9wTm9kZVBhdGggaW4gc3RvcE5vZGVzKSB7XG4gICAgY29uc3Qgc3RvcE5vZGVFeHAgPSBzdG9wTm9kZXNbc3RvcE5vZGVQYXRoXTtcbiAgICBpZiggYWxsTm9kZXNFeHAgPT09IHN0b3BOb2RlRXhwIHx8IGpQYXRoID09PSBzdG9wTm9kZUV4cCAgKSByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgdGFnIEV4cHJlc3Npb24gYW5kIHdoZXJlIGl0IGlzIGVuZGluZyBoYW5kbGluZyBzaW5nbGUtZG91YmxlIHF1b3RlcyBzaXR1YXRpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSB4bWxEYXRhIFxuICogQHBhcmFtIHtudW1iZXJ9IGkgc3RhcnRpbmcgaW5kZXhcbiAqIEByZXR1cm5zIFxuICovXG5mdW5jdGlvbiB0YWdFeHBXaXRoQ2xvc2luZ0luZGV4KHhtbERhdGEsIGksIGNsb3NpbmdDaGFyID0gXCI+XCIpe1xuICBsZXQgYXR0ckJvdW5kYXJ5O1xuICBsZXQgdGFnRXhwID0gXCJcIjtcbiAgZm9yIChsZXQgaW5kZXggPSBpOyBpbmRleCA8IHhtbERhdGEubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgbGV0IGNoID0geG1sRGF0YVtpbmRleF07XG4gICAgaWYgKGF0dHJCb3VuZGFyeSkge1xuICAgICAgICBpZiAoY2ggPT09IGF0dHJCb3VuZGFyeSkgYXR0ckJvdW5kYXJ5ID0gXCJcIjsvL3Jlc2V0XG4gICAgfSBlbHNlIGlmIChjaCA9PT0gJ1wiJyB8fCBjaCA9PT0gXCInXCIpIHtcbiAgICAgICAgYXR0ckJvdW5kYXJ5ID0gY2g7XG4gICAgfSBlbHNlIGlmIChjaCA9PT0gY2xvc2luZ0NoYXJbMF0pIHtcbiAgICAgIGlmKGNsb3NpbmdDaGFyWzFdKXtcbiAgICAgICAgaWYoeG1sRGF0YVtpbmRleCArIDFdID09PSBjbG9zaW5nQ2hhclsxXSl7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRhdGE6IHRhZ0V4cCxcbiAgICAgICAgICAgIGluZGV4OiBpbmRleFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfWVsc2V7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGF0YTogdGFnRXhwLFxuICAgICAgICAgIGluZGV4OiBpbmRleFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjaCA9PT0gJ1xcdCcpIHtcbiAgICAgIGNoID0gXCIgXCJcbiAgICB9XG4gICAgdGFnRXhwICs9IGNoO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmRDbG9zaW5nSW5kZXgoeG1sRGF0YSwgc3RyLCBpLCBlcnJNc2cpe1xuICBjb25zdCBjbG9zaW5nSW5kZXggPSB4bWxEYXRhLmluZGV4T2Yoc3RyLCBpKTtcbiAgaWYoY2xvc2luZ0luZGV4ID09PSAtMSl7XG4gICAgdGhyb3cgbmV3IEVycm9yKGVyck1zZylcbiAgfWVsc2V7XG4gICAgcmV0dXJuIGNsb3NpbmdJbmRleCArIHN0ci5sZW5ndGggLSAxO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlYWRUYWdFeHAoeG1sRGF0YSxpLCByZW1vdmVOU1ByZWZpeCwgY2xvc2luZ0NoYXIgPSBcIj5cIil7XG4gIGNvbnN0IHJlc3VsdCA9IHRhZ0V4cFdpdGhDbG9zaW5nSW5kZXgoeG1sRGF0YSwgaSsxLCBjbG9zaW5nQ2hhcik7XG4gIGlmKCFyZXN1bHQpIHJldHVybjtcbiAgbGV0IHRhZ0V4cCA9IHJlc3VsdC5kYXRhO1xuICBjb25zdCBjbG9zZUluZGV4ID0gcmVzdWx0LmluZGV4O1xuICBjb25zdCBzZXBhcmF0b3JJbmRleCA9IHRhZ0V4cC5zZWFyY2goL1xccy8pO1xuICBsZXQgdGFnTmFtZSA9IHRhZ0V4cDtcbiAgbGV0IGF0dHJFeHBQcmVzZW50ID0gdHJ1ZTtcbiAgaWYoc2VwYXJhdG9ySW5kZXggIT09IC0xKXsvL3NlcGFyYXRlIHRhZyBuYW1lIGFuZCBhdHRyaWJ1dGVzIGV4cHJlc3Npb25cbiAgICB0YWdOYW1lID0gdGFnRXhwLnN1YnN0cmluZygwLCBzZXBhcmF0b3JJbmRleCk7XG4gICAgdGFnRXhwID0gdGFnRXhwLnN1YnN0cmluZyhzZXBhcmF0b3JJbmRleCArIDEpLnRyaW1TdGFydCgpO1xuICB9XG5cbiAgY29uc3QgcmF3VGFnTmFtZSA9IHRhZ05hbWU7XG4gIGlmKHJlbW92ZU5TUHJlZml4KXtcbiAgICBjb25zdCBjb2xvbkluZGV4ID0gdGFnTmFtZS5pbmRleE9mKFwiOlwiKTtcbiAgICBpZihjb2xvbkluZGV4ICE9PSAtMSl7XG4gICAgICB0YWdOYW1lID0gdGFnTmFtZS5zdWJzdHIoY29sb25JbmRleCsxKTtcbiAgICAgIGF0dHJFeHBQcmVzZW50ID0gdGFnTmFtZSAhPT0gcmVzdWx0LmRhdGEuc3Vic3RyKGNvbG9uSW5kZXggKyAxKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHRhZ05hbWU6IHRhZ05hbWUsXG4gICAgdGFnRXhwOiB0YWdFeHAsXG4gICAgY2xvc2VJbmRleDogY2xvc2VJbmRleCxcbiAgICBhdHRyRXhwUHJlc2VudDogYXR0ckV4cFByZXNlbnQsXG4gICAgcmF3VGFnTmFtZTogcmF3VGFnTmFtZSxcbiAgfVxufVxuLyoqXG4gKiBmaW5kIHBhaXJlZCB0YWcgZm9yIGEgc3RvcCBub2RlXG4gKiBAcGFyYW0ge3N0cmluZ30geG1sRGF0YSBcbiAqIEBwYXJhbSB7c3RyaW5nfSB0YWdOYW1lIFxuICogQHBhcmFtIHtudW1iZXJ9IGkgXG4gKi9cbmZ1bmN0aW9uIHJlYWRTdG9wTm9kZURhdGEoeG1sRGF0YSwgdGFnTmFtZSwgaSl7XG4gIGNvbnN0IHN0YXJ0SW5kZXggPSBpO1xuICAvLyBTdGFydGluZyBhdCAxIHNpbmNlIHdlIGFscmVhZHkgaGF2ZSBhbiBvcGVuIHRhZ1xuICBsZXQgb3BlblRhZ0NvdW50ID0gMTtcblxuICBmb3IgKDsgaSA8IHhtbERhdGEubGVuZ3RoOyBpKyspIHtcbiAgICBpZiggeG1sRGF0YVtpXSA9PT0gXCI8XCIpeyBcbiAgICAgIGlmICh4bWxEYXRhW2krMV0gPT09IFwiL1wiKSB7Ly9jbG9zZSB0YWdcbiAgICAgICAgICBjb25zdCBjbG9zZUluZGV4ID0gZmluZENsb3NpbmdJbmRleCh4bWxEYXRhLCBcIj5cIiwgaSwgYCR7dGFnTmFtZX0gaXMgbm90IGNsb3NlZGApO1xuICAgICAgICAgIGxldCBjbG9zZVRhZ05hbWUgPSB4bWxEYXRhLnN1YnN0cmluZyhpKzIsY2xvc2VJbmRleCkudHJpbSgpO1xuICAgICAgICAgIGlmKGNsb3NlVGFnTmFtZSA9PT0gdGFnTmFtZSl7XG4gICAgICAgICAgICBvcGVuVGFnQ291bnQtLTtcbiAgICAgICAgICAgIGlmIChvcGVuVGFnQ291bnQgPT09IDApIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0YWdDb250ZW50OiB4bWxEYXRhLnN1YnN0cmluZyhzdGFydEluZGV4LCBpKSxcbiAgICAgICAgICAgICAgICBpIDogY2xvc2VJbmRleFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGk9Y2xvc2VJbmRleDtcbiAgICAgICAgfSBlbHNlIGlmKHhtbERhdGFbaSsxXSA9PT0gJz8nKSB7IFxuICAgICAgICAgIGNvbnN0IGNsb3NlSW5kZXggPSBmaW5kQ2xvc2luZ0luZGV4KHhtbERhdGEsIFwiPz5cIiwgaSsxLCBcIlN0b3BOb2RlIGlzIG5vdCBjbG9zZWQuXCIpXG4gICAgICAgICAgaT1jbG9zZUluZGV4O1xuICAgICAgICB9IGVsc2UgaWYoeG1sRGF0YS5zdWJzdHIoaSArIDEsIDMpID09PSAnIS0tJykgeyBcbiAgICAgICAgICBjb25zdCBjbG9zZUluZGV4ID0gZmluZENsb3NpbmdJbmRleCh4bWxEYXRhLCBcIi0tPlwiLCBpKzMsIFwiU3RvcE5vZGUgaXMgbm90IGNsb3NlZC5cIilcbiAgICAgICAgICBpPWNsb3NlSW5kZXg7XG4gICAgICAgIH0gZWxzZSBpZih4bWxEYXRhLnN1YnN0cihpICsgMSwgMikgPT09ICchWycpIHsgXG4gICAgICAgICAgY29uc3QgY2xvc2VJbmRleCA9IGZpbmRDbG9zaW5nSW5kZXgoeG1sRGF0YSwgXCJdXT5cIiwgaSwgXCJTdG9wTm9kZSBpcyBub3QgY2xvc2VkLlwiKSAtIDI7XG4gICAgICAgICAgaT1jbG9zZUluZGV4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHRhZ0RhdGEgPSByZWFkVGFnRXhwKHhtbERhdGEsIGksICc+JylcblxuICAgICAgICAgIGlmICh0YWdEYXRhKSB7XG4gICAgICAgICAgICBjb25zdCBvcGVuVGFnTmFtZSA9IHRhZ0RhdGEgJiYgdGFnRGF0YS50YWdOYW1lO1xuICAgICAgICAgICAgaWYgKG9wZW5UYWdOYW1lID09PSB0YWdOYW1lICYmIHRhZ0RhdGEudGFnRXhwW3RhZ0RhdGEudGFnRXhwLmxlbmd0aC0xXSAhPT0gXCIvXCIpIHtcbiAgICAgICAgICAgICAgb3BlblRhZ0NvdW50Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpPXRhZ0RhdGEuY2xvc2VJbmRleDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgfS8vZW5kIGZvciBsb29wXG59XG5cbmZ1bmN0aW9uIHBhcnNlVmFsdWUodmFsLCBzaG91bGRQYXJzZSwgb3B0aW9ucykge1xuICBpZiAoc2hvdWxkUGFyc2UgJiYgdHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICAvL2NvbnNvbGUubG9nKG9wdGlvbnMpXG4gICAgY29uc3QgbmV3dmFsID0gdmFsLnRyaW0oKTtcbiAgICBpZihuZXd2YWwgPT09ICd0cnVlJyApIHJldHVybiB0cnVlO1xuICAgIGVsc2UgaWYobmV3dmFsID09PSAnZmFsc2UnICkgcmV0dXJuIGZhbHNlO1xuICAgIGVsc2UgcmV0dXJuIHRvTnVtYmVyKHZhbCwgb3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHV0aWwuaXNFeGlzdCh2YWwpKSB7XG4gICAgICByZXR1cm4gdmFsO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG59XG5cblxubW9kdWxlLmV4cG9ydHMgPSBPcmRlcmVkT2JqUGFyc2VyO1xuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogXG4gKiBAcGFyYW0ge2FycmF5fSBub2RlIFxuICogQHBhcmFtIHthbnl9IG9wdGlvbnMgXG4gKiBAcmV0dXJucyBcbiAqL1xuZnVuY3Rpb24gcHJldHRpZnkobm9kZSwgb3B0aW9ucyl7XG4gIHJldHVybiBjb21wcmVzcyggbm9kZSwgb3B0aW9ucyk7XG59XG5cbi8qKlxuICogXG4gKiBAcGFyYW0ge2FycmF5fSBhcnIgXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyBcbiAqIEBwYXJhbSB7c3RyaW5nfSBqUGF0aCBcbiAqIEByZXR1cm5zIG9iamVjdFxuICovXG5mdW5jdGlvbiBjb21wcmVzcyhhcnIsIG9wdGlvbnMsIGpQYXRoKXtcbiAgbGV0IHRleHQ7XG4gIGNvbnN0IGNvbXByZXNzZWRPYmogPSB7fTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCB0YWdPYmogPSBhcnJbaV07XG4gICAgY29uc3QgcHJvcGVydHkgPSBwcm9wTmFtZSh0YWdPYmopO1xuICAgIGxldCBuZXdKcGF0aCA9IFwiXCI7XG4gICAgaWYoalBhdGggPT09IHVuZGVmaW5lZCkgbmV3SnBhdGggPSBwcm9wZXJ0eTtcbiAgICBlbHNlIG5ld0pwYXRoID0galBhdGggKyBcIi5cIiArIHByb3BlcnR5O1xuXG4gICAgaWYocHJvcGVydHkgPT09IG9wdGlvbnMudGV4dE5vZGVOYW1lKXtcbiAgICAgIGlmKHRleHQgPT09IHVuZGVmaW5lZCkgdGV4dCA9IHRhZ09ialtwcm9wZXJ0eV07XG4gICAgICBlbHNlIHRleHQgKz0gXCJcIiArIHRhZ09ialtwcm9wZXJ0eV07XG4gICAgfWVsc2UgaWYocHJvcGVydHkgPT09IHVuZGVmaW5lZCl7XG4gICAgICBjb250aW51ZTtcbiAgICB9ZWxzZSBpZih0YWdPYmpbcHJvcGVydHldKXtcbiAgICAgIFxuICAgICAgbGV0IHZhbCA9IGNvbXByZXNzKHRhZ09ialtwcm9wZXJ0eV0sIG9wdGlvbnMsIG5ld0pwYXRoKTtcbiAgICAgIGNvbnN0IGlzTGVhZiA9IGlzTGVhZlRhZyh2YWwsIG9wdGlvbnMpO1xuXG4gICAgICBpZih0YWdPYmpbXCI6QFwiXSl7XG4gICAgICAgIGFzc2lnbkF0dHJpYnV0ZXMoIHZhbCwgdGFnT2JqW1wiOkBcIl0sIG5ld0pwYXRoLCBvcHRpb25zKTtcbiAgICAgIH1lbHNlIGlmKE9iamVjdC5rZXlzKHZhbCkubGVuZ3RoID09PSAxICYmIHZhbFtvcHRpb25zLnRleHROb2RlTmFtZV0gIT09IHVuZGVmaW5lZCAmJiAhb3B0aW9ucy5hbHdheXNDcmVhdGVUZXh0Tm9kZSl7XG4gICAgICAgIHZhbCA9IHZhbFtvcHRpb25zLnRleHROb2RlTmFtZV07XG4gICAgICB9ZWxzZSBpZihPYmplY3Qua2V5cyh2YWwpLmxlbmd0aCA9PT0gMCl7XG4gICAgICAgIGlmKG9wdGlvbnMuYWx3YXlzQ3JlYXRlVGV4dE5vZGUpIHZhbFtvcHRpb25zLnRleHROb2RlTmFtZV0gPSBcIlwiO1xuICAgICAgICBlbHNlIHZhbCA9IFwiXCI7XG4gICAgICB9XG5cbiAgICAgIGlmKGNvbXByZXNzZWRPYmpbcHJvcGVydHldICE9PSB1bmRlZmluZWQgJiYgY29tcHJlc3NlZE9iai5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpIHtcbiAgICAgICAgaWYoIUFycmF5LmlzQXJyYXkoY29tcHJlc3NlZE9ialtwcm9wZXJ0eV0pKSB7XG4gICAgICAgICAgICBjb21wcmVzc2VkT2JqW3Byb3BlcnR5XSA9IFsgY29tcHJlc3NlZE9ialtwcm9wZXJ0eV0gXTtcbiAgICAgICAgfVxuICAgICAgICBjb21wcmVzc2VkT2JqW3Byb3BlcnR5XS5wdXNoKHZhbCk7XG4gICAgICB9ZWxzZXtcbiAgICAgICAgLy9UT0RPOiBpZiBhIG5vZGUgaXMgbm90IGFuIGFycmF5LCB0aGVuIGNoZWNrIGlmIGl0IHNob3VsZCBiZSBhbiBhcnJheVxuICAgICAgICAvL2Fsc28gZGV0ZXJtaW5lIGlmIGl0IGlzIGEgbGVhZiBub2RlXG4gICAgICAgIGlmIChvcHRpb25zLmlzQXJyYXkocHJvcGVydHksIG5ld0pwYXRoLCBpc0xlYWYgKSkge1xuICAgICAgICAgIGNvbXByZXNzZWRPYmpbcHJvcGVydHldID0gW3ZhbF07XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgIGNvbXByZXNzZWRPYmpbcHJvcGVydHldID0gdmFsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIFxuICB9XG4gIC8vIGlmKHRleHQgJiYgdGV4dC5sZW5ndGggPiAwKSBjb21wcmVzc2VkT2JqW29wdGlvbnMudGV4dE5vZGVOYW1lXSA9IHRleHQ7XG4gIGlmKHR5cGVvZiB0ZXh0ID09PSBcInN0cmluZ1wiKXtcbiAgICBpZih0ZXh0Lmxlbmd0aCA+IDApIGNvbXByZXNzZWRPYmpbb3B0aW9ucy50ZXh0Tm9kZU5hbWVdID0gdGV4dDtcbiAgfWVsc2UgaWYodGV4dCAhPT0gdW5kZWZpbmVkKSBjb21wcmVzc2VkT2JqW29wdGlvbnMudGV4dE5vZGVOYW1lXSA9IHRleHQ7XG4gIHJldHVybiBjb21wcmVzc2VkT2JqO1xufVxuXG5mdW5jdGlvbiBwcm9wTmFtZShvYmope1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICBpZihrZXkgIT09IFwiOkBcIikgcmV0dXJuIGtleTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhc3NpZ25BdHRyaWJ1dGVzKG9iaiwgYXR0ck1hcCwganBhdGgsIG9wdGlvbnMpe1xuICBpZiAoYXR0ck1hcCkge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhhdHRyTWFwKTtcbiAgICBjb25zdCBsZW4gPSBrZXlzLmxlbmd0aDsgLy9kb24ndCBtYWtlIGl0IGlubGluZVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNvbnN0IGF0cnJOYW1lID0ga2V5c1tpXTtcbiAgICAgIGlmIChvcHRpb25zLmlzQXJyYXkoYXRyck5hbWUsIGpwYXRoICsgXCIuXCIgKyBhdHJyTmFtZSwgdHJ1ZSwgdHJ1ZSkpIHtcbiAgICAgICAgb2JqW2F0cnJOYW1lXSA9IFsgYXR0ck1hcFthdHJyTmFtZV0gXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9ialthdHJyTmFtZV0gPSBhdHRyTWFwW2F0cnJOYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNMZWFmVGFnKG9iaiwgb3B0aW9ucyl7XG4gIGNvbnN0IHsgdGV4dE5vZGVOYW1lIH0gPSBvcHRpb25zO1xuICBjb25zdCBwcm9wQ291bnQgPSBPYmplY3Qua2V5cyhvYmopLmxlbmd0aDtcbiAgXG4gIGlmIChwcm9wQ291bnQgPT09IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChcbiAgICBwcm9wQ291bnQgPT09IDEgJiZcbiAgICAob2JqW3RleHROb2RlTmFtZV0gfHwgdHlwZW9mIG9ialt0ZXh0Tm9kZU5hbWVdID09PSBcImJvb2xlYW5cIiB8fCBvYmpbdGV4dE5vZGVOYW1lXSA9PT0gMClcbiAgKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5leHBvcnRzLnByZXR0aWZ5ID0gcHJldHRpZnk7XG4iLAogICAgImNvbnN0IHsgYnVpbGRPcHRpb25zfSA9IHJlcXVpcmUoXCIuL09wdGlvbnNCdWlsZGVyXCIpO1xuY29uc3QgT3JkZXJlZE9ialBhcnNlciA9IHJlcXVpcmUoXCIuL09yZGVyZWRPYmpQYXJzZXJcIik7XG5jb25zdCB7IHByZXR0aWZ5fSA9IHJlcXVpcmUoXCIuL25vZGUyanNvblwiKTtcbmNvbnN0IHZhbGlkYXRvciA9IHJlcXVpcmUoJy4uL3ZhbGlkYXRvcicpO1xuXG5jbGFzcyBYTUxQYXJzZXJ7XG4gICAgXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucyl7XG4gICAgICAgIHRoaXMuZXh0ZXJuYWxFbnRpdGllcyA9IHt9O1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBidWlsZE9wdGlvbnMob3B0aW9ucyk7XG4gICAgICAgIFxuICAgIH1cbiAgICAvKipcbiAgICAgKiBQYXJzZSBYTUwgZGF0cyB0byBKUyBvYmplY3QgXG4gICAgICogQHBhcmFtIHtzdHJpbmd8QnVmZmVyfSB4bWxEYXRhIFxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbnxPYmplY3R9IHZhbGlkYXRpb25PcHRpb24gXG4gICAgICovXG4gICAgcGFyc2UoeG1sRGF0YSx2YWxpZGF0aW9uT3B0aW9uKXtcbiAgICAgICAgaWYodHlwZW9mIHhtbERhdGEgPT09IFwic3RyaW5nXCIpe1xuICAgICAgICB9ZWxzZSBpZiggeG1sRGF0YS50b1N0cmluZyl7XG4gICAgICAgICAgICB4bWxEYXRhID0geG1sRGF0YS50b1N0cmluZygpO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlhNTCBkYXRhIGlzIGFjY2VwdGVkIGluIFN0cmluZyBvciBCeXRlc1tdIGZvcm0uXCIpXG4gICAgICAgIH1cbiAgICAgICAgaWYoIHZhbGlkYXRpb25PcHRpb24pe1xuICAgICAgICAgICAgaWYodmFsaWRhdGlvbk9wdGlvbiA9PT0gdHJ1ZSkgdmFsaWRhdGlvbk9wdGlvbiA9IHt9OyAvL3ZhbGlkYXRlIHdpdGggZGVmYXVsdCBvcHRpb25zXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHZhbGlkYXRvci52YWxpZGF0ZSh4bWxEYXRhLCB2YWxpZGF0aW9uT3B0aW9uKTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgIT09IHRydWUpIHtcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoIGAke3Jlc3VsdC5lcnIubXNnfToke3Jlc3VsdC5lcnIubGluZX06JHtyZXN1bHQuZXJyLmNvbH1gIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9yZGVyZWRPYmpQYXJzZXIgPSBuZXcgT3JkZXJlZE9ialBhcnNlcih0aGlzLm9wdGlvbnMpO1xuICAgICAgICBvcmRlcmVkT2JqUGFyc2VyLmFkZEV4dGVybmFsRW50aXRpZXModGhpcy5leHRlcm5hbEVudGl0aWVzKTtcbiAgICAgICAgY29uc3Qgb3JkZXJlZFJlc3VsdCA9IG9yZGVyZWRPYmpQYXJzZXIucGFyc2VYbWwoeG1sRGF0YSk7XG4gICAgICAgIGlmKHRoaXMub3B0aW9ucy5wcmVzZXJ2ZU9yZGVyIHx8IG9yZGVyZWRSZXN1bHQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIG9yZGVyZWRSZXN1bHQ7XG4gICAgICAgIGVsc2UgcmV0dXJuIHByZXR0aWZ5KG9yZGVyZWRSZXN1bHQsIHRoaXMub3B0aW9ucyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkIEVudGl0eSB3aGljaCBpcyBub3QgYnkgZGVmYXVsdCBzdXBwb3J0ZWQgYnkgdGhpcyBsaWJyYXJ5XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUgXG4gICAgICovXG4gICAgYWRkRW50aXR5KGtleSwgdmFsdWUpe1xuICAgICAgICBpZih2YWx1ZS5pbmRleE9mKFwiJlwiKSAhPT0gLTEpe1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRW50aXR5IHZhbHVlIGNhbid0IGhhdmUgJyYnXCIpXG4gICAgICAgIH1lbHNlIGlmKGtleS5pbmRleE9mKFwiJlwiKSAhPT0gLTEgfHwga2V5LmluZGV4T2YoXCI7XCIpICE9PSAtMSl7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBbiBlbnRpdHkgbXVzdCBiZSBzZXQgd2l0aG91dCAnJicgYW5kICc7Jy4gRWcuIHVzZSAnI3hEJyBmb3IgJyYjeEQ7J1wiKVxuICAgICAgICB9ZWxzZSBpZih2YWx1ZSA9PT0gXCImXCIpe1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQW4gZW50aXR5IHdpdGggdmFsdWUgJyYnIGlzIG5vdCBwZXJtaXR0ZWRcIik7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgdGhpcy5leHRlcm5hbEVudGl0aWVzW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBYTUxQYXJzZXI7IiwKICAgICJjb25zdCBFT0wgPSBcIlxcblwiO1xuXG4vKipcbiAqIFxuICogQHBhcmFtIHthcnJheX0gakFycmF5IFxuICogQHBhcmFtIHthbnl9IG9wdGlvbnMgXG4gKiBAcmV0dXJucyBcbiAqL1xuZnVuY3Rpb24gdG9YbWwoakFycmF5LCBvcHRpb25zKSB7XG4gICAgbGV0IGluZGVudGF0aW9uID0gXCJcIjtcbiAgICBpZiAob3B0aW9ucy5mb3JtYXQgJiYgb3B0aW9ucy5pbmRlbnRCeS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGluZGVudGF0aW9uID0gRU9MO1xuICAgIH1cbiAgICByZXR1cm4gYXJyVG9TdHIoakFycmF5LCBvcHRpb25zLCBcIlwiLCBpbmRlbnRhdGlvbik7XG59XG5cbmZ1bmN0aW9uIGFyclRvU3RyKGFyciwgb3B0aW9ucywgalBhdGgsIGluZGVudGF0aW9uKSB7XG4gICAgbGV0IHhtbFN0ciA9IFwiXCI7XG4gICAgbGV0IGlzUHJldmlvdXNFbGVtZW50VGFnID0gZmFsc2U7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCB0YWdPYmogPSBhcnJbaV07XG4gICAgICAgIGNvbnN0IHRhZ05hbWUgPSBwcm9wTmFtZSh0YWdPYmopO1xuICAgICAgICBpZih0YWdOYW1lID09PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xuXG4gICAgICAgIGxldCBuZXdKUGF0aCA9IFwiXCI7XG4gICAgICAgIGlmIChqUGF0aC5sZW5ndGggPT09IDApIG5ld0pQYXRoID0gdGFnTmFtZVxuICAgICAgICBlbHNlIG5ld0pQYXRoID0gYCR7alBhdGh9LiR7dGFnTmFtZX1gO1xuXG4gICAgICAgIGlmICh0YWdOYW1lID09PSBvcHRpb25zLnRleHROb2RlTmFtZSkge1xuICAgICAgICAgICAgbGV0IHRhZ1RleHQgPSB0YWdPYmpbdGFnTmFtZV07XG4gICAgICAgICAgICBpZiAoIWlzU3RvcE5vZGUobmV3SlBhdGgsIG9wdGlvbnMpKSB7XG4gICAgICAgICAgICAgICAgdGFnVGV4dCA9IG9wdGlvbnMudGFnVmFsdWVQcm9jZXNzb3IodGFnTmFtZSwgdGFnVGV4dCk7XG4gICAgICAgICAgICAgICAgdGFnVGV4dCA9IHJlcGxhY2VFbnRpdGllc1ZhbHVlKHRhZ1RleHQsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzUHJldmlvdXNFbGVtZW50VGFnKSB7XG4gICAgICAgICAgICAgICAgeG1sU3RyICs9IGluZGVudGF0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgeG1sU3RyICs9IHRhZ1RleHQ7XG4gICAgICAgICAgICBpc1ByZXZpb3VzRWxlbWVudFRhZyA9IGZhbHNlO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gZWxzZSBpZiAodGFnTmFtZSA9PT0gb3B0aW9ucy5jZGF0YVByb3BOYW1lKSB7XG4gICAgICAgICAgICBpZiAoaXNQcmV2aW91c0VsZW1lbnRUYWcpIHtcbiAgICAgICAgICAgICAgICB4bWxTdHIgKz0gaW5kZW50YXRpb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB4bWxTdHIgKz0gYDwhW0NEQVRBWyR7dGFnT2JqW3RhZ05hbWVdWzBdW29wdGlvbnMudGV4dE5vZGVOYW1lXX1dXT5gO1xuICAgICAgICAgICAgaXNQcmV2aW91c0VsZW1lbnRUYWcgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHRhZ05hbWUgPT09IG9wdGlvbnMuY29tbWVudFByb3BOYW1lKSB7XG4gICAgICAgICAgICB4bWxTdHIgKz0gaW5kZW50YXRpb24gKyBgPCEtLSR7dGFnT2JqW3RhZ05hbWVdWzBdW29wdGlvbnMudGV4dE5vZGVOYW1lXX0tLT5gO1xuICAgICAgICAgICAgaXNQcmV2aW91c0VsZW1lbnRUYWcgPSB0cnVlO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gZWxzZSBpZiAodGFnTmFtZVswXSA9PT0gXCI/XCIpIHtcbiAgICAgICAgICAgIGNvbnN0IGF0dFN0ciA9IGF0dHJfdG9fc3RyKHRhZ09ialtcIjpAXCJdLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGNvbnN0IHRlbXBJbmQgPSB0YWdOYW1lID09PSBcIj94bWxcIiA/IFwiXCIgOiBpbmRlbnRhdGlvbjtcbiAgICAgICAgICAgIGxldCBwaVRleHROb2RlTmFtZSA9IHRhZ09ialt0YWdOYW1lXVswXVtvcHRpb25zLnRleHROb2RlTmFtZV07XG4gICAgICAgICAgICBwaVRleHROb2RlTmFtZSA9IHBpVGV4dE5vZGVOYW1lLmxlbmd0aCAhPT0gMCA/IFwiIFwiICsgcGlUZXh0Tm9kZU5hbWUgOiBcIlwiOyAvL3JlbW92ZSBleHRyYSBzcGFjaW5nXG4gICAgICAgICAgICB4bWxTdHIgKz0gdGVtcEluZCArIGA8JHt0YWdOYW1lfSR7cGlUZXh0Tm9kZU5hbWV9JHthdHRTdHJ9Pz5gO1xuICAgICAgICAgICAgaXNQcmV2aW91c0VsZW1lbnRUYWcgPSB0cnVlO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG5ld0lkZW50YXRpb24gPSBpbmRlbnRhdGlvbjtcbiAgICAgICAgaWYgKG5ld0lkZW50YXRpb24gIT09IFwiXCIpIHtcbiAgICAgICAgICAgIG5ld0lkZW50YXRpb24gKz0gb3B0aW9ucy5pbmRlbnRCeTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhdHRTdHIgPSBhdHRyX3RvX3N0cih0YWdPYmpbXCI6QFwiXSwgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHRhZ1N0YXJ0ID0gaW5kZW50YXRpb24gKyBgPCR7dGFnTmFtZX0ke2F0dFN0cn1gO1xuICAgICAgICBjb25zdCB0YWdWYWx1ZSA9IGFyclRvU3RyKHRhZ09ialt0YWdOYW1lXSwgb3B0aW9ucywgbmV3SlBhdGgsIG5ld0lkZW50YXRpb24pO1xuICAgICAgICBpZiAob3B0aW9ucy51bnBhaXJlZFRhZ3MuaW5kZXhPZih0YWdOYW1lKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnN1cHByZXNzVW5wYWlyZWROb2RlKSB4bWxTdHIgKz0gdGFnU3RhcnQgKyBcIj5cIjtcbiAgICAgICAgICAgIGVsc2UgeG1sU3RyICs9IHRhZ1N0YXJ0ICsgXCIvPlwiO1xuICAgICAgICB9IGVsc2UgaWYgKCghdGFnVmFsdWUgfHwgdGFnVmFsdWUubGVuZ3RoID09PSAwKSAmJiBvcHRpb25zLnN1cHByZXNzRW1wdHlOb2RlKSB7XG4gICAgICAgICAgICB4bWxTdHIgKz0gdGFnU3RhcnQgKyBcIi8+XCI7XG4gICAgICAgIH0gZWxzZSBpZiAodGFnVmFsdWUgJiYgdGFnVmFsdWUuZW5kc1dpdGgoXCI+XCIpKSB7XG4gICAgICAgICAgICB4bWxTdHIgKz0gdGFnU3RhcnQgKyBgPiR7dGFnVmFsdWV9JHtpbmRlbnRhdGlvbn08LyR7dGFnTmFtZX0+YDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHhtbFN0ciArPSB0YWdTdGFydCArIFwiPlwiO1xuICAgICAgICAgICAgaWYgKHRhZ1ZhbHVlICYmIGluZGVudGF0aW9uICE9PSBcIlwiICYmICh0YWdWYWx1ZS5pbmNsdWRlcyhcIi8+XCIpIHx8IHRhZ1ZhbHVlLmluY2x1ZGVzKFwiPC9cIikpKSB7XG4gICAgICAgICAgICAgICAgeG1sU3RyICs9IGluZGVudGF0aW9uICsgb3B0aW9ucy5pbmRlbnRCeSArIHRhZ1ZhbHVlICsgaW5kZW50YXRpb247XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHhtbFN0ciArPSB0YWdWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHhtbFN0ciArPSBgPC8ke3RhZ05hbWV9PmA7XG4gICAgICAgIH1cbiAgICAgICAgaXNQcmV2aW91c0VsZW1lbnRUYWcgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB4bWxTdHI7XG59XG5cbmZ1bmN0aW9uIHByb3BOYW1lKG9iaikge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xuICAgICAgICBpZighb2JqLmhhc093blByb3BlcnR5KGtleSkpIGNvbnRpbnVlO1xuICAgICAgICBpZiAoa2V5ICE9PSBcIjpAXCIpIHJldHVybiBrZXk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBhdHRyX3RvX3N0cihhdHRyTWFwLCBvcHRpb25zKSB7XG4gICAgbGV0IGF0dHJTdHIgPSBcIlwiO1xuICAgIGlmIChhdHRyTWFwICYmICFvcHRpb25zLmlnbm9yZUF0dHJpYnV0ZXMpIHtcbiAgICAgICAgZm9yIChsZXQgYXR0ciBpbiBhdHRyTWFwKSB7XG4gICAgICAgICAgICBpZighYXR0ck1hcC5oYXNPd25Qcm9wZXJ0eShhdHRyKSkgY29udGludWU7XG4gICAgICAgICAgICBsZXQgYXR0clZhbCA9IG9wdGlvbnMuYXR0cmlidXRlVmFsdWVQcm9jZXNzb3IoYXR0ciwgYXR0ck1hcFthdHRyXSk7XG4gICAgICAgICAgICBhdHRyVmFsID0gcmVwbGFjZUVudGl0aWVzVmFsdWUoYXR0clZhbCwgb3B0aW9ucyk7XG4gICAgICAgICAgICBpZiAoYXR0clZhbCA9PT0gdHJ1ZSAmJiBvcHRpb25zLnN1cHByZXNzQm9vbGVhbkF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgICAgICBhdHRyU3RyICs9IGAgJHthdHRyLnN1YnN0cihvcHRpb25zLmF0dHJpYnV0ZU5hbWVQcmVmaXgubGVuZ3RoKX1gO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhdHRyU3RyICs9IGAgJHthdHRyLnN1YnN0cihvcHRpb25zLmF0dHJpYnV0ZU5hbWVQcmVmaXgubGVuZ3RoKX09XCIke2F0dHJWYWx9XCJgO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhdHRyU3RyO1xufVxuXG5mdW5jdGlvbiBpc1N0b3BOb2RlKGpQYXRoLCBvcHRpb25zKSB7XG4gICAgalBhdGggPSBqUGF0aC5zdWJzdHIoMCwgalBhdGgubGVuZ3RoIC0gb3B0aW9ucy50ZXh0Tm9kZU5hbWUubGVuZ3RoIC0gMSk7XG4gICAgbGV0IHRhZ05hbWUgPSBqUGF0aC5zdWJzdHIoalBhdGgubGFzdEluZGV4T2YoXCIuXCIpICsgMSk7XG4gICAgZm9yIChsZXQgaW5kZXggaW4gb3B0aW9ucy5zdG9wTm9kZXMpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuc3RvcE5vZGVzW2luZGV4XSA9PT0galBhdGggfHwgb3B0aW9ucy5zdG9wTm9kZXNbaW5kZXhdID09PSBcIiouXCIgKyB0YWdOYW1lKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiByZXBsYWNlRW50aXRpZXNWYWx1ZSh0ZXh0VmFsdWUsIG9wdGlvbnMpIHtcbiAgICBpZiAodGV4dFZhbHVlICYmIHRleHRWYWx1ZS5sZW5ndGggPiAwICYmIG9wdGlvbnMucHJvY2Vzc0VudGl0aWVzKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3B0aW9ucy5lbnRpdGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgZW50aXR5ID0gb3B0aW9ucy5lbnRpdGllc1tpXTtcbiAgICAgICAgICAgIHRleHRWYWx1ZSA9IHRleHRWYWx1ZS5yZXBsYWNlKGVudGl0eS5yZWdleCwgZW50aXR5LnZhbCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRleHRWYWx1ZTtcbn1cbm1vZHVsZS5leHBvcnRzID0gdG9YbWw7XG4iLAogICAgIid1c2Ugc3RyaWN0Jztcbi8vcGFyc2UgRW1wdHkgTm9kZSBhcyBzZWxmIGNsb3Npbmcgbm9kZVxuY29uc3QgYnVpbGRGcm9tT3JkZXJlZEpzID0gcmVxdWlyZSgnLi9vcmRlcmVkSnMyWG1sJyk7XG5jb25zdCBnZXRJZ25vcmVBdHRyaWJ1dGVzRm4gPSByZXF1aXJlKCcuLi9pZ25vcmVBdHRyaWJ1dGVzJylcblxuY29uc3QgZGVmYXVsdE9wdGlvbnMgPSB7XG4gIGF0dHJpYnV0ZU5hbWVQcmVmaXg6ICdAXycsXG4gIGF0dHJpYnV0ZXNHcm91cE5hbWU6IGZhbHNlLFxuICB0ZXh0Tm9kZU5hbWU6ICcjdGV4dCcsXG4gIGlnbm9yZUF0dHJpYnV0ZXM6IHRydWUsXG4gIGNkYXRhUHJvcE5hbWU6IGZhbHNlLFxuICBmb3JtYXQ6IGZhbHNlLFxuICBpbmRlbnRCeTogJyAgJyxcbiAgc3VwcHJlc3NFbXB0eU5vZGU6IGZhbHNlLFxuICBzdXBwcmVzc1VucGFpcmVkTm9kZTogdHJ1ZSxcbiAgc3VwcHJlc3NCb29sZWFuQXR0cmlidXRlczogdHJ1ZSxcbiAgdGFnVmFsdWVQcm9jZXNzb3I6IGZ1bmN0aW9uKGtleSwgYSkge1xuICAgIHJldHVybiBhO1xuICB9LFxuICBhdHRyaWJ1dGVWYWx1ZVByb2Nlc3NvcjogZnVuY3Rpb24oYXR0ck5hbWUsIGEpIHtcbiAgICByZXR1cm4gYTtcbiAgfSxcbiAgcHJlc2VydmVPcmRlcjogZmFsc2UsXG4gIGNvbW1lbnRQcm9wTmFtZTogZmFsc2UsXG4gIHVucGFpcmVkVGFnczogW10sXG4gIGVudGl0aWVzOiBbXG4gICAgeyByZWdleDogbmV3IFJlZ0V4cChcIiZcIiwgXCJnXCIpLCB2YWw6IFwiJmFtcDtcIiB9LC8vaXQgbXVzdCBiZSBvbiB0b3BcbiAgICB7IHJlZ2V4OiBuZXcgUmVnRXhwKFwiPlwiLCBcImdcIiksIHZhbDogXCImZ3Q7XCIgfSxcbiAgICB7IHJlZ2V4OiBuZXcgUmVnRXhwKFwiPFwiLCBcImdcIiksIHZhbDogXCImbHQ7XCIgfSxcbiAgICB7IHJlZ2V4OiBuZXcgUmVnRXhwKFwiXFwnXCIsIFwiZ1wiKSwgdmFsOiBcIiZhcG9zO1wiIH0sXG4gICAgeyByZWdleDogbmV3IFJlZ0V4cChcIlxcXCJcIiwgXCJnXCIpLCB2YWw6IFwiJnF1b3Q7XCIgfVxuICBdLFxuICBwcm9jZXNzRW50aXRpZXM6IHRydWUsXG4gIHN0b3BOb2RlczogW10sXG4gIC8vIHRyYW5zZm9ybVRhZ05hbWU6IGZhbHNlLFxuICAvLyB0cmFuc2Zvcm1BdHRyaWJ1dGVOYW1lOiBmYWxzZSxcbiAgb25lTGlzdEdyb3VwOiBmYWxzZVxufTtcblxuZnVuY3Rpb24gQnVpbGRlcihvcHRpb25zKSB7XG4gIHRoaXMub3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRPcHRpb25zLCBvcHRpb25zKTtcbiAgaWYgKHRoaXMub3B0aW9ucy5pZ25vcmVBdHRyaWJ1dGVzID09PSB0cnVlIHx8IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVzR3JvdXBOYW1lKSB7XG4gICAgdGhpcy5pc0F0dHJpYnV0ZSA9IGZ1bmN0aW9uKC8qYSovKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmlnbm9yZUF0dHJpYnV0ZXNGbiA9IGdldElnbm9yZUF0dHJpYnV0ZXNGbih0aGlzLm9wdGlvbnMuaWdub3JlQXR0cmlidXRlcylcbiAgICB0aGlzLmF0dHJQcmVmaXhMZW4gPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlTmFtZVByZWZpeC5sZW5ndGg7XG4gICAgdGhpcy5pc0F0dHJpYnV0ZSA9IGlzQXR0cmlidXRlO1xuICB9XG5cbiAgdGhpcy5wcm9jZXNzVGV4dE9yT2JqTm9kZSA9IHByb2Nlc3NUZXh0T3JPYmpOb2RlXG5cbiAgaWYgKHRoaXMub3B0aW9ucy5mb3JtYXQpIHtcbiAgICB0aGlzLmluZGVudGF0ZSA9IGluZGVudGF0ZTtcbiAgICB0aGlzLnRhZ0VuZENoYXIgPSAnPlxcbic7XG4gICAgdGhpcy5uZXdMaW5lID0gJ1xcbic7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5pbmRlbnRhdGUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9O1xuICAgIHRoaXMudGFnRW5kQ2hhciA9ICc+JztcbiAgICB0aGlzLm5ld0xpbmUgPSAnJztcbiAgfVxufVxuXG5CdWlsZGVyLnByb3RvdHlwZS5idWlsZCA9IGZ1bmN0aW9uKGpPYmopIHtcbiAgaWYodGhpcy5vcHRpb25zLnByZXNlcnZlT3JkZXIpe1xuICAgIHJldHVybiBidWlsZEZyb21PcmRlcmVkSnMoak9iaiwgdGhpcy5vcHRpb25zKTtcbiAgfWVsc2Uge1xuICAgIGlmKEFycmF5LmlzQXJyYXkoak9iaikgJiYgdGhpcy5vcHRpb25zLmFycmF5Tm9kZU5hbWUgJiYgdGhpcy5vcHRpb25zLmFycmF5Tm9kZU5hbWUubGVuZ3RoID4gMSl7XG4gICAgICBqT2JqID0ge1xuICAgICAgICBbdGhpcy5vcHRpb25zLmFycmF5Tm9kZU5hbWVdIDogak9ialxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5qMngoak9iaiwgMCwgW10pLnZhbDtcbiAgfVxufTtcblxuQnVpbGRlci5wcm90b3R5cGUuajJ4ID0gZnVuY3Rpb24oak9iaiwgbGV2ZWwsIGFqUGF0aCkge1xuICBsZXQgYXR0clN0ciA9ICcnO1xuICBsZXQgdmFsID0gJyc7XG4gIGNvbnN0IGpQYXRoID0gYWpQYXRoLmpvaW4oJy4nKVxuICBmb3IgKGxldCBrZXkgaW4gak9iaikge1xuICAgIGlmKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoak9iaiwga2V5KSkgY29udGludWU7XG4gICAgaWYgKHR5cGVvZiBqT2JqW2tleV0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyBzdXByZXNzIHVuZGVmaW5lZCBub2RlIG9ubHkgaWYgaXQgaXMgbm90IGFuIGF0dHJpYnV0ZVxuICAgICAgaWYgKHRoaXMuaXNBdHRyaWJ1dGUoa2V5KSkge1xuICAgICAgICB2YWwgKz0gJyc7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChqT2JqW2tleV0gPT09IG51bGwpIHtcbiAgICAgIC8vIG51bGwgYXR0cmlidXRlIHNob3VsZCBiZSBpZ25vcmVkIGJ5IHRoZSBhdHRyaWJ1dGUgbGlzdCwgYnV0IHNob3VsZCBub3QgY2F1c2UgdGhlIHRhZyBjbG9zaW5nXG4gICAgICBpZiAodGhpcy5pc0F0dHJpYnV0ZShrZXkpKSB7XG4gICAgICAgIHZhbCArPSAnJztcbiAgICAgIH0gZWxzZSBpZiAoa2V5WzBdID09PSAnPycpIHtcbiAgICAgICAgdmFsICs9IHRoaXMuaW5kZW50YXRlKGxldmVsKSArICc8JyArIGtleSArICc/JyArIHRoaXMudGFnRW5kQ2hhcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbCArPSB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyAnPCcgKyBrZXkgKyAnLycgKyB0aGlzLnRhZ0VuZENoYXI7XG4gICAgICB9XG4gICAgICAvLyB2YWwgKz0gdGhpcy5pbmRlbnRhdGUobGV2ZWwpICsgJzwnICsga2V5ICsgJy8nICsgdGhpcy50YWdFbmRDaGFyO1xuICAgIH0gZWxzZSBpZiAoak9ialtrZXldIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgdmFsICs9IHRoaXMuYnVpbGRUZXh0VmFsTm9kZShqT2JqW2tleV0sIGtleSwgJycsIGxldmVsKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBqT2JqW2tleV0gIT09ICdvYmplY3QnKSB7XG4gICAgICAvL3ByZW1pdGl2ZSB0eXBlXG4gICAgICBjb25zdCBhdHRyID0gdGhpcy5pc0F0dHJpYnV0ZShrZXkpO1xuICAgICAgaWYgKGF0dHIgJiYgIXRoaXMuaWdub3JlQXR0cmlidXRlc0ZuKGF0dHIsIGpQYXRoKSkge1xuICAgICAgICBhdHRyU3RyICs9IHRoaXMuYnVpbGRBdHRyUGFpclN0cihhdHRyLCAnJyArIGpPYmpba2V5XSk7XG4gICAgICB9IGVsc2UgaWYgKCFhdHRyKSB7XG4gICAgICAgIC8vdGFnIHZhbHVlXG4gICAgICAgIGlmIChrZXkgPT09IHRoaXMub3B0aW9ucy50ZXh0Tm9kZU5hbWUpIHtcbiAgICAgICAgICBsZXQgbmV3dmFsID0gdGhpcy5vcHRpb25zLnRhZ1ZhbHVlUHJvY2Vzc29yKGtleSwgJycgKyBqT2JqW2tleV0pO1xuICAgICAgICAgIHZhbCArPSB0aGlzLnJlcGxhY2VFbnRpdGllc1ZhbHVlKG5ld3ZhbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsICs9IHRoaXMuYnVpbGRUZXh0VmFsTm9kZShqT2JqW2tleV0sIGtleSwgJycsIGxldmVsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShqT2JqW2tleV0pKSB7XG4gICAgICAvL3JlcGVhdGVkIG5vZGVzXG4gICAgICBjb25zdCBhcnJMZW4gPSBqT2JqW2tleV0ubGVuZ3RoO1xuICAgICAgbGV0IGxpc3RUYWdWYWwgPSBcIlwiO1xuICAgICAgbGV0IGxpc3RUYWdBdHRyID0gXCJcIjtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgYXJyTGVuOyBqKyspIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IGpPYmpba2V5XVtqXTtcbiAgICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIC8vIHN1cHJlc3MgdW5kZWZpbmVkIG5vZGVcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtID09PSBudWxsKSB7XG4gICAgICAgICAgaWYoa2V5WzBdID09PSBcIj9cIikgdmFsICs9IHRoaXMuaW5kZW50YXRlKGxldmVsKSArICc8JyArIGtleSArICc/JyArIHRoaXMudGFnRW5kQ2hhcjtcbiAgICAgICAgICBlbHNlIHZhbCArPSB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyAnPCcgKyBrZXkgKyAnLycgKyB0aGlzLnRhZ0VuZENoYXI7XG4gICAgICAgICAgLy8gdmFsICs9IHRoaXMuaW5kZW50YXRlKGxldmVsKSArICc8JyArIGtleSArICcvJyArIHRoaXMudGFnRW5kQ2hhcjtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBpZih0aGlzLm9wdGlvbnMub25lTGlzdEdyb3VwKXtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuajJ4KGl0ZW0sIGxldmVsICsgMSwgYWpQYXRoLmNvbmNhdChrZXkpKTtcbiAgICAgICAgICAgIGxpc3RUYWdWYWwgKz0gcmVzdWx0LnZhbDtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYXR0cmlidXRlc0dyb3VwTmFtZSAmJiBpdGVtLmhhc093blByb3BlcnR5KHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVzR3JvdXBOYW1lKSkge1xuICAgICAgICAgICAgICBsaXN0VGFnQXR0ciArPSByZXN1bHQuYXR0clN0clxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgbGlzdFRhZ1ZhbCArPSB0aGlzLnByb2Nlc3NUZXh0T3JPYmpOb2RlKGl0ZW0sIGtleSwgbGV2ZWwsIGFqUGF0aClcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5vbmVMaXN0R3JvdXApIHtcbiAgICAgICAgICAgIGxldCB0ZXh0VmFsdWUgPSB0aGlzLm9wdGlvbnMudGFnVmFsdWVQcm9jZXNzb3Ioa2V5LCBpdGVtKTtcbiAgICAgICAgICAgIHRleHRWYWx1ZSA9IHRoaXMucmVwbGFjZUVudGl0aWVzVmFsdWUodGV4dFZhbHVlKTtcbiAgICAgICAgICAgIGxpc3RUYWdWYWwgKz0gdGV4dFZhbHVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsaXN0VGFnVmFsICs9IHRoaXMuYnVpbGRUZXh0VmFsTm9kZShpdGVtLCBrZXksICcnLCBsZXZlbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZih0aGlzLm9wdGlvbnMub25lTGlzdEdyb3VwKXtcbiAgICAgICAgbGlzdFRhZ1ZhbCA9IHRoaXMuYnVpbGRPYmplY3ROb2RlKGxpc3RUYWdWYWwsIGtleSwgbGlzdFRhZ0F0dHIsIGxldmVsKTtcbiAgICAgIH1cbiAgICAgIHZhbCArPSBsaXN0VGFnVmFsO1xuICAgIH0gZWxzZSB7XG4gICAgICAvL25lc3RlZCBub2RlXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmF0dHJpYnV0ZXNHcm91cE5hbWUgJiYga2V5ID09PSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlc0dyb3VwTmFtZSkge1xuICAgICAgICBjb25zdCBLcyA9IE9iamVjdC5rZXlzKGpPYmpba2V5XSk7XG4gICAgICAgIGNvbnN0IEwgPSBLcy5sZW5ndGg7XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgTDsgaisrKSB7XG4gICAgICAgICAgYXR0clN0ciArPSB0aGlzLmJ1aWxkQXR0clBhaXJTdHIoS3Nbal0sICcnICsgak9ialtrZXldW0tzW2pdXSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbCArPSB0aGlzLnByb2Nlc3NUZXh0T3JPYmpOb2RlKGpPYmpba2V5XSwga2V5LCBsZXZlbCwgYWpQYXRoKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4ge2F0dHJTdHI6IGF0dHJTdHIsIHZhbDogdmFsfTtcbn07XG5cbkJ1aWxkZXIucHJvdG90eXBlLmJ1aWxkQXR0clBhaXJTdHIgPSBmdW5jdGlvbihhdHRyTmFtZSwgdmFsKXtcbiAgdmFsID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZVZhbHVlUHJvY2Vzc29yKGF0dHJOYW1lLCAnJyArIHZhbCk7XG4gIHZhbCA9IHRoaXMucmVwbGFjZUVudGl0aWVzVmFsdWUodmFsKTtcbiAgaWYgKHRoaXMub3B0aW9ucy5zdXBwcmVzc0Jvb2xlYW5BdHRyaWJ1dGVzICYmIHZhbCA9PT0gXCJ0cnVlXCIpIHtcbiAgICByZXR1cm4gJyAnICsgYXR0ck5hbWU7XG4gIH0gZWxzZSByZXR1cm4gJyAnICsgYXR0ck5hbWUgKyAnPVwiJyArIHZhbCArICdcIic7XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NUZXh0T3JPYmpOb2RlIChvYmplY3QsIGtleSwgbGV2ZWwsIGFqUGF0aCkge1xuICBjb25zdCByZXN1bHQgPSB0aGlzLmoyeChvYmplY3QsIGxldmVsICsgMSwgYWpQYXRoLmNvbmNhdChrZXkpKTtcbiAgaWYgKG9iamVjdFt0aGlzLm9wdGlvbnMudGV4dE5vZGVOYW1lXSAhPT0gdW5kZWZpbmVkICYmIE9iamVjdC5rZXlzKG9iamVjdCkubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIHRoaXMuYnVpbGRUZXh0VmFsTm9kZShvYmplY3RbdGhpcy5vcHRpb25zLnRleHROb2RlTmFtZV0sIGtleSwgcmVzdWx0LmF0dHJTdHIsIGxldmVsKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdGhpcy5idWlsZE9iamVjdE5vZGUocmVzdWx0LnZhbCwga2V5LCByZXN1bHQuYXR0clN0ciwgbGV2ZWwpO1xuICB9XG59XG5cbkJ1aWxkZXIucHJvdG90eXBlLmJ1aWxkT2JqZWN0Tm9kZSA9IGZ1bmN0aW9uKHZhbCwga2V5LCBhdHRyU3RyLCBsZXZlbCkge1xuICBpZih2YWwgPT09IFwiXCIpe1xuICAgIGlmKGtleVswXSA9PT0gXCI/XCIpIHJldHVybiAgdGhpcy5pbmRlbnRhdGUobGV2ZWwpICsgJzwnICsga2V5ICsgYXR0clN0cisgJz8nICsgdGhpcy50YWdFbmRDaGFyO1xuICAgIGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuaW5kZW50YXRlKGxldmVsKSArICc8JyArIGtleSArIGF0dHJTdHIgKyB0aGlzLmNsb3NlVGFnKGtleSkgKyB0aGlzLnRhZ0VuZENoYXI7XG4gICAgfVxuICB9ZWxzZXtcblxuICAgIGxldCB0YWdFbmRFeHAgPSAnPC8nICsga2V5ICsgdGhpcy50YWdFbmRDaGFyO1xuICAgIGxldCBwaUNsb3NpbmdDaGFyID0gXCJcIjtcbiAgICBcbiAgICBpZihrZXlbMF0gPT09IFwiP1wiKSB7XG4gICAgICBwaUNsb3NpbmdDaGFyID0gXCI/XCI7XG4gICAgICB0YWdFbmRFeHAgPSBcIlwiO1xuICAgIH1cbiAgXG4gICAgLy8gYXR0clN0ciBpcyBhbiBlbXB0eSBzdHJpbmcgaW4gY2FzZSB0aGUgYXR0cmlidXRlIGNhbWUgYXMgdW5kZWZpbmVkIG9yIG51bGxcbiAgICBpZiAoKGF0dHJTdHIgfHwgYXR0clN0ciA9PT0gJycpICYmIHZhbC5pbmRleE9mKCc8JykgPT09IC0xKSB7XG4gICAgICByZXR1cm4gKCB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyAnPCcgKyAga2V5ICsgYXR0clN0ciArIHBpQ2xvc2luZ0NoYXIgKyAnPicgKyB2YWwgKyB0YWdFbmRFeHAgKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5jb21tZW50UHJvcE5hbWUgIT09IGZhbHNlICYmIGtleSA9PT0gdGhpcy5vcHRpb25zLmNvbW1lbnRQcm9wTmFtZSAmJiBwaUNsb3NpbmdDaGFyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5kZW50YXRlKGxldmVsKSArIGA8IS0tJHt2YWx9LS0+YCArIHRoaXMubmV3TGluZTtcbiAgICB9ZWxzZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyAnPCcgKyBrZXkgKyBhdHRyU3RyICsgcGlDbG9zaW5nQ2hhciArIHRoaXMudGFnRW5kQ2hhciArXG4gICAgICAgIHZhbCArXG4gICAgICAgIHRoaXMuaW5kZW50YXRlKGxldmVsKSArIHRhZ0VuZEV4cCAgICApO1xuICAgIH1cbiAgfVxufVxuXG5CdWlsZGVyLnByb3RvdHlwZS5jbG9zZVRhZyA9IGZ1bmN0aW9uKGtleSl7XG4gIGxldCBjbG9zZVRhZyA9IFwiXCI7XG4gIGlmKHRoaXMub3B0aW9ucy51bnBhaXJlZFRhZ3MuaW5kZXhPZihrZXkpICE9PSAtMSl7IC8vdW5wYWlyZWRcbiAgICBpZighdGhpcy5vcHRpb25zLnN1cHByZXNzVW5wYWlyZWROb2RlKSBjbG9zZVRhZyA9IFwiL1wiXG4gIH1lbHNlIGlmKHRoaXMub3B0aW9ucy5zdXBwcmVzc0VtcHR5Tm9kZSl7IC8vZW1wdHlcbiAgICBjbG9zZVRhZyA9IFwiL1wiO1xuICB9ZWxzZXtcbiAgICBjbG9zZVRhZyA9IGA+PC8ke2tleX1gXG4gIH1cbiAgcmV0dXJuIGNsb3NlVGFnO1xufVxuXG5mdW5jdGlvbiBidWlsZEVtcHR5T2JqTm9kZSh2YWwsIGtleSwgYXR0clN0ciwgbGV2ZWwpIHtcbiAgaWYgKHZhbCAhPT0gJycpIHtcbiAgICByZXR1cm4gdGhpcy5idWlsZE9iamVjdE5vZGUodmFsLCBrZXksIGF0dHJTdHIsIGxldmVsKTtcbiAgfSBlbHNlIHtcbiAgICBpZihrZXlbMF0gPT09IFwiP1wiKSByZXR1cm4gIHRoaXMuaW5kZW50YXRlKGxldmVsKSArICc8JyArIGtleSArIGF0dHJTdHIrICc/JyArIHRoaXMudGFnRW5kQ2hhcjtcbiAgICBlbHNlIHtcbiAgICAgIHJldHVybiAgdGhpcy5pbmRlbnRhdGUobGV2ZWwpICsgJzwnICsga2V5ICsgYXR0clN0ciArICcvJyArIHRoaXMudGFnRW5kQ2hhcjtcbiAgICAgIC8vIHJldHVybiB0aGlzLmJ1aWxkVGFnU3RyKGxldmVsLGtleSwgYXR0clN0cik7XG4gICAgfVxuICB9XG59XG5cbkJ1aWxkZXIucHJvdG90eXBlLmJ1aWxkVGV4dFZhbE5vZGUgPSBmdW5jdGlvbih2YWwsIGtleSwgYXR0clN0ciwgbGV2ZWwpIHtcbiAgaWYgKHRoaXMub3B0aW9ucy5jZGF0YVByb3BOYW1lICE9PSBmYWxzZSAmJiBrZXkgPT09IHRoaXMub3B0aW9ucy5jZGF0YVByb3BOYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuaW5kZW50YXRlKGxldmVsKSArIGA8IVtDREFUQVske3ZhbH1dXT5gICsgIHRoaXMubmV3TGluZTtcbiAgfWVsc2UgaWYgKHRoaXMub3B0aW9ucy5jb21tZW50UHJvcE5hbWUgIT09IGZhbHNlICYmIGtleSA9PT0gdGhpcy5vcHRpb25zLmNvbW1lbnRQcm9wTmFtZSkge1xuICAgIHJldHVybiB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyBgPCEtLSR7dmFsfS0tPmAgKyAgdGhpcy5uZXdMaW5lO1xuICB9ZWxzZSBpZihrZXlbMF0gPT09IFwiP1wiKSB7Ly9QSSB0YWdcbiAgICByZXR1cm4gIHRoaXMuaW5kZW50YXRlKGxldmVsKSArICc8JyArIGtleSArIGF0dHJTdHIrICc/JyArIHRoaXMudGFnRW5kQ2hhcjsgXG4gIH1lbHNle1xuICAgIGxldCB0ZXh0VmFsdWUgPSB0aGlzLm9wdGlvbnMudGFnVmFsdWVQcm9jZXNzb3Ioa2V5LCB2YWwpO1xuICAgIHRleHRWYWx1ZSA9IHRoaXMucmVwbGFjZUVudGl0aWVzVmFsdWUodGV4dFZhbHVlKTtcbiAgXG4gICAgaWYoIHRleHRWYWx1ZSA9PT0gJycpe1xuICAgICAgcmV0dXJuIHRoaXMuaW5kZW50YXRlKGxldmVsKSArICc8JyArIGtleSArIGF0dHJTdHIgKyB0aGlzLmNsb3NlVGFnKGtleSkgKyB0aGlzLnRhZ0VuZENoYXI7XG4gICAgfWVsc2V7XG4gICAgICByZXR1cm4gdGhpcy5pbmRlbnRhdGUobGV2ZWwpICsgJzwnICsga2V5ICsgYXR0clN0ciArICc+JyArXG4gICAgICAgICB0ZXh0VmFsdWUgK1xuICAgICAgICAnPC8nICsga2V5ICsgdGhpcy50YWdFbmRDaGFyO1xuICAgIH1cbiAgfVxufVxuXG5CdWlsZGVyLnByb3RvdHlwZS5yZXBsYWNlRW50aXRpZXNWYWx1ZSA9IGZ1bmN0aW9uKHRleHRWYWx1ZSl7XG4gIGlmKHRleHRWYWx1ZSAmJiB0ZXh0VmFsdWUubGVuZ3RoID4gMCAmJiB0aGlzLm9wdGlvbnMucHJvY2Vzc0VudGl0aWVzKXtcbiAgICBmb3IgKGxldCBpPTA7IGk8dGhpcy5vcHRpb25zLmVudGl0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBlbnRpdHkgPSB0aGlzLm9wdGlvbnMuZW50aXRpZXNbaV07XG4gICAgICB0ZXh0VmFsdWUgPSB0ZXh0VmFsdWUucmVwbGFjZShlbnRpdHkucmVnZXgsIGVudGl0eS52YWwpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdGV4dFZhbHVlO1xufVxuXG5mdW5jdGlvbiBpbmRlbnRhdGUobGV2ZWwpIHtcbiAgcmV0dXJuIHRoaXMub3B0aW9ucy5pbmRlbnRCeS5yZXBlYXQobGV2ZWwpO1xufVxuXG5mdW5jdGlvbiBpc0F0dHJpYnV0ZShuYW1lIC8qLCBvcHRpb25zKi8pIHtcbiAgaWYgKG5hbWUuc3RhcnRzV2l0aCh0aGlzLm9wdGlvbnMuYXR0cmlidXRlTmFtZVByZWZpeCkgJiYgbmFtZSAhPT0gdGhpcy5vcHRpb25zLnRleHROb2RlTmFtZSkge1xuICAgIHJldHVybiBuYW1lLnN1YnN0cih0aGlzLmF0dHJQcmVmaXhMZW4pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEJ1aWxkZXI7XG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxuY29uc3QgdmFsaWRhdG9yID0gcmVxdWlyZSgnLi92YWxpZGF0b3InKTtcbmNvbnN0IFhNTFBhcnNlciA9IHJlcXVpcmUoJy4veG1scGFyc2VyL1hNTFBhcnNlcicpO1xuY29uc3QgWE1MQnVpbGRlciA9IHJlcXVpcmUoJy4veG1sYnVpbGRlci9qc29uMnhtbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgWE1MUGFyc2VyOiBYTUxQYXJzZXIsXG4gIFhNTFZhbGlkYXRvcjogdmFsaWRhdG9yLFxuICBYTUxCdWlsZGVyOiBYTUxCdWlsZGVyXG59IiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5YTUxfQ0hBUktFWSA9IGV4cG9ydHMuWE1MX0FUVFJLRVkgPSB2b2lkIDA7XG4vKipcbiAqIERlZmF1bHQga2V5IHVzZWQgdG8gYWNjZXNzIHRoZSBYTUwgYXR0cmlidXRlcy5cbiAqL1xuZXhwb3J0cy5YTUxfQVRUUktFWSA9IFwiJFwiO1xuLyoqXG4gKiBEZWZhdWx0IGtleSB1c2VkIHRvIGFjY2VzcyB0aGUgWE1MIHZhbHVlIGNvbnRlbnQuXG4gKi9cbmV4cG9ydHMuWE1MX0NIQVJLRVkgPSBcIl9cIjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXhtbC5jb21tb24uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5zdHJpbmdpZnlYTUwgPSBzdHJpbmdpZnlYTUw7XG5leHBvcnRzLnBhcnNlWE1MID0gcGFyc2VYTUw7XG5jb25zdCBmYXN0X3htbF9wYXJzZXJfMSA9IHJlcXVpcmUoXCJmYXN0LXhtbC1wYXJzZXJcIik7XG5jb25zdCB4bWxfY29tbW9uX2pzXzEgPSByZXF1aXJlKFwiLi94bWwuY29tbW9uLmpzXCIpO1xuZnVuY3Rpb24gZ2V0Q29tbW9uT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiB7XG4gICAgICAgIGF0dHJpYnV0ZXNHcm91cE5hbWU6IHhtbF9jb21tb25fanNfMS5YTUxfQVRUUktFWSxcbiAgICAgICAgdGV4dE5vZGVOYW1lOiAoX2EgPSBvcHRpb25zLnhtbENoYXJLZXkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHhtbF9jb21tb25fanNfMS5YTUxfQ0hBUktFWSxcbiAgICAgICAgaWdub3JlQXR0cmlidXRlczogZmFsc2UsXG4gICAgICAgIHN1cHByZXNzQm9vbGVhbkF0dHJpYnV0ZXM6IGZhbHNlLFxuICAgIH07XG59XG5mdW5jdGlvbiBnZXRTZXJpYWxpemVyT3B0aW9ucyhvcHRpb25zID0ge30pIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGdldENvbW1vbk9wdGlvbnMob3B0aW9ucykpLCB7IGF0dHJpYnV0ZU5hbWVQcmVmaXg6IFwiQF9cIiwgZm9ybWF0OiB0cnVlLCBzdXBwcmVzc0VtcHR5Tm9kZTogdHJ1ZSwgaW5kZW50Qnk6IFwiXCIsIHJvb3ROb2RlTmFtZTogKF9hID0gb3B0aW9ucy5yb290TmFtZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogXCJyb290XCIsIGNkYXRhUHJvcE5hbWU6IChfYiA9IG9wdGlvbnMuY2RhdGFQcm9wTmFtZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogXCJfX2NkYXRhXCIgfSk7XG59XG5mdW5jdGlvbiBnZXRQYXJzZXJPcHRpb25zKG9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGdldENvbW1vbk9wdGlvbnMob3B0aW9ucykpLCB7IHBhcnNlQXR0cmlidXRlVmFsdWU6IGZhbHNlLCBwYXJzZVRhZ1ZhbHVlOiBmYWxzZSwgYXR0cmlidXRlTmFtZVByZWZpeDogXCJcIiwgc3RvcE5vZGVzOiBvcHRpb25zLnN0b3BOb2RlcywgcHJvY2Vzc0VudGl0aWVzOiB0cnVlIH0pO1xufVxuLyoqXG4gKiBDb252ZXJ0cyBnaXZlbiBKU09OIG9iamVjdCB0byBYTUwgc3RyaW5nXG4gKiBAcGFyYW0gb2JqIC0gSlNPTiBvYmplY3QgdG8gYmUgY29udmVydGVkIGludG8gWE1MIHN0cmluZ1xuICogQHBhcmFtIG9wdHMgLSBPcHRpb25zIHRoYXQgZ292ZXJuIHRoZSBYTUwgYnVpbGRpbmcgb2YgZ2l2ZW4gSlNPTiBvYmplY3RcbiAqIGByb290TmFtZWAgaW5kaWNhdGVzIHRoZSBuYW1lIG9mIHRoZSByb290IGVsZW1lbnQgaW4gdGhlIHJlc3VsdGluZyBYTUxcbiAqL1xuZnVuY3Rpb24gc3RyaW5naWZ5WE1MKG9iaiwgb3B0cyA9IHt9KSB7XG4gICAgY29uc3QgcGFyc2VyT3B0aW9ucyA9IGdldFNlcmlhbGl6ZXJPcHRpb25zKG9wdHMpO1xuICAgIGNvbnN0IGoyeCA9IG5ldyBmYXN0X3htbF9wYXJzZXJfMS5YTUxCdWlsZGVyKHBhcnNlck9wdGlvbnMpO1xuICAgIGNvbnN0IG5vZGUgPSB7IFtwYXJzZXJPcHRpb25zLnJvb3ROb2RlTmFtZV06IG9iaiB9O1xuICAgIGNvbnN0IHhtbERhdGEgPSBqMnguYnVpbGQobm9kZSk7XG4gICAgcmV0dXJuIGA8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJVVEYtOFwiIHN0YW5kYWxvbmU9XCJ5ZXNcIj8+JHt4bWxEYXRhfWAucmVwbGFjZSgvXFxuL2csIFwiXCIpO1xufVxuLyoqXG4gKiBDb252ZXJ0cyBnaXZlbiBYTUwgc3RyaW5nIGludG8gSlNPTlxuICogQHBhcmFtIHN0ciAtIFN0cmluZyBjb250YWluaW5nIHRoZSBYTUwgY29udGVudCB0byBiZSBwYXJzZWQgaW50byBKU09OXG4gKiBAcGFyYW0gb3B0cyAtIE9wdGlvbnMgdGhhdCBnb3Zlcm4gdGhlIHBhcnNpbmcgb2YgZ2l2ZW4geG1sIHN0cmluZ1xuICogYGluY2x1ZGVSb290YCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgcm9vdCBlbGVtZW50IGlzIHRvIGJlIGluY2x1ZGVkIG9yIG5vdCBpbiB0aGUgb3V0cHV0XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHBhcnNlWE1MKHN0ciwgb3B0cyA9IHt9KSB7XG4gICAgaWYgKCFzdHIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRG9jdW1lbnQgaXMgZW1wdHlcIik7XG4gICAgfVxuICAgIGNvbnN0IHZhbGlkYXRpb24gPSBmYXN0X3htbF9wYXJzZXJfMS5YTUxWYWxpZGF0b3IudmFsaWRhdGUoc3RyKTtcbiAgICBpZiAodmFsaWRhdGlvbiAhPT0gdHJ1ZSkge1xuICAgICAgICB0aHJvdyB2YWxpZGF0aW9uO1xuICAgIH1cbiAgICBjb25zdCBwYXJzZXIgPSBuZXcgZmFzdF94bWxfcGFyc2VyXzEuWE1MUGFyc2VyKGdldFBhcnNlck9wdGlvbnMob3B0cykpO1xuICAgIGNvbnN0IHBhcnNlZFhtbCA9IHBhcnNlci5wYXJzZShzdHIpO1xuICAgIC8vIFJlbW92ZSB0aGUgPD94bWwgdmVyc2lvbj1cIi4uLlwiID8+IG5vZGUuXG4gICAgLy8gVGhpcyBpcyBhIGNoYW5nZSBpbiBiZWhhdmlvciBvbiBmeHAgdjQuIElzc3VlICM0MjRcbiAgICBpZiAocGFyc2VkWG1sW1wiP3htbFwiXSkge1xuICAgICAgICBkZWxldGUgcGFyc2VkWG1sW1wiP3htbFwiXTtcbiAgICB9XG4gICAgaWYgKCFvcHRzLmluY2x1ZGVSb290KSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHBhcnNlZFhtbCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcGFyc2VkWG1sW2tleV07XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiID8gT2JqZWN0LmFzc2lnbih7fSwgdmFsdWUpIDogdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlZFhtbDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXhtbC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlhNTF9DSEFSS0VZID0gZXhwb3J0cy5YTUxfQVRUUktFWSA9IGV4cG9ydHMucGFyc2VYTUwgPSBleHBvcnRzLnN0cmluZ2lmeVhNTCA9IHZvaWQgMDtcbnZhciB4bWxfanNfMSA9IHJlcXVpcmUoXCIuL3htbC5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0cmluZ2lmeVhNTFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4geG1sX2pzXzEuc3RyaW5naWZ5WE1MOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicGFyc2VYTUxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHhtbF9qc18xLnBhcnNlWE1MOyB9IH0pO1xudmFyIHhtbF9jb21tb25fanNfMSA9IHJlcXVpcmUoXCIuL3htbC5jb21tb24uanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJYTUxfQVRUUktFWVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4geG1sX2NvbW1vbl9qc18xLlhNTF9BVFRSS0VZOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiWE1MX0NIQVJLRVlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHhtbF9jb21tb25fanNfMS5YTUxfQ0hBUktFWTsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubG9nZ2VyID0gdm9pZCAwO1xuY29uc3QgbG9nZ2VyXzEgPSByZXF1aXJlKFwiQGF6dXJlL2xvZ2dlclwiKTtcbi8qKlxuICogVGhlIGBAYXp1cmUvbG9nZ2VyYCBjb25maWd1cmF0aW9uIGZvciB0aGlzIHBhY2thZ2UuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0cy5sb2dnZXIgPSAoMCwgbG9nZ2VyXzEuY3JlYXRlQ2xpZW50TG9nZ2VyKShcImNvcmUtbHJvXCIpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bG9nZ2VyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudGVybWluYWxTdGF0ZXMgPSBleHBvcnRzLlBPTExfSU5URVJWQUxfSU5fTVMgPSB2b2lkIDA7XG4vKipcbiAqIFRoZSBkZWZhdWx0IHRpbWUgaW50ZXJ2YWwgdG8gd2FpdCBiZWZvcmUgc2VuZGluZyB0aGUgbmV4dCBwb2xsaW5nIHJlcXVlc3QuXG4gKi9cbmV4cG9ydHMuUE9MTF9JTlRFUlZBTF9JTl9NUyA9IDIwMDA7XG4vKipcbiAqIFRoZSBjbG9zZWQgc2V0IG9mIHRlcm1pbmFsIHN0YXRlcy5cbiAqL1xuZXhwb3J0cy50ZXJtaW5hbFN0YXRlcyA9IFtcInN1Y2NlZWRlZFwiLCBcImNhbmNlbGVkXCIsIFwiZmFpbGVkXCJdO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3RhbnRzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucG9sbE9wZXJhdGlvbiA9IGV4cG9ydHMuaW5pdE9wZXJhdGlvbiA9IGV4cG9ydHMuZGVzZXJpYWxpemVTdGF0ZSA9IHZvaWQgMDtcbmNvbnN0IGxvZ2dlcl9qc18xID0gcmVxdWlyZShcIi4uL2xvZ2dlci5qc1wiKTtcbmNvbnN0IGNvbnN0YW50c19qc18xID0gcmVxdWlyZShcIi4vY29uc3RhbnRzLmpzXCIpO1xuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgdGhlIHN0YXRlXG4gKi9cbmZ1bmN0aW9uIGRlc2VyaWFsaXplU3RhdGUoc2VyaWFsaXplZFN0YXRlKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2Uoc2VyaWFsaXplZFN0YXRlKS5zdGF0ZTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gZGVzZXJpYWxpemUgaW5wdXQgc3RhdGU6ICR7c2VyaWFsaXplZFN0YXRlfWApO1xuICAgIH1cbn1cbmV4cG9ydHMuZGVzZXJpYWxpemVTdGF0ZSA9IGRlc2VyaWFsaXplU3RhdGU7XG5mdW5jdGlvbiBzZXRTdGF0ZUVycm9yKGlucHV0cykge1xuICAgIGNvbnN0IHsgc3RhdGUsIHN0YXRlUHJveHksIGlzT3BlcmF0aW9uRXJyb3IgfSA9IGlucHV0cztcbiAgICByZXR1cm4gKGVycm9yKSA9PiB7XG4gICAgICAgIGlmIChpc09wZXJhdGlvbkVycm9yKGVycm9yKSkge1xuICAgICAgICAgICAgc3RhdGVQcm94eS5zZXRFcnJvcihzdGF0ZSwgZXJyb3IpO1xuICAgICAgICAgICAgc3RhdGVQcm94eS5zZXRGYWlsZWQoc3RhdGUpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgIH07XG59XG5mdW5jdGlvbiBhcHBlbmRSZWFkYWJsZUVycm9yTWVzc2FnZShjdXJyZW50TWVzc2FnZSwgaW5uZXJNZXNzYWdlKSB7XG4gICAgbGV0IG1lc3NhZ2UgPSBjdXJyZW50TWVzc2FnZTtcbiAgICBpZiAobWVzc2FnZS5zbGljZSgtMSkgIT09IFwiLlwiKSB7XG4gICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlICsgXCIuXCI7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlICsgXCIgXCIgKyBpbm5lck1lc3NhZ2U7XG59XG5mdW5jdGlvbiBzaW1wbGlmeUVycm9yKGVycikge1xuICAgIGxldCBtZXNzYWdlID0gZXJyLm1lc3NhZ2U7XG4gICAgbGV0IGNvZGUgPSBlcnIuY29kZTtcbiAgICBsZXQgY3VyRXJyID0gZXJyO1xuICAgIHdoaWxlIChjdXJFcnIuaW5uZXJlcnJvcikge1xuICAgICAgICBjdXJFcnIgPSBjdXJFcnIuaW5uZXJlcnJvcjtcbiAgICAgICAgY29kZSA9IGN1ckVyci5jb2RlO1xuICAgICAgICBtZXNzYWdlID0gYXBwZW5kUmVhZGFibGVFcnJvck1lc3NhZ2UobWVzc2FnZSwgY3VyRXJyLm1lc3NhZ2UpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBjb2RlLFxuICAgICAgICBtZXNzYWdlLFxuICAgIH07XG59XG5mdW5jdGlvbiBwcm9jZXNzT3BlcmF0aW9uU3RhdHVzKHJlc3VsdCkge1xuICAgIGNvbnN0IHsgc3RhdGUsIHN0YXRlUHJveHksIHN0YXR1cywgaXNEb25lLCBwcm9jZXNzUmVzdWx0LCBnZXRFcnJvciwgcmVzcG9uc2UsIHNldEVycm9yQXNSZXN1bHQgfSA9IHJlc3VsdDtcbiAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgICBjYXNlIFwic3VjY2VlZGVkXCI6IHtcbiAgICAgICAgICAgIHN0YXRlUHJveHkuc2V0U3VjY2VlZGVkKHN0YXRlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJmYWlsZWRcIjoge1xuICAgICAgICAgICAgY29uc3QgZXJyID0gZ2V0RXJyb3IgPT09IG51bGwgfHwgZ2V0RXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGdldEVycm9yKHJlc3BvbnNlKTtcbiAgICAgICAgICAgIGxldCBwb3N0Zml4ID0gXCJcIjtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGNvZGUsIG1lc3NhZ2UgfSA9IHNpbXBsaWZ5RXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICBwb3N0Zml4ID0gYC4gJHtjb2RlfS4gJHttZXNzYWdlfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBlcnJTdHIgPSBgVGhlIGxvbmctcnVubmluZyBvcGVyYXRpb24gaGFzIGZhaWxlZCR7cG9zdGZpeH1gO1xuICAgICAgICAgICAgc3RhdGVQcm94eS5zZXRFcnJvcihzdGF0ZSwgbmV3IEVycm9yKGVyclN0cikpO1xuICAgICAgICAgICAgc3RhdGVQcm94eS5zZXRGYWlsZWQoc3RhdGUpO1xuICAgICAgICAgICAgbG9nZ2VyX2pzXzEubG9nZ2VyLndhcm5pbmcoZXJyU3RyKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJjYW5jZWxlZFwiOiB7XG4gICAgICAgICAgICBzdGF0ZVByb3h5LnNldENhbmNlbGVkKHN0YXRlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICgoaXNEb25lID09PSBudWxsIHx8IGlzRG9uZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogaXNEb25lKHJlc3BvbnNlLCBzdGF0ZSkpIHx8XG4gICAgICAgIChpc0RvbmUgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgW1wic3VjY2VlZGVkXCIsIFwiY2FuY2VsZWRcIl0uY29uY2F0KHNldEVycm9yQXNSZXN1bHQgPyBbXSA6IFtcImZhaWxlZFwiXSkuaW5jbHVkZXMoc3RhdHVzKSkpIHtcbiAgICAgICAgc3RhdGVQcm94eS5zZXRSZXN1bHQoc3RhdGUsIGJ1aWxkUmVzdWx0KHtcbiAgICAgICAgICAgIHJlc3BvbnNlLFxuICAgICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgICBwcm9jZXNzUmVzdWx0LFxuICAgICAgICB9KSk7XG4gICAgfVxufVxuZnVuY3Rpb24gYnVpbGRSZXN1bHQoaW5wdXRzKSB7XG4gICAgY29uc3QgeyBwcm9jZXNzUmVzdWx0LCByZXNwb25zZSwgc3RhdGUgfSA9IGlucHV0cztcbiAgICByZXR1cm4gcHJvY2Vzc1Jlc3VsdCA/IHByb2Nlc3NSZXN1bHQocmVzcG9uc2UsIHN0YXRlKSA6IHJlc3BvbnNlO1xufVxuLyoqXG4gKiBJbml0aWF0ZXMgdGhlIGxvbmctcnVubmluZyBvcGVyYXRpb24uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGluaXRPcGVyYXRpb24oaW5wdXRzKSB7XG4gICAgY29uc3QgeyBpbml0LCBzdGF0ZVByb3h5LCBwcm9jZXNzUmVzdWx0LCBnZXRPcGVyYXRpb25TdGF0dXMsIHdpdGhPcGVyYXRpb25Mb2NhdGlvbiwgc2V0RXJyb3JBc1Jlc3VsdCwgfSA9IGlucHV0cztcbiAgICBjb25zdCB7IG9wZXJhdGlvbkxvY2F0aW9uLCByZXNvdXJjZUxvY2F0aW9uLCBtZXRhZGF0YSwgcmVzcG9uc2UgfSA9IGF3YWl0IGluaXQoKTtcbiAgICBpZiAob3BlcmF0aW9uTG9jYXRpb24pXG4gICAgICAgIHdpdGhPcGVyYXRpb25Mb2NhdGlvbiA9PT0gbnVsbCB8fCB3aXRoT3BlcmF0aW9uTG9jYXRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHdpdGhPcGVyYXRpb25Mb2NhdGlvbihvcGVyYXRpb25Mb2NhdGlvbiwgZmFsc2UpO1xuICAgIGNvbnN0IGNvbmZpZyA9IHtcbiAgICAgICAgbWV0YWRhdGEsXG4gICAgICAgIG9wZXJhdGlvbkxvY2F0aW9uLFxuICAgICAgICByZXNvdXJjZUxvY2F0aW9uLFxuICAgIH07XG4gICAgbG9nZ2VyX2pzXzEubG9nZ2VyLnZlcmJvc2UoYExSTzogT3BlcmF0aW9uIGRlc2NyaXB0aW9uOmAsIGNvbmZpZyk7XG4gICAgY29uc3Qgc3RhdGUgPSBzdGF0ZVByb3h5LmluaXRTdGF0ZShjb25maWcpO1xuICAgIGNvbnN0IHN0YXR1cyA9IGdldE9wZXJhdGlvblN0YXR1cyh7IHJlc3BvbnNlLCBzdGF0ZSwgb3BlcmF0aW9uTG9jYXRpb24gfSk7XG4gICAgcHJvY2Vzc09wZXJhdGlvblN0YXR1cyh7IHN0YXRlLCBzdGF0dXMsIHN0YXRlUHJveHksIHJlc3BvbnNlLCBzZXRFcnJvckFzUmVzdWx0LCBwcm9jZXNzUmVzdWx0IH0pO1xuICAgIHJldHVybiBzdGF0ZTtcbn1cbmV4cG9ydHMuaW5pdE9wZXJhdGlvbiA9IGluaXRPcGVyYXRpb247XG5hc3luYyBmdW5jdGlvbiBwb2xsT3BlcmF0aW9uSGVscGVyKGlucHV0cykge1xuICAgIGNvbnN0IHsgcG9sbCwgc3RhdGUsIHN0YXRlUHJveHksIG9wZXJhdGlvbkxvY2F0aW9uLCBnZXRPcGVyYXRpb25TdGF0dXMsIGdldFJlc291cmNlTG9jYXRpb24sIGlzT3BlcmF0aW9uRXJyb3IsIG9wdGlvbnMsIH0gPSBpbnB1dHM7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBwb2xsKG9wZXJhdGlvbkxvY2F0aW9uLCBvcHRpb25zKS5jYXRjaChzZXRTdGF0ZUVycm9yKHtcbiAgICAgICAgc3RhdGUsXG4gICAgICAgIHN0YXRlUHJveHksXG4gICAgICAgIGlzT3BlcmF0aW9uRXJyb3IsXG4gICAgfSkpO1xuICAgIGNvbnN0IHN0YXR1cyA9IGdldE9wZXJhdGlvblN0YXR1cyhyZXNwb25zZSwgc3RhdGUpO1xuICAgIGxvZ2dlcl9qc18xLmxvZ2dlci52ZXJib3NlKGBMUk86IFN0YXR1czpcXG5cXHRQb2xsaW5nIGZyb206ICR7c3RhdGUuY29uZmlnLm9wZXJhdGlvbkxvY2F0aW9ufVxcblxcdE9wZXJhdGlvbiBzdGF0dXM6ICR7c3RhdHVzfVxcblxcdFBvbGxpbmcgc3RhdHVzOiAke2NvbnN0YW50c19qc18xLnRlcm1pbmFsU3RhdGVzLmluY2x1ZGVzKHN0YXR1cykgPyBcIlN0b3BwZWRcIiA6IFwiUnVubmluZ1wifWApO1xuICAgIGlmIChzdGF0dXMgPT09IFwic3VjY2VlZGVkXCIpIHtcbiAgICAgICAgY29uc3QgcmVzb3VyY2VMb2NhdGlvbiA9IGdldFJlc291cmNlTG9jYXRpb24ocmVzcG9uc2UsIHN0YXRlKTtcbiAgICAgICAgaWYgKHJlc291cmNlTG9jYXRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZTogYXdhaXQgcG9sbChyZXNvdXJjZUxvY2F0aW9uKS5jYXRjaChzZXRTdGF0ZUVycm9yKHsgc3RhdGUsIHN0YXRlUHJveHksIGlzT3BlcmF0aW9uRXJyb3IgfSkpLFxuICAgICAgICAgICAgICAgIHN0YXR1cyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHsgcmVzcG9uc2UsIHN0YXR1cyB9O1xufVxuLyoqIFBvbGxzIHRoZSBsb25nLXJ1bm5pbmcgb3BlcmF0aW9uLiAqL1xuYXN5bmMgZnVuY3Rpb24gcG9sbE9wZXJhdGlvbihpbnB1dHMpIHtcbiAgICBjb25zdCB7IHBvbGwsIHN0YXRlLCBzdGF0ZVByb3h5LCBvcHRpb25zLCBnZXRPcGVyYXRpb25TdGF0dXMsIGdldFJlc291cmNlTG9jYXRpb24sIGdldE9wZXJhdGlvbkxvY2F0aW9uLCBpc09wZXJhdGlvbkVycm9yLCB3aXRoT3BlcmF0aW9uTG9jYXRpb24sIGdldFBvbGxpbmdJbnRlcnZhbCwgcHJvY2Vzc1Jlc3VsdCwgZ2V0RXJyb3IsIHVwZGF0ZVN0YXRlLCBzZXREZWxheSwgaXNEb25lLCBzZXRFcnJvckFzUmVzdWx0LCB9ID0gaW5wdXRzO1xuICAgIGNvbnN0IHsgb3BlcmF0aW9uTG9jYXRpb24gfSA9IHN0YXRlLmNvbmZpZztcbiAgICBpZiAob3BlcmF0aW9uTG9jYXRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCB7IHJlc3BvbnNlLCBzdGF0dXMgfSA9IGF3YWl0IHBvbGxPcGVyYXRpb25IZWxwZXIoe1xuICAgICAgICAgICAgcG9sbCxcbiAgICAgICAgICAgIGdldE9wZXJhdGlvblN0YXR1cyxcbiAgICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgICAgc3RhdGVQcm94eSxcbiAgICAgICAgICAgIG9wZXJhdGlvbkxvY2F0aW9uLFxuICAgICAgICAgICAgZ2V0UmVzb3VyY2VMb2NhdGlvbixcbiAgICAgICAgICAgIGlzT3BlcmF0aW9uRXJyb3IsXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICB9KTtcbiAgICAgICAgcHJvY2Vzc09wZXJhdGlvblN0YXR1cyh7XG4gICAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgICByZXNwb25zZSxcbiAgICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgICAgc3RhdGVQcm94eSxcbiAgICAgICAgICAgIGlzRG9uZSxcbiAgICAgICAgICAgIHByb2Nlc3NSZXN1bHQsXG4gICAgICAgICAgICBnZXRFcnJvcixcbiAgICAgICAgICAgIHNldEVycm9yQXNSZXN1bHQsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIWNvbnN0YW50c19qc18xLnRlcm1pbmFsU3RhdGVzLmluY2x1ZGVzKHN0YXR1cykpIHtcbiAgICAgICAgICAgIGNvbnN0IGludGVydmFsSW5NcyA9IGdldFBvbGxpbmdJbnRlcnZhbCA9PT0gbnVsbCB8fCBnZXRQb2xsaW5nSW50ZXJ2YWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGdldFBvbGxpbmdJbnRlcnZhbChyZXNwb25zZSk7XG4gICAgICAgICAgICBpZiAoaW50ZXJ2YWxJbk1zKVxuICAgICAgICAgICAgICAgIHNldERlbGF5KGludGVydmFsSW5Ncyk7XG4gICAgICAgICAgICBjb25zdCBsb2NhdGlvbiA9IGdldE9wZXJhdGlvbkxvY2F0aW9uID09PSBudWxsIHx8IGdldE9wZXJhdGlvbkxvY2F0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiBnZXRPcGVyYXRpb25Mb2NhdGlvbihyZXNwb25zZSwgc3RhdGUpO1xuICAgICAgICAgICAgaWYgKGxvY2F0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc1VwZGF0ZWQgPSBvcGVyYXRpb25Mb2NhdGlvbiAhPT0gbG9jYXRpb247XG4gICAgICAgICAgICAgICAgc3RhdGUuY29uZmlnLm9wZXJhdGlvbkxvY2F0aW9uID0gbG9jYXRpb247XG4gICAgICAgICAgICAgICAgd2l0aE9wZXJhdGlvbkxvY2F0aW9uID09PSBudWxsIHx8IHdpdGhPcGVyYXRpb25Mb2NhdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogd2l0aE9wZXJhdGlvbkxvY2F0aW9uKGxvY2F0aW9uLCBpc1VwZGF0ZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHdpdGhPcGVyYXRpb25Mb2NhdGlvbiA9PT0gbnVsbCB8fCB3aXRoT3BlcmF0aW9uTG9jYXRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHdpdGhPcGVyYXRpb25Mb2NhdGlvbihvcGVyYXRpb25Mb2NhdGlvbiwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZVN0YXRlID09PSBudWxsIHx8IHVwZGF0ZVN0YXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiB1cGRhdGVTdGF0ZShzdGF0ZSwgcmVzcG9uc2UpO1xuICAgIH1cbn1cbmV4cG9ydHMucG9sbE9wZXJhdGlvbiA9IHBvbGxPcGVyYXRpb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1vcGVyYXRpb24uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5wb2xsSHR0cE9wZXJhdGlvbiA9IGV4cG9ydHMuaXNPcGVyYXRpb25FcnJvciA9IGV4cG9ydHMuZ2V0UmVzb3VyY2VMb2NhdGlvbiA9IGV4cG9ydHMuZ2V0T3BlcmF0aW9uU3RhdHVzID0gZXhwb3J0cy5nZXRPcGVyYXRpb25Mb2NhdGlvbiA9IGV4cG9ydHMuaW5pdEh0dHBPcGVyYXRpb24gPSBleHBvcnRzLmdldFN0YXR1c0Zyb21Jbml0aWFsUmVzcG9uc2UgPSBleHBvcnRzLmdldEVycm9yRnJvbVJlc3BvbnNlID0gZXhwb3J0cy5wYXJzZVJldHJ5QWZ0ZXIgPSBleHBvcnRzLmluZmVyTHJvTW9kZSA9IHZvaWQgMDtcbmNvbnN0IG9wZXJhdGlvbl9qc18xID0gcmVxdWlyZShcIi4uL3BvbGxlci9vcGVyYXRpb24uanNcIik7XG5jb25zdCBsb2dnZXJfanNfMSA9IHJlcXVpcmUoXCIuLi9sb2dnZXIuanNcIik7XG5mdW5jdGlvbiBnZXRPcGVyYXRpb25Mb2NhdGlvblBvbGxpbmdVcmwoaW5wdXRzKSB7XG4gICAgY29uc3QgeyBhenVyZUFzeW5jT3BlcmF0aW9uLCBvcGVyYXRpb25Mb2NhdGlvbiB9ID0gaW5wdXRzO1xuICAgIHJldHVybiBvcGVyYXRpb25Mb2NhdGlvbiAhPT0gbnVsbCAmJiBvcGVyYXRpb25Mb2NhdGlvbiAhPT0gdm9pZCAwID8gb3BlcmF0aW9uTG9jYXRpb24gOiBhenVyZUFzeW5jT3BlcmF0aW9uO1xufVxuZnVuY3Rpb24gZ2V0TG9jYXRpb25IZWFkZXIocmF3UmVzcG9uc2UpIHtcbiAgICByZXR1cm4gcmF3UmVzcG9uc2UuaGVhZGVyc1tcImxvY2F0aW9uXCJdO1xufVxuZnVuY3Rpb24gZ2V0T3BlcmF0aW9uTG9jYXRpb25IZWFkZXIocmF3UmVzcG9uc2UpIHtcbiAgICByZXR1cm4gcmF3UmVzcG9uc2UuaGVhZGVyc1tcIm9wZXJhdGlvbi1sb2NhdGlvblwiXTtcbn1cbmZ1bmN0aW9uIGdldEF6dXJlQXN5bmNPcGVyYXRpb25IZWFkZXIocmF3UmVzcG9uc2UpIHtcbiAgICByZXR1cm4gcmF3UmVzcG9uc2UuaGVhZGVyc1tcImF6dXJlLWFzeW5jb3BlcmF0aW9uXCJdO1xufVxuZnVuY3Rpb24gZmluZFJlc291cmNlTG9jYXRpb24oaW5wdXRzKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IHsgbG9jYXRpb24sIHJlcXVlc3RNZXRob2QsIHJlcXVlc3RQYXRoLCByZXNvdXJjZUxvY2F0aW9uQ29uZmlnIH0gPSBpbnB1dHM7XG4gICAgc3dpdGNoIChyZXF1ZXN0TWV0aG9kKSB7XG4gICAgICAgIGNhc2UgXCJQVVRcIjoge1xuICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3RQYXRoO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJERUxFVEVcIjoge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwiUEFUQ0hcIjoge1xuICAgICAgICAgICAgcmV0dXJuIChfYSA9IGdldERlZmF1bHQoKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogcmVxdWVzdFBhdGg7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgcmV0dXJuIGdldERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBnZXREZWZhdWx0KCkge1xuICAgICAgICBzd2l0Y2ggKHJlc291cmNlTG9jYXRpb25Db25maWcpIHtcbiAgICAgICAgICAgIGNhc2UgXCJhenVyZS1hc3luYy1vcGVyYXRpb25cIjoge1xuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwib3JpZ2luYWwtdXJpXCI6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVxdWVzdFBhdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwibG9jYXRpb25cIjpcbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbG9jYXRpb247XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBpbmZlckxyb01vZGUoaW5wdXRzKSB7XG4gICAgY29uc3QgeyByYXdSZXNwb25zZSwgcmVxdWVzdE1ldGhvZCwgcmVxdWVzdFBhdGgsIHJlc291cmNlTG9jYXRpb25Db25maWcgfSA9IGlucHV0cztcbiAgICBjb25zdCBvcGVyYXRpb25Mb2NhdGlvbiA9IGdldE9wZXJhdGlvbkxvY2F0aW9uSGVhZGVyKHJhd1Jlc3BvbnNlKTtcbiAgICBjb25zdCBhenVyZUFzeW5jT3BlcmF0aW9uID0gZ2V0QXp1cmVBc3luY09wZXJhdGlvbkhlYWRlcihyYXdSZXNwb25zZSk7XG4gICAgY29uc3QgcG9sbGluZ1VybCA9IGdldE9wZXJhdGlvbkxvY2F0aW9uUG9sbGluZ1VybCh7IG9wZXJhdGlvbkxvY2F0aW9uLCBhenVyZUFzeW5jT3BlcmF0aW9uIH0pO1xuICAgIGNvbnN0IGxvY2F0aW9uID0gZ2V0TG9jYXRpb25IZWFkZXIocmF3UmVzcG9uc2UpO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRSZXF1ZXN0TWV0aG9kID0gcmVxdWVzdE1ldGhvZCA9PT0gbnVsbCB8fCByZXF1ZXN0TWV0aG9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZXF1ZXN0TWV0aG9kLnRvTG9jYWxlVXBwZXJDYXNlKCk7XG4gICAgaWYgKHBvbGxpbmdVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbW9kZTogXCJPcGVyYXRpb25Mb2NhdGlvblwiLFxuICAgICAgICAgICAgb3BlcmF0aW9uTG9jYXRpb246IHBvbGxpbmdVcmwsXG4gICAgICAgICAgICByZXNvdXJjZUxvY2F0aW9uOiBmaW5kUmVzb3VyY2VMb2NhdGlvbih7XG4gICAgICAgICAgICAgICAgcmVxdWVzdE1ldGhvZDogbm9ybWFsaXplZFJlcXVlc3RNZXRob2QsXG4gICAgICAgICAgICAgICAgbG9jYXRpb24sXG4gICAgICAgICAgICAgICAgcmVxdWVzdFBhdGgsXG4gICAgICAgICAgICAgICAgcmVzb3VyY2VMb2NhdGlvbkNvbmZpZyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBlbHNlIGlmIChsb2NhdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBtb2RlOiBcIlJlc291cmNlTG9jYXRpb25cIixcbiAgICAgICAgICAgIG9wZXJhdGlvbkxvY2F0aW9uOiBsb2NhdGlvbixcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZWxzZSBpZiAobm9ybWFsaXplZFJlcXVlc3RNZXRob2QgPT09IFwiUFVUXCIgJiYgcmVxdWVzdFBhdGgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1vZGU6IFwiQm9keVwiLFxuICAgICAgICAgICAgb3BlcmF0aW9uTG9jYXRpb246IHJlcXVlc3RQYXRoLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59XG5leHBvcnRzLmluZmVyTHJvTW9kZSA9IGluZmVyTHJvTW9kZTtcbmZ1bmN0aW9uIHRyYW5zZm9ybVN0YXR1cyhpbnB1dHMpIHtcbiAgICBjb25zdCB7IHN0YXR1cywgc3RhdHVzQ29kZSB9ID0gaW5wdXRzO1xuICAgIGlmICh0eXBlb2Ygc3RhdHVzICE9PSBcInN0cmluZ1wiICYmIHN0YXR1cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgUG9sbGluZyB3YXMgdW5zdWNjZXNzZnVsLiBFeHBlY3RlZCBzdGF0dXMgdG8gaGF2ZSBhIHN0cmluZyB2YWx1ZSBvciBubyB2YWx1ZSBidXQgaXQgaGFzIGluc3RlYWQ6ICR7c3RhdHVzfS4gVGhpcyBkb2Vzbid0IG5lY2Vzc2FyaWx5IGluZGljYXRlIHRoZSBvcGVyYXRpb24gaGFzIGZhaWxlZC4gQ2hlY2sgeW91ciBBenVyZSBzdWJzY3JpcHRpb24gb3IgcmVzb3VyY2Ugc3RhdHVzIGZvciBtb3JlIGluZm9ybWF0aW9uLmApO1xuICAgIH1cbiAgICBzd2l0Y2ggKHN0YXR1cyA9PT0gbnVsbCB8fCBzdGF0dXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHN0YXR1cy50b0xvY2FsZUxvd2VyQ2FzZSgpKSB7XG4gICAgICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgICAgICAgcmV0dXJuIHRvT3BlcmF0aW9uU3RhdHVzKHN0YXR1c0NvZGUpO1xuICAgICAgICBjYXNlIFwic3VjY2VlZGVkXCI6XG4gICAgICAgICAgICByZXR1cm4gXCJzdWNjZWVkZWRcIjtcbiAgICAgICAgY2FzZSBcImZhaWxlZFwiOlxuICAgICAgICAgICAgcmV0dXJuIFwiZmFpbGVkXCI7XG4gICAgICAgIGNhc2UgXCJydW5uaW5nXCI6XG4gICAgICAgIGNhc2UgXCJhY2NlcHRlZFwiOlxuICAgICAgICBjYXNlIFwic3RhcnRlZFwiOlxuICAgICAgICBjYXNlIFwiY2FuY2VsaW5nXCI6XG4gICAgICAgIGNhc2UgXCJjYW5jZWxsaW5nXCI6XG4gICAgICAgICAgICByZXR1cm4gXCJydW5uaW5nXCI7XG4gICAgICAgIGNhc2UgXCJjYW5jZWxlZFwiOlxuICAgICAgICBjYXNlIFwiY2FuY2VsbGVkXCI6XG4gICAgICAgICAgICByZXR1cm4gXCJjYW5jZWxlZFwiO1xuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBsb2dnZXJfanNfMS5sb2dnZXIudmVyYm9zZShgTFJPOiB1bnJlY29nbml6ZWQgb3BlcmF0aW9uIHN0YXR1czogJHtzdGF0dXN9YCk7XG4gICAgICAgICAgICByZXR1cm4gc3RhdHVzO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0U3RhdHVzKHJhd1Jlc3BvbnNlKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IHsgc3RhdHVzIH0gPSAoX2EgPSByYXdSZXNwb25zZS5ib2R5KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB7fTtcbiAgICByZXR1cm4gdHJhbnNmb3JtU3RhdHVzKHsgc3RhdHVzLCBzdGF0dXNDb2RlOiByYXdSZXNwb25zZS5zdGF0dXNDb2RlIH0pO1xufVxuZnVuY3Rpb24gZ2V0UHJvdmlzaW9uaW5nU3RhdGUocmF3UmVzcG9uc2UpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGNvbnN0IHsgcHJvcGVydGllcywgcHJvdmlzaW9uaW5nU3RhdGUgfSA9IChfYSA9IHJhd1Jlc3BvbnNlLmJvZHkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHt9O1xuICAgIGNvbnN0IHN0YXR1cyA9IChfYiA9IHByb3BlcnRpZXMgPT09IG51bGwgfHwgcHJvcGVydGllcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcHJvcGVydGllcy5wcm92aXNpb25pbmdTdGF0ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogcHJvdmlzaW9uaW5nU3RhdGU7XG4gICAgcmV0dXJuIHRyYW5zZm9ybVN0YXR1cyh7IHN0YXR1cywgc3RhdHVzQ29kZTogcmF3UmVzcG9uc2Uuc3RhdHVzQ29kZSB9KTtcbn1cbmZ1bmN0aW9uIHRvT3BlcmF0aW9uU3RhdHVzKHN0YXR1c0NvZGUpIHtcbiAgICBpZiAoc3RhdHVzQ29kZSA9PT0gMjAyKSB7XG4gICAgICAgIHJldHVybiBcInJ1bm5pbmdcIjtcbiAgICB9XG4gICAgZWxzZSBpZiAoc3RhdHVzQ29kZSA8IDMwMCkge1xuICAgICAgICByZXR1cm4gXCJzdWNjZWVkZWRcIjtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBcImZhaWxlZFwiO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHBhcnNlUmV0cnlBZnRlcih7IHJhd1Jlc3BvbnNlIH0pIHtcbiAgICBjb25zdCByZXRyeUFmdGVyID0gcmF3UmVzcG9uc2UuaGVhZGVyc1tcInJldHJ5LWFmdGVyXCJdO1xuICAgIGlmIChyZXRyeUFmdGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gUmV0cnktQWZ0ZXIgaGVhZGVyIHZhbHVlIGlzIGVpdGhlciBpbiBIVFRQIGRhdGUgZm9ybWF0LCBvciBpbiBzZWNvbmRzXG4gICAgICAgIGNvbnN0IHJldHJ5QWZ0ZXJJblNlY29uZHMgPSBwYXJzZUludChyZXRyeUFmdGVyKTtcbiAgICAgICAgcmV0dXJuIGlzTmFOKHJldHJ5QWZ0ZXJJblNlY29uZHMpXG4gICAgICAgICAgICA/IGNhbGN1bGF0ZVBvbGxpbmdJbnRlcnZhbEZyb21EYXRlKG5ldyBEYXRlKHJldHJ5QWZ0ZXIpKVxuICAgICAgICAgICAgOiByZXRyeUFmdGVySW5TZWNvbmRzICogMTAwMDtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmV4cG9ydHMucGFyc2VSZXRyeUFmdGVyID0gcGFyc2VSZXRyeUFmdGVyO1xuZnVuY3Rpb24gZ2V0RXJyb3JGcm9tUmVzcG9uc2UocmVzcG9uc2UpIHtcbiAgICBjb25zdCBlcnJvciA9IGFjY2Vzc0JvZHlQcm9wZXJ0eShyZXNwb25zZSwgXCJlcnJvclwiKTtcbiAgICBpZiAoIWVycm9yKSB7XG4gICAgICAgIGxvZ2dlcl9qc18xLmxvZ2dlci53YXJuaW5nKGBUaGUgbG9uZy1ydW5uaW5nIG9wZXJhdGlvbiBmYWlsZWQgYnV0IHRoZXJlIGlzIG5vIGVycm9yIHByb3BlcnR5IGluIHRoZSByZXNwb25zZSdzIGJvZHlgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWVycm9yLmNvZGUgfHwgIWVycm9yLm1lc3NhZ2UpIHtcbiAgICAgICAgbG9nZ2VyX2pzXzEubG9nZ2VyLndhcm5pbmcoYFRoZSBsb25nLXJ1bm5pbmcgb3BlcmF0aW9uIGZhaWxlZCBidXQgdGhlIGVycm9yIHByb3BlcnR5IGluIHRoZSByZXNwb25zZSdzIGJvZHkgZG9lc24ndCBjb250YWluIGNvZGUgb3IgbWVzc2FnZWApO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHJldHVybiBlcnJvcjtcbn1cbmV4cG9ydHMuZ2V0RXJyb3JGcm9tUmVzcG9uc2UgPSBnZXRFcnJvckZyb21SZXNwb25zZTtcbmZ1bmN0aW9uIGNhbGN1bGF0ZVBvbGxpbmdJbnRlcnZhbEZyb21EYXRlKHJldHJ5QWZ0ZXJEYXRlKSB7XG4gICAgY29uc3QgdGltZU5vdyA9IE1hdGguZmxvb3IobmV3IERhdGUoKS5nZXRUaW1lKCkpO1xuICAgIGNvbnN0IHJldHJ5QWZ0ZXJUaW1lID0gcmV0cnlBZnRlckRhdGUuZ2V0VGltZSgpO1xuICAgIGlmICh0aW1lTm93IDwgcmV0cnlBZnRlclRpbWUpIHtcbiAgICAgICAgcmV0dXJuIHJldHJ5QWZ0ZXJUaW1lIC0gdGltZU5vdztcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGdldFN0YXR1c0Zyb21Jbml0aWFsUmVzcG9uc2UoaW5wdXRzKSB7XG4gICAgY29uc3QgeyByZXNwb25zZSwgc3RhdGUsIG9wZXJhdGlvbkxvY2F0aW9uIH0gPSBpbnB1dHM7XG4gICAgZnVuY3Rpb24gaGVscGVyKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IG1vZGUgPSAoX2EgPSBzdGF0ZS5jb25maWcubWV0YWRhdGEpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVtcIm1vZGVcIl07XG4gICAgICAgIHN3aXRjaCAobW9kZSkge1xuICAgICAgICAgICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRvT3BlcmF0aW9uU3RhdHVzKHJlc3BvbnNlLnJhd1Jlc3BvbnNlLnN0YXR1c0NvZGUpO1xuICAgICAgICAgICAgY2FzZSBcIkJvZHlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0T3BlcmF0aW9uU3RhdHVzKHJlc3BvbnNlLCBzdGF0ZSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBcInJ1bm5pbmdcIjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBzdGF0dXMgPSBoZWxwZXIoKTtcbiAgICByZXR1cm4gc3RhdHVzID09PSBcInJ1bm5pbmdcIiAmJiBvcGVyYXRpb25Mb2NhdGlvbiA9PT0gdW5kZWZpbmVkID8gXCJzdWNjZWVkZWRcIiA6IHN0YXR1cztcbn1cbmV4cG9ydHMuZ2V0U3RhdHVzRnJvbUluaXRpYWxSZXNwb25zZSA9IGdldFN0YXR1c0Zyb21Jbml0aWFsUmVzcG9uc2U7XG4vKipcbiAqIEluaXRpYXRlcyB0aGUgbG9uZy1ydW5uaW5nIG9wZXJhdGlvbi5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gaW5pdEh0dHBPcGVyYXRpb24oaW5wdXRzKSB7XG4gICAgY29uc3QgeyBzdGF0ZVByb3h5LCByZXNvdXJjZUxvY2F0aW9uQ29uZmlnLCBwcm9jZXNzUmVzdWx0LCBscm8sIHNldEVycm9yQXNSZXN1bHQgfSA9IGlucHV0cztcbiAgICByZXR1cm4gKDAsIG9wZXJhdGlvbl9qc18xLmluaXRPcGVyYXRpb24pKHtcbiAgICAgICAgaW5pdDogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBscm8uc2VuZEluaXRpYWxSZXF1ZXN0KCk7XG4gICAgICAgICAgICBjb25zdCBjb25maWcgPSBpbmZlckxyb01vZGUoe1xuICAgICAgICAgICAgICAgIHJhd1Jlc3BvbnNlOiByZXNwb25zZS5yYXdSZXNwb25zZSxcbiAgICAgICAgICAgICAgICByZXF1ZXN0UGF0aDogbHJvLnJlcXVlc3RQYXRoLFxuICAgICAgICAgICAgICAgIHJlcXVlc3RNZXRob2Q6IGxyby5yZXF1ZXN0TWV0aG9kLFxuICAgICAgICAgICAgICAgIHJlc291cmNlTG9jYXRpb25Db25maWcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHsgcmVzcG9uc2UsIG9wZXJhdGlvbkxvY2F0aW9uOiBjb25maWcgPT09IG51bGwgfHwgY29uZmlnID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb25maWcub3BlcmF0aW9uTG9jYXRpb24sIHJlc291cmNlTG9jYXRpb246IGNvbmZpZyA9PT0gbnVsbCB8fCBjb25maWcgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbmZpZy5yZXNvdXJjZUxvY2F0aW9uIH0sICgoY29uZmlnID09PSBudWxsIHx8IGNvbmZpZyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29uZmlnLm1vZGUpID8geyBtZXRhZGF0YTogeyBtb2RlOiBjb25maWcubW9kZSB9IH0gOiB7fSkpO1xuICAgICAgICB9LFxuICAgICAgICBzdGF0ZVByb3h5LFxuICAgICAgICBwcm9jZXNzUmVzdWx0OiBwcm9jZXNzUmVzdWx0XG4gICAgICAgICAgICA/ICh7IGZsYXRSZXNwb25zZSB9LCBzdGF0ZSkgPT4gcHJvY2Vzc1Jlc3VsdChmbGF0UmVzcG9uc2UsIHN0YXRlKVxuICAgICAgICAgICAgOiAoeyBmbGF0UmVzcG9uc2UgfSkgPT4gZmxhdFJlc3BvbnNlLFxuICAgICAgICBnZXRPcGVyYXRpb25TdGF0dXM6IGdldFN0YXR1c0Zyb21Jbml0aWFsUmVzcG9uc2UsXG4gICAgICAgIHNldEVycm9yQXNSZXN1bHQsXG4gICAgfSk7XG59XG5leHBvcnRzLmluaXRIdHRwT3BlcmF0aW9uID0gaW5pdEh0dHBPcGVyYXRpb247XG5mdW5jdGlvbiBnZXRPcGVyYXRpb25Mb2NhdGlvbih7IHJhd1Jlc3BvbnNlIH0sIHN0YXRlKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IG1vZGUgPSAoX2EgPSBzdGF0ZS5jb25maWcubWV0YWRhdGEpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVtcIm1vZGVcIl07XG4gICAgc3dpdGNoIChtb2RlKSB7XG4gICAgICAgIGNhc2UgXCJPcGVyYXRpb25Mb2NhdGlvblwiOiB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0T3BlcmF0aW9uTG9jYXRpb25Qb2xsaW5nVXJsKHtcbiAgICAgICAgICAgICAgICBvcGVyYXRpb25Mb2NhdGlvbjogZ2V0T3BlcmF0aW9uTG9jYXRpb25IZWFkZXIocmF3UmVzcG9uc2UpLFxuICAgICAgICAgICAgICAgIGF6dXJlQXN5bmNPcGVyYXRpb246IGdldEF6dXJlQXN5bmNPcGVyYXRpb25IZWFkZXIocmF3UmVzcG9uc2UpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcIlJlc291cmNlTG9jYXRpb25cIjoge1xuICAgICAgICAgICAgcmV0dXJuIGdldExvY2F0aW9uSGVhZGVyKHJhd1Jlc3BvbnNlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwiQm9keVwiOlxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5nZXRPcGVyYXRpb25Mb2NhdGlvbiA9IGdldE9wZXJhdGlvbkxvY2F0aW9uO1xuZnVuY3Rpb24gZ2V0T3BlcmF0aW9uU3RhdHVzKHsgcmF3UmVzcG9uc2UgfSwgc3RhdGUpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3QgbW9kZSA9IChfYSA9IHN0YXRlLmNvbmZpZy5tZXRhZGF0YSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hW1wibW9kZVwiXTtcbiAgICBzd2l0Y2ggKG1vZGUpIHtcbiAgICAgICAgY2FzZSBcIk9wZXJhdGlvbkxvY2F0aW9uXCI6IHtcbiAgICAgICAgICAgIHJldHVybiBnZXRTdGF0dXMocmF3UmVzcG9uc2UpO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJSZXNvdXJjZUxvY2F0aW9uXCI6IHtcbiAgICAgICAgICAgIHJldHVybiB0b09wZXJhdGlvblN0YXR1cyhyYXdSZXNwb25zZS5zdGF0dXNDb2RlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwiQm9keVwiOiB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0UHJvdmlzaW9uaW5nU3RhdGUocmF3UmVzcG9uc2UpO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludGVybmFsIGVycm9yOiBVbmV4cGVjdGVkIG9wZXJhdGlvbiBtb2RlOiAke21vZGV9YCk7XG4gICAgfVxufVxuZXhwb3J0cy5nZXRPcGVyYXRpb25TdGF0dXMgPSBnZXRPcGVyYXRpb25TdGF0dXM7XG5mdW5jdGlvbiBhY2Nlc3NCb2R5UHJvcGVydHkoeyBmbGF0UmVzcG9uc2UsIHJhd1Jlc3BvbnNlIH0sIHByb3ApIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIHJldHVybiAoX2EgPSBmbGF0UmVzcG9uc2UgPT09IG51bGwgfHwgZmxhdFJlc3BvbnNlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBmbGF0UmVzcG9uc2VbcHJvcF0pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IChfYiA9IHJhd1Jlc3BvbnNlLmJvZHkpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYltwcm9wXTtcbn1cbmZ1bmN0aW9uIGdldFJlc291cmNlTG9jYXRpb24ocmVzLCBzdGF0ZSkge1xuICAgIGNvbnN0IGxvYyA9IGFjY2Vzc0JvZHlQcm9wZXJ0eShyZXMsIFwicmVzb3VyY2VMb2NhdGlvblwiKTtcbiAgICBpZiAobG9jICYmIHR5cGVvZiBsb2MgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgc3RhdGUuY29uZmlnLnJlc291cmNlTG9jYXRpb24gPSBsb2M7XG4gICAgfVxuICAgIHJldHVybiBzdGF0ZS5jb25maWcucmVzb3VyY2VMb2NhdGlvbjtcbn1cbmV4cG9ydHMuZ2V0UmVzb3VyY2VMb2NhdGlvbiA9IGdldFJlc291cmNlTG9jYXRpb247XG5mdW5jdGlvbiBpc09wZXJhdGlvbkVycm9yKGUpIHtcbiAgICByZXR1cm4gZS5uYW1lID09PSBcIlJlc3RFcnJvclwiO1xufVxuZXhwb3J0cy5pc09wZXJhdGlvbkVycm9yID0gaXNPcGVyYXRpb25FcnJvcjtcbi8qKiBQb2xscyB0aGUgbG9uZy1ydW5uaW5nIG9wZXJhdGlvbi4gKi9cbmFzeW5jIGZ1bmN0aW9uIHBvbGxIdHRwT3BlcmF0aW9uKGlucHV0cykge1xuICAgIGNvbnN0IHsgbHJvLCBzdGF0ZVByb3h5LCBvcHRpb25zLCBwcm9jZXNzUmVzdWx0LCB1cGRhdGVTdGF0ZSwgc2V0RGVsYXksIHN0YXRlLCBzZXRFcnJvckFzUmVzdWx0LCB9ID0gaW5wdXRzO1xuICAgIHJldHVybiAoMCwgb3BlcmF0aW9uX2pzXzEucG9sbE9wZXJhdGlvbikoe1xuICAgICAgICBzdGF0ZSxcbiAgICAgICAgc3RhdGVQcm94eSxcbiAgICAgICAgc2V0RGVsYXksXG4gICAgICAgIHByb2Nlc3NSZXN1bHQ6IHByb2Nlc3NSZXN1bHRcbiAgICAgICAgICAgID8gKHsgZmxhdFJlc3BvbnNlIH0sIGlucHV0U3RhdGUpID0+IHByb2Nlc3NSZXN1bHQoZmxhdFJlc3BvbnNlLCBpbnB1dFN0YXRlKVxuICAgICAgICAgICAgOiAoeyBmbGF0UmVzcG9uc2UgfSkgPT4gZmxhdFJlc3BvbnNlLFxuICAgICAgICBnZXRFcnJvcjogZ2V0RXJyb3JGcm9tUmVzcG9uc2UsXG4gICAgICAgIHVwZGF0ZVN0YXRlLFxuICAgICAgICBnZXRQb2xsaW5nSW50ZXJ2YWw6IHBhcnNlUmV0cnlBZnRlcixcbiAgICAgICAgZ2V0T3BlcmF0aW9uTG9jYXRpb24sXG4gICAgICAgIGdldE9wZXJhdGlvblN0YXR1cyxcbiAgICAgICAgaXNPcGVyYXRpb25FcnJvcixcbiAgICAgICAgZ2V0UmVzb3VyY2VMb2NhdGlvbixcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBleHBhbnNpb24gaGVyZSBpcyBpbnRlbnRpb25hbCBiZWNhdXNlIGBscm9gIGNvdWxkIGJlIGFuIG9iamVjdCB0aGF0XG4gICAgICAgICAqIHJlZmVyZW5jZXMgYW4gaW5uZXIgdGhpcywgc28gd2UgbmVlZCB0byBwcmVzZXJ2ZSBhIHJlZmVyZW5jZSB0byBpdC5cbiAgICAgICAgICovXG4gICAgICAgIHBvbGw6IGFzeW5jIChsb2NhdGlvbiwgaW5wdXRPcHRpb25zKSA9PiBscm8uc2VuZFBvbGxSZXF1ZXN0KGxvY2F0aW9uLCBpbnB1dE9wdGlvbnMpLFxuICAgICAgICBzZXRFcnJvckFzUmVzdWx0LFxuICAgIH0pO1xufVxuZXhwb3J0cy5wb2xsSHR0cE9wZXJhdGlvbiA9IHBvbGxIdHRwT3BlcmF0aW9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9b3BlcmF0aW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYnVpbGRDcmVhdGVQb2xsZXIgPSB2b2lkIDA7XG5jb25zdCBvcGVyYXRpb25fanNfMSA9IHJlcXVpcmUoXCIuL29wZXJhdGlvbi5qc1wiKTtcbmNvbnN0IGNvbnN0YW50c19qc18xID0gcmVxdWlyZShcIi4vY29uc3RhbnRzLmpzXCIpO1xuY29uc3QgY29yZV91dGlsXzEgPSByZXF1aXJlKFwiQGF6dXJlL2NvcmUtdXRpbFwiKTtcbmNvbnN0IGNyZWF0ZVN0YXRlUHJveHkgPSAoKSA9PiAoe1xuICAgIC8qKlxuICAgICAqIFRoZSBzdGF0ZSBhdCB0aGlzIHBvaW50IGlzIGNyZWF0ZWQgdG8gYmUgb2YgdHlwZSBPcGVyYXRpb25TdGF0ZTxUUmVzdWx0Pi5cbiAgICAgKiBJdCB3aWxsIGJlIHVwZGF0ZWQgbGF0ZXIgdG8gYmUgb2YgdHlwZSBUU3RhdGUgd2hlbiB0aGVcbiAgICAgKiBjdXN0b21lci1wcm92aWRlZCBjYWxsYmFjaywgYHVwZGF0ZVN0YXRlYCwgaXMgY2FsbGVkIGR1cmluZyBwb2xsaW5nLlxuICAgICAqL1xuICAgIGluaXRTdGF0ZTogKGNvbmZpZykgPT4gKHsgc3RhdHVzOiBcInJ1bm5pbmdcIiwgY29uZmlnIH0pLFxuICAgIHNldENhbmNlbGVkOiAoc3RhdGUpID0+IChzdGF0ZS5zdGF0dXMgPSBcImNhbmNlbGVkXCIpLFxuICAgIHNldEVycm9yOiAoc3RhdGUsIGVycm9yKSA9PiAoc3RhdGUuZXJyb3IgPSBlcnJvciksXG4gICAgc2V0UmVzdWx0OiAoc3RhdGUsIHJlc3VsdCkgPT4gKHN0YXRlLnJlc3VsdCA9IHJlc3VsdCksXG4gICAgc2V0UnVubmluZzogKHN0YXRlKSA9PiAoc3RhdGUuc3RhdHVzID0gXCJydW5uaW5nXCIpLFxuICAgIHNldFN1Y2NlZWRlZDogKHN0YXRlKSA9PiAoc3RhdGUuc3RhdHVzID0gXCJzdWNjZWVkZWRcIiksXG4gICAgc2V0RmFpbGVkOiAoc3RhdGUpID0+IChzdGF0ZS5zdGF0dXMgPSBcImZhaWxlZFwiKSxcbiAgICBnZXRFcnJvcjogKHN0YXRlKSA9PiBzdGF0ZS5lcnJvcixcbiAgICBnZXRSZXN1bHQ6IChzdGF0ZSkgPT4gc3RhdGUucmVzdWx0LFxuICAgIGlzQ2FuY2VsZWQ6IChzdGF0ZSkgPT4gc3RhdGUuc3RhdHVzID09PSBcImNhbmNlbGVkXCIsXG4gICAgaXNGYWlsZWQ6IChzdGF0ZSkgPT4gc3RhdGUuc3RhdHVzID09PSBcImZhaWxlZFwiLFxuICAgIGlzUnVubmluZzogKHN0YXRlKSA9PiBzdGF0ZS5zdGF0dXMgPT09IFwicnVubmluZ1wiLFxuICAgIGlzU3VjY2VlZGVkOiAoc3RhdGUpID0+IHN0YXRlLnN0YXR1cyA9PT0gXCJzdWNjZWVkZWRcIixcbn0pO1xuLyoqXG4gKiBSZXR1cm5zIGEgcG9sbGVyIGZhY3RvcnkuXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkQ3JlYXRlUG9sbGVyKGlucHV0cykge1xuICAgIGNvbnN0IHsgZ2V0T3BlcmF0aW9uTG9jYXRpb24sIGdldFN0YXR1c0Zyb21Jbml0aWFsUmVzcG9uc2UsIGdldFN0YXR1c0Zyb21Qb2xsUmVzcG9uc2UsIGlzT3BlcmF0aW9uRXJyb3IsIGdldFJlc291cmNlTG9jYXRpb24sIGdldFBvbGxpbmdJbnRlcnZhbCwgZ2V0RXJyb3IsIHJlc29sdmVPblVuc3VjY2Vzc2Z1bCwgfSA9IGlucHV0cztcbiAgICByZXR1cm4gYXN5bmMgKHsgaW5pdCwgcG9sbCB9LCBvcHRpb25zKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcHJvY2Vzc1Jlc3VsdCwgdXBkYXRlU3RhdGUsIHdpdGhPcGVyYXRpb25Mb2NhdGlvbjogd2l0aE9wZXJhdGlvbkxvY2F0aW9uQ2FsbGJhY2ssIGludGVydmFsSW5NcyA9IGNvbnN0YW50c19qc18xLlBPTExfSU5URVJWQUxfSU5fTVMsIHJlc3RvcmVGcm9tLCB9ID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgY29uc3Qgc3RhdGVQcm94eSA9IGNyZWF0ZVN0YXRlUHJveHkoKTtcbiAgICAgICAgY29uc3Qgd2l0aE9wZXJhdGlvbkxvY2F0aW9uID0gd2l0aE9wZXJhdGlvbkxvY2F0aW9uQ2FsbGJhY2tcbiAgICAgICAgICAgID8gKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgY2FsbGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChvcGVyYXRpb25Mb2NhdGlvbiwgaXNVcGRhdGVkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1VwZGF0ZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICB3aXRoT3BlcmF0aW9uTG9jYXRpb25DYWxsYmFjayhvcGVyYXRpb25Mb2NhdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFjYWxsZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICB3aXRoT3BlcmF0aW9uTG9jYXRpb25DYWxsYmFjayhvcGVyYXRpb25Mb2NhdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pKClcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBzdGF0ZSA9IHJlc3RvcmVGcm9tXG4gICAgICAgICAgICA/ICgwLCBvcGVyYXRpb25fanNfMS5kZXNlcmlhbGl6ZVN0YXRlKShyZXN0b3JlRnJvbSlcbiAgICAgICAgICAgIDogYXdhaXQgKDAsIG9wZXJhdGlvbl9qc18xLmluaXRPcGVyYXRpb24pKHtcbiAgICAgICAgICAgICAgICBpbml0LFxuICAgICAgICAgICAgICAgIHN0YXRlUHJveHksXG4gICAgICAgICAgICAgICAgcHJvY2Vzc1Jlc3VsdCxcbiAgICAgICAgICAgICAgICBnZXRPcGVyYXRpb25TdGF0dXM6IGdldFN0YXR1c0Zyb21Jbml0aWFsUmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgd2l0aE9wZXJhdGlvbkxvY2F0aW9uLFxuICAgICAgICAgICAgICAgIHNldEVycm9yQXNSZXN1bHQ6ICFyZXNvbHZlT25VbnN1Y2Nlc3NmdWwsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgbGV0IHJlc3VsdFByb21pc2U7XG4gICAgICAgIGNvbnN0IGFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICAgICAgY29uc3QgaGFuZGxlcnMgPSBuZXcgTWFwKCk7XG4gICAgICAgIGNvbnN0IGhhbmRsZVByb2dyZXNzRXZlbnRzID0gYXN5bmMgKCkgPT4gaGFuZGxlcnMuZm9yRWFjaCgoaCkgPT4gaChzdGF0ZSkpO1xuICAgICAgICBjb25zdCBjYW5jZWxFcnJNc2cgPSBcIk9wZXJhdGlvbiB3YXMgY2FuY2VsZWRcIjtcbiAgICAgICAgbGV0IGN1cnJlbnRQb2xsSW50ZXJ2YWxJbk1zID0gaW50ZXJ2YWxJbk1zO1xuICAgICAgICBjb25zdCBwb2xsZXIgPSB7XG4gICAgICAgICAgICBnZXRPcGVyYXRpb25TdGF0ZTogKCkgPT4gc3RhdGUsXG4gICAgICAgICAgICBnZXRSZXN1bHQ6ICgpID0+IHN0YXRlLnJlc3VsdCxcbiAgICAgICAgICAgIGlzRG9uZTogKCkgPT4gW1wic3VjY2VlZGVkXCIsIFwiZmFpbGVkXCIsIFwiY2FuY2VsZWRcIl0uaW5jbHVkZXMoc3RhdGUuc3RhdHVzKSxcbiAgICAgICAgICAgIGlzU3RvcHBlZDogKCkgPT4gcmVzdWx0UHJvbWlzZSA9PT0gdW5kZWZpbmVkLFxuICAgICAgICAgICAgc3RvcFBvbGxpbmc6ICgpID0+IHtcbiAgICAgICAgICAgICAgICBhYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0b1N0cmluZzogKCkgPT4gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBvblByb2dyZXNzOiAoY2FsbGJhY2spID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzID0gU3ltYm9sKCk7XG4gICAgICAgICAgICAgICAgaGFuZGxlcnMuc2V0KHMsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gKCkgPT4gaGFuZGxlcnMuZGVsZXRlKHMpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBvbGxVbnRpbERvbmU6IChwb2xsT3B0aW9ucykgPT4gKHJlc3VsdFByb21pc2UgIT09IG51bGwgJiYgcmVzdWx0UHJvbWlzZSAhPT0gdm9pZCAwID8gcmVzdWx0UHJvbWlzZSA6IChyZXN1bHRQcm9taXNlID0gKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGFib3J0U2lnbmFsOiBpbnB1dEFib3J0U2lnbmFsIH0gPSBwb2xsT3B0aW9ucyB8fCB7fTtcbiAgICAgICAgICAgICAgICAvLyBJbiB0aGUgZnV0dXJlIHdlIGNhbiB1c2UgQWJvcnRTaWduYWwuYW55KCkgaW5zdGVhZFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGFib3J0TGlzdGVuZXIoKSB7XG4gICAgICAgICAgICAgICAgICAgIGFib3J0Q29udHJvbGxlci5hYm9ydCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBhYm9ydFNpZ25hbCA9IGFib3J0Q29udHJvbGxlci5zaWduYWw7XG4gICAgICAgICAgICAgICAgaWYgKGlucHV0QWJvcnRTaWduYWwgPT09IG51bGwgfHwgaW5wdXRBYm9ydFNpZ25hbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogaW5wdXRBYm9ydFNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGFib3J0Q29udHJvbGxlci5hYm9ydCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICghYWJvcnRTaWduYWwuYWJvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICBpbnB1dEFib3J0U2lnbmFsID09PSBudWxsIHx8IGlucHV0QWJvcnRTaWduYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGlucHV0QWJvcnRTaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIGFib3J0TGlzdGVuZXIsIHsgb25jZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwb2xsZXIuaXNEb25lKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHBvbGxlci5wb2xsKHsgYWJvcnRTaWduYWwgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIXBvbGxlci5pc0RvbmUoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0ICgwLCBjb3JlX3V0aWxfMS5kZWxheSkoY3VycmVudFBvbGxJbnRlcnZhbEluTXMsIHsgYWJvcnRTaWduYWwgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgcG9sbGVyLnBvbGwoeyBhYm9ydFNpZ25hbCB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRBYm9ydFNpZ25hbCA9PT0gbnVsbCB8fCBpbnB1dEFib3J0U2lnbmFsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBpbnB1dEFib3J0U2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBhYm9ydExpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlc29sdmVPblVuc3VjY2Vzc2Z1bCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcG9sbGVyLmdldFJlc3VsdCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChzdGF0ZS5zdGF0dXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJzdWNjZWVkZWRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcG9sbGVyLmdldFJlc3VsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImNhbmNlbGVkXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGNhbmNlbEVyck1zZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZmFpbGVkXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgc3RhdGUuZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwibm90U3RhcnRlZFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcInJ1bm5pbmdcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFBvbGxpbmcgY29tcGxldGVkIHdpdGhvdXQgc3VjY2VlZGluZyBvciBmYWlsaW5nYCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSgpLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc3VsdFByb21pc2UgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9KSkpLFxuICAgICAgICAgICAgYXN5bmMgcG9sbChwb2xsT3B0aW9ucykge1xuICAgICAgICAgICAgICAgIGlmIChyZXNvbHZlT25VbnN1Y2Nlc3NmdWwpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBvbGxlci5pc0RvbmUoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoc3RhdGUuc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwic3VjY2VlZGVkXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImNhbmNlbGVkXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGNhbmNlbEVyck1zZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZmFpbGVkXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgc3RhdGUuZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXdhaXQgKDAsIG9wZXJhdGlvbl9qc18xLnBvbGxPcGVyYXRpb24pKHtcbiAgICAgICAgICAgICAgICAgICAgcG9sbCxcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlUHJveHksXG4gICAgICAgICAgICAgICAgICAgIGdldE9wZXJhdGlvbkxvY2F0aW9uLFxuICAgICAgICAgICAgICAgICAgICBpc09wZXJhdGlvbkVycm9yLFxuICAgICAgICAgICAgICAgICAgICB3aXRoT3BlcmF0aW9uTG9jYXRpb24sXG4gICAgICAgICAgICAgICAgICAgIGdldFBvbGxpbmdJbnRlcnZhbCxcbiAgICAgICAgICAgICAgICAgICAgZ2V0T3BlcmF0aW9uU3RhdHVzOiBnZXRTdGF0dXNGcm9tUG9sbFJlc3BvbnNlLFxuICAgICAgICAgICAgICAgICAgICBnZXRSZXNvdXJjZUxvY2F0aW9uLFxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzUmVzdWx0LFxuICAgICAgICAgICAgICAgICAgICBnZXRFcnJvcixcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IHBvbGxPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICBzZXREZWxheTogKHBvbGxJbnRlcnZhbEluTXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQb2xsSW50ZXJ2YWxJbk1zID0gcG9sbEludGVydmFsSW5NcztcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgc2V0RXJyb3JBc1Jlc3VsdDogIXJlc29sdmVPblVuc3VjY2Vzc2Z1bCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVQcm9ncmVzc0V2ZW50cygpO1xuICAgICAgICAgICAgICAgIGlmICghcmVzb2x2ZU9uVW5zdWNjZXNzZnVsKSB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoc3RhdGUuc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiY2FuY2VsZWRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoY2FuY2VsRXJyTXNnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJmYWlsZWRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBzdGF0ZS5lcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBwb2xsZXI7XG4gICAgfTtcbn1cbmV4cG9ydHMuYnVpbGRDcmVhdGVQb2xsZXIgPSBidWlsZENyZWF0ZVBvbGxlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBvbGxlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNyZWF0ZUh0dHBQb2xsZXIgPSB2b2lkIDA7XG5jb25zdCBvcGVyYXRpb25fanNfMSA9IHJlcXVpcmUoXCIuL29wZXJhdGlvbi5qc1wiKTtcbmNvbnN0IHBvbGxlcl9qc18xID0gcmVxdWlyZShcIi4uL3BvbGxlci9wb2xsZXIuanNcIik7XG4vKipcbiAqIENyZWF0ZXMgYSBwb2xsZXIgdGhhdCBjYW4gYmUgdXNlZCB0byBwb2xsIGEgbG9uZy1ydW5uaW5nIG9wZXJhdGlvbi5cbiAqIEBwYXJhbSBscm8gLSBEZXNjcmlwdGlvbiBvZiB0aGUgbG9uZy1ydW5uaW5nIG9wZXJhdGlvblxuICogQHBhcmFtIG9wdGlvbnMgLSBvcHRpb25zIHRvIGNvbmZpZ3VyZSB0aGUgcG9sbGVyXG4gKiBAcmV0dXJucyBhbiBpbml0aWFsaXplZCBwb2xsZXJcbiAqL1xuYXN5bmMgZnVuY3Rpb24gY3JlYXRlSHR0cFBvbGxlcihscm8sIG9wdGlvbnMpIHtcbiAgICBjb25zdCB7IHJlc291cmNlTG9jYXRpb25Db25maWcsIGludGVydmFsSW5NcywgcHJvY2Vzc1Jlc3VsdCwgcmVzdG9yZUZyb20sIHVwZGF0ZVN0YXRlLCB3aXRoT3BlcmF0aW9uTG9jYXRpb24sIHJlc29sdmVPblVuc3VjY2Vzc2Z1bCA9IGZhbHNlLCB9ID0gb3B0aW9ucyB8fCB7fTtcbiAgICByZXR1cm4gKDAsIHBvbGxlcl9qc18xLmJ1aWxkQ3JlYXRlUG9sbGVyKSh7XG4gICAgICAgIGdldFN0YXR1c0Zyb21Jbml0aWFsUmVzcG9uc2U6IG9wZXJhdGlvbl9qc18xLmdldFN0YXR1c0Zyb21Jbml0aWFsUmVzcG9uc2UsXG4gICAgICAgIGdldFN0YXR1c0Zyb21Qb2xsUmVzcG9uc2U6IG9wZXJhdGlvbl9qc18xLmdldE9wZXJhdGlvblN0YXR1cyxcbiAgICAgICAgaXNPcGVyYXRpb25FcnJvcjogb3BlcmF0aW9uX2pzXzEuaXNPcGVyYXRpb25FcnJvcixcbiAgICAgICAgZ2V0T3BlcmF0aW9uTG9jYXRpb246IG9wZXJhdGlvbl9qc18xLmdldE9wZXJhdGlvbkxvY2F0aW9uLFxuICAgICAgICBnZXRSZXNvdXJjZUxvY2F0aW9uOiBvcGVyYXRpb25fanNfMS5nZXRSZXNvdXJjZUxvY2F0aW9uLFxuICAgICAgICBnZXRQb2xsaW5nSW50ZXJ2YWw6IG9wZXJhdGlvbl9qc18xLnBhcnNlUmV0cnlBZnRlcixcbiAgICAgICAgZ2V0RXJyb3I6IG9wZXJhdGlvbl9qc18xLmdldEVycm9yRnJvbVJlc3BvbnNlLFxuICAgICAgICByZXNvbHZlT25VbnN1Y2Nlc3NmdWwsXG4gICAgfSkoe1xuICAgICAgICBpbml0OiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGxyby5zZW5kSW5pdGlhbFJlcXVlc3QoKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbmZpZyA9ICgwLCBvcGVyYXRpb25fanNfMS5pbmZlckxyb01vZGUpKHtcbiAgICAgICAgICAgICAgICByYXdSZXNwb25zZTogcmVzcG9uc2UucmF3UmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgcmVxdWVzdFBhdGg6IGxyby5yZXF1ZXN0UGF0aCxcbiAgICAgICAgICAgICAgICByZXF1ZXN0TWV0aG9kOiBscm8ucmVxdWVzdE1ldGhvZCxcbiAgICAgICAgICAgICAgICByZXNvdXJjZUxvY2F0aW9uQ29uZmlnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7IHJlc3BvbnNlLCBvcGVyYXRpb25Mb2NhdGlvbjogY29uZmlnID09PSBudWxsIHx8IGNvbmZpZyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29uZmlnLm9wZXJhdGlvbkxvY2F0aW9uLCByZXNvdXJjZUxvY2F0aW9uOiBjb25maWcgPT09IG51bGwgfHwgY29uZmlnID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb25maWcucmVzb3VyY2VMb2NhdGlvbiB9LCAoKGNvbmZpZyA9PT0gbnVsbCB8fCBjb25maWcgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbmZpZy5tb2RlKSA/IHsgbWV0YWRhdGE6IHsgbW9kZTogY29uZmlnLm1vZGUgfSB9IDoge30pKTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9sbDogbHJvLnNlbmRQb2xsUmVxdWVzdCxcbiAgICB9LCB7XG4gICAgICAgIGludGVydmFsSW5NcyxcbiAgICAgICAgd2l0aE9wZXJhdGlvbkxvY2F0aW9uLFxuICAgICAgICByZXN0b3JlRnJvbSxcbiAgICAgICAgdXBkYXRlU3RhdGUsXG4gICAgICAgIHByb2Nlc3NSZXN1bHQ6IHByb2Nlc3NSZXN1bHRcbiAgICAgICAgICAgID8gKHsgZmxhdFJlc3BvbnNlIH0sIHN0YXRlKSA9PiBwcm9jZXNzUmVzdWx0KGZsYXRSZXNwb25zZSwgc3RhdGUpXG4gICAgICAgICAgICA6ICh7IGZsYXRSZXNwb25zZSB9KSA9PiBmbGF0UmVzcG9uc2UsXG4gICAgfSk7XG59XG5leHBvcnRzLmNyZWF0ZUh0dHBQb2xsZXIgPSBjcmVhdGVIdHRwUG9sbGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cG9sbGVyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuR2VuZXJpY1BvbGxPcGVyYXRpb24gPSB2b2lkIDA7XG5jb25zdCBvcGVyYXRpb25fanNfMSA9IHJlcXVpcmUoXCIuLi8uLi9odHRwL29wZXJhdGlvbi5qc1wiKTtcbmNvbnN0IGxvZ2dlcl9qc18xID0gcmVxdWlyZShcIi4uLy4uL2xvZ2dlci5qc1wiKTtcbmNvbnN0IGNyZWF0ZVN0YXRlUHJveHkgPSAoKSA9PiAoe1xuICAgIGluaXRTdGF0ZTogKGNvbmZpZykgPT4gKHsgY29uZmlnLCBpc1N0YXJ0ZWQ6IHRydWUgfSksXG4gICAgc2V0Q2FuY2VsZWQ6IChzdGF0ZSkgPT4gKHN0YXRlLmlzQ2FuY2VsbGVkID0gdHJ1ZSksXG4gICAgc2V0RXJyb3I6IChzdGF0ZSwgZXJyb3IpID0+IChzdGF0ZS5lcnJvciA9IGVycm9yKSxcbiAgICBzZXRSZXN1bHQ6IChzdGF0ZSwgcmVzdWx0KSA9PiAoc3RhdGUucmVzdWx0ID0gcmVzdWx0KSxcbiAgICBzZXRSdW5uaW5nOiAoc3RhdGUpID0+IChzdGF0ZS5pc1N0YXJ0ZWQgPSB0cnVlKSxcbiAgICBzZXRTdWNjZWVkZWQ6IChzdGF0ZSkgPT4gKHN0YXRlLmlzQ29tcGxldGVkID0gdHJ1ZSksXG4gICAgc2V0RmFpbGVkOiAoKSA9PiB7XG4gICAgICAgIC8qKiBlbXB0eSBib2R5ICovXG4gICAgfSxcbiAgICBnZXRFcnJvcjogKHN0YXRlKSA9PiBzdGF0ZS5lcnJvcixcbiAgICBnZXRSZXN1bHQ6IChzdGF0ZSkgPT4gc3RhdGUucmVzdWx0LFxuICAgIGlzQ2FuY2VsZWQ6IChzdGF0ZSkgPT4gISFzdGF0ZS5pc0NhbmNlbGxlZCxcbiAgICBpc0ZhaWxlZDogKHN0YXRlKSA9PiAhIXN0YXRlLmVycm9yLFxuICAgIGlzUnVubmluZzogKHN0YXRlKSA9PiAhIXN0YXRlLmlzU3RhcnRlZCxcbiAgICBpc1N1Y2NlZWRlZDogKHN0YXRlKSA9PiBCb29sZWFuKHN0YXRlLmlzQ29tcGxldGVkICYmICFzdGF0ZS5pc0NhbmNlbGxlZCAmJiAhc3RhdGUuZXJyb3IpLFxufSk7XG5jbGFzcyBHZW5lcmljUG9sbE9wZXJhdGlvbiB7XG4gICAgY29uc3RydWN0b3Ioc3RhdGUsIGxybywgc2V0RXJyb3JBc1Jlc3VsdCwgbHJvUmVzb3VyY2VMb2NhdGlvbkNvbmZpZywgcHJvY2Vzc1Jlc3VsdCwgdXBkYXRlU3RhdGUsIGlzRG9uZSkge1xuICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGU7XG4gICAgICAgIHRoaXMubHJvID0gbHJvO1xuICAgICAgICB0aGlzLnNldEVycm9yQXNSZXN1bHQgPSBzZXRFcnJvckFzUmVzdWx0O1xuICAgICAgICB0aGlzLmxyb1Jlc291cmNlTG9jYXRpb25Db25maWcgPSBscm9SZXNvdXJjZUxvY2F0aW9uQ29uZmlnO1xuICAgICAgICB0aGlzLnByb2Nlc3NSZXN1bHQgPSBwcm9jZXNzUmVzdWx0O1xuICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlID0gdXBkYXRlU3RhdGU7XG4gICAgICAgIHRoaXMuaXNEb25lID0gaXNEb25lO1xuICAgIH1cbiAgICBzZXRQb2xsZXJDb25maWcocG9sbGVyQ29uZmlnKSB7XG4gICAgICAgIHRoaXMucG9sbGVyQ29uZmlnID0gcG9sbGVyQ29uZmlnO1xuICAgIH1cbiAgICBhc3luYyB1cGRhdGUob3B0aW9ucykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IHN0YXRlUHJveHkgPSBjcmVhdGVTdGF0ZVByb3h5KCk7XG4gICAgICAgIGlmICghdGhpcy5zdGF0ZS5pc1N0YXJ0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHRoaXMuc3RhdGUpLCAoYXdhaXQgKDAsIG9wZXJhdGlvbl9qc18xLmluaXRIdHRwT3BlcmF0aW9uKSh7XG4gICAgICAgICAgICAgICAgbHJvOiB0aGlzLmxybyxcbiAgICAgICAgICAgICAgICBzdGF0ZVByb3h5LFxuICAgICAgICAgICAgICAgIHJlc291cmNlTG9jYXRpb25Db25maWc6IHRoaXMubHJvUmVzb3VyY2VMb2NhdGlvbkNvbmZpZyxcbiAgICAgICAgICAgICAgICBwcm9jZXNzUmVzdWx0OiB0aGlzLnByb2Nlc3NSZXN1bHQsXG4gICAgICAgICAgICAgICAgc2V0RXJyb3JBc1Jlc3VsdDogdGhpcy5zZXRFcnJvckFzUmVzdWx0LFxuICAgICAgICAgICAgfSkpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1cGRhdGVTdGF0ZSA9IHRoaXMudXBkYXRlU3RhdGU7XG4gICAgICAgIGNvbnN0IGlzRG9uZSA9IHRoaXMuaXNEb25lO1xuICAgICAgICBpZiAoIXRoaXMuc3RhdGUuaXNDb21wbGV0ZWQgJiYgdGhpcy5zdGF0ZS5lcnJvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhd2FpdCAoMCwgb3BlcmF0aW9uX2pzXzEucG9sbEh0dHBPcGVyYXRpb24pKHtcbiAgICAgICAgICAgICAgICBscm86IHRoaXMubHJvLFxuICAgICAgICAgICAgICAgIHN0YXRlOiB0aGlzLnN0YXRlLFxuICAgICAgICAgICAgICAgIHN0YXRlUHJveHksXG4gICAgICAgICAgICAgICAgcHJvY2Vzc1Jlc3VsdDogdGhpcy5wcm9jZXNzUmVzdWx0LFxuICAgICAgICAgICAgICAgIHVwZGF0ZVN0YXRlOiB1cGRhdGVTdGF0ZVxuICAgICAgICAgICAgICAgICAgICA/IChzdGF0ZSwgeyByYXdSZXNwb25zZSB9KSA9PiB1cGRhdGVTdGF0ZShzdGF0ZSwgcmF3UmVzcG9uc2UpXG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIGlzRG9uZTogaXNEb25lXG4gICAgICAgICAgICAgICAgICAgID8gKHsgZmxhdFJlc3BvbnNlIH0sIHN0YXRlKSA9PiBpc0RvbmUoZmxhdFJlc3BvbnNlLCBzdGF0ZSlcbiAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgICAgICBzZXREZWxheTogKGludGVydmFsSW5NcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBvbGxlckNvbmZpZy5pbnRlcnZhbEluTXMgPSBpbnRlcnZhbEluTXM7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZXRFcnJvckFzUmVzdWx0OiB0aGlzLnNldEVycm9yQXNSZXN1bHQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAoX2EgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuZmlyZVByb2dyZXNzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbChvcHRpb25zLCB0aGlzLnN0YXRlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGFzeW5jIGNhbmNlbCgpIHtcbiAgICAgICAgbG9nZ2VyX2pzXzEubG9nZ2VyLmVycm9yKFwiYGNhbmNlbE9wZXJhdGlvbmAgaXMgZGVwcmVjYXRlZCBiZWNhdXNlIGl0IHdhc24ndCBpbXBsZW1lbnRlZFwiKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNlcmlhbGl6ZXMgdGhlIFBvbGxlciBvcGVyYXRpb24uXG4gICAgICovXG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBzdGF0ZTogdGhpcy5zdGF0ZSxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0cy5HZW5lcmljUG9sbE9wZXJhdGlvbiA9IEdlbmVyaWNQb2xsT3BlcmF0aW9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9b3BlcmF0aW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUG9sbGVyID0gZXhwb3J0cy5Qb2xsZXJDYW5jZWxsZWRFcnJvciA9IGV4cG9ydHMuUG9sbGVyU3RvcHBlZEVycm9yID0gdm9pZCAwO1xuLyoqXG4gKiBXaGVuIGEgcG9sbGVyIGlzIG1hbnVhbGx5IHN0b3BwZWQgdGhyb3VnaCB0aGUgYHN0b3BQb2xsaW5nYCBtZXRob2QsXG4gKiB0aGUgcG9sbGVyIHdpbGwgYmUgcmVqZWN0ZWQgd2l0aCBhbiBpbnN0YW5jZSBvZiB0aGUgUG9sbGVyU3RvcHBlZEVycm9yLlxuICovXG5jbGFzcyBQb2xsZXJTdG9wcGVkRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZSkge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJQb2xsZXJTdG9wcGVkRXJyb3JcIjtcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIFBvbGxlclN0b3BwZWRFcnJvci5wcm90b3R5cGUpO1xuICAgIH1cbn1cbmV4cG9ydHMuUG9sbGVyU3RvcHBlZEVycm9yID0gUG9sbGVyU3RvcHBlZEVycm9yO1xuLyoqXG4gKiBXaGVuIHRoZSBvcGVyYXRpb24gaXMgY2FuY2VsbGVkLCB0aGUgcG9sbGVyIHdpbGwgYmUgcmVqZWN0ZWQgd2l0aCBhbiBpbnN0YW5jZVxuICogb2YgdGhlIFBvbGxlckNhbmNlbGxlZEVycm9yLlxuICovXG5jbGFzcyBQb2xsZXJDYW5jZWxsZWRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlBvbGxlckNhbmNlbGxlZEVycm9yXCI7XG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBQb2xsZXJDYW5jZWxsZWRFcnJvci5wcm90b3R5cGUpO1xuICAgIH1cbn1cbmV4cG9ydHMuUG9sbGVyQ2FuY2VsbGVkRXJyb3IgPSBQb2xsZXJDYW5jZWxsZWRFcnJvcjtcbi8qKlxuICogQSBjbGFzcyB0aGF0IHJlcHJlc2VudHMgdGhlIGRlZmluaXRpb24gb2YgYSBwcm9ncmFtIHRoYXQgcG9sbHMgdGhyb3VnaCBjb25zZWN1dGl2ZSByZXF1ZXN0c1xuICogdW50aWwgaXQgcmVhY2hlcyBhIHN0YXRlIG9mIGNvbXBsZXRpb24uXG4gKlxuICogQSBwb2xsZXIgY2FuIGJlIGV4ZWN1dGVkIG1hbnVhbGx5LCBieSBwb2xsaW5nIHJlcXVlc3QgYnkgcmVxdWVzdCBieSBjYWxsaW5nIHRvIHRoZSBgcG9sbCgpYCBtZXRob2QgcmVwZWF0ZWRseSwgdW50aWwgaXRzIG9wZXJhdGlvbiBpcyBjb21wbGV0ZWQuXG4gKiBJdCBhbHNvIHByb3ZpZGVzIGEgd2F5IHRvIHdhaXQgdW50aWwgdGhlIG9wZXJhdGlvbiBjb21wbGV0ZXMsIGJ5IGNhbGxpbmcgYHBvbGxVbnRpbERvbmUoKWAgYW5kIHdhaXRpbmcgdW50aWwgdGhlIG9wZXJhdGlvbiBmaW5pc2hlcy5cbiAqIFBvbGxlcnMgY2FuIGFsc28gcmVxdWVzdCB0aGUgY2FuY2VsbGF0aW9uIG9mIHRoZSBvbmdvaW5nIHByb2Nlc3MgdG8gd2hvbSBpcyBwcm92aWRpbmcgdGhlIHVuZGVybHlpbmcgbG9uZyBydW5uaW5nIG9wZXJhdGlvbi5cbiAqXG4gKiBgYGB0c1xuICogY29uc3QgcG9sbGVyID0gbmV3IE15UG9sbGVyKCk7XG4gKlxuICogLy8gUG9sbGluZyBqdXN0IG9uY2U6XG4gKiBhd2FpdCBwb2xsZXIucG9sbCgpO1xuICpcbiAqIC8vIFdlIGNhbiB0cnkgdG8gY2FuY2VsIHRoZSByZXF1ZXN0IGhlcmUsIGJ5IGNhbGxpbmc6XG4gKiAvL1xuICogLy8gICAgIGF3YWl0IHBvbGxlci5jYW5jZWxPcGVyYXRpb24oKTtcbiAqIC8vXG4gKlxuICogLy8gR2V0dGluZyB0aGUgZmluYWwgcmVzdWx0OlxuICogY29uc3QgcmVzdWx0ID0gYXdhaXQgcG9sbGVyLnBvbGxVbnRpbERvbmUoKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBQb2xsZXIgaXMgZGVmaW5lZCBieSB0d28gdHlwZXMsIGEgdHlwZSByZXByZXNlbnRpbmcgdGhlIHN0YXRlIG9mIHRoZSBwb2xsZXIsIHdoaWNoXG4gKiBtdXN0IGluY2x1ZGUgYSBiYXNpYyBzZXQgb2YgcHJvcGVydGllcyBmcm9tIGBQb2xsT3BlcmF0aW9uU3RhdGU8VFJlc3VsdD5gLFxuICogYW5kIGEgcmV0dXJuIHR5cGUgZGVmaW5lZCBieSBgVFJlc3VsdGAsIHdoaWNoIGNhbiBiZSBhbnl0aGluZy5cbiAqXG4gKiBUaGUgUG9sbGVyIGNsYXNzIGltcGxlbWVudHMgdGhlIGBQb2xsZXJMaWtlYCBpbnRlcmZhY2UsIHdoaWNoIGFsbG93cyBwb2xsZXIgaW1wbGVtZW50YXRpb25zIHRvIGF2b2lkIGhhdmluZ1xuICogdG8gZXhwb3J0IHRoZSBQb2xsZXIncyBjbGFzcyBkaXJlY3RseSwgYW5kIGluc3RlYWQgb25seSBleHBvcnQgdGhlIGFscmVhZHkgaW5zdGFudGlhdGVkIHBvbGxlciB3aXRoIHRoZSBQb2xsZXJMaWtlIHR5cGUuXG4gKlxuICogYGBgdHNcbiAqIGNsYXNzIENsaWVudCB7XG4gKiAgIHB1YmxpYyBhc3luYyBtYWtlUG9sbGVyOiBQb2xsZXJMaWtlPE15T3BlcmF0aW9uU3RhdGUsIE15UmVzdWx0PiB7XG4gKiAgICAgY29uc3QgcG9sbGVyID0gbmV3IE15UG9sbGVyKHt9KTtcbiAqICAgICAvLyBJdCBtaWdodCBiZSBwcmVmZXJyZWQgdG8gcmV0dXJuIHRoZSBwb2xsZXIgYWZ0ZXIgdGhlIGZpcnN0IHJlcXVlc3QgaXMgbWFkZSxcbiAqICAgICAvLyBzbyB0aGF0IHNvbWUgaW5mb3JtYXRpb24gY2FuIGJlIG9idGFpbmVkIHJpZ2h0IGF3YXkuXG4gKiAgICAgYXdhaXQgcG9sbGVyLnBvbGwoKTtcbiAqICAgICByZXR1cm4gcG9sbGVyO1xuICogICB9XG4gKiB9XG4gKlxuICogY29uc3QgcG9sbGVyOiBQb2xsZXJMaWtlPE15T3BlcmF0aW9uU3RhdGUsIE15UmVzdWx0PiA9IG15Q2xpZW50Lm1ha2VQb2xsZXIoKTtcbiAqIGBgYFxuICpcbiAqIEEgcG9sbGVyIGNhbiBiZSBjcmVhdGVkIHRocm91Z2ggaXRzIGNvbnN0cnVjdG9yLCB0aGVuIGl0IGNhbiBiZSBwb2xsZWQgdW50aWwgaXQncyBjb21wbGV0ZWQuXG4gKiBBdCBhbnkgcG9pbnQgaW4gdGltZSwgdGhlIHN0YXRlIG9mIHRoZSBwb2xsZXIgY2FuIGJlIG9idGFpbmVkIHdpdGhvdXQgZGVsYXkgdGhyb3VnaCB0aGUgZ2V0T3BlcmF0aW9uU3RhdGUgbWV0aG9kLlxuICogQXQgYW55IHBvaW50IGluIHRpbWUsIHRoZSBpbnRlcm1lZGlhdGUgZm9ybXMgb2YgdGhlIHJlc3VsdCB0eXBlIGNhbiBiZSByZXF1ZXN0ZWQgd2l0aG91dCBkZWxheS5cbiAqIE9uY2UgdGhlIHVuZGVybHlpbmcgb3BlcmF0aW9uIGlzIG1hcmtlZCBhcyBjb21wbGV0ZWQsIHRoZSBwb2xsZXIgd2lsbCBzdG9wIGFuZCB0aGUgZmluYWwgdmFsdWUgd2lsbCBiZSByZXR1cm5lZC5cbiAqXG4gKiBgYGB0c1xuICogY29uc3QgcG9sbGVyID0gbXlDbGllbnQubWFrZVBvbGxlcigpO1xuICogY29uc3Qgc3RhdGU6IE15T3BlcmF0aW9uU3RhdGUgPSBwb2xsZXIuZ2V0T3BlcmF0aW9uU3RhdGUoKTtcbiAqXG4gKiAvLyBUaGUgaW50ZXJtZWRpYXRlIHJlc3VsdCBjYW4gYmUgb2J0YWluZWQgYXQgYW55IHRpbWUuXG4gKiBjb25zdCByZXN1bHQ6IE15UmVzdWx0IHwgdW5kZWZpbmVkID0gcG9sbGVyLmdldFJlc3VsdCgpO1xuICpcbiAqIC8vIFRoZSBmaW5hbCByZXN1bHQgY2FuIG9ubHkgYmUgb2J0YWluZWQgYWZ0ZXIgdGhlIHBvbGxlciBmaW5pc2hlcy5cbiAqIGNvbnN0IHJlc3VsdDogTXlSZXN1bHQgPSBhd2FpdCBwb2xsZXIucG9sbFVudGlsRG9uZSgpO1xuICogYGBgXG4gKlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbmNsYXNzIFBvbGxlciB7XG4gICAgLyoqXG4gICAgICogQSBwb2xsZXIgbmVlZHMgdG8gYmUgaW5pdGlhbGl6ZWQgYnkgcGFzc2luZyBpbiBhdCBsZWFzdCB0aGUgYmFzaWMgcHJvcGVydGllcyBvZiB0aGUgYFBvbGxPcGVyYXRpb248VFN0YXRlLCBUUmVzdWx0PmAuXG4gICAgICpcbiAgICAgKiBXaGVuIHdyaXRpbmcgYW4gaW1wbGVtZW50YXRpb24gb2YgYSBQb2xsZXIsIHRoaXMgaW1wbGVtZW50YXRpb24gbmVlZHMgdG8gZGVhbCB3aXRoIHRoZSBpbml0aWFsaXphdGlvblxuICAgICAqIG9mIGFueSBjdXN0b20gc3RhdGUgYmV5b25kIHRoZSBiYXNpYyBkZWZpbml0aW9uIG9mIHRoZSBwb2xsZXIuIFRoZSBiYXNpYyBwb2xsZXIgYXNzdW1lcyB0aGF0IHRoZSBwb2xsZXInc1xuICAgICAqIG9wZXJhdGlvbiBoYXMgYWxyZWFkeSBiZWVuIGRlZmluZWQsIGF0IGxlYXN0IGl0cyBiYXNpYyBwcm9wZXJ0aWVzLiBUaGUgY29kZSBiZWxvdyBzaG93cyBob3cgdG8gYXBwcm9hY2hcbiAgICAgKiB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgY29uc3RydWN0b3Igb2YgYSBuZXcgY3VzdG9tIHBvbGxlci5cbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogZXhwb3J0IGNsYXNzIE15UG9sbGVyIGV4dGVuZHMgUG9sbGVyPE15T3BlcmF0aW9uU3RhdGUsIHN0cmluZz4ge1xuICAgICAqICAgY29uc3RydWN0b3Ioe1xuICAgICAqICAgICAvLyBBbnl0aGluZyB5b3UgbWlnaHQgbmVlZCBvdXRzaWRlIG9mIHRoZSBiYXNpY3NcbiAgICAgKiAgIH0pIHtcbiAgICAgKiAgICAgbGV0IHN0YXRlOiBNeU9wZXJhdGlvblN0YXRlID0ge1xuICAgICAqICAgICAgIHByaXZhdGVQcm9wZXJ0eTogcHJpdmF0ZSxcbiAgICAgKiAgICAgICBwdWJsaWNQcm9wZXJ0eTogcHVibGljLFxuICAgICAqICAgICB9O1xuICAgICAqXG4gICAgICogICAgIGNvbnN0IG9wZXJhdGlvbiA9IHtcbiAgICAgKiAgICAgICBzdGF0ZSxcbiAgICAgKiAgICAgICB1cGRhdGUsXG4gICAgICogICAgICAgY2FuY2VsLFxuICAgICAqICAgICAgIHRvU3RyaW5nXG4gICAgICogICAgIH1cbiAgICAgKlxuICAgICAqICAgICAvLyBTZW5kaW5nIHRoZSBvcGVyYXRpb24gdG8gdGhlIHBhcmVudCdzIGNvbnN0cnVjdG9yLlxuICAgICAqICAgICBzdXBlcihvcGVyYXRpb24pO1xuICAgICAqXG4gICAgICogICAgIC8vIFlvdSBjYW4gYXNzaWduIG1vcmUgbG9jYWwgcHJvcGVydGllcyBoZXJlLlxuICAgICAqICAgfVxuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEluc2lkZSBvZiB0aGlzIGNvbnN0cnVjdG9yLCBhIG5ldyBwcm9taXNlIGlzIGNyZWF0ZWQuIFRoaXMgd2lsbCBiZSB1c2VkIHRvXG4gICAgICogdGVsbCB0aGUgdXNlciB3aGVuIHRoZSBwb2xsZXIgZmluaXNoZXMgKHNlZSBgcG9sbFVudGlsRG9uZSgpYCkuIFRoZSBwcm9taXNlJ3NcbiAgICAgKiByZXNvbHZlIGFuZCByZWplY3QgbWV0aG9kcyBhcmUgYWxzbyB1c2VkIGludGVybmFsbHkgdG8gY29udHJvbCB3aGVuIHRvIHJlc29sdmVcbiAgICAgKiBvciByZWplY3QgYW55b25lIHdhaXRpbmcgZm9yIHRoZSBwb2xsZXIgdG8gZmluaXNoLlxuICAgICAqXG4gICAgICogVGhlIGNvbnN0cnVjdG9yIG9mIGEgY3VzdG9tIGltcGxlbWVudGF0aW9uIG9mIGEgcG9sbGVyIGlzIHdoZXJlIGFueSBzZXJpYWxpemVkIHZlcnNpb24gb2ZcbiAgICAgKiBhIHByZXZpb3VzIHBvbGxlcidzIG9wZXJhdGlvbiBzaG91bGQgYmUgZGVzZXJpYWxpemVkIGludG8gdGhlIG9wZXJhdGlvbiBzZW50IHRvIHRoZVxuICAgICAqIGJhc2UgY29uc3RydWN0b3IuIEZvciBleGFtcGxlOlxuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBleHBvcnQgY2xhc3MgTXlQb2xsZXIgZXh0ZW5kcyBQb2xsZXI8TXlPcGVyYXRpb25TdGF0ZSwgc3RyaW5nPiB7XG4gICAgICogICBjb25zdHJ1Y3RvcihcbiAgICAgKiAgICAgYmFzZU9wZXJhdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkXG4gICAgICogICApIHtcbiAgICAgKiAgICAgbGV0IHN0YXRlOiBNeU9wZXJhdGlvblN0YXRlID0ge307XG4gICAgICogICAgIGlmIChiYXNlT3BlcmF0aW9uKSB7XG4gICAgICogICAgICAgc3RhdGUgPSB7XG4gICAgICogICAgICAgICAuLi5KU09OLnBhcnNlKGJhc2VPcGVyYXRpb24pLnN0YXRlLFxuICAgICAqICAgICAgICAgLi4uc3RhdGVcbiAgICAgKiAgICAgICB9O1xuICAgICAqICAgICB9XG4gICAgICogICAgIGNvbnN0IG9wZXJhdGlvbiA9IHtcbiAgICAgKiAgICAgICBzdGF0ZSxcbiAgICAgKiAgICAgICAvLyAuLi5cbiAgICAgKiAgICAgfVxuICAgICAqICAgICBzdXBlcihvcGVyYXRpb24pO1xuICAgICAqICAgfVxuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcGVyYXRpb24gLSBNdXN0IGNvbnRhaW4gdGhlIGJhc2ljIHByb3BlcnRpZXMgb2YgYFBvbGxPcGVyYXRpb248U3RhdGUsIFRSZXN1bHQ+YC5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihvcGVyYXRpb24pIHtcbiAgICAgICAgLyoqIGNvbnRyb2xzIHdoZXRoZXIgdG8gdGhyb3cgYW4gZXJyb3IgaWYgdGhlIG9wZXJhdGlvbiBmYWlsZWQgb3Igd2FzIGNhbmNlbGVkLiAqL1xuICAgICAgICB0aGlzLnJlc29sdmVPblVuc3VjY2Vzc2Z1bCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0b3BwZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnBvbGxQcm9ncmVzc0NhbGxiYWNrcyA9IFtdO1xuICAgICAgICB0aGlzLm9wZXJhdGlvbiA9IG9wZXJhdGlvbjtcbiAgICAgICAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgICAgICAgIHRoaXMucmVqZWN0ID0gcmVqZWN0O1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gVGhpcyBwcmV2ZW50cyB0aGUgVW5oYW5kbGVkUHJvbWlzZVJlamVjdGlvbldhcm5pbmcgaW4gbm9kZS5qcyBmcm9tIGJlaW5nIHRocm93bi5cbiAgICAgICAgLy8gVGhlIGFib3ZlIHdhcm5pbmcgd291bGQgZ2V0IHRocm93biBpZiBgcG9sbGVyLnBvbGxgIGlzIGNhbGxlZCwgaXQgcmV0dXJucyBhbiBlcnJvcixcbiAgICAgICAgLy8gYW5kIHB1bGxVbnRpbERvbmUgZGlkIG5vdCBoYXZlIGEgLmNhdGNoIG9yIGF3YWl0IHRyeS9jYXRjaCBvbiBpdCdzIHJldHVybiB2YWx1ZS5cbiAgICAgICAgdGhpcy5wcm9taXNlLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICAgIC8qIGludGVudGlvbmFsbHkgYmxhbmsgKi9cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN0YXJ0cyBhIGxvb3AgdGhhdCB3aWxsIGJyZWFrIG9ubHkgaWYgdGhlIHBvbGxlciBpcyBkb25lXG4gICAgICogb3IgaWYgdGhlIHBvbGxlciBpcyBzdG9wcGVkLlxuICAgICAqL1xuICAgIGFzeW5jIHN0YXJ0UG9sbGluZyhwb2xsT3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGlmICh0aGlzLnN0b3BwZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcHBlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlICghdGhpcy5pc1N0b3BwZWQoKSAmJiAhdGhpcy5pc0RvbmUoKSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5wb2xsKHBvbGxPcHRpb25zKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZGVsYXkoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBwb2xsT25jZSBkb2VzIG9uZSBwb2xsaW5nLCBieSBjYWxsaW5nIHRvIHRoZSB1cGRhdGUgbWV0aG9kIG9mIHRoZSB1bmRlcmx5aW5nXG4gICAgICogcG9sbCBvcGVyYXRpb24gdG8gbWFrZSBhbnkgcmVsZXZhbnQgY2hhbmdlIGVmZmVjdGl2ZS5cbiAgICAgKlxuICAgICAqIEl0IG9ubHkgb3B0aW9uYWxseSByZWNlaXZlcyBhbiBvYmplY3Qgd2l0aCBhbiBhYm9ydFNpZ25hbCBwcm9wZXJ0eSwgZnJvbSBcXEBhenVyZS9hYm9ydC1jb250cm9sbGVyJ3MgQWJvcnRTaWduYWxMaWtlLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBwcm9wZXJ0aWVzIHBhc3NlZCB0byB0aGUgb3BlcmF0aW9uJ3MgdXBkYXRlIG1ldGhvZC5cbiAgICAgKi9cbiAgICBhc3luYyBwb2xsT25jZShvcHRpb25zID0ge30pIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzRG9uZSgpKSB7XG4gICAgICAgICAgICB0aGlzLm9wZXJhdGlvbiA9IGF3YWl0IHRoaXMub3BlcmF0aW9uLnVwZGF0ZSh7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgZmlyZVByb2dyZXNzOiB0aGlzLmZpcmVQcm9ncmVzcy5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcm9jZXNzVXBkYXRlZFN0YXRlKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIGZpcmVQcm9ncmVzcyBjYWxscyB0aGUgZnVuY3Rpb25zIHBhc3NlZCBpbiB2aWEgb25Qcm9ncmVzcyB0aGUgbWV0aG9kIG9mIHRoZSBwb2xsZXIuXG4gICAgICpcbiAgICAgKiBJdCBsb29wcyBvdmVyIGFsbCBvZiB0aGUgY2FsbGJhY2tzIHJlY2VpdmVkIGZyb20gb25Qcm9ncmVzcywgYW5kIGV4ZWN1dGVzIHRoZW0sIHNlbmRpbmcgdGhlbVxuICAgICAqIHRoZSBjdXJyZW50IG9wZXJhdGlvbiBzdGF0ZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzdGF0ZSAtIFRoZSBjdXJyZW50IG9wZXJhdGlvbiBzdGF0ZS5cbiAgICAgKi9cbiAgICBmaXJlUHJvZ3Jlc3Moc3RhdGUpIHtcbiAgICAgICAgZm9yIChjb25zdCBjYWxsYmFjayBvZiB0aGlzLnBvbGxQcm9ncmVzc0NhbGxiYWNrcykge1xuICAgICAgICAgICAgY2FsbGJhY2soc3RhdGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEludm9rZXMgdGhlIHVuZGVybHlpbmcgb3BlcmF0aW9uJ3MgY2FuY2VsIG1ldGhvZC5cbiAgICAgKi9cbiAgICBhc3luYyBjYW5jZWxPbmNlKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICB0aGlzLm9wZXJhdGlvbiA9IGF3YWl0IHRoaXMub3BlcmF0aW9uLmNhbmNlbChvcHRpb25zKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHByb21pc2UgdGhhdCB3aWxsIHJlc29sdmUgb25jZSBhIHNpbmdsZSBwb2xsaW5nIHJlcXVlc3QgZmluaXNoZXMuXG4gICAgICogSXQgZG9lcyB0aGlzIGJ5IGNhbGxpbmcgdGhlIHVwZGF0ZSBtZXRob2Qgb2YgdGhlIFBvbGxlcidzIG9wZXJhdGlvbi5cbiAgICAgKlxuICAgICAqIEl0IG9ubHkgb3B0aW9uYWxseSByZWNlaXZlcyBhbiBvYmplY3Qgd2l0aCBhbiBhYm9ydFNpZ25hbCBwcm9wZXJ0eSwgZnJvbSBcXEBhenVyZS9hYm9ydC1jb250cm9sbGVyJ3MgQWJvcnRTaWduYWxMaWtlLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBwcm9wZXJ0aWVzIHBhc3NlZCB0byB0aGUgb3BlcmF0aW9uJ3MgdXBkYXRlIG1ldGhvZC5cbiAgICAgKi9cbiAgICBwb2xsKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBpZiAoIXRoaXMucG9sbE9uY2VQcm9taXNlKSB7XG4gICAgICAgICAgICB0aGlzLnBvbGxPbmNlUHJvbWlzZSA9IHRoaXMucG9sbE9uY2Uob3B0aW9ucyk7XG4gICAgICAgICAgICBjb25zdCBjbGVhclBvbGxPbmNlUHJvbWlzZSA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnBvbGxPbmNlUHJvbWlzZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLnBvbGxPbmNlUHJvbWlzZS50aGVuKGNsZWFyUG9sbE9uY2VQcm9taXNlLCBjbGVhclBvbGxPbmNlUHJvbWlzZSkuY2F0Y2godGhpcy5yZWplY3QpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnBvbGxPbmNlUHJvbWlzZTtcbiAgICB9XG4gICAgcHJvY2Vzc1VwZGF0ZWRTdGF0ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMub3BlcmF0aW9uLnN0YXRlLmVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCF0aGlzLnJlc29sdmVPblVuc3VjY2Vzc2Z1bCkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVqZWN0KHRoaXMub3BlcmF0aW9uLnN0YXRlLmVycm9yKTtcbiAgICAgICAgICAgICAgICB0aHJvdyB0aGlzLm9wZXJhdGlvbi5zdGF0ZS5lcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcGVyYXRpb24uc3RhdGUuaXNDYW5jZWxsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICBpZiAoIXRoaXMucmVzb2x2ZU9uVW5zdWNjZXNzZnVsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgUG9sbGVyQ2FuY2VsbGVkRXJyb3IoXCJPcGVyYXRpb24gd2FzIGNhbmNlbGVkXCIpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc0RvbmUoKSAmJiB0aGlzLnJlc29sdmUpIHtcbiAgICAgICAgICAgIC8vIElmIHRoZSBwb2xsZXIgaGFzIGZpbmlzaGVkIHBvbGxpbmcsIHRoaXMgbWVhbnMgd2Ugbm93IGhhdmUgYSByZXN1bHQuXG4gICAgICAgICAgICAvLyBIb3dldmVyLCBpdCBjYW4gYmUgdGhlIGNhc2UgdGhhdCBUUmVzdWx0IGlzIGluc3RhbnRpYXRlZCB0byB2b2lkLCBzb1xuICAgICAgICAgICAgLy8gd2UgYXJlIG5vdCBleHBlY3RpbmcgYSByZXN1bHQgYW55d2F5LiBUbyBhc3NlcnQgdGhhdCB3ZSBtaWdodCBub3RcbiAgICAgICAgICAgIC8vIGhhdmUgYSByZXN1bHQgZXZlbnR1YWxseSBhZnRlciBmaW5pc2hpbmcgcG9sbGluZywgd2UgY2FzdCB0aGUgcmVzdWx0XG4gICAgICAgICAgICAvLyB0byBUUmVzdWx0LlxuICAgICAgICAgICAgdGhpcy5yZXNvbHZlKHRoaXMuZ2V0UmVzdWx0KCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBwcm9taXNlIHRoYXQgd2lsbCByZXNvbHZlIG9uY2UgdGhlIHVuZGVybHlpbmcgb3BlcmF0aW9uIGlzIGNvbXBsZXRlZC5cbiAgICAgKi9cbiAgICBhc3luYyBwb2xsVW50aWxEb25lKHBvbGxPcHRpb25zID0ge30pIHtcbiAgICAgICAgaWYgKHRoaXMuc3RvcHBlZCkge1xuICAgICAgICAgICAgdGhpcy5zdGFydFBvbGxpbmcocG9sbE9wdGlvbnMpLmNhdGNoKHRoaXMucmVqZWN0KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIHRoZSBzdGF0ZSBjb3VsZCBoYXZlIGJlZW4gdXBkYXRlZCBieVxuICAgICAgICAvLyBgY2FuY2VsT3BlcmF0aW9uYCwgZS5nLiB0aGUgb3BlcmF0aW9uIGlzIGNhbmNlbGVkIG9yIGFuIGVycm9yIG9jY3VycmVkLlxuICAgICAgICB0aGlzLnByb2Nlc3NVcGRhdGVkU3RhdGUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvbWlzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSW52b2tlcyB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgYWZ0ZXIgZWFjaCBwb2xsaW5nIGlzIGNvbXBsZXRlZCxcbiAgICAgKiBzZW5kaW5nIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBwb2xsZXIncyBvcGVyYXRpb24uXG4gICAgICpcbiAgICAgKiBJdCByZXR1cm5zIGEgbWV0aG9kIHRoYXQgY2FuIGJlIHVzZWQgdG8gc3RvcCByZWNlaXZpbmcgdXBkYXRlcyBvbiB0aGUgZ2l2ZW4gY2FsbGJhY2sgZnVuY3Rpb24uXG4gICAgICovXG4gICAgb25Qcm9ncmVzcyhjYWxsYmFjaykge1xuICAgICAgICB0aGlzLnBvbGxQcm9ncmVzc0NhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucG9sbFByb2dyZXNzQ2FsbGJhY2tzID0gdGhpcy5wb2xsUHJvZ3Jlc3NDYWxsYmFja3MuZmlsdGVyKChjKSA9PiBjICE9PSBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcG9sbGVyIGhhcyBmaW5pc2hlZCBwb2xsaW5nLlxuICAgICAqL1xuICAgIGlzRG9uZSgpIHtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLm9wZXJhdGlvbi5zdGF0ZTtcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4oc3RhdGUuaXNDb21wbGV0ZWQgfHwgc3RhdGUuaXNDYW5jZWxsZWQgfHwgc3RhdGUuZXJyb3IpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTdG9wcyB0aGUgcG9sbGVyIGZyb20gY29udGludWluZyB0byBwb2xsLlxuICAgICAqL1xuICAgIHN0b3BQb2xsaW5nKCkge1xuICAgICAgICBpZiAoIXRoaXMuc3RvcHBlZCkge1xuICAgICAgICAgICAgdGhpcy5zdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlamVjdCkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVqZWN0KG5ldyBQb2xsZXJTdG9wcGVkRXJyb3IoXCJUaGlzIHBvbGxlciBpcyBhbHJlYWR5IHN0b3BwZWRcIikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcG9sbGVyIGlzIHN0b3BwZWQuXG4gICAgICovXG4gICAgaXNTdG9wcGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdG9wcGVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBdHRlbXB0cyB0byBjYW5jZWwgdGhlIHVuZGVybHlpbmcgb3BlcmF0aW9uLlxuICAgICAqXG4gICAgICogSXQgb25seSBvcHRpb25hbGx5IHJlY2VpdmVzIGFuIG9iamVjdCB3aXRoIGFuIGFib3J0U2lnbmFsIHByb3BlcnR5LCBmcm9tIFxcQGF6dXJlL2Fib3J0LWNvbnRyb2xsZXIncyBBYm9ydFNpZ25hbExpa2UuXG4gICAgICpcbiAgICAgKiBJZiBpdCdzIGNhbGxlZCBhZ2FpbiBiZWZvcmUgaXQgZmluaXNoZXMsIGl0IHdpbGwgdGhyb3cgYW4gZXJyb3IuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIHByb3BlcnRpZXMgcGFzc2VkIHRvIHRoZSBvcGVyYXRpb24ncyB1cGRhdGUgbWV0aG9kLlxuICAgICAqL1xuICAgIGNhbmNlbE9wZXJhdGlvbihvcHRpb25zID0ge30pIHtcbiAgICAgICAgaWYgKCF0aGlzLmNhbmNlbFByb21pc2UpIHtcbiAgICAgICAgICAgIHRoaXMuY2FuY2VsUHJvbWlzZSA9IHRoaXMuY2FuY2VsT25jZShvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChvcHRpb25zLmFib3J0U2lnbmFsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBIGNhbmNlbCByZXF1ZXN0IGlzIGN1cnJlbnRseSBwZW5kaW5nXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmNhbmNlbFByb21pc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHN0YXRlIG9mIHRoZSBvcGVyYXRpb24uXG4gICAgICpcbiAgICAgKiBFdmVuIHRob3VnaCBUU3RhdGUgd2lsbCBiZSB0aGUgc2FtZSB0eXBlIGluc2lkZSBhbnkgb2YgdGhlIG1ldGhvZHMgb2YgYW55IGV4dGVuc2lvbiBvZiB0aGUgUG9sbGVyIGNsYXNzLFxuICAgICAqIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgcG9sbGVycyBjYW4gY3VzdG9taXplIHdoYXQncyBzaGFyZWQgd2l0aCB0aGUgcHVibGljIGJ5IHdyaXRpbmcgdGhlaXIgb3duXG4gICAgICogdmVyc2lvbiBvZiB0aGUgYGdldE9wZXJhdGlvblN0YXRlYCBtZXRob2QsIGFuZCBieSBkZWZpbmluZyB0d28gdHlwZXMsIG9uZSByZXByZXNlbnRpbmcgdGhlIGludGVybmFsIHN0YXRlIG9mIHRoZSBwb2xsZXJcbiAgICAgKiBhbmQgYSBwdWJsaWMgdHlwZSByZXByZXNlbnRpbmcgYSBzYWZlIHRvIHNoYXJlIHN1YnNldCBvZiB0aGUgcHJvcGVydGllcyBvZiB0aGUgaW50ZXJuYWwgc3RhdGUuXG4gICAgICogVGhlaXIgZGVmaW5pdGlvbiBvZiBnZXRPcGVyYXRpb25TdGF0ZSBjYW4gdGhlbiByZXR1cm4gdGhlaXIgcHVibGljIHR5cGUuXG4gICAgICpcbiAgICAgKiBFeGFtcGxlOlxuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiAvLyBMZXQncyBzYXkgd2UgaGF2ZSBvdXIgcG9sbGVyJ3Mgb3BlcmF0aW9uIHN0YXRlIGRlZmluZWQgYXM6XG4gICAgICogaW50ZXJmYWNlIE15T3BlcmF0aW9uU3RhdGUgZXh0ZW5kcyBQb2xsT3BlcmF0aW9uU3RhdGU8UmVzdWx0VHlwZT4ge1xuICAgICAqICAgcHJpdmF0ZVByb3BlcnR5Pzogc3RyaW5nO1xuICAgICAqICAgcHVibGljUHJvcGVydHk/OiBzdHJpbmc7XG4gICAgICogfVxuICAgICAqXG4gICAgICogLy8gVG8gYWxsb3cgdXMgdG8gaGF2ZSBhIHRydWUgc2VwYXJhdGlvbiBvZiBwdWJsaWMgYW5kIHByaXZhdGUgc3RhdGUsIHdlIGhhdmUgdG8gZGVmaW5lIGFub3RoZXIgaW50ZXJmYWNlOlxuICAgICAqIGludGVyZmFjZSBQdWJsaWNTdGF0ZSBleHRlbmRzIFBvbGxPcGVyYXRpb25TdGF0ZTxSZXN1bHRUeXBlPiB7XG4gICAgICogICBwdWJsaWNQcm9wZXJ0eT86IHN0cmluZztcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBUaGVuLCB3ZSBkZWZpbmUgb3VyIFBvbGxlciBhcyBmb2xsb3dzOlxuICAgICAqIGV4cG9ydCBjbGFzcyBNeVBvbGxlciBleHRlbmRzIFBvbGxlcjxNeU9wZXJhdGlvblN0YXRlLCBSZXN1bHRUeXBlPiB7XG4gICAgICogICAvLyAuLi4gTW9yZSBjb250ZW50IGlzIG5lZWRlZCBoZXJlIC4uLlxuICAgICAqXG4gICAgICogICBwdWJsaWMgZ2V0T3BlcmF0aW9uU3RhdGUoKTogUHVibGljU3RhdGUge1xuICAgICAqICAgICBjb25zdCBzdGF0ZTogUHVibGljU3RhdGUgPSB0aGlzLm9wZXJhdGlvbi5zdGF0ZTtcbiAgICAgKiAgICAgcmV0dXJuIHtcbiAgICAgKiAgICAgICAvLyBQcm9wZXJ0aWVzIGZyb20gUG9sbE9wZXJhdGlvblN0YXRlPFRSZXN1bHQ+XG4gICAgICogICAgICAgaXNTdGFydGVkOiBzdGF0ZS5pc1N0YXJ0ZWQsXG4gICAgICogICAgICAgaXNDb21wbGV0ZWQ6IHN0YXRlLmlzQ29tcGxldGVkLFxuICAgICAqICAgICAgIGlzQ2FuY2VsbGVkOiBzdGF0ZS5pc0NhbmNlbGxlZCxcbiAgICAgKiAgICAgICBlcnJvcjogc3RhdGUuZXJyb3IsXG4gICAgICogICAgICAgcmVzdWx0OiBzdGF0ZS5yZXN1bHQsXG4gICAgICpcbiAgICAgKiAgICAgICAvLyBUaGUgb25seSBvdGhlciBwcm9wZXJ0eSBuZWVkZWQgYnkgUHVibGljU3RhdGUuXG4gICAgICogICAgICAgcHVibGljUHJvcGVydHk6IHN0YXRlLnB1YmxpY1Byb3BlcnR5XG4gICAgICogICAgIH1cbiAgICAgKiAgIH1cbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBZb3UgY2FuIHNlZSB0aGlzIGluIHRoZSB0ZXN0cyBvZiB0aGlzIHJlcG9zaXRvcnksIGdvIHRvIHRoZSBmaWxlOlxuICAgICAqIGAuLi90ZXN0L3V0aWxzL3Rlc3RQb2xsZXIudHNgXG4gICAgICogYW5kIGxvb2sgZm9yIHRoZSBnZXRPcGVyYXRpb25TdGF0ZSBpbXBsZW1lbnRhdGlvbi5cbiAgICAgKi9cbiAgICBnZXRPcGVyYXRpb25TdGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3BlcmF0aW9uLnN0YXRlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgdmFsdWUgb2YgdGhlIG9wZXJhdGlvbixcbiAgICAgKiByZWdhcmRsZXNzIG9mIHRoZSBzdGF0ZSBvZiB0aGUgcG9sbGVyLlxuICAgICAqIEl0IGNhbiByZXR1cm4gdW5kZWZpbmVkIG9yIGFuIGluY29tcGxldGUgZm9ybSBvZiB0aGUgZmluYWwgVFJlc3VsdCB2YWx1ZVxuICAgICAqIGRlcGVuZGluZyBvbiB0aGUgaW1wbGVtZW50YXRpb24uXG4gICAgICovXG4gICAgZ2V0UmVzdWx0KCkge1xuICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMub3BlcmF0aW9uLnN0YXRlO1xuICAgICAgICByZXR1cm4gc3RhdGUucmVzdWx0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgc2VyaWFsaXplZCB2ZXJzaW9uIG9mIHRoZSBwb2xsZXIncyBvcGVyYXRpb25cbiAgICAgKiBieSBpbnZva2luZyB0aGUgb3BlcmF0aW9uJ3MgdG9TdHJpbmcgbWV0aG9kLlxuICAgICAqL1xuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcGVyYXRpb24udG9TdHJpbmcoKTtcbiAgICB9XG59XG5leHBvcnRzLlBvbGxlciA9IFBvbGxlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBvbGxlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkxyb0VuZ2luZSA9IHZvaWQgMDtcbmNvbnN0IG9wZXJhdGlvbl9qc18xID0gcmVxdWlyZShcIi4vb3BlcmF0aW9uLmpzXCIpO1xuY29uc3QgY29uc3RhbnRzX2pzXzEgPSByZXF1aXJlKFwiLi4vLi4vcG9sbGVyL2NvbnN0YW50cy5qc1wiKTtcbmNvbnN0IHBvbGxlcl9qc18xID0gcmVxdWlyZShcIi4uL3BvbGxlci5qc1wiKTtcbmNvbnN0IG9wZXJhdGlvbl9qc18yID0gcmVxdWlyZShcIi4uLy4uL3BvbGxlci9vcGVyYXRpb24uanNcIik7XG4vKipcbiAqIFRoZSBMUk8gRW5naW5lLCBhIGNsYXNzIHRoYXQgcGVyZm9ybXMgcG9sbGluZy5cbiAqL1xuY2xhc3MgTHJvRW5naW5lIGV4dGVuZHMgcG9sbGVyX2pzXzEuUG9sbGVyIHtcbiAgICBjb25zdHJ1Y3Rvcihscm8sIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgeyBpbnRlcnZhbEluTXMgPSBjb25zdGFudHNfanNfMS5QT0xMX0lOVEVSVkFMX0lOX01TLCByZXN1bWVGcm9tLCByZXNvbHZlT25VbnN1Y2Nlc3NmdWwgPSBmYWxzZSwgaXNEb25lLCBscm9SZXNvdXJjZUxvY2F0aW9uQ29uZmlnLCBwcm9jZXNzUmVzdWx0LCB1cGRhdGVTdGF0ZSwgfSA9IG9wdGlvbnMgfHwge307XG4gICAgICAgIGNvbnN0IHN0YXRlID0gcmVzdW1lRnJvbVxuICAgICAgICAgICAgPyAoMCwgb3BlcmF0aW9uX2pzXzIuZGVzZXJpYWxpemVTdGF0ZSkocmVzdW1lRnJvbSlcbiAgICAgICAgICAgIDoge307XG4gICAgICAgIGNvbnN0IG9wZXJhdGlvbiA9IG5ldyBvcGVyYXRpb25fanNfMS5HZW5lcmljUG9sbE9wZXJhdGlvbihzdGF0ZSwgbHJvLCAhcmVzb2x2ZU9uVW5zdWNjZXNzZnVsLCBscm9SZXNvdXJjZUxvY2F0aW9uQ29uZmlnLCBwcm9jZXNzUmVzdWx0LCB1cGRhdGVTdGF0ZSwgaXNEb25lKTtcbiAgICAgICAgc3VwZXIob3BlcmF0aW9uKTtcbiAgICAgICAgdGhpcy5yZXNvbHZlT25VbnN1Y2Nlc3NmdWwgPSByZXNvbHZlT25VbnN1Y2Nlc3NmdWw7XG4gICAgICAgIHRoaXMuY29uZmlnID0geyBpbnRlcnZhbEluTXM6IGludGVydmFsSW5NcyB9O1xuICAgICAgICBvcGVyYXRpb24uc2V0UG9sbGVyQ29uZmlnKHRoaXMuY29uZmlnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIG1ldGhvZCB1c2VkIGJ5IHRoZSBwb2xsZXIgdG8gd2FpdCBiZWZvcmUgYXR0ZW1wdGluZyB0byB1cGRhdGUgaXRzIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBkZWxheSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KCgpID0+IHJlc29sdmUoKSwgdGhpcy5jb25maWcuaW50ZXJ2YWxJbk1zKSk7XG4gICAgfVxufVxuZXhwb3J0cy5Mcm9FbmdpbmUgPSBMcm9FbmdpbmU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1scm9FbmdpbmUuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Mcm9FbmdpbmUgPSB2b2lkIDA7XG52YXIgbHJvRW5naW5lX2pzXzEgPSByZXF1aXJlKFwiLi9scm9FbmdpbmUuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJMcm9FbmdpbmVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGxyb0VuZ2luZV9qc18xLkxyb0VuZ2luZTsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBvbGxPcGVyYXRpb24uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jcmVhdGVIdHRwUG9sbGVyID0gdm9pZCAwO1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbnZhciBwb2xsZXJfanNfMSA9IHJlcXVpcmUoXCIuL2h0dHAvcG9sbGVyLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlSHR0cFBvbGxlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcG9sbGVyX2pzXzEuY3JlYXRlSHR0cFBvbGxlcjsgfSB9KTtcbi8qKlxuICogVGhpcyBjYW4gYmUgdW5jb21tZW50ZWQgdG8gZXhwb3NlIHRoZSBwcm90b2NvbC1hZ25vc3RpYyBwb2xsZXJcbiAqL1xuLy8gZXhwb3J0IHtcbi8vICAgQnVpbGRDcmVhdGVQb2xsZXJPcHRpb25zLFxuLy8gICBPcGVyYXRpb24sXG4vLyAgIENyZWF0ZVBvbGxlck9wdGlvbnMsXG4vLyAgIE9wZXJhdGlvbkNvbmZpZyxcbi8vICAgUmVzdG9yYWJsZU9wZXJhdGlvblN0YXRlLFxuLy8gfSBmcm9tIFwiLi9wb2xsZXIvbW9kZWxzXCI7XG4vLyBleHBvcnQgeyBidWlsZENyZWF0ZVBvbGxlciB9IGZyb20gXCIuL3BvbGxlci9wb2xsZXJcIjtcbi8qKiBsZWdhY3kgKi9cbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2xlZ2FjeS9scm9FbmdpbmUvaW5kZXguanNcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vbGVnYWN5L3BvbGxlci5qc1wiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9sZWdhY3kvcG9sbE9wZXJhdGlvbi5qc1wiKSwgZXhwb3J0cyk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxudmFyIGNvcmVSZXN0UGlwZWxpbmUgPSByZXF1aXJlKCdAYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lJyk7XG52YXIgdHNsaWIgPSByZXF1aXJlKCd0c2xpYicpO1xudmFyIGNvcmVBdXRoID0gcmVxdWlyZSgnQGF6dXJlL2NvcmUtYXV0aCcpO1xudmFyIGNvcmVVdGlsID0gcmVxdWlyZSgnQGF6dXJlL2NvcmUtdXRpbCcpO1xudmFyIGNvcmVIdHRwQ29tcGF0ID0gcmVxdWlyZSgnQGF6dXJlL2NvcmUtaHR0cC1jb21wYXQnKTtcbnZhciBjb3JlQ2xpZW50ID0gcmVxdWlyZSgnQGF6dXJlL2NvcmUtY2xpZW50Jyk7XG52YXIgY29yZVhtbCA9IHJlcXVpcmUoJ0BhenVyZS9jb3JlLXhtbCcpO1xudmFyIGxvZ2dlciQxID0gcmVxdWlyZSgnQGF6dXJlL2xvZ2dlcicpO1xudmFyIGFib3J0Q29udHJvbGxlciA9IHJlcXVpcmUoJ0BhenVyZS9hYm9ydC1jb250cm9sbGVyJyk7XG52YXIgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJyk7XG52YXIgY29yZVRyYWNpbmcgPSByZXF1aXJlKCdAYXp1cmUvY29yZS10cmFjaW5nJyk7XG52YXIgc3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJyk7XG52YXIgY29yZUxybyA9IHJlcXVpcmUoJ0BhenVyZS9jb3JlLWxybycpO1xudmFyIGV2ZW50cyA9IHJlcXVpcmUoJ2V2ZW50cycpO1xudmFyIGZzID0gcmVxdWlyZSgnZnMnKTtcbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xudmFyIGJ1ZmZlciA9IHJlcXVpcmUoJ2J1ZmZlcicpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcE5hbWVzcGFjZURlZmF1bHQoZSkge1xuICAgIHZhciBuID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICBpZiAoZSkge1xuICAgICAgICBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICBpZiAoayAhPT0gJ2RlZmF1bHQnKSB7XG4gICAgICAgICAgICAgICAgdmFyIGQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIGspO1xuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCBrLCBkLmdldCA/IGQgOiB7XG4gICAgICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZVtrXTsgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgbi5kZWZhdWx0ID0gZTtcbiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZShuKTtcbn1cblxudmFyIGNvcmVIdHRwQ29tcGF0X19uYW1lc3BhY2UgPSAvKiNfX1BVUkVfXyovX2ludGVyb3BOYW1lc3BhY2VEZWZhdWx0KGNvcmVIdHRwQ29tcGF0KTtcbnZhciBjb3JlQ2xpZW50X19uYW1lc3BhY2UgPSAvKiNfX1BVUkVfXyovX2ludGVyb3BOYW1lc3BhY2VEZWZhdWx0KGNvcmVDbGllbnQpO1xudmFyIGZzX19uYW1lc3BhY2UgPSAvKiNfX1BVUkVfXyovX2ludGVyb3BOYW1lc3BhY2VEZWZhdWx0KGZzKTtcbnZhciB1dGlsX19uYW1lc3BhY2UgPSAvKiNfX1BVUkVfXyovX2ludGVyb3BOYW1lc3BhY2VEZWZhdWx0KHV0aWwpO1xuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogVGhlIGBAYXp1cmUvbG9nZ2VyYCBjb25maWd1cmF0aW9uIGZvciB0aGlzIHBhY2thZ2UuXG4gKi9cbmNvbnN0IGxvZ2dlciA9IGxvZ2dlciQxLmNyZWF0ZUNsaWVudExvZ2dlcihcInN0b3JhZ2UtYmxvYlwiKTtcblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIFRoZSBiYXNlIGNsYXNzIGZyb20gd2hpY2ggYWxsIHJlcXVlc3QgcG9saWNpZXMgZGVyaXZlLlxuICovXG5jbGFzcyBCYXNlUmVxdWVzdFBvbGljeSB7XG4gICAgLyoqXG4gICAgICogVGhlIG1haW4gbWV0aG9kIHRvIGltcGxlbWVudCB0aGF0IG1hbmlwdWxhdGVzIGEgcmVxdWVzdC9yZXNwb25zZS5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAvKipcbiAgICAgKiBUaGUgbmV4dCBwb2xpY3kgaW4gdGhlIHBpcGVsaW5lLiBFYWNoIHBvbGljeSBpcyByZXNwb25zaWJsZSBmb3IgZXhlY3V0aW5nIHRoZSBuZXh0IG9uZSBpZiB0aGUgcmVxdWVzdCBpcyB0byBjb250aW51ZSB0aHJvdWdoIHRoZSBwaXBlbGluZS5cbiAgICAgKi9cbiAgICBfbmV4dFBvbGljeSwgXG4gICAgLyoqXG4gICAgICogVGhlIG9wdGlvbnMgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIGEgZ2l2ZW4gcmVxdWVzdCBwb2xpY3kuXG4gICAgICovXG4gICAgX29wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5fbmV4dFBvbGljeSA9IF9uZXh0UG9saWN5O1xuICAgICAgICB0aGlzLl9vcHRpb25zID0gX29wdGlvbnM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCB3aGV0aGVyIG9yIG5vdCBhIGxvZyB3aXRoIHRoZSBwcm92aWRlZCBsb2cgbGV2ZWwgc2hvdWxkIGJlIGxvZ2dlZC5cbiAgICAgKiBAcGFyYW0gbG9nTGV2ZWwgLSBUaGUgbG9nIGxldmVsIG9mIHRoZSBsb2cgdGhhdCB3aWxsIGJlIGxvZ2dlZC5cbiAgICAgKiBAcmV0dXJucyBXaGV0aGVyIG9yIG5vdCBhIGxvZyB3aXRoIHRoZSBwcm92aWRlZCBsb2cgbGV2ZWwgc2hvdWxkIGJlIGxvZ2dlZC5cbiAgICAgKi9cbiAgICBzaG91bGRMb2cobG9nTGV2ZWwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29wdGlvbnMuc2hvdWxkTG9nKGxvZ0xldmVsKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQXR0ZW1wdCB0byBsb2cgdGhlIHByb3ZpZGVkIG1lc3NhZ2UgdG8gdGhlIHByb3ZpZGVkIGxvZ2dlci4gSWYgbm8gbG9nZ2VyIHdhcyBwcm92aWRlZCBvciBpZlxuICAgICAqIHRoZSBsb2cgbGV2ZWwgZG9lcyBub3QgbWVhdCB0aGUgbG9nZ2VyJ3MgdGhyZXNob2xkLCB0aGVuIG5vdGhpbmcgd2lsbCBiZSBsb2dnZWQuXG4gICAgICogQHBhcmFtIGxvZ0xldmVsIC0gVGhlIGxvZyBsZXZlbCBvZiB0aGlzIGxvZy5cbiAgICAgKiBAcGFyYW0gbWVzc2FnZSAtIFRoZSBtZXNzYWdlIG9mIHRoaXMgbG9nLlxuICAgICAqL1xuICAgIGxvZyhsb2dMZXZlbCwgbWVzc2FnZSkge1xuICAgICAgICB0aGlzLl9vcHRpb25zLmxvZyhsb2dMZXZlbCwgbWVzc2FnZSk7XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbmNvbnN0IFNES19WRVJTSU9OID0gXCIxMi4yNS4wXCI7XG5jb25zdCBTRVJWSUNFX1ZFUlNJT04gPSBcIjIwMjQtMTEtMDRcIjtcbmNvbnN0IEJMT0NLX0JMT0JfTUFYX1VQTE9BRF9CTE9CX0JZVEVTID0gMjU2ICogMTAyNCAqIDEwMjQ7IC8vIDI1Nk1CXG5jb25zdCBCTE9DS19CTE9CX01BWF9TVEFHRV9CTE9DS19CWVRFUyA9IDQwMDAgKiAxMDI0ICogMTAyNDsgLy8gNDAwME1CXG5jb25zdCBCTE9DS19CTE9CX01BWF9CTE9DS1MgPSA1MDAwMDtcbmNvbnN0IERFRkFVTFRfQkxPQ0tfQlVGRkVSX1NJWkVfQllURVMgPSA4ICogMTAyNCAqIDEwMjQ7IC8vIDhNQlxuY29uc3QgREVGQVVMVF9CTE9CX0RPV05MT0FEX0JMT0NLX0JZVEVTID0gNCAqIDEwMjQgKiAxMDI0OyAvLyA0TUJcbmNvbnN0IERFRkFVTFRfTUFYX0RPV05MT0FEX1JFVFJZX1JFUVVFU1RTID0gNTtcbmNvbnN0IFJFUVVFU1RfVElNRU9VVCA9IDEwMCAqIDEwMDA7IC8vIEluIG1zXG4vKipcbiAqIFRoZSBPQXV0aCBzY29wZSB0byB1c2Ugd2l0aCBBenVyZSBTdG9yYWdlLlxuICovXG5jb25zdCBTdG9yYWdlT0F1dGhTY29wZXMgPSBcImh0dHBzOi8vc3RvcmFnZS5henVyZS5jb20vLmRlZmF1bHRcIjtcbmNvbnN0IFVSTENvbnN0YW50cyA9IHtcbiAgICBQYXJhbWV0ZXJzOiB7XG4gICAgICAgIEZPUkNFX0JST1dTRVJfTk9fQ0FDSEU6IFwiX1wiLFxuICAgICAgICBTSUdOQVRVUkU6IFwic2lnXCIsXG4gICAgICAgIFNOQVBTSE9UOiBcInNuYXBzaG90XCIsXG4gICAgICAgIFZFUlNJT05JRDogXCJ2ZXJzaW9uaWRcIixcbiAgICAgICAgVElNRU9VVDogXCJ0aW1lb3V0XCIsXG4gICAgfSxcbn07XG5jb25zdCBIVFRQVVJMQ29ubmVjdGlvbiA9IHtcbiAgICBIVFRQX0FDQ0VQVEVEOiAyMDIsXG4gICAgSFRUUF9DT05GTElDVDogNDA5LFxuICAgIEhUVFBfTk9UX0ZPVU5EOiA0MDQsXG4gICAgSFRUUF9QUkVDT05fRkFJTEVEOiA0MTIsXG4gICAgSFRUUF9SQU5HRV9OT1RfU0FUSVNGSUFCTEU6IDQxNixcbn07XG5jb25zdCBIZWFkZXJDb25zdGFudHMgPSB7XG4gICAgQVVUSE9SSVpBVElPTjogXCJBdXRob3JpemF0aW9uXCIsXG4gICAgQVVUSE9SSVpBVElPTl9TQ0hFTUU6IFwiQmVhcmVyXCIsXG4gICAgQ09OVEVOVF9FTkNPRElORzogXCJDb250ZW50LUVuY29kaW5nXCIsXG4gICAgQ09OVEVOVF9JRDogXCJDb250ZW50LUlEXCIsXG4gICAgQ09OVEVOVF9MQU5HVUFHRTogXCJDb250ZW50LUxhbmd1YWdlXCIsXG4gICAgQ09OVEVOVF9MRU5HVEg6IFwiQ29udGVudC1MZW5ndGhcIixcbiAgICBDT05URU5UX01ENTogXCJDb250ZW50LU1kNVwiLFxuICAgIENPTlRFTlRfVFJBTlNGRVJfRU5DT0RJTkc6IFwiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZ1wiLFxuICAgIENPTlRFTlRfVFlQRTogXCJDb250ZW50LVR5cGVcIixcbiAgICBDT09LSUU6IFwiQ29va2llXCIsXG4gICAgREFURTogXCJkYXRlXCIsXG4gICAgSUZfTUFUQ0g6IFwiaWYtbWF0Y2hcIixcbiAgICBJRl9NT0RJRklFRF9TSU5DRTogXCJpZi1tb2RpZmllZC1zaW5jZVwiLFxuICAgIElGX05PTkVfTUFUQ0g6IFwiaWYtbm9uZS1tYXRjaFwiLFxuICAgIElGX1VOTU9ESUZJRURfU0lOQ0U6IFwiaWYtdW5tb2RpZmllZC1zaW5jZVwiLFxuICAgIFBSRUZJWF9GT1JfU1RPUkFHRTogXCJ4LW1zLVwiLFxuICAgIFJBTkdFOiBcIlJhbmdlXCIsXG4gICAgVVNFUl9BR0VOVDogXCJVc2VyLUFnZW50XCIsXG4gICAgWF9NU19DTElFTlRfUkVRVUVTVF9JRDogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgWF9NU19DT1BZX1NPVVJDRTogXCJ4LW1zLWNvcHktc291cmNlXCIsXG4gICAgWF9NU19EQVRFOiBcIngtbXMtZGF0ZVwiLFxuICAgIFhfTVNfRVJST1JfQ09ERTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICBYX01TX1ZFUlNJT046IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgWF9NU19Db3B5U291cmNlRXJyb3JDb2RlOiBcIngtbXMtY29weS1zb3VyY2UtZXJyb3ItY29kZVwiLFxufTtcbmNvbnN0IEVUYWdOb25lID0gXCJcIjtcbmNvbnN0IEVUYWdBbnkgPSBcIipcIjtcbmNvbnN0IFNJWkVfMV9NQiA9IDEgKiAxMDI0ICogMTAyNDtcbmNvbnN0IEJBVENIX01BWF9SRVFVRVNUID0gMjU2O1xuY29uc3QgQkFUQ0hfTUFYX1BBWUxPQURfSU5fQllURVMgPSA0ICogU0laRV8xX01CO1xuY29uc3QgSFRUUF9MSU5FX0VORElORyA9IFwiXFxyXFxuXCI7XG5jb25zdCBIVFRQX1ZFUlNJT05fMV8xID0gXCJIVFRQLzEuMVwiO1xuY29uc3QgRW5jcnlwdGlvbkFsZ29yaXRobUFFUzI1ID0gXCJBRVMyNTZcIjtcbmNvbnN0IERldmVsb3BtZW50Q29ubmVjdGlvblN0cmluZyA9IGBEZWZhdWx0RW5kcG9pbnRzUHJvdG9jb2w9aHR0cDtBY2NvdW50TmFtZT1kZXZzdG9yZWFjY291bnQxO0FjY291bnRLZXk9RWJ5OHZkTTAyeE5PY3FGbHFVd0pQTGxtRXRsQ0RYSjFPVXpGVDUwdVNSWjZJRnN1RnEyVVZFckN6NEk2dHEvSzFTWkZQVE90ci9LQkhCZWtzb0dNR3c9PTtCbG9iRW5kcG9pbnQ9aHR0cDovLzEyNy4wLjAuMToxMDAwMC9kZXZzdG9yZWFjY291bnQxO2A7XG5jb25zdCBTdG9yYWdlQmxvYkxvZ2dpbmdBbGxvd2VkSGVhZGVyTmFtZXMgPSBbXG4gICAgXCJBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW5cIixcbiAgICBcIkNhY2hlLUNvbnRyb2xcIixcbiAgICBcIkNvbnRlbnQtTGVuZ3RoXCIsXG4gICAgXCJDb250ZW50LVR5cGVcIixcbiAgICBcIkRhdGVcIixcbiAgICBcIlJlcXVlc3QtSWRcIixcbiAgICBcInRyYWNlcGFyZW50XCIsXG4gICAgXCJUcmFuc2Zlci1FbmNvZGluZ1wiLFxuICAgIFwiVXNlci1BZ2VudFwiLFxuICAgIFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgIFwieC1tcy1kYXRlXCIsXG4gICAgXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgIFwieC1tcy1yZXR1cm4tY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICBcIngtbXMtdmVyc2lvblwiLFxuICAgIFwiQWNjZXB0LVJhbmdlc1wiLFxuICAgIFwiQ29udGVudC1EaXNwb3NpdGlvblwiLFxuICAgIFwiQ29udGVudC1FbmNvZGluZ1wiLFxuICAgIFwiQ29udGVudC1MYW5ndWFnZVwiLFxuICAgIFwiQ29udGVudC1NRDVcIixcbiAgICBcIkNvbnRlbnQtUmFuZ2VcIixcbiAgICBcIkVUYWdcIixcbiAgICBcIkxhc3QtTW9kaWZpZWRcIixcbiAgICBcIlNlcnZlclwiLFxuICAgIFwiVmFyeVwiLFxuICAgIFwieC1tcy1jb250ZW50LWNyYzY0XCIsXG4gICAgXCJ4LW1zLWNvcHktYWN0aW9uXCIsXG4gICAgXCJ4LW1zLWNvcHktY29tcGxldGlvbi10aW1lXCIsXG4gICAgXCJ4LW1zLWNvcHktaWRcIixcbiAgICBcIngtbXMtY29weS1wcm9ncmVzc1wiLFxuICAgIFwieC1tcy1jb3B5LXN0YXR1c1wiLFxuICAgIFwieC1tcy1oYXMtaW1tdXRhYmlsaXR5LXBvbGljeVwiLFxuICAgIFwieC1tcy1oYXMtbGVnYWwtaG9sZFwiLFxuICAgIFwieC1tcy1sZWFzZS1zdGF0ZVwiLFxuICAgIFwieC1tcy1sZWFzZS1zdGF0dXNcIixcbiAgICBcIngtbXMtcmFuZ2VcIixcbiAgICBcIngtbXMtcmVxdWVzdC1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgXCJ4LW1zLXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICBcIngtbXMtc25hcHNob3RcIixcbiAgICBcIngtbXMtc291cmNlLXJhbmdlXCIsXG4gICAgXCJJZi1NYXRjaFwiLFxuICAgIFwiSWYtTW9kaWZpZWQtU2luY2VcIixcbiAgICBcIklmLU5vbmUtTWF0Y2hcIixcbiAgICBcIklmLVVubW9kaWZpZWQtU2luY2VcIixcbiAgICBcIngtbXMtYWNjZXNzLXRpZXJcIixcbiAgICBcIngtbXMtYWNjZXNzLXRpZXItY2hhbmdlLXRpbWVcIixcbiAgICBcIngtbXMtYWNjZXNzLXRpZXItaW5mZXJyZWRcIixcbiAgICBcIngtbXMtYWNjb3VudC1raW5kXCIsXG4gICAgXCJ4LW1zLWFyY2hpdmUtc3RhdHVzXCIsXG4gICAgXCJ4LW1zLWJsb2ItYXBwZW5kLW9mZnNldFwiLFxuICAgIFwieC1tcy1ibG9iLWNhY2hlLWNvbnRyb2xcIixcbiAgICBcIngtbXMtYmxvYi1jb21taXR0ZWQtYmxvY2stY291bnRcIixcbiAgICBcIngtbXMtYmxvYi1jb25kaXRpb24tYXBwZW5kcG9zXCIsXG4gICAgXCJ4LW1zLWJsb2ItY29uZGl0aW9uLW1heHNpemVcIixcbiAgICBcIngtbXMtYmxvYi1jb250ZW50LWRpc3Bvc2l0aW9uXCIsXG4gICAgXCJ4LW1zLWJsb2ItY29udGVudC1lbmNvZGluZ1wiLFxuICAgIFwieC1tcy1ibG9iLWNvbnRlbnQtbGFuZ3VhZ2VcIixcbiAgICBcIngtbXMtYmxvYi1jb250ZW50LWxlbmd0aFwiLFxuICAgIFwieC1tcy1ibG9iLWNvbnRlbnQtbWQ1XCIsXG4gICAgXCJ4LW1zLWJsb2ItY29udGVudC10eXBlXCIsXG4gICAgXCJ4LW1zLWJsb2ItcHVibGljLWFjY2Vzc1wiLFxuICAgIFwieC1tcy1ibG9iLXNlcXVlbmNlLW51bWJlclwiLFxuICAgIFwieC1tcy1ibG9iLXR5cGVcIixcbiAgICBcIngtbXMtY29weS1kZXN0aW5hdGlvbi1zbmFwc2hvdFwiLFxuICAgIFwieC1tcy1jcmVhdGlvbi10aW1lXCIsXG4gICAgXCJ4LW1zLWRlZmF1bHQtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgIFwieC1tcy1kZWxldGUtc25hcHNob3RzXCIsXG4gICAgXCJ4LW1zLWRlbGV0ZS10eXBlLXBlcm1hbmVudFwiLFxuICAgIFwieC1tcy1kZW55LWVuY3J5cHRpb24tc2NvcGUtb3ZlcnJpZGVcIixcbiAgICBcIngtbXMtZW5jcnlwdGlvbi1hbGdvcml0aG1cIixcbiAgICBcIngtbXMtaWYtc2VxdWVuY2UtbnVtYmVyLWVxXCIsXG4gICAgXCJ4LW1zLWlmLXNlcXVlbmNlLW51bWJlci1sZVwiLFxuICAgIFwieC1tcy1pZi1zZXF1ZW5jZS1udW1iZXItbHRcIixcbiAgICBcIngtbXMtaW5jcmVtZW50YWwtY29weVwiLFxuICAgIFwieC1tcy1sZWFzZS1hY3Rpb25cIixcbiAgICBcIngtbXMtbGVhc2UtYnJlYWstcGVyaW9kXCIsXG4gICAgXCJ4LW1zLWxlYXNlLWR1cmF0aW9uXCIsXG4gICAgXCJ4LW1zLWxlYXNlLWlkXCIsXG4gICAgXCJ4LW1zLWxlYXNlLXRpbWVcIixcbiAgICBcIngtbXMtcGFnZS13cml0ZVwiLFxuICAgIFwieC1tcy1wcm9wb3NlZC1sZWFzZS1pZFwiLFxuICAgIFwieC1tcy1yYW5nZS1nZXQtY29udGVudC1tZDVcIixcbiAgICBcIngtbXMtcmVoeWRyYXRlLXByaW9yaXR5XCIsXG4gICAgXCJ4LW1zLXNlcXVlbmNlLW51bWJlci1hY3Rpb25cIixcbiAgICBcIngtbXMtc2t1LW5hbWVcIixcbiAgICBcIngtbXMtc291cmNlLWNvbnRlbnQtbWQ1XCIsXG4gICAgXCJ4LW1zLXNvdXJjZS1pZi1tYXRjaFwiLFxuICAgIFwieC1tcy1zb3VyY2UtaWYtbW9kaWZpZWQtc2luY2VcIixcbiAgICBcIngtbXMtc291cmNlLWlmLW5vbmUtbWF0Y2hcIixcbiAgICBcIngtbXMtc291cmNlLWlmLXVubW9kaWZpZWQtc2luY2VcIixcbiAgICBcIngtbXMtdGFnLWNvdW50XCIsXG4gICAgXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgIFwieC1tcy1jb3B5LXNvdXJjZS1lcnJvci1jb2RlXCIsXG4gICAgXCJ4LW1zLWNvcHktc291cmNlLXN0YXR1cy1jb2RlXCIsXG4gICAgXCJ4LW1zLWlmLXRhZ3NcIixcbiAgICBcIngtbXMtc291cmNlLWlmLXRhZ3NcIixcbl07XG5jb25zdCBTdG9yYWdlQmxvYkxvZ2dpbmdBbGxvd2VkUXVlcnlQYXJhbWV0ZXJzID0gW1xuICAgIFwiY29tcFwiLFxuICAgIFwibWF4cmVzdWx0c1wiLFxuICAgIFwicnNjY1wiLFxuICAgIFwicnNjZFwiLFxuICAgIFwicnNjZVwiLFxuICAgIFwicnNjbFwiLFxuICAgIFwicnNjdFwiLFxuICAgIFwic2VcIixcbiAgICBcInNpXCIsXG4gICAgXCJzaXBcIixcbiAgICBcInNwXCIsXG4gICAgXCJzcHJcIixcbiAgICBcInNyXCIsXG4gICAgXCJzcnRcIixcbiAgICBcInNzXCIsXG4gICAgXCJzdFwiLFxuICAgIFwic3ZcIixcbiAgICBcImluY2x1ZGVcIixcbiAgICBcIm1hcmtlclwiLFxuICAgIFwicHJlZml4XCIsXG4gICAgXCJjb3B5aWRcIixcbiAgICBcInJlc3R5cGVcIixcbiAgICBcImJsb2NraWRcIixcbiAgICBcImJsb2NrbGlzdHR5cGVcIixcbiAgICBcImRlbGltaXRlclwiLFxuICAgIFwicHJldnNuYXBzaG90XCIsXG4gICAgXCJza2VcIixcbiAgICBcInNrb2lkXCIsXG4gICAgXCJza3NcIixcbiAgICBcInNrdFwiLFxuICAgIFwic2t0aWRcIixcbiAgICBcInNrdlwiLFxuICAgIFwic25hcHNob3RcIixcbl07XG5jb25zdCBCbG9iVXNlc0N1c3RvbWVyU3BlY2lmaWVkRW5jcnlwdGlvbk1zZyA9IFwiQmxvYlVzZXNDdXN0b21lclNwZWNpZmllZEVuY3J5cHRpb25cIjtcbmNvbnN0IEJsb2JEb2VzTm90VXNlQ3VzdG9tZXJTcGVjaWZpZWRFbmNyeXB0aW9uID0gXCJCbG9iRG9lc05vdFVzZUN1c3RvbWVyU3BlY2lmaWVkRW5jcnlwdGlvblwiO1xuLy8vIExpc3Qgb2YgcG9ydHMgdXNlZCBmb3IgcGF0aCBzdHlsZSBhZGRyZXNzaW5nLlxuLy8vIFBhdGggc3R5bGUgYWRkcmVzc2luZyBtZWFucyB0aGF0IHN0b3JhZ2UgYWNjb3VudCBpcyBwdXQgaW4gVVJJJ3MgUGF0aCBzZWdtZW50IGluIGluc3RlYWQgb2YgaW4gaG9zdC5cbmNvbnN0IFBhdGhTdHlsZVBvcnRzID0gW1xuICAgIFwiMTAwMDBcIixcbiAgICBcIjEwMDAxXCIsXG4gICAgXCIxMDAwMlwiLFxuICAgIFwiMTAwMDNcIixcbiAgICBcIjEwMDA0XCIsXG4gICAgXCIxMDEwMFwiLFxuICAgIFwiMTAxMDFcIixcbiAgICBcIjEwMTAyXCIsXG4gICAgXCIxMDEwM1wiLFxuICAgIFwiMTAxMDRcIixcbiAgICBcIjExMDAwXCIsXG4gICAgXCIxMTAwMVwiLFxuICAgIFwiMTEwMDJcIixcbiAgICBcIjExMDAzXCIsXG4gICAgXCIxMTAwNFwiLFxuICAgIFwiMTExMDBcIixcbiAgICBcIjExMTAxXCIsXG4gICAgXCIxMTEwMlwiLFxuICAgIFwiMTExMDNcIixcbiAgICBcIjExMTA0XCIsXG5dO1xuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogUmVzZXJ2ZWQgVVJMIGNoYXJhY3RlcnMgbXVzdCBiZSBwcm9wZXJseSBlc2NhcGVkIGZvciBTdG9yYWdlIHNlcnZpY2VzIGxpa2UgQmxvYiBvciBGaWxlLlxuICpcbiAqICMjIFVSTCBlbmNvZGUgYW5kIGVzY2FwZSBzdHJhdGVneSBmb3IgSlMgU0RLc1xuICpcbiAqIFdoZW4gY3VzdG9tZXJzIHBhc3MgYSBVUkwgc3RyaW5nIGludG8gWHh4Q2xpZW50IGNsYXNzZXMgY29uc3RydWN0b3IsIHRoZSBVUkwgc3RyaW5nIG1heSBhbHJlYWR5IGJlIFVSTCBlbmNvZGVkIG9yIG5vdC5cbiAqIEJ1dCBiZWZvcmUgc2VuZGluZyB0byBBenVyZSBTdG9yYWdlIHNlcnZlciwgdGhlIFVSTCBtdXN0IGJlIGVuY29kZWQuIEhvd2V2ZXIsIGl0J3MgaGFyZCBmb3IgYSBTREsgdG8gZ3Vlc3Mgd2hldGhlciB0aGUgVVJMXG4gKiBzdHJpbmcgaGFzIGJlZW4gZW5jb2RlZCBvciBub3QuIFdlIGhhdmUgMiBwb3RlbnRpYWwgc3RyYXRlZ2llcywgYW5kIGNob3NlIHN0cmF0ZWd5IHR3byBmb3IgdGhlIFh4eENsaWVudCBjb25zdHJ1Y3RvcnMuXG4gKlxuICogIyMjIFN0cmF0ZWd5IE9uZTogQXNzdW1lIHRoZSBjdXN0b21lciBVUkwgc3RyaW5nIGlzIG5vdCBlbmNvZGVkLCBhbmQgYWx3YXlzIGVuY29kZSBVUkwgc3RyaW5nIGluIFNESy5cbiAqXG4gKiBUaGlzIGlzIHdoYXQgbGVnYWN5IFYyIFNESyBkb2VzLCBzaW1wbGUgYW5kIHdvcmtzIGZvciBtb3N0IG9mIHRoZSBjYXNlcy5cbiAqIC0gV2hlbiBjdXN0b21lciBVUkwgc3RyaW5nIGlzIFwiaHR0cDovL2FjY291bnQuYmxvYi5jb3JlLndpbmRvd3MubmV0L2Nvbi9iOlwiLFxuICogICBTREsgd2lsbCBlbmNvZGUgaXQgdG8gXCJodHRwOi8vYWNjb3VudC5ibG9iLmNvcmUud2luZG93cy5uZXQvY29uL2IlM0FcIiBhbmQgc2VuZCB0byBzZXJ2ZXIuIEEgYmxvYiBuYW1lZCBcImI6XCIgd2lsbCBiZSBjcmVhdGVkLlxuICogLSBXaGVuIGN1c3RvbWVyIFVSTCBzdHJpbmcgaXMgXCJodHRwOi8vYWNjb3VudC5ibG9iLmNvcmUud2luZG93cy5uZXQvY29uL2IlM0FcIixcbiAqICAgU0RLIHdpbGwgZW5jb2RlIGl0IHRvIFwiaHR0cDovL2FjY291bnQuYmxvYi5jb3JlLndpbmRvd3MubmV0L2Nvbi9iJTI1M0FcIiBhbmQgc2VuZCB0byBzZXJ2ZXIuIEEgYmxvYiBuYW1lZCBcImIlM0FcIiB3aWxsIGJlIGNyZWF0ZWQuXG4gKlxuICogQnV0IHRoaXMgc3RyYXRlZ3kgd2lsbCBtYWtlIGl0IG5vdCBwb3NzaWJsZSB0byBjcmVhdGUgYSBibG9iIHdpdGggXCI/XCIgaW4gaXQncyBuYW1lLiBCZWNhdXNlIHdoZW4gY3VzdG9tZXIgVVJMIHN0cmluZyBpc1xuICogXCJodHRwOi8vYWNjb3VudC5ibG9iLmNvcmUud2luZG93cy5uZXQvY29uL2Jsb2I/bmFtZVwiLCB0aGUgXCI/bmFtZVwiIHdpbGwgYmUgdHJlYXRlZCBhcyBVUkwgcGFyYW10ZXIgaW5zdGVhZCBvZiBibG9iIG5hbWUuXG4gKiBJZiBjdXN0b21lciBVUkwgc3RyaW5nIGlzIFwiaHR0cDovL2FjY291bnQuYmxvYi5jb3JlLndpbmRvd3MubmV0L2Nvbi9ibG9iJTNGbmFtZVwiLCBhIGJsb2IgbmFtZWQgXCJibG9iJTNGbmFtZVwiIHdpbGwgYmUgY3JlYXRlZC5cbiAqIFYyIFNESyBkb2Vzbid0IGhhdmUgdGhpcyBpc3N1ZSBiZWNhdXNlIGl0IGRvZXNuJ3QgYWxsb3cgY3VzdG9tZXIgcGFzcyBpbiBhIGZ1bGwgVVJMLCBpdCBhY2NlcHRzIGEgc2VwYXJhdGUgYmxvYiBuYW1lIGFuZCBlbmNvZGVVUklDb21wb25lbnQgZm9yIGl0LlxuICogV2UgY2Fubm90IGFjY2VwdCBhIFNESyBjYW5ub3QgY3JlYXRlIGEgYmxvYiBuYW1lIHdpdGggXCI/XCIuIFNvIHdlIGltcGxlbWVudCBzdHJhdGVneSB0d286XG4gKlxuICogIyMjIFN0cmF0ZWd5IFR3bzogU0RLIGRvZXNuJ3QgYXNzdW1lIHRoZSBVUkwgaGFzIGJlZW4gZW5jb2RlZCBvciBub3QuIEl0IHdpbGwganVzdCBlc2NhcGUgdGhlIHNwZWNpYWwgY2hhcmFjdGVycy5cbiAqXG4gKiBUaGlzIGlzIHdoYXQgVjEwIEJsb2IgR28gU0RLIGRvZXMuIEl0IGFjY2VwdHMgYSBVUkwgdHlwZSBpbiBHbywgYW5kIGNhbGwgdXJsLkVzY2FwZWRQYXRoKCkgdG8gZXNjYXBlIHRoZSBzcGVjaWFsIGNoYXJzIHVuZXNjYXBlZC5cbiAqIC0gV2hlbiBjdXN0b21lciBVUkwgc3RyaW5nIGlzIFwiaHR0cDovL2FjY291bnQuYmxvYi5jb3JlLndpbmRvd3MubmV0L2Nvbi9iOlwiLFxuICogICBTREsgd2lsbCBlc2NhcGUgXCI6XCIgbGlrZSBcImh0dHA6Ly9hY2NvdW50LmJsb2IuY29yZS53aW5kb3dzLm5ldC9jb24vYiUzQVwiIGFuZCBzZW5kIHRvIHNlcnZlci4gQSBibG9iIG5hbWVkIFwiYjpcIiB3aWxsIGJlIGNyZWF0ZWQuXG4gKiAtIFdoZW4gY3VzdG9tZXIgVVJMIHN0cmluZyBpcyBcImh0dHA6Ly9hY2NvdW50LmJsb2IuY29yZS53aW5kb3dzLm5ldC9jb24vYiUzQVwiLFxuICogICBUaGVyZSBpcyBubyBzcGVjaWFsIGNoYXJhY3RlcnMsIHNvIHNlbmQgXCJodHRwOi8vYWNjb3VudC5ibG9iLmNvcmUud2luZG93cy5uZXQvY29uL2IlM0FcIiB0byBzZXJ2ZXIuIEEgYmxvYiBuYW1lZCBcImI6XCIgd2lsbCBiZSBjcmVhdGVkLlxuICogLSBXaGVuIGN1c3RvbWVyIFVSTCBzdHJpbmcgaXMgXCJodHRwOi8vYWNjb3VudC5ibG9iLmNvcmUud2luZG93cy5uZXQvY29uL2IlMjUzQVwiLFxuICogICBUaGVyZSBpcyBubyBzcGVjaWFsIGNoYXJhY3RlcnMsIHNvIHNlbmQgXCJodHRwOi8vYWNjb3VudC5ibG9iLmNvcmUud2luZG93cy5uZXQvY29uL2IlMjUzQVwiIHRvIHNlcnZlci4gQSBibG9iIG5hbWVkIFwiYiUzQVwiIHdpbGwgYmUgY3JlYXRlZC5cbiAqXG4gKiBUaGlzIHN0cmF0ZWd5IGdpdmVzIHVzIGZsZXhpYmlsaXR5IHRvIGNyZWF0ZSB3aXRoIGFueSBzcGVjaWFsIGNoYXJhY3RlcnMuIEJ1dCBcIiVcIiB3aWxsIGJlIHRyZWF0ZWQgYXMgYSBzcGVjaWFsIGNoYXJhY3RlcnMsIGlmIHRoZSBVUkwgc3RyaW5nXG4gKiBpcyBub3QgZW5jb2RlZCwgdGhlcmUgc2hvdWxkbid0IGEgXCIlXCIgaW4gdGhlIFVSTCBzdHJpbmcsIG90aGVyd2lzZSB0aGUgVVJMIGlzIG5vdCBhIHZhbGlkIFVSTC5cbiAqIElmIGN1c3RvbWVyIG5lZWRzIHRvIGNyZWF0ZSBhIGJsb2Igd2l0aCBcIiVcIiBpbiBpdCdzIGJsb2IgbmFtZSwgdXNlIFwiJTI1XCIgaW5zdGVhZCBvZiBcIiVcIi4gSnVzdCBsaWtlIGFib3ZlIDNyZCBzYW1wbGUuXG4gKiBBbmQgZm9sbG93aW5nIFVSTCBzdHJpbmdzIGFyZSBpbnZhbGlkOlxuICogLSBcImh0dHA6Ly9hY2NvdW50LmJsb2IuY29yZS53aW5kb3dzLm5ldC9jb24vYiVcIlxuICogLSBcImh0dHA6Ly9hY2NvdW50LmJsb2IuY29yZS53aW5kb3dzLm5ldC9jb24vYiUyXCJcbiAqIC0gXCJodHRwOi8vYWNjb3VudC5ibG9iLmNvcmUud2luZG93cy5uZXQvY29uL2IlR1wiXG4gKlxuICogQW5vdGhlciBzcGVjaWFsIGNoYXJhY3RlciBpcyBcIj9cIiwgdXNlIFwiJTJGXCIgdG8gcmVwcmVzZW50IGEgYmxvYiBuYW1lIHdpdGggXCI/XCIgaW4gYSBVUkwgc3RyaW5nLlxuICpcbiAqICMjIyBTdHJhdGVneSBmb3IgY29udGFpbmVyTmFtZSwgYmxvYk5hbWUgb3Igb3RoZXIgc3BlY2lmaWMgWFhYTmFtZSBwYXJhbWV0ZXJzIGluIG1ldGhvZHMgc3VjaCBhcyBgY29udGFpbmVyQ2xpZW50LmdldEJsb2JDbGllbnQoYmxvYk5hbWUpYFxuICpcbiAqIFdlIHdpbGwgYXBwbHkgc3RyYXRlZ3kgb25lLCBhbmQgY2FsbCBlbmNvZGVVUklDb21wb25lbnQgZm9yIHRoZXNlIHBhcmFtZXRlcnMgbGlrZSBibG9iTmFtZS4gQmVjYXVzZSB3aGF0IGN1c3RvbWVycyBwYXNzZXMgaW4gaXMgYSBwbGFpbiBuYW1lIGluc3RlYWQgb2YgYSBVUkwuXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvbmFtaW5nLWFuZC1yZWZlcmVuY2luZy1jb250YWluZXJzLS1ibG9icy0tYW5kLW1ldGFkYXRhXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9uYW1pbmctYW5kLXJlZmVyZW5jaW5nLXNoYXJlcy0tZGlyZWN0b3JpZXMtLWZpbGVzLS1hbmQtbWV0YWRhdGFcbiAqXG4gKiBAcGFyYW0gdXJsIC1cbiAqL1xuZnVuY3Rpb24gZXNjYXBlVVJMUGF0aCh1cmwpIHtcbiAgICBjb25zdCB1cmxQYXJzZWQgPSBuZXcgVVJMKHVybCk7XG4gICAgbGV0IHBhdGggPSB1cmxQYXJzZWQucGF0aG5hbWU7XG4gICAgcGF0aCA9IHBhdGggfHwgXCIvXCI7XG4gICAgcGF0aCA9IGVzY2FwZShwYXRoKTtcbiAgICB1cmxQYXJzZWQucGF0aG5hbWUgPSBwYXRoO1xuICAgIHJldHVybiB1cmxQYXJzZWQudG9TdHJpbmcoKTtcbn1cbmZ1bmN0aW9uIGdldFByb3h5VXJpRnJvbURldkNvbm5TdHJpbmcoY29ubmVjdGlvblN0cmluZykge1xuICAgIC8vIERldmVsb3BtZW50IENvbm5lY3Rpb24gU3RyaW5nXG4gICAgLy8gaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvYXp1cmUvc3RvcmFnZS9jb21tb24vc3RvcmFnZS1jb25maWd1cmUtY29ubmVjdGlvbi1zdHJpbmcjY29ubmVjdC10by10aGUtZW11bGF0b3ItYWNjb3VudC11c2luZy10aGUtd2VsbC1rbm93bi1hY2NvdW50LW5hbWUtYW5kLWtleVxuICAgIGxldCBwcm94eVVyaSA9IFwiXCI7XG4gICAgaWYgKGNvbm5lY3Rpb25TdHJpbmcuc2VhcmNoKFwiRGV2ZWxvcG1lbnRTdG9yYWdlUHJveHlVcmk9XCIpICE9PSAtMSkge1xuICAgICAgICAvLyBDT05ORUNUSU9OX1NUUklORz1Vc2VEZXZlbG9wbWVudFN0b3JhZ2U9dHJ1ZTtEZXZlbG9wbWVudFN0b3JhZ2VQcm94eVVyaT1odHRwOi8vbXlQcm94eVVyaVxuICAgICAgICBjb25zdCBtYXRjaENyZWRlbnRpYWxzID0gY29ubmVjdGlvblN0cmluZy5zcGxpdChcIjtcIik7XG4gICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBtYXRjaENyZWRlbnRpYWxzKSB7XG4gICAgICAgICAgICBpZiAoZWxlbWVudC50cmltKCkuc3RhcnRzV2l0aChcIkRldmVsb3BtZW50U3RvcmFnZVByb3h5VXJpPVwiKSkge1xuICAgICAgICAgICAgICAgIHByb3h5VXJpID0gZWxlbWVudC50cmltKCkubWF0Y2goXCJEZXZlbG9wbWVudFN0b3JhZ2VQcm94eVVyaT0oLiopXCIpWzFdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwcm94eVVyaTtcbn1cbmZ1bmN0aW9uIGdldFZhbHVlSW5Db25uU3RyaW5nKGNvbm5lY3Rpb25TdHJpbmcsIGFyZ3VtZW50KSB7XG4gICAgY29uc3QgZWxlbWVudHMgPSBjb25uZWN0aW9uU3RyaW5nLnNwbGl0KFwiO1wiKTtcbiAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgZWxlbWVudHMpIHtcbiAgICAgICAgaWYgKGVsZW1lbnQudHJpbSgpLnN0YXJ0c1dpdGgoYXJndW1lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudC50cmltKCkubWF0Y2goYXJndW1lbnQgKyBcIj0oLiopXCIpWzFdO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBcIlwiO1xufVxuLyoqXG4gKiBFeHRyYWN0cyB0aGUgcGFydHMgb2YgYW4gQXp1cmUgU3RvcmFnZSBhY2NvdW50IGNvbm5lY3Rpb24gc3RyaW5nLlxuICpcbiAqIEBwYXJhbSBjb25uZWN0aW9uU3RyaW5nIC0gQ29ubmVjdGlvbiBzdHJpbmcuXG4gKiBAcmV0dXJucyBTdHJpbmcga2V5IHZhbHVlIHBhaXJzIG9mIHRoZSBzdG9yYWdlIGFjY291bnQncyB1cmwgYW5kIGNyZWRlbnRpYWxzLlxuICovXG5mdW5jdGlvbiBleHRyYWN0Q29ubmVjdGlvblN0cmluZ1BhcnRzKGNvbm5lY3Rpb25TdHJpbmcpIHtcbiAgICBsZXQgcHJveHlVcmkgPSBcIlwiO1xuICAgIGlmIChjb25uZWN0aW9uU3RyaW5nLnN0YXJ0c1dpdGgoXCJVc2VEZXZlbG9wbWVudFN0b3JhZ2U9dHJ1ZVwiKSkge1xuICAgICAgICAvLyBEZXZlbG9wbWVudCBjb25uZWN0aW9uIHN0cmluZ1xuICAgICAgICBwcm94eVVyaSA9IGdldFByb3h5VXJpRnJvbURldkNvbm5TdHJpbmcoY29ubmVjdGlvblN0cmluZyk7XG4gICAgICAgIGNvbm5lY3Rpb25TdHJpbmcgPSBEZXZlbG9wbWVudENvbm5lY3Rpb25TdHJpbmc7XG4gICAgfVxuICAgIC8vIE1hdGNoaW5nIEJsb2JFbmRwb2ludCBpbiB0aGUgQWNjb3VudCBjb25uZWN0aW9uIHN0cmluZ1xuICAgIGxldCBibG9iRW5kcG9pbnQgPSBnZXRWYWx1ZUluQ29ublN0cmluZyhjb25uZWN0aW9uU3RyaW5nLCBcIkJsb2JFbmRwb2ludFwiKTtcbiAgICAvLyBTbGljaW5nIG9mZiAnLycgYXQgdGhlIGVuZCBpZiBleGlzdHNcbiAgICAvLyAoVGhlIG1ldGhvZHMgdGhhdCB1c2UgYGV4dHJhY3RDb25uZWN0aW9uU3RyaW5nUGFydHNgIGV4cGVjdCB0aGUgdXJsIHRvIG5vdCBoYXZlIGAvYCBhdCB0aGUgZW5kKVxuICAgIGJsb2JFbmRwb2ludCA9IGJsb2JFbmRwb2ludC5lbmRzV2l0aChcIi9cIikgPyBibG9iRW5kcG9pbnQuc2xpY2UoMCwgLTEpIDogYmxvYkVuZHBvaW50O1xuICAgIGlmIChjb25uZWN0aW9uU3RyaW5nLnNlYXJjaChcIkRlZmF1bHRFbmRwb2ludHNQcm90b2NvbD1cIikgIT09IC0xICYmXG4gICAgICAgIGNvbm5lY3Rpb25TdHJpbmcuc2VhcmNoKFwiQWNjb3VudEtleT1cIikgIT09IC0xKSB7XG4gICAgICAgIC8vIEFjY291bnQgY29ubmVjdGlvbiBzdHJpbmdcbiAgICAgICAgbGV0IGRlZmF1bHRFbmRwb2ludHNQcm90b2NvbCA9IFwiXCI7XG4gICAgICAgIGxldCBhY2NvdW50TmFtZSA9IFwiXCI7XG4gICAgICAgIGxldCBhY2NvdW50S2V5ID0gQnVmZmVyLmZyb20oXCJhY2NvdW50S2V5XCIsIFwiYmFzZTY0XCIpO1xuICAgICAgICBsZXQgZW5kcG9pbnRTdWZmaXggPSBcIlwiO1xuICAgICAgICAvLyBHZXQgYWNjb3VudCBuYW1lIGFuZCBrZXlcbiAgICAgICAgYWNjb3VudE5hbWUgPSBnZXRWYWx1ZUluQ29ublN0cmluZyhjb25uZWN0aW9uU3RyaW5nLCBcIkFjY291bnROYW1lXCIpO1xuICAgICAgICBhY2NvdW50S2V5ID0gQnVmZmVyLmZyb20oZ2V0VmFsdWVJbkNvbm5TdHJpbmcoY29ubmVjdGlvblN0cmluZywgXCJBY2NvdW50S2V5XCIpLCBcImJhc2U2NFwiKTtcbiAgICAgICAgaWYgKCFibG9iRW5kcG9pbnQpIHtcbiAgICAgICAgICAgIC8vIEJsb2JFbmRwb2ludCBpcyBub3QgcHJlc2VudCBpbiB0aGUgQWNjb3VudCBjb25uZWN0aW9uIHN0cmluZ1xuICAgICAgICAgICAgLy8gQ2FuIGJlIG9idGFpbmVkIGZyb20gYCR7ZGVmYXVsdEVuZHBvaW50c1Byb3RvY29sfTovLyR7YWNjb3VudE5hbWV9LmJsb2IuJHtlbmRwb2ludFN1ZmZpeH1gXG4gICAgICAgICAgICBkZWZhdWx0RW5kcG9pbnRzUHJvdG9jb2wgPSBnZXRWYWx1ZUluQ29ublN0cmluZyhjb25uZWN0aW9uU3RyaW5nLCBcIkRlZmF1bHRFbmRwb2ludHNQcm90b2NvbFwiKTtcbiAgICAgICAgICAgIGNvbnN0IHByb3RvY29sID0gZGVmYXVsdEVuZHBvaW50c1Byb3RvY29sLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICBpZiAocHJvdG9jb2wgIT09IFwiaHR0cHNcIiAmJiBwcm90b2NvbCAhPT0gXCJodHRwXCIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIERlZmF1bHRFbmRwb2ludHNQcm90b2NvbCBpbiB0aGUgcHJvdmlkZWQgQ29ubmVjdGlvbiBTdHJpbmcuIEV4cGVjdGluZyAnaHR0cHMnIG9yICdodHRwJ1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVuZHBvaW50U3VmZml4ID0gZ2V0VmFsdWVJbkNvbm5TdHJpbmcoY29ubmVjdGlvblN0cmluZywgXCJFbmRwb2ludFN1ZmZpeFwiKTtcbiAgICAgICAgICAgIGlmICghZW5kcG9pbnRTdWZmaXgpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIEVuZHBvaW50U3VmZml4IGluIHRoZSBwcm92aWRlZCBDb25uZWN0aW9uIFN0cmluZ1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJsb2JFbmRwb2ludCA9IGAke2RlZmF1bHRFbmRwb2ludHNQcm90b2NvbH06Ly8ke2FjY291bnROYW1lfS5ibG9iLiR7ZW5kcG9pbnRTdWZmaXh9YDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWFjY291bnROYW1lKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIEFjY291bnROYW1lIGluIHRoZSBwcm92aWRlZCBDb25uZWN0aW9uIFN0cmluZ1wiKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChhY2NvdW50S2V5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBBY2NvdW50S2V5IGluIHRoZSBwcm92aWRlZCBDb25uZWN0aW9uIFN0cmluZ1wiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2luZDogXCJBY2NvdW50Q29ublN0cmluZ1wiLFxuICAgICAgICAgICAgdXJsOiBibG9iRW5kcG9pbnQsXG4gICAgICAgICAgICBhY2NvdW50TmFtZSxcbiAgICAgICAgICAgIGFjY291bnRLZXksXG4gICAgICAgICAgICBwcm94eVVyaSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIC8vIFNBUyBjb25uZWN0aW9uIHN0cmluZ1xuICAgICAgICBsZXQgYWNjb3VudFNhcyA9IGdldFZhbHVlSW5Db25uU3RyaW5nKGNvbm5lY3Rpb25TdHJpbmcsIFwiU2hhcmVkQWNjZXNzU2lnbmF0dXJlXCIpO1xuICAgICAgICBsZXQgYWNjb3VudE5hbWUgPSBnZXRWYWx1ZUluQ29ublN0cmluZyhjb25uZWN0aW9uU3RyaW5nLCBcIkFjY291bnROYW1lXCIpO1xuICAgICAgICAvLyBpZiBhY2NvdW50TmFtZSBpcyBlbXB0eSwgdHJ5IHRvIHJlYWQgaXQgZnJvbSBCbG9iRW5kcG9pbnRcbiAgICAgICAgaWYgKCFhY2NvdW50TmFtZSkge1xuICAgICAgICAgICAgYWNjb3VudE5hbWUgPSBnZXRBY2NvdW50TmFtZUZyb21VcmwoYmxvYkVuZHBvaW50KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWJsb2JFbmRwb2ludCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBCbG9iRW5kcG9pbnQgaW4gdGhlIHByb3ZpZGVkIFNBUyBDb25uZWN0aW9uIFN0cmluZ1wiKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghYWNjb3VudFNhcykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBTaGFyZWRBY2Nlc3NTaWduYXR1cmUgaW4gdGhlIHByb3ZpZGVkIFNBUyBDb25uZWN0aW9uIFN0cmluZ1wiKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjbGllbnQgY29uc3RydWN0b3JzIGFzc3VtZSBhY2NvdW50U2FzIGRvZXMgKm5vdCogc3RhcnQgd2l0aCA/XG4gICAgICAgIGlmIChhY2NvdW50U2FzLnN0YXJ0c1dpdGgoXCI/XCIpKSB7XG4gICAgICAgICAgICBhY2NvdW50U2FzID0gYWNjb3VudFNhcy5zdWJzdHJpbmcoMSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsga2luZDogXCJTQVNDb25uU3RyaW5nXCIsIHVybDogYmxvYkVuZHBvaW50LCBhY2NvdW50TmFtZSwgYWNjb3VudFNhcyB9O1xuICAgIH1cbn1cbi8qKlxuICogSW50ZXJuYWwgZXNjYXBlIG1ldGhvZCBpbXBsZW1lbnRlZCBTdHJhdGVneSBUd28gbWVudGlvbmVkIGluIGVzY2FwZVVSTCgpIGRlc2NyaXB0aW9uLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC1cbiAqL1xuZnVuY3Rpb24gZXNjYXBlKHRleHQpIHtcbiAgICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHRleHQpXG4gICAgICAgIC5yZXBsYWNlKC8lMkYvZywgXCIvXCIpIC8vIERvbid0IGVzY2FwZSBmb3IgXCIvXCJcbiAgICAgICAgLnJlcGxhY2UoLycvZywgXCIlMjdcIikgLy8gRXNjYXBlIGZvciBcIidcIlxuICAgICAgICAucmVwbGFjZSgvXFwrL2csIFwiJTIwXCIpXG4gICAgICAgIC5yZXBsYWNlKC8lMjUvZywgXCIlXCIpOyAvLyBSZXZlcnQgZW5jb2RlZCBcIiVcIlxufVxuLyoqXG4gKiBBcHBlbmQgYSBzdHJpbmcgdG8gVVJMIHBhdGguIFdpbGwgcmVtb3ZlIGR1cGxpY2F0ZWQgXCIvXCIgaW4gZnJvbnQgb2YgdGhlIHN0cmluZ1xuICogd2hlbiBVUkwgcGF0aCBlbmRzIHdpdGggYSBcIi9cIi5cbiAqXG4gKiBAcGFyYW0gdXJsIC0gU291cmNlIFVSTCBzdHJpbmdcbiAqIEBwYXJhbSBuYW1lIC0gU3RyaW5nIHRvIGJlIGFwcGVuZGVkIHRvIFVSTFxuICogQHJldHVybnMgQW4gdXBkYXRlZCBVUkwgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGFwcGVuZFRvVVJMUGF0aCh1cmwsIG5hbWUpIHtcbiAgICBjb25zdCB1cmxQYXJzZWQgPSBuZXcgVVJMKHVybCk7XG4gICAgbGV0IHBhdGggPSB1cmxQYXJzZWQucGF0aG5hbWU7XG4gICAgcGF0aCA9IHBhdGggPyAocGF0aC5lbmRzV2l0aChcIi9cIikgPyBgJHtwYXRofSR7bmFtZX1gIDogYCR7cGF0aH0vJHtuYW1lfWApIDogbmFtZTtcbiAgICB1cmxQYXJzZWQucGF0aG5hbWUgPSBwYXRoO1xuICAgIHJldHVybiB1cmxQYXJzZWQudG9TdHJpbmcoKTtcbn1cbi8qKlxuICogU2V0IFVSTCBwYXJhbWV0ZXIgbmFtZSBhbmQgdmFsdWUuIElmIG5hbWUgZXhpc3RzIGluIFVSTCBwYXJhbWV0ZXJzLCBvbGQgdmFsdWVcbiAqIHdpbGwgYmUgcmVwbGFjZWQgYnkgbmFtZSBrZXkuIElmIG5vdCBwcm92aWRlIHZhbHVlLCB0aGUgcGFyYW1ldGVyIHdpbGwgYmUgZGVsZXRlZC5cbiAqXG4gKiBAcGFyYW0gdXJsIC0gU291cmNlIFVSTCBzdHJpbmdcbiAqIEBwYXJhbSBuYW1lIC0gUGFyYW1ldGVyIG5hbWVcbiAqIEBwYXJhbSB2YWx1ZSAtIFBhcmFtZXRlciB2YWx1ZVxuICogQHJldHVybnMgQW4gdXBkYXRlZCBVUkwgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIHNldFVSTFBhcmFtZXRlcih1cmwsIG5hbWUsIHZhbHVlKSB7XG4gICAgY29uc3QgdXJsUGFyc2VkID0gbmV3IFVSTCh1cmwpO1xuICAgIGNvbnN0IGVuY29kZWROYW1lID0gZW5jb2RlVVJJQ29tcG9uZW50KG5hbWUpO1xuICAgIGNvbnN0IGVuY29kZWRWYWx1ZSA9IHZhbHVlID8gZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKSA6IHVuZGVmaW5lZDtcbiAgICAvLyBtdXRhdGluZyBzZWFyY2hQYXJhbXMgd2lsbCBjaGFuZ2UgdGhlIGVuY29kaW5nLCBzbyB3ZSBoYXZlIHRvIGRvIHRoaXMgb3Vyc2VsdmVzXG4gICAgY29uc3Qgc2VhcmNoU3RyaW5nID0gdXJsUGFyc2VkLnNlYXJjaCA9PT0gXCJcIiA/IFwiP1wiIDogdXJsUGFyc2VkLnNlYXJjaDtcbiAgICBjb25zdCBzZWFyY2hQaWVjZXMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IHBhaXIgb2Ygc2VhcmNoU3RyaW5nLnNsaWNlKDEpLnNwbGl0KFwiJlwiKSkge1xuICAgICAgICBpZiAocGFpcikge1xuICAgICAgICAgICAgY29uc3QgW2tleV0gPSBwYWlyLnNwbGl0KFwiPVwiLCAyKTtcbiAgICAgICAgICAgIGlmIChrZXkgIT09IGVuY29kZWROYW1lKSB7XG4gICAgICAgICAgICAgICAgc2VhcmNoUGllY2VzLnB1c2gocGFpcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGVuY29kZWRWYWx1ZSkge1xuICAgICAgICBzZWFyY2hQaWVjZXMucHVzaChgJHtlbmNvZGVkTmFtZX09JHtlbmNvZGVkVmFsdWV9YCk7XG4gICAgfVxuICAgIHVybFBhcnNlZC5zZWFyY2ggPSBzZWFyY2hQaWVjZXMubGVuZ3RoID8gYD8ke3NlYXJjaFBpZWNlcy5qb2luKFwiJlwiKX1gIDogXCJcIjtcbiAgICByZXR1cm4gdXJsUGFyc2VkLnRvU3RyaW5nKCk7XG59XG4vKipcbiAqIEdldCBVUkwgcGFyYW1ldGVyIGJ5IG5hbWUuXG4gKlxuICogQHBhcmFtIHVybCAtXG4gKiBAcGFyYW0gbmFtZSAtXG4gKi9cbmZ1bmN0aW9uIGdldFVSTFBhcmFtZXRlcih1cmwsIG5hbWUpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3QgdXJsUGFyc2VkID0gbmV3IFVSTCh1cmwpO1xuICAgIHJldHVybiAoX2EgPSB1cmxQYXJzZWQuc2VhcmNoUGFyYW1zLmdldChuYW1lKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdW5kZWZpbmVkO1xufVxuLyoqXG4gKiBTZXQgVVJMIGhvc3QuXG4gKlxuICogQHBhcmFtIHVybCAtIFNvdXJjZSBVUkwgc3RyaW5nXG4gKiBAcGFyYW0gaG9zdCAtIE5ldyBob3N0IHN0cmluZ1xuICogQHJldHVybnMgQW4gdXBkYXRlZCBVUkwgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIHNldFVSTEhvc3QodXJsLCBob3N0KSB7XG4gICAgY29uc3QgdXJsUGFyc2VkID0gbmV3IFVSTCh1cmwpO1xuICAgIHVybFBhcnNlZC5ob3N0bmFtZSA9IGhvc3Q7XG4gICAgcmV0dXJuIHVybFBhcnNlZC50b1N0cmluZygpO1xufVxuLyoqXG4gKiBHZXQgVVJMIHBhdGggZnJvbSBhbiBVUkwgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB1cmwgLSBTb3VyY2UgVVJMIHN0cmluZ1xuICovXG5mdW5jdGlvbiBnZXRVUkxQYXRoKHVybCkge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHVybFBhcnNlZCA9IG5ldyBVUkwodXJsKTtcbiAgICAgICAgcmV0dXJuIHVybFBhcnNlZC5wYXRobmFtZTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59XG4vKipcbiAqIEdldCBVUkwgc2NoZW1lIGZyb20gYW4gVVJMIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gdXJsIC0gU291cmNlIFVSTCBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gZ2V0VVJMU2NoZW1lKHVybCkge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHVybFBhcnNlZCA9IG5ldyBVUkwodXJsKTtcbiAgICAgICAgcmV0dXJuIHVybFBhcnNlZC5wcm90b2NvbC5lbmRzV2l0aChcIjpcIikgPyB1cmxQYXJzZWQucHJvdG9jb2wuc2xpY2UoMCwgLTEpIDogdXJsUGFyc2VkLnByb3RvY29sO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbn1cbi8qKlxuICogR2V0IFVSTCBwYXRoIGFuZCBxdWVyeSBmcm9tIGFuIFVSTCBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHVybCAtIFNvdXJjZSBVUkwgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGdldFVSTFBhdGhBbmRRdWVyeSh1cmwpIHtcbiAgICBjb25zdCB1cmxQYXJzZWQgPSBuZXcgVVJMKHVybCk7XG4gICAgY29uc3QgcGF0aFN0cmluZyA9IHVybFBhcnNlZC5wYXRobmFtZTtcbiAgICBpZiAoIXBhdGhTdHJpbmcpIHtcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbnZhbGlkIHVybCB3aXRob3V0IHZhbGlkIHBhdGguXCIpO1xuICAgIH1cbiAgICBsZXQgcXVlcnlTdHJpbmcgPSB1cmxQYXJzZWQuc2VhcmNoIHx8IFwiXCI7XG4gICAgcXVlcnlTdHJpbmcgPSBxdWVyeVN0cmluZy50cmltKCk7XG4gICAgaWYgKHF1ZXJ5U3RyaW5nICE9PSBcIlwiKSB7XG4gICAgICAgIHF1ZXJ5U3RyaW5nID0gcXVlcnlTdHJpbmcuc3RhcnRzV2l0aChcIj9cIikgPyBxdWVyeVN0cmluZyA6IGA/JHtxdWVyeVN0cmluZ31gOyAvLyBFbnN1cmUgcXVlcnkgc3RyaW5nIHN0YXJ0IHdpdGggJz8nXG4gICAgfVxuICAgIHJldHVybiBgJHtwYXRoU3RyaW5nfSR7cXVlcnlTdHJpbmd9YDtcbn1cbi8qKlxuICogR2V0IFVSTCBxdWVyeSBrZXkgdmFsdWUgcGFpcnMgZnJvbSBhbiBVUkwgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB1cmwgLVxuICovXG5mdW5jdGlvbiBnZXRVUkxRdWVyaWVzKHVybCkge1xuICAgIGxldCBxdWVyeVN0cmluZyA9IG5ldyBVUkwodXJsKS5zZWFyY2g7XG4gICAgaWYgKCFxdWVyeVN0cmluZykge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIHF1ZXJ5U3RyaW5nID0gcXVlcnlTdHJpbmcudHJpbSgpO1xuICAgIHF1ZXJ5U3RyaW5nID0gcXVlcnlTdHJpbmcuc3RhcnRzV2l0aChcIj9cIikgPyBxdWVyeVN0cmluZy5zdWJzdHJpbmcoMSkgOiBxdWVyeVN0cmluZztcbiAgICBsZXQgcXVlcnlTdWJTdHJpbmdzID0gcXVlcnlTdHJpbmcuc3BsaXQoXCImXCIpO1xuICAgIHF1ZXJ5U3ViU3RyaW5ncyA9IHF1ZXJ5U3ViU3RyaW5ncy5maWx0ZXIoKHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IGluZGV4T2ZFcXVhbCA9IHZhbHVlLmluZGV4T2YoXCI9XCIpO1xuICAgICAgICBjb25zdCBsYXN0SW5kZXhPZkVxdWFsID0gdmFsdWUubGFzdEluZGV4T2YoXCI9XCIpO1xuICAgICAgICByZXR1cm4gKGluZGV4T2ZFcXVhbCA+IDAgJiYgaW5kZXhPZkVxdWFsID09PSBsYXN0SW5kZXhPZkVxdWFsICYmIGxhc3RJbmRleE9mRXF1YWwgPCB2YWx1ZS5sZW5ndGggLSAxKTtcbiAgICB9KTtcbiAgICBjb25zdCBxdWVyaWVzID0ge307XG4gICAgZm9yIChjb25zdCBxdWVyeVN1YlN0cmluZyBvZiBxdWVyeVN1YlN0cmluZ3MpIHtcbiAgICAgICAgY29uc3Qgc3BsaXRSZXN1bHRzID0gcXVlcnlTdWJTdHJpbmcuc3BsaXQoXCI9XCIpO1xuICAgICAgICBjb25zdCBrZXkgPSBzcGxpdFJlc3VsdHNbMF07XG4gICAgICAgIGNvbnN0IHZhbHVlID0gc3BsaXRSZXN1bHRzWzFdO1xuICAgICAgICBxdWVyaWVzW2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHF1ZXJpZXM7XG59XG4vKipcbiAqIEFwcGVuZCBhIHN0cmluZyB0byBVUkwgcXVlcnkuXG4gKlxuICogQHBhcmFtIHVybCAtIFNvdXJjZSBVUkwgc3RyaW5nLlxuICogQHBhcmFtIHF1ZXJ5UGFydHMgLSBTdHJpbmcgdG8gYmUgYXBwZW5kZWQgdG8gdGhlIFVSTCBxdWVyeS5cbiAqIEByZXR1cm5zIEFuIHVwZGF0ZWQgVVJMIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gYXBwZW5kVG9VUkxRdWVyeSh1cmwsIHF1ZXJ5UGFydHMpIHtcbiAgICBjb25zdCB1cmxQYXJzZWQgPSBuZXcgVVJMKHVybCk7XG4gICAgbGV0IHF1ZXJ5ID0gdXJsUGFyc2VkLnNlYXJjaDtcbiAgICBpZiAocXVlcnkpIHtcbiAgICAgICAgcXVlcnkgKz0gXCImXCIgKyBxdWVyeVBhcnRzO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcXVlcnkgPSBxdWVyeVBhcnRzO1xuICAgIH1cbiAgICB1cmxQYXJzZWQuc2VhcmNoID0gcXVlcnk7XG4gICAgcmV0dXJuIHVybFBhcnNlZC50b1N0cmluZygpO1xufVxuLyoqXG4gKiBSb3VuZHMgYSBkYXRlIG9mZiB0byBzZWNvbmRzLlxuICpcbiAqIEBwYXJhbSBkYXRlIC1cbiAqIEBwYXJhbSB3aXRoTWlsbGlzZWNvbmRzIC0gSWYgdHJ1ZSwgWVlZWS1NTS1ERFRoaDptbTpzcy5mZmZmZmZmWiB3aWxsIGJlIHJldHVybmVkO1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBmYWxzZSwgWVlZWS1NTS1ERFRoaDptbTpzc1ogd2lsbCBiZSByZXR1cm5lZC5cbiAqIEByZXR1cm5zIERhdGUgc3RyaW5nIGluIElTTzgwNjEgZm9ybWF0LCB3aXRoIG9yIHdpdGhvdXQgNyBtaWxsaXNlY29uZHMgY29tcG9uZW50XG4gKi9cbmZ1bmN0aW9uIHRydW5jYXRlZElTTzgwNjFEYXRlKGRhdGUsIHdpdGhNaWxsaXNlY29uZHMgPSB0cnVlKSB7XG4gICAgLy8gRGF0ZS50b0lTT1N0cmluZygpIHdpbGwgcmV0dXJuIGxpa2UgXCIyMDE4LTEwLTI5VDA2OjM0OjM2LjEzOVpcIlxuICAgIGNvbnN0IGRhdGVTdHJpbmcgPSBkYXRlLnRvSVNPU3RyaW5nKCk7XG4gICAgcmV0dXJuIHdpdGhNaWxsaXNlY29uZHNcbiAgICAgICAgPyBkYXRlU3RyaW5nLnN1YnN0cmluZygwLCBkYXRlU3RyaW5nLmxlbmd0aCAtIDEpICsgXCIwMDAwXCIgKyBcIlpcIlxuICAgICAgICA6IGRhdGVTdHJpbmcuc3Vic3RyaW5nKDAsIGRhdGVTdHJpbmcubGVuZ3RoIC0gNSkgKyBcIlpcIjtcbn1cbi8qKlxuICogQmFzZTY0IGVuY29kZS5cbiAqXG4gKiBAcGFyYW0gY29udGVudCAtXG4gKi9cbmZ1bmN0aW9uIGJhc2U2NGVuY29kZShjb250ZW50KSB7XG4gICAgcmV0dXJuICFjb3JlVXRpbC5pc05vZGUgPyBidG9hKGNvbnRlbnQpIDogQnVmZmVyLmZyb20oY29udGVudCkudG9TdHJpbmcoXCJiYXNlNjRcIik7XG59XG4vKipcbiAqIEdlbmVyYXRlIGEgNjQgYnl0ZXMgYmFzZTY0IGJsb2NrIElEIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gYmxvY2tJbmRleCAtXG4gKi9cbmZ1bmN0aW9uIGdlbmVyYXRlQmxvY2tJRChibG9ja0lEUHJlZml4LCBibG9ja0luZGV4KSB7XG4gICAgLy8gVG8gZ2VuZXJhdGUgYSA2NCBieXRlcyBiYXNlNjQgc3RyaW5nLCBzb3VyY2Ugc3RyaW5nIHNob3VsZCBiZSA0OFxuICAgIGNvbnN0IG1heFNvdXJjZVN0cmluZ0xlbmd0aCA9IDQ4O1xuICAgIC8vIEEgYmxvYiBjYW4gaGF2ZSBhIG1heGltdW0gb2YgMTAwLDAwMCB1bmNvbW1pdHRlZCBibG9ja3MgYXQgYW55IGdpdmVuIHRpbWVcbiAgICBjb25zdCBtYXhCbG9ja0luZGV4TGVuZ3RoID0gNjtcbiAgICBjb25zdCBtYXhBbGxvd2VkQmxvY2tJRFByZWZpeExlbmd0aCA9IG1heFNvdXJjZVN0cmluZ0xlbmd0aCAtIG1heEJsb2NrSW5kZXhMZW5ndGg7XG4gICAgaWYgKGJsb2NrSURQcmVmaXgubGVuZ3RoID4gbWF4QWxsb3dlZEJsb2NrSURQcmVmaXhMZW5ndGgpIHtcbiAgICAgICAgYmxvY2tJRFByZWZpeCA9IGJsb2NrSURQcmVmaXguc2xpY2UoMCwgbWF4QWxsb3dlZEJsb2NrSURQcmVmaXhMZW5ndGgpO1xuICAgIH1cbiAgICBjb25zdCByZXMgPSBibG9ja0lEUHJlZml4ICtcbiAgICAgICAgcGFkU3RhcnQoYmxvY2tJbmRleC50b1N0cmluZygpLCBtYXhTb3VyY2VTdHJpbmdMZW5ndGggLSBibG9ja0lEUHJlZml4Lmxlbmd0aCwgXCIwXCIpO1xuICAgIHJldHVybiBiYXNlNjRlbmNvZGUocmVzKTtcbn1cbi8qKlxuICogRGVsYXkgc3BlY2lmaWVkIHRpbWUgaW50ZXJ2YWwuXG4gKlxuICogQHBhcmFtIHRpbWVJbk1zIC1cbiAqIEBwYXJhbSBhYm9ydGVyIC1cbiAqIEBwYXJhbSBhYm9ydEVycm9yIC1cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZGVsYXkodGltZUluTXMsIGFib3J0ZXIsIGFib3J0RXJyb3IpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0ICovXG4gICAgICAgIGxldCB0aW1lb3V0O1xuICAgICAgICBjb25zdCBhYm9ydEhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVqZWN0KGFib3J0RXJyb3IpO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZXNvbHZlSGFuZGxlciA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChhYm9ydGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBhYm9ydGVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBhYm9ydEhhbmRsZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9O1xuICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChyZXNvbHZlSGFuZGxlciwgdGltZUluTXMpO1xuICAgICAgICBpZiAoYWJvcnRlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhYm9ydGVyLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBhYm9ydEhhbmRsZXIpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG4vKipcbiAqIFN0cmluZy5wcm90b3R5cGUucGFkU3RhcnQoKVxuICpcbiAqIEBwYXJhbSBjdXJyZW50U3RyaW5nIC1cbiAqIEBwYXJhbSB0YXJnZXRMZW5ndGggLVxuICogQHBhcmFtIHBhZFN0cmluZyAtXG4gKi9cbmZ1bmN0aW9uIHBhZFN0YXJ0KGN1cnJlbnRTdHJpbmcsIHRhcmdldExlbmd0aCwgcGFkU3RyaW5nID0gXCIgXCIpIHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBUUyBkb2Vzbid0IGtub3cgdGhpcyBjb2RlIG5lZWRzIHRvIHJ1biBkb3dubGV2ZWwgc29tZXRpbWVzXG4gICAgaWYgKFN0cmluZy5wcm90b3R5cGUucGFkU3RhcnQpIHtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRTdHJpbmcucGFkU3RhcnQodGFyZ2V0TGVuZ3RoLCBwYWRTdHJpbmcpO1xuICAgIH1cbiAgICBwYWRTdHJpbmcgPSBwYWRTdHJpbmcgfHwgXCIgXCI7XG4gICAgaWYgKGN1cnJlbnRTdHJpbmcubGVuZ3RoID4gdGFyZ2V0TGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBjdXJyZW50U3RyaW5nO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGFyZ2V0TGVuZ3RoID0gdGFyZ2V0TGVuZ3RoIC0gY3VycmVudFN0cmluZy5sZW5ndGg7XG4gICAgICAgIGlmICh0YXJnZXRMZW5ndGggPiBwYWRTdHJpbmcubGVuZ3RoKSB7XG4gICAgICAgICAgICBwYWRTdHJpbmcgKz0gcGFkU3RyaW5nLnJlcGVhdCh0YXJnZXRMZW5ndGggLyBwYWRTdHJpbmcubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFkU3RyaW5nLnNsaWNlKDAsIHRhcmdldExlbmd0aCkgKyBjdXJyZW50U3RyaW5nO1xuICAgIH1cbn1cbi8qKlxuICogSWYgdHdvIHN0cmluZ3MgYXJlIGVxdWFsIHdoZW4gY29tcGFyZWQgY2FzZSBpbnNlbnNpdGl2ZS5cbiAqXG4gKiBAcGFyYW0gc3RyMSAtXG4gKiBAcGFyYW0gc3RyMiAtXG4gKi9cbmZ1bmN0aW9uIGlFcXVhbChzdHIxLCBzdHIyKSB7XG4gICAgcmV0dXJuIHN0cjEudG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gc3RyMi50b0xvY2FsZUxvd2VyQ2FzZSgpO1xufVxuLyoqXG4gKiBFeHRyYWN0cyBhY2NvdW50IG5hbWUgZnJvbSB0aGUgdXJsXG4gKiBAcGFyYW0gdXJsIC0gdXJsIHRvIGV4dHJhY3QgdGhlIGFjY291bnQgbmFtZSBmcm9tXG4gKiBAcmV0dXJucyB3aXRoIHRoZSBhY2NvdW50IG5hbWVcbiAqL1xuZnVuY3Rpb24gZ2V0QWNjb3VudE5hbWVGcm9tVXJsKHVybCkge1xuICAgIGNvbnN0IHBhcnNlZFVybCA9IG5ldyBVUkwodXJsKTtcbiAgICBsZXQgYWNjb3VudE5hbWU7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHBhcnNlZFVybC5ob3N0bmFtZS5zcGxpdChcIi5cIilbMV0gPT09IFwiYmxvYlwiKSB7XG4gICAgICAgICAgICAvLyBgJHtkZWZhdWx0RW5kcG9pbnRzUHJvdG9jb2x9Oi8vJHthY2NvdW50TmFtZX0uYmxvYi4ke2VuZHBvaW50U3VmZml4fWA7XG4gICAgICAgICAgICBhY2NvdW50TmFtZSA9IHBhcnNlZFVybC5ob3N0bmFtZS5zcGxpdChcIi5cIilbMF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNJcEVuZHBvaW50U3R5bGUocGFyc2VkVXJsKSkge1xuICAgICAgICAgICAgLy8gSVB2NC9JUHY2IGFkZHJlc3MgaG9zdHMuLi4gRXhhbXBsZSAtIGh0dHA6Ly8xOTIuMC4wLjEwOjEwMDAxL2RldnN0b3JlYWNjb3VudDEvXG4gICAgICAgICAgICAvLyBTaW5nbGUgd29yZCBkb21haW4gd2l0aG91dCBhIFtkb3RdIGluIHRoZSBlbmRwb2ludC4uLiBFeGFtcGxlIC0gaHR0cDovL2xvY2FsaG9zdDoxMDAwMS9kZXZzdG9yZWFjY291bnQxL1xuICAgICAgICAgICAgLy8gLmdldFBhdGgoKSAtPiAvZGV2c3RvcmVhY2NvdW50MS9cbiAgICAgICAgICAgIGFjY291bnROYW1lID0gcGFyc2VkVXJsLnBhdGhuYW1lLnNwbGl0KFwiL1wiKVsxXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIEN1c3RvbSBkb21haW4gY2FzZTogXCJodHRwczovL2N1c3RvbWRvbWFpbi5jb20vY29udGFpbmVybmFtZS9ibG9iXCIuXG4gICAgICAgICAgICBhY2NvdW50TmFtZSA9IFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjY291bnROYW1lO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIGV4dHJhY3QgYWNjb3VudE5hbWUgd2l0aCBwcm92aWRlZCBpbmZvcm1hdGlvbi5cIik7XG4gICAgfVxufVxuZnVuY3Rpb24gaXNJcEVuZHBvaW50U3R5bGUocGFyc2VkVXJsKSB7XG4gICAgY29uc3QgaG9zdCA9IHBhcnNlZFVybC5ob3N0O1xuICAgIC8vIENhc2UgMTogSXB2NiwgdXNlIGEgYnJvYWQgcmVnZXggdG8gZmluZCBvdXQgY2FuZGlkYXRlcyB3aG9zZSBob3N0IGNvbnRhaW5zIHR3byAnOicuXG4gICAgLy8gQ2FzZSAyOiBsb2NhbGhvc3QoOnBvcnQpIG9yIGhvc3QuZG9ja2VyLmludGVybmFsLCB1c2UgYnJvYWQgcmVnZXggdG8gbWF0Y2ggcG9ydCBwYXJ0LlxuICAgIC8vIENhc2UgMzogSXB2NCwgdXNlIGJyb2FkIHJlZ2V4IHdoaWNoIGp1c3QgY2hlY2sgaWYgaG9zdCBjb250YWlucyBJcHY0LlxuICAgIC8vIEZvciB2YWxpZCBob3N0IHBsZWFzZSByZWZlciB0byBodHRwczovL21hbjcub3JnL2xpbnV4L21hbi1wYWdlcy9tYW43L2hvc3RuYW1lLjcuaHRtbC5cbiAgICByZXR1cm4gKC9eLio6Lio6LiokfF4obG9jYWxob3N0fGhvc3QuZG9ja2VyLmludGVybmFsKSg6WzAtOV0rKT8kfF4oXFxkfFsxLTldXFxkfDFcXGRcXGR8MlswLTRdXFxkfDI1WzAtNV0pKFxcLihcXGR8WzEtOV1cXGR8MVxcZFxcZHwyWzAtNF1cXGR8MjVbMC01XSkpezN9KDpbMC05XSspPyQvLnRlc3QoaG9zdCkgfHxcbiAgICAgICAgKEJvb2xlYW4ocGFyc2VkVXJsLnBvcnQpICYmIFBhdGhTdHlsZVBvcnRzLmluY2x1ZGVzKHBhcnNlZFVybC5wb3J0KSkpO1xufVxuLyoqXG4gKiBDb252ZXJ0IFRhZ3MgdG8gZW5jb2RlZCBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHRhZ3MgLVxuICovXG5mdW5jdGlvbiB0b0Jsb2JUYWdzU3RyaW5nKHRhZ3MpIHtcbiAgICBpZiAodGFncyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IHRhZ1BhaXJzID0gW107XG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGFncykge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRhZ3MsIGtleSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGFnc1trZXldO1xuICAgICAgICAgICAgdGFnUGFpcnMucHVzaChgJHtlbmNvZGVVUklDb21wb25lbnQoa2V5KX09JHtlbmNvZGVVUklDb21wb25lbnQodmFsdWUpfWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0YWdQYWlycy5qb2luKFwiJlwiKTtcbn1cbi8qKlxuICogQ29udmVydCBUYWdzIHR5cGUgdG8gQmxvYlRhZ3MuXG4gKlxuICogQHBhcmFtIHRhZ3MgLVxuICovXG5mdW5jdGlvbiB0b0Jsb2JUYWdzKHRhZ3MpIHtcbiAgICBpZiAodGFncyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IHJlcyA9IHtcbiAgICAgICAgYmxvYlRhZ1NldDogW10sXG4gICAgfTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0YWdzKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGFncywga2V5KSkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0YWdzW2tleV07XG4gICAgICAgICAgICByZXMuYmxvYlRhZ1NldC5wdXNoKHtcbiAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuLyoqXG4gKiBDb3ZlcnQgQmxvYlRhZ3MgdG8gVGFncyB0eXBlLlxuICpcbiAqIEBwYXJhbSB0YWdzIC1cbiAqL1xuZnVuY3Rpb24gdG9UYWdzKHRhZ3MpIHtcbiAgICBpZiAodGFncyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IHJlcyA9IHt9O1xuICAgIGZvciAoY29uc3QgYmxvYlRhZyBvZiB0YWdzLmJsb2JUYWdTZXQpIHtcbiAgICAgICAgcmVzW2Jsb2JUYWcua2V5XSA9IGJsb2JUYWcudmFsdWU7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG4vKipcbiAqIENvbnZlcnQgQmxvYlF1ZXJ5VGV4dENvbmZpZ3VyYXRpb24gdG8gUXVlcnlTZXJpYWxpemF0aW9uIHR5cGUuXG4gKlxuICogQHBhcmFtIHRleHRDb25maWd1cmF0aW9uIC1cbiAqL1xuZnVuY3Rpb24gdG9RdWVyeVNlcmlhbGl6YXRpb24odGV4dENvbmZpZ3VyYXRpb24pIHtcbiAgICBpZiAodGV4dENvbmZpZ3VyYXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBzd2l0Y2ggKHRleHRDb25maWd1cmF0aW9uLmtpbmQpIHtcbiAgICAgICAgY2FzZSBcImNzdlwiOlxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJkZWxpbWl0ZWRcIixcbiAgICAgICAgICAgICAgICAgICAgZGVsaW1pdGVkVGV4dENvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtblNlcGFyYXRvcjogdGV4dENvbmZpZ3VyYXRpb24uY29sdW1uU2VwYXJhdG9yIHx8IFwiLFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRRdW90ZTogdGV4dENvbmZpZ3VyYXRpb24uZmllbGRRdW90ZSB8fCBcIlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkU2VwYXJhdG9yOiB0ZXh0Q29uZmlndXJhdGlvbi5yZWNvcmRTZXBhcmF0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgICBlc2NhcGVDaGFyOiB0ZXh0Q29uZmlndXJhdGlvbi5lc2NhcGVDaGFyYWN0ZXIgfHwgXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnNQcmVzZW50OiB0ZXh0Q29uZmlndXJhdGlvbi5oYXNIZWFkZXJzIHx8IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICBjYXNlIFwianNvblwiOlxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJqc29uXCIsXG4gICAgICAgICAgICAgICAgICAgIGpzb25UZXh0Q29uZmlndXJhdGlvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkU2VwYXJhdG9yOiB0ZXh0Q29uZmlndXJhdGlvbi5yZWNvcmRTZXBhcmF0b3IsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIGNhc2UgXCJhcnJvd1wiOlxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJhcnJvd1wiLFxuICAgICAgICAgICAgICAgICAgICBhcnJvd0NvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYTogdGV4dENvbmZpZ3VyYXRpb24uc2NoZW1hLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICBjYXNlIFwicGFycXVldFwiOlxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJwYXJxdWV0XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcIkludmFsaWQgQmxvYlF1ZXJ5VGV4dENvbmZpZ3VyYXRpb24uXCIpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHBhcnNlT2JqZWN0UmVwbGljYXRpb25SZWNvcmQob2JqZWN0UmVwbGljYXRpb25SZWNvcmQpIHtcbiAgICBpZiAoIW9iamVjdFJlcGxpY2F0aW9uUmVjb3JkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmIChcInBvbGljeS1pZFwiIGluIG9iamVjdFJlcGxpY2F0aW9uUmVjb3JkKSB7XG4gICAgICAgIC8vIElmIHRoZSBkaWN0aW9uYXJ5IGNvbnRhaW5zIGEga2V5IHdpdGggcG9saWN5IGlkLCB3ZSBhcmUgbm90IHJlcXVpcmVkIHRvIGRvIGFueSBwYXJzaW5nIHNpbmNlXG4gICAgICAgIC8vIHRoZSBwb2xpY3kgaWQgc2hvdWxkIGFscmVhZHkgYmUgc3RvcmVkIGluIHRoZSBPYmplY3RSZXBsaWNhdGlvbkRlc3RpbmF0aW9uUG9saWN5SWQuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IG9yUHJvcGVydGllcyA9IFtdO1xuICAgIGZvciAoY29uc3Qga2V5IGluIG9iamVjdFJlcGxpY2F0aW9uUmVjb3JkKSB7XG4gICAgICAgIGNvbnN0IGlkcyA9IGtleS5zcGxpdChcIl9cIik7XG4gICAgICAgIGNvbnN0IHBvbGljeVByZWZpeCA9IFwib3ItXCI7XG4gICAgICAgIGlmIChpZHNbMF0uc3RhcnRzV2l0aChwb2xpY3lQcmVmaXgpKSB7XG4gICAgICAgICAgICBpZHNbMF0gPSBpZHNbMF0uc3Vic3RyaW5nKHBvbGljeVByZWZpeC5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJ1bGUgPSB7XG4gICAgICAgICAgICBydWxlSWQ6IGlkc1sxXSxcbiAgICAgICAgICAgIHJlcGxpY2F0aW9uU3RhdHVzOiBvYmplY3RSZXBsaWNhdGlvblJlY29yZFtrZXldLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBwb2xpY3lJbmRleCA9IG9yUHJvcGVydGllcy5maW5kSW5kZXgoKHBvbGljeSkgPT4gcG9saWN5LnBvbGljeUlkID09PSBpZHNbMF0pO1xuICAgICAgICBpZiAocG9saWN5SW5kZXggPiAtMSkge1xuICAgICAgICAgICAgb3JQcm9wZXJ0aWVzW3BvbGljeUluZGV4XS5ydWxlcy5wdXNoKHJ1bGUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgb3JQcm9wZXJ0aWVzLnB1c2goe1xuICAgICAgICAgICAgICAgIHBvbGljeUlkOiBpZHNbMF0sXG4gICAgICAgICAgICAgICAgcnVsZXM6IFtydWxlXSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvclByb3BlcnRpZXM7XG59XG5mdW5jdGlvbiBodHRwQXV0aG9yaXphdGlvblRvU3RyaW5nKGh0dHBBdXRob3JpemF0aW9uKSB7XG4gICAgcmV0dXJuIGh0dHBBdXRob3JpemF0aW9uID8gaHR0cEF1dGhvcml6YXRpb24uc2NoZW1lICsgXCIgXCIgKyBodHRwQXV0aG9yaXphdGlvbi52YWx1ZSA6IHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIEJsb2JOYW1lVG9TdHJpbmcobmFtZSkge1xuICAgIGlmIChuYW1lLmVuY29kZWQpIHtcbiAgICAgICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChuYW1lLmNvbnRlbnQpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5hbWUuY29udGVudDtcbiAgICB9XG59XG5mdW5jdGlvbiBDb252ZXJ0SW50ZXJuYWxSZXNwb25zZU9mTGlzdEJsb2JGbGF0KGludGVybmFsUmVzcG9uc2UpIHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBpbnRlcm5hbFJlc3BvbnNlKSwgeyBzZWdtZW50OiB7XG4gICAgICAgICAgICBibG9iSXRlbXM6IGludGVybmFsUmVzcG9uc2Uuc2VnbWVudC5ibG9iSXRlbXMubWFwKChibG9iSXRlbUludGVyYWwpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBibG9iSXRlbSA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYmxvYkl0ZW1JbnRlcmFsKSwgeyBuYW1lOiBCbG9iTmFtZVRvU3RyaW5nKGJsb2JJdGVtSW50ZXJhbC5uYW1lKSB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYmxvYkl0ZW07XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSB9KTtcbn1cbmZ1bmN0aW9uIENvbnZlcnRJbnRlcm5hbFJlc3BvbnNlT2ZMaXN0QmxvYkhpZXJhcmNoeShpbnRlcm5hbFJlc3BvbnNlKSB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGludGVybmFsUmVzcG9uc2UpLCB7IHNlZ21lbnQ6IHtcbiAgICAgICAgICAgIGJsb2JQcmVmaXhlczogKF9hID0gaW50ZXJuYWxSZXNwb25zZS5zZWdtZW50LmJsb2JQcmVmaXhlcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm1hcCgoYmxvYlByZWZpeEludGVybmFsKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmxvYlByZWZpeCA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYmxvYlByZWZpeEludGVybmFsKSwgeyBuYW1lOiBCbG9iTmFtZVRvU3RyaW5nKGJsb2JQcmVmaXhJbnRlcm5hbC5uYW1lKSB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYmxvYlByZWZpeDtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgYmxvYkl0ZW1zOiBpbnRlcm5hbFJlc3BvbnNlLnNlZ21lbnQuYmxvYkl0ZW1zLm1hcCgoYmxvYkl0ZW1JbnRlcmFsKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmxvYkl0ZW0gPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGJsb2JJdGVtSW50ZXJhbCksIHsgbmFtZTogQmxvYk5hbWVUb1N0cmluZyhibG9iSXRlbUludGVyYWwubmFtZSkgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJsb2JJdGVtO1xuICAgICAgICAgICAgfSksXG4gICAgICAgIH0gfSk7XG59XG5mdW5jdGlvbiogRXh0cmFjdFBhZ2VSYW5nZUluZm9JdGVtcyhnZXRQYWdlUmFuZ2VzU2VnbWVudCkge1xuICAgIGxldCBwYWdlUmFuZ2UgPSBbXTtcbiAgICBsZXQgY2xlYXJSYW5nZSA9IFtdO1xuICAgIGlmIChnZXRQYWdlUmFuZ2VzU2VnbWVudC5wYWdlUmFuZ2UpXG4gICAgICAgIHBhZ2VSYW5nZSA9IGdldFBhZ2VSYW5nZXNTZWdtZW50LnBhZ2VSYW5nZTtcbiAgICBpZiAoZ2V0UGFnZVJhbmdlc1NlZ21lbnQuY2xlYXJSYW5nZSlcbiAgICAgICAgY2xlYXJSYW5nZSA9IGdldFBhZ2VSYW5nZXNTZWdtZW50LmNsZWFyUmFuZ2U7XG4gICAgbGV0IHBhZ2VSYW5nZUluZGV4ID0gMDtcbiAgICBsZXQgY2xlYXJSYW5nZUluZGV4ID0gMDtcbiAgICB3aGlsZSAocGFnZVJhbmdlSW5kZXggPCBwYWdlUmFuZ2UubGVuZ3RoICYmIGNsZWFyUmFuZ2VJbmRleCA8IGNsZWFyUmFuZ2UubGVuZ3RoKSB7XG4gICAgICAgIGlmIChwYWdlUmFuZ2VbcGFnZVJhbmdlSW5kZXhdLnN0YXJ0IDwgY2xlYXJSYW5nZVtjbGVhclJhbmdlSW5kZXhdLnN0YXJ0KSB7XG4gICAgICAgICAgICB5aWVsZCB7XG4gICAgICAgICAgICAgICAgc3RhcnQ6IHBhZ2VSYW5nZVtwYWdlUmFuZ2VJbmRleF0uc3RhcnQsXG4gICAgICAgICAgICAgICAgZW5kOiBwYWdlUmFuZ2VbcGFnZVJhbmdlSW5kZXhdLmVuZCxcbiAgICAgICAgICAgICAgICBpc0NsZWFyOiBmYWxzZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICArK3BhZ2VSYW5nZUluZGV4O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgeWllbGQge1xuICAgICAgICAgICAgICAgIHN0YXJ0OiBjbGVhclJhbmdlW2NsZWFyUmFuZ2VJbmRleF0uc3RhcnQsXG4gICAgICAgICAgICAgICAgZW5kOiBjbGVhclJhbmdlW2NsZWFyUmFuZ2VJbmRleF0uZW5kLFxuICAgICAgICAgICAgICAgIGlzQ2xlYXI6IHRydWUsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgKytjbGVhclJhbmdlSW5kZXg7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZm9yICg7IHBhZ2VSYW5nZUluZGV4IDwgcGFnZVJhbmdlLmxlbmd0aDsgKytwYWdlUmFuZ2VJbmRleCkge1xuICAgICAgICB5aWVsZCB7XG4gICAgICAgICAgICBzdGFydDogcGFnZVJhbmdlW3BhZ2VSYW5nZUluZGV4XS5zdGFydCxcbiAgICAgICAgICAgIGVuZDogcGFnZVJhbmdlW3BhZ2VSYW5nZUluZGV4XS5lbmQsXG4gICAgICAgICAgICBpc0NsZWFyOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZm9yICg7IGNsZWFyUmFuZ2VJbmRleCA8IGNsZWFyUmFuZ2UubGVuZ3RoOyArK2NsZWFyUmFuZ2VJbmRleCkge1xuICAgICAgICB5aWVsZCB7XG4gICAgICAgICAgICBzdGFydDogY2xlYXJSYW5nZVtjbGVhclJhbmdlSW5kZXhdLnN0YXJ0LFxuICAgICAgICAgICAgZW5kOiBjbGVhclJhbmdlW2NsZWFyUmFuZ2VJbmRleF0uZW5kLFxuICAgICAgICAgICAgaXNDbGVhcjogdHJ1ZSxcbiAgICAgICAgfTtcbiAgICB9XG59XG4vKipcbiAqIEVzY2FwZSB0aGUgYmxvYk5hbWUgYnV0IGtlZXAgcGF0aCBzZXBhcmF0b3IgKCcvJykuXG4gKi9cbmZ1bmN0aW9uIEVzY2FwZVBhdGgoYmxvYk5hbWUpIHtcbiAgICBjb25zdCBzcGxpdCA9IGJsb2JOYW1lLnNwbGl0KFwiL1wiKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNwbGl0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHNwbGl0W2ldID0gZW5jb2RlVVJJQ29tcG9uZW50KHNwbGl0W2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIHNwbGl0LmpvaW4oXCIvXCIpO1xufVxuLyoqXG4gKiBBIHR5cGVzYWZlIGhlbHBlciBmb3IgZW5zdXJpbmcgdGhhdCBhIGdpdmVuIHJlc3BvbnNlIG9iamVjdCBoYXNcbiAqIHRoZSBvcmlnaW5hbCBfcmVzcG9uc2UgYXR0YWNoZWQuXG4gKiBAcGFyYW0gcmVzcG9uc2UgLSBBIHJlc3BvbnNlIG9iamVjdCBmcm9tIGNhbGxpbmcgYSBjbGllbnQgb3BlcmF0aW9uXG4gKiBAcmV0dXJucyBUaGUgc2FtZSBvYmplY3QsIGJ1dCB3aXRoIGtub3duIF9yZXNwb25zZSBwcm9wZXJ0eVxuICovXG5mdW5jdGlvbiBhc3NlcnRSZXNwb25zZShyZXNwb25zZSkge1xuICAgIGlmIChgX3Jlc3BvbnNlYCBpbiByZXNwb25zZSkge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFVuZXhwZWN0ZWQgcmVzcG9uc2Ugb2JqZWN0ICR7cmVzcG9uc2V9YCk7XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBSZXRyeVBvbGljeSB0eXBlcy5cbiAqL1xuZXhwb3J0cy5TdG9yYWdlUmV0cnlQb2xpY3lUeXBlID0gdm9pZCAwO1xuKGZ1bmN0aW9uIChTdG9yYWdlUmV0cnlQb2xpY3lUeXBlKSB7XG4gICAgLyoqXG4gICAgICogRXhwb25lbnRpYWwgcmV0cnkuIFJldHJ5IHRpbWUgZGVsYXkgZ3Jvd3MgZXhwb25lbnRpYWxseS5cbiAgICAgKi9cbiAgICBTdG9yYWdlUmV0cnlQb2xpY3lUeXBlW1N0b3JhZ2VSZXRyeVBvbGljeVR5cGVbXCJFWFBPTkVOVElBTFwiXSA9IDBdID0gXCJFWFBPTkVOVElBTFwiO1xuICAgIC8qKlxuICAgICAqIExpbmVhciByZXRyeS4gUmV0cnkgdGltZSBkZWxheSBncm93cyBsaW5lYXJseS5cbiAgICAgKi9cbiAgICBTdG9yYWdlUmV0cnlQb2xpY3lUeXBlW1N0b3JhZ2VSZXRyeVBvbGljeVR5cGVbXCJGSVhFRFwiXSA9IDFdID0gXCJGSVhFRFwiO1xufSkoZXhwb3J0cy5TdG9yYWdlUmV0cnlQb2xpY3lUeXBlIHx8IChleHBvcnRzLlN0b3JhZ2VSZXRyeVBvbGljeVR5cGUgPSB7fSkpO1xuLy8gRGVmYXVsdCB2YWx1ZXMgb2YgU3RvcmFnZVJldHJ5T3B0aW9uc1xuY29uc3QgREVGQVVMVF9SRVRSWV9PUFRJT05TJDEgPSB7XG4gICAgbWF4UmV0cnlEZWxheUluTXM6IDEyMCAqIDEwMDAsXG4gICAgbWF4VHJpZXM6IDQsXG4gICAgcmV0cnlEZWxheUluTXM6IDQgKiAxMDAwLFxuICAgIHJldHJ5UG9saWN5VHlwZTogZXhwb3J0cy5TdG9yYWdlUmV0cnlQb2xpY3lUeXBlLkVYUE9ORU5USUFMLFxuICAgIHNlY29uZGFyeUhvc3Q6IFwiXCIsXG4gICAgdHJ5VGltZW91dEluTXM6IHVuZGVmaW5lZCwgLy8gVXNlIHNlcnZlciBzaWRlIGRlZmF1bHQgdGltZW91dCBzdHJhdGVneVxufTtcbmNvbnN0IFJFVFJZX0FCT1JUX0VSUk9SJDEgPSBuZXcgYWJvcnRDb250cm9sbGVyLkFib3J0RXJyb3IoXCJUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLlwiKTtcbi8qKlxuICogUmV0cnkgcG9saWN5IHdpdGggZXhwb25lbnRpYWwgcmV0cnkgYW5kIGxpbmVhciByZXRyeSBpbXBsZW1lbnRlZC5cbiAqL1xuY2xhc3MgU3RvcmFnZVJldHJ5UG9saWN5IGV4dGVuZHMgQmFzZVJlcXVlc3RQb2xpY3kge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgUmV0cnlQb2xpY3kuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmV4dFBvbGljeSAtXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLVxuICAgICAqIEBwYXJhbSByZXRyeU9wdGlvbnMgLVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG5leHRQb2xpY3ksIG9wdGlvbnMsIHJldHJ5T3B0aW9ucyA9IERFRkFVTFRfUkVUUllfT1BUSU9OUyQxKSB7XG4gICAgICAgIHN1cGVyKG5leHRQb2xpY3ksIG9wdGlvbnMpO1xuICAgICAgICAvLyBJbml0aWFsaXplIHJldHJ5IG9wdGlvbnNcbiAgICAgICAgdGhpcy5yZXRyeU9wdGlvbnMgPSB7XG4gICAgICAgICAgICByZXRyeVBvbGljeVR5cGU6IHJldHJ5T3B0aW9ucy5yZXRyeVBvbGljeVR5cGVcbiAgICAgICAgICAgICAgICA/IHJldHJ5T3B0aW9ucy5yZXRyeVBvbGljeVR5cGVcbiAgICAgICAgICAgICAgICA6IERFRkFVTFRfUkVUUllfT1BUSU9OUyQxLnJldHJ5UG9saWN5VHlwZSxcbiAgICAgICAgICAgIG1heFRyaWVzOiByZXRyeU9wdGlvbnMubWF4VHJpZXMgJiYgcmV0cnlPcHRpb25zLm1heFRyaWVzID49IDFcbiAgICAgICAgICAgICAgICA/IE1hdGguZmxvb3IocmV0cnlPcHRpb25zLm1heFRyaWVzKVxuICAgICAgICAgICAgICAgIDogREVGQVVMVF9SRVRSWV9PUFRJT05TJDEubWF4VHJpZXMsXG4gICAgICAgICAgICB0cnlUaW1lb3V0SW5NczogcmV0cnlPcHRpb25zLnRyeVRpbWVvdXRJbk1zICYmIHJldHJ5T3B0aW9ucy50cnlUaW1lb3V0SW5NcyA+PSAwXG4gICAgICAgICAgICAgICAgPyByZXRyeU9wdGlvbnMudHJ5VGltZW91dEluTXNcbiAgICAgICAgICAgICAgICA6IERFRkFVTFRfUkVUUllfT1BUSU9OUyQxLnRyeVRpbWVvdXRJbk1zLFxuICAgICAgICAgICAgcmV0cnlEZWxheUluTXM6IHJldHJ5T3B0aW9ucy5yZXRyeURlbGF5SW5NcyAmJiByZXRyeU9wdGlvbnMucmV0cnlEZWxheUluTXMgPj0gMFxuICAgICAgICAgICAgICAgID8gTWF0aC5taW4ocmV0cnlPcHRpb25zLnJldHJ5RGVsYXlJbk1zLCByZXRyeU9wdGlvbnMubWF4UmV0cnlEZWxheUluTXNcbiAgICAgICAgICAgICAgICAgICAgPyByZXRyeU9wdGlvbnMubWF4UmV0cnlEZWxheUluTXNcbiAgICAgICAgICAgICAgICAgICAgOiBERUZBVUxUX1JFVFJZX09QVElPTlMkMS5tYXhSZXRyeURlbGF5SW5NcylcbiAgICAgICAgICAgICAgICA6IERFRkFVTFRfUkVUUllfT1BUSU9OUyQxLnJldHJ5RGVsYXlJbk1zLFxuICAgICAgICAgICAgbWF4UmV0cnlEZWxheUluTXM6IHJldHJ5T3B0aW9ucy5tYXhSZXRyeURlbGF5SW5NcyAmJiByZXRyeU9wdGlvbnMubWF4UmV0cnlEZWxheUluTXMgPj0gMFxuICAgICAgICAgICAgICAgID8gcmV0cnlPcHRpb25zLm1heFJldHJ5RGVsYXlJbk1zXG4gICAgICAgICAgICAgICAgOiBERUZBVUxUX1JFVFJZX09QVElPTlMkMS5tYXhSZXRyeURlbGF5SW5NcyxcbiAgICAgICAgICAgIHNlY29uZGFyeUhvc3Q6IHJldHJ5T3B0aW9ucy5zZWNvbmRhcnlIb3N0XG4gICAgICAgICAgICAgICAgPyByZXRyeU9wdGlvbnMuc2Vjb25kYXJ5SG9zdFxuICAgICAgICAgICAgICAgIDogREVGQVVMVF9SRVRSWV9PUFRJT05TJDEuc2Vjb25kYXJ5SG9zdCxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2VuZHMgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByZXF1ZXN0IC1cbiAgICAgKi9cbiAgICBhc3luYyBzZW5kUmVxdWVzdChyZXF1ZXN0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmF0dGVtcHRTZW5kUmVxdWVzdChyZXF1ZXN0LCBmYWxzZSwgMSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlY2lkZSBhbmQgcGVyZm9ybSBuZXh0IHJldHJ5LiBXb24ndCBtdXRhdGUgcmVxdWVzdCBwYXJhbWV0ZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVxdWVzdCAtXG4gICAgICogQHBhcmFtIHNlY29uZGFyeUhhczQwNCAtICBJZiBhdHRlbXB0IHdhcyBhZ2FpbnN0IHRoZSBzZWNvbmRhcnkgJiBpdCByZXR1cm5lZCBhIFN0YXR1c05vdEZvdW5kICg0MDQpLCB0aGVuXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSByZXNvdXJjZSB3YXMgbm90IGZvdW5kLiBUaGlzIG1heSBiZSBkdWUgdG8gcmVwbGljYXRpb24gZGVsYXkuIFNvLCBpbiB0aGlzXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UsIHdlJ2xsIG5ldmVyIHRyeSB0aGUgc2Vjb25kYXJ5IGFnYWluIGZvciB0aGlzIG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0gYXR0ZW1wdCAtICAgICAgICAgICBIb3cgbWFueSByZXRyaWVzIGhhcyBiZWVuIGF0dGVtcHRlZCB0byBwZXJmb3JtZWQsIHN0YXJ0aW5nIGZyb20gMSwgd2hpY2ggaW5jbHVkZXNcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGF0dGVtcHQgd2lsbCBiZSBwZXJmb3JtZWQgYnkgdGhpcyBtZXRob2QgY2FsbC5cbiAgICAgKi9cbiAgICBhc3luYyBhdHRlbXB0U2VuZFJlcXVlc3QocmVxdWVzdCwgc2Vjb25kYXJ5SGFzNDA0LCBhdHRlbXB0KSB7XG4gICAgICAgIGNvbnN0IG5ld1JlcXVlc3QgPSByZXF1ZXN0LmNsb25lKCk7XG4gICAgICAgIGNvbnN0IGlzUHJpbWFyeVJldHJ5ID0gc2Vjb25kYXJ5SGFzNDA0IHx8XG4gICAgICAgICAgICAhdGhpcy5yZXRyeU9wdGlvbnMuc2Vjb25kYXJ5SG9zdCB8fFxuICAgICAgICAgICAgIShyZXF1ZXN0Lm1ldGhvZCA9PT0gXCJHRVRcIiB8fCByZXF1ZXN0Lm1ldGhvZCA9PT0gXCJIRUFEXCIgfHwgcmVxdWVzdC5tZXRob2QgPT09IFwiT1BUSU9OU1wiKSB8fFxuICAgICAgICAgICAgYXR0ZW1wdCAlIDIgPT09IDE7XG4gICAgICAgIGlmICghaXNQcmltYXJ5UmV0cnkpIHtcbiAgICAgICAgICAgIG5ld1JlcXVlc3QudXJsID0gc2V0VVJMSG9zdChuZXdSZXF1ZXN0LnVybCwgdGhpcy5yZXRyeU9wdGlvbnMuc2Vjb25kYXJ5SG9zdCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU2V0IHRoZSBzZXJ2ZXItc2lkZSB0aW1lb3V0IHF1ZXJ5IHBhcmFtZXRlciBcInRpbWVvdXQ9W3NlY29uZHNdXCJcbiAgICAgICAgaWYgKHRoaXMucmV0cnlPcHRpb25zLnRyeVRpbWVvdXRJbk1zKSB7XG4gICAgICAgICAgICBuZXdSZXF1ZXN0LnVybCA9IHNldFVSTFBhcmFtZXRlcihuZXdSZXF1ZXN0LnVybCwgVVJMQ29uc3RhbnRzLlBhcmFtZXRlcnMuVElNRU9VVCwgTWF0aC5mbG9vcih0aGlzLnJldHJ5T3B0aW9ucy50cnlUaW1lb3V0SW5NcyAvIDEwMDApLnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBSZXRyeVBvbGljeTogPT09PT0+IFRyeT0ke2F0dGVtcHR9ICR7aXNQcmltYXJ5UmV0cnkgPyBcIlByaW1hcnlcIiA6IFwiU2Vjb25kYXJ5XCJ9YCk7XG4gICAgICAgICAgICByZXNwb25zZSA9IGF3YWl0IHRoaXMuX25leHRQb2xpY3kuc2VuZFJlcXVlc3QobmV3UmVxdWVzdCk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuc2hvdWxkUmV0cnkoaXNQcmltYXJ5UmV0cnksIGF0dGVtcHQsIHJlc3BvbnNlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlY29uZGFyeUhhczQwNCA9IHNlY29uZGFyeUhhczQwNCB8fCAoIWlzUHJpbWFyeVJldHJ5ICYmIHJlc3BvbnNlLnN0YXR1cyA9PT0gNDA0KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBsb2dnZXIuZXJyb3IoYFJldHJ5UG9saWN5OiBDYXVnaHQgZXJyb3IsIG1lc3NhZ2U6ICR7ZXJyLm1lc3NhZ2V9LCBjb2RlOiAke2Vyci5jb2RlfWApO1xuICAgICAgICAgICAgaWYgKCF0aGlzLnNob3VsZFJldHJ5KGlzUHJpbWFyeVJldHJ5LCBhdHRlbXB0LCByZXNwb25zZSwgZXJyKSkge1xuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLmRlbGF5KGlzUHJpbWFyeVJldHJ5LCBhdHRlbXB0LCByZXF1ZXN0LmFib3J0U2lnbmFsKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXR0ZW1wdFNlbmRSZXF1ZXN0KHJlcXVlc3QsIHNlY29uZGFyeUhhczQwNCwgKythdHRlbXB0KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVjaWRlIHdoZXRoZXIgdG8gcmV0cnkgYWNjb3JkaW5nIHRvIGxhc3QgSFRUUCByZXNwb25zZSBhbmQgcmV0cnkgY291bnRlcnMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaXNQcmltYXJ5UmV0cnkgLVxuICAgICAqIEBwYXJhbSBhdHRlbXB0IC1cbiAgICAgKiBAcGFyYW0gcmVzcG9uc2UgLVxuICAgICAqIEBwYXJhbSBlcnIgLVxuICAgICAqL1xuICAgIHNob3VsZFJldHJ5KGlzUHJpbWFyeVJldHJ5LCBhdHRlbXB0LCByZXNwb25zZSwgZXJyKSB7XG4gICAgICAgIGlmIChhdHRlbXB0ID49IHRoaXMucmV0cnlPcHRpb25zLm1heFRyaWVzKSB7XG4gICAgICAgICAgICBsb2dnZXIuaW5mbyhgUmV0cnlQb2xpY3k6IEF0dGVtcHQocykgJHthdHRlbXB0fSA+PSBtYXhUcmllcyAke3RoaXMucmV0cnlPcHRpb25zXG4gICAgICAgICAgICAgICAgLm1heFRyaWVzfSwgbm8gZnVydGhlciB0cnkuYCk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSGFuZGxlIG5ldHdvcmsgZmFpbHVyZXMsIHlvdSBtYXkgbmVlZCB0byBjdXN0b21pemUgdGhlIGxpc3Qgd2hlbiB5b3UgaW1wbGVtZW50XG4gICAgICAgIC8vIHlvdXIgb3duIGh0dHAgY2xpZW50XG4gICAgICAgIGNvbnN0IHJldHJpYWJsZUVycm9ycyA9IFtcbiAgICAgICAgICAgIFwiRVRJTUVET1VUXCIsXG4gICAgICAgICAgICBcIkVTT0NLRVRUSU1FRE9VVFwiLFxuICAgICAgICAgICAgXCJFQ09OTlJFRlVTRURcIixcbiAgICAgICAgICAgIFwiRUNPTk5SRVNFVFwiLFxuICAgICAgICAgICAgXCJFTk9FTlRcIixcbiAgICAgICAgICAgIFwiRU5PVEZPVU5EXCIsXG4gICAgICAgICAgICBcIlRJTUVPVVRcIixcbiAgICAgICAgICAgIFwiRVBJUEVcIixcbiAgICAgICAgICAgIFwiUkVRVUVTVF9TRU5EX0VSUk9SXCIsIC8vIEZvciBkZWZhdWx0IHhociBiYXNlZCBodHRwIGNsaWVudCBwcm92aWRlZCBpbiBtcy1yZXN0LWpzXG4gICAgICAgIF07XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcmV0cmlhYmxlRXJyb3Igb2YgcmV0cmlhYmxlRXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVyci5uYW1lLnRvVXBwZXJDYXNlKCkuaW5jbHVkZXMocmV0cmlhYmxlRXJyb3IpIHx8XG4gICAgICAgICAgICAgICAgICAgIGVyci5tZXNzYWdlLnRvVXBwZXJDYXNlKCkuaW5jbHVkZXMocmV0cmlhYmxlRXJyb3IpIHx8XG4gICAgICAgICAgICAgICAgICAgIChlcnIuY29kZSAmJiBlcnIuY29kZS50b1N0cmluZygpLnRvVXBwZXJDYXNlKCkgPT09IHJldHJpYWJsZUVycm9yKSkge1xuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhgUmV0cnlQb2xpY3k6IE5ldHdvcmsgZXJyb3IgJHtyZXRyaWFibGVFcnJvcn0gZm91bmQsIHdpbGwgcmV0cnkuYCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBJZiBhdHRlbXB0IHdhcyBhZ2FpbnN0IHRoZSBzZWNvbmRhcnkgJiBpdCByZXR1cm5lZCBhIFN0YXR1c05vdEZvdW5kICg0MDQpLCB0aGVuXG4gICAgICAgIC8vIHRoZSByZXNvdXJjZSB3YXMgbm90IGZvdW5kLiBUaGlzIG1heSBiZSBkdWUgdG8gcmVwbGljYXRpb24gZGVsYXkuIFNvLCBpbiB0aGlzXG4gICAgICAgIC8vIGNhc2UsIHdlJ2xsIG5ldmVyIHRyeSB0aGUgc2Vjb25kYXJ5IGFnYWluIGZvciB0aGlzIG9wZXJhdGlvbi5cbiAgICAgICAgaWYgKHJlc3BvbnNlIHx8IGVycikge1xuICAgICAgICAgICAgY29uc3Qgc3RhdHVzQ29kZSA9IHJlc3BvbnNlID8gcmVzcG9uc2Uuc3RhdHVzIDogZXJyID8gZXJyLnN0YXR1c0NvZGUgOiAwO1xuICAgICAgICAgICAgaWYgKCFpc1ByaW1hcnlSZXRyeSAmJiBzdGF0dXNDb2RlID09PSA0MDQpIHtcbiAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhgUmV0cnlQb2xpY3k6IFNlY29uZGFyeSBhY2Nlc3Mgd2l0aCA0MDQsIHdpbGwgcmV0cnkuYCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBTZXJ2ZXIgaW50ZXJuYWwgZXJyb3Igb3Igc2VydmVyIHRpbWVvdXRcbiAgICAgICAgICAgIGlmIChzdGF0dXNDb2RlID09PSA1MDMgfHwgc3RhdHVzQ29kZSA9PT0gNTAwKSB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYFJldHJ5UG9saWN5OiBXaWxsIHJldHJ5IGZvciBzdGF0dXMgY29kZSAke3N0YXR1c0NvZGV9LmApO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFtDb3B5IHNvdXJjZSBlcnJvciBjb2RlXSBGZWF0dXJlIGlzIHBlbmRpbmcgb24gc2VydmljZSBzaWRlLCBza2lwIHJldHJ5IG9uIGNvcHkgc291cmNlIGVycm9yIGZvciBub3cuXG4gICAgICAgIC8vIGlmIChyZXNwb25zZSkge1xuICAgICAgICAvLyAgIC8vIFJldHJ5IHNlbGVjdCBDb3B5IFNvdXJjZSBFcnJvciBDb2Rlcy5cbiAgICAgICAgLy8gICBpZiAocmVzcG9uc2U/LnN0YXR1cyA+PSA0MDApIHtcbiAgICAgICAgLy8gICAgIGNvbnN0IGNvcHlTb3VyY2VFcnJvciA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KEhlYWRlckNvbnN0YW50cy5YX01TX0NvcHlTb3VyY2VFcnJvckNvZGUpO1xuICAgICAgICAvLyAgICAgaWYgKGNvcHlTb3VyY2VFcnJvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vICAgICAgIHN3aXRjaCAoY29weVNvdXJjZUVycm9yKSB7XG4gICAgICAgIC8vICAgICAgICAgY2FzZSBcIkludGVybmFsRXJyb3JcIjpcbiAgICAgICAgLy8gICAgICAgICBjYXNlIFwiT3BlcmF0aW9uVGltZWRPdXRcIjpcbiAgICAgICAgLy8gICAgICAgICBjYXNlIFwiU2VydmVyQnVzeVwiOlxuICAgICAgICAvLyAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIC8vICAgICAgIH1cbiAgICAgICAgLy8gICAgIH1cbiAgICAgICAgLy8gICB9XG4gICAgICAgIC8vIH1cbiAgICAgICAgaWYgKChlcnIgPT09IG51bGwgfHwgZXJyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlcnIuY29kZSkgPT09IFwiUEFSU0VfRVJST1JcIiAmJiAoZXJyID09PSBudWxsIHx8IGVyciA9PT0gdm9pZCAwID8gdm9pZCAwIDogZXJyLm1lc3NhZ2Uuc3RhcnRzV2l0aChgRXJyb3IgXCJFcnJvcjogVW5jbG9zZWQgcm9vdCB0YWdgKSkpIHtcbiAgICAgICAgICAgIGxvZ2dlci5pbmZvKFwiUmV0cnlQb2xpY3k6IEluY29tcGxldGUgWE1MIHJlc3BvbnNlIGxpa2VseSBkdWUgdG8gc2VydmljZSB0aW1lb3V0LCB3aWxsIHJldHJ5LlwiKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVsYXkgYSBjYWxjdWxhdGVkIHRpbWUgYmV0d2VlbiByZXRyaWVzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGlzUHJpbWFyeVJldHJ5IC1cbiAgICAgKiBAcGFyYW0gYXR0ZW1wdCAtXG4gICAgICogQHBhcmFtIGFib3J0U2lnbmFsIC1cbiAgICAgKi9cbiAgICBhc3luYyBkZWxheShpc1ByaW1hcnlSZXRyeSwgYXR0ZW1wdCwgYWJvcnRTaWduYWwpIHtcbiAgICAgICAgbGV0IGRlbGF5VGltZUluTXMgPSAwO1xuICAgICAgICBpZiAoaXNQcmltYXJ5UmV0cnkpIHtcbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy5yZXRyeU9wdGlvbnMucmV0cnlQb2xpY3lUeXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBleHBvcnRzLlN0b3JhZ2VSZXRyeVBvbGljeVR5cGUuRVhQT05FTlRJQUw6XG4gICAgICAgICAgICAgICAgICAgIGRlbGF5VGltZUluTXMgPSBNYXRoLm1pbigoTWF0aC5wb3coMiwgYXR0ZW1wdCAtIDEpIC0gMSkgKiB0aGlzLnJldHJ5T3B0aW9ucy5yZXRyeURlbGF5SW5NcywgdGhpcy5yZXRyeU9wdGlvbnMubWF4UmV0cnlEZWxheUluTXMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIGV4cG9ydHMuU3RvcmFnZVJldHJ5UG9saWN5VHlwZS5GSVhFRDpcbiAgICAgICAgICAgICAgICAgICAgZGVsYXlUaW1lSW5NcyA9IHRoaXMucmV0cnlPcHRpb25zLnJldHJ5RGVsYXlJbk1zO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGRlbGF5VGltZUluTXMgPSBNYXRoLnJhbmRvbSgpICogMTAwMDtcbiAgICAgICAgfVxuICAgICAgICBsb2dnZXIuaW5mbyhgUmV0cnlQb2xpY3k6IERlbGF5IGZvciAke2RlbGF5VGltZUluTXN9bXNgKTtcbiAgICAgICAgcmV0dXJuIGRlbGF5KGRlbGF5VGltZUluTXMsIGFib3J0U2lnbmFsLCBSRVRSWV9BQk9SVF9FUlJPUiQxKTtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBTdG9yYWdlUmV0cnlQb2xpY3lGYWN0b3J5IGlzIGEgZmFjdG9yeSBjbGFzcyBoZWxwaW5nIGdlbmVyYXRpbmcge0BsaW5rIFN0b3JhZ2VSZXRyeVBvbGljeX0gb2JqZWN0cy5cbiAqL1xuY2xhc3MgU3RvcmFnZVJldHJ5UG9saWN5RmFjdG9yeSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBTdG9yYWdlUmV0cnlQb2xpY3lGYWN0b3J5LlxuICAgICAqIEBwYXJhbSByZXRyeU9wdGlvbnMgLVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHJldHJ5T3B0aW9ucykge1xuICAgICAgICB0aGlzLnJldHJ5T3B0aW9ucyA9IHJldHJ5T3B0aW9ucztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIFN0b3JhZ2VSZXRyeVBvbGljeSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmV4dFBvbGljeSAtXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLVxuICAgICAqL1xuICAgIGNyZWF0ZShuZXh0UG9saWN5LCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBuZXcgU3RvcmFnZVJldHJ5UG9saWN5KG5leHRQb2xpY3ksIG9wdGlvbnMsIHRoaXMucmV0cnlPcHRpb25zKTtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBDcmVkZW50aWFsIHBvbGljeSB1c2VkIHRvIHNpZ24gSFRUUChTKSByZXF1ZXN0cyBiZWZvcmUgc2VuZGluZy4gVGhpcyBpcyBhblxuICogYWJzdHJhY3QgY2xhc3MuXG4gKi9cbmNsYXNzIENyZWRlbnRpYWxQb2xpY3kgZXh0ZW5kcyBCYXNlUmVxdWVzdFBvbGljeSB7XG4gICAgLyoqXG4gICAgICogU2VuZHMgb3V0IHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVxdWVzdCAtXG4gICAgICovXG4gICAgc2VuZFJlcXVlc3QocmVxdWVzdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbmV4dFBvbGljeS5zZW5kUmVxdWVzdCh0aGlzLnNpZ25SZXF1ZXN0KHJlcXVlc3QpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2hpbGQgY2xhc3NlcyBtdXN0IGltcGxlbWVudCB0aGlzIG1ldGhvZCB3aXRoIHJlcXVlc3Qgc2lnbmluZy4gVGhpcyBtZXRob2RcbiAgICAgKiB3aWxsIGJlIGV4ZWN1dGVkIGluIHtAbGluayBzZW5kUmVxdWVzdH0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVxdWVzdCAtXG4gICAgICovXG4gICAgc2lnblJlcXVlc3QocmVxdWVzdCkge1xuICAgICAgICAvLyBDaGlsZCBjbGFzc2VzIG11c3Qgb3ZlcnJpZGUgdGhpcyBtZXRob2Qgd2l0aCByZXF1ZXN0IHNpZ25pbmcuIFRoaXMgbWV0aG9kXG4gICAgICAgIC8vIHdpbGwgYmUgZXhlY3V0ZWQgaW4gc2VuZFJlcXVlc3QoKS5cbiAgICAgICAgcmV0dXJuIHJlcXVlc3Q7XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qXG4gKiBXZSBuZWVkIHRvIGltaXRhdGUgLk5ldCBjdWx0dXJlLWF3YXJlIHNvcnRpbmcsIHdoaWNoIGlzIHVzZWQgaW4gc3RvcmFnZSBzZXJ2aWNlLlxuICogQmVsb3cgdGFibGVzIGNvbnRhaW4gc29ydC1rZXlzIGZvciBlbi1VUyBjdWx0dXJlLlxuICovXG5jb25zdCB0YWJsZV9sdjAgPSBuZXcgVWludDMyQXJyYXkoW1xuICAgIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCxcbiAgICAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHg3MWMsIDB4MCwgMHg3MWYsIDB4NzIxLFxuICAgIDB4NzIzLCAweDcyNSwgMHgwLCAweDAsIDB4MCwgMHg3MmQsIDB4ODAzLCAweDAsIDB4MCwgMHg3MzMsIDB4MCwgMHhkMDMsIDB4ZDFhLCAweGQxYywgMHhkMWUsXG4gICAgMHhkMjAsIDB4ZDIyLCAweGQyNCwgMHhkMjYsIDB4ZDI4LCAweGQyYSwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweGUwMiwgMHhlMDksIDB4ZTBhLFxuICAgIDB4ZTFhLCAweGUyMSwgMHhlMjMsIDB4ZTI1LCAweGUyYywgMHhlMzIsIDB4ZTM1LCAweGUzNiwgMHhlNDgsIDB4ZTUxLCAweGU3MCwgMHhlN2MsIDB4ZTdlLCAweGU4OSxcbiAgICAweGU4YSwgMHhlOTEsIDB4ZTk5LCAweGU5ZiwgMHhlYTIsIDB4ZWE0LCAweGVhNiwgMHhlYTcsIDB4ZWE5LCAweDAsIDB4MCwgMHgwLCAweDc0MywgMHg3NDQsIDB4NzQ4LFxuICAgIDB4ZTAyLCAweGUwOSwgMHhlMGEsIDB4ZTFhLCAweGUyMSwgMHhlMjMsIDB4ZTI1LCAweGUyYywgMHhlMzIsIDB4ZTM1LCAweGUzNiwgMHhlNDgsIDB4ZTUxLCAweGU3MCxcbiAgICAweGU3YywgMHhlN2UsIDB4ZTg5LCAweGU4YSwgMHhlOTEsIDB4ZTk5LCAweGU5ZiwgMHhlYTIsIDB4ZWE0LCAweGVhNiwgMHhlYTcsIDB4ZWE5LCAweDAsIDB4NzRjLFxuICAgIDB4MCwgMHg3NTAsIDB4MCxcbl0pO1xuY29uc3QgdGFibGVfbHYyID0gbmV3IFVpbnQzMkFycmF5KFtcbiAgICAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsXG4gICAgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLFxuICAgIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCxcbiAgICAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgxMiwgMHgxMiwgMHgxMiwgMHgxMiwgMHgxMiwgMHgxMiwgMHgxMiwgMHgxMiwgMHgxMixcbiAgICAweDEyLCAweDEyLCAweDEyLCAweDEyLCAweDEyLCAweDEyLCAweDEyLCAweDEyLCAweDEyLCAweDEyLCAweDEyLCAweDEyLCAweDEyLCAweDEyLCAweDEyLCAweDEyLFxuICAgIDB4MTIsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsXG4gICAgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLFxuXSk7XG5jb25zdCB0YWJsZV9sdjQgPSBuZXcgVWludDMyQXJyYXkoW1xuICAgIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCxcbiAgICAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsXG4gICAgMHgwLCAweDgwMTIsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDgyMTIsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCxcbiAgICAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsXG4gICAgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLFxuICAgIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCxcbiAgICAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLFxuXSk7XG5mdW5jdGlvbiBjb21wYXJlSGVhZGVyKGxocywgcmhzKSB7XG4gICAgaWYgKGlzTGVzc1RoYW4obGhzLCByaHMpKVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgcmV0dXJuIDE7XG59XG5mdW5jdGlvbiBpc0xlc3NUaGFuKGxocywgcmhzKSB7XG4gICAgY29uc3QgdGFibGVzID0gW3RhYmxlX2x2MCwgdGFibGVfbHYyLCB0YWJsZV9sdjRdO1xuICAgIGxldCBjdXJyX2xldmVsID0gMDtcbiAgICBsZXQgaSA9IDA7XG4gICAgbGV0IGogPSAwO1xuICAgIHdoaWxlIChjdXJyX2xldmVsIDwgdGFibGVzLmxlbmd0aCkge1xuICAgICAgICBpZiAoY3Vycl9sZXZlbCA9PT0gdGFibGVzLmxlbmd0aCAtIDEgJiYgaSAhPT0gaikge1xuICAgICAgICAgICAgcmV0dXJuIGkgPiBqO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHdlaWdodDEgPSBpIDwgbGhzLmxlbmd0aCA/IHRhYmxlc1tjdXJyX2xldmVsXVtsaHNbaV0uY2hhckNvZGVBdCgwKV0gOiAweDE7XG4gICAgICAgIGNvbnN0IHdlaWdodDIgPSBqIDwgcmhzLmxlbmd0aCA/IHRhYmxlc1tjdXJyX2xldmVsXVtyaHNbal0uY2hhckNvZGVBdCgwKV0gOiAweDE7XG4gICAgICAgIGlmICh3ZWlnaHQxID09PSAweDEgJiYgd2VpZ2h0MiA9PT0gMHgxKSB7XG4gICAgICAgICAgICBpID0gMDtcbiAgICAgICAgICAgIGogPSAwO1xuICAgICAgICAgICAgKytjdXJyX2xldmVsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHdlaWdodDEgPT09IHdlaWdodDIpIHtcbiAgICAgICAgICAgICsraTtcbiAgICAgICAgICAgICsrajtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh3ZWlnaHQxID09PSAwKSB7XG4gICAgICAgICAgICArK2k7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAod2VpZ2h0MiA9PT0gMCkge1xuICAgICAgICAgICAgKytqO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHdlaWdodDEgPCB3ZWlnaHQyO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsUG9saWN5IGlzIGEgcG9saWN5IHVzZWQgdG8gc2lnbiBIVFRQIHJlcXVlc3Qgd2l0aCBhIHNoYXJlZCBrZXkuXG4gKi9cbmNsYXNzIFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsUG9saWN5IGV4dGVuZHMgQ3JlZGVudGlhbFBvbGljeSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbFBvbGljeS5cbiAgICAgKiBAcGFyYW0gbmV4dFBvbGljeSAtXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLVxuICAgICAqIEBwYXJhbSBmYWN0b3J5IC1cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihuZXh0UG9saWN5LCBvcHRpb25zLCBmYWN0b3J5KSB7XG4gICAgICAgIHN1cGVyKG5leHRQb2xpY3ksIG9wdGlvbnMpO1xuICAgICAgICB0aGlzLmZhY3RvcnkgPSBmYWN0b3J5O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTaWducyByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlcXVlc3QgLVxuICAgICAqL1xuICAgIHNpZ25SZXF1ZXN0KHJlcXVlc3QpIHtcbiAgICAgICAgcmVxdWVzdC5oZWFkZXJzLnNldChIZWFkZXJDb25zdGFudHMuWF9NU19EQVRFLCBuZXcgRGF0ZSgpLnRvVVRDU3RyaW5nKCkpO1xuICAgICAgICBpZiAocmVxdWVzdC5ib2R5ICYmXG4gICAgICAgICAgICAodHlwZW9mIHJlcXVlc3QuYm9keSA9PT0gXCJzdHJpbmdcIiB8fCByZXF1ZXN0LmJvZHkgIT09IHVuZGVmaW5lZCkgJiZcbiAgICAgICAgICAgIHJlcXVlc3QuYm9keS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXF1ZXN0LmhlYWRlcnMuc2V0KEhlYWRlckNvbnN0YW50cy5DT05URU5UX0xFTkdUSCwgQnVmZmVyLmJ5dGVMZW5ndGgocmVxdWVzdC5ib2R5KSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RyaW5nVG9TaWduID0gW1xuICAgICAgICAgICAgcmVxdWVzdC5tZXRob2QudG9VcHBlckNhc2UoKSxcbiAgICAgICAgICAgIHRoaXMuZ2V0SGVhZGVyVmFsdWVUb1NpZ24ocmVxdWVzdCwgSGVhZGVyQ29uc3RhbnRzLkNPTlRFTlRfTEFOR1VBR0UpLFxuICAgICAgICAgICAgdGhpcy5nZXRIZWFkZXJWYWx1ZVRvU2lnbihyZXF1ZXN0LCBIZWFkZXJDb25zdGFudHMuQ09OVEVOVF9FTkNPRElORyksXG4gICAgICAgICAgICB0aGlzLmdldEhlYWRlclZhbHVlVG9TaWduKHJlcXVlc3QsIEhlYWRlckNvbnN0YW50cy5DT05URU5UX0xFTkdUSCksXG4gICAgICAgICAgICB0aGlzLmdldEhlYWRlclZhbHVlVG9TaWduKHJlcXVlc3QsIEhlYWRlckNvbnN0YW50cy5DT05URU5UX01ENSksXG4gICAgICAgICAgICB0aGlzLmdldEhlYWRlclZhbHVlVG9TaWduKHJlcXVlc3QsIEhlYWRlckNvbnN0YW50cy5DT05URU5UX1RZUEUpLFxuICAgICAgICAgICAgdGhpcy5nZXRIZWFkZXJWYWx1ZVRvU2lnbihyZXF1ZXN0LCBIZWFkZXJDb25zdGFudHMuREFURSksXG4gICAgICAgICAgICB0aGlzLmdldEhlYWRlclZhbHVlVG9TaWduKHJlcXVlc3QsIEhlYWRlckNvbnN0YW50cy5JRl9NT0RJRklFRF9TSU5DRSksXG4gICAgICAgICAgICB0aGlzLmdldEhlYWRlclZhbHVlVG9TaWduKHJlcXVlc3QsIEhlYWRlckNvbnN0YW50cy5JRl9NQVRDSCksXG4gICAgICAgICAgICB0aGlzLmdldEhlYWRlclZhbHVlVG9TaWduKHJlcXVlc3QsIEhlYWRlckNvbnN0YW50cy5JRl9OT05FX01BVENIKSxcbiAgICAgICAgICAgIHRoaXMuZ2V0SGVhZGVyVmFsdWVUb1NpZ24ocmVxdWVzdCwgSGVhZGVyQ29uc3RhbnRzLklGX1VOTU9ESUZJRURfU0lOQ0UpLFxuICAgICAgICAgICAgdGhpcy5nZXRIZWFkZXJWYWx1ZVRvU2lnbihyZXF1ZXN0LCBIZWFkZXJDb25zdGFudHMuUkFOR0UpLFxuICAgICAgICBdLmpvaW4oXCJcXG5cIikgK1xuICAgICAgICAgICAgXCJcXG5cIiArXG4gICAgICAgICAgICB0aGlzLmdldENhbm9uaWNhbGl6ZWRIZWFkZXJzU3RyaW5nKHJlcXVlc3QpICtcbiAgICAgICAgICAgIHRoaXMuZ2V0Q2Fub25pY2FsaXplZFJlc291cmNlU3RyaW5nKHJlcXVlc3QpO1xuICAgICAgICBjb25zdCBzaWduYXR1cmUgPSB0aGlzLmZhY3RvcnkuY29tcHV0ZUhNQUNTSEEyNTYoc3RyaW5nVG9TaWduKTtcbiAgICAgICAgcmVxdWVzdC5oZWFkZXJzLnNldChIZWFkZXJDb25zdGFudHMuQVVUSE9SSVpBVElPTiwgYFNoYXJlZEtleSAke3RoaXMuZmFjdG9yeS5hY2NvdW50TmFtZX06JHtzaWduYXR1cmV9YCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGBbVVJMXToke3JlcXVlc3QudXJsfWApO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhgW0hFQURFUlNdOiR7cmVxdWVzdC5oZWFkZXJzLnRvU3RyaW5nKCl9YCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGBbU1RSSU5HIFRPIFNJR05dOiR7SlNPTi5zdHJpbmdpZnkoc3RyaW5nVG9TaWduKX1gKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYFtLRVldOiAke3JlcXVlc3QuaGVhZGVycy5nZXQoSGVhZGVyQ29uc3RhbnRzLkFVVEhPUklaQVRJT04pfWApO1xuICAgICAgICByZXR1cm4gcmVxdWVzdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0cmlldmUgaGVhZGVyIHZhbHVlIGFjY29yZGluZyB0byBzaGFyZWQga2V5IHNpZ24gcnVsZXMuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvYXV0aGVudGljYXRlLXdpdGgtc2hhcmVkLWtleVxuICAgICAqXG4gICAgICogQHBhcmFtIHJlcXVlc3QgLVxuICAgICAqIEBwYXJhbSBoZWFkZXJOYW1lIC1cbiAgICAgKi9cbiAgICBnZXRIZWFkZXJWYWx1ZVRvU2lnbihyZXF1ZXN0LCBoZWFkZXJOYW1lKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gcmVxdWVzdC5oZWFkZXJzLmdldChoZWFkZXJOYW1lKTtcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgLy8gV2hlbiB1c2luZyB2ZXJzaW9uIDIwMTUtMDItMjEgb3IgbGF0ZXIsIGlmIENvbnRlbnQtTGVuZ3RoIGlzIHplcm8sIHRoZW5cbiAgICAgICAgLy8gc2V0IHRoZSBDb250ZW50LUxlbmd0aCBwYXJ0IG9mIHRoZSBTdHJpbmdUb1NpZ24gdG8gYW4gZW1wdHkgc3RyaW5nLlxuICAgICAgICAvLyBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvYXV0aGVudGljYXRlLXdpdGgtc2hhcmVkLWtleVxuICAgICAgICBpZiAoaGVhZGVyTmFtZSA9PT0gSGVhZGVyQ29uc3RhbnRzLkNPTlRFTlRfTEVOR1RIICYmIHZhbHVlID09PSBcIjBcIikge1xuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUbyBjb25zdHJ1Y3QgdGhlIENhbm9uaWNhbGl6ZWRIZWFkZXJzIHBvcnRpb24gb2YgdGhlIHNpZ25hdHVyZSBzdHJpbmcsIGZvbGxvdyB0aGVzZSBzdGVwczpcbiAgICAgKiAxLiBSZXRyaWV2ZSBhbGwgaGVhZGVycyBmb3IgdGhlIHJlc291cmNlIHRoYXQgYmVnaW4gd2l0aCB4LW1zLSwgaW5jbHVkaW5nIHRoZSB4LW1zLWRhdGUgaGVhZGVyLlxuICAgICAqIDIuIENvbnZlcnQgZWFjaCBIVFRQIGhlYWRlciBuYW1lIHRvIGxvd2VyY2FzZS5cbiAgICAgKiAzLiBTb3J0IHRoZSBoZWFkZXJzIGxleGljb2dyYXBoaWNhbGx5IGJ5IGhlYWRlciBuYW1lLCBpbiBhc2NlbmRpbmcgb3JkZXIuXG4gICAgICogICAgRWFjaCBoZWFkZXIgbWF5IGFwcGVhciBvbmx5IG9uY2UgaW4gdGhlIHN0cmluZy5cbiAgICAgKiA0LiBSZXBsYWNlIGFueSBsaW5lYXIgd2hpdGVzcGFjZSBpbiB0aGUgaGVhZGVyIHZhbHVlIHdpdGggYSBzaW5nbGUgc3BhY2UuXG4gICAgICogNS4gVHJpbSBhbnkgd2hpdGVzcGFjZSBhcm91bmQgdGhlIGNvbG9uIGluIHRoZSBoZWFkZXIuXG4gICAgICogNi4gRmluYWxseSwgYXBwZW5kIGEgbmV3LWxpbmUgY2hhcmFjdGVyIHRvIGVhY2ggY2Fub25pY2FsaXplZCBoZWFkZXIgaW4gdGhlIHJlc3VsdGluZyBsaXN0LlxuICAgICAqICAgIENvbnN0cnVjdCB0aGUgQ2Fub25pY2FsaXplZEhlYWRlcnMgc3RyaW5nIGJ5IGNvbmNhdGVuYXRpbmcgYWxsIGhlYWRlcnMgaW4gdGhpcyBsaXN0IGludG8gYSBzaW5nbGUgc3RyaW5nLlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlcXVlc3QgLVxuICAgICAqL1xuICAgIGdldENhbm9uaWNhbGl6ZWRIZWFkZXJzU3RyaW5nKHJlcXVlc3QpIHtcbiAgICAgICAgbGV0IGhlYWRlcnNBcnJheSA9IHJlcXVlc3QuaGVhZGVycy5oZWFkZXJzQXJyYXkoKS5maWx0ZXIoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUubmFtZS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoSGVhZGVyQ29uc3RhbnRzLlBSRUZJWF9GT1JfU1RPUkFHRSk7XG4gICAgICAgIH0pO1xuICAgICAgICBoZWFkZXJzQXJyYXkuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmVIZWFkZXIoYS5uYW1lLnRvTG93ZXJDYXNlKCksIGIubmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIFJlbW92ZSBkdXBsaWNhdGUgaGVhZGVyc1xuICAgICAgICBoZWFkZXJzQXJyYXkgPSBoZWFkZXJzQXJyYXkuZmlsdGVyKCh2YWx1ZSwgaW5kZXgsIGFycmF5KSA9PiB7XG4gICAgICAgICAgICBpZiAoaW5kZXggPiAwICYmIHZhbHVlLm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gYXJyYXlbaW5kZXggLSAxXS5uYW1lLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCBjYW5vbmljYWxpemVkSGVhZGVyc1N0cmluZ1RvU2lnbiA9IFwiXCI7XG4gICAgICAgIGhlYWRlcnNBcnJheS5mb3JFYWNoKChoZWFkZXIpID0+IHtcbiAgICAgICAgICAgIGNhbm9uaWNhbGl6ZWRIZWFkZXJzU3RyaW5nVG9TaWduICs9IGAke2hlYWRlci5uYW1lXG4gICAgICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgICAudHJpbVJpZ2h0KCl9OiR7aGVhZGVyLnZhbHVlLnRyaW1MZWZ0KCl9XFxuYDtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBjYW5vbmljYWxpemVkSGVhZGVyc1N0cmluZ1RvU2lnbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHRoZSB3ZWJSZXNvdXJjZSBjYW5vbmljYWxpemVkIHJlc291cmNlIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByZXF1ZXN0IC1cbiAgICAgKi9cbiAgICBnZXRDYW5vbmljYWxpemVkUmVzb3VyY2VTdHJpbmcocmVxdWVzdCkge1xuICAgICAgICBjb25zdCBwYXRoID0gZ2V0VVJMUGF0aChyZXF1ZXN0LnVybCkgfHwgXCIvXCI7XG4gICAgICAgIGxldCBjYW5vbmljYWxpemVkUmVzb3VyY2VTdHJpbmcgPSBcIlwiO1xuICAgICAgICBjYW5vbmljYWxpemVkUmVzb3VyY2VTdHJpbmcgKz0gYC8ke3RoaXMuZmFjdG9yeS5hY2NvdW50TmFtZX0ke3BhdGh9YDtcbiAgICAgICAgY29uc3QgcXVlcmllcyA9IGdldFVSTFF1ZXJpZXMocmVxdWVzdC51cmwpO1xuICAgICAgICBjb25zdCBsb3dlcmNhc2VRdWVyaWVzID0ge307XG4gICAgICAgIGlmIChxdWVyaWVzKSB7XG4gICAgICAgICAgICBjb25zdCBxdWVyeUtleXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHF1ZXJpZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHF1ZXJpZXMsIGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbG93ZXJjYXNlS2V5ID0ga2V5LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgICAgIGxvd2VyY2FzZVF1ZXJpZXNbbG93ZXJjYXNlS2V5XSA9IHF1ZXJpZXNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgcXVlcnlLZXlzLnB1c2gobG93ZXJjYXNlS2V5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxdWVyeUtleXMuc29ydCgpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgcXVlcnlLZXlzKSB7XG4gICAgICAgICAgICAgICAgY2Fub25pY2FsaXplZFJlc291cmNlU3RyaW5nICs9IGBcXG4ke2tleX06JHtkZWNvZGVVUklDb21wb25lbnQobG93ZXJjYXNlUXVlcmllc1trZXldKX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYW5vbmljYWxpemVkUmVzb3VyY2VTdHJpbmc7XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogQ3JlZGVudGlhbCBpcyBhbiBhYnN0cmFjdCBjbGFzcyBmb3IgQXp1cmUgU3RvcmFnZSBIVFRQIHJlcXVlc3RzIHNpZ25pbmcuIFRoaXNcbiAqIGNsYXNzIHdpbGwgaG9zdCBhbiBjcmVkZW50aWFsUG9saWN5Q3JlYXRvciBmYWN0b3J5IHdoaWNoIGdlbmVyYXRlcyBDcmVkZW50aWFsUG9saWN5LlxuICovXG5jbGFzcyBDcmVkZW50aWFsIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgUmVxdWVzdFBvbGljeSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gX25leHRQb2xpY3kgLVxuICAgICAqIEBwYXJhbSBfb3B0aW9ucyAtXG4gICAgICovXG4gICAgY3JlYXRlKF9uZXh0UG9saWN5LCBfb3B0aW9ucykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgc2hvdWxkIGJlIGltcGxlbWVudGVkIGluIGNoaWxkcmVuIGNsYXNzZXMuXCIpO1xuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIE9OTFkgQVZBSUxBQkxFIElOIE5PREUuSlMgUlVOVElNRS5cbiAqXG4gKiBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbCBmb3IgYWNjb3VudCBrZXkgYXV0aG9yaXphdGlvbiBvZiBBenVyZSBTdG9yYWdlIHNlcnZpY2UuXG4gKi9cbmNsYXNzIFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsIGV4dGVuZHMgQ3JlZGVudGlhbCB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbC5cbiAgICAgKiBAcGFyYW0gYWNjb3VudE5hbWUgLVxuICAgICAqIEBwYXJhbSBhY2NvdW50S2V5IC1cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihhY2NvdW50TmFtZSwgYWNjb3VudEtleSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmFjY291bnROYW1lID0gYWNjb3VudE5hbWU7XG4gICAgICAgIHRoaXMuYWNjb3VudEtleSA9IEJ1ZmZlci5mcm9tKGFjY291bnRLZXksIFwiYmFzZTY0XCIpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWxQb2xpY3kgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIG5leHRQb2xpY3kgLVxuICAgICAqIEBwYXJhbSBvcHRpb25zIC1cbiAgICAgKi9cbiAgICBjcmVhdGUobmV4dFBvbGljeSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gbmV3IFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsUG9saWN5KG5leHRQb2xpY3ksIG9wdGlvbnMsIHRoaXMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZW5lcmF0ZXMgYSBoYXNoIHNpZ25hdHVyZSBmb3IgYW4gSFRUUCByZXF1ZXN0IG9yIGZvciBhIFNBUy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzdHJpbmdUb1NpZ24gLVxuICAgICAqL1xuICAgIGNvbXB1dGVITUFDU0hBMjU2KHN0cmluZ1RvU2lnbikge1xuICAgICAgICByZXR1cm4gY3J5cHRvLmNyZWF0ZUhtYWMoXCJzaGEyNTZcIiwgdGhpcy5hY2NvdW50S2V5KS51cGRhdGUoc3RyaW5nVG9TaWduLCBcInV0ZjhcIikuZGlnZXN0KFwiYmFzZTY0XCIpO1xuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIEFub255bW91c0NyZWRlbnRpYWxQb2xpY3kgaXMgdXNlZCB3aXRoIEhUVFAoUykgcmVxdWVzdHMgdGhhdCByZWFkIHB1YmxpYyByZXNvdXJjZXNcbiAqIG9yIGZvciB1c2Ugd2l0aCBTaGFyZWQgQWNjZXNzIFNpZ25hdHVyZXMgKFNBUykuXG4gKi9cbmNsYXNzIEFub255bW91c0NyZWRlbnRpYWxQb2xpY3kgZXh0ZW5kcyBDcmVkZW50aWFsUG9saWN5IHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIEFub255bW91c0NyZWRlbnRpYWxQb2xpY3kuXG4gICAgICogQHBhcmFtIG5leHRQb2xpY3kgLVxuICAgICAqIEBwYXJhbSBvcHRpb25zIC1cbiAgICAgKi9cbiAgICAvLyBUaGUgYmFzZSBjbGFzcyBoYXMgYSBwcm90ZWN0ZWQgY29uc3RydWN0b3IuIEFkZGluZyBhIHB1YmxpYyBvbmUgdG8gZW5hYmxlIGNvbnN0cnVjdGluZyBvZiB0aGlzIGNsYXNzLlxuICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlbGVzcy1jb25zdHJ1Y3RvciovXG4gICAgY29uc3RydWN0b3IobmV4dFBvbGljeSwgb3B0aW9ucykge1xuICAgICAgICBzdXBlcihuZXh0UG9saWN5LCBvcHRpb25zKTtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBBbm9ueW1vdXNDcmVkZW50aWFsIHByb3ZpZGVzIGEgY3JlZGVudGlhbFBvbGljeUNyZWF0b3IgbWVtYmVyIHVzZWQgdG8gY3JlYXRlXG4gKiBBbm9ueW1vdXNDcmVkZW50aWFsUG9saWN5IG9iamVjdHMuIEFub255bW91c0NyZWRlbnRpYWxQb2xpY3kgaXMgdXNlZCB3aXRoXG4gKiBIVFRQKFMpIHJlcXVlc3RzIHRoYXQgcmVhZCBwdWJsaWMgcmVzb3VyY2VzIG9yIGZvciB1c2Ugd2l0aCBTaGFyZWQgQWNjZXNzXG4gKiBTaWduYXR1cmVzIChTQVMpLlxuICovXG5jbGFzcyBBbm9ueW1vdXNDcmVkZW50aWFsIGV4dGVuZHMgQ3JlZGVudGlhbCB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiB7QGxpbmsgQW5vbnltb3VzQ3JlZGVudGlhbFBvbGljeX0gb2JqZWN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIG5leHRQb2xpY3kgLVxuICAgICAqIEBwYXJhbSBvcHRpb25zIC1cbiAgICAgKi9cbiAgICBjcmVhdGUobmV4dFBvbGljeSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gbmV3IEFub255bW91c0NyZWRlbnRpYWxQb2xpY3kobmV4dFBvbGljeSwgb3B0aW9ucyk7XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbmxldCBfZGVmYXVsdEh0dHBDbGllbnQ7XG5mdW5jdGlvbiBnZXRDYWNoZWREZWZhdWx0SHR0cENsaWVudCgpIHtcbiAgICBpZiAoIV9kZWZhdWx0SHR0cENsaWVudCkge1xuICAgICAgICBfZGVmYXVsdEh0dHBDbGllbnQgPSBjb3JlUmVzdFBpcGVsaW5lLmNyZWF0ZURlZmF1bHRIdHRwQ2xpZW50KCk7XG4gICAgfVxuICAgIHJldHVybiBfZGVmYXVsdEh0dHBDbGllbnQ7XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBUaGUgcHJvZ3JhbW1hdGljIGlkZW50aWZpZXIgb2YgdGhlIFN0b3JhZ2VCcm93c2VyUG9saWN5LlxuICovXG5jb25zdCBzdG9yYWdlQnJvd3NlclBvbGljeU5hbWUgPSBcInN0b3JhZ2VCcm93c2VyUG9saWN5XCI7XG4vKipcbiAqIHN0b3JhZ2VCcm93c2VyUG9saWN5IGlzIGEgcG9saWN5IHVzZWQgdG8gcHJldmVudCBicm93c2VycyBmcm9tIGNhY2hpbmcgcmVxdWVzdHNcbiAqIGFuZCB0byByZW1vdmUgY29va2llcyBhbmQgZXhwbGljaXQgY29udGVudC1sZW5ndGggaGVhZGVycy5cbiAqL1xuZnVuY3Rpb24gc3RvcmFnZUJyb3dzZXJQb2xpY3koKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogc3RvcmFnZUJyb3dzZXJQb2xpY3lOYW1lLFxuICAgICAgICBhc3luYyBzZW5kUmVxdWVzdChyZXF1ZXN0LCBuZXh0KSB7XG4gICAgICAgICAgICBpZiAoY29yZVV0aWwuaXNOb2RlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5leHQocmVxdWVzdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVxdWVzdC5tZXRob2QgPT09IFwiR0VUXCIgfHwgcmVxdWVzdC5tZXRob2QgPT09IFwiSEVBRFwiKSB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdC51cmwgPSBzZXRVUkxQYXJhbWV0ZXIocmVxdWVzdC51cmwsIFVSTENvbnN0YW50cy5QYXJhbWV0ZXJzLkZPUkNFX0JST1dTRVJfTk9fQ0FDSEUsIG5ldyBEYXRlKCkuZ2V0VGltZSgpLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVxdWVzdC5oZWFkZXJzLmRlbGV0ZShIZWFkZXJDb25zdGFudHMuQ09PS0lFKTtcbiAgICAgICAgICAgIC8vIEFjY29yZGluZyB0byBYSFIgc3RhbmRhcmRzLCBjb250ZW50LWxlbmd0aCBzaG91bGQgYmUgZnVsbHkgY29udHJvbGxlZCBieSBicm93c2Vyc1xuICAgICAgICAgICAgcmVxdWVzdC5oZWFkZXJzLmRlbGV0ZShIZWFkZXJDb25zdGFudHMuQ09OVEVOVF9MRU5HVEgpO1xuICAgICAgICAgICAgcmV0dXJuIG5leHQocmVxdWVzdCk7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIE5hbWUgb2YgdGhlIHtAbGluayBzdG9yYWdlUmV0cnlQb2xpY3l9XG4gKi9cbmNvbnN0IHN0b3JhZ2VSZXRyeVBvbGljeU5hbWUgPSBcInN0b3JhZ2VSZXRyeVBvbGljeVwiO1xuLyoqXG4gKiBSZXRyeVBvbGljeSB0eXBlcy5cbiAqL1xudmFyIFN0b3JhZ2VSZXRyeVBvbGljeVR5cGU7XG4oZnVuY3Rpb24gKFN0b3JhZ2VSZXRyeVBvbGljeVR5cGUpIHtcbiAgICAvKipcbiAgICAgKiBFeHBvbmVudGlhbCByZXRyeS4gUmV0cnkgdGltZSBkZWxheSBncm93cyBleHBvbmVudGlhbGx5LlxuICAgICAqL1xuICAgIFN0b3JhZ2VSZXRyeVBvbGljeVR5cGVbU3RvcmFnZVJldHJ5UG9saWN5VHlwZVtcIkVYUE9ORU5USUFMXCJdID0gMF0gPSBcIkVYUE9ORU5USUFMXCI7XG4gICAgLyoqXG4gICAgICogTGluZWFyIHJldHJ5LiBSZXRyeSB0aW1lIGRlbGF5IGdyb3dzIGxpbmVhcmx5LlxuICAgICAqL1xuICAgIFN0b3JhZ2VSZXRyeVBvbGljeVR5cGVbU3RvcmFnZVJldHJ5UG9saWN5VHlwZVtcIkZJWEVEXCJdID0gMV0gPSBcIkZJWEVEXCI7XG59KShTdG9yYWdlUmV0cnlQb2xpY3lUeXBlIHx8IChTdG9yYWdlUmV0cnlQb2xpY3lUeXBlID0ge30pKTtcbi8vIERlZmF1bHQgdmFsdWVzIG9mIFN0b3JhZ2VSZXRyeU9wdGlvbnNcbmNvbnN0IERFRkFVTFRfUkVUUllfT1BUSU9OUyA9IHtcbiAgICBtYXhSZXRyeURlbGF5SW5NczogMTIwICogMTAwMCxcbiAgICBtYXhUcmllczogNCxcbiAgICByZXRyeURlbGF5SW5NczogNCAqIDEwMDAsXG4gICAgcmV0cnlQb2xpY3lUeXBlOiBTdG9yYWdlUmV0cnlQb2xpY3lUeXBlLkVYUE9ORU5USUFMLFxuICAgIHNlY29uZGFyeUhvc3Q6IFwiXCIsXG4gICAgdHJ5VGltZW91dEluTXM6IHVuZGVmaW5lZCwgLy8gVXNlIHNlcnZlciBzaWRlIGRlZmF1bHQgdGltZW91dCBzdHJhdGVneVxufTtcbmNvbnN0IHJldHJpYWJsZUVycm9ycyA9IFtcbiAgICBcIkVUSU1FRE9VVFwiLFxuICAgIFwiRVNPQ0tFVFRJTUVET1VUXCIsXG4gICAgXCJFQ09OTlJFRlVTRURcIixcbiAgICBcIkVDT05OUkVTRVRcIixcbiAgICBcIkVOT0VOVFwiLFxuICAgIFwiRU5PVEZPVU5EXCIsXG4gICAgXCJUSU1FT1VUXCIsXG4gICAgXCJFUElQRVwiLFxuICAgIFwiUkVRVUVTVF9TRU5EX0VSUk9SXCIsXG5dO1xuY29uc3QgUkVUUllfQUJPUlRfRVJST1IgPSBuZXcgYWJvcnRDb250cm9sbGVyLkFib3J0RXJyb3IoXCJUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLlwiKTtcbi8qKlxuICogUmV0cnkgcG9saWN5IHdpdGggZXhwb25lbnRpYWwgcmV0cnkgYW5kIGxpbmVhciByZXRyeSBpbXBsZW1lbnRlZC5cbiAqL1xuZnVuY3Rpb24gc3RvcmFnZVJldHJ5UG9saWN5KG9wdGlvbnMgPSB7fSkge1xuICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2UsIF9mO1xuICAgIGNvbnN0IHJldHJ5UG9saWN5VHlwZSA9IChfYSA9IG9wdGlvbnMucmV0cnlQb2xpY3lUeXBlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBERUZBVUxUX1JFVFJZX09QVElPTlMucmV0cnlQb2xpY3lUeXBlO1xuICAgIGNvbnN0IG1heFRyaWVzID0gKF9iID0gb3B0aW9ucy5tYXhUcmllcykgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogREVGQVVMVF9SRVRSWV9PUFRJT05TLm1heFRyaWVzO1xuICAgIGNvbnN0IHJldHJ5RGVsYXlJbk1zID0gKF9jID0gb3B0aW9ucy5yZXRyeURlbGF5SW5NcykgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogREVGQVVMVF9SRVRSWV9PUFRJT05TLnJldHJ5RGVsYXlJbk1zO1xuICAgIGNvbnN0IG1heFJldHJ5RGVsYXlJbk1zID0gKF9kID0gb3B0aW9ucy5tYXhSZXRyeURlbGF5SW5NcykgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDogREVGQVVMVF9SRVRSWV9PUFRJT05TLm1heFJldHJ5RGVsYXlJbk1zO1xuICAgIGNvbnN0IHNlY29uZGFyeUhvc3QgPSAoX2UgPSBvcHRpb25zLnNlY29uZGFyeUhvc3QpICE9PSBudWxsICYmIF9lICE9PSB2b2lkIDAgPyBfZSA6IERFRkFVTFRfUkVUUllfT1BUSU9OUy5zZWNvbmRhcnlIb3N0O1xuICAgIGNvbnN0IHRyeVRpbWVvdXRJbk1zID0gKF9mID0gb3B0aW9ucy50cnlUaW1lb3V0SW5NcykgIT09IG51bGwgJiYgX2YgIT09IHZvaWQgMCA/IF9mIDogREVGQVVMVF9SRVRSWV9PUFRJT05TLnRyeVRpbWVvdXRJbk1zO1xuICAgIGZ1bmN0aW9uIHNob3VsZFJldHJ5KHsgaXNQcmltYXJ5UmV0cnksIGF0dGVtcHQsIHJlc3BvbnNlLCBlcnJvciwgfSkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBpZiAoYXR0ZW1wdCA+PSBtYXhUcmllcykge1xuICAgICAgICAgICAgbG9nZ2VyLmluZm8oYFJldHJ5UG9saWN5OiBBdHRlbXB0KHMpICR7YXR0ZW1wdH0gPj0gbWF4VHJpZXMgJHttYXhUcmllc30sIG5vIGZ1cnRoZXIgdHJ5LmApO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgZm9yIChjb25zdCByZXRyaWFibGVFcnJvciBvZiByZXRyaWFibGVFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IubmFtZS50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKHJldHJpYWJsZUVycm9yKSB8fFxuICAgICAgICAgICAgICAgICAgICBlcnJvci5tZXNzYWdlLnRvVXBwZXJDYXNlKCkuaW5jbHVkZXMocmV0cmlhYmxlRXJyb3IpIHx8XG4gICAgICAgICAgICAgICAgICAgIChlcnJvci5jb2RlICYmIGVycm9yLmNvZGUudG9TdHJpbmcoKS50b1VwcGVyQ2FzZSgpID09PSByZXRyaWFibGVFcnJvcikpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYFJldHJ5UG9saWN5OiBOZXR3b3JrIGVycm9yICR7cmV0cmlhYmxlRXJyb3J9IGZvdW5kLCB3aWxsIHJldHJ5LmApO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoKGVycm9yID09PSBudWxsIHx8IGVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlcnJvci5jb2RlKSA9PT0gXCJQQVJTRV9FUlJPUlwiICYmXG4gICAgICAgICAgICAgICAgKGVycm9yID09PSBudWxsIHx8IGVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlcnJvci5tZXNzYWdlLnN0YXJ0c1dpdGgoYEVycm9yIFwiRXJyb3I6IFVuY2xvc2VkIHJvb3QgdGFnYCkpKSB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oXCJSZXRyeVBvbGljeTogSW5jb21wbGV0ZSBYTUwgcmVzcG9uc2UgbGlrZWx5IGR1ZSB0byBzZXJ2aWNlIHRpbWVvdXQsIHdpbGwgcmV0cnkuXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIElmIGF0dGVtcHQgd2FzIGFnYWluc3QgdGhlIHNlY29uZGFyeSAmIGl0IHJldHVybmVkIGEgU3RhdHVzTm90Rm91bmQgKDQwNCksIHRoZW5cbiAgICAgICAgLy8gdGhlIHJlc291cmNlIHdhcyBub3QgZm91bmQuIFRoaXMgbWF5IGJlIGR1ZSB0byByZXBsaWNhdGlvbiBkZWxheS4gU28sIGluIHRoaXNcbiAgICAgICAgLy8gY2FzZSwgd2UnbGwgbmV2ZXIgdHJ5IHRoZSBzZWNvbmRhcnkgYWdhaW4gZm9yIHRoaXMgb3BlcmF0aW9uLlxuICAgICAgICBpZiAocmVzcG9uc2UgfHwgZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXR1c0NvZGUgPSAoX2IgPSAoX2EgPSByZXNwb25zZSA9PT0gbnVsbCB8fCByZXNwb25zZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogcmVzcG9uc2Uuc3RhdHVzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBlcnJvciA9PT0gbnVsbCB8fCBlcnJvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogZXJyb3Iuc3RhdHVzQ29kZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogMDtcbiAgICAgICAgICAgIGlmICghaXNQcmltYXJ5UmV0cnkgJiYgc3RhdHVzQ29kZSA9PT0gNDA0KSB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYFJldHJ5UG9saWN5OiBTZWNvbmRhcnkgYWNjZXNzIHdpdGggNDA0LCB3aWxsIHJldHJ5LmApO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU2VydmVyIGludGVybmFsIGVycm9yIG9yIHNlcnZlciB0aW1lb3V0XG4gICAgICAgICAgICBpZiAoc3RhdHVzQ29kZSA9PT0gNTAzIHx8IHN0YXR1c0NvZGUgPT09IDUwMCkge1xuICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBSZXRyeVBvbGljeTogV2lsbCByZXRyeSBmb3Igc3RhdHVzIGNvZGUgJHtzdGF0dXNDb2RlfS5gKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBbQ29weSBzb3VyY2UgZXJyb3IgY29kZV0gRmVhdHVyZSBpcyBwZW5kaW5nIG9uIHNlcnZpY2Ugc2lkZSwgc2tpcCByZXRyeSBvbiBjb3B5IHNvdXJjZSBlcnJvciBmb3Igbm93LlxuICAgICAgICAvLyBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgLy8gICAvLyBSZXRyeSBzZWxlY3QgQ29weSBTb3VyY2UgRXJyb3IgQ29kZXMuXG4gICAgICAgIC8vICAgaWYgKHJlc3BvbnNlPy5zdGF0dXMgPj0gNDAwKSB7XG4gICAgICAgIC8vICAgICBjb25zdCBjb3B5U291cmNlRXJyb3IgPSByZXNwb25zZS5oZWFkZXJzLmdldChIZWFkZXJDb25zdGFudHMuWF9NU19Db3B5U291cmNlRXJyb3JDb2RlKTtcbiAgICAgICAgLy8gICAgIGlmIChjb3B5U291cmNlRXJyb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyAgICAgICBzd2l0Y2ggKGNvcHlTb3VyY2VFcnJvcikge1xuICAgICAgICAvLyAgICAgICAgIGNhc2UgXCJJbnRlcm5hbEVycm9yXCI6XG4gICAgICAgIC8vICAgICAgICAgY2FzZSBcIk9wZXJhdGlvblRpbWVkT3V0XCI6XG4gICAgICAgIC8vICAgICAgICAgY2FzZSBcIlNlcnZlckJ1c3lcIjpcbiAgICAgICAgLy8gICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAvLyAgICAgICB9XG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vICAgfVxuICAgICAgICAvLyB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2FsY3VsYXRlRGVsYXkoaXNQcmltYXJ5UmV0cnksIGF0dGVtcHQpIHtcbiAgICAgICAgbGV0IGRlbGF5VGltZUluTXMgPSAwO1xuICAgICAgICBpZiAoaXNQcmltYXJ5UmV0cnkpIHtcbiAgICAgICAgICAgIHN3aXRjaCAocmV0cnlQb2xpY3lUeXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBTdG9yYWdlUmV0cnlQb2xpY3lUeXBlLkVYUE9ORU5USUFMOlxuICAgICAgICAgICAgICAgICAgICBkZWxheVRpbWVJbk1zID0gTWF0aC5taW4oKE1hdGgucG93KDIsIGF0dGVtcHQgLSAxKSAtIDEpICogcmV0cnlEZWxheUluTXMsIG1heFJldHJ5RGVsYXlJbk1zKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBTdG9yYWdlUmV0cnlQb2xpY3lUeXBlLkZJWEVEOlxuICAgICAgICAgICAgICAgICAgICBkZWxheVRpbWVJbk1zID0gcmV0cnlEZWxheUluTXM7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZGVsYXlUaW1lSW5NcyA9IE1hdGgucmFuZG9tKCkgKiAxMDAwO1xuICAgICAgICB9XG4gICAgICAgIGxvZ2dlci5pbmZvKGBSZXRyeVBvbGljeTogRGVsYXkgZm9yICR7ZGVsYXlUaW1lSW5Nc31tc2ApO1xuICAgICAgICByZXR1cm4gZGVsYXlUaW1lSW5NcztcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogc3RvcmFnZVJldHJ5UG9saWN5TmFtZSxcbiAgICAgICAgYXN5bmMgc2VuZFJlcXVlc3QocmVxdWVzdCwgbmV4dCkge1xuICAgICAgICAgICAgLy8gU2V0IHRoZSBzZXJ2ZXItc2lkZSB0aW1lb3V0IHF1ZXJ5IHBhcmFtZXRlciBcInRpbWVvdXQ9W3NlY29uZHNdXCJcbiAgICAgICAgICAgIGlmICh0cnlUaW1lb3V0SW5Ncykge1xuICAgICAgICAgICAgICAgIHJlcXVlc3QudXJsID0gc2V0VVJMUGFyYW1ldGVyKHJlcXVlc3QudXJsLCBVUkxDb25zdGFudHMuUGFyYW1ldGVycy5USU1FT1VULCBTdHJpbmcoTWF0aC5mbG9vcih0cnlUaW1lb3V0SW5NcyAvIDEwMDApKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwcmltYXJ5VXJsID0gcmVxdWVzdC51cmw7XG4gICAgICAgICAgICBjb25zdCBzZWNvbmRhcnlVcmwgPSBzZWNvbmRhcnlIb3N0ID8gc2V0VVJMSG9zdChyZXF1ZXN0LnVybCwgc2Vjb25kYXJ5SG9zdCkgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBsZXQgc2Vjb25kYXJ5SGFzNDA0ID0gZmFsc2U7XG4gICAgICAgICAgICBsZXQgYXR0ZW1wdCA9IDE7XG4gICAgICAgICAgICBsZXQgcmV0cnlBZ2FpbiA9IHRydWU7XG4gICAgICAgICAgICBsZXQgcmVzcG9uc2U7XG4gICAgICAgICAgICBsZXQgZXJyb3I7XG4gICAgICAgICAgICB3aGlsZSAocmV0cnlBZ2Fpbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzUHJpbWFyeVJldHJ5ID0gc2Vjb25kYXJ5SGFzNDA0IHx8XG4gICAgICAgICAgICAgICAgICAgICFzZWNvbmRhcnlVcmwgfHxcbiAgICAgICAgICAgICAgICAgICAgIVtcIkdFVFwiLCBcIkhFQURcIiwgXCJPUFRJT05TXCJdLmluY2x1ZGVzKHJlcXVlc3QubWV0aG9kKSB8fFxuICAgICAgICAgICAgICAgICAgICBhdHRlbXB0ICUgMiA9PT0gMTtcbiAgICAgICAgICAgICAgICByZXF1ZXN0LnVybCA9IGlzUHJpbWFyeVJldHJ5ID8gcHJpbWFyeVVybCA6IHNlY29uZGFyeVVybDtcbiAgICAgICAgICAgICAgICByZXNwb25zZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBlcnJvciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhgUmV0cnlQb2xpY3k6ID09PT09PiBUcnk9JHthdHRlbXB0fSAke2lzUHJpbWFyeVJldHJ5ID8gXCJQcmltYXJ5XCIgOiBcIlNlY29uZGFyeVwifWApO1xuICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IGF3YWl0IG5leHQocmVxdWVzdCk7XG4gICAgICAgICAgICAgICAgICAgIHNlY29uZGFyeUhhczQwNCA9IHNlY29uZGFyeUhhczQwNCB8fCAoIWlzUHJpbWFyeVJldHJ5ICYmIHJlc3BvbnNlLnN0YXR1cyA9PT0gNDA0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvcmVSZXN0UGlwZWxpbmUuaXNSZXN0RXJyb3IoZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihgUmV0cnlQb2xpY3k6IENhdWdodCBlcnJvciwgbWVzc2FnZTogJHtlLm1lc3NhZ2V9LCBjb2RlOiAke2UuY29kZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihgUmV0cnlQb2xpY3k6IENhdWdodCBlcnJvciwgbWVzc2FnZTogJHtjb3JlVXRpbC5nZXRFcnJvck1lc3NhZ2UoZSl9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHJ5QWdhaW4gPSBzaG91bGRSZXRyeSh7IGlzUHJpbWFyeVJldHJ5LCBhdHRlbXB0LCByZXNwb25zZSwgZXJyb3IgfSk7XG4gICAgICAgICAgICAgICAgaWYgKHJldHJ5QWdhaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZGVsYXkoY2FsY3VsYXRlRGVsYXkoaXNQcmltYXJ5UmV0cnksIGF0dGVtcHQpLCByZXF1ZXN0LmFib3J0U2lnbmFsLCBSRVRSWV9BQk9SVF9FUlJPUik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGF0dGVtcHQrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yICE9PSBudWxsICYmIGVycm9yICE9PSB2b2lkIDAgPyBlcnJvciA6IG5ldyBjb3JlUmVzdFBpcGVsaW5lLlJlc3RFcnJvcihcIlJldHJ5UG9saWN5IGZhaWxlZCB3aXRob3V0IGtub3duIGVycm9yLlwiKTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogVGhlIHByb2dyYW1tYXRpYyBpZGVudGlmaWVyIG9mIHRoZSBzdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbFBvbGljeS5cbiAqL1xuY29uc3Qgc3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWxQb2xpY3lOYW1lID0gXCJzdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbFBvbGljeVwiO1xuLyoqXG4gKiBzdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbFBvbGljeSBoYW5kbGVzIHNpZ25pbmcgcmVxdWVzdHMgdXNpbmcgc3RvcmFnZSBhY2NvdW50IGtleXMuXG4gKi9cbmZ1bmN0aW9uIHN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsUG9saWN5KG9wdGlvbnMpIHtcbiAgICBmdW5jdGlvbiBzaWduUmVxdWVzdChyZXF1ZXN0KSB7XG4gICAgICAgIHJlcXVlc3QuaGVhZGVycy5zZXQoSGVhZGVyQ29uc3RhbnRzLlhfTVNfREFURSwgbmV3IERhdGUoKS50b1VUQ1N0cmluZygpKTtcbiAgICAgICAgaWYgKHJlcXVlc3QuYm9keSAmJlxuICAgICAgICAgICAgKHR5cGVvZiByZXF1ZXN0LmJvZHkgPT09IFwic3RyaW5nXCIgfHwgQnVmZmVyLmlzQnVmZmVyKHJlcXVlc3QuYm9keSkpICYmXG4gICAgICAgICAgICByZXF1ZXN0LmJvZHkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmVxdWVzdC5oZWFkZXJzLnNldChIZWFkZXJDb25zdGFudHMuQ09OVEVOVF9MRU5HVEgsIEJ1ZmZlci5ieXRlTGVuZ3RoKHJlcXVlc3QuYm9keSkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0cmluZ1RvU2lnbiA9IFtcbiAgICAgICAgICAgIHJlcXVlc3QubWV0aG9kLnRvVXBwZXJDYXNlKCksXG4gICAgICAgICAgICBnZXRIZWFkZXJWYWx1ZVRvU2lnbihyZXF1ZXN0LCBIZWFkZXJDb25zdGFudHMuQ09OVEVOVF9MQU5HVUFHRSksXG4gICAgICAgICAgICBnZXRIZWFkZXJWYWx1ZVRvU2lnbihyZXF1ZXN0LCBIZWFkZXJDb25zdGFudHMuQ09OVEVOVF9FTkNPRElORyksXG4gICAgICAgICAgICBnZXRIZWFkZXJWYWx1ZVRvU2lnbihyZXF1ZXN0LCBIZWFkZXJDb25zdGFudHMuQ09OVEVOVF9MRU5HVEgpLFxuICAgICAgICAgICAgZ2V0SGVhZGVyVmFsdWVUb1NpZ24ocmVxdWVzdCwgSGVhZGVyQ29uc3RhbnRzLkNPTlRFTlRfTUQ1KSxcbiAgICAgICAgICAgIGdldEhlYWRlclZhbHVlVG9TaWduKHJlcXVlc3QsIEhlYWRlckNvbnN0YW50cy5DT05URU5UX1RZUEUpLFxuICAgICAgICAgICAgZ2V0SGVhZGVyVmFsdWVUb1NpZ24ocmVxdWVzdCwgSGVhZGVyQ29uc3RhbnRzLkRBVEUpLFxuICAgICAgICAgICAgZ2V0SGVhZGVyVmFsdWVUb1NpZ24ocmVxdWVzdCwgSGVhZGVyQ29uc3RhbnRzLklGX01PRElGSUVEX1NJTkNFKSxcbiAgICAgICAgICAgIGdldEhlYWRlclZhbHVlVG9TaWduKHJlcXVlc3QsIEhlYWRlckNvbnN0YW50cy5JRl9NQVRDSCksXG4gICAgICAgICAgICBnZXRIZWFkZXJWYWx1ZVRvU2lnbihyZXF1ZXN0LCBIZWFkZXJDb25zdGFudHMuSUZfTk9ORV9NQVRDSCksXG4gICAgICAgICAgICBnZXRIZWFkZXJWYWx1ZVRvU2lnbihyZXF1ZXN0LCBIZWFkZXJDb25zdGFudHMuSUZfVU5NT0RJRklFRF9TSU5DRSksXG4gICAgICAgICAgICBnZXRIZWFkZXJWYWx1ZVRvU2lnbihyZXF1ZXN0LCBIZWFkZXJDb25zdGFudHMuUkFOR0UpLFxuICAgICAgICBdLmpvaW4oXCJcXG5cIikgK1xuICAgICAgICAgICAgXCJcXG5cIiArXG4gICAgICAgICAgICBnZXRDYW5vbmljYWxpemVkSGVhZGVyc1N0cmluZyhyZXF1ZXN0KSArXG4gICAgICAgICAgICBnZXRDYW5vbmljYWxpemVkUmVzb3VyY2VTdHJpbmcocmVxdWVzdCk7XG4gICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IGNyeXB0by5jcmVhdGVIbWFjKFwic2hhMjU2XCIsIG9wdGlvbnMuYWNjb3VudEtleSlcbiAgICAgICAgICAgIC51cGRhdGUoc3RyaW5nVG9TaWduLCBcInV0ZjhcIilcbiAgICAgICAgICAgIC5kaWdlc3QoXCJiYXNlNjRcIik7XG4gICAgICAgIHJlcXVlc3QuaGVhZGVycy5zZXQoSGVhZGVyQ29uc3RhbnRzLkFVVEhPUklaQVRJT04sIGBTaGFyZWRLZXkgJHtvcHRpb25zLmFjY291bnROYW1lfToke3NpZ25hdHVyZX1gKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYFtVUkxdOiR7cmVxdWVzdC51cmx9YCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGBbSEVBREVSU106JHtyZXF1ZXN0LmhlYWRlcnMudG9TdHJpbmcoKX1gKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYFtTVFJJTkcgVE8gU0lHTl06JHtKU09OLnN0cmluZ2lmeShzdHJpbmdUb1NpZ24pfWApO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhgW0tFWV06ICR7cmVxdWVzdC5oZWFkZXJzLmdldChIZWFkZXJDb25zdGFudHMuQVVUSE9SSVpBVElPTil9YCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlIGhlYWRlciB2YWx1ZSBhY2NvcmRpbmcgdG8gc2hhcmVkIGtleSBzaWduIHJ1bGVzLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2F1dGhlbnRpY2F0ZS13aXRoLXNoYXJlZC1rZXlcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRIZWFkZXJWYWx1ZVRvU2lnbihyZXF1ZXN0LCBoZWFkZXJOYW1lKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gcmVxdWVzdC5oZWFkZXJzLmdldChoZWFkZXJOYW1lKTtcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgLy8gV2hlbiB1c2luZyB2ZXJzaW9uIDIwMTUtMDItMjEgb3IgbGF0ZXIsIGlmIENvbnRlbnQtTGVuZ3RoIGlzIHplcm8sIHRoZW5cbiAgICAgICAgLy8gc2V0IHRoZSBDb250ZW50LUxlbmd0aCBwYXJ0IG9mIHRoZSBTdHJpbmdUb1NpZ24gdG8gYW4gZW1wdHkgc3RyaW5nLlxuICAgICAgICAvLyBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvYXV0aGVudGljYXRlLXdpdGgtc2hhcmVkLWtleVxuICAgICAgICBpZiAoaGVhZGVyTmFtZSA9PT0gSGVhZGVyQ29uc3RhbnRzLkNPTlRFTlRfTEVOR1RIICYmIHZhbHVlID09PSBcIjBcIikge1xuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUbyBjb25zdHJ1Y3QgdGhlIENhbm9uaWNhbGl6ZWRIZWFkZXJzIHBvcnRpb24gb2YgdGhlIHNpZ25hdHVyZSBzdHJpbmcsIGZvbGxvdyB0aGVzZSBzdGVwczpcbiAgICAgKiAxLiBSZXRyaWV2ZSBhbGwgaGVhZGVycyBmb3IgdGhlIHJlc291cmNlIHRoYXQgYmVnaW4gd2l0aCB4LW1zLSwgaW5jbHVkaW5nIHRoZSB4LW1zLWRhdGUgaGVhZGVyLlxuICAgICAqIDIuIENvbnZlcnQgZWFjaCBIVFRQIGhlYWRlciBuYW1lIHRvIGxvd2VyY2FzZS5cbiAgICAgKiAzLiBTb3J0IHRoZSBoZWFkZXJzIGxleGljb2dyYXBoaWNhbGx5IGJ5IGhlYWRlciBuYW1lLCBpbiBhc2NlbmRpbmcgb3JkZXIuXG4gICAgICogICAgRWFjaCBoZWFkZXIgbWF5IGFwcGVhciBvbmx5IG9uY2UgaW4gdGhlIHN0cmluZy5cbiAgICAgKiA0LiBSZXBsYWNlIGFueSBsaW5lYXIgd2hpdGVzcGFjZSBpbiB0aGUgaGVhZGVyIHZhbHVlIHdpdGggYSBzaW5nbGUgc3BhY2UuXG4gICAgICogNS4gVHJpbSBhbnkgd2hpdGVzcGFjZSBhcm91bmQgdGhlIGNvbG9uIGluIHRoZSBoZWFkZXIuXG4gICAgICogNi4gRmluYWxseSwgYXBwZW5kIGEgbmV3LWxpbmUgY2hhcmFjdGVyIHRvIGVhY2ggY2Fub25pY2FsaXplZCBoZWFkZXIgaW4gdGhlIHJlc3VsdGluZyBsaXN0LlxuICAgICAqICAgIENvbnN0cnVjdCB0aGUgQ2Fub25pY2FsaXplZEhlYWRlcnMgc3RyaW5nIGJ5IGNvbmNhdGVuYXRpbmcgYWxsIGhlYWRlcnMgaW4gdGhpcyBsaXN0IGludG8gYSBzaW5nbGUgc3RyaW5nLlxuICAgICAqXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0Q2Fub25pY2FsaXplZEhlYWRlcnNTdHJpbmcocmVxdWVzdCkge1xuICAgICAgICBsZXQgaGVhZGVyc0FycmF5ID0gW107XG4gICAgICAgIGZvciAoY29uc3QgW25hbWUsIHZhbHVlXSBvZiByZXF1ZXN0LmhlYWRlcnMpIHtcbiAgICAgICAgICAgIGlmIChuYW1lLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChIZWFkZXJDb25zdGFudHMuUFJFRklYX0ZPUl9TVE9SQUdFKSkge1xuICAgICAgICAgICAgICAgIGhlYWRlcnNBcnJheS5wdXNoKHsgbmFtZSwgdmFsdWUgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaGVhZGVyc0FycmF5LnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBjb21wYXJlSGVhZGVyKGEubmFtZS50b0xvd2VyQ2FzZSgpLCBiLm5hbWUudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBSZW1vdmUgZHVwbGljYXRlIGhlYWRlcnNcbiAgICAgICAgaGVhZGVyc0FycmF5ID0gaGVhZGVyc0FycmF5LmZpbHRlcigodmFsdWUsIGluZGV4LCBhcnJheSkgPT4ge1xuICAgICAgICAgICAgaWYgKGluZGV4ID4gMCAmJiB2YWx1ZS5uYW1lLnRvTG93ZXJDYXNlKCkgPT09IGFycmF5W2luZGV4IC0gMV0ubmFtZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgY2Fub25pY2FsaXplZEhlYWRlcnNTdHJpbmdUb1NpZ24gPSBcIlwiO1xuICAgICAgICBoZWFkZXJzQXJyYXkuZm9yRWFjaCgoaGVhZGVyKSA9PiB7XG4gICAgICAgICAgICBjYW5vbmljYWxpemVkSGVhZGVyc1N0cmluZ1RvU2lnbiArPSBgJHtoZWFkZXIubmFtZVxuICAgICAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgICAgLnRyaW1SaWdodCgpfToke2hlYWRlci52YWx1ZS50cmltTGVmdCgpfVxcbmA7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gY2Fub25pY2FsaXplZEhlYWRlcnNTdHJpbmdUb1NpZ247XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldENhbm9uaWNhbGl6ZWRSZXNvdXJjZVN0cmluZyhyZXF1ZXN0KSB7XG4gICAgICAgIGNvbnN0IHBhdGggPSBnZXRVUkxQYXRoKHJlcXVlc3QudXJsKSB8fCBcIi9cIjtcbiAgICAgICAgbGV0IGNhbm9uaWNhbGl6ZWRSZXNvdXJjZVN0cmluZyA9IFwiXCI7XG4gICAgICAgIGNhbm9uaWNhbGl6ZWRSZXNvdXJjZVN0cmluZyArPSBgLyR7b3B0aW9ucy5hY2NvdW50TmFtZX0ke3BhdGh9YDtcbiAgICAgICAgY29uc3QgcXVlcmllcyA9IGdldFVSTFF1ZXJpZXMocmVxdWVzdC51cmwpO1xuICAgICAgICBjb25zdCBsb3dlcmNhc2VRdWVyaWVzID0ge307XG4gICAgICAgIGlmIChxdWVyaWVzKSB7XG4gICAgICAgICAgICBjb25zdCBxdWVyeUtleXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHF1ZXJpZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHF1ZXJpZXMsIGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbG93ZXJjYXNlS2V5ID0ga2V5LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgICAgIGxvd2VyY2FzZVF1ZXJpZXNbbG93ZXJjYXNlS2V5XSA9IHF1ZXJpZXNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgcXVlcnlLZXlzLnB1c2gobG93ZXJjYXNlS2V5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxdWVyeUtleXMuc29ydCgpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgcXVlcnlLZXlzKSB7XG4gICAgICAgICAgICAgICAgY2Fub25pY2FsaXplZFJlc291cmNlU3RyaW5nICs9IGBcXG4ke2tleX06JHtkZWNvZGVVUklDb21wb25lbnQobG93ZXJjYXNlUXVlcmllc1trZXldKX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYW5vbmljYWxpemVkUmVzb3VyY2VTdHJpbmc7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IHN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsUG9saWN5TmFtZSxcbiAgICAgICAgYXN5bmMgc2VuZFJlcXVlc3QocmVxdWVzdCwgbmV4dCkge1xuICAgICAgICAgICAgc2lnblJlcXVlc3QocmVxdWVzdCk7XG4gICAgICAgICAgICByZXR1cm4gbmV4dChyZXF1ZXN0KTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogU3RvcmFnZUJyb3dzZXJQb2xpY3kgd2lsbCBoYW5kbGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBOb2RlLmpzIGFuZCBicm93c2VyIHJ1bnRpbWUsIGluY2x1ZGluZzpcbiAqXG4gKiAxLiBCcm93c2VycyBjYWNoZSBHRVQvSEVBRCByZXF1ZXN0cyBieSBhZGRpbmcgY29uZGl0aW9uYWwgaGVhZGVycyBzdWNoIGFzICdJRl9NT0RJRklFRF9TSU5DRScuXG4gKiBTdG9yYWdlQnJvd3NlclBvbGljeSBpcyBhIHBvbGljeSB1c2VkIHRvIGFkZCBhIHRpbWVzdGFtcCBxdWVyeSB0byBHRVQvSEVBRCByZXF1ZXN0IFVSTFxuICogdGh1cyBhdm9pZCB0aGUgYnJvd3NlciBjYWNoZS5cbiAqXG4gKiAyLiBSZW1vdmUgY29va2llIGhlYWRlciBmb3Igc2VjdXJpdHlcbiAqXG4gKiAzLiBSZW1vdmUgY29udGVudC1sZW5ndGggaGVhZGVyIHRvIGF2b2lkIGJyb3dzZXJzIHdhcm5pbmdcbiAqL1xuY2xhc3MgU3RvcmFnZUJyb3dzZXJQb2xpY3kgZXh0ZW5kcyBCYXNlUmVxdWVzdFBvbGljeSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBTdG9yYWdlQnJvd3NlclBvbGljeS5cbiAgICAgKiBAcGFyYW0gbmV4dFBvbGljeSAtXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLVxuICAgICAqL1xuICAgIC8vIFRoZSBiYXNlIGNsYXNzIGhhcyBhIHByb3RlY3RlZCBjb25zdHJ1Y3Rvci4gQWRkaW5nIGEgcHVibGljIG9uZSB0byBlbmFibGUgY29uc3RydWN0aW5nIG9mIHRoaXMgY2xhc3MuXG4gICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11c2VsZXNzLWNvbnN0cnVjdG9yKi9cbiAgICBjb25zdHJ1Y3RvcihuZXh0UG9saWN5LCBvcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKG5leHRQb2xpY3ksIG9wdGlvbnMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZW5kcyBvdXQgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByZXF1ZXN0IC1cbiAgICAgKi9cbiAgICBhc3luYyBzZW5kUmVxdWVzdChyZXF1ZXN0KSB7XG4gICAgICAgIGlmIChjb3JlVXRpbC5pc05vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9uZXh0UG9saWN5LnNlbmRSZXF1ZXN0KHJlcXVlc3QpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXF1ZXN0Lm1ldGhvZC50b1VwcGVyQ2FzZSgpID09PSBcIkdFVFwiIHx8IHJlcXVlc3QubWV0aG9kLnRvVXBwZXJDYXNlKCkgPT09IFwiSEVBRFwiKSB7XG4gICAgICAgICAgICByZXF1ZXN0LnVybCA9IHNldFVSTFBhcmFtZXRlcihyZXF1ZXN0LnVybCwgVVJMQ29uc3RhbnRzLlBhcmFtZXRlcnMuRk9SQ0VfQlJPV1NFUl9OT19DQUNIRSwgbmV3IERhdGUoKS5nZXRUaW1lKCkudG9TdHJpbmcoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVxdWVzdC5oZWFkZXJzLnJlbW92ZShIZWFkZXJDb25zdGFudHMuQ09PS0lFKTtcbiAgICAgICAgLy8gQWNjb3JkaW5nIHRvIFhIUiBzdGFuZGFyZHMsIGNvbnRlbnQtbGVuZ3RoIHNob3VsZCBiZSBmdWxseSBjb250cm9sbGVkIGJ5IGJyb3dzZXJzXG4gICAgICAgIHJlcXVlc3QuaGVhZGVycy5yZW1vdmUoSGVhZGVyQ29uc3RhbnRzLkNPTlRFTlRfTEVOR1RIKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX25leHRQb2xpY3kuc2VuZFJlcXVlc3QocmVxdWVzdCk7XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogU3RvcmFnZUJyb3dzZXJQb2xpY3lGYWN0b3J5IGlzIGEgZmFjdG9yeSBjbGFzcyBoZWxwaW5nIGdlbmVyYXRpbmcgU3RvcmFnZUJyb3dzZXJQb2xpY3kgb2JqZWN0cy5cbiAqL1xuY2xhc3MgU3RvcmFnZUJyb3dzZXJQb2xpY3lGYWN0b3J5IHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgU3RvcmFnZUJyb3dzZXJQb2xpY3lGYWN0b3J5IG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBuZXh0UG9saWN5IC1cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtXG4gICAgICovXG4gICAgY3JlYXRlKG5leHRQb2xpY3ksIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTdG9yYWdlQnJvd3NlclBvbGljeShuZXh0UG9saWN5LCBvcHRpb25zKTtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBUaGUgcHJvZ3JhbW1hdGljIGlkZW50aWZpZXIgb2YgdGhlIHN0b3JhZ2VDb3JyZWN0Q29udGVudExlbmd0aFBvbGljeS5cbiAqL1xuY29uc3Qgc3RvcmFnZUNvcnJlY3RDb250ZW50TGVuZ3RoUG9saWN5TmFtZSA9IFwiU3RvcmFnZUNvcnJlY3RDb250ZW50TGVuZ3RoUG9saWN5XCI7XG4vKipcbiAqIHN0b3JhZ2VDb3JyZWN0Q29udGVudExlbmd0aFBvbGljeSB0byBjb3JyZWN0bHkgc2V0IENvbnRlbnQtTGVuZ3RoIGhlYWRlciB3aXRoIHJlcXVlc3QgYm9keSBsZW5ndGguXG4gKi9cbmZ1bmN0aW9uIHN0b3JhZ2VDb3JyZWN0Q29udGVudExlbmd0aFBvbGljeSgpIHtcbiAgICBmdW5jdGlvbiBjb3JyZWN0Q29udGVudExlbmd0aChyZXF1ZXN0KSB7XG4gICAgICAgIGlmIChyZXF1ZXN0LmJvZHkgJiZcbiAgICAgICAgICAgICh0eXBlb2YgcmVxdWVzdC5ib2R5ID09PSBcInN0cmluZ1wiIHx8IEJ1ZmZlci5pc0J1ZmZlcihyZXF1ZXN0LmJvZHkpKSAmJlxuICAgICAgICAgICAgcmVxdWVzdC5ib2R5Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJlcXVlc3QuaGVhZGVycy5zZXQoSGVhZGVyQ29uc3RhbnRzLkNPTlRFTlRfTEVOR1RILCBCdWZmZXIuYnl0ZUxlbmd0aChyZXF1ZXN0LmJvZHkpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBzdG9yYWdlQ29ycmVjdENvbnRlbnRMZW5ndGhQb2xpY3lOYW1lLFxuICAgICAgICBhc3luYyBzZW5kUmVxdWVzdChyZXF1ZXN0LCBuZXh0KSB7XG4gICAgICAgICAgICBjb3JyZWN0Q29udGVudExlbmd0aChyZXF1ZXN0KTtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KHJlcXVlc3QpO1xuICAgICAgICB9LFxuICAgIH07XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBBIGhlbHBlciB0byBkZWNpZGUgaWYgYSBnaXZlbiBhcmd1bWVudCBzYXRpc2ZpZXMgdGhlIFBpcGVsaW5lIGNvbnRyYWN0XG4gKiBAcGFyYW0gcGlwZWxpbmUgLSBBbiBhcmd1bWVudCB0aGF0IG1heSBiZSBhIFBpcGVsaW5lXG4gKiBAcmV0dXJucyB0cnVlIHdoZW4gdGhlIGFyZ3VtZW50IHNhdGlzZmllcyB0aGUgUGlwZWxpbmUgY29udHJhY3RcbiAqL1xuZnVuY3Rpb24gaXNQaXBlbGluZUxpa2UocGlwZWxpbmUpIHtcbiAgICBpZiAoIXBpcGVsaW5lIHx8IHR5cGVvZiBwaXBlbGluZSAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGNhc3RQaXBlbGluZSA9IHBpcGVsaW5lO1xuICAgIHJldHVybiAoQXJyYXkuaXNBcnJheShjYXN0UGlwZWxpbmUuZmFjdG9yaWVzKSAmJlxuICAgICAgICB0eXBlb2YgY2FzdFBpcGVsaW5lLm9wdGlvbnMgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgdHlwZW9mIGNhc3RQaXBlbGluZS50b1NlcnZpY2VDbGllbnRPcHRpb25zID09PSBcImZ1bmN0aW9uXCIpO1xufVxuLyoqXG4gKiBBIFBpcGVsaW5lIGNsYXNzIGNvbnRhaW5pbmcgSFRUUCByZXF1ZXN0IHBvbGljaWVzLlxuICogWW91IGNhbiBjcmVhdGUgYSBkZWZhdWx0IFBpcGVsaW5lIGJ5IGNhbGxpbmcge0BsaW5rIG5ld1BpcGVsaW5lfS5cbiAqIE9yIHlvdSBjYW4gY3JlYXRlIGEgUGlwZWxpbmUgd2l0aCB5b3VyIG93biBwb2xpY2llcyBieSB0aGUgY29uc3RydWN0b3Igb2YgUGlwZWxpbmUuXG4gKlxuICogUmVmZXIgdG8ge0BsaW5rIG5ld1BpcGVsaW5lfSBhbmQgcHJvdmlkZWQgcG9saWNpZXMgYmVmb3JlIGltcGxlbWVudGluZyB5b3VyXG4gKiBjdXN0b21pemVkIFBpcGVsaW5lLlxuICovXG5jbGFzcyBQaXBlbGluZSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBQaXBlbGluZS4gQ3VzdG9taXplIEhUVFBDbGllbnQgYnkgaW1wbGVtZW50aW5nIElIdHRwQ2xpZW50IGludGVyZmFjZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBmYWN0b3JpZXMgLVxuICAgICAqIEBwYXJhbSBvcHRpb25zIC1cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihmYWN0b3JpZXMsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICB0aGlzLmZhY3RvcmllcyA9IGZhY3RvcmllcztcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB9XG4gICAgLyoqXG4gICAgICogVHJhbnNmZXIgUGlwZWxpbmUgb2JqZWN0IHRvIFNlcnZpY2VDbGllbnRPcHRpb25zIG9iamVjdCB3aGljaCBpcyByZXF1aXJlZCBieVxuICAgICAqIFNlcnZpY2VDbGllbnQgY29uc3RydWN0b3IuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBUaGUgU2VydmljZUNsaWVudE9wdGlvbnMgb2JqZWN0IGZyb20gdGhpcyBQaXBlbGluZS5cbiAgICAgKi9cbiAgICB0b1NlcnZpY2VDbGllbnRPcHRpb25zKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaHR0cENsaWVudDogdGhpcy5vcHRpb25zLmh0dHBDbGllbnQsXG4gICAgICAgICAgICByZXF1ZXN0UG9saWN5RmFjdG9yaWVzOiB0aGlzLmZhY3RvcmllcyxcbiAgICAgICAgfTtcbiAgICB9XG59XG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgUGlwZWxpbmUgb2JqZWN0IHdpdGggQ3JlZGVudGlhbCBwcm92aWRlZC5cbiAqXG4gKiBAcGFyYW0gY3JlZGVudGlhbCAtICBTdWNoIGFzIEFub255bW91c0NyZWRlbnRpYWwsIFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsIG9yIGFueSBjcmVkZW50aWFsIGZyb20gdGhlIGBAYXp1cmUvaWRlbnRpdHlgIHBhY2thZ2UgdG8gYXV0aGVudGljYXRlIHJlcXVlc3RzIHRvIHRoZSBzZXJ2aWNlLiBZb3UgY2FuIGFsc28gcHJvdmlkZSBhbiBvYmplY3QgdGhhdCBpbXBsZW1lbnRzIHRoZSBUb2tlbkNyZWRlbnRpYWwgaW50ZXJmYWNlLiBJZiBub3Qgc3BlY2lmaWVkLCBBbm9ueW1vdXNDcmVkZW50aWFsIGlzIHVzZWQuXG4gKiBAcGFyYW0gcGlwZWxpbmVPcHRpb25zIC0gT3B0aW9uYWwuIE9wdGlvbnMuXG4gKiBAcmV0dXJucyBBIG5ldyBQaXBlbGluZSBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIG5ld1BpcGVsaW5lKGNyZWRlbnRpYWwsIHBpcGVsaW5lT3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKCFjcmVkZW50aWFsKSB7XG4gICAgICAgIGNyZWRlbnRpYWwgPSBuZXcgQW5vbnltb3VzQ3JlZGVudGlhbCgpO1xuICAgIH1cbiAgICBjb25zdCBwaXBlbGluZSA9IG5ldyBQaXBlbGluZShbXSwgcGlwZWxpbmVPcHRpb25zKTtcbiAgICBwaXBlbGluZS5fY3JlZGVudGlhbCA9IGNyZWRlbnRpYWw7XG4gICAgcmV0dXJuIHBpcGVsaW5lO1xufVxuZnVuY3Rpb24gcHJvY2Vzc0Rvd25sZXZlbFBpcGVsaW5lKHBpcGVsaW5lKSB7XG4gICAgY29uc3Qga25vd25GYWN0b3J5RnVuY3Rpb25zID0gW1xuICAgICAgICBpc0Fub255bW91c0NyZWRlbnRpYWwsXG4gICAgICAgIGlzU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwsXG4gICAgICAgIGlzQ29yZUh0dHBCZWFyZXJUb2tlbkZhY3RvcnksXG4gICAgICAgIGlzU3RvcmFnZUJyb3dzZXJQb2xpY3lGYWN0b3J5LFxuICAgICAgICBpc1N0b3JhZ2VSZXRyeVBvbGljeUZhY3RvcnksXG4gICAgICAgIGlzU3RvcmFnZVRlbGVtZXRyeVBvbGljeUZhY3RvcnksXG4gICAgICAgIGlzQ29yZUh0dHBQb2xpY3lGYWN0b3J5LFxuICAgIF07XG4gICAgaWYgKHBpcGVsaW5lLmZhY3Rvcmllcy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3Qgbm92ZWxGYWN0b3JpZXMgPSBwaXBlbGluZS5mYWN0b3JpZXMuZmlsdGVyKChmYWN0b3J5KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gIWtub3duRmFjdG9yeUZ1bmN0aW9ucy5zb21lKChrbm93bkZhY3RvcnkpID0+IGtub3duRmFjdG9yeShmYWN0b3J5KSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAobm92ZWxGYWN0b3JpZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBoYXNJbmplY3RvciA9IG5vdmVsRmFjdG9yaWVzLnNvbWUoKGZhY3RvcnkpID0+IGlzSW5qZWN0b3JQb2xpY3lGYWN0b3J5KGZhY3RvcnkpKTtcbiAgICAgICAgICAgIC8vIGlmIHRoZXJlIGFyZSBhbnkgbGVmdCBvdmVyLCB3cmFwIGluIGEgcmVxdWVzdFBvbGljeUZhY3RvcnlQb2xpY3lcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgd3JhcHBlZFBvbGljaWVzOiBjb3JlSHR0cENvbXBhdC5jcmVhdGVSZXF1ZXN0UG9saWN5RmFjdG9yeVBvbGljeShub3ZlbEZhY3RvcmllcyksXG4gICAgICAgICAgICAgICAgYWZ0ZXJSZXRyeTogaGFzSW5qZWN0b3IsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBnZXRDb3JlQ2xpZW50T3B0aW9ucyhwaXBlbGluZSkge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCBfYiA9IHBpcGVsaW5lLm9wdGlvbnMsIHsgaHR0cENsaWVudDogdjFDbGllbnQgfSA9IF9iLCByZXN0T3B0aW9ucyA9IHRzbGliLl9fcmVzdChfYiwgW1wiaHR0cENsaWVudFwiXSk7XG4gICAgbGV0IGh0dHBDbGllbnQgPSBwaXBlbGluZS5fY29yZUh0dHBDbGllbnQ7XG4gICAgaWYgKCFodHRwQ2xpZW50KSB7XG4gICAgICAgIGh0dHBDbGllbnQgPSB2MUNsaWVudCA/IGNvcmVIdHRwQ29tcGF0LmNvbnZlcnRIdHRwQ2xpZW50KHYxQ2xpZW50KSA6IGdldENhY2hlZERlZmF1bHRIdHRwQ2xpZW50KCk7XG4gICAgICAgIHBpcGVsaW5lLl9jb3JlSHR0cENsaWVudCA9IGh0dHBDbGllbnQ7XG4gICAgfVxuICAgIGxldCBjb3JlUGlwZWxpbmUgPSBwaXBlbGluZS5fY29yZVBpcGVsaW5lO1xuICAgIGlmICghY29yZVBpcGVsaW5lKSB7XG4gICAgICAgIGNvbnN0IHBhY2thZ2VEZXRhaWxzID0gYGF6c2RrLWpzLWF6dXJlLXN0b3JhZ2UtYmxvYi8ke1NES19WRVJTSU9OfWA7XG4gICAgICAgIGNvbnN0IHVzZXJBZ2VudFByZWZpeCA9IHJlc3RPcHRpb25zLnVzZXJBZ2VudE9wdGlvbnMgJiYgcmVzdE9wdGlvbnMudXNlckFnZW50T3B0aW9ucy51c2VyQWdlbnRQcmVmaXhcbiAgICAgICAgICAgID8gYCR7cmVzdE9wdGlvbnMudXNlckFnZW50T3B0aW9ucy51c2VyQWdlbnRQcmVmaXh9ICR7cGFja2FnZURldGFpbHN9YFxuICAgICAgICAgICAgOiBgJHtwYWNrYWdlRGV0YWlsc31gO1xuICAgICAgICBjb3JlUGlwZWxpbmUgPSBjb3JlQ2xpZW50LmNyZWF0ZUNsaWVudFBpcGVsaW5lKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcmVzdE9wdGlvbnMpLCB7IGxvZ2dpbmdPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgYWRkaXRpb25hbEFsbG93ZWRIZWFkZXJOYW1lczogU3RvcmFnZUJsb2JMb2dnaW5nQWxsb3dlZEhlYWRlck5hbWVzLFxuICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxBbGxvd2VkUXVlcnlQYXJhbWV0ZXJzOiBTdG9yYWdlQmxvYkxvZ2dpbmdBbGxvd2VkUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgICAgIGxvZ2dlcjogbG9nZ2VyLmluZm8sXG4gICAgICAgICAgICB9LCB1c2VyQWdlbnRPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgdXNlckFnZW50UHJlZml4LFxuICAgICAgICAgICAgfSwgc2VyaWFsaXphdGlvbk9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICBzdHJpbmdpZnlYTUw6IGNvcmVYbWwuc3RyaW5naWZ5WE1MLFxuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZXJPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgIHhtbDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXNlIGN1c3RvbWl6ZWQgWE1MIGNoYXIga2V5IG9mIFwiI1wiIHNvIHdlIGNhbiBkZXNlcmlhbGl6ZSBtZXRhZGF0YVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2l0aCBcIl9cIiBrZXlcbiAgICAgICAgICAgICAgICAgICAgICAgIHhtbENoYXJLZXk6IFwiI1wiLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LCBkZXNlcmlhbGl6YXRpb25PcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgcGFyc2VYTUw6IGNvcmVYbWwucGFyc2VYTUwsXG4gICAgICAgICAgICAgICAgc2VyaWFsaXplck9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgeG1sOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBVc2UgY3VzdG9taXplZCBYTUwgY2hhciBrZXkgb2YgXCIjXCIgc28gd2UgY2FuIGRlc2VyaWFsaXplIG1ldGFkYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB3aXRoIFwiX1wiIGtleVxuICAgICAgICAgICAgICAgICAgICAgICAgeG1sQ2hhcktleTogXCIjXCIsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0gfSkpO1xuICAgICAgICBjb3JlUGlwZWxpbmUucmVtb3ZlUG9saWN5KHsgcGhhc2U6IFwiUmV0cnlcIiB9KTtcbiAgICAgICAgY29yZVBpcGVsaW5lLnJlbW92ZVBvbGljeSh7IG5hbWU6IGNvcmVSZXN0UGlwZWxpbmUuZGVjb21wcmVzc1Jlc3BvbnNlUG9saWN5TmFtZSB9KTtcbiAgICAgICAgY29yZVBpcGVsaW5lLmFkZFBvbGljeShzdG9yYWdlQ29ycmVjdENvbnRlbnRMZW5ndGhQb2xpY3koKSk7XG4gICAgICAgIGNvcmVQaXBlbGluZS5hZGRQb2xpY3koc3RvcmFnZVJldHJ5UG9saWN5KHJlc3RPcHRpb25zLnJldHJ5T3B0aW9ucyksIHsgcGhhc2U6IFwiUmV0cnlcIiB9KTtcbiAgICAgICAgY29yZVBpcGVsaW5lLmFkZFBvbGljeShzdG9yYWdlQnJvd3NlclBvbGljeSgpKTtcbiAgICAgICAgY29uc3QgZG93bmxldmVsUmVzdWx0cyA9IHByb2Nlc3NEb3dubGV2ZWxQaXBlbGluZShwaXBlbGluZSk7XG4gICAgICAgIGlmIChkb3dubGV2ZWxSZXN1bHRzKSB7XG4gICAgICAgICAgICBjb3JlUGlwZWxpbmUuYWRkUG9saWN5KGRvd25sZXZlbFJlc3VsdHMud3JhcHBlZFBvbGljaWVzLCBkb3dubGV2ZWxSZXN1bHRzLmFmdGVyUmV0cnkgPyB7IGFmdGVyUGhhc2U6IFwiUmV0cnlcIiB9IDogdW5kZWZpbmVkKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjcmVkZW50aWFsID0gZ2V0Q3JlZGVudGlhbEZyb21QaXBlbGluZShwaXBlbGluZSk7XG4gICAgICAgIGlmIChjb3JlQXV0aC5pc1Rva2VuQ3JlZGVudGlhbChjcmVkZW50aWFsKSkge1xuICAgICAgICAgICAgY29yZVBpcGVsaW5lLmFkZFBvbGljeShjb3JlUmVzdFBpcGVsaW5lLmJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3koe1xuICAgICAgICAgICAgICAgIGNyZWRlbnRpYWwsXG4gICAgICAgICAgICAgICAgc2NvcGVzOiAoX2EgPSByZXN0T3B0aW9ucy5hdWRpZW5jZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogU3RvcmFnZU9BdXRoU2NvcGVzLFxuICAgICAgICAgICAgICAgIGNoYWxsZW5nZUNhbGxiYWNrczogeyBhdXRob3JpemVSZXF1ZXN0T25DaGFsbGVuZ2U6IGNvcmVDbGllbnQuYXV0aG9yaXplUmVxdWVzdE9uVGVuYW50Q2hhbGxlbmdlIH0sXG4gICAgICAgICAgICB9KSwgeyBwaGFzZTogXCJTaWduXCIgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY3JlZGVudGlhbCBpbnN0YW5jZW9mIFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsKSB7XG4gICAgICAgICAgICBjb3JlUGlwZWxpbmUuYWRkUG9saWN5KHN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsUG9saWN5KHtcbiAgICAgICAgICAgICAgICBhY2NvdW50TmFtZTogY3JlZGVudGlhbC5hY2NvdW50TmFtZSxcbiAgICAgICAgICAgICAgICBhY2NvdW50S2V5OiBjcmVkZW50aWFsLmFjY291bnRLZXksXG4gICAgICAgICAgICB9KSwgeyBwaGFzZTogXCJTaWduXCIgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcGlwZWxpbmUuX2NvcmVQaXBlbGluZSA9IGNvcmVQaXBlbGluZTtcbiAgICB9XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcmVzdE9wdGlvbnMpLCB7IGFsbG93SW5zZWN1cmVDb25uZWN0aW9uOiB0cnVlLCBodHRwQ2xpZW50LCBwaXBlbGluZTogY29yZVBpcGVsaW5lIH0pO1xufVxuZnVuY3Rpb24gZ2V0Q3JlZGVudGlhbEZyb21QaXBlbGluZShwaXBlbGluZSkge1xuICAgIC8vIHNlZSBpZiB3ZSBzcXVpcnJlbGVkIG9uZSBhd2F5IG9uIHRoZSB0eXBlIGl0c2VsZlxuICAgIGlmIChwaXBlbGluZS5fY3JlZGVudGlhbCkge1xuICAgICAgICByZXR1cm4gcGlwZWxpbmUuX2NyZWRlbnRpYWw7XG4gICAgfVxuICAgIC8vIGlmIGl0IGNhbWUgZnJvbSBhbm90aGVyIHBhY2thZ2UsIGxvb3Agb3ZlciB0aGUgZmFjdG9yaWVzIGFuZCBsb29rIGZvciBvbmUgbGlrZSBiZWZvcmVcbiAgICBsZXQgY3JlZGVudGlhbCA9IG5ldyBBbm9ueW1vdXNDcmVkZW50aWFsKCk7XG4gICAgZm9yIChjb25zdCBmYWN0b3J5IG9mIHBpcGVsaW5lLmZhY3Rvcmllcykge1xuICAgICAgICBpZiAoY29yZUF1dGguaXNUb2tlbkNyZWRlbnRpYWwoZmFjdG9yeS5jcmVkZW50aWFsKSkge1xuICAgICAgICAgICAgLy8gT25seSB3b3JrcyBpZiB0aGUgZmFjdG9yeSBoYXMgYmVlbiBhdHRhY2hlZCBhIFwiY3JlZGVudGlhbFwiIHByb3BlcnR5LlxuICAgICAgICAgICAgLy8gV2UgZG8gdGhhdCBpbiBuZXdQaXBlbGluZSgpIHdoZW4gdXNpbmcgVG9rZW5DcmVkZW50aWFsLlxuICAgICAgICAgICAgY3JlZGVudGlhbCA9IGZhY3RvcnkuY3JlZGVudGlhbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc1N0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsKGZhY3RvcnkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFjdG9yeTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY3JlZGVudGlhbDtcbn1cbmZ1bmN0aW9uIGlzU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwoZmFjdG9yeSkge1xuICAgIGlmIChmYWN0b3J5IGluc3RhbmNlb2YgU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWN0b3J5LmNvbnN0cnVjdG9yLm5hbWUgPT09IFwiU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWxcIjtcbn1cbmZ1bmN0aW9uIGlzQW5vbnltb3VzQ3JlZGVudGlhbChmYWN0b3J5KSB7XG4gICAgaWYgKGZhY3RvcnkgaW5zdGFuY2VvZiBBbm9ueW1vdXNDcmVkZW50aWFsKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFjdG9yeS5jb25zdHJ1Y3Rvci5uYW1lID09PSBcIkFub255bW91c0NyZWRlbnRpYWxcIjtcbn1cbmZ1bmN0aW9uIGlzQ29yZUh0dHBCZWFyZXJUb2tlbkZhY3RvcnkoZmFjdG9yeSkge1xuICAgIHJldHVybiBjb3JlQXV0aC5pc1Rva2VuQ3JlZGVudGlhbChmYWN0b3J5LmNyZWRlbnRpYWwpO1xufVxuZnVuY3Rpb24gaXNTdG9yYWdlQnJvd3NlclBvbGljeUZhY3RvcnkoZmFjdG9yeSkge1xuICAgIGlmIChmYWN0b3J5IGluc3RhbmNlb2YgU3RvcmFnZUJyb3dzZXJQb2xpY3lGYWN0b3J5KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFjdG9yeS5jb25zdHJ1Y3Rvci5uYW1lID09PSBcIlN0b3JhZ2VCcm93c2VyUG9saWN5RmFjdG9yeVwiO1xufVxuZnVuY3Rpb24gaXNTdG9yYWdlUmV0cnlQb2xpY3lGYWN0b3J5KGZhY3RvcnkpIHtcbiAgICBpZiAoZmFjdG9yeSBpbnN0YW5jZW9mIFN0b3JhZ2VSZXRyeVBvbGljeUZhY3RvcnkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWN0b3J5LmNvbnN0cnVjdG9yLm5hbWUgPT09IFwiU3RvcmFnZVJldHJ5UG9saWN5RmFjdG9yeVwiO1xufVxuZnVuY3Rpb24gaXNTdG9yYWdlVGVsZW1ldHJ5UG9saWN5RmFjdG9yeShmYWN0b3J5KSB7XG4gICAgcmV0dXJuIGZhY3RvcnkuY29uc3RydWN0b3IubmFtZSA9PT0gXCJUZWxlbWV0cnlQb2xpY3lGYWN0b3J5XCI7XG59XG5mdW5jdGlvbiBpc0luamVjdG9yUG9saWN5RmFjdG9yeShmYWN0b3J5KSB7XG4gICAgcmV0dXJuIGZhY3RvcnkuY29uc3RydWN0b3IubmFtZSA9PT0gXCJJbmplY3RvclBvbGljeUZhY3RvcnlcIjtcbn1cbmZ1bmN0aW9uIGlzQ29yZUh0dHBQb2xpY3lGYWN0b3J5KGZhY3RvcnkpIHtcbiAgICBjb25zdCBrbm93blBvbGljaWVzID0gW1xuICAgICAgICBcIkdlbmVyYXRlQ2xpZW50UmVxdWVzdElkUG9saWN5XCIsXG4gICAgICAgIFwiVHJhY2luZ1BvbGljeVwiLFxuICAgICAgICBcIkxvZ1BvbGljeVwiLFxuICAgICAgICBcIlByb3h5UG9saWN5XCIsXG4gICAgICAgIFwiRGlzYWJsZVJlc3BvbnNlRGVjb21wcmVzc2lvblBvbGljeVwiLFxuICAgICAgICBcIktlZXBBbGl2ZVBvbGljeVwiLFxuICAgICAgICBcIkRlc2VyaWFsaXphdGlvblBvbGljeVwiLFxuICAgIF07XG4gICAgY29uc3QgbW9ja0h0dHBDbGllbnQgPSB7XG4gICAgICAgIHNlbmRSZXF1ZXN0OiBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICByZXF1ZXN0LFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHJlcXVlc3QuaGVhZGVycy5jbG9uZSgpLFxuICAgICAgICAgICAgICAgIHN0YXR1czogNTAwLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICB9O1xuICAgIGNvbnN0IG1vY2tSZXF1ZXN0UG9saWN5T3B0aW9ucyA9IHtcbiAgICAgICAgbG9nKF9sb2dMZXZlbCwgX21lc3NhZ2UpIHtcbiAgICAgICAgICAgIC8qIGRvIG5vdGhpbmcgKi9cbiAgICAgICAgfSxcbiAgICAgICAgc2hvdWxkTG9nKF9sb2dMZXZlbCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9LFxuICAgIH07XG4gICAgY29uc3QgcG9saWN5SW5zdGFuY2UgPSBmYWN0b3J5LmNyZWF0ZShtb2NrSHR0cENsaWVudCwgbW9ja1JlcXVlc3RQb2xpY3lPcHRpb25zKTtcbiAgICBjb25zdCBwb2xpY3lOYW1lID0gcG9saWN5SW5zdGFuY2UuY29uc3RydWN0b3IubmFtZTtcbiAgICAvLyBidW5kbGVycyBzb21ldGltZXMgYWRkIGEgY3VzdG9tIHN1ZmZpeCB0byB0aGUgY2xhc3MgbmFtZSB0byBtYWtlIGl0IHVuaXF1ZVxuICAgIHJldHVybiBrbm93blBvbGljaWVzLnNvbWUoKGtub3duUG9saWN5TmFtZSkgPT4ge1xuICAgICAgICByZXR1cm4gcG9saWN5TmFtZS5zdGFydHNXaXRoKGtub3duUG9saWN5TmFtZSk7XG4gICAgfSk7XG59XG5cbi8qXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAqXG4gKiBDb2RlIGdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEF1dG9SZXN0IENvZGUgR2VuZXJhdG9yLlxuICogQ2hhbmdlcyBtYXkgY2F1c2UgaW5jb3JyZWN0IGJlaGF2aW9yIGFuZCB3aWxsIGJlIGxvc3QgaWYgdGhlIGNvZGUgaXMgcmVnZW5lcmF0ZWQuXG4gKi9cbmNvbnN0IEJsb2JTZXJ2aWNlUHJvcGVydGllcyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iU2VydmljZVByb3BlcnRpZXNcIixcbiAgICB4bWxOYW1lOiBcIlN0b3JhZ2VTZXJ2aWNlUHJvcGVydGllc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JTZXJ2aWNlUHJvcGVydGllc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGJsb2JBbmFseXRpY3NMb2dnaW5nOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTG9nZ2luZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTG9nZ2luZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIkxvZ2dpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhvdXJNZXRyaWNzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiSG91ck1ldHJpY3NcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkhvdXJNZXRyaWNzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiTWV0cmljc1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbWludXRlTWV0cmljczoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIk1pbnV0ZU1ldHJpY3NcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIk1pbnV0ZU1ldHJpY3NcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJNZXRyaWNzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3JzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ29yc1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQ29yc1wiLFxuICAgICAgICAgICAgICAgIHhtbElzV3JhcHBlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxFbGVtZW50TmFtZTogXCJDb3JzUnVsZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTZXF1ZW5jZVwiLFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiQ29yc1J1bGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZWZhdWx0U2VydmljZVZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJEZWZhdWx0U2VydmljZVZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkRlZmF1bHRTZXJ2aWNlVmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlbGV0ZVJldGVudGlvblBvbGljeToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkRlbGV0ZVJldGVudGlvblBvbGljeVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiRGVsZXRlUmV0ZW50aW9uUG9saWN5XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiUmV0ZW50aW9uUG9saWN5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdGF0aWNXZWJzaXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiU3RhdGljV2Vic2l0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiU3RhdGljV2Vic2l0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIlN0YXRpY1dlYnNpdGVcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IExvZ2dpbmcgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiTG9nZ2luZ1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkxvZ2dpbmdcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiVmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiVmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlbGV0ZVByb3BlcnR5OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRGVsZXRlXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJEZWxldGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVhZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlJlYWRcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlJlYWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgd3JpdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJXcml0ZVwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiV3JpdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmV0ZW50aW9uUG9saWN5OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiUmV0ZW50aW9uUG9saWN5XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJSZXRlbnRpb25Qb2xpY3lcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJSZXRlbnRpb25Qb2xpY3lcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFJldGVudGlvblBvbGljeSA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJSZXRlbnRpb25Qb2xpY3lcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJSZXRlbnRpb25Qb2xpY3lcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlbmFibGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRW5hYmxlZFwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiRW5hYmxlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXlzOiB7XG4gICAgICAgICAgICAgICAgY29uc3RyYWludHM6IHtcbiAgICAgICAgICAgICAgICAgICAgSW5jbHVzaXZlTWluaW11bTogMSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkRheXNcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkRheXNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBNZXRyaWNzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIk1ldHJpY3NcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJNZXRyaWNzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmFibGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRW5hYmxlZFwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiRW5hYmxlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpbmNsdWRlQVBJczoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkluY2x1ZGVBUElzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJJbmNsdWRlQVBJc1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXRlbnRpb25Qb2xpY3k6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJSZXRlbnRpb25Qb2xpY3lcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlJldGVudGlvblBvbGljeVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIlJldGVudGlvblBvbGljeVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29yc1J1bGUgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29yc1J1bGVcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb3JzUnVsZVwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGFsbG93ZWRPcmlnaW5zOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQWxsb3dlZE9yaWdpbnNcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkFsbG93ZWRPcmlnaW5zXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWxsb3dlZE1ldGhvZHM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJBbGxvd2VkTWV0aG9kc1wiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQWxsb3dlZE1ldGhvZHNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhbGxvd2VkSGVhZGVyczoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkFsbG93ZWRIZWFkZXJzXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJBbGxvd2VkSGVhZGVyc1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGV4cG9zZWRIZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRXhwb3NlZEhlYWRlcnNcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkV4cG9zZWRIZWFkZXJzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbWF4QWdlSW5TZWNvbmRzOiB7XG4gICAgICAgICAgICAgICAgY29uc3RyYWludHM6IHtcbiAgICAgICAgICAgICAgICAgICAgSW5jbHVzaXZlTWluaW11bTogMCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIk1heEFnZUluU2Vjb25kc1wiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTWF4QWdlSW5TZWNvbmRzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgU3RhdGljV2Vic2l0ZSA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJTdGF0aWNXZWJzaXRlXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiU3RhdGljV2Vic2l0ZVwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVuYWJsZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJFbmFibGVkXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJFbmFibGVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGluZGV4RG9jdW1lbnQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJJbmRleERvY3VtZW50XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJJbmRleERvY3VtZW50XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JEb2N1bWVudDQwNFBhdGg6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJFcnJvckRvY3VtZW50NDA0UGF0aFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiRXJyb3JEb2N1bWVudDQwNFBhdGhcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZWZhdWx0SW5kZXhEb2N1bWVudFBhdGg6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJEZWZhdWx0SW5kZXhEb2N1bWVudFBhdGhcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkRlZmF1bHRJbmRleERvY3VtZW50UGF0aFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFN0b3JhZ2VFcnJvciA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJTdG9yYWdlRXJyb3JcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJTdG9yYWdlRXJyb3JcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBtZXNzYWdlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTWVzc2FnZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTWVzc2FnZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJDb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJDb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYXV0aGVudGljYXRpb25FcnJvckRldGFpbDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkF1dGhlbnRpY2F0aW9uRXJyb3JEZXRhaWxcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkF1dGhlbnRpY2F0aW9uRXJyb3JEZXRhaWxcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iU2VydmljZVN0YXRpc3RpY3MgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYlNlcnZpY2VTdGF0aXN0aWNzXCIsXG4gICAgeG1sTmFtZTogXCJTdG9yYWdlU2VydmljZVN0YXRzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYlNlcnZpY2VTdGF0aXN0aWNzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZ2VvUmVwbGljYXRpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJHZW9SZXBsaWNhdGlvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiR2VvUmVwbGljYXRpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJHZW9SZXBsaWNhdGlvblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgR2VvUmVwbGljYXRpb24gPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiR2VvUmVwbGljYXRpb25cIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJHZW9SZXBsaWNhdGlvblwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHN0YXR1czoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiU3RhdHVzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wibGl2ZVwiLCBcImJvb3RzdHJhcFwiLCBcInVuYXZhaWxhYmxlXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdFN5bmNPbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkxhc3RTeW5jVGltZVwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTGFzdFN5bmNUaW1lXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgTGlzdENvbnRhaW5lcnNTZWdtZW50UmVzcG9uc2UgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiTGlzdENvbnRhaW5lcnNTZWdtZW50UmVzcG9uc2VcIixcbiAgICB4bWxOYW1lOiBcIkVudW1lcmF0aW9uUmVzdWx0c1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkxpc3RDb250YWluZXJzU2VnbWVudFJlc3BvbnNlXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgc2VydmljZUVuZHBvaW50OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiU2VydmljZUVuZHBvaW50XCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJTZXJ2aWNlRW5kcG9pbnRcIixcbiAgICAgICAgICAgICAgICB4bWxJc0F0dHJpYnV0ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcmVmaXg6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJQcmVmaXhcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlByZWZpeFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1hcmtlcjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIk1hcmtlclwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTWFya2VyXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbWF4UGFnZVNpemU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJNYXhSZXN1bHRzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJNYXhSZXN1bHRzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGFpbmVySXRlbXM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJJdGVtc1wiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQ29udGFpbmVyc1wiLFxuICAgICAgICAgICAgICAgIHhtbElzV3JhcHBlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxFbGVtZW50TmFtZTogXCJDb250YWluZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU2VxdWVuY2VcIixcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lckl0ZW1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250aW51YXRpb25Ub2tlbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIk5leHRNYXJrZXJcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIk5leHRNYXJrZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJJdGVtID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lckl0ZW1cIixcbiAgICB4bWxOYW1lOiBcIkNvbnRhaW5lclwiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lckl0ZW1cIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBuYW1lOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTmFtZVwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTmFtZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlbGV0ZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJEZWxldGVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJEZWxldGVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJWZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJWZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlByb3BlcnRpZXNcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlByb3BlcnRpZXNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJQcm9wZXJ0aWVzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIk1ldGFkYXRhXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJNZXRhZGF0YVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEaWN0aW9uYXJ5XCIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB7IHR5cGU6IHsgbmFtZTogXCJTdHJpbmdcIiB9IH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJQcm9wZXJ0aWVzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lclByb3BlcnRpZXNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJQcm9wZXJ0aWVzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTGFzdC1Nb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTGFzdC1Nb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJFdGFnXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJFdGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVhc2VTdGF0dXM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJMZWFzZVN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTGVhc2VTdGF0dXNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJsb2NrZWRcIiwgXCJ1bmxvY2tlZFwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlYXNlU3RhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJMZWFzZVN0YXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJMZWFzZVN0YXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJhdmFpbGFibGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibGVhc2VkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImV4cGlyZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYnJlYWtpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYnJva2VuXCIsXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZWFzZUR1cmF0aW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTGVhc2VEdXJhdGlvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTGVhc2VEdXJhdGlvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcImluZmluaXRlXCIsIFwiZml4ZWRcIl0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwdWJsaWNBY2Nlc3M6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJQdWJsaWNBY2Nlc3NcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlB1YmxpY0FjY2Vzc1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcImNvbnRhaW5lclwiLCBcImJsb2JcIl0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBoYXNJbW11dGFiaWxpdHlQb2xpY3k6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJIYXNJbW11dGFiaWxpdHlQb2xpY3lcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkhhc0ltbXV0YWJpbGl0eVBvbGljeVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBoYXNMZWdhbEhvbGQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJIYXNMZWdhbEhvbGRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkhhc0xlZ2FsSG9sZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZWZhdWx0RW5jcnlwdGlvblNjb3BlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRGVmYXVsdEVuY3J5cHRpb25TY29wZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiRGVmYXVsdEVuY3J5cHRpb25TY29wZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByZXZlbnRFbmNyeXB0aW9uU2NvcGVPdmVycmlkZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkRlbnlFbmNyeXB0aW9uU2NvcGVPdmVycmlkZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiRGVueUVuY3J5cHRpb25TY29wZU92ZXJyaWRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlbGV0ZWRPbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkRlbGV0ZWRUaW1lXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJEZWxldGVkVGltZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlbWFpbmluZ1JldGVudGlvbkRheXM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJSZW1haW5pbmdSZXRlbnRpb25EYXlzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJSZW1haW5pbmdSZXRlbnRpb25EYXlzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNJbW11dGFibGVTdG9yYWdlV2l0aFZlcnNpb25pbmdFbmFibGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiSW1tdXRhYmxlU3RvcmFnZVdpdGhWZXJzaW9uaW5nRW5hYmxlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiSW1tdXRhYmxlU3RvcmFnZVdpdGhWZXJzaW9uaW5nRW5hYmxlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBLZXlJbmZvID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIktleUluZm9cIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJLZXlJbmZvXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgc3RhcnRzT246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJTdGFydFwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiU3RhcnRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBleHBpcmVzT246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJFeHBpcnlcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkV4cGlyeVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFVzZXJEZWxlZ2F0aW9uS2V5ID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlVzZXJEZWxlZ2F0aW9uS2V5XCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiVXNlckRlbGVnYXRpb25LZXlcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBzaWduZWRPYmplY3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNpZ25lZE9pZFwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiU2lnbmVkT2lkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2lnbmVkVGVuYW50SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJTaWduZWRUaWRcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlNpZ25lZFRpZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNpZ25lZFN0YXJ0c09uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiU2lnbmVkU3RhcnRcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlNpZ25lZFN0YXJ0XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2lnbmVkRXhwaXJlc09uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiU2lnbmVkRXhwaXJ5XCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJTaWduZWRFeHBpcnlcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzaWduZWRTZXJ2aWNlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiU2lnbmVkU2VydmljZVwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiU2lnbmVkU2VydmljZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNpZ25lZFZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJTaWduZWRWZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJTaWduZWRWZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJWYWx1ZVwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiVmFsdWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBGaWx0ZXJCbG9iU2VnbWVudCA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJGaWx0ZXJCbG9iU2VnbWVudFwiLFxuICAgIHhtbE5hbWU6IFwiRW51bWVyYXRpb25SZXN1bHRzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiRmlsdGVyQmxvYlNlZ21lbnRcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBzZXJ2aWNlRW5kcG9pbnQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJTZXJ2aWNlRW5kcG9pbnRcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlNlcnZpY2VFbmRwb2ludFwiLFxuICAgICAgICAgICAgICAgIHhtbElzQXR0cmlidXRlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHdoZXJlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiV2hlcmVcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIldoZXJlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmxvYnM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9ic1wiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQmxvYnNcIixcbiAgICAgICAgICAgICAgICB4bWxJc1dyYXBwZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sRWxlbWVudE5hbWU6IFwiQmxvYlwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTZXF1ZW5jZVwiLFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiRmlsdGVyQmxvYkl0ZW1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250aW51YXRpb25Ub2tlbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIk5leHRNYXJrZXJcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIk5leHRNYXJrZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBGaWx0ZXJCbG9iSXRlbSA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJGaWx0ZXJCbG9iSXRlbVwiLFxuICAgIHhtbE5hbWU6IFwiQmxvYlwiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkZpbHRlckJsb2JJdGVtXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgbmFtZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIk5hbWVcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIk5hbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250YWluZXJOYW1lOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyTmFtZVwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQ29udGFpbmVyTmFtZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRhZ3M6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJUYWdzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJUYWdzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiQmxvYlRhZ3NcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JUYWdzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JUYWdzXCIsXG4gICAgeG1sTmFtZTogXCJUYWdzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYlRhZ3NcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBibG9iVGFnU2V0OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYlRhZ1NldFwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiVGFnU2V0XCIsXG4gICAgICAgICAgICAgICAgeG1sSXNXcmFwcGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbEVsZW1lbnROYW1lOiBcIlRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTZXF1ZW5jZVwiLFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiQmxvYlRhZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JUYWcgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYlRhZ1wiLFxuICAgIHhtbE5hbWU6IFwiVGFnXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYlRhZ1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGtleToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIktleVwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiS2V5XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJWYWx1ZVwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiVmFsdWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBTaWduZWRJZGVudGlmaWVyID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNpZ25lZElkZW50aWZpZXJcIixcbiAgICB4bWxOYW1lOiBcIlNpZ25lZElkZW50aWZpZXJcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJTaWduZWRJZGVudGlmaWVyXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgaWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJJZFwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiSWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhY2Nlc3NQb2xpY3k6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJBY2Nlc3NQb2xpY3lcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkFjY2Vzc1BvbGljeVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIkFjY2Vzc1BvbGljeVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQWNjZXNzUG9saWN5ID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkFjY2Vzc1BvbGljeVwiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkFjY2Vzc1BvbGljeVwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHN0YXJ0c09uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiU3RhcnRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlN0YXJ0XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXhwaXJlc09uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRXhwaXJ5XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJFeHBpcnlcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwZXJtaXNzaW9uczoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlBlcm1pc3Npb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlBlcm1pc3Npb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBMaXN0QmxvYnNGbGF0U2VnbWVudFJlc3BvbnNlID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkxpc3RCbG9ic0ZsYXRTZWdtZW50UmVzcG9uc2VcIixcbiAgICB4bWxOYW1lOiBcIkVudW1lcmF0aW9uUmVzdWx0c1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkxpc3RCbG9ic0ZsYXRTZWdtZW50UmVzcG9uc2VcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBzZXJ2aWNlRW5kcG9pbnQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJTZXJ2aWNlRW5kcG9pbnRcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlNlcnZpY2VFbmRwb2ludFwiLFxuICAgICAgICAgICAgICAgIHhtbElzQXR0cmlidXRlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRhaW5lck5hbWU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJOYW1lXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJDb250YWluZXJOYW1lXCIsXG4gICAgICAgICAgICAgICAgeG1sSXNBdHRyaWJ1dGU6IHRydWUsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJlZml4OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiUHJlZml4XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJQcmVmaXhcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtYXJrZXI6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJNYXJrZXJcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIk1hcmtlclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1heFBhZ2VTaXplOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTWF4UmVzdWx0c1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTWF4UmVzdWx0c1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNlZ21lbnQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJTZWdtZW50XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJCbG9ic1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JGbGF0TGlzdFNlZ21lbnRcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRpbnVhdGlvblRva2VuOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTmV4dE1hcmtlclwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTmV4dE1hcmtlclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JGbGF0TGlzdFNlZ21lbnQgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYkZsYXRMaXN0U2VnbWVudFwiLFxuICAgIHhtbE5hbWU6IFwiQmxvYnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iRmxhdExpc3RTZWdtZW50XCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgYmxvYkl0ZW1zOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYkl0ZW1zXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJCbG9iSXRlbXNcIixcbiAgICAgICAgICAgICAgICB4bWxFbGVtZW50TmFtZTogXCJCbG9iXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlNlcXVlbmNlXCIsXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJCbG9iSXRlbUludGVybmFsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYkl0ZW1JbnRlcm5hbCA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iSXRlbUludGVybmFsXCIsXG4gICAgeG1sTmFtZTogXCJCbG9iXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYkl0ZW1JbnRlcm5hbFwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIG5hbWU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJOYW1lXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJOYW1lXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiQmxvYk5hbWVcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlbGV0ZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJEZWxldGVkXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJEZWxldGVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNuYXBzaG90OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiU25hcHNob3RcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlNuYXBzaG90XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbklkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiVmVyc2lvbklkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJWZXJzaW9uSWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc0N1cnJlbnRWZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiSXNDdXJyZW50VmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiSXNDdXJyZW50VmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiUHJvcGVydGllc1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiUHJvcGVydGllc1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JQcm9wZXJ0aWVzSW50ZXJuYWxcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTWV0YWRhdGFcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIk1ldGFkYXRhXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRpY3Rpb25hcnlcIixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHsgdHlwZTogeyBuYW1lOiBcIlN0cmluZ1wiIH0gfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JUYWdzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYlRhZ3NcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlRhZ3NcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJCbG9iVGFnc1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb2JqZWN0UmVwbGljYXRpb25NZXRhZGF0YToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIk9iamVjdFJlcGxpY2F0aW9uTWV0YWRhdGFcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIk9yTWV0YWRhdGFcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGljdGlvbmFyeVwiLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogeyB0eXBlOiB7IG5hbWU6IFwiU3RyaW5nXCIgfSB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaGFzVmVyc2lvbnNPbmx5OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiSGFzVmVyc2lvbnNPbmx5XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJIYXNWZXJzaW9uc09ubHlcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYk5hbWUgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYk5hbWVcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iTmFtZVwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVuY29kZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJFbmNvZGVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJFbmNvZGVkXCIsXG4gICAgICAgICAgICAgICAgeG1sSXNBdHRyaWJ1dGU6IHRydWUsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50XCIsXG4gICAgICAgICAgICAgICAgeG1sSXNNc1RleHQ6IHRydWUsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlByb3BlcnRpZXNJbnRlcm5hbCA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iUHJvcGVydGllc0ludGVybmFsXCIsXG4gICAgeG1sTmFtZTogXCJQcm9wZXJ0aWVzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYlByb3BlcnRpZXNJbnRlcm5hbFwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNyZWF0ZWRPbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNyZWF0aW9uLVRpbWVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkNyZWF0aW9uLVRpbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJMYXN0LU1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJMYXN0LU1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkV0YWdcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50TGVuZ3RoOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGVudC1MZW5ndGhcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkNvbnRlbnQtTGVuZ3RoXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudFR5cGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJDb250ZW50LVR5cGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkNvbnRlbnQtVHlwZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnRFbmNvZGluZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRlbnQtRW5jb2RpbmdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkNvbnRlbnQtRW5jb2RpbmdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50TGFuZ3VhZ2U6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJDb250ZW50LUxhbmd1YWdlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJDb250ZW50LUxhbmd1YWdlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudE1ENToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRlbnQtTUQ1XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJDb250ZW50LU1ENVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnREaXNwb3NpdGlvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRlbnQtRGlzcG9zaXRpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkNvbnRlbnQtRGlzcG9zaXRpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjYWNoZUNvbnRyb2w6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJDYWNoZS1Db250cm9sXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJDYWNoZS1Db250cm9sXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmxvYlNlcXVlbmNlTnVtYmVyOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLXNlcXVlbmNlLW51bWJlclwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLXNlcXVlbmNlLW51bWJlclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JUeXBlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYlR5cGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkJsb2JUeXBlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wiQmxvY2tCbG9iXCIsIFwiUGFnZUJsb2JcIiwgXCJBcHBlbmRCbG9iXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVhc2VTdGF0dXM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJMZWFzZVN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTGVhc2VTdGF0dXNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJsb2NrZWRcIiwgXCJ1bmxvY2tlZFwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlYXNlU3RhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJMZWFzZVN0YXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJMZWFzZVN0YXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJhdmFpbGFibGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibGVhc2VkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImV4cGlyZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYnJlYWtpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYnJva2VuXCIsXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZWFzZUR1cmF0aW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTGVhc2VEdXJhdGlvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTGVhc2VEdXJhdGlvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcImluZmluaXRlXCIsIFwiZml4ZWRcIl0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3B5SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJDb3B5SWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkNvcHlJZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvcHlTdGF0dXM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJDb3B5U3RhdHVzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJDb3B5U3RhdHVzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wicGVuZGluZ1wiLCBcInN1Y2Nlc3NcIiwgXCJhYm9ydGVkXCIsIFwiZmFpbGVkXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29weVNvdXJjZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvcHlTb3VyY2VcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkNvcHlTb3VyY2VcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3B5UHJvZ3Jlc3M6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJDb3B5UHJvZ3Jlc3NcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkNvcHlQcm9ncmVzc1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvcHlDb21wbGV0ZWRPbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvcHlDb21wbGV0aW9uVGltZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQ29weUNvbXBsZXRpb25UaW1lXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29weVN0YXR1c0Rlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ29weVN0YXR1c0Rlc2NyaXB0aW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJDb3B5U3RhdHVzRGVzY3JpcHRpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXJ2ZXJFbmNyeXB0ZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJTZXJ2ZXJFbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlNlcnZlckVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpbmNyZW1lbnRhbENvcHk6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJJbmNyZW1lbnRhbENvcHlcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkluY3JlbWVudGFsQ29weVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZXN0aW5hdGlvblNuYXBzaG90OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRGVzdGluYXRpb25TbmFwc2hvdFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiRGVzdGluYXRpb25TbmFwc2hvdFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlbGV0ZWRPbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkRlbGV0ZWRUaW1lXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJEZWxldGVkVGltZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlbWFpbmluZ1JldGVudGlvbkRheXM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJSZW1haW5pbmdSZXRlbnRpb25EYXlzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJSZW1haW5pbmdSZXRlbnRpb25EYXlzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWNjZXNzVGllcjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkFjY2Vzc1RpZXJcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkFjY2Vzc1RpZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlA0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlA2XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlAxMFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJQMTVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiUDIwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlAzMFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJQNDBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiUDUwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlA2MFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJQNzBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiUDgwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkhvdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJDb29sXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkFyY2hpdmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiQ29sZFwiLFxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWNjZXNzVGllckluZmVycmVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQWNjZXNzVGllckluZmVycmVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJBY2Nlc3NUaWVySW5mZXJyZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYXJjaGl2ZVN0YXR1czoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkFyY2hpdmVTdGF0dXNcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkFyY2hpdmVTdGF0dXNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICBcInJlaHlkcmF0ZS1wZW5kaW5nLXRvLWhvdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJyZWh5ZHJhdGUtcGVuZGluZy10by1jb29sXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInJlaHlkcmF0ZS1wZW5kaW5nLXRvLWNvbGRcIixcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGN1c3RvbWVyUHJvdmlkZWRLZXlTaGEyNTY6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJDdXN0b21lclByb3ZpZGVkS2V5U2hhMjU2XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJDdXN0b21lclByb3ZpZGVkS2V5U2hhMjU2XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRW5jcnlwdGlvblNjb3BlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJFbmNyeXB0aW9uU2NvcGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhY2Nlc3NUaWVyQ2hhbmdlZE9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQWNjZXNzVGllckNoYW5nZVRpbWVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkFjY2Vzc1RpZXJDaGFuZ2VUaW1lXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGFnQ291bnQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJUYWdDb3VudFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiVGFnQ291bnRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBleHBpcmVzT246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJFeHBpcnktVGltZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiRXhwaXJ5LVRpbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc1NlYWxlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNlYWxlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiU2VhbGVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlaHlkcmF0ZVByaW9yaXR5OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiUmVoeWRyYXRlUHJpb3JpdHlcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlJlaHlkcmF0ZVByaW9yaXR5XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wiSGlnaFwiLCBcIlN0YW5kYXJkXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdEFjY2Vzc2VkT246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJMYXN0QWNjZXNzVGltZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTGFzdEFjY2Vzc1RpbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpbW11dGFiaWxpdHlQb2xpY3lFeHBpcmVzT246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJJbW11dGFiaWxpdHlQb2xpY3lVbnRpbERhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkltbXV0YWJpbGl0eVBvbGljeVVudGlsRGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGltbXV0YWJpbGl0eVBvbGljeU1vZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJJbW11dGFiaWxpdHlQb2xpY3lNb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJJbW11dGFiaWxpdHlQb2xpY3lNb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wiTXV0YWJsZVwiLCBcIlVubG9ja2VkXCIsIFwiTG9ja2VkXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVnYWxIb2xkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTGVnYWxIb2xkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJMZWdhbEhvbGRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgTGlzdEJsb2JzSGllcmFyY2h5U2VnbWVudFJlc3BvbnNlID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkxpc3RCbG9ic0hpZXJhcmNoeVNlZ21lbnRSZXNwb25zZVwiLFxuICAgIHhtbE5hbWU6IFwiRW51bWVyYXRpb25SZXN1bHRzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiTGlzdEJsb2JzSGllcmFyY2h5U2VnbWVudFJlc3BvbnNlXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgc2VydmljZUVuZHBvaW50OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiU2VydmljZUVuZHBvaW50XCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJTZXJ2aWNlRW5kcG9pbnRcIixcbiAgICAgICAgICAgICAgICB4bWxJc0F0dHJpYnV0ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250YWluZXJOYW1lOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyTmFtZVwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQ29udGFpbmVyTmFtZVwiLFxuICAgICAgICAgICAgICAgIHhtbElzQXR0cmlidXRlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByZWZpeDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlByZWZpeFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiUHJlZml4XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbWFya2VyOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTWFya2VyXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJNYXJrZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtYXhQYWdlU2l6ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIk1heFJlc3VsdHNcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIk1heFJlc3VsdHNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZWxpbWl0ZXI6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJEZWxpbWl0ZXJcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkRlbGltaXRlclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNlZ21lbnQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJTZWdtZW50XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJCbG9ic1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JIaWVyYXJjaHlMaXN0U2VnbWVudFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGludWF0aW9uVG9rZW46IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJOZXh0TWFya2VyXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJOZXh0TWFya2VyXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYkhpZXJhcmNoeUxpc3RTZWdtZW50ID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JIaWVyYXJjaHlMaXN0U2VnbWVudFwiLFxuICAgIHhtbE5hbWU6IFwiQmxvYnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iSGllcmFyY2h5TGlzdFNlZ21lbnRcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBibG9iUHJlZml4ZXM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iUHJlZml4ZXNcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkJsb2JQcmVmaXhlc1wiLFxuICAgICAgICAgICAgICAgIHhtbEVsZW1lbnROYW1lOiBcIkJsb2JQcmVmaXhcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU2VxdWVuY2VcIixcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JQcmVmaXhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBibG9iSXRlbXM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iSXRlbXNcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkJsb2JJdGVtc1wiLFxuICAgICAgICAgICAgICAgIHhtbEVsZW1lbnROYW1lOiBcIkJsb2JcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU2VxdWVuY2VcIixcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JJdGVtSW50ZXJuYWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iUHJlZml4ID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JQcmVmaXhcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iUHJlZml4XCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgbmFtZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIk5hbWVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIk5hbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJCbG9iTmFtZVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvY2tMb29rdXBMaXN0ID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2NrTG9va3VwTGlzdFwiLFxuICAgIHhtbE5hbWU6IFwiQmxvY2tMaXN0XCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvY2tMb29rdXBMaXN0XCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgY29tbWl0dGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ29tbWl0dGVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJDb21taXR0ZWRcIixcbiAgICAgICAgICAgICAgICB4bWxFbGVtZW50TmFtZTogXCJDb21taXR0ZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU2VxdWVuY2VcIixcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdW5jb21taXR0ZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJVbmNvbW1pdHRlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiVW5jb21taXR0ZWRcIixcbiAgICAgICAgICAgICAgICB4bWxFbGVtZW50TmFtZTogXCJVbmNvbW1pdHRlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTZXF1ZW5jZVwiLFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXRlc3Q6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJMYXRlc3RcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkxhdGVzdFwiLFxuICAgICAgICAgICAgICAgIHhtbEVsZW1lbnROYW1lOiBcIkxhdGVzdFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTZXF1ZW5jZVwiLFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9ja0xpc3QgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvY2tMaXN0XCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvY2tMaXN0XCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgY29tbWl0dGVkQmxvY2tzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ29tbWl0dGVkQmxvY2tzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJDb21taXR0ZWRCbG9ja3NcIixcbiAgICAgICAgICAgICAgICB4bWxJc1dyYXBwZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sRWxlbWVudE5hbWU6IFwiQmxvY2tcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU2VxdWVuY2VcIixcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2NrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdW5jb21taXR0ZWRCbG9ja3M6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJVbmNvbW1pdHRlZEJsb2Nrc1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiVW5jb21taXR0ZWRCbG9ja3NcIixcbiAgICAgICAgICAgICAgICB4bWxJc1dyYXBwZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sRWxlbWVudE5hbWU6IFwiQmxvY2tcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU2VxdWVuY2VcIixcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2NrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvY2sgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvY2tcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9ja1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIG5hbWU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJOYW1lXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJOYW1lXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2l6ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNpemVcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlNpemVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBQYWdlTGlzdCA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJQYWdlTGlzdFwiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlBhZ2VMaXN0XCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgcGFnZVJhbmdlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiUGFnZVJhbmdlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJQYWdlUmFuZ2VcIixcbiAgICAgICAgICAgICAgICB4bWxFbGVtZW50TmFtZTogXCJQYWdlUmFuZ2VcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU2VxdWVuY2VcIixcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIlBhZ2VSYW5nZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsZWFyUmFuZ2U6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJDbGVhclJhbmdlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJDbGVhclJhbmdlXCIsXG4gICAgICAgICAgICAgICAgeG1sRWxlbWVudE5hbWU6IFwiQ2xlYXJSYW5nZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTZXF1ZW5jZVwiLFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiQ2xlYXJSYW5nZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRpbnVhdGlvblRva2VuOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTmV4dE1hcmtlclwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTmV4dE1hcmtlclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFBhZ2VSYW5nZSA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJQYWdlUmFuZ2VcIixcbiAgICB4bWxOYW1lOiBcIlBhZ2VSYW5nZVwiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlBhZ2VSYW5nZVwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHN0YXJ0OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiU3RhcnRcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlN0YXJ0XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5kOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRW5kXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJFbmRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDbGVhclJhbmdlID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNsZWFyUmFuZ2VcIixcbiAgICB4bWxOYW1lOiBcIkNsZWFyUmFuZ2VcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDbGVhclJhbmdlXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgc3RhcnQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJTdGFydFwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiU3RhcnRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJFbmRcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkVuZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFF1ZXJ5UmVxdWVzdCA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJRdWVyeVJlcXVlc3RcIixcbiAgICB4bWxOYW1lOiBcIlF1ZXJ5UmVxdWVzdFwiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlF1ZXJ5UmVxdWVzdFwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHF1ZXJ5VHlwZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlF1ZXJ5VHlwZVwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiUXVlcnlUeXBlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXhwcmVzc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkV4cHJlc3Npb25cIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkV4cHJlc3Npb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpbnB1dFNlcmlhbGl6YXRpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJJbnB1dFNlcmlhbGl6YXRpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIklucHV0U2VyaWFsaXphdGlvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIlF1ZXJ5U2VyaWFsaXphdGlvblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb3V0cHV0U2VyaWFsaXphdGlvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIk91dHB1dFNlcmlhbGl6YXRpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIk91dHB1dFNlcmlhbGl6YXRpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJRdWVyeVNlcmlhbGl6YXRpb25cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFF1ZXJ5U2VyaWFsaXphdGlvbiA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJRdWVyeVNlcmlhbGl6YXRpb25cIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJRdWVyeVNlcmlhbGl6YXRpb25cIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBmb3JtYXQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJGb3JtYXRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkZvcm1hdFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIlF1ZXJ5Rm9ybWF0XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBRdWVyeUZvcm1hdCA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJRdWVyeUZvcm1hdFwiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlF1ZXJ5Rm9ybWF0XCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlR5cGVcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlR5cGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJkZWxpbWl0ZWRcIiwgXCJqc29uXCIsIFwiYXJyb3dcIiwgXCJwYXJxdWV0XCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVsaW1pdGVkVGV4dENvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJEZWxpbWl0ZWRUZXh0Q29uZmlndXJhdGlvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiRGVsaW1pdGVkVGV4dENvbmZpZ3VyYXRpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJEZWxpbWl0ZWRUZXh0Q29uZmlndXJhdGlvblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAganNvblRleHRDb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiSnNvblRleHRDb25maWd1cmF0aW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJKc29uVGV4dENvbmZpZ3VyYXRpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJKc29uVGV4dENvbmZpZ3VyYXRpb25cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFycm93Q29uZmlndXJhdGlvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkFycm93Q29uZmlndXJhdGlvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQXJyb3dDb25maWd1cmF0aW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiQXJyb3dDb25maWd1cmF0aW9uXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwYXJxdWV0VGV4dENvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJQYXJxdWV0VGV4dENvbmZpZ3VyYXRpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlBhcnF1ZXRUZXh0Q29uZmlndXJhdGlvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEaWN0aW9uYXJ5XCIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB7IHR5cGU6IHsgbmFtZTogXCJhbnlcIiB9IH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBEZWxpbWl0ZWRUZXh0Q29uZmlndXJhdGlvbiA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJEZWxpbWl0ZWRUZXh0Q29uZmlndXJhdGlvblwiLFxuICAgIHhtbE5hbWU6IFwiRGVsaW1pdGVkVGV4dENvbmZpZ3VyYXRpb25cIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJEZWxpbWl0ZWRUZXh0Q29uZmlndXJhdGlvblwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNvbHVtblNlcGFyYXRvcjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbHVtblNlcGFyYXRvclwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQ29sdW1uU2VwYXJhdG9yXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZmllbGRRdW90ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkZpZWxkUXVvdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkZpZWxkUXVvdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZWNvcmRTZXBhcmF0b3I6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJSZWNvcmRTZXBhcmF0b3JcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlJlY29yZFNlcGFyYXRvclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVzY2FwZUNoYXI6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJFc2NhcGVDaGFyXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJFc2NhcGVDaGFyXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaGVhZGVyc1ByZXNlbnQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJIZWFkZXJzUHJlc2VudFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiSGFzSGVhZGVyc1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBKc29uVGV4dENvbmZpZ3VyYXRpb24gPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiSnNvblRleHRDb25maWd1cmF0aW9uXCIsXG4gICAgeG1sTmFtZTogXCJKc29uVGV4dENvbmZpZ3VyYXRpb25cIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJKc29uVGV4dENvbmZpZ3VyYXRpb25cIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICByZWNvcmRTZXBhcmF0b3I6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJSZWNvcmRTZXBhcmF0b3JcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlJlY29yZFNlcGFyYXRvclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEFycm93Q29uZmlndXJhdGlvbiA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJBcnJvd0NvbmZpZ3VyYXRpb25cIixcbiAgICB4bWxOYW1lOiBcIkFycm93Q29uZmlndXJhdGlvblwiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkFycm93Q29uZmlndXJhdGlvblwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHNjaGVtYToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNjaGVtYVwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiU2NoZW1hXCIsXG4gICAgICAgICAgICAgICAgeG1sSXNXcmFwcGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbEVsZW1lbnROYW1lOiBcIkZpZWxkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlNlcXVlbmNlXCIsXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJBcnJvd0ZpZWxkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQXJyb3dGaWVsZCA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJBcnJvd0ZpZWxkXCIsXG4gICAgeG1sTmFtZTogXCJGaWVsZFwiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkFycm93RmllbGRcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiVHlwZVwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiVHlwZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5hbWU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJOYW1lXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJOYW1lXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJlY2lzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiUHJlY2lzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJQcmVjaXNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzY2FsZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNjYWxlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJTY2FsZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFNlcnZpY2VTZXRQcm9wZXJ0aWVzSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJTZXJ2aWNlX3NldFByb3BlcnRpZXNIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiU2VydmljZVNldFByb3BlcnRpZXNIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBTZXJ2aWNlU2V0UHJvcGVydGllc0V4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiU2VydmljZV9zZXRQcm9wZXJ0aWVzRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlNlcnZpY2VTZXRQcm9wZXJ0aWVzRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgU2VydmljZUdldFByb3BlcnRpZXNIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNlcnZpY2VfZ2V0UHJvcGVydGllc0hlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJTZXJ2aWNlR2V0UHJvcGVydGllc0hlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFNlcnZpY2VHZXRQcm9wZXJ0aWVzRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJTZXJ2aWNlX2dldFByb3BlcnRpZXNFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiU2VydmljZUdldFByb3BlcnRpZXNFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBTZXJ2aWNlR2V0U3RhdGlzdGljc0hlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiU2VydmljZV9nZXRTdGF0aXN0aWNzSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlNlcnZpY2VHZXRTdGF0aXN0aWNzSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBTZXJ2aWNlR2V0U3RhdGlzdGljc0V4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiU2VydmljZV9nZXRTdGF0aXN0aWNzRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlNlcnZpY2VHZXRTdGF0aXN0aWNzRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgU2VydmljZUxpc3RDb250YWluZXJzU2VnbWVudEhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiU2VydmljZV9saXN0Q29udGFpbmVyc1NlZ21lbnRIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiU2VydmljZUxpc3RDb250YWluZXJzU2VnbWVudEhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFNlcnZpY2VMaXN0Q29udGFpbmVyc1NlZ21lbnRFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNlcnZpY2VfbGlzdENvbnRhaW5lcnNTZWdtZW50RXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlNlcnZpY2VMaXN0Q29udGFpbmVyc1NlZ21lbnRFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBTZXJ2aWNlR2V0VXNlckRlbGVnYXRpb25LZXlIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNlcnZpY2VfZ2V0VXNlckRlbGVnYXRpb25LZXlIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiU2VydmljZUdldFVzZXJEZWxlZ2F0aW9uS2V5SGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBTZXJ2aWNlR2V0VXNlckRlbGVnYXRpb25LZXlFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNlcnZpY2VfZ2V0VXNlckRlbGVnYXRpb25LZXlFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiU2VydmljZUdldFVzZXJEZWxlZ2F0aW9uS2V5RXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgU2VydmljZUdldEFjY291bnRJbmZvSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJTZXJ2aWNlX2dldEFjY291bnRJbmZvSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlNlcnZpY2VHZXRBY2NvdW50SW5mb0hlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNrdU5hbWU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXNrdS1uYW1lXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXNrdS1uYW1lXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJTdGFuZGFyZF9MUlNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiU3RhbmRhcmRfR1JTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlN0YW5kYXJkX1JBR1JTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlN0YW5kYXJkX1pSU1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJQcmVtaXVtX0xSU1wiLFxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWNjb3VudEtpbmQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWFjY291bnQta2luZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1hY2NvdW50LWtpbmRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlN0b3JhZ2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiQmxvYlN0b3JhZ2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiU3RvcmFnZVYyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkZpbGVTdG9yYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkJsb2NrQmxvYlN0b3JhZ2VcIixcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzSGllcmFyY2hpY2FsTmFtZXNwYWNlRW5hYmxlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtaXMtaG5zLWVuYWJsZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtaXMtaG5zLWVuYWJsZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBTZXJ2aWNlR2V0QWNjb3VudEluZm9FeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNlcnZpY2VfZ2V0QWNjb3VudEluZm9FeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiU2VydmljZUdldEFjY291bnRJbmZvRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgU2VydmljZVN1Ym1pdEJhdGNoSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJTZXJ2aWNlX3N1Ym1pdEJhdGNoSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlNlcnZpY2VTdWJtaXRCYXRjaEhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBjb250ZW50VHlwZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtdHlwZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC10eXBlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBTZXJ2aWNlU3VibWl0QmF0Y2hFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNlcnZpY2Vfc3VibWl0QmF0Y2hFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiU2VydmljZVN1Ym1pdEJhdGNoRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgU2VydmljZUZpbHRlckJsb2JzSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJTZXJ2aWNlX2ZpbHRlckJsb2JzSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlNlcnZpY2VGaWx0ZXJCbG9ic0hlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgU2VydmljZUZpbHRlckJsb2JzRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJTZXJ2aWNlX2ZpbHRlckJsb2JzRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlNlcnZpY2VGaWx0ZXJCbG9ic0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lckNyZWF0ZUhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX2NyZWF0ZUhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJDcmVhdGVIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lckNyZWF0ZUV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX2NyZWF0ZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJDcmVhdGVFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJHZXRQcm9wZXJ0aWVzSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfZ2V0UHJvcGVydGllc0hlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJHZXRQcm9wZXJ0aWVzSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1tZXRhXCIsXG4gICAgICAgICAgICAgICAgaGVhZGVyQ29sbGVjdGlvblByZWZpeDogXCJ4LW1zLW1ldGEtXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLW1ldGFcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGljdGlvbmFyeVwiLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogeyB0eXBlOiB7IG5hbWU6IFwiU3RyaW5nXCIgfSB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVhc2VEdXJhdGlvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVhc2UtZHVyYXRpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGVhc2UtZHVyYXRpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJpbmZpbml0ZVwiLCBcImZpeGVkXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVhc2VTdGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVhc2Utc3RhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGVhc2Utc3RhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICBcImF2YWlsYWJsZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJsZWFzZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZXhwaXJlZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJicmVha2luZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJicm9rZW5cIixcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlYXNlU3RhdHVzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWFzZS1zdGF0dXNcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGVhc2Utc3RhdHVzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wibG9ja2VkXCIsIFwidW5sb2NrZWRcIl0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JQdWJsaWNBY2Nlc3M6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2ItcHVibGljLWFjY2Vzc1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLXB1YmxpYy1hY2Nlc3NcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJjb250YWluZXJcIiwgXCJibG9iXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaGFzSW1tdXRhYmlsaXR5UG9saWN5OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1oYXMtaW1tdXRhYmlsaXR5LXBvbGljeVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1oYXMtaW1tdXRhYmlsaXR5LXBvbGljeVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBoYXNMZWdhbEhvbGQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWhhcy1sZWdhbC1ob2xkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWhhcy1sZWdhbC1ob2xkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlZmF1bHRFbmNyeXB0aW9uU2NvcGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWRlZmF1bHQtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1kZWZhdWx0LWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZW55RW5jcnlwdGlvblNjb3BlT3ZlcnJpZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWRlbnktZW5jcnlwdGlvbi1zY29wZS1vdmVycmlkZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1kZW55LWVuY3J5cHRpb24tc2NvcGUtb3ZlcnJpZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNJbW11dGFibGVTdG9yYWdlV2l0aFZlcnNpb25pbmdFbmFibGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1pbW11dGFibGUtc3RvcmFnZS13aXRoLXZlcnNpb25pbmctZW5hYmxlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1pbW11dGFibGUtc3RvcmFnZS13aXRoLXZlcnNpb25pbmctZW5hYmxlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lckdldFByb3BlcnRpZXNFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9nZXRQcm9wZXJ0aWVzRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lckdldFByb3BlcnRpZXNFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJEZWxldGVIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9kZWxldGVIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyRGVsZXRlSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJEZWxldGVFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9kZWxldGVFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyRGVsZXRlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyU2V0TWV0YWRhdGFIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9zZXRNZXRhZGF0YUhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJTZXRNZXRhZGF0YUhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyU2V0TWV0YWRhdGFFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9zZXRNZXRhZGF0YUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJTZXRNZXRhZGF0YUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lckdldEFjY2Vzc1BvbGljeUhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX2dldEFjY2Vzc1BvbGljeUhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJHZXRBY2Nlc3NQb2xpY3lIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgYmxvYlB1YmxpY0FjY2Vzczoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1wdWJsaWMtYWNjZXNzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2ItcHVibGljLWFjY2Vzc1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcImNvbnRhaW5lclwiLCBcImJsb2JcIl0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyR2V0QWNjZXNzUG9saWN5RXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfZ2V0QWNjZXNzUG9saWN5RXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lckdldEFjY2Vzc1BvbGljeUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lclNldEFjY2Vzc1BvbGljeUhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX3NldEFjY2Vzc1BvbGljeUhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJTZXRBY2Nlc3NQb2xpY3lIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lclNldEFjY2Vzc1BvbGljeUV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX3NldEFjY2Vzc1BvbGljeUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJTZXRBY2Nlc3NQb2xpY3lFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJSZXN0b3JlSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfcmVzdG9yZUhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJSZXN0b3JlSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJSZXN0b3JlRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfcmVzdG9yZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJSZXN0b3JlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyUmVuYW1lSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfcmVuYW1lSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lclJlbmFtZUhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyUmVuYW1lRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfcmVuYW1lRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lclJlbmFtZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lclN1Ym1pdEJhdGNoSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfc3VibWl0QmF0Y2hIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyU3VibWl0QmF0Y2hIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgY29udGVudFR5cGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LXR5cGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtdHlwZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyU3VibWl0QmF0Y2hFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9zdWJtaXRCYXRjaEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJTdWJtaXRCYXRjaEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lckZpbHRlckJsb2JzSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfZmlsdGVyQmxvYnNIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyRmlsdGVyQmxvYnNIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJGaWx0ZXJCbG9ic0V4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX2ZpbHRlckJsb2JzRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lckZpbHRlckJsb2JzRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyQWNxdWlyZUxlYXNlSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfYWNxdWlyZUxlYXNlSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lckFjcXVpcmVMZWFzZUhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZWFzZUlkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWFzZS1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1sZWFzZS1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyQWNxdWlyZUxlYXNlRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfYWNxdWlyZUxlYXNlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lckFjcXVpcmVMZWFzZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lclJlbGVhc2VMZWFzZUhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX3JlbGVhc2VMZWFzZUhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJSZWxlYXNlTGVhc2VIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJSZWxlYXNlTGVhc2VFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9yZWxlYXNlTGVhc2VFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyUmVsZWFzZUxlYXNlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyUmVuZXdMZWFzZUhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX3JlbmV3TGVhc2VIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyUmVuZXdMZWFzZUhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZWFzZUlkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWFzZS1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1sZWFzZS1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyUmVuZXdMZWFzZUV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX3JlbmV3TGVhc2VFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyUmVuZXdMZWFzZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lckJyZWFrTGVhc2VIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9icmVha0xlYXNlSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lckJyZWFrTGVhc2VIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVhc2VUaW1lOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWFzZS10aW1lXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWxlYXNlLXRpbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lckJyZWFrTGVhc2VFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9icmVha0xlYXNlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lckJyZWFrTGVhc2VFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJDaGFuZ2VMZWFzZUhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX2NoYW5nZUxlYXNlSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lckNoYW5nZUxlYXNlSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlYXNlSWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxlYXNlLWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWxlYXNlLWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJDaGFuZ2VMZWFzZUV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX2NoYW5nZUxlYXNlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lckNoYW5nZUxlYXNlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyTGlzdEJsb2JGbGF0U2VnbWVudEhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX2xpc3RCbG9iRmxhdFNlZ21lbnRIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyTGlzdEJsb2JGbGF0U2VnbWVudEhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBjb250ZW50VHlwZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtdHlwZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC10eXBlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lckxpc3RCbG9iRmxhdFNlZ21lbnRFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9saXN0QmxvYkZsYXRTZWdtZW50RXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lckxpc3RCbG9iRmxhdFNlZ21lbnRFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJMaXN0QmxvYkhpZXJhcmNoeVNlZ21lbnRIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9saXN0QmxvYkhpZXJhcmNoeVNlZ21lbnRIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyTGlzdEJsb2JIaWVyYXJjaHlTZWdtZW50SGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNvbnRlbnRUeXBlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC10eXBlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LXR5cGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyTGlzdEJsb2JIaWVyYXJjaHlTZWdtZW50RXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfbGlzdEJsb2JIaWVyYXJjaHlTZWdtZW50RXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lckxpc3RCbG9iSGllcmFyY2h5U2VnbWVudEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lckdldEFjY291bnRJbmZvSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfZ2V0QWNjb3VudEluZm9IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyR2V0QWNjb3VudEluZm9IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBza3VOYW1lOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1za3UtbmFtZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1za3UtbmFtZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiU3RhbmRhcmRfTFJTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlN0YW5kYXJkX0dSU1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJTdGFuZGFyZF9SQUdSU1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJTdGFuZGFyZF9aUlNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiUHJlbWl1bV9MUlNcIixcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFjY291bnRLaW5kOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1hY2NvdW50LWtpbmRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYWNjb3VudC1raW5kXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJTdG9yYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkJsb2JTdG9yYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlN0b3JhZ2VWMlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJGaWxlU3RvcmFnZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJCbG9ja0Jsb2JTdG9yYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc0hpZXJhcmNoaWNhbE5hbWVzcGFjZUVuYWJsZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWlzLWhucy1lbmFibGVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWlzLWhucy1lbmFibGVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lckdldEFjY291bnRJbmZvRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfZ2V0QWNjb3VudEluZm9FeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyR2V0QWNjb3VudEluZm9FeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iRG93bmxvYWRIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JfZG93bmxvYWRIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYkRvd25sb2FkSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjcmVhdGVkT246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNyZWF0aW9uLXRpbWVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY3JlYXRpb24tdGltZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1tZXRhXCIsXG4gICAgICAgICAgICAgICAgaGVhZGVyQ29sbGVjdGlvblByZWZpeDogXCJ4LW1zLW1ldGEtXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLW1ldGFcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGljdGlvbmFyeVwiLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogeyB0eXBlOiB7IG5hbWU6IFwiU3RyaW5nXCIgfSB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb2JqZWN0UmVwbGljYXRpb25Qb2xpY3lJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtb3ItcG9saWN5LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLW9yLXBvbGljeS1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9iamVjdFJlcGxpY2F0aW9uUnVsZXM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLW9yXCIsXG4gICAgICAgICAgICAgICAgaGVhZGVyQ29sbGVjdGlvblByZWZpeDogXCJ4LW1zLW9yLVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1vclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEaWN0aW9uYXJ5XCIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB7IHR5cGU6IHsgbmFtZTogXCJTdHJpbmdcIiB9IH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50TGVuZ3RoOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC1sZW5ndGhcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtbGVuZ3RoXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudFR5cGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LXR5cGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtdHlwZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnRSYW5nZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtcmFuZ2VcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtcmFuZ2VcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnRNRDU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50RW5jb2Rpbmc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LWVuY29kaW5nXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LWVuY29kaW5nXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2FjaGVDb250cm9sOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY2FjaGUtY29udHJvbFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY2FjaGUtY29udHJvbFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnREaXNwb3NpdGlvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtZGlzcG9zaXRpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtZGlzcG9zaXRpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50TGFuZ3VhZ2U6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LWxhbmd1YWdlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LWxhbmd1YWdlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmxvYlNlcXVlbmNlTnVtYmVyOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLXNlcXVlbmNlLW51bWJlclwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLXNlcXVlbmNlLW51bWJlclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JUeXBlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLXR5cGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi10eXBlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wiQmxvY2tCbG9iXCIsIFwiUGFnZUJsb2JcIiwgXCJBcHBlbmRCbG9iXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29weUNvbXBsZXRlZE9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LWNvbXBsZXRpb24tdGltZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LWNvbXBsZXRpb24tdGltZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvcHlTdGF0dXNEZXNjcmlwdGlvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1zdGF0dXMtZGVzY3JpcHRpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29weS1zdGF0dXMtZGVzY3JpcHRpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3B5SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvcHktaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29weS1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvcHlQcm9ncmVzczoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1wcm9ncmVzc1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LXByb2dyZXNzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29weVNvdXJjZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1zb3VyY2VcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29weS1zb3VyY2VcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3B5U3RhdHVzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LXN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LXN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcInBlbmRpbmdcIiwgXCJzdWNjZXNzXCIsIFwiYWJvcnRlZFwiLCBcImZhaWxlZFwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlYXNlRHVyYXRpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxlYXNlLWR1cmF0aW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWxlYXNlLWR1cmF0aW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wiaW5maW5pdGVcIiwgXCJmaXhlZFwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlYXNlU3RhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxlYXNlLXN0YXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWxlYXNlLXN0YXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJhdmFpbGFibGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibGVhc2VkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImV4cGlyZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYnJlYWtpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYnJva2VuXCIsXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZWFzZVN0YXR1czoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVhc2Utc3RhdHVzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWxlYXNlLXN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcImxvY2tlZFwiLCBcInVubG9ja2VkXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbklkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uLWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb24taWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc0N1cnJlbnRWZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1pcy1jdXJyZW50LXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtaXMtY3VycmVudC12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFjY2VwdFJhbmdlczoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImFjY2VwdC1yYW5nZXNcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImFjY2VwdC1yYW5nZXNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JDb21taXR0ZWRCbG9ja0NvdW50OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLWNvbW1pdHRlZC1ibG9jay1jb3VudFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLWNvbW1pdHRlZC1ibG9jay1jb3VudFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzU2VydmVyRW5jcnlwdGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1Njoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1rZXktc2hhMjU2XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25TY29wZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmxvYkNvbnRlbnRNRDU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2ItY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1jb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRhZ0NvdW50OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy10YWctY291bnRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdGFnLWNvdW50XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNTZWFsZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2Itc2VhbGVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2Itc2VhbGVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RBY2Nlc3NlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGFzdC1hY2Nlc3MtdGltZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1sYXN0LWFjY2Vzcy10aW1lXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5RXhwaXJlc09uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1pbW11dGFiaWxpdHktcG9saWN5LXVudGlsLWRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtaW1tdXRhYmlsaXR5LXBvbGljeS11bnRpbC1kYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5TW9kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtaW1tdXRhYmlsaXR5LXBvbGljeS1tb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWltbXV0YWJpbGl0eS1wb2xpY3ktbW9kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcIk11dGFibGVcIiwgXCJVbmxvY2tlZFwiLCBcIkxvY2tlZFwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlZ2FsSG9sZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVnYWwtaG9sZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1sZWdhbC1ob2xkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudENyYzY0OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb250ZW50LWNyYzY0XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvbnRlbnQtY3JjNjRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iRG93bmxvYWRFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JfZG93bmxvYWRFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYkRvd25sb2FkRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYkdldFByb3BlcnRpZXNIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JfZ2V0UHJvcGVydGllc0hlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iR2V0UHJvcGVydGllc0hlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY3JlYXRlZE9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jcmVhdGlvbi10aW1lXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNyZWF0aW9uLXRpbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbWV0YVwiLFxuICAgICAgICAgICAgICAgIGhlYWRlckNvbGxlY3Rpb25QcmVmaXg6IFwieC1tcy1tZXRhLVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1tZXRhXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRpY3Rpb25hcnlcIixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHsgdHlwZTogeyBuYW1lOiBcIlN0cmluZ1wiIH0gfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9iamVjdFJlcGxpY2F0aW9uUG9saWN5SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLW9yLXBvbGljeS1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1vci1wb2xpY3ktaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvYmplY3RSZXBsaWNhdGlvblJ1bGVzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1vclwiLFxuICAgICAgICAgICAgICAgIGhlYWRlckNvbGxlY3Rpb25QcmVmaXg6IFwieC1tcy1vci1cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtb3JcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGljdGlvbmFyeVwiLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogeyB0eXBlOiB7IG5hbWU6IFwiU3RyaW5nXCIgfSB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmxvYlR5cGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2ItdHlwZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLXR5cGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJCbG9ja0Jsb2JcIiwgXCJQYWdlQmxvYlwiLCBcIkFwcGVuZEJsb2JcIl0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3B5Q29tcGxldGVkT246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvcHktY29tcGxldGlvbi10aW1lXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvcHktY29tcGxldGlvbi10aW1lXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29weVN0YXR1c0Rlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LXN0YXR1cy1kZXNjcmlwdGlvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LXN0YXR1cy1kZXNjcmlwdGlvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvcHlJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29weVByb2dyZXNzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LXByb2dyZXNzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvcHktcHJvZ3Jlc3NcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3B5U291cmNlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LXNvdXJjZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LXNvdXJjZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvcHlTdGF0dXM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvcHktc3RhdHVzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvcHktc3RhdHVzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wicGVuZGluZ1wiLCBcInN1Y2Nlc3NcIiwgXCJhYm9ydGVkXCIsIFwiZmFpbGVkXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNJbmNyZW1lbnRhbENvcHk6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWluY3JlbWVudGFsLWNvcHlcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtaW5jcmVtZW50YWwtY29weVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZXN0aW5hdGlvblNuYXBzaG90OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LWRlc3RpbmF0aW9uLXNuYXBzaG90XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvcHktZGVzdGluYXRpb24tc25hcHNob3RcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZWFzZUR1cmF0aW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWFzZS1kdXJhdGlvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1sZWFzZS1kdXJhdGlvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcImluZmluaXRlXCIsIFwiZml4ZWRcIl0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZWFzZVN0YXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWFzZS1zdGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1sZWFzZS1zdGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYXZhaWxhYmxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImxlYXNlZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJleHBpcmVkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImJyZWFraW5nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImJyb2tlblwiLFxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVhc2VTdGF0dXM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxlYXNlLXN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1sZWFzZS1zdGF0dXNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJsb2NrZWRcIiwgXCJ1bmxvY2tlZFwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnRMZW5ndGg6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LWxlbmd0aFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC1sZW5ndGhcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50VHlwZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtdHlwZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC10eXBlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50TUQ1OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudEVuY29kaW5nOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC1lbmNvZGluZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC1lbmNvZGluZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnREaXNwb3NpdGlvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtZGlzcG9zaXRpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtZGlzcG9zaXRpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50TGFuZ3VhZ2U6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LWxhbmd1YWdlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LWxhbmd1YWdlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2FjaGVDb250cm9sOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY2FjaGUtY29udHJvbFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY2FjaGUtY29udHJvbFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JTZXF1ZW5jZU51bWJlcjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1zZXF1ZW5jZS1udW1iZXJcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1zZXF1ZW5jZS1udW1iZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFjY2VwdFJhbmdlczoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImFjY2VwdC1yYW5nZXNcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImFjY2VwdC1yYW5nZXNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBibG9iQ29tbWl0dGVkQmxvY2tDb3VudDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1jb21taXR0ZWQtYmxvY2stY291bnRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1jb21taXR0ZWQtYmxvY2stY291bnRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc1NlcnZlckVuY3J5cHRlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25LZXlTaGEyNTY6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uU2NvcGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFjY2Vzc1RpZXI6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWFjY2Vzcy10aWVyXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWFjY2Vzcy10aWVyXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWNjZXNzVGllckluZmVycmVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1hY2Nlc3MtdGllci1pbmZlcnJlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1hY2Nlc3MtdGllci1pbmZlcnJlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhcmNoaXZlU3RhdHVzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1hcmNoaXZlLXN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1hcmNoaXZlLXN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFjY2Vzc1RpZXJDaGFuZ2VkT246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWFjY2Vzcy10aWVyLWNoYW5nZS10aW1lXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWFjY2Vzcy10aWVyLWNoYW5nZS10aW1lXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbklkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uLWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb24taWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc0N1cnJlbnRWZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1pcy1jdXJyZW50LXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtaXMtY3VycmVudC12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRhZ0NvdW50OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy10YWctY291bnRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdGFnLWNvdW50XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXhwaXJlc09uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1leHBpcnktdGltZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1leHBpcnktdGltZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzU2VhbGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLXNlYWxlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLXNlYWxlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZWh5ZHJhdGVQcmlvcml0eToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVoeWRyYXRlLXByaW9yaXR5XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlaHlkcmF0ZS1wcmlvcml0eVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcIkhpZ2hcIiwgXCJTdGFuZGFyZFwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RBY2Nlc3NlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGFzdC1hY2Nlc3MtdGltZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1sYXN0LWFjY2Vzcy10aW1lXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5RXhwaXJlc09uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1pbW11dGFiaWxpdHktcG9saWN5LXVudGlsLWRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtaW1tdXRhYmlsaXR5LXBvbGljeS11bnRpbC1kYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5TW9kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtaW1tdXRhYmlsaXR5LXBvbGljeS1tb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWltbXV0YWJpbGl0eS1wb2xpY3ktbW9kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcIk11dGFibGVcIiwgXCJVbmxvY2tlZFwiLCBcIkxvY2tlZFwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlZ2FsSG9sZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVnYWwtaG9sZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1sZWdhbC1ob2xkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYkdldFByb3BlcnRpZXNFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JfZ2V0UHJvcGVydGllc0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iR2V0UHJvcGVydGllc0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JEZWxldGVIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JfZGVsZXRlSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JEZWxldGVIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JEZWxldGVFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JfZGVsZXRlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JEZWxldGVFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iVW5kZWxldGVIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JfdW5kZWxldGVIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYlVuZGVsZXRlSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iVW5kZWxldGVFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JfdW5kZWxldGVFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYlVuZGVsZXRlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlNldEV4cGlyeUhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9zZXRFeHBpcnlIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYlNldEV4cGlyeUhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JTZXRFeHBpcnlFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2Jfc2V0RXhwaXJ5RXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JTZXRFeHBpcnlFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iU2V0SHR0cEhlYWRlcnNIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2Jfc2V0SHR0cEhlYWRlcnNIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYlNldEh0dHBIZWFkZXJzSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JTZXF1ZW5jZU51bWJlcjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1zZXF1ZW5jZS1udW1iZXJcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1zZXF1ZW5jZS1udW1iZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlNldEh0dHBIZWFkZXJzRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX3NldEh0dHBIZWFkZXJzRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JTZXRIdHRwSGVhZGVyc0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JTZXRJbW11dGFiaWxpdHlQb2xpY3lIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2Jfc2V0SW1tdXRhYmlsaXR5UG9saWN5SGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JTZXRJbW11dGFiaWxpdHlQb2xpY3lIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpbW11dGFiaWxpdHlQb2xpY3lFeHBpcnk6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWltbXV0YWJpbGl0eS1wb2xpY3ktdW50aWwtZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1pbW11dGFiaWxpdHktcG9saWN5LXVudGlsLWRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpbW11dGFiaWxpdHlQb2xpY3lNb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1pbW11dGFiaWxpdHktcG9saWN5LW1vZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtaW1tdXRhYmlsaXR5LXBvbGljeS1tb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wiTXV0YWJsZVwiLCBcIlVubG9ja2VkXCIsIFwiTG9ja2VkXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlNldEltbXV0YWJpbGl0eVBvbGljeUV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9zZXRJbW11dGFiaWxpdHlQb2xpY3lFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYlNldEltbXV0YWJpbGl0eVBvbGljeUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JEZWxldGVJbW11dGFiaWxpdHlQb2xpY3lIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JfZGVsZXRlSW1tdXRhYmlsaXR5UG9saWN5SGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JEZWxldGVJbW11dGFiaWxpdHlQb2xpY3lIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iRGVsZXRlSW1tdXRhYmlsaXR5UG9saWN5RXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX2RlbGV0ZUltbXV0YWJpbGl0eVBvbGljeUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iRGVsZXRlSW1tdXRhYmlsaXR5UG9saWN5RXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlNldExlZ2FsSG9sZEhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9zZXRMZWdhbEhvbGRIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYlNldExlZ2FsSG9sZEhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlZ2FsSG9sZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVnYWwtaG9sZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1sZWdhbC1ob2xkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JTZXRMZWdhbEhvbGRFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2Jfc2V0TGVnYWxIb2xkRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JTZXRMZWdhbEhvbGRFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iU2V0TWV0YWRhdGFIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2Jfc2V0TWV0YWRhdGFIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYlNldE1ldGFkYXRhSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb25JZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvbi1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uLWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc1NlcnZlckVuY3J5cHRlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3Qtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uS2V5U2hhMjU2OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1rZXktc2hhMjU2XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JTZXRNZXRhZGF0YUV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9zZXRNZXRhZGF0YUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iU2V0TWV0YWRhdGFFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iQWNxdWlyZUxlYXNlSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX2FjcXVpcmVMZWFzZUhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iQWNxdWlyZUxlYXNlSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlYXNlSWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxlYXNlLWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWxlYXNlLWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iQWNxdWlyZUxlYXNlRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX2FjcXVpcmVMZWFzZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iQWNxdWlyZUxlYXNlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlJlbGVhc2VMZWFzZUhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9yZWxlYXNlTGVhc2VIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYlJlbGVhc2VMZWFzZUhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JSZWxlYXNlTGVhc2VFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JfcmVsZWFzZUxlYXNlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JSZWxlYXNlTGVhc2VFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iUmVuZXdMZWFzZUhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9yZW5ld0xlYXNlSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JSZW5ld0xlYXNlSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlYXNlSWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxlYXNlLWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWxlYXNlLWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iUmVuZXdMZWFzZUV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9yZW5ld0xlYXNlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JSZW5ld0xlYXNlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYkNoYW5nZUxlYXNlSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX2NoYW5nZUxlYXNlSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JDaGFuZ2VMZWFzZUhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZWFzZUlkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWFzZS1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1sZWFzZS1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYkNoYW5nZUxlYXNlRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX2NoYW5nZUxlYXNlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JDaGFuZ2VMZWFzZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JCcmVha0xlYXNlSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX2JyZWFrTGVhc2VIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYkJyZWFrTGVhc2VIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVhc2VUaW1lOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWFzZS10aW1lXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWxlYXNlLXRpbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JCcmVha0xlYXNlRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX2JyZWFrTGVhc2VFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYkJyZWFrTGVhc2VFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iQ3JlYXRlU25hcHNob3RIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JfY3JlYXRlU25hcHNob3RIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYkNyZWF0ZVNuYXBzaG90SGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHNuYXBzaG90OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1zbmFwc2hvdFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1zbmFwc2hvdFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb25JZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvbi1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uLWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc1NlcnZlckVuY3J5cHRlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3Qtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JDcmVhdGVTbmFwc2hvdEV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9jcmVhdGVTbmFwc2hvdEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iQ3JlYXRlU25hcHNob3RFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iU3RhcnRDb3B5RnJvbVVSTEhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9zdGFydENvcHlGcm9tVVJMSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JTdGFydENvcHlGcm9tVVJMSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb25JZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvbi1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uLWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3B5SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvcHktaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29weS1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvcHlTdGF0dXM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvcHktc3RhdHVzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvcHktc3RhdHVzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wicGVuZGluZ1wiLCBcInN1Y2Nlc3NcIiwgXCJhYm9ydGVkXCIsIFwiZmFpbGVkXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iU3RhcnRDb3B5RnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9zdGFydENvcHlGcm9tVVJMRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JTdGFydENvcHlGcm9tVVJMRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYkNvcHlGcm9tVVJMSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX2NvcHlGcm9tVVJMSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JDb3B5RnJvbVVSTEhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uSWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb24taWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvbi1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29weUlkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvcHktaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3B5U3RhdHVzOiB7XG4gICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBcInN1Y2Nlc3NcIixcbiAgICAgICAgICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1zdGF0dXNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50TUQ1OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeE1zQ29udGVudENyYzY0OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb250ZW50LWNyYzY0XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvbnRlbnQtY3JjNjRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uU2NvcGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYkNvcHlGcm9tVVJMRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX2NvcHlGcm9tVVJMRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JDb3B5RnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JBYm9ydENvcHlGcm9tVVJMSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX2Fib3J0Q29weUZyb21VUkxIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYkFib3J0Q29weUZyb21VUkxIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JBYm9ydENvcHlGcm9tVVJMRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX2Fib3J0Q29weUZyb21VUkxFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYkFib3J0Q29weUZyb21VUkxFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iU2V0VGllckhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9zZXRUaWVySGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JTZXRUaWVySGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlNldFRpZXJFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2Jfc2V0VGllckV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iU2V0VGllckV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JHZXRBY2NvdW50SW5mb0hlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9nZXRBY2NvdW50SW5mb0hlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iR2V0QWNjb3VudEluZm9IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBza3VOYW1lOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1za3UtbmFtZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1za3UtbmFtZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiU3RhbmRhcmRfTFJTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlN0YW5kYXJkX0dSU1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJTdGFuZGFyZF9SQUdSU1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJTdGFuZGFyZF9aUlNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiUHJlbWl1bV9MUlNcIixcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFjY291bnRLaW5kOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1hY2NvdW50LWtpbmRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYWNjb3VudC1raW5kXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJTdG9yYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkJsb2JTdG9yYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlN0b3JhZ2VWMlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJGaWxlU3RvcmFnZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJCbG9ja0Jsb2JTdG9yYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc0hpZXJhcmNoaWNhbE5hbWVzcGFjZUVuYWJsZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWlzLWhucy1lbmFibGVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWlzLWhucy1lbmFibGVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JHZXRBY2NvdW50SW5mb0V4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9nZXRBY2NvdW50SW5mb0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iR2V0QWNjb3VudEluZm9FeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iUXVlcnlIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JfcXVlcnlIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYlF1ZXJ5SGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbWV0YVwiLFxuICAgICAgICAgICAgICAgIGhlYWRlckNvbGxlY3Rpb25QcmVmaXg6IFwieC1tcy1tZXRhLVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1tZXRhXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRpY3Rpb25hcnlcIixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHsgdHlwZTogeyBuYW1lOiBcIlN0cmluZ1wiIH0gfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnRMZW5ndGg6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LWxlbmd0aFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC1sZW5ndGhcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50VHlwZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtdHlwZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC10eXBlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudFJhbmdlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC1yYW5nZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC1yYW5nZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudE1ENToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnRFbmNvZGluZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtZW5jb2RpbmdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtZW5jb2RpbmdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjYWNoZUNvbnRyb2w6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjYWNoZS1jb250cm9sXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjYWNoZS1jb250cm9sXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudERpc3Bvc2l0aW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC1kaXNwb3NpdGlvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC1kaXNwb3NpdGlvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnRMYW5ndWFnZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtbGFuZ3VhZ2VcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtbGFuZ3VhZ2VcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBibG9iU2VxdWVuY2VOdW1iZXI6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2Itc2VxdWVuY2UtbnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2Itc2VxdWVuY2UtbnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmxvYlR5cGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2ItdHlwZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLXR5cGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJCbG9ja0Jsb2JcIiwgXCJQYWdlQmxvYlwiLCBcIkFwcGVuZEJsb2JcIl0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3B5Q29tcGxldGlvblRpbWU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvcHktY29tcGxldGlvbi10aW1lXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvcHktY29tcGxldGlvbi10aW1lXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29weVN0YXR1c0Rlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LXN0YXR1cy1kZXNjcmlwdGlvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LXN0YXR1cy1kZXNjcmlwdGlvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvcHlJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29weVByb2dyZXNzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LXByb2dyZXNzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvcHktcHJvZ3Jlc3NcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3B5U291cmNlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LXNvdXJjZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LXNvdXJjZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvcHlTdGF0dXM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvcHktc3RhdHVzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvcHktc3RhdHVzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wicGVuZGluZ1wiLCBcInN1Y2Nlc3NcIiwgXCJhYm9ydGVkXCIsIFwiZmFpbGVkXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVhc2VEdXJhdGlvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVhc2UtZHVyYXRpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGVhc2UtZHVyYXRpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJpbmZpbml0ZVwiLCBcImZpeGVkXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVhc2VTdGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVhc2Utc3RhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGVhc2Utc3RhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICBcImF2YWlsYWJsZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJsZWFzZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZXhwaXJlZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJicmVha2luZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJicm9rZW5cIixcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlYXNlU3RhdHVzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWFzZS1zdGF0dXNcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGVhc2Utc3RhdHVzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wibG9ja2VkXCIsIFwidW5sb2NrZWRcIl0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhY2NlcHRSYW5nZXM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJhY2NlcHQtcmFuZ2VzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJhY2NlcHQtcmFuZ2VzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBibG9iQ29tbWl0dGVkQmxvY2tDb3VudDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1jb21taXR0ZWQtYmxvY2stY291bnRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1jb21taXR0ZWQtYmxvY2stY291bnRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc1NlcnZlckVuY3J5cHRlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25LZXlTaGEyNTY6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uU2NvcGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JDb250ZW50TUQ1OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLWNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2ItY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnRDcmM2NDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29udGVudC1jcmM2NFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb250ZW50LWNyYzY0XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlF1ZXJ5RXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX3F1ZXJ5RXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JRdWVyeUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JHZXRUYWdzSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX2dldFRhZ3NIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYkdldFRhZ3NIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JHZXRUYWdzRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX2dldFRhZ3NFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYkdldFRhZ3NFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iU2V0VGFnc0hlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9zZXRUYWdzSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JTZXRUYWdzSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iU2V0VGFnc0V4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9zZXRUYWdzRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JTZXRUYWdzRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgUGFnZUJsb2JDcmVhdGVIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlBhZ2VCbG9iX2NyZWF0ZUhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJQYWdlQmxvYkNyZWF0ZUhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50TUQ1OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbklkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uLWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb24taWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzU2VydmVyRW5jcnlwdGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25LZXlTaGEyNTY6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uU2NvcGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgUGFnZUJsb2JDcmVhdGVFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlBhZ2VCbG9iX2NyZWF0ZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJQYWdlQmxvYkNyZWF0ZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFBhZ2VCbG9iVXBsb2FkUGFnZXNIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlBhZ2VCbG9iX3VwbG9hZFBhZ2VzSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlBhZ2VCbG9iVXBsb2FkUGFnZXNIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudE1ENToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHhNc0NvbnRlbnRDcmM2NDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29udGVudC1jcmM2NFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb250ZW50LWNyYzY0XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmxvYlNlcXVlbmNlTnVtYmVyOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLXNlcXVlbmNlLW51bWJlclwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLXNlcXVlbmNlLW51bWJlclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNTZXJ2ZXJFbmNyeXB0ZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3Qtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1Njoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1rZXktc2hhMjU2XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25TY29wZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBQYWdlQmxvYlVwbG9hZFBhZ2VzRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJQYWdlQmxvYl91cGxvYWRQYWdlc0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJQYWdlQmxvYlVwbG9hZFBhZ2VzRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgUGFnZUJsb2JDbGVhclBhZ2VzSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJQYWdlQmxvYl9jbGVhclBhZ2VzSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlBhZ2VCbG9iQ2xlYXJQYWdlc0hlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50TUQ1OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeE1zQ29udGVudENyYzY0OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb250ZW50LWNyYzY0XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvbnRlbnQtY3JjNjRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBibG9iU2VxdWVuY2VOdW1iZXI6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2Itc2VxdWVuY2UtbnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2Itc2VxdWVuY2UtbnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFBhZ2VCbG9iQ2xlYXJQYWdlc0V4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiUGFnZUJsb2JfY2xlYXJQYWdlc0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJQYWdlQmxvYkNsZWFyUGFnZXNFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBQYWdlQmxvYlVwbG9hZFBhZ2VzRnJvbVVSTEhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiUGFnZUJsb2JfdXBsb2FkUGFnZXNGcm9tVVJMSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlBhZ2VCbG9iVXBsb2FkUGFnZXNGcm9tVVJMSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnRNRDU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB4TXNDb250ZW50Q3JjNjQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvbnRlbnQtY3JjNjRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29udGVudC1jcmM2NFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JTZXF1ZW5jZU51bWJlcjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1zZXF1ZW5jZS1udW1iZXJcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1zZXF1ZW5jZS1udW1iZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNTZXJ2ZXJFbmNyeXB0ZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3Qtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1Njoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1rZXktc2hhMjU2XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25TY29wZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBQYWdlQmxvYlVwbG9hZFBhZ2VzRnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiUGFnZUJsb2JfdXBsb2FkUGFnZXNGcm9tVVJMRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlBhZ2VCbG9iVXBsb2FkUGFnZXNGcm9tVVJMRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgUGFnZUJsb2JHZXRQYWdlUmFuZ2VzSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJQYWdlQmxvYl9nZXRQYWdlUmFuZ2VzSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlBhZ2VCbG9iR2V0UGFnZVJhbmdlc0hlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBibG9iQ29udGVudExlbmd0aDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1jb250ZW50LWxlbmd0aFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLWNvbnRlbnQtbGVuZ3RoXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFBhZ2VCbG9iR2V0UGFnZVJhbmdlc0V4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiUGFnZUJsb2JfZ2V0UGFnZVJhbmdlc0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJQYWdlQmxvYkdldFBhZ2VSYW5nZXNFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBQYWdlQmxvYkdldFBhZ2VSYW5nZXNEaWZmSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJQYWdlQmxvYl9nZXRQYWdlUmFuZ2VzRGlmZkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJQYWdlQmxvYkdldFBhZ2VSYW5nZXNEaWZmSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JDb250ZW50TGVuZ3RoOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLWNvbnRlbnQtbGVuZ3RoXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2ItY29udGVudC1sZW5ndGhcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgUGFnZUJsb2JHZXRQYWdlUmFuZ2VzRGlmZkV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiUGFnZUJsb2JfZ2V0UGFnZVJhbmdlc0RpZmZFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiUGFnZUJsb2JHZXRQYWdlUmFuZ2VzRGlmZkV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFBhZ2VCbG9iUmVzaXplSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJQYWdlQmxvYl9yZXNpemVIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiUGFnZUJsb2JSZXNpemVIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmxvYlNlcXVlbmNlTnVtYmVyOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLXNlcXVlbmNlLW51bWJlclwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLXNlcXVlbmNlLW51bWJlclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBQYWdlQmxvYlJlc2l6ZUV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiUGFnZUJsb2JfcmVzaXplRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlBhZ2VCbG9iUmVzaXplRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgUGFnZUJsb2JVcGRhdGVTZXF1ZW5jZU51bWJlckhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiUGFnZUJsb2JfdXBkYXRlU2VxdWVuY2VOdW1iZXJIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiUGFnZUJsb2JVcGRhdGVTZXF1ZW5jZU51bWJlckhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBibG9iU2VxdWVuY2VOdW1iZXI6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2Itc2VxdWVuY2UtbnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2Itc2VxdWVuY2UtbnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFBhZ2VCbG9iVXBkYXRlU2VxdWVuY2VOdW1iZXJFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlBhZ2VCbG9iX3VwZGF0ZVNlcXVlbmNlTnVtYmVyRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlBhZ2VCbG9iVXBkYXRlU2VxdWVuY2VOdW1iZXJFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBQYWdlQmxvYkNvcHlJbmNyZW1lbnRhbEhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiUGFnZUJsb2JfY29weUluY3JlbWVudGFsSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlBhZ2VCbG9iQ29weUluY3JlbWVudGFsSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29weUlkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvcHktaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3B5U3RhdHVzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LXN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LXN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcInBlbmRpbmdcIiwgXCJzdWNjZXNzXCIsIFwiYWJvcnRlZFwiLCBcImZhaWxlZFwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgUGFnZUJsb2JDb3B5SW5jcmVtZW50YWxFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlBhZ2VCbG9iX2NvcHlJbmNyZW1lbnRhbEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJQYWdlQmxvYkNvcHlJbmNyZW1lbnRhbEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEFwcGVuZEJsb2JDcmVhdGVIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkFwcGVuZEJsb2JfY3JlYXRlSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkFwcGVuZEJsb2JDcmVhdGVIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudE1ENToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb25JZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvbi1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uLWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc1NlcnZlckVuY3J5cHRlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3Qtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uS2V5U2hhMjU2OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1rZXktc2hhMjU2XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEFwcGVuZEJsb2JDcmVhdGVFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkFwcGVuZEJsb2JfY3JlYXRlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkFwcGVuZEJsb2JDcmVhdGVFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBBcHBlbmRCbG9iQXBwZW5kQmxvY2tIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkFwcGVuZEJsb2JfYXBwZW5kQmxvY2tIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQXBwZW5kQmxvYkFwcGVuZEJsb2NrSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnRNRDU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB4TXNDb250ZW50Q3JjNjQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvbnRlbnQtY3JjNjRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29udGVudC1jcmM2NFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmxvYkFwcGVuZE9mZnNldDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1hcHBlbmQtb2Zmc2V0XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2ItYXBwZW5kLW9mZnNldFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JDb21taXR0ZWRCbG9ja0NvdW50OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLWNvbW1pdHRlZC1ibG9jay1jb3VudFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLWNvbW1pdHRlZC1ibG9jay1jb3VudFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzU2VydmVyRW5jcnlwdGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25LZXlTaGEyNTY6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uU2NvcGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQXBwZW5kQmxvYkFwcGVuZEJsb2NrRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJBcHBlbmRCbG9iX2FwcGVuZEJsb2NrRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkFwcGVuZEJsb2JBcHBlbmRCbG9ja0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEFwcGVuZEJsb2JBcHBlbmRCbG9ja0Zyb21VcmxIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkFwcGVuZEJsb2JfYXBwZW5kQmxvY2tGcm9tVXJsSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkFwcGVuZEJsb2JBcHBlbmRCbG9ja0Zyb21VcmxIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudE1ENToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHhNc0NvbnRlbnRDcmM2NDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29udGVudC1jcmM2NFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb250ZW50LWNyYzY0XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JBcHBlbmRPZmZzZXQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2ItYXBwZW5kLW9mZnNldFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLWFwcGVuZC1vZmZzZXRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBibG9iQ29tbWl0dGVkQmxvY2tDb3VudDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1jb21taXR0ZWQtYmxvY2stY291bnRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1jb21taXR0ZWQtYmxvY2stY291bnRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uS2V5U2hhMjU2OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1rZXktc2hhMjU2XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc1NlcnZlckVuY3J5cHRlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3Qtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEFwcGVuZEJsb2JBcHBlbmRCbG9ja0Zyb21VcmxFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkFwcGVuZEJsb2JfYXBwZW5kQmxvY2tGcm9tVXJsRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkFwcGVuZEJsb2JBcHBlbmRCbG9ja0Zyb21VcmxFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBBcHBlbmRCbG9iU2VhbEhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQXBwZW5kQmxvYl9zZWFsSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkFwcGVuZEJsb2JTZWFsSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNTZWFsZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2Itc2VhbGVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2Itc2VhbGVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEFwcGVuZEJsb2JTZWFsRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJBcHBlbmRCbG9iX3NlYWxFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQXBwZW5kQmxvYlNlYWxFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9ja0Jsb2JVcGxvYWRIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2NrQmxvYl91cGxvYWRIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvY2tCbG9iVXBsb2FkSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnRNRDU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uSWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb24taWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvbi1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNTZXJ2ZXJFbmNyeXB0ZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3Qtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1Njoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1rZXktc2hhMjU2XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25TY29wZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9ja0Jsb2JVcGxvYWRFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2NrQmxvYl91cGxvYWRFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvY2tCbG9iVXBsb2FkRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvY2tCbG9iUHV0QmxvYkZyb21VcmxIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2NrQmxvYl9wdXRCbG9iRnJvbVVybEhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9ja0Jsb2JQdXRCbG9iRnJvbVVybEhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50TUQ1OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbklkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uLWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb24taWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzU2VydmVyRW5jcnlwdGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25LZXlTaGEyNTY6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uU2NvcGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvY2tCbG9iUHV0QmxvYkZyb21VcmxFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2NrQmxvYl9wdXRCbG9iRnJvbVVybEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9ja0Jsb2JQdXRCbG9iRnJvbVVybEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2NrQmxvYlN0YWdlQmxvY2tIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2NrQmxvYl9zdGFnZUJsb2NrSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2NrQmxvYlN0YWdlQmxvY2tIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgY29udGVudE1ENToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeE1zQ29udGVudENyYzY0OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb250ZW50LWNyYzY0XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvbnRlbnQtY3JjNjRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc1NlcnZlckVuY3J5cHRlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3Qtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uS2V5U2hhMjU2OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1rZXktc2hhMjU2XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2NrQmxvYlN0YWdlQmxvY2tFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2NrQmxvYl9zdGFnZUJsb2NrRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2NrQmxvYlN0YWdlQmxvY2tFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9ja0Jsb2JTdGFnZUJsb2NrRnJvbVVSTEhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvY2tCbG9iX3N0YWdlQmxvY2tGcm9tVVJMSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2NrQmxvYlN0YWdlQmxvY2tGcm9tVVJMSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNvbnRlbnRNRDU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB4TXNDb250ZW50Q3JjNjQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvbnRlbnQtY3JjNjRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29udGVudC1jcmM2NFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNTZXJ2ZXJFbmNyeXB0ZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3Qtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1Njoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1rZXktc2hhMjU2XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25TY29wZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9ja0Jsb2JTdGFnZUJsb2NrRnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvY2tCbG9iX3N0YWdlQmxvY2tGcm9tVVJMRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2NrQmxvYlN0YWdlQmxvY2tGcm9tVVJMRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvY2tCbG9iQ29tbWl0QmxvY2tMaXN0SGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9ja0Jsb2JfY29tbWl0QmxvY2tMaXN0SGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2NrQmxvYkNvbW1pdEJsb2NrTGlzdEhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50TUQ1OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeE1zQ29udGVudENyYzY0OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb250ZW50LWNyYzY0XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvbnRlbnQtY3JjNjRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uSWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb24taWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvbi1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNTZXJ2ZXJFbmNyeXB0ZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3Qtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1Njoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1rZXktc2hhMjU2XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25TY29wZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9ja0Jsb2JDb21taXRCbG9ja0xpc3RFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2NrQmxvYl9jb21taXRCbG9ja0xpc3RFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvY2tCbG9iQ29tbWl0QmxvY2tMaXN0RXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvY2tCbG9iR2V0QmxvY2tMaXN0SGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9ja0Jsb2JfZ2V0QmxvY2tMaXN0SGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2NrQmxvYkdldEJsb2NrTGlzdEhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50VHlwZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtdHlwZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC10eXBlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmxvYkNvbnRlbnRMZW5ndGg6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2ItY29udGVudC1sZW5ndGhcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1jb250ZW50LWxlbmd0aFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9ja0Jsb2JHZXRCbG9ja0xpc3RFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2NrQmxvYl9nZXRCbG9ja0xpc3RFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvY2tCbG9iR2V0QmxvY2tMaXN0RXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuXG52YXIgTWFwcGVycyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgQWNjZXNzUG9saWN5OiBBY2Nlc3NQb2xpY3ksXG4gICAgQXBwZW5kQmxvYkFwcGVuZEJsb2NrRXhjZXB0aW9uSGVhZGVyczogQXBwZW5kQmxvYkFwcGVuZEJsb2NrRXhjZXB0aW9uSGVhZGVycyxcbiAgICBBcHBlbmRCbG9iQXBwZW5kQmxvY2tGcm9tVXJsRXhjZXB0aW9uSGVhZGVyczogQXBwZW5kQmxvYkFwcGVuZEJsb2NrRnJvbVVybEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQXBwZW5kQmxvYkFwcGVuZEJsb2NrRnJvbVVybEhlYWRlcnM6IEFwcGVuZEJsb2JBcHBlbmRCbG9ja0Zyb21VcmxIZWFkZXJzLFxuICAgIEFwcGVuZEJsb2JBcHBlbmRCbG9ja0hlYWRlcnM6IEFwcGVuZEJsb2JBcHBlbmRCbG9ja0hlYWRlcnMsXG4gICAgQXBwZW5kQmxvYkNyZWF0ZUV4Y2VwdGlvbkhlYWRlcnM6IEFwcGVuZEJsb2JDcmVhdGVFeGNlcHRpb25IZWFkZXJzLFxuICAgIEFwcGVuZEJsb2JDcmVhdGVIZWFkZXJzOiBBcHBlbmRCbG9iQ3JlYXRlSGVhZGVycyxcbiAgICBBcHBlbmRCbG9iU2VhbEV4Y2VwdGlvbkhlYWRlcnM6IEFwcGVuZEJsb2JTZWFsRXhjZXB0aW9uSGVhZGVycyxcbiAgICBBcHBlbmRCbG9iU2VhbEhlYWRlcnM6IEFwcGVuZEJsb2JTZWFsSGVhZGVycyxcbiAgICBBcnJvd0NvbmZpZ3VyYXRpb246IEFycm93Q29uZmlndXJhdGlvbixcbiAgICBBcnJvd0ZpZWxkOiBBcnJvd0ZpZWxkLFxuICAgIEJsb2JBYm9ydENvcHlGcm9tVVJMRXhjZXB0aW9uSGVhZGVyczogQmxvYkFib3J0Q29weUZyb21VUkxFeGNlcHRpb25IZWFkZXJzLFxuICAgIEJsb2JBYm9ydENvcHlGcm9tVVJMSGVhZGVyczogQmxvYkFib3J0Q29weUZyb21VUkxIZWFkZXJzLFxuICAgIEJsb2JBY3F1aXJlTGVhc2VFeGNlcHRpb25IZWFkZXJzOiBCbG9iQWNxdWlyZUxlYXNlRXhjZXB0aW9uSGVhZGVycyxcbiAgICBCbG9iQWNxdWlyZUxlYXNlSGVhZGVyczogQmxvYkFjcXVpcmVMZWFzZUhlYWRlcnMsXG4gICAgQmxvYkJyZWFrTGVhc2VFeGNlcHRpb25IZWFkZXJzOiBCbG9iQnJlYWtMZWFzZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQmxvYkJyZWFrTGVhc2VIZWFkZXJzOiBCbG9iQnJlYWtMZWFzZUhlYWRlcnMsXG4gICAgQmxvYkNoYW5nZUxlYXNlRXhjZXB0aW9uSGVhZGVyczogQmxvYkNoYW5nZUxlYXNlRXhjZXB0aW9uSGVhZGVycyxcbiAgICBCbG9iQ2hhbmdlTGVhc2VIZWFkZXJzOiBCbG9iQ2hhbmdlTGVhc2VIZWFkZXJzLFxuICAgIEJsb2JDb3B5RnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnM6IEJsb2JDb3B5RnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQmxvYkNvcHlGcm9tVVJMSGVhZGVyczogQmxvYkNvcHlGcm9tVVJMSGVhZGVycyxcbiAgICBCbG9iQ3JlYXRlU25hcHNob3RFeGNlcHRpb25IZWFkZXJzOiBCbG9iQ3JlYXRlU25hcHNob3RFeGNlcHRpb25IZWFkZXJzLFxuICAgIEJsb2JDcmVhdGVTbmFwc2hvdEhlYWRlcnM6IEJsb2JDcmVhdGVTbmFwc2hvdEhlYWRlcnMsXG4gICAgQmxvYkRlbGV0ZUV4Y2VwdGlvbkhlYWRlcnM6IEJsb2JEZWxldGVFeGNlcHRpb25IZWFkZXJzLFxuICAgIEJsb2JEZWxldGVIZWFkZXJzOiBCbG9iRGVsZXRlSGVhZGVycyxcbiAgICBCbG9iRGVsZXRlSW1tdXRhYmlsaXR5UG9saWN5RXhjZXB0aW9uSGVhZGVyczogQmxvYkRlbGV0ZUltbXV0YWJpbGl0eVBvbGljeUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQmxvYkRlbGV0ZUltbXV0YWJpbGl0eVBvbGljeUhlYWRlcnM6IEJsb2JEZWxldGVJbW11dGFiaWxpdHlQb2xpY3lIZWFkZXJzLFxuICAgIEJsb2JEb3dubG9hZEV4Y2VwdGlvbkhlYWRlcnM6IEJsb2JEb3dubG9hZEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQmxvYkRvd25sb2FkSGVhZGVyczogQmxvYkRvd25sb2FkSGVhZGVycyxcbiAgICBCbG9iRmxhdExpc3RTZWdtZW50OiBCbG9iRmxhdExpc3RTZWdtZW50LFxuICAgIEJsb2JHZXRBY2NvdW50SW5mb0V4Y2VwdGlvbkhlYWRlcnM6IEJsb2JHZXRBY2NvdW50SW5mb0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQmxvYkdldEFjY291bnRJbmZvSGVhZGVyczogQmxvYkdldEFjY291bnRJbmZvSGVhZGVycyxcbiAgICBCbG9iR2V0UHJvcGVydGllc0V4Y2VwdGlvbkhlYWRlcnM6IEJsb2JHZXRQcm9wZXJ0aWVzRXhjZXB0aW9uSGVhZGVycyxcbiAgICBCbG9iR2V0UHJvcGVydGllc0hlYWRlcnM6IEJsb2JHZXRQcm9wZXJ0aWVzSGVhZGVycyxcbiAgICBCbG9iR2V0VGFnc0V4Y2VwdGlvbkhlYWRlcnM6IEJsb2JHZXRUYWdzRXhjZXB0aW9uSGVhZGVycyxcbiAgICBCbG9iR2V0VGFnc0hlYWRlcnM6IEJsb2JHZXRUYWdzSGVhZGVycyxcbiAgICBCbG9iSGllcmFyY2h5TGlzdFNlZ21lbnQ6IEJsb2JIaWVyYXJjaHlMaXN0U2VnbWVudCxcbiAgICBCbG9iSXRlbUludGVybmFsOiBCbG9iSXRlbUludGVybmFsLFxuICAgIEJsb2JOYW1lOiBCbG9iTmFtZSxcbiAgICBCbG9iUHJlZml4OiBCbG9iUHJlZml4LFxuICAgIEJsb2JQcm9wZXJ0aWVzSW50ZXJuYWw6IEJsb2JQcm9wZXJ0aWVzSW50ZXJuYWwsXG4gICAgQmxvYlF1ZXJ5RXhjZXB0aW9uSGVhZGVyczogQmxvYlF1ZXJ5RXhjZXB0aW9uSGVhZGVycyxcbiAgICBCbG9iUXVlcnlIZWFkZXJzOiBCbG9iUXVlcnlIZWFkZXJzLFxuICAgIEJsb2JSZWxlYXNlTGVhc2VFeGNlcHRpb25IZWFkZXJzOiBCbG9iUmVsZWFzZUxlYXNlRXhjZXB0aW9uSGVhZGVycyxcbiAgICBCbG9iUmVsZWFzZUxlYXNlSGVhZGVyczogQmxvYlJlbGVhc2VMZWFzZUhlYWRlcnMsXG4gICAgQmxvYlJlbmV3TGVhc2VFeGNlcHRpb25IZWFkZXJzOiBCbG9iUmVuZXdMZWFzZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQmxvYlJlbmV3TGVhc2VIZWFkZXJzOiBCbG9iUmVuZXdMZWFzZUhlYWRlcnMsXG4gICAgQmxvYlNlcnZpY2VQcm9wZXJ0aWVzOiBCbG9iU2VydmljZVByb3BlcnRpZXMsXG4gICAgQmxvYlNlcnZpY2VTdGF0aXN0aWNzOiBCbG9iU2VydmljZVN0YXRpc3RpY3MsXG4gICAgQmxvYlNldEV4cGlyeUV4Y2VwdGlvbkhlYWRlcnM6IEJsb2JTZXRFeHBpcnlFeGNlcHRpb25IZWFkZXJzLFxuICAgIEJsb2JTZXRFeHBpcnlIZWFkZXJzOiBCbG9iU2V0RXhwaXJ5SGVhZGVycyxcbiAgICBCbG9iU2V0SHR0cEhlYWRlcnNFeGNlcHRpb25IZWFkZXJzOiBCbG9iU2V0SHR0cEhlYWRlcnNFeGNlcHRpb25IZWFkZXJzLFxuICAgIEJsb2JTZXRIdHRwSGVhZGVyc0hlYWRlcnM6IEJsb2JTZXRIdHRwSGVhZGVyc0hlYWRlcnMsXG4gICAgQmxvYlNldEltbXV0YWJpbGl0eVBvbGljeUV4Y2VwdGlvbkhlYWRlcnM6IEJsb2JTZXRJbW11dGFiaWxpdHlQb2xpY3lFeGNlcHRpb25IZWFkZXJzLFxuICAgIEJsb2JTZXRJbW11dGFiaWxpdHlQb2xpY3lIZWFkZXJzOiBCbG9iU2V0SW1tdXRhYmlsaXR5UG9saWN5SGVhZGVycyxcbiAgICBCbG9iU2V0TGVnYWxIb2xkRXhjZXB0aW9uSGVhZGVyczogQmxvYlNldExlZ2FsSG9sZEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQmxvYlNldExlZ2FsSG9sZEhlYWRlcnM6IEJsb2JTZXRMZWdhbEhvbGRIZWFkZXJzLFxuICAgIEJsb2JTZXRNZXRhZGF0YUV4Y2VwdGlvbkhlYWRlcnM6IEJsb2JTZXRNZXRhZGF0YUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQmxvYlNldE1ldGFkYXRhSGVhZGVyczogQmxvYlNldE1ldGFkYXRhSGVhZGVycyxcbiAgICBCbG9iU2V0VGFnc0V4Y2VwdGlvbkhlYWRlcnM6IEJsb2JTZXRUYWdzRXhjZXB0aW9uSGVhZGVycyxcbiAgICBCbG9iU2V0VGFnc0hlYWRlcnM6IEJsb2JTZXRUYWdzSGVhZGVycyxcbiAgICBCbG9iU2V0VGllckV4Y2VwdGlvbkhlYWRlcnM6IEJsb2JTZXRUaWVyRXhjZXB0aW9uSGVhZGVycyxcbiAgICBCbG9iU2V0VGllckhlYWRlcnM6IEJsb2JTZXRUaWVySGVhZGVycyxcbiAgICBCbG9iU3RhcnRDb3B5RnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnM6IEJsb2JTdGFydENvcHlGcm9tVVJMRXhjZXB0aW9uSGVhZGVycyxcbiAgICBCbG9iU3RhcnRDb3B5RnJvbVVSTEhlYWRlcnM6IEJsb2JTdGFydENvcHlGcm9tVVJMSGVhZGVycyxcbiAgICBCbG9iVGFnOiBCbG9iVGFnLFxuICAgIEJsb2JUYWdzOiBCbG9iVGFncyxcbiAgICBCbG9iVW5kZWxldGVFeGNlcHRpb25IZWFkZXJzOiBCbG9iVW5kZWxldGVFeGNlcHRpb25IZWFkZXJzLFxuICAgIEJsb2JVbmRlbGV0ZUhlYWRlcnM6IEJsb2JVbmRlbGV0ZUhlYWRlcnMsXG4gICAgQmxvY2s6IEJsb2NrLFxuICAgIEJsb2NrQmxvYkNvbW1pdEJsb2NrTGlzdEV4Y2VwdGlvbkhlYWRlcnM6IEJsb2NrQmxvYkNvbW1pdEJsb2NrTGlzdEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQmxvY2tCbG9iQ29tbWl0QmxvY2tMaXN0SGVhZGVyczogQmxvY2tCbG9iQ29tbWl0QmxvY2tMaXN0SGVhZGVycyxcbiAgICBCbG9ja0Jsb2JHZXRCbG9ja0xpc3RFeGNlcHRpb25IZWFkZXJzOiBCbG9ja0Jsb2JHZXRCbG9ja0xpc3RFeGNlcHRpb25IZWFkZXJzLFxuICAgIEJsb2NrQmxvYkdldEJsb2NrTGlzdEhlYWRlcnM6IEJsb2NrQmxvYkdldEJsb2NrTGlzdEhlYWRlcnMsXG4gICAgQmxvY2tCbG9iUHV0QmxvYkZyb21VcmxFeGNlcHRpb25IZWFkZXJzOiBCbG9ja0Jsb2JQdXRCbG9iRnJvbVVybEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQmxvY2tCbG9iUHV0QmxvYkZyb21VcmxIZWFkZXJzOiBCbG9ja0Jsb2JQdXRCbG9iRnJvbVVybEhlYWRlcnMsXG4gICAgQmxvY2tCbG9iU3RhZ2VCbG9ja0V4Y2VwdGlvbkhlYWRlcnM6IEJsb2NrQmxvYlN0YWdlQmxvY2tFeGNlcHRpb25IZWFkZXJzLFxuICAgIEJsb2NrQmxvYlN0YWdlQmxvY2tGcm9tVVJMRXhjZXB0aW9uSGVhZGVyczogQmxvY2tCbG9iU3RhZ2VCbG9ja0Zyb21VUkxFeGNlcHRpb25IZWFkZXJzLFxuICAgIEJsb2NrQmxvYlN0YWdlQmxvY2tGcm9tVVJMSGVhZGVyczogQmxvY2tCbG9iU3RhZ2VCbG9ja0Zyb21VUkxIZWFkZXJzLFxuICAgIEJsb2NrQmxvYlN0YWdlQmxvY2tIZWFkZXJzOiBCbG9ja0Jsb2JTdGFnZUJsb2NrSGVhZGVycyxcbiAgICBCbG9ja0Jsb2JVcGxvYWRFeGNlcHRpb25IZWFkZXJzOiBCbG9ja0Jsb2JVcGxvYWRFeGNlcHRpb25IZWFkZXJzLFxuICAgIEJsb2NrQmxvYlVwbG9hZEhlYWRlcnM6IEJsb2NrQmxvYlVwbG9hZEhlYWRlcnMsXG4gICAgQmxvY2tMaXN0OiBCbG9ja0xpc3QsXG4gICAgQmxvY2tMb29rdXBMaXN0OiBCbG9ja0xvb2t1cExpc3QsXG4gICAgQ2xlYXJSYW5nZTogQ2xlYXJSYW5nZSxcbiAgICBDb250YWluZXJBY3F1aXJlTGVhc2VFeGNlcHRpb25IZWFkZXJzOiBDb250YWluZXJBY3F1aXJlTGVhc2VFeGNlcHRpb25IZWFkZXJzLFxuICAgIENvbnRhaW5lckFjcXVpcmVMZWFzZUhlYWRlcnM6IENvbnRhaW5lckFjcXVpcmVMZWFzZUhlYWRlcnMsXG4gICAgQ29udGFpbmVyQnJlYWtMZWFzZUV4Y2VwdGlvbkhlYWRlcnM6IENvbnRhaW5lckJyZWFrTGVhc2VFeGNlcHRpb25IZWFkZXJzLFxuICAgIENvbnRhaW5lckJyZWFrTGVhc2VIZWFkZXJzOiBDb250YWluZXJCcmVha0xlYXNlSGVhZGVycyxcbiAgICBDb250YWluZXJDaGFuZ2VMZWFzZUV4Y2VwdGlvbkhlYWRlcnM6IENvbnRhaW5lckNoYW5nZUxlYXNlRXhjZXB0aW9uSGVhZGVycyxcbiAgICBDb250YWluZXJDaGFuZ2VMZWFzZUhlYWRlcnM6IENvbnRhaW5lckNoYW5nZUxlYXNlSGVhZGVycyxcbiAgICBDb250YWluZXJDcmVhdGVFeGNlcHRpb25IZWFkZXJzOiBDb250YWluZXJDcmVhdGVFeGNlcHRpb25IZWFkZXJzLFxuICAgIENvbnRhaW5lckNyZWF0ZUhlYWRlcnM6IENvbnRhaW5lckNyZWF0ZUhlYWRlcnMsXG4gICAgQ29udGFpbmVyRGVsZXRlRXhjZXB0aW9uSGVhZGVyczogQ29udGFpbmVyRGVsZXRlRXhjZXB0aW9uSGVhZGVycyxcbiAgICBDb250YWluZXJEZWxldGVIZWFkZXJzOiBDb250YWluZXJEZWxldGVIZWFkZXJzLFxuICAgIENvbnRhaW5lckZpbHRlckJsb2JzRXhjZXB0aW9uSGVhZGVyczogQ29udGFpbmVyRmlsdGVyQmxvYnNFeGNlcHRpb25IZWFkZXJzLFxuICAgIENvbnRhaW5lckZpbHRlckJsb2JzSGVhZGVyczogQ29udGFpbmVyRmlsdGVyQmxvYnNIZWFkZXJzLFxuICAgIENvbnRhaW5lckdldEFjY2Vzc1BvbGljeUV4Y2VwdGlvbkhlYWRlcnM6IENvbnRhaW5lckdldEFjY2Vzc1BvbGljeUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQ29udGFpbmVyR2V0QWNjZXNzUG9saWN5SGVhZGVyczogQ29udGFpbmVyR2V0QWNjZXNzUG9saWN5SGVhZGVycyxcbiAgICBDb250YWluZXJHZXRBY2NvdW50SW5mb0V4Y2VwdGlvbkhlYWRlcnM6IENvbnRhaW5lckdldEFjY291bnRJbmZvRXhjZXB0aW9uSGVhZGVycyxcbiAgICBDb250YWluZXJHZXRBY2NvdW50SW5mb0hlYWRlcnM6IENvbnRhaW5lckdldEFjY291bnRJbmZvSGVhZGVycyxcbiAgICBDb250YWluZXJHZXRQcm9wZXJ0aWVzRXhjZXB0aW9uSGVhZGVyczogQ29udGFpbmVyR2V0UHJvcGVydGllc0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQ29udGFpbmVyR2V0UHJvcGVydGllc0hlYWRlcnM6IENvbnRhaW5lckdldFByb3BlcnRpZXNIZWFkZXJzLFxuICAgIENvbnRhaW5lckl0ZW06IENvbnRhaW5lckl0ZW0sXG4gICAgQ29udGFpbmVyTGlzdEJsb2JGbGF0U2VnbWVudEV4Y2VwdGlvbkhlYWRlcnM6IENvbnRhaW5lckxpc3RCbG9iRmxhdFNlZ21lbnRFeGNlcHRpb25IZWFkZXJzLFxuICAgIENvbnRhaW5lckxpc3RCbG9iRmxhdFNlZ21lbnRIZWFkZXJzOiBDb250YWluZXJMaXN0QmxvYkZsYXRTZWdtZW50SGVhZGVycyxcbiAgICBDb250YWluZXJMaXN0QmxvYkhpZXJhcmNoeVNlZ21lbnRFeGNlcHRpb25IZWFkZXJzOiBDb250YWluZXJMaXN0QmxvYkhpZXJhcmNoeVNlZ21lbnRFeGNlcHRpb25IZWFkZXJzLFxuICAgIENvbnRhaW5lckxpc3RCbG9iSGllcmFyY2h5U2VnbWVudEhlYWRlcnM6IENvbnRhaW5lckxpc3RCbG9iSGllcmFyY2h5U2VnbWVudEhlYWRlcnMsXG4gICAgQ29udGFpbmVyUHJvcGVydGllczogQ29udGFpbmVyUHJvcGVydGllcyxcbiAgICBDb250YWluZXJSZWxlYXNlTGVhc2VFeGNlcHRpb25IZWFkZXJzOiBDb250YWluZXJSZWxlYXNlTGVhc2VFeGNlcHRpb25IZWFkZXJzLFxuICAgIENvbnRhaW5lclJlbGVhc2VMZWFzZUhlYWRlcnM6IENvbnRhaW5lclJlbGVhc2VMZWFzZUhlYWRlcnMsXG4gICAgQ29udGFpbmVyUmVuYW1lRXhjZXB0aW9uSGVhZGVyczogQ29udGFpbmVyUmVuYW1lRXhjZXB0aW9uSGVhZGVycyxcbiAgICBDb250YWluZXJSZW5hbWVIZWFkZXJzOiBDb250YWluZXJSZW5hbWVIZWFkZXJzLFxuICAgIENvbnRhaW5lclJlbmV3TGVhc2VFeGNlcHRpb25IZWFkZXJzOiBDb250YWluZXJSZW5ld0xlYXNlRXhjZXB0aW9uSGVhZGVycyxcbiAgICBDb250YWluZXJSZW5ld0xlYXNlSGVhZGVyczogQ29udGFpbmVyUmVuZXdMZWFzZUhlYWRlcnMsXG4gICAgQ29udGFpbmVyUmVzdG9yZUV4Y2VwdGlvbkhlYWRlcnM6IENvbnRhaW5lclJlc3RvcmVFeGNlcHRpb25IZWFkZXJzLFxuICAgIENvbnRhaW5lclJlc3RvcmVIZWFkZXJzOiBDb250YWluZXJSZXN0b3JlSGVhZGVycyxcbiAgICBDb250YWluZXJTZXRBY2Nlc3NQb2xpY3lFeGNlcHRpb25IZWFkZXJzOiBDb250YWluZXJTZXRBY2Nlc3NQb2xpY3lFeGNlcHRpb25IZWFkZXJzLFxuICAgIENvbnRhaW5lclNldEFjY2Vzc1BvbGljeUhlYWRlcnM6IENvbnRhaW5lclNldEFjY2Vzc1BvbGljeUhlYWRlcnMsXG4gICAgQ29udGFpbmVyU2V0TWV0YWRhdGFFeGNlcHRpb25IZWFkZXJzOiBDb250YWluZXJTZXRNZXRhZGF0YUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQ29udGFpbmVyU2V0TWV0YWRhdGFIZWFkZXJzOiBDb250YWluZXJTZXRNZXRhZGF0YUhlYWRlcnMsXG4gICAgQ29udGFpbmVyU3VibWl0QmF0Y2hFeGNlcHRpb25IZWFkZXJzOiBDb250YWluZXJTdWJtaXRCYXRjaEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQ29udGFpbmVyU3VibWl0QmF0Y2hIZWFkZXJzOiBDb250YWluZXJTdWJtaXRCYXRjaEhlYWRlcnMsXG4gICAgQ29yc1J1bGU6IENvcnNSdWxlLFxuICAgIERlbGltaXRlZFRleHRDb25maWd1cmF0aW9uOiBEZWxpbWl0ZWRUZXh0Q29uZmlndXJhdGlvbixcbiAgICBGaWx0ZXJCbG9iSXRlbTogRmlsdGVyQmxvYkl0ZW0sXG4gICAgRmlsdGVyQmxvYlNlZ21lbnQ6IEZpbHRlckJsb2JTZWdtZW50LFxuICAgIEdlb1JlcGxpY2F0aW9uOiBHZW9SZXBsaWNhdGlvbixcbiAgICBKc29uVGV4dENvbmZpZ3VyYXRpb246IEpzb25UZXh0Q29uZmlndXJhdGlvbixcbiAgICBLZXlJbmZvOiBLZXlJbmZvLFxuICAgIExpc3RCbG9ic0ZsYXRTZWdtZW50UmVzcG9uc2U6IExpc3RCbG9ic0ZsYXRTZWdtZW50UmVzcG9uc2UsXG4gICAgTGlzdEJsb2JzSGllcmFyY2h5U2VnbWVudFJlc3BvbnNlOiBMaXN0QmxvYnNIaWVyYXJjaHlTZWdtZW50UmVzcG9uc2UsXG4gICAgTGlzdENvbnRhaW5lcnNTZWdtZW50UmVzcG9uc2U6IExpc3RDb250YWluZXJzU2VnbWVudFJlc3BvbnNlLFxuICAgIExvZ2dpbmc6IExvZ2dpbmcsXG4gICAgTWV0cmljczogTWV0cmljcyxcbiAgICBQYWdlQmxvYkNsZWFyUGFnZXNFeGNlcHRpb25IZWFkZXJzOiBQYWdlQmxvYkNsZWFyUGFnZXNFeGNlcHRpb25IZWFkZXJzLFxuICAgIFBhZ2VCbG9iQ2xlYXJQYWdlc0hlYWRlcnM6IFBhZ2VCbG9iQ2xlYXJQYWdlc0hlYWRlcnMsXG4gICAgUGFnZUJsb2JDb3B5SW5jcmVtZW50YWxFeGNlcHRpb25IZWFkZXJzOiBQYWdlQmxvYkNvcHlJbmNyZW1lbnRhbEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgUGFnZUJsb2JDb3B5SW5jcmVtZW50YWxIZWFkZXJzOiBQYWdlQmxvYkNvcHlJbmNyZW1lbnRhbEhlYWRlcnMsXG4gICAgUGFnZUJsb2JDcmVhdGVFeGNlcHRpb25IZWFkZXJzOiBQYWdlQmxvYkNyZWF0ZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgUGFnZUJsb2JDcmVhdGVIZWFkZXJzOiBQYWdlQmxvYkNyZWF0ZUhlYWRlcnMsXG4gICAgUGFnZUJsb2JHZXRQYWdlUmFuZ2VzRGlmZkV4Y2VwdGlvbkhlYWRlcnM6IFBhZ2VCbG9iR2V0UGFnZVJhbmdlc0RpZmZFeGNlcHRpb25IZWFkZXJzLFxuICAgIFBhZ2VCbG9iR2V0UGFnZVJhbmdlc0RpZmZIZWFkZXJzOiBQYWdlQmxvYkdldFBhZ2VSYW5nZXNEaWZmSGVhZGVycyxcbiAgICBQYWdlQmxvYkdldFBhZ2VSYW5nZXNFeGNlcHRpb25IZWFkZXJzOiBQYWdlQmxvYkdldFBhZ2VSYW5nZXNFeGNlcHRpb25IZWFkZXJzLFxuICAgIFBhZ2VCbG9iR2V0UGFnZVJhbmdlc0hlYWRlcnM6IFBhZ2VCbG9iR2V0UGFnZVJhbmdlc0hlYWRlcnMsXG4gICAgUGFnZUJsb2JSZXNpemVFeGNlcHRpb25IZWFkZXJzOiBQYWdlQmxvYlJlc2l6ZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgUGFnZUJsb2JSZXNpemVIZWFkZXJzOiBQYWdlQmxvYlJlc2l6ZUhlYWRlcnMsXG4gICAgUGFnZUJsb2JVcGRhdGVTZXF1ZW5jZU51bWJlckV4Y2VwdGlvbkhlYWRlcnM6IFBhZ2VCbG9iVXBkYXRlU2VxdWVuY2VOdW1iZXJFeGNlcHRpb25IZWFkZXJzLFxuICAgIFBhZ2VCbG9iVXBkYXRlU2VxdWVuY2VOdW1iZXJIZWFkZXJzOiBQYWdlQmxvYlVwZGF0ZVNlcXVlbmNlTnVtYmVySGVhZGVycyxcbiAgICBQYWdlQmxvYlVwbG9hZFBhZ2VzRXhjZXB0aW9uSGVhZGVyczogUGFnZUJsb2JVcGxvYWRQYWdlc0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgUGFnZUJsb2JVcGxvYWRQYWdlc0Zyb21VUkxFeGNlcHRpb25IZWFkZXJzOiBQYWdlQmxvYlVwbG9hZFBhZ2VzRnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgUGFnZUJsb2JVcGxvYWRQYWdlc0Zyb21VUkxIZWFkZXJzOiBQYWdlQmxvYlVwbG9hZFBhZ2VzRnJvbVVSTEhlYWRlcnMsXG4gICAgUGFnZUJsb2JVcGxvYWRQYWdlc0hlYWRlcnM6IFBhZ2VCbG9iVXBsb2FkUGFnZXNIZWFkZXJzLFxuICAgIFBhZ2VMaXN0OiBQYWdlTGlzdCxcbiAgICBQYWdlUmFuZ2U6IFBhZ2VSYW5nZSxcbiAgICBRdWVyeUZvcm1hdDogUXVlcnlGb3JtYXQsXG4gICAgUXVlcnlSZXF1ZXN0OiBRdWVyeVJlcXVlc3QsXG4gICAgUXVlcnlTZXJpYWxpemF0aW9uOiBRdWVyeVNlcmlhbGl6YXRpb24sXG4gICAgUmV0ZW50aW9uUG9saWN5OiBSZXRlbnRpb25Qb2xpY3ksXG4gICAgU2VydmljZUZpbHRlckJsb2JzRXhjZXB0aW9uSGVhZGVyczogU2VydmljZUZpbHRlckJsb2JzRXhjZXB0aW9uSGVhZGVycyxcbiAgICBTZXJ2aWNlRmlsdGVyQmxvYnNIZWFkZXJzOiBTZXJ2aWNlRmlsdGVyQmxvYnNIZWFkZXJzLFxuICAgIFNlcnZpY2VHZXRBY2NvdW50SW5mb0V4Y2VwdGlvbkhlYWRlcnM6IFNlcnZpY2VHZXRBY2NvdW50SW5mb0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgU2VydmljZUdldEFjY291bnRJbmZvSGVhZGVyczogU2VydmljZUdldEFjY291bnRJbmZvSGVhZGVycyxcbiAgICBTZXJ2aWNlR2V0UHJvcGVydGllc0V4Y2VwdGlvbkhlYWRlcnM6IFNlcnZpY2VHZXRQcm9wZXJ0aWVzRXhjZXB0aW9uSGVhZGVycyxcbiAgICBTZXJ2aWNlR2V0UHJvcGVydGllc0hlYWRlcnM6IFNlcnZpY2VHZXRQcm9wZXJ0aWVzSGVhZGVycyxcbiAgICBTZXJ2aWNlR2V0U3RhdGlzdGljc0V4Y2VwdGlvbkhlYWRlcnM6IFNlcnZpY2VHZXRTdGF0aXN0aWNzRXhjZXB0aW9uSGVhZGVycyxcbiAgICBTZXJ2aWNlR2V0U3RhdGlzdGljc0hlYWRlcnM6IFNlcnZpY2VHZXRTdGF0aXN0aWNzSGVhZGVycyxcbiAgICBTZXJ2aWNlR2V0VXNlckRlbGVnYXRpb25LZXlFeGNlcHRpb25IZWFkZXJzOiBTZXJ2aWNlR2V0VXNlckRlbGVnYXRpb25LZXlFeGNlcHRpb25IZWFkZXJzLFxuICAgIFNlcnZpY2VHZXRVc2VyRGVsZWdhdGlvbktleUhlYWRlcnM6IFNlcnZpY2VHZXRVc2VyRGVsZWdhdGlvbktleUhlYWRlcnMsXG4gICAgU2VydmljZUxpc3RDb250YWluZXJzU2VnbWVudEV4Y2VwdGlvbkhlYWRlcnM6IFNlcnZpY2VMaXN0Q29udGFpbmVyc1NlZ21lbnRFeGNlcHRpb25IZWFkZXJzLFxuICAgIFNlcnZpY2VMaXN0Q29udGFpbmVyc1NlZ21lbnRIZWFkZXJzOiBTZXJ2aWNlTGlzdENvbnRhaW5lcnNTZWdtZW50SGVhZGVycyxcbiAgICBTZXJ2aWNlU2V0UHJvcGVydGllc0V4Y2VwdGlvbkhlYWRlcnM6IFNlcnZpY2VTZXRQcm9wZXJ0aWVzRXhjZXB0aW9uSGVhZGVycyxcbiAgICBTZXJ2aWNlU2V0UHJvcGVydGllc0hlYWRlcnM6IFNlcnZpY2VTZXRQcm9wZXJ0aWVzSGVhZGVycyxcbiAgICBTZXJ2aWNlU3VibWl0QmF0Y2hFeGNlcHRpb25IZWFkZXJzOiBTZXJ2aWNlU3VibWl0QmF0Y2hFeGNlcHRpb25IZWFkZXJzLFxuICAgIFNlcnZpY2VTdWJtaXRCYXRjaEhlYWRlcnM6IFNlcnZpY2VTdWJtaXRCYXRjaEhlYWRlcnMsXG4gICAgU2lnbmVkSWRlbnRpZmllcjogU2lnbmVkSWRlbnRpZmllcixcbiAgICBTdGF0aWNXZWJzaXRlOiBTdGF0aWNXZWJzaXRlLFxuICAgIFN0b3JhZ2VFcnJvcjogU3RvcmFnZUVycm9yLFxuICAgIFVzZXJEZWxlZ2F0aW9uS2V5OiBVc2VyRGVsZWdhdGlvbktleVxufSk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAqXG4gKiBDb2RlIGdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEF1dG9SZXN0IENvZGUgR2VuZXJhdG9yLlxuICogQ2hhbmdlcyBtYXkgY2F1c2UgaW5jb3JyZWN0IGJlaGF2aW9yIGFuZCB3aWxsIGJlIGxvc3QgaWYgdGhlIGNvZGUgaXMgcmVnZW5lcmF0ZWQuXG4gKi9cbmNvbnN0IGNvbnRlbnRUeXBlID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJjb250ZW50VHlwZVwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcImFwcGxpY2F0aW9uL3htbFwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJDb250ZW50LVR5cGVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGJsb2JTZXJ2aWNlUHJvcGVydGllcyA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImJsb2JTZXJ2aWNlUHJvcGVydGllc1wiLFxuICAgIG1hcHBlcjogQmxvYlNlcnZpY2VQcm9wZXJ0aWVzLFxufTtcbmNvbnN0IGFjY2VwdCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImFjY2VwdFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwiYXBwbGljYXRpb24veG1sXCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkFjY2VwdFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgdXJsID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwidXJsXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcInVybFwiLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgeG1sTmFtZTogXCJ1cmxcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHNraXBFbmNvZGluZzogdHJ1ZSxcbn07XG5jb25zdCByZXN0eXBlID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwicmVzdHlwZVwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwic2VydmljZVwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJyZXN0eXBlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb21wID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiY29tcFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwicHJvcGVydGllc1wiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb21wXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCB0aW1lb3V0SW5TZWNvbmRzID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJ0aW1lb3V0SW5TZWNvbmRzXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBjb25zdHJhaW50czoge1xuICAgICAgICAgICAgSW5jbHVzaXZlTWluaW11bTogMCxcbiAgICAgICAgfSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwidGltZW91dFwiLFxuICAgICAgICB4bWxOYW1lOiBcInRpbWVvdXRcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHZlcnNpb24gPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJ2ZXJzaW9uXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCIyMDI0LTExLTA0XCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgcmVxdWVzdElkID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJyZXF1ZXN0SWRcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBhY2NlcHQxID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiYWNjZXB0XCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJhcHBsaWNhdGlvbi94bWxcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQWNjZXB0XCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb21wMSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImNvbXBcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcInN0YXRzXCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbXBcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGNvbXAyID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiY29tcFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwibGlzdFwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb21wXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBwcmVmaXggPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcInByZWZpeFwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwicHJlZml4XCIsXG4gICAgICAgIHhtbE5hbWU6IFwicHJlZml4XCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBtYXJrZXIgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcIm1hcmtlclwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibWFya2VyXCIsXG4gICAgICAgIHhtbE5hbWU6IFwibWFya2VyXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBtYXhQYWdlU2l6ZSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwibWF4UGFnZVNpemVcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGNvbnN0cmFpbnRzOiB7XG4gICAgICAgICAgICBJbmNsdXNpdmVNaW5pbXVtOiAxLFxuICAgICAgICB9LFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJtYXhyZXN1bHRzXCIsXG4gICAgICAgIHhtbE5hbWU6IFwibWF4cmVzdWx0c1wiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgaW5jbHVkZSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiaW5jbHVkZVwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiaW5jbHVkZVwiLFxuICAgICAgICB4bWxOYW1lOiBcImluY2x1ZGVcIixcbiAgICAgICAgeG1sRWxlbWVudE5hbWU6IFwiTGlzdENvbnRhaW5lcnNJbmNsdWRlVHlwZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlNlcXVlbmNlXCIsXG4gICAgICAgICAgICBlbGVtZW50OiB7XG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wibWV0YWRhdGFcIiwgXCJkZWxldGVkXCIsIFwic3lzdGVtXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgY29sbGVjdGlvbkZvcm1hdDogXCJDU1ZcIixcbn07XG5jb25zdCBrZXlJbmZvID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwia2V5SW5mb1wiLFxuICAgIG1hcHBlcjogS2V5SW5mbyxcbn07XG5jb25zdCBjb21wMyA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImNvbXBcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcInVzZXJkZWxlZ2F0aW9ua2V5XCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbXBcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHJlc3R5cGUxID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwicmVzdHlwZVwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwiYWNjb3VudFwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJyZXN0eXBlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBib2R5ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiYm9keVwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJib2R5XCIsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB4bWxOYW1lOiBcImJvZHlcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJlYW1cIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGNvbXA0ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiY29tcFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwiYmF0Y2hcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29tcFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgY29udGVudExlbmd0aCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImNvbnRlbnRMZW5ndGhcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGVudC1MZW5ndGhcIixcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIHhtbE5hbWU6IFwiQ29udGVudC1MZW5ndGhcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IG11bHRpcGFydENvbnRlbnRUeXBlID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwibXVsdGlwYXJ0Q29udGVudFR5cGVcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGVudC1UeXBlXCIsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB4bWxOYW1lOiBcIkNvbnRlbnQtVHlwZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgY29tcDUgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb21wXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJibG9ic1wiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb21wXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCB3aGVyZSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwid2hlcmVcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIndoZXJlXCIsXG4gICAgICAgIHhtbE5hbWU6IFwid2hlcmVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHJlc3R5cGUyID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwicmVzdHlwZVwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwiY29udGFpbmVyXCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcInJlc3R5cGVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IG1ldGFkYXRhID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJtZXRhZGF0YVwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1tZXRhXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1tZXRhXCIsXG4gICAgICAgIGhlYWRlckNvbGxlY3Rpb25QcmVmaXg6IFwieC1tcy1tZXRhLVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIkRpY3Rpb25hcnlcIixcbiAgICAgICAgICAgIHZhbHVlOiB7IHR5cGU6IHsgbmFtZTogXCJTdHJpbmdcIiB9IH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBhY2Nlc3MgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcImFjY2Vzc1wiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLXB1YmxpYy1hY2Nlc3NcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2ItcHVibGljLWFjY2Vzc1wiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcImNvbnRhaW5lclwiLCBcImJsb2JcIl0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBkZWZhdWx0RW5jcnlwdGlvblNjb3BlID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcbiAgICAgICAgXCJvcHRpb25zXCIsXG4gICAgICAgIFwiY29udGFpbmVyRW5jcnlwdGlvblNjb3BlXCIsXG4gICAgICAgIFwiZGVmYXVsdEVuY3J5cHRpb25TY29wZVwiLFxuICAgIF0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZGVmYXVsdC1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1kZWZhdWx0LWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHByZXZlbnRFbmNyeXB0aW9uU2NvcGVPdmVycmlkZSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXG4gICAgICAgIFwib3B0aW9uc1wiLFxuICAgICAgICBcImNvbnRhaW5lckVuY3J5cHRpb25TY29wZVwiLFxuICAgICAgICBcInByZXZlbnRFbmNyeXB0aW9uU2NvcGVPdmVycmlkZVwiLFxuICAgIF0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZGVueS1lbmNyeXB0aW9uLXNjb3BlLW92ZXJyaWRlXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1kZW55LWVuY3J5cHRpb24tc2NvcGUtb3ZlcnJpZGVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBsZWFzZUlkID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJsZWFzZUFjY2Vzc0NvbmRpdGlvbnNcIiwgXCJsZWFzZUlkXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxlYXNlLWlkXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1sZWFzZS1pZFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgaWZNb2RpZmllZFNpbmNlID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnNcIiwgXCJpZk1vZGlmaWVkU2luY2VcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIklmLU1vZGlmaWVkLVNpbmNlXCIsXG4gICAgICAgIHhtbE5hbWU6IFwiSWYtTW9kaWZpZWQtU2luY2VcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGlmVW5tb2RpZmllZFNpbmNlID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnNcIiwgXCJpZlVubW9kaWZpZWRTaW5jZVwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiSWYtVW5tb2RpZmllZC1TaW5jZVwiLFxuICAgICAgICB4bWxOYW1lOiBcIklmLVVubW9kaWZpZWQtU2luY2VcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGNvbXA2ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiY29tcFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwibWV0YWRhdGFcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29tcFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgY29tcDcgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb21wXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJhY2xcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29tcFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgY29udGFpbmVyQWNsID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJjb250YWluZXJBY2xcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRhaW5lckFjbFwiLFxuICAgICAgICB4bWxOYW1lOiBcIlNpZ25lZElkZW50aWZpZXJzXCIsXG4gICAgICAgIHhtbElzV3JhcHBlZDogdHJ1ZSxcbiAgICAgICAgeG1sRWxlbWVudE5hbWU6IFwiU2lnbmVkSWRlbnRpZmllclwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlNlcXVlbmNlXCIsXG4gICAgICAgICAgICBlbGVtZW50OiB7XG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiU2lnbmVkSWRlbnRpZmllclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgY29tcDggPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb21wXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJ1bmRlbGV0ZVwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb21wXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBkZWxldGVkQ29udGFpbmVyTmFtZSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiZGVsZXRlZENvbnRhaW5lck5hbWVcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZGVsZXRlZC1jb250YWluZXItbmFtZVwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtZGVsZXRlZC1jb250YWluZXItbmFtZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgZGVsZXRlZENvbnRhaW5lclZlcnNpb24gPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcImRlbGV0ZWRDb250YWluZXJWZXJzaW9uXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWRlbGV0ZWQtY29udGFpbmVyLXZlcnNpb25cIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWRlbGV0ZWQtY29udGFpbmVyLXZlcnNpb25cIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGNvbXA5ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiY29tcFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwicmVuYW1lXCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbXBcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHNvdXJjZUNvbnRhaW5lck5hbWUgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJzb3VyY2VDb250YWluZXJOYW1lXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtc291cmNlLWNvbnRhaW5lci1uYW1lXCIsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtc291cmNlLWNvbnRhaW5lci1uYW1lXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBzb3VyY2VMZWFzZUlkID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJzb3VyY2VMZWFzZUlkXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXNvdXJjZS1sZWFzZS1pZFwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtc291cmNlLWxlYXNlLWlkXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb21wMTAgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb21wXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJsZWFzZVwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb21wXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBhY3Rpb24gPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJhY3Rpb25cIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcImFjcXVpcmVcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWFzZS1hY3Rpb25cIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGR1cmF0aW9uID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJkdXJhdGlvblwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWFzZS1kdXJhdGlvblwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGVhc2UtZHVyYXRpb25cIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHByb3Bvc2VkTGVhc2VJZCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwicHJvcG9zZWRMZWFzZUlkXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXByb3Bvc2VkLWxlYXNlLWlkXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1wcm9wb3NlZC1sZWFzZS1pZFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgYWN0aW9uMSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImFjdGlvblwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwicmVsZWFzZVwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxlYXNlLWFjdGlvblwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgbGVhc2VJZDEgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJsZWFzZUlkXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVhc2UtaWRcIixcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1sZWFzZS1pZFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgYWN0aW9uMiA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImFjdGlvblwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwicmVuZXdcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWFzZS1hY3Rpb25cIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGFjdGlvbjMgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJhY3Rpb25cIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcImJyZWFrXCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVhc2UtYWN0aW9uXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBicmVha1BlcmlvZCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiYnJlYWtQZXJpb2RcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVhc2UtYnJlYWstcGVyaW9kXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1sZWFzZS1icmVhay1wZXJpb2RcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGFjdGlvbjQgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJhY3Rpb25cIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcImNoYW5nZVwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxlYXNlLWFjdGlvblwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgcHJvcG9zZWRMZWFzZUlkMSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcInByb3Bvc2VkTGVhc2VJZFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXByb3Bvc2VkLWxlYXNlLWlkXCIsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtcHJvcG9zZWQtbGVhc2UtaWRcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGluY2x1ZGUxID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJpbmNsdWRlXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJpbmNsdWRlXCIsXG4gICAgICAgIHhtbE5hbWU6IFwiaW5jbHVkZVwiLFxuICAgICAgICB4bWxFbGVtZW50TmFtZTogXCJMaXN0QmxvYnNJbmNsdWRlSXRlbVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlNlcXVlbmNlXCIsXG4gICAgICAgICAgICBlbGVtZW50OiB7XG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJjb3B5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRlbGV0ZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibWV0YWRhdGFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwic25hcHNob3RzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInVuY29tbWl0dGVkYmxvYnNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwidmVyc2lvbnNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwidGFnc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJpbW11dGFiaWxpdHlwb2xpY3lcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibGVnYWxob2xkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRlbGV0ZWR3aXRodmVyc2lvbnNcIixcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIGNvbGxlY3Rpb25Gb3JtYXQ6IFwiQ1NWXCIsXG59O1xuY29uc3QgZGVsaW1pdGVyID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiZGVsaW1pdGVyXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRlbGltaXRlclwiLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgeG1sTmFtZTogXCJkZWxpbWl0ZXJcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHNuYXBzaG90ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJzbmFwc2hvdFwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwic25hcHNob3RcIixcbiAgICAgICAgeG1sTmFtZTogXCJzbmFwc2hvdFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgdmVyc2lvbklkID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJ2ZXJzaW9uSWRcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcInZlcnNpb25pZFwiLFxuICAgICAgICB4bWxOYW1lOiBcInZlcnNpb25pZFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgcmFuZ2UgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcInJhbmdlXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJhbmdlXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1yYW5nZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgcmFuZ2VHZXRDb250ZW50TUQ1ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJyYW5nZUdldENvbnRlbnRNRDVcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmFuZ2UtZ2V0LWNvbnRlbnQtbWQ1XCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1yYW5nZS1nZXQtY29udGVudC1tZDVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCByYW5nZUdldENvbnRlbnRDUkM2NCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwicmFuZ2VHZXRDb250ZW50Q1JDNjRcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmFuZ2UtZ2V0LWNvbnRlbnQtY3JjNjRcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJhbmdlLWdldC1jb250ZW50LWNyYzY0XCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgZW5jcnlwdGlvbktleSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiY3BrSW5mb1wiLCBcImVuY3J5cHRpb25LZXlcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1rZXlcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5XCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBlbmNyeXB0aW9uS2V5U2hhMjU2ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJjcGtJbmZvXCIsIFwiZW5jcnlwdGlvbktleVNoYTI1NlwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgZW5jcnlwdGlvbkFsZ29yaXRobSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiY3BrSW5mb1wiLCBcImVuY3J5cHRpb25BbGdvcml0aG1cIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1hbGdvcml0aG1cIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tYWxnb3JpdGhtXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBpZk1hdGNoID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnNcIiwgXCJpZk1hdGNoXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJJZi1NYXRjaFwiLFxuICAgICAgICB4bWxOYW1lOiBcIklmLU1hdGNoXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBpZk5vbmVNYXRjaCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwibW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zXCIsIFwiaWZOb25lTWF0Y2hcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIklmLU5vbmUtTWF0Y2hcIixcbiAgICAgICAgeG1sTmFtZTogXCJJZi1Ob25lLU1hdGNoXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBpZlRhZ3MgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcIm1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uc1wiLCBcImlmVGFnc1wiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1pZi10YWdzXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1pZi10YWdzXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBkZWxldGVTbmFwc2hvdHMgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcImRlbGV0ZVNuYXBzaG90c1wiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1kZWxldGUtc25hcHNob3RzXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1kZWxldGUtc25hcHNob3RzXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wiaW5jbHVkZVwiLCBcIm9ubHlcIl0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBibG9iRGVsZXRlVHlwZSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiYmxvYkRlbGV0ZVR5cGVcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRlbGV0ZXR5cGVcIixcbiAgICAgICAgeG1sTmFtZTogXCJkZWxldGV0eXBlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb21wMTEgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb21wXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJleHBpcnlcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29tcFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgZXhwaXJ5T3B0aW9ucyA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImV4cGlyeU9wdGlvbnNcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1leHBpcnktb3B0aW9uXCIsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXhwaXJ5LW9wdGlvblwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgZXhwaXJlc09uID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJleHBpcmVzT25cIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXhwaXJ5LXRpbWVcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWV4cGlyeS10aW1lXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBibG9iQ2FjaGVDb250cm9sID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJibG9iSHR0cEhlYWRlcnNcIiwgXCJibG9iQ2FjaGVDb250cm9sXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2ItY2FjaGUtY29udHJvbFwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1jYWNoZS1jb250cm9sXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBibG9iQ29udGVudFR5cGUgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcImJsb2JIdHRwSGVhZGVyc1wiLCBcImJsb2JDb250ZW50VHlwZVwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLWNvbnRlbnQtdHlwZVwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1jb250ZW50LXR5cGVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGJsb2JDb250ZW50TUQ1ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJibG9iSHR0cEhlYWRlcnNcIiwgXCJibG9iQ29udGVudE1ENVwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLWNvbnRlbnQtbWQ1XCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLWNvbnRlbnQtbWQ1XCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBibG9iQ29udGVudEVuY29kaW5nID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJibG9iSHR0cEhlYWRlcnNcIiwgXCJibG9iQ29udGVudEVuY29kaW5nXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2ItY29udGVudC1lbmNvZGluZ1wiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1jb250ZW50LWVuY29kaW5nXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBibG9iQ29udGVudExhbmd1YWdlID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJibG9iSHR0cEhlYWRlcnNcIiwgXCJibG9iQ29udGVudExhbmd1YWdlXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2ItY29udGVudC1sYW5ndWFnZVwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1jb250ZW50LWxhbmd1YWdlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBibG9iQ29udGVudERpc3Bvc2l0aW9uID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJibG9iSHR0cEhlYWRlcnNcIiwgXCJibG9iQ29udGVudERpc3Bvc2l0aW9uXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2ItY29udGVudC1kaXNwb3NpdGlvblwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1jb250ZW50LWRpc3Bvc2l0aW9uXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb21wMTIgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb21wXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJpbW11dGFiaWxpdHlQb2xpY2llc1wiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb21wXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBpbW11dGFiaWxpdHlQb2xpY3lFeHBpcnkgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcImltbXV0YWJpbGl0eVBvbGljeUV4cGlyeVwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1pbW11dGFiaWxpdHktcG9saWN5LXVudGlsLWRhdGVcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWltbXV0YWJpbGl0eS1wb2xpY3ktdW50aWwtZGF0ZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgaW1tdXRhYmlsaXR5UG9saWN5TW9kZSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiaW1tdXRhYmlsaXR5UG9saWN5TW9kZVwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1pbW11dGFiaWxpdHktcG9saWN5LW1vZGVcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWltbXV0YWJpbGl0eS1wb2xpY3ktbW9kZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcIk11dGFibGVcIiwgXCJVbmxvY2tlZFwiLCBcIkxvY2tlZFwiXSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGNvbXAxMyA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImNvbXBcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcImxlZ2FsaG9sZFwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb21wXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBsZWdhbEhvbGQgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJsZWdhbEhvbGRcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWdhbC1ob2xkXCIsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGVnYWwtaG9sZFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGVuY3J5cHRpb25TY29wZSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiZW5jcnlwdGlvblNjb3BlXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGNvbXAxNCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImNvbXBcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcInNuYXBzaG90XCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbXBcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHRpZXIgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcInRpZXJcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYWNjZXNzLXRpZXJcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWFjY2Vzcy10aWVyXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1xuICAgICAgICAgICAgICAgIFwiUDRcIixcbiAgICAgICAgICAgICAgICBcIlA2XCIsXG4gICAgICAgICAgICAgICAgXCJQMTBcIixcbiAgICAgICAgICAgICAgICBcIlAxNVwiLFxuICAgICAgICAgICAgICAgIFwiUDIwXCIsXG4gICAgICAgICAgICAgICAgXCJQMzBcIixcbiAgICAgICAgICAgICAgICBcIlA0MFwiLFxuICAgICAgICAgICAgICAgIFwiUDUwXCIsXG4gICAgICAgICAgICAgICAgXCJQNjBcIixcbiAgICAgICAgICAgICAgICBcIlA3MFwiLFxuICAgICAgICAgICAgICAgIFwiUDgwXCIsXG4gICAgICAgICAgICAgICAgXCJIb3RcIixcbiAgICAgICAgICAgICAgICBcIkNvb2xcIixcbiAgICAgICAgICAgICAgICBcIkFyY2hpdmVcIixcbiAgICAgICAgICAgICAgICBcIkNvbGRcIixcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCByZWh5ZHJhdGVQcmlvcml0eSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwicmVoeWRyYXRlUHJpb3JpdHlcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVoeWRyYXRlLXByaW9yaXR5XCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZWh5ZHJhdGUtcHJpb3JpdHlcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJIaWdoXCIsIFwiU3RhbmRhcmRcIl0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBzb3VyY2VJZk1vZGlmaWVkU2luY2UgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1xuICAgICAgICBcIm9wdGlvbnNcIixcbiAgICAgICAgXCJzb3VyY2VNb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnNcIixcbiAgICAgICAgXCJzb3VyY2VJZk1vZGlmaWVkU2luY2VcIixcbiAgICBdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXNvdXJjZS1pZi1tb2RpZmllZC1zaW5jZVwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtc291cmNlLWlmLW1vZGlmaWVkLXNpbmNlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBzb3VyY2VJZlVubW9kaWZpZWRTaW5jZSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXG4gICAgICAgIFwib3B0aW9uc1wiLFxuICAgICAgICBcInNvdXJjZU1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uc1wiLFxuICAgICAgICBcInNvdXJjZUlmVW5tb2RpZmllZFNpbmNlXCIsXG4gICAgXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1zb3VyY2UtaWYtdW5tb2RpZmllZC1zaW5jZVwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtc291cmNlLWlmLXVubW9kaWZpZWQtc2luY2VcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHNvdXJjZUlmTWF0Y2ggPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcInNvdXJjZU1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uc1wiLCBcInNvdXJjZUlmTWF0Y2hcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtc291cmNlLWlmLW1hdGNoXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1zb3VyY2UtaWYtbWF0Y2hcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHNvdXJjZUlmTm9uZU1hdGNoID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcbiAgICAgICAgXCJvcHRpb25zXCIsXG4gICAgICAgIFwic291cmNlTW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zXCIsXG4gICAgICAgIFwic291cmNlSWZOb25lTWF0Y2hcIixcbiAgICBdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXNvdXJjZS1pZi1ub25lLW1hdGNoXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1zb3VyY2UtaWYtbm9uZS1tYXRjaFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3Qgc291cmNlSWZUYWdzID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJzb3VyY2VNb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnNcIiwgXCJzb3VyY2VJZlRhZ3NcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtc291cmNlLWlmLXRhZ3NcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXNvdXJjZS1pZi10YWdzXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb3B5U291cmNlID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiY29weVNvdXJjZVwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvcHktc291cmNlXCIsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29weS1zb3VyY2VcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGJsb2JUYWdzU3RyaW5nID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJibG9iVGFnc1N0cmluZ1wiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy10YWdzXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy10YWdzXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBzZWFsQmxvYiA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwic2VhbEJsb2JcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtc2VhbC1ibG9iXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1zZWFsLWJsb2JcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBsZWdhbEhvbGQxID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJsZWdhbEhvbGRcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVnYWwtaG9sZFwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGVnYWwtaG9sZFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHhNc1JlcXVpcmVzU3luYyA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcInhNc1JlcXVpcmVzU3luY1wiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwidHJ1ZVwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVpcmVzLXN5bmNcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHNvdXJjZUNvbnRlbnRNRDUgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcInNvdXJjZUNvbnRlbnRNRDVcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtc291cmNlLWNvbnRlbnQtbWQ1XCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1zb3VyY2UtY29udGVudC1tZDVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGNvcHlTb3VyY2VBdXRob3JpemF0aW9uID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJjb3B5U291cmNlQXV0aG9yaXphdGlvblwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LXNvdXJjZS1hdXRob3JpemF0aW9uXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LXNvdXJjZS1hdXRob3JpemF0aW9uXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb3B5U291cmNlVGFncyA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiY29weVNvdXJjZVRhZ3NcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1zb3VyY2UtdGFnLW9wdGlvblwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29weS1zb3VyY2UtdGFnLW9wdGlvblwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcIlJFUExBQ0VcIiwgXCJDT1BZXCJdLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgY29tcDE1ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiY29tcFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwiY29weVwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb21wXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb3B5QWN0aW9uQWJvcnRDb25zdGFudCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImNvcHlBY3Rpb25BYm9ydENvbnN0YW50XCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJhYm9ydFwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvcHktYWN0aW9uXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb3B5SWQgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb3B5SWRcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29weWlkXCIsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB4bWxOYW1lOiBcImNvcHlpZFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgY29tcDE2ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiY29tcFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwidGllclwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb21wXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCB0aWVyMSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcInRpZXJcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1hY2Nlc3MtdGllclwiLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWFjY2Vzcy10aWVyXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1xuICAgICAgICAgICAgICAgIFwiUDRcIixcbiAgICAgICAgICAgICAgICBcIlA2XCIsXG4gICAgICAgICAgICAgICAgXCJQMTBcIixcbiAgICAgICAgICAgICAgICBcIlAxNVwiLFxuICAgICAgICAgICAgICAgIFwiUDIwXCIsXG4gICAgICAgICAgICAgICAgXCJQMzBcIixcbiAgICAgICAgICAgICAgICBcIlA0MFwiLFxuICAgICAgICAgICAgICAgIFwiUDUwXCIsXG4gICAgICAgICAgICAgICAgXCJQNjBcIixcbiAgICAgICAgICAgICAgICBcIlA3MFwiLFxuICAgICAgICAgICAgICAgIFwiUDgwXCIsXG4gICAgICAgICAgICAgICAgXCJIb3RcIixcbiAgICAgICAgICAgICAgICBcIkNvb2xcIixcbiAgICAgICAgICAgICAgICBcIkFyY2hpdmVcIixcbiAgICAgICAgICAgICAgICBcIkNvbGRcIixcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBxdWVyeVJlcXVlc3QgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcInF1ZXJ5UmVxdWVzdFwiXSxcbiAgICBtYXBwZXI6IFF1ZXJ5UmVxdWVzdCxcbn07XG5jb25zdCBjb21wMTcgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb21wXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJxdWVyeVwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb21wXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb21wMTggPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb21wXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJ0YWdzXCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbXBcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHRhZ3MgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcInRhZ3NcIl0sXG4gICAgbWFwcGVyOiBCbG9iVGFncyxcbn07XG5jb25zdCB0cmFuc2FjdGlvbmFsQ29udGVudE1ENSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwidHJhbnNhY3Rpb25hbENvbnRlbnRNRDVcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRlbnQtTUQ1XCIsXG4gICAgICAgIHhtbE5hbWU6IFwiQ29udGVudC1NRDVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHRyYW5zYWN0aW9uYWxDb250ZW50Q3JjNjQgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcInRyYW5zYWN0aW9uYWxDb250ZW50Q3JjNjRcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29udGVudC1jcmM2NFwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29udGVudC1jcmM2NFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgYmxvYlR5cGUgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJibG9iVHlwZVwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwiUGFnZUJsb2JcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLXR5cGVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGJsb2JDb250ZW50TGVuZ3RoID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiYmxvYkNvbnRlbnRMZW5ndGhcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLWNvbnRlbnQtbGVuZ3RoXCIsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1jb250ZW50LWxlbmd0aFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgYmxvYlNlcXVlbmNlTnVtYmVyID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJibG9iU2VxdWVuY2VOdW1iZXJcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogMCxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLXNlcXVlbmNlLW51bWJlclwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1zZXF1ZW5jZS1udW1iZXJcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGNvbnRlbnRUeXBlMSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiY29udGVudFR5cGVcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGVudC1UeXBlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBib2R5MSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImJvZHlcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiYm9keVwiLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgeG1sTmFtZTogXCJib2R5XCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyZWFtXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBhY2NlcHQyID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiYWNjZXB0XCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJhcHBsaWNhdGlvbi94bWxcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQWNjZXB0XCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb21wMTkgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb21wXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJwYWdlXCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbXBcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHBhZ2VXcml0ZSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcInBhZ2VXcml0ZVwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwidXBkYXRlXCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcGFnZS13cml0ZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgaWZTZXF1ZW5jZU51bWJlckxlc3NUaGFuT3JFcXVhbFRvID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcbiAgICAgICAgXCJvcHRpb25zXCIsXG4gICAgICAgIFwic2VxdWVuY2VOdW1iZXJBY2Nlc3NDb25kaXRpb25zXCIsXG4gICAgICAgIFwiaWZTZXF1ZW5jZU51bWJlckxlc3NUaGFuT3JFcXVhbFRvXCIsXG4gICAgXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1pZi1zZXF1ZW5jZS1udW1iZXItbGVcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWlmLXNlcXVlbmNlLW51bWJlci1sZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgaWZTZXF1ZW5jZU51bWJlckxlc3NUaGFuID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcbiAgICAgICAgXCJvcHRpb25zXCIsXG4gICAgICAgIFwic2VxdWVuY2VOdW1iZXJBY2Nlc3NDb25kaXRpb25zXCIsXG4gICAgICAgIFwiaWZTZXF1ZW5jZU51bWJlckxlc3NUaGFuXCIsXG4gICAgXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1pZi1zZXF1ZW5jZS1udW1iZXItbHRcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWlmLXNlcXVlbmNlLW51bWJlci1sdFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgaWZTZXF1ZW5jZU51bWJlckVxdWFsVG8gPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1xuICAgICAgICBcIm9wdGlvbnNcIixcbiAgICAgICAgXCJzZXF1ZW5jZU51bWJlckFjY2Vzc0NvbmRpdGlvbnNcIixcbiAgICAgICAgXCJpZlNlcXVlbmNlTnVtYmVyRXF1YWxUb1wiLFxuICAgIF0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtaWYtc2VxdWVuY2UtbnVtYmVyLWVxXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1pZi1zZXF1ZW5jZS1udW1iZXItZXFcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHBhZ2VXcml0ZTEgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJwYWdlV3JpdGVcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcImNsZWFyXCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcGFnZS13cml0ZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3Qgc291cmNlVXJsID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwic291cmNlVXJsXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1zb3VyY2VcIixcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LXNvdXJjZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3Qgc291cmNlUmFuZ2UgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJzb3VyY2VSYW5nZVwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXNvdXJjZS1yYW5nZVwiLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXNvdXJjZS1yYW5nZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3Qgc291cmNlQ29udGVudENyYzY0ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJzb3VyY2VDb250ZW50Q3JjNjRcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtc291cmNlLWNvbnRlbnQtY3JjNjRcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXNvdXJjZS1jb250ZW50LWNyYzY0XCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCByYW5nZTEgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJyYW5nZVwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJhbmdlXCIsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmFuZ2VcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGNvbXAyMCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImNvbXBcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcInBhZ2VsaXN0XCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbXBcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHByZXZzbmFwc2hvdCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwicHJldnNuYXBzaG90XCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJwcmV2c25hcHNob3RcIixcbiAgICAgICAgeG1sTmFtZTogXCJwcmV2c25hcHNob3RcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHByZXZTbmFwc2hvdFVybCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwicHJldlNuYXBzaG90VXJsXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXByZXZpb3VzLXNuYXBzaG90LXVybFwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtcHJldmlvdXMtc25hcHNob3QtdXJsXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBzZXF1ZW5jZU51bWJlckFjdGlvbiA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcInNlcXVlbmNlTnVtYmVyQWN0aW9uXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtc2VxdWVuY2UtbnVtYmVyLWFjdGlvblwiLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXNlcXVlbmNlLW51bWJlci1hY3Rpb25cIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJtYXhcIiwgXCJ1cGRhdGVcIiwgXCJpbmNyZW1lbnRcIl0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb21wMjEgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb21wXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJpbmNyZW1lbnRhbGNvcHlcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29tcFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgYmxvYlR5cGUxID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiYmxvYlR5cGVcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcIkFwcGVuZEJsb2JcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLXR5cGVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGNvbXAyMiA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImNvbXBcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcImFwcGVuZGJsb2NrXCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbXBcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IG1heFNpemUgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcImFwcGVuZFBvc2l0aW9uQWNjZXNzQ29uZGl0aW9uc1wiLCBcIm1heFNpemVcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1jb25kaXRpb24tbWF4c2l6ZVwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1jb25kaXRpb24tbWF4c2l6ZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgYXBwZW5kUG9zaXRpb24gPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1xuICAgICAgICBcIm9wdGlvbnNcIixcbiAgICAgICAgXCJhcHBlbmRQb3NpdGlvbkFjY2Vzc0NvbmRpdGlvbnNcIixcbiAgICAgICAgXCJhcHBlbmRQb3NpdGlvblwiLFxuICAgIF0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1jb25kaXRpb24tYXBwZW5kcG9zXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLWNvbmRpdGlvbi1hcHBlbmRwb3NcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHNvdXJjZVJhbmdlMSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwic291cmNlUmFuZ2VcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtc291cmNlLXJhbmdlXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1zb3VyY2UtcmFuZ2VcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGNvbXAyMyA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImNvbXBcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcInNlYWxcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29tcFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgYmxvYlR5cGUyID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiYmxvYlR5cGVcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcIkJsb2NrQmxvYlwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2ItdHlwZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgY29weVNvdXJjZUJsb2JQcm9wZXJ0aWVzID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJjb3B5U291cmNlQmxvYlByb3BlcnRpZXNcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1zb3VyY2UtYmxvYi1wcm9wZXJ0aWVzXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LXNvdXJjZS1ibG9iLXByb3BlcnRpZXNcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb21wMjQgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb21wXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJibG9ja1wiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb21wXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBibG9ja0lkID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiYmxvY2tJZFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJibG9ja2lkXCIsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB4bWxOYW1lOiBcImJsb2NraWRcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGJsb2NrcyA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImJsb2Nrc1wiLFxuICAgIG1hcHBlcjogQmxvY2tMb29rdXBMaXN0LFxufTtcbmNvbnN0IGNvbXAyNSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImNvbXBcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcImJsb2NrbGlzdFwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb21wXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBsaXN0VHlwZSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImxpc3RUeXBlXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJjb21taXR0ZWRcIixcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiYmxvY2tsaXN0dHlwZVwiLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgeG1sTmFtZTogXCJibG9ja2xpc3R0eXBlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wiY29tbWl0dGVkXCIsIFwidW5jb21taXR0ZWRcIiwgXCJhbGxcIl0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5cbi8qXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAqXG4gKiBDb2RlIGdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEF1dG9SZXN0IENvZGUgR2VuZXJhdG9yLlxuICogQ2hhbmdlcyBtYXkgY2F1c2UgaW5jb3JyZWN0IGJlaGF2aW9yIGFuZCB3aWxsIGJlIGxvc3QgaWYgdGhlIGNvZGUgaXMgcmVnZW5lcmF0ZWQuXG4gKi9cbi8qKiBDbGFzcyBjb250YWluaW5nIFNlcnZpY2Ugb3BlcmF0aW9ucy4gKi9cbmNsYXNzIFNlcnZpY2VJbXBsIHtcbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBjbGFzcyBTZXJ2aWNlIGNsYXNzLlxuICAgICAqIEBwYXJhbSBjbGllbnQgUmVmZXJlbmNlIHRvIHRoZSBzZXJ2aWNlIGNsaWVudFxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGNsaWVudCkge1xuICAgICAgICB0aGlzLmNsaWVudCA9IGNsaWVudDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyBwcm9wZXJ0aWVzIGZvciBhIHN0b3JhZ2UgYWNjb3VudCdzIEJsb2Igc2VydmljZSBlbmRwb2ludCwgaW5jbHVkaW5nIHByb3BlcnRpZXMgZm9yIFN0b3JhZ2VcbiAgICAgKiBBbmFseXRpY3MgYW5kIENPUlMgKENyb3NzLU9yaWdpbiBSZXNvdXJjZSBTaGFyaW5nKSBydWxlc1xuICAgICAqIEBwYXJhbSBibG9iU2VydmljZVByb3BlcnRpZXMgVGhlIFN0b3JhZ2VTZXJ2aWNlIHByb3BlcnRpZXMuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBzZXRQcm9wZXJ0aWVzKGJsb2JTZXJ2aWNlUHJvcGVydGllcywgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBibG9iU2VydmljZVByb3BlcnRpZXMsIG9wdGlvbnMgfSwgc2V0UHJvcGVydGllc09wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBnZXRzIHRoZSBwcm9wZXJ0aWVzIG9mIGEgc3RvcmFnZSBhY2NvdW50J3MgQmxvYiBzZXJ2aWNlLCBpbmNsdWRpbmcgcHJvcGVydGllcyBmb3IgU3RvcmFnZSBBbmFseXRpY3NcbiAgICAgKiBhbmQgQ09SUyAoQ3Jvc3MtT3JpZ2luIFJlc291cmNlIFNoYXJpbmcpIHJ1bGVzLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgZ2V0UHJvcGVydGllcyhvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgZ2V0UHJvcGVydGllc09wZXJhdGlvblNwZWMkMik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyBzdGF0aXN0aWNzIHJlbGF0ZWQgdG8gcmVwbGljYXRpb24gZm9yIHRoZSBCbG9iIHNlcnZpY2UuIEl0IGlzIG9ubHkgYXZhaWxhYmxlIG9uIHRoZVxuICAgICAqIHNlY29uZGFyeSBsb2NhdGlvbiBlbmRwb2ludCB3aGVuIHJlYWQtYWNjZXNzIGdlby1yZWR1bmRhbnQgcmVwbGljYXRpb24gaXMgZW5hYmxlZCBmb3IgdGhlIHN0b3JhZ2VcbiAgICAgKiBhY2NvdW50LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgZ2V0U3RhdGlzdGljcyhvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgZ2V0U3RhdGlzdGljc09wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgTGlzdCBDb250YWluZXJzIFNlZ21lbnQgb3BlcmF0aW9uIHJldHVybnMgYSBsaXN0IG9mIHRoZSBjb250YWluZXJzIHVuZGVyIHRoZSBzcGVjaWZpZWQgYWNjb3VudFxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgbGlzdENvbnRhaW5lcnNTZWdtZW50KG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgb3B0aW9ucyB9LCBsaXN0Q29udGFpbmVyc1NlZ21lbnRPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIGEgdXNlciBkZWxlZ2F0aW9uIGtleSBmb3IgdGhlIEJsb2Igc2VydmljZS4gVGhpcyBpcyBvbmx5IGEgdmFsaWQgb3BlcmF0aW9uIHdoZW4gdXNpbmdcbiAgICAgKiBiZWFyZXIgdG9rZW4gYXV0aGVudGljYXRpb24uXG4gICAgICogQHBhcmFtIGtleUluZm8gS2V5IGluZm9ybWF0aW9uXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBnZXRVc2VyRGVsZWdhdGlvbktleShrZXlJbmZvLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IGtleUluZm8sIG9wdGlvbnMgfSwgZ2V0VXNlckRlbGVnYXRpb25LZXlPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgc2t1IG5hbWUgYW5kIGFjY291bnQga2luZFxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgZ2V0QWNjb3VudEluZm8ob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIGdldEFjY291bnRJbmZvT3BlcmF0aW9uU3BlYyQyKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIEJhdGNoIG9wZXJhdGlvbiBhbGxvd3MgbXVsdGlwbGUgQVBJIGNhbGxzIHRvIGJlIGVtYmVkZGVkIGludG8gYSBzaW5nbGUgSFRUUCByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBjb250ZW50TGVuZ3RoIFRoZSBsZW5ndGggb2YgdGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIG11bHRpcGFydENvbnRlbnRUeXBlIFJlcXVpcmVkLiBUaGUgdmFsdWUgb2YgdGhpcyBoZWFkZXIgbXVzdCBiZSBtdWx0aXBhcnQvbWl4ZWQgd2l0aCBhIGJhdGNoXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kYXJ5LiBFeGFtcGxlIGhlYWRlciB2YWx1ZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT1iYXRjaF88R1VJRD5cbiAgICAgKiBAcGFyYW0gYm9keSBJbml0aWFsIGRhdGFcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIHN1Ym1pdEJhdGNoKGNvbnRlbnRMZW5ndGgsIG11bHRpcGFydENvbnRlbnRUeXBlLCBib2R5LCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IGNvbnRlbnRMZW5ndGgsIG11bHRpcGFydENvbnRlbnRUeXBlLCBib2R5LCBvcHRpb25zIH0sIHN1Ym1pdEJhdGNoT3BlcmF0aW9uU3BlYyQxKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIEZpbHRlciBCbG9icyBvcGVyYXRpb24gZW5hYmxlcyBjYWxsZXJzIHRvIGxpc3QgYmxvYnMgYWNyb3NzIGFsbCBjb250YWluZXJzIHdob3NlIHRhZ3MgbWF0Y2ggYVxuICAgICAqIGdpdmVuIHNlYXJjaCBleHByZXNzaW9uLiAgRmlsdGVyIGJsb2JzIHNlYXJjaGVzIGFjcm9zcyBhbGwgY29udGFpbmVycyB3aXRoaW4gYSBzdG9yYWdlIGFjY291bnQgYnV0XG4gICAgICogY2FuIGJlIHNjb3BlZCB3aXRoaW4gdGhlIGV4cHJlc3Npb24gdG8gYSBzaW5nbGUgY29udGFpbmVyLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgZmlsdGVyQmxvYnMob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIGZpbHRlckJsb2JzT3BlcmF0aW9uU3BlYyQxKTtcbiAgICB9XG59XG4vLyBPcGVyYXRpb24gU3BlY2lmaWNhdGlvbnNcbmNvbnN0IHhtbFNlcmlhbGl6ZXIkNSA9IGNvcmVDbGllbnRfX25hbWVzcGFjZS5jcmVhdGVTZXJpYWxpemVyKE1hcHBlcnMsIC8qIGlzWG1sICovIHRydWUpO1xuY29uc3Qgc2V0UHJvcGVydGllc09wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIvXCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAyOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBTZXJ2aWNlU2V0UHJvcGVydGllc0hlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFNlcnZpY2VTZXRQcm9wZXJ0aWVzRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHJlcXVlc3RCb2R5OiBibG9iU2VydmljZVByb3BlcnRpZXMsXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHJlc3R5cGUsXG4gICAgICAgIGNvbXAsXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIGNvbnRlbnRUeXBlLFxuICAgICAgICBhY2NlcHQsXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3htbDsgY2hhcnNldD11dGYtOFwiLFxuICAgIG1lZGlhVHlwZTogXCJ4bWxcIixcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDUsXG59O1xuY29uc3QgZ2V0UHJvcGVydGllc09wZXJhdGlvblNwZWMkMiA9IHtcbiAgICBwYXRoOiBcIi9cIixcbiAgICBodHRwTWV0aG9kOiBcIkdFVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IEJsb2JTZXJ2aWNlUHJvcGVydGllcyxcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFNlcnZpY2VHZXRQcm9wZXJ0aWVzSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogU2VydmljZUdldFByb3BlcnRpZXNFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHJlc3R5cGUsXG4gICAgICAgIGNvbXAsXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkNSxcbn07XG5jb25zdCBnZXRTdGF0aXN0aWNzT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi9cIixcbiAgICBodHRwTWV0aG9kOiBcIkdFVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IEJsb2JTZXJ2aWNlU3RhdGlzdGljcyxcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFNlcnZpY2VHZXRTdGF0aXN0aWNzSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogU2VydmljZUdldFN0YXRpc3RpY3NFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHJlc3R5cGUsXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIGNvbXAxLFxuICAgIF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDUsXG59O1xuY29uc3QgbGlzdENvbnRhaW5lcnNTZWdtZW50T3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi9cIixcbiAgICBodHRwTWV0aG9kOiBcIkdFVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IExpc3RDb250YWluZXJzU2VnbWVudFJlc3BvbnNlLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogU2VydmljZUxpc3RDb250YWluZXJzU2VnbWVudEhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFNlcnZpY2VMaXN0Q29udGFpbmVyc1NlZ21lbnRFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIGNvbXAyLFxuICAgICAgICBwcmVmaXgsXG4gICAgICAgIG1hcmtlcixcbiAgICAgICAgbWF4UGFnZVNpemUsXG4gICAgICAgIGluY2x1ZGUsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkNSxcbn07XG5jb25zdCBnZXRVc2VyRGVsZWdhdGlvbktleU9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIvXCIsXG4gICAgaHR0cE1ldGhvZDogXCJQT1NUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogVXNlckRlbGVnYXRpb25LZXksXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBTZXJ2aWNlR2V0VXNlckRlbGVnYXRpb25LZXlIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBTZXJ2aWNlR2V0VXNlckRlbGVnYXRpb25LZXlFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcmVxdWVzdEJvZHk6IGtleUluZm8sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHJlc3R5cGUsXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIGNvbXAzLFxuICAgIF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICBjb250ZW50VHlwZSxcbiAgICAgICAgYWNjZXB0LFxuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi94bWw7IGNoYXJzZXQ9dXRmLThcIixcbiAgICBtZWRpYVR5cGU6IFwieG1sXCIsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQ1LFxufTtcbmNvbnN0IGdldEFjY291bnRJbmZvT3BlcmF0aW9uU3BlYyQyID0ge1xuICAgIHBhdGg6IFwiL1wiLFxuICAgIGh0dHBNZXRob2Q6IFwiR0VUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogU2VydmljZUdldEFjY291bnRJbmZvSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogU2VydmljZUdldEFjY291bnRJbmZvRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICBjb21wLFxuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgICAgICByZXN0eXBlMSxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQ1LFxufTtcbmNvbnN0IHN1Ym1pdEJhdGNoT3BlcmF0aW9uU3BlYyQxID0ge1xuICAgIHBhdGg6IFwiL1wiLFxuICAgIGh0dHBNZXRob2Q6IFwiUE9TVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDI6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiB7IG5hbWU6IFwiU3RyZWFtXCIgfSxcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJwYXJzZWRSZXNwb25zZVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFNlcnZpY2VTdWJtaXRCYXRjaEhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFNlcnZpY2VTdWJtaXRCYXRjaEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICByZXF1ZXN0Qm9keTogYm9keSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzLCBjb21wNF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICBhY2NlcHQsXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgbXVsdGlwYXJ0Q29udGVudFR5cGUsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi94bWw7IGNoYXJzZXQ9dXRmLThcIixcbiAgICBtZWRpYVR5cGU6IFwieG1sXCIsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQ1LFxufTtcbmNvbnN0IGZpbHRlckJsb2JzT3BlcmF0aW9uU3BlYyQxID0ge1xuICAgIHBhdGg6IFwiL1wiLFxuICAgIGh0dHBNZXRob2Q6IFwiR0VUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogRmlsdGVyQmxvYlNlZ21lbnQsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBTZXJ2aWNlRmlsdGVyQmxvYnNIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBTZXJ2aWNlRmlsdGVyQmxvYnNFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIG1hcmtlcixcbiAgICAgICAgbWF4UGFnZVNpemUsXG4gICAgICAgIGNvbXA1LFxuICAgICAgICB3aGVyZSxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQ1LFxufTtcblxuLypcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuICpcbiAqIENvZGUgZ2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgQXV0b1Jlc3QgQ29kZSBHZW5lcmF0b3IuXG4gKiBDaGFuZ2VzIG1heSBjYXVzZSBpbmNvcnJlY3QgYmVoYXZpb3IgYW5kIHdpbGwgYmUgbG9zdCBpZiB0aGUgY29kZSBpcyByZWdlbmVyYXRlZC5cbiAqL1xuLyoqIENsYXNzIGNvbnRhaW5pbmcgQ29udGFpbmVyIG9wZXJhdGlvbnMuICovXG5jbGFzcyBDb250YWluZXJJbXBsIHtcbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBjbGFzcyBDb250YWluZXIgY2xhc3MuXG4gICAgICogQHBhcmFtIGNsaWVudCBSZWZlcmVuY2UgdG8gdGhlIHNlcnZpY2UgY2xpZW50XG4gICAgICovXG4gICAgY29uc3RydWN0b3IoY2xpZW50KSB7XG4gICAgICAgIHRoaXMuY2xpZW50ID0gY2xpZW50O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBjcmVhdGVzIGEgbmV3IGNvbnRhaW5lciB1bmRlciB0aGUgc3BlY2lmaWVkIGFjY291bnQuIElmIHRoZSBjb250YWluZXIgd2l0aCB0aGUgc2FtZSBuYW1lIGFscmVhZHlcbiAgICAgKiBleGlzdHMsIHRoZSBvcGVyYXRpb24gZmFpbHNcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGNyZWF0ZShvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgY3JlYXRlT3BlcmF0aW9uU3BlYyQyKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogcmV0dXJucyBhbGwgdXNlci1kZWZpbmVkIG1ldGFkYXRhIGFuZCBzeXN0ZW0gcHJvcGVydGllcyBmb3IgdGhlIHNwZWNpZmllZCBjb250YWluZXIuIFRoZSBkYXRhXG4gICAgICogcmV0dXJuZWQgZG9lcyBub3QgaW5jbHVkZSB0aGUgY29udGFpbmVyJ3MgbGlzdCBvZiBibG9ic1xuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgZ2V0UHJvcGVydGllcyhvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgZ2V0UHJvcGVydGllc09wZXJhdGlvblNwZWMkMSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIG9wZXJhdGlvbiBtYXJrcyB0aGUgc3BlY2lmaWVkIGNvbnRhaW5lciBmb3IgZGVsZXRpb24uIFRoZSBjb250YWluZXIgYW5kIGFueSBibG9icyBjb250YWluZWQgd2l0aGluXG4gICAgICogaXQgYXJlIGxhdGVyIGRlbGV0ZWQgZHVyaW5nIGdhcmJhZ2UgY29sbGVjdGlvblxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgZGVsZXRlKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgb3B0aW9ucyB9LCBkZWxldGVPcGVyYXRpb25TcGVjJDEpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBvcGVyYXRpb24gc2V0cyBvbmUgb3IgbW9yZSB1c2VyLWRlZmluZWQgbmFtZS12YWx1ZSBwYWlycyBmb3IgdGhlIHNwZWNpZmllZCBjb250YWluZXIuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBzZXRNZXRhZGF0YShvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgc2V0TWV0YWRhdGFPcGVyYXRpb25TcGVjJDEpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBnZXRzIHRoZSBwZXJtaXNzaW9ucyBmb3IgdGhlIHNwZWNpZmllZCBjb250YWluZXIuIFRoZSBwZXJtaXNzaW9ucyBpbmRpY2F0ZSB3aGV0aGVyIGNvbnRhaW5lciBkYXRhXG4gICAgICogbWF5IGJlIGFjY2Vzc2VkIHB1YmxpY2x5LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgZ2V0QWNjZXNzUG9saWN5KG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgb3B0aW9ucyB9LCBnZXRBY2Nlc3NQb2xpY3lPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogc2V0cyB0aGUgcGVybWlzc2lvbnMgZm9yIHRoZSBzcGVjaWZpZWQgY29udGFpbmVyLiBUaGUgcGVybWlzc2lvbnMgaW5kaWNhdGUgd2hldGhlciBibG9icyBpbiBhXG4gICAgICogY29udGFpbmVyIG1heSBiZSBhY2Nlc3NlZCBwdWJsaWNseS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIHNldEFjY2Vzc1BvbGljeShvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgc2V0QWNjZXNzUG9saWN5T3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlc3RvcmVzIGEgcHJldmlvdXNseS1kZWxldGVkIGNvbnRhaW5lci5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIHJlc3RvcmUob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIHJlc3RvcmVPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVuYW1lcyBhbiBleGlzdGluZyBjb250YWluZXIuXG4gICAgICogQHBhcmFtIHNvdXJjZUNvbnRhaW5lck5hbWUgUmVxdWlyZWQuICBTcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIGNvbnRhaW5lciB0byByZW5hbWUuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICByZW5hbWUoc291cmNlQ29udGFpbmVyTmFtZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBzb3VyY2VDb250YWluZXJOYW1lLCBvcHRpb25zIH0sIHJlbmFtZU9wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgQmF0Y2ggb3BlcmF0aW9uIGFsbG93cyBtdWx0aXBsZSBBUEkgY2FsbHMgdG8gYmUgZW1iZWRkZWQgaW50byBhIHNpbmdsZSBIVFRQIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIGNvbnRlbnRMZW5ndGggVGhlIGxlbmd0aCBvZiB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gbXVsdGlwYXJ0Q29udGVudFR5cGUgUmVxdWlyZWQuIFRoZSB2YWx1ZSBvZiB0aGlzIGhlYWRlciBtdXN0IGJlIG11bHRpcGFydC9taXhlZCB3aXRoIGEgYmF0Y2hcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRhcnkuIEV4YW1wbGUgaGVhZGVyIHZhbHVlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PWJhdGNoXzxHVUlEPlxuICAgICAqIEBwYXJhbSBib2R5IEluaXRpYWwgZGF0YVxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgc3VibWl0QmF0Y2goY29udGVudExlbmd0aCwgbXVsdGlwYXJ0Q29udGVudFR5cGUsIGJvZHksIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgY29udGVudExlbmd0aCwgbXVsdGlwYXJ0Q29udGVudFR5cGUsIGJvZHksIG9wdGlvbnMgfSwgc3VibWl0QmF0Y2hPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIEZpbHRlciBCbG9icyBvcGVyYXRpb24gZW5hYmxlcyBjYWxsZXJzIHRvIGxpc3QgYmxvYnMgaW4gYSBjb250YWluZXIgd2hvc2UgdGFncyBtYXRjaCBhIGdpdmVuXG4gICAgICogc2VhcmNoIGV4cHJlc3Npb24uICBGaWx0ZXIgYmxvYnMgc2VhcmNoZXMgd2l0aGluIHRoZSBnaXZlbiBjb250YWluZXIuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBmaWx0ZXJCbG9icyhvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgZmlsdGVyQmxvYnNPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogW1VwZGF0ZV0gZXN0YWJsaXNoZXMgYW5kIG1hbmFnZXMgYSBsb2NrIG9uIGEgY29udGFpbmVyIGZvciBkZWxldGUgb3BlcmF0aW9ucy4gVGhlIGxvY2sgZHVyYXRpb24gY2FuXG4gICAgICogYmUgMTUgdG8gNjAgc2Vjb25kcywgb3IgY2FuIGJlIGluZmluaXRlXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBhY3F1aXJlTGVhc2Uob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIGFjcXVpcmVMZWFzZU9wZXJhdGlvblNwZWMkMSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFtVcGRhdGVdIGVzdGFibGlzaGVzIGFuZCBtYW5hZ2VzIGEgbG9jayBvbiBhIGNvbnRhaW5lciBmb3IgZGVsZXRlIG9wZXJhdGlvbnMuIFRoZSBsb2NrIGR1cmF0aW9uIGNhblxuICAgICAqIGJlIDE1IHRvIDYwIHNlY29uZHMsIG9yIGNhbiBiZSBpbmZpbml0ZVxuICAgICAqIEBwYXJhbSBsZWFzZUlkIFNwZWNpZmllcyB0aGUgY3VycmVudCBsZWFzZSBJRCBvbiB0aGUgcmVzb3VyY2UuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICByZWxlYXNlTGVhc2UobGVhc2VJZCwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBsZWFzZUlkLCBvcHRpb25zIH0sIHJlbGVhc2VMZWFzZU9wZXJhdGlvblNwZWMkMSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFtVcGRhdGVdIGVzdGFibGlzaGVzIGFuZCBtYW5hZ2VzIGEgbG9jayBvbiBhIGNvbnRhaW5lciBmb3IgZGVsZXRlIG9wZXJhdGlvbnMuIFRoZSBsb2NrIGR1cmF0aW9uIGNhblxuICAgICAqIGJlIDE1IHRvIDYwIHNlY29uZHMsIG9yIGNhbiBiZSBpbmZpbml0ZVxuICAgICAqIEBwYXJhbSBsZWFzZUlkIFNwZWNpZmllcyB0aGUgY3VycmVudCBsZWFzZSBJRCBvbiB0aGUgcmVzb3VyY2UuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICByZW5ld0xlYXNlKGxlYXNlSWQsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgbGVhc2VJZCwgb3B0aW9ucyB9LCByZW5ld0xlYXNlT3BlcmF0aW9uU3BlYyQxKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogW1VwZGF0ZV0gZXN0YWJsaXNoZXMgYW5kIG1hbmFnZXMgYSBsb2NrIG9uIGEgY29udGFpbmVyIGZvciBkZWxldGUgb3BlcmF0aW9ucy4gVGhlIGxvY2sgZHVyYXRpb24gY2FuXG4gICAgICogYmUgMTUgdG8gNjAgc2Vjb25kcywgb3IgY2FuIGJlIGluZmluaXRlXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBicmVha0xlYXNlKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgb3B0aW9ucyB9LCBicmVha0xlYXNlT3BlcmF0aW9uU3BlYyQxKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogW1VwZGF0ZV0gZXN0YWJsaXNoZXMgYW5kIG1hbmFnZXMgYSBsb2NrIG9uIGEgY29udGFpbmVyIGZvciBkZWxldGUgb3BlcmF0aW9ucy4gVGhlIGxvY2sgZHVyYXRpb24gY2FuXG4gICAgICogYmUgMTUgdG8gNjAgc2Vjb25kcywgb3IgY2FuIGJlIGluZmluaXRlXG4gICAgICogQHBhcmFtIGxlYXNlSWQgU3BlY2lmaWVzIHRoZSBjdXJyZW50IGxlYXNlIElEIG9uIHRoZSByZXNvdXJjZS5cbiAgICAgKiBAcGFyYW0gcHJvcG9zZWRMZWFzZUlkIFByb3Bvc2VkIGxlYXNlIElELCBpbiBhIEdVSUQgc3RyaW5nIGZvcm1hdC4gVGhlIEJsb2Igc2VydmljZSByZXR1cm5zIDQwMFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgKEludmFsaWQgcmVxdWVzdCkgaWYgdGhlIHByb3Bvc2VkIGxlYXNlIElEIGlzIG5vdCBpbiB0aGUgY29ycmVjdCBmb3JtYXQuIFNlZSBHdWlkIENvbnN0cnVjdG9yXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAoU3RyaW5nKSBmb3IgYSBsaXN0IG9mIHZhbGlkIEdVSUQgc3RyaW5nIGZvcm1hdHMuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBjaGFuZ2VMZWFzZShsZWFzZUlkLCBwcm9wb3NlZExlYXNlSWQsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgbGVhc2VJZCwgcHJvcG9zZWRMZWFzZUlkLCBvcHRpb25zIH0sIGNoYW5nZUxlYXNlT3BlcmF0aW9uU3BlYyQxKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogW1VwZGF0ZV0gVGhlIExpc3QgQmxvYnMgb3BlcmF0aW9uIHJldHVybnMgYSBsaXN0IG9mIHRoZSBibG9icyB1bmRlciB0aGUgc3BlY2lmaWVkIGNvbnRhaW5lclxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgbGlzdEJsb2JGbGF0U2VnbWVudChvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgbGlzdEJsb2JGbGF0U2VnbWVudE9wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBbVXBkYXRlXSBUaGUgTGlzdCBCbG9icyBvcGVyYXRpb24gcmV0dXJucyBhIGxpc3Qgb2YgdGhlIGJsb2JzIHVuZGVyIHRoZSBzcGVjaWZpZWQgY29udGFpbmVyXG4gICAgICogQHBhcmFtIGRlbGltaXRlciBXaGVuIHRoZSByZXF1ZXN0IGluY2x1ZGVzIHRoaXMgcGFyYW1ldGVyLCB0aGUgb3BlcmF0aW9uIHJldHVybnMgYSBCbG9iUHJlZml4XG4gICAgICogICAgICAgICAgICAgICAgICBlbGVtZW50IGluIHRoZSByZXNwb25zZSBib2R5IHRoYXQgYWN0cyBhcyBhIHBsYWNlaG9sZGVyIGZvciBhbGwgYmxvYnMgd2hvc2UgbmFtZXMgYmVnaW4gd2l0aCB0aGVcbiAgICAgKiAgICAgICAgICAgICAgICAgIHNhbWUgc3Vic3RyaW5nIHVwIHRvIHRoZSBhcHBlYXJhbmNlIG9mIHRoZSBkZWxpbWl0ZXIgY2hhcmFjdGVyLiBUaGUgZGVsaW1pdGVyIG1heSBiZSBhIHNpbmdsZVxuICAgICAqICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyIG9yIGEgc3RyaW5nLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgbGlzdEJsb2JIaWVyYXJjaHlTZWdtZW50KGRlbGltaXRlciwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBkZWxpbWl0ZXIsIG9wdGlvbnMgfSwgbGlzdEJsb2JIaWVyYXJjaHlTZWdtZW50T3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHNrdSBuYW1lIGFuZCBhY2NvdW50IGtpbmRcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGdldEFjY291bnRJbmZvKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgb3B0aW9ucyB9LCBnZXRBY2NvdW50SW5mb09wZXJhdGlvblNwZWMkMSk7XG4gICAgfVxufVxuLy8gT3BlcmF0aW9uIFNwZWNpZmljYXRpb25zXG5jb25zdCB4bWxTZXJpYWxpemVyJDQgPSBjb3JlQ2xpZW50X19uYW1lc3BhY2UuY3JlYXRlU2VyaWFsaXplcihNYXBwZXJzLCAvKiBpc1htbCAqLyB0cnVlKTtcbmNvbnN0IGNyZWF0ZU9wZXJhdGlvblNwZWMkMiA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDE6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lckNyZWF0ZUhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lckNyZWF0ZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzLCByZXN0eXBlMl0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIG1ldGFkYXRhLFxuICAgICAgICBhY2Nlc3MsXG4gICAgICAgIGRlZmF1bHRFbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgIHByZXZlbnRFbmNyeXB0aW9uU2NvcGVPdmVycmlkZSxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkNCxcbn07XG5jb25zdCBnZXRQcm9wZXJ0aWVzT3BlcmF0aW9uU3BlYyQxID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiR0VUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQ29udGFpbmVyR2V0UHJvcGVydGllc0hlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lckdldFByb3BlcnRpZXNFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbdGltZW91dEluU2Vjb25kcywgcmVzdHlwZTJdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBsZWFzZUlkLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQ0LFxufTtcbmNvbnN0IGRlbGV0ZU9wZXJhdGlvblNwZWMkMSA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX1cIixcbiAgICBodHRwTWV0aG9kOiBcIkRFTEVURVwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDI6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lckRlbGV0ZUhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lckRlbGV0ZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzLCByZXN0eXBlMl0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIGxlYXNlSWQsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDQsXG59O1xuY29uc3Qgc2V0TWV0YWRhdGFPcGVyYXRpb25TcGVjJDEgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJTZXRNZXRhZGF0YUhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lclNldE1ldGFkYXRhRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgICAgICByZXN0eXBlMixcbiAgICAgICAgY29tcDYsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgbWV0YWRhdGEsXG4gICAgICAgIGxlYXNlSWQsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkNCxcbn07XG5jb25zdCBnZXRBY2Nlc3NQb2xpY3lPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiR0VUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjoge1xuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTZXF1ZW5jZVwiLFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB7IG5hbWU6IFwiQ29tcG9zaXRlXCIsIGNsYXNzTmFtZTogXCJTaWduZWRJZGVudGlmaWVyXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNpZ25lZElkZW50aWZpZXJzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJTaWduZWRJZGVudGlmaWVyc1wiLFxuICAgICAgICAgICAgICAgIHhtbElzV3JhcHBlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxFbGVtZW50TmFtZTogXCJTaWduZWRJZGVudGlmaWVyXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQ29udGFpbmVyR2V0QWNjZXNzUG9saWN5SGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQ29udGFpbmVyR2V0QWNjZXNzUG9saWN5RXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgICAgICByZXN0eXBlMixcbiAgICAgICAgY29tcDcsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgbGVhc2VJZCxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkNCxcbn07XG5jb25zdCBzZXRBY2Nlc3NQb2xpY3lPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQ29udGFpbmVyU2V0QWNjZXNzUG9saWN5SGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQ29udGFpbmVyU2V0QWNjZXNzUG9saWN5RXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHJlcXVlc3RCb2R5OiBjb250YWluZXJBY2wsXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIHJlc3R5cGUyLFxuICAgICAgICBjb21wNyxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgY29udGVudFR5cGUsXG4gICAgICAgIGFjY2VwdCxcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2Nlc3MsXG4gICAgICAgIGxlYXNlSWQsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi94bWw7IGNoYXJzZXQ9dXRmLThcIixcbiAgICBtZWRpYVR5cGU6IFwieG1sXCIsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQ0LFxufTtcbmNvbnN0IHJlc3RvcmVPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMToge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQ29udGFpbmVyUmVzdG9yZUhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lclJlc3RvcmVFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIHJlc3R5cGUyLFxuICAgICAgICBjb21wOCxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBkZWxldGVkQ29udGFpbmVyTmFtZSxcbiAgICAgICAgZGVsZXRlZENvbnRhaW5lclZlcnNpb24sXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDQsXG59O1xuY29uc3QgcmVuYW1lT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lclJlbmFtZUhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lclJlbmFtZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFtcbiAgICAgICAgdGltZW91dEluU2Vjb25kcyxcbiAgICAgICAgcmVzdHlwZTIsXG4gICAgICAgIGNvbXA5LFxuICAgIF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIHNvdXJjZUNvbnRhaW5lck5hbWUsXG4gICAgICAgIHNvdXJjZUxlYXNlSWQsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDQsXG59O1xuY29uc3Qgc3VibWl0QmF0Y2hPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUE9TVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDI6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiB7IG5hbWU6IFwiU3RyZWFtXCIgfSxcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJwYXJzZWRSZXNwb25zZVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lclN1Ym1pdEJhdGNoSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQ29udGFpbmVyU3VibWl0QmF0Y2hFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcmVxdWVzdEJvZHk6IGJvZHksXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIGNvbXA0LFxuICAgICAgICByZXN0eXBlMixcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgYWNjZXB0LFxuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGNvbnRlbnRMZW5ndGgsXG4gICAgICAgIG11bHRpcGFydENvbnRlbnRUeXBlLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgY29udGVudFR5cGU6IFwiYXBwbGljYXRpb24veG1sOyBjaGFyc2V0PXV0Zi04XCIsXG4gICAgbWVkaWFUeXBlOiBcInhtbFwiLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkNCxcbn07XG5jb25zdCBmaWx0ZXJCbG9ic09wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJHRVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBGaWx0ZXJCbG9iU2VnbWVudCxcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lckZpbHRlckJsb2JzSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQ29udGFpbmVyRmlsdGVyQmxvYnNFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIG1hcmtlcixcbiAgICAgICAgbWF4UGFnZVNpemUsXG4gICAgICAgIGNvbXA1LFxuICAgICAgICB3aGVyZSxcbiAgICAgICAgcmVzdHlwZTIsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkNCxcbn07XG5jb25zdCBhY3F1aXJlTGVhc2VPcGVyYXRpb25TcGVjJDEgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAxOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJBY3F1aXJlTGVhc2VIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJBY3F1aXJlTGVhc2VFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIHJlc3R5cGUyLFxuICAgICAgICBjb21wMTAsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBkdXJhdGlvbixcbiAgICAgICAgcHJvcG9zZWRMZWFzZUlkLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQ0LFxufTtcbmNvbnN0IHJlbGVhc2VMZWFzZU9wZXJhdGlvblNwZWMkMSA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lclJlbGVhc2VMZWFzZUhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lclJlbGVhc2VMZWFzZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFtcbiAgICAgICAgdGltZW91dEluU2Vjb25kcyxcbiAgICAgICAgcmVzdHlwZTIsXG4gICAgICAgIGNvbXAxMCxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBhY3Rpb24xLFxuICAgICAgICBsZWFzZUlkMSxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkNCxcbn07XG5jb25zdCByZW5ld0xlYXNlT3BlcmF0aW9uU3BlYyQxID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQ29udGFpbmVyUmVuZXdMZWFzZUhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lclJlbmV3TGVhc2VFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIHJlc3R5cGUyLFxuICAgICAgICBjb21wMTAsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgbGVhc2VJZDEsXG4gICAgICAgIGFjdGlvbjIsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDQsXG59O1xuY29uc3QgYnJlYWtMZWFzZU9wZXJhdGlvblNwZWMkMSA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDI6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lckJyZWFrTGVhc2VIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJCcmVha0xlYXNlRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgICAgICByZXN0eXBlMixcbiAgICAgICAgY29tcDEwLFxuICAgIF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIGFjdGlvbjMsXG4gICAgICAgIGJyZWFrUGVyaW9kLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQ0LFxufTtcbmNvbnN0IGNoYW5nZUxlYXNlT3BlcmF0aW9uU3BlYyQxID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQ29udGFpbmVyQ2hhbmdlTGVhc2VIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJDaGFuZ2VMZWFzZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFtcbiAgICAgICAgdGltZW91dEluU2Vjb25kcyxcbiAgICAgICAgcmVzdHlwZTIsXG4gICAgICAgIGNvbXAxMCxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBsZWFzZUlkMSxcbiAgICAgICAgYWN0aW9uNCxcbiAgICAgICAgcHJvcG9zZWRMZWFzZUlkMSxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkNCxcbn07XG5jb25zdCBsaXN0QmxvYkZsYXRTZWdtZW50T3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX1cIixcbiAgICBodHRwTWV0aG9kOiBcIkdFVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IExpc3RCbG9ic0ZsYXRTZWdtZW50UmVzcG9uc2UsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJMaXN0QmxvYkZsYXRTZWdtZW50SGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQ29udGFpbmVyTGlzdEJsb2JGbGF0U2VnbWVudEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFtcbiAgICAgICAgdGltZW91dEluU2Vjb25kcyxcbiAgICAgICAgY29tcDIsXG4gICAgICAgIHByZWZpeCxcbiAgICAgICAgbWFya2VyLFxuICAgICAgICBtYXhQYWdlU2l6ZSxcbiAgICAgICAgcmVzdHlwZTIsXG4gICAgICAgIGluY2x1ZGUxLFxuICAgIF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDQsXG59O1xuY29uc3QgbGlzdEJsb2JIaWVyYXJjaHlTZWdtZW50T3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX1cIixcbiAgICBodHRwTWV0aG9kOiBcIkdFVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IExpc3RCbG9ic0hpZXJhcmNoeVNlZ21lbnRSZXNwb25zZSxcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lckxpc3RCbG9iSGllcmFyY2h5U2VnbWVudEhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lckxpc3RCbG9iSGllcmFyY2h5U2VnbWVudEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFtcbiAgICAgICAgdGltZW91dEluU2Vjb25kcyxcbiAgICAgICAgY29tcDIsXG4gICAgICAgIHByZWZpeCxcbiAgICAgICAgbWFya2VyLFxuICAgICAgICBtYXhQYWdlU2l6ZSxcbiAgICAgICAgcmVzdHlwZTIsXG4gICAgICAgIGluY2x1ZGUxLFxuICAgICAgICBkZWxpbWl0ZXIsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkNCxcbn07XG5jb25zdCBnZXRBY2NvdW50SW5mb09wZXJhdGlvblNwZWMkMSA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX1cIixcbiAgICBodHRwTWV0aG9kOiBcIkdFVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lckdldEFjY291bnRJbmZvSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQ29udGFpbmVyR2V0QWNjb3VudEluZm9FeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIGNvbXAsXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIHJlc3R5cGUxLFxuICAgIF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDQsXG59O1xuXG4vKlxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKlxuICogQ29kZSBnZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBBdXRvUmVzdCBDb2RlIEdlbmVyYXRvci5cbiAqIENoYW5nZXMgbWF5IGNhdXNlIGluY29ycmVjdCBiZWhhdmlvciBhbmQgd2lsbCBiZSBsb3N0IGlmIHRoZSBjb2RlIGlzIHJlZ2VuZXJhdGVkLlxuICovXG4vKiogQ2xhc3MgY29udGFpbmluZyBCbG9iIG9wZXJhdGlvbnMuICovXG5jbGFzcyBCbG9iSW1wbCB7XG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgY2xhc3MgQmxvYiBjbGFzcy5cbiAgICAgKiBAcGFyYW0gY2xpZW50IFJlZmVyZW5jZSB0byB0aGUgc2VydmljZSBjbGllbnRcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihjbGllbnQpIHtcbiAgICAgICAgdGhpcy5jbGllbnQgPSBjbGllbnQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBEb3dubG9hZCBvcGVyYXRpb24gcmVhZHMgb3IgZG93bmxvYWRzIGEgYmxvYiBmcm9tIHRoZSBzeXN0ZW0sIGluY2x1ZGluZyBpdHMgbWV0YWRhdGEgYW5kXG4gICAgICogcHJvcGVydGllcy4gWW91IGNhbiBhbHNvIGNhbGwgRG93bmxvYWQgdG8gcmVhZCBhIHNuYXBzaG90LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgZG93bmxvYWQob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIGRvd25sb2FkT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBHZXQgUHJvcGVydGllcyBvcGVyYXRpb24gcmV0dXJucyBhbGwgdXNlci1kZWZpbmVkIG1ldGFkYXRhLCBzdGFuZGFyZCBIVFRQIHByb3BlcnRpZXMsIGFuZCBzeXN0ZW1cbiAgICAgKiBwcm9wZXJ0aWVzIGZvciB0aGUgYmxvYi4gSXQgZG9lcyBub3QgcmV0dXJuIHRoZSBjb250ZW50IG9mIHRoZSBibG9iLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgZ2V0UHJvcGVydGllcyhvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgZ2V0UHJvcGVydGllc09wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJZiB0aGUgc3RvcmFnZSBhY2NvdW50J3Mgc29mdCBkZWxldGUgZmVhdHVyZSBpcyBkaXNhYmxlZCB0aGVuLCB3aGVuIGEgYmxvYiBpcyBkZWxldGVkLCBpdCBpc1xuICAgICAqIHBlcm1hbmVudGx5IHJlbW92ZWQgZnJvbSB0aGUgc3RvcmFnZSBhY2NvdW50LiBJZiB0aGUgc3RvcmFnZSBhY2NvdW50J3Mgc29mdCBkZWxldGUgZmVhdHVyZSBpc1xuICAgICAqIGVuYWJsZWQsIHRoZW4sIHdoZW4gYSBibG9iIGlzIGRlbGV0ZWQsIGl0IGlzIG1hcmtlZCBmb3IgZGVsZXRpb24gYW5kIGJlY29tZXMgaW5hY2Nlc3NpYmxlXG4gICAgICogaW1tZWRpYXRlbHkuIEhvd2V2ZXIsIHRoZSBibG9iIHNlcnZpY2UgcmV0YWlucyB0aGUgYmxvYiBvciBzbmFwc2hvdCBmb3IgdGhlIG51bWJlciBvZiBkYXlzIHNwZWNpZmllZFxuICAgICAqIGJ5IHRoZSBEZWxldGVSZXRlbnRpb25Qb2xpY3kgc2VjdGlvbiBvZiBbU3RvcmFnZSBzZXJ2aWNlIHByb3BlcnRpZXNdXG4gICAgICogKFNldC1CbG9iLVNlcnZpY2UtUHJvcGVydGllcy5tZCkuIEFmdGVyIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGRheXMgaGFzIHBhc3NlZCwgdGhlIGJsb2IncyBkYXRhIGlzXG4gICAgICogcGVybWFuZW50bHkgcmVtb3ZlZCBmcm9tIHRoZSBzdG9yYWdlIGFjY291bnQuIE5vdGUgdGhhdCB5b3UgY29udGludWUgdG8gYmUgY2hhcmdlZCBmb3IgdGhlXG4gICAgICogc29mdC1kZWxldGVkIGJsb2IncyBzdG9yYWdlIHVudGlsIGl0IGlzIHBlcm1hbmVudGx5IHJlbW92ZWQuIFVzZSB0aGUgTGlzdCBCbG9icyBBUEkgYW5kIHNwZWNpZnkgdGhlXG4gICAgICogXCJpbmNsdWRlPWRlbGV0ZWRcIiBxdWVyeSBwYXJhbWV0ZXIgdG8gZGlzY292ZXIgd2hpY2ggYmxvYnMgYW5kIHNuYXBzaG90cyBoYXZlIGJlZW4gc29mdCBkZWxldGVkLiBZb3VcbiAgICAgKiBjYW4gdGhlbiB1c2UgdGhlIFVuZGVsZXRlIEJsb2IgQVBJIHRvIHJlc3RvcmUgYSBzb2Z0LWRlbGV0ZWQgYmxvYi4gQWxsIG90aGVyIG9wZXJhdGlvbnMgb24gYVxuICAgICAqIHNvZnQtZGVsZXRlZCBibG9iIG9yIHNuYXBzaG90IGNhdXNlcyB0aGUgc2VydmljZSB0byByZXR1cm4gYW4gSFRUUCBzdGF0dXMgY29kZSBvZiA0MDRcbiAgICAgKiAoUmVzb3VyY2VOb3RGb3VuZCkuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBkZWxldGUob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIGRlbGV0ZU9wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBVbmRlbGV0ZSBhIGJsb2IgdGhhdCB3YXMgcHJldmlvdXNseSBzb2Z0IGRlbGV0ZWRcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIHVuZGVsZXRlKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgb3B0aW9ucyB9LCB1bmRlbGV0ZU9wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSB0aW1lIGEgYmxvYiB3aWxsIGV4cGlyZSBhbmQgYmUgZGVsZXRlZC5cbiAgICAgKiBAcGFyYW0gZXhwaXJ5T3B0aW9ucyBSZXF1aXJlZC4gSW5kaWNhdGVzIG1vZGUgb2YgdGhlIGV4cGlyeSB0aW1lXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBzZXRFeHBpcnkoZXhwaXJ5T3B0aW9ucywgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBleHBpcnlPcHRpb25zLCBvcHRpb25zIH0sIHNldEV4cGlyeU9wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgU2V0IEhUVFAgSGVhZGVycyBvcGVyYXRpb24gc2V0cyBzeXN0ZW0gcHJvcGVydGllcyBvbiB0aGUgYmxvYlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgc2V0SHR0cEhlYWRlcnMob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIHNldEh0dHBIZWFkZXJzT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBTZXQgSW1tdXRhYmlsaXR5IFBvbGljeSBvcGVyYXRpb24gc2V0cyB0aGUgaW1tdXRhYmlsaXR5IHBvbGljeSBvbiB0aGUgYmxvYlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgc2V0SW1tdXRhYmlsaXR5UG9saWN5KG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgb3B0aW9ucyB9LCBzZXRJbW11dGFiaWxpdHlQb2xpY3lPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIERlbGV0ZSBJbW11dGFiaWxpdHkgUG9saWN5IG9wZXJhdGlvbiBkZWxldGVzIHRoZSBpbW11dGFiaWxpdHkgcG9saWN5IG9uIHRoZSBibG9iXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBkZWxldGVJbW11dGFiaWxpdHlQb2xpY3kob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIGRlbGV0ZUltbXV0YWJpbGl0eVBvbGljeU9wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgU2V0IExlZ2FsIEhvbGQgb3BlcmF0aW9uIHNldHMgYSBsZWdhbCBob2xkIG9uIHRoZSBibG9iLlxuICAgICAqIEBwYXJhbSBsZWdhbEhvbGQgU3BlY2lmaWVkIGlmIGEgbGVnYWwgaG9sZCBzaG91bGQgYmUgc2V0IG9uIHRoZSBibG9iLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgc2V0TGVnYWxIb2xkKGxlZ2FsSG9sZCwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBsZWdhbEhvbGQsIG9wdGlvbnMgfSwgc2V0TGVnYWxIb2xkT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBTZXQgQmxvYiBNZXRhZGF0YSBvcGVyYXRpb24gc2V0cyB1c2VyLWRlZmluZWQgbWV0YWRhdGEgZm9yIHRoZSBzcGVjaWZpZWQgYmxvYiBhcyBvbmUgb3IgbW9yZVxuICAgICAqIG5hbWUtdmFsdWUgcGFpcnNcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIHNldE1ldGFkYXRhKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgb3B0aW9ucyB9LCBzZXRNZXRhZGF0YU9wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBbVXBkYXRlXSBUaGUgTGVhc2UgQmxvYiBvcGVyYXRpb24gZXN0YWJsaXNoZXMgYW5kIG1hbmFnZXMgYSBsb2NrIG9uIGEgYmxvYiBmb3Igd3JpdGUgYW5kIGRlbGV0ZVxuICAgICAqIG9wZXJhdGlvbnNcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGFjcXVpcmVMZWFzZShvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgYWNxdWlyZUxlYXNlT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFtVcGRhdGVdIFRoZSBMZWFzZSBCbG9iIG9wZXJhdGlvbiBlc3RhYmxpc2hlcyBhbmQgbWFuYWdlcyBhIGxvY2sgb24gYSBibG9iIGZvciB3cml0ZSBhbmQgZGVsZXRlXG4gICAgICogb3BlcmF0aW9uc1xuICAgICAqIEBwYXJhbSBsZWFzZUlkIFNwZWNpZmllcyB0aGUgY3VycmVudCBsZWFzZSBJRCBvbiB0aGUgcmVzb3VyY2UuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICByZWxlYXNlTGVhc2UobGVhc2VJZCwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBsZWFzZUlkLCBvcHRpb25zIH0sIHJlbGVhc2VMZWFzZU9wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBbVXBkYXRlXSBUaGUgTGVhc2UgQmxvYiBvcGVyYXRpb24gZXN0YWJsaXNoZXMgYW5kIG1hbmFnZXMgYSBsb2NrIG9uIGEgYmxvYiBmb3Igd3JpdGUgYW5kIGRlbGV0ZVxuICAgICAqIG9wZXJhdGlvbnNcbiAgICAgKiBAcGFyYW0gbGVhc2VJZCBTcGVjaWZpZXMgdGhlIGN1cnJlbnQgbGVhc2UgSUQgb24gdGhlIHJlc291cmNlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgcmVuZXdMZWFzZShsZWFzZUlkLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IGxlYXNlSWQsIG9wdGlvbnMgfSwgcmVuZXdMZWFzZU9wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBbVXBkYXRlXSBUaGUgTGVhc2UgQmxvYiBvcGVyYXRpb24gZXN0YWJsaXNoZXMgYW5kIG1hbmFnZXMgYSBsb2NrIG9uIGEgYmxvYiBmb3Igd3JpdGUgYW5kIGRlbGV0ZVxuICAgICAqIG9wZXJhdGlvbnNcbiAgICAgKiBAcGFyYW0gbGVhc2VJZCBTcGVjaWZpZXMgdGhlIGN1cnJlbnQgbGVhc2UgSUQgb24gdGhlIHJlc291cmNlLlxuICAgICAqIEBwYXJhbSBwcm9wb3NlZExlYXNlSWQgUHJvcG9zZWQgbGVhc2UgSUQsIGluIGEgR1VJRCBzdHJpbmcgZm9ybWF0LiBUaGUgQmxvYiBzZXJ2aWNlIHJldHVybnMgNDAwXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAoSW52YWxpZCByZXF1ZXN0KSBpZiB0aGUgcHJvcG9zZWQgbGVhc2UgSUQgaXMgbm90IGluIHRoZSBjb3JyZWN0IGZvcm1hdC4gU2VlIEd1aWQgQ29uc3RydWN0b3JcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIChTdHJpbmcpIGZvciBhIGxpc3Qgb2YgdmFsaWQgR1VJRCBzdHJpbmcgZm9ybWF0cy5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGNoYW5nZUxlYXNlKGxlYXNlSWQsIHByb3Bvc2VkTGVhc2VJZCwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBsZWFzZUlkLCBwcm9wb3NlZExlYXNlSWQsIG9wdGlvbnMgfSwgY2hhbmdlTGVhc2VPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogW1VwZGF0ZV0gVGhlIExlYXNlIEJsb2Igb3BlcmF0aW9uIGVzdGFibGlzaGVzIGFuZCBtYW5hZ2VzIGEgbG9jayBvbiBhIGJsb2IgZm9yIHdyaXRlIGFuZCBkZWxldGVcbiAgICAgKiBvcGVyYXRpb25zXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBicmVha0xlYXNlKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgb3B0aW9ucyB9LCBicmVha0xlYXNlT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBDcmVhdGUgU25hcHNob3Qgb3BlcmF0aW9uIGNyZWF0ZXMgYSByZWFkLW9ubHkgc25hcHNob3Qgb2YgYSBibG9iXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBjcmVhdGVTbmFwc2hvdChvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgY3JlYXRlU25hcHNob3RPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIFN0YXJ0IENvcHkgRnJvbSBVUkwgb3BlcmF0aW9uIGNvcGllcyBhIGJsb2Igb3IgYW4gaW50ZXJuZXQgcmVzb3VyY2UgdG8gYSBuZXcgYmxvYi5cbiAgICAgKiBAcGFyYW0gY29weVNvdXJjZSBTcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIHNvdXJjZSBwYWdlIGJsb2Igc25hcHNob3QuIFRoaXMgdmFsdWUgaXMgYSBVUkwgb2YgdXAgdG9cbiAgICAgKiAgICAgICAgICAgICAgICAgICAyIEtCIGluIGxlbmd0aCB0aGF0IHNwZWNpZmllcyBhIHBhZ2UgYmxvYiBzbmFwc2hvdC4gVGhlIHZhbHVlIHNob3VsZCBiZSBVUkwtZW5jb2RlZCBhcyBpdCB3b3VsZFxuICAgICAqICAgICAgICAgICAgICAgICAgIGFwcGVhciBpbiBhIHJlcXVlc3QgVVJJLiBUaGUgc291cmNlIGJsb2IgbXVzdCBlaXRoZXIgYmUgcHVibGljIG9yIG11c3QgYmUgYXV0aGVudGljYXRlZCB2aWEgYSBzaGFyZWRcbiAgICAgKiAgICAgICAgICAgICAgICAgICBhY2Nlc3Mgc2lnbmF0dXJlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgc3RhcnRDb3B5RnJvbVVSTChjb3B5U291cmNlLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IGNvcHlTb3VyY2UsIG9wdGlvbnMgfSwgc3RhcnRDb3B5RnJvbVVSTE9wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgQ29weSBGcm9tIFVSTCBvcGVyYXRpb24gY29waWVzIGEgYmxvYiBvciBhbiBpbnRlcm5ldCByZXNvdXJjZSB0byBhIG5ldyBibG9iLiBJdCB3aWxsIG5vdCByZXR1cm5cbiAgICAgKiBhIHJlc3BvbnNlIHVudGlsIHRoZSBjb3B5IGlzIGNvbXBsZXRlLlxuICAgICAqIEBwYXJhbSBjb3B5U291cmNlIFNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgc291cmNlIHBhZ2UgYmxvYiBzbmFwc2hvdC4gVGhpcyB2YWx1ZSBpcyBhIFVSTCBvZiB1cCB0b1xuICAgICAqICAgICAgICAgICAgICAgICAgIDIgS0IgaW4gbGVuZ3RoIHRoYXQgc3BlY2lmaWVzIGEgcGFnZSBibG9iIHNuYXBzaG90LiBUaGUgdmFsdWUgc2hvdWxkIGJlIFVSTC1lbmNvZGVkIGFzIGl0IHdvdWxkXG4gICAgICogICAgICAgICAgICAgICAgICAgYXBwZWFyIGluIGEgcmVxdWVzdCBVUkkuIFRoZSBzb3VyY2UgYmxvYiBtdXN0IGVpdGhlciBiZSBwdWJsaWMgb3IgbXVzdCBiZSBhdXRoZW50aWNhdGVkIHZpYSBhIHNoYXJlZFxuICAgICAqICAgICAgICAgICAgICAgICAgIGFjY2VzcyBzaWduYXR1cmUuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBjb3B5RnJvbVVSTChjb3B5U291cmNlLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IGNvcHlTb3VyY2UsIG9wdGlvbnMgfSwgY29weUZyb21VUkxPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIEFib3J0IENvcHkgRnJvbSBVUkwgb3BlcmF0aW9uIGFib3J0cyBhIHBlbmRpbmcgQ29weSBGcm9tIFVSTCBvcGVyYXRpb24sIGFuZCBsZWF2ZXMgYSBkZXN0aW5hdGlvblxuICAgICAqIGJsb2Igd2l0aCB6ZXJvIGxlbmd0aCBhbmQgZnVsbCBtZXRhZGF0YS5cbiAgICAgKiBAcGFyYW0gY29weUlkIFRoZSBjb3B5IGlkZW50aWZpZXIgcHJvdmlkZWQgaW4gdGhlIHgtbXMtY29weS1pZCBoZWFkZXIgb2YgdGhlIG9yaWdpbmFsIENvcHkgQmxvYlxuICAgICAqICAgICAgICAgICAgICAgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgYWJvcnRDb3B5RnJvbVVSTChjb3B5SWQsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgY29weUlkLCBvcHRpb25zIH0sIGFib3J0Q29weUZyb21VUkxPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIFNldCBUaWVyIG9wZXJhdGlvbiBzZXRzIHRoZSB0aWVyIG9uIGEgYmxvYi4gVGhlIG9wZXJhdGlvbiBpcyBhbGxvd2VkIG9uIGEgcGFnZSBibG9iIGluIGEgcHJlbWl1bVxuICAgICAqIHN0b3JhZ2UgYWNjb3VudCBhbmQgb24gYSBibG9jayBibG9iIGluIGEgYmxvYiBzdG9yYWdlIGFjY291bnQgKGxvY2FsbHkgcmVkdW5kYW50IHN0b3JhZ2Ugb25seSkuIEFcbiAgICAgKiBwcmVtaXVtIHBhZ2UgYmxvYidzIHRpZXIgZGV0ZXJtaW5lcyB0aGUgYWxsb3dlZCBzaXplLCBJT1BTLCBhbmQgYmFuZHdpZHRoIG9mIHRoZSBibG9iLiBBIGJsb2NrXG4gICAgICogYmxvYidzIHRpZXIgZGV0ZXJtaW5lcyBIb3QvQ29vbC9BcmNoaXZlIHN0b3JhZ2UgdHlwZS4gVGhpcyBvcGVyYXRpb24gZG9lcyBub3QgdXBkYXRlIHRoZSBibG9iJ3NcbiAgICAgKiBFVGFnLlxuICAgICAqIEBwYXJhbSB0aWVyIEluZGljYXRlcyB0aGUgdGllciB0byBiZSBzZXQgb24gdGhlIGJsb2IuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBzZXRUaWVyKHRpZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgdGllciwgb3B0aW9ucyB9LCBzZXRUaWVyT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHNrdSBuYW1lIGFuZCBhY2NvdW50IGtpbmRcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGdldEFjY291bnRJbmZvKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgb3B0aW9ucyB9LCBnZXRBY2NvdW50SW5mb09wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgUXVlcnkgb3BlcmF0aW9uIGVuYWJsZXMgdXNlcnMgdG8gc2VsZWN0L3Byb2plY3Qgb24gYmxvYiBkYXRhIGJ5IHByb3ZpZGluZyBzaW1wbGUgcXVlcnlcbiAgICAgKiBleHByZXNzaW9ucy5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIHF1ZXJ5KG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgb3B0aW9ucyB9LCBxdWVyeU9wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgR2V0IFRhZ3Mgb3BlcmF0aW9uIGVuYWJsZXMgdXNlcnMgdG8gZ2V0IHRoZSB0YWdzIGFzc29jaWF0ZWQgd2l0aCBhIGJsb2IuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBnZXRUYWdzKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgb3B0aW9ucyB9LCBnZXRUYWdzT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBTZXQgVGFncyBvcGVyYXRpb24gZW5hYmxlcyB1c2VycyB0byBzZXQgdGFncyBvbiBhIGJsb2IuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBzZXRUYWdzKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgb3B0aW9ucyB9LCBzZXRUYWdzT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxufVxuLy8gT3BlcmF0aW9uIFNwZWNpZmljYXRpb25zXG5jb25zdCB4bWxTZXJpYWxpemVyJDMgPSBjb3JlQ2xpZW50X19uYW1lc3BhY2UuY3JlYXRlU2VyaWFsaXplcihNYXBwZXJzLCAvKiBpc1htbCAqLyB0cnVlKTtcbmNvbnN0IGRvd25sb2FkT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJHRVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogeyBuYW1lOiBcIlN0cmVhbVwiIH0sXG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwicGFyc2VkUmVzcG9uc2VcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iRG93bmxvYWRIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICAyMDY6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiB7IG5hbWU6IFwiU3RyZWFtXCIgfSxcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJwYXJzZWRSZXNwb25zZVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JEb3dubG9hZEhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JEb3dubG9hZEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFtcbiAgICAgICAgdGltZW91dEluU2Vjb25kcyxcbiAgICAgICAgc25hcHNob3QsXG4gICAgICAgIHZlcnNpb25JZCxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICByYW5nZSxcbiAgICAgICAgcmFuZ2VHZXRDb250ZW50TUQ1LFxuICAgICAgICByYW5nZUdldENvbnRlbnRDUkM2NCxcbiAgICAgICAgZW5jcnlwdGlvbktleSxcbiAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1NixcbiAgICAgICAgZW5jcnlwdGlvbkFsZ29yaXRobSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMyxcbn07XG5jb25zdCBnZXRQcm9wZXJ0aWVzT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJIRUFEXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYkdldFByb3BlcnRpZXNIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iR2V0UHJvcGVydGllc0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFtcbiAgICAgICAgdGltZW91dEluU2Vjb25kcyxcbiAgICAgICAgc25hcHNob3QsXG4gICAgICAgIHZlcnNpb25JZCxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBlbmNyeXB0aW9uS2V5LFxuICAgICAgICBlbmNyeXB0aW9uS2V5U2hhMjU2LFxuICAgICAgICBlbmNyeXB0aW9uQWxnb3JpdGhtLFxuICAgICAgICBpZk1hdGNoLFxuICAgICAgICBpZk5vbmVNYXRjaCxcbiAgICAgICAgaWZUYWdzLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQzLFxufTtcbmNvbnN0IGRlbGV0ZU9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiREVMRVRFXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMjoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYkRlbGV0ZUhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JEZWxldGVFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIHNuYXBzaG90LFxuICAgICAgICB2ZXJzaW9uSWQsXG4gICAgICAgIGJsb2JEZWxldGVUeXBlLFxuICAgIF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIGxlYXNlSWQsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmTWF0Y2gsXG4gICAgICAgIGlmTm9uZU1hdGNoLFxuICAgICAgICBpZlRhZ3MsXG4gICAgICAgIGRlbGV0ZVNuYXBzaG90cyxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMyxcbn07XG5jb25zdCB1bmRlbGV0ZU9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYlVuZGVsZXRlSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYlVuZGVsZXRlRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW3RpbWVvdXRJblNlY29uZHMsIGNvbXA4XSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMyxcbn07XG5jb25zdCBzZXRFeHBpcnlPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JTZXRFeHBpcnlIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iU2V0RXhwaXJ5RXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW3RpbWVvdXRJblNlY29uZHMsIGNvbXAxMV0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIGV4cGlyeU9wdGlvbnMsXG4gICAgICAgIGV4cGlyZXNPbixcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMyxcbn07XG5jb25zdCBzZXRIdHRwSGVhZGVyc09wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYlNldEh0dHBIZWFkZXJzSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYlNldEh0dHBIZWFkZXJzRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW2NvbXAsIHRpbWVvdXRJblNlY29uZHNdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBpZk1hdGNoLFxuICAgICAgICBpZk5vbmVNYXRjaCxcbiAgICAgICAgaWZUYWdzLFxuICAgICAgICBibG9iQ2FjaGVDb250cm9sLFxuICAgICAgICBibG9iQ29udGVudFR5cGUsXG4gICAgICAgIGJsb2JDb250ZW50TUQ1LFxuICAgICAgICBibG9iQ29udGVudEVuY29kaW5nLFxuICAgICAgICBibG9iQ29udGVudExhbmd1YWdlLFxuICAgICAgICBibG9iQ29udGVudERpc3Bvc2l0aW9uLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQzLFxufTtcbmNvbnN0IHNldEltbXV0YWJpbGl0eVBvbGljeU9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYlNldEltbXV0YWJpbGl0eVBvbGljeUhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JTZXRJbW11dGFiaWxpdHlQb2xpY3lFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbdGltZW91dEluU2Vjb25kcywgY29tcDEyXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIGltbXV0YWJpbGl0eVBvbGljeUV4cGlyeSxcbiAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5TW9kZSxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMyxcbn07XG5jb25zdCBkZWxldGVJbW11dGFiaWxpdHlQb2xpY3lPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIkRFTEVURVwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JEZWxldGVJbW11dGFiaWxpdHlQb2xpY3lIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iRGVsZXRlSW1tdXRhYmlsaXR5UG9saWN5RXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW3RpbWVvdXRJblNlY29uZHMsIGNvbXAxMl0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDMsXG59O1xuY29uc3Qgc2V0TGVnYWxIb2xkT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iU2V0TGVnYWxIb2xkSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYlNldExlZ2FsSG9sZEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzLCBjb21wMTNdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBsZWdhbEhvbGQsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDMsXG59O1xuY29uc3Qgc2V0TWV0YWRhdGFPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JTZXRNZXRhZGF0YUhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JTZXRNZXRhZGF0YUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzLCBjb21wNl0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIG1ldGFkYXRhLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBlbmNyeXB0aW9uS2V5LFxuICAgICAgICBlbmNyeXB0aW9uS2V5U2hhMjU2LFxuICAgICAgICBlbmNyeXB0aW9uQWxnb3JpdGhtLFxuICAgICAgICBpZk1hdGNoLFxuICAgICAgICBpZk5vbmVNYXRjaCxcbiAgICAgICAgaWZUYWdzLFxuICAgICAgICBlbmNyeXB0aW9uU2NvcGUsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDMsXG59O1xuY29uc3QgYWNxdWlyZUxlYXNlT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAxOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iQWNxdWlyZUxlYXNlSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYkFjcXVpcmVMZWFzZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzLCBjb21wMTBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGR1cmF0aW9uLFxuICAgICAgICBwcm9wb3NlZExlYXNlSWQsXG4gICAgICAgIGlmTWF0Y2gsXG4gICAgICAgIGlmTm9uZU1hdGNoLFxuICAgICAgICBpZlRhZ3MsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDMsXG59O1xuY29uc3QgcmVsZWFzZUxlYXNlT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iUmVsZWFzZUxlYXNlSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYlJlbGVhc2VMZWFzZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzLCBjb21wMTBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBhY3Rpb24xLFxuICAgICAgICBsZWFzZUlkMSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMyxcbn07XG5jb25zdCByZW5ld0xlYXNlT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iUmVuZXdMZWFzZUhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JSZW5ld0xlYXNlRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW3RpbWVvdXRJblNlY29uZHMsIGNvbXAxMF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIGxlYXNlSWQxLFxuICAgICAgICBhY3Rpb24yLFxuICAgICAgICBpZk1hdGNoLFxuICAgICAgICBpZk5vbmVNYXRjaCxcbiAgICAgICAgaWZUYWdzLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQzLFxufTtcbmNvbnN0IGNoYW5nZUxlYXNlT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iQ2hhbmdlTGVhc2VIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iQ2hhbmdlTGVhc2VFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbdGltZW91dEluU2Vjb25kcywgY29tcDEwXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgbGVhc2VJZDEsXG4gICAgICAgIGFjdGlvbjQsXG4gICAgICAgIHByb3Bvc2VkTGVhc2VJZDEsXG4gICAgICAgIGlmTWF0Y2gsXG4gICAgICAgIGlmTm9uZU1hdGNoLFxuICAgICAgICBpZlRhZ3MsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDMsXG59O1xuY29uc3QgYnJlYWtMZWFzZU9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMjoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYkJyZWFrTGVhc2VIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iQnJlYWtMZWFzZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzLCBjb21wMTBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBhY3Rpb24zLFxuICAgICAgICBicmVha1BlcmlvZCxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMyxcbn07XG5jb25zdCBjcmVhdGVTbmFwc2hvdE9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMToge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYkNyZWF0ZVNuYXBzaG90SGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYkNyZWF0ZVNuYXBzaG90RXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW3RpbWVvdXRJblNlY29uZHMsIGNvbXAxNF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIG1ldGFkYXRhLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBlbmNyeXB0aW9uS2V5LFxuICAgICAgICBlbmNyeXB0aW9uS2V5U2hhMjU2LFxuICAgICAgICBlbmNyeXB0aW9uQWxnb3JpdGhtLFxuICAgICAgICBpZk1hdGNoLFxuICAgICAgICBpZk5vbmVNYXRjaCxcbiAgICAgICAgaWZUYWdzLFxuICAgICAgICBlbmNyeXB0aW9uU2NvcGUsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDMsXG59O1xuY29uc3Qgc3RhcnRDb3B5RnJvbVVSTE9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMjoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYlN0YXJ0Q29weUZyb21VUkxIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iU3RhcnRDb3B5RnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgbWV0YWRhdGEsXG4gICAgICAgIGxlYXNlSWQsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmTWF0Y2gsXG4gICAgICAgIGlmTm9uZU1hdGNoLFxuICAgICAgICBpZlRhZ3MsXG4gICAgICAgIGltbXV0YWJpbGl0eVBvbGljeUV4cGlyeSxcbiAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5TW9kZSxcbiAgICAgICAgdGllcixcbiAgICAgICAgcmVoeWRyYXRlUHJpb3JpdHksXG4gICAgICAgIHNvdXJjZUlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgc291cmNlSWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIHNvdXJjZUlmTWF0Y2gsXG4gICAgICAgIHNvdXJjZUlmTm9uZU1hdGNoLFxuICAgICAgICBzb3VyY2VJZlRhZ3MsXG4gICAgICAgIGNvcHlTb3VyY2UsXG4gICAgICAgIGJsb2JUYWdzU3RyaW5nLFxuICAgICAgICBzZWFsQmxvYixcbiAgICAgICAgbGVnYWxIb2xkMSxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMyxcbn07XG5jb25zdCBjb3B5RnJvbVVSTE9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMjoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYkNvcHlGcm9tVVJMSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYkNvcHlGcm9tVVJMRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW3RpbWVvdXRJblNlY29uZHNdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBtZXRhZGF0YSxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5RXhwaXJ5LFxuICAgICAgICBpbW11dGFiaWxpdHlQb2xpY3lNb2RlLFxuICAgICAgICBlbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgIHRpZXIsXG4gICAgICAgIHNvdXJjZUlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgc291cmNlSWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIHNvdXJjZUlmTWF0Y2gsXG4gICAgICAgIHNvdXJjZUlmTm9uZU1hdGNoLFxuICAgICAgICBjb3B5U291cmNlLFxuICAgICAgICBibG9iVGFnc1N0cmluZyxcbiAgICAgICAgbGVnYWxIb2xkMSxcbiAgICAgICAgeE1zUmVxdWlyZXNTeW5jLFxuICAgICAgICBzb3VyY2VDb250ZW50TUQ1LFxuICAgICAgICBjb3B5U291cmNlQXV0aG9yaXphdGlvbixcbiAgICAgICAgY29weVNvdXJjZVRhZ3MsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDMsXG59O1xuY29uc3QgYWJvcnRDb3B5RnJvbVVSTE9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwNDoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYkFib3J0Q29weUZyb21VUkxIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iQWJvcnRDb3B5RnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFtcbiAgICAgICAgdGltZW91dEluU2Vjb25kcyxcbiAgICAgICAgY29tcDE1LFxuICAgICAgICBjb3B5SWQsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgY29weUFjdGlvbkFib3J0Q29uc3RhbnQsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDMsXG59O1xuY29uc3Qgc2V0VGllck9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYlNldFRpZXJIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICAyMDI6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JTZXRUaWVySGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYlNldFRpZXJFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIHNuYXBzaG90LFxuICAgICAgICB2ZXJzaW9uSWQsXG4gICAgICAgIGNvbXAxNixcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZlRhZ3MsXG4gICAgICAgIHJlaHlkcmF0ZVByaW9yaXR5LFxuICAgICAgICB0aWVyMSxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMyxcbn07XG5jb25zdCBnZXRBY2NvdW50SW5mb09wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiR0VUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYkdldEFjY291bnRJbmZvSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYkdldEFjY291bnRJbmZvRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICBjb21wLFxuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgICAgICByZXN0eXBlMSxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQzLFxufTtcbmNvbnN0IHF1ZXJ5T3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQT1NUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjoge1xuICAgICAgICAgICAgICAgIHR5cGU6IHsgbmFtZTogXCJTdHJlYW1cIiB9LFxuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcInBhcnNlZFJlc3BvbnNlXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYlF1ZXJ5SGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgMjA2OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogeyBuYW1lOiBcIlN0cmVhbVwiIH0sXG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwicGFyc2VkUmVzcG9uc2VcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iUXVlcnlIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iUXVlcnlFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcmVxdWVzdEJvZHk6IHF1ZXJ5UmVxdWVzdCxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFtcbiAgICAgICAgdGltZW91dEluU2Vjb25kcyxcbiAgICAgICAgc25hcHNob3QsXG4gICAgICAgIGNvbXAxNyxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgY29udGVudFR5cGUsXG4gICAgICAgIGFjY2VwdCxcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBlbmNyeXB0aW9uS2V5LFxuICAgICAgICBlbmNyeXB0aW9uS2V5U2hhMjU2LFxuICAgICAgICBlbmNyeXB0aW9uQWxnb3JpdGhtLFxuICAgICAgICBpZk1hdGNoLFxuICAgICAgICBpZk5vbmVNYXRjaCxcbiAgICAgICAgaWZUYWdzLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgY29udGVudFR5cGU6IFwiYXBwbGljYXRpb24veG1sOyBjaGFyc2V0PXV0Zi04XCIsXG4gICAgbWVkaWFUeXBlOiBcInhtbFwiLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMyxcbn07XG5jb25zdCBnZXRUYWdzT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJHRVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBCbG9iVGFncyxcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JHZXRUYWdzSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYkdldFRhZ3NFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIHNuYXBzaG90LFxuICAgICAgICB2ZXJzaW9uSWQsXG4gICAgICAgIGNvbXAxOCxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZlRhZ3MsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDMsXG59O1xuY29uc3Qgc2V0VGFnc09wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwNDoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYlNldFRhZ3NIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iU2V0VGFnc0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICByZXF1ZXN0Qm9keTogdGFncyxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFtcbiAgICAgICAgdGltZW91dEluU2Vjb25kcyxcbiAgICAgICAgdmVyc2lvbklkLFxuICAgICAgICBjb21wMTgsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIGNvbnRlbnRUeXBlLFxuICAgICAgICBhY2NlcHQsXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgaWZUYWdzLFxuICAgICAgICB0cmFuc2FjdGlvbmFsQ29udGVudE1ENSxcbiAgICAgICAgdHJhbnNhY3Rpb25hbENvbnRlbnRDcmM2NCxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3htbDsgY2hhcnNldD11dGYtOFwiLFxuICAgIG1lZGlhVHlwZTogXCJ4bWxcIixcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDMsXG59O1xuXG4vKlxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKlxuICogQ29kZSBnZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBBdXRvUmVzdCBDb2RlIEdlbmVyYXRvci5cbiAqIENoYW5nZXMgbWF5IGNhdXNlIGluY29ycmVjdCBiZWhhdmlvciBhbmQgd2lsbCBiZSBsb3N0IGlmIHRoZSBjb2RlIGlzIHJlZ2VuZXJhdGVkLlxuICovXG4vKiogQ2xhc3MgY29udGFpbmluZyBQYWdlQmxvYiBvcGVyYXRpb25zLiAqL1xuY2xhc3MgUGFnZUJsb2JJbXBsIHtcbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBjbGFzcyBQYWdlQmxvYiBjbGFzcy5cbiAgICAgKiBAcGFyYW0gY2xpZW50IFJlZmVyZW5jZSB0byB0aGUgc2VydmljZSBjbGllbnRcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihjbGllbnQpIHtcbiAgICAgICAgdGhpcy5jbGllbnQgPSBjbGllbnQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBDcmVhdGUgb3BlcmF0aW9uIGNyZWF0ZXMgYSBuZXcgcGFnZSBibG9iLlxuICAgICAqIEBwYXJhbSBjb250ZW50TGVuZ3RoIFRoZSBsZW5ndGggb2YgdGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIGJsb2JDb250ZW50TGVuZ3RoIFRoaXMgaGVhZGVyIHNwZWNpZmllcyB0aGUgbWF4aW11bSBzaXplIGZvciB0aGUgcGFnZSBibG9iLCB1cCB0byAxIFRCLiBUaGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZSBibG9iIHNpemUgbXVzdCBiZSBhbGlnbmVkIHRvIGEgNTEyLWJ5dGUgYm91bmRhcnkuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBjcmVhdGUoY29udGVudExlbmd0aCwgYmxvYkNvbnRlbnRMZW5ndGgsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgY29udGVudExlbmd0aCwgYmxvYkNvbnRlbnRMZW5ndGgsIG9wdGlvbnMgfSwgY3JlYXRlT3BlcmF0aW9uU3BlYyQxKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIFVwbG9hZCBQYWdlcyBvcGVyYXRpb24gd3JpdGVzIGEgcmFuZ2Ugb2YgcGFnZXMgdG8gYSBwYWdlIGJsb2JcbiAgICAgKiBAcGFyYW0gY29udGVudExlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBib2R5IEluaXRpYWwgZGF0YVxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgdXBsb2FkUGFnZXMoY29udGVudExlbmd0aCwgYm9keSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBjb250ZW50TGVuZ3RoLCBib2R5LCBvcHRpb25zIH0sIHVwbG9hZFBhZ2VzT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBDbGVhciBQYWdlcyBvcGVyYXRpb24gY2xlYXJzIGEgc2V0IG9mIHBhZ2VzIGZyb20gYSBwYWdlIGJsb2JcbiAgICAgKiBAcGFyYW0gY29udGVudExlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgY2xlYXJQYWdlcyhjb250ZW50TGVuZ3RoLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IGNvbnRlbnRMZW5ndGgsIG9wdGlvbnMgfSwgY2xlYXJQYWdlc09wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgVXBsb2FkIFBhZ2VzIG9wZXJhdGlvbiB3cml0ZXMgYSByYW5nZSBvZiBwYWdlcyB0byBhIHBhZ2UgYmxvYiB3aGVyZSB0aGUgY29udGVudHMgYXJlIHJlYWQgZnJvbSBhXG4gICAgICogVVJMXG4gICAgICogQHBhcmFtIHNvdXJjZVVybCBTcGVjaWZ5IGEgVVJMIHRvIHRoZSBjb3B5IHNvdXJjZS5cbiAgICAgKiBAcGFyYW0gc291cmNlUmFuZ2UgQnl0ZXMgb2Ygc291cmNlIGRhdGEgaW4gdGhlIHNwZWNpZmllZCByYW5nZS4gVGhlIGxlbmd0aCBvZiB0aGlzIHJhbmdlIHNob3VsZFxuICAgICAqICAgICAgICAgICAgICAgICAgICBtYXRjaCB0aGUgQ29udGVudExlbmd0aCBoZWFkZXIgYW5kIHgtbXMtcmFuZ2UvUmFuZ2UgZGVzdGluYXRpb24gcmFuZ2UgaGVhZGVyLlxuICAgICAqIEBwYXJhbSBjb250ZW50TGVuZ3RoIFRoZSBsZW5ndGggb2YgdGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIHJhbmdlIFRoZSByYW5nZSBvZiBieXRlcyB0byB3aGljaCB0aGUgc291cmNlIHJhbmdlIHdvdWxkIGJlIHdyaXR0ZW4uIFRoZSByYW5nZSBzaG91bGQgYmUgNTEyXG4gICAgICogICAgICAgICAgICAgIGFsaWduZWQgYW5kIHJhbmdlLWVuZCBpcyByZXF1aXJlZC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIHVwbG9hZFBhZ2VzRnJvbVVSTChzb3VyY2VVcmwsIHNvdXJjZVJhbmdlLCBjb250ZW50TGVuZ3RoLCByYW5nZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBzb3VyY2VVcmwsIHNvdXJjZVJhbmdlLCBjb250ZW50TGVuZ3RoLCByYW5nZSwgb3B0aW9ucyB9LCB1cGxvYWRQYWdlc0Zyb21VUkxPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIEdldCBQYWdlIFJhbmdlcyBvcGVyYXRpb24gcmV0dXJucyB0aGUgbGlzdCBvZiB2YWxpZCBwYWdlIHJhbmdlcyBmb3IgYSBwYWdlIGJsb2Igb3Igc25hcHNob3Qgb2YgYVxuICAgICAqIHBhZ2UgYmxvYlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgZ2V0UGFnZVJhbmdlcyhvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgZ2V0UGFnZVJhbmdlc09wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgR2V0IFBhZ2UgUmFuZ2VzIERpZmYgb3BlcmF0aW9uIHJldHVybnMgdGhlIGxpc3Qgb2YgdmFsaWQgcGFnZSByYW5nZXMgZm9yIGEgcGFnZSBibG9iIHRoYXQgd2VyZVxuICAgICAqIGNoYW5nZWQgYmV0d2VlbiB0YXJnZXQgYmxvYiBhbmQgcHJldmlvdXMgc25hcHNob3QuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBnZXRQYWdlUmFuZ2VzRGlmZihvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgZ2V0UGFnZVJhbmdlc0RpZmZPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVzaXplIHRoZSBCbG9iXG4gICAgICogQHBhcmFtIGJsb2JDb250ZW50TGVuZ3RoIFRoaXMgaGVhZGVyIHNwZWNpZmllcyB0aGUgbWF4aW11bSBzaXplIGZvciB0aGUgcGFnZSBibG9iLCB1cCB0byAxIFRCLiBUaGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZSBibG9iIHNpemUgbXVzdCBiZSBhbGlnbmVkIHRvIGEgNTEyLWJ5dGUgYm91bmRhcnkuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICByZXNpemUoYmxvYkNvbnRlbnRMZW5ndGgsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgYmxvYkNvbnRlbnRMZW5ndGgsIG9wdGlvbnMgfSwgcmVzaXplT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFVwZGF0ZSB0aGUgc2VxdWVuY2UgbnVtYmVyIG9mIHRoZSBibG9iXG4gICAgICogQHBhcmFtIHNlcXVlbmNlTnVtYmVyQWN0aW9uIFJlcXVpcmVkIGlmIHRoZSB4LW1zLWJsb2Itc2VxdWVuY2UtbnVtYmVyIGhlYWRlciBpcyBzZXQgZm9yIHRoZSByZXF1ZXN0LlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHByb3BlcnR5IGFwcGxpZXMgdG8gcGFnZSBibG9icyBvbmx5LiBUaGlzIHByb3BlcnR5IGluZGljYXRlcyBob3cgdGhlIHNlcnZpY2Ugc2hvdWxkIG1vZGlmeSB0aGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvYidzIHNlcXVlbmNlIG51bWJlclxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgdXBkYXRlU2VxdWVuY2VOdW1iZXIoc2VxdWVuY2VOdW1iZXJBY3Rpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgc2VxdWVuY2VOdW1iZXJBY3Rpb24sIG9wdGlvbnMgfSwgdXBkYXRlU2VxdWVuY2VOdW1iZXJPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIENvcHkgSW5jcmVtZW50YWwgb3BlcmF0aW9uIGNvcGllcyBhIHNuYXBzaG90IG9mIHRoZSBzb3VyY2UgcGFnZSBibG9iIHRvIGEgZGVzdGluYXRpb24gcGFnZSBibG9iLlxuICAgICAqIFRoZSBzbmFwc2hvdCBpcyBjb3BpZWQgc3VjaCB0aGF0IG9ubHkgdGhlIGRpZmZlcmVudGlhbCBjaGFuZ2VzIGJldHdlZW4gdGhlIHByZXZpb3VzbHkgY29waWVkXG4gICAgICogc25hcHNob3QgYXJlIHRyYW5zZmVycmVkIHRvIHRoZSBkZXN0aW5hdGlvbi4gVGhlIGNvcGllZCBzbmFwc2hvdHMgYXJlIGNvbXBsZXRlIGNvcGllcyBvZiB0aGVcbiAgICAgKiBvcmlnaW5hbCBzbmFwc2hvdCBhbmQgY2FuIGJlIHJlYWQgb3IgY29waWVkIGZyb20gYXMgdXN1YWwuIFRoaXMgQVBJIGlzIHN1cHBvcnRlZCBzaW5jZSBSRVNUIHZlcnNpb25cbiAgICAgKiAyMDE2LTA1LTMxLlxuICAgICAqIEBwYXJhbSBjb3B5U291cmNlIFNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgc291cmNlIHBhZ2UgYmxvYiBzbmFwc2hvdC4gVGhpcyB2YWx1ZSBpcyBhIFVSTCBvZiB1cCB0b1xuICAgICAqICAgICAgICAgICAgICAgICAgIDIgS0IgaW4gbGVuZ3RoIHRoYXQgc3BlY2lmaWVzIGEgcGFnZSBibG9iIHNuYXBzaG90LiBUaGUgdmFsdWUgc2hvdWxkIGJlIFVSTC1lbmNvZGVkIGFzIGl0IHdvdWxkXG4gICAgICogICAgICAgICAgICAgICAgICAgYXBwZWFyIGluIGEgcmVxdWVzdCBVUkkuIFRoZSBzb3VyY2UgYmxvYiBtdXN0IGVpdGhlciBiZSBwdWJsaWMgb3IgbXVzdCBiZSBhdXRoZW50aWNhdGVkIHZpYSBhIHNoYXJlZFxuICAgICAqICAgICAgICAgICAgICAgICAgIGFjY2VzcyBzaWduYXR1cmUuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBjb3B5SW5jcmVtZW50YWwoY29weVNvdXJjZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBjb3B5U291cmNlLCBvcHRpb25zIH0sIGNvcHlJbmNyZW1lbnRhbE9wZXJhdGlvblNwZWMpO1xuICAgIH1cbn1cbi8vIE9wZXJhdGlvbiBTcGVjaWZpY2F0aW9uc1xuY29uc3QgeG1sU2VyaWFsaXplciQyID0gY29yZUNsaWVudF9fbmFtZXNwYWNlLmNyZWF0ZVNlcmlhbGl6ZXIoTWFwcGVycywgLyogaXNYbWwgKi8gdHJ1ZSk7XG5jb25zdCBjcmVhdGVPcGVyYXRpb25TcGVjJDEgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMToge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogUGFnZUJsb2JDcmVhdGVIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBQYWdlQmxvYkNyZWF0ZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgbWV0YWRhdGEsXG4gICAgICAgIGxlYXNlSWQsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIGVuY3J5cHRpb25LZXksXG4gICAgICAgIGVuY3J5cHRpb25LZXlTaGEyNTYsXG4gICAgICAgIGVuY3J5cHRpb25BbGdvcml0aG0sXG4gICAgICAgIGlmTWF0Y2gsXG4gICAgICAgIGlmTm9uZU1hdGNoLFxuICAgICAgICBpZlRhZ3MsXG4gICAgICAgIGJsb2JDYWNoZUNvbnRyb2wsXG4gICAgICAgIGJsb2JDb250ZW50VHlwZSxcbiAgICAgICAgYmxvYkNvbnRlbnRNRDUsXG4gICAgICAgIGJsb2JDb250ZW50RW5jb2RpbmcsXG4gICAgICAgIGJsb2JDb250ZW50TGFuZ3VhZ2UsXG4gICAgICAgIGJsb2JDb250ZW50RGlzcG9zaXRpb24sXG4gICAgICAgIGltbXV0YWJpbGl0eVBvbGljeUV4cGlyeSxcbiAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5TW9kZSxcbiAgICAgICAgZW5jcnlwdGlvblNjb3BlLFxuICAgICAgICB0aWVyLFxuICAgICAgICBibG9iVGFnc1N0cmluZyxcbiAgICAgICAgbGVnYWxIb2xkMSxcbiAgICAgICAgYmxvYlR5cGUsXG4gICAgICAgIGJsb2JDb250ZW50TGVuZ3RoLFxuICAgICAgICBibG9iU2VxdWVuY2VOdW1iZXIsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDIsXG59O1xuY29uc3QgdXBsb2FkUGFnZXNPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDE6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFBhZ2VCbG9iVXBsb2FkUGFnZXNIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBQYWdlQmxvYlVwbG9hZFBhZ2VzRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHJlcXVlc3RCb2R5OiBib2R5MSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzLCBjb21wMTldLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBjb250ZW50TGVuZ3RoLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICByYW5nZSxcbiAgICAgICAgZW5jcnlwdGlvbktleSxcbiAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1NixcbiAgICAgICAgZW5jcnlwdGlvbkFsZ29yaXRobSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICAgICAgZW5jcnlwdGlvblNjb3BlLFxuICAgICAgICB0cmFuc2FjdGlvbmFsQ29udGVudE1ENSxcbiAgICAgICAgdHJhbnNhY3Rpb25hbENvbnRlbnRDcmM2NCxcbiAgICAgICAgY29udGVudFR5cGUxLFxuICAgICAgICBhY2NlcHQyLFxuICAgICAgICBwYWdlV3JpdGUsXG4gICAgICAgIGlmU2VxdWVuY2VOdW1iZXJMZXNzVGhhbk9yRXF1YWxUbyxcbiAgICAgICAgaWZTZXF1ZW5jZU51bWJlckxlc3NUaGFuLFxuICAgICAgICBpZlNlcXVlbmNlTnVtYmVyRXF1YWxUbyxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3htbDsgY2hhcnNldD11dGYtOFwiLFxuICAgIG1lZGlhVHlwZTogXCJiaW5hcnlcIixcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDIsXG59O1xuY29uc3QgY2xlYXJQYWdlc09wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMToge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogUGFnZUJsb2JDbGVhclBhZ2VzSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogUGFnZUJsb2JDbGVhclBhZ2VzRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW3RpbWVvdXRJblNlY29uZHMsIGNvbXAxOV0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIGNvbnRlbnRMZW5ndGgsXG4gICAgICAgIGxlYXNlSWQsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIHJhbmdlLFxuICAgICAgICBlbmNyeXB0aW9uS2V5LFxuICAgICAgICBlbmNyeXB0aW9uS2V5U2hhMjU2LFxuICAgICAgICBlbmNyeXB0aW9uQWxnb3JpdGhtLFxuICAgICAgICBpZk1hdGNoLFxuICAgICAgICBpZk5vbmVNYXRjaCxcbiAgICAgICAgaWZUYWdzLFxuICAgICAgICBlbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgIGlmU2VxdWVuY2VOdW1iZXJMZXNzVGhhbk9yRXF1YWxUbyxcbiAgICAgICAgaWZTZXF1ZW5jZU51bWJlckxlc3NUaGFuLFxuICAgICAgICBpZlNlcXVlbmNlTnVtYmVyRXF1YWxUbyxcbiAgICAgICAgcGFnZVdyaXRlMSxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMixcbn07XG5jb25zdCB1cGxvYWRQYWdlc0Zyb21VUkxPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDE6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFBhZ2VCbG9iVXBsb2FkUGFnZXNGcm9tVVJMSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogUGFnZUJsb2JVcGxvYWRQYWdlc0Zyb21VUkxFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbdGltZW91dEluU2Vjb25kcywgY29tcDE5XSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgZW5jcnlwdGlvbktleSxcbiAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1NixcbiAgICAgICAgZW5jcnlwdGlvbkFsZ29yaXRobSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICAgICAgZW5jcnlwdGlvblNjb3BlLFxuICAgICAgICBzb3VyY2VJZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIHNvdXJjZUlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBzb3VyY2VJZk1hdGNoLFxuICAgICAgICBzb3VyY2VJZk5vbmVNYXRjaCxcbiAgICAgICAgc291cmNlQ29udGVudE1ENSxcbiAgICAgICAgY29weVNvdXJjZUF1dGhvcml6YXRpb24sXG4gICAgICAgIHBhZ2VXcml0ZSxcbiAgICAgICAgaWZTZXF1ZW5jZU51bWJlckxlc3NUaGFuT3JFcXVhbFRvLFxuICAgICAgICBpZlNlcXVlbmNlTnVtYmVyTGVzc1RoYW4sXG4gICAgICAgIGlmU2VxdWVuY2VOdW1iZXJFcXVhbFRvLFxuICAgICAgICBzb3VyY2VVcmwsXG4gICAgICAgIHNvdXJjZVJhbmdlLFxuICAgICAgICBzb3VyY2VDb250ZW50Q3JjNjQsXG4gICAgICAgIHJhbmdlMSxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMixcbn07XG5jb25zdCBnZXRQYWdlUmFuZ2VzT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJHRVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBQYWdlTGlzdCxcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFBhZ2VCbG9iR2V0UGFnZVJhbmdlc0hlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFBhZ2VCbG9iR2V0UGFnZVJhbmdlc0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFtcbiAgICAgICAgdGltZW91dEluU2Vjb25kcyxcbiAgICAgICAgbWFya2VyLFxuICAgICAgICBtYXhQYWdlU2l6ZSxcbiAgICAgICAgc25hcHNob3QsXG4gICAgICAgIGNvbXAyMCxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICByYW5nZSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMixcbn07XG5jb25zdCBnZXRQYWdlUmFuZ2VzRGlmZk9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiR0VUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogUGFnZUxpc3QsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBQYWdlQmxvYkdldFBhZ2VSYW5nZXNEaWZmSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogUGFnZUJsb2JHZXRQYWdlUmFuZ2VzRGlmZkV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFtcbiAgICAgICAgdGltZW91dEluU2Vjb25kcyxcbiAgICAgICAgbWFya2VyLFxuICAgICAgICBtYXhQYWdlU2l6ZSxcbiAgICAgICAgc25hcHNob3QsXG4gICAgICAgIGNvbXAyMCxcbiAgICAgICAgcHJldnNuYXBzaG90LFxuICAgIF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIGxlYXNlSWQsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIHJhbmdlLFxuICAgICAgICBpZk1hdGNoLFxuICAgICAgICBpZk5vbmVNYXRjaCxcbiAgICAgICAgaWZUYWdzLFxuICAgICAgICBwcmV2U25hcHNob3RVcmwsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDIsXG59O1xuY29uc3QgcmVzaXplT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBQYWdlQmxvYlJlc2l6ZUhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFBhZ2VCbG9iUmVzaXplRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW2NvbXAsIHRpbWVvdXRJblNlY29uZHNdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBlbmNyeXB0aW9uS2V5LFxuICAgICAgICBlbmNyeXB0aW9uS2V5U2hhMjU2LFxuICAgICAgICBlbmNyeXB0aW9uQWxnb3JpdGhtLFxuICAgICAgICBpZk1hdGNoLFxuICAgICAgICBpZk5vbmVNYXRjaCxcbiAgICAgICAgaWZUYWdzLFxuICAgICAgICBlbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgIGJsb2JDb250ZW50TGVuZ3RoLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQyLFxufTtcbmNvbnN0IHVwZGF0ZVNlcXVlbmNlTnVtYmVyT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBQYWdlQmxvYlVwZGF0ZVNlcXVlbmNlTnVtYmVySGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogUGFnZUJsb2JVcGRhdGVTZXF1ZW5jZU51bWJlckV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFtjb21wLCB0aW1lb3V0SW5TZWNvbmRzXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICAgICAgYmxvYlNlcXVlbmNlTnVtYmVyLFxuICAgICAgICBzZXF1ZW5jZU51bWJlckFjdGlvbixcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMixcbn07XG5jb25zdCBjb3B5SW5jcmVtZW50YWxPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDI6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFBhZ2VCbG9iQ29weUluY3JlbWVudGFsSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogUGFnZUJsb2JDb3B5SW5jcmVtZW50YWxFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbdGltZW91dEluU2Vjb25kcywgY29tcDIxXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICAgICAgY29weVNvdXJjZSxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMixcbn07XG5cbi8qXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAqXG4gKiBDb2RlIGdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEF1dG9SZXN0IENvZGUgR2VuZXJhdG9yLlxuICogQ2hhbmdlcyBtYXkgY2F1c2UgaW5jb3JyZWN0IGJlaGF2aW9yIGFuZCB3aWxsIGJlIGxvc3QgaWYgdGhlIGNvZGUgaXMgcmVnZW5lcmF0ZWQuXG4gKi9cbi8qKiBDbGFzcyBjb250YWluaW5nIEFwcGVuZEJsb2Igb3BlcmF0aW9ucy4gKi9cbmNsYXNzIEFwcGVuZEJsb2JJbXBsIHtcbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBjbGFzcyBBcHBlbmRCbG9iIGNsYXNzLlxuICAgICAqIEBwYXJhbSBjbGllbnQgUmVmZXJlbmNlIHRvIHRoZSBzZXJ2aWNlIGNsaWVudFxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGNsaWVudCkge1xuICAgICAgICB0aGlzLmNsaWVudCA9IGNsaWVudDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIENyZWF0ZSBBcHBlbmQgQmxvYiBvcGVyYXRpb24gY3JlYXRlcyBhIG5ldyBhcHBlbmQgYmxvYi5cbiAgICAgKiBAcGFyYW0gY29udGVudExlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgY3JlYXRlKGNvbnRlbnRMZW5ndGgsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgY29udGVudExlbmd0aCwgb3B0aW9ucyB9LCBjcmVhdGVPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIEFwcGVuZCBCbG9jayBvcGVyYXRpb24gY29tbWl0cyBhIG5ldyBibG9jayBvZiBkYXRhIHRvIHRoZSBlbmQgb2YgYW4gZXhpc3RpbmcgYXBwZW5kIGJsb2IuIFRoZVxuICAgICAqIEFwcGVuZCBCbG9jayBvcGVyYXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaWYgdGhlIGJsb2Igd2FzIGNyZWF0ZWQgd2l0aCB4LW1zLWJsb2ItdHlwZSBzZXQgdG9cbiAgICAgKiBBcHBlbmRCbG9iLiBBcHBlbmQgQmxvY2sgaXMgc3VwcG9ydGVkIG9ubHkgb24gdmVyc2lvbiAyMDE1LTAyLTIxIHZlcnNpb24gb3IgbGF0ZXIuXG4gICAgICogQHBhcmFtIGNvbnRlbnRMZW5ndGggVGhlIGxlbmd0aCBvZiB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gYm9keSBJbml0aWFsIGRhdGFcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGFwcGVuZEJsb2NrKGNvbnRlbnRMZW5ndGgsIGJvZHksIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgY29udGVudExlbmd0aCwgYm9keSwgb3B0aW9ucyB9LCBhcHBlbmRCbG9ja09wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgQXBwZW5kIEJsb2NrIG9wZXJhdGlvbiBjb21taXRzIGEgbmV3IGJsb2NrIG9mIGRhdGEgdG8gdGhlIGVuZCBvZiBhbiBleGlzdGluZyBhcHBlbmQgYmxvYiB3aGVyZVxuICAgICAqIHRoZSBjb250ZW50cyBhcmUgcmVhZCBmcm9tIGEgc291cmNlIHVybC4gVGhlIEFwcGVuZCBCbG9jayBvcGVyYXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaWYgdGhlIGJsb2JcbiAgICAgKiB3YXMgY3JlYXRlZCB3aXRoIHgtbXMtYmxvYi10eXBlIHNldCB0byBBcHBlbmRCbG9iLiBBcHBlbmQgQmxvY2sgaXMgc3VwcG9ydGVkIG9ubHkgb24gdmVyc2lvblxuICAgICAqIDIwMTUtMDItMjEgdmVyc2lvbiBvciBsYXRlci5cbiAgICAgKiBAcGFyYW0gc291cmNlVXJsIFNwZWNpZnkgYSBVUkwgdG8gdGhlIGNvcHkgc291cmNlLlxuICAgICAqIEBwYXJhbSBjb250ZW50TGVuZ3RoIFRoZSBsZW5ndGggb2YgdGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBhcHBlbmRCbG9ja0Zyb21Vcmwoc291cmNlVXJsLCBjb250ZW50TGVuZ3RoLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IHNvdXJjZVVybCwgY29udGVudExlbmd0aCwgb3B0aW9ucyB9LCBhcHBlbmRCbG9ja0Zyb21VcmxPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIFNlYWwgb3BlcmF0aW9uIHNlYWxzIHRoZSBBcHBlbmQgQmxvYiB0byBtYWtlIGl0IHJlYWQtb25seS4gU2VhbCBpcyBzdXBwb3J0ZWQgb25seSBvbiB2ZXJzaW9uXG4gICAgICogMjAxOS0xMi0xMiB2ZXJzaW9uIG9yIGxhdGVyLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgc2VhbChvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgc2VhbE9wZXJhdGlvblNwZWMpO1xuICAgIH1cbn1cbi8vIE9wZXJhdGlvbiBTcGVjaWZpY2F0aW9uc1xuY29uc3QgeG1sU2VyaWFsaXplciQxID0gY29yZUNsaWVudF9fbmFtZXNwYWNlLmNyZWF0ZVNlcmlhbGl6ZXIoTWFwcGVycywgLyogaXNYbWwgKi8gdHJ1ZSk7XG5jb25zdCBjcmVhdGVPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDE6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEFwcGVuZEJsb2JDcmVhdGVIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBBcHBlbmRCbG9iQ3JlYXRlRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW3RpbWVvdXRJblNlY29uZHNdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBjb250ZW50TGVuZ3RoLFxuICAgICAgICBtZXRhZGF0YSxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgZW5jcnlwdGlvbktleSxcbiAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1NixcbiAgICAgICAgZW5jcnlwdGlvbkFsZ29yaXRobSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICAgICAgYmxvYkNhY2hlQ29udHJvbCxcbiAgICAgICAgYmxvYkNvbnRlbnRUeXBlLFxuICAgICAgICBibG9iQ29udGVudE1ENSxcbiAgICAgICAgYmxvYkNvbnRlbnRFbmNvZGluZyxcbiAgICAgICAgYmxvYkNvbnRlbnRMYW5ndWFnZSxcbiAgICAgICAgYmxvYkNvbnRlbnREaXNwb3NpdGlvbixcbiAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5RXhwaXJ5LFxuICAgICAgICBpbW11dGFiaWxpdHlQb2xpY3lNb2RlLFxuICAgICAgICBlbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgIGJsb2JUYWdzU3RyaW5nLFxuICAgICAgICBsZWdhbEhvbGQxLFxuICAgICAgICBibG9iVHlwZTEsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDEsXG59O1xuY29uc3QgYXBwZW5kQmxvY2tPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDE6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEFwcGVuZEJsb2JBcHBlbmRCbG9ja0hlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEFwcGVuZEJsb2JBcHBlbmRCbG9ja0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICByZXF1ZXN0Qm9keTogYm9keTEsXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbdGltZW91dEluU2Vjb25kcywgY29tcDIyXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgZW5jcnlwdGlvbktleSxcbiAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1NixcbiAgICAgICAgZW5jcnlwdGlvbkFsZ29yaXRobSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICAgICAgZW5jcnlwdGlvblNjb3BlLFxuICAgICAgICB0cmFuc2FjdGlvbmFsQ29udGVudE1ENSxcbiAgICAgICAgdHJhbnNhY3Rpb25hbENvbnRlbnRDcmM2NCxcbiAgICAgICAgY29udGVudFR5cGUxLFxuICAgICAgICBhY2NlcHQyLFxuICAgICAgICBtYXhTaXplLFxuICAgICAgICBhcHBlbmRQb3NpdGlvbixcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3htbDsgY2hhcnNldD11dGYtOFwiLFxuICAgIG1lZGlhVHlwZTogXCJiaW5hcnlcIixcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDEsXG59O1xuY29uc3QgYXBwZW5kQmxvY2tGcm9tVXJsT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAxOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBBcHBlbmRCbG9iQXBwZW5kQmxvY2tGcm9tVXJsSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQXBwZW5kQmxvYkFwcGVuZEJsb2NrRnJvbVVybEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzLCBjb21wMjJdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBjb250ZW50TGVuZ3RoLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBlbmNyeXB0aW9uS2V5LFxuICAgICAgICBlbmNyeXB0aW9uS2V5U2hhMjU2LFxuICAgICAgICBlbmNyeXB0aW9uQWxnb3JpdGhtLFxuICAgICAgICBpZk1hdGNoLFxuICAgICAgICBpZk5vbmVNYXRjaCxcbiAgICAgICAgaWZUYWdzLFxuICAgICAgICBlbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgIHNvdXJjZUlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgc291cmNlSWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIHNvdXJjZUlmTWF0Y2gsXG4gICAgICAgIHNvdXJjZUlmTm9uZU1hdGNoLFxuICAgICAgICBzb3VyY2VDb250ZW50TUQ1LFxuICAgICAgICBjb3B5U291cmNlQXV0aG9yaXphdGlvbixcbiAgICAgICAgdHJhbnNhY3Rpb25hbENvbnRlbnRNRDUsXG4gICAgICAgIHNvdXJjZVVybCxcbiAgICAgICAgc291cmNlQ29udGVudENyYzY0LFxuICAgICAgICBtYXhTaXplLFxuICAgICAgICBhcHBlbmRQb3NpdGlvbixcbiAgICAgICAgc291cmNlUmFuZ2UxLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQxLFxufTtcbmNvbnN0IHNlYWxPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEFwcGVuZEJsb2JTZWFsSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQXBwZW5kQmxvYlNlYWxFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbdGltZW91dEluU2Vjb25kcywgY29tcDIzXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGFwcGVuZFBvc2l0aW9uLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQxLFxufTtcblxuLypcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuICpcbiAqIENvZGUgZ2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgQXV0b1Jlc3QgQ29kZSBHZW5lcmF0b3IuXG4gKiBDaGFuZ2VzIG1heSBjYXVzZSBpbmNvcnJlY3QgYmVoYXZpb3IgYW5kIHdpbGwgYmUgbG9zdCBpZiB0aGUgY29kZSBpcyByZWdlbmVyYXRlZC5cbiAqL1xuLyoqIENsYXNzIGNvbnRhaW5pbmcgQmxvY2tCbG9iIG9wZXJhdGlvbnMuICovXG5jbGFzcyBCbG9ja0Jsb2JJbXBsIHtcbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBjbGFzcyBCbG9ja0Jsb2IgY2xhc3MuXG4gICAgICogQHBhcmFtIGNsaWVudCBSZWZlcmVuY2UgdG8gdGhlIHNlcnZpY2UgY2xpZW50XG4gICAgICovXG4gICAgY29uc3RydWN0b3IoY2xpZW50KSB7XG4gICAgICAgIHRoaXMuY2xpZW50ID0gY2xpZW50O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgVXBsb2FkIEJsb2NrIEJsb2Igb3BlcmF0aW9uIHVwZGF0ZXMgdGhlIGNvbnRlbnQgb2YgYW4gZXhpc3RpbmcgYmxvY2sgYmxvYi4gVXBkYXRpbmcgYW4gZXhpc3RpbmdcbiAgICAgKiBibG9jayBibG9iIG92ZXJ3cml0ZXMgYW55IGV4aXN0aW5nIG1ldGFkYXRhIG9uIHRoZSBibG9iLiBQYXJ0aWFsIHVwZGF0ZXMgYXJlIG5vdCBzdXBwb3J0ZWQgd2l0aCBQdXRcbiAgICAgKiBCbG9iOyB0aGUgY29udGVudCBvZiB0aGUgZXhpc3RpbmcgYmxvYiBpcyBvdmVyd3JpdHRlbiB3aXRoIHRoZSBjb250ZW50IG9mIHRoZSBuZXcgYmxvYi4gVG8gcGVyZm9ybSBhXG4gICAgICogcGFydGlhbCB1cGRhdGUgb2YgdGhlIGNvbnRlbnQgb2YgYSBibG9jayBibG9iLCB1c2UgdGhlIFB1dCBCbG9jayBMaXN0IG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0gY29udGVudExlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBib2R5IEluaXRpYWwgZGF0YVxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgdXBsb2FkKGNvbnRlbnRMZW5ndGgsIGJvZHksIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgY29udGVudExlbmd0aCwgYm9keSwgb3B0aW9ucyB9LCB1cGxvYWRPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIFB1dCBCbG9iIGZyb20gVVJMIG9wZXJhdGlvbiBjcmVhdGVzIGEgbmV3IEJsb2NrIEJsb2Igd2hlcmUgdGhlIGNvbnRlbnRzIG9mIHRoZSBibG9iIGFyZSByZWFkXG4gICAgICogZnJvbSBhIGdpdmVuIFVSTC4gIFRoaXMgQVBJIGlzIHN1cHBvcnRlZCBiZWdpbm5pbmcgd2l0aCB0aGUgMjAyMC0wNC0wOCB2ZXJzaW9uLiBQYXJ0aWFsIHVwZGF0ZXMgYXJlXG4gICAgICogbm90IHN1cHBvcnRlZCB3aXRoIFB1dCBCbG9iIGZyb20gVVJMOyB0aGUgY29udGVudCBvZiBhbiBleGlzdGluZyBibG9iIGlzIG92ZXJ3cml0dGVuIHdpdGggdGhlXG4gICAgICogY29udGVudCBvZiB0aGUgbmV3IGJsb2IuICBUbyBwZXJmb3JtIHBhcnRpYWwgdXBkYXRlcyB0byBhIGJsb2NrIGJsb2LigJlzIGNvbnRlbnRzIHVzaW5nIGEgc291cmNlIFVSTCxcbiAgICAgKiB1c2UgdGhlIFB1dCBCbG9jayBmcm9tIFVSTCBBUEkgaW4gY29uanVuY3Rpb24gd2l0aCBQdXQgQmxvY2sgTGlzdC5cbiAgICAgKiBAcGFyYW0gY29udGVudExlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBjb3B5U291cmNlIFNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgc291cmNlIHBhZ2UgYmxvYiBzbmFwc2hvdC4gVGhpcyB2YWx1ZSBpcyBhIFVSTCBvZiB1cCB0b1xuICAgICAqICAgICAgICAgICAgICAgICAgIDIgS0IgaW4gbGVuZ3RoIHRoYXQgc3BlY2lmaWVzIGEgcGFnZSBibG9iIHNuYXBzaG90LiBUaGUgdmFsdWUgc2hvdWxkIGJlIFVSTC1lbmNvZGVkIGFzIGl0IHdvdWxkXG4gICAgICogICAgICAgICAgICAgICAgICAgYXBwZWFyIGluIGEgcmVxdWVzdCBVUkkuIFRoZSBzb3VyY2UgYmxvYiBtdXN0IGVpdGhlciBiZSBwdWJsaWMgb3IgbXVzdCBiZSBhdXRoZW50aWNhdGVkIHZpYSBhIHNoYXJlZFxuICAgICAqICAgICAgICAgICAgICAgICAgIGFjY2VzcyBzaWduYXR1cmUuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBwdXRCbG9iRnJvbVVybChjb250ZW50TGVuZ3RoLCBjb3B5U291cmNlLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IGNvbnRlbnRMZW5ndGgsIGNvcHlTb3VyY2UsIG9wdGlvbnMgfSwgcHV0QmxvYkZyb21VcmxPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIFN0YWdlIEJsb2NrIG9wZXJhdGlvbiBjcmVhdGVzIGEgbmV3IGJsb2NrIHRvIGJlIGNvbW1pdHRlZCBhcyBwYXJ0IG9mIGEgYmxvYlxuICAgICAqIEBwYXJhbSBibG9ja0lkIEEgdmFsaWQgQmFzZTY0IHN0cmluZyB2YWx1ZSB0aGF0IGlkZW50aWZpZXMgdGhlIGJsb2NrLiBQcmlvciB0byBlbmNvZGluZywgdGhlIHN0cmluZ1xuICAgICAqICAgICAgICAgICAgICAgIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDY0IGJ5dGVzIGluIHNpemUuIEZvciBhIGdpdmVuIGJsb2IsIHRoZSBsZW5ndGggb2YgdGhlIHZhbHVlIHNwZWNpZmllZFxuICAgICAqICAgICAgICAgICAgICAgIGZvciB0aGUgYmxvY2tpZCBwYXJhbWV0ZXIgbXVzdCBiZSB0aGUgc2FtZSBzaXplIGZvciBlYWNoIGJsb2NrLlxuICAgICAqIEBwYXJhbSBjb250ZW50TGVuZ3RoIFRoZSBsZW5ndGggb2YgdGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIGJvZHkgSW5pdGlhbCBkYXRhXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBzdGFnZUJsb2NrKGJsb2NrSWQsIGNvbnRlbnRMZW5ndGgsIGJvZHksIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgYmxvY2tJZCwgY29udGVudExlbmd0aCwgYm9keSwgb3B0aW9ucyB9LCBzdGFnZUJsb2NrT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBTdGFnZSBCbG9jayBvcGVyYXRpb24gY3JlYXRlcyBhIG5ldyBibG9jayB0byBiZSBjb21taXR0ZWQgYXMgcGFydCBvZiBhIGJsb2Igd2hlcmUgdGhlIGNvbnRlbnRzXG4gICAgICogYXJlIHJlYWQgZnJvbSBhIFVSTC5cbiAgICAgKiBAcGFyYW0gYmxvY2tJZCBBIHZhbGlkIEJhc2U2NCBzdHJpbmcgdmFsdWUgdGhhdCBpZGVudGlmaWVzIHRoZSBibG9jay4gUHJpb3IgdG8gZW5jb2RpbmcsIHRoZSBzdHJpbmdcbiAgICAgKiAgICAgICAgICAgICAgICBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byA2NCBieXRlcyBpbiBzaXplLiBGb3IgYSBnaXZlbiBibG9iLCB0aGUgbGVuZ3RoIG9mIHRoZSB2YWx1ZSBzcGVjaWZpZWRcbiAgICAgKiAgICAgICAgICAgICAgICBmb3IgdGhlIGJsb2NraWQgcGFyYW1ldGVyIG11c3QgYmUgdGhlIHNhbWUgc2l6ZSBmb3IgZWFjaCBibG9jay5cbiAgICAgKiBAcGFyYW0gY29udGVudExlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBzb3VyY2VVcmwgU3BlY2lmeSBhIFVSTCB0byB0aGUgY29weSBzb3VyY2UuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBzdGFnZUJsb2NrRnJvbVVSTChibG9ja0lkLCBjb250ZW50TGVuZ3RoLCBzb3VyY2VVcmwsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgYmxvY2tJZCwgY29udGVudExlbmd0aCwgc291cmNlVXJsLCBvcHRpb25zIH0sIHN0YWdlQmxvY2tGcm9tVVJMT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBDb21taXQgQmxvY2sgTGlzdCBvcGVyYXRpb24gd3JpdGVzIGEgYmxvYiBieSBzcGVjaWZ5aW5nIHRoZSBsaXN0IG9mIGJsb2NrIElEcyB0aGF0IG1ha2UgdXAgdGhlXG4gICAgICogYmxvYi4gSW4gb3JkZXIgdG8gYmUgd3JpdHRlbiBhcyBwYXJ0IG9mIGEgYmxvYiwgYSBibG9jayBtdXN0IGhhdmUgYmVlbiBzdWNjZXNzZnVsbHkgd3JpdHRlbiB0byB0aGVcbiAgICAgKiBzZXJ2ZXIgaW4gYSBwcmlvciBQdXQgQmxvY2sgb3BlcmF0aW9uLiBZb3UgY2FuIGNhbGwgUHV0IEJsb2NrIExpc3QgdG8gdXBkYXRlIGEgYmxvYiBieSB1cGxvYWRpbmdcbiAgICAgKiBvbmx5IHRob3NlIGJsb2NrcyB0aGF0IGhhdmUgY2hhbmdlZCwgdGhlbiBjb21taXR0aW5nIHRoZSBuZXcgYW5kIGV4aXN0aW5nIGJsb2NrcyB0b2dldGhlci4gWW91IGNhblxuICAgICAqIGRvIHRoaXMgYnkgc3BlY2lmeWluZyB3aGV0aGVyIHRvIGNvbW1pdCBhIGJsb2NrIGZyb20gdGhlIGNvbW1pdHRlZCBibG9jayBsaXN0IG9yIGZyb20gdGhlXG4gICAgICogdW5jb21taXR0ZWQgYmxvY2sgbGlzdCwgb3IgdG8gY29tbWl0IHRoZSBtb3N0IHJlY2VudGx5IHVwbG9hZGVkIHZlcnNpb24gb2YgdGhlIGJsb2NrLCB3aGljaGV2ZXIgbGlzdFxuICAgICAqIGl0IG1heSBiZWxvbmcgdG8uXG4gICAgICogQHBhcmFtIGJsb2NrcyBCbG9iIEJsb2Nrcy5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGNvbW1pdEJsb2NrTGlzdChibG9ja3MsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgYmxvY2tzLCBvcHRpb25zIH0sIGNvbW1pdEJsb2NrTGlzdE9wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgR2V0IEJsb2NrIExpc3Qgb3BlcmF0aW9uIHJldHJpZXZlcyB0aGUgbGlzdCBvZiBibG9ja3MgdGhhdCBoYXZlIGJlZW4gdXBsb2FkZWQgYXMgcGFydCBvZiBhIGJsb2NrXG4gICAgICogYmxvYlxuICAgICAqIEBwYXJhbSBsaXN0VHlwZSBTcGVjaWZpZXMgd2hldGhlciB0byByZXR1cm4gdGhlIGxpc3Qgb2YgY29tbWl0dGVkIGJsb2NrcywgdGhlIGxpc3Qgb2YgdW5jb21taXR0ZWRcbiAgICAgKiAgICAgICAgICAgICAgICAgYmxvY2tzLCBvciBib3RoIGxpc3RzIHRvZ2V0aGVyLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgZ2V0QmxvY2tMaXN0KGxpc3RUeXBlLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IGxpc3RUeXBlLCBvcHRpb25zIH0sIGdldEJsb2NrTGlzdE9wZXJhdGlvblNwZWMpO1xuICAgIH1cbn1cbi8vIE9wZXJhdGlvbiBTcGVjaWZpY2F0aW9uc1xuY29uc3QgeG1sU2VyaWFsaXplciA9IGNvcmVDbGllbnRfX25hbWVzcGFjZS5jcmVhdGVTZXJpYWxpemVyKE1hcHBlcnMsIC8qIGlzWG1sICovIHRydWUpO1xuY29uc3QgdXBsb2FkT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAxOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9ja0Jsb2JVcGxvYWRIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9ja0Jsb2JVcGxvYWRFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcmVxdWVzdEJvZHk6IGJvZHkxLFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW3RpbWVvdXRJblNlY29uZHNdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBjb250ZW50TGVuZ3RoLFxuICAgICAgICBtZXRhZGF0YSxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgZW5jcnlwdGlvbktleSxcbiAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1NixcbiAgICAgICAgZW5jcnlwdGlvbkFsZ29yaXRobSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICAgICAgYmxvYkNhY2hlQ29udHJvbCxcbiAgICAgICAgYmxvYkNvbnRlbnRUeXBlLFxuICAgICAgICBibG9iQ29udGVudE1ENSxcbiAgICAgICAgYmxvYkNvbnRlbnRFbmNvZGluZyxcbiAgICAgICAgYmxvYkNvbnRlbnRMYW5ndWFnZSxcbiAgICAgICAgYmxvYkNvbnRlbnREaXNwb3NpdGlvbixcbiAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5RXhwaXJ5LFxuICAgICAgICBpbW11dGFiaWxpdHlQb2xpY3lNb2RlLFxuICAgICAgICBlbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgIHRpZXIsXG4gICAgICAgIGJsb2JUYWdzU3RyaW5nLFxuICAgICAgICBsZWdhbEhvbGQxLFxuICAgICAgICB0cmFuc2FjdGlvbmFsQ29udGVudE1ENSxcbiAgICAgICAgdHJhbnNhY3Rpb25hbENvbnRlbnRDcmM2NCxcbiAgICAgICAgY29udGVudFR5cGUxLFxuICAgICAgICBhY2NlcHQyLFxuICAgICAgICBibG9iVHlwZTIsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi94bWw7IGNoYXJzZXQ9dXRmLThcIixcbiAgICBtZWRpYVR5cGU6IFwiYmluYXJ5XCIsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplcixcbn07XG5jb25zdCBwdXRCbG9iRnJvbVVybE9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMToge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvY2tCbG9iUHV0QmxvYkZyb21VcmxIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9ja0Jsb2JQdXRCbG9iRnJvbVVybEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgbWV0YWRhdGEsXG4gICAgICAgIGxlYXNlSWQsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIGVuY3J5cHRpb25LZXksXG4gICAgICAgIGVuY3J5cHRpb25LZXlTaGEyNTYsXG4gICAgICAgIGVuY3J5cHRpb25BbGdvcml0aG0sXG4gICAgICAgIGlmTWF0Y2gsXG4gICAgICAgIGlmTm9uZU1hdGNoLFxuICAgICAgICBpZlRhZ3MsXG4gICAgICAgIGJsb2JDYWNoZUNvbnRyb2wsXG4gICAgICAgIGJsb2JDb250ZW50VHlwZSxcbiAgICAgICAgYmxvYkNvbnRlbnRNRDUsXG4gICAgICAgIGJsb2JDb250ZW50RW5jb2RpbmcsXG4gICAgICAgIGJsb2JDb250ZW50TGFuZ3VhZ2UsXG4gICAgICAgIGJsb2JDb250ZW50RGlzcG9zaXRpb24sXG4gICAgICAgIGVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgdGllcixcbiAgICAgICAgc291cmNlSWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBzb3VyY2VJZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgc291cmNlSWZNYXRjaCxcbiAgICAgICAgc291cmNlSWZOb25lTWF0Y2gsXG4gICAgICAgIHNvdXJjZUlmVGFncyxcbiAgICAgICAgY29weVNvdXJjZSxcbiAgICAgICAgYmxvYlRhZ3NTdHJpbmcsXG4gICAgICAgIHNvdXJjZUNvbnRlbnRNRDUsXG4gICAgICAgIGNvcHlTb3VyY2VBdXRob3JpemF0aW9uLFxuICAgICAgICBjb3B5U291cmNlVGFncyxcbiAgICAgICAgdHJhbnNhY3Rpb25hbENvbnRlbnRNRDUsXG4gICAgICAgIGJsb2JUeXBlMixcbiAgICAgICAgY29weVNvdXJjZUJsb2JQcm9wZXJ0aWVzLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplcixcbn07XG5jb25zdCBzdGFnZUJsb2NrT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAxOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9ja0Jsb2JTdGFnZUJsb2NrSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvY2tCbG9iU3RhZ2VCbG9ja0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICByZXF1ZXN0Qm9keTogYm9keTEsXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIGNvbXAyNCxcbiAgICAgICAgYmxvY2tJZCxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBjb250ZW50TGVuZ3RoLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBlbmNyeXB0aW9uS2V5LFxuICAgICAgICBlbmNyeXB0aW9uS2V5U2hhMjU2LFxuICAgICAgICBlbmNyeXB0aW9uQWxnb3JpdGhtLFxuICAgICAgICBlbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgIHRyYW5zYWN0aW9uYWxDb250ZW50TUQ1LFxuICAgICAgICB0cmFuc2FjdGlvbmFsQ29udGVudENyYzY0LFxuICAgICAgICBjb250ZW50VHlwZTEsXG4gICAgICAgIGFjY2VwdDIsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi94bWw7IGNoYXJzZXQ9dXRmLThcIixcbiAgICBtZWRpYVR5cGU6IFwiYmluYXJ5XCIsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplcixcbn07XG5jb25zdCBzdGFnZUJsb2NrRnJvbVVSTE9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMToge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvY2tCbG9iU3RhZ2VCbG9ja0Zyb21VUkxIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9ja0Jsb2JTdGFnZUJsb2NrRnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFtcbiAgICAgICAgdGltZW91dEluU2Vjb25kcyxcbiAgICAgICAgY29tcDI0LFxuICAgICAgICBibG9ja0lkLFxuICAgIF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIGNvbnRlbnRMZW5ndGgsXG4gICAgICAgIGxlYXNlSWQsXG4gICAgICAgIGVuY3J5cHRpb25LZXksXG4gICAgICAgIGVuY3J5cHRpb25LZXlTaGEyNTYsXG4gICAgICAgIGVuY3J5cHRpb25BbGdvcml0aG0sXG4gICAgICAgIGVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgc291cmNlSWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBzb3VyY2VJZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgc291cmNlSWZNYXRjaCxcbiAgICAgICAgc291cmNlSWZOb25lTWF0Y2gsXG4gICAgICAgIHNvdXJjZUNvbnRlbnRNRDUsXG4gICAgICAgIGNvcHlTb3VyY2VBdXRob3JpemF0aW9uLFxuICAgICAgICBzb3VyY2VVcmwsXG4gICAgICAgIHNvdXJjZUNvbnRlbnRDcmM2NCxcbiAgICAgICAgc291cmNlUmFuZ2UxLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplcixcbn07XG5jb25zdCBjb21taXRCbG9ja0xpc3RPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDE6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2NrQmxvYkNvbW1pdEJsb2NrTGlzdEhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2NrQmxvYkNvbW1pdEJsb2NrTGlzdEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICByZXF1ZXN0Qm9keTogYmxvY2tzLFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW3RpbWVvdXRJblNlY29uZHMsIGNvbXAyNV0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICBjb250ZW50VHlwZSxcbiAgICAgICAgYWNjZXB0LFxuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIG1ldGFkYXRhLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBlbmNyeXB0aW9uS2V5LFxuICAgICAgICBlbmNyeXB0aW9uS2V5U2hhMjU2LFxuICAgICAgICBlbmNyeXB0aW9uQWxnb3JpdGhtLFxuICAgICAgICBpZk1hdGNoLFxuICAgICAgICBpZk5vbmVNYXRjaCxcbiAgICAgICAgaWZUYWdzLFxuICAgICAgICBibG9iQ2FjaGVDb250cm9sLFxuICAgICAgICBibG9iQ29udGVudFR5cGUsXG4gICAgICAgIGJsb2JDb250ZW50TUQ1LFxuICAgICAgICBibG9iQ29udGVudEVuY29kaW5nLFxuICAgICAgICBibG9iQ29udGVudExhbmd1YWdlLFxuICAgICAgICBibG9iQ29udGVudERpc3Bvc2l0aW9uLFxuICAgICAgICBpbW11dGFiaWxpdHlQb2xpY3lFeHBpcnksXG4gICAgICAgIGltbXV0YWJpbGl0eVBvbGljeU1vZGUsXG4gICAgICAgIGVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgdGllcixcbiAgICAgICAgYmxvYlRhZ3NTdHJpbmcsXG4gICAgICAgIGxlZ2FsSG9sZDEsXG4gICAgICAgIHRyYW5zYWN0aW9uYWxDb250ZW50TUQ1LFxuICAgICAgICB0cmFuc2FjdGlvbmFsQ29udGVudENyYzY0LFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgY29udGVudFR5cGU6IFwiYXBwbGljYXRpb24veG1sOyBjaGFyc2V0PXV0Zi04XCIsXG4gICAgbWVkaWFUeXBlOiBcInhtbFwiLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIsXG59O1xuY29uc3QgZ2V0QmxvY2tMaXN0T3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJHRVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBCbG9ja0xpc3QsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9ja0Jsb2JHZXRCbG9ja0xpc3RIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9ja0Jsb2JHZXRCbG9ja0xpc3RFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIHNuYXBzaG90LFxuICAgICAgICBjb21wMjUsXG4gICAgICAgIGxpc3RUeXBlLFxuICAgIF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIGxlYXNlSWQsXG4gICAgICAgIGlmVGFncyxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIsXG59O1xuXG4vKlxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKlxuICogQ29kZSBnZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBBdXRvUmVzdCBDb2RlIEdlbmVyYXRvci5cbiAqIENoYW5nZXMgbWF5IGNhdXNlIGluY29ycmVjdCBiZWhhdmlvciBhbmQgd2lsbCBiZSBsb3N0IGlmIHRoZSBjb2RlIGlzIHJlZ2VuZXJhdGVkLlxuICovXG5sZXQgU3RvcmFnZUNsaWVudCQxID0gY2xhc3MgU3RvcmFnZUNsaWVudCBleHRlbmRzIGNvcmVIdHRwQ29tcGF0X19uYW1lc3BhY2UuRXh0ZW5kZWRTZXJ2aWNlQ2xpZW50IHtcbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgU3RvcmFnZUNsaWVudCBjbGFzcy5cbiAgICAgKiBAcGFyYW0gdXJsIFRoZSBVUkwgb2YgdGhlIHNlcnZpY2UgYWNjb3VudCwgY29udGFpbmVyLCBvciBibG9iIHRoYXQgaXMgdGhlIHRhcmdldCBvZiB0aGUgZGVzaXJlZFxuICAgICAqICAgICAgICAgICAgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBwYXJhbWV0ZXIgb3B0aW9uc1xuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHVybCwgb3B0aW9ucykge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBpZiAodXJsID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIid1cmwnIGNhbm5vdCBiZSBudWxsXCIpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEluaXRpYWxpemluZyBkZWZhdWx0IHZhbHVlcyBmb3Igb3B0aW9uc1xuICAgICAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgICAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkZWZhdWx0cyA9IHtcbiAgICAgICAgICAgIHJlcXVlc3RDb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04XCIsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHBhY2thZ2VEZXRhaWxzID0gYGF6c2RrLWpzLWF6dXJlLXN0b3JhZ2UtYmxvYi8xMi4yNS4wYDtcbiAgICAgICAgY29uc3QgdXNlckFnZW50UHJlZml4ID0gb3B0aW9ucy51c2VyQWdlbnRPcHRpb25zICYmIG9wdGlvbnMudXNlckFnZW50T3B0aW9ucy51c2VyQWdlbnRQcmVmaXhcbiAgICAgICAgICAgID8gYCR7b3B0aW9ucy51c2VyQWdlbnRPcHRpb25zLnVzZXJBZ2VudFByZWZpeH0gJHtwYWNrYWdlRGV0YWlsc31gXG4gICAgICAgICAgICA6IGAke3BhY2thZ2VEZXRhaWxzfWA7XG4gICAgICAgIGNvbnN0IG9wdGlvbnNXaXRoRGVmYXVsdHMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdHMpLCBvcHRpb25zKSwgeyB1c2VyQWdlbnRPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgdXNlckFnZW50UHJlZml4LFxuICAgICAgICAgICAgfSwgZW5kcG9pbnQ6IChfYiA9IChfYSA9IG9wdGlvbnMuZW5kcG9pbnQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IG9wdGlvbnMuYmFzZVVyaSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogXCJ7dXJsfVwiIH0pO1xuICAgICAgICBzdXBlcihvcHRpb25zV2l0aERlZmF1bHRzKTtcbiAgICAgICAgLy8gUGFyYW1ldGVyIGFzc2lnbm1lbnRzXG4gICAgICAgIHRoaXMudXJsID0gdXJsO1xuICAgICAgICAvLyBBc3NpZ25pbmcgdmFsdWVzIHRvIENvbnN0YW50IHBhcmFtZXRlcnNcbiAgICAgICAgdGhpcy52ZXJzaW9uID0gb3B0aW9ucy52ZXJzaW9uIHx8IFwiMjAyNC0xMS0wNFwiO1xuICAgICAgICB0aGlzLnNlcnZpY2UgPSBuZXcgU2VydmljZUltcGwodGhpcyk7XG4gICAgICAgIHRoaXMuY29udGFpbmVyID0gbmV3IENvbnRhaW5lckltcGwodGhpcyk7XG4gICAgICAgIHRoaXMuYmxvYiA9IG5ldyBCbG9iSW1wbCh0aGlzKTtcbiAgICAgICAgdGhpcy5wYWdlQmxvYiA9IG5ldyBQYWdlQmxvYkltcGwodGhpcyk7XG4gICAgICAgIHRoaXMuYXBwZW5kQmxvYiA9IG5ldyBBcHBlbmRCbG9iSW1wbCh0aGlzKTtcbiAgICAgICAgdGhpcy5ibG9ja0Jsb2IgPSBuZXcgQmxvY2tCbG9iSW1wbCh0aGlzKTtcbiAgICB9XG59O1xuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmNsYXNzIFN0b3JhZ2VDb250ZXh0Q2xpZW50IGV4dGVuZHMgU3RvcmFnZUNsaWVudCQxIHtcbiAgICBhc3luYyBzZW5kT3BlcmF0aW9uUmVxdWVzdChvcGVyYXRpb25Bcmd1bWVudHMsIG9wZXJhdGlvblNwZWMpIHtcbiAgICAgICAgY29uc3Qgb3BlcmF0aW9uU3BlY1RvU2VuZCA9IE9iamVjdC5hc3NpZ24oe30sIG9wZXJhdGlvblNwZWMpO1xuICAgICAgICBpZiAob3BlcmF0aW9uU3BlY1RvU2VuZC5wYXRoID09PSBcIi97Y29udGFpbmVyTmFtZX1cIiB8fFxuICAgICAgICAgICAgb3BlcmF0aW9uU3BlY1RvU2VuZC5wYXRoID09PSBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIpIHtcbiAgICAgICAgICAgIG9wZXJhdGlvblNwZWNUb1NlbmQucGF0aCA9IFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN1cGVyLnNlbmRPcGVyYXRpb25SZXF1ZXN0KG9wZXJhdGlvbkFyZ3VtZW50cywgb3BlcmF0aW9uU3BlY1RvU2VuZCk7XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogQSBTdG9yYWdlQ2xpZW50IHJlcHJlc2VudHMgYSBiYXNlZCBVUkwgY2xhc3MgZm9yIHtAbGluayBCbG9iU2VydmljZUNsaWVudH0sIHtAbGluayBDb250YWluZXJDbGllbnR9XG4gKiBhbmQgZXRjLlxuICovXG5jbGFzcyBTdG9yYWdlQ2xpZW50IHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIFN0b3JhZ2VDbGllbnQuXG4gICAgICogQHBhcmFtIHVybCAtIHVybCB0byByZXNvdXJjZVxuICAgICAqIEBwYXJhbSBwaXBlbGluZSAtIHJlcXVlc3QgcG9saWN5IHBpcGVsaW5lLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHVybCwgcGlwZWxpbmUpIHtcbiAgICAgICAgLy8gVVJMIHNob3VsZCBiZSBlbmNvZGVkIGFuZCBvbmx5IG9uY2UsIHByb3RvY29sIGxheWVyIHNob3VsZG4ndCBlbmNvZGUgVVJMIGFnYWluXG4gICAgICAgIHRoaXMudXJsID0gZXNjYXBlVVJMUGF0aCh1cmwpO1xuICAgICAgICB0aGlzLmFjY291bnROYW1lID0gZ2V0QWNjb3VudE5hbWVGcm9tVXJsKHVybCk7XG4gICAgICAgIHRoaXMucGlwZWxpbmUgPSBwaXBlbGluZTtcbiAgICAgICAgdGhpcy5zdG9yYWdlQ2xpZW50Q29udGV4dCA9IG5ldyBTdG9yYWdlQ29udGV4dENsaWVudCh0aGlzLnVybCwgZ2V0Q29yZUNsaWVudE9wdGlvbnMocGlwZWxpbmUpKTtcbiAgICAgICAgdGhpcy5pc0h0dHBzID0gaUVxdWFsKGdldFVSTFNjaGVtZSh0aGlzLnVybCkgfHwgXCJcIiwgXCJodHRwc1wiKTtcbiAgICAgICAgdGhpcy5jcmVkZW50aWFsID0gZ2V0Q3JlZGVudGlhbEZyb21QaXBlbGluZShwaXBlbGluZSk7XG4gICAgICAgIC8vIE92ZXJyaWRlIHByb3RvY29sIGxheWVyJ3MgZGVmYXVsdCBjb250ZW50LXR5cGVcbiAgICAgICAgY29uc3Qgc3RvcmFnZUNsaWVudENvbnRleHQgPSB0aGlzLnN0b3JhZ2VDbGllbnRDb250ZXh0O1xuICAgICAgICBzdG9yYWdlQ2xpZW50Q29udGV4dC5yZXF1ZXN0Q29udGVudFR5cGUgPSB1bmRlZmluZWQ7XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogQ3JlYXRlcyBhIHNwYW4gdXNpbmcgdGhlIGdsb2JhbCB0cmFjZXIuXG4gKiBAaW50ZXJuYWxcbiAqL1xuY29uc3QgdHJhY2luZ0NsaWVudCA9IGNvcmVUcmFjaW5nLmNyZWF0ZVRyYWNpbmdDbGllbnQoe1xuICAgIHBhY2thZ2VOYW1lOiBcIkBhenVyZS9zdG9yYWdlLWJsb2JcIixcbiAgICBwYWNrYWdlVmVyc2lvbjogU0RLX1ZFUlNJT04sXG4gICAgbmFtZXNwYWNlOiBcIk1pY3Jvc29mdC5TdG9yYWdlXCIsXG59KTtcblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIE9OTFkgQVZBSUxBQkxFIElOIE5PREUuSlMgUlVOVElNRS5cbiAqXG4gKiBUaGlzIGlzIGEgaGVscGVyIGNsYXNzIHRvIGNvbnN0cnVjdCBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHBlcm1pc3Npb25zIGdyYW50ZWQgYnkgYSBTZXJ2aWNlU0FTIHRvIGEgYmxvYi4gU2V0dGluZ1xuICogYSB2YWx1ZSB0byB0cnVlIG1lYW5zIHRoYXQgYW55IFNBUyB3aGljaCB1c2VzIHRoZXNlIHBlcm1pc3Npb25zIHdpbGwgZ3JhbnQgcGVybWlzc2lvbnMgZm9yIHRoYXQgb3BlcmF0aW9uLiBPbmNlIGFsbFxuICogdGhlIHZhbHVlcyBhcmUgc2V0LCB0aGlzIHNob3VsZCBiZSBzZXJpYWxpemVkIHdpdGggdG9TdHJpbmcgYW5kIHNldCBhcyB0aGUgcGVybWlzc2lvbnMgZmllbGQgb24gYVxuICoge0BsaW5rIEJsb2JTQVNTaWduYXR1cmVWYWx1ZXN9IG9iamVjdC4gSXQgaXMgcG9zc2libGUgdG8gY29uc3RydWN0IHRoZSBwZXJtaXNzaW9ucyBzdHJpbmcgd2l0aG91dCB0aGlzIGNsYXNzLCBidXRcbiAqIHRoZSBvcmRlciBvZiB0aGUgcGVybWlzc2lvbnMgaXMgcGFydGljdWxhciBhbmQgdGhpcyBjbGFzcyBndWFyYW50ZWVzIGNvcnJlY3RuZXNzLlxuICovXG5jbGFzcyBCbG9iU0FTUGVybWlzc2lvbnMge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIFJlYWQgYWNjZXNzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnJlYWQgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyBBZGQgYWNjZXNzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmFkZCA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIENyZWF0ZSBhY2Nlc3MgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY3JlYXRlID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgV3JpdGUgYWNjZXNzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLndyaXRlID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgRGVsZXRlIGFjY2VzcyBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5kZWxldGUgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyBEZWxldGUgdmVyc2lvbiBhY2Nlc3MgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZGVsZXRlVmVyc2lvbiA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2ZpZXMgVGFnIGFjY2VzcyBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy50YWcgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyBNb3ZlIGFjY2VzcyBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5tb3ZlID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgRXhlY3V0ZSBhY2Nlc3MgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZXhlY3V0ZSA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIFNldEltbXV0YWJpbGl0eVBvbGljeSBhY2Nlc3MgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuc2V0SW1tdXRhYmlsaXR5UG9saWN5ID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgdGhhdCBQZXJtYW5lbnQgRGVsZXRlIGlzIHBlcm1pdHRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMucGVybWFuZW50RGVsZXRlID0gZmFsc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSB7QGxpbmsgQmxvYlNBU1Blcm1pc3Npb25zfSBmcm9tIHRoZSBzcGVjaWZpZWQgcGVybWlzc2lvbnMgc3RyaW5nLiBUaGlzIG1ldGhvZCB3aWxsIHRocm93IGFuXG4gICAgICogRXJyb3IgaWYgaXQgZW5jb3VudGVycyBhIGNoYXJhY3RlciB0aGF0IGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSB2YWxpZCBwZXJtaXNzaW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIHBlcm1pc3Npb25zIC1cbiAgICAgKi9cbiAgICBzdGF0aWMgcGFyc2UocGVybWlzc2lvbnMpIHtcbiAgICAgICAgY29uc3QgYmxvYlNBU1Blcm1pc3Npb25zID0gbmV3IEJsb2JTQVNQZXJtaXNzaW9ucygpO1xuICAgICAgICBmb3IgKGNvbnN0IGNoYXIgb2YgcGVybWlzc2lvbnMpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoY2hhcikge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJyXCI6XG4gICAgICAgICAgICAgICAgICAgIGJsb2JTQVNQZXJtaXNzaW9ucy5yZWFkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImFcIjpcbiAgICAgICAgICAgICAgICAgICAgYmxvYlNBU1Blcm1pc3Npb25zLmFkZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJjXCI6XG4gICAgICAgICAgICAgICAgICAgIGJsb2JTQVNQZXJtaXNzaW9ucy5jcmVhdGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwid1wiOlxuICAgICAgICAgICAgICAgICAgICBibG9iU0FTUGVybWlzc2lvbnMud3JpdGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiZFwiOlxuICAgICAgICAgICAgICAgICAgICBibG9iU0FTUGVybWlzc2lvbnMuZGVsZXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInhcIjpcbiAgICAgICAgICAgICAgICAgICAgYmxvYlNBU1Blcm1pc3Npb25zLmRlbGV0ZVZlcnNpb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwidFwiOlxuICAgICAgICAgICAgICAgICAgICBibG9iU0FTUGVybWlzc2lvbnMudGFnID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm1cIjpcbiAgICAgICAgICAgICAgICAgICAgYmxvYlNBU1Blcm1pc3Npb25zLm1vdmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiZVwiOlxuICAgICAgICAgICAgICAgICAgICBibG9iU0FTUGVybWlzc2lvbnMuZXhlY3V0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJpXCI6XG4gICAgICAgICAgICAgICAgICAgIGJsb2JTQVNQZXJtaXNzaW9ucy5zZXRJbW11dGFiaWxpdHlQb2xpY3kgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwieVwiOlxuICAgICAgICAgICAgICAgICAgICBibG9iU0FTUGVybWlzc2lvbnMucGVybWFuZW50RGVsZXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEludmFsaWQgcGVybWlzc2lvbjogJHtjaGFyfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBibG9iU0FTUGVybWlzc2lvbnM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSB7QGxpbmsgQmxvYlNBU1Blcm1pc3Npb25zfSBmcm9tIGEgcmF3IG9iamVjdCB3aGljaCBjb250YWlucyBzYW1lIGtleXMgYXMgaXRcbiAgICAgKiBhbmQgYm9vbGVhbiB2YWx1ZXMgZm9yIHRoZW0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGVybWlzc2lvbkxpa2UgLVxuICAgICAqL1xuICAgIHN0YXRpYyBmcm9tKHBlcm1pc3Npb25MaWtlKSB7XG4gICAgICAgIGNvbnN0IGJsb2JTQVNQZXJtaXNzaW9ucyA9IG5ldyBCbG9iU0FTUGVybWlzc2lvbnMoKTtcbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLnJlYWQpIHtcbiAgICAgICAgICAgIGJsb2JTQVNQZXJtaXNzaW9ucy5yZWFkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2UuYWRkKSB7XG4gICAgICAgICAgICBibG9iU0FTUGVybWlzc2lvbnMuYWRkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2UuY3JlYXRlKSB7XG4gICAgICAgICAgICBibG9iU0FTUGVybWlzc2lvbnMuY3JlYXRlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2Uud3JpdGUpIHtcbiAgICAgICAgICAgIGJsb2JTQVNQZXJtaXNzaW9ucy53cml0ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLmRlbGV0ZSkge1xuICAgICAgICAgICAgYmxvYlNBU1Blcm1pc3Npb25zLmRlbGV0ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLmRlbGV0ZVZlcnNpb24pIHtcbiAgICAgICAgICAgIGJsb2JTQVNQZXJtaXNzaW9ucy5kZWxldGVWZXJzaW9uID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2UudGFnKSB7XG4gICAgICAgICAgICBibG9iU0FTUGVybWlzc2lvbnMudGFnID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2UubW92ZSkge1xuICAgICAgICAgICAgYmxvYlNBU1Blcm1pc3Npb25zLm1vdmUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS5leGVjdXRlKSB7XG4gICAgICAgICAgICBibG9iU0FTUGVybWlzc2lvbnMuZXhlY3V0ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLnNldEltbXV0YWJpbGl0eVBvbGljeSkge1xuICAgICAgICAgICAgYmxvYlNBU1Blcm1pc3Npb25zLnNldEltbXV0YWJpbGl0eVBvbGljeSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLnBlcm1hbmVudERlbGV0ZSkge1xuICAgICAgICAgICAgYmxvYlNBU1Blcm1pc3Npb25zLnBlcm1hbmVudERlbGV0ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJsb2JTQVNQZXJtaXNzaW9ucztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29udmVydHMgdGhlIGdpdmVuIHBlcm1pc3Npb25zIHRvIGEgc3RyaW5nLiBVc2luZyB0aGlzIG1ldGhvZCB3aWxsIGd1YXJhbnRlZSB0aGUgcGVybWlzc2lvbnMgYXJlIGluIGFuXG4gICAgICogb3JkZXIgYWNjZXB0ZWQgYnkgdGhlIHNlcnZpY2UuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBBIHN0cmluZyB3aGljaCByZXByZXNlbnRzIHRoZSBCbG9iU0FTUGVybWlzc2lvbnNcbiAgICAgKi9cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgY29uc3QgcGVybWlzc2lvbnMgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMucmVhZCkge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcInJcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuYWRkKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwiYVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jcmVhdGUpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJjXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLndyaXRlKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwid1wiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kZWxldGUpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmRlbGV0ZVZlcnNpb24pIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJ4XCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnRhZykge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcInRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubW92ZSkge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcIm1cIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZXhlY3V0ZSkge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcImVcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2V0SW1tdXRhYmlsaXR5UG9saWN5KSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwiaVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wZXJtYW5lbnREZWxldGUpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJ5XCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwZXJtaXNzaW9ucy5qb2luKFwiXCIpO1xuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIFRoaXMgaXMgYSBoZWxwZXIgY2xhc3MgdG8gY29uc3RydWN0IGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSBhIFNlcnZpY2VTQVMgdG8gYSBjb250YWluZXIuXG4gKiBTZXR0aW5nIGEgdmFsdWUgdG8gdHJ1ZSBtZWFucyB0aGF0IGFueSBTQVMgd2hpY2ggdXNlcyB0aGVzZSBwZXJtaXNzaW9ucyB3aWxsIGdyYW50IHBlcm1pc3Npb25zIGZvciB0aGF0IG9wZXJhdGlvbi5cbiAqIE9uY2UgYWxsIHRoZSB2YWx1ZXMgYXJlIHNldCwgdGhpcyBzaG91bGQgYmUgc2VyaWFsaXplZCB3aXRoIHRvU3RyaW5nIGFuZCBzZXQgYXMgdGhlIHBlcm1pc3Npb25zIGZpZWxkIG9uIGFcbiAqIHtAbGluayBCbG9iU0FTU2lnbmF0dXJlVmFsdWVzfSBvYmplY3QuIEl0IGlzIHBvc3NpYmxlIHRvIGNvbnN0cnVjdCB0aGUgcGVybWlzc2lvbnMgc3RyaW5nIHdpdGhvdXQgdGhpcyBjbGFzcywgYnV0XG4gKiB0aGUgb3JkZXIgb2YgdGhlIHBlcm1pc3Npb25zIGlzIHBhcnRpY3VsYXIgYW5kIHRoaXMgY2xhc3MgZ3VhcmFudGVlcyBjb3JyZWN0bmVzcy5cbiAqL1xuY2xhc3MgQ29udGFpbmVyU0FTUGVybWlzc2lvbnMge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIFJlYWQgYWNjZXNzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnJlYWQgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyBBZGQgYWNjZXNzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmFkZCA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIENyZWF0ZSBhY2Nlc3MgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY3JlYXRlID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgV3JpdGUgYWNjZXNzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLndyaXRlID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgRGVsZXRlIGFjY2VzcyBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5kZWxldGUgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyBEZWxldGUgdmVyc2lvbiBhY2Nlc3MgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZGVsZXRlVmVyc2lvbiA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIExpc3QgYWNjZXNzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmxpc3QgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNmaWVzIFRhZyBhY2Nlc3MgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudGFnID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgTW92ZSBhY2Nlc3MgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMubW92ZSA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIEV4ZWN1dGUgYWNjZXNzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmV4ZWN1dGUgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyBTZXRJbW11dGFiaWxpdHlQb2xpY3kgYWNjZXNzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnNldEltbXV0YWJpbGl0eVBvbGljeSA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHRoYXQgUGVybWFuZW50IERlbGV0ZSBpcyBwZXJtaXR0ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnBlcm1hbmVudERlbGV0ZSA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHRoYXQgRmlsdGVyIEJsb2JzIGJ5IFRhZ3MgaXMgcGVybWl0dGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5maWx0ZXJCeVRhZ3MgPSBmYWxzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiB7QGxpbmsgQ29udGFpbmVyU0FTUGVybWlzc2lvbnN9IGZyb20gdGhlIHNwZWNpZmllZCBwZXJtaXNzaW9ucyBzdHJpbmcuIFRoaXMgbWV0aG9kIHdpbGwgdGhyb3cgYW5cbiAgICAgKiBFcnJvciBpZiBpdCBlbmNvdW50ZXJzIGEgY2hhcmFjdGVyIHRoYXQgZG9lcyBub3QgY29ycmVzcG9uZCB0byBhIHZhbGlkIHBlcm1pc3Npb24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGVybWlzc2lvbnMgLVxuICAgICAqL1xuICAgIHN0YXRpYyBwYXJzZShwZXJtaXNzaW9ucykge1xuICAgICAgICBjb25zdCBjb250YWluZXJTQVNQZXJtaXNzaW9ucyA9IG5ldyBDb250YWluZXJTQVNQZXJtaXNzaW9ucygpO1xuICAgICAgICBmb3IgKGNvbnN0IGNoYXIgb2YgcGVybWlzc2lvbnMpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoY2hhcikge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJyXCI6XG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lclNBU1Blcm1pc3Npb25zLnJlYWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiYVwiOlxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJTQVNQZXJtaXNzaW9ucy5hZGQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiY1wiOlxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJTQVNQZXJtaXNzaW9ucy5jcmVhdGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwid1wiOlxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJTQVNQZXJtaXNzaW9ucy53cml0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJkXCI6XG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lclNBU1Blcm1pc3Npb25zLmRlbGV0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJsXCI6XG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lclNBU1Blcm1pc3Npb25zLmxpc3QgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwidFwiOlxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJTQVNQZXJtaXNzaW9ucy50YWcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwieFwiOlxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJTQVNQZXJtaXNzaW9ucy5kZWxldGVWZXJzaW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm1cIjpcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyU0FTUGVybWlzc2lvbnMubW92ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJlXCI6XG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lclNBU1Blcm1pc3Npb25zLmV4ZWN1dGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiaVwiOlxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJTQVNQZXJtaXNzaW9ucy5zZXRJbW11dGFiaWxpdHlQb2xpY3kgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwieVwiOlxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJTQVNQZXJtaXNzaW9ucy5wZXJtYW5lbnREZWxldGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiZlwiOlxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJTQVNQZXJtaXNzaW9ucy5maWx0ZXJCeVRhZ3MgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgSW52YWxpZCBwZXJtaXNzaW9uICR7Y2hhcn1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29udGFpbmVyU0FTUGVybWlzc2lvbnM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSB7QGxpbmsgQ29udGFpbmVyU0FTUGVybWlzc2lvbnN9IGZyb20gYSByYXcgb2JqZWN0IHdoaWNoIGNvbnRhaW5zIHNhbWUga2V5cyBhcyBpdFxuICAgICAqIGFuZCBib29sZWFuIHZhbHVlcyBmb3IgdGhlbS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwZXJtaXNzaW9uTGlrZSAtXG4gICAgICovXG4gICAgc3RhdGljIGZyb20ocGVybWlzc2lvbkxpa2UpIHtcbiAgICAgICAgY29uc3QgY29udGFpbmVyU0FTUGVybWlzc2lvbnMgPSBuZXcgQ29udGFpbmVyU0FTUGVybWlzc2lvbnMoKTtcbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLnJlYWQpIHtcbiAgICAgICAgICAgIGNvbnRhaW5lclNBU1Blcm1pc3Npb25zLnJlYWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS5hZGQpIHtcbiAgICAgICAgICAgIGNvbnRhaW5lclNBU1Blcm1pc3Npb25zLmFkZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLmNyZWF0ZSkge1xuICAgICAgICAgICAgY29udGFpbmVyU0FTUGVybWlzc2lvbnMuY3JlYXRlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2Uud3JpdGUpIHtcbiAgICAgICAgICAgIGNvbnRhaW5lclNBU1Blcm1pc3Npb25zLndyaXRlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2UuZGVsZXRlKSB7XG4gICAgICAgICAgICBjb250YWluZXJTQVNQZXJtaXNzaW9ucy5kZWxldGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS5saXN0KSB7XG4gICAgICAgICAgICBjb250YWluZXJTQVNQZXJtaXNzaW9ucy5saXN0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2UuZGVsZXRlVmVyc2lvbikge1xuICAgICAgICAgICAgY29udGFpbmVyU0FTUGVybWlzc2lvbnMuZGVsZXRlVmVyc2lvbiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLnRhZykge1xuICAgICAgICAgICAgY29udGFpbmVyU0FTUGVybWlzc2lvbnMudGFnID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2UubW92ZSkge1xuICAgICAgICAgICAgY29udGFpbmVyU0FTUGVybWlzc2lvbnMubW92ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLmV4ZWN1dGUpIHtcbiAgICAgICAgICAgIGNvbnRhaW5lclNBU1Blcm1pc3Npb25zLmV4ZWN1dGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS5zZXRJbW11dGFiaWxpdHlQb2xpY3kpIHtcbiAgICAgICAgICAgIGNvbnRhaW5lclNBU1Blcm1pc3Npb25zLnNldEltbXV0YWJpbGl0eVBvbGljeSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLnBlcm1hbmVudERlbGV0ZSkge1xuICAgICAgICAgICAgY29udGFpbmVyU0FTUGVybWlzc2lvbnMucGVybWFuZW50RGVsZXRlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2UuZmlsdGVyQnlUYWdzKSB7XG4gICAgICAgICAgICBjb250YWluZXJTQVNQZXJtaXNzaW9ucy5maWx0ZXJCeVRhZ3MgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb250YWluZXJTQVNQZXJtaXNzaW9ucztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29udmVydHMgdGhlIGdpdmVuIHBlcm1pc3Npb25zIHRvIGEgc3RyaW5nLiBVc2luZyB0aGlzIG1ldGhvZCB3aWxsIGd1YXJhbnRlZSB0aGUgcGVybWlzc2lvbnMgYXJlIGluIGFuXG4gICAgICogb3JkZXIgYWNjZXB0ZWQgYnkgdGhlIHNlcnZpY2UuXG4gICAgICpcbiAgICAgKiBUaGUgb3JkZXIgb2YgdGhlIGNoYXJhY3RlcnMgc2hvdWxkIGJlIGFzIHNwZWNpZmllZCBoZXJlIHRvIGVuc3VyZSBjb3JyZWN0bmVzcy5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9jb25zdHJ1Y3RpbmctYS1zZXJ2aWNlLXNhc1xuICAgICAqXG4gICAgICovXG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIGNvbnN0IHBlcm1pc3Npb25zID0gW107XG4gICAgICAgIGlmICh0aGlzLnJlYWQpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJyXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmFkZCkge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcImFcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY3JlYXRlKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwiY1wiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy53cml0ZSkge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcIndcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZGVsZXRlKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwiZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kZWxldGVWZXJzaW9uKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwieFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5saXN0KSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwibFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy50YWcpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJ0XCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1vdmUpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJtXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmV4ZWN1dGUpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJlXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNldEltbXV0YWJpbGl0eVBvbGljeSkge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcImlcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucGVybWFuZW50RGVsZXRlKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwieVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5maWx0ZXJCeVRhZ3MpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJmXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwZXJtaXNzaW9ucy5qb2luKFwiXCIpO1xuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIE9OTFkgQVZBSUxBQkxFIElOIE5PREUuSlMgUlVOVElNRS5cbiAqXG4gKiBVc2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwgaXMgb25seSB1c2VkIGZvciBnZW5lcmF0aW9uIG9mIHVzZXIgZGVsZWdhdGlvbiBTQVMuXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9jcmVhdGUtdXNlci1kZWxlZ2F0aW9uLXNhc1xuICovXG5jbGFzcyBVc2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgVXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsLlxuICAgICAqIEBwYXJhbSBhY2NvdW50TmFtZSAtXG4gICAgICogQHBhcmFtIHVzZXJEZWxlZ2F0aW9uS2V5IC1cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihhY2NvdW50TmFtZSwgdXNlckRlbGVnYXRpb25LZXkpIHtcbiAgICAgICAgdGhpcy5hY2NvdW50TmFtZSA9IGFjY291bnROYW1lO1xuICAgICAgICB0aGlzLnVzZXJEZWxlZ2F0aW9uS2V5ID0gdXNlckRlbGVnYXRpb25LZXk7XG4gICAgICAgIHRoaXMua2V5ID0gQnVmZmVyLmZyb20odXNlckRlbGVnYXRpb25LZXkudmFsdWUsIFwiYmFzZTY0XCIpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZW5lcmF0ZXMgYSBoYXNoIHNpZ25hdHVyZSBmb3IgYW4gSFRUUCByZXF1ZXN0IG9yIGZvciBhIFNBUy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzdHJpbmdUb1NpZ24gLVxuICAgICAqL1xuICAgIGNvbXB1dGVITUFDU0hBMjU2KHN0cmluZ1RvU2lnbikge1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhgc3RyaW5nVG9TaWduOiAke0pTT04uc3RyaW5naWZ5KHN0cmluZ1RvU2lnbil9YCk7XG4gICAgICAgIHJldHVybiBjcnlwdG8uY3JlYXRlSG1hYyhcInNoYTI1NlwiLCB0aGlzLmtleSkudXBkYXRlKHN0cmluZ1RvU2lnbiwgXCJ1dGY4XCIpLmRpZ2VzdChcImJhc2U2NFwiKTtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBHZW5lcmF0ZSBTYXNJUFJhbmdlIGZvcm1hdCBzdHJpbmcuIEZvciBleGFtcGxlOlxuICpcbiAqIFwiOC44LjguOFwiIG9yIFwiMS4xLjEuMS0yNTUuMjU1LjI1NS4yNTVcIlxuICpcbiAqIEBwYXJhbSBpcFJhbmdlIC1cbiAqL1xuZnVuY3Rpb24gaXBSYW5nZVRvU3RyaW5nKGlwUmFuZ2UpIHtcbiAgICByZXR1cm4gaXBSYW5nZS5lbmQgPyBgJHtpcFJhbmdlLnN0YXJ0fS0ke2lwUmFuZ2UuZW5kfWAgOiBpcFJhbmdlLnN0YXJ0O1xufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogUHJvdG9jb2xzIGZvciBnZW5lcmF0ZWQgU0FTLlxuICovXG5leHBvcnRzLlNBU1Byb3RvY29sID0gdm9pZCAwO1xuKGZ1bmN0aW9uIChTQVNQcm90b2NvbCkge1xuICAgIC8qKlxuICAgICAqIFByb3RvY29sIHRoYXQgYWxsb3dzIEhUVFBTIG9ubHlcbiAgICAgKi9cbiAgICBTQVNQcm90b2NvbFtcIkh0dHBzXCJdID0gXCJodHRwc1wiO1xuICAgIC8qKlxuICAgICAqIFByb3RvY29sIHRoYXQgYWxsb3dzIGJvdGggSFRUUFMgYW5kIEhUVFBcbiAgICAgKi9cbiAgICBTQVNQcm90b2NvbFtcIkh0dHBzQW5kSHR0cFwiXSA9IFwiaHR0cHMsaHR0cFwiO1xufSkoZXhwb3J0cy5TQVNQcm90b2NvbCB8fCAoZXhwb3J0cy5TQVNQcm90b2NvbCA9IHt9KSk7XG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIGNvbXBvbmVudHMgdGhhdCBtYWtlIHVwIGFuIEF6dXJlIFN0b3JhZ2UgU0FTJyBxdWVyeSBwYXJhbWV0ZXJzLiBUaGlzIHR5cGUgaXMgbm90IGNvbnN0cnVjdGVkIGRpcmVjdGx5XG4gKiBieSB0aGUgdXNlcjsgaXQgaXMgb25seSBnZW5lcmF0ZWQgYnkgdGhlIHtAbGluayBBY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzfSBhbmQge0BsaW5rIEJsb2JTQVNTaWduYXR1cmVWYWx1ZXN9XG4gKiB0eXBlcy4gT25jZSBnZW5lcmF0ZWQsIGl0IGNhbiBiZSBlbmNvZGVkIGludG8gYSB7QGxpbmsgU3RyaW5nfSBhbmQgYXBwZW5kZWQgdG8gYSBVUkwgZGlyZWN0bHkgKHRob3VnaCBjYXV0aW9uIHNob3VsZFxuICogYmUgdGFrZW4gaGVyZSBpbiBjYXNlIHRoZXJlIGFyZSBleGlzdGluZyBxdWVyeSBwYXJhbWV0ZXJzLCB3aGljaCBtaWdodCBhZmZlY3QgdGhlIGFwcHJvcHJpYXRlIG1lYW5zIG9mIGFwcGVuZGluZ1xuICogdGhlc2UgcXVlcnkgcGFyYW1ldGVycykuXG4gKlxuICogTk9URTogSW5zdGFuY2VzIG9mIHRoaXMgY2xhc3MgYXJlIGltbXV0YWJsZS5cbiAqL1xuY2xhc3MgU0FTUXVlcnlQYXJhbWV0ZXJzIHtcbiAgICAvKipcbiAgICAgKiBPcHRpb25hbC4gSVAgcmFuZ2UgYWxsb3dlZCBmb3IgdGhpcyBTQVMuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgaXBSYW5nZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXBSYW5nZUlubmVyKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGVuZDogdGhpcy5pcFJhbmdlSW5uZXIuZW5kLFxuICAgICAgICAgICAgICAgIHN0YXJ0OiB0aGlzLmlwUmFuZ2VJbm5lci5zdGFydCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3RydWN0b3IodmVyc2lvbiwgc2lnbmF0dXJlLCBwZXJtaXNzaW9uc09yT3B0aW9ucywgc2VydmljZXMsIHJlc291cmNlVHlwZXMsIHByb3RvY29sLCBzdGFydHNPbiwgZXhwaXJlc09uLCBpcFJhbmdlLCBpZGVudGlmaWVyLCByZXNvdXJjZSwgY2FjaGVDb250cm9sLCBjb250ZW50RGlzcG9zaXRpb24sIGNvbnRlbnRFbmNvZGluZywgY29udGVudExhbmd1YWdlLCBjb250ZW50VHlwZSwgdXNlckRlbGVnYXRpb25LZXksIHByZWF1dGhvcml6ZWRBZ2VudE9iamVjdElkLCBjb3JyZWxhdGlvbklkLCBlbmNyeXB0aW9uU2NvcGUpIHtcbiAgICAgICAgdGhpcy52ZXJzaW9uID0gdmVyc2lvbjtcbiAgICAgICAgdGhpcy5zaWduYXR1cmUgPSBzaWduYXR1cmU7XG4gICAgICAgIGlmIChwZXJtaXNzaW9uc09yT3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBwZXJtaXNzaW9uc09yT3B0aW9ucyAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgLy8gU0FTUXVlcnlQYXJhbWV0ZXJzT3B0aW9uc1xuICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9ucyA9IHBlcm1pc3Npb25zT3JPcHRpb25zLnBlcm1pc3Npb25zO1xuICAgICAgICAgICAgdGhpcy5zZXJ2aWNlcyA9IHBlcm1pc3Npb25zT3JPcHRpb25zLnNlcnZpY2VzO1xuICAgICAgICAgICAgdGhpcy5yZXNvdXJjZVR5cGVzID0gcGVybWlzc2lvbnNPck9wdGlvbnMucmVzb3VyY2VUeXBlcztcbiAgICAgICAgICAgIHRoaXMucHJvdG9jb2wgPSBwZXJtaXNzaW9uc09yT3B0aW9ucy5wcm90b2NvbDtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRzT24gPSBwZXJtaXNzaW9uc09yT3B0aW9ucy5zdGFydHNPbjtcbiAgICAgICAgICAgIHRoaXMuZXhwaXJlc09uID0gcGVybWlzc2lvbnNPck9wdGlvbnMuZXhwaXJlc09uO1xuICAgICAgICAgICAgdGhpcy5pcFJhbmdlSW5uZXIgPSBwZXJtaXNzaW9uc09yT3B0aW9ucy5pcFJhbmdlO1xuICAgICAgICAgICAgdGhpcy5pZGVudGlmaWVyID0gcGVybWlzc2lvbnNPck9wdGlvbnMuaWRlbnRpZmllcjtcbiAgICAgICAgICAgIHRoaXMuZW5jcnlwdGlvblNjb3BlID0gcGVybWlzc2lvbnNPck9wdGlvbnMuZW5jcnlwdGlvblNjb3BlO1xuICAgICAgICAgICAgdGhpcy5yZXNvdXJjZSA9IHBlcm1pc3Npb25zT3JPcHRpb25zLnJlc291cmNlO1xuICAgICAgICAgICAgdGhpcy5jYWNoZUNvbnRyb2wgPSBwZXJtaXNzaW9uc09yT3B0aW9ucy5jYWNoZUNvbnRyb2w7XG4gICAgICAgICAgICB0aGlzLmNvbnRlbnREaXNwb3NpdGlvbiA9IHBlcm1pc3Npb25zT3JPcHRpb25zLmNvbnRlbnREaXNwb3NpdGlvbjtcbiAgICAgICAgICAgIHRoaXMuY29udGVudEVuY29kaW5nID0gcGVybWlzc2lvbnNPck9wdGlvbnMuY29udGVudEVuY29kaW5nO1xuICAgICAgICAgICAgdGhpcy5jb250ZW50TGFuZ3VhZ2UgPSBwZXJtaXNzaW9uc09yT3B0aW9ucy5jb250ZW50TGFuZ3VhZ2U7XG4gICAgICAgICAgICB0aGlzLmNvbnRlbnRUeXBlID0gcGVybWlzc2lvbnNPck9wdGlvbnMuY29udGVudFR5cGU7XG4gICAgICAgICAgICBpZiAocGVybWlzc2lvbnNPck9wdGlvbnMudXNlckRlbGVnYXRpb25LZXkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNpZ25lZE9pZCA9IHBlcm1pc3Npb25zT3JPcHRpb25zLnVzZXJEZWxlZ2F0aW9uS2V5LnNpZ25lZE9iamVjdElkO1xuICAgICAgICAgICAgICAgIHRoaXMuc2lnbmVkVGVuYW50SWQgPSBwZXJtaXNzaW9uc09yT3B0aW9ucy51c2VyRGVsZWdhdGlvbktleS5zaWduZWRUZW5hbnRJZDtcbiAgICAgICAgICAgICAgICB0aGlzLnNpZ25lZFN0YXJ0c09uID0gcGVybWlzc2lvbnNPck9wdGlvbnMudXNlckRlbGVnYXRpb25LZXkuc2lnbmVkU3RhcnRzT247XG4gICAgICAgICAgICAgICAgdGhpcy5zaWduZWRFeHBpcmVzT24gPSBwZXJtaXNzaW9uc09yT3B0aW9ucy51c2VyRGVsZWdhdGlvbktleS5zaWduZWRFeHBpcmVzT247XG4gICAgICAgICAgICAgICAgdGhpcy5zaWduZWRTZXJ2aWNlID0gcGVybWlzc2lvbnNPck9wdGlvbnMudXNlckRlbGVnYXRpb25LZXkuc2lnbmVkU2VydmljZTtcbiAgICAgICAgICAgICAgICB0aGlzLnNpZ25lZFZlcnNpb24gPSBwZXJtaXNzaW9uc09yT3B0aW9ucy51c2VyRGVsZWdhdGlvbktleS5zaWduZWRWZXJzaW9uO1xuICAgICAgICAgICAgICAgIHRoaXMucHJlYXV0aG9yaXplZEFnZW50T2JqZWN0SWQgPSBwZXJtaXNzaW9uc09yT3B0aW9ucy5wcmVhdXRob3JpemVkQWdlbnRPYmplY3RJZDtcbiAgICAgICAgICAgICAgICB0aGlzLmNvcnJlbGF0aW9uSWQgPSBwZXJtaXNzaW9uc09yT3B0aW9ucy5jb3JyZWxhdGlvbklkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXJ2aWNlcyA9IHNlcnZpY2VzO1xuICAgICAgICAgICAgdGhpcy5yZXNvdXJjZVR5cGVzID0gcmVzb3VyY2VUeXBlcztcbiAgICAgICAgICAgIHRoaXMuZXhwaXJlc09uID0gZXhwaXJlc09uO1xuICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9ucyA9IHBlcm1pc3Npb25zT3JPcHRpb25zO1xuICAgICAgICAgICAgdGhpcy5wcm90b2NvbCA9IHByb3RvY29sO1xuICAgICAgICAgICAgdGhpcy5zdGFydHNPbiA9IHN0YXJ0c09uO1xuICAgICAgICAgICAgdGhpcy5pcFJhbmdlSW5uZXIgPSBpcFJhbmdlO1xuICAgICAgICAgICAgdGhpcy5lbmNyeXB0aW9uU2NvcGUgPSBlbmNyeXB0aW9uU2NvcGU7XG4gICAgICAgICAgICB0aGlzLmlkZW50aWZpZXIgPSBpZGVudGlmaWVyO1xuICAgICAgICAgICAgdGhpcy5yZXNvdXJjZSA9IHJlc291cmNlO1xuICAgICAgICAgICAgdGhpcy5jYWNoZUNvbnRyb2wgPSBjYWNoZUNvbnRyb2w7XG4gICAgICAgICAgICB0aGlzLmNvbnRlbnREaXNwb3NpdGlvbiA9IGNvbnRlbnREaXNwb3NpdGlvbjtcbiAgICAgICAgICAgIHRoaXMuY29udGVudEVuY29kaW5nID0gY29udGVudEVuY29kaW5nO1xuICAgICAgICAgICAgdGhpcy5jb250ZW50TGFuZ3VhZ2UgPSBjb250ZW50TGFuZ3VhZ2U7XG4gICAgICAgICAgICB0aGlzLmNvbnRlbnRUeXBlID0gY29udGVudFR5cGU7XG4gICAgICAgICAgICBpZiAodXNlckRlbGVnYXRpb25LZXkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNpZ25lZE9pZCA9IHVzZXJEZWxlZ2F0aW9uS2V5LnNpZ25lZE9iamVjdElkO1xuICAgICAgICAgICAgICAgIHRoaXMuc2lnbmVkVGVuYW50SWQgPSB1c2VyRGVsZWdhdGlvbktleS5zaWduZWRUZW5hbnRJZDtcbiAgICAgICAgICAgICAgICB0aGlzLnNpZ25lZFN0YXJ0c09uID0gdXNlckRlbGVnYXRpb25LZXkuc2lnbmVkU3RhcnRzT247XG4gICAgICAgICAgICAgICAgdGhpcy5zaWduZWRFeHBpcmVzT24gPSB1c2VyRGVsZWdhdGlvbktleS5zaWduZWRFeHBpcmVzT247XG4gICAgICAgICAgICAgICAgdGhpcy5zaWduZWRTZXJ2aWNlID0gdXNlckRlbGVnYXRpb25LZXkuc2lnbmVkU2VydmljZTtcbiAgICAgICAgICAgICAgICB0aGlzLnNpZ25lZFZlcnNpb24gPSB1c2VyRGVsZWdhdGlvbktleS5zaWduZWRWZXJzaW9uO1xuICAgICAgICAgICAgICAgIHRoaXMucHJlYXV0aG9yaXplZEFnZW50T2JqZWN0SWQgPSBwcmVhdXRob3JpemVkQWdlbnRPYmplY3RJZDtcbiAgICAgICAgICAgICAgICB0aGlzLmNvcnJlbGF0aW9uSWQgPSBjb3JyZWxhdGlvbklkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEVuY29kZXMgYWxsIFNBUyBxdWVyeSBwYXJhbWV0ZXJzIGludG8gYSBzdHJpbmcgdGhhdCBjYW4gYmUgYXBwZW5kZWQgdG8gYSBVUkwuXG4gICAgICpcbiAgICAgKi9cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgY29uc3QgcGFyYW1zID0gW1xuICAgICAgICAgICAgXCJzdlwiLFxuICAgICAgICAgICAgXCJzc1wiLFxuICAgICAgICAgICAgXCJzcnRcIixcbiAgICAgICAgICAgIFwic3ByXCIsXG4gICAgICAgICAgICBcInN0XCIsXG4gICAgICAgICAgICBcInNlXCIsXG4gICAgICAgICAgICBcInNpcFwiLFxuICAgICAgICAgICAgXCJzaVwiLFxuICAgICAgICAgICAgXCJzZXNcIixcbiAgICAgICAgICAgIFwic2tvaWRcIiwgLy8gU2lnbmVkIG9iamVjdCBJRFxuICAgICAgICAgICAgXCJza3RpZFwiLCAvLyBTaWduZWQgdGVuYW50IElEXG4gICAgICAgICAgICBcInNrdFwiLCAvLyBTaWduZWQga2V5IHN0YXJ0IHRpbWVcbiAgICAgICAgICAgIFwic2tlXCIsIC8vIFNpZ25lZCBrZXkgZXhwaXJ5IHRpbWVcbiAgICAgICAgICAgIFwic2tzXCIsIC8vIFNpZ25lZCBrZXkgc2VydmljZVxuICAgICAgICAgICAgXCJza3ZcIiwgLy8gU2lnbmVkIGtleSB2ZXJzaW9uXG4gICAgICAgICAgICBcInNyXCIsXG4gICAgICAgICAgICBcInNwXCIsXG4gICAgICAgICAgICBcInNpZ1wiLFxuICAgICAgICAgICAgXCJyc2NjXCIsXG4gICAgICAgICAgICBcInJzY2RcIixcbiAgICAgICAgICAgIFwicnNjZVwiLFxuICAgICAgICAgICAgXCJyc2NsXCIsXG4gICAgICAgICAgICBcInJzY3RcIixcbiAgICAgICAgICAgIFwic2FvaWRcIixcbiAgICAgICAgICAgIFwic2NpZFwiLFxuICAgICAgICBdO1xuICAgICAgICBjb25zdCBxdWVyaWVzID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcGFyYW0gb2YgcGFyYW1zKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHBhcmFtKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcInN2XCI6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJ5QXBwZW5kUXVlcnlQYXJhbWV0ZXIocXVlcmllcywgcGFyYW0sIHRoaXMudmVyc2lvbik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzc1wiOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIHBhcmFtLCB0aGlzLnNlcnZpY2VzKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNydFwiOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIHBhcmFtLCB0aGlzLnJlc291cmNlVHlwZXMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwic3ByXCI6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJ5QXBwZW5kUXVlcnlQYXJhbWV0ZXIocXVlcmllcywgcGFyYW0sIHRoaXMucHJvdG9jb2wpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwic3RcIjpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cnlBcHBlbmRRdWVyeVBhcmFtZXRlcihxdWVyaWVzLCBwYXJhbSwgdGhpcy5zdGFydHNPbiA/IHRydW5jYXRlZElTTzgwNjFEYXRlKHRoaXMuc3RhcnRzT24sIGZhbHNlKSA6IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzZVwiOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIHBhcmFtLCB0aGlzLmV4cGlyZXNPbiA/IHRydW5jYXRlZElTTzgwNjFEYXRlKHRoaXMuZXhwaXJlc09uLCBmYWxzZSkgOiB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwic2lwXCI6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJ5QXBwZW5kUXVlcnlQYXJhbWV0ZXIocXVlcmllcywgcGFyYW0sIHRoaXMuaXBSYW5nZSA/IGlwUmFuZ2VUb1N0cmluZyh0aGlzLmlwUmFuZ2UpIDogdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNpXCI6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJ5QXBwZW5kUXVlcnlQYXJhbWV0ZXIocXVlcmllcywgcGFyYW0sIHRoaXMuaWRlbnRpZmllcik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzZXNcIjpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cnlBcHBlbmRRdWVyeVBhcmFtZXRlcihxdWVyaWVzLCBwYXJhbSwgdGhpcy5lbmNyeXB0aW9uU2NvcGUpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwic2tvaWRcIjogLy8gU2lnbmVkIG9iamVjdCBJRFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIHBhcmFtLCB0aGlzLnNpZ25lZE9pZCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJza3RpZFwiOiAvLyBTaWduZWQgdGVuYW50IElEXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJ5QXBwZW5kUXVlcnlQYXJhbWV0ZXIocXVlcmllcywgcGFyYW0sIHRoaXMuc2lnbmVkVGVuYW50SWQpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwic2t0XCI6IC8vIFNpZ25lZCBrZXkgc3RhcnQgdGltZVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIHBhcmFtLCB0aGlzLnNpZ25lZFN0YXJ0c09uID8gdHJ1bmNhdGVkSVNPODA2MURhdGUodGhpcy5zaWduZWRTdGFydHNPbiwgZmFsc2UpIDogdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNrZVwiOiAvLyBTaWduZWQga2V5IGV4cGlyeSB0aW1lXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJ5QXBwZW5kUXVlcnlQYXJhbWV0ZXIocXVlcmllcywgcGFyYW0sIHRoaXMuc2lnbmVkRXhwaXJlc09uID8gdHJ1bmNhdGVkSVNPODA2MURhdGUodGhpcy5zaWduZWRFeHBpcmVzT24sIGZhbHNlKSA6IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJza3NcIjogLy8gU2lnbmVkIGtleSBzZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJ5QXBwZW5kUXVlcnlQYXJhbWV0ZXIocXVlcmllcywgcGFyYW0sIHRoaXMuc2lnbmVkU2VydmljZSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJza3ZcIjogLy8gU2lnbmVkIGtleSB2ZXJzaW9uXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJ5QXBwZW5kUXVlcnlQYXJhbWV0ZXIocXVlcmllcywgcGFyYW0sIHRoaXMuc2lnbmVkVmVyc2lvbik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzclwiOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIHBhcmFtLCB0aGlzLnJlc291cmNlKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNwXCI6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJ5QXBwZW5kUXVlcnlQYXJhbWV0ZXIocXVlcmllcywgcGFyYW0sIHRoaXMucGVybWlzc2lvbnMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwic2lnXCI6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJ5QXBwZW5kUXVlcnlQYXJhbWV0ZXIocXVlcmllcywgcGFyYW0sIHRoaXMuc2lnbmF0dXJlKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInJzY2NcIjpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cnlBcHBlbmRRdWVyeVBhcmFtZXRlcihxdWVyaWVzLCBwYXJhbSwgdGhpcy5jYWNoZUNvbnRyb2wpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwicnNjZFwiOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIHBhcmFtLCB0aGlzLmNvbnRlbnREaXNwb3NpdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJyc2NlXCI6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJ5QXBwZW5kUXVlcnlQYXJhbWV0ZXIocXVlcmllcywgcGFyYW0sIHRoaXMuY29udGVudEVuY29kaW5nKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInJzY2xcIjpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cnlBcHBlbmRRdWVyeVBhcmFtZXRlcihxdWVyaWVzLCBwYXJhbSwgdGhpcy5jb250ZW50TGFuZ3VhZ2UpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwicnNjdFwiOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIHBhcmFtLCB0aGlzLmNvbnRlbnRUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNhb2lkXCI6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJ5QXBwZW5kUXVlcnlQYXJhbWV0ZXIocXVlcmllcywgcGFyYW0sIHRoaXMucHJlYXV0aG9yaXplZEFnZW50T2JqZWN0SWQpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwic2NpZFwiOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIHBhcmFtLCB0aGlzLmNvcnJlbGF0aW9uSWQpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcXVlcmllcy5qb2luKFwiJlwiKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQSBwcml2YXRlIGhlbHBlciBtZXRob2QgdXNlZCB0byBmaWx0ZXIgYW5kIGFwcGVuZCBxdWVyeSBrZXkvdmFsdWUgcGFpcnMgaW50byBhbiBhcnJheS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBxdWVyaWVzIC1cbiAgICAgKiBAcGFyYW0ga2V5IC1cbiAgICAgKiBAcGFyYW0gdmFsdWUgLVxuICAgICAqL1xuICAgIHRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIGtleSwgdmFsdWUpIHtcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGtleSA9IGVuY29kZVVSSUNvbXBvbmVudChrZXkpO1xuICAgICAgICB2YWx1ZSA9IGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7XG4gICAgICAgIGlmIChrZXkubGVuZ3RoID4gMCAmJiB2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBxdWVyaWVzLnB1c2goYCR7a2V5fT0ke3ZhbHVlfWApO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbmZ1bmN0aW9uIGdlbmVyYXRlQmxvYlNBU1F1ZXJ5UGFyYW1ldGVycyhibG9iU0FTU2lnbmF0dXJlVmFsdWVzLCBzaGFyZWRLZXlDcmVkZW50aWFsT3JVc2VyRGVsZWdhdGlvbktleSwgYWNjb3VudE5hbWUpIHtcbiAgICByZXR1cm4gZ2VuZXJhdGVCbG9iU0FTUXVlcnlQYXJhbWV0ZXJzSW50ZXJuYWwoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcywgc2hhcmVkS2V5Q3JlZGVudGlhbE9yVXNlckRlbGVnYXRpb25LZXksIGFjY291bnROYW1lKS5zYXNRdWVyeVBhcmFtZXRlcnM7XG59XG5mdW5jdGlvbiBnZW5lcmF0ZUJsb2JTQVNRdWVyeVBhcmFtZXRlcnNJbnRlcm5hbChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLCBzaGFyZWRLZXlDcmVkZW50aWFsT3JVc2VyRGVsZWdhdGlvbktleSwgYWNjb3VudE5hbWUpIHtcbiAgICBjb25zdCB2ZXJzaW9uID0gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uID8gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uIDogU0VSVklDRV9WRVJTSU9OO1xuICAgIGNvbnN0IHNoYXJlZEtleUNyZWRlbnRpYWwgPSBzaGFyZWRLZXlDcmVkZW50aWFsT3JVc2VyRGVsZWdhdGlvbktleSBpbnN0YW5jZW9mIFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsXG4gICAgICAgID8gc2hhcmVkS2V5Q3JlZGVudGlhbE9yVXNlckRlbGVnYXRpb25LZXlcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgbGV0IHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbDtcbiAgICBpZiAoc2hhcmVkS2V5Q3JlZGVudGlhbCA9PT0gdW5kZWZpbmVkICYmIGFjY291bnROYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsID0gbmV3IFVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbChhY2NvdW50TmFtZSwgc2hhcmVkS2V5Q3JlZGVudGlhbE9yVXNlckRlbGVnYXRpb25LZXkpO1xuICAgIH1cbiAgICBpZiAoc2hhcmVkS2V5Q3JlZGVudGlhbCA9PT0gdW5kZWZpbmVkICYmIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IFR5cGVFcnJvcihcIkludmFsaWQgc2hhcmVkS2V5Q3JlZGVudGlhbCwgdXNlckRlbGVnYXRpb25LZXkgb3IgYWNjb3VudE5hbWUuXCIpO1xuICAgIH1cbiAgICAvLyBWZXJzaW9uIDIwMjAtMTItMDYgYWRkcyBzdXBwb3J0IGZvciBlbmNyeXB0aW9uc2NvcGUgaW4gU0FTLlxuICAgIGlmICh2ZXJzaW9uID49IFwiMjAyMC0xMi0wNlwiKSB7XG4gICAgICAgIGlmIChzaGFyZWRLZXlDcmVkZW50aWFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBnZW5lcmF0ZUJsb2JTQVNRdWVyeVBhcmFtZXRlcnMyMDIwMTIwNihibG9iU0FTU2lnbmF0dXJlVmFsdWVzLCBzaGFyZWRLZXlDcmVkZW50aWFsKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBnZW5lcmF0ZUJsb2JTQVNRdWVyeVBhcmFtZXRlcnNVREsyMDIwMTIwNihibG9iU0FTU2lnbmF0dXJlVmFsdWVzLCB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFZlcnNpb24gMjAxOS0xMi0xMiBhZGRzIHN1cHBvcnQgZm9yIHRoZSBibG9iIHRhZ3MgcGVybWlzc2lvbi5cbiAgICAvLyBWZXJzaW9uIDIwMTgtMTEtMDkgYWRkcyBzdXBwb3J0IGZvciB0aGUgc2lnbmVkIHJlc291cmNlIGFuZCBzaWduZWQgYmxvYiBzbmFwc2hvdCB0aW1lIGZpZWxkcy5cbiAgICAvLyBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvY29uc3RydWN0aW5nLWEtc2VydmljZS1zYXMjY29uc3RydWN0aW5nLXRoZS1zaWduYXR1cmUtc3RyaW5nXG4gICAgaWYgKHZlcnNpb24gPj0gXCIyMDE4LTExLTA5XCIpIHtcbiAgICAgICAgaWYgKHNoYXJlZEtleUNyZWRlbnRpYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRlQmxvYlNBU1F1ZXJ5UGFyYW1ldGVyczIwMTgxMTA5KGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMsIHNoYXJlZEtleUNyZWRlbnRpYWwpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gVmVyc2lvbiAyMDIwLTAyLTEwIGRlbGVnYXRpb24gU0FTIHNpZ25hdHVyZSBjb25zdHJ1Y3Rpb24gaW5jbHVkZXMgcHJlYXV0aG9yaXplZEFnZW50T2JqZWN0SWQsIGFnZW50T2JqZWN0SWQsIGNvcnJlbGF0aW9uSWQuXG4gICAgICAgICAgICBpZiAodmVyc2lvbiA+PSBcIjIwMjAtMDItMTBcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiBnZW5lcmF0ZUJsb2JTQVNRdWVyeVBhcmFtZXRlcnNVREsyMDIwMDIxMChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLCB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRlQmxvYlNBU1F1ZXJ5UGFyYW1ldGVyc1VESzIwMTgxMTA5KGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMsIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHZlcnNpb24gPj0gXCIyMDE1LTA0LTA1XCIpIHtcbiAgICAgICAgaWYgKHNoYXJlZEtleUNyZWRlbnRpYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRlQmxvYlNBU1F1ZXJ5UGFyYW1ldGVyczIwMTUwNDA1KGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMsIHNoYXJlZEtleUNyZWRlbnRpYWwpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCIndmVyc2lvbicgbXVzdCBiZSA+PSAnMjAxOC0xMS0wOScgd2hlbiBnZW5lcmF0aW5nIHVzZXIgZGVsZWdhdGlvbiBTQVMgdXNpbmcgdXNlciBkZWxlZ2F0aW9uIGtleS5cIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCIndmVyc2lvbicgbXVzdCBiZSA+PSAnMjAxNS0wNC0wNScuXCIpO1xufVxuLyoqXG4gKiBPTkxZIEFWQUlMQUJMRSBJTiBOT0RFLkpTIFJVTlRJTUUuXG4gKiBJTVBMRU1FTlRBVElPTiBGT1IgQVBJIFZFUlNJT04gRlJPTSAyMDE1LTA0LTA1IEFORCBCRUZPUkUgMjAxOC0xMS0wOS5cbiAqXG4gKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIFNBU1F1ZXJ5UGFyYW1ldGVycy5cbiAqXG4gKiBPbmx5IGFjY2VwdHMgcmVxdWlyZWQgc2V0dGluZ3MgbmVlZGVkIHRvIGNyZWF0ZSBhIFNBUy4gRm9yIG9wdGlvbmFsIHNldHRpbmdzIHBsZWFzZVxuICogc2V0IGNvcnJlc3BvbmRpbmcgcHJvcGVydGllcyBkaXJlY3RseSwgc3VjaCBhcyBwZXJtaXNzaW9ucywgc3RhcnRzT24gYW5kIGlkZW50aWZpZXIuXG4gKlxuICogV0FSTklORzogV2hlbiBpZGVudGlmaWVyIGlzIG5vdCBwcm92aWRlZCwgcGVybWlzc2lvbnMgYW5kIGV4cGlyZXNPbiBhcmUgcmVxdWlyZWQuXG4gKiBZb3UgTVVTVCBhc3NpZ24gdmFsdWUgdG8gaWRlbnRpZmllciBvciBleHBpcmVzT24gJiBwZXJtaXNzaW9ucyBtYW51YWxseSBpZiB5b3UgaW5pdGlhbCB3aXRoXG4gKiB0aGlzIGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBibG9iU0FTU2lnbmF0dXJlVmFsdWVzIC1cbiAqIEBwYXJhbSBzaGFyZWRLZXlDcmVkZW50aWFsIC1cbiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGVCbG9iU0FTUXVlcnlQYXJhbWV0ZXJzMjAxNTA0MDUoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcywgc2hhcmVkS2V5Q3JlZGVudGlhbCkge1xuICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMgPSBTQVNTaWduYXR1cmVWYWx1ZXNTYW5pdHlDaGVja0FuZEF1dG9maWxsKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMpO1xuICAgIGlmICghYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5pZGVudGlmaWVyICYmXG4gICAgICAgICEoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucyAmJiBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmV4cGlyZXNPbikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJNdXN0IHByb3ZpZGUgJ3Blcm1pc3Npb25zJyBhbmQgJ2V4cGlyZXNPbicgZm9yIEJsb2IgU0FTIGdlbmVyYXRpb24gd2hlbiAnaWRlbnRpZmllcicgaXMgbm90IHByb3ZpZGVkLlwiKTtcbiAgICB9XG4gICAgbGV0IHJlc291cmNlID0gXCJjXCI7XG4gICAgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuYmxvYk5hbWUpIHtcbiAgICAgICAgcmVzb3VyY2UgPSBcImJcIjtcbiAgICB9XG4gICAgLy8gQ2FsbGluZyBwYXJzZSBhbmQgdG9TdHJpbmcgZ3VhcmFudGVlcyB0aGUgcHJvcGVyIG9yZGVyaW5nIGFuZCB0aHJvd3Mgb24gaW52YWxpZCBjaGFyYWN0ZXJzLlxuICAgIGxldCB2ZXJpZmllZFBlcm1pc3Npb25zO1xuICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zKSB7XG4gICAgICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmJsb2JOYW1lKSB7XG4gICAgICAgICAgICB2ZXJpZmllZFBlcm1pc3Npb25zID0gQmxvYlNBU1Blcm1pc3Npb25zLnBhcnNlKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMudG9TdHJpbmcoKSkudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZlcmlmaWVkUGVybWlzc2lvbnMgPSBDb250YWluZXJTQVNQZXJtaXNzaW9ucy5wYXJzZShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zLnRvU3RyaW5nKCkpLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gU2lnbmF0dXJlIGlzIGdlbmVyYXRlZCBvbiB0aGUgdW4tdXJsLWVuY29kZWQgdmFsdWVzLlxuICAgIGNvbnN0IHN0cmluZ1RvU2lnbiA9IFtcbiAgICAgICAgdmVyaWZpZWRQZXJtaXNzaW9ucyA/IHZlcmlmaWVkUGVybWlzc2lvbnMgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnN0YXJ0c09uXG4gICAgICAgICAgICA/IHRydW5jYXRlZElTTzgwNjFEYXRlKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuc3RhcnRzT24sIGZhbHNlKVxuICAgICAgICAgICAgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmV4cGlyZXNPblxuICAgICAgICAgICAgPyB0cnVuY2F0ZWRJU084MDYxRGF0ZShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmV4cGlyZXNPbiwgZmFsc2UpXG4gICAgICAgICAgICA6IFwiXCIsXG4gICAgICAgIGdldENhbm9uaWNhbE5hbWUoc2hhcmVkS2V5Q3JlZGVudGlhbC5hY2NvdW50TmFtZSwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250YWluZXJOYW1lLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmJsb2JOYW1lKSxcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5pZGVudGlmaWVyLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmlwUmFuZ2UgPyBpcFJhbmdlVG9TdHJpbmcoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5pcFJhbmdlKSA6IFwiXCIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucHJvdG9jb2wgPyBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnByb3RvY29sIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNhY2hlQ29udHJvbCA/IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY2FjaGVDb250cm9sIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50RGlzcG9zaXRpb24gPyBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnREaXNwb3NpdGlvbiA6IFwiXCIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudEVuY29kaW5nID8gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50RW5jb2RpbmcgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRMYW5ndWFnZSA/IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudExhbmd1YWdlIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50VHlwZSA/IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudFR5cGUgOiBcIlwiLFxuICAgIF0uam9pbihcIlxcblwiKTtcbiAgICBjb25zdCBzaWduYXR1cmUgPSBzaGFyZWRLZXlDcmVkZW50aWFsLmNvbXB1dGVITUFDU0hBMjU2KHN0cmluZ1RvU2lnbik7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc2FzUXVlcnlQYXJhbWV0ZXJzOiBuZXcgU0FTUXVlcnlQYXJhbWV0ZXJzKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMudmVyc2lvbiwgc2lnbmF0dXJlLCB2ZXJpZmllZFBlcm1pc3Npb25zLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wcm90b2NvbCwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5zdGFydHNPbiwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5leHBpcmVzT24sIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuaXBSYW5nZSwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5pZGVudGlmaWVyLCByZXNvdXJjZSwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jYWNoZUNvbnRyb2wsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudERpc3Bvc2l0aW9uLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRFbmNvZGluZywgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50TGFuZ3VhZ2UsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudFR5cGUpLFxuICAgICAgICBzdHJpbmdUb1NpZ246IHN0cmluZ1RvU2lnbixcbiAgICB9O1xufVxuLyoqXG4gKiBPTkxZIEFWQUlMQUJMRSBJTiBOT0RFLkpTIFJVTlRJTUUuXG4gKiBJTVBMRU1FTlRBVElPTiBGT1IgQVBJIFZFUlNJT04gRlJPTSAyMDE4LTExLTA5LlxuICpcbiAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgU0FTUXVlcnlQYXJhbWV0ZXJzLlxuICpcbiAqIE9ubHkgYWNjZXB0cyByZXF1aXJlZCBzZXR0aW5ncyBuZWVkZWQgdG8gY3JlYXRlIGEgU0FTLiBGb3Igb3B0aW9uYWwgc2V0dGluZ3MgcGxlYXNlXG4gKiBzZXQgY29ycmVzcG9uZGluZyBwcm9wZXJ0aWVzIGRpcmVjdGx5LCBzdWNoIGFzIHBlcm1pc3Npb25zLCBzdGFydHNPbiBhbmQgaWRlbnRpZmllci5cbiAqXG4gKiBXQVJOSU5HOiBXaGVuIGlkZW50aWZpZXIgaXMgbm90IHByb3ZpZGVkLCBwZXJtaXNzaW9ucyBhbmQgZXhwaXJlc09uIGFyZSByZXF1aXJlZC5cbiAqIFlvdSBNVVNUIGFzc2lnbiB2YWx1ZSB0byBpZGVudGlmaWVyIG9yIGV4cGlyZXNPbiAmIHBlcm1pc3Npb25zIG1hbnVhbGx5IGlmIHlvdSBpbml0aWFsIHdpdGhcbiAqIHRoaXMgY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMgLVxuICogQHBhcmFtIHNoYXJlZEtleUNyZWRlbnRpYWwgLVxuICovXG5mdW5jdGlvbiBnZW5lcmF0ZUJsb2JTQVNRdWVyeVBhcmFtZXRlcnMyMDE4MTEwOShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLCBzaGFyZWRLZXlDcmVkZW50aWFsKSB7XG4gICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcyA9IFNBU1NpZ25hdHVyZVZhbHVlc1Nhbml0eUNoZWNrQW5kQXV0b2ZpbGwoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcyk7XG4gICAgaWYgKCFibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmlkZW50aWZpZXIgJiZcbiAgICAgICAgIShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zICYmIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuZXhwaXJlc09uKSkge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIk11c3QgcHJvdmlkZSAncGVybWlzc2lvbnMnIGFuZCAnZXhwaXJlc09uJyBmb3IgQmxvYiBTQVMgZ2VuZXJhdGlvbiB3aGVuICdpZGVudGlmaWVyJyBpcyBub3QgcHJvdmlkZWQuXCIpO1xuICAgIH1cbiAgICBsZXQgcmVzb3VyY2UgPSBcImNcIjtcbiAgICBsZXQgdGltZXN0YW1wID0gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5zbmFwc2hvdFRpbWU7XG4gICAgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuYmxvYk5hbWUpIHtcbiAgICAgICAgcmVzb3VyY2UgPSBcImJcIjtcbiAgICAgICAgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuc25hcHNob3RUaW1lKSB7XG4gICAgICAgICAgICByZXNvdXJjZSA9IFwiYnNcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnZlcnNpb25JZCkge1xuICAgICAgICAgICAgcmVzb3VyY2UgPSBcImJ2XCI7XG4gICAgICAgICAgICB0aW1lc3RhbXAgPSBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnZlcnNpb25JZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBDYWxsaW5nIHBhcnNlIGFuZCB0b1N0cmluZyBndWFyYW50ZWVzIHRoZSBwcm9wZXIgb3JkZXJpbmcgYW5kIHRocm93cyBvbiBpbnZhbGlkIGNoYXJhY3RlcnMuXG4gICAgbGV0IHZlcmlmaWVkUGVybWlzc2lvbnM7XG4gICAgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMpIHtcbiAgICAgICAgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuYmxvYk5hbWUpIHtcbiAgICAgICAgICAgIHZlcmlmaWVkUGVybWlzc2lvbnMgPSBCbG9iU0FTUGVybWlzc2lvbnMucGFyc2UoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucy50b1N0cmluZygpKS50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmVyaWZpZWRQZXJtaXNzaW9ucyA9IENvbnRhaW5lclNBU1Blcm1pc3Npb25zLnBhcnNlKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMudG9TdHJpbmcoKSkudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBTaWduYXR1cmUgaXMgZ2VuZXJhdGVkIG9uIHRoZSB1bi11cmwtZW5jb2RlZCB2YWx1ZXMuXG4gICAgY29uc3Qgc3RyaW5nVG9TaWduID0gW1xuICAgICAgICB2ZXJpZmllZFBlcm1pc3Npb25zID8gdmVyaWZpZWRQZXJtaXNzaW9ucyA6IFwiXCIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuc3RhcnRzT25cbiAgICAgICAgICAgID8gdHJ1bmNhdGVkSVNPODA2MURhdGUoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5zdGFydHNPbiwgZmFsc2UpXG4gICAgICAgICAgICA6IFwiXCIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuZXhwaXJlc09uXG4gICAgICAgICAgICA/IHRydW5jYXRlZElTTzgwNjFEYXRlKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuZXhwaXJlc09uLCBmYWxzZSlcbiAgICAgICAgICAgIDogXCJcIixcbiAgICAgICAgZ2V0Q2Fub25pY2FsTmFtZShzaGFyZWRLZXlDcmVkZW50aWFsLmFjY291bnROYW1lLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRhaW5lck5hbWUsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuYmxvYk5hbWUpLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmlkZW50aWZpZXIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuaXBSYW5nZSA/IGlwUmFuZ2VUb1N0cmluZyhibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmlwUmFuZ2UpIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wcm90b2NvbCA/IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucHJvdG9jb2wgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnZlcnNpb24sXG4gICAgICAgIHJlc291cmNlLFxuICAgICAgICB0aW1lc3RhbXAsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY2FjaGVDb250cm9sID8gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jYWNoZUNvbnRyb2wgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnREaXNwb3NpdGlvbiA/IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudERpc3Bvc2l0aW9uIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50RW5jb2RpbmcgPyBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRFbmNvZGluZyA6IFwiXCIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudExhbmd1YWdlID8gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50TGFuZ3VhZ2UgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRUeXBlID8gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50VHlwZSA6IFwiXCIsXG4gICAgXS5qb2luKFwiXFxuXCIpO1xuICAgIGNvbnN0IHNpZ25hdHVyZSA9IHNoYXJlZEtleUNyZWRlbnRpYWwuY29tcHV0ZUhNQUNTSEEyNTYoc3RyaW5nVG9TaWduKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBzYXNRdWVyeVBhcmFtZXRlcnM6IG5ldyBTQVNRdWVyeVBhcmFtZXRlcnMoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uLCBzaWduYXR1cmUsIHZlcmlmaWVkUGVybWlzc2lvbnMsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnByb3RvY29sLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnN0YXJ0c09uLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmV4cGlyZXNPbiwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5pcFJhbmdlLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmlkZW50aWZpZXIsIHJlc291cmNlLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNhY2hlQ29udHJvbCwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50RGlzcG9zaXRpb24sIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudEVuY29kaW5nLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRMYW5ndWFnZSwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50VHlwZSksXG4gICAgICAgIHN0cmluZ1RvU2lnbjogc3RyaW5nVG9TaWduLFxuICAgIH07XG59XG4vKipcbiAqIE9OTFkgQVZBSUxBQkxFIElOIE5PREUuSlMgUlVOVElNRS5cbiAqIElNUExFTUVOVEFUSU9OIEZPUiBBUEkgVkVSU0lPTiBGUk9NIDIwMjAtMTItMDYuXG4gKlxuICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBTQVNRdWVyeVBhcmFtZXRlcnMuXG4gKlxuICogT25seSBhY2NlcHRzIHJlcXVpcmVkIHNldHRpbmdzIG5lZWRlZCB0byBjcmVhdGUgYSBTQVMuIEZvciBvcHRpb25hbCBzZXR0aW5ncyBwbGVhc2VcbiAqIHNldCBjb3JyZXNwb25kaW5nIHByb3BlcnRpZXMgZGlyZWN0bHksIHN1Y2ggYXMgcGVybWlzc2lvbnMsIHN0YXJ0c09uIGFuZCBpZGVudGlmaWVyLlxuICpcbiAqIFdBUk5JTkc6IFdoZW4gaWRlbnRpZmllciBpcyBub3QgcHJvdmlkZWQsIHBlcm1pc3Npb25zIGFuZCBleHBpcmVzT24gYXJlIHJlcXVpcmVkLlxuICogWW91IE1VU1QgYXNzaWduIHZhbHVlIHRvIGlkZW50aWZpZXIgb3IgZXhwaXJlc09uICYgcGVybWlzc2lvbnMgbWFudWFsbHkgaWYgeW91IGluaXRpYWwgd2l0aFxuICogdGhpcyBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcyAtXG4gKiBAcGFyYW0gc2hhcmVkS2V5Q3JlZGVudGlhbCAtXG4gKi9cbmZ1bmN0aW9uIGdlbmVyYXRlQmxvYlNBU1F1ZXJ5UGFyYW1ldGVyczIwMjAxMjA2KGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMsIHNoYXJlZEtleUNyZWRlbnRpYWwpIHtcbiAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzID0gU0FTU2lnbmF0dXJlVmFsdWVzU2FuaXR5Q2hlY2tBbmRBdXRvZmlsbChibG9iU0FTU2lnbmF0dXJlVmFsdWVzKTtcbiAgICBpZiAoIWJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuaWRlbnRpZmllciAmJlxuICAgICAgICAhKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMgJiYgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5leHBpcmVzT24pKSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiTXVzdCBwcm92aWRlICdwZXJtaXNzaW9ucycgYW5kICdleHBpcmVzT24nIGZvciBCbG9iIFNBUyBnZW5lcmF0aW9uIHdoZW4gJ2lkZW50aWZpZXInIGlzIG5vdCBwcm92aWRlZC5cIik7XG4gICAgfVxuICAgIGxldCByZXNvdXJjZSA9IFwiY1wiO1xuICAgIGxldCB0aW1lc3RhbXAgPSBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnNuYXBzaG90VGltZTtcbiAgICBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5ibG9iTmFtZSkge1xuICAgICAgICByZXNvdXJjZSA9IFwiYlwiO1xuICAgICAgICBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5zbmFwc2hvdFRpbWUpIHtcbiAgICAgICAgICAgIHJlc291cmNlID0gXCJic1wiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMudmVyc2lvbklkKSB7XG4gICAgICAgICAgICByZXNvdXJjZSA9IFwiYnZcIjtcbiAgICAgICAgICAgIHRpbWVzdGFtcCA9IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMudmVyc2lvbklkO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIENhbGxpbmcgcGFyc2UgYW5kIHRvU3RyaW5nIGd1YXJhbnRlZXMgdGhlIHByb3BlciBvcmRlcmluZyBhbmQgdGhyb3dzIG9uIGludmFsaWQgY2hhcmFjdGVycy5cbiAgICBsZXQgdmVyaWZpZWRQZXJtaXNzaW9ucztcbiAgICBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucykge1xuICAgICAgICBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5ibG9iTmFtZSkge1xuICAgICAgICAgICAgdmVyaWZpZWRQZXJtaXNzaW9ucyA9IEJsb2JTQVNQZXJtaXNzaW9ucy5wYXJzZShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zLnRvU3RyaW5nKCkpLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2ZXJpZmllZFBlcm1pc3Npb25zID0gQ29udGFpbmVyU0FTUGVybWlzc2lvbnMucGFyc2UoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucy50b1N0cmluZygpKS50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFNpZ25hdHVyZSBpcyBnZW5lcmF0ZWQgb24gdGhlIHVuLXVybC1lbmNvZGVkIHZhbHVlcy5cbiAgICBjb25zdCBzdHJpbmdUb1NpZ24gPSBbXG4gICAgICAgIHZlcmlmaWVkUGVybWlzc2lvbnMgPyB2ZXJpZmllZFBlcm1pc3Npb25zIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5zdGFydHNPblxuICAgICAgICAgICAgPyB0cnVuY2F0ZWRJU084MDYxRGF0ZShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnN0YXJ0c09uLCBmYWxzZSlcbiAgICAgICAgICAgIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5leHBpcmVzT25cbiAgICAgICAgICAgID8gdHJ1bmNhdGVkSVNPODA2MURhdGUoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5leHBpcmVzT24sIGZhbHNlKVxuICAgICAgICAgICAgOiBcIlwiLFxuICAgICAgICBnZXRDYW5vbmljYWxOYW1lKHNoYXJlZEtleUNyZWRlbnRpYWwuYWNjb3VudE5hbWUsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGFpbmVyTmFtZSwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5ibG9iTmFtZSksXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuaWRlbnRpZmllcixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5pcFJhbmdlID8gaXBSYW5nZVRvU3RyaW5nKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuaXBSYW5nZSkgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnByb3RvY29sID8gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wcm90b2NvbCA6IFwiXCIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMudmVyc2lvbixcbiAgICAgICAgcmVzb3VyY2UsXG4gICAgICAgIHRpbWVzdGFtcCxcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5lbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY2FjaGVDb250cm9sID8gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jYWNoZUNvbnRyb2wgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnREaXNwb3NpdGlvbiA/IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudERpc3Bvc2l0aW9uIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50RW5jb2RpbmcgPyBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRFbmNvZGluZyA6IFwiXCIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudExhbmd1YWdlID8gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50TGFuZ3VhZ2UgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRUeXBlID8gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50VHlwZSA6IFwiXCIsXG4gICAgXS5qb2luKFwiXFxuXCIpO1xuICAgIGNvbnN0IHNpZ25hdHVyZSA9IHNoYXJlZEtleUNyZWRlbnRpYWwuY29tcHV0ZUhNQUNTSEEyNTYoc3RyaW5nVG9TaWduKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBzYXNRdWVyeVBhcmFtZXRlcnM6IG5ldyBTQVNRdWVyeVBhcmFtZXRlcnMoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uLCBzaWduYXR1cmUsIHZlcmlmaWVkUGVybWlzc2lvbnMsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnByb3RvY29sLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnN0YXJ0c09uLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmV4cGlyZXNPbiwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5pcFJhbmdlLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmlkZW50aWZpZXIsIHJlc291cmNlLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNhY2hlQ29udHJvbCwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50RGlzcG9zaXRpb24sIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudEVuY29kaW5nLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRMYW5ndWFnZSwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50VHlwZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5lbmNyeXB0aW9uU2NvcGUpLFxuICAgICAgICBzdHJpbmdUb1NpZ246IHN0cmluZ1RvU2lnbixcbiAgICB9O1xufVxuLyoqXG4gKiBPTkxZIEFWQUlMQUJMRSBJTiBOT0RFLkpTIFJVTlRJTUUuXG4gKiBJTVBMRU1FTlRBVElPTiBGT1IgQVBJIFZFUlNJT04gRlJPTSAyMDE4LTExLTA5LlxuICpcbiAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgU0FTUXVlcnlQYXJhbWV0ZXJzLlxuICpcbiAqIE9ubHkgYWNjZXB0cyByZXF1aXJlZCBzZXR0aW5ncyBuZWVkZWQgdG8gY3JlYXRlIGEgU0FTLiBGb3Igb3B0aW9uYWwgc2V0dGluZ3MgcGxlYXNlXG4gKiBzZXQgY29ycmVzcG9uZGluZyBwcm9wZXJ0aWVzIGRpcmVjdGx5LCBzdWNoIGFzIHBlcm1pc3Npb25zLCBzdGFydHNPbi5cbiAqXG4gKiBXQVJOSU5HOiBpZGVudGlmaWVyIHdpbGwgYmUgaWdub3JlZCwgcGVybWlzc2lvbnMgYW5kIGV4cGlyZXNPbiBhcmUgcmVxdWlyZWQuXG4gKlxuICogQHBhcmFtIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMgLVxuICogQHBhcmFtIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbCAtXG4gKi9cbmZ1bmN0aW9uIGdlbmVyYXRlQmxvYlNBU1F1ZXJ5UGFyYW1ldGVyc1VESzIwMTgxMTA5KGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMsIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbCkge1xuICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMgPSBTQVNTaWduYXR1cmVWYWx1ZXNTYW5pdHlDaGVja0FuZEF1dG9maWxsKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMpO1xuICAgIC8vIFN0b3JlZCBhY2Nlc3MgcG9saWNpZXMgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIGEgdXNlciBkZWxlZ2F0aW9uIFNBUy5cbiAgICBpZiAoIWJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMgfHwgIWJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuZXhwaXJlc09uKSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiTXVzdCBwcm92aWRlICdwZXJtaXNzaW9ucycgYW5kICdleHBpcmVzT24nIGZvciBCbG9iIFNBUyBnZW5lcmF0aW9uIHdoZW4gZ2VuZXJhdGluZyB1c2VyIGRlbGVnYXRpb24gU0FTLlwiKTtcbiAgICB9XG4gICAgbGV0IHJlc291cmNlID0gXCJjXCI7XG4gICAgbGV0IHRpbWVzdGFtcCA9IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuc25hcHNob3RUaW1lO1xuICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmJsb2JOYW1lKSB7XG4gICAgICAgIHJlc291cmNlID0gXCJiXCI7XG4gICAgICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnNuYXBzaG90VGltZSkge1xuICAgICAgICAgICAgcmVzb3VyY2UgPSBcImJzXCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uSWQpIHtcbiAgICAgICAgICAgIHJlc291cmNlID0gXCJidlwiO1xuICAgICAgICAgICAgdGltZXN0YW1wID0gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uSWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gQ2FsbGluZyBwYXJzZSBhbmQgdG9TdHJpbmcgZ3VhcmFudGVlcyB0aGUgcHJvcGVyIG9yZGVyaW5nIGFuZCB0aHJvd3Mgb24gaW52YWxpZCBjaGFyYWN0ZXJzLlxuICAgIGxldCB2ZXJpZmllZFBlcm1pc3Npb25zO1xuICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zKSB7XG4gICAgICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmJsb2JOYW1lKSB7XG4gICAgICAgICAgICB2ZXJpZmllZFBlcm1pc3Npb25zID0gQmxvYlNBU1Blcm1pc3Npb25zLnBhcnNlKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMudG9TdHJpbmcoKSkudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZlcmlmaWVkUGVybWlzc2lvbnMgPSBDb250YWluZXJTQVNQZXJtaXNzaW9ucy5wYXJzZShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zLnRvU3RyaW5nKCkpLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gU2lnbmF0dXJlIGlzIGdlbmVyYXRlZCBvbiB0aGUgdW4tdXJsLWVuY29kZWQgdmFsdWVzLlxuICAgIGNvbnN0IHN0cmluZ1RvU2lnbiA9IFtcbiAgICAgICAgdmVyaWZpZWRQZXJtaXNzaW9ucyA/IHZlcmlmaWVkUGVybWlzc2lvbnMgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnN0YXJ0c09uXG4gICAgICAgICAgICA/IHRydW5jYXRlZElTTzgwNjFEYXRlKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuc3RhcnRzT24sIGZhbHNlKVxuICAgICAgICAgICAgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmV4cGlyZXNPblxuICAgICAgICAgICAgPyB0cnVuY2F0ZWRJU084MDYxRGF0ZShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmV4cGlyZXNPbiwgZmFsc2UpXG4gICAgICAgICAgICA6IFwiXCIsXG4gICAgICAgIGdldENhbm9uaWNhbE5hbWUodXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsLmFjY291bnROYW1lLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRhaW5lck5hbWUsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuYmxvYk5hbWUpLFxuICAgICAgICB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwudXNlckRlbGVnYXRpb25LZXkuc2lnbmVkT2JqZWN0SWQsXG4gICAgICAgIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC51c2VyRGVsZWdhdGlvbktleS5zaWduZWRUZW5hbnRJZCxcbiAgICAgICAgdXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsLnVzZXJEZWxlZ2F0aW9uS2V5LnNpZ25lZFN0YXJ0c09uXG4gICAgICAgICAgICA/IHRydW5jYXRlZElTTzgwNjFEYXRlKHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC51c2VyRGVsZWdhdGlvbktleS5zaWduZWRTdGFydHNPbiwgZmFsc2UpXG4gICAgICAgICAgICA6IFwiXCIsXG4gICAgICAgIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC51c2VyRGVsZWdhdGlvbktleS5zaWduZWRFeHBpcmVzT25cbiAgICAgICAgICAgID8gdHJ1bmNhdGVkSVNPODA2MURhdGUodXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsLnVzZXJEZWxlZ2F0aW9uS2V5LnNpZ25lZEV4cGlyZXNPbiwgZmFsc2UpXG4gICAgICAgICAgICA6IFwiXCIsXG4gICAgICAgIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC51c2VyRGVsZWdhdGlvbktleS5zaWduZWRTZXJ2aWNlLFxuICAgICAgICB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwudXNlckRlbGVnYXRpb25LZXkuc2lnbmVkVmVyc2lvbixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5pcFJhbmdlID8gaXBSYW5nZVRvU3RyaW5nKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuaXBSYW5nZSkgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnByb3RvY29sID8gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wcm90b2NvbCA6IFwiXCIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMudmVyc2lvbixcbiAgICAgICAgcmVzb3VyY2UsXG4gICAgICAgIHRpbWVzdGFtcCxcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jYWNoZUNvbnRyb2wsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudERpc3Bvc2l0aW9uLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRFbmNvZGluZyxcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50TGFuZ3VhZ2UsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudFR5cGUsXG4gICAgXS5qb2luKFwiXFxuXCIpO1xuICAgIGNvbnN0IHNpZ25hdHVyZSA9IHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC5jb21wdXRlSE1BQ1NIQTI1NihzdHJpbmdUb1NpZ24pO1xuICAgIHJldHVybiB7XG4gICAgICAgIHNhc1F1ZXJ5UGFyYW1ldGVyczogbmV3IFNBU1F1ZXJ5UGFyYW1ldGVycyhibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnZlcnNpb24sIHNpZ25hdHVyZSwgdmVyaWZpZWRQZXJtaXNzaW9ucywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucHJvdG9jb2wsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuc3RhcnRzT24sIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuZXhwaXJlc09uLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmlwUmFuZ2UsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuaWRlbnRpZmllciwgcmVzb3VyY2UsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY2FjaGVDb250cm9sLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnREaXNwb3NpdGlvbiwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50RW5jb2RpbmcsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudExhbmd1YWdlLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRUeXBlLCB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwudXNlckRlbGVnYXRpb25LZXkpLFxuICAgICAgICBzdHJpbmdUb1NpZ246IHN0cmluZ1RvU2lnbixcbiAgICB9O1xufVxuLyoqXG4gKiBPTkxZIEFWQUlMQUJMRSBJTiBOT0RFLkpTIFJVTlRJTUUuXG4gKiBJTVBMRU1FTlRBVElPTiBGT1IgQVBJIFZFUlNJT04gRlJPTSAyMDIwLTAyLTEwLlxuICpcbiAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgU0FTUXVlcnlQYXJhbWV0ZXJzLlxuICpcbiAqIE9ubHkgYWNjZXB0cyByZXF1aXJlZCBzZXR0aW5ncyBuZWVkZWQgdG8gY3JlYXRlIGEgU0FTLiBGb3Igb3B0aW9uYWwgc2V0dGluZ3MgcGxlYXNlXG4gKiBzZXQgY29ycmVzcG9uZGluZyBwcm9wZXJ0aWVzIGRpcmVjdGx5LCBzdWNoIGFzIHBlcm1pc3Npb25zLCBzdGFydHNPbi5cbiAqXG4gKiBXQVJOSU5HOiBpZGVudGlmaWVyIHdpbGwgYmUgaWdub3JlZCwgcGVybWlzc2lvbnMgYW5kIGV4cGlyZXNPbiBhcmUgcmVxdWlyZWQuXG4gKlxuICogQHBhcmFtIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMgLVxuICogQHBhcmFtIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbCAtXG4gKi9cbmZ1bmN0aW9uIGdlbmVyYXRlQmxvYlNBU1F1ZXJ5UGFyYW1ldGVyc1VESzIwMjAwMjEwKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMsIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbCkge1xuICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMgPSBTQVNTaWduYXR1cmVWYWx1ZXNTYW5pdHlDaGVja0FuZEF1dG9maWxsKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMpO1xuICAgIC8vIFN0b3JlZCBhY2Nlc3MgcG9saWNpZXMgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIGEgdXNlciBkZWxlZ2F0aW9uIFNBUy5cbiAgICBpZiAoIWJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMgfHwgIWJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuZXhwaXJlc09uKSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiTXVzdCBwcm92aWRlICdwZXJtaXNzaW9ucycgYW5kICdleHBpcmVzT24nIGZvciBCbG9iIFNBUyBnZW5lcmF0aW9uIHdoZW4gZ2VuZXJhdGluZyB1c2VyIGRlbGVnYXRpb24gU0FTLlwiKTtcbiAgICB9XG4gICAgbGV0IHJlc291cmNlID0gXCJjXCI7XG4gICAgbGV0IHRpbWVzdGFtcCA9IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuc25hcHNob3RUaW1lO1xuICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmJsb2JOYW1lKSB7XG4gICAgICAgIHJlc291cmNlID0gXCJiXCI7XG4gICAgICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnNuYXBzaG90VGltZSkge1xuICAgICAgICAgICAgcmVzb3VyY2UgPSBcImJzXCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uSWQpIHtcbiAgICAgICAgICAgIHJlc291cmNlID0gXCJidlwiO1xuICAgICAgICAgICAgdGltZXN0YW1wID0gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uSWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gQ2FsbGluZyBwYXJzZSBhbmQgdG9TdHJpbmcgZ3VhcmFudGVlcyB0aGUgcHJvcGVyIG9yZGVyaW5nIGFuZCB0aHJvd3Mgb24gaW52YWxpZCBjaGFyYWN0ZXJzLlxuICAgIGxldCB2ZXJpZmllZFBlcm1pc3Npb25zO1xuICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zKSB7XG4gICAgICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmJsb2JOYW1lKSB7XG4gICAgICAgICAgICB2ZXJpZmllZFBlcm1pc3Npb25zID0gQmxvYlNBU1Blcm1pc3Npb25zLnBhcnNlKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMudG9TdHJpbmcoKSkudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZlcmlmaWVkUGVybWlzc2lvbnMgPSBDb250YWluZXJTQVNQZXJtaXNzaW9ucy5wYXJzZShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zLnRvU3RyaW5nKCkpLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gU2lnbmF0dXJlIGlzIGdlbmVyYXRlZCBvbiB0aGUgdW4tdXJsLWVuY29kZWQgdmFsdWVzLlxuICAgIGNvbnN0IHN0cmluZ1RvU2lnbiA9IFtcbiAgICAgICAgdmVyaWZpZWRQZXJtaXNzaW9ucyA/IHZlcmlmaWVkUGVybWlzc2lvbnMgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnN0YXJ0c09uXG4gICAgICAgICAgICA/IHRydW5jYXRlZElTTzgwNjFEYXRlKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuc3RhcnRzT24sIGZhbHNlKVxuICAgICAgICAgICAgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmV4cGlyZXNPblxuICAgICAgICAgICAgPyB0cnVuY2F0ZWRJU084MDYxRGF0ZShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmV4cGlyZXNPbiwgZmFsc2UpXG4gICAgICAgICAgICA6IFwiXCIsXG4gICAgICAgIGdldENhbm9uaWNhbE5hbWUodXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsLmFjY291bnROYW1lLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRhaW5lck5hbWUsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuYmxvYk5hbWUpLFxuICAgICAgICB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwudXNlckRlbGVnYXRpb25LZXkuc2lnbmVkT2JqZWN0SWQsXG4gICAgICAgIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC51c2VyRGVsZWdhdGlvbktleS5zaWduZWRUZW5hbnRJZCxcbiAgICAgICAgdXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsLnVzZXJEZWxlZ2F0aW9uS2V5LnNpZ25lZFN0YXJ0c09uXG4gICAgICAgICAgICA/IHRydW5jYXRlZElTTzgwNjFEYXRlKHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC51c2VyRGVsZWdhdGlvbktleS5zaWduZWRTdGFydHNPbiwgZmFsc2UpXG4gICAgICAgICAgICA6IFwiXCIsXG4gICAgICAgIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC51c2VyRGVsZWdhdGlvbktleS5zaWduZWRFeHBpcmVzT25cbiAgICAgICAgICAgID8gdHJ1bmNhdGVkSVNPODA2MURhdGUodXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsLnVzZXJEZWxlZ2F0aW9uS2V5LnNpZ25lZEV4cGlyZXNPbiwgZmFsc2UpXG4gICAgICAgICAgICA6IFwiXCIsXG4gICAgICAgIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC51c2VyRGVsZWdhdGlvbktleS5zaWduZWRTZXJ2aWNlLFxuICAgICAgICB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwudXNlckRlbGVnYXRpb25LZXkuc2lnbmVkVmVyc2lvbixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wcmVhdXRob3JpemVkQWdlbnRPYmplY3RJZCxcbiAgICAgICAgdW5kZWZpbmVkLCAvLyBhZ2VudE9iamVjdElkXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29ycmVsYXRpb25JZCxcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5pcFJhbmdlID8gaXBSYW5nZVRvU3RyaW5nKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuaXBSYW5nZSkgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnByb3RvY29sID8gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wcm90b2NvbCA6IFwiXCIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMudmVyc2lvbixcbiAgICAgICAgcmVzb3VyY2UsXG4gICAgICAgIHRpbWVzdGFtcCxcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jYWNoZUNvbnRyb2wsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudERpc3Bvc2l0aW9uLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRFbmNvZGluZyxcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50TGFuZ3VhZ2UsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudFR5cGUsXG4gICAgXS5qb2luKFwiXFxuXCIpO1xuICAgIGNvbnN0IHNpZ25hdHVyZSA9IHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC5jb21wdXRlSE1BQ1NIQTI1NihzdHJpbmdUb1NpZ24pO1xuICAgIHJldHVybiB7XG4gICAgICAgIHNhc1F1ZXJ5UGFyYW1ldGVyczogbmV3IFNBU1F1ZXJ5UGFyYW1ldGVycyhibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnZlcnNpb24sIHNpZ25hdHVyZSwgdmVyaWZpZWRQZXJtaXNzaW9ucywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucHJvdG9jb2wsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuc3RhcnRzT24sIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuZXhwaXJlc09uLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmlwUmFuZ2UsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuaWRlbnRpZmllciwgcmVzb3VyY2UsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY2FjaGVDb250cm9sLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnREaXNwb3NpdGlvbiwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50RW5jb2RpbmcsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudExhbmd1YWdlLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRUeXBlLCB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwudXNlckRlbGVnYXRpb25LZXksIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucHJlYXV0aG9yaXplZEFnZW50T2JqZWN0SWQsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29ycmVsYXRpb25JZCksXG4gICAgICAgIHN0cmluZ1RvU2lnbjogc3RyaW5nVG9TaWduLFxuICAgIH07XG59XG4vKipcbiAqIE9OTFkgQVZBSUxBQkxFIElOIE5PREUuSlMgUlVOVElNRS5cbiAqIElNUExFTUVOVEFUSU9OIEZPUiBBUEkgVkVSU0lPTiBGUk9NIDIwMjAtMTItMDYuXG4gKlxuICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBTQVNRdWVyeVBhcmFtZXRlcnMuXG4gKlxuICogT25seSBhY2NlcHRzIHJlcXVpcmVkIHNldHRpbmdzIG5lZWRlZCB0byBjcmVhdGUgYSBTQVMuIEZvciBvcHRpb25hbCBzZXR0aW5ncyBwbGVhc2VcbiAqIHNldCBjb3JyZXNwb25kaW5nIHByb3BlcnRpZXMgZGlyZWN0bHksIHN1Y2ggYXMgcGVybWlzc2lvbnMsIHN0YXJ0c09uLlxuICpcbiAqIFdBUk5JTkc6IGlkZW50aWZpZXIgd2lsbCBiZSBpZ25vcmVkLCBwZXJtaXNzaW9ucyBhbmQgZXhwaXJlc09uIGFyZSByZXF1aXJlZC5cbiAqXG4gKiBAcGFyYW0gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcyAtXG4gKiBAcGFyYW0gdXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsIC1cbiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGVCbG9iU0FTUXVlcnlQYXJhbWV0ZXJzVURLMjAyMDEyMDYoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcywgdXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsKSB7XG4gICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcyA9IFNBU1NpZ25hdHVyZVZhbHVlc1Nhbml0eUNoZWNrQW5kQXV0b2ZpbGwoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcyk7XG4gICAgLy8gU3RvcmVkIGFjY2VzcyBwb2xpY2llcyBhcmUgbm90IHN1cHBvcnRlZCBmb3IgYSB1c2VyIGRlbGVnYXRpb24gU0FTLlxuICAgIGlmICghYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucyB8fCAhYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5leHBpcmVzT24pIHtcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJNdXN0IHByb3ZpZGUgJ3Blcm1pc3Npb25zJyBhbmQgJ2V4cGlyZXNPbicgZm9yIEJsb2IgU0FTIGdlbmVyYXRpb24gd2hlbiBnZW5lcmF0aW5nIHVzZXIgZGVsZWdhdGlvbiBTQVMuXCIpO1xuICAgIH1cbiAgICBsZXQgcmVzb3VyY2UgPSBcImNcIjtcbiAgICBsZXQgdGltZXN0YW1wID0gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5zbmFwc2hvdFRpbWU7XG4gICAgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuYmxvYk5hbWUpIHtcbiAgICAgICAgcmVzb3VyY2UgPSBcImJcIjtcbiAgICAgICAgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuc25hcHNob3RUaW1lKSB7XG4gICAgICAgICAgICByZXNvdXJjZSA9IFwiYnNcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnZlcnNpb25JZCkge1xuICAgICAgICAgICAgcmVzb3VyY2UgPSBcImJ2XCI7XG4gICAgICAgICAgICB0aW1lc3RhbXAgPSBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnZlcnNpb25JZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBDYWxsaW5nIHBhcnNlIGFuZCB0b1N0cmluZyBndWFyYW50ZWVzIHRoZSBwcm9wZXIgb3JkZXJpbmcgYW5kIHRocm93cyBvbiBpbnZhbGlkIGNoYXJhY3RlcnMuXG4gICAgbGV0IHZlcmlmaWVkUGVybWlzc2lvbnM7XG4gICAgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMpIHtcbiAgICAgICAgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuYmxvYk5hbWUpIHtcbiAgICAgICAgICAgIHZlcmlmaWVkUGVybWlzc2lvbnMgPSBCbG9iU0FTUGVybWlzc2lvbnMucGFyc2UoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucy50b1N0cmluZygpKS50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmVyaWZpZWRQZXJtaXNzaW9ucyA9IENvbnRhaW5lclNBU1Blcm1pc3Npb25zLnBhcnNlKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMudG9TdHJpbmcoKSkudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBTaWduYXR1cmUgaXMgZ2VuZXJhdGVkIG9uIHRoZSB1bi11cmwtZW5jb2RlZCB2YWx1ZXMuXG4gICAgY29uc3Qgc3RyaW5nVG9TaWduID0gW1xuICAgICAgICB2ZXJpZmllZFBlcm1pc3Npb25zID8gdmVyaWZpZWRQZXJtaXNzaW9ucyA6IFwiXCIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuc3RhcnRzT25cbiAgICAgICAgICAgID8gdHJ1bmNhdGVkSVNPODA2MURhdGUoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5zdGFydHNPbiwgZmFsc2UpXG4gICAgICAgICAgICA6IFwiXCIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuZXhwaXJlc09uXG4gICAgICAgICAgICA/IHRydW5jYXRlZElTTzgwNjFEYXRlKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuZXhwaXJlc09uLCBmYWxzZSlcbiAgICAgICAgICAgIDogXCJcIixcbiAgICAgICAgZ2V0Q2Fub25pY2FsTmFtZSh1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwuYWNjb3VudE5hbWUsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGFpbmVyTmFtZSwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5ibG9iTmFtZSksXG4gICAgICAgIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC51c2VyRGVsZWdhdGlvbktleS5zaWduZWRPYmplY3RJZCxcbiAgICAgICAgdXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsLnVzZXJEZWxlZ2F0aW9uS2V5LnNpZ25lZFRlbmFudElkLFxuICAgICAgICB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwudXNlckRlbGVnYXRpb25LZXkuc2lnbmVkU3RhcnRzT25cbiAgICAgICAgICAgID8gdHJ1bmNhdGVkSVNPODA2MURhdGUodXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsLnVzZXJEZWxlZ2F0aW9uS2V5LnNpZ25lZFN0YXJ0c09uLCBmYWxzZSlcbiAgICAgICAgICAgIDogXCJcIixcbiAgICAgICAgdXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsLnVzZXJEZWxlZ2F0aW9uS2V5LnNpZ25lZEV4cGlyZXNPblxuICAgICAgICAgICAgPyB0cnVuY2F0ZWRJU084MDYxRGF0ZSh1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwudXNlckRlbGVnYXRpb25LZXkuc2lnbmVkRXhwaXJlc09uLCBmYWxzZSlcbiAgICAgICAgICAgIDogXCJcIixcbiAgICAgICAgdXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsLnVzZXJEZWxlZ2F0aW9uS2V5LnNpZ25lZFNlcnZpY2UsXG4gICAgICAgIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC51c2VyRGVsZWdhdGlvbktleS5zaWduZWRWZXJzaW9uLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnByZWF1dGhvcml6ZWRBZ2VudE9iamVjdElkLFxuICAgICAgICB1bmRlZmluZWQsIC8vIGFnZW50T2JqZWN0SWRcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb3JyZWxhdGlvbklkLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmlwUmFuZ2UgPyBpcFJhbmdlVG9TdHJpbmcoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5pcFJhbmdlKSA6IFwiXCIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucHJvdG9jb2wgPyBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnByb3RvY29sIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uLFxuICAgICAgICByZXNvdXJjZSxcbiAgICAgICAgdGltZXN0YW1wLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jYWNoZUNvbnRyb2wsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudERpc3Bvc2l0aW9uLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRFbmNvZGluZyxcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50TGFuZ3VhZ2UsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudFR5cGUsXG4gICAgXS5qb2luKFwiXFxuXCIpO1xuICAgIGNvbnN0IHNpZ25hdHVyZSA9IHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC5jb21wdXRlSE1BQ1NIQTI1NihzdHJpbmdUb1NpZ24pO1xuICAgIHJldHVybiB7XG4gICAgICAgIHNhc1F1ZXJ5UGFyYW1ldGVyczogbmV3IFNBU1F1ZXJ5UGFyYW1ldGVycyhibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnZlcnNpb24sIHNpZ25hdHVyZSwgdmVyaWZpZWRQZXJtaXNzaW9ucywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucHJvdG9jb2wsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuc3RhcnRzT24sIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuZXhwaXJlc09uLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmlwUmFuZ2UsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuaWRlbnRpZmllciwgcmVzb3VyY2UsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY2FjaGVDb250cm9sLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnREaXNwb3NpdGlvbiwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50RW5jb2RpbmcsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudExhbmd1YWdlLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRUeXBlLCB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwudXNlckRlbGVnYXRpb25LZXksIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucHJlYXV0aG9yaXplZEFnZW50T2JqZWN0SWQsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29ycmVsYXRpb25JZCwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5lbmNyeXB0aW9uU2NvcGUpLFxuICAgICAgICBzdHJpbmdUb1NpZ246IHN0cmluZ1RvU2lnbixcbiAgICB9O1xufVxuZnVuY3Rpb24gZ2V0Q2Fub25pY2FsTmFtZShhY2NvdW50TmFtZSwgY29udGFpbmVyTmFtZSwgYmxvYk5hbWUpIHtcbiAgICAvLyBDb250YWluZXI6IFwiL2Jsb2IvYWNjb3VudC9jb250YWluZXJOYW1lXCJcbiAgICAvLyBCbG9iOiAgICAgIFwiL2Jsb2IvYWNjb3VudC9jb250YWluZXJOYW1lL2Jsb2JOYW1lXCJcbiAgICBjb25zdCBlbGVtZW50cyA9IFtgL2Jsb2IvJHthY2NvdW50TmFtZX0vJHtjb250YWluZXJOYW1lfWBdO1xuICAgIGlmIChibG9iTmFtZSkge1xuICAgICAgICBlbGVtZW50cy5wdXNoKGAvJHtibG9iTmFtZX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIGVsZW1lbnRzLmpvaW4oXCJcIik7XG59XG5mdW5jdGlvbiBTQVNTaWduYXR1cmVWYWx1ZXNTYW5pdHlDaGVja0FuZEF1dG9maWxsKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMpIHtcbiAgICBjb25zdCB2ZXJzaW9uID0gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uID8gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uIDogU0VSVklDRV9WRVJTSU9OO1xuICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnNuYXBzaG90VGltZSAmJiB2ZXJzaW9uIDwgXCIyMDE4LTExLTA5XCIpIHtcbiAgICAgICAgdGhyb3cgUmFuZ2VFcnJvcihcIid2ZXJzaW9uJyBtdXN0IGJlID49ICcyMDE4LTExLTA5JyB3aGVuIHByb3ZpZGluZyAnc25hcHNob3RUaW1lJy5cIik7XG4gICAgfVxuICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmJsb2JOYW1lID09PSB1bmRlZmluZWQgJiYgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5zbmFwc2hvdFRpbWUpIHtcbiAgICAgICAgdGhyb3cgUmFuZ2VFcnJvcihcIk11c3QgcHJvdmlkZSAnYmxvYk5hbWUnIHdoZW4gcHJvdmlkaW5nICdzbmFwc2hvdFRpbWUnLlwiKTtcbiAgICB9XG4gICAgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMudmVyc2lvbklkICYmIHZlcnNpb24gPCBcIjIwMTktMTAtMTBcIikge1xuICAgICAgICB0aHJvdyBSYW5nZUVycm9yKFwiJ3ZlcnNpb24nIG11c3QgYmUgPj0gJzIwMTktMTAtMTAnIHdoZW4gcHJvdmlkaW5nICd2ZXJzaW9uSWQnLlwiKTtcbiAgICB9XG4gICAgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuYmxvYk5hbWUgPT09IHVuZGVmaW5lZCAmJiBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnZlcnNpb25JZCkge1xuICAgICAgICB0aHJvdyBSYW5nZUVycm9yKFwiTXVzdCBwcm92aWRlICdibG9iTmFtZScgd2hlbiBwcm92aWRpbmcgJ3ZlcnNpb25JZCcuXCIpO1xuICAgIH1cbiAgICBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucyAmJlxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zLnNldEltbXV0YWJpbGl0eVBvbGljeSAmJlxuICAgICAgICB2ZXJzaW9uIDwgXCIyMDIwLTA4LTA0XCIpIHtcbiAgICAgICAgdGhyb3cgUmFuZ2VFcnJvcihcIid2ZXJzaW9uJyBtdXN0IGJlID49ICcyMDIwLTA4LTA0JyB3aGVuIHByb3ZpZGVkICdpJyBwZXJtaXNzaW9uLlwiKTtcbiAgICB9XG4gICAgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMgJiZcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucy5kZWxldGVWZXJzaW9uICYmXG4gICAgICAgIHZlcnNpb24gPCBcIjIwMTktMTAtMTBcIikge1xuICAgICAgICB0aHJvdyBSYW5nZUVycm9yKFwiJ3ZlcnNpb24nIG11c3QgYmUgPj0gJzIwMTktMTAtMTAnIHdoZW4gcHJvdmlkaW5nICd4JyBwZXJtaXNzaW9uLlwiKTtcbiAgICB9XG4gICAgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMgJiZcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucy5wZXJtYW5lbnREZWxldGUgJiZcbiAgICAgICAgdmVyc2lvbiA8IFwiMjAxOS0xMC0xMFwiKSB7XG4gICAgICAgIHRocm93IFJhbmdlRXJyb3IoXCIndmVyc2lvbicgbXVzdCBiZSA+PSAnMjAxOS0xMC0xMCcgd2hlbiBwcm92aWRpbmcgJ3knIHBlcm1pc3Npb24uXCIpO1xuICAgIH1cbiAgICBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucyAmJlxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zLnRhZyAmJlxuICAgICAgICB2ZXJzaW9uIDwgXCIyMDE5LTEyLTEyXCIpIHtcbiAgICAgICAgdGhyb3cgUmFuZ2VFcnJvcihcIid2ZXJzaW9uJyBtdXN0IGJlID49ICcyMDE5LTEyLTEyJyB3aGVuIHByb3ZpZGluZyAndCcgcGVybWlzc2lvbi5cIik7XG4gICAgfVxuICAgIGlmICh2ZXJzaW9uIDwgXCIyMDIwLTAyLTEwXCIgJiZcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucyAmJlxuICAgICAgICAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucy5tb3ZlIHx8IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMuZXhlY3V0ZSkpIHtcbiAgICAgICAgdGhyb3cgUmFuZ2VFcnJvcihcIid2ZXJzaW9uJyBtdXN0IGJlID49ICcyMDIwLTAyLTEwJyB3aGVuIHByb3ZpZGluZyB0aGUgJ20nIG9yICdlJyBwZXJtaXNzaW9uLlwiKTtcbiAgICB9XG4gICAgaWYgKHZlcnNpb24gPCBcIjIwMjEtMDQtMTBcIiAmJlxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zICYmXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMuZmlsdGVyQnlUYWdzKSB7XG4gICAgICAgIHRocm93IFJhbmdlRXJyb3IoXCIndmVyc2lvbicgbXVzdCBiZSA+PSAnMjAyMS0wNC0xMCcgd2hlbiBwcm92aWRpbmcgdGhlICdmJyBwZXJtaXNzaW9uLlwiKTtcbiAgICB9XG4gICAgaWYgKHZlcnNpb24gPCBcIjIwMjAtMDItMTBcIiAmJlxuICAgICAgICAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wcmVhdXRob3JpemVkQWdlbnRPYmplY3RJZCB8fCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvcnJlbGF0aW9uSWQpKSB7XG4gICAgICAgIHRocm93IFJhbmdlRXJyb3IoXCIndmVyc2lvbicgbXVzdCBiZSA+PSAnMjAyMC0wMi0xMCcgd2hlbiBwcm92aWRpbmcgJ3ByZWF1dGhvcml6ZWRBZ2VudE9iamVjdElkJyBvciAnY29ycmVsYXRpb25JZCcuXCIpO1xuICAgIH1cbiAgICBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5lbmNyeXB0aW9uU2NvcGUgJiYgdmVyc2lvbiA8IFwiMjAyMC0xMi0wNlwiKSB7XG4gICAgICAgIHRocm93IFJhbmdlRXJyb3IoXCIndmVyc2lvbicgbXVzdCBiZSA+PSAnMjAyMC0xMi0wNicgd2hlbiBwcm92aWRlZCAnZW5jcnlwdGlvblNjb3BlJyBpbiBTQVMuXCIpO1xuICAgIH1cbiAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnZlcnNpb24gPSB2ZXJzaW9uO1xuICAgIHJldHVybiBibG9iU0FTU2lnbmF0dXJlVmFsdWVzO1xufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogQSBjbGllbnQgdGhhdCBtYW5hZ2VzIGxlYXNlcyBmb3IgYSB7QGxpbmsgQ29udGFpbmVyQ2xpZW50fSBvciBhIHtAbGluayBCbG9iQ2xpZW50fS5cbiAqL1xuY2xhc3MgQmxvYkxlYXNlQ2xpZW50IHtcbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBsZWFzZSBJZC5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBsZWFzZUlkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGVhc2VJZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgdXJsLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IHVybCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VybDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBCbG9iTGVhc2VDbGllbnQuXG4gICAgICogQHBhcmFtIGNsaWVudCAtIFRoZSBjbGllbnQgdG8gbWFrZSB0aGUgbGVhc2Ugb3BlcmF0aW9uIHJlcXVlc3RzLlxuICAgICAqIEBwYXJhbSBsZWFzZUlkIC0gSW5pdGlhbCBwcm9wb3NlZCBsZWFzZSBpZC5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihjbGllbnQsIGxlYXNlSWQpIHtcbiAgICAgICAgY29uc3QgY2xpZW50Q29udGV4dCA9IGNsaWVudC5zdG9yYWdlQ2xpZW50Q29udGV4dDtcbiAgICAgICAgdGhpcy5fdXJsID0gY2xpZW50LnVybDtcbiAgICAgICAgaWYgKGNsaWVudC5uYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2lzQ29udGFpbmVyID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lck9yQmxvYk9wZXJhdGlvbiA9IGNsaWVudENvbnRleHQuY29udGFpbmVyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5faXNDb250YWluZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lck9yQmxvYk9wZXJhdGlvbiA9IGNsaWVudENvbnRleHQuYmxvYjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWxlYXNlSWQpIHtcbiAgICAgICAgICAgIGxlYXNlSWQgPSBjb3JlVXRpbC5yYW5kb21VVUlEKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbGVhc2VJZCA9IGxlYXNlSWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEVzdGFibGlzaGVzIGFuZCBtYW5hZ2VzIGEgbG9jayBvbiBhIGNvbnRhaW5lciBmb3IgZGVsZXRlIG9wZXJhdGlvbnMsIG9yIG9uIGEgYmxvYlxuICAgICAqIGZvciB3cml0ZSBhbmQgZGVsZXRlIG9wZXJhdGlvbnMuXG4gICAgICogVGhlIGxvY2sgZHVyYXRpb24gY2FuIGJlIDE1IHRvIDYwIHNlY29uZHMsIG9yIGNhbiBiZSBpbmZpbml0ZS5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9sZWFzZS1jb250YWluZXJcbiAgICAgKiBhbmRcbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9sZWFzZS1ibG9iXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZHVyYXRpb24gLSBNdXN0IGJlIGJldHdlZW4gMTUgdG8gNjAgc2Vjb25kcywgb3IgaW5maW5pdGUgKC0xKVxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gb3B0aW9uIHRvIGNvbmZpZ3VyZSBsZWFzZSBtYW5hZ2VtZW50IG9wZXJhdGlvbnMuXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgYWNxdWlyZSBsZWFzZSBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgYWNxdWlyZUxlYXNlKGR1cmF0aW9uLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZTtcbiAgICAgICAgaWYgKHRoaXMuX2lzQ29udGFpbmVyICYmXG4gICAgICAgICAgICAoKCgoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5pZk1hdGNoKSAmJiAoKF9iID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaWZNYXRjaCkgIT09IEVUYWdOb25lKSB8fFxuICAgICAgICAgICAgICAgICgoKF9jID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuaWZOb25lTWF0Y2gpICYmICgoX2QgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZC5pZk5vbmVNYXRjaCkgIT09IEVUYWdOb25lKSB8fFxuICAgICAgICAgICAgICAgICgoX2UgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZS50YWdDb25kaXRpb25zKSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVGhlIElmTWF0Y2gsIElmTm9uZU1hdGNoIGFuZCB0YWdzIGFjY2VzcyBjb25kaXRpb25zIGFyZSBpZ25vcmVkIGJ5IHRoZSBzZXJ2aWNlLiBWYWx1ZXMgb3RoZXIgdGhhbiB1bmRlZmluZWQgb3IgdGhlaXIgZGVmYXVsdCB2YWx1ZXMgYXJlIG5vdCBhY2NlcHRhYmxlLlwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JMZWFzZUNsaWVudC1hY3F1aXJlTGVhc2VcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5fY29udGFpbmVyT3JCbG9iT3BlcmF0aW9uLmFjcXVpcmVMZWFzZSh7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgZHVyYXRpb24sXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIHByb3Bvc2VkTGVhc2VJZDogdGhpcy5fbGVhc2VJZCxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUbyBjaGFuZ2UgdGhlIElEIG9mIHRoZSBsZWFzZS5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9sZWFzZS1jb250YWluZXJcbiAgICAgKiBhbmRcbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9sZWFzZS1ibG9iXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcG9zZWRMZWFzZUlkIC0gdGhlIHByb3Bvc2VkIG5ldyBsZWFzZSBJZC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIG9wdGlvbiB0byBjb25maWd1cmUgbGVhc2UgbWFuYWdlbWVudCBvcGVyYXRpb25zLlxuICAgICAqIEByZXR1cm5zIFJlc3BvbnNlIGRhdGEgZm9yIGNoYW5nZSBsZWFzZSBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgY2hhbmdlTGVhc2UocHJvcG9zZWRMZWFzZUlkLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZTtcbiAgICAgICAgaWYgKHRoaXMuX2lzQ29udGFpbmVyICYmXG4gICAgICAgICAgICAoKCgoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5pZk1hdGNoKSAmJiAoKF9iID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaWZNYXRjaCkgIT09IEVUYWdOb25lKSB8fFxuICAgICAgICAgICAgICAgICgoKF9jID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuaWZOb25lTWF0Y2gpICYmICgoX2QgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZC5pZk5vbmVNYXRjaCkgIT09IEVUYWdOb25lKSB8fFxuICAgICAgICAgICAgICAgICgoX2UgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZS50YWdDb25kaXRpb25zKSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVGhlIElmTWF0Y2gsIElmTm9uZU1hdGNoIGFuZCB0YWdzIGFjY2VzcyBjb25kaXRpb25zIGFyZSBpZ25vcmVkIGJ5IHRoZSBzZXJ2aWNlLiBWYWx1ZXMgb3RoZXIgdGhhbiB1bmRlZmluZWQgb3IgdGhlaXIgZGVmYXVsdCB2YWx1ZXMgYXJlIG5vdCBhY2NlcHRhYmxlLlwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JMZWFzZUNsaWVudC1jaGFuZ2VMZWFzZVwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5fY29udGFpbmVyT3JCbG9iT3BlcmF0aW9uLmNoYW5nZUxlYXNlKHRoaXMuX2xlYXNlSWQsIHByb3Bvc2VkTGVhc2VJZCwge1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB0aGlzLl9sZWFzZUlkID0gcHJvcG9zZWRMZWFzZUlkO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVG8gZnJlZSB0aGUgbGVhc2UgaWYgaXQgaXMgbm8gbG9uZ2VyIG5lZWRlZCBzbyB0aGF0IGFub3RoZXIgY2xpZW50IG1heVxuICAgICAqIGltbWVkaWF0ZWx5IGFjcXVpcmUgYSBsZWFzZSBhZ2FpbnN0IHRoZSBjb250YWluZXIgb3IgdGhlIGJsb2IuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvbGVhc2UtY29udGFpbmVyXG4gICAgICogYW5kXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvbGVhc2UtYmxvYlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBvcHRpb24gdG8gY29uZmlndXJlIGxlYXNlIG1hbmFnZW1lbnQgb3BlcmF0aW9ucy5cbiAgICAgKiBAcmV0dXJucyBSZXNwb25zZSBkYXRhIGZvciByZWxlYXNlIGxlYXNlIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyByZWxlYXNlTGVhc2Uob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2U7XG4gICAgICAgIGlmICh0aGlzLl9pc0NvbnRhaW5lciAmJlxuICAgICAgICAgICAgKCgoKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuaWZNYXRjaCkgJiYgKChfYiA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmlmTWF0Y2gpICE9PSBFVGFnTm9uZSkgfHxcbiAgICAgICAgICAgICAgICAoKChfYyA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmlmTm9uZU1hdGNoKSAmJiAoKF9kID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuaWZOb25lTWF0Y2gpICE9PSBFVGFnTm9uZSkgfHxcbiAgICAgICAgICAgICAgICAoKF9lID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2UudGFnQ29uZGl0aW9ucykpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlRoZSBJZk1hdGNoLCBJZk5vbmVNYXRjaCBhbmQgdGFncyBhY2Nlc3MgY29uZGl0aW9ucyBhcmUgaWdub3JlZCBieSB0aGUgc2VydmljZS4gVmFsdWVzIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIHRoZWlyIGRlZmF1bHQgdmFsdWVzIGFyZSBub3QgYWNjZXB0YWJsZS5cIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iTGVhc2VDbGllbnQtcmVsZWFzZUxlYXNlXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuX2NvbnRhaW5lck9yQmxvYk9wZXJhdGlvbi5yZWxlYXNlTGVhc2UodGhpcy5fbGVhc2VJZCwge1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUbyByZW5ldyB0aGUgbGVhc2UuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvbGVhc2UtY29udGFpbmVyXG4gICAgICogYW5kXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvbGVhc2UtYmxvYlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBvcHRpb24gdG8gY29uZmlndXJlIGxlYXNlIG1hbmFnZW1lbnQgb3BlcmF0aW9ucy5cbiAgICAgKiBAcmV0dXJucyBSZXNwb25zZSBkYXRhIGZvciByZW5ldyBsZWFzZSBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgcmVuZXdMZWFzZShvcHRpb25zID0ge30pIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZTtcbiAgICAgICAgaWYgKHRoaXMuX2lzQ29udGFpbmVyICYmXG4gICAgICAgICAgICAoKCgoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5pZk1hdGNoKSAmJiAoKF9iID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaWZNYXRjaCkgIT09IEVUYWdOb25lKSB8fFxuICAgICAgICAgICAgICAgICgoKF9jID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuaWZOb25lTWF0Y2gpICYmICgoX2QgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZC5pZk5vbmVNYXRjaCkgIT09IEVUYWdOb25lKSB8fFxuICAgICAgICAgICAgICAgICgoX2UgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZS50YWdDb25kaXRpb25zKSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVGhlIElmTWF0Y2gsIElmTm9uZU1hdGNoIGFuZCB0YWdzIGFjY2VzcyBjb25kaXRpb25zIGFyZSBpZ25vcmVkIGJ5IHRoZSBzZXJ2aWNlLiBWYWx1ZXMgb3RoZXIgdGhhbiB1bmRlZmluZWQgb3IgdGhlaXIgZGVmYXVsdCB2YWx1ZXMgYXJlIG5vdCBhY2NlcHRhYmxlLlwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JMZWFzZUNsaWVudC1yZW5ld0xlYXNlXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRhaW5lck9yQmxvYk9wZXJhdGlvbi5yZW5ld0xlYXNlKHRoaXMuX2xlYXNlSWQsIHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUbyBlbmQgdGhlIGxlYXNlIGJ1dCBlbnN1cmUgdGhhdCBhbm90aGVyIGNsaWVudCBjYW5ub3QgYWNxdWlyZSBhIG5ldyBsZWFzZVxuICAgICAqIHVudGlsIHRoZSBjdXJyZW50IGxlYXNlIHBlcmlvZCBoYXMgZXhwaXJlZC5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9sZWFzZS1jb250YWluZXJcbiAgICAgKiBhbmRcbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9sZWFzZS1ibG9iXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYnJlYWtQZXJpb2QgLSBCcmVhayBwZXJpb2RcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIG9wdGlvbnMgdG8gY29uZmlndXJlIGxlYXNlIG1hbmFnZW1lbnQgb3BlcmF0aW9ucy5cbiAgICAgKiBAcmV0dXJucyBSZXNwb25zZSBkYXRhIGZvciBicmVhayBsZWFzZSBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgYnJlYWtMZWFzZShicmVha1BlcmlvZCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2U7XG4gICAgICAgIGlmICh0aGlzLl9pc0NvbnRhaW5lciAmJlxuICAgICAgICAgICAgKCgoKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuaWZNYXRjaCkgJiYgKChfYiA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmlmTWF0Y2gpICE9PSBFVGFnTm9uZSkgfHxcbiAgICAgICAgICAgICAgICAoKChfYyA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmlmTm9uZU1hdGNoKSAmJiAoKF9kID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuaWZOb25lTWF0Y2gpICE9PSBFVGFnTm9uZSkgfHxcbiAgICAgICAgICAgICAgICAoKF9lID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2UudGFnQ29uZGl0aW9ucykpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlRoZSBJZk1hdGNoLCBJZk5vbmVNYXRjaCBhbmQgdGFncyBhY2Nlc3MgY29uZGl0aW9ucyBhcmUgaWdub3JlZCBieSB0aGUgc2VydmljZS4gVmFsdWVzIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIHRoZWlyIGRlZmF1bHQgdmFsdWVzIGFyZSBub3QgYWNjZXB0YWJsZS5cIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iTGVhc2VDbGllbnQtYnJlYWtMZWFzZVwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGNvbnN0IG9wZXJhdGlvbk9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgYnJlYWtQZXJpb2QsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5fY29udGFpbmVyT3JCbG9iT3BlcmF0aW9uLmJyZWFrTGVhc2Uob3BlcmF0aW9uT3B0aW9ucykpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBPTkxZIEFWQUlMQUJMRSBJTiBOT0RFLkpTIFJVTlRJTUUuXG4gKlxuICogQSBOb2RlLmpzIFJlYWRhYmxlU3RyZWFtIHdpbGwgaW50ZXJuYWxseSByZXRyeSB3aGVuIGludGVybmFsIFJlYWRhYmxlU3RyZWFtIHVuZXhwZWN0ZWQgZW5kcy5cbiAqL1xuY2xhc3MgUmV0cmlhYmxlUmVhZGFibGVTdHJlYW0gZXh0ZW5kcyBzdHJlYW0uUmVhZGFibGUge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgUmV0cmlhYmxlUmVhZGFibGVTdHJlYW0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc291cmNlIC0gVGhlIGN1cnJlbnQgUmVhZGFibGVTdHJlYW0gcmV0dXJuZWQgZnJvbSBnZXR0ZXJcbiAgICAgKiBAcGFyYW0gZ2V0dGVyIC0gQSBtZXRob2QgY2FsbGluZyBkb3dubG9hZGluZyByZXF1ZXN0IHJldHVybmluZ1xuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIG5ldyBSZWFkYWJsZVN0cmVhbSBmcm9tIHNwZWNpZmllZCBvZmZzZXRcbiAgICAgKiBAcGFyYW0gb2Zmc2V0IC0gT2Zmc2V0IHBvc2l0aW9uIGluIG9yaWdpbmFsIGRhdGEgc291cmNlIHRvIHJlYWRcbiAgICAgKiBAcGFyYW0gY291bnQgLSBIb3cgbXVjaCBkYXRhIGluIG9yaWdpbmFsIGRhdGEgc291cmNlIHRvIHJlYWRcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtXG4gICAgICovXG4gICAgY29uc3RydWN0b3Ioc291cmNlLCBnZXR0ZXIsIG9mZnNldCwgY291bnQsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBzdXBlcih7IGhpZ2hXYXRlck1hcms6IG9wdGlvbnMuaGlnaFdhdGVyTWFyayB9KTtcbiAgICAgICAgdGhpcy5yZXRyaWVzID0gMDtcbiAgICAgICAgdGhpcy5zb3VyY2VEYXRhSGFuZGxlciA9IChkYXRhKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmRvSW5qZWN0RXJyb3JPbmNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmRvSW5qZWN0RXJyb3JPbmNlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHRoaXMuc291cmNlLnBhdXNlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zb3VyY2VFcnJvck9yRW5kSGFuZGxlcigpO1xuICAgICAgICAgICAgICAgIHRoaXMuc291cmNlLmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIC8vICAgYE9mZnNldDogJHt0aGlzLm9mZnNldH0sIFJlY2VpdmVkICR7ZGF0YS5sZW5ndGh9IGZyb20gaW50ZXJuYWwgc3RyZWFtYFxuICAgICAgICAgICAgLy8gKTtcbiAgICAgICAgICAgIHRoaXMub2Zmc2V0ICs9IGRhdGEubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKHRoaXMub25Qcm9ncmVzcykge1xuICAgICAgICAgICAgICAgIHRoaXMub25Qcm9ncmVzcyh7IGxvYWRlZEJ5dGVzOiB0aGlzLm9mZnNldCAtIHRoaXMuc3RhcnQgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMucHVzaChkYXRhKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc291cmNlLnBhdXNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuc291cmNlQWJvcnRlZEhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhYm9ydEVycm9yID0gbmV3IGFib3J0Q29udHJvbGxlci5BYm9ydEVycm9yKFwiVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC5cIik7XG4gICAgICAgICAgICB0aGlzLmRlc3Ryb3koYWJvcnRFcnJvcik7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuc291cmNlRXJyb3JPckVuZEhhbmRsZXIgPSAoZXJyKSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyICYmIGVyci5uYW1lID09PSBcIkFib3J0RXJyb3JcIikge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveShlcnIpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgLy8gICBgU291cmNlIHN0cmVhbSBlbWl0cyBlbmQgb3IgZXJyb3IsIG9mZnNldDogJHtcbiAgICAgICAgICAgIC8vICAgICB0aGlzLm9mZnNldFxuICAgICAgICAgICAgLy8gICB9LCBkZXN0IGVuZCA6ICR7dGhpcy5lbmR9YFxuICAgICAgICAgICAgLy8gKTtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlU291cmNlRXZlbnRIYW5kbGVycygpO1xuICAgICAgICAgICAgaWYgKHRoaXMub2Zmc2V0IC0gMSA9PT0gdGhpcy5lbmQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnB1c2gobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLm9mZnNldCA8PSB0aGlzLmVuZCkge1xuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgIC8vICAgYHJldHJpZXM6ICR7dGhpcy5yZXRyaWVzfSwgbWF4IHJldHJpZXM6ICR7dGhpcy5tYXhSZXRyaWVzfWBcbiAgICAgICAgICAgICAgICAvLyApO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJldHJpZXMgPCB0aGlzLm1heFJldHJ5UmVxdWVzdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXRyaWVzICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0dGVyKHRoaXMub2Zmc2V0KVxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oKG5ld1NvdXJjZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zb3VyY2UgPSBuZXdTb3VyY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFNvdXJjZUV2ZW50SGFuZGxlcnMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveShlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95KG5ldyBFcnJvcihgRGF0YSBjb3JydXB0aW9uIGZhaWx1cmU6IHJlY2VpdmVkIGxlc3MgZGF0YSB0aGFuIHJlcXVpcmVkIGFuZCByZWFjaGVkIG1heFJldGlyZXMgbGltaXRhdGlvbi4gUmVjZWl2ZWQgZGF0YSBvZmZzZXQ6ICR7dGhpcy5vZmZzZXQgLSAxfSwgZGF0YSBuZWVkZWQgb2Zmc2V0OiAke3RoaXMuZW5kfSwgcmV0cmllczogJHt0aGlzLnJldHJpZXN9LCBtYXggcmV0cmllczogJHt0aGlzLm1heFJldHJ5UmVxdWVzdHN9YCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveShuZXcgRXJyb3IoYERhdGEgY29ycnVwdGlvbiBmYWlsdXJlOiBSZWNlaXZlZCBtb3JlIGRhdGEgdGhhbiBvcmlnaW5hbCByZXF1ZXN0LCBkYXRhIG5lZWRlZCBvZmZzZXQgaXMgJHt0aGlzLmVuZH0sIHJlY2VpdmVkIG9mZnNldDogJHt0aGlzLm9mZnNldCAtIDF9YCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmdldHRlciA9IGdldHRlcjtcbiAgICAgICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICAgIHRoaXMuc3RhcnQgPSBvZmZzZXQ7XG4gICAgICAgIHRoaXMub2Zmc2V0ID0gb2Zmc2V0O1xuICAgICAgICB0aGlzLmVuZCA9IG9mZnNldCArIGNvdW50IC0gMTtcbiAgICAgICAgdGhpcy5tYXhSZXRyeVJlcXVlc3RzID1cbiAgICAgICAgICAgIG9wdGlvbnMubWF4UmV0cnlSZXF1ZXN0cyAmJiBvcHRpb25zLm1heFJldHJ5UmVxdWVzdHMgPj0gMCA/IG9wdGlvbnMubWF4UmV0cnlSZXF1ZXN0cyA6IDA7XG4gICAgICAgIHRoaXMub25Qcm9ncmVzcyA9IG9wdGlvbnMub25Qcm9ncmVzcztcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgdGhpcy5zZXRTb3VyY2VFdmVudEhhbmRsZXJzKCk7XG4gICAgfVxuICAgIF9yZWFkKCkge1xuICAgICAgICB0aGlzLnNvdXJjZS5yZXN1bWUoKTtcbiAgICB9XG4gICAgc2V0U291cmNlRXZlbnRIYW5kbGVycygpIHtcbiAgICAgICAgdGhpcy5zb3VyY2Uub24oXCJkYXRhXCIsIHRoaXMuc291cmNlRGF0YUhhbmRsZXIpO1xuICAgICAgICB0aGlzLnNvdXJjZS5vbihcImVuZFwiLCB0aGlzLnNvdXJjZUVycm9yT3JFbmRIYW5kbGVyKTtcbiAgICAgICAgdGhpcy5zb3VyY2Uub24oXCJlcnJvclwiLCB0aGlzLnNvdXJjZUVycm9yT3JFbmRIYW5kbGVyKTtcbiAgICAgICAgLy8gbmVlZGVkIGZvciBOb2RlMTRcbiAgICAgICAgdGhpcy5zb3VyY2Uub24oXCJhYm9ydGVkXCIsIHRoaXMuc291cmNlQWJvcnRlZEhhbmRsZXIpO1xuICAgIH1cbiAgICByZW1vdmVTb3VyY2VFdmVudEhhbmRsZXJzKCkge1xuICAgICAgICB0aGlzLnNvdXJjZS5yZW1vdmVMaXN0ZW5lcihcImRhdGFcIiwgdGhpcy5zb3VyY2VEYXRhSGFuZGxlcik7XG4gICAgICAgIHRoaXMuc291cmNlLnJlbW92ZUxpc3RlbmVyKFwiZW5kXCIsIHRoaXMuc291cmNlRXJyb3JPckVuZEhhbmRsZXIpO1xuICAgICAgICB0aGlzLnNvdXJjZS5yZW1vdmVMaXN0ZW5lcihcImVycm9yXCIsIHRoaXMuc291cmNlRXJyb3JPckVuZEhhbmRsZXIpO1xuICAgICAgICB0aGlzLnNvdXJjZS5yZW1vdmVMaXN0ZW5lcihcImFib3J0ZWRcIiwgdGhpcy5zb3VyY2VBYm9ydGVkSGFuZGxlcik7XG4gICAgfVxuICAgIF9kZXN0cm95KGVycm9yLCBjYWxsYmFjaykge1xuICAgICAgICAvLyByZW1vdmUgbGlzdGVuZXIgZnJvbSBzb3VyY2UgYW5kIHJlbGVhc2Ugc291cmNlXG4gICAgICAgIHRoaXMucmVtb3ZlU291cmNlRXZlbnRIYW5kbGVycygpO1xuICAgICAgICB0aGlzLnNvdXJjZS5kZXN0cm95KCk7XG4gICAgICAgIGNhbGxiYWNrKGVycm9yID09PSBudWxsID8gdW5kZWZpbmVkIDogZXJyb3IpO1xuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIE9OTFkgQVZBSUxBQkxFIElOIE5PREUuSlMgUlVOVElNRS5cbiAqXG4gKiBCbG9iRG93bmxvYWRSZXNwb25zZSBpbXBsZW1lbnRzIEJsb2JEb3dubG9hZFJlc3BvbnNlUGFyc2VkIGludGVyZmFjZSwgYW5kIGluIE5vZGUuanMgcnVudGltZSBpdCB3aWxsXG4gKiBhdXRvbWF0aWNhbGx5IHJldHJ5IHdoZW4gaW50ZXJuYWwgcmVhZCBzdHJlYW0gdW5leHBlY3RlZCBlbmRzLiAoVGhpcyBraW5kIG9mIHVuZXhwZWN0ZWQgZW5kcyBjYW5ub3RcbiAqIHRyaWdnZXIgcmV0cmllcyBkZWZpbmVkIGluIHBpcGVsaW5lIHJldHJ5IHBvbGljeS4pXG4gKlxuICogVGhlIHtAbGluayByZWFkYWJsZVN0cmVhbUJvZHl9IHN0cmVhbSB3aWxsIHJldHJ5IHVuZGVybGF5ZXIsIHlvdSBjYW4ganVzdCB1c2UgaXQgYXMgYSBub3JtYWwgTm9kZS5qc1xuICogUmVhZGFibGUgc3RyZWFtLlxuICovXG5jbGFzcyBCbG9iRG93bmxvYWRSZXNwb25zZSB7XG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHRoYXQgdGhlIHNlcnZpY2Ugc3VwcG9ydHNcbiAgICAgKiByZXF1ZXN0cyBmb3IgcGFydGlhbCBmaWxlIGNvbnRlbnQuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgYWNjZXB0UmFuZ2VzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmFjY2VwdFJhbmdlcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBpZiBpdCB3YXMgcHJldmlvdXNseSBzcGVjaWZpZWRcbiAgICAgKiBmb3IgdGhlIGZpbGUuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY2FjaGVDb250cm9sKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNhY2hlQ29udHJvbDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgdmFsdWUgdGhhdCB3YXMgc3BlY2lmaWVkXG4gICAgICogZm9yIHRoZSAneC1tcy1jb250ZW50LWRpc3Bvc2l0aW9uJyBoZWFkZXIgYW5kIHNwZWNpZmllcyBob3cgdG8gcHJvY2VzcyB0aGVcbiAgICAgKiByZXNwb25zZS5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBjb250ZW50RGlzcG9zaXRpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuY29udGVudERpc3Bvc2l0aW9uO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSB0aGF0IHdhcyBzcGVjaWZpZWRcbiAgICAgKiBmb3IgdGhlIENvbnRlbnQtRW5jb2RpbmcgcmVxdWVzdCBoZWFkZXIuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY29udGVudEVuY29kaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNvbnRlbnRFbmNvZGluZztcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgdmFsdWUgdGhhdCB3YXMgc3BlY2lmaWVkXG4gICAgICogZm9yIHRoZSBDb250ZW50LUxhbmd1YWdlIHJlcXVlc3QgaGVhZGVyLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNvbnRlbnRMYW5ndWFnZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5jb250ZW50TGFuZ3VhZ2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IHNlcXVlbmNlIG51bWJlciBmb3IgYVxuICAgICAqIHBhZ2UgYmxvYi4gVGhpcyBoZWFkZXIgaXMgbm90IHJldHVybmVkIGZvciBibG9jayBibG9icyBvciBhcHBlbmQgYmxvYnMuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgYmxvYlNlcXVlbmNlTnVtYmVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmJsb2JTZXF1ZW5jZU51bWJlcjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGJsb2IncyB0eXBlLiBQb3NzaWJsZSB2YWx1ZXMgaW5jbHVkZTpcbiAgICAgKiAnQmxvY2tCbG9iJywgJ1BhZ2VCbG9iJywgJ0FwcGVuZEJsb2InLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGJsb2JUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmJsb2JUeXBlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIHByZXNlbnQgaW4gdGhlXG4gICAgICogcmVzcG9uc2UgYm9keS5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBjb250ZW50TGVuZ3RoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNvbnRlbnRMZW5ndGg7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElmIHRoZSBmaWxlIGhhcyBhbiBNRDUgaGFzaCBhbmQgdGhlXG4gICAgICogcmVxdWVzdCBpcyB0byByZWFkIHRoZSBmdWxsIGZpbGUsIHRoaXMgcmVzcG9uc2UgaGVhZGVyIGlzIHJldHVybmVkIHNvIHRoYXRcbiAgICAgKiB0aGUgY2xpZW50IGNhbiBjaGVjayBmb3IgbWVzc2FnZSBjb250ZW50IGludGVncml0eS4gSWYgdGhlIHJlcXVlc3QgaXMgdG9cbiAgICAgKiByZWFkIGEgc3BlY2lmaWVkIHJhbmdlIGFuZCB0aGUgJ3gtbXMtcmFuZ2UtZ2V0LWNvbnRlbnQtbWQ1JyBpcyBzZXQgdG9cbiAgICAgKiB0cnVlLCB0aGVuIHRoZSByZXF1ZXN0IHJldHVybnMgYW4gTUQ1IGhhc2ggZm9yIHRoZSByYW5nZSwgYXMgbG9uZyBhcyB0aGVcbiAgICAgKiByYW5nZSBzaXplIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byA0IE1CLiBJZiBuZWl0aGVyIG9mIHRoZXNlIHNldHMgb2ZcbiAgICAgKiBjb25kaXRpb25zIGlzIHRydWUsIHRoZW4gbm8gdmFsdWUgaXMgcmV0dXJuZWQgZm9yIHRoZSAnQ29udGVudC1NRDUnXG4gICAgICogaGVhZGVyLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNvbnRlbnRNRDUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuY29udGVudE1ENTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHRoZSByYW5nZSBvZiBieXRlcyByZXR1cm5lZCBpZlxuICAgICAqIHRoZSBjbGllbnQgcmVxdWVzdGVkIGEgc3Vic2V0IG9mIHRoZSBmaWxlIGJ5IHNldHRpbmcgdGhlIFJhbmdlIHJlcXVlc3RcbiAgICAgKiBoZWFkZXIuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY29udGVudFJhbmdlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNvbnRlbnRSYW5nZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGNvbnRlbnQgdHlwZSBzcGVjaWZpZWQgZm9yIHRoZSBmaWxlLlxuICAgICAqIFRoZSBkZWZhdWx0IGNvbnRlbnQgdHlwZSBpcyAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJ1xuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNvbnRlbnRUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNvbnRlbnRUeXBlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb25jbHVzaW9uIHRpbWUgb2YgdGhlIGxhc3QgYXR0ZW1wdGVkXG4gICAgICogQ29weSBGaWxlIG9wZXJhdGlvbiB3aGVyZSB0aGlzIGZpbGUgd2FzIHRoZSBkZXN0aW5hdGlvbiBmaWxlLiBUaGlzIHZhbHVlXG4gICAgICogY2FuIHNwZWNpZnkgdGhlIHRpbWUgb2YgYSBjb21wbGV0ZWQsIGFib3J0ZWQsIG9yIGZhaWxlZCBjb3B5IGF0dGVtcHQuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY29weUNvbXBsZXRlZE9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNvcHlDb21wbGV0ZWRPbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3RyaW5nIGlkZW50aWZpZXIgZm9yIHRoZSBsYXN0IGF0dGVtcHRlZCBDb3B5XG4gICAgICogRmlsZSBvcGVyYXRpb24gd2hlcmUgdGhpcyBmaWxlIHdhcyB0aGUgZGVzdGluYXRpb24gZmlsZS5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBjb3B5SWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuY29weUlkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb250YWlucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCBhbmRcbiAgICAgKiB0aGUgdG90YWwgYnl0ZXMgaW4gdGhlIHNvdXJjZSBpbiB0aGUgbGFzdCBhdHRlbXB0ZWQgQ29weSBGaWxlIG9wZXJhdGlvblxuICAgICAqIHdoZXJlIHRoaXMgZmlsZSB3YXMgdGhlIGRlc3RpbmF0aW9uIGZpbGUuIENhbiBzaG93IGJldHdlZW4gMCBhbmRcbiAgICAgKiBDb250ZW50LUxlbmd0aCBieXRlcyBjb3BpZWQuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY29weVByb2dyZXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNvcHlQcm9ncmVzcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogVVJMIHVwIHRvIDJLQiBpbiBsZW5ndGggdGhhdCBzcGVjaWZpZXMgdGhlXG4gICAgICogc291cmNlIGZpbGUgdXNlZCBpbiB0aGUgbGFzdCBhdHRlbXB0ZWQgQ29weSBGaWxlIG9wZXJhdGlvbiB3aGVyZSB0aGlzIGZpbGVcbiAgICAgKiB3YXMgdGhlIGRlc3RpbmF0aW9uIGZpbGUuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY29weVNvdXJjZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5jb3B5U291cmNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTdGF0ZSBvZiB0aGUgY29weSBvcGVyYXRpb25cbiAgICAgKiBpZGVudGlmaWVkIGJ5ICd4LW1zLWNvcHktaWQnLiBQb3NzaWJsZSB2YWx1ZXMgaW5jbHVkZTogJ3BlbmRpbmcnLFxuICAgICAqICdzdWNjZXNzJywgJ2Fib3J0ZWQnLCAnZmFpbGVkJ1xuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNvcHlTdGF0dXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuY29weVN0YXR1cztcbiAgICB9XG4gICAgLyoqXG4gICAgICogT25seSBhcHBlYXJzIHdoZW5cbiAgICAgKiB4LW1zLWNvcHktc3RhdHVzIGlzIGZhaWxlZCBvciBwZW5kaW5nLiBEZXNjcmliZXMgY2F1c2Ugb2YgZmF0YWwgb3JcbiAgICAgKiBub24tZmF0YWwgY29weSBvcGVyYXRpb24gZmFpbHVyZS5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBjb3B5U3RhdHVzRGVzY3JpcHRpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuY29weVN0YXR1c0Rlc2NyaXB0aW9uO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXaGVuIGEgYmxvYiBpcyBsZWFzZWQsXG4gICAgICogc3BlY2lmaWVzIHdoZXRoZXIgdGhlIGxlYXNlIGlzIG9mIGluZmluaXRlIG9yIGZpeGVkIGR1cmF0aW9uLiBQb3NzaWJsZVxuICAgICAqIHZhbHVlcyBpbmNsdWRlOiAnaW5maW5pdGUnLCAnZml4ZWQnLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGxlYXNlRHVyYXRpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UubGVhc2VEdXJhdGlvbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTGVhc2Ugc3RhdGUgb2YgdGhlIGJsb2IuIFBvc3NpYmxlXG4gICAgICogdmFsdWVzIGluY2x1ZGU6ICdhdmFpbGFibGUnLCAnbGVhc2VkJywgJ2V4cGlyZWQnLCAnYnJlYWtpbmcnLCAnYnJva2VuJy5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBsZWFzZVN0YXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmxlYXNlU3RhdGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IGxlYXNlIHN0YXR1cyBvZiB0aGVcbiAgICAgKiBibG9iLiBQb3NzaWJsZSB2YWx1ZXMgaW5jbHVkZTogJ2xvY2tlZCcsICd1bmxvY2tlZCcuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgbGVhc2VTdGF0dXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UubGVhc2VTdGF0dXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEEgVVRDIGRhdGUvdGltZSB2YWx1ZSBnZW5lcmF0ZWQgYnkgdGhlIHNlcnZpY2UgdGhhdFxuICAgICAqIGluZGljYXRlcyB0aGUgdGltZSBhdCB3aGljaCB0aGUgcmVzcG9uc2Ugd2FzIGluaXRpYXRlZC5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBkYXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmRhdGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2YgY29tbWl0dGVkIGJsb2Nrc1xuICAgICAqIHByZXNlbnQgaW4gdGhlIGJsb2IuIFRoaXMgaGVhZGVyIGlzIHJldHVybmVkIG9ubHkgZm9yIGFwcGVuZCBibG9icy5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBibG9iQ29tbWl0dGVkQmxvY2tDb3VudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5ibG9iQ29tbWl0dGVkQmxvY2tDb3VudDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIEVUYWcgY29udGFpbnMgYSB2YWx1ZSB0aGF0IHlvdSBjYW4gdXNlIHRvXG4gICAgICogcGVyZm9ybSBvcGVyYXRpb25zIGNvbmRpdGlvbmFsbHksIGluIHF1b3Rlcy5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBldGFnKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmV0YWc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2YgdGFncyBhc3NvY2lhdGVkIHdpdGggdGhlIGJsb2JcbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCB0YWdDb3VudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS50YWdDb3VudDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGVycm9yIGNvZGUuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgZXJyb3JDb2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmVycm9yQ29kZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIHZhbHVlIG9mIHRoaXMgaGVhZGVyIGlzIHNldCB0b1xuICAgICAqIHRydWUgaWYgdGhlIGZpbGUgZGF0YSBhbmQgYXBwbGljYXRpb24gbWV0YWRhdGEgYXJlIGNvbXBsZXRlbHkgZW5jcnlwdGVkXG4gICAgICogdXNpbmcgdGhlIHNwZWNpZmllZCBhbGdvcml0aG0uIE90aGVyd2lzZSwgdGhlIHZhbHVlIGlzIHNldCB0byBmYWxzZSAod2hlblxuICAgICAqIHRoZSBmaWxlIGlzIHVuZW5jcnlwdGVkLCBvciBpZiBvbmx5IHBhcnRzIG9mIHRoZSBmaWxlL2FwcGxpY2F0aW9uIG1ldGFkYXRhXG4gICAgICogYXJlIGVuY3J5cHRlZCkuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgaXNTZXJ2ZXJFbmNyeXB0ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuaXNTZXJ2ZXJFbmNyeXB0ZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElmIHRoZSBibG9iIGhhcyBhIE1ENSBoYXNoLCBhbmQgaWZcbiAgICAgKiByZXF1ZXN0IGNvbnRhaW5zIHJhbmdlIGhlYWRlciAoUmFuZ2Ugb3IgeC1tcy1yYW5nZSksIHRoaXMgcmVzcG9uc2UgaGVhZGVyXG4gICAgICogaXMgcmV0dXJuZWQgd2l0aCB0aGUgdmFsdWUgb2YgdGhlIHdob2xlIGJsb2IncyBNRDUgdmFsdWUuIFRoaXMgdmFsdWUgbWF5XG4gICAgICogb3IgbWF5IG5vdCBiZSBlcXVhbCB0byB0aGUgdmFsdWUgcmV0dXJuZWQgaW4gQ29udGVudC1NRDUgaGVhZGVyLCB3aXRoIHRoZVxuICAgICAqIGxhdHRlciBjYWxjdWxhdGVkIGZyb20gdGhlIHJlcXVlc3RlZCByYW5nZS5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBibG9iQ29udGVudE1ENSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5ibG9iQ29udGVudE1ENTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZGF0ZSBhbmQgdGltZSB0aGUgZmlsZSB3YXMgbGFzdFxuICAgICAqIG1vZGlmaWVkLiBBbnkgb3BlcmF0aW9uIHRoYXQgbW9kaWZpZXMgdGhlIGZpbGUgb3IgaXRzIHByb3BlcnRpZXMgdXBkYXRlc1xuICAgICAqIHRoZSBsYXN0IG1vZGlmaWVkIHRpbWUuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgbGFzdE1vZGlmaWVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmxhc3RNb2RpZmllZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgVVRDIGRhdGUgYW5kIHRpbWUgZ2VuZXJhdGVkIGJ5IHRoZSBzZXJ2aWNlIHRoYXQgaW5kaWNhdGVzIHRoZSB0aW1lIGF0IHdoaWNoIHRoZSBibG9iIHdhc1xuICAgICAqIGxhc3QgcmVhZCBvciB3cml0dGVuIHRvLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGxhc3RBY2Nlc3NlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5sYXN0QWNjZXNzZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGRhdGUgYW5kIHRpbWUgdGhlIGJsb2Igd2FzIGNyZWF0ZWQuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY3JlYXRlZE9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNyZWF0ZWRPbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQSBuYW1lLXZhbHVlIHBhaXJcbiAgICAgKiB0byBhc3NvY2lhdGUgd2l0aCBhIGZpbGUgc3RvcmFnZSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgbWV0YWRhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UubWV0YWRhdGE7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoaXMgaGVhZGVyIHVuaXF1ZWx5IGlkZW50aWZpZXMgdGhlIHJlcXVlc3RcbiAgICAgKiB0aGF0IHdhcyBtYWRlIGFuZCBjYW4gYmUgdXNlZCBmb3IgdHJvdWJsZXNob290aW5nIHRoZSByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IHJlcXVlc3RJZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5yZXF1ZXN0SWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElmIGEgY2xpZW50IHJlcXVlc3QgaWQgaGVhZGVyIGlzIHNlbnQgaW4gdGhlIHJlcXVlc3QsIHRoaXMgaGVhZGVyIHdpbGwgYmUgcHJlc2VudCBpbiB0aGVcbiAgICAgKiByZXNwb25zZSB3aXRoIHRoZSBzYW1lIHZhbHVlLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNsaWVudFJlcXVlc3RJZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5jbGllbnRSZXF1ZXN0SWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB0aGUgdmVyc2lvbiBvZiB0aGUgQmxvYiBzZXJ2aWNlIHVzZWRcbiAgICAgKiB0byBleGVjdXRlIHRoZSByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IHZlcnNpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UudmVyc2lvbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHRoZSB2ZXJzaW9uSWQgb2YgdGhlIGRvd25sb2FkZWQgYmxvYiB2ZXJzaW9uLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IHZlcnNpb25JZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS52ZXJzaW9uSWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHZlcnNpb24gb2YgdGhpcyBibG9iIGlzIGEgY3VycmVudCB2ZXJzaW9uLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGlzQ3VycmVudFZlcnNpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuaXNDdXJyZW50VmVyc2lvbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIFNIQS0yNTYgaGFzaCBvZiB0aGUgZW5jcnlwdGlvbiBrZXkgdXNlZCB0byBlbmNyeXB0IHRoZSBibG9iLiBUaGlzIHZhbHVlIGlzIG9ubHkgcmV0dXJuZWRcbiAgICAgKiB3aGVuIHRoZSBibG9iIHdhcyBlbmNyeXB0ZWQgd2l0aCBhIGN1c3RvbWVyLXByb3ZpZGVkIGtleS5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBlbmNyeXB0aW9uS2V5U2hhMjU2KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmVuY3J5cHRpb25LZXlTaGEyNTY7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElmIHRoZSByZXF1ZXN0IGlzIHRvIHJlYWQgYSBzcGVjaWZpZWQgcmFuZ2UgYW5kIHRoZSB4LW1zLXJhbmdlLWdldC1jb250ZW50LWNyYzY0IGlzIHNldCB0b1xuICAgICAqIHRydWUsIHRoZW4gdGhlIHJlcXVlc3QgcmV0dXJucyBhIGNyYzY0IGZvciB0aGUgcmFuZ2UsIGFzIGxvbmcgYXMgdGhlIHJhbmdlIHNpemUgaXMgbGVzcyB0aGFuXG4gICAgICogb3IgZXF1YWwgdG8gNCBNQi4gSWYgYm90aCB4LW1zLXJhbmdlLWdldC1jb250ZW50LWNyYzY0ICYgeC1tcy1yYW5nZS1nZXQtY29udGVudC1tZDUgaXNcbiAgICAgKiBzcGVjaWZpZWQgaW4gdGhlIHNhbWUgcmVxdWVzdCwgaXQgd2lsbCBmYWlsIHdpdGggNDAwKEJhZCBSZXF1ZXN0KVxuICAgICAqL1xuICAgIGdldCBjb250ZW50Q3JjNjQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuY29udGVudENyYzY0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBPYmplY3QgUmVwbGljYXRpb24gUG9saWN5IElkIG9mIHRoZSBkZXN0aW5hdGlvbiBibG9iLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IG9iamVjdFJlcGxpY2F0aW9uRGVzdGluYXRpb25Qb2xpY3lJZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5vYmplY3RSZXBsaWNhdGlvbkRlc3RpbmF0aW9uUG9saWN5SWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFBhcnNlZCBPYmplY3QgUmVwbGljYXRpb24gUG9saWN5IElkLCBSdWxlIElkKHMpIGFuZCBzdGF0dXMgb2YgdGhlIHNvdXJjZSBibG9iLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IG9iamVjdFJlcGxpY2F0aW9uU291cmNlUHJvcGVydGllcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5vYmplY3RSZXBsaWNhdGlvblNvdXJjZVByb3BlcnRpZXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElmIHRoaXMgYmxvYiBoYXMgYmVlbiBzZWFsZWQuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgaXNTZWFsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuaXNTZWFsZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFVUQyBkYXRlL3RpbWUgdmFsdWUgZ2VuZXJhdGVkIGJ5IHRoZSBzZXJ2aWNlIHRoYXQgaW5kaWNhdGVzIHRoZSB0aW1lIGF0IHdoaWNoIHRoZSBibG9iIGltbXV0YWJpbGl0eSBwb2xpY3kgd2lsbCBleHBpcmUuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgaW1tdXRhYmlsaXR5UG9saWN5RXhwaXJlc09uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmltbXV0YWJpbGl0eVBvbGljeUV4cGlyZXNPbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIGltbXV0YWJpbGl0eSBwb2xpY3kgbW9kZS5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBpbW11dGFiaWxpdHlQb2xpY3lNb2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmltbXV0YWJpbGl0eVBvbGljeU1vZGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyBpZiBhIGxlZ2FsIGhvbGQgaXMgcHJlc2VudCBvbiB0aGUgYmxvYi5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBsZWdhbEhvbGQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UubGVnYWxIb2xkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzcG9uc2UgYm9keSBhcyBhIGJyb3dzZXIgQmxvYi5cbiAgICAgKiBBbHdheXMgdW5kZWZpbmVkIGluIG5vZGUuanMuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY29udGVudEFzQmxvYigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5ibG9iQm9keTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIHJlc3BvbnNlIGJvZHkgYXMgYSBub2RlLmpzIFJlYWRhYmxlIHN0cmVhbS5cbiAgICAgKiBBbHdheXMgdW5kZWZpbmVkIGluIHRoZSBicm93c2VyLlxuICAgICAqXG4gICAgICogSXQgd2lsbCBhdXRvbWF0aWNhbGx5IHJldHJ5IHdoZW4gaW50ZXJuYWwgcmVhZCBzdHJlYW0gdW5leHBlY3RlZCBlbmRzLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IHJlYWRhYmxlU3RyZWFtQm9keSgpIHtcbiAgICAgICAgcmV0dXJuIGNvcmVVdGlsLmlzTm9kZSA/IHRoaXMuYmxvYkRvd25sb2FkU3RyZWFtIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgSFRUUCByZXNwb25zZS5cbiAgICAgKi9cbiAgICBnZXQgX3Jlc3BvbnNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLl9yZXNwb25zZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBCbG9iRG93bmxvYWRSZXNwb25zZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcmlnaW5hbFJlc3BvbnNlIC1cbiAgICAgKiBAcGFyYW0gZ2V0dGVyIC1cbiAgICAgKiBAcGFyYW0gb2Zmc2V0IC1cbiAgICAgKiBAcGFyYW0gY291bnQgLVxuICAgICAqIEBwYXJhbSBvcHRpb25zIC1cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihvcmlnaW5hbFJlc3BvbnNlLCBnZXR0ZXIsIG9mZnNldCwgY291bnQsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICB0aGlzLm9yaWdpbmFsUmVzcG9uc2UgPSBvcmlnaW5hbFJlc3BvbnNlO1xuICAgICAgICB0aGlzLmJsb2JEb3dubG9hZFN0cmVhbSA9IG5ldyBSZXRyaWFibGVSZWFkYWJsZVN0cmVhbSh0aGlzLm9yaWdpbmFsUmVzcG9uc2UucmVhZGFibGVTdHJlYW1Cb2R5LCBnZXR0ZXIsIG9mZnNldCwgY291bnQsIG9wdGlvbnMpO1xuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5jb25zdCBBVlJPX1NZTkNfTUFSS0VSX1NJWkUgPSAxNjtcbmNvbnN0IEFWUk9fSU5JVF9CWVRFUyA9IG5ldyBVaW50OEFycmF5KFs3OSwgOTgsIDEwNiwgMV0pO1xuY29uc3QgQVZST19DT0RFQ19LRVkgPSBcImF2cm8uY29kZWNcIjtcbmNvbnN0IEFWUk9fU0NIRU1BX0tFWSA9IFwiYXZyby5zY2hlbWFcIjtcblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5jbGFzcyBBdnJvUGFyc2VyIHtcbiAgICAvKipcbiAgICAgKiBSZWFkcyBhIGZpeGVkIG51bWJlciBvZiBieXRlcyBmcm9tIHRoZSBzdHJlYW0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc3RyZWFtIC1cbiAgICAgKiBAcGFyYW0gbGVuZ3RoIC1cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtXG4gICAgICovXG4gICAgc3RhdGljIGFzeW5jIHJlYWRGaXhlZEJ5dGVzKHN0cmVhbSwgbGVuZ3RoLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgYnl0ZXMgPSBhd2FpdCBzdHJlYW0ucmVhZChsZW5ndGgsIHsgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwgfSk7XG4gICAgICAgIGlmIChieXRlcy5sZW5ndGggIT09IGxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSGl0IHN0cmVhbSBlbmQuXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBieXRlcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVhZHMgYSBzaW5nbGUgYnl0ZSBmcm9tIHRoZSBzdHJlYW0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc3RyZWFtIC1cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtXG4gICAgICovXG4gICAgc3RhdGljIGFzeW5jIHJlYWRCeXRlKHN0cmVhbSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IGJ1ZiA9IGF3YWl0IEF2cm9QYXJzZXIucmVhZEZpeGVkQnl0ZXMoc3RyZWFtLCAxLCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIGJ1ZlswXTtcbiAgICB9XG4gICAgLy8gaW50IGFuZCBsb25nIGFyZSBzdG9yZWQgaW4gdmFyaWFibGUtbGVuZ3RoIHppZy16YWcgY29kaW5nLlxuICAgIC8vIHZhcmlhYmxlLWxlbmd0aDogaHR0cHM6Ly9sdWNlbmUuYXBhY2hlLm9yZy9jb3JlLzNfNV8wL2ZpbGVmb3JtYXRzLmh0bWwjVkludFxuICAgIC8vIHppZy16YWc6IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvZG9jcy9lbmNvZGluZz9jc3c9MSN0eXBlc1xuICAgIHN0YXRpYyBhc3luYyByZWFkWmlnWmFnTG9uZyhzdHJlYW0sIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBsZXQgemlnWmFnRW5jb2RlZCA9IDA7XG4gICAgICAgIGxldCBzaWduaWZpY2FuY2VJbkJpdCA9IDA7XG4gICAgICAgIGxldCBieXRlLCBoYXZlTW9yZUJ5dGUsIHNpZ25pZmljYW5jZUluRmxvYXQ7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGJ5dGUgPSBhd2FpdCBBdnJvUGFyc2VyLnJlYWRCeXRlKHN0cmVhbSwgb3B0aW9ucyk7XG4gICAgICAgICAgICBoYXZlTW9yZUJ5dGUgPSBieXRlICYgMHg4MDtcbiAgICAgICAgICAgIHppZ1phZ0VuY29kZWQgfD0gKGJ5dGUgJiAweDdmKSA8PCBzaWduaWZpY2FuY2VJbkJpdDtcbiAgICAgICAgICAgIHNpZ25pZmljYW5jZUluQml0ICs9IDc7XG4gICAgICAgIH0gd2hpbGUgKGhhdmVNb3JlQnl0ZSAmJiBzaWduaWZpY2FuY2VJbkJpdCA8IDI4KTsgLy8gYml0d2lzZSBvcGVyYXRpb24gb25seSB3b3JrcyBmb3IgMzItYml0IGludGVnZXJzXG4gICAgICAgIGlmIChoYXZlTW9yZUJ5dGUpIHtcbiAgICAgICAgICAgIC8vIFN3aXRjaCB0byBmbG9hdCBhcml0aG1ldGljXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1hc3NpZ25cbiAgICAgICAgICAgIHppZ1phZ0VuY29kZWQgPSB6aWdaYWdFbmNvZGVkO1xuICAgICAgICAgICAgc2lnbmlmaWNhbmNlSW5GbG9hdCA9IDI2ODQzNTQ1NjsgLy8gMiAqKiAyOC5cbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICBieXRlID0gYXdhaXQgQXZyb1BhcnNlci5yZWFkQnl0ZShzdHJlYW0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIHppZ1phZ0VuY29kZWQgKz0gKGJ5dGUgJiAweDdmKSAqIHNpZ25pZmljYW5jZUluRmxvYXQ7XG4gICAgICAgICAgICAgICAgc2lnbmlmaWNhbmNlSW5GbG9hdCAqPSAxMjg7IC8vIDIgKiogN1xuICAgICAgICAgICAgfSB3aGlsZSAoYnl0ZSAmIDB4ODApO1xuICAgICAgICAgICAgY29uc3QgcmVzID0gKHppZ1phZ0VuY29kZWQgJSAyID8gLSh6aWdaYWdFbmNvZGVkICsgMSkgOiB6aWdaYWdFbmNvZGVkKSAvIDI7XG4gICAgICAgICAgICBpZiAocmVzIDwgTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIgfHwgcmVzID4gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnRlZ2VyIG92ZXJmbG93LlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICh6aWdaYWdFbmNvZGVkID4+IDEpIF4gLSh6aWdaYWdFbmNvZGVkICYgMSk7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyByZWFkTG9uZyhzdHJlYW0sIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gQXZyb1BhcnNlci5yZWFkWmlnWmFnTG9uZyhzdHJlYW0sIG9wdGlvbnMpO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgcmVhZEludChzdHJlYW0sIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gQXZyb1BhcnNlci5yZWFkWmlnWmFnTG9uZyhzdHJlYW0sIG9wdGlvbnMpO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgcmVhZE51bGwoKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgcmVhZEJvb2xlYW4oc3RyZWFtLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgYiA9IGF3YWl0IEF2cm9QYXJzZXIucmVhZEJ5dGUoc3RyZWFtLCBvcHRpb25zKTtcbiAgICAgICAgaWYgKGIgPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGIgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJ5dGUgd2FzIG5vdCBhIGJvb2xlYW4uXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyByZWFkRmxvYXQoc3RyZWFtLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgdThhcnIgPSBhd2FpdCBBdnJvUGFyc2VyLnJlYWRGaXhlZEJ5dGVzKHN0cmVhbSwgNCwgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHZpZXcgPSBuZXcgRGF0YVZpZXcodThhcnIuYnVmZmVyLCB1OGFyci5ieXRlT2Zmc2V0LCB1OGFyci5ieXRlTGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIHZpZXcuZ2V0RmxvYXQzMigwLCB0cnVlKTsgLy8gbGl0dGxlRW5kaWFuID0gdHJ1ZVxuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgcmVhZERvdWJsZShzdHJlYW0sIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCB1OGFyciA9IGF3YWl0IEF2cm9QYXJzZXIucmVhZEZpeGVkQnl0ZXMoc3RyZWFtLCA4LCBvcHRpb25zKTtcbiAgICAgICAgY29uc3QgdmlldyA9IG5ldyBEYXRhVmlldyh1OGFyci5idWZmZXIsIHU4YXJyLmJ5dGVPZmZzZXQsIHU4YXJyLmJ5dGVMZW5ndGgpO1xuICAgICAgICByZXR1cm4gdmlldy5nZXRGbG9hdDY0KDAsIHRydWUpOyAvLyBsaXR0bGVFbmRpYW4gPSB0cnVlXG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyByZWFkQnl0ZXMoc3RyZWFtLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IGF3YWl0IEF2cm9QYXJzZXIucmVhZExvbmcoc3RyZWFtLCBvcHRpb25zKTtcbiAgICAgICAgaWYgKHNpemUgPCAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCeXRlcyBzaXplIHdhcyBuZWdhdGl2ZS5cIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0cmVhbS5yZWFkKHNpemUsIHsgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwgfSk7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyByZWFkU3RyaW5nKHN0cmVhbSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHU4YXJyID0gYXdhaXQgQXZyb1BhcnNlci5yZWFkQnl0ZXMoc3RyZWFtLCBvcHRpb25zKTtcbiAgICAgICAgY29uc3QgdXRmOGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKTtcbiAgICAgICAgcmV0dXJuIHV0ZjhkZWNvZGVyLmRlY29kZSh1OGFycik7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyByZWFkTWFwUGFpcihzdHJlYW0sIHJlYWRJdGVtTWV0aG9kLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3Qga2V5ID0gYXdhaXQgQXZyb1BhcnNlci5yZWFkU3RyaW5nKHN0cmVhbSwgb3B0aW9ucyk7XG4gICAgICAgIC8vIEZVVFVSRTogdGhpcyB3b24ndCB3b3JrIHdpdGggcmVhZEZpeGVkIChjdXJyZW50bHkgbm90IHN1cHBvcnRlZCkgd2hpY2ggbmVlZHMgYSBsZW5ndGggYXMgdGhlIHBhcmFtZXRlci5cbiAgICAgICAgY29uc3QgdmFsdWUgPSBhd2FpdCByZWFkSXRlbU1ldGhvZChzdHJlYW0sIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4geyBrZXksIHZhbHVlIH07XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyByZWFkTWFwKHN0cmVhbSwgcmVhZEl0ZW1NZXRob2QsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCByZWFkUGFpck1ldGhvZCA9IChzLCBvcHRzID0ge30pID0+IHtcbiAgICAgICAgICAgIHJldHVybiBBdnJvUGFyc2VyLnJlYWRNYXBQYWlyKHMsIHJlYWRJdGVtTWV0aG9kLCBvcHRzKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcGFpcnMgPSBhd2FpdCBBdnJvUGFyc2VyLnJlYWRBcnJheShzdHJlYW0sIHJlYWRQYWlyTWV0aG9kLCBvcHRpb25zKTtcbiAgICAgICAgY29uc3QgZGljdCA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IHBhaXIgb2YgcGFpcnMpIHtcbiAgICAgICAgICAgIGRpY3RbcGFpci5rZXldID0gcGFpci52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGljdDtcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIHJlYWRBcnJheShzdHJlYW0sIHJlYWRJdGVtTWV0aG9kLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgaXRlbXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgY291bnQgPSBhd2FpdCBBdnJvUGFyc2VyLnJlYWRMb25nKHN0cmVhbSwgb3B0aW9ucyk7IGNvdW50ICE9PSAwOyBjb3VudCA9IGF3YWl0IEF2cm9QYXJzZXIucmVhZExvbmcoc3RyZWFtLCBvcHRpb25zKSkge1xuICAgICAgICAgICAgaWYgKGNvdW50IDwgMCkge1xuICAgICAgICAgICAgICAgIC8vIElnbm9yZSBibG9jayBzaXplc1xuICAgICAgICAgICAgICAgIGF3YWl0IEF2cm9QYXJzZXIucmVhZExvbmcoc3RyZWFtLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICBjb3VudCA9IC1jb3VudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdoaWxlIChjb3VudC0tKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IGF3YWl0IHJlYWRJdGVtTWV0aG9kKHN0cmVhbSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgaXRlbXMucHVzaChpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgfVxufVxudmFyIEF2cm9Db21wbGV4O1xuKGZ1bmN0aW9uIChBdnJvQ29tcGxleCkge1xuICAgIEF2cm9Db21wbGV4W1wiUkVDT1JEXCJdID0gXCJyZWNvcmRcIjtcbiAgICBBdnJvQ29tcGxleFtcIkVOVU1cIl0gPSBcImVudW1cIjtcbiAgICBBdnJvQ29tcGxleFtcIkFSUkFZXCJdID0gXCJhcnJheVwiO1xuICAgIEF2cm9Db21wbGV4W1wiTUFQXCJdID0gXCJtYXBcIjtcbiAgICBBdnJvQ29tcGxleFtcIlVOSU9OXCJdID0gXCJ1bmlvblwiO1xuICAgIEF2cm9Db21wbGV4W1wiRklYRURcIl0gPSBcImZpeGVkXCI7XG59KShBdnJvQ29tcGxleCB8fCAoQXZyb0NvbXBsZXggPSB7fSkpO1xudmFyIEF2cm9QcmltaXRpdmU7XG4oZnVuY3Rpb24gKEF2cm9QcmltaXRpdmUpIHtcbiAgICBBdnJvUHJpbWl0aXZlW1wiTlVMTFwiXSA9IFwibnVsbFwiO1xuICAgIEF2cm9QcmltaXRpdmVbXCJCT09MRUFOXCJdID0gXCJib29sZWFuXCI7XG4gICAgQXZyb1ByaW1pdGl2ZVtcIklOVFwiXSA9IFwiaW50XCI7XG4gICAgQXZyb1ByaW1pdGl2ZVtcIkxPTkdcIl0gPSBcImxvbmdcIjtcbiAgICBBdnJvUHJpbWl0aXZlW1wiRkxPQVRcIl0gPSBcImZsb2F0XCI7XG4gICAgQXZyb1ByaW1pdGl2ZVtcIkRPVUJMRVwiXSA9IFwiZG91YmxlXCI7XG4gICAgQXZyb1ByaW1pdGl2ZVtcIkJZVEVTXCJdID0gXCJieXRlc1wiO1xuICAgIEF2cm9QcmltaXRpdmVbXCJTVFJJTkdcIl0gPSBcInN0cmluZ1wiO1xufSkoQXZyb1ByaW1pdGl2ZSB8fCAoQXZyb1ByaW1pdGl2ZSA9IHt9KSk7XG5jbGFzcyBBdnJvVHlwZSB7XG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lcyB0aGUgQXZyb1R5cGUgZnJvbSB0aGUgQXZybyBTY2hlbWEuXG4gICAgICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby13cmFwcGVyLW9iamVjdC10eXBlc1xuICAgIHN0YXRpYyBmcm9tU2NoZW1hKHNjaGVtYSkge1xuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIEF2cm9UeXBlLmZyb21TdHJpbmdTY2hlbWEoc2NoZW1hKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHNjaGVtYSkpIHtcbiAgICAgICAgICAgIHJldHVybiBBdnJvVHlwZS5mcm9tQXJyYXlTY2hlbWEoc2NoZW1hKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBBdnJvVHlwZS5mcm9tT2JqZWN0U2NoZW1hKHNjaGVtYSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGZyb21TdHJpbmdTY2hlbWEoc2NoZW1hKSB7XG4gICAgICAgIHN3aXRjaCAoc2NoZW1hKSB7XG4gICAgICAgICAgICBjYXNlIEF2cm9QcmltaXRpdmUuTlVMTDpcbiAgICAgICAgICAgIGNhc2UgQXZyb1ByaW1pdGl2ZS5CT09MRUFOOlxuICAgICAgICAgICAgY2FzZSBBdnJvUHJpbWl0aXZlLklOVDpcbiAgICAgICAgICAgIGNhc2UgQXZyb1ByaW1pdGl2ZS5MT05HOlxuICAgICAgICAgICAgY2FzZSBBdnJvUHJpbWl0aXZlLkZMT0FUOlxuICAgICAgICAgICAgY2FzZSBBdnJvUHJpbWl0aXZlLkRPVUJMRTpcbiAgICAgICAgICAgIGNhc2UgQXZyb1ByaW1pdGl2ZS5CWVRFUzpcbiAgICAgICAgICAgIGNhc2UgQXZyb1ByaW1pdGl2ZS5TVFJJTkc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBdnJvUHJpbWl0aXZlVHlwZShzY2hlbWEpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgQXZybyB0eXBlICR7c2NoZW1hfWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBmcm9tQXJyYXlTY2hlbWEoc2NoZW1hKSB7XG4gICAgICAgIHJldHVybiBuZXcgQXZyb1VuaW9uVHlwZShzY2hlbWEubWFwKEF2cm9UeXBlLmZyb21TY2hlbWEpKTtcbiAgICB9XG4gICAgc3RhdGljIGZyb21PYmplY3RTY2hlbWEoc2NoZW1hKSB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSBzY2hlbWEudHlwZTtcbiAgICAgICAgLy8gUHJpbWl0aXZlcyBjYW4gYmUgZGVmaW5lZCBhcyBzdHJpbmdzIG9yIG9iamVjdHNcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBBdnJvVHlwZS5mcm9tU3RyaW5nU2NoZW1hKHR5cGUpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChfYSkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSBBdnJvQ29tcGxleC5SRUNPUkQ6XG4gICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5hbGlhc2VzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgYWxpYXNlcyBjdXJyZW50bHkgaXMgbm90IHN1cHBvcnRlZCwgc2NoZW1hOiAke3NjaGVtYX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFzY2hlbWEubmFtZSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFJlcXVpcmVkIGF0dHJpYnV0ZSAnbmFtZScgZG9lc24ndCBleGlzdCBvbiBzY2hlbWE6ICR7c2NoZW1hfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY2FzZS1kZWNsYXJhdGlvbnNcbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZHMgPSB7fTtcbiAgICAgICAgICAgICAgICBpZiAoIXNjaGVtYS5maWVsZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBSZXF1aXJlZCBhdHRyaWJ1dGUgJ2ZpZWxkcycgZG9lc24ndCBleGlzdCBvbiBzY2hlbWE6ICR7c2NoZW1hfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIHNjaGVtYS5maWVsZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGRzW2ZpZWxkLm5hbWVdID0gQXZyb1R5cGUuZnJvbVNjaGVtYShmaWVsZC50eXBlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBdnJvUmVjb3JkVHlwZShmaWVsZHMsIHNjaGVtYS5uYW1lKTtcbiAgICAgICAgICAgIGNhc2UgQXZyb0NvbXBsZXguRU5VTTpcbiAgICAgICAgICAgICAgICBpZiAoc2NoZW1hLmFsaWFzZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBhbGlhc2VzIGN1cnJlbnRseSBpcyBub3Qgc3VwcG9ydGVkLCBzY2hlbWE6ICR7c2NoZW1hfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXNjaGVtYS5zeW1ib2xzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUmVxdWlyZWQgYXR0cmlidXRlICdzeW1ib2xzJyBkb2Vzbid0IGV4aXN0IG9uIHNjaGVtYTogJHtzY2hlbWF9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQXZyb0VudW1UeXBlKHNjaGVtYS5zeW1ib2xzKTtcbiAgICAgICAgICAgIGNhc2UgQXZyb0NvbXBsZXguTUFQOlxuICAgICAgICAgICAgICAgIGlmICghc2NoZW1hLnZhbHVlcykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFJlcXVpcmVkIGF0dHJpYnV0ZSAndmFsdWVzJyBkb2Vzbid0IGV4aXN0IG9uIHNjaGVtYTogJHtzY2hlbWF9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQXZyb01hcFR5cGUoQXZyb1R5cGUuZnJvbVNjaGVtYShzY2hlbWEudmFsdWVzKSk7XG4gICAgICAgICAgICBjYXNlIEF2cm9Db21wbGV4LkFSUkFZOiAvLyBVbnVzZWQgdG9kYXlcbiAgICAgICAgICAgIGNhc2UgQXZyb0NvbXBsZXguRklYRUQ6IC8vIFVudXNlZCB0b2RheVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgQXZybyB0eXBlICR7dHlwZX0gaW4gJHtzY2hlbWF9YCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5jbGFzcyBBdnJvUHJpbWl0aXZlVHlwZSBleHRlbmRzIEF2cm9UeXBlIHtcbiAgICBjb25zdHJ1Y3RvcihwcmltaXRpdmUpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5fcHJpbWl0aXZlID0gcHJpbWl0aXZlO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXdyYXBwZXItb2JqZWN0LXR5cGVzXG4gICAgcmVhZChzdHJlYW0sIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBzd2l0Y2ggKHRoaXMuX3ByaW1pdGl2ZSkge1xuICAgICAgICAgICAgY2FzZSBBdnJvUHJpbWl0aXZlLk5VTEw6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEF2cm9QYXJzZXIucmVhZE51bGwoKTtcbiAgICAgICAgICAgIGNhc2UgQXZyb1ByaW1pdGl2ZS5CT09MRUFOOlxuICAgICAgICAgICAgICAgIHJldHVybiBBdnJvUGFyc2VyLnJlYWRCb29sZWFuKHN0cmVhbSwgb3B0aW9ucyk7XG4gICAgICAgICAgICBjYXNlIEF2cm9QcmltaXRpdmUuSU5UOlxuICAgICAgICAgICAgICAgIHJldHVybiBBdnJvUGFyc2VyLnJlYWRJbnQoc3RyZWFtLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGNhc2UgQXZyb1ByaW1pdGl2ZS5MT05HOlxuICAgICAgICAgICAgICAgIHJldHVybiBBdnJvUGFyc2VyLnJlYWRMb25nKHN0cmVhbSwgb3B0aW9ucyk7XG4gICAgICAgICAgICBjYXNlIEF2cm9QcmltaXRpdmUuRkxPQVQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEF2cm9QYXJzZXIucmVhZEZsb2F0KHN0cmVhbSwgb3B0aW9ucyk7XG4gICAgICAgICAgICBjYXNlIEF2cm9QcmltaXRpdmUuRE9VQkxFOlxuICAgICAgICAgICAgICAgIHJldHVybiBBdnJvUGFyc2VyLnJlYWREb3VibGUoc3RyZWFtLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGNhc2UgQXZyb1ByaW1pdGl2ZS5CWVRFUzpcbiAgICAgICAgICAgICAgICByZXR1cm4gQXZyb1BhcnNlci5yZWFkQnl0ZXMoc3RyZWFtLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGNhc2UgQXZyb1ByaW1pdGl2ZS5TVFJJTkc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEF2cm9QYXJzZXIucmVhZFN0cmluZyhzdHJlYW0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIEF2cm8gUHJpbWl0aXZlXCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuY2xhc3MgQXZyb0VudW1UeXBlIGV4dGVuZHMgQXZyb1R5cGUge1xuICAgIGNvbnN0cnVjdG9yKHN5bWJvbHMpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5fc3ltYm9scyA9IHN5bWJvbHM7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8td3JhcHBlci1vYmplY3QtdHlwZXNcbiAgICBhc3luYyByZWFkKHN0cmVhbSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgQXZyb1BhcnNlci5yZWFkSW50KHN0cmVhbSwgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiB0aGlzLl9zeW1ib2xzW3ZhbHVlXTtcbiAgICB9XG59XG5jbGFzcyBBdnJvVW5pb25UeXBlIGV4dGVuZHMgQXZyb1R5cGUge1xuICAgIGNvbnN0cnVjdG9yKHR5cGVzKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuX3R5cGVzID0gdHlwZXM7XG4gICAgfVxuICAgIGFzeW5jIHJlYWQoc3RyZWFtLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgdHlwZUluZGV4ID0gYXdhaXQgQXZyb1BhcnNlci5yZWFkSW50KHN0cmVhbSwgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiB0aGlzLl90eXBlc1t0eXBlSW5kZXhdLnJlYWQoc3RyZWFtLCBvcHRpb25zKTtcbiAgICB9XG59XG5jbGFzcyBBdnJvTWFwVHlwZSBleHRlbmRzIEF2cm9UeXBlIHtcbiAgICBjb25zdHJ1Y3RvcihpdGVtVHlwZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLl9pdGVtVHlwZSA9IGl0ZW1UeXBlO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXdyYXBwZXItb2JqZWN0LXR5cGVzXG4gICAgcmVhZChzdHJlYW0sIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCByZWFkSXRlbU1ldGhvZCA9IChzLCBvcHRzKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faXRlbVR5cGUucmVhZChzLCBvcHRzKTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIEF2cm9QYXJzZXIucmVhZE1hcChzdHJlYW0sIHJlYWRJdGVtTWV0aG9kLCBvcHRpb25zKTtcbiAgICB9XG59XG5jbGFzcyBBdnJvUmVjb3JkVHlwZSBleHRlbmRzIEF2cm9UeXBlIHtcbiAgICBjb25zdHJ1Y3RvcihmaWVsZHMsIG5hbWUpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5fZmllbGRzID0gZmllbGRzO1xuICAgICAgICB0aGlzLl9uYW1lID0gbmFtZTtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby13cmFwcGVyLW9iamVjdC10eXBlc1xuICAgIGFzeW5jIHJlYWQoc3RyZWFtLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby13cmFwcGVyLW9iamVjdC10eXBlc1xuICAgICAgICBjb25zdCByZWNvcmQgPSB7fTtcbiAgICAgICAgcmVjb3JkW1wiJHNjaGVtYVwiXSA9IHRoaXMuX25hbWU7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuX2ZpZWxkcykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLl9maWVsZHMsIGtleSkpIHtcbiAgICAgICAgICAgICAgICByZWNvcmRba2V5XSA9IGF3YWl0IHRoaXMuX2ZpZWxkc1trZXldLnJlYWQoc3RyZWFtLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVjb3JkO1xuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5mdW5jdGlvbiBhcnJheXNFcXVhbChhLCBiKSB7XG4gICAgaWYgKGEgPT09IGIpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcbiAgICBpZiAoYSA9PSBudWxsIHx8IGIgPT0gbnVsbClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKGFbaV0gIT09IGJbaV0pXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbmNsYXNzIEF2cm9SZWFkZXIge1xuICAgIGdldCBibG9ja09mZnNldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Jsb2NrT2Zmc2V0O1xuICAgIH1cbiAgICBnZXQgb2JqZWN0SW5kZXgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vYmplY3RJbmRleDtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoZGF0YVN0cmVhbSwgaGVhZGVyU3RyZWFtLCBjdXJyZW50QmxvY2tPZmZzZXQsIGluZGV4V2l0aGluQ3VycmVudEJsb2NrKSB7XG4gICAgICAgIHRoaXMuX2RhdGFTdHJlYW0gPSBkYXRhU3RyZWFtO1xuICAgICAgICB0aGlzLl9oZWFkZXJTdHJlYW0gPSBoZWFkZXJTdHJlYW0gfHwgZGF0YVN0cmVhbTtcbiAgICAgICAgdGhpcy5faW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fYmxvY2tPZmZzZXQgPSBjdXJyZW50QmxvY2tPZmZzZXQgfHwgMDtcbiAgICAgICAgdGhpcy5fb2JqZWN0SW5kZXggPSBpbmRleFdpdGhpbkN1cnJlbnRCbG9jayB8fCAwO1xuICAgICAgICB0aGlzLl9pbml0aWFsQmxvY2tPZmZzZXQgPSBjdXJyZW50QmxvY2tPZmZzZXQgfHwgMDtcbiAgICB9XG4gICAgYXN5bmMgaW5pdGlhbGl6ZShvcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgaGVhZGVyID0gYXdhaXQgQXZyb1BhcnNlci5yZWFkRml4ZWRCeXRlcyh0aGlzLl9oZWFkZXJTdHJlYW0sIEFWUk9fSU5JVF9CWVRFUy5sZW5ndGgsIHtcbiAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFhcnJheXNFcXVhbChoZWFkZXIsIEFWUk9fSU5JVF9CWVRFUykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlN0cmVhbSBpcyBub3QgYW4gQXZybyBmaWxlLlwiKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBGaWxlIG1ldGFkYXRhIGlzIHdyaXR0ZW4gYXMgaWYgZGVmaW5lZCBieSB0aGUgZm9sbG93aW5nIG1hcCBzY2hlbWE6XG4gICAgICAgIC8vIHsgXCJ0eXBlXCI6IFwibWFwXCIsIFwidmFsdWVzXCI6IFwiYnl0ZXNcIn1cbiAgICAgICAgdGhpcy5fbWV0YWRhdGEgPSBhd2FpdCBBdnJvUGFyc2VyLnJlYWRNYXAodGhpcy5faGVhZGVyU3RyZWFtLCBBdnJvUGFyc2VyLnJlYWRTdHJpbmcsIHtcbiAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gVmFsaWRhdGUgY29kZWNcbiAgICAgICAgY29uc3QgY29kZWMgPSB0aGlzLl9tZXRhZGF0YVtBVlJPX0NPREVDX0tFWV07XG4gICAgICAgIGlmICghKGNvZGVjID09PSB1bmRlZmluZWQgfHwgY29kZWMgPT09IG51bGwgfHwgY29kZWMgPT09IFwibnVsbFwiKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29kZWNzIGFyZSBub3Qgc3VwcG9ydGVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRoZSAxNi1ieXRlLCByYW5kb21seS1nZW5lcmF0ZWQgc3luYyBtYXJrZXIgZm9yIHRoaXMgZmlsZS5cbiAgICAgICAgdGhpcy5fc3luY01hcmtlciA9IGF3YWl0IEF2cm9QYXJzZXIucmVhZEZpeGVkQnl0ZXModGhpcy5faGVhZGVyU3RyZWFtLCBBVlJPX1NZTkNfTUFSS0VSX1NJWkUsIHtcbiAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gUGFyc2UgdGhlIHNjaGVtYVxuICAgICAgICBjb25zdCBzY2hlbWEgPSBKU09OLnBhcnNlKHRoaXMuX21ldGFkYXRhW0FWUk9fU0NIRU1BX0tFWV0pO1xuICAgICAgICB0aGlzLl9pdGVtVHlwZSA9IEF2cm9UeXBlLmZyb21TY2hlbWEoc2NoZW1hKTtcbiAgICAgICAgaWYgKHRoaXMuX2Jsb2NrT2Zmc2V0ID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLl9ibG9ja09mZnNldCA9IHRoaXMuX2luaXRpYWxCbG9ja09mZnNldCArIHRoaXMuX2RhdGFTdHJlYW0ucG9zaXRpb247XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faXRlbXNSZW1haW5pbmdJbkJsb2NrID0gYXdhaXQgQXZyb1BhcnNlci5yZWFkTG9uZyh0aGlzLl9kYXRhU3RyZWFtLCB7XG4gICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIHNraXAgYmxvY2sgbGVuZ3RoXG4gICAgICAgIGF3YWl0IEF2cm9QYXJzZXIucmVhZExvbmcodGhpcy5fZGF0YVN0cmVhbSwgeyBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCB9KTtcbiAgICAgICAgdGhpcy5faW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy5fb2JqZWN0SW5kZXggJiYgdGhpcy5fb2JqZWN0SW5kZXggPiAwKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX29iamVjdEluZGV4OyBpKyspIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9pdGVtVHlwZS5yZWFkKHRoaXMuX2RhdGFTdHJlYW0sIHsgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5faXRlbXNSZW1haW5pbmdJbkJsb2NrLS07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgaGFzTmV4dCgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLl9pbml0aWFsaXplZCB8fCB0aGlzLl9pdGVtc1JlbWFpbmluZ0luQmxvY2sgPiAwO1xuICAgIH1cbiAgICBwYXJzZU9iamVjdHMoKSB7XG4gICAgICAgIHJldHVybiB0c2xpYi5fX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24qIHBhcnNlT2JqZWN0c18xKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9pbml0aWFsaXplZCkge1xuICAgICAgICAgICAgICAgIHlpZWxkIHRzbGliLl9fYXdhaXQodGhpcy5pbml0aWFsaXplKG9wdGlvbnMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdoaWxlICh0aGlzLmhhc05leHQoKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHlpZWxkIHRzbGliLl9fYXdhaXQodGhpcy5faXRlbVR5cGUucmVhZCh0aGlzLl9kYXRhU3RyZWFtLCB7XG4gICAgICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9pdGVtc1JlbWFpbmluZ0luQmxvY2stLTtcbiAgICAgICAgICAgICAgICB0aGlzLl9vYmplY3RJbmRleCsrO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pdGVtc1JlbWFpbmluZ0luQmxvY2sgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFya2VyID0geWllbGQgdHNsaWIuX19hd2FpdChBdnJvUGFyc2VyLnJlYWRGaXhlZEJ5dGVzKHRoaXMuX2RhdGFTdHJlYW0sIEFWUk9fU1lOQ19NQVJLRVJfU0laRSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYmxvY2tPZmZzZXQgPSB0aGlzLl9pbml0aWFsQmxvY2tPZmZzZXQgKyB0aGlzLl9kYXRhU3RyZWFtLnBvc2l0aW9uO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vYmplY3RJbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGlmICghYXJyYXlzRXF1YWwodGhpcy5fc3luY01hcmtlciwgbWFya2VyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU3RyZWFtIGlzIG5vdCBhIHZhbGlkIEF2cm8gZmlsZS5cIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2l0ZW1zUmVtYWluaW5nSW5CbG9jayA9IHlpZWxkIHRzbGliLl9fYXdhaXQoQXZyb1BhcnNlci5yZWFkTG9uZyh0aGlzLl9kYXRhU3RyZWFtLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBoaXQgdGhlIGVuZCBvZiB0aGUgc3RyZWFtLlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faXRlbXNSZW1haW5pbmdJbkJsb2NrID0gMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5faXRlbXNSZW1haW5pbmdJbkJsb2NrID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWdub3JlIGJsb2NrIHNpemVcbiAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIHRzbGliLl9fYXdhaXQoQXZyb1BhcnNlci5yZWFkTG9uZyh0aGlzLl9kYXRhU3RyZWFtLCB7IGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB5aWVsZCB5aWVsZCB0c2xpYi5fX2F3YWl0KHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5jbGFzcyBBdnJvUmVhZGFibGUge1xufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbmNvbnN0IEFCT1JUX0VSUk9SID0gbmV3IGFib3J0Q29udHJvbGxlci5BYm9ydEVycm9yKFwiUmVhZGluZyBmcm9tIHRoZSBhdnJvIHN0cmVhbSB3YXMgYWJvcnRlZC5cIik7XG5jbGFzcyBBdnJvUmVhZGFibGVGcm9tU3RyZWFtIGV4dGVuZHMgQXZyb1JlYWRhYmxlIHtcbiAgICB0b1VpbnQ4QXJyYXkoZGF0YSkge1xuICAgICAgICBpZiAodHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgY29uc3RydWN0b3IocmVhZGFibGUpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5fcmVhZGFibGUgPSByZWFkYWJsZTtcbiAgICAgICAgdGhpcy5fcG9zaXRpb24gPSAwO1xuICAgIH1cbiAgICBnZXQgcG9zaXRpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wb3NpdGlvbjtcbiAgICB9XG4gICAgYXN5bmMgcmVhZChzaXplLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoKF9hID0gb3B0aW9ucy5hYm9ydFNpZ25hbCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmFib3J0ZWQpIHtcbiAgICAgICAgICAgIHRocm93IEFCT1JUX0VSUk9SO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzaXplIDwgMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBzaXplIHBhcmFtZXRlciBzaG91bGQgYmUgcG9zaXRpdmU6ICR7c2l6ZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLl9yZWFkYWJsZS5yZWFkYWJsZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU3RyZWFtIG5vIGxvbmdlciByZWFkYWJsZS5cIik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU2VlIGlmIHRoZXJlIGlzIGFscmVhZHkgZW5vdWdoIGRhdGEuXG4gICAgICAgIGNvbnN0IGNodW5rID0gdGhpcy5fcmVhZGFibGUucmVhZChzaXplKTtcbiAgICAgICAgaWYgKGNodW5rKSB7XG4gICAgICAgICAgICB0aGlzLl9wb3NpdGlvbiArPSBjaHVuay5sZW5ndGg7XG4gICAgICAgICAgICAvLyBjaHVuay5sZW5ndGggbWF5YmUgbGVzcyB0aGFuIGRlc2lyZWQgc2l6ZSBpZiB0aGUgc3RyZWFtIGVuZHMuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy50b1VpbnQ4QXJyYXkoY2h1bmspO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gcmVnaXN0ZXIgY2FsbGJhY2sgdG8gd2FpdCBmb3IgZW5vdWdoIGRhdGEgdG8gcmVhZFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlLWJlZm9yZS1kZWZpbmUgKi9cbiAgICAgICAgICAgICAgICBjb25zdCBjbGVhblVwID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkYWJsZS5yZW1vdmVMaXN0ZW5lcihcInJlYWRhYmxlXCIsIHJlYWRhYmxlQ2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkYWJsZS5yZW1vdmVMaXN0ZW5lcihcImVycm9yXCIsIHJlamVjdENhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZGFibGUucmVtb3ZlTGlzdGVuZXIoXCJlbmRcIiwgcmVqZWN0Q2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkYWJsZS5yZW1vdmVMaXN0ZW5lcihcImNsb3NlXCIsIHJlamVjdENhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYWJvcnRTaWduYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuYWJvcnRTaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIGFib3J0SGFuZGxlcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlYWRhYmxlQ2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhbGxiYWNrQ2h1bmsgPSB0aGlzLl9yZWFkYWJsZS5yZWFkKHNpemUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2tDaHVuaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcG9zaXRpb24gKz0gY2FsbGJhY2tDaHVuay5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGVhblVwKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjYWxsYmFja0NodW5rLmxlbmd0aCBtYXliZSBsZXNzIHRoYW4gZGVzaXJlZCBzaXplIGlmIHRoZSBzdHJlYW0gZW5kcy5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy50b1VpbnQ4QXJyYXkoY2FsbGJhY2tDaHVuaykpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb25zdCByZWplY3RDYWxsYmFjayA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYW5VcCgpO1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGNvbnN0IGFib3J0SGFuZGxlciA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYW5VcCgpO1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoQUJPUlRfRVJST1IpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVhZGFibGUub24oXCJyZWFkYWJsZVwiLCByZWFkYWJsZUNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWFkYWJsZS5vbmNlKFwiZXJyb3JcIiwgcmVqZWN0Q2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRhYmxlLm9uY2UoXCJlbmRcIiwgcmVqZWN0Q2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRhYmxlLm9uY2UoXCJjbG9zZVwiLCByZWplY3RDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYWJvcnRTaWduYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5hYm9ydFNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgYWJvcnRIYW5kbGVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlLWJlZm9yZS1kZWZpbmUgKi9cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogT05MWSBBVkFJTEFCTEUgSU4gTk9ERS5KUyBSVU5USU1FLlxuICpcbiAqIEEgTm9kZS5qcyBCbG9iUXVpY2tRdWVyeVN0cmVhbSB3aWxsIGludGVybmFsbHkgcGFyc2UgYXZybyBkYXRhIHN0cmVhbSBmb3IgYmxvYiBxdWVyeS5cbiAqL1xuY2xhc3MgQmxvYlF1aWNrUXVlcnlTdHJlYW0gZXh0ZW5kcyBzdHJlYW0uUmVhZGFibGUge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgQmxvYlF1aWNrUXVlcnlTdHJlYW0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc291cmNlIC0gVGhlIGN1cnJlbnQgUmVhZGFibGVTdHJlYW0gcmV0dXJuZWQgZnJvbSBnZXR0ZXJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtXG4gICAgICovXG4gICAgY29uc3RydWN0b3Ioc291cmNlLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5hdnJvUGF1c2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICAgIHRoaXMub25Qcm9ncmVzcyA9IG9wdGlvbnMub25Qcm9ncmVzcztcbiAgICAgICAgdGhpcy5vbkVycm9yID0gb3B0aW9ucy5vbkVycm9yO1xuICAgICAgICB0aGlzLmF2cm9SZWFkZXIgPSBuZXcgQXZyb1JlYWRlcihuZXcgQXZyb1JlYWRhYmxlRnJvbVN0cmVhbSh0aGlzLnNvdXJjZSkpO1xuICAgICAgICB0aGlzLmF2cm9JdGVyID0gdGhpcy5hdnJvUmVhZGVyLnBhcnNlT2JqZWN0cyh7IGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsIH0pO1xuICAgIH1cbiAgICBfcmVhZCgpIHtcbiAgICAgICAgaWYgKHRoaXMuYXZyb1BhdXNlZCkge1xuICAgICAgICAgICAgdGhpcy5yZWFkSW50ZXJuYWwoKS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0KFwiZXJyb3JcIiwgZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIHJlYWRJbnRlcm5hbCgpIHtcbiAgICAgICAgdGhpcy5hdnJvUGF1c2VkID0gZmFsc2U7XG4gICAgICAgIGxldCBhdnJvTmV4dDtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgYXZyb05leHQgPSBhd2FpdCB0aGlzLmF2cm9JdGVyLm5leHQoKTtcbiAgICAgICAgICAgIGlmIChhdnJvTmV4dC5kb25lKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBvYmogPSBhdnJvTmV4dC52YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IHNjaGVtYSA9IG9iai4kc2NoZW1hO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcIk1pc3Npbmcgc2NoZW1hIGluIGF2cm8gcmVjb3JkLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN3aXRjaCAoc2NoZW1hKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcImNvbS5taWNyb3NvZnQuYXp1cmUuc3RvcmFnZS5xdWVyeUJsb2JDb250ZW50cy5yZXN1bHREYXRhXCI6XG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBvYmouZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhIGluc3RhbmNlb2YgVWludDhBcnJheSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcIkludmFsaWQgZGF0YSBpbiBhdnJvIHJlc3VsdCByZWNvcmQuXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnB1c2goQnVmZmVyLmZyb20oZGF0YSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hdnJvUGF1c2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiY29tLm1pY3Jvc29mdC5henVyZS5zdG9yYWdlLnF1ZXJ5QmxvYkNvbnRlbnRzLnByb2dyZXNzXCI6XG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGVzU2Nhbm5lZCA9IG9iai5ieXRlc1NjYW5uZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGJ5dGVzU2Nhbm5lZCAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFwiSW52YWxpZCBieXRlc1NjYW5uZWQgaW4gYXZybyBwcm9ncmVzcyByZWNvcmQuXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub25Qcm9ncmVzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25Qcm9ncmVzcyh7IGxvYWRlZEJ5dGVzOiBieXRlc1NjYW5uZWQgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImNvbS5taWNyb3NvZnQuYXp1cmUuc3RvcmFnZS5xdWVyeUJsb2JDb250ZW50cy5lbmRcIjpcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub25Qcm9ncmVzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdG90YWxCeXRlcyA9IG9iai50b3RhbEJ5dGVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0b3RhbEJ5dGVzICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJJbnZhbGlkIHRvdGFsQnl0ZXMgaW4gYXZybyBlbmQgcmVjb3JkLlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25Qcm9ncmVzcyh7IGxvYWRlZEJ5dGVzOiB0b3RhbEJ5dGVzIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHVzaChudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImNvbS5taWNyb3NvZnQuYXp1cmUuc3RvcmFnZS5xdWVyeUJsb2JDb250ZW50cy5lcnJvclwiOlxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmYXRhbCA9IG9iai5mYXRhbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZmF0YWwgIT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJJbnZhbGlkIGZhdGFsIGluIGF2cm8gZXJyb3IgcmVjb3JkLlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBvYmoubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbmFtZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFwiSW52YWxpZCBuYW1lIGluIGF2cm8gZXJyb3IgcmVjb3JkLlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gb2JqLmRlc2NyaXB0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkZXNjcmlwdGlvbiAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFwiSW52YWxpZCBkZXNjcmlwdGlvbiBpbiBhdnJvIGVycm9yIHJlY29yZC5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IG9iai5wb3NpdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcG9zaXRpb24gIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcIkludmFsaWQgcG9zaXRpb24gaW4gYXZybyBlcnJvciByZWNvcmQuXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkVycm9yKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRmF0YWw6IGZhdGFsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoYFVua25vd24gc2NoZW1hICR7c2NoZW1hfSBpbiBhdnJvIHByb2dyZXNzIHJlY29yZC5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSB3aGlsZSAoIWF2cm9OZXh0LmRvbmUgJiYgIXRoaXMuYXZyb1BhdXNlZCk7XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogT05MWSBBVkFJTEFCTEUgSU4gTk9ERS5KUyBSVU5USU1FLlxuICpcbiAqIEJsb2JRdWVyeVJlc3BvbnNlIGltcGxlbWVudHMgQmxvYkRvd25sb2FkUmVzcG9uc2VNb2RlbCBpbnRlcmZhY2UsIGFuZCBpbiBOb2RlLmpzIHJ1bnRpbWUgaXQgd2lsbFxuICogcGFyc2UgYXZvciBkYXRhIHJldHVybmVkIGJ5IGJsb2IgcXVlcnkuXG4gKi9cbmNsYXNzIEJsb2JRdWVyeVJlc3BvbnNlIHtcbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgc2VydmljZSBzdXBwb3J0c1xuICAgICAqIHJlcXVlc3RzIGZvciBwYXJ0aWFsIGZpbGUgY29udGVudC5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBhY2NlcHRSYW5nZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuYWNjZXB0UmFuZ2VzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGlmIGl0IHdhcyBwcmV2aW91c2x5IHNwZWNpZmllZFxuICAgICAqIGZvciB0aGUgZmlsZS5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBjYWNoZUNvbnRyb2woKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuY2FjaGVDb250cm9sO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSB0aGF0IHdhcyBzcGVjaWZpZWRcbiAgICAgKiBmb3IgdGhlICd4LW1zLWNvbnRlbnQtZGlzcG9zaXRpb24nIGhlYWRlciBhbmQgc3BlY2lmaWVzIGhvdyB0byBwcm9jZXNzIHRoZVxuICAgICAqIHJlc3BvbnNlLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNvbnRlbnREaXNwb3NpdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5jb250ZW50RGlzcG9zaXRpb247XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHZhbHVlIHRoYXQgd2FzIHNwZWNpZmllZFxuICAgICAqIGZvciB0aGUgQ29udGVudC1FbmNvZGluZyByZXF1ZXN0IGhlYWRlci5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBjb250ZW50RW5jb2RpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuY29udGVudEVuY29kaW5nO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSB0aGF0IHdhcyBzcGVjaWZpZWRcbiAgICAgKiBmb3IgdGhlIENvbnRlbnQtTGFuZ3VhZ2UgcmVxdWVzdCBoZWFkZXIuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY29udGVudExhbmd1YWdlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNvbnRlbnRMYW5ndWFnZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgc2VxdWVuY2UgbnVtYmVyIGZvciBhXG4gICAgICogcGFnZSBibG9iLiBUaGlzIGhlYWRlciBpcyBub3QgcmV0dXJuZWQgZm9yIGJsb2NrIGJsb2JzIG9yIGFwcGVuZCBibG9icy5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBibG9iU2VxdWVuY2VOdW1iZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuYmxvYlNlcXVlbmNlTnVtYmVyO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgYmxvYidzIHR5cGUuIFBvc3NpYmxlIHZhbHVlcyBpbmNsdWRlOlxuICAgICAqICdCbG9ja0Jsb2InLCAnUGFnZUJsb2InLCAnQXBwZW5kQmxvYicuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgYmxvYlR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuYmxvYlR5cGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2YgYnl0ZXMgcHJlc2VudCBpbiB0aGVcbiAgICAgKiByZXNwb25zZSBib2R5LlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNvbnRlbnRMZW5ndGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuY29udGVudExlbmd0aDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSWYgdGhlIGZpbGUgaGFzIGFuIE1ENSBoYXNoIGFuZCB0aGVcbiAgICAgKiByZXF1ZXN0IGlzIHRvIHJlYWQgdGhlIGZ1bGwgZmlsZSwgdGhpcyByZXNwb25zZSBoZWFkZXIgaXMgcmV0dXJuZWQgc28gdGhhdFxuICAgICAqIHRoZSBjbGllbnQgY2FuIGNoZWNrIGZvciBtZXNzYWdlIGNvbnRlbnQgaW50ZWdyaXR5LiBJZiB0aGUgcmVxdWVzdCBpcyB0b1xuICAgICAqIHJlYWQgYSBzcGVjaWZpZWQgcmFuZ2UgYW5kIHRoZSAneC1tcy1yYW5nZS1nZXQtY29udGVudC1tZDUnIGlzIHNldCB0b1xuICAgICAqIHRydWUsIHRoZW4gdGhlIHJlcXVlc3QgcmV0dXJucyBhbiBNRDUgaGFzaCBmb3IgdGhlIHJhbmdlLCBhcyBsb25nIGFzIHRoZVxuICAgICAqIHJhbmdlIHNpemUgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDQgTUIuIElmIG5laXRoZXIgb2YgdGhlc2Ugc2V0cyBvZlxuICAgICAqIGNvbmRpdGlvbnMgaXMgdHJ1ZSwgdGhlbiBubyB2YWx1ZSBpcyByZXR1cm5lZCBmb3IgdGhlICdDb250ZW50LU1ENSdcbiAgICAgKiBoZWFkZXIuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY29udGVudE1ENSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5jb250ZW50TUQ1O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgdGhlIHJhbmdlIG9mIGJ5dGVzIHJldHVybmVkIGlmXG4gICAgICogdGhlIGNsaWVudCByZXF1ZXN0ZWQgYSBzdWJzZXQgb2YgdGhlIGZpbGUgYnkgc2V0dGluZyB0aGUgUmFuZ2UgcmVxdWVzdFxuICAgICAqIGhlYWRlci5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBjb250ZW50UmFuZ2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuY29udGVudFJhbmdlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgY29udGVudCB0eXBlIHNwZWNpZmllZCBmb3IgdGhlIGZpbGUuXG4gICAgICogVGhlIGRlZmF1bHQgY29udGVudCB0eXBlIGlzICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY29udGVudFR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuY29udGVudFR5cGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbmNsdXNpb24gdGltZSBvZiB0aGUgbGFzdCBhdHRlbXB0ZWRcbiAgICAgKiBDb3B5IEZpbGUgb3BlcmF0aW9uIHdoZXJlIHRoaXMgZmlsZSB3YXMgdGhlIGRlc3RpbmF0aW9uIGZpbGUuIFRoaXMgdmFsdWVcbiAgICAgKiBjYW4gc3BlY2lmeSB0aGUgdGltZSBvZiBhIGNvbXBsZXRlZCwgYWJvcnRlZCwgb3IgZmFpbGVkIGNvcHkgYXR0ZW1wdC5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBjb3B5Q29tcGxldGVkT24oKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN0cmluZyBpZGVudGlmaWVyIGZvciB0aGUgbGFzdCBhdHRlbXB0ZWQgQ29weVxuICAgICAqIEZpbGUgb3BlcmF0aW9uIHdoZXJlIHRoaXMgZmlsZSB3YXMgdGhlIGRlc3RpbmF0aW9uIGZpbGUuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY29weUlkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNvcHlJZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29udGFpbnMgdGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQgYW5kXG4gICAgICogdGhlIHRvdGFsIGJ5dGVzIGluIHRoZSBzb3VyY2UgaW4gdGhlIGxhc3QgYXR0ZW1wdGVkIENvcHkgRmlsZSBvcGVyYXRpb25cbiAgICAgKiB3aGVyZSB0aGlzIGZpbGUgd2FzIHRoZSBkZXN0aW5hdGlvbiBmaWxlLiBDYW4gc2hvdyBiZXR3ZWVuIDAgYW5kXG4gICAgICogQ29udGVudC1MZW5ndGggYnl0ZXMgY29waWVkLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNvcHlQcm9ncmVzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5jb3B5UHJvZ3Jlc3M7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFVSTCB1cCB0byAyS0IgaW4gbGVuZ3RoIHRoYXQgc3BlY2lmaWVzIHRoZVxuICAgICAqIHNvdXJjZSBmaWxlIHVzZWQgaW4gdGhlIGxhc3QgYXR0ZW1wdGVkIENvcHkgRmlsZSBvcGVyYXRpb24gd2hlcmUgdGhpcyBmaWxlXG4gICAgICogd2FzIHRoZSBkZXN0aW5hdGlvbiBmaWxlLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNvcHlTb3VyY2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuY29weVNvdXJjZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3RhdGUgb2YgdGhlIGNvcHkgb3BlcmF0aW9uXG4gICAgICogaWRlbnRpZmllZCBieSAneC1tcy1jb3B5LWlkJy4gUG9zc2libGUgdmFsdWVzIGluY2x1ZGU6ICdwZW5kaW5nJyxcbiAgICAgKiAnc3VjY2VzcycsICdhYm9ydGVkJywgJ2ZhaWxlZCdcbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBjb3B5U3RhdHVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNvcHlTdGF0dXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE9ubHkgYXBwZWFycyB3aGVuXG4gICAgICogeC1tcy1jb3B5LXN0YXR1cyBpcyBmYWlsZWQgb3IgcGVuZGluZy4gRGVzY3JpYmVzIGNhdXNlIG9mIGZhdGFsIG9yXG4gICAgICogbm9uLWZhdGFsIGNvcHkgb3BlcmF0aW9uIGZhaWx1cmUuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY29weVN0YXR1c0Rlc2NyaXB0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNvcHlTdGF0dXNEZXNjcmlwdGlvbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogV2hlbiBhIGJsb2IgaXMgbGVhc2VkLFxuICAgICAqIHNwZWNpZmllcyB3aGV0aGVyIHRoZSBsZWFzZSBpcyBvZiBpbmZpbml0ZSBvciBmaXhlZCBkdXJhdGlvbi4gUG9zc2libGVcbiAgICAgKiB2YWx1ZXMgaW5jbHVkZTogJ2luZmluaXRlJywgJ2ZpeGVkJy5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBsZWFzZUR1cmF0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmxlYXNlRHVyYXRpb247XG4gICAgfVxuICAgIC8qKlxuICAgICAqIExlYXNlIHN0YXRlIG9mIHRoZSBibG9iLiBQb3NzaWJsZVxuICAgICAqIHZhbHVlcyBpbmNsdWRlOiAnYXZhaWxhYmxlJywgJ2xlYXNlZCcsICdleHBpcmVkJywgJ2JyZWFraW5nJywgJ2Jyb2tlbicuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgbGVhc2VTdGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5sZWFzZVN0YXRlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBsZWFzZSBzdGF0dXMgb2YgdGhlXG4gICAgICogYmxvYi4gUG9zc2libGUgdmFsdWVzIGluY2x1ZGU6ICdsb2NrZWQnLCAndW5sb2NrZWQnLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGxlYXNlU3RhdHVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmxlYXNlU3RhdHVzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBIFVUQyBkYXRlL3RpbWUgdmFsdWUgZ2VuZXJhdGVkIGJ5IHRoZSBzZXJ2aWNlIHRoYXRcbiAgICAgKiBpbmRpY2F0ZXMgdGhlIHRpbWUgYXQgd2hpY2ggdGhlIHJlc3BvbnNlIHdhcyBpbml0aWF0ZWQuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgZGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5kYXRlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIGNvbW1pdHRlZCBibG9ja3NcbiAgICAgKiBwcmVzZW50IGluIHRoZSBibG9iLiBUaGlzIGhlYWRlciBpcyByZXR1cm5lZCBvbmx5IGZvciBhcHBlbmQgYmxvYnMuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgYmxvYkNvbW1pdHRlZEJsb2NrQ291bnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuYmxvYkNvbW1pdHRlZEJsb2NrQ291bnQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBFVGFnIGNvbnRhaW5zIGEgdmFsdWUgdGhhdCB5b3UgY2FuIHVzZSB0b1xuICAgICAqIHBlcmZvcm0gb3BlcmF0aW9ucyBjb25kaXRpb25hbGx5LCBpbiBxdW90ZXMuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgZXRhZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5ldGFnO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgZXJyb3IgY29kZS5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBlcnJvckNvZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuZXJyb3JDb2RlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgdmFsdWUgb2YgdGhpcyBoZWFkZXIgaXMgc2V0IHRvXG4gICAgICogdHJ1ZSBpZiB0aGUgZmlsZSBkYXRhIGFuZCBhcHBsaWNhdGlvbiBtZXRhZGF0YSBhcmUgY29tcGxldGVseSBlbmNyeXB0ZWRcbiAgICAgKiB1c2luZyB0aGUgc3BlY2lmaWVkIGFsZ29yaXRobS4gT3RoZXJ3aXNlLCB0aGUgdmFsdWUgaXMgc2V0IHRvIGZhbHNlICh3aGVuXG4gICAgICogdGhlIGZpbGUgaXMgdW5lbmNyeXB0ZWQsIG9yIGlmIG9ubHkgcGFydHMgb2YgdGhlIGZpbGUvYXBwbGljYXRpb24gbWV0YWRhdGFcbiAgICAgKiBhcmUgZW5jcnlwdGVkKS5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBpc1NlcnZlckVuY3J5cHRlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5pc1NlcnZlckVuY3J5cHRlZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSWYgdGhlIGJsb2IgaGFzIGEgTUQ1IGhhc2gsIGFuZCBpZlxuICAgICAqIHJlcXVlc3QgY29udGFpbnMgcmFuZ2UgaGVhZGVyIChSYW5nZSBvciB4LW1zLXJhbmdlKSwgdGhpcyByZXNwb25zZSBoZWFkZXJcbiAgICAgKiBpcyByZXR1cm5lZCB3aXRoIHRoZSB2YWx1ZSBvZiB0aGUgd2hvbGUgYmxvYidzIE1ENSB2YWx1ZS4gVGhpcyB2YWx1ZSBtYXlcbiAgICAgKiBvciBtYXkgbm90IGJlIGVxdWFsIHRvIHRoZSB2YWx1ZSByZXR1cm5lZCBpbiBDb250ZW50LU1ENSBoZWFkZXIsIHdpdGggdGhlXG4gICAgICogbGF0dGVyIGNhbGN1bGF0ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHJhbmdlLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGJsb2JDb250ZW50TUQ1KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmJsb2JDb250ZW50TUQ1O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBkYXRlIGFuZCB0aW1lIHRoZSBmaWxlIHdhcyBsYXN0XG4gICAgICogbW9kaWZpZWQuIEFueSBvcGVyYXRpb24gdGhhdCBtb2RpZmllcyB0aGUgZmlsZSBvciBpdHMgcHJvcGVydGllcyB1cGRhdGVzXG4gICAgICogdGhlIGxhc3QgbW9kaWZpZWQgdGltZS5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBsYXN0TW9kaWZpZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UubGFzdE1vZGlmaWVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBIG5hbWUtdmFsdWUgcGFpclxuICAgICAqIHRvIGFzc29jaWF0ZSB3aXRoIGEgZmlsZSBzdG9yYWdlIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBtZXRhZGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5tZXRhZGF0YTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhpcyBoZWFkZXIgdW5pcXVlbHkgaWRlbnRpZmllcyB0aGUgcmVxdWVzdFxuICAgICAqIHRoYXQgd2FzIG1hZGUgYW5kIGNhbiBiZSB1c2VkIGZvciB0cm91Ymxlc2hvb3RpbmcgdGhlIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgcmVxdWVzdElkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLnJlcXVlc3RJZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSWYgYSBjbGllbnQgcmVxdWVzdCBpZCBoZWFkZXIgaXMgc2VudCBpbiB0aGUgcmVxdWVzdCwgdGhpcyBoZWFkZXIgd2lsbCBiZSBwcmVzZW50IGluIHRoZVxuICAgICAqIHJlc3BvbnNlIHdpdGggdGhlIHNhbWUgdmFsdWUuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY2xpZW50UmVxdWVzdElkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNsaWVudFJlcXVlc3RJZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHRoZSB2ZXJzaW9uIG9mIHRoZSBGaWxlIHNlcnZpY2UgdXNlZFxuICAgICAqIHRvIGV4ZWN1dGUgdGhlIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgdmVyc2lvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS52ZXJzaW9uO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgU0hBLTI1NiBoYXNoIG9mIHRoZSBlbmNyeXB0aW9uIGtleSB1c2VkIHRvIGVuY3J5cHQgdGhlIGJsb2IuIFRoaXMgdmFsdWUgaXMgb25seSByZXR1cm5lZFxuICAgICAqIHdoZW4gdGhlIGJsb2Igd2FzIGVuY3J5cHRlZCB3aXRoIGEgY3VzdG9tZXItcHJvdmlkZWQga2V5LlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGVuY3J5cHRpb25LZXlTaGEyNTYoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuZW5jcnlwdGlvbktleVNoYTI1NjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSWYgdGhlIHJlcXVlc3QgaXMgdG8gcmVhZCBhIHNwZWNpZmllZCByYW5nZSBhbmQgdGhlIHgtbXMtcmFuZ2UtZ2V0LWNvbnRlbnQtY3JjNjQgaXMgc2V0IHRvXG4gICAgICogdHJ1ZSwgdGhlbiB0aGUgcmVxdWVzdCByZXR1cm5zIGEgY3JjNjQgZm9yIHRoZSByYW5nZSwgYXMgbG9uZyBhcyB0aGUgcmFuZ2Ugc2l6ZSBpcyBsZXNzIHRoYW5cbiAgICAgKiBvciBlcXVhbCB0byA0IE1CLiBJZiBib3RoIHgtbXMtcmFuZ2UtZ2V0LWNvbnRlbnQtY3JjNjQgJiB4LW1zLXJhbmdlLWdldC1jb250ZW50LW1kNSBpc1xuICAgICAqIHNwZWNpZmllZCBpbiB0aGUgc2FtZSByZXF1ZXN0LCBpdCB3aWxsIGZhaWwgd2l0aCA0MDAoQmFkIFJlcXVlc3QpXG4gICAgICovXG4gICAgZ2V0IGNvbnRlbnRDcmM2NCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5jb250ZW50Q3JjNjQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSByZXNwb25zZSBib2R5IGFzIGEgYnJvd3NlciBCbG9iLlxuICAgICAqIEFsd2F5cyB1bmRlZmluZWQgaW4gbm9kZS5qcy5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBibG9iQm9keSgpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIHJlc3BvbnNlIGJvZHkgYXMgYSBub2RlLmpzIFJlYWRhYmxlIHN0cmVhbS5cbiAgICAgKiBBbHdheXMgdW5kZWZpbmVkIGluIHRoZSBicm93c2VyLlxuICAgICAqXG4gICAgICogSXQgd2lsbCBwYXJzZSBhdm9yIGRhdGEgcmV0dXJuZWQgYnkgYmxvYiBxdWVyeS5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCByZWFkYWJsZVN0cmVhbUJvZHkoKSB7XG4gICAgICAgIHJldHVybiBjb3JlVXRpbC5pc05vZGUgPyB0aGlzLmJsb2JEb3dubG9hZFN0cmVhbSA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIEhUVFAgcmVzcG9uc2UuXG4gICAgICovXG4gICAgZ2V0IF9yZXNwb25zZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5fcmVzcG9uc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgQmxvYlF1ZXJ5UmVzcG9uc2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3JpZ2luYWxSZXNwb25zZSAtXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG9yaWdpbmFsUmVzcG9uc2UsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICB0aGlzLm9yaWdpbmFsUmVzcG9uc2UgPSBvcmlnaW5hbFJlc3BvbnNlO1xuICAgICAgICB0aGlzLmJsb2JEb3dubG9hZFN0cmVhbSA9IG5ldyBCbG9iUXVpY2tRdWVyeVN0cmVhbSh0aGlzLm9yaWdpbmFsUmVzcG9uc2UucmVhZGFibGVTdHJlYW1Cb2R5LCBvcHRpb25zKTtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBhY2Nlc3MgdGllciBvbiBhIGJsb2IuXG4gKiBGb3IgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgYmxvY2sgYmxvYiBsZXZlbCB0aWVyaW5nIHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vYXp1cmUvc3RvcmFnZS9ibG9icy9zdG9yYWdlLWJsb2Itc3RvcmFnZS10aWVyc3xIb3QsIGNvb2wgYW5kIGFyY2hpdmUgc3RvcmFnZSB0aWVycy59XG4gKi9cbmV4cG9ydHMuQmxvY2tCbG9iVGllciA9IHZvaWQgMDtcbihmdW5jdGlvbiAoQmxvY2tCbG9iVGllcikge1xuICAgIC8qKlxuICAgICAqIE9wdGltaXplZCBmb3Igc3RvcmluZyBkYXRhIHRoYXQgaXMgYWNjZXNzZWQgZnJlcXVlbnRseS5cbiAgICAgKi9cbiAgICBCbG9ja0Jsb2JUaWVyW1wiSG90XCJdID0gXCJIb3RcIjtcbiAgICAvKipcbiAgICAgKiBPcHRpbWl6ZWQgZm9yIHN0b3JpbmcgZGF0YSB0aGF0IGlzIGluZnJlcXVlbnRseSBhY2Nlc3NlZCBhbmQgc3RvcmVkIGZvciBhdCBsZWFzdCAzMCBkYXlzLlxuICAgICAqL1xuICAgIEJsb2NrQmxvYlRpZXJbXCJDb29sXCJdID0gXCJDb29sXCI7XG4gICAgLyoqXG4gICAgICogT3B0aW1pemVkIGZvciBzdG9yaW5nIGRhdGEgdGhhdCBpcyByYXJlbHkgYWNjZXNzZWQuXG4gICAgICovXG4gICAgQmxvY2tCbG9iVGllcltcIkNvbGRcIl0gPSBcIkNvbGRcIjtcbiAgICAvKipcbiAgICAgKiBPcHRpbWl6ZWQgZm9yIHN0b3JpbmcgZGF0YSB0aGF0IGlzIHJhcmVseSBhY2Nlc3NlZCBhbmQgc3RvcmVkIGZvciBhdCBsZWFzdCAxODAgZGF5c1xuICAgICAqIHdpdGggZmxleGlibGUgbGF0ZW5jeSByZXF1aXJlbWVudHMgKG9uIHRoZSBvcmRlciBvZiBob3VycykuXG4gICAgICovXG4gICAgQmxvY2tCbG9iVGllcltcIkFyY2hpdmVcIl0gPSBcIkFyY2hpdmVcIjtcbn0pKGV4cG9ydHMuQmxvY2tCbG9iVGllciB8fCAoZXhwb3J0cy5CbG9ja0Jsb2JUaWVyID0ge30pKTtcbi8qKlxuICogU3BlY2lmaWVzIHRoZSBwYWdlIGJsb2IgdGllciB0byBzZXQgdGhlIGJsb2IgdG8uIFRoaXMgaXMgb25seSBhcHBsaWNhYmxlIHRvIHBhZ2UgYmxvYnMgb24gcHJlbWl1bSBzdG9yYWdlIGFjY291bnRzLlxuICogUGxlYXNlIHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vYXp1cmUvc3RvcmFnZS9zdG9yYWdlLXByZW1pdW0tc3RvcmFnZSNzY2FsYWJpbGl0eS1hbmQtcGVyZm9ybWFuY2UtdGFyZ2V0c3xoZXJlfVxuICogZm9yIGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIHRoZSBjb3JyZXNwb25kaW5nIElPUFMgYW5kIHRocm91Z2hwdXQgcGVyIFBhZ2VCbG9iVGllci5cbiAqL1xuZXhwb3J0cy5QcmVtaXVtUGFnZUJsb2JUaWVyID0gdm9pZCAwO1xuKGZ1bmN0aW9uIChQcmVtaXVtUGFnZUJsb2JUaWVyKSB7XG4gICAgLyoqXG4gICAgICogUDQgVGllci5cbiAgICAgKi9cbiAgICBQcmVtaXVtUGFnZUJsb2JUaWVyW1wiUDRcIl0gPSBcIlA0XCI7XG4gICAgLyoqXG4gICAgICogUDYgVGllci5cbiAgICAgKi9cbiAgICBQcmVtaXVtUGFnZUJsb2JUaWVyW1wiUDZcIl0gPSBcIlA2XCI7XG4gICAgLyoqXG4gICAgICogUDEwIFRpZXIuXG4gICAgICovXG4gICAgUHJlbWl1bVBhZ2VCbG9iVGllcltcIlAxMFwiXSA9IFwiUDEwXCI7XG4gICAgLyoqXG4gICAgICogUDE1IFRpZXIuXG4gICAgICovXG4gICAgUHJlbWl1bVBhZ2VCbG9iVGllcltcIlAxNVwiXSA9IFwiUDE1XCI7XG4gICAgLyoqXG4gICAgICogUDIwIFRpZXIuXG4gICAgICovXG4gICAgUHJlbWl1bVBhZ2VCbG9iVGllcltcIlAyMFwiXSA9IFwiUDIwXCI7XG4gICAgLyoqXG4gICAgICogUDMwIFRpZXIuXG4gICAgICovXG4gICAgUHJlbWl1bVBhZ2VCbG9iVGllcltcIlAzMFwiXSA9IFwiUDMwXCI7XG4gICAgLyoqXG4gICAgICogUDQwIFRpZXIuXG4gICAgICovXG4gICAgUHJlbWl1bVBhZ2VCbG9iVGllcltcIlA0MFwiXSA9IFwiUDQwXCI7XG4gICAgLyoqXG4gICAgICogUDUwIFRpZXIuXG4gICAgICovXG4gICAgUHJlbWl1bVBhZ2VCbG9iVGllcltcIlA1MFwiXSA9IFwiUDUwXCI7XG4gICAgLyoqXG4gICAgICogUDYwIFRpZXIuXG4gICAgICovXG4gICAgUHJlbWl1bVBhZ2VCbG9iVGllcltcIlA2MFwiXSA9IFwiUDYwXCI7XG4gICAgLyoqXG4gICAgICogUDcwIFRpZXIuXG4gICAgICovXG4gICAgUHJlbWl1bVBhZ2VCbG9iVGllcltcIlA3MFwiXSA9IFwiUDcwXCI7XG4gICAgLyoqXG4gICAgICogUDgwIFRpZXIuXG4gICAgICovXG4gICAgUHJlbWl1bVBhZ2VCbG9iVGllcltcIlA4MFwiXSA9IFwiUDgwXCI7XG59KShleHBvcnRzLlByZW1pdW1QYWdlQmxvYlRpZXIgfHwgKGV4cG9ydHMuUHJlbWl1bVBhZ2VCbG9iVGllciA9IHt9KSk7XG5mdW5jdGlvbiB0b0FjY2Vzc1RpZXIodGllcikge1xuICAgIGlmICh0aWVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHRpZXI7IC8vIE5vIG1vcmUgY2hlY2sgaWYgc3RyaW5nIGlzIGEgdmFsaWQgQWNjZXNzVGllciwgYW5kIGxlZnQgdGhpcyB0byB1bmRlcmxheSBsb2dpYyB0byBkZWNpZGUoc2VydmljZSkuXG59XG5mdW5jdGlvbiBlbnN1cmVDcGtJZlNwZWNpZmllZChjcGssIGlzSHR0cHMpIHtcbiAgICBpZiAoY3BrICYmICFpc0h0dHBzKSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiQ3VzdG9tZXItcHJvdmlkZWQgZW5jcnlwdGlvbiBrZXkgbXVzdCBiZSB1c2VkIG92ZXIgSFRUUFMuXCIpO1xuICAgIH1cbiAgICBpZiAoY3BrICYmICFjcGsuZW5jcnlwdGlvbkFsZ29yaXRobSkge1xuICAgICAgICBjcGsuZW5jcnlwdGlvbkFsZ29yaXRobSA9IEVuY3J5cHRpb25BbGdvcml0aG1BRVMyNTtcbiAgICB9XG59XG4vKipcbiAqIERlZmluZXMgdGhlIGtub3duIGNsb3VkIGF1ZGllbmNlcyBmb3IgU3RvcmFnZS5cbiAqL1xuZXhwb3J0cy5TdG9yYWdlQmxvYkF1ZGllbmNlID0gdm9pZCAwO1xuKGZ1bmN0aW9uIChTdG9yYWdlQmxvYkF1ZGllbmNlKSB7XG4gICAgLyoqXG4gICAgICogVGhlIE9BdXRoIHNjb3BlIHRvIHVzZSB0byByZXRyaWV2ZSBhbiBBQUQgdG9rZW4gZm9yIEF6dXJlIFN0b3JhZ2UuXG4gICAgICovXG4gICAgU3RvcmFnZUJsb2JBdWRpZW5jZVtcIlN0b3JhZ2VPQXV0aFNjb3Blc1wiXSA9IFwiaHR0cHM6Ly9zdG9yYWdlLmF6dXJlLmNvbS8uZGVmYXVsdFwiO1xuICAgIC8qKlxuICAgICAqIFRoZSBPQXV0aCBzY29wZSB0byB1c2UgdG8gcmV0cmlldmUgYW4gQUFEIHRva2VuIGZvciBBenVyZSBEaXNrLlxuICAgICAqL1xuICAgIFN0b3JhZ2VCbG9iQXVkaWVuY2VbXCJEaXNrQ29tcHV0ZU9BdXRoU2NvcGVzXCJdID0gXCJodHRwczovL2Rpc2suY29tcHV0ZS5henVyZS5jb20vLmRlZmF1bHRcIjtcbn0pKGV4cG9ydHMuU3RvcmFnZUJsb2JBdWRpZW5jZSB8fCAoZXhwb3J0cy5TdG9yYWdlQmxvYkF1ZGllbmNlID0ge30pKTtcbi8qKlxuICpcbiAqIFRvIGdldCBPQXV0aCBhdWRpZW5jZSBmb3IgYSBzdG9yYWdlIGFjY291bnQgZm9yIGJsb2Igc2VydmljZS5cbiAqL1xuZnVuY3Rpb24gZ2V0QmxvYlNlcnZpY2VBY2NvdW50QXVkaWVuY2Uoc3RvcmFnZUFjY291bnROYW1lKSB7XG4gICAgcmV0dXJuIGBodHRwczovLyR7c3RvcmFnZUFjY291bnROYW1lfS5ibG9iLmNvcmUud2luZG93cy5uZXQvLmRlZmF1bHRgO1xufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogRnVuY3Rpb24gdGhhdCBjb252ZXJ0cyBQYWdlUmFuZ2UgYW5kIENsZWFyUmFuZ2UgdG8gYSBjb21tb24gUmFuZ2Ugb2JqZWN0LlxuICogUGFnZVJhbmdlIGFuZCBDbGVhclJhbmdlIGhhdmUgc3RhcnQgYW5kIGVuZCB3aGlsZSBSYW5nZSBvZmZzZXQgYW5kIGNvdW50XG4gKiB0aGlzIGZ1bmN0aW9uIG5vcm1hbGl6ZXMgdG8gUmFuZ2UuXG4gKiBAcGFyYW0gcmVzcG9uc2UgLSBNb2RlbCBQYWdlQmxvYiBSYW5nZSByZXNwb25zZVxuICovXG5mdW5jdGlvbiByYW5nZVJlc3BvbnNlRnJvbU1vZGVsKHJlc3BvbnNlKSB7XG4gICAgY29uc3QgcGFnZVJhbmdlID0gKHJlc3BvbnNlLl9yZXNwb25zZS5wYXJzZWRCb2R5LnBhZ2VSYW5nZSB8fCBbXSkubWFwKCh4KSA9PiAoe1xuICAgICAgICBvZmZzZXQ6IHguc3RhcnQsXG4gICAgICAgIGNvdW50OiB4LmVuZCAtIHguc3RhcnQsXG4gICAgfSkpO1xuICAgIGNvbnN0IGNsZWFyUmFuZ2UgPSAocmVzcG9uc2UuX3Jlc3BvbnNlLnBhcnNlZEJvZHkuY2xlYXJSYW5nZSB8fCBbXSkubWFwKCh4KSA9PiAoe1xuICAgICAgICBvZmZzZXQ6IHguc3RhcnQsXG4gICAgICAgIGNvdW50OiB4LmVuZCAtIHguc3RhcnQsXG4gICAgfSkpO1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHJlc3BvbnNlKSwgeyBwYWdlUmFuZ2UsXG4gICAgICAgIGNsZWFyUmFuZ2UsIF9yZXNwb25zZTogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCByZXNwb25zZS5fcmVzcG9uc2UpLCB7IHBhcnNlZEJvZHk6IHtcbiAgICAgICAgICAgICAgICBwYWdlUmFuZ2UsXG4gICAgICAgICAgICAgICAgY2xlYXJSYW5nZSxcbiAgICAgICAgICAgIH0gfSkgfSk7XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBUaGlzIGlzIHRoZSBwb2xsZXIgcmV0dXJuZWQgYnkge0BsaW5rIEJsb2JDbGllbnQuYmVnaW5Db3B5RnJvbVVSTH0uXG4gKiBUaGlzIGNhbiBub3QgYmUgaW5zdGFudGlhdGVkIGRpcmVjdGx5IG91dHNpZGUgb2YgdGhpcyBwYWNrYWdlLlxuICpcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgQmxvYkJlZ2luQ29weUZyb21VcmxQb2xsZXIgZXh0ZW5kcyBjb3JlTHJvLlBvbGxlciB7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICBjb25zdCB7IGJsb2JDbGllbnQsIGNvcHlTb3VyY2UsIGludGVydmFsSW5NcyA9IDE1MDAwLCBvblByb2dyZXNzLCByZXN1bWVGcm9tLCBzdGFydENvcHlGcm9tVVJMT3B0aW9ucywgfSA9IG9wdGlvbnM7XG4gICAgICAgIGxldCBzdGF0ZTtcbiAgICAgICAgaWYgKHJlc3VtZUZyb20pIHtcbiAgICAgICAgICAgIHN0YXRlID0gSlNPTi5wYXJzZShyZXN1bWVGcm9tKS5zdGF0ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcGVyYXRpb24gPSBtYWtlQmxvYkJlZ2luQ29weUZyb21VUkxQb2xsT3BlcmF0aW9uKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUpLCB7IGJsb2JDbGllbnQsXG4gICAgICAgICAgICBjb3B5U291cmNlLFxuICAgICAgICAgICAgc3RhcnRDb3B5RnJvbVVSTE9wdGlvbnMgfSkpO1xuICAgICAgICBzdXBlcihvcGVyYXRpb24pO1xuICAgICAgICBpZiAodHlwZW9mIG9uUHJvZ3Jlc3MgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdGhpcy5vblByb2dyZXNzKG9uUHJvZ3Jlc3MpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW50ZXJ2YWxJbk1zID0gaW50ZXJ2YWxJbk1zO1xuICAgIH1cbiAgICBkZWxheSgpIHtcbiAgICAgICAgcmV0dXJuIGNvcmVVdGlsLmRlbGF5KHRoaXMuaW50ZXJ2YWxJbk1zKTtcbiAgICB9XG59XG4vKipcbiAqIE5vdGU6IEludGVudGlvbmFsbHkgdXNpbmcgZnVuY3Rpb24gZXhwcmVzc2lvbiBvdmVyIGFycm93IGZ1bmN0aW9uIGV4cHJlc3Npb25cbiAqIHNvIHRoYXQgdGhlIGZ1bmN0aW9uIGNhbiBiZSBpbnZva2VkIHdpdGggYSBkaWZmZXJlbnQgY29udGV4dC5cbiAqIFRoaXMgYWZmZWN0cyB3aGF0IGB0aGlzYCByZWZlcnMgdG8uXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGNhbmNlbCA9IGFzeW5jIGZ1bmN0aW9uIGNhbmNlbChvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgeyBjb3B5SWQgfSA9IHN0YXRlO1xuICAgIGlmIChzdGF0ZS5pc0NvbXBsZXRlZCkge1xuICAgICAgICByZXR1cm4gbWFrZUJsb2JCZWdpbkNvcHlGcm9tVVJMUG9sbE9wZXJhdGlvbihzdGF0ZSk7XG4gICAgfVxuICAgIGlmICghY29weUlkKSB7XG4gICAgICAgIHN0YXRlLmlzQ2FuY2VsbGVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIG1ha2VCbG9iQmVnaW5Db3B5RnJvbVVSTFBvbGxPcGVyYXRpb24oc3RhdGUpO1xuICAgIH1cbiAgICAvLyBpZiBhYm9ydENvcHlGcm9tVVJMIHRocm93cywgaXQgd2lsbCBidWJibGUgdXAgdG8gdXNlcidzIHBvbGxlci5jYW5jZWxPcGVyYXRpb24gY2FsbFxuICAgIGF3YWl0IHN0YXRlLmJsb2JDbGllbnQuYWJvcnRDb3B5RnJvbVVSTChjb3B5SWQsIHtcbiAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgfSk7XG4gICAgc3RhdGUuaXNDYW5jZWxsZWQgPSB0cnVlO1xuICAgIHJldHVybiBtYWtlQmxvYkJlZ2luQ29weUZyb21VUkxQb2xsT3BlcmF0aW9uKHN0YXRlKTtcbn07XG4vKipcbiAqIE5vdGU6IEludGVudGlvbmFsbHkgdXNpbmcgZnVuY3Rpb24gZXhwcmVzc2lvbiBvdmVyIGFycm93IGZ1bmN0aW9uIGV4cHJlc3Npb25cbiAqIHNvIHRoYXQgdGhlIGZ1bmN0aW9uIGNhbiBiZSBpbnZva2VkIHdpdGggYSBkaWZmZXJlbnQgY29udGV4dC5cbiAqIFRoaXMgYWZmZWN0cyB3aGF0IGB0aGlzYCByZWZlcnMgdG8uXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IHVwZGF0ZSA9IGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZShvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgeyBibG9iQ2xpZW50LCBjb3B5U291cmNlLCBzdGFydENvcHlGcm9tVVJMT3B0aW9ucyB9ID0gc3RhdGU7XG4gICAgaWYgKCFzdGF0ZS5pc1N0YXJ0ZWQpIHtcbiAgICAgICAgc3RhdGUuaXNTdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYmxvYkNsaWVudC5zdGFydENvcHlGcm9tVVJMKGNvcHlTb3VyY2UsIHN0YXJ0Q29weUZyb21VUkxPcHRpb25zKTtcbiAgICAgICAgLy8gY29weUlkIGlzIG5lZWRlZCB0byBhYm9ydFxuICAgICAgICBzdGF0ZS5jb3B5SWQgPSByZXN1bHQuY29weUlkO1xuICAgICAgICBpZiAocmVzdWx0LmNvcHlTdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgICBzdGF0ZS5yZXN1bHQgPSByZXN1bHQ7XG4gICAgICAgICAgICBzdGF0ZS5pc0NvbXBsZXRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoIXN0YXRlLmlzQ29tcGxldGVkKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzdGF0ZS5ibG9iQ2xpZW50LmdldFByb3BlcnRpZXMoeyBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCB9KTtcbiAgICAgICAgICAgIGNvbnN0IHsgY29weVN0YXR1cywgY29weVByb2dyZXNzIH0gPSByZXN1bHQ7XG4gICAgICAgICAgICBjb25zdCBwcmV2Q29weVByb2dyZXNzID0gc3RhdGUuY29weVByb2dyZXNzO1xuICAgICAgICAgICAgaWYgKGNvcHlQcm9ncmVzcykge1xuICAgICAgICAgICAgICAgIHN0YXRlLmNvcHlQcm9ncmVzcyA9IGNvcHlQcm9ncmVzcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb3B5U3RhdHVzID09PSBcInBlbmRpbmdcIiAmJlxuICAgICAgICAgICAgICAgIGNvcHlQcm9ncmVzcyAhPT0gcHJldkNvcHlQcm9ncmVzcyAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiBvcHRpb25zLmZpcmVQcm9ncmVzcyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgLy8gdHJpZ2dlciBpbiBzZXRUaW1lb3V0LCBvciBzd2FsbG93IGVycm9yP1xuICAgICAgICAgICAgICAgIG9wdGlvbnMuZmlyZVByb2dyZXNzKHN0YXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNvcHlTdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgICAgICAgc3RhdGUucmVzdWx0ID0gcmVzdWx0O1xuICAgICAgICAgICAgICAgIHN0YXRlLmlzQ29tcGxldGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNvcHlTdGF0dXMgPT09IFwiZmFpbGVkXCIpIHtcbiAgICAgICAgICAgICAgICBzdGF0ZS5lcnJvciA9IG5ldyBFcnJvcihgQmxvYiBjb3B5IGZhaWxlZCB3aXRoIHJlYXNvbjogXCIke3Jlc3VsdC5jb3B5U3RhdHVzRGVzY3JpcHRpb24gfHwgXCJ1bmtub3duXCJ9XCJgKTtcbiAgICAgICAgICAgICAgICBzdGF0ZS5pc0NvbXBsZXRlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgc3RhdGUuZXJyb3IgPSBlcnI7XG4gICAgICAgICAgICBzdGF0ZS5pc0NvbXBsZXRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1ha2VCbG9iQmVnaW5Db3B5RnJvbVVSTFBvbGxPcGVyYXRpb24oc3RhdGUpO1xufTtcbi8qKlxuICogTm90ZTogSW50ZW50aW9uYWxseSB1c2luZyBmdW5jdGlvbiBleHByZXNzaW9uIG92ZXIgYXJyb3cgZnVuY3Rpb24gZXhwcmVzc2lvblxuICogc28gdGhhdCB0aGUgZnVuY3Rpb24gY2FuIGJlIGludm9rZWQgd2l0aCBhIGRpZmZlcmVudCBjb250ZXh0LlxuICogVGhpcyBhZmZlY3RzIHdoYXQgYHRoaXNgIHJlZmVycyB0by5cbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgdG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoeyBzdGF0ZTogdGhpcy5zdGF0ZSB9LCAoa2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgICAvLyByZW1vdmUgYmxvYkNsaWVudCBmcm9tIHNlcmlhbGl6ZWQgc3RhdGUgc2luY2UgYSBjbGllbnQgY2FuJ3QgYmUgaHlkcmF0ZWQgZnJvbSB0aGlzIGluZm8uXG4gICAgICAgIGlmIChrZXkgPT09IFwiYmxvYkNsaWVudFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9KTtcbn07XG4vKipcbiAqIENyZWF0ZXMgYSBwb2xsIG9wZXJhdGlvbiBnaXZlbiB0aGUgcHJvdmlkZWQgc3RhdGUuXG4gKiBAaGlkZGVuXG4gKi9cbmZ1bmN0aW9uIG1ha2VCbG9iQmVnaW5Db3B5RnJvbVVSTFBvbGxPcGVyYXRpb24oc3RhdGUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBzdGF0ZTogT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUpLFxuICAgICAgICBjYW5jZWwsXG4gICAgICAgIHRvU3RyaW5nLFxuICAgICAgICB1cGRhdGUsXG4gICAgfTtcbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIEdlbmVyYXRlIGEgcmFuZ2Ugc3RyaW5nLiBGb3IgZXhhbXBsZTpcbiAqXG4gKiBcImJ5dGVzPTI1NS1cIiBvciBcImJ5dGVzPTAtNTExXCJcbiAqXG4gKiBAcGFyYW0gaVJhbmdlIC1cbiAqL1xuZnVuY3Rpb24gcmFuZ2VUb1N0cmluZyhpUmFuZ2UpIHtcbiAgICBpZiAoaVJhbmdlLm9mZnNldCA8IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYFJhbmdlLm9mZnNldCBjYW5ub3QgYmUgc21hbGxlciB0aGFuIDAuYCk7XG4gICAgfVxuICAgIGlmIChpUmFuZ2UuY291bnQgJiYgaVJhbmdlLmNvdW50IDw9IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYFJhbmdlLmNvdW50IG11c3QgYmUgbGFyZ2VyIHRoYW4gMC4gTGVhdmUgaXQgdW5kZWZpbmVkIGlmIHlvdSB3YW50IGEgcmFuZ2UgZnJvbSBvZmZzZXQgdG8gdGhlIGVuZC5gKTtcbiAgICB9XG4gICAgcmV0dXJuIGlSYW5nZS5jb3VudFxuICAgICAgICA/IGBieXRlcz0ke2lSYW5nZS5vZmZzZXR9LSR7aVJhbmdlLm9mZnNldCArIGlSYW5nZS5jb3VudCAtIDF9YFxuICAgICAgICA6IGBieXRlcz0ke2lSYW5nZS5vZmZzZXR9LWA7XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLy8gSW4gYnJvd3NlciwgZHVyaW5nIHdlYnBhY2sgb3IgYnJvd3NlcmlmeSBidW5kbGluZywgdGhpcyBtb2R1bGUgd2lsbCBiZSByZXBsYWNlZCBieSAnZXZlbnRzJ1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL0dvemFsYS9ldmVudHNcbi8qKlxuICogU3RhdGVzIGZvciBCYXRjaC5cbiAqL1xudmFyIEJhdGNoU3RhdGVzO1xuKGZ1bmN0aW9uIChCYXRjaFN0YXRlcykge1xuICAgIEJhdGNoU3RhdGVzW0JhdGNoU3RhdGVzW1wiR29vZFwiXSA9IDBdID0gXCJHb29kXCI7XG4gICAgQmF0Y2hTdGF0ZXNbQmF0Y2hTdGF0ZXNbXCJFcnJvclwiXSA9IDFdID0gXCJFcnJvclwiO1xufSkoQmF0Y2hTdGF0ZXMgfHwgKEJhdGNoU3RhdGVzID0ge30pKTtcbi8qKlxuICogQmF0Y2ggcHJvdmlkZXMgYmFzaWMgcGFyYWxsZWwgZXhlY3V0aW9uIHdpdGggY29uY3VycmVuY3kgbGltaXRzLlxuICogV2lsbCBzdG9wIGV4ZWN1dGUgbGVmdCBvcGVyYXRpb25zIHdoZW4gb25lIG9mIHRoZSBleGVjdXRlZCBvcGVyYXRpb24gdGhyb3dzIGFuIGVycm9yLlxuICogQnV0IEJhdGNoIGNhbm5vdCBjYW5jZWwgb25nb2luZyBvcGVyYXRpb25zLCB5b3UgbmVlZCB0byBjYW5jZWwgdGhlbSBieSB5b3Vyc2VsZi5cbiAqL1xuY2xhc3MgQmF0Y2gge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgQmF0Y2guXG4gICAgICogQHBhcmFtIGNvbmN1cnJlbmN5IC1cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcihjb25jdXJyZW5jeSA9IDUpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIE51bWJlciBvZiBhY3RpdmUgb3BlcmF0aW9ucyB1bmRlciBleGVjdXRpb24uXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmFjdGl2ZXMgPSAwO1xuICAgICAgICAvKipcbiAgICAgICAgICogTnVtYmVyIG9mIGNvbXBsZXRlZCBvcGVyYXRpb25zIHVuZGVyIGV4ZWN1dGlvbi5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY29tcGxldGVkID0gMDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIE9mZnNldCBvZiBuZXh0IG9wZXJhdGlvbiB0byBiZSBleGVjdXRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMub2Zmc2V0ID0gMDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIE9wZXJhdGlvbiBhcnJheSB0byBiZSBleGVjdXRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMub3BlcmF0aW9ucyA9IFtdO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3RhdGVzIG9mIEJhdGNoLiBXaGVuIGFuIGVycm9yIGhhcHBlbnMsIHN0YXRlIHdpbGwgdHVybiBpbnRvIGVycm9yLlxuICAgICAgICAgKiBCYXRjaCB3aWxsIHN0b3AgZXhlY3V0ZSBsZWZ0IG9wZXJhdGlvbnMuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnN0YXRlID0gQmF0Y2hTdGF0ZXMuR29vZDtcbiAgICAgICAgaWYgKGNvbmN1cnJlbmN5IDwgMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJjb25jdXJyZW5jeSBtdXN0IGJlIGxhcmdlciB0aGFuIDBcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb25jdXJyZW5jeSA9IGNvbmN1cnJlbmN5O1xuICAgICAgICB0aGlzLmVtaXR0ZXIgPSBuZXcgZXZlbnRzLkV2ZW50RW1pdHRlcigpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGQgYSBvcGVyYXRpb24gaW50byBxdWV1ZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcGVyYXRpb24gLVxuICAgICAqL1xuICAgIGFkZE9wZXJhdGlvbihvcGVyYXRpb24pIHtcbiAgICAgICAgdGhpcy5vcGVyYXRpb25zLnB1c2goYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZXMrKztcbiAgICAgICAgICAgICAgICBhd2FpdCBvcGVyYXRpb24oKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZXMtLTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbXBsZXRlZCsrO1xuICAgICAgICAgICAgICAgIHRoaXMucGFyYWxsZWxFeGVjdXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdChcImVycm9yXCIsIGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN0YXJ0IGV4ZWN1dGUgb3BlcmF0aW9ucyBpbiB0aGUgcXVldWUuXG4gICAgICpcbiAgICAgKi9cbiAgICBhc3luYyBkbygpIHtcbiAgICAgICAgaWYgKHRoaXMub3BlcmF0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBhcmFsbGVsRXhlY3V0ZSgpO1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLm9uKFwiZmluaXNoXCIsIHJlc29sdmUpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLm9uKFwiZXJyb3JcIiwgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IEJhdGNoU3RhdGVzLkVycm9yO1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCBuZXh0IG9wZXJhdGlvbiB0byBiZSBleGVjdXRlZC4gUmV0dXJuIG51bGwgd2hlbiByZWFjaGluZyBlbmRzLlxuICAgICAqXG4gICAgICovXG4gICAgbmV4dE9wZXJhdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMub2Zmc2V0IDwgdGhpcy5vcGVyYXRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMub3BlcmF0aW9uc1t0aGlzLm9mZnNldCsrXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3RhcnQgZXhlY3V0ZSBvcGVyYXRpb25zLiBPbmUgb25lIHRoZSBtb3N0IGltcG9ydGFudCBkaWZmZXJlbmNlIGJldHdlZW5cbiAgICAgKiB0aGlzIG1ldGhvZCB3aXRoIGRvKCkgaXMgdGhhdCBkbygpIHdyYXBzIGFzIGFuIHN5bmMgbWV0aG9kLlxuICAgICAqXG4gICAgICovXG4gICAgcGFyYWxsZWxFeGVjdXRlKCkge1xuICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gQmF0Y2hTdGF0ZXMuRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jb21wbGV0ZWQgPj0gdGhpcy5vcGVyYXRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoXCJmaW5pc2hcIik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKHRoaXMuYWN0aXZlcyA8IHRoaXMuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wZXJhdGlvbiA9IHRoaXMubmV4dE9wZXJhdGlvbigpO1xuICAgICAgICAgICAgaWYgKG9wZXJhdGlvbikge1xuICAgICAgICAgICAgICAgIG9wZXJhdGlvbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogVGhpcyBjbGFzcyBnZW5lcmF0ZXMgYSByZWFkYWJsZSBzdHJlYW0gZnJvbSB0aGUgZGF0YSBpbiBhbiBhcnJheSBvZiBidWZmZXJzLlxuICovXG5jbGFzcyBCdWZmZXJzU3RyZWFtIGV4dGVuZHMgc3RyZWFtLlJlYWRhYmxlIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIEJ1ZmZlcnNTdHJlYW0gdGhhdCB3aWxsIGVtaXQgdGhlIGRhdGFcbiAgICAgKiBjb250YWluZWQgaW4gdGhlIGFycmF5IG9mIGJ1ZmZlcnMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYnVmZmVycyAtIEFycmF5IG9mIGJ1ZmZlcnMgY29udGFpbmluZyB0aGUgZGF0YVxuICAgICAqIEBwYXJhbSBieXRlTGVuZ3RoIC0gVGhlIHRvdGFsIGxlbmd0aCBvZiBkYXRhIGNvbnRhaW5lZCBpbiB0aGUgYnVmZmVyc1xuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGJ1ZmZlcnMsIGJ5dGVMZW5ndGgsIG9wdGlvbnMpIHtcbiAgICAgICAgc3VwZXIob3B0aW9ucyk7XG4gICAgICAgIHRoaXMuYnVmZmVycyA9IGJ1ZmZlcnM7XG4gICAgICAgIHRoaXMuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGg7XG4gICAgICAgIHRoaXMuYnl0ZU9mZnNldEluQ3VycmVudEJ1ZmZlciA9IDA7XG4gICAgICAgIHRoaXMuYnVmZmVySW5kZXggPSAwO1xuICAgICAgICB0aGlzLnB1c2hlZEJ5dGVzTGVuZ3RoID0gMDtcbiAgICAgICAgLy8gY2hlY2sgYnl0ZUxlbmd0aCBpcyBubyBsYXJnZXIgdGhhbiBidWZmZXJzW10gdG90YWwgbGVuZ3RoXG4gICAgICAgIGxldCBidWZmZXJzTGVuZ3RoID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBidWYgb2YgdGhpcy5idWZmZXJzKSB7XG4gICAgICAgICAgICBidWZmZXJzTGVuZ3RoICs9IGJ1Zi5ieXRlTGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIGlmIChidWZmZXJzTGVuZ3RoIDwgdGhpcy5ieXRlTGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEYXRhIHNpemUgc2hvdWxkbid0IGJlIGxhcmdlciB0aGFuIHRoZSB0b3RhbCBsZW5ndGggb2YgYnVmZmVycy5cIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgX3JlYWQoKSB0aGF0IHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIHN0cmVhbSB3YW50cyB0byBwdWxsIG1vcmUgZGF0YSBpbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzaXplIC0gT3B0aW9uYWwuIFRoZSBzaXplIG9mIGRhdGEgdG8gYmUgcmVhZFxuICAgICAqL1xuICAgIF9yZWFkKHNpemUpIHtcbiAgICAgICAgaWYgKHRoaXMucHVzaGVkQnl0ZXNMZW5ndGggPj0gdGhpcy5ieXRlTGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnB1c2gobnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzaXplKSB7XG4gICAgICAgICAgICBzaXplID0gdGhpcy5yZWFkYWJsZUhpZ2hXYXRlck1hcms7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3V0QnVmZmVycyA9IFtdO1xuICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgIHdoaWxlIChpIDwgc2l6ZSAmJiB0aGlzLnB1c2hlZEJ5dGVzTGVuZ3RoIDwgdGhpcy5ieXRlTGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBUaGUgbGFzdCBidWZmZXIgbWF5IGJlIGxvbmdlciB0aGFuIHRoZSBkYXRhIGl0IGNvbnRhaW5zLlxuICAgICAgICAgICAgY29uc3QgcmVtYWluaW5nRGF0YUluQWxsQnVmZmVycyA9IHRoaXMuYnl0ZUxlbmd0aCAtIHRoaXMucHVzaGVkQnl0ZXNMZW5ndGg7XG4gICAgICAgICAgICBjb25zdCByZW1haW5pbmdDYXBhY2l0eUluVGhpc0J1ZmZlciA9IHRoaXMuYnVmZmVyc1t0aGlzLmJ1ZmZlckluZGV4XS5ieXRlTGVuZ3RoIC0gdGhpcy5ieXRlT2Zmc2V0SW5DdXJyZW50QnVmZmVyO1xuICAgICAgICAgICAgY29uc3QgcmVtYWluaW5nID0gTWF0aC5taW4ocmVtYWluaW5nQ2FwYWNpdHlJblRoaXNCdWZmZXIsIHJlbWFpbmluZ0RhdGFJbkFsbEJ1ZmZlcnMpO1xuICAgICAgICAgICAgaWYgKHJlbWFpbmluZyA+IHNpemUgLSBpKSB7XG4gICAgICAgICAgICAgICAgLy8gY2h1bmtTaXplID0gc2l6ZSAtIGlcbiAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSB0aGlzLmJ5dGVPZmZzZXRJbkN1cnJlbnRCdWZmZXIgKyBzaXplIC0gaTtcbiAgICAgICAgICAgICAgICBvdXRCdWZmZXJzLnB1c2godGhpcy5idWZmZXJzW3RoaXMuYnVmZmVySW5kZXhdLnNsaWNlKHRoaXMuYnl0ZU9mZnNldEluQ3VycmVudEJ1ZmZlciwgZW5kKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5wdXNoZWRCeXRlc0xlbmd0aCArPSBzaXplIC0gaTtcbiAgICAgICAgICAgICAgICB0aGlzLmJ5dGVPZmZzZXRJbkN1cnJlbnRCdWZmZXIgPSBlbmQ7XG4gICAgICAgICAgICAgICAgaSA9IHNpemU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBjaHVua1NpemUgPSByZW1haW5pbmdcbiAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSB0aGlzLmJ5dGVPZmZzZXRJbkN1cnJlbnRCdWZmZXIgKyByZW1haW5pbmc7XG4gICAgICAgICAgICAgICAgb3V0QnVmZmVycy5wdXNoKHRoaXMuYnVmZmVyc1t0aGlzLmJ1ZmZlckluZGV4XS5zbGljZSh0aGlzLmJ5dGVPZmZzZXRJbkN1cnJlbnRCdWZmZXIsIGVuZCkpO1xuICAgICAgICAgICAgICAgIGlmIChyZW1haW5pbmcgPT09IHJlbWFpbmluZ0NhcGFjaXR5SW5UaGlzQnVmZmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuYnVmZmVyc1t0aGlzLmJ1ZmZlckluZGV4XSB1c2VkIHVwLCBzaGlmdCB0byBuZXh0IG9uZVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ5dGVPZmZzZXRJbkN1cnJlbnRCdWZmZXIgPSAwO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlckluZGV4Kys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ5dGVPZmZzZXRJbkN1cnJlbnRCdWZmZXIgPSBlbmQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMucHVzaGVkQnl0ZXNMZW5ndGggKz0gcmVtYWluaW5nO1xuICAgICAgICAgICAgICAgIGkgKz0gcmVtYWluaW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChvdXRCdWZmZXJzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHRoaXMucHVzaChCdWZmZXIuY29uY2F0KG91dEJ1ZmZlcnMpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChvdXRCdWZmZXJzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgdGhpcy5wdXNoKG91dEJ1ZmZlcnNbMF0pO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbmNvbnN0IG1heEJ1ZmZlckxlbmd0aCA9IGJ1ZmZlci5jb25zdGFudHMuTUFYX0xFTkdUSDtcbi8qKlxuICogVGhpcyBjbGFzcyBwcm92aWRlcyBhIGJ1ZmZlciBjb250YWluZXIgd2hpY2ggY29uY2VwdHVhbGx5IGhhcyBubyBoYXJkIHNpemUgbGltaXQuXG4gKiBJdCBhY2NlcHRzIGEgY2FwYWNpdHksIGFuIGFycmF5IG9mIGlucHV0IGJ1ZmZlcnMgYW5kIHRoZSB0b3RhbCBsZW5ndGggb2YgaW5wdXQgZGF0YS5cbiAqIEl0IHdpbGwgYWxsb2NhdGUgYW4gaW50ZXJuYWwgXCJidWZmZXJcIiBvZiB0aGUgY2FwYWNpdHkgYW5kIGZpbGwgdGhlIGRhdGEgaW4gdGhlIGlucHV0IGJ1ZmZlcnNcbiAqIGludG8gdGhlIGludGVybmFsIFwiYnVmZmVyXCIgc2VyaWFsbHkgd2l0aCByZXNwZWN0IHRvIHRoZSB0b3RhbCBsZW5ndGguXG4gKiBUaGVuIGJ5IGNhbGxpbmcgUG9vbGVkQnVmZmVyLmdldFJlYWRhYmxlU3RyZWFtKCksIHlvdSBjYW4gZ2V0IGEgcmVhZGFibGUgc3RyZWFtXG4gKiBhc3NlbWJsZWQgZnJvbSBhbGwgdGhlIGRhdGEgaW4gdGhlIGludGVybmFsIFwiYnVmZmVyXCIuXG4gKi9cbmNsYXNzIFBvb2xlZEJ1ZmZlciB7XG4gICAgLyoqXG4gICAgICogVGhlIHNpemUgb2YgdGhlIGRhdGEgY29udGFpbmVkIGluIHRoZSBwb29sZWQgYnVmZmVycy5cbiAgICAgKi9cbiAgICBnZXQgc2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpemU7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKGNhcGFjaXR5LCBidWZmZXJzLCB0b3RhbExlbmd0aCkge1xuICAgICAgICAvKipcbiAgICAgICAgICogSW50ZXJuYWwgYnVmZmVycyB1c2VkIHRvIGtlZXAgdGhlIGRhdGEuXG4gICAgICAgICAqIEVhY2ggYnVmZmVyIGhhcyBhIGxlbmd0aCBvZiB0aGUgbWF4QnVmZmVyTGVuZ3RoIGV4Y2VwdCBsYXN0IG9uZS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuYnVmZmVycyA9IFtdO1xuICAgICAgICB0aGlzLmNhcGFjaXR5ID0gY2FwYWNpdHk7XG4gICAgICAgIHRoaXMuX3NpemUgPSAwO1xuICAgICAgICAvLyBhbGxvY2F0ZVxuICAgICAgICBjb25zdCBidWZmZXJOdW0gPSBNYXRoLmNlaWwoY2FwYWNpdHkgLyBtYXhCdWZmZXJMZW5ndGgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1ZmZlck51bTsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgbGVuID0gaSA9PT0gYnVmZmVyTnVtIC0gMSA/IGNhcGFjaXR5ICUgbWF4QnVmZmVyTGVuZ3RoIDogbWF4QnVmZmVyTGVuZ3RoO1xuICAgICAgICAgICAgaWYgKGxlbiA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGxlbiA9IG1heEJ1ZmZlckxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYnVmZmVycy5wdXNoKEJ1ZmZlci5hbGxvY1Vuc2FmZShsZW4pKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYnVmZmVycykge1xuICAgICAgICAgICAgdGhpcy5maWxsKGJ1ZmZlcnMsIHRvdGFsTGVuZ3RoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBGaWxsIHRoZSBpbnRlcm5hbCBidWZmZXJzIHdpdGggZGF0YSBpbiB0aGUgaW5wdXQgYnVmZmVycyBzZXJpYWxseVxuICAgICAqIHdpdGggcmVzcGVjdCB0byB0aGUgdG90YWwgbGVuZ3RoIGFuZCB0aGUgdG90YWwgY2FwYWNpdHkgb2YgdGhlIGludGVybmFsIGJ1ZmZlcnMuXG4gICAgICogRGF0YSBjb3BpZWQgd2lsbCBiZSBzaGlmdCBvdXQgb2YgdGhlIGlucHV0IGJ1ZmZlcnMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYnVmZmVycyAtIElucHV0IGJ1ZmZlcnMgY29udGFpbmluZyB0aGUgZGF0YSB0byBiZSBmaWxsZWQgaW4gdGhlIHBvb2xlZCBidWZmZXJcbiAgICAgKiBAcGFyYW0gdG90YWxMZW5ndGggLSBUb3RhbCBsZW5ndGggb2YgdGhlIGRhdGEgdG8gYmUgZmlsbGVkIGluLlxuICAgICAqXG4gICAgICovXG4gICAgZmlsbChidWZmZXJzLCB0b3RhbExlbmd0aCkge1xuICAgICAgICB0aGlzLl9zaXplID0gTWF0aC5taW4odGhpcy5jYXBhY2l0eSwgdG90YWxMZW5ndGgpO1xuICAgICAgICBsZXQgaSA9IDAsIGogPSAwLCB0YXJnZXRPZmZzZXQgPSAwLCBzb3VyY2VPZmZzZXQgPSAwLCB0b3RhbENvcGllZE51bSA9IDA7XG4gICAgICAgIHdoaWxlICh0b3RhbENvcGllZE51bSA8IHRoaXMuX3NpemUpIHtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IGJ1ZmZlcnNbaV07XG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLmJ1ZmZlcnNbal07XG4gICAgICAgICAgICBjb25zdCBjb3BpZWROdW0gPSBzb3VyY2UuY29weSh0YXJnZXQsIHRhcmdldE9mZnNldCwgc291cmNlT2Zmc2V0KTtcbiAgICAgICAgICAgIHRvdGFsQ29waWVkTnVtICs9IGNvcGllZE51bTtcbiAgICAgICAgICAgIHNvdXJjZU9mZnNldCArPSBjb3BpZWROdW07XG4gICAgICAgICAgICB0YXJnZXRPZmZzZXQgKz0gY29waWVkTnVtO1xuICAgICAgICAgICAgaWYgKHNvdXJjZU9mZnNldCA9PT0gc291cmNlLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICBzb3VyY2VPZmZzZXQgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRhcmdldE9mZnNldCA9PT0gdGFyZ2V0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGorKztcbiAgICAgICAgICAgICAgICB0YXJnZXRPZmZzZXQgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGNsZWFyIGNvcGllZCBmcm9tIHNvdXJjZSBidWZmZXJzXG4gICAgICAgIGJ1ZmZlcnMuc3BsaWNlKDAsIGkpO1xuICAgICAgICBpZiAoYnVmZmVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBidWZmZXJzWzBdID0gYnVmZmVyc1swXS5zbGljZShzb3VyY2VPZmZzZXQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgcmVhZGFibGUgc3RyZWFtIGFzc2VtYmxlZCBmcm9tIGFsbCB0aGUgZGF0YSBpbiB0aGUgaW50ZXJuYWwgYnVmZmVycy5cbiAgICAgKlxuICAgICAqL1xuICAgIGdldFJlYWRhYmxlU3RyZWFtKCkge1xuICAgICAgICByZXR1cm4gbmV3IEJ1ZmZlcnNTdHJlYW0odGhpcy5idWZmZXJzLCB0aGlzLnNpemUpO1xuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIFRoaXMgY2xhc3MgYWNjZXB0cyBhIE5vZGUuanMgUmVhZGFibGUgc3RyZWFtIGFzIGlucHV0LCBhbmQga2VlcHMgcmVhZGluZyBkYXRhXG4gKiBmcm9tIHRoZSBzdHJlYW0gaW50byB0aGUgaW50ZXJuYWwgYnVmZmVyIHN0cnVjdHVyZSwgdW50aWwgaXQgcmVhY2hlcyBtYXhCdWZmZXJzLlxuICogRXZlcnkgYXZhaWxhYmxlIGJ1ZmZlciB3aWxsIHRyeSB0byB0cmlnZ2VyIG91dGdvaW5nSGFuZGxlci5cbiAqXG4gKiBUaGUgaW50ZXJuYWwgYnVmZmVyIHN0cnVjdHVyZSBpbmNsdWRlcyBhbiBpbmNvbWluZyBidWZmZXIgYXJyYXksIGFuZCBhIG91dGdvaW5nXG4gKiBidWZmZXIgYXJyYXkuIFRoZSBpbmNvbWluZyBidWZmZXIgYXJyYXkgaW5jbHVkZXMgdGhlIFwiZW1wdHlcIiBidWZmZXJzIGNhbiBiZSBmaWxsZWRcbiAqIHdpdGggbmV3IGluY29taW5nIGRhdGEuIFRoZSBvdXRnb2luZyBhcnJheSBpbmNsdWRlcyB0aGUgZmlsbGVkIGJ1ZmZlcnMgdG8gYmVcbiAqIGhhbmRsZWQgYnkgb3V0Z29pbmdIYW5kbGVyLiBFdmVyeSBhYm92ZSBidWZmZXIgc2l6ZSBpcyBkZWZpbmVkIGJ5IHBhcmFtZXRlciBidWZmZXJTaXplLlxuICpcbiAqIE5VTV9PRl9BTExfQlVGRkVSUyA9IEJVRkZFUlNfSU5fSU5DT01JTkcgKyBCVUZGRVJTX0lOX09VVEdPSU5HICsgQlVGRkVSU19VTkRFUl9IQU5ETElOR1xuICpcbiAqIE5VTV9PRl9BTExfQlVGRkVSUyBsZXNzZXIgdGhhbiBvciBlcXVhbCB0byBtYXhCdWZmZXJzXG4gKlxuICogUEVSRk9STUFOQ0UgSU1QUk9WRU1FTlQgVElQUzpcbiAqIDEuIElucHV0IHN0cmVhbSBoaWdoV2F0ZXJNYXJrIGlzIGJldHRlciB0byBzZXQgYSBzYW1lIHZhbHVlIHdpdGggYnVmZmVyU2l6ZVxuICogICAgcGFyYW1ldGVyLCB3aGljaCB3aWxsIGF2b2lkIEJ1ZmZlci5jb25jYXQoKSBvcGVyYXRpb25zLlxuICogMi4gY29uY3VycmVuY3kgc2hvdWxkIHNldCBhIHNtYWxsZXIgdmFsdWUgdGhhbiBtYXhCdWZmZXJzLCB3aGljaCBpcyBoZWxwZnVsIHRvXG4gKiAgICByZWR1Y2UgdGhlIHBvc3NpYmlsaXR5IHdoZW4gYSBvdXRnb2luZyBoYW5kbGVyIHdhaXRzIGZvciB0aGUgc3RyZWFtIGRhdGEuXG4gKiAgICBpbiB0aGlzIHNpdHVhdGlvbiwgb3V0Z29pbmcgaGFuZGxlcnMgYXJlIGJsb2NrZWQuXG4gKiAgICBPdXRnb2luZyBxdWV1ZSBzaG91bGRuJ3QgYmUgZW1wdHkuXG4gKi9cbmNsYXNzIEJ1ZmZlclNjaGVkdWxlciB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBCdWZmZXJTY2hlZHVsZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVhZGFibGUgLSBBIE5vZGUuanMgUmVhZGFibGUgc3RyZWFtXG4gICAgICogQHBhcmFtIGJ1ZmZlclNpemUgLSBCdWZmZXIgc2l6ZSBvZiBldmVyeSBtYWludGFpbmVkIGJ1ZmZlclxuICAgICAqIEBwYXJhbSBtYXhCdWZmZXJzIC0gSG93IG1hbnkgYnVmZmVycyBjYW4gYmUgYWxsb2NhdGVkXG4gICAgICogQHBhcmFtIG91dGdvaW5nSGFuZGxlciAtIEFuIGFzeW5jIGZ1bmN0aW9uIHNjaGVkdWxlZCB0byBiZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcmVkIHdoZW4gYSBidWZmZXIgZnVsbHkgZmlsbGVkXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHN0cmVhbSBkYXRhXG4gICAgICogQHBhcmFtIGNvbmN1cnJlbmN5IC0gQ29uY3VycmVuY3kgb2YgZXhlY3V0aW5nIG91dGdvaW5nSGFuZGxlcnMgKD4wKVxuICAgICAqIEBwYXJhbSBlbmNvZGluZyAtIFtPcHRpb25hbF0gRW5jb2Rpbmcgb2YgUmVhZGFibGUgc3RyZWFtIHdoZW4gaXQncyBhIHN0cmluZyBzdHJlYW1cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihyZWFkYWJsZSwgYnVmZmVyU2l6ZSwgbWF4QnVmZmVycywgb3V0Z29pbmdIYW5kbGVyLCBjb25jdXJyZW5jeSwgZW5jb2RpbmcpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFuIGludGVybmFsIGV2ZW50IGVtaXR0ZXIuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmVtaXR0ZXIgPSBuZXcgZXZlbnRzLkV2ZW50RW1pdHRlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogQW4gaW50ZXJuYWwgb2Zmc2V0IG1hcmtlciB0byB0cmFjayBkYXRhIG9mZnNldCBpbiBieXRlcyBvZiBuZXh0IG91dGdvaW5nSGFuZGxlci5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMub2Zmc2V0ID0gMDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFuIGludGVybmFsIG1hcmtlciB0byB0cmFjayB3aGV0aGVyIHN0cmVhbSBpcyBlbmQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmlzU3RyZWFtRW5kID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBbiBpbnRlcm5hbCBtYXJrZXIgdG8gdHJhY2sgd2hldGhlciBzdHJlYW0gb3Igb3V0Z29pbmdIYW5kbGVyIHJldHVybnMgZXJyb3IuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmlzRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEhvdyBtYW55IGhhbmRsZXJzIGFyZSBleGVjdXRpbmcuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmV4ZWN1dGluZ091dGdvaW5nSGFuZGxlcnMgPSAwO1xuICAgICAgICAvKipcbiAgICAgICAgICogSG93IG1hbnkgYnVmZmVycyBoYXZlIGJlZW4gYWxsb2NhdGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5udW1CdWZmZXJzID0gMDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEJlY2F1c2UgdGhpcyBjbGFzcyBkb2Vzbid0IGtub3cgaG93IG11Y2ggZGF0YSBldmVyeSB0aW1lIHN0cmVhbSBwb3BzLCB3aGljaFxuICAgICAgICAgKiBpcyBkZWZpbmVkIGJ5IGhpZ2hXYXRlck1hcmtlciBvZiB0aGUgc3RyZWFtLiBTbyBCdWZmZXJTY2hlZHVsZXIgd2lsbCBjYWNoZVxuICAgICAgICAgKiBkYXRhIHJlY2VpdmVkIGZyb20gdGhlIHN0cmVhbSwgd2hlbiBkYXRhIGluIHVucmVzb2x2ZWREYXRhQXJyYXkgZXhjZWVkcyB0aGVcbiAgICAgICAgICogYmxvY2tTaXplIGRlZmluZWQsIGl0IHdpbGwgdHJ5IHRvIGNvbmNhdCBhIGJsb2NrU2l6ZSBvZiBidWZmZXIsIGZpbGwgaW50byBhdmFpbGFibGVcbiAgICAgICAgICogYnVmZmVycyBmcm9tIGluY29taW5nIGFuZCBwdXNoIHRvIG91dGdvaW5nIGFycmF5LlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy51bnJlc29sdmVkRGF0YUFycmF5ID0gW107XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBIb3cgbXVjaCBkYXRhIGNvbnNpc3RlZCBpbiB1bnJlc29sdmVkRGF0YUFycmF5LlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy51bnJlc29sdmVkTGVuZ3RoID0gMDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBhcnJheSBpbmNsdWRlcyBhbGwgdGhlIGF2YWlsYWJsZSBidWZmZXJzIGNhbiBiZSB1c2VkIHRvIGZpbGwgZGF0YSBmcm9tIHN0cmVhbS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuaW5jb21pbmcgPSBbXTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBhcnJheSAocXVldWUpIGluY2x1ZGVzIGFsbCB0aGUgYnVmZmVycyBmaWxsZWQgZnJvbSBzdHJlYW0gZGF0YS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMub3V0Z29pbmcgPSBbXTtcbiAgICAgICAgaWYgKGJ1ZmZlclNpemUgPD0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYGJ1ZmZlclNpemUgbXVzdCBiZSBsYXJnZXIgdGhhbiAwLCBjdXJyZW50IGlzICR7YnVmZmVyU2l6ZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF4QnVmZmVycyA8PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgbWF4QnVmZmVycyBtdXN0IGJlIGxhcmdlciB0aGFuIDAsIGN1cnJlbnQgaXMgJHttYXhCdWZmZXJzfWApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb25jdXJyZW5jeSA8PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgY29uY3VycmVuY3kgbXVzdCBiZSBsYXJnZXIgdGhhbiAwLCBjdXJyZW50IGlzICR7Y29uY3VycmVuY3l9YCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5idWZmZXJTaXplID0gYnVmZmVyU2l6ZTtcbiAgICAgICAgdGhpcy5tYXhCdWZmZXJzID0gbWF4QnVmZmVycztcbiAgICAgICAgdGhpcy5yZWFkYWJsZSA9IHJlYWRhYmxlO1xuICAgICAgICB0aGlzLm91dGdvaW5nSGFuZGxlciA9IG91dGdvaW5nSGFuZGxlcjtcbiAgICAgICAgdGhpcy5jb25jdXJyZW5jeSA9IGNvbmN1cnJlbmN5O1xuICAgICAgICB0aGlzLmVuY29kaW5nID0gZW5jb2Rpbmc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN0YXJ0IHRoZSBzY2hlZHVsZXIsIHdpbGwgcmV0dXJuIGVycm9yIHdoZW4gc3RyZWFtIG9mIGFueSBvZiB0aGUgb3V0Z29pbmdIYW5kbGVyc1xuICAgICAqIHJldHVybnMgZXJyb3IuXG4gICAgICpcbiAgICAgKi9cbiAgICBhc3luYyBkbygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVhZGFibGUub24oXCJkYXRhXCIsIChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiID8gQnVmZmVyLmZyb20oZGF0YSwgdGhpcy5lbmNvZGluZykgOiBkYXRhO1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kVW5yZXNvbHZlZERhdGEoZGF0YSk7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnJlc29sdmVEYXRhKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWFkYWJsZS5wYXVzZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5yZWFkYWJsZS5vbihcImVycm9yXCIsIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdChcImVycm9yXCIsIGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMucmVhZGFibGUub24oXCJlbmRcIiwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNTdHJlYW1FbmQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KFwiY2hlY2tFbmRcIik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5vbihcImVycm9yXCIsIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzRXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMucmVhZGFibGUucGF1c2UoKTtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLm9uKFwiY2hlY2tFbmRcIiwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm91dGdvaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyT3V0Z29pbmdIYW5kbGVycygpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzU3RyZWFtRW5kICYmIHRoaXMuZXhlY3V0aW5nT3V0Z29pbmdIYW5kbGVycyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy51bnJlc29sdmVkTGVuZ3RoID4gMCAmJiB0aGlzLnVucmVzb2x2ZWRMZW5ndGggPCB0aGlzLmJ1ZmZlclNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ1ZmZlciA9IHRoaXMuc2hpZnRCdWZmZXJGcm9tVW5yZXNvbHZlZERhdGFBcnJheSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vdXRnb2luZ0hhbmRsZXIoKCkgPT4gYnVmZmVyLmdldFJlYWRhYmxlU3RyZWFtKCksIGJ1ZmZlci5zaXplLCB0aGlzLm9mZnNldClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbihyZXNvbHZlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jYXRjaChyZWplY3QpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMudW5yZXNvbHZlZExlbmd0aCA+PSB0aGlzLmJ1ZmZlclNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSW5zZXJ0IGEgbmV3IGRhdGEgaW50byB1bnJlc29sdmVkIGFycmF5LlxuICAgICAqXG4gICAgICogQHBhcmFtIGRhdGEgLVxuICAgICAqL1xuICAgIGFwcGVuZFVucmVzb2x2ZWREYXRhKGRhdGEpIHtcbiAgICAgICAgdGhpcy51bnJlc29sdmVkRGF0YUFycmF5LnB1c2goZGF0YSk7XG4gICAgICAgIHRoaXMudW5yZXNvbHZlZExlbmd0aCArPSBkYXRhLmxlbmd0aDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVHJ5IHRvIHNoaWZ0IGEgYnVmZmVyIHdpdGggc2l6ZSBpbiBibG9ja1NpemUuIFRoZSBidWZmZXIgcmV0dXJuZWQgbWF5IGJlIGxlc3NcbiAgICAgKiB0aGFuIGJsb2NrU2l6ZSB3aGVuIGRhdGEgaW4gdW5yZXNvbHZlZERhdGFBcnJheSBpcyBsZXNzIHRoYW4gYnVmZmVyU2l6ZS5cbiAgICAgKlxuICAgICAqL1xuICAgIHNoaWZ0QnVmZmVyRnJvbVVucmVzb2x2ZWREYXRhQXJyYXkoYnVmZmVyKSB7XG4gICAgICAgIGlmICghYnVmZmVyKSB7XG4gICAgICAgICAgICBidWZmZXIgPSBuZXcgUG9vbGVkQnVmZmVyKHRoaXMuYnVmZmVyU2l6ZSwgdGhpcy51bnJlc29sdmVkRGF0YUFycmF5LCB0aGlzLnVucmVzb2x2ZWRMZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYnVmZmVyLmZpbGwodGhpcy51bnJlc29sdmVkRGF0YUFycmF5LCB0aGlzLnVucmVzb2x2ZWRMZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudW5yZXNvbHZlZExlbmd0aCAtPSBidWZmZXIuc2l6ZTtcbiAgICAgICAgcmV0dXJuIGJ1ZmZlcjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVzb2x2ZSBkYXRhIGluIHVucmVzb2x2ZWREYXRhQXJyYXkuIEZvciBldmVyeSBidWZmZXIgd2l0aCBzaXplIGluIGJsb2NrU2l6ZVxuICAgICAqIHNoaWZ0ZWQsIGl0IHdpbGwgdHJ5IHRvIGdldCAob3IgYWxsb2NhdGUgYSBidWZmZXIpIGZyb20gaW5jb21pbmcsIGFuZCBmaWxsIGl0LFxuICAgICAqIHRoZW4gcHVzaCBpdCBpbnRvIG91dGdvaW5nIHRvIGJlIGhhbmRsZWQgYnkgb3V0Z29pbmcgaGFuZGxlci5cbiAgICAgKlxuICAgICAqIFJldHVybiBmYWxzZSB3aGVuIGF2YWlsYWJsZSBidWZmZXJzIGluIGluY29taW5nIGFyZSBub3QgZW5vdWdoLCBlbHNlIHRydWUuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBSZXR1cm4gZmFsc2Ugd2hlbiBidWZmZXJzIGluIGluY29taW5nIGFyZSBub3QgZW5vdWdoLCBlbHNlIHRydWUuXG4gICAgICovXG4gICAgcmVzb2x2ZURhdGEoKSB7XG4gICAgICAgIHdoaWxlICh0aGlzLnVucmVzb2x2ZWRMZW5ndGggPj0gdGhpcy5idWZmZXJTaXplKSB7XG4gICAgICAgICAgICBsZXQgYnVmZmVyO1xuICAgICAgICAgICAgaWYgKHRoaXMuaW5jb21pbmcubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGJ1ZmZlciA9IHRoaXMuaW5jb21pbmcuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNoaWZ0QnVmZmVyRnJvbVVucmVzb2x2ZWREYXRhQXJyYXkoYnVmZmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm51bUJ1ZmZlcnMgPCB0aGlzLm1heEJ1ZmZlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgYnVmZmVyID0gdGhpcy5zaGlmdEJ1ZmZlckZyb21VbnJlc29sdmVkRGF0YUFycmF5KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubnVtQnVmZmVycysrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gTm8gYXZhaWxhYmxlIGJ1ZmZlciwgd2FpdCBmb3IgYnVmZmVyIHJldHVybmVkXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm91dGdvaW5nLnB1c2goYnVmZmVyKTtcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlck91dGdvaW5nSGFuZGxlcnMoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVHJ5IHRvIHRyaWdnZXIgYSBvdXRnb2luZyBoYW5kbGVyIGZvciBldmVyeSBidWZmZXIgaW4gb3V0Z29pbmcuIFN0b3Agd2hlblxuICAgICAqIGNvbmN1cnJlbmN5IHJlYWNoZXMuXG4gICAgICovXG4gICAgYXN5bmMgdHJpZ2dlck91dGdvaW5nSGFuZGxlcnMoKSB7XG4gICAgICAgIGxldCBidWZmZXI7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmV4ZWN1dGluZ091dGdvaW5nSGFuZGxlcnMgPj0gdGhpcy5jb25jdXJyZW5jeSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJ1ZmZlciA9IHRoaXMub3V0Z29pbmcuc2hpZnQoKTtcbiAgICAgICAgICAgIGlmIChidWZmZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXJPdXRnb2luZ0hhbmRsZXIoYnVmZmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSB3aGlsZSAoYnVmZmVyKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVHJpZ2dlciBhIG91dGdvaW5nIGhhbmRsZXIgZm9yIGEgYnVmZmVyIHNoaWZ0ZWQgZnJvbSBvdXRnb2luZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBidWZmZXIgLVxuICAgICAqL1xuICAgIGFzeW5jIHRyaWdnZXJPdXRnb2luZ0hhbmRsZXIoYnVmZmVyKSB7XG4gICAgICAgIGNvbnN0IGJ1ZmZlckxlbmd0aCA9IGJ1ZmZlci5zaXplO1xuICAgICAgICB0aGlzLmV4ZWN1dGluZ091dGdvaW5nSGFuZGxlcnMrKztcbiAgICAgICAgdGhpcy5vZmZzZXQgKz0gYnVmZmVyTGVuZ3RoO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5vdXRnb2luZ0hhbmRsZXIoKCkgPT4gYnVmZmVyLmdldFJlYWRhYmxlU3RyZWFtKCksIGJ1ZmZlckxlbmd0aCwgdGhpcy5vZmZzZXQgLSBidWZmZXJMZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KFwiZXJyb3JcIiwgZXJyKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmV4ZWN1dGluZ091dGdvaW5nSGFuZGxlcnMtLTtcbiAgICAgICAgdGhpcy5yZXVzZUJ1ZmZlcihidWZmZXIpO1xuICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdChcImNoZWNrRW5kXCIpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYnVmZmVyIHVzZWQgYnkgb3V0Z29pbmcgaGFuZGxlciBpbnRvIGluY29taW5nLlxuICAgICAqXG4gICAgICogQHBhcmFtIGJ1ZmZlciAtXG4gICAgICovXG4gICAgcmV1c2VCdWZmZXIoYnVmZmVyKSB7XG4gICAgICAgIHRoaXMuaW5jb21pbmcucHVzaChidWZmZXIpO1xuICAgICAgICBpZiAoIXRoaXMuaXNFcnJvciAmJiB0aGlzLnJlc29sdmVEYXRhKCkgJiYgIXRoaXMuaXNTdHJlYW1FbmQpIHtcbiAgICAgICAgICAgIHRoaXMucmVhZGFibGUucmVzdW1lKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBSZWFkcyBhIHJlYWRhYmxlIHN0cmVhbSBpbnRvIGJ1ZmZlci4gRmlsbCB0aGUgYnVmZmVyIGZyb20gb2Zmc2V0IHRvIGVuZC5cbiAqXG4gKiBAcGFyYW0gc3RyZWFtIC0gQSBOb2RlLmpzIFJlYWRhYmxlIHN0cmVhbVxuICogQHBhcmFtIGJ1ZmZlciAtIEJ1ZmZlciB0byBiZSBmaWxsZWQsIGxlbmd0aCBtdXN0IGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBvZmZzZXRcbiAqIEBwYXJhbSBvZmZzZXQgLSBGcm9tIHdoaWNoIHBvc2l0aW9uIGluIHRoZSBidWZmZXIgdG8gYmUgZmlsbGVkLCBpbmNsdXNpdmVcbiAqIEBwYXJhbSBlbmQgLSBUbyB3aGljaCBwb3NpdGlvbiBpbiB0aGUgYnVmZmVyIHRvIGJlIGZpbGxlZCwgZXhjbHVzaXZlXG4gKiBAcGFyYW0gZW5jb2RpbmcgLSBFbmNvZGluZyBvZiB0aGUgUmVhZGFibGUgc3RyZWFtXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHN0cmVhbVRvQnVmZmVyKHN0cmVhbSwgYnVmZmVyLCBvZmZzZXQsIGVuZCwgZW5jb2RpbmcpIHtcbiAgICBsZXQgcG9zID0gMDsgLy8gUG9zaXRpb24gaW4gc3RyZWFtXG4gICAgY29uc3QgY291bnQgPSBlbmQgLSBvZmZzZXQ7IC8vIFRvdGFsIGFtb3VudCBvZiBkYXRhIG5lZWRlZCBpbiBzdHJlYW1cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiByZWplY3QobmV3IEVycm9yKGBUaGUgb3BlcmF0aW9uIGNhbm5vdCBiZSBjb21wbGV0ZWQgaW4gdGltZW91dC5gKSksIFJFUVVFU1RfVElNRU9VVCk7XG4gICAgICAgIHN0cmVhbS5vbihcInJlYWRhYmxlXCIsICgpID0+IHtcbiAgICAgICAgICAgIGlmIChwb3MgPj0gY291bnQpIHtcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBjaHVuayA9IHN0cmVhbS5yZWFkKCk7XG4gICAgICAgICAgICBpZiAoIWNodW5rKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBjaHVuayA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIGNodW5rID0gQnVmZmVyLmZyb20oY2h1bmssIGVuY29kaW5nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEhvdyBtdWNoIGRhdGEgbmVlZGVkIGluIHRoaXMgY2h1bmtcbiAgICAgICAgICAgIGNvbnN0IGNodW5rTGVuZ3RoID0gcG9zICsgY2h1bmsubGVuZ3RoID4gY291bnQgPyBjb3VudCAtIHBvcyA6IGNodW5rLmxlbmd0aDtcbiAgICAgICAgICAgIGJ1ZmZlci5maWxsKGNodW5rLnNsaWNlKDAsIGNodW5rTGVuZ3RoKSwgb2Zmc2V0ICsgcG9zLCBvZmZzZXQgKyBwb3MgKyBjaHVua0xlbmd0aCk7XG4gICAgICAgICAgICBwb3MgKz0gY2h1bmtMZW5ndGg7XG4gICAgICAgIH0pO1xuICAgICAgICBzdHJlYW0ub24oXCJlbmRcIiwgKCkgPT4ge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgICAgaWYgKHBvcyA8IGNvdW50KSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgU3RyZWFtIGRyYWlucyBiZWZvcmUgZ2V0dGluZyBlbm91Z2ggZGF0YSBuZWVkZWQuIERhdGEgcmVhZDogJHtwb3N9LCBkYXRhIG5lZWQ6ICR7Y291bnR9YCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgc3RyZWFtLm9uKFwiZXJyb3JcIiwgKG1zZykgPT4ge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgICAgcmVqZWN0KG1zZyk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuLyoqXG4gKiBSZWFkcyBhIHJlYWRhYmxlIHN0cmVhbSBpbnRvIGJ1ZmZlciBlbnRpcmVseS5cbiAqXG4gKiBAcGFyYW0gc3RyZWFtIC0gQSBOb2RlLmpzIFJlYWRhYmxlIHN0cmVhbVxuICogQHBhcmFtIGJ1ZmZlciAtIEJ1ZmZlciB0byBiZSBmaWxsZWQsIGxlbmd0aCBtdXN0IGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBvZmZzZXRcbiAqIEBwYXJhbSBlbmNvZGluZyAtIEVuY29kaW5nIG9mIHRoZSBSZWFkYWJsZSBzdHJlYW1cbiAqIEByZXR1cm5zIHdpdGggdGhlIGNvdW50IG9mIGJ5dGVzIHJlYWQuXG4gKiBAdGhyb3dzIGBSYW5nZUVycm9yYCBJZiBidWZmZXIgc2l6ZSBpcyBub3QgYmlnIGVub3VnaC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc3RyZWFtVG9CdWZmZXIyKHN0cmVhbSwgYnVmZmVyLCBlbmNvZGluZykge1xuICAgIGxldCBwb3MgPSAwOyAvLyBQb3NpdGlvbiBpbiBzdHJlYW1cbiAgICBjb25zdCBidWZmZXJTaXplID0gYnVmZmVyLmxlbmd0aDtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBzdHJlYW0ub24oXCJyZWFkYWJsZVwiLCAoKSA9PiB7XG4gICAgICAgICAgICBsZXQgY2h1bmsgPSBzdHJlYW0ucmVhZCgpO1xuICAgICAgICAgICAgaWYgKCFjaHVuaykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgY2h1bmsgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBjaHVuayA9IEJ1ZmZlci5mcm9tKGNodW5rLCBlbmNvZGluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocG9zICsgY2h1bmsubGVuZ3RoID4gYnVmZmVyU2l6ZSkge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYFN0cmVhbSBleGNlZWRzIGJ1ZmZlciBzaXplLiBCdWZmZXIgc2l6ZTogJHtidWZmZXJTaXplfWApKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBidWZmZXIuZmlsbChjaHVuaywgcG9zLCBwb3MgKyBjaHVuay5sZW5ndGgpO1xuICAgICAgICAgICAgcG9zICs9IGNodW5rLmxlbmd0aDtcbiAgICAgICAgfSk7XG4gICAgICAgIHN0cmVhbS5vbihcImVuZFwiLCAoKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKHBvcyk7XG4gICAgICAgIH0pO1xuICAgICAgICBzdHJlYW0ub24oXCJlcnJvclwiLCByZWplY3QpO1xuICAgIH0pO1xufVxuLyoqXG4gKiBPTkxZIEFWQUlMQUJMRSBJTiBOT0RFLkpTIFJVTlRJTUUuXG4gKlxuICogV3JpdGVzIHRoZSBjb250ZW50IG9mIGEgcmVhZHN0cmVhbSB0byBhIGxvY2FsIGZpbGUuIFJldHVybnMgYSBQcm9taXNlIHdoaWNoIGlzIGNvbXBsZXRlZCBhZnRlciB0aGUgZmlsZSBoYW5kbGUgaXMgY2xvc2VkLlxuICpcbiAqIEBwYXJhbSBycyAtIFRoZSByZWFkIHN0cmVhbS5cbiAqIEBwYXJhbSBmaWxlIC0gRGVzdGluYXRpb24gZmlsZSBwYXRoLlxuICovXG5hc3luYyBmdW5jdGlvbiByZWFkU3RyZWFtVG9Mb2NhbEZpbGUocnMsIGZpbGUpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCB3cyA9IGZzX19uYW1lc3BhY2UuY3JlYXRlV3JpdGVTdHJlYW0oZmlsZSk7XG4gICAgICAgIHJzLm9uKFwiZXJyb3JcIiwgKGVycikgPT4ge1xuICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH0pO1xuICAgICAgICB3cy5vbihcImVycm9yXCIsIChlcnIpID0+IHtcbiAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9KTtcbiAgICAgICAgd3Mub24oXCJjbG9zZVwiLCByZXNvbHZlKTtcbiAgICAgICAgcnMucGlwZSh3cyk7XG4gICAgfSk7XG59XG4vKipcbiAqIE9OTFkgQVZBSUxBQkxFIElOIE5PREUuSlMgUlVOVElNRS5cbiAqXG4gKiBQcm9taXNpZmllZCB2ZXJzaW9uIG9mIGZzLnN0YXQoKS5cbiAqL1xuY29uc3QgZnNTdGF0ID0gdXRpbF9fbmFtZXNwYWNlLnByb21pc2lmeShmc19fbmFtZXNwYWNlLnN0YXQpO1xuY29uc3QgZnNDcmVhdGVSZWFkU3RyZWFtID0gZnNfX25hbWVzcGFjZS5jcmVhdGVSZWFkU3RyZWFtO1xuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogQSBCbG9iQ2xpZW50IHJlcHJlc2VudHMgYSBVUkwgdG8gYW4gQXp1cmUgU3RvcmFnZSBibG9iOyB0aGUgYmxvYiBtYXkgYmUgYSBibG9jayBibG9iLFxuICogYXBwZW5kIGJsb2IsIG9yIHBhZ2UgYmxvYi5cbiAqL1xuY2xhc3MgQmxvYkNsaWVudCBleHRlbmRzIFN0b3JhZ2VDbGllbnQge1xuICAgIC8qKlxuICAgICAqIFRoZSBuYW1lIG9mIHRoZSBibG9iLlxuICAgICAqL1xuICAgIGdldCBuYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbmFtZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgb2YgdGhlIHN0b3JhZ2UgY29udGFpbmVyIHRoZSBibG9iIGlzIGFzc29jaWF0ZWQgd2l0aC5cbiAgICAgKi9cbiAgICBnZXQgY29udGFpbmVyTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRhaW5lck5hbWU7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKHVybE9yQ29ubmVjdGlvblN0cmluZywgY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUsIGJsb2JOYW1lT3JPcHRpb25zLCBcbiAgICAvLyBMZWdhY3ksIG5vIGZpeCBmb3IgZXNsaW50IGVycm9yIHdpdGhvdXQgYnJlYWtpbmcuIERpc2FibGUgaXQgZm9yIHRoaXMgaW50ZXJmYWNlLlxuICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYXp1cmUvYXp1cmUtc2RrL3RzLW5hbWluZy1vcHRpb25zKi9cbiAgICBvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgICAgICBsZXQgcGlwZWxpbmU7XG4gICAgICAgIGxldCB1cmw7XG4gICAgICAgIGlmIChpc1BpcGVsaW5lTGlrZShjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSkpIHtcbiAgICAgICAgICAgIC8vICh1cmw6IHN0cmluZywgcGlwZWxpbmU6IFBpcGVsaW5lKVxuICAgICAgICAgICAgdXJsID0gdXJsT3JDb25uZWN0aW9uU3RyaW5nO1xuICAgICAgICAgICAgcGlwZWxpbmUgPSBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICgoY29yZVV0aWwuaXNOb2RlICYmIGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lIGluc3RhbmNlb2YgU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwpIHx8XG4gICAgICAgICAgICBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSBpbnN0YW5jZW9mIEFub255bW91c0NyZWRlbnRpYWwgfHxcbiAgICAgICAgICAgIGNvcmVBdXRoLmlzVG9rZW5DcmVkZW50aWFsKGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lKSkge1xuICAgICAgICAgICAgLy8gKHVybDogc3RyaW5nLCBjcmVkZW50aWFsPzogU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwgfCBBbm9ueW1vdXNDcmVkZW50aWFsIHwgVG9rZW5DcmVkZW50aWFsLCBvcHRpb25zPzogU3RvcmFnZVBpcGVsaW5lT3B0aW9ucylcbiAgICAgICAgICAgIHVybCA9IHVybE9yQ29ubmVjdGlvblN0cmluZztcbiAgICAgICAgICAgIG9wdGlvbnMgPSBibG9iTmFtZU9yT3B0aW9ucztcbiAgICAgICAgICAgIHBpcGVsaW5lID0gbmV3UGlwZWxpbmUoY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSAmJlxuICAgICAgICAgICAgdHlwZW9mIGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAvLyAodXJsOiBzdHJpbmcsIGNyZWRlbnRpYWw/OiBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbCB8IEFub255bW91c0NyZWRlbnRpYWwgfCBUb2tlbkNyZWRlbnRpYWwsIG9wdGlvbnM/OiBTdG9yYWdlUGlwZWxpbmVPcHRpb25zKVxuICAgICAgICAgICAgLy8gVGhlIHNlY29uZCBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkLiBVc2UgYW5vbnltb3VzIGNyZWRlbnRpYWwuXG4gICAgICAgICAgICB1cmwgPSB1cmxPckNvbm5lY3Rpb25TdHJpbmc7XG4gICAgICAgICAgICBpZiAoYmxvYk5hbWVPck9wdGlvbnMgJiYgdHlwZW9mIGJsb2JOYW1lT3JPcHRpb25zICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucyA9IGJsb2JOYW1lT3JPcHRpb25zO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGlwZWxpbmUgPSBuZXdQaXBlbGluZShuZXcgQW5vbnltb3VzQ3JlZGVudGlhbCgpLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSAmJlxuICAgICAgICAgICAgdHlwZW9mIGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lID09PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICBibG9iTmFtZU9yT3B0aW9ucyAmJlxuICAgICAgICAgICAgdHlwZW9mIGJsb2JOYW1lT3JPcHRpb25zID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAvLyAoY29ubmVjdGlvblN0cmluZzogc3RyaW5nLCBjb250YWluZXJOYW1lOiBzdHJpbmcsIGJsb2JOYW1lOiBzdHJpbmcsIG9wdGlvbnM/OiBTdG9yYWdlUGlwZWxpbmVPcHRpb25zKVxuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyTmFtZSA9IGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lO1xuICAgICAgICAgICAgY29uc3QgYmxvYk5hbWUgPSBibG9iTmFtZU9yT3B0aW9ucztcbiAgICAgICAgICAgIGNvbnN0IGV4dHJhY3RlZENyZWRzID0gZXh0cmFjdENvbm5lY3Rpb25TdHJpbmdQYXJ0cyh1cmxPckNvbm5lY3Rpb25TdHJpbmcpO1xuICAgICAgICAgICAgaWYgKGV4dHJhY3RlZENyZWRzLmtpbmQgPT09IFwiQWNjb3VudENvbm5TdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIGlmIChjb3JlVXRpbC5pc05vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2hhcmVkS2V5Q3JlZGVudGlhbCA9IG5ldyBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbChleHRyYWN0ZWRDcmVkcy5hY2NvdW50TmFtZSwgZXh0cmFjdGVkQ3JlZHMuYWNjb3VudEtleSk7XG4gICAgICAgICAgICAgICAgICAgIHVybCA9IGFwcGVuZFRvVVJMUGF0aChhcHBlbmRUb1VSTFBhdGgoZXh0cmFjdGVkQ3JlZHMudXJsLCBlbmNvZGVVUklDb21wb25lbnQoY29udGFpbmVyTmFtZSkpLCBlbmNvZGVVUklDb21wb25lbnQoYmxvYk5hbWUpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zLnByb3h5T3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5wcm94eU9wdGlvbnMgPSBjb3JlUmVzdFBpcGVsaW5lLmdldERlZmF1bHRQcm94eVNldHRpbmdzKGV4dHJhY3RlZENyZWRzLnByb3h5VXJpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBwaXBlbGluZSA9IG5ld1BpcGVsaW5lKHNoYXJlZEtleUNyZWRlbnRpYWwsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQWNjb3VudCBjb25uZWN0aW9uIHN0cmluZyBpcyBvbmx5IHN1cHBvcnRlZCBpbiBOb2RlLmpzIGVudmlyb25tZW50XCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGV4dHJhY3RlZENyZWRzLmtpbmQgPT09IFwiU0FTQ29ublN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgdXJsID1cbiAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG9VUkxQYXRoKGFwcGVuZFRvVVJMUGF0aChleHRyYWN0ZWRDcmVkcy51cmwsIGVuY29kZVVSSUNvbXBvbmVudChjb250YWluZXJOYW1lKSksIGVuY29kZVVSSUNvbXBvbmVudChibG9iTmFtZSkpICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiP1wiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhY3RlZENyZWRzLmFjY291bnRTYXM7XG4gICAgICAgICAgICAgICAgcGlwZWxpbmUgPSBuZXdQaXBlbGluZShuZXcgQW5vbnltb3VzQ3JlZGVudGlhbCgpLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbm5lY3Rpb24gc3RyaW5nIG11c3QgYmUgZWl0aGVyIGFuIEFjY291bnQgY29ubmVjdGlvbiBzdHJpbmcgb3IgYSBTQVMgY29ubmVjdGlvbiBzdHJpbmdcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3Rpbmcgbm9uLWVtcHR5IHN0cmluZ3MgZm9yIGNvbnRhaW5lck5hbWUgYW5kIGJsb2JOYW1lIHBhcmFtZXRlcnNcIik7XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIodXJsLCBwaXBlbGluZSk7XG4gICAgICAgICh7IGJsb2JOYW1lOiB0aGlzLl9uYW1lLCBjb250YWluZXJOYW1lOiB0aGlzLl9jb250YWluZXJOYW1lIH0gPVxuICAgICAgICAgICAgdGhpcy5nZXRCbG9iQW5kQ29udGFpbmVyTmFtZXNGcm9tVXJsKCkpO1xuICAgICAgICB0aGlzLmJsb2JDb250ZXh0ID0gdGhpcy5zdG9yYWdlQ2xpZW50Q29udGV4dC5ibG9iO1xuICAgICAgICB0aGlzLl9zbmFwc2hvdCA9IGdldFVSTFBhcmFtZXRlcih0aGlzLnVybCwgVVJMQ29uc3RhbnRzLlBhcmFtZXRlcnMuU05BUFNIT1QpO1xuICAgICAgICB0aGlzLl92ZXJzaW9uSWQgPSBnZXRVUkxQYXJhbWV0ZXIodGhpcy51cmwsIFVSTENvbnN0YW50cy5QYXJhbWV0ZXJzLlZFUlNJT05JRCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgQmxvYkNsaWVudCBvYmplY3QgaWRlbnRpY2FsIHRvIHRoZSBzb3VyY2UgYnV0IHdpdGggdGhlIHNwZWNpZmllZCBzbmFwc2hvdCB0aW1lc3RhbXAuXG4gICAgICogUHJvdmlkZSBcIlwiIHdpbGwgcmVtb3ZlIHRoZSBzbmFwc2hvdCBhbmQgcmV0dXJuIGEgQ2xpZW50IHRvIHRoZSBiYXNlIGJsb2IuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc25hcHNob3QgLSBUaGUgc25hcHNob3QgdGltZXN0YW1wLlxuICAgICAqIEByZXR1cm5zIEEgbmV3IEJsb2JDbGllbnQgb2JqZWN0IGlkZW50aWNhbCB0byB0aGUgc291cmNlIGJ1dCB3aXRoIHRoZSBzcGVjaWZpZWQgc25hcHNob3QgdGltZXN0YW1wXG4gICAgICovXG4gICAgd2l0aFNuYXBzaG90KHNuYXBzaG90KSB7XG4gICAgICAgIHJldHVybiBuZXcgQmxvYkNsaWVudChzZXRVUkxQYXJhbWV0ZXIodGhpcy51cmwsIFVSTENvbnN0YW50cy5QYXJhbWV0ZXJzLlNOQVBTSE9ULCBzbmFwc2hvdC5sZW5ndGggPT09IDAgPyB1bmRlZmluZWQgOiBzbmFwc2hvdCksIHRoaXMucGlwZWxpbmUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IEJsb2JDbGllbnQgb2JqZWN0IHBvaW50aW5nIHRvIGEgdmVyc2lvbiBvZiB0aGlzIGJsb2IuXG4gICAgICogUHJvdmlkZSBcIlwiIHdpbGwgcmVtb3ZlIHRoZSB2ZXJzaW9uSWQgYW5kIHJldHVybiBhIENsaWVudCB0byB0aGUgYmFzZSBibG9iLlxuICAgICAqXG4gICAgICogQHBhcmFtIHZlcnNpb25JZCAtIFRoZSB2ZXJzaW9uSWQuXG4gICAgICogQHJldHVybnMgQSBuZXcgQmxvYkNsaWVudCBvYmplY3QgcG9pbnRpbmcgdG8gdGhlIHZlcnNpb24gb2YgdGhpcyBibG9iLlxuICAgICAqL1xuICAgIHdpdGhWZXJzaW9uKHZlcnNpb25JZCkge1xuICAgICAgICByZXR1cm4gbmV3IEJsb2JDbGllbnQoc2V0VVJMUGFyYW1ldGVyKHRoaXMudXJsLCBVUkxDb25zdGFudHMuUGFyYW1ldGVycy5WRVJTSU9OSUQsIHZlcnNpb25JZC5sZW5ndGggPT09IDAgPyB1bmRlZmluZWQgOiB2ZXJzaW9uSWQpLCB0aGlzLnBpcGVsaW5lKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIEFwcGVuZEJsb2JDbGllbnQgb2JqZWN0LlxuICAgICAqXG4gICAgICovXG4gICAgZ2V0QXBwZW5kQmxvYkNsaWVudCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBcHBlbmRCbG9iQ2xpZW50KHRoaXMudXJsLCB0aGlzLnBpcGVsaW5lKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIEJsb2NrQmxvYkNsaWVudCBvYmplY3QuXG4gICAgICpcbiAgICAgKi9cbiAgICBnZXRCbG9ja0Jsb2JDbGllbnQoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQmxvY2tCbG9iQ2xpZW50KHRoaXMudXJsLCB0aGlzLnBpcGVsaW5lKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIFBhZ2VCbG9iQ2xpZW50IG9iamVjdC5cbiAgICAgKlxuICAgICAqL1xuICAgIGdldFBhZ2VCbG9iQ2xpZW50KCkge1xuICAgICAgICByZXR1cm4gbmV3IFBhZ2VCbG9iQ2xpZW50KHRoaXMudXJsLCB0aGlzLnBpcGVsaW5lKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVhZHMgb3IgZG93bmxvYWRzIGEgYmxvYiBmcm9tIHRoZSBzeXN0ZW0sIGluY2x1ZGluZyBpdHMgbWV0YWRhdGEgYW5kIHByb3BlcnRpZXMuXG4gICAgICogWW91IGNhbiBhbHNvIGNhbGwgR2V0IEJsb2IgdG8gcmVhZCBhIHNuYXBzaG90LlxuICAgICAqXG4gICAgICogKiBJbiBOb2RlLmpzLCBkYXRhIHJldHVybnMgaW4gYSBSZWFkYWJsZSBzdHJlYW0gcmVhZGFibGVTdHJlYW1Cb2R5XG4gICAgICogKiBJbiBicm93c2VycywgZGF0YSByZXR1cm5zIGluIGEgcHJvbWlzZSBibG9iQm9keVxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvZ2V0LWJsb2JcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvZmZzZXQgLSBGcm9tIHdoaWNoIHBvc2l0aW9uIG9mIHRoZSBibG9iIHRvIGRvd25sb2FkLCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMFxuICAgICAqIEBwYXJhbSBjb3VudCAtIEhvdyBtdWNoIGRhdGEgdG8gYmUgZG93bmxvYWRlZCwgZ3JlYXRlciB0aGFuIDAuIFdpbGwgZG93bmxvYWQgdG8gdGhlIGVuZCB3aGVuIHVuZGVmaW5lZFxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgb3B0aW9ucyB0byBCbG9iIERvd25sb2FkIG9wZXJhdGlvbi5cbiAgICAgKlxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2FnZSAoTm9kZS5qcyk6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIERvd25sb2FkIGFuZCBjb252ZXJ0IGEgYmxvYiB0byBhIHN0cmluZ1xuICAgICAqIGNvbnN0IGRvd25sb2FkQmxvY2tCbG9iUmVzcG9uc2UgPSBhd2FpdCBibG9iQ2xpZW50LmRvd25sb2FkKCk7XG4gICAgICogY29uc3QgZG93bmxvYWRlZCA9IGF3YWl0IHN0cmVhbVRvQnVmZmVyKGRvd25sb2FkQmxvY2tCbG9iUmVzcG9uc2UucmVhZGFibGVTdHJlYW1Cb2R5KTtcbiAgICAgKiBjb25zb2xlLmxvZyhcIkRvd25sb2FkZWQgYmxvYiBjb250ZW50OlwiLCBkb3dubG9hZGVkLnRvU3RyaW5nKCkpO1xuICAgICAqXG4gICAgICogYXN5bmMgZnVuY3Rpb24gc3RyZWFtVG9CdWZmZXIocmVhZGFibGVTdHJlYW0pIHtcbiAgICAgKiByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAqIGNvbnN0IGNodW5rcyA9IFtdO1xuICAgICAqIHJlYWRhYmxlU3RyZWFtLm9uKFwiZGF0YVwiLCAoZGF0YSkgPT4ge1xuICAgICAqIGNodW5rcy5wdXNoKGRhdGEgaW5zdGFuY2VvZiBCdWZmZXIgPyBkYXRhIDogQnVmZmVyLmZyb20oZGF0YSkpO1xuICAgICAqIH0pO1xuICAgICAqIHJlYWRhYmxlU3RyZWFtLm9uKFwiZW5kXCIsICgpID0+IHtcbiAgICAgKiByZXNvbHZlKEJ1ZmZlci5jb25jYXQoY2h1bmtzKSk7XG4gICAgICogfSk7XG4gICAgICogcmVhZGFibGVTdHJlYW0ub24oXCJlcnJvclwiLCByZWplY3QpO1xuICAgICAqIH0pO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNhZ2UgKGJyb3dzZXIpOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiAvLyBEb3dubG9hZCBhbmQgY29udmVydCBhIGJsb2IgdG8gYSBzdHJpbmdcbiAgICAgKiBjb25zdCBkb3dubG9hZEJsb2NrQmxvYlJlc3BvbnNlID0gYXdhaXQgYmxvYkNsaWVudC5kb3dubG9hZCgpO1xuICAgICAqIGNvbnN0IGRvd25sb2FkZWQgPSBhd2FpdCBibG9iVG9TdHJpbmcoYXdhaXQgZG93bmxvYWRCbG9ja0Jsb2JSZXNwb25zZS5ibG9iQm9keSk7XG4gICAgICogY29uc29sZS5sb2coXG4gICAgICogICBcIkRvd25sb2FkZWQgYmxvYiBjb250ZW50XCIsXG4gICAgICogICBkb3dubG9hZGVkXG4gICAgICogKTtcbiAgICAgKlxuICAgICAqIGFzeW5jIGZ1bmN0aW9uIGJsb2JUb1N0cmluZyhibG9iOiBCbG9iKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgKiAgIGNvbnN0IGZpbGVSZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAqICAgcmV0dXJuIG5ldyBQcm9taXNlPHN0cmluZz4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAqICAgICBmaWxlUmVhZGVyLm9ubG9hZGVuZCA9IChldjogYW55KSA9PiB7XG4gICAgICogICAgICAgcmVzb2x2ZShldi50YXJnZXQhLnJlc3VsdCk7XG4gICAgICogICAgIH07XG4gICAgICogICAgIGZpbGVSZWFkZXIub25lcnJvciA9IHJlamVjdDtcbiAgICAgKiAgICAgZmlsZVJlYWRlci5yZWFkQXNUZXh0KGJsb2IpO1xuICAgICAqICAgfSk7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGFzeW5jIGRvd25sb2FkKG9mZnNldCA9IDAsIGNvdW50LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0gb3B0aW9ucy5jb25kaXRpb25zIHx8IHt9O1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIGVuc3VyZUNwa0lmU3BlY2lmaWVkKG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSwgdGhpcy5pc0h0dHBzKTtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iQ2xpZW50LWRvd25sb2FkXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgY29uc3QgcmVzID0gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5ibG9iQ29udGV4dC5kb3dubG9hZCh7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIHJlcXVlc3RPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgIG9uRG93bmxvYWRQcm9ncmVzczogY29yZVV0aWwuaXNOb2RlID8gdW5kZWZpbmVkIDogb3B0aW9ucy5vblByb2dyZXNzLCAvLyBmb3IgTm9kZS5qcywgcHJvZ3Jlc3MgaXMgcmVwb3J0ZWQgYnkgUmV0cmlhYmxlUmVhZGFibGVTdHJlYW1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHJhbmdlOiBvZmZzZXQgPT09IDAgJiYgIWNvdW50ID8gdW5kZWZpbmVkIDogcmFuZ2VUb1N0cmluZyh7IG9mZnNldCwgY291bnQgfSksXG4gICAgICAgICAgICAgICAgcmFuZ2VHZXRDb250ZW50TUQ1OiBvcHRpb25zLnJhbmdlR2V0Q29udGVudE1ENSxcbiAgICAgICAgICAgICAgICByYW5nZUdldENvbnRlbnRDUkM2NDogb3B0aW9ucy5yYW5nZUdldENvbnRlbnRDcmM2NCxcbiAgICAgICAgICAgICAgICBzbmFwc2hvdDogb3B0aW9ucy5zbmFwc2hvdCxcbiAgICAgICAgICAgICAgICBjcGtJbmZvOiBvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgY29uc3Qgd3JhcHBlZFJlcyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcmVzKSwgeyBfcmVzcG9uc2U6IHJlcy5fcmVzcG9uc2UsIG9iamVjdFJlcGxpY2F0aW9uRGVzdGluYXRpb25Qb2xpY3lJZDogcmVzLm9iamVjdFJlcGxpY2F0aW9uUG9saWN5SWQsIG9iamVjdFJlcGxpY2F0aW9uU291cmNlUHJvcGVydGllczogcGFyc2VPYmplY3RSZXBsaWNhdGlvblJlY29yZChyZXMub2JqZWN0UmVwbGljYXRpb25SdWxlcykgfSk7XG4gICAgICAgICAgICAvLyBSZXR1cm4gYnJvd3NlciByZXNwb25zZSBpbW1lZGlhdGVseVxuICAgICAgICAgICAgaWYgKCFjb3JlVXRpbC5pc05vZGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlZFJlcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFdlIHN1cHBvcnQgcmV0cnlpbmcgd2hlbiBkb3dubG9hZCBzdHJlYW0gdW5leHBlY3RlZCBlbmRzIGluIE5vZGUuanMgcnVudGltZVxuICAgICAgICAgICAgLy8gRm9sbG93aW5nIGNvZGUgc2hvdWxkbid0IGJlIGJ1bmRsZWQgaW50byBicm93c2VyIGJ1aWxkLCBob3dldmVyIHNvbWVcbiAgICAgICAgICAgIC8vIGJ1bmRsZXJzIG1heSB0cnkgdG8gYnVuZGxlIGZvbGxvd2luZyBjb2RlIGFuZCBcIkZpbGVSZWFkUmVzcG9uc2UudHNcIi5cbiAgICAgICAgICAgIC8vIEluIHRoaXMgY2FzZSwgXCJGaWxlRG93bmxvYWRSZXNwb25zZS5icm93c2VyLnRzXCIgd2lsbCBiZSB1c2VkIGFzIGEgc2hpbSBvZiBcIkZpbGVEb3dubG9hZFJlc3BvbnNlLnRzXCJcbiAgICAgICAgICAgIC8vIFRoZSBjb25maWcgaXMgaW4gcGFja2FnZS5qc29uIFwiYnJvd3NlclwiIGZpZWxkXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5tYXhSZXRyeVJlcXVlc3RzID09PSB1bmRlZmluZWQgfHwgb3B0aW9ucy5tYXhSZXRyeVJlcXVlc3RzIDwgMCkge1xuICAgICAgICAgICAgICAgIC8vIFRPRE86IERlZmF1bHQgdmFsdWUgb3IgbWFrZSBpdCBhIHJlcXVpcmVkIHBhcmFtZXRlcj9cbiAgICAgICAgICAgICAgICBvcHRpb25zLm1heFJldHJ5UmVxdWVzdHMgPSBERUZBVUxUX01BWF9ET1dOTE9BRF9SRVRSWV9SRVFVRVNUUztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXMuY29udGVudExlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEZpbGUgZG93bmxvYWQgcmVzcG9uc2UgZG9lc24ndCBjb250YWluIHZhbGlkIGNvbnRlbnQgbGVuZ3RoIGhlYWRlcmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFyZXMuZXRhZykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBGaWxlIGRvd25sb2FkIHJlc3BvbnNlIGRvZXNuJ3QgY29udGFpbiB2YWxpZCBldGFnIGhlYWRlcmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBCbG9iRG93bmxvYWRSZXNwb25zZSh3cmFwcGVkUmVzLCBhc3luYyAoc3RhcnQpID0+IHtcbiAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZERvd25sb2FkT3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWZNYXRjaDogb3B0aW9ucy5jb25kaXRpb25zLmlmTWF0Y2ggfHwgcmVzLmV0YWcsXG4gICAgICAgICAgICAgICAgICAgICAgICBpZk1vZGlmaWVkU2luY2U6IG9wdGlvbnMuY29uZGl0aW9ucy5pZk1vZGlmaWVkU2luY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBpZk5vbmVNYXRjaDogb3B0aW9ucy5jb25kaXRpb25zLmlmTm9uZU1hdGNoLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWZVbm1vZGlmaWVkU2luY2U6IG9wdGlvbnMuY29uZGl0aW9ucy5pZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgcmFuZ2U6IHJhbmdlVG9TdHJpbmcoe1xuICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6IG9mZnNldCArIHJlcy5jb250ZW50TGVuZ3RoIC0gc3RhcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IHN0YXJ0LFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgcmFuZ2VHZXRDb250ZW50TUQ1OiBvcHRpb25zLnJhbmdlR2V0Q29udGVudE1ENSxcbiAgICAgICAgICAgICAgICAgICAgcmFuZ2VHZXRDb250ZW50Q1JDNjQ6IG9wdGlvbnMucmFuZ2VHZXRDb250ZW50Q3JjNjQsXG4gICAgICAgICAgICAgICAgICAgIHNuYXBzaG90OiBvcHRpb25zLnNuYXBzaG90LFxuICAgICAgICAgICAgICAgICAgICBjcGtJbmZvOiBvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAvLyBEZWJ1ZyBwdXJwb3NlIG9ubHlcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAvLyAgIGBSZWFkIGZyb20gaW50ZXJuYWwgc3RyZWFtLCByYW5nZTogJHtcbiAgICAgICAgICAgICAgICAvLyAgICAgdXBkYXRlZE9wdGlvbnMucmFuZ2VcbiAgICAgICAgICAgICAgICAvLyAgIH0sIG9wdGlvbnM6ICR7SlNPTi5zdHJpbmdpZnkodXBkYXRlZE9wdGlvbnMpfWBcbiAgICAgICAgICAgICAgICAvLyApO1xuICAgICAgICAgICAgICAgIHJldHVybiAoYXdhaXQgdGhpcy5ibG9iQ29udGV4dC5kb3dubG9hZChPYmplY3QuYXNzaWduKHsgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwgfSwgdXBkYXRlZERvd25sb2FkT3B0aW9ucykpKS5yZWFkYWJsZVN0cmVhbUJvZHk7XG4gICAgICAgICAgICB9LCBvZmZzZXQsIHJlcy5jb250ZW50TGVuZ3RoLCB7XG4gICAgICAgICAgICAgICAgbWF4UmV0cnlSZXF1ZXN0czogb3B0aW9ucy5tYXhSZXRyeVJlcXVlc3RzLFxuICAgICAgICAgICAgICAgIG9uUHJvZ3Jlc3M6IG9wdGlvbnMub25Qcm9ncmVzcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBBenVyZSBibG9iIHJlc291cmNlIHJlcHJlc2VudGVkIGJ5IHRoaXMgY2xpZW50IGV4aXN0czsgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAqXG4gICAgICogTk9URTogdXNlIHRoaXMgZnVuY3Rpb24gd2l0aCBjYXJlIHNpbmNlIGFuIGV4aXN0aW5nIGJsb2IgbWlnaHQgYmUgZGVsZXRlZCBieSBvdGhlciBjbGllbnRzIG9yXG4gICAgICogYXBwbGljYXRpb25zLiBWaWNlIHZlcnNhIG5ldyBibG9icyBtaWdodCBiZSBhZGRlZCBieSBvdGhlciBjbGllbnRzIG9yIGFwcGxpY2F0aW9ucyBhZnRlciB0aGlzXG4gICAgICogZnVuY3Rpb24gY29tcGxldGVzLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBvcHRpb25zIHRvIEV4aXN0cyBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgZXhpc3RzKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JDbGllbnQtZXhpc3RzXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBlbnN1cmVDcGtJZlNwZWNpZmllZChvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksIHRoaXMuaXNIdHRwcyk7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5nZXRQcm9wZXJ0aWVzKHtcbiAgICAgICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgICAgIGN1c3RvbWVyUHJvdmlkZWRLZXk6IG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSxcbiAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGlmIChlLnN0YXR1c0NvZGUgPT09IDQwNCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBFeHBlY3RlZCBleGNlcHRpb24gd2hlbiBjaGVja2luZyBibG9iIGV4aXN0ZW5jZVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGUuc3RhdHVzQ29kZSA9PT0gNDA5ICYmXG4gICAgICAgICAgICAgICAgICAgIChlLmRldGFpbHMuZXJyb3JDb2RlID09PSBCbG9iVXNlc0N1c3RvbWVyU3BlY2lmaWVkRW5jcnlwdGlvbk1zZyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgZS5kZXRhaWxzLmVycm9yQ29kZSA9PT0gQmxvYkRvZXNOb3RVc2VDdXN0b21lclNwZWNpZmllZEVuY3J5cHRpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEV4cGVjdGVkIGV4Y2VwdGlvbiB3aGVuIGNoZWNraW5nIGJsb2IgZXhpc3RlbmNlXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbGwgdXNlci1kZWZpbmVkIG1ldGFkYXRhLCBzdGFuZGFyZCBIVFRQIHByb3BlcnRpZXMsIGFuZCBzeXN0ZW0gcHJvcGVydGllc1xuICAgICAqIGZvciB0aGUgYmxvYi4gSXQgZG9lcyBub3QgcmV0dXJuIHRoZSBjb250ZW50IG9mIHRoZSBibG9iLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2dldC1ibG9iLXByb3BlcnRpZXNcbiAgICAgKlxuICAgICAqIFdBUk5JTkc6IFRoZSBgbWV0YWRhdGFgIG9iamVjdCByZXR1cm5lZCBpbiB0aGUgcmVzcG9uc2Ugd2lsbCBoYXZlIGl0cyBrZXlzIGluIGxvd2VyY2FzZSwgZXZlbiBpZlxuICAgICAqIHRoZXkgb3JpZ2luYWxseSBjb250YWluZWQgdXBwZXJjYXNlIGNoYXJhY3RlcnMuIFRoaXMgZGlmZmVycyBmcm9tIHRoZSBtZXRhZGF0YSBrZXlzIHJldHVybmVkIGJ5XG4gICAgICogdGhlIG1ldGhvZHMgb2Yge0BsaW5rIENvbnRhaW5lckNsaWVudH0gdGhhdCBsaXN0IGJsb2JzIHVzaW5nIHRoZSBgaW5jbHVkZU1ldGFkYXRhYCBvcHRpb24sIHdoaWNoXG4gICAgICogd2lsbCByZXRhaW4gdGhlaXIgb3JpZ2luYWwgY2FzaW5nLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBvcHRpb25zIHRvIEdldCBQcm9wZXJ0aWVzIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBnZXRQcm9wZXJ0aWVzKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIGVuc3VyZUNwa0lmU3BlY2lmaWVkKG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSwgdGhpcy5pc0h0dHBzKTtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iQ2xpZW50LWdldFByb3BlcnRpZXNcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBjb25zdCByZXMgPSBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLmJsb2JDb250ZXh0LmdldFByb3BlcnRpZXMoe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICBjcGtJbmZvOiBvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcmVzKSwgeyBfcmVzcG9uc2U6IHJlcy5fcmVzcG9uc2UsIG9iamVjdFJlcGxpY2F0aW9uRGVzdGluYXRpb25Qb2xpY3lJZDogcmVzLm9iamVjdFJlcGxpY2F0aW9uUG9saWN5SWQsIG9iamVjdFJlcGxpY2F0aW9uU291cmNlUHJvcGVydGllczogcGFyc2VPYmplY3RSZXBsaWNhdGlvblJlY29yZChyZXMub2JqZWN0UmVwbGljYXRpb25SdWxlcykgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBNYXJrcyB0aGUgc3BlY2lmaWVkIGJsb2Igb3Igc25hcHNob3QgZm9yIGRlbGV0aW9uLiBUaGUgYmxvYiBpcyBsYXRlciBkZWxldGVkXG4gICAgICogZHVyaW5nIGdhcmJhZ2UgY29sbGVjdGlvbi4gTm90ZSB0aGF0IGluIG9yZGVyIHRvIGRlbGV0ZSBhIGJsb2IsIHlvdSBtdXN0IGRlbGV0ZVxuICAgICAqIGFsbCBvZiBpdHMgc25hcHNob3RzLiBZb3UgY2FuIGRlbGV0ZSBib3RoIGF0IHRoZSBzYW1lIHRpbWUgd2l0aCB0aGUgRGVsZXRlXG4gICAgICogQmxvYiBvcGVyYXRpb24uXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvZGVsZXRlLWJsb2JcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgb3B0aW9ucyB0byBCbG9iIERlbGV0ZSBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgZGVsZXRlKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYkNsaWVudC1kZWxldGVcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5ibG9iQ29udGV4dC5kZWxldGUoe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGRlbGV0ZVNuYXBzaG90czogb3B0aW9ucy5kZWxldGVTbmFwc2hvdHMsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1hcmtzIHRoZSBzcGVjaWZpZWQgYmxvYiBvciBzbmFwc2hvdCBmb3IgZGVsZXRpb24gaWYgaXQgZXhpc3RzLiBUaGUgYmxvYiBpcyBsYXRlciBkZWxldGVkXG4gICAgICogZHVyaW5nIGdhcmJhZ2UgY29sbGVjdGlvbi4gTm90ZSB0aGF0IGluIG9yZGVyIHRvIGRlbGV0ZSBhIGJsb2IsIHlvdSBtdXN0IGRlbGV0ZVxuICAgICAqIGFsbCBvZiBpdHMgc25hcHNob3RzLiBZb3UgY2FuIGRlbGV0ZSBib3RoIGF0IHRoZSBzYW1lIHRpbWUgd2l0aCB0aGUgRGVsZXRlXG4gICAgICogQmxvYiBvcGVyYXRpb24uXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvZGVsZXRlLWJsb2JcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgb3B0aW9ucyB0byBCbG9iIERlbGV0ZSBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgZGVsZXRlSWZFeGlzdHMob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYkNsaWVudC1kZWxldGVJZkV4aXN0c1wiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuZGVsZXRlKHVwZGF0ZWRPcHRpb25zKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7IHN1Y2NlZWRlZDogdHJ1ZSB9LCByZXMpLCB7IF9yZXNwb25zZTogcmVzLl9yZXNwb25zZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCgoX2EgPSBlLmRldGFpbHMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5lcnJvckNvZGUpID09PSBcIkJsb2JOb3RGb3VuZFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oeyBzdWNjZWVkZWQ6IGZhbHNlIH0sIChfYiA9IGUucmVzcG9uc2UpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5wYXJzZWRIZWFkZXJzKSwgeyBfcmVzcG9uc2U6IGUucmVzcG9uc2UgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXN0b3JlcyB0aGUgY29udGVudHMgYW5kIG1ldGFkYXRhIG9mIHNvZnQgZGVsZXRlZCBibG9iIGFuZCBhbnkgYXNzb2NpYXRlZFxuICAgICAqIHNvZnQgZGVsZXRlZCBzbmFwc2hvdHMuIFVuZGVsZXRlIEJsb2IgaXMgc3VwcG9ydGVkIG9ubHkgb24gdmVyc2lvbiAyMDE3LTA3LTI5XG4gICAgICogb3IgbGF0ZXIuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvdW5kZWxldGUtYmxvYlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBvcHRpb25zIHRvIEJsb2IgVW5kZWxldGUgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIHVuZGVsZXRlKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JDbGllbnQtdW5kZWxldGVcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5ibG9iQ29udGV4dC51bmRlbGV0ZSh7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyBzeXN0ZW0gcHJvcGVydGllcyBvbiB0aGUgYmxvYi5cbiAgICAgKlxuICAgICAqIElmIG5vIHZhbHVlIHByb3ZpZGVkLCBvciBubyB2YWx1ZSBwcm92aWRlZCBmb3IgdGhlIHNwZWNpZmllZCBibG9iIEhUVFAgaGVhZGVycyxcbiAgICAgKiB0aGVzZSBibG9iIEhUVFAgaGVhZGVycyB3aXRob3V0IGEgdmFsdWUgd2lsbCBiZSBjbGVhcmVkLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL3NldC1ibG9iLXByb3BlcnRpZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBibG9iSFRUUEhlYWRlcnMgLSBJZiBubyB2YWx1ZSBwcm92aWRlZCwgb3Igbm8gdmFsdWUgcHJvdmlkZWQgZm9yXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgc3BlY2lmaWVkIGJsb2IgSFRUUCBoZWFkZXJzLCB0aGVzZSBibG9iIEhUVFBcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnMgd2l0aG91dCBhIHZhbHVlIHdpbGwgYmUgY2xlYXJlZC5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgY29tbW9uIGhlYWRlciB0byBzZXQgaXMgYGJsb2JDb250ZW50VHlwZWBcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsaW5nIHRoZSBicm93c2VyIHRvIHByb3ZpZGUgZnVuY3Rpb25hbGl0eVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZWQgb24gZmlsZSB0eXBlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgb3B0aW9ucyB0byBCbG9iIFNldCBIVFRQIEhlYWRlcnMgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIHNldEhUVFBIZWFkZXJzKGJsb2JIVFRQSGVhZGVycywgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIG9wdGlvbnMuY29uZGl0aW9ucyA9IG9wdGlvbnMuY29uZGl0aW9ucyB8fCB7fTtcbiAgICAgICAgZW5zdXJlQ3BrSWZTcGVjaWZpZWQob3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LCB0aGlzLmlzSHR0cHMpO1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JDbGllbnQtc2V0SFRUUEhlYWRlcnNcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5ibG9iQ29udGV4dC5zZXRIdHRwSGVhZGVycyh7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgYmxvYkh0dHBIZWFkZXJzOiBibG9iSFRUUEhlYWRlcnMsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIC8vIGNwa0luZm86IG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSwgLy8gQ1BLIGlzIG5vdCBpbmNsdWRlZCBpbiBTd2FnZ2VyLCBzaG91bGQgY2hhbmdlIHRoaXMgYmFjayB3aGVuIHRoaXMgaXNzdWUgaXMgZml4ZWQgaW4gU3dhZ2dlci5cbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIHVzZXItZGVmaW5lZCBtZXRhZGF0YSBmb3IgdGhlIHNwZWNpZmllZCBibG9iIGFzIG9uZSBvciBtb3JlIG5hbWUtdmFsdWUgcGFpcnMuXG4gICAgICpcbiAgICAgKiBJZiBubyBvcHRpb24gcHJvdmlkZWQsIG9yIG5vIG1ldGFkYXRhIGRlZmluZWQgaW4gdGhlIHBhcmFtZXRlciwgdGhlIGJsb2JcbiAgICAgKiBtZXRhZGF0YSB3aWxsIGJlIHJlbW92ZWQuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvc2V0LWJsb2ItbWV0YWRhdGFcbiAgICAgKlxuICAgICAqIEBwYXJhbSBtZXRhZGF0YSAtIFJlcGxhY2UgZXhpc3RpbmcgbWV0YWRhdGEgd2l0aCB0aGlzIHZhbHVlLlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIG5vIHZhbHVlIHByb3ZpZGVkIHRoZSBleGlzdGluZyBtZXRhZGF0YSB3aWxsIGJlIHJlbW92ZWQuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBvcHRpb25zIHRvIFNldCBNZXRhZGF0YSBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgc2V0TWV0YWRhdGEobWV0YWRhdGEsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIGVuc3VyZUNwa0lmU3BlY2lmaWVkKG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSwgdGhpcy5pc0h0dHBzKTtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iQ2xpZW50LXNldE1ldGFkYXRhXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuYmxvYkNvbnRleHQuc2V0TWV0YWRhdGEoe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIG1ldGFkYXRhLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICBjcGtJbmZvOiBvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksXG4gICAgICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiBvcHRpb25zLmVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIHRhZ3Mgb24gdGhlIHVuZGVybHlpbmcgYmxvYi5cbiAgICAgKiBBIGJsb2IgY2FuIGhhdmUgdXAgdG8gMTAgdGFncy4gVGFnIGtleXMgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDEyOCBjaGFyYWN0ZXJzLiAgVGFnIHZhbHVlcyBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMjU2IGNoYXJhY3RlcnMuXG4gICAgICogVmFsaWQgdGFnIGtleSBhbmQgdmFsdWUgY2hhcmFjdGVycyBpbmNsdWRlIGxvd2VyIGFuZCB1cHBlciBjYXNlIGxldHRlcnMsIGRpZ2l0cyAoMC05KSxcbiAgICAgKiBzcGFjZSAoJyAnKSwgcGx1cyAoJysnKSwgbWludXMgKCctJyksIHBlcmlvZCAoJy4nKSwgZm93YXJkIHNsYXNoICgnLycpLCBjb2xvbiAoJzonKSwgZXF1YWxzICgnPScpLCBhbmQgdW5kZXJzY29yZSAoJ18nKS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0YWdzIC1cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtXG4gICAgICovXG4gICAgYXN5bmMgc2V0VGFncyh0YWdzLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iQ2xpZW50LXNldFRhZ3NcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5ibG9iQ29udGV4dC5zZXRUYWdzKHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgICAgIHRhZ3M6IHRvQmxvYlRhZ3ModGFncyksXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSB0YWdzIGFzc29jaWF0ZWQgd2l0aCB0aGUgdW5kZXJseWluZyBibG9iLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLVxuICAgICAqL1xuICAgIGFzeW5jIGdldFRhZ3Mob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYkNsaWVudC1nZXRUYWdzXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLmJsb2JDb250ZXh0LmdldFRhZ3Moe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICBjb25zdCB3cmFwcGVkUmVzcG9uc2UgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHJlc3BvbnNlKSwgeyBfcmVzcG9uc2U6IHJlc3BvbnNlLl9yZXNwb25zZSwgdGFnczogdG9UYWdzKHsgYmxvYlRhZ1NldDogcmVzcG9uc2UuYmxvYlRhZ1NldCB9KSB8fCB7fSB9KTtcbiAgICAgICAgICAgIHJldHVybiB3cmFwcGVkUmVzcG9uc2U7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgYSB7QGxpbmsgQmxvYkxlYXNlQ2xpZW50fSB0aGF0IG1hbmFnZXMgbGVhc2VzIG9uIHRoZSBibG9iLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3Bvc2VMZWFzZUlkIC0gSW5pdGlhbCBwcm9wb3NlZCBsZWFzZSBJZC5cbiAgICAgKiBAcmV0dXJucyBBIG5ldyBCbG9iTGVhc2VDbGllbnQgb2JqZWN0IGZvciBtYW5hZ2luZyBsZWFzZXMgb24gdGhlIGJsb2IuXG4gICAgICovXG4gICAgZ2V0QmxvYkxlYXNlQ2xpZW50KHByb3Bvc2VMZWFzZUlkKSB7XG4gICAgICAgIHJldHVybiBuZXcgQmxvYkxlYXNlQ2xpZW50KHRoaXMsIHByb3Bvc2VMZWFzZUlkKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHJlYWQtb25seSBzbmFwc2hvdCBvZiBhIGJsb2IuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvc25hcHNob3QtYmxvYlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBvcHRpb25zIHRvIHRoZSBCbG9iIENyZWF0ZSBTbmFwc2hvdCBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgY3JlYXRlU25hcHNob3Qob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIG9wdGlvbnMuY29uZGl0aW9ucyA9IG9wdGlvbnMuY29uZGl0aW9ucyB8fCB7fTtcbiAgICAgICAgZW5zdXJlQ3BrSWZTcGVjaWZpZWQob3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LCB0aGlzLmlzSHR0cHMpO1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JDbGllbnQtY3JlYXRlU25hcHNob3RcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5ibG9iQ29udGV4dC5jcmVhdGVTbmFwc2hvdCh7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbWV0YWRhdGE6IG9wdGlvbnMubWV0YWRhdGEsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIGNwa0luZm86IG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSxcbiAgICAgICAgICAgICAgICBlbmNyeXB0aW9uU2NvcGU6IG9wdGlvbnMuZW5jcnlwdGlvblNjb3BlLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFzeW5jaHJvbm91c2x5IGNvcGllcyBhIGJsb2IgdG8gYSBkZXN0aW5hdGlvbiB3aXRoaW4gdGhlIHN0b3JhZ2UgYWNjb3VudC5cbiAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbG9uZyBydW5uaW5nIG9wZXJhdGlvbiBwb2xsZXIgdGhhdCBhbGxvd3MgeW91IHRvIHdhaXRcbiAgICAgKiBpbmRlZmluaXRlbHkgdW50aWwgdGhlIGNvcHkgaXMgY29tcGxldGVkLlxuICAgICAqIFlvdSBjYW4gYWxzbyBjYW5jZWwgYSBjb3B5IGJlZm9yZSBpdCBpcyBjb21wbGV0ZWQgYnkgY2FsbGluZyBgY2FuY2VsT3BlcmF0aW9uYCBvbiB0aGUgcG9sbGVyLlxuICAgICAqIE5vdGUgdGhhdCB0aGUgb25Qcm9ncmVzcyBjYWxsYmFjayB3aWxsIG5vdCBiZSBpbnZva2VkIGlmIHRoZSBvcGVyYXRpb24gY29tcGxldGVzIGluIHRoZSBmaXJzdFxuICAgICAqIHJlcXVlc3QsIGFuZCBhdHRlbXB0aW5nIHRvIGNhbmNlbCBhIGNvbXBsZXRlZCBjb3B5IHdpbGwgcmVzdWx0IGluIGFuIGVycm9yIGJlaW5nIHRocm93bi5cbiAgICAgKlxuICAgICAqIEluIHZlcnNpb24gMjAxMi0wMi0xMiBhbmQgbGF0ZXIsIHRoZSBzb3VyY2UgZm9yIGEgQ29weSBCbG9iIG9wZXJhdGlvbiBjYW4gYmVcbiAgICAgKiBhIGNvbW1pdHRlZCBibG9iIGluIGFueSBBenVyZSBzdG9yYWdlIGFjY291bnQuXG4gICAgICogQmVnaW5uaW5nIHdpdGggdmVyc2lvbiAyMDE1LTAyLTIxLCB0aGUgc291cmNlIGZvciBhIENvcHkgQmxvYiBvcGVyYXRpb24gY2FuIGJlXG4gICAgICogYW4gQXp1cmUgZmlsZSBpbiBhbnkgQXp1cmUgc3RvcmFnZSBhY2NvdW50LlxuICAgICAqIE9ubHkgc3RvcmFnZSBhY2NvdW50cyBjcmVhdGVkIG9uIG9yIGFmdGVyIEp1bmUgN3RoLCAyMDEyIGFsbG93IHRoZSBDb3B5IEJsb2JcbiAgICAgKiBvcGVyYXRpb24gdG8gY29weSBmcm9tIGFub3RoZXIgc3RvcmFnZSBhY2NvdW50LlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2NvcHktYmxvYlxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBhdXRvbWF0aWMgcG9sbGluZzpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogY29uc3QgY29weVBvbGxlciA9IGF3YWl0IGJsb2JDbGllbnQuYmVnaW5Db3B5RnJvbVVSTCgndXJsJyk7XG4gICAgICogY29uc3QgcmVzdWx0ID0gYXdhaXQgY29weVBvbGxlci5wb2xsVW50aWxEb25lKCk7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIG1hbnVhbCBwb2xsaW5nOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBjb25zdCBjb3B5UG9sbGVyID0gYXdhaXQgYmxvYkNsaWVudC5iZWdpbkNvcHlGcm9tVVJMKCd1cmwnKTtcbiAgICAgKiB3aGlsZSAoIXBvbGxlci5pc0RvbmUoKSkge1xuICAgICAqICAgIGF3YWl0IHBvbGxlci5wb2xsKCk7XG4gICAgICogfVxuICAgICAqIGNvbnN0IHJlc3VsdCA9IGNvcHlQb2xsZXIuZ2V0UmVzdWx0KCk7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIHByb2dyZXNzIHVwZGF0ZXM6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnN0IGNvcHlQb2xsZXIgPSBhd2FpdCBibG9iQ2xpZW50LmJlZ2luQ29weUZyb21VUkwoJ3VybCcsIHtcbiAgICAgKiAgIG9uUHJvZ3Jlc3Moc3RhdGUpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coYFByb2dyZXNzOiAke3N0YXRlLmNvcHlQcm9ncmVzc31gKTtcbiAgICAgKiAgIH1cbiAgICAgKiB9KTtcbiAgICAgKiBjb25zdCByZXN1bHQgPSBhd2FpdCBjb3B5UG9sbGVyLnBvbGxVbnRpbERvbmUoKTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNpbmcgYSBjaGFuZ2luZyBwb2xsaW5nIGludGVydmFsIChkZWZhdWx0IDE1IHNlY29uZHMpOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBjb25zdCBjb3B5UG9sbGVyID0gYXdhaXQgYmxvYkNsaWVudC5iZWdpbkNvcHlGcm9tVVJMKCd1cmwnLCB7XG4gICAgICogICBpbnRlcnZhbEluTXM6IDEwMDAgLy8gcG9sbCBibG9iIGV2ZXJ5IDEgc2Vjb25kIGZvciBjb3B5IHByb2dyZXNzXG4gICAgICogfSk7XG4gICAgICogY29uc3QgcmVzdWx0ID0gYXdhaXQgY29weVBvbGxlci5wb2xsVW50aWxEb25lKCk7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIGNvcHkgY2FuY2VsbGF0aW9uOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBjb25zdCBjb3B5UG9sbGVyID0gYXdhaXQgYmxvYkNsaWVudC5iZWdpbkNvcHlGcm9tVVJMKCd1cmwnKTtcbiAgICAgKiAvLyBjYW5jZWwgb3BlcmF0aW9uIGFmdGVyIHN0YXJ0aW5nIGl0LlxuICAgICAqIHRyeSB7XG4gICAgICogICBhd2FpdCBjb3B5UG9sbGVyLmNhbmNlbE9wZXJhdGlvbigpO1xuICAgICAqICAgLy8gY2FsbHMgdG8gZ2V0IHRoZSByZXN1bHQgbm93IHRocm93IFBvbGxlckNhbmNlbGxlZEVycm9yXG4gICAgICogICBhd2FpdCBjb3B5UG9sbGVyLmdldFJlc3VsdCgpO1xuICAgICAqIH0gY2F0Y2ggKGVycikge1xuICAgICAqICAgaWYgKGVyci5uYW1lID09PSAnUG9sbGVyQ2FuY2VsbGVkRXJyb3InKSB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKCdUaGUgY29weSB3YXMgY2FuY2VsbGVkLicpO1xuICAgICAqICAgfVxuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb3B5U291cmNlIC0gdXJsIHRvIHRoZSBzb3VyY2UgQXp1cmUgQmxvYi9GaWxlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgb3B0aW9ucyB0byB0aGUgQmxvYiBTdGFydCBDb3B5IEZyb20gVVJMIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBiZWdpbkNvcHlGcm9tVVJMKGNvcHlTb3VyY2UsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCBjbGllbnQgPSB7XG4gICAgICAgICAgICBhYm9ydENvcHlGcm9tVVJMOiAoLi4uYXJncykgPT4gdGhpcy5hYm9ydENvcHlGcm9tVVJMKC4uLmFyZ3MpLFxuICAgICAgICAgICAgZ2V0UHJvcGVydGllczogKC4uLmFyZ3MpID0+IHRoaXMuZ2V0UHJvcGVydGllcyguLi5hcmdzKSxcbiAgICAgICAgICAgIHN0YXJ0Q29weUZyb21VUkw6ICguLi5hcmdzKSA9PiB0aGlzLnN0YXJ0Q29weUZyb21VUkwoLi4uYXJncyksXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHBvbGxlciA9IG5ldyBCbG9iQmVnaW5Db3B5RnJvbVVybFBvbGxlcih7XG4gICAgICAgICAgICBibG9iQ2xpZW50OiBjbGllbnQsXG4gICAgICAgICAgICBjb3B5U291cmNlLFxuICAgICAgICAgICAgaW50ZXJ2YWxJbk1zOiBvcHRpb25zLmludGVydmFsSW5NcyxcbiAgICAgICAgICAgIG9uUHJvZ3Jlc3M6IG9wdGlvbnMub25Qcm9ncmVzcyxcbiAgICAgICAgICAgIHJlc3VtZUZyb206IG9wdGlvbnMucmVzdW1lRnJvbSxcbiAgICAgICAgICAgIHN0YXJ0Q29weUZyb21VUkxPcHRpb25zOiBvcHRpb25zLFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gVHJpZ2dlciB0aGUgc3RhcnRDb3B5RnJvbVVSTCBjYWxsIGJ5IGNhbGxpbmcgcG9sbC5cbiAgICAgICAgLy8gQW55IGVycm9ycyBmcm9tIHRoaXMgbWV0aG9kIHNob3VsZCBiZSBzdXJmYWNlZCB0byB0aGUgdXNlci5cbiAgICAgICAgYXdhaXQgcG9sbGVyLnBvbGwoKTtcbiAgICAgICAgcmV0dXJuIHBvbGxlcjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWJvcnRzIGEgcGVuZGluZyBhc3luY2hyb25vdXMgQ29weSBCbG9iIG9wZXJhdGlvbiwgYW5kIGxlYXZlcyBhIGRlc3RpbmF0aW9uIGJsb2Igd2l0aCB6ZXJvXG4gICAgICogbGVuZ3RoIGFuZCBmdWxsIG1ldGFkYXRhLiBWZXJzaW9uIDIwMTItMDItMTIgYW5kIG5ld2VyLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2Fib3J0LWNvcHktYmxvYlxuICAgICAqXG4gICAgICogQHBhcmFtIGNvcHlJZCAtIElkIG9mIHRoZSBDb3B5IEZyb20gVVJMIG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIG9wdGlvbnMgdG8gdGhlIEJsb2IgQWJvcnQgQ29weSBGcm9tIFVSTCBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgYWJvcnRDb3B5RnJvbVVSTChjb3B5SWQsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JDbGllbnQtYWJvcnRDb3B5RnJvbVVSTFwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLmJsb2JDb250ZXh0LmFib3J0Q29weUZyb21VUkwoY29weUlkLCB7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIHN5bmNocm9ub3VzIENvcHkgRnJvbSBVUkwgb3BlcmF0aW9uIGNvcGllcyBhIGJsb2Igb3IgYW4gaW50ZXJuZXQgcmVzb3VyY2UgdG8gYSBuZXcgYmxvYi4gSXQgd2lsbCBub3RcbiAgICAgKiByZXR1cm4gYSByZXNwb25zZSB1bnRpbCB0aGUgY29weSBpcyBjb21wbGV0ZS5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9jb3B5LWJsb2ItZnJvbS11cmxcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb3B5U291cmNlIC0gVGhlIHNvdXJjZSBVUkwgdG8gY29weSBmcm9tLCBTaGFyZWQgQWNjZXNzIFNpZ25hdHVyZShTQVMpIG1heWJlIG5lZWRlZCBmb3IgYXV0aGVudGljYXRpb25cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtXG4gICAgICovXG4gICAgYXN5bmMgc3luY0NvcHlGcm9tVVJMKGNvcHlTb3VyY2UsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucyA9IG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucyB8fCB7fTtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iQ2xpZW50LXN5bmNDb3B5RnJvbVVSTFwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2UsIF9mLCBfZztcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLmJsb2JDb250ZXh0LmNvcHlGcm9tVVJMKGNvcHlTb3VyY2UsIHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBtZXRhZGF0YTogb3B0aW9ucy5tZXRhZGF0YSxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgc291cmNlTW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUlmTWF0Y2g6IChfYiA9IG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmlmTWF0Y2gsXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUlmTW9kaWZpZWRTaW5jZTogKF9jID0gb3B0aW9ucy5zb3VyY2VDb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VJZk5vbmVNYXRjaDogKF9kID0gb3B0aW9ucy5zb3VyY2VDb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuaWZOb25lTWF0Y2gsXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUlmVW5tb2RpZmllZFNpbmNlOiAoX2UgPSBvcHRpb25zLnNvdXJjZUNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZS5pZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNvdXJjZUNvbnRlbnRNRDU6IG9wdGlvbnMuc291cmNlQ29udGVudE1ENSxcbiAgICAgICAgICAgICAgICBjb3B5U291cmNlQXV0aG9yaXphdGlvbjogaHR0cEF1dGhvcml6YXRpb25Ub1N0cmluZyhvcHRpb25zLnNvdXJjZUF1dGhvcml6YXRpb24pLFxuICAgICAgICAgICAgICAgIHRpZXI6IHRvQWNjZXNzVGllcihvcHRpb25zLnRpZXIpLFxuICAgICAgICAgICAgICAgIGJsb2JUYWdzU3RyaW5nOiB0b0Jsb2JUYWdzU3RyaW5nKG9wdGlvbnMudGFncyksXG4gICAgICAgICAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5RXhwaXJ5OiAoX2YgPSBvcHRpb25zLmltbXV0YWJpbGl0eVBvbGljeSkgPT09IG51bGwgfHwgX2YgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9mLmV4cGlyaWVzT24sXG4gICAgICAgICAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5TW9kZTogKF9nID0gb3B0aW9ucy5pbW11dGFiaWxpdHlQb2xpY3kpID09PSBudWxsIHx8IF9nID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZy5wb2xpY3lNb2RlLFxuICAgICAgICAgICAgICAgIGxlZ2FsSG9sZDogb3B0aW9ucy5sZWdhbEhvbGQsXG4gICAgICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiBvcHRpb25zLmVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgICAgICAgICBjb3B5U291cmNlVGFnczogb3B0aW9ucy5jb3B5U291cmNlVGFncyxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSB0aWVyIG9uIGEgYmxvYi4gVGhlIG9wZXJhdGlvbiBpcyBhbGxvd2VkIG9uIGEgcGFnZSBibG9iIGluIGEgcHJlbWl1bVxuICAgICAqIHN0b3JhZ2UgYWNjb3VudCBhbmQgb24gYSBibG9jayBibG9iIGluIGEgYmxvYiBzdG9yYWdlIGFjY291bnQgKGxvY2FsbHkgcmVkdW5kYW50XG4gICAgICogc3RvcmFnZSBvbmx5KS4gQSBwcmVtaXVtIHBhZ2UgYmxvYidzIHRpZXIgZGV0ZXJtaW5lcyB0aGUgYWxsb3dlZCBzaXplLCBJT1BTLFxuICAgICAqIGFuZCBiYW5kd2lkdGggb2YgdGhlIGJsb2IuIEEgYmxvY2sgYmxvYidzIHRpZXIgZGV0ZXJtaW5lcyBIb3QvQ29vbC9BcmNoaXZlXG4gICAgICogc3RvcmFnZSB0eXBlLiBUaGlzIG9wZXJhdGlvbiBkb2VzIG5vdCB1cGRhdGUgdGhlIGJsb2IncyBFVGFnLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL3NldC1ibG9iLXRpZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSB0aWVyIC0gVGhlIHRpZXIgdG8gYmUgc2V0IG9uIHRoZSBibG9iLiBWYWxpZCB2YWx1ZXMgYXJlIEhvdCwgQ29vbCwgb3IgQXJjaGl2ZS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIG9wdGlvbnMgdG8gdGhlIEJsb2IgU2V0IFRpZXIgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIHNldEFjY2Vzc1RpZXIodGllciwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYkNsaWVudC1zZXRBY2Nlc3NUaWVyXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuYmxvYkNvbnRleHQuc2V0VGllcih0b0FjY2Vzc1RpZXIodGllciksIHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgcmVoeWRyYXRlUHJpb3JpdHk6IG9wdGlvbnMucmVoeWRyYXRlUHJpb3JpdHksXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMgZG93bmxvYWRUb0J1ZmZlcihwYXJhbTEsIHBhcmFtMiwgcGFyYW0zLCBwYXJhbTQgPSB7fSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGxldCBidWZmZXI7XG4gICAgICAgIGxldCBvZmZzZXQgPSAwO1xuICAgICAgICBsZXQgY291bnQgPSAwO1xuICAgICAgICBsZXQgb3B0aW9ucyA9IHBhcmFtNDtcbiAgICAgICAgaWYgKHBhcmFtMSBpbnN0YW5jZW9mIEJ1ZmZlcikge1xuICAgICAgICAgICAgYnVmZmVyID0gcGFyYW0xO1xuICAgICAgICAgICAgb2Zmc2V0ID0gcGFyYW0yIHx8IDA7XG4gICAgICAgICAgICBjb3VudCA9IHR5cGVvZiBwYXJhbTMgPT09IFwibnVtYmVyXCIgPyBwYXJhbTMgOiAwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgb2Zmc2V0ID0gdHlwZW9mIHBhcmFtMSA9PT0gXCJudW1iZXJcIiA/IHBhcmFtMSA6IDA7XG4gICAgICAgICAgICBjb3VudCA9IHR5cGVvZiBwYXJhbTIgPT09IFwibnVtYmVyXCIgPyBwYXJhbTIgOiAwO1xuICAgICAgICAgICAgb3B0aW9ucyA9IHBhcmFtMyB8fCB7fTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgYmxvY2tTaXplID0gKF9hID0gb3B0aW9ucy5ibG9ja1NpemUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IDA7XG4gICAgICAgIGlmIChibG9ja1NpemUgPCAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcImJsb2NrU2l6ZSBvcHRpb24gbXVzdCBiZSA+PSAwXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChibG9ja1NpemUgPT09IDApIHtcbiAgICAgICAgICAgIGJsb2NrU2l6ZSA9IERFRkFVTFRfQkxPQl9ET1dOTE9BRF9CTE9DS19CWVRFUztcbiAgICAgICAgfVxuICAgICAgICBpZiAob2Zmc2V0IDwgMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJvZmZzZXQgb3B0aW9uIG11c3QgYmUgPj0gMFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY291bnQgJiYgY291bnQgPD0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJjb3VudCBvcHRpb24gbXVzdCBiZSBncmVhdGVyIHRoYW4gMFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW9wdGlvbnMuY29uZGl0aW9ucykge1xuICAgICAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0ge307XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iQ2xpZW50LWRvd25sb2FkVG9CdWZmZXJcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICAvLyBDdXN0b21lciBkb2Vzbid0IHNwZWNpZnkgbGVuZ3RoLCBnZXQgaXRcbiAgICAgICAgICAgIGlmICghY291bnQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZ2V0UHJvcGVydGllcyhPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMpLCB7IHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyB9KSk7XG4gICAgICAgICAgICAgICAgY291bnQgPSByZXNwb25zZS5jb250ZW50TGVuZ3RoIC0gb2Zmc2V0O1xuICAgICAgICAgICAgICAgIGlmIChjb3VudCA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYG9mZnNldCAke29mZnNldH0gc2hvdWxkbid0IGJlIGxhcmdlciB0aGFuIGJsb2Igc2l6ZSAke3Jlc3BvbnNlLmNvbnRlbnRMZW5ndGh9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQWxsb2NhdGUgdGhlIGJ1ZmZlciBvZiBzaXplID0gY291bnQgaWYgdGhlIGJ1ZmZlciBpcyBub3QgcHJvdmlkZWRcbiAgICAgICAgICAgIGlmICghYnVmZmVyKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgYnVmZmVyID0gQnVmZmVyLmFsbG9jKGNvdW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGFsbG9jYXRlIHRoZSBidWZmZXIgb2Ygc2l6ZTogJHtjb3VudH0oaW4gYnl0ZXMpLiBQbGVhc2UgdHJ5IHBhc3NpbmcgeW91ciBvd24gYnVmZmVyIHRvIHRoZSBcImRvd25sb2FkVG9CdWZmZXJcIiBtZXRob2Qgb3IgdHJ5IHVzaW5nIG90aGVyIG1ldGhvZHMgbGlrZSBcImRvd25sb2FkXCIgb3IgXCJkb3dubG9hZFRvRmlsZVwiLlxcdCAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGJ1ZmZlci5sZW5ndGggPCBjb3VudCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBUaGUgYnVmZmVyJ3Mgc2l6ZSBzaG91bGQgYmUgZXF1YWwgdG8gb3IgbGFyZ2VyIHRoYW4gdGhlIHJlcXVlc3QgY291bnQgb2YgYnl0ZXM6ICR7Y291bnR9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgdHJhbnNmZXJQcm9ncmVzcyA9IDA7XG4gICAgICAgICAgICBjb25zdCBiYXRjaCA9IG5ldyBCYXRjaChvcHRpb25zLmNvbmN1cnJlbmN5KTtcbiAgICAgICAgICAgIGZvciAobGV0IG9mZiA9IG9mZnNldDsgb2ZmIDwgb2Zmc2V0ICsgY291bnQ7IG9mZiA9IG9mZiArIGJsb2NrU2l6ZSkge1xuICAgICAgICAgICAgICAgIGJhdGNoLmFkZE9wZXJhdGlvbihhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEV4Y2x1c2l2ZSBjaHVuayBlbmQgcG9zaXRpb25cbiAgICAgICAgICAgICAgICAgICAgbGV0IGNodW5rRW5kID0gb2Zmc2V0ICsgY291bnQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvZmYgKyBibG9ja1NpemUgPCBjaHVua0VuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2h1bmtFbmQgPSBvZmYgKyBibG9ja1NpemU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmRvd25sb2FkKG9mZiwgY2h1bmtFbmQgLSBvZmYsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4UmV0cnlSZXF1ZXN0czogb3B0aW9ucy5tYXhSZXRyeVJlcXVlc3RzUGVyQmxvY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21lclByb3ZpZGVkS2V5OiBvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJlYW0gPSByZXNwb25zZS5yZWFkYWJsZVN0cmVhbUJvZHk7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHN0cmVhbVRvQnVmZmVyKHN0cmVhbSwgYnVmZmVyLCBvZmYgLSBvZmZzZXQsIGNodW5rRW5kIC0gb2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIHByb2dyZXNzIGFmdGVyIGJsb2NrIGlzIGRvd25sb2FkZWQsIGluIGNhc2Ugb2YgYmxvY2sgdHJ5aW5nXG4gICAgICAgICAgICAgICAgICAgIC8vIENvdWxkIHByb3ZpZGUgZmluZXIgZ3JhaW5lZCBwcm9ncmVzcyB1cGRhdGluZyBpbnNpZGUgSFRUUCByZXF1ZXN0cyxcbiAgICAgICAgICAgICAgICAgICAgLy8gb25seSBpZiBjb252ZW5pZW5jZSBsYXllciBkb3dubG9hZCB0cnkgaXMgZW5hYmxlZFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2ZlclByb2dyZXNzICs9IGNodW5rRW5kIC0gb2ZmO1xuICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5vblByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm9uUHJvZ3Jlc3MoeyBsb2FkZWRCeXRlczogdHJhbnNmZXJQcm9ncmVzcyB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXdhaXQgYmF0Y2guZG8oKTtcbiAgICAgICAgICAgIHJldHVybiBidWZmZXI7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBPTkxZIEFWQUlMQUJMRSBJTiBOT0RFLkpTIFJVTlRJTUUuXG4gICAgICpcbiAgICAgKiBEb3dubG9hZHMgYW4gQXp1cmUgQmxvYiB0byBhIGxvY2FsIGZpbGUuXG4gICAgICogRmFpbHMgaWYgdGhlIHRoZSBnaXZlbiBmaWxlIHBhdGggYWxyZWFkeSBleGl0cy5cbiAgICAgKiBPZmZzZXQgYW5kIGNvdW50IGFyZSBvcHRpb25hbCwgcGFzcyAwIGFuZCB1bmRlZmluZWQgcmVzcGVjdGl2ZWx5IHRvIGRvd25sb2FkIHRoZSBlbnRpcmUgYmxvYi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBmaWxlUGF0aCAtXG4gICAgICogQHBhcmFtIG9mZnNldCAtIEZyb20gd2hpY2ggcG9zaXRpb24gb2YgdGhlIGJsb2NrIGJsb2IgdG8gZG93bmxvYWQuXG4gICAgICogQHBhcmFtIGNvdW50IC0gSG93IG11Y2ggZGF0YSB0byBiZSBkb3dubG9hZGVkLiBXaWxsIGRvd25sb2FkIHRvIHRoZSBlbmQgd2hlbiBwYXNzaW5nIHVuZGVmaW5lZC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gQmxvYiBkb3dubG9hZCBvcHRpb25zLlxuICAgICAqIEByZXR1cm5zIFRoZSByZXNwb25zZSBkYXRhIGZvciBibG9iIGRvd25sb2FkIG9wZXJhdGlvbixcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXQgd2l0aCByZWFkYWJsZVN0cmVhbUJvZHkgc2V0IHRvIHVuZGVmaW5lZCBzaW5jZSBpdHNcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50IGlzIGFscmVhZHkgcmVhZCBhbmQgd3JpdHRlbiBpbnRvIGEgbG9jYWwgZmlsZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0IHRoZSBzcGVjaWZpZWQgcGF0aC5cbiAgICAgKi9cbiAgICBhc3luYyBkb3dubG9hZFRvRmlsZShmaWxlUGF0aCwgb2Zmc2V0ID0gMCwgY291bnQsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JDbGllbnQtZG93bmxvYWRUb0ZpbGVcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZG93bmxvYWQob2Zmc2V0LCBjb3VudCwgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKSwgeyB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMgfSkpO1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnJlYWRhYmxlU3RyZWFtQm9keSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHJlYWRTdHJlYW1Ub0xvY2FsRmlsZShyZXNwb25zZS5yZWFkYWJsZVN0cmVhbUJvZHksIGZpbGVQYXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFRoZSBzdHJlYW0gaXMgbm8gbG9uZ2VyIGFjY2Vzc2libGUgc28gc2V0dGluZyBpdCB0byB1bmRlZmluZWQuXG4gICAgICAgICAgICByZXNwb25zZS5ibG9iRG93bmxvYWRTdHJlYW0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBnZXRCbG9iQW5kQ29udGFpbmVyTmFtZXNGcm9tVXJsKCkge1xuICAgICAgICBsZXQgY29udGFpbmVyTmFtZTtcbiAgICAgICAgbGV0IGJsb2JOYW1lO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gIFVSTCBtYXkgbG9vayBsaWtlIHRoZSBmb2xsb3dpbmdcbiAgICAgICAgICAgIC8vIFwiaHR0cHM6Ly9teWFjY291bnQuYmxvYi5jb3JlLndpbmRvd3MubmV0L215Y29udGFpbmVyL2Jsb2I/c2FzU3RyaW5nXCI7XG4gICAgICAgICAgICAvLyBcImh0dHBzOi8vbXlhY2NvdW50LmJsb2IuY29yZS53aW5kb3dzLm5ldC9teWNvbnRhaW5lci9ibG9iXCI7XG4gICAgICAgICAgICAvLyBcImh0dHBzOi8vbXlhY2NvdW50LmJsb2IuY29yZS53aW5kb3dzLm5ldC9teWNvbnRhaW5lci9ibG9iL2EudHh0P3Nhc1N0cmluZ1wiO1xuICAgICAgICAgICAgLy8gXCJodHRwczovL215YWNjb3VudC5ibG9iLmNvcmUud2luZG93cy5uZXQvbXljb250YWluZXIvYmxvYi9hLnR4dFwiO1xuICAgICAgICAgICAgLy8gSVB2NC9JUHY2IGFkZHJlc3MgaG9zdHMsIEVuZHBvaW50cyAtIGBodHRwOi8vMTI3LjAuMC4xOjEwMDAwL2RldnN0b3JlYWNjb3VudDEvY29udGFpbmVybmFtZS9ibG9iYFxuICAgICAgICAgICAgLy8gaHR0cDovL2xvY2FsaG9zdDoxMDAwMS9kZXZzdG9yZWFjY291bnQxL2NvbnRhaW5lcm5hbWUvYmxvYlxuICAgICAgICAgICAgY29uc3QgcGFyc2VkVXJsID0gbmV3IFVSTCh0aGlzLnVybCk7XG4gICAgICAgICAgICBpZiAocGFyc2VkVXJsLmhvc3Quc3BsaXQoXCIuXCIpWzFdID09PSBcImJsb2JcIikge1xuICAgICAgICAgICAgICAgIC8vIFwiaHR0cHM6Ly9teWFjY291bnQuYmxvYi5jb3JlLndpbmRvd3MubmV0L2NvbnRhaW5lcm5hbWUvYmxvYlwiLlxuICAgICAgICAgICAgICAgIC8vIC5nZXRQYXRoKCkgLT4gL2NvbnRhaW5lcm5hbWUvYmxvYlxuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGhDb21wb25lbnRzID0gcGFyc2VkVXJsLnBhdGhuYW1lLm1hdGNoKFwiLyhbXi9dKikoLyguKikpP1wiKTtcbiAgICAgICAgICAgICAgICBjb250YWluZXJOYW1lID0gcGF0aENvbXBvbmVudHNbMV07XG4gICAgICAgICAgICAgICAgYmxvYk5hbWUgPSBwYXRoQ29tcG9uZW50c1szXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzSXBFbmRwb2ludFN0eWxlKHBhcnNlZFVybCkpIHtcbiAgICAgICAgICAgICAgICAvLyBJUHY0L0lQdjYgYWRkcmVzcyBob3N0cy4uLiBFeGFtcGxlIC0gaHR0cDovLzE5Mi4wLjAuMTA6MTAwMDEvZGV2c3RvcmVhY2NvdW50MS9jb250YWluZXJuYW1lL2Jsb2JcbiAgICAgICAgICAgICAgICAvLyBTaW5nbGUgd29yZCBkb21haW4gd2l0aG91dCBhIFtkb3RdIGluIHRoZSBlbmRwb2ludC4uLiBFeGFtcGxlIC0gaHR0cDovL2xvY2FsaG9zdDoxMDAwMS9kZXZzdG9yZWFjY291bnQxL2NvbnRhaW5lcm5hbWUvYmxvYlxuICAgICAgICAgICAgICAgIC8vIC5nZXRQYXRoKCkgLT4gL2RldnN0b3JlYWNjb3VudDEvY29udGFpbmVybmFtZS9ibG9iXG4gICAgICAgICAgICAgICAgY29uc3QgcGF0aENvbXBvbmVudHMgPSBwYXJzZWRVcmwucGF0aG5hbWUubWF0Y2goXCIvKFteL10qKS8oW14vXSopKC8oLiopKT9cIik7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyTmFtZSA9IHBhdGhDb21wb25lbnRzWzJdO1xuICAgICAgICAgICAgICAgIGJsb2JOYW1lID0gcGF0aENvbXBvbmVudHNbNF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBcImh0dHBzOi8vY3VzdG9tZG9tYWluLmNvbS9jb250YWluZXJuYW1lL2Jsb2JcIi5cbiAgICAgICAgICAgICAgICAvLyAuZ2V0UGF0aCgpIC0+IC9jb250YWluZXJuYW1lL2Jsb2JcbiAgICAgICAgICAgICAgICBjb25zdCBwYXRoQ29tcG9uZW50cyA9IHBhcnNlZFVybC5wYXRobmFtZS5tYXRjaChcIi8oW14vXSopKC8oLiopKT9cIik7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyTmFtZSA9IHBhdGhDb21wb25lbnRzWzFdO1xuICAgICAgICAgICAgICAgIGJsb2JOYW1lID0gcGF0aENvbXBvbmVudHNbM107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBkZWNvZGUgdGhlIGVuY29kZWQgYmxvYk5hbWUsIGNvbnRhaW5lck5hbWUgLSB0byBnZXQgYWxsIHRoZSBzcGVjaWFsIGNoYXJhY3RlcnMgdGhhdCBtaWdodCBiZSBwcmVzZW50IGluIHRoZW1cbiAgICAgICAgICAgIGNvbnRhaW5lck5hbWUgPSBkZWNvZGVVUklDb21wb25lbnQoY29udGFpbmVyTmFtZSk7XG4gICAgICAgICAgICBibG9iTmFtZSA9IGRlY29kZVVSSUNvbXBvbmVudChibG9iTmFtZSk7XG4gICAgICAgICAgICAvLyBBenVyZSBTdG9yYWdlIFNlcnZlciB3aWxsIHJlcGxhY2UgXCJcXFwiIHdpdGggXCIvXCIgaW4gdGhlIGJsb2IgbmFtZXNcbiAgICAgICAgICAgIC8vICAgZG9pbmcgdGhlIHNhbWUgaW4gdGhlIFNESyBzaWRlIHNvIHRoYXQgdGhlIHVzZXIgZG9lc24ndCBoYXZlIHRvIHJlcGxhY2UgXCJcXFwiIGluc3RhbmNlcyBpbiB0aGUgYmxvYk5hbWVcbiAgICAgICAgICAgIGJsb2JOYW1lID0gYmxvYk5hbWUucmVwbGFjZSgvXFxcXC9nLCBcIi9cIik7XG4gICAgICAgICAgICBpZiAoIWNvbnRhaW5lck5hbWUpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQcm92aWRlZCBjb250YWluZXJOYW1lIGlzIGludmFsaWQuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHsgYmxvYk5hbWUsIGNvbnRhaW5lck5hbWUgfTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBleHRyYWN0IGJsb2JOYW1lIGFuZCBjb250YWluZXJOYW1lIHdpdGggcHJvdmlkZWQgaW5mb3JtYXRpb24uXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFzeW5jaHJvbm91c2x5IGNvcGllcyBhIGJsb2IgdG8gYSBkZXN0aW5hdGlvbiB3aXRoaW4gdGhlIHN0b3JhZ2UgYWNjb3VudC5cbiAgICAgKiBJbiB2ZXJzaW9uIDIwMTItMDItMTIgYW5kIGxhdGVyLCB0aGUgc291cmNlIGZvciBhIENvcHkgQmxvYiBvcGVyYXRpb24gY2FuIGJlXG4gICAgICogYSBjb21taXR0ZWQgYmxvYiBpbiBhbnkgQXp1cmUgc3RvcmFnZSBhY2NvdW50LlxuICAgICAqIEJlZ2lubmluZyB3aXRoIHZlcnNpb24gMjAxNS0wMi0yMSwgdGhlIHNvdXJjZSBmb3IgYSBDb3B5IEJsb2Igb3BlcmF0aW9uIGNhbiBiZVxuICAgICAqIGFuIEF6dXJlIGZpbGUgaW4gYW55IEF6dXJlIHN0b3JhZ2UgYWNjb3VudC5cbiAgICAgKiBPbmx5IHN0b3JhZ2UgYWNjb3VudHMgY3JlYXRlZCBvbiBvciBhZnRlciBKdW5lIDd0aCwgMjAxMiBhbGxvdyB0aGUgQ29weSBCbG9iXG4gICAgICogb3BlcmF0aW9uIHRvIGNvcHkgZnJvbSBhbm90aGVyIHN0b3JhZ2UgYWNjb3VudC5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9jb3B5LWJsb2JcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb3B5U291cmNlIC0gdXJsIHRvIHRoZSBzb3VyY2UgQXp1cmUgQmxvYi9GaWxlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgb3B0aW9ucyB0byB0aGUgQmxvYiBTdGFydCBDb3B5IEZyb20gVVJMIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBzdGFydENvcHlGcm9tVVJMKGNvcHlTb3VyY2UsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JDbGllbnQtc3RhcnRDb3B5RnJvbVVSTFwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYSwgX2IsIF9jO1xuICAgICAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0gb3B0aW9ucy5jb25kaXRpb25zIHx8IHt9O1xuICAgICAgICAgICAgb3B0aW9ucy5zb3VyY2VDb25kaXRpb25zID0gb3B0aW9ucy5zb3VyY2VDb25kaXRpb25zIHx8IHt9O1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuYmxvYkNvbnRleHQuc3RhcnRDb3B5RnJvbVVSTChjb3B5U291cmNlLCB7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbWV0YWRhdGE6IG9wdGlvbnMubWV0YWRhdGEsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIHNvdXJjZU1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICBzb3VyY2VJZk1hdGNoOiBvcHRpb25zLnNvdXJjZUNvbmRpdGlvbnMuaWZNYXRjaCxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlSWZNb2RpZmllZFNpbmNlOiBvcHRpb25zLnNvdXJjZUNvbmRpdGlvbnMuaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VJZk5vbmVNYXRjaDogb3B0aW9ucy5zb3VyY2VDb25kaXRpb25zLmlmTm9uZU1hdGNoLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VJZlVubW9kaWZpZWRTaW5jZTogb3B0aW9ucy5zb3VyY2VDb25kaXRpb25zLmlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VJZlRhZ3M6IG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucy50YWdDb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5RXhwaXJ5OiAoX2IgPSBvcHRpb25zLmltbXV0YWJpbGl0eVBvbGljeSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmV4cGlyaWVzT24sXG4gICAgICAgICAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5TW9kZTogKF9jID0gb3B0aW9ucy5pbW11dGFiaWxpdHlQb2xpY3kpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5wb2xpY3lNb2RlLFxuICAgICAgICAgICAgICAgIGxlZ2FsSG9sZDogb3B0aW9ucy5sZWdhbEhvbGQsXG4gICAgICAgICAgICAgICAgcmVoeWRyYXRlUHJpb3JpdHk6IG9wdGlvbnMucmVoeWRyYXRlUHJpb3JpdHksXG4gICAgICAgICAgICAgICAgdGllcjogdG9BY2Nlc3NUaWVyKG9wdGlvbnMudGllciksXG4gICAgICAgICAgICAgICAgYmxvYlRhZ3NTdHJpbmc6IHRvQmxvYlRhZ3NTdHJpbmcob3B0aW9ucy50YWdzKSxcbiAgICAgICAgICAgICAgICBzZWFsQmxvYjogb3B0aW9ucy5zZWFsQmxvYixcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBPbmx5IGF2YWlsYWJsZSBmb3IgQmxvYkNsaWVudCBjb25zdHJ1Y3RlZCB3aXRoIGEgc2hhcmVkIGtleSBjcmVkZW50aWFsLlxuICAgICAqXG4gICAgICogR2VuZXJhdGVzIGEgQmxvYiBTZXJ2aWNlIFNoYXJlZCBBY2Nlc3MgU2lnbmF0dXJlIChTQVMpIFVSSSBiYXNlZCBvbiB0aGUgY2xpZW50IHByb3BlcnRpZXNcbiAgICAgKiBhbmQgcGFyYW1ldGVycyBwYXNzZWQgaW4uIFRoZSBTQVMgaXMgc2lnbmVkIGJ5IHRoZSBzaGFyZWQga2V5IGNyZWRlbnRpYWwgb2YgdGhlIGNsaWVudC5cbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2NvbnN0cnVjdGluZy1hLXNlcnZpY2Utc2FzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIHBhcmFtZXRlcnMuXG4gICAgICogQHJldHVybnMgVGhlIFNBUyBVUkkgY29uc2lzdGluZyBvZiB0aGUgVVJJIHRvIHRoZSByZXNvdXJjZSByZXByZXNlbnRlZCBieSB0aGlzIGNsaWVudCwgZm9sbG93ZWQgYnkgdGhlIGdlbmVyYXRlZCBTQVMgdG9rZW4uXG4gICAgICovXG4gICAgZ2VuZXJhdGVTYXNVcmwob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIGlmICghKHRoaXMuY3JlZGVudGlhbCBpbnN0YW5jZW9mIFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiQ2FuIG9ubHkgZ2VuZXJhdGUgdGhlIFNBUyB3aGVuIHRoZSBjbGllbnQgaXMgaW5pdGlhbGl6ZWQgd2l0aCBhIHNoYXJlZCBrZXkgY3JlZGVudGlhbFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHNhcyA9IGdlbmVyYXRlQmxvYlNBU1F1ZXJ5UGFyYW1ldGVycyhPYmplY3QuYXNzaWduKHsgY29udGFpbmVyTmFtZTogdGhpcy5fY29udGFpbmVyTmFtZSwgYmxvYk5hbWU6IHRoaXMuX25hbWUsIHNuYXBzaG90VGltZTogdGhpcy5fc25hcHNob3QsIHZlcnNpb25JZDogdGhpcy5fdmVyc2lvbklkIH0sIG9wdGlvbnMpLCB0aGlzLmNyZWRlbnRpYWwpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICByZXNvbHZlKGFwcGVuZFRvVVJMUXVlcnkodGhpcy51cmwsIHNhcykpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogT25seSBhdmFpbGFibGUgZm9yIEJsb2JDbGllbnQgY29uc3RydWN0ZWQgd2l0aCBhIHNoYXJlZCBrZXkgY3JlZGVudGlhbC5cbiAgICAgKlxuICAgICAqIEdlbmVyYXRlcyBzdHJpbmcgdG8gc2lnbiBmb3IgYSBCbG9iIFNlcnZpY2UgU2hhcmVkIEFjY2VzcyBTaWduYXR1cmUgKFNBUykgVVJJIGJhc2VkIG9uXG4gICAgICogdGhlIGNsaWVudCBwcm9wZXJ0aWVzIGFuZCBwYXJhbWV0ZXJzIHBhc3NlZCBpbi4gVGhlIFNBUyBpcyBzaWduZWQgYnkgdGhlIHNoYXJlZCBrZXkgY3JlZGVudGlhbCBvZiB0aGUgY2xpZW50LlxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvY29uc3RydWN0aW5nLWEtc2VydmljZS1zYXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgcGFyYW1ldGVycy5cbiAgICAgKiBAcmV0dXJucyBUaGUgU0FTIFVSSSBjb25zaXN0aW5nIG9mIHRoZSBVUkkgdG8gdGhlIHJlc291cmNlIHJlcHJlc2VudGVkIGJ5IHRoaXMgY2xpZW50LCBmb2xsb3dlZCBieSB0aGUgZ2VuZXJhdGVkIFNBUyB0b2tlbi5cbiAgICAgKi9cbiAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGF6dXJlL2F6dXJlLXNkay90cy1uYW1pbmctb3B0aW9ucyovXG4gICAgZ2VuZXJhdGVTYXNTdHJpbmdUb1NpZ24ob3B0aW9ucykge1xuICAgICAgICBpZiAoISh0aGlzLmNyZWRlbnRpYWwgaW5zdGFuY2VvZiBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiQ2FuIG9ubHkgZ2VuZXJhdGUgdGhlIFNBUyB3aGVuIHRoZSBjbGllbnQgaXMgaW5pdGlhbGl6ZWQgd2l0aCBhIHNoYXJlZCBrZXkgY3JlZGVudGlhbFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2VuZXJhdGVCbG9iU0FTUXVlcnlQYXJhbWV0ZXJzSW50ZXJuYWwoT2JqZWN0LmFzc2lnbih7IGNvbnRhaW5lck5hbWU6IHRoaXMuX2NvbnRhaW5lck5hbWUsIGJsb2JOYW1lOiB0aGlzLl9uYW1lLCBzbmFwc2hvdFRpbWU6IHRoaXMuX3NuYXBzaG90LCB2ZXJzaW9uSWQ6IHRoaXMuX3ZlcnNpb25JZCB9LCBvcHRpb25zKSwgdGhpcy5jcmVkZW50aWFsKS5zdHJpbmdUb1NpZ247XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlbGV0ZSB0aGUgaW1tdXRhYmxpbGl0eSBwb2xpY3kgb24gdGhlIGJsb2IuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIG9wdGlvbnMgdG8gZGVsZXRlIGltbXV0YWJpbGl0eSBwb2xpY3kgb24gdGhlIGJsb2IuXG4gICAgICovXG4gICAgYXN5bmMgZGVsZXRlSW1tdXRhYmlsaXR5UG9saWN5KG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JDbGllbnQtZGVsZXRlSW1tdXRhYmlsaXR5UG9saWN5XCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuYmxvYkNvbnRleHQuZGVsZXRlSW1tdXRhYmlsaXR5UG9saWN5KHtcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXQgaW1tdXRhYmlsaXR5IHBvbGljeSBvbiB0aGUgYmxvYi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgb3B0aW9ucyB0byBzZXQgaW1tdXRhYmlsaXR5IHBvbGljeSBvbiB0aGUgYmxvYi5cbiAgICAgKi9cbiAgICBhc3luYyBzZXRJbW11dGFiaWxpdHlQb2xpY3koaW1tdXRhYmlsaXR5UG9saWN5LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iQ2xpZW50LXNldEltbXV0YWJpbGl0eVBvbGljeVwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLmJsb2JDb250ZXh0LnNldEltbXV0YWJpbGl0eVBvbGljeSh7XG4gICAgICAgICAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5RXhwaXJ5OiBpbW11dGFiaWxpdHlQb2xpY3kuZXhwaXJpZXNPbixcbiAgICAgICAgICAgICAgICBpbW11dGFiaWxpdHlQb2xpY3lNb2RlOiBpbW11dGFiaWxpdHlQb2xpY3kucG9saWN5TW9kZSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXQgbGVnYWwgaG9sZCBvbiB0aGUgYmxvYi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgb3B0aW9ucyB0byBzZXQgbGVnYWwgaG9sZCBvbiB0aGUgYmxvYi5cbiAgICAgKi9cbiAgICBhc3luYyBzZXRMZWdhbEhvbGQobGVnYWxIb2xkRW5hYmxlZCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYkNsaWVudC1zZXRMZWdhbEhvbGRcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5ibG9iQ29udGV4dC5zZXRMZWdhbEhvbGQobGVnYWxIb2xkRW5hYmxlZCwge1xuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBHZXQgQWNjb3VudCBJbmZvcm1hdGlvbiBvcGVyYXRpb24gcmV0dXJucyB0aGUgc2t1IG5hbWUgYW5kIGFjY291bnQga2luZFxuICAgICAqIGZvciB0aGUgc3BlY2lmaWVkIGFjY291bnQuXG4gICAgICogVGhlIEdldCBBY2NvdW50IEluZm9ybWF0aW9uIG9wZXJhdGlvbiBpcyBhdmFpbGFibGUgb24gc2VydmljZSB2ZXJzaW9ucyBiZWdpbm5pbmdcbiAgICAgKiB3aXRoIHZlcnNpb24gMjAxOC0wMy0yOC5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9nZXQtYWNjb3VudC1pbmZvcm1hdGlvblxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHRoZSBTZXJ2aWNlIEdldCBBY2NvdW50IEluZm8gb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIFJlc3BvbnNlIGRhdGEgZm9yIHRoZSBTZXJ2aWNlIEdldCBBY2NvdW50IEluZm8gb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGdldEFjY291bnRJbmZvKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JDbGllbnQtZ2V0QWNjb3VudEluZm9cIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5ibG9iQ29udGV4dC5nZXRBY2NvdW50SW5mbyh7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4vKipcbiAqIEFwcGVuZEJsb2JDbGllbnQgZGVmaW5lcyBhIHNldCBvZiBvcGVyYXRpb25zIGFwcGxpY2FibGUgdG8gYXBwZW5kIGJsb2JzLlxuICovXG5jbGFzcyBBcHBlbmRCbG9iQ2xpZW50IGV4dGVuZHMgQmxvYkNsaWVudCB7XG4gICAgY29uc3RydWN0b3IodXJsT3JDb25uZWN0aW9uU3RyaW5nLCBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSwgYmxvYk5hbWVPck9wdGlvbnMsIFxuICAgIC8vIExlZ2FjeSwgbm8gZml4IGZvciBlc2xpbnQgZXJyb3Igd2l0aG91dCBicmVha2luZy4gRGlzYWJsZSBpdCBmb3IgdGhpcyBpbnRlcmZhY2UuXG4gICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhenVyZS9henVyZS1zZGsvdHMtbmFtaW5nLW9wdGlvbnMqL1xuICAgIG9wdGlvbnMpIHtcbiAgICAgICAgLy8gSW4gVHlwZVNjcmlwdCB3ZSBjYW5ub3Qgc2ltcGx5IHBhc3MgYWxsIHBhcmFtZXRlcnMgdG8gc3VwZXIoKSBsaWtlIGJlbG93IHNvIGhhdmUgdG8gZHVwbGljYXRlIHRoZSBjb2RlIGluc3RlYWQuXG4gICAgICAgIC8vICAgc3VwZXIocywgY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWVPck9wdGlvbnMsIGJsb2JOYW1lT3JPcHRpb25zLCBvcHRpb25zKTtcbiAgICAgICAgbGV0IHBpcGVsaW5lO1xuICAgICAgICBsZXQgdXJsO1xuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgaWYgKGlzUGlwZWxpbmVMaWtlKGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lKSkge1xuICAgICAgICAgICAgLy8gKHVybDogc3RyaW5nLCBwaXBlbGluZTogUGlwZWxpbmUpXG4gICAgICAgICAgICB1cmwgPSB1cmxPckNvbm5lY3Rpb25TdHJpbmc7XG4gICAgICAgICAgICBwaXBlbGluZSA9IGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKChjb3JlVXRpbC5pc05vZGUgJiYgY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUgaW5zdGFuY2VvZiBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbCkgfHxcbiAgICAgICAgICAgIGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lIGluc3RhbmNlb2YgQW5vbnltb3VzQ3JlZGVudGlhbCB8fFxuICAgICAgICAgICAgY29yZUF1dGguaXNUb2tlbkNyZWRlbnRpYWwoY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUpKSB7XG4gICAgICAgICAgICAvLyAodXJsOiBzdHJpbmcsIGNyZWRlbnRpYWw/OiBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbCB8IEFub255bW91c0NyZWRlbnRpYWwgfCBUb2tlbkNyZWRlbnRpYWwsIG9wdGlvbnM/OiBTdG9yYWdlUGlwZWxpbmVPcHRpb25zKSAgICAgIHVybCA9IHVybE9yQ29ubmVjdGlvblN0cmluZztcbiAgICAgICAgICAgIHVybCA9IHVybE9yQ29ubmVjdGlvblN0cmluZztcbiAgICAgICAgICAgIG9wdGlvbnMgPSBibG9iTmFtZU9yT3B0aW9ucztcbiAgICAgICAgICAgIHBpcGVsaW5lID0gbmV3UGlwZWxpbmUoY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSAmJlxuICAgICAgICAgICAgdHlwZW9mIGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAvLyAodXJsOiBzdHJpbmcsIGNyZWRlbnRpYWw/OiBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbCB8IEFub255bW91c0NyZWRlbnRpYWwgfCBUb2tlbkNyZWRlbnRpYWwsIG9wdGlvbnM/OiBTdG9yYWdlUGlwZWxpbmVPcHRpb25zKVxuICAgICAgICAgICAgdXJsID0gdXJsT3JDb25uZWN0aW9uU3RyaW5nO1xuICAgICAgICAgICAgLy8gVGhlIHNlY29uZCBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkLiBVc2UgYW5vbnltb3VzIGNyZWRlbnRpYWwuXG4gICAgICAgICAgICBwaXBlbGluZSA9IG5ld1BpcGVsaW5lKG5ldyBBbm9ueW1vdXNDcmVkZW50aWFsKCksIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lICYmXG4gICAgICAgICAgICB0eXBlb2YgY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICAgIGJsb2JOYW1lT3JPcHRpb25zICYmXG4gICAgICAgICAgICB0eXBlb2YgYmxvYk5hbWVPck9wdGlvbnMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIC8vIChjb25uZWN0aW9uU3RyaW5nOiBzdHJpbmcsIGNvbnRhaW5lck5hbWU6IHN0cmluZywgYmxvYk5hbWU6IHN0cmluZywgb3B0aW9ucz86IFN0b3JhZ2VQaXBlbGluZU9wdGlvbnMpXG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJOYW1lID0gY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWU7XG4gICAgICAgICAgICBjb25zdCBibG9iTmFtZSA9IGJsb2JOYW1lT3JPcHRpb25zO1xuICAgICAgICAgICAgY29uc3QgZXh0cmFjdGVkQ3JlZHMgPSBleHRyYWN0Q29ubmVjdGlvblN0cmluZ1BhcnRzKHVybE9yQ29ubmVjdGlvblN0cmluZyk7XG4gICAgICAgICAgICBpZiAoZXh0cmFjdGVkQ3JlZHMua2luZCA9PT0gXCJBY2NvdW50Q29ublN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvcmVVdGlsLmlzTm9kZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaGFyZWRLZXlDcmVkZW50aWFsID0gbmV3IFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsKGV4dHJhY3RlZENyZWRzLmFjY291bnROYW1lLCBleHRyYWN0ZWRDcmVkcy5hY2NvdW50S2V5KTtcbiAgICAgICAgICAgICAgICAgICAgdXJsID0gYXBwZW5kVG9VUkxQYXRoKGFwcGVuZFRvVVJMUGF0aChleHRyYWN0ZWRDcmVkcy51cmwsIGVuY29kZVVSSUNvbXBvbmVudChjb250YWluZXJOYW1lKSksIGVuY29kZVVSSUNvbXBvbmVudChibG9iTmFtZSkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMucHJveHlPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnByb3h5T3B0aW9ucyA9IGNvcmVSZXN0UGlwZWxpbmUuZ2V0RGVmYXVsdFByb3h5U2V0dGluZ3MoZXh0cmFjdGVkQ3JlZHMucHJveHlVcmkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHBpcGVsaW5lID0gbmV3UGlwZWxpbmUoc2hhcmVkS2V5Q3JlZGVudGlhbCwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBY2NvdW50IGNvbm5lY3Rpb24gc3RyaW5nIGlzIG9ubHkgc3VwcG9ydGVkIGluIE5vZGUuanMgZW52aXJvbm1lbnRcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZXh0cmFjdGVkQ3JlZHMua2luZCA9PT0gXCJTQVNDb25uU3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICB1cmwgPVxuICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb1VSTFBhdGgoYXBwZW5kVG9VUkxQYXRoKGV4dHJhY3RlZENyZWRzLnVybCwgZW5jb2RlVVJJQ29tcG9uZW50KGNvbnRhaW5lck5hbWUpKSwgZW5jb2RlVVJJQ29tcG9uZW50KGJsb2JOYW1lKSkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCI/XCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFjdGVkQ3JlZHMuYWNjb3VudFNhcztcbiAgICAgICAgICAgICAgICBwaXBlbGluZSA9IG5ld1BpcGVsaW5lKG5ldyBBbm9ueW1vdXNDcmVkZW50aWFsKCksIG9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29ubmVjdGlvbiBzdHJpbmcgbXVzdCBiZSBlaXRoZXIgYW4gQWNjb3VudCBjb25uZWN0aW9uIHN0cmluZyBvciBhIFNBUyBjb25uZWN0aW9uIHN0cmluZ1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGluZyBub24tZW1wdHkgc3RyaW5ncyBmb3IgY29udGFpbmVyTmFtZSBhbmQgYmxvYk5hbWUgcGFyYW1ldGVyc1wiKTtcbiAgICAgICAgfVxuICAgICAgICBzdXBlcih1cmwsIHBpcGVsaW5lKTtcbiAgICAgICAgdGhpcy5hcHBlbmRCbG9iQ29udGV4dCA9IHRoaXMuc3RvcmFnZUNsaWVudENvbnRleHQuYXBwZW5kQmxvYjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBBcHBlbmRCbG9iQ2xpZW50IG9iamVjdCBpZGVudGljYWwgdG8gdGhlIHNvdXJjZSBidXQgd2l0aCB0aGVcbiAgICAgKiBzcGVjaWZpZWQgc25hcHNob3QgdGltZXN0YW1wLlxuICAgICAqIFByb3ZpZGUgXCJcIiB3aWxsIHJlbW92ZSB0aGUgc25hcHNob3QgYW5kIHJldHVybiBhIENsaWVudCB0byB0aGUgYmFzZSBibG9iLlxuICAgICAqXG4gICAgICogQHBhcmFtIHNuYXBzaG90IC0gVGhlIHNuYXBzaG90IHRpbWVzdGFtcC5cbiAgICAgKiBAcmV0dXJucyBBIG5ldyBBcHBlbmRCbG9iQ2xpZW50IG9iamVjdCBpZGVudGljYWwgdG8gdGhlIHNvdXJjZSBidXQgd2l0aCB0aGUgc3BlY2lmaWVkIHNuYXBzaG90IHRpbWVzdGFtcC5cbiAgICAgKi9cbiAgICB3aXRoU25hcHNob3Qoc25hcHNob3QpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBcHBlbmRCbG9iQ2xpZW50KHNldFVSTFBhcmFtZXRlcih0aGlzLnVybCwgVVJMQ29uc3RhbnRzLlBhcmFtZXRlcnMuU05BUFNIT1QsIHNuYXBzaG90Lmxlbmd0aCA9PT0gMCA/IHVuZGVmaW5lZCA6IHNuYXBzaG90KSwgdGhpcy5waXBlbGluZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSAwLWxlbmd0aCBhcHBlbmQgYmxvYi4gQ2FsbCBBcHBlbmRCbG9jayB0byBhcHBlbmQgZGF0YSB0byBhbiBhcHBlbmQgYmxvYi5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9wdXQtYmxvYlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHRoZSBBcHBlbmQgQmxvY2sgQ3JlYXRlIG9wZXJhdGlvbi5cbiAgICAgKlxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2FnZTpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogY29uc3QgYXBwZW5kQmxvYkNsaWVudCA9IGNvbnRhaW5lckNsaWVudC5nZXRBcHBlbmRCbG9iQ2xpZW50KFwiPGJsb2IgbmFtZT5cIik7XG4gICAgICogYXdhaXQgYXBwZW5kQmxvYkNsaWVudC5jcmVhdGUoKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBhc3luYyBjcmVhdGUob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIG9wdGlvbnMuY29uZGl0aW9ucyA9IG9wdGlvbnMuY29uZGl0aW9ucyB8fCB7fTtcbiAgICAgICAgZW5zdXJlQ3BrSWZTcGVjaWZpZWQob3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LCB0aGlzLmlzSHR0cHMpO1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkFwcGVuZEJsb2JDbGllbnQtY3JlYXRlXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5hcHBlbmRCbG9iQ29udGV4dC5jcmVhdGUoMCwge1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGJsb2JIdHRwSGVhZGVyczogb3B0aW9ucy5ibG9iSFRUUEhlYWRlcnMsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbWV0YWRhdGE6IG9wdGlvbnMubWV0YWRhdGEsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIGNwa0luZm86IG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSxcbiAgICAgICAgICAgICAgICBlbmNyeXB0aW9uU2NvcGU6IG9wdGlvbnMuZW5jcnlwdGlvblNjb3BlLFxuICAgICAgICAgICAgICAgIGltbXV0YWJpbGl0eVBvbGljeUV4cGlyeTogKF9iID0gb3B0aW9ucy5pbW11dGFiaWxpdHlQb2xpY3kpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5leHBpcmllc09uLFxuICAgICAgICAgICAgICAgIGltbXV0YWJpbGl0eVBvbGljeU1vZGU6IChfYyA9IG9wdGlvbnMuaW1tdXRhYmlsaXR5UG9saWN5KSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MucG9saWN5TW9kZSxcbiAgICAgICAgICAgICAgICBsZWdhbEhvbGQ6IG9wdGlvbnMubGVnYWxIb2xkLFxuICAgICAgICAgICAgICAgIGJsb2JUYWdzU3RyaW5nOiB0b0Jsb2JUYWdzU3RyaW5nKG9wdGlvbnMudGFncyksXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIDAtbGVuZ3RoIGFwcGVuZCBibG9iLiBDYWxsIEFwcGVuZEJsb2NrIHRvIGFwcGVuZCBkYXRhIHRvIGFuIGFwcGVuZCBibG9iLlxuICAgICAqIElmIHRoZSBibG9iIHdpdGggdGhlIHNhbWUgbmFtZSBhbHJlYWR5IGV4aXN0cywgdGhlIGNvbnRlbnQgb2YgdGhlIGV4aXN0aW5nIGJsb2Igd2lsbCByZW1haW4gdW5jaGFuZ2VkLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL3B1dC1ibG9iXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtXG4gICAgICovXG4gICAgYXN5bmMgY3JlYXRlSWZOb3RFeGlzdHMob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IGNvbmRpdGlvbnMgPSB7IGlmTm9uZU1hdGNoOiBFVGFnQW55IH07XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQXBwZW5kQmxvYkNsaWVudC1jcmVhdGVJZk5vdEV4aXN0c1wiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuY3JlYXRlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgdXBkYXRlZE9wdGlvbnMpLCB7IGNvbmRpdGlvbnMgfSkpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHsgc3VjY2VlZGVkOiB0cnVlIH0sIHJlcyksIHsgX3Jlc3BvbnNlOiByZXMuX3Jlc3BvbnNlIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoKChfYSA9IGUuZGV0YWlscykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmVycm9yQ29kZSkgPT09IFwiQmxvYkFscmVhZHlFeGlzdHNcIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHsgc3VjY2VlZGVkOiBmYWxzZSB9LCAoX2IgPSBlLnJlc3BvbnNlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IucGFyc2VkSGVhZGVycyksIHsgX3Jlc3BvbnNlOiBlLnJlc3BvbnNlIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2VhbHMgdGhlIGFwcGVuZCBibG9iLCBtYWtpbmcgaXQgcmVhZCBvbmx5LlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLVxuICAgICAqL1xuICAgIGFzeW5jIHNlYWwob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIG9wdGlvbnMuY29uZGl0aW9ucyA9IG9wdGlvbnMuY29uZGl0aW9ucyB8fCB7fTtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJBcHBlbmRCbG9iQ2xpZW50LXNlYWxcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5hcHBlbmRCbG9iQ29udGV4dC5zZWFsKHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBhcHBlbmRQb3NpdGlvbkFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29tbWl0cyBhIG5ldyBibG9jayBvZiBkYXRhIHRvIHRoZSBlbmQgb2YgdGhlIGV4aXN0aW5nIGFwcGVuZCBibG9iLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2FwcGVuZC1ibG9ja1xuICAgICAqXG4gICAgICogQHBhcmFtIGJvZHkgLSBEYXRhIHRvIGJlIGFwcGVuZGVkLlxuICAgICAqIEBwYXJhbSBjb250ZW50TGVuZ3RoIC0gTGVuZ3RoIG9mIHRoZSBib2R5IGluIGJ5dGVzLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB0aGUgQXBwZW5kIEJsb2NrIG9wZXJhdGlvbi5cbiAgICAgKlxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2FnZTpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogY29uc3QgY29udGVudCA9IFwiSGVsbG8gV29ybGQhXCI7XG4gICAgICpcbiAgICAgKiAvLyBDcmVhdGUgYSBuZXcgYXBwZW5kIGJsb2IgYW5kIGFwcGVuZCBkYXRhIHRvIHRoZSBibG9iLlxuICAgICAqIGNvbnN0IG5ld0FwcGVuZEJsb2JDbGllbnQgPSBjb250YWluZXJDbGllbnQuZ2V0QXBwZW5kQmxvYkNsaWVudChcIjxibG9iIG5hbWU+XCIpO1xuICAgICAqIGF3YWl0IG5ld0FwcGVuZEJsb2JDbGllbnQuY3JlYXRlKCk7XG4gICAgICogYXdhaXQgbmV3QXBwZW5kQmxvYkNsaWVudC5hcHBlbmRCbG9jayhjb250ZW50LCBjb250ZW50Lmxlbmd0aCk7XG4gICAgICpcbiAgICAgKiAvLyBBcHBlbmQgZGF0YSB0byBhbiBleGlzdGluZyBhcHBlbmQgYmxvYi5cbiAgICAgKiBjb25zdCBleGlzdGluZ0FwcGVuZEJsb2JDbGllbnQgPSBjb250YWluZXJDbGllbnQuZ2V0QXBwZW5kQmxvYkNsaWVudChcIjxibG9iIG5hbWU+XCIpO1xuICAgICAqIGF3YWl0IGV4aXN0aW5nQXBwZW5kQmxvYkNsaWVudC5hcHBlbmRCbG9jayhjb250ZW50LCBjb250ZW50Lmxlbmd0aCk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgYXN5bmMgYXBwZW5kQmxvY2soYm9keSwgY29udGVudExlbmd0aCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIG9wdGlvbnMuY29uZGl0aW9ucyA9IG9wdGlvbnMuY29uZGl0aW9ucyB8fCB7fTtcbiAgICAgICAgZW5zdXJlQ3BrSWZTcGVjaWZpZWQob3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LCB0aGlzLmlzSHR0cHMpO1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkFwcGVuZEJsb2JDbGllbnQtYXBwZW5kQmxvY2tcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5hcHBlbmRCbG9iQ29udGV4dC5hcHBlbmRCbG9jayhjb250ZW50TGVuZ3RoLCBib2R5LCB7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgYXBwZW5kUG9zaXRpb25BY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIHJlcXVlc3RPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgIG9uVXBsb2FkUHJvZ3Jlc3M6IG9wdGlvbnMub25Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uYWxDb250ZW50TUQ1OiBvcHRpb25zLnRyYW5zYWN0aW9uYWxDb250ZW50TUQ1LFxuICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uYWxDb250ZW50Q3JjNjQ6IG9wdGlvbnMudHJhbnNhY3Rpb25hbENvbnRlbnRDcmM2NCxcbiAgICAgICAgICAgICAgICBjcGtJbmZvOiBvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksXG4gICAgICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiBvcHRpb25zLmVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgQXBwZW5kIEJsb2NrIG9wZXJhdGlvbiBjb21taXRzIGEgbmV3IGJsb2NrIG9mIGRhdGEgdG8gdGhlIGVuZCBvZiBhbiBleGlzdGluZyBhcHBlbmQgYmxvYlxuICAgICAqIHdoZXJlIHRoZSBjb250ZW50cyBhcmUgcmVhZCBmcm9tIGEgc291cmNlIHVybC5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9hcHBlbmQtYmxvY2stZnJvbS11cmxcbiAgICAgKlxuICAgICAqIEBwYXJhbSBzb3VyY2VVUkwgLVxuICAgICAqICAgICAgICAgICAgICAgICBUaGUgdXJsIHRvIHRoZSBibG9iIHRoYXQgd2lsbCBiZSB0aGUgc291cmNlIG9mIHRoZSBjb3B5LiBBIHNvdXJjZSBibG9iIGluIHRoZSBzYW1lIHN0b3JhZ2UgYWNjb3VudCBjYW5cbiAgICAgKiAgICAgICAgICAgICAgICAgYmUgYXV0aGVudGljYXRlZCB2aWEgU2hhcmVkIEtleS4gSG93ZXZlciwgaWYgdGhlIHNvdXJjZSBpcyBhIGJsb2IgaW4gYW5vdGhlciBhY2NvdW50LCB0aGUgc291cmNlIGJsb2JcbiAgICAgKiAgICAgICAgICAgICAgICAgbXVzdCBlaXRoZXIgYmUgcHVibGljIG9yIG11c3QgYmUgYXV0aGVudGljYXRlZCB2aWEgYSBzaGFyZWQgYWNjZXNzIHNpZ25hdHVyZS4gSWYgdGhlIHNvdXJjZSBibG9iIGlzXG4gICAgICogICAgICAgICAgICAgICAgIHB1YmxpYywgbm8gYXV0aGVudGljYXRpb24gaXMgcmVxdWlyZWQgdG8gcGVyZm9ybSB0aGUgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSBzb3VyY2VPZmZzZXQgLSBPZmZzZXQgaW4gc291cmNlIHRvIGJlIGFwcGVuZGVkXG4gICAgICogQHBhcmFtIGNvdW50IC0gTnVtYmVyIG9mIGJ5dGVzIHRvIGJlIGFwcGVuZGVkIGFzIGEgYmxvY2tcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtXG4gICAgICovXG4gICAgYXN5bmMgYXBwZW5kQmxvY2tGcm9tVVJMKHNvdXJjZVVSTCwgc291cmNlT2Zmc2V0LCBjb3VudCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIG9wdGlvbnMuY29uZGl0aW9ucyA9IG9wdGlvbnMuY29uZGl0aW9ucyB8fCB7fTtcbiAgICAgICAgb3B0aW9ucy5zb3VyY2VDb25kaXRpb25zID0gb3B0aW9ucy5zb3VyY2VDb25kaXRpb25zIHx8IHt9O1xuICAgICAgICBlbnN1cmVDcGtJZlNwZWNpZmllZChvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksIHRoaXMuaXNIdHRwcyk7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQXBwZW5kQmxvYkNsaWVudC1hcHBlbmRCbG9ja0Zyb21VUkxcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lO1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuYXBwZW5kQmxvYkNvbnRleHQuYXBwZW5kQmxvY2tGcm9tVXJsKHNvdXJjZVVSTCwgMCwge1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIHNvdXJjZVJhbmdlOiByYW5nZVRvU3RyaW5nKHsgb2Zmc2V0OiBzb3VyY2VPZmZzZXQsIGNvdW50IH0pLFxuICAgICAgICAgICAgICAgIHNvdXJjZUNvbnRlbnRNRDU6IG9wdGlvbnMuc291cmNlQ29udGVudE1ENSxcbiAgICAgICAgICAgICAgICBzb3VyY2VDb250ZW50Q3JjNjQ6IG9wdGlvbnMuc291cmNlQ29udGVudENyYzY0LFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIGFwcGVuZFBvc2l0aW9uQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICBzb3VyY2VNb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgc291cmNlSWZNYXRjaDogKF9iID0gb3B0aW9ucy5zb3VyY2VDb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaWZNYXRjaCxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlSWZNb2RpZmllZFNpbmNlOiAoX2MgPSBvcHRpb25zLnNvdXJjZUNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5pZk1vZGlmaWVkU2luY2UsXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUlmTm9uZU1hdGNoOiAoX2QgPSBvcHRpb25zLnNvdXJjZUNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZC5pZk5vbmVNYXRjaCxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlSWZVbm1vZGlmaWVkU2luY2U6IChfZSA9IG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucykgPT09IG51bGwgfHwgX2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9lLmlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY29weVNvdXJjZUF1dGhvcml6YXRpb246IGh0dHBBdXRob3JpemF0aW9uVG9TdHJpbmcob3B0aW9ucy5zb3VyY2VBdXRob3JpemF0aW9uKSxcbiAgICAgICAgICAgICAgICBjcGtJbmZvOiBvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksXG4gICAgICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiBvcHRpb25zLmVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbi8qKlxuICogQmxvY2tCbG9iQ2xpZW50IGRlZmluZXMgYSBzZXQgb2Ygb3BlcmF0aW9ucyBhcHBsaWNhYmxlIHRvIGJsb2NrIGJsb2JzLlxuICovXG5jbGFzcyBCbG9ja0Jsb2JDbGllbnQgZXh0ZW5kcyBCbG9iQ2xpZW50IHtcbiAgICBjb25zdHJ1Y3Rvcih1cmxPckNvbm5lY3Rpb25TdHJpbmcsIGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lLCBibG9iTmFtZU9yT3B0aW9ucywgXG4gICAgLy8gTGVnYWN5LCBubyBmaXggZm9yIGVzbGludCBlcnJvciB3aXRob3V0IGJyZWFraW5nLiBEaXNhYmxlIGl0IGZvciB0aGlzIGludGVyZmFjZS5cbiAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGF6dXJlL2F6dXJlLXNkay90cy1uYW1pbmctb3B0aW9ucyovXG4gICAgb3B0aW9ucykge1xuICAgICAgICAvLyBJbiBUeXBlU2NyaXB0IHdlIGNhbm5vdCBzaW1wbHkgcGFzcyBhbGwgcGFyYW1ldGVycyB0byBzdXBlcigpIGxpa2UgYmVsb3cgc28gaGF2ZSB0byBkdXBsaWNhdGUgdGhlIGNvZGUgaW5zdGVhZC5cbiAgICAgICAgLy8gICBzdXBlcihzLCBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZU9yT3B0aW9ucywgYmxvYk5hbWVPck9wdGlvbnMsIG9wdGlvbnMpO1xuICAgICAgICBsZXQgcGlwZWxpbmU7XG4gICAgICAgIGxldCB1cmw7XG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgICAgICBpZiAoaXNQaXBlbGluZUxpa2UoY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUpKSB7XG4gICAgICAgICAgICAvLyAodXJsOiBzdHJpbmcsIHBpcGVsaW5lOiBQaXBlbGluZSlcbiAgICAgICAgICAgIHVybCA9IHVybE9yQ29ubmVjdGlvblN0cmluZztcbiAgICAgICAgICAgIHBpcGVsaW5lID0gY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoKGNvcmVVdGlsLmlzTm9kZSAmJiBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSBpbnN0YW5jZW9mIFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsKSB8fFxuICAgICAgICAgICAgY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUgaW5zdGFuY2VvZiBBbm9ueW1vdXNDcmVkZW50aWFsIHx8XG4gICAgICAgICAgICBjb3JlQXV0aC5pc1Rva2VuQ3JlZGVudGlhbChjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSkpIHtcbiAgICAgICAgICAgIC8vICh1cmw6IHN0cmluZywgY3JlZGVudGlhbD86IFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsIHwgQW5vbnltb3VzQ3JlZGVudGlhbCB8IFRva2VuQ3JlZGVudGlhbCwgb3B0aW9ucz86IFN0b3JhZ2VQaXBlbGluZU9wdGlvbnMpXG4gICAgICAgICAgICB1cmwgPSB1cmxPckNvbm5lY3Rpb25TdHJpbmc7XG4gICAgICAgICAgICBvcHRpb25zID0gYmxvYk5hbWVPck9wdGlvbnM7XG4gICAgICAgICAgICBwaXBlbGluZSA9IG5ld1BpcGVsaW5lKGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUgJiZcbiAgICAgICAgICAgIHR5cGVvZiBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgLy8gKHVybDogc3RyaW5nLCBjcmVkZW50aWFsPzogU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwgfCBBbm9ueW1vdXNDcmVkZW50aWFsIHwgVG9rZW5DcmVkZW50aWFsLCBvcHRpb25zPzogU3RvcmFnZVBpcGVsaW5lT3B0aW9ucylcbiAgICAgICAgICAgIC8vIFRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZC4gVXNlIGFub255bW91cyBjcmVkZW50aWFsLlxuICAgICAgICAgICAgdXJsID0gdXJsT3JDb25uZWN0aW9uU3RyaW5nO1xuICAgICAgICAgICAgaWYgKGJsb2JOYW1lT3JPcHRpb25zICYmIHR5cGVvZiBibG9iTmFtZU9yT3B0aW9ucyAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMgPSBibG9iTmFtZU9yT3B0aW9ucztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBpcGVsaW5lID0gbmV3UGlwZWxpbmUobmV3IEFub255bW91c0NyZWRlbnRpYWwoKSwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUgJiZcbiAgICAgICAgICAgIHR5cGVvZiBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgYmxvYk5hbWVPck9wdGlvbnMgJiZcbiAgICAgICAgICAgIHR5cGVvZiBibG9iTmFtZU9yT3B0aW9ucyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgLy8gKGNvbm5lY3Rpb25TdHJpbmc6IHN0cmluZywgY29udGFpbmVyTmFtZTogc3RyaW5nLCBibG9iTmFtZTogc3RyaW5nLCBvcHRpb25zPzogU3RvcmFnZVBpcGVsaW5lT3B0aW9ucylcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lck5hbWUgPSBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZTtcbiAgICAgICAgICAgIGNvbnN0IGJsb2JOYW1lID0gYmxvYk5hbWVPck9wdGlvbnM7XG4gICAgICAgICAgICBjb25zdCBleHRyYWN0ZWRDcmVkcyA9IGV4dHJhY3RDb25uZWN0aW9uU3RyaW5nUGFydHModXJsT3JDb25uZWN0aW9uU3RyaW5nKTtcbiAgICAgICAgICAgIGlmIChleHRyYWN0ZWRDcmVkcy5raW5kID09PSBcIkFjY291bnRDb25uU3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29yZVV0aWwuaXNOb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNoYXJlZEtleUNyZWRlbnRpYWwgPSBuZXcgU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwoZXh0cmFjdGVkQ3JlZHMuYWNjb3VudE5hbWUsIGV4dHJhY3RlZENyZWRzLmFjY291bnRLZXkpO1xuICAgICAgICAgICAgICAgICAgICB1cmwgPSBhcHBlbmRUb1VSTFBhdGgoYXBwZW5kVG9VUkxQYXRoKGV4dHJhY3RlZENyZWRzLnVybCwgZW5jb2RlVVJJQ29tcG9uZW50KGNvbnRhaW5lck5hbWUpKSwgZW5jb2RlVVJJQ29tcG9uZW50KGJsb2JOYW1lKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucy5wcm94eU9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMucHJveHlPcHRpb25zID0gY29yZVJlc3RQaXBlbGluZS5nZXREZWZhdWx0UHJveHlTZXR0aW5ncyhleHRyYWN0ZWRDcmVkcy5wcm94eVVyaSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcGlwZWxpbmUgPSBuZXdQaXBlbGluZShzaGFyZWRLZXlDcmVkZW50aWFsLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFjY291bnQgY29ubmVjdGlvbiBzdHJpbmcgaXMgb25seSBzdXBwb3J0ZWQgaW4gTm9kZS5qcyBlbnZpcm9ubWVudFwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChleHRyYWN0ZWRDcmVkcy5raW5kID09PSBcIlNBU0Nvbm5TdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIHVybCA9XG4gICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvVVJMUGF0aChhcHBlbmRUb1VSTFBhdGgoZXh0cmFjdGVkQ3JlZHMudXJsLCBlbmNvZGVVUklDb21wb25lbnQoY29udGFpbmVyTmFtZSkpLCBlbmNvZGVVUklDb21wb25lbnQoYmxvYk5hbWUpKSArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIj9cIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYWN0ZWRDcmVkcy5hY2NvdW50U2FzO1xuICAgICAgICAgICAgICAgIHBpcGVsaW5lID0gbmV3UGlwZWxpbmUobmV3IEFub255bW91c0NyZWRlbnRpYWwoKSwgb3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb25uZWN0aW9uIHN0cmluZyBtdXN0IGJlIGVpdGhlciBhbiBBY2NvdW50IGNvbm5lY3Rpb24gc3RyaW5nIG9yIGEgU0FTIGNvbm5lY3Rpb24gc3RyaW5nXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0aW5nIG5vbi1lbXB0eSBzdHJpbmdzIGZvciBjb250YWluZXJOYW1lIGFuZCBibG9iTmFtZSBwYXJhbWV0ZXJzXCIpO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyKHVybCwgcGlwZWxpbmUpO1xuICAgICAgICB0aGlzLmJsb2NrQmxvYkNvbnRleHQgPSB0aGlzLnN0b3JhZ2VDbGllbnRDb250ZXh0LmJsb2NrQmxvYjtcbiAgICAgICAgdGhpcy5fYmxvYkNvbnRleHQgPSB0aGlzLnN0b3JhZ2VDbGllbnRDb250ZXh0LmJsb2I7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgQmxvY2tCbG9iQ2xpZW50IG9iamVjdCBpZGVudGljYWwgdG8gdGhlIHNvdXJjZSBidXQgd2l0aCB0aGVcbiAgICAgKiBzcGVjaWZpZWQgc25hcHNob3QgdGltZXN0YW1wLlxuICAgICAqIFByb3ZpZGUgXCJcIiB3aWxsIHJlbW92ZSB0aGUgc25hcHNob3QgYW5kIHJldHVybiBhIFVSTCB0byB0aGUgYmFzZSBibG9iLlxuICAgICAqXG4gICAgICogQHBhcmFtIHNuYXBzaG90IC0gVGhlIHNuYXBzaG90IHRpbWVzdGFtcC5cbiAgICAgKiBAcmV0dXJucyBBIG5ldyBCbG9ja0Jsb2JDbGllbnQgb2JqZWN0IGlkZW50aWNhbCB0byB0aGUgc291cmNlIGJ1dCB3aXRoIHRoZSBzcGVjaWZpZWQgc25hcHNob3QgdGltZXN0YW1wLlxuICAgICAqL1xuICAgIHdpdGhTbmFwc2hvdChzbmFwc2hvdCkge1xuICAgICAgICByZXR1cm4gbmV3IEJsb2NrQmxvYkNsaWVudChzZXRVUkxQYXJhbWV0ZXIodGhpcy51cmwsIFVSTENvbnN0YW50cy5QYXJhbWV0ZXJzLlNOQVBTSE9ULCBzbmFwc2hvdC5sZW5ndGggPT09IDAgPyB1bmRlZmluZWQgOiBzbmFwc2hvdCksIHRoaXMucGlwZWxpbmUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBPTkxZIEFWQUlMQUJMRSBJTiBOT0RFLkpTIFJVTlRJTUUuXG4gICAgICpcbiAgICAgKiBRdWljayBxdWVyeSBmb3IgYSBKU09OIG9yIENTViBmb3JtYXR0ZWQgYmxvYi5cbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNhZ2UgKE5vZGUuanMpOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiAvLyBRdWVyeSBhbmQgY29udmVydCBhIGJsb2IgdG8gYSBzdHJpbmdcbiAgICAgKiBjb25zdCBxdWVyeUJsb2NrQmxvYlJlc3BvbnNlID0gYXdhaXQgYmxvY2tCbG9iQ2xpZW50LnF1ZXJ5KFwic2VsZWN0ICogZnJvbSBCbG9iU3RvcmFnZVwiKTtcbiAgICAgKiBjb25zdCBkb3dubG9hZGVkID0gKGF3YWl0IHN0cmVhbVRvQnVmZmVyKHF1ZXJ5QmxvY2tCbG9iUmVzcG9uc2UucmVhZGFibGVTdHJlYW1Cb2R5KSkudG9TdHJpbmcoKTtcbiAgICAgKiBjb25zb2xlLmxvZyhcIlF1ZXJ5IGJsb2IgY29udGVudDpcIiwgZG93bmxvYWRlZCk7XG4gICAgICpcbiAgICAgKiBhc3luYyBmdW5jdGlvbiBzdHJlYW1Ub0J1ZmZlcihyZWFkYWJsZVN0cmVhbSkge1xuICAgICAqICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgKiAgICAgY29uc3QgY2h1bmtzID0gW107XG4gICAgICogICAgIHJlYWRhYmxlU3RyZWFtLm9uKFwiZGF0YVwiLCAoZGF0YSkgPT4ge1xuICAgICAqICAgICAgIGNodW5rcy5wdXNoKGRhdGEgaW5zdGFuY2VvZiBCdWZmZXIgPyBkYXRhIDogQnVmZmVyLmZyb20oZGF0YSkpO1xuICAgICAqICAgICB9KTtcbiAgICAgKiAgICAgcmVhZGFibGVTdHJlYW0ub24oXCJlbmRcIiwgKCkgPT4ge1xuICAgICAqICAgICAgIHJlc29sdmUoQnVmZmVyLmNvbmNhdChjaHVua3MpKTtcbiAgICAgKiAgICAgfSk7XG4gICAgICogICAgIHJlYWRhYmxlU3RyZWFtLm9uKFwiZXJyb3JcIiwgcmVqZWN0KTtcbiAgICAgKiAgIH0pO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBwYXJhbSBxdWVyeSAtXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLVxuICAgICAqL1xuICAgIGFzeW5jIHF1ZXJ5KHF1ZXJ5LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgZW5zdXJlQ3BrSWZTcGVjaWZpZWQob3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LCB0aGlzLmlzSHR0cHMpO1xuICAgICAgICBpZiAoIWNvcmVVdGlsLmlzTm9kZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBvcGVyYXRpb24gY3VycmVudGx5IGlzIG9ubHkgc3VwcG9ydGVkIGluIE5vZGUuanMuXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvY2tCbG9iQ2xpZW50LXF1ZXJ5XCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLl9ibG9iQ29udGV4dC5xdWVyeSh7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgcXVlcnlSZXF1ZXN0OiB7XG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5VHlwZTogXCJTUUxcIixcbiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogcXVlcnksXG4gICAgICAgICAgICAgICAgICAgIGlucHV0U2VyaWFsaXphdGlvbjogdG9RdWVyeVNlcmlhbGl6YXRpb24ob3B0aW9ucy5pbnB1dFRleHRDb25maWd1cmF0aW9uKSxcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0U2VyaWFsaXphdGlvbjogdG9RdWVyeVNlcmlhbGl6YXRpb24ob3B0aW9ucy5vdXRwdXRUZXh0Q29uZmlndXJhdGlvbiksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgY3BrSW5mbzogb3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQmxvYlF1ZXJ5UmVzcG9uc2UocmVzcG9uc2UsIHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBvblByb2dyZXNzOiBvcHRpb25zLm9uUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgb25FcnJvcjogb3B0aW9ucy5vbkVycm9yLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IGJsb2NrIGJsb2IsIG9yIHVwZGF0ZXMgdGhlIGNvbnRlbnQgb2YgYW4gZXhpc3RpbmcgYmxvY2sgYmxvYi5cbiAgICAgKiBVcGRhdGluZyBhbiBleGlzdGluZyBibG9jayBibG9iIG92ZXJ3cml0ZXMgYW55IGV4aXN0aW5nIG1ldGFkYXRhIG9uIHRoZSBibG9iLlxuICAgICAqIFBhcnRpYWwgdXBkYXRlcyBhcmUgbm90IHN1cHBvcnRlZDsgdGhlIGNvbnRlbnQgb2YgdGhlIGV4aXN0aW5nIGJsb2IgaXNcbiAgICAgKiBvdmVyd3JpdHRlbiB3aXRoIHRoZSBuZXcgY29udGVudC4gVG8gcGVyZm9ybSBhIHBhcnRpYWwgdXBkYXRlIG9mIGEgYmxvY2sgYmxvYidzLFxuICAgICAqIHVzZSB7QGxpbmsgc3RhZ2VCbG9ja30gYW5kIHtAbGluayBjb21taXRCbG9ja0xpc3R9LlxuICAgICAqXG4gICAgICogVGhpcyBpcyBhIG5vbi1wYXJhbGxlbCB1cGxvYWRpbmcgbWV0aG9kLCBwbGVhc2UgdXNlIHtAbGluayB1cGxvYWRGaWxlfSxcbiAgICAgKiB7QGxpbmsgdXBsb2FkU3RyZWFtfSBvciB7QGxpbmsgdXBsb2FkQnJvd3NlckRhdGF9IGZvciBiZXR0ZXIgcGVyZm9ybWFuY2VcbiAgICAgKiB3aXRoIGNvbmN1cnJlbmN5IHVwbG9hZGluZy5cbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL3B1dC1ibG9iXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYm9keSAtIEJsb2IsIHN0cmluZywgQXJyYXlCdWZmZXIsIEFycmF5QnVmZmVyVmlldyBvciBhIGZ1bmN0aW9uXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggcmV0dXJucyBhIG5ldyBSZWFkYWJsZSBzdHJlYW0gd2hvc2Ugb2Zmc2V0IGlzIGZyb20gZGF0YSBzb3VyY2UgYmVnaW5uaW5nLlxuICAgICAqIEBwYXJhbSBjb250ZW50TGVuZ3RoIC0gTGVuZ3RoIG9mIGJvZHkgaW4gYnl0ZXMuIFVzZSBCdWZmZXIuYnl0ZUxlbmd0aCgpIHRvIGNhbGN1bGF0ZSBib2R5IGxlbmd0aCBmb3IgYVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyBpbmNsdWRpbmcgbm9uIG5vbi1CYXNlNjQvSGV4LWVuY29kZWQgY2hhcmFjdGVycy5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gdGhlIEJsb2NrIEJsb2IgVXBsb2FkIG9wZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyBSZXNwb25zZSBkYXRhIGZvciB0aGUgQmxvY2sgQmxvYiBVcGxvYWQgb3BlcmF0aW9uLlxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2FnZTpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogY29uc3QgY29udGVudCA9IFwiSGVsbG8gd29ybGQhXCI7XG4gICAgICogY29uc3QgdXBsb2FkQmxvYlJlc3BvbnNlID0gYXdhaXQgYmxvY2tCbG9iQ2xpZW50LnVwbG9hZChjb250ZW50LCBjb250ZW50Lmxlbmd0aCk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgYXN5bmMgdXBsb2FkKGJvZHksIGNvbnRlbnRMZW5ndGgsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIGVuc3VyZUNwa0lmU3BlY2lmaWVkKG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSwgdGhpcy5pc0h0dHBzKTtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9ja0Jsb2JDbGllbnQtdXBsb2FkXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5ibG9ja0Jsb2JDb250ZXh0LnVwbG9hZChjb250ZW50TGVuZ3RoLCBib2R5LCB7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgYmxvYkh0dHBIZWFkZXJzOiBvcHRpb25zLmJsb2JIVFRQSGVhZGVycyxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBtZXRhZGF0YTogb3B0aW9ucy5tZXRhZGF0YSxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgcmVxdWVzdE9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgb25VcGxvYWRQcm9ncmVzczogb3B0aW9ucy5vblByb2dyZXNzLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY3BrSW5mbzogb3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LFxuICAgICAgICAgICAgICAgIGVuY3J5cHRpb25TY29wZTogb3B0aW9ucy5lbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgICAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5RXhwaXJ5OiAoX2IgPSBvcHRpb25zLmltbXV0YWJpbGl0eVBvbGljeSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmV4cGlyaWVzT24sXG4gICAgICAgICAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5TW9kZTogKF9jID0gb3B0aW9ucy5pbW11dGFiaWxpdHlQb2xpY3kpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5wb2xpY3lNb2RlLFxuICAgICAgICAgICAgICAgIGxlZ2FsSG9sZDogb3B0aW9ucy5sZWdhbEhvbGQsXG4gICAgICAgICAgICAgICAgdGllcjogdG9BY2Nlc3NUaWVyKG9wdGlvbnMudGllciksXG4gICAgICAgICAgICAgICAgYmxvYlRhZ3NTdHJpbmc6IHRvQmxvYlRhZ3NTdHJpbmcob3B0aW9ucy50YWdzKSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IEJsb2NrIEJsb2Igd2hlcmUgdGhlIGNvbnRlbnRzIG9mIHRoZSBibG9iIGFyZSByZWFkIGZyb20gYSBnaXZlbiBVUkwuXG4gICAgICogVGhpcyBBUEkgaXMgc3VwcG9ydGVkIGJlZ2lubmluZyB3aXRoIHRoZSAyMDIwLTA0LTA4IHZlcnNpb24uIFBhcnRpYWwgdXBkYXRlc1xuICAgICAqIGFyZSBub3Qgc3VwcG9ydGVkIHdpdGggUHV0IEJsb2IgZnJvbSBVUkw7IHRoZSBjb250ZW50IG9mIGFuIGV4aXN0aW5nIGJsb2IgaXMgb3ZlcndyaXR0ZW4gd2l0aFxuICAgICAqIHRoZSBjb250ZW50IG9mIHRoZSBuZXcgYmxvYi4gIFRvIHBlcmZvcm0gcGFydGlhbCB1cGRhdGVzIHRvIGEgYmxvY2sgYmxvYuKAmXMgY29udGVudHMgdXNpbmcgYVxuICAgICAqIHNvdXJjZSBVUkwsIHVzZSB7QGxpbmsgc3RhZ2VCbG9ja0Zyb21VUkx9IGFuZCB7QGxpbmsgY29tbWl0QmxvY2tMaXN0fS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzb3VyY2VVUkwgLSBTcGVjaWZpZXMgdGhlIFVSTCBvZiB0aGUgYmxvYi4gVGhlIHZhbHVlXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBtYXkgYmUgYSBVUkwgb2YgdXAgdG8gMiBLQiBpbiBsZW5ndGggdGhhdCBzcGVjaWZpZXMgYSBibG9iLlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHZhbHVlIHNob3VsZCBiZSBVUkwtZW5jb2RlZCBhcyBpdCB3b3VsZCBhcHBlYXJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGEgcmVxdWVzdCBVUkkuIFRoZSBzb3VyY2UgYmxvYiBtdXN0IGVpdGhlciBiZSBwdWJsaWNcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIG11c3QgYmUgYXV0aGVudGljYXRlZCB2aWEgYSBzaGFyZWQgYWNjZXNzIHNpZ25hdHVyZS5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoZSBzb3VyY2UgYmxvYiBpcyBwdWJsaWMsIG5vIGF1dGhlbnRpY2F0aW9uIGlzIHJlcXVpcmVkXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICB0byBwZXJmb3JtIHRoZSBvcGVyYXRpb24uIEhlcmUgYXJlIHNvbWUgZXhhbXBsZXMgb2Ygc291cmNlIG9iamVjdCBVUkxzOlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBodHRwczovL215YWNjb3VudC5ibG9iLmNvcmUud2luZG93cy5uZXQvbXljb250YWluZXIvbXlibG9iXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAtIGh0dHBzOi8vbXlhY2NvdW50LmJsb2IuY29yZS53aW5kb3dzLm5ldC9teWNvbnRhaW5lci9teWJsb2I/c25hcHNob3Q9PERhdGVUaW1lPlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBhc3luYyBzeW5jVXBsb2FkRnJvbVVSTChzb3VyY2VVUkwsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIGVuc3VyZUNwa0lmU3BlY2lmaWVkKG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSwgdGhpcy5pc0h0dHBzKTtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9ja0Jsb2JDbGllbnQtc3luY1VwbG9hZEZyb21VUkxcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lLCBfZjtcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLmJsb2NrQmxvYkNvbnRleHQucHV0QmxvYkZyb21VcmwoMCwgc291cmNlVVJMLCBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMpLCB7IGJsb2JIdHRwSGVhZGVyczogb3B0aW9ucy5ibG9iSFRUUEhlYWRlcnMsIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLCBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksIHNvdXJjZU1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICBzb3VyY2VJZk1hdGNoOiAoX2IgPSBvcHRpb25zLnNvdXJjZUNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5pZk1hdGNoLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VJZk1vZGlmaWVkU2luY2U6IChfYyA9IG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlSWZOb25lTWF0Y2g6IChfZCA9IG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucykgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLmlmTm9uZU1hdGNoLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VJZlVubW9kaWZpZWRTaW5jZTogKF9lID0gb3B0aW9ucy5zb3VyY2VDb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2UuaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUlmVGFnczogKF9mID0gb3B0aW9ucy5zb3VyY2VDb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2YudGFnQ29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICB9LCBjcGtJbmZvOiBvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksIGNvcHlTb3VyY2VBdXRob3JpemF0aW9uOiBodHRwQXV0aG9yaXphdGlvblRvU3RyaW5nKG9wdGlvbnMuc291cmNlQXV0aG9yaXphdGlvbiksIHRpZXI6IHRvQWNjZXNzVGllcihvcHRpb25zLnRpZXIpLCBibG9iVGFnc1N0cmluZzogdG9CbG9iVGFnc1N0cmluZyhvcHRpb25zLnRhZ3MpLCBjb3B5U291cmNlVGFnczogb3B0aW9ucy5jb3B5U291cmNlVGFncywgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zIH0pKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBVcGxvYWRzIHRoZSBzcGVjaWZpZWQgYmxvY2sgdG8gdGhlIGJsb2NrIGJsb2IncyBcInN0YWdpbmcgYXJlYVwiIHRvIGJlIGxhdGVyXG4gICAgICogY29tbWl0dGVkIGJ5IGEgY2FsbCB0byBjb21taXRCbG9ja0xpc3QuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvcHV0LWJsb2NrXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYmxvY2tJZCAtIEEgNjQtYnl0ZSB2YWx1ZSB0aGF0IGlzIGJhc2U2NC1lbmNvZGVkXG4gICAgICogQHBhcmFtIGJvZHkgLSBEYXRhIHRvIHVwbG9hZCB0byB0aGUgc3RhZ2luZyBhcmVhLlxuICAgICAqIEBwYXJhbSBjb250ZW50TGVuZ3RoIC0gTnVtYmVyIG9mIGJ5dGVzIHRvIHVwbG9hZC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gdGhlIEJsb2NrIEJsb2IgU3RhZ2UgQmxvY2sgb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIFJlc3BvbnNlIGRhdGEgZm9yIHRoZSBCbG9jayBCbG9iIFN0YWdlIEJsb2NrIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBzdGFnZUJsb2NrKGJsb2NrSWQsIGJvZHksIGNvbnRlbnRMZW5ndGgsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBlbnN1cmVDcGtJZlNwZWNpZmllZChvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksIHRoaXMuaXNIdHRwcyk7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvY2tCbG9iQ2xpZW50LXN0YWdlQmxvY2tcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5ibG9ja0Jsb2JDb250ZXh0LnN0YWdlQmxvY2soYmxvY2tJZCwgY29udGVudExlbmd0aCwgYm9keSwge1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIHJlcXVlc3RPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgIG9uVXBsb2FkUHJvZ3Jlc3M6IG9wdGlvbnMub25Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uYWxDb250ZW50TUQ1OiBvcHRpb25zLnRyYW5zYWN0aW9uYWxDb250ZW50TUQ1LFxuICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uYWxDb250ZW50Q3JjNjQ6IG9wdGlvbnMudHJhbnNhY3Rpb25hbENvbnRlbnRDcmM2NCxcbiAgICAgICAgICAgICAgICBjcGtJbmZvOiBvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksXG4gICAgICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiBvcHRpb25zLmVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgU3RhZ2UgQmxvY2sgRnJvbSBVUkwgb3BlcmF0aW9uIGNyZWF0ZXMgYSBuZXcgYmxvY2sgdG8gYmUgY29tbWl0dGVkIGFzIHBhcnRcbiAgICAgKiBvZiBhIGJsb2Igd2hlcmUgdGhlIGNvbnRlbnRzIGFyZSByZWFkIGZyb20gYSBVUkwuXG4gICAgICogVGhpcyBBUEkgaXMgYXZhaWxhYmxlIHN0YXJ0aW5nIGluIHZlcnNpb24gMjAxOC0wMy0yOC5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9wdXQtYmxvY2stZnJvbS11cmxcbiAgICAgKlxuICAgICAqIEBwYXJhbSBibG9ja0lkIC0gQSA2NC1ieXRlIHZhbHVlIHRoYXQgaXMgYmFzZTY0LWVuY29kZWRcbiAgICAgKiBAcGFyYW0gc291cmNlVVJMIC0gU3BlY2lmaWVzIHRoZSBVUkwgb2YgdGhlIGJsb2IuIFRoZSB2YWx1ZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF5IGJlIGEgVVJMIG9mIHVwIHRvIDIgS0IgaW4gbGVuZ3RoIHRoYXQgc3BlY2lmaWVzIGEgYmxvYi5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB2YWx1ZSBzaG91bGQgYmUgVVJMLWVuY29kZWQgYXMgaXQgd291bGQgYXBwZWFyXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBhIHJlcXVlc3QgVVJJLiBUaGUgc291cmNlIGJsb2IgbXVzdCBlaXRoZXIgYmUgcHVibGljXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBvciBtdXN0IGJlIGF1dGhlbnRpY2F0ZWQgdmlhIGEgc2hhcmVkIGFjY2VzcyBzaWduYXR1cmUuXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB0aGUgc291cmNlIGJsb2IgaXMgcHVibGljLCBubyBhdXRoZW50aWNhdGlvbiBpcyByZXF1aXJlZFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gcGVyZm9ybSB0aGUgb3BlcmF0aW9uLiBIZXJlIGFyZSBzb21lIGV4YW1wbGVzIG9mIHNvdXJjZSBvYmplY3QgVVJMczpcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gaHR0cHM6Ly9teWFjY291bnQuYmxvYi5jb3JlLndpbmRvd3MubmV0L215Y29udGFpbmVyL215YmxvYlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBodHRwczovL215YWNjb3VudC5ibG9iLmNvcmUud2luZG93cy5uZXQvbXljb250YWluZXIvbXlibG9iP3NuYXBzaG90PTxEYXRlVGltZT5cbiAgICAgKiBAcGFyYW0gb2Zmc2V0IC0gRnJvbSB3aGljaCBwb3NpdGlvbiBvZiB0aGUgYmxvYiB0byBkb3dubG9hZCwgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDBcbiAgICAgKiBAcGFyYW0gY291bnQgLSBIb3cgbXVjaCBkYXRhIHRvIGJlIGRvd25sb2FkZWQsIGdyZWF0ZXIgdGhhbiAwLiBXaWxsIGRvd25sb2FkIHRvIHRoZSBlbmQgd2hlbiB1bmRlZmluZWRcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gdGhlIEJsb2NrIEJsb2IgU3RhZ2UgQmxvY2sgRnJvbSBVUkwgb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIFJlc3BvbnNlIGRhdGEgZm9yIHRoZSBCbG9jayBCbG9iIFN0YWdlIEJsb2NrIEZyb20gVVJMIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBzdGFnZUJsb2NrRnJvbVVSTChibG9ja0lkLCBzb3VyY2VVUkwsIG9mZnNldCA9IDAsIGNvdW50LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgZW5zdXJlQ3BrSWZTcGVjaWZpZWQob3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LCB0aGlzLmlzSHR0cHMpO1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2NrQmxvYkNsaWVudC1zdGFnZUJsb2NrRnJvbVVSTFwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLmJsb2NrQmxvYkNvbnRleHQuc3RhZ2VCbG9ja0Zyb21VUkwoYmxvY2tJZCwgMCwgc291cmNlVVJMLCB7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgc291cmNlQ29udGVudE1ENTogb3B0aW9ucy5zb3VyY2VDb250ZW50TUQ1LFxuICAgICAgICAgICAgICAgIHNvdXJjZUNvbnRlbnRDcmM2NDogb3B0aW9ucy5zb3VyY2VDb250ZW50Q3JjNjQsXG4gICAgICAgICAgICAgICAgc291cmNlUmFuZ2U6IG9mZnNldCA9PT0gMCAmJiAhY291bnQgPyB1bmRlZmluZWQgOiByYW5nZVRvU3RyaW5nKHsgb2Zmc2V0LCBjb3VudCB9KSxcbiAgICAgICAgICAgICAgICBjcGtJbmZvOiBvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksXG4gICAgICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiBvcHRpb25zLmVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgICAgICAgICBjb3B5U291cmNlQXV0aG9yaXphdGlvbjogaHR0cEF1dGhvcml6YXRpb25Ub1N0cmluZyhvcHRpb25zLnNvdXJjZUF1dGhvcml6YXRpb24pLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyaXRlcyBhIGJsb2IgYnkgc3BlY2lmeWluZyB0aGUgbGlzdCBvZiBibG9jayBJRHMgdGhhdCBtYWtlIHVwIHRoZSBibG9iLlxuICAgICAqIEluIG9yZGVyIHRvIGJlIHdyaXR0ZW4gYXMgcGFydCBvZiBhIGJsb2IsIGEgYmxvY2sgbXVzdCBoYXZlIGJlZW4gc3VjY2Vzc2Z1bGx5IHdyaXR0ZW5cbiAgICAgKiB0byB0aGUgc2VydmVyIGluIGEgcHJpb3Ige0BsaW5rIHN0YWdlQmxvY2t9IG9wZXJhdGlvbi4gWW91IGNhbiBjYWxsIHtAbGluayBjb21taXRCbG9ja0xpc3R9IHRvXG4gICAgICogdXBkYXRlIGEgYmxvYiBieSB1cGxvYWRpbmcgb25seSB0aG9zZSBibG9ja3MgdGhhdCBoYXZlIGNoYW5nZWQsIHRoZW4gY29tbWl0dGluZyB0aGUgbmV3IGFuZCBleGlzdGluZ1xuICAgICAqIGJsb2NrcyB0b2dldGhlci4gQW55IGJsb2NrcyBub3Qgc3BlY2lmaWVkIGluIHRoZSBibG9jayBsaXN0IGFuZCBwZXJtYW5lbnRseSBkZWxldGVkLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL3B1dC1ibG9jay1saXN0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gYmxvY2tzIC0gIEFycmF5IG9mIDY0LWJ5dGUgdmFsdWUgdGhhdCBpcyBiYXNlNjQtZW5jb2RlZFxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB0aGUgQmxvY2sgQmxvYiBDb21taXQgQmxvY2sgTGlzdCBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgdGhlIEJsb2NrIEJsb2IgQ29tbWl0IEJsb2NrIExpc3Qgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGNvbW1pdEJsb2NrTGlzdChibG9ja3MsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIGVuc3VyZUNwa0lmU3BlY2lmaWVkKG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSwgdGhpcy5pc0h0dHBzKTtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9ja0Jsb2JDbGllbnQtY29tbWl0QmxvY2tMaXN0XCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5ibG9ja0Jsb2JDb250ZXh0LmNvbW1pdEJsb2NrTGlzdCh7IGxhdGVzdDogYmxvY2tzIH0sIHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBibG9iSHR0cEhlYWRlcnM6IG9wdGlvbnMuYmxvYkhUVFBIZWFkZXJzLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIG1ldGFkYXRhOiBvcHRpb25zLm1ldGFkYXRhLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICBjcGtJbmZvOiBvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksXG4gICAgICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiBvcHRpb25zLmVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgICAgICAgICBpbW11dGFiaWxpdHlQb2xpY3lFeHBpcnk6IChfYiA9IG9wdGlvbnMuaW1tdXRhYmlsaXR5UG9saWN5KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuZXhwaXJpZXNPbixcbiAgICAgICAgICAgICAgICBpbW11dGFiaWxpdHlQb2xpY3lNb2RlOiAoX2MgPSBvcHRpb25zLmltbXV0YWJpbGl0eVBvbGljeSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLnBvbGljeU1vZGUsXG4gICAgICAgICAgICAgICAgbGVnYWxIb2xkOiBvcHRpb25zLmxlZ2FsSG9sZCxcbiAgICAgICAgICAgICAgICB0aWVyOiB0b0FjY2Vzc1RpZXIob3B0aW9ucy50aWVyKSxcbiAgICAgICAgICAgICAgICBibG9iVGFnc1N0cmluZzogdG9CbG9iVGFnc1N0cmluZyhvcHRpb25zLnRhZ3MpLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGxpc3Qgb2YgYmxvY2tzIHRoYXQgaGF2ZSBiZWVuIHVwbG9hZGVkIGFzIHBhcnQgb2YgYSBibG9jayBibG9iXG4gICAgICogdXNpbmcgdGhlIHNwZWNpZmllZCBibG9jayBsaXN0IGZpbHRlci5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9nZXQtYmxvY2stbGlzdFxuICAgICAqXG4gICAgICogQHBhcmFtIGxpc3RUeXBlIC0gU3BlY2lmaWVzIHdoZXRoZXIgdG8gcmV0dXJuIHRoZSBsaXN0IG9mIGNvbW1pdHRlZCBibG9ja3MsXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGxpc3Qgb2YgdW5jb21taXR0ZWQgYmxvY2tzLCBvciBib3RoIGxpc3RzIHRvZ2V0aGVyLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB0aGUgQmxvY2sgQmxvYiBHZXQgQmxvY2sgTGlzdCBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgdGhlIEJsb2NrIEJsb2IgR2V0IEJsb2NrIExpc3Qgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGdldEJsb2NrTGlzdChsaXN0VHlwZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvY2tCbG9iQ2xpZW50LWdldEJsb2NrTGlzdFwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuYmxvY2tCbG9iQ29udGV4dC5nZXRCbG9ja0xpc3QobGlzdFR5cGUsIHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgaWYgKCFyZXMuY29tbWl0dGVkQmxvY2tzKSB7XG4gICAgICAgICAgICAgICAgcmVzLmNvbW1pdHRlZEJsb2NrcyA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFyZXMudW5jb21taXR0ZWRCbG9ja3MpIHtcbiAgICAgICAgICAgICAgICByZXMudW5jb21taXR0ZWRCbG9ja3MgPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBIaWdoIGxldmVsIGZ1bmN0aW9uc1xuICAgIC8qKlxuICAgICAqIFVwbG9hZHMgYSBCdWZmZXIoTm9kZS5qcykvQmxvYihicm93c2VycykvQXJyYXlCdWZmZXIvQXJyYXlCdWZmZXJWaWV3IG9iamVjdCB0byBhIEJsb2NrQmxvYi5cbiAgICAgKlxuICAgICAqIFdoZW4gZGF0YSBsZW5ndGggaXMgbm8gbW9yZSB0aGFuIHRoZSBzcGVjaWZpbGVkIHtAbGluayBCbG9ja0Jsb2JQYXJhbGxlbFVwbG9hZE9wdGlvbnMubWF4U2luZ2xlU2hvdFNpemV9IChkZWZhdWx0IGlzXG4gICAgICoge0BsaW5rIEJMT0NLX0JMT0JfTUFYX1VQTE9BRF9CTE9CX0JZVEVTfSksIHRoaXMgbWV0aG9kIHdpbGwgdXNlIDEge0BsaW5rIHVwbG9hZH0gY2FsbCB0byBmaW5pc2ggdGhlIHVwbG9hZC5cbiAgICAgKiBPdGhlcndpc2UsIHRoaXMgbWV0aG9kIHdpbGwgY2FsbCB7QGxpbmsgc3RhZ2VCbG9ja30gdG8gdXBsb2FkIGJsb2NrcywgYW5kIGZpbmFsbHkgY2FsbCB7QGxpbmsgY29tbWl0QmxvY2tMaXN0fVxuICAgICAqIHRvIGNvbW1pdCB0aGUgYmxvY2sgbGlzdC5cbiAgICAgKlxuICAgICAqIEEgY29tbW9uIHtAbGluayBCbG9ja0Jsb2JQYXJhbGxlbFVwbG9hZE9wdGlvbnMuYmxvYkhUVFBIZWFkZXJzfSBvcHRpb24gdG8gc2V0IGlzXG4gICAgICogYGJsb2JDb250ZW50VHlwZWAsIGVuYWJsaW5nIHRoZSBicm93c2VyIHRvIHByb3ZpZGVcbiAgICAgKiBmdW5jdGlvbmFsaXR5IGJhc2VkIG9uIGZpbGUgdHlwZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkYXRhIC0gQnVmZmVyKE5vZGUuanMpLCBCbG9iLCBBcnJheUJ1ZmZlciBvciBBcnJheUJ1ZmZlclZpZXdcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtXG4gICAgICovXG4gICAgYXN5bmMgdXBsb2FkRGF0YShkYXRhLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9ja0Jsb2JDbGllbnQtdXBsb2FkRGF0YVwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGlmIChjb3JlVXRpbC5pc05vZGUpIHtcbiAgICAgICAgICAgICAgICBsZXQgYnVmZmVyO1xuICAgICAgICAgICAgICAgIGlmIChkYXRhIGluc3RhbmNlb2YgQnVmZmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1ZmZlciA9IGRhdGE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgICAgICAgICAgICAgICAgICBidWZmZXIgPSBCdWZmZXIuZnJvbShkYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhO1xuICAgICAgICAgICAgICAgICAgICBidWZmZXIgPSBCdWZmZXIuZnJvbShkYXRhLmJ1ZmZlciwgZGF0YS5ieXRlT2Zmc2V0LCBkYXRhLmJ5dGVMZW5ndGgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy51cGxvYWRTZWVrYWJsZUludGVybmFsKChvZmZzZXQsIHNpemUpID0+IGJ1ZmZlci5zbGljZShvZmZzZXQsIG9mZnNldCArIHNpemUpLCBidWZmZXIuYnl0ZUxlbmd0aCwgdXBkYXRlZE9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYnJvd3NlckJsb2IgPSBuZXcgQmxvYihbZGF0YV0pO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnVwbG9hZFNlZWthYmxlSW50ZXJuYWwoKG9mZnNldCwgc2l6ZSkgPT4gYnJvd3NlckJsb2Iuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBzaXplKSwgYnJvd3NlckJsb2Iuc2l6ZSwgdXBkYXRlZE9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogT05MWSBBVkFJTEFCTEUgSU4gQlJPV1NFUlMuXG4gICAgICpcbiAgICAgKiBVcGxvYWRzIGEgYnJvd3NlciBCbG9iL0ZpbGUvQXJyYXlCdWZmZXIvQXJyYXlCdWZmZXJWaWV3IG9iamVjdCB0byBibG9jayBibG9iLlxuICAgICAqXG4gICAgICogV2hlbiBidWZmZXIgbGVuZ3RoIGxlc3NlciB0aGFuIG9yIGVxdWFsIHRvIDI1Nk1CLCB0aGlzIG1ldGhvZCB3aWxsIHVzZSAxIHVwbG9hZCBjYWxsIHRvIGZpbmlzaCB0aGUgdXBsb2FkLlxuICAgICAqIE90aGVyd2lzZSwgdGhpcyBtZXRob2Qgd2lsbCBjYWxsIHtAbGluayBzdGFnZUJsb2NrfSB0byB1cGxvYWQgYmxvY2tzLCBhbmQgZmluYWxseSBjYWxsXG4gICAgICoge0BsaW5rIGNvbW1pdEJsb2NrTGlzdH0gdG8gY29tbWl0IHRoZSBibG9jayBsaXN0LlxuICAgICAqXG4gICAgICogQSBjb21tb24ge0BsaW5rIEJsb2NrQmxvYlBhcmFsbGVsVXBsb2FkT3B0aW9ucy5ibG9iSFRUUEhlYWRlcnN9IG9wdGlvbiB0byBzZXQgaXNcbiAgICAgKiBgYmxvYkNvbnRlbnRUeXBlYCwgZW5hYmxpbmcgdGhlIGJyb3dzZXIgdG8gcHJvdmlkZVxuICAgICAqIGZ1bmN0aW9uYWxpdHkgYmFzZWQgb24gZmlsZSB0eXBlLlxuICAgICAqXG4gICAgICogQGRlcHJlY2F0ZWQgVXNlIHtAbGluayB1cGxvYWREYXRhfSBpbnN0ZWFkLlxuICAgICAqXG4gICAgICogQHBhcmFtIGJyb3dzZXJEYXRhIC0gQmxvYiwgRmlsZSwgQXJyYXlCdWZmZXIgb3IgQXJyYXlCdWZmZXJWaWV3XG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHVwbG9hZCBicm93c2VyIGRhdGEuXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgdGhlIEJsb2IgVXBsb2FkIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyB1cGxvYWRCcm93c2VyRGF0YShicm93c2VyRGF0YSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvY2tCbG9iQ2xpZW50LXVwbG9hZEJyb3dzZXJEYXRhXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgY29uc3QgYnJvd3NlckJsb2IgPSBuZXcgQmxvYihbYnJvd3NlckRhdGFdKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVwbG9hZFNlZWthYmxlSW50ZXJuYWwoKG9mZnNldCwgc2l6ZSkgPT4gYnJvd3NlckJsb2Iuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBzaXplKSwgYnJvd3NlckJsb2Iuc2l6ZSwgdXBkYXRlZE9wdGlvbnMpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBVcGxvYWRzIGRhdGEgdG8gYmxvY2sgYmxvYi4gUmVxdWlyZXMgYSBib2R5RmFjdG9yeSBhcyB0aGUgZGF0YSBzb3VyY2UsXG4gICAgICogd2hpY2ggbmVlZCB0byByZXR1cm4gYSB7QGxpbmsgSHR0cFJlcXVlc3RCb2R5fSBvYmplY3Qgd2l0aCB0aGUgb2Zmc2V0IGFuZCBzaXplIHByb3ZpZGVkLlxuICAgICAqXG4gICAgICogV2hlbiBkYXRhIGxlbmd0aCBpcyBubyBtb3JlIHRoYW4gdGhlIHNwZWNpZmllZCB7QGxpbmsgQmxvY2tCbG9iUGFyYWxsZWxVcGxvYWRPcHRpb25zLm1heFNpbmdsZVNob3RTaXplfSAoZGVmYXVsdCBpc1xuICAgICAqIHtAbGluayBCTE9DS19CTE9CX01BWF9VUExPQURfQkxPQl9CWVRFU30pLCB0aGlzIG1ldGhvZCB3aWxsIHVzZSAxIHtAbGluayB1cGxvYWR9IGNhbGwgdG8gZmluaXNoIHRoZSB1cGxvYWQuXG4gICAgICogT3RoZXJ3aXNlLCB0aGlzIG1ldGhvZCB3aWxsIGNhbGwge0BsaW5rIHN0YWdlQmxvY2t9IHRvIHVwbG9hZCBibG9ja3MsIGFuZCBmaW5hbGx5IGNhbGwge0BsaW5rIGNvbW1pdEJsb2NrTGlzdH1cbiAgICAgKiB0byBjb21taXQgdGhlIGJsb2NrIGxpc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYm9keUZhY3RvcnkgLVxuICAgICAqIEBwYXJhbSBzaXplIC0gc2l6ZSBvZiB0aGUgZGF0YSB0byB1cGxvYWQuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIFVwbG9hZCB0byBCbG9jayBCbG9iIG9wZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyBSZXNwb25zZSBkYXRhIGZvciB0aGUgQmxvYiBVcGxvYWQgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIHVwbG9hZFNlZWthYmxlSW50ZXJuYWwoYm9keUZhY3RvcnksIHNpemUsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBsZXQgYmxvY2tTaXplID0gKF9hID0gb3B0aW9ucy5ibG9ja1NpemUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IDA7XG4gICAgICAgIGlmIChibG9ja1NpemUgPCAwIHx8IGJsb2NrU2l6ZSA+IEJMT0NLX0JMT0JfTUFYX1NUQUdFX0JMT0NLX0JZVEVTKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgYmxvY2tTaXplIG9wdGlvbiBtdXN0IGJlID49IDAgYW5kIDw9ICR7QkxPQ0tfQkxPQl9NQVhfU1RBR0VfQkxPQ0tfQllURVN9YCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWF4U2luZ2xlU2hvdFNpemUgPSAoX2IgPSBvcHRpb25zLm1heFNpbmdsZVNob3RTaXplKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBCTE9DS19CTE9CX01BWF9VUExPQURfQkxPQl9CWVRFUztcbiAgICAgICAgaWYgKG1heFNpbmdsZVNob3RTaXplIDwgMCB8fCBtYXhTaW5nbGVTaG90U2l6ZSA+IEJMT0NLX0JMT0JfTUFYX1VQTE9BRF9CTE9CX0JZVEVTKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgbWF4U2luZ2xlU2hvdFNpemUgb3B0aW9uIG11c3QgYmUgPj0gMCBhbmQgPD0gJHtCTE9DS19CTE9CX01BWF9VUExPQURfQkxPQl9CWVRFU31gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYmxvY2tTaXplID09PSAwKSB7XG4gICAgICAgICAgICBpZiAoc2l6ZSA+IEJMT0NLX0JMT0JfTUFYX1NUQUdFX0JMT0NLX0JZVEVTICogQkxPQ0tfQkxPQl9NQVhfQkxPQ0tTKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYCR7c2l6ZX0gaXMgdG9vIGxhcmdlciB0byB1cGxvYWQgdG8gYSBibG9jayBibG9iLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNpemUgPiBtYXhTaW5nbGVTaG90U2l6ZSkge1xuICAgICAgICAgICAgICAgIGJsb2NrU2l6ZSA9IE1hdGguY2VpbChzaXplIC8gQkxPQ0tfQkxPQl9NQVhfQkxPQ0tTKTtcbiAgICAgICAgICAgICAgICBpZiAoYmxvY2tTaXplIDwgREVGQVVMVF9CTE9CX0RPV05MT0FEX0JMT0NLX0JZVEVTKSB7XG4gICAgICAgICAgICAgICAgICAgIGJsb2NrU2l6ZSA9IERFRkFVTFRfQkxPQl9ET1dOTE9BRF9CTE9DS19CWVRFUztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFvcHRpb25zLmJsb2JIVFRQSGVhZGVycykge1xuICAgICAgICAgICAgb3B0aW9ucy5ibG9iSFRUUEhlYWRlcnMgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW9wdGlvbnMuY29uZGl0aW9ucykge1xuICAgICAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0ge307XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9ja0Jsb2JDbGllbnQtdXBsb2FkU2Vla2FibGVJbnRlcm5hbFwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGlmIChzaXplIDw9IG1heFNpbmdsZVNob3RTaXplKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMudXBsb2FkKGJvZHlGYWN0b3J5KDAsIHNpemUpLCBzaXplLCB1cGRhdGVkT3B0aW9ucykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbnVtQmxvY2tzID0gTWF0aC5mbG9vcigoc2l6ZSAtIDEpIC8gYmxvY2tTaXplKSArIDE7XG4gICAgICAgICAgICBpZiAobnVtQmxvY2tzID4gQkxPQ0tfQkxPQl9NQVhfQkxPQ0tTKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYFRoZSBidWZmZXIncyBzaXplIGlzIHRvbyBiaWcgb3IgdGhlIEJsb2NrU2l6ZSBpcyB0b28gc21hbGw7YCArXG4gICAgICAgICAgICAgICAgICAgIGB0aGUgbnVtYmVyIG9mIGJsb2NrcyBtdXN0IGJlIDw9ICR7QkxPQ0tfQkxPQl9NQVhfQkxPQ0tTfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYmxvY2tMaXN0ID0gW107XG4gICAgICAgICAgICBjb25zdCBibG9ja0lEUHJlZml4ID0gY29yZVV0aWwucmFuZG9tVVVJRCgpO1xuICAgICAgICAgICAgbGV0IHRyYW5zZmVyUHJvZ3Jlc3MgPSAwO1xuICAgICAgICAgICAgY29uc3QgYmF0Y2ggPSBuZXcgQmF0Y2gob3B0aW9ucy5jb25jdXJyZW5jeSk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bUJsb2NrczsgaSsrKSB7XG4gICAgICAgICAgICAgICAgYmF0Y2guYWRkT3BlcmF0aW9uKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2tJRCA9IGdlbmVyYXRlQmxvY2tJRChibG9ja0lEUHJlZml4LCBpKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSBibG9ja1NpemUgKiBpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSBpID09PSBudW1CbG9ja3MgLSAxID8gc2l6ZSA6IHN0YXJ0ICsgYmxvY2tTaXplO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50TGVuZ3RoID0gZW5kIC0gc3RhcnQ7XG4gICAgICAgICAgICAgICAgICAgIGJsb2NrTGlzdC5wdXNoKGJsb2NrSUQpO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnN0YWdlQmxvY2soYmxvY2tJRCwgYm9keUZhY3Rvcnkoc3RhcnQsIGNvbnRlbnRMZW5ndGgpLCBjb250ZW50TGVuZ3RoLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuY3J5cHRpb25TY29wZTogb3B0aW9ucy5lbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgcHJvZ3Jlc3MgYWZ0ZXIgYmxvY2sgaXMgc3VjY2Vzc2Z1bGx5IHVwbG9hZGVkIHRvIHNlcnZlciwgaW4gY2FzZSBvZiBibG9jayB0cnlpbmdcbiAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogSG9vayB3aXRoIGNvbnZlbmllbmNlIGxheWVyIHByb2dyZXNzIGV2ZW50IGluIGZpbmVyIGxldmVsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZmVyUHJvZ3Jlc3MgKz0gY29udGVudExlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMub25Qcm9ncmVzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5vblByb2dyZXNzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZWRCeXRlczogdHJhbnNmZXJQcm9ncmVzcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhd2FpdCBiYXRjaC5kbygpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29tbWl0QmxvY2tMaXN0KGJsb2NrTGlzdCwgdXBkYXRlZE9wdGlvbnMpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogT05MWSBBVkFJTEFCTEUgSU4gTk9ERS5KUyBSVU5USU1FLlxuICAgICAqXG4gICAgICogVXBsb2FkcyBhIGxvY2FsIGZpbGUgaW4gYmxvY2tzIHRvIGEgYmxvY2sgYmxvYi5cbiAgICAgKlxuICAgICAqIFdoZW4gZmlsZSBzaXplIGxlc3NlciB0aGFuIG9yIGVxdWFsIHRvIDI1Nk1CLCB0aGlzIG1ldGhvZCB3aWxsIHVzZSAxIHVwbG9hZCBjYWxsIHRvIGZpbmlzaCB0aGUgdXBsb2FkLlxuICAgICAqIE90aGVyd2lzZSwgdGhpcyBtZXRob2Qgd2lsbCBjYWxsIHN0YWdlQmxvY2sgdG8gdXBsb2FkIGJsb2NrcywgYW5kIGZpbmFsbHkgY2FsbCBjb21taXRCbG9ja0xpc3RcbiAgICAgKiB0byBjb21taXQgdGhlIGJsb2NrIGxpc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZmlsZVBhdGggLSBGdWxsIHBhdGggb2YgbG9jYWwgZmlsZVxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBVcGxvYWQgdG8gQmxvY2sgQmxvYiBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgdGhlIEJsb2IgVXBsb2FkIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyB1cGxvYWRGaWxlKGZpbGVQYXRoLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9ja0Jsb2JDbGllbnQtdXBsb2FkRmlsZVwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNpemUgPSAoYXdhaXQgZnNTdGF0KGZpbGVQYXRoKSkuc2l6ZTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVwbG9hZFNlZWthYmxlSW50ZXJuYWwoKG9mZnNldCwgY291bnQpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKCkgPT4gZnNDcmVhdGVSZWFkU3RyZWFtKGZpbGVQYXRoLCB7XG4gICAgICAgICAgICAgICAgICAgIGF1dG9DbG9zZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgZW5kOiBjb3VudCA/IG9mZnNldCArIGNvdW50IC0gMSA6IEluZmluaXR5LFxuICAgICAgICAgICAgICAgICAgICBzdGFydDogb2Zmc2V0LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgc2l6ZSwgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKSwgeyB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogT05MWSBBVkFJTEFCTEUgSU4gTk9ERS5KUyBSVU5USU1FLlxuICAgICAqXG4gICAgICogVXBsb2FkcyBhIE5vZGUuanMgUmVhZGFibGUgc3RyZWFtIGludG8gYmxvY2sgYmxvYi5cbiAgICAgKlxuICAgICAqIFBFUkZPUk1BTkNFIElNUFJPVkVNRU5UIFRJUFM6XG4gICAgICogKiBJbnB1dCBzdHJlYW0gaGlnaFdhdGVyTWFyayBpcyBiZXR0ZXIgdG8gc2V0IGEgc2FtZSB2YWx1ZSB3aXRoIGJ1ZmZlclNpemVcbiAgICAgKiAgICBwYXJhbWV0ZXIsIHdoaWNoIHdpbGwgYXZvaWQgQnVmZmVyLmNvbmNhdCgpIG9wZXJhdGlvbnMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc3RyZWFtIC0gTm9kZS5qcyBSZWFkYWJsZSBzdHJlYW1cbiAgICAgKiBAcGFyYW0gYnVmZmVyU2l6ZSAtIFNpemUgb2YgZXZlcnkgYnVmZmVyIGFsbG9jYXRlZCwgYWxzbyB0aGUgYmxvY2sgc2l6ZSBpbiB0aGUgdXBsb2FkZWQgYmxvY2sgYmxvYi4gRGVmYXVsdCB2YWx1ZSBpcyA4TUJcbiAgICAgKiBAcGFyYW0gbWF4Q29uY3VycmVuY3kgLSAgTWF4IGNvbmN1cnJlbmN5IGluZGljYXRlcyB0aGUgbWF4IG51bWJlciBvZiBidWZmZXJzIHRoYXQgY2FuIGJlIGFsbG9jYXRlZCxcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aXZlIGNvcnJlbGF0aW9uIHdpdGggbWF4IHVwbG9hZGluZyBjb25jdXJyZW5jeS4gRGVmYXVsdCB2YWx1ZSBpcyA1XG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIFVwbG9hZCBTdHJlYW0gdG8gQmxvY2sgQmxvYiBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgdGhlIEJsb2IgVXBsb2FkIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyB1cGxvYWRTdHJlYW0oc3RyZWFtLCBidWZmZXJTaXplID0gREVGQVVMVF9CTE9DS19CVUZGRVJfU0laRV9CWVRFUywgbWF4Q29uY3VycmVuY3kgPSA1LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgaWYgKCFvcHRpb25zLmJsb2JIVFRQSGVhZGVycykge1xuICAgICAgICAgICAgb3B0aW9ucy5ibG9iSFRUUEhlYWRlcnMgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW9wdGlvbnMuY29uZGl0aW9ucykge1xuICAgICAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0ge307XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9ja0Jsb2JDbGllbnQtdXBsb2FkU3RyZWFtXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgbGV0IGJsb2NrTnVtID0gMDtcbiAgICAgICAgICAgIGNvbnN0IGJsb2NrSURQcmVmaXggPSBjb3JlVXRpbC5yYW5kb21VVUlEKCk7XG4gICAgICAgICAgICBsZXQgdHJhbnNmZXJQcm9ncmVzcyA9IDA7XG4gICAgICAgICAgICBjb25zdCBibG9ja0xpc3QgPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IHNjaGVkdWxlciA9IG5ldyBCdWZmZXJTY2hlZHVsZXIoc3RyZWFtLCBidWZmZXJTaXplLCBtYXhDb25jdXJyZW5jeSwgYXN5bmMgKGJvZHksIGxlbmd0aCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrSUQgPSBnZW5lcmF0ZUJsb2NrSUQoYmxvY2tJRFByZWZpeCwgYmxvY2tOdW0pO1xuICAgICAgICAgICAgICAgIGJsb2NrTGlzdC5wdXNoKGJsb2NrSUQpO1xuICAgICAgICAgICAgICAgIGJsb2NrTnVtKys7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zdGFnZUJsb2NrKGJsb2NrSUQsIGJvZHksIGxlbmd0aCwge1xuICAgICAgICAgICAgICAgICAgICBjdXN0b21lclByb3ZpZGVkS2V5OiBvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksXG4gICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiBvcHRpb25zLmVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBwcm9ncmVzcyBhZnRlciBibG9jayBpcyBzdWNjZXNzZnVsbHkgdXBsb2FkZWQgdG8gc2VydmVyLCBpbiBjYXNlIG9mIGJsb2NrIHRyeWluZ1xuICAgICAgICAgICAgICAgIHRyYW5zZmVyUHJvZ3Jlc3MgKz0gbGVuZ3RoO1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLm9uUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5vblByb2dyZXNzKHsgbG9hZGVkQnl0ZXM6IHRyYW5zZmVyUHJvZ3Jlc3MgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgXG4gICAgICAgICAgICAvLyBjb25jdXJyZW5jeSBzaG91bGQgc2V0IGEgc21hbGxlciB2YWx1ZSB0aGFuIG1heENvbmN1cnJlbmN5LCB3aGljaCBpcyBoZWxwZnVsIHRvXG4gICAgICAgICAgICAvLyByZWR1Y2UgdGhlIHBvc3NpYmlsaXR5IHdoZW4gYSBvdXRnb2luZyBoYW5kbGVyIHdhaXRzIGZvciBzdHJlYW0gZGF0YSwgaW5cbiAgICAgICAgICAgIC8vIHRoaXMgc2l0dWF0aW9uLCBvdXRnb2luZyBoYW5kbGVycyBhcmUgYmxvY2tlZC5cbiAgICAgICAgICAgIC8vIE91dGdvaW5nIHF1ZXVlIHNob3VsZG4ndCBiZSBlbXB0eS5cbiAgICAgICAgICAgIE1hdGguY2VpbCgobWF4Q29uY3VycmVuY3kgLyA0KSAqIDMpKTtcbiAgICAgICAgICAgIGF3YWl0IHNjaGVkdWxlci5kbygpO1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuY29tbWl0QmxvY2tMaXN0KGJsb2NrTGlzdCwgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKSwgeyB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMgfSkpKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuLyoqXG4gKiBQYWdlQmxvYkNsaWVudCBkZWZpbmVzIGEgc2V0IG9mIG9wZXJhdGlvbnMgYXBwbGljYWJsZSB0byBwYWdlIGJsb2JzLlxuICovXG5jbGFzcyBQYWdlQmxvYkNsaWVudCBleHRlbmRzIEJsb2JDbGllbnQge1xuICAgIGNvbnN0cnVjdG9yKHVybE9yQ29ubmVjdGlvblN0cmluZywgY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUsIGJsb2JOYW1lT3JPcHRpb25zLCBcbiAgICAvLyBMZWdhY3ksIG5vIGZpeCBmb3IgZXNsaW50IGVycm9yIHdpdGhvdXQgYnJlYWtpbmcuIERpc2FibGUgaXQgZm9yIHRoaXMgaW50ZXJmYWNlLlxuICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYXp1cmUvYXp1cmUtc2RrL3RzLW5hbWluZy1vcHRpb25zKi9cbiAgICBvcHRpb25zKSB7XG4gICAgICAgIC8vIEluIFR5cGVTY3JpcHQgd2UgY2Fubm90IHNpbXBseSBwYXNzIGFsbCBwYXJhbWV0ZXJzIHRvIHN1cGVyKCkgbGlrZSBiZWxvdyBzbyBoYXZlIHRvIGR1cGxpY2F0ZSB0aGUgY29kZSBpbnN0ZWFkLlxuICAgICAgICAvLyAgIHN1cGVyKHMsIGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lT3JPcHRpb25zLCBibG9iTmFtZU9yT3B0aW9ucywgb3B0aW9ucyk7XG4gICAgICAgIGxldCBwaXBlbGluZTtcbiAgICAgICAgbGV0IHVybDtcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgICAgIGlmIChpc1BpcGVsaW5lTGlrZShjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSkpIHtcbiAgICAgICAgICAgIC8vICh1cmw6IHN0cmluZywgcGlwZWxpbmU6IFBpcGVsaW5lKVxuICAgICAgICAgICAgdXJsID0gdXJsT3JDb25uZWN0aW9uU3RyaW5nO1xuICAgICAgICAgICAgcGlwZWxpbmUgPSBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICgoY29yZVV0aWwuaXNOb2RlICYmIGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lIGluc3RhbmNlb2YgU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwpIHx8XG4gICAgICAgICAgICBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSBpbnN0YW5jZW9mIEFub255bW91c0NyZWRlbnRpYWwgfHxcbiAgICAgICAgICAgIGNvcmVBdXRoLmlzVG9rZW5DcmVkZW50aWFsKGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lKSkge1xuICAgICAgICAgICAgLy8gKHVybDogc3RyaW5nLCBjcmVkZW50aWFsPzogU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwgfCBBbm9ueW1vdXNDcmVkZW50aWFsIHwgVG9rZW5DcmVkZW50aWFsLCBvcHRpb25zPzogU3RvcmFnZVBpcGVsaW5lT3B0aW9ucylcbiAgICAgICAgICAgIHVybCA9IHVybE9yQ29ubmVjdGlvblN0cmluZztcbiAgICAgICAgICAgIG9wdGlvbnMgPSBibG9iTmFtZU9yT3B0aW9ucztcbiAgICAgICAgICAgIHBpcGVsaW5lID0gbmV3UGlwZWxpbmUoY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSAmJlxuICAgICAgICAgICAgdHlwZW9mIGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAvLyAodXJsOiBzdHJpbmcsIGNyZWRlbnRpYWw/OiBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbCB8IEFub255bW91c0NyZWRlbnRpYWwgfCBUb2tlbkNyZWRlbnRpYWwsIG9wdGlvbnM/OiBTdG9yYWdlUGlwZWxpbmVPcHRpb25zKVxuICAgICAgICAgICAgLy8gVGhlIHNlY29uZCBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkLiBVc2UgYW5vbnltb3VzIGNyZWRlbnRpYWwuXG4gICAgICAgICAgICB1cmwgPSB1cmxPckNvbm5lY3Rpb25TdHJpbmc7XG4gICAgICAgICAgICBwaXBlbGluZSA9IG5ld1BpcGVsaW5lKG5ldyBBbm9ueW1vdXNDcmVkZW50aWFsKCksIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lICYmXG4gICAgICAgICAgICB0eXBlb2YgY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICAgIGJsb2JOYW1lT3JPcHRpb25zICYmXG4gICAgICAgICAgICB0eXBlb2YgYmxvYk5hbWVPck9wdGlvbnMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIC8vIChjb25uZWN0aW9uU3RyaW5nOiBzdHJpbmcsIGNvbnRhaW5lck5hbWU6IHN0cmluZywgYmxvYk5hbWU6IHN0cmluZywgb3B0aW9ucz86IFN0b3JhZ2VQaXBlbGluZU9wdGlvbnMpXG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJOYW1lID0gY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWU7XG4gICAgICAgICAgICBjb25zdCBibG9iTmFtZSA9IGJsb2JOYW1lT3JPcHRpb25zO1xuICAgICAgICAgICAgY29uc3QgZXh0cmFjdGVkQ3JlZHMgPSBleHRyYWN0Q29ubmVjdGlvblN0cmluZ1BhcnRzKHVybE9yQ29ubmVjdGlvblN0cmluZyk7XG4gICAgICAgICAgICBpZiAoZXh0cmFjdGVkQ3JlZHMua2luZCA9PT0gXCJBY2NvdW50Q29ublN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvcmVVdGlsLmlzTm9kZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaGFyZWRLZXlDcmVkZW50aWFsID0gbmV3IFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsKGV4dHJhY3RlZENyZWRzLmFjY291bnROYW1lLCBleHRyYWN0ZWRDcmVkcy5hY2NvdW50S2V5KTtcbiAgICAgICAgICAgICAgICAgICAgdXJsID0gYXBwZW5kVG9VUkxQYXRoKGFwcGVuZFRvVVJMUGF0aChleHRyYWN0ZWRDcmVkcy51cmwsIGVuY29kZVVSSUNvbXBvbmVudChjb250YWluZXJOYW1lKSksIGVuY29kZVVSSUNvbXBvbmVudChibG9iTmFtZSkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMucHJveHlPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnByb3h5T3B0aW9ucyA9IGNvcmVSZXN0UGlwZWxpbmUuZ2V0RGVmYXVsdFByb3h5U2V0dGluZ3MoZXh0cmFjdGVkQ3JlZHMucHJveHlVcmkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHBpcGVsaW5lID0gbmV3UGlwZWxpbmUoc2hhcmVkS2V5Q3JlZGVudGlhbCwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBY2NvdW50IGNvbm5lY3Rpb24gc3RyaW5nIGlzIG9ubHkgc3VwcG9ydGVkIGluIE5vZGUuanMgZW52aXJvbm1lbnRcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZXh0cmFjdGVkQ3JlZHMua2luZCA9PT0gXCJTQVNDb25uU3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICB1cmwgPVxuICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb1VSTFBhdGgoYXBwZW5kVG9VUkxQYXRoKGV4dHJhY3RlZENyZWRzLnVybCwgZW5jb2RlVVJJQ29tcG9uZW50KGNvbnRhaW5lck5hbWUpKSwgZW5jb2RlVVJJQ29tcG9uZW50KGJsb2JOYW1lKSkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCI/XCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFjdGVkQ3JlZHMuYWNjb3VudFNhcztcbiAgICAgICAgICAgICAgICBwaXBlbGluZSA9IG5ld1BpcGVsaW5lKG5ldyBBbm9ueW1vdXNDcmVkZW50aWFsKCksIG9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29ubmVjdGlvbiBzdHJpbmcgbXVzdCBiZSBlaXRoZXIgYW4gQWNjb3VudCBjb25uZWN0aW9uIHN0cmluZyBvciBhIFNBUyBjb25uZWN0aW9uIHN0cmluZ1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGluZyBub24tZW1wdHkgc3RyaW5ncyBmb3IgY29udGFpbmVyTmFtZSBhbmQgYmxvYk5hbWUgcGFyYW1ldGVyc1wiKTtcbiAgICAgICAgfVxuICAgICAgICBzdXBlcih1cmwsIHBpcGVsaW5lKTtcbiAgICAgICAgdGhpcy5wYWdlQmxvYkNvbnRleHQgPSB0aGlzLnN0b3JhZ2VDbGllbnRDb250ZXh0LnBhZ2VCbG9iO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IFBhZ2VCbG9iQ2xpZW50IG9iamVjdCBpZGVudGljYWwgdG8gdGhlIHNvdXJjZSBidXQgd2l0aCB0aGVcbiAgICAgKiBzcGVjaWZpZWQgc25hcHNob3QgdGltZXN0YW1wLlxuICAgICAqIFByb3ZpZGUgXCJcIiB3aWxsIHJlbW92ZSB0aGUgc25hcHNob3QgYW5kIHJldHVybiBhIENsaWVudCB0byB0aGUgYmFzZSBibG9iLlxuICAgICAqXG4gICAgICogQHBhcmFtIHNuYXBzaG90IC0gVGhlIHNuYXBzaG90IHRpbWVzdGFtcC5cbiAgICAgKiBAcmV0dXJucyBBIG5ldyBQYWdlQmxvYkNsaWVudCBvYmplY3QgaWRlbnRpY2FsIHRvIHRoZSBzb3VyY2UgYnV0IHdpdGggdGhlIHNwZWNpZmllZCBzbmFwc2hvdCB0aW1lc3RhbXAuXG4gICAgICovXG4gICAgd2l0aFNuYXBzaG90KHNuYXBzaG90KSB7XG4gICAgICAgIHJldHVybiBuZXcgUGFnZUJsb2JDbGllbnQoc2V0VVJMUGFyYW1ldGVyKHRoaXMudXJsLCBVUkxDb25zdGFudHMuUGFyYW1ldGVycy5TTkFQU0hPVCwgc25hcHNob3QubGVuZ3RoID09PSAwID8gdW5kZWZpbmVkIDogc25hcHNob3QpLCB0aGlzLnBpcGVsaW5lKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHBhZ2UgYmxvYiBvZiB0aGUgc3BlY2lmaWVkIGxlbmd0aC4gQ2FsbCB1cGxvYWRQYWdlcyB0byB1cGxvYWQgZGF0YVxuICAgICAqIGRhdGEgdG8gYSBwYWdlIGJsb2IuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvcHV0LWJsb2JcbiAgICAgKlxuICAgICAqIEBwYXJhbSBzaXplIC0gc2l6ZSBvZiB0aGUgcGFnZSBibG9iLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB0aGUgUGFnZSBCbG9iIENyZWF0ZSBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgdGhlIFBhZ2UgQmxvYiBDcmVhdGUgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGNyZWF0ZShzaXplLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0gb3B0aW9ucy5jb25kaXRpb25zIHx8IHt9O1xuICAgICAgICBlbnN1cmVDcGtJZlNwZWNpZmllZChvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksIHRoaXMuaXNIdHRwcyk7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiUGFnZUJsb2JDbGllbnQtY3JlYXRlXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5wYWdlQmxvYkNvbnRleHQuY3JlYXRlKDAsIHNpemUsIHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBibG9iSHR0cEhlYWRlcnM6IG9wdGlvbnMuYmxvYkhUVFBIZWFkZXJzLFxuICAgICAgICAgICAgICAgIGJsb2JTZXF1ZW5jZU51bWJlcjogb3B0aW9ucy5ibG9iU2VxdWVuY2VOdW1iZXIsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbWV0YWRhdGE6IG9wdGlvbnMubWV0YWRhdGEsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIGNwa0luZm86IG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSxcbiAgICAgICAgICAgICAgICBlbmNyeXB0aW9uU2NvcGU6IG9wdGlvbnMuZW5jcnlwdGlvblNjb3BlLFxuICAgICAgICAgICAgICAgIGltbXV0YWJpbGl0eVBvbGljeUV4cGlyeTogKF9iID0gb3B0aW9ucy5pbW11dGFiaWxpdHlQb2xpY3kpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5leHBpcmllc09uLFxuICAgICAgICAgICAgICAgIGltbXV0YWJpbGl0eVBvbGljeU1vZGU6IChfYyA9IG9wdGlvbnMuaW1tdXRhYmlsaXR5UG9saWN5KSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MucG9saWN5TW9kZSxcbiAgICAgICAgICAgICAgICBsZWdhbEhvbGQ6IG9wdGlvbnMubGVnYWxIb2xkLFxuICAgICAgICAgICAgICAgIHRpZXI6IHRvQWNjZXNzVGllcihvcHRpb25zLnRpZXIpLFxuICAgICAgICAgICAgICAgIGJsb2JUYWdzU3RyaW5nOiB0b0Jsb2JUYWdzU3RyaW5nKG9wdGlvbnMudGFncyksXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHBhZ2UgYmxvYiBvZiB0aGUgc3BlY2lmaWVkIGxlbmd0aC4gQ2FsbCB1cGxvYWRQYWdlcyB0byB1cGxvYWQgZGF0YVxuICAgICAqIGRhdGEgdG8gYSBwYWdlIGJsb2IuIElmIHRoZSBibG9iIHdpdGggdGhlIHNhbWUgbmFtZSBhbHJlYWR5IGV4aXN0cywgdGhlIGNvbnRlbnRcbiAgICAgKiBvZiB0aGUgZXhpc3RpbmcgYmxvYiB3aWxsIHJlbWFpbiB1bmNoYW5nZWQuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvcHV0LWJsb2JcbiAgICAgKlxuICAgICAqIEBwYXJhbSBzaXplIC0gc2l6ZSBvZiB0aGUgcGFnZSBibG9iLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC1cbiAgICAgKi9cbiAgICBhc3luYyBjcmVhdGVJZk5vdEV4aXN0cyhzaXplLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJQYWdlQmxvYkNsaWVudC1jcmVhdGVJZk5vdEV4aXN0c1wiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbmRpdGlvbnMgPSB7IGlmTm9uZU1hdGNoOiBFVGFnQW55IH07XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzID0gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5jcmVhdGUoc2l6ZSwgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKSwgeyBjb25kaXRpb25zLCB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMgfSkpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHsgc3VjY2VlZGVkOiB0cnVlIH0sIHJlcyksIHsgX3Jlc3BvbnNlOiByZXMuX3Jlc3BvbnNlIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoKChfYSA9IGUuZGV0YWlscykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmVycm9yQ29kZSkgPT09IFwiQmxvYkFscmVhZHlFeGlzdHNcIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHsgc3VjY2VlZGVkOiBmYWxzZSB9LCAoX2IgPSBlLnJlc3BvbnNlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IucGFyc2VkSGVhZGVycyksIHsgX3Jlc3BvbnNlOiBlLnJlc3BvbnNlIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGVzIDEgb3IgbW9yZSBwYWdlcyB0byB0aGUgcGFnZSBibG9iLiBUaGUgc3RhcnQgYW5kIGVuZCBvZmZzZXRzIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA1MTIuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvcHV0LXBhZ2VcbiAgICAgKlxuICAgICAqIEBwYXJhbSBib2R5IC0gRGF0YSB0byB1cGxvYWRcbiAgICAgKiBAcGFyYW0gb2Zmc2V0IC0gT2Zmc2V0IG9mIGRlc3RpbmF0aW9uIHBhZ2UgYmxvYlxuICAgICAqIEBwYXJhbSBjb3VudCAtIENvbnRlbnQgbGVuZ3RoIG9mIHRoZSBib2R5LCBhbHNvIG51bWJlciBvZiBieXRlcyB0byBiZSB1cGxvYWRlZFxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB0aGUgUGFnZSBCbG9iIFVwbG9hZCBQYWdlcyBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgdGhlIFBhZ2UgQmxvYiBVcGxvYWQgUGFnZXMgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIHVwbG9hZFBhZ2VzKGJvZHksIG9mZnNldCwgY291bnQsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIGVuc3VyZUNwa0lmU3BlY2lmaWVkKG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSwgdGhpcy5pc0h0dHBzKTtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJQYWdlQmxvYkNsaWVudC11cGxvYWRQYWdlc1wiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLnBhZ2VCbG9iQ29udGV4dC51cGxvYWRQYWdlcyhjb3VudCwgYm9keSwge1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICByZXF1ZXN0T3B0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICBvblVwbG9hZFByb2dyZXNzOiBvcHRpb25zLm9uUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICByYW5nZTogcmFuZ2VUb1N0cmluZyh7IG9mZnNldCwgY291bnQgfSksXG4gICAgICAgICAgICAgICAgc2VxdWVuY2VOdW1iZXJBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgdHJhbnNhY3Rpb25hbENvbnRlbnRNRDU6IG9wdGlvbnMudHJhbnNhY3Rpb25hbENvbnRlbnRNRDUsXG4gICAgICAgICAgICAgICAgdHJhbnNhY3Rpb25hbENvbnRlbnRDcmM2NDogb3B0aW9ucy50cmFuc2FjdGlvbmFsQ29udGVudENyYzY0LFxuICAgICAgICAgICAgICAgIGNwa0luZm86IG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSxcbiAgICAgICAgICAgICAgICBlbmNyeXB0aW9uU2NvcGU6IG9wdGlvbnMuZW5jcnlwdGlvblNjb3BlLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBVcGxvYWQgUGFnZXMgb3BlcmF0aW9uIHdyaXRlcyBhIHJhbmdlIG9mIHBhZ2VzIHRvIGEgcGFnZSBibG9iIHdoZXJlIHRoZVxuICAgICAqIGNvbnRlbnRzIGFyZSByZWFkIGZyb20gYSBVUkwuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvcHV0LXBhZ2UtZnJvbS11cmxcbiAgICAgKlxuICAgICAqIEBwYXJhbSBzb3VyY2VVUkwgLSBTcGVjaWZ5IGEgVVJMIHRvIHRoZSBjb3B5IHNvdXJjZSwgU2hhcmVkIEFjY2VzcyBTaWduYXR1cmUoU0FTKSBtYXliZSBuZWVkZWQgZm9yIGF1dGhlbnRpY2F0aW9uXG4gICAgICogQHBhcmFtIHNvdXJjZU9mZnNldCAtIFRoZSBzb3VyY2Ugb2Zmc2V0IHRvIGNvcHkgZnJvbS4gUGFzcyAwIHRvIGNvcHkgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHNvdXJjZSBwYWdlIGJsb2JcbiAgICAgKiBAcGFyYW0gZGVzdE9mZnNldCAtIE9mZnNldCBvZiBkZXN0aW5hdGlvbiBwYWdlIGJsb2JcbiAgICAgKiBAcGFyYW0gY291bnQgLSBOdW1iZXIgb2YgYnl0ZXMgdG8gYmUgdXBsb2FkZWQgZnJvbSBzb3VyY2UgcGFnZSBibG9iXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLVxuICAgICAqL1xuICAgIGFzeW5jIHVwbG9hZFBhZ2VzRnJvbVVSTChzb3VyY2VVUkwsIHNvdXJjZU9mZnNldCwgZGVzdE9mZnNldCwgY291bnQsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucyA9IG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucyB8fCB7fTtcbiAgICAgICAgZW5zdXJlQ3BrSWZTcGVjaWZpZWQob3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LCB0aGlzLmlzSHR0cHMpO1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIlBhZ2VCbG9iQ2xpZW50LXVwbG9hZFBhZ2VzRnJvbVVSTFwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2U7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5wYWdlQmxvYkNvbnRleHQudXBsb2FkUGFnZXNGcm9tVVJMKHNvdXJjZVVSTCwgcmFuZ2VUb1N0cmluZyh7IG9mZnNldDogc291cmNlT2Zmc2V0LCBjb3VudCB9KSwgMCwgcmFuZ2VUb1N0cmluZyh7IG9mZnNldDogZGVzdE9mZnNldCwgY291bnQgfSksIHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBzb3VyY2VDb250ZW50TUQ1OiBvcHRpb25zLnNvdXJjZUNvbnRlbnRNRDUsXG4gICAgICAgICAgICAgICAgc291cmNlQ29udGVudENyYzY0OiBvcHRpb25zLnNvdXJjZUNvbnRlbnRDcmM2NCxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBzZXF1ZW5jZU51bWJlckFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgc291cmNlTW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUlmTWF0Y2g6IChfYiA9IG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmlmTWF0Y2gsXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUlmTW9kaWZpZWRTaW5jZTogKF9jID0gb3B0aW9ucy5zb3VyY2VDb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VJZk5vbmVNYXRjaDogKF9kID0gb3B0aW9ucy5zb3VyY2VDb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuaWZOb25lTWF0Y2gsXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUlmVW5tb2RpZmllZFNpbmNlOiAoX2UgPSBvcHRpb25zLnNvdXJjZUNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZS5pZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNwa0luZm86IG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSxcbiAgICAgICAgICAgICAgICBlbmNyeXB0aW9uU2NvcGU6IG9wdGlvbnMuZW5jcnlwdGlvblNjb3BlLFxuICAgICAgICAgICAgICAgIGNvcHlTb3VyY2VBdXRob3JpemF0aW9uOiBodHRwQXV0aG9yaXphdGlvblRvU3RyaW5nKG9wdGlvbnMuc291cmNlQXV0aG9yaXphdGlvbiksXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRnJlZXMgdGhlIHNwZWNpZmllZCBwYWdlcyBmcm9tIHRoZSBwYWdlIGJsb2IuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvcHV0LXBhZ2VcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvZmZzZXQgLSBTdGFydGluZyBieXRlIHBvc2l0aW9uIG9mIHRoZSBwYWdlcyB0byBjbGVhci5cbiAgICAgKiBAcGFyYW0gY291bnQgLSBOdW1iZXIgb2YgYnl0ZXMgdG8gY2xlYXIuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHRoZSBQYWdlIEJsb2IgQ2xlYXIgUGFnZXMgb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIFJlc3BvbnNlIGRhdGEgZm9yIHRoZSBQYWdlIEJsb2IgQ2xlYXIgUGFnZXMgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGNsZWFyUGFnZXMob2Zmc2V0ID0gMCwgY291bnQsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiUGFnZUJsb2JDbGllbnQtY2xlYXJQYWdlc1wiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLnBhZ2VCbG9iQ29udGV4dC5jbGVhclBhZ2VzKDAsIHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgcmFuZ2U6IHJhbmdlVG9TdHJpbmcoeyBvZmZzZXQsIGNvdW50IH0pLFxuICAgICAgICAgICAgICAgIHNlcXVlbmNlTnVtYmVyQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIGNwa0luZm86IG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSxcbiAgICAgICAgICAgICAgICBlbmNyeXB0aW9uU2NvcGU6IG9wdGlvbnMuZW5jcnlwdGlvblNjb3BlLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGxpc3Qgb2YgdmFsaWQgcGFnZSByYW5nZXMgZm9yIGEgcGFnZSBibG9iIG9yIHNuYXBzaG90IG9mIGEgcGFnZSBibG9iLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2dldC1wYWdlLXJhbmdlc1xuICAgICAqXG4gICAgICogQHBhcmFtIG9mZnNldCAtIFN0YXJ0aW5nIGJ5dGUgcG9zaXRpb24gb2YgdGhlIHBhZ2UgcmFuZ2VzLlxuICAgICAqIEBwYXJhbSBjb3VudCAtIE51bWJlciBvZiBieXRlcyB0byBnZXQuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHRoZSBQYWdlIEJsb2IgR2V0IFJhbmdlcyBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgdGhlIFBhZ2UgQmxvYiBHZXQgUmFuZ2VzIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBnZXRQYWdlUmFuZ2VzKG9mZnNldCA9IDAsIGNvdW50LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0gb3B0aW9ucy5jb25kaXRpb25zIHx8IHt9O1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIlBhZ2VCbG9iQ2xpZW50LWdldFBhZ2VSYW5nZXNcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMucGFnZUJsb2JDb250ZXh0LmdldFBhZ2VSYW5nZXMoe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICByYW5nZTogcmFuZ2VUb1N0cmluZyh7IG9mZnNldCwgY291bnQgfSksXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgcmV0dXJuIHJhbmdlUmVzcG9uc2VGcm9tTW9kZWwocmVzcG9uc2UpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogZ2V0UGFnZVJhbmdlc1NlZ21lbnQgcmV0dXJucyBhIHNpbmdsZSBzZWdtZW50IG9mIHBhZ2UgcmFuZ2VzIHN0YXJ0aW5nIGZyb20gdGhlXG4gICAgICogc3BlY2lmaWVkIE1hcmtlci4gVXNlIGFuIGVtcHR5IE1hcmtlciB0byBzdGFydCBlbnVtZXJhdGlvbiBmcm9tIHRoZSBiZWdpbm5pbmcuXG4gICAgICogQWZ0ZXIgZ2V0dGluZyBhIHNlZ21lbnQsIHByb2Nlc3MgaXQsIGFuZCB0aGVuIGNhbGwgZ2V0UGFnZVJhbmdlc1NlZ21lbnQgYWdhaW5cbiAgICAgKiAocGFzc2luZyB0aGUgdGhlIHByZXZpb3VzbHktcmV0dXJuZWQgTWFya2VyKSB0byBnZXQgdGhlIG5leHQgc2VnbWVudC5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9nZXQtcGFnZS1yYW5nZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvZmZzZXQgLSBTdGFydGluZyBieXRlIHBvc2l0aW9uIG9mIHRoZSBwYWdlIHJhbmdlcy5cbiAgICAgKiBAcGFyYW0gY291bnQgLSBOdW1iZXIgb2YgYnl0ZXMgdG8gZ2V0LlxuICAgICAqIEBwYXJhbSBtYXJrZXIgLSBBIHN0cmluZyB2YWx1ZSB0aGF0IGlkZW50aWZpZXMgdGhlIHBvcnRpb24gb2YgdGhlIGxpc3QgdG8gYmUgcmV0dXJuZWQgd2l0aCB0aGUgbmV4dCBsaXN0IG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gUGFnZUJsb2IgR2V0IFBhZ2UgUmFuZ2VzIFNlZ21lbnQgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGxpc3RQYWdlUmFuZ2VzU2VnbWVudChvZmZzZXQgPSAwLCBjb3VudCwgbWFya2VyLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJQYWdlQmxvYkNsaWVudC1nZXRQYWdlUmFuZ2VzU2VnbWVudFwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLnBhZ2VCbG9iQ29udGV4dC5nZXRQYWdlUmFuZ2VzKHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgcmFuZ2U6IHJhbmdlVG9TdHJpbmcoeyBvZmZzZXQsIGNvdW50IH0pLFxuICAgICAgICAgICAgICAgIG1hcmtlcjogbWFya2VyLFxuICAgICAgICAgICAgICAgIG1heFBhZ2VTaXplOiBvcHRpb25zLm1heFBhZ2VTaXplLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIGZvciB7QGxpbmsgUGFnZUJsb2JHZXRQYWdlUmFuZ2VzUmVzcG9uc2VNb2RlbH1cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvZmZzZXQgLSBTdGFydGluZyBieXRlIHBvc2l0aW9uIG9mIHRoZSBwYWdlIHJhbmdlcy5cbiAgICAgKiBAcGFyYW0gY291bnQgLSBOdW1iZXIgb2YgYnl0ZXMgdG8gZ2V0LlxuICAgICAqIEBwYXJhbSBtYXJrZXIgLSBBIHN0cmluZyB2YWx1ZSB0aGF0IGlkZW50aWZpZXMgdGhlIHBvcnRpb24gb2ZcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGdldCBvZiBwYWdlIHJhbmdlcyB0byBiZSByZXR1cm5lZCB3aXRoIHRoZSBuZXh0IGdldHRpbmcgb3BlcmF0aW9uLiBUaGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uIHJldHVybnMgdGhlIENvbnRpbnVhdGlvblRva2VuIHZhbHVlIHdpdGhpbiB0aGUgcmVzcG9uc2UgYm9keSBpZiB0aGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0dGluZyBvcGVyYXRpb24gZGlkIG5vdCByZXR1cm4gYWxsIHBhZ2UgcmFuZ2VzIHJlbWFpbmluZyB3aXRoaW4gdGhlIGN1cnJlbnQgcGFnZS5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIENvbnRpbnVhdGlvblRva2VuIHZhbHVlIGNhbiBiZSB1c2VkIGFzIHRoZSB2YWx1ZSBmb3JcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1hcmtlciBwYXJhbWV0ZXIgaW4gYSBzdWJzZXF1ZW50IGNhbGwgdG8gcmVxdWVzdCB0aGUgbmV4dCBwYWdlIG9mIGdldFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy4gVGhlIG1hcmtlciB2YWx1ZSBpcyBvcGFxdWUgdG8gdGhlIGNsaWVudC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gTGlzdCBQYWdlIFJhbmdlcyBvcGVyYXRpb24uXG4gICAgICovXG4gICAgbGlzdFBhZ2VSYW5nZUl0ZW1TZWdtZW50cygpIHtcbiAgICAgICAgcmV0dXJuIHRzbGliLl9fYXN5bmNHZW5lcmF0b3IodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiogbGlzdFBhZ2VSYW5nZUl0ZW1TZWdtZW50c18xKG9mZnNldCA9IDAsIGNvdW50LCBtYXJrZXIsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICAgICAgbGV0IGdldFBhZ2VSYW5nZUl0ZW1TZWdtZW50c1Jlc3BvbnNlO1xuICAgICAgICAgICAgaWYgKCEhbWFya2VyIHx8IG1hcmtlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICBnZXRQYWdlUmFuZ2VJdGVtU2VnbWVudHNSZXNwb25zZSA9IHlpZWxkIHRzbGliLl9fYXdhaXQodGhpcy5saXN0UGFnZVJhbmdlc1NlZ21lbnQob2Zmc2V0LCBjb3VudCwgbWFya2VyLCBvcHRpb25zKSk7XG4gICAgICAgICAgICAgICAgICAgIG1hcmtlciA9IGdldFBhZ2VSYW5nZUl0ZW1TZWdtZW50c1Jlc3BvbnNlLmNvbnRpbnVhdGlvblRva2VuO1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCB5aWVsZCB0c2xpYi5fX2F3YWl0KHlpZWxkIHRzbGliLl9fYXdhaXQoZ2V0UGFnZVJhbmdlSXRlbVNlZ21lbnRzUmVzcG9uc2UpKTtcbiAgICAgICAgICAgICAgICB9IHdoaWxlIChtYXJrZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBBc3luY0l0ZXJhYmxlSXRlcmF0b3Igb2Yge0BsaW5rIFBhZ2VSYW5nZUluZm99IG9iamVjdHNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvZmZzZXQgLSBTdGFydGluZyBieXRlIHBvc2l0aW9uIG9mIHRoZSBwYWdlIHJhbmdlcy5cbiAgICAgKiBAcGFyYW0gY291bnQgLSBOdW1iZXIgb2YgYnl0ZXMgdG8gZ2V0LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBMaXN0IFBhZ2UgUmFuZ2VzIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBsaXN0UGFnZVJhbmdlSXRlbXMoKSB7XG4gICAgICAgIHJldHVybiB0c2xpYi5fX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24qIGxpc3RQYWdlUmFuZ2VJdGVtc18xKG9mZnNldCA9IDAsIGNvdW50LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgICAgIHZhciBfYSwgZV8xLCBfYiwgX2M7XG4gICAgICAgICAgICBsZXQgbWFya2VyO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBfZCA9IHRydWUsIF9lID0gdHNsaWIuX19hc3luY1ZhbHVlcyh0aGlzLmxpc3RQYWdlUmFuZ2VJdGVtU2VnbWVudHMob2Zmc2V0LCBjb3VudCwgbWFya2VyLCBvcHRpb25zKSksIF9mOyBfZiA9IHlpZWxkIHRzbGliLl9fYXdhaXQoX2UubmV4dCgpKSwgX2EgPSBfZi5kb25lLCAhX2E7IF9kID0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICBfYyA9IF9mLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBfZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBnZXRQYWdlUmFuZ2VzU2VnbWVudCA9IF9jO1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCB0c2xpYi5fX2F3YWl0KHlpZWxkKiB0c2xpYi5fX2FzeW5jRGVsZWdhdG9yKHRzbGliLl9fYXN5bmNWYWx1ZXMoRXh0cmFjdFBhZ2VSYW5nZUluZm9JdGVtcyhnZXRQYWdlUmFuZ2VzU2VnbWVudCkpKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghX2QgJiYgIV9hICYmIChfYiA9IF9lLnJldHVybikpIHlpZWxkIHRzbGliLl9fYXdhaXQoX2IuY2FsbChfZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIGFzeW5jIGl0ZXJhYmxlIGl0ZXJhdG9yIHRvIGxpc3Qgb2YgcGFnZSByYW5nZXMgZm9yIGEgcGFnZSBibG9iLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2dldC1wYWdlLXJhbmdlc1xuICAgICAqXG4gICAgICogIC5ieVBhZ2UoKSByZXR1cm5zIGFuIGFzeW5jIGl0ZXJhYmxlIGl0ZXJhdG9yIHRvIGxpc3Qgb2YgcGFnZSByYW5nZXMgZm9yIGEgcGFnZSBibG9iLlxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBgZm9yIGF3YWl0YCBzeW50YXg6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIEdldCB0aGUgcGFnZUJsb2JDbGllbnQgYmVmb3JlIHlvdSBydW4gdGhlc2Ugc25pcHBldHMsXG4gICAgICogLy8gQ2FuIGJlIG9idGFpbmVkIGZyb20gYGJsb2JTZXJ2aWNlQ2xpZW50LmdldENvbnRhaW5lckNsaWVudChcIjx5b3VyLWNvbnRhaW5lci1uYW1lPlwiKS5nZXRQYWdlQmxvYkNsaWVudChcIjx5b3VyLWJsb2ItbmFtZT5cIik7YFxuICAgICAqIGxldCBpID0gMTtcbiAgICAgKiBmb3IgYXdhaXQgKGNvbnN0IHBhZ2VSYW5nZSBvZiBwYWdlQmxvYkNsaWVudC5saXN0UGFnZVJhbmdlcygpKSB7XG4gICAgICogICBjb25zb2xlLmxvZyhgUGFnZSByYW5nZSAke2krK306ICR7cGFnZVJhbmdlLnN0YXJ0fSAtICR7cGFnZVJhbmdlLmVuZH1gKTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIGBpdGVyLm5leHQoKWA6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGxldCBpID0gMTtcbiAgICAgKiBsZXQgaXRlciA9IHBhZ2VCbG9iQ2xpZW50Lmxpc3RQYWdlUmFuZ2VzKCk7XG4gICAgICogbGV0IHBhZ2VSYW5nZUl0ZW0gPSBhd2FpdCBpdGVyLm5leHQoKTtcbiAgICAgKiB3aGlsZSAoIXBhZ2VSYW5nZUl0ZW0uZG9uZSkge1xuICAgICAqICAgY29uc29sZS5sb2coYFBhZ2UgcmFuZ2UgJHtpKyt9OiAke3BhZ2VSYW5nZUl0ZW0udmFsdWUuc3RhcnR9IC0gJHtwYWdlUmFuZ2VJdGVtLnZhbHVlLmVuZH0sIElzQ2xlYXI6ICR7cGFnZVJhbmdlSXRlbS52YWx1ZS5pc0NsZWFyfWApO1xuICAgICAqICAgcGFnZVJhbmdlSXRlbSA9IGF3YWl0IGl0ZXIubmV4dCgpO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNpbmcgYGJ5UGFnZSgpYDpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogLy8gcGFzc2luZyBvcHRpb25hbCBtYXhQYWdlU2l6ZSBpbiB0aGUgcGFnZSBzZXR0aW5nc1xuICAgICAqIGxldCBpID0gMTtcbiAgICAgKiBmb3IgYXdhaXQgKGNvbnN0IHJlc3BvbnNlIG9mIHBhZ2VCbG9iQ2xpZW50Lmxpc3RQYWdlUmFuZ2VzKCkuYnlQYWdlKHsgbWF4UGFnZVNpemU6IDIwIH0pKSB7XG4gICAgICogICBmb3IgKGNvbnN0IHBhZ2VSYW5nZSBvZiByZXNwb25zZSkge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhgUGFnZSByYW5nZSAke2krK306ICR7cGFnZVJhbmdlLnN0YXJ0fSAtICR7cGFnZVJhbmdlLmVuZH1gKTtcbiAgICAgKiAgIH1cbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIHBhZ2luZyB3aXRoIGEgbWFya2VyOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBsZXQgaSA9IDE7XG4gICAgICogbGV0IGl0ZXJhdG9yID0gcGFnZUJsb2JDbGllbnQubGlzdFBhZ2VSYW5nZXMoKS5ieVBhZ2UoeyBtYXhQYWdlU2l6ZTogMiB9KTtcbiAgICAgKiBsZXQgcmVzcG9uc2UgPSAoYXdhaXQgaXRlcmF0b3IubmV4dCgpKS52YWx1ZTtcbiAgICAgKlxuICAgICAqIC8vIFByaW50cyAyIHBhZ2UgcmFuZ2VzXG4gICAgICogZm9yIChjb25zdCBwYWdlUmFuZ2Ugb2YgcmVzcG9uc2UpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKGBQYWdlIHJhbmdlICR7aSsrfTogJHtwYWdlUmFuZ2Uuc3RhcnR9IC0gJHtwYWdlUmFuZ2UuZW5kfWApO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIC8vIEdldHMgbmV4dCBtYXJrZXJcbiAgICAgKiBsZXQgbWFya2VyID0gcmVzcG9uc2UuY29udGludWF0aW9uVG9rZW47XG4gICAgICpcbiAgICAgKiAvLyBQYXNzaW5nIG5leHQgbWFya2VyIGFzIGNvbnRpbnVhdGlvblRva2VuXG4gICAgICpcbiAgICAgKiBpdGVyYXRvciA9IHBhZ2VCbG9iQ2xpZW50Lmxpc3RQYWdlUmFuZ2VzKCkuYnlQYWdlKHsgY29udGludWF0aW9uVG9rZW46IG1hcmtlciwgbWF4UGFnZVNpemU6IDEwIH0pO1xuICAgICAqIHJlc3BvbnNlID0gKGF3YWl0IGl0ZXJhdG9yLm5leHQoKSkudmFsdWU7XG4gICAgICpcbiAgICAgKiAvLyBQcmludHMgMTAgcGFnZSByYW5nZXNcbiAgICAgKiBmb3IgKGNvbnN0IGJsb2Igb2YgcmVzcG9uc2UpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKGBQYWdlIHJhbmdlICR7aSsrfTogJHtwYWdlUmFuZ2Uuc3RhcnR9IC0gJHtwYWdlUmFuZ2UuZW5kfWApO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKiBAcGFyYW0gb2Zmc2V0IC0gU3RhcnRpbmcgYnl0ZSBwb3NpdGlvbiBvZiB0aGUgcGFnZSByYW5nZXMuXG4gICAgICogQHBhcmFtIGNvdW50IC0gTnVtYmVyIG9mIGJ5dGVzIHRvIGdldC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gdGhlIFBhZ2UgQmxvYiBHZXQgUmFuZ2VzIG9wZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyBBbiBhc3luY0l0ZXJhYmxlSXRlcmF0b3IgdGhhdCBzdXBwb3J0cyBwYWdpbmcuXG4gICAgICovXG4gICAgbGlzdFBhZ2VSYW5nZXMob2Zmc2V0ID0gMCwgY291bnQsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIC8vIEFzeW5jSXRlcmFibGVJdGVyYXRvciB0byBpdGVyYXRlIG92ZXIgYmxvYnNcbiAgICAgICAgY29uc3QgaXRlciA9IHRoaXMubGlzdFBhZ2VSYW5nZUl0ZW1zKG9mZnNldCwgY291bnQsIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBUaGUgbmV4dCBtZXRob2QsIHBhcnQgb2YgdGhlIGl0ZXJhdGlvbiBwcm90b2NvbFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBuZXh0KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVyLm5leHQoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFRoZSBjb25uZWN0aW9uIHRvIHRoZSBhc3luYyBpdGVyYXRvciwgcGFydCBvZiB0aGUgaXRlcmF0aW9uIHByb3RvY29sXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBSZXR1cm4gYW4gQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIHRoYXQgd29ya3MgYSBwYWdlIGF0IGEgdGltZVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBieVBhZ2U6IChzZXR0aW5ncyA9IHt9KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubGlzdFBhZ2VSYW5nZUl0ZW1TZWdtZW50cyhvZmZzZXQsIGNvdW50LCBzZXR0aW5ncy5jb250aW51YXRpb25Ub2tlbiwgT2JqZWN0LmFzc2lnbih7IG1heFBhZ2VTaXplOiBzZXR0aW5ncy5tYXhQYWdlU2l6ZSB9LCBvcHRpb25zKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBjb2xsZWN0aW9uIG9mIHBhZ2UgcmFuZ2VzIHRoYXQgZGlmZmVyIGJldHdlZW4gYSBzcGVjaWZpZWQgc25hcHNob3QgYW5kIHRoaXMgcGFnZSBibG9iLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2dldC1wYWdlLXJhbmdlc1xuICAgICAqXG4gICAgICogQHBhcmFtIG9mZnNldCAtIFN0YXJ0aW5nIGJ5dGUgcG9zaXRpb24gb2YgdGhlIHBhZ2UgYmxvYlxuICAgICAqIEBwYXJhbSBjb3VudCAtIE51bWJlciBvZiBieXRlcyB0byBnZXQgcmFuZ2VzIGRpZmYuXG4gICAgICogQHBhcmFtIHByZXZTbmFwc2hvdCAtIFRpbWVzdGFtcCBvZiBzbmFwc2hvdCB0byByZXRyaWV2ZSB0aGUgZGlmZmVyZW5jZS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gdGhlIFBhZ2UgQmxvYiBHZXQgUGFnZSBSYW5nZXMgRGlmZiBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgdGhlIFBhZ2UgQmxvYiBHZXQgUGFnZSBSYW5nZSBEaWZmIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBnZXRQYWdlUmFuZ2VzRGlmZihvZmZzZXQsIGNvdW50LCBwcmV2U25hcHNob3QsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiUGFnZUJsb2JDbGllbnQtZ2V0UGFnZVJhbmdlc0RpZmZcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLnBhZ2VCbG9iQ29udGV4dC5nZXRQYWdlUmFuZ2VzRGlmZih7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIHByZXZzbmFwc2hvdDogcHJldlNuYXBzaG90LFxuICAgICAgICAgICAgICAgIHJhbmdlOiByYW5nZVRvU3RyaW5nKHsgb2Zmc2V0LCBjb3VudCB9KSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICByZXR1cm4gcmFuZ2VSZXNwb25zZUZyb21Nb2RlbChyZXN1bHQpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogZ2V0UGFnZVJhbmdlc0RpZmZTZWdtZW50IHJldHVybnMgYSBzaW5nbGUgc2VnbWVudCBvZiBwYWdlIHJhbmdlcyBzdGFydGluZyBmcm9tIHRoZVxuICAgICAqIHNwZWNpZmllZCBNYXJrZXIgZm9yIGRpZmZlcmVuY2UgYmV0d2VlbiBwcmV2aW91cyBzbmFwc2hvdCBhbmQgdGhlIHRhcmdldCBwYWdlIGJsb2IuXG4gICAgICogVXNlIGFuIGVtcHR5IE1hcmtlciB0byBzdGFydCBlbnVtZXJhdGlvbiBmcm9tIHRoZSBiZWdpbm5pbmcuXG4gICAgICogQWZ0ZXIgZ2V0dGluZyBhIHNlZ21lbnQsIHByb2Nlc3MgaXQsIGFuZCB0aGVuIGNhbGwgZ2V0UGFnZVJhbmdlc0RpZmZTZWdtZW50IGFnYWluXG4gICAgICogKHBhc3NpbmcgdGhlIHRoZSBwcmV2aW91c2x5LXJldHVybmVkIE1hcmtlcikgdG8gZ2V0IHRoZSBuZXh0IHNlZ21lbnQuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvZ2V0LXBhZ2UtcmFuZ2VzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb2Zmc2V0IC0gU3RhcnRpbmcgYnl0ZSBwb3NpdGlvbiBvZiB0aGUgcGFnZSByYW5nZXMuXG4gICAgICogQHBhcmFtIGNvdW50IC0gTnVtYmVyIG9mIGJ5dGVzIHRvIGdldC5cbiAgICAgKiBAcGFyYW0gcHJldlNuYXBzaG90T3JVcmwgLSBUaW1lc3RhbXAgb2Ygc25hcHNob3QgdG8gcmV0cmlldmUgdGhlIGRpZmZlcmVuY2Ugb3IgVVJMIG9mIHNuYXBzaG90IHRvIHJldHJpZXZlIHRoZSBkaWZmZXJlbmNlLlxuICAgICAqIEBwYXJhbSBtYXJrZXIgLSBBIHN0cmluZyB2YWx1ZSB0aGF0IGlkZW50aWZpZXMgdGhlIHBvcnRpb24gb2YgdGhlIGdldCB0byBiZSByZXR1cm5lZCB3aXRoIHRoZSBuZXh0IGdldCBvcGVyYXRpb24uXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHRoZSBQYWdlIEJsb2IgR2V0IFBhZ2UgUmFuZ2VzIERpZmYgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGxpc3RQYWdlUmFuZ2VzRGlmZlNlZ21lbnQob2Zmc2V0LCBjb3VudCwgcHJldlNuYXBzaG90T3JVcmwsIG1hcmtlciwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiUGFnZUJsb2JDbGllbnQtZ2V0UGFnZVJhbmdlc0RpZmZTZWdtZW50XCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMucGFnZUJsb2JDb250ZXh0LmdldFBhZ2VSYW5nZXNEaWZmKHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICBwcmV2c25hcHNob3Q6IHByZXZTbmFwc2hvdE9yVXJsLFxuICAgICAgICAgICAgICAgIHJhbmdlOiByYW5nZVRvU3RyaW5nKHtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiBvZmZzZXQsXG4gICAgICAgICAgICAgICAgICAgIGNvdW50OiBjb3VudCxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBtYXJrZXI6IG1hcmtlcixcbiAgICAgICAgICAgICAgICBtYXhQYWdlU2l6ZTogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLm1heFBhZ2VTaXplLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIGZvciB7QGxpbmsgUGFnZUJsb2JHZXRQYWdlUmFuZ2VzRGlmZlJlc3BvbnNlTW9kZWx9XG4gICAgICpcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvZmZzZXQgLSBTdGFydGluZyBieXRlIHBvc2l0aW9uIG9mIHRoZSBwYWdlIHJhbmdlcy5cbiAgICAgKiBAcGFyYW0gY291bnQgLSBOdW1iZXIgb2YgYnl0ZXMgdG8gZ2V0LlxuICAgICAqIEBwYXJhbSBwcmV2U25hcHNob3RPclVybCAtIFRpbWVzdGFtcCBvZiBzbmFwc2hvdCB0byByZXRyaWV2ZSB0aGUgZGlmZmVyZW5jZSBvciBVUkwgb2Ygc25hcHNob3QgdG8gcmV0cmlldmUgdGhlIGRpZmZlcmVuY2UuXG4gICAgICogQHBhcmFtIG1hcmtlciAtIEEgc3RyaW5nIHZhbHVlIHRoYXQgaWRlbnRpZmllcyB0aGUgcG9ydGlvbiBvZlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZ2V0IG9mIHBhZ2UgcmFuZ2VzIHRvIGJlIHJldHVybmVkIHdpdGggdGhlIG5leHQgZ2V0dGluZyBvcGVyYXRpb24uIFRoZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gcmV0dXJucyB0aGUgQ29udGludWF0aW9uVG9rZW4gdmFsdWUgd2l0aGluIHRoZSByZXNwb25zZSBib2R5IGlmIHRoZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBnZXR0aW5nIG9wZXJhdGlvbiBkaWQgbm90IHJldHVybiBhbGwgcGFnZSByYW5nZXMgcmVtYWluaW5nIHdpdGhpbiB0aGUgY3VycmVudCBwYWdlLlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgQ29udGludWF0aW9uVG9rZW4gdmFsdWUgY2FuIGJlIHVzZWQgYXMgdGhlIHZhbHVlIGZvclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWFya2VyIHBhcmFtZXRlciBpbiBhIHN1YnNlcXVlbnQgY2FsbCB0byByZXF1ZXN0IHRoZSBuZXh0IHBhZ2Ugb2YgZ2V0XG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLiBUaGUgbWFya2VyIHZhbHVlIGlzIG9wYXF1ZSB0byB0aGUgY2xpZW50LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB0aGUgUGFnZSBCbG9iIEdldCBQYWdlIFJhbmdlcyBEaWZmIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBsaXN0UGFnZVJhbmdlRGlmZkl0ZW1TZWdtZW50cyhvZmZzZXQsIGNvdW50LCBwcmV2U25hcHNob3RPclVybCwgbWFya2VyLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0c2xpYi5fX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24qIGxpc3RQYWdlUmFuZ2VEaWZmSXRlbVNlZ21lbnRzXzEoKSB7XG4gICAgICAgICAgICBsZXQgZ2V0UGFnZVJhbmdlSXRlbVNlZ21lbnRzUmVzcG9uc2U7XG4gICAgICAgICAgICBpZiAoISFtYXJrZXIgfHwgbWFya2VyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgIGdldFBhZ2VSYW5nZUl0ZW1TZWdtZW50c1Jlc3BvbnNlID0geWllbGQgdHNsaWIuX19hd2FpdCh0aGlzLmxpc3RQYWdlUmFuZ2VzRGlmZlNlZ21lbnQob2Zmc2V0LCBjb3VudCwgcHJldlNuYXBzaG90T3JVcmwsIG1hcmtlciwgb3B0aW9ucykpO1xuICAgICAgICAgICAgICAgICAgICBtYXJrZXIgPSBnZXRQYWdlUmFuZ2VJdGVtU2VnbWVudHNSZXNwb25zZS5jb250aW51YXRpb25Ub2tlbjtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgeWllbGQgdHNsaWIuX19hd2FpdCh5aWVsZCB0c2xpYi5fX2F3YWl0KGdldFBhZ2VSYW5nZUl0ZW1TZWdtZW50c1Jlc3BvbnNlKSk7XG4gICAgICAgICAgICAgICAgfSB3aGlsZSAobWFya2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIG9mIHtAbGluayBQYWdlUmFuZ2VJbmZvfSBvYmplY3RzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb2Zmc2V0IC0gU3RhcnRpbmcgYnl0ZSBwb3NpdGlvbiBvZiB0aGUgcGFnZSByYW5nZXMuXG4gICAgICogQHBhcmFtIGNvdW50IC0gTnVtYmVyIG9mIGJ5dGVzIHRvIGdldC5cbiAgICAgKiBAcGFyYW0gcHJldlNuYXBzaG90T3JVcmwgLSBUaW1lc3RhbXAgb2Ygc25hcHNob3QgdG8gcmV0cmlldmUgdGhlIGRpZmZlcmVuY2Ugb3IgVVJMIG9mIHNuYXBzaG90IHRvIHJldHJpZXZlIHRoZSBkaWZmZXJlbmNlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB0aGUgUGFnZSBCbG9iIEdldCBQYWdlIFJhbmdlcyBEaWZmIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBsaXN0UGFnZVJhbmdlRGlmZkl0ZW1zKG9mZnNldCwgY291bnQsIHByZXZTbmFwc2hvdE9yVXJsLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0c2xpYi5fX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24qIGxpc3RQYWdlUmFuZ2VEaWZmSXRlbXNfMSgpIHtcbiAgICAgICAgICAgIHZhciBfYSwgZV8yLCBfYiwgX2M7XG4gICAgICAgICAgICBsZXQgbWFya2VyO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBfZCA9IHRydWUsIF9lID0gdHNsaWIuX19hc3luY1ZhbHVlcyh0aGlzLmxpc3RQYWdlUmFuZ2VEaWZmSXRlbVNlZ21lbnRzKG9mZnNldCwgY291bnQsIHByZXZTbmFwc2hvdE9yVXJsLCBtYXJrZXIsIG9wdGlvbnMpKSwgX2Y7IF9mID0geWllbGQgdHNsaWIuX19hd2FpdChfZS5uZXh0KCkpLCBfYSA9IF9mLmRvbmUsICFfYTsgX2QgPSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgIF9jID0gX2YudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIF9kID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGdldFBhZ2VSYW5nZXNTZWdtZW50ID0gX2M7XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIHRzbGliLl9fYXdhaXQoeWllbGQqIHRzbGliLl9fYXN5bmNEZWxlZ2F0b3IodHNsaWIuX19hc3luY1ZhbHVlcyhFeHRyYWN0UGFnZVJhbmdlSW5mb0l0ZW1zKGdldFBhZ2VSYW5nZXNTZWdtZW50KSkpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZV8yXzEpIHsgZV8yID0geyBlcnJvcjogZV8yXzEgfTsgfVxuICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFfZCAmJiAhX2EgJiYgKF9iID0gX2UucmV0dXJuKSkgeWllbGQgdHNsaWIuX19hd2FpdChfYi5jYWxsKF9lKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8yKSB0aHJvdyBlXzIuZXJyb3I7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gYXN5bmMgaXRlcmFibGUgaXRlcmF0b3IgdG8gbGlzdCBvZiBwYWdlIHJhbmdlcyB0aGF0IGRpZmZlciBiZXR3ZWVuIGEgc3BlY2lmaWVkIHNuYXBzaG90IGFuZCB0aGlzIHBhZ2UgYmxvYi5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9nZXQtcGFnZS1yYW5nZXNcbiAgICAgKlxuICAgICAqICAuYnlQYWdlKCkgcmV0dXJucyBhbiBhc3luYyBpdGVyYWJsZSBpdGVyYXRvciB0byBsaXN0IG9mIHBhZ2UgcmFuZ2VzIHRoYXQgZGlmZmVyIGJldHdlZW4gYSBzcGVjaWZpZWQgc25hcHNob3QgYW5kIHRoaXMgcGFnZSBibG9iLlxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBgZm9yIGF3YWl0YCBzeW50YXg6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIEdldCB0aGUgcGFnZUJsb2JDbGllbnQgYmVmb3JlIHlvdSBydW4gdGhlc2Ugc25pcHBldHMsXG4gICAgICogLy8gQ2FuIGJlIG9idGFpbmVkIGZyb20gYGJsb2JTZXJ2aWNlQ2xpZW50LmdldENvbnRhaW5lckNsaWVudChcIjx5b3VyLWNvbnRhaW5lci1uYW1lPlwiKS5nZXRQYWdlQmxvYkNsaWVudChcIjx5b3VyLWJsb2ItbmFtZT5cIik7YFxuICAgICAqIGxldCBpID0gMTtcbiAgICAgKiBmb3IgYXdhaXQgKGNvbnN0IHBhZ2VSYW5nZSBvZiBwYWdlQmxvYkNsaWVudC5saXN0UGFnZVJhbmdlc0RpZmYoKSkge1xuICAgICAqICAgY29uc29sZS5sb2coYFBhZ2UgcmFuZ2UgJHtpKyt9OiAke3BhZ2VSYW5nZS5zdGFydH0gLSAke3BhZ2VSYW5nZS5lbmR9YCk7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBgaXRlci5uZXh0KClgOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBsZXQgaSA9IDE7XG4gICAgICogbGV0IGl0ZXIgPSBwYWdlQmxvYkNsaWVudC5saXN0UGFnZVJhbmdlc0RpZmYoKTtcbiAgICAgKiBsZXQgcGFnZVJhbmdlSXRlbSA9IGF3YWl0IGl0ZXIubmV4dCgpO1xuICAgICAqIHdoaWxlICghcGFnZVJhbmdlSXRlbS5kb25lKSB7XG4gICAgICogICBjb25zb2xlLmxvZyhgUGFnZSByYW5nZSAke2krK306ICR7cGFnZVJhbmdlSXRlbS52YWx1ZS5zdGFydH0gLSAke3BhZ2VSYW5nZUl0ZW0udmFsdWUuZW5kfSwgSXNDbGVhcjogJHtwYWdlUmFuZ2VJdGVtLnZhbHVlLmlzQ2xlYXJ9YCk7XG4gICAgICogICBwYWdlUmFuZ2VJdGVtID0gYXdhaXQgaXRlci5uZXh0KCk7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBgYnlQYWdlKClgOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiAvLyBwYXNzaW5nIG9wdGlvbmFsIG1heFBhZ2VTaXplIGluIHRoZSBwYWdlIHNldHRpbmdzXG4gICAgICogbGV0IGkgPSAxO1xuICAgICAqIGZvciBhd2FpdCAoY29uc3QgcmVzcG9uc2Ugb2YgcGFnZUJsb2JDbGllbnQubGlzdFBhZ2VSYW5nZXNEaWZmKCkuYnlQYWdlKHsgbWF4UGFnZVNpemU6IDIwIH0pKSB7XG4gICAgICogICBmb3IgKGNvbnN0IHBhZ2VSYW5nZSBvZiByZXNwb25zZSkge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhgUGFnZSByYW5nZSAke2krK306ICR7cGFnZVJhbmdlLnN0YXJ0fSAtICR7cGFnZVJhbmdlLmVuZH1gKTtcbiAgICAgKiAgIH1cbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIHBhZ2luZyB3aXRoIGEgbWFya2VyOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBsZXQgaSA9IDE7XG4gICAgICogbGV0IGl0ZXJhdG9yID0gcGFnZUJsb2JDbGllbnQubGlzdFBhZ2VSYW5nZXNEaWZmKCkuYnlQYWdlKHsgbWF4UGFnZVNpemU6IDIgfSk7XG4gICAgICogbGV0IHJlc3BvbnNlID0gKGF3YWl0IGl0ZXJhdG9yLm5leHQoKSkudmFsdWU7XG4gICAgICpcbiAgICAgKiAvLyBQcmludHMgMiBwYWdlIHJhbmdlc1xuICAgICAqIGZvciAoY29uc3QgcGFnZVJhbmdlIG9mIHJlc3BvbnNlKSB7XG4gICAgICogICBjb25zb2xlLmxvZyhgUGFnZSByYW5nZSAke2krK306ICR7cGFnZVJhbmdlLnN0YXJ0fSAtICR7cGFnZVJhbmdlLmVuZH1gKTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBHZXRzIG5leHQgbWFya2VyXG4gICAgICogbGV0IG1hcmtlciA9IHJlc3BvbnNlLmNvbnRpbnVhdGlvblRva2VuO1xuICAgICAqXG4gICAgICogLy8gUGFzc2luZyBuZXh0IG1hcmtlciBhcyBjb250aW51YXRpb25Ub2tlblxuICAgICAqXG4gICAgICogaXRlcmF0b3IgPSBwYWdlQmxvYkNsaWVudC5saXN0UGFnZVJhbmdlc0RpZmYoKS5ieVBhZ2UoeyBjb250aW51YXRpb25Ub2tlbjogbWFya2VyLCBtYXhQYWdlU2l6ZTogMTAgfSk7XG4gICAgICogcmVzcG9uc2UgPSAoYXdhaXQgaXRlcmF0b3IubmV4dCgpKS52YWx1ZTtcbiAgICAgKlxuICAgICAqIC8vIFByaW50cyAxMCBwYWdlIHJhbmdlc1xuICAgICAqIGZvciAoY29uc3QgYmxvYiBvZiByZXNwb25zZSkge1xuICAgICAqICAgY29uc29sZS5sb2coYFBhZ2UgcmFuZ2UgJHtpKyt9OiAke3BhZ2VSYW5nZS5zdGFydH0gLSAke3BhZ2VSYW5nZS5lbmR9YCk7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqIEBwYXJhbSBvZmZzZXQgLSBTdGFydGluZyBieXRlIHBvc2l0aW9uIG9mIHRoZSBwYWdlIHJhbmdlcy5cbiAgICAgKiBAcGFyYW0gY291bnQgLSBOdW1iZXIgb2YgYnl0ZXMgdG8gZ2V0LlxuICAgICAqIEBwYXJhbSBwcmV2U25hcHNob3QgLSBUaW1lc3RhbXAgb2Ygc25hcHNob3QgdG8gcmV0cmlldmUgdGhlIGRpZmZlcmVuY2UuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHRoZSBQYWdlIEJsb2IgR2V0IFJhbmdlcyBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgQW4gYXN5bmNJdGVyYWJsZUl0ZXJhdG9yIHRoYXQgc3VwcG9ydHMgcGFnaW5nLlxuICAgICAqL1xuICAgIGxpc3RQYWdlUmFuZ2VzRGlmZihvZmZzZXQsIGNvdW50LCBwcmV2U25hcHNob3QsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIC8vIEFzeW5jSXRlcmFibGVJdGVyYXRvciB0byBpdGVyYXRlIG92ZXIgYmxvYnNcbiAgICAgICAgY29uc3QgaXRlciA9IHRoaXMubGlzdFBhZ2VSYW5nZURpZmZJdGVtcyhvZmZzZXQsIGNvdW50LCBwcmV2U25hcHNob3QsIE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVGhlIG5leHQgbWV0aG9kLCBwYXJ0IG9mIHRoZSBpdGVyYXRpb24gcHJvdG9jb2xcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgbmV4dCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlci5uZXh0KCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBUaGUgY29ubmVjdGlvbiB0byB0aGUgYXN5bmMgaXRlcmF0b3IsIHBhcnQgb2YgdGhlIGl0ZXJhdGlvbiBwcm90b2NvbFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogUmV0dXJuIGFuIEFzeW5jSXRlcmFibGVJdGVyYXRvciB0aGF0IHdvcmtzIGEgcGFnZSBhdCBhIHRpbWVcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgYnlQYWdlOiAoc2V0dGluZ3MgPSB7fSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxpc3RQYWdlUmFuZ2VEaWZmSXRlbVNlZ21lbnRzKG9mZnNldCwgY291bnQsIHByZXZTbmFwc2hvdCwgc2V0dGluZ3MuY29udGludWF0aW9uVG9rZW4sIE9iamVjdC5hc3NpZ24oeyBtYXhQYWdlU2l6ZTogc2V0dGluZ3MubWF4UGFnZVNpemUgfSwgb3B0aW9ucykpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgY29sbGVjdGlvbiBvZiBwYWdlIHJhbmdlcyB0aGF0IGRpZmZlciBiZXR3ZWVuIGEgc3BlY2lmaWVkIHNuYXBzaG90IGFuZCB0aGlzIHBhZ2UgYmxvYiBmb3IgbWFuYWdlZCBkaXNrcy5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9nZXQtcGFnZS1yYW5nZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvZmZzZXQgLSBTdGFydGluZyBieXRlIHBvc2l0aW9uIG9mIHRoZSBwYWdlIGJsb2JcbiAgICAgKiBAcGFyYW0gY291bnQgLSBOdW1iZXIgb2YgYnl0ZXMgdG8gZ2V0IHJhbmdlcyBkaWZmLlxuICAgICAqIEBwYXJhbSBwcmV2U25hcHNob3RVcmwgLSBVUkwgb2Ygc25hcHNob3QgdG8gcmV0cmlldmUgdGhlIGRpZmZlcmVuY2UuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHRoZSBQYWdlIEJsb2IgR2V0IFBhZ2UgUmFuZ2VzIERpZmYgb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIFJlc3BvbnNlIGRhdGEgZm9yIHRoZSBQYWdlIEJsb2IgR2V0IFBhZ2UgUmFuZ2UgRGlmZiBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgZ2V0UGFnZVJhbmdlc0RpZmZGb3JNYW5hZ2VkRGlza3Mob2Zmc2V0LCBjb3VudCwgcHJldlNuYXBzaG90VXJsLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0gb3B0aW9ucy5jb25kaXRpb25zIHx8IHt9O1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIlBhZ2VCbG9iQ2xpZW50LUdldFBhZ2VSYW5nZXNEaWZmRm9yTWFuYWdlZERpc2tzXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLnBhZ2VCbG9iQ29udGV4dC5nZXRQYWdlUmFuZ2VzRGlmZih7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIHByZXZTbmFwc2hvdFVybCxcbiAgICAgICAgICAgICAgICByYW5nZTogcmFuZ2VUb1N0cmluZyh7IG9mZnNldCwgY291bnQgfSksXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgcmV0dXJuIHJhbmdlUmVzcG9uc2VGcm9tTW9kZWwocmVzcG9uc2UpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVzaXplcyB0aGUgcGFnZSBibG9iIHRvIHRoZSBzcGVjaWZpZWQgc2l6ZSAod2hpY2ggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDUxMikuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvc2V0LWJsb2ItcHJvcGVydGllc1xuICAgICAqXG4gICAgICogQHBhcmFtIHNpemUgLSBUYXJnZXQgc2l6ZVxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB0aGUgUGFnZSBCbG9iIFJlc2l6ZSBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgdGhlIFBhZ2UgQmxvYiBSZXNpemUgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIHJlc2l6ZShzaXplLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0gb3B0aW9ucy5jb25kaXRpb25zIHx8IHt9O1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIlBhZ2VCbG9iQ2xpZW50LXJlc2l6ZVwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLnBhZ2VCbG9iQ29udGV4dC5yZXNpemUoc2l6ZSwge1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICBlbmNyeXB0aW9uU2NvcGU6IG9wdGlvbnMuZW5jcnlwdGlvblNjb3BlLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldHMgYSBwYWdlIGJsb2IncyBzZXF1ZW5jZSBudW1iZXIuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvc2V0LWJsb2ItcHJvcGVydGllc1xuICAgICAqXG4gICAgICogQHBhcmFtIHNlcXVlbmNlTnVtYmVyQWN0aW9uIC0gSW5kaWNhdGVzIGhvdyB0aGUgc2VydmljZSBzaG91bGQgbW9kaWZ5IHRoZSBibG9iJ3Mgc2VxdWVuY2UgbnVtYmVyLlxuICAgICAqIEBwYXJhbSBzZXF1ZW5jZU51bWJlciAtIFJlcXVpcmVkIGlmIHNlcXVlbmNlTnVtYmVyQWN0aW9uIGlzIG1heCBvciB1cGRhdGVcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gdGhlIFBhZ2UgQmxvYiBVcGRhdGUgU2VxdWVuY2UgTnVtYmVyIG9wZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyBSZXNwb25zZSBkYXRhIGZvciB0aGUgUGFnZSBCbG9iIFVwZGF0ZSBTZXF1ZW5jZSBOdW1iZXIgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIHVwZGF0ZVNlcXVlbmNlTnVtYmVyKHNlcXVlbmNlTnVtYmVyQWN0aW9uLCBzZXF1ZW5jZU51bWJlciwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIG9wdGlvbnMuY29uZGl0aW9ucyA9IG9wdGlvbnMuY29uZGl0aW9ucyB8fCB7fTtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJQYWdlQmxvYkNsaWVudC11cGRhdGVTZXF1ZW5jZU51bWJlclwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLnBhZ2VCbG9iQ29udGV4dC51cGRhdGVTZXF1ZW5jZU51bWJlcihzZXF1ZW5jZU51bWJlckFjdGlvbiwge1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGJsb2JTZXF1ZW5jZU51bWJlcjogc2VxdWVuY2VOdW1iZXIsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEJlZ2lucyBhbiBvcGVyYXRpb24gdG8gc3RhcnQgYW4gaW5jcmVtZW50YWwgY29weSBmcm9tIG9uZSBwYWdlIGJsb2IncyBzbmFwc2hvdCB0byB0aGlzIHBhZ2UgYmxvYi5cbiAgICAgKiBUaGUgc25hcHNob3QgaXMgY29waWVkIHN1Y2ggdGhhdCBvbmx5IHRoZSBkaWZmZXJlbnRpYWwgY2hhbmdlcyBiZXR3ZWVuIHRoZSBwcmV2aW91c2x5XG4gICAgICogY29waWVkIHNuYXBzaG90IGFyZSB0cmFuc2ZlcnJlZCB0byB0aGUgZGVzdGluYXRpb24uXG4gICAgICogVGhlIGNvcGllZCBzbmFwc2hvdHMgYXJlIGNvbXBsZXRlIGNvcGllcyBvZiB0aGUgb3JpZ2luYWwgc25hcHNob3QgYW5kIGNhbiBiZSByZWFkIG9yIGNvcGllZCBmcm9tIGFzIHVzdWFsLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2luY3JlbWVudGFsLWNvcHktYmxvYlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvYXp1cmUvdmlydHVhbC1tYWNoaW5lcy93aW5kb3dzL2luY3JlbWVudGFsLXNuYXBzaG90c1xuICAgICAqXG4gICAgICogQHBhcmFtIGNvcHlTb3VyY2UgLSBTcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIHNvdXJjZSBwYWdlIGJsb2Igc25hcHNob3QuIEZvciBleGFtcGxlLFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBzOi8vbXlhY2NvdW50LmJsb2IuY29yZS53aW5kb3dzLm5ldC9teWNvbnRhaW5lci9teWJsb2I/c25hcHNob3Q9PERhdGVUaW1lPlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB0aGUgUGFnZSBCbG9iIENvcHkgSW5jcmVtZW50YWwgb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIFJlc3BvbnNlIGRhdGEgZm9yIHRoZSBQYWdlIEJsb2IgQ29weSBJbmNyZW1lbnRhbCBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgc3RhcnRDb3B5SW5jcmVtZW50YWwoY29weVNvdXJjZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiUGFnZUJsb2JDbGllbnQtc3RhcnRDb3B5SW5jcmVtZW50YWxcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5wYWdlQmxvYkNvbnRleHQuY29weUluY3JlbWVudGFsKGNvcHlTb3VyY2UsIHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuYXN5bmMgZnVuY3Rpb24gZ2V0Qm9keUFzVGV4dChiYXRjaFJlc3BvbnNlKSB7XG4gICAgbGV0IGJ1ZmZlciA9IEJ1ZmZlci5hbGxvYyhCQVRDSF9NQVhfUEFZTE9BRF9JTl9CWVRFUyk7XG4gICAgY29uc3QgcmVzcG9uc2VMZW5ndGggPSBhd2FpdCBzdHJlYW1Ub0J1ZmZlcjIoYmF0Y2hSZXNwb25zZS5yZWFkYWJsZVN0cmVhbUJvZHksIGJ1ZmZlcik7XG4gICAgLy8gU2xpY2UgdGhlIGJ1ZmZlciB0byB0cmltIHRoZSBlbXB0eSBlbmRpbmcuXG4gICAgYnVmZmVyID0gYnVmZmVyLnNsaWNlKDAsIHJlc3BvbnNlTGVuZ3RoKTtcbiAgICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7XG59XG5mdW5jdGlvbiB1dGY4Qnl0ZUxlbmd0aChzdHIpIHtcbiAgICByZXR1cm4gQnVmZmVyLmJ5dGVMZW5ndGgoc3RyKTtcbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5jb25zdCBIVFRQX0hFQURFUl9ERUxJTUlURVIgPSBcIjogXCI7XG5jb25zdCBTUEFDRV9ERUxJTUlURVIgPSBcIiBcIjtcbmNvbnN0IE5PVF9GT1VORCA9IC0xO1xuLyoqXG4gKiBVdGlsIGNsYXNzIGZvciBwYXJzaW5nIGJhdGNoIHJlc3BvbnNlLlxuICovXG5jbGFzcyBCYXRjaFJlc3BvbnNlUGFyc2VyIHtcbiAgICBjb25zdHJ1Y3RvcihiYXRjaFJlc3BvbnNlLCBzdWJSZXF1ZXN0cykge1xuICAgICAgICBpZiAoIWJhdGNoUmVzcG9uc2UgfHwgIWJhdGNoUmVzcG9uc2UuY29udGVudFR5cGUpIHtcbiAgICAgICAgICAgIC8vIEluIHNwZWNpYWwgY2FzZShyZXBvcnRlZCksIHNlcnZlciBtYXkgcmV0dXJuIGludmFsaWQgY29udGVudC10eXBlIHdoaWNoIGNvdWxkIG5vdCBiZSBwYXJzZWQuXG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcImJhdGNoUmVzcG9uc2UgaXMgbWFsZm9ybWVkIG9yIGRvZXNuJ3QgY29udGFpbiB2YWxpZCBjb250ZW50LXR5cGUuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghc3ViUmVxdWVzdHMgfHwgc3ViUmVxdWVzdHMuc2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgYmUgcHJldmVudCBkdXJpbmcgY29kaW5nLlxuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBzdWJSZXF1ZXN0cyBpcyBub3QgcHJvdmlkZWQgb3Igc2l6ZSBpcyAwLlwiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJhdGNoUmVzcG9uc2UgPSBiYXRjaFJlc3BvbnNlO1xuICAgICAgICB0aGlzLnN1YlJlcXVlc3RzID0gc3ViUmVxdWVzdHM7XG4gICAgICAgIHRoaXMucmVzcG9uc2VCYXRjaEJvdW5kYXJ5ID0gdGhpcy5iYXRjaFJlc3BvbnNlLmNvbnRlbnRUeXBlLnNwbGl0KFwiPVwiKVsxXTtcbiAgICAgICAgdGhpcy5wZXJSZXNwb25zZVByZWZpeCA9IGAtLSR7dGhpcy5yZXNwb25zZUJhdGNoQm91bmRhcnl9JHtIVFRQX0xJTkVfRU5ESU5HfWA7XG4gICAgICAgIHRoaXMuYmF0Y2hSZXNwb25zZUVuZGluZyA9IGAtLSR7dGhpcy5yZXNwb25zZUJhdGNoQm91bmRhcnl9LS1gO1xuICAgIH1cbiAgICAvLyBGb3IgZXhhbXBsZSBvZiByZXNwb25zZSwgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9ibG9iLWJhdGNoI3Jlc3BvbnNlXG4gICAgYXN5bmMgcGFyc2VCYXRjaFJlc3BvbnNlKCkge1xuICAgICAgICAvLyBXaGVuIGxvZ2ljIHJlYWNoIGhlcmUsIHN1cHBvc2UgYmF0Y2ggcmVxdWVzdCBoYXMgYWxyZWFkeSBzdWNjZWVkZWQgd2l0aCAyMDIsIHNvIHdlIGNhbiBmdXJ0aGVyIHBhcnNlXG4gICAgICAgIC8vIHN1YiByZXF1ZXN0J3MgcmVzcG9uc2UuXG4gICAgICAgIGlmICh0aGlzLmJhdGNoUmVzcG9uc2UuX3Jlc3BvbnNlLnN0YXR1cyAhPT0gSFRUUFVSTENvbm5lY3Rpb24uSFRUUF9BQ0NFUFRFRCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHN0YXRlOiBiYXRjaCByZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1czogJyR7dGhpcy5iYXRjaFJlc3BvbnNlLl9yZXNwb25zZS5zdGF0dXN9Jy5gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXNwb25zZUJvZHlBc1RleHQgPSBhd2FpdCBnZXRCb2R5QXNUZXh0KHRoaXMuYmF0Y2hSZXNwb25zZSk7XG4gICAgICAgIGNvbnN0IHN1YlJlc3BvbnNlcyA9IHJlc3BvbnNlQm9keUFzVGV4dFxuICAgICAgICAgICAgLnNwbGl0KHRoaXMuYmF0Y2hSZXNwb25zZUVuZGluZylbMF0gLy8gc3RyaW5nIGFmdGVyIGVuZGluZyBpcyB1c2VsZXNzXG4gICAgICAgICAgICAuc3BsaXQodGhpcy5wZXJSZXNwb25zZVByZWZpeClcbiAgICAgICAgICAgIC5zbGljZSgxKTsgLy8gc3RyaW5nIGJlZm9yZSBmaXJzdCByZXNwb25zZSBib3VuZGFyeSBpcyB1c2VsZXNzXG4gICAgICAgIGNvbnN0IHN1YlJlc3BvbnNlQ291bnQgPSBzdWJSZXNwb25zZXMubGVuZ3RoO1xuICAgICAgICAvLyBEZWZlbnNpdmUgY29kaW5nIGluIGNhc2Ugb2YgcG90ZW50aWFsIGVycm9yIHBhcnNpbmcuXG4gICAgICAgIC8vIE5vdGU6IHN1YlJlc3BvbnNlQ291bnQgPT0gMSBpcyBzcGVjaWFsIGNhc2Ugd2hlcmUgc3ViIHJlcXVlc3QgaXMgaW52YWxpZC5cbiAgICAgICAgLy8gV2UgdHJ5IHRvIHByZXZlbnQgc3VjaCBjYXNlcyB0aHJvdWdoIGVhcmx5IHZhbGlkYXRpb24sIGUuZy4gdmFsaWRhdGUgc3ViIHJlcXVlc3QgY291bnQgPj0gMS5cbiAgICAgICAgLy8gV2hpbGUgaW4gdW5leHBlY3RlZCBzdWIgcmVxdWVzdCBpbnZhbGlkIGNhc2UsIHdlIGFsbG93IHN1YiByZXNwb25zZSB0byBiZSBwYXJzZWQgYW5kIHJldHVybiB0byB1c2VyLlxuICAgICAgICBpZiAoc3ViUmVzcG9uc2VDb3VudCAhPT0gdGhpcy5zdWJSZXF1ZXN0cy5zaXplICYmIHN1YlJlc3BvbnNlQ291bnQgIT09IDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGU6IHN1YiByZXNwb25zZXMnIGNvdW50IGlzIG5vdCBlcXVhbCB0byBzdWIgcmVxdWVzdHMnIGNvdW50LlwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkZXNlcmlhbGl6ZWRTdWJSZXNwb25zZXMgPSBuZXcgQXJyYXkoc3ViUmVzcG9uc2VDb3VudCk7XG4gICAgICAgIGxldCBzdWJSZXNwb25zZXNTdWNjZWVkZWRDb3VudCA9IDA7XG4gICAgICAgIGxldCBzdWJSZXNwb25zZXNGYWlsZWRDb3VudCA9IDA7XG4gICAgICAgIC8vIFBhcnNlIHN1YiBzdWJSZXNwb25zZXMuXG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBzdWJSZXNwb25zZUNvdW50OyBpbmRleCsrKSB7XG4gICAgICAgICAgICBjb25zdCBzdWJSZXNwb25zZSA9IHN1YlJlc3BvbnNlc1tpbmRleF07XG4gICAgICAgICAgICBjb25zdCBkZXNlcmlhbGl6ZWRTdWJSZXNwb25zZSA9IHt9O1xuICAgICAgICAgICAgZGVzZXJpYWxpemVkU3ViUmVzcG9uc2UuaGVhZGVycyA9IGNvcmVIdHRwQ29tcGF0LnRvSHR0cEhlYWRlcnNMaWtlKGNvcmVSZXN0UGlwZWxpbmUuY3JlYXRlSHR0cEhlYWRlcnMoKSk7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZUxpbmVzID0gc3ViUmVzcG9uc2Uuc3BsaXQoYCR7SFRUUF9MSU5FX0VORElOR31gKTtcbiAgICAgICAgICAgIGxldCBzdWJSZXNwSGVhZGVyU3RhcnRGb3VuZCA9IGZhbHNlO1xuICAgICAgICAgICAgbGV0IHN1YlJlc3BIZWFkZXJFbmRGb3VuZCA9IGZhbHNlO1xuICAgICAgICAgICAgbGV0IHN1YlJlc3BGYWlsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGxldCBjb250ZW50SWQgPSBOT1RfRk9VTkQ7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJlc3BvbnNlTGluZSBvZiByZXNwb25zZUxpbmVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFzdWJSZXNwSGVhZGVyU3RhcnRGb3VuZCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBDb252ZW50aW9uIGxpbmUgdG8gaW5kaWNhdGUgY29udGVudCBJRFxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2VMaW5lLnN0YXJ0c1dpdGgoSGVhZGVyQ29uc3RhbnRzLkNPTlRFTlRfSUQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50SWQgPSBwYXJzZUludChyZXNwb25zZUxpbmUuc3BsaXQoSFRUUF9IRUFERVJfREVMSU1JVEVSKVsxXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gSHR0cCB2ZXJzaW9uIGxpbmUgd2l0aCBzdGF0dXMgY29kZSBpbmRpY2F0ZXMgdGhlIHN0YXJ0IG9mIHN1YiByZXF1ZXN0J3MgcmVzcG9uc2UuXG4gICAgICAgICAgICAgICAgICAgIC8vIEV4YW1wbGU6IEhUVFAvMS4xIDIwMiBBY2NlcHRlZFxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2VMaW5lLnN0YXJ0c1dpdGgoSFRUUF9WRVJTSU9OXzFfMSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YlJlc3BIZWFkZXJTdGFydEZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRva2VucyA9IHJlc3BvbnNlTGluZS5zcGxpdChTUEFDRV9ERUxJTUlURVIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVzZXJpYWxpemVkU3ViUmVzcG9uc2Uuc3RhdHVzID0gcGFyc2VJbnQodG9rZW5zWzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2VyaWFsaXplZFN1YlJlc3BvbnNlLnN0YXR1c01lc3NhZ2UgPSB0b2tlbnMuc2xpY2UoMikuam9pbihTUEFDRV9ERUxJTUlURVIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBTa2lwIGNvbnZlbnRpb24gaGVhZGVycyBub3Qgc3BlY2lmaWNhbGx5IGZvciBzdWIgcmVxdWVzdCBpLmUuIENvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vaHR0cCBhbmQgQ29udGVudC1JRDogKlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2VMaW5lLnRyaW0oKSA9PT0gXCJcIikge1xuICAgICAgICAgICAgICAgICAgICAvLyBTdWIgcmVzcG9uc2UncyBoZWFkZXIgc3RhcnQgbGluZSBhbHJlYWR5IGZvdW5kLCBhbmQgdGhlIGZpcnN0IGVtcHR5IGxpbmUgaW5kaWNhdGVzIGhlYWRlciBlbmQgbGluZSBmb3VuZC5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzdWJSZXNwSGVhZGVyRW5kRm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YlJlc3BIZWFkZXJFbmRGb3VuZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7IC8vIFNraXAgZW1wdHkgbGluZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBOb3RlOiB3aGVuIGNvZGUgcmVhY2ggaGVyZSwgaXQgaW5kaWNhdGVzIHN1YlJlc3BIZWFkZXJTdGFydEZvdW5kID09IHRydWVcbiAgICAgICAgICAgICAgICBpZiAoIXN1YlJlc3BIZWFkZXJFbmRGb3VuZCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2VMaW5lLmluZGV4T2YoSFRUUF9IRUFERVJfREVMSU1JVEVSKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlZmVuc2l2ZSBjb2RpbmcgdG8gcHJldmVudCBmcm9tIG1pc3NpbmcgdmFsdWFibGUgbGluZXMuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgc3RhdGU6IGZpbmQgbm9uLWVtcHR5IGxpbmUgJyR7cmVzcG9uc2VMaW5lfScgd2l0aG91dCBIVFRQIGhlYWRlciBkZWxpbWl0ZXIgJyR7SFRUUF9IRUFERVJfREVMSU1JVEVSfScuYCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gUGFyc2UgaGVhZGVycyBvZiBzdWIgcmVzcG9uc2UuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRva2VucyA9IHJlc3BvbnNlTGluZS5zcGxpdChIVFRQX0hFQURFUl9ERUxJTUlURVIpO1xuICAgICAgICAgICAgICAgICAgICBkZXNlcmlhbGl6ZWRTdWJSZXNwb25zZS5oZWFkZXJzLnNldCh0b2tlbnNbMF0sIHRva2Vuc1sxXSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbnNbMF0gPT09IEhlYWRlckNvbnN0YW50cy5YX01TX0VSUk9SX0NPREUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2VyaWFsaXplZFN1YlJlc3BvbnNlLmVycm9yQ29kZSA9IHRva2Vuc1sxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YlJlc3BGYWlsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBBc3NlbWJsZSBib2R5IG9mIHN1YiByZXNwb25zZS5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFkZXNlcmlhbGl6ZWRTdWJSZXNwb25zZS5ib2R5QXNUZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNlcmlhbGl6ZWRTdWJSZXNwb25zZS5ib2R5QXNUZXh0ID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBkZXNlcmlhbGl6ZWRTdWJSZXNwb25zZS5ib2R5QXNUZXh0ICs9IHJlc3BvbnNlTGluZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IC8vIElubmVyIGZvciBlbmRcbiAgICAgICAgICAgIC8vIFRoZSByZXNwb25zZSB3aWxsIGNvbnRhaW4gdGhlIENvbnRlbnQtSUQgaGVhZGVyIGZvciBlYWNoIGNvcnJlc3BvbmRpbmcgc3VicmVxdWVzdCByZXNwb25zZSB0byB1c2UgZm9yIHRyYWNraW5nLlxuICAgICAgICAgICAgLy8gVGhlIENvbnRlbnQtSURzIGFyZSBzZXQgdG8gYSB2YWxpZCBpbmRleCBpbiB0aGUgc3VicmVxdWVzdHMgd2Ugc2VudC4gSW4gdGhlIHN0YXR1cyBjb2RlIDIwMiBwYXRoLCB3ZSBjb3VsZCBleHBlY3QgaXRcbiAgICAgICAgICAgIC8vIHRvIGJlIDEtMSBtYXBwaW5nIGZyb20gdGhlIFswLCBzdWJSZXF1ZXN0cy5zaXplKSB0byB0aGUgQ29udGVudC1JRHMgcmV0dXJuZWQuIElmIG5vdCwgd2Ugc2ltcGx5IGRvbid0IHJldHVybiB0aGF0XG4gICAgICAgICAgICAvLyB1bmV4cGVjdGVkIHN1YlJlc3BvbnNlIGluIHRoZSBwYXJzZWQgcmVwb25zZSBhbmQgd2UgY2FuIGFsd2F5cyBsb29rIGl0IHVwIGluIHRoZSByYXcgcmVzcG9uc2UgZm9yIGRlYnVnZ2luZyBwdXJwb3NlLlxuICAgICAgICAgICAgaWYgKGNvbnRlbnRJZCAhPT0gTk9UX0ZPVU5EICYmXG4gICAgICAgICAgICAgICAgTnVtYmVyLmlzSW50ZWdlcihjb250ZW50SWQpICYmXG4gICAgICAgICAgICAgICAgY29udGVudElkID49IDAgJiZcbiAgICAgICAgICAgICAgICBjb250ZW50SWQgPCB0aGlzLnN1YlJlcXVlc3RzLnNpemUgJiZcbiAgICAgICAgICAgICAgICBkZXNlcmlhbGl6ZWRTdWJSZXNwb25zZXNbY29udGVudElkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZGVzZXJpYWxpemVkU3ViUmVzcG9uc2UuX3JlcXVlc3QgPSB0aGlzLnN1YlJlcXVlc3RzLmdldChjb250ZW50SWQpO1xuICAgICAgICAgICAgICAgIGRlc2VyaWFsaXplZFN1YlJlc3BvbnNlc1tjb250ZW50SWRdID0gZGVzZXJpYWxpemVkU3ViUmVzcG9uc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoYHN1YlJlc3BvbnNlc1ske2luZGV4fV0gaXMgZHJvcHBlZCBhcyB0aGUgQ29udGVudC1JRCBpcyBub3QgZm91bmQgb3IgaW52YWxpZCwgQ29udGVudC1JRDogJHtjb250ZW50SWR9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3ViUmVzcEZhaWxlZCkge1xuICAgICAgICAgICAgICAgIHN1YlJlc3BvbnNlc0ZhaWxlZENvdW50Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdWJSZXNwb25zZXNTdWNjZWVkZWRDb3VudCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWJSZXNwb25zZXM6IGRlc2VyaWFsaXplZFN1YlJlc3BvbnNlcyxcbiAgICAgICAgICAgIHN1YlJlc3BvbnNlc1N1Y2NlZWRlZENvdW50OiBzdWJSZXNwb25zZXNTdWNjZWVkZWRDb3VudCxcbiAgICAgICAgICAgIHN1YlJlc3BvbnNlc0ZhaWxlZENvdW50OiBzdWJSZXNwb25zZXNGYWlsZWRDb3VudCxcbiAgICAgICAgfTtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxudmFyIE11dGV4TG9ja1N0YXR1cztcbihmdW5jdGlvbiAoTXV0ZXhMb2NrU3RhdHVzKSB7XG4gICAgTXV0ZXhMb2NrU3RhdHVzW011dGV4TG9ja1N0YXR1c1tcIkxPQ0tFRFwiXSA9IDBdID0gXCJMT0NLRURcIjtcbiAgICBNdXRleExvY2tTdGF0dXNbTXV0ZXhMb2NrU3RhdHVzW1wiVU5MT0NLRURcIl0gPSAxXSA9IFwiVU5MT0NLRURcIjtcbn0pKE11dGV4TG9ja1N0YXR1cyB8fCAoTXV0ZXhMb2NrU3RhdHVzID0ge30pKTtcbi8qKlxuICogQW4gYXN5bmMgbXV0ZXggbG9jay5cbiAqL1xuY2xhc3MgTXV0ZXgge1xuICAgIC8qKlxuICAgICAqIExvY2sgZm9yIGEgc3BlY2lmaWMga2V5LiBJZiB0aGUgbG9jayBoYXMgYmVlbiBhY3F1aXJlZCBieSBhbm90aGVyIGN1c3RvbWVyLCB0aGVuXG4gICAgICogd2lsbCB3YWl0IHVudGlsIGdldHRpbmcgdGhlIGxvY2suXG4gICAgICpcbiAgICAgKiBAcGFyYW0ga2V5IC0gbG9jayBrZXlcbiAgICAgKi9cbiAgICBzdGF0aWMgYXN5bmMgbG9jayhrZXkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5rZXlzW2tleV0gPT09IHVuZGVmaW5lZCB8fCB0aGlzLmtleXNba2V5XSA9PT0gTXV0ZXhMb2NrU3RhdHVzLlVOTE9DS0VEKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5rZXlzW2tleV0gPSBNdXRleExvY2tTdGF0dXMuTE9DS0VEO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMub25VbmxvY2tFdmVudChrZXksICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5rZXlzW2tleV0gPSBNdXRleExvY2tTdGF0dXMuTE9DS0VEO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBVbmxvY2sgYSBrZXkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ga2V5IC1cbiAgICAgKi9cbiAgICBzdGF0aWMgYXN5bmMgdW5sb2NrKGtleSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmtleXNba2V5XSA9PT0gTXV0ZXhMb2NrU3RhdHVzLkxPQ0tFRCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdFVubG9ja0V2ZW50KGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5rZXlzW2tleV07XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBzdGF0aWMgb25VbmxvY2tFdmVudChrZXksIGhhbmRsZXIpIHtcbiAgICAgICAgaWYgKHRoaXMubGlzdGVuZXJzW2tleV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5saXN0ZW5lcnNba2V5XSA9IFtoYW5kbGVyXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzW2tleV0ucHVzaChoYW5kbGVyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgZW1pdFVubG9ja0V2ZW50KGtleSkge1xuICAgICAgICBpZiAodGhpcy5saXN0ZW5lcnNba2V5XSAhPT0gdW5kZWZpbmVkICYmIHRoaXMubGlzdGVuZXJzW2tleV0ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlciA9IHRoaXMubGlzdGVuZXJzW2tleV0uc2hpZnQoKTtcbiAgICAgICAgICAgIHNldEltbWVkaWF0ZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaGFuZGxlci5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5NdXRleC5rZXlzID0ge307XG5NdXRleC5saXN0ZW5lcnMgPSB7fTtcblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIEEgQmxvYkJhdGNoIHJlcHJlc2VudHMgYW4gYWdncmVnYXRlZCBzZXQgb2Ygb3BlcmF0aW9ucyBvbiBibG9icy5cbiAqIEN1cnJlbnRseSwgb25seSBgZGVsZXRlYCBhbmQgYHNldEFjY2Vzc1RpZXJgIGFyZSBzdXBwb3J0ZWQuXG4gKi9cbmNsYXNzIEJsb2JCYXRjaCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuYmF0Y2ggPSBcImJhdGNoXCI7XG4gICAgICAgIHRoaXMuYmF0Y2hSZXF1ZXN0ID0gbmV3IElubmVyQmF0Y2hSZXF1ZXN0KCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgdmFsdWUgb2YgQ29udGVudC1UeXBlIGZvciBhIGJhdGNoIHJlcXVlc3QuXG4gICAgICogVGhlIHZhbHVlIG11c3QgYmUgbXVsdGlwYXJ0L21peGVkIHdpdGggYSBiYXRjaCBib3VuZGFyeS5cbiAgICAgKiBFeGFtcGxlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PWJhdGNoX2E4MTc4NmM4LWUzMDEtNGU0Mi1hNzI5LWEzMmNhMjRhZTI1MlxuICAgICAqL1xuICAgIGdldE11bHRpUGFydENvbnRlbnRUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5iYXRjaFJlcXVlc3QuZ2V0TXVsdGlwYXJ0Q29udGVudFR5cGUoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IGFzc2VtYmxlZCBIVFRQIHJlcXVlc3QgYm9keSBmb3Igc3ViIHJlcXVlc3RzLlxuICAgICAqL1xuICAgIGdldEh0dHBSZXF1ZXN0Qm9keSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmF0Y2hSZXF1ZXN0LmdldEh0dHBSZXF1ZXN0Qm9keSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgc3ViIHJlcXVlc3RzIHRoYXQgYXJlIGFkZGVkIGludG8gdGhlIGJhdGNoIHJlcXVlc3QuXG4gICAgICovXG4gICAgZ2V0U3ViUmVxdWVzdHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhdGNoUmVxdWVzdC5nZXRTdWJSZXF1ZXN0cygpO1xuICAgIH1cbiAgICBhc3luYyBhZGRTdWJSZXF1ZXN0SW50ZXJuYWwoc3ViUmVxdWVzdCwgYXNzZW1ibGVTdWJSZXF1ZXN0RnVuYykge1xuICAgICAgICBhd2FpdCBNdXRleC5sb2NrKHRoaXMuYmF0Y2gpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5iYXRjaFJlcXVlc3QucHJlQWRkU3ViUmVxdWVzdChzdWJSZXF1ZXN0KTtcbiAgICAgICAgICAgIGF3YWl0IGFzc2VtYmxlU3ViUmVxdWVzdEZ1bmMoKTtcbiAgICAgICAgICAgIHRoaXMuYmF0Y2hSZXF1ZXN0LnBvc3RBZGRTdWJSZXF1ZXN0KHN1YlJlcXVlc3QpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgYXdhaXQgTXV0ZXgudW5sb2NrKHRoaXMuYmF0Y2gpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNldEJhdGNoVHlwZShiYXRjaFR5cGUpIHtcbiAgICAgICAgaWYgKCF0aGlzLmJhdGNoVHlwZSkge1xuICAgICAgICAgICAgdGhpcy5iYXRjaFR5cGUgPSBiYXRjaFR5cGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuYmF0Y2hUeXBlICE9PSBiYXRjaFR5cGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBCbG9iQmF0Y2ggb25seSBzdXBwb3J0cyBvbmUgb3BlcmF0aW9uIHR5cGUgcGVyIGJhdGNoIGFuZCBpdCBhbHJlYWR5IGlzIGJlaW5nIHVzZWQgZm9yICR7dGhpcy5iYXRjaFR5cGV9IG9wZXJhdGlvbnMuYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgZGVsZXRlQmxvYih1cmxPckJsb2JDbGllbnQsIGNyZWRlbnRpYWxPck9wdGlvbnMsIG9wdGlvbnMpIHtcbiAgICAgICAgbGV0IHVybDtcbiAgICAgICAgbGV0IGNyZWRlbnRpYWw7XG4gICAgICAgIGlmICh0eXBlb2YgdXJsT3JCbG9iQ2xpZW50ID09PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICAoKGNvcmVVdGlsLmlzTm9kZSAmJiBjcmVkZW50aWFsT3JPcHRpb25zIGluc3RhbmNlb2YgU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwpIHx8XG4gICAgICAgICAgICAgICAgY3JlZGVudGlhbE9yT3B0aW9ucyBpbnN0YW5jZW9mIEFub255bW91c0NyZWRlbnRpYWwgfHxcbiAgICAgICAgICAgICAgICBjb3JlQXV0aC5pc1Rva2VuQ3JlZGVudGlhbChjcmVkZW50aWFsT3JPcHRpb25zKSkpIHtcbiAgICAgICAgICAgIC8vIEZpcnN0IG92ZXJsb2FkXG4gICAgICAgICAgICB1cmwgPSB1cmxPckJsb2JDbGllbnQ7XG4gICAgICAgICAgICBjcmVkZW50aWFsID0gY3JlZGVudGlhbE9yT3B0aW9ucztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1cmxPckJsb2JDbGllbnQgaW5zdGFuY2VvZiBCbG9iQ2xpZW50KSB7XG4gICAgICAgICAgICAvLyBTZWNvbmQgb3ZlcmxvYWRcbiAgICAgICAgICAgIHVybCA9IHVybE9yQmxvYkNsaWVudC51cmw7XG4gICAgICAgICAgICBjcmVkZW50aWFsID0gdXJsT3JCbG9iQ2xpZW50LmNyZWRlbnRpYWw7XG4gICAgICAgICAgICBvcHRpb25zID0gY3JlZGVudGlhbE9yT3B0aW9ucztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiSW52YWxpZCBhcmd1bWVudHMuIEVpdGhlciB1cmwgYW5kIGNyZWRlbnRpYWwsIG9yIEJsb2JDbGllbnQgbmVlZCBiZSBwcm92aWRlZC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICAgICAgICBvcHRpb25zID0ge307XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCYXRjaERlbGV0ZVJlcXVlc3QtYWRkU3ViUmVxdWVzdFwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0QmF0Y2hUeXBlKFwiZGVsZXRlXCIpO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5hZGRTdWJSZXF1ZXN0SW50ZXJuYWwoe1xuICAgICAgICAgICAgICAgIHVybDogdXJsLFxuICAgICAgICAgICAgICAgIGNyZWRlbnRpYWw6IGNyZWRlbnRpYWwsXG4gICAgICAgICAgICB9LCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgYXdhaXQgbmV3IEJsb2JDbGllbnQodXJsLCB0aGlzLmJhdGNoUmVxdWVzdC5jcmVhdGVQaXBlbGluZShjcmVkZW50aWFsKSkuZGVsZXRlKHVwZGF0ZWRPcHRpb25zKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMgc2V0QmxvYkFjY2Vzc1RpZXIodXJsT3JCbG9iQ2xpZW50LCBjcmVkZW50aWFsT3JUaWVyLCB0aWVyT3JPcHRpb25zLCBvcHRpb25zKSB7XG4gICAgICAgIGxldCB1cmw7XG4gICAgICAgIGxldCBjcmVkZW50aWFsO1xuICAgICAgICBsZXQgdGllcjtcbiAgICAgICAgaWYgKHR5cGVvZiB1cmxPckJsb2JDbGllbnQgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICAgICgoY29yZVV0aWwuaXNOb2RlICYmIGNyZWRlbnRpYWxPclRpZXIgaW5zdGFuY2VvZiBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbCkgfHxcbiAgICAgICAgICAgICAgICBjcmVkZW50aWFsT3JUaWVyIGluc3RhbmNlb2YgQW5vbnltb3VzQ3JlZGVudGlhbCB8fFxuICAgICAgICAgICAgICAgIGNvcmVBdXRoLmlzVG9rZW5DcmVkZW50aWFsKGNyZWRlbnRpYWxPclRpZXIpKSkge1xuICAgICAgICAgICAgLy8gRmlyc3Qgb3ZlcmxvYWRcbiAgICAgICAgICAgIHVybCA9IHVybE9yQmxvYkNsaWVudDtcbiAgICAgICAgICAgIGNyZWRlbnRpYWwgPSBjcmVkZW50aWFsT3JUaWVyO1xuICAgICAgICAgICAgdGllciA9IHRpZXJPck9wdGlvbnM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodXJsT3JCbG9iQ2xpZW50IGluc3RhbmNlb2YgQmxvYkNsaWVudCkge1xuICAgICAgICAgICAgLy8gU2Vjb25kIG92ZXJsb2FkXG4gICAgICAgICAgICB1cmwgPSB1cmxPckJsb2JDbGllbnQudXJsO1xuICAgICAgICAgICAgY3JlZGVudGlhbCA9IHVybE9yQmxvYkNsaWVudC5jcmVkZW50aWFsO1xuICAgICAgICAgICAgdGllciA9IGNyZWRlbnRpYWxPclRpZXI7XG4gICAgICAgICAgICBvcHRpb25zID0gdGllck9yT3B0aW9ucztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiSW52YWxpZCBhcmd1bWVudHMuIEVpdGhlciB1cmwgYW5kIGNyZWRlbnRpYWwsIG9yIEJsb2JDbGllbnQgbmVlZCBiZSBwcm92aWRlZC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICAgICAgICBvcHRpb25zID0ge307XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCYXRjaFNldFRpZXJSZXF1ZXN0LWFkZFN1YlJlcXVlc3RcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldEJhdGNoVHlwZShcInNldEFjY2Vzc1RpZXJcIik7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmFkZFN1YlJlcXVlc3RJbnRlcm5hbCh7XG4gICAgICAgICAgICAgICAgdXJsOiB1cmwsXG4gICAgICAgICAgICAgICAgY3JlZGVudGlhbDogY3JlZGVudGlhbCxcbiAgICAgICAgICAgIH0sIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICBhd2FpdCBuZXcgQmxvYkNsaWVudCh1cmwsIHRoaXMuYmF0Y2hSZXF1ZXN0LmNyZWF0ZVBpcGVsaW5lKGNyZWRlbnRpYWwpKS5zZXRBY2Nlc3NUaWVyKHRpZXIsIHVwZGF0ZWRPcHRpb25zKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4vKipcbiAqIElubmVyIGJhdGNoIHJlcXVlc3QgY2xhc3Mgd2hpY2ggaXMgcmVzcG9uc2libGUgZm9yIGFzc2VtYmxpbmcgYW5kIHNlcmlhbGl6aW5nIHN1YiByZXF1ZXN0cy5cbiAqIFNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvYmxvYi1iYXRjaCNyZXF1ZXN0LWJvZHkgZm9yIGhvdyByZXF1ZXN0cyBhcmUgYXNzZW1ibGVkLlxuICovXG5jbGFzcyBJbm5lckJhdGNoUmVxdWVzdCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMub3BlcmF0aW9uQ291bnQgPSAwO1xuICAgICAgICB0aGlzLmJvZHkgPSBcIlwiO1xuICAgICAgICBjb25zdCB0ZW1wR3VpZCA9IGNvcmVVdGlsLnJhbmRvbVVVSUQoKTtcbiAgICAgICAgLy8gYmF0Y2hfe2JhdGNoaWR9XG4gICAgICAgIHRoaXMuYm91bmRhcnkgPSBgYmF0Y2hfJHt0ZW1wR3VpZH1gO1xuICAgICAgICAvLyAtLWJhdGNoX3tiYXRjaGlkfVxuICAgICAgICAvLyBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2h0dHBcbiAgICAgICAgLy8gQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmluYXJ5XG4gICAgICAgIHRoaXMuc3ViUmVxdWVzdFByZWZpeCA9IGAtLSR7dGhpcy5ib3VuZGFyeX0ke0hUVFBfTElORV9FTkRJTkd9JHtIZWFkZXJDb25zdGFudHMuQ09OVEVOVF9UWVBFfTogYXBwbGljYXRpb24vaHR0cCR7SFRUUF9MSU5FX0VORElOR30ke0hlYWRlckNvbnN0YW50cy5DT05URU5UX1RSQU5TRkVSX0VOQ09ESU5HfTogYmluYXJ5YDtcbiAgICAgICAgLy8gbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT1iYXRjaF97YmF0Y2hpZH1cbiAgICAgICAgdGhpcy5tdWx0aXBhcnRDb250ZW50VHlwZSA9IGBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSR7dGhpcy5ib3VuZGFyeX1gO1xuICAgICAgICAvLyAtLWJhdGNoX3tiYXRjaGlkfS0tXG4gICAgICAgIHRoaXMuYmF0Y2hSZXF1ZXN0RW5kaW5nID0gYC0tJHt0aGlzLmJvdW5kYXJ5fS0tYDtcbiAgICAgICAgdGhpcy5zdWJSZXF1ZXN0cyA9IG5ldyBNYXAoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIHBpcGVsaW5lIHRvIGFzc2VtYmxlIHN1YiByZXF1ZXN0cy4gVGhlIGlkZWEgaGVyZSBpcyB0byB1c2UgZXhpc3RpbmdcbiAgICAgKiBjcmVkZW50aWFsIGFuZCBzZXJpYWxpemF0aW9uL2Rlc2VyaWFsaXphdGlvbiBjb21wb25lbnRzLCB3aXRoIGFkZGl0aW9uYWwgcG9saWNpZXMgdG9cbiAgICAgKiBmaWx0ZXIgdW5uZWNlc3NhcnkgaGVhZGVycywgYXNzZW1ibGUgc3ViIHJlcXVlc3RzIGludG8gcmVxdWVzdCdzIGJvZHlcbiAgICAgKiBhbmQgaW50ZXJjZXB0IHJlcXVlc3QgZnJvbSBnb2luZyB0byB3aXJlLlxuICAgICAqIEBwYXJhbSBjcmVkZW50aWFsIC0gIFN1Y2ggYXMgQW5vbnltb3VzQ3JlZGVudGlhbCwgU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwgb3IgYW55IGNyZWRlbnRpYWwgZnJvbSB0aGUgYEBhenVyZS9pZGVudGl0eWAgcGFja2FnZSB0byBhdXRoZW50aWNhdGUgcmVxdWVzdHMgdG8gdGhlIHNlcnZpY2UuIFlvdSBjYW4gYWxzbyBwcm92aWRlIGFuIG9iamVjdCB0aGF0IGltcGxlbWVudHMgdGhlIFRva2VuQ3JlZGVudGlhbCBpbnRlcmZhY2UuIElmIG5vdCBzcGVjaWZpZWQsIEFub255bW91c0NyZWRlbnRpYWwgaXMgdXNlZC5cbiAgICAgKi9cbiAgICBjcmVhdGVQaXBlbGluZShjcmVkZW50aWFsKSB7XG4gICAgICAgIGNvbnN0IGNvcmVQaXBlbGluZSA9IGNvcmVSZXN0UGlwZWxpbmUuY3JlYXRlRW1wdHlQaXBlbGluZSgpO1xuICAgICAgICBjb3JlUGlwZWxpbmUuYWRkUG9saWN5KGNvcmVDbGllbnQuc2VyaWFsaXphdGlvblBvbGljeSh7XG4gICAgICAgICAgICBzdHJpbmdpZnlYTUw6IGNvcmVYbWwuc3RyaW5naWZ5WE1MLFxuICAgICAgICAgICAgc2VyaWFsaXplck9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICB4bWw6IHtcbiAgICAgICAgICAgICAgICAgICAgeG1sQ2hhcktleTogXCIjXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pLCB7IHBoYXNlOiBcIlNlcmlhbGl6ZVwiIH0pO1xuICAgICAgICAvLyBVc2UgYmF0Y2ggaGVhZGVyIGZpbHRlciBwb2xpY3kgdG8gZXhjbHVkZSB1bm5lY2Vzc2FyeSBoZWFkZXJzXG4gICAgICAgIGNvcmVQaXBlbGluZS5hZGRQb2xpY3koYmF0Y2hIZWFkZXJGaWx0ZXJQb2xpY3koKSk7XG4gICAgICAgIC8vIFVzZSBiYXRjaCBhc3NlbWJsZSBwb2xpY3kgdG8gYXNzZW1ibGUgcmVxdWVzdCBhbmQgaW50ZXJjZXB0IHJlcXVlc3QgZnJvbSBnb2luZyB0byB3aXJlXG4gICAgICAgIGNvcmVQaXBlbGluZS5hZGRQb2xpY3koYmF0Y2hSZXF1ZXN0QXNzZW1ibGVQb2xpY3kodGhpcyksIHsgYWZ0ZXJQaGFzZTogXCJTaWduXCIgfSk7XG4gICAgICAgIGlmIChjb3JlQXV0aC5pc1Rva2VuQ3JlZGVudGlhbChjcmVkZW50aWFsKSkge1xuICAgICAgICAgICAgY29yZVBpcGVsaW5lLmFkZFBvbGljeShjb3JlUmVzdFBpcGVsaW5lLmJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3koe1xuICAgICAgICAgICAgICAgIGNyZWRlbnRpYWwsXG4gICAgICAgICAgICAgICAgc2NvcGVzOiBTdG9yYWdlT0F1dGhTY29wZXMsXG4gICAgICAgICAgICAgICAgY2hhbGxlbmdlQ2FsbGJhY2tzOiB7IGF1dGhvcml6ZVJlcXVlc3RPbkNoYWxsZW5nZTogY29yZUNsaWVudC5hdXRob3JpemVSZXF1ZXN0T25UZW5hbnRDaGFsbGVuZ2UgfSxcbiAgICAgICAgICAgIH0pLCB7IHBoYXNlOiBcIlNpZ25cIiB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjcmVkZW50aWFsIGluc3RhbmNlb2YgU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwpIHtcbiAgICAgICAgICAgIGNvcmVQaXBlbGluZS5hZGRQb2xpY3koc3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWxQb2xpY3koe1xuICAgICAgICAgICAgICAgIGFjY291bnROYW1lOiBjcmVkZW50aWFsLmFjY291bnROYW1lLFxuICAgICAgICAgICAgICAgIGFjY291bnRLZXk6IGNyZWRlbnRpYWwuYWNjb3VudEtleSxcbiAgICAgICAgICAgIH0pLCB7IHBoYXNlOiBcIlNpZ25cIiB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwaXBlbGluZSA9IG5ldyBQaXBlbGluZShbXSk7XG4gICAgICAgIC8vIGF0dGFjaCB0aGUgdjIgcGlwZWxpbmUgdG8gdGhpcyBvbmVcbiAgICAgICAgcGlwZWxpbmUuX2NyZWRlbnRpYWwgPSBjcmVkZW50aWFsO1xuICAgICAgICBwaXBlbGluZS5fY29yZVBpcGVsaW5lID0gY29yZVBpcGVsaW5lO1xuICAgICAgICByZXR1cm4gcGlwZWxpbmU7XG4gICAgfVxuICAgIGFwcGVuZFN1YlJlcXVlc3RUb0JvZHkocmVxdWVzdCkge1xuICAgICAgICAvLyBTdGFydCB0byBhc3NlbWJsZSBzdWIgcmVxdWVzdFxuICAgICAgICB0aGlzLmJvZHkgKz0gW1xuICAgICAgICAgICAgdGhpcy5zdWJSZXF1ZXN0UHJlZml4LCAvLyBzdWIgcmVxdWVzdCBjb25zdGFudCBwcmVmaXhcbiAgICAgICAgICAgIGAke0hlYWRlckNvbnN0YW50cy5DT05URU5UX0lEfTogJHt0aGlzLm9wZXJhdGlvbkNvdW50fWAsIC8vIHN1YiByZXF1ZXN0J3MgY29udGVudCBJRFxuICAgICAgICAgICAgXCJcIiwgLy8gZW1wdHkgbGluZSBhZnRlciBzdWIgcmVxdWVzdCdzIGNvbnRlbnQgSURcbiAgICAgICAgICAgIGAke3JlcXVlc3QubWV0aG9kLnRvU3RyaW5nKCl9ICR7Z2V0VVJMUGF0aEFuZFF1ZXJ5KHJlcXVlc3QudXJsKX0gJHtIVFRQX1ZFUlNJT05fMV8xfSR7SFRUUF9MSU5FX0VORElOR31gLCAvLyBzdWIgcmVxdWVzdCBzdGFydCBsaW5lIHdpdGggbWV0aG9kXG4gICAgICAgIF0uam9pbihIVFRQX0xJTkVfRU5ESU5HKTtcbiAgICAgICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIHJlcXVlc3QuaGVhZGVycykge1xuICAgICAgICAgICAgdGhpcy5ib2R5ICs9IGAke25hbWV9OiAke3ZhbHVlfSR7SFRUUF9MSU5FX0VORElOR31gO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYm9keSArPSBIVFRQX0xJTkVfRU5ESU5HOyAvLyBzdWIgcmVxdWVzdCdzIGhlYWRlcnMgbmVlZCBiZSBlbmRpbmcgd2l0aCBhbiBlbXB0eSBsaW5lXG4gICAgICAgIC8vIE5vIGJvZHkgdG8gYXNzZW1ibGUgZm9yIGN1cnJlbnQgYmF0Y2ggcmVxdWVzdCBzdXBwb3J0XG4gICAgICAgIC8vIEVuZCB0byBhc3NlbWJsZSBzdWIgcmVxdWVzdFxuICAgIH1cbiAgICBwcmVBZGRTdWJSZXF1ZXN0KHN1YlJlcXVlc3QpIHtcbiAgICAgICAgaWYgKHRoaXMub3BlcmF0aW9uQ291bnQgPj0gQkFUQ0hfTUFYX1JFUVVFU1QpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBDYW5ub3QgZXhjZWVkICR7QkFUQ0hfTUFYX1JFUVVFU1R9IHN1YiByZXF1ZXN0cyBpbiBhIHNpbmdsZSBiYXRjaGApO1xuICAgICAgICB9XG4gICAgICAgIC8vIEZhc3QgZmFpbCBpZiB1cmwgZm9yIHN1YiByZXF1ZXN0IGlzIGludmFsaWRcbiAgICAgICAgY29uc3QgcGF0aCA9IGdldFVSTFBhdGgoc3ViUmVxdWVzdC51cmwpO1xuICAgICAgICBpZiAoIXBhdGggfHwgcGF0aCA9PT0gXCJcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEludmFsaWQgdXJsIGZvciBzdWIgcmVxdWVzdDogJyR7c3ViUmVxdWVzdC51cmx9J2ApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHBvc3RBZGRTdWJSZXF1ZXN0KHN1YlJlcXVlc3QpIHtcbiAgICAgICAgdGhpcy5zdWJSZXF1ZXN0cy5zZXQodGhpcy5vcGVyYXRpb25Db3VudCwgc3ViUmVxdWVzdCk7XG4gICAgICAgIHRoaXMub3BlcmF0aW9uQ291bnQrKztcbiAgICB9XG4gICAgLy8gUmV0dXJuIHRoZSBodHRwIHJlcXVlc3QgYm9keSB3aXRoIGFzc2VtYmxpbmcgdGhlIGVuZGluZyBsaW5lIHRvIHRoZSBzdWIgcmVxdWVzdCBib2R5LlxuICAgIGdldEh0dHBSZXF1ZXN0Qm9keSgpIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuYm9keX0ke3RoaXMuYmF0Y2hSZXF1ZXN0RW5kaW5nfSR7SFRUUF9MSU5FX0VORElOR31gO1xuICAgIH1cbiAgICBnZXRNdWx0aXBhcnRDb250ZW50VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubXVsdGlwYXJ0Q29udGVudFR5cGU7XG4gICAgfVxuICAgIGdldFN1YlJlcXVlc3RzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdWJSZXF1ZXN0cztcbiAgICB9XG59XG5mdW5jdGlvbiBiYXRjaFJlcXVlc3RBc3NlbWJsZVBvbGljeShiYXRjaFJlcXVlc3QpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBcImJhdGNoUmVxdWVzdEFzc2VtYmxlUG9saWN5XCIsXG4gICAgICAgIGFzeW5jIHNlbmRSZXF1ZXN0KHJlcXVlc3QpIHtcbiAgICAgICAgICAgIGJhdGNoUmVxdWVzdC5hcHBlbmRTdWJSZXF1ZXN0VG9Cb2R5KHJlcXVlc3QpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICByZXF1ZXN0LFxuICAgICAgICAgICAgICAgIHN0YXR1czogMjAwLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGNvcmVSZXN0UGlwZWxpbmUuY3JlYXRlSHR0cEhlYWRlcnMoKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGJhdGNoSGVhZGVyRmlsdGVyUG9saWN5KCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IFwiYmF0Y2hIZWFkZXJGaWx0ZXJQb2xpY3lcIixcbiAgICAgICAgYXN5bmMgc2VuZFJlcXVlc3QocmVxdWVzdCwgbmV4dCkge1xuICAgICAgICAgICAgbGV0IHhNc0hlYWRlck5hbWUgPSBcIlwiO1xuICAgICAgICAgICAgZm9yIChjb25zdCBbbmFtZV0gb2YgcmVxdWVzdC5oZWFkZXJzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlFcXVhbChuYW1lLCBIZWFkZXJDb25zdGFudHMuWF9NU19WRVJTSU9OKSkge1xuICAgICAgICAgICAgICAgICAgICB4TXNIZWFkZXJOYW1lID0gbmFtZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoeE1zSGVhZGVyTmFtZSAhPT0gXCJcIikge1xuICAgICAgICAgICAgICAgIHJlcXVlc3QuaGVhZGVycy5kZWxldGUoeE1zSGVhZGVyTmFtZSk7IC8vIFRoZSBzdWJyZXF1ZXN0cyBzaG91bGQgbm90IGhhdmUgdGhlIHgtbXMtdmVyc2lvbiBoZWFkZXIuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV4dChyZXF1ZXN0KTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogQSBCbG9iQmF0Y2hDbGllbnQgYWxsb3dzIHlvdSB0byBtYWtlIGJhdGNoZWQgcmVxdWVzdHMgdG8gdGhlIEF6dXJlIFN0b3JhZ2UgQmxvYiBzZXJ2aWNlLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2Jsb2ItYmF0Y2hcbiAqL1xuY2xhc3MgQmxvYkJhdGNoQ2xpZW50IHtcbiAgICBjb25zdHJ1Y3Rvcih1cmwsIGNyZWRlbnRpYWxPclBpcGVsaW5lLCBcbiAgICAvLyBMZWdhY3ksIG5vIGZpeCBmb3IgZXNsaW50IGVycm9yIHdpdGhvdXQgYnJlYWtpbmcuIERpc2FibGUgaXQgZm9yIHRoaXMgaW50ZXJmYWNlLlxuICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYXp1cmUvYXp1cmUtc2RrL3RzLW5hbWluZy1vcHRpb25zKi9cbiAgICBvcHRpb25zKSB7XG4gICAgICAgIGxldCBwaXBlbGluZTtcbiAgICAgICAgaWYgKGlzUGlwZWxpbmVMaWtlKGNyZWRlbnRpYWxPclBpcGVsaW5lKSkge1xuICAgICAgICAgICAgcGlwZWxpbmUgPSBjcmVkZW50aWFsT3JQaXBlbGluZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghY3JlZGVudGlhbE9yUGlwZWxpbmUpIHtcbiAgICAgICAgICAgIC8vIG5vIGNyZWRlbnRpYWwgcHJvdmlkZWRcbiAgICAgICAgICAgIHBpcGVsaW5lID0gbmV3UGlwZWxpbmUobmV3IEFub255bW91c0NyZWRlbnRpYWwoKSwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBwaXBlbGluZSA9IG5ld1BpcGVsaW5lKGNyZWRlbnRpYWxPclBpcGVsaW5lLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdG9yYWdlQ2xpZW50Q29udGV4dCA9IG5ldyBTdG9yYWdlQ29udGV4dENsaWVudCh1cmwsIGdldENvcmVDbGllbnRPcHRpb25zKHBpcGVsaW5lKSk7XG4gICAgICAgIGNvbnN0IHBhdGggPSBnZXRVUkxQYXRoKHVybCk7XG4gICAgICAgIGlmIChwYXRoICYmIHBhdGggIT09IFwiL1wiKSB7XG4gICAgICAgICAgICAvLyBDb250YWluZXIgc2NvcGVkLlxuICAgICAgICAgICAgdGhpcy5zZXJ2aWNlT3JDb250YWluZXJDb250ZXh0ID0gc3RvcmFnZUNsaWVudENvbnRleHQuY29udGFpbmVyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXJ2aWNlT3JDb250YWluZXJDb250ZXh0ID0gc3RvcmFnZUNsaWVudENvbnRleHQuc2VydmljZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEge0BsaW5rIEJsb2JCYXRjaH0uXG4gICAgICogQSBCbG9iQmF0Y2ggcmVwcmVzZW50cyBhbiBhZ2dyZWdhdGVkIHNldCBvZiBvcGVyYXRpb25zIG9uIGJsb2JzLlxuICAgICAqL1xuICAgIGNyZWF0ZUJhdGNoKCkge1xuICAgICAgICByZXR1cm4gbmV3IEJsb2JCYXRjaCgpO1xuICAgIH1cbiAgICBhc3luYyBkZWxldGVCbG9icyh1cmxzT3JCbG9iQ2xpZW50cywgY3JlZGVudGlhbE9yT3B0aW9ucywgXG4gICAgLy8gTGVnYWN5LCBubyBmaXggZm9yIGVzbGludCBlcnJvciB3aXRob3V0IGJyZWFraW5nLiBEaXNhYmxlIGl0IGZvciB0aGlzIGludGVyZmFjZS5cbiAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGF6dXJlL2F6dXJlLXNkay90cy1uYW1pbmctb3B0aW9ucyovXG4gICAgb3B0aW9ucykge1xuICAgICAgICBjb25zdCBiYXRjaCA9IG5ldyBCbG9iQmF0Y2goKTtcbiAgICAgICAgZm9yIChjb25zdCB1cmxPckJsb2JDbGllbnQgb2YgdXJsc09yQmxvYkNsaWVudHMpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdXJsT3JCbG9iQ2xpZW50ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgYmF0Y2guZGVsZXRlQmxvYih1cmxPckJsb2JDbGllbnQsIGNyZWRlbnRpYWxPck9wdGlvbnMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgYmF0Y2guZGVsZXRlQmxvYih1cmxPckJsb2JDbGllbnQsIGNyZWRlbnRpYWxPck9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnN1Ym1pdEJhdGNoKGJhdGNoKTtcbiAgICB9XG4gICAgYXN5bmMgc2V0QmxvYnNBY2Nlc3NUaWVyKHVybHNPckJsb2JDbGllbnRzLCBjcmVkZW50aWFsT3JUaWVyLCB0aWVyT3JPcHRpb25zLCBcbiAgICAvLyBMZWdhY3ksIG5vIGZpeCBmb3IgZXNsaW50IGVycm9yIHdpdGhvdXQgYnJlYWtpbmcuIERpc2FibGUgaXQgZm9yIHRoaXMgaW50ZXJmYWNlLlxuICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYXp1cmUvYXp1cmUtc2RrL3RzLW5hbWluZy1vcHRpb25zKi9cbiAgICBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGJhdGNoID0gbmV3IEJsb2JCYXRjaCgpO1xuICAgICAgICBmb3IgKGNvbnN0IHVybE9yQmxvYkNsaWVudCBvZiB1cmxzT3JCbG9iQ2xpZW50cykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB1cmxPckJsb2JDbGllbnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBiYXRjaC5zZXRCbG9iQWNjZXNzVGllcih1cmxPckJsb2JDbGllbnQsIGNyZWRlbnRpYWxPclRpZXIsIHRpZXJPck9wdGlvbnMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgYmF0Y2guc2V0QmxvYkFjY2Vzc1RpZXIodXJsT3JCbG9iQ2xpZW50LCBjcmVkZW50aWFsT3JUaWVyLCB0aWVyT3JPcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5zdWJtaXRCYXRjaChiYXRjaCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN1Ym1pdCBiYXRjaCByZXF1ZXN0IHdoaWNoIGNvbnNpc3RzIG9mIG11bHRpcGxlIHN1YnJlcXVlc3RzLlxuICAgICAqXG4gICAgICogR2V0IGBibG9iQmF0Y2hDbGllbnRgIGFuZCBvdGhlciBkZXRhaWxzIGJlZm9yZSBydW5uaW5nIHRoZSBzbmlwcGV0cy5cbiAgICAgKiBgYmxvYlNlcnZpY2VDbGllbnQuZ2V0QmxvYkJhdGNoQ2xpZW50KClgIGdpdmVzIHRoZSBgYmxvYkJhdGNoQ2xpZW50YFxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2FnZTpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogbGV0IGJhdGNoUmVxdWVzdCA9IG5ldyBCbG9iQmF0Y2goKTtcbiAgICAgKiBhd2FpdCBiYXRjaFJlcXVlc3QuZGVsZXRlQmxvYih1cmxJblN0cmluZzAsIGNyZWRlbnRpYWwwKTtcbiAgICAgKiBhd2FpdCBiYXRjaFJlcXVlc3QuZGVsZXRlQmxvYih1cmxJblN0cmluZzEsIGNyZWRlbnRpYWwxLCB7XG4gICAgICogIGRlbGV0ZVNuYXBzaG90czogXCJpbmNsdWRlXCJcbiAgICAgKiB9KTtcbiAgICAgKiBjb25zdCBiYXRjaFJlc3AgPSBhd2FpdCBibG9iQmF0Y2hDbGllbnQuc3VibWl0QmF0Y2goYmF0Y2hSZXF1ZXN0KTtcbiAgICAgKiBjb25zb2xlLmxvZyhiYXRjaFJlc3Auc3ViUmVzcG9uc2VzU3VjY2VlZGVkQ291bnQpO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBhIGxlYXNlOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBsZXQgYmF0Y2hSZXF1ZXN0ID0gbmV3IEJsb2JCYXRjaCgpO1xuICAgICAqIGF3YWl0IGJhdGNoUmVxdWVzdC5zZXRCbG9iQWNjZXNzVGllcihibG9ja0Jsb2JDbGllbnQwLCBcIkNvb2xcIik7XG4gICAgICogYXdhaXQgYmF0Y2hSZXF1ZXN0LnNldEJsb2JBY2Nlc3NUaWVyKGJsb2NrQmxvYkNsaWVudDEsIFwiQ29vbFwiLCB7XG4gICAgICogIGNvbmRpdGlvbnM6IHsgbGVhc2VJZDogbGVhc2VJZCB9XG4gICAgICogfSk7XG4gICAgICogY29uc3QgYmF0Y2hSZXNwID0gYXdhaXQgYmxvYkJhdGNoQ2xpZW50LnN1Ym1pdEJhdGNoKGJhdGNoUmVxdWVzdCk7XG4gICAgICogY29uc29sZS5sb2coYmF0Y2hSZXNwLnN1YlJlc3BvbnNlc1N1Y2NlZWRlZENvdW50KTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2Jsb2ItYmF0Y2hcbiAgICAgKlxuICAgICAqIEBwYXJhbSBiYXRjaFJlcXVlc3QgLSBBIHNldCBvZiBEZWxldGUgb3IgU2V0VGllciBvcGVyYXRpb25zLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC1cbiAgICAgKi9cbiAgICBhc3luYyBzdWJtaXRCYXRjaChiYXRjaFJlcXVlc3QsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBpZiAoIWJhdGNoUmVxdWVzdCB8fCBiYXRjaFJlcXVlc3QuZ2V0U3ViUmVxdWVzdHMoKS5zaXplID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkJhdGNoIHJlcXVlc3Qgc2hvdWxkIGNvbnRhaW4gb25lIG9yIG1vcmUgc3ViIHJlcXVlc3RzLlwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JCYXRjaENsaWVudC1zdWJtaXRCYXRjaFwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJhdGNoUmVxdWVzdEJvZHkgPSBiYXRjaFJlcXVlc3QuZ2V0SHR0cFJlcXVlc3RCb2R5KCk7XG4gICAgICAgICAgICAvLyBTZXJ2aWNlU3VibWl0QmF0Y2hSZXNwb25zZU1vZGVsIGFuZCBDb250YWluZXJTdWJtaXRCYXRjaFJlc3BvbnNlIGFyZSBjb21wYXRpYmxlIGZvciBub3cuXG4gICAgICAgICAgICBjb25zdCByYXdCYXRjaFJlc3BvbnNlID0gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5zZXJ2aWNlT3JDb250YWluZXJDb250ZXh0LnN1Ym1pdEJhdGNoKHV0ZjhCeXRlTGVuZ3RoKGJhdGNoUmVxdWVzdEJvZHkpLCBiYXRjaFJlcXVlc3QuZ2V0TXVsdGlQYXJ0Q29udGVudFR5cGUoKSwgYmF0Y2hSZXF1ZXN0Qm9keSwgT2JqZWN0LmFzc2lnbih7fSwgdXBkYXRlZE9wdGlvbnMpKSk7XG4gICAgICAgICAgICAvLyBQYXJzZSB0aGUgc3ViIHJlc3BvbnNlcyByZXN1bHQsIGlmIGxvZ2ljIHJlYWNoZXMgaGVyZShpLmUuIHRoZSBiYXRjaCByZXF1ZXN0IHN1Y2NlZWRlZCB3aXRoIHN0YXR1cyBjb2RlIDIwMikuXG4gICAgICAgICAgICBjb25zdCBiYXRjaFJlc3BvbnNlUGFyc2VyID0gbmV3IEJhdGNoUmVzcG9uc2VQYXJzZXIocmF3QmF0Y2hSZXNwb25zZSwgYmF0Y2hSZXF1ZXN0LmdldFN1YlJlcXVlc3RzKCkpO1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2VTdW1tYXJ5ID0gYXdhaXQgYmF0Y2hSZXNwb25zZVBhcnNlci5wYXJzZUJhdGNoUmVzcG9uc2UoKTtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IHtcbiAgICAgICAgICAgICAgICBfcmVzcG9uc2U6IHJhd0JhdGNoUmVzcG9uc2UuX3Jlc3BvbnNlLFxuICAgICAgICAgICAgICAgIGNvbnRlbnRUeXBlOiByYXdCYXRjaFJlc3BvbnNlLmNvbnRlbnRUeXBlLFxuICAgICAgICAgICAgICAgIGVycm9yQ29kZTogcmF3QmF0Y2hSZXNwb25zZS5lcnJvckNvZGUsXG4gICAgICAgICAgICAgICAgcmVxdWVzdElkOiByYXdCYXRjaFJlc3BvbnNlLnJlcXVlc3RJZCxcbiAgICAgICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHJhd0JhdGNoUmVzcG9uc2UuY2xpZW50UmVxdWVzdElkLFxuICAgICAgICAgICAgICAgIHZlcnNpb246IHJhd0JhdGNoUmVzcG9uc2UudmVyc2lvbixcbiAgICAgICAgICAgICAgICBzdWJSZXNwb25zZXM6IHJlc3BvbnNlU3VtbWFyeS5zdWJSZXNwb25zZXMsXG4gICAgICAgICAgICAgICAgc3ViUmVzcG9uc2VzU3VjY2VlZGVkQ291bnQ6IHJlc3BvbnNlU3VtbWFyeS5zdWJSZXNwb25zZXNTdWNjZWVkZWRDb3VudCxcbiAgICAgICAgICAgICAgICBzdWJSZXNwb25zZXNGYWlsZWRDb3VudDogcmVzcG9uc2VTdW1tYXJ5LnN1YlJlc3BvbnNlc0ZhaWxlZENvdW50LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuLyoqXG4gKiBBIENvbnRhaW5lckNsaWVudCByZXByZXNlbnRzIGEgVVJMIHRvIHRoZSBBenVyZSBTdG9yYWdlIGNvbnRhaW5lciBhbGxvd2luZyB5b3UgdG8gbWFuaXB1bGF0ZSBpdHMgYmxvYnMuXG4gKi9cbmNsYXNzIENvbnRhaW5lckNsaWVudCBleHRlbmRzIFN0b3JhZ2VDbGllbnQge1xuICAgIC8qKlxuICAgICAqIFRoZSBuYW1lIG9mIHRoZSBjb250YWluZXIuXG4gICAgICovXG4gICAgZ2V0IGNvbnRhaW5lck5hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb250YWluZXJOYW1lO1xuICAgIH1cbiAgICBjb25zdHJ1Y3Rvcih1cmxPckNvbm5lY3Rpb25TdHJpbmcsIGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lLCBcbiAgICAvLyBMZWdhY3ksIG5vIGZpeCBmb3IgZXNsaW50IGVycm9yIHdpdGhvdXQgYnJlYWtpbmcuIERpc2FibGUgaXQgZm9yIHRoaXMgaW50ZXJmYWNlLlxuICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYXp1cmUvYXp1cmUtc2RrL3RzLW5hbWluZy1vcHRpb25zKi9cbiAgICBvcHRpb25zKSB7XG4gICAgICAgIGxldCBwaXBlbGluZTtcbiAgICAgICAgbGV0IHVybDtcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgICAgIGlmIChpc1BpcGVsaW5lTGlrZShjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSkpIHtcbiAgICAgICAgICAgIC8vICh1cmw6IHN0cmluZywgcGlwZWxpbmU6IFBpcGVsaW5lKVxuICAgICAgICAgICAgdXJsID0gdXJsT3JDb25uZWN0aW9uU3RyaW5nO1xuICAgICAgICAgICAgcGlwZWxpbmUgPSBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICgoY29yZVV0aWwuaXNOb2RlICYmIGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lIGluc3RhbmNlb2YgU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwpIHx8XG4gICAgICAgICAgICBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSBpbnN0YW5jZW9mIEFub255bW91c0NyZWRlbnRpYWwgfHxcbiAgICAgICAgICAgIGNvcmVBdXRoLmlzVG9rZW5DcmVkZW50aWFsKGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lKSkge1xuICAgICAgICAgICAgLy8gKHVybDogc3RyaW5nLCBjcmVkZW50aWFsPzogU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwgfCBBbm9ueW1vdXNDcmVkZW50aWFsIHwgVG9rZW5DcmVkZW50aWFsLCBvcHRpb25zPzogU3RvcmFnZVBpcGVsaW5lT3B0aW9ucylcbiAgICAgICAgICAgIHVybCA9IHVybE9yQ29ubmVjdGlvblN0cmluZztcbiAgICAgICAgICAgIHBpcGVsaW5lID0gbmV3UGlwZWxpbmUoY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSAmJlxuICAgICAgICAgICAgdHlwZW9mIGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAvLyAodXJsOiBzdHJpbmcsIGNyZWRlbnRpYWw/OiBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbCB8IEFub255bW91c0NyZWRlbnRpYWwgfCBUb2tlbkNyZWRlbnRpYWwsIG9wdGlvbnM/OiBTdG9yYWdlUGlwZWxpbmVPcHRpb25zKVxuICAgICAgICAgICAgLy8gVGhlIHNlY29uZCBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkLiBVc2UgYW5vbnltb3VzIGNyZWRlbnRpYWwuXG4gICAgICAgICAgICB1cmwgPSB1cmxPckNvbm5lY3Rpb25TdHJpbmc7XG4gICAgICAgICAgICBwaXBlbGluZSA9IG5ld1BpcGVsaW5lKG5ldyBBbm9ueW1vdXNDcmVkZW50aWFsKCksIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lICYmXG4gICAgICAgICAgICB0eXBlb2YgY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIC8vIChjb25uZWN0aW9uU3RyaW5nOiBzdHJpbmcsIGNvbnRhaW5lck5hbWU6IHN0cmluZywgYmxvYk5hbWU6IHN0cmluZywgb3B0aW9ucz86IFN0b3JhZ2VQaXBlbGluZU9wdGlvbnMpXG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJOYW1lID0gY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWU7XG4gICAgICAgICAgICBjb25zdCBleHRyYWN0ZWRDcmVkcyA9IGV4dHJhY3RDb25uZWN0aW9uU3RyaW5nUGFydHModXJsT3JDb25uZWN0aW9uU3RyaW5nKTtcbiAgICAgICAgICAgIGlmIChleHRyYWN0ZWRDcmVkcy5raW5kID09PSBcIkFjY291bnRDb25uU3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29yZVV0aWwuaXNOb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNoYXJlZEtleUNyZWRlbnRpYWwgPSBuZXcgU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwoZXh0cmFjdGVkQ3JlZHMuYWNjb3VudE5hbWUsIGV4dHJhY3RlZENyZWRzLmFjY291bnRLZXkpO1xuICAgICAgICAgICAgICAgICAgICB1cmwgPSBhcHBlbmRUb1VSTFBhdGgoZXh0cmFjdGVkQ3JlZHMudXJsLCBlbmNvZGVVUklDb21wb25lbnQoY29udGFpbmVyTmFtZSkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMucHJveHlPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnByb3h5T3B0aW9ucyA9IGNvcmVSZXN0UGlwZWxpbmUuZ2V0RGVmYXVsdFByb3h5U2V0dGluZ3MoZXh0cmFjdGVkQ3JlZHMucHJveHlVcmkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHBpcGVsaW5lID0gbmV3UGlwZWxpbmUoc2hhcmVkS2V5Q3JlZGVudGlhbCwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBY2NvdW50IGNvbm5lY3Rpb24gc3RyaW5nIGlzIG9ubHkgc3VwcG9ydGVkIGluIE5vZGUuanMgZW52aXJvbm1lbnRcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZXh0cmFjdGVkQ3JlZHMua2luZCA9PT0gXCJTQVNDb25uU3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICB1cmwgPVxuICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb1VSTFBhdGgoZXh0cmFjdGVkQ3JlZHMudXJsLCBlbmNvZGVVUklDb21wb25lbnQoY29udGFpbmVyTmFtZSkpICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiP1wiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhY3RlZENyZWRzLmFjY291bnRTYXM7XG4gICAgICAgICAgICAgICAgcGlwZWxpbmUgPSBuZXdQaXBlbGluZShuZXcgQW5vbnltb3VzQ3JlZGVudGlhbCgpLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbm5lY3Rpb24gc3RyaW5nIG11c3QgYmUgZWl0aGVyIGFuIEFjY291bnQgY29ubmVjdGlvbiBzdHJpbmcgb3IgYSBTQVMgY29ubmVjdGlvbiBzdHJpbmdcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3Rpbmcgbm9uLWVtcHR5IHN0cmluZ3MgZm9yIGNvbnRhaW5lck5hbWUgcGFyYW1ldGVyXCIpO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyKHVybCwgcGlwZWxpbmUpO1xuICAgICAgICB0aGlzLl9jb250YWluZXJOYW1lID0gdGhpcy5nZXRDb250YWluZXJOYW1lRnJvbVVybCgpO1xuICAgICAgICB0aGlzLmNvbnRhaW5lckNvbnRleHQgPSB0aGlzLnN0b3JhZ2VDbGllbnRDb250ZXh0LmNvbnRhaW5lcjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBjb250YWluZXIgdW5kZXIgdGhlIHNwZWNpZmllZCBhY2NvdW50LiBJZiB0aGUgY29udGFpbmVyIHdpdGhcbiAgICAgKiB0aGUgc2FtZSBuYW1lIGFscmVhZHkgZXhpc3RzLCB0aGUgb3BlcmF0aW9uIGZhaWxzLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2NyZWF0ZS1jb250YWluZXJcbiAgICAgKiBOYW1pbmcgcnVsZXM6IEBzZWUgaHR0cHM6Ly9sZWFybi5taWNyb3NvZnQuY29tL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9uYW1pbmctYW5kLXJlZmVyZW5jaW5nLWNvbnRhaW5lcnMtLWJsb2JzLS1hbmQtbWV0YWRhdGFcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBDb250YWluZXIgQ3JlYXRlIG9wZXJhdGlvbi5cbiAgICAgKlxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2FnZTpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogY29uc3QgY29udGFpbmVyQ2xpZW50ID0gYmxvYlNlcnZpY2VDbGllbnQuZ2V0Q29udGFpbmVyQ2xpZW50KFwiPGNvbnRhaW5lciBuYW1lPlwiKTtcbiAgICAgKiBjb25zdCBjcmVhdGVDb250YWluZXJSZXNwb25zZSA9IGF3YWl0IGNvbnRhaW5lckNsaWVudC5jcmVhdGUoKTtcbiAgICAgKiBjb25zb2xlLmxvZyhcIkNvbnRhaW5lciB3YXMgY3JlYXRlZCBzdWNjZXNzZnVsbHlcIiwgY3JlYXRlQ29udGFpbmVyUmVzcG9uc2UucmVxdWVzdElkKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBhc3luYyBjcmVhdGUob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQ29udGFpbmVyQ2xpZW50LWNyZWF0ZVwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLmNvbnRhaW5lckNvbnRleHQuY3JlYXRlKHVwZGF0ZWRPcHRpb25zKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IGNvbnRhaW5lciB1bmRlciB0aGUgc3BlY2lmaWVkIGFjY291bnQuIElmIHRoZSBjb250YWluZXIgd2l0aFxuICAgICAqIHRoZSBzYW1lIG5hbWUgYWxyZWFkeSBleGlzdHMsIGl0IGlzIG5vdCBjaGFuZ2VkLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2NyZWF0ZS1jb250YWluZXJcbiAgICAgKiBOYW1pbmcgcnVsZXM6IEBzZWUgaHR0cHM6Ly9sZWFybi5taWNyb3NvZnQuY29tL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9uYW1pbmctYW5kLXJlZmVyZW5jaW5nLWNvbnRhaW5lcnMtLWJsb2JzLS1hbmQtbWV0YWRhdGFcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC1cbiAgICAgKi9cbiAgICBhc3luYyBjcmVhdGVJZk5vdEV4aXN0cyhvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJDb250YWluZXJDbGllbnQtY3JlYXRlSWZOb3RFeGlzdHNcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmNyZWF0ZSh1cGRhdGVkT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7IHN1Y2NlZWRlZDogdHJ1ZSB9LCByZXMpLCB7IF9yZXNwb25zZTogcmVzLl9yZXNwb25zZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCgoX2EgPSBlLmRldGFpbHMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5lcnJvckNvZGUpID09PSBcIkNvbnRhaW5lckFscmVhZHlFeGlzdHNcIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHsgc3VjY2VlZGVkOiBmYWxzZSB9LCAoX2IgPSBlLnJlc3BvbnNlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IucGFyc2VkSGVhZGVycyksIHsgX3Jlc3BvbnNlOiBlLnJlc3BvbnNlIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIEF6dXJlIGNvbnRhaW5lciByZXNvdXJjZSByZXByZXNlbnRlZCBieSB0aGlzIGNsaWVudCBleGlzdHM7IGZhbHNlIG90aGVyd2lzZS5cbiAgICAgKlxuICAgICAqIE5PVEU6IHVzZSB0aGlzIGZ1bmN0aW9uIHdpdGggY2FyZSBzaW5jZSBhbiBleGlzdGluZyBjb250YWluZXIgbWlnaHQgYmUgZGVsZXRlZCBieSBvdGhlciBjbGllbnRzIG9yXG4gICAgICogYXBwbGljYXRpb25zLiBWaWNlIHZlcnNhIG5ldyBjb250YWluZXJzIHdpdGggdGhlIHNhbWUgbmFtZSBtaWdodCBiZSBhZGRlZCBieSBvdGhlciBjbGllbnRzIG9yXG4gICAgICogYXBwbGljYXRpb25zIGFmdGVyIHRoaXMgZnVuY3Rpb24gY29tcGxldGVzLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLVxuICAgICAqL1xuICAgIGFzeW5jIGV4aXN0cyhvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJDb250YWluZXJDbGllbnQtZXhpc3RzXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmdldFByb3BlcnRpZXMoe1xuICAgICAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoZS5zdGF0dXNDb2RlID09PSA0MDQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHtAbGluayBCbG9iQ2xpZW50fVxuICAgICAqXG4gICAgICogQHBhcmFtIGJsb2JOYW1lIC0gQSBibG9iIG5hbWVcbiAgICAgKiBAcmV0dXJucyBBIG5ldyBCbG9iQ2xpZW50IG9iamVjdCBmb3IgdGhlIGdpdmVuIGJsb2IgbmFtZS5cbiAgICAgKi9cbiAgICBnZXRCbG9iQ2xpZW50KGJsb2JOYW1lKSB7XG4gICAgICAgIHJldHVybiBuZXcgQmxvYkNsaWVudChhcHBlbmRUb1VSTFBhdGgodGhpcy51cmwsIEVzY2FwZVBhdGgoYmxvYk5hbWUpKSwgdGhpcy5waXBlbGluZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4ge0BsaW5rIEFwcGVuZEJsb2JDbGllbnR9XG4gICAgICpcbiAgICAgKiBAcGFyYW0gYmxvYk5hbWUgLSBBbiBhcHBlbmQgYmxvYiBuYW1lXG4gICAgICovXG4gICAgZ2V0QXBwZW5kQmxvYkNsaWVudChibG9iTmFtZSkge1xuICAgICAgICByZXR1cm4gbmV3IEFwcGVuZEJsb2JDbGllbnQoYXBwZW5kVG9VUkxQYXRoKHRoaXMudXJsLCBFc2NhcGVQYXRoKGJsb2JOYW1lKSksIHRoaXMucGlwZWxpbmUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEge0BsaW5rIEJsb2NrQmxvYkNsaWVudH1cbiAgICAgKlxuICAgICAqIEBwYXJhbSBibG9iTmFtZSAtIEEgYmxvY2sgYmxvYiBuYW1lXG4gICAgICpcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNhZ2U6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnN0IGNvbnRlbnQgPSBcIkhlbGxvIHdvcmxkIVwiO1xuICAgICAqXG4gICAgICogY29uc3QgYmxvY2tCbG9iQ2xpZW50ID0gY29udGFpbmVyQ2xpZW50LmdldEJsb2NrQmxvYkNsaWVudChcIjxibG9iIG5hbWU+XCIpO1xuICAgICAqIGNvbnN0IHVwbG9hZEJsb2JSZXNwb25zZSA9IGF3YWl0IGJsb2NrQmxvYkNsaWVudC51cGxvYWQoY29udGVudCwgY29udGVudC5sZW5ndGgpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGdldEJsb2NrQmxvYkNsaWVudChibG9iTmFtZSkge1xuICAgICAgICByZXR1cm4gbmV3IEJsb2NrQmxvYkNsaWVudChhcHBlbmRUb1VSTFBhdGgodGhpcy51cmwsIEVzY2FwZVBhdGgoYmxvYk5hbWUpKSwgdGhpcy5waXBlbGluZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSB7QGxpbmsgUGFnZUJsb2JDbGllbnR9XG4gICAgICpcbiAgICAgKiBAcGFyYW0gYmxvYk5hbWUgLSBBIHBhZ2UgYmxvYiBuYW1lXG4gICAgICovXG4gICAgZ2V0UGFnZUJsb2JDbGllbnQoYmxvYk5hbWUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQYWdlQmxvYkNsaWVudChhcHBlbmRUb1VSTFBhdGgodGhpcy51cmwsIEVzY2FwZVBhdGgoYmxvYk5hbWUpKSwgdGhpcy5waXBlbGluZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYWxsIHVzZXItZGVmaW5lZCBtZXRhZGF0YSBhbmQgc3lzdGVtIHByb3BlcnRpZXMgZm9yIHRoZSBzcGVjaWZpZWRcbiAgICAgKiBjb250YWluZXIuIFRoZSBkYXRhIHJldHVybmVkIGRvZXMgbm90IGluY2x1ZGUgdGhlIGNvbnRhaW5lcidzIGxpc3Qgb2YgYmxvYnMuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvZ2V0LWNvbnRhaW5lci1wcm9wZXJ0aWVzXG4gICAgICpcbiAgICAgKiBXQVJOSU5HOiBUaGUgYG1ldGFkYXRhYCBvYmplY3QgcmV0dXJuZWQgaW4gdGhlIHJlc3BvbnNlIHdpbGwgaGF2ZSBpdHMga2V5cyBpbiBsb3dlcmNhc2UsIGV2ZW4gaWZcbiAgICAgKiB0aGV5IG9yaWdpbmFsbHkgY29udGFpbmVkIHVwcGVyY2FzZSBjaGFyYWN0ZXJzLiBUaGlzIGRpZmZlcnMgZnJvbSB0aGUgbWV0YWRhdGEga2V5cyByZXR1cm5lZCBieVxuICAgICAqIHRoZSBgbGlzdENvbnRhaW5lcnNgIG1ldGhvZCBvZiB7QGxpbmsgQmxvYlNlcnZpY2VDbGllbnR9IHVzaW5nIHRoZSBgaW5jbHVkZU1ldGFkYXRhYCBvcHRpb24sIHdoaWNoXG4gICAgICogd2lsbCByZXRhaW4gdGhlaXIgb3JpZ2luYWwgY2FzaW5nLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIENvbnRhaW5lciBHZXQgUHJvcGVydGllcyBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgZ2V0UHJvcGVydGllcyhvcHRpb25zID0ge30pIHtcbiAgICAgICAgaWYgKCFvcHRpb25zLmNvbmRpdGlvbnMpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuY29uZGl0aW9ucyA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQ29udGFpbmVyQ2xpZW50LWdldFByb3BlcnRpZXNcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5jb250YWluZXJDb250ZXh0LmdldFByb3BlcnRpZXMoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHsgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwgfSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMgfSkpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1hcmtzIHRoZSBzcGVjaWZpZWQgY29udGFpbmVyIGZvciBkZWxldGlvbi4gVGhlIGNvbnRhaW5lciBhbmQgYW55IGJsb2JzXG4gICAgICogY29udGFpbmVkIHdpdGhpbiBpdCBhcmUgbGF0ZXIgZGVsZXRlZCBkdXJpbmcgZ2FyYmFnZSBjb2xsZWN0aW9uLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2RlbGV0ZS1jb250YWluZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBDb250YWluZXIgRGVsZXRlIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBkZWxldGUob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGlmICghb3B0aW9ucy5jb25kaXRpb25zKSB7XG4gICAgICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkNvbnRhaW5lckNsaWVudC1kZWxldGVcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5jb250YWluZXJDb250ZXh0LmRlbGV0ZSh7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTWFya3MgdGhlIHNwZWNpZmllZCBjb250YWluZXIgZm9yIGRlbGV0aW9uIGlmIGl0IGV4aXN0cy4gVGhlIGNvbnRhaW5lciBhbmQgYW55IGJsb2JzXG4gICAgICogY29udGFpbmVkIHdpdGhpbiBpdCBhcmUgbGF0ZXIgZGVsZXRlZCBkdXJpbmcgZ2FyYmFnZSBjb2xsZWN0aW9uLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2RlbGV0ZS1jb250YWluZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBDb250YWluZXIgRGVsZXRlIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBkZWxldGVJZkV4aXN0cyhvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJDb250YWluZXJDbGllbnQtZGVsZXRlSWZFeGlzdHNcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmRlbGV0ZSh1cGRhdGVkT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7IHN1Y2NlZWRlZDogdHJ1ZSB9LCByZXMpLCB7IF9yZXNwb25zZTogcmVzLl9yZXNwb25zZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCgoX2EgPSBlLmRldGFpbHMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5lcnJvckNvZGUpID09PSBcIkNvbnRhaW5lck5vdEZvdW5kXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7IHN1Y2NlZWRlZDogZmFsc2UgfSwgKF9iID0gZS5yZXNwb25zZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnBhcnNlZEhlYWRlcnMpLCB7IF9yZXNwb25zZTogZS5yZXNwb25zZSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldHMgb25lIG9yIG1vcmUgdXNlci1kZWZpbmVkIG5hbWUtdmFsdWUgcGFpcnMgZm9yIHRoZSBzcGVjaWZpZWQgY29udGFpbmVyLlxuICAgICAqXG4gICAgICogSWYgbm8gb3B0aW9uIHByb3ZpZGVkLCBvciBubyBtZXRhZGF0YSBkZWZpbmVkIGluIHRoZSBwYXJhbWV0ZXIsIHRoZSBjb250YWluZXJcbiAgICAgKiBtZXRhZGF0YSB3aWxsIGJlIHJlbW92ZWQuXG4gICAgICpcbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9zZXQtY29udGFpbmVyLW1ldGFkYXRhXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbWV0YWRhdGEgLSBSZXBsYWNlIGV4aXN0aW5nIG1ldGFkYXRhIHdpdGggdGhpcyB2YWx1ZS5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBubyB2YWx1ZSBwcm92aWRlZCB0aGUgZXhpc3RpbmcgbWV0YWRhdGEgd2lsbCBiZSByZW1vdmVkLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBDb250YWluZXIgU2V0IE1ldGFkYXRhIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBzZXRNZXRhZGF0YShtZXRhZGF0YSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGlmICghb3B0aW9ucy5jb25kaXRpb25zKSB7XG4gICAgICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5jb25kaXRpb25zLmlmVW5tb2RpZmllZFNpbmNlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcInRoZSBJZlVubW9kaWZpZWRTaW5jZSBtdXN0IGhhdmUgdGhlaXIgZGVmYXVsdCB2YWx1ZXMgYmVjYXVzZSB0aGV5IGFyZSBpZ25vcmVkIGJ5IHRoZSBibG9iIHNlcnZpY2VcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJDb250YWluZXJDbGllbnQtc2V0TWV0YWRhdGFcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5jb250YWluZXJDb250ZXh0LnNldE1ldGFkYXRhKHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBtZXRhZGF0YSxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBwZXJtaXNzaW9ucyBmb3IgdGhlIHNwZWNpZmllZCBjb250YWluZXIuIFRoZSBwZXJtaXNzaW9ucyBpbmRpY2F0ZVxuICAgICAqIHdoZXRoZXIgY29udGFpbmVyIGRhdGEgbWF5IGJlIGFjY2Vzc2VkIHB1YmxpY2x5LlxuICAgICAqXG4gICAgICogV0FSTklORzogSmF2YVNjcmlwdCBEYXRlIHdpbGwgcG90ZW50aWFsbHkgbG9zZSBwcmVjaXNpb24gd2hlbiBwYXJzaW5nIHN0YXJ0c09uIGFuZCBleHBpcmVzT24gc3RyaW5ncy5cbiAgICAgKiBGb3IgZXhhbXBsZSwgbmV3IERhdGUoXCIyMDE4LTEyLTMxVDAzOjQ0OjIzLjg4Mjc4OTFaXCIpLnRvSVNPU3RyaW5nKCkgd2lsbCBnZXQgXCIyMDE4LTEyLTMxVDAzOjQ0OjIzLjg4MlpcIi5cbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2dldC1jb250YWluZXItYWNsXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gQ29udGFpbmVyIEdldCBBY2Nlc3MgUG9saWN5IG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBnZXRBY2Nlc3NQb2xpY3kob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGlmICghb3B0aW9ucy5jb25kaXRpb25zKSB7XG4gICAgICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkNvbnRhaW5lckNsaWVudC1nZXRBY2Nlc3NQb2xpY3lcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuY29udGFpbmVyQ29udGV4dC5nZXRBY2Nlc3NQb2xpY3koe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IHtcbiAgICAgICAgICAgICAgICBfcmVzcG9uc2U6IHJlc3BvbnNlLl9yZXNwb25zZSxcbiAgICAgICAgICAgICAgICBibG9iUHVibGljQWNjZXNzOiByZXNwb25zZS5ibG9iUHVibGljQWNjZXNzLFxuICAgICAgICAgICAgICAgIGRhdGU6IHJlc3BvbnNlLmRhdGUsXG4gICAgICAgICAgICAgICAgZXRhZzogcmVzcG9uc2UuZXRhZyxcbiAgICAgICAgICAgICAgICBlcnJvckNvZGU6IHJlc3BvbnNlLmVycm9yQ29kZSxcbiAgICAgICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHJlc3BvbnNlLmxhc3RNb2RpZmllZCxcbiAgICAgICAgICAgICAgICByZXF1ZXN0SWQ6IHJlc3BvbnNlLnJlcXVlc3RJZCxcbiAgICAgICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHJlc3BvbnNlLmNsaWVudFJlcXVlc3RJZCxcbiAgICAgICAgICAgICAgICBzaWduZWRJZGVudGlmaWVyczogW10sXG4gICAgICAgICAgICAgICAgdmVyc2lvbjogcmVzcG9uc2UudmVyc2lvbixcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGlkZW50aWZpZXIgb2YgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBsZXQgYWNjZXNzUG9saWN5ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGlmIChpZGVudGlmaWVyLmFjY2Vzc1BvbGljeSkge1xuICAgICAgICAgICAgICAgICAgICBhY2Nlc3NQb2xpY3kgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwZXJtaXNzaW9uczogaWRlbnRpZmllci5hY2Nlc3NQb2xpY3kucGVybWlzc2lvbnMsXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGlmIChpZGVudGlmaWVyLmFjY2Vzc1BvbGljeS5leHBpcmVzT24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjY2Vzc1BvbGljeS5leHBpcmVzT24gPSBuZXcgRGF0ZShpZGVudGlmaWVyLmFjY2Vzc1BvbGljeS5leHBpcmVzT24pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChpZGVudGlmaWVyLmFjY2Vzc1BvbGljeS5zdGFydHNPbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXNzUG9saWN5LnN0YXJ0c09uID0gbmV3IERhdGUoaWRlbnRpZmllci5hY2Nlc3NQb2xpY3kuc3RhcnRzT24pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlcy5zaWduZWRJZGVudGlmaWVycy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgYWNjZXNzUG9saWN5LFxuICAgICAgICAgICAgICAgICAgICBpZDogaWRlbnRpZmllci5pZCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBwZXJtaXNzaW9ucyBmb3IgdGhlIHNwZWNpZmllZCBjb250YWluZXIuIFRoZSBwZXJtaXNzaW9ucyBpbmRpY2F0ZVxuICAgICAqIHdoZXRoZXIgYmxvYnMgaW4gYSBjb250YWluZXIgbWF5IGJlIGFjY2Vzc2VkIHB1YmxpY2x5LlxuICAgICAqXG4gICAgICogV2hlbiB5b3Ugc2V0IHBlcm1pc3Npb25zIGZvciBhIGNvbnRhaW5lciwgdGhlIGV4aXN0aW5nIHBlcm1pc3Npb25zIGFyZSByZXBsYWNlZC5cbiAgICAgKiBJZiBubyBhY2Nlc3Mgb3IgY29udGFpbmVyQWNsIHByb3ZpZGVkLCB0aGUgZXhpc3RpbmcgY29udGFpbmVyIEFDTCB3aWxsIGJlXG4gICAgICogcmVtb3ZlZC5cbiAgICAgKlxuICAgICAqIFdoZW4geW91IGVzdGFibGlzaCBhIHN0b3JlZCBhY2Nlc3MgcG9saWN5IG9uIGEgY29udGFpbmVyLCBpdCBtYXkgdGFrZSB1cCB0byAzMCBzZWNvbmRzIHRvIHRha2UgZWZmZWN0LlxuICAgICAqIER1cmluZyB0aGlzIGludGVydmFsLCBhIHNoYXJlZCBhY2Nlc3Mgc2lnbmF0dXJlIHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdG9yZWQgYWNjZXNzIHBvbGljeSB3aWxsXG4gICAgICogZmFpbCB3aXRoIHN0YXR1cyBjb2RlIDQwMyAoRm9yYmlkZGVuKSwgdW50aWwgdGhlIGFjY2VzcyBwb2xpY3kgYmVjb21lcyBhY3RpdmUuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvc2V0LWNvbnRhaW5lci1hY2xcbiAgICAgKlxuICAgICAqIEBwYXJhbSBhY2Nlc3MgLSBUaGUgbGV2ZWwgb2YgcHVibGljIGFjY2VzcyB0byBkYXRhIGluIHRoZSBjb250YWluZXIuXG4gICAgICogQHBhcmFtIGNvbnRhaW5lckFjbCAtIEFycmF5IG9mIGVsZW1lbnRzIGVhY2ggaGF2aW5nIGEgdW5pcXVlIElkIGFuZCBkZXRhaWxzIG9mIHRoZSBhY2Nlc3MgcG9saWN5LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBDb250YWluZXIgU2V0IEFjY2VzcyBQb2xpY3kgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIHNldEFjY2Vzc1BvbGljeShhY2Nlc3MsIGNvbnRhaW5lckFjbCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIG9wdGlvbnMuY29uZGl0aW9ucyA9IG9wdGlvbnMuY29uZGl0aW9ucyB8fCB7fTtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJDb250YWluZXJDbGllbnQtc2V0QWNjZXNzUG9saWN5XCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgY29uc3QgYWNsID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGlkZW50aWZpZXIgb2YgY29udGFpbmVyQWNsIHx8IFtdKSB7XG4gICAgICAgICAgICAgICAgYWNsLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBhY2Nlc3NQb2xpY3k6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGlyZXNPbjogaWRlbnRpZmllci5hY2Nlc3NQb2xpY3kuZXhwaXJlc09uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0cnVuY2F0ZWRJU084MDYxRGF0ZShpZGVudGlmaWVyLmFjY2Vzc1BvbGljeS5leHBpcmVzT24pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGVybWlzc2lvbnM6IGlkZW50aWZpZXIuYWNjZXNzUG9saWN5LnBlcm1pc3Npb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRzT246IGlkZW50aWZpZXIuYWNjZXNzUG9saWN5LnN0YXJ0c09uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0cnVuY2F0ZWRJU084MDYxRGF0ZShpZGVudGlmaWVyLmFjY2Vzc1BvbGljeS5zdGFydHNPbilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGlkOiBpZGVudGlmaWVyLmlkLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuY29udGFpbmVyQ29udGV4dC5zZXRBY2Nlc3NQb2xpY3koe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGFjY2VzcyxcbiAgICAgICAgICAgICAgICBjb250YWluZXJBY2w6IGFjbCxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgYSB7QGxpbmsgQmxvYkxlYXNlQ2xpZW50fSB0aGF0IG1hbmFnZXMgbGVhc2VzIG9uIHRoZSBjb250YWluZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcG9zZUxlYXNlSWQgLSBJbml0aWFsIHByb3Bvc2VkIGxlYXNlIElkLlxuICAgICAqIEByZXR1cm5zIEEgbmV3IEJsb2JMZWFzZUNsaWVudCBvYmplY3QgZm9yIG1hbmFnaW5nIGxlYXNlcyBvbiB0aGUgY29udGFpbmVyLlxuICAgICAqL1xuICAgIGdldEJsb2JMZWFzZUNsaWVudChwcm9wb3NlTGVhc2VJZCkge1xuICAgICAgICByZXR1cm4gbmV3IEJsb2JMZWFzZUNsaWVudCh0aGlzLCBwcm9wb3NlTGVhc2VJZCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgYmxvY2sgYmxvYiwgb3IgdXBkYXRlcyB0aGUgY29udGVudCBvZiBhbiBleGlzdGluZyBibG9jayBibG9iLlxuICAgICAqXG4gICAgICogVXBkYXRpbmcgYW4gZXhpc3RpbmcgYmxvY2sgYmxvYiBvdmVyd3JpdGVzIGFueSBleGlzdGluZyBtZXRhZGF0YSBvbiB0aGUgYmxvYi5cbiAgICAgKiBQYXJ0aWFsIHVwZGF0ZXMgYXJlIG5vdCBzdXBwb3J0ZWQ7IHRoZSBjb250ZW50IG9mIHRoZSBleGlzdGluZyBibG9iIGlzXG4gICAgICogb3ZlcndyaXR0ZW4gd2l0aCB0aGUgbmV3IGNvbnRlbnQuIFRvIHBlcmZvcm0gYSBwYXJ0aWFsIHVwZGF0ZSBvZiBhIGJsb2NrIGJsb2IncyxcbiAgICAgKiB1c2Uge0BsaW5rIEJsb2NrQmxvYkNsaWVudC5zdGFnZUJsb2NrfSBhbmQge0BsaW5rIEJsb2NrQmxvYkNsaWVudC5jb21taXRCbG9ja0xpc3R9LlxuICAgICAqXG4gICAgICogVGhpcyBpcyBhIG5vbi1wYXJhbGxlbCB1cGxvYWRpbmcgbWV0aG9kLCBwbGVhc2UgdXNlIHtAbGluayBCbG9ja0Jsb2JDbGllbnQudXBsb2FkRmlsZX0sXG4gICAgICoge0BsaW5rIEJsb2NrQmxvYkNsaWVudC51cGxvYWRTdHJlYW19IG9yIHtAbGluayBCbG9ja0Jsb2JDbGllbnQudXBsb2FkQnJvd3NlckRhdGF9IGZvciBiZXR0ZXJcbiAgICAgKiBwZXJmb3JtYW5jZSB3aXRoIGNvbmN1cnJlbmN5IHVwbG9hZGluZy5cbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL3B1dC1ibG9iXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYmxvYk5hbWUgLSBOYW1lIG9mIHRoZSBibG9jayBibG9iIHRvIGNyZWF0ZSBvciB1cGRhdGUuXG4gICAgICogQHBhcmFtIGJvZHkgLSBCbG9iLCBzdHJpbmcsIEFycmF5QnVmZmVyLCBBcnJheUJ1ZmZlclZpZXcgb3IgYSBmdW5jdGlvblxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIHJldHVybnMgYSBuZXcgUmVhZGFibGUgc3RyZWFtIHdob3NlIG9mZnNldCBpcyBmcm9tIGRhdGEgc291cmNlIGJlZ2lubmluZy5cbiAgICAgKiBAcGFyYW0gY29udGVudExlbmd0aCAtIExlbmd0aCBvZiBib2R5IGluIGJ5dGVzLiBVc2UgQnVmZmVyLmJ5dGVMZW5ndGgoKSB0byBjYWxjdWxhdGUgYm9keSBsZW5ndGggZm9yIGFcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcgaW5jbHVkaW5nIG5vbiBub24tQmFzZTY0L0hleC1lbmNvZGVkIGNoYXJhY3RlcnMuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIGNvbmZpZ3VyZSB0aGUgQmxvY2sgQmxvYiBVcGxvYWQgb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIEJsb2NrIEJsb2IgdXBsb2FkIHJlc3BvbnNlIGRhdGEgYW5kIHRoZSBjb3JyZXNwb25kaW5nIEJsb2NrQmxvYkNsaWVudCBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBhc3luYyB1cGxvYWRCbG9ja0Jsb2IoYmxvYk5hbWUsIGJvZHksIGNvbnRlbnRMZW5ndGgsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkNvbnRhaW5lckNsaWVudC11cGxvYWRCbG9ja0Jsb2JcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBibG9ja0Jsb2JDbGllbnQgPSB0aGlzLmdldEJsb2NrQmxvYkNsaWVudChibG9iTmFtZSk7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGJsb2NrQmxvYkNsaWVudC51cGxvYWQoYm9keSwgY29udGVudExlbmd0aCwgdXBkYXRlZE9wdGlvbnMpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBibG9ja0Jsb2JDbGllbnQsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTWFya3MgdGhlIHNwZWNpZmllZCBibG9iIG9yIHNuYXBzaG90IGZvciBkZWxldGlvbi4gVGhlIGJsb2IgaXMgbGF0ZXIgZGVsZXRlZFxuICAgICAqIGR1cmluZyBnYXJiYWdlIGNvbGxlY3Rpb24uIE5vdGUgdGhhdCBpbiBvcmRlciB0byBkZWxldGUgYSBibG9iLCB5b3UgbXVzdCBkZWxldGVcbiAgICAgKiBhbGwgb2YgaXRzIHNuYXBzaG90cy4gWW91IGNhbiBkZWxldGUgYm90aCBhdCB0aGUgc2FtZSB0aW1lIHdpdGggdGhlIERlbGV0ZVxuICAgICAqIEJsb2Igb3BlcmF0aW9uLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2RlbGV0ZS1ibG9iXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYmxvYk5hbWUgLVxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBCbG9iIERlbGV0ZSBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgQmxvY2sgYmxvYiBkZWxldGlvbiByZXNwb25zZSBkYXRhLlxuICAgICAqL1xuICAgIGFzeW5jIGRlbGV0ZUJsb2IoYmxvYk5hbWUsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkNvbnRhaW5lckNsaWVudC1kZWxldGVCbG9iXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgbGV0IGJsb2JDbGllbnQgPSB0aGlzLmdldEJsb2JDbGllbnQoYmxvYk5hbWUpO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyc2lvbklkKSB7XG4gICAgICAgICAgICAgICAgYmxvYkNsaWVudCA9IGJsb2JDbGllbnQud2l0aFZlcnNpb24ob3B0aW9ucy52ZXJzaW9uSWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGJsb2JDbGllbnQuZGVsZXRlKHVwZGF0ZWRPcHRpb25zKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIGxpc3RCbG9iRmxhdFNlZ21lbnQgcmV0dXJucyBhIHNpbmdsZSBzZWdtZW50IG9mIGJsb2JzIHN0YXJ0aW5nIGZyb20gdGhlXG4gICAgICogc3BlY2lmaWVkIE1hcmtlci4gVXNlIGFuIGVtcHR5IE1hcmtlciB0byBzdGFydCBlbnVtZXJhdGlvbiBmcm9tIHRoZSBiZWdpbm5pbmcuXG4gICAgICogQWZ0ZXIgZ2V0dGluZyBhIHNlZ21lbnQsIHByb2Nlc3MgaXQsIGFuZCB0aGVuIGNhbGwgbGlzdEJsb2JzRmxhdFNlZ21lbnQgYWdhaW5cbiAgICAgKiAocGFzc2luZyB0aGUgdGhlIHByZXZpb3VzbHktcmV0dXJuZWQgTWFya2VyKSB0byBnZXQgdGhlIG5leHQgc2VnbWVudC5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9saXN0LWJsb2JzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbWFya2VyIC0gQSBzdHJpbmcgdmFsdWUgdGhhdCBpZGVudGlmaWVzIHRoZSBwb3J0aW9uIG9mIHRoZSBsaXN0IHRvIGJlIHJldHVybmVkIHdpdGggdGhlIG5leHQgbGlzdCBvcGVyYXRpb24uXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIENvbnRhaW5lciBMaXN0IEJsb2IgRmxhdCBTZWdtZW50IG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBsaXN0QmxvYkZsYXRTZWdtZW50KG1hcmtlciwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQ29udGFpbmVyQ2xpZW50LWxpc3RCbG9iRmxhdFNlZ21lbnRcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuY29udGFpbmVyQ29udGV4dC5saXN0QmxvYkZsYXRTZWdtZW50KE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7IG1hcmtlciB9LCBvcHRpb25zKSwgeyB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMgfSkpKTtcbiAgICAgICAgICAgIGNvbnN0IHdyYXBwZWRSZXNwb25zZSA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcmVzcG9uc2UpLCB7IF9yZXNwb25zZTogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCByZXNwb25zZS5fcmVzcG9uc2UpLCB7IHBhcnNlZEJvZHk6IENvbnZlcnRJbnRlcm5hbFJlc3BvbnNlT2ZMaXN0QmxvYkZsYXQocmVzcG9uc2UuX3Jlc3BvbnNlLnBhcnNlZEJvZHkpIH0pLCBzZWdtZW50OiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHJlc3BvbnNlLnNlZ21lbnQpLCB7IGJsb2JJdGVtczogcmVzcG9uc2Uuc2VnbWVudC5ibG9iSXRlbXMubWFwKChibG9iSXRlbUludGVybmFsKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9iSXRlbSA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYmxvYkl0ZW1JbnRlcm5hbCksIHsgbmFtZTogQmxvYk5hbWVUb1N0cmluZyhibG9iSXRlbUludGVybmFsLm5hbWUpLCB0YWdzOiB0b1RhZ3MoYmxvYkl0ZW1JbnRlcm5hbC5ibG9iVGFncyksIG9iamVjdFJlcGxpY2F0aW9uU291cmNlUHJvcGVydGllczogcGFyc2VPYmplY3RSZXBsaWNhdGlvblJlY29yZChibG9iSXRlbUludGVybmFsLm9iamVjdFJlcGxpY2F0aW9uTWV0YWRhdGEpIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJsb2JJdGVtO1xuICAgICAgICAgICAgICAgICAgICB9KSB9KSB9KTtcbiAgICAgICAgICAgIHJldHVybiB3cmFwcGVkUmVzcG9uc2U7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBsaXN0QmxvYkhpZXJhcmNoeVNlZ21lbnQgcmV0dXJucyBhIHNpbmdsZSBzZWdtZW50IG9mIGJsb2JzIHN0YXJ0aW5nIGZyb21cbiAgICAgKiB0aGUgc3BlY2lmaWVkIE1hcmtlci4gVXNlIGFuIGVtcHR5IE1hcmtlciB0byBzdGFydCBlbnVtZXJhdGlvbiBmcm9tIHRoZVxuICAgICAqIGJlZ2lubmluZy4gQWZ0ZXIgZ2V0dGluZyBhIHNlZ21lbnQsIHByb2Nlc3MgaXQsIGFuZCB0aGVuIGNhbGwgbGlzdEJsb2JzSGllcmFyY2hpY2FsU2VnbWVudFxuICAgICAqIGFnYWluIChwYXNzaW5nIHRoZSB0aGUgcHJldmlvdXNseS1yZXR1cm5lZCBNYXJrZXIpIHRvIGdldCB0aGUgbmV4dCBzZWdtZW50LlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2xpc3QtYmxvYnNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBkZWxpbWl0ZXIgLSBUaGUgY2hhcmFjdGVyIG9yIHN0cmluZyB1c2VkIHRvIGRlZmluZSB0aGUgdmlydHVhbCBoaWVyYXJjaHlcbiAgICAgKiBAcGFyYW0gbWFya2VyIC0gQSBzdHJpbmcgdmFsdWUgdGhhdCBpZGVudGlmaWVzIHRoZSBwb3J0aW9uIG9mIHRoZSBsaXN0IHRvIGJlIHJldHVybmVkIHdpdGggdGhlIG5leHQgbGlzdCBvcGVyYXRpb24uXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIENvbnRhaW5lciBMaXN0IEJsb2IgSGllcmFyY2h5IFNlZ21lbnQgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGxpc3RCbG9iSGllcmFyY2h5U2VnbWVudChkZWxpbWl0ZXIsIG1hcmtlciwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQ29udGFpbmVyQ2xpZW50LWxpc3RCbG9iSGllcmFyY2h5U2VnbWVudFwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5jb250YWluZXJDb250ZXh0Lmxpc3RCbG9iSGllcmFyY2h5U2VnbWVudChkZWxpbWl0ZXIsIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7IG1hcmtlciB9LCBvcHRpb25zKSwgeyB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMgfSkpKTtcbiAgICAgICAgICAgIGNvbnN0IHdyYXBwZWRSZXNwb25zZSA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcmVzcG9uc2UpLCB7IF9yZXNwb25zZTogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCByZXNwb25zZS5fcmVzcG9uc2UpLCB7IHBhcnNlZEJvZHk6IENvbnZlcnRJbnRlcm5hbFJlc3BvbnNlT2ZMaXN0QmxvYkhpZXJhcmNoeShyZXNwb25zZS5fcmVzcG9uc2UucGFyc2VkQm9keSkgfSksIHNlZ21lbnQ6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcmVzcG9uc2Uuc2VnbWVudCksIHsgYmxvYkl0ZW1zOiByZXNwb25zZS5zZWdtZW50LmJsb2JJdGVtcy5tYXAoKGJsb2JJdGVtSW50ZXJuYWwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2JJdGVtID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBibG9iSXRlbUludGVybmFsKSwgeyBuYW1lOiBCbG9iTmFtZVRvU3RyaW5nKGJsb2JJdGVtSW50ZXJuYWwubmFtZSksIHRhZ3M6IHRvVGFncyhibG9iSXRlbUludGVybmFsLmJsb2JUYWdzKSwgb2JqZWN0UmVwbGljYXRpb25Tb3VyY2VQcm9wZXJ0aWVzOiBwYXJzZU9iamVjdFJlcGxpY2F0aW9uUmVjb3JkKGJsb2JJdGVtSW50ZXJuYWwub2JqZWN0UmVwbGljYXRpb25NZXRhZGF0YSkgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYmxvYkl0ZW07XG4gICAgICAgICAgICAgICAgICAgIH0pLCBibG9iUHJlZml4ZXM6IChfYSA9IHJlc3BvbnNlLnNlZ21lbnQuYmxvYlByZWZpeGVzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubWFwKChibG9iUHJlZml4SW50ZXJuYWwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2JQcmVmaXggPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGJsb2JQcmVmaXhJbnRlcm5hbCksIHsgbmFtZTogQmxvYk5hbWVUb1N0cmluZyhibG9iUHJlZml4SW50ZXJuYWwubmFtZSkgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYmxvYlByZWZpeDtcbiAgICAgICAgICAgICAgICAgICAgfSkgfSkgfSk7XG4gICAgICAgICAgICByZXR1cm4gd3JhcHBlZFJlc3BvbnNlO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBBc3luY0l0ZXJhYmxlSXRlcmF0b3IgZm9yIENvbnRhaW5lckxpc3RCbG9iRmxhdFNlZ21lbnRSZXNwb25zZVxuICAgICAqXG4gICAgICogQHBhcmFtIG1hcmtlciAtIEEgc3RyaW5nIHZhbHVlIHRoYXQgaWRlbnRpZmllcyB0aGUgcG9ydGlvbiBvZlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbGlzdCBvZiBibG9icyB0byBiZSByZXR1cm5lZCB3aXRoIHRoZSBuZXh0IGxpc3Rpbmcgb3BlcmF0aW9uLiBUaGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uIHJldHVybnMgdGhlIENvbnRpbnVhdGlvblRva2VuIHZhbHVlIHdpdGhpbiB0aGUgcmVzcG9uc2UgYm9keSBpZiB0aGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGluZyBvcGVyYXRpb24gZGlkIG5vdCByZXR1cm4gYWxsIGJsb2JzIHJlbWFpbmluZyB0byBiZSBsaXN0ZWRcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgY3VycmVudCBwYWdlLiBUaGUgQ29udGludWF0aW9uVG9rZW4gdmFsdWUgY2FuIGJlIHVzZWQgYXMgdGhlIHZhbHVlIGZvclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWFya2VyIHBhcmFtZXRlciBpbiBhIHN1YnNlcXVlbnQgY2FsbCB0byByZXF1ZXN0IHRoZSBuZXh0IHBhZ2Ugb2YgbGlzdFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy4gVGhlIG1hcmtlciB2YWx1ZSBpcyBvcGFxdWUgdG8gdGhlIGNsaWVudC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gbGlzdCBibG9icyBvcGVyYXRpb24uXG4gICAgICovXG4gICAgbGlzdFNlZ21lbnRzKG1hcmtlcl8xKSB7XG4gICAgICAgIHJldHVybiB0c2xpYi5fX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24qIGxpc3RTZWdtZW50c18xKG1hcmtlciwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgICAgICBsZXQgbGlzdEJsb2JzRmxhdFNlZ21lbnRSZXNwb25zZTtcbiAgICAgICAgICAgIGlmICghIW1hcmtlciB8fCBtYXJrZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgbGlzdEJsb2JzRmxhdFNlZ21lbnRSZXNwb25zZSA9IHlpZWxkIHRzbGliLl9fYXdhaXQodGhpcy5saXN0QmxvYkZsYXRTZWdtZW50KG1hcmtlciwgb3B0aW9ucykpO1xuICAgICAgICAgICAgICAgICAgICBtYXJrZXIgPSBsaXN0QmxvYnNGbGF0U2VnbWVudFJlc3BvbnNlLmNvbnRpbnVhdGlvblRva2VuO1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCB5aWVsZCB0c2xpYi5fX2F3YWl0KHlpZWxkIHRzbGliLl9fYXdhaXQobGlzdEJsb2JzRmxhdFNlZ21lbnRSZXNwb25zZSkpO1xuICAgICAgICAgICAgICAgIH0gd2hpbGUgKG1hcmtlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIEFzeW5jSXRlcmFibGVJdGVyYXRvciBvZiB7QGxpbmsgQmxvYkl0ZW19IG9iamVjdHNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBsaXN0IGJsb2JzIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBsaXN0SXRlbXMoKSB7XG4gICAgICAgIHJldHVybiB0c2xpYi5fX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24qIGxpc3RJdGVtc18xKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICAgICAgdmFyIF9hLCBlXzEsIF9iLCBfYztcbiAgICAgICAgICAgIGxldCBtYXJrZXI7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIF9kID0gdHJ1ZSwgX2UgPSB0c2xpYi5fX2FzeW5jVmFsdWVzKHRoaXMubGlzdFNlZ21lbnRzKG1hcmtlciwgb3B0aW9ucykpLCBfZjsgX2YgPSB5aWVsZCB0c2xpYi5fX2F3YWl0KF9lLm5leHQoKSksIF9hID0gX2YuZG9uZSwgIV9hOyBfZCA9IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgX2MgPSBfZi52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgX2QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlzdEJsb2JzRmxhdFNlZ21lbnRSZXNwb25zZSA9IF9jO1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCB0c2xpYi5fX2F3YWl0KHlpZWxkKiB0c2xpYi5fX2FzeW5jRGVsZWdhdG9yKHRzbGliLl9fYXN5bmNWYWx1ZXMobGlzdEJsb2JzRmxhdFNlZ21lbnRSZXNwb25zZS5zZWdtZW50LmJsb2JJdGVtcykpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFfZCAmJiAhX2EgJiYgKF9iID0gX2UucmV0dXJuKSkgeWllbGQgdHNsaWIuX19hd2FpdChfYi5jYWxsKF9lKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gYXN5bmMgaXRlcmFibGUgaXRlcmF0b3IgdG8gbGlzdCBhbGwgdGhlIGJsb2JzXG4gICAgICogdW5kZXIgdGhlIHNwZWNpZmllZCBhY2NvdW50LlxuICAgICAqXG4gICAgICogLmJ5UGFnZSgpIHJldHVybnMgYW4gYXN5bmMgaXRlcmFibGUgaXRlcmF0b3IgdG8gbGlzdCB0aGUgYmxvYnMgaW4gcGFnZXMuXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIGBmb3IgYXdhaXRgIHN5bnRheDpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogLy8gR2V0IHRoZSBjb250YWluZXJDbGllbnQgYmVmb3JlIHlvdSBydW4gdGhlc2Ugc25pcHBldHMsXG4gICAgICogLy8gQ2FuIGJlIG9idGFpbmVkIGZyb20gYGJsb2JTZXJ2aWNlQ2xpZW50LmdldENvbnRhaW5lckNsaWVudChcIjx5b3VyLWNvbnRhaW5lci1uYW1lPlwiKTtgXG4gICAgICogbGV0IGkgPSAxO1xuICAgICAqIGZvciBhd2FpdCAoY29uc3QgYmxvYiBvZiBjb250YWluZXJDbGllbnQubGlzdEJsb2JzRmxhdCgpKSB7XG4gICAgICogICBjb25zb2xlLmxvZyhgQmxvYiAke2krK306ICR7YmxvYi5uYW1lfWApO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNpbmcgYGl0ZXIubmV4dCgpYDpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogbGV0IGkgPSAxO1xuICAgICAqIGxldCBpdGVyID0gY29udGFpbmVyQ2xpZW50Lmxpc3RCbG9ic0ZsYXQoKTtcbiAgICAgKiBsZXQgYmxvYkl0ZW0gPSBhd2FpdCBpdGVyLm5leHQoKTtcbiAgICAgKiB3aGlsZSAoIWJsb2JJdGVtLmRvbmUpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKGBCbG9iICR7aSsrfTogJHtibG9iSXRlbS52YWx1ZS5uYW1lfWApO1xuICAgICAqICAgYmxvYkl0ZW0gPSBhd2FpdCBpdGVyLm5leHQoKTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIGBieVBhZ2UoKWA6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIHBhc3Npbmcgb3B0aW9uYWwgbWF4UGFnZVNpemUgaW4gdGhlIHBhZ2Ugc2V0dGluZ3NcbiAgICAgKiBsZXQgaSA9IDE7XG4gICAgICogZm9yIGF3YWl0IChjb25zdCByZXNwb25zZSBvZiBjb250YWluZXJDbGllbnQubGlzdEJsb2JzRmxhdCgpLmJ5UGFnZSh7IG1heFBhZ2VTaXplOiAyMCB9KSkge1xuICAgICAqICAgZm9yIChjb25zdCBibG9iIG9mIHJlc3BvbnNlLnNlZ21lbnQuYmxvYkl0ZW1zKSB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGBCbG9iICR7aSsrfTogJHtibG9iLm5hbWV9YCk7XG4gICAgICogICB9XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBwYWdpbmcgd2l0aCBhIG1hcmtlcjpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogbGV0IGkgPSAxO1xuICAgICAqIGxldCBpdGVyYXRvciA9IGNvbnRhaW5lckNsaWVudC5saXN0QmxvYnNGbGF0KCkuYnlQYWdlKHsgbWF4UGFnZVNpemU6IDIgfSk7XG4gICAgICogbGV0IHJlc3BvbnNlID0gKGF3YWl0IGl0ZXJhdG9yLm5leHQoKSkudmFsdWU7XG4gICAgICpcbiAgICAgKiAvLyBQcmludHMgMiBibG9iIG5hbWVzXG4gICAgICogZm9yIChjb25zdCBibG9iIG9mIHJlc3BvbnNlLnNlZ21lbnQuYmxvYkl0ZW1zKSB7XG4gICAgICogICBjb25zb2xlLmxvZyhgQmxvYiAke2krK306ICR7YmxvYi5uYW1lfWApO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIC8vIEdldHMgbmV4dCBtYXJrZXJcbiAgICAgKiBsZXQgbWFya2VyID0gcmVzcG9uc2UuY29udGludWF0aW9uVG9rZW47XG4gICAgICpcbiAgICAgKiAvLyBQYXNzaW5nIG5leHQgbWFya2VyIGFzIGNvbnRpbnVhdGlvblRva2VuXG4gICAgICpcbiAgICAgKiBpdGVyYXRvciA9IGNvbnRhaW5lckNsaWVudC5saXN0QmxvYnNGbGF0KCkuYnlQYWdlKHsgY29udGludWF0aW9uVG9rZW46IG1hcmtlciwgbWF4UGFnZVNpemU6IDEwIH0pO1xuICAgICAqIHJlc3BvbnNlID0gKGF3YWl0IGl0ZXJhdG9yLm5leHQoKSkudmFsdWU7XG4gICAgICpcbiAgICAgKiAvLyBQcmludHMgMTAgYmxvYiBuYW1lc1xuICAgICAqIGZvciAoY29uc3QgYmxvYiBvZiByZXNwb25zZS5zZWdtZW50LmJsb2JJdGVtcykge1xuICAgICAqICAgY29uc29sZS5sb2coYEJsb2IgJHtpKyt9OiAke2Jsb2IubmFtZX1gKTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gbGlzdCBibG9icy5cbiAgICAgKiBAcmV0dXJucyBBbiBhc3luY0l0ZXJhYmxlSXRlcmF0b3IgdGhhdCBzdXBwb3J0cyBwYWdpbmcuXG4gICAgICovXG4gICAgbGlzdEJsb2JzRmxhdChvcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgaW5jbHVkZSA9IFtdO1xuICAgICAgICBpZiAob3B0aW9ucy5pbmNsdWRlQ29weSkge1xuICAgICAgICAgICAgaW5jbHVkZS5wdXNoKFwiY29weVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5pbmNsdWRlRGVsZXRlZCkge1xuICAgICAgICAgICAgaW5jbHVkZS5wdXNoKFwiZGVsZXRlZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5pbmNsdWRlTWV0YWRhdGEpIHtcbiAgICAgICAgICAgIGluY2x1ZGUucHVzaChcIm1ldGFkYXRhXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVTbmFwc2hvdHMpIHtcbiAgICAgICAgICAgIGluY2x1ZGUucHVzaChcInNuYXBzaG90c1wiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5pbmNsdWRlVmVyc2lvbnMpIHtcbiAgICAgICAgICAgIGluY2x1ZGUucHVzaChcInZlcnNpb25zXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVVbmNvbW1pdGVkQmxvYnMpIHtcbiAgICAgICAgICAgIGluY2x1ZGUucHVzaChcInVuY29tbWl0dGVkYmxvYnNcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZVRhZ3MpIHtcbiAgICAgICAgICAgIGluY2x1ZGUucHVzaChcInRhZ3NcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZURlbGV0ZWRXaXRoVmVyc2lvbnMpIHtcbiAgICAgICAgICAgIGluY2x1ZGUucHVzaChcImRlbGV0ZWR3aXRodmVyc2lvbnNcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZUltbXV0YWJpbGl0eVBvbGljeSkge1xuICAgICAgICAgICAgaW5jbHVkZS5wdXNoKFwiaW1tdXRhYmlsaXR5cG9saWN5XCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVMZWdhbEhvbGQpIHtcbiAgICAgICAgICAgIGluY2x1ZGUucHVzaChcImxlZ2FsaG9sZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5wcmVmaXggPT09IFwiXCIpIHtcbiAgICAgICAgICAgIG9wdGlvbnMucHJlZml4ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRPcHRpb25zID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKSwgKGluY2x1ZGUubGVuZ3RoID4gMCA/IHsgaW5jbHVkZTogaW5jbHVkZSB9IDoge30pKTtcbiAgICAgICAgLy8gQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIHRvIGl0ZXJhdGUgb3ZlciBibG9ic1xuICAgICAgICBjb25zdCBpdGVyID0gdGhpcy5saXN0SXRlbXModXBkYXRlZE9wdGlvbnMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBUaGUgbmV4dCBtZXRob2QsIHBhcnQgb2YgdGhlIGl0ZXJhdGlvbiBwcm90b2NvbFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBuZXh0KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVyLm5leHQoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFRoZSBjb25uZWN0aW9uIHRvIHRoZSBhc3luYyBpdGVyYXRvciwgcGFydCBvZiB0aGUgaXRlcmF0aW9uIHByb3RvY29sXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBSZXR1cm4gYW4gQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIHRoYXQgd29ya3MgYSBwYWdlIGF0IGEgdGltZVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBieVBhZ2U6IChzZXR0aW5ncyA9IHt9KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubGlzdFNlZ21lbnRzKHNldHRpbmdzLmNvbnRpbnVhdGlvblRva2VuLCBPYmplY3QuYXNzaWduKHsgbWF4UGFnZVNpemU6IHNldHRpbmdzLm1heFBhZ2VTaXplIH0sIHVwZGF0ZWRPcHRpb25zKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIEFzeW5jSXRlcmFibGVJdGVyYXRvciBmb3IgQ29udGFpbmVyTGlzdEJsb2JIaWVyYXJjaHlTZWdtZW50UmVzcG9uc2VcbiAgICAgKlxuICAgICAqIEBwYXJhbSBkZWxpbWl0ZXIgLSBUaGUgY2hhcmFjdGVyIG9yIHN0cmluZyB1c2VkIHRvIGRlZmluZSB0aGUgdmlydHVhbCBoaWVyYXJjaHlcbiAgICAgKiBAcGFyYW0gbWFya2VyIC0gQSBzdHJpbmcgdmFsdWUgdGhhdCBpZGVudGlmaWVzIHRoZSBwb3J0aW9uIG9mXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBsaXN0IG9mIGJsb2JzIHRvIGJlIHJldHVybmVkIHdpdGggdGhlIG5leHQgbGlzdGluZyBvcGVyYXRpb24uIFRoZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gcmV0dXJucyB0aGUgQ29udGludWF0aW9uVG9rZW4gdmFsdWUgd2l0aGluIHRoZSByZXNwb25zZSBib2R5IGlmIHRoZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0aW5nIG9wZXJhdGlvbiBkaWQgbm90IHJldHVybiBhbGwgYmxvYnMgcmVtYWluaW5nIHRvIGJlIGxpc3RlZFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSBjdXJyZW50IHBhZ2UuIFRoZSBDb250aW51YXRpb25Ub2tlbiB2YWx1ZSBjYW4gYmUgdXNlZCBhcyB0aGUgdmFsdWUgZm9yXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBtYXJrZXIgcGFyYW1ldGVyIGluIGEgc3Vic2VxdWVudCBjYWxsIHRvIHJlcXVlc3QgdGhlIG5leHQgcGFnZSBvZiBsaXN0XG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLiBUaGUgbWFya2VyIHZhbHVlIGlzIG9wYXF1ZSB0byB0aGUgY2xpZW50LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBsaXN0IGJsb2JzIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBsaXN0SGllcmFyY2h5U2VnbWVudHMoZGVsaW1pdGVyXzEsIG1hcmtlcl8xKSB7XG4gICAgICAgIHJldHVybiB0c2xpYi5fX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24qIGxpc3RIaWVyYXJjaHlTZWdtZW50c18xKGRlbGltaXRlciwgbWFya2VyLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgICAgIGxldCBsaXN0QmxvYnNIaWVyYXJjaHlTZWdtZW50UmVzcG9uc2U7XG4gICAgICAgICAgICBpZiAoISFtYXJrZXIgfHwgbWFya2VyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RCbG9ic0hpZXJhcmNoeVNlZ21lbnRSZXNwb25zZSA9IHlpZWxkIHRzbGliLl9fYXdhaXQodGhpcy5saXN0QmxvYkhpZXJhcmNoeVNlZ21lbnQoZGVsaW1pdGVyLCBtYXJrZXIsIG9wdGlvbnMpKTtcbiAgICAgICAgICAgICAgICAgICAgbWFya2VyID0gbGlzdEJsb2JzSGllcmFyY2h5U2VnbWVudFJlc3BvbnNlLmNvbnRpbnVhdGlvblRva2VuO1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCB5aWVsZCB0c2xpYi5fX2F3YWl0KHlpZWxkIHRzbGliLl9fYXdhaXQobGlzdEJsb2JzSGllcmFyY2h5U2VnbWVudFJlc3BvbnNlKSk7XG4gICAgICAgICAgICAgICAgfSB3aGlsZSAobWFya2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIGZvciB7QGxpbmsgQmxvYlByZWZpeH0gYW5kIHtAbGluayBCbG9iSXRlbX0gb2JqZWN0cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkZWxpbWl0ZXIgLSBUaGUgY2hhcmFjdGVyIG9yIHN0cmluZyB1c2VkIHRvIGRlZmluZSB0aGUgdmlydHVhbCBoaWVyYXJjaHlcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gbGlzdCBibG9icyBvcGVyYXRpb24uXG4gICAgICovXG4gICAgbGlzdEl0ZW1zQnlIaWVyYXJjaHkoZGVsaW1pdGVyXzEpIHtcbiAgICAgICAgcmV0dXJuIHRzbGliLl9fYXN5bmNHZW5lcmF0b3IodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiogbGlzdEl0ZW1zQnlIaWVyYXJjaHlfMShkZWxpbWl0ZXIsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICAgICAgdmFyIF9hLCBlXzIsIF9iLCBfYztcbiAgICAgICAgICAgIGxldCBtYXJrZXI7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIF9kID0gdHJ1ZSwgX2UgPSB0c2xpYi5fX2FzeW5jVmFsdWVzKHRoaXMubGlzdEhpZXJhcmNoeVNlZ21lbnRzKGRlbGltaXRlciwgbWFya2VyLCBvcHRpb25zKSksIF9mOyBfZiA9IHlpZWxkIHRzbGliLl9fYXdhaXQoX2UubmV4dCgpKSwgX2EgPSBfZi5kb25lLCAhX2E7IF9kID0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICBfYyA9IF9mLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBfZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBsaXN0QmxvYnNIaWVyYXJjaHlTZWdtZW50UmVzcG9uc2UgPSBfYztcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VnbWVudCA9IGxpc3RCbG9ic0hpZXJhcmNoeVNlZ21lbnRSZXNwb25zZS5zZWdtZW50O1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2VnbWVudC5ibG9iUHJlZml4ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcHJlZml4IG9mIHNlZ21lbnQuYmxvYlByZWZpeGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgeWllbGQgdHNsaWIuX19hd2FpdChPYmplY3QuYXNzaWduKHsga2luZDogXCJwcmVmaXhcIiB9LCBwcmVmaXgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGJsb2Igb2Ygc2VnbWVudC5ibG9iSXRlbXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIHlpZWxkIHRzbGliLl9fYXdhaXQoT2JqZWN0LmFzc2lnbih7IGtpbmQ6IFwiYmxvYlwiIH0sIGJsb2IpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlXzJfMSkgeyBlXzIgPSB7IGVycm9yOiBlXzJfMSB9OyB9XG4gICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIV9kICYmICFfYSAmJiAoX2IgPSBfZS5yZXR1cm4pKSB5aWVsZCB0c2xpYi5fX2F3YWl0KF9iLmNhbGwoX2UpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzIpIHRocm93IGVfMi5lcnJvcjsgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBhc3luYyBpdGVyYWJsZSBpdGVyYXRvciB0byBsaXN0IGFsbCB0aGUgYmxvYnMgYnkgaGllcmFyY2h5LlxuICAgICAqIHVuZGVyIHRoZSBzcGVjaWZpZWQgYWNjb3VudC5cbiAgICAgKlxuICAgICAqIC5ieVBhZ2UoKSByZXR1cm5zIGFuIGFzeW5jIGl0ZXJhYmxlIGl0ZXJhdG9yIHRvIGxpc3QgdGhlIGJsb2JzIGJ5IGhpZXJhcmNoeSBpbiBwYWdlcy5cbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNpbmcgYGZvciBhd2FpdGAgc3ludGF4OlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBmb3IgYXdhaXQgKGNvbnN0IGl0ZW0gb2YgY29udGFpbmVyQ2xpZW50Lmxpc3RCbG9ic0J5SGllcmFyY2h5KFwiL1wiKSkge1xuICAgICAqICAgaWYgKGl0ZW0ua2luZCA9PT0gXCJwcmVmaXhcIikge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhgXFx0QmxvYlByZWZpeDogJHtpdGVtLm5hbWV9YCk7XG4gICAgICogICB9IGVsc2Uge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhgXFx0QmxvYkl0ZW06IG5hbWUgLSAke2l0ZW0ubmFtZX1gKTtcbiAgICAgKiAgIH1cbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIGBpdGVyLm5leHQoKWA6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGxldCBpdGVyID0gY29udGFpbmVyQ2xpZW50Lmxpc3RCbG9ic0J5SGllcmFyY2h5KFwiL1wiLCB7IHByZWZpeDogXCJwcmVmaXgxL1wiIH0pO1xuICAgICAqIGxldCBlbnRpdHkgPSBhd2FpdCBpdGVyLm5leHQoKTtcbiAgICAgKiB3aGlsZSAoIWVudGl0eS5kb25lKSB7XG4gICAgICogICBsZXQgaXRlbSA9IGVudGl0eS52YWx1ZTtcbiAgICAgKiAgIGlmIChpdGVtLmtpbmQgPT09IFwicHJlZml4XCIpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coYFxcdEJsb2JQcmVmaXg6ICR7aXRlbS5uYW1lfWApO1xuICAgICAqICAgfSBlbHNlIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coYFxcdEJsb2JJdGVtOiBuYW1lIC0gJHtpdGVtLm5hbWV9YCk7XG4gICAgICogICB9XG4gICAgICogICBlbnRpdHkgPSBhd2FpdCBpdGVyLm5leHQoKTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIGBieVBhZ2UoKWA6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnNvbGUubG9nKFwiTGlzdGluZyBibG9icyBieSBoaWVyYXJjaHkgYnkgcGFnZVwiKTtcbiAgICAgKiBmb3IgYXdhaXQgKGNvbnN0IHJlc3BvbnNlIG9mIGNvbnRhaW5lckNsaWVudC5saXN0QmxvYnNCeUhpZXJhcmNoeShcIi9cIikuYnlQYWdlKCkpIHtcbiAgICAgKiAgIGNvbnN0IHNlZ21lbnQgPSByZXNwb25zZS5zZWdtZW50O1xuICAgICAqICAgaWYgKHNlZ21lbnQuYmxvYlByZWZpeGVzKSB7XG4gICAgICogICAgIGZvciAoY29uc3QgcHJlZml4IG9mIHNlZ21lbnQuYmxvYlByZWZpeGVzKSB7XG4gICAgICogICAgICAgY29uc29sZS5sb2coYFxcdEJsb2JQcmVmaXg6ICR7cHJlZml4Lm5hbWV9YCk7XG4gICAgICogICAgIH1cbiAgICAgKiAgIH1cbiAgICAgKiAgIGZvciAoY29uc3QgYmxvYiBvZiByZXNwb25zZS5zZWdtZW50LmJsb2JJdGVtcykge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhgXFx0QmxvYkl0ZW06IG5hbWUgLSAke2Jsb2IubmFtZX1gKTtcbiAgICAgKiAgIH1cbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIHBhZ2luZyB3aXRoIGEgbWF4IHBhZ2Ugc2l6ZTpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogY29uc29sZS5sb2coXCJMaXN0aW5nIGJsb2JzIGJ5IGhpZXJhcmNoeSBieSBwYWdlLCBzcGVjaWZ5aW5nIGEgcHJlZml4IGFuZCBhIG1heCBwYWdlIHNpemVcIik7XG4gICAgICpcbiAgICAgKiBsZXQgaSA9IDE7XG4gICAgICogZm9yIGF3YWl0IChjb25zdCByZXNwb25zZSBvZiBjb250YWluZXJDbGllbnRcbiAgICAgKiAgIC5saXN0QmxvYnNCeUhpZXJhcmNoeShcIi9cIiwgeyBwcmVmaXg6IFwicHJlZml4Mi9zdWIxL1wiIH0pXG4gICAgICogICAuYnlQYWdlKHsgbWF4UGFnZVNpemU6IDIgfSkpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKGBQYWdlICR7aSsrfWApO1xuICAgICAqICAgY29uc3Qgc2VnbWVudCA9IHJlc3BvbnNlLnNlZ21lbnQ7XG4gICAgICpcbiAgICAgKiAgIGlmIChzZWdtZW50LmJsb2JQcmVmaXhlcykge1xuICAgICAqICAgICBmb3IgKGNvbnN0IHByZWZpeCBvZiBzZWdtZW50LmJsb2JQcmVmaXhlcykge1xuICAgICAqICAgICAgIGNvbnNvbGUubG9nKGBcXHRCbG9iUHJlZml4OiAke3ByZWZpeC5uYW1lfWApO1xuICAgICAqICAgICB9XG4gICAgICogICB9XG4gICAgICpcbiAgICAgKiAgIGZvciAoY29uc3QgYmxvYiBvZiByZXNwb25zZS5zZWdtZW50LmJsb2JJdGVtcykge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhgXFx0QmxvYkl0ZW06IG5hbWUgLSAke2Jsb2IubmFtZX1gKTtcbiAgICAgKiAgIH1cbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGVsaW1pdGVyIC0gVGhlIGNoYXJhY3RlciBvciBzdHJpbmcgdXNlZCB0byBkZWZpbmUgdGhlIHZpcnR1YWwgaGllcmFyY2h5XG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIGxpc3QgYmxvYnMgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGxpc3RCbG9ic0J5SGllcmFyY2h5KGRlbGltaXRlciwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGlmIChkZWxpbWl0ZXIgPT09IFwiXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiZGVsaW1pdGVyIHNob3VsZCBjb250YWluIG9uZSBvciBtb3JlIGNoYXJhY3RlcnNcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5jbHVkZSA9IFtdO1xuICAgICAgICBpZiAob3B0aW9ucy5pbmNsdWRlQ29weSkge1xuICAgICAgICAgICAgaW5jbHVkZS5wdXNoKFwiY29weVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5pbmNsdWRlRGVsZXRlZCkge1xuICAgICAgICAgICAgaW5jbHVkZS5wdXNoKFwiZGVsZXRlZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5pbmNsdWRlTWV0YWRhdGEpIHtcbiAgICAgICAgICAgIGluY2x1ZGUucHVzaChcIm1ldGFkYXRhXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVTbmFwc2hvdHMpIHtcbiAgICAgICAgICAgIGluY2x1ZGUucHVzaChcInNuYXBzaG90c1wiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5pbmNsdWRlVmVyc2lvbnMpIHtcbiAgICAgICAgICAgIGluY2x1ZGUucHVzaChcInZlcnNpb25zXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVVbmNvbW1pdGVkQmxvYnMpIHtcbiAgICAgICAgICAgIGluY2x1ZGUucHVzaChcInVuY29tbWl0dGVkYmxvYnNcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZVRhZ3MpIHtcbiAgICAgICAgICAgIGluY2x1ZGUucHVzaChcInRhZ3NcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZURlbGV0ZWRXaXRoVmVyc2lvbnMpIHtcbiAgICAgICAgICAgIGluY2x1ZGUucHVzaChcImRlbGV0ZWR3aXRodmVyc2lvbnNcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZUltbXV0YWJpbGl0eVBvbGljeSkge1xuICAgICAgICAgICAgaW5jbHVkZS5wdXNoKFwiaW1tdXRhYmlsaXR5cG9saWN5XCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVMZWdhbEhvbGQpIHtcbiAgICAgICAgICAgIGluY2x1ZGUucHVzaChcImxlZ2FsaG9sZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5wcmVmaXggPT09IFwiXCIpIHtcbiAgICAgICAgICAgIG9wdGlvbnMucHJlZml4ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRPcHRpb25zID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKSwgKGluY2x1ZGUubGVuZ3RoID4gMCA/IHsgaW5jbHVkZTogaW5jbHVkZSB9IDoge30pKTtcbiAgICAgICAgLy8gQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIHRvIGl0ZXJhdGUgb3ZlciBibG9iIHByZWZpeGVzIGFuZCBibG9ic1xuICAgICAgICBjb25zdCBpdGVyID0gdGhpcy5saXN0SXRlbXNCeUhpZXJhcmNoeShkZWxpbWl0ZXIsIHVwZGF0ZWRPcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVGhlIG5leHQgbWV0aG9kLCBwYXJ0IG9mIHRoZSBpdGVyYXRpb24gcHJvdG9jb2xcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgYXN5bmMgbmV4dCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlci5uZXh0KCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBUaGUgY29ubmVjdGlvbiB0byB0aGUgYXN5bmMgaXRlcmF0b3IsIHBhcnQgb2YgdGhlIGl0ZXJhdGlvbiBwcm90b2NvbFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogUmV0dXJuIGFuIEFzeW5jSXRlcmFibGVJdGVyYXRvciB0aGF0IHdvcmtzIGEgcGFnZSBhdCBhIHRpbWVcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgYnlQYWdlOiAoc2V0dGluZ3MgPSB7fSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxpc3RIaWVyYXJjaHlTZWdtZW50cyhkZWxpbWl0ZXIsIHNldHRpbmdzLmNvbnRpbnVhdGlvblRva2VuLCBPYmplY3QuYXNzaWduKHsgbWF4UGFnZVNpemU6IHNldHRpbmdzLm1heFBhZ2VTaXplIH0sIHVwZGF0ZWRPcHRpb25zKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgRmlsdGVyIEJsb2JzIG9wZXJhdGlvbiBlbmFibGVzIGNhbGxlcnMgdG8gbGlzdCBibG9icyBpbiB0aGUgY29udGFpbmVyIHdob3NlIHRhZ3NcbiAgICAgKiBtYXRjaCBhIGdpdmVuIHNlYXJjaCBleHByZXNzaW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRhZ0ZpbHRlclNxbEV4cHJlc3Npb24gLSBUaGUgd2hlcmUgcGFyYW1ldGVyIGVuYWJsZXMgdGhlIGNhbGxlciB0byBxdWVyeSBibG9icyB3aG9zZSB0YWdzIG1hdGNoIGEgZ2l2ZW4gZXhwcmVzc2lvbi5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZ2l2ZW4gZXhwcmVzc2lvbiBtdXN0IGV2YWx1YXRlIHRvIHRydWUgZm9yIGEgYmxvYiB0byBiZSByZXR1cm5lZCBpbiB0aGUgcmVzdWx0cy5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGVbT0RhdGEgLSBBQk5GXSBmaWx0ZXIgc3ludGF4IHJ1bGUgZGVmaW5lcyB0aGUgZm9ybWFsIGdyYW1tYXIgZm9yIHRoZSB2YWx1ZSBvZiB0aGUgd2hlcmUgcXVlcnkgcGFyYW1ldGVyO1xuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvd2V2ZXIsIG9ubHkgYSBzdWJzZXQgb2YgdGhlIE9EYXRhIGZpbHRlciBzeW50YXggaXMgc3VwcG9ydGVkIGluIHRoZSBCbG9iIHNlcnZpY2UuXG4gICAgICogQHBhcmFtIG1hcmtlciAtIEEgc3RyaW5nIHZhbHVlIHRoYXQgaWRlbnRpZmllcyB0aGUgcG9ydGlvbiBvZlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbGlzdCBvZiBibG9icyB0byBiZSByZXR1cm5lZCB3aXRoIHRoZSBuZXh0IGxpc3Rpbmcgb3BlcmF0aW9uLiBUaGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uIHJldHVybnMgdGhlIGNvbnRpbnVhdGlvblRva2VuIHZhbHVlIHdpdGhpbiB0aGUgcmVzcG9uc2UgYm9keSBpZiB0aGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGluZyBvcGVyYXRpb24gZGlkIG5vdCByZXR1cm4gYWxsIGJsb2JzIHJlbWFpbmluZyB0byBiZSBsaXN0ZWRcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgY3VycmVudCBwYWdlLiBUaGUgY29udGludWF0aW9uVG9rZW4gdmFsdWUgY2FuIGJlIHVzZWQgYXMgdGhlIHZhbHVlIGZvclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWFya2VyIHBhcmFtZXRlciBpbiBhIHN1YnNlcXVlbnQgY2FsbCB0byByZXF1ZXN0IHRoZSBuZXh0IHBhZ2Ugb2YgbGlzdFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy4gVGhlIG1hcmtlciB2YWx1ZSBpcyBvcGFxdWUgdG8gdGhlIGNsaWVudC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gZmluZCBibG9icyBieSB0YWdzLlxuICAgICAqL1xuICAgIGFzeW5jIGZpbmRCbG9ic0J5VGFnc1NlZ21lbnQodGFnRmlsdGVyU3FsRXhwcmVzc2lvbiwgbWFya2VyLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJDb250YWluZXJDbGllbnQtZmluZEJsb2JzQnlUYWdzU2VnbWVudFwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5jb250YWluZXJDb250ZXh0LmZpbHRlckJsb2JzKHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICB3aGVyZTogdGFnRmlsdGVyU3FsRXhwcmVzc2lvbixcbiAgICAgICAgICAgICAgICBtYXJrZXIsXG4gICAgICAgICAgICAgICAgbWF4UGFnZVNpemU6IG9wdGlvbnMubWF4UGFnZVNpemUsXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgY29uc3Qgd3JhcHBlZFJlc3BvbnNlID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCByZXNwb25zZSksIHsgX3Jlc3BvbnNlOiByZXNwb25zZS5fcmVzcG9uc2UsIGJsb2JzOiByZXNwb25zZS5ibG9icy5tYXAoKGJsb2IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgICAgICBsZXQgdGFnVmFsdWUgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICBpZiAoKChfYSA9IGJsb2IudGFncykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmJsb2JUYWdTZXQubGVuZ3RoKSA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFnVmFsdWUgPSBibG9iLnRhZ3MuYmxvYlRhZ1NldFswXS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBibG9iKSwgeyB0YWdzOiB0b1RhZ3MoYmxvYi50YWdzKSwgdGFnVmFsdWUgfSk7XG4gICAgICAgICAgICAgICAgfSkgfSk7XG4gICAgICAgICAgICByZXR1cm4gd3JhcHBlZFJlc3BvbnNlO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBBc3luY0l0ZXJhYmxlSXRlcmF0b3IgZm9yIENvbnRhaW5lckZpbmRCbG9ic0J5VGFnc1NlZ21lbnRSZXNwb25zZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0YWdGaWx0ZXJTcWxFeHByZXNzaW9uIC0gIFRoZSB3aGVyZSBwYXJhbWV0ZXIgZW5hYmxlcyB0aGUgY2FsbGVyIHRvIHF1ZXJ5IGJsb2JzIHdob3NlIHRhZ3MgbWF0Y2ggYSBnaXZlbiBleHByZXNzaW9uLlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZ2l2ZW4gZXhwcmVzc2lvbiBtdXN0IGV2YWx1YXRlIHRvIHRydWUgZm9yIGEgYmxvYiB0byBiZSByZXR1cm5lZCBpbiB0aGUgcmVzdWx0cy5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlW09EYXRhIC0gQUJORl0gZmlsdGVyIHN5bnRheCBydWxlIGRlZmluZXMgdGhlIGZvcm1hbCBncmFtbWFyIGZvciB0aGUgdmFsdWUgb2YgdGhlIHdoZXJlIHF1ZXJ5IHBhcmFtZXRlcjtcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG93ZXZlciwgb25seSBhIHN1YnNldCBvZiB0aGUgT0RhdGEgZmlsdGVyIHN5bnRheCBpcyBzdXBwb3J0ZWQgaW4gdGhlIEJsb2Igc2VydmljZS5cbiAgICAgKiBAcGFyYW0gbWFya2VyIC0gQSBzdHJpbmcgdmFsdWUgdGhhdCBpZGVudGlmaWVzIHRoZSBwb3J0aW9uIG9mXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBsaXN0IG9mIGJsb2JzIHRvIGJlIHJldHVybmVkIHdpdGggdGhlIG5leHQgbGlzdGluZyBvcGVyYXRpb24uIFRoZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gcmV0dXJucyB0aGUgY29udGludWF0aW9uVG9rZW4gdmFsdWUgd2l0aGluIHRoZSByZXNwb25zZSBib2R5IGlmIHRoZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0aW5nIG9wZXJhdGlvbiBkaWQgbm90IHJldHVybiBhbGwgYmxvYnMgcmVtYWluaW5nIHRvIGJlIGxpc3RlZFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSBjdXJyZW50IHBhZ2UuIFRoZSBjb250aW51YXRpb25Ub2tlbiB2YWx1ZSBjYW4gYmUgdXNlZCBhcyB0aGUgdmFsdWUgZm9yXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBtYXJrZXIgcGFyYW1ldGVyIGluIGEgc3Vic2VxdWVudCBjYWxsIHRvIHJlcXVlc3QgdGhlIG5leHQgcGFnZSBvZiBsaXN0XG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLiBUaGUgbWFya2VyIHZhbHVlIGlzIG9wYXF1ZSB0byB0aGUgY2xpZW50LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBmaW5kIGJsb2JzIGJ5IHRhZ3MuXG4gICAgICovXG4gICAgZmluZEJsb2JzQnlUYWdzU2VnbWVudHModGFnRmlsdGVyU3FsRXhwcmVzc2lvbl8xLCBtYXJrZXJfMSkge1xuICAgICAgICByZXR1cm4gdHNsaWIuX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKiBmaW5kQmxvYnNCeVRhZ3NTZWdtZW50c18xKHRhZ0ZpbHRlclNxbEV4cHJlc3Npb24sIG1hcmtlciwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgICAgICBsZXQgcmVzcG9uc2U7XG4gICAgICAgICAgICBpZiAoISFtYXJrZXIgfHwgbWFya2VyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0geWllbGQgdHNsaWIuX19hd2FpdCh0aGlzLmZpbmRCbG9ic0J5VGFnc1NlZ21lbnQodGFnRmlsdGVyU3FsRXhwcmVzc2lvbiwgbWFya2VyLCBvcHRpb25zKSk7XG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmJsb2JzID0gcmVzcG9uc2UuYmxvYnMgfHwgW107XG4gICAgICAgICAgICAgICAgICAgIG1hcmtlciA9IHJlc3BvbnNlLmNvbnRpbnVhdGlvblRva2VuO1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCB5aWVsZCB0c2xpYi5fX2F3YWl0KHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICB9IHdoaWxlIChtYXJrZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBBc3luY0l0ZXJhYmxlSXRlcmF0b3IgZm9yIGJsb2JzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRhZ0ZpbHRlclNxbEV4cHJlc3Npb24gLSAgVGhlIHdoZXJlIHBhcmFtZXRlciBlbmFibGVzIHRoZSBjYWxsZXIgdG8gcXVlcnkgYmxvYnMgd2hvc2UgdGFncyBtYXRjaCBhIGdpdmVuIGV4cHJlc3Npb24uXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBnaXZlbiBleHByZXNzaW9uIG11c3QgZXZhbHVhdGUgdG8gdHJ1ZSBmb3IgYSBibG9iIHRvIGJlIHJldHVybmVkIGluIHRoZSByZXN1bHRzLlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGVbT0RhdGEgLSBBQk5GXSBmaWx0ZXIgc3ludGF4IHJ1bGUgZGVmaW5lcyB0aGUgZm9ybWFsIGdyYW1tYXIgZm9yIHRoZSB2YWx1ZSBvZiB0aGUgd2hlcmUgcXVlcnkgcGFyYW1ldGVyO1xuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3dldmVyLCBvbmx5IGEgc3Vic2V0IG9mIHRoZSBPRGF0YSBmaWx0ZXIgc3ludGF4IGlzIHN1cHBvcnRlZCBpbiB0aGUgQmxvYiBzZXJ2aWNlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBmaW5kQmxvYnNCeVRhZ3NJdGVtcy5cbiAgICAgKi9cbiAgICBmaW5kQmxvYnNCeVRhZ3NJdGVtcyh0YWdGaWx0ZXJTcWxFeHByZXNzaW9uXzEpIHtcbiAgICAgICAgcmV0dXJuIHRzbGliLl9fYXN5bmNHZW5lcmF0b3IodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiogZmluZEJsb2JzQnlUYWdzSXRlbXNfMSh0YWdGaWx0ZXJTcWxFeHByZXNzaW9uLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgICAgIHZhciBfYSwgZV8zLCBfYiwgX2M7XG4gICAgICAgICAgICBsZXQgbWFya2VyO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBfZCA9IHRydWUsIF9lID0gdHNsaWIuX19hc3luY1ZhbHVlcyh0aGlzLmZpbmRCbG9ic0J5VGFnc1NlZ21lbnRzKHRhZ0ZpbHRlclNxbEV4cHJlc3Npb24sIG1hcmtlciwgb3B0aW9ucykpLCBfZjsgX2YgPSB5aWVsZCB0c2xpYi5fX2F3YWl0KF9lLm5leHQoKSksIF9hID0gX2YuZG9uZSwgIV9hOyBfZCA9IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgX2MgPSBfZi52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgX2QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VnbWVudCA9IF9jO1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCB0c2xpYi5fX2F3YWl0KHlpZWxkKiB0c2xpYi5fX2FzeW5jRGVsZWdhdG9yKHRzbGliLl9fYXN5bmNWYWx1ZXMoc2VnbWVudC5ibG9icykpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZV8zXzEpIHsgZV8zID0geyBlcnJvcjogZV8zXzEgfTsgfVxuICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFfZCAmJiAhX2EgJiYgKF9iID0gX2UucmV0dXJuKSkgeWllbGQgdHNsaWIuX19hd2FpdChfYi5jYWxsKF9lKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8zKSB0aHJvdyBlXzMuZXJyb3I7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gYXN5bmMgaXRlcmFibGUgaXRlcmF0b3IgdG8gZmluZCBhbGwgYmxvYnMgd2l0aCBzcGVjaWZpZWQgdGFnXG4gICAgICogdW5kZXIgdGhlIHNwZWNpZmllZCBjb250YWluZXIuXG4gICAgICpcbiAgICAgKiAuYnlQYWdlKCkgcmV0dXJucyBhbiBhc3luYyBpdGVyYWJsZSBpdGVyYXRvciB0byBsaXN0IHRoZSBibG9icyBpbiBwYWdlcy5cbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNpbmcgYGZvciBhd2FpdGAgc3ludGF4OlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBsZXQgaSA9IDE7XG4gICAgICogZm9yIGF3YWl0IChjb25zdCBibG9iIG9mIGNvbnRhaW5lckNsaWVudC5maW5kQmxvYnNCeVRhZ3MoXCJ0YWdrZXk9J3RhZ3ZhbHVlJ1wiKSkge1xuICAgICAqICAgY29uc29sZS5sb2coYEJsb2IgJHtpKyt9OiAke2Jsb2IubmFtZX1gKTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIGBpdGVyLm5leHQoKWA6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGxldCBpID0gMTtcbiAgICAgKiBjb25zdCBpdGVyID0gY29udGFpbmVyQ2xpZW50LmZpbmRCbG9ic0J5VGFncyhcInRhZ2tleT0ndGFndmFsdWUnXCIpO1xuICAgICAqIGxldCBibG9iSXRlbSA9IGF3YWl0IGl0ZXIubmV4dCgpO1xuICAgICAqIHdoaWxlICghYmxvYkl0ZW0uZG9uZSkge1xuICAgICAqICAgY29uc29sZS5sb2coYEJsb2IgJHtpKyt9OiAke2Jsb2JJdGVtLnZhbHVlLm5hbWV9YCk7XG4gICAgICogICBibG9iSXRlbSA9IGF3YWl0IGl0ZXIubmV4dCgpO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNpbmcgYGJ5UGFnZSgpYDpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogLy8gcGFzc2luZyBvcHRpb25hbCBtYXhQYWdlU2l6ZSBpbiB0aGUgcGFnZSBzZXR0aW5nc1xuICAgICAqIGxldCBpID0gMTtcbiAgICAgKiBmb3IgYXdhaXQgKGNvbnN0IHJlc3BvbnNlIG9mIGNvbnRhaW5lckNsaWVudC5maW5kQmxvYnNCeVRhZ3MoXCJ0YWdrZXk9J3RhZ3ZhbHVlJ1wiKS5ieVBhZ2UoeyBtYXhQYWdlU2l6ZTogMjAgfSkpIHtcbiAgICAgKiAgIGlmIChyZXNwb25zZS5ibG9icykge1xuICAgICAqICAgICBmb3IgKGNvbnN0IGJsb2Igb2YgcmVzcG9uc2UuYmxvYnMpIHtcbiAgICAgKiAgICAgICBjb25zb2xlLmxvZyhgQmxvYiAke2krK306ICR7YmxvYi5uYW1lfWApO1xuICAgICAqICAgICB9XG4gICAgICogICB9XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBwYWdpbmcgd2l0aCBhIG1hcmtlcjpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogbGV0IGkgPSAxO1xuICAgICAqIGxldCBpdGVyYXRvciA9IGNvbnRhaW5lckNsaWVudC5maW5kQmxvYnNCeVRhZ3MoXCJ0YWdrZXk9J3RhZ3ZhbHVlJ1wiKS5ieVBhZ2UoeyBtYXhQYWdlU2l6ZTogMiB9KTtcbiAgICAgKiBsZXQgcmVzcG9uc2UgPSAoYXdhaXQgaXRlcmF0b3IubmV4dCgpKS52YWx1ZTtcbiAgICAgKlxuICAgICAqIC8vIFByaW50cyAyIGJsb2IgbmFtZXNcbiAgICAgKiBpZiAocmVzcG9uc2UuYmxvYnMpIHtcbiAgICAgKiAgIGZvciAoY29uc3QgYmxvYiBvZiByZXNwb25zZS5ibG9icykge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhgQmxvYiAke2krK306ICR7YmxvYi5uYW1lfWApO1xuICAgICAqICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIC8vIEdldHMgbmV4dCBtYXJrZXJcbiAgICAgKiBsZXQgbWFya2VyID0gcmVzcG9uc2UuY29udGludWF0aW9uVG9rZW47XG4gICAgICogLy8gUGFzc2luZyBuZXh0IG1hcmtlciBhcyBjb250aW51YXRpb25Ub2tlblxuICAgICAqIGl0ZXJhdG9yID0gY29udGFpbmVyQ2xpZW50XG4gICAgICogICAuZmluZEJsb2JzQnlUYWdzKFwidGFna2V5PSd0YWd2YWx1ZSdcIilcbiAgICAgKiAgIC5ieVBhZ2UoeyBjb250aW51YXRpb25Ub2tlbjogbWFya2VyLCBtYXhQYWdlU2l6ZTogMTAgfSk7XG4gICAgICogcmVzcG9uc2UgPSAoYXdhaXQgaXRlcmF0b3IubmV4dCgpKS52YWx1ZTtcbiAgICAgKlxuICAgICAqIC8vIFByaW50cyBibG9iIG5hbWVzXG4gICAgICogaWYgKHJlc3BvbnNlLmJsb2JzKSB7XG4gICAgICogICBmb3IgKGNvbnN0IGJsb2Igb2YgcmVzcG9uc2UuYmxvYnMpIHtcbiAgICAgKiAgICAgIGNvbnNvbGUubG9nKGBCbG9iICR7aSsrfTogJHtibG9iLm5hbWV9YCk7XG4gICAgICogICB9XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQHBhcmFtIHRhZ0ZpbHRlclNxbEV4cHJlc3Npb24gLSAgVGhlIHdoZXJlIHBhcmFtZXRlciBlbmFibGVzIHRoZSBjYWxsZXIgdG8gcXVlcnkgYmxvYnMgd2hvc2UgdGFncyBtYXRjaCBhIGdpdmVuIGV4cHJlc3Npb24uXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBnaXZlbiBleHByZXNzaW9uIG11c3QgZXZhbHVhdGUgdG8gdHJ1ZSBmb3IgYSBibG9iIHRvIGJlIHJldHVybmVkIGluIHRoZSByZXN1bHRzLlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGVbT0RhdGEgLSBBQk5GXSBmaWx0ZXIgc3ludGF4IHJ1bGUgZGVmaW5lcyB0aGUgZm9ybWFsIGdyYW1tYXIgZm9yIHRoZSB2YWx1ZSBvZiB0aGUgd2hlcmUgcXVlcnkgcGFyYW1ldGVyO1xuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3dldmVyLCBvbmx5IGEgc3Vic2V0IG9mIHRoZSBPRGF0YSBmaWx0ZXIgc3ludGF4IGlzIHN1cHBvcnRlZCBpbiB0aGUgQmxvYiBzZXJ2aWNlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBmaW5kIGJsb2JzIGJ5IHRhZ3MuXG4gICAgICovXG4gICAgZmluZEJsb2JzQnlUYWdzKHRhZ0ZpbHRlclNxbEV4cHJlc3Npb24sIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICAvLyBBc3luY0l0ZXJhYmxlSXRlcmF0b3IgdG8gaXRlcmF0ZSBvdmVyIGJsb2JzXG4gICAgICAgIGNvbnN0IGxpc3RTZWdtZW50T3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBpdGVyID0gdGhpcy5maW5kQmxvYnNCeVRhZ3NJdGVtcyh0YWdGaWx0ZXJTcWxFeHByZXNzaW9uLCBsaXN0U2VnbWVudE9wdGlvbnMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBUaGUgbmV4dCBtZXRob2QsIHBhcnQgb2YgdGhlIGl0ZXJhdGlvbiBwcm90b2NvbFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBuZXh0KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVyLm5leHQoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFRoZSBjb25uZWN0aW9uIHRvIHRoZSBhc3luYyBpdGVyYXRvciwgcGFydCBvZiB0aGUgaXRlcmF0aW9uIHByb3RvY29sXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBSZXR1cm4gYW4gQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIHRoYXQgd29ya3MgYSBwYWdlIGF0IGEgdGltZVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBieVBhZ2U6IChzZXR0aW5ncyA9IHt9KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluZEJsb2JzQnlUYWdzU2VnbWVudHModGFnRmlsdGVyU3FsRXhwcmVzc2lvbiwgc2V0dGluZ3MuY29udGludWF0aW9uVG9rZW4sIE9iamVjdC5hc3NpZ24oeyBtYXhQYWdlU2l6ZTogc2V0dGluZ3MubWF4UGFnZVNpemUgfSwgbGlzdFNlZ21lbnRPcHRpb25zKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgR2V0IEFjY291bnQgSW5mb3JtYXRpb24gb3BlcmF0aW9uIHJldHVybnMgdGhlIHNrdSBuYW1lIGFuZCBhY2NvdW50IGtpbmRcbiAgICAgKiBmb3IgdGhlIHNwZWNpZmllZCBhY2NvdW50LlxuICAgICAqIFRoZSBHZXQgQWNjb3VudCBJbmZvcm1hdGlvbiBvcGVyYXRpb24gaXMgYXZhaWxhYmxlIG9uIHNlcnZpY2UgdmVyc2lvbnMgYmVnaW5uaW5nXG4gICAgICogd2l0aCB2ZXJzaW9uIDIwMTgtMDMtMjguXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvZ2V0LWFjY291bnQtaW5mb3JtYXRpb25cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB0aGUgU2VydmljZSBHZXQgQWNjb3VudCBJbmZvIG9wZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyBSZXNwb25zZSBkYXRhIGZvciB0aGUgU2VydmljZSBHZXQgQWNjb3VudCBJbmZvIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBnZXRBY2NvdW50SW5mbyhvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJDb250YWluZXJDbGllbnQtZ2V0QWNjb3VudEluZm9cIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5jb250YWluZXJDb250ZXh0LmdldEFjY291bnRJbmZvKHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBnZXRDb250YWluZXJOYW1lRnJvbVVybCgpIHtcbiAgICAgICAgbGV0IGNvbnRhaW5lck5hbWU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyAgVVJMIG1heSBsb29rIGxpa2UgdGhlIGZvbGxvd2luZ1xuICAgICAgICAgICAgLy8gXCJodHRwczovL215YWNjb3VudC5ibG9iLmNvcmUud2luZG93cy5uZXQvbXljb250YWluZXI/c2FzU3RyaW5nXCI7XG4gICAgICAgICAgICAvLyBcImh0dHBzOi8vbXlhY2NvdW50LmJsb2IuY29yZS53aW5kb3dzLm5ldC9teWNvbnRhaW5lclwiO1xuICAgICAgICAgICAgLy8gSVB2NC9JUHY2IGFkZHJlc3MgaG9zdHMsIEVuZHBvaW50cyAtIGBodHRwOi8vMTI3LjAuMC4xOjEwMDAwL2RldnN0b3JlYWNjb3VudDEvY29udGFpbmVybmFtZWBcbiAgICAgICAgICAgIC8vIGh0dHA6Ly9sb2NhbGhvc3Q6MTAwMDEvZGV2c3RvcmVhY2NvdW50MS9jb250YWluZXJuYW1lXG4gICAgICAgICAgICBjb25zdCBwYXJzZWRVcmwgPSBuZXcgVVJMKHRoaXMudXJsKTtcbiAgICAgICAgICAgIGlmIChwYXJzZWRVcmwuaG9zdG5hbWUuc3BsaXQoXCIuXCIpWzFdID09PSBcImJsb2JcIikge1xuICAgICAgICAgICAgICAgIC8vIFwiaHR0cHM6Ly9teWFjY291bnQuYmxvYi5jb3JlLndpbmRvd3MubmV0L2NvbnRhaW5lcm5hbWVcIi5cbiAgICAgICAgICAgICAgICAvLyBcImh0dHBzOi8vY3VzdG9tZG9tYWluLmNvbS9jb250YWluZXJuYW1lXCIuXG4gICAgICAgICAgICAgICAgLy8gLmdldFBhdGgoKSAtPiAvY29udGFpbmVybmFtZVxuICAgICAgICAgICAgICAgIGNvbnRhaW5lck5hbWUgPSBwYXJzZWRVcmwucGF0aG5hbWUuc3BsaXQoXCIvXCIpWzFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaXNJcEVuZHBvaW50U3R5bGUocGFyc2VkVXJsKSkge1xuICAgICAgICAgICAgICAgIC8vIElQdjQvSVB2NiBhZGRyZXNzIGhvc3RzLi4uIEV4YW1wbGUgLSBodHRwOi8vMTkyLjAuMC4xMDoxMDAwMS9kZXZzdG9yZWFjY291bnQxL2NvbnRhaW5lcm5hbWVcbiAgICAgICAgICAgICAgICAvLyBTaW5nbGUgd29yZCBkb21haW4gd2l0aG91dCBhIFtkb3RdIGluIHRoZSBlbmRwb2ludC4uLiBFeGFtcGxlIC0gaHR0cDovL2xvY2FsaG9zdDoxMDAwMS9kZXZzdG9yZWFjY291bnQxL2NvbnRhaW5lcm5hbWVcbiAgICAgICAgICAgICAgICAvLyAuZ2V0UGF0aCgpIC0+IC9kZXZzdG9yZWFjY291bnQxL2NvbnRhaW5lcm5hbWVcbiAgICAgICAgICAgICAgICBjb250YWluZXJOYW1lID0gcGFyc2VkVXJsLnBhdGhuYW1lLnNwbGl0KFwiL1wiKVsyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFwiaHR0cHM6Ly9jdXN0b21kb21haW4uY29tL2NvbnRhaW5lcm5hbWVcIi5cbiAgICAgICAgICAgICAgICAvLyAuZ2V0UGF0aCgpIC0+IC9jb250YWluZXJuYW1lXG4gICAgICAgICAgICAgICAgY29udGFpbmVyTmFtZSA9IHBhcnNlZFVybC5wYXRobmFtZS5zcGxpdChcIi9cIilbMV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBkZWNvZGUgdGhlIGVuY29kZWQgY29udGFpbmVyTmFtZSAtIHRvIGdldCBhbGwgdGhlIHNwZWNpYWwgY2hhcmFjdGVycyB0aGF0IG1pZ2h0IGJlIHByZXNlbnQgaW4gaXRcbiAgICAgICAgICAgIGNvbnRhaW5lck5hbWUgPSBkZWNvZGVVUklDb21wb25lbnQoY29udGFpbmVyTmFtZSk7XG4gICAgICAgICAgICBpZiAoIWNvbnRhaW5lck5hbWUpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQcm92aWRlZCBjb250YWluZXJOYW1lIGlzIGludmFsaWQuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5lck5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gZXh0cmFjdCBjb250YWluZXJOYW1lIHdpdGggcHJvdmlkZWQgaW5mb3JtYXRpb24uXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE9ubHkgYXZhaWxhYmxlIGZvciBDb250YWluZXJDbGllbnQgY29uc3RydWN0ZWQgd2l0aCBhIHNoYXJlZCBrZXkgY3JlZGVudGlhbC5cbiAgICAgKlxuICAgICAqIEdlbmVyYXRlcyBhIEJsb2IgQ29udGFpbmVyIFNlcnZpY2UgU2hhcmVkIEFjY2VzcyBTaWduYXR1cmUgKFNBUykgVVJJIGJhc2VkIG9uIHRoZSBjbGllbnQgcHJvcGVydGllc1xuICAgICAqIGFuZCBwYXJhbWV0ZXJzIHBhc3NlZCBpbi4gVGhlIFNBUyBpcyBzaWduZWQgYnkgdGhlIHNoYXJlZCBrZXkgY3JlZGVudGlhbCBvZiB0aGUgY2xpZW50LlxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvY29uc3RydWN0aW5nLWEtc2VydmljZS1zYXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgcGFyYW1ldGVycy5cbiAgICAgKiBAcmV0dXJucyBUaGUgU0FTIFVSSSBjb25zaXN0aW5nIG9mIHRoZSBVUkkgdG8gdGhlIHJlc291cmNlIHJlcHJlc2VudGVkIGJ5IHRoaXMgY2xpZW50LCBmb2xsb3dlZCBieSB0aGUgZ2VuZXJhdGVkIFNBUyB0b2tlbi5cbiAgICAgKi9cbiAgICBnZW5lcmF0ZVNhc1VybChvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKCEodGhpcy5jcmVkZW50aWFsIGluc3RhbmNlb2YgU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJDYW4gb25seSBnZW5lcmF0ZSB0aGUgU0FTIHdoZW4gdGhlIGNsaWVudCBpcyBpbml0aWFsaXplZCB3aXRoIGEgc2hhcmVkIGtleSBjcmVkZW50aWFsXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc2FzID0gZ2VuZXJhdGVCbG9iU0FTUXVlcnlQYXJhbWV0ZXJzKE9iamVjdC5hc3NpZ24oeyBjb250YWluZXJOYW1lOiB0aGlzLl9jb250YWluZXJOYW1lIH0sIG9wdGlvbnMpLCB0aGlzLmNyZWRlbnRpYWwpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICByZXNvbHZlKGFwcGVuZFRvVVJMUXVlcnkodGhpcy51cmwsIHNhcykpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogT25seSBhdmFpbGFibGUgZm9yIENvbnRhaW5lckNsaWVudCBjb25zdHJ1Y3RlZCB3aXRoIGEgc2hhcmVkIGtleSBjcmVkZW50aWFsLlxuICAgICAqXG4gICAgICogR2VuZXJhdGVzIHN0cmluZyB0byBzaWduIGZvciBhIEJsb2IgQ29udGFpbmVyIFNlcnZpY2UgU2hhcmVkIEFjY2VzcyBTaWduYXR1cmUgKFNBUykgVVJJXG4gICAgICogYmFzZWQgb24gdGhlIGNsaWVudCBwcm9wZXJ0aWVzIGFuZCBwYXJhbWV0ZXJzIHBhc3NlZCBpbi4gVGhlIFNBUyBpcyBzaWduZWQgYnkgdGhlIHNoYXJlZCBrZXkgY3JlZGVudGlhbCBvZiB0aGUgY2xpZW50LlxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvY29uc3RydWN0aW5nLWEtc2VydmljZS1zYXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgcGFyYW1ldGVycy5cbiAgICAgKiBAcmV0dXJucyBUaGUgU0FTIFVSSSBjb25zaXN0aW5nIG9mIHRoZSBVUkkgdG8gdGhlIHJlc291cmNlIHJlcHJlc2VudGVkIGJ5IHRoaXMgY2xpZW50LCBmb2xsb3dlZCBieSB0aGUgZ2VuZXJhdGVkIFNBUyB0b2tlbi5cbiAgICAgKi9cbiAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGF6dXJlL2F6dXJlLXNkay90cy1uYW1pbmctb3B0aW9ucyovXG4gICAgZ2VuZXJhdGVTYXNTdHJpbmdUb1NpZ24ob3B0aW9ucykge1xuICAgICAgICBpZiAoISh0aGlzLmNyZWRlbnRpYWwgaW5zdGFuY2VvZiBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiQ2FuIG9ubHkgZ2VuZXJhdGUgdGhlIFNBUyB3aGVuIHRoZSBjbGllbnQgaXMgaW5pdGlhbGl6ZWQgd2l0aCBhIHNoYXJlZCBrZXkgY3JlZGVudGlhbFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2VuZXJhdGVCbG9iU0FTUXVlcnlQYXJhbWV0ZXJzSW50ZXJuYWwoT2JqZWN0LmFzc2lnbih7IGNvbnRhaW5lck5hbWU6IHRoaXMuX2NvbnRhaW5lck5hbWUgfSwgb3B0aW9ucyksIHRoaXMuY3JlZGVudGlhbCkuc3RyaW5nVG9TaWduO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgQmxvYkJhdGNoQ2xpZW50IG9iamVjdCB0byBjb25kdWN0IGJhdGNoIG9wZXJhdGlvbnMuXG4gICAgICpcbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9ibG9iLWJhdGNoXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBBIG5ldyBCbG9iQmF0Y2hDbGllbnQgb2JqZWN0IGZvciB0aGlzIGNvbnRhaW5lci5cbiAgICAgKi9cbiAgICBnZXRCbG9iQmF0Y2hDbGllbnQoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQmxvYkJhdGNoQ2xpZW50KHRoaXMudXJsLCB0aGlzLnBpcGVsaW5lKTtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBPTkxZIEFWQUlMQUJMRSBJTiBOT0RFLkpTIFJVTlRJTUUuXG4gKlxuICogVGhpcyBpcyBhIGhlbHBlciBjbGFzcyB0byBjb25zdHJ1Y3QgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBwZXJtaXNzaW9ucyBncmFudGVkIGJ5IGFuIEFjY291bnRTQVMuIFNldHRpbmcgYSB2YWx1ZVxuICogdG8gdHJ1ZSBtZWFucyB0aGF0IGFueSBTQVMgd2hpY2ggdXNlcyB0aGVzZSBwZXJtaXNzaW9ucyB3aWxsIGdyYW50IHBlcm1pc3Npb25zIGZvciB0aGF0IG9wZXJhdGlvbi4gT25jZSBhbGwgdGhlXG4gKiB2YWx1ZXMgYXJlIHNldCwgdGhpcyBzaG91bGQgYmUgc2VyaWFsaXplZCB3aXRoIHRvU3RyaW5nIGFuZCBzZXQgYXMgdGhlIHBlcm1pc3Npb25zIGZpZWxkIG9uIGFuXG4gKiB7QGxpbmsgQWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlc30gb2JqZWN0LiBJdCBpcyBwb3NzaWJsZSB0byBjb25zdHJ1Y3QgdGhlIHBlcm1pc3Npb25zIHN0cmluZyB3aXRob3V0IHRoaXMgY2xhc3MsIGJ1dFxuICogdGhlIG9yZGVyIG9mIHRoZSBwZXJtaXNzaW9ucyBpcyBwYXJ0aWN1bGFyIGFuZCB0aGlzIGNsYXNzIGd1YXJhbnRlZXMgY29ycmVjdG5lc3MuXG4gKi9cbmNsYXNzIEFjY291bnRTQVNQZXJtaXNzaW9ucyB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQZXJtaXNzaW9uIHRvIHJlYWQgcmVzb3VyY2VzIGFuZCBsaXN0IHF1ZXVlcyBhbmQgdGFibGVzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnJlYWQgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFBlcm1pc3Npb24gdG8gd3JpdGUgcmVzb3VyY2VzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLndyaXRlID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQZXJtaXNzaW9uIHRvIGRlbGV0ZSBibG9icyBhbmQgZmlsZXMgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZGVsZXRlID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQZXJtaXNzaW9uIHRvIGRlbGV0ZSB2ZXJzaW9ucyBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5kZWxldGVWZXJzaW9uID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQZXJtaXNzaW9uIHRvIGxpc3QgYmxvYiBjb250YWluZXJzLCBibG9icywgc2hhcmVzLCBkaXJlY3RvcmllcywgYW5kIGZpbGVzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmxpc3QgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFBlcm1pc3Npb24gdG8gYWRkIG1lc3NhZ2VzLCB0YWJsZSBlbnRpdGllcywgYW5kIGFwcGVuZCB0byBibG9icyBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5hZGQgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFBlcm1pc3Npb24gdG8gY3JlYXRlIGJsb2JzIGFuZCBmaWxlcyBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5jcmVhdGUgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFBlcm1pc3Npb25zIHRvIHVwZGF0ZSBtZXNzYWdlcyBhbmQgdGFibGUgZW50aXRpZXMgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudXBkYXRlID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQZXJtaXNzaW9uIHRvIGdldCBhbmQgZGVsZXRlIG1lc3NhZ2VzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnByb2Nlc3MgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNmaWVzIFRhZyBhY2Nlc3MgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudGFnID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQZXJtaXNzaW9uIHRvIGZpbHRlciBibG9icy5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZmlsdGVyID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQZXJtaXNzaW9uIHRvIHNldCBpbW11dGFiaWxpdHkgcG9saWN5LlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5zZXRJbW11dGFiaWxpdHlQb2xpY3kgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB0aGF0IFBlcm1hbmVudCBEZWxldGUgaXMgcGVybWl0dGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5wZXJtYW5lbnREZWxldGUgPSBmYWxzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUGFyc2UgaW5pdGlhbGl6ZXMgdGhlIEFjY291bnRTQVNQZXJtaXNzaW9ucyBmaWVsZHMgZnJvbSBhIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwZXJtaXNzaW9ucyAtXG4gICAgICovXG4gICAgc3RhdGljIHBhcnNlKHBlcm1pc3Npb25zKSB7XG4gICAgICAgIGNvbnN0IGFjY291bnRTQVNQZXJtaXNzaW9ucyA9IG5ldyBBY2NvdW50U0FTUGVybWlzc2lvbnMoKTtcbiAgICAgICAgZm9yIChjb25zdCBjIG9mIHBlcm1pc3Npb25zKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGMpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwiclwiOlxuICAgICAgICAgICAgICAgICAgICBhY2NvdW50U0FTUGVybWlzc2lvbnMucmVhZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJ3XCI6XG4gICAgICAgICAgICAgICAgICAgIGFjY291bnRTQVNQZXJtaXNzaW9ucy53cml0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJkXCI6XG4gICAgICAgICAgICAgICAgICAgIGFjY291bnRTQVNQZXJtaXNzaW9ucy5kZWxldGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwieFwiOlxuICAgICAgICAgICAgICAgICAgICBhY2NvdW50U0FTUGVybWlzc2lvbnMuZGVsZXRlVmVyc2lvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJsXCI6XG4gICAgICAgICAgICAgICAgICAgIGFjY291bnRTQVNQZXJtaXNzaW9ucy5saXN0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImFcIjpcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudFNBU1Blcm1pc3Npb25zLmFkZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJjXCI6XG4gICAgICAgICAgICAgICAgICAgIGFjY291bnRTQVNQZXJtaXNzaW9ucy5jcmVhdGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwidVwiOlxuICAgICAgICAgICAgICAgICAgICBhY2NvdW50U0FTUGVybWlzc2lvbnMudXBkYXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInBcIjpcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudFNBU1Blcm1pc3Npb25zLnByb2Nlc3MgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwidFwiOlxuICAgICAgICAgICAgICAgICAgICBhY2NvdW50U0FTUGVybWlzc2lvbnMudGFnID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImZcIjpcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudFNBU1Blcm1pc3Npb25zLmZpbHRlciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJpXCI6XG4gICAgICAgICAgICAgICAgICAgIGFjY291bnRTQVNQZXJtaXNzaW9ucy5zZXRJbW11dGFiaWxpdHlQb2xpY3kgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwieVwiOlxuICAgICAgICAgICAgICAgICAgICBhY2NvdW50U0FTUGVybWlzc2lvbnMucGVybWFuZW50RGVsZXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEludmFsaWQgcGVybWlzc2lvbiBjaGFyYWN0ZXI6ICR7Y31gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjb3VudFNBU1Blcm1pc3Npb25zO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEge0BsaW5rIEFjY291bnRTQVNQZXJtaXNzaW9uc30gZnJvbSBhIHJhdyBvYmplY3Qgd2hpY2ggY29udGFpbnMgc2FtZSBrZXlzIGFzIGl0XG4gICAgICogYW5kIGJvb2xlYW4gdmFsdWVzIGZvciB0aGVtLlxuICAgICAqXG4gICAgICogQHBhcmFtIHBlcm1pc3Npb25MaWtlIC1cbiAgICAgKi9cbiAgICBzdGF0aWMgZnJvbShwZXJtaXNzaW9uTGlrZSkge1xuICAgICAgICBjb25zdCBhY2NvdW50U0FTUGVybWlzc2lvbnMgPSBuZXcgQWNjb3VudFNBU1Blcm1pc3Npb25zKCk7XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS5yZWFkKSB7XG4gICAgICAgICAgICBhY2NvdW50U0FTUGVybWlzc2lvbnMucmVhZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLndyaXRlKSB7XG4gICAgICAgICAgICBhY2NvdW50U0FTUGVybWlzc2lvbnMud3JpdGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS5kZWxldGUpIHtcbiAgICAgICAgICAgIGFjY291bnRTQVNQZXJtaXNzaW9ucy5kZWxldGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS5kZWxldGVWZXJzaW9uKSB7XG4gICAgICAgICAgICBhY2NvdW50U0FTUGVybWlzc2lvbnMuZGVsZXRlVmVyc2lvbiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLmZpbHRlcikge1xuICAgICAgICAgICAgYWNjb3VudFNBU1Blcm1pc3Npb25zLmZpbHRlciA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLnRhZykge1xuICAgICAgICAgICAgYWNjb3VudFNBU1Blcm1pc3Npb25zLnRhZyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLmxpc3QpIHtcbiAgICAgICAgICAgIGFjY291bnRTQVNQZXJtaXNzaW9ucy5saXN0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2UuYWRkKSB7XG4gICAgICAgICAgICBhY2NvdW50U0FTUGVybWlzc2lvbnMuYWRkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2UuY3JlYXRlKSB7XG4gICAgICAgICAgICBhY2NvdW50U0FTUGVybWlzc2lvbnMuY3JlYXRlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2UudXBkYXRlKSB7XG4gICAgICAgICAgICBhY2NvdW50U0FTUGVybWlzc2lvbnMudXBkYXRlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2UucHJvY2Vzcykge1xuICAgICAgICAgICAgYWNjb3VudFNBU1Blcm1pc3Npb25zLnByb2Nlc3MgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS5zZXRJbW11dGFiaWxpdHlQb2xpY3kpIHtcbiAgICAgICAgICAgIGFjY291bnRTQVNQZXJtaXNzaW9ucy5zZXRJbW11dGFiaWxpdHlQb2xpY3kgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS5wZXJtYW5lbnREZWxldGUpIHtcbiAgICAgICAgICAgIGFjY291bnRTQVNQZXJtaXNzaW9ucy5wZXJtYW5lbnREZWxldGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2NvdW50U0FTUGVybWlzc2lvbnM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFByb2R1Y2VzIHRoZSBTQVMgcGVybWlzc2lvbnMgc3RyaW5nIGZvciBhbiBBenVyZSBTdG9yYWdlIGFjY291bnQuXG4gICAgICogQ2FsbCB0aGlzIG1ldGhvZCB0byBzZXQgQWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcyBQZXJtaXNzaW9ucyBmaWVsZC5cbiAgICAgKlxuICAgICAqIFVzaW5nIHRoaXMgbWV0aG9kIHdpbGwgZ3VhcmFudGVlIHRoZSByZXNvdXJjZSB0eXBlcyBhcmUgaW5cbiAgICAgKiBhbiBvcmRlciBhY2NlcHRlZCBieSB0aGUgc2VydmljZS5cbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2NvbnN0cnVjdGluZy1hbi1hY2NvdW50LXNhc1xuICAgICAqXG4gICAgICovXG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIC8vIFRoZSBvcmRlciBvZiB0aGUgY2hhcmFjdGVycyBzaG91bGQgYmUgYXMgc3BlY2lmaWVkIGhlcmUgdG8gZW5zdXJlIGNvcnJlY3RuZXNzOlxuICAgICAgICAvLyBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvY29uc3RydWN0aW5nLWFuLWFjY291bnQtc2FzXG4gICAgICAgIC8vIFVzZSBhIHN0cmluZyBhcnJheSBpbnN0ZWFkIG9mIHN0cmluZyBjb25jYXRlbmF0aW5nICs9IG9wZXJhdG9yIGZvciBwZXJmb3JtYW5jZVxuICAgICAgICBjb25zdCBwZXJtaXNzaW9ucyA9IFtdO1xuICAgICAgICBpZiAodGhpcy5yZWFkKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwiclwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy53cml0ZSkge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcIndcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZGVsZXRlKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwiZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kZWxldGVWZXJzaW9uKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwieFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5maWx0ZXIpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJmXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnRhZykge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcInRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubGlzdCkge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcImxcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuYWRkKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwiYVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jcmVhdGUpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJjXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnVwZGF0ZSkge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcInVcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucHJvY2Vzcykge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcInBcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2V0SW1tdXRhYmlsaXR5UG9saWN5KSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwiaVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wZXJtYW5lbnREZWxldGUpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJ5XCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwZXJtaXNzaW9ucy5qb2luKFwiXCIpO1xuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIE9OTFkgQVZBSUxBQkxFIElOIE5PREUuSlMgUlVOVElNRS5cbiAqXG4gKiBUaGlzIGlzIGEgaGVscGVyIGNsYXNzIHRvIGNvbnN0cnVjdCBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHJlc291cmNlcyBhY2Nlc3NpYmxlIGJ5IGFuIEFjY291bnRTQVMuIFNldHRpbmcgYSB2YWx1ZVxuICogdG8gdHJ1ZSBtZWFucyB0aGF0IGFueSBTQVMgd2hpY2ggdXNlcyB0aGVzZSBwZXJtaXNzaW9ucyB3aWxsIGdyYW50IGFjY2VzcyB0byB0aGF0IHJlc291cmNlIHR5cGUuIE9uY2UgYWxsIHRoZVxuICogdmFsdWVzIGFyZSBzZXQsIHRoaXMgc2hvdWxkIGJlIHNlcmlhbGl6ZWQgd2l0aCB0b1N0cmluZyBhbmQgc2V0IGFzIHRoZSByZXNvdXJjZXMgZmllbGQgb24gYW5cbiAqIHtAbGluayBBY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzfSBvYmplY3QuIEl0IGlzIHBvc3NpYmxlIHRvIGNvbnN0cnVjdCB0aGUgcmVzb3VyY2VzIHN0cmluZyB3aXRob3V0IHRoaXMgY2xhc3MsIGJ1dFxuICogdGhlIG9yZGVyIG9mIHRoZSByZXNvdXJjZXMgaXMgcGFydGljdWxhciBhbmQgdGhpcyBjbGFzcyBndWFyYW50ZWVzIGNvcnJlY3RuZXNzLlxuICovXG5jbGFzcyBBY2NvdW50U0FTUmVzb3VyY2VUeXBlcyB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQZXJtaXNzaW9uIHRvIGFjY2VzcyBzZXJ2aWNlIGxldmVsIEFQSXMgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuc2VydmljZSA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogUGVybWlzc2lvbiB0byBhY2Nlc3MgY29udGFpbmVyIGxldmVsIEFQSXMgKEJsb2IgQ29udGFpbmVycywgVGFibGVzLCBRdWV1ZXMsIEZpbGUgU2hhcmVzKSBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5jb250YWluZXIgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFBlcm1pc3Npb24gdG8gYWNjZXNzIG9iamVjdCBsZXZlbCBBUElzIChCbG9icywgVGFibGUgRW50aXRpZXMsIFF1ZXVlIE1lc3NhZ2VzLCBGaWxlcykgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMub2JqZWN0ID0gZmFsc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4ge0BsaW5rIEFjY291bnRTQVNSZXNvdXJjZVR5cGVzfSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVzb3VyY2UgdHlwZXMgc3RyaW5nLiBUaGlzIG1ldGhvZCB3aWxsIHRocm93IGFuXG4gICAgICogRXJyb3IgaWYgaXQgZW5jb3VudGVycyBhIGNoYXJhY3RlciB0aGF0IGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSB2YWxpZCByZXNvdXJjZSB0eXBlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlc291cmNlVHlwZXMgLVxuICAgICAqL1xuICAgIHN0YXRpYyBwYXJzZShyZXNvdXJjZVR5cGVzKSB7XG4gICAgICAgIGNvbnN0IGFjY291bnRTQVNSZXNvdXJjZVR5cGVzID0gbmV3IEFjY291bnRTQVNSZXNvdXJjZVR5cGVzKCk7XG4gICAgICAgIGZvciAoY29uc3QgYyBvZiByZXNvdXJjZVR5cGVzKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGMpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwic1wiOlxuICAgICAgICAgICAgICAgICAgICBhY2NvdW50U0FTUmVzb3VyY2VUeXBlcy5zZXJ2aWNlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImNcIjpcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudFNBU1Jlc291cmNlVHlwZXMuY29udGFpbmVyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm9cIjpcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudFNBU1Jlc291cmNlVHlwZXMub2JqZWN0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEludmFsaWQgcmVzb3VyY2UgdHlwZTogJHtjfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2NvdW50U0FTUmVzb3VyY2VUeXBlcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29udmVydHMgdGhlIGdpdmVuIHJlc291cmNlIHR5cGVzIHRvIGEgc3RyaW5nLlxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvY29uc3RydWN0aW5nLWFuLWFjY291bnQtc2FzXG4gICAgICpcbiAgICAgKi9cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgY29uc3QgcmVzb3VyY2VUeXBlcyA9IFtdO1xuICAgICAgICBpZiAodGhpcy5zZXJ2aWNlKSB7XG4gICAgICAgICAgICByZXNvdXJjZVR5cGVzLnB1c2goXCJzXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNvbnRhaW5lcikge1xuICAgICAgICAgICAgcmVzb3VyY2VUeXBlcy5wdXNoKFwiY1wiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vYmplY3QpIHtcbiAgICAgICAgICAgIHJlc291cmNlVHlwZXMucHVzaChcIm9cIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc291cmNlVHlwZXMuam9pbihcIlwiKTtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBPTkxZIEFWQUlMQUJMRSBJTiBOT0RFLkpTIFJVTlRJTUUuXG4gKlxuICogVGhpcyBpcyBhIGhlbHBlciBjbGFzcyB0byBjb25zdHJ1Y3QgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBzZXJ2aWNlcyBhY2Nlc3NpYmxlIGJ5IGFuIEFjY291bnRTQVMuIFNldHRpbmcgYSB2YWx1ZVxuICogdG8gdHJ1ZSBtZWFucyB0aGF0IGFueSBTQVMgd2hpY2ggdXNlcyB0aGVzZSBwZXJtaXNzaW9ucyB3aWxsIGdyYW50IGFjY2VzcyB0byB0aGF0IHNlcnZpY2UuIE9uY2UgYWxsIHRoZVxuICogdmFsdWVzIGFyZSBzZXQsIHRoaXMgc2hvdWxkIGJlIHNlcmlhbGl6ZWQgd2l0aCB0b1N0cmluZyBhbmQgc2V0IGFzIHRoZSBzZXJ2aWNlcyBmaWVsZCBvbiBhblxuICoge0BsaW5rIEFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXN9IG9iamVjdC4gSXQgaXMgcG9zc2libGUgdG8gY29uc3RydWN0IHRoZSBzZXJ2aWNlcyBzdHJpbmcgd2l0aG91dCB0aGlzIGNsYXNzLCBidXRcbiAqIHRoZSBvcmRlciBvZiB0aGUgc2VydmljZXMgaXMgcGFydGljdWxhciBhbmQgdGhpcyBjbGFzcyBndWFyYW50ZWVzIGNvcnJlY3RuZXNzLlxuICovXG5jbGFzcyBBY2NvdW50U0FTU2VydmljZXMge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAvKipcbiAgICAgICAgICogUGVybWlzc2lvbiB0byBhY2Nlc3MgYmxvYiByZXNvdXJjZXMgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuYmxvYiA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogUGVybWlzc2lvbiB0byBhY2Nlc3MgZmlsZSByZXNvdXJjZXMgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZmlsZSA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogUGVybWlzc2lvbiB0byBhY2Nlc3MgcXVldWUgcmVzb3VyY2VzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnF1ZXVlID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQZXJtaXNzaW9uIHRvIGFjY2VzcyB0YWJsZSByZXNvdXJjZXMgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudGFibGUgPSBmYWxzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiB7QGxpbmsgQWNjb3VudFNBU1NlcnZpY2VzfSBmcm9tIHRoZSBzcGVjaWZpZWQgc2VydmljZXMgc3RyaW5nLiBUaGlzIG1ldGhvZCB3aWxsIHRocm93IGFuXG4gICAgICogRXJyb3IgaWYgaXQgZW5jb3VudGVycyBhIGNoYXJhY3RlciB0aGF0IGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSB2YWxpZCBzZXJ2aWNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHNlcnZpY2VzIC1cbiAgICAgKi9cbiAgICBzdGF0aWMgcGFyc2Uoc2VydmljZXMpIHtcbiAgICAgICAgY29uc3QgYWNjb3VudFNBU1NlcnZpY2VzID0gbmV3IEFjY291bnRTQVNTZXJ2aWNlcygpO1xuICAgICAgICBmb3IgKGNvbnN0IGMgb2Ygc2VydmljZXMpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoYykge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJiXCI6XG4gICAgICAgICAgICAgICAgICAgIGFjY291bnRTQVNTZXJ2aWNlcy5ibG9iID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImZcIjpcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudFNBU1NlcnZpY2VzLmZpbGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwicVwiOlxuICAgICAgICAgICAgICAgICAgICBhY2NvdW50U0FTU2VydmljZXMucXVldWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwidFwiOlxuICAgICAgICAgICAgICAgICAgICBhY2NvdW50U0FTU2VydmljZXMudGFibGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgSW52YWxpZCBzZXJ2aWNlIGNoYXJhY3RlcjogJHtjfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2NvdW50U0FTU2VydmljZXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIHRoZSBnaXZlbiBzZXJ2aWNlcyB0byBhIHN0cmluZy5cbiAgICAgKlxuICAgICAqL1xuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICBjb25zdCBzZXJ2aWNlcyA9IFtdO1xuICAgICAgICBpZiAodGhpcy5ibG9iKSB7XG4gICAgICAgICAgICBzZXJ2aWNlcy5wdXNoKFwiYlwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy50YWJsZSkge1xuICAgICAgICAgICAgc2VydmljZXMucHVzaChcInRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucXVldWUpIHtcbiAgICAgICAgICAgIHNlcnZpY2VzLnB1c2goXCJxXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZpbGUpIHtcbiAgICAgICAgICAgIHNlcnZpY2VzLnB1c2goXCJmXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXJ2aWNlcy5qb2luKFwiXCIpO1xuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIE9OTFkgQVZBSUxBQkxFIElOIE5PREUuSlMgUlVOVElNRS5cbiAqXG4gKiBHZW5lcmF0ZXMgYSB7QGxpbmsgU0FTUXVlcnlQYXJhbWV0ZXJzfSBvYmplY3Qgd2hpY2ggY29udGFpbnMgYWxsIFNBUyBxdWVyeSBwYXJhbWV0ZXJzIG5lZWRlZCB0byBtYWtlIGFuIGFjdHVhbFxuICogUkVTVCByZXF1ZXN0LlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2NvbnN0cnVjdGluZy1hbi1hY2NvdW50LXNhc1xuICpcbiAqIEBwYXJhbSBhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzIC1cbiAqIEBwYXJhbSBzaGFyZWRLZXlDcmVkZW50aWFsIC1cbiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGVBY2NvdW50U0FTUXVlcnlQYXJhbWV0ZXJzKGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMsIHNoYXJlZEtleUNyZWRlbnRpYWwpIHtcbiAgICByZXR1cm4gZ2VuZXJhdGVBY2NvdW50U0FTUXVlcnlQYXJhbWV0ZXJzSW50ZXJuYWwoYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcywgc2hhcmVkS2V5Q3JlZGVudGlhbClcbiAgICAgICAgLnNhc1F1ZXJ5UGFyYW1ldGVycztcbn1cbmZ1bmN0aW9uIGdlbmVyYXRlQWNjb3VudFNBU1F1ZXJ5UGFyYW1ldGVyc0ludGVybmFsKGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMsIHNoYXJlZEtleUNyZWRlbnRpYWwpIHtcbiAgICBjb25zdCB2ZXJzaW9uID0gYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uXG4gICAgICAgID8gYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uXG4gICAgICAgIDogU0VSVklDRV9WRVJTSU9OO1xuICAgIGlmIChhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zICYmXG4gICAgICAgIGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMuc2V0SW1tdXRhYmlsaXR5UG9saWN5ICYmXG4gICAgICAgIHZlcnNpb24gPCBcIjIwMjAtMDgtMDRcIikge1xuICAgICAgICB0aHJvdyBSYW5nZUVycm9yKFwiJ3ZlcnNpb24nIG11c3QgYmUgPj0gJzIwMjAtMDgtMDQnIHdoZW4gcHJvdmlkZWQgJ2knIHBlcm1pc3Npb24uXCIpO1xuICAgIH1cbiAgICBpZiAoYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucyAmJlxuICAgICAgICBhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zLmRlbGV0ZVZlcnNpb24gJiZcbiAgICAgICAgdmVyc2lvbiA8IFwiMjAxOS0xMC0xMFwiKSB7XG4gICAgICAgIHRocm93IFJhbmdlRXJyb3IoXCIndmVyc2lvbicgbXVzdCBiZSA+PSAnMjAxOS0xMC0xMCcgd2hlbiBwcm92aWRlZCAneCcgcGVybWlzc2lvbi5cIik7XG4gICAgfVxuICAgIGlmIChhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zICYmXG4gICAgICAgIGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMucGVybWFuZW50RGVsZXRlICYmXG4gICAgICAgIHZlcnNpb24gPCBcIjIwMTktMTAtMTBcIikge1xuICAgICAgICB0aHJvdyBSYW5nZUVycm9yKFwiJ3ZlcnNpb24nIG11c3QgYmUgPj0gJzIwMTktMTAtMTAnIHdoZW4gcHJvdmlkZWQgJ3knIHBlcm1pc3Npb24uXCIpO1xuICAgIH1cbiAgICBpZiAoYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucyAmJlxuICAgICAgICBhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zLnRhZyAmJlxuICAgICAgICB2ZXJzaW9uIDwgXCIyMDE5LTEyLTEyXCIpIHtcbiAgICAgICAgdGhyb3cgUmFuZ2VFcnJvcihcIid2ZXJzaW9uJyBtdXN0IGJlID49ICcyMDE5LTEyLTEyJyB3aGVuIHByb3ZpZGVkICd0JyBwZXJtaXNzaW9uLlwiKTtcbiAgICB9XG4gICAgaWYgKGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMgJiZcbiAgICAgICAgYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucy5maWx0ZXIgJiZcbiAgICAgICAgdmVyc2lvbiA8IFwiMjAxOS0xMi0xMlwiKSB7XG4gICAgICAgIHRocm93IFJhbmdlRXJyb3IoXCIndmVyc2lvbicgbXVzdCBiZSA+PSAnMjAxOS0xMi0xMicgd2hlbiBwcm92aWRlZCAnZicgcGVybWlzc2lvbi5cIik7XG4gICAgfVxuICAgIGlmIChhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLmVuY3J5cHRpb25TY29wZSAmJiB2ZXJzaW9uIDwgXCIyMDIwLTEyLTA2XCIpIHtcbiAgICAgICAgdGhyb3cgUmFuZ2VFcnJvcihcIid2ZXJzaW9uJyBtdXN0IGJlID49ICcyMDIwLTEyLTA2JyB3aGVuIHByb3ZpZGVkICdlbmNyeXB0aW9uU2NvcGUnIGluIFNBUy5cIik7XG4gICAgfVxuICAgIGNvbnN0IHBhcnNlZFBlcm1pc3Npb25zID0gQWNjb3VudFNBU1Blcm1pc3Npb25zLnBhcnNlKGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMudG9TdHJpbmcoKSk7XG4gICAgY29uc3QgcGFyc2VkU2VydmljZXMgPSBBY2NvdW50U0FTU2VydmljZXMucGFyc2UoYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5zZXJ2aWNlcykudG9TdHJpbmcoKTtcbiAgICBjb25zdCBwYXJzZWRSZXNvdXJjZVR5cGVzID0gQWNjb3VudFNBU1Jlc291cmNlVHlwZXMucGFyc2UoYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5yZXNvdXJjZVR5cGVzKS50b1N0cmluZygpO1xuICAgIGxldCBzdHJpbmdUb1NpZ247XG4gICAgaWYgKHZlcnNpb24gPj0gXCIyMDIwLTEyLTA2XCIpIHtcbiAgICAgICAgc3RyaW5nVG9TaWduID0gW1xuICAgICAgICAgICAgc2hhcmVkS2V5Q3JlZGVudGlhbC5hY2NvdW50TmFtZSxcbiAgICAgICAgICAgIHBhcnNlZFBlcm1pc3Npb25zLFxuICAgICAgICAgICAgcGFyc2VkU2VydmljZXMsXG4gICAgICAgICAgICBwYXJzZWRSZXNvdXJjZVR5cGVzLFxuICAgICAgICAgICAgYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5zdGFydHNPblxuICAgICAgICAgICAgICAgID8gdHJ1bmNhdGVkSVNPODA2MURhdGUoYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5zdGFydHNPbiwgZmFsc2UpXG4gICAgICAgICAgICAgICAgOiBcIlwiLFxuICAgICAgICAgICAgdHJ1bmNhdGVkSVNPODA2MURhdGUoYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5leHBpcmVzT24sIGZhbHNlKSxcbiAgICAgICAgICAgIGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMuaXBSYW5nZSA/IGlwUmFuZ2VUb1N0cmluZyhhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLmlwUmFuZ2UpIDogXCJcIixcbiAgICAgICAgICAgIGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMucHJvdG9jb2wgPyBhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLnByb3RvY29sIDogXCJcIixcbiAgICAgICAgICAgIHZlcnNpb24sXG4gICAgICAgICAgICBhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLmVuY3J5cHRpb25TY29wZSA/IGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMuZW5jcnlwdGlvblNjb3BlIDogXCJcIixcbiAgICAgICAgICAgIFwiXCIsIC8vIEFjY291bnQgU0FTIHJlcXVpcmVzIGFuIGFkZGl0aW9uYWwgbmV3bGluZSBjaGFyYWN0ZXJcbiAgICAgICAgXS5qb2luKFwiXFxuXCIpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgc3RyaW5nVG9TaWduID0gW1xuICAgICAgICAgICAgc2hhcmVkS2V5Q3JlZGVudGlhbC5hY2NvdW50TmFtZSxcbiAgICAgICAgICAgIHBhcnNlZFBlcm1pc3Npb25zLFxuICAgICAgICAgICAgcGFyc2VkU2VydmljZXMsXG4gICAgICAgICAgICBwYXJzZWRSZXNvdXJjZVR5cGVzLFxuICAgICAgICAgICAgYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5zdGFydHNPblxuICAgICAgICAgICAgICAgID8gdHJ1bmNhdGVkSVNPODA2MURhdGUoYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5zdGFydHNPbiwgZmFsc2UpXG4gICAgICAgICAgICAgICAgOiBcIlwiLFxuICAgICAgICAgICAgdHJ1bmNhdGVkSVNPODA2MURhdGUoYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5leHBpcmVzT24sIGZhbHNlKSxcbiAgICAgICAgICAgIGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMuaXBSYW5nZSA/IGlwUmFuZ2VUb1N0cmluZyhhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLmlwUmFuZ2UpIDogXCJcIixcbiAgICAgICAgICAgIGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMucHJvdG9jb2wgPyBhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLnByb3RvY29sIDogXCJcIixcbiAgICAgICAgICAgIHZlcnNpb24sXG4gICAgICAgICAgICBcIlwiLCAvLyBBY2NvdW50IFNBUyByZXF1aXJlcyBhbiBhZGRpdGlvbmFsIG5ld2xpbmUgY2hhcmFjdGVyXG4gICAgICAgIF0uam9pbihcIlxcblwiKTtcbiAgICB9XG4gICAgY29uc3Qgc2lnbmF0dXJlID0gc2hhcmVkS2V5Q3JlZGVudGlhbC5jb21wdXRlSE1BQ1NIQTI1NihzdHJpbmdUb1NpZ24pO1xuICAgIHJldHVybiB7XG4gICAgICAgIHNhc1F1ZXJ5UGFyYW1ldGVyczogbmV3IFNBU1F1ZXJ5UGFyYW1ldGVycyh2ZXJzaW9uLCBzaWduYXR1cmUsIHBhcnNlZFBlcm1pc3Npb25zLnRvU3RyaW5nKCksIHBhcnNlZFNlcnZpY2VzLCBwYXJzZWRSZXNvdXJjZVR5cGVzLCBhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLnByb3RvY29sLCBhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLnN0YXJ0c09uLCBhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLmV4cGlyZXNPbiwgYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5pcFJhbmdlLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMuZW5jcnlwdGlvblNjb3BlKSxcbiAgICAgICAgc3RyaW5nVG9TaWduOiBzdHJpbmdUb1NpZ24sXG4gICAgfTtcbn1cblxuLyoqXG4gKiBBIEJsb2JTZXJ2aWNlQ2xpZW50IHJlcHJlc2VudHMgYSBDbGllbnQgdG8gdGhlIEF6dXJlIFN0b3JhZ2UgQmxvYiBzZXJ2aWNlIGFsbG93aW5nIHlvdVxuICogdG8gbWFuaXB1bGF0ZSBibG9iIGNvbnRhaW5lcnMuXG4gKi9cbmNsYXNzIEJsb2JTZXJ2aWNlQ2xpZW50IGV4dGVuZHMgU3RvcmFnZUNsaWVudCB7XG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIEJsb2JTZXJ2aWNlQ2xpZW50IGZyb20gY29ubmVjdGlvbiBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29ubmVjdGlvblN0cmluZyAtIEFjY291bnQgY29ubmVjdGlvbiBzdHJpbmcgb3IgYSBTQVMgY29ubmVjdGlvbiBzdHJpbmcgb2YgYW4gQXp1cmUgc3RvcmFnZSBhY2NvdW50LlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsgTm90ZSAtIEFjY291bnQgY29ubmVjdGlvbiBzdHJpbmcgY2FuIG9ubHkgYmUgdXNlZCBpbiBOT0RFLkpTIHJ1bnRpbWUuIF1cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY2NvdW50IGNvbm5lY3Rpb24gc3RyaW5nIGV4YW1wbGUgLVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBEZWZhdWx0RW5kcG9pbnRzUHJvdG9jb2w9aHR0cHM7QWNjb3VudE5hbWU9bXlhY2NvdW50O0FjY291bnRLZXk9YWNjb3VudEtleTtFbmRwb2ludFN1ZmZpeD1jb3JlLndpbmRvd3MubmV0YFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNBUyBjb25uZWN0aW9uIHN0cmluZyBleGFtcGxlIC1cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgQmxvYkVuZHBvaW50PWh0dHBzOi8vbXlhY2NvdW50LmJsb2IuY29yZS53aW5kb3dzLm5ldC87UXVldWVFbmRwb2ludD1odHRwczovL215YWNjb3VudC5xdWV1ZS5jb3JlLndpbmRvd3MubmV0LztGaWxlRW5kcG9pbnQ9aHR0cHM6Ly9teWFjY291bnQuZmlsZS5jb3JlLndpbmRvd3MubmV0LztUYWJsZUVuZHBvaW50PWh0dHBzOi8vbXlhY2NvdW50LnRhYmxlLmNvcmUud2luZG93cy5uZXQvO1NoYXJlZEFjY2Vzc1NpZ25hdHVyZT1zYXNTdHJpbmdgXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbC4gT3B0aW9ucyB0byBjb25maWd1cmUgdGhlIEhUVFAgcGlwZWxpbmUuXG4gICAgICovXG4gICAgc3RhdGljIGZyb21Db25uZWN0aW9uU3RyaW5nKGNvbm5lY3Rpb25TdHJpbmcsIFxuICAgIC8vIExlZ2FjeSwgbm8gZml4IGZvciBlc2xpbnQgZXJyb3Igd2l0aG91dCBicmVha2luZy4gRGlzYWJsZSBpdCBmb3IgdGhpcyBpbnRlcmZhY2UuXG4gICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhenVyZS9henVyZS1zZGsvdHMtbmFtaW5nLW9wdGlvbnMqL1xuICAgIG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgICAgIGNvbnN0IGV4dHJhY3RlZENyZWRzID0gZXh0cmFjdENvbm5lY3Rpb25TdHJpbmdQYXJ0cyhjb25uZWN0aW9uU3RyaW5nKTtcbiAgICAgICAgaWYgKGV4dHJhY3RlZENyZWRzLmtpbmQgPT09IFwiQWNjb3VudENvbm5TdHJpbmdcIikge1xuICAgICAgICAgICAgaWYgKGNvcmVVdGlsLmlzTm9kZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNoYXJlZEtleUNyZWRlbnRpYWwgPSBuZXcgU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwoZXh0cmFjdGVkQ3JlZHMuYWNjb3VudE5hbWUsIGV4dHJhY3RlZENyZWRzLmFjY291bnRLZXkpO1xuICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucy5wcm94eU9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5wcm94eU9wdGlvbnMgPSBjb3JlUmVzdFBpcGVsaW5lLmdldERlZmF1bHRQcm94eVNldHRpbmdzKGV4dHJhY3RlZENyZWRzLnByb3h5VXJpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcGlwZWxpbmUgPSBuZXdQaXBlbGluZShzaGFyZWRLZXlDcmVkZW50aWFsLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEJsb2JTZXJ2aWNlQ2xpZW50KGV4dHJhY3RlZENyZWRzLnVybCwgcGlwZWxpbmUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQWNjb3VudCBjb25uZWN0aW9uIHN0cmluZyBpcyBvbmx5IHN1cHBvcnRlZCBpbiBOb2RlLmpzIGVudmlyb25tZW50XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGV4dHJhY3RlZENyZWRzLmtpbmQgPT09IFwiU0FTQ29ublN0cmluZ1wiKSB7XG4gICAgICAgICAgICBjb25zdCBwaXBlbGluZSA9IG5ld1BpcGVsaW5lKG5ldyBBbm9ueW1vdXNDcmVkZW50aWFsKCksIG9wdGlvbnMpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBCbG9iU2VydmljZUNsaWVudChleHRyYWN0ZWRDcmVkcy51cmwgKyBcIj9cIiArIGV4dHJhY3RlZENyZWRzLmFjY291bnRTYXMsIHBpcGVsaW5lKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbm5lY3Rpb24gc3RyaW5nIG11c3QgYmUgZWl0aGVyIGFuIEFjY291bnQgY29ubmVjdGlvbiBzdHJpbmcgb3IgYSBTQVMgY29ubmVjdGlvbiBzdHJpbmdcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3RydWN0b3IodXJsLCBjcmVkZW50aWFsT3JQaXBlbGluZSwgXG4gICAgLy8gTGVnYWN5LCBubyBmaXggZm9yIGVzbGludCBlcnJvciB3aXRob3V0IGJyZWFraW5nLiBEaXNhYmxlIGl0IGZvciB0aGlzIGludGVyZmFjZS5cbiAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGF6dXJlL2F6dXJlLXNkay90cy1uYW1pbmctb3B0aW9ucyovXG4gICAgb3B0aW9ucykge1xuICAgICAgICBsZXQgcGlwZWxpbmU7XG4gICAgICAgIGlmIChpc1BpcGVsaW5lTGlrZShjcmVkZW50aWFsT3JQaXBlbGluZSkpIHtcbiAgICAgICAgICAgIHBpcGVsaW5lID0gY3JlZGVudGlhbE9yUGlwZWxpbmU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoKGNvcmVVdGlsLmlzTm9kZSAmJiBjcmVkZW50aWFsT3JQaXBlbGluZSBpbnN0YW5jZW9mIFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsKSB8fFxuICAgICAgICAgICAgY3JlZGVudGlhbE9yUGlwZWxpbmUgaW5zdGFuY2VvZiBBbm9ueW1vdXNDcmVkZW50aWFsIHx8XG4gICAgICAgICAgICBjb3JlQXV0aC5pc1Rva2VuQ3JlZGVudGlhbChjcmVkZW50aWFsT3JQaXBlbGluZSkpIHtcbiAgICAgICAgICAgIHBpcGVsaW5lID0gbmV3UGlwZWxpbmUoY3JlZGVudGlhbE9yUGlwZWxpbmUsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gVGhlIHNlY29uZCBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkLiBVc2UgYW5vbnltb3VzIGNyZWRlbnRpYWxcbiAgICAgICAgICAgIHBpcGVsaW5lID0gbmV3UGlwZWxpbmUobmV3IEFub255bW91c0NyZWRlbnRpYWwoKSwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIodXJsLCBwaXBlbGluZSk7XG4gICAgICAgIHRoaXMuc2VydmljZUNvbnRleHQgPSB0aGlzLnN0b3JhZ2VDbGllbnRDb250ZXh0LnNlcnZpY2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSB7QGxpbmsgQ29udGFpbmVyQ2xpZW50fSBvYmplY3RcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb250YWluZXJOYW1lIC0gQSBjb250YWluZXIgbmFtZVxuICAgICAqIEByZXR1cm5zIEEgbmV3IENvbnRhaW5lckNsaWVudCBvYmplY3QgZm9yIHRoZSBnaXZlbiBjb250YWluZXIgbmFtZS5cbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNhZ2U6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnN0IGNvbnRhaW5lckNsaWVudCA9IGJsb2JTZXJ2aWNlQ2xpZW50LmdldENvbnRhaW5lckNsaWVudChcIjxjb250YWluZXIgbmFtZT5cIik7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgZ2V0Q29udGFpbmVyQ2xpZW50KGNvbnRhaW5lck5hbWUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb250YWluZXJDbGllbnQoYXBwZW5kVG9VUkxQYXRoKHRoaXMudXJsLCBlbmNvZGVVUklDb21wb25lbnQoY29udGFpbmVyTmFtZSkpLCB0aGlzLnBpcGVsaW5lKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgQmxvYiBjb250YWluZXIuIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2NyZWF0ZS1jb250YWluZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb250YWluZXJOYW1lIC0gTmFtZSBvZiB0aGUgY29udGFpbmVyIHRvIGNyZWF0ZS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gY29uZmlndXJlIENvbnRhaW5lciBDcmVhdGUgb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIENvbnRhaW5lciBjcmVhdGlvbiByZXNwb25zZSBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgY29udGFpbmVyIGNsaWVudC5cbiAgICAgKi9cbiAgICBhc3luYyBjcmVhdGVDb250YWluZXIoY29udGFpbmVyTmFtZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYlNlcnZpY2VDbGllbnQtY3JlYXRlQ29udGFpbmVyXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyQ2xpZW50ID0gdGhpcy5nZXRDb250YWluZXJDbGllbnQoY29udGFpbmVyTmFtZSk7XG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJDcmVhdGVSZXNwb25zZSA9IGF3YWl0IGNvbnRhaW5lckNsaWVudC5jcmVhdGUodXBkYXRlZE9wdGlvbnMpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBjb250YWluZXJDbGllbnQsXG4gICAgICAgICAgICAgICAgY29udGFpbmVyQ3JlYXRlUmVzcG9uc2UsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVsZXRlcyBhIEJsb2IgY29udGFpbmVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIGNvbnRhaW5lck5hbWUgLSBOYW1lIG9mIHRoZSBjb250YWluZXIgdG8gZGVsZXRlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBjb25maWd1cmUgQ29udGFpbmVyIERlbGV0ZSBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgQ29udGFpbmVyIGRlbGV0aW9uIHJlc3BvbnNlLlxuICAgICAqL1xuICAgIGFzeW5jIGRlbGV0ZUNvbnRhaW5lcihjb250YWluZXJOYW1lLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iU2VydmljZUNsaWVudC1kZWxldGVDb250YWluZXJcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJDbGllbnQgPSB0aGlzLmdldENvbnRhaW5lckNsaWVudChjb250YWluZXJOYW1lKTtcbiAgICAgICAgICAgIHJldHVybiBjb250YWluZXJDbGllbnQuZGVsZXRlKHVwZGF0ZWRPcHRpb25zKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlc3RvcmUgYSBwcmV2aW91c2x5IGRlbGV0ZWQgQmxvYiBjb250YWluZXIuXG4gICAgICogVGhpcyBBUEkgaXMgb25seSBmdW5jdGlvbmFsIGlmIENvbnRhaW5lciBTb2Z0IERlbGV0ZSBpcyBlbmFibGVkIGZvciB0aGUgc3RvcmFnZSBhY2NvdW50IGFzc29jaWF0ZWQgd2l0aCB0aGUgY29udGFpbmVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRlbGV0ZWRDb250YWluZXJOYW1lIC0gTmFtZSBvZiB0aGUgcHJldmlvdXNseSBkZWxldGVkIGNvbnRhaW5lci5cbiAgICAgKiBAcGFyYW0gZGVsZXRlZENvbnRhaW5lclZlcnNpb24gLSBWZXJzaW9uIG9mIHRoZSBwcmV2aW91c2x5IGRlbGV0ZWQgY29udGFpbmVyLCB1c2VkIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHRoZSBkZWxldGVkIGNvbnRhaW5lci5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gY29uZmlndXJlIENvbnRhaW5lciBSZXN0b3JlIG9wZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyBDb250YWluZXIgZGVsZXRpb24gcmVzcG9uc2UuXG4gICAgICovXG4gICAgYXN5bmMgdW5kZWxldGVDb250YWluZXIoZGVsZXRlZENvbnRhaW5lck5hbWUsIGRlbGV0ZWRDb250YWluZXJWZXJzaW9uLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iU2VydmljZUNsaWVudC11bmRlbGV0ZUNvbnRhaW5lclwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lckNsaWVudCA9IHRoaXMuZ2V0Q29udGFpbmVyQ2xpZW50KG9wdGlvbnMuZGVzdGluYXRpb25Db250YWluZXJOYW1lIHx8IGRlbGV0ZWRDb250YWluZXJOYW1lKTtcbiAgICAgICAgICAgIC8vIEhhY2sgdG8gYWNjZXNzIGEgcHJvdGVjdGVkIG1lbWJlci5cbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lckNvbnRleHQgPSBjb250YWluZXJDbGllbnRbXCJzdG9yYWdlQ2xpZW50Q29udGV4dFwiXS5jb250YWluZXI7XG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJVbmRlbGV0ZVJlc3BvbnNlID0gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgY29udGFpbmVyQ29udGV4dC5yZXN0b3JlKHtcbiAgICAgICAgICAgICAgICBkZWxldGVkQ29udGFpbmVyTmFtZSxcbiAgICAgICAgICAgICAgICBkZWxldGVkQ29udGFpbmVyVmVyc2lvbixcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICByZXR1cm4geyBjb250YWluZXJDbGllbnQsIGNvbnRhaW5lclVuZGVsZXRlUmVzcG9uc2UgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlbmFtZSBhbiBleGlzdGluZyBCbG9iIENvbnRhaW5lci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzb3VyY2VDb250YWluZXJOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHNvdXJjZSBjb250YWluZXIuXG4gICAgICogQHBhcmFtIGRlc3RpbmF0aW9uQ29udGFpbmVyTmFtZSAtIFRoZSBuZXcgbmFtZSBvZiB0aGUgY29udGFpbmVyLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBjb25maWd1cmUgQ29udGFpbmVyIFJlbmFtZSBvcGVyYXRpb24uXG4gICAgICovXG4gICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudCAqL1xuICAgIC8vIEB0cy1pZ25vcmUgTmVlZCB0byBoaWRlIHRoaXMgaW50ZXJmYWNlIGZvciBub3cuIE1ha2UgaXQgcHVibGljIGFuZCB0dXJuIG9uIHRoZSBsaXZlIHRlc3RzIGZvciBpdCB3aGVuIHRoZSBzZXJ2aWNlIGlzIHJlYWR5LlxuICAgIGFzeW5jIHJlbmFtZUNvbnRhaW5lcihzb3VyY2VDb250YWluZXJOYW1lLCBkZXN0aW5hdGlvbkNvbnRhaW5lck5hbWUsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JTZXJ2aWNlQ2xpZW50LXJlbmFtZUNvbnRhaW5lclwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lckNsaWVudCA9IHRoaXMuZ2V0Q29udGFpbmVyQ2xpZW50KGRlc3RpbmF0aW9uQ29udGFpbmVyTmFtZSk7XG4gICAgICAgICAgICAvLyBIYWNrIHRvIGFjY2VzcyBhIHByb3RlY3RlZCBtZW1iZXIuXG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJDb250ZXh0ID0gY29udGFpbmVyQ2xpZW50W1wic3RvcmFnZUNsaWVudENvbnRleHRcIl0uY29udGFpbmVyO1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyUmVuYW1lUmVzcG9uc2UgPSBhc3NlcnRSZXNwb25zZShhd2FpdCBjb250YWluZXJDb250ZXh0LnJlbmFtZShzb3VyY2VDb250YWluZXJOYW1lLCBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHVwZGF0ZWRPcHRpb25zKSwgeyBzb3VyY2VMZWFzZUlkOiAoX2EgPSBvcHRpb25zLnNvdXJjZUNvbmRpdGlvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmxlYXNlSWQgfSkpKTtcbiAgICAgICAgICAgIHJldHVybiB7IGNvbnRhaW5lckNsaWVudCwgY29udGFpbmVyUmVuYW1lUmVzcG9uc2UgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHByb3BlcnRpZXMgb2YgYSBzdG9yYWdlIGFjY291bnTigJlzIEJsb2Igc2VydmljZSwgaW5jbHVkaW5nIHByb3BlcnRpZXNcbiAgICAgKiBmb3IgU3RvcmFnZSBBbmFseXRpY3MgYW5kIENPUlMgKENyb3NzLU9yaWdpbiBSZXNvdXJjZSBTaGFyaW5nKSBydWxlcy5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9nZXQtYmxvYi1zZXJ2aWNlLXByb3BlcnRpZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB0aGUgU2VydmljZSBHZXQgUHJvcGVydGllcyBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgdGhlIFNlcnZpY2UgR2V0IFByb3BlcnRpZXMgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGdldFByb3BlcnRpZXMob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYlNlcnZpY2VDbGllbnQtZ2V0UHJvcGVydGllc1wiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLnNlcnZpY2VDb250ZXh0LmdldFByb3BlcnRpZXMoe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldHMgcHJvcGVydGllcyBmb3IgYSBzdG9yYWdlIGFjY291bnTigJlzIEJsb2Igc2VydmljZSBlbmRwb2ludCwgaW5jbHVkaW5nIHByb3BlcnRpZXNcbiAgICAgKiBmb3IgU3RvcmFnZSBBbmFseXRpY3MsIENPUlMgKENyb3NzLU9yaWdpbiBSZXNvdXJjZSBTaGFyaW5nKSBydWxlcyBhbmQgc29mdCBkZWxldGUgc2V0dGluZ3MuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvc2V0LWJsb2Itc2VydmljZS1wcm9wZXJ0aWVzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydGllcyAtXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHRoZSBTZXJ2aWNlIFNldCBQcm9wZXJ0aWVzIG9wZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyBSZXNwb25zZSBkYXRhIGZvciB0aGUgU2VydmljZSBTZXQgUHJvcGVydGllcyBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgc2V0UHJvcGVydGllcyhwcm9wZXJ0aWVzLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iU2VydmljZUNsaWVudC1zZXRQcm9wZXJ0aWVzXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuc2VydmljZUNvbnRleHQuc2V0UHJvcGVydGllcyhwcm9wZXJ0aWVzLCB7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHN0YXRpc3RpY3MgcmVsYXRlZCB0byByZXBsaWNhdGlvbiBmb3IgdGhlIEJsb2Igc2VydmljZS4gSXQgaXMgb25seVxuICAgICAqIGF2YWlsYWJsZSBvbiB0aGUgc2Vjb25kYXJ5IGxvY2F0aW9uIGVuZHBvaW50IHdoZW4gcmVhZC1hY2Nlc3MgZ2VvLXJlZHVuZGFudFxuICAgICAqIHJlcGxpY2F0aW9uIGlzIGVuYWJsZWQgZm9yIHRoZSBzdG9yYWdlIGFjY291bnQuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvZ2V0LWJsb2Itc2VydmljZS1zdGF0c1xuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHRoZSBTZXJ2aWNlIEdldCBTdGF0aXN0aWNzIG9wZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyBSZXNwb25zZSBkYXRhIGZvciB0aGUgU2VydmljZSBHZXQgU3RhdGlzdGljcyBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgZ2V0U3RhdGlzdGljcyhvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iU2VydmljZUNsaWVudC1nZXRTdGF0aXN0aWNzXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuc2VydmljZUNvbnRleHQuZ2V0U3RhdGlzdGljcyh7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIEdldCBBY2NvdW50IEluZm9ybWF0aW9uIG9wZXJhdGlvbiByZXR1cm5zIHRoZSBza3UgbmFtZSBhbmQgYWNjb3VudCBraW5kXG4gICAgICogZm9yIHRoZSBzcGVjaWZpZWQgYWNjb3VudC5cbiAgICAgKiBUaGUgR2V0IEFjY291bnQgSW5mb3JtYXRpb24gb3BlcmF0aW9uIGlzIGF2YWlsYWJsZSBvbiBzZXJ2aWNlIHZlcnNpb25zIGJlZ2lubmluZ1xuICAgICAqIHdpdGggdmVyc2lvbiAyMDE4LTAzLTI4LlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2dldC1hY2NvdW50LWluZm9ybWF0aW9uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gdGhlIFNlcnZpY2UgR2V0IEFjY291bnQgSW5mbyBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgdGhlIFNlcnZpY2UgR2V0IEFjY291bnQgSW5mbyBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgZ2V0QWNjb3VudEluZm8ob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYlNlcnZpY2VDbGllbnQtZ2V0QWNjb3VudEluZm9cIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5zZXJ2aWNlQ29udGV4dC5nZXRBY2NvdW50SW5mbyh7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIGxpc3Qgb2YgdGhlIGNvbnRhaW5lcnMgdW5kZXIgdGhlIHNwZWNpZmllZCBhY2NvdW50LlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2xpc3QtY29udGFpbmVyczJcbiAgICAgKlxuICAgICAqIEBwYXJhbSBtYXJrZXIgLSBBIHN0cmluZyB2YWx1ZSB0aGF0IGlkZW50aWZpZXMgdGhlIHBvcnRpb24gb2ZcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBsaXN0IG9mIGNvbnRhaW5lcnMgdG8gYmUgcmV0dXJuZWQgd2l0aCB0aGUgbmV4dCBsaXN0aW5nIG9wZXJhdGlvbi4gVGhlXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gcmV0dXJucyB0aGUgY29udGludWF0aW9uVG9rZW4gdmFsdWUgd2l0aGluIHRoZSByZXNwb25zZSBib2R5IGlmIHRoZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGluZyBvcGVyYXRpb24gZGlkIG5vdCByZXR1cm4gYWxsIGNvbnRhaW5lcnMgcmVtYWluaW5nIHRvIGJlIGxpc3RlZFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgY3VycmVudCBwYWdlLiBUaGUgY29udGludWF0aW9uVG9rZW4gdmFsdWUgY2FuIGJlIHVzZWQgYXMgdGhlIHZhbHVlIGZvclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1hcmtlciBwYXJhbWV0ZXIgaW4gYSBzdWJzZXF1ZW50IGNhbGwgdG8gcmVxdWVzdCB0aGUgbmV4dCBwYWdlIG9mIGxpc3RcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLiBUaGUgbWFya2VyIHZhbHVlIGlzIG9wYXF1ZSB0byB0aGUgY2xpZW50LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB0aGUgU2VydmljZSBMaXN0IENvbnRhaW5lciBTZWdtZW50IG9wZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyBSZXNwb25zZSBkYXRhIGZvciB0aGUgU2VydmljZSBMaXN0IENvbnRhaW5lciBTZWdtZW50IG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBsaXN0Q29udGFpbmVyc1NlZ21lbnQobWFya2VyLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iU2VydmljZUNsaWVudC1saXN0Q29udGFpbmVyc1NlZ21lbnRcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5zZXJ2aWNlQ29udGV4dC5saXN0Q29udGFpbmVyc1NlZ21lbnQoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHsgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsIG1hcmtlciB9LCBvcHRpb25zKSwgeyBpbmNsdWRlOiB0eXBlb2Ygb3B0aW9ucy5pbmNsdWRlID09PSBcInN0cmluZ1wiID8gW29wdGlvbnMuaW5jbHVkZV0gOiBvcHRpb25zLmluY2x1ZGUsIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyB9KSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIEZpbHRlciBCbG9icyBvcGVyYXRpb24gZW5hYmxlcyBjYWxsZXJzIHRvIGxpc3QgYmxvYnMgYWNyb3NzIGFsbCBjb250YWluZXJzIHdob3NlIHRhZ3NcbiAgICAgKiBtYXRjaCBhIGdpdmVuIHNlYXJjaCBleHByZXNzaW9uLiBGaWx0ZXIgYmxvYnMgc2VhcmNoZXMgYWNyb3NzIGFsbCBjb250YWluZXJzIHdpdGhpbiBhXG4gICAgICogc3RvcmFnZSBhY2NvdW50IGJ1dCBjYW4gYmUgc2NvcGVkIHdpdGhpbiB0aGUgZXhwcmVzc2lvbiB0byBhIHNpbmdsZSBjb250YWluZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGFnRmlsdGVyU3FsRXhwcmVzc2lvbiAtIFRoZSB3aGVyZSBwYXJhbWV0ZXIgZW5hYmxlcyB0aGUgY2FsbGVyIHRvIHF1ZXJ5IGJsb2JzIHdob3NlIHRhZ3MgbWF0Y2ggYSBnaXZlbiBleHByZXNzaW9uLlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBnaXZlbiBleHByZXNzaW9uIG11c3QgZXZhbHVhdGUgdG8gdHJ1ZSBmb3IgYSBibG9iIHRvIGJlIHJldHVybmVkIGluIHRoZSByZXN1bHRzLlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZVtPRGF0YSAtIEFCTkZdIGZpbHRlciBzeW50YXggcnVsZSBkZWZpbmVzIHRoZSBmb3JtYWwgZ3JhbW1hciBmb3IgdGhlIHZhbHVlIG9mIHRoZSB3aGVyZSBxdWVyeSBwYXJhbWV0ZXI7XG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG93ZXZlciwgb25seSBhIHN1YnNldCBvZiB0aGUgT0RhdGEgZmlsdGVyIHN5bnRheCBpcyBzdXBwb3J0ZWQgaW4gdGhlIEJsb2Igc2VydmljZS5cbiAgICAgKiBAcGFyYW0gbWFya2VyIC0gQSBzdHJpbmcgdmFsdWUgdGhhdCBpZGVudGlmaWVzIHRoZSBwb3J0aW9uIG9mXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBsaXN0IG9mIGJsb2JzIHRvIGJlIHJldHVybmVkIHdpdGggdGhlIG5leHQgbGlzdGluZyBvcGVyYXRpb24uIFRoZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gcmV0dXJucyB0aGUgY29udGludWF0aW9uVG9rZW4gdmFsdWUgd2l0aGluIHRoZSByZXNwb25zZSBib2R5IGlmIHRoZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0aW5nIG9wZXJhdGlvbiBkaWQgbm90IHJldHVybiBhbGwgYmxvYnMgcmVtYWluaW5nIHRvIGJlIGxpc3RlZFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSBjdXJyZW50IHBhZ2UuIFRoZSBjb250aW51YXRpb25Ub2tlbiB2YWx1ZSBjYW4gYmUgdXNlZCBhcyB0aGUgdmFsdWUgZm9yXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBtYXJrZXIgcGFyYW1ldGVyIGluIGEgc3Vic2VxdWVudCBjYWxsIHRvIHJlcXVlc3QgdGhlIG5leHQgcGFnZSBvZiBsaXN0XG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLiBUaGUgbWFya2VyIHZhbHVlIGlzIG9wYXF1ZSB0byB0aGUgY2xpZW50LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBmaW5kIGJsb2JzIGJ5IHRhZ3MuXG4gICAgICovXG4gICAgYXN5bmMgZmluZEJsb2JzQnlUYWdzU2VnbWVudCh0YWdGaWx0ZXJTcWxFeHByZXNzaW9uLCBtYXJrZXIsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JTZXJ2aWNlQ2xpZW50LWZpbmRCbG9ic0J5VGFnc1NlZ21lbnRcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuc2VydmljZUNvbnRleHQuZmlsdGVyQmxvYnMoe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIHdoZXJlOiB0YWdGaWx0ZXJTcWxFeHByZXNzaW9uLFxuICAgICAgICAgICAgICAgIG1hcmtlcixcbiAgICAgICAgICAgICAgICBtYXhQYWdlU2l6ZTogb3B0aW9ucy5tYXhQYWdlU2l6ZSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICBjb25zdCB3cmFwcGVkUmVzcG9uc2UgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHJlc3BvbnNlKSwgeyBfcmVzcG9uc2U6IHJlc3BvbnNlLl9yZXNwb25zZSwgYmxvYnM6IHJlc3BvbnNlLmJsb2JzLm1hcCgoYmxvYikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgICAgIGxldCB0YWdWYWx1ZSA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoKF9hID0gYmxvYi50YWdzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuYmxvYlRhZ1NldC5sZW5ndGgpID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YWdWYWx1ZSA9IGJsb2IudGFncy5ibG9iVGFnU2V0WzBdLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGJsb2IpLCB7IHRhZ3M6IHRvVGFncyhibG9iLnRhZ3MpLCB0YWdWYWx1ZSB9KTtcbiAgICAgICAgICAgICAgICB9KSB9KTtcbiAgICAgICAgICAgIHJldHVybiB3cmFwcGVkUmVzcG9uc2U7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIEFzeW5jSXRlcmFibGVJdGVyYXRvciBmb3IgU2VydmljZUZpbmRCbG9ic0J5VGFnc1NlZ21lbnRSZXNwb25zZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0YWdGaWx0ZXJTcWxFeHByZXNzaW9uIC0gIFRoZSB3aGVyZSBwYXJhbWV0ZXIgZW5hYmxlcyB0aGUgY2FsbGVyIHRvIHF1ZXJ5IGJsb2JzIHdob3NlIHRhZ3MgbWF0Y2ggYSBnaXZlbiBleHByZXNzaW9uLlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZ2l2ZW4gZXhwcmVzc2lvbiBtdXN0IGV2YWx1YXRlIHRvIHRydWUgZm9yIGEgYmxvYiB0byBiZSByZXR1cm5lZCBpbiB0aGUgcmVzdWx0cy5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlW09EYXRhIC0gQUJORl0gZmlsdGVyIHN5bnRheCBydWxlIGRlZmluZXMgdGhlIGZvcm1hbCBncmFtbWFyIGZvciB0aGUgdmFsdWUgb2YgdGhlIHdoZXJlIHF1ZXJ5IHBhcmFtZXRlcjtcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG93ZXZlciwgb25seSBhIHN1YnNldCBvZiB0aGUgT0RhdGEgZmlsdGVyIHN5bnRheCBpcyBzdXBwb3J0ZWQgaW4gdGhlIEJsb2Igc2VydmljZS5cbiAgICAgKiBAcGFyYW0gbWFya2VyIC0gQSBzdHJpbmcgdmFsdWUgdGhhdCBpZGVudGlmaWVzIHRoZSBwb3J0aW9uIG9mXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBsaXN0IG9mIGJsb2JzIHRvIGJlIHJldHVybmVkIHdpdGggdGhlIG5leHQgbGlzdGluZyBvcGVyYXRpb24uIFRoZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gcmV0dXJucyB0aGUgY29udGludWF0aW9uVG9rZW4gdmFsdWUgd2l0aGluIHRoZSByZXNwb25zZSBib2R5IGlmIHRoZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0aW5nIG9wZXJhdGlvbiBkaWQgbm90IHJldHVybiBhbGwgYmxvYnMgcmVtYWluaW5nIHRvIGJlIGxpc3RlZFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSBjdXJyZW50IHBhZ2UuIFRoZSBjb250aW51YXRpb25Ub2tlbiB2YWx1ZSBjYW4gYmUgdXNlZCBhcyB0aGUgdmFsdWUgZm9yXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBtYXJrZXIgcGFyYW1ldGVyIGluIGEgc3Vic2VxdWVudCBjYWxsIHRvIHJlcXVlc3QgdGhlIG5leHQgcGFnZSBvZiBsaXN0XG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLiBUaGUgbWFya2VyIHZhbHVlIGlzIG9wYXF1ZSB0byB0aGUgY2xpZW50LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBmaW5kIGJsb2JzIGJ5IHRhZ3MuXG4gICAgICovXG4gICAgZmluZEJsb2JzQnlUYWdzU2VnbWVudHModGFnRmlsdGVyU3FsRXhwcmVzc2lvbl8xLCBtYXJrZXJfMSkge1xuICAgICAgICByZXR1cm4gdHNsaWIuX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKiBmaW5kQmxvYnNCeVRhZ3NTZWdtZW50c18xKHRhZ0ZpbHRlclNxbEV4cHJlc3Npb24sIG1hcmtlciwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgICAgICBsZXQgcmVzcG9uc2U7XG4gICAgICAgICAgICBpZiAoISFtYXJrZXIgfHwgbWFya2VyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0geWllbGQgdHNsaWIuX19hd2FpdCh0aGlzLmZpbmRCbG9ic0J5VGFnc1NlZ21lbnQodGFnRmlsdGVyU3FsRXhwcmVzc2lvbiwgbWFya2VyLCBvcHRpb25zKSk7XG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmJsb2JzID0gcmVzcG9uc2UuYmxvYnMgfHwgW107XG4gICAgICAgICAgICAgICAgICAgIG1hcmtlciA9IHJlc3BvbnNlLmNvbnRpbnVhdGlvblRva2VuO1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCB5aWVsZCB0c2xpYi5fX2F3YWl0KHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICB9IHdoaWxlIChtYXJrZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBBc3luY0l0ZXJhYmxlSXRlcmF0b3IgZm9yIGJsb2JzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRhZ0ZpbHRlclNxbEV4cHJlc3Npb24gLSAgVGhlIHdoZXJlIHBhcmFtZXRlciBlbmFibGVzIHRoZSBjYWxsZXIgdG8gcXVlcnkgYmxvYnMgd2hvc2UgdGFncyBtYXRjaCBhIGdpdmVuIGV4cHJlc3Npb24uXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBnaXZlbiBleHByZXNzaW9uIG11c3QgZXZhbHVhdGUgdG8gdHJ1ZSBmb3IgYSBibG9iIHRvIGJlIHJldHVybmVkIGluIHRoZSByZXN1bHRzLlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGVbT0RhdGEgLSBBQk5GXSBmaWx0ZXIgc3ludGF4IHJ1bGUgZGVmaW5lcyB0aGUgZm9ybWFsIGdyYW1tYXIgZm9yIHRoZSB2YWx1ZSBvZiB0aGUgd2hlcmUgcXVlcnkgcGFyYW1ldGVyO1xuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3dldmVyLCBvbmx5IGEgc3Vic2V0IG9mIHRoZSBPRGF0YSBmaWx0ZXIgc3ludGF4IGlzIHN1cHBvcnRlZCBpbiB0aGUgQmxvYiBzZXJ2aWNlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBmaW5kQmxvYnNCeVRhZ3NJdGVtcy5cbiAgICAgKi9cbiAgICBmaW5kQmxvYnNCeVRhZ3NJdGVtcyh0YWdGaWx0ZXJTcWxFeHByZXNzaW9uXzEpIHtcbiAgICAgICAgcmV0dXJuIHRzbGliLl9fYXN5bmNHZW5lcmF0b3IodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiogZmluZEJsb2JzQnlUYWdzSXRlbXNfMSh0YWdGaWx0ZXJTcWxFeHByZXNzaW9uLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgICAgIHZhciBfYSwgZV8xLCBfYiwgX2M7XG4gICAgICAgICAgICBsZXQgbWFya2VyO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBfZCA9IHRydWUsIF9lID0gdHNsaWIuX19hc3luY1ZhbHVlcyh0aGlzLmZpbmRCbG9ic0J5VGFnc1NlZ21lbnRzKHRhZ0ZpbHRlclNxbEV4cHJlc3Npb24sIG1hcmtlciwgb3B0aW9ucykpLCBfZjsgX2YgPSB5aWVsZCB0c2xpYi5fX2F3YWl0KF9lLm5leHQoKSksIF9hID0gX2YuZG9uZSwgIV9hOyBfZCA9IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgX2MgPSBfZi52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgX2QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VnbWVudCA9IF9jO1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCB0c2xpYi5fX2F3YWl0KHlpZWxkKiB0c2xpYi5fX2FzeW5jRGVsZWdhdG9yKHRzbGliLl9fYXN5bmNWYWx1ZXMoc2VnbWVudC5ibG9icykpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFfZCAmJiAhX2EgJiYgKF9iID0gX2UucmV0dXJuKSkgeWllbGQgdHNsaWIuX19hd2FpdChfYi5jYWxsKF9lKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gYXN5bmMgaXRlcmFibGUgaXRlcmF0b3IgdG8gZmluZCBhbGwgYmxvYnMgd2l0aCBzcGVjaWZpZWQgdGFnXG4gICAgICogdW5kZXIgdGhlIHNwZWNpZmllZCBhY2NvdW50LlxuICAgICAqXG4gICAgICogLmJ5UGFnZSgpIHJldHVybnMgYW4gYXN5bmMgaXRlcmFibGUgaXRlcmF0b3IgdG8gbGlzdCB0aGUgYmxvYnMgaW4gcGFnZXMuXG4gICAgICpcbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9nZXQtYmxvYi1zZXJ2aWNlLXByb3BlcnRpZXNcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNpbmcgYGZvciBhd2FpdGAgc3ludGF4OlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBsZXQgaSA9IDE7XG4gICAgICogZm9yIGF3YWl0IChjb25zdCBibG9iIG9mIGJsb2JTZXJ2aWNlQ2xpZW50LmZpbmRCbG9ic0J5VGFncyhcInRhZ2tleT0ndGFndmFsdWUnXCIpKSB7XG4gICAgICogICBjb25zb2xlLmxvZyhgQmxvYiAke2krK306ICR7Y29udGFpbmVyLm5hbWV9YCk7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBgaXRlci5uZXh0KClgOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBsZXQgaSA9IDE7XG4gICAgICogY29uc3QgaXRlciA9IGJsb2JTZXJ2aWNlQ2xpZW50LmZpbmRCbG9ic0J5VGFncyhcInRhZ2tleT0ndGFndmFsdWUnXCIpO1xuICAgICAqIGxldCBibG9iSXRlbSA9IGF3YWl0IGl0ZXIubmV4dCgpO1xuICAgICAqIHdoaWxlICghYmxvYkl0ZW0uZG9uZSkge1xuICAgICAqICAgY29uc29sZS5sb2coYEJsb2IgJHtpKyt9OiAke2Jsb2JJdGVtLnZhbHVlLm5hbWV9YCk7XG4gICAgICogICBibG9iSXRlbSA9IGF3YWl0IGl0ZXIubmV4dCgpO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNpbmcgYGJ5UGFnZSgpYDpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogLy8gcGFzc2luZyBvcHRpb25hbCBtYXhQYWdlU2l6ZSBpbiB0aGUgcGFnZSBzZXR0aW5nc1xuICAgICAqIGxldCBpID0gMTtcbiAgICAgKiBmb3IgYXdhaXQgKGNvbnN0IHJlc3BvbnNlIG9mIGJsb2JTZXJ2aWNlQ2xpZW50LmZpbmRCbG9ic0J5VGFncyhcInRhZ2tleT0ndGFndmFsdWUnXCIpLmJ5UGFnZSh7IG1heFBhZ2VTaXplOiAyMCB9KSkge1xuICAgICAqICAgaWYgKHJlc3BvbnNlLmJsb2JzKSB7XG4gICAgICogICAgIGZvciAoY29uc3QgYmxvYiBvZiByZXNwb25zZS5ibG9icykge1xuICAgICAqICAgICAgIGNvbnNvbGUubG9nKGBCbG9iICR7aSsrfTogJHtibG9iLm5hbWV9YCk7XG4gICAgICogICAgIH1cbiAgICAgKiAgIH1cbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIHBhZ2luZyB3aXRoIGEgbWFya2VyOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBsZXQgaSA9IDE7XG4gICAgICogbGV0IGl0ZXJhdG9yID0gYmxvYlNlcnZpY2VDbGllbnQuZmluZEJsb2JzQnlUYWdzKFwidGFna2V5PSd0YWd2YWx1ZSdcIikuYnlQYWdlKHsgbWF4UGFnZVNpemU6IDIgfSk7XG4gICAgICogbGV0IHJlc3BvbnNlID0gKGF3YWl0IGl0ZXJhdG9yLm5leHQoKSkudmFsdWU7XG4gICAgICpcbiAgICAgKiAvLyBQcmludHMgMiBibG9iIG5hbWVzXG4gICAgICogaWYgKHJlc3BvbnNlLmJsb2JzKSB7XG4gICAgICogICBmb3IgKGNvbnN0IGJsb2Igb2YgcmVzcG9uc2UuYmxvYnMpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coYEJsb2IgJHtpKyt9OiAke2Jsb2IubmFtZX1gKTtcbiAgICAgKiAgIH1cbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBHZXRzIG5leHQgbWFya2VyXG4gICAgICogbGV0IG1hcmtlciA9IHJlc3BvbnNlLmNvbnRpbnVhdGlvblRva2VuO1xuICAgICAqIC8vIFBhc3NpbmcgbmV4dCBtYXJrZXIgYXMgY29udGludWF0aW9uVG9rZW5cbiAgICAgKiBpdGVyYXRvciA9IGJsb2JTZXJ2aWNlQ2xpZW50XG4gICAgICogICAuZmluZEJsb2JzQnlUYWdzKFwidGFna2V5PSd0YWd2YWx1ZSdcIilcbiAgICAgKiAgIC5ieVBhZ2UoeyBjb250aW51YXRpb25Ub2tlbjogbWFya2VyLCBtYXhQYWdlU2l6ZTogMTAgfSk7XG4gICAgICogcmVzcG9uc2UgPSAoYXdhaXQgaXRlcmF0b3IubmV4dCgpKS52YWx1ZTtcbiAgICAgKlxuICAgICAqIC8vIFByaW50cyBibG9iIG5hbWVzXG4gICAgICogaWYgKHJlc3BvbnNlLmJsb2JzKSB7XG4gICAgICogICBmb3IgKGNvbnN0IGJsb2Igb2YgcmVzcG9uc2UuYmxvYnMpIHtcbiAgICAgKiAgICAgIGNvbnNvbGUubG9nKGBCbG9iICR7aSsrfTogJHtibG9iLm5hbWV9YCk7XG4gICAgICogICB9XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQHBhcmFtIHRhZ0ZpbHRlclNxbEV4cHJlc3Npb24gLSAgVGhlIHdoZXJlIHBhcmFtZXRlciBlbmFibGVzIHRoZSBjYWxsZXIgdG8gcXVlcnkgYmxvYnMgd2hvc2UgdGFncyBtYXRjaCBhIGdpdmVuIGV4cHJlc3Npb24uXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBnaXZlbiBleHByZXNzaW9uIG11c3QgZXZhbHVhdGUgdG8gdHJ1ZSBmb3IgYSBibG9iIHRvIGJlIHJldHVybmVkIGluIHRoZSByZXN1bHRzLlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGVbT0RhdGEgLSBBQk5GXSBmaWx0ZXIgc3ludGF4IHJ1bGUgZGVmaW5lcyB0aGUgZm9ybWFsIGdyYW1tYXIgZm9yIHRoZSB2YWx1ZSBvZiB0aGUgd2hlcmUgcXVlcnkgcGFyYW1ldGVyO1xuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3dldmVyLCBvbmx5IGEgc3Vic2V0IG9mIHRoZSBPRGF0YSBmaWx0ZXIgc3ludGF4IGlzIHN1cHBvcnRlZCBpbiB0aGUgQmxvYiBzZXJ2aWNlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBmaW5kIGJsb2JzIGJ5IHRhZ3MuXG4gICAgICovXG4gICAgZmluZEJsb2JzQnlUYWdzKHRhZ0ZpbHRlclNxbEV4cHJlc3Npb24sIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICAvLyBBc3luY0l0ZXJhYmxlSXRlcmF0b3IgdG8gaXRlcmF0ZSBvdmVyIGJsb2JzXG4gICAgICAgIGNvbnN0IGxpc3RTZWdtZW50T3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBpdGVyID0gdGhpcy5maW5kQmxvYnNCeVRhZ3NJdGVtcyh0YWdGaWx0ZXJTcWxFeHByZXNzaW9uLCBsaXN0U2VnbWVudE9wdGlvbnMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBUaGUgbmV4dCBtZXRob2QsIHBhcnQgb2YgdGhlIGl0ZXJhdGlvbiBwcm90b2NvbFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBuZXh0KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVyLm5leHQoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFRoZSBjb25uZWN0aW9uIHRvIHRoZSBhc3luYyBpdGVyYXRvciwgcGFydCBvZiB0aGUgaXRlcmF0aW9uIHByb3RvY29sXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBSZXR1cm4gYW4gQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIHRoYXQgd29ya3MgYSBwYWdlIGF0IGEgdGltZVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBieVBhZ2U6IChzZXR0aW5ncyA9IHt9KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluZEJsb2JzQnlUYWdzU2VnbWVudHModGFnRmlsdGVyU3FsRXhwcmVzc2lvbiwgc2V0dGluZ3MuY29udGludWF0aW9uVG9rZW4sIE9iamVjdC5hc3NpZ24oeyBtYXhQYWdlU2l6ZTogc2V0dGluZ3MubWF4UGFnZVNpemUgfSwgbGlzdFNlZ21lbnRPcHRpb25zKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIEFzeW5jSXRlcmFibGVJdGVyYXRvciBmb3IgU2VydmljZUxpc3RDb250YWluZXJzU2VnbWVudFJlc3BvbnNlc1xuICAgICAqXG4gICAgICogQHBhcmFtIG1hcmtlciAtIEEgc3RyaW5nIHZhbHVlIHRoYXQgaWRlbnRpZmllcyB0aGUgcG9ydGlvbiBvZlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGxpc3Qgb2YgY29udGFpbmVycyB0byBiZSByZXR1cm5lZCB3aXRoIHRoZSBuZXh0IGxpc3Rpbmcgb3BlcmF0aW9uLiBUaGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiByZXR1cm5zIHRoZSBjb250aW51YXRpb25Ub2tlbiB2YWx1ZSB3aXRoaW4gdGhlIHJlc3BvbnNlIGJvZHkgaWYgdGhlXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICBsaXN0aW5nIG9wZXJhdGlvbiBkaWQgbm90IHJldHVybiBhbGwgY29udGFpbmVycyByZW1haW5pbmcgdG8gYmUgbGlzdGVkXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSBjdXJyZW50IHBhZ2UuIFRoZSBjb250aW51YXRpb25Ub2tlbiB2YWx1ZSBjYW4gYmUgdXNlZCBhcyB0aGUgdmFsdWUgZm9yXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWFya2VyIHBhcmFtZXRlciBpbiBhIHN1YnNlcXVlbnQgY2FsbCB0byByZXF1ZXN0IHRoZSBuZXh0IHBhZ2Ugb2YgbGlzdFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMuIFRoZSBtYXJrZXIgdmFsdWUgaXMgb3BhcXVlIHRvIHRoZSBjbGllbnQuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIGxpc3QgY29udGFpbmVycyBvcGVyYXRpb24uXG4gICAgICovXG4gICAgbGlzdFNlZ21lbnRzKG1hcmtlcl8xKSB7XG4gICAgICAgIHJldHVybiB0c2xpYi5fX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24qIGxpc3RTZWdtZW50c18xKG1hcmtlciwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgICAgICBsZXQgbGlzdENvbnRhaW5lcnNTZWdtZW50UmVzcG9uc2U7XG4gICAgICAgICAgICBpZiAoISFtYXJrZXIgfHwgbWFya2VyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RDb250YWluZXJzU2VnbWVudFJlc3BvbnNlID0geWllbGQgdHNsaWIuX19hd2FpdCh0aGlzLmxpc3RDb250YWluZXJzU2VnbWVudChtYXJrZXIsIG9wdGlvbnMpKTtcbiAgICAgICAgICAgICAgICAgICAgbGlzdENvbnRhaW5lcnNTZWdtZW50UmVzcG9uc2UuY29udGFpbmVySXRlbXMgPVxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdENvbnRhaW5lcnNTZWdtZW50UmVzcG9uc2UuY29udGFpbmVySXRlbXMgfHwgW107XG4gICAgICAgICAgICAgICAgICAgIG1hcmtlciA9IGxpc3RDb250YWluZXJzU2VnbWVudFJlc3BvbnNlLmNvbnRpbnVhdGlvblRva2VuO1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCB5aWVsZCB0c2xpYi5fX2F3YWl0KHlpZWxkIHRzbGliLl9fYXdhaXQobGlzdENvbnRhaW5lcnNTZWdtZW50UmVzcG9uc2UpKTtcbiAgICAgICAgICAgICAgICB9IHdoaWxlIChtYXJrZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBBc3luY0l0ZXJhYmxlSXRlcmF0b3IgZm9yIENvbnRhaW5lciBJdGVtc1xuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIGxpc3QgY29udGFpbmVycyBvcGVyYXRpb24uXG4gICAgICovXG4gICAgbGlzdEl0ZW1zKCkge1xuICAgICAgICByZXR1cm4gdHNsaWIuX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKiBsaXN0SXRlbXNfMShvcHRpb25zID0ge30pIHtcbiAgICAgICAgICAgIHZhciBfYSwgZV8yLCBfYiwgX2M7XG4gICAgICAgICAgICBsZXQgbWFya2VyO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBfZCA9IHRydWUsIF9lID0gdHNsaWIuX19hc3luY1ZhbHVlcyh0aGlzLmxpc3RTZWdtZW50cyhtYXJrZXIsIG9wdGlvbnMpKSwgX2Y7IF9mID0geWllbGQgdHNsaWIuX19hd2FpdChfZS5uZXh0KCkpLCBfYSA9IF9mLmRvbmUsICFfYTsgX2QgPSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgIF9jID0gX2YudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIF9kID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlZ21lbnQgPSBfYztcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgdHNsaWIuX19hd2FpdCh5aWVsZCogdHNsaWIuX19hc3luY0RlbGVnYXRvcih0c2xpYi5fX2FzeW5jVmFsdWVzKHNlZ21lbnQuY29udGFpbmVySXRlbXMpKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVfMl8xKSB7IGVfMiA9IHsgZXJyb3I6IGVfMl8xIH07IH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghX2QgJiYgIV9hICYmIChfYiA9IF9lLnJldHVybikpIHlpZWxkIHRzbGliLl9fYXdhaXQoX2IuY2FsbChfZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMikgdGhyb3cgZV8yLmVycm9yOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIGFzeW5jIGl0ZXJhYmxlIGl0ZXJhdG9yIHRvIGxpc3QgYWxsIHRoZSBjb250YWluZXJzXG4gICAgICogdW5kZXIgdGhlIHNwZWNpZmllZCBhY2NvdW50LlxuICAgICAqXG4gICAgICogLmJ5UGFnZSgpIHJldHVybnMgYW4gYXN5bmMgaXRlcmFibGUgaXRlcmF0b3IgdG8gbGlzdCB0aGUgY29udGFpbmVycyBpbiBwYWdlcy5cbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNpbmcgYGZvciBhd2FpdGAgc3ludGF4OlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBsZXQgaSA9IDE7XG4gICAgICogZm9yIGF3YWl0IChjb25zdCBjb250YWluZXIgb2YgYmxvYlNlcnZpY2VDbGllbnQubGlzdENvbnRhaW5lcnMoKSkge1xuICAgICAqICAgY29uc29sZS5sb2coYENvbnRhaW5lciAke2krK306ICR7Y29udGFpbmVyLm5hbWV9YCk7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBgaXRlci5uZXh0KClgOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBsZXQgaSA9IDE7XG4gICAgICogY29uc3QgaXRlciA9IGJsb2JTZXJ2aWNlQ2xpZW50Lmxpc3RDb250YWluZXJzKCk7XG4gICAgICogbGV0IGNvbnRhaW5lckl0ZW0gPSBhd2FpdCBpdGVyLm5leHQoKTtcbiAgICAgKiB3aGlsZSAoIWNvbnRhaW5lckl0ZW0uZG9uZSkge1xuICAgICAqICAgY29uc29sZS5sb2coYENvbnRhaW5lciAke2krK306ICR7Y29udGFpbmVySXRlbS52YWx1ZS5uYW1lfWApO1xuICAgICAqICAgY29udGFpbmVySXRlbSA9IGF3YWl0IGl0ZXIubmV4dCgpO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNpbmcgYGJ5UGFnZSgpYDpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogLy8gcGFzc2luZyBvcHRpb25hbCBtYXhQYWdlU2l6ZSBpbiB0aGUgcGFnZSBzZXR0aW5nc1xuICAgICAqIGxldCBpID0gMTtcbiAgICAgKiBmb3IgYXdhaXQgKGNvbnN0IHJlc3BvbnNlIG9mIGJsb2JTZXJ2aWNlQ2xpZW50Lmxpc3RDb250YWluZXJzKCkuYnlQYWdlKHsgbWF4UGFnZVNpemU6IDIwIH0pKSB7XG4gICAgICogICBpZiAocmVzcG9uc2UuY29udGFpbmVySXRlbXMpIHtcbiAgICAgKiAgICAgZm9yIChjb25zdCBjb250YWluZXIgb2YgcmVzcG9uc2UuY29udGFpbmVySXRlbXMpIHtcbiAgICAgKiAgICAgICBjb25zb2xlLmxvZyhgQ29udGFpbmVyICR7aSsrfTogJHtjb250YWluZXIubmFtZX1gKTtcbiAgICAgKiAgICAgfVxuICAgICAqICAgfVxuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNpbmcgcGFnaW5nIHdpdGggYSBtYXJrZXI6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGxldCBpID0gMTtcbiAgICAgKiBsZXQgaXRlcmF0b3IgPSBibG9iU2VydmljZUNsaWVudC5saXN0Q29udGFpbmVycygpLmJ5UGFnZSh7IG1heFBhZ2VTaXplOiAyIH0pO1xuICAgICAqIGxldCByZXNwb25zZSA9IChhd2FpdCBpdGVyYXRvci5uZXh0KCkpLnZhbHVlO1xuICAgICAqXG4gICAgICogLy8gUHJpbnRzIDIgY29udGFpbmVyIG5hbWVzXG4gICAgICogaWYgKHJlc3BvbnNlLmNvbnRhaW5lckl0ZW1zKSB7XG4gICAgICogICBmb3IgKGNvbnN0IGNvbnRhaW5lciBvZiByZXNwb25zZS5jb250YWluZXJJdGVtcykge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhgQ29udGFpbmVyICR7aSsrfTogJHtjb250YWluZXIubmFtZX1gKTtcbiAgICAgKiAgIH1cbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBHZXRzIG5leHQgbWFya2VyXG4gICAgICogbGV0IG1hcmtlciA9IHJlc3BvbnNlLmNvbnRpbnVhdGlvblRva2VuO1xuICAgICAqIC8vIFBhc3NpbmcgbmV4dCBtYXJrZXIgYXMgY29udGludWF0aW9uVG9rZW5cbiAgICAgKiBpdGVyYXRvciA9IGJsb2JTZXJ2aWNlQ2xpZW50XG4gICAgICogICAubGlzdENvbnRhaW5lcnMoKVxuICAgICAqICAgLmJ5UGFnZSh7IGNvbnRpbnVhdGlvblRva2VuOiBtYXJrZXIsIG1heFBhZ2VTaXplOiAxMCB9KTtcbiAgICAgKiByZXNwb25zZSA9IChhd2FpdCBpdGVyYXRvci5uZXh0KCkpLnZhbHVlO1xuICAgICAqXG4gICAgICogLy8gUHJpbnRzIDEwIGNvbnRhaW5lciBuYW1lc1xuICAgICAqIGlmIChyZXNwb25zZS5jb250YWluZXJJdGVtcykge1xuICAgICAqICAgZm9yIChjb25zdCBjb250YWluZXIgb2YgcmVzcG9uc2UuY29udGFpbmVySXRlbXMpIHtcbiAgICAgKiAgICAgIGNvbnNvbGUubG9nKGBDb250YWluZXIgJHtpKyt9OiAke2NvbnRhaW5lci5uYW1lfWApO1xuICAgICAqICAgfVxuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBsaXN0IGNvbnRhaW5lcnMuXG4gICAgICogQHJldHVybnMgQW4gYXN5bmNJdGVyYWJsZUl0ZXJhdG9yIHRoYXQgc3VwcG9ydHMgcGFnaW5nLlxuICAgICAqL1xuICAgIGxpc3RDb250YWluZXJzKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBpZiAob3B0aW9ucy5wcmVmaXggPT09IFwiXCIpIHtcbiAgICAgICAgICAgIG9wdGlvbnMucHJlZml4ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluY2x1ZGUgPSBbXTtcbiAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZURlbGV0ZWQpIHtcbiAgICAgICAgICAgIGluY2x1ZGUucHVzaChcImRlbGV0ZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZU1ldGFkYXRhKSB7XG4gICAgICAgICAgICBpbmNsdWRlLnB1c2goXCJtZXRhZGF0YVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5pbmNsdWRlU3lzdGVtKSB7XG4gICAgICAgICAgICBpbmNsdWRlLnB1c2goXCJzeXN0ZW1cIik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIHRvIGl0ZXJhdGUgb3ZlciBjb250YWluZXJzXG4gICAgICAgIGNvbnN0IGxpc3RTZWdtZW50T3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyksIChpbmNsdWRlLmxlbmd0aCA+IDAgPyB7IGluY2x1ZGUgfSA6IHt9KSk7XG4gICAgICAgIGNvbnN0IGl0ZXIgPSB0aGlzLmxpc3RJdGVtcyhsaXN0U2VnbWVudE9wdGlvbnMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBUaGUgbmV4dCBtZXRob2QsIHBhcnQgb2YgdGhlIGl0ZXJhdGlvbiBwcm90b2NvbFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBuZXh0KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVyLm5leHQoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFRoZSBjb25uZWN0aW9uIHRvIHRoZSBhc3luYyBpdGVyYXRvciwgcGFydCBvZiB0aGUgaXRlcmF0aW9uIHByb3RvY29sXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBSZXR1cm4gYW4gQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIHRoYXQgd29ya3MgYSBwYWdlIGF0IGEgdGltZVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBieVBhZ2U6IChzZXR0aW5ncyA9IHt9KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubGlzdFNlZ21lbnRzKHNldHRpbmdzLmNvbnRpbnVhdGlvblRva2VuLCBPYmplY3QuYXNzaWduKHsgbWF4UGFnZVNpemU6IHNldHRpbmdzLm1heFBhZ2VTaXplIH0sIGxpc3RTZWdtZW50T3B0aW9ucykpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogT05MWSBBVkFJTEFCTEUgV0hFTiBVU0lORyBCRUFSRVIgVE9LRU4gQVVUSEVOVElDQVRJT04gKFRva2VuQ3JlZGVudGlhbCkuXG4gICAgICpcbiAgICAgKiBSZXRyaWV2ZXMgYSB1c2VyIGRlbGVnYXRpb24ga2V5IGZvciB0aGUgQmxvYiBzZXJ2aWNlLiBUaGlzIGlzIG9ubHkgYSB2YWxpZCBvcGVyYXRpb24gd2hlbiB1c2luZ1xuICAgICAqIGJlYXJlciB0b2tlbiBhdXRoZW50aWNhdGlvbi5cbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2dldC11c2VyLWRlbGVnYXRpb24ta2V5XG4gICAgICpcbiAgICAgKiBAcGFyYW0gc3RhcnRzT24gLSAgICAgIFRoZSBzdGFydCB0aW1lIGZvciB0aGUgdXNlciBkZWxlZ2F0aW9uIFNBUy4gTXVzdCBiZSB3aXRoaW4gNyBkYXlzIG9mIHRoZSBjdXJyZW50IHRpbWVcbiAgICAgKiBAcGFyYW0gZXhwaXJlc09uIC0gICAgIFRoZSBlbmQgdGltZSBmb3IgdGhlIHVzZXIgZGVsZWdhdGlvbiBTQVMuIE11c3QgYmUgd2l0aGluIDcgZGF5cyBvZiB0aGUgY3VycmVudCB0aW1lXG4gICAgICovXG4gICAgYXN5bmMgZ2V0VXNlckRlbGVnYXRpb25LZXkoc3RhcnRzT24sIGV4cGlyZXNPbiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYlNlcnZpY2VDbGllbnQtZ2V0VXNlckRlbGVnYXRpb25LZXlcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuc2VydmljZUNvbnRleHQuZ2V0VXNlckRlbGVnYXRpb25LZXkoe1xuICAgICAgICAgICAgICAgIHN0YXJ0c09uOiB0cnVuY2F0ZWRJU084MDYxRGF0ZShzdGFydHNPbiwgZmFsc2UpLFxuICAgICAgICAgICAgICAgIGV4cGlyZXNPbjogdHJ1bmNhdGVkSVNPODA2MURhdGUoZXhwaXJlc09uLCBmYWxzZSksXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgY29uc3QgdXNlckRlbGVnYXRpb25LZXkgPSB7XG4gICAgICAgICAgICAgICAgc2lnbmVkT2JqZWN0SWQ6IHJlc3BvbnNlLnNpZ25lZE9iamVjdElkLFxuICAgICAgICAgICAgICAgIHNpZ25lZFRlbmFudElkOiByZXNwb25zZS5zaWduZWRUZW5hbnRJZCxcbiAgICAgICAgICAgICAgICBzaWduZWRTdGFydHNPbjogbmV3IERhdGUocmVzcG9uc2Uuc2lnbmVkU3RhcnRzT24pLFxuICAgICAgICAgICAgICAgIHNpZ25lZEV4cGlyZXNPbjogbmV3IERhdGUocmVzcG9uc2Uuc2lnbmVkRXhwaXJlc09uKSxcbiAgICAgICAgICAgICAgICBzaWduZWRTZXJ2aWNlOiByZXNwb25zZS5zaWduZWRTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHNpZ25lZFZlcnNpb246IHJlc3BvbnNlLnNpZ25lZFZlcnNpb24sXG4gICAgICAgICAgICAgICAgdmFsdWU6IHJlc3BvbnNlLnZhbHVlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IE9iamVjdC5hc3NpZ24oeyBfcmVzcG9uc2U6IHJlc3BvbnNlLl9yZXNwb25zZSwgcmVxdWVzdElkOiByZXNwb25zZS5yZXF1ZXN0SWQsIGNsaWVudFJlcXVlc3RJZDogcmVzcG9uc2UuY2xpZW50UmVxdWVzdElkLCB2ZXJzaW9uOiByZXNwb25zZS52ZXJzaW9uLCBkYXRlOiByZXNwb25zZS5kYXRlLCBlcnJvckNvZGU6IHJlc3BvbnNlLmVycm9yQ29kZSB9LCB1c2VyRGVsZWdhdGlvbktleSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIEJsb2JCYXRjaENsaWVudCBvYmplY3QgdG8gY29uZHVjdCBiYXRjaCBvcGVyYXRpb25zLlxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvYmxvYi1iYXRjaFxuICAgICAqXG4gICAgICogQHJldHVybnMgQSBuZXcgQmxvYkJhdGNoQ2xpZW50IG9iamVjdCBmb3IgdGhpcyBzZXJ2aWNlLlxuICAgICAqL1xuICAgIGdldEJsb2JCYXRjaENsaWVudCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBCbG9iQmF0Y2hDbGllbnQodGhpcy51cmwsIHRoaXMucGlwZWxpbmUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBPbmx5IGF2YWlsYWJsZSBmb3IgQmxvYlNlcnZpY2VDbGllbnQgY29uc3RydWN0ZWQgd2l0aCBhIHNoYXJlZCBrZXkgY3JlZGVudGlhbC5cbiAgICAgKlxuICAgICAqIEdlbmVyYXRlcyBhIEJsb2IgYWNjb3VudCBTaGFyZWQgQWNjZXNzIFNpZ25hdHVyZSAoU0FTKSBVUkkgYmFzZWQgb24gdGhlIGNsaWVudCBwcm9wZXJ0aWVzXG4gICAgICogYW5kIHBhcmFtZXRlcnMgcGFzc2VkIGluLiBUaGUgU0FTIGlzIHNpZ25lZCBieSB0aGUgc2hhcmVkIGtleSBjcmVkZW50aWFsIG9mIHRoZSBjbGllbnQuXG4gICAgICpcbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9jcmVhdGUtYWNjb3VudC1zYXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBleHBpcmVzT24gLSBPcHRpb25hbC4gVGhlIHRpbWUgYXQgd2hpY2ggdGhlIHNoYXJlZCBhY2Nlc3Mgc2lnbmF0dXJlIGJlY29tZXMgaW52YWxpZC4gRGVmYXVsdCB0byBhbiBob3VyIGxhdGVyIGlmIG5vdCBwcm92aWRlZC5cbiAgICAgKiBAcGFyYW0gcGVybWlzc2lvbnMgLSBTcGVjaWZpZXMgdGhlIGxpc3Qgb2YgcGVybWlzc2lvbnMgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBTQVMuXG4gICAgICogQHBhcmFtIHJlc291cmNlVHlwZXMgLSBTcGVjaWZpZXMgdGhlIHJlc291cmNlIHR5cGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2hhcmVkIGFjY2VzcyBzaWduYXR1cmUuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBwYXJhbWV0ZXJzLlxuICAgICAqIEByZXR1cm5zIEFuIGFjY291bnQgU0FTIFVSSSBjb25zaXN0aW5nIG9mIHRoZSBVUkkgdG8gdGhlIHJlc291cmNlIHJlcHJlc2VudGVkIGJ5IHRoaXMgY2xpZW50LCBmb2xsb3dlZCBieSB0aGUgZ2VuZXJhdGVkIFNBUyB0b2tlbi5cbiAgICAgKi9cbiAgICBnZW5lcmF0ZUFjY291bnRTYXNVcmwoZXhwaXJlc09uLCBwZXJtaXNzaW9ucyA9IEFjY291bnRTQVNQZXJtaXNzaW9ucy5wYXJzZShcInJcIiksIHJlc291cmNlVHlwZXMgPSBcInNjb1wiLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgaWYgKCEodGhpcy5jcmVkZW50aWFsIGluc3RhbmNlb2YgU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwpKSB7XG4gICAgICAgICAgICB0aHJvdyBSYW5nZUVycm9yKFwiQ2FuIG9ubHkgZ2VuZXJhdGUgdGhlIGFjY291bnQgU0FTIHdoZW4gdGhlIGNsaWVudCBpcyBpbml0aWFsaXplZCB3aXRoIGEgc2hhcmVkIGtleSBjcmVkZW50aWFsXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChleHBpcmVzT24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICAgICAgICAgIGV4cGlyZXNPbiA9IG5ldyBEYXRlKG5vdy5nZXRUaW1lKCkgKyAzNjAwICogMTAwMCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2FzID0gZ2VuZXJhdGVBY2NvdW50U0FTUXVlcnlQYXJhbWV0ZXJzKE9iamVjdC5hc3NpZ24oeyBwZXJtaXNzaW9ucyxcbiAgICAgICAgICAgIGV4cGlyZXNPbixcbiAgICAgICAgICAgIHJlc291cmNlVHlwZXMsIHNlcnZpY2VzOiBBY2NvdW50U0FTU2VydmljZXMucGFyc2UoXCJiXCIpLnRvU3RyaW5nKCkgfSwgb3B0aW9ucyksIHRoaXMuY3JlZGVudGlhbCkudG9TdHJpbmcoKTtcbiAgICAgICAgcmV0dXJuIGFwcGVuZFRvVVJMUXVlcnkodGhpcy51cmwsIHNhcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE9ubHkgYXZhaWxhYmxlIGZvciBCbG9iU2VydmljZUNsaWVudCBjb25zdHJ1Y3RlZCB3aXRoIGEgc2hhcmVkIGtleSBjcmVkZW50aWFsLlxuICAgICAqXG4gICAgICogR2VuZXJhdGVzIHN0cmluZyB0byBzaWduIGZvciBhIEJsb2IgYWNjb3VudCBTaGFyZWQgQWNjZXNzIFNpZ25hdHVyZSAoU0FTKSBVUkkgYmFzZWQgb25cbiAgICAgKiB0aGUgY2xpZW50IHByb3BlcnRpZXMgYW5kIHBhcmFtZXRlcnMgcGFzc2VkIGluLiBUaGUgU0FTIGlzIHNpZ25lZCBieSB0aGUgc2hhcmVkIGtleSBjcmVkZW50aWFsIG9mIHRoZSBjbGllbnQuXG4gICAgICpcbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9jcmVhdGUtYWNjb3VudC1zYXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBleHBpcmVzT24gLSBPcHRpb25hbC4gVGhlIHRpbWUgYXQgd2hpY2ggdGhlIHNoYXJlZCBhY2Nlc3Mgc2lnbmF0dXJlIGJlY29tZXMgaW52YWxpZC4gRGVmYXVsdCB0byBhbiBob3VyIGxhdGVyIGlmIG5vdCBwcm92aWRlZC5cbiAgICAgKiBAcGFyYW0gcGVybWlzc2lvbnMgLSBTcGVjaWZpZXMgdGhlIGxpc3Qgb2YgcGVybWlzc2lvbnMgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBTQVMuXG4gICAgICogQHBhcmFtIHJlc291cmNlVHlwZXMgLSBTcGVjaWZpZXMgdGhlIHJlc291cmNlIHR5cGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2hhcmVkIGFjY2VzcyBzaWduYXR1cmUuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBwYXJhbWV0ZXJzLlxuICAgICAqIEByZXR1cm5zIEFuIGFjY291bnQgU0FTIFVSSSBjb25zaXN0aW5nIG9mIHRoZSBVUkkgdG8gdGhlIHJlc291cmNlIHJlcHJlc2VudGVkIGJ5IHRoaXMgY2xpZW50LCBmb2xsb3dlZCBieSB0aGUgZ2VuZXJhdGVkIFNBUyB0b2tlbi5cbiAgICAgKi9cbiAgICBnZW5lcmF0ZVNhc1N0cmluZ1RvU2lnbihleHBpcmVzT24sIHBlcm1pc3Npb25zID0gQWNjb3VudFNBU1Blcm1pc3Npb25zLnBhcnNlKFwiclwiKSwgcmVzb3VyY2VUeXBlcyA9IFwic2NvXCIsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBpZiAoISh0aGlzLmNyZWRlbnRpYWwgaW5zdGFuY2VvZiBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbCkpIHtcbiAgICAgICAgICAgIHRocm93IFJhbmdlRXJyb3IoXCJDYW4gb25seSBnZW5lcmF0ZSB0aGUgYWNjb3VudCBTQVMgd2hlbiB0aGUgY2xpZW50IGlzIGluaXRpYWxpemVkIHdpdGggYSBzaGFyZWQga2V5IGNyZWRlbnRpYWxcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV4cGlyZXNPbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgZXhwaXJlc09uID0gbmV3IERhdGUobm93LmdldFRpbWUoKSArIDM2MDAgKiAxMDAwKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2VuZXJhdGVBY2NvdW50U0FTUXVlcnlQYXJhbWV0ZXJzSW50ZXJuYWwoT2JqZWN0LmFzc2lnbih7IHBlcm1pc3Npb25zLFxuICAgICAgICAgICAgZXhwaXJlc09uLFxuICAgICAgICAgICAgcmVzb3VyY2VUeXBlcywgc2VydmljZXM6IEFjY291bnRTQVNTZXJ2aWNlcy5wYXJzZShcImJcIikudG9TdHJpbmcoKSB9LCBvcHRpb25zKSwgdGhpcy5jcmVkZW50aWFsKS5zdHJpbmdUb1NpZ247XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKiBLbm93biB2YWx1ZXMgb2Yge0BsaW5rIEVuY3J5cHRpb25BbGdvcml0aG1UeXBlfSB0aGF0IHRoZSBzZXJ2aWNlIGFjY2VwdHMuICovXG5leHBvcnRzLktub3duRW5jcnlwdGlvbkFsZ29yaXRobVR5cGUgPSB2b2lkIDA7XG4oZnVuY3Rpb24gKEtub3duRW5jcnlwdGlvbkFsZ29yaXRobVR5cGUpIHtcbiAgICBLbm93bkVuY3J5cHRpb25BbGdvcml0aG1UeXBlW1wiQUVTMjU2XCJdID0gXCJBRVMyNTZcIjtcbn0pKGV4cG9ydHMuS25vd25FbmNyeXB0aW9uQWxnb3JpdGhtVHlwZSB8fCAoZXhwb3J0cy5Lbm93bkVuY3J5cHRpb25BbGdvcml0aG1UeXBlID0ge30pKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUmVzdEVycm9yXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29yZVJlc3RQaXBlbGluZS5SZXN0RXJyb3I7IH1cbn0pO1xuZXhwb3J0cy5BY2NvdW50U0FTUGVybWlzc2lvbnMgPSBBY2NvdW50U0FTUGVybWlzc2lvbnM7XG5leHBvcnRzLkFjY291bnRTQVNSZXNvdXJjZVR5cGVzID0gQWNjb3VudFNBU1Jlc291cmNlVHlwZXM7XG5leHBvcnRzLkFjY291bnRTQVNTZXJ2aWNlcyA9IEFjY291bnRTQVNTZXJ2aWNlcztcbmV4cG9ydHMuQW5vbnltb3VzQ3JlZGVudGlhbCA9IEFub255bW91c0NyZWRlbnRpYWw7XG5leHBvcnRzLkFub255bW91c0NyZWRlbnRpYWxQb2xpY3kgPSBBbm9ueW1vdXNDcmVkZW50aWFsUG9saWN5O1xuZXhwb3J0cy5BcHBlbmRCbG9iQ2xpZW50ID0gQXBwZW5kQmxvYkNsaWVudDtcbmV4cG9ydHMuQmFzZVJlcXVlc3RQb2xpY3kgPSBCYXNlUmVxdWVzdFBvbGljeTtcbmV4cG9ydHMuQmxvYkJhdGNoID0gQmxvYkJhdGNoO1xuZXhwb3J0cy5CbG9iQmF0Y2hDbGllbnQgPSBCbG9iQmF0Y2hDbGllbnQ7XG5leHBvcnRzLkJsb2JDbGllbnQgPSBCbG9iQ2xpZW50O1xuZXhwb3J0cy5CbG9iTGVhc2VDbGllbnQgPSBCbG9iTGVhc2VDbGllbnQ7XG5leHBvcnRzLkJsb2JTQVNQZXJtaXNzaW9ucyA9IEJsb2JTQVNQZXJtaXNzaW9ucztcbmV4cG9ydHMuQmxvYlNlcnZpY2VDbGllbnQgPSBCbG9iU2VydmljZUNsaWVudDtcbmV4cG9ydHMuQmxvY2tCbG9iQ2xpZW50ID0gQmxvY2tCbG9iQ2xpZW50O1xuZXhwb3J0cy5Db250YWluZXJDbGllbnQgPSBDb250YWluZXJDbGllbnQ7XG5leHBvcnRzLkNvbnRhaW5lclNBU1Blcm1pc3Npb25zID0gQ29udGFpbmVyU0FTUGVybWlzc2lvbnM7XG5leHBvcnRzLkNyZWRlbnRpYWwgPSBDcmVkZW50aWFsO1xuZXhwb3J0cy5DcmVkZW50aWFsUG9saWN5ID0gQ3JlZGVudGlhbFBvbGljeTtcbmV4cG9ydHMuUGFnZUJsb2JDbGllbnQgPSBQYWdlQmxvYkNsaWVudDtcbmV4cG9ydHMuUGlwZWxpbmUgPSBQaXBlbGluZTtcbmV4cG9ydHMuU0FTUXVlcnlQYXJhbWV0ZXJzID0gU0FTUXVlcnlQYXJhbWV0ZXJzO1xuZXhwb3J0cy5TdG9yYWdlQnJvd3NlclBvbGljeSA9IFN0b3JhZ2VCcm93c2VyUG9saWN5O1xuZXhwb3J0cy5TdG9yYWdlQnJvd3NlclBvbGljeUZhY3RvcnkgPSBTdG9yYWdlQnJvd3NlclBvbGljeUZhY3Rvcnk7XG5leHBvcnRzLlN0b3JhZ2VPQXV0aFNjb3BlcyA9IFN0b3JhZ2VPQXV0aFNjb3BlcztcbmV4cG9ydHMuU3RvcmFnZVJldHJ5UG9saWN5ID0gU3RvcmFnZVJldHJ5UG9saWN5O1xuZXhwb3J0cy5TdG9yYWdlUmV0cnlQb2xpY3lGYWN0b3J5ID0gU3RvcmFnZVJldHJ5UG9saWN5RmFjdG9yeTtcbmV4cG9ydHMuU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwgPSBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbDtcbmV4cG9ydHMuU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWxQb2xpY3kgPSBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbFBvbGljeTtcbmV4cG9ydHMuZ2VuZXJhdGVBY2NvdW50U0FTUXVlcnlQYXJhbWV0ZXJzID0gZ2VuZXJhdGVBY2NvdW50U0FTUXVlcnlQYXJhbWV0ZXJzO1xuZXhwb3J0cy5nZW5lcmF0ZUJsb2JTQVNRdWVyeVBhcmFtZXRlcnMgPSBnZW5lcmF0ZUJsb2JTQVNRdWVyeVBhcmFtZXRlcnM7XG5leHBvcnRzLmdldEJsb2JTZXJ2aWNlQWNjb3VudEF1ZGllbmNlID0gZ2V0QmxvYlNlcnZpY2VBY2NvdW50QXVkaWVuY2U7XG5leHBvcnRzLmlzUGlwZWxpbmVMaWtlID0gaXNQaXBlbGluZUxpa2U7XG5leHBvcnRzLmxvZ2dlciA9IGxvZ2dlcjtcbmV4cG9ydHMubmV3UGlwZWxpbmUgPSBuZXdQaXBlbGluZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnVwbG9hZFppcFRvQmxvYlN0b3JhZ2UgPSB2b2lkIDA7XG5jb25zdCBzdG9yYWdlX2Jsb2JfMSA9IHJlcXVpcmUoXCJAYXp1cmUvc3RvcmFnZS1ibG9iXCIpO1xuY29uc3QgY29uZmlnXzEgPSByZXF1aXJlKFwiLi4vc2hhcmVkL2NvbmZpZ1wiKTtcbmNvbnN0IGNvcmUgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIkBhY3Rpb25zL2NvcmVcIikpO1xuY29uc3QgY3J5cHRvID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJjcnlwdG9cIikpO1xuY29uc3Qgc3RyZWFtID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJzdHJlYW1cIikpO1xuY29uc3QgZXJyb3JzXzEgPSByZXF1aXJlKFwiLi4vc2hhcmVkL2Vycm9yc1wiKTtcbmZ1bmN0aW9uIHVwbG9hZFppcFRvQmxvYlN0b3JhZ2UoYXV0aGVudGljYXRlZFVwbG9hZFVSTCwgemlwVXBsb2FkU3RyZWFtKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgbGV0IHVwbG9hZEJ5dGVDb3VudCA9IDA7XG4gICAgICAgIGxldCBsYXN0UHJvZ3Jlc3NUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgY29uc3QgYWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgICAgICBjb25zdCBjaHVua1RpbWVyID0gKGludGVydmFsKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoRGF0ZS5ub3coKSAtIGxhc3RQcm9ncmVzc1RpbWUgPiBpbnRlcnZhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignVXBsb2FkIHByb2dyZXNzIHN0YWxsZWQuJykpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwgaW50ZXJ2YWwpO1xuICAgICAgICAgICAgICAgIGFib3J0Q29udHJvbGxlci5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGltZXIpO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IG1heENvbmN1cnJlbmN5ID0gKDAsIGNvbmZpZ18xLmdldENvbmN1cnJlbmN5KSgpO1xuICAgICAgICBjb25zdCBidWZmZXJTaXplID0gKDAsIGNvbmZpZ18xLmdldFVwbG9hZENodW5rU2l6ZSkoKTtcbiAgICAgICAgY29uc3QgYmxvYkNsaWVudCA9IG5ldyBzdG9yYWdlX2Jsb2JfMS5CbG9iQ2xpZW50KGF1dGhlbnRpY2F0ZWRVcGxvYWRVUkwpO1xuICAgICAgICBjb25zdCBibG9ja0Jsb2JDbGllbnQgPSBibG9iQ2xpZW50LmdldEJsb2NrQmxvYkNsaWVudCgpO1xuICAgICAgICBjb3JlLmRlYnVnKGBVcGxvYWRpbmcgYXJ0aWZhY3QgemlwIHRvIGJsb2Igc3RvcmFnZSB3aXRoIG1heENvbmN1cnJlbmN5OiAke21heENvbmN1cnJlbmN5fSwgYnVmZmVyU2l6ZTogJHtidWZmZXJTaXplfWApO1xuICAgICAgICBjb25zdCB1cGxvYWRDYWxsYmFjayA9IChwcm9ncmVzcykgPT4ge1xuICAgICAgICAgICAgY29yZS5pbmZvKGBVcGxvYWRlZCBieXRlcyAke3Byb2dyZXNzLmxvYWRlZEJ5dGVzfWApO1xuICAgICAgICAgICAgdXBsb2FkQnl0ZUNvdW50ID0gcHJvZ3Jlc3MubG9hZGVkQnl0ZXM7XG4gICAgICAgICAgICBsYXN0UHJvZ3Jlc3NUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGJsb2JIVFRQSGVhZGVyczogeyBibG9iQ29udGVudFR5cGU6ICd6aXAnIH0sXG4gICAgICAgICAgICBvblByb2dyZXNzOiB1cGxvYWRDYWxsYmFjayxcbiAgICAgICAgICAgIGFib3J0U2lnbmFsOiBhYm9ydENvbnRyb2xsZXIuc2lnbmFsXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaGEyNTZIYXNoID0gdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCB1cGxvYWRTdHJlYW0gPSBuZXcgc3RyZWFtLlBhc3NUaHJvdWdoKCk7XG4gICAgICAgIGNvbnN0IGhhc2hTdHJlYW0gPSBjcnlwdG8uY3JlYXRlSGFzaCgnc2hhMjU2Jyk7XG4gICAgICAgIHppcFVwbG9hZFN0cmVhbS5waXBlKHVwbG9hZFN0cmVhbSk7IC8vIFRoaXMgc3RyZWFtIGlzIHVzZWQgZm9yIHRoZSB1cGxvYWRcbiAgICAgICAgemlwVXBsb2FkU3RyZWFtLnBpcGUoaGFzaFN0cmVhbSkuc2V0RW5jb2RpbmcoJ2hleCcpOyAvLyBUaGlzIHN0cmVhbSBpcyB1c2VkIHRvIGNvbXB1dGUgYSBoYXNoIG9mIHRoZSB6aXAgY29udGVudCB0aGF0IGdldHMgdXNlZC4gSW50ZWdyaXR5IGNoZWNrXG4gICAgICAgIGNvcmUuaW5mbygnQmVnaW5uaW5nIHVwbG9hZCBvZiBhcnRpZmFjdCBjb250ZW50IHRvIGJsb2Igc3RvcmFnZScpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgeWllbGQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgICAgICAgICBibG9ja0Jsb2JDbGllbnQudXBsb2FkU3RyZWFtKHVwbG9hZFN0cmVhbSwgYnVmZmVyU2l6ZSwgbWF4Q29uY3VycmVuY3ksIG9wdGlvbnMpLFxuICAgICAgICAgICAgICAgIGNodW5rVGltZXIoKDAsIGNvbmZpZ18xLmdldFVwbG9hZENodW5rVGltZW91dCkoKSlcbiAgICAgICAgICAgIF0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgaWYgKGVycm9yc18xLk5ldHdvcmtFcnJvci5pc05ldHdvcmtFcnJvckNvZGUoZXJyb3IgPT09IG51bGwgfHwgZXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGVycm9yLmNvZGUpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGVycm9yc18xLk5ldHdvcmtFcnJvcihlcnJvciA9PT0gbnVsbCB8fCBlcnJvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogZXJyb3IuY29kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIGFib3J0Q29udHJvbGxlci5hYm9ydCgpO1xuICAgICAgICB9XG4gICAgICAgIGNvcmUuaW5mbygnRmluaXNoZWQgdXBsb2FkaW5nIGFydGlmYWN0IGNvbnRlbnQgdG8gYmxvYiBzdG9yYWdlIScpO1xuICAgICAgICBoYXNoU3RyZWFtLmVuZCgpO1xuICAgICAgICBzaGEyNTZIYXNoID0gaGFzaFN0cmVhbS5yZWFkKCk7XG4gICAgICAgIGNvcmUuaW5mbyhgU0hBMjU2IGhhc2ggb2YgdXBsb2FkZWQgYXJ0aWZhY3QgemlwIGlzICR7c2hhMjU2SGFzaH1gKTtcbiAgICAgICAgaWYgKHVwbG9hZEJ5dGVDb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgY29yZS53YXJuaW5nKGBObyBkYXRhIHdhcyB1cGxvYWRlZCB0byBibG9iIHN0b3JhZ2UuIFJlcG9ydGVkIHVwbG9hZCBieXRlIGNvdW50IGlzIDAuYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHVwbG9hZFNpemU6IHVwbG9hZEJ5dGVDb3VudCxcbiAgICAgICAgICAgIHNoYTI1Nkhhc2hcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cbmV4cG9ydHMudXBsb2FkWmlwVG9CbG9iU3RvcmFnZSA9IHVwbG9hZFppcFRvQmxvYlN0b3JhZ2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ibG9iLXVwbG9hZC5qcy5tYXAiLAogICAgImNvbnN0IGlzV2luZG93cyA9IHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JyAmJlxuICBwcm9jZXNzICYmXG4gIHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMidcbm1vZHVsZS5leHBvcnRzID0gaXNXaW5kb3dzID8geyBzZXA6ICdcXFxcJyB9IDogeyBzZXA6ICcvJyB9XG4iLAogICAgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gYmFsYW5jZWQ7XG5mdW5jdGlvbiBiYWxhbmNlZChhLCBiLCBzdHIpIHtcbiAgaWYgKGEgaW5zdGFuY2VvZiBSZWdFeHApIGEgPSBtYXliZU1hdGNoKGEsIHN0cik7XG4gIGlmIChiIGluc3RhbmNlb2YgUmVnRXhwKSBiID0gbWF5YmVNYXRjaChiLCBzdHIpO1xuXG4gIHZhciByID0gcmFuZ2UoYSwgYiwgc3RyKTtcblxuICByZXR1cm4gciAmJiB7XG4gICAgc3RhcnQ6IHJbMF0sXG4gICAgZW5kOiByWzFdLFxuICAgIHByZTogc3RyLnNsaWNlKDAsIHJbMF0pLFxuICAgIGJvZHk6IHN0ci5zbGljZShyWzBdICsgYS5sZW5ndGgsIHJbMV0pLFxuICAgIHBvc3Q6IHN0ci5zbGljZShyWzFdICsgYi5sZW5ndGgpXG4gIH07XG59XG5cbmZ1bmN0aW9uIG1heWJlTWF0Y2gocmVnLCBzdHIpIHtcbiAgdmFyIG0gPSBzdHIubWF0Y2gocmVnKTtcbiAgcmV0dXJuIG0gPyBtWzBdIDogbnVsbDtcbn1cblxuYmFsYW5jZWQucmFuZ2UgPSByYW5nZTtcbmZ1bmN0aW9uIHJhbmdlKGEsIGIsIHN0cikge1xuICB2YXIgYmVncywgYmVnLCBsZWZ0LCByaWdodCwgcmVzdWx0O1xuICB2YXIgYWkgPSBzdHIuaW5kZXhPZihhKTtcbiAgdmFyIGJpID0gc3RyLmluZGV4T2YoYiwgYWkgKyAxKTtcbiAgdmFyIGkgPSBhaTtcblxuICBpZiAoYWkgPj0gMCAmJiBiaSA+IDApIHtcbiAgICBpZihhPT09Yikge1xuICAgICAgcmV0dXJuIFthaSwgYmldO1xuICAgIH1cbiAgICBiZWdzID0gW107XG4gICAgbGVmdCA9IHN0ci5sZW5ndGg7XG5cbiAgICB3aGlsZSAoaSA+PSAwICYmICFyZXN1bHQpIHtcbiAgICAgIGlmIChpID09IGFpKSB7XG4gICAgICAgIGJlZ3MucHVzaChpKTtcbiAgICAgICAgYWkgPSBzdHIuaW5kZXhPZihhLCBpICsgMSk7XG4gICAgICB9IGVsc2UgaWYgKGJlZ3MubGVuZ3RoID09IDEpIHtcbiAgICAgICAgcmVzdWx0ID0gWyBiZWdzLnBvcCgpLCBiaSBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYmVnID0gYmVncy5wb3AoKTtcbiAgICAgICAgaWYgKGJlZyA8IGxlZnQpIHtcbiAgICAgICAgICBsZWZ0ID0gYmVnO1xuICAgICAgICAgIHJpZ2h0ID0gYmk7XG4gICAgICAgIH1cblxuICAgICAgICBiaSA9IHN0ci5pbmRleE9mKGIsIGkgKyAxKTtcbiAgICAgIH1cblxuICAgICAgaSA9IGFpIDwgYmkgJiYgYWkgPj0gMCA/IGFpIDogYmk7XG4gICAgfVxuXG4gICAgaWYgKGJlZ3MubGVuZ3RoKSB7XG4gICAgICByZXN1bHQgPSBbIGxlZnQsIHJpZ2h0IF07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbiIsCiAgICAidmFyIGJhbGFuY2VkID0gcmVxdWlyZSgnYmFsYW5jZWQtbWF0Y2gnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBleHBhbmRUb3A7XG5cbnZhciBlc2NTbGFzaCA9ICdcXDBTTEFTSCcrTWF0aC5yYW5kb20oKSsnXFwwJztcbnZhciBlc2NPcGVuID0gJ1xcME9QRU4nK01hdGgucmFuZG9tKCkrJ1xcMCc7XG52YXIgZXNjQ2xvc2UgPSAnXFwwQ0xPU0UnK01hdGgucmFuZG9tKCkrJ1xcMCc7XG52YXIgZXNjQ29tbWEgPSAnXFwwQ09NTUEnK01hdGgucmFuZG9tKCkrJ1xcMCc7XG52YXIgZXNjUGVyaW9kID0gJ1xcMFBFUklPRCcrTWF0aC5yYW5kb20oKSsnXFwwJztcblxuZnVuY3Rpb24gbnVtZXJpYyhzdHIpIHtcbiAgcmV0dXJuIHBhcnNlSW50KHN0ciwgMTApID09IHN0clxuICAgID8gcGFyc2VJbnQoc3RyLCAxMClcbiAgICA6IHN0ci5jaGFyQ29kZUF0KDApO1xufVxuXG5mdW5jdGlvbiBlc2NhcGVCcmFjZXMoc3RyKSB7XG4gIHJldHVybiBzdHIuc3BsaXQoJ1xcXFxcXFxcJykuam9pbihlc2NTbGFzaClcbiAgICAgICAgICAgIC5zcGxpdCgnXFxcXHsnKS5qb2luKGVzY09wZW4pXG4gICAgICAgICAgICAuc3BsaXQoJ1xcXFx9Jykuam9pbihlc2NDbG9zZSlcbiAgICAgICAgICAgIC5zcGxpdCgnXFxcXCwnKS5qb2luKGVzY0NvbW1hKVxuICAgICAgICAgICAgLnNwbGl0KCdcXFxcLicpLmpvaW4oZXNjUGVyaW9kKTtcbn1cblxuZnVuY3Rpb24gdW5lc2NhcGVCcmFjZXMoc3RyKSB7XG4gIHJldHVybiBzdHIuc3BsaXQoZXNjU2xhc2gpLmpvaW4oJ1xcXFwnKVxuICAgICAgICAgICAgLnNwbGl0KGVzY09wZW4pLmpvaW4oJ3snKVxuICAgICAgICAgICAgLnNwbGl0KGVzY0Nsb3NlKS5qb2luKCd9JylcbiAgICAgICAgICAgIC5zcGxpdChlc2NDb21tYSkuam9pbignLCcpXG4gICAgICAgICAgICAuc3BsaXQoZXNjUGVyaW9kKS5qb2luKCcuJyk7XG59XG5cblxuLy8gQmFzaWNhbGx5IGp1c3Qgc3RyLnNwbGl0KFwiLFwiKSwgYnV0IGhhbmRsaW5nIGNhc2VzXG4vLyB3aGVyZSB3ZSBoYXZlIG5lc3RlZCBicmFjZWQgc2VjdGlvbnMsIHdoaWNoIHNob3VsZCBiZVxuLy8gdHJlYXRlZCBhcyBpbmRpdmlkdWFsIG1lbWJlcnMsIGxpa2Uge2Ese2IsY30sZH1cbmZ1bmN0aW9uIHBhcnNlQ29tbWFQYXJ0cyhzdHIpIHtcbiAgaWYgKCFzdHIpXG4gICAgcmV0dXJuIFsnJ107XG5cbiAgdmFyIHBhcnRzID0gW107XG4gIHZhciBtID0gYmFsYW5jZWQoJ3snLCAnfScsIHN0cik7XG5cbiAgaWYgKCFtKVxuICAgIHJldHVybiBzdHIuc3BsaXQoJywnKTtcblxuICB2YXIgcHJlID0gbS5wcmU7XG4gIHZhciBib2R5ID0gbS5ib2R5O1xuICB2YXIgcG9zdCA9IG0ucG9zdDtcbiAgdmFyIHAgPSBwcmUuc3BsaXQoJywnKTtcblxuICBwW3AubGVuZ3RoLTFdICs9ICd7JyArIGJvZHkgKyAnfSc7XG4gIHZhciBwb3N0UGFydHMgPSBwYXJzZUNvbW1hUGFydHMocG9zdCk7XG4gIGlmIChwb3N0Lmxlbmd0aCkge1xuICAgIHBbcC5sZW5ndGgtMV0gKz0gcG9zdFBhcnRzLnNoaWZ0KCk7XG4gICAgcC5wdXNoLmFwcGx5KHAsIHBvc3RQYXJ0cyk7XG4gIH1cblxuICBwYXJ0cy5wdXNoLmFwcGx5KHBhcnRzLCBwKTtcblxuICByZXR1cm4gcGFydHM7XG59XG5cbmZ1bmN0aW9uIGV4cGFuZFRvcChzdHIpIHtcbiAgaWYgKCFzdHIpXG4gICAgcmV0dXJuIFtdO1xuXG4gIC8vIEkgZG9uJ3Qga25vdyB3aHkgQmFzaCA0LjMgZG9lcyB0aGlzLCBidXQgaXQgZG9lcy5cbiAgLy8gQW55dGhpbmcgc3RhcnRpbmcgd2l0aCB7fSB3aWxsIGhhdmUgdGhlIGZpcnN0IHR3byBieXRlcyBwcmVzZXJ2ZWRcbiAgLy8gYnV0ICpvbmx5KiBhdCB0aGUgdG9wIGxldmVsLCBzbyB7fSxhfWIgd2lsbCBub3QgZXhwYW5kIHRvIGFueXRoaW5nLFxuICAvLyBidXQgYXt9LGJ9YyB3aWxsIGJlIGV4cGFuZGVkIHRvIFthfWMsYWJjXS5cbiAgLy8gT25lIGNvdWxkIGFyZ3VlIHRoYXQgdGhpcyBpcyBhIGJ1ZyBpbiBCYXNoLCBidXQgc2luY2UgdGhlIGdvYWwgb2ZcbiAgLy8gdGhpcyBtb2R1bGUgaXMgdG8gbWF0Y2ggQmFzaCdzIHJ1bGVzLCB3ZSBlc2NhcGUgYSBsZWFkaW5nIHt9XG4gIGlmIChzdHIuc3Vic3RyKDAsIDIpID09PSAne30nKSB7XG4gICAgc3RyID0gJ1xcXFx7XFxcXH0nICsgc3RyLnN1YnN0cigyKTtcbiAgfVxuXG4gIHJldHVybiBleHBhbmQoZXNjYXBlQnJhY2VzKHN0ciksIHRydWUpLm1hcCh1bmVzY2FwZUJyYWNlcyk7XG59XG5cbmZ1bmN0aW9uIGVtYnJhY2Uoc3RyKSB7XG4gIHJldHVybiAneycgKyBzdHIgKyAnfSc7XG59XG5mdW5jdGlvbiBpc1BhZGRlZChlbCkge1xuICByZXR1cm4gL14tPzBcXGQvLnRlc3QoZWwpO1xufVxuXG5mdW5jdGlvbiBsdGUoaSwgeSkge1xuICByZXR1cm4gaSA8PSB5O1xufVxuZnVuY3Rpb24gZ3RlKGksIHkpIHtcbiAgcmV0dXJuIGkgPj0geTtcbn1cblxuZnVuY3Rpb24gZXhwYW5kKHN0ciwgaXNUb3ApIHtcbiAgdmFyIGV4cGFuc2lvbnMgPSBbXTtcblxuICB2YXIgbSA9IGJhbGFuY2VkKCd7JywgJ30nLCBzdHIpO1xuICBpZiAoIW0pIHJldHVybiBbc3RyXTtcblxuICAvLyBubyBuZWVkIHRvIGV4cGFuZCBwcmUsIHNpbmNlIGl0IGlzIGd1YXJhbnRlZWQgdG8gYmUgZnJlZSBvZiBicmFjZS1zZXRzXG4gIHZhciBwcmUgPSBtLnByZTtcbiAgdmFyIHBvc3QgPSBtLnBvc3QubGVuZ3RoXG4gICAgPyBleHBhbmQobS5wb3N0LCBmYWxzZSlcbiAgICA6IFsnJ107XG5cbiAgaWYgKC9cXCQkLy50ZXN0KG0ucHJlKSkgeyAgICBcbiAgICBmb3IgKHZhciBrID0gMDsgayA8IHBvc3QubGVuZ3RoOyBrKyspIHtcbiAgICAgIHZhciBleHBhbnNpb24gPSBwcmUrICd7JyArIG0uYm9keSArICd9JyArIHBvc3Rba107XG4gICAgICBleHBhbnNpb25zLnB1c2goZXhwYW5zaW9uKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGlzTnVtZXJpY1NlcXVlbmNlID0gL14tP1xcZCtcXC5cXC4tP1xcZCsoPzpcXC5cXC4tP1xcZCspPyQvLnRlc3QobS5ib2R5KTtcbiAgICB2YXIgaXNBbHBoYVNlcXVlbmNlID0gL15bYS16QS1aXVxcLlxcLlthLXpBLVpdKD86XFwuXFwuLT9cXGQrKT8kLy50ZXN0KG0uYm9keSk7XG4gICAgdmFyIGlzU2VxdWVuY2UgPSBpc051bWVyaWNTZXF1ZW5jZSB8fCBpc0FscGhhU2VxdWVuY2U7XG4gICAgdmFyIGlzT3B0aW9ucyA9IG0uYm9keS5pbmRleE9mKCcsJykgPj0gMDtcbiAgICBpZiAoIWlzU2VxdWVuY2UgJiYgIWlzT3B0aW9ucykge1xuICAgICAgLy8ge2F9LGJ9XG4gICAgICBpZiAobS5wb3N0Lm1hdGNoKC8sLipcXH0vKSkge1xuICAgICAgICBzdHIgPSBtLnByZSArICd7JyArIG0uYm9keSArIGVzY0Nsb3NlICsgbS5wb3N0O1xuICAgICAgICByZXR1cm4gZXhwYW5kKHN0cik7XG4gICAgICB9XG4gICAgICByZXR1cm4gW3N0cl07XG4gICAgfVxuXG4gICAgdmFyIG47XG4gICAgaWYgKGlzU2VxdWVuY2UpIHtcbiAgICAgIG4gPSBtLmJvZHkuc3BsaXQoL1xcLlxcLi8pO1xuICAgIH0gZWxzZSB7XG4gICAgICBuID0gcGFyc2VDb21tYVBhcnRzKG0uYm9keSk7XG4gICAgICBpZiAobi5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgLy8geHt7YSxifX15ID09PiB4e2F9eSB4e2J9eVxuICAgICAgICBuID0gZXhwYW5kKG5bMF0sIGZhbHNlKS5tYXAoZW1icmFjZSk7XG4gICAgICAgIGlmIChuLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIHJldHVybiBwb3N0Lm1hcChmdW5jdGlvbihwKSB7XG4gICAgICAgICAgICByZXR1cm4gbS5wcmUgKyBuWzBdICsgcDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGF0IHRoaXMgcG9pbnQsIG4gaXMgdGhlIHBhcnRzLCBhbmQgd2Uga25vdyBpdCdzIG5vdCBhIGNvbW1hIHNldFxuICAgIC8vIHdpdGggYSBzaW5nbGUgZW50cnkuXG4gICAgdmFyIE47XG5cbiAgICBpZiAoaXNTZXF1ZW5jZSkge1xuICAgICAgdmFyIHggPSBudW1lcmljKG5bMF0pO1xuICAgICAgdmFyIHkgPSBudW1lcmljKG5bMV0pO1xuICAgICAgdmFyIHdpZHRoID0gTWF0aC5tYXgoblswXS5sZW5ndGgsIG5bMV0ubGVuZ3RoKVxuICAgICAgdmFyIGluY3IgPSBuLmxlbmd0aCA9PSAzXG4gICAgICAgID8gTWF0aC5hYnMobnVtZXJpYyhuWzJdKSlcbiAgICAgICAgOiAxO1xuICAgICAgdmFyIHRlc3QgPSBsdGU7XG4gICAgICB2YXIgcmV2ZXJzZSA9IHkgPCB4O1xuICAgICAgaWYgKHJldmVyc2UpIHtcbiAgICAgICAgaW5jciAqPSAtMTtcbiAgICAgICAgdGVzdCA9IGd0ZTtcbiAgICAgIH1cbiAgICAgIHZhciBwYWQgPSBuLnNvbWUoaXNQYWRkZWQpO1xuXG4gICAgICBOID0gW107XG5cbiAgICAgIGZvciAodmFyIGkgPSB4OyB0ZXN0KGksIHkpOyBpICs9IGluY3IpIHtcbiAgICAgICAgdmFyIGM7XG4gICAgICAgIGlmIChpc0FscGhhU2VxdWVuY2UpIHtcbiAgICAgICAgICBjID0gU3RyaW5nLmZyb21DaGFyQ29kZShpKTtcbiAgICAgICAgICBpZiAoYyA9PT0gJ1xcXFwnKVxuICAgICAgICAgICAgYyA9ICcnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGMgPSBTdHJpbmcoaSk7XG4gICAgICAgICAgaWYgKHBhZCkge1xuICAgICAgICAgICAgdmFyIG5lZWQgPSB3aWR0aCAtIGMubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKG5lZWQgPiAwKSB7XG4gICAgICAgICAgICAgIHZhciB6ID0gbmV3IEFycmF5KG5lZWQgKyAxKS5qb2luKCcwJyk7XG4gICAgICAgICAgICAgIGlmIChpIDwgMClcbiAgICAgICAgICAgICAgICBjID0gJy0nICsgeiArIGMuc2xpY2UoMSk7XG4gICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBjID0geiArIGM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIE4ucHVzaChjKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgTiA9IFtdO1xuXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG4ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgTi5wdXNoLmFwcGx5KE4sIGV4cGFuZChuW2pdLCBmYWxzZSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgTi5sZW5ndGg7IGorKykge1xuICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBwb3N0Lmxlbmd0aDsgaysrKSB7XG4gICAgICAgIHZhciBleHBhbnNpb24gPSBwcmUgKyBOW2pdICsgcG9zdFtrXTtcbiAgICAgICAgaWYgKCFpc1RvcCB8fCBpc1NlcXVlbmNlIHx8IGV4cGFuc2lvbilcbiAgICAgICAgICBleHBhbnNpb25zLnB1c2goZXhwYW5zaW9uKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXhwYW5zaW9ucztcbn1cblxuIiwKICAgICJjb25zdCBtaW5pbWF0Y2ggPSBtb2R1bGUuZXhwb3J0cyA9IChwLCBwYXR0ZXJuLCBvcHRpb25zID0ge30pID0+IHtcbiAgYXNzZXJ0VmFsaWRQYXR0ZXJuKHBhdHRlcm4pXG5cbiAgLy8gc2hvcnRjdXQ6IGNvbW1lbnRzIG1hdGNoIG5vdGhpbmcuXG4gIGlmICghb3B0aW9ucy5ub2NvbW1lbnQgJiYgcGF0dGVybi5jaGFyQXQoMCkgPT09ICcjJykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIG5ldyBNaW5pbWF0Y2gocGF0dGVybiwgb3B0aW9ucykubWF0Y2gocClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtaW5pbWF0Y2hcblxuY29uc3QgcGF0aCA9IHJlcXVpcmUoJy4vbGliL3BhdGguanMnKVxubWluaW1hdGNoLnNlcCA9IHBhdGguc2VwXG5cbmNvbnN0IEdMT0JTVEFSID0gU3ltYm9sKCdnbG9ic3RhciAqKicpXG5taW5pbWF0Y2guR0xPQlNUQVIgPSBHTE9CU1RBUlxuY29uc3QgZXhwYW5kID0gcmVxdWlyZSgnYnJhY2UtZXhwYW5zaW9uJylcblxuY29uc3QgcGxUeXBlcyA9IHtcbiAgJyEnOiB7IG9wZW46ICcoPzooPyEoPzonLCBjbG9zZTogJykpW14vXSo/KSd9LFxuICAnPyc6IHsgb3BlbjogJyg/OicsIGNsb3NlOiAnKT8nIH0sXG4gICcrJzogeyBvcGVuOiAnKD86JywgY2xvc2U6ICcpKycgfSxcbiAgJyonOiB7IG9wZW46ICcoPzonLCBjbG9zZTogJykqJyB9LFxuICAnQCc6IHsgb3BlbjogJyg/OicsIGNsb3NlOiAnKScgfVxufVxuXG4vLyBhbnkgc2luZ2xlIHRoaW5nIG90aGVyIHRoYW4gL1xuLy8gZG9uJ3QgbmVlZCB0byBlc2NhcGUgLyB3aGVuIHVzaW5nIG5ldyBSZWdFeHAoKVxuY29uc3QgcW1hcmsgPSAnW14vXSdcblxuLy8gKiA9PiBhbnkgbnVtYmVyIG9mIGNoYXJhY3RlcnNcbmNvbnN0IHN0YXIgPSBxbWFyayArICcqPydcblxuLy8gKiogd2hlbiBkb3RzIGFyZSBhbGxvd2VkLiAgQW55dGhpbmcgZ29lcywgZXhjZXB0IC4uIGFuZCAuXG4vLyBub3QgKF4gb3IgLyBmb2xsb3dlZCBieSBvbmUgb3IgdHdvIGRvdHMgZm9sbG93ZWQgYnkgJCBvciAvKSxcbi8vIGZvbGxvd2VkIGJ5IGFueXRoaW5nLCBhbnkgbnVtYmVyIG9mIHRpbWVzLlxuY29uc3QgdHdvU3RhckRvdCA9ICcoPzooPyEoPzpcXFxcXFwvfF4pKD86XFxcXC57MSwyfSkoJHxcXFxcXFwvKSkuKSo/J1xuXG4vLyBub3QgYSBeIG9yIC8gZm9sbG93ZWQgYnkgYSBkb3QsXG4vLyBmb2xsb3dlZCBieSBhbnl0aGluZywgYW55IG51bWJlciBvZiB0aW1lcy5cbmNvbnN0IHR3b1N0YXJOb0RvdCA9ICcoPzooPyEoPzpcXFxcXFwvfF4pXFxcXC4pLikqPydcblxuLy8gXCJhYmNcIiAtPiB7IGE6dHJ1ZSwgYjp0cnVlLCBjOnRydWUgfVxuY29uc3QgY2hhclNldCA9IHMgPT4gcy5zcGxpdCgnJykucmVkdWNlKChzZXQsIGMpID0+IHtcbiAgc2V0W2NdID0gdHJ1ZVxuICByZXR1cm4gc2V0XG59LCB7fSlcblxuLy8gY2hhcmFjdGVycyB0aGF0IG5lZWQgdG8gYmUgZXNjYXBlZCBpbiBSZWdFeHAuXG5jb25zdCByZVNwZWNpYWxzID0gY2hhclNldCgnKCkuKnt9Kz9bXV4kXFxcXCEnKVxuXG4vLyBjaGFyYWN0ZXJzIHRoYXQgaW5kaWNhdGUgd2UgaGF2ZSB0byBhZGQgdGhlIHBhdHRlcm4gc3RhcnRcbmNvbnN0IGFkZFBhdHRlcm5TdGFydFNldCA9IGNoYXJTZXQoJ1suKCcpXG5cbi8vIG5vcm1hbGl6ZXMgc2xhc2hlcy5cbmNvbnN0IHNsYXNoU3BsaXQgPSAvXFwvKy9cblxubWluaW1hdGNoLmZpbHRlciA9IChwYXR0ZXJuLCBvcHRpb25zID0ge30pID0+XG4gIChwLCBpLCBsaXN0KSA9PiBtaW5pbWF0Y2gocCwgcGF0dGVybiwgb3B0aW9ucylcblxuY29uc3QgZXh0ID0gKGEsIGIgPSB7fSkgPT4ge1xuICBjb25zdCB0ID0ge31cbiAgT2JqZWN0LmtleXMoYSkuZm9yRWFjaChrID0+IHRba10gPSBhW2tdKVxuICBPYmplY3Qua2V5cyhiKS5mb3JFYWNoKGsgPT4gdFtrXSA9IGJba10pXG4gIHJldHVybiB0XG59XG5cbm1pbmltYXRjaC5kZWZhdWx0cyA9IGRlZiA9PiB7XG4gIGlmICghZGVmIHx8IHR5cGVvZiBkZWYgIT09ICdvYmplY3QnIHx8ICFPYmplY3Qua2V5cyhkZWYpLmxlbmd0aCkge1xuICAgIHJldHVybiBtaW5pbWF0Y2hcbiAgfVxuXG4gIGNvbnN0IG9yaWcgPSBtaW5pbWF0Y2hcblxuICBjb25zdCBtID0gKHAsIHBhdHRlcm4sIG9wdGlvbnMpID0+IG9yaWcocCwgcGF0dGVybiwgZXh0KGRlZiwgb3B0aW9ucykpXG4gIG0uTWluaW1hdGNoID0gY2xhc3MgTWluaW1hdGNoIGV4dGVuZHMgb3JpZy5NaW5pbWF0Y2gge1xuICAgIGNvbnN0cnVjdG9yIChwYXR0ZXJuLCBvcHRpb25zKSB7XG4gICAgICBzdXBlcihwYXR0ZXJuLCBleHQoZGVmLCBvcHRpb25zKSlcbiAgICB9XG4gIH1cbiAgbS5NaW5pbWF0Y2guZGVmYXVsdHMgPSBvcHRpb25zID0+IG9yaWcuZGVmYXVsdHMoZXh0KGRlZiwgb3B0aW9ucykpLk1pbmltYXRjaFxuICBtLmZpbHRlciA9IChwYXR0ZXJuLCBvcHRpb25zKSA9PiBvcmlnLmZpbHRlcihwYXR0ZXJuLCBleHQoZGVmLCBvcHRpb25zKSlcbiAgbS5kZWZhdWx0cyA9IG9wdGlvbnMgPT4gb3JpZy5kZWZhdWx0cyhleHQoZGVmLCBvcHRpb25zKSlcbiAgbS5tYWtlUmUgPSAocGF0dGVybiwgb3B0aW9ucykgPT4gb3JpZy5tYWtlUmUocGF0dGVybiwgZXh0KGRlZiwgb3B0aW9ucykpXG4gIG0uYnJhY2VFeHBhbmQgPSAocGF0dGVybiwgb3B0aW9ucykgPT4gb3JpZy5icmFjZUV4cGFuZChwYXR0ZXJuLCBleHQoZGVmLCBvcHRpb25zKSlcbiAgbS5tYXRjaCA9IChsaXN0LCBwYXR0ZXJuLCBvcHRpb25zKSA9PiBvcmlnLm1hdGNoKGxpc3QsIHBhdHRlcm4sIGV4dChkZWYsIG9wdGlvbnMpKVxuXG4gIHJldHVybiBtXG59XG5cblxuXG5cblxuLy8gQnJhY2UgZXhwYW5zaW9uOlxuLy8gYXtiLGN9ZCAtPiBhYmQgYWNkXG4vLyBhe2IsfWMgLT4gYWJjIGFjXG4vLyBhezAuLjN9ZCAtPiBhMGQgYTFkIGEyZCBhM2Rcbi8vIGF7Yixje2QsZX1mfWcgLT4gYWJnIGFjZGZnIGFjZWZnXG4vLyBhe2IsY31ke2UsZn1nIC0+IGFiZGVnIGFjZGVnIGFiZGVnIGFiZGZnXG4vL1xuLy8gSW52YWxpZCBzZXRzIGFyZSBub3QgZXhwYW5kZWQuXG4vLyBhezIuLn1iIC0+IGF7Mi4ufWJcbi8vIGF7Yn1jIC0+IGF7Yn1jXG5taW5pbWF0Y2guYnJhY2VFeHBhbmQgPSAocGF0dGVybiwgb3B0aW9ucykgPT4gYnJhY2VFeHBhbmQocGF0dGVybiwgb3B0aW9ucylcblxuY29uc3QgYnJhY2VFeHBhbmQgPSAocGF0dGVybiwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gIGFzc2VydFZhbGlkUGF0dGVybihwYXR0ZXJuKVxuXG4gIC8vIFRoYW5rcyB0byBZZXRpbmcgTGkgPGh0dHBzOi8vZ2l0aHViLmNvbS95ZXRpbmdsaT4gZm9yXG4gIC8vIGltcHJvdmluZyB0aGlzIHJlZ2V4cCB0byBhdm9pZCBhIFJlRE9TIHZ1bG5lcmFiaWxpdHkuXG4gIGlmIChvcHRpb25zLm5vYnJhY2UgfHwgIS9cXHsoPzooPyFcXHspLikqXFx9Ly50ZXN0KHBhdHRlcm4pKSB7XG4gICAgLy8gc2hvcnRjdXQuIG5vIG5lZWQgdG8gZXhwYW5kLlxuICAgIHJldHVybiBbcGF0dGVybl1cbiAgfVxuXG4gIHJldHVybiBleHBhbmQocGF0dGVybilcbn1cblxuY29uc3QgTUFYX1BBVFRFUk5fTEVOR1RIID0gMTAyNCAqIDY0XG5jb25zdCBhc3NlcnRWYWxpZFBhdHRlcm4gPSBwYXR0ZXJuID0+IHtcbiAgaWYgKHR5cGVvZiBwYXR0ZXJuICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludmFsaWQgcGF0dGVybicpXG4gIH1cblxuICBpZiAocGF0dGVybi5sZW5ndGggPiBNQVhfUEFUVEVSTl9MRU5HVEgpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdwYXR0ZXJuIGlzIHRvbyBsb25nJylcbiAgfVxufVxuXG4vLyBwYXJzZSBhIGNvbXBvbmVudCBvZiB0aGUgZXhwYW5kZWQgc2V0LlxuLy8gQXQgdGhpcyBwb2ludCwgbm8gcGF0dGVybiBtYXkgY29udGFpbiBcIi9cIiBpbiBpdFxuLy8gc28gd2UncmUgZ29pbmcgdG8gcmV0dXJuIGEgMmQgYXJyYXksIHdoZXJlIGVhY2ggZW50cnkgaXMgdGhlIGZ1bGxcbi8vIHBhdHRlcm4sIHNwbGl0IG9uICcvJywgYW5kIHRoZW4gdHVybmVkIGludG8gYSByZWd1bGFyIGV4cHJlc3Npb24uXG4vLyBBIHJlZ2V4cCBpcyBtYWRlIGF0IHRoZSBlbmQgd2hpY2ggam9pbnMgZWFjaCBhcnJheSB3aXRoIGFuXG4vLyBlc2NhcGVkIC8sIGFuZCBhbm90aGVyIGZ1bGwgb25lIHdoaWNoIGpvaW5zIGVhY2ggcmVnZXhwIHdpdGggfC5cbi8vXG4vLyBGb2xsb3dpbmcgdGhlIGxlYWQgb2YgQmFzaCA0LjEsIG5vdGUgdGhhdCBcIioqXCIgb25seSBoYXMgc3BlY2lhbCBtZWFuaW5nXG4vLyB3aGVuIGl0IGlzIHRoZSAqb25seSogdGhpbmcgaW4gYSBwYXRoIHBvcnRpb24uICBPdGhlcndpc2UsIGFueSBzZXJpZXNcbi8vIG9mICogaXMgZXF1aXZhbGVudCB0byBhIHNpbmdsZSAqLiAgR2xvYnN0YXIgYmVoYXZpb3IgaXMgZW5hYmxlZCBieVxuLy8gZGVmYXVsdCwgYW5kIGNhbiBiZSBkaXNhYmxlZCBieSBzZXR0aW5nIG9wdGlvbnMubm9nbG9ic3Rhci5cbmNvbnN0IFNVQlBBUlNFID0gU3ltYm9sKCdzdWJwYXJzZScpXG5cbm1pbmltYXRjaC5tYWtlUmUgPSAocGF0dGVybiwgb3B0aW9ucykgPT5cbiAgbmV3IE1pbmltYXRjaChwYXR0ZXJuLCBvcHRpb25zIHx8IHt9KS5tYWtlUmUoKVxuXG5taW5pbWF0Y2gubWF0Y2ggPSAobGlzdCwgcGF0dGVybiwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IG1tID0gbmV3IE1pbmltYXRjaChwYXR0ZXJuLCBvcHRpb25zKVxuICBsaXN0ID0gbGlzdC5maWx0ZXIoZiA9PiBtbS5tYXRjaChmKSlcbiAgaWYgKG1tLm9wdGlvbnMubm9udWxsICYmICFsaXN0Lmxlbmd0aCkge1xuICAgIGxpc3QucHVzaChwYXR0ZXJuKVxuICB9XG4gIHJldHVybiBsaXN0XG59XG5cbi8vIHJlcGxhY2Ugc3R1ZmYgbGlrZSBcXCogd2l0aCAqXG5jb25zdCBnbG9iVW5lc2NhcGUgPSBzID0+IHMucmVwbGFjZSgvXFxcXCguKS9nLCAnJDEnKVxuY29uc3QgY2hhclVuZXNjYXBlID0gcyA9PiBzLnJlcGxhY2UoL1xcXFwoW14tXFxdXSkvZywgJyQxJylcbmNvbnN0IHJlZ0V4cEVzY2FwZSA9IHMgPT4gcy5yZXBsYWNlKC9bLVtcXF17fSgpKis/LixcXFxcXiR8I1xcc10vZywgJ1xcXFwkJicpXG5jb25zdCBicmFFeHBFc2NhcGUgPSBzID0+IHMucmVwbGFjZSgvW1tcXF1cXFxcXS9nLCAnXFxcXCQmJylcblxuY2xhc3MgTWluaW1hdGNoIHtcbiAgY29uc3RydWN0b3IgKHBhdHRlcm4sIG9wdGlvbnMpIHtcbiAgICBhc3NlcnRWYWxpZFBhdHRlcm4ocGF0dGVybilcblxuICAgIGlmICghb3B0aW9ucykgb3B0aW9ucyA9IHt9XG5cbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zXG4gICAgdGhpcy5zZXQgPSBbXVxuICAgIHRoaXMucGF0dGVybiA9IHBhdHRlcm5cbiAgICB0aGlzLndpbmRvd3NQYXRoc05vRXNjYXBlID0gISFvcHRpb25zLndpbmRvd3NQYXRoc05vRXNjYXBlIHx8XG4gICAgICBvcHRpb25zLmFsbG93V2luZG93c0VzY2FwZSA9PT0gZmFsc2VcbiAgICBpZiAodGhpcy53aW5kb3dzUGF0aHNOb0VzY2FwZSkge1xuICAgICAgdGhpcy5wYXR0ZXJuID0gdGhpcy5wYXR0ZXJuLnJlcGxhY2UoL1xcXFwvZywgJy8nKVxuICAgIH1cbiAgICB0aGlzLnJlZ2V4cCA9IG51bGxcbiAgICB0aGlzLm5lZ2F0ZSA9IGZhbHNlXG4gICAgdGhpcy5jb21tZW50ID0gZmFsc2VcbiAgICB0aGlzLmVtcHR5ID0gZmFsc2VcbiAgICB0aGlzLnBhcnRpYWwgPSAhIW9wdGlvbnMucGFydGlhbFxuXG4gICAgLy8gbWFrZSB0aGUgc2V0IG9mIHJlZ2V4cHMgZXRjLlxuICAgIHRoaXMubWFrZSgpXG4gIH1cblxuICBkZWJ1ZyAoKSB7fVxuXG4gIG1ha2UgKCkge1xuICAgIGNvbnN0IHBhdHRlcm4gPSB0aGlzLnBhdHRlcm5cbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zXG5cbiAgICAvLyBlbXB0eSBwYXR0ZXJucyBhbmQgY29tbWVudHMgbWF0Y2ggbm90aGluZy5cbiAgICBpZiAoIW9wdGlvbnMubm9jb21tZW50ICYmIHBhdHRlcm4uY2hhckF0KDApID09PSAnIycpIHtcbiAgICAgIHRoaXMuY29tbWVudCA9IHRydWVcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoIXBhdHRlcm4pIHtcbiAgICAgIHRoaXMuZW1wdHkgPSB0cnVlXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBzdGVwIDE6IGZpZ3VyZSBvdXQgbmVnYXRpb24sIGV0Yy5cbiAgICB0aGlzLnBhcnNlTmVnYXRlKClcblxuICAgIC8vIHN0ZXAgMjogZXhwYW5kIGJyYWNlc1xuICAgIGxldCBzZXQgPSB0aGlzLmdsb2JTZXQgPSB0aGlzLmJyYWNlRXhwYW5kKClcblxuICAgIGlmIChvcHRpb25zLmRlYnVnKSB0aGlzLmRlYnVnID0gKC4uLmFyZ3MpID0+IGNvbnNvbGUuZXJyb3IoLi4uYXJncylcblxuICAgIHRoaXMuZGVidWcodGhpcy5wYXR0ZXJuLCBzZXQpXG5cbiAgICAvLyBzdGVwIDM6IG5vdyB3ZSBoYXZlIGEgc2V0LCBzbyB0dXJuIGVhY2ggb25lIGludG8gYSBzZXJpZXMgb2YgcGF0aC1wb3J0aW9uXG4gICAgLy8gbWF0Y2hpbmcgcGF0dGVybnMuXG4gICAgLy8gVGhlc2Ugd2lsbCBiZSByZWdleHBzLCBleGNlcHQgaW4gdGhlIGNhc2Ugb2YgXCIqKlwiLCB3aGljaCBpc1xuICAgIC8vIHNldCB0byB0aGUgR0xPQlNUQVIgb2JqZWN0IGZvciBnbG9ic3RhciBiZWhhdmlvcixcbiAgICAvLyBhbmQgd2lsbCBub3QgY29udGFpbiBhbnkgLyBjaGFyYWN0ZXJzXG4gICAgc2V0ID0gdGhpcy5nbG9iUGFydHMgPSBzZXQubWFwKHMgPT4gcy5zcGxpdChzbGFzaFNwbGl0KSlcblxuICAgIHRoaXMuZGVidWcodGhpcy5wYXR0ZXJuLCBzZXQpXG5cbiAgICAvLyBnbG9iIC0tPiByZWdleHBzXG4gICAgc2V0ID0gc2V0Lm1hcCgocywgc2ksIHNldCkgPT4gcy5tYXAodGhpcy5wYXJzZSwgdGhpcykpXG5cbiAgICB0aGlzLmRlYnVnKHRoaXMucGF0dGVybiwgc2V0KVxuXG4gICAgLy8gZmlsdGVyIG91dCBldmVyeXRoaW5nIHRoYXQgZGlkbid0IGNvbXBpbGUgcHJvcGVybHkuXG4gICAgc2V0ID0gc2V0LmZpbHRlcihzID0+IHMuaW5kZXhPZihmYWxzZSkgPT09IC0xKVxuXG4gICAgdGhpcy5kZWJ1Zyh0aGlzLnBhdHRlcm4sIHNldClcblxuICAgIHRoaXMuc2V0ID0gc2V0XG4gIH1cblxuICBwYXJzZU5lZ2F0ZSAoKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5ub25lZ2F0ZSkgcmV0dXJuXG5cbiAgICBjb25zdCBwYXR0ZXJuID0gdGhpcy5wYXR0ZXJuXG4gICAgbGV0IG5lZ2F0ZSA9IGZhbHNlXG4gICAgbGV0IG5lZ2F0ZU9mZnNldCA9IDBcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0dGVybi5sZW5ndGggJiYgcGF0dGVybi5jaGFyQXQoaSkgPT09ICchJzsgaSsrKSB7XG4gICAgICBuZWdhdGUgPSAhbmVnYXRlXG4gICAgICBuZWdhdGVPZmZzZXQrK1xuICAgIH1cblxuICAgIGlmIChuZWdhdGVPZmZzZXQpIHRoaXMucGF0dGVybiA9IHBhdHRlcm4uc2xpY2UobmVnYXRlT2Zmc2V0KVxuICAgIHRoaXMubmVnYXRlID0gbmVnYXRlXG4gIH1cblxuICAvLyBzZXQgcGFydGlhbCB0byB0cnVlIHRvIHRlc3QgaWYsIGZvciBleGFtcGxlLFxuICAvLyBcIi9hL2JcIiBtYXRjaGVzIHRoZSBzdGFydCBvZiBcIi8qL2IvKi9kXCJcbiAgLy8gUGFydGlhbCBtZWFucywgaWYgeW91IHJ1biBvdXQgb2YgZmlsZSBiZWZvcmUgeW91IHJ1blxuICAvLyBvdXQgb2YgcGF0dGVybiwgdGhlbiB0aGF0J3MgZmluZSwgYXMgbG9uZyBhcyBhbGxcbiAgLy8gdGhlIHBhcnRzIG1hdGNoLlxuICBtYXRjaE9uZSAoZmlsZSwgcGF0dGVybiwgcGFydGlhbCkge1xuICAgIHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zXG5cbiAgICB0aGlzLmRlYnVnKCdtYXRjaE9uZScsXG4gICAgICB7ICd0aGlzJzogdGhpcywgZmlsZTogZmlsZSwgcGF0dGVybjogcGF0dGVybiB9KVxuXG4gICAgdGhpcy5kZWJ1ZygnbWF0Y2hPbmUnLCBmaWxlLmxlbmd0aCwgcGF0dGVybi5sZW5ndGgpXG5cbiAgICBmb3IgKHZhciBmaSA9IDAsXG4gICAgICAgIHBpID0gMCxcbiAgICAgICAgZmwgPSBmaWxlLmxlbmd0aCxcbiAgICAgICAgcGwgPSBwYXR0ZXJuLmxlbmd0aFxuICAgICAgICA7IChmaSA8IGZsKSAmJiAocGkgPCBwbClcbiAgICAgICAgOyBmaSsrLCBwaSsrKSB7XG4gICAgICB0aGlzLmRlYnVnKCdtYXRjaE9uZSBsb29wJylcbiAgICAgIHZhciBwID0gcGF0dGVybltwaV1cbiAgICAgIHZhciBmID0gZmlsZVtmaV1cblxuICAgICAgdGhpcy5kZWJ1ZyhwYXR0ZXJuLCBwLCBmKVxuXG4gICAgICAvLyBzaG91bGQgYmUgaW1wb3NzaWJsZS5cbiAgICAgIC8vIHNvbWUgaW52YWxpZCByZWdleHAgc3R1ZmYgaW4gdGhlIHNldC5cbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKHAgPT09IGZhbHNlKSByZXR1cm4gZmFsc2VcblxuICAgICAgaWYgKHAgPT09IEdMT0JTVEFSKSB7XG4gICAgICAgIHRoaXMuZGVidWcoJ0dMT0JTVEFSJywgW3BhdHRlcm4sIHAsIGZdKVxuXG4gICAgICAgIC8vIFwiKipcIlxuICAgICAgICAvLyBhLyoqL2IvKiovYyB3b3VsZCBtYXRjaCB0aGUgZm9sbG93aW5nOlxuICAgICAgICAvLyBhL2IveC95L3ovY1xuICAgICAgICAvLyBhL3gveS96L2IvY1xuICAgICAgICAvLyBhL2IveC9iL3gvY1xuICAgICAgICAvLyBhL2IvY1xuICAgICAgICAvLyBUbyBkbyB0aGlzLCB0YWtlIHRoZSByZXN0IG9mIHRoZSBwYXR0ZXJuIGFmdGVyXG4gICAgICAgIC8vIHRoZSAqKiwgYW5kIHNlZSBpZiBpdCB3b3VsZCBtYXRjaCB0aGUgZmlsZSByZW1haW5kZXIuXG4gICAgICAgIC8vIElmIHNvLCByZXR1cm4gc3VjY2Vzcy5cbiAgICAgICAgLy8gSWYgbm90LCB0aGUgKiogXCJzd2FsbG93c1wiIGEgc2VnbWVudCwgYW5kIHRyeSBhZ2Fpbi5cbiAgICAgICAgLy8gVGhpcyBpcyByZWN1cnNpdmVseSBhd2Z1bC5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gYS8qKi9iLyoqL2MgbWF0Y2hpbmcgYS9iL3gveS96L2NcbiAgICAgICAgLy8gLSBhIG1hdGNoZXMgYVxuICAgICAgICAvLyAtIGRvdWJsZXN0YXJcbiAgICAgICAgLy8gICAtIG1hdGNoT25lKGIveC95L3ovYywgYi8qKi9jKVxuICAgICAgICAvLyAgICAgLSBiIG1hdGNoZXMgYlxuICAgICAgICAvLyAgICAgLSBkb3VibGVzdGFyXG4gICAgICAgIC8vICAgICAgIC0gbWF0Y2hPbmUoeC95L3ovYywgYykgLT4gbm9cbiAgICAgICAgLy8gICAgICAgLSBtYXRjaE9uZSh5L3ovYywgYykgLT4gbm9cbiAgICAgICAgLy8gICAgICAgLSBtYXRjaE9uZSh6L2MsIGMpIC0+IG5vXG4gICAgICAgIC8vICAgICAgIC0gbWF0Y2hPbmUoYywgYykgeWVzLCBoaXRcbiAgICAgICAgdmFyIGZyID0gZmlcbiAgICAgICAgdmFyIHByID0gcGkgKyAxXG4gICAgICAgIGlmIChwciA9PT0gcGwpIHtcbiAgICAgICAgICB0aGlzLmRlYnVnKCcqKiBhdCB0aGUgZW5kJylcbiAgICAgICAgICAvLyBhICoqIGF0IHRoZSBlbmQgd2lsbCBqdXN0IHN3YWxsb3cgdGhlIHJlc3QuXG4gICAgICAgICAgLy8gV2UgaGF2ZSBmb3VuZCBhIG1hdGNoLlxuICAgICAgICAgIC8vIGhvd2V2ZXIsIGl0IHdpbGwgbm90IHN3YWxsb3cgLy54LCB1bmxlc3NcbiAgICAgICAgICAvLyBvcHRpb25zLmRvdCBpcyBzZXQuXG4gICAgICAgICAgLy8gLiBhbmQgLi4gYXJlICpuZXZlciogbWF0Y2hlZCBieSAqKiwgZm9yIGV4cGxvc2l2ZWx5XG4gICAgICAgICAgLy8gZXhwb25lbnRpYWwgcmVhc29ucy5cbiAgICAgICAgICBmb3IgKDsgZmkgPCBmbDsgZmkrKykge1xuICAgICAgICAgICAgaWYgKGZpbGVbZmldID09PSAnLicgfHwgZmlsZVtmaV0gPT09ICcuLicgfHxcbiAgICAgICAgICAgICAgKCFvcHRpb25zLmRvdCAmJiBmaWxlW2ZpXS5jaGFyQXQoMCkgPT09ICcuJykpIHJldHVybiBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gb2ssIGxldCdzIHNlZSBpZiB3ZSBjYW4gc3dhbGxvdyB3aGF0ZXZlciB3ZSBjYW4uXG4gICAgICAgIHdoaWxlIChmciA8IGZsKSB7XG4gICAgICAgICAgdmFyIHN3YWxsb3dlZSA9IGZpbGVbZnJdXG5cbiAgICAgICAgICB0aGlzLmRlYnVnKCdcXG5nbG9ic3RhciB3aGlsZScsIGZpbGUsIGZyLCBwYXR0ZXJuLCBwciwgc3dhbGxvd2VlKVxuXG4gICAgICAgICAgLy8gWFhYIHJlbW92ZSB0aGlzIHNsaWNlLiAgSnVzdCBwYXNzIHRoZSBzdGFydCBpbmRleC5cbiAgICAgICAgICBpZiAodGhpcy5tYXRjaE9uZShmaWxlLnNsaWNlKGZyKSwgcGF0dGVybi5zbGljZShwciksIHBhcnRpYWwpKSB7XG4gICAgICAgICAgICB0aGlzLmRlYnVnKCdnbG9ic3RhciBmb3VuZCBtYXRjaCEnLCBmciwgZmwsIHN3YWxsb3dlZSlcbiAgICAgICAgICAgIC8vIGZvdW5kIGEgbWF0Y2guXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBjYW4ndCBzd2FsbG93IFwiLlwiIG9yIFwiLi5cIiBldmVyLlxuICAgICAgICAgICAgLy8gY2FuIG9ubHkgc3dhbGxvdyBcIi5mb29cIiB3aGVuIGV4cGxpY2l0bHkgYXNrZWQuXG4gICAgICAgICAgICBpZiAoc3dhbGxvd2VlID09PSAnLicgfHwgc3dhbGxvd2VlID09PSAnLi4nIHx8XG4gICAgICAgICAgICAgICghb3B0aW9ucy5kb3QgJiYgc3dhbGxvd2VlLmNoYXJBdCgwKSA9PT0gJy4nKSkge1xuICAgICAgICAgICAgICB0aGlzLmRlYnVnKCdkb3QgZGV0ZWN0ZWQhJywgZmlsZSwgZnIsIHBhdHRlcm4sIHByKVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyAqKiBzd2FsbG93cyBhIHNlZ21lbnQsIGFuZCBjb250aW51ZS5cbiAgICAgICAgICAgIHRoaXMuZGVidWcoJ2dsb2JzdGFyIHN3YWxsb3cgYSBzZWdtZW50LCBhbmQgY29udGludWUnKVxuICAgICAgICAgICAgZnIrK1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG5vIG1hdGNoIHdhcyBmb3VuZC5cbiAgICAgICAgLy8gSG93ZXZlciwgaW4gcGFydGlhbCBtb2RlLCB3ZSBjYW4ndCBzYXkgdGhpcyBpcyBuZWNlc3NhcmlseSBvdmVyLlxuICAgICAgICAvLyBJZiB0aGVyZSdzIG1vcmUgKnBhdHRlcm4qIGxlZnQsIHRoZW5cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmIChwYXJ0aWFsKSB7XG4gICAgICAgICAgLy8gcmFuIG91dCBvZiBmaWxlXG4gICAgICAgICAgdGhpcy5kZWJ1ZygnXFxuPj4+IG5vIG1hdGNoLCBwYXJ0aWFsPycsIGZpbGUsIGZyLCBwYXR0ZXJuLCBwcilcbiAgICAgICAgICBpZiAoZnIgPT09IGZsKSByZXR1cm4gdHJ1ZVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuXG4gICAgICAvLyBzb21ldGhpbmcgb3RoZXIgdGhhbiAqKlxuICAgICAgLy8gbm9uLW1hZ2ljIHBhdHRlcm5zIGp1c3QgaGF2ZSB0byBtYXRjaCBleGFjdGx5XG4gICAgICAvLyBwYXR0ZXJucyB3aXRoIG1hZ2ljIGhhdmUgYmVlbiB0dXJuZWQgaW50byByZWdleHBzLlxuICAgICAgdmFyIGhpdFxuICAgICAgaWYgKHR5cGVvZiBwID09PSAnc3RyaW5nJykge1xuICAgICAgICBoaXQgPSBmID09PSBwXG4gICAgICAgIHRoaXMuZGVidWcoJ3N0cmluZyBtYXRjaCcsIHAsIGYsIGhpdClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhpdCA9IGYubWF0Y2gocClcbiAgICAgICAgdGhpcy5kZWJ1ZygncGF0dGVybiBtYXRjaCcsIHAsIGYsIGhpdClcbiAgICAgIH1cblxuICAgICAgaWYgKCFoaXQpIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIC8vIE5vdGU6IGVuZGluZyBpbiAvIG1lYW5zIHRoYXQgd2UnbGwgZ2V0IGEgZmluYWwgXCJcIlxuICAgIC8vIGF0IHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4uICBUaGlzIGNhbiBvbmx5IG1hdGNoIGFcbiAgICAvLyBjb3JyZXNwb25kaW5nIFwiXCIgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZS5cbiAgICAvLyBJZiB0aGUgZmlsZSBlbmRzIGluIC8sIHRoZW4gaXQgY2FuIG9ubHkgbWF0Y2ggYVxuICAgIC8vIGEgcGF0dGVybiB0aGF0IGVuZHMgaW4gLywgdW5sZXNzIHRoZSBwYXR0ZXJuIGp1c3RcbiAgICAvLyBkb2Vzbid0IGhhdmUgYW55IG1vcmUgZm9yIGl0LiBCdXQsIGEvYi8gc2hvdWxkICpub3QqXG4gICAgLy8gbWF0Y2ggXCJhL2IvKlwiLCBldmVuIHRob3VnaCBcIlwiIG1hdGNoZXMgYWdhaW5zdCB0aGVcbiAgICAvLyBbXi9dKj8gcGF0dGVybiwgZXhjZXB0IGluIHBhcnRpYWwgbW9kZSwgd2hlcmUgaXQgbWlnaHRcbiAgICAvLyBzaW1wbHkgbm90IGJlIHJlYWNoZWQgeWV0LlxuICAgIC8vIEhvd2V2ZXIsIGEvYi8gc2hvdWxkIHN0aWxsIHNhdGlzZnkgYS8qXG5cbiAgICAvLyBub3cgZWl0aGVyIHdlIGZlbGwgb2ZmIHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4sIG9yIHdlJ3JlIGRvbmUuXG4gICAgaWYgKGZpID09PSBmbCAmJiBwaSA9PT0gcGwpIHtcbiAgICAgIC8vIHJhbiBvdXQgb2YgcGF0dGVybiBhbmQgZmlsZW5hbWUgYXQgdGhlIHNhbWUgdGltZS5cbiAgICAgIC8vIGFuIGV4YWN0IGhpdCFcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSBlbHNlIGlmIChmaSA9PT0gZmwpIHtcbiAgICAgIC8vIHJhbiBvdXQgb2YgZmlsZSwgYnV0IHN0aWxsIGhhZCBwYXR0ZXJuIGxlZnQuXG4gICAgICAvLyB0aGlzIGlzIG9rIGlmIHdlJ3JlIGRvaW5nIHRoZSBtYXRjaCBhcyBwYXJ0IG9mXG4gICAgICAvLyBhIGdsb2IgZnMgdHJhdmVyc2FsLlxuICAgICAgcmV0dXJuIHBhcnRpYWxcbiAgICB9IGVsc2UgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi8gaWYgKHBpID09PSBwbCkge1xuICAgICAgLy8gcmFuIG91dCBvZiBwYXR0ZXJuLCBzdGlsbCBoYXZlIGZpbGUgbGVmdC5cbiAgICAgIC8vIHRoaXMgaXMgb25seSBhY2NlcHRhYmxlIGlmIHdlJ3JlIG9uIHRoZSB2ZXJ5IGxhc3RcbiAgICAgIC8vIGVtcHR5IHNlZ21lbnQgb2YgYSBmaWxlIHdpdGggYSB0cmFpbGluZyBzbGFzaC5cbiAgICAgIC8vIGEvKiBzaG91bGQgbWF0Y2ggYS9iL1xuICAgICAgcmV0dXJuIChmaSA9PT0gZmwgLSAxKSAmJiAoZmlsZVtmaV0gPT09ICcnKVxuICAgIH1cblxuICAgIC8vIHNob3VsZCBiZSB1bnJlYWNoYWJsZS5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHRocm93IG5ldyBFcnJvcignd3RmPycpXG4gIH1cblxuICBicmFjZUV4cGFuZCAoKSB7XG4gICAgcmV0dXJuIGJyYWNlRXhwYW5kKHRoaXMucGF0dGVybiwgdGhpcy5vcHRpb25zKVxuICB9XG5cbiAgcGFyc2UgKHBhdHRlcm4sIGlzU3ViKSB7XG4gICAgYXNzZXJ0VmFsaWRQYXR0ZXJuKHBhdHRlcm4pXG5cbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zXG5cbiAgICAvLyBzaG9ydGN1dHNcbiAgICBpZiAocGF0dGVybiA9PT0gJyoqJykge1xuICAgICAgaWYgKCFvcHRpb25zLm5vZ2xvYnN0YXIpXG4gICAgICAgIHJldHVybiBHTE9CU1RBUlxuICAgICAgZWxzZVxuICAgICAgICBwYXR0ZXJuID0gJyonXG4gICAgfVxuICAgIGlmIChwYXR0ZXJuID09PSAnJykgcmV0dXJuICcnXG5cbiAgICBsZXQgcmUgPSAnJ1xuICAgIGxldCBoYXNNYWdpYyA9IGZhbHNlXG4gICAgbGV0IGVzY2FwaW5nID0gZmFsc2VcbiAgICAvLyA/ID0+IG9uZSBzaW5nbGUgY2hhcmFjdGVyXG4gICAgY29uc3QgcGF0dGVybkxpc3RTdGFjayA9IFtdXG4gICAgY29uc3QgbmVnYXRpdmVMaXN0cyA9IFtdXG4gICAgbGV0IHN0YXRlQ2hhclxuICAgIGxldCBpbkNsYXNzID0gZmFsc2VcbiAgICBsZXQgcmVDbGFzc1N0YXJ0ID0gLTFcbiAgICBsZXQgY2xhc3NTdGFydCA9IC0xXG4gICAgbGV0IGNzXG4gICAgbGV0IHBsXG4gICAgbGV0IHNwXG4gICAgLy8gLiBhbmQgLi4gbmV2ZXIgbWF0Y2ggYW55dGhpbmcgdGhhdCBkb2Vzbid0IHN0YXJ0IHdpdGggLixcbiAgICAvLyBldmVuIHdoZW4gb3B0aW9ucy5kb3QgaXMgc2V0LiAgSG93ZXZlciwgaWYgdGhlIHBhdHRlcm5cbiAgICAvLyBzdGFydHMgd2l0aCAuLCB0aGVuIHRyYXZlcnNhbCBwYXR0ZXJucyBjYW4gbWF0Y2guXG4gICAgbGV0IGRvdFRyYXZBbGxvd2VkID0gcGF0dGVybi5jaGFyQXQoMCkgPT09ICcuJ1xuICAgIGxldCBkb3RGaWxlQWxsb3dlZCA9IG9wdGlvbnMuZG90IHx8IGRvdFRyYXZBbGxvd2VkXG4gICAgY29uc3QgcGF0dGVyblN0YXJ0ID0gKCkgPT5cbiAgICAgIGRvdFRyYXZBbGxvd2VkXG4gICAgICAgID8gJydcbiAgICAgICAgOiBkb3RGaWxlQWxsb3dlZFxuICAgICAgICA/ICcoPyEoPzpefFxcXFwvKVxcXFwuezEsMn0oPzokfFxcXFwvKSknXG4gICAgICAgIDogJyg/IVxcXFwuKSdcbiAgICBjb25zdCBzdWJQYXR0ZXJuU3RhcnQgPSAocCkgPT5cbiAgICAgIHAuY2hhckF0KDApID09PSAnLidcbiAgICAgICAgPyAnJ1xuICAgICAgICA6IG9wdGlvbnMuZG90XG4gICAgICAgID8gJyg/ISg/Ol58XFxcXC8pXFxcXC57MSwyfSg/OiR8XFxcXC8pKSdcbiAgICAgICAgOiAnKD8hXFxcXC4pJ1xuXG5cbiAgICBjb25zdCBjbGVhclN0YXRlQ2hhciA9ICgpID0+IHtcbiAgICAgIGlmIChzdGF0ZUNoYXIpIHtcbiAgICAgICAgLy8gd2UgaGFkIHNvbWUgc3RhdGUtdHJhY2tpbmcgY2hhcmFjdGVyXG4gICAgICAgIC8vIHRoYXQgd2Fzbid0IGNvbnN1bWVkIGJ5IHRoaXMgcGFzcy5cbiAgICAgICAgc3dpdGNoIChzdGF0ZUNoYXIpIHtcbiAgICAgICAgICBjYXNlICcqJzpcbiAgICAgICAgICAgIHJlICs9IHN0YXJcbiAgICAgICAgICAgIGhhc01hZ2ljID0gdHJ1ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSAnPyc6XG4gICAgICAgICAgICByZSArPSBxbWFya1xuICAgICAgICAgICAgaGFzTWFnaWMgPSB0cnVlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmUgKz0gJ1xcXFwnICsgc3RhdGVDaGFyXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRlYnVnKCdjbGVhclN0YXRlQ2hhciAlaiAlaicsIHN0YXRlQ2hhciwgcmUpXG4gICAgICAgIHN0YXRlQ2hhciA9IGZhbHNlXG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDAsIGM7IChpIDwgcGF0dGVybi5sZW5ndGgpICYmIChjID0gcGF0dGVybi5jaGFyQXQoaSkpOyBpKyspIHtcbiAgICAgIHRoaXMuZGVidWcoJyVzXFx0JXMgJXMgJWonLCBwYXR0ZXJuLCBpLCByZSwgYylcblxuICAgICAgLy8gc2tpcCBvdmVyIGFueSB0aGF0IGFyZSBlc2NhcGVkLlxuICAgICAgaWYgKGVzY2FwaW5nKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0IC0gY29tcGxldGVseSBub3QgYWxsb3dlZCwgZXZlbiBlc2NhcGVkLiAqL1xuICAgICAgICBpZiAoYyA9PT0gJy8nKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVTcGVjaWFsc1tjXSkge1xuICAgICAgICAgIHJlICs9ICdcXFxcJ1xuICAgICAgICB9XG4gICAgICAgIHJlICs9IGNcbiAgICAgICAgZXNjYXBpbmcgPSBmYWxzZVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGMpIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgY2FzZSAnLyc6IHtcbiAgICAgICAgICAvLyBTaG91bGQgYWxyZWFkeSBiZSBwYXRoLXNwbGl0IGJ5IG5vdy5cbiAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgJ1xcXFwnOlxuICAgICAgICAgIGlmIChpbkNsYXNzICYmIHBhdHRlcm4uY2hhckF0KGkgKyAxKSA9PT0gJy0nKSB7XG4gICAgICAgICAgICByZSArPSBjXG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNsZWFyU3RhdGVDaGFyKClcbiAgICAgICAgICBlc2NhcGluZyA9IHRydWVcbiAgICAgICAgY29udGludWVcblxuICAgICAgICAvLyB0aGUgdmFyaW91cyBzdGF0ZUNoYXIgdmFsdWVzXG4gICAgICAgIC8vIGZvciB0aGUgXCJleHRnbG9iXCIgc3R1ZmYuXG4gICAgICAgIGNhc2UgJz8nOlxuICAgICAgICBjYXNlICcqJzpcbiAgICAgICAgY2FzZSAnKyc6XG4gICAgICAgIGNhc2UgJ0AnOlxuICAgICAgICBjYXNlICchJzpcbiAgICAgICAgICB0aGlzLmRlYnVnKCclc1xcdCVzICVzICVqIDwtLSBzdGF0ZUNoYXInLCBwYXR0ZXJuLCBpLCByZSwgYylcblxuICAgICAgICAgIC8vIGFsbCBvZiB0aG9zZSBhcmUgbGl0ZXJhbHMgaW5zaWRlIGEgY2xhc3MsIGV4Y2VwdCB0aGF0XG4gICAgICAgICAgLy8gdGhlIGdsb2IgWyFhXSBtZWFucyBbXmFdIGluIHJlZ2V4cFxuICAgICAgICAgIGlmIChpbkNsYXNzKSB7XG4gICAgICAgICAgICB0aGlzLmRlYnVnKCcgIGluIGNsYXNzJylcbiAgICAgICAgICAgIGlmIChjID09PSAnIScgJiYgaSA9PT0gY2xhc3NTdGFydCArIDEpIGMgPSAnXidcbiAgICAgICAgICAgIHJlICs9IGNcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gaWYgd2UgYWxyZWFkeSBoYXZlIGEgc3RhdGVDaGFyLCB0aGVuIGl0IG1lYW5zXG4gICAgICAgICAgLy8gdGhhdCB0aGVyZSB3YXMgc29tZXRoaW5nIGxpa2UgKiogb3IgKz8gaW4gdGhlcmUuXG4gICAgICAgICAgLy8gSGFuZGxlIHRoZSBzdGF0ZUNoYXIsIHRoZW4gcHJvY2VlZCB3aXRoIHRoaXMgb25lLlxuICAgICAgICAgIHRoaXMuZGVidWcoJ2NhbGwgY2xlYXJTdGF0ZUNoYXIgJWonLCBzdGF0ZUNoYXIpXG4gICAgICAgICAgY2xlYXJTdGF0ZUNoYXIoKVxuICAgICAgICAgIHN0YXRlQ2hhciA9IGNcbiAgICAgICAgICAvLyBpZiBleHRnbG9iIGlzIGRpc2FibGVkLCB0aGVuICsoYXNkZnxmb28pIGlzbid0IGEgdGhpbmcuXG4gICAgICAgICAgLy8ganVzdCBjbGVhciB0aGUgc3RhdGVjaGFyICpub3cqLCByYXRoZXIgdGhhbiBldmVuIGRpdmluZyBpbnRvXG4gICAgICAgICAgLy8gdGhlIHBhdHRlcm5MaXN0IHN0dWZmLlxuICAgICAgICAgIGlmIChvcHRpb25zLm5vZXh0KSBjbGVhclN0YXRlQ2hhcigpXG4gICAgICAgIGNvbnRpbnVlXG5cbiAgICAgICAgY2FzZSAnKCc6IHtcbiAgICAgICAgICBpZiAoaW5DbGFzcykge1xuICAgICAgICAgICAgcmUgKz0gJygnXG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghc3RhdGVDaGFyKSB7XG4gICAgICAgICAgICByZSArPSAnXFxcXCgnXG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHBsRW50cnkgPSB7XG4gICAgICAgICAgICB0eXBlOiBzdGF0ZUNoYXIsXG4gICAgICAgICAgICBzdGFydDogaSAtIDEsXG4gICAgICAgICAgICByZVN0YXJ0OiByZS5sZW5ndGgsXG4gICAgICAgICAgICBvcGVuOiBwbFR5cGVzW3N0YXRlQ2hhcl0ub3BlbixcbiAgICAgICAgICAgIGNsb3NlOiBwbFR5cGVzW3N0YXRlQ2hhcl0uY2xvc2UsXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZGVidWcodGhpcy5wYXR0ZXJuLCAnXFx0JywgcGxFbnRyeSlcbiAgICAgICAgICBwYXR0ZXJuTGlzdFN0YWNrLnB1c2gocGxFbnRyeSlcbiAgICAgICAgICAvLyBuZWdhdGlvbiBpcyAoPzooPyEoPzpqcykoPzo8cmVzdD4pKVteL10qKVxuICAgICAgICAgIHJlICs9IHBsRW50cnkub3BlblxuICAgICAgICAgIC8vIG5leHQgZW50cnkgc3RhcnRzIHdpdGggYSBkb3QgbWF5YmU/XG4gICAgICAgICAgaWYgKHBsRW50cnkuc3RhcnQgPT09IDAgJiYgcGxFbnRyeS50eXBlICE9PSAnIScpIHtcbiAgICAgICAgICAgIGRvdFRyYXZBbGxvd2VkID0gdHJ1ZVxuICAgICAgICAgICAgcmUgKz0gc3ViUGF0dGVyblN0YXJ0KHBhdHRlcm4uc2xpY2UoaSArIDEpKVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmRlYnVnKCdwbFR5cGUgJWogJWonLCBzdGF0ZUNoYXIsIHJlKVxuICAgICAgICAgIHN0YXRlQ2hhciA9IGZhbHNlXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgJyknOiB7XG4gICAgICAgICAgY29uc3QgcGxFbnRyeSA9IHBhdHRlcm5MaXN0U3RhY2tbcGF0dGVybkxpc3RTdGFjay5sZW5ndGggLSAxXVxuICAgICAgICAgIGlmIChpbkNsYXNzIHx8ICFwbEVudHJ5KSB7XG4gICAgICAgICAgICByZSArPSAnXFxcXCknXG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cbiAgICAgICAgICBwYXR0ZXJuTGlzdFN0YWNrLnBvcCgpXG5cbiAgICAgICAgICAvLyBjbG9zaW5nIGFuIGV4dGdsb2JcbiAgICAgICAgICBjbGVhclN0YXRlQ2hhcigpXG4gICAgICAgICAgaGFzTWFnaWMgPSB0cnVlXG4gICAgICAgICAgcGwgPSBwbEVudHJ5XG4gICAgICAgICAgLy8gbmVnYXRpb24gaXMgKD86KD8hanMpW14vXSopXG4gICAgICAgICAgLy8gVGhlIG90aGVycyBhcmUgKD86PHBhdHRlcm4+KTx0eXBlPlxuICAgICAgICAgIHJlICs9IHBsLmNsb3NlXG4gICAgICAgICAgaWYgKHBsLnR5cGUgPT09ICchJykge1xuICAgICAgICAgICAgbmVnYXRpdmVMaXN0cy5wdXNoKE9iamVjdC5hc3NpZ24ocGwsIHsgcmVFbmQ6IHJlLmxlbmd0aCB9KSlcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgJ3wnOiB7XG4gICAgICAgICAgY29uc3QgcGxFbnRyeSA9IHBhdHRlcm5MaXN0U3RhY2tbcGF0dGVybkxpc3RTdGFjay5sZW5ndGggLSAxXVxuICAgICAgICAgIGlmIChpbkNsYXNzIHx8ICFwbEVudHJ5KSB7XG4gICAgICAgICAgICByZSArPSAnXFxcXHwnXG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNsZWFyU3RhdGVDaGFyKClcbiAgICAgICAgICByZSArPSAnfCdcbiAgICAgICAgICAvLyBuZXh0IHN1YnBhdHRlcm4gY2FuIHN0YXJ0IHdpdGggYSBkb3Q/XG4gICAgICAgICAgaWYgKHBsRW50cnkuc3RhcnQgPT09IDAgJiYgcGxFbnRyeS50eXBlICE9PSAnIScpIHtcbiAgICAgICAgICAgIGRvdFRyYXZBbGxvd2VkID0gdHJ1ZVxuICAgICAgICAgICAgcmUgKz0gc3ViUGF0dGVyblN0YXJ0KHBhdHRlcm4uc2xpY2UoaSArIDEpKVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gdGhlc2UgYXJlIG1vc3RseSB0aGUgc2FtZSBpbiByZWdleHAgYW5kIGdsb2JcbiAgICAgICAgY2FzZSAnWyc6XG4gICAgICAgICAgLy8gc3dhbGxvdyBhbnkgc3RhdGUtdHJhY2tpbmcgY2hhciBiZWZvcmUgdGhlIFtcbiAgICAgICAgICBjbGVhclN0YXRlQ2hhcigpXG5cbiAgICAgICAgICBpZiAoaW5DbGFzcykge1xuICAgICAgICAgICAgcmUgKz0gJ1xcXFwnICsgY1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpbkNsYXNzID0gdHJ1ZVxuICAgICAgICAgIGNsYXNzU3RhcnQgPSBpXG4gICAgICAgICAgcmVDbGFzc1N0YXJ0ID0gcmUubGVuZ3RoXG4gICAgICAgICAgcmUgKz0gY1xuICAgICAgICBjb250aW51ZVxuXG4gICAgICAgIGNhc2UgJ10nOlxuICAgICAgICAgIC8vICBhIHJpZ2h0IGJyYWNrZXQgc2hhbGwgbG9zZSBpdHMgc3BlY2lhbFxuICAgICAgICAgIC8vICBtZWFuaW5nIGFuZCByZXByZXNlbnQgaXRzZWxmIGluXG4gICAgICAgICAgLy8gIGEgYnJhY2tldCBleHByZXNzaW9uIGlmIGl0IG9jY3Vyc1xuICAgICAgICAgIC8vICBmaXJzdCBpbiB0aGUgbGlzdC4gIC0tIFBPU0lYLjIgMi44LjMuMlxuICAgICAgICAgIGlmIChpID09PSBjbGFzc1N0YXJ0ICsgMSB8fCAhaW5DbGFzcykge1xuICAgICAgICAgICAgcmUgKz0gJ1xcXFwnICsgY1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBzcGxpdCB3aGVyZSB0aGUgbGFzdCBbIHdhcywgbWFrZSBzdXJlIHdlIGRvbid0IGhhdmVcbiAgICAgICAgICAvLyBhbiBpbnZhbGlkIHJlLiBpZiBzbywgcmUtd2FsayB0aGUgY29udGVudHMgb2YgdGhlXG4gICAgICAgICAgLy8gd291bGQtYmUgY2xhc3MgdG8gcmUtdHJhbnNsYXRlIGFueSBjaGFyYWN0ZXJzIHRoYXRcbiAgICAgICAgICAvLyB3ZXJlIHBhc3NlZCB0aHJvdWdoIGFzLWlzXG4gICAgICAgICAgLy8gVE9ETzogSXQgd291bGQgcHJvYmFibHkgYmUgZmFzdGVyIHRvIGRldGVybWluZSB0aGlzXG4gICAgICAgICAgLy8gd2l0aG91dCBhIHRyeS9jYXRjaCBhbmQgYSBuZXcgUmVnRXhwLCBidXQgaXQncyB0cmlja3lcbiAgICAgICAgICAvLyB0byBkbyBzYWZlbHkuICBGb3Igbm93LCB0aGlzIGlzIHNhZmUgYW5kIHdvcmtzLlxuICAgICAgICAgIGNzID0gcGF0dGVybi5zdWJzdHJpbmcoY2xhc3NTdGFydCArIDEsIGkpXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIFJlZ0V4cCgnWycgKyBicmFFeHBFc2NhcGUoY2hhclVuZXNjYXBlKGNzKSkgKyAnXScpXG4gICAgICAgICAgICAvLyBsb29rcyBnb29kLCBmaW5pc2ggdXAgdGhlIGNsYXNzLlxuICAgICAgICAgICAgcmUgKz0gY1xuICAgICAgICAgIH0gY2F0Y2ggKGVyKSB7XG4gICAgICAgICAgICAvLyBvdXQgb2Ygb3JkZXIgcmFuZ2VzIGluIEpTIGFyZSBlcnJvcnMsIGJ1dCBpbiBnbG9iIHN5bnRheCxcbiAgICAgICAgICAgIC8vIHRoZXkncmUganVzdCBhIHJhbmdlIHRoYXQgbWF0Y2hlcyBub3RoaW5nLlxuICAgICAgICAgICAgcmUgPSByZS5zdWJzdHJpbmcoMCwgcmVDbGFzc1N0YXJ0KSArICcoPzokLiknIC8vIG1hdGNoIG5vdGhpbmcgZXZlclxuICAgICAgICAgIH1cbiAgICAgICAgICBoYXNNYWdpYyA9IHRydWVcbiAgICAgICAgICBpbkNsYXNzID0gZmFsc2VcbiAgICAgICAgY29udGludWVcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIC8vIHN3YWxsb3cgYW55IHN0YXRlIGNoYXIgdGhhdCB3YXNuJ3QgY29uc3VtZWRcbiAgICAgICAgICBjbGVhclN0YXRlQ2hhcigpXG5cbiAgICAgICAgICBpZiAocmVTcGVjaWFsc1tjXSAmJiAhKGMgPT09ICdeJyAmJiBpbkNsYXNzKSkge1xuICAgICAgICAgICAgcmUgKz0gJ1xcXFwnXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmUgKz0gY1xuICAgICAgICAgIGJyZWFrXG5cbiAgICAgIH0gLy8gc3dpdGNoXG4gICAgfSAvLyBmb3JcblxuICAgIC8vIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB3ZSBsZWZ0IGEgY2xhc3Mgb3Blbi5cbiAgICAvLyBcIlthYmNcIiBpcyB2YWxpZCwgZXF1aXZhbGVudCB0byBcIlxcW2FiY1wiXG4gICAgaWYgKGluQ2xhc3MpIHtcbiAgICAgIC8vIHNwbGl0IHdoZXJlIHRoZSBsYXN0IFsgd2FzLCBhbmQgZXNjYXBlIGl0XG4gICAgICAvLyB0aGlzIGlzIGEgaHVnZSBwaXRhLiAgV2Ugbm93IGhhdmUgdG8gcmUtd2Fsa1xuICAgICAgLy8gdGhlIGNvbnRlbnRzIG9mIHRoZSB3b3VsZC1iZSBjbGFzcyB0byByZS10cmFuc2xhdGVcbiAgICAgIC8vIGFueSBjaGFyYWN0ZXJzIHRoYXQgd2VyZSBwYXNzZWQgdGhyb3VnaCBhcy1pc1xuICAgICAgY3MgPSBwYXR0ZXJuLnNsaWNlKGNsYXNzU3RhcnQgKyAxKVxuICAgICAgc3AgPSB0aGlzLnBhcnNlKGNzLCBTVUJQQVJTRSlcbiAgICAgIHJlID0gcmUuc3Vic3RyaW5nKDAsIHJlQ2xhc3NTdGFydCkgKyAnXFxcXFsnICsgc3BbMF1cbiAgICAgIGhhc01hZ2ljID0gaGFzTWFnaWMgfHwgc3BbMV1cbiAgICB9XG5cbiAgICAvLyBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgd2UgaGFkIGEgKyggdGhpbmcgYXQgdGhlICplbmQqXG4gICAgLy8gb2YgdGhlIHBhdHRlcm4uXG4gICAgLy8gZWFjaCBwYXR0ZXJuIGxpc3Qgc3RhY2sgYWRkcyAzIGNoYXJzLCBhbmQgd2UgbmVlZCB0byBnbyB0aHJvdWdoXG4gICAgLy8gYW5kIGVzY2FwZSBhbnkgfCBjaGFycyB0aGF0IHdlcmUgcGFzc2VkIHRocm91Z2ggYXMtaXMgZm9yIHRoZSByZWdleHAuXG4gICAgLy8gR28gdGhyb3VnaCBhbmQgZXNjYXBlIHRoZW0sIHRha2luZyBjYXJlIG5vdCB0byBkb3VibGUtZXNjYXBlIGFueVxuICAgIC8vIHwgY2hhcnMgdGhhdCB3ZXJlIGFscmVhZHkgZXNjYXBlZC5cbiAgICBmb3IgKHBsID0gcGF0dGVybkxpc3RTdGFjay5wb3AoKTsgcGw7IHBsID0gcGF0dGVybkxpc3RTdGFjay5wb3AoKSkge1xuICAgICAgbGV0IHRhaWxcbiAgICAgIHRhaWwgPSByZS5zbGljZShwbC5yZVN0YXJ0ICsgcGwub3Blbi5sZW5ndGgpXG4gICAgICB0aGlzLmRlYnVnKCdzZXR0aW5nIHRhaWwnLCByZSwgcGwpXG4gICAgICAvLyBtYXliZSBzb21lIGV2ZW4gbnVtYmVyIG9mIFxcLCB0aGVuIG1heWJlIDEgXFwsIGZvbGxvd2VkIGJ5IGEgfFxuICAgICAgdGFpbCA9IHRhaWwucmVwbGFjZSgvKCg/OlxcXFx7Mn0pezAsNjR9KShcXFxcPylcXHwvZywgKF8sICQxLCAkMikgPT4ge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAtIHNob3VsZCBhbHJlYWR5IGJlIGRvbmUgKi9cbiAgICAgICAgaWYgKCEkMikge1xuICAgICAgICAgIC8vIHRoZSB8IGlzbid0IGFscmVhZHkgZXNjYXBlZCwgc28gZXNjYXBlIGl0LlxuICAgICAgICAgICQyID0gJ1xcXFwnXG4gICAgICAgIH1cblxuICAgICAgICAvLyBuZWVkIHRvIGVzY2FwZSBhbGwgdGhvc2Ugc2xhc2hlcyAqYWdhaW4qLCB3aXRob3V0IGVzY2FwaW5nIHRoZVxuICAgICAgICAvLyBvbmUgdGhhdCB3ZSBuZWVkIGZvciBlc2NhcGluZyB0aGUgfCBjaGFyYWN0ZXIuICBBcyBpdCB3b3JrcyBvdXQsXG4gICAgICAgIC8vIGVzY2FwaW5nIGFuIGV2ZW4gbnVtYmVyIG9mIHNsYXNoZXMgY2FuIGJlIGRvbmUgYnkgc2ltcGx5IHJlcGVhdGluZ1xuICAgICAgICAvLyBpdCBleGFjdGx5IGFmdGVyIGl0c2VsZi4gIFRoYXQncyB3aHkgdGhpcyB0cmljayB3b3Jrcy5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gSSBhbSBzb3JyeSB0aGF0IHlvdSBoYXZlIHRvIHNlZSB0aGlzLlxuICAgICAgICByZXR1cm4gJDEgKyAkMSArICQyICsgJ3wnXG4gICAgICB9KVxuXG4gICAgICB0aGlzLmRlYnVnKCd0YWlsPSVqXFxuICAgJXMnLCB0YWlsLCB0YWlsLCBwbCwgcmUpXG4gICAgICBjb25zdCB0ID0gcGwudHlwZSA9PT0gJyonID8gc3RhclxuICAgICAgICA6IHBsLnR5cGUgPT09ICc/JyA/IHFtYXJrXG4gICAgICAgIDogJ1xcXFwnICsgcGwudHlwZVxuXG4gICAgICBoYXNNYWdpYyA9IHRydWVcbiAgICAgIHJlID0gcmUuc2xpY2UoMCwgcGwucmVTdGFydCkgKyB0ICsgJ1xcXFwoJyArIHRhaWxcbiAgICB9XG5cbiAgICAvLyBoYW5kbGUgdHJhaWxpbmcgdGhpbmdzIHRoYXQgb25seSBtYXR0ZXIgYXQgdGhlIHZlcnkgZW5kLlxuICAgIGNsZWFyU3RhdGVDaGFyKClcbiAgICBpZiAoZXNjYXBpbmcpIHtcbiAgICAgIC8vIHRyYWlsaW5nIFxcXFxcbiAgICAgIHJlICs9ICdcXFxcXFxcXCdcbiAgICB9XG5cbiAgICAvLyBvbmx5IG5lZWQgdG8gYXBwbHkgdGhlIG5vZG90IHN0YXJ0IGlmIHRoZSByZSBzdGFydHMgd2l0aFxuICAgIC8vIHNvbWV0aGluZyB0aGF0IGNvdWxkIGNvbmNlaXZhYmx5IGNhcHR1cmUgYSBkb3RcbiAgICBjb25zdCBhZGRQYXR0ZXJuU3RhcnQgPSBhZGRQYXR0ZXJuU3RhcnRTZXRbcmUuY2hhckF0KDApXVxuXG4gICAgLy8gSGFjayB0byB3b3JrIGFyb3VuZCBsYWNrIG9mIG5lZ2F0aXZlIGxvb2tiZWhpbmQgaW4gSlNcbiAgICAvLyBBIHBhdHRlcm4gbGlrZTogKi4hKHgpLiEoeXx6KSBuZWVkcyB0byBlbnN1cmUgdGhhdCBhIG5hbWVcbiAgICAvLyBsaWtlICdhLnh5ei55eicgZG9lc24ndCBtYXRjaC4gIFNvLCB0aGUgZmlyc3QgbmVnYXRpdmVcbiAgICAvLyBsb29rYWhlYWQsIGhhcyB0byBsb29rIEFMTCB0aGUgd2F5IGFoZWFkLCB0byB0aGUgZW5kIG9mXG4gICAgLy8gdGhlIHBhdHRlcm4uXG4gICAgZm9yIChsZXQgbiA9IG5lZ2F0aXZlTGlzdHMubGVuZ3RoIC0gMTsgbiA+IC0xOyBuLS0pIHtcbiAgICAgIGNvbnN0IG5sID0gbmVnYXRpdmVMaXN0c1tuXVxuXG4gICAgICBjb25zdCBubEJlZm9yZSA9IHJlLnNsaWNlKDAsIG5sLnJlU3RhcnQpXG4gICAgICBjb25zdCBubEZpcnN0ID0gcmUuc2xpY2UobmwucmVTdGFydCwgbmwucmVFbmQgLSA4KVxuICAgICAgbGV0IG5sQWZ0ZXIgPSByZS5zbGljZShubC5yZUVuZClcbiAgICAgIGNvbnN0IG5sTGFzdCA9IHJlLnNsaWNlKG5sLnJlRW5kIC0gOCwgbmwucmVFbmQpICsgbmxBZnRlclxuXG4gICAgICAvLyBIYW5kbGUgbmVzdGVkIHN0dWZmIGxpa2UgKigqLmpzfCEoKi5qc29uKSksIHdoZXJlIG9wZW4gcGFyZW5zXG4gICAgICAvLyBtZWFuIHRoYXQgd2Ugc2hvdWxkICpub3QqIGluY2x1ZGUgdGhlICkgaW4gdGhlIGJpdCB0aGF0IGlzIGNvbnNpZGVyZWRcbiAgICAgIC8vIFwiYWZ0ZXJcIiB0aGUgbmVnYXRlZCBzZWN0aW9uLlxuICAgICAgY29uc3QgY2xvc2VQYXJlbnNCZWZvcmUgPSBubEJlZm9yZS5zcGxpdCgnKScpLmxlbmd0aFxuICAgICAgY29uc3Qgb3BlblBhcmVuc0JlZm9yZSA9IG5sQmVmb3JlLnNwbGl0KCcoJykubGVuZ3RoIC0gY2xvc2VQYXJlbnNCZWZvcmVcbiAgICAgIGxldCBjbGVhbkFmdGVyID0gbmxBZnRlclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcGVuUGFyZW5zQmVmb3JlOyBpKyspIHtcbiAgICAgICAgY2xlYW5BZnRlciA9IGNsZWFuQWZ0ZXIucmVwbGFjZSgvXFwpWysqP10/LywgJycpXG4gICAgICB9XG4gICAgICBubEFmdGVyID0gY2xlYW5BZnRlclxuXG4gICAgICBjb25zdCBkb2xsYXIgPSBubEFmdGVyID09PSAnJyAmJiBpc1N1YiAhPT0gU1VCUEFSU0UgPyAnKD86JHxcXFxcLyknIDogJydcblxuICAgICAgcmUgPSBubEJlZm9yZSArIG5sRmlyc3QgKyBubEFmdGVyICsgZG9sbGFyICsgbmxMYXN0XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIHJlIGlzIG5vdCBcIlwiIGF0IHRoaXMgcG9pbnQsIHRoZW4gd2UgbmVlZCB0byBtYWtlIHN1cmVcbiAgICAvLyBpdCBkb2Vzbid0IG1hdGNoIGFnYWluc3QgYW4gZW1wdHkgcGF0aCBwYXJ0LlxuICAgIC8vIE90aGVyd2lzZSBhLyogd2lsbCBtYXRjaCBhLywgd2hpY2ggaXQgc2hvdWxkIG5vdC5cbiAgICBpZiAocmUgIT09ICcnICYmIGhhc01hZ2ljKSB7XG4gICAgICByZSA9ICcoPz0uKScgKyByZVxuICAgIH1cblxuICAgIGlmIChhZGRQYXR0ZXJuU3RhcnQpIHtcbiAgICAgIHJlID0gcGF0dGVyblN0YXJ0KCkgKyByZVxuICAgIH1cblxuICAgIC8vIHBhcnNpbmcganVzdCBhIHBpZWNlIG9mIGEgbGFyZ2VyIHBhdHRlcm4uXG4gICAgaWYgKGlzU3ViID09PSBTVUJQQVJTRSkge1xuICAgICAgcmV0dXJuIFtyZSwgaGFzTWFnaWNdXG4gICAgfVxuXG4gICAgLy8gaWYgaXQncyBub2Nhc2UsIGFuZCB0aGUgbGNhc2UvdXBwZXJjYXNlIGRvbid0IG1hdGNoLCBpdCdzIG1hZ2ljXG4gICAgaWYgKG9wdGlvbnMubm9jYXNlICYmICFoYXNNYWdpYykge1xuICAgICAgaGFzTWFnaWMgPSBwYXR0ZXJuLnRvVXBwZXJDYXNlKCkgIT09IHBhdHRlcm4udG9Mb3dlckNhc2UoKVxuICAgIH1cblxuICAgIC8vIHNraXAgdGhlIHJlZ2V4cCBmb3Igbm9uLW1hZ2ljYWwgcGF0dGVybnNcbiAgICAvLyB1bmVzY2FwZSBhbnl0aGluZyBpbiBpdCwgdGhvdWdoLCBzbyB0aGF0IGl0J2xsIGJlXG4gICAgLy8gYW4gZXhhY3QgbWF0Y2ggYWdhaW5zdCBhIGZpbGUgZXRjLlxuICAgIGlmICghaGFzTWFnaWMpIHtcbiAgICAgIHJldHVybiBnbG9iVW5lc2NhcGUocGF0dGVybilcbiAgICB9XG5cbiAgICBjb25zdCBmbGFncyA9IG9wdGlvbnMubm9jYXNlID8gJ2knIDogJydcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IFJlZ0V4cCgnXicgKyByZSArICckJywgZmxhZ3MpLCB7XG4gICAgICAgIF9nbG9iOiBwYXR0ZXJuLFxuICAgICAgICBfc3JjOiByZSxcbiAgICAgIH0pXG4gICAgfSBjYXRjaCAoZXIpIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0IC0gc2hvdWxkIGJlIGltcG9zc2libGUgKi8ge1xuICAgICAgLy8gSWYgaXQgd2FzIGFuIGludmFsaWQgcmVndWxhciBleHByZXNzaW9uLCB0aGVuIGl0IGNhbid0IG1hdGNoXG4gICAgICAvLyBhbnl0aGluZy4gIFRoaXMgdHJpY2sgbG9va3MgZm9yIGEgY2hhcmFjdGVyIGFmdGVyIHRoZSBlbmQgb2ZcbiAgICAgIC8vIHRoZSBzdHJpbmcsIHdoaWNoIGlzIG9mIGNvdXJzZSBpbXBvc3NpYmxlLCBleGNlcHQgaW4gbXVsdGktbGluZVxuICAgICAgLy8gbW9kZSwgYnV0IGl0J3Mgbm90IGEgL20gcmVnZXguXG4gICAgICByZXR1cm4gbmV3IFJlZ0V4cCgnJC4nKVxuICAgIH1cbiAgfVxuXG4gIG1ha2VSZSAoKSB7XG4gICAgaWYgKHRoaXMucmVnZXhwIHx8IHRoaXMucmVnZXhwID09PSBmYWxzZSkgcmV0dXJuIHRoaXMucmVnZXhwXG5cbiAgICAvLyBhdCB0aGlzIHBvaW50LCB0aGlzLnNldCBpcyBhIDJkIGFycmF5IG9mIHBhcnRpYWxcbiAgICAvLyBwYXR0ZXJuIHN0cmluZ3MsIG9yIFwiKipcIi5cbiAgICAvL1xuICAgIC8vIEl0J3MgYmV0dGVyIHRvIHVzZSAubWF0Y2goKS4gIFRoaXMgZnVuY3Rpb24gc2hvdWxkbid0XG4gICAgLy8gYmUgdXNlZCwgcmVhbGx5LCBidXQgaXQncyBwcmV0dHkgY29udmVuaWVudCBzb21ldGltZXMsXG4gICAgLy8gd2hlbiB5b3UganVzdCB3YW50IHRvIHdvcmsgd2l0aCBhIHJlZ2V4LlxuICAgIGNvbnN0IHNldCA9IHRoaXMuc2V0XG5cbiAgICBpZiAoIXNldC5sZW5ndGgpIHtcbiAgICAgIHRoaXMucmVnZXhwID0gZmFsc2VcbiAgICAgIHJldHVybiB0aGlzLnJlZ2V4cFxuICAgIH1cbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zXG5cbiAgICBjb25zdCB0d29TdGFyID0gb3B0aW9ucy5ub2dsb2JzdGFyID8gc3RhclxuICAgICAgOiBvcHRpb25zLmRvdCA/IHR3b1N0YXJEb3RcbiAgICAgIDogdHdvU3Rhck5vRG90XG4gICAgY29uc3QgZmxhZ3MgPSBvcHRpb25zLm5vY2FzZSA/ICdpJyA6ICcnXG5cbiAgICAvLyBjb2FsZXNjZSBnbG9ic3RhcnMgYW5kIHJlZ2V4cGlmeSBub24tZ2xvYnN0YXIgcGF0dGVybnNcbiAgICAvLyBpZiBpdCdzIHRoZSBvbmx5IGl0ZW0sIHRoZW4gd2UganVzdCBkbyBvbmUgdHdvU3RhclxuICAgIC8vIGlmIGl0J3MgdGhlIGZpcnN0LCBhbmQgdGhlcmUgYXJlIG1vcmUsIHByZXBlbmQgKFxcL3x0d29TdGFyXFwvKT8gdG8gbmV4dFxuICAgIC8vIGlmIGl0J3MgdGhlIGxhc3QsIGFwcGVuZCAoXFwvdHdvU3RhcnwpIHRvIHByZXZpb3VzXG4gICAgLy8gaWYgaXQncyBpbiB0aGUgbWlkZGxlLCBhcHBlbmQgKFxcL3xcXC90d29TdGFyXFwvKSB0byBwcmV2aW91c1xuICAgIC8vIHRoZW4gZmlsdGVyIG91dCBHTE9CU1RBUiBzeW1ib2xzXG4gICAgbGV0IHJlID0gc2V0Lm1hcChwYXR0ZXJuID0+IHtcbiAgICAgIHBhdHRlcm4gPSBwYXR0ZXJuLm1hcChwID0+XG4gICAgICAgIHR5cGVvZiBwID09PSAnc3RyaW5nJyA/IHJlZ0V4cEVzY2FwZShwKVxuICAgICAgICA6IHAgPT09IEdMT0JTVEFSID8gR0xPQlNUQVJcbiAgICAgICAgOiBwLl9zcmNcbiAgICAgICkucmVkdWNlKChzZXQsIHApID0+IHtcbiAgICAgICAgaWYgKCEoc2V0W3NldC5sZW5ndGggLSAxXSA9PT0gR0xPQlNUQVIgJiYgcCA9PT0gR0xPQlNUQVIpKSB7XG4gICAgICAgICAgc2V0LnB1c2gocClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2V0XG4gICAgICB9LCBbXSlcbiAgICAgIHBhdHRlcm4uZm9yRWFjaCgocCwgaSkgPT4ge1xuICAgICAgICBpZiAocCAhPT0gR0xPQlNUQVIgfHwgcGF0dGVybltpLTFdID09PSBHTE9CU1RBUikge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgaWYgKHBhdHRlcm4ubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgcGF0dGVybltpKzFdID0gJyg/OlxcXFxcXC98JyArIHR3b1N0YXIgKyAnXFxcXFxcLyk/JyArIHBhdHRlcm5baSsxXVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXR0ZXJuW2ldID0gdHdvU3RhclxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChpID09PSBwYXR0ZXJuLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICBwYXR0ZXJuW2ktMV0gKz0gJyg/OlxcXFxcXC98JyArIHR3b1N0YXIgKyAnKT8nXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGF0dGVybltpLTFdICs9ICcoPzpcXFxcXFwvfFxcXFxcXC8nICsgdHdvU3RhciArICdcXFxcXFwvKScgKyBwYXR0ZXJuW2krMV1cbiAgICAgICAgICBwYXR0ZXJuW2krMV0gPSBHTE9CU1RBUlxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgcmV0dXJuIHBhdHRlcm4uZmlsdGVyKHAgPT4gcCAhPT0gR0xPQlNUQVIpLmpvaW4oJy8nKVxuICAgIH0pLmpvaW4oJ3wnKVxuXG4gICAgLy8gbXVzdCBtYXRjaCBlbnRpcmUgcGF0dGVyblxuICAgIC8vIGVuZGluZyBpbiBhICogb3IgKiogd2lsbCBtYWtlIGl0IGxlc3Mgc3RyaWN0LlxuICAgIHJlID0gJ14oPzonICsgcmUgKyAnKSQnXG5cbiAgICAvLyBjYW4gbWF0Y2ggYW55dGhpbmcsIGFzIGxvbmcgYXMgaXQncyBub3QgdGhpcy5cbiAgICBpZiAodGhpcy5uZWdhdGUpIHJlID0gJ14oPyEnICsgcmUgKyAnKS4qJCdcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLnJlZ2V4cCA9IG5ldyBSZWdFeHAocmUsIGZsYWdzKVxuICAgIH0gY2F0Y2ggKGV4KSAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAtIHNob3VsZCBiZSBpbXBvc3NpYmxlICovIHtcbiAgICAgIHRoaXMucmVnZXhwID0gZmFsc2VcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucmVnZXhwXG4gIH1cblxuICBtYXRjaCAoZiwgcGFydGlhbCA9IHRoaXMucGFydGlhbCkge1xuICAgIHRoaXMuZGVidWcoJ21hdGNoJywgZiwgdGhpcy5wYXR0ZXJuKVxuICAgIC8vIHNob3J0LWNpcmN1aXQgaW4gdGhlIGNhc2Ugb2YgYnVzdGVkIHRoaW5ncy5cbiAgICAvLyBjb21tZW50cywgZXRjLlxuICAgIGlmICh0aGlzLmNvbW1lbnQpIHJldHVybiBmYWxzZVxuICAgIGlmICh0aGlzLmVtcHR5KSByZXR1cm4gZiA9PT0gJydcblxuICAgIGlmIChmID09PSAnLycgJiYgcGFydGlhbCkgcmV0dXJuIHRydWVcblxuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnNcblxuICAgIC8vIHdpbmRvd3M6IG5lZWQgdG8gdXNlIC8sIG5vdCBcXFxuICAgIGlmIChwYXRoLnNlcCAhPT0gJy8nKSB7XG4gICAgICBmID0gZi5zcGxpdChwYXRoLnNlcCkuam9pbignLycpXG4gICAgfVxuXG4gICAgLy8gdHJlYXQgdGhlIHRlc3QgcGF0aCBhcyBhIHNldCBvZiBwYXRocGFydHMuXG4gICAgZiA9IGYuc3BsaXQoc2xhc2hTcGxpdClcbiAgICB0aGlzLmRlYnVnKHRoaXMucGF0dGVybiwgJ3NwbGl0JywgZilcblxuICAgIC8vIGp1c3QgT05FIG9mIHRoZSBwYXR0ZXJuIHNldHMgaW4gdGhpcy5zZXQgbmVlZHMgdG8gbWF0Y2hcbiAgICAvLyBpbiBvcmRlciBmb3IgaXQgdG8gYmUgdmFsaWQuICBJZiBuZWdhdGluZywgdGhlbiBqdXN0IG9uZVxuICAgIC8vIG1hdGNoIG1lYW5zIHRoYXQgd2UgaGF2ZSBmYWlsZWQuXG4gICAgLy8gRWl0aGVyIHdheSwgcmV0dXJuIG9uIHRoZSBmaXJzdCBoaXQuXG5cbiAgICBjb25zdCBzZXQgPSB0aGlzLnNldFxuICAgIHRoaXMuZGVidWcodGhpcy5wYXR0ZXJuLCAnc2V0Jywgc2V0KVxuXG4gICAgLy8gRmluZCB0aGUgYmFzZW5hbWUgb2YgdGhlIHBhdGggYnkgbG9va2luZyBmb3IgdGhlIGxhc3Qgbm9uLWVtcHR5IHNlZ21lbnRcbiAgICBsZXQgZmlsZW5hbWVcbiAgICBmb3IgKGxldCBpID0gZi5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgZmlsZW5hbWUgPSBmW2ldXG4gICAgICBpZiAoZmlsZW5hbWUpIGJyZWFrXG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZXQubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHBhdHRlcm4gPSBzZXRbaV1cbiAgICAgIGxldCBmaWxlID0gZlxuICAgICAgaWYgKG9wdGlvbnMubWF0Y2hCYXNlICYmIHBhdHRlcm4ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGZpbGUgPSBbZmlsZW5hbWVdXG4gICAgICB9XG4gICAgICBjb25zdCBoaXQgPSB0aGlzLm1hdGNoT25lKGZpbGUsIHBhdHRlcm4sIHBhcnRpYWwpXG4gICAgICBpZiAoaGl0KSB7XG4gICAgICAgIGlmIChvcHRpb25zLmZsaXBOZWdhdGUpIHJldHVybiB0cnVlXG4gICAgICAgIHJldHVybiAhdGhpcy5uZWdhdGVcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBkaWRuJ3QgZ2V0IGFueSBoaXRzLiAgdGhpcyBpcyBzdWNjZXNzIGlmIGl0J3MgYSBuZWdhdGl2ZVxuICAgIC8vIHBhdHRlcm4sIGZhaWx1cmUgb3RoZXJ3aXNlLlxuICAgIGlmIChvcHRpb25zLmZsaXBOZWdhdGUpIHJldHVybiBmYWxzZVxuICAgIHJldHVybiB0aGlzLm5lZ2F0ZVxuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRzIChkZWYpIHtcbiAgICByZXR1cm4gbWluaW1hdGNoLmRlZmF1bHRzKGRlZikuTWluaW1hdGNoXG4gIH1cbn1cblxubWluaW1hdGNoLk1pbmltYXRjaCA9IE1pbmltYXRjaFxuIiwKICAgICJtb2R1bGUuZXhwb3J0cyA9IHJlYWRkaXJHbG9iO1xuXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG5jb25zdCB7IEV2ZW50RW1pdHRlciB9ID0gcmVxdWlyZSgnZXZlbnRzJyk7XG5jb25zdCB7IE1pbmltYXRjaCB9ID0gcmVxdWlyZSgnbWluaW1hdGNoJyk7XG5jb25zdCB7IHJlc29sdmUgfSA9IHJlcXVpcmUoJ3BhdGgnKTtcblxuZnVuY3Rpb24gcmVhZGRpcihkaXIsIHN0cmljdCkge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGZzLnJlYWRkaXIoZGlyLCB7d2l0aEZpbGVUeXBlczogdHJ1ZX0gLChlcnIsIGZpbGVzKSA9PiB7XG4gICAgICBpZihlcnIpIHtcbiAgICAgICAgc3dpdGNoIChlcnIuY29kZSkge1xuICAgICAgICAgIGNhc2UgJ0VOT1RESVInOiAgICAgIC8vIE5vdCBhIGRpcmVjdG9yeVxuICAgICAgICAgICAgaWYoc3RyaWN0KSB7XG4gICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmVzb2x2ZShbXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdFTk9UU1VQJzogICAgICAvLyBPcGVyYXRpb24gbm90IHN1cHBvcnRlZFxuICAgICAgICAgIGNhc2UgJ0VOT0VOVCc6ICAgICAgIC8vIE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnlcbiAgICAgICAgICBjYXNlICdFTkFNRVRPT0xPTkcnOiAvLyBGaWxlbmFtZSB0b28gbG9uZ1xuICAgICAgICAgIGNhc2UgJ1VOS05PV04nOlxuICAgICAgICAgICAgcmVzb2x2ZShbXSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdFTE9PUCc6ICAgICAgICAvLyBUb28gbWFueSBsZXZlbHMgb2Ygc3ltYm9saWMgbGlua3NcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZShmaWxlcyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gc3RhdChmaWxlLCBmb2xsb3dTeW1saW5rcykge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHN0YXRGdW5jID0gZm9sbG93U3ltbGlua3MgPyBmcy5zdGF0IDogZnMubHN0YXQ7XG4gICAgc3RhdEZ1bmMoZmlsZSwgKGVyciwgc3RhdHMpID0+IHtcbiAgICAgIGlmKGVycikge1xuICAgICAgICBzd2l0Y2ggKGVyci5jb2RlKSB7XG4gICAgICAgICAgY2FzZSAnRU5PRU5UJzpcbiAgICAgICAgICAgIGlmKGZvbGxvd1N5bWxpbmtzKSB7XG4gICAgICAgICAgICAgIC8vIEZhbGxiYWNrIHRvIGxzdGF0IHRvIGhhbmRsZSBicm9rZW4gbGlua3MgYXMgZmlsZXNcbiAgICAgICAgICAgICAgcmVzb2x2ZShzdGF0KGZpbGUsIGZhbHNlKSk7IFxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXNvbHZlKG51bGwpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUoc3RhdHMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24qIGV4cGxvcmVXYWxrQXN5bmMoZGlyLCBwYXRoLCBmb2xsb3dTeW1saW5rcywgdXNlU3RhdCwgc2hvdWxkU2tpcCwgc3RyaWN0KSB7XG4gIGxldCBmaWxlcyA9IGF3YWl0IHJlYWRkaXIocGF0aCArIGRpciwgc3RyaWN0KTtcbiAgZm9yKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICBsZXQgbmFtZSA9IGZpbGUubmFtZTtcbiAgICBpZihuYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIHVuZGVmaW5lZCBmaWxlLm5hbWUgbWVhbnMgdGhlIGB3aXRoRmlsZVR5cGVzYCBvcHRpb25zIGlzIG5vdCBzdXBwb3J0ZWQgYnkgbm9kZVxuICAgICAgLy8gd2UgaGF2ZSB0byBjYWxsIHRoZSBzdGF0IGZ1bmN0aW9uIHRvIGtub3cgaWYgZmlsZSBpcyBkaXJlY3Rvcnkgb3Igbm90LlxuICAgICAgbmFtZSA9IGZpbGU7XG4gICAgICB1c2VTdGF0ID0gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgZmlsZW5hbWUgPSBkaXIgKyAnLycgKyBuYW1lO1xuICAgIGNvbnN0IHJlbGF0aXZlID0gZmlsZW5hbWUuc2xpY2UoMSk7IC8vIFJlbW92ZSB0aGUgbGVhZGluZyAvXG4gICAgY29uc3QgYWJzb2x1dGUgPSBwYXRoICsgJy8nICsgcmVsYXRpdmU7XG4gICAgbGV0IHN0YXRzID0gbnVsbDtcbiAgICBpZih1c2VTdGF0IHx8IGZvbGxvd1N5bWxpbmtzKSB7XG4gICAgICBzdGF0cyA9IGF3YWl0IHN0YXQoYWJzb2x1dGUsIGZvbGxvd1N5bWxpbmtzKTtcbiAgICB9XG4gICAgaWYoIXN0YXRzICYmIGZpbGUubmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBzdGF0cyA9IGZpbGU7XG4gICAgfVxuICAgIGlmKHN0YXRzID09PSBudWxsKSB7XG4gICAgICBzdGF0cyA9IHsgaXNEaXJlY3Rvcnk6ICgpID0+IGZhbHNlIH07XG4gICAgfVxuXG4gICAgaWYoc3RhdHMuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgaWYoIXNob3VsZFNraXAocmVsYXRpdmUpKSB7XG4gICAgICAgIHlpZWxkIHtyZWxhdGl2ZSwgYWJzb2x1dGUsIHN0YXRzfTtcbiAgICAgICAgeWllbGQqIGV4cGxvcmVXYWxrQXN5bmMoZmlsZW5hbWUsIHBhdGgsIGZvbGxvd1N5bWxpbmtzLCB1c2VTdGF0LCBzaG91bGRTa2lwLCBmYWxzZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHlpZWxkIHtyZWxhdGl2ZSwgYWJzb2x1dGUsIHN0YXRzfTtcbiAgICB9XG4gIH1cbn1cbmFzeW5jIGZ1bmN0aW9uKiBleHBsb3JlKHBhdGgsIGZvbGxvd1N5bWxpbmtzLCB1c2VTdGF0LCBzaG91bGRTa2lwKSB7XG4gIHlpZWxkKiBleHBsb3JlV2Fsa0FzeW5jKCcnLCBwYXRoLCBmb2xsb3dTeW1saW5rcywgdXNlU3RhdCwgc2hvdWxkU2tpcCwgdHJ1ZSk7XG59XG5cblxuZnVuY3Rpb24gcmVhZE9wdGlvbnMob3B0aW9ucykge1xuICByZXR1cm4ge1xuICAgIHBhdHRlcm46IG9wdGlvbnMucGF0dGVybixcbiAgICBkb3Q6ICEhb3B0aW9ucy5kb3QsXG4gICAgbm9nbG9ic3RhcjogISFvcHRpb25zLm5vZ2xvYnN0YXIsXG4gICAgbWF0Y2hCYXNlOiAhIW9wdGlvbnMubWF0Y2hCYXNlLFxuICAgIG5vY2FzZTogISFvcHRpb25zLm5vY2FzZSxcbiAgICBpZ25vcmU6IG9wdGlvbnMuaWdub3JlLFxuICAgIHNraXA6IG9wdGlvbnMuc2tpcCxcblxuICAgIGZvbGxvdzogISFvcHRpb25zLmZvbGxvdyxcbiAgICBzdGF0OiAhIW9wdGlvbnMuc3RhdCxcbiAgICBub2RpcjogISFvcHRpb25zLm5vZGlyLFxuICAgIG1hcms6ICEhb3B0aW9ucy5tYXJrLFxuICAgIHNpbGVudDogISFvcHRpb25zLnNpbGVudCxcbiAgICBhYnNvbHV0ZTogISFvcHRpb25zLmFic29sdXRlXG4gIH07XG59XG5cbmNsYXNzIFJlYWRkaXJHbG9iIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgY29uc3RydWN0b3IoY3dkLCBvcHRpb25zLCBjYikge1xuICAgIHN1cGVyKCk7XG4gICAgaWYodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNiID0gb3B0aW9ucztcbiAgICAgIG9wdGlvbnMgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMub3B0aW9ucyA9IHJlYWRPcHRpb25zKG9wdGlvbnMgfHzCoHt9KTtcbiAgXG4gICAgdGhpcy5tYXRjaGVycyA9IFtdO1xuICAgIGlmKHRoaXMub3B0aW9ucy5wYXR0ZXJuKSB7XG4gICAgICBjb25zdCBtYXRjaGVycyA9IEFycmF5LmlzQXJyYXkodGhpcy5vcHRpb25zLnBhdHRlcm4pID8gdGhpcy5vcHRpb25zLnBhdHRlcm4gOiBbdGhpcy5vcHRpb25zLnBhdHRlcm5dO1xuICAgICAgdGhpcy5tYXRjaGVycyA9IG1hdGNoZXJzLm1hcCggbSA9PlxuICAgICAgICBuZXcgTWluaW1hdGNoKG0sIHtcbiAgICAgICAgICBkb3Q6IHRoaXMub3B0aW9ucy5kb3QsXG4gICAgICAgICAgbm9nbG9ic3Rhcjp0aGlzLm9wdGlvbnMubm9nbG9ic3RhcixcbiAgICAgICAgICBtYXRjaEJhc2U6dGhpcy5vcHRpb25zLm1hdGNoQmFzZSxcbiAgICAgICAgICBub2Nhc2U6dGhpcy5vcHRpb25zLm5vY2FzZVxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gIFxuICAgIHRoaXMuaWdub3JlTWF0Y2hlcnMgPSBbXTtcbiAgICBpZih0aGlzLm9wdGlvbnMuaWdub3JlKSB7XG4gICAgICBjb25zdCBpZ25vcmVQYXR0ZXJucyA9IEFycmF5LmlzQXJyYXkodGhpcy5vcHRpb25zLmlnbm9yZSkgPyB0aGlzLm9wdGlvbnMuaWdub3JlIDogW3RoaXMub3B0aW9ucy5pZ25vcmVdO1xuICAgICAgdGhpcy5pZ25vcmVNYXRjaGVycyA9IGlnbm9yZVBhdHRlcm5zLm1hcCggaWdub3JlID0+XG4gICAgICAgIG5ldyBNaW5pbWF0Y2goaWdub3JlLCB7ZG90OiB0cnVlfSlcbiAgICAgICk7XG4gICAgfVxuICBcbiAgICB0aGlzLnNraXBNYXRjaGVycyA9IFtdO1xuICAgIGlmKHRoaXMub3B0aW9ucy5za2lwKSB7XG4gICAgICBjb25zdCBza2lwUGF0dGVybnMgPSBBcnJheS5pc0FycmF5KHRoaXMub3B0aW9ucy5za2lwKSA/IHRoaXMub3B0aW9ucy5za2lwIDogW3RoaXMub3B0aW9ucy5za2lwXTtcbiAgICAgIHRoaXMuc2tpcE1hdGNoZXJzID0gc2tpcFBhdHRlcm5zLm1hcCggc2tpcCA9PlxuICAgICAgICBuZXcgTWluaW1hdGNoKHNraXAsIHtkb3Q6IHRydWV9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLml0ZXJhdG9yID0gZXhwbG9yZShyZXNvbHZlKGN3ZCB8fCAnLicpLCB0aGlzLm9wdGlvbnMuZm9sbG93LCB0aGlzLm9wdGlvbnMuc3RhdCwgdGhpcy5fc2hvdWxkU2tpcERpcmVjdG9yeS5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLnBhdXNlZCA9IGZhbHNlO1xuICAgIHRoaXMuaW5hY3RpdmUgPSBmYWxzZTtcbiAgICB0aGlzLmFib3J0ZWQgPSBmYWxzZTtcbiAgXG4gICAgaWYoY2IpIHtcbiAgICAgIHRoaXMuX21hdGNoZXMgPSBbXTsgXG4gICAgICB0aGlzLm9uKCdtYXRjaCcsIG1hdGNoID0+IHRoaXMuX21hdGNoZXMucHVzaCh0aGlzLm9wdGlvbnMuYWJzb2x1dGUgPyBtYXRjaC5hYnNvbHV0ZSA6IG1hdGNoLnJlbGF0aXZlKSk7XG4gICAgICB0aGlzLm9uKCdlcnJvcicsIGVyciA9PiBjYihlcnIpKTtcbiAgICAgIHRoaXMub24oJ2VuZCcsICgpID0+IGNiKG51bGwsIHRoaXMuX21hdGNoZXMpKTtcbiAgICB9XG5cbiAgICBzZXRUaW1lb3V0KCAoKSA9PiB0aGlzLl9uZXh0KCksIDApO1xuICB9XG5cbiAgX3Nob3VsZFNraXBEaXJlY3RvcnkocmVsYXRpdmUpIHtcbiAgICAvL2NvbnNvbGUubG9nKHJlbGF0aXZlLCB0aGlzLnNraXBNYXRjaGVycy5zb21lKG0gPT4gbS5tYXRjaChyZWxhdGl2ZSkpKTtcbiAgICByZXR1cm4gdGhpcy5za2lwTWF0Y2hlcnMuc29tZShtID0+IG0ubWF0Y2gocmVsYXRpdmUpKTtcbiAgfVxuXG4gIF9maWxlTWF0Y2hlcyhyZWxhdGl2ZSwgaXNEaXJlY3RvcnkpIHtcbiAgICBjb25zdCBmaWxlID0gcmVsYXRpdmUgKyAoaXNEaXJlY3RvcnkgPyAnLycgOiAnJyk7XG4gICAgcmV0dXJuICh0aGlzLm1hdGNoZXJzLmxlbmd0aCA9PT0gMCB8fCB0aGlzLm1hdGNoZXJzLnNvbWUobSA9PiBtLm1hdGNoKGZpbGUpKSlcbiAgICAgICYmICF0aGlzLmlnbm9yZU1hdGNoZXJzLnNvbWUobSA9PiBtLm1hdGNoKGZpbGUpKVxuICAgICAgJiYgKCF0aGlzLm9wdGlvbnMubm9kaXIgfHwgIWlzRGlyZWN0b3J5KTtcbiAgfVxuXG4gIF9uZXh0KCkge1xuICAgIGlmKCF0aGlzLnBhdXNlZCAmJiAhdGhpcy5hYm9ydGVkKSB7XG4gICAgICB0aGlzLml0ZXJhdG9yLm5leHQoKVxuICAgICAgLnRoZW4oKG9iaik9PiB7XG4gICAgICAgIGlmKCFvYmouZG9uZSkge1xuICAgICAgICAgIGNvbnN0IGlzRGlyZWN0b3J5ID0gb2JqLnZhbHVlLnN0YXRzLmlzRGlyZWN0b3J5KCk7XG4gICAgICAgICAgaWYodGhpcy5fZmlsZU1hdGNoZXMob2JqLnZhbHVlLnJlbGF0aXZlLCBpc0RpcmVjdG9yeSApKSB7XG4gICAgICAgICAgICBsZXQgcmVsYXRpdmUgPSBvYmoudmFsdWUucmVsYXRpdmU7XG4gICAgICAgICAgICBsZXQgYWJzb2x1dGUgPSBvYmoudmFsdWUuYWJzb2x1dGU7XG4gICAgICAgICAgICBpZih0aGlzLm9wdGlvbnMubWFyayAmJiBpc0RpcmVjdG9yeSkge1xuICAgICAgICAgICAgICByZWxhdGl2ZSArPSAnLyc7XG4gICAgICAgICAgICAgIGFic29sdXRlICs9ICcvJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKHRoaXMub3B0aW9ucy5zdGF0KSB7XG4gICAgICAgICAgICAgIHRoaXMuZW1pdCgnbWF0Y2gnLCB7cmVsYXRpdmUsIGFic29sdXRlLCBzdGF0Om9iai52YWx1ZS5zdGF0c30pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5lbWl0KCdtYXRjaCcsIHtyZWxhdGl2ZSwgYWJzb2x1dGV9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5fbmV4dCh0aGlzLml0ZXJhdG9yKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmVtaXQoJ2VuZCcpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgdGhpcy5hYm9ydCgpO1xuICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgICAgICAgaWYoIWVyci5jb2RlICYmICF0aGlzLm9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbmFjdGl2ZSA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgYWJvcnQoKSB7XG4gICAgdGhpcy5hYm9ydGVkID0gdHJ1ZTtcbiAgfVxuXG4gIHBhdXNlKCkge1xuICAgIHRoaXMucGF1c2VkID0gdHJ1ZTtcbiAgfVxuXG4gIHJlc3VtZSgpIHtcbiAgICB0aGlzLnBhdXNlZCA9IGZhbHNlO1xuICAgIGlmKHRoaXMuaW5hY3RpdmUpIHtcbiAgICAgIHRoaXMuaW5hY3RpdmUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX25leHQoKTtcbiAgICB9XG4gIH1cbn1cblxuXG5mdW5jdGlvbiByZWFkZGlyR2xvYihwYXR0ZXJuLCBvcHRpb25zLCBjYikge1xuICByZXR1cm4gbmV3IFJlYWRkaXJHbG9iKHBhdHRlcm4sIG9wdGlvbnMsIGNiKTtcbn1cbnJlYWRkaXJHbG9iLlJlYWRkaXJHbG9iID0gUmVhZGRpckdsb2I7IiwKICAgICIoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IGZhY3RvcnkoZXhwb3J0cykgOlxuICAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJ2V4cG9ydHMnXSwgZmFjdG9yeSkgOlxuICAgIChnbG9iYWwgPSB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWxUaGlzIDogZ2xvYmFsIHx8IHNlbGYsIGZhY3RvcnkoZ2xvYmFsLmFzeW5jID0ge30pKTtcbn0pKHRoaXMsIChmdW5jdGlvbiAoZXhwb3J0cykgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgY29udGludWF0aW9uIGZ1bmN0aW9uIHdpdGggc29tZSBhcmd1bWVudHMgYWxyZWFkeSBhcHBsaWVkLlxuICAgICAqXG4gICAgICogVXNlZnVsIGFzIGEgc2hvcnRoYW5kIHdoZW4gY29tYmluZWQgd2l0aCBvdGhlciBjb250cm9sIGZsb3cgZnVuY3Rpb25zLiBBbnlcbiAgICAgKiBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSByZXR1cm5lZCBmdW5jdGlvbiBhcmUgYWRkZWQgdG8gdGhlIGFyZ3VtZW50c1xuICAgICAqIG9yaWdpbmFsbHkgcGFzc2VkIHRvIGFwcGx5LlxuICAgICAqXG4gICAgICogQG5hbWUgYXBwbHlcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpVdGlsc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIC0gVGhlIGZ1bmN0aW9uIHlvdSB3YW50IHRvIGV2ZW50dWFsbHkgYXBwbHkgYWxsXG4gICAgICogYXJndW1lbnRzIHRvLiBJbnZva2VzIHdpdGggKGFyZ3VtZW50cy4uLikuXG4gICAgICogQHBhcmFtIHsuLi4qfSBhcmd1bWVudHMuLi4gLSBBbnkgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBhdXRvbWF0aWNhbGx5IGFwcGx5XG4gICAgICogd2hlbiB0aGUgY29udGludWF0aW9uIGlzIGNhbGxlZC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IHRoZSBwYXJ0aWFsbHktYXBwbGllZCBmdW5jdGlvblxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyB1c2luZyBhcHBseVxuICAgICAqIGFzeW5jLnBhcmFsbGVsKFtcbiAgICAgKiAgICAgYXN5bmMuYXBwbHkoZnMud3JpdGVGaWxlLCAndGVzdGZpbGUxJywgJ3Rlc3QxJyksXG4gICAgICogICAgIGFzeW5jLmFwcGx5KGZzLndyaXRlRmlsZSwgJ3Rlc3RmaWxlMicsICd0ZXN0MicpXG4gICAgICogXSk7XG4gICAgICpcbiAgICAgKlxuICAgICAqIC8vIHRoZSBzYW1lIHByb2Nlc3Mgd2l0aG91dCB1c2luZyBhcHBseVxuICAgICAqIGFzeW5jLnBhcmFsbGVsKFtcbiAgICAgKiAgICAgZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIGZzLndyaXRlRmlsZSgndGVzdGZpbGUxJywgJ3Rlc3QxJywgY2FsbGJhY2spO1xuICAgICAqICAgICB9LFxuICAgICAqICAgICBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgZnMud3JpdGVGaWxlKCd0ZXN0ZmlsZTInLCAndGVzdDInLCBjYWxsYmFjayk7XG4gICAgICogICAgIH1cbiAgICAgKiBdKTtcbiAgICAgKlxuICAgICAqIC8vIEl0J3MgcG9zc2libGUgdG8gcGFzcyBhbnkgbnVtYmVyIG9mIGFkZGl0aW9uYWwgYXJndW1lbnRzIHdoZW4gY2FsbGluZyB0aGVcbiAgICAgKiAvLyBjb250aW51YXRpb246XG4gICAgICpcbiAgICAgKiBub2RlPiB2YXIgZm4gPSBhc3luYy5hcHBseShzeXMucHV0cywgJ29uZScpO1xuICAgICAqIG5vZGU+IGZuKCd0d28nLCAndGhyZWUnKTtcbiAgICAgKiBvbmVcbiAgICAgKiB0d29cbiAgICAgKiB0aHJlZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGFwcGx5KGZuLCAuLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiAoLi4uY2FsbEFyZ3MpID0+IGZuKC4uLmFyZ3MsLi4uY2FsbEFyZ3MpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluaXRpYWxQYXJhbXMgKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoLi4uYXJncy8qLCBjYWxsYmFjayovKSB7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmNhbGwodGhpcywgYXJncywgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBmaWxlICovXG5cbiAgICB2YXIgaGFzUXVldWVNaWNyb3Rhc2sgPSB0eXBlb2YgcXVldWVNaWNyb3Rhc2sgPT09ICdmdW5jdGlvbicgJiYgcXVldWVNaWNyb3Rhc2s7XG4gICAgdmFyIGhhc1NldEltbWVkaWF0ZSA9IHR5cGVvZiBzZXRJbW1lZGlhdGUgPT09ICdmdW5jdGlvbicgJiYgc2V0SW1tZWRpYXRlO1xuICAgIHZhciBoYXNOZXh0VGljayA9IHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgcHJvY2Vzcy5uZXh0VGljayA9PT0gJ2Z1bmN0aW9uJztcblxuICAgIGZ1bmN0aW9uIGZhbGxiYWNrKGZuKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZm4sIDApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdyYXAoZGVmZXIpIHtcbiAgICAgICAgcmV0dXJuIChmbiwgLi4uYXJncykgPT4gZGVmZXIoKCkgPT4gZm4oLi4uYXJncykpO1xuICAgIH1cblxuICAgIHZhciBfZGVmZXIkMTtcblxuICAgIGlmIChoYXNRdWV1ZU1pY3JvdGFzaykge1xuICAgICAgICBfZGVmZXIkMSA9IHF1ZXVlTWljcm90YXNrO1xuICAgIH0gZWxzZSBpZiAoaGFzU2V0SW1tZWRpYXRlKSB7XG4gICAgICAgIF9kZWZlciQxID0gc2V0SW1tZWRpYXRlO1xuICAgIH0gZWxzZSBpZiAoaGFzTmV4dFRpY2spIHtcbiAgICAgICAgX2RlZmVyJDEgPSBwcm9jZXNzLm5leHRUaWNrO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIF9kZWZlciQxID0gZmFsbGJhY2s7XG4gICAgfVxuXG4gICAgdmFyIHNldEltbWVkaWF0ZSQxID0gd3JhcChfZGVmZXIkMSk7XG5cbiAgICAvKipcbiAgICAgKiBUYWtlIGEgc3luYyBmdW5jdGlvbiBhbmQgbWFrZSBpdCBhc3luYywgcGFzc2luZyBpdHMgcmV0dXJuIHZhbHVlIHRvIGFcbiAgICAgKiBjYWxsYmFjay4gVGhpcyBpcyB1c2VmdWwgZm9yIHBsdWdnaW5nIHN5bmMgZnVuY3Rpb25zIGludG8gYSB3YXRlcmZhbGwsXG4gICAgICogc2VyaWVzLCBvciBvdGhlciBhc3luYyBmdW5jdGlvbnMuIEFueSBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBnZW5lcmF0ZWRcbiAgICAgKiBmdW5jdGlvbiB3aWxsIGJlIHBhc3NlZCB0byB0aGUgd3JhcHBlZCBmdW5jdGlvbiAoZXhjZXB0IGZvciB0aGUgZmluYWxcbiAgICAgKiBjYWxsYmFjayBhcmd1bWVudCkuIEVycm9ycyB0aHJvd24gd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrLlxuICAgICAqXG4gICAgICogSWYgdGhlIGZ1bmN0aW9uIHBhc3NlZCB0byBgYXN5bmNpZnlgIHJldHVybnMgYSBQcm9taXNlLCB0aGF0IHByb21pc2VzJ3NcbiAgICAgKiByZXNvbHZlZC9yZWplY3RlZCBzdGF0ZSB3aWxsIGJlIHVzZWQgdG8gY2FsbCB0aGUgY2FsbGJhY2ssIHJhdGhlciB0aGFuIHNpbXBseVxuICAgICAqIHRoZSBzeW5jaHJvbm91cyByZXR1cm4gdmFsdWUuXG4gICAgICpcbiAgICAgKiBUaGlzIGFsc28gbWVhbnMgeW91IGNhbiBhc3luY2lmeSBFUzIwMTcgYGFzeW5jYCBmdW5jdGlvbnMuXG4gICAgICpcbiAgICAgKiBAbmFtZSBhc3luY2lmeVxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOlV0aWxzXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBhbGlhcyB3cmFwU3luY1xuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyAtIFRoZSBzeW5jaHJvbm91cyBmdW5jdGlvbiwgb3IgUHJvbWlzZS1yZXR1cm5pbmdcbiAgICAgKiBmdW5jdGlvbiB0byBjb252ZXJ0IHRvIGFuIHtAbGluayBBc3luY0Z1bmN0aW9ufS5cbiAgICAgKiBAcmV0dXJucyB7QXN5bmNGdW5jdGlvbn0gQW4gYXN5bmNocm9ub3VzIHdyYXBwZXIgb2YgdGhlIGBmdW5jYC4gVG8gYmVcbiAgICAgKiBpbnZva2VkIHdpdGggYChhcmdzLi4uLCBjYWxsYmFjaylgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBwYXNzaW5nIGEgcmVndWxhciBzeW5jaHJvbm91cyBmdW5jdGlvblxuICAgICAqIGFzeW5jLndhdGVyZmFsbChbXG4gICAgICogICAgIGFzeW5jLmFwcGx5KGZzLnJlYWRGaWxlLCBmaWxlbmFtZSwgXCJ1dGY4XCIpLFxuICAgICAqICAgICBhc3luYy5hc3luY2lmeShKU09OLnBhcnNlKSxcbiAgICAgKiAgICAgZnVuY3Rpb24gKGRhdGEsIG5leHQpIHtcbiAgICAgKiAgICAgICAgIC8vIGRhdGEgaXMgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIHRoZSB0ZXh0LlxuICAgICAqICAgICAgICAgLy8gSWYgdGhlcmUgd2FzIGEgcGFyc2luZyBlcnJvciwgaXQgd291bGQgaGF2ZSBiZWVuIGNhdWdodC5cbiAgICAgKiAgICAgfVxuICAgICAqIF0sIGNhbGxiYWNrKTtcbiAgICAgKlxuICAgICAqIC8vIHBhc3NpbmcgYSBmdW5jdGlvbiByZXR1cm5pbmcgYSBwcm9taXNlXG4gICAgICogYXN5bmMud2F0ZXJmYWxsKFtcbiAgICAgKiAgICAgYXN5bmMuYXBwbHkoZnMucmVhZEZpbGUsIGZpbGVuYW1lLCBcInV0ZjhcIiksXG4gICAgICogICAgIGFzeW5jLmFzeW5jaWZ5KGZ1bmN0aW9uIChjb250ZW50cykge1xuICAgICAqICAgICAgICAgcmV0dXJuIGRiLm1vZGVsLmNyZWF0ZShjb250ZW50cyk7XG4gICAgICogICAgIH0pLFxuICAgICAqICAgICBmdW5jdGlvbiAobW9kZWwsIG5leHQpIHtcbiAgICAgKiAgICAgICAgIC8vIGBtb2RlbGAgaXMgdGhlIGluc3RhbnRpYXRlZCBtb2RlbCBvYmplY3QuXG4gICAgICogICAgICAgICAvLyBJZiB0aGVyZSB3YXMgYW4gZXJyb3IsIHRoaXMgZnVuY3Rpb24gd291bGQgYmUgc2tpcHBlZC5cbiAgICAgKiAgICAgfVxuICAgICAqIF0sIGNhbGxiYWNrKTtcbiAgICAgKlxuICAgICAqIC8vIGVzMjAxNyBleGFtcGxlLCB0aG91Z2ggYGFzeW5jaWZ5YCBpcyBub3QgbmVlZGVkIGlmIHlvdXIgSlMgZW52aXJvbm1lbnRcbiAgICAgKiAvLyBzdXBwb3J0cyBhc3luYyBmdW5jdGlvbnMgb3V0IG9mIHRoZSBib3hcbiAgICAgKiB2YXIgcSA9IGFzeW5jLnF1ZXVlKGFzeW5jLmFzeW5jaWZ5KGFzeW5jIGZ1bmN0aW9uKGZpbGUpIHtcbiAgICAgKiAgICAgdmFyIGludGVybWVkaWF0ZVN0ZXAgPSBhd2FpdCBwcm9jZXNzRmlsZShmaWxlKTtcbiAgICAgKiAgICAgcmV0dXJuIGF3YWl0IHNvbWVQcm9taXNlKGludGVybWVkaWF0ZVN0ZXApXG4gICAgICogfSkpO1xuICAgICAqXG4gICAgICogcS5wdXNoKGZpbGVzKTtcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBhc3luY2lmeShmdW5jKSB7XG4gICAgICAgIGlmIChpc0FzeW5jKGZ1bmMpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3MvKiwgY2FsbGJhY2sqLykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9taXNlID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlUHJvbWlzZShwcm9taXNlLCBjYWxsYmFjaylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpbml0aWFsUGFyYW1zKGZ1bmN0aW9uIChhcmdzLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgdmFyIHJlc3VsdDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBpZiByZXN1bHQgaXMgUHJvbWlzZSBvYmplY3RcbiAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgdHlwZW9mIHJlc3VsdC50aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVByb21pc2UocmVzdWx0LCBjYWxsYmFjaylcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFuZGxlUHJvbWlzZShwcm9taXNlLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gcHJvbWlzZS50aGVuKHZhbHVlID0+IHtcbiAgICAgICAgICAgIGludm9rZUNhbGxiYWNrKGNhbGxiYWNrLCBudWxsLCB2YWx1ZSk7XG4gICAgICAgIH0sIGVyciA9PiB7XG4gICAgICAgICAgICBpbnZva2VDYWxsYmFjayhjYWxsYmFjaywgZXJyICYmIChlcnIgaW5zdGFuY2VvZiBFcnJvciB8fCBlcnIubWVzc2FnZSkgPyBlcnIgOiBuZXcgRXJyb3IoZXJyKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGludm9rZUNhbGxiYWNrKGNhbGxiYWNrLCBlcnJvciwgdmFsdWUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVycm9yLCB2YWx1ZSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgc2V0SW1tZWRpYXRlJDEoZSA9PiB7IHRocm93IGUgfSwgZXJyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQXN5bmMoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZuW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdBc3luY0Z1bmN0aW9uJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0FzeW5jR2VuZXJhdG9yKGZuKSB7XG4gICAgICAgIHJldHVybiBmbltTeW1ib2wudG9TdHJpbmdUYWddID09PSAnQXN5bmNHZW5lcmF0b3InO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQXN5bmNJdGVyYWJsZShvYmopIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBvYmpbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID09PSAnZnVuY3Rpb24nO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdyYXBBc3luYyhhc3luY0ZuKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYXN5bmNGbiAhPT0gJ2Z1bmN0aW9uJykgdGhyb3cgbmV3IEVycm9yKCdleHBlY3RlZCBhIGZ1bmN0aW9uJylcbiAgICAgICAgcmV0dXJuIGlzQXN5bmMoYXN5bmNGbikgPyBhc3luY2lmeShhc3luY0ZuKSA6IGFzeW5jRm47XG4gICAgfVxuXG4gICAgLy8gY29uZGl0aW9uYWxseSBwcm9taXNpZnkgYSBmdW5jdGlvbi5cbiAgICAvLyBvbmx5IHJldHVybiBhIHByb21pc2UgaWYgYSBjYWxsYmFjayBpcyBvbWl0dGVkXG4gICAgZnVuY3Rpb24gYXdhaXRpZnkgKGFzeW5jRm4sIGFyaXR5KSB7XG4gICAgICAgIGlmICghYXJpdHkpIGFyaXR5ID0gYXN5bmNGbi5sZW5ndGg7XG4gICAgICAgIGlmICghYXJpdHkpIHRocm93IG5ldyBFcnJvcignYXJpdHkgaXMgdW5kZWZpbmVkJylcbiAgICAgICAgZnVuY3Rpb24gYXdhaXRhYmxlICguLi5hcmdzKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGFyZ3NbYXJpdHkgLSAxXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBhc3luY0ZuLmFwcGx5KHRoaXMsIGFyZ3MpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgYXJnc1thcml0eSAtIDFdID0gKGVyciwgLi4uY2JBcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiByZWplY3QoZXJyKVxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGNiQXJncy5sZW5ndGggPiAxID8gY2JBcmdzIDogY2JBcmdzWzBdKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGFzeW5jRm4uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGF3YWl0YWJsZVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFwcGx5RWFjaCQxIChlYWNoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGFwcGx5RWFjaChmbnMsIC4uLmNhbGxBcmdzKSB7XG4gICAgICAgICAgICBjb25zdCBnbyA9IGF3YWl0aWZ5KGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgICAgICByZXR1cm4gZWFjaGZuKGZucywgKGZuLCBjYikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB3cmFwQXN5bmMoZm4pLmFwcGx5KHRoYXQsIGNhbGxBcmdzLmNvbmNhdChjYikpO1xuICAgICAgICAgICAgICAgIH0sIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGdvO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9hc3luY01hcChlYWNoZm4sIGFyciwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFyciA9IGFyciB8fCBbXTtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgICAgICB2YXIgX2l0ZXJhdGVlID0gd3JhcEFzeW5jKGl0ZXJhdGVlKTtcblxuICAgICAgICByZXR1cm4gZWFjaGZuKGFyciwgKHZhbHVlLCBfLCBpdGVyQ2IpID0+IHtcbiAgICAgICAgICAgIHZhciBpbmRleCA9IGNvdW50ZXIrKztcbiAgICAgICAgICAgIF9pdGVyYXRlZSh2YWx1ZSwgKGVyciwgdikgPT4ge1xuICAgICAgICAgICAgICAgIHJlc3VsdHNbaW5kZXhdID0gdjtcbiAgICAgICAgICAgICAgICBpdGVyQ2IoZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBlcnIgPT4ge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNBcnJheUxpa2UodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlICYmXG4gICAgICAgICAgICB0eXBlb2YgdmFsdWUubGVuZ3RoID09PSAnbnVtYmVyJyAmJlxuICAgICAgICAgICAgdmFsdWUubGVuZ3RoID49IDAgJiZcbiAgICAgICAgICAgIHZhbHVlLmxlbmd0aCAlIDEgPT09IDA7XG4gICAgfVxuXG4gICAgLy8gQSB0ZW1wb3JhcnkgdmFsdWUgdXNlZCB0byBpZGVudGlmeSBpZiB0aGUgbG9vcCBzaG91bGQgYmUgYnJva2VuLlxuICAgIC8vIFNlZSAjMTA2NCwgIzEyOTNcbiAgICBjb25zdCBicmVha0xvb3AgPSB7fTtcblxuICAgIGZ1bmN0aW9uIG9uY2UoZm4pIHtcbiAgICAgICAgZnVuY3Rpb24gd3JhcHBlciAoLi4uYXJncykge1xuICAgICAgICAgICAgaWYgKGZuID09PSBudWxsKSByZXR1cm47XG4gICAgICAgICAgICB2YXIgY2FsbEZuID0gZm47XG4gICAgICAgICAgICBmbiA9IG51bGw7XG4gICAgICAgICAgICBjYWxsRm4uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih3cmFwcGVyLCBmbik7XG4gICAgICAgIHJldHVybiB3cmFwcGVyXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0SXRlcmF0b3IgKGNvbGwpIHtcbiAgICAgICAgcmV0dXJuIGNvbGxbU3ltYm9sLml0ZXJhdG9yXSAmJiBjb2xsW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVBcnJheUl0ZXJhdG9yKGNvbGwpIHtcbiAgICAgICAgdmFyIGkgPSAtMTtcbiAgICAgICAgdmFyIGxlbiA9IGNvbGwubGVuZ3RoO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICAgIHJldHVybiArK2kgPCBsZW4gPyB7dmFsdWU6IGNvbGxbaV0sIGtleTogaX0gOiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlRVMyMDE1SXRlcmF0b3IoaXRlcmF0b3IpIHtcbiAgICAgICAgdmFyIGkgPSAtMTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgICB2YXIgaXRlbSA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgICAgIGlmIChpdGVtLmRvbmUpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBpKys7XG4gICAgICAgICAgICByZXR1cm4ge3ZhbHVlOiBpdGVtLnZhbHVlLCBrZXk6IGl9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlT2JqZWN0SXRlcmF0b3Iob2JqKSB7XG4gICAgICAgIHZhciBva2V5cyA9IG9iaiA/IE9iamVjdC5rZXlzKG9iaikgOiBbXTtcbiAgICAgICAgdmFyIGkgPSAtMTtcbiAgICAgICAgdmFyIGxlbiA9IG9rZXlzLmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgICB2YXIga2V5ID0gb2tleXNbKytpXTtcbiAgICAgICAgICAgIGlmIChrZXkgPT09ICdfX3Byb3RvX18nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBpIDwgbGVuID8ge3ZhbHVlOiBvYmpba2V5XSwga2V5fSA6IG51bGw7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlSXRlcmF0b3IoY29sbCkge1xuICAgICAgICBpZiAoaXNBcnJheUxpa2UoY29sbCkpIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVBcnJheUl0ZXJhdG9yKGNvbGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGl0ZXJhdG9yID0gZ2V0SXRlcmF0b3IoY29sbCk7XG4gICAgICAgIHJldHVybiBpdGVyYXRvciA/IGNyZWF0ZUVTMjAxNUl0ZXJhdG9yKGl0ZXJhdG9yKSA6IGNyZWF0ZU9iamVjdEl0ZXJhdG9yKGNvbGwpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9ubHlPbmNlKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgICAgICAgICAgaWYgKGZuID09PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoXCJDYWxsYmFjayB3YXMgYWxyZWFkeSBjYWxsZWQuXCIpO1xuICAgICAgICAgICAgdmFyIGNhbGxGbiA9IGZuO1xuICAgICAgICAgICAgZm4gPSBudWxsO1xuICAgICAgICAgICAgY2FsbEZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIGZvciBhc3luYyBnZW5lcmF0b3JzXG4gICAgZnVuY3Rpb24gYXN5bmNFYWNoT2ZMaW1pdChnZW5lcmF0b3IsIGxpbWl0LCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgbGV0IGRvbmUgPSBmYWxzZTtcbiAgICAgICAgbGV0IGNhbmNlbGVkID0gZmFsc2U7XG4gICAgICAgIGxldCBhd2FpdGluZyA9IGZhbHNlO1xuICAgICAgICBsZXQgcnVubmluZyA9IDA7XG4gICAgICAgIGxldCBpZHggPSAwO1xuXG4gICAgICAgIGZ1bmN0aW9uIHJlcGxlbmlzaCgpIHtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ3JlcGxlbmlzaCcpXG4gICAgICAgICAgICBpZiAocnVubmluZyA+PSBsaW1pdCB8fCBhd2FpdGluZyB8fCBkb25lKSByZXR1cm5cbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ3JlcGxlbmlzaCBhd2FpdGluZycpXG4gICAgICAgICAgICBhd2FpdGluZyA9IHRydWU7XG4gICAgICAgICAgICBnZW5lcmF0b3IubmV4dCgpLnRoZW4oKHt2YWx1ZSwgZG9uZTogaXRlckRvbmV9KSA9PiB7XG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnZ290IHZhbHVlJywgdmFsdWUpXG4gICAgICAgICAgICAgICAgaWYgKGNhbmNlbGVkIHx8IGRvbmUpIHJldHVyblxuICAgICAgICAgICAgICAgIGF3YWl0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZXJEb25lKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAocnVubmluZyA8PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdkb25lIG5leHRDYicpXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJ1bm5pbmcrKztcbiAgICAgICAgICAgICAgICBpdGVyYXRlZSh2YWx1ZSwgaWR4LCBpdGVyYXRlZUNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICBpZHgrKztcbiAgICAgICAgICAgICAgICByZXBsZW5pc2goKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGhhbmRsZUVycm9yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGl0ZXJhdGVlQ2FsbGJhY2soZXJyLCByZXN1bHQpIHtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ2l0ZXJhdGVlQ2FsbGJhY2snKVxuICAgICAgICAgICAgcnVubmluZyAtPSAxO1xuICAgICAgICAgICAgaWYgKGNhbmNlbGVkKSByZXR1cm5cbiAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBoYW5kbGVFcnJvcihlcnIpXG5cbiAgICAgICAgICAgIGlmIChlcnIgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgY2FuY2VsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVzdWx0ID09PSBicmVha0xvb3AgfHwgKGRvbmUgJiYgcnVubmluZyA8PSAwKSkge1xuICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ2RvbmUgaXRlckNiJylcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXBsZW5pc2goKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGhhbmRsZUVycm9yKGVycikge1xuICAgICAgICAgICAgaWYgKGNhbmNlbGVkKSByZXR1cm5cbiAgICAgICAgICAgIGF3YWl0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgIH1cblxuICAgICAgICByZXBsZW5pc2goKTtcbiAgICB9XG5cbiAgICB2YXIgZWFjaE9mTGltaXQkMiA9IChsaW1pdCkgPT4ge1xuICAgICAgICByZXR1cm4gKG9iaiwgaXRlcmF0ZWUsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IG9uY2UoY2FsbGJhY2spO1xuICAgICAgICAgICAgaWYgKGxpbWl0IDw9IDApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignY29uY3VycmVuY3kgbGltaXQgY2Fubm90IGJlIGxlc3MgdGhhbiAxJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghb2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzQXN5bmNHZW5lcmF0b3Iob2JqKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhc3luY0VhY2hPZkxpbWl0KG9iaiwgbGltaXQsIGl0ZXJhdGVlLCBjYWxsYmFjaylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc0FzeW5jSXRlcmFibGUob2JqKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhc3luY0VhY2hPZkxpbWl0KG9ialtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSwgbGltaXQsIGl0ZXJhdGVlLCBjYWxsYmFjaylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBuZXh0RWxlbSA9IGNyZWF0ZUl0ZXJhdG9yKG9iaik7XG4gICAgICAgICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgdmFyIGNhbmNlbGVkID0gZmFsc2U7XG4gICAgICAgICAgICB2YXIgcnVubmluZyA9IDA7XG4gICAgICAgICAgICB2YXIgbG9vcGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICBmdW5jdGlvbiBpdGVyYXRlZUNhbGxiYWNrKGVyciwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2FuY2VsZWQpIHJldHVyblxuICAgICAgICAgICAgICAgIHJ1bm5pbmcgLT0gMTtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChlcnIgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBjYW5jZWxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlID09PSBicmVha0xvb3AgfHwgKGRvbmUgJiYgcnVubmluZyA8PSAwKSkge1xuICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICghbG9vcGluZykge1xuICAgICAgICAgICAgICAgICAgICByZXBsZW5pc2goKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIHJlcGxlbmlzaCAoKSB7XG4gICAgICAgICAgICAgICAgbG9vcGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgd2hpbGUgKHJ1bm5pbmcgPCBsaW1pdCAmJiAhZG9uZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZWxlbSA9IG5leHRFbGVtKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlbGVtID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChydW5uaW5nIDw9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBydW5uaW5nICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGl0ZXJhdGVlKGVsZW0udmFsdWUsIGVsZW0ua2V5LCBvbmx5T25jZShpdGVyYXRlZUNhbGxiYWNrKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxvb3BpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVwbGVuaXNoKCk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzYW1lIGFzIFtgZWFjaE9mYF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmVhY2hPZn0gYnV0IHJ1bnMgYSBtYXhpbXVtIG9mIGBsaW1pdGAgYXN5bmMgb3BlcmF0aW9ucyBhdCBhXG4gICAgICogdGltZS5cbiAgICAgKlxuICAgICAqIEBuYW1lIGVhY2hPZkxpbWl0XG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMuZWFjaE9mXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZWFjaE9mfVxuICAgICAqIEBhbGlhcyBmb3JFYWNoT2ZMaW1pdFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbWl0IC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGFzeW5jIG9wZXJhdGlvbnMgYXQgYSB0aW1lLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBbiBhc3luYyBmdW5jdGlvbiB0byBhcHBseSB0byBlYWNoXG4gICAgICogaXRlbSBpbiBgY29sbGAuIFRoZSBga2V5YCBpcyB0aGUgaXRlbSdzIGtleSwgb3IgaW5kZXggaW4gdGhlIGNhc2Ugb2YgYW5cbiAgICAgKiBhcnJheS5cbiAgICAgKiBJbnZva2VkIHdpdGggKGl0ZW0sIGtleSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCB3aGVuIGFsbFxuICAgICAqIGBpdGVyYXRlZWAgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQsIG9yIGFuIGVycm9yIG9jY3Vycy4gSW52b2tlZCB3aXRoIChlcnIpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIGEgY2FsbGJhY2sgaXMgb21pdHRlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGVhY2hPZkxpbWl0KGNvbGwsIGxpbWl0LCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGVhY2hPZkxpbWl0JDIobGltaXQpKGNvbGwsIHdyYXBBc3luYyhpdGVyYXRlZSksIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICB2YXIgZWFjaE9mTGltaXQkMSA9IGF3YWl0aWZ5KGVhY2hPZkxpbWl0LCA0KTtcblxuICAgIC8vIGVhY2hPZiBpbXBsZW1lbnRhdGlvbiBvcHRpbWl6ZWQgZm9yIGFycmF5LWxpa2VzXG4gICAgZnVuY3Rpb24gZWFjaE9mQXJyYXlMaWtlKGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IG9uY2UoY2FsbGJhY2spO1xuICAgICAgICB2YXIgaW5kZXggPSAwLFxuICAgICAgICAgICAgY29tcGxldGVkID0gMCxcbiAgICAgICAgICAgIHtsZW5ndGh9ID0gY29sbCxcbiAgICAgICAgICAgIGNhbmNlbGVkID0gZmFsc2U7XG4gICAgICAgIGlmIChsZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gaXRlcmF0b3JDYWxsYmFjayhlcnIsIHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoZXJyID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIGNhbmNlbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjYW5jZWxlZCA9PT0gdHJ1ZSkgcmV0dXJuXG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoKCsrY29tcGxldGVkID09PSBsZW5ndGgpIHx8IHZhbHVlID09PSBicmVha0xvb3ApIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgaXRlcmF0ZWUoY29sbFtpbmRleF0sIGluZGV4LCBvbmx5T25jZShpdGVyYXRvckNhbGxiYWNrKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBhIGdlbmVyaWMgdmVyc2lvbiBvZiBlYWNoT2Ygd2hpY2ggY2FuIGhhbmRsZSBhcnJheSwgb2JqZWN0LCBhbmQgaXRlcmF0b3IgY2FzZXMuXG4gICAgZnVuY3Rpb24gZWFjaE9mR2VuZXJpYyAoY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBlYWNoT2ZMaW1pdCQxKGNvbGwsIEluZmluaXR5LCBpdGVyYXRlZSwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExpa2UgW2BlYWNoYF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmVhY2h9LCBleGNlcHQgdGhhdCBpdCBwYXNzZXMgdGhlIGtleSAob3IgaW5kZXgpIGFzIHRoZSBzZWNvbmQgYXJndW1lbnRcbiAgICAgKiB0byB0aGUgaXRlcmF0ZWUuXG4gICAgICpcbiAgICAgKiBAbmFtZSBlYWNoT2ZcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAYWxpYXMgZm9yRWFjaE9mXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAc2VlIFthc3luYy5lYWNoXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZWFjaH1cbiAgICAgKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfEFzeW5jSXRlcmFibGV8T2JqZWN0fSBjb2xsIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQSBmdW5jdGlvbiB0byBhcHBseSB0byBlYWNoXG4gICAgICogaXRlbSBpbiBgY29sbGAuXG4gICAgICogVGhlIGBrZXlgIGlzIHRoZSBpdGVtJ3Mga2V5LCBvciBpbmRleCBpbiB0aGUgY2FzZSBvZiBhbiBhcnJheS5cbiAgICAgKiBJbnZva2VkIHdpdGggKGl0ZW0sIGtleSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCB3aGVuIGFsbFxuICAgICAqIGBpdGVyYXRlZWAgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQsIG9yIGFuIGVycm9yIG9jY3Vycy4gSW52b2tlZCB3aXRoIChlcnIpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIGEgY2FsbGJhY2sgaXMgb21pdHRlZFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBkZXYuanNvbiBpcyBhIGZpbGUgY29udGFpbmluZyBhIHZhbGlkIGpzb24gb2JqZWN0IGNvbmZpZyBmb3IgZGV2IGVudmlyb25tZW50XG4gICAgICogLy8gZGV2Lmpzb24gaXMgYSBmaWxlIGNvbnRhaW5pbmcgYSB2YWxpZCBqc29uIG9iamVjdCBjb25maWcgZm9yIHRlc3QgZW52aXJvbm1lbnRcbiAgICAgKiAvLyBwcm9kLmpzb24gaXMgYSBmaWxlIGNvbnRhaW5pbmcgYSB2YWxpZCBqc29uIG9iamVjdCBjb25maWcgZm9yIHByb2QgZW52aXJvbm1lbnRcbiAgICAgKiAvLyBpbnZhbGlkLmpzb24gaXMgYSBmaWxlIHdpdGggYSBtYWxmb3JtZWQganNvbiBvYmplY3RcbiAgICAgKlxuICAgICAqIGxldCBjb25maWdzID0ge307IC8vZ2xvYmFsIHZhcmlhYmxlXG4gICAgICogbGV0IHZhbGlkQ29uZmlnRmlsZU1hcCA9IHtkZXY6ICdkZXYuanNvbicsIHRlc3Q6ICd0ZXN0Lmpzb24nLCBwcm9kOiAncHJvZC5qc29uJ307XG4gICAgICogbGV0IGludmFsaWRDb25maWdGaWxlTWFwID0ge2RldjogJ2Rldi5qc29uJywgdGVzdDogJ3Rlc3QuanNvbicsIGludmFsaWQ6ICdpbnZhbGlkLmpzb24nfTtcbiAgICAgKlxuICAgICAqIC8vIGFzeW5jaHJvbm91cyBmdW5jdGlvbiB0aGF0IHJlYWRzIGEganNvbiBmaWxlIGFuZCBwYXJzZXMgdGhlIGNvbnRlbnRzIGFzIGpzb24gb2JqZWN0XG4gICAgICogZnVuY3Rpb24gcGFyc2VGaWxlKGZpbGUsIGtleSwgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgZnMucmVhZEZpbGUoZmlsZSwgXCJ1dGY4XCIsIGZ1bmN0aW9uKGVyciwgZGF0YSkge1xuICAgICAqICAgICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGJhY2soZXJyKTtcbiAgICAgKiAgICAgICAgIHRyeSB7XG4gICAgICogICAgICAgICAgICAgY29uZmlnc1trZXldID0gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgKiAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgKiAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZSk7XG4gICAgICogICAgICAgICB9XG4gICAgICogICAgICAgICBjYWxsYmFjaygpO1xuICAgICAqICAgICB9KTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBjYWxsYmFja3NcbiAgICAgKiBhc3luYy5mb3JFYWNoT2YodmFsaWRDb25maWdGaWxlTWFwLCBwYXJzZUZpbGUsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgKiAgICAgaWYgKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAqICAgICB9IGVsc2Uge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coY29uZmlncyk7XG4gICAgICogICAgICAgICAvLyBjb25maWdzIGlzIG5vdyBhIG1hcCBvZiBKU09OIGRhdGEsIGUuZy5cbiAgICAgKiAgICAgICAgIC8vIHsgZGV2OiAvL3BhcnNlZCBkZXYuanNvbiwgdGVzdDogLy9wYXJzZWQgdGVzdC5qc29uLCBwcm9kOiAvL3BhcnNlZCBwcm9kLmpzb259XG4gICAgICogICAgIH1cbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vRXJyb3IgaGFuZGluZ1xuICAgICAqIGFzeW5jLmZvckVhY2hPZihpbnZhbGlkQ29uZmlnRmlsZU1hcCwgcGFyc2VGaWxlLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICogICAgIGlmIChlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgKiAgICAgICAgIC8vIEpTT04gcGFyc2UgZXJyb3IgZXhjZXB0aW9uXG4gICAgICogICAgIH0gZWxzZSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhjb25maWdzKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgUHJvbWlzZXNcbiAgICAgKiBhc3luYy5mb3JFYWNoT2YodmFsaWRDb25maWdGaWxlTWFwLCBwYXJzZUZpbGUpXG4gICAgICogLnRoZW4oICgpID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coY29uZmlncyk7XG4gICAgICogICAgIC8vIGNvbmZpZ3MgaXMgbm93IGEgbWFwIG9mIEpTT04gZGF0YSwgZS5nLlxuICAgICAqICAgICAvLyB7IGRldjogLy9wYXJzZWQgZGV2Lmpzb24sIHRlc3Q6IC8vcGFyc2VkIHRlc3QuanNvbiwgcHJvZDogLy9wYXJzZWQgcHJvZC5qc29ufVxuICAgICAqIH0pLmNhdGNoKCBlcnIgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvL0Vycm9yIGhhbmRpbmdcbiAgICAgKiBhc3luYy5mb3JFYWNoT2YoaW52YWxpZENvbmZpZ0ZpbGVNYXAsIHBhcnNlRmlsZSlcbiAgICAgKiAudGhlbiggKCkgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhjb25maWdzKTtcbiAgICAgKiB9KS5jYXRjaCggZXJyID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAqICAgICAvLyBKU09OIHBhcnNlIGVycm9yIGV4Y2VwdGlvblxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgYXN5bmMvYXdhaXRcbiAgICAgKiBhc3luYyAoKSA9PiB7XG4gICAgICogICAgIHRyeSB7XG4gICAgICogICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgYXN5bmMuZm9yRWFjaE9mKHZhbGlkQ29uZmlnRmlsZU1hcCwgcGFyc2VGaWxlKTtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGNvbmZpZ3MpO1xuICAgICAqICAgICAgICAgLy8gY29uZmlncyBpcyBub3cgYSBtYXAgb2YgSlNPTiBkYXRhLCBlLmcuXG4gICAgICogICAgICAgICAvLyB7IGRldjogLy9wYXJzZWQgZGV2Lmpzb24sIHRlc3Q6IC8vcGFyc2VkIHRlc3QuanNvbiwgcHJvZDogLy9wYXJzZWQgcHJvZC5qc29ufVxuICAgICAqICAgICB9XG4gICAgICogICAgIGNhdGNoIChlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgIH1cbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvL0Vycm9yIGhhbmRpbmdcbiAgICAgKiBhc3luYyAoKSA9PiB7XG4gICAgICogICAgIHRyeSB7XG4gICAgICogICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgYXN5bmMuZm9yRWFjaE9mKGludmFsaWRDb25maWdGaWxlTWFwLCBwYXJzZUZpbGUpO1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coY29uZmlncyk7XG4gICAgICogICAgIH1cbiAgICAgKiAgICAgY2F0Y2ggKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgICAgIC8vIEpTT04gcGFyc2UgZXJyb3IgZXhjZXB0aW9uXG4gICAgICogICAgIH1cbiAgICAgKiB9XG4gICAgICpcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBlYWNoT2YoY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBlYWNoT2ZJbXBsZW1lbnRhdGlvbiA9IGlzQXJyYXlMaWtlKGNvbGwpID8gZWFjaE9mQXJyYXlMaWtlIDogZWFjaE9mR2VuZXJpYztcbiAgICAgICAgcmV0dXJuIGVhY2hPZkltcGxlbWVudGF0aW9uKGNvbGwsIHdyYXBBc3luYyhpdGVyYXRlZSksIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICB2YXIgZWFjaE9mJDEgPSBhd2FpdGlmeShlYWNoT2YsIDMpO1xuXG4gICAgLyoqXG4gICAgICogUHJvZHVjZXMgYSBuZXcgY29sbGVjdGlvbiBvZiB2YWx1ZXMgYnkgbWFwcGluZyBlYWNoIHZhbHVlIGluIGBjb2xsYCB0aHJvdWdoXG4gICAgICogdGhlIGBpdGVyYXRlZWAgZnVuY3Rpb24uIFRoZSBgaXRlcmF0ZWVgIGlzIGNhbGxlZCB3aXRoIGFuIGl0ZW0gZnJvbSBgY29sbGBcbiAgICAgKiBhbmQgYSBjYWxsYmFjayBmb3Igd2hlbiBpdCBoYXMgZmluaXNoZWQgcHJvY2Vzc2luZy4gRWFjaCBvZiB0aGVzZSBjYWxsYmFja3NcbiAgICAgKiB0YWtlcyAyIGFyZ3VtZW50czogYW4gYGVycm9yYCwgYW5kIHRoZSB0cmFuc2Zvcm1lZCBpdGVtIGZyb20gYGNvbGxgLiBJZlxuICAgICAqIGBpdGVyYXRlZWAgcGFzc2VzIGFuIGVycm9yIHRvIGl0cyBjYWxsYmFjaywgdGhlIG1haW4gYGNhbGxiYWNrYCAoZm9yIHRoZVxuICAgICAqIGBtYXBgIGZ1bmN0aW9uKSBpcyBpbW1lZGlhdGVseSBjYWxsZWQgd2l0aCB0aGUgZXJyb3IuXG4gICAgICpcbiAgICAgKiBOb3RlLCB0aGF0IHNpbmNlIHRoaXMgZnVuY3Rpb24gYXBwbGllcyB0aGUgYGl0ZXJhdGVlYCB0byBlYWNoIGl0ZW0gaW5cbiAgICAgKiBwYXJhbGxlbCwgdGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgdGhlIGBpdGVyYXRlZWAgZnVuY3Rpb25zIHdpbGwgY29tcGxldGVcbiAgICAgKiBpbiBvcmRlci4gSG93ZXZlciwgdGhlIHJlc3VsdHMgYXJyYXkgd2lsbCBiZSBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGVcbiAgICAgKiBvcmlnaW5hbCBgY29sbGAuXG4gICAgICpcbiAgICAgKiBJZiBgbWFwYCBpcyBwYXNzZWQgYW4gT2JqZWN0LCB0aGUgcmVzdWx0cyB3aWxsIGJlIGFuIEFycmF5LiAgVGhlIHJlc3VsdHNcbiAgICAgKiB3aWxsIHJvdWdobHkgYmUgaW4gdGhlIG9yZGVyIG9mIHRoZSBvcmlnaW5hbCBPYmplY3RzJyBrZXlzIChidXQgdGhpcyBjYW5cbiAgICAgKiB2YXJ5IGFjcm9zcyBKYXZhU2NyaXB0IGVuZ2luZXMpLlxuICAgICAqXG4gICAgICogQG5hbWUgbWFwXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfEFzeW5jSXRlcmFibGV8T2JqZWN0fSBjb2xsIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQW4gYXN5bmMgZnVuY3Rpb24gdG8gYXBwbHkgdG8gZWFjaCBpdGVtIGluXG4gICAgICogYGNvbGxgLlxuICAgICAqIFRoZSBpdGVyYXRlZSBzaG91bGQgY29tcGxldGUgd2l0aCB0aGUgdHJhbnNmb3JtZWQgaXRlbS5cbiAgICAgKiBJbnZva2VkIHdpdGggKGl0ZW0sIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgd2hlbiBhbGwgYGl0ZXJhdGVlYFxuICAgICAqIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLCBvciBhbiBlcnJvciBvY2N1cnMuIFJlc3VsdHMgaXMgYW4gQXJyYXkgb2YgdGhlXG4gICAgICogdHJhbnNmb3JtZWQgaXRlbXMgZnJvbSB0aGUgYGNvbGxgLiBJbnZva2VkIHdpdGggKGVyciwgcmVzdWx0cykuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgaXMgcGFzc2VkXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vIGZpbGUxLnR4dCBpcyBhIGZpbGUgdGhhdCBpcyAxMDAwIGJ5dGVzIGluIHNpemVcbiAgICAgKiAvLyBmaWxlMi50eHQgaXMgYSBmaWxlIHRoYXQgaXMgMjAwMCBieXRlcyBpbiBzaXplXG4gICAgICogLy8gZmlsZTMudHh0IGlzIGEgZmlsZSB0aGF0IGlzIDMwMDAgYnl0ZXMgaW4gc2l6ZVxuICAgICAqIC8vIGZpbGU0LnR4dCBkb2VzIG5vdCBleGlzdFxuICAgICAqXG4gICAgICogY29uc3QgZmlsZUxpc3QgPSBbJ2ZpbGUxLnR4dCcsJ2ZpbGUyLnR4dCcsJ2ZpbGUzLnR4dCddO1xuICAgICAqIGNvbnN0IHdpdGhNaXNzaW5nRmlsZUxpc3QgPSBbJ2ZpbGUxLnR4dCcsJ2ZpbGUyLnR4dCcsJ2ZpbGU0LnR4dCddO1xuICAgICAqXG4gICAgICogLy8gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgZmlsZSBzaXplIGluIGJ5dGVzXG4gICAgICogZnVuY3Rpb24gZ2V0RmlsZVNpemVJbkJ5dGVzKGZpbGUsIGNhbGxiYWNrKSB7XG4gICAgICogICAgIGZzLnN0YXQoZmlsZSwgZnVuY3Rpb24oZXJyLCBzdGF0KSB7XG4gICAgICogICAgICAgICBpZiAoZXJyKSB7XG4gICAgICogICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICogICAgICAgICB9XG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCBzdGF0LnNpemUpO1xuICAgICAqICAgICB9KTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBjYWxsYmFja3NcbiAgICAgKiBhc3luYy5tYXAoZmlsZUxpc3QsIGdldEZpbGVTaXplSW5CeXRlcywgZnVuY3Rpb24oZXJyLCByZXN1bHRzKSB7XG4gICAgICogICAgIGlmIChlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgIH0gZWxzZSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiAgICAgICAgIC8vIHJlc3VsdHMgaXMgbm93IGFuIGFycmF5IG9mIHRoZSBmaWxlIHNpemUgaW4gYnl0ZXMgZm9yIGVhY2ggZmlsZSwgZS5nLlxuICAgICAqICAgICAgICAgLy8gWyAxMDAwLCAyMDAwLCAzMDAwXVxuICAgICAqICAgICB9XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBFcnJvciBIYW5kbGluZ1xuICAgICAqIGFzeW5jLm1hcCh3aXRoTWlzc2luZ0ZpbGVMaXN0LCBnZXRGaWxlU2l6ZUluQnl0ZXMsIGZ1bmN0aW9uKGVyciwgcmVzdWx0cykge1xuICAgICAqICAgICBpZiAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICAgICAgLy8gWyBFcnJvcjogRU5PRU5UOiBubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IF1cbiAgICAgKiAgICAgfSBlbHNlIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgICB9XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBQcm9taXNlc1xuICAgICAqIGFzeW5jLm1hcChmaWxlTGlzdCwgZ2V0RmlsZVNpemVJbkJ5dGVzKVxuICAgICAqIC50aGVuKCByZXN1bHRzID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgIC8vIHJlc3VsdHMgaXMgbm93IGFuIGFycmF5IG9mIHRoZSBmaWxlIHNpemUgaW4gYnl0ZXMgZm9yIGVhY2ggZmlsZSwgZS5nLlxuICAgICAqICAgICAvLyBbIDEwMDAsIDIwMDAsIDMwMDBdXG4gICAgICogfSkuY2F0Y2goIGVyciA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBFcnJvciBIYW5kbGluZ1xuICAgICAqIGFzeW5jLm1hcCh3aXRoTWlzc2luZ0ZpbGVMaXN0LCBnZXRGaWxlU2l6ZUluQnl0ZXMpXG4gICAgICogLnRoZW4oIHJlc3VsdHMgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiB9KS5jYXRjaCggZXJyID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgLy8gWyBFcnJvcjogRU5PRU5UOiBubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IF1cbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIGFzeW5jL2F3YWl0XG4gICAgICogYXN5bmMgKCkgPT4ge1xuICAgICAqICAgICB0cnkge1xuICAgICAqICAgICAgICAgbGV0IHJlc3VsdHMgPSBhd2FpdCBhc3luYy5tYXAoZmlsZUxpc3QsIGdldEZpbGVTaXplSW5CeXRlcyk7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiAgICAgICAgIC8vIHJlc3VsdHMgaXMgbm93IGFuIGFycmF5IG9mIHRoZSBmaWxlIHNpemUgaW4gYnl0ZXMgZm9yIGVhY2ggZmlsZSwgZS5nLlxuICAgICAqICAgICAgICAgLy8gWyAxMDAwLCAyMDAwLCAzMDAwXVxuICAgICAqICAgICB9XG4gICAgICogICAgIGNhdGNoIChlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgIH1cbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBFcnJvciBIYW5kbGluZ1xuICAgICAqIGFzeW5jICgpID0+IHtcbiAgICAgKiAgICAgdHJ5IHtcbiAgICAgKiAgICAgICAgIGxldCByZXN1bHRzID0gYXdhaXQgYXN5bmMubWFwKHdpdGhNaXNzaW5nRmlsZUxpc3QsIGdldEZpbGVTaXplSW5CeXRlcyk7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICAgICAgLy8gWyBFcnJvcjogRU5PRU5UOiBubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IF1cbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1hcCAoY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBfYXN5bmNNYXAoZWFjaE9mJDEsIGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaylcbiAgICB9XG4gICAgdmFyIG1hcCQxID0gYXdhaXRpZnkobWFwLCAzKTtcblxuICAgIC8qKlxuICAgICAqIEFwcGxpZXMgdGhlIHByb3ZpZGVkIGFyZ3VtZW50cyB0byBlYWNoIGZ1bmN0aW9uIGluIHRoZSBhcnJheSwgY2FsbGluZ1xuICAgICAqIGBjYWxsYmFja2AgYWZ0ZXIgYWxsIGZ1bmN0aW9ucyBoYXZlIGNvbXBsZXRlZC4gSWYgeW91IG9ubHkgcHJvdmlkZSB0aGUgZmlyc3RcbiAgICAgKiBhcmd1bWVudCwgYGZuc2AsIHRoZW4gaXQgd2lsbCByZXR1cm4gYSBmdW5jdGlvbiB3aGljaCBsZXRzIHlvdSBwYXNzIGluIHRoZVxuICAgICAqIGFyZ3VtZW50cyBhcyBpZiBpdCB3ZXJlIGEgc2luZ2xlIGZ1bmN0aW9uIGNhbGwuIElmIG1vcmUgYXJndW1lbnRzIGFyZVxuICAgICAqIHByb3ZpZGVkLCBgY2FsbGJhY2tgIGlzIHJlcXVpcmVkIHdoaWxlIGBhcmdzYCBpcyBzdGlsbCBvcHRpb25hbC4gVGhlIHJlc3VsdHNcbiAgICAgKiBmb3IgZWFjaCBvZiB0aGUgYXBwbGllZCBhc3luYyBmdW5jdGlvbnMgYXJlIHBhc3NlZCB0byB0aGUgZmluYWwgY2FsbGJhY2tcbiAgICAgKiBhcyBhbiBhcnJheS5cbiAgICAgKlxuICAgICAqIEBuYW1lIGFwcGx5RWFjaFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbnRyb2xGbG93XG4gICAgICogQG1ldGhvZFxuICAgICAqIEBjYXRlZ29yeSBDb250cm9sIEZsb3dcbiAgICAgKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfEFzeW5jSXRlcmFibGV8T2JqZWN0fSBmbnMgLSBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIEFzeW5jRnVuY3Rpb259c1xuICAgICAqIHRvIGFsbCBjYWxsIHdpdGggdGhlIHNhbWUgYXJndW1lbnRzXG4gICAgICogQHBhcmFtIHsuLi4qfSBbYXJnc10gLSBhbnkgbnVtYmVyIG9mIHNlcGFyYXRlIGFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZVxuICAgICAqIGZ1bmN0aW9uLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSB0aGUgZmluYWwgYXJndW1lbnQgc2hvdWxkIGJlIHRoZSBjYWxsYmFjayxcbiAgICAgKiBjYWxsZWQgd2hlbiBhbGwgZnVuY3Rpb25zIGhhdmUgY29tcGxldGVkIHByb2Nlc3NpbmcuXG4gICAgICogQHJldHVybnMge0FzeW5jRnVuY3Rpb259IC0gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgdGFrZXMgbm8gYXJncyBvdGhlciB0aGFuXG4gICAgICogYW4gb3B0aW9uYWwgY2FsbGJhY2ssIHRoYXQgaXMgdGhlIHJlc3VsdCBvZiBhcHBseWluZyB0aGUgYGFyZ3NgIHRvIGVhY2hcbiAgICAgKiBvZiB0aGUgZnVuY3Rpb25zLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBjb25zdCBhcHBsaWVkRm4gPSBhc3luYy5hcHBseUVhY2goW2VuYWJsZVNlYXJjaCwgdXBkYXRlU2NoZW1hXSwgJ2J1Y2tldCcpXG4gICAgICpcbiAgICAgKiBhcHBsaWVkRm4oKGVyciwgcmVzdWx0cykgPT4ge1xuICAgICAqICAgICAvLyByZXN1bHRzWzBdIGlzIHRoZSByZXN1bHRzIGZvciBgZW5hYmxlU2VhcmNoYFxuICAgICAqICAgICAvLyByZXN1bHRzWzFdIGlzIHRoZSByZXN1bHRzIGZvciBgdXBkYXRlU2NoZW1hYFxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gcGFydGlhbCBhcHBsaWNhdGlvbiBleGFtcGxlOlxuICAgICAqIGFzeW5jLmVhY2goXG4gICAgICogICAgIGJ1Y2tldHMsXG4gICAgICogICAgIGFzeW5jIChidWNrZXQpID0+IGFzeW5jLmFwcGx5RWFjaChbZW5hYmxlU2VhcmNoLCB1cGRhdGVTY2hlbWFdLCBidWNrZXQpKCksXG4gICAgICogICAgIGNhbGxiYWNrXG4gICAgICogKTtcbiAgICAgKi9cbiAgICB2YXIgYXBwbHlFYWNoID0gYXBwbHlFYWNoJDEobWFwJDEpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNhbWUgYXMgW2BlYWNoT2ZgXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZWFjaE9mfSBidXQgcnVucyBvbmx5IGEgc2luZ2xlIGFzeW5jIG9wZXJhdGlvbiBhdCBhIHRpbWUuXG4gICAgICpcbiAgICAgKiBAbmFtZSBlYWNoT2ZTZXJpZXNcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5lYWNoT2Zde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5lYWNoT2Z9XG4gICAgICogQGFsaWFzIGZvckVhY2hPZlNlcmllc1xuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEFuIGFzeW5jIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggaXRlbSBpblxuICAgICAqIGBjb2xsYC5cbiAgICAgKiBJbnZva2VkIHdpdGggKGl0ZW0sIGtleSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCB3aGVuIGFsbCBgaXRlcmF0ZWVgXG4gICAgICogZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQsIG9yIGFuIGVycm9yIG9jY3Vycy4gSW52b2tlZCB3aXRoIChlcnIpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIGEgY2FsbGJhY2sgaXMgb21pdHRlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGVhY2hPZlNlcmllcyhjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGVhY2hPZkxpbWl0JDEoY29sbCwgMSwgaXRlcmF0ZWUsIGNhbGxiYWNrKVxuICAgIH1cbiAgICB2YXIgZWFjaE9mU2VyaWVzJDEgPSBhd2FpdGlmeShlYWNoT2ZTZXJpZXMsIDMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNhbWUgYXMgW2BtYXBgXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMubWFwfSBidXQgcnVucyBvbmx5IGEgc2luZ2xlIGFzeW5jIG9wZXJhdGlvbiBhdCBhIHRpbWUuXG4gICAgICpcbiAgICAgKiBAbmFtZSBtYXBTZXJpZXNcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5tYXBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5tYXB9XG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfEFzeW5jSXRlcmFibGV8T2JqZWN0fSBjb2xsIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQW4gYXN5bmMgZnVuY3Rpb24gdG8gYXBwbHkgdG8gZWFjaCBpdGVtIGluXG4gICAgICogYGNvbGxgLlxuICAgICAqIFRoZSBpdGVyYXRlZSBzaG91bGQgY29tcGxldGUgd2l0aCB0aGUgdHJhbnNmb3JtZWQgaXRlbS5cbiAgICAgKiBJbnZva2VkIHdpdGggKGl0ZW0sIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgd2hlbiBhbGwgYGl0ZXJhdGVlYFxuICAgICAqIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLCBvciBhbiBlcnJvciBvY2N1cnMuIFJlc3VsdHMgaXMgYW4gYXJyYXkgb2YgdGhlXG4gICAgICogdHJhbnNmb3JtZWQgaXRlbXMgZnJvbSB0aGUgYGNvbGxgLiBJbnZva2VkIHdpdGggKGVyciwgcmVzdWx0cykuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgaXMgcGFzc2VkXG4gICAgICovXG4gICAgZnVuY3Rpb24gbWFwU2VyaWVzIChjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9hc3luY01hcChlYWNoT2ZTZXJpZXMkMSwgY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKVxuICAgIH1cbiAgICB2YXIgbWFwU2VyaWVzJDEgPSBhd2FpdGlmeShtYXBTZXJpZXMsIDMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNhbWUgYXMgW2BhcHBseUVhY2hgXXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cuYXBwbHlFYWNofSBidXQgcnVucyBvbmx5IGEgc2luZ2xlIGFzeW5jIG9wZXJhdGlvbiBhdCBhIHRpbWUuXG4gICAgICpcbiAgICAgKiBAbmFtZSBhcHBseUVhY2hTZXJpZXNcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb250cm9sRmxvd1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5hcHBseUVhY2hde0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy5hcHBseUVhY2h9XG4gICAgICogQGNhdGVnb3J5IENvbnRyb2wgRmxvd1xuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGZucyAtIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgQXN5bmNGdW5jdGlvbn1zIHRvIGFsbFxuICAgICAqIGNhbGwgd2l0aCB0aGUgc2FtZSBhcmd1bWVudHNcbiAgICAgKiBAcGFyYW0gey4uLip9IFthcmdzXSAtIGFueSBudW1iZXIgb2Ygc2VwYXJhdGUgYXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlXG4gICAgICogZnVuY3Rpb24uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIHRoZSBmaW5hbCBhcmd1bWVudCBzaG91bGQgYmUgdGhlIGNhbGxiYWNrLFxuICAgICAqIGNhbGxlZCB3aGVuIGFsbCBmdW5jdGlvbnMgaGF2ZSBjb21wbGV0ZWQgcHJvY2Vzc2luZy5cbiAgICAgKiBAcmV0dXJucyB7QXN5bmNGdW5jdGlvbn0gLSBBIGZ1bmN0aW9uLCB0aGF0IHdoZW4gY2FsbGVkLCBpcyB0aGUgcmVzdWx0IG9mXG4gICAgICogYXBwbGluZyB0aGUgYGFyZ3NgIHRvIHRoZSBsaXN0IG9mIGZ1bmN0aW9ucy4gIEl0IHRha2VzIG5vIGFyZ3MsIG90aGVyIHRoYW5cbiAgICAgKiBhIGNhbGxiYWNrLlxuICAgICAqL1xuICAgIHZhciBhcHBseUVhY2hTZXJpZXMgPSBhcHBseUVhY2gkMShtYXBTZXJpZXMkMSk7XG5cbiAgICBjb25zdCBQUk9NSVNFX1NZTUJPTCA9IFN5bWJvbCgncHJvbWlzZUNhbGxiYWNrJyk7XG5cbiAgICBmdW5jdGlvbiBwcm9taXNlQ2FsbGJhY2sgKCkge1xuICAgICAgICBsZXQgcmVzb2x2ZSwgcmVqZWN0O1xuICAgICAgICBmdW5jdGlvbiBjYWxsYmFjayAoZXJyLCAuLi5hcmdzKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gcmVqZWN0KGVycilcbiAgICAgICAgICAgIHJlc29sdmUoYXJncy5sZW5ndGggPiAxID8gYXJncyA6IGFyZ3NbMF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FsbGJhY2tbUFJPTUlTRV9TWU1CT0xdID0gbmV3IFByb21pc2UoKHJlcywgcmVqKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlID0gcmVzLFxuICAgICAgICAgICAgcmVqZWN0ID0gcmVqO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gY2FsbGJhY2tcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmVzIHRoZSBiZXN0IG9yZGVyIGZvciBydW5uaW5nIHRoZSB7QGxpbmsgQXN5bmNGdW5jdGlvbn1zIGluIGB0YXNrc2AsIGJhc2VkIG9uXG4gICAgICogdGhlaXIgcmVxdWlyZW1lbnRzLiBFYWNoIGZ1bmN0aW9uIGNhbiBvcHRpb25hbGx5IGRlcGVuZCBvbiBvdGhlciBmdW5jdGlvbnNcbiAgICAgKiBiZWluZyBjb21wbGV0ZWQgZmlyc3QsIGFuZCBlYWNoIGZ1bmN0aW9uIGlzIHJ1biBhcyBzb29uIGFzIGl0cyByZXF1aXJlbWVudHNcbiAgICAgKiBhcmUgc2F0aXNmaWVkLlxuICAgICAqXG4gICAgICogSWYgYW55IG9mIHRoZSB7QGxpbmsgQXN5bmNGdW5jdGlvbn1zIHBhc3MgYW4gZXJyb3IgdG8gdGhlaXIgY2FsbGJhY2ssIHRoZSBgYXV0b2Agc2VxdWVuY2VcbiAgICAgKiB3aWxsIHN0b3AuIEZ1cnRoZXIgdGFza3Mgd2lsbCBub3QgZXhlY3V0ZSAoc28gYW55IG90aGVyIGZ1bmN0aW9ucyBkZXBlbmRpbmdcbiAgICAgKiBvbiBpdCB3aWxsIG5vdCBydW4pLCBhbmQgdGhlIG1haW4gYGNhbGxiYWNrYCBpcyBpbW1lZGlhdGVseSBjYWxsZWQgd2l0aCB0aGVcbiAgICAgKiBlcnJvci5cbiAgICAgKlxuICAgICAqIHtAbGluayBBc3luY0Z1bmN0aW9ufXMgYWxzbyByZWNlaXZlIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSByZXN1bHRzIG9mIGZ1bmN0aW9ucyB3aGljaFxuICAgICAqIGhhdmUgY29tcGxldGVkIHNvIGZhciBhcyB0aGUgZmlyc3QgYXJndW1lbnQsIGlmIHRoZXkgaGF2ZSBkZXBlbmRlbmNpZXMuIElmIGFcbiAgICAgKiB0YXNrIGZ1bmN0aW9uIGhhcyBubyBkZXBlbmRlbmNpZXMsIGl0IHdpbGwgb25seSBiZSBwYXNzZWQgYSBjYWxsYmFjay5cbiAgICAgKlxuICAgICAqIEBuYW1lIGF1dG9cbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb250cm9sRmxvd1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgQ29udHJvbCBGbG93XG4gICAgICogQHBhcmFtIHtPYmplY3R9IHRhc2tzIC0gQW4gb2JqZWN0LiBFYWNoIG9mIGl0cyBwcm9wZXJ0aWVzIGlzIGVpdGhlciBhXG4gICAgICogZnVuY3Rpb24gb3IgYW4gYXJyYXkgb2YgcmVxdWlyZW1lbnRzLCB3aXRoIHRoZSB7QGxpbmsgQXN5bmNGdW5jdGlvbn0gaXRzZWxmIHRoZSBsYXN0IGl0ZW1cbiAgICAgKiBpbiB0aGUgYXJyYXkuIFRoZSBvYmplY3QncyBrZXkgb2YgYSBwcm9wZXJ0eSBzZXJ2ZXMgYXMgdGhlIG5hbWUgb2YgdGhlIHRhc2tcbiAgICAgKiBkZWZpbmVkIGJ5IHRoYXQgcHJvcGVydHksIGkuZS4gY2FuIGJlIHVzZWQgd2hlbiBzcGVjaWZ5aW5nIHJlcXVpcmVtZW50cyBmb3JcbiAgICAgKiBvdGhlciB0YXNrcy4gVGhlIGZ1bmN0aW9uIHJlY2VpdmVzIG9uZSBvciB0d28gYXJndW1lbnRzOlxuICAgICAqICogYSBgcmVzdWx0c2Agb2JqZWN0LCBjb250YWluaW5nIHRoZSByZXN1bHRzIG9mIHRoZSBwcmV2aW91c2x5IGV4ZWN1dGVkXG4gICAgICogICBmdW5jdGlvbnMsIG9ubHkgcGFzc2VkIGlmIHRoZSB0YXNrIGhhcyBhbnkgZGVwZW5kZW5jaWVzLFxuICAgICAqICogYSBgY2FsbGJhY2soZXJyLCByZXN1bHQpYCBmdW5jdGlvbiwgd2hpY2ggbXVzdCBiZSBjYWxsZWQgd2hlbiBmaW5pc2hlZCxcbiAgICAgKiAgIHBhc3NpbmcgYW4gYGVycm9yYCAod2hpY2ggY2FuIGJlIGBudWxsYCkgYW5kIHRoZSByZXN1bHQgb2YgdGhlIGZ1bmN0aW9uJ3NcbiAgICAgKiAgIGV4ZWN1dGlvbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2NvbmN1cnJlbmN5PUluZmluaXR5XSAtIEFuIG9wdGlvbmFsIGBpbnRlZ2VyYCBmb3JcbiAgICAgKiBkZXRlcm1pbmluZyB0aGUgbWF4aW11bSBudW1iZXIgb2YgdGFza3MgdGhhdCBjYW4gYmUgcnVuIGluIHBhcmFsbGVsLiBCeVxuICAgICAqIGRlZmF1bHQsIGFzIG1hbnkgYXMgcG9zc2libGUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEFuIG9wdGlvbmFsIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCB3aGVuIGFsbFxuICAgICAqIHRoZSB0YXNrcyBoYXZlIGJlZW4gY29tcGxldGVkLiBJdCByZWNlaXZlcyB0aGUgYGVycmAgYXJndW1lbnQgaWYgYW55IGB0YXNrc2BcbiAgICAgKiBwYXNzIGFuIGVycm9yIHRvIHRoZWlyIGNhbGxiYWNrLiBSZXN1bHRzIGFyZSBhbHdheXMgcmV0dXJuZWQ7IGhvd2V2ZXIsIGlmIGFuXG4gICAgICogZXJyb3Igb2NjdXJzLCBubyBmdXJ0aGVyIGB0YXNrc2Agd2lsbCBiZSBwZXJmb3JtZWQsIGFuZCB0aGUgcmVzdWx0cyBvYmplY3RcbiAgICAgKiB3aWxsIG9ubHkgY29udGFpbiBwYXJ0aWFsIHJlc3VsdHMuIEludm9rZWQgd2l0aCAoZXJyLCByZXN1bHRzKS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBhIGNhbGxiYWNrIGlzIG5vdCBwYXNzZWRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy9Vc2luZyBDYWxsYmFja3NcbiAgICAgKiBhc3luYy5hdXRvKHtcbiAgICAgKiAgICAgZ2V0X2RhdGE6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAvLyBhc3luYyBjb2RlIHRvIGdldCBzb21lIGRhdGFcbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsICdkYXRhJywgJ2NvbnZlcnRlZCB0byBhcnJheScpO1xuICAgICAqICAgICB9LFxuICAgICAqICAgICBtYWtlX2ZvbGRlcjogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIC8vIGFzeW5jIGNvZGUgdG8gY3JlYXRlIGEgZGlyZWN0b3J5IHRvIHN0b3JlIGEgZmlsZSBpblxuICAgICAqICAgICAgICAgLy8gdGhpcyBpcyBydW4gYXQgdGhlIHNhbWUgdGltZSBhcyBnZXR0aW5nIHRoZSBkYXRhXG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCAnZm9sZGVyJyk7XG4gICAgICogICAgIH0sXG4gICAgICogICAgIHdyaXRlX2ZpbGU6IFsnZ2V0X2RhdGEnLCAnbWFrZV9mb2xkZXInLCBmdW5jdGlvbihyZXN1bHRzLCBjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgLy8gb25jZSB0aGVyZSBpcyBzb21lIGRhdGEgYW5kIHRoZSBkaXJlY3RvcnkgZXhpc3RzLFxuICAgICAqICAgICAgICAgLy8gd3JpdGUgdGhlIGRhdGEgdG8gYSBmaWxlIGluIHRoZSBkaXJlY3RvcnlcbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsICdmaWxlbmFtZScpO1xuICAgICAqICAgICB9XSxcbiAgICAgKiAgICAgZW1haWxfbGluazogWyd3cml0ZV9maWxlJywgZnVuY3Rpb24ocmVzdWx0cywgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIC8vIG9uY2UgdGhlIGZpbGUgaXMgd3JpdHRlbiBsZXQncyBlbWFpbCBhIGxpbmsgdG8gaXQuLi5cbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsIHsnZmlsZSc6cmVzdWx0cy53cml0ZV9maWxlLCAnZW1haWwnOid1c2VyQGV4YW1wbGUuY29tJ30pO1xuICAgICAqICAgICB9XVxuICAgICAqIH0sIGZ1bmN0aW9uKGVyciwgcmVzdWx0cykge1xuICAgICAqICAgICBpZiAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZygnZXJyID0gJywgZXJyKTtcbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjb25zb2xlLmxvZygncmVzdWx0cyA9ICcsIHJlc3VsdHMpO1xuICAgICAqICAgICAvLyByZXN1bHRzID0ge1xuICAgICAqICAgICAvLyAgICAgZ2V0X2RhdGE6IFsnZGF0YScsICdjb252ZXJ0ZWQgdG8gYXJyYXknXVxuICAgICAqICAgICAvLyAgICAgbWFrZV9mb2xkZXI7ICdmb2xkZXInLFxuICAgICAqICAgICAvLyAgICAgd3JpdGVfZmlsZTogJ2ZpbGVuYW1lJ1xuICAgICAqICAgICAvLyAgICAgZW1haWxfbGluazogeyBmaWxlOiAnZmlsZW5hbWUnLCBlbWFpbDogJ3VzZXJAZXhhbXBsZS5jb20nIH1cbiAgICAgKiAgICAgLy8gfVxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy9Vc2luZyBQcm9taXNlc1xuICAgICAqIGFzeW5jLmF1dG8oe1xuICAgICAqICAgICBnZXRfZGF0YTogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKCdpbiBnZXRfZGF0YScpO1xuICAgICAqICAgICAgICAgLy8gYXN5bmMgY29kZSB0byBnZXQgc29tZSBkYXRhXG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCAnZGF0YScsICdjb252ZXJ0ZWQgdG8gYXJyYXknKTtcbiAgICAgKiAgICAgfSxcbiAgICAgKiAgICAgbWFrZV9mb2xkZXI6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZygnaW4gbWFrZV9mb2xkZXInKTtcbiAgICAgKiAgICAgICAgIC8vIGFzeW5jIGNvZGUgdG8gY3JlYXRlIGEgZGlyZWN0b3J5IHRvIHN0b3JlIGEgZmlsZSBpblxuICAgICAqICAgICAgICAgLy8gdGhpcyBpcyBydW4gYXQgdGhlIHNhbWUgdGltZSBhcyBnZXR0aW5nIHRoZSBkYXRhXG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCAnZm9sZGVyJyk7XG4gICAgICogICAgIH0sXG4gICAgICogICAgIHdyaXRlX2ZpbGU6IFsnZ2V0X2RhdGEnLCAnbWFrZV9mb2xkZXInLCBmdW5jdGlvbihyZXN1bHRzLCBjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgLy8gb25jZSB0aGVyZSBpcyBzb21lIGRhdGEgYW5kIHRoZSBkaXJlY3RvcnkgZXhpc3RzLFxuICAgICAqICAgICAgICAgLy8gd3JpdGUgdGhlIGRhdGEgdG8gYSBmaWxlIGluIHRoZSBkaXJlY3RvcnlcbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsICdmaWxlbmFtZScpO1xuICAgICAqICAgICB9XSxcbiAgICAgKiAgICAgZW1haWxfbGluazogWyd3cml0ZV9maWxlJywgZnVuY3Rpb24ocmVzdWx0cywgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIC8vIG9uY2UgdGhlIGZpbGUgaXMgd3JpdHRlbiBsZXQncyBlbWFpbCBhIGxpbmsgdG8gaXQuLi5cbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsIHsnZmlsZSc6cmVzdWx0cy53cml0ZV9maWxlLCAnZW1haWwnOid1c2VyQGV4YW1wbGUuY29tJ30pO1xuICAgICAqICAgICB9XVxuICAgICAqIH0pLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKCdyZXN1bHRzID0gJywgcmVzdWx0cyk7XG4gICAgICogICAgIC8vIHJlc3VsdHMgPSB7XG4gICAgICogICAgIC8vICAgICBnZXRfZGF0YTogWydkYXRhJywgJ2NvbnZlcnRlZCB0byBhcnJheSddXG4gICAgICogICAgIC8vICAgICBtYWtlX2ZvbGRlcjsgJ2ZvbGRlcicsXG4gICAgICogICAgIC8vICAgICB3cml0ZV9maWxlOiAnZmlsZW5hbWUnXG4gICAgICogICAgIC8vICAgICBlbWFpbF9saW5rOiB7IGZpbGU6ICdmaWxlbmFtZScsIGVtYWlsOiAndXNlckBleGFtcGxlLmNvbScgfVxuICAgICAqICAgICAvLyB9XG4gICAgICogfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coJ2VyciA9ICcsIGVycik7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvL1VzaW5nIGFzeW5jL2F3YWl0XG4gICAgICogYXN5bmMgKCkgPT4ge1xuICAgICAqICAgICB0cnkge1xuICAgICAqICAgICAgICAgbGV0IHJlc3VsdHMgPSBhd2FpdCBhc3luYy5hdXRvKHtcbiAgICAgKiAgICAgICAgICAgICBnZXRfZGF0YTogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgICAgICAgICAgLy8gYXN5bmMgY29kZSB0byBnZXQgc29tZSBkYXRhXG4gICAgICogICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsICdkYXRhJywgJ2NvbnZlcnRlZCB0byBhcnJheScpO1xuICAgICAqICAgICAgICAgICAgIH0sXG4gICAgICogICAgICAgICAgICAgbWFrZV9mb2xkZXI6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAgICAgICAgIC8vIGFzeW5jIGNvZGUgdG8gY3JlYXRlIGEgZGlyZWN0b3J5IHRvIHN0b3JlIGEgZmlsZSBpblxuICAgICAqICAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIHJ1biBhdCB0aGUgc2FtZSB0aW1lIGFzIGdldHRpbmcgdGhlIGRhdGFcbiAgICAgKiAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ2ZvbGRlcicpO1xuICAgICAqICAgICAgICAgICAgIH0sXG4gICAgICogICAgICAgICAgICAgd3JpdGVfZmlsZTogWydnZXRfZGF0YScsICdtYWtlX2ZvbGRlcicsIGZ1bmN0aW9uKHJlc3VsdHMsIGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAgICAgICAgIC8vIG9uY2UgdGhlcmUgaXMgc29tZSBkYXRhIGFuZCB0aGUgZGlyZWN0b3J5IGV4aXN0cyxcbiAgICAgKiAgICAgICAgICAgICAgICAgLy8gd3JpdGUgdGhlIGRhdGEgdG8gYSBmaWxlIGluIHRoZSBkaXJlY3RvcnlcbiAgICAgKiAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ2ZpbGVuYW1lJyk7XG4gICAgICogICAgICAgICAgICAgfV0sXG4gICAgICogICAgICAgICAgICAgZW1haWxfbGluazogWyd3cml0ZV9maWxlJywgZnVuY3Rpb24ocmVzdWx0cywgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgICAgICAgICAgLy8gb25jZSB0aGUgZmlsZSBpcyB3cml0dGVuIGxldCdzIGVtYWlsIGEgbGluayB0byBpdC4uLlxuICAgICAqICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB7J2ZpbGUnOnJlc3VsdHMud3JpdGVfZmlsZSwgJ2VtYWlsJzondXNlckBleGFtcGxlLmNvbSd9KTtcbiAgICAgKiAgICAgICAgICAgICB9XVxuICAgICAqICAgICAgICAgfSk7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZygncmVzdWx0cyA9ICcsIHJlc3VsdHMpO1xuICAgICAqICAgICAgICAgLy8gcmVzdWx0cyA9IHtcbiAgICAgKiAgICAgICAgIC8vICAgICBnZXRfZGF0YTogWydkYXRhJywgJ2NvbnZlcnRlZCB0byBhcnJheSddXG4gICAgICogICAgICAgICAvLyAgICAgbWFrZV9mb2xkZXI7ICdmb2xkZXInLFxuICAgICAqICAgICAgICAgLy8gICAgIHdyaXRlX2ZpbGU6ICdmaWxlbmFtZSdcbiAgICAgKiAgICAgICAgIC8vICAgICBlbWFpbF9saW5rOiB7IGZpbGU6ICdmaWxlbmFtZScsIGVtYWlsOiAndXNlckBleGFtcGxlLmNvbScgfVxuICAgICAqICAgICAgICAgLy8gfVxuICAgICAqICAgICB9XG4gICAgICogICAgIGNhdGNoIChlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgIH1cbiAgICAgKiB9XG4gICAgICpcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBhdXRvKHRhc2tzLCBjb25jdXJyZW5jeSwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25jdXJyZW5jeSAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIC8vIGNvbmN1cnJlbmN5IGlzIG9wdGlvbmFsLCBzaGlmdCB0aGUgYXJncy5cbiAgICAgICAgICAgIGNhbGxiYWNrID0gY29uY3VycmVuY3k7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY2FsbGJhY2sgPSBvbmNlKGNhbGxiYWNrIHx8IHByb21pc2VDYWxsYmFjaygpKTtcbiAgICAgICAgdmFyIG51bVRhc2tzID0gT2JqZWN0LmtleXModGFza3MpLmxlbmd0aDtcbiAgICAgICAgaWYgKCFudW1UYXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gbnVtVGFza3M7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICB2YXIgcnVubmluZ1Rhc2tzID0gMDtcbiAgICAgICAgdmFyIGNhbmNlbGVkID0gZmFsc2U7XG4gICAgICAgIHZhciBoYXNFcnJvciA9IGZhbHNlO1xuXG4gICAgICAgIHZhciBsaXN0ZW5lcnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgICAgIHZhciByZWFkeVRhc2tzID0gW107XG5cbiAgICAgICAgLy8gZm9yIGN5Y2xlIGRldGVjdGlvbjpcbiAgICAgICAgdmFyIHJlYWR5VG9DaGVjayA9IFtdOyAvLyB0YXNrcyB0aGF0IGhhdmUgYmVlbiBpZGVudGlmaWVkIGFzIHJlYWNoYWJsZVxuICAgICAgICAvLyB3aXRob3V0IHRoZSBwb3NzaWJpbGl0eSBvZiByZXR1cm5pbmcgdG8gYW4gYW5jZXN0b3IgdGFza1xuICAgICAgICB2YXIgdW5jaGVja2VkRGVwZW5kZW5jaWVzID0ge307XG5cbiAgICAgICAgT2JqZWN0LmtleXModGFza3MpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIHZhciB0YXNrID0gdGFza3Nba2V5XTtcbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0YXNrKSkge1xuICAgICAgICAgICAgICAgIC8vIG5vIGRlcGVuZGVuY2llc1xuICAgICAgICAgICAgICAgIGVucXVldWVUYXNrKGtleSwgW3Rhc2tdKTtcbiAgICAgICAgICAgICAgICByZWFkeVRvQ2hlY2sucHVzaChrZXkpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGRlcGVuZGVuY2llcyA9IHRhc2suc2xpY2UoMCwgdGFzay5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgIHZhciByZW1haW5pbmdEZXBlbmRlbmNpZXMgPSBkZXBlbmRlbmNpZXMubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKHJlbWFpbmluZ0RlcGVuZGVuY2llcyA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGVucXVldWVUYXNrKGtleSwgdGFzayk7XG4gICAgICAgICAgICAgICAgcmVhZHlUb0NoZWNrLnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB1bmNoZWNrZWREZXBlbmRlbmNpZXNba2V5XSA9IHJlbWFpbmluZ0RlcGVuZGVuY2llcztcblxuICAgICAgICAgICAgZGVwZW5kZW5jaWVzLmZvckVhY2goZGVwZW5kZW5jeU5hbWUgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGFza3NbZGVwZW5kZW5jeU5hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignYXN5bmMuYXV0byB0YXNrIGAnICsga2V5ICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdgIGhhcyBhIG5vbi1leGlzdGVudCBkZXBlbmRlbmN5IGAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZGVuY3lOYW1lICsgJ2AgaW4gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbmNpZXMuam9pbignLCAnKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFkZExpc3RlbmVyKGRlcGVuZGVuY3lOYW1lLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZ0RlcGVuZGVuY2llcy0tO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVtYWluaW5nRGVwZW5kZW5jaWVzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbnF1ZXVlVGFzayhrZXksIHRhc2spO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY2hlY2tGb3JEZWFkbG9ja3MoKTtcbiAgICAgICAgcHJvY2Vzc1F1ZXVlKCk7XG5cbiAgICAgICAgZnVuY3Rpb24gZW5xdWV1ZVRhc2soa2V5LCB0YXNrKSB7XG4gICAgICAgICAgICByZWFkeVRhc2tzLnB1c2goKCkgPT4gcnVuVGFzayhrZXksIHRhc2spKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHByb2Nlc3NRdWV1ZSgpIHtcbiAgICAgICAgICAgIGlmIChjYW5jZWxlZCkgcmV0dXJuXG4gICAgICAgICAgICBpZiAocmVhZHlUYXNrcy5sZW5ndGggPT09IDAgJiYgcnVubmluZ1Rhc2tzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2hpbGUocmVhZHlUYXNrcy5sZW5ndGggJiYgcnVubmluZ1Rhc2tzIDwgY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICB2YXIgcnVuID0gcmVhZHlUYXNrcy5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIHJ1bigpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBhZGRMaXN0ZW5lcih0YXNrTmFtZSwgZm4pIHtcbiAgICAgICAgICAgIHZhciB0YXNrTGlzdGVuZXJzID0gbGlzdGVuZXJzW3Rhc2tOYW1lXTtcbiAgICAgICAgICAgIGlmICghdGFza0xpc3RlbmVycykge1xuICAgICAgICAgICAgICAgIHRhc2tMaXN0ZW5lcnMgPSBsaXN0ZW5lcnNbdGFza05hbWVdID0gW107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRhc2tMaXN0ZW5lcnMucHVzaChmbik7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiB0YXNrQ29tcGxldGUodGFza05hbWUpIHtcbiAgICAgICAgICAgIHZhciB0YXNrTGlzdGVuZXJzID0gbGlzdGVuZXJzW3Rhc2tOYW1lXSB8fCBbXTtcbiAgICAgICAgICAgIHRhc2tMaXN0ZW5lcnMuZm9yRWFjaChmbiA9PiBmbigpKTtcbiAgICAgICAgICAgIHByb2Nlc3NRdWV1ZSgpO1xuICAgICAgICB9XG5cblxuICAgICAgICBmdW5jdGlvbiBydW5UYXNrKGtleSwgdGFzaykge1xuICAgICAgICAgICAgaWYgKGhhc0Vycm9yKSByZXR1cm47XG5cbiAgICAgICAgICAgIHZhciB0YXNrQ2FsbGJhY2sgPSBvbmx5T25jZSgoZXJyLCAuLi5yZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICBydW5uaW5nVGFza3MtLTtcbiAgICAgICAgICAgICAgICBpZiAoZXJyID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICBjYW5jZWxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgW3Jlc3VsdF0gPSByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNhZmVSZXN1bHRzID0ge307XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKHJlc3VsdHMpLmZvckVhY2gocmtleSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1tya2V5XSA9IHJlc3VsdHNbcmtleV07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1trZXldID0gcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICBoYXNFcnJvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVycyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYW5jZWxlZCkgcmV0dXJuXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgc2FmZVJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba2V5XSA9IHJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgdGFza0NvbXBsZXRlKGtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJ1bm5pbmdUYXNrcysrO1xuICAgICAgICAgICAgdmFyIHRhc2tGbiA9IHdyYXBBc3luYyh0YXNrW3Rhc2subGVuZ3RoIC0gMV0pO1xuICAgICAgICAgICAgaWYgKHRhc2subGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgIHRhc2tGbihyZXN1bHRzLCB0YXNrQ2FsbGJhY2spO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0YXNrRm4odGFza0NhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGNoZWNrRm9yRGVhZGxvY2tzKCkge1xuICAgICAgICAgICAgLy8gS2FobidzIGFsZ29yaXRobVxuICAgICAgICAgICAgLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVG9wb2xvZ2ljYWxfc29ydGluZyNLYWhuLjI3c19hbGdvcml0aG1cbiAgICAgICAgICAgIC8vIGh0dHA6Ly9jb25uYWxsZS5ibG9nc3BvdC5jb20vMjAxMy8xMC90b3BvbG9naWNhbC1zb3J0aW5na2Fobi1hbGdvcml0aG0uaHRtbFxuICAgICAgICAgICAgdmFyIGN1cnJlbnRUYXNrO1xuICAgICAgICAgICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgICAgICAgICAgd2hpbGUgKHJlYWR5VG9DaGVjay5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50VGFzayA9IHJlYWR5VG9DaGVjay5wb3AoKTtcbiAgICAgICAgICAgICAgICBjb3VudGVyKys7XG4gICAgICAgICAgICAgICAgZ2V0RGVwZW5kZW50cyhjdXJyZW50VGFzaykuZm9yRWFjaChkZXBlbmRlbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoLS11bmNoZWNrZWREZXBlbmRlbmNpZXNbZGVwZW5kZW50XSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZHlUb0NoZWNrLnB1c2goZGVwZW5kZW50KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY291bnRlciAhPT0gbnVtVGFza3MpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICdhc3luYy5hdXRvIGNhbm5vdCBleGVjdXRlIHRhc2tzIGR1ZSB0byBhIHJlY3Vyc2l2ZSBkZXBlbmRlbmN5J1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBnZXREZXBlbmRlbnRzKHRhc2tOYW1lKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICAgICAgICBPYmplY3Qua2V5cyh0YXNrcykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhc2sgPSB0YXNrc1trZXldO1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRhc2spICYmIHRhc2suaW5kZXhPZih0YXNrTmFtZSkgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjYWxsYmFja1tQUk9NSVNFX1NZTUJPTF1cbiAgICB9XG5cbiAgICB2YXIgRk5fQVJHUyA9IC9eKD86YXN5bmNcXHMpPyg/OmZ1bmN0aW9uKT9cXHMqKD86XFx3K1xccyopP1xcKChbXildKylcXCkoPzpcXHMqeykvO1xuICAgIHZhciBBUlJPV19GTl9BUkdTID0gL14oPzphc3luY1xccyk/XFxzKig/OlxcKFxccyopPygoPzpbXik9XFxzXVxccyopKikoPzpcXClcXHMqKT89Pi87XG4gICAgdmFyIEZOX0FSR19TUExJVCA9IC8sLztcbiAgICB2YXIgRk5fQVJHID0gLyg9LispPyhcXHMqKSQvO1xuXG4gICAgZnVuY3Rpb24gc3RyaXBDb21tZW50cyhzdHJpbmcpIHtcbiAgICAgICAgbGV0IHN0cmlwcGVkID0gJyc7XG4gICAgICAgIGxldCBpbmRleCA9IDA7XG4gICAgICAgIGxldCBlbmRCbG9ja0NvbW1lbnQgPSBzdHJpbmcuaW5kZXhPZignKi8nKTtcbiAgICAgICAgd2hpbGUgKGluZGV4IDwgc3RyaW5nLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKHN0cmluZ1tpbmRleF0gPT09ICcvJyAmJiBzdHJpbmdbaW5kZXgrMV0gPT09ICcvJykge1xuICAgICAgICAgICAgICAgIC8vIGlubGluZSBjb21tZW50XG4gICAgICAgICAgICAgICAgbGV0IGVuZEluZGV4ID0gc3RyaW5nLmluZGV4T2YoJ1xcbicsIGluZGV4KTtcbiAgICAgICAgICAgICAgICBpbmRleCA9IChlbmRJbmRleCA9PT0gLTEpID8gc3RyaW5nLmxlbmd0aCA6IGVuZEluZGV4O1xuICAgICAgICAgICAgfSBlbHNlIGlmICgoZW5kQmxvY2tDb21tZW50ICE9PSAtMSkgJiYgKHN0cmluZ1tpbmRleF0gPT09ICcvJykgJiYgKHN0cmluZ1tpbmRleCsxXSA9PT0gJyonKSkge1xuICAgICAgICAgICAgICAgIC8vIGJsb2NrIGNvbW1lbnRcbiAgICAgICAgICAgICAgICBsZXQgZW5kSW5kZXggPSBzdHJpbmcuaW5kZXhPZignKi8nLCBpbmRleCk7XG4gICAgICAgICAgICAgICAgaWYgKGVuZEluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBpbmRleCA9IGVuZEluZGV4ICsgMjtcbiAgICAgICAgICAgICAgICAgICAgZW5kQmxvY2tDb21tZW50ID0gc3RyaW5nLmluZGV4T2YoJyovJywgaW5kZXgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN0cmlwcGVkICs9IHN0cmluZ1tpbmRleF07XG4gICAgICAgICAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdHJpcHBlZCArPSBzdHJpbmdbaW5kZXhdO1xuICAgICAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0cmlwcGVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlUGFyYW1zKGZ1bmMpIHtcbiAgICAgICAgY29uc3Qgc3JjID0gc3RyaXBDb21tZW50cyhmdW5jLnRvU3RyaW5nKCkpO1xuICAgICAgICBsZXQgbWF0Y2ggPSBzcmMubWF0Y2goRk5fQVJHUyk7XG4gICAgICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgICAgIG1hdGNoID0gc3JjLm1hdGNoKEFSUk9XX0ZOX0FSR1MpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbWF0Y2gpIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IHBhcnNlIGFyZ3MgaW4gYXV0b0luamVjdFxcblNvdXJjZTpcXG4nICsgc3JjKVxuICAgICAgICBsZXQgWywgYXJnc10gPSBtYXRjaDtcbiAgICAgICAgcmV0dXJuIGFyZ3NcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXHMvZywgJycpXG4gICAgICAgICAgICAuc3BsaXQoRk5fQVJHX1NQTElUKVxuICAgICAgICAgICAgLm1hcCgoYXJnKSA9PiBhcmcucmVwbGFjZShGTl9BUkcsICcnKS50cmltKCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgZGVwZW5kZW5jeS1pbmplY3RlZCB2ZXJzaW9uIG9mIHRoZSBbYXN5bmMuYXV0b117QGxpbmsgbW9kdWxlOkNvbnRyb2xGbG93LmF1dG99IGZ1bmN0aW9uLiBEZXBlbmRlbnRcbiAgICAgKiB0YXNrcyBhcmUgc3BlY2lmaWVkIGFzIHBhcmFtZXRlcnMgdG8gdGhlIGZ1bmN0aW9uLCBhZnRlciB0aGUgdXN1YWwgY2FsbGJhY2tcbiAgICAgKiBwYXJhbWV0ZXIsIHdpdGggdGhlIHBhcmFtZXRlciBuYW1lcyBtYXRjaGluZyB0aGUgbmFtZXMgb2YgdGhlIHRhc2tzIGl0XG4gICAgICogZGVwZW5kcyBvbi4gVGhpcyBjYW4gcHJvdmlkZSBldmVuIG1vcmUgcmVhZGFibGUgdGFzayBncmFwaHMgd2hpY2ggY2FuIGJlXG4gICAgICogZWFzaWVyIHRvIG1haW50YWluLlxuICAgICAqXG4gICAgICogSWYgYSBmaW5hbCBjYWxsYmFjayBpcyBzcGVjaWZpZWQsIHRoZSB0YXNrIHJlc3VsdHMgYXJlIHNpbWlsYXJseSBpbmplY3RlZCxcbiAgICAgKiBzcGVjaWZpZWQgYXMgbmFtZWQgcGFyYW1ldGVycyBhZnRlciB0aGUgaW5pdGlhbCBlcnJvciBwYXJhbWV0ZXIuXG4gICAgICpcbiAgICAgKiBUaGUgYXV0b0luamVjdCBmdW5jdGlvbiBpcyBwdXJlbHkgc3ludGFjdGljIHN1Z2FyIGFuZCBpdHMgc2VtYW50aWNzIGFyZVxuICAgICAqIG90aGVyd2lzZSBlcXVpdmFsZW50IHRvIFthc3luYy5hdXRvXXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cuYXV0b30uXG4gICAgICpcbiAgICAgKiBAbmFtZSBhdXRvSW5qZWN0XG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMuYXV0b117QGxpbmsgbW9kdWxlOkNvbnRyb2xGbG93LmF1dG99XG4gICAgICogQGNhdGVnb3J5IENvbnRyb2wgRmxvd1xuICAgICAqIEBwYXJhbSB7T2JqZWN0fSB0YXNrcyAtIEFuIG9iamVjdCwgZWFjaCBvZiB3aG9zZSBwcm9wZXJ0aWVzIGlzIGFuIHtAbGluayBBc3luY0Z1bmN0aW9ufSBvZlxuICAgICAqIHRoZSBmb3JtICdmdW5jKFtkZXBlbmRlbmNpZXMuLi5dLCBjYWxsYmFjaykuIFRoZSBvYmplY3QncyBrZXkgb2YgYSBwcm9wZXJ0eVxuICAgICAqIHNlcnZlcyBhcyB0aGUgbmFtZSBvZiB0aGUgdGFzayBkZWZpbmVkIGJ5IHRoYXQgcHJvcGVydHksIGkuZS4gY2FuIGJlIHVzZWRcbiAgICAgKiB3aGVuIHNwZWNpZnlpbmcgcmVxdWlyZW1lbnRzIGZvciBvdGhlciB0YXNrcy5cbiAgICAgKiAqIFRoZSBgY2FsbGJhY2tgIHBhcmFtZXRlciBpcyBhIGBjYWxsYmFjayhlcnIsIHJlc3VsdClgIHdoaWNoIG11c3QgYmUgY2FsbGVkXG4gICAgICogICB3aGVuIGZpbmlzaGVkLCBwYXNzaW5nIGFuIGBlcnJvcmAgKHdoaWNoIGNhbiBiZSBgbnVsbGApIGFuZCB0aGUgcmVzdWx0IG9mXG4gICAgICogICB0aGUgZnVuY3Rpb24ncyBleGVjdXRpb24uIFRoZSByZW1haW5pbmcgcGFyYW1ldGVycyBuYW1lIG90aGVyIHRhc2tzIG9uXG4gICAgICogICB3aGljaCB0aGUgdGFzayBpcyBkZXBlbmRlbnQsIGFuZCB0aGUgcmVzdWx0cyBmcm9tIHRob3NlIHRhc2tzIGFyZSB0aGVcbiAgICAgKiAgIGFyZ3VtZW50cyBvZiB0aG9zZSBwYXJhbWV0ZXJzLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBbiBvcHRpb25hbCBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgd2hlbiBhbGxcbiAgICAgKiB0aGUgdGFza3MgaGF2ZSBiZWVuIGNvbXBsZXRlZC4gSXQgcmVjZWl2ZXMgdGhlIGBlcnJgIGFyZ3VtZW50IGlmIGFueSBgdGFza3NgXG4gICAgICogcGFzcyBhbiBlcnJvciB0byB0aGVpciBjYWxsYmFjaywgYW5kIGEgYHJlc3VsdHNgIG9iamVjdCB3aXRoIGFueSBjb21wbGV0ZWRcbiAgICAgKiB0YXNrIHJlc3VsdHMsIHNpbWlsYXIgdG8gYGF1dG9gLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIG5vIGNhbGxiYWNrIGlzIHBhc3NlZFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyAgVGhlIGV4YW1wbGUgZnJvbSBgYXV0b2AgY2FuIGJlIHJld3JpdHRlbiBhcyBmb2xsb3dzOlxuICAgICAqIGFzeW5jLmF1dG9JbmplY3Qoe1xuICAgICAqICAgICBnZXRfZGF0YTogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIC8vIGFzeW5jIGNvZGUgdG8gZ2V0IHNvbWUgZGF0YVxuICAgICAqICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ2RhdGEnLCAnY29udmVydGVkIHRvIGFycmF5Jyk7XG4gICAgICogICAgIH0sXG4gICAgICogICAgIG1ha2VfZm9sZGVyOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgLy8gYXN5bmMgY29kZSB0byBjcmVhdGUgYSBkaXJlY3RvcnkgdG8gc3RvcmUgYSBmaWxlIGluXG4gICAgICogICAgICAgICAvLyB0aGlzIGlzIHJ1biBhdCB0aGUgc2FtZSB0aW1lIGFzIGdldHRpbmcgdGhlIGRhdGFcbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsICdmb2xkZXInKTtcbiAgICAgKiAgICAgfSxcbiAgICAgKiAgICAgd3JpdGVfZmlsZTogZnVuY3Rpb24oZ2V0X2RhdGEsIG1ha2VfZm9sZGVyLCBjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgLy8gb25jZSB0aGVyZSBpcyBzb21lIGRhdGEgYW5kIHRoZSBkaXJlY3RvcnkgZXhpc3RzLFxuICAgICAqICAgICAgICAgLy8gd3JpdGUgdGhlIGRhdGEgdG8gYSBmaWxlIGluIHRoZSBkaXJlY3RvcnlcbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsICdmaWxlbmFtZScpO1xuICAgICAqICAgICB9LFxuICAgICAqICAgICBlbWFpbF9saW5rOiBmdW5jdGlvbih3cml0ZV9maWxlLCBjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgLy8gb25jZSB0aGUgZmlsZSBpcyB3cml0dGVuIGxldCdzIGVtYWlsIGEgbGluayB0byBpdC4uLlxuICAgICAqICAgICAgICAgLy8gd3JpdGVfZmlsZSBjb250YWlucyB0aGUgZmlsZW5hbWUgcmV0dXJuZWQgYnkgd3JpdGVfZmlsZS5cbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsIHsnZmlsZSc6d3JpdGVfZmlsZSwgJ2VtYWlsJzondXNlckBleGFtcGxlLmNvbSd9KTtcbiAgICAgKiAgICAgfVxuICAgICAqIH0sIGZ1bmN0aW9uKGVyciwgcmVzdWx0cykge1xuICAgICAqICAgICBjb25zb2xlLmxvZygnZXJyID0gJywgZXJyKTtcbiAgICAgKiAgICAgY29uc29sZS5sb2coJ2VtYWlsX2xpbmsgPSAnLCByZXN1bHRzLmVtYWlsX2xpbmspO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gSWYgeW91IGFyZSB1c2luZyBhIEpTIG1pbmlmaWVyIHRoYXQgbWFuZ2xlcyBwYXJhbWV0ZXIgbmFtZXMsIGBhdXRvSW5qZWN0YFxuICAgICAqIC8vIHdpbGwgbm90IHdvcmsgd2l0aCBwbGFpbiBmdW5jdGlvbnMsIHNpbmNlIHRoZSBwYXJhbWV0ZXIgbmFtZXMgd2lsbCBiZVxuICAgICAqIC8vIGNvbGxhcHNlZCB0byBhIHNpbmdsZSBsZXR0ZXIgaWRlbnRpZmllci4gIFRvIHdvcmsgYXJvdW5kIHRoaXMsIHlvdSBjYW5cbiAgICAgKiAvLyBleHBsaWNpdGx5IHNwZWNpZnkgdGhlIG5hbWVzIG9mIHRoZSBwYXJhbWV0ZXJzIHlvdXIgdGFzayBmdW5jdGlvbiBuZWVkc1xuICAgICAqIC8vIGluIGFuIGFycmF5LCBzaW1pbGFyIHRvIEFuZ3VsYXIuanMgZGVwZW5kZW5jeSBpbmplY3Rpb24uXG4gICAgICpcbiAgICAgKiAvLyBUaGlzIHN0aWxsIGhhcyBhbiBhZHZhbnRhZ2Ugb3ZlciBwbGFpbiBgYXV0b2AsIHNpbmNlIHRoZSByZXN1bHRzIGEgdGFza1xuICAgICAqIC8vIGRlcGVuZHMgb24gYXJlIHN0aWxsIHNwcmVhZCBpbnRvIGFyZ3VtZW50cy5cbiAgICAgKiBhc3luYy5hdXRvSW5qZWN0KHtcbiAgICAgKiAgICAgLy8uLi5cbiAgICAgKiAgICAgd3JpdGVfZmlsZTogWydnZXRfZGF0YScsICdtYWtlX2ZvbGRlcicsIGZ1bmN0aW9uKGdldF9kYXRhLCBtYWtlX2ZvbGRlciwgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsICdmaWxlbmFtZScpO1xuICAgICAqICAgICB9XSxcbiAgICAgKiAgICAgZW1haWxfbGluazogWyd3cml0ZV9maWxlJywgZnVuY3Rpb24od3JpdGVfZmlsZSwgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsIHsnZmlsZSc6d3JpdGVfZmlsZSwgJ2VtYWlsJzondXNlckBleGFtcGxlLmNvbSd9KTtcbiAgICAgKiAgICAgfV1cbiAgICAgKiAgICAgLy8uLi5cbiAgICAgKiB9LCBmdW5jdGlvbihlcnIsIHJlc3VsdHMpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coJ2VyciA9ICcsIGVycik7XG4gICAgICogICAgIGNvbnNvbGUubG9nKCdlbWFpbF9saW5rID0gJywgcmVzdWx0cy5lbWFpbF9saW5rKTtcbiAgICAgKiB9KTtcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBhdXRvSW5qZWN0KHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgbmV3VGFza3MgPSB7fTtcblxuICAgICAgICBPYmplY3Qua2V5cyh0YXNrcykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgdmFyIHRhc2tGbiA9IHRhc2tzW2tleV07XG4gICAgICAgICAgICB2YXIgcGFyYW1zO1xuICAgICAgICAgICAgdmFyIGZuSXNBc3luYyA9IGlzQXN5bmModGFza0ZuKTtcbiAgICAgICAgICAgIHZhciBoYXNOb0RlcHMgPVxuICAgICAgICAgICAgICAgICghZm5Jc0FzeW5jICYmIHRhc2tGbi5sZW5ndGggPT09IDEpIHx8XG4gICAgICAgICAgICAgICAgKGZuSXNBc3luYyAmJiB0YXNrRm4ubGVuZ3RoID09PSAwKTtcblxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGFza0ZuKSkge1xuICAgICAgICAgICAgICAgIHBhcmFtcyA9IFsuLi50YXNrRm5dO1xuICAgICAgICAgICAgICAgIHRhc2tGbiA9IHBhcmFtcy5wb3AoKTtcblxuICAgICAgICAgICAgICAgIG5ld1Rhc2tzW2tleV0gPSBwYXJhbXMuY29uY2F0KHBhcmFtcy5sZW5ndGggPiAwID8gbmV3VGFzayA6IHRhc2tGbik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhhc05vRGVwcykge1xuICAgICAgICAgICAgICAgIC8vIG5vIGRlcGVuZGVuY2llcywgdXNlIHRoZSBmdW5jdGlvbiBhcy1pc1xuICAgICAgICAgICAgICAgIG5ld1Rhc2tzW2tleV0gPSB0YXNrRm47XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHBhcmFtcyA9IHBhcnNlUGFyYW1zKHRhc2tGbik7XG4gICAgICAgICAgICAgICAgaWYgKCh0YXNrRm4ubGVuZ3RoID09PSAwICYmICFmbklzQXN5bmMpICYmIHBhcmFtcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYXV0b0luamVjdCB0YXNrIGZ1bmN0aW9ucyByZXF1aXJlIGV4cGxpY2l0IHBhcmFtZXRlcnMuXCIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBjYWxsYmFjayBwYXJhbVxuICAgICAgICAgICAgICAgIGlmICghZm5Jc0FzeW5jKSBwYXJhbXMucG9wKCk7XG5cbiAgICAgICAgICAgICAgICBuZXdUYXNrc1trZXldID0gcGFyYW1zLmNvbmNhdChuZXdUYXNrKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gbmV3VGFzayhyZXN1bHRzLCB0YXNrQ2IpIHtcbiAgICAgICAgICAgICAgICB2YXIgbmV3QXJncyA9IHBhcmFtcy5tYXAobmFtZSA9PiByZXN1bHRzW25hbWVdKTtcbiAgICAgICAgICAgICAgICBuZXdBcmdzLnB1c2godGFza0NiKTtcbiAgICAgICAgICAgICAgICB3cmFwQXN5bmModGFza0ZuKSguLi5uZXdBcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGF1dG8obmV3VGFza3MsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICAvLyBTaW1wbGUgZG91Ymx5IGxpbmtlZCBsaXN0IChodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Eb3VibHlfbGlua2VkX2xpc3QpIGltcGxlbWVudGF0aW9uXG4gICAgLy8gdXNlZCBmb3IgcXVldWVzLiBUaGlzIGltcGxlbWVudGF0aW9uIGFzc3VtZXMgdGhhdCB0aGUgbm9kZSBwcm92aWRlZCBieSB0aGUgdXNlciBjYW4gYmUgbW9kaWZpZWRcbiAgICAvLyB0byBhZGp1c3QgdGhlIG5leHQgYW5kIGxhc3QgcHJvcGVydGllcy4gV2UgaW1wbGVtZW50IG9ubHkgdGhlIG1pbmltYWwgZnVuY3Rpb25hbGl0eVxuICAgIC8vIGZvciBxdWV1ZSBzdXBwb3J0LlxuICAgIGNsYXNzIERMTCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgdGhpcy5oZWFkID0gdGhpcy50YWlsID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMubGVuZ3RoID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbW92ZUxpbmsobm9kZSkge1xuICAgICAgICAgICAgaWYgKG5vZGUucHJldikgbm9kZS5wcmV2Lm5leHQgPSBub2RlLm5leHQ7XG4gICAgICAgICAgICBlbHNlIHRoaXMuaGVhZCA9IG5vZGUubmV4dDtcbiAgICAgICAgICAgIGlmIChub2RlLm5leHQpIG5vZGUubmV4dC5wcmV2ID0gbm9kZS5wcmV2O1xuICAgICAgICAgICAgZWxzZSB0aGlzLnRhaWwgPSBub2RlLnByZXY7XG5cbiAgICAgICAgICAgIG5vZGUucHJldiA9IG5vZGUubmV4dCA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmxlbmd0aCAtPSAxO1xuICAgICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH1cblxuICAgICAgICBlbXB0eSAoKSB7XG4gICAgICAgICAgICB3aGlsZSh0aGlzLmhlYWQpIHRoaXMuc2hpZnQoKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5zZXJ0QWZ0ZXIobm9kZSwgbmV3Tm9kZSkge1xuICAgICAgICAgICAgbmV3Tm9kZS5wcmV2ID0gbm9kZTtcbiAgICAgICAgICAgIG5ld05vZGUubmV4dCA9IG5vZGUubmV4dDtcbiAgICAgICAgICAgIGlmIChub2RlLm5leHQpIG5vZGUubmV4dC5wcmV2ID0gbmV3Tm9kZTtcbiAgICAgICAgICAgIGVsc2UgdGhpcy50YWlsID0gbmV3Tm9kZTtcbiAgICAgICAgICAgIG5vZGUubmV4dCA9IG5ld05vZGU7XG4gICAgICAgICAgICB0aGlzLmxlbmd0aCArPSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5zZXJ0QmVmb3JlKG5vZGUsIG5ld05vZGUpIHtcbiAgICAgICAgICAgIG5ld05vZGUucHJldiA9IG5vZGUucHJldjtcbiAgICAgICAgICAgIG5ld05vZGUubmV4dCA9IG5vZGU7XG4gICAgICAgICAgICBpZiAobm9kZS5wcmV2KSBub2RlLnByZXYubmV4dCA9IG5ld05vZGU7XG4gICAgICAgICAgICBlbHNlIHRoaXMuaGVhZCA9IG5ld05vZGU7XG4gICAgICAgICAgICBub2RlLnByZXYgPSBuZXdOb2RlO1xuICAgICAgICAgICAgdGhpcy5sZW5ndGggKz0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHVuc2hpZnQobm9kZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaGVhZCkgdGhpcy5pbnNlcnRCZWZvcmUodGhpcy5oZWFkLCBub2RlKTtcbiAgICAgICAgICAgIGVsc2Ugc2V0SW5pdGlhbCh0aGlzLCBub2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1c2gobm9kZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMudGFpbCkgdGhpcy5pbnNlcnRBZnRlcih0aGlzLnRhaWwsIG5vZGUpO1xuICAgICAgICAgICAgZWxzZSBzZXRJbml0aWFsKHRoaXMsIG5vZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgc2hpZnQoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5oZWFkICYmIHRoaXMucmVtb3ZlTGluayh0aGlzLmhlYWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcG9wKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGFpbCAmJiB0aGlzLnJlbW92ZUxpbmsodGhpcy50YWlsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRvQXJyYXkoKSB7XG4gICAgICAgICAgICByZXR1cm4gWy4uLnRoaXNdXG4gICAgICAgIH1cblxuICAgICAgICAqW1N5bWJvbC5pdGVyYXRvcl0gKCkge1xuICAgICAgICAgICAgdmFyIGN1ciA9IHRoaXMuaGVhZDtcbiAgICAgICAgICAgIHdoaWxlIChjdXIpIHtcbiAgICAgICAgICAgICAgICB5aWVsZCBjdXIuZGF0YTtcbiAgICAgICAgICAgICAgICBjdXIgPSBjdXIubmV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJlbW92ZSAodGVzdEZuKSB7XG4gICAgICAgICAgICB2YXIgY3VyciA9IHRoaXMuaGVhZDtcbiAgICAgICAgICAgIHdoaWxlKGN1cnIpIHtcbiAgICAgICAgICAgICAgICB2YXIge25leHR9ID0gY3VycjtcbiAgICAgICAgICAgICAgICBpZiAodGVzdEZuKGN1cnIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlTGluayhjdXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY3VyciA9IG5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldEluaXRpYWwoZGxsLCBub2RlKSB7XG4gICAgICAgIGRsbC5sZW5ndGggPSAxO1xuICAgICAgICBkbGwuaGVhZCA9IGRsbC50YWlsID0gbm9kZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBxdWV1ZSQxKHdvcmtlciwgY29uY3VycmVuY3ksIHBheWxvYWQpIHtcbiAgICAgICAgaWYgKGNvbmN1cnJlbmN5ID09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKGNvbmN1cnJlbmN5ID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQ29uY3VycmVuY3kgbXVzdCBub3QgYmUgemVybycpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIF93b3JrZXIgPSB3cmFwQXN5bmMod29ya2VyKTtcbiAgICAgICAgdmFyIG51bVJ1bm5pbmcgPSAwO1xuICAgICAgICB2YXIgd29ya2Vyc0xpc3QgPSBbXTtcbiAgICAgICAgY29uc3QgZXZlbnRzID0ge1xuICAgICAgICAgICAgZXJyb3I6IFtdLFxuICAgICAgICAgICAgZHJhaW46IFtdLFxuICAgICAgICAgICAgc2F0dXJhdGVkOiBbXSxcbiAgICAgICAgICAgIHVuc2F0dXJhdGVkOiBbXSxcbiAgICAgICAgICAgIGVtcHR5OiBbXVxuICAgICAgICB9O1xuXG4gICAgICAgIGZ1bmN0aW9uIG9uIChldmVudCwgaGFuZGxlcikge1xuICAgICAgICAgICAgZXZlbnRzW2V2ZW50XS5wdXNoKGhhbmRsZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gb25jZSAoZXZlbnQsIGhhbmRsZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZUFuZFJlbW92ZSA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgb2ZmKGV2ZW50LCBoYW5kbGVBbmRSZW1vdmUpO1xuICAgICAgICAgICAgICAgIGhhbmRsZXIoLi4uYXJncyk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZXZlbnRzW2V2ZW50XS5wdXNoKGhhbmRsZUFuZFJlbW92ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBvZmYgKGV2ZW50LCBoYW5kbGVyKSB7XG4gICAgICAgICAgICBpZiAoIWV2ZW50KSByZXR1cm4gT2JqZWN0LmtleXMoZXZlbnRzKS5mb3JFYWNoKGV2ID0+IGV2ZW50c1tldl0gPSBbXSlcbiAgICAgICAgICAgIGlmICghaGFuZGxlcikgcmV0dXJuIGV2ZW50c1tldmVudF0gPSBbXVxuICAgICAgICAgICAgZXZlbnRzW2V2ZW50XSA9IGV2ZW50c1tldmVudF0uZmlsdGVyKGV2ID0+IGV2ICE9PSBoYW5kbGVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHRyaWdnZXIgKGV2ZW50LCAuLi5hcmdzKSB7XG4gICAgICAgICAgICBldmVudHNbZXZlbnRdLmZvckVhY2goaGFuZGxlciA9PiBoYW5kbGVyKC4uLmFyZ3MpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBwcm9jZXNzaW5nU2NoZWR1bGVkID0gZmFsc2U7XG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQoZGF0YSwgaW5zZXJ0QXRGcm9udCwgcmVqZWN0T25FcnJvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayAhPSBudWxsICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndGFzayBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHEuc3RhcnRlZCA9IHRydWU7XG5cbiAgICAgICAgICAgIHZhciByZXMsIHJlajtcbiAgICAgICAgICAgIGZ1bmN0aW9uIHByb21pc2VDYWxsYmFjayAoZXJyLCAuLi5hcmdzKSB7XG4gICAgICAgICAgICAgICAgLy8gd2UgZG9uJ3QgY2FyZSBhYm91dCB0aGUgZXJyb3IsIGxldCB0aGUgZ2xvYmFsIGVycm9yIGhhbmRsZXJcbiAgICAgICAgICAgICAgICAvLyBkZWFsIHdpdGggaXRcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gcmVqZWN0T25FcnJvciA/IHJlaihlcnIpIDogcmVzKClcbiAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkgcmV0dXJuIHJlcyhhcmdzWzBdKVxuICAgICAgICAgICAgICAgIHJlcyhhcmdzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGl0ZW0gPSBxLl9jcmVhdGVUYXNrSXRlbShcbiAgICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICAgIHJlamVjdE9uRXJyb3IgPyBwcm9taXNlQ2FsbGJhY2sgOlxuICAgICAgICAgICAgICAgICAgICAoY2FsbGJhY2sgfHwgcHJvbWlzZUNhbGxiYWNrKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKGluc2VydEF0RnJvbnQpIHtcbiAgICAgICAgICAgICAgICBxLl90YXNrcy51bnNoaWZ0KGl0ZW0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBxLl90YXNrcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXByb2Nlc3NpbmdTY2hlZHVsZWQpIHtcbiAgICAgICAgICAgICAgICBwcm9jZXNzaW5nU2NoZWR1bGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUkMSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3NpbmdTY2hlZHVsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcS5wcm9jZXNzKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZWplY3RPbkVycm9yIHx8ICFjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlcyA9IHJlc29sdmU7XG4gICAgICAgICAgICAgICAgICAgIHJlaiA9IHJlamVjdDtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gX2NyZWF0ZUNCKHRhc2tzKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGVyciwgLi4uYXJncykge1xuICAgICAgICAgICAgICAgIG51bVJ1bm5pbmcgLT0gMTtcblxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gdGFza3MubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0YXNrID0gdGFza3NbaV07XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gd29ya2Vyc0xpc3QuaW5kZXhPZih0YXNrKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzTGlzdC5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Vyc0xpc3Quc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRhc2suY2FsbGJhY2soZXJyLCAuLi5hcmdzKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXIoJ2Vycm9yJywgZXJyLCB0YXNrLmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKG51bVJ1bm5pbmcgPD0gKHEuY29uY3VycmVuY3kgLSBxLmJ1ZmZlcikgKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXIoJ3Vuc2F0dXJhdGVkJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHEuaWRsZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXIoJ2RyYWluJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHEucHJvY2VzcygpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIF9tYXliZURyYWluKGRhdGEpIHtcbiAgICAgICAgICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMCAmJiBxLmlkbGUoKSkge1xuICAgICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlJDEoKCkgPT4gdHJpZ2dlcignZHJhaW4nKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXZlbnRNZXRob2QgPSAobmFtZSkgPT4gKGhhbmRsZXIpID0+IHtcbiAgICAgICAgICAgIGlmICghaGFuZGxlcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG9uY2UobmFtZSwgKGVyciwgZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycikgcmV0dXJuIHJlamVjdChlcnIpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb2ZmKG5hbWUpO1xuICAgICAgICAgICAgb24obmFtZSwgaGFuZGxlcik7XG5cbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgaXNQcm9jZXNzaW5nID0gZmFsc2U7XG4gICAgICAgIHZhciBxID0ge1xuICAgICAgICAgICAgX3Rhc2tzOiBuZXcgRExMKCksXG4gICAgICAgICAgICBfY3JlYXRlVGFza0l0ZW0gKGRhdGEsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICpbU3ltYm9sLml0ZXJhdG9yXSAoKSB7XG4gICAgICAgICAgICAgICAgeWllbGQqIHEuX3Rhc2tzW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb25jdXJyZW5jeSxcbiAgICAgICAgICAgIHBheWxvYWQsXG4gICAgICAgICAgICBidWZmZXI6IGNvbmN1cnJlbmN5IC8gNCxcbiAgICAgICAgICAgIHN0YXJ0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgcGF1c2VkOiBmYWxzZSxcbiAgICAgICAgICAgIHB1c2ggKGRhdGEsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9tYXliZURyYWluKGRhdGEpKSByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEubWFwKGRhdHVtID0+IF9pbnNlcnQoZGF0dW0sIGZhbHNlLCBmYWxzZSwgY2FsbGJhY2spKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gX2luc2VydChkYXRhLCBmYWxzZSwgZmFsc2UsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwdXNoQXN5bmMgKGRhdGEsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9tYXliZURyYWluKGRhdGEpKSByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEubWFwKGRhdHVtID0+IF9pbnNlcnQoZGF0dW0sIGZhbHNlLCB0cnVlLCBjYWxsYmFjaykpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBfaW5zZXJ0KGRhdGEsIGZhbHNlLCB0cnVlLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAga2lsbCAoKSB7XG4gICAgICAgICAgICAgICAgb2ZmKCk7XG4gICAgICAgICAgICAgICAgcS5fdGFza3MuZW1wdHkoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bnNoaWZ0IChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfbWF5YmVEcmFpbihkYXRhKSkgcmV0dXJuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhLm1hcChkYXR1bSA9PiBfaW5zZXJ0KGRhdHVtLCB0cnVlLCBmYWxzZSwgY2FsbGJhY2spKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gX2luc2VydChkYXRhLCB0cnVlLCBmYWxzZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVuc2hpZnRBc3luYyAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoX21heWJlRHJhaW4oZGF0YSkpIHJldHVyblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YS5tYXAoZGF0dW0gPT4gX2luc2VydChkYXR1bSwgdHJ1ZSwgdHJ1ZSwgY2FsbGJhY2spKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gX2luc2VydChkYXRhLCB0cnVlLCB0cnVlLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVtb3ZlICh0ZXN0Rm4pIHtcbiAgICAgICAgICAgICAgICBxLl90YXNrcy5yZW1vdmUodGVzdEZuKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9jZXNzICgpIHtcbiAgICAgICAgICAgICAgICAvLyBBdm9pZCB0cnlpbmcgdG8gc3RhcnQgdG9vIG1hbnkgcHJvY2Vzc2luZyBvcGVyYXRpb25zLiBUaGlzIGNhbiBvY2N1clxuICAgICAgICAgICAgICAgIC8vIHdoZW4gY2FsbGJhY2tzIHJlc29sdmUgc3luY2hyb25vdXNseSAoIzEyNjcpLlxuICAgICAgICAgICAgICAgIGlmIChpc1Byb2Nlc3NpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpc1Byb2Nlc3NpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHdoaWxlKCFxLnBhdXNlZCAmJiBudW1SdW5uaW5nIDwgcS5jb25jdXJyZW5jeSAmJiBxLl90YXNrcy5sZW5ndGgpe1xuICAgICAgICAgICAgICAgICAgICB2YXIgdGFza3MgPSBbXSwgZGF0YSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbCA9IHEuX3Rhc2tzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHEucGF5bG9hZCkgbCA9IE1hdGgubWluKGwsIHEucGF5bG9hZCk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IHEuX3Rhc2tzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXNrcy5wdXNoKG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Vyc0xpc3QucHVzaChub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEucHVzaChub2RlLmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgbnVtUnVubmluZyArPSAxO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChxLl90YXNrcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXIoJ2VtcHR5Jyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAobnVtUnVubmluZyA9PT0gcS5jb25jdXJyZW5jeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcignc2F0dXJhdGVkJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgY2IgPSBvbmx5T25jZShfY3JlYXRlQ0IodGFza3MpKTtcbiAgICAgICAgICAgICAgICAgICAgX3dvcmtlcihkYXRhLCBjYik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlzUHJvY2Vzc2luZyA9IGZhbHNlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlbmd0aCAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHEuX3Rhc2tzLmxlbmd0aDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBydW5uaW5nICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtUnVubmluZztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB3b3JrZXJzTGlzdCAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtlcnNMaXN0O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlkbGUoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHEuX3Rhc2tzLmxlbmd0aCArIG51bVJ1bm5pbmcgPT09IDA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGF1c2UgKCkge1xuICAgICAgICAgICAgICAgIHEucGF1c2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXN1bWUgKCkge1xuICAgICAgICAgICAgICAgIGlmIChxLnBhdXNlZCA9PT0gZmFsc2UpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUkMShxLnByb2Nlc3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICAvLyBkZWZpbmUgdGhlc2UgYXMgZml4ZWQgcHJvcGVydGllcywgc28gcGVvcGxlIGdldCB1c2VmdWwgZXJyb3JzIHdoZW4gdXBkYXRpbmdcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMocSwge1xuICAgICAgICAgICAgc2F0dXJhdGVkOiB7XG4gICAgICAgICAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBldmVudE1ldGhvZCgnc2F0dXJhdGVkJylcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bnNhdHVyYXRlZDoge1xuICAgICAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogZXZlbnRNZXRob2QoJ3Vuc2F0dXJhdGVkJylcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbXB0eToge1xuICAgICAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogZXZlbnRNZXRob2QoJ2VtcHR5JylcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkcmFpbjoge1xuICAgICAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogZXZlbnRNZXRob2QoJ2RyYWluJylcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvcjoge1xuICAgICAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogZXZlbnRNZXRob2QoJ2Vycm9yJylcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgYGNhcmdvYCBvYmplY3Qgd2l0aCB0aGUgc3BlY2lmaWVkIHBheWxvYWQuIFRhc2tzIGFkZGVkIHRvIHRoZVxuICAgICAqIGNhcmdvIHdpbGwgYmUgcHJvY2Vzc2VkIGFsdG9nZXRoZXIgKHVwIHRvIHRoZSBgcGF5bG9hZGAgbGltaXQpLiBJZiB0aGVcbiAgICAgKiBgd29ya2VyYCBpcyBpbiBwcm9ncmVzcywgdGhlIHRhc2sgaXMgcXVldWVkIHVudGlsIGl0IGJlY29tZXMgYXZhaWxhYmxlLiBPbmNlXG4gICAgICogdGhlIGB3b3JrZXJgIGhhcyBjb21wbGV0ZWQgc29tZSB0YXNrcywgZWFjaCBjYWxsYmFjayBvZiB0aG9zZSB0YXNrcyBpc1xuICAgICAqIGNhbGxlZC4gQ2hlY2sgb3V0IFt0aGVzZV0oaHR0cHM6Ly9jYW1vLmdpdGh1YnVzZXJjb250ZW50LmNvbS82YmJkMzZmNGNmNWIzNWEwZjExYTk2ZGNkMmU5NzcxMWZmYzJmYjM3LzY4NzQ3NDcwNzMzYTJmMmY2NjJlNjM2YzZmNzU2NDJlNjc2OTc0Njg3NTYyMmU2MzZmNmQyZjYxNzM3MzY1NzQ3MzJmMzEzNjM3MzYzODM3MzEyZjM2MzgzMTMwMzgyZjYyNjI2MzMwNjM2NjYyMzAyZDM1NjYzMjM5MmQzMTMxNjUzMjJkMzkzNzM0NjYyZDMzMzMzOTM3NjMzNjM0NjQ2MzM4MzUzODJlNjc2OTY2KSBbYW5pbWF0aW9uc10oaHR0cHM6Ly9jYW1vLmdpdGh1YnVzZXJjb250ZW50LmNvbS9mNDgxMGUwMGUxYzVmNWY4YWRkYmUzZTlmNDkwNjRmZDVkMTAyNjk5LzY4NzQ3NDcwNzMzYTJmMmY2NjJlNjM2YzZmNzU2NDJlNjc2OTc0Njg3NTYyMmU2MzZmNmQyZjYxNzM3MzY1NzQ3MzJmMzEzNjM3MzYzODM3MzEyZjM2MzgzMTMwMzEyZjM4MzQ2MzM5MzIzMDM2MzYyZDM1NjYzMjM5MmQzMTMxNjUzMjJkMzgzMTM0NjYyZDM5NjQzMzY0MzAzMjM0MzEzMzYyNjY2NDJlNjc2OTY2KVxuICAgICAqIGZvciBob3cgYGNhcmdvYCBhbmQgYHF1ZXVlYCB3b3JrLlxuICAgICAqXG4gICAgICogV2hpbGUgW2BxdWV1ZWBde0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy5xdWV1ZX0gcGFzc2VzIG9ubHkgb25lIHRhc2sgdG8gb25lIG9mIGEgZ3JvdXAgb2Ygd29ya2Vyc1xuICAgICAqIGF0IGEgdGltZSwgY2FyZ28gcGFzc2VzIGFuIGFycmF5IG9mIHRhc2tzIHRvIGEgc2luZ2xlIHdvcmtlciwgcmVwZWF0aW5nXG4gICAgICogd2hlbiB0aGUgd29ya2VyIGlzIGZpbmlzaGVkLlxuICAgICAqXG4gICAgICogQG5hbWUgY2FyZ29cbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb250cm9sRmxvd1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5xdWV1ZV17QGxpbmsgbW9kdWxlOkNvbnRyb2xGbG93LnF1ZXVlfVxuICAgICAqIEBjYXRlZ29yeSBDb250cm9sIEZsb3dcbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IHdvcmtlciAtIEFuIGFzeW5jaHJvbm91cyBmdW5jdGlvbiBmb3IgcHJvY2Vzc2luZyBhbiBhcnJheVxuICAgICAqIG9mIHF1ZXVlZCB0YXNrcy4gSW52b2tlZCB3aXRoIGAodGFza3MsIGNhbGxiYWNrKWAuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtwYXlsb2FkPUluZmluaXR5XSAtIEFuIG9wdGlvbmFsIGBpbnRlZ2VyYCBmb3IgZGV0ZXJtaW5pbmdcbiAgICAgKiBob3cgbWFueSB0YXNrcyBzaG91bGQgYmUgcHJvY2Vzc2VkIHBlciByb3VuZDsgaWYgb21pdHRlZCwgdGhlIGRlZmF1bHQgaXNcbiAgICAgKiB1bmxpbWl0ZWQuXG4gICAgICogQHJldHVybnMge21vZHVsZTpDb250cm9sRmxvdy5RdWV1ZU9iamVjdH0gQSBjYXJnbyBvYmplY3QgdG8gbWFuYWdlIHRoZSB0YXNrcy4gQ2FsbGJhY2tzIGNhblxuICAgICAqIGF0dGFjaGVkIGFzIGNlcnRhaW4gcHJvcGVydGllcyB0byBsaXN0ZW4gZm9yIHNwZWNpZmljIGV2ZW50cyBkdXJpbmcgdGhlXG4gICAgICogbGlmZWN5Y2xlIG9mIHRoZSBjYXJnbyBhbmQgaW5uZXIgcXVldWUuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vIGNyZWF0ZSBhIGNhcmdvIG9iamVjdCB3aXRoIHBheWxvYWQgMlxuICAgICAqIHZhciBjYXJnbyA9IGFzeW5jLmNhcmdvKGZ1bmN0aW9uKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAqICAgICBmb3IgKHZhciBpPTA7IGk8dGFza3MubGVuZ3RoOyBpKyspIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKCdoZWxsbyAnICsgdGFza3NbaV0ubmFtZSk7XG4gICAgICogICAgIH1cbiAgICAgKiAgICAgY2FsbGJhY2soKTtcbiAgICAgKiB9LCAyKTtcbiAgICAgKlxuICAgICAqIC8vIGFkZCBzb21lIGl0ZW1zXG4gICAgICogY2FyZ28ucHVzaCh7bmFtZTogJ2Zvbyd9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coJ2ZpbmlzaGVkIHByb2Nlc3NpbmcgZm9vJyk7XG4gICAgICogfSk7XG4gICAgICogY2FyZ28ucHVzaCh7bmFtZTogJ2Jhcid9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coJ2ZpbmlzaGVkIHByb2Nlc3NpbmcgYmFyJyk7XG4gICAgICogfSk7XG4gICAgICogYXdhaXQgY2FyZ28ucHVzaCh7bmFtZTogJ2Jheid9KTtcbiAgICAgKiBjb25zb2xlLmxvZygnZmluaXNoZWQgcHJvY2Vzc2luZyBiYXonKTtcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjYXJnbyQxKHdvcmtlciwgcGF5bG9hZCkge1xuICAgICAgICByZXR1cm4gcXVldWUkMSh3b3JrZXIsIDEsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBgY2FyZ29RdWV1ZWAgb2JqZWN0IHdpdGggdGhlIHNwZWNpZmllZCBwYXlsb2FkLiBUYXNrcyBhZGRlZCB0byB0aGVcbiAgICAgKiBjYXJnb1F1ZXVlIHdpbGwgYmUgcHJvY2Vzc2VkIHRvZ2V0aGVyICh1cCB0byB0aGUgYHBheWxvYWRgIGxpbWl0KSBpbiBgY29uY3VycmVuY3lgIHBhcmFsbGVsIHdvcmtlcnMuXG4gICAgICogSWYgdGhlIGFsbCBgd29ya2Vyc2AgYXJlIGluIHByb2dyZXNzLCB0aGUgdGFzayBpcyBxdWV1ZWQgdW50aWwgb25lIGJlY29tZXMgYXZhaWxhYmxlLiBPbmNlXG4gICAgICogYSBgd29ya2VyYCBoYXMgY29tcGxldGVkIHNvbWUgdGFza3MsIGVhY2ggY2FsbGJhY2sgb2YgdGhvc2UgdGFza3MgaXNcbiAgICAgKiBjYWxsZWQuIENoZWNrIG91dCBbdGhlc2VdKGh0dHBzOi8vY2Ftby5naXRodWJ1c2VyY29udGVudC5jb20vNmJiZDM2ZjRjZjViMzVhMGYxMWE5NmRjZDJlOTc3MTFmZmMyZmIzNy82ODc0NzQ3MDczM2EyZjJmNjYyZTYzNmM2Zjc1NjQyZTY3Njk3NDY4NzU2MjJlNjM2ZjZkMmY2MTczNzM2NTc0NzMyZjMxMzYzNzM2MzgzNzMxMmYzNjM4MzEzMDM4MmY2MjYyNjMzMDYzNjY2MjMwMmQzNTY2MzIzOTJkMzEzMTY1MzIyZDM5MzczNDY2MmQzMzMzMzkzNzYzMzYzNDY0NjMzODM1MzgyZTY3Njk2NikgW2FuaW1hdGlvbnNdKGh0dHBzOi8vY2Ftby5naXRodWJ1c2VyY29udGVudC5jb20vZjQ4MTBlMDBlMWM1ZjVmOGFkZGJlM2U5ZjQ5MDY0ZmQ1ZDEwMjY5OS82ODc0NzQ3MDczM2EyZjJmNjYyZTYzNmM2Zjc1NjQyZTY3Njk3NDY4NzU2MjJlNjM2ZjZkMmY2MTczNzM2NTc0NzMyZjMxMzYzNzM2MzgzNzMxMmYzNjM4MzEzMDMxMmYzODM0NjMzOTMyMzAzNjM2MmQzNTY2MzIzOTJkMzEzMTY1MzIyZDM4MzEzNDY2MmQzOTY0MzM2NDMwMzIzNDMxMzM2MjY2NjQyZTY3Njk2NilcbiAgICAgKiBmb3IgaG93IGBjYXJnb2AgYW5kIGBxdWV1ZWAgd29yay5cbiAgICAgKlxuICAgICAqIFdoaWxlIFtgcXVldWVgXXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cucXVldWV9IHBhc3NlcyBvbmx5IG9uZSB0YXNrIHRvIG9uZSBvZiBhIGdyb3VwIG9mIHdvcmtlcnNcbiAgICAgKiBhdCBhIHRpbWUsIGFuZCBbYGNhcmdvYF17QGxpbmsgbW9kdWxlOkNvbnRyb2xGbG93LmNhcmdvfSBwYXNzZXMgYW4gYXJyYXkgb2YgdGFza3MgdG8gYSBzaW5nbGUgd29ya2VyLFxuICAgICAqIHRoZSBjYXJnb1F1ZXVlIHBhc3NlcyBhbiBhcnJheSBvZiB0YXNrcyB0byBtdWx0aXBsZSBwYXJhbGxlbCB3b3JrZXJzLlxuICAgICAqXG4gICAgICogQG5hbWUgY2FyZ29RdWV1ZVxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbnRyb2xGbG93XG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLnF1ZXVlXXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cucXVldWV9XG4gICAgICogQHNlZSBbYXN5bmMuY2FyZ29de0BsaW5rIG1vZHVsZTpDb250cm9sRkxvdy5jYXJnb31cbiAgICAgKiBAY2F0ZWdvcnkgQ29udHJvbCBGbG93XG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSB3b3JrZXIgLSBBbiBhc3luY2hyb25vdXMgZnVuY3Rpb24gZm9yIHByb2Nlc3NpbmcgYW4gYXJyYXlcbiAgICAgKiBvZiBxdWV1ZWQgdGFza3MuIEludm9rZWQgd2l0aCBgKHRhc2tzLCBjYWxsYmFjaylgLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbY29uY3VycmVuY3k9MV0gLSBBbiBgaW50ZWdlcmAgZm9yIGRldGVybWluaW5nIGhvdyBtYW55XG4gICAgICogYHdvcmtlcmAgZnVuY3Rpb25zIHNob3VsZCBiZSBydW4gaW4gcGFyYWxsZWwuICBJZiBvbWl0dGVkLCB0aGUgY29uY3VycmVuY3lcbiAgICAgKiBkZWZhdWx0cyB0byBgMWAuICBJZiB0aGUgY29uY3VycmVuY3kgaXMgYDBgLCBhbiBlcnJvciBpcyB0aHJvd24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtwYXlsb2FkPUluZmluaXR5XSAtIEFuIG9wdGlvbmFsIGBpbnRlZ2VyYCBmb3IgZGV0ZXJtaW5pbmdcbiAgICAgKiBob3cgbWFueSB0YXNrcyBzaG91bGQgYmUgcHJvY2Vzc2VkIHBlciByb3VuZDsgaWYgb21pdHRlZCwgdGhlIGRlZmF1bHQgaXNcbiAgICAgKiB1bmxpbWl0ZWQuXG4gICAgICogQHJldHVybnMge21vZHVsZTpDb250cm9sRmxvdy5RdWV1ZU9iamVjdH0gQSBjYXJnb1F1ZXVlIG9iamVjdCB0byBtYW5hZ2UgdGhlIHRhc2tzLiBDYWxsYmFja3MgY2FuXG4gICAgICogYXR0YWNoZWQgYXMgY2VydGFpbiBwcm9wZXJ0aWVzIHRvIGxpc3RlbiBmb3Igc3BlY2lmaWMgZXZlbnRzIGR1cmluZyB0aGVcbiAgICAgKiBsaWZlY3ljbGUgb2YgdGhlIGNhcmdvUXVldWUgYW5kIGlubmVyIHF1ZXVlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBjcmVhdGUgYSBjYXJnb1F1ZXVlIG9iamVjdCB3aXRoIHBheWxvYWQgMiBhbmQgY29uY3VycmVuY3kgMlxuICAgICAqIHZhciBjYXJnb1F1ZXVlID0gYXN5bmMuY2FyZ29RdWV1ZShmdW5jdGlvbih0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgZm9yICh2YXIgaT0wOyBpPHRhc2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZygnaGVsbG8gJyArIHRhc2tzW2ldLm5hbWUpO1xuICAgICAqICAgICB9XG4gICAgICogICAgIGNhbGxiYWNrKCk7XG4gICAgICogfSwgMiwgMik7XG4gICAgICpcbiAgICAgKiAvLyBhZGQgc29tZSBpdGVtc1xuICAgICAqIGNhcmdvUXVldWUucHVzaCh7bmFtZTogJ2Zvbyd9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coJ2ZpbmlzaGVkIHByb2Nlc3NpbmcgZm9vJyk7XG4gICAgICogfSk7XG4gICAgICogY2FyZ29RdWV1ZS5wdXNoKHtuYW1lOiAnYmFyJ30sIGZ1bmN0aW9uKGVycikge1xuICAgICAqICAgICBjb25zb2xlLmxvZygnZmluaXNoZWQgcHJvY2Vzc2luZyBiYXInKTtcbiAgICAgKiB9KTtcbiAgICAgKiBjYXJnb1F1ZXVlLnB1c2goe25hbWU6ICdiYXonfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKCdmaW5pc2hlZCBwcm9jZXNzaW5nIGJheicpO1xuICAgICAqIH0pO1xuICAgICAqIGNhcmdvUXVldWUucHVzaCh7bmFtZTogJ2Jvbyd9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coJ2ZpbmlzaGVkIHByb2Nlc3NpbmcgYm9vJyk7XG4gICAgICogfSk7XG4gICAgICovXG4gICAgZnVuY3Rpb24gY2FyZ28od29ya2VyLCBjb25jdXJyZW5jeSwgcGF5bG9hZCkge1xuICAgICAgICByZXR1cm4gcXVldWUkMSh3b3JrZXIsIGNvbmN1cnJlbmN5LCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWR1Y2VzIGBjb2xsYCBpbnRvIGEgc2luZ2xlIHZhbHVlIHVzaW5nIGFuIGFzeW5jIGBpdGVyYXRlZWAgdG8gcmV0dXJuIGVhY2hcbiAgICAgKiBzdWNjZXNzaXZlIHN0ZXAuIGBtZW1vYCBpcyB0aGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgcmVkdWN0aW9uLiBUaGlzIGZ1bmN0aW9uXG4gICAgICogb25seSBvcGVyYXRlcyBpbiBzZXJpZXMuXG4gICAgICpcbiAgICAgKiBGb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgaXQgbWF5IG1ha2Ugc2Vuc2UgdG8gc3BsaXQgYSBjYWxsIHRvIHRoaXMgZnVuY3Rpb25cbiAgICAgKiBpbnRvIGEgcGFyYWxsZWwgbWFwLCBhbmQgdGhlbiB1c2UgdGhlIG5vcm1hbCBgQXJyYXkucHJvdG90eXBlLnJlZHVjZWAgb24gdGhlXG4gICAgICogcmVzdWx0cy4gVGhpcyBmdW5jdGlvbiBpcyBmb3Igc2l0dWF0aW9ucyB3aGVyZSBlYWNoIHN0ZXAgaW4gdGhlIHJlZHVjdGlvblxuICAgICAqIG5lZWRzIHRvIGJlIGFzeW5jOyBpZiB5b3UgY2FuIGdldCB0aGUgZGF0YSBiZWZvcmUgcmVkdWNpbmcgaXQsIHRoZW4gaXQnc1xuICAgICAqIHByb2JhYmx5IGEgZ29vZCBpZGVhIHRvIGRvIHNvLlxuICAgICAqXG4gICAgICogQG5hbWUgcmVkdWNlXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGFsaWFzIGluamVjdFxuICAgICAqIEBhbGlhcyBmb2xkbFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHsqfSBtZW1vIC0gVGhlIGluaXRpYWwgc3RhdGUgb2YgdGhlIHJlZHVjdGlvbi5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQSBmdW5jdGlvbiBhcHBsaWVkIHRvIGVhY2ggaXRlbSBpbiB0aGVcbiAgICAgKiBhcnJheSB0byBwcm9kdWNlIHRoZSBuZXh0IHN0ZXAgaW4gdGhlIHJlZHVjdGlvbi5cbiAgICAgKiBUaGUgYGl0ZXJhdGVlYCBzaG91bGQgY29tcGxldGUgd2l0aCB0aGUgbmV4dCBzdGF0ZSBvZiB0aGUgcmVkdWN0aW9uLlxuICAgICAqIElmIHRoZSBpdGVyYXRlZSBjb21wbGV0ZXMgd2l0aCBhbiBlcnJvciwgdGhlIHJlZHVjdGlvbiBpcyBzdG9wcGVkIGFuZCB0aGVcbiAgICAgKiBtYWluIGBjYWxsYmFja2AgaXMgaW1tZWRpYXRlbHkgY2FsbGVkIHdpdGggdGhlIGVycm9yLlxuICAgICAqIEludm9rZWQgd2l0aCAobWVtbywgaXRlbSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCBhZnRlciBhbGwgdGhlXG4gICAgICogYGl0ZXJhdGVlYCBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZC4gUmVzdWx0IGlzIHRoZSByZWR1Y2VkIHZhbHVlLiBJbnZva2VkIHdpdGhcbiAgICAgKiAoZXJyLCByZXN1bHQpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIG5vIGNhbGxiYWNrIGlzIHBhc3NlZFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBmaWxlMS50eHQgaXMgYSBmaWxlIHRoYXQgaXMgMTAwMCBieXRlcyBpbiBzaXplXG4gICAgICogLy8gZmlsZTIudHh0IGlzIGEgZmlsZSB0aGF0IGlzIDIwMDAgYnl0ZXMgaW4gc2l6ZVxuICAgICAqIC8vIGZpbGUzLnR4dCBpcyBhIGZpbGUgdGhhdCBpcyAzMDAwIGJ5dGVzIGluIHNpemVcbiAgICAgKiAvLyBmaWxlNC50eHQgZG9lcyBub3QgZXhpc3RcbiAgICAgKlxuICAgICAqIGNvbnN0IGZpbGVMaXN0ID0gWydmaWxlMS50eHQnLCdmaWxlMi50eHQnLCdmaWxlMy50eHQnXTtcbiAgICAgKiBjb25zdCB3aXRoTWlzc2luZ0ZpbGVMaXN0ID0gWydmaWxlMS50eHQnLCdmaWxlMi50eHQnLCdmaWxlMy50eHQnLCAnZmlsZTQudHh0J107XG4gICAgICpcbiAgICAgKiAvLyBhc3luY2hyb25vdXMgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyB0aGUgZmlsZSBzaXplIGluIGJ5dGVzXG4gICAgICogLy8gZmlsZSBzaXplIGlzIGFkZGVkIHRvIHRoZSBtZW1vaXplZCB2YWx1ZSwgdGhlbiByZXR1cm5lZFxuICAgICAqIGZ1bmN0aW9uIGdldEZpbGVTaXplSW5CeXRlcyhtZW1vLCBmaWxlLCBjYWxsYmFjaykge1xuICAgICAqICAgICBmcy5zdGF0KGZpbGUsIGZ1bmN0aW9uKGVyciwgc3RhdCkge1xuICAgICAqICAgICAgICAgaWYgKGVycikge1xuICAgICAqICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAqICAgICAgICAgfVxuICAgICAqICAgICAgICAgY2FsbGJhY2sobnVsbCwgbWVtbyArIHN0YXQuc2l6ZSk7XG4gICAgICogICAgIH0pO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIGNhbGxiYWNrc1xuICAgICAqIGFzeW5jLnJlZHVjZShmaWxlTGlzdCwgMCwgZ2V0RmlsZVNpemVJbkJ5dGVzLCBmdW5jdGlvbihlcnIsIHJlc3VsdCkge1xuICAgICAqICAgICBpZiAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9IGVsc2Uge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgICAgIC8vIDYwMDBcbiAgICAgKiAgICAgICAgIC8vIHdoaWNoIGlzIHRoZSBzdW0gb2YgdGhlIGZpbGUgc2l6ZXMgb2YgdGhlIHRocmVlIGZpbGVzXG4gICAgICogICAgIH1cbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIEVycm9yIEhhbmRsaW5nXG4gICAgICogYXN5bmMucmVkdWNlKHdpdGhNaXNzaW5nRmlsZUxpc3QsIDAsIGdldEZpbGVTaXplSW5CeXRlcywgZnVuY3Rpb24oZXJyLCByZXN1bHQpIHtcbiAgICAgKiAgICAgaWYgKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgICAgIC8vIFsgRXJyb3I6IEVOT0VOVDogbm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSBdXG4gICAgICogICAgIH0gZWxzZSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICB9XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBQcm9taXNlc1xuICAgICAqIGFzeW5jLnJlZHVjZShmaWxlTGlzdCwgMCwgZ2V0RmlsZVNpemVJbkJ5dGVzKVxuICAgICAqIC50aGVuKCByZXN1bHQgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAvLyA2MDAwXG4gICAgICogICAgIC8vIHdoaWNoIGlzIHRoZSBzdW0gb2YgdGhlIGZpbGUgc2l6ZXMgb2YgdGhlIHRocmVlIGZpbGVzXG4gICAgICogfSkuY2F0Y2goIGVyciA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBFcnJvciBIYW5kbGluZ1xuICAgICAqIGFzeW5jLnJlZHVjZSh3aXRoTWlzc2luZ0ZpbGVMaXN0LCAwLCBnZXRGaWxlU2l6ZUluQnl0ZXMpXG4gICAgICogLnRoZW4oIHJlc3VsdCA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XG4gICAgICogfSkuY2F0Y2goIGVyciA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgIC8vIFsgRXJyb3I6IEVOT0VOVDogbm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSBdXG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBhc3luYy9hd2FpdFxuICAgICAqIGFzeW5jICgpID0+IHtcbiAgICAgKiAgICAgdHJ5IHtcbiAgICAgKiAgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBhc3luYy5yZWR1Y2UoZmlsZUxpc3QsIDAsIGdldEZpbGVTaXplSW5CeXRlcyk7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAgICAgLy8gNjAwMFxuICAgICAqICAgICAgICAgLy8gd2hpY2ggaXMgdGhlIHN1bSBvZiB0aGUgZmlsZSBzaXplcyBvZiB0aGUgdGhyZWUgZmlsZXNcbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICogLy8gRXJyb3IgSGFuZGxpbmdcbiAgICAgKiBhc3luYyAoKSA9PiB7XG4gICAgICogICAgIHRyeSB7XG4gICAgICogICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgYXN5bmMucmVkdWNlKHdpdGhNaXNzaW5nRmlsZUxpc3QsIDAsIGdldEZpbGVTaXplSW5CeXRlcyk7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICB9XG4gICAgICogICAgIGNhdGNoIChlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgICAgICAvLyBbIEVycm9yOiBFTk9FTlQ6IG5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkgXVxuICAgICAqICAgICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICovXG4gICAgZnVuY3Rpb24gcmVkdWNlKGNvbGwsIG1lbW8sIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IG9uY2UoY2FsbGJhY2spO1xuICAgICAgICB2YXIgX2l0ZXJhdGVlID0gd3JhcEFzeW5jKGl0ZXJhdGVlKTtcbiAgICAgICAgcmV0dXJuIGVhY2hPZlNlcmllcyQxKGNvbGwsICh4LCBpLCBpdGVyQ2IpID0+IHtcbiAgICAgICAgICAgIF9pdGVyYXRlZShtZW1vLCB4LCAoZXJyLCB2KSA9PiB7XG4gICAgICAgICAgICAgICAgbWVtbyA9IHY7XG4gICAgICAgICAgICAgICAgaXRlckNiKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZXJyID0+IGNhbGxiYWNrKGVyciwgbWVtbykpO1xuICAgIH1cbiAgICB2YXIgcmVkdWNlJDEgPSBhd2FpdGlmeShyZWR1Y2UsIDQpO1xuXG4gICAgLyoqXG4gICAgICogVmVyc2lvbiBvZiB0aGUgY29tcG9zZSBmdW5jdGlvbiB0aGF0IGlzIG1vcmUgbmF0dXJhbCB0byByZWFkLiBFYWNoIGZ1bmN0aW9uXG4gICAgICogY29uc3VtZXMgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgcHJldmlvdXMgZnVuY3Rpb24uIEl0IGlzIHRoZSBlcXVpdmFsZW50IG9mXG4gICAgICogW2NvbXBvc2Vde0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy5jb21wb3NlfSB3aXRoIHRoZSBhcmd1bWVudHMgcmV2ZXJzZWQuXG4gICAgICpcbiAgICAgKiBFYWNoIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIHRoZSBjb21wb3NlZCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBuYW1lIHNlcVxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbnRyb2xGbG93XG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLmNvbXBvc2Vde0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy5jb21wb3NlfVxuICAgICAqIEBjYXRlZ29yeSBDb250cm9sIEZsb3dcbiAgICAgKiBAcGFyYW0gey4uLkFzeW5jRnVuY3Rpb259IGZ1bmN0aW9ucyAtIHRoZSBhc3luY2hyb25vdXMgZnVuY3Rpb25zIHRvIGNvbXBvc2VcbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IGEgZnVuY3Rpb24gdGhhdCBjb21wb3NlcyB0aGUgYGZ1bmN0aW9uc2AgaW4gb3JkZXJcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gUmVxdWlyZXMgbG9kYXNoIChvciB1bmRlcnNjb3JlKSwgZXhwcmVzczMgYW5kIGRyZXNlbmRlJ3Mgb3JtMi5cbiAgICAgKiAvLyBQYXJ0IG9mIGFuIGFwcCwgdGhhdCBmZXRjaGVzIGNhdHMgb2YgdGhlIGxvZ2dlZCB1c2VyLlxuICAgICAqIC8vIFRoaXMgZXhhbXBsZSB1c2VzIGBzZXFgIGZ1bmN0aW9uIHRvIGF2b2lkIG92ZXJuZXN0aW5nIGFuZCBlcnJvclxuICAgICAqIC8vIGhhbmRsaW5nIGNsdXR0ZXIuXG4gICAgICogYXBwLmdldCgnL2NhdHMnLCBmdW5jdGlvbihyZXF1ZXN0LCByZXNwb25zZSkge1xuICAgICAqICAgICB2YXIgVXNlciA9IHJlcXVlc3QubW9kZWxzLlVzZXI7XG4gICAgICogICAgIGFzeW5jLnNlcShcbiAgICAgKiAgICAgICAgIFVzZXIuZ2V0LmJpbmQoVXNlciksICAvLyAnVXNlci5nZXQnIGhhcyBzaWduYXR1cmUgKGlkLCBjYWxsYmFjayhlcnIsIGRhdGEpKVxuICAgICAqICAgICAgICAgZnVuY3Rpb24odXNlciwgZm4pIHtcbiAgICAgKiAgICAgICAgICAgICB1c2VyLmdldENhdHMoZm4pOyAgICAgIC8vICdnZXRDYXRzJyBoYXMgc2lnbmF0dXJlIChjYWxsYmFjayhlcnIsIGRhdGEpKVxuICAgICAqICAgICAgICAgfVxuICAgICAqICAgICApKHJlcS5zZXNzaW9uLnVzZXJfaWQsIGZ1bmN0aW9uIChlcnIsIGNhdHMpIHtcbiAgICAgKiAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgKiAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICogICAgICAgICAgICAgcmVzcG9uc2UuanNvbih7IHN0YXR1czogJ2Vycm9yJywgbWVzc2FnZTogZXJyLm1lc3NhZ2UgfSk7XG4gICAgICogICAgICAgICB9IGVsc2Uge1xuICAgICAqICAgICAgICAgICAgIHJlc3BvbnNlLmpzb24oeyBzdGF0dXM6ICdvaycsIG1lc3NhZ2U6ICdDYXRzIGZvdW5kJywgZGF0YTogY2F0cyB9KTtcbiAgICAgKiAgICAgICAgIH1cbiAgICAgKiAgICAgfSk7XG4gICAgICogfSk7XG4gICAgICovXG4gICAgZnVuY3Rpb24gc2VxKC4uLmZ1bmN0aW9ucykge1xuICAgICAgICB2YXIgX2Z1bmN0aW9ucyA9IGZ1bmN0aW9ucy5tYXAod3JhcEFzeW5jKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG5cbiAgICAgICAgICAgIHZhciBjYiA9IGFyZ3NbYXJncy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY2IgPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIGFyZ3MucG9wKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNiID0gcHJvbWlzZUNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlZHVjZSQxKF9mdW5jdGlvbnMsIGFyZ3MsIChuZXdhcmdzLCBmbiwgaXRlckNiKSA9PiB7XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgbmV3YXJncy5jb25jYXQoKGVyciwgLi4ubmV4dGFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaXRlckNiKGVyciwgbmV4dGFyZ3MpO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAoZXJyLCByZXN1bHRzKSA9PiBjYihlcnIsIC4uLnJlc3VsdHMpKTtcblxuICAgICAgICAgICAgcmV0dXJuIGNiW1BST01JU0VfU1lNQk9MXVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB3aGljaCBpcyBhIGNvbXBvc2l0aW9uIG9mIHRoZSBwYXNzZWQgYXN5bmNocm9ub3VzXG4gICAgICogZnVuY3Rpb25zLiBFYWNoIGZ1bmN0aW9uIGNvbnN1bWVzIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uIHRoYXRcbiAgICAgKiBmb2xsb3dzLiBDb21wb3NpbmcgZnVuY3Rpb25zIGBmKClgLCBgZygpYCwgYW5kIGBoKClgIHdvdWxkIHByb2R1Y2UgdGhlIHJlc3VsdFxuICAgICAqIG9mIGBmKGcoaCgpKSlgLCBvbmx5IHRoaXMgdmVyc2lvbiB1c2VzIGNhbGxiYWNrcyB0byBvYnRhaW4gdGhlIHJldHVybiB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBJZiB0aGUgbGFzdCBhcmd1bWVudCB0byB0aGUgY29tcG9zZWQgZnVuY3Rpb24gaXMgbm90IGEgZnVuY3Rpb24sIGEgcHJvbWlzZVxuICAgICAqIGlzIHJldHVybmVkIHdoZW4geW91IGNhbGwgaXQuXG4gICAgICpcbiAgICAgKiBFYWNoIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIHRoZSBjb21wb3NlZCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBuYW1lIGNvbXBvc2VcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb250cm9sRmxvd1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgQ29udHJvbCBGbG93XG4gICAgICogQHBhcmFtIHsuLi5Bc3luY0Z1bmN0aW9ufSBmdW5jdGlvbnMgLSB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9ucyB0byBjb21wb3NlXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBhbiBhc3luY2hyb25vdXMgZnVuY3Rpb24gdGhhdCBpcyB0aGUgY29tcG9zZWRcbiAgICAgKiBhc3luY2hyb25vdXMgYGZ1bmN0aW9uc2BcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gYWRkMShuLCBjYWxsYmFjaykge1xuICAgICAqICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsIG4gKyAxKTtcbiAgICAgKiAgICAgfSwgMTApO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIG11bDMobiwgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCBuICogMyk7XG4gICAgICogICAgIH0sIDEwKTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiB2YXIgYWRkMW11bDMgPSBhc3luYy5jb21wb3NlKG11bDMsIGFkZDEpO1xuICAgICAqIGFkZDFtdWwzKDQsIGZ1bmN0aW9uIChlcnIsIHJlc3VsdCkge1xuICAgICAqICAgICAvLyByZXN1bHQgbm93IGVxdWFscyAxNVxuICAgICAqIH0pO1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbXBvc2UoLi4uYXJncykge1xuICAgICAgICByZXR1cm4gc2VxKC4uLmFyZ3MucmV2ZXJzZSgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyBbYG1hcGBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5tYXB9IGJ1dCBydW5zIGEgbWF4aW11bSBvZiBgbGltaXRgIGFzeW5jIG9wZXJhdGlvbnMgYXQgYSB0aW1lLlxuICAgICAqXG4gICAgICogQG5hbWUgbWFwTGltaXRcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5tYXBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5tYXB9XG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfEFzeW5jSXRlcmFibGV8T2JqZWN0fSBjb2xsIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbGltaXQgLSBUaGUgbWF4aW11bSBudW1iZXIgb2YgYXN5bmMgb3BlcmF0aW9ucyBhdCBhIHRpbWUuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEFuIGFzeW5jIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggaXRlbSBpblxuICAgICAqIGBjb2xsYC5cbiAgICAgKiBUaGUgaXRlcmF0ZWUgc2hvdWxkIGNvbXBsZXRlIHdpdGggdGhlIHRyYW5zZm9ybWVkIGl0ZW0uXG4gICAgICogSW52b2tlZCB3aXRoIChpdGVtLCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIHdoZW4gYWxsIGBpdGVyYXRlZWBcbiAgICAgKiBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZCwgb3IgYW4gZXJyb3Igb2NjdXJzLiBSZXN1bHRzIGlzIGFuIGFycmF5IG9mIHRoZVxuICAgICAqIHRyYW5zZm9ybWVkIGl0ZW1zIGZyb20gdGhlIGBjb2xsYC4gSW52b2tlZCB3aXRoIChlcnIsIHJlc3VsdHMpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIG5vIGNhbGxiYWNrIGlzIHBhc3NlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1hcExpbWl0IChjb2xsLCBsaW1pdCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBfYXN5bmNNYXAoZWFjaE9mTGltaXQkMihsaW1pdCksIGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaylcbiAgICB9XG4gICAgdmFyIG1hcExpbWl0JDEgPSBhd2FpdGlmeShtYXBMaW1pdCwgNCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyBbYGNvbmNhdGBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5jb25jYXR9IGJ1dCBydW5zIGEgbWF4aW11bSBvZiBgbGltaXRgIGFzeW5jIG9wZXJhdGlvbnMgYXQgYSB0aW1lLlxuICAgICAqXG4gICAgICogQG5hbWUgY29uY2F0TGltaXRcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5jb25jYXRde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5jb25jYXR9XG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAYWxpYXMgZmxhdE1hcExpbWl0XG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbWl0IC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGFzeW5jIG9wZXJhdGlvbnMgYXQgYSB0aW1lLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggaXRlbSBpbiBgY29sbGAsXG4gICAgICogd2hpY2ggc2hvdWxkIHVzZSBhbiBhcnJheSBhcyBpdHMgcmVzdWx0LiBJbnZva2VkIHdpdGggKGl0ZW0sIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgYWZ0ZXIgYWxsIHRoZVxuICAgICAqIGBpdGVyYXRlZWAgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQsIG9yIGFuIGVycm9yIG9jY3Vycy4gUmVzdWx0cyBpcyBhbiBhcnJheVxuICAgICAqIGNvbnRhaW5pbmcgdGhlIGNvbmNhdGVuYXRlZCByZXN1bHRzIG9mIHRoZSBgaXRlcmF0ZWVgIGZ1bmN0aW9uLiBJbnZva2VkIHdpdGhcbiAgICAgKiAoZXJyLCByZXN1bHRzKS5cbiAgICAgKiBAcmV0dXJucyBBIFByb21pc2UsIGlmIG5vIGNhbGxiYWNrIGlzIHBhc3NlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbmNhdExpbWl0KGNvbGwsIGxpbWl0LCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIF9pdGVyYXRlZSA9IHdyYXBBc3luYyhpdGVyYXRlZSk7XG4gICAgICAgIHJldHVybiBtYXBMaW1pdCQxKGNvbGwsIGxpbWl0LCAodmFsLCBpdGVyQ2IpID0+IHtcbiAgICAgICAgICAgIF9pdGVyYXRlZSh2YWwsIChlcnIsIC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gaXRlckNiKGVycik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZXJDYihlcnIsIGFyZ3MpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIChlcnIsIG1hcFJlc3VsdHMpID0+IHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFwUmVzdWx0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChtYXBSZXN1bHRzW2ldKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoLi4ubWFwUmVzdWx0c1tpXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyLCByZXN1bHQpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgdmFyIGNvbmNhdExpbWl0JDEgPSBhd2FpdGlmeShjb25jYXRMaW1pdCwgNCk7XG5cbiAgICAvKipcbiAgICAgKiBBcHBsaWVzIGBpdGVyYXRlZWAgdG8gZWFjaCBpdGVtIGluIGBjb2xsYCwgY29uY2F0ZW5hdGluZyB0aGUgcmVzdWx0cy4gUmV0dXJuc1xuICAgICAqIHRoZSBjb25jYXRlbmF0ZWQgbGlzdC4gVGhlIGBpdGVyYXRlZWBzIGFyZSBjYWxsZWQgaW4gcGFyYWxsZWwsIGFuZCB0aGVcbiAgICAgKiByZXN1bHRzIGFyZSBjb25jYXRlbmF0ZWQgYXMgdGhleSByZXR1cm4uIFRoZSByZXN1bHRzIGFycmF5IHdpbGwgYmUgcmV0dXJuZWQgaW5cbiAgICAgKiB0aGUgb3JpZ2luYWwgb3JkZXIgb2YgYGNvbGxgIHBhc3NlZCB0byB0aGUgYGl0ZXJhdGVlYCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBuYW1lIGNvbmNhdFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQGFsaWFzIGZsYXRNYXBcbiAgICAgKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfEFzeW5jSXRlcmFibGV8T2JqZWN0fSBjb2xsIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQSBmdW5jdGlvbiB0byBhcHBseSB0byBlYWNoIGl0ZW0gaW4gYGNvbGxgLFxuICAgICAqIHdoaWNoIHNob3VsZCB1c2UgYW4gYXJyYXkgYXMgaXRzIHJlc3VsdC4gSW52b2tlZCB3aXRoIChpdGVtLCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIGFmdGVyIGFsbCB0aGVcbiAgICAgKiBgaXRlcmF0ZWVgIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLCBvciBhbiBlcnJvciBvY2N1cnMuIFJlc3VsdHMgaXMgYW4gYXJyYXlcbiAgICAgKiBjb250YWluaW5nIHRoZSBjb25jYXRlbmF0ZWQgcmVzdWx0cyBvZiB0aGUgYGl0ZXJhdGVlYCBmdW5jdGlvbi4gSW52b2tlZCB3aXRoXG4gICAgICogKGVyciwgcmVzdWx0cykuXG4gICAgICogQHJldHVybnMgQSBQcm9taXNlLCBpZiBubyBjYWxsYmFjayBpcyBwYXNzZWRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gZGlyMSBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGZpbGUxLnR4dCwgZmlsZTIudHh0XG4gICAgICogLy8gZGlyMiBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGZpbGUzLnR4dCwgZmlsZTQudHh0XG4gICAgICogLy8gZGlyMyBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGZpbGU1LnR4dFxuICAgICAqIC8vIGRpcjQgZG9lcyBub3QgZXhpc3RcbiAgICAgKlxuICAgICAqIGxldCBkaXJlY3RvcnlMaXN0ID0gWydkaXIxJywnZGlyMicsJ2RpcjMnXTtcbiAgICAgKiBsZXQgd2l0aE1pc3NpbmdEaXJlY3RvcnlMaXN0ID0gWydkaXIxJywnZGlyMicsJ2RpcjMnLCAnZGlyNCddO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgY2FsbGJhY2tzXG4gICAgICogYXN5bmMuY29uY2F0KGRpcmVjdG9yeUxpc3QsIGZzLnJlYWRkaXIsIGZ1bmN0aW9uKGVyciwgcmVzdWx0cykge1xuICAgICAqICAgIGlmIChlcnIpIHtcbiAgICAgKiAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICB9IGVsc2Uge1xuICAgICAqICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiAgICAgICAgLy8gWyAnZmlsZTEudHh0JywgJ2ZpbGUyLnR4dCcsICdmaWxlMy50eHQnLCAnZmlsZTQudHh0JywgZmlsZTUudHh0IF1cbiAgICAgKiAgICB9XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBFcnJvciBIYW5kbGluZ1xuICAgICAqIGFzeW5jLmNvbmNhdCh3aXRoTWlzc2luZ0RpcmVjdG9yeUxpc3QsIGZzLnJlYWRkaXIsIGZ1bmN0aW9uKGVyciwgcmVzdWx0cykge1xuICAgICAqICAgIGlmIChlcnIpIHtcbiAgICAgKiAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgICAgLy8gWyBFcnJvcjogRU5PRU5UOiBubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IF1cbiAgICAgKiAgICAgICAgLy8gc2luY2UgZGlyNCBkb2VzIG5vdCBleGlzdFxuICAgICAqICAgIH0gZWxzZSB7XG4gICAgICogICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgIH1cbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIFByb21pc2VzXG4gICAgICogYXN5bmMuY29uY2F0KGRpcmVjdG9yeUxpc3QsIGZzLnJlYWRkaXIpXG4gICAgICogLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgICAvLyBbICdmaWxlMS50eHQnLCAnZmlsZTIudHh0JywgJ2ZpbGUzLnR4dCcsICdmaWxlNC50eHQnLCBmaWxlNS50eHQgXVxuICAgICAqIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICogICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gRXJyb3IgSGFuZGxpbmdcbiAgICAgKiBhc3luYy5jb25jYXQod2l0aE1pc3NpbmdEaXJlY3RvcnlMaXN0LCBmcy5yZWFkZGlyKVxuICAgICAqIC50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICAvLyBbIEVycm9yOiBFTk9FTlQ6IG5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkgXVxuICAgICAqICAgICAvLyBzaW5jZSBkaXI0IGRvZXMgbm90IGV4aXN0XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBhc3luYy9hd2FpdFxuICAgICAqIGFzeW5jICgpID0+IHtcbiAgICAgKiAgICAgdHJ5IHtcbiAgICAgKiAgICAgICAgIGxldCByZXN1bHRzID0gYXdhaXQgYXN5bmMuY29uY2F0KGRpcmVjdG9yeUxpc3QsIGZzLnJlYWRkaXIpO1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgICAgICAvLyBbICdmaWxlMS50eHQnLCAnZmlsZTIudHh0JywgJ2ZpbGUzLnR4dCcsICdmaWxlNC50eHQnLCBmaWxlNS50eHQgXVxuICAgICAqICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgIH1cbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBFcnJvciBIYW5kbGluZ1xuICAgICAqIGFzeW5jICgpID0+IHtcbiAgICAgKiAgICAgdHJ5IHtcbiAgICAgKiAgICAgICAgIGxldCByZXN1bHRzID0gYXdhaXQgYXN5bmMuY29uY2F0KHdpdGhNaXNzaW5nRGlyZWN0b3J5TGlzdCwgZnMucmVhZGRpcik7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICAgICAgLy8gWyBFcnJvcjogRU5PRU5UOiBubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IF1cbiAgICAgKiAgICAgICAgIC8vIHNpbmNlIGRpcjQgZG9lcyBub3QgZXhpc3RcbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbmNhdChjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGNvbmNhdExpbWl0JDEoY29sbCwgSW5maW5pdHksIGl0ZXJhdGVlLCBjYWxsYmFjaylcbiAgICB9XG4gICAgdmFyIGNvbmNhdCQxID0gYXdhaXRpZnkoY29uY2F0LCAzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzYW1lIGFzIFtgY29uY2F0YF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmNvbmNhdH0gYnV0IHJ1bnMgb25seSBhIHNpbmdsZSBhc3luYyBvcGVyYXRpb24gYXQgYSB0aW1lLlxuICAgICAqXG4gICAgICogQG5hbWUgY29uY2F0U2VyaWVzXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMuY29uY2F0XXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuY29uY2F0fVxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQGFsaWFzIGZsYXRNYXBTZXJpZXNcbiAgICAgKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfEFzeW5jSXRlcmFibGV8T2JqZWN0fSBjb2xsIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQSBmdW5jdGlvbiB0byBhcHBseSB0byBlYWNoIGl0ZW0gaW4gYGNvbGxgLlxuICAgICAqIFRoZSBpdGVyYXRlZSBzaG91bGQgY29tcGxldGUgd2l0aCBhbiBhcnJheSBhbiBhcnJheSBvZiByZXN1bHRzLlxuICAgICAqIEludm9rZWQgd2l0aCAoaXRlbSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCBhZnRlciBhbGwgdGhlXG4gICAgICogYGl0ZXJhdGVlYCBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZCwgb3IgYW4gZXJyb3Igb2NjdXJzLiBSZXN1bHRzIGlzIGFuIGFycmF5XG4gICAgICogY29udGFpbmluZyB0aGUgY29uY2F0ZW5hdGVkIHJlc3VsdHMgb2YgdGhlIGBpdGVyYXRlZWAgZnVuY3Rpb24uIEludm9rZWQgd2l0aFxuICAgICAqIChlcnIsIHJlc3VsdHMpLlxuICAgICAqIEByZXR1cm5zIEEgUHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgaXMgcGFzc2VkXG4gICAgICovXG4gICAgZnVuY3Rpb24gY29uY2F0U2VyaWVzKGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gY29uY2F0TGltaXQkMShjb2xsLCAxLCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuICAgIHZhciBjb25jYXRTZXJpZXMkMSA9IGF3YWl0aWZ5KGNvbmNhdFNlcmllcywgMyk7XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3aGVuIGNhbGxlZCwgY2FsbHMtYmFjayB3aXRoIHRoZSB2YWx1ZXMgcHJvdmlkZWQuXG4gICAgICogVXNlZnVsIGFzIHRoZSBmaXJzdCBmdW5jdGlvbiBpbiBhIFtgd2F0ZXJmYWxsYF17QGxpbmsgbW9kdWxlOkNvbnRyb2xGbG93LndhdGVyZmFsbH0sIG9yIGZvciBwbHVnZ2luZyB2YWx1ZXMgaW4gdG9cbiAgICAgKiBbYGF1dG9gXXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cuYXV0b30uXG4gICAgICpcbiAgICAgKiBAbmFtZSBjb25zdGFudFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOlV0aWxzXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHsuLi4qfSBhcmd1bWVudHMuLi4gLSBBbnkgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBhdXRvbWF0aWNhbGx5IGludm9rZVxuICAgICAqIGNhbGxiYWNrIHdpdGguXG4gICAgICogQHJldHVybnMge0FzeW5jRnVuY3Rpb259IFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHdoZW4gaW52b2tlZCwgYXV0b21hdGljYWxseVxuICAgICAqIGludm9rZXMgdGhlIGNhbGxiYWNrIHdpdGggdGhlIHByZXZpb3VzIGdpdmVuIGFyZ3VtZW50cy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogYXN5bmMud2F0ZXJmYWxsKFtcbiAgICAgKiAgICAgYXN5bmMuY29uc3RhbnQoNDIpLFxuICAgICAqICAgICBmdW5jdGlvbiAodmFsdWUsIG5leHQpIHtcbiAgICAgKiAgICAgICAgIC8vIHZhbHVlID09PSA0MlxuICAgICAqICAgICB9LFxuICAgICAqICAgICAvLy4uLlxuICAgICAqIF0sIGNhbGxiYWNrKTtcbiAgICAgKlxuICAgICAqIGFzeW5jLndhdGVyZmFsbChbXG4gICAgICogICAgIGFzeW5jLmNvbnN0YW50KGZpbGVuYW1lLCBcInV0ZjhcIiksXG4gICAgICogICAgIGZzLnJlYWRGaWxlLFxuICAgICAqICAgICBmdW5jdGlvbiAoZmlsZURhdGEsIG5leHQpIHtcbiAgICAgKiAgICAgICAgIC8vLi4uXG4gICAgICogICAgIH1cbiAgICAgKiAgICAgLy8uLi5cbiAgICAgKiBdLCBjYWxsYmFjayk7XG4gICAgICpcbiAgICAgKiBhc3luYy5hdXRvKHtcbiAgICAgKiAgICAgaG9zdG5hbWU6IGFzeW5jLmNvbnN0YW50KFwiaHR0cHM6Ly9zZXJ2ZXIubmV0L1wiKSxcbiAgICAgKiAgICAgcG9ydDogZmluZEZyZWVQb3J0LFxuICAgICAqICAgICBsYXVuY2hTZXJ2ZXI6IFtcImhvc3RuYW1lXCIsIFwicG9ydFwiLCBmdW5jdGlvbiAob3B0aW9ucywgY2IpIHtcbiAgICAgKiAgICAgICAgIHN0YXJ0U2VydmVyKG9wdGlvbnMsIGNiKTtcbiAgICAgKiAgICAgfV0sXG4gICAgICogICAgIC8vLi4uXG4gICAgICogfSwgY2FsbGJhY2spO1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbnN0YW50JDEoLi4uYXJncykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKC4uLmlnbm9yZWRBcmdzLyosIGNhbGxiYWNrKi8pIHtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGlnbm9yZWRBcmdzLnBvcCgpO1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIC4uLmFyZ3MpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9jcmVhdGVUZXN0ZXIoY2hlY2ssIGdldFJlc3VsdCkge1xuICAgICAgICByZXR1cm4gKGVhY2hmbiwgYXJyLCBfaXRlcmF0ZWUsIGNiKSA9PiB7XG4gICAgICAgICAgICB2YXIgdGVzdFBhc3NlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdmFyIHRlc3RSZXN1bHQ7XG4gICAgICAgICAgICBjb25zdCBpdGVyYXRlZSA9IHdyYXBBc3luYyhfaXRlcmF0ZWUpO1xuICAgICAgICAgICAgZWFjaGZuKGFyciwgKHZhbHVlLCBfLCBjYWxsYmFjaykgPT4ge1xuICAgICAgICAgICAgICAgIGl0ZXJhdGVlKHZhbHVlLCAoZXJyLCByZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVyciB8fCBlcnIgPT09IGZhbHNlKSByZXR1cm4gY2FsbGJhY2soZXJyKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hlY2socmVzdWx0KSAmJiAhdGVzdFJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGVzdFBhc3NlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXN0UmVzdWx0ID0gZ2V0UmVzdWx0KHRydWUsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsLCBicmVha0xvb3ApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCBlcnIgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpO1xuICAgICAgICAgICAgICAgIGNiKG51bGwsIHRlc3RQYXNzZWQgPyB0ZXN0UmVzdWx0IDogZ2V0UmVzdWx0KGZhbHNlKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBmaXJzdCB2YWx1ZSBpbiBgY29sbGAgdGhhdCBwYXNzZXMgYW4gYXN5bmMgdHJ1dGggdGVzdC4gVGhlXG4gICAgICogYGl0ZXJhdGVlYCBpcyBhcHBsaWVkIGluIHBhcmFsbGVsLCBtZWFuaW5nIHRoZSBmaXJzdCBpdGVyYXRlZSB0byByZXR1cm5cbiAgICAgKiBgdHJ1ZWAgd2lsbCBmaXJlIHRoZSBkZXRlY3QgYGNhbGxiYWNrYCB3aXRoIHRoYXQgcmVzdWx0LiBUaGF0IG1lYW5zIHRoZVxuICAgICAqIHJlc3VsdCBtaWdodCBub3QgYmUgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIG9yaWdpbmFsIGBjb2xsYCAoaW4gdGVybXMgb2Ygb3JkZXIpXG4gICAgICogdGhhdCBwYXNzZXMgdGhlIHRlc3QuXG5cbiAgICAgKiBJZiBvcmRlciB3aXRoaW4gdGhlIG9yaWdpbmFsIGBjb2xsYCBpcyBpbXBvcnRhbnQsIHRoZW4gbG9vayBhdFxuICAgICAqIFtgZGV0ZWN0U2VyaWVzYF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmRldGVjdFNlcmllc30uXG4gICAgICpcbiAgICAgKiBAbmFtZSBkZXRlY3RcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAYWxpYXMgZmluZFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uc1xuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBIHRydXRoIHRlc3QgdG8gYXBwbHkgdG8gZWFjaCBpdGVtIGluIGBjb2xsYC5cbiAgICAgKiBUaGUgaXRlcmF0ZWUgbXVzdCBjb21wbGV0ZSB3aXRoIGEgYm9vbGVhbiB2YWx1ZSBhcyBpdHMgcmVzdWx0LlxuICAgICAqIEludm9rZWQgd2l0aCAoaXRlbSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCBhcyBzb29uIGFzIGFueVxuICAgICAqIGl0ZXJhdGVlIHJldHVybnMgYHRydWVgLCBvciBhZnRlciBhbGwgdGhlIGBpdGVyYXRlZWAgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQuXG4gICAgICogUmVzdWx0IHdpbGwgYmUgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIGFycmF5IHRoYXQgcGFzc2VzIHRoZSB0cnV0aCB0ZXN0XG4gICAgICogKGl0ZXJhdGVlKSBvciB0aGUgdmFsdWUgYHVuZGVmaW5lZGAgaWYgbm9uZSBwYXNzZWQuIEludm9rZWQgd2l0aFxuICAgICAqIChlcnIsIHJlc3VsdCkuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgYSBjYWxsYmFjayBpcyBvbWl0dGVkXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vIGRpcjEgaXMgYSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyBmaWxlMS50eHQsIGZpbGUyLnR4dFxuICAgICAqIC8vIGRpcjIgaXMgYSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyBmaWxlMy50eHQsIGZpbGU0LnR4dFxuICAgICAqIC8vIGRpcjMgaXMgYSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyBmaWxlNS50eHRcbiAgICAgKlxuICAgICAqIC8vIGFzeW5jaHJvbm91cyBmdW5jdGlvbiB0aGF0IGNoZWNrcyBpZiBhIGZpbGUgZXhpc3RzXG4gICAgICogZnVuY3Rpb24gZmlsZUV4aXN0cyhmaWxlLCBjYWxsYmFjaykge1xuICAgICAqICAgIGZzLmFjY2VzcyhmaWxlLCBmcy5jb25zdGFudHMuRl9PSywgKGVycikgPT4ge1xuICAgICAqICAgICAgICBjYWxsYmFjayhudWxsLCAhZXJyKTtcbiAgICAgKiAgICB9KTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBhc3luYy5kZXRlY3QoWydmaWxlMy50eHQnLCdmaWxlMi50eHQnLCdkaXIxL2ZpbGUxLnR4dCddLCBmaWxlRXhpc3RzLFxuICAgICAqICAgIGZ1bmN0aW9uKGVyciwgcmVzdWx0KSB7XG4gICAgICogICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XG4gICAgICogICAgICAgIC8vIGRpcjEvZmlsZTEudHh0XG4gICAgICogICAgICAgIC8vIHJlc3VsdCBub3cgZXF1YWxzIHRoZSBmaXJzdCBmaWxlIGluIHRoZSBsaXN0IHRoYXQgZXhpc3RzXG4gICAgICogICAgfVxuICAgICAqKTtcbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIFByb21pc2VzXG4gICAgICogYXN5bmMuZGV0ZWN0KFsnZmlsZTMudHh0JywnZmlsZTIudHh0JywnZGlyMS9maWxlMS50eHQnXSwgZmlsZUV4aXN0cylcbiAgICAgKiAudGhlbihyZXN1bHQgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAvLyBkaXIxL2ZpbGUxLnR4dFxuICAgICAqICAgICAvLyByZXN1bHQgbm93IGVxdWFscyB0aGUgZmlyc3QgZmlsZSBpbiB0aGUgbGlzdCB0aGF0IGV4aXN0c1xuICAgICAqIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBhc3luYy9hd2FpdFxuICAgICAqIGFzeW5jICgpID0+IHtcbiAgICAgKiAgICAgdHJ5IHtcbiAgICAgKiAgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBhc3luYy5kZXRlY3QoWydmaWxlMy50eHQnLCdmaWxlMi50eHQnLCdkaXIxL2ZpbGUxLnR4dCddLCBmaWxlRXhpc3RzKTtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XG4gICAgICogICAgICAgICAvLyBkaXIxL2ZpbGUxLnR4dFxuICAgICAqICAgICAgICAgLy8gcmVzdWx0IG5vdyBlcXVhbHMgdGhlIGZpbGUgaW4gdGhlIGxpc3QgdGhhdCBleGlzdHNcbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICovXG4gICAgZnVuY3Rpb24gZGV0ZWN0KGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX2NyZWF0ZVRlc3Rlcihib29sID0+IGJvb2wsIChyZXMsIGl0ZW0pID0+IGl0ZW0pKGVhY2hPZiQxLCBjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuICAgIHZhciBkZXRlY3QkMSA9IGF3YWl0aWZ5KGRldGVjdCwgMyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyBbYGRldGVjdGBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5kZXRlY3R9IGJ1dCBydW5zIGEgbWF4aW11bSBvZiBgbGltaXRgIGFzeW5jIG9wZXJhdGlvbnMgYXQgYVxuICAgICAqIHRpbWUuXG4gICAgICpcbiAgICAgKiBAbmFtZSBkZXRlY3RMaW1pdFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLmRldGVjdF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmRldGVjdH1cbiAgICAgKiBAYWxpYXMgZmluZExpbWl0XG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25zXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbWl0IC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGFzeW5jIG9wZXJhdGlvbnMgYXQgYSB0aW1lLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBIHRydXRoIHRlc3QgdG8gYXBwbHkgdG8gZWFjaCBpdGVtIGluIGBjb2xsYC5cbiAgICAgKiBUaGUgaXRlcmF0ZWUgbXVzdCBjb21wbGV0ZSB3aXRoIGEgYm9vbGVhbiB2YWx1ZSBhcyBpdHMgcmVzdWx0LlxuICAgICAqIEludm9rZWQgd2l0aCAoaXRlbSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCBhcyBzb29uIGFzIGFueVxuICAgICAqIGl0ZXJhdGVlIHJldHVybnMgYHRydWVgLCBvciBhZnRlciBhbGwgdGhlIGBpdGVyYXRlZWAgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQuXG4gICAgICogUmVzdWx0IHdpbGwgYmUgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIGFycmF5IHRoYXQgcGFzc2VzIHRoZSB0cnV0aCB0ZXN0XG4gICAgICogKGl0ZXJhdGVlKSBvciB0aGUgdmFsdWUgYHVuZGVmaW5lZGAgaWYgbm9uZSBwYXNzZWQuIEludm9rZWQgd2l0aFxuICAgICAqIChlcnIsIHJlc3VsdCkuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgYSBjYWxsYmFjayBpcyBvbWl0dGVkXG4gICAgICovXG4gICAgZnVuY3Rpb24gZGV0ZWN0TGltaXQoY29sbCwgbGltaXQsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX2NyZWF0ZVRlc3Rlcihib29sID0+IGJvb2wsIChyZXMsIGl0ZW0pID0+IGl0ZW0pKGVhY2hPZkxpbWl0JDIobGltaXQpLCBjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuICAgIHZhciBkZXRlY3RMaW1pdCQxID0gYXdhaXRpZnkoZGV0ZWN0TGltaXQsIDQpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNhbWUgYXMgW2BkZXRlY3RgXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZGV0ZWN0fSBidXQgcnVucyBvbmx5IGEgc2luZ2xlIGFzeW5jIG9wZXJhdGlvbiBhdCBhIHRpbWUuXG4gICAgICpcbiAgICAgKiBAbmFtZSBkZXRlY3RTZXJpZXNcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5kZXRlY3Rde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5kZXRlY3R9XG4gICAgICogQGFsaWFzIGZpbmRTZXJpZXNcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvbnNcbiAgICAgKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfEFzeW5jSXRlcmFibGV8T2JqZWN0fSBjb2xsIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQSB0cnV0aCB0ZXN0IHRvIGFwcGx5IHRvIGVhY2ggaXRlbSBpbiBgY29sbGAuXG4gICAgICogVGhlIGl0ZXJhdGVlIG11c3QgY29tcGxldGUgd2l0aCBhIGJvb2xlYW4gdmFsdWUgYXMgaXRzIHJlc3VsdC5cbiAgICAgKiBJbnZva2VkIHdpdGggKGl0ZW0sIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgYXMgc29vbiBhcyBhbnlcbiAgICAgKiBpdGVyYXRlZSByZXR1cm5zIGB0cnVlYCwgb3IgYWZ0ZXIgYWxsIHRoZSBgaXRlcmF0ZWVgIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLlxuICAgICAqIFJlc3VsdCB3aWxsIGJlIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBhcnJheSB0aGF0IHBhc3NlcyB0aGUgdHJ1dGggdGVzdFxuICAgICAqIChpdGVyYXRlZSkgb3IgdGhlIHZhbHVlIGB1bmRlZmluZWRgIGlmIG5vbmUgcGFzc2VkLiBJbnZva2VkIHdpdGhcbiAgICAgKiAoZXJyLCByZXN1bHQpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIGEgY2FsbGJhY2sgaXMgb21pdHRlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGRldGVjdFNlcmllcyhjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9jcmVhdGVUZXN0ZXIoYm9vbCA9PiBib29sLCAocmVzLCBpdGVtKSA9PiBpdGVtKShlYWNoT2ZMaW1pdCQyKDEpLCBjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuXG4gICAgdmFyIGRldGVjdFNlcmllcyQxID0gYXdhaXRpZnkoZGV0ZWN0U2VyaWVzLCAzKTtcblxuICAgIGZ1bmN0aW9uIGNvbnNvbGVGdW5jKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIChmbiwgLi4uYXJncykgPT4gd3JhcEFzeW5jKGZuKSguLi5hcmdzLCAoZXJyLCAuLi5yZXN1bHRBcmdzKSA9PiB7XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29uc29sZS5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb25zb2xlW25hbWVdKSB7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdEFyZ3MuZm9yRWFjaCh4ID0+IGNvbnNvbGVbbmFtZV0oeCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMb2dzIHRoZSByZXN1bHQgb2YgYW4gW2Bhc3luY2AgZnVuY3Rpb25de0BsaW5rIEFzeW5jRnVuY3Rpb259IHRvIHRoZVxuICAgICAqIGBjb25zb2xlYCB1c2luZyBgY29uc29sZS5kaXJgIHRvIGRpc3BsYXkgdGhlIHByb3BlcnRpZXMgb2YgdGhlIHJlc3VsdGluZyBvYmplY3QuXG4gICAgICogT25seSB3b3JrcyBpbiBOb2RlLmpzIG9yIGluIGJyb3dzZXJzIHRoYXQgc3VwcG9ydCBgY29uc29sZS5kaXJgIGFuZFxuICAgICAqIGBjb25zb2xlLmVycm9yYCAoc3VjaCBhcyBGRiBhbmQgQ2hyb21lKS5cbiAgICAgKiBJZiBtdWx0aXBsZSBhcmd1bWVudHMgYXJlIHJldHVybmVkIGZyb20gdGhlIGFzeW5jIGZ1bmN0aW9uLFxuICAgICAqIGBjb25zb2xlLmRpcmAgaXMgY2FsbGVkIG9uIGVhY2ggYXJndW1lbnQgaW4gb3JkZXIuXG4gICAgICpcbiAgICAgKiBAbmFtZSBkaXJcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpVdGlsc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gZnVuY3Rpb24gLSBUaGUgZnVuY3Rpb24geW91IHdhbnQgdG8gZXZlbnR1YWxseSBhcHBseVxuICAgICAqIGFsbCBhcmd1bWVudHMgdG8uXG4gICAgICogQHBhcmFtIHsuLi4qfSBhcmd1bWVudHMuLi4gLSBBbnkgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBhcHBseSB0byB0aGUgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vIGluIGEgbW9kdWxlXG4gICAgICogdmFyIGhlbGxvID0gZnVuY3Rpb24obmFtZSwgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsIHtoZWxsbzogbmFtZX0pO1xuICAgICAqICAgICB9LCAxMDAwKTtcbiAgICAgKiB9O1xuICAgICAqXG4gICAgICogLy8gaW4gdGhlIG5vZGUgcmVwbFxuICAgICAqIG5vZGU+IGFzeW5jLmRpcihoZWxsbywgJ3dvcmxkJyk7XG4gICAgICoge2hlbGxvOiAnd29ybGQnfVxuICAgICAqL1xuICAgIHZhciBkaXIgPSBjb25zb2xlRnVuYygnZGlyJyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcG9zdC1jaGVjayB2ZXJzaW9uIG9mIFtgd2hpbHN0YF17QGxpbmsgbW9kdWxlOkNvbnRyb2xGbG93LndoaWxzdH0uIFRvIHJlZmxlY3QgdGhlIGRpZmZlcmVuY2UgaW5cbiAgICAgKiB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucywgdGhlIGFyZ3VtZW50cyBgdGVzdGAgYW5kIGBpdGVyYXRlZWAgYXJlIHN3aXRjaGVkLlxuICAgICAqXG4gICAgICogYGRvV2hpbHN0YCBpcyB0byBgd2hpbHN0YCBhcyBgZG8gd2hpbGVgIGlzIHRvIGB3aGlsZWAgaW4gcGxhaW4gSmF2YVNjcmlwdC5cbiAgICAgKlxuICAgICAqIEBuYW1lIGRvV2hpbHN0XG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMud2hpbHN0XXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cud2hpbHN0fVxuICAgICAqIEBjYXRlZ29yeSBDb250cm9sIEZsb3dcbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQSBmdW5jdGlvbiB3aGljaCBpcyBjYWxsZWQgZWFjaCB0aW1lIGB0ZXN0YFxuICAgICAqIHBhc3Nlcy4gSW52b2tlZCB3aXRoIChjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSB0ZXN0IC0gYXN5bmNocm9ub3VzIHRydXRoIHRlc3QgdG8gcGVyZm9ybSBhZnRlciBlYWNoXG4gICAgICogZXhlY3V0aW9uIG9mIGBpdGVyYXRlZWAuIEludm9rZWQgd2l0aCAoLi4uYXJncywgY2FsbGJhY2spLCB3aGVyZSBgLi4uYXJnc2AgYXJlIHRoZVxuICAgICAqIG5vbi1lcnJvciBhcmdzIGZyb20gdGhlIHByZXZpb3VzIGNhbGxiYWNrIG9mIGBpdGVyYXRlZWAuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIGFmdGVyIHRoZSB0ZXN0XG4gICAgICogZnVuY3Rpb24gaGFzIGZhaWxlZCBhbmQgcmVwZWF0ZWQgZXhlY3V0aW9uIG9mIGBpdGVyYXRlZWAgaGFzIHN0b3BwZWQuXG4gICAgICogYGNhbGxiYWNrYCB3aWxsIGJlIHBhc3NlZCBhbiBlcnJvciBhbmQgYW55IGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIGZpbmFsXG4gICAgICogYGl0ZXJhdGVlYCdzIGNhbGxiYWNrLiBJbnZva2VkIHdpdGggKGVyciwgW3Jlc3VsdHNdKTtcbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBpcyBwYXNzZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBkb1doaWxzdChpdGVyYXRlZSwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBvbmx5T25jZShjYWxsYmFjayk7XG4gICAgICAgIHZhciBfZm4gPSB3cmFwQXN5bmMoaXRlcmF0ZWUpO1xuICAgICAgICB2YXIgX3Rlc3QgPSB3cmFwQXN5bmModGVzdCk7XG4gICAgICAgIHZhciByZXN1bHRzO1xuXG4gICAgICAgIGZ1bmN0aW9uIG5leHQoZXJyLCAuLi5hcmdzKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIGlmIChlcnIgPT09IGZhbHNlKSByZXR1cm47XG4gICAgICAgICAgICByZXN1bHRzID0gYXJncztcbiAgICAgICAgICAgIF90ZXN0KC4uLmFyZ3MsIGNoZWNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGNoZWNrKGVyciwgdHJ1dGgpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgaWYgKGVyciA9PT0gZmFsc2UpIHJldHVybjtcbiAgICAgICAgICAgIGlmICghdHJ1dGgpIHJldHVybiBjYWxsYmFjayhudWxsLCAuLi5yZXN1bHRzKTtcbiAgICAgICAgICAgIF9mbihuZXh0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjaGVjayhudWxsLCB0cnVlKTtcbiAgICB9XG5cbiAgICB2YXIgZG9XaGlsc3QkMSA9IGF3YWl0aWZ5KGRvV2hpbHN0LCAzKTtcblxuICAgIC8qKlxuICAgICAqIExpa2UgWydkb1doaWxzdCdde0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy5kb1doaWxzdH0sIGV4Y2VwdCB0aGUgYHRlc3RgIGlzIGludmVydGVkLiBOb3RlIHRoZVxuICAgICAqIGFyZ3VtZW50IG9yZGVyaW5nIGRpZmZlcnMgZnJvbSBgdW50aWxgLlxuICAgICAqXG4gICAgICogQG5hbWUgZG9VbnRpbFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbnRyb2xGbG93XG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLmRvV2hpbHN0XXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cuZG9XaGlsc3R9XG4gICAgICogQGNhdGVnb3J5IENvbnRyb2wgRmxvd1xuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBbiBhc3luYyBmdW5jdGlvbiB3aGljaCBpcyBjYWxsZWQgZWFjaCB0aW1lXG4gICAgICogYHRlc3RgIGZhaWxzLiBJbnZva2VkIHdpdGggKGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IHRlc3QgLSBhc3luY2hyb25vdXMgdHJ1dGggdGVzdCB0byBwZXJmb3JtIGFmdGVyIGVhY2hcbiAgICAgKiBleGVjdXRpb24gb2YgYGl0ZXJhdGVlYC4gSW52b2tlZCB3aXRoICguLi5hcmdzLCBjYWxsYmFjayksIHdoZXJlIGAuLi5hcmdzYCBhcmUgdGhlXG4gICAgICogbm9uLWVycm9yIGFyZ3MgZnJvbSB0aGUgcHJldmlvdXMgY2FsbGJhY2sgb2YgYGl0ZXJhdGVlYFxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCBhZnRlciB0aGUgdGVzdFxuICAgICAqIGZ1bmN0aW9uIGhhcyBwYXNzZWQgYW5kIHJlcGVhdGVkIGV4ZWN1dGlvbiBvZiBgaXRlcmF0ZWVgIGhhcyBzdG9wcGVkLiBgY2FsbGJhY2tgXG4gICAgICogd2lsbCBiZSBwYXNzZWQgYW4gZXJyb3IgYW5kIGFueSBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBmaW5hbCBgaXRlcmF0ZWVgJ3NcbiAgICAgKiBjYWxsYmFjay4gSW52b2tlZCB3aXRoIChlcnIsIFtyZXN1bHRzXSk7XG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgaXMgcGFzc2VkXG4gICAgICovXG4gICAgZnVuY3Rpb24gZG9VbnRpbChpdGVyYXRlZSwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgY29uc3QgX3Rlc3QgPSB3cmFwQXN5bmModGVzdCk7XG4gICAgICAgIHJldHVybiBkb1doaWxzdCQxKGl0ZXJhdGVlLCAoLi4uYXJncykgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2IgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgX3Rlc3QoLi4uYXJncywgKGVyciwgdHJ1dGgpID0+IGNiIChlcnIsICF0cnV0aCkpO1xuICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3dpdGhvdXRJbmRleChpdGVyYXRlZSkge1xuICAgICAgICByZXR1cm4gKHZhbHVlLCBpbmRleCwgY2FsbGJhY2spID0+IGl0ZXJhdGVlKHZhbHVlLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQXBwbGllcyB0aGUgZnVuY3Rpb24gYGl0ZXJhdGVlYCB0byBlYWNoIGl0ZW0gaW4gYGNvbGxgLCBpbiBwYXJhbGxlbC5cbiAgICAgKiBUaGUgYGl0ZXJhdGVlYCBpcyBjYWxsZWQgd2l0aCBhbiBpdGVtIGZyb20gdGhlIGxpc3QsIGFuZCBhIGNhbGxiYWNrIGZvciB3aGVuXG4gICAgICogaXQgaGFzIGZpbmlzaGVkLiBJZiB0aGUgYGl0ZXJhdGVlYCBwYXNzZXMgYW4gZXJyb3IgdG8gaXRzIGBjYWxsYmFja2AsIHRoZVxuICAgICAqIG1haW4gYGNhbGxiYWNrYCAoZm9yIHRoZSBgZWFjaGAgZnVuY3Rpb24pIGlzIGltbWVkaWF0ZWx5IGNhbGxlZCB3aXRoIHRoZVxuICAgICAqIGVycm9yLlxuICAgICAqXG4gICAgICogTm90ZSwgdGhhdCBzaW5jZSB0aGlzIGZ1bmN0aW9uIGFwcGxpZXMgYGl0ZXJhdGVlYCB0byBlYWNoIGl0ZW0gaW4gcGFyYWxsZWwsXG4gICAgICogdGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgdGhlIGl0ZXJhdGVlIGZ1bmN0aW9ucyB3aWxsIGNvbXBsZXRlIGluIG9yZGVyLlxuICAgICAqXG4gICAgICogQG5hbWUgZWFjaFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBhbGlhcyBmb3JFYWNoXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfEFzeW5jSXRlcmFibGV8T2JqZWN0fSBjb2xsIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQW4gYXN5bmMgZnVuY3Rpb24gdG8gYXBwbHkgdG9cbiAgICAgKiBlYWNoIGl0ZW0gaW4gYGNvbGxgLiBJbnZva2VkIHdpdGggKGl0ZW0sIGNhbGxiYWNrKS5cbiAgICAgKiBUaGUgYXJyYXkgaW5kZXggaXMgbm90IHBhc3NlZCB0byB0aGUgaXRlcmF0ZWUuXG4gICAgICogSWYgeW91IG5lZWQgdGhlIGluZGV4LCB1c2UgYGVhY2hPZmAuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIHdoZW4gYWxsXG4gICAgICogYGl0ZXJhdGVlYCBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZCwgb3IgYW4gZXJyb3Igb2NjdXJzLiBJbnZva2VkIHdpdGggKGVycikuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgYSBjYWxsYmFjayBpcyBvbWl0dGVkXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vIGRpcjEgaXMgYSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyBmaWxlMS50eHQsIGZpbGUyLnR4dFxuICAgICAqIC8vIGRpcjIgaXMgYSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyBmaWxlMy50eHQsIGZpbGU0LnR4dFxuICAgICAqIC8vIGRpcjMgaXMgYSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyBmaWxlNS50eHRcbiAgICAgKiAvLyBkaXI0IGRvZXMgbm90IGV4aXN0XG4gICAgICpcbiAgICAgKiBjb25zdCBmaWxlTGlzdCA9IFsgJ2RpcjEvZmlsZTIudHh0JywgJ2RpcjIvZmlsZTMudHh0JywgJ2Rpci9maWxlNS50eHQnXTtcbiAgICAgKiBjb25zdCB3aXRoTWlzc2luZ0ZpbGVMaXN0ID0gWydkaXIxL2ZpbGUxLnR4dCcsICdkaXI0L2ZpbGUyLnR4dCddO1xuICAgICAqXG4gICAgICogLy8gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRoYXQgZGVsZXRlcyBhIGZpbGVcbiAgICAgKiBjb25zdCBkZWxldGVGaWxlID0gZnVuY3Rpb24oZmlsZSwgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgZnMudW5saW5rKGZpbGUsIGNhbGxiYWNrKTtcbiAgICAgKiB9O1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgY2FsbGJhY2tzXG4gICAgICogYXN5bmMuZWFjaChmaWxlTGlzdCwgZGVsZXRlRmlsZSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICogICAgIGlmKCBlcnIgKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9IGVsc2Uge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coJ0FsbCBmaWxlcyBoYXZlIGJlZW4gZGVsZXRlZCBzdWNjZXNzZnVsbHknKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gRXJyb3IgSGFuZGxpbmdcbiAgICAgKiBhc3luYy5lYWNoKHdpdGhNaXNzaW5nRmlsZUxpc3QsIGRlbGV0ZUZpbGUsIGZ1bmN0aW9uKGVycil7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgIC8vIFsgRXJyb3I6IEVOT0VOVDogbm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSBdXG4gICAgICogICAgIC8vIHNpbmNlIGRpcjQvZmlsZTIudHh0IGRvZXMgbm90IGV4aXN0XG4gICAgICogICAgIC8vIGRpcjEvZmlsZTEudHh0IGNvdWxkIGhhdmUgYmVlbiBkZWxldGVkXG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBQcm9taXNlc1xuICAgICAqIGFzeW5jLmVhY2goZmlsZUxpc3QsIGRlbGV0ZUZpbGUpXG4gICAgICogLnRoZW4oICgpID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coJ0FsbCBmaWxlcyBoYXZlIGJlZW4gZGVsZXRlZCBzdWNjZXNzZnVsbHknKTtcbiAgICAgKiB9KS5jYXRjaCggZXJyID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIEVycm9yIEhhbmRsaW5nXG4gICAgICogYXN5bmMuZWFjaChmaWxlTGlzdCwgZGVsZXRlRmlsZSlcbiAgICAgKiAudGhlbiggKCkgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZygnQWxsIGZpbGVzIGhhdmUgYmVlbiBkZWxldGVkIHN1Y2Nlc3NmdWxseScpO1xuICAgICAqIH0pLmNhdGNoKCBlcnIgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICAvLyBbIEVycm9yOiBFTk9FTlQ6IG5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkgXVxuICAgICAqICAgICAvLyBzaW5jZSBkaXI0L2ZpbGUyLnR4dCBkb2VzIG5vdCBleGlzdFxuICAgICAqICAgICAvLyBkaXIxL2ZpbGUxLnR4dCBjb3VsZCBoYXZlIGJlZW4gZGVsZXRlZFxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgYXN5bmMvYXdhaXRcbiAgICAgKiBhc3luYyAoKSA9PiB7XG4gICAgICogICAgIHRyeSB7XG4gICAgICogICAgICAgICBhd2FpdCBhc3luYy5lYWNoKGZpbGVzLCBkZWxldGVGaWxlKTtcbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICogLy8gRXJyb3IgSGFuZGxpbmdcbiAgICAgKiBhc3luYyAoKSA9PiB7XG4gICAgICogICAgIHRyeSB7XG4gICAgICogICAgICAgICBhd2FpdCBhc3luYy5lYWNoKHdpdGhNaXNzaW5nRmlsZUxpc3QsIGRlbGV0ZUZpbGUpO1xuICAgICAqICAgICB9XG4gICAgICogICAgIGNhdGNoIChlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgICAgICAvLyBbIEVycm9yOiBFTk9FTlQ6IG5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkgXVxuICAgICAqICAgICAgICAgLy8gc2luY2UgZGlyNC9maWxlMi50eHQgZG9lcyBub3QgZXhpc3RcbiAgICAgKiAgICAgICAgIC8vIGRpcjEvZmlsZTEudHh0IGNvdWxkIGhhdmUgYmVlbiBkZWxldGVkXG4gICAgICogICAgIH1cbiAgICAgKiB9XG4gICAgICpcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBlYWNoTGltaXQkMihjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGVhY2hPZiQxKGNvbGwsIF93aXRob3V0SW5kZXgod3JhcEFzeW5jKGl0ZXJhdGVlKSksIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICB2YXIgZWFjaCA9IGF3YWl0aWZ5KGVhY2hMaW1pdCQyLCAzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzYW1lIGFzIFtgZWFjaGBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5lYWNofSBidXQgcnVucyBhIG1heGltdW0gb2YgYGxpbWl0YCBhc3luYyBvcGVyYXRpb25zIGF0IGEgdGltZS5cbiAgICAgKlxuICAgICAqIEBuYW1lIGVhY2hMaW1pdFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLmVhY2hde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5lYWNofVxuICAgICAqIEBhbGlhcyBmb3JFYWNoTGltaXRcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW1pdCAtIFRoZSBtYXhpbXVtIG51bWJlciBvZiBhc3luYyBvcGVyYXRpb25zIGF0IGEgdGltZS5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQW4gYXN5bmMgZnVuY3Rpb24gdG8gYXBwbHkgdG8gZWFjaCBpdGVtIGluXG4gICAgICogYGNvbGxgLlxuICAgICAqIFRoZSBhcnJheSBpbmRleCBpcyBub3QgcGFzc2VkIHRvIHRoZSBpdGVyYXRlZS5cbiAgICAgKiBJZiB5b3UgbmVlZCB0aGUgaW5kZXgsIHVzZSBgZWFjaE9mTGltaXRgLlxuICAgICAqIEludm9rZWQgd2l0aCAoaXRlbSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCB3aGVuIGFsbFxuICAgICAqIGBpdGVyYXRlZWAgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQsIG9yIGFuIGVycm9yIG9jY3Vycy4gSW52b2tlZCB3aXRoIChlcnIpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIGEgY2FsbGJhY2sgaXMgb21pdHRlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGVhY2hMaW1pdChjb2xsLCBsaW1pdCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBlYWNoT2ZMaW1pdCQyKGxpbWl0KShjb2xsLCBfd2l0aG91dEluZGV4KHdyYXBBc3luYyhpdGVyYXRlZSkpLCBjYWxsYmFjayk7XG4gICAgfVxuICAgIHZhciBlYWNoTGltaXQkMSA9IGF3YWl0aWZ5KGVhY2hMaW1pdCwgNCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyBbYGVhY2hgXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZWFjaH0gYnV0IHJ1bnMgb25seSBhIHNpbmdsZSBhc3luYyBvcGVyYXRpb24gYXQgYSB0aW1lLlxuICAgICAqXG4gICAgICogTm90ZSwgdGhhdCB1bmxpa2UgW2BlYWNoYF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmVhY2h9LCB0aGlzIGZ1bmN0aW9uIGFwcGxpZXMgaXRlcmF0ZWUgdG8gZWFjaCBpdGVtXG4gICAgICogaW4gc2VyaWVzIGFuZCB0aGVyZWZvcmUgdGhlIGl0ZXJhdGVlIGZ1bmN0aW9ucyB3aWxsIGNvbXBsZXRlIGluIG9yZGVyLlxuXG4gICAgICogQG5hbWUgZWFjaFNlcmllc1xuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLmVhY2hde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5lYWNofVxuICAgICAqIEBhbGlhcyBmb3JFYWNoU2VyaWVzXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfEFzeW5jSXRlcmFibGV8T2JqZWN0fSBjb2xsIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQW4gYXN5bmMgZnVuY3Rpb24gdG8gYXBwbHkgdG8gZWFjaFxuICAgICAqIGl0ZW0gaW4gYGNvbGxgLlxuICAgICAqIFRoZSBhcnJheSBpbmRleCBpcyBub3QgcGFzc2VkIHRvIHRoZSBpdGVyYXRlZS5cbiAgICAgKiBJZiB5b3UgbmVlZCB0aGUgaW5kZXgsIHVzZSBgZWFjaE9mU2VyaWVzYC5cbiAgICAgKiBJbnZva2VkIHdpdGggKGl0ZW0sIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgd2hlbiBhbGxcbiAgICAgKiBgaXRlcmF0ZWVgIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLCBvciBhbiBlcnJvciBvY2N1cnMuIEludm9rZWQgd2l0aCAoZXJyKS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBhIGNhbGxiYWNrIGlzIG9taXR0ZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBlYWNoU2VyaWVzKGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gZWFjaExpbWl0JDEoY29sbCwgMSwgaXRlcmF0ZWUsIGNhbGxiYWNrKVxuICAgIH1cbiAgICB2YXIgZWFjaFNlcmllcyQxID0gYXdhaXRpZnkoZWFjaFNlcmllcywgMyk7XG5cbiAgICAvKipcbiAgICAgKiBXcmFwIGFuIGFzeW5jIGZ1bmN0aW9uIGFuZCBlbnN1cmUgaXQgY2FsbHMgaXRzIGNhbGxiYWNrIG9uIGEgbGF0ZXIgdGljayBvZlxuICAgICAqIHRoZSBldmVudCBsb29wLiAgSWYgdGhlIGZ1bmN0aW9uIGFscmVhZHkgY2FsbHMgaXRzIGNhbGxiYWNrIG9uIGEgbmV4dCB0aWNrLFxuICAgICAqIG5vIGV4dHJhIGRlZmVycmFsIGlzIGFkZGVkLiBUaGlzIGlzIHVzZWZ1bCBmb3IgcHJldmVudGluZyBzdGFjayBvdmVyZmxvd3NcbiAgICAgKiAoYFJhbmdlRXJyb3I6IE1heGltdW0gY2FsbCBzdGFjayBzaXplIGV4Y2VlZGVkYCkgYW5kIGdlbmVyYWxseSBrZWVwaW5nXG4gICAgICogW1phbGdvXShodHRwOi8vYmxvZy5penMubWUvcG9zdC81OTE0Mjc0MjE0My9kZXNpZ25pbmctYXBpcy1mb3ItYXN5bmNocm9ueSlcbiAgICAgKiBjb250YWluZWQuIEVTMjAxNyBgYXN5bmNgIGZ1bmN0aW9ucyBhcmUgcmV0dXJuZWQgYXMtaXMgLS0gdGhleSBhcmUgaW1tdW5lXG4gICAgICogdG8gWmFsZ28ncyBjb3JydXB0aW5nIGluZmx1ZW5jZXMsIGFzIHRoZXkgYWx3YXlzIHJlc29sdmUgb24gYSBsYXRlciB0aWNrLlxuICAgICAqXG4gICAgICogQG5hbWUgZW5zdXJlQXN5bmNcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpVdGlsc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gZm4gLSBhbiBhc3luYyBmdW5jdGlvbiwgb25lIHRoYXQgZXhwZWN0cyBhIG5vZGUtc3R5bGVcbiAgICAgKiBjYWxsYmFjayBhcyBpdHMgbGFzdCBhcmd1bWVudC5cbiAgICAgKiBAcmV0dXJucyB7QXN5bmNGdW5jdGlvbn0gUmV0dXJucyBhIHdyYXBwZWQgZnVuY3Rpb24gd2l0aCB0aGUgZXhhY3Qgc2FtZSBjYWxsXG4gICAgICogc2lnbmF0dXJlIGFzIHRoZSBmdW5jdGlvbiBwYXNzZWQgaW4uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIHNvbWV0aW1lc0FzeW5jKGFyZywgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgaWYgKGNhY2hlW2FyZ10pIHtcbiAgICAgKiAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsLCBjYWNoZVthcmddKTsgLy8gdGhpcyB3b3VsZCBiZSBzeW5jaHJvbm91cyEhXG4gICAgICogICAgIH0gZWxzZSB7XG4gICAgICogICAgICAgICBkb1NvbWVJTyhhcmcsIGNhbGxiYWNrKTsgLy8gdGhpcyBJTyB3b3VsZCBiZSBhc3luY2hyb25vdXNcbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIC8vIHRoaXMgaGFzIGEgcmlzayBvZiBzdGFjayBvdmVyZmxvd3MgaWYgbWFueSByZXN1bHRzIGFyZSBjYWNoZWQgaW4gYSByb3dcbiAgICAgKiBhc3luYy5tYXBTZXJpZXMoYXJncywgc29tZXRpbWVzQXN5bmMsIGRvbmUpO1xuICAgICAqXG4gICAgICogLy8gdGhpcyB3aWxsIGRlZmVyIHNvbWV0aW1lc0FzeW5jJ3MgY2FsbGJhY2sgaWYgbmVjZXNzYXJ5LFxuICAgICAqIC8vIHByZXZlbnRpbmcgc3RhY2sgb3ZlcmZsb3dzXG4gICAgICogYXN5bmMubWFwU2VyaWVzKGFyZ3MsIGFzeW5jLmVuc3VyZUFzeW5jKHNvbWV0aW1lc0FzeW5jKSwgZG9uZSk7XG4gICAgICovXG4gICAgZnVuY3Rpb24gZW5zdXJlQXN5bmMoZm4pIHtcbiAgICAgICAgaWYgKGlzQXN5bmMoZm4pKSByZXR1cm4gZm47XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoLi4uYXJncy8qLCBjYWxsYmFjayovKSB7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgdmFyIHN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgYXJncy5wdXNoKCguLi5pbm5lckFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoc3luYykge1xuICAgICAgICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUkMSgoKSA9PiBjYWxsYmFjayguLi5pbm5lckFyZ3MpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayguLi5pbm5lckFyZ3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICBzeW5jID0gZmFsc2U7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBgdHJ1ZWAgaWYgZXZlcnkgZWxlbWVudCBpbiBgY29sbGAgc2F0aXNmaWVzIGFuIGFzeW5jIHRlc3QuIElmIGFueVxuICAgICAqIGl0ZXJhdGVlIGNhbGwgcmV0dXJucyBgZmFsc2VgLCB0aGUgbWFpbiBgY2FsbGJhY2tgIGlzIGltbWVkaWF0ZWx5IGNhbGxlZC5cbiAgICAgKlxuICAgICAqIEBuYW1lIGV2ZXJ5XG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGFsaWFzIGFsbFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEFuIGFzeW5jIHRydXRoIHRlc3QgdG8gYXBwbHkgdG8gZWFjaCBpdGVtXG4gICAgICogaW4gdGhlIGNvbGxlY3Rpb24gaW4gcGFyYWxsZWwuXG4gICAgICogVGhlIGl0ZXJhdGVlIG11c3QgY29tcGxldGUgd2l0aCBhIGJvb2xlYW4gcmVzdWx0IHZhbHVlLlxuICAgICAqIEludm9rZWQgd2l0aCAoaXRlbSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCBhZnRlciBhbGwgdGhlXG4gICAgICogYGl0ZXJhdGVlYCBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZC4gUmVzdWx0IHdpbGwgYmUgZWl0aGVyIGB0cnVlYCBvciBgZmFsc2VgXG4gICAgICogZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZXMgb2YgdGhlIGFzeW5jIHRlc3RzLiBJbnZva2VkIHdpdGggKGVyciwgcmVzdWx0KS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBwcm92aWRlZFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBkaXIxIGlzIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgZmlsZTEudHh0LCBmaWxlMi50eHRcbiAgICAgKiAvLyBkaXIyIGlzIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgZmlsZTMudHh0LCBmaWxlNC50eHRcbiAgICAgKiAvLyBkaXIzIGlzIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgZmlsZTUudHh0XG4gICAgICogLy8gZGlyNCBkb2VzIG5vdCBleGlzdFxuICAgICAqXG4gICAgICogY29uc3QgZmlsZUxpc3QgPSBbJ2RpcjEvZmlsZTEudHh0JywnZGlyMi9maWxlMy50eHQnLCdkaXIzL2ZpbGU1LnR4dCddO1xuICAgICAqIGNvbnN0IHdpdGhNaXNzaW5nRmlsZUxpc3QgPSBbJ2ZpbGUxLnR4dCcsJ2ZpbGUyLnR4dCcsJ2ZpbGU0LnR4dCddO1xuICAgICAqXG4gICAgICogLy8gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIGlmIGEgZmlsZSBleGlzdHNcbiAgICAgKiBmdW5jdGlvbiBmaWxlRXhpc3RzKGZpbGUsIGNhbGxiYWNrKSB7XG4gICAgICogICAgZnMuYWNjZXNzKGZpbGUsIGZzLmNvbnN0YW50cy5GX09LLCAoZXJyKSA9PiB7XG4gICAgICogICAgICAgIGNhbGxiYWNrKG51bGwsICFlcnIpO1xuICAgICAqICAgIH0pO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIGNhbGxiYWNrc1xuICAgICAqIGFzeW5jLmV2ZXJ5KGZpbGVMaXN0LCBmaWxlRXhpc3RzLCBmdW5jdGlvbihlcnIsIHJlc3VsdCkge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAvLyB0cnVlXG4gICAgICogICAgIC8vIHJlc3VsdCBpcyB0cnVlIHNpbmNlIGV2ZXJ5IGZpbGUgZXhpc3RzXG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiBhc3luYy5ldmVyeSh3aXRoTWlzc2luZ0ZpbGVMaXN0LCBmaWxlRXhpc3RzLCBmdW5jdGlvbihlcnIsIHJlc3VsdCkge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAvLyBmYWxzZVxuICAgICAqICAgICAvLyByZXN1bHQgaXMgZmFsc2Ugc2luY2UgTk9UIGV2ZXJ5IGZpbGUgZXhpc3RzXG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBQcm9taXNlc1xuICAgICAqIGFzeW5jLmV2ZXJ5KGZpbGVMaXN0LCBmaWxlRXhpc3RzKVxuICAgICAqIC50aGVuKCByZXN1bHQgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAvLyB0cnVlXG4gICAgICogICAgIC8vIHJlc3VsdCBpcyB0cnVlIHNpbmNlIGV2ZXJ5IGZpbGUgZXhpc3RzXG4gICAgICogfSkuY2F0Y2goIGVyciA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiBhc3luYy5ldmVyeSh3aXRoTWlzc2luZ0ZpbGVMaXN0LCBmaWxlRXhpc3RzKVxuICAgICAqIC50aGVuKCByZXN1bHQgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAvLyBmYWxzZVxuICAgICAqICAgICAvLyByZXN1bHQgaXMgZmFsc2Ugc2luY2UgTk9UIGV2ZXJ5IGZpbGUgZXhpc3RzXG4gICAgICogfSkuY2F0Y2goIGVyciA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBhc3luYy9hd2FpdFxuICAgICAqIGFzeW5jICgpID0+IHtcbiAgICAgKiAgICAgdHJ5IHtcbiAgICAgKiAgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBhc3luYy5ldmVyeShmaWxlTGlzdCwgZmlsZUV4aXN0cyk7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAgICAgLy8gdHJ1ZVxuICAgICAqICAgICAgICAgLy8gcmVzdWx0IGlzIHRydWUgc2luY2UgZXZlcnkgZmlsZSBleGlzdHNcbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICogYXN5bmMgKCkgPT4ge1xuICAgICAqICAgICB0cnkge1xuICAgICAqICAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IGFzeW5jLmV2ZXJ5KHdpdGhNaXNzaW5nRmlsZUxpc3QsIGZpbGVFeGlzdHMpO1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgICAgIC8vIGZhbHNlXG4gICAgICogICAgICAgICAvLyByZXN1bHQgaXMgZmFsc2Ugc2luY2UgTk9UIGV2ZXJ5IGZpbGUgZXhpc3RzXG4gICAgICogICAgIH1cbiAgICAgKiAgICAgY2F0Y2ggKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGV2ZXJ5KGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX2NyZWF0ZVRlc3Rlcihib29sID0+ICFib29sLCByZXMgPT4gIXJlcykoZWFjaE9mJDEsIGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaylcbiAgICB9XG4gICAgdmFyIGV2ZXJ5JDEgPSBhd2FpdGlmeShldmVyeSwgMyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyBbYGV2ZXJ5YF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmV2ZXJ5fSBidXQgcnVucyBhIG1heGltdW0gb2YgYGxpbWl0YCBhc3luYyBvcGVyYXRpb25zIGF0IGEgdGltZS5cbiAgICAgKlxuICAgICAqIEBuYW1lIGV2ZXJ5TGltaXRcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5ldmVyeV17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmV2ZXJ5fVxuICAgICAqIEBhbGlhcyBhbGxMaW1pdFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbWl0IC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGFzeW5jIG9wZXJhdGlvbnMgYXQgYSB0aW1lLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBbiBhc3luYyB0cnV0aCB0ZXN0IHRvIGFwcGx5IHRvIGVhY2ggaXRlbVxuICAgICAqIGluIHRoZSBjb2xsZWN0aW9uIGluIHBhcmFsbGVsLlxuICAgICAqIFRoZSBpdGVyYXRlZSBtdXN0IGNvbXBsZXRlIHdpdGggYSBib29sZWFuIHJlc3VsdCB2YWx1ZS5cbiAgICAgKiBJbnZva2VkIHdpdGggKGl0ZW0sIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgYWZ0ZXIgYWxsIHRoZVxuICAgICAqIGBpdGVyYXRlZWAgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQuIFJlc3VsdCB3aWxsIGJlIGVpdGhlciBgdHJ1ZWAgb3IgYGZhbHNlYFxuICAgICAqIGRlcGVuZGluZyBvbiB0aGUgdmFsdWVzIG9mIHRoZSBhc3luYyB0ZXN0cy4gSW52b2tlZCB3aXRoIChlcnIsIHJlc3VsdCkuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgcHJvdmlkZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBldmVyeUxpbWl0KGNvbGwsIGxpbWl0LCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9jcmVhdGVUZXN0ZXIoYm9vbCA9PiAhYm9vbCwgcmVzID0+ICFyZXMpKGVhY2hPZkxpbWl0JDIobGltaXQpLCBjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuICAgIHZhciBldmVyeUxpbWl0JDEgPSBhd2FpdGlmeShldmVyeUxpbWl0LCA0KTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzYW1lIGFzIFtgZXZlcnlgXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZXZlcnl9IGJ1dCBydW5zIG9ubHkgYSBzaW5nbGUgYXN5bmMgb3BlcmF0aW9uIGF0IGEgdGltZS5cbiAgICAgKlxuICAgICAqIEBuYW1lIGV2ZXJ5U2VyaWVzXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMuZXZlcnlde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5ldmVyeX1cbiAgICAgKiBAYWxpYXMgYWxsU2VyaWVzXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfEFzeW5jSXRlcmFibGV8T2JqZWN0fSBjb2xsIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQW4gYXN5bmMgdHJ1dGggdGVzdCB0byBhcHBseSB0byBlYWNoIGl0ZW1cbiAgICAgKiBpbiB0aGUgY29sbGVjdGlvbiBpbiBzZXJpZXMuXG4gICAgICogVGhlIGl0ZXJhdGVlIG11c3QgY29tcGxldGUgd2l0aCBhIGJvb2xlYW4gcmVzdWx0IHZhbHVlLlxuICAgICAqIEludm9rZWQgd2l0aCAoaXRlbSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCBhZnRlciBhbGwgdGhlXG4gICAgICogYGl0ZXJhdGVlYCBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZC4gUmVzdWx0IHdpbGwgYmUgZWl0aGVyIGB0cnVlYCBvciBgZmFsc2VgXG4gICAgICogZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZXMgb2YgdGhlIGFzeW5jIHRlc3RzLiBJbnZva2VkIHdpdGggKGVyciwgcmVzdWx0KS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBwcm92aWRlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGV2ZXJ5U2VyaWVzKGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX2NyZWF0ZVRlc3Rlcihib29sID0+ICFib29sLCByZXMgPT4gIXJlcykoZWFjaE9mU2VyaWVzJDEsIGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaylcbiAgICB9XG4gICAgdmFyIGV2ZXJ5U2VyaWVzJDEgPSBhd2FpdGlmeShldmVyeVNlcmllcywgMyk7XG5cbiAgICBmdW5jdGlvbiBmaWx0ZXJBcnJheShlYWNoZm4sIGFyciwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciB0cnV0aFZhbHVlcyA9IG5ldyBBcnJheShhcnIubGVuZ3RoKTtcbiAgICAgICAgZWFjaGZuKGFyciwgKHgsIGluZGV4LCBpdGVyQ2IpID0+IHtcbiAgICAgICAgICAgIGl0ZXJhdGVlKHgsIChlcnIsIHYpID0+IHtcbiAgICAgICAgICAgICAgICB0cnV0aFZhbHVlc1tpbmRleF0gPSAhIXY7XG4gICAgICAgICAgICAgICAgaXRlckNiKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZXJyID0+IHtcbiAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRydXRoVmFsdWVzW2ldKSByZXN1bHRzLnB1c2goYXJyW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdHMpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmaWx0ZXJHZW5lcmljKGVhY2hmbiwgY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIGVhY2hmbihjb2xsLCAoeCwgaW5kZXgsIGl0ZXJDYikgPT4ge1xuICAgICAgICAgICAgaXRlcmF0ZWUoeCwgKGVyciwgdikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBpdGVyQ2IoZXJyKTtcbiAgICAgICAgICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goe2luZGV4LCB2YWx1ZTogeH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpdGVyQ2IoZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBlcnIgPT4ge1xuICAgICAgICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXN1bHRzXG4gICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEuaW5kZXggLSBiLmluZGV4KVxuICAgICAgICAgICAgICAgIC5tYXAodiA9PiB2LnZhbHVlKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9maWx0ZXIoZWFjaGZuLCBjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGZpbHRlciA9IGlzQXJyYXlMaWtlKGNvbGwpID8gZmlsdGVyQXJyYXkgOiBmaWx0ZXJHZW5lcmljO1xuICAgICAgICByZXR1cm4gZmlsdGVyKGVhY2hmbiwgY29sbCwgd3JhcEFzeW5jKGl0ZXJhdGVlKSwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBuZXcgYXJyYXkgb2YgYWxsIHRoZSB2YWx1ZXMgaW4gYGNvbGxgIHdoaWNoIHBhc3MgYW4gYXN5bmMgdHJ1dGhcbiAgICAgKiB0ZXN0LiBUaGlzIG9wZXJhdGlvbiBpcyBwZXJmb3JtZWQgaW4gcGFyYWxsZWwsIGJ1dCB0aGUgcmVzdWx0cyBhcnJheSB3aWxsIGJlXG4gICAgICogaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlIG9yaWdpbmFsLlxuICAgICAqXG4gICAgICogQG5hbWUgZmlsdGVyXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGFsaWFzIHNlbGVjdFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBIHRydXRoIHRlc3QgdG8gYXBwbHkgdG8gZWFjaCBpdGVtIGluIGBjb2xsYC5cbiAgICAgKiBUaGUgYGl0ZXJhdGVlYCBpcyBwYXNzZWQgYSBgY2FsbGJhY2soZXJyLCB0cnV0aFZhbHVlKWAsIHdoaWNoIG11c3QgYmUgY2FsbGVkXG4gICAgICogd2l0aCBhIGJvb2xlYW4gYXJndW1lbnQgb25jZSBpdCBoYXMgY29tcGxldGVkLiBJbnZva2VkIHdpdGggKGl0ZW0sIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgYWZ0ZXIgYWxsIHRoZVxuICAgICAqIGBpdGVyYXRlZWAgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQuIEludm9rZWQgd2l0aCAoZXJyLCByZXN1bHRzKS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBwcm92aWRlZFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBkaXIxIGlzIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgZmlsZTEudHh0LCBmaWxlMi50eHRcbiAgICAgKiAvLyBkaXIyIGlzIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgZmlsZTMudHh0LCBmaWxlNC50eHRcbiAgICAgKiAvLyBkaXIzIGlzIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgZmlsZTUudHh0XG4gICAgICpcbiAgICAgKiBjb25zdCBmaWxlcyA9IFsnZGlyMS9maWxlMS50eHQnLCdkaXIyL2ZpbGUzLnR4dCcsJ2RpcjMvZmlsZTYudHh0J107XG4gICAgICpcbiAgICAgKiAvLyBhc3luY2hyb25vdXMgZnVuY3Rpb24gdGhhdCBjaGVja3MgaWYgYSBmaWxlIGV4aXN0c1xuICAgICAqIGZ1bmN0aW9uIGZpbGVFeGlzdHMoZmlsZSwgY2FsbGJhY2spIHtcbiAgICAgKiAgICBmcy5hY2Nlc3MoZmlsZSwgZnMuY29uc3RhbnRzLkZfT0ssIChlcnIpID0+IHtcbiAgICAgKiAgICAgICAgY2FsbGJhY2sobnVsbCwgIWVycik7XG4gICAgICogICAgfSk7XG4gICAgICogfVxuICAgICAqXG4gICAgICogLy8gVXNpbmcgY2FsbGJhY2tzXG4gICAgICogYXN5bmMuZmlsdGVyKGZpbGVzLCBmaWxlRXhpc3RzLCBmdW5jdGlvbihlcnIsIHJlc3VsdHMpIHtcbiAgICAgKiAgICBpZihlcnIpIHtcbiAgICAgKiAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICB9IGVsc2Uge1xuICAgICAqICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiAgICAgICAgLy8gWyAnZGlyMS9maWxlMS50eHQnLCAnZGlyMi9maWxlMy50eHQnIF1cbiAgICAgKiAgICAgICAgLy8gcmVzdWx0cyBpcyBub3cgYW4gYXJyYXkgb2YgdGhlIGV4aXN0aW5nIGZpbGVzXG4gICAgICogICAgfVxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgUHJvbWlzZXNcbiAgICAgKiBhc3luYy5maWx0ZXIoZmlsZXMsIGZpbGVFeGlzdHMpXG4gICAgICogLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgICAvLyBbICdkaXIxL2ZpbGUxLnR4dCcsICdkaXIyL2ZpbGUzLnR4dCcgXVxuICAgICAqICAgICAvLyByZXN1bHRzIGlzIG5vdyBhbiBhcnJheSBvZiB0aGUgZXhpc3RpbmcgZmlsZXNcbiAgICAgKiB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgYXN5bmMvYXdhaXRcbiAgICAgKiBhc3luYyAoKSA9PiB7XG4gICAgICogICAgIHRyeSB7XG4gICAgICogICAgICAgICBsZXQgcmVzdWx0cyA9IGF3YWl0IGFzeW5jLmZpbHRlcihmaWxlcywgZmlsZUV4aXN0cyk7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiAgICAgICAgIC8vIFsgJ2RpcjEvZmlsZTEudHh0JywgJ2RpcjIvZmlsZTMudHh0JyBdXG4gICAgICogICAgICAgICAvLyByZXN1bHRzIGlzIG5vdyBhbiBhcnJheSBvZiB0aGUgZXhpc3RpbmcgZmlsZXNcbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICovXG4gICAgZnVuY3Rpb24gZmlsdGVyIChjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9maWx0ZXIoZWFjaE9mJDEsIGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaylcbiAgICB9XG4gICAgdmFyIGZpbHRlciQxID0gYXdhaXRpZnkoZmlsdGVyLCAzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzYW1lIGFzIFtgZmlsdGVyYF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmZpbHRlcn0gYnV0IHJ1bnMgYSBtYXhpbXVtIG9mIGBsaW1pdGAgYXN5bmMgb3BlcmF0aW9ucyBhdCBhXG4gICAgICogdGltZS5cbiAgICAgKlxuICAgICAqIEBuYW1lIGZpbHRlckxpbWl0XG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMuZmlsdGVyXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZmlsdGVyfVxuICAgICAqIEBhbGlhcyBzZWxlY3RMaW1pdFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbWl0IC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGFzeW5jIG9wZXJhdGlvbnMgYXQgYSB0aW1lLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIC0gQSB0cnV0aCB0ZXN0IHRvIGFwcGx5IHRvIGVhY2ggaXRlbSBpbiBgY29sbGAuXG4gICAgICogVGhlIGBpdGVyYXRlZWAgaXMgcGFzc2VkIGEgYGNhbGxiYWNrKGVyciwgdHJ1dGhWYWx1ZSlgLCB3aGljaCBtdXN0IGJlIGNhbGxlZFxuICAgICAqIHdpdGggYSBib29sZWFuIGFyZ3VtZW50IG9uY2UgaXQgaGFzIGNvbXBsZXRlZC4gSW52b2tlZCB3aXRoIChpdGVtLCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIGFmdGVyIGFsbCB0aGVcbiAgICAgKiBgaXRlcmF0ZWVgIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLiBJbnZva2VkIHdpdGggKGVyciwgcmVzdWx0cykuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgcHJvdmlkZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmaWx0ZXJMaW1pdCAoY29sbCwgbGltaXQsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX2ZpbHRlcihlYWNoT2ZMaW1pdCQyKGxpbWl0KSwgY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKVxuICAgIH1cbiAgICB2YXIgZmlsdGVyTGltaXQkMSA9IGF3YWl0aWZ5KGZpbHRlckxpbWl0LCA0KTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzYW1lIGFzIFtgZmlsdGVyYF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmZpbHRlcn0gYnV0IHJ1bnMgb25seSBhIHNpbmdsZSBhc3luYyBvcGVyYXRpb24gYXQgYSB0aW1lLlxuICAgICAqXG4gICAgICogQG5hbWUgZmlsdGVyU2VyaWVzXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMuZmlsdGVyXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZmlsdGVyfVxuICAgICAqIEBhbGlhcyBzZWxlY3RTZXJpZXNcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIC0gQSB0cnV0aCB0ZXN0IHRvIGFwcGx5IHRvIGVhY2ggaXRlbSBpbiBgY29sbGAuXG4gICAgICogVGhlIGBpdGVyYXRlZWAgaXMgcGFzc2VkIGEgYGNhbGxiYWNrKGVyciwgdHJ1dGhWYWx1ZSlgLCB3aGljaCBtdXN0IGJlIGNhbGxlZFxuICAgICAqIHdpdGggYSBib29sZWFuIGFyZ3VtZW50IG9uY2UgaXQgaGFzIGNvbXBsZXRlZC4gSW52b2tlZCB3aXRoIChpdGVtLCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIGFmdGVyIGFsbCB0aGVcbiAgICAgKiBgaXRlcmF0ZWVgIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLiBJbnZva2VkIHdpdGggKGVyciwgcmVzdWx0cylcbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBwcm92aWRlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZpbHRlclNlcmllcyAoY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBfZmlsdGVyKGVhY2hPZlNlcmllcyQxLCBjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuICAgIHZhciBmaWx0ZXJTZXJpZXMkMSA9IGF3YWl0aWZ5KGZpbHRlclNlcmllcywgMyk7XG5cbiAgICAvKipcbiAgICAgKiBDYWxscyB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIGBmbmAgd2l0aCBhIGNhbGxiYWNrIHBhcmFtZXRlciB0aGF0IGFsbG93cyBpdFxuICAgICAqIHRvIGNhbGwgaXRzZWxmIGFnYWluLCBpbiBzZXJpZXMsIGluZGVmaW5pdGVseS5cblxuICAgICAqIElmIGFuIGVycm9yIGlzIHBhc3NlZCB0byB0aGUgY2FsbGJhY2sgdGhlbiBgZXJyYmFja2AgaXMgY2FsbGVkIHdpdGggdGhlXG4gICAgICogZXJyb3IsIGFuZCBleGVjdXRpb24gc3RvcHMsIG90aGVyd2lzZSBpdCB3aWxsIG5ldmVyIGJlIGNhbGxlZC5cbiAgICAgKlxuICAgICAqIEBuYW1lIGZvcmV2ZXJcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb250cm9sRmxvd1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgQ29udHJvbCBGbG93XG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBmbiAtIGFuIGFzeW5jIGZ1bmN0aW9uIHRvIGNhbGwgcmVwZWF0ZWRseS5cbiAgICAgKiBJbnZva2VkIHdpdGggKG5leHQpLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtlcnJiYWNrXSAtIHdoZW4gYGZuYCBwYXNzZXMgYW4gZXJyb3IgdG8gaXQncyBjYWxsYmFjayxcbiAgICAgKiB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkLCBhbmQgZXhlY3V0aW9uIHN0b3BzLiBJbnZva2VkIHdpdGggKGVycikuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSB0aGF0IHJlamVjdHMgaWYgYW4gZXJyb3Igb2NjdXJzIGFuZCBhbiBlcnJiYWNrXG4gICAgICogaXMgbm90IHBhc3NlZFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBhc3luYy5mb3JldmVyKFxuICAgICAqICAgICBmdW5jdGlvbihuZXh0KSB7XG4gICAgICogICAgICAgICAvLyBuZXh0IGlzIHN1aXRhYmxlIGZvciBwYXNzaW5nIHRvIHRoaW5ncyB0aGF0IG5lZWQgYSBjYWxsYmFjayhlcnIgWywgd2hhdGV2ZXJdKTtcbiAgICAgKiAgICAgICAgIC8vIGl0IHdpbGwgcmVzdWx0IGluIHRoaXMgZnVuY3Rpb24gYmVpbmcgY2FsbGVkIGFnYWluLlxuICAgICAqICAgICB9LFxuICAgICAqICAgICBmdW5jdGlvbihlcnIpIHtcbiAgICAgKiAgICAgICAgIC8vIGlmIG5leHQgaXMgY2FsbGVkIHdpdGggYSB2YWx1ZSBpbiBpdHMgZmlyc3QgcGFyYW1ldGVyLCBpdCB3aWxsIGFwcGVhclxuICAgICAqICAgICAgICAgLy8gaW4gaGVyZSBhcyAnZXJyJywgYW5kIGV4ZWN1dGlvbiB3aWxsIHN0b3AuXG4gICAgICogICAgIH1cbiAgICAgKiApO1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZvcmV2ZXIoZm4sIGVycmJhY2spIHtcbiAgICAgICAgdmFyIGRvbmUgPSBvbmx5T25jZShlcnJiYWNrKTtcbiAgICAgICAgdmFyIHRhc2sgPSB3cmFwQXN5bmMoZW5zdXJlQXN5bmMoZm4pKTtcblxuICAgICAgICBmdW5jdGlvbiBuZXh0KGVycikge1xuICAgICAgICAgICAgaWYgKGVycikgcmV0dXJuIGRvbmUoZXJyKTtcbiAgICAgICAgICAgIGlmIChlcnIgPT09IGZhbHNlKSByZXR1cm47XG4gICAgICAgICAgICB0YXNrKG5leHQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgfVxuICAgIHZhciBmb3JldmVyJDEgPSBhd2FpdGlmeShmb3JldmVyLCAyKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzYW1lIGFzIFtgZ3JvdXBCeWBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5ncm91cEJ5fSBidXQgcnVucyBhIG1heGltdW0gb2YgYGxpbWl0YCBhc3luYyBvcGVyYXRpb25zIGF0IGEgdGltZS5cbiAgICAgKlxuICAgICAqIEBuYW1lIGdyb3VwQnlMaW1pdFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLmdyb3VwQnlde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5ncm91cEJ5fVxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbWl0IC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGFzeW5jIG9wZXJhdGlvbnMgYXQgYSB0aW1lLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBbiBhc3luYyBmdW5jdGlvbiB0byBhcHBseSB0byBlYWNoIGl0ZW0gaW5cbiAgICAgKiBgY29sbGAuXG4gICAgICogVGhlIGl0ZXJhdGVlIHNob3VsZCBjb21wbGV0ZSB3aXRoIGEgYGtleWAgdG8gZ3JvdXAgdGhlIHZhbHVlIHVuZGVyLlxuICAgICAqIEludm9rZWQgd2l0aCAodmFsdWUsIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgd2hlbiBhbGwgYGl0ZXJhdGVlYFxuICAgICAqIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLCBvciBhbiBlcnJvciBvY2N1cnMuIFJlc3VsdCBpcyBhbiBgT2JqZWN0YCB3aG9zZXNcbiAgICAgKiBwcm9wZXJ0aWVzIGFyZSBhcnJheXMgb2YgdmFsdWVzIHdoaWNoIHJldHVybmVkIHRoZSBjb3JyZXNwb25kaW5nIGtleS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBpcyBwYXNzZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBncm91cEJ5TGltaXQoY29sbCwgbGltaXQsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgX2l0ZXJhdGVlID0gd3JhcEFzeW5jKGl0ZXJhdGVlKTtcbiAgICAgICAgcmV0dXJuIG1hcExpbWl0JDEoY29sbCwgbGltaXQsICh2YWwsIGl0ZXJDYikgPT4ge1xuICAgICAgICAgICAgX2l0ZXJhdGVlKHZhbCwgKGVyciwga2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikgcmV0dXJuIGl0ZXJDYihlcnIpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVyQ2IoZXJyLCB7a2V5LCB2YWx9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCAoZXJyLCBtYXBSZXN1bHRzKSA9PiB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgICAgICAgICAvLyBmcm9tIE1ETiwgaGFuZGxlIG9iamVjdCBoYXZpbmcgYW4gYGhhc093blByb3BlcnR5YCBwcm9wXG4gICAgICAgICAgICB2YXIge2hhc093blByb3BlcnR5fSA9IE9iamVjdC5wcm90b3R5cGU7XG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFwUmVzdWx0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChtYXBSZXN1bHRzW2ldKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB7a2V5fSA9IG1hcFJlc3VsdHNbaV07XG4gICAgICAgICAgICAgICAgICAgIHZhciB7dmFsfSA9IG1hcFJlc3VsdHNbaV07XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwocmVzdWx0LCBrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRba2V5XS5wdXNoKHZhbCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IFt2YWxdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyLCByZXN1bHQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB2YXIgZ3JvdXBCeUxpbWl0JDEgPSBhd2FpdGlmeShncm91cEJ5TGltaXQsIDQpO1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBvYmplY3QsIHdoZXJlIGVhY2ggdmFsdWUgY29ycmVzcG9uZHMgdG8gYW4gYXJyYXkgb2YgaXRlbXMsIGZyb21cbiAgICAgKiBgY29sbGAsIHRoYXQgcmV0dXJuZWQgdGhlIGNvcnJlc3BvbmRpbmcga2V5LiBUaGF0IGlzLCB0aGUga2V5cyBvZiB0aGUgb2JqZWN0XG4gICAgICogY29ycmVzcG9uZCB0byB0aGUgdmFsdWVzIHBhc3NlZCB0byB0aGUgYGl0ZXJhdGVlYCBjYWxsYmFjay5cbiAgICAgKlxuICAgICAqIE5vdGU6IFNpbmNlIHRoaXMgZnVuY3Rpb24gYXBwbGllcyB0aGUgYGl0ZXJhdGVlYCB0byBlYWNoIGl0ZW0gaW4gcGFyYWxsZWwsXG4gICAgICogdGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgdGhlIGBpdGVyYXRlZWAgZnVuY3Rpb25zIHdpbGwgY29tcGxldGUgaW4gb3JkZXIuXG4gICAgICogSG93ZXZlciwgdGhlIHZhbHVlcyBmb3IgZWFjaCBrZXkgaW4gdGhlIGByZXN1bHRgIHdpbGwgYmUgaW4gdGhlIHNhbWUgb3JkZXIgYXNcbiAgICAgKiB0aGUgb3JpZ2luYWwgYGNvbGxgLiBGb3IgT2JqZWN0cywgdGhlIHZhbHVlcyB3aWxsIHJvdWdobHkgYmUgaW4gdGhlIG9yZGVyIG9mXG4gICAgICogdGhlIG9yaWdpbmFsIE9iamVjdHMnIGtleXMgKGJ1dCB0aGlzIGNhbiB2YXJ5IGFjcm9zcyBKYXZhU2NyaXB0IGVuZ2luZXMpLlxuICAgICAqXG4gICAgICogQG5hbWUgZ3JvdXBCeVxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEFuIGFzeW5jIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggaXRlbSBpblxuICAgICAqIGBjb2xsYC5cbiAgICAgKiBUaGUgaXRlcmF0ZWUgc2hvdWxkIGNvbXBsZXRlIHdpdGggYSBga2V5YCB0byBncm91cCB0aGUgdmFsdWUgdW5kZXIuXG4gICAgICogSW52b2tlZCB3aXRoICh2YWx1ZSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCB3aGVuIGFsbCBgaXRlcmF0ZWVgXG4gICAgICogZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQsIG9yIGFuIGVycm9yIG9jY3Vycy4gUmVzdWx0IGlzIGFuIGBPYmplY3RgIHdob3Nlc1xuICAgICAqIHByb3BlcnRpZXMgYXJlIGFycmF5cyBvZiB2YWx1ZXMgd2hpY2ggcmV0dXJuZWQgdGhlIGNvcnJlc3BvbmRpbmcga2V5LlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIG5vIGNhbGxiYWNrIGlzIHBhc3NlZFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBkaXIxIGlzIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgZmlsZTEudHh0LCBmaWxlMi50eHRcbiAgICAgKiAvLyBkaXIyIGlzIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgZmlsZTMudHh0LCBmaWxlNC50eHRcbiAgICAgKiAvLyBkaXIzIGlzIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgZmlsZTUudHh0XG4gICAgICogLy8gZGlyNCBkb2VzIG5vdCBleGlzdFxuICAgICAqXG4gICAgICogY29uc3QgZmlsZXMgPSBbJ2RpcjEvZmlsZTEudHh0JywnZGlyMicsJ2RpcjQnXVxuICAgICAqXG4gICAgICogLy8gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRoYXQgZGV0ZWN0cyBmaWxlIHR5cGUgYXMgbm9uZSwgZmlsZSwgb3IgZGlyZWN0b3J5XG4gICAgICogZnVuY3Rpb24gZGV0ZWN0RmlsZShmaWxlLCBjYWxsYmFjaykge1xuICAgICAqICAgICBmcy5zdGF0KGZpbGUsIGZ1bmN0aW9uKGVyciwgc3RhdCkge1xuICAgICAqICAgICAgICAgaWYgKGVycikge1xuICAgICAqICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsLCAnbm9uZScpO1xuICAgICAqICAgICAgICAgfVxuICAgICAqICAgICAgICAgY2FsbGJhY2sobnVsbCwgc3RhdC5pc0RpcmVjdG9yeSgpID8gJ2RpcmVjdG9yeScgOiAnZmlsZScpO1xuICAgICAqICAgICB9KTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvL1VzaW5nIGNhbGxiYWNrc1xuICAgICAqIGFzeW5jLmdyb3VwQnkoZmlsZXMsIGRldGVjdEZpbGUsIGZ1bmN0aW9uKGVyciwgcmVzdWx0KSB7XG4gICAgICogICAgIGlmKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgfSBlbHNlIHtcbiAgICAgKlx0ICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XG4gICAgICogICAgICAgICAvLyB7XG4gICAgICogICAgICAgICAvLyAgICAgZmlsZTogWyAnZGlyMS9maWxlMS50eHQnIF0sXG4gICAgICogICAgICAgICAvLyAgICAgbm9uZTogWyAnZGlyNCcgXSxcbiAgICAgKiAgICAgICAgIC8vICAgICBkaXJlY3Rvcnk6IFsgJ2RpcjInXVxuICAgICAqICAgICAgICAgLy8gfVxuICAgICAqICAgICAgICAgLy8gcmVzdWx0IGlzIG9iamVjdCBjb250YWluaW5nIHRoZSBmaWxlcyBncm91cGVkIGJ5IHR5cGVcbiAgICAgKiAgICAgfVxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgUHJvbWlzZXNcbiAgICAgKiBhc3luYy5ncm91cEJ5KGZpbGVzLCBkZXRlY3RGaWxlKVxuICAgICAqIC50aGVuKCByZXN1bHQgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAvLyB7XG4gICAgICogICAgIC8vICAgICBmaWxlOiBbICdkaXIxL2ZpbGUxLnR4dCcgXSxcbiAgICAgKiAgICAgLy8gICAgIG5vbmU6IFsgJ2RpcjQnIF0sXG4gICAgICogICAgIC8vICAgICBkaXJlY3Rvcnk6IFsgJ2RpcjInXVxuICAgICAqICAgICAvLyB9XG4gICAgICogICAgIC8vIHJlc3VsdCBpcyBvYmplY3QgY29udGFpbmluZyB0aGUgZmlsZXMgZ3JvdXBlZCBieSB0eXBlXG4gICAgICogfSkuY2F0Y2goIGVyciA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBhc3luYy9hd2FpdFxuICAgICAqIGFzeW5jICgpID0+IHtcbiAgICAgKiAgICAgdHJ5IHtcbiAgICAgKiAgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBhc3luYy5ncm91cEJ5KGZpbGVzLCBkZXRlY3RGaWxlKTtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XG4gICAgICogICAgICAgICAvLyB7XG4gICAgICogICAgICAgICAvLyAgICAgZmlsZTogWyAnZGlyMS9maWxlMS50eHQnIF0sXG4gICAgICogICAgICAgICAvLyAgICAgbm9uZTogWyAnZGlyNCcgXSxcbiAgICAgKiAgICAgICAgIC8vICAgICBkaXJlY3Rvcnk6IFsgJ2RpcjInXVxuICAgICAqICAgICAgICAgLy8gfVxuICAgICAqICAgICAgICAgLy8gcmVzdWx0IGlzIG9iamVjdCBjb250YWluaW5nIHRoZSBmaWxlcyBncm91cGVkIGJ5IHR5cGVcbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ3JvdXBCeSAoY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBncm91cEJ5TGltaXQkMShjb2xsLCBJbmZpbml0eSwgaXRlcmF0ZWUsIGNhbGxiYWNrKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBzYW1lIGFzIFtgZ3JvdXBCeWBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5ncm91cEJ5fSBidXQgcnVucyBvbmx5IGEgc2luZ2xlIGFzeW5jIG9wZXJhdGlvbiBhdCBhIHRpbWUuXG4gICAgICpcbiAgICAgKiBAbmFtZSBncm91cEJ5U2VyaWVzXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMuZ3JvdXBCeV17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmdyb3VwQnl9XG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfEFzeW5jSXRlcmFibGV8T2JqZWN0fSBjb2xsIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQW4gYXN5bmMgZnVuY3Rpb24gdG8gYXBwbHkgdG8gZWFjaCBpdGVtIGluXG4gICAgICogYGNvbGxgLlxuICAgICAqIFRoZSBpdGVyYXRlZSBzaG91bGQgY29tcGxldGUgd2l0aCBhIGBrZXlgIHRvIGdyb3VwIHRoZSB2YWx1ZSB1bmRlci5cbiAgICAgKiBJbnZva2VkIHdpdGggKHZhbHVlLCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIHdoZW4gYWxsIGBpdGVyYXRlZWBcbiAgICAgKiBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZCwgb3IgYW4gZXJyb3Igb2NjdXJzLiBSZXN1bHQgaXMgYW4gYE9iamVjdGAgd2hvc2VcbiAgICAgKiBwcm9wZXJ0aWVzIGFyZSBhcnJheXMgb2YgdmFsdWVzIHdoaWNoIHJldHVybmVkIHRoZSBjb3JyZXNwb25kaW5nIGtleS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBpcyBwYXNzZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBncm91cEJ5U2VyaWVzIChjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGdyb3VwQnlMaW1pdCQxKGNvbGwsIDEsIGl0ZXJhdGVlLCBjYWxsYmFjaylcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMb2dzIHRoZSByZXN1bHQgb2YgYW4gYGFzeW5jYCBmdW5jdGlvbiB0byB0aGUgYGNvbnNvbGVgLiBPbmx5IHdvcmtzIGluXG4gICAgICogTm9kZS5qcyBvciBpbiBicm93c2VycyB0aGF0IHN1cHBvcnQgYGNvbnNvbGUubG9nYCBhbmQgYGNvbnNvbGUuZXJyb3JgIChzdWNoXG4gICAgICogYXMgRkYgYW5kIENocm9tZSkuIElmIG11bHRpcGxlIGFyZ3VtZW50cyBhcmUgcmV0dXJuZWQgZnJvbSB0aGUgYXN5bmNcbiAgICAgKiBmdW5jdGlvbiwgYGNvbnNvbGUubG9nYCBpcyBjYWxsZWQgb24gZWFjaCBhcmd1bWVudCBpbiBvcmRlci5cbiAgICAgKlxuICAgICAqIEBuYW1lIGxvZ1xuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOlV0aWxzXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBmdW5jdGlvbiAtIFRoZSBmdW5jdGlvbiB5b3Ugd2FudCB0byBldmVudHVhbGx5IGFwcGx5XG4gICAgICogYWxsIGFyZ3VtZW50cyB0by5cbiAgICAgKiBAcGFyYW0gey4uLip9IGFyZ3VtZW50cy4uLiAtIEFueSBudW1iZXIgb2YgYXJndW1lbnRzIHRvIGFwcGx5IHRvIHRoZSBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gaW4gYSBtb2R1bGVcbiAgICAgKiB2YXIgaGVsbG8gPSBmdW5jdGlvbihuYW1lLCBjYWxsYmFjaykge1xuICAgICAqICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ2hlbGxvICcgKyBuYW1lKTtcbiAgICAgKiAgICAgfSwgMTAwMCk7XG4gICAgICogfTtcbiAgICAgKlxuICAgICAqIC8vIGluIHRoZSBub2RlIHJlcGxcbiAgICAgKiBub2RlPiBhc3luYy5sb2coaGVsbG8sICd3b3JsZCcpO1xuICAgICAqICdoZWxsbyB3b3JsZCdcbiAgICAgKi9cbiAgICB2YXIgbG9nID0gY29uc29sZUZ1bmMoJ2xvZycpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNhbWUgYXMgW2BtYXBWYWx1ZXNgXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMubWFwVmFsdWVzfSBidXQgcnVucyBhIG1heGltdW0gb2YgYGxpbWl0YCBhc3luYyBvcGVyYXRpb25zIGF0IGFcbiAgICAgKiB0aW1lLlxuICAgICAqXG4gICAgICogQG5hbWUgbWFwVmFsdWVzTGltaXRcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5tYXBWYWx1ZXNde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5tYXBWYWx1ZXN9XG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbGltaXQgLSBUaGUgbWF4aW11bSBudW1iZXIgb2YgYXN5bmMgb3BlcmF0aW9ucyBhdCBhIHRpbWUuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEEgZnVuY3Rpb24gdG8gYXBwbHkgdG8gZWFjaCB2YWx1ZSBhbmQga2V5XG4gICAgICogaW4gYGNvbGxgLlxuICAgICAqIFRoZSBpdGVyYXRlZSBzaG91bGQgY29tcGxldGUgd2l0aCB0aGUgdHJhbnNmb3JtZWQgdmFsdWUgYXMgaXRzIHJlc3VsdC5cbiAgICAgKiBJbnZva2VkIHdpdGggKHZhbHVlLCBrZXksIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgd2hlbiBhbGwgYGl0ZXJhdGVlYFxuICAgICAqIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLCBvciBhbiBlcnJvciBvY2N1cnMuIGByZXN1bHRgIGlzIGEgbmV3IG9iamVjdCBjb25zaXN0aW5nXG4gICAgICogb2YgZWFjaCBrZXkgZnJvbSBgb2JqYCwgd2l0aCBlYWNoIHRyYW5zZm9ybWVkIHZhbHVlIG9uIHRoZSByaWdodC1oYW5kIHNpZGUuXG4gICAgICogSW52b2tlZCB3aXRoIChlcnIsIHJlc3VsdCkuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgaXMgcGFzc2VkXG4gICAgICovXG4gICAgZnVuY3Rpb24gbWFwVmFsdWVzTGltaXQob2JqLCBsaW1pdCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gb25jZShjYWxsYmFjayk7XG4gICAgICAgIHZhciBuZXdPYmogPSB7fTtcbiAgICAgICAgdmFyIF9pdGVyYXRlZSA9IHdyYXBBc3luYyhpdGVyYXRlZSk7XG4gICAgICAgIHJldHVybiBlYWNoT2ZMaW1pdCQyKGxpbWl0KShvYmosICh2YWwsIGtleSwgbmV4dCkgPT4ge1xuICAgICAgICAgICAgX2l0ZXJhdGVlKHZhbCwga2V5LCAoZXJyLCByZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gbmV4dChlcnIpO1xuICAgICAgICAgICAgICAgIG5ld09ialtrZXldID0gcmVzdWx0O1xuICAgICAgICAgICAgICAgIG5leHQoZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBlcnIgPT4gY2FsbGJhY2soZXJyLCBuZXdPYmopKTtcbiAgICB9XG5cbiAgICB2YXIgbWFwVmFsdWVzTGltaXQkMSA9IGF3YWl0aWZ5KG1hcFZhbHVlc0xpbWl0LCA0KTtcblxuICAgIC8qKlxuICAgICAqIEEgcmVsYXRpdmUgb2YgW2BtYXBgXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMubWFwfSwgZGVzaWduZWQgZm9yIHVzZSB3aXRoIG9iamVjdHMuXG4gICAgICpcbiAgICAgKiBQcm9kdWNlcyBhIG5ldyBPYmplY3QgYnkgbWFwcGluZyBlYWNoIHZhbHVlIG9mIGBvYmpgIHRocm91Z2ggdGhlIGBpdGVyYXRlZWBcbiAgICAgKiBmdW5jdGlvbi4gVGhlIGBpdGVyYXRlZWAgaXMgY2FsbGVkIGVhY2ggYHZhbHVlYCBhbmQgYGtleWAgZnJvbSBgb2JqYCBhbmQgYVxuICAgICAqIGNhbGxiYWNrIGZvciB3aGVuIGl0IGhhcyBmaW5pc2hlZCBwcm9jZXNzaW5nLiBFYWNoIG9mIHRoZXNlIGNhbGxiYWNrcyB0YWtlc1xuICAgICAqIHR3byBhcmd1bWVudHM6IGFuIGBlcnJvcmAsIGFuZCB0aGUgdHJhbnNmb3JtZWQgaXRlbSBmcm9tIGBvYmpgLiBJZiBgaXRlcmF0ZWVgXG4gICAgICogcGFzc2VzIGFuIGVycm9yIHRvIGl0cyBjYWxsYmFjaywgdGhlIG1haW4gYGNhbGxiYWNrYCAoZm9yIHRoZSBgbWFwVmFsdWVzYFxuICAgICAqIGZ1bmN0aW9uKSBpcyBpbW1lZGlhdGVseSBjYWxsZWQgd2l0aCB0aGUgZXJyb3IuXG4gICAgICpcbiAgICAgKiBOb3RlLCB0aGUgb3JkZXIgb2YgdGhlIGtleXMgaW4gdGhlIHJlc3VsdCBpcyBub3QgZ3VhcmFudGVlZC4gIFRoZSBrZXlzIHdpbGxcbiAgICAgKiBiZSByb3VnaGx5IGluIHRoZSBvcmRlciB0aGV5IGNvbXBsZXRlLCAoYnV0IHRoaXMgaXMgdmVyeSBlbmdpbmUtc3BlY2lmaWMpXG4gICAgICpcbiAgICAgKiBAbmFtZSBtYXBWYWx1ZXNcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmogLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggdmFsdWUgYW5kIGtleVxuICAgICAqIGluIGBjb2xsYC5cbiAgICAgKiBUaGUgaXRlcmF0ZWUgc2hvdWxkIGNvbXBsZXRlIHdpdGggdGhlIHRyYW5zZm9ybWVkIHZhbHVlIGFzIGl0cyByZXN1bHQuXG4gICAgICogSW52b2tlZCB3aXRoICh2YWx1ZSwga2V5LCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIHdoZW4gYWxsIGBpdGVyYXRlZWBcbiAgICAgKiBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZCwgb3IgYW4gZXJyb3Igb2NjdXJzLiBgcmVzdWx0YCBpcyBhIG5ldyBvYmplY3QgY29uc2lzdGluZ1xuICAgICAqIG9mIGVhY2gga2V5IGZyb20gYG9iamAsIHdpdGggZWFjaCB0cmFuc2Zvcm1lZCB2YWx1ZSBvbiB0aGUgcmlnaHQtaGFuZCBzaWRlLlxuICAgICAqIEludm9rZWQgd2l0aCAoZXJyLCByZXN1bHQpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIG5vIGNhbGxiYWNrIGlzIHBhc3NlZFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBmaWxlMS50eHQgaXMgYSBmaWxlIHRoYXQgaXMgMTAwMCBieXRlcyBpbiBzaXplXG4gICAgICogLy8gZmlsZTIudHh0IGlzIGEgZmlsZSB0aGF0IGlzIDIwMDAgYnl0ZXMgaW4gc2l6ZVxuICAgICAqIC8vIGZpbGUzLnR4dCBpcyBhIGZpbGUgdGhhdCBpcyAzMDAwIGJ5dGVzIGluIHNpemVcbiAgICAgKiAvLyBmaWxlNC50eHQgZG9lcyBub3QgZXhpc3RcbiAgICAgKlxuICAgICAqIGNvbnN0IGZpbGVNYXAgPSB7XG4gICAgICogICAgIGYxOiAnZmlsZTEudHh0JyxcbiAgICAgKiAgICAgZjI6ICdmaWxlMi50eHQnLFxuICAgICAqICAgICBmMzogJ2ZpbGUzLnR4dCdcbiAgICAgKiB9O1xuICAgICAqXG4gICAgICogY29uc3Qgd2l0aE1pc3NpbmdGaWxlTWFwID0ge1xuICAgICAqICAgICBmMTogJ2ZpbGUxLnR4dCcsXG4gICAgICogICAgIGYyOiAnZmlsZTIudHh0JyxcbiAgICAgKiAgICAgZjM6ICdmaWxlNC50eHQnXG4gICAgICogfTtcbiAgICAgKlxuICAgICAqIC8vIGFzeW5jaHJvbm91cyBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGZpbGUgc2l6ZSBpbiBieXRlc1xuICAgICAqIGZ1bmN0aW9uIGdldEZpbGVTaXplSW5CeXRlcyhmaWxlLCBrZXksIGNhbGxiYWNrKSB7XG4gICAgICogICAgIGZzLnN0YXQoZmlsZSwgZnVuY3Rpb24oZXJyLCBzdGF0KSB7XG4gICAgICogICAgICAgICBpZiAoZXJyKSB7XG4gICAgICogICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICogICAgICAgICB9XG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCBzdGF0LnNpemUpO1xuICAgICAqICAgICB9KTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBjYWxsYmFja3NcbiAgICAgKiBhc3luYy5tYXBWYWx1ZXMoZmlsZU1hcCwgZ2V0RmlsZVNpemVJbkJ5dGVzLCBmdW5jdGlvbihlcnIsIHJlc3VsdCkge1xuICAgICAqICAgICBpZiAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9IGVsc2Uge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgICAgIC8vIHJlc3VsdCBpcyBub3cgYSBtYXAgb2YgZmlsZSBzaXplIGluIGJ5dGVzIGZvciBlYWNoIGZpbGUsIGUuZy5cbiAgICAgKiAgICAgICAgIC8vIHtcbiAgICAgKiAgICAgICAgIC8vICAgICBmMTogMTAwMCxcbiAgICAgKiAgICAgICAgIC8vICAgICBmMjogMjAwMCxcbiAgICAgKiAgICAgICAgIC8vICAgICBmMzogMzAwMFxuICAgICAqICAgICAgICAgLy8gfVxuICAgICAqICAgICB9XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBFcnJvciBoYW5kbGluZ1xuICAgICAqIGFzeW5jLm1hcFZhbHVlcyh3aXRoTWlzc2luZ0ZpbGVNYXAsIGdldEZpbGVTaXplSW5CeXRlcywgZnVuY3Rpb24oZXJyLCByZXN1bHQpIHtcbiAgICAgKiAgICAgaWYgKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgICAgIC8vIFsgRXJyb3I6IEVOT0VOVDogbm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSBdXG4gICAgICogICAgIH0gZWxzZSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICB9XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBQcm9taXNlc1xuICAgICAqIGFzeW5jLm1hcFZhbHVlcyhmaWxlTWFwLCBnZXRGaWxlU2l6ZUluQnl0ZXMpXG4gICAgICogLnRoZW4oIHJlc3VsdCA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XG4gICAgICogICAgIC8vIHJlc3VsdCBpcyBub3cgYSBtYXAgb2YgZmlsZSBzaXplIGluIGJ5dGVzIGZvciBlYWNoIGZpbGUsIGUuZy5cbiAgICAgKiAgICAgLy8ge1xuICAgICAqICAgICAvLyAgICAgZjE6IDEwMDAsXG4gICAgICogICAgIC8vICAgICBmMjogMjAwMCxcbiAgICAgKiAgICAgLy8gICAgIGYzOiAzMDAwXG4gICAgICogICAgIC8vIH1cbiAgICAgKiB9KS5jYXRjaCAoZXJyID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIEVycm9yIEhhbmRsaW5nXG4gICAgICogYXN5bmMubWFwVmFsdWVzKHdpdGhNaXNzaW5nRmlsZU1hcCwgZ2V0RmlsZVNpemVJbkJ5dGVzKVxuICAgICAqIC50aGVuKCByZXN1bHQgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqIH0pLmNhdGNoIChlcnIgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICAvLyBbIEVycm9yOiBFTk9FTlQ6IG5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkgXVxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgYXN5bmMvYXdhaXRcbiAgICAgKiBhc3luYyAoKSA9PiB7XG4gICAgICogICAgIHRyeSB7XG4gICAgICogICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgYXN5bmMubWFwVmFsdWVzKGZpbGVNYXAsIGdldEZpbGVTaXplSW5CeXRlcyk7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAgICAgLy8gcmVzdWx0IGlzIG5vdyBhIG1hcCBvZiBmaWxlIHNpemUgaW4gYnl0ZXMgZm9yIGVhY2ggZmlsZSwgZS5nLlxuICAgICAqICAgICAgICAgLy8ge1xuICAgICAqICAgICAgICAgLy8gICAgIGYxOiAxMDAwLFxuICAgICAqICAgICAgICAgLy8gICAgIGYyOiAyMDAwLFxuICAgICAqICAgICAgICAgLy8gICAgIGYzOiAzMDAwXG4gICAgICogICAgICAgICAvLyB9XG4gICAgICogICAgIH1cbiAgICAgKiAgICAgY2F0Y2ggKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIC8vIEVycm9yIEhhbmRsaW5nXG4gICAgICogYXN5bmMgKCkgPT4ge1xuICAgICAqICAgICB0cnkge1xuICAgICAqICAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IGFzeW5jLm1hcFZhbHVlcyh3aXRoTWlzc2luZ0ZpbGVNYXAsIGdldEZpbGVTaXplSW5CeXRlcyk7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICB9XG4gICAgICogICAgIGNhdGNoIChlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgICAgICAvLyBbIEVycm9yOiBFTk9FTlQ6IG5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkgXVxuICAgICAqICAgICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICovXG4gICAgZnVuY3Rpb24gbWFwVmFsdWVzKG9iaiwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBtYXBWYWx1ZXNMaW1pdCQxKG9iaiwgSW5maW5pdHksIGl0ZXJhdGVlLCBjYWxsYmFjaylcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyBbYG1hcFZhbHVlc2Bde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5tYXBWYWx1ZXN9IGJ1dCBydW5zIG9ubHkgYSBzaW5nbGUgYXN5bmMgb3BlcmF0aW9uIGF0IGEgdGltZS5cbiAgICAgKlxuICAgICAqIEBuYW1lIG1hcFZhbHVlc1Nlcmllc1xuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLm1hcFZhbHVlc117QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLm1hcFZhbHVlc31cbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmogLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggdmFsdWUgYW5kIGtleVxuICAgICAqIGluIGBjb2xsYC5cbiAgICAgKiBUaGUgaXRlcmF0ZWUgc2hvdWxkIGNvbXBsZXRlIHdpdGggdGhlIHRyYW5zZm9ybWVkIHZhbHVlIGFzIGl0cyByZXN1bHQuXG4gICAgICogSW52b2tlZCB3aXRoICh2YWx1ZSwga2V5LCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIHdoZW4gYWxsIGBpdGVyYXRlZWBcbiAgICAgKiBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZCwgb3IgYW4gZXJyb3Igb2NjdXJzLiBgcmVzdWx0YCBpcyBhIG5ldyBvYmplY3QgY29uc2lzdGluZ1xuICAgICAqIG9mIGVhY2gga2V5IGZyb20gYG9iamAsIHdpdGggZWFjaCB0cmFuc2Zvcm1lZCB2YWx1ZSBvbiB0aGUgcmlnaHQtaGFuZCBzaWRlLlxuICAgICAqIEludm9rZWQgd2l0aCAoZXJyLCByZXN1bHQpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIG5vIGNhbGxiYWNrIGlzIHBhc3NlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1hcFZhbHVlc1NlcmllcyhvYmosIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gbWFwVmFsdWVzTGltaXQkMShvYmosIDEsIGl0ZXJhdGVlLCBjYWxsYmFjaylcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWNoZXMgdGhlIHJlc3VsdHMgb2YgYW4gYXN5bmMgZnVuY3Rpb24uIFdoZW4gY3JlYXRpbmcgYSBoYXNoIHRvIHN0b3JlXG4gICAgICogZnVuY3Rpb24gcmVzdWx0cyBhZ2FpbnN0LCB0aGUgY2FsbGJhY2sgaXMgb21pdHRlZCBmcm9tIHRoZSBoYXNoIGFuZCBhblxuICAgICAqIG9wdGlvbmFsIGhhc2ggZnVuY3Rpb24gY2FuIGJlIHVzZWQuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6IGlmIHRoZSBhc3luYyBmdW5jdGlvbiBlcnJzLCB0aGUgcmVzdWx0IHdpbGwgbm90IGJlIGNhY2hlZCBhbmRcbiAgICAgKiBzdWJzZXF1ZW50IGNhbGxzIHdpbGwgY2FsbCB0aGUgd3JhcHBlZCBmdW5jdGlvbi4qKlxuICAgICAqXG4gICAgICogSWYgbm8gaGFzaCBmdW5jdGlvbiBpcyBzcGVjaWZpZWQsIHRoZSBmaXJzdCBhcmd1bWVudCBpcyB1c2VkIGFzIGEgaGFzaCBrZXksXG4gICAgICogd2hpY2ggbWF5IHdvcmsgcmVhc29uYWJseSBpZiBpdCBpcyBhIHN0cmluZyBvciBhIGRhdGEgdHlwZSB0aGF0IGNvbnZlcnRzIHRvIGFcbiAgICAgKiBkaXN0aW5jdCBzdHJpbmcuIE5vdGUgdGhhdCBvYmplY3RzIGFuZCBhcnJheXMgd2lsbCBub3QgYmVoYXZlIHJlYXNvbmFibHkuXG4gICAgICogTmVpdGhlciB3aWxsIGNhc2VzIHdoZXJlIHRoZSBvdGhlciBhcmd1bWVudHMgYXJlIHNpZ25pZmljYW50LiBJbiBzdWNoIGNhc2VzLFxuICAgICAqIHNwZWNpZnkgeW91ciBvd24gaGFzaCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIFRoZSBjYWNoZSBvZiByZXN1bHRzIGlzIGV4cG9zZWQgYXMgdGhlIGBtZW1vYCBwcm9wZXJ0eSBvZiB0aGUgZnVuY3Rpb25cbiAgICAgKiByZXR1cm5lZCBieSBgbWVtb2l6ZWAuXG4gICAgICpcbiAgICAgKiBAbmFtZSBtZW1vaXplXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6VXRpbHNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGZuIC0gVGhlIGFzeW5jIGZ1bmN0aW9uIHRvIHByb3h5IGFuZCBjYWNoZSByZXN1bHRzIGZyb20uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaGFzaGVyIC0gQW4gb3B0aW9uYWwgZnVuY3Rpb24gZm9yIGdlbmVyYXRpbmcgYSBjdXN0b20gaGFzaFxuICAgICAqIGZvciBzdG9yaW5nIHJlc3VsdHMuIEl0IGhhcyBhbGwgdGhlIGFyZ3VtZW50cyBhcHBsaWVkIHRvIGl0IGFwYXJ0IGZyb20gdGhlXG4gICAgICogY2FsbGJhY2ssIGFuZCBtdXN0IGJlIHN5bmNocm9ub3VzLlxuICAgICAqIEByZXR1cm5zIHtBc3luY0Z1bmN0aW9ufSBhIG1lbW9pemVkIHZlcnNpb24gb2YgYGZuYFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgc2xvd19mbiA9IGZ1bmN0aW9uKG5hbWUsIGNhbGxiYWNrKSB7XG4gICAgICogICAgIC8vIGRvIHNvbWV0aGluZ1xuICAgICAqICAgICBjYWxsYmFjayhudWxsLCByZXN1bHQpO1xuICAgICAqIH07XG4gICAgICogdmFyIGZuID0gYXN5bmMubWVtb2l6ZShzbG93X2ZuKTtcbiAgICAgKlxuICAgICAqIC8vIGZuIGNhbiBub3cgYmUgdXNlZCBhcyBpZiBpdCB3ZXJlIHNsb3dfZm5cbiAgICAgKiBmbignc29tZSBuYW1lJywgZnVuY3Rpb24oKSB7XG4gICAgICogICAgIC8vIGNhbGxiYWNrXG4gICAgICogfSk7XG4gICAgICovXG4gICAgZnVuY3Rpb24gbWVtb2l6ZShmbiwgaGFzaGVyID0gdiA9PiB2KSB7XG4gICAgICAgIHZhciBtZW1vID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgdmFyIHF1ZXVlcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIHZhciBfZm4gPSB3cmFwQXN5bmMoZm4pO1xuICAgICAgICB2YXIgbWVtb2l6ZWQgPSBpbml0aWFsUGFyYW1zKChhcmdzLCBjYWxsYmFjaykgPT4ge1xuICAgICAgICAgICAgdmFyIGtleSA9IGhhc2hlciguLi5hcmdzKTtcbiAgICAgICAgICAgIGlmIChrZXkgaW4gbWVtbykge1xuICAgICAgICAgICAgICAgIHNldEltbWVkaWF0ZSQxKCgpID0+IGNhbGxiYWNrKG51bGwsIC4uLm1lbW9ba2V5XSkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChrZXkgaW4gcXVldWVzKSB7XG4gICAgICAgICAgICAgICAgcXVldWVzW2tleV0ucHVzaChjYWxsYmFjayk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldID0gW2NhbGxiYWNrXTtcbiAgICAgICAgICAgICAgICBfZm4oLi4uYXJncywgKGVyciwgLi4ucmVzdWx0QXJncykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyAjMTQ2NSBkb24ndCBtZW1vaXplIGlmIGFuIGVycm9yIG9jY3VycmVkXG4gICAgICAgICAgICAgICAgICAgIGlmICghZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZW1vW2tleV0gPSByZXN1bHRBcmdzO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHZhciBxID0gcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBxdWV1ZXNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBxLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcVtpXShlcnIsIC4uLnJlc3VsdEFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBtZW1vaXplZC5tZW1vID0gbWVtbztcbiAgICAgICAgbWVtb2l6ZWQudW5tZW1vaXplZCA9IGZuO1xuICAgICAgICByZXR1cm4gbWVtb2l6ZWQ7XG4gICAgfVxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGZpbGUgKi9cblxuICAgIC8qKlxuICAgICAqIENhbGxzIGBjYWxsYmFja2Agb24gYSBsYXRlciBsb29wIGFyb3VuZCB0aGUgZXZlbnQgbG9vcC4gSW4gTm9kZS5qcyB0aGlzIGp1c3RcbiAgICAgKiBjYWxscyBgcHJvY2Vzcy5uZXh0VGlja2AuICBJbiB0aGUgYnJvd3NlciBpdCB3aWxsIHVzZSBgc2V0SW1tZWRpYXRlYCBpZlxuICAgICAqIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGBzZXRUaW1lb3V0KGNhbGxiYWNrLCAwKWAsIHdoaWNoIG1lYW5zIG90aGVyIGhpZ2hlclxuICAgICAqIHByaW9yaXR5IGV2ZW50cyBtYXkgcHJlY2VkZSB0aGUgZXhlY3V0aW9uIG9mIGBjYWxsYmFja2AuXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIHVzZWQgaW50ZXJuYWxseSBmb3IgYnJvd3Nlci1jb21wYXRpYmlsaXR5IHB1cnBvc2VzLlxuICAgICAqXG4gICAgICogQG5hbWUgbmV4dFRpY2tcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpVdGlsc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5zZXRJbW1lZGlhdGVde0BsaW5rIG1vZHVsZTpVdGlscy5zZXRJbW1lZGlhdGV9XG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAtIFRoZSBmdW5jdGlvbiB0byBjYWxsIG9uIGEgbGF0ZXIgbG9vcCBhcm91bmRcbiAgICAgKiB0aGUgZXZlbnQgbG9vcC4gSW52b2tlZCB3aXRoIChhcmdzLi4uKS5cbiAgICAgKiBAcGFyYW0gey4uLip9IGFyZ3MuLi4gLSBhbnkgbnVtYmVyIG9mIGFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlXG4gICAgICogY2FsbGJhY2sgb24gdGhlIG5leHQgdGljay5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGNhbGxfb3JkZXIgPSBbXTtcbiAgICAgKiBhc3luYy5uZXh0VGljayhmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgY2FsbF9vcmRlci5wdXNoKCd0d28nKTtcbiAgICAgKiAgICAgLy8gY2FsbF9vcmRlciBub3cgZXF1YWxzIFsnb25lJywndHdvJ11cbiAgICAgKiB9KTtcbiAgICAgKiBjYWxsX29yZGVyLnB1c2goJ29uZScpO1xuICAgICAqXG4gICAgICogYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICogICAgIC8vIGEsIGIsIGFuZCBjIGVxdWFsIDEsIDIsIGFuZCAzXG4gICAgICogfSwgMSwgMiwgMyk7XG4gICAgICovXG4gICAgdmFyIF9kZWZlcjtcblxuICAgIGlmIChoYXNOZXh0VGljaykge1xuICAgICAgICBfZGVmZXIgPSBwcm9jZXNzLm5leHRUaWNrO1xuICAgIH0gZWxzZSBpZiAoaGFzU2V0SW1tZWRpYXRlKSB7XG4gICAgICAgIF9kZWZlciA9IHNldEltbWVkaWF0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBfZGVmZXIgPSBmYWxsYmFjaztcbiAgICB9XG5cbiAgICB2YXIgbmV4dFRpY2sgPSB3cmFwKF9kZWZlcik7XG5cbiAgICB2YXIgX3BhcmFsbGVsID0gYXdhaXRpZnkoKGVhY2hmbiwgdGFza3MsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIHZhciByZXN1bHRzID0gaXNBcnJheUxpa2UodGFza3MpID8gW10gOiB7fTtcblxuICAgICAgICBlYWNoZm4odGFza3MsICh0YXNrLCBrZXksIHRhc2tDYikgPT4ge1xuICAgICAgICAgICAgd3JhcEFzeW5jKHRhc2spKChlcnIsIC4uLnJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQubGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgICAgICAgICBbcmVzdWx0XSA9IHJlc3VsdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzdWx0c1trZXldID0gcmVzdWx0O1xuICAgICAgICAgICAgICAgIHRhc2tDYihlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGVyciA9PiBjYWxsYmFjayhlcnIsIHJlc3VsdHMpKTtcbiAgICB9LCAzKTtcblxuICAgIC8qKlxuICAgICAqIFJ1biB0aGUgYHRhc2tzYCBjb2xsZWN0aW9uIG9mIGZ1bmN0aW9ucyBpbiBwYXJhbGxlbCwgd2l0aG91dCB3YWl0aW5nIHVudGlsXG4gICAgICogdGhlIHByZXZpb3VzIGZ1bmN0aW9uIGhhcyBjb21wbGV0ZWQuIElmIGFueSBvZiB0aGUgZnVuY3Rpb25zIHBhc3MgYW4gZXJyb3IgdG9cbiAgICAgKiBpdHMgY2FsbGJhY2ssIHRoZSBtYWluIGBjYWxsYmFja2AgaXMgaW1tZWRpYXRlbHkgY2FsbGVkIHdpdGggdGhlIHZhbHVlIG9mIHRoZVxuICAgICAqIGVycm9yLiBPbmNlIHRoZSBgdGFza3NgIGhhdmUgY29tcGxldGVkLCB0aGUgcmVzdWx0cyBhcmUgcGFzc2VkIHRvIHRoZSBmaW5hbFxuICAgICAqIGBjYWxsYmFja2AgYXMgYW4gYXJyYXkuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogYHBhcmFsbGVsYCBpcyBhYm91dCBraWNraW5nLW9mZiBJL08gdGFza3MgaW4gcGFyYWxsZWwsIG5vdCBhYm91dFxuICAgICAqIHBhcmFsbGVsIGV4ZWN1dGlvbiBvZiBjb2RlLiAgSWYgeW91ciB0YXNrcyBkbyBub3QgdXNlIGFueSB0aW1lcnMgb3IgcGVyZm9ybVxuICAgICAqIGFueSBJL08sIHRoZXkgd2lsbCBhY3R1YWxseSBiZSBleGVjdXRlZCBpbiBzZXJpZXMuICBBbnkgc3luY2hyb25vdXMgc2V0dXBcbiAgICAgKiBzZWN0aW9ucyBmb3IgZWFjaCB0YXNrIHdpbGwgaGFwcGVuIG9uZSBhZnRlciB0aGUgb3RoZXIuICBKYXZhU2NyaXB0IHJlbWFpbnNcbiAgICAgKiBzaW5nbGUtdGhyZWFkZWQuXG4gICAgICpcbiAgICAgKiAqKkhpbnQ6KiogVXNlIFtgcmVmbGVjdGBde0BsaW5rIG1vZHVsZTpVdGlscy5yZWZsZWN0fSB0byBjb250aW51ZSB0aGVcbiAgICAgKiBleGVjdXRpb24gb2Ygb3RoZXIgdGFza3Mgd2hlbiBhIHRhc2sgZmFpbHMuXG4gICAgICpcbiAgICAgKiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHVzZSBhbiBvYmplY3QgaW5zdGVhZCBvZiBhbiBhcnJheS4gRWFjaCBwcm9wZXJ0eSB3aWxsXG4gICAgICogYmUgcnVuIGFzIGEgZnVuY3Rpb24gYW5kIHRoZSByZXN1bHRzIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBmaW5hbCBgY2FsbGJhY2tgXG4gICAgICogYXMgYW4gb2JqZWN0IGluc3RlYWQgb2YgYW4gYXJyYXkuIFRoaXMgY2FuIGJlIGEgbW9yZSByZWFkYWJsZSB3YXkgb2YgaGFuZGxpbmdcbiAgICAgKiByZXN1bHRzIGZyb20ge0BsaW5rIGFzeW5jLnBhcmFsbGVsfS5cbiAgICAgKlxuICAgICAqIEBuYW1lIHBhcmFsbGVsXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGNhdGVnb3J5IENvbnRyb2wgRmxvd1xuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IHRhc2tzIC0gQSBjb2xsZWN0aW9uIG9mXG4gICAgICogW2FzeW5jIGZ1bmN0aW9uc117QGxpbmsgQXN5bmNGdW5jdGlvbn0gdG8gcnVuLlxuICAgICAqIEVhY2ggYXN5bmMgZnVuY3Rpb24gY2FuIGNvbXBsZXRlIHdpdGggYW55IG51bWJlciBvZiBvcHRpb25hbCBgcmVzdWx0YCB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEFuIG9wdGlvbmFsIGNhbGxiYWNrIHRvIHJ1biBvbmNlIGFsbCB0aGVcbiAgICAgKiBmdW5jdGlvbnMgaGF2ZSBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LiBUaGlzIGZ1bmN0aW9uIGdldHMgYSByZXN1bHRzIGFycmF5XG4gICAgICogKG9yIG9iamVjdCkgY29udGFpbmluZyBhbGwgdGhlIHJlc3VsdCBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSB0YXNrIGNhbGxiYWNrcy5cbiAgICAgKiBJbnZva2VkIHdpdGggKGVyciwgcmVzdWx0cykuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgYSBjYWxsYmFjayBpcyBub3QgcGFzc2VkXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy9Vc2luZyBDYWxsYmFja3NcbiAgICAgKiBhc3luYy5wYXJhbGxlbChbXG4gICAgICogICAgIGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsICdvbmUnKTtcbiAgICAgKiAgICAgICAgIH0sIDIwMCk7XG4gICAgICogICAgIH0sXG4gICAgICogICAgIGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsICd0d28nKTtcbiAgICAgKiAgICAgICAgIH0sIDEwMCk7XG4gICAgICogICAgIH1cbiAgICAgKiBdLCBmdW5jdGlvbihlcnIsIHJlc3VsdHMpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgIC8vIHJlc3VsdHMgaXMgZXF1YWwgdG8gWydvbmUnLCd0d28nXSBldmVuIHRob3VnaFxuICAgICAqICAgICAvLyB0aGUgc2Vjb25kIGZ1bmN0aW9uIGhhZCBhIHNob3J0ZXIgdGltZW91dC5cbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIGFuIGV4YW1wbGUgdXNpbmcgYW4gb2JqZWN0IGluc3RlYWQgb2YgYW4gYXJyYXlcbiAgICAgKiBhc3luYy5wYXJhbGxlbCh7XG4gICAgICogICAgIG9uZTogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICogICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgMSk7XG4gICAgICogICAgICAgICB9LCAyMDApO1xuICAgICAqICAgICB9LFxuICAgICAqICAgICB0d286IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIDIpO1xuICAgICAqICAgICAgICAgfSwgMTAwKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH0sIGZ1bmN0aW9uKGVyciwgcmVzdWx0cykge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiAgICAgLy8gcmVzdWx0cyBpcyBlcXVhbCB0bzogeyBvbmU6IDEsIHR3bzogMiB9XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvL1VzaW5nIFByb21pc2VzXG4gICAgICogYXN5bmMucGFyYWxsZWwoW1xuICAgICAqICAgICBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCAnb25lJyk7XG4gICAgICogICAgICAgICB9LCAyMDApO1xuICAgICAqICAgICB9LFxuICAgICAqICAgICBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCAndHdvJyk7XG4gICAgICogICAgICAgICB9LCAxMDApO1xuICAgICAqICAgICB9XG4gICAgICogXSkudGhlbihyZXN1bHRzID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgIC8vIHJlc3VsdHMgaXMgZXF1YWwgdG8gWydvbmUnLCd0d28nXSBldmVuIHRob3VnaFxuICAgICAqICAgICAvLyB0aGUgc2Vjb25kIGZ1bmN0aW9uIGhhZCBhIHNob3J0ZXIgdGltZW91dC5cbiAgICAgKiB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gYW4gZXhhbXBsZSB1c2luZyBhbiBvYmplY3QgaW5zdGVhZCBvZiBhbiBhcnJheVxuICAgICAqIGFzeW5jLnBhcmFsbGVsKHtcbiAgICAgKiAgICAgb25lOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCAxKTtcbiAgICAgKiAgICAgICAgIH0sIDIwMCk7XG4gICAgICogICAgIH0sXG4gICAgICogICAgIHR3bzogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICogICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgMik7XG4gICAgICogICAgICAgICB9LCAxMDApO1xuICAgICAqICAgICB9XG4gICAgICogfSkudGhlbihyZXN1bHRzID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgIC8vIHJlc3VsdHMgaXMgZXF1YWwgdG86IHsgb25lOiAxLCB0d286IDIgfVxuICAgICAqIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvL1VzaW5nIGFzeW5jL2F3YWl0XG4gICAgICogYXN5bmMgKCkgPT4ge1xuICAgICAqICAgICB0cnkge1xuICAgICAqICAgICAgICAgbGV0IHJlc3VsdHMgPSBhd2FpdCBhc3luYy5wYXJhbGxlbChbXG4gICAgICogICAgICAgICAgICAgZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsICdvbmUnKTtcbiAgICAgKiAgICAgICAgICAgICAgICAgfSwgMjAwKTtcbiAgICAgKiAgICAgICAgICAgICB9LFxuICAgICAqICAgICAgICAgICAgIGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICogICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCAndHdvJyk7XG4gICAgICogICAgICAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgICogICAgICAgICAgICAgfVxuICAgICAqICAgICAgICAgXSk7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiAgICAgICAgIC8vIHJlc3VsdHMgaXMgZXF1YWwgdG8gWydvbmUnLCd0d28nXSBldmVuIHRob3VnaFxuICAgICAqICAgICAgICAgLy8gdGhlIHNlY29uZCBmdW5jdGlvbiBoYWQgYSBzaG9ydGVyIHRpbWVvdXQuXG4gICAgICogICAgIH1cbiAgICAgKiAgICAgY2F0Y2ggKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIC8vIGFuIGV4YW1wbGUgdXNpbmcgYW4gb2JqZWN0IGluc3RlYWQgb2YgYW4gYXJyYXlcbiAgICAgKiBhc3luYyAoKSA9PiB7XG4gICAgICogICAgIHRyeSB7XG4gICAgICogICAgICAgICBsZXQgcmVzdWx0cyA9IGF3YWl0IGFzeW5jLnBhcmFsbGVsKHtcbiAgICAgKiAgICAgICAgICAgICBvbmU6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICogICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCAxKTtcbiAgICAgKiAgICAgICAgICAgICAgICAgfSwgMjAwKTtcbiAgICAgKiAgICAgICAgICAgICB9LFxuICAgICAqICAgICAgICAgICAgdHdvOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgMik7XG4gICAgICogICAgICAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgICogICAgICAgICAgICB9XG4gICAgICogICAgICAgICB9KTtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgICAgICAgLy8gcmVzdWx0cyBpcyBlcXVhbCB0bzogeyBvbmU6IDEsIHR3bzogMiB9XG4gICAgICogICAgIH1cbiAgICAgKiAgICAgY2F0Y2ggKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHBhcmFsbGVsKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX3BhcmFsbGVsKGVhY2hPZiQxLCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBzYW1lIGFzIFtgcGFyYWxsZWxgXXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cucGFyYWxsZWx9IGJ1dCBydW5zIGEgbWF4aW11bSBvZiBgbGltaXRgIGFzeW5jIG9wZXJhdGlvbnMgYXQgYVxuICAgICAqIHRpbWUuXG4gICAgICpcbiAgICAgKiBAbmFtZSBwYXJhbGxlbExpbWl0XG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMucGFyYWxsZWxde0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy5wYXJhbGxlbH1cbiAgICAgKiBAY2F0ZWdvcnkgQ29udHJvbCBGbG93XG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gdGFza3MgLSBBIGNvbGxlY3Rpb24gb2ZcbiAgICAgKiBbYXN5bmMgZnVuY3Rpb25zXXtAbGluayBBc3luY0Z1bmN0aW9ufSB0byBydW4uXG4gICAgICogRWFjaCBhc3luYyBmdW5jdGlvbiBjYW4gY29tcGxldGUgd2l0aCBhbnkgbnVtYmVyIG9mIG9wdGlvbmFsIGByZXN1bHRgIHZhbHVlcy5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbGltaXQgLSBUaGUgbWF4aW11bSBudW1iZXIgb2YgYXN5bmMgb3BlcmF0aW9ucyBhdCBhIHRpbWUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEFuIG9wdGlvbmFsIGNhbGxiYWNrIHRvIHJ1biBvbmNlIGFsbCB0aGVcbiAgICAgKiBmdW5jdGlvbnMgaGF2ZSBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LiBUaGlzIGZ1bmN0aW9uIGdldHMgYSByZXN1bHRzIGFycmF5XG4gICAgICogKG9yIG9iamVjdCkgY29udGFpbmluZyBhbGwgdGhlIHJlc3VsdCBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSB0YXNrIGNhbGxiYWNrcy5cbiAgICAgKiBJbnZva2VkIHdpdGggKGVyciwgcmVzdWx0cykuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgYSBjYWxsYmFjayBpcyBub3QgcGFzc2VkXG4gICAgICovXG4gICAgZnVuY3Rpb24gcGFyYWxsZWxMaW1pdCh0YXNrcywgbGltaXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBfcGFyYWxsZWwoZWFjaE9mTGltaXQkMihsaW1pdCksIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSBxdWV1ZSBvZiB0YXNrcyBmb3IgdGhlIHdvcmtlciBmdW5jdGlvbiB0byBjb21wbGV0ZS5cbiAgICAgKiBAdHlwZWRlZiB7SXRlcmFibGV9IFF1ZXVlT2JqZWN0XG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb250cm9sRmxvd1xuICAgICAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IGxlbmd0aCAtIGEgZnVuY3Rpb24gcmV0dXJuaW5nIHRoZSBudW1iZXIgb2YgaXRlbXNcbiAgICAgKiB3YWl0aW5nIHRvIGJlIHByb2Nlc3NlZC4gSW52b2tlIHdpdGggYHF1ZXVlLmxlbmd0aCgpYC5cbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IHN0YXJ0ZWQgLSBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCBhbnlcbiAgICAgKiBpdGVtcyBoYXZlIGJlZW4gcHVzaGVkIGFuZCBwcm9jZXNzZWQgYnkgdGhlIHF1ZXVlLlxuICAgICAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IHJ1bm5pbmcgLSBhIGZ1bmN0aW9uIHJldHVybmluZyB0aGUgbnVtYmVyIG9mIGl0ZW1zXG4gICAgICogY3VycmVudGx5IGJlaW5nIHByb2Nlc3NlZC4gSW52b2tlIHdpdGggYHF1ZXVlLnJ1bm5pbmcoKWAuXG4gICAgICogQHByb3BlcnR5IHtGdW5jdGlvbn0gd29ya2Vyc0xpc3QgLSBhIGZ1bmN0aW9uIHJldHVybmluZyB0aGUgYXJyYXkgb2YgaXRlbXNcbiAgICAgKiBjdXJyZW50bHkgYmVpbmcgcHJvY2Vzc2VkLiBJbnZva2Ugd2l0aCBgcXVldWUud29ya2Vyc0xpc3QoKWAuXG4gICAgICogQHByb3BlcnR5IHtGdW5jdGlvbn0gaWRsZSAtIGEgZnVuY3Rpb24gcmV0dXJuaW5nIGZhbHNlIGlmIHRoZXJlIGFyZSBpdGVtc1xuICAgICAqIHdhaXRpbmcgb3IgYmVpbmcgcHJvY2Vzc2VkLCBvciB0cnVlIGlmIG5vdC4gSW52b2tlIHdpdGggYHF1ZXVlLmlkbGUoKWAuXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IGNvbmN1cnJlbmN5IC0gYW4gaW50ZWdlciBmb3IgZGV0ZXJtaW5pbmcgaG93IG1hbnkgYHdvcmtlcmBcbiAgICAgKiBmdW5jdGlvbnMgc2hvdWxkIGJlIHJ1biBpbiBwYXJhbGxlbC4gVGhpcyBwcm9wZXJ0eSBjYW4gYmUgY2hhbmdlZCBhZnRlciBhXG4gICAgICogYHF1ZXVlYCBpcyBjcmVhdGVkIHRvIGFsdGVyIHRoZSBjb25jdXJyZW5jeSBvbi10aGUtZmx5LlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBwYXlsb2FkIC0gYW4gaW50ZWdlciB0aGF0IHNwZWNpZmllcyBob3cgbWFueSBpdGVtcyBhcmVcbiAgICAgKiBwYXNzZWQgdG8gdGhlIHdvcmtlciBmdW5jdGlvbiBhdCBhIHRpbWUuIG9ubHkgYXBwbGllcyBpZiB0aGlzIGlzIGFcbiAgICAgKiBbY2FyZ29de0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy5jYXJnb30gb2JqZWN0XG4gICAgICogQHByb3BlcnR5IHtBc3luY0Z1bmN0aW9ufSBwdXNoIC0gYWRkIGEgbmV3IHRhc2sgdG8gdGhlIGBxdWV1ZWAuIENhbGxzIGBjYWxsYmFja2BcbiAgICAgKiBvbmNlIHRoZSBgd29ya2VyYCBoYXMgZmluaXNoZWQgcHJvY2Vzc2luZyB0aGUgdGFzay4gSW5zdGVhZCBvZiBhIHNpbmdsZSB0YXNrLFxuICAgICAqIGEgYHRhc2tzYCBhcnJheSBjYW4gYmUgc3VibWl0dGVkLiBUaGUgcmVzcGVjdGl2ZSBjYWxsYmFjayBpcyB1c2VkIGZvciBldmVyeVxuICAgICAqIHRhc2sgaW4gdGhlIGxpc3QuIEludm9rZSB3aXRoIGBxdWV1ZS5wdXNoKHRhc2ssIFtjYWxsYmFja10pYCxcbiAgICAgKiBAcHJvcGVydHkge0FzeW5jRnVuY3Rpb259IHVuc2hpZnQgLSBhZGQgYSBuZXcgdGFzayB0byB0aGUgZnJvbnQgb2YgdGhlIGBxdWV1ZWAuXG4gICAgICogSW52b2tlIHdpdGggYHF1ZXVlLnVuc2hpZnQodGFzaywgW2NhbGxiYWNrXSlgLlxuICAgICAqIEBwcm9wZXJ0eSB7QXN5bmNGdW5jdGlvbn0gcHVzaEFzeW5jIC0gdGhlIHNhbWUgYXMgYHEucHVzaGAsIGV4Y2VwdCB0aGlzIHJldHVybnNcbiAgICAgKiBhIHByb21pc2UgdGhhdCByZWplY3RzIGlmIGFuIGVycm9yIG9jY3Vycy5cbiAgICAgKiBAcHJvcGVydHkge0FzeW5jRnVuY3Rpb259IHVuc2hpZnRBc3luYyAtIHRoZSBzYW1lIGFzIGBxLnVuc2hpZnRgLCBleGNlcHQgdGhpcyByZXR1cm5zXG4gICAgICogYSBwcm9taXNlIHRoYXQgcmVqZWN0cyBpZiBhbiBlcnJvciBvY2N1cnMuXG4gICAgICogQHByb3BlcnR5IHtGdW5jdGlvbn0gcmVtb3ZlIC0gcmVtb3ZlIGl0ZW1zIGZyb20gdGhlIHF1ZXVlIHRoYXQgbWF0Y2ggYSB0ZXN0XG4gICAgICogZnVuY3Rpb24uICBUaGUgdGVzdCBmdW5jdGlvbiB3aWxsIGJlIHBhc3NlZCBhbiBvYmplY3Qgd2l0aCBhIGBkYXRhYCBwcm9wZXJ0eSxcbiAgICAgKiBhbmQgYSBgcHJpb3JpdHlgIHByb3BlcnR5LCBpZiB0aGlzIGlzIGFcbiAgICAgKiBbcHJpb3JpdHlRdWV1ZV17QGxpbmsgbW9kdWxlOkNvbnRyb2xGbG93LnByaW9yaXR5UXVldWV9IG9iamVjdC5cbiAgICAgKiBJbnZva2VkIHdpdGggYHF1ZXVlLnJlbW92ZSh0ZXN0Rm4pYCwgd2hlcmUgYHRlc3RGbmAgaXMgb2YgdGhlIGZvcm1cbiAgICAgKiBgZnVuY3Rpb24gKHtkYXRhLCBwcmlvcml0eX0pIHt9YCBhbmQgcmV0dXJucyBhIEJvb2xlYW4uXG4gICAgICogQHByb3BlcnR5IHtGdW5jdGlvbn0gc2F0dXJhdGVkIC0gYSBmdW5jdGlvbiB0aGF0IHNldHMgYSBjYWxsYmFjayB0aGF0IGlzXG4gICAgICogY2FsbGVkIHdoZW4gdGhlIG51bWJlciBvZiBydW5uaW5nIHdvcmtlcnMgaGl0cyB0aGUgYGNvbmN1cnJlbmN5YCBsaW1pdCwgYW5kXG4gICAgICogZnVydGhlciB0YXNrcyB3aWxsIGJlIHF1ZXVlZC4gIElmIHRoZSBjYWxsYmFjayBpcyBvbWl0dGVkLCBgcS5zYXR1cmF0ZWQoKWBcbiAgICAgKiByZXR1cm5zIGEgcHJvbWlzZSBmb3IgdGhlIG5leHQgb2NjdXJyZW5jZS5cbiAgICAgKiBAcHJvcGVydHkge0Z1bmN0aW9ufSB1bnNhdHVyYXRlZCAtIGEgZnVuY3Rpb24gdGhhdCBzZXRzIGEgY2FsbGJhY2sgdGhhdCBpc1xuICAgICAqIGNhbGxlZCB3aGVuIHRoZSBudW1iZXIgb2YgcnVubmluZyB3b3JrZXJzIGlzIGxlc3MgdGhhbiB0aGUgYGNvbmN1cnJlbmN5YCAmXG4gICAgICogYGJ1ZmZlcmAgbGltaXRzLCBhbmQgZnVydGhlciB0YXNrcyB3aWxsIG5vdCBiZSBxdWV1ZWQuIElmIHRoZSBjYWxsYmFjayBpc1xuICAgICAqIG9taXR0ZWQsIGBxLnVuc2F0dXJhdGVkKClgIHJldHVybnMgYSBwcm9taXNlIGZvciB0aGUgbmV4dCBvY2N1cnJlbmNlLlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBidWZmZXIgLSBBIG1pbmltdW0gdGhyZXNob2xkIGJ1ZmZlciBpbiBvcmRlciB0byBzYXkgdGhhdFxuICAgICAqIHRoZSBgcXVldWVgIGlzIGB1bnNhdHVyYXRlZGAuXG4gICAgICogQHByb3BlcnR5IHtGdW5jdGlvbn0gZW1wdHkgLSBhIGZ1bmN0aW9uIHRoYXQgc2V0cyBhIGNhbGxiYWNrIHRoYXQgaXMgY2FsbGVkXG4gICAgICogd2hlbiB0aGUgbGFzdCBpdGVtIGZyb20gdGhlIGBxdWV1ZWAgaXMgZ2l2ZW4gdG8gYSBgd29ya2VyYC4gSWYgdGhlIGNhbGxiYWNrXG4gICAgICogaXMgb21pdHRlZCwgYHEuZW1wdHkoKWAgcmV0dXJucyBhIHByb21pc2UgZm9yIHRoZSBuZXh0IG9jY3VycmVuY2UuXG4gICAgICogQHByb3BlcnR5IHtGdW5jdGlvbn0gZHJhaW4gLSBhIGZ1bmN0aW9uIHRoYXQgc2V0cyBhIGNhbGxiYWNrIHRoYXQgaXMgY2FsbGVkXG4gICAgICogd2hlbiB0aGUgbGFzdCBpdGVtIGZyb20gdGhlIGBxdWV1ZWAgaGFzIHJldHVybmVkIGZyb20gdGhlIGB3b3JrZXJgLiBJZiB0aGVcbiAgICAgKiBjYWxsYmFjayBpcyBvbWl0dGVkLCBgcS5kcmFpbigpYCByZXR1cm5zIGEgcHJvbWlzZSBmb3IgdGhlIG5leHQgb2NjdXJyZW5jZS5cbiAgICAgKiBAcHJvcGVydHkge0Z1bmN0aW9ufSBlcnJvciAtIGEgZnVuY3Rpb24gdGhhdCBzZXRzIGEgY2FsbGJhY2sgdGhhdCBpcyBjYWxsZWRcbiAgICAgKiB3aGVuIGEgdGFzayBlcnJvcnMuIEhhcyB0aGUgc2lnbmF0dXJlIGBmdW5jdGlvbihlcnJvciwgdGFzaylgLiBJZiB0aGVcbiAgICAgKiBjYWxsYmFjayBpcyBvbWl0dGVkLCBgZXJyb3IoKWAgcmV0dXJucyBhIHByb21pc2UgdGhhdCByZWplY3RzIG9uIHRoZSBuZXh0XG4gICAgICogZXJyb3IuXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBwYXVzZWQgLSBhIGJvb2xlYW4gZm9yIGRldGVybWluaW5nIHdoZXRoZXIgdGhlIHF1ZXVlIGlzXG4gICAgICogaW4gYSBwYXVzZWQgc3RhdGUuXG4gICAgICogQHByb3BlcnR5IHtGdW5jdGlvbn0gcGF1c2UgLSBhIGZ1bmN0aW9uIHRoYXQgcGF1c2VzIHRoZSBwcm9jZXNzaW5nIG9mIHRhc2tzXG4gICAgICogdW50aWwgYHJlc3VtZSgpYCBpcyBjYWxsZWQuIEludm9rZSB3aXRoIGBxdWV1ZS5wYXVzZSgpYC5cbiAgICAgKiBAcHJvcGVydHkge0Z1bmN0aW9ufSByZXN1bWUgLSBhIGZ1bmN0aW9uIHRoYXQgcmVzdW1lcyB0aGUgcHJvY2Vzc2luZyBvZlxuICAgICAqIHF1ZXVlZCB0YXNrcyB3aGVuIHRoZSBxdWV1ZSBpcyBwYXVzZWQuIEludm9rZSB3aXRoIGBxdWV1ZS5yZXN1bWUoKWAuXG4gICAgICogQHByb3BlcnR5IHtGdW5jdGlvbn0ga2lsbCAtIGEgZnVuY3Rpb24gdGhhdCByZW1vdmVzIHRoZSBgZHJhaW5gIGNhbGxiYWNrIGFuZFxuICAgICAqIGVtcHRpZXMgcmVtYWluaW5nIHRhc2tzIGZyb20gdGhlIHF1ZXVlIGZvcmNpbmcgaXQgdG8gZ28gaWRsZS4gTm8gbW9yZSB0YXNrc1xuICAgICAqIHNob3VsZCBiZSBwdXNoZWQgdG8gdGhlIHF1ZXVlIGFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4gSW52b2tlIHdpdGggYHF1ZXVlLmtpbGwoKWAuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGNvbnN0IHEgPSBhc3luYy5xdWV1ZSh3b3JrZXIsIDIpXG4gICAgICogcS5wdXNoKGl0ZW0xKVxuICAgICAqIHEucHVzaChpdGVtMilcbiAgICAgKiBxLnB1c2goaXRlbTMpXG4gICAgICogLy8gcXVldWVzIGFyZSBpdGVyYWJsZSwgc3ByZWFkIGludG8gYW4gYXJyYXkgdG8gaW5zcGVjdFxuICAgICAqIGNvbnN0IGl0ZW1zID0gWy4uLnFdIC8vIFtpdGVtMSwgaXRlbTIsIGl0ZW0zXVxuICAgICAqIC8vIG9yIHVzZSBmb3Igb2ZcbiAgICAgKiBmb3IgKGxldCBpdGVtIG9mIHEpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coaXRlbSlcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBxLmRyYWluKCgpID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coJ2FsbCBkb25lJylcbiAgICAgKiB9KVxuICAgICAqIC8vIG9yXG4gICAgICogYXdhaXQgcS5kcmFpbigpXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgYHF1ZXVlYCBvYmplY3Qgd2l0aCB0aGUgc3BlY2lmaWVkIGBjb25jdXJyZW5jeWAuIFRhc2tzIGFkZGVkIHRvIHRoZVxuICAgICAqIGBxdWV1ZWAgYXJlIHByb2Nlc3NlZCBpbiBwYXJhbGxlbCAodXAgdG8gdGhlIGBjb25jdXJyZW5jeWAgbGltaXQpLiBJZiBhbGxcbiAgICAgKiBgd29ya2VyYHMgYXJlIGluIHByb2dyZXNzLCB0aGUgdGFzayBpcyBxdWV1ZWQgdW50aWwgb25lIGJlY29tZXMgYXZhaWxhYmxlLlxuICAgICAqIE9uY2UgYSBgd29ya2VyYCBjb21wbGV0ZXMgYSBgdGFza2AsIHRoYXQgYHRhc2tgJ3MgY2FsbGJhY2sgaXMgY2FsbGVkLlxuICAgICAqXG4gICAgICogQG5hbWUgcXVldWVcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb250cm9sRmxvd1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgQ29udHJvbCBGbG93XG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSB3b3JrZXIgLSBBbiBhc3luYyBmdW5jdGlvbiBmb3IgcHJvY2Vzc2luZyBhIHF1ZXVlZCB0YXNrLlxuICAgICAqIElmIHlvdSB3YW50IHRvIGhhbmRsZSBlcnJvcnMgZnJvbSBhbiBpbmRpdmlkdWFsIHRhc2ssIHBhc3MgYSBjYWxsYmFjayB0b1xuICAgICAqIGBxLnB1c2goKWAuIEludm9rZWQgd2l0aCAodGFzaywgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbY29uY3VycmVuY3k9MV0gLSBBbiBgaW50ZWdlcmAgZm9yIGRldGVybWluaW5nIGhvdyBtYW55XG4gICAgICogYHdvcmtlcmAgZnVuY3Rpb25zIHNob3VsZCBiZSBydW4gaW4gcGFyYWxsZWwuICBJZiBvbWl0dGVkLCB0aGUgY29uY3VycmVuY3lcbiAgICAgKiBkZWZhdWx0cyB0byBgMWAuICBJZiB0aGUgY29uY3VycmVuY3kgaXMgYDBgLCBhbiBlcnJvciBpcyB0aHJvd24uXG4gICAgICogQHJldHVybnMge21vZHVsZTpDb250cm9sRmxvdy5RdWV1ZU9iamVjdH0gQSBxdWV1ZSBvYmplY3QgdG8gbWFuYWdlIHRoZSB0YXNrcy4gQ2FsbGJhY2tzIGNhbiBiZVxuICAgICAqIGF0dGFjaGVkIGFzIGNlcnRhaW4gcHJvcGVydGllcyB0byBsaXN0ZW4gZm9yIHNwZWNpZmljIGV2ZW50cyBkdXJpbmcgdGhlXG4gICAgICogbGlmZWN5Y2xlIG9mIHRoZSBxdWV1ZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gY3JlYXRlIGEgcXVldWUgb2JqZWN0IHdpdGggY29uY3VycmVuY3kgMlxuICAgICAqIHZhciBxID0gYXN5bmMucXVldWUoZnVuY3Rpb24odGFzaywgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coJ2hlbGxvICcgKyB0YXNrLm5hbWUpO1xuICAgICAqICAgICBjYWxsYmFjaygpO1xuICAgICAqIH0sIDIpO1xuICAgICAqXG4gICAgICogLy8gYXNzaWduIGEgY2FsbGJhY2tcbiAgICAgKiBxLmRyYWluKGZ1bmN0aW9uKCkge1xuICAgICAqICAgICBjb25zb2xlLmxvZygnYWxsIGl0ZW1zIGhhdmUgYmVlbiBwcm9jZXNzZWQnKTtcbiAgICAgKiB9KTtcbiAgICAgKiAvLyBvciBhd2FpdCB0aGUgZW5kXG4gICAgICogYXdhaXQgcS5kcmFpbigpXG4gICAgICpcbiAgICAgKiAvLyBhc3NpZ24gYW4gZXJyb3IgY2FsbGJhY2tcbiAgICAgKiBxLmVycm9yKGZ1bmN0aW9uKGVyciwgdGFzaykge1xuICAgICAqICAgICBjb25zb2xlLmVycm9yKCd0YXNrIGV4cGVyaWVuY2VkIGFuIGVycm9yJyk7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBhZGQgc29tZSBpdGVtcyB0byB0aGUgcXVldWVcbiAgICAgKiBxLnB1c2goe25hbWU6ICdmb28nfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKCdmaW5pc2hlZCBwcm9jZXNzaW5nIGZvbycpO1xuICAgICAqIH0pO1xuICAgICAqIC8vIGNhbGxiYWNrIGlzIG9wdGlvbmFsXG4gICAgICogcS5wdXNoKHtuYW1lOiAnYmFyJ30pO1xuICAgICAqXG4gICAgICogLy8gYWRkIHNvbWUgaXRlbXMgdG8gdGhlIHF1ZXVlIChiYXRjaC13aXNlKVxuICAgICAqIHEucHVzaChbe25hbWU6ICdiYXonfSx7bmFtZTogJ2JheSd9LHtuYW1lOiAnYmF4J31dLCBmdW5jdGlvbihlcnIpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coJ2ZpbmlzaGVkIHByb2Nlc3NpbmcgaXRlbScpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gYWRkIHNvbWUgaXRlbXMgdG8gdGhlIGZyb250IG9mIHRoZSBxdWV1ZVxuICAgICAqIHEudW5zaGlmdCh7bmFtZTogJ2Jhcid9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKCdmaW5pc2hlZCBwcm9jZXNzaW5nIGJhcicpO1xuICAgICAqIH0pO1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHF1ZXVlICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG4gICAgICAgIHZhciBfd29ya2VyID0gd3JhcEFzeW5jKHdvcmtlcik7XG4gICAgICAgIHJldHVybiBxdWV1ZSQxKChpdGVtcywgY2IpID0+IHtcbiAgICAgICAgICAgIF93b3JrZXIoaXRlbXNbMF0sIGNiKTtcbiAgICAgICAgfSwgY29uY3VycmVuY3ksIDEpO1xuICAgIH1cblxuICAgIC8vIEJpbmFyeSBtaW4taGVhcCBpbXBsZW1lbnRhdGlvbiB1c2VkIGZvciBwcmlvcml0eSBxdWV1ZS5cbiAgICAvLyBJbXBsZW1lbnRhdGlvbiBpcyBzdGFibGUsIGkuZS4gcHVzaCB0aW1lIGlzIGNvbnNpZGVyZWQgZm9yIGVxdWFsIHByaW9yaXRpZXNcbiAgICBjbGFzcyBIZWFwIHtcbiAgICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgICB0aGlzLmhlYXAgPSBbXTtcbiAgICAgICAgICAgIHRoaXMucHVzaENvdW50ID0gTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVI7XG4gICAgICAgIH1cblxuICAgICAgICBnZXQgbGVuZ3RoKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGVhcC5sZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICBlbXB0eSAoKSB7XG4gICAgICAgICAgICB0aGlzLmhlYXAgPSBbXTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgcGVyY1VwKGluZGV4KSB7XG4gICAgICAgICAgICBsZXQgcDtcblxuICAgICAgICAgICAgd2hpbGUgKGluZGV4ID4gMCAmJiBzbWFsbGVyKHRoaXMuaGVhcFtpbmRleF0sIHRoaXMuaGVhcFtwPXBhcmVudChpbmRleCldKSkge1xuICAgICAgICAgICAgICAgIGxldCB0ID0gdGhpcy5oZWFwW2luZGV4XTtcbiAgICAgICAgICAgICAgICB0aGlzLmhlYXBbaW5kZXhdID0gdGhpcy5oZWFwW3BdO1xuICAgICAgICAgICAgICAgIHRoaXMuaGVhcFtwXSA9IHQ7XG5cbiAgICAgICAgICAgICAgICBpbmRleCA9IHA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwZXJjRG93bihpbmRleCkge1xuICAgICAgICAgICAgbGV0IGw7XG5cbiAgICAgICAgICAgIHdoaWxlICgobD1sZWZ0Q2hpKGluZGV4KSkgPCB0aGlzLmhlYXAubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGwrMSA8IHRoaXMuaGVhcC5sZW5ndGggJiYgc21hbGxlcih0aGlzLmhlYXBbbCsxXSwgdGhpcy5oZWFwW2xdKSkge1xuICAgICAgICAgICAgICAgICAgICBsID0gbCsxO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChzbWFsbGVyKHRoaXMuaGVhcFtpbmRleF0sIHRoaXMuaGVhcFtsXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGV0IHQgPSB0aGlzLmhlYXBbaW5kZXhdO1xuICAgICAgICAgICAgICAgIHRoaXMuaGVhcFtpbmRleF0gPSB0aGlzLmhlYXBbbF07XG4gICAgICAgICAgICAgICAgdGhpcy5oZWFwW2xdID0gdDtcblxuICAgICAgICAgICAgICAgIGluZGV4ID0gbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHB1c2gobm9kZSkge1xuICAgICAgICAgICAgbm9kZS5wdXNoQ291bnQgPSArK3RoaXMucHVzaENvdW50O1xuICAgICAgICAgICAgdGhpcy5oZWFwLnB1c2gobm9kZSk7XG4gICAgICAgICAgICB0aGlzLnBlcmNVcCh0aGlzLmhlYXAubGVuZ3RoLTEpO1xuICAgICAgICB9XG5cbiAgICAgICAgdW5zaGlmdChub2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5oZWFwLnB1c2gobm9kZSk7XG4gICAgICAgIH1cblxuICAgICAgICBzaGlmdCgpIHtcbiAgICAgICAgICAgIGxldCBbdG9wXSA9IHRoaXMuaGVhcDtcblxuICAgICAgICAgICAgdGhpcy5oZWFwWzBdID0gdGhpcy5oZWFwW3RoaXMuaGVhcC5sZW5ndGgtMV07XG4gICAgICAgICAgICB0aGlzLmhlYXAucG9wKCk7XG4gICAgICAgICAgICB0aGlzLnBlcmNEb3duKDApO1xuXG4gICAgICAgICAgICByZXR1cm4gdG9wO1xuICAgICAgICB9XG5cbiAgICAgICAgdG9BcnJheSgpIHtcbiAgICAgICAgICAgIHJldHVybiBbLi4udGhpc107XG4gICAgICAgIH1cblxuICAgICAgICAqW1N5bWJvbC5pdGVyYXRvcl0gKCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmhlYXAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB5aWVsZCB0aGlzLmhlYXBbaV0uZGF0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJlbW92ZSAodGVzdEZuKSB7XG4gICAgICAgICAgICBsZXQgaiA9IDA7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuaGVhcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICghdGVzdEZuKHRoaXMuaGVhcFtpXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oZWFwW2pdID0gdGhpcy5oZWFwW2ldO1xuICAgICAgICAgICAgICAgICAgICBqKys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmhlYXAuc3BsaWNlKGopO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gcGFyZW50KHRoaXMuaGVhcC5sZW5ndGgtMSk7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wZXJjRG93bihpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsZWZ0Q2hpKGkpIHtcbiAgICAgICAgcmV0dXJuIChpPDwxKSsxO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcmVudChpKSB7XG4gICAgICAgIHJldHVybiAoKGkrMSk+PjEpLTE7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc21hbGxlcih4LCB5KSB7XG4gICAgICAgIGlmICh4LnByaW9yaXR5ICE9PSB5LnByaW9yaXR5KSB7XG4gICAgICAgICAgICByZXR1cm4geC5wcmlvcml0eSA8IHkucHJpb3JpdHk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4geC5wdXNoQ291bnQgPCB5LnB1c2hDb3VudDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBzYW1lIGFzIFthc3luYy5xdWV1ZV17QGxpbmsgbW9kdWxlOkNvbnRyb2xGbG93LnF1ZXVlfSBvbmx5IHRhc2tzIGFyZSBhc3NpZ25lZCBhIHByaW9yaXR5IGFuZFxuICAgICAqIGNvbXBsZXRlZCBpbiBhc2NlbmRpbmcgcHJpb3JpdHkgb3JkZXIuXG4gICAgICpcbiAgICAgKiBAbmFtZSBwcmlvcml0eVF1ZXVlXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMucXVldWVde0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy5xdWV1ZX1cbiAgICAgKiBAY2F0ZWdvcnkgQ29udHJvbCBGbG93XG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSB3b3JrZXIgLSBBbiBhc3luYyBmdW5jdGlvbiBmb3IgcHJvY2Vzc2luZyBhIHF1ZXVlZCB0YXNrLlxuICAgICAqIElmIHlvdSB3YW50IHRvIGhhbmRsZSBlcnJvcnMgZnJvbSBhbiBpbmRpdmlkdWFsIHRhc2ssIHBhc3MgYSBjYWxsYmFjayB0b1xuICAgICAqIGBxLnB1c2goKWAuXG4gICAgICogSW52b2tlZCB3aXRoICh0YXNrLCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGNvbmN1cnJlbmN5IC0gQW4gYGludGVnZXJgIGZvciBkZXRlcm1pbmluZyBob3cgbWFueSBgd29ya2VyYFxuICAgICAqIGZ1bmN0aW9ucyBzaG91bGQgYmUgcnVuIGluIHBhcmFsbGVsLiAgSWYgb21pdHRlZCwgdGhlIGNvbmN1cnJlbmN5IGRlZmF1bHRzIHRvXG4gICAgICogYDFgLiAgSWYgdGhlIGNvbmN1cnJlbmN5IGlzIGAwYCwgYW4gZXJyb3IgaXMgdGhyb3duLlxuICAgICAqIEByZXR1cm5zIHttb2R1bGU6Q29udHJvbEZsb3cuUXVldWVPYmplY3R9IEEgcHJpb3JpdHlRdWV1ZSBvYmplY3QgdG8gbWFuYWdlIHRoZSB0YXNrcy4gVGhlcmUgYXJlIHRocmVlXG4gICAgICogZGlmZmVyZW5jZXMgYmV0d2VlbiBgcXVldWVgIGFuZCBgcHJpb3JpdHlRdWV1ZWAgb2JqZWN0czpcbiAgICAgKiAqIGBwdXNoKHRhc2ssIHByaW9yaXR5LCBbY2FsbGJhY2tdKWAgLSBgcHJpb3JpdHlgIHNob3VsZCBiZSBhIG51bWJlci4gSWYgYW5cbiAgICAgKiAgIGFycmF5IG9mIGB0YXNrc2AgaXMgZ2l2ZW4sIGFsbCB0YXNrcyB3aWxsIGJlIGFzc2lnbmVkIHRoZSBzYW1lIHByaW9yaXR5LlxuICAgICAqICogYHB1c2hBc3luYyh0YXNrLCBwcmlvcml0eSwgW2NhbGxiYWNrXSlgIC0gdGhlIHNhbWUgYXMgYHByaW9yaXR5UXVldWUucHVzaGAsXG4gICAgICogICBleGNlcHQgdGhpcyByZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHJlamVjdHMgaWYgYW4gZXJyb3Igb2NjdXJzLlxuICAgICAqICogVGhlIGB1bnNoaWZ0YCBhbmQgYHVuc2hpZnRBc3luY2AgbWV0aG9kcyB3ZXJlIHJlbW92ZWQuXG4gICAgICovXG4gICAgZnVuY3Rpb24gcHJpb3JpdHlRdWV1ZSh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG4gICAgICAgIC8vIFN0YXJ0IHdpdGggYSBub3JtYWwgcXVldWVcbiAgICAgICAgdmFyIHEgPSBxdWV1ZSh3b3JrZXIsIGNvbmN1cnJlbmN5KTtcblxuICAgICAgICB2YXIge1xuICAgICAgICAgICAgcHVzaCxcbiAgICAgICAgICAgIHB1c2hBc3luY1xuICAgICAgICB9ID0gcTtcblxuICAgICAgICBxLl90YXNrcyA9IG5ldyBIZWFwKCk7XG4gICAgICAgIHEuX2NyZWF0ZVRhc2tJdGVtID0gKHtkYXRhLCBwcmlvcml0eX0sIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgcHJpb3JpdHksXG4gICAgICAgICAgICAgICAgY2FsbGJhY2tcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG5cbiAgICAgICAgZnVuY3Rpb24gY3JlYXRlRGF0YUl0ZW1zKHRhc2tzLCBwcmlvcml0eSkge1xuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRhc2tzKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7ZGF0YTogdGFza3MsIHByaW9yaXR5fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0YXNrcy5tYXAoZGF0YSA9PiB7IHJldHVybiB7ZGF0YSwgcHJpb3JpdHl9OyB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE92ZXJyaWRlIHB1c2ggdG8gYWNjZXB0IHNlY29uZCBwYXJhbWV0ZXIgcmVwcmVzZW50aW5nIHByaW9yaXR5XG4gICAgICAgIHEucHVzaCA9IGZ1bmN0aW9uKGRhdGEsIHByaW9yaXR5ID0gMCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHJldHVybiBwdXNoKGNyZWF0ZURhdGFJdGVtcyhkYXRhLCBwcmlvcml0eSksIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcblxuICAgICAgICBxLnB1c2hBc3luYyA9IGZ1bmN0aW9uKGRhdGEsIHByaW9yaXR5ID0gMCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHJldHVybiBwdXNoQXN5bmMoY3JlYXRlRGF0YUl0ZW1zKGRhdGEsIHByaW9yaXR5KSwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFJlbW92ZSB1bnNoaWZ0IGZ1bmN0aW9uc1xuICAgICAgICBkZWxldGUgcS51bnNoaWZ0O1xuICAgICAgICBkZWxldGUgcS51bnNoaWZ0QXN5bmM7XG5cbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUnVucyB0aGUgYHRhc2tzYCBhcnJheSBvZiBmdW5jdGlvbnMgaW4gcGFyYWxsZWwsIHdpdGhvdXQgd2FpdGluZyB1bnRpbCB0aGVcbiAgICAgKiBwcmV2aW91cyBmdW5jdGlvbiBoYXMgY29tcGxldGVkLiBPbmNlIGFueSBvZiB0aGUgYHRhc2tzYCBjb21wbGV0ZSBvciBwYXNzIGFuXG4gICAgICogZXJyb3IgdG8gaXRzIGNhbGxiYWNrLCB0aGUgbWFpbiBgY2FsbGJhY2tgIGlzIGltbWVkaWF0ZWx5IGNhbGxlZC4gSXQnc1xuICAgICAqIGVxdWl2YWxlbnQgdG8gYFByb21pc2UucmFjZSgpYC5cbiAgICAgKlxuICAgICAqIEBuYW1lIHJhY2VcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb250cm9sRmxvd1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgQ29udHJvbCBGbG93XG4gICAgICogQHBhcmFtIHtBcnJheX0gdGFza3MgLSBBbiBhcnJheSBjb250YWluaW5nIFthc3luYyBmdW5jdGlvbnNde0BsaW5rIEFzeW5jRnVuY3Rpb259XG4gICAgICogdG8gcnVuLiBFYWNoIGZ1bmN0aW9uIGNhbiBjb21wbGV0ZSB3aXRoIGFuIG9wdGlvbmFsIGByZXN1bHRgIHZhbHVlLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIC0gQSBjYWxsYmFjayB0byBydW4gb25jZSBhbnkgb2YgdGhlIGZ1bmN0aW9ucyBoYXZlXG4gICAgICogY29tcGxldGVkLiBUaGlzIGZ1bmN0aW9uIGdldHMgYW4gZXJyb3Igb3IgcmVzdWx0IGZyb20gdGhlIGZpcnN0IGZ1bmN0aW9uIHRoYXRcbiAgICAgKiBjb21wbGV0ZWQuIEludm9rZWQgd2l0aCAoZXJyLCByZXN1bHQpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIGEgY2FsbGJhY2sgaXMgb21pdHRlZFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBhc3luYy5yYWNlKFtcbiAgICAgKiAgICAgZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICogICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ29uZScpO1xuICAgICAqICAgICAgICAgfSwgMjAwKTtcbiAgICAgKiAgICAgfSxcbiAgICAgKiAgICAgZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICogICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ3R3bycpO1xuICAgICAqICAgICAgICAgfSwgMTAwKTtcbiAgICAgKiAgICAgfVxuICAgICAqIF0sXG4gICAgICogLy8gbWFpbiBjYWxsYmFja1xuICAgICAqIGZ1bmN0aW9uKGVyciwgcmVzdWx0KSB7XG4gICAgICogICAgIC8vIHRoZSByZXN1bHQgd2lsbCBiZSBlcXVhbCB0byAndHdvJyBhcyBpdCBmaW5pc2hlcyBlYXJsaWVyXG4gICAgICogfSk7XG4gICAgICovXG4gICAgZnVuY3Rpb24gcmFjZSh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBvbmNlKGNhbGxiYWNrKTtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRhc2tzKSkgcmV0dXJuIGNhbGxiYWNrKG5ldyBUeXBlRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IHRvIHJhY2UgbXVzdCBiZSBhbiBhcnJheSBvZiBmdW5jdGlvbnMnKSk7XG4gICAgICAgIGlmICghdGFza3MubGVuZ3RoKSByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSB0YXNrcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgIHdyYXBBc3luYyh0YXNrc1tpXSkoY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHJhY2UkMSA9IGF3YWl0aWZ5KHJhY2UsIDIpO1xuXG4gICAgLyoqXG4gICAgICogU2FtZSBhcyBbYHJlZHVjZWBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5yZWR1Y2V9LCBvbmx5IG9wZXJhdGVzIG9uIGBhcnJheWAgaW4gcmV2ZXJzZSBvcmRlci5cbiAgICAgKlxuICAgICAqIEBuYW1lIHJlZHVjZVJpZ2h0XG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMucmVkdWNlXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMucmVkdWNlfVxuICAgICAqIEBhbGlhcyBmb2xkclxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7Kn0gbWVtbyAtIFRoZSBpbml0aWFsIHN0YXRlIG9mIHRoZSByZWR1Y3Rpb24uXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEEgZnVuY3Rpb24gYXBwbGllZCB0byBlYWNoIGl0ZW0gaW4gdGhlXG4gICAgICogYXJyYXkgdG8gcHJvZHVjZSB0aGUgbmV4dCBzdGVwIGluIHRoZSByZWR1Y3Rpb24uXG4gICAgICogVGhlIGBpdGVyYXRlZWAgc2hvdWxkIGNvbXBsZXRlIHdpdGggdGhlIG5leHQgc3RhdGUgb2YgdGhlIHJlZHVjdGlvbi5cbiAgICAgKiBJZiB0aGUgaXRlcmF0ZWUgY29tcGxldGVzIHdpdGggYW4gZXJyb3IsIHRoZSByZWR1Y3Rpb24gaXMgc3RvcHBlZCBhbmQgdGhlXG4gICAgICogbWFpbiBgY2FsbGJhY2tgIGlzIGltbWVkaWF0ZWx5IGNhbGxlZCB3aXRoIHRoZSBlcnJvci5cbiAgICAgKiBJbnZva2VkIHdpdGggKG1lbW8sIGl0ZW0sIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgYWZ0ZXIgYWxsIHRoZVxuICAgICAqIGBpdGVyYXRlZWAgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQuIFJlc3VsdCBpcyB0aGUgcmVkdWNlZCB2YWx1ZS4gSW52b2tlZCB3aXRoXG4gICAgICogKGVyciwgcmVzdWx0KS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBpcyBwYXNzZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiByZWR1Y2VSaWdodCAoYXJyYXksIG1lbW8sIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmV2ZXJzZWQgPSBbLi4uYXJyYXldLnJldmVyc2UoKTtcbiAgICAgICAgcmV0dXJuIHJlZHVjZSQxKHJldmVyc2VkLCBtZW1vLCBpdGVyYXRlZSwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdyYXBzIHRoZSBhc3luYyBmdW5jdGlvbiBpbiBhbm90aGVyIGZ1bmN0aW9uIHRoYXQgYWx3YXlzIGNvbXBsZXRlcyB3aXRoIGFcbiAgICAgKiByZXN1bHQgb2JqZWN0LCBldmVuIHdoZW4gaXQgZXJyb3JzLlxuICAgICAqXG4gICAgICogVGhlIHJlc3VsdCBvYmplY3QgaGFzIGVpdGhlciB0aGUgcHJvcGVydHkgYGVycm9yYCBvciBgdmFsdWVgLlxuICAgICAqXG4gICAgICogQG5hbWUgcmVmbGVjdFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOlV0aWxzXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBmbiAtIFRoZSBhc3luYyBmdW5jdGlvbiB5b3Ugd2FudCB0byB3cmFwXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSAtIEEgZnVuY3Rpb24gdGhhdCBhbHdheXMgcGFzc2VzIG51bGwgdG8gaXQncyBjYWxsYmFjayBhc1xuICAgICAqIHRoZSBlcnJvci4gVGhlIHNlY29uZCBhcmd1bWVudCB0byB0aGUgY2FsbGJhY2sgd2lsbCBiZSBhbiBgb2JqZWN0YCB3aXRoXG4gICAgICogZWl0aGVyIGFuIGBlcnJvcmAgb3IgYSBgdmFsdWVgIHByb3BlcnR5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBhc3luYy5wYXJhbGxlbChbXG4gICAgICogICAgIGFzeW5jLnJlZmxlY3QoZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIC8vIGRvIHNvbWUgc3R1ZmYgLi4uXG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCAnb25lJyk7XG4gICAgICogICAgIH0pLFxuICAgICAqICAgICBhc3luYy5yZWZsZWN0KGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAvLyBkbyBzb21lIG1vcmUgc3R1ZmYgYnV0IGVycm9yIC4uLlxuICAgICAqICAgICAgICAgY2FsbGJhY2soJ2JhZCBzdHVmZiBoYXBwZW5lZCcpO1xuICAgICAqICAgICB9KSxcbiAgICAgKiAgICAgYXN5bmMucmVmbGVjdChmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgLy8gZG8gc29tZSBtb3JlIHN0dWZmIC4uLlxuICAgICAqICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ3R3bycpO1xuICAgICAqICAgICB9KVxuICAgICAqIF0sXG4gICAgICogLy8gb3B0aW9uYWwgY2FsbGJhY2tcbiAgICAgKiBmdW5jdGlvbihlcnIsIHJlc3VsdHMpIHtcbiAgICAgKiAgICAgLy8gdmFsdWVzXG4gICAgICogICAgIC8vIHJlc3VsdHNbMF0udmFsdWUgPSAnb25lJ1xuICAgICAqICAgICAvLyByZXN1bHRzWzFdLmVycm9yID0gJ2JhZCBzdHVmZiBoYXBwZW5lZCdcbiAgICAgKiAgICAgLy8gcmVzdWx0c1syXS52YWx1ZSA9ICd0d28nXG4gICAgICogfSk7XG4gICAgICovXG4gICAgZnVuY3Rpb24gcmVmbGVjdChmbikge1xuICAgICAgICB2YXIgX2ZuID0gd3JhcEFzeW5jKGZuKTtcbiAgICAgICAgcmV0dXJuIGluaXRpYWxQYXJhbXMoZnVuY3Rpb24gcmVmbGVjdE9uKGFyZ3MsIHJlZmxlY3RDYWxsYmFjaykge1xuICAgICAgICAgICAgYXJncy5wdXNoKChlcnJvciwgLi4uY2JBcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IHJldFZhbCA9IHt9O1xuICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICByZXRWYWwuZXJyb3IgPSBlcnJvcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNiQXJncy5sZW5ndGggPiAwKXtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gY2JBcmdzO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2JBcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdID0gY2JBcmdzO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldFZhbC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZWZsZWN0Q2FsbGJhY2sobnVsbCwgcmV0VmFsKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gX2ZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIGhlbHBlciBmdW5jdGlvbiB0aGF0IHdyYXBzIGFuIGFycmF5IG9yIGFuIG9iamVjdCBvZiBmdW5jdGlvbnMgd2l0aCBgcmVmbGVjdGAuXG4gICAgICpcbiAgICAgKiBAbmFtZSByZWZsZWN0QWxsXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6VXRpbHNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMucmVmbGVjdF17QGxpbmsgbW9kdWxlOlV0aWxzLnJlZmxlY3R9XG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdHxJdGVyYWJsZX0gdGFza3MgLSBUaGUgY29sbGVjdGlvbiBvZlxuICAgICAqIFthc3luYyBmdW5jdGlvbnNde0BsaW5rIEFzeW5jRnVuY3Rpb259IHRvIHdyYXAgaW4gYGFzeW5jLnJlZmxlY3RgLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBhbiBhcnJheSBvZiBhc3luYyBmdW5jdGlvbnMsIGVhY2ggd3JhcHBlZCBpblxuICAgICAqIGBhc3luYy5yZWZsZWN0YFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBsZXQgdGFza3MgPSBbXG4gICAgICogICAgIGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsICdvbmUnKTtcbiAgICAgKiAgICAgICAgIH0sIDIwMCk7XG4gICAgICogICAgIH0sXG4gICAgICogICAgIGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAvLyBkbyBzb21lIG1vcmUgc3R1ZmYgYnV0IGVycm9yIC4uLlxuICAgICAqICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKCdiYWQgc3R1ZmYgaGFwcGVuZWQnKSk7XG4gICAgICogICAgIH0sXG4gICAgICogICAgIGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsICd0d28nKTtcbiAgICAgKiAgICAgICAgIH0sIDEwMCk7XG4gICAgICogICAgIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogYXN5bmMucGFyYWxsZWwoYXN5bmMucmVmbGVjdEFsbCh0YXNrcyksXG4gICAgICogLy8gb3B0aW9uYWwgY2FsbGJhY2tcbiAgICAgKiBmdW5jdGlvbihlcnIsIHJlc3VsdHMpIHtcbiAgICAgKiAgICAgLy8gdmFsdWVzXG4gICAgICogICAgIC8vIHJlc3VsdHNbMF0udmFsdWUgPSAnb25lJ1xuICAgICAqICAgICAvLyByZXN1bHRzWzFdLmVycm9yID0gRXJyb3IoJ2JhZCBzdHVmZiBoYXBwZW5lZCcpXG4gICAgICogICAgIC8vIHJlc3VsdHNbMl0udmFsdWUgPSAndHdvJ1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gYW4gZXhhbXBsZSB1c2luZyBhbiBvYmplY3QgaW5zdGVhZCBvZiBhbiBhcnJheVxuICAgICAqIGxldCB0YXNrcyA9IHtcbiAgICAgKiAgICAgb25lOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCAnb25lJyk7XG4gICAgICogICAgICAgICB9LCAyMDApO1xuICAgICAqICAgICB9LFxuICAgICAqICAgICB0d286IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBjYWxsYmFjaygndHdvJyk7XG4gICAgICogICAgIH0sXG4gICAgICogICAgIHRocmVlOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCAndGhyZWUnKTtcbiAgICAgKiAgICAgICAgIH0sIDEwMCk7XG4gICAgICogICAgIH1cbiAgICAgKiB9O1xuICAgICAqXG4gICAgICogYXN5bmMucGFyYWxsZWwoYXN5bmMucmVmbGVjdEFsbCh0YXNrcyksXG4gICAgICogLy8gb3B0aW9uYWwgY2FsbGJhY2tcbiAgICAgKiBmdW5jdGlvbihlcnIsIHJlc3VsdHMpIHtcbiAgICAgKiAgICAgLy8gdmFsdWVzXG4gICAgICogICAgIC8vIHJlc3VsdHMub25lLnZhbHVlID0gJ29uZSdcbiAgICAgKiAgICAgLy8gcmVzdWx0cy50d28uZXJyb3IgPSAndHdvJ1xuICAgICAqICAgICAvLyByZXN1bHRzLnRocmVlLnZhbHVlID0gJ3RocmVlJ1xuICAgICAqIH0pO1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJlZmxlY3RBbGwodGFza3MpIHtcbiAgICAgICAgdmFyIHJlc3VsdHM7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRhc2tzKSkge1xuICAgICAgICAgICAgcmVzdWx0cyA9IHRhc2tzLm1hcChyZWZsZWN0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHRhc2tzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzdWx0c1trZXldID0gcmVmbGVjdC5jYWxsKHRoaXMsIHRhc2tzW2tleV0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVqZWN0JDIoZWFjaGZuLCBhcnIsIF9pdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgY29uc3QgaXRlcmF0ZWUgPSB3cmFwQXN5bmMoX2l0ZXJhdGVlKTtcbiAgICAgICAgcmV0dXJuIF9maWx0ZXIoZWFjaGZuLCBhcnIsICh2YWx1ZSwgY2IpID0+IHtcbiAgICAgICAgICAgIGl0ZXJhdGVlKHZhbHVlLCAoZXJyLCB2KSA9PiB7XG4gICAgICAgICAgICAgICAgY2IoZXJyLCAhdik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBvcHBvc2l0ZSBvZiBbYGZpbHRlcmBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5maWx0ZXJ9LiBSZW1vdmVzIHZhbHVlcyB0aGF0IHBhc3MgYW4gYGFzeW5jYCB0cnV0aCB0ZXN0LlxuICAgICAqXG4gICAgICogQG5hbWUgcmVqZWN0XG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMuZmlsdGVyXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZmlsdGVyfVxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBbiBhc3luYyB0cnV0aCB0ZXN0IHRvIGFwcGx5IHRvIGVhY2ggaXRlbSBpblxuICAgICAqIGBjb2xsYC5cbiAgICAgKiBUaGUgc2hvdWxkIGNvbXBsZXRlIHdpdGggYSBib29sZWFuIHZhbHVlIGFzIGl0cyBgcmVzdWx0YC5cbiAgICAgKiBJbnZva2VkIHdpdGggKGl0ZW0sIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgYWZ0ZXIgYWxsIHRoZVxuICAgICAqIGBpdGVyYXRlZWAgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQuIEludm9rZWQgd2l0aCAoZXJyLCByZXN1bHRzKS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBpcyBwYXNzZWRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gZGlyMSBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGZpbGUxLnR4dCwgZmlsZTIudHh0XG4gICAgICogLy8gZGlyMiBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGZpbGUzLnR4dCwgZmlsZTQudHh0XG4gICAgICogLy8gZGlyMyBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGZpbGU1LnR4dFxuICAgICAqXG4gICAgICogY29uc3QgZmlsZUxpc3QgPSBbJ2RpcjEvZmlsZTEudHh0JywnZGlyMi9maWxlMy50eHQnLCdkaXIzL2ZpbGU2LnR4dCddO1xuICAgICAqXG4gICAgICogLy8gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIGlmIGEgZmlsZSBleGlzdHNcbiAgICAgKiBmdW5jdGlvbiBmaWxlRXhpc3RzKGZpbGUsIGNhbGxiYWNrKSB7XG4gICAgICogICAgZnMuYWNjZXNzKGZpbGUsIGZzLmNvbnN0YW50cy5GX09LLCAoZXJyKSA9PiB7XG4gICAgICogICAgICAgIGNhbGxiYWNrKG51bGwsICFlcnIpO1xuICAgICAqICAgIH0pO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIGNhbGxiYWNrc1xuICAgICAqIGFzeW5jLnJlamVjdChmaWxlTGlzdCwgZmlsZUV4aXN0cywgZnVuY3Rpb24oZXJyLCByZXN1bHRzKSB7XG4gICAgICogICAgLy8gWyAnZGlyMy9maWxlNi50eHQnIF1cbiAgICAgKiAgICAvLyByZXN1bHRzIG5vdyBlcXVhbHMgYW4gYXJyYXkgb2YgdGhlIG5vbi1leGlzdGluZyBmaWxlc1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgUHJvbWlzZXNcbiAgICAgKiBhc3luYy5yZWplY3QoZmlsZUxpc3QsIGZpbGVFeGlzdHMpXG4gICAgICogLnRoZW4oIHJlc3VsdHMgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiAgICAgLy8gWyAnZGlyMy9maWxlNi50eHQnIF1cbiAgICAgKiAgICAgLy8gcmVzdWx0cyBub3cgZXF1YWxzIGFuIGFycmF5IG9mIHRoZSBub24tZXhpc3RpbmcgZmlsZXNcbiAgICAgKiB9KS5jYXRjaCggZXJyID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIGFzeW5jL2F3YWl0XG4gICAgICogYXN5bmMgKCkgPT4ge1xuICAgICAqICAgICB0cnkge1xuICAgICAqICAgICAgICAgbGV0IHJlc3VsdHMgPSBhd2FpdCBhc3luYy5yZWplY3QoZmlsZUxpc3QsIGZpbGVFeGlzdHMpO1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgICAgICAvLyBbICdkaXIzL2ZpbGU2LnR4dCcgXVxuICAgICAqICAgICAgICAgLy8gcmVzdWx0cyBub3cgZXF1YWxzIGFuIGFycmF5IG9mIHRoZSBub24tZXhpc3RpbmcgZmlsZXNcbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICovXG4gICAgZnVuY3Rpb24gcmVqZWN0IChjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdCQyKGVhY2hPZiQxLCBjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuICAgIHZhciByZWplY3QkMSA9IGF3YWl0aWZ5KHJlamVjdCwgMyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyBbYHJlamVjdGBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5yZWplY3R9IGJ1dCBydW5zIGEgbWF4aW11bSBvZiBgbGltaXRgIGFzeW5jIG9wZXJhdGlvbnMgYXQgYVxuICAgICAqIHRpbWUuXG4gICAgICpcbiAgICAgKiBAbmFtZSByZWplY3RMaW1pdFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLnJlamVjdF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLnJlamVjdH1cbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW1pdCAtIFRoZSBtYXhpbXVtIG51bWJlciBvZiBhc3luYyBvcGVyYXRpb25zIGF0IGEgdGltZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEFuIGFzeW5jIHRydXRoIHRlc3QgdG8gYXBwbHkgdG8gZWFjaCBpdGVtIGluXG4gICAgICogYGNvbGxgLlxuICAgICAqIFRoZSBzaG91bGQgY29tcGxldGUgd2l0aCBhIGJvb2xlYW4gdmFsdWUgYXMgaXRzIGByZXN1bHRgLlxuICAgICAqIEludm9rZWQgd2l0aCAoaXRlbSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCBhZnRlciBhbGwgdGhlXG4gICAgICogYGl0ZXJhdGVlYCBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZC4gSW52b2tlZCB3aXRoIChlcnIsIHJlc3VsdHMpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIG5vIGNhbGxiYWNrIGlzIHBhc3NlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJlamVjdExpbWl0IChjb2xsLCBsaW1pdCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiByZWplY3QkMihlYWNoT2ZMaW1pdCQyKGxpbWl0KSwgY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKVxuICAgIH1cbiAgICB2YXIgcmVqZWN0TGltaXQkMSA9IGF3YWl0aWZ5KHJlamVjdExpbWl0LCA0KTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzYW1lIGFzIFtgcmVqZWN0YF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLnJlamVjdH0gYnV0IHJ1bnMgb25seSBhIHNpbmdsZSBhc3luYyBvcGVyYXRpb24gYXQgYSB0aW1lLlxuICAgICAqXG4gICAgICogQG5hbWUgcmVqZWN0U2VyaWVzXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMucmVqZWN0XXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMucmVqZWN0fVxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBbiBhc3luYyB0cnV0aCB0ZXN0IHRvIGFwcGx5IHRvIGVhY2ggaXRlbSBpblxuICAgICAqIGBjb2xsYC5cbiAgICAgKiBUaGUgc2hvdWxkIGNvbXBsZXRlIHdpdGggYSBib29sZWFuIHZhbHVlIGFzIGl0cyBgcmVzdWx0YC5cbiAgICAgKiBJbnZva2VkIHdpdGggKGl0ZW0sIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgYWZ0ZXIgYWxsIHRoZVxuICAgICAqIGBpdGVyYXRlZWAgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQuIEludm9rZWQgd2l0aCAoZXJyLCByZXN1bHRzKS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBpcyBwYXNzZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiByZWplY3RTZXJpZXMgKGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gcmVqZWN0JDIoZWFjaE9mU2VyaWVzJDEsIGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaylcbiAgICB9XG4gICAgdmFyIHJlamVjdFNlcmllcyQxID0gYXdhaXRpZnkocmVqZWN0U2VyaWVzLCAzKTtcblxuICAgIGZ1bmN0aW9uIGNvbnN0YW50KHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBdHRlbXB0cyB0byBnZXQgYSBzdWNjZXNzZnVsIHJlc3BvbnNlIGZyb20gYHRhc2tgIG5vIG1vcmUgdGhhbiBgdGltZXNgIHRpbWVzXG4gICAgICogYmVmb3JlIHJldHVybmluZyBhbiBlcnJvci4gSWYgdGhlIHRhc2sgaXMgc3VjY2Vzc2Z1bCwgdGhlIGBjYWxsYmFja2Agd2lsbCBiZVxuICAgICAqIHBhc3NlZCB0aGUgcmVzdWx0IG9mIHRoZSBzdWNjZXNzZnVsIHRhc2suIElmIGFsbCBhdHRlbXB0cyBmYWlsLCB0aGUgY2FsbGJhY2tcbiAgICAgKiB3aWxsIGJlIHBhc3NlZCB0aGUgZXJyb3IgYW5kIHJlc3VsdCAoaWYgYW55KSBvZiB0aGUgZmluYWwgYXR0ZW1wdC5cbiAgICAgKlxuICAgICAqIEBuYW1lIHJldHJ5XG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGNhdGVnb3J5IENvbnRyb2wgRmxvd1xuICAgICAqIEBzZWUgW2FzeW5jLnJldHJ5YWJsZV17QGxpbmsgbW9kdWxlOkNvbnRyb2xGbG93LnJldHJ5YWJsZX1cbiAgICAgKiBAcGFyYW0ge09iamVjdHxudW1iZXJ9IFtvcHRzID0ge3RpbWVzOiA1LCBpbnRlcnZhbDogMH18IDVdIC0gQ2FuIGJlIGVpdGhlciBhblxuICAgICAqIG9iamVjdCB3aXRoIGB0aW1lc2AgYW5kIGBpbnRlcnZhbGAgb3IgYSBudW1iZXIuXG4gICAgICogKiBgdGltZXNgIC0gVGhlIG51bWJlciBvZiBhdHRlbXB0cyB0byBtYWtlIGJlZm9yZSBnaXZpbmcgdXAuICBUaGUgZGVmYXVsdFxuICAgICAqICAgaXMgYDVgLlxuICAgICAqICogYGludGVydmFsYCAtIFRoZSB0aW1lIHRvIHdhaXQgYmV0d2VlbiByZXRyaWVzLCBpbiBtaWxsaXNlY29uZHMuICBUaGVcbiAgICAgKiAgIGRlZmF1bHQgaXMgYDBgLiBUaGUgaW50ZXJ2YWwgbWF5IGFsc28gYmUgc3BlY2lmaWVkIGFzIGEgZnVuY3Rpb24gb2YgdGhlXG4gICAgICogICByZXRyeSBjb3VudCAoc2VlIGV4YW1wbGUpLlxuICAgICAqICogYGVycm9yRmlsdGVyYCAtIEFuIG9wdGlvbmFsIHN5bmNocm9ub3VzIGZ1bmN0aW9uIHRoYXQgaXMgaW52b2tlZCBvblxuICAgICAqICAgZXJyb25lb3VzIHJlc3VsdC4gSWYgaXQgcmV0dXJucyBgdHJ1ZWAgdGhlIHJldHJ5IGF0dGVtcHRzIHdpbGwgY29udGludWU7XG4gICAgICogICBpZiB0aGUgZnVuY3Rpb24gcmV0dXJucyBgZmFsc2VgIHRoZSByZXRyeSBmbG93IGlzIGFib3J0ZWQgd2l0aCB0aGUgY3VycmVudFxuICAgICAqICAgYXR0ZW1wdCdzIGVycm9yIGFuZCByZXN1bHQgYmVpbmcgcmV0dXJuZWQgdG8gdGhlIGZpbmFsIGNhbGxiYWNrLlxuICAgICAqICAgSW52b2tlZCB3aXRoIChlcnIpLlxuICAgICAqICogSWYgYG9wdHNgIGlzIGEgbnVtYmVyLCB0aGUgbnVtYmVyIHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHRpbWVzIHRvIHJldHJ5LFxuICAgICAqICAgd2l0aCB0aGUgZGVmYXVsdCBpbnRlcnZhbCBvZiBgMGAuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSB0YXNrIC0gQW4gYXN5bmMgZnVuY3Rpb24gdG8gcmV0cnkuXG4gICAgICogSW52b2tlZCB3aXRoIChjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEFuIG9wdGlvbmFsIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCB3aGVuIHRoZVxuICAgICAqIHRhc2sgaGFzIHN1Y2NlZWRlZCwgb3IgYWZ0ZXIgdGhlIGZpbmFsIGZhaWxlZCBhdHRlbXB0LiBJdCByZWNlaXZlcyB0aGUgYGVycmBcbiAgICAgKiBhbmQgYHJlc3VsdGAgYXJndW1lbnRzIG9mIHRoZSBsYXN0IGF0dGVtcHQgYXQgY29tcGxldGluZyB0aGUgYHRhc2tgLiBJbnZva2VkXG4gICAgICogd2l0aCAoZXJyLCByZXN1bHRzKS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlIGlmIG5vIGNhbGxiYWNrIHByb3ZpZGVkXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gVGhlIGByZXRyeWAgZnVuY3Rpb24gY2FuIGJlIHVzZWQgYXMgYSBzdGFuZC1hbG9uZSBjb250cm9sIGZsb3cgYnkgcGFzc2luZ1xuICAgICAqIC8vIGEgY2FsbGJhY2ssIGFzIHNob3duIGJlbG93OlxuICAgICAqXG4gICAgICogLy8gdHJ5IGNhbGxpbmcgYXBpTWV0aG9kIDMgdGltZXNcbiAgICAgKiBhc3luYy5yZXRyeSgzLCBhcGlNZXRob2QsIGZ1bmN0aW9uKGVyciwgcmVzdWx0KSB7XG4gICAgICogICAgIC8vIGRvIHNvbWV0aGluZyB3aXRoIHRoZSByZXN1bHRcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIHRyeSBjYWxsaW5nIGFwaU1ldGhvZCAzIHRpbWVzLCB3YWl0aW5nIDIwMCBtcyBiZXR3ZWVuIGVhY2ggcmV0cnlcbiAgICAgKiBhc3luYy5yZXRyeSh7dGltZXM6IDMsIGludGVydmFsOiAyMDB9LCBhcGlNZXRob2QsIGZ1bmN0aW9uKGVyciwgcmVzdWx0KSB7XG4gICAgICogICAgIC8vIGRvIHNvbWV0aGluZyB3aXRoIHRoZSByZXN1bHRcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIHRyeSBjYWxsaW5nIGFwaU1ldGhvZCAxMCB0aW1lcyB3aXRoIGV4cG9uZW50aWFsIGJhY2tvZmZcbiAgICAgKiAvLyAoaS5lLiBpbnRlcnZhbHMgb2YgMTAwLCAyMDAsIDQwMCwgODAwLCAxNjAwLCAuLi4gbWlsbGlzZWNvbmRzKVxuICAgICAqIGFzeW5jLnJldHJ5KHtcbiAgICAgKiAgIHRpbWVzOiAxMCxcbiAgICAgKiAgIGludGVydmFsOiBmdW5jdGlvbihyZXRyeUNvdW50KSB7XG4gICAgICogICAgIHJldHVybiA1MCAqIE1hdGgucG93KDIsIHJldHJ5Q291bnQpO1xuICAgICAqICAgfVxuICAgICAqIH0sIGFwaU1ldGhvZCwgZnVuY3Rpb24oZXJyLCByZXN1bHQpIHtcbiAgICAgKiAgICAgLy8gZG8gc29tZXRoaW5nIHdpdGggdGhlIHJlc3VsdFxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gdHJ5IGNhbGxpbmcgYXBpTWV0aG9kIHRoZSBkZWZhdWx0IDUgdGltZXMgbm8gZGVsYXkgYmV0d2VlbiBlYWNoIHJldHJ5XG4gICAgICogYXN5bmMucmV0cnkoYXBpTWV0aG9kLCBmdW5jdGlvbihlcnIsIHJlc3VsdCkge1xuICAgICAqICAgICAvLyBkbyBzb21ldGhpbmcgd2l0aCB0aGUgcmVzdWx0XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyB0cnkgY2FsbGluZyBhcGlNZXRob2Qgb25seSB3aGVuIGVycm9yIGNvbmRpdGlvbiBzYXRpc2ZpZXMsIGFsbCBvdGhlclxuICAgICAqIC8vIGVycm9ycyB3aWxsIGFib3J0IHRoZSByZXRyeSBjb250cm9sIGZsb3cgYW5kIHJldHVybiB0byBmaW5hbCBjYWxsYmFja1xuICAgICAqIGFzeW5jLnJldHJ5KHtcbiAgICAgKiAgIGVycm9yRmlsdGVyOiBmdW5jdGlvbihlcnIpIHtcbiAgICAgKiAgICAgcmV0dXJuIGVyci5tZXNzYWdlID09PSAnVGVtcG9yYXJ5IGVycm9yJzsgLy8gb25seSByZXRyeSBvbiBhIHNwZWNpZmljIGVycm9yXG4gICAgICogICB9XG4gICAgICogfSwgYXBpTWV0aG9kLCBmdW5jdGlvbihlcnIsIHJlc3VsdCkge1xuICAgICAqICAgICAvLyBkbyBzb21ldGhpbmcgd2l0aCB0aGUgcmVzdWx0XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyB0byByZXRyeSBpbmRpdmlkdWFsIG1ldGhvZHMgdGhhdCBhcmUgbm90IGFzIHJlbGlhYmxlIHdpdGhpbiBvdGhlclxuICAgICAqIC8vIGNvbnRyb2wgZmxvdyBmdW5jdGlvbnMsIHVzZSB0aGUgYHJldHJ5YWJsZWAgd3JhcHBlcjpcbiAgICAgKiBhc3luYy5hdXRvKHtcbiAgICAgKiAgICAgdXNlcnM6IGFwaS5nZXRVc2Vycy5iaW5kKGFwaSksXG4gICAgICogICAgIHBheW1lbnRzOiBhc3luYy5yZXRyeWFibGUoMywgYXBpLmdldFBheW1lbnRzLmJpbmQoYXBpKSlcbiAgICAgKiB9LCBmdW5jdGlvbihlcnIsIHJlc3VsdHMpIHtcbiAgICAgKiAgICAgLy8gZG8gc29tZXRoaW5nIHdpdGggdGhlIHJlc3VsdHNcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqL1xuICAgIGNvbnN0IERFRkFVTFRfVElNRVMgPSA1O1xuICAgIGNvbnN0IERFRkFVTFRfSU5URVJWQUwgPSAwO1xuXG4gICAgZnVuY3Rpb24gcmV0cnkob3B0cywgdGFzaywgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICAgICAgICB0aW1lczogREVGQVVMVF9USU1FUyxcbiAgICAgICAgICAgIGludGVydmFsRnVuYzogY29uc3RhbnQoREVGQVVMVF9JTlRFUlZBTClcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDMgJiYgdHlwZW9mIG9wdHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gdGFzayB8fCBwcm9taXNlQ2FsbGJhY2soKTtcbiAgICAgICAgICAgIHRhc2sgPSBvcHRzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFyc2VUaW1lcyhvcHRpb25zLCBvcHRzKTtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgcHJvbWlzZUNhbGxiYWNrKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHRhc2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYXJndW1lbnRzIGZvciBhc3luYy5yZXRyeVwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBfdGFzayA9IHdyYXBBc3luYyh0YXNrKTtcblxuICAgICAgICB2YXIgYXR0ZW1wdCA9IDE7XG4gICAgICAgIGZ1bmN0aW9uIHJldHJ5QXR0ZW1wdCgpIHtcbiAgICAgICAgICAgIF90YXNrKChlcnIsIC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyID09PSBmYWxzZSkgcmV0dXJuXG4gICAgICAgICAgICAgICAgaWYgKGVyciAmJiBhdHRlbXB0KysgPCBvcHRpb25zLnRpbWVzICYmXG4gICAgICAgICAgICAgICAgICAgICh0eXBlb2Ygb3B0aW9ucy5lcnJvckZpbHRlciAhPSAnZnVuY3Rpb24nIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmVycm9yRmlsdGVyKGVycikpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQocmV0cnlBdHRlbXB0LCBvcHRpb25zLmludGVydmFsRnVuYyhhdHRlbXB0IC0gMSkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgLi4uYXJncyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXRyeUF0dGVtcHQoKTtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrW1BST01JU0VfU1lNQk9MXVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlVGltZXMoYWNjLCB0KSB7XG4gICAgICAgIGlmICh0eXBlb2YgdCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGFjYy50aW1lcyA9ICt0LnRpbWVzIHx8IERFRkFVTFRfVElNRVM7XG5cbiAgICAgICAgICAgIGFjYy5pbnRlcnZhbEZ1bmMgPSB0eXBlb2YgdC5pbnRlcnZhbCA9PT0gJ2Z1bmN0aW9uJyA/XG4gICAgICAgICAgICAgICAgdC5pbnRlcnZhbCA6XG4gICAgICAgICAgICAgICAgY29uc3RhbnQoK3QuaW50ZXJ2YWwgfHwgREVGQVVMVF9JTlRFUlZBTCk7XG5cbiAgICAgICAgICAgIGFjYy5lcnJvckZpbHRlciA9IHQuZXJyb3JGaWx0ZXI7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHQgPT09ICdudW1iZXInIHx8IHR5cGVvZiB0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgYWNjLnRpbWVzID0gK3QgfHwgREVGQVVMVF9USU1FUztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYXJndW1lbnRzIGZvciBhc3luYy5yZXRyeVwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgY2xvc2UgcmVsYXRpdmUgb2YgW2ByZXRyeWBde0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy5yZXRyeX0uICBUaGlzIG1ldGhvZFxuICAgICAqIHdyYXBzIGEgdGFzayBhbmQgbWFrZXMgaXQgcmV0cnlhYmxlLCByYXRoZXIgdGhhbiBpbW1lZGlhdGVseSBjYWxsaW5nIGl0XG4gICAgICogd2l0aCByZXRyaWVzLlxuICAgICAqXG4gICAgICogQG5hbWUgcmV0cnlhYmxlXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMucmV0cnlde0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy5yZXRyeX1cbiAgICAgKiBAY2F0ZWdvcnkgQ29udHJvbCBGbG93XG4gICAgICogQHBhcmFtIHtPYmplY3R8bnVtYmVyfSBbb3B0cyA9IHt0aW1lczogNSwgaW50ZXJ2YWw6IDB9fCA1XSAtIG9wdGlvbmFsXG4gICAgICogb3B0aW9ucywgZXhhY3RseSB0aGUgc2FtZSBhcyBmcm9tIGByZXRyeWAsIGV4Y2VwdCBmb3IgYSBgb3B0cy5hcml0eWAgdGhhdFxuICAgICAqIGlzIHRoZSBhcml0eSBvZiB0aGUgYHRhc2tgIGZ1bmN0aW9uLCBkZWZhdWx0aW5nIHRvIGB0YXNrLmxlbmd0aGBcbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IHRhc2sgLSB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRvIHdyYXAuXG4gICAgICogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIHBhc3NlZCBhbnkgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgcmV0dXJuZWQgd3JhcHBlci5cbiAgICAgKiBJbnZva2VkIHdpdGggKC4uLmFyZ3MsIGNhbGxiYWNrKS5cbiAgICAgKiBAcmV0dXJucyB7QXN5bmNGdW5jdGlvbn0gVGhlIHdyYXBwZWQgZnVuY3Rpb24sIHdoaWNoIHdoZW4gaW52b2tlZCwgd2lsbFxuICAgICAqIHJldHJ5IG9uIGFuIGVycm9yLCBiYXNlZCBvbiB0aGUgcGFyYW1ldGVycyBzcGVjaWZpZWQgaW4gYG9wdHNgLlxuICAgICAqIFRoaXMgZnVuY3Rpb24gd2lsbCBhY2NlcHQgdGhlIHNhbWUgcGFyYW1ldGVycyBhcyBgdGFza2AuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGFzeW5jLmF1dG8oe1xuICAgICAqICAgICBkZXAxOiBhc3luYy5yZXRyeWFibGUoMywgZ2V0RnJvbUZsYWt5U2VydmljZSksXG4gICAgICogICAgIHByb2Nlc3M6IFtcImRlcDFcIiwgYXN5bmMucmV0cnlhYmxlKDMsIGZ1bmN0aW9uIChyZXN1bHRzLCBjYikge1xuICAgICAqICAgICAgICAgbWF5YmVQcm9jZXNzRGF0YShyZXN1bHRzLmRlcDEsIGNiKTtcbiAgICAgKiAgICAgfSldXG4gICAgICogfSwgY2FsbGJhY2spO1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJldHJ5YWJsZSAob3B0cywgdGFzaykge1xuICAgICAgICBpZiAoIXRhc2spIHtcbiAgICAgICAgICAgIHRhc2sgPSBvcHRzO1xuICAgICAgICAgICAgb3B0cyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGFyaXR5ID0gKG9wdHMgJiYgb3B0cy5hcml0eSkgfHwgdGFzay5sZW5ndGg7XG4gICAgICAgIGlmIChpc0FzeW5jKHRhc2spKSB7XG4gICAgICAgICAgICBhcml0eSArPSAxO1xuICAgICAgICB9XG4gICAgICAgIHZhciBfdGFzayA9IHdyYXBBc3luYyh0YXNrKTtcbiAgICAgICAgcmV0dXJuIGluaXRpYWxQYXJhbXMoKGFyZ3MsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPCBhcml0eSAtIDEgfHwgY2FsbGJhY2sgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGFyZ3MucHVzaChjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBwcm9taXNlQ2FsbGJhY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIHRhc2tGbihjYikge1xuICAgICAgICAgICAgICAgIF90YXNrKC4uLmFyZ3MsIGNiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG9wdHMpIHJldHJ5KG9wdHMsIHRhc2tGbiwgY2FsbGJhY2spO1xuICAgICAgICAgICAgZWxzZSByZXRyeSh0YXNrRm4sIGNhbGxiYWNrKTtcblxuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrW1BST01JU0VfU1lNQk9MXVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSdW4gdGhlIGZ1bmN0aW9ucyBpbiB0aGUgYHRhc2tzYCBjb2xsZWN0aW9uIGluIHNlcmllcywgZWFjaCBvbmUgcnVubmluZyBvbmNlXG4gICAgICogdGhlIHByZXZpb3VzIGZ1bmN0aW9uIGhhcyBjb21wbGV0ZWQuIElmIGFueSBmdW5jdGlvbnMgaW4gdGhlIHNlcmllcyBwYXNzIGFuXG4gICAgICogZXJyb3IgdG8gaXRzIGNhbGxiYWNrLCBubyBtb3JlIGZ1bmN0aW9ucyBhcmUgcnVuLCBhbmQgYGNhbGxiYWNrYCBpc1xuICAgICAqIGltbWVkaWF0ZWx5IGNhbGxlZCB3aXRoIHRoZSB2YWx1ZSBvZiB0aGUgZXJyb3IuIE90aGVyd2lzZSwgYGNhbGxiYWNrYFxuICAgICAqIHJlY2VpdmVzIGFuIGFycmF5IG9mIHJlc3VsdHMgd2hlbiBgdGFza3NgIGhhdmUgY29tcGxldGVkLlxuICAgICAqXG4gICAgICogSXQgaXMgYWxzbyBwb3NzaWJsZSB0byB1c2UgYW4gb2JqZWN0IGluc3RlYWQgb2YgYW4gYXJyYXkuIEVhY2ggcHJvcGVydHkgd2lsbFxuICAgICAqIGJlIHJ1biBhcyBhIGZ1bmN0aW9uLCBhbmQgdGhlIHJlc3VsdHMgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGZpbmFsIGBjYWxsYmFja2BcbiAgICAgKiBhcyBhbiBvYmplY3QgaW5zdGVhZCBvZiBhbiBhcnJheS4gVGhpcyBjYW4gYmUgYSBtb3JlIHJlYWRhYmxlIHdheSBvZiBoYW5kbGluZ1xuICAgICAqICByZXN1bHRzIGZyb20ge0BsaW5rIGFzeW5jLnNlcmllc30uXG4gICAgICpcbiAgICAgKiAqKk5vdGUqKiB0aGF0IHdoaWxlIG1hbnkgaW1wbGVtZW50YXRpb25zIHByZXNlcnZlIHRoZSBvcmRlciBvZiBvYmplY3RcbiAgICAgKiBwcm9wZXJ0aWVzLCB0aGUgW0VDTUFTY3JpcHQgTGFuZ3VhZ2UgU3BlY2lmaWNhdGlvbl0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzUuMS8jc2VjLTguNilcbiAgICAgKiBleHBsaWNpdGx5IHN0YXRlcyB0aGF0XG4gICAgICpcbiAgICAgKiA+IFRoZSBtZWNoYW5pY3MgYW5kIG9yZGVyIG9mIGVudW1lcmF0aW5nIHRoZSBwcm9wZXJ0aWVzIGlzIG5vdCBzcGVjaWZpZWQuXG4gICAgICpcbiAgICAgKiBTbyBpZiB5b3UgcmVseSBvbiB0aGUgb3JkZXIgaW4gd2hpY2ggeW91ciBzZXJpZXMgb2YgZnVuY3Rpb25zIGFyZSBleGVjdXRlZCxcbiAgICAgKiBhbmQgd2FudCB0aGlzIHRvIHdvcmsgb24gYWxsIHBsYXRmb3JtcywgY29uc2lkZXIgdXNpbmcgYW4gYXJyYXkuXG4gICAgICpcbiAgICAgKiBAbmFtZSBzZXJpZXNcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb250cm9sRmxvd1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgQ29udHJvbCBGbG93XG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gdGFza3MgLSBBIGNvbGxlY3Rpb24gY29udGFpbmluZ1xuICAgICAqIFthc3luYyBmdW5jdGlvbnNde0BsaW5rIEFzeW5jRnVuY3Rpb259IHRvIHJ1biBpbiBzZXJpZXMuXG4gICAgICogRWFjaCBmdW5jdGlvbiBjYW4gY29tcGxldGUgd2l0aCBhbnkgbnVtYmVyIG9mIG9wdGlvbmFsIGByZXN1bHRgIHZhbHVlcy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQW4gb3B0aW9uYWwgY2FsbGJhY2sgdG8gcnVuIG9uY2UgYWxsIHRoZVxuICAgICAqIGZ1bmN0aW9ucyBoYXZlIGNvbXBsZXRlZC4gVGhpcyBmdW5jdGlvbiBnZXRzIGEgcmVzdWx0cyBhcnJheSAob3Igb2JqZWN0KVxuICAgICAqIGNvbnRhaW5pbmcgYWxsIHRoZSByZXN1bHQgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgYHRhc2tgIGNhbGxiYWNrcy4gSW52b2tlZFxuICAgICAqIHdpdGggKGVyciwgcmVzdWx0KS5cbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIG5vIGNhbGxiYWNrIGlzIHBhc3NlZFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvL1VzaW5nIENhbGxiYWNrc1xuICAgICAqIGFzeW5jLnNlcmllcyhbXG4gICAgICogICAgIGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgIC8vIGRvIHNvbWUgYXN5bmMgdGFza1xuICAgICAqICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsICdvbmUnKTtcbiAgICAgKiAgICAgICAgIH0sIDIwMCk7XG4gICAgICogICAgIH0sXG4gICAgICogICAgIGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgIC8vIHRoZW4gZG8gYW5vdGhlciBhc3luYyB0YXNrXG4gICAgICogICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ3R3bycpO1xuICAgICAqICAgICAgICAgfSwgMTAwKTtcbiAgICAgKiAgICAgfVxuICAgICAqIF0sIGZ1bmN0aW9uKGVyciwgcmVzdWx0cykge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiAgICAgLy8gcmVzdWx0cyBpcyBlcXVhbCB0byBbJ29uZScsJ3R3byddXG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBhbiBleGFtcGxlIHVzaW5nIG9iamVjdHMgaW5zdGVhZCBvZiBhcnJheXNcbiAgICAgKiBhc3luYy5zZXJpZXMoe1xuICAgICAqICAgICBvbmU6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgIC8vIGRvIHNvbWUgYXN5bmMgdGFza1xuICAgICAqICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIDEpO1xuICAgICAqICAgICAgICAgfSwgMjAwKTtcbiAgICAgKiAgICAgfSxcbiAgICAgKiAgICAgdHdvOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgICAgICAvLyB0aGVuIGRvIGFub3RoZXIgYXN5bmMgdGFza1xuICAgICAqICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIDIpO1xuICAgICAqICAgICAgICAgfSwgMTAwKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH0sIGZ1bmN0aW9uKGVyciwgcmVzdWx0cykge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiAgICAgLy8gcmVzdWx0cyBpcyBlcXVhbCB0bzogeyBvbmU6IDEsIHR3bzogMiB9XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvL1VzaW5nIFByb21pc2VzXG4gICAgICogYXN5bmMuc2VyaWVzKFtcbiAgICAgKiAgICAgZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICogICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ29uZScpO1xuICAgICAqICAgICAgICAgfSwgMjAwKTtcbiAgICAgKiAgICAgfSxcbiAgICAgKiAgICAgZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICogICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ3R3bycpO1xuICAgICAqICAgICAgICAgfSwgMTAwKTtcbiAgICAgKiAgICAgfVxuICAgICAqIF0pLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgICAvLyByZXN1bHRzIGlzIGVxdWFsIHRvIFsnb25lJywndHdvJ11cbiAgICAgKiB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gYW4gZXhhbXBsZSB1c2luZyBhbiBvYmplY3QgaW5zdGVhZCBvZiBhbiBhcnJheVxuICAgICAqIGFzeW5jLnNlcmllcyh7XG4gICAgICogICAgIG9uZTogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICogICAgICAgICAgICAgLy8gZG8gc29tZSBhc3luYyB0YXNrXG4gICAgICogICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgMSk7XG4gICAgICogICAgICAgICB9LCAyMDApO1xuICAgICAqICAgICB9LFxuICAgICAqICAgICB0d286IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgIC8vIHRoZW4gZG8gYW5vdGhlciBhc3luYyB0YXNrXG4gICAgICogICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgMik7XG4gICAgICogICAgICAgICB9LCAxMDApO1xuICAgICAqICAgICB9XG4gICAgICogfSkudGhlbihyZXN1bHRzID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgIC8vIHJlc3VsdHMgaXMgZXF1YWwgdG86IHsgb25lOiAxLCB0d286IDIgfVxuICAgICAqIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvL1VzaW5nIGFzeW5jL2F3YWl0XG4gICAgICogYXN5bmMgKCkgPT4ge1xuICAgICAqICAgICB0cnkge1xuICAgICAqICAgICAgICAgbGV0IHJlc3VsdHMgPSBhd2FpdCBhc3luYy5zZXJpZXMoW1xuICAgICAqICAgICAgICAgICAgIGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICogICAgICAgICAgICAgICAgICAgICAvLyBkbyBzb21lIGFzeW5jIHRhc2tcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsICdvbmUnKTtcbiAgICAgKiAgICAgICAgICAgICAgICAgfSwgMjAwKTtcbiAgICAgKiAgICAgICAgICAgICB9LFxuICAgICAqICAgICAgICAgICAgIGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICogICAgICAgICAgICAgICAgICAgICAvLyB0aGVuIGRvIGFub3RoZXIgYXN5bmMgdGFza1xuICAgICAqICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ3R3bycpO1xuICAgICAqICAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgICAqICAgICAgICAgICAgIH1cbiAgICAgKiAgICAgICAgIF0pO1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgICAgICAvLyByZXN1bHRzIGlzIGVxdWFsIHRvIFsnb25lJywndHdvJ11cbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICogLy8gYW4gZXhhbXBsZSB1c2luZyBhbiBvYmplY3QgaW5zdGVhZCBvZiBhbiBhcnJheVxuICAgICAqIGFzeW5jICgpID0+IHtcbiAgICAgKiAgICAgdHJ5IHtcbiAgICAgKiAgICAgICAgIGxldCByZXN1bHRzID0gYXdhaXQgYXN5bmMucGFyYWxsZWwoe1xuICAgICAqICAgICAgICAgICAgIG9uZTogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgIC8vIGRvIHNvbWUgYXN5bmMgdGFza1xuICAgICAqICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgMSk7XG4gICAgICogICAgICAgICAgICAgICAgIH0sIDIwMCk7XG4gICAgICogICAgICAgICAgICAgfSxcbiAgICAgKiAgICAgICAgICAgIHR3bzogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgIC8vIHRoZW4gZG8gYW5vdGhlciBhc3luYyB0YXNrXG4gICAgICogICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCAyKTtcbiAgICAgKiAgICAgICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAgKiAgICAgICAgICAgIH1cbiAgICAgKiAgICAgICAgIH0pO1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgICAgICAvLyByZXN1bHRzIGlzIGVxdWFsIHRvOiB7IG9uZTogMSwgdHdvOiAyIH1cbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICovXG4gICAgZnVuY3Rpb24gc2VyaWVzKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX3BhcmFsbGVsKGVhY2hPZlNlcmllcyQxLCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYHRydWVgIGlmIGF0IGxlYXN0IG9uZSBlbGVtZW50IGluIHRoZSBgY29sbGAgc2F0aXNmaWVzIGFuIGFzeW5jIHRlc3QuXG4gICAgICogSWYgYW55IGl0ZXJhdGVlIGNhbGwgcmV0dXJucyBgdHJ1ZWAsIHRoZSBtYWluIGBjYWxsYmFja2AgaXMgaW1tZWRpYXRlbHlcbiAgICAgKiBjYWxsZWQuXG4gICAgICpcbiAgICAgKiBAbmFtZSBzb21lXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGFsaWFzIGFueVxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEFuIGFzeW5jIHRydXRoIHRlc3QgdG8gYXBwbHkgdG8gZWFjaCBpdGVtXG4gICAgICogaW4gdGhlIGNvbGxlY3Rpb25zIGluIHBhcmFsbGVsLlxuICAgICAqIFRoZSBpdGVyYXRlZSBzaG91bGQgY29tcGxldGUgd2l0aCBhIGJvb2xlYW4gYHJlc3VsdGAgdmFsdWUuXG4gICAgICogSW52b2tlZCB3aXRoIChpdGVtLCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIGFzIHNvb24gYXMgYW55XG4gICAgICogaXRlcmF0ZWUgcmV0dXJucyBgdHJ1ZWAsIG9yIGFmdGVyIGFsbCB0aGUgaXRlcmF0ZWUgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQuXG4gICAgICogUmVzdWx0IHdpbGwgYmUgZWl0aGVyIGB0cnVlYCBvciBgZmFsc2VgIGRlcGVuZGluZyBvbiB0aGUgdmFsdWVzIG9mIHRoZSBhc3luY1xuICAgICAqIHRlc3RzLiBJbnZva2VkIHdpdGggKGVyciwgcmVzdWx0KS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBwcm92aWRlZFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBkaXIxIGlzIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgZmlsZTEudHh0LCBmaWxlMi50eHRcbiAgICAgKiAvLyBkaXIyIGlzIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgZmlsZTMudHh0LCBmaWxlNC50eHRcbiAgICAgKiAvLyBkaXIzIGlzIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgZmlsZTUudHh0XG4gICAgICogLy8gZGlyNCBkb2VzIG5vdCBleGlzdFxuICAgICAqXG4gICAgICogLy8gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIGlmIGEgZmlsZSBleGlzdHNcbiAgICAgKiBmdW5jdGlvbiBmaWxlRXhpc3RzKGZpbGUsIGNhbGxiYWNrKSB7XG4gICAgICogICAgZnMuYWNjZXNzKGZpbGUsIGZzLmNvbnN0YW50cy5GX09LLCAoZXJyKSA9PiB7XG4gICAgICogICAgICAgIGNhbGxiYWNrKG51bGwsICFlcnIpO1xuICAgICAqICAgIH0pO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIGNhbGxiYWNrc1xuICAgICAqIGFzeW5jLnNvbWUoWydkaXIxL21pc3NpbmcudHh0JywnZGlyMi9taXNzaW5nLnR4dCcsJ2RpcjMvZmlsZTUudHh0J10sIGZpbGVFeGlzdHMsXG4gICAgICogICAgZnVuY3Rpb24oZXJyLCByZXN1bHQpIHtcbiAgICAgKiAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgICAgLy8gdHJ1ZVxuICAgICAqICAgICAgICAvLyByZXN1bHQgaXMgdHJ1ZSBzaW5jZSBzb21lIGZpbGUgaW4gdGhlIGxpc3QgZXhpc3RzXG4gICAgICogICAgfVxuICAgICAqKTtcbiAgICAgKlxuICAgICAqIGFzeW5jLnNvbWUoWydkaXIxL21pc3NpbmcudHh0JywnZGlyMi9taXNzaW5nLnR4dCcsJ2RpcjQvbWlzc2luZy50eHQnXSwgZmlsZUV4aXN0cyxcbiAgICAgKiAgICBmdW5jdGlvbihlcnIsIHJlc3VsdCkge1xuICAgICAqICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAgICAvLyBmYWxzZVxuICAgICAqICAgICAgICAvLyByZXN1bHQgaXMgZmFsc2Ugc2luY2Ugbm9uZSBvZiB0aGUgZmlsZXMgZXhpc3RzXG4gICAgICogICAgfVxuICAgICAqKTtcbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIFByb21pc2VzXG4gICAgICogYXN5bmMuc29tZShbJ2RpcjEvbWlzc2luZy50eHQnLCdkaXIyL21pc3NpbmcudHh0JywnZGlyMy9maWxlNS50eHQnXSwgZmlsZUV4aXN0cylcbiAgICAgKiAudGhlbiggcmVzdWx0ID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgLy8gdHJ1ZVxuICAgICAqICAgICAvLyByZXN1bHQgaXMgdHJ1ZSBzaW5jZSBzb21lIGZpbGUgaW4gdGhlIGxpc3QgZXhpc3RzXG4gICAgICogfSkuY2F0Y2goIGVyciA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiBhc3luYy5zb21lKFsnZGlyMS9taXNzaW5nLnR4dCcsJ2RpcjIvbWlzc2luZy50eHQnLCdkaXI0L21pc3NpbmcudHh0J10sIGZpbGVFeGlzdHMpXG4gICAgICogLnRoZW4oIHJlc3VsdCA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XG4gICAgICogICAgIC8vIGZhbHNlXG4gICAgICogICAgIC8vIHJlc3VsdCBpcyBmYWxzZSBzaW5jZSBub25lIG9mIHRoZSBmaWxlcyBleGlzdHNcbiAgICAgKiB9KS5jYXRjaCggZXJyID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIGFzeW5jL2F3YWl0XG4gICAgICogYXN5bmMgKCkgPT4ge1xuICAgICAqICAgICB0cnkge1xuICAgICAqICAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IGFzeW5jLnNvbWUoWydkaXIxL21pc3NpbmcudHh0JywnZGlyMi9taXNzaW5nLnR4dCcsJ2RpcjMvZmlsZTUudHh0J10sIGZpbGVFeGlzdHMpO1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgICAgIC8vIHRydWVcbiAgICAgKiAgICAgICAgIC8vIHJlc3VsdCBpcyB0cnVlIHNpbmNlIHNvbWUgZmlsZSBpbiB0aGUgbGlzdCBleGlzdHNcbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICogYXN5bmMgKCkgPT4ge1xuICAgICAqICAgICB0cnkge1xuICAgICAqICAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IGFzeW5jLnNvbWUoWydkaXIxL21pc3NpbmcudHh0JywnZGlyMi9taXNzaW5nLnR4dCcsJ2RpcjQvbWlzc2luZy50eHQnXSwgZmlsZUV4aXN0cyk7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAgICAgLy8gZmFsc2VcbiAgICAgKiAgICAgICAgIC8vIHJlc3VsdCBpcyBmYWxzZSBzaW5jZSBub25lIG9mIHRoZSBmaWxlcyBleGlzdHNcbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICovXG4gICAgZnVuY3Rpb24gc29tZShjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9jcmVhdGVUZXN0ZXIoQm9vbGVhbiwgcmVzID0+IHJlcykoZWFjaE9mJDEsIGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaylcbiAgICB9XG4gICAgdmFyIHNvbWUkMSA9IGF3YWl0aWZ5KHNvbWUsIDMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNhbWUgYXMgW2Bzb21lYF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLnNvbWV9IGJ1dCBydW5zIGEgbWF4aW11bSBvZiBgbGltaXRgIGFzeW5jIG9wZXJhdGlvbnMgYXQgYSB0aW1lLlxuICAgICAqXG4gICAgICogQG5hbWUgc29tZUxpbWl0XG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMuc29tZV17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLnNvbWV9XG4gICAgICogQGFsaWFzIGFueUxpbWl0XG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfEFzeW5jSXRlcmFibGV8T2JqZWN0fSBjb2xsIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbGltaXQgLSBUaGUgbWF4aW11bSBudW1iZXIgb2YgYXN5bmMgb3BlcmF0aW9ucyBhdCBhIHRpbWUuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEFuIGFzeW5jIHRydXRoIHRlc3QgdG8gYXBwbHkgdG8gZWFjaCBpdGVtXG4gICAgICogaW4gdGhlIGNvbGxlY3Rpb25zIGluIHBhcmFsbGVsLlxuICAgICAqIFRoZSBpdGVyYXRlZSBzaG91bGQgY29tcGxldGUgd2l0aCBhIGJvb2xlYW4gYHJlc3VsdGAgdmFsdWUuXG4gICAgICogSW52b2tlZCB3aXRoIChpdGVtLCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIGFzIHNvb24gYXMgYW55XG4gICAgICogaXRlcmF0ZWUgcmV0dXJucyBgdHJ1ZWAsIG9yIGFmdGVyIGFsbCB0aGUgaXRlcmF0ZWUgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQuXG4gICAgICogUmVzdWx0IHdpbGwgYmUgZWl0aGVyIGB0cnVlYCBvciBgZmFsc2VgIGRlcGVuZGluZyBvbiB0aGUgdmFsdWVzIG9mIHRoZSBhc3luY1xuICAgICAqIHRlc3RzLiBJbnZva2VkIHdpdGggKGVyciwgcmVzdWx0KS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBwcm92aWRlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNvbWVMaW1pdChjb2xsLCBsaW1pdCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBfY3JlYXRlVGVzdGVyKEJvb2xlYW4sIHJlcyA9PiByZXMpKGVhY2hPZkxpbWl0JDIobGltaXQpLCBjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuICAgIHZhciBzb21lTGltaXQkMSA9IGF3YWl0aWZ5KHNvbWVMaW1pdCwgNCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyBbYHNvbWVgXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuc29tZX0gYnV0IHJ1bnMgb25seSBhIHNpbmdsZSBhc3luYyBvcGVyYXRpb24gYXQgYSB0aW1lLlxuICAgICAqXG4gICAgICogQG5hbWUgc29tZVNlcmllc1xuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLnNvbWVde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5zb21lfVxuICAgICAqIEBhbGlhcyBhbnlTZXJpZXNcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBbiBhc3luYyB0cnV0aCB0ZXN0IHRvIGFwcGx5IHRvIGVhY2ggaXRlbVxuICAgICAqIGluIHRoZSBjb2xsZWN0aW9ucyBpbiBzZXJpZXMuXG4gICAgICogVGhlIGl0ZXJhdGVlIHNob3VsZCBjb21wbGV0ZSB3aXRoIGEgYm9vbGVhbiBgcmVzdWx0YCB2YWx1ZS5cbiAgICAgKiBJbnZva2VkIHdpdGggKGl0ZW0sIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgYXMgc29vbiBhcyBhbnlcbiAgICAgKiBpdGVyYXRlZSByZXR1cm5zIGB0cnVlYCwgb3IgYWZ0ZXIgYWxsIHRoZSBpdGVyYXRlZSBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZC5cbiAgICAgKiBSZXN1bHQgd2lsbCBiZSBlaXRoZXIgYHRydWVgIG9yIGBmYWxzZWAgZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZXMgb2YgdGhlIGFzeW5jXG4gICAgICogdGVzdHMuIEludm9rZWQgd2l0aCAoZXJyLCByZXN1bHQpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIG5vIGNhbGxiYWNrIHByb3ZpZGVkXG4gICAgICovXG4gICAgZnVuY3Rpb24gc29tZVNlcmllcyhjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9jcmVhdGVUZXN0ZXIoQm9vbGVhbiwgcmVzID0+IHJlcykoZWFjaE9mU2VyaWVzJDEsIGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaylcbiAgICB9XG4gICAgdmFyIHNvbWVTZXJpZXMkMSA9IGF3YWl0aWZ5KHNvbWVTZXJpZXMsIDMpO1xuXG4gICAgLyoqXG4gICAgICogU29ydHMgYSBsaXN0IGJ5IHRoZSByZXN1bHRzIG9mIHJ1bm5pbmcgZWFjaCBgY29sbGAgdmFsdWUgdGhyb3VnaCBhbiBhc3luY1xuICAgICAqIGBpdGVyYXRlZWAuXG4gICAgICpcbiAgICAgKiBAbmFtZSBzb3J0QnlcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBbiBhc3luYyBmdW5jdGlvbiB0byBhcHBseSB0byBlYWNoIGl0ZW0gaW5cbiAgICAgKiBgY29sbGAuXG4gICAgICogVGhlIGl0ZXJhdGVlIHNob3VsZCBjb21wbGV0ZSB3aXRoIGEgdmFsdWUgdG8gdXNlIGFzIHRoZSBzb3J0IGNyaXRlcmlhIGFzXG4gICAgICogaXRzIGByZXN1bHRgLlxuICAgICAqIEludm9rZWQgd2l0aCAoaXRlbSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgYWZ0ZXIgYWxsIHRoZVxuICAgICAqIGBpdGVyYXRlZWAgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQsIG9yIGFuIGVycm9yIG9jY3Vycy4gUmVzdWx0cyBpcyB0aGUgaXRlbXNcbiAgICAgKiBmcm9tIHRoZSBvcmlnaW5hbCBgY29sbGAgc29ydGVkIGJ5IHRoZSB2YWx1ZXMgcmV0dXJuZWQgYnkgdGhlIGBpdGVyYXRlZWBcbiAgICAgKiBjYWxscy4gSW52b2tlZCB3aXRoIChlcnIsIHJlc3VsdHMpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIG5vIGNhbGxiYWNrIHBhc3NlZFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBiaWdmaWxlLnR4dCBpcyBhIGZpbGUgdGhhdCBpcyAyNTExMDAgYnl0ZXMgaW4gc2l6ZVxuICAgICAqIC8vIG1lZGl1bWZpbGUudHh0IGlzIGEgZmlsZSB0aGF0IGlzIDExMDAwIGJ5dGVzIGluIHNpemVcbiAgICAgKiAvLyBzbWFsbGZpbGUudHh0IGlzIGEgZmlsZSB0aGF0IGlzIDEyMSBieXRlcyBpbiBzaXplXG4gICAgICpcbiAgICAgKiAvLyBhc3luY2hyb25vdXMgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBmaWxlIHNpemUgaW4gYnl0ZXNcbiAgICAgKiBmdW5jdGlvbiBnZXRGaWxlU2l6ZUluQnl0ZXMoZmlsZSwgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgZnMuc3RhdChmaWxlLCBmdW5jdGlvbihlcnIsIHN0YXQpIHtcbiAgICAgKiAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgKiAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgKiAgICAgICAgIH1cbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsIHN0YXQuc2l6ZSk7XG4gICAgICogICAgIH0pO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIGNhbGxiYWNrc1xuICAgICAqIGFzeW5jLnNvcnRCeShbJ21lZGl1bWZpbGUudHh0Jywnc21hbGxmaWxlLnR4dCcsJ2JpZ2ZpbGUudHh0J10sIGdldEZpbGVTaXplSW5CeXRlcyxcbiAgICAgKiAgICAgZnVuY3Rpb24oZXJyLCByZXN1bHRzKSB7XG4gICAgICogICAgICAgICBpZiAoZXJyKSB7XG4gICAgICogICAgICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgICAgIH0gZWxzZSB7XG4gICAgICogICAgICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgICAgICAgICAgLy8gcmVzdWx0cyBpcyBub3cgdGhlIG9yaWdpbmFsIGFycmF5IG9mIGZpbGVzIHNvcnRlZCBieVxuICAgICAqICAgICAgICAgICAgIC8vIGZpbGUgc2l6ZSAoYXNjZW5kaW5nIGJ5IGRlZmF1bHQpLCBlLmcuXG4gICAgICogICAgICAgICAgICAgLy8gWyAnc21hbGxmaWxlLnR4dCcsICdtZWRpdW1maWxlLnR4dCcsICdiaWdmaWxlLnR4dCddXG4gICAgICogICAgICAgICB9XG4gICAgICogICAgIH1cbiAgICAgKiApO1xuICAgICAqXG4gICAgICogLy8gQnkgbW9kaWZ5aW5nIHRoZSBjYWxsYmFjayBwYXJhbWV0ZXIgdGhlXG4gICAgICogLy8gc29ydGluZyBvcmRlciBjYW4gYmUgaW5mbHVlbmNlZDpcbiAgICAgKlxuICAgICAqIC8vIGFzY2VuZGluZyBvcmRlclxuICAgICAqIGFzeW5jLnNvcnRCeShbJ21lZGl1bWZpbGUudHh0Jywnc21hbGxmaWxlLnR4dCcsJ2JpZ2ZpbGUudHh0J10sIGZ1bmN0aW9uKGZpbGUsIGNhbGxiYWNrKSB7XG4gICAgICogICAgIGdldEZpbGVTaXplSW5CeXRlcyhmaWxlLCBmdW5jdGlvbihnZXRGaWxlU2l6ZUVyciwgZmlsZVNpemUpIHtcbiAgICAgKiAgICAgICAgIGlmIChnZXRGaWxlU2l6ZUVycikgcmV0dXJuIGNhbGxiYWNrKGdldEZpbGVTaXplRXJyKTtcbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsIGZpbGVTaXplKTtcbiAgICAgKiAgICAgfSk7XG4gICAgICogfSwgZnVuY3Rpb24oZXJyLCByZXN1bHRzKSB7XG4gICAgICogICAgICAgICBpZiAoZXJyKSB7XG4gICAgICogICAgICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgICAgIH0gZWxzZSB7XG4gICAgICogICAgICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgICAgICAgICAgLy8gcmVzdWx0cyBpcyBub3cgdGhlIG9yaWdpbmFsIGFycmF5IG9mIGZpbGVzIHNvcnRlZCBieVxuICAgICAqICAgICAgICAgICAgIC8vIGZpbGUgc2l6ZSAoYXNjZW5kaW5nIGJ5IGRlZmF1bHQpLCBlLmcuXG4gICAgICogICAgICAgICAgICAgLy8gWyAnc21hbGxmaWxlLnR4dCcsICdtZWRpdW1maWxlLnR4dCcsICdiaWdmaWxlLnR4dCddXG4gICAgICogICAgICAgICB9XG4gICAgICogICAgIH1cbiAgICAgKiApO1xuICAgICAqXG4gICAgICogLy8gZGVzY2VuZGluZyBvcmRlclxuICAgICAqIGFzeW5jLnNvcnRCeShbJ2JpZ2ZpbGUudHh0JywnbWVkaXVtZmlsZS50eHQnLCdzbWFsbGZpbGUudHh0J10sIGZ1bmN0aW9uKGZpbGUsIGNhbGxiYWNrKSB7XG4gICAgICogICAgIGdldEZpbGVTaXplSW5CeXRlcyhmaWxlLCBmdW5jdGlvbihnZXRGaWxlU2l6ZUVyciwgZmlsZVNpemUpIHtcbiAgICAgKiAgICAgICAgIGlmIChnZXRGaWxlU2l6ZUVycikge1xuICAgICAqICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhnZXRGaWxlU2l6ZUVycik7XG4gICAgICogICAgICAgICB9XG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCBmaWxlU2l6ZSAqIC0xKTtcbiAgICAgKiAgICAgfSk7XG4gICAgICogfSwgZnVuY3Rpb24oZXJyLCByZXN1bHRzKSB7XG4gICAgICogICAgICAgICBpZiAoZXJyKSB7XG4gICAgICogICAgICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgICAgIH0gZWxzZSB7XG4gICAgICogICAgICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgICAgICAgICAgLy8gcmVzdWx0cyBpcyBub3cgdGhlIG9yaWdpbmFsIGFycmF5IG9mIGZpbGVzIHNvcnRlZCBieVxuICAgICAqICAgICAgICAgICAgIC8vIGZpbGUgc2l6ZSAoYXNjZW5kaW5nIGJ5IGRlZmF1bHQpLCBlLmcuXG4gICAgICogICAgICAgICAgICAgLy8gWyAnYmlnZmlsZS50eHQnLCAnbWVkaXVtZmlsZS50eHQnLCAnc21hbGxmaWxlLnR4dCddXG4gICAgICogICAgICAgICB9XG4gICAgICogICAgIH1cbiAgICAgKiApO1xuICAgICAqXG4gICAgICogLy8gRXJyb3IgaGFuZGxpbmdcbiAgICAgKiBhc3luYy5zb3J0QnkoWydtZWRpdW1maWxlLnR4dCcsJ3NtYWxsZmlsZS50eHQnLCdtaXNzaW5nZmlsZS50eHQnXSwgZ2V0RmlsZVNpemVJbkJ5dGVzLFxuICAgICAqICAgICBmdW5jdGlvbihlcnIsIHJlc3VsdHMpIHtcbiAgICAgKiAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgKiAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICAgICAgICAgIC8vIFsgRXJyb3I6IEVOT0VOVDogbm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSBdXG4gICAgICogICAgICAgICB9IGVsc2Uge1xuICAgICAqICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgICAgICAgfVxuICAgICAqICAgICB9XG4gICAgICogKTtcbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIFByb21pc2VzXG4gICAgICogYXN5bmMuc29ydEJ5KFsnbWVkaXVtZmlsZS50eHQnLCdzbWFsbGZpbGUudHh0JywnYmlnZmlsZS50eHQnXSwgZ2V0RmlsZVNpemVJbkJ5dGVzKVxuICAgICAqIC50aGVuKCByZXN1bHRzID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgIC8vIHJlc3VsdHMgaXMgbm93IHRoZSBvcmlnaW5hbCBhcnJheSBvZiBmaWxlcyBzb3J0ZWQgYnlcbiAgICAgKiAgICAgLy8gZmlsZSBzaXplIChhc2NlbmRpbmcgYnkgZGVmYXVsdCksIGUuZy5cbiAgICAgKiAgICAgLy8gWyAnc21hbGxmaWxlLnR4dCcsICdtZWRpdW1maWxlLnR4dCcsICdiaWdmaWxlLnR4dCddXG4gICAgICogfSkuY2F0Y2goIGVyciA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBFcnJvciBoYW5kbGluZ1xuICAgICAqIGFzeW5jLnNvcnRCeShbJ21lZGl1bWZpbGUudHh0Jywnc21hbGxmaWxlLnR4dCcsJ21pc3NpbmdmaWxlLnR4dCddLCBnZXRGaWxlU2l6ZUluQnl0ZXMpXG4gICAgICogLnRoZW4oIHJlc3VsdHMgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiB9KS5jYXRjaCggZXJyID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgLy8gWyBFcnJvcjogRU5PRU5UOiBubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IF1cbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIGFzeW5jL2F3YWl0XG4gICAgICogKGFzeW5jICgpID0+IHtcbiAgICAgKiAgICAgdHJ5IHtcbiAgICAgKiAgICAgICAgIGxldCByZXN1bHRzID0gYXdhaXQgYXN5bmMuc29ydEJ5KFsnYmlnZmlsZS50eHQnLCdtZWRpdW1maWxlLnR4dCcsJ3NtYWxsZmlsZS50eHQnXSwgZ2V0RmlsZVNpemVJbkJ5dGVzKTtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgICAgICAgLy8gcmVzdWx0cyBpcyBub3cgdGhlIG9yaWdpbmFsIGFycmF5IG9mIGZpbGVzIHNvcnRlZCBieVxuICAgICAqICAgICAgICAgLy8gZmlsZSBzaXplIChhc2NlbmRpbmcgYnkgZGVmYXVsdCksIGUuZy5cbiAgICAgKiAgICAgICAgIC8vIFsgJ3NtYWxsZmlsZS50eHQnLCAnbWVkaXVtZmlsZS50eHQnLCAnYmlnZmlsZS50eHQnXVxuICAgICAqICAgICB9XG4gICAgICogICAgIGNhdGNoIChlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgIH1cbiAgICAgKiB9KSgpO1xuICAgICAqXG4gICAgICogLy8gRXJyb3IgaGFuZGxpbmdcbiAgICAgKiBhc3luYyAoKSA9PiB7XG4gICAgICogICAgIHRyeSB7XG4gICAgICogICAgICAgICBsZXQgcmVzdWx0cyA9IGF3YWl0IGFzeW5jLnNvcnRCeShbJ21pc3NpbmdmaWxlLnR4dCcsJ21lZGl1bWZpbGUudHh0Jywnc21hbGxmaWxlLnR4dCddLCBnZXRGaWxlU2l6ZUluQnl0ZXMpO1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgIH1cbiAgICAgKiAgICAgY2F0Y2ggKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgICAgIC8vIFsgRXJyb3I6IEVOT0VOVDogbm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSBdXG4gICAgICogICAgIH1cbiAgICAgKiB9XG4gICAgICpcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzb3J0QnkgKGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgX2l0ZXJhdGVlID0gd3JhcEFzeW5jKGl0ZXJhdGVlKTtcbiAgICAgICAgcmV0dXJuIG1hcCQxKGNvbGwsICh4LCBpdGVyQ2IpID0+IHtcbiAgICAgICAgICAgIF9pdGVyYXRlZSh4LCAoZXJyLCBjcml0ZXJpYSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBpdGVyQ2IoZXJyKTtcbiAgICAgICAgICAgICAgICBpdGVyQ2IoZXJyLCB7dmFsdWU6IHgsIGNyaXRlcmlhfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgKGVyciwgcmVzdWx0cykgPT4ge1xuICAgICAgICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXN1bHRzLnNvcnQoY29tcGFyYXRvcikubWFwKHYgPT4gdi52YWx1ZSkpO1xuICAgICAgICB9KTtcblxuICAgICAgICBmdW5jdGlvbiBjb21wYXJhdG9yKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgICAgICB2YXIgYSA9IGxlZnQuY3JpdGVyaWEsIGIgPSByaWdodC5jcml0ZXJpYTtcbiAgICAgICAgICAgIHJldHVybiBhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogMDtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgc29ydEJ5JDEgPSBhd2FpdGlmeShzb3J0QnksIDMpO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyBhIHRpbWUgbGltaXQgb24gYW4gYXN5bmNocm9ub3VzIGZ1bmN0aW9uLiBJZiB0aGUgZnVuY3Rpb24gZG9lcyBub3QgY2FsbFxuICAgICAqIGl0cyBjYWxsYmFjayB3aXRoaW4gdGhlIHNwZWNpZmllZCBtaWxsaXNlY29uZHMsIGl0IHdpbGwgYmUgY2FsbGVkIHdpdGggYVxuICAgICAqIHRpbWVvdXQgZXJyb3IuIFRoZSBjb2RlIHByb3BlcnR5IGZvciB0aGUgZXJyb3Igb2JqZWN0IHdpbGwgYmUgYCdFVElNRURPVVQnYC5cbiAgICAgKlxuICAgICAqIEBuYW1lIHRpbWVvdXRcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpVdGlsc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gYXN5bmNGbiAtIFRoZSBhc3luYyBmdW5jdGlvbiB0byBsaW1pdCBpbiB0aW1lLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBtaWxsaXNlY29uZHMgLSBUaGUgc3BlY2lmaWVkIHRpbWUgbGltaXQuXG4gICAgICogQHBhcmFtIHsqfSBbaW5mb10gLSBBbnkgdmFyaWFibGUgeW91IHdhbnQgYXR0YWNoZWQgKGBzdHJpbmdgLCBgb2JqZWN0YCwgZXRjKVxuICAgICAqIHRvIHRpbWVvdXQgRXJyb3IgZm9yIG1vcmUgaW5mb3JtYXRpb24uLlxuICAgICAqIEByZXR1cm5zIHtBc3luY0Z1bmN0aW9ufSBSZXR1cm5zIGEgd3JhcHBlZCBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkIHdpdGggYW55XG4gICAgICogb2YgdGhlIGNvbnRyb2wgZmxvdyBmdW5jdGlvbnMuXG4gICAgICogSW52b2tlIHRoaXMgZnVuY3Rpb24gd2l0aCB0aGUgc2FtZSBwYXJhbWV0ZXJzIGFzIHlvdSB3b3VsZCBgYXN5bmNGdW5jYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gbXlGdW5jdGlvbihmb28sIGNhbGxiYWNrKSB7XG4gICAgICogICAgIGRvQXN5bmNUYXNrKGZvbywgZnVuY3Rpb24oZXJyLCBkYXRhKSB7XG4gICAgICogICAgICAgICAvLyBoYW5kbGUgZXJyb3JzXG4gICAgICogICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgKlxuICAgICAqICAgICAgICAgLy8gZG8gc29tZSBzdHVmZiAuLi5cbiAgICAgKlxuICAgICAqICAgICAgICAgLy8gcmV0dXJuIHByb2Nlc3NlZCBkYXRhXG4gICAgICogICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCwgZGF0YSk7XG4gICAgICogICAgIH0pO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIHZhciB3cmFwcGVkID0gYXN5bmMudGltZW91dChteUZ1bmN0aW9uLCAxMDAwKTtcbiAgICAgKlxuICAgICAqIC8vIGNhbGwgYHdyYXBwZWRgIGFzIHlvdSB3b3VsZCBgbXlGdW5jdGlvbmBcbiAgICAgKiB3cmFwcGVkKHsgYmFyOiAnYmFyJyB9LCBmdW5jdGlvbihlcnIsIGRhdGEpIHtcbiAgICAgKiAgICAgLy8gaWYgYG15RnVuY3Rpb25gIHRha2VzIDwgMTAwMCBtcyB0byBleGVjdXRlLCBgZXJyYFxuICAgICAqICAgICAvLyBhbmQgYGRhdGFgIHdpbGwgaGF2ZSB0aGVpciBleHBlY3RlZCB2YWx1ZXNcbiAgICAgKlxuICAgICAqICAgICAvLyBlbHNlIGBlcnJgIHdpbGwgYmUgYW4gRXJyb3Igd2l0aCB0aGUgY29kZSAnRVRJTUVET1VUJ1xuICAgICAqIH0pO1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRpbWVvdXQoYXN5bmNGbiwgbWlsbGlzZWNvbmRzLCBpbmZvKSB7XG4gICAgICAgIHZhciBmbiA9IHdyYXBBc3luYyhhc3luY0ZuKTtcblxuICAgICAgICByZXR1cm4gaW5pdGlhbFBhcmFtcygoYXJncywgY2FsbGJhY2spID0+IHtcbiAgICAgICAgICAgIHZhciB0aW1lZE91dCA9IGZhbHNlO1xuICAgICAgICAgICAgdmFyIHRpbWVyO1xuXG4gICAgICAgICAgICBmdW5jdGlvbiB0aW1lb3V0Q2FsbGJhY2soKSB7XG4gICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBhc3luY0ZuLm5hbWUgfHwgJ2Fub255bW91cyc7XG4gICAgICAgICAgICAgICAgdmFyIGVycm9yICA9IG5ldyBFcnJvcignQ2FsbGJhY2sgZnVuY3Rpb24gXCInICsgbmFtZSArICdcIiB0aW1lZCBvdXQuJyk7XG4gICAgICAgICAgICAgICAgZXJyb3IuY29kZSA9ICdFVElNRURPVVQnO1xuICAgICAgICAgICAgICAgIGlmIChpbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yLmluZm8gPSBpbmZvO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aW1lZE91dCA9IHRydWU7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhcmdzLnB1c2goKC4uLmNiQXJncykgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGltZWRPdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soLi4uY2JBcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8gc2V0dXAgdGltZXIgYW5kIGNhbGwgb3JpZ2luYWwgZnVuY3Rpb25cbiAgICAgICAgICAgIHRpbWVyID0gc2V0VGltZW91dCh0aW1lb3V0Q2FsbGJhY2ssIG1pbGxpc2Vjb25kcyk7XG4gICAgICAgICAgICBmbiguLi5hcmdzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmFuZ2Uoc2l6ZSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gQXJyYXkoc2l6ZSk7XG4gICAgICAgIHdoaWxlIChzaXplLS0pIHtcbiAgICAgICAgICAgIHJlc3VsdFtzaXplXSA9IHNpemU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyBbdGltZXNde0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy50aW1lc30gYnV0IHJ1bnMgYSBtYXhpbXVtIG9mIGBsaW1pdGAgYXN5bmMgb3BlcmF0aW9ucyBhdCBhXG4gICAgICogdGltZS5cbiAgICAgKlxuICAgICAqIEBuYW1lIHRpbWVzTGltaXRcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb250cm9sRmxvd1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy50aW1lc117QGxpbmsgbW9kdWxlOkNvbnRyb2xGbG93LnRpbWVzfVxuICAgICAqIEBjYXRlZ29yeSBDb250cm9sIEZsb3dcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gY291bnQgLSBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIHJ1biB0aGUgZnVuY3Rpb24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbWl0IC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGFzeW5jIG9wZXJhdGlvbnMgYXQgYSB0aW1lLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBUaGUgYXN5bmMgZnVuY3Rpb24gdG8gY2FsbCBgbmAgdGltZXMuXG4gICAgICogSW52b2tlZCB3aXRoIHRoZSBpdGVyYXRpb24gaW5kZXggYW5kIGEgY2FsbGJhY2s6IChuLCBuZXh0KS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAtIHNlZSBbYXN5bmMubWFwXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMubWFwfS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBpcyBwcm92aWRlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRpbWVzTGltaXQoY291bnQsIGxpbWl0LCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIF9pdGVyYXRlZSA9IHdyYXBBc3luYyhpdGVyYXRlZSk7XG4gICAgICAgIHJldHVybiBtYXBMaW1pdCQxKHJhbmdlKGNvdW50KSwgbGltaXQsIF9pdGVyYXRlZSwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhbGxzIHRoZSBgaXRlcmF0ZWVgIGZ1bmN0aW9uIGBuYCB0aW1lcywgYW5kIGFjY3VtdWxhdGVzIHJlc3VsdHMgaW4gdGhlIHNhbWVcbiAgICAgKiBtYW5uZXIgeW91IHdvdWxkIHVzZSB3aXRoIFttYXBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5tYXB9LlxuICAgICAqXG4gICAgICogQG5hbWUgdGltZXNcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb250cm9sRmxvd1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5tYXBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5tYXB9XG4gICAgICogQGNhdGVnb3J5IENvbnRyb2wgRmxvd1xuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuIC0gVGhlIG51bWJlciBvZiB0aW1lcyB0byBydW4gdGhlIGZ1bmN0aW9uLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBUaGUgYXN5bmMgZnVuY3Rpb24gdG8gY2FsbCBgbmAgdGltZXMuXG4gICAgICogSW52b2tlZCB3aXRoIHRoZSBpdGVyYXRpb24gaW5kZXggYW5kIGEgY2FsbGJhY2s6IChuLCBuZXh0KS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAtIHNlZSB7QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLm1hcH0uXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgaXMgcHJvdmlkZWRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gUHJldGVuZCB0aGlzIGlzIHNvbWUgY29tcGxpY2F0ZWQgYXN5bmMgZmFjdG9yeVxuICAgICAqIHZhciBjcmVhdGVVc2VyID0gZnVuY3Rpb24oaWQsIGNhbGxiYWNrKSB7XG4gICAgICogICAgIGNhbGxiYWNrKG51bGwsIHtcbiAgICAgKiAgICAgICAgIGlkOiAndXNlcicgKyBpZFxuICAgICAqICAgICB9KTtcbiAgICAgKiB9O1xuICAgICAqXG4gICAgICogLy8gZ2VuZXJhdGUgNSB1c2Vyc1xuICAgICAqIGFzeW5jLnRpbWVzKDUsIGZ1bmN0aW9uKG4sIG5leHQpIHtcbiAgICAgKiAgICAgY3JlYXRlVXNlcihuLCBmdW5jdGlvbihlcnIsIHVzZXIpIHtcbiAgICAgKiAgICAgICAgIG5leHQoZXJyLCB1c2VyKTtcbiAgICAgKiAgICAgfSk7XG4gICAgICogfSwgZnVuY3Rpb24oZXJyLCB1c2Vycykge1xuICAgICAqICAgICAvLyB3ZSBzaG91bGQgbm93IGhhdmUgNSB1c2Vyc1xuICAgICAqIH0pO1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRpbWVzIChuLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIHRpbWVzTGltaXQobiwgSW5maW5pdHksIGl0ZXJhdGVlLCBjYWxsYmFjaylcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyBbdGltZXNde0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy50aW1lc30gYnV0IHJ1bnMgb25seSBhIHNpbmdsZSBhc3luYyBvcGVyYXRpb24gYXQgYSB0aW1lLlxuICAgICAqXG4gICAgICogQG5hbWUgdGltZXNTZXJpZXNcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb250cm9sRmxvd1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy50aW1lc117QGxpbmsgbW9kdWxlOkNvbnRyb2xGbG93LnRpbWVzfVxuICAgICAqIEBjYXRlZ29yeSBDb250cm9sIEZsb3dcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbiAtIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gcnVuIHRoZSBmdW5jdGlvbi5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gVGhlIGFzeW5jIGZ1bmN0aW9uIHRvIGNhbGwgYG5gIHRpbWVzLlxuICAgICAqIEludm9rZWQgd2l0aCB0aGUgaXRlcmF0aW9uIGluZGV4IGFuZCBhIGNhbGxiYWNrOiAobiwgbmV4dCkuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgLSBzZWUge0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5tYXB9LlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIG5vIGNhbGxiYWNrIGlzIHByb3ZpZGVkXG4gICAgICovXG4gICAgZnVuY3Rpb24gdGltZXNTZXJpZXMgKG4sIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gdGltZXNMaW1pdChuLCAxLCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSByZWxhdGl2ZSBvZiBgcmVkdWNlYC4gIFRha2VzIGFuIE9iamVjdCBvciBBcnJheSwgYW5kIGl0ZXJhdGVzIG92ZXIgZWFjaFxuICAgICAqIGVsZW1lbnQgaW4gcGFyYWxsZWwsIGVhY2ggc3RlcCBwb3RlbnRpYWxseSBtdXRhdGluZyBhbiBgYWNjdW11bGF0b3JgIHZhbHVlLlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBhY2N1bXVsYXRvciBkZWZhdWx0cyB0byB0aGUgdHlwZSBvZiBjb2xsZWN0aW9uIHBhc3NlZCBpbi5cbiAgICAgKlxuICAgICAqIEBuYW1lIHRyYW5zZm9ybVxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHsqfSBbYWNjdW11bGF0b3JdIC0gVGhlIGluaXRpYWwgc3RhdGUgb2YgdGhlIHRyYW5zZm9ybS4gIElmIG9taXR0ZWQsXG4gICAgICogaXQgd2lsbCBkZWZhdWx0IHRvIGFuIGVtcHR5IE9iamVjdCBvciBBcnJheSwgZGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mIGBjb2xsYFxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBIGZ1bmN0aW9uIGFwcGxpZWQgdG8gZWFjaCBpdGVtIGluIHRoZVxuICAgICAqIGNvbGxlY3Rpb24gdGhhdCBwb3RlbnRpYWxseSBtb2RpZmllcyB0aGUgYWNjdW11bGF0b3IuXG4gICAgICogSW52b2tlZCB3aXRoIChhY2N1bXVsYXRvciwgaXRlbSwga2V5LCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIGFmdGVyIGFsbCB0aGVcbiAgICAgKiBgaXRlcmF0ZWVgIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLiBSZXN1bHQgaXMgdGhlIHRyYW5zZm9ybWVkIGFjY3VtdWxhdG9yLlxuICAgICAqIEludm9rZWQgd2l0aCAoZXJyLCByZXN1bHQpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIG5vIGNhbGxiYWNrIHByb3ZpZGVkXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vIGZpbGUxLnR4dCBpcyBhIGZpbGUgdGhhdCBpcyAxMDAwIGJ5dGVzIGluIHNpemVcbiAgICAgKiAvLyBmaWxlMi50eHQgaXMgYSBmaWxlIHRoYXQgaXMgMjAwMCBieXRlcyBpbiBzaXplXG4gICAgICogLy8gZmlsZTMudHh0IGlzIGEgZmlsZSB0aGF0IGlzIDMwMDAgYnl0ZXMgaW4gc2l6ZVxuICAgICAqXG4gICAgICogLy8gaGVscGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBodW1hbi1yZWFkYWJsZSBzaXplIGZvcm1hdCBmcm9tIGJ5dGVzXG4gICAgICogZnVuY3Rpb24gZm9ybWF0Qnl0ZXMoYnl0ZXMsIGRlY2ltYWxzID0gMikge1xuICAgICAqICAgLy8gaW1wbGVtZW50YXRpb24gbm90IGluY2x1ZGVkIGZvciBicmV2aXR5XG4gICAgICogICByZXR1cm4gaHVtYW5SZWFkYmxlRmlsZXNpemU7XG4gICAgICogfVxuICAgICAqXG4gICAgICogY29uc3QgZmlsZUxpc3QgPSBbJ2ZpbGUxLnR4dCcsJ2ZpbGUyLnR4dCcsJ2ZpbGUzLnR4dCddO1xuICAgICAqXG4gICAgICogLy8gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgZmlsZSBzaXplLCB0cmFuc2Zvcm1lZCB0byBodW1hbi1yZWFkYWJsZSBmb3JtYXRcbiAgICAgKiAvLyBlLmcuIDEwMjQgYnl0ZXMgPSAxS0IsIDEyMzQgYnl0ZXMgPSAxLjIxIEtCLCAxMDQ4NTc2IGJ5dGVzID0gMU1CLCBldGMuXG4gICAgICogZnVuY3Rpb24gdHJhbnNmb3JtRmlsZVNpemUoYWNjLCB2YWx1ZSwga2V5LCBjYWxsYmFjaykge1xuICAgICAqICAgICBmcy5zdGF0KHZhbHVlLCBmdW5jdGlvbihlcnIsIHN0YXQpIHtcbiAgICAgKiAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgKiAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgKiAgICAgICAgIH1cbiAgICAgKiAgICAgICAgIGFjY1trZXldID0gZm9ybWF0Qnl0ZXMoc3RhdC5zaXplKTtcbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAqICAgICB9KTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBjYWxsYmFja3NcbiAgICAgKiBhc3luYy50cmFuc2Zvcm0oZmlsZUxpc3QsIHRyYW5zZm9ybUZpbGVTaXplLCBmdW5jdGlvbihlcnIsIHJlc3VsdCkge1xuICAgICAqICAgICBpZihlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgIH0gZWxzZSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAgICAgLy8gWyAnMTAwMCBCeXRlcycsICcxLjk1IEtCJywgJzIuOTMgS0InIF1cbiAgICAgKiAgICAgfVxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgUHJvbWlzZXNcbiAgICAgKiBhc3luYy50cmFuc2Zvcm0oZmlsZUxpc3QsIHRyYW5zZm9ybUZpbGVTaXplKVxuICAgICAqIC50aGVuKHJlc3VsdCA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XG4gICAgICogICAgIC8vIFsgJzEwMDAgQnl0ZXMnLCAnMS45NSBLQicsICcyLjkzIEtCJyBdXG4gICAgICogfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIGFzeW5jL2F3YWl0XG4gICAgICogKGFzeW5jICgpID0+IHtcbiAgICAgKiAgICAgdHJ5IHtcbiAgICAgKiAgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBhc3luYy50cmFuc2Zvcm0oZmlsZUxpc3QsIHRyYW5zZm9ybUZpbGVTaXplKTtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XG4gICAgICogICAgICAgICAvLyBbICcxMDAwIEJ5dGVzJywgJzEuOTUgS0InLCAnMi45MyBLQicgXVxuICAgICAqICAgICB9XG4gICAgICogICAgIGNhdGNoIChlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgIH1cbiAgICAgKiB9KSgpO1xuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vIGZpbGUxLnR4dCBpcyBhIGZpbGUgdGhhdCBpcyAxMDAwIGJ5dGVzIGluIHNpemVcbiAgICAgKiAvLyBmaWxlMi50eHQgaXMgYSBmaWxlIHRoYXQgaXMgMjAwMCBieXRlcyBpbiBzaXplXG4gICAgICogLy8gZmlsZTMudHh0IGlzIGEgZmlsZSB0aGF0IGlzIDMwMDAgYnl0ZXMgaW4gc2l6ZVxuICAgICAqXG4gICAgICogLy8gaGVscGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBodW1hbi1yZWFkYWJsZSBzaXplIGZvcm1hdCBmcm9tIGJ5dGVzXG4gICAgICogZnVuY3Rpb24gZm9ybWF0Qnl0ZXMoYnl0ZXMsIGRlY2ltYWxzID0gMikge1xuICAgICAqICAgLy8gaW1wbGVtZW50YXRpb24gbm90IGluY2x1ZGVkIGZvciBicmV2aXR5XG4gICAgICogICByZXR1cm4gaHVtYW5SZWFkYmxlRmlsZXNpemU7XG4gICAgICogfVxuICAgICAqXG4gICAgICogY29uc3QgZmlsZU1hcCA9IHsgZjE6ICdmaWxlMS50eHQnLCBmMjogJ2ZpbGUyLnR4dCcsIGYzOiAnZmlsZTMudHh0JyB9O1xuICAgICAqXG4gICAgICogLy8gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgZmlsZSBzaXplLCB0cmFuc2Zvcm1lZCB0byBodW1hbi1yZWFkYWJsZSBmb3JtYXRcbiAgICAgKiAvLyBlLmcuIDEwMjQgYnl0ZXMgPSAxS0IsIDEyMzQgYnl0ZXMgPSAxLjIxIEtCLCAxMDQ4NTc2IGJ5dGVzID0gMU1CLCBldGMuXG4gICAgICogZnVuY3Rpb24gdHJhbnNmb3JtRmlsZVNpemUoYWNjLCB2YWx1ZSwga2V5LCBjYWxsYmFjaykge1xuICAgICAqICAgICBmcy5zdGF0KHZhbHVlLCBmdW5jdGlvbihlcnIsIHN0YXQpIHtcbiAgICAgKiAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgKiAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgKiAgICAgICAgIH1cbiAgICAgKiAgICAgICAgIGFjY1trZXldID0gZm9ybWF0Qnl0ZXMoc3RhdC5zaXplKTtcbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAqICAgICB9KTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBjYWxsYmFja3NcbiAgICAgKiBhc3luYy50cmFuc2Zvcm0oZmlsZU1hcCwgdHJhbnNmb3JtRmlsZVNpemUsIGZ1bmN0aW9uKGVyciwgcmVzdWx0KSB7XG4gICAgICogICAgIGlmKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgfSBlbHNlIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XG4gICAgICogICAgICAgICAvLyB7IGYxOiAnMTAwMCBCeXRlcycsIGYyOiAnMS45NSBLQicsIGYzOiAnMi45MyBLQicgfVxuICAgICAqICAgICB9XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBQcm9taXNlc1xuICAgICAqIGFzeW5jLnRyYW5zZm9ybShmaWxlTWFwLCB0cmFuc2Zvcm1GaWxlU2l6ZSlcbiAgICAgKiAudGhlbihyZXN1bHQgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAvLyB7IGYxOiAnMTAwMCBCeXRlcycsIGYyOiAnMS45NSBLQicsIGYzOiAnMi45MyBLQicgfVxuICAgICAqIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBhc3luYy9hd2FpdFxuICAgICAqIGFzeW5jICgpID0+IHtcbiAgICAgKiAgICAgdHJ5IHtcbiAgICAgKiAgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBhc3luYy50cmFuc2Zvcm0oZmlsZU1hcCwgdHJhbnNmb3JtRmlsZVNpemUpO1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgICAgIC8vIHsgZjE6ICcxMDAwIEJ5dGVzJywgZjI6ICcxLjk1IEtCJywgZjM6ICcyLjkzIEtCJyB9XG4gICAgICogICAgIH1cbiAgICAgKiAgICAgY2F0Y2ggKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRyYW5zZm9ybSAoY29sbCwgYWNjdW11bGF0b3IsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8PSAzICYmIHR5cGVvZiBhY2N1bXVsYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSBpdGVyYXRlZTtcbiAgICAgICAgICAgIGl0ZXJhdGVlID0gYWNjdW11bGF0b3I7XG4gICAgICAgICAgICBhY2N1bXVsYXRvciA9IEFycmF5LmlzQXJyYXkoY29sbCkgPyBbXSA6IHt9O1xuICAgICAgICB9XG4gICAgICAgIGNhbGxiYWNrID0gb25jZShjYWxsYmFjayB8fCBwcm9taXNlQ2FsbGJhY2soKSk7XG4gICAgICAgIHZhciBfaXRlcmF0ZWUgPSB3cmFwQXN5bmMoaXRlcmF0ZWUpO1xuXG4gICAgICAgIGVhY2hPZiQxKGNvbGwsICh2LCBrLCBjYikgPT4ge1xuICAgICAgICAgICAgX2l0ZXJhdGVlKGFjY3VtdWxhdG9yLCB2LCBrLCBjYik7XG4gICAgICAgIH0sIGVyciA9PiBjYWxsYmFjayhlcnIsIGFjY3VtdWxhdG9yKSk7XG4gICAgICAgIHJldHVybiBjYWxsYmFja1tQUk9NSVNFX1NZTUJPTF1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJdCBydW5zIGVhY2ggdGFzayBpbiBzZXJpZXMgYnV0IHN0b3BzIHdoZW5ldmVyIGFueSBvZiB0aGUgZnVuY3Rpb25zIHdlcmVcbiAgICAgKiBzdWNjZXNzZnVsLiBJZiBvbmUgb2YgdGhlIHRhc2tzIHdlcmUgc3VjY2Vzc2Z1bCwgdGhlIGBjYWxsYmFja2Agd2lsbCBiZVxuICAgICAqIHBhc3NlZCB0aGUgcmVzdWx0IG9mIHRoZSBzdWNjZXNzZnVsIHRhc2suIElmIGFsbCB0YXNrcyBmYWlsLCB0aGUgY2FsbGJhY2tcbiAgICAgKiB3aWxsIGJlIHBhc3NlZCB0aGUgZXJyb3IgYW5kIHJlc3VsdCAoaWYgYW55KSBvZiB0aGUgZmluYWwgYXR0ZW1wdC5cbiAgICAgKlxuICAgICAqIEBuYW1lIHRyeUVhY2hcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb250cm9sRmxvd1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgQ29udHJvbCBGbG93XG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gdGFza3MgLSBBIGNvbGxlY3Rpb24gY29udGFpbmluZyBmdW5jdGlvbnMgdG9cbiAgICAgKiBydW4sIGVhY2ggZnVuY3Rpb24gaXMgcGFzc2VkIGEgYGNhbGxiYWNrKGVyciwgcmVzdWx0KWAgaXQgbXVzdCBjYWxsIG9uXG4gICAgICogY29tcGxldGlvbiB3aXRoIGFuIGVycm9yIGBlcnJgICh3aGljaCBjYW4gYmUgYG51bGxgKSBhbmQgYW4gb3B0aW9uYWwgYHJlc3VsdGBcbiAgICAgKiB2YWx1ZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQW4gb3B0aW9uYWwgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIHdoZW4gb25lXG4gICAgICogb2YgdGhlIHRhc2tzIGhhcyBzdWNjZWVkZWQsIG9yIGFsbCBoYXZlIGZhaWxlZC4gSXQgcmVjZWl2ZXMgdGhlIGBlcnJgIGFuZFxuICAgICAqIGByZXN1bHRgIGFyZ3VtZW50cyBvZiB0aGUgbGFzdCBhdHRlbXB0IGF0IGNvbXBsZXRpbmcgdGhlIGB0YXNrYC4gSW52b2tlZCB3aXRoXG4gICAgICogKGVyciwgcmVzdWx0cykuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgaXMgcGFzc2VkXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBhc3luYy50cnlFYWNoKFtcbiAgICAgKiAgICAgZnVuY3Rpb24gZ2V0RGF0YUZyb21GaXJzdFdlYnNpdGUoY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIC8vIFRyeSBnZXR0aW5nIHRoZSBkYXRhIGZyb20gdGhlIGZpcnN0IHdlYnNpdGVcbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKGVyciwgZGF0YSk7XG4gICAgICogICAgIH0sXG4gICAgICogICAgIGZ1bmN0aW9uIGdldERhdGFGcm9tU2Vjb25kV2Vic2l0ZShjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgLy8gRmlyc3Qgd2Vic2l0ZSBmYWlsZWQsXG4gICAgICogICAgICAgICAvLyBUcnkgZ2V0dGluZyB0aGUgZGF0YSBmcm9tIHRoZSBiYWNrdXAgd2Vic2l0ZVxuICAgICAqICAgICAgICAgY2FsbGJhY2soZXJyLCBkYXRhKTtcbiAgICAgKiAgICAgfVxuICAgICAqIF0sXG4gICAgICogLy8gb3B0aW9uYWwgY2FsbGJhY2tcbiAgICAgKiBmdW5jdGlvbihlcnIsIHJlc3VsdHMpIHtcbiAgICAgKiAgICAgTm93IGRvIHNvbWV0aGluZyB3aXRoIHRoZSBkYXRhLlxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICovXG4gICAgZnVuY3Rpb24gdHJ5RWFjaCh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGVycm9yID0gbnVsbDtcbiAgICAgICAgdmFyIHJlc3VsdDtcbiAgICAgICAgcmV0dXJuIGVhY2hTZXJpZXMkMSh0YXNrcywgKHRhc2ssIHRhc2tDYikgPT4ge1xuICAgICAgICAgICAgd3JhcEFzeW5jKHRhc2spKChlcnIsIC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyID09PSBmYWxzZSkgcmV0dXJuIHRhc2tDYihlcnIpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgICAgICAgICBbcmVzdWx0XSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gYXJncztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZXJyb3IgPSBlcnI7XG4gICAgICAgICAgICAgICAgdGFza0NiKGVyciA/IG51bGwgOiB7fSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgKCkgPT4gY2FsbGJhY2soZXJyb3IsIHJlc3VsdCkpO1xuICAgIH1cblxuICAgIHZhciB0cnlFYWNoJDEgPSBhd2FpdGlmeSh0cnlFYWNoKTtcblxuICAgIC8qKlxuICAgICAqIFVuZG9lcyBhIFttZW1vaXplXXtAbGluayBtb2R1bGU6VXRpbHMubWVtb2l6ZX1kIGZ1bmN0aW9uLCByZXZlcnRpbmcgaXQgdG8gdGhlIG9yaWdpbmFsLFxuICAgICAqIHVubWVtb2l6ZWQgZm9ybS4gSGFuZHkgZm9yIHRlc3RpbmcuXG4gICAgICpcbiAgICAgKiBAbmFtZSB1bm1lbW9pemVcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpVdGlsc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5tZW1vaXplXXtAbGluayBtb2R1bGU6VXRpbHMubWVtb2l6ZX1cbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gZm4gLSB0aGUgbWVtb2l6ZWQgZnVuY3Rpb25cbiAgICAgKiBAcmV0dXJucyB7QXN5bmNGdW5jdGlvbn0gYSBmdW5jdGlvbiB0aGF0IGNhbGxzIHRoZSBvcmlnaW5hbCB1bm1lbW9pemVkIGZ1bmN0aW9uXG4gICAgICovXG4gICAgZnVuY3Rpb24gdW5tZW1vaXplKGZuKSB7XG4gICAgICAgIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIChmbi51bm1lbW9pemVkIHx8IGZuKSguLi5hcmdzKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXBlYXRlZGx5IGNhbGwgYGl0ZXJhdGVlYCwgd2hpbGUgYHRlc3RgIHJldHVybnMgYHRydWVgLiBDYWxscyBgY2FsbGJhY2tgIHdoZW5cbiAgICAgKiBzdG9wcGVkLCBvciBhbiBlcnJvciBvY2N1cnMuXG4gICAgICpcbiAgICAgKiBAbmFtZSB3aGlsc3RcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb250cm9sRmxvd1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgQ29udHJvbCBGbG93XG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSB0ZXN0IC0gYXN5bmNocm9ub3VzIHRydXRoIHRlc3QgdG8gcGVyZm9ybSBiZWZvcmUgZWFjaFxuICAgICAqIGV4ZWN1dGlvbiBvZiBgaXRlcmF0ZWVgLiBJbnZva2VkIHdpdGggKGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQW4gYXN5bmMgZnVuY3Rpb24gd2hpY2ggaXMgY2FsbGVkIGVhY2ggdGltZVxuICAgICAqIGB0ZXN0YCBwYXNzZXMuIEludm9rZWQgd2l0aCAoY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCBhZnRlciB0aGUgdGVzdFxuICAgICAqIGZ1bmN0aW9uIGhhcyBmYWlsZWQgYW5kIHJlcGVhdGVkIGV4ZWN1dGlvbiBvZiBgaXRlcmF0ZWVgIGhhcyBzdG9wcGVkLiBgY2FsbGJhY2tgXG4gICAgICogd2lsbCBiZSBwYXNzZWQgYW4gZXJyb3IgYW5kIGFueSBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBmaW5hbCBgaXRlcmF0ZWVgJ3NcbiAgICAgKiBjYWxsYmFjay4gSW52b2tlZCB3aXRoIChlcnIsIFtyZXN1bHRzXSk7XG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgaXMgcGFzc2VkXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBjb3VudCA9IDA7XG4gICAgICogYXN5bmMud2hpbHN0KFxuICAgICAqICAgICBmdW5jdGlvbiB0ZXN0KGNiKSB7IGNiKG51bGwsIGNvdW50IDwgNSk7IH0sXG4gICAgICogICAgIGZ1bmN0aW9uIGl0ZXIoY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIGNvdW50Kys7XG4gICAgICogICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIGNvdW50KTtcbiAgICAgKiAgICAgICAgIH0sIDEwMDApO1xuICAgICAqICAgICB9LFxuICAgICAqICAgICBmdW5jdGlvbiAoZXJyLCBuKSB7XG4gICAgICogICAgICAgICAvLyA1IHNlY29uZHMgaGF2ZSBwYXNzZWQsIG4gPSA1XG4gICAgICogICAgIH1cbiAgICAgKiApO1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHdoaWxzdCh0ZXN0LCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBvbmx5T25jZShjYWxsYmFjayk7XG4gICAgICAgIHZhciBfZm4gPSB3cmFwQXN5bmMoaXRlcmF0ZWUpO1xuICAgICAgICB2YXIgX3Rlc3QgPSB3cmFwQXN5bmModGVzdCk7XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG5cbiAgICAgICAgZnVuY3Rpb24gbmV4dChlcnIsIC4uLnJlc3QpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgcmVzdWx0cyA9IHJlc3Q7XG4gICAgICAgICAgICBpZiAoZXJyID09PSBmYWxzZSkgcmV0dXJuO1xuICAgICAgICAgICAgX3Rlc3QoY2hlY2spO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gY2hlY2soZXJyLCB0cnV0aCkge1xuICAgICAgICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICBpZiAoZXJyID09PSBmYWxzZSkgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKCF0cnV0aCkgcmV0dXJuIGNhbGxiYWNrKG51bGwsIC4uLnJlc3VsdHMpO1xuICAgICAgICAgICAgX2ZuKG5leHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF90ZXN0KGNoZWNrKTtcbiAgICB9XG4gICAgdmFyIHdoaWxzdCQxID0gYXdhaXRpZnkod2hpbHN0LCAzKTtcblxuICAgIC8qKlxuICAgICAqIFJlcGVhdGVkbHkgY2FsbCBgaXRlcmF0ZWVgIHVudGlsIGB0ZXN0YCByZXR1cm5zIGB0cnVlYC4gQ2FsbHMgYGNhbGxiYWNrYCB3aGVuXG4gICAgICogc3RvcHBlZCwgb3IgYW4gZXJyb3Igb2NjdXJzLiBgY2FsbGJhY2tgIHdpbGwgYmUgcGFzc2VkIGFuIGVycm9yIGFuZCBhbnlcbiAgICAgKiBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBmaW5hbCBgaXRlcmF0ZWVgJ3MgY2FsbGJhY2suXG4gICAgICpcbiAgICAgKiBUaGUgaW52ZXJzZSBvZiBbd2hpbHN0XXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cud2hpbHN0fS5cbiAgICAgKlxuICAgICAqIEBuYW1lIHVudGlsXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMud2hpbHN0XXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cud2hpbHN0fVxuICAgICAqIEBjYXRlZ29yeSBDb250cm9sIEZsb3dcbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IHRlc3QgLSBhc3luY2hyb25vdXMgdHJ1dGggdGVzdCB0byBwZXJmb3JtIGJlZm9yZSBlYWNoXG4gICAgICogZXhlY3V0aW9uIG9mIGBpdGVyYXRlZWAuIEludm9rZWQgd2l0aCAoY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBbiBhc3luYyBmdW5jdGlvbiB3aGljaCBpcyBjYWxsZWQgZWFjaCB0aW1lXG4gICAgICogYHRlc3RgIGZhaWxzLiBJbnZva2VkIHdpdGggKGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgYWZ0ZXIgdGhlIHRlc3RcbiAgICAgKiBmdW5jdGlvbiBoYXMgcGFzc2VkIGFuZCByZXBlYXRlZCBleGVjdXRpb24gb2YgYGl0ZXJhdGVlYCBoYXMgc3RvcHBlZC4gYGNhbGxiYWNrYFxuICAgICAqIHdpbGwgYmUgcGFzc2VkIGFuIGVycm9yIGFuZCBhbnkgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgZmluYWwgYGl0ZXJhdGVlYCdzXG4gICAgICogY2FsbGJhY2suIEludm9rZWQgd2l0aCAoZXJyLCBbcmVzdWx0c10pO1xuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIGEgY2FsbGJhY2sgaXMgbm90IHBhc3NlZFxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBjb25zdCByZXN1bHRzID0gW11cbiAgICAgKiBsZXQgZmluaXNoZWQgPSBmYWxzZVxuICAgICAqIGFzeW5jLnVudGlsKGZ1bmN0aW9uIHRlc3QoY2IpIHtcbiAgICAgKiAgICAgY2IobnVsbCwgZmluaXNoZWQpXG4gICAgICogfSwgZnVuY3Rpb24gaXRlcihuZXh0KSB7XG4gICAgICogICAgIGZldGNoUGFnZSh1cmwsIChlcnIsIGJvZHkpID0+IHtcbiAgICAgKiAgICAgICAgIGlmIChlcnIpIHJldHVybiBuZXh0KGVycilcbiAgICAgKiAgICAgICAgIHJlc3VsdHMgPSByZXN1bHRzLmNvbmNhdChib2R5Lm9iamVjdHMpXG4gICAgICogICAgICAgICBmaW5pc2hlZCA9ICEhYm9keS5uZXh0XG4gICAgICogICAgICAgICBuZXh0KGVycilcbiAgICAgKiAgICAgfSlcbiAgICAgKiB9LCBmdW5jdGlvbiBkb25lIChlcnIpIHtcbiAgICAgKiAgICAgLy8gYWxsIHBhZ2VzIGhhdmUgYmVlbiBmZXRjaGVkXG4gICAgICogfSlcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB1bnRpbCh0ZXN0LCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgY29uc3QgX3Rlc3QgPSB3cmFwQXN5bmModGVzdCk7XG4gICAgICAgIHJldHVybiB3aGlsc3QkMSgoY2IpID0+IF90ZXN0KChlcnIsIHRydXRoKSA9PiBjYiAoZXJyLCAhdHJ1dGgpKSwgaXRlcmF0ZWUsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSdW5zIHRoZSBgdGFza3NgIGFycmF5IG9mIGZ1bmN0aW9ucyBpbiBzZXJpZXMsIGVhY2ggcGFzc2luZyB0aGVpciByZXN1bHRzIHRvXG4gICAgICogdGhlIG5leHQgaW4gdGhlIGFycmF5LiBIb3dldmVyLCBpZiBhbnkgb2YgdGhlIGB0YXNrc2AgcGFzcyBhbiBlcnJvciB0byB0aGVpclxuICAgICAqIG93biBjYWxsYmFjaywgdGhlIG5leHQgZnVuY3Rpb24gaXMgbm90IGV4ZWN1dGVkLCBhbmQgdGhlIG1haW4gYGNhbGxiYWNrYCBpc1xuICAgICAqIGltbWVkaWF0ZWx5IGNhbGxlZCB3aXRoIHRoZSBlcnJvci5cbiAgICAgKlxuICAgICAqIEBuYW1lIHdhdGVyZmFsbFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbnRyb2xGbG93XG4gICAgICogQG1ldGhvZFxuICAgICAqIEBjYXRlZ29yeSBDb250cm9sIEZsb3dcbiAgICAgKiBAcGFyYW0ge0FycmF5fSB0YXNrcyAtIEFuIGFycmF5IG9mIFthc3luYyBmdW5jdGlvbnNde0BsaW5rIEFzeW5jRnVuY3Rpb259XG4gICAgICogdG8gcnVuLlxuICAgICAqIEVhY2ggZnVuY3Rpb24gc2hvdWxkIGNvbXBsZXRlIHdpdGggYW55IG51bWJlciBvZiBgcmVzdWx0YCB2YWx1ZXMuXG4gICAgICogVGhlIGByZXN1bHRgIHZhbHVlcyB3aWxsIGJlIHBhc3NlZCBhcyBhcmd1bWVudHMsIGluIG9yZGVyLCB0byB0aGUgbmV4dCB0YXNrLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBbiBvcHRpb25hbCBjYWxsYmFjayB0byBydW4gb25jZSBhbGwgdGhlXG4gICAgICogZnVuY3Rpb25zIGhhdmUgY29tcGxldGVkLiBUaGlzIHdpbGwgYmUgcGFzc2VkIHRoZSByZXN1bHRzIG9mIHRoZSBsYXN0IHRhc2snc1xuICAgICAqIGNhbGxiYWNrLiBJbnZva2VkIHdpdGggKGVyciwgW3Jlc3VsdHNdKS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBhIGNhbGxiYWNrIGlzIG9taXR0ZWRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogYXN5bmMud2F0ZXJmYWxsKFtcbiAgICAgKiAgICAgZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsICdvbmUnLCAndHdvJyk7XG4gICAgICogICAgIH0sXG4gICAgICogICAgIGZ1bmN0aW9uKGFyZzEsIGFyZzIsIGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAvLyBhcmcxIG5vdyBlcXVhbHMgJ29uZScgYW5kIGFyZzIgbm93IGVxdWFscyAndHdvJ1xuICAgICAqICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ3RocmVlJyk7XG4gICAgICogICAgIH0sXG4gICAgICogICAgIGZ1bmN0aW9uKGFyZzEsIGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAvLyBhcmcxIG5vdyBlcXVhbHMgJ3RocmVlJ1xuICAgICAqICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ2RvbmUnKTtcbiAgICAgKiAgICAgfVxuICAgICAqIF0sIGZ1bmN0aW9uIChlcnIsIHJlc3VsdCkge1xuICAgICAqICAgICAvLyByZXN1bHQgbm93IGVxdWFscyAnZG9uZSdcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIE9yLCB3aXRoIG5hbWVkIGZ1bmN0aW9uczpcbiAgICAgKiBhc3luYy53YXRlcmZhbGwoW1xuICAgICAqICAgICBteUZpcnN0RnVuY3Rpb24sXG4gICAgICogICAgIG15U2Vjb25kRnVuY3Rpb24sXG4gICAgICogICAgIG15TGFzdEZ1bmN0aW9uLFxuICAgICAqIF0sIGZ1bmN0aW9uIChlcnIsIHJlc3VsdCkge1xuICAgICAqICAgICAvLyByZXN1bHQgbm93IGVxdWFscyAnZG9uZSdcbiAgICAgKiB9KTtcbiAgICAgKiBmdW5jdGlvbiBteUZpcnN0RnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgY2FsbGJhY2sobnVsbCwgJ29uZScsICd0d28nKTtcbiAgICAgKiB9XG4gICAgICogZnVuY3Rpb24gbXlTZWNvbmRGdW5jdGlvbihhcmcxLCBhcmcyLCBjYWxsYmFjaykge1xuICAgICAqICAgICAvLyBhcmcxIG5vdyBlcXVhbHMgJ29uZScgYW5kIGFyZzIgbm93IGVxdWFscyAndHdvJ1xuICAgICAqICAgICBjYWxsYmFjayhudWxsLCAndGhyZWUnKTtcbiAgICAgKiB9XG4gICAgICogZnVuY3Rpb24gbXlMYXN0RnVuY3Rpb24oYXJnMSwgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgLy8gYXJnMSBub3cgZXF1YWxzICd0aHJlZSdcbiAgICAgKiAgICAgY2FsbGJhY2sobnVsbCwgJ2RvbmUnKTtcbiAgICAgKiB9XG4gICAgICovXG4gICAgZnVuY3Rpb24gd2F0ZXJmYWxsICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBvbmNlKGNhbGxiYWNrKTtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRhc2tzKSkgcmV0dXJuIGNhbGxiYWNrKG5ldyBFcnJvcignRmlyc3QgYXJndW1lbnQgdG8gd2F0ZXJmYWxsIG11c3QgYmUgYW4gYXJyYXkgb2YgZnVuY3Rpb25zJykpO1xuICAgICAgICBpZiAoIXRhc2tzLmxlbmd0aCkgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIHZhciB0YXNrSW5kZXggPSAwO1xuXG4gICAgICAgIGZ1bmN0aW9uIG5leHRUYXNrKGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciB0YXNrID0gd3JhcEFzeW5jKHRhc2tzW3Rhc2tJbmRleCsrXSk7XG4gICAgICAgICAgICB0YXNrKC4uLmFyZ3MsIG9ubHlPbmNlKG5leHQpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIG5leHQoZXJyLCAuLi5hcmdzKSB7XG4gICAgICAgICAgICBpZiAoZXJyID09PSBmYWxzZSkgcmV0dXJuXG4gICAgICAgICAgICBpZiAoZXJyIHx8IHRhc2tJbmRleCA9PT0gdGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVyciwgLi4uYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBuZXh0VGFzayhhcmdzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5leHRUYXNrKFtdKTtcbiAgICB9XG5cbiAgICB2YXIgd2F0ZXJmYWxsJDEgPSBhd2FpdGlmeSh3YXRlcmZhbGwpO1xuXG4gICAgLyoqXG4gICAgICogQW4gXCJhc3luYyBmdW5jdGlvblwiIGluIHRoZSBjb250ZXh0IG9mIEFzeW5jIGlzIGFuIGFzeW5jaHJvbm91cyBmdW5jdGlvbiB3aXRoXG4gICAgICogYSB2YXJpYWJsZSBudW1iZXIgb2YgcGFyYW1ldGVycywgd2l0aCB0aGUgZmluYWwgcGFyYW1ldGVyIGJlaW5nIGEgY2FsbGJhY2suXG4gICAgICogKGBmdW5jdGlvbiAoYXJnMSwgYXJnMiwgLi4uLCBjYWxsYmFjaykge31gKVxuICAgICAqIFRoZSBmaW5hbCBjYWxsYmFjayBpcyBvZiB0aGUgZm9ybSBgY2FsbGJhY2soZXJyLCByZXN1bHRzLi4uKWAsIHdoaWNoIG11c3QgYmVcbiAgICAgKiBjYWxsZWQgb25jZSB0aGUgZnVuY3Rpb24gaXMgY29tcGxldGVkLiAgVGhlIGNhbGxiYWNrIHNob3VsZCBiZSBjYWxsZWQgd2l0aCBhXG4gICAgICogRXJyb3IgYXMgaXRzIGZpcnN0IGFyZ3VtZW50IHRvIHNpZ25hbCB0aGF0IGFuIGVycm9yIG9jY3VycmVkLlxuICAgICAqIE90aGVyd2lzZSwgaWYgbm8gZXJyb3Igb2NjdXJyZWQsIGl0IHNob3VsZCBiZSBjYWxsZWQgd2l0aCBgbnVsbGAgYXMgdGhlIGZpcnN0XG4gICAgICogYXJndW1lbnQsIGFuZCBhbnkgYWRkaXRpb25hbCBgcmVzdWx0YCBhcmd1bWVudHMgdGhhdCBtYXkgYXBwbHksIHRvIHNpZ25hbFxuICAgICAqIHN1Y2Nlc3NmdWwgY29tcGxldGlvbi5cbiAgICAgKiBUaGUgY2FsbGJhY2sgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlLCBpZGVhbGx5IG9uIGEgbGF0ZXIgdGljayBvZiB0aGVcbiAgICAgKiBKYXZhU2NyaXB0IGV2ZW50IGxvb3AuXG4gICAgICpcbiAgICAgKiBUaGlzIHR5cGUgb2YgZnVuY3Rpb24gaXMgYWxzbyByZWZlcnJlZCB0byBhcyBhIFwiTm9kZS1zdHlsZSBhc3luYyBmdW5jdGlvblwiLFxuICAgICAqIG9yIGEgXCJjb250aW51YXRpb24gcGFzc2luZy1zdHlsZSBmdW5jdGlvblwiIChDUFMpLiBNb3N0IG9mIHRoZSBtZXRob2RzIG9mIHRoaXNcbiAgICAgKiBsaWJyYXJ5IGFyZSB0aGVtc2VsdmVzIENQUy9Ob2RlLXN0eWxlIGFzeW5jIGZ1bmN0aW9ucywgb3IgZnVuY3Rpb25zIHRoYXRcbiAgICAgKiByZXR1cm4gQ1BTL05vZGUtc3R5bGUgYXN5bmMgZnVuY3Rpb25zLlxuICAgICAqXG4gICAgICogV2hlcmV2ZXIgd2UgYWNjZXB0IGEgTm9kZS1zdHlsZSBhc3luYyBmdW5jdGlvbiwgd2UgYWxzbyBkaXJlY3RseSBhY2NlcHQgYW5cbiAgICAgKiBbRVMyMDE3IGBhc3luY2AgZnVuY3Rpb25de0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL1N0YXRlbWVudHMvYXN5bmNfZnVuY3Rpb259LlxuICAgICAqIEluIHRoaXMgY2FzZSwgdGhlIGBhc3luY2AgZnVuY3Rpb24gd2lsbCBub3QgYmUgcGFzc2VkIGEgZmluYWwgY2FsbGJhY2tcbiAgICAgKiBhcmd1bWVudCwgYW5kIGFueSB0aHJvd24gZXJyb3Igd2lsbCBiZSB1c2VkIGFzIHRoZSBgZXJyYCBhcmd1bWVudCBvZiB0aGVcbiAgICAgKiBpbXBsaWNpdCBjYWxsYmFjaywgYW5kIHRoZSByZXR1cm4gdmFsdWUgd2lsbCBiZSB1c2VkIGFzIHRoZSBgcmVzdWx0YCB2YWx1ZS5cbiAgICAgKiAoaS5lLiBhIGByZWplY3RlZGAgb2YgdGhlIHJldHVybmVkIFByb21pc2UgYmVjb21lcyB0aGUgYGVycmAgY2FsbGJhY2tcbiAgICAgKiBhcmd1bWVudCwgYW5kIGEgYHJlc29sdmVkYCB2YWx1ZSBiZWNvbWVzIHRoZSBgcmVzdWx0YC4pXG4gICAgICpcbiAgICAgKiBOb3RlLCBkdWUgdG8gSmF2YVNjcmlwdCBsaW1pdGF0aW9ucywgd2UgY2FuIG9ubHkgZGV0ZWN0IG5hdGl2ZSBgYXN5bmNgXG4gICAgICogZnVuY3Rpb25zIGFuZCBub3QgdHJhbnNwaWxpZWQgaW1wbGVtZW50YXRpb25zLlxuICAgICAqIFlvdXIgZW52aXJvbm1lbnQgbXVzdCBoYXZlIGBhc3luY2AvYGF3YWl0YCBzdXBwb3J0IGZvciB0aGlzIHRvIHdvcmsuXG4gICAgICogKGUuZy4gTm9kZSA+IHY3LjYsIG9yIGEgcmVjZW50IHZlcnNpb24gb2YgYSBtb2Rlcm4gYnJvd3NlcikuXG4gICAgICogSWYgeW91IGFyZSB1c2luZyBgYXN5bmNgIGZ1bmN0aW9ucyB0aHJvdWdoIGEgdHJhbnNwaWxlciAoZS5nLiBCYWJlbCksIHlvdVxuICAgICAqIG11c3Qgc3RpbGwgd3JhcCB0aGUgZnVuY3Rpb24gd2l0aCBbYXN5bmNpZnlde0BsaW5rIG1vZHVsZTpVdGlscy5hc3luY2lmeX0sXG4gICAgICogYmVjYXVzZSB0aGUgYGFzeW5jIGZ1bmN0aW9uYCB3aWxsIGJlIGNvbXBpbGVkIHRvIGFuIG9yZGluYXJ5IGZ1bmN0aW9uIHRoYXRcbiAgICAgKiByZXR1cm5zIGEgcHJvbWlzZS5cbiAgICAgKlxuICAgICAqIEB0eXBlZGVmIHtGdW5jdGlvbn0gQXN5bmNGdW5jdGlvblxuICAgICAqIEBzdGF0aWNcbiAgICAgKi9cblxuXG4gICAgdmFyIGluZGV4ID0ge1xuICAgICAgICBhcHBseSxcbiAgICAgICAgYXBwbHlFYWNoLFxuICAgICAgICBhcHBseUVhY2hTZXJpZXMsXG4gICAgICAgIGFzeW5jaWZ5LFxuICAgICAgICBhdXRvLFxuICAgICAgICBhdXRvSW5qZWN0LFxuICAgICAgICBjYXJnbzogY2FyZ28kMSxcbiAgICAgICAgY2FyZ29RdWV1ZTogY2FyZ28sXG4gICAgICAgIGNvbXBvc2UsXG4gICAgICAgIGNvbmNhdDogY29uY2F0JDEsXG4gICAgICAgIGNvbmNhdExpbWl0OiBjb25jYXRMaW1pdCQxLFxuICAgICAgICBjb25jYXRTZXJpZXM6IGNvbmNhdFNlcmllcyQxLFxuICAgICAgICBjb25zdGFudDogY29uc3RhbnQkMSxcbiAgICAgICAgZGV0ZWN0OiBkZXRlY3QkMSxcbiAgICAgICAgZGV0ZWN0TGltaXQ6IGRldGVjdExpbWl0JDEsXG4gICAgICAgIGRldGVjdFNlcmllczogZGV0ZWN0U2VyaWVzJDEsXG4gICAgICAgIGRpcixcbiAgICAgICAgZG9VbnRpbCxcbiAgICAgICAgZG9XaGlsc3Q6IGRvV2hpbHN0JDEsXG4gICAgICAgIGVhY2gsXG4gICAgICAgIGVhY2hMaW1pdDogZWFjaExpbWl0JDEsXG4gICAgICAgIGVhY2hPZjogZWFjaE9mJDEsXG4gICAgICAgIGVhY2hPZkxpbWl0OiBlYWNoT2ZMaW1pdCQxLFxuICAgICAgICBlYWNoT2ZTZXJpZXM6IGVhY2hPZlNlcmllcyQxLFxuICAgICAgICBlYWNoU2VyaWVzOiBlYWNoU2VyaWVzJDEsXG4gICAgICAgIGVuc3VyZUFzeW5jLFxuICAgICAgICBldmVyeTogZXZlcnkkMSxcbiAgICAgICAgZXZlcnlMaW1pdDogZXZlcnlMaW1pdCQxLFxuICAgICAgICBldmVyeVNlcmllczogZXZlcnlTZXJpZXMkMSxcbiAgICAgICAgZmlsdGVyOiBmaWx0ZXIkMSxcbiAgICAgICAgZmlsdGVyTGltaXQ6IGZpbHRlckxpbWl0JDEsXG4gICAgICAgIGZpbHRlclNlcmllczogZmlsdGVyU2VyaWVzJDEsXG4gICAgICAgIGZvcmV2ZXI6IGZvcmV2ZXIkMSxcbiAgICAgICAgZ3JvdXBCeSxcbiAgICAgICAgZ3JvdXBCeUxpbWl0OiBncm91cEJ5TGltaXQkMSxcbiAgICAgICAgZ3JvdXBCeVNlcmllcyxcbiAgICAgICAgbG9nLFxuICAgICAgICBtYXA6IG1hcCQxLFxuICAgICAgICBtYXBMaW1pdDogbWFwTGltaXQkMSxcbiAgICAgICAgbWFwU2VyaWVzOiBtYXBTZXJpZXMkMSxcbiAgICAgICAgbWFwVmFsdWVzLFxuICAgICAgICBtYXBWYWx1ZXNMaW1pdDogbWFwVmFsdWVzTGltaXQkMSxcbiAgICAgICAgbWFwVmFsdWVzU2VyaWVzLFxuICAgICAgICBtZW1vaXplLFxuICAgICAgICBuZXh0VGljayxcbiAgICAgICAgcGFyYWxsZWwsXG4gICAgICAgIHBhcmFsbGVsTGltaXQsXG4gICAgICAgIHByaW9yaXR5UXVldWUsXG4gICAgICAgIHF1ZXVlLFxuICAgICAgICByYWNlOiByYWNlJDEsXG4gICAgICAgIHJlZHVjZTogcmVkdWNlJDEsXG4gICAgICAgIHJlZHVjZVJpZ2h0LFxuICAgICAgICByZWZsZWN0LFxuICAgICAgICByZWZsZWN0QWxsLFxuICAgICAgICByZWplY3Q6IHJlamVjdCQxLFxuICAgICAgICByZWplY3RMaW1pdDogcmVqZWN0TGltaXQkMSxcbiAgICAgICAgcmVqZWN0U2VyaWVzOiByZWplY3RTZXJpZXMkMSxcbiAgICAgICAgcmV0cnksXG4gICAgICAgIHJldHJ5YWJsZSxcbiAgICAgICAgc2VxLFxuICAgICAgICBzZXJpZXMsXG4gICAgICAgIHNldEltbWVkaWF0ZTogc2V0SW1tZWRpYXRlJDEsXG4gICAgICAgIHNvbWU6IHNvbWUkMSxcbiAgICAgICAgc29tZUxpbWl0OiBzb21lTGltaXQkMSxcbiAgICAgICAgc29tZVNlcmllczogc29tZVNlcmllcyQxLFxuICAgICAgICBzb3J0Qnk6IHNvcnRCeSQxLFxuICAgICAgICB0aW1lb3V0LFxuICAgICAgICB0aW1lcyxcbiAgICAgICAgdGltZXNMaW1pdCxcbiAgICAgICAgdGltZXNTZXJpZXMsXG4gICAgICAgIHRyYW5zZm9ybSxcbiAgICAgICAgdHJ5RWFjaDogdHJ5RWFjaCQxLFxuICAgICAgICB1bm1lbW9pemUsXG4gICAgICAgIHVudGlsLFxuICAgICAgICB3YXRlcmZhbGw6IHdhdGVyZmFsbCQxLFxuICAgICAgICB3aGlsc3Q6IHdoaWxzdCQxLFxuXG4gICAgICAgIC8vIGFsaWFzZXNcbiAgICAgICAgYWxsOiBldmVyeSQxLFxuICAgICAgICBhbGxMaW1pdDogZXZlcnlMaW1pdCQxLFxuICAgICAgICBhbGxTZXJpZXM6IGV2ZXJ5U2VyaWVzJDEsXG4gICAgICAgIGFueTogc29tZSQxLFxuICAgICAgICBhbnlMaW1pdDogc29tZUxpbWl0JDEsXG4gICAgICAgIGFueVNlcmllczogc29tZVNlcmllcyQxLFxuICAgICAgICBmaW5kOiBkZXRlY3QkMSxcbiAgICAgICAgZmluZExpbWl0OiBkZXRlY3RMaW1pdCQxLFxuICAgICAgICBmaW5kU2VyaWVzOiBkZXRlY3RTZXJpZXMkMSxcbiAgICAgICAgZmxhdE1hcDogY29uY2F0JDEsXG4gICAgICAgIGZsYXRNYXBMaW1pdDogY29uY2F0TGltaXQkMSxcbiAgICAgICAgZmxhdE1hcFNlcmllczogY29uY2F0U2VyaWVzJDEsXG4gICAgICAgIGZvckVhY2g6IGVhY2gsXG4gICAgICAgIGZvckVhY2hTZXJpZXM6IGVhY2hTZXJpZXMkMSxcbiAgICAgICAgZm9yRWFjaExpbWl0OiBlYWNoTGltaXQkMSxcbiAgICAgICAgZm9yRWFjaE9mOiBlYWNoT2YkMSxcbiAgICAgICAgZm9yRWFjaE9mU2VyaWVzOiBlYWNoT2ZTZXJpZXMkMSxcbiAgICAgICAgZm9yRWFjaE9mTGltaXQ6IGVhY2hPZkxpbWl0JDEsXG4gICAgICAgIGluamVjdDogcmVkdWNlJDEsXG4gICAgICAgIGZvbGRsOiByZWR1Y2UkMSxcbiAgICAgICAgZm9sZHI6IHJlZHVjZVJpZ2h0LFxuICAgICAgICBzZWxlY3Q6IGZpbHRlciQxLFxuICAgICAgICBzZWxlY3RMaW1pdDogZmlsdGVyTGltaXQkMSxcbiAgICAgICAgc2VsZWN0U2VyaWVzOiBmaWx0ZXJTZXJpZXMkMSxcbiAgICAgICAgd3JhcFN5bmM6IGFzeW5jaWZ5LFxuICAgICAgICBkdXJpbmc6IHdoaWxzdCQxLFxuICAgICAgICBkb0R1cmluZzogZG9XaGlsc3QkMVxuICAgIH07XG5cbiAgICBleHBvcnRzLmFsbCA9IGV2ZXJ5JDE7XG4gICAgZXhwb3J0cy5hbGxMaW1pdCA9IGV2ZXJ5TGltaXQkMTtcbiAgICBleHBvcnRzLmFsbFNlcmllcyA9IGV2ZXJ5U2VyaWVzJDE7XG4gICAgZXhwb3J0cy5hbnkgPSBzb21lJDE7XG4gICAgZXhwb3J0cy5hbnlMaW1pdCA9IHNvbWVMaW1pdCQxO1xuICAgIGV4cG9ydHMuYW55U2VyaWVzID0gc29tZVNlcmllcyQxO1xuICAgIGV4cG9ydHMuYXBwbHkgPSBhcHBseTtcbiAgICBleHBvcnRzLmFwcGx5RWFjaCA9IGFwcGx5RWFjaDtcbiAgICBleHBvcnRzLmFwcGx5RWFjaFNlcmllcyA9IGFwcGx5RWFjaFNlcmllcztcbiAgICBleHBvcnRzLmFzeW5jaWZ5ID0gYXN5bmNpZnk7XG4gICAgZXhwb3J0cy5hdXRvID0gYXV0bztcbiAgICBleHBvcnRzLmF1dG9JbmplY3QgPSBhdXRvSW5qZWN0O1xuICAgIGV4cG9ydHMuY2FyZ28gPSBjYXJnbyQxO1xuICAgIGV4cG9ydHMuY2FyZ29RdWV1ZSA9IGNhcmdvO1xuICAgIGV4cG9ydHMuY29tcG9zZSA9IGNvbXBvc2U7XG4gICAgZXhwb3J0cy5jb25jYXQgPSBjb25jYXQkMTtcbiAgICBleHBvcnRzLmNvbmNhdExpbWl0ID0gY29uY2F0TGltaXQkMTtcbiAgICBleHBvcnRzLmNvbmNhdFNlcmllcyA9IGNvbmNhdFNlcmllcyQxO1xuICAgIGV4cG9ydHMuY29uc3RhbnQgPSBjb25zdGFudCQxO1xuICAgIGV4cG9ydHMuZGVmYXVsdCA9IGluZGV4O1xuICAgIGV4cG9ydHMuZGV0ZWN0ID0gZGV0ZWN0JDE7XG4gICAgZXhwb3J0cy5kZXRlY3RMaW1pdCA9IGRldGVjdExpbWl0JDE7XG4gICAgZXhwb3J0cy5kZXRlY3RTZXJpZXMgPSBkZXRlY3RTZXJpZXMkMTtcbiAgICBleHBvcnRzLmRpciA9IGRpcjtcbiAgICBleHBvcnRzLmRvRHVyaW5nID0gZG9XaGlsc3QkMTtcbiAgICBleHBvcnRzLmRvVW50aWwgPSBkb1VudGlsO1xuICAgIGV4cG9ydHMuZG9XaGlsc3QgPSBkb1doaWxzdCQxO1xuICAgIGV4cG9ydHMuZHVyaW5nID0gd2hpbHN0JDE7XG4gICAgZXhwb3J0cy5lYWNoID0gZWFjaDtcbiAgICBleHBvcnRzLmVhY2hMaW1pdCA9IGVhY2hMaW1pdCQxO1xuICAgIGV4cG9ydHMuZWFjaE9mID0gZWFjaE9mJDE7XG4gICAgZXhwb3J0cy5lYWNoT2ZMaW1pdCA9IGVhY2hPZkxpbWl0JDE7XG4gICAgZXhwb3J0cy5lYWNoT2ZTZXJpZXMgPSBlYWNoT2ZTZXJpZXMkMTtcbiAgICBleHBvcnRzLmVhY2hTZXJpZXMgPSBlYWNoU2VyaWVzJDE7XG4gICAgZXhwb3J0cy5lbnN1cmVBc3luYyA9IGVuc3VyZUFzeW5jO1xuICAgIGV4cG9ydHMuZXZlcnkgPSBldmVyeSQxO1xuICAgIGV4cG9ydHMuZXZlcnlMaW1pdCA9IGV2ZXJ5TGltaXQkMTtcbiAgICBleHBvcnRzLmV2ZXJ5U2VyaWVzID0gZXZlcnlTZXJpZXMkMTtcbiAgICBleHBvcnRzLmZpbHRlciA9IGZpbHRlciQxO1xuICAgIGV4cG9ydHMuZmlsdGVyTGltaXQgPSBmaWx0ZXJMaW1pdCQxO1xuICAgIGV4cG9ydHMuZmlsdGVyU2VyaWVzID0gZmlsdGVyU2VyaWVzJDE7XG4gICAgZXhwb3J0cy5maW5kID0gZGV0ZWN0JDE7XG4gICAgZXhwb3J0cy5maW5kTGltaXQgPSBkZXRlY3RMaW1pdCQxO1xuICAgIGV4cG9ydHMuZmluZFNlcmllcyA9IGRldGVjdFNlcmllcyQxO1xuICAgIGV4cG9ydHMuZmxhdE1hcCA9IGNvbmNhdCQxO1xuICAgIGV4cG9ydHMuZmxhdE1hcExpbWl0ID0gY29uY2F0TGltaXQkMTtcbiAgICBleHBvcnRzLmZsYXRNYXBTZXJpZXMgPSBjb25jYXRTZXJpZXMkMTtcbiAgICBleHBvcnRzLmZvbGRsID0gcmVkdWNlJDE7XG4gICAgZXhwb3J0cy5mb2xkciA9IHJlZHVjZVJpZ2h0O1xuICAgIGV4cG9ydHMuZm9yRWFjaCA9IGVhY2g7XG4gICAgZXhwb3J0cy5mb3JFYWNoTGltaXQgPSBlYWNoTGltaXQkMTtcbiAgICBleHBvcnRzLmZvckVhY2hPZiA9IGVhY2hPZiQxO1xuICAgIGV4cG9ydHMuZm9yRWFjaE9mTGltaXQgPSBlYWNoT2ZMaW1pdCQxO1xuICAgIGV4cG9ydHMuZm9yRWFjaE9mU2VyaWVzID0gZWFjaE9mU2VyaWVzJDE7XG4gICAgZXhwb3J0cy5mb3JFYWNoU2VyaWVzID0gZWFjaFNlcmllcyQxO1xuICAgIGV4cG9ydHMuZm9yZXZlciA9IGZvcmV2ZXIkMTtcbiAgICBleHBvcnRzLmdyb3VwQnkgPSBncm91cEJ5O1xuICAgIGV4cG9ydHMuZ3JvdXBCeUxpbWl0ID0gZ3JvdXBCeUxpbWl0JDE7XG4gICAgZXhwb3J0cy5ncm91cEJ5U2VyaWVzID0gZ3JvdXBCeVNlcmllcztcbiAgICBleHBvcnRzLmluamVjdCA9IHJlZHVjZSQxO1xuICAgIGV4cG9ydHMubG9nID0gbG9nO1xuICAgIGV4cG9ydHMubWFwID0gbWFwJDE7XG4gICAgZXhwb3J0cy5tYXBMaW1pdCA9IG1hcExpbWl0JDE7XG4gICAgZXhwb3J0cy5tYXBTZXJpZXMgPSBtYXBTZXJpZXMkMTtcbiAgICBleHBvcnRzLm1hcFZhbHVlcyA9IG1hcFZhbHVlcztcbiAgICBleHBvcnRzLm1hcFZhbHVlc0xpbWl0ID0gbWFwVmFsdWVzTGltaXQkMTtcbiAgICBleHBvcnRzLm1hcFZhbHVlc1NlcmllcyA9IG1hcFZhbHVlc1NlcmllcztcbiAgICBleHBvcnRzLm1lbW9pemUgPSBtZW1vaXplO1xuICAgIGV4cG9ydHMubmV4dFRpY2sgPSBuZXh0VGljaztcbiAgICBleHBvcnRzLnBhcmFsbGVsID0gcGFyYWxsZWw7XG4gICAgZXhwb3J0cy5wYXJhbGxlbExpbWl0ID0gcGFyYWxsZWxMaW1pdDtcbiAgICBleHBvcnRzLnByaW9yaXR5UXVldWUgPSBwcmlvcml0eVF1ZXVlO1xuICAgIGV4cG9ydHMucXVldWUgPSBxdWV1ZTtcbiAgICBleHBvcnRzLnJhY2UgPSByYWNlJDE7XG4gICAgZXhwb3J0cy5yZWR1Y2UgPSByZWR1Y2UkMTtcbiAgICBleHBvcnRzLnJlZHVjZVJpZ2h0ID0gcmVkdWNlUmlnaHQ7XG4gICAgZXhwb3J0cy5yZWZsZWN0ID0gcmVmbGVjdDtcbiAgICBleHBvcnRzLnJlZmxlY3RBbGwgPSByZWZsZWN0QWxsO1xuICAgIGV4cG9ydHMucmVqZWN0ID0gcmVqZWN0JDE7XG4gICAgZXhwb3J0cy5yZWplY3RMaW1pdCA9IHJlamVjdExpbWl0JDE7XG4gICAgZXhwb3J0cy5yZWplY3RTZXJpZXMgPSByZWplY3RTZXJpZXMkMTtcbiAgICBleHBvcnRzLnJldHJ5ID0gcmV0cnk7XG4gICAgZXhwb3J0cy5yZXRyeWFibGUgPSByZXRyeWFibGU7XG4gICAgZXhwb3J0cy5zZWxlY3QgPSBmaWx0ZXIkMTtcbiAgICBleHBvcnRzLnNlbGVjdExpbWl0ID0gZmlsdGVyTGltaXQkMTtcbiAgICBleHBvcnRzLnNlbGVjdFNlcmllcyA9IGZpbHRlclNlcmllcyQxO1xuICAgIGV4cG9ydHMuc2VxID0gc2VxO1xuICAgIGV4cG9ydHMuc2VyaWVzID0gc2VyaWVzO1xuICAgIGV4cG9ydHMuc2V0SW1tZWRpYXRlID0gc2V0SW1tZWRpYXRlJDE7XG4gICAgZXhwb3J0cy5zb21lID0gc29tZSQxO1xuICAgIGV4cG9ydHMuc29tZUxpbWl0ID0gc29tZUxpbWl0JDE7XG4gICAgZXhwb3J0cy5zb21lU2VyaWVzID0gc29tZVNlcmllcyQxO1xuICAgIGV4cG9ydHMuc29ydEJ5ID0gc29ydEJ5JDE7XG4gICAgZXhwb3J0cy50aW1lb3V0ID0gdGltZW91dDtcbiAgICBleHBvcnRzLnRpbWVzID0gdGltZXM7XG4gICAgZXhwb3J0cy50aW1lc0xpbWl0ID0gdGltZXNMaW1pdDtcbiAgICBleHBvcnRzLnRpbWVzU2VyaWVzID0gdGltZXNTZXJpZXM7XG4gICAgZXhwb3J0cy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm07XG4gICAgZXhwb3J0cy50cnlFYWNoID0gdHJ5RWFjaCQxO1xuICAgIGV4cG9ydHMudW5tZW1vaXplID0gdW5tZW1vaXplO1xuICAgIGV4cG9ydHMudW50aWwgPSB1bnRpbDtcbiAgICBleHBvcnRzLndhdGVyZmFsbCA9IHdhdGVyZmFsbCQxO1xuICAgIGV4cG9ydHMud2hpbHN0ID0gd2hpbHN0JDE7XG4gICAgZXhwb3J0cy53cmFwU3luYyA9IGFzeW5jaWZ5O1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxufSkpO1xuIiwKICAgICJ2YXIgY29uc3RhbnRzID0gcmVxdWlyZSgnY29uc3RhbnRzJylcblxudmFyIG9yaWdDd2QgPSBwcm9jZXNzLmN3ZFxudmFyIGN3ZCA9IG51bGxcblxudmFyIHBsYXRmb3JtID0gcHJvY2Vzcy5lbnYuR1JBQ0VGVUxfRlNfUExBVEZPUk0gfHwgcHJvY2Vzcy5wbGF0Zm9ybVxuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uKCkge1xuICBpZiAoIWN3ZClcbiAgICBjd2QgPSBvcmlnQ3dkLmNhbGwocHJvY2VzcylcbiAgcmV0dXJuIGN3ZFxufVxudHJ5IHtcbiAgcHJvY2Vzcy5jd2QoKVxufSBjYXRjaCAoZXIpIHt9XG5cbi8vIFRoaXMgY2hlY2sgaXMgbmVlZGVkIHVudGlsIG5vZGUuanMgMTIgaXMgcmVxdWlyZWRcbmlmICh0eXBlb2YgcHJvY2Vzcy5jaGRpciA9PT0gJ2Z1bmN0aW9uJykge1xuICB2YXIgY2hkaXIgPSBwcm9jZXNzLmNoZGlyXG4gIHByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZCkge1xuICAgIGN3ZCA9IG51bGxcbiAgICBjaGRpci5jYWxsKHByb2Nlc3MsIGQpXG4gIH1cbiAgaWYgKE9iamVjdC5zZXRQcm90b3R5cGVPZikgT2JqZWN0LnNldFByb3RvdHlwZU9mKHByb2Nlc3MuY2hkaXIsIGNoZGlyKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGNoXG5cbmZ1bmN0aW9uIHBhdGNoIChmcykge1xuICAvLyAocmUtKWltcGxlbWVudCBzb21lIHRoaW5ncyB0aGF0IGFyZSBrbm93biBidXN0ZWQgb3IgbWlzc2luZy5cblxuICAvLyBsY2htb2QsIGJyb2tlbiBwcmlvciB0byAwLjYuMlxuICAvLyBiYWNrLXBvcnQgdGhlIGZpeCBoZXJlLlxuICBpZiAoY29uc3RhbnRzLmhhc093blByb3BlcnR5KCdPX1NZTUxJTksnKSAmJlxuICAgICAgcHJvY2Vzcy52ZXJzaW9uLm1hdGNoKC9edjBcXC42XFwuWzAtMl18XnYwXFwuNVxcLi8pKSB7XG4gICAgcGF0Y2hMY2htb2QoZnMpXG4gIH1cblxuICAvLyBsdXRpbWVzIGltcGxlbWVudGF0aW9uLCBvciBuby1vcFxuICBpZiAoIWZzLmx1dGltZXMpIHtcbiAgICBwYXRjaEx1dGltZXMoZnMpXG4gIH1cblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vaXNhYWNzL25vZGUtZ3JhY2VmdWwtZnMvaXNzdWVzLzRcbiAgLy8gQ2hvd24gc2hvdWxkIG5vdCBmYWlsIG9uIGVpbnZhbCBvciBlcGVybSBpZiBub24tcm9vdC5cbiAgLy8gSXQgc2hvdWxkIG5vdCBmYWlsIG9uIGVub3N5cyBldmVyLCBhcyB0aGlzIGp1c3QgaW5kaWNhdGVzXG4gIC8vIHRoYXQgYSBmcyBkb2Vzbid0IHN1cHBvcnQgdGhlIGludGVuZGVkIG9wZXJhdGlvbi5cblxuICBmcy5jaG93biA9IGNob3duRml4KGZzLmNob3duKVxuICBmcy5mY2hvd24gPSBjaG93bkZpeChmcy5mY2hvd24pXG4gIGZzLmxjaG93biA9IGNob3duRml4KGZzLmxjaG93bilcblxuICBmcy5jaG1vZCA9IGNobW9kRml4KGZzLmNobW9kKVxuICBmcy5mY2htb2QgPSBjaG1vZEZpeChmcy5mY2htb2QpXG4gIGZzLmxjaG1vZCA9IGNobW9kRml4KGZzLmxjaG1vZClcblxuICBmcy5jaG93blN5bmMgPSBjaG93bkZpeFN5bmMoZnMuY2hvd25TeW5jKVxuICBmcy5mY2hvd25TeW5jID0gY2hvd25GaXhTeW5jKGZzLmZjaG93blN5bmMpXG4gIGZzLmxjaG93blN5bmMgPSBjaG93bkZpeFN5bmMoZnMubGNob3duU3luYylcblxuICBmcy5jaG1vZFN5bmMgPSBjaG1vZEZpeFN5bmMoZnMuY2htb2RTeW5jKVxuICBmcy5mY2htb2RTeW5jID0gY2htb2RGaXhTeW5jKGZzLmZjaG1vZFN5bmMpXG4gIGZzLmxjaG1vZFN5bmMgPSBjaG1vZEZpeFN5bmMoZnMubGNobW9kU3luYylcblxuICBmcy5zdGF0ID0gc3RhdEZpeChmcy5zdGF0KVxuICBmcy5mc3RhdCA9IHN0YXRGaXgoZnMuZnN0YXQpXG4gIGZzLmxzdGF0ID0gc3RhdEZpeChmcy5sc3RhdClcblxuICBmcy5zdGF0U3luYyA9IHN0YXRGaXhTeW5jKGZzLnN0YXRTeW5jKVxuICBmcy5mc3RhdFN5bmMgPSBzdGF0Rml4U3luYyhmcy5mc3RhdFN5bmMpXG4gIGZzLmxzdGF0U3luYyA9IHN0YXRGaXhTeW5jKGZzLmxzdGF0U3luYylcblxuICAvLyBpZiBsY2htb2QvbGNob3duIGRvIG5vdCBleGlzdCwgdGhlbiBtYWtlIHRoZW0gbm8tb3BzXG4gIGlmIChmcy5jaG1vZCAmJiAhZnMubGNobW9kKSB7XG4gICAgZnMubGNobW9kID0gZnVuY3Rpb24gKHBhdGgsIG1vZGUsIGNiKSB7XG4gICAgICBpZiAoY2IpIHByb2Nlc3MubmV4dFRpY2soY2IpXG4gICAgfVxuICAgIGZzLmxjaG1vZFN5bmMgPSBmdW5jdGlvbiAoKSB7fVxuICB9XG4gIGlmIChmcy5jaG93biAmJiAhZnMubGNob3duKSB7XG4gICAgZnMubGNob3duID0gZnVuY3Rpb24gKHBhdGgsIHVpZCwgZ2lkLCBjYikge1xuICAgICAgaWYgKGNiKSBwcm9jZXNzLm5leHRUaWNrKGNiKVxuICAgIH1cbiAgICBmcy5sY2hvd25TeW5jID0gZnVuY3Rpb24gKCkge31cbiAgfVxuXG4gIC8vIG9uIFdpbmRvd3MsIEEvViBzb2Z0d2FyZSBjYW4gbG9jayB0aGUgZGlyZWN0b3J5LCBjYXVzaW5nIHRoaXNcbiAgLy8gdG8gZmFpbCB3aXRoIGFuIEVBQ0NFUyBvciBFUEVSTSBpZiB0aGUgZGlyZWN0b3J5IGNvbnRhaW5zIG5ld2x5XG4gIC8vIGNyZWF0ZWQgZmlsZXMuICBUcnkgYWdhaW4gb24gZmFpbHVyZSwgZm9yIHVwIHRvIDYwIHNlY29uZHMuXG5cbiAgLy8gU2V0IHRoZSB0aW1lb3V0IHRoaXMgbG9uZyBiZWNhdXNlIHNvbWUgV2luZG93cyBBbnRpLVZpcnVzLCBzdWNoIGFzIFBhcml0eVxuICAvLyBiaXQ5LCBtYXkgbG9jayBmaWxlcyBmb3IgdXAgdG8gYSBtaW51dGUsIGNhdXNpbmcgbnBtIHBhY2thZ2UgaW5zdGFsbFxuICAvLyBmYWlsdXJlcy4gQWxzbywgdGFrZSBjYXJlIHRvIHlpZWxkIHRoZSBzY2hlZHVsZXIuIFdpbmRvd3Mgc2NoZWR1bGluZyBnaXZlc1xuICAvLyBDUFUgdG8gYSBidXN5IGxvb3BpbmcgcHJvY2Vzcywgd2hpY2ggY2FuIGNhdXNlIHRoZSBwcm9ncmFtIGNhdXNpbmcgdGhlIGxvY2tcbiAgLy8gY29udGVudGlvbiB0byBiZSBzdGFydmVkIG9mIENQVSBieSBub2RlLCBzbyB0aGUgY29udGVudGlvbiBkb2Vzbid0IHJlc29sdmUuXG4gIGlmIChwbGF0Zm9ybSA9PT0gXCJ3aW4zMlwiKSB7XG4gICAgZnMucmVuYW1lID0gdHlwZW9mIGZzLnJlbmFtZSAhPT0gJ2Z1bmN0aW9uJyA/IGZzLnJlbmFtZVxuICAgIDogKGZ1bmN0aW9uIChmcyRyZW5hbWUpIHtcbiAgICAgIGZ1bmN0aW9uIHJlbmFtZSAoZnJvbSwgdG8sIGNiKSB7XG4gICAgICAgIHZhciBzdGFydCA9IERhdGUubm93KClcbiAgICAgICAgdmFyIGJhY2tvZmYgPSAwO1xuICAgICAgICBmcyRyZW5hbWUoZnJvbSwgdG8sIGZ1bmN0aW9uIENCIChlcikge1xuICAgICAgICAgIGlmIChlclxuICAgICAgICAgICAgICAmJiAoZXIuY29kZSA9PT0gXCJFQUNDRVNcIiB8fCBlci5jb2RlID09PSBcIkVQRVJNXCIgfHwgZXIuY29kZSA9PT0gXCJFQlVTWVwiKVxuICAgICAgICAgICAgICAmJiBEYXRlLm5vdygpIC0gc3RhcnQgPCA2MDAwMCkge1xuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgZnMuc3RhdCh0bywgZnVuY3Rpb24gKHN0YXRlciwgc3QpIHtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdGVyICYmIHN0YXRlci5jb2RlID09PSBcIkVOT0VOVFwiKVxuICAgICAgICAgICAgICAgICAgZnMkcmVuYW1lKGZyb20sIHRvLCBDQik7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgY2IoZXIpXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9LCBiYWNrb2ZmKVxuICAgICAgICAgICAgaWYgKGJhY2tvZmYgPCAxMDApXG4gICAgICAgICAgICAgIGJhY2tvZmYgKz0gMTA7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjYikgY2IoZXIpXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSBPYmplY3Quc2V0UHJvdG90eXBlT2YocmVuYW1lLCBmcyRyZW5hbWUpXG4gICAgICByZXR1cm4gcmVuYW1lXG4gICAgfSkoZnMucmVuYW1lKVxuICB9XG5cbiAgLy8gaWYgcmVhZCgpIHJldHVybnMgRUFHQUlOLCB0aGVuIGp1c3QgdHJ5IGl0IGFnYWluLlxuICBmcy5yZWFkID0gdHlwZW9mIGZzLnJlYWQgIT09ICdmdW5jdGlvbicgPyBmcy5yZWFkXG4gIDogKGZ1bmN0aW9uIChmcyRyZWFkKSB7XG4gICAgZnVuY3Rpb24gcmVhZCAoZmQsIGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgsIHBvc2l0aW9uLCBjYWxsYmFja18pIHtcbiAgICAgIHZhciBjYWxsYmFja1xuICAgICAgaWYgKGNhbGxiYWNrXyAmJiB0eXBlb2YgY2FsbGJhY2tfID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZhciBlYWdDb3VudGVyID0gMFxuICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uIChlciwgXywgX18pIHtcbiAgICAgICAgICBpZiAoZXIgJiYgZXIuY29kZSA9PT0gJ0VBR0FJTicgJiYgZWFnQ291bnRlciA8IDEwKSB7XG4gICAgICAgICAgICBlYWdDb3VudGVyICsrXG4gICAgICAgICAgICByZXR1cm4gZnMkcmVhZC5jYWxsKGZzLCBmZCwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24sIGNhbGxiYWNrKVxuICAgICAgICAgIH1cbiAgICAgICAgICBjYWxsYmFja18uYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZnMkcmVhZC5jYWxsKGZzLCBmZCwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24sIGNhbGxiYWNrKVxuICAgIH1cblxuICAgIC8vIFRoaXMgZW5zdXJlcyBgdXRpbC5wcm9taXNpZnlgIHdvcmtzIGFzIGl0IGRvZXMgZm9yIG5hdGl2ZSBgZnMucmVhZGAuXG4gICAgaWYgKE9iamVjdC5zZXRQcm90b3R5cGVPZikgT2JqZWN0LnNldFByb3RvdHlwZU9mKHJlYWQsIGZzJHJlYWQpXG4gICAgcmV0dXJuIHJlYWRcbiAgfSkoZnMucmVhZClcblxuICBmcy5yZWFkU3luYyA9IHR5cGVvZiBmcy5yZWFkU3luYyAhPT0gJ2Z1bmN0aW9uJyA/IGZzLnJlYWRTeW5jXG4gIDogKGZ1bmN0aW9uIChmcyRyZWFkU3luYykgeyByZXR1cm4gZnVuY3Rpb24gKGZkLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbikge1xuICAgIHZhciBlYWdDb3VudGVyID0gMFxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gZnMkcmVhZFN5bmMuY2FsbChmcywgZmQsIGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgsIHBvc2l0aW9uKVxuICAgICAgfSBjYXRjaCAoZXIpIHtcbiAgICAgICAgaWYgKGVyLmNvZGUgPT09ICdFQUdBSU4nICYmIGVhZ0NvdW50ZXIgPCAxMCkge1xuICAgICAgICAgIGVhZ0NvdW50ZXIgKytcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIHRocm93IGVyXG4gICAgICB9XG4gICAgfVxuICB9fSkoZnMucmVhZFN5bmMpXG5cbiAgZnVuY3Rpb24gcGF0Y2hMY2htb2QgKGZzKSB7XG4gICAgZnMubGNobW9kID0gZnVuY3Rpb24gKHBhdGgsIG1vZGUsIGNhbGxiYWNrKSB7XG4gICAgICBmcy5vcGVuKCBwYXRoXG4gICAgICAgICAgICAgLCBjb25zdGFudHMuT19XUk9OTFkgfCBjb25zdGFudHMuT19TWU1MSU5LXG4gICAgICAgICAgICAgLCBtb2RlXG4gICAgICAgICAgICAgLCBmdW5jdGlvbiAoZXJyLCBmZCkge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgaWYgKGNhbGxiYWNrKSBjYWxsYmFjayhlcnIpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgLy8gcHJlZmVyIHRvIHJldHVybiB0aGUgY2htb2QgZXJyb3IsIGlmIG9uZSBvY2N1cnMsXG4gICAgICAgIC8vIGJ1dCBzdGlsbCB0cnkgdG8gY2xvc2UsIGFuZCByZXBvcnQgY2xvc2luZyBlcnJvcnMgaWYgdGhleSBvY2N1ci5cbiAgICAgICAgZnMuZmNobW9kKGZkLCBtb2RlLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgZnMuY2xvc2UoZmQsIGZ1bmN0aW9uKGVycjIpIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjaykgY2FsbGJhY2soZXJyIHx8IGVycjIpXG4gICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgZnMubGNobW9kU3luYyA9IGZ1bmN0aW9uIChwYXRoLCBtb2RlKSB7XG4gICAgICB2YXIgZmQgPSBmcy5vcGVuU3luYyhwYXRoLCBjb25zdGFudHMuT19XUk9OTFkgfCBjb25zdGFudHMuT19TWU1MSU5LLCBtb2RlKVxuXG4gICAgICAvLyBwcmVmZXIgdG8gcmV0dXJuIHRoZSBjaG1vZCBlcnJvciwgaWYgb25lIG9jY3VycyxcbiAgICAgIC8vIGJ1dCBzdGlsbCB0cnkgdG8gY2xvc2UsIGFuZCByZXBvcnQgY2xvc2luZyBlcnJvcnMgaWYgdGhleSBvY2N1ci5cbiAgICAgIHZhciB0aHJldyA9IHRydWVcbiAgICAgIHZhciByZXRcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldCA9IGZzLmZjaG1vZFN5bmMoZmQsIG1vZGUpXG4gICAgICAgIHRocmV3ID0gZmFsc2VcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmICh0aHJldykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmcy5jbG9zZVN5bmMoZmQpXG4gICAgICAgICAgfSBjYXRjaCAoZXIpIHt9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZnMuY2xvc2VTeW5jKGZkKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmV0XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcGF0Y2hMdXRpbWVzIChmcykge1xuICAgIGlmIChjb25zdGFudHMuaGFzT3duUHJvcGVydHkoXCJPX1NZTUxJTktcIikgJiYgZnMuZnV0aW1lcykge1xuICAgICAgZnMubHV0aW1lcyA9IGZ1bmN0aW9uIChwYXRoLCBhdCwgbXQsIGNiKSB7XG4gICAgICAgIGZzLm9wZW4ocGF0aCwgY29uc3RhbnRzLk9fU1lNTElOSywgZnVuY3Rpb24gKGVyLCBmZCkge1xuICAgICAgICAgIGlmIChlcikge1xuICAgICAgICAgICAgaWYgKGNiKSBjYihlcilcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgICBmcy5mdXRpbWVzKGZkLCBhdCwgbXQsIGZ1bmN0aW9uIChlcikge1xuICAgICAgICAgICAgZnMuY2xvc2UoZmQsIGZ1bmN0aW9uIChlcjIpIHtcbiAgICAgICAgICAgICAgaWYgKGNiKSBjYihlciB8fCBlcjIpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGZzLmx1dGltZXNTeW5jID0gZnVuY3Rpb24gKHBhdGgsIGF0LCBtdCkge1xuICAgICAgICB2YXIgZmQgPSBmcy5vcGVuU3luYyhwYXRoLCBjb25zdGFudHMuT19TWU1MSU5LKVxuICAgICAgICB2YXIgcmV0XG4gICAgICAgIHZhciB0aHJldyA9IHRydWVcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXQgPSBmcy5mdXRpbWVzU3luYyhmZCwgYXQsIG10KVxuICAgICAgICAgIHRocmV3ID0gZmFsc2VcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBpZiAodGhyZXcpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGZzLmNsb3NlU3luYyhmZClcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVyKSB7fVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmcy5jbG9zZVN5bmMoZmQpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXRcbiAgICAgIH1cblxuICAgIH0gZWxzZSBpZiAoZnMuZnV0aW1lcykge1xuICAgICAgZnMubHV0aW1lcyA9IGZ1bmN0aW9uIChfYSwgX2IsIF9jLCBjYikgeyBpZiAoY2IpIHByb2Nlc3MubmV4dFRpY2soY2IpIH1cbiAgICAgIGZzLmx1dGltZXNTeW5jID0gZnVuY3Rpb24gKCkge31cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjaG1vZEZpeCAob3JpZykge1xuICAgIGlmICghb3JpZykgcmV0dXJuIG9yaWdcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwgbW9kZSwgY2IpIHtcbiAgICAgIHJldHVybiBvcmlnLmNhbGwoZnMsIHRhcmdldCwgbW9kZSwgZnVuY3Rpb24gKGVyKSB7XG4gICAgICAgIGlmIChjaG93bkVyT2soZXIpKSBlciA9IG51bGxcbiAgICAgICAgaWYgKGNiKSBjYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNobW9kRml4U3luYyAob3JpZykge1xuICAgIGlmICghb3JpZykgcmV0dXJuIG9yaWdcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwgbW9kZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG9yaWcuY2FsbChmcywgdGFyZ2V0LCBtb2RlKVxuICAgICAgfSBjYXRjaCAoZXIpIHtcbiAgICAgICAgaWYgKCFjaG93bkVyT2soZXIpKSB0aHJvdyBlclxuICAgICAgfVxuICAgIH1cbiAgfVxuXG5cbiAgZnVuY3Rpb24gY2hvd25GaXggKG9yaWcpIHtcbiAgICBpZiAoIW9yaWcpIHJldHVybiBvcmlnXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIHVpZCwgZ2lkLCBjYikge1xuICAgICAgcmV0dXJuIG9yaWcuY2FsbChmcywgdGFyZ2V0LCB1aWQsIGdpZCwgZnVuY3Rpb24gKGVyKSB7XG4gICAgICAgIGlmIChjaG93bkVyT2soZXIpKSBlciA9IG51bGxcbiAgICAgICAgaWYgKGNiKSBjYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNob3duRml4U3luYyAob3JpZykge1xuICAgIGlmICghb3JpZykgcmV0dXJuIG9yaWdcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwgdWlkLCBnaWQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBvcmlnLmNhbGwoZnMsIHRhcmdldCwgdWlkLCBnaWQpXG4gICAgICB9IGNhdGNoIChlcikge1xuICAgICAgICBpZiAoIWNob3duRXJPayhlcikpIHRocm93IGVyXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc3RhdEZpeCAob3JpZykge1xuICAgIGlmICghb3JpZykgcmV0dXJuIG9yaWdcbiAgICAvLyBPbGRlciB2ZXJzaW9ucyBvZiBOb2RlIGVycm9uZW91c2x5IHJldHVybmVkIHNpZ25lZCBpbnRlZ2VycyBmb3JcbiAgICAvLyB1aWQgKyBnaWQuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIG9wdGlvbnMsIGNiKSB7XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY2IgPSBvcHRpb25zXG4gICAgICAgIG9wdGlvbnMgPSBudWxsXG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBjYWxsYmFjayAoZXIsIHN0YXRzKSB7XG4gICAgICAgIGlmIChzdGF0cykge1xuICAgICAgICAgIGlmIChzdGF0cy51aWQgPCAwKSBzdGF0cy51aWQgKz0gMHgxMDAwMDAwMDBcbiAgICAgICAgICBpZiAoc3RhdHMuZ2lkIDwgMCkgc3RhdHMuZ2lkICs9IDB4MTAwMDAwMDAwXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNiKSBjYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICB9XG4gICAgICByZXR1cm4gb3B0aW9ucyA/IG9yaWcuY2FsbChmcywgdGFyZ2V0LCBvcHRpb25zLCBjYWxsYmFjaylcbiAgICAgICAgOiBvcmlnLmNhbGwoZnMsIHRhcmdldCwgY2FsbGJhY2spXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc3RhdEZpeFN5bmMgKG9yaWcpIHtcbiAgICBpZiAoIW9yaWcpIHJldHVybiBvcmlnXG4gICAgLy8gT2xkZXIgdmVyc2lvbnMgb2YgTm9kZSBlcnJvbmVvdXNseSByZXR1cm5lZCBzaWduZWQgaW50ZWdlcnMgZm9yXG4gICAgLy8gdWlkICsgZ2lkLlxuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBvcHRpb25zKSB7XG4gICAgICB2YXIgc3RhdHMgPSBvcHRpb25zID8gb3JpZy5jYWxsKGZzLCB0YXJnZXQsIG9wdGlvbnMpXG4gICAgICAgIDogb3JpZy5jYWxsKGZzLCB0YXJnZXQpXG4gICAgICBpZiAoc3RhdHMpIHtcbiAgICAgICAgaWYgKHN0YXRzLnVpZCA8IDApIHN0YXRzLnVpZCArPSAweDEwMDAwMDAwMFxuICAgICAgICBpZiAoc3RhdHMuZ2lkIDwgMCkgc3RhdHMuZ2lkICs9IDB4MTAwMDAwMDAwXG4gICAgICB9XG4gICAgICByZXR1cm4gc3RhdHM7XG4gICAgfVxuICB9XG5cbiAgLy8gRU5PU1lTIG1lYW5zIHRoYXQgdGhlIGZzIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgb3AuIEp1c3QgaWdub3JlXG4gIC8vIHRoYXQsIGJlY2F1c2UgaXQgZG9lc24ndCBtYXR0ZXIuXG4gIC8vXG4gIC8vIGlmIHRoZXJlJ3Mgbm8gZ2V0dWlkLCBvciBpZiBnZXR1aWQoKSBpcyBzb21ldGhpbmcgb3RoZXJcbiAgLy8gdGhhbiAwLCBhbmQgdGhlIGVycm9yIGlzIEVJTlZBTCBvciBFUEVSTSwgdGhlbiBqdXN0IGlnbm9yZVxuICAvLyBpdC5cbiAgLy9cbiAgLy8gVGhpcyBzcGVjaWZpYyBjYXNlIGlzIGEgc2lsZW50IGZhaWx1cmUgaW4gY3AsIGluc3RhbGwsIHRhcixcbiAgLy8gYW5kIG1vc3Qgb3RoZXIgdW5peCB0b29scyB0aGF0IG1hbmFnZSBwZXJtaXNzaW9ucy5cbiAgLy9cbiAgLy8gV2hlbiBydW5uaW5nIGFzIHJvb3QsIG9yIGlmIG90aGVyIHR5cGVzIG9mIGVycm9ycyBhcmVcbiAgLy8gZW5jb3VudGVyZWQsIHRoZW4gaXQncyBzdHJpY3QuXG4gIGZ1bmN0aW9uIGNob3duRXJPayAoZXIpIHtcbiAgICBpZiAoIWVyKVxuICAgICAgcmV0dXJuIHRydWVcblxuICAgIGlmIChlci5jb2RlID09PSBcIkVOT1NZU1wiKVxuICAgICAgcmV0dXJuIHRydWVcblxuICAgIHZhciBub25yb290ID0gIXByb2Nlc3MuZ2V0dWlkIHx8IHByb2Nlc3MuZ2V0dWlkKCkgIT09IDBcbiAgICBpZiAobm9ucm9vdCkge1xuICAgICAgaWYgKGVyLmNvZGUgPT09IFwiRUlOVkFMXCIgfHwgZXIuY29kZSA9PT0gXCJFUEVSTVwiKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG4iLAogICAgInZhciBTdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0nKS5TdHJlYW1cblxubW9kdWxlLmV4cG9ydHMgPSBsZWdhY3lcblxuZnVuY3Rpb24gbGVnYWN5IChmcykge1xuICByZXR1cm4ge1xuICAgIFJlYWRTdHJlYW06IFJlYWRTdHJlYW0sXG4gICAgV3JpdGVTdHJlYW06IFdyaXRlU3RyZWFtXG4gIH1cblxuICBmdW5jdGlvbiBSZWFkU3RyZWFtIChwYXRoLCBvcHRpb25zKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlYWRTdHJlYW0pKSByZXR1cm4gbmV3IFJlYWRTdHJlYW0ocGF0aCwgb3B0aW9ucyk7XG5cbiAgICBTdHJlYW0uY2FsbCh0aGlzKTtcblxuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHRoaXMucGF0aCA9IHBhdGg7XG4gICAgdGhpcy5mZCA9IG51bGw7XG4gICAgdGhpcy5yZWFkYWJsZSA9IHRydWU7XG4gICAgdGhpcy5wYXVzZWQgPSBmYWxzZTtcblxuICAgIHRoaXMuZmxhZ3MgPSAncic7XG4gICAgdGhpcy5tb2RlID0gNDM4OyAvKj0wNjY2Ki9cbiAgICB0aGlzLmJ1ZmZlclNpemUgPSA2NCAqIDEwMjQ7XG5cbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIC8vIE1peGluIG9wdGlvbnMgaW50byB0aGlzXG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvcHRpb25zKTtcbiAgICBmb3IgKHZhciBpbmRleCA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaW5kZXhdO1xuICAgICAgdGhpc1trZXldID0gb3B0aW9uc1trZXldO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmVuY29kaW5nKSB0aGlzLnNldEVuY29kaW5nKHRoaXMuZW5jb2RpbmcpO1xuXG4gICAgaWYgKHRoaXMuc3RhcnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCdudW1iZXInICE9PSB0eXBlb2YgdGhpcy5zdGFydCkge1xuICAgICAgICB0aHJvdyBUeXBlRXJyb3IoJ3N0YXJ0IG11c3QgYmUgYSBOdW1iZXInKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuZW5kID0gSW5maW5pdHk7XG4gICAgICB9IGVsc2UgaWYgKCdudW1iZXInICE9PSB0eXBlb2YgdGhpcy5lbmQpIHtcbiAgICAgICAgdGhyb3cgVHlwZUVycm9yKCdlbmQgbXVzdCBiZSBhIE51bWJlcicpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5zdGFydCA+IHRoaXMuZW5kKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignc3RhcnQgbXVzdCBiZSA8PSBlbmQnKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5wb3MgPSB0aGlzLnN0YXJ0O1xuICAgIH1cblxuICAgIGlmICh0aGlzLmZkICE9PSBudWxsKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uKCkge1xuICAgICAgICBzZWxmLl9yZWFkKCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmcy5vcGVuKHRoaXMucGF0aCwgdGhpcy5mbGFncywgdGhpcy5tb2RlLCBmdW5jdGlvbiAoZXJyLCBmZCkge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICBzZWxmLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgICAgICAgc2VsZi5yZWFkYWJsZSA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHNlbGYuZmQgPSBmZDtcbiAgICAgIHNlbGYuZW1pdCgnb3BlbicsIGZkKTtcbiAgICAgIHNlbGYuX3JlYWQoKTtcbiAgICB9KVxuICB9XG5cbiAgZnVuY3Rpb24gV3JpdGVTdHJlYW0gKHBhdGgsIG9wdGlvbnMpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgV3JpdGVTdHJlYW0pKSByZXR1cm4gbmV3IFdyaXRlU3RyZWFtKHBhdGgsIG9wdGlvbnMpO1xuXG4gICAgU3RyZWFtLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnBhdGggPSBwYXRoO1xuICAgIHRoaXMuZmQgPSBudWxsO1xuICAgIHRoaXMud3JpdGFibGUgPSB0cnVlO1xuXG4gICAgdGhpcy5mbGFncyA9ICd3JztcbiAgICB0aGlzLmVuY29kaW5nID0gJ2JpbmFyeSc7XG4gICAgdGhpcy5tb2RlID0gNDM4OyAvKj0wNjY2Ki9cbiAgICB0aGlzLmJ5dGVzV3JpdHRlbiA9IDA7XG5cbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIC8vIE1peGluIG9wdGlvbnMgaW50byB0aGlzXG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvcHRpb25zKTtcbiAgICBmb3IgKHZhciBpbmRleCA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaW5kZXhdO1xuICAgICAgdGhpc1trZXldID0gb3B0aW9uc1trZXldO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnN0YXJ0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICgnbnVtYmVyJyAhPT0gdHlwZW9mIHRoaXMuc3RhcnQpIHtcbiAgICAgICAgdGhyb3cgVHlwZUVycm9yKCdzdGFydCBtdXN0IGJlIGEgTnVtYmVyJyk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5zdGFydCA8IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzdGFydCBtdXN0IGJlID49IHplcm8nKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5wb3MgPSB0aGlzLnN0YXJ0O1xuICAgIH1cblxuICAgIHRoaXMuYnVzeSA9IGZhbHNlO1xuICAgIHRoaXMuX3F1ZXVlID0gW107XG5cbiAgICBpZiAodGhpcy5mZCA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5fb3BlbiA9IGZzLm9wZW47XG4gICAgICB0aGlzLl9xdWV1ZS5wdXNoKFt0aGlzLl9vcGVuLCB0aGlzLnBhdGgsIHRoaXMuZmxhZ3MsIHRoaXMubW9kZSwgdW5kZWZpbmVkXSk7XG4gICAgICB0aGlzLmZsdXNoKCk7XG4gICAgfVxuICB9XG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lXG5cbnZhciBnZXRQcm90b3R5cGVPZiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiBvYmouX19wcm90b19fXG59XG5cbmZ1bmN0aW9uIGNsb25lIChvYmopIHtcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqICE9PSAnb2JqZWN0JylcbiAgICByZXR1cm4gb2JqXG5cbiAgaWYgKG9iaiBpbnN0YW5jZW9mIE9iamVjdClcbiAgICB2YXIgY29weSA9IHsgX19wcm90b19fOiBnZXRQcm90b3R5cGVPZihvYmopIH1cbiAgZWxzZVxuICAgIHZhciBjb3B5ID0gT2JqZWN0LmNyZWF0ZShudWxsKVxuXG4gIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvcHksIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIGtleSkpXG4gIH0pXG5cbiAgcmV0dXJuIGNvcHlcbn1cbiIsCiAgICAidmFyIGZzID0gcmVxdWlyZSgnZnMnKVxudmFyIHBvbHlmaWxscyA9IHJlcXVpcmUoJy4vcG9seWZpbGxzLmpzJylcbnZhciBsZWdhY3kgPSByZXF1aXJlKCcuL2xlZ2FjeS1zdHJlYW1zLmpzJylcbnZhciBjbG9uZSA9IHJlcXVpcmUoJy4vY2xvbmUuanMnKVxuXG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKVxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAtIG5vZGUgMC54IHBvbHlmaWxsICovXG52YXIgZ3JhY2VmdWxRdWV1ZVxudmFyIHByZXZpb3VzU3ltYm9sXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlIC0gbm9kZSAwLnggcG9seWZpbGwgKi9cbmlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuZm9yID09PSAnZnVuY3Rpb24nKSB7XG4gIGdyYWNlZnVsUXVldWUgPSBTeW1ib2wuZm9yKCdncmFjZWZ1bC1mcy5xdWV1ZScpXG4gIC8vIFRoaXMgaXMgdXNlZCBpbiB0ZXN0aW5nIGJ5IGZ1dHVyZSB2ZXJzaW9uc1xuICBwcmV2aW91c1N5bWJvbCA9IFN5bWJvbC5mb3IoJ2dyYWNlZnVsLWZzLnByZXZpb3VzJylcbn0gZWxzZSB7XG4gIGdyYWNlZnVsUXVldWUgPSAnX19fZ3JhY2VmdWwtZnMucXVldWUnXG4gIHByZXZpb3VzU3ltYm9sID0gJ19fX2dyYWNlZnVsLWZzLnByZXZpb3VzJ1xufVxuXG5mdW5jdGlvbiBub29wICgpIHt9XG5cbmZ1bmN0aW9uIHB1Ymxpc2hRdWV1ZShjb250ZXh0LCBxdWV1ZSkge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29udGV4dCwgZ3JhY2VmdWxRdWV1ZSwge1xuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gcXVldWVcbiAgICB9XG4gIH0pXG59XG5cbnZhciBkZWJ1ZyA9IG5vb3BcbmlmICh1dGlsLmRlYnVnbG9nKVxuICBkZWJ1ZyA9IHV0aWwuZGVidWdsb2coJ2dmczQnKVxuZWxzZSBpZiAoL1xcYmdmczRcXGIvaS50ZXN0KHByb2Nlc3MuZW52Lk5PREVfREVCVUcgfHwgJycpKVxuICBkZWJ1ZyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBtID0gdXRpbC5mb3JtYXQuYXBwbHkodXRpbCwgYXJndW1lbnRzKVxuICAgIG0gPSAnR0ZTNDogJyArIG0uc3BsaXQoL1xcbi8pLmpvaW4oJ1xcbkdGUzQ6ICcpXG4gICAgY29uc29sZS5lcnJvcihtKVxuICB9XG5cbi8vIE9uY2UgdGltZSBpbml0aWFsaXphdGlvblxuaWYgKCFmc1tncmFjZWZ1bFF1ZXVlXSkge1xuICAvLyBUaGlzIHF1ZXVlIGNhbiBiZSBzaGFyZWQgYnkgbXVsdGlwbGUgbG9hZGVkIGluc3RhbmNlc1xuICB2YXIgcXVldWUgPSBnbG9iYWxbZ3JhY2VmdWxRdWV1ZV0gfHwgW11cbiAgcHVibGlzaFF1ZXVlKGZzLCBxdWV1ZSlcblxuICAvLyBQYXRjaCBmcy5jbG9zZS9jbG9zZVN5bmMgdG8gc2hhcmVkIHF1ZXVlIHZlcnNpb24sIGJlY2F1c2Ugd2UgbmVlZFxuICAvLyB0byByZXRyeSgpIHdoZW5ldmVyIGEgY2xvc2UgaGFwcGVucyAqYW55d2hlcmUqIGluIHRoZSBwcm9ncmFtLlxuICAvLyBUaGlzIGlzIGVzc2VudGlhbCB3aGVuIG11bHRpcGxlIGdyYWNlZnVsLWZzIGluc3RhbmNlcyBhcmVcbiAgLy8gaW4gcGxheSBhdCB0aGUgc2FtZSB0aW1lLlxuICBmcy5jbG9zZSA9IChmdW5jdGlvbiAoZnMkY2xvc2UpIHtcbiAgICBmdW5jdGlvbiBjbG9zZSAoZmQsIGNiKSB7XG4gICAgICByZXR1cm4gZnMkY2xvc2UuY2FsbChmcywgZmQsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiB1c2VzIHRoZSBncmFjZWZ1bC1mcyBzaGFyZWQgcXVldWVcbiAgICAgICAgaWYgKCFlcnIpIHtcbiAgICAgICAgICByZXNldFF1ZXVlKClcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgY2IuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY2xvc2UsIHByZXZpb3VzU3ltYm9sLCB7XG4gICAgICB2YWx1ZTogZnMkY2xvc2VcbiAgICB9KVxuICAgIHJldHVybiBjbG9zZVxuICB9KShmcy5jbG9zZSlcblxuICBmcy5jbG9zZVN5bmMgPSAoZnVuY3Rpb24gKGZzJGNsb3NlU3luYykge1xuICAgIGZ1bmN0aW9uIGNsb3NlU3luYyAoZmQpIHtcbiAgICAgIC8vIFRoaXMgZnVuY3Rpb24gdXNlcyB0aGUgZ3JhY2VmdWwtZnMgc2hhcmVkIHF1ZXVlXG4gICAgICBmcyRjbG9zZVN5bmMuYXBwbHkoZnMsIGFyZ3VtZW50cylcbiAgICAgIHJlc2V0UXVldWUoKVxuICAgIH1cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjbG9zZVN5bmMsIHByZXZpb3VzU3ltYm9sLCB7XG4gICAgICB2YWx1ZTogZnMkY2xvc2VTeW5jXG4gICAgfSlcbiAgICByZXR1cm4gY2xvc2VTeW5jXG4gIH0pKGZzLmNsb3NlU3luYylcblxuICBpZiAoL1xcYmdmczRcXGIvaS50ZXN0KHByb2Nlc3MuZW52Lk5PREVfREVCVUcgfHwgJycpKSB7XG4gICAgcHJvY2Vzcy5vbignZXhpdCcsIGZ1bmN0aW9uKCkge1xuICAgICAgZGVidWcoZnNbZ3JhY2VmdWxRdWV1ZV0pXG4gICAgICByZXF1aXJlKCdhc3NlcnQnKS5lcXVhbChmc1tncmFjZWZ1bFF1ZXVlXS5sZW5ndGgsIDApXG4gICAgfSlcbiAgfVxufVxuXG5pZiAoIWdsb2JhbFtncmFjZWZ1bFF1ZXVlXSkge1xuICBwdWJsaXNoUXVldWUoZ2xvYmFsLCBmc1tncmFjZWZ1bFF1ZXVlXSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0Y2goY2xvbmUoZnMpKVxuaWYgKHByb2Nlc3MuZW52LlRFU1RfR1JBQ0VGVUxfRlNfR0xPQkFMX1BBVENIICYmICFmcy5fX3BhdGNoZWQpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IHBhdGNoKGZzKVxuICAgIGZzLl9fcGF0Y2hlZCA9IHRydWU7XG59XG5cbmZ1bmN0aW9uIHBhdGNoIChmcykge1xuICAvLyBFdmVyeXRoaW5nIHRoYXQgcmVmZXJlbmNlcyB0aGUgb3BlbigpIGZ1bmN0aW9uIG5lZWRzIHRvIGJlIGluIGhlcmVcbiAgcG9seWZpbGxzKGZzKVxuICBmcy5ncmFjZWZ1bGlmeSA9IHBhdGNoXG5cbiAgZnMuY3JlYXRlUmVhZFN0cmVhbSA9IGNyZWF0ZVJlYWRTdHJlYW1cbiAgZnMuY3JlYXRlV3JpdGVTdHJlYW0gPSBjcmVhdGVXcml0ZVN0cmVhbVxuICB2YXIgZnMkcmVhZEZpbGUgPSBmcy5yZWFkRmlsZVxuICBmcy5yZWFkRmlsZSA9IHJlYWRGaWxlXG4gIGZ1bmN0aW9uIHJlYWRGaWxlIChwYXRoLCBvcHRpb25zLCBjYikge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgIGNiID0gb3B0aW9ucywgb3B0aW9ucyA9IG51bGxcblxuICAgIHJldHVybiBnbyRyZWFkRmlsZShwYXRoLCBvcHRpb25zLCBjYilcblxuICAgIGZ1bmN0aW9uIGdvJHJlYWRGaWxlIChwYXRoLCBvcHRpb25zLCBjYiwgc3RhcnRUaW1lKSB7XG4gICAgICByZXR1cm4gZnMkcmVhZEZpbGUocGF0aCwgb3B0aW9ucywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAoZXJyICYmIChlcnIuY29kZSA9PT0gJ0VNRklMRScgfHwgZXJyLmNvZGUgPT09ICdFTkZJTEUnKSlcbiAgICAgICAgICBlbnF1ZXVlKFtnbyRyZWFkRmlsZSwgW3BhdGgsIG9wdGlvbnMsIGNiXSwgZXJyLCBzdGFydFRpbWUgfHwgRGF0ZS5ub3coKSwgRGF0ZS5ub3coKV0pXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICBjYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgdmFyIGZzJHdyaXRlRmlsZSA9IGZzLndyaXRlRmlsZVxuICBmcy53cml0ZUZpbGUgPSB3cml0ZUZpbGVcbiAgZnVuY3Rpb24gd3JpdGVGaWxlIChwYXRoLCBkYXRhLCBvcHRpb25zLCBjYikge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgIGNiID0gb3B0aW9ucywgb3B0aW9ucyA9IG51bGxcblxuICAgIHJldHVybiBnbyR3cml0ZUZpbGUocGF0aCwgZGF0YSwgb3B0aW9ucywgY2IpXG5cbiAgICBmdW5jdGlvbiBnbyR3cml0ZUZpbGUgKHBhdGgsIGRhdGEsIG9wdGlvbnMsIGNiLCBzdGFydFRpbWUpIHtcbiAgICAgIHJldHVybiBmcyR3cml0ZUZpbGUocGF0aCwgZGF0YSwgb3B0aW9ucywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAoZXJyICYmIChlcnIuY29kZSA9PT0gJ0VNRklMRScgfHwgZXJyLmNvZGUgPT09ICdFTkZJTEUnKSlcbiAgICAgICAgICBlbnF1ZXVlKFtnbyR3cml0ZUZpbGUsIFtwYXRoLCBkYXRhLCBvcHRpb25zLCBjYl0sIGVyciwgc3RhcnRUaW1lIHx8IERhdGUubm93KCksIERhdGUubm93KCldKVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgY2IuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHZhciBmcyRhcHBlbmRGaWxlID0gZnMuYXBwZW5kRmlsZVxuICBpZiAoZnMkYXBwZW5kRmlsZSlcbiAgICBmcy5hcHBlbmRGaWxlID0gYXBwZW5kRmlsZVxuICBmdW5jdGlvbiBhcHBlbmRGaWxlIChwYXRoLCBkYXRhLCBvcHRpb25zLCBjYikge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgIGNiID0gb3B0aW9ucywgb3B0aW9ucyA9IG51bGxcblxuICAgIHJldHVybiBnbyRhcHBlbmRGaWxlKHBhdGgsIGRhdGEsIG9wdGlvbnMsIGNiKVxuXG4gICAgZnVuY3Rpb24gZ28kYXBwZW5kRmlsZSAocGF0aCwgZGF0YSwgb3B0aW9ucywgY2IsIHN0YXJ0VGltZSkge1xuICAgICAgcmV0dXJuIGZzJGFwcGVuZEZpbGUocGF0aCwgZGF0YSwgb3B0aW9ucywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAoZXJyICYmIChlcnIuY29kZSA9PT0gJ0VNRklMRScgfHwgZXJyLmNvZGUgPT09ICdFTkZJTEUnKSlcbiAgICAgICAgICBlbnF1ZXVlKFtnbyRhcHBlbmRGaWxlLCBbcGF0aCwgZGF0YSwgb3B0aW9ucywgY2JdLCBlcnIsIHN0YXJ0VGltZSB8fCBEYXRlLm5vdygpLCBEYXRlLm5vdygpXSlcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICB2YXIgZnMkY29weUZpbGUgPSBmcy5jb3B5RmlsZVxuICBpZiAoZnMkY29weUZpbGUpXG4gICAgZnMuY29weUZpbGUgPSBjb3B5RmlsZVxuICBmdW5jdGlvbiBjb3B5RmlsZSAoc3JjLCBkZXN0LCBmbGFncywgY2IpIHtcbiAgICBpZiAodHlwZW9mIGZsYWdzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjYiA9IGZsYWdzXG4gICAgICBmbGFncyA9IDBcbiAgICB9XG4gICAgcmV0dXJuIGdvJGNvcHlGaWxlKHNyYywgZGVzdCwgZmxhZ3MsIGNiKVxuXG4gICAgZnVuY3Rpb24gZ28kY29weUZpbGUgKHNyYywgZGVzdCwgZmxhZ3MsIGNiLCBzdGFydFRpbWUpIHtcbiAgICAgIHJldHVybiBmcyRjb3B5RmlsZShzcmMsIGRlc3QsIGZsYWdzLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmIChlcnIgJiYgKGVyci5jb2RlID09PSAnRU1GSUxFJyB8fCBlcnIuY29kZSA9PT0gJ0VORklMRScpKVxuICAgICAgICAgIGVucXVldWUoW2dvJGNvcHlGaWxlLCBbc3JjLCBkZXN0LCBmbGFncywgY2JdLCBlcnIsIHN0YXJ0VGltZSB8fCBEYXRlLm5vdygpLCBEYXRlLm5vdygpXSlcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICB2YXIgZnMkcmVhZGRpciA9IGZzLnJlYWRkaXJcbiAgZnMucmVhZGRpciA9IHJlYWRkaXJcbiAgdmFyIG5vUmVhZGRpck9wdGlvblZlcnNpb25zID0gL152WzAtNV1cXC4vXG4gIGZ1bmN0aW9uIHJlYWRkaXIgKHBhdGgsIG9wdGlvbnMsIGNiKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKVxuICAgICAgY2IgPSBvcHRpb25zLCBvcHRpb25zID0gbnVsbFxuXG4gICAgdmFyIGdvJHJlYWRkaXIgPSBub1JlYWRkaXJPcHRpb25WZXJzaW9ucy50ZXN0KHByb2Nlc3MudmVyc2lvbilcbiAgICAgID8gZnVuY3Rpb24gZ28kcmVhZGRpciAocGF0aCwgb3B0aW9ucywgY2IsIHN0YXJ0VGltZSkge1xuICAgICAgICByZXR1cm4gZnMkcmVhZGRpcihwYXRoLCBmcyRyZWFkZGlyQ2FsbGJhY2soXG4gICAgICAgICAgcGF0aCwgb3B0aW9ucywgY2IsIHN0YXJ0VGltZVxuICAgICAgICApKVxuICAgICAgfVxuICAgICAgOiBmdW5jdGlvbiBnbyRyZWFkZGlyIChwYXRoLCBvcHRpb25zLCBjYiwgc3RhcnRUaW1lKSB7XG4gICAgICAgIHJldHVybiBmcyRyZWFkZGlyKHBhdGgsIG9wdGlvbnMsIGZzJHJlYWRkaXJDYWxsYmFjayhcbiAgICAgICAgICBwYXRoLCBvcHRpb25zLCBjYiwgc3RhcnRUaW1lXG4gICAgICAgICkpXG4gICAgICB9XG5cbiAgICByZXR1cm4gZ28kcmVhZGRpcihwYXRoLCBvcHRpb25zLCBjYilcblxuICAgIGZ1bmN0aW9uIGZzJHJlYWRkaXJDYWxsYmFjayAocGF0aCwgb3B0aW9ucywgY2IsIHN0YXJ0VGltZSkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChlcnIsIGZpbGVzKSB7XG4gICAgICAgIGlmIChlcnIgJiYgKGVyci5jb2RlID09PSAnRU1GSUxFJyB8fCBlcnIuY29kZSA9PT0gJ0VORklMRScpKVxuICAgICAgICAgIGVucXVldWUoW1xuICAgICAgICAgICAgZ28kcmVhZGRpcixcbiAgICAgICAgICAgIFtwYXRoLCBvcHRpb25zLCBjYl0sXG4gICAgICAgICAgICBlcnIsXG4gICAgICAgICAgICBzdGFydFRpbWUgfHwgRGF0ZS5ub3coKSxcbiAgICAgICAgICAgIERhdGUubm93KClcbiAgICAgICAgICBdKVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAoZmlsZXMgJiYgZmlsZXMuc29ydClcbiAgICAgICAgICAgIGZpbGVzLnNvcnQoKVxuXG4gICAgICAgICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIGNiLmNhbGwodGhpcywgZXJyLCBmaWxlcylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChwcm9jZXNzLnZlcnNpb24uc3Vic3RyKDAsIDQpID09PSAndjAuOCcpIHtcbiAgICB2YXIgbGVnU3RyZWFtcyA9IGxlZ2FjeShmcylcbiAgICBSZWFkU3RyZWFtID0gbGVnU3RyZWFtcy5SZWFkU3RyZWFtXG4gICAgV3JpdGVTdHJlYW0gPSBsZWdTdHJlYW1zLldyaXRlU3RyZWFtXG4gIH1cblxuICB2YXIgZnMkUmVhZFN0cmVhbSA9IGZzLlJlYWRTdHJlYW1cbiAgaWYgKGZzJFJlYWRTdHJlYW0pIHtcbiAgICBSZWFkU3RyZWFtLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZnMkUmVhZFN0cmVhbS5wcm90b3R5cGUpXG4gICAgUmVhZFN0cmVhbS5wcm90b3R5cGUub3BlbiA9IFJlYWRTdHJlYW0kb3BlblxuICB9XG5cbiAgdmFyIGZzJFdyaXRlU3RyZWFtID0gZnMuV3JpdGVTdHJlYW1cbiAgaWYgKGZzJFdyaXRlU3RyZWFtKSB7XG4gICAgV3JpdGVTdHJlYW0ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShmcyRXcml0ZVN0cmVhbS5wcm90b3R5cGUpXG4gICAgV3JpdGVTdHJlYW0ucHJvdG90eXBlLm9wZW4gPSBXcml0ZVN0cmVhbSRvcGVuXG4gIH1cblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnMsICdSZWFkU3RyZWFtJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIFJlYWRTdHJlYW1cbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgUmVhZFN0cmVhbSA9IHZhbFxuICAgIH0sXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSlcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZzLCAnV3JpdGVTdHJlYW0nLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gV3JpdGVTdHJlYW1cbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgV3JpdGVTdHJlYW0gPSB2YWxcbiAgICB9LFxuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pXG5cbiAgLy8gbGVnYWN5IG5hbWVzXG4gIHZhciBGaWxlUmVhZFN0cmVhbSA9IFJlYWRTdHJlYW1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZzLCAnRmlsZVJlYWRTdHJlYW0nLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gRmlsZVJlYWRTdHJlYW1cbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgRmlsZVJlYWRTdHJlYW0gPSB2YWxcbiAgICB9LFxuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pXG4gIHZhciBGaWxlV3JpdGVTdHJlYW0gPSBXcml0ZVN0cmVhbVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnMsICdGaWxlV3JpdGVTdHJlYW0nLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gRmlsZVdyaXRlU3RyZWFtXG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIEZpbGVXcml0ZVN0cmVhbSA9IHZhbFxuICAgIH0sXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSlcblxuICBmdW5jdGlvbiBSZWFkU3RyZWFtIChwYXRoLCBvcHRpb25zKSB7XG4gICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBSZWFkU3RyZWFtKVxuICAgICAgcmV0dXJuIGZzJFJlYWRTdHJlYW0uYXBwbHkodGhpcywgYXJndW1lbnRzKSwgdGhpc1xuICAgIGVsc2VcbiAgICAgIHJldHVybiBSZWFkU3RyZWFtLmFwcGx5KE9iamVjdC5jcmVhdGUoUmVhZFN0cmVhbS5wcm90b3R5cGUpLCBhcmd1bWVudHMpXG4gIH1cblxuICBmdW5jdGlvbiBSZWFkU3RyZWFtJG9wZW4gKCkge1xuICAgIHZhciB0aGF0ID0gdGhpc1xuICAgIG9wZW4odGhhdC5wYXRoLCB0aGF0LmZsYWdzLCB0aGF0Lm1vZGUsIGZ1bmN0aW9uIChlcnIsIGZkKSB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIGlmICh0aGF0LmF1dG9DbG9zZSlcbiAgICAgICAgICB0aGF0LmRlc3Ryb3koKVxuXG4gICAgICAgIHRoYXQuZW1pdCgnZXJyb3InLCBlcnIpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGF0LmZkID0gZmRcbiAgICAgICAgdGhhdC5lbWl0KCdvcGVuJywgZmQpXG4gICAgICAgIHRoYXQucmVhZCgpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIFdyaXRlU3RyZWFtIChwYXRoLCBvcHRpb25zKSB7XG4gICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBXcml0ZVN0cmVhbSlcbiAgICAgIHJldHVybiBmcyRXcml0ZVN0cmVhbS5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCB0aGlzXG4gICAgZWxzZVxuICAgICAgcmV0dXJuIFdyaXRlU3RyZWFtLmFwcGx5KE9iamVjdC5jcmVhdGUoV3JpdGVTdHJlYW0ucHJvdG90eXBlKSwgYXJndW1lbnRzKVxuICB9XG5cbiAgZnVuY3Rpb24gV3JpdGVTdHJlYW0kb3BlbiAoKSB7XG4gICAgdmFyIHRoYXQgPSB0aGlzXG4gICAgb3Blbih0aGF0LnBhdGgsIHRoYXQuZmxhZ3MsIHRoYXQubW9kZSwgZnVuY3Rpb24gKGVyciwgZmQpIHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgdGhhdC5kZXN0cm95KClcbiAgICAgICAgdGhhdC5lbWl0KCdlcnJvcicsIGVycilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoYXQuZmQgPSBmZFxuICAgICAgICB0aGF0LmVtaXQoJ29wZW4nLCBmZClcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlUmVhZFN0cmVhbSAocGF0aCwgb3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgZnMuUmVhZFN0cmVhbShwYXRoLCBvcHRpb25zKVxuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlV3JpdGVTdHJlYW0gKHBhdGgsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IGZzLldyaXRlU3RyZWFtKHBhdGgsIG9wdGlvbnMpXG4gIH1cblxuICB2YXIgZnMkb3BlbiA9IGZzLm9wZW5cbiAgZnMub3BlbiA9IG9wZW5cbiAgZnVuY3Rpb24gb3BlbiAocGF0aCwgZmxhZ3MsIG1vZGUsIGNiKSB7XG4gICAgaWYgKHR5cGVvZiBtb2RlID09PSAnZnVuY3Rpb24nKVxuICAgICAgY2IgPSBtb2RlLCBtb2RlID0gbnVsbFxuXG4gICAgcmV0dXJuIGdvJG9wZW4ocGF0aCwgZmxhZ3MsIG1vZGUsIGNiKVxuXG4gICAgZnVuY3Rpb24gZ28kb3BlbiAocGF0aCwgZmxhZ3MsIG1vZGUsIGNiLCBzdGFydFRpbWUpIHtcbiAgICAgIHJldHVybiBmcyRvcGVuKHBhdGgsIGZsYWdzLCBtb2RlLCBmdW5jdGlvbiAoZXJyLCBmZCkge1xuICAgICAgICBpZiAoZXJyICYmIChlcnIuY29kZSA9PT0gJ0VNRklMRScgfHwgZXJyLmNvZGUgPT09ICdFTkZJTEUnKSlcbiAgICAgICAgICBlbnF1ZXVlKFtnbyRvcGVuLCBbcGF0aCwgZmxhZ3MsIG1vZGUsIGNiXSwgZXJyLCBzdGFydFRpbWUgfHwgRGF0ZS5ub3coKSwgRGF0ZS5ub3coKV0pXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICBjYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZzXG59XG5cbmZ1bmN0aW9uIGVucXVldWUgKGVsZW0pIHtcbiAgZGVidWcoJ0VOUVVFVUUnLCBlbGVtWzBdLm5hbWUsIGVsZW1bMV0pXG4gIGZzW2dyYWNlZnVsUXVldWVdLnB1c2goZWxlbSlcbiAgcmV0cnkoKVxufVxuXG4vLyBrZWVwIHRyYWNrIG9mIHRoZSB0aW1lb3V0IGJldHdlZW4gcmV0cnkoKSBjYWxsc1xudmFyIHJldHJ5VGltZXJcblxuLy8gcmVzZXQgdGhlIHN0YXJ0VGltZSBhbmQgbGFzdFRpbWUgdG8gbm93XG4vLyB0aGlzIHJlc2V0cyB0aGUgc3RhcnQgb2YgdGhlIDYwIHNlY29uZCBvdmVyYWxsIHRpbWVvdXQgYXMgd2VsbCBhcyB0aGVcbi8vIGRlbGF5IGJldHdlZW4gYXR0ZW1wdHMgc28gdGhhdCB3ZSdsbCByZXRyeSB0aGVzZSBqb2JzIHNvb25lclxuZnVuY3Rpb24gcmVzZXRRdWV1ZSAoKSB7XG4gIHZhciBub3cgPSBEYXRlLm5vdygpXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZnNbZ3JhY2VmdWxRdWV1ZV0ubGVuZ3RoOyArK2kpIHtcbiAgICAvLyBlbnRyaWVzIHRoYXQgYXJlIG9ubHkgYSBsZW5ndGggb2YgMiBhcmUgZnJvbSBhbiBvbGRlciB2ZXJzaW9uLCBkb24ndFxuICAgIC8vIGJvdGhlciBtb2RpZnlpbmcgdGhvc2Ugc2luY2UgdGhleSdsbCBiZSByZXRyaWVkIGFueXdheS5cbiAgICBpZiAoZnNbZ3JhY2VmdWxRdWV1ZV1baV0ubGVuZ3RoID4gMikge1xuICAgICAgZnNbZ3JhY2VmdWxRdWV1ZV1baV1bM10gPSBub3cgLy8gc3RhcnRUaW1lXG4gICAgICBmc1tncmFjZWZ1bFF1ZXVlXVtpXVs0XSA9IG5vdyAvLyBsYXN0VGltZVxuICAgIH1cbiAgfVxuICAvLyBjYWxsIHJldHJ5IHRvIG1ha2Ugc3VyZSB3ZSdyZSBhY3RpdmVseSBwcm9jZXNzaW5nIHRoZSBxdWV1ZVxuICByZXRyeSgpXG59XG5cbmZ1bmN0aW9uIHJldHJ5ICgpIHtcbiAgLy8gY2xlYXIgdGhlIHRpbWVyIGFuZCByZW1vdmUgaXQgdG8gaGVscCBwcmV2ZW50IHVuaW50ZW5kZWQgY29uY3VycmVuY3lcbiAgY2xlYXJUaW1lb3V0KHJldHJ5VGltZXIpXG4gIHJldHJ5VGltZXIgPSB1bmRlZmluZWRcblxuICBpZiAoZnNbZ3JhY2VmdWxRdWV1ZV0ubGVuZ3RoID09PSAwKVxuICAgIHJldHVyblxuXG4gIHZhciBlbGVtID0gZnNbZ3JhY2VmdWxRdWV1ZV0uc2hpZnQoKVxuICB2YXIgZm4gPSBlbGVtWzBdXG4gIHZhciBhcmdzID0gZWxlbVsxXVxuICAvLyB0aGVzZSBpdGVtcyBtYXkgYmUgdW5zZXQgaWYgdGhleSB3ZXJlIGFkZGVkIGJ5IGFuIG9sZGVyIGdyYWNlZnVsLWZzXG4gIHZhciBlcnIgPSBlbGVtWzJdXG4gIHZhciBzdGFydFRpbWUgPSBlbGVtWzNdXG4gIHZhciBsYXN0VGltZSA9IGVsZW1bNF1cblxuICAvLyBpZiB3ZSBkb24ndCBoYXZlIGEgc3RhcnRUaW1lIHdlIGhhdmUgbm8gd2F5IG9mIGtub3dpbmcgaWYgd2UndmUgd2FpdGVkXG4gIC8vIGxvbmcgZW5vdWdoLCBzbyBnbyBhaGVhZCBhbmQgcmV0cnkgdGhpcyBpdGVtIG5vd1xuICBpZiAoc3RhcnRUaW1lID09PSB1bmRlZmluZWQpIHtcbiAgICBkZWJ1ZygnUkVUUlknLCBmbi5uYW1lLCBhcmdzKVxuICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MpXG4gIH0gZWxzZSBpZiAoRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSA+PSA2MDAwMCkge1xuICAgIC8vIGl0J3MgYmVlbiBtb3JlIHRoYW4gNjAgc2Vjb25kcyB0b3RhbCwgYmFpbCBub3dcbiAgICBkZWJ1ZygnVElNRU9VVCcsIGZuLm5hbWUsIGFyZ3MpXG4gICAgdmFyIGNiID0gYXJncy5wb3AoKVxuICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpXG4gICAgICBjYi5jYWxsKG51bGwsIGVycilcbiAgfSBlbHNlIHtcbiAgICAvLyB0aGUgYW1vdW50IG9mIHRpbWUgYmV0d2VlbiB0aGUgbGFzdCBhdHRlbXB0IGFuZCByaWdodCBub3dcbiAgICB2YXIgc2luY2VBdHRlbXB0ID0gRGF0ZS5ub3coKSAtIGxhc3RUaW1lXG4gICAgLy8gdGhlIGFtb3VudCBvZiB0aW1lIGJldHdlZW4gd2hlbiB3ZSBmaXJzdCB0cmllZCwgYW5kIHdoZW4gd2UgbGFzdCB0cmllZFxuICAgIC8vIHJvdW5kZWQgdXAgdG8gYXQgbGVhc3QgMVxuICAgIHZhciBzaW5jZVN0YXJ0ID0gTWF0aC5tYXgobGFzdFRpbWUgLSBzdGFydFRpbWUsIDEpXG4gICAgLy8gYmFja29mZi4gd2FpdCBsb25nZXIgdGhhbiB0aGUgdG90YWwgdGltZSB3ZSd2ZSBiZWVuIHJldHJ5aW5nLCBidXQgb25seVxuICAgIC8vIHVwIHRvIGEgbWF4aW11bSBvZiAxMDBtc1xuICAgIHZhciBkZXNpcmVkRGVsYXkgPSBNYXRoLm1pbihzaW5jZVN0YXJ0ICogMS4yLCAxMDApXG4gICAgLy8gaXQncyBiZWVuIGxvbmcgZW5vdWdoIHNpbmNlIHRoZSBsYXN0IHJldHJ5LCBkbyBpdCBhZ2FpblxuICAgIGlmIChzaW5jZUF0dGVtcHQgPj0gZGVzaXJlZERlbGF5KSB7XG4gICAgICBkZWJ1ZygnUkVUUlknLCBmbi5uYW1lLCBhcmdzKVxuICAgICAgZm4uYXBwbHkobnVsbCwgYXJncy5jb25jYXQoW3N0YXJ0VGltZV0pKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpZiB3ZSBjYW4ndCBkbyB0aGlzIGpvYiB5ZXQsIHB1c2ggaXQgdG8gdGhlIGVuZCBvZiB0aGUgcXVldWVcbiAgICAgIC8vIGFuZCBsZXQgdGhlIG5leHQgaXRlcmF0aW9uIGNoZWNrIGFnYWluXG4gICAgICBmc1tncmFjZWZ1bFF1ZXVlXS5wdXNoKGVsZW0pXG4gICAgfVxuICB9XG5cbiAgLy8gc2NoZWR1bGUgb3VyIG5leHQgcnVuIGlmIG9uZSBpc24ndCBhbHJlYWR5IHNjaGVkdWxlZFxuICBpZiAocmV0cnlUaW1lciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0cnlUaW1lciA9IHNldFRpbWVvdXQocmV0cnksIDApXG4gIH1cbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBpc1N0cmVhbSA9IHN0cmVhbSA9PlxuXHRzdHJlYW0gIT09IG51bGwgJiZcblx0dHlwZW9mIHN0cmVhbSA9PT0gJ29iamVjdCcgJiZcblx0dHlwZW9mIHN0cmVhbS5waXBlID09PSAnZnVuY3Rpb24nO1xuXG5pc1N0cmVhbS53cml0YWJsZSA9IHN0cmVhbSA9PlxuXHRpc1N0cmVhbShzdHJlYW0pICYmXG5cdHN0cmVhbS53cml0YWJsZSAhPT0gZmFsc2UgJiZcblx0dHlwZW9mIHN0cmVhbS5fd3JpdGUgPT09ICdmdW5jdGlvbicgJiZcblx0dHlwZW9mIHN0cmVhbS5fd3JpdGFibGVTdGF0ZSA9PT0gJ29iamVjdCc7XG5cbmlzU3RyZWFtLnJlYWRhYmxlID0gc3RyZWFtID0+XG5cdGlzU3RyZWFtKHN0cmVhbSkgJiZcblx0c3RyZWFtLnJlYWRhYmxlICE9PSBmYWxzZSAmJlxuXHR0eXBlb2Ygc3RyZWFtLl9yZWFkID09PSAnZnVuY3Rpb24nICYmXG5cdHR5cGVvZiBzdHJlYW0uX3JlYWRhYmxlU3RhdGUgPT09ICdvYmplY3QnO1xuXG5pc1N0cmVhbS5kdXBsZXggPSBzdHJlYW0gPT5cblx0aXNTdHJlYW0ud3JpdGFibGUoc3RyZWFtKSAmJlxuXHRpc1N0cmVhbS5yZWFkYWJsZShzdHJlYW0pO1xuXG5pc1N0cmVhbS50cmFuc2Zvcm0gPSBzdHJlYW0gPT5cblx0aXNTdHJlYW0uZHVwbGV4KHN0cmVhbSkgJiZcblx0dHlwZW9mIHN0cmVhbS5fdHJhbnNmb3JtID09PSAnZnVuY3Rpb24nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzU3RyZWFtO1xuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbmlmICh0eXBlb2YgcHJvY2VzcyA9PT0gJ3VuZGVmaW5lZCcgfHxcbiAgICAhcHJvY2Vzcy52ZXJzaW9uIHx8XG4gICAgcHJvY2Vzcy52ZXJzaW9uLmluZGV4T2YoJ3YwLicpID09PSAwIHx8XG4gICAgcHJvY2Vzcy52ZXJzaW9uLmluZGV4T2YoJ3YxLicpID09PSAwICYmIHByb2Nlc3MudmVyc2lvbi5pbmRleE9mKCd2MS44LicpICE9PSAwKSB7XG4gIG1vZHVsZS5leHBvcnRzID0geyBuZXh0VGljazogbmV4dFRpY2sgfTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcHJvY2Vzc1xufVxuXG5mdW5jdGlvbiBuZXh0VGljayhmbiwgYXJnMSwgYXJnMiwgYXJnMykge1xuICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJjYWxsYmFja1wiIGFyZ3VtZW50IG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICB9XG4gIHZhciBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICB2YXIgYXJncywgaTtcbiAgc3dpdGNoIChsZW4pIHtcbiAgY2FzZSAwOlxuICBjYXNlIDE6XG4gICAgcmV0dXJuIHByb2Nlc3MubmV4dFRpY2soZm4pO1xuICBjYXNlIDI6XG4gICAgcmV0dXJuIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gYWZ0ZXJUaWNrT25lKCkge1xuICAgICAgZm4uY2FsbChudWxsLCBhcmcxKTtcbiAgICB9KTtcbiAgY2FzZSAzOlxuICAgIHJldHVybiBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uIGFmdGVyVGlja1R3bygpIHtcbiAgICAgIGZuLmNhbGwobnVsbCwgYXJnMSwgYXJnMik7XG4gICAgfSk7XG4gIGNhc2UgNDpcbiAgICByZXR1cm4gcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiBhZnRlclRpY2tUaHJlZSgpIHtcbiAgICAgIGZuLmNhbGwobnVsbCwgYXJnMSwgYXJnMiwgYXJnMyk7XG4gICAgfSk7XG4gIGRlZmF1bHQ6XG4gICAgYXJncyA9IG5ldyBBcnJheShsZW4gLSAxKTtcbiAgICBpID0gMDtcbiAgICB3aGlsZSAoaSA8IGFyZ3MubGVuZ3RoKSB7XG4gICAgICBhcmdzW2krK10gPSBhcmd1bWVudHNbaV07XG4gICAgfVxuICAgIHJldHVybiBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uIGFmdGVyVGljaygpIHtcbiAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgIH0pO1xuICB9XG59XG5cbiIsCiAgICAidmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoYXJyKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKGFycikgPT0gJ1tvYmplY3QgQXJyYXldJztcbn07XG4iLAogICAgIi8qIGVzbGludC1kaXNhYmxlIG5vZGUvbm8tZGVwcmVjYXRlZC1hcGkgKi9cbnZhciBidWZmZXIgPSByZXF1aXJlKCdidWZmZXInKVxudmFyIEJ1ZmZlciA9IGJ1ZmZlci5CdWZmZXJcblxuLy8gYWx0ZXJuYXRpdmUgdG8gdXNpbmcgT2JqZWN0LmtleXMgZm9yIG9sZCBicm93c2Vyc1xuZnVuY3Rpb24gY29weVByb3BzIChzcmMsIGRzdCkge1xuICBmb3IgKHZhciBrZXkgaW4gc3JjKSB7XG4gICAgZHN0W2tleV0gPSBzcmNba2V5XVxuICB9XG59XG5pZiAoQnVmZmVyLmZyb20gJiYgQnVmZmVyLmFsbG9jICYmIEJ1ZmZlci5hbGxvY1Vuc2FmZSAmJiBCdWZmZXIuYWxsb2NVbnNhZmVTbG93KSB7XG4gIG1vZHVsZS5leHBvcnRzID0gYnVmZmVyXG59IGVsc2Uge1xuICAvLyBDb3B5IHByb3BlcnRpZXMgZnJvbSByZXF1aXJlKCdidWZmZXInKVxuICBjb3B5UHJvcHMoYnVmZmVyLCBleHBvcnRzKVxuICBleHBvcnRzLkJ1ZmZlciA9IFNhZmVCdWZmZXJcbn1cblxuZnVuY3Rpb24gU2FmZUJ1ZmZlciAoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIEJ1ZmZlcihhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuLy8gQ29weSBzdGF0aWMgbWV0aG9kcyBmcm9tIEJ1ZmZlclxuY29weVByb3BzKEJ1ZmZlciwgU2FmZUJ1ZmZlcilcblxuU2FmZUJ1ZmZlci5mcm9tID0gZnVuY3Rpb24gKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmICh0eXBlb2YgYXJnID09PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyJylcbiAgfVxuICByZXR1cm4gQnVmZmVyKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxufVxuXG5TYWZlQnVmZmVyLmFsbG9jID0gZnVuY3Rpb24gKHNpemUsIGZpbGwsIGVuY29kaW5nKSB7XG4gIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJylcbiAgfVxuICB2YXIgYnVmID0gQnVmZmVyKHNpemUpXG4gIGlmIChmaWxsICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnc3RyaW5nJykge1xuICAgICAgYnVmLmZpbGwoZmlsbCwgZW5jb2RpbmcpXG4gICAgfSBlbHNlIHtcbiAgICAgIGJ1Zi5maWxsKGZpbGwpXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGJ1Zi5maWxsKDApXG4gIH1cbiAgcmV0dXJuIGJ1ZlxufVxuXG5TYWZlQnVmZmVyLmFsbG9jVW5zYWZlID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKVxuICB9XG4gIHJldHVybiBCdWZmZXIoc2l6ZSlcbn1cblxuU2FmZUJ1ZmZlci5hbGxvY1Vuc2FmZVNsb3cgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpXG4gIH1cbiAgcmV0dXJuIGJ1ZmZlci5TbG93QnVmZmVyKHNpemUpXG59XG4iLAogICAgIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyBOT1RFOiBUaGVzZSB0eXBlIGNoZWNraW5nIGZ1bmN0aW9ucyBpbnRlbnRpb25hbGx5IGRvbid0IHVzZSBgaW5zdGFuY2VvZmBcbi8vIGJlY2F1c2UgaXQgaXMgZnJhZ2lsZSBhbmQgY2FuIGJlIGVhc2lseSBmYWtlZCB3aXRoIGBPYmplY3QuY3JlYXRlKClgLlxuXG5mdW5jdGlvbiBpc0FycmF5KGFyZykge1xuICBpZiAoQXJyYXkuaXNBcnJheSkge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KGFyZyk7XG4gIH1cbiAgcmV0dXJuIG9iamVjdFRvU3RyaW5nKGFyZykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59XG5leHBvcnRzLmlzQXJyYXkgPSBpc0FycmF5O1xuXG5mdW5jdGlvbiBpc0Jvb2xlYW4oYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnYm9vbGVhbic7XG59XG5leHBvcnRzLmlzQm9vbGVhbiA9IGlzQm9vbGVhbjtcblxuZnVuY3Rpb24gaXNOdWxsKGFyZykge1xuICByZXR1cm4gYXJnID09PSBudWxsO1xufVxuZXhwb3J0cy5pc051bGwgPSBpc051bGw7XG5cbmZ1bmN0aW9uIGlzTnVsbE9yVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gYXJnID09IG51bGw7XG59XG5leHBvcnRzLmlzTnVsbE9yVW5kZWZpbmVkID0gaXNOdWxsT3JVbmRlZmluZWQ7XG5cbmZ1bmN0aW9uIGlzTnVtYmVyKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ251bWJlcic7XG59XG5leHBvcnRzLmlzTnVtYmVyID0gaXNOdW1iZXI7XG5cbmZ1bmN0aW9uIGlzU3RyaW5nKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ3N0cmluZyc7XG59XG5leHBvcnRzLmlzU3RyaW5nID0gaXNTdHJpbmc7XG5cbmZ1bmN0aW9uIGlzU3ltYm9sKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ3N5bWJvbCc7XG59XG5leHBvcnRzLmlzU3ltYm9sID0gaXNTeW1ib2w7XG5cbmZ1bmN0aW9uIGlzVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gYXJnID09PSB2b2lkIDA7XG59XG5leHBvcnRzLmlzVW5kZWZpbmVkID0gaXNVbmRlZmluZWQ7XG5cbmZ1bmN0aW9uIGlzUmVnRXhwKHJlKSB7XG4gIHJldHVybiBvYmplY3RUb1N0cmluZyhyZSkgPT09ICdbb2JqZWN0IFJlZ0V4cF0nO1xufVxuZXhwb3J0cy5pc1JlZ0V4cCA9IGlzUmVnRXhwO1xuXG5mdW5jdGlvbiBpc09iamVjdChhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdvYmplY3QnICYmIGFyZyAhPT0gbnVsbDtcbn1cbmV4cG9ydHMuaXNPYmplY3QgPSBpc09iamVjdDtcblxuZnVuY3Rpb24gaXNEYXRlKGQpIHtcbiAgcmV0dXJuIG9iamVjdFRvU3RyaW5nKGQpID09PSAnW29iamVjdCBEYXRlXSc7XG59XG5leHBvcnRzLmlzRGF0ZSA9IGlzRGF0ZTtcblxuZnVuY3Rpb24gaXNFcnJvcihlKSB7XG4gIHJldHVybiAob2JqZWN0VG9TdHJpbmcoZSkgPT09ICdbb2JqZWN0IEVycm9yXScgfHwgZSBpbnN0YW5jZW9mIEVycm9yKTtcbn1cbmV4cG9ydHMuaXNFcnJvciA9IGlzRXJyb3I7XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24oYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnZnVuY3Rpb24nO1xufVxuZXhwb3J0cy5pc0Z1bmN0aW9uID0gaXNGdW5jdGlvbjtcblxuZnVuY3Rpb24gaXNQcmltaXRpdmUoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IG51bGwgfHxcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICdib29sZWFuJyB8fFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ251bWJlcicgfHxcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnIHx8XG4gICAgICAgICB0eXBlb2YgYXJnID09PSAnc3ltYm9sJyB8fCAgLy8gRVM2IHN5bWJvbFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ3VuZGVmaW5lZCc7XG59XG5leHBvcnRzLmlzUHJpbWl0aXZlID0gaXNQcmltaXRpdmU7XG5cbmV4cG9ydHMuaXNCdWZmZXIgPSByZXF1aXJlKCdidWZmZXInKS5CdWZmZXIuaXNCdWZmZXI7XG5cbmZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKG8pIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKTtcbn1cbiIsCiAgICAiaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIGltcGxlbWVudGF0aW9uIGZyb20gc3RhbmRhcmQgbm9kZS5qcyAndXRpbCcgbW9kdWxlXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgaWYgKHN1cGVyQ3Rvcikge1xuICAgICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICAgIGN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckN0b3IucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgICAgdmFsdWU6IGN0b3IsXG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9O1xufSBlbHNlIHtcbiAgLy8gb2xkIHNjaG9vbCBzaGltIGZvciBvbGQgYnJvd3NlcnNcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBpZiAoc3VwZXJDdG9yKSB7XG4gICAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvclxuICAgICAgdmFyIFRlbXBDdG9yID0gZnVuY3Rpb24gKCkge31cbiAgICAgIFRlbXBDdG9yLnByb3RvdHlwZSA9IHN1cGVyQ3Rvci5wcm90b3R5cGVcbiAgICAgIGN0b3IucHJvdG90eXBlID0gbmV3IFRlbXBDdG9yKClcbiAgICAgIGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvclxuICAgIH1cbiAgfVxufVxuIiwKICAgICJ0cnkge1xuICB2YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgaWYgKHR5cGVvZiB1dGlsLmluaGVyaXRzICE9PSAnZnVuY3Rpb24nKSB0aHJvdyAnJztcbiAgbW9kdWxlLmV4cG9ydHMgPSB1dGlsLmluaGVyaXRzO1xufSBjYXRjaCAoZSkge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vaW5oZXJpdHNfYnJvd3Nlci5qcycpO1xufVxuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbnZhciBCdWZmZXIgPSByZXF1aXJlKCdzYWZlLWJ1ZmZlcicpLkJ1ZmZlcjtcbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuXG5mdW5jdGlvbiBjb3B5QnVmZmVyKHNyYywgdGFyZ2V0LCBvZmZzZXQpIHtcbiAgc3JjLmNvcHkodGFyZ2V0LCBvZmZzZXQpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gQnVmZmVyTGlzdCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQnVmZmVyTGlzdCk7XG5cbiAgICB0aGlzLmhlYWQgPSBudWxsO1xuICAgIHRoaXMudGFpbCA9IG51bGw7XG4gICAgdGhpcy5sZW5ndGggPSAwO1xuICB9XG5cbiAgQnVmZmVyTGlzdC5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIHB1c2godikge1xuICAgIHZhciBlbnRyeSA9IHsgZGF0YTogdiwgbmV4dDogbnVsbCB9O1xuICAgIGlmICh0aGlzLmxlbmd0aCA+IDApIHRoaXMudGFpbC5uZXh0ID0gZW50cnk7ZWxzZSB0aGlzLmhlYWQgPSBlbnRyeTtcbiAgICB0aGlzLnRhaWwgPSBlbnRyeTtcbiAgICArK3RoaXMubGVuZ3RoO1xuICB9O1xuXG4gIEJ1ZmZlckxpc3QucHJvdG90eXBlLnVuc2hpZnQgPSBmdW5jdGlvbiB1bnNoaWZ0KHYpIHtcbiAgICB2YXIgZW50cnkgPSB7IGRhdGE6IHYsIG5leHQ6IHRoaXMuaGVhZCB9O1xuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkgdGhpcy50YWlsID0gZW50cnk7XG4gICAgdGhpcy5oZWFkID0gZW50cnk7XG4gICAgKyt0aGlzLmxlbmd0aDtcbiAgfTtcblxuICBCdWZmZXJMaXN0LnByb3RvdHlwZS5zaGlmdCA9IGZ1bmN0aW9uIHNoaWZ0KCkge1xuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIHZhciByZXQgPSB0aGlzLmhlYWQuZGF0YTtcbiAgICBpZiAodGhpcy5sZW5ndGggPT09IDEpIHRoaXMuaGVhZCA9IHRoaXMudGFpbCA9IG51bGw7ZWxzZSB0aGlzLmhlYWQgPSB0aGlzLmhlYWQubmV4dDtcbiAgICAtLXRoaXMubGVuZ3RoO1xuICAgIHJldHVybiByZXQ7XG4gIH07XG5cbiAgQnVmZmVyTGlzdC5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICB0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBudWxsO1xuICAgIHRoaXMubGVuZ3RoID0gMDtcbiAgfTtcblxuICBCdWZmZXJMaXN0LnByb3RvdHlwZS5qb2luID0gZnVuY3Rpb24gam9pbihzKSB7XG4gICAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSByZXR1cm4gJyc7XG4gICAgdmFyIHAgPSB0aGlzLmhlYWQ7XG4gICAgdmFyIHJldCA9ICcnICsgcC5kYXRhO1xuICAgIHdoaWxlIChwID0gcC5uZXh0KSB7XG4gICAgICByZXQgKz0gcyArIHAuZGF0YTtcbiAgICB9cmV0dXJuIHJldDtcbiAgfTtcblxuICBCdWZmZXJMaXN0LnByb3RvdHlwZS5jb25jYXQgPSBmdW5jdGlvbiBjb25jYXQobikge1xuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIEJ1ZmZlci5hbGxvYygwKTtcbiAgICB2YXIgcmV0ID0gQnVmZmVyLmFsbG9jVW5zYWZlKG4gPj4+IDApO1xuICAgIHZhciBwID0gdGhpcy5oZWFkO1xuICAgIHZhciBpID0gMDtcbiAgICB3aGlsZSAocCkge1xuICAgICAgY29weUJ1ZmZlcihwLmRhdGEsIHJldCwgaSk7XG4gICAgICBpICs9IHAuZGF0YS5sZW5ndGg7XG4gICAgICBwID0gcC5uZXh0O1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xuICB9O1xuXG4gIHJldHVybiBCdWZmZXJMaXN0O1xufSgpO1xuXG5pZiAodXRpbCAmJiB1dGlsLmluc3BlY3QgJiYgdXRpbC5pbnNwZWN0LmN1c3RvbSkge1xuICBtb2R1bGUuZXhwb3J0cy5wcm90b3R5cGVbdXRpbC5pbnNwZWN0LmN1c3RvbV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG9iaiA9IHV0aWwuaW5zcGVjdCh7IGxlbmd0aDogdGhpcy5sZW5ndGggfSk7XG4gICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IubmFtZSArICcgJyArIG9iajtcbiAgfTtcbn0iLAogICAgIid1c2Ugc3RyaWN0JztcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cblxudmFyIHBuYSA9IHJlcXVpcmUoJ3Byb2Nlc3MtbmV4dGljay1hcmdzJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuLy8gdW5kb2N1bWVudGVkIGNiKCkgQVBJLCBuZWVkZWQgZm9yIGNvcmUsIG5vdCBmb3IgcHVibGljIEFQSVxuZnVuY3Rpb24gZGVzdHJveShlcnIsIGNiKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgdmFyIHJlYWRhYmxlRGVzdHJveWVkID0gdGhpcy5fcmVhZGFibGVTdGF0ZSAmJiB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZDtcbiAgdmFyIHdyaXRhYmxlRGVzdHJveWVkID0gdGhpcy5fd3JpdGFibGVTdGF0ZSAmJiB0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZDtcblxuICBpZiAocmVhZGFibGVEZXN0cm95ZWQgfHwgd3JpdGFibGVEZXN0cm95ZWQpIHtcbiAgICBpZiAoY2IpIHtcbiAgICAgIGNiKGVycik7XG4gICAgfSBlbHNlIGlmIChlcnIpIHtcbiAgICAgIGlmICghdGhpcy5fd3JpdGFibGVTdGF0ZSkge1xuICAgICAgICBwbmEubmV4dFRpY2soZW1pdEVycm9yTlQsIHRoaXMsIGVycik7XG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZCkge1xuICAgICAgICB0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZCA9IHRydWU7XG4gICAgICAgIHBuYS5uZXh0VGljayhlbWl0RXJyb3JOVCwgdGhpcywgZXJyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIHdlIHNldCBkZXN0cm95ZWQgdG8gdHJ1ZSBiZWZvcmUgZmlyaW5nIGVycm9yIGNhbGxiYWNrcyBpbiBvcmRlclxuICAvLyB0byBtYWtlIGl0IHJlLWVudHJhbmNlIHNhZmUgaW4gY2FzZSBkZXN0cm95KCkgaXMgY2FsbGVkIHdpdGhpbiBjYWxsYmFja3NcblxuICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZSkge1xuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8vIGlmIHRoaXMgaXMgYSBkdXBsZXggc3RyZWFtIG1hcmsgdGhlIHdyaXRhYmxlIHBhcnQgYXMgZGVzdHJveWVkIGFzIHdlbGxcbiAgaWYgKHRoaXMuX3dyaXRhYmxlU3RhdGUpIHtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZCA9IHRydWU7XG4gIH1cblxuICB0aGlzLl9kZXN0cm95KGVyciB8fCBudWxsLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgaWYgKCFjYiAmJiBlcnIpIHtcbiAgICAgIGlmICghX3RoaXMuX3dyaXRhYmxlU3RhdGUpIHtcbiAgICAgICAgcG5hLm5leHRUaWNrKGVtaXRFcnJvck5ULCBfdGhpcywgZXJyKTtcbiAgICAgIH0gZWxzZSBpZiAoIV90aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZCkge1xuICAgICAgICBfdGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQgPSB0cnVlO1xuICAgICAgICBwbmEubmV4dFRpY2soZW1pdEVycm9yTlQsIF90aGlzLCBlcnIpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2IpIHtcbiAgICAgIGNiKGVycik7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gdW5kZXN0cm95KCkge1xuICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZSkge1xuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkID0gZmFsc2U7XG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5yZWFkaW5nID0gZmFsc2U7XG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRlZCA9IGZhbHNlO1xuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCA9IGZhbHNlO1xuICB9XG5cbiAgaWYgKHRoaXMuX3dyaXRhYmxlU3RhdGUpIHtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZCA9IGZhbHNlO1xuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWQgPSBmYWxzZTtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmVuZGluZyA9IGZhbHNlO1xuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluYWxDYWxsZWQgPSBmYWxzZTtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLnByZWZpbmlzaGVkID0gZmFsc2U7XG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5pc2hlZCA9IGZhbHNlO1xuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkID0gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gZW1pdEVycm9yTlQoc2VsZiwgZXJyKSB7XG4gIHNlbGYuZW1pdCgnZXJyb3InLCBlcnIpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZGVzdHJveTogZGVzdHJveSxcbiAgdW5kZXN0cm95OiB1bmRlc3Ryb3lcbn07IiwKICAgICJcbi8qKlxuICogRm9yIE5vZGUuanMsIHNpbXBseSByZS1leHBvcnQgdGhlIGNvcmUgYHV0aWwuZGVwcmVjYXRlYCBmdW5jdGlvbi5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJ3V0aWwnKS5kZXByZWNhdGU7XG4iLAogICAgIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyBBIGJpdCBzaW1wbGVyIHRoYW4gcmVhZGFibGUgc3RyZWFtcy5cbi8vIEltcGxlbWVudCBhbiBhc3luYyAuX3dyaXRlKGNodW5rLCBlbmNvZGluZywgY2IpLCBhbmQgaXQnbGwgaGFuZGxlIGFsbFxuLy8gdGhlIGRyYWluIGV2ZW50IGVtaXNzaW9uIGFuZCBidWZmZXJpbmcuXG5cbid1c2Ugc3RyaWN0JztcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cblxudmFyIHBuYSA9IHJlcXVpcmUoJ3Byb2Nlc3MtbmV4dGljay1hcmdzJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxubW9kdWxlLmV4cG9ydHMgPSBXcml0YWJsZTtcblxuLyogPHJlcGxhY2VtZW50PiAqL1xuZnVuY3Rpb24gV3JpdGVSZXEoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICB0aGlzLmNodW5rID0gY2h1bms7XG4gIHRoaXMuZW5jb2RpbmcgPSBlbmNvZGluZztcbiAgdGhpcy5jYWxsYmFjayA9IGNiO1xuICB0aGlzLm5leHQgPSBudWxsO1xufVxuXG4vLyBJdCBzZWVtcyBhIGxpbmtlZCBsaXN0IGJ1dCBpdCBpcyBub3Rcbi8vIHRoZXJlIHdpbGwgYmUgb25seSAyIG9mIHRoZXNlIGZvciBlYWNoIHN0cmVhbVxuZnVuY3Rpb24gQ29ya2VkUmVxdWVzdChzdGF0ZSkge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gIHRoaXMubmV4dCA9IG51bGw7XG4gIHRoaXMuZW50cnkgPSBudWxsO1xuICB0aGlzLmZpbmlzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICBvbkNvcmtlZEZpbmlzaChfdGhpcywgc3RhdGUpO1xuICB9O1xufVxuLyogPC9yZXBsYWNlbWVudD4gKi9cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBhc3luY1dyaXRlID0gIXByb2Nlc3MuYnJvd3NlciAmJiBbJ3YwLjEwJywgJ3YwLjkuJ10uaW5kZXhPZihwcm9jZXNzLnZlcnNpb24uc2xpY2UoMCwgNSkpID4gLTEgPyBzZXRJbW1lZGlhdGUgOiBwbmEubmV4dFRpY2s7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBEdXBsZXg7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuV3JpdGFibGUuV3JpdGFibGVTdGF0ZSA9IFdyaXRhYmxlU3RhdGU7XG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgdXRpbCA9IE9iamVjdC5jcmVhdGUocmVxdWlyZSgnY29yZS11dGlsLWlzJykpO1xudXRpbC5pbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBpbnRlcm5hbFV0aWwgPSB7XG4gIGRlcHJlY2F0ZTogcmVxdWlyZSgndXRpbC1kZXByZWNhdGUnKVxufTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIFN0cmVhbSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvc3RyZWFtcy9zdHJlYW0nKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG4vKjxyZXBsYWNlbWVudD4qL1xuXG52YXIgQnVmZmVyID0gcmVxdWlyZSgnc2FmZS1idWZmZXInKS5CdWZmZXI7XG52YXIgT3VyVWludDhBcnJheSA9ICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbCA6IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogdHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnID8gc2VsZiA6IHt9KS5VaW50OEFycmF5IHx8IGZ1bmN0aW9uICgpIHt9O1xuZnVuY3Rpb24gX3VpbnQ4QXJyYXlUb0J1ZmZlcihjaHVuaykge1xuICByZXR1cm4gQnVmZmVyLmZyb20oY2h1bmspO1xufVxuZnVuY3Rpb24gX2lzVWludDhBcnJheShvYmopIHtcbiAgcmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihvYmopIHx8IG9iaiBpbnN0YW5jZW9mIE91clVpbnQ4QXJyYXk7XG59XG5cbi8qPC9yZXBsYWNlbWVudD4qL1xuXG52YXIgZGVzdHJveUltcGwgPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvZGVzdHJveScpO1xuXG51dGlsLmluaGVyaXRzKFdyaXRhYmxlLCBTdHJlYW0pO1xuXG5mdW5jdGlvbiBub3AoKSB7fVxuXG5mdW5jdGlvbiBXcml0YWJsZVN0YXRlKG9wdGlvbnMsIHN0cmVhbSkge1xuICBEdXBsZXggPSBEdXBsZXggfHwgcmVxdWlyZSgnLi9fc3RyZWFtX2R1cGxleCcpO1xuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIC8vIER1cGxleCBzdHJlYW1zIGFyZSBib3RoIHJlYWRhYmxlIGFuZCB3cml0YWJsZSwgYnV0IHNoYXJlXG4gIC8vIHRoZSBzYW1lIG9wdGlvbnMgb2JqZWN0LlxuICAvLyBIb3dldmVyLCBzb21lIGNhc2VzIHJlcXVpcmUgc2V0dGluZyBvcHRpb25zIHRvIGRpZmZlcmVudFxuICAvLyB2YWx1ZXMgZm9yIHRoZSByZWFkYWJsZSBhbmQgdGhlIHdyaXRhYmxlIHNpZGVzIG9mIHRoZSBkdXBsZXggc3RyZWFtLlxuICAvLyBUaGVzZSBvcHRpb25zIGNhbiBiZSBwcm92aWRlZCBzZXBhcmF0ZWx5IGFzIHJlYWRhYmxlWFhYIGFuZCB3cml0YWJsZVhYWC5cbiAgdmFyIGlzRHVwbGV4ID0gc3RyZWFtIGluc3RhbmNlb2YgRHVwbGV4O1xuXG4gIC8vIG9iamVjdCBzdHJlYW0gZmxhZyB0byBpbmRpY2F0ZSB3aGV0aGVyIG9yIG5vdCB0aGlzIHN0cmVhbVxuICAvLyBjb250YWlucyBidWZmZXJzIG9yIG9iamVjdHMuXG4gIHRoaXMub2JqZWN0TW9kZSA9ICEhb3B0aW9ucy5vYmplY3RNb2RlO1xuXG4gIGlmIChpc0R1cGxleCkgdGhpcy5vYmplY3RNb2RlID0gdGhpcy5vYmplY3RNb2RlIHx8ICEhb3B0aW9ucy53cml0YWJsZU9iamVjdE1vZGU7XG5cbiAgLy8gdGhlIHBvaW50IGF0IHdoaWNoIHdyaXRlKCkgc3RhcnRzIHJldHVybmluZyBmYWxzZVxuICAvLyBOb3RlOiAwIGlzIGEgdmFsaWQgdmFsdWUsIG1lYW5zIHRoYXQgd2UgYWx3YXlzIHJldHVybiBmYWxzZSBpZlxuICAvLyB0aGUgZW50aXJlIGJ1ZmZlciBpcyBub3QgZmx1c2hlZCBpbW1lZGlhdGVseSBvbiB3cml0ZSgpXG4gIHZhciBod20gPSBvcHRpb25zLmhpZ2hXYXRlck1hcms7XG4gIHZhciB3cml0YWJsZUh3bSA9IG9wdGlvbnMud3JpdGFibGVIaWdoV2F0ZXJNYXJrO1xuICB2YXIgZGVmYXVsdEh3bSA9IHRoaXMub2JqZWN0TW9kZSA/IDE2IDogMTYgKiAxMDI0O1xuXG4gIGlmIChod20gfHwgaHdtID09PSAwKSB0aGlzLmhpZ2hXYXRlck1hcmsgPSBod207ZWxzZSBpZiAoaXNEdXBsZXggJiYgKHdyaXRhYmxlSHdtIHx8IHdyaXRhYmxlSHdtID09PSAwKSkgdGhpcy5oaWdoV2F0ZXJNYXJrID0gd3JpdGFibGVId207ZWxzZSB0aGlzLmhpZ2hXYXRlck1hcmsgPSBkZWZhdWx0SHdtO1xuXG4gIC8vIGNhc3QgdG8gaW50cy5cbiAgdGhpcy5oaWdoV2F0ZXJNYXJrID0gTWF0aC5mbG9vcih0aGlzLmhpZ2hXYXRlck1hcmspO1xuXG4gIC8vIGlmIF9maW5hbCBoYXMgYmVlbiBjYWxsZWRcbiAgdGhpcy5maW5hbENhbGxlZCA9IGZhbHNlO1xuXG4gIC8vIGRyYWluIGV2ZW50IGZsYWcuXG4gIHRoaXMubmVlZERyYWluID0gZmFsc2U7XG4gIC8vIGF0IHRoZSBzdGFydCBvZiBjYWxsaW5nIGVuZCgpXG4gIHRoaXMuZW5kaW5nID0gZmFsc2U7XG4gIC8vIHdoZW4gZW5kKCkgaGFzIGJlZW4gY2FsbGVkLCBhbmQgcmV0dXJuZWRcbiAgdGhpcy5lbmRlZCA9IGZhbHNlO1xuICAvLyB3aGVuICdmaW5pc2gnIGlzIGVtaXR0ZWRcbiAgdGhpcy5maW5pc2hlZCA9IGZhbHNlO1xuXG4gIC8vIGhhcyBpdCBiZWVuIGRlc3Ryb3llZFxuICB0aGlzLmRlc3Ryb3llZCA9IGZhbHNlO1xuXG4gIC8vIHNob3VsZCB3ZSBkZWNvZGUgc3RyaW5ncyBpbnRvIGJ1ZmZlcnMgYmVmb3JlIHBhc3NpbmcgdG8gX3dyaXRlP1xuICAvLyB0aGlzIGlzIGhlcmUgc28gdGhhdCBzb21lIG5vZGUtY29yZSBzdHJlYW1zIGNhbiBvcHRpbWl6ZSBzdHJpbmdcbiAgLy8gaGFuZGxpbmcgYXQgYSBsb3dlciBsZXZlbC5cbiAgdmFyIG5vRGVjb2RlID0gb3B0aW9ucy5kZWNvZGVTdHJpbmdzID09PSBmYWxzZTtcbiAgdGhpcy5kZWNvZGVTdHJpbmdzID0gIW5vRGVjb2RlO1xuXG4gIC8vIENyeXB0byBpcyBraW5kIG9mIG9sZCBhbmQgY3J1c3R5LiAgSGlzdG9yaWNhbGx5LCBpdHMgZGVmYXVsdCBzdHJpbmdcbiAgLy8gZW5jb2RpbmcgaXMgJ2JpbmFyeScgc28gd2UgaGF2ZSB0byBtYWtlIHRoaXMgY29uZmlndXJhYmxlLlxuICAvLyBFdmVyeXRoaW5nIGVsc2UgaW4gdGhlIHVuaXZlcnNlIHVzZXMgJ3V0ZjgnLCB0aG91Z2guXG4gIHRoaXMuZGVmYXVsdEVuY29kaW5nID0gb3B0aW9ucy5kZWZhdWx0RW5jb2RpbmcgfHwgJ3V0ZjgnO1xuXG4gIC8vIG5vdCBhbiBhY3R1YWwgYnVmZmVyIHdlIGtlZXAgdHJhY2sgb2YsIGJ1dCBhIG1lYXN1cmVtZW50XG4gIC8vIG9mIGhvdyBtdWNoIHdlJ3JlIHdhaXRpbmcgdG8gZ2V0IHB1c2hlZCB0byBzb21lIHVuZGVybHlpbmdcbiAgLy8gc29ja2V0IG9yIGZpbGUuXG4gIHRoaXMubGVuZ3RoID0gMDtcblxuICAvLyBhIGZsYWcgdG8gc2VlIHdoZW4gd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBhIHdyaXRlLlxuICB0aGlzLndyaXRpbmcgPSBmYWxzZTtcblxuICAvLyB3aGVuIHRydWUgYWxsIHdyaXRlcyB3aWxsIGJlIGJ1ZmZlcmVkIHVudGlsIC51bmNvcmsoKSBjYWxsXG4gIHRoaXMuY29ya2VkID0gMDtcblxuICAvLyBhIGZsYWcgdG8gYmUgYWJsZSB0byB0ZWxsIGlmIHRoZSBvbndyaXRlIGNiIGlzIGNhbGxlZCBpbW1lZGlhdGVseSxcbiAgLy8gb3Igb24gYSBsYXRlciB0aWNrLiAgV2Ugc2V0IHRoaXMgdG8gdHJ1ZSBhdCBmaXJzdCwgYmVjYXVzZSBhbnlcbiAgLy8gYWN0aW9ucyB0aGF0IHNob3VsZG4ndCBoYXBwZW4gdW50aWwgXCJsYXRlclwiIHNob3VsZCBnZW5lcmFsbHkgYWxzb1xuICAvLyBub3QgaGFwcGVuIGJlZm9yZSB0aGUgZmlyc3Qgd3JpdGUgY2FsbC5cbiAgdGhpcy5zeW5jID0gdHJ1ZTtcblxuICAvLyBhIGZsYWcgdG8ga25vdyBpZiB3ZSdyZSBwcm9jZXNzaW5nIHByZXZpb3VzbHkgYnVmZmVyZWQgaXRlbXMsIHdoaWNoXG4gIC8vIG1heSBjYWxsIHRoZSBfd3JpdGUoKSBjYWxsYmFjayBpbiB0aGUgc2FtZSB0aWNrLCBzbyB0aGF0IHdlIGRvbid0XG4gIC8vIGVuZCB1cCBpbiBhbiBvdmVybGFwcGVkIG9ud3JpdGUgc2l0dWF0aW9uLlxuICB0aGlzLmJ1ZmZlclByb2Nlc3NpbmcgPSBmYWxzZTtcblxuICAvLyB0aGUgY2FsbGJhY2sgdGhhdCdzIHBhc3NlZCB0byBfd3JpdGUoY2h1bmssY2IpXG4gIHRoaXMub253cml0ZSA9IGZ1bmN0aW9uIChlcikge1xuICAgIG9ud3JpdGUoc3RyZWFtLCBlcik7XG4gIH07XG5cbiAgLy8gdGhlIGNhbGxiYWNrIHRoYXQgdGhlIHVzZXIgc3VwcGxpZXMgdG8gd3JpdGUoY2h1bmssZW5jb2RpbmcsY2IpXG4gIHRoaXMud3JpdGVjYiA9IG51bGw7XG5cbiAgLy8gdGhlIGFtb3VudCB0aGF0IGlzIGJlaW5nIHdyaXR0ZW4gd2hlbiBfd3JpdGUgaXMgY2FsbGVkLlxuICB0aGlzLndyaXRlbGVuID0gMDtcblxuICB0aGlzLmJ1ZmZlcmVkUmVxdWVzdCA9IG51bGw7XG4gIHRoaXMubGFzdEJ1ZmZlcmVkUmVxdWVzdCA9IG51bGw7XG5cbiAgLy8gbnVtYmVyIG9mIHBlbmRpbmcgdXNlci1zdXBwbGllZCB3cml0ZSBjYWxsYmFja3NcbiAgLy8gdGhpcyBtdXN0IGJlIDAgYmVmb3JlICdmaW5pc2gnIGNhbiBiZSBlbWl0dGVkXG4gIHRoaXMucGVuZGluZ2NiID0gMDtcblxuICAvLyBlbWl0IHByZWZpbmlzaCBpZiB0aGUgb25seSB0aGluZyB3ZSdyZSB3YWl0aW5nIGZvciBpcyBfd3JpdGUgY2JzXG4gIC8vIFRoaXMgaXMgcmVsZXZhbnQgZm9yIHN5bmNocm9ub3VzIFRyYW5zZm9ybSBzdHJlYW1zXG4gIHRoaXMucHJlZmluaXNoZWQgPSBmYWxzZTtcblxuICAvLyBUcnVlIGlmIHRoZSBlcnJvciB3YXMgYWxyZWFkeSBlbWl0dGVkIGFuZCBzaG91bGQgbm90IGJlIHRocm93biBhZ2FpblxuICB0aGlzLmVycm9yRW1pdHRlZCA9IGZhbHNlO1xuXG4gIC8vIGNvdW50IGJ1ZmZlcmVkIHJlcXVlc3RzXG4gIHRoaXMuYnVmZmVyZWRSZXF1ZXN0Q291bnQgPSAwO1xuXG4gIC8vIGFsbG9jYXRlIHRoZSBmaXJzdCBDb3JrZWRSZXF1ZXN0LCB0aGVyZSBpcyBhbHdheXNcbiAgLy8gb25lIGFsbG9jYXRlZCBhbmQgZnJlZSB0byB1c2UsIGFuZCB3ZSBtYWludGFpbiBhdCBtb3N0IHR3b1xuICB0aGlzLmNvcmtlZFJlcXVlc3RzRnJlZSA9IG5ldyBDb3JrZWRSZXF1ZXN0KHRoaXMpO1xufVxuXG5Xcml0YWJsZVN0YXRlLnByb3RvdHlwZS5nZXRCdWZmZXIgPSBmdW5jdGlvbiBnZXRCdWZmZXIoKSB7XG4gIHZhciBjdXJyZW50ID0gdGhpcy5idWZmZXJlZFJlcXVlc3Q7XG4gIHZhciBvdXQgPSBbXTtcbiAgd2hpbGUgKGN1cnJlbnQpIHtcbiAgICBvdXQucHVzaChjdXJyZW50KTtcbiAgICBjdXJyZW50ID0gY3VycmVudC5uZXh0O1xuICB9XG4gIHJldHVybiBvdXQ7XG59O1xuXG4oZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXcml0YWJsZVN0YXRlLnByb3RvdHlwZSwgJ2J1ZmZlcicsIHtcbiAgICAgIGdldDogaW50ZXJuYWxVdGlsLmRlcHJlY2F0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEJ1ZmZlcigpO1xuICAgICAgfSwgJ193cml0YWJsZVN0YXRlLmJ1ZmZlciBpcyBkZXByZWNhdGVkLiBVc2UgX3dyaXRhYmxlU3RhdGUuZ2V0QnVmZmVyICcgKyAnaW5zdGVhZC4nLCAnREVQMDAwMycpXG4gICAgfSk7XG4gIH0gY2F0Y2ggKF8pIHt9XG59KSgpO1xuXG4vLyBUZXN0IF93cml0YWJsZVN0YXRlIGZvciBpbmhlcml0YW5jZSB0byBhY2NvdW50IGZvciBEdXBsZXggc3RyZWFtcyxcbi8vIHdob3NlIHByb3RvdHlwZSBjaGFpbiBvbmx5IHBvaW50cyB0byBSZWFkYWJsZS5cbnZhciByZWFsSGFzSW5zdGFuY2U7XG5pZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuaGFzSW5zdGFuY2UgJiYgdHlwZW9mIEZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdID09PSAnZnVuY3Rpb24nKSB7XG4gIHJlYWxIYXNJbnN0YW5jZSA9IEZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoV3JpdGFibGUsIFN5bWJvbC5oYXNJbnN0YW5jZSwge1xuICAgIHZhbHVlOiBmdW5jdGlvbiAob2JqZWN0KSB7XG4gICAgICBpZiAocmVhbEhhc0luc3RhbmNlLmNhbGwodGhpcywgb2JqZWN0KSkgcmV0dXJuIHRydWU7XG4gICAgICBpZiAodGhpcyAhPT0gV3JpdGFibGUpIHJldHVybiBmYWxzZTtcblxuICAgICAgcmV0dXJuIG9iamVjdCAmJiBvYmplY3QuX3dyaXRhYmxlU3RhdGUgaW5zdGFuY2VvZiBXcml0YWJsZVN0YXRlO1xuICAgIH1cbiAgfSk7XG59IGVsc2Uge1xuICByZWFsSGFzSW5zdGFuY2UgPSBmdW5jdGlvbiAob2JqZWN0KSB7XG4gICAgcmV0dXJuIG9iamVjdCBpbnN0YW5jZW9mIHRoaXM7XG4gIH07XG59XG5cbmZ1bmN0aW9uIFdyaXRhYmxlKG9wdGlvbnMpIHtcbiAgRHVwbGV4ID0gRHVwbGV4IHx8IHJlcXVpcmUoJy4vX3N0cmVhbV9kdXBsZXgnKTtcblxuICAvLyBXcml0YWJsZSBjdG9yIGlzIGFwcGxpZWQgdG8gRHVwbGV4ZXMsIHRvby5cbiAgLy8gYHJlYWxIYXNJbnN0YW5jZWAgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgdXNpbmcgcGxhaW4gYGluc3RhbmNlb2ZgXG4gIC8vIHdvdWxkIHJldHVybiBmYWxzZSwgYXMgbm8gYF93cml0YWJsZVN0YXRlYCBwcm9wZXJ0eSBpcyBhdHRhY2hlZC5cblxuICAvLyBUcnlpbmcgdG8gdXNlIHRoZSBjdXN0b20gYGluc3RhbmNlb2ZgIGZvciBXcml0YWJsZSBoZXJlIHdpbGwgYWxzbyBicmVhayB0aGVcbiAgLy8gTm9kZS5qcyBMYXp5VHJhbnNmb3JtIGltcGxlbWVudGF0aW9uLCB3aGljaCBoYXMgYSBub24tdHJpdmlhbCBnZXR0ZXIgZm9yXG4gIC8vIGBfd3JpdGFibGVTdGF0ZWAgdGhhdCB3b3VsZCBsZWFkIHRvIGluZmluaXRlIHJlY3Vyc2lvbi5cbiAgaWYgKCFyZWFsSGFzSW5zdGFuY2UuY2FsbChXcml0YWJsZSwgdGhpcykgJiYgISh0aGlzIGluc3RhbmNlb2YgRHVwbGV4KSkge1xuICAgIHJldHVybiBuZXcgV3JpdGFibGUob3B0aW9ucyk7XG4gIH1cblxuICB0aGlzLl93cml0YWJsZVN0YXRlID0gbmV3IFdyaXRhYmxlU3RhdGUob3B0aW9ucywgdGhpcyk7XG5cbiAgLy8gbGVnYWN5LlxuICB0aGlzLndyaXRhYmxlID0gdHJ1ZTtcblxuICBpZiAob3B0aW9ucykge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy53cml0ZSA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fd3JpdGUgPSBvcHRpb25zLndyaXRlO1xuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLndyaXRldiA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fd3JpdGV2ID0gb3B0aW9ucy53cml0ZXY7XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuZGVzdHJveSA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fZGVzdHJveSA9IG9wdGlvbnMuZGVzdHJveTtcblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5maW5hbCA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fZmluYWwgPSBvcHRpb25zLmZpbmFsO1xuICB9XG5cbiAgU3RyZWFtLmNhbGwodGhpcyk7XG59XG5cbi8vIE90aGVyd2lzZSBwZW9wbGUgY2FuIHBpcGUgV3JpdGFibGUgc3RyZWFtcywgd2hpY2ggaXMganVzdCB3cm9uZy5cbldyaXRhYmxlLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmVtaXQoJ2Vycm9yJywgbmV3IEVycm9yKCdDYW5ub3QgcGlwZSwgbm90IHJlYWRhYmxlJykpO1xufTtcblxuZnVuY3Rpb24gd3JpdGVBZnRlckVuZChzdHJlYW0sIGNiKSB7XG4gIHZhciBlciA9IG5ldyBFcnJvcignd3JpdGUgYWZ0ZXIgZW5kJyk7XG4gIC8vIFRPRE86IGRlZmVyIGVycm9yIGV2ZW50cyBjb25zaXN0ZW50bHkgZXZlcnl3aGVyZSwgbm90IGp1c3QgdGhlIGNiXG4gIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVyKTtcbiAgcG5hLm5leHRUaWNrKGNiLCBlcik7XG59XG5cbi8vIENoZWNrcyB0aGF0IGEgdXNlci1zdXBwbGllZCBjaHVuayBpcyB2YWxpZCwgZXNwZWNpYWxseSBmb3IgdGhlIHBhcnRpY3VsYXJcbi8vIG1vZGUgdGhlIHN0cmVhbSBpcyBpbi4gQ3VycmVudGx5IHRoaXMgbWVhbnMgdGhhdCBgbnVsbGAgaXMgbmV2ZXIgYWNjZXB0ZWRcbi8vIGFuZCB1bmRlZmluZWQvbm9uLXN0cmluZyB2YWx1ZXMgYXJlIG9ubHkgYWxsb3dlZCBpbiBvYmplY3QgbW9kZS5cbmZ1bmN0aW9uIHZhbGlkQ2h1bmsoc3RyZWFtLCBzdGF0ZSwgY2h1bmssIGNiKSB7XG4gIHZhciB2YWxpZCA9IHRydWU7XG4gIHZhciBlciA9IGZhbHNlO1xuXG4gIGlmIChjaHVuayA9PT0gbnVsbCkge1xuICAgIGVyID0gbmV3IFR5cGVFcnJvcignTWF5IG5vdCB3cml0ZSBudWxsIHZhbHVlcyB0byBzdHJlYW0nKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgY2h1bmsgIT09ICdzdHJpbmcnICYmIGNodW5rICE9PSB1bmRlZmluZWQgJiYgIXN0YXRlLm9iamVjdE1vZGUpIHtcbiAgICBlciA9IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgbm9uLXN0cmluZy9idWZmZXIgY2h1bmsnKTtcbiAgfVxuICBpZiAoZXIpIHtcbiAgICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcik7XG4gICAgcG5hLm5leHRUaWNrKGNiLCBlcik7XG4gICAgdmFsaWQgPSBmYWxzZTtcbiAgfVxuICByZXR1cm4gdmFsaWQ7XG59XG5cbldyaXRhYmxlLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3dyaXRhYmxlU3RhdGU7XG4gIHZhciByZXQgPSBmYWxzZTtcbiAgdmFyIGlzQnVmID0gIXN0YXRlLm9iamVjdE1vZGUgJiYgX2lzVWludDhBcnJheShjaHVuayk7XG5cbiAgaWYgKGlzQnVmICYmICFCdWZmZXIuaXNCdWZmZXIoY2h1bmspKSB7XG4gICAgY2h1bmsgPSBfdWludDhBcnJheVRvQnVmZmVyKGNodW5rKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYiA9IGVuY29kaW5nO1xuICAgIGVuY29kaW5nID0gbnVsbDtcbiAgfVxuXG4gIGlmIChpc0J1ZikgZW5jb2RpbmcgPSAnYnVmZmVyJztlbHNlIGlmICghZW5jb2RpbmcpIGVuY29kaW5nID0gc3RhdGUuZGVmYXVsdEVuY29kaW5nO1xuXG4gIGlmICh0eXBlb2YgY2IgIT09ICdmdW5jdGlvbicpIGNiID0gbm9wO1xuXG4gIGlmIChzdGF0ZS5lbmRlZCkgd3JpdGVBZnRlckVuZCh0aGlzLCBjYik7ZWxzZSBpZiAoaXNCdWYgfHwgdmFsaWRDaHVuayh0aGlzLCBzdGF0ZSwgY2h1bmssIGNiKSkge1xuICAgIHN0YXRlLnBlbmRpbmdjYisrO1xuICAgIHJldCA9IHdyaXRlT3JCdWZmZXIodGhpcywgc3RhdGUsIGlzQnVmLCBjaHVuaywgZW5jb2RpbmcsIGNiKTtcbiAgfVxuXG4gIHJldHVybiByZXQ7XG59O1xuXG5Xcml0YWJsZS5wcm90b3R5cGUuY29yayA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fd3JpdGFibGVTdGF0ZTtcblxuICBzdGF0ZS5jb3JrZWQrKztcbn07XG5cbldyaXRhYmxlLnByb3RvdHlwZS51bmNvcmsgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3dyaXRhYmxlU3RhdGU7XG5cbiAgaWYgKHN0YXRlLmNvcmtlZCkge1xuICAgIHN0YXRlLmNvcmtlZC0tO1xuXG4gICAgaWYgKCFzdGF0ZS53cml0aW5nICYmICFzdGF0ZS5jb3JrZWQgJiYgIXN0YXRlLmJ1ZmZlclByb2Nlc3NpbmcgJiYgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0KSBjbGVhckJ1ZmZlcih0aGlzLCBzdGF0ZSk7XG4gIH1cbn07XG5cbldyaXRhYmxlLnByb3RvdHlwZS5zZXREZWZhdWx0RW5jb2RpbmcgPSBmdW5jdGlvbiBzZXREZWZhdWx0RW5jb2RpbmcoZW5jb2RpbmcpIHtcbiAgLy8gbm9kZTo6UGFyc2VFbmNvZGluZygpIHJlcXVpcmVzIGxvd2VyIGNhc2UuXG4gIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnKSBlbmNvZGluZyA9IGVuY29kaW5nLnRvTG93ZXJDYXNlKCk7XG4gIGlmICghKFsnaGV4JywgJ3V0ZjgnLCAndXRmLTgnLCAnYXNjaWknLCAnYmluYXJ5JywgJ2Jhc2U2NCcsICd1Y3MyJywgJ3Vjcy0yJywgJ3V0ZjE2bGUnLCAndXRmLTE2bGUnLCAncmF3J10uaW5kZXhPZigoZW5jb2RpbmcgKyAnJykudG9Mb3dlckNhc2UoKSkgPiAtMSkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZyk7XG4gIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVmYXVsdEVuY29kaW5nID0gZW5jb2Rpbmc7XG4gIHJldHVybiB0aGlzO1xufTtcblxuZnVuY3Rpb24gZGVjb2RlQ2h1bmsoc3RhdGUsIGNodW5rLCBlbmNvZGluZykge1xuICBpZiAoIXN0YXRlLm9iamVjdE1vZGUgJiYgc3RhdGUuZGVjb2RlU3RyaW5ncyAhPT0gZmFsc2UgJiYgdHlwZW9mIGNodW5rID09PSAnc3RyaW5nJykge1xuICAgIGNodW5rID0gQnVmZmVyLmZyb20oY2h1bmssIGVuY29kaW5nKTtcbiAgfVxuICByZXR1cm4gY2h1bms7XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShXcml0YWJsZS5wcm90b3R5cGUsICd3cml0YWJsZUhpZ2hXYXRlck1hcmsnLCB7XG4gIC8vIG1ha2luZyBpdCBleHBsaWNpdCB0aGlzIHByb3BlcnR5IGlzIG5vdCBlbnVtZXJhYmxlXG4gIC8vIGJlY2F1c2Ugb3RoZXJ3aXNlIHNvbWUgcHJvdG90eXBlIG1hbmlwdWxhdGlvbiBpblxuICAvLyB1c2VybGFuZCB3aWxsIGZhaWxcbiAgZW51bWVyYWJsZTogZmFsc2UsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcms7XG4gIH1cbn0pO1xuXG4vLyBpZiB3ZSdyZSBhbHJlYWR5IHdyaXRpbmcgc29tZXRoaW5nLCB0aGVuIGp1c3QgcHV0IHRoaXNcbi8vIGluIHRoZSBxdWV1ZSwgYW5kIHdhaXQgb3VyIHR1cm4uICBPdGhlcndpc2UsIGNhbGwgX3dyaXRlXG4vLyBJZiB3ZSByZXR1cm4gZmFsc2UsIHRoZW4gd2UgbmVlZCBhIGRyYWluIGV2ZW50LCBzbyBzZXQgdGhhdCBmbGFnLlxuZnVuY3Rpb24gd3JpdGVPckJ1ZmZlcihzdHJlYW0sIHN0YXRlLCBpc0J1ZiwgY2h1bmssIGVuY29kaW5nLCBjYikge1xuICBpZiAoIWlzQnVmKSB7XG4gICAgdmFyIG5ld0NodW5rID0gZGVjb2RlQ2h1bmsoc3RhdGUsIGNodW5rLCBlbmNvZGluZyk7XG4gICAgaWYgKGNodW5rICE9PSBuZXdDaHVuaykge1xuICAgICAgaXNCdWYgPSB0cnVlO1xuICAgICAgZW5jb2RpbmcgPSAnYnVmZmVyJztcbiAgICAgIGNodW5rID0gbmV3Q2h1bms7XG4gICAgfVxuICB9XG4gIHZhciBsZW4gPSBzdGF0ZS5vYmplY3RNb2RlID8gMSA6IGNodW5rLmxlbmd0aDtcblxuICBzdGF0ZS5sZW5ndGggKz0gbGVuO1xuXG4gIHZhciByZXQgPSBzdGF0ZS5sZW5ndGggPCBzdGF0ZS5oaWdoV2F0ZXJNYXJrO1xuICAvLyB3ZSBtdXN0IGVuc3VyZSB0aGF0IHByZXZpb3VzIG5lZWREcmFpbiB3aWxsIG5vdCBiZSByZXNldCB0byBmYWxzZS5cbiAgaWYgKCFyZXQpIHN0YXRlLm5lZWREcmFpbiA9IHRydWU7XG5cbiAgaWYgKHN0YXRlLndyaXRpbmcgfHwgc3RhdGUuY29ya2VkKSB7XG4gICAgdmFyIGxhc3QgPSBzdGF0ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0O1xuICAgIHN0YXRlLmxhc3RCdWZmZXJlZFJlcXVlc3QgPSB7XG4gICAgICBjaHVuazogY2h1bmssXG4gICAgICBlbmNvZGluZzogZW5jb2RpbmcsXG4gICAgICBpc0J1ZjogaXNCdWYsXG4gICAgICBjYWxsYmFjazogY2IsXG4gICAgICBuZXh0OiBudWxsXG4gICAgfTtcbiAgICBpZiAobGFzdCkge1xuICAgICAgbGFzdC5uZXh0ID0gc3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0ID0gc3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdDtcbiAgICB9XG4gICAgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0Q291bnQgKz0gMTtcbiAgfSBlbHNlIHtcbiAgICBkb1dyaXRlKHN0cmVhbSwgc3RhdGUsIGZhbHNlLCBsZW4sIGNodW5rLCBlbmNvZGluZywgY2IpO1xuICB9XG5cbiAgcmV0dXJuIHJldDtcbn1cblxuZnVuY3Rpb24gZG9Xcml0ZShzdHJlYW0sIHN0YXRlLCB3cml0ZXYsIGxlbiwgY2h1bmssIGVuY29kaW5nLCBjYikge1xuICBzdGF0ZS53cml0ZWxlbiA9IGxlbjtcbiAgc3RhdGUud3JpdGVjYiA9IGNiO1xuICBzdGF0ZS53cml0aW5nID0gdHJ1ZTtcbiAgc3RhdGUuc3luYyA9IHRydWU7XG4gIGlmICh3cml0ZXYpIHN0cmVhbS5fd3JpdGV2KGNodW5rLCBzdGF0ZS5vbndyaXRlKTtlbHNlIHN0cmVhbS5fd3JpdGUoY2h1bmssIGVuY29kaW5nLCBzdGF0ZS5vbndyaXRlKTtcbiAgc3RhdGUuc3luYyA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBvbndyaXRlRXJyb3Ioc3RyZWFtLCBzdGF0ZSwgc3luYywgZXIsIGNiKSB7XG4gIC0tc3RhdGUucGVuZGluZ2NiO1xuXG4gIGlmIChzeW5jKSB7XG4gICAgLy8gZGVmZXIgdGhlIGNhbGxiYWNrIGlmIHdlIGFyZSBiZWluZyBjYWxsZWQgc3luY2hyb25vdXNseVxuICAgIC8vIHRvIGF2b2lkIHBpbGluZyB1cCB0aGluZ3Mgb24gdGhlIHN0YWNrXG4gICAgcG5hLm5leHRUaWNrKGNiLCBlcik7XG4gICAgLy8gdGhpcyBjYW4gZW1pdCBmaW5pc2gsIGFuZCBpdCB3aWxsIGFsd2F5cyBoYXBwZW5cbiAgICAvLyBhZnRlciBlcnJvclxuICAgIHBuYS5uZXh0VGljayhmaW5pc2hNYXliZSwgc3RyZWFtLCBzdGF0ZSk7XG4gICAgc3RyZWFtLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZCA9IHRydWU7XG4gICAgc3RyZWFtLmVtaXQoJ2Vycm9yJywgZXIpO1xuICB9IGVsc2Uge1xuICAgIC8vIHRoZSBjYWxsZXIgZXhwZWN0IHRoaXMgdG8gaGFwcGVuIGJlZm9yZSBpZlxuICAgIC8vIGl0IGlzIGFzeW5jXG4gICAgY2IoZXIpO1xuICAgIHN0cmVhbS5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQgPSB0cnVlO1xuICAgIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVyKTtcbiAgICAvLyB0aGlzIGNhbiBlbWl0IGZpbmlzaCwgYnV0IGZpbmlzaCBtdXN0XG4gICAgLy8gYWx3YXlzIGZvbGxvdyBlcnJvclxuICAgIGZpbmlzaE1heWJlKHN0cmVhbSwgc3RhdGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG9ud3JpdGVTdGF0ZVVwZGF0ZShzdGF0ZSkge1xuICBzdGF0ZS53cml0aW5nID0gZmFsc2U7XG4gIHN0YXRlLndyaXRlY2IgPSBudWxsO1xuICBzdGF0ZS5sZW5ndGggLT0gc3RhdGUud3JpdGVsZW47XG4gIHN0YXRlLndyaXRlbGVuID0gMDtcbn1cblxuZnVuY3Rpb24gb253cml0ZShzdHJlYW0sIGVyKSB7XG4gIHZhciBzdGF0ZSA9IHN0cmVhbS5fd3JpdGFibGVTdGF0ZTtcbiAgdmFyIHN5bmMgPSBzdGF0ZS5zeW5jO1xuICB2YXIgY2IgPSBzdGF0ZS53cml0ZWNiO1xuXG4gIG9ud3JpdGVTdGF0ZVVwZGF0ZShzdGF0ZSk7XG5cbiAgaWYgKGVyKSBvbndyaXRlRXJyb3Ioc3RyZWFtLCBzdGF0ZSwgc3luYywgZXIsIGNiKTtlbHNlIHtcbiAgICAvLyBDaGVjayBpZiB3ZSdyZSBhY3R1YWxseSByZWFkeSB0byBmaW5pc2gsIGJ1dCBkb24ndCBlbWl0IHlldFxuICAgIHZhciBmaW5pc2hlZCA9IG5lZWRGaW5pc2goc3RhdGUpO1xuXG4gICAgaWYgKCFmaW5pc2hlZCAmJiAhc3RhdGUuY29ya2VkICYmICFzdGF0ZS5idWZmZXJQcm9jZXNzaW5nICYmIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdCkge1xuICAgICAgY2xlYXJCdWZmZXIoc3RyZWFtLCBzdGF0ZSk7XG4gICAgfVxuXG4gICAgaWYgKHN5bmMpIHtcbiAgICAgIC8qPHJlcGxhY2VtZW50PiovXG4gICAgICBhc3luY1dyaXRlKGFmdGVyV3JpdGUsIHN0cmVhbSwgc3RhdGUsIGZpbmlzaGVkLCBjYik7XG4gICAgICAvKjwvcmVwbGFjZW1lbnQ+Ki9cbiAgICB9IGVsc2Uge1xuICAgICAgYWZ0ZXJXcml0ZShzdHJlYW0sIHN0YXRlLCBmaW5pc2hlZCwgY2IpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhZnRlcldyaXRlKHN0cmVhbSwgc3RhdGUsIGZpbmlzaGVkLCBjYikge1xuICBpZiAoIWZpbmlzaGVkKSBvbndyaXRlRHJhaW4oc3RyZWFtLCBzdGF0ZSk7XG4gIHN0YXRlLnBlbmRpbmdjYi0tO1xuICBjYigpO1xuICBmaW5pc2hNYXliZShzdHJlYW0sIHN0YXRlKTtcbn1cblxuLy8gTXVzdCBmb3JjZSBjYWxsYmFjayB0byBiZSBjYWxsZWQgb24gbmV4dFRpY2ssIHNvIHRoYXQgd2UgZG9uJ3Rcbi8vIGVtaXQgJ2RyYWluJyBiZWZvcmUgdGhlIHdyaXRlKCkgY29uc3VtZXIgZ2V0cyB0aGUgJ2ZhbHNlJyByZXR1cm5cbi8vIHZhbHVlLCBhbmQgaGFzIGEgY2hhbmNlIHRvIGF0dGFjaCBhICdkcmFpbicgbGlzdGVuZXIuXG5mdW5jdGlvbiBvbndyaXRlRHJhaW4oc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoc3RhdGUubGVuZ3RoID09PSAwICYmIHN0YXRlLm5lZWREcmFpbikge1xuICAgIHN0YXRlLm5lZWREcmFpbiA9IGZhbHNlO1xuICAgIHN0cmVhbS5lbWl0KCdkcmFpbicpO1xuICB9XG59XG5cbi8vIGlmIHRoZXJlJ3Mgc29tZXRoaW5nIGluIHRoZSBidWZmZXIgd2FpdGluZywgdGhlbiBwcm9jZXNzIGl0XG5mdW5jdGlvbiBjbGVhckJ1ZmZlcihzdHJlYW0sIHN0YXRlKSB7XG4gIHN0YXRlLmJ1ZmZlclByb2Nlc3NpbmcgPSB0cnVlO1xuICB2YXIgZW50cnkgPSBzdGF0ZS5idWZmZXJlZFJlcXVlc3Q7XG5cbiAgaWYgKHN0cmVhbS5fd3JpdGV2ICYmIGVudHJ5ICYmIGVudHJ5Lm5leHQpIHtcbiAgICAvLyBGYXN0IGNhc2UsIHdyaXRlIGV2ZXJ5dGhpbmcgdXNpbmcgX3dyaXRldigpXG4gICAgdmFyIGwgPSBzdGF0ZS5idWZmZXJlZFJlcXVlc3RDb3VudDtcbiAgICB2YXIgYnVmZmVyID0gbmV3IEFycmF5KGwpO1xuICAgIHZhciBob2xkZXIgPSBzdGF0ZS5jb3JrZWRSZXF1ZXN0c0ZyZWU7XG4gICAgaG9sZGVyLmVudHJ5ID0gZW50cnk7XG5cbiAgICB2YXIgY291bnQgPSAwO1xuICAgIHZhciBhbGxCdWZmZXJzID0gdHJ1ZTtcbiAgICB3aGlsZSAoZW50cnkpIHtcbiAgICAgIGJ1ZmZlcltjb3VudF0gPSBlbnRyeTtcbiAgICAgIGlmICghZW50cnkuaXNCdWYpIGFsbEJ1ZmZlcnMgPSBmYWxzZTtcbiAgICAgIGVudHJ5ID0gZW50cnkubmV4dDtcbiAgICAgIGNvdW50ICs9IDE7XG4gICAgfVxuICAgIGJ1ZmZlci5hbGxCdWZmZXJzID0gYWxsQnVmZmVycztcblxuICAgIGRvV3JpdGUoc3RyZWFtLCBzdGF0ZSwgdHJ1ZSwgc3RhdGUubGVuZ3RoLCBidWZmZXIsICcnLCBob2xkZXIuZmluaXNoKTtcblxuICAgIC8vIGRvV3JpdGUgaXMgYWxtb3N0IGFsd2F5cyBhc3luYywgZGVmZXIgdGhlc2UgdG8gc2F2ZSBhIGJpdCBvZiB0aW1lXG4gICAgLy8gYXMgdGhlIGhvdCBwYXRoIGVuZHMgd2l0aCBkb1dyaXRlXG4gICAgc3RhdGUucGVuZGluZ2NiKys7XG4gICAgc3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdCA9IG51bGw7XG4gICAgaWYgKGhvbGRlci5uZXh0KSB7XG4gICAgICBzdGF0ZS5jb3JrZWRSZXF1ZXN0c0ZyZWUgPSBob2xkZXIubmV4dDtcbiAgICAgIGhvbGRlci5uZXh0ID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUuY29ya2VkUmVxdWVzdHNGcmVlID0gbmV3IENvcmtlZFJlcXVlc3Qoc3RhdGUpO1xuICAgIH1cbiAgICBzdGF0ZS5idWZmZXJlZFJlcXVlc3RDb3VudCA9IDA7XG4gIH0gZWxzZSB7XG4gICAgLy8gU2xvdyBjYXNlLCB3cml0ZSBjaHVua3Mgb25lLWJ5LW9uZVxuICAgIHdoaWxlIChlbnRyeSkge1xuICAgICAgdmFyIGNodW5rID0gZW50cnkuY2h1bms7XG4gICAgICB2YXIgZW5jb2RpbmcgPSBlbnRyeS5lbmNvZGluZztcbiAgICAgIHZhciBjYiA9IGVudHJ5LmNhbGxiYWNrO1xuICAgICAgdmFyIGxlbiA9IHN0YXRlLm9iamVjdE1vZGUgPyAxIDogY2h1bmsubGVuZ3RoO1xuXG4gICAgICBkb1dyaXRlKHN0cmVhbSwgc3RhdGUsIGZhbHNlLCBsZW4sIGNodW5rLCBlbmNvZGluZywgY2IpO1xuICAgICAgZW50cnkgPSBlbnRyeS5uZXh0O1xuICAgICAgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0Q291bnQtLTtcbiAgICAgIC8vIGlmIHdlIGRpZG4ndCBjYWxsIHRoZSBvbndyaXRlIGltbWVkaWF0ZWx5LCB0aGVuXG4gICAgICAvLyBpdCBtZWFucyB0aGF0IHdlIG5lZWQgdG8gd2FpdCB1bnRpbCBpdCBkb2VzLlxuICAgICAgLy8gYWxzbywgdGhhdCBtZWFucyB0aGF0IHRoZSBjaHVuayBhbmQgY2IgYXJlIGN1cnJlbnRseVxuICAgICAgLy8gYmVpbmcgcHJvY2Vzc2VkLCBzbyBtb3ZlIHRoZSBidWZmZXIgY291bnRlciBwYXN0IHRoZW0uXG4gICAgICBpZiAoc3RhdGUud3JpdGluZykge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZW50cnkgPT09IG51bGwpIHN0YXRlLmxhc3RCdWZmZXJlZFJlcXVlc3QgPSBudWxsO1xuICB9XG5cbiAgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0ID0gZW50cnk7XG4gIHN0YXRlLmJ1ZmZlclByb2Nlc3NpbmcgPSBmYWxzZTtcbn1cblxuV3JpdGFibGUucHJvdG90eXBlLl93cml0ZSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIGNiKG5ldyBFcnJvcignX3dyaXRlKCkgaXMgbm90IGltcGxlbWVudGVkJykpO1xufTtcblxuV3JpdGFibGUucHJvdG90eXBlLl93cml0ZXYgPSBudWxsO1xuXG5Xcml0YWJsZS5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fd3JpdGFibGVTdGF0ZTtcblxuICBpZiAodHlwZW9mIGNodW5rID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2IgPSBjaHVuaztcbiAgICBjaHVuayA9IG51bGw7XG4gICAgZW5jb2RpbmcgPSBudWxsO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNiID0gZW5jb2Rpbmc7XG4gICAgZW5jb2RpbmcgPSBudWxsO1xuICB9XG5cbiAgaWYgKGNodW5rICE9PSBudWxsICYmIGNodW5rICE9PSB1bmRlZmluZWQpIHRoaXMud3JpdGUoY2h1bmssIGVuY29kaW5nKTtcblxuICAvLyAuZW5kKCkgZnVsbHkgdW5jb3Jrc1xuICBpZiAoc3RhdGUuY29ya2VkKSB7XG4gICAgc3RhdGUuY29ya2VkID0gMTtcbiAgICB0aGlzLnVuY29yaygpO1xuICB9XG5cbiAgLy8gaWdub3JlIHVubmVjZXNzYXJ5IGVuZCgpIGNhbGxzLlxuICBpZiAoIXN0YXRlLmVuZGluZykgZW5kV3JpdGFibGUodGhpcywgc3RhdGUsIGNiKTtcbn07XG5cbmZ1bmN0aW9uIG5lZWRGaW5pc2goc3RhdGUpIHtcbiAgcmV0dXJuIHN0YXRlLmVuZGluZyAmJiBzdGF0ZS5sZW5ndGggPT09IDAgJiYgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0ID09PSBudWxsICYmICFzdGF0ZS5maW5pc2hlZCAmJiAhc3RhdGUud3JpdGluZztcbn1cbmZ1bmN0aW9uIGNhbGxGaW5hbChzdHJlYW0sIHN0YXRlKSB7XG4gIHN0cmVhbS5fZmluYWwoZnVuY3Rpb24gKGVycikge1xuICAgIHN0YXRlLnBlbmRpbmdjYi0tO1xuICAgIGlmIChlcnIpIHtcbiAgICAgIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVycik7XG4gICAgfVxuICAgIHN0YXRlLnByZWZpbmlzaGVkID0gdHJ1ZTtcbiAgICBzdHJlYW0uZW1pdCgncHJlZmluaXNoJyk7XG4gICAgZmluaXNoTWF5YmUoc3RyZWFtLCBzdGF0ZSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gcHJlZmluaXNoKHN0cmVhbSwgc3RhdGUpIHtcbiAgaWYgKCFzdGF0ZS5wcmVmaW5pc2hlZCAmJiAhc3RhdGUuZmluYWxDYWxsZWQpIHtcbiAgICBpZiAodHlwZW9mIHN0cmVhbS5fZmluYWwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHN0YXRlLnBlbmRpbmdjYisrO1xuICAgICAgc3RhdGUuZmluYWxDYWxsZWQgPSB0cnVlO1xuICAgICAgcG5hLm5leHRUaWNrKGNhbGxGaW5hbCwgc3RyZWFtLCBzdGF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLnByZWZpbmlzaGVkID0gdHJ1ZTtcbiAgICAgIHN0cmVhbS5lbWl0KCdwcmVmaW5pc2gnKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluaXNoTWF5YmUoc3RyZWFtLCBzdGF0ZSkge1xuICB2YXIgbmVlZCA9IG5lZWRGaW5pc2goc3RhdGUpO1xuICBpZiAobmVlZCkge1xuICAgIHByZWZpbmlzaChzdHJlYW0sIHN0YXRlKTtcbiAgICBpZiAoc3RhdGUucGVuZGluZ2NiID09PSAwKSB7XG4gICAgICBzdGF0ZS5maW5pc2hlZCA9IHRydWU7XG4gICAgICBzdHJlYW0uZW1pdCgnZmluaXNoJyk7XG4gICAgfVxuICB9XG4gIHJldHVybiBuZWVkO1xufVxuXG5mdW5jdGlvbiBlbmRXcml0YWJsZShzdHJlYW0sIHN0YXRlLCBjYikge1xuICBzdGF0ZS5lbmRpbmcgPSB0cnVlO1xuICBmaW5pc2hNYXliZShzdHJlYW0sIHN0YXRlKTtcbiAgaWYgKGNiKSB7XG4gICAgaWYgKHN0YXRlLmZpbmlzaGVkKSBwbmEubmV4dFRpY2soY2IpO2Vsc2Ugc3RyZWFtLm9uY2UoJ2ZpbmlzaCcsIGNiKTtcbiAgfVxuICBzdGF0ZS5lbmRlZCA9IHRydWU7XG4gIHN0cmVhbS53cml0YWJsZSA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBvbkNvcmtlZEZpbmlzaChjb3JrUmVxLCBzdGF0ZSwgZXJyKSB7XG4gIHZhciBlbnRyeSA9IGNvcmtSZXEuZW50cnk7XG4gIGNvcmtSZXEuZW50cnkgPSBudWxsO1xuICB3aGlsZSAoZW50cnkpIHtcbiAgICB2YXIgY2IgPSBlbnRyeS5jYWxsYmFjaztcbiAgICBzdGF0ZS5wZW5kaW5nY2ItLTtcbiAgICBjYihlcnIpO1xuICAgIGVudHJ5ID0gZW50cnkubmV4dDtcbiAgfVxuXG4gIC8vIHJldXNlIHRoZSBmcmVlIGNvcmtSZXEuXG4gIHN0YXRlLmNvcmtlZFJlcXVlc3RzRnJlZS5uZXh0ID0gY29ya1JlcTtcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFdyaXRhYmxlLnByb3RvdHlwZSwgJ2Rlc3Ryb3llZCcsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMuX3dyaXRhYmxlU3RhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgLy8gd2UgaWdub3JlIHRoZSB2YWx1ZSBpZiB0aGUgc3RyZWFtXG4gICAgLy8gaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkIHlldFxuICAgIGlmICghdGhpcy5fd3JpdGFibGVTdGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHRoZSB1c2VyIGlzIGV4cGxpY2l0bHlcbiAgICAvLyBtYW5hZ2luZyBkZXN0cm95ZWRcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZCA9IHZhbHVlO1xuICB9XG59KTtcblxuV3JpdGFibGUucHJvdG90eXBlLmRlc3Ryb3kgPSBkZXN0cm95SW1wbC5kZXN0cm95O1xuV3JpdGFibGUucHJvdG90eXBlLl91bmRlc3Ryb3kgPSBkZXN0cm95SW1wbC51bmRlc3Ryb3k7XG5Xcml0YWJsZS5wcm90b3R5cGUuX2Rlc3Ryb3kgPSBmdW5jdGlvbiAoZXJyLCBjYikge1xuICB0aGlzLmVuZCgpO1xuICBjYihlcnIpO1xufTsiLAogICAgIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyBhIGR1cGxleCBzdHJlYW0gaXMganVzdCBhIHN0cmVhbSB0aGF0IGlzIGJvdGggcmVhZGFibGUgYW5kIHdyaXRhYmxlLlxuLy8gU2luY2UgSlMgZG9lc24ndCBoYXZlIG11bHRpcGxlIHByb3RvdHlwYWwgaW5oZXJpdGFuY2UsIHRoaXMgY2xhc3Ncbi8vIHByb3RvdHlwYWxseSBpbmhlcml0cyBmcm9tIFJlYWRhYmxlLCBhbmQgdGhlbiBwYXJhc2l0aWNhbGx5IGZyb21cbi8vIFdyaXRhYmxlLlxuXG4ndXNlIHN0cmljdCc7XG5cbi8qPHJlcGxhY2VtZW50PiovXG5cbnZhciBwbmEgPSByZXF1aXJlKCdwcm9jZXNzLW5leHRpY2stYXJncycpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgdmFyIGtleXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgIGtleXMucHVzaChrZXkpO1xuICB9cmV0dXJuIGtleXM7XG59O1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbm1vZHVsZS5leHBvcnRzID0gRHVwbGV4O1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIHV0aWwgPSBPYmplY3QuY3JlYXRlKHJlcXVpcmUoJ2NvcmUtdXRpbC1pcycpKTtcbnV0aWwuaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbnZhciBSZWFkYWJsZSA9IHJlcXVpcmUoJy4vX3N0cmVhbV9yZWFkYWJsZScpO1xudmFyIFdyaXRhYmxlID0gcmVxdWlyZSgnLi9fc3RyZWFtX3dyaXRhYmxlJyk7XG5cbnV0aWwuaW5oZXJpdHMoRHVwbGV4LCBSZWFkYWJsZSk7XG5cbntcbiAgLy8gYXZvaWQgc2NvcGUgY3JlZXAsIHRoZSBrZXlzIGFycmF5IGNhbiB0aGVuIGJlIGNvbGxlY3RlZFxuICB2YXIga2V5cyA9IG9iamVjdEtleXMoV3JpdGFibGUucHJvdG90eXBlKTtcbiAgZm9yICh2YXIgdiA9IDA7IHYgPCBrZXlzLmxlbmd0aDsgdisrKSB7XG4gICAgdmFyIG1ldGhvZCA9IGtleXNbdl07XG4gICAgaWYgKCFEdXBsZXgucHJvdG90eXBlW21ldGhvZF0pIER1cGxleC5wcm90b3R5cGVbbWV0aG9kXSA9IFdyaXRhYmxlLnByb3RvdHlwZVttZXRob2RdO1xuICB9XG59XG5cbmZ1bmN0aW9uIER1cGxleChvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBEdXBsZXgpKSByZXR1cm4gbmV3IER1cGxleChvcHRpb25zKTtcblxuICBSZWFkYWJsZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuICBXcml0YWJsZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMucmVhZGFibGUgPT09IGZhbHNlKSB0aGlzLnJlYWRhYmxlID0gZmFsc2U7XG5cbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy53cml0YWJsZSA9PT0gZmFsc2UpIHRoaXMud3JpdGFibGUgPSBmYWxzZTtcblxuICB0aGlzLmFsbG93SGFsZk9wZW4gPSB0cnVlO1xuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmFsbG93SGFsZk9wZW4gPT09IGZhbHNlKSB0aGlzLmFsbG93SGFsZk9wZW4gPSBmYWxzZTtcblxuICB0aGlzLm9uY2UoJ2VuZCcsIG9uZW5kKTtcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KER1cGxleC5wcm90b3R5cGUsICd3cml0YWJsZUhpZ2hXYXRlck1hcmsnLCB7XG4gIC8vIG1ha2luZyBpdCBleHBsaWNpdCB0aGlzIHByb3BlcnR5IGlzIG5vdCBlbnVtZXJhYmxlXG4gIC8vIGJlY2F1c2Ugb3RoZXJ3aXNlIHNvbWUgcHJvdG90eXBlIG1hbmlwdWxhdGlvbiBpblxuICAvLyB1c2VybGFuZCB3aWxsIGZhaWxcbiAgZW51bWVyYWJsZTogZmFsc2UsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcms7XG4gIH1cbn0pO1xuXG4vLyB0aGUgbm8taGFsZi1vcGVuIGVuZm9yY2VyXG5mdW5jdGlvbiBvbmVuZCgpIHtcbiAgLy8gaWYgd2UgYWxsb3cgaGFsZi1vcGVuIHN0YXRlLCBvciBpZiB0aGUgd3JpdGFibGUgc2lkZSBlbmRlZCxcbiAgLy8gdGhlbiB3ZSdyZSBvay5cbiAgaWYgKHRoaXMuYWxsb3dIYWxmT3BlbiB8fCB0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkKSByZXR1cm47XG5cbiAgLy8gbm8gbW9yZSBkYXRhIGNhbiBiZSB3cml0dGVuLlxuICAvLyBCdXQgYWxsb3cgbW9yZSB3cml0ZXMgdG8gaGFwcGVuIGluIHRoaXMgdGljay5cbiAgcG5hLm5leHRUaWNrKG9uRW5kTlQsIHRoaXMpO1xufVxuXG5mdW5jdGlvbiBvbkVuZE5UKHNlbGYpIHtcbiAgc2VsZi5lbmQoKTtcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KER1cGxleC5wcm90b3R5cGUsICdkZXN0cm95ZWQnLCB7XG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlID09PSB1bmRlZmluZWQgfHwgdGhpcy5fd3JpdGFibGVTdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCAmJiB0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZDtcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAvLyB3ZSBpZ25vcmUgdGhlIHZhbHVlIGlmIHRoZSBzdHJlYW1cbiAgICAvLyBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgeWV0XG4gICAgaWYgKHRoaXMuX3JlYWRhYmxlU3RhdGUgPT09IHVuZGVmaW5lZCB8fCB0aGlzLl93cml0YWJsZVN0YXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB0aGUgdXNlciBpcyBleHBsaWNpdGx5XG4gICAgLy8gbWFuYWdpbmcgZGVzdHJveWVkXG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQgPSB2YWx1ZTtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZCA9IHZhbHVlO1xuICB9XG59KTtcblxuRHVwbGV4LnByb3RvdHlwZS5fZGVzdHJveSA9IGZ1bmN0aW9uIChlcnIsIGNiKSB7XG4gIHRoaXMucHVzaChudWxsKTtcbiAgdGhpcy5lbmQoKTtcblxuICBwbmEubmV4dFRpY2soY2IsIGVycik7XG59OyIsCiAgICAiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cblxudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ3NhZmUtYnVmZmVyJykuQnVmZmVyO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbnZhciBpc0VuY29kaW5nID0gQnVmZmVyLmlzRW5jb2RpbmcgfHwgZnVuY3Rpb24gKGVuY29kaW5nKSB7XG4gIGVuY29kaW5nID0gJycgKyBlbmNvZGluZztcbiAgc3dpdGNoIChlbmNvZGluZyAmJiBlbmNvZGluZy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgY2FzZSAnaGV4JzpjYXNlICd1dGY4JzpjYXNlICd1dGYtOCc6Y2FzZSAnYXNjaWknOmNhc2UgJ2JpbmFyeSc6Y2FzZSAnYmFzZTY0JzpjYXNlICd1Y3MyJzpjYXNlICd1Y3MtMic6Y2FzZSAndXRmMTZsZSc6Y2FzZSAndXRmLTE2bGUnOmNhc2UgJ3Jhdyc6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG5mdW5jdGlvbiBfbm9ybWFsaXplRW5jb2RpbmcoZW5jKSB7XG4gIGlmICghZW5jKSByZXR1cm4gJ3V0ZjgnO1xuICB2YXIgcmV0cmllZDtcbiAgd2hpbGUgKHRydWUpIHtcbiAgICBzd2l0Y2ggKGVuYykge1xuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiAndXRmOCc7XG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gJ3V0ZjE2bGUnO1xuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiAnbGF0aW4xJztcbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gZW5jO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKHJldHJpZWQpIHJldHVybjsgLy8gdW5kZWZpbmVkXG4gICAgICAgIGVuYyA9ICgnJyArIGVuYykudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgcmV0cmllZCA9IHRydWU7XG4gICAgfVxuICB9XG59O1xuXG4vLyBEbyBub3QgY2FjaGUgYEJ1ZmZlci5pc0VuY29kaW5nYCB3aGVuIGNoZWNraW5nIGVuY29kaW5nIG5hbWVzIGFzIHNvbWVcbi8vIG1vZHVsZXMgbW9ua2V5LXBhdGNoIGl0IHRvIHN1cHBvcnQgYWRkaXRpb25hbCBlbmNvZGluZ3NcbmZ1bmN0aW9uIG5vcm1hbGl6ZUVuY29kaW5nKGVuYykge1xuICB2YXIgbmVuYyA9IF9ub3JtYWxpemVFbmNvZGluZyhlbmMpO1xuICBpZiAodHlwZW9mIG5lbmMgIT09ICdzdHJpbmcnICYmIChCdWZmZXIuaXNFbmNvZGluZyA9PT0gaXNFbmNvZGluZyB8fCAhaXNFbmNvZGluZyhlbmMpKSkgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jKTtcbiAgcmV0dXJuIG5lbmMgfHwgZW5jO1xufVxuXG4vLyBTdHJpbmdEZWNvZGVyIHByb3ZpZGVzIGFuIGludGVyZmFjZSBmb3IgZWZmaWNpZW50bHkgc3BsaXR0aW5nIGEgc2VyaWVzIG9mXG4vLyBidWZmZXJzIGludG8gYSBzZXJpZXMgb2YgSlMgc3RyaW5ncyB3aXRob3V0IGJyZWFraW5nIGFwYXJ0IG11bHRpLWJ5dGVcbi8vIGNoYXJhY3RlcnMuXG5leHBvcnRzLlN0cmluZ0RlY29kZXIgPSBTdHJpbmdEZWNvZGVyO1xuZnVuY3Rpb24gU3RyaW5nRGVjb2RlcihlbmNvZGluZykge1xuICB0aGlzLmVuY29kaW5nID0gbm9ybWFsaXplRW5jb2RpbmcoZW5jb2RpbmcpO1xuICB2YXIgbmI7XG4gIHN3aXRjaCAodGhpcy5lbmNvZGluZykge1xuICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgdGhpcy50ZXh0ID0gdXRmMTZUZXh0O1xuICAgICAgdGhpcy5lbmQgPSB1dGYxNkVuZDtcbiAgICAgIG5iID0gNDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgdGhpcy5maWxsTGFzdCA9IHV0ZjhGaWxsTGFzdDtcbiAgICAgIG5iID0gNDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICB0aGlzLnRleHQgPSBiYXNlNjRUZXh0O1xuICAgICAgdGhpcy5lbmQgPSBiYXNlNjRFbmQ7XG4gICAgICBuYiA9IDM7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhpcy53cml0ZSA9IHNpbXBsZVdyaXRlO1xuICAgICAgdGhpcy5lbmQgPSBzaW1wbGVFbmQ7XG4gICAgICByZXR1cm47XG4gIH1cbiAgdGhpcy5sYXN0TmVlZCA9IDA7XG4gIHRoaXMubGFzdFRvdGFsID0gMDtcbiAgdGhpcy5sYXN0Q2hhciA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShuYik7XG59XG5cblN0cmluZ0RlY29kZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKGJ1Zikge1xuICBpZiAoYnVmLmxlbmd0aCA9PT0gMCkgcmV0dXJuICcnO1xuICB2YXIgcjtcbiAgdmFyIGk7XG4gIGlmICh0aGlzLmxhc3ROZWVkKSB7XG4gICAgciA9IHRoaXMuZmlsbExhc3QoYnVmKTtcbiAgICBpZiAociA9PT0gdW5kZWZpbmVkKSByZXR1cm4gJyc7XG4gICAgaSA9IHRoaXMubGFzdE5lZWQ7XG4gICAgdGhpcy5sYXN0TmVlZCA9IDA7XG4gIH0gZWxzZSB7XG4gICAgaSA9IDA7XG4gIH1cbiAgaWYgKGkgPCBidWYubGVuZ3RoKSByZXR1cm4gciA/IHIgKyB0aGlzLnRleHQoYnVmLCBpKSA6IHRoaXMudGV4dChidWYsIGkpO1xuICByZXR1cm4gciB8fCAnJztcbn07XG5cblN0cmluZ0RlY29kZXIucHJvdG90eXBlLmVuZCA9IHV0ZjhFbmQ7XG5cbi8vIFJldHVybnMgb25seSBjb21wbGV0ZSBjaGFyYWN0ZXJzIGluIGEgQnVmZmVyXG5TdHJpbmdEZWNvZGVyLnByb3RvdHlwZS50ZXh0ID0gdXRmOFRleHQ7XG5cbi8vIEF0dGVtcHRzIHRvIGNvbXBsZXRlIGEgcGFydGlhbCBub24tVVRGLTggY2hhcmFjdGVyIHVzaW5nIGJ5dGVzIGZyb20gYSBCdWZmZXJcblN0cmluZ0RlY29kZXIucHJvdG90eXBlLmZpbGxMYXN0ID0gZnVuY3Rpb24gKGJ1Zikge1xuICBpZiAodGhpcy5sYXN0TmVlZCA8PSBidWYubGVuZ3RoKSB7XG4gICAgYnVmLmNvcHkodGhpcy5sYXN0Q2hhciwgdGhpcy5sYXN0VG90YWwgLSB0aGlzLmxhc3ROZWVkLCAwLCB0aGlzLmxhc3ROZWVkKTtcbiAgICByZXR1cm4gdGhpcy5sYXN0Q2hhci50b1N0cmluZyh0aGlzLmVuY29kaW5nLCAwLCB0aGlzLmxhc3RUb3RhbCk7XG4gIH1cbiAgYnVmLmNvcHkodGhpcy5sYXN0Q2hhciwgdGhpcy5sYXN0VG90YWwgLSB0aGlzLmxhc3ROZWVkLCAwLCBidWYubGVuZ3RoKTtcbiAgdGhpcy5sYXN0TmVlZCAtPSBidWYubGVuZ3RoO1xufTtcblxuLy8gQ2hlY2tzIHRoZSB0eXBlIG9mIGEgVVRGLTggYnl0ZSwgd2hldGhlciBpdCdzIEFTQ0lJLCBhIGxlYWRpbmcgYnl0ZSwgb3IgYVxuLy8gY29udGludWF0aW9uIGJ5dGUuIElmIGFuIGludmFsaWQgYnl0ZSBpcyBkZXRlY3RlZCwgLTIgaXMgcmV0dXJuZWQuXG5mdW5jdGlvbiB1dGY4Q2hlY2tCeXRlKGJ5dGUpIHtcbiAgaWYgKGJ5dGUgPD0gMHg3RikgcmV0dXJuIDA7ZWxzZSBpZiAoYnl0ZSA+PiA1ID09PSAweDA2KSByZXR1cm4gMjtlbHNlIGlmIChieXRlID4+IDQgPT09IDB4MEUpIHJldHVybiAzO2Vsc2UgaWYgKGJ5dGUgPj4gMyA9PT0gMHgxRSkgcmV0dXJuIDQ7XG4gIHJldHVybiBieXRlID4+IDYgPT09IDB4MDIgPyAtMSA6IC0yO1xufVxuXG4vLyBDaGVja3MgYXQgbW9zdCAzIGJ5dGVzIGF0IHRoZSBlbmQgb2YgYSBCdWZmZXIgaW4gb3JkZXIgdG8gZGV0ZWN0IGFuXG4vLyBpbmNvbXBsZXRlIG11bHRpLWJ5dGUgVVRGLTggY2hhcmFjdGVyLiBUaGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzICgyLCAzLCBvciA0KVxuLy8gbmVlZGVkIHRvIGNvbXBsZXRlIHRoZSBVVEYtOCBjaGFyYWN0ZXIgKGlmIGFwcGxpY2FibGUpIGFyZSByZXR1cm5lZC5cbmZ1bmN0aW9uIHV0ZjhDaGVja0luY29tcGxldGUoc2VsZiwgYnVmLCBpKSB7XG4gIHZhciBqID0gYnVmLmxlbmd0aCAtIDE7XG4gIGlmIChqIDwgaSkgcmV0dXJuIDA7XG4gIHZhciBuYiA9IHV0ZjhDaGVja0J5dGUoYnVmW2pdKTtcbiAgaWYgKG5iID49IDApIHtcbiAgICBpZiAobmIgPiAwKSBzZWxmLmxhc3ROZWVkID0gbmIgLSAxO1xuICAgIHJldHVybiBuYjtcbiAgfVxuICBpZiAoLS1qIDwgaSB8fCBuYiA9PT0gLTIpIHJldHVybiAwO1xuICBuYiA9IHV0ZjhDaGVja0J5dGUoYnVmW2pdKTtcbiAgaWYgKG5iID49IDApIHtcbiAgICBpZiAobmIgPiAwKSBzZWxmLmxhc3ROZWVkID0gbmIgLSAyO1xuICAgIHJldHVybiBuYjtcbiAgfVxuICBpZiAoLS1qIDwgaSB8fCBuYiA9PT0gLTIpIHJldHVybiAwO1xuICBuYiA9IHV0ZjhDaGVja0J5dGUoYnVmW2pdKTtcbiAgaWYgKG5iID49IDApIHtcbiAgICBpZiAobmIgPiAwKSB7XG4gICAgICBpZiAobmIgPT09IDIpIG5iID0gMDtlbHNlIHNlbGYubGFzdE5lZWQgPSBuYiAtIDM7XG4gICAgfVxuICAgIHJldHVybiBuYjtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy8gVmFsaWRhdGVzIGFzIG1hbnkgY29udGludWF0aW9uIGJ5dGVzIGZvciBhIG11bHRpLWJ5dGUgVVRGLTggY2hhcmFjdGVyIGFzXG4vLyBuZWVkZWQgb3IgYXJlIGF2YWlsYWJsZS4gSWYgd2Ugc2VlIGEgbm9uLWNvbnRpbnVhdGlvbiBieXRlIHdoZXJlIHdlIGV4cGVjdFxuLy8gb25lLCB3ZSBcInJlcGxhY2VcIiB0aGUgdmFsaWRhdGVkIGNvbnRpbnVhdGlvbiBieXRlcyB3ZSd2ZSBzZWVuIHNvIGZhciB3aXRoXG4vLyBhIHNpbmdsZSBVVEYtOCByZXBsYWNlbWVudCBjaGFyYWN0ZXIgKCdcXHVmZmZkJyksIHRvIG1hdGNoIHY4J3MgVVRGLTggZGVjb2Rpbmdcbi8vIGJlaGF2aW9yLiBUaGUgY29udGludWF0aW9uIGJ5dGUgY2hlY2sgaXMgaW5jbHVkZWQgdGhyZWUgdGltZXMgaW4gdGhlIGNhc2Vcbi8vIHdoZXJlIGFsbCBvZiB0aGUgY29udGludWF0aW9uIGJ5dGVzIGZvciBhIGNoYXJhY3RlciBleGlzdCBpbiB0aGUgc2FtZSBidWZmZXIuXG4vLyBJdCBpcyBhbHNvIGRvbmUgdGhpcyB3YXkgYXMgYSBzbGlnaHQgcGVyZm9ybWFuY2UgaW5jcmVhc2UgaW5zdGVhZCBvZiB1c2luZyBhXG4vLyBsb29wLlxuZnVuY3Rpb24gdXRmOENoZWNrRXh0cmFCeXRlcyhzZWxmLCBidWYsIHApIHtcbiAgaWYgKChidWZbMF0gJiAweEMwKSAhPT0gMHg4MCkge1xuICAgIHNlbGYubGFzdE5lZWQgPSAwO1xuICAgIHJldHVybiAnXFx1ZmZmZCc7XG4gIH1cbiAgaWYgKHNlbGYubGFzdE5lZWQgPiAxICYmIGJ1Zi5sZW5ndGggPiAxKSB7XG4gICAgaWYgKChidWZbMV0gJiAweEMwKSAhPT0gMHg4MCkge1xuICAgICAgc2VsZi5sYXN0TmVlZCA9IDE7XG4gICAgICByZXR1cm4gJ1xcdWZmZmQnO1xuICAgIH1cbiAgICBpZiAoc2VsZi5sYXN0TmVlZCA+IDIgJiYgYnVmLmxlbmd0aCA+IDIpIHtcbiAgICAgIGlmICgoYnVmWzJdICYgMHhDMCkgIT09IDB4ODApIHtcbiAgICAgICAgc2VsZi5sYXN0TmVlZCA9IDI7XG4gICAgICAgIHJldHVybiAnXFx1ZmZmZCc7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIEF0dGVtcHRzIHRvIGNvbXBsZXRlIGEgbXVsdGktYnl0ZSBVVEYtOCBjaGFyYWN0ZXIgdXNpbmcgYnl0ZXMgZnJvbSBhIEJ1ZmZlci5cbmZ1bmN0aW9uIHV0ZjhGaWxsTGFzdChidWYpIHtcbiAgdmFyIHAgPSB0aGlzLmxhc3RUb3RhbCAtIHRoaXMubGFzdE5lZWQ7XG4gIHZhciByID0gdXRmOENoZWNrRXh0cmFCeXRlcyh0aGlzLCBidWYsIHApO1xuICBpZiAociAhPT0gdW5kZWZpbmVkKSByZXR1cm4gcjtcbiAgaWYgKHRoaXMubGFzdE5lZWQgPD0gYnVmLmxlbmd0aCkge1xuICAgIGJ1Zi5jb3B5KHRoaXMubGFzdENoYXIsIHAsIDAsIHRoaXMubGFzdE5lZWQpO1xuICAgIHJldHVybiB0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsIDAsIHRoaXMubGFzdFRvdGFsKTtcbiAgfVxuICBidWYuY29weSh0aGlzLmxhc3RDaGFyLCBwLCAwLCBidWYubGVuZ3RoKTtcbiAgdGhpcy5sYXN0TmVlZCAtPSBidWYubGVuZ3RoO1xufVxuXG4vLyBSZXR1cm5zIGFsbCBjb21wbGV0ZSBVVEYtOCBjaGFyYWN0ZXJzIGluIGEgQnVmZmVyLiBJZiB0aGUgQnVmZmVyIGVuZGVkIG9uIGFcbi8vIHBhcnRpYWwgY2hhcmFjdGVyLCB0aGUgY2hhcmFjdGVyJ3MgYnl0ZXMgYXJlIGJ1ZmZlcmVkIHVudGlsIHRoZSByZXF1aXJlZFxuLy8gbnVtYmVyIG9mIGJ5dGVzIGFyZSBhdmFpbGFibGUuXG5mdW5jdGlvbiB1dGY4VGV4dChidWYsIGkpIHtcbiAgdmFyIHRvdGFsID0gdXRmOENoZWNrSW5jb21wbGV0ZSh0aGlzLCBidWYsIGkpO1xuICBpZiAoIXRoaXMubGFzdE5lZWQpIHJldHVybiBidWYudG9TdHJpbmcoJ3V0ZjgnLCBpKTtcbiAgdGhpcy5sYXN0VG90YWwgPSB0b3RhbDtcbiAgdmFyIGVuZCA9IGJ1Zi5sZW5ndGggLSAodG90YWwgLSB0aGlzLmxhc3ROZWVkKTtcbiAgYnVmLmNvcHkodGhpcy5sYXN0Q2hhciwgMCwgZW5kKTtcbiAgcmV0dXJuIGJ1Zi50b1N0cmluZygndXRmOCcsIGksIGVuZCk7XG59XG5cbi8vIEZvciBVVEYtOCwgYSByZXBsYWNlbWVudCBjaGFyYWN0ZXIgaXMgYWRkZWQgd2hlbiBlbmRpbmcgb24gYSBwYXJ0aWFsXG4vLyBjaGFyYWN0ZXIuXG5mdW5jdGlvbiB1dGY4RW5kKGJ1Zikge1xuICB2YXIgciA9IGJ1ZiAmJiBidWYubGVuZ3RoID8gdGhpcy53cml0ZShidWYpIDogJyc7XG4gIGlmICh0aGlzLmxhc3ROZWVkKSByZXR1cm4gciArICdcXHVmZmZkJztcbiAgcmV0dXJuIHI7XG59XG5cbi8vIFVURi0xNkxFIHR5cGljYWxseSBuZWVkcyB0d28gYnl0ZXMgcGVyIGNoYXJhY3RlciwgYnV0IGV2ZW4gaWYgd2UgaGF2ZSBhbiBldmVuXG4vLyBudW1iZXIgb2YgYnl0ZXMgYXZhaWxhYmxlLCB3ZSBuZWVkIHRvIGNoZWNrIGlmIHdlIGVuZCBvbiBhIGxlYWRpbmcvaGlnaFxuLy8gc3Vycm9nYXRlLiBJbiB0aGF0IGNhc2UsIHdlIG5lZWQgdG8gd2FpdCBmb3IgdGhlIG5leHQgdHdvIGJ5dGVzIGluIG9yZGVyIHRvXG4vLyBkZWNvZGUgdGhlIGxhc3QgY2hhcmFjdGVyIHByb3Blcmx5LlxuZnVuY3Rpb24gdXRmMTZUZXh0KGJ1ZiwgaSkge1xuICBpZiAoKGJ1Zi5sZW5ndGggLSBpKSAlIDIgPT09IDApIHtcbiAgICB2YXIgciA9IGJ1Zi50b1N0cmluZygndXRmMTZsZScsIGkpO1xuICAgIGlmIChyKSB7XG4gICAgICB2YXIgYyA9IHIuY2hhckNvZGVBdChyLmxlbmd0aCAtIDEpO1xuICAgICAgaWYgKGMgPj0gMHhEODAwICYmIGMgPD0gMHhEQkZGKSB7XG4gICAgICAgIHRoaXMubGFzdE5lZWQgPSAyO1xuICAgICAgICB0aGlzLmxhc3RUb3RhbCA9IDQ7XG4gICAgICAgIHRoaXMubGFzdENoYXJbMF0gPSBidWZbYnVmLmxlbmd0aCAtIDJdO1xuICAgICAgICB0aGlzLmxhc3RDaGFyWzFdID0gYnVmW2J1Zi5sZW5ndGggLSAxXTtcbiAgICAgICAgcmV0dXJuIHIuc2xpY2UoMCwgLTEpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcjtcbiAgfVxuICB0aGlzLmxhc3ROZWVkID0gMTtcbiAgdGhpcy5sYXN0VG90YWwgPSAyO1xuICB0aGlzLmxhc3RDaGFyWzBdID0gYnVmW2J1Zi5sZW5ndGggLSAxXTtcbiAgcmV0dXJuIGJ1Zi50b1N0cmluZygndXRmMTZsZScsIGksIGJ1Zi5sZW5ndGggLSAxKTtcbn1cblxuLy8gRm9yIFVURi0xNkxFIHdlIGRvIG5vdCBleHBsaWNpdGx5IGFwcGVuZCBzcGVjaWFsIHJlcGxhY2VtZW50IGNoYXJhY3RlcnMgaWYgd2Vcbi8vIGVuZCBvbiBhIHBhcnRpYWwgY2hhcmFjdGVyLCB3ZSBzaW1wbHkgbGV0IHY4IGhhbmRsZSB0aGF0LlxuZnVuY3Rpb24gdXRmMTZFbmQoYnVmKSB7XG4gIHZhciByID0gYnVmICYmIGJ1Zi5sZW5ndGggPyB0aGlzLndyaXRlKGJ1ZikgOiAnJztcbiAgaWYgKHRoaXMubGFzdE5lZWQpIHtcbiAgICB2YXIgZW5kID0gdGhpcy5sYXN0VG90YWwgLSB0aGlzLmxhc3ROZWVkO1xuICAgIHJldHVybiByICsgdGhpcy5sYXN0Q2hhci50b1N0cmluZygndXRmMTZsZScsIDAsIGVuZCk7XG4gIH1cbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIGJhc2U2NFRleHQoYnVmLCBpKSB7XG4gIHZhciBuID0gKGJ1Zi5sZW5ndGggLSBpKSAlIDM7XG4gIGlmIChuID09PSAwKSByZXR1cm4gYnVmLnRvU3RyaW5nKCdiYXNlNjQnLCBpKTtcbiAgdGhpcy5sYXN0TmVlZCA9IDMgLSBuO1xuICB0aGlzLmxhc3RUb3RhbCA9IDM7XG4gIGlmIChuID09PSAxKSB7XG4gICAgdGhpcy5sYXN0Q2hhclswXSA9IGJ1ZltidWYubGVuZ3RoIC0gMV07XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5sYXN0Q2hhclswXSA9IGJ1ZltidWYubGVuZ3RoIC0gMl07XG4gICAgdGhpcy5sYXN0Q2hhclsxXSA9IGJ1ZltidWYubGVuZ3RoIC0gMV07XG4gIH1cbiAgcmV0dXJuIGJ1Zi50b1N0cmluZygnYmFzZTY0JywgaSwgYnVmLmxlbmd0aCAtIG4pO1xufVxuXG5mdW5jdGlvbiBiYXNlNjRFbmQoYnVmKSB7XG4gIHZhciByID0gYnVmICYmIGJ1Zi5sZW5ndGggPyB0aGlzLndyaXRlKGJ1ZikgOiAnJztcbiAgaWYgKHRoaXMubGFzdE5lZWQpIHJldHVybiByICsgdGhpcy5sYXN0Q2hhci50b1N0cmluZygnYmFzZTY0JywgMCwgMyAtIHRoaXMubGFzdE5lZWQpO1xuICByZXR1cm4gcjtcbn1cblxuLy8gUGFzcyBieXRlcyBvbiB0aHJvdWdoIGZvciBzaW5nbGUtYnl0ZSBlbmNvZGluZ3MgKGUuZy4gYXNjaWksIGxhdGluMSwgaGV4KVxuZnVuY3Rpb24gc2ltcGxlV3JpdGUoYnVmKSB7XG4gIHJldHVybiBidWYudG9TdHJpbmcodGhpcy5lbmNvZGluZyk7XG59XG5cbmZ1bmN0aW9uIHNpbXBsZUVuZChidWYpIHtcbiAgcmV0dXJuIGJ1ZiAmJiBidWYubGVuZ3RoID8gdGhpcy53cml0ZShidWYpIDogJyc7XG59IiwKICAgICIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xuXG52YXIgcG5hID0gcmVxdWlyZSgncHJvY2Vzcy1uZXh0aWNrLWFyZ3MnKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWRhYmxlO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCdpc2FycmF5Jyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBEdXBsZXg7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuUmVhZGFibGUuUmVhZGFibGVTdGF0ZSA9IFJlYWRhYmxlU3RhdGU7XG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgRUUgPSByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXI7XG5cbnZhciBFRWxpc3RlbmVyQ291bnQgPSBmdW5jdGlvbiAoZW1pdHRlciwgdHlwZSkge1xuICByZXR1cm4gZW1pdHRlci5saXN0ZW5lcnModHlwZSkubGVuZ3RoO1xufTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIFN0cmVhbSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvc3RyZWFtcy9zdHJlYW0nKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG4vKjxyZXBsYWNlbWVudD4qL1xuXG52YXIgQnVmZmVyID0gcmVxdWlyZSgnc2FmZS1idWZmZXInKS5CdWZmZXI7XG52YXIgT3VyVWludDhBcnJheSA9ICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbCA6IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogdHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnID8gc2VsZiA6IHt9KS5VaW50OEFycmF5IHx8IGZ1bmN0aW9uICgpIHt9O1xuZnVuY3Rpb24gX3VpbnQ4QXJyYXlUb0J1ZmZlcihjaHVuaykge1xuICByZXR1cm4gQnVmZmVyLmZyb20oY2h1bmspO1xufVxuZnVuY3Rpb24gX2lzVWludDhBcnJheShvYmopIHtcbiAgcmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihvYmopIHx8IG9iaiBpbnN0YW5jZW9mIE91clVpbnQ4QXJyYXk7XG59XG5cbi8qPC9yZXBsYWNlbWVudD4qL1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIHV0aWwgPSBPYmplY3QuY3JlYXRlKHJlcXVpcmUoJ2NvcmUtdXRpbC1pcycpKTtcbnV0aWwuaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgZGVidWdVdGlsID0gcmVxdWlyZSgndXRpbCcpO1xudmFyIGRlYnVnID0gdm9pZCAwO1xuaWYgKGRlYnVnVXRpbCAmJiBkZWJ1Z1V0aWwuZGVidWdsb2cpIHtcbiAgZGVidWcgPSBkZWJ1Z1V0aWwuZGVidWdsb2coJ3N0cmVhbScpO1xufSBlbHNlIHtcbiAgZGVidWcgPSBmdW5jdGlvbiAoKSB7fTtcbn1cbi8qPC9yZXBsYWNlbWVudD4qL1xuXG52YXIgQnVmZmVyTGlzdCA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvc3RyZWFtcy9CdWZmZXJMaXN0Jyk7XG52YXIgZGVzdHJveUltcGwgPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvZGVzdHJveScpO1xudmFyIFN0cmluZ0RlY29kZXI7XG5cbnV0aWwuaW5oZXJpdHMoUmVhZGFibGUsIFN0cmVhbSk7XG5cbnZhciBrUHJveHlFdmVudHMgPSBbJ2Vycm9yJywgJ2Nsb3NlJywgJ2Rlc3Ryb3knLCAncGF1c2UnLCAncmVzdW1lJ107XG5cbmZ1bmN0aW9uIHByZXBlbmRMaXN0ZW5lcihlbWl0dGVyLCBldmVudCwgZm4pIHtcbiAgLy8gU2FkbHkgdGhpcyBpcyBub3QgY2FjaGVhYmxlIGFzIHNvbWUgbGlicmFyaWVzIGJ1bmRsZSB0aGVpciBvd25cbiAgLy8gZXZlbnQgZW1pdHRlciBpbXBsZW1lbnRhdGlvbiB3aXRoIHRoZW0uXG4gIGlmICh0eXBlb2YgZW1pdHRlci5wcmVwZW5kTGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHJldHVybiBlbWl0dGVyLnByZXBlbmRMaXN0ZW5lcihldmVudCwgZm4pO1xuXG4gIC8vIFRoaXMgaXMgYSBoYWNrIHRvIG1ha2Ugc3VyZSB0aGF0IG91ciBlcnJvciBoYW5kbGVyIGlzIGF0dGFjaGVkIGJlZm9yZSBhbnlcbiAgLy8gdXNlcmxhbmQgb25lcy4gIE5FVkVSIERPIFRISVMuIFRoaXMgaXMgaGVyZSBvbmx5IGJlY2F1c2UgdGhpcyBjb2RlIG5lZWRzXG4gIC8vIHRvIGNvbnRpbnVlIHRvIHdvcmsgd2l0aCBvbGRlciB2ZXJzaW9ucyBvZiBOb2RlLmpzIHRoYXQgZG8gbm90IGluY2x1ZGVcbiAgLy8gdGhlIHByZXBlbmRMaXN0ZW5lcigpIG1ldGhvZC4gVGhlIGdvYWwgaXMgdG8gZXZlbnR1YWxseSByZW1vdmUgdGhpcyBoYWNrLlxuICBpZiAoIWVtaXR0ZXIuX2V2ZW50cyB8fCAhZW1pdHRlci5fZXZlbnRzW2V2ZW50XSkgZW1pdHRlci5vbihldmVudCwgZm4pO2Vsc2UgaWYgKGlzQXJyYXkoZW1pdHRlci5fZXZlbnRzW2V2ZW50XSkpIGVtaXR0ZXIuX2V2ZW50c1tldmVudF0udW5zaGlmdChmbik7ZWxzZSBlbWl0dGVyLl9ldmVudHNbZXZlbnRdID0gW2ZuLCBlbWl0dGVyLl9ldmVudHNbZXZlbnRdXTtcbn1cblxuZnVuY3Rpb24gUmVhZGFibGVTdGF0ZShvcHRpb25zLCBzdHJlYW0pIHtcbiAgRHVwbGV4ID0gRHVwbGV4IHx8IHJlcXVpcmUoJy4vX3N0cmVhbV9kdXBsZXgnKTtcblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAvLyBEdXBsZXggc3RyZWFtcyBhcmUgYm90aCByZWFkYWJsZSBhbmQgd3JpdGFibGUsIGJ1dCBzaGFyZVxuICAvLyB0aGUgc2FtZSBvcHRpb25zIG9iamVjdC5cbiAgLy8gSG93ZXZlciwgc29tZSBjYXNlcyByZXF1aXJlIHNldHRpbmcgb3B0aW9ucyB0byBkaWZmZXJlbnRcbiAgLy8gdmFsdWVzIGZvciB0aGUgcmVhZGFibGUgYW5kIHRoZSB3cml0YWJsZSBzaWRlcyBvZiB0aGUgZHVwbGV4IHN0cmVhbS5cbiAgLy8gVGhlc2Ugb3B0aW9ucyBjYW4gYmUgcHJvdmlkZWQgc2VwYXJhdGVseSBhcyByZWFkYWJsZVhYWCBhbmQgd3JpdGFibGVYWFguXG4gIHZhciBpc0R1cGxleCA9IHN0cmVhbSBpbnN0YW5jZW9mIER1cGxleDtcblxuICAvLyBvYmplY3Qgc3RyZWFtIGZsYWcuIFVzZWQgdG8gbWFrZSByZWFkKG4pIGlnbm9yZSBuIGFuZCB0b1xuICAvLyBtYWtlIGFsbCB0aGUgYnVmZmVyIG1lcmdpbmcgYW5kIGxlbmd0aCBjaGVja3MgZ28gYXdheVxuICB0aGlzLm9iamVjdE1vZGUgPSAhIW9wdGlvbnMub2JqZWN0TW9kZTtcblxuICBpZiAoaXNEdXBsZXgpIHRoaXMub2JqZWN0TW9kZSA9IHRoaXMub2JqZWN0TW9kZSB8fCAhIW9wdGlvbnMucmVhZGFibGVPYmplY3RNb2RlO1xuXG4gIC8vIHRoZSBwb2ludCBhdCB3aGljaCBpdCBzdG9wcyBjYWxsaW5nIF9yZWFkKCkgdG8gZmlsbCB0aGUgYnVmZmVyXG4gIC8vIE5vdGU6IDAgaXMgYSB2YWxpZCB2YWx1ZSwgbWVhbnMgXCJkb24ndCBjYWxsIF9yZWFkIHByZWVtcHRpdmVseSBldmVyXCJcbiAgdmFyIGh3bSA9IG9wdGlvbnMuaGlnaFdhdGVyTWFyaztcbiAgdmFyIHJlYWRhYmxlSHdtID0gb3B0aW9ucy5yZWFkYWJsZUhpZ2hXYXRlck1hcms7XG4gIHZhciBkZWZhdWx0SHdtID0gdGhpcy5vYmplY3RNb2RlID8gMTYgOiAxNiAqIDEwMjQ7XG5cbiAgaWYgKGh3bSB8fCBod20gPT09IDApIHRoaXMuaGlnaFdhdGVyTWFyayA9IGh3bTtlbHNlIGlmIChpc0R1cGxleCAmJiAocmVhZGFibGVId20gfHwgcmVhZGFibGVId20gPT09IDApKSB0aGlzLmhpZ2hXYXRlck1hcmsgPSByZWFkYWJsZUh3bTtlbHNlIHRoaXMuaGlnaFdhdGVyTWFyayA9IGRlZmF1bHRId207XG5cbiAgLy8gY2FzdCB0byBpbnRzLlxuICB0aGlzLmhpZ2hXYXRlck1hcmsgPSBNYXRoLmZsb29yKHRoaXMuaGlnaFdhdGVyTWFyayk7XG5cbiAgLy8gQSBsaW5rZWQgbGlzdCBpcyB1c2VkIHRvIHN0b3JlIGRhdGEgY2h1bmtzIGluc3RlYWQgb2YgYW4gYXJyYXkgYmVjYXVzZSB0aGVcbiAgLy8gbGlua2VkIGxpc3QgY2FuIHJlbW92ZSBlbGVtZW50cyBmcm9tIHRoZSBiZWdpbm5pbmcgZmFzdGVyIHRoYW5cbiAgLy8gYXJyYXkuc2hpZnQoKVxuICB0aGlzLmJ1ZmZlciA9IG5ldyBCdWZmZXJMaXN0KCk7XG4gIHRoaXMubGVuZ3RoID0gMDtcbiAgdGhpcy5waXBlcyA9IG51bGw7XG4gIHRoaXMucGlwZXNDb3VudCA9IDA7XG4gIHRoaXMuZmxvd2luZyA9IG51bGw7XG4gIHRoaXMuZW5kZWQgPSBmYWxzZTtcbiAgdGhpcy5lbmRFbWl0dGVkID0gZmFsc2U7XG4gIHRoaXMucmVhZGluZyA9IGZhbHNlO1xuXG4gIC8vIGEgZmxhZyB0byBiZSBhYmxlIHRvIHRlbGwgaWYgdGhlIGV2ZW50ICdyZWFkYWJsZScvJ2RhdGEnIGlzIGVtaXR0ZWRcbiAgLy8gaW1tZWRpYXRlbHksIG9yIG9uIGEgbGF0ZXIgdGljay4gIFdlIHNldCB0aGlzIHRvIHRydWUgYXQgZmlyc3QsIGJlY2F1c2VcbiAgLy8gYW55IGFjdGlvbnMgdGhhdCBzaG91bGRuJ3QgaGFwcGVuIHVudGlsIFwibGF0ZXJcIiBzaG91bGQgZ2VuZXJhbGx5IGFsc29cbiAgLy8gbm90IGhhcHBlbiBiZWZvcmUgdGhlIGZpcnN0IHJlYWQgY2FsbC5cbiAgdGhpcy5zeW5jID0gdHJ1ZTtcblxuICAvLyB3aGVuZXZlciB3ZSByZXR1cm4gbnVsbCwgdGhlbiB3ZSBzZXQgYSBmbGFnIHRvIHNheVxuICAvLyB0aGF0IHdlJ3JlIGF3YWl0aW5nIGEgJ3JlYWRhYmxlJyBldmVudCBlbWlzc2lvbi5cbiAgdGhpcy5uZWVkUmVhZGFibGUgPSBmYWxzZTtcbiAgdGhpcy5lbWl0dGVkUmVhZGFibGUgPSBmYWxzZTtcbiAgdGhpcy5yZWFkYWJsZUxpc3RlbmluZyA9IGZhbHNlO1xuICB0aGlzLnJlc3VtZVNjaGVkdWxlZCA9IGZhbHNlO1xuXG4gIC8vIGhhcyBpdCBiZWVuIGRlc3Ryb3llZFxuICB0aGlzLmRlc3Ryb3llZCA9IGZhbHNlO1xuXG4gIC8vIENyeXB0byBpcyBraW5kIG9mIG9sZCBhbmQgY3J1c3R5LiAgSGlzdG9yaWNhbGx5LCBpdHMgZGVmYXVsdCBzdHJpbmdcbiAgLy8gZW5jb2RpbmcgaXMgJ2JpbmFyeScgc28gd2UgaGF2ZSB0byBtYWtlIHRoaXMgY29uZmlndXJhYmxlLlxuICAvLyBFdmVyeXRoaW5nIGVsc2UgaW4gdGhlIHVuaXZlcnNlIHVzZXMgJ3V0ZjgnLCB0aG91Z2guXG4gIHRoaXMuZGVmYXVsdEVuY29kaW5nID0gb3B0aW9ucy5kZWZhdWx0RW5jb2RpbmcgfHwgJ3V0ZjgnO1xuXG4gIC8vIHRoZSBudW1iZXIgb2Ygd3JpdGVycyB0aGF0IGFyZSBhd2FpdGluZyBhIGRyYWluIGV2ZW50IGluIC5waXBlKClzXG4gIHRoaXMuYXdhaXREcmFpbiA9IDA7XG5cbiAgLy8gaWYgdHJ1ZSwgYSBtYXliZVJlYWRNb3JlIGhhcyBiZWVuIHNjaGVkdWxlZFxuICB0aGlzLnJlYWRpbmdNb3JlID0gZmFsc2U7XG5cbiAgdGhpcy5kZWNvZGVyID0gbnVsbDtcbiAgdGhpcy5lbmNvZGluZyA9IG51bGw7XG4gIGlmIChvcHRpb25zLmVuY29kaW5nKSB7XG4gICAgaWYgKCFTdHJpbmdEZWNvZGVyKSBTdHJpbmdEZWNvZGVyID0gcmVxdWlyZSgnc3RyaW5nX2RlY29kZXIvJykuU3RyaW5nRGVjb2RlcjtcbiAgICB0aGlzLmRlY29kZXIgPSBuZXcgU3RyaW5nRGVjb2RlcihvcHRpb25zLmVuY29kaW5nKTtcbiAgICB0aGlzLmVuY29kaW5nID0gb3B0aW9ucy5lbmNvZGluZztcbiAgfVxufVxuXG5mdW5jdGlvbiBSZWFkYWJsZShvcHRpb25zKSB7XG4gIER1cGxleCA9IER1cGxleCB8fCByZXF1aXJlKCcuL19zdHJlYW1fZHVwbGV4Jyk7XG5cbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlYWRhYmxlKSkgcmV0dXJuIG5ldyBSZWFkYWJsZShvcHRpb25zKTtcblxuICB0aGlzLl9yZWFkYWJsZVN0YXRlID0gbmV3IFJlYWRhYmxlU3RhdGUob3B0aW9ucywgdGhpcyk7XG5cbiAgLy8gbGVnYWN5XG4gIHRoaXMucmVhZGFibGUgPSB0cnVlO1xuXG4gIGlmIChvcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLnJlYWQgPT09ICdmdW5jdGlvbicpIHRoaXMuX3JlYWQgPSBvcHRpb25zLnJlYWQ7XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuZGVzdHJveSA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fZGVzdHJveSA9IG9wdGlvbnMuZGVzdHJveTtcbiAgfVxuXG4gIFN0cmVhbS5jYWxsKHRoaXMpO1xufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoUmVhZGFibGUucHJvdG90eXBlLCAnZGVzdHJveWVkJywge1xuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZDtcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAvLyB3ZSBpZ25vcmUgdGhlIHZhbHVlIGlmIHRoZSBzdHJlYW1cbiAgICAvLyBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgeWV0XG4gICAgaWYgKCF0aGlzLl9yZWFkYWJsZVN0YXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgdGhlIHVzZXIgaXMgZXhwbGljaXRseVxuICAgIC8vIG1hbmFnaW5nIGRlc3Ryb3llZFxuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkID0gdmFsdWU7XG4gIH1cbn0pO1xuXG5SZWFkYWJsZS5wcm90b3R5cGUuZGVzdHJveSA9IGRlc3Ryb3lJbXBsLmRlc3Ryb3k7XG5SZWFkYWJsZS5wcm90b3R5cGUuX3VuZGVzdHJveSA9IGRlc3Ryb3lJbXBsLnVuZGVzdHJveTtcblJlYWRhYmxlLnByb3RvdHlwZS5fZGVzdHJveSA9IGZ1bmN0aW9uIChlcnIsIGNiKSB7XG4gIHRoaXMucHVzaChudWxsKTtcbiAgY2IoZXJyKTtcbn07XG5cbi8vIE1hbnVhbGx5IHNob3ZlIHNvbWV0aGluZyBpbnRvIHRoZSByZWFkKCkgYnVmZmVyLlxuLy8gVGhpcyByZXR1cm5zIHRydWUgaWYgdGhlIGhpZ2hXYXRlck1hcmsgaGFzIG5vdCBiZWVuIGhpdCB5ZXQsXG4vLyBzaW1pbGFyIHRvIGhvdyBXcml0YWJsZS53cml0ZSgpIHJldHVybnMgdHJ1ZSBpZiB5b3Ugc2hvdWxkXG4vLyB3cml0ZSgpIHNvbWUgbW9yZS5cblJlYWRhYmxlLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZykge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICB2YXIgc2tpcENodW5rQ2hlY2s7XG5cbiAgaWYgKCFzdGF0ZS5vYmplY3RNb2RlKSB7XG4gICAgaWYgKHR5cGVvZiBjaHVuayA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gZW5jb2RpbmcgfHwgc3RhdGUuZGVmYXVsdEVuY29kaW5nO1xuICAgICAgaWYgKGVuY29kaW5nICE9PSBzdGF0ZS5lbmNvZGluZykge1xuICAgICAgICBjaHVuayA9IEJ1ZmZlci5mcm9tKGNodW5rLCBlbmNvZGluZyk7XG4gICAgICAgIGVuY29kaW5nID0gJyc7XG4gICAgICB9XG4gICAgICBza2lwQ2h1bmtDaGVjayA9IHRydWU7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHNraXBDaHVua0NoZWNrID0gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiByZWFkYWJsZUFkZENodW5rKHRoaXMsIGNodW5rLCBlbmNvZGluZywgZmFsc2UsIHNraXBDaHVua0NoZWNrKTtcbn07XG5cbi8vIFVuc2hpZnQgc2hvdWxkICphbHdheXMqIGJlIHNvbWV0aGluZyBkaXJlY3RseSBvdXQgb2YgcmVhZCgpXG5SZWFkYWJsZS5wcm90b3R5cGUudW5zaGlmdCA9IGZ1bmN0aW9uIChjaHVuaykge1xuICByZXR1cm4gcmVhZGFibGVBZGRDaHVuayh0aGlzLCBjaHVuaywgbnVsbCwgdHJ1ZSwgZmFsc2UpO1xufTtcblxuZnVuY3Rpb24gcmVhZGFibGVBZGRDaHVuayhzdHJlYW0sIGNodW5rLCBlbmNvZGluZywgYWRkVG9Gcm9udCwgc2tpcENodW5rQ2hlY2spIHtcbiAgdmFyIHN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlO1xuICBpZiAoY2h1bmsgPT09IG51bGwpIHtcbiAgICBzdGF0ZS5yZWFkaW5nID0gZmFsc2U7XG4gICAgb25Fb2ZDaHVuayhzdHJlYW0sIHN0YXRlKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgZXI7XG4gICAgaWYgKCFza2lwQ2h1bmtDaGVjaykgZXIgPSBjaHVua0ludmFsaWQoc3RhdGUsIGNodW5rKTtcbiAgICBpZiAoZXIpIHtcbiAgICAgIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVyKTtcbiAgICB9IGVsc2UgaWYgKHN0YXRlLm9iamVjdE1vZGUgfHwgY2h1bmsgJiYgY2h1bmsubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKHR5cGVvZiBjaHVuayAhPT0gJ3N0cmluZycgJiYgIXN0YXRlLm9iamVjdE1vZGUgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKGNodW5rKSAhPT0gQnVmZmVyLnByb3RvdHlwZSkge1xuICAgICAgICBjaHVuayA9IF91aW50OEFycmF5VG9CdWZmZXIoY2h1bmspO1xuICAgICAgfVxuXG4gICAgICBpZiAoYWRkVG9Gcm9udCkge1xuICAgICAgICBpZiAoc3RhdGUuZW5kRW1pdHRlZCkgc3RyZWFtLmVtaXQoJ2Vycm9yJywgbmV3IEVycm9yKCdzdHJlYW0udW5zaGlmdCgpIGFmdGVyIGVuZCBldmVudCcpKTtlbHNlIGFkZENodW5rKHN0cmVhbSwgc3RhdGUsIGNodW5rLCB0cnVlKTtcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUuZW5kZWQpIHtcbiAgICAgICAgc3RyZWFtLmVtaXQoJ2Vycm9yJywgbmV3IEVycm9yKCdzdHJlYW0ucHVzaCgpIGFmdGVyIEVPRicpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRlLnJlYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgaWYgKHN0YXRlLmRlY29kZXIgJiYgIWVuY29kaW5nKSB7XG4gICAgICAgICAgY2h1bmsgPSBzdGF0ZS5kZWNvZGVyLndyaXRlKGNodW5rKTtcbiAgICAgICAgICBpZiAoc3RhdGUub2JqZWN0TW9kZSB8fCBjaHVuay5sZW5ndGggIT09IDApIGFkZENodW5rKHN0cmVhbSwgc3RhdGUsIGNodW5rLCBmYWxzZSk7ZWxzZSBtYXliZVJlYWRNb3JlKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFkZENodW5rKHN0cmVhbSwgc3RhdGUsIGNodW5rLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFhZGRUb0Zyb250KSB7XG4gICAgICBzdGF0ZS5yZWFkaW5nID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5lZWRNb3JlRGF0YShzdGF0ZSk7XG59XG5cbmZ1bmN0aW9uIGFkZENodW5rKHN0cmVhbSwgc3RhdGUsIGNodW5rLCBhZGRUb0Zyb250KSB7XG4gIGlmIChzdGF0ZS5mbG93aW5nICYmIHN0YXRlLmxlbmd0aCA9PT0gMCAmJiAhc3RhdGUuc3luYykge1xuICAgIHN0cmVhbS5lbWl0KCdkYXRhJywgY2h1bmspO1xuICAgIHN0cmVhbS5yZWFkKDApO1xuICB9IGVsc2Uge1xuICAgIC8vIHVwZGF0ZSB0aGUgYnVmZmVyIGluZm8uXG4gICAgc3RhdGUubGVuZ3RoICs9IHN0YXRlLm9iamVjdE1vZGUgPyAxIDogY2h1bmsubGVuZ3RoO1xuICAgIGlmIChhZGRUb0Zyb250KSBzdGF0ZS5idWZmZXIudW5zaGlmdChjaHVuayk7ZWxzZSBzdGF0ZS5idWZmZXIucHVzaChjaHVuayk7XG5cbiAgICBpZiAoc3RhdGUubmVlZFJlYWRhYmxlKSBlbWl0UmVhZGFibGUoc3RyZWFtKTtcbiAgfVxuICBtYXliZVJlYWRNb3JlKHN0cmVhbSwgc3RhdGUpO1xufVxuXG5mdW5jdGlvbiBjaHVua0ludmFsaWQoc3RhdGUsIGNodW5rKSB7XG4gIHZhciBlcjtcbiAgaWYgKCFfaXNVaW50OEFycmF5KGNodW5rKSAmJiB0eXBlb2YgY2h1bmsgIT09ICdzdHJpbmcnICYmIGNodW5rICE9PSB1bmRlZmluZWQgJiYgIXN0YXRlLm9iamVjdE1vZGUpIHtcbiAgICBlciA9IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgbm9uLXN0cmluZy9idWZmZXIgY2h1bmsnKTtcbiAgfVxuICByZXR1cm4gZXI7XG59XG5cbi8vIGlmIGl0J3MgcGFzdCB0aGUgaGlnaCB3YXRlciBtYXJrLCB3ZSBjYW4gcHVzaCBpbiBzb21lIG1vcmUuXG4vLyBBbHNvLCBpZiB3ZSBoYXZlIG5vIGRhdGEgeWV0LCB3ZSBjYW4gc3RhbmQgc29tZVxuLy8gbW9yZSBieXRlcy4gIFRoaXMgaXMgdG8gd29yayBhcm91bmQgY2FzZXMgd2hlcmUgaHdtPTAsXG4vLyBzdWNoIGFzIHRoZSByZXBsLiAgQWxzbywgaWYgdGhlIHB1c2goKSB0cmlnZ2VyZWQgYVxuLy8gcmVhZGFibGUgZXZlbnQsIGFuZCB0aGUgdXNlciBjYWxsZWQgcmVhZChsYXJnZU51bWJlcikgc3VjaCB0aGF0XG4vLyBuZWVkUmVhZGFibGUgd2FzIHNldCwgdGhlbiB3ZSBvdWdodCB0byBwdXNoIG1vcmUsIHNvIHRoYXQgYW5vdGhlclxuLy8gJ3JlYWRhYmxlJyBldmVudCB3aWxsIGJlIHRyaWdnZXJlZC5cbmZ1bmN0aW9uIG5lZWRNb3JlRGF0YShzdGF0ZSkge1xuICByZXR1cm4gIXN0YXRlLmVuZGVkICYmIChzdGF0ZS5uZWVkUmVhZGFibGUgfHwgc3RhdGUubGVuZ3RoIDwgc3RhdGUuaGlnaFdhdGVyTWFyayB8fCBzdGF0ZS5sZW5ndGggPT09IDApO1xufVxuXG5SZWFkYWJsZS5wcm90b3R5cGUuaXNQYXVzZWQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcgPT09IGZhbHNlO1xufTtcblxuLy8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuXG5SZWFkYWJsZS5wcm90b3R5cGUuc2V0RW5jb2RpbmcgPSBmdW5jdGlvbiAoZW5jKSB7XG4gIGlmICghU3RyaW5nRGVjb2RlcikgU3RyaW5nRGVjb2RlciA9IHJlcXVpcmUoJ3N0cmluZ19kZWNvZGVyLycpLlN0cmluZ0RlY29kZXI7XG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2RlciA9IG5ldyBTdHJpbmdEZWNvZGVyKGVuYyk7XG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5jb2RpbmcgPSBlbmM7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gRG9uJ3QgcmFpc2UgdGhlIGh3bSA+IDhNQlxudmFyIE1BWF9IV00gPSAweDgwMDAwMDtcbmZ1bmN0aW9uIGNvbXB1dGVOZXdIaWdoV2F0ZXJNYXJrKG4pIHtcbiAgaWYgKG4gPj0gTUFYX0hXTSkge1xuICAgIG4gPSBNQVhfSFdNO1xuICB9IGVsc2Uge1xuICAgIC8vIEdldCB0aGUgbmV4dCBoaWdoZXN0IHBvd2VyIG9mIDIgdG8gcHJldmVudCBpbmNyZWFzaW5nIGh3bSBleGNlc3NpdmVseSBpblxuICAgIC8vIHRpbnkgYW1vdW50c1xuICAgIG4tLTtcbiAgICBuIHw9IG4gPj4+IDE7XG4gICAgbiB8PSBuID4+PiAyO1xuICAgIG4gfD0gbiA+Pj4gNDtcbiAgICBuIHw9IG4gPj4+IDg7XG4gICAgbiB8PSBuID4+PiAxNjtcbiAgICBuKys7XG4gIH1cbiAgcmV0dXJuIG47XG59XG5cbi8vIFRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gYmUgaW5saW5hYmxlLCBzbyBwbGVhc2UgdGFrZSBjYXJlIHdoZW4gbWFraW5nXG4vLyBjaGFuZ2VzIHRvIHRoZSBmdW5jdGlvbiBib2R5LlxuZnVuY3Rpb24gaG93TXVjaFRvUmVhZChuLCBzdGF0ZSkge1xuICBpZiAobiA8PSAwIHx8IHN0YXRlLmxlbmd0aCA9PT0gMCAmJiBzdGF0ZS5lbmRlZCkgcmV0dXJuIDA7XG4gIGlmIChzdGF0ZS5vYmplY3RNb2RlKSByZXR1cm4gMTtcbiAgaWYgKG4gIT09IG4pIHtcbiAgICAvLyBPbmx5IGZsb3cgb25lIGJ1ZmZlciBhdCBhIHRpbWVcbiAgICBpZiAoc3RhdGUuZmxvd2luZyAmJiBzdGF0ZS5sZW5ndGgpIHJldHVybiBzdGF0ZS5idWZmZXIuaGVhZC5kYXRhLmxlbmd0aDtlbHNlIHJldHVybiBzdGF0ZS5sZW5ndGg7XG4gIH1cbiAgLy8gSWYgd2UncmUgYXNraW5nIGZvciBtb3JlIHRoYW4gdGhlIGN1cnJlbnQgaHdtLCB0aGVuIHJhaXNlIHRoZSBod20uXG4gIGlmIChuID4gc3RhdGUuaGlnaFdhdGVyTWFyaykgc3RhdGUuaGlnaFdhdGVyTWFyayA9IGNvbXB1dGVOZXdIaWdoV2F0ZXJNYXJrKG4pO1xuICBpZiAobiA8PSBzdGF0ZS5sZW5ndGgpIHJldHVybiBuO1xuICAvLyBEb24ndCBoYXZlIGVub3VnaFxuICBpZiAoIXN0YXRlLmVuZGVkKSB7XG4gICAgc3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZTtcbiAgICByZXR1cm4gMDtcbiAgfVxuICByZXR1cm4gc3RhdGUubGVuZ3RoO1xufVxuXG4vLyB5b3UgY2FuIG92ZXJyaWRlIGVpdGhlciB0aGlzIG1ldGhvZCwgb3IgdGhlIGFzeW5jIF9yZWFkKG4pIGJlbG93LlxuUmVhZGFibGUucHJvdG90eXBlLnJlYWQgPSBmdW5jdGlvbiAobikge1xuICBkZWJ1ZygncmVhZCcsIG4pO1xuICBuID0gcGFyc2VJbnQobiwgMTApO1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICB2YXIgbk9yaWcgPSBuO1xuXG4gIGlmIChuICE9PSAwKSBzdGF0ZS5lbWl0dGVkUmVhZGFibGUgPSBmYWxzZTtcblxuICAvLyBpZiB3ZSdyZSBkb2luZyByZWFkKDApIHRvIHRyaWdnZXIgYSByZWFkYWJsZSBldmVudCwgYnV0IHdlXG4gIC8vIGFscmVhZHkgaGF2ZSBhIGJ1bmNoIG9mIGRhdGEgaW4gdGhlIGJ1ZmZlciwgdGhlbiBqdXN0IHRyaWdnZXJcbiAgLy8gdGhlICdyZWFkYWJsZScgZXZlbnQgYW5kIG1vdmUgb24uXG4gIGlmIChuID09PSAwICYmIHN0YXRlLm5lZWRSZWFkYWJsZSAmJiAoc3RhdGUubGVuZ3RoID49IHN0YXRlLmhpZ2hXYXRlck1hcmsgfHwgc3RhdGUuZW5kZWQpKSB7XG4gICAgZGVidWcoJ3JlYWQ6IGVtaXRSZWFkYWJsZScsIHN0YXRlLmxlbmd0aCwgc3RhdGUuZW5kZWQpO1xuICAgIGlmIChzdGF0ZS5sZW5ndGggPT09IDAgJiYgc3RhdGUuZW5kZWQpIGVuZFJlYWRhYmxlKHRoaXMpO2Vsc2UgZW1pdFJlYWRhYmxlKHRoaXMpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgbiA9IGhvd011Y2hUb1JlYWQobiwgc3RhdGUpO1xuXG4gIC8vIGlmIHdlJ3ZlIGVuZGVkLCBhbmQgd2UncmUgbm93IGNsZWFyLCB0aGVuIGZpbmlzaCBpdCB1cC5cbiAgaWYgKG4gPT09IDAgJiYgc3RhdGUuZW5kZWQpIHtcbiAgICBpZiAoc3RhdGUubGVuZ3RoID09PSAwKSBlbmRSZWFkYWJsZSh0aGlzKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIEFsbCB0aGUgYWN0dWFsIGNodW5rIGdlbmVyYXRpb24gbG9naWMgbmVlZHMgdG8gYmVcbiAgLy8gKmJlbG93KiB0aGUgY2FsbCB0byBfcmVhZC4gIFRoZSByZWFzb24gaXMgdGhhdCBpbiBjZXJ0YWluXG4gIC8vIHN5bnRoZXRpYyBzdHJlYW0gY2FzZXMsIHN1Y2ggYXMgcGFzc3Rocm91Z2ggc3RyZWFtcywgX3JlYWRcbiAgLy8gbWF5IGJlIGEgY29tcGxldGVseSBzeW5jaHJvbm91cyBvcGVyYXRpb24gd2hpY2ggbWF5IGNoYW5nZVxuICAvLyB0aGUgc3RhdGUgb2YgdGhlIHJlYWQgYnVmZmVyLCBwcm92aWRpbmcgZW5vdWdoIGRhdGEgd2hlblxuICAvLyBiZWZvcmUgdGhlcmUgd2FzICpub3QqIGVub3VnaC5cbiAgLy9cbiAgLy8gU28sIHRoZSBzdGVwcyBhcmU6XG4gIC8vIDEuIEZpZ3VyZSBvdXQgd2hhdCB0aGUgc3RhdGUgb2YgdGhpbmdzIHdpbGwgYmUgYWZ0ZXIgd2UgZG9cbiAgLy8gYSByZWFkIGZyb20gdGhlIGJ1ZmZlci5cbiAgLy9cbiAgLy8gMi4gSWYgdGhhdCByZXN1bHRpbmcgc3RhdGUgd2lsbCB0cmlnZ2VyIGEgX3JlYWQsIHRoZW4gY2FsbCBfcmVhZC5cbiAgLy8gTm90ZSB0aGF0IHRoaXMgbWF5IGJlIGFzeW5jaHJvbm91cywgb3Igc3luY2hyb25vdXMuICBZZXMsIGl0IGlzXG4gIC8vIGRlZXBseSB1Z2x5IHRvIHdyaXRlIEFQSXMgdGhpcyB3YXksIGJ1dCB0aGF0IHN0aWxsIGRvZXNuJ3QgbWVhblxuICAvLyB0aGF0IHRoZSBSZWFkYWJsZSBjbGFzcyBzaG91bGQgYmVoYXZlIGltcHJvcGVybHksIGFzIHN0cmVhbXMgYXJlXG4gIC8vIGRlc2lnbmVkIHRvIGJlIHN5bmMvYXN5bmMgYWdub3N0aWMuXG4gIC8vIFRha2Ugbm90ZSBpZiB0aGUgX3JlYWQgY2FsbCBpcyBzeW5jIG9yIGFzeW5jIChpZSwgaWYgdGhlIHJlYWQgY2FsbFxuICAvLyBoYXMgcmV0dXJuZWQgeWV0KSwgc28gdGhhdCB3ZSBrbm93IHdoZXRoZXIgb3Igbm90IGl0J3Mgc2FmZSB0byBlbWl0XG4gIC8vICdyZWFkYWJsZScgZXRjLlxuICAvL1xuICAvLyAzLiBBY3R1YWxseSBwdWxsIHRoZSByZXF1ZXN0ZWQgY2h1bmtzIG91dCBvZiB0aGUgYnVmZmVyIGFuZCByZXR1cm4uXG5cbiAgLy8gaWYgd2UgbmVlZCBhIHJlYWRhYmxlIGV2ZW50LCB0aGVuIHdlIG5lZWQgdG8gZG8gc29tZSByZWFkaW5nLlxuICB2YXIgZG9SZWFkID0gc3RhdGUubmVlZFJlYWRhYmxlO1xuICBkZWJ1ZygnbmVlZCByZWFkYWJsZScsIGRvUmVhZCk7XG5cbiAgLy8gaWYgd2UgY3VycmVudGx5IGhhdmUgbGVzcyB0aGFuIHRoZSBoaWdoV2F0ZXJNYXJrLCB0aGVuIGFsc28gcmVhZCBzb21lXG4gIGlmIChzdGF0ZS5sZW5ndGggPT09IDAgfHwgc3RhdGUubGVuZ3RoIC0gbiA8IHN0YXRlLmhpZ2hXYXRlck1hcmspIHtcbiAgICBkb1JlYWQgPSB0cnVlO1xuICAgIGRlYnVnKCdsZW5ndGggbGVzcyB0aGFuIHdhdGVybWFyaycsIGRvUmVhZCk7XG4gIH1cblxuICAvLyBob3dldmVyLCBpZiB3ZSd2ZSBlbmRlZCwgdGhlbiB0aGVyZSdzIG5vIHBvaW50LCBhbmQgaWYgd2UncmUgYWxyZWFkeVxuICAvLyByZWFkaW5nLCB0aGVuIGl0J3MgdW5uZWNlc3NhcnkuXG4gIGlmIChzdGF0ZS5lbmRlZCB8fCBzdGF0ZS5yZWFkaW5nKSB7XG4gICAgZG9SZWFkID0gZmFsc2U7XG4gICAgZGVidWcoJ3JlYWRpbmcgb3IgZW5kZWQnLCBkb1JlYWQpO1xuICB9IGVsc2UgaWYgKGRvUmVhZCkge1xuICAgIGRlYnVnKCdkbyByZWFkJyk7XG4gICAgc3RhdGUucmVhZGluZyA9IHRydWU7XG4gICAgc3RhdGUuc3luYyA9IHRydWU7XG4gICAgLy8gaWYgdGhlIGxlbmd0aCBpcyBjdXJyZW50bHkgemVybywgdGhlbiB3ZSAqbmVlZCogYSByZWFkYWJsZSBldmVudC5cbiAgICBpZiAoc3RhdGUubGVuZ3RoID09PSAwKSBzdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlO1xuICAgIC8vIGNhbGwgaW50ZXJuYWwgcmVhZCBtZXRob2RcbiAgICB0aGlzLl9yZWFkKHN0YXRlLmhpZ2hXYXRlck1hcmspO1xuICAgIHN0YXRlLnN5bmMgPSBmYWxzZTtcbiAgICAvLyBJZiBfcmVhZCBwdXNoZWQgZGF0YSBzeW5jaHJvbm91c2x5LCB0aGVuIGByZWFkaW5nYCB3aWxsIGJlIGZhbHNlLFxuICAgIC8vIGFuZCB3ZSBuZWVkIHRvIHJlLWV2YWx1YXRlIGhvdyBtdWNoIGRhdGEgd2UgY2FuIHJldHVybiB0byB0aGUgdXNlci5cbiAgICBpZiAoIXN0YXRlLnJlYWRpbmcpIG4gPSBob3dNdWNoVG9SZWFkKG5PcmlnLCBzdGF0ZSk7XG4gIH1cblxuICB2YXIgcmV0O1xuICBpZiAobiA+IDApIHJldCA9IGZyb21MaXN0KG4sIHN0YXRlKTtlbHNlIHJldCA9IG51bGw7XG5cbiAgaWYgKHJldCA9PT0gbnVsbCkge1xuICAgIHN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWU7XG4gICAgbiA9IDA7XG4gIH0gZWxzZSB7XG4gICAgc3RhdGUubGVuZ3RoIC09IG47XG4gIH1cblxuICBpZiAoc3RhdGUubGVuZ3RoID09PSAwKSB7XG4gICAgLy8gSWYgd2UgaGF2ZSBub3RoaW5nIGluIHRoZSBidWZmZXIsIHRoZW4gd2Ugd2FudCB0byBrbm93XG4gICAgLy8gYXMgc29vbiBhcyB3ZSAqZG8qIGdldCBzb21ldGhpbmcgaW50byB0aGUgYnVmZmVyLlxuICAgIGlmICghc3RhdGUuZW5kZWQpIHN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWU7XG5cbiAgICAvLyBJZiB3ZSB0cmllZCB0byByZWFkKCkgcGFzdCB0aGUgRU9GLCB0aGVuIGVtaXQgZW5kIG9uIHRoZSBuZXh0IHRpY2suXG4gICAgaWYgKG5PcmlnICE9PSBuICYmIHN0YXRlLmVuZGVkKSBlbmRSZWFkYWJsZSh0aGlzKTtcbiAgfVxuXG4gIGlmIChyZXQgIT09IG51bGwpIHRoaXMuZW1pdCgnZGF0YScsIHJldCk7XG5cbiAgcmV0dXJuIHJldDtcbn07XG5cbmZ1bmN0aW9uIG9uRW9mQ2h1bmsoc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoc3RhdGUuZW5kZWQpIHJldHVybjtcbiAgaWYgKHN0YXRlLmRlY29kZXIpIHtcbiAgICB2YXIgY2h1bmsgPSBzdGF0ZS5kZWNvZGVyLmVuZCgpO1xuICAgIGlmIChjaHVuayAmJiBjaHVuay5sZW5ndGgpIHtcbiAgICAgIHN0YXRlLmJ1ZmZlci5wdXNoKGNodW5rKTtcbiAgICAgIHN0YXRlLmxlbmd0aCArPSBzdGF0ZS5vYmplY3RNb2RlID8gMSA6IGNodW5rLmxlbmd0aDtcbiAgICB9XG4gIH1cbiAgc3RhdGUuZW5kZWQgPSB0cnVlO1xuXG4gIC8vIGVtaXQgJ3JlYWRhYmxlJyBub3cgdG8gbWFrZSBzdXJlIGl0IGdldHMgcGlja2VkIHVwLlxuICBlbWl0UmVhZGFibGUoc3RyZWFtKTtcbn1cblxuLy8gRG9uJ3QgZW1pdCByZWFkYWJsZSByaWdodCBhd2F5IGluIHN5bmMgbW9kZSwgYmVjYXVzZSB0aGlzIGNhbiB0cmlnZ2VyXG4vLyBhbm90aGVyIHJlYWQoKSBjYWxsID0+IHN0YWNrIG92ZXJmbG93LiAgVGhpcyB3YXksIGl0IG1pZ2h0IHRyaWdnZXJcbi8vIGEgbmV4dFRpY2sgcmVjdXJzaW9uIHdhcm5pbmcsIGJ1dCB0aGF0J3Mgbm90IHNvIGJhZC5cbmZ1bmN0aW9uIGVtaXRSZWFkYWJsZShzdHJlYW0pIHtcbiAgdmFyIHN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlO1xuICBzdGF0ZS5uZWVkUmVhZGFibGUgPSBmYWxzZTtcbiAgaWYgKCFzdGF0ZS5lbWl0dGVkUmVhZGFibGUpIHtcbiAgICBkZWJ1ZygnZW1pdFJlYWRhYmxlJywgc3RhdGUuZmxvd2luZyk7XG4gICAgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gdHJ1ZTtcbiAgICBpZiAoc3RhdGUuc3luYykgcG5hLm5leHRUaWNrKGVtaXRSZWFkYWJsZV8sIHN0cmVhbSk7ZWxzZSBlbWl0UmVhZGFibGVfKHN0cmVhbSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZW1pdFJlYWRhYmxlXyhzdHJlYW0pIHtcbiAgZGVidWcoJ2VtaXQgcmVhZGFibGUnKTtcbiAgc3RyZWFtLmVtaXQoJ3JlYWRhYmxlJyk7XG4gIGZsb3coc3RyZWFtKTtcbn1cblxuLy8gYXQgdGhpcyBwb2ludCwgdGhlIHVzZXIgaGFzIHByZXN1bWFibHkgc2VlbiB0aGUgJ3JlYWRhYmxlJyBldmVudCxcbi8vIGFuZCBjYWxsZWQgcmVhZCgpIHRvIGNvbnN1bWUgc29tZSBkYXRhLiAgdGhhdCBtYXkgaGF2ZSB0cmlnZ2VyZWRcbi8vIGluIHR1cm4gYW5vdGhlciBfcmVhZChuKSBjYWxsLCBpbiB3aGljaCBjYXNlIHJlYWRpbmcgPSB0cnVlIGlmXG4vLyBpdCdzIGluIHByb2dyZXNzLlxuLy8gSG93ZXZlciwgaWYgd2UncmUgbm90IGVuZGVkLCBvciByZWFkaW5nLCBhbmQgdGhlIGxlbmd0aCA8IGh3bSxcbi8vIHRoZW4gZ28gYWhlYWQgYW5kIHRyeSB0byByZWFkIHNvbWUgbW9yZSBwcmVlbXB0aXZlbHkuXG5mdW5jdGlvbiBtYXliZVJlYWRNb3JlKHN0cmVhbSwgc3RhdGUpIHtcbiAgaWYgKCFzdGF0ZS5yZWFkaW5nTW9yZSkge1xuICAgIHN0YXRlLnJlYWRpbmdNb3JlID0gdHJ1ZTtcbiAgICBwbmEubmV4dFRpY2sobWF5YmVSZWFkTW9yZV8sIHN0cmVhbSwgc3RhdGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1heWJlUmVhZE1vcmVfKHN0cmVhbSwgc3RhdGUpIHtcbiAgdmFyIGxlbiA9IHN0YXRlLmxlbmd0aDtcbiAgd2hpbGUgKCFzdGF0ZS5yZWFkaW5nICYmICFzdGF0ZS5mbG93aW5nICYmICFzdGF0ZS5lbmRlZCAmJiBzdGF0ZS5sZW5ndGggPCBzdGF0ZS5oaWdoV2F0ZXJNYXJrKSB7XG4gICAgZGVidWcoJ21heWJlUmVhZE1vcmUgcmVhZCAwJyk7XG4gICAgc3RyZWFtLnJlYWQoMCk7XG4gICAgaWYgKGxlbiA9PT0gc3RhdGUubGVuZ3RoKVxuICAgICAgLy8gZGlkbid0IGdldCBhbnkgZGF0YSwgc3RvcCBzcGlubmluZy5cbiAgICAgIGJyZWFrO2Vsc2UgbGVuID0gc3RhdGUubGVuZ3RoO1xuICB9XG4gIHN0YXRlLnJlYWRpbmdNb3JlID0gZmFsc2U7XG59XG5cbi8vIGFic3RyYWN0IG1ldGhvZC4gIHRvIGJlIG92ZXJyaWRkZW4gaW4gc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gY2xhc3Nlcy5cbi8vIGNhbGwgY2IoZXIsIGRhdGEpIHdoZXJlIGRhdGEgaXMgPD0gbiBpbiBsZW5ndGguXG4vLyBmb3IgdmlydHVhbCAobm9uLXN0cmluZywgbm9uLWJ1ZmZlcikgc3RyZWFtcywgXCJsZW5ndGhcIiBpcyBzb21ld2hhdFxuLy8gYXJiaXRyYXJ5LCBhbmQgcGVyaGFwcyBub3QgdmVyeSBtZWFuaW5nZnVsLlxuUmVhZGFibGUucHJvdG90eXBlLl9yZWFkID0gZnVuY3Rpb24gKG4pIHtcbiAgdGhpcy5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcignX3JlYWQoKSBpcyBub3QgaW1wbGVtZW50ZWQnKSk7XG59O1xuXG5SZWFkYWJsZS5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uIChkZXN0LCBwaXBlT3B0cykge1xuICB2YXIgc3JjID0gdGhpcztcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcblxuICBzd2l0Y2ggKHN0YXRlLnBpcGVzQ291bnQpIHtcbiAgICBjYXNlIDA6XG4gICAgICBzdGF0ZS5waXBlcyA9IGRlc3Q7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDE6XG4gICAgICBzdGF0ZS5waXBlcyA9IFtzdGF0ZS5waXBlcywgZGVzdF07XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgc3RhdGUucGlwZXMucHVzaChkZXN0KTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIHN0YXRlLnBpcGVzQ291bnQgKz0gMTtcbiAgZGVidWcoJ3BpcGUgY291bnQ9JWQgb3B0cz0laicsIHN0YXRlLnBpcGVzQ291bnQsIHBpcGVPcHRzKTtcblxuICB2YXIgZG9FbmQgPSAoIXBpcGVPcHRzIHx8IHBpcGVPcHRzLmVuZCAhPT0gZmFsc2UpICYmIGRlc3QgIT09IHByb2Nlc3Muc3Rkb3V0ICYmIGRlc3QgIT09IHByb2Nlc3Muc3RkZXJyO1xuXG4gIHZhciBlbmRGbiA9IGRvRW5kID8gb25lbmQgOiB1bnBpcGU7XG4gIGlmIChzdGF0ZS5lbmRFbWl0dGVkKSBwbmEubmV4dFRpY2soZW5kRm4pO2Vsc2Ugc3JjLm9uY2UoJ2VuZCcsIGVuZEZuKTtcblxuICBkZXN0Lm9uKCd1bnBpcGUnLCBvbnVucGlwZSk7XG4gIGZ1bmN0aW9uIG9udW5waXBlKHJlYWRhYmxlLCB1bnBpcGVJbmZvKSB7XG4gICAgZGVidWcoJ29udW5waXBlJyk7XG4gICAgaWYgKHJlYWRhYmxlID09PSBzcmMpIHtcbiAgICAgIGlmICh1bnBpcGVJbmZvICYmIHVucGlwZUluZm8uaGFzVW5waXBlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgdW5waXBlSW5mby5oYXNVbnBpcGVkID0gdHJ1ZTtcbiAgICAgICAgY2xlYW51cCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG9uZW5kKCkge1xuICAgIGRlYnVnKCdvbmVuZCcpO1xuICAgIGRlc3QuZW5kKCk7XG4gIH1cblxuICAvLyB3aGVuIHRoZSBkZXN0IGRyYWlucywgaXQgcmVkdWNlcyB0aGUgYXdhaXREcmFpbiBjb3VudGVyXG4gIC8vIG9uIHRoZSBzb3VyY2UuICBUaGlzIHdvdWxkIGJlIG1vcmUgZWxlZ2FudCB3aXRoIGEgLm9uY2UoKVxuICAvLyBoYW5kbGVyIGluIGZsb3coKSwgYnV0IGFkZGluZyBhbmQgcmVtb3ZpbmcgcmVwZWF0ZWRseSBpc1xuICAvLyB0b28gc2xvdy5cbiAgdmFyIG9uZHJhaW4gPSBwaXBlT25EcmFpbihzcmMpO1xuICBkZXN0Lm9uKCdkcmFpbicsIG9uZHJhaW4pO1xuXG4gIHZhciBjbGVhbmVkVXAgPSBmYWxzZTtcbiAgZnVuY3Rpb24gY2xlYW51cCgpIHtcbiAgICBkZWJ1ZygnY2xlYW51cCcpO1xuICAgIC8vIGNsZWFudXAgZXZlbnQgaGFuZGxlcnMgb25jZSB0aGUgcGlwZSBpcyBicm9rZW5cbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uY2xvc2UpO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2ZpbmlzaCcsIG9uZmluaXNoKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdkcmFpbicsIG9uZHJhaW4pO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgb25lcnJvcik7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcigndW5waXBlJywgb251bnBpcGUpO1xuICAgIHNyYy5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25lbmQpO1xuICAgIHNyYy5yZW1vdmVMaXN0ZW5lcignZW5kJywgdW5waXBlKTtcbiAgICBzcmMucmVtb3ZlTGlzdGVuZXIoJ2RhdGEnLCBvbmRhdGEpO1xuXG4gICAgY2xlYW5lZFVwID0gdHJ1ZTtcblxuICAgIC8vIGlmIHRoZSByZWFkZXIgaXMgd2FpdGluZyBmb3IgYSBkcmFpbiBldmVudCBmcm9tIHRoaXNcbiAgICAvLyBzcGVjaWZpYyB3cml0ZXIsIHRoZW4gaXQgd291bGQgY2F1c2UgaXQgdG8gbmV2ZXIgc3RhcnRcbiAgICAvLyBmbG93aW5nIGFnYWluLlxuICAgIC8vIFNvLCBpZiB0aGlzIGlzIGF3YWl0aW5nIGEgZHJhaW4sIHRoZW4gd2UganVzdCBjYWxsIGl0IG5vdy5cbiAgICAvLyBJZiB3ZSBkb24ndCBrbm93LCB0aGVuIGFzc3VtZSB0aGF0IHdlIGFyZSB3YWl0aW5nIGZvciBvbmUuXG4gICAgaWYgKHN0YXRlLmF3YWl0RHJhaW4gJiYgKCFkZXN0Ll93cml0YWJsZVN0YXRlIHx8IGRlc3QuX3dyaXRhYmxlU3RhdGUubmVlZERyYWluKSkgb25kcmFpbigpO1xuICB9XG5cbiAgLy8gSWYgdGhlIHVzZXIgcHVzaGVzIG1vcmUgZGF0YSB3aGlsZSB3ZSdyZSB3cml0aW5nIHRvIGRlc3QgdGhlbiB3ZSdsbCBlbmQgdXBcbiAgLy8gaW4gb25kYXRhIGFnYWluLiBIb3dldmVyLCB3ZSBvbmx5IHdhbnQgdG8gaW5jcmVhc2UgYXdhaXREcmFpbiBvbmNlIGJlY2F1c2VcbiAgLy8gZGVzdCB3aWxsIG9ubHkgZW1pdCBvbmUgJ2RyYWluJyBldmVudCBmb3IgdGhlIG11bHRpcGxlIHdyaXRlcy5cbiAgLy8gPT4gSW50cm9kdWNlIGEgZ3VhcmQgb24gaW5jcmVhc2luZyBhd2FpdERyYWluLlxuICB2YXIgaW5jcmVhc2VkQXdhaXREcmFpbiA9IGZhbHNlO1xuICBzcmMub24oJ2RhdGEnLCBvbmRhdGEpO1xuICBmdW5jdGlvbiBvbmRhdGEoY2h1bmspIHtcbiAgICBkZWJ1Zygnb25kYXRhJyk7XG4gICAgaW5jcmVhc2VkQXdhaXREcmFpbiA9IGZhbHNlO1xuICAgIHZhciByZXQgPSBkZXN0LndyaXRlKGNodW5rKTtcbiAgICBpZiAoZmFsc2UgPT09IHJldCAmJiAhaW5jcmVhc2VkQXdhaXREcmFpbikge1xuICAgICAgLy8gSWYgdGhlIHVzZXIgdW5waXBlZCBkdXJpbmcgYGRlc3Qud3JpdGUoKWAsIGl0IGlzIHBvc3NpYmxlXG4gICAgICAvLyB0byBnZXQgc3R1Y2sgaW4gYSBwZXJtYW5lbnRseSBwYXVzZWQgc3RhdGUgaWYgdGhhdCB3cml0ZVxuICAgICAgLy8gYWxzbyByZXR1cm5lZCBmYWxzZS5cbiAgICAgIC8vID0+IENoZWNrIHdoZXRoZXIgYGRlc3RgIGlzIHN0aWxsIGEgcGlwaW5nIGRlc3RpbmF0aW9uLlxuICAgICAgaWYgKChzdGF0ZS5waXBlc0NvdW50ID09PSAxICYmIHN0YXRlLnBpcGVzID09PSBkZXN0IHx8IHN0YXRlLnBpcGVzQ291bnQgPiAxICYmIGluZGV4T2Yoc3RhdGUucGlwZXMsIGRlc3QpICE9PSAtMSkgJiYgIWNsZWFuZWRVcCkge1xuICAgICAgICBkZWJ1ZygnZmFsc2Ugd3JpdGUgcmVzcG9uc2UsIHBhdXNlJywgc3RhdGUuYXdhaXREcmFpbik7XG4gICAgICAgIHN0YXRlLmF3YWl0RHJhaW4rKztcbiAgICAgICAgaW5jcmVhc2VkQXdhaXREcmFpbiA9IHRydWU7XG4gICAgICB9XG4gICAgICBzcmMucGF1c2UoKTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgZGVzdCBoYXMgYW4gZXJyb3IsIHRoZW4gc3RvcCBwaXBpbmcgaW50byBpdC5cbiAgLy8gaG93ZXZlciwgZG9uJ3Qgc3VwcHJlc3MgdGhlIHRocm93aW5nIGJlaGF2aW9yIGZvciB0aGlzLlxuICBmdW5jdGlvbiBvbmVycm9yKGVyKSB7XG4gICAgZGVidWcoJ29uZXJyb3InLCBlcik7XG4gICAgdW5waXBlKCk7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbmVycm9yKTtcbiAgICBpZiAoRUVsaXN0ZW5lckNvdW50KGRlc3QsICdlcnJvcicpID09PSAwKSBkZXN0LmVtaXQoJ2Vycm9yJywgZXIpO1xuICB9XG5cbiAgLy8gTWFrZSBzdXJlIG91ciBlcnJvciBoYW5kbGVyIGlzIGF0dGFjaGVkIGJlZm9yZSB1c2VybGFuZCBvbmVzLlxuICBwcmVwZW5kTGlzdGVuZXIoZGVzdCwgJ2Vycm9yJywgb25lcnJvcik7XG5cbiAgLy8gQm90aCBjbG9zZSBhbmQgZmluaXNoIHNob3VsZCB0cmlnZ2VyIHVucGlwZSwgYnV0IG9ubHkgb25jZS5cbiAgZnVuY3Rpb24gb25jbG9zZSgpIHtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdmaW5pc2gnLCBvbmZpbmlzaCk7XG4gICAgdW5waXBlKCk7XG4gIH1cbiAgZGVzdC5vbmNlKCdjbG9zZScsIG9uY2xvc2UpO1xuICBmdW5jdGlvbiBvbmZpbmlzaCgpIHtcbiAgICBkZWJ1Zygnb25maW5pc2gnKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uY2xvc2UpO1xuICAgIHVucGlwZSgpO1xuICB9XG4gIGRlc3Qub25jZSgnZmluaXNoJywgb25maW5pc2gpO1xuXG4gIGZ1bmN0aW9uIHVucGlwZSgpIHtcbiAgICBkZWJ1ZygndW5waXBlJyk7XG4gICAgc3JjLnVucGlwZShkZXN0KTtcbiAgfVxuXG4gIC8vIHRlbGwgdGhlIGRlc3QgdGhhdCBpdCdzIGJlaW5nIHBpcGVkIHRvXG4gIGRlc3QuZW1pdCgncGlwZScsIHNyYyk7XG5cbiAgLy8gc3RhcnQgdGhlIGZsb3cgaWYgaXQgaGFzbid0IGJlZW4gc3RhcnRlZCBhbHJlYWR5LlxuICBpZiAoIXN0YXRlLmZsb3dpbmcpIHtcbiAgICBkZWJ1ZygncGlwZSByZXN1bWUnKTtcbiAgICBzcmMucmVzdW1lKCk7XG4gIH1cblxuICByZXR1cm4gZGVzdDtcbn07XG5cbmZ1bmN0aW9uIHBpcGVPbkRyYWluKHNyYykge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzdGF0ZSA9IHNyYy5fcmVhZGFibGVTdGF0ZTtcbiAgICBkZWJ1ZygncGlwZU9uRHJhaW4nLCBzdGF0ZS5hd2FpdERyYWluKTtcbiAgICBpZiAoc3RhdGUuYXdhaXREcmFpbikgc3RhdGUuYXdhaXREcmFpbi0tO1xuICAgIGlmIChzdGF0ZS5hd2FpdERyYWluID09PSAwICYmIEVFbGlzdGVuZXJDb3VudChzcmMsICdkYXRhJykpIHtcbiAgICAgIHN0YXRlLmZsb3dpbmcgPSB0cnVlO1xuICAgICAgZmxvdyhzcmMpO1xuICAgIH1cbiAgfTtcbn1cblxuUmVhZGFibGUucHJvdG90eXBlLnVucGlwZSA9IGZ1bmN0aW9uIChkZXN0KSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gIHZhciB1bnBpcGVJbmZvID0geyBoYXNVbnBpcGVkOiBmYWxzZSB9O1xuXG4gIC8vIGlmIHdlJ3JlIG5vdCBwaXBpbmcgYW55d2hlcmUsIHRoZW4gZG8gbm90aGluZy5cbiAgaWYgKHN0YXRlLnBpcGVzQ291bnQgPT09IDApIHJldHVybiB0aGlzO1xuXG4gIC8vIGp1c3Qgb25lIGRlc3RpbmF0aW9uLiAgbW9zdCBjb21tb24gY2FzZS5cbiAgaWYgKHN0YXRlLnBpcGVzQ291bnQgPT09IDEpIHtcbiAgICAvLyBwYXNzZWQgaW4gb25lLCBidXQgaXQncyBub3QgdGhlIHJpZ2h0IG9uZS5cbiAgICBpZiAoZGVzdCAmJiBkZXN0ICE9PSBzdGF0ZS5waXBlcykgcmV0dXJuIHRoaXM7XG5cbiAgICBpZiAoIWRlc3QpIGRlc3QgPSBzdGF0ZS5waXBlcztcblxuICAgIC8vIGdvdCBhIG1hdGNoLlxuICAgIHN0YXRlLnBpcGVzID0gbnVsbDtcbiAgICBzdGF0ZS5waXBlc0NvdW50ID0gMDtcbiAgICBzdGF0ZS5mbG93aW5nID0gZmFsc2U7XG4gICAgaWYgKGRlc3QpIGRlc3QuZW1pdCgndW5waXBlJywgdGhpcywgdW5waXBlSW5mbyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBzbG93IGNhc2UuIG11bHRpcGxlIHBpcGUgZGVzdGluYXRpb25zLlxuXG4gIGlmICghZGVzdCkge1xuICAgIC8vIHJlbW92ZSBhbGwuXG4gICAgdmFyIGRlc3RzID0gc3RhdGUucGlwZXM7XG4gICAgdmFyIGxlbiA9IHN0YXRlLnBpcGVzQ291bnQ7XG4gICAgc3RhdGUucGlwZXMgPSBudWxsO1xuICAgIHN0YXRlLnBpcGVzQ291bnQgPSAwO1xuICAgIHN0YXRlLmZsb3dpbmcgPSBmYWxzZTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGRlc3RzW2ldLmVtaXQoJ3VucGlwZScsIHRoaXMsIHsgaGFzVW5waXBlZDogZmFsc2UgfSk7XG4gICAgfXJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gdHJ5IHRvIGZpbmQgdGhlIHJpZ2h0IG9uZS5cbiAgdmFyIGluZGV4ID0gaW5kZXhPZihzdGF0ZS5waXBlcywgZGVzdCk7XG4gIGlmIChpbmRleCA9PT0gLTEpIHJldHVybiB0aGlzO1xuXG4gIHN0YXRlLnBpcGVzLnNwbGljZShpbmRleCwgMSk7XG4gIHN0YXRlLnBpcGVzQ291bnQgLT0gMTtcbiAgaWYgKHN0YXRlLnBpcGVzQ291bnQgPT09IDEpIHN0YXRlLnBpcGVzID0gc3RhdGUucGlwZXNbMF07XG5cbiAgZGVzdC5lbWl0KCd1bnBpcGUnLCB0aGlzLCB1bnBpcGVJbmZvKTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8vIHNldCB1cCBkYXRhIGV2ZW50cyBpZiB0aGV5IGFyZSBhc2tlZCBmb3Jcbi8vIEVuc3VyZSByZWFkYWJsZSBsaXN0ZW5lcnMgZXZlbnR1YWxseSBnZXQgc29tZXRoaW5nXG5SZWFkYWJsZS5wcm90b3R5cGUub24gPSBmdW5jdGlvbiAoZXYsIGZuKSB7XG4gIHZhciByZXMgPSBTdHJlYW0ucHJvdG90eXBlLm9uLmNhbGwodGhpcywgZXYsIGZuKTtcblxuICBpZiAoZXYgPT09ICdkYXRhJykge1xuICAgIC8vIFN0YXJ0IGZsb3dpbmcgb24gbmV4dCB0aWNrIGlmIHN0cmVhbSBpc24ndCBleHBsaWNpdGx5IHBhdXNlZFxuICAgIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcgIT09IGZhbHNlKSB0aGlzLnJlc3VtZSgpO1xuICB9IGVsc2UgaWYgKGV2ID09PSAncmVhZGFibGUnKSB7XG4gICAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgICBpZiAoIXN0YXRlLmVuZEVtaXR0ZWQgJiYgIXN0YXRlLnJlYWRhYmxlTGlzdGVuaW5nKSB7XG4gICAgICBzdGF0ZS5yZWFkYWJsZUxpc3RlbmluZyA9IHN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWU7XG4gICAgICBzdGF0ZS5lbWl0dGVkUmVhZGFibGUgPSBmYWxzZTtcbiAgICAgIGlmICghc3RhdGUucmVhZGluZykge1xuICAgICAgICBwbmEubmV4dFRpY2soblJlYWRpbmdOZXh0VGljaywgdGhpcyk7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlLmxlbmd0aCkge1xuICAgICAgICBlbWl0UmVhZGFibGUodGhpcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlcztcbn07XG5SZWFkYWJsZS5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBSZWFkYWJsZS5wcm90b3R5cGUub247XG5cbmZ1bmN0aW9uIG5SZWFkaW5nTmV4dFRpY2soc2VsZikge1xuICBkZWJ1ZygncmVhZGFibGUgbmV4dHRpY2sgcmVhZCAwJyk7XG4gIHNlbGYucmVhZCgwKTtcbn1cblxuLy8gcGF1c2UoKSBhbmQgcmVzdW1lKCkgYXJlIHJlbW5hbnRzIG9mIHRoZSBsZWdhY3kgcmVhZGFibGUgc3RyZWFtIEFQSVxuLy8gSWYgdGhlIHVzZXIgdXNlcyB0aGVtLCB0aGVuIHN3aXRjaCBpbnRvIG9sZCBtb2RlLlxuUmVhZGFibGUucHJvdG90eXBlLnJlc3VtZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgaWYgKCFzdGF0ZS5mbG93aW5nKSB7XG4gICAgZGVidWcoJ3Jlc3VtZScpO1xuICAgIHN0YXRlLmZsb3dpbmcgPSB0cnVlO1xuICAgIHJlc3VtZSh0aGlzLCBzdGF0ZSk7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5mdW5jdGlvbiByZXN1bWUoc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoIXN0YXRlLnJlc3VtZVNjaGVkdWxlZCkge1xuICAgIHN0YXRlLnJlc3VtZVNjaGVkdWxlZCA9IHRydWU7XG4gICAgcG5hLm5leHRUaWNrKHJlc3VtZV8sIHN0cmVhbSwgc3RhdGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc3VtZV8oc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoIXN0YXRlLnJlYWRpbmcpIHtcbiAgICBkZWJ1ZygncmVzdW1lIHJlYWQgMCcpO1xuICAgIHN0cmVhbS5yZWFkKDApO1xuICB9XG5cbiAgc3RhdGUucmVzdW1lU2NoZWR1bGVkID0gZmFsc2U7XG4gIHN0YXRlLmF3YWl0RHJhaW4gPSAwO1xuICBzdHJlYW0uZW1pdCgncmVzdW1lJyk7XG4gIGZsb3coc3RyZWFtKTtcbiAgaWYgKHN0YXRlLmZsb3dpbmcgJiYgIXN0YXRlLnJlYWRpbmcpIHN0cmVhbS5yZWFkKDApO1xufVxuXG5SZWFkYWJsZS5wcm90b3R5cGUucGF1c2UgPSBmdW5jdGlvbiAoKSB7XG4gIGRlYnVnKCdjYWxsIHBhdXNlIGZsb3dpbmc9JWonLCB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcpO1xuICBpZiAoZmFsc2UgIT09IHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZykge1xuICAgIGRlYnVnKCdwYXVzZScpO1xuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyA9IGZhbHNlO1xuICAgIHRoaXMuZW1pdCgncGF1c2UnKTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn07XG5cbmZ1bmN0aW9uIGZsb3coc3RyZWFtKSB7XG4gIHZhciBzdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZTtcbiAgZGVidWcoJ2Zsb3cnLCBzdGF0ZS5mbG93aW5nKTtcbiAgd2hpbGUgKHN0YXRlLmZsb3dpbmcgJiYgc3RyZWFtLnJlYWQoKSAhPT0gbnVsbCkge31cbn1cblxuLy8gd3JhcCBhbiBvbGQtc3R5bGUgc3RyZWFtIGFzIHRoZSBhc3luYyBkYXRhIHNvdXJjZS5cbi8vIFRoaXMgaXMgKm5vdCogcGFydCBvZiB0aGUgcmVhZGFibGUgc3RyZWFtIGludGVyZmFjZS5cbi8vIEl0IGlzIGFuIHVnbHkgdW5mb3J0dW5hdGUgbWVzcyBvZiBoaXN0b3J5LlxuUmVhZGFibGUucHJvdG90eXBlLndyYXAgPSBmdW5jdGlvbiAoc3RyZWFtKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgdmFyIHBhdXNlZCA9IGZhbHNlO1xuXG4gIHN0cmVhbS5vbignZW5kJywgZnVuY3Rpb24gKCkge1xuICAgIGRlYnVnKCd3cmFwcGVkIGVuZCcpO1xuICAgIGlmIChzdGF0ZS5kZWNvZGVyICYmICFzdGF0ZS5lbmRlZCkge1xuICAgICAgdmFyIGNodW5rID0gc3RhdGUuZGVjb2Rlci5lbmQoKTtcbiAgICAgIGlmIChjaHVuayAmJiBjaHVuay5sZW5ndGgpIF90aGlzLnB1c2goY2h1bmspO1xuICAgIH1cblxuICAgIF90aGlzLnB1c2gobnVsbCk7XG4gIH0pO1xuXG4gIHN0cmVhbS5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykge1xuICAgIGRlYnVnKCd3cmFwcGVkIGRhdGEnKTtcbiAgICBpZiAoc3RhdGUuZGVjb2RlcikgY2h1bmsgPSBzdGF0ZS5kZWNvZGVyLndyaXRlKGNodW5rKTtcblxuICAgIC8vIGRvbid0IHNraXAgb3ZlciBmYWxzeSB2YWx1ZXMgaW4gb2JqZWN0TW9kZVxuICAgIGlmIChzdGF0ZS5vYmplY3RNb2RlICYmIChjaHVuayA9PT0gbnVsbCB8fCBjaHVuayA9PT0gdW5kZWZpbmVkKSkgcmV0dXJuO2Vsc2UgaWYgKCFzdGF0ZS5vYmplY3RNb2RlICYmICghY2h1bmsgfHwgIWNodW5rLmxlbmd0aCkpIHJldHVybjtcblxuICAgIHZhciByZXQgPSBfdGhpcy5wdXNoKGNodW5rKTtcbiAgICBpZiAoIXJldCkge1xuICAgICAgcGF1c2VkID0gdHJ1ZTtcbiAgICAgIHN0cmVhbS5wYXVzZSgpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gcHJveHkgYWxsIHRoZSBvdGhlciBtZXRob2RzLlxuICAvLyBpbXBvcnRhbnQgd2hlbiB3cmFwcGluZyBmaWx0ZXJzIGFuZCBkdXBsZXhlcy5cbiAgZm9yICh2YXIgaSBpbiBzdHJlYW0pIHtcbiAgICBpZiAodGhpc1tpXSA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiBzdHJlYW1baV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXNbaV0gPSBmdW5jdGlvbiAobWV0aG9kKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHN0cmVhbVttZXRob2RdLmFwcGx5KHN0cmVhbSwgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcbiAgICAgIH0oaSk7XG4gICAgfVxuICB9XG5cbiAgLy8gcHJveHkgY2VydGFpbiBpbXBvcnRhbnQgZXZlbnRzLlxuICBmb3IgKHZhciBuID0gMDsgbiA8IGtQcm94eUV2ZW50cy5sZW5ndGg7IG4rKykge1xuICAgIHN0cmVhbS5vbihrUHJveHlFdmVudHNbbl0sIHRoaXMuZW1pdC5iaW5kKHRoaXMsIGtQcm94eUV2ZW50c1tuXSkpO1xuICB9XG5cbiAgLy8gd2hlbiB3ZSB0cnkgdG8gY29uc3VtZSBzb21lIG1vcmUgYnl0ZXMsIHNpbXBseSB1bnBhdXNlIHRoZVxuICAvLyB1bmRlcmx5aW5nIHN0cmVhbS5cbiAgdGhpcy5fcmVhZCA9IGZ1bmN0aW9uIChuKSB7XG4gICAgZGVidWcoJ3dyYXBwZWQgX3JlYWQnLCBuKTtcbiAgICBpZiAocGF1c2VkKSB7XG4gICAgICBwYXVzZWQgPSBmYWxzZTtcbiAgICAgIHN0cmVhbS5yZXN1bWUoKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoUmVhZGFibGUucHJvdG90eXBlLCAncmVhZGFibGVIaWdoV2F0ZXJNYXJrJywge1xuICAvLyBtYWtpbmcgaXQgZXhwbGljaXQgdGhpcyBwcm9wZXJ0eSBpcyBub3QgZW51bWVyYWJsZVxuICAvLyBiZWNhdXNlIG90aGVyd2lzZSBzb21lIHByb3RvdHlwZSBtYW5pcHVsYXRpb24gaW5cbiAgLy8gdXNlcmxhbmQgd2lsbCBmYWlsXG4gIGVudW1lcmFibGU6IGZhbHNlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrO1xuICB9XG59KTtcblxuLy8gZXhwb3NlZCBmb3IgdGVzdGluZyBwdXJwb3NlcyBvbmx5LlxuUmVhZGFibGUuX2Zyb21MaXN0ID0gZnJvbUxpc3Q7XG5cbi8vIFBsdWNrIG9mZiBuIGJ5dGVzIGZyb20gYW4gYXJyYXkgb2YgYnVmZmVycy5cbi8vIExlbmd0aCBpcyB0aGUgY29tYmluZWQgbGVuZ3RocyBvZiBhbGwgdGhlIGJ1ZmZlcnMgaW4gdGhlIGxpc3QuXG4vLyBUaGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGJlIGlubGluYWJsZSwgc28gcGxlYXNlIHRha2UgY2FyZSB3aGVuIG1ha2luZ1xuLy8gY2hhbmdlcyB0byB0aGUgZnVuY3Rpb24gYm9keS5cbmZ1bmN0aW9uIGZyb21MaXN0KG4sIHN0YXRlKSB7XG4gIC8vIG5vdGhpbmcgYnVmZmVyZWRcbiAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG5cbiAgdmFyIHJldDtcbiAgaWYgKHN0YXRlLm9iamVjdE1vZGUpIHJldCA9IHN0YXRlLmJ1ZmZlci5zaGlmdCgpO2Vsc2UgaWYgKCFuIHx8IG4gPj0gc3RhdGUubGVuZ3RoKSB7XG4gICAgLy8gcmVhZCBpdCBhbGwsIHRydW5jYXRlIHRoZSBsaXN0XG4gICAgaWYgKHN0YXRlLmRlY29kZXIpIHJldCA9IHN0YXRlLmJ1ZmZlci5qb2luKCcnKTtlbHNlIGlmIChzdGF0ZS5idWZmZXIubGVuZ3RoID09PSAxKSByZXQgPSBzdGF0ZS5idWZmZXIuaGVhZC5kYXRhO2Vsc2UgcmV0ID0gc3RhdGUuYnVmZmVyLmNvbmNhdChzdGF0ZS5sZW5ndGgpO1xuICAgIHN0YXRlLmJ1ZmZlci5jbGVhcigpO1xuICB9IGVsc2Uge1xuICAgIC8vIHJlYWQgcGFydCBvZiBsaXN0XG4gICAgcmV0ID0gZnJvbUxpc3RQYXJ0aWFsKG4sIHN0YXRlLmJ1ZmZlciwgc3RhdGUuZGVjb2Rlcik7XG4gIH1cblxuICByZXR1cm4gcmV0O1xufVxuXG4vLyBFeHRyYWN0cyBvbmx5IGVub3VnaCBidWZmZXJlZCBkYXRhIHRvIHNhdGlzZnkgdGhlIGFtb3VudCByZXF1ZXN0ZWQuXG4vLyBUaGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGJlIGlubGluYWJsZSwgc28gcGxlYXNlIHRha2UgY2FyZSB3aGVuIG1ha2luZ1xuLy8gY2hhbmdlcyB0byB0aGUgZnVuY3Rpb24gYm9keS5cbmZ1bmN0aW9uIGZyb21MaXN0UGFydGlhbChuLCBsaXN0LCBoYXNTdHJpbmdzKSB7XG4gIHZhciByZXQ7XG4gIGlmIChuIDwgbGlzdC5oZWFkLmRhdGEubGVuZ3RoKSB7XG4gICAgLy8gc2xpY2UgaXMgdGhlIHNhbWUgZm9yIGJ1ZmZlcnMgYW5kIHN0cmluZ3NcbiAgICByZXQgPSBsaXN0LmhlYWQuZGF0YS5zbGljZSgwLCBuKTtcbiAgICBsaXN0LmhlYWQuZGF0YSA9IGxpc3QuaGVhZC5kYXRhLnNsaWNlKG4pO1xuICB9IGVsc2UgaWYgKG4gPT09IGxpc3QuaGVhZC5kYXRhLmxlbmd0aCkge1xuICAgIC8vIGZpcnN0IGNodW5rIGlzIGEgcGVyZmVjdCBtYXRjaFxuICAgIHJldCA9IGxpc3Quc2hpZnQoKTtcbiAgfSBlbHNlIHtcbiAgICAvLyByZXN1bHQgc3BhbnMgbW9yZSB0aGFuIG9uZSBidWZmZXJcbiAgICByZXQgPSBoYXNTdHJpbmdzID8gY29weUZyb21CdWZmZXJTdHJpbmcobiwgbGlzdCkgOiBjb3B5RnJvbUJ1ZmZlcihuLCBsaXN0KTtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG4vLyBDb3BpZXMgYSBzcGVjaWZpZWQgYW1vdW50IG9mIGNoYXJhY3RlcnMgZnJvbSB0aGUgbGlzdCBvZiBidWZmZXJlZCBkYXRhXG4vLyBjaHVua3MuXG4vLyBUaGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGJlIGlubGluYWJsZSwgc28gcGxlYXNlIHRha2UgY2FyZSB3aGVuIG1ha2luZ1xuLy8gY2hhbmdlcyB0byB0aGUgZnVuY3Rpb24gYm9keS5cbmZ1bmN0aW9uIGNvcHlGcm9tQnVmZmVyU3RyaW5nKG4sIGxpc3QpIHtcbiAgdmFyIHAgPSBsaXN0LmhlYWQ7XG4gIHZhciBjID0gMTtcbiAgdmFyIHJldCA9IHAuZGF0YTtcbiAgbiAtPSByZXQubGVuZ3RoO1xuICB3aGlsZSAocCA9IHAubmV4dCkge1xuICAgIHZhciBzdHIgPSBwLmRhdGE7XG4gICAgdmFyIG5iID0gbiA+IHN0ci5sZW5ndGggPyBzdHIubGVuZ3RoIDogbjtcbiAgICBpZiAobmIgPT09IHN0ci5sZW5ndGgpIHJldCArPSBzdHI7ZWxzZSByZXQgKz0gc3RyLnNsaWNlKDAsIG4pO1xuICAgIG4gLT0gbmI7XG4gICAgaWYgKG4gPT09IDApIHtcbiAgICAgIGlmIChuYiA9PT0gc3RyLmxlbmd0aCkge1xuICAgICAgICArK2M7XG4gICAgICAgIGlmIChwLm5leHQpIGxpc3QuaGVhZCA9IHAubmV4dDtlbHNlIGxpc3QuaGVhZCA9IGxpc3QudGFpbCA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsaXN0LmhlYWQgPSBwO1xuICAgICAgICBwLmRhdGEgPSBzdHIuc2xpY2UobmIpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICAgICsrYztcbiAgfVxuICBsaXN0Lmxlbmd0aCAtPSBjO1xuICByZXR1cm4gcmV0O1xufVxuXG4vLyBDb3BpZXMgYSBzcGVjaWZpZWQgYW1vdW50IG9mIGJ5dGVzIGZyb20gdGhlIGxpc3Qgb2YgYnVmZmVyZWQgZGF0YSBjaHVua3MuXG4vLyBUaGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGJlIGlubGluYWJsZSwgc28gcGxlYXNlIHRha2UgY2FyZSB3aGVuIG1ha2luZ1xuLy8gY2hhbmdlcyB0byB0aGUgZnVuY3Rpb24gYm9keS5cbmZ1bmN0aW9uIGNvcHlGcm9tQnVmZmVyKG4sIGxpc3QpIHtcbiAgdmFyIHJldCA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShuKTtcbiAgdmFyIHAgPSBsaXN0LmhlYWQ7XG4gIHZhciBjID0gMTtcbiAgcC5kYXRhLmNvcHkocmV0KTtcbiAgbiAtPSBwLmRhdGEubGVuZ3RoO1xuICB3aGlsZSAocCA9IHAubmV4dCkge1xuICAgIHZhciBidWYgPSBwLmRhdGE7XG4gICAgdmFyIG5iID0gbiA+IGJ1Zi5sZW5ndGggPyBidWYubGVuZ3RoIDogbjtcbiAgICBidWYuY29weShyZXQsIHJldC5sZW5ndGggLSBuLCAwLCBuYik7XG4gICAgbiAtPSBuYjtcbiAgICBpZiAobiA9PT0gMCkge1xuICAgICAgaWYgKG5iID09PSBidWYubGVuZ3RoKSB7XG4gICAgICAgICsrYztcbiAgICAgICAgaWYgKHAubmV4dCkgbGlzdC5oZWFkID0gcC5uZXh0O2Vsc2UgbGlzdC5oZWFkID0gbGlzdC50YWlsID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxpc3QuaGVhZCA9IHA7XG4gICAgICAgIHAuZGF0YSA9IGJ1Zi5zbGljZShuYik7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgKytjO1xuICB9XG4gIGxpc3QubGVuZ3RoIC09IGM7XG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIGVuZFJlYWRhYmxlKHN0cmVhbSkge1xuICB2YXIgc3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGU7XG5cbiAgLy8gSWYgd2UgZ2V0IGhlcmUgYmVmb3JlIGNvbnN1bWluZyBhbGwgdGhlIGJ5dGVzLCB0aGVuIHRoYXQgaXMgYVxuICAvLyBidWcgaW4gbm9kZS4gIFNob3VsZCBuZXZlciBoYXBwZW4uXG4gIGlmIChzdGF0ZS5sZW5ndGggPiAwKSB0aHJvdyBuZXcgRXJyb3IoJ1wiZW5kUmVhZGFibGUoKVwiIGNhbGxlZCBvbiBub24tZW1wdHkgc3RyZWFtJyk7XG5cbiAgaWYgKCFzdGF0ZS5lbmRFbWl0dGVkKSB7XG4gICAgc3RhdGUuZW5kZWQgPSB0cnVlO1xuICAgIHBuYS5uZXh0VGljayhlbmRSZWFkYWJsZU5ULCBzdGF0ZSwgc3RyZWFtKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBlbmRSZWFkYWJsZU5UKHN0YXRlLCBzdHJlYW0pIHtcbiAgLy8gQ2hlY2sgdGhhdCB3ZSBkaWRuJ3QgZ2V0IG9uZSBsYXN0IHVuc2hpZnQuXG4gIGlmICghc3RhdGUuZW5kRW1pdHRlZCAmJiBzdGF0ZS5sZW5ndGggPT09IDApIHtcbiAgICBzdGF0ZS5lbmRFbWl0dGVkID0gdHJ1ZTtcbiAgICBzdHJlYW0ucmVhZGFibGUgPSBmYWxzZTtcbiAgICBzdHJlYW0uZW1pdCgnZW5kJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5kZXhPZih4cywgeCkge1xuICBmb3IgKHZhciBpID0gMCwgbCA9IHhzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGlmICh4c1tpXSA9PT0geCkgcmV0dXJuIGk7XG4gIH1cbiAgcmV0dXJuIC0xO1xufSIsCiAgICAiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbi8vIGEgdHJhbnNmb3JtIHN0cmVhbSBpcyBhIHJlYWRhYmxlL3dyaXRhYmxlIHN0cmVhbSB3aGVyZSB5b3UgZG9cbi8vIHNvbWV0aGluZyB3aXRoIHRoZSBkYXRhLiAgU29tZXRpbWVzIGl0J3MgY2FsbGVkIGEgXCJmaWx0ZXJcIixcbi8vIGJ1dCB0aGF0J3Mgbm90IGEgZ3JlYXQgbmFtZSBmb3IgaXQsIHNpbmNlIHRoYXQgaW1wbGllcyBhIHRoaW5nIHdoZXJlXG4vLyBzb21lIGJpdHMgcGFzcyB0aHJvdWdoLCBhbmQgb3RoZXJzIGFyZSBzaW1wbHkgaWdub3JlZC4gIChUaGF0IHdvdWxkXG4vLyBiZSBhIHZhbGlkIGV4YW1wbGUgb2YgYSB0cmFuc2Zvcm0sIG9mIGNvdXJzZS4pXG4vL1xuLy8gV2hpbGUgdGhlIG91dHB1dCBpcyBjYXVzYWxseSByZWxhdGVkIHRvIHRoZSBpbnB1dCwgaXQncyBub3QgYVxuLy8gbmVjZXNzYXJpbHkgc3ltbWV0cmljIG9yIHN5bmNocm9ub3VzIHRyYW5zZm9ybWF0aW9uLiAgRm9yIGV4YW1wbGUsXG4vLyBhIHpsaWIgc3RyZWFtIG1pZ2h0IHRha2UgbXVsdGlwbGUgcGxhaW4tdGV4dCB3cml0ZXMoKSwgYW5kIHRoZW5cbi8vIGVtaXQgYSBzaW5nbGUgY29tcHJlc3NlZCBjaHVuayBzb21lIHRpbWUgaW4gdGhlIGZ1dHVyZS5cbi8vXG4vLyBIZXJlJ3MgaG93IHRoaXMgd29ya3M6XG4vL1xuLy8gVGhlIFRyYW5zZm9ybSBzdHJlYW0gaGFzIGFsbCB0aGUgYXNwZWN0cyBvZiB0aGUgcmVhZGFibGUgYW5kIHdyaXRhYmxlXG4vLyBzdHJlYW0gY2xhc3Nlcy4gIFdoZW4geW91IHdyaXRlKGNodW5rKSwgdGhhdCBjYWxscyBfd3JpdGUoY2h1bmssY2IpXG4vLyBpbnRlcm5hbGx5LCBhbmQgcmV0dXJucyBmYWxzZSBpZiB0aGVyZSdzIGEgbG90IG9mIHBlbmRpbmcgd3JpdGVzXG4vLyBidWZmZXJlZCB1cC4gIFdoZW4geW91IGNhbGwgcmVhZCgpLCB0aGF0IGNhbGxzIF9yZWFkKG4pIHVudGlsXG4vLyB0aGVyZSdzIGVub3VnaCBwZW5kaW5nIHJlYWRhYmxlIGRhdGEgYnVmZmVyZWQgdXAuXG4vL1xuLy8gSW4gYSB0cmFuc2Zvcm0gc3RyZWFtLCB0aGUgd3JpdHRlbiBkYXRhIGlzIHBsYWNlZCBpbiBhIGJ1ZmZlci4gIFdoZW5cbi8vIF9yZWFkKG4pIGlzIGNhbGxlZCwgaXQgdHJhbnNmb3JtcyB0aGUgcXVldWVkIHVwIGRhdGEsIGNhbGxpbmcgdGhlXG4vLyBidWZmZXJlZCBfd3JpdGUgY2IncyBhcyBpdCBjb25zdW1lcyBjaHVua3MuICBJZiBjb25zdW1pbmcgYSBzaW5nbGVcbi8vIHdyaXR0ZW4gY2h1bmsgd291bGQgcmVzdWx0IGluIG11bHRpcGxlIG91dHB1dCBjaHVua3MsIHRoZW4gdGhlIGZpcnN0XG4vLyBvdXRwdXR0ZWQgYml0IGNhbGxzIHRoZSByZWFkY2IsIGFuZCBzdWJzZXF1ZW50IGNodW5rcyBqdXN0IGdvIGludG9cbi8vIHRoZSByZWFkIGJ1ZmZlciwgYW5kIHdpbGwgY2F1c2UgaXQgdG8gZW1pdCAncmVhZGFibGUnIGlmIG5lY2Vzc2FyeS5cbi8vXG4vLyBUaGlzIHdheSwgYmFjay1wcmVzc3VyZSBpcyBhY3R1YWxseSBkZXRlcm1pbmVkIGJ5IHRoZSByZWFkaW5nIHNpZGUsXG4vLyBzaW5jZSBfcmVhZCBoYXMgdG8gYmUgY2FsbGVkIHRvIHN0YXJ0IHByb2Nlc3NpbmcgYSBuZXcgY2h1bmsuICBIb3dldmVyLFxuLy8gYSBwYXRob2xvZ2ljYWwgaW5mbGF0ZSB0eXBlIG9mIHRyYW5zZm9ybSBjYW4gY2F1c2UgZXhjZXNzaXZlIGJ1ZmZlcmluZ1xuLy8gaGVyZS4gIEZvciBleGFtcGxlLCBpbWFnaW5lIGEgc3RyZWFtIHdoZXJlIGV2ZXJ5IGJ5dGUgb2YgaW5wdXQgaXNcbi8vIGludGVycHJldGVkIGFzIGFuIGludGVnZXIgZnJvbSAwLTI1NSwgYW5kIHRoZW4gcmVzdWx0cyBpbiB0aGF0IG1hbnlcbi8vIGJ5dGVzIG9mIG91dHB1dC4gIFdyaXRpbmcgdGhlIDQgYnl0ZXMge2ZmLGZmLGZmLGZmfSB3b3VsZCByZXN1bHQgaW5cbi8vIDFrYiBvZiBkYXRhIGJlaW5nIG91dHB1dC4gIEluIHRoaXMgY2FzZSwgeW91IGNvdWxkIHdyaXRlIGEgdmVyeSBzbWFsbFxuLy8gYW1vdW50IG9mIGlucHV0LCBhbmQgZW5kIHVwIHdpdGggYSB2ZXJ5IGxhcmdlIGFtb3VudCBvZiBvdXRwdXQuICBJblxuLy8gc3VjaCBhIHBhdGhvbG9naWNhbCBpbmZsYXRpbmcgbWVjaGFuaXNtLCB0aGVyZSdkIGJlIG5vIHdheSB0byB0ZWxsXG4vLyB0aGUgc3lzdGVtIHRvIHN0b3AgZG9pbmcgdGhlIHRyYW5zZm9ybS4gIEEgc2luZ2xlIDRNQiB3cml0ZSBjb3VsZFxuLy8gY2F1c2UgdGhlIHN5c3RlbSB0byBydW4gb3V0IG9mIG1lbW9yeS5cbi8vXG4vLyBIb3dldmVyLCBldmVuIGluIHN1Y2ggYSBwYXRob2xvZ2ljYWwgY2FzZSwgb25seSBhIHNpbmdsZSB3cml0dGVuIGNodW5rXG4vLyB3b3VsZCBiZSBjb25zdW1lZCwgYW5kIHRoZW4gdGhlIHJlc3Qgd291bGQgd2FpdCAodW4tdHJhbnNmb3JtZWQpIHVudGlsXG4vLyB0aGUgcmVzdWx0cyBvZiB0aGUgcHJldmlvdXMgdHJhbnNmb3JtZWQgY2h1bmsgd2VyZSBjb25zdW1lZC5cblxuJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFRyYW5zZm9ybTtcblxudmFyIER1cGxleCA9IHJlcXVpcmUoJy4vX3N0cmVhbV9kdXBsZXgnKTtcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciB1dGlsID0gT2JqZWN0LmNyZWF0ZShyZXF1aXJlKCdjb3JlLXV0aWwtaXMnKSk7XG51dGlsLmluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG51dGlsLmluaGVyaXRzKFRyYW5zZm9ybSwgRHVwbGV4KTtcblxuZnVuY3Rpb24gYWZ0ZXJUcmFuc2Zvcm0oZXIsIGRhdGEpIHtcbiAgdmFyIHRzID0gdGhpcy5fdHJhbnNmb3JtU3RhdGU7XG4gIHRzLnRyYW5zZm9ybWluZyA9IGZhbHNlO1xuXG4gIHZhciBjYiA9IHRzLndyaXRlY2I7XG5cbiAgaWYgKCFjYikge1xuICAgIHJldHVybiB0aGlzLmVtaXQoJ2Vycm9yJywgbmV3IEVycm9yKCd3cml0ZSBjYWxsYmFjayBjYWxsZWQgbXVsdGlwbGUgdGltZXMnKSk7XG4gIH1cblxuICB0cy53cml0ZWNodW5rID0gbnVsbDtcbiAgdHMud3JpdGVjYiA9IG51bGw7XG5cbiAgaWYgKGRhdGEgIT0gbnVsbCkgLy8gc2luZ2xlIGVxdWFscyBjaGVjayBmb3IgYm90aCBgbnVsbGAgYW5kIGB1bmRlZmluZWRgXG4gICAgdGhpcy5wdXNoKGRhdGEpO1xuXG4gIGNiKGVyKTtcblxuICB2YXIgcnMgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICBycy5yZWFkaW5nID0gZmFsc2U7XG4gIGlmIChycy5uZWVkUmVhZGFibGUgfHwgcnMubGVuZ3RoIDwgcnMuaGlnaFdhdGVyTWFyaykge1xuICAgIHRoaXMuX3JlYWQocnMuaGlnaFdhdGVyTWFyayk7XG4gIH1cbn1cblxuZnVuY3Rpb24gVHJhbnNmb3JtKG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFRyYW5zZm9ybSkpIHJldHVybiBuZXcgVHJhbnNmb3JtKG9wdGlvbnMpO1xuXG4gIER1cGxleC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXG4gIHRoaXMuX3RyYW5zZm9ybVN0YXRlID0ge1xuICAgIGFmdGVyVHJhbnNmb3JtOiBhZnRlclRyYW5zZm9ybS5iaW5kKHRoaXMpLFxuICAgIG5lZWRUcmFuc2Zvcm06IGZhbHNlLFxuICAgIHRyYW5zZm9ybWluZzogZmFsc2UsXG4gICAgd3JpdGVjYjogbnVsbCxcbiAgICB3cml0ZWNodW5rOiBudWxsLFxuICAgIHdyaXRlZW5jb2Rpbmc6IG51bGxcbiAgfTtcblxuICAvLyBzdGFydCBvdXQgYXNraW5nIGZvciBhIHJlYWRhYmxlIGV2ZW50IG9uY2UgZGF0YSBpcyB0cmFuc2Zvcm1lZC5cbiAgdGhpcy5fcmVhZGFibGVTdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlO1xuXG4gIC8vIHdlIGhhdmUgaW1wbGVtZW50ZWQgdGhlIF9yZWFkIG1ldGhvZCwgYW5kIGRvbmUgdGhlIG90aGVyIHRoaW5nc1xuICAvLyB0aGF0IFJlYWRhYmxlIHdhbnRzIGJlZm9yZSB0aGUgZmlyc3QgX3JlYWQgY2FsbCwgc28gdW5zZXQgdGhlXG4gIC8vIHN5bmMgZ3VhcmQgZmxhZy5cbiAgdGhpcy5fcmVhZGFibGVTdGF0ZS5zeW5jID0gZmFsc2U7XG5cbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMudHJhbnNmb3JtID09PSAnZnVuY3Rpb24nKSB0aGlzLl90cmFuc2Zvcm0gPSBvcHRpb25zLnRyYW5zZm9ybTtcblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5mbHVzaCA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fZmx1c2ggPSBvcHRpb25zLmZsdXNoO1xuICB9XG5cbiAgLy8gV2hlbiB0aGUgd3JpdGFibGUgc2lkZSBmaW5pc2hlcywgdGhlbiBmbHVzaCBvdXQgYW55dGhpbmcgcmVtYWluaW5nLlxuICB0aGlzLm9uKCdwcmVmaW5pc2gnLCBwcmVmaW5pc2gpO1xufVxuXG5mdW5jdGlvbiBwcmVmaW5pc2goKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgaWYgKHR5cGVvZiB0aGlzLl9mbHVzaCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRoaXMuX2ZsdXNoKGZ1bmN0aW9uIChlciwgZGF0YSkge1xuICAgICAgZG9uZShfdGhpcywgZXIsIGRhdGEpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGRvbmUodGhpcywgbnVsbCwgbnVsbCk7XG4gIH1cbn1cblxuVHJhbnNmb3JtLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZykge1xuICB0aGlzLl90cmFuc2Zvcm1TdGF0ZS5uZWVkVHJhbnNmb3JtID0gZmFsc2U7XG4gIHJldHVybiBEdXBsZXgucHJvdG90eXBlLnB1c2guY2FsbCh0aGlzLCBjaHVuaywgZW5jb2RpbmcpO1xufTtcblxuLy8gVGhpcyBpcyB0aGUgcGFydCB3aGVyZSB5b3UgZG8gc3R1ZmYhXG4vLyBvdmVycmlkZSB0aGlzIGZ1bmN0aW9uIGluIGltcGxlbWVudGF0aW9uIGNsYXNzZXMuXG4vLyAnY2h1bmsnIGlzIGFuIGlucHV0IGNodW5rLlxuLy9cbi8vIENhbGwgYHB1c2gobmV3Q2h1bmspYCB0byBwYXNzIGFsb25nIHRyYW5zZm9ybWVkIG91dHB1dFxuLy8gdG8gdGhlIHJlYWRhYmxlIHNpZGUuICBZb3UgbWF5IGNhbGwgJ3B1c2gnIHplcm8gb3IgbW9yZSB0aW1lcy5cbi8vXG4vLyBDYWxsIGBjYihlcnIpYCB3aGVuIHlvdSBhcmUgZG9uZSB3aXRoIHRoaXMgY2h1bmsuICBJZiB5b3UgcGFzc1xuLy8gYW4gZXJyb3IsIHRoZW4gdGhhdCdsbCBwdXQgdGhlIGh1cnQgb24gdGhlIHdob2xlIG9wZXJhdGlvbi4gIElmIHlvdVxuLy8gbmV2ZXIgY2FsbCBjYigpLCB0aGVuIHlvdSdsbCBuZXZlciBnZXQgYW5vdGhlciBjaHVuay5cblRyYW5zZm9ybS5wcm90b3R5cGUuX3RyYW5zZm9ybSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIHRocm93IG5ldyBFcnJvcignX3RyYW5zZm9ybSgpIGlzIG5vdCBpbXBsZW1lbnRlZCcpO1xufTtcblxuVHJhbnNmb3JtLnByb3RvdHlwZS5fd3JpdGUgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICB2YXIgdHMgPSB0aGlzLl90cmFuc2Zvcm1TdGF0ZTtcbiAgdHMud3JpdGVjYiA9IGNiO1xuICB0cy53cml0ZWNodW5rID0gY2h1bms7XG4gIHRzLndyaXRlZW5jb2RpbmcgPSBlbmNvZGluZztcbiAgaWYgKCF0cy50cmFuc2Zvcm1pbmcpIHtcbiAgICB2YXIgcnMgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICAgIGlmICh0cy5uZWVkVHJhbnNmb3JtIHx8IHJzLm5lZWRSZWFkYWJsZSB8fCBycy5sZW5ndGggPCBycy5oaWdoV2F0ZXJNYXJrKSB0aGlzLl9yZWFkKHJzLmhpZ2hXYXRlck1hcmspO1xuICB9XG59O1xuXG4vLyBEb2Vzbid0IG1hdHRlciB3aGF0IHRoZSBhcmdzIGFyZSBoZXJlLlxuLy8gX3RyYW5zZm9ybSBkb2VzIGFsbCB0aGUgd29yay5cbi8vIFRoYXQgd2UgZ290IGhlcmUgbWVhbnMgdGhhdCB0aGUgcmVhZGFibGUgc2lkZSB3YW50cyBtb3JlIGRhdGEuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLl9yZWFkID0gZnVuY3Rpb24gKG4pIHtcbiAgdmFyIHRzID0gdGhpcy5fdHJhbnNmb3JtU3RhdGU7XG5cbiAgaWYgKHRzLndyaXRlY2h1bmsgIT09IG51bGwgJiYgdHMud3JpdGVjYiAmJiAhdHMudHJhbnNmb3JtaW5nKSB7XG4gICAgdHMudHJhbnNmb3JtaW5nID0gdHJ1ZTtcbiAgICB0aGlzLl90cmFuc2Zvcm0odHMud3JpdGVjaHVuaywgdHMud3JpdGVlbmNvZGluZywgdHMuYWZ0ZXJUcmFuc2Zvcm0pO1xuICB9IGVsc2Uge1xuICAgIC8vIG1hcmsgdGhhdCB3ZSBuZWVkIGEgdHJhbnNmb3JtLCBzbyB0aGF0IGFueSBkYXRhIHRoYXQgY29tZXMgaW5cbiAgICAvLyB3aWxsIGdldCBwcm9jZXNzZWQsIG5vdyB0aGF0IHdlJ3ZlIGFza2VkIGZvciBpdC5cbiAgICB0cy5uZWVkVHJhbnNmb3JtID0gdHJ1ZTtcbiAgfVxufTtcblxuVHJhbnNmb3JtLnByb3RvdHlwZS5fZGVzdHJveSA9IGZ1bmN0aW9uIChlcnIsIGNiKSB7XG4gIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gIER1cGxleC5wcm90b3R5cGUuX2Rlc3Ryb3kuY2FsbCh0aGlzLCBlcnIsIGZ1bmN0aW9uIChlcnIyKSB7XG4gICAgY2IoZXJyMik7XG4gICAgX3RoaXMyLmVtaXQoJ2Nsb3NlJyk7XG4gIH0pO1xufTtcblxuZnVuY3Rpb24gZG9uZShzdHJlYW0sIGVyLCBkYXRhKSB7XG4gIGlmIChlcikgcmV0dXJuIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVyKTtcblxuICBpZiAoZGF0YSAhPSBudWxsKSAvLyBzaW5nbGUgZXF1YWxzIGNoZWNrIGZvciBib3RoIGBudWxsYCBhbmQgYHVuZGVmaW5lZGBcbiAgICBzdHJlYW0ucHVzaChkYXRhKTtcblxuICAvLyBpZiB0aGVyZSdzIG5vdGhpbmcgaW4gdGhlIHdyaXRlIGJ1ZmZlciwgdGhlbiB0aGF0IG1lYW5zXG4gIC8vIHRoYXQgbm90aGluZyBtb3JlIHdpbGwgZXZlciBiZSBwcm92aWRlZFxuICBpZiAoc3RyZWFtLl93cml0YWJsZVN0YXRlLmxlbmd0aCkgdGhyb3cgbmV3IEVycm9yKCdDYWxsaW5nIHRyYW5zZm9ybSBkb25lIHdoZW4gd3MubGVuZ3RoICE9IDAnKTtcblxuICBpZiAoc3RyZWFtLl90cmFuc2Zvcm1TdGF0ZS50cmFuc2Zvcm1pbmcpIHRocm93IG5ldyBFcnJvcignQ2FsbGluZyB0cmFuc2Zvcm0gZG9uZSB3aGVuIHN0aWxsIHRyYW5zZm9ybWluZycpO1xuXG4gIHJldHVybiBzdHJlYW0ucHVzaChudWxsKTtcbn0iLAogICAgIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyBhIHBhc3N0aHJvdWdoIHN0cmVhbS5cbi8vIGJhc2ljYWxseSBqdXN0IHRoZSBtb3N0IG1pbmltYWwgc29ydCBvZiBUcmFuc2Zvcm0gc3RyZWFtLlxuLy8gRXZlcnkgd3JpdHRlbiBjaHVuayBnZXRzIG91dHB1dCBhcy1pcy5cblxuJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFBhc3NUaHJvdWdoO1xuXG52YXIgVHJhbnNmb3JtID0gcmVxdWlyZSgnLi9fc3RyZWFtX3RyYW5zZm9ybScpO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIHV0aWwgPSBPYmplY3QuY3JlYXRlKHJlcXVpcmUoJ2NvcmUtdXRpbC1pcycpKTtcbnV0aWwuaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbnV0aWwuaW5oZXJpdHMoUGFzc1Rocm91Z2gsIFRyYW5zZm9ybSk7XG5cbmZ1bmN0aW9uIFBhc3NUaHJvdWdoKG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFBhc3NUaHJvdWdoKSkgcmV0dXJuIG5ldyBQYXNzVGhyb3VnaChvcHRpb25zKTtcblxuICBUcmFuc2Zvcm0uY2FsbCh0aGlzLCBvcHRpb25zKTtcbn1cblxuUGFzc1Rocm91Z2gucHJvdG90eXBlLl90cmFuc2Zvcm0gPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICBjYihudWxsLCBjaHVuayk7XG59OyIsCiAgICAidmFyIFN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpO1xuaWYgKHByb2Nlc3MuZW52LlJFQURBQkxFX1NUUkVBTSA9PT0gJ2Rpc2FibGUnICYmIFN0cmVhbSkge1xuICBtb2R1bGUuZXhwb3J0cyA9IFN0cmVhbTtcbiAgZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gU3RyZWFtLlJlYWRhYmxlO1xuICBleHBvcnRzLlJlYWRhYmxlID0gU3RyZWFtLlJlYWRhYmxlO1xuICBleHBvcnRzLldyaXRhYmxlID0gU3RyZWFtLldyaXRhYmxlO1xuICBleHBvcnRzLkR1cGxleCA9IFN0cmVhbS5EdXBsZXg7XG4gIGV4cG9ydHMuVHJhbnNmb3JtID0gU3RyZWFtLlRyYW5zZm9ybTtcbiAgZXhwb3J0cy5QYXNzVGhyb3VnaCA9IFN0cmVhbS5QYXNzVGhyb3VnaDtcbiAgZXhwb3J0cy5TdHJlYW0gPSBTdHJlYW07XG59IGVsc2Uge1xuICBleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2xpYi9fc3RyZWFtX3JlYWRhYmxlLmpzJyk7XG4gIGV4cG9ydHMuU3RyZWFtID0gU3RyZWFtIHx8IGV4cG9ydHM7XG4gIGV4cG9ydHMuUmVhZGFibGUgPSBleHBvcnRzO1xuICBleHBvcnRzLldyaXRhYmxlID0gcmVxdWlyZSgnLi9saWIvX3N0cmVhbV93cml0YWJsZS5qcycpO1xuICBleHBvcnRzLkR1cGxleCA9IHJlcXVpcmUoJy4vbGliL19zdHJlYW1fZHVwbGV4LmpzJyk7XG4gIGV4cG9ydHMuVHJhbnNmb3JtID0gcmVxdWlyZSgnLi9saWIvX3N0cmVhbV90cmFuc2Zvcm0uanMnKTtcbiAgZXhwb3J0cy5QYXNzVGhyb3VnaCA9IHJlcXVpcmUoJy4vbGliL19zdHJlYW1fcGFzc3Rocm91Z2guanMnKTtcbn1cbiIsCiAgICAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL3JlYWRhYmxlJykuUGFzc1Rocm91Z2hcbiIsCiAgICAidmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG52YXIgUGFzc1Rocm91Z2ggPSByZXF1aXJlKCdyZWFkYWJsZS1zdHJlYW0vcGFzc3Rocm91Z2gnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFJlYWRhYmxlOiBSZWFkYWJsZSxcbiAgV3JpdGFibGU6IFdyaXRhYmxlXG59O1xuXG51dGlsLmluaGVyaXRzKFJlYWRhYmxlLCBQYXNzVGhyb3VnaCk7XG51dGlsLmluaGVyaXRzKFdyaXRhYmxlLCBQYXNzVGhyb3VnaCk7XG5cbi8vIFBhdGNoIHRoZSBnaXZlbiBtZXRob2Qgb2YgaW5zdGFuY2Ugc28gdGhhdCB0aGUgY2FsbGJhY2tcbi8vIGlzIGV4ZWN1dGVkIG9uY2UsIGJlZm9yZSB0aGUgYWN0dWFsIG1ldGhvZCBpcyBjYWxsZWQgdGhlXG4vLyBmaXJzdCB0aW1lLlxuZnVuY3Rpb24gYmVmb3JlRmlyc3RDYWxsKGluc3RhbmNlLCBtZXRob2QsIGNhbGxiYWNrKSB7XG4gIGluc3RhbmNlW21ldGhvZF0gPSBmdW5jdGlvbigpIHtcbiAgICBkZWxldGUgaW5zdGFuY2VbbWV0aG9kXTtcbiAgICBjYWxsYmFjay5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIHJldHVybiB0aGlzW21ldGhvZF0uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gUmVhZGFibGUoZm4sIG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlYWRhYmxlKSlcbiAgICByZXR1cm4gbmV3IFJlYWRhYmxlKGZuLCBvcHRpb25zKTtcblxuICBQYXNzVGhyb3VnaC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXG4gIGJlZm9yZUZpcnN0Q2FsbCh0aGlzLCAnX3JlYWQnLCBmdW5jdGlvbigpIHtcbiAgICB2YXIgc291cmNlID0gZm4uY2FsbCh0aGlzLCBvcHRpb25zKTtcbiAgICB2YXIgZW1pdCA9IHRoaXMuZW1pdC5iaW5kKHRoaXMsICdlcnJvcicpO1xuICAgIHNvdXJjZS5vbignZXJyb3InLCBlbWl0KTtcbiAgICBzb3VyY2UucGlwZSh0aGlzKTtcbiAgfSk7XG5cbiAgdGhpcy5lbWl0KCdyZWFkYWJsZScpO1xufVxuXG5mdW5jdGlvbiBXcml0YWJsZShmbiwgb3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgV3JpdGFibGUpKVxuICAgIHJldHVybiBuZXcgV3JpdGFibGUoZm4sIG9wdGlvbnMpO1xuXG4gIFBhc3NUaHJvdWdoLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cbiAgYmVmb3JlRmlyc3RDYWxsKHRoaXMsICdfd3JpdGUnLCBmdW5jdGlvbigpIHtcbiAgICB2YXIgZGVzdGluYXRpb24gPSBmbi5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuICAgIHZhciBlbWl0ID0gdGhpcy5lbWl0LmJpbmQodGhpcywgJ2Vycm9yJyk7XG4gICAgZGVzdGluYXRpb24ub24oJ2Vycm9yJywgZW1pdCk7XG4gICAgdGhpcy5waXBlKGRlc3RpbmF0aW9uKTtcbiAgfSk7XG5cbiAgdGhpcy5lbWl0KCd3cml0YWJsZScpO1xufVxuXG4iLAogICAgIi8qIVxuICogbm9ybWFsaXplLXBhdGggPGh0dHBzOi8vZ2l0aHViLmNvbS9qb25zY2hsaW5rZXJ0L25vcm1hbGl6ZS1wYXRoPlxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4LCBKb24gU2NobGlua2VydC5cbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHBhdGgsIHN0cmlwVHJhaWxpbmcpIHtcbiAgaWYgKHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2V4cGVjdGVkIHBhdGggdG8gYmUgYSBzdHJpbmcnKTtcbiAgfVxuXG4gIGlmIChwYXRoID09PSAnXFxcXCcgfHwgcGF0aCA9PT0gJy8nKSByZXR1cm4gJy8nO1xuXG4gIHZhciBsZW4gPSBwYXRoLmxlbmd0aDtcbiAgaWYgKGxlbiA8PSAxKSByZXR1cm4gcGF0aDtcblxuICAvLyBlbnN1cmUgdGhhdCB3aW4zMiBuYW1lc3BhY2VzIGhhcyB0d28gbGVhZGluZyBzbGFzaGVzLCBzbyB0aGF0IHRoZSBwYXRoIGlzXG4gIC8vIGhhbmRsZWQgcHJvcGVybHkgYnkgdGhlIHdpbjMyIHZlcnNpb24gb2YgcGF0aC5wYXJzZSgpIGFmdGVyIGJlaW5nIG5vcm1hbGl6ZWRcbiAgLy8gaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeS93aW5kb3dzL2Rlc2t0b3AvYWEzNjUyNDcodj12cy44NSkuYXNweCNuYW1lc3BhY2VzXG4gIHZhciBwcmVmaXggPSAnJztcbiAgaWYgKGxlbiA+IDQgJiYgcGF0aFszXSA9PT0gJ1xcXFwnKSB7XG4gICAgdmFyIGNoID0gcGF0aFsyXTtcbiAgICBpZiAoKGNoID09PSAnPycgfHwgY2ggPT09ICcuJykgJiYgcGF0aC5zbGljZSgwLCAyKSA9PT0gJ1xcXFxcXFxcJykge1xuICAgICAgcGF0aCA9IHBhdGguc2xpY2UoMik7XG4gICAgICBwcmVmaXggPSAnLy8nO1xuICAgIH1cbiAgfVxuXG4gIHZhciBzZWdzID0gcGF0aC5zcGxpdCgvWy9cXFxcXSsvKTtcbiAgaWYgKHN0cmlwVHJhaWxpbmcgIT09IGZhbHNlICYmIHNlZ3Nbc2Vncy5sZW5ndGggLSAxXSA9PT0gJycpIHtcbiAgICBzZWdzLnBvcCgpO1xuICB9XG4gIHJldHVybiBwcmVmaXggKyBzZWdzLmpvaW4oJy8nKTtcbn07XG4iLAogICAgIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgZmlyc3QgYXJndW1lbnQgaXQgcmVjZWl2ZXMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgQW55IHZhbHVlLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgYHZhbHVlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKlxuICogY29uc29sZS5sb2coXy5pZGVudGl0eShvYmplY3QpID09PSBvYmplY3QpO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBpZGVudGl0eSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaWRlbnRpdHk7XG4iLAogICAgIi8qKlxuICogQSBmYXN0ZXIgYWx0ZXJuYXRpdmUgdG8gYEZ1bmN0aW9uI2FwcGx5YCwgdGhpcyBmdW5jdGlvbiBpbnZva2VzIGBmdW5jYFxuICogd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgYHRoaXNBcmdgIGFuZCB0aGUgYXJndW1lbnRzIG9mIGBhcmdzYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaW52b2tlLlxuICogQHBhcmFtIHsqfSB0aGlzQXJnIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gKiBAcGFyYW0ge0FycmF5fSBhcmdzIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIGBmdW5jYCB3aXRoLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc3VsdCBvZiBgZnVuY2AuXG4gKi9cbmZ1bmN0aW9uIGFwcGx5KGZ1bmMsIHRoaXNBcmcsIGFyZ3MpIHtcbiAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgIGNhc2UgMDogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnKTtcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSk7XG4gICAgY2FzZSAyOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgfVxuICByZXR1cm4gZnVuYy5hcHBseSh0aGlzQXJnLCBhcmdzKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcHBseTtcbiIsCiAgICAidmFyIGFwcGx5ID0gcmVxdWlyZSgnLi9fYXBwbHknKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU1heCA9IE1hdGgubWF4O1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVJlc3RgIHdoaWNoIHRyYW5zZm9ybXMgdGhlIHJlc3QgYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIHJlc3QgYXJyYXkgdHJhbnNmb3JtLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG92ZXJSZXN0KGZ1bmMsIHN0YXJ0LCB0cmFuc2Zvcm0pIHtcbiAgc3RhcnQgPSBuYXRpdmVNYXgoc3RhcnQgPT09IHVuZGVmaW5lZCA/IChmdW5jLmxlbmd0aCAtIDEpIDogc3RhcnQsIDApO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IG5hdGl2ZU1heChhcmdzLmxlbmd0aCAtIHN0YXJ0LCAwKSxcbiAgICAgICAgYXJyYXkgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGFycmF5W2luZGV4XSA9IGFyZ3Nbc3RhcnQgKyBpbmRleF07XG4gICAgfVxuICAgIGluZGV4ID0gLTE7XG4gICAgdmFyIG90aGVyQXJncyA9IEFycmF5KHN0YXJ0ICsgMSk7XG4gICAgd2hpbGUgKCsraW5kZXggPCBzdGFydCkge1xuICAgICAgb3RoZXJBcmdzW2luZGV4XSA9IGFyZ3NbaW5kZXhdO1xuICAgIH1cbiAgICBvdGhlckFyZ3Nbc3RhcnRdID0gdHJhbnNmb3JtKGFycmF5KTtcbiAgICByZXR1cm4gYXBwbHkoZnVuYywgdGhpcywgb3RoZXJBcmdzKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvdmVyUmVzdDtcbiIsCiAgICAiLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGB2YWx1ZWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjQuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHJldHVybiBmcm9tIHRoZSBuZXcgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjb25zdGFudCBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdHMgPSBfLnRpbWVzKDIsIF8uY29uc3RhbnQoeyAnYSc6IDEgfSkpO1xuICpcbiAqIGNvbnNvbGUubG9nKG9iamVjdHMpO1xuICogLy8gPT4gW3sgJ2EnOiAxIH0sIHsgJ2EnOiAxIH1dXG4gKlxuICogY29uc29sZS5sb2cob2JqZWN0c1swXSA9PT0gb2JqZWN0c1sxXSk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGNvbnN0YW50KHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29uc3RhbnQ7XG4iLAogICAgIi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZ2xvYmFsYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsICYmIGdsb2JhbC5PYmplY3QgPT09IE9iamVjdCAmJiBnbG9iYWw7XG5cbm1vZHVsZS5leHBvcnRzID0gZnJlZUdsb2JhbDtcbiIsCiAgICAidmFyIGZyZWVHbG9iYWwgPSByZXF1aXJlKCcuL19mcmVlR2xvYmFsJyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgc2VsZmAuICovXG52YXIgZnJlZVNlbGYgPSB0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmICYmIHNlbGYuT2JqZWN0ID09PSBPYmplY3QgJiYgc2VsZjtcblxuLyoqIFVzZWQgYXMgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3QuICovXG52YXIgcm9vdCA9IGZyZWVHbG9iYWwgfHwgZnJlZVNlbGYgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblxubW9kdWxlLmV4cG9ydHMgPSByb290O1xuIiwKICAgICJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgU3ltYm9sID0gcm9vdC5TeW1ib2w7XG5cbm1vZHVsZS5leHBvcnRzID0gU3ltYm9sO1xuIiwKICAgICJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZVxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VHZXRUYWdgIHdoaWNoIGlnbm9yZXMgYFN5bWJvbC50b1N0cmluZ1RhZ2AgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHJhdyBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBnZXRSYXdUYWcodmFsdWUpIHtcbiAgdmFyIGlzT3duID0gaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgc3ltVG9TdHJpbmdUYWcpLFxuICAgICAgdGFnID0gdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuXG4gIHRyeSB7XG4gICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdW5kZWZpbmVkO1xuICAgIHZhciB1bm1hc2tlZCA9IHRydWU7XG4gIH0gY2F0Y2ggKGUpIHt9XG5cbiAgdmFyIHJlc3VsdCA9IG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xuICBpZiAodW5tYXNrZWQpIHtcbiAgICBpZiAoaXNPd24pIHtcbiAgICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHRhZztcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRSYXdUYWc7XG4iLAogICAgIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZVxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcgdXNpbmcgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gb2JqZWN0VG9TdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG9iamVjdFRvU3RyaW5nO1xuIiwKICAgICJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgZ2V0UmF3VGFnID0gcmVxdWlyZSgnLi9fZ2V0UmF3VGFnJyksXG4gICAgb2JqZWN0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19vYmplY3RUb1N0cmluZycpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbnVsbFRhZyA9ICdbb2JqZWN0IE51bGxdJyxcbiAgICB1bmRlZmluZWRUYWcgPSAnW29iamVjdCBVbmRlZmluZWRdJztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldFRhZ2Agd2l0aG91dCBmYWxsYmFja3MgZm9yIGJ1Z2d5IGVudmlyb25tZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0VGFnKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWRUYWcgOiBudWxsVGFnO1xuICB9XG4gIHJldHVybiAoc3ltVG9TdHJpbmdUYWcgJiYgc3ltVG9TdHJpbmdUYWcgaW4gT2JqZWN0KHZhbHVlKSlcbiAgICA/IGdldFJhd1RhZyh2YWx1ZSlcbiAgICA6IG9iamVjdFRvU3RyaW5nKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlR2V0VGFnO1xuIiwKICAgICIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHRoZVxuICogW2xhbmd1YWdlIHR5cGVdKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1lY21hc2NyaXB0LWxhbmd1YWdlLXR5cGVzKVxuICogb2YgYE9iamVjdGAuIChlLmcuIGFycmF5cywgZnVuY3Rpb25zLCBvYmplY3RzLCByZWdleGVzLCBgbmV3IE51bWJlcigwKWAsIGFuZCBgbmV3IFN0cmluZygnJylgKVxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0KHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChfLm5vb3ApO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgKHR5cGUgPT0gJ29iamVjdCcgfHwgdHlwZSA9PSAnZnVuY3Rpb24nKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc09iamVjdDtcbiIsCiAgICAidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0Jyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhc3luY1RhZyA9ICdbb2JqZWN0IEFzeW5jRnVuY3Rpb25dJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBnZW5UYWcgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nLFxuICAgIHByb3h5VGFnID0gJ1tvYmplY3QgUHJveHldJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYEZ1bmN0aW9uYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBmdW5jdGlvbiwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oXyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0Z1bmN0aW9uKC9hYmMvKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gVGhlIHVzZSBvZiBgT2JqZWN0I3RvU3RyaW5nYCBhdm9pZHMgaXNzdWVzIHdpdGggdGhlIGB0eXBlb2ZgIG9wZXJhdG9yXG4gIC8vIGluIFNhZmFyaSA5IHdoaWNoIHJldHVybnMgJ29iamVjdCcgZm9yIHR5cGVkIGFycmF5cyBhbmQgb3RoZXIgY29uc3RydWN0b3JzLlxuICB2YXIgdGFnID0gYmFzZUdldFRhZyh2YWx1ZSk7XG4gIHJldHVybiB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnIHx8IHRhZyA9PSBhc3luY1RhZyB8fCB0YWcgPT0gcHJveHlUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGdW5jdGlvbjtcbiIsCiAgICAidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBvdmVycmVhY2hpbmcgY29yZS1qcyBzaGltcy4gKi9cbnZhciBjb3JlSnNEYXRhID0gcm9vdFsnX19jb3JlLWpzX3NoYXJlZF9fJ107XG5cbm1vZHVsZS5leHBvcnRzID0gY29yZUpzRGF0YTtcbiIsCiAgICAidmFyIGNvcmVKc0RhdGEgPSByZXF1aXJlKCcuL19jb3JlSnNEYXRhJyk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBtZXRob2RzIG1hc3F1ZXJhZGluZyBhcyBuYXRpdmUuICovXG52YXIgbWFza1NyY0tleSA9IChmdW5jdGlvbigpIHtcbiAgdmFyIHVpZCA9IC9bXi5dKyQvLmV4ZWMoY29yZUpzRGF0YSAmJiBjb3JlSnNEYXRhLmtleXMgJiYgY29yZUpzRGF0YS5rZXlzLklFX1BST1RPIHx8ICcnKTtcbiAgcmV0dXJuIHVpZCA/ICgnU3ltYm9sKHNyYylfMS4nICsgdWlkKSA6ICcnO1xufSgpKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYGZ1bmNgIGhhcyBpdHMgc291cmNlIG1hc2tlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYGZ1bmNgIGlzIG1hc2tlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc01hc2tlZChmdW5jKSB7XG4gIHJldHVybiAhIW1hc2tTcmNLZXkgJiYgKG1hc2tTcmNLZXkgaW4gZnVuYyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNNYXNrZWQ7XG4iLAogICAgIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYGZ1bmNgIHRvIGl0cyBzb3VyY2UgY29kZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHNvdXJjZSBjb2RlLlxuICovXG5mdW5jdGlvbiB0b1NvdXJjZShmdW5jKSB7XG4gIGlmIChmdW5jICE9IG51bGwpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZ1bmNUb1N0cmluZy5jYWxsKGZ1bmMpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoZnVuYyArICcnKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICB9XG4gIHJldHVybiAnJztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b1NvdXJjZTtcbiIsCiAgICAidmFyIGlzRnVuY3Rpb24gPSByZXF1aXJlKCcuL2lzRnVuY3Rpb24nKSxcbiAgICBpc01hc2tlZCA9IHJlcXVpcmUoJy4vX2lzTWFza2VkJyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0JyksXG4gICAgdG9Tb3VyY2UgPSByZXF1aXJlKCcuL190b1NvdXJjZScpO1xuXG4vKipcbiAqIFVzZWQgdG8gbWF0Y2ggYFJlZ0V4cGBcbiAqIFtzeW50YXggY2hhcmFjdGVyc10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcGF0dGVybnMpLlxuICovXG52YXIgcmVSZWdFeHBDaGFyID0gL1tcXFxcXiQuKis/KClbXFxde318XS9nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaG9zdCBjb25zdHJ1Y3RvcnMgKFNhZmFyaSkuICovXG52YXIgcmVJc0hvc3RDdG9yID0gL15cXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXF0kLztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcbiAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBpZiBhIG1ldGhvZCBpcyBuYXRpdmUuICovXG52YXIgcmVJc05hdGl2ZSA9IFJlZ0V4cCgnXicgK1xuICBmdW5jVG9TdHJpbmcuY2FsbChoYXNPd25Qcm9wZXJ0eSkucmVwbGFjZShyZVJlZ0V4cENoYXIsICdcXFxcJCYnKVxuICAucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXFxcXCgpfCBmb3IgLis/KD89XFxcXFxcXSkvZywgJyQxLio/JykgKyAnJCdcbik7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNOYXRpdmVgIHdpdGhvdXQgYmFkIHNoaW0gY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbmF0aXZlIGZ1bmN0aW9uLFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzTmF0aXZlKHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpIHx8IGlzTWFza2VkKHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgcGF0dGVybiA9IGlzRnVuY3Rpb24odmFsdWUpID8gcmVJc05hdGl2ZSA6IHJlSXNIb3N0Q3RvcjtcbiAgcmV0dXJuIHBhdHRlcm4udGVzdCh0b1NvdXJjZSh2YWx1ZSkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc05hdGl2ZTtcbiIsCiAgICAiLyoqXG4gKiBHZXRzIHRoZSB2YWx1ZSBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZ2V0VmFsdWUob2JqZWN0LCBrZXkpIHtcbiAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0VmFsdWU7XG4iLAogICAgInZhciBiYXNlSXNOYXRpdmUgPSByZXF1aXJlKCcuL19iYXNlSXNOYXRpdmUnKSxcbiAgICBnZXRWYWx1ZSA9IHJlcXVpcmUoJy4vX2dldFZhbHVlJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgbmF0aXZlIGZ1bmN0aW9uIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIG1ldGhvZCB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZnVuY3Rpb24gaWYgaXQncyBuYXRpdmUsIGVsc2UgYHVuZGVmaW5lZGAuXG4gKi9cbmZ1bmN0aW9uIGdldE5hdGl2ZShvYmplY3QsIGtleSkge1xuICB2YXIgdmFsdWUgPSBnZXRWYWx1ZShvYmplY3QsIGtleSk7XG4gIHJldHVybiBiYXNlSXNOYXRpdmUodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0TmF0aXZlO1xuIiwKICAgICJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyk7XG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IChmdW5jdGlvbigpIHtcbiAgdHJ5IHtcbiAgICB2YXIgZnVuYyA9IGdldE5hdGl2ZShPYmplY3QsICdkZWZpbmVQcm9wZXJ0eScpO1xuICAgIGZ1bmMoe30sICcnLCB7fSk7XG4gICAgcmV0dXJuIGZ1bmM7XG4gIH0gY2F0Y2ggKGUpIHt9XG59KCkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmluZVByb3BlcnR5O1xuIiwKICAgICJ2YXIgY29uc3RhbnQgPSByZXF1aXJlKCcuL2NvbnN0YW50JyksXG4gICAgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19kZWZpbmVQcm9wZXJ0eScpLFxuICAgIGlkZW50aXR5ID0gcmVxdWlyZSgnLi9pZGVudGl0eScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBzZXRUb1N0cmluZ2Agd2l0aG91dCBzdXBwb3J0IGZvciBob3QgbG9vcCBzaG9ydGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3RyaW5nIFRoZSBgdG9TdHJpbmdgIHJlc3VsdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gKi9cbnZhciBiYXNlU2V0VG9TdHJpbmcgPSAhZGVmaW5lUHJvcGVydHkgPyBpZGVudGl0eSA6IGZ1bmN0aW9uKGZ1bmMsIHN0cmluZykge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZnVuYywgJ3RvU3RyaW5nJywge1xuICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICdlbnVtZXJhYmxlJzogZmFsc2UsXG4gICAgJ3ZhbHVlJzogY29uc3RhbnQoc3RyaW5nKSxcbiAgICAnd3JpdGFibGUnOiB0cnVlXG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlU2V0VG9TdHJpbmc7XG4iLAogICAgIi8qKiBVc2VkIHRvIGRldGVjdCBob3QgZnVuY3Rpb25zIGJ5IG51bWJlciBvZiBjYWxscyB3aXRoaW4gYSBzcGFuIG9mIG1pbGxpc2Vjb25kcy4gKi9cbnZhciBIT1RfQ09VTlQgPSA4MDAsXG4gICAgSE9UX1NQQU4gPSAxNjtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU5vdyA9IERhdGUubm93O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0J2xsIHNob3J0IG91dCBhbmQgaW52b2tlIGBpZGVudGl0eWAgaW5zdGVhZFxuICogb2YgYGZ1bmNgIHdoZW4gaXQncyBjYWxsZWQgYEhPVF9DT1VOVGAgb3IgbW9yZSB0aW1lcyBpbiBgSE9UX1NQQU5gXG4gKiBtaWxsaXNlY29uZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHJlc3RyaWN0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc2hvcnRhYmxlIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBzaG9ydE91dChmdW5jKSB7XG4gIHZhciBjb3VudCA9IDAsXG4gICAgICBsYXN0Q2FsbGVkID0gMDtcblxuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0YW1wID0gbmF0aXZlTm93KCksXG4gICAgICAgIHJlbWFpbmluZyA9IEhPVF9TUEFOIC0gKHN0YW1wIC0gbGFzdENhbGxlZCk7XG5cbiAgICBsYXN0Q2FsbGVkID0gc3RhbXA7XG4gICAgaWYgKHJlbWFpbmluZyA+IDApIHtcbiAgICAgIGlmICgrK2NvdW50ID49IEhPVF9DT1VOVCkge1xuICAgICAgICByZXR1cm4gYXJndW1lbnRzWzBdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb3VudCA9IDA7XG4gICAgfVxuICAgIHJldHVybiBmdW5jLmFwcGx5KHVuZGVmaW5lZCwgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzaG9ydE91dDtcbiIsCiAgICAidmFyIGJhc2VTZXRUb1N0cmluZyA9IHJlcXVpcmUoJy4vX2Jhc2VTZXRUb1N0cmluZycpLFxuICAgIHNob3J0T3V0ID0gcmVxdWlyZSgnLi9fc2hvcnRPdXQnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBgdG9TdHJpbmdgIG1ldGhvZCBvZiBgZnVuY2AgdG8gcmV0dXJuIGBzdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmcgVGhlIGB0b1N0cmluZ2AgcmVzdWx0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cbiAqL1xudmFyIHNldFRvU3RyaW5nID0gc2hvcnRPdXQoYmFzZVNldFRvU3RyaW5nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBzZXRUb1N0cmluZztcbiIsCiAgICAidmFyIGlkZW50aXR5ID0gcmVxdWlyZSgnLi9pZGVudGl0eScpLFxuICAgIG92ZXJSZXN0ID0gcmVxdWlyZSgnLi9fb3ZlclJlc3QnKSxcbiAgICBzZXRUb1N0cmluZyA9IHJlcXVpcmUoJy4vX3NldFRvU3RyaW5nJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucmVzdGAgd2hpY2ggZG9lc24ndCB2YWxpZGF0ZSBvciBjb2VyY2UgYXJndW1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD1mdW5jLmxlbmd0aC0xXSBUaGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHJlc3QgcGFyYW1ldGVyLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VSZXN0KGZ1bmMsIHN0YXJ0KSB7XG4gIHJldHVybiBzZXRUb1N0cmluZyhvdmVyUmVzdChmdW5jLCBzdGFydCwgaWRlbnRpdHkpLCBmdW5jICsgJycpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VSZXN0O1xuIiwKICAgICIvKipcbiAqIFBlcmZvcm1zIGFcbiAqIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBjb21wYXJpc29uIGJldHdlZW4gdHdvIHZhbHVlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmUgZXF1aXZhbGVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAqIHZhciBvdGhlciA9IHsgJ2EnOiAxIH07XG4gKlxuICogXy5lcShvYmplY3QsIG9iamVjdCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcShvYmplY3QsIG90aGVyKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5lcSgnYScsICdhJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcSgnYScsIE9iamVjdCgnYScpKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5lcShOYU4sIE5hTik7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGVxKHZhbHVlLCBvdGhlcikge1xuICByZXR1cm4gdmFsdWUgPT09IG90aGVyIHx8ICh2YWx1ZSAhPT0gdmFsdWUgJiYgb3RoZXIgIT09IG90aGVyKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlcTtcbiIsCiAgICAiLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGxlbmd0aC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgbG9vc2VseSBiYXNlZCBvblxuICogW2BUb0xlbmd0aGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXRvbGVuZ3RoKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGxlbmd0aCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzTGVuZ3RoKDMpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNMZW5ndGgoTnVtYmVyLk1JTl9WQUxVRSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNMZW5ndGgoSW5maW5pdHkpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzTGVuZ3RoKCczJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0xlbmd0aCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdudW1iZXInICYmXG4gICAgdmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8PSBNQVhfU0FGRV9JTlRFR0VSO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTGVuZ3RoO1xuIiwKICAgICJ2YXIgaXNGdW5jdGlvbiA9IHJlcXVpcmUoJy4vaXNGdW5jdGlvbicpLFxuICAgIGlzTGVuZ3RoID0gcmVxdWlyZSgnLi9pc0xlbmd0aCcpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UuIEEgdmFsdWUgaXMgY29uc2lkZXJlZCBhcnJheS1saWtlIGlmIGl0J3NcbiAqIG5vdCBhIGZ1bmN0aW9uIGFuZCBoYXMgYSBgdmFsdWUubGVuZ3RoYCB0aGF0J3MgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gb3JcbiAqIGVxdWFsIHRvIGAwYCBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUmAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKCdhYmMnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5TGlrZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmICFpc0Z1bmN0aW9uKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0FycmF5TGlrZTtcbiIsCiAgICAiLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlcy4gKi9cbnZhciByZUlzVWludCA9IC9eKD86MHxbMS05XVxcZCopJC87XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGluZGV4LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPU1BWF9TQUZFX0lOVEVHRVJdIFRoZSB1cHBlciBib3VuZHMgb2YgYSB2YWxpZCBpbmRleC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgaW5kZXgsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNJbmRleCh2YWx1ZSwgbGVuZ3RoKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICBsZW5ndGggPSBsZW5ndGggPT0gbnVsbCA/IE1BWF9TQUZFX0lOVEVHRVIgOiBsZW5ndGg7XG5cbiAgcmV0dXJuICEhbGVuZ3RoICYmXG4gICAgKHR5cGUgPT0gJ251bWJlcicgfHxcbiAgICAgICh0eXBlICE9ICdzeW1ib2wnICYmIHJlSXNVaW50LnRlc3QodmFsdWUpKSkgJiZcbiAgICAgICAgKHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPCBsZW5ndGgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzSW5kZXg7XG4iLAogICAgInZhciBlcSA9IHJlcXVpcmUoJy4vZXEnKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKSxcbiAgICBpc0luZGV4ID0gcmVxdWlyZSgnLi9faXNJbmRleCcpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpO1xuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gYXJndW1lbnRzIGFyZSBmcm9tIGFuIGl0ZXJhdGVlIGNhbGwuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHBvdGVudGlhbCBpdGVyYXRlZSB2YWx1ZSBhcmd1bWVudC5cbiAqIEBwYXJhbSB7Kn0gaW5kZXggVGhlIHBvdGVudGlhbCBpdGVyYXRlZSBpbmRleCBvciBrZXkgYXJndW1lbnQuXG4gKiBAcGFyYW0geyp9IG9iamVjdCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIG9iamVjdCBhcmd1bWVudC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXJndW1lbnRzIGFyZSBmcm9tIGFuIGl0ZXJhdGVlIGNhbGwsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0l0ZXJhdGVlQ2FsbCh2YWx1ZSwgaW5kZXgsIG9iamVjdCkge1xuICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHR5cGUgPSB0eXBlb2YgaW5kZXg7XG4gIGlmICh0eXBlID09ICdudW1iZXInXG4gICAgICAgID8gKGlzQXJyYXlMaWtlKG9iamVjdCkgJiYgaXNJbmRleChpbmRleCwgb2JqZWN0Lmxlbmd0aCkpXG4gICAgICAgIDogKHR5cGUgPT0gJ3N0cmluZycgJiYgaW5kZXggaW4gb2JqZWN0KVxuICAgICAgKSB7XG4gICAgcmV0dXJuIGVxKG9iamVjdFtpbmRleF0sIHZhbHVlKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNJdGVyYXRlZUNhbGw7XG4iLAogICAgIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udGltZXNgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kc1xuICogb3IgbWF4IGFycmF5IGxlbmd0aCBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gaW52b2tlIGBpdGVyYXRlZWAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiByZXN1bHRzLlxuICovXG5mdW5jdGlvbiBiYXNlVGltZXMobiwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShuKTtcblxuICB3aGlsZSAoKytpbmRleCA8IG4pIHtcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoaW5kZXgpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVRpbWVzO1xuIiwKICAgICIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLiBBIHZhbHVlIGlzIG9iamVjdC1saWtlIGlmIGl0J3Mgbm90IGBudWxsYFxuICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcIm9iamVjdFwiLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc09iamVjdExpa2U7XG4iLAogICAgInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXSc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNBcmd1bWVudHNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAqL1xuZnVuY3Rpb24gYmFzZUlzQXJndW1lbnRzKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IGFyZ3NUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzQXJndW1lbnRzO1xuIiwKICAgICJ2YXIgYmFzZUlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9fYmFzZUlzQXJndW1lbnRzJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBvYmplY3RQcm90by5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoZnVuY3Rpb24oKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FyZ3VtZW50cyhbMSwgMiwgM10pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQXJndW1lbnRzID0gYmFzZUlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID8gYmFzZUlzQXJndW1lbnRzIDogZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgJ2NhbGxlZScpICYmXG4gICAgIXByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwodmFsdWUsICdjYWxsZWUnKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcmd1bWVudHM7XG4iLAogICAgIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhbiBgQXJyYXlgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXkoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXkoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheSgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJyYXk7XG4iLAogICAgIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyBgZmFsc2VgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4xMy4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50aW1lcygyLCBfLnN0dWJGYWxzZSk7XG4gKiAvLyA9PiBbZmFsc2UsIGZhbHNlXVxuICovXG5mdW5jdGlvbiBzdHViRmFsc2UoKSB7XG4gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHViRmFsc2U7XG4iLAogICAgInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpLFxuICAgIHN0dWJGYWxzZSA9IHJlcXVpcmUoJy4vc3R1YkZhbHNlJyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgQnVmZmVyID0gbW9kdWxlRXhwb3J0cyA/IHJvb3QuQnVmZmVyIDogdW5kZWZpbmVkO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlSXNCdWZmZXIgPSBCdWZmZXIgPyBCdWZmZXIuaXNCdWZmZXIgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjMuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0J1ZmZlcihuZXcgQnVmZmVyKDIpKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQnVmZmVyKG5ldyBVaW50OEFycmF5KDIpKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0J1ZmZlciA9IG5hdGl2ZUlzQnVmZmVyIHx8IHN0dWJGYWxzZTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0J1ZmZlcjtcbiIsCiAgICAidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNMZW5ndGggPSByZXF1aXJlKCcuL2lzTGVuZ3RoJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJyxcbiAgICBhcnJheVRhZyA9ICdbb2JqZWN0IEFycmF5XScsXG4gICAgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxuICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJyxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcbiAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nO1xuXG52YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJyxcbiAgICBmbG9hdDMyVGFnID0gJ1tvYmplY3QgRmxvYXQzMkFycmF5XScsXG4gICAgZmxvYXQ2NFRhZyA9ICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nLFxuICAgIGludDhUYWcgPSAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICBpbnQxNlRhZyA9ICdbb2JqZWN0IEludDE2QXJyYXldJyxcbiAgICBpbnQzMlRhZyA9ICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICB1aW50OFRhZyA9ICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICB1aW50OENsYW1wZWRUYWcgPSAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nLFxuICAgIHVpbnQxNlRhZyA9ICdbb2JqZWN0IFVpbnQxNkFycmF5XScsXG4gICAgdWludDMyVGFnID0gJ1tvYmplY3QgVWludDMyQXJyYXldJztcblxuLyoqIFVzZWQgdG8gaWRlbnRpZnkgYHRvU3RyaW5nVGFnYCB2YWx1ZXMgb2YgdHlwZWQgYXJyYXlzLiAqL1xudmFyIHR5cGVkQXJyYXlUYWdzID0ge307XG50eXBlZEFycmF5VGFnc1tmbG9hdDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Zsb2F0NjRUYWddID1cbnR5cGVkQXJyYXlUYWdzW2ludDhUYWddID0gdHlwZWRBcnJheVRhZ3NbaW50MTZUYWddID1cbnR5cGVkQXJyYXlUYWdzW2ludDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQ4VGFnXSA9XG50eXBlZEFycmF5VGFnc1t1aW50OENsYW1wZWRUYWddID0gdHlwZWRBcnJheVRhZ3NbdWludDE2VGFnXSA9XG50eXBlZEFycmF5VGFnc1t1aW50MzJUYWddID0gdHJ1ZTtcbnR5cGVkQXJyYXlUYWdzW2FyZ3NUYWddID0gdHlwZWRBcnJheVRhZ3NbYXJyYXlUYWddID1cbnR5cGVkQXJyYXlUYWdzW2FycmF5QnVmZmVyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Jvb2xUYWddID1cbnR5cGVkQXJyYXlUYWdzW2RhdGFWaWV3VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2RhdGVUYWddID1cbnR5cGVkQXJyYXlUYWdzW2Vycm9yVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Z1bmNUYWddID1cbnR5cGVkQXJyYXlUYWdzW21hcFRhZ10gPSB0eXBlZEFycmF5VGFnc1tudW1iZXJUYWddID1cbnR5cGVkQXJyYXlUYWdzW29iamVjdFRhZ10gPSB0eXBlZEFycmF5VGFnc1tyZWdleHBUYWddID1cbnR5cGVkQXJyYXlUYWdzW3NldFRhZ10gPSB0eXBlZEFycmF5VGFnc1tzdHJpbmdUYWddID1cbnR5cGVkQXJyYXlUYWdzW3dlYWtNYXBUYWddID0gZmFsc2U7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNUeXBlZEFycmF5YCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc1R5cGVkQXJyYXkodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiZcbiAgICBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmICEhdHlwZWRBcnJheVRhZ3NbYmFzZUdldFRhZyh2YWx1ZSldO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc1R5cGVkQXJyYXk7XG4iLAogICAgIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5hcnlgIHdpdGhvdXQgc3VwcG9ydCBmb3Igc3RvcmluZyBtZXRhZGF0YS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2FwIGFyZ3VtZW50cyBmb3IuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VVbmFyeShmdW5jKSB7XG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBmdW5jKHZhbHVlKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVW5hcnk7XG4iLAogICAgInZhciBmcmVlR2xvYmFsID0gcmVxdWlyZSgnLi9fZnJlZUdsb2JhbCcpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgcHJvY2Vzc2AgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVQcm9jZXNzID0gbW9kdWxlRXhwb3J0cyAmJiBmcmVlR2xvYmFsLnByb2Nlc3M7XG5cbi8qKiBVc2VkIHRvIGFjY2VzcyBmYXN0ZXIgTm9kZS5qcyBoZWxwZXJzLiAqL1xudmFyIG5vZGVVdGlsID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIC8vIFVzZSBgdXRpbC50eXBlc2AgZm9yIE5vZGUuanMgMTArLlxuICAgIHZhciB0eXBlcyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlICYmIGZyZWVNb2R1bGUucmVxdWlyZSgndXRpbCcpLnR5cGVzO1xuXG4gICAgaWYgKHR5cGVzKSB7XG4gICAgICByZXR1cm4gdHlwZXM7XG4gICAgfVxuXG4gICAgLy8gTGVnYWN5IGBwcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKWAgZm9yIE5vZGUuanMgPCAxMC5cbiAgICByZXR1cm4gZnJlZVByb2Nlc3MgJiYgZnJlZVByb2Nlc3MuYmluZGluZyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nKCd1dGlsJyk7XG4gIH0gY2F0Y2ggKGUpIHt9XG59KCkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5vZGVVdGlsO1xuIiwKICAgICJ2YXIgYmFzZUlzVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vX2Jhc2VJc1R5cGVkQXJyYXknKSxcbiAgICBiYXNlVW5hcnkgPSByZXF1aXJlKCcuL19iYXNlVW5hcnknKSxcbiAgICBub2RlVXRpbCA9IHJlcXVpcmUoJy4vX25vZGVVdGlsJyk7XG5cbi8qIE5vZGUuanMgaGVscGVyIHJlZmVyZW5jZXMuICovXG52YXIgbm9kZUlzVHlwZWRBcnJheSA9IG5vZGVVdGlsICYmIG5vZGVVdGlsLmlzVHlwZWRBcnJheTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgdHlwZWQgYXJyYXkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzVHlwZWRBcnJheShuZXcgVWludDhBcnJheSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1R5cGVkQXJyYXkoW10pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzVHlwZWRBcnJheSA9IG5vZGVJc1R5cGVkQXJyYXkgPyBiYXNlVW5hcnkobm9kZUlzVHlwZWRBcnJheSkgOiBiYXNlSXNUeXBlZEFycmF5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzVHlwZWRBcnJheTtcbiIsCiAgICAidmFyIGJhc2VUaW1lcyA9IHJlcXVpcmUoJy4vX2Jhc2VUaW1lcycpLFxuICAgIGlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9pc0FyZ3VtZW50cycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0J1ZmZlciA9IHJlcXVpcmUoJy4vaXNCdWZmZXInKSxcbiAgICBpc0luZGV4ID0gcmVxdWlyZSgnLi9faXNJbmRleCcpLFxuICAgIGlzVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vaXNUeXBlZEFycmF5Jyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiB0aGUgYXJyYXktbGlrZSBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5oZXJpdGVkIFNwZWNpZnkgcmV0dXJuaW5nIGluaGVyaXRlZCBwcm9wZXJ0eSBuYW1lcy5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGFycmF5TGlrZUtleXModmFsdWUsIGluaGVyaXRlZCkge1xuICB2YXIgaXNBcnIgPSBpc0FycmF5KHZhbHVlKSxcbiAgICAgIGlzQXJnID0gIWlzQXJyICYmIGlzQXJndW1lbnRzKHZhbHVlKSxcbiAgICAgIGlzQnVmZiA9ICFpc0FyciAmJiAhaXNBcmcgJiYgaXNCdWZmZXIodmFsdWUpLFxuICAgICAgaXNUeXBlID0gIWlzQXJyICYmICFpc0FyZyAmJiAhaXNCdWZmICYmIGlzVHlwZWRBcnJheSh2YWx1ZSksXG4gICAgICBza2lwSW5kZXhlcyA9IGlzQXJyIHx8IGlzQXJnIHx8IGlzQnVmZiB8fCBpc1R5cGUsXG4gICAgICByZXN1bHQgPSBza2lwSW5kZXhlcyA/IGJhc2VUaW1lcyh2YWx1ZS5sZW5ndGgsIFN0cmluZykgOiBbXSxcbiAgICAgIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XG5cbiAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgaWYgKChpbmhlcml0ZWQgfHwgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwga2V5KSkgJiZcbiAgICAgICAgIShza2lwSW5kZXhlcyAmJiAoXG4gICAgICAgICAgIC8vIFNhZmFyaSA5IGhhcyBlbnVtZXJhYmxlIGBhcmd1bWVudHMubGVuZ3RoYCBpbiBzdHJpY3QgbW9kZS5cbiAgICAgICAgICAga2V5ID09ICdsZW5ndGgnIHx8XG4gICAgICAgICAgIC8vIE5vZGUuanMgMC4xMCBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiBidWZmZXJzLlxuICAgICAgICAgICAoaXNCdWZmICYmIChrZXkgPT0gJ29mZnNldCcgfHwga2V5ID09ICdwYXJlbnQnKSkgfHxcbiAgICAgICAgICAgLy8gUGhhbnRvbUpTIDIgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gdHlwZWQgYXJyYXlzLlxuICAgICAgICAgICAoaXNUeXBlICYmIChrZXkgPT0gJ2J1ZmZlcicgfHwga2V5ID09ICdieXRlTGVuZ3RoJyB8fCBrZXkgPT0gJ2J5dGVPZmZzZXQnKSkgfHxcbiAgICAgICAgICAgLy8gU2tpcCBpbmRleCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICBpc0luZGV4KGtleSwgbGVuZ3RoKVxuICAgICAgICApKSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUxpa2VLZXlzO1xuIiwKICAgICIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhIHByb3RvdHlwZSBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm90b3R5cGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNQcm90b3R5cGUodmFsdWUpIHtcbiAgdmFyIEN0b3IgPSB2YWx1ZSAmJiB2YWx1ZS5jb25zdHJ1Y3RvcixcbiAgICAgIHByb3RvID0gKHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3Rvci5wcm90b3R5cGUpIHx8IG9iamVjdFByb3RvO1xuXG4gIHJldHVybiB2YWx1ZSA9PT0gcHJvdG87XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNQcm90b3R5cGU7XG4iLAogICAgIi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlXG4gKiBbYE9iamVjdC5rZXlzYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXG4gKiBleGNlcHQgdGhhdCBpdCBpbmNsdWRlcyBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0aWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBuYXRpdmVLZXlzSW4ob2JqZWN0KSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgaWYgKG9iamVjdCAhPSBudWxsKSB7XG4gICAgZm9yICh2YXIga2V5IGluIE9iamVjdChvYmplY3QpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdGl2ZUtleXNJbjtcbiIsCiAgICAidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIGlzUHJvdG90eXBlID0gcmVxdWlyZSgnLi9faXNQcm90b3R5cGUnKSxcbiAgICBuYXRpdmVLZXlzSW4gPSByZXF1aXJlKCcuL19uYXRpdmVLZXlzSW4nKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzSW5gIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYmFzZUtleXNJbihvYmplY3QpIHtcbiAgaWYgKCFpc09iamVjdChvYmplY3QpKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUtleXNJbihvYmplY3QpO1xuICB9XG4gIHZhciBpc1Byb3RvID0gaXNQcm90b3R5cGUob2JqZWN0KSxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICBpZiAoIShrZXkgPT0gJ2NvbnN0cnVjdG9yJyAmJiAoaXNQcm90byB8fCAhaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpKSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlS2V5c0luO1xuIiwKICAgICJ2YXIgYXJyYXlMaWtlS2V5cyA9IHJlcXVpcmUoJy4vX2FycmF5TGlrZUtleXMnKSxcbiAgICBiYXNlS2V5c0luID0gcmVxdWlyZSgnLi9fYmFzZUtleXNJbicpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXG4gKlxuICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5rZXlzSW4obmV3IEZvbyk7XG4gKiAvLyA9PiBbJ2EnLCAnYicsICdjJ10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqL1xuZnVuY3Rpb24ga2V5c0luKG9iamVjdCkge1xuICByZXR1cm4gaXNBcnJheUxpa2Uob2JqZWN0KSA/IGFycmF5TGlrZUtleXMob2JqZWN0LCB0cnVlKSA6IGJhc2VLZXlzSW4ob2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBrZXlzSW47XG4iLAogICAgInZhciBiYXNlUmVzdCA9IHJlcXVpcmUoJy4vX2Jhc2VSZXN0JyksXG4gICAgZXEgPSByZXF1aXJlKCcuL2VxJyksXG4gICAgaXNJdGVyYXRlZUNhbGwgPSByZXF1aXJlKCcuL19pc0l0ZXJhdGVlQ2FsbCcpLFxuICAgIGtleXNJbiA9IHJlcXVpcmUoJy4va2V5c0luJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQXNzaWducyBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0aWVzIG9mIHNvdXJjZVxuICogb2JqZWN0cyB0byB0aGUgZGVzdGluYXRpb24gb2JqZWN0IGZvciBhbGwgZGVzdGluYXRpb24gcHJvcGVydGllcyB0aGF0XG4gKiByZXNvbHZlIHRvIGB1bmRlZmluZWRgLiBTb3VyY2Ugb2JqZWN0cyBhcmUgYXBwbGllZCBmcm9tIGxlZnQgdG8gcmlnaHQuXG4gKiBPbmNlIGEgcHJvcGVydHkgaXMgc2V0LCBhZGRpdGlvbmFsIHZhbHVlcyBvZiB0aGUgc2FtZSBwcm9wZXJ0eSBhcmUgaWdub3JlZC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAcGFyYW0gey4uLk9iamVjdH0gW3NvdXJjZXNdIFRoZSBzb3VyY2Ugb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKiBAc2VlIF8uZGVmYXVsdHNEZWVwXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uZGVmYXVsdHMoeyAnYSc6IDEgfSwgeyAnYic6IDIgfSwgeyAnYSc6IDMgfSk7XG4gKiAvLyA9PiB7ICdhJzogMSwgJ2InOiAyIH1cbiAqL1xudmFyIGRlZmF1bHRzID0gYmFzZVJlc3QoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2VzKSB7XG4gIG9iamVjdCA9IE9iamVjdChvYmplY3QpO1xuXG4gIHZhciBpbmRleCA9IC0xO1xuICB2YXIgbGVuZ3RoID0gc291cmNlcy5sZW5ndGg7XG4gIHZhciBndWFyZCA9IGxlbmd0aCA+IDIgPyBzb3VyY2VzWzJdIDogdW5kZWZpbmVkO1xuXG4gIGlmIChndWFyZCAmJiBpc0l0ZXJhdGVlQ2FsbChzb3VyY2VzWzBdLCBzb3VyY2VzWzFdLCBndWFyZCkpIHtcbiAgICBsZW5ndGggPSAxO1xuICB9XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgc291cmNlID0gc291cmNlc1tpbmRleF07XG4gICAgdmFyIHByb3BzID0ga2V5c0luKHNvdXJjZSk7XG4gICAgdmFyIHByb3BzSW5kZXggPSAtMTtcbiAgICB2YXIgcHJvcHNMZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cbiAgICB3aGlsZSAoKytwcm9wc0luZGV4IDwgcHJvcHNMZW5ndGgpIHtcbiAgICAgIHZhciBrZXkgPSBwcm9wc1twcm9wc0luZGV4XTtcbiAgICAgIHZhciB2YWx1ZSA9IG9iamVjdFtrZXldO1xuXG4gICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgIChlcSh2YWx1ZSwgb2JqZWN0UHJvdG9ba2V5XSkgJiYgIWhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpKSkge1xuICAgICAgICBvYmplY3Rba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvYmplY3Q7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBkZWZhdWx0cztcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbi8qXG4gIFRoaXMgZmlsZSBpcyBhIHJlZHVjZWQgYW5kIGFkYXB0ZWQgdmVyc2lvbiBvZiB0aGUgbWFpbiBsaWIvaW50ZXJuYWwvcGVyX2NvbnRleHQvcHJpbW9yZGlhbHMuanMgZmlsZSBkZWZpbmVkIGF0XG5cbiAgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvbWFzdGVyL2xpYi9pbnRlcm5hbC9wZXJfY29udGV4dC9wcmltb3JkaWFscy5qc1xuXG4gIERvbid0IHRyeSB0byByZXBsYWNlIHdpdGggdGhlIG9yaWdpbmFsIGZpbGUgYW5kIGtlZXAgaXQgdXAgdG8gZGF0ZSB3aXRoIHRoZSB1cHN0cmVhbSBmaWxlLlxuKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICBBcnJheUlzQXJyYXkoc2VsZikge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHNlbGYpXG4gIH0sXG4gIEFycmF5UHJvdG90eXBlSW5jbHVkZXMoc2VsZiwgZWwpIHtcbiAgICByZXR1cm4gc2VsZi5pbmNsdWRlcyhlbClcbiAgfSxcbiAgQXJyYXlQcm90b3R5cGVJbmRleE9mKHNlbGYsIGVsKSB7XG4gICAgcmV0dXJuIHNlbGYuaW5kZXhPZihlbClcbiAgfSxcbiAgQXJyYXlQcm90b3R5cGVKb2luKHNlbGYsIHNlcCkge1xuICAgIHJldHVybiBzZWxmLmpvaW4oc2VwKVxuICB9LFxuICBBcnJheVByb3RvdHlwZU1hcChzZWxmLCBmbikge1xuICAgIHJldHVybiBzZWxmLm1hcChmbilcbiAgfSxcbiAgQXJyYXlQcm90b3R5cGVQb3Aoc2VsZiwgZWwpIHtcbiAgICByZXR1cm4gc2VsZi5wb3AoZWwpXG4gIH0sXG4gIEFycmF5UHJvdG90eXBlUHVzaChzZWxmLCBlbCkge1xuICAgIHJldHVybiBzZWxmLnB1c2goZWwpXG4gIH0sXG4gIEFycmF5UHJvdG90eXBlU2xpY2Uoc2VsZiwgc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiBzZWxmLnNsaWNlKHN0YXJ0LCBlbmQpXG4gIH0sXG4gIEVycm9yLFxuICBGdW5jdGlvblByb3RvdHlwZUNhbGwoZm4sIHRoaXNBcmdzLCAuLi5hcmdzKSB7XG4gICAgcmV0dXJuIGZuLmNhbGwodGhpc0FyZ3MsIC4uLmFyZ3MpXG4gIH0sXG4gIEZ1bmN0aW9uUHJvdG90eXBlU3ltYm9sSGFzSW5zdGFuY2Uoc2VsZiwgaW5zdGFuY2UpIHtcbiAgICByZXR1cm4gRnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV0uY2FsbChzZWxmLCBpbnN0YW5jZSlcbiAgfSxcbiAgTWF0aEZsb29yOiBNYXRoLmZsb29yLFxuICBOdW1iZXIsXG4gIE51bWJlcklzSW50ZWdlcjogTnVtYmVyLmlzSW50ZWdlcixcbiAgTnVtYmVySXNOYU46IE51bWJlci5pc05hTixcbiAgTnVtYmVyTUFYX1NBRkVfSU5URUdFUjogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsXG4gIE51bWJlck1JTl9TQUZFX0lOVEVHRVI6IE51bWJlci5NSU5fU0FGRV9JTlRFR0VSLFxuICBOdW1iZXJQYXJzZUludDogTnVtYmVyLnBhcnNlSW50LFxuICBPYmplY3REZWZpbmVQcm9wZXJ0aWVzKHNlbGYsIHByb3BzKSB7XG4gICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHNlbGYsIHByb3BzKVxuICB9LFxuICBPYmplY3REZWZpbmVQcm9wZXJ0eShzZWxmLCBuYW1lLCBwcm9wKSB7XG4gICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzZWxmLCBuYW1lLCBwcm9wKVxuICB9LFxuICBPYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc2VsZiwgbmFtZSkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNlbGYsIG5hbWUpXG4gIH0sXG4gIE9iamVjdEtleXMob2JqKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iailcbiAgfSxcbiAgT2JqZWN0U2V0UHJvdG90eXBlT2YodGFyZ2V0LCBwcm90bykge1xuICAgIHJldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YodGFyZ2V0LCBwcm90bylcbiAgfSxcbiAgUHJvbWlzZSxcbiAgUHJvbWlzZVByb3RvdHlwZUNhdGNoKHNlbGYsIGZuKSB7XG4gICAgcmV0dXJuIHNlbGYuY2F0Y2goZm4pXG4gIH0sXG4gIFByb21pc2VQcm90b3R5cGVUaGVuKHNlbGYsIHRoZW5GbiwgY2F0Y2hGbikge1xuICAgIHJldHVybiBzZWxmLnRoZW4odGhlbkZuLCBjYXRjaEZuKVxuICB9LFxuICBQcm9taXNlUmVqZWN0KGVycikge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnIpXG4gIH0sXG4gIFByb21pc2VSZXNvbHZlKHZhbCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsKVxuICB9LFxuICBSZWZsZWN0QXBwbHk6IFJlZmxlY3QuYXBwbHksXG4gIFJlZ0V4cFByb3RvdHlwZVRlc3Qoc2VsZiwgdmFsdWUpIHtcbiAgICByZXR1cm4gc2VsZi50ZXN0KHZhbHVlKVxuICB9LFxuICBTYWZlU2V0OiBTZXQsXG4gIFN0cmluZyxcbiAgU3RyaW5nUHJvdG90eXBlU2xpY2Uoc2VsZiwgc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiBzZWxmLnNsaWNlKHN0YXJ0LCBlbmQpXG4gIH0sXG4gIFN0cmluZ1Byb3RvdHlwZVRvTG93ZXJDYXNlKHNlbGYpIHtcbiAgICByZXR1cm4gc2VsZi50b0xvd2VyQ2FzZSgpXG4gIH0sXG4gIFN0cmluZ1Byb3RvdHlwZVRvVXBwZXJDYXNlKHNlbGYpIHtcbiAgICByZXR1cm4gc2VsZi50b1VwcGVyQ2FzZSgpXG4gIH0sXG4gIFN0cmluZ1Byb3RvdHlwZVRyaW0oc2VsZikge1xuICAgIHJldHVybiBzZWxmLnRyaW0oKVxuICB9LFxuICBTeW1ib2wsXG4gIFN5bWJvbEZvcjogU3ltYm9sLmZvcixcbiAgU3ltYm9sQXN5bmNJdGVyYXRvcjogU3ltYm9sLmFzeW5jSXRlcmF0b3IsXG4gIFN5bWJvbEhhc0luc3RhbmNlOiBTeW1ib2wuaGFzSW5zdGFuY2UsXG4gIFN5bWJvbEl0ZXJhdG9yOiBTeW1ib2wuaXRlcmF0b3IsXG4gIFN5bWJvbERpc3Bvc2U6IFN5bWJvbC5kaXNwb3NlIHx8IFN5bWJvbCgnU3ltYm9sLmRpc3Bvc2UnKSxcbiAgU3ltYm9sQXN5bmNEaXNwb3NlOiBTeW1ib2wuYXN5bmNEaXNwb3NlIHx8IFN5bWJvbCgnU3ltYm9sLmFzeW5jRGlzcG9zZScpLFxuICBUeXBlZEFycmF5UHJvdG90eXBlU2V0KHNlbGYsIGJ1ZiwgbGVuKSB7XG4gICAgcmV0dXJuIHNlbGYuc2V0KGJ1ZiwgbGVuKVxuICB9LFxuICBCb29sZWFuOiBCb29sZWFuLFxuICBVaW50OEFycmF5XG59XG4iLAogICAgIi8qKlxuICogQGF1dGhvciBUb3J1IE5hZ2FzaGltYSA8aHR0cHM6Ly9naXRodWIuY29tL215c3RpY2F0ZWE+XG4gKiBAY29weXJpZ2h0IDIwMTUgVG9ydSBOYWdhc2hpbWEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBTZWUgTElDRU5TRSBmaWxlIGluIHJvb3QgZGlyZWN0b3J5IGZvciBmdWxsIGxpY2Vuc2UuXG4gKi9cbid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBQcml2YXRlRGF0YVxuICogQHByb3BlcnR5IHtFdmVudFRhcmdldH0gZXZlbnRUYXJnZXQgVGhlIGV2ZW50IHRhcmdldC5cbiAqIEBwcm9wZXJ0eSB7e3R5cGU6c3RyaW5nfX0gZXZlbnQgVGhlIG9yaWdpbmFsIGV2ZW50IG9iamVjdC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBldmVudFBoYXNlIFRoZSBjdXJyZW50IGV2ZW50IHBoYXNlLlxuICogQHByb3BlcnR5IHtFdmVudFRhcmdldHxudWxsfSBjdXJyZW50VGFyZ2V0IFRoZSBjdXJyZW50IGV2ZW50IHRhcmdldC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gY2FuY2VsZWQgVGhlIGZsYWcgdG8gcHJldmVudCBkZWZhdWx0LlxuICogQHByb3BlcnR5IHtib29sZWFufSBzdG9wcGVkIFRoZSBmbGFnIHRvIHN0b3AgcHJvcGFnYXRpb24uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGltbWVkaWF0ZVN0b3BwZWQgVGhlIGZsYWcgdG8gc3RvcCBwcm9wYWdhdGlvbiBpbW1lZGlhdGVseS5cbiAqIEBwcm9wZXJ0eSB7RnVuY3Rpb258bnVsbH0gcGFzc2l2ZUxpc3RlbmVyIFRoZSBsaXN0ZW5lciBpZiB0aGUgY3VycmVudCBsaXN0ZW5lciBpcyBwYXNzaXZlLiBPdGhlcndpc2UgdGhpcyBpcyBudWxsLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHRpbWVTdGFtcCBUaGUgdW5peCB0aW1lLlxuICogQHByaXZhdGVcbiAqL1xuXG4vKipcbiAqIFByaXZhdGUgZGF0YSBmb3IgZXZlbnQgd3JhcHBlcnMuXG4gKiBAdHlwZSB7V2Vha01hcDxFdmVudCwgUHJpdmF0ZURhdGE+fVxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgcHJpdmF0ZURhdGEgPSBuZXcgV2Vha01hcCgpO1xuXG4vKipcbiAqIENhY2hlIGZvciB3cmFwcGVyIGNsYXNzZXMuXG4gKiBAdHlwZSB7V2Vha01hcDxPYmplY3QsIEZ1bmN0aW9uPn1cbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IHdyYXBwZXJzID0gbmV3IFdlYWtNYXAoKTtcblxuLyoqXG4gKiBHZXQgcHJpdmF0ZSBkYXRhLlxuICogQHBhcmFtIHtFdmVudH0gZXZlbnQgVGhlIGV2ZW50IG9iamVjdCB0byBnZXQgcHJpdmF0ZSBkYXRhLlxuICogQHJldHVybnMge1ByaXZhdGVEYXRhfSBUaGUgcHJpdmF0ZSBkYXRhIG9mIHRoZSBldmVudC5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHBkKGV2ZW50KSB7XG4gICAgY29uc3QgcmV0diA9IHByaXZhdGVEYXRhLmdldChldmVudCk7XG4gICAgY29uc29sZS5hc3NlcnQoXG4gICAgICAgIHJldHYgIT0gbnVsbCxcbiAgICAgICAgXCIndGhpcycgaXMgZXhwZWN0ZWQgYW4gRXZlbnQgb2JqZWN0LCBidXQgZ290XCIsXG4gICAgICAgIGV2ZW50XG4gICAgKTtcbiAgICByZXR1cm4gcmV0dlxufVxuXG4vKipcbiAqIGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jc2V0LXRoZS1jYW5jZWxlZC1mbGFnXG4gKiBAcGFyYW0gZGF0YSB7UHJpdmF0ZURhdGF9IHByaXZhdGUgZGF0YS5cbiAqL1xuZnVuY3Rpb24gc2V0Q2FuY2VsRmxhZyhkYXRhKSB7XG4gICAgaWYgKGRhdGEucGFzc2l2ZUxpc3RlbmVyICE9IG51bGwpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdHlwZW9mIGNvbnNvbGUgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICAgICAgICAgIHR5cGVvZiBjb25zb2xlLmVycm9yID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgIFwiVW5hYmxlIHRvIHByZXZlbnREZWZhdWx0IGluc2lkZSBwYXNzaXZlIGV2ZW50IGxpc3RlbmVyIGludm9jYXRpb24uXCIsXG4gICAgICAgICAgICAgICAgZGF0YS5wYXNzaXZlTGlzdGVuZXJcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmICghZGF0YS5ldmVudC5jYW5jZWxhYmxlKSB7XG4gICAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGRhdGEuY2FuY2VsZWQgPSB0cnVlO1xuICAgIGlmICh0eXBlb2YgZGF0YS5ldmVudC5wcmV2ZW50RGVmYXVsdCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGRhdGEuZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2ludGVyZmFjZS1ldmVudFxuICogQHByaXZhdGVcbiAqL1xuLyoqXG4gKiBUaGUgZXZlbnQgd3JhcHBlci5cbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtFdmVudFRhcmdldH0gZXZlbnRUYXJnZXQgVGhlIGV2ZW50IHRhcmdldCBvZiB0aGlzIGRpc3BhdGNoaW5nLlxuICogQHBhcmFtIHtFdmVudHx7dHlwZTpzdHJpbmd9fSBldmVudCBUaGUgb3JpZ2luYWwgZXZlbnQgdG8gd3JhcC5cbiAqL1xuZnVuY3Rpb24gRXZlbnQoZXZlbnRUYXJnZXQsIGV2ZW50KSB7XG4gICAgcHJpdmF0ZURhdGEuc2V0KHRoaXMsIHtcbiAgICAgICAgZXZlbnRUYXJnZXQsXG4gICAgICAgIGV2ZW50LFxuICAgICAgICBldmVudFBoYXNlOiAyLFxuICAgICAgICBjdXJyZW50VGFyZ2V0OiBldmVudFRhcmdldCxcbiAgICAgICAgY2FuY2VsZWQ6IGZhbHNlLFxuICAgICAgICBzdG9wcGVkOiBmYWxzZSxcbiAgICAgICAgaW1tZWRpYXRlU3RvcHBlZDogZmFsc2UsXG4gICAgICAgIHBhc3NpdmVMaXN0ZW5lcjogbnVsbCxcbiAgICAgICAgdGltZVN0YW1wOiBldmVudC50aW1lU3RhbXAgfHwgRGF0ZS5ub3coKSxcbiAgICB9KTtcblxuICAgIC8vIGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI1VuZm9yZ2VhYmxlXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwiaXNUcnVzdGVkXCIsIHsgdmFsdWU6IGZhbHNlLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xuXG4gICAgLy8gRGVmaW5lIGFjY2Vzc29yc1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhldmVudCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGtleXNbaV07XG4gICAgICAgIGlmICghKGtleSBpbiB0aGlzKSkge1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIGtleSwgZGVmaW5lUmVkaXJlY3REZXNjcmlwdG9yKGtleSkpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBTaG91bGQgYmUgZW51bWVyYWJsZSwgYnV0IGNsYXNzIG1ldGhvZHMgYXJlIG5vdCBlbnVtZXJhYmxlLlxuRXZlbnQucHJvdG90eXBlID0ge1xuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoaXMgZXZlbnQuXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICBnZXQgdHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHBkKHRoaXMpLmV2ZW50LnR5cGVcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHRhcmdldCBvZiB0aGlzIGV2ZW50LlxuICAgICAqIEB0eXBlIHtFdmVudFRhcmdldH1cbiAgICAgKi9cbiAgICBnZXQgdGFyZ2V0KCkge1xuICAgICAgICByZXR1cm4gcGQodGhpcykuZXZlbnRUYXJnZXRcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHRhcmdldCBvZiB0aGlzIGV2ZW50LlxuICAgICAqIEB0eXBlIHtFdmVudFRhcmdldH1cbiAgICAgKi9cbiAgICBnZXQgY3VycmVudFRhcmdldCgpIHtcbiAgICAgICAgcmV0dXJuIHBkKHRoaXMpLmN1cnJlbnRUYXJnZXRcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMge0V2ZW50VGFyZ2V0W119IFRoZSBjb21wb3NlZCBwYXRoIG9mIHRoaXMgZXZlbnQuXG4gICAgICovXG4gICAgY29tcG9zZWRQYXRoKCkge1xuICAgICAgICBjb25zdCBjdXJyZW50VGFyZ2V0ID0gcGQodGhpcykuY3VycmVudFRhcmdldDtcbiAgICAgICAgaWYgKGN1cnJlbnRUYXJnZXQgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtjdXJyZW50VGFyZ2V0XVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb25zdGFudCBvZiBOT05FLlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgZ2V0IE5PTkUoKSB7XG4gICAgICAgIHJldHVybiAwXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnN0YW50IG9mIENBUFRVUklOR19QSEFTRS5cbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIGdldCBDQVBUVVJJTkdfUEhBU0UoKSB7XG4gICAgICAgIHJldHVybiAxXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnN0YW50IG9mIEFUX1RBUkdFVC5cbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIGdldCBBVF9UQVJHRVQoKSB7XG4gICAgICAgIHJldHVybiAyXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnN0YW50IG9mIEJVQkJMSU5HX1BIQVNFLlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgZ2V0IEJVQkJMSU5HX1BIQVNFKCkge1xuICAgICAgICByZXR1cm4gM1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGFyZ2V0IG9mIHRoaXMgZXZlbnQuXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBnZXQgZXZlbnRQaGFzZSgpIHtcbiAgICAgICAgcmV0dXJuIHBkKHRoaXMpLmV2ZW50UGhhc2VcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU3RvcCBldmVudCBidWJibGluZy5cbiAgICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICAgKi9cbiAgICBzdG9wUHJvcGFnYXRpb24oKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBwZCh0aGlzKTtcblxuICAgICAgICBkYXRhLnN0b3BwZWQgPSB0cnVlO1xuICAgICAgICBpZiAodHlwZW9mIGRhdGEuZXZlbnQuc3RvcFByb3BhZ2F0aW9uID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIGRhdGEuZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU3RvcCBldmVudCBidWJibGluZy5cbiAgICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICAgKi9cbiAgICBzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBwZCh0aGlzKTtcblxuICAgICAgICBkYXRhLnN0b3BwZWQgPSB0cnVlO1xuICAgICAgICBkYXRhLmltbWVkaWF0ZVN0b3BwZWQgPSB0cnVlO1xuICAgICAgICBpZiAodHlwZW9mIGRhdGEuZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIGRhdGEuZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGZsYWcgdG8gYmUgYnViYmxpbmcuXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgZ2V0IGJ1YmJsZXMoKSB7XG4gICAgICAgIHJldHVybiBCb29sZWFuKHBkKHRoaXMpLmV2ZW50LmJ1YmJsZXMpXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBmbGFnIHRvIGJlIGNhbmNlbGFibGUuXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgZ2V0IGNhbmNlbGFibGUoKSB7XG4gICAgICAgIHJldHVybiBCb29sZWFuKHBkKHRoaXMpLmV2ZW50LmNhbmNlbGFibGUpXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbmNlbCB0aGlzIGV2ZW50LlxuICAgICAqIEByZXR1cm5zIHt2b2lkfVxuICAgICAqL1xuICAgIHByZXZlbnREZWZhdWx0KCkge1xuICAgICAgICBzZXRDYW5jZWxGbGFnKHBkKHRoaXMpKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGZsYWcgdG8gaW5kaWNhdGUgY2FuY2VsbGF0aW9uIHN0YXRlLlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIGdldCBkZWZhdWx0UHJldmVudGVkKCkge1xuICAgICAgICByZXR1cm4gcGQodGhpcykuY2FuY2VsZWRcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGZsYWcgdG8gYmUgY29tcG9zZWQuXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgZ2V0IGNvbXBvc2VkKCkge1xuICAgICAgICByZXR1cm4gQm9vbGVhbihwZCh0aGlzKS5ldmVudC5jb21wb3NlZClcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHVuaXggdGltZSBvZiB0aGlzIGV2ZW50LlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgZ2V0IHRpbWVTdGFtcCgpIHtcbiAgICAgICAgcmV0dXJuIHBkKHRoaXMpLnRpbWVTdGFtcFxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGFyZ2V0IG9mIHRoaXMgZXZlbnQuXG4gICAgICogQHR5cGUge0V2ZW50VGFyZ2V0fVxuICAgICAqIEBkZXByZWNhdGVkXG4gICAgICovXG4gICAgZ2V0IHNyY0VsZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiBwZCh0aGlzKS5ldmVudFRhcmdldFxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZmxhZyB0byBzdG9wIGV2ZW50IGJ1YmJsaW5nLlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBkZXByZWNhdGVkXG4gICAgICovXG4gICAgZ2V0IGNhbmNlbEJ1YmJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHBkKHRoaXMpLnN0b3BwZWRcbiAgICB9LFxuICAgIHNldCBjYW5jZWxCdWJibGUodmFsdWUpIHtcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGF0YSA9IHBkKHRoaXMpO1xuXG4gICAgICAgIGRhdGEuc3RvcHBlZCA9IHRydWU7XG4gICAgICAgIGlmICh0eXBlb2YgZGF0YS5ldmVudC5jYW5jZWxCdWJibGUgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICBkYXRhLmV2ZW50LmNhbmNlbEJ1YmJsZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGZsYWcgdG8gaW5kaWNhdGUgY2FuY2VsbGF0aW9uIHN0YXRlLlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBkZXByZWNhdGVkXG4gICAgICovXG4gICAgZ2V0IHJldHVyblZhbHVlKCkge1xuICAgICAgICByZXR1cm4gIXBkKHRoaXMpLmNhbmNlbGVkXG4gICAgfSxcbiAgICBzZXQgcmV0dXJuVmFsdWUodmFsdWUpIHtcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgc2V0Q2FuY2VsRmxhZyhwZCh0aGlzKSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZSB0aGlzIGV2ZW50IG9iamVjdC4gQnV0IGRvIG5vdGhpbmcgdW5kZXIgZXZlbnQgZGlzcGF0Y2hpbmcuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgVGhlIGV2ZW50IHR5cGUuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbYnViYmxlcz1mYWxzZV0gVGhlIGZsYWcgdG8gYmUgcG9zc2libGUgdG8gYnViYmxlIHVwLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NhbmNlbGFibGU9ZmFsc2VdIFRoZSBmbGFnIHRvIGJlIHBvc3NpYmxlIHRvIGNhbmNlbC5cbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqL1xuICAgIGluaXRFdmVudCgpIHtcbiAgICAgICAgLy8gRG8gbm90aGluZy5cbiAgICB9LFxufTtcblxuLy8gYGNvbnN0cnVjdG9yYCBpcyBub3QgZW51bWVyYWJsZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShFdmVudC5wcm90b3R5cGUsIFwiY29uc3RydWN0b3JcIiwge1xuICAgIHZhbHVlOiBFdmVudCxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgd3JpdGFibGU6IHRydWUsXG59KTtcblxuLy8gRW5zdXJlIGBldmVudCBpbnN0YW5jZW9mIHdpbmRvdy5FdmVudGAgaXMgYHRydWVgLlxuaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5FdmVudCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihFdmVudC5wcm90b3R5cGUsIHdpbmRvdy5FdmVudC5wcm90b3R5cGUpO1xuXG4gICAgLy8gTWFrZSBhc3NvY2lhdGlvbiBmb3Igd3JhcHBlcnMuXG4gICAgd3JhcHBlcnMuc2V0KHdpbmRvdy5FdmVudC5wcm90b3R5cGUsIEV2ZW50KTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3IgdG8gcmVkaXJlY3QgYSBnaXZlbiBwcm9wZXJ0eS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgUHJvcGVydHkgbmFtZSB0byBkZWZpbmUgcHJvcGVydHkgZGVzY3JpcHRvci5cbiAqIEByZXR1cm5zIHtQcm9wZXJ0eURlc2NyaXB0b3J9IFRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9yIHRvIHJlZGlyZWN0IHRoZSBwcm9wZXJ0eS5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGRlZmluZVJlZGlyZWN0RGVzY3JpcHRvcihrZXkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgICByZXR1cm4gcGQodGhpcykuZXZlbnRba2V5XVxuICAgICAgICB9LFxuICAgICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgICAgIHBkKHRoaXMpLmV2ZW50W2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIH1cbn1cblxuLyoqXG4gKiBHZXQgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3IgdG8gY2FsbCBhIGdpdmVuIG1ldGhvZCBwcm9wZXJ0eS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgUHJvcGVydHkgbmFtZSB0byBkZWZpbmUgcHJvcGVydHkgZGVzY3JpcHRvci5cbiAqIEByZXR1cm5zIHtQcm9wZXJ0eURlc2NyaXB0b3J9IFRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9yIHRvIGNhbGwgdGhlIG1ldGhvZCBwcm9wZXJ0eS5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGRlZmluZUNhbGxEZXNjcmlwdG9yKGtleSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlKCkge1xuICAgICAgICAgICAgY29uc3QgZXZlbnQgPSBwZCh0aGlzKS5ldmVudDtcbiAgICAgICAgICAgIHJldHVybiBldmVudFtrZXldLmFwcGx5KGV2ZW50LCBhcmd1bWVudHMpXG4gICAgICAgIH0sXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICB9XG59XG5cbi8qKlxuICogRGVmaW5lIG5ldyB3cmFwcGVyIGNsYXNzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gQmFzZUV2ZW50IFRoZSBiYXNlIHdyYXBwZXIgY2xhc3MuXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvdG8gVGhlIHByb3RvdHlwZSBvZiB0aGUgb3JpZ2luYWwgZXZlbnQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFRoZSBkZWZpbmVkIHdyYXBwZXIgY2xhc3MuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBkZWZpbmVXcmFwcGVyKEJhc2VFdmVudCwgcHJvdG8pIHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMocHJvdG8pO1xuICAgIGlmIChrZXlzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gQmFzZUV2ZW50XG4gICAgfVxuXG4gICAgLyoqIEN1c3RvbUV2ZW50ICovXG4gICAgZnVuY3Rpb24gQ3VzdG9tRXZlbnQoZXZlbnRUYXJnZXQsIGV2ZW50KSB7XG4gICAgICAgIEJhc2VFdmVudC5jYWxsKHRoaXMsIGV2ZW50VGFyZ2V0LCBldmVudCk7XG4gICAgfVxuXG4gICAgQ3VzdG9tRXZlbnQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShCYXNlRXZlbnQucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBDdXN0b21FdmVudCwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9LFxuICAgIH0pO1xuXG4gICAgLy8gRGVmaW5lIGFjY2Vzc29ycy5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgaWYgKCEoa2V5IGluIEJhc2VFdmVudC5wcm90b3R5cGUpKSB7XG4gICAgICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwcm90bywga2V5KTtcbiAgICAgICAgICAgIGNvbnN0IGlzRnVuYyA9IHR5cGVvZiBkZXNjcmlwdG9yLnZhbHVlID09PSBcImZ1bmN0aW9uXCI7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoXG4gICAgICAgICAgICAgICAgQ3VzdG9tRXZlbnQucHJvdG90eXBlLFxuICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICBpc0Z1bmNcbiAgICAgICAgICAgICAgICAgICAgPyBkZWZpbmVDYWxsRGVzY3JpcHRvcihrZXkpXG4gICAgICAgICAgICAgICAgICAgIDogZGVmaW5lUmVkaXJlY3REZXNjcmlwdG9yKGtleSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gQ3VzdG9tRXZlbnRcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHdyYXBwZXIgY2xhc3Mgb2YgYSBnaXZlbiBwcm90b3R5cGUuXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvdG8gVGhlIHByb3RvdHlwZSBvZiB0aGUgb3JpZ2luYWwgZXZlbnQgdG8gZ2V0IGl0cyB3cmFwcGVyLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBUaGUgd3JhcHBlciBjbGFzcy5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGdldFdyYXBwZXIocHJvdG8pIHtcbiAgICBpZiAocHJvdG8gPT0gbnVsbCB8fCBwcm90byA9PT0gT2JqZWN0LnByb3RvdHlwZSkge1xuICAgICAgICByZXR1cm4gRXZlbnRcbiAgICB9XG5cbiAgICBsZXQgd3JhcHBlciA9IHdyYXBwZXJzLmdldChwcm90byk7XG4gICAgaWYgKHdyYXBwZXIgPT0gbnVsbCkge1xuICAgICAgICB3cmFwcGVyID0gZGVmaW5lV3JhcHBlcihnZXRXcmFwcGVyKE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90bykpLCBwcm90byk7XG4gICAgICAgIHdyYXBwZXJzLnNldChwcm90bywgd3JhcHBlcik7XG4gICAgfVxuICAgIHJldHVybiB3cmFwcGVyXG59XG5cbi8qKlxuICogV3JhcCBhIGdpdmVuIGV2ZW50IHRvIG1hbmFnZW1lbnQgYSBkaXNwYXRjaGluZy5cbiAqIEBwYXJhbSB7RXZlbnRUYXJnZXR9IGV2ZW50VGFyZ2V0IFRoZSBldmVudCB0YXJnZXQgb2YgdGhpcyBkaXNwYXRjaGluZy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBldmVudCBUaGUgZXZlbnQgdG8gd3JhcC5cbiAqIEByZXR1cm5zIHtFdmVudH0gVGhlIHdyYXBwZXIgaW5zdGFuY2UuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiB3cmFwRXZlbnQoZXZlbnRUYXJnZXQsIGV2ZW50KSB7XG4gICAgY29uc3QgV3JhcHBlciA9IGdldFdyYXBwZXIoT2JqZWN0LmdldFByb3RvdHlwZU9mKGV2ZW50KSk7XG4gICAgcmV0dXJuIG5ldyBXcmFwcGVyKGV2ZW50VGFyZ2V0LCBldmVudClcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGltbWVkaWF0ZVN0b3BwZWQgZmxhZyBvZiBhIGdpdmVuIGV2ZW50LlxuICogQHBhcmFtIHtFdmVudH0gZXZlbnQgVGhlIGV2ZW50IHRvIGdldC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBUaGUgZmxhZyB0byBzdG9wIHByb3BhZ2F0aW9uIGltbWVkaWF0ZWx5LlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaXNTdG9wcGVkKGV2ZW50KSB7XG4gICAgcmV0dXJuIHBkKGV2ZW50KS5pbW1lZGlhdGVTdG9wcGVkXG59XG5cbi8qKlxuICogU2V0IHRoZSBjdXJyZW50IGV2ZW50IHBoYXNlIG9mIGEgZ2l2ZW4gZXZlbnQuXG4gKiBAcGFyYW0ge0V2ZW50fSBldmVudCBUaGUgZXZlbnQgdG8gc2V0IGN1cnJlbnQgdGFyZ2V0LlxuICogQHBhcmFtIHtudW1iZXJ9IGV2ZW50UGhhc2UgTmV3IGV2ZW50IHBoYXNlLlxuICogQHJldHVybnMge3ZvaWR9XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzZXRFdmVudFBoYXNlKGV2ZW50LCBldmVudFBoYXNlKSB7XG4gICAgcGQoZXZlbnQpLmV2ZW50UGhhc2UgPSBldmVudFBoYXNlO1xufVxuXG4vKipcbiAqIFNldCB0aGUgY3VycmVudCB0YXJnZXQgb2YgYSBnaXZlbiBldmVudC5cbiAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IFRoZSBldmVudCB0byBzZXQgY3VycmVudCB0YXJnZXQuXG4gKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fG51bGx9IGN1cnJlbnRUYXJnZXQgTmV3IGN1cnJlbnQgdGFyZ2V0LlxuICogQHJldHVybnMge3ZvaWR9XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzZXRDdXJyZW50VGFyZ2V0KGV2ZW50LCBjdXJyZW50VGFyZ2V0KSB7XG4gICAgcGQoZXZlbnQpLmN1cnJlbnRUYXJnZXQgPSBjdXJyZW50VGFyZ2V0O1xufVxuXG4vKipcbiAqIFNldCBhIHBhc3NpdmUgbGlzdGVuZXIgb2YgYSBnaXZlbiBldmVudC5cbiAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IFRoZSBldmVudCB0byBzZXQgY3VycmVudCB0YXJnZXQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufG51bGx9IHBhc3NpdmVMaXN0ZW5lciBOZXcgcGFzc2l2ZSBsaXN0ZW5lci5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gc2V0UGFzc2l2ZUxpc3RlbmVyKGV2ZW50LCBwYXNzaXZlTGlzdGVuZXIpIHtcbiAgICBwZChldmVudCkucGFzc2l2ZUxpc3RlbmVyID0gcGFzc2l2ZUxpc3RlbmVyO1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IExpc3RlbmVyTm9kZVxuICogQHByb3BlcnR5IHtGdW5jdGlvbn0gbGlzdGVuZXJcbiAqIEBwcm9wZXJ0eSB7MXwyfDN9IGxpc3RlbmVyVHlwZVxuICogQHByb3BlcnR5IHtib29sZWFufSBwYXNzaXZlXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IG9uY2VcbiAqIEBwcm9wZXJ0eSB7TGlzdGVuZXJOb2RlfG51bGx9IG5leHRcbiAqIEBwcml2YXRlXG4gKi9cblxuLyoqXG4gKiBAdHlwZSB7V2Vha01hcDxvYmplY3QsIE1hcDxzdHJpbmcsIExpc3RlbmVyTm9kZT4+fVxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgbGlzdGVuZXJzTWFwID0gbmV3IFdlYWtNYXAoKTtcblxuLy8gTGlzdGVuZXIgdHlwZXNcbmNvbnN0IENBUFRVUkUgPSAxO1xuY29uc3QgQlVCQkxFID0gMjtcbmNvbnN0IEFUVFJJQlVURSA9IDM7XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciBhIGdpdmVuIHZhbHVlIGlzIGFuIG9iamVjdCBvciBub3QuXG4gKiBAcGFyYW0ge2FueX0geCBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSB2YWx1ZSBpcyBhbiBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHgpIHtcbiAgICByZXR1cm4geCAhPT0gbnVsbCAmJiB0eXBlb2YgeCA9PT0gXCJvYmplY3RcIiAvL2VzbGludC1kaXNhYmxlLWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXhcbn1cblxuLyoqXG4gKiBHZXQgbGlzdGVuZXJzLlxuICogQHBhcmFtIHtFdmVudFRhcmdldH0gZXZlbnRUYXJnZXQgVGhlIGV2ZW50IHRhcmdldCB0byBnZXQuXG4gKiBAcmV0dXJucyB7TWFwPHN0cmluZywgTGlzdGVuZXJOb2RlPn0gVGhlIGxpc3RlbmVycy5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGdldExpc3RlbmVycyhldmVudFRhcmdldCkge1xuICAgIGNvbnN0IGxpc3RlbmVycyA9IGxpc3RlbmVyc01hcC5nZXQoZXZlbnRUYXJnZXQpO1xuICAgIGlmIChsaXN0ZW5lcnMgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgXCIndGhpcycgaXMgZXhwZWN0ZWQgYW4gRXZlbnRUYXJnZXQgb2JqZWN0LCBidXQgZ290IGFub3RoZXIgdmFsdWUuXCJcbiAgICAgICAgKVxuICAgIH1cbiAgICByZXR1cm4gbGlzdGVuZXJzXG59XG5cbi8qKlxuICogR2V0IHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgZXZlbnQgYXR0cmlidXRlIG9mIGEgZ2l2ZW4gZXZlbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lIFRoZSBldmVudCBuYW1lIHRvIGdldCBwcm9wZXJ0eSBkZXNjcmlwdG9yLlxuICogQHJldHVybnMge1Byb3BlcnR5RGVzY3JpcHRvcn0gVGhlIHByb3BlcnR5IGRlc2NyaXB0b3IuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBkZWZpbmVFdmVudEF0dHJpYnV0ZURlc2NyaXB0b3IoZXZlbnROYW1lKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gZ2V0TGlzdGVuZXJzKHRoaXMpO1xuICAgICAgICAgICAgbGV0IG5vZGUgPSBsaXN0ZW5lcnMuZ2V0KGV2ZW50TmFtZSk7XG4gICAgICAgICAgICB3aGlsZSAobm9kZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGUubGlzdGVuZXJUeXBlID09PSBBVFRSSUJVVEUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUubGlzdGVuZXJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUubmV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgIH0sXG5cbiAgICAgICAgc2V0KGxpc3RlbmVyKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGxpc3RlbmVyICE9PSBcImZ1bmN0aW9uXCIgJiYgIWlzT2JqZWN0KGxpc3RlbmVyKSkge1xuICAgICAgICAgICAgICAgIGxpc3RlbmVyID0gbnVsbDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gZ2V0TGlzdGVuZXJzKHRoaXMpO1xuXG4gICAgICAgICAgICAvLyBUcmF2ZXJzZSB0byB0aGUgdGFpbCB3aGlsZSByZW1vdmluZyBvbGQgdmFsdWUuXG4gICAgICAgICAgICBsZXQgcHJldiA9IG51bGw7XG4gICAgICAgICAgICBsZXQgbm9kZSA9IGxpc3RlbmVycy5nZXQoZXZlbnROYW1lKTtcbiAgICAgICAgICAgIHdoaWxlIChub2RlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAobm9kZS5saXN0ZW5lclR5cGUgPT09IEFUVFJJQlVURSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBSZW1vdmUgb2xkIHZhbHVlLlxuICAgICAgICAgICAgICAgICAgICBpZiAocHJldiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJldi5uZXh0ID0gbm9kZS5uZXh0O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5vZGUubmV4dCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJzLnNldChldmVudE5hbWUsIG5vZGUubmV4dCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcnMuZGVsZXRlKGV2ZW50TmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwcmV2ID0gbm9kZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBub2RlID0gbm9kZS5uZXh0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBBZGQgbmV3IHZhbHVlLlxuICAgICAgICAgICAgaWYgKGxpc3RlbmVyICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Tm9kZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXIsXG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyVHlwZTogQVRUUklCVVRFLFxuICAgICAgICAgICAgICAgICAgICBwYXNzaXZlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgb25jZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIG5leHQ6IG51bGwsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBpZiAocHJldiA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcnMuc2V0KGV2ZW50TmFtZSwgbmV3Tm9kZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcHJldi5uZXh0ID0gbmV3Tm9kZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICB9XG59XG5cbi8qKlxuICogRGVmaW5lIGFuIGV2ZW50IGF0dHJpYnV0ZSAoZS5nLiBgZXZlbnRUYXJnZXQub25jbGlja2ApLlxuICogQHBhcmFtIHtPYmplY3R9IGV2ZW50VGFyZ2V0UHJvdG90eXBlIFRoZSBldmVudCB0YXJnZXQgcHJvdG90eXBlIHRvIGRlZmluZSBhbiBldmVudCBhdHRyYml0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWUgVGhlIGV2ZW50IG5hbWUgdG8gZGVmaW5lLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIGRlZmluZUV2ZW50QXR0cmlidXRlKGV2ZW50VGFyZ2V0UHJvdG90eXBlLCBldmVudE5hbWUpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoXG4gICAgICAgIGV2ZW50VGFyZ2V0UHJvdG90eXBlLFxuICAgICAgICBgb24ke2V2ZW50TmFtZX1gLFxuICAgICAgICBkZWZpbmVFdmVudEF0dHJpYnV0ZURlc2NyaXB0b3IoZXZlbnROYW1lKVxuICAgICk7XG59XG5cbi8qKlxuICogRGVmaW5lIGEgY3VzdG9tIEV2ZW50VGFyZ2V0IHdpdGggZXZlbnQgYXR0cmlidXRlcy5cbiAqIEBwYXJhbSB7c3RyaW5nW119IGV2ZW50TmFtZXMgRXZlbnQgbmFtZXMgZm9yIGV2ZW50IGF0dHJpYnV0ZXMuXG4gKiBAcmV0dXJucyB7RXZlbnRUYXJnZXR9IFRoZSBjdXN0b20gRXZlbnRUYXJnZXQuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBkZWZpbmVDdXN0b21FdmVudFRhcmdldChldmVudE5hbWVzKSB7XG4gICAgLyoqIEN1c3RvbUV2ZW50VGFyZ2V0ICovXG4gICAgZnVuY3Rpb24gQ3VzdG9tRXZlbnRUYXJnZXQoKSB7XG4gICAgICAgIEV2ZW50VGFyZ2V0LmNhbGwodGhpcyk7XG4gICAgfVxuXG4gICAgQ3VzdG9tRXZlbnRUYXJnZXQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudFRhcmdldC5wcm90b3R5cGUsIHtcbiAgICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgICAgIHZhbHVlOiBDdXN0b21FdmVudFRhcmdldCxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBldmVudE5hbWVzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGRlZmluZUV2ZW50QXR0cmlidXRlKEN1c3RvbUV2ZW50VGFyZ2V0LnByb3RvdHlwZSwgZXZlbnROYW1lc1tpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIEN1c3RvbUV2ZW50VGFyZ2V0XG59XG5cbi8qKlxuICogRXZlbnRUYXJnZXQuXG4gKlxuICogLSBUaGlzIGlzIGNvbnN0cnVjdG9yIGlmIG5vIGFyZ3VtZW50cy5cbiAqIC0gVGhpcyBpcyBhIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgYSBDdXN0b21FdmVudFRhcmdldCBjb25zdHJ1Y3RvciBpZiB0aGVyZSBhcmUgYXJndW1lbnRzLlxuICpcbiAqIEZvciBleGFtcGxlOlxuICpcbiAqICAgICBjbGFzcyBBIGV4dGVuZHMgRXZlbnRUYXJnZXQge31cbiAqICAgICBjbGFzcyBCIGV4dGVuZHMgRXZlbnRUYXJnZXQoXCJtZXNzYWdlXCIpIHt9XG4gKiAgICAgY2xhc3MgQyBleHRlbmRzIEV2ZW50VGFyZ2V0KFwibWVzc2FnZVwiLCBcImVycm9yXCIpIHt9XG4gKiAgICAgY2xhc3MgRCBleHRlbmRzIEV2ZW50VGFyZ2V0KFtcIm1lc3NhZ2VcIiwgXCJlcnJvclwiXSkge31cbiAqL1xuZnVuY3Rpb24gRXZlbnRUYXJnZXQoKSB7XG4gICAgLyplc2xpbnQtZGlzYWJsZSBjb25zaXN0ZW50LXJldHVybiAqL1xuICAgIGlmICh0aGlzIGluc3RhbmNlb2YgRXZlbnRUYXJnZXQpIHtcbiAgICAgICAgbGlzdGVuZXJzTWFwLnNldCh0aGlzLCBuZXcgTWFwKCkpO1xuICAgICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEgJiYgQXJyYXkuaXNBcnJheShhcmd1bWVudHNbMF0pKSB7XG4gICAgICAgIHJldHVybiBkZWZpbmVDdXN0b21FdmVudFRhcmdldChhcmd1bWVudHNbMF0pXG4gICAgfVxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCB0eXBlcyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIHR5cGVzW2ldID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWZpbmVDdXN0b21FdmVudFRhcmdldCh0eXBlcylcbiAgICB9XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKVxuICAgIC8qZXNsaW50LWVuYWJsZSBjb25zaXN0ZW50LXJldHVybiAqL1xufVxuXG4vLyBTaG91bGQgYmUgZW51bWVyYWJsZSwgYnV0IGNsYXNzIG1ldGhvZHMgYXJlIG5vdCBlbnVtZXJhYmxlLlxuRXZlbnRUYXJnZXQucHJvdG90eXBlID0ge1xuICAgIC8qKlxuICAgICAqIEFkZCBhIGdpdmVuIGxpc3RlbmVyIHRvIHRoaXMgZXZlbnQgdGFyZ2V0LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWUgVGhlIGV2ZW50IG5hbWUgdG8gYWRkLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyIFRoZSBsaXN0ZW5lciB0byBhZGQuXG4gICAgICogQHBhcmFtIHtib29sZWFufHtjYXB0dXJlPzpib29sZWFuLHBhc3NpdmU/OmJvb2xlYW4sb25jZT86Ym9vbGVhbn19IFtvcHRpb25zXSBUaGUgb3B0aW9ucyBmb3IgdGhpcyBsaXN0ZW5lci5cbiAgICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICAgKi9cbiAgICBhZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgbGlzdGVuZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKGxpc3RlbmVyID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgbGlzdGVuZXIgIT09IFwiZnVuY3Rpb25cIiAmJiAhaXNPYmplY3QobGlzdGVuZXIpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiJ2xpc3RlbmVyJyBzaG91bGQgYmUgYSBmdW5jdGlvbiBvciBhbiBvYmplY3QuXCIpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSBnZXRMaXN0ZW5lcnModGhpcyk7XG4gICAgICAgIGNvbnN0IG9wdGlvbnNJc09iaiA9IGlzT2JqZWN0KG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBjYXB0dXJlID0gb3B0aW9uc0lzT2JqXG4gICAgICAgICAgICA/IEJvb2xlYW4ob3B0aW9ucy5jYXB0dXJlKVxuICAgICAgICAgICAgOiBCb29sZWFuKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBsaXN0ZW5lclR5cGUgPSBjYXB0dXJlID8gQ0FQVFVSRSA6IEJVQkJMRTtcbiAgICAgICAgY29uc3QgbmV3Tm9kZSA9IHtcbiAgICAgICAgICAgIGxpc3RlbmVyLFxuICAgICAgICAgICAgbGlzdGVuZXJUeXBlLFxuICAgICAgICAgICAgcGFzc2l2ZTogb3B0aW9uc0lzT2JqICYmIEJvb2xlYW4ob3B0aW9ucy5wYXNzaXZlKSxcbiAgICAgICAgICAgIG9uY2U6IG9wdGlvbnNJc09iaiAmJiBCb29sZWFuKG9wdGlvbnMub25jZSksXG4gICAgICAgICAgICBuZXh0OiBudWxsLFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFNldCBpdCBhcyB0aGUgZmlyc3Qgbm9kZSBpZiB0aGUgZmlyc3Qgbm9kZSBpcyBudWxsLlxuICAgICAgICBsZXQgbm9kZSA9IGxpc3RlbmVycy5nZXQoZXZlbnROYW1lKTtcbiAgICAgICAgaWYgKG5vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbGlzdGVuZXJzLnNldChldmVudE5hbWUsIG5ld05vZGUpO1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICAvLyBUcmF2ZXJzZSB0byB0aGUgdGFpbCB3aGlsZSBjaGVja2luZyBkdXBsaWNhdGlvbi4uXG4gICAgICAgIGxldCBwcmV2ID0gbnVsbDtcbiAgICAgICAgd2hpbGUgKG5vZGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIG5vZGUubGlzdGVuZXIgPT09IGxpc3RlbmVyICYmXG4gICAgICAgICAgICAgICAgbm9kZS5saXN0ZW5lclR5cGUgPT09IGxpc3RlbmVyVHlwZVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgLy8gU2hvdWxkIGlnbm9yZSBkdXBsaWNhdGlvbi5cbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHByZXYgPSBub2RlO1xuICAgICAgICAgICAgbm9kZSA9IG5vZGUubmV4dDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFkZCBpdC5cbiAgICAgICAgcHJldi5uZXh0ID0gbmV3Tm9kZTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGEgZ2l2ZW4gbGlzdGVuZXIgZnJvbSB0aGlzIGV2ZW50IHRhcmdldC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lIFRoZSBldmVudCBuYW1lIHRvIHJlbW92ZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lciBUaGUgbGlzdGVuZXIgdG8gcmVtb3ZlLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbnx7Y2FwdHVyZT86Ym9vbGVhbixwYXNzaXZlPzpib29sZWFuLG9uY2U/OmJvb2xlYW59fSBbb3B0aW9uc10gVGhlIG9wdGlvbnMgZm9yIHRoaXMgbGlzdGVuZXIuXG4gICAgICogQHJldHVybnMge3ZvaWR9XG4gICAgICovXG4gICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGxpc3RlbmVyLCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChsaXN0ZW5lciA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxpc3RlbmVycyA9IGdldExpc3RlbmVycyh0aGlzKTtcbiAgICAgICAgY29uc3QgY2FwdHVyZSA9IGlzT2JqZWN0KG9wdGlvbnMpXG4gICAgICAgICAgICA/IEJvb2xlYW4ob3B0aW9ucy5jYXB0dXJlKVxuICAgICAgICAgICAgOiBCb29sZWFuKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBsaXN0ZW5lclR5cGUgPSBjYXB0dXJlID8gQ0FQVFVSRSA6IEJVQkJMRTtcblxuICAgICAgICBsZXQgcHJldiA9IG51bGw7XG4gICAgICAgIGxldCBub2RlID0gbGlzdGVuZXJzLmdldChldmVudE5hbWUpO1xuICAgICAgICB3aGlsZSAobm9kZSAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgbm9kZS5saXN0ZW5lciA9PT0gbGlzdGVuZXIgJiZcbiAgICAgICAgICAgICAgICBub2RlLmxpc3RlbmVyVHlwZSA9PT0gbGlzdGVuZXJUeXBlXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBpZiAocHJldiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBwcmV2Lm5leHQgPSBub2RlLm5leHQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChub2RlLm5leHQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJzLnNldChldmVudE5hbWUsIG5vZGUubmV4dCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJzLmRlbGV0ZShldmVudE5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHJldiA9IG5vZGU7XG4gICAgICAgICAgICBub2RlID0gbm9kZS5uZXh0O1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIERpc3BhdGNoIGEgZ2l2ZW4gZXZlbnQuXG4gICAgICogQHBhcmFtIHtFdmVudHx7dHlwZTpzdHJpbmd9fSBldmVudCBUaGUgZXZlbnQgdG8gZGlzcGF0Y2guXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IGBmYWxzZWAgaWYgY2FuY2VsZWQuXG4gICAgICovXG4gICAgZGlzcGF0Y2hFdmVudChldmVudCkge1xuICAgICAgICBpZiAoZXZlbnQgPT0gbnVsbCB8fCB0eXBlb2YgZXZlbnQudHlwZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJldmVudC50eXBlXCIgc2hvdWxkIGJlIGEgc3RyaW5nLicpXG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBsaXN0ZW5lcnMgYXJlbid0IHJlZ2lzdGVyZWQsIHRlcm1pbmF0ZS5cbiAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gZ2V0TGlzdGVuZXJzKHRoaXMpO1xuICAgICAgICBjb25zdCBldmVudE5hbWUgPSBldmVudC50eXBlO1xuICAgICAgICBsZXQgbm9kZSA9IGxpc3RlbmVycy5nZXQoZXZlbnROYW1lKTtcbiAgICAgICAgaWYgKG5vZGUgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNpbmNlIHdlIGNhbm5vdCByZXdyaXRlIHNldmVyYWwgcHJvcGVydGllcywgc28gd3JhcCBvYmplY3QuXG4gICAgICAgIGNvbnN0IHdyYXBwZWRFdmVudCA9IHdyYXBFdmVudCh0aGlzLCBldmVudCk7XG5cbiAgICAgICAgLy8gVGhpcyBkb2Vzbid0IHByb2Nlc3MgY2FwdHVyaW5nIHBoYXNlIGFuZCBidWJibGluZyBwaGFzZS5cbiAgICAgICAgLy8gVGhpcyBpc24ndCBwYXJ0aWNpcGF0aW5nIGluIGEgdHJlZS5cbiAgICAgICAgbGV0IHByZXYgPSBudWxsO1xuICAgICAgICB3aGlsZSAobm9kZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAvLyBSZW1vdmUgdGhpcyBsaXN0ZW5lciBpZiBpdCdzIG9uY2VcbiAgICAgICAgICAgIGlmIChub2RlLm9uY2UpIHtcbiAgICAgICAgICAgICAgICBpZiAocHJldiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBwcmV2Lm5leHQgPSBub2RlLm5leHQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChub2RlLm5leHQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJzLnNldChldmVudE5hbWUsIG5vZGUubmV4dCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJzLmRlbGV0ZShldmVudE5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcHJldiA9IG5vZGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIENhbGwgdGhpcyBsaXN0ZW5lclxuICAgICAgICAgICAgc2V0UGFzc2l2ZUxpc3RlbmVyKFxuICAgICAgICAgICAgICAgIHdyYXBwZWRFdmVudCxcbiAgICAgICAgICAgICAgICBub2RlLnBhc3NpdmUgPyBub2RlLmxpc3RlbmVyIDogbnVsbFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygbm9kZS5saXN0ZW5lciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5saXN0ZW5lci5jYWxsKHRoaXMsIHdyYXBwZWRFdmVudCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBjb25zb2xlICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgY29uc29sZS5lcnJvciA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICBub2RlLmxpc3RlbmVyVHlwZSAhPT0gQVRUUklCVVRFICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIG5vZGUubGlzdGVuZXIuaGFuZGxlRXZlbnQgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5saXN0ZW5lci5oYW5kbGVFdmVudCh3cmFwcGVkRXZlbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBCcmVhayBpZiBgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uYCB3YXMgY2FsbGVkLlxuICAgICAgICAgICAgaWYgKGlzU3RvcHBlZCh3cmFwcGVkRXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbm9kZSA9IG5vZGUubmV4dDtcbiAgICAgICAgfVxuICAgICAgICBzZXRQYXNzaXZlTGlzdGVuZXIod3JhcHBlZEV2ZW50LCBudWxsKTtcbiAgICAgICAgc2V0RXZlbnRQaGFzZSh3cmFwcGVkRXZlbnQsIDApO1xuICAgICAgICBzZXRDdXJyZW50VGFyZ2V0KHdyYXBwZWRFdmVudCwgbnVsbCk7XG5cbiAgICAgICAgcmV0dXJuICF3cmFwcGVkRXZlbnQuZGVmYXVsdFByZXZlbnRlZFxuICAgIH0sXG59O1xuXG4vLyBgY29uc3RydWN0b3JgIGlzIG5vdCBlbnVtZXJhYmxlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEV2ZW50VGFyZ2V0LnByb3RvdHlwZSwgXCJjb25zdHJ1Y3RvclwiLCB7XG4gICAgdmFsdWU6IEV2ZW50VGFyZ2V0LFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB3cml0YWJsZTogdHJ1ZSxcbn0pO1xuXG4vLyBFbnN1cmUgYGV2ZW50VGFyZ2V0IGluc3RhbmNlb2Ygd2luZG93LkV2ZW50VGFyZ2V0YCBpcyBgdHJ1ZWAuXG5pZiAoXG4gICAgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgIHR5cGVvZiB3aW5kb3cuRXZlbnRUYXJnZXQgIT09IFwidW5kZWZpbmVkXCJcbikge1xuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihFdmVudFRhcmdldC5wcm90b3R5cGUsIHdpbmRvdy5FdmVudFRhcmdldC5wcm90b3R5cGUpO1xufVxuXG5leHBvcnRzLmRlZmluZUV2ZW50QXR0cmlidXRlID0gZGVmaW5lRXZlbnRBdHRyaWJ1dGU7XG5leHBvcnRzLkV2ZW50VGFyZ2V0ID0gRXZlbnRUYXJnZXQ7XG5leHBvcnRzLmRlZmF1bHQgPSBFdmVudFRhcmdldDtcblxubW9kdWxlLmV4cG9ydHMgPSBFdmVudFRhcmdldFxubW9kdWxlLmV4cG9ydHMuRXZlbnRUYXJnZXQgPSBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBFdmVudFRhcmdldFxubW9kdWxlLmV4cG9ydHMuZGVmaW5lRXZlbnRBdHRyaWJ1dGUgPSBkZWZpbmVFdmVudEF0dHJpYnV0ZVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXZlbnQtdGFyZ2V0LXNoaW0uanMubWFwXG4iLAogICAgIi8qKlxuICogQGF1dGhvciBUb3J1IE5hZ2FzaGltYSA8aHR0cHM6Ly9naXRodWIuY29tL215c3RpY2F0ZWE+XG4gKiBTZWUgTElDRU5TRSBmaWxlIGluIHJvb3QgZGlyZWN0b3J5IGZvciBmdWxsIGxpY2Vuc2UuXG4gKi9cbid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxudmFyIGV2ZW50VGFyZ2V0U2hpbSA9IHJlcXVpcmUoJ2V2ZW50LXRhcmdldC1zaGltJyk7XG5cbi8qKlxuICogVGhlIHNpZ25hbCBjbGFzcy5cbiAqIEBzZWUgaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNhYm9ydHNpZ25hbFxuICovXG5jbGFzcyBBYm9ydFNpZ25hbCBleHRlbmRzIGV2ZW50VGFyZ2V0U2hpbS5FdmVudFRhcmdldCB7XG4gICAgLyoqXG4gICAgICogQWJvcnRTaWduYWwgY2Fubm90IGJlIGNvbnN0cnVjdGVkIGRpcmVjdGx5LlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQWJvcnRTaWduYWwgY2Fubm90IGJlIGNvbnN0cnVjdGVkIGRpcmVjdGx5XCIpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGlzIGBBYm9ydFNpZ25hbGAncyBgQWJvcnRDb250cm9sbGVyYCBoYXMgc2lnbmFsZWQgdG8gYWJvcnQsIGFuZCBgZmFsc2VgIG90aGVyd2lzZS5cbiAgICAgKi9cbiAgICBnZXQgYWJvcnRlZCgpIHtcbiAgICAgICAgY29uc3QgYWJvcnRlZCA9IGFib3J0ZWRGbGFncy5nZXQodGhpcyk7XG4gICAgICAgIGlmICh0eXBlb2YgYWJvcnRlZCAhPT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkICd0aGlzJyB0byBiZSBhbiAnQWJvcnRTaWduYWwnIG9iamVjdCwgYnV0IGdvdCAke3RoaXMgPT09IG51bGwgPyBcIm51bGxcIiA6IHR5cGVvZiB0aGlzfWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhYm9ydGVkO1xuICAgIH1cbn1cbmV2ZW50VGFyZ2V0U2hpbS5kZWZpbmVFdmVudEF0dHJpYnV0ZShBYm9ydFNpZ25hbC5wcm90b3R5cGUsIFwiYWJvcnRcIik7XG4vKipcbiAqIENyZWF0ZSBhbiBBYm9ydFNpZ25hbCBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUFib3J0U2lnbmFsKCkge1xuICAgIGNvbnN0IHNpZ25hbCA9IE9iamVjdC5jcmVhdGUoQWJvcnRTaWduYWwucHJvdG90eXBlKTtcbiAgICBldmVudFRhcmdldFNoaW0uRXZlbnRUYXJnZXQuY2FsbChzaWduYWwpO1xuICAgIGFib3J0ZWRGbGFncy5zZXQoc2lnbmFsLCBmYWxzZSk7XG4gICAgcmV0dXJuIHNpZ25hbDtcbn1cbi8qKlxuICogQWJvcnQgYSBnaXZlbiBzaWduYWwuXG4gKi9cbmZ1bmN0aW9uIGFib3J0U2lnbmFsKHNpZ25hbCkge1xuICAgIGlmIChhYm9ydGVkRmxhZ3MuZ2V0KHNpZ25hbCkgIT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYWJvcnRlZEZsYWdzLnNldChzaWduYWwsIHRydWUpO1xuICAgIHNpZ25hbC5kaXNwYXRjaEV2ZW50KHsgdHlwZTogXCJhYm9ydFwiIH0pO1xufVxuLyoqXG4gKiBBYm9ydGVkIGZsYWcgZm9yIGVhY2ggaW5zdGFuY2VzLlxuICovXG5jb25zdCBhYm9ydGVkRmxhZ3MgPSBuZXcgV2Vha01hcCgpO1xuLy8gUHJvcGVydGllcyBzaG91bGQgYmUgZW51bWVyYWJsZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEFib3J0U2lnbmFsLnByb3RvdHlwZSwge1xuICAgIGFib3J0ZWQ6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxufSk7XG4vLyBgdG9TdHJpbmcoKWAgc2hvdWxkIHJldHVybiBgXCJbb2JqZWN0IEFib3J0U2lnbmFsXVwiYFxuaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLnRvU3RyaW5nVGFnID09PSBcInN5bWJvbFwiKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFib3J0U2lnbmFsLnByb3RvdHlwZSwgU3ltYm9sLnRvU3RyaW5nVGFnLCB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IFwiQWJvcnRTaWduYWxcIixcbiAgICB9KTtcbn1cblxuLyoqXG4gKiBUaGUgQWJvcnRDb250cm9sbGVyLlxuICogQHNlZSBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2Fib3J0Y29udHJvbGxlclxuICovXG5jbGFzcyBBYm9ydENvbnRyb2xsZXIge1xuICAgIC8qKlxuICAgICAqIEluaXRpYWxpemUgdGhpcyBjb250cm9sbGVyLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzaWduYWxzLnNldCh0aGlzLCBjcmVhdGVBYm9ydFNpZ25hbCgpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgYEFib3J0U2lnbmFsYCBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoaXMgb2JqZWN0LlxuICAgICAqL1xuICAgIGdldCBzaWduYWwoKSB7XG4gICAgICAgIHJldHVybiBnZXRTaWduYWwodGhpcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFib3J0IGFuZCBzaWduYWwgdG8gYW55IG9ic2VydmVycyB0aGF0IHRoZSBhc3NvY2lhdGVkIGFjdGl2aXR5IGlzIHRvIGJlIGFib3J0ZWQuXG4gICAgICovXG4gICAgYWJvcnQoKSB7XG4gICAgICAgIGFib3J0U2lnbmFsKGdldFNpZ25hbCh0aGlzKSk7XG4gICAgfVxufVxuLyoqXG4gKiBBc3NvY2lhdGVkIHNpZ25hbHMuXG4gKi9cbmNvbnN0IHNpZ25hbHMgPSBuZXcgV2Vha01hcCgpO1xuLyoqXG4gKiBHZXQgdGhlIGFzc29jaWF0ZWQgc2lnbmFsIG9mIGEgZ2l2ZW4gY29udHJvbGxlci5cbiAqL1xuZnVuY3Rpb24gZ2V0U2lnbmFsKGNvbnRyb2xsZXIpIHtcbiAgICBjb25zdCBzaWduYWwgPSBzaWduYWxzLmdldChjb250cm9sbGVyKTtcbiAgICBpZiAoc2lnbmFsID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgJ3RoaXMnIHRvIGJlIGFuICdBYm9ydENvbnRyb2xsZXInIG9iamVjdCwgYnV0IGdvdCAke2NvbnRyb2xsZXIgPT09IG51bGwgPyBcIm51bGxcIiA6IHR5cGVvZiBjb250cm9sbGVyfWApO1xuICAgIH1cbiAgICByZXR1cm4gc2lnbmFsO1xufVxuLy8gUHJvcGVydGllcyBzaG91bGQgYmUgZW51bWVyYWJsZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEFib3J0Q29udHJvbGxlci5wcm90b3R5cGUsIHtcbiAgICBzaWduYWw6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuICAgIGFib3J0OiB7IGVudW1lcmFibGU6IHRydWUgfSxcbn0pO1xuaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLnRvU3RyaW5nVGFnID09PSBcInN5bWJvbFwiKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFib3J0Q29udHJvbGxlci5wcm90b3R5cGUsIFN5bWJvbC50b1N0cmluZ1RhZywge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlOiBcIkFib3J0Q29udHJvbGxlclwiLFxuICAgIH0pO1xufVxuXG5leHBvcnRzLkFib3J0Q29udHJvbGxlciA9IEFib3J0Q29udHJvbGxlcjtcbmV4cG9ydHMuQWJvcnRTaWduYWwgPSBBYm9ydFNpZ25hbDtcbmV4cG9ydHMuZGVmYXVsdCA9IEFib3J0Q29udHJvbGxlcjtcblxubW9kdWxlLmV4cG9ydHMgPSBBYm9ydENvbnRyb2xsZXJcbm1vZHVsZS5leHBvcnRzLkFib3J0Q29udHJvbGxlciA9IG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IEFib3J0Q29udHJvbGxlclxubW9kdWxlLmV4cG9ydHMuQWJvcnRTaWduYWwgPSBBYm9ydFNpZ25hbFxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YWJvcnQtY29udHJvbGxlci5qcy5tYXBcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGJ1ZmZlck1vZHVsZSA9IHJlcXVpcmUoJ2J1ZmZlcicpXG5jb25zdCB7IGtSZXNpc3RTdG9wUHJvcGFnYXRpb24sIFN5bWJvbERpc3Bvc2UgfSA9IHJlcXVpcmUoJy4vcHJpbW9yZGlhbHMnKVxuY29uc3QgQWJvcnRTaWduYWwgPSBnbG9iYWxUaGlzLkFib3J0U2lnbmFsIHx8IHJlcXVpcmUoJ2Fib3J0LWNvbnRyb2xsZXInKS5BYm9ydFNpZ25hbFxuY29uc3QgQWJvcnRDb250cm9sbGVyID0gZ2xvYmFsVGhpcy5BYm9ydENvbnRyb2xsZXIgfHwgcmVxdWlyZSgnYWJvcnQtY29udHJvbGxlcicpLkFib3J0Q29udHJvbGxlclxuY29uc3QgQXN5bmNGdW5jdGlvbiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihhc3luYyBmdW5jdGlvbiAoKSB7fSkuY29uc3RydWN0b3JcbmNvbnN0IEJsb2IgPSBnbG9iYWxUaGlzLkJsb2IgfHwgYnVmZmVyTW9kdWxlLkJsb2Jcbi8qIGVzbGludC1kaXNhYmxlIGluZGVudCAqL1xuY29uc3QgaXNCbG9iID1cbiAgdHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnXG4gICAgPyBmdW5jdGlvbiBpc0Jsb2IoYikge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW5kZW50XG4gICAgICAgIHJldHVybiBiIGluc3RhbmNlb2YgQmxvYlxuICAgICAgfVxuICAgIDogZnVuY3Rpb24gaXNCbG9iKGIpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4vKiBlc2xpbnQtZW5hYmxlIGluZGVudCAqL1xuXG5jb25zdCB2YWxpZGF0ZUFib3J0U2lnbmFsID0gKHNpZ25hbCwgbmFtZSkgPT4ge1xuICBpZiAoc2lnbmFsICE9PSB1bmRlZmluZWQgJiYgKHNpZ25hbCA9PT0gbnVsbCB8fCB0eXBlb2Ygc2lnbmFsICE9PSAnb2JqZWN0JyB8fCAhKCdhYm9ydGVkJyBpbiBzaWduYWwpKSkge1xuICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRShuYW1lLCAnQWJvcnRTaWduYWwnLCBzaWduYWwpXG4gIH1cbn1cbmNvbnN0IHZhbGlkYXRlRnVuY3Rpb24gPSAodmFsdWUsIG5hbWUpID0+IHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Z1bmN0aW9uJykgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKG5hbWUsICdGdW5jdGlvbicsIHZhbHVlKVxufVxuXG4vLyBUaGlzIGlzIGEgc2ltcGxpZmllZCB2ZXJzaW9uIG9mIEFnZ3JlZ2F0ZUVycm9yXG5jbGFzcyBBZ2dyZWdhdGVFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IoZXJyb3JzKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGVycm9ycykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIGlucHV0IHRvIGJlIGFuIEFycmF5LCBnb3QgJHt0eXBlb2YgZXJyb3JzfWApXG4gICAgfVxuICAgIGxldCBtZXNzYWdlID0gJydcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVycm9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgbWVzc2FnZSArPSBgICAgICR7ZXJyb3JzW2ldLnN0YWNrfVxcbmBcbiAgICB9XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICB0aGlzLm5hbWUgPSAnQWdncmVnYXRlRXJyb3InXG4gICAgdGhpcy5lcnJvcnMgPSBlcnJvcnNcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEFnZ3JlZ2F0ZUVycm9yLFxuICBrRW1wdHlPYmplY3Q6IE9iamVjdC5mcmVlemUoe30pLFxuICBvbmNlKGNhbGxiYWNrKSB7XG4gICAgbGV0IGNhbGxlZCA9IGZhbHNlXG4gICAgcmV0dXJuIGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICBpZiAoY2FsbGVkKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgY2FsbGVkID0gdHJ1ZVxuICAgICAgY2FsbGJhY2suYXBwbHkodGhpcywgYXJncylcbiAgICB9XG4gIH0sXG4gIGNyZWF0ZURlZmVycmVkUHJvbWlzZTogZnVuY3Rpb24gKCkge1xuICAgIGxldCByZXNvbHZlXG4gICAgbGV0IHJlamVjdFxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByb21pc2UvcGFyYW0tbmFtZXNcbiAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlcywgcmVqKSA9PiB7XG4gICAgICByZXNvbHZlID0gcmVzXG4gICAgICByZWplY3QgPSByZWpcbiAgICB9KVxuICAgIHJldHVybiB7XG4gICAgICBwcm9taXNlLFxuICAgICAgcmVzb2x2ZSxcbiAgICAgIHJlamVjdFxuICAgIH1cbiAgfSxcbiAgcHJvbWlzaWZ5KGZuKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGZuKChlcnIsIC4uLmFyZ3MpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJldHVybiByZWplY3QoZXJyKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNvbHZlKC4uLmFyZ3MpXG4gICAgICB9KVxuICAgIH0pXG4gIH0sXG4gIGRlYnVnbG9nKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7fVxuICB9LFxuICBmb3JtYXQoZm9ybWF0LCAuLi5hcmdzKSB7XG4gICAgLy8gU2ltcGxpZmllZCB2ZXJzaW9uIG9mIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvdXRpbC5odG1sI3V0aWxmb3JtYXRmb3JtYXQtYXJnc1xuICAgIHJldHVybiBmb3JtYXQucmVwbGFjZSgvJShbc2RpZmpdKS9nLCBmdW5jdGlvbiAoLi4uW191bnVzZWQsIHR5cGVdKSB7XG4gICAgICBjb25zdCByZXBsYWNlbWVudCA9IGFyZ3Muc2hpZnQoKVxuICAgICAgaWYgKHR5cGUgPT09ICdmJykge1xuICAgICAgICByZXR1cm4gcmVwbGFjZW1lbnQudG9GaXhlZCg2KVxuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnaicpIHtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHJlcGxhY2VtZW50KVxuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAncycgJiYgdHlwZW9mIHJlcGxhY2VtZW50ID09PSAnb2JqZWN0Jykge1xuICAgICAgICBjb25zdCBjdG9yID0gcmVwbGFjZW1lbnQuY29uc3RydWN0b3IgIT09IE9iamVjdCA/IHJlcGxhY2VtZW50LmNvbnN0cnVjdG9yLm5hbWUgOiAnJ1xuICAgICAgICByZXR1cm4gYCR7Y3Rvcn0ge31gLnRyaW0oKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHJlcGxhY2VtZW50LnRvU3RyaW5nKClcbiAgICAgIH1cbiAgICB9KVxuICB9LFxuICBpbnNwZWN0KHZhbHVlKSB7XG4gICAgLy8gVmFzdGx5IHNpbXBsaWZpZWQgdmVyc2lvbiBvZiBodHRwczovL25vZGVqcy5vcmcvYXBpL3V0aWwuaHRtbCN1dGlsaW5zcGVjdG9iamVjdC1vcHRpb25zXG4gICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgIGlmICh2YWx1ZS5pbmNsdWRlcyhcIidcIikpIHtcbiAgICAgICAgICBpZiAoIXZhbHVlLmluY2x1ZGVzKCdcIicpKSB7XG4gICAgICAgICAgICByZXR1cm4gYFwiJHt2YWx1ZX1cImBcbiAgICAgICAgICB9IGVsc2UgaWYgKCF2YWx1ZS5pbmNsdWRlcygnYCcpICYmICF2YWx1ZS5pbmNsdWRlcygnJHsnKSkge1xuICAgICAgICAgICAgcmV0dXJuIGBcXGAke3ZhbHVlfVxcYGBcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGAnJHt2YWx1ZX0nYFxuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgaWYgKGlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiAnTmFOJ1xuICAgICAgICB9IGVsc2UgaWYgKE9iamVjdC5pcyh2YWx1ZSwgLTApKSB7XG4gICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgIGNhc2UgJ2JpZ2ludCc6XG4gICAgICAgIHJldHVybiBgJHtTdHJpbmcodmFsdWUpfW5gXG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpXG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICByZXR1cm4gJ3t9J1xuICAgIH1cbiAgfSxcbiAgdHlwZXM6IHtcbiAgICBpc0FzeW5jRnVuY3Rpb24oZm4pIHtcbiAgICAgIHJldHVybiBmbiBpbnN0YW5jZW9mIEFzeW5jRnVuY3Rpb25cbiAgICB9LFxuICAgIGlzQXJyYXlCdWZmZXJWaWV3KGFycikge1xuICAgICAgcmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyhhcnIpXG4gICAgfVxuICB9LFxuICBpc0Jsb2IsXG4gIGRlcHJlY2F0ZShmbiwgbWVzc2FnZSkge1xuICAgIHJldHVybiBmblxuICB9LFxuICBhZGRBYm9ydExpc3RlbmVyOlxuICAgIHJlcXVpcmUoJ2V2ZW50cycpLmFkZEFib3J0TGlzdGVuZXIgfHxcbiAgICBmdW5jdGlvbiBhZGRBYm9ydExpc3RlbmVyKHNpZ25hbCwgbGlzdGVuZXIpIHtcbiAgICAgIGlmIChzaWduYWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoJ3NpZ25hbCcsICdBYm9ydFNpZ25hbCcsIHNpZ25hbClcbiAgICAgIH1cbiAgICAgIHZhbGlkYXRlQWJvcnRTaWduYWwoc2lnbmFsLCAnc2lnbmFsJylcbiAgICAgIHZhbGlkYXRlRnVuY3Rpb24obGlzdGVuZXIsICdsaXN0ZW5lcicpXG4gICAgICBsZXQgcmVtb3ZlRXZlbnRMaXN0ZW5lclxuICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGxpc3RlbmVyKCkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBsaXN0ZW5lciwge1xuICAgICAgICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAgICAgICBvbmNlOiB0cnVlLFxuICAgICAgICAgIFtrUmVzaXN0U3RvcFByb3BhZ2F0aW9uXTogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgICByZW1vdmVFdmVudExpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgICAgIHNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIGxpc3RlbmVyKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBfX3Byb3RvX186IG51bGwsXG4gICAgICAgIFtTeW1ib2xEaXNwb3NlXSgpIHtcbiAgICAgICAgICB2YXIgX3JlbW92ZUV2ZW50TGlzdGVuZXJcbiAgICAgICAgICA7KF9yZW1vdmVFdmVudExpc3RlbmVyID0gcmVtb3ZlRXZlbnRMaXN0ZW5lcikgPT09IG51bGwgfHwgX3JlbW92ZUV2ZW50TGlzdGVuZXIgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgICAgIDogX3JlbW92ZUV2ZW50TGlzdGVuZXIoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgQWJvcnRTaWduYWxBbnk6XG4gICAgQWJvcnRTaWduYWwuYW55IHx8XG4gICAgZnVuY3Rpb24gQWJvcnRTaWduYWxBbnkoc2lnbmFscykge1xuICAgICAgLy8gRmFzdCBwYXRoIGlmIHRoZXJlIGlzIG9ubHkgb25lIHNpZ25hbC5cbiAgICAgIGlmIChzaWduYWxzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gc2lnbmFsc1swXVxuICAgICAgfVxuICAgICAgY29uc3QgYWMgPSBuZXcgQWJvcnRDb250cm9sbGVyKClcbiAgICAgIGNvbnN0IGFib3J0ID0gKCkgPT4gYWMuYWJvcnQoKVxuICAgICAgc2lnbmFscy5mb3JFYWNoKChzaWduYWwpID0+IHtcbiAgICAgICAgdmFsaWRhdGVBYm9ydFNpZ25hbChzaWduYWwsICdzaWduYWxzJylcbiAgICAgICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnQsIHtcbiAgICAgICAgICBvbmNlOiB0cnVlXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgICAgYWMuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICdhYm9ydCcsXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBzaWduYWxzLmZvckVhY2goKHNpZ25hbCkgPT4gc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnQpKVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgb25jZTogdHJ1ZVxuICAgICAgICB9XG4gICAgICApXG4gICAgICByZXR1cm4gYWMuc2lnbmFsXG4gICAgfVxufVxubW9kdWxlLmV4cG9ydHMucHJvbWlzaWZ5LmN1c3RvbSA9IFN5bWJvbC5mb3IoJ25vZGVqcy51dGlsLnByb21pc2lmeS5jdXN0b20nKVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBmb3JtYXQsIGluc3BlY3QsIEFnZ3JlZ2F0ZUVycm9yOiBDdXN0b21BZ2dyZWdhdGVFcnJvciB9ID0gcmVxdWlyZSgnLi91dGlsJylcblxuLypcbiAgVGhpcyBmaWxlIGlzIGEgcmVkdWNlZCBhbmQgYWRhcHRlZCB2ZXJzaW9uIG9mIHRoZSBtYWluIGxpYi9pbnRlcm5hbC9lcnJvcnMuanMgZmlsZSBkZWZpbmVkIGF0XG5cbiAgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvbWFzdGVyL2xpYi9pbnRlcm5hbC9lcnJvcnMuanNcblxuICBEb24ndCB0cnkgdG8gcmVwbGFjZSB3aXRoIHRoZSBvcmlnaW5hbCBmaWxlIGFuZCBrZWVwIGl0IHVwIHRvIGRhdGUgKHN0YXJ0aW5nIGZyb20gRSguLi4pIGRlZmluaXRpb25zKVxuICB3aXRoIHRoZSB1cHN0cmVhbSBmaWxlLlxuKi9cblxuY29uc3QgQWdncmVnYXRlRXJyb3IgPSBnbG9iYWxUaGlzLkFnZ3JlZ2F0ZUVycm9yIHx8IEN1c3RvbUFnZ3JlZ2F0ZUVycm9yXG5jb25zdCBrSXNOb2RlRXJyb3IgPSBTeW1ib2woJ2tJc05vZGVFcnJvcicpXG5jb25zdCBrVHlwZXMgPSBbXG4gICdzdHJpbmcnLFxuICAnZnVuY3Rpb24nLFxuICAnbnVtYmVyJyxcbiAgJ29iamVjdCcsXG4gIC8vIEFjY2VwdCAnRnVuY3Rpb24nIGFuZCAnT2JqZWN0JyBhcyBhbHRlcm5hdGl2ZSB0byB0aGUgbG93ZXIgY2FzZWQgdmVyc2lvbi5cbiAgJ0Z1bmN0aW9uJyxcbiAgJ09iamVjdCcsXG4gICdib29sZWFuJyxcbiAgJ2JpZ2ludCcsXG4gICdzeW1ib2wnXG5dXG5jb25zdCBjbGFzc1JlZ0V4cCA9IC9eKFtBLVpdW2EtejAtOV0qKSskL1xuY29uc3Qgbm9kZUludGVybmFsUHJlZml4ID0gJ19fbm9kZV9pbnRlcm5hbF8nXG5jb25zdCBjb2RlcyA9IHt9XG5mdW5jdGlvbiBhc3NlcnQodmFsdWUsIG1lc3NhZ2UpIHtcbiAgaWYgKCF2YWx1ZSkge1xuICAgIHRocm93IG5ldyBjb2Rlcy5FUlJfSU5URVJOQUxfQVNTRVJUSU9OKG1lc3NhZ2UpXG4gIH1cbn1cblxuLy8gT25seSB1c2UgdGhpcyBmb3IgaW50ZWdlcnMhIERlY2ltYWwgbnVtYmVycyBkbyBub3Qgd29yayB3aXRoIHRoaXMgZnVuY3Rpb24uXG5mdW5jdGlvbiBhZGROdW1lcmljYWxTZXBhcmF0b3IodmFsKSB7XG4gIGxldCByZXMgPSAnJ1xuICBsZXQgaSA9IHZhbC5sZW5ndGhcbiAgY29uc3Qgc3RhcnQgPSB2YWxbMF0gPT09ICctJyA/IDEgOiAwXG4gIGZvciAoOyBpID49IHN0YXJ0ICsgNDsgaSAtPSAzKSB7XG4gICAgcmVzID0gYF8ke3ZhbC5zbGljZShpIC0gMywgaSl9JHtyZXN9YFxuICB9XG4gIHJldHVybiBgJHt2YWwuc2xpY2UoMCwgaSl9JHtyZXN9YFxufVxuZnVuY3Rpb24gZ2V0TWVzc2FnZShrZXksIG1zZywgYXJncykge1xuICBpZiAodHlwZW9mIG1zZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGFzc2VydChcbiAgICAgIG1zZy5sZW5ndGggPD0gYXJncy5sZW5ndGgsXG4gICAgICAvLyBEZWZhdWx0IG9wdGlvbnMgZG8gbm90IGNvdW50LlxuICAgICAgYENvZGU6ICR7a2V5fTsgVGhlIHByb3ZpZGVkIGFyZ3VtZW50cyBsZW5ndGggKCR7YXJncy5sZW5ndGh9KSBkb2VzIG5vdCBtYXRjaCB0aGUgcmVxdWlyZWQgb25lcyAoJHttc2cubGVuZ3RofSkuYFxuICAgIClcbiAgICByZXR1cm4gbXNnKC4uLmFyZ3MpXG4gIH1cbiAgY29uc3QgZXhwZWN0ZWRMZW5ndGggPSAobXNnLm1hdGNoKC8lW2RmaWpvT3NdL2cpIHx8IFtdKS5sZW5ndGhcbiAgYXNzZXJ0KFxuICAgIGV4cGVjdGVkTGVuZ3RoID09PSBhcmdzLmxlbmd0aCxcbiAgICBgQ29kZTogJHtrZXl9OyBUaGUgcHJvdmlkZWQgYXJndW1lbnRzIGxlbmd0aCAoJHthcmdzLmxlbmd0aH0pIGRvZXMgbm90IG1hdGNoIHRoZSByZXF1aXJlZCBvbmVzICgke2V4cGVjdGVkTGVuZ3RofSkuYFxuICApXG4gIGlmIChhcmdzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBtc2dcbiAgfVxuICByZXR1cm4gZm9ybWF0KG1zZywgLi4uYXJncylcbn1cbmZ1bmN0aW9uIEUoY29kZSwgbWVzc2FnZSwgQmFzZSkge1xuICBpZiAoIUJhc2UpIHtcbiAgICBCYXNlID0gRXJyb3JcbiAgfVxuICBjbGFzcyBOb2RlRXJyb3IgZXh0ZW5kcyBCYXNlIHtcbiAgICBjb25zdHJ1Y3RvciguLi5hcmdzKSB7XG4gICAgICBzdXBlcihnZXRNZXNzYWdlKGNvZGUsIG1lc3NhZ2UsIGFyZ3MpKVxuICAgIH1cbiAgICB0b1N0cmluZygpIHtcbiAgICAgIHJldHVybiBgJHt0aGlzLm5hbWV9IFske2NvZGV9XTogJHt0aGlzLm1lc3NhZ2V9YFxuICAgIH1cbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhOb2RlRXJyb3IucHJvdG90eXBlLCB7XG4gICAgbmFtZToge1xuICAgICAgdmFsdWU6IEJhc2UubmFtZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9LFxuICAgIHRvU3RyaW5nOiB7XG4gICAgICB2YWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMubmFtZX0gWyR7Y29kZX1dOiAke3RoaXMubWVzc2FnZX1gXG4gICAgICB9LFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH1cbiAgfSlcbiAgTm9kZUVycm9yLnByb3RvdHlwZS5jb2RlID0gY29kZVxuICBOb2RlRXJyb3IucHJvdG90eXBlW2tJc05vZGVFcnJvcl0gPSB0cnVlXG4gIGNvZGVzW2NvZGVdID0gTm9kZUVycm9yXG59XG5mdW5jdGlvbiBoaWRlU3RhY2tGcmFtZXMoZm4pIHtcbiAgLy8gV2UgcmVuYW1lIHRoZSBmdW5jdGlvbnMgdGhhdCB3aWxsIGJlIGhpZGRlbiB0byBjdXQgb2ZmIHRoZSBzdGFja3RyYWNlXG4gIC8vIGF0IHRoZSBvdXRlcm1vc3Qgb25lXG4gIGNvbnN0IGhpZGRlbiA9IG5vZGVJbnRlcm5hbFByZWZpeCArIGZuLm5hbWVcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZuLCAnbmFtZScsIHtcbiAgICB2YWx1ZTogaGlkZGVuXG4gIH0pXG4gIHJldHVybiBmblxufVxuZnVuY3Rpb24gYWdncmVnYXRlVHdvRXJyb3JzKGlubmVyRXJyb3IsIG91dGVyRXJyb3IpIHtcbiAgaWYgKGlubmVyRXJyb3IgJiYgb3V0ZXJFcnJvciAmJiBpbm5lckVycm9yICE9PSBvdXRlckVycm9yKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkob3V0ZXJFcnJvci5lcnJvcnMpKSB7XG4gICAgICAvLyBJZiBgb3V0ZXJFcnJvcmAgaXMgYWxyZWFkeSBhbiBgQWdncmVnYXRlRXJyb3JgLlxuICAgICAgb3V0ZXJFcnJvci5lcnJvcnMucHVzaChpbm5lckVycm9yKVxuICAgICAgcmV0dXJuIG91dGVyRXJyb3JcbiAgICB9XG4gICAgY29uc3QgZXJyID0gbmV3IEFnZ3JlZ2F0ZUVycm9yKFtvdXRlckVycm9yLCBpbm5lckVycm9yXSwgb3V0ZXJFcnJvci5tZXNzYWdlKVxuICAgIGVyci5jb2RlID0gb3V0ZXJFcnJvci5jb2RlXG4gICAgcmV0dXJuIGVyclxuICB9XG4gIHJldHVybiBpbm5lckVycm9yIHx8IG91dGVyRXJyb3Jcbn1cbmNsYXNzIEFib3J0RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2UgPSAnVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZCcsIG9wdGlvbnMgPSB1bmRlZmluZWQpIHtcbiAgICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IGNvZGVzLkVSUl9JTlZBTElEX0FSR19UWVBFKCdvcHRpb25zJywgJ09iamVjdCcsIG9wdGlvbnMpXG4gICAgfVxuICAgIHN1cGVyKG1lc3NhZ2UsIG9wdGlvbnMpXG4gICAgdGhpcy5jb2RlID0gJ0FCT1JUX0VSUidcbiAgICB0aGlzLm5hbWUgPSAnQWJvcnRFcnJvcidcbiAgfVxufVxuRSgnRVJSX0FTU0VSVElPTicsICclcycsIEVycm9yKVxuRShcbiAgJ0VSUl9JTlZBTElEX0FSR19UWVBFJyxcbiAgKG5hbWUsIGV4cGVjdGVkLCBhY3R1YWwpID0+IHtcbiAgICBhc3NlcnQodHlwZW9mIG5hbWUgPT09ICdzdHJpbmcnLCBcIiduYW1lJyBtdXN0IGJlIGEgc3RyaW5nXCIpXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGV4cGVjdGVkKSkge1xuICAgICAgZXhwZWN0ZWQgPSBbZXhwZWN0ZWRdXG4gICAgfVxuICAgIGxldCBtc2cgPSAnVGhlICdcbiAgICBpZiAobmFtZS5lbmRzV2l0aCgnIGFyZ3VtZW50JykpIHtcbiAgICAgIC8vIEZvciBjYXNlcyBsaWtlICdmaXJzdCBhcmd1bWVudCdcbiAgICAgIG1zZyArPSBgJHtuYW1lfSBgXG4gICAgfSBlbHNlIHtcbiAgICAgIG1zZyArPSBgXCIke25hbWV9XCIgJHtuYW1lLmluY2x1ZGVzKCcuJykgPyAncHJvcGVydHknIDogJ2FyZ3VtZW50J30gYFxuICAgIH1cbiAgICBtc2cgKz0gJ211c3QgYmUgJ1xuICAgIGNvbnN0IHR5cGVzID0gW11cbiAgICBjb25zdCBpbnN0YW5jZXMgPSBbXVxuICAgIGNvbnN0IG90aGVyID0gW11cbiAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIGV4cGVjdGVkKSB7XG4gICAgICBhc3NlcnQodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJywgJ0FsbCBleHBlY3RlZCBlbnRyaWVzIGhhdmUgdG8gYmUgb2YgdHlwZSBzdHJpbmcnKVxuICAgICAgaWYgKGtUeXBlcy5pbmNsdWRlcyh2YWx1ZSkpIHtcbiAgICAgICAgdHlwZXMucHVzaCh2YWx1ZS50b0xvd2VyQ2FzZSgpKVxuICAgICAgfSBlbHNlIGlmIChjbGFzc1JlZ0V4cC50ZXN0KHZhbHVlKSkge1xuICAgICAgICBpbnN0YW5jZXMucHVzaCh2YWx1ZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFzc2VydCh2YWx1ZSAhPT0gJ29iamVjdCcsICdUaGUgdmFsdWUgXCJvYmplY3RcIiBzaG91bGQgYmUgd3JpdHRlbiBhcyBcIk9iamVjdFwiJylcbiAgICAgICAgb3RoZXIucHVzaCh2YWx1ZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTcGVjaWFsIGhhbmRsZSBgb2JqZWN0YCBpbiBjYXNlIG90aGVyIGluc3RhbmNlcyBhcmUgYWxsb3dlZCB0byBvdXRsaW5lXG4gICAgLy8gdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gZWFjaCBvdGhlci5cbiAgICBpZiAoaW5zdGFuY2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHBvcyA9IHR5cGVzLmluZGV4T2YoJ29iamVjdCcpXG4gICAgICBpZiAocG9zICE9PSAtMSkge1xuICAgICAgICB0eXBlcy5zcGxpY2UodHlwZXMsIHBvcywgMSlcbiAgICAgICAgaW5zdGFuY2VzLnB1c2goJ09iamVjdCcpXG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlcy5sZW5ndGggPiAwKSB7XG4gICAgICBzd2l0Y2ggKHR5cGVzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbXNnICs9IGBvZiB0eXBlICR7dHlwZXNbMF19YFxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtc2cgKz0gYG9uZSBvZiB0eXBlICR7dHlwZXNbMF19IG9yICR7dHlwZXNbMV19YFxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICBjb25zdCBsYXN0ID0gdHlwZXMucG9wKClcbiAgICAgICAgICBtc2cgKz0gYG9uZSBvZiB0eXBlICR7dHlwZXMuam9pbignLCAnKX0sIG9yICR7bGFzdH1gXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChpbnN0YW5jZXMubGVuZ3RoID4gMCB8fCBvdGhlci5sZW5ndGggPiAwKSB7XG4gICAgICAgIG1zZyArPSAnIG9yICdcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGluc3RhbmNlcy5sZW5ndGggPiAwKSB7XG4gICAgICBzd2l0Y2ggKGluc3RhbmNlcy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1zZyArPSBgYW4gaW5zdGFuY2Ugb2YgJHtpbnN0YW5jZXNbMF19YFxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtc2cgKz0gYGFuIGluc3RhbmNlIG9mICR7aW5zdGFuY2VzWzBdfSBvciAke2luc3RhbmNlc1sxXX1gXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIGNvbnN0IGxhc3QgPSBpbnN0YW5jZXMucG9wKClcbiAgICAgICAgICBtc2cgKz0gYGFuIGluc3RhbmNlIG9mICR7aW5zdGFuY2VzLmpvaW4oJywgJyl9LCBvciAke2xhc3R9YFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAob3RoZXIubGVuZ3RoID4gMCkge1xuICAgICAgICBtc2cgKz0gJyBvciAnXG4gICAgICB9XG4gICAgfVxuICAgIHN3aXRjaCAob3RoZXIubGVuZ3RoKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIDE6XG4gICAgICAgIGlmIChvdGhlclswXS50b0xvd2VyQ2FzZSgpICE9PSBvdGhlclswXSkge1xuICAgICAgICAgIG1zZyArPSAnYW4gJ1xuICAgICAgICB9XG4gICAgICAgIG1zZyArPSBgJHtvdGhlclswXX1gXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIDI6XG4gICAgICAgIG1zZyArPSBgb25lIG9mICR7b3RoZXJbMF19IG9yICR7b3RoZXJbMV19YFxuICAgICAgICBicmVha1xuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBjb25zdCBsYXN0ID0gb3RoZXIucG9wKClcbiAgICAgICAgbXNnICs9IGBvbmUgb2YgJHtvdGhlci5qb2luKCcsICcpfSwgb3IgJHtsYXN0fWBcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGFjdHVhbCA9PSBudWxsKSB7XG4gICAgICBtc2cgKz0gYC4gUmVjZWl2ZWQgJHthY3R1YWx9YFxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGFjdHVhbCA9PT0gJ2Z1bmN0aW9uJyAmJiBhY3R1YWwubmFtZSkge1xuICAgICAgbXNnICs9IGAuIFJlY2VpdmVkIGZ1bmN0aW9uICR7YWN0dWFsLm5hbWV9YFxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGFjdHVhbCA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHZhciBfYWN0dWFsJGNvbnN0cnVjdG9yXG4gICAgICBpZiAoXG4gICAgICAgIChfYWN0dWFsJGNvbnN0cnVjdG9yID0gYWN0dWFsLmNvbnN0cnVjdG9yKSAhPT0gbnVsbCAmJlxuICAgICAgICBfYWN0dWFsJGNvbnN0cnVjdG9yICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgX2FjdHVhbCRjb25zdHJ1Y3Rvci5uYW1lXG4gICAgICApIHtcbiAgICAgICAgbXNnICs9IGAuIFJlY2VpdmVkIGFuIGluc3RhbmNlIG9mICR7YWN0dWFsLmNvbnN0cnVjdG9yLm5hbWV9YFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgaW5zcGVjdGVkID0gaW5zcGVjdChhY3R1YWwsIHtcbiAgICAgICAgICBkZXB0aDogLTFcbiAgICAgICAgfSlcbiAgICAgICAgbXNnICs9IGAuIFJlY2VpdmVkICR7aW5zcGVjdGVkfWBcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGluc3BlY3RlZCA9IGluc3BlY3QoYWN0dWFsLCB7XG4gICAgICAgIGNvbG9yczogZmFsc2VcbiAgICAgIH0pXG4gICAgICBpZiAoaW5zcGVjdGVkLmxlbmd0aCA+IDI1KSB7XG4gICAgICAgIGluc3BlY3RlZCA9IGAke2luc3BlY3RlZC5zbGljZSgwLCAyNSl9Li4uYFxuICAgICAgfVxuICAgICAgbXNnICs9IGAuIFJlY2VpdmVkIHR5cGUgJHt0eXBlb2YgYWN0dWFsfSAoJHtpbnNwZWN0ZWR9KWBcbiAgICB9XG4gICAgcmV0dXJuIG1zZ1xuICB9LFxuICBUeXBlRXJyb3JcbilcbkUoXG4gICdFUlJfSU5WQUxJRF9BUkdfVkFMVUUnLFxuICAobmFtZSwgdmFsdWUsIHJlYXNvbiA9ICdpcyBpbnZhbGlkJykgPT4ge1xuICAgIGxldCBpbnNwZWN0ZWQgPSBpbnNwZWN0KHZhbHVlKVxuICAgIGlmIChpbnNwZWN0ZWQubGVuZ3RoID4gMTI4KSB7XG4gICAgICBpbnNwZWN0ZWQgPSBpbnNwZWN0ZWQuc2xpY2UoMCwgMTI4KSArICcuLi4nXG4gICAgfVxuICAgIGNvbnN0IHR5cGUgPSBuYW1lLmluY2x1ZGVzKCcuJykgPyAncHJvcGVydHknIDogJ2FyZ3VtZW50J1xuICAgIHJldHVybiBgVGhlICR7dHlwZX0gJyR7bmFtZX0nICR7cmVhc29ufS4gUmVjZWl2ZWQgJHtpbnNwZWN0ZWR9YFxuICB9LFxuICBUeXBlRXJyb3JcbilcbkUoXG4gICdFUlJfSU5WQUxJRF9SRVRVUk5fVkFMVUUnLFxuICAoaW5wdXQsIG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgdmFyIF92YWx1ZSRjb25zdHJ1Y3RvclxuICAgIGNvbnN0IHR5cGUgPVxuICAgICAgdmFsdWUgIT09IG51bGwgJiZcbiAgICAgIHZhbHVlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIChfdmFsdWUkY29uc3RydWN0b3IgPSB2YWx1ZS5jb25zdHJ1Y3RvcikgIT09IG51bGwgJiZcbiAgICAgIF92YWx1ZSRjb25zdHJ1Y3RvciAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBfdmFsdWUkY29uc3RydWN0b3IubmFtZVxuICAgICAgICA/IGBpbnN0YW5jZSBvZiAke3ZhbHVlLmNvbnN0cnVjdG9yLm5hbWV9YFxuICAgICAgICA6IGB0eXBlICR7dHlwZW9mIHZhbHVlfWBcbiAgICByZXR1cm4gYEV4cGVjdGVkICR7aW5wdXR9IHRvIGJlIHJldHVybmVkIGZyb20gdGhlIFwiJHtuYW1lfVwiYCArIGAgZnVuY3Rpb24gYnV0IGdvdCAke3R5cGV9LmBcbiAgfSxcbiAgVHlwZUVycm9yXG4pXG5FKFxuICAnRVJSX01JU1NJTkdfQVJHUycsXG4gICguLi5hcmdzKSA9PiB7XG4gICAgYXNzZXJ0KGFyZ3MubGVuZ3RoID4gMCwgJ0F0IGxlYXN0IG9uZSBhcmcgbmVlZHMgdG8gYmUgc3BlY2lmaWVkJylcbiAgICBsZXQgbXNnXG4gICAgY29uc3QgbGVuID0gYXJncy5sZW5ndGhcbiAgICBhcmdzID0gKEFycmF5LmlzQXJyYXkoYXJncykgPyBhcmdzIDogW2FyZ3NdKS5tYXAoKGEpID0+IGBcIiR7YX1cImApLmpvaW4oJyBvciAnKVxuICAgIHN3aXRjaCAobGVuKSB7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIG1zZyArPSBgVGhlICR7YXJnc1swXX0gYXJndW1lbnRgXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIDI6XG4gICAgICAgIG1zZyArPSBgVGhlICR7YXJnc1swXX0gYW5kICR7YXJnc1sxXX0gYXJndW1lbnRzYFxuICAgICAgICBicmVha1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAge1xuICAgICAgICAgIGNvbnN0IGxhc3QgPSBhcmdzLnBvcCgpXG4gICAgICAgICAgbXNnICs9IGBUaGUgJHthcmdzLmpvaW4oJywgJyl9LCBhbmQgJHtsYXN0fSBhcmd1bWVudHNgXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICB9XG4gICAgcmV0dXJuIGAke21zZ30gbXVzdCBiZSBzcGVjaWZpZWRgXG4gIH0sXG4gIFR5cGVFcnJvclxuKVxuRShcbiAgJ0VSUl9PVVRfT0ZfUkFOR0UnLFxuICAoc3RyLCByYW5nZSwgaW5wdXQpID0+IHtcbiAgICBhc3NlcnQocmFuZ2UsICdNaXNzaW5nIFwicmFuZ2VcIiBhcmd1bWVudCcpXG4gICAgbGV0IHJlY2VpdmVkXG4gICAgaWYgKE51bWJlci5pc0ludGVnZXIoaW5wdXQpICYmIE1hdGguYWJzKGlucHV0KSA+IDIgKiogMzIpIHtcbiAgICAgIHJlY2VpdmVkID0gYWRkTnVtZXJpY2FsU2VwYXJhdG9yKFN0cmluZyhpbnB1dCkpXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09ICdiaWdpbnQnKSB7XG4gICAgICByZWNlaXZlZCA9IFN0cmluZyhpbnB1dClcbiAgICAgIGlmIChpbnB1dCA+IDJuICoqIDMybiB8fCBpbnB1dCA8IC0oMm4gKiogMzJuKSkge1xuICAgICAgICByZWNlaXZlZCA9IGFkZE51bWVyaWNhbFNlcGFyYXRvcihyZWNlaXZlZClcbiAgICAgIH1cbiAgICAgIHJlY2VpdmVkICs9ICduJ1xuICAgIH0gZWxzZSB7XG4gICAgICByZWNlaXZlZCA9IGluc3BlY3QoaW5wdXQpXG4gICAgfVxuICAgIHJldHVybiBgVGhlIHZhbHVlIG9mIFwiJHtzdHJ9XCIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlICR7cmFuZ2V9LiBSZWNlaXZlZCAke3JlY2VpdmVkfWBcbiAgfSxcbiAgUmFuZ2VFcnJvclxuKVxuRSgnRVJSX01VTFRJUExFX0NBTExCQUNLJywgJ0NhbGxiYWNrIGNhbGxlZCBtdWx0aXBsZSB0aW1lcycsIEVycm9yKVxuRSgnRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQnLCAnVGhlICVzIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQnLCBFcnJvcilcbkUoJ0VSUl9TVFJFQU1fQUxSRUFEWV9GSU5JU0hFRCcsICdDYW5ub3QgY2FsbCAlcyBhZnRlciBhIHN0cmVhbSB3YXMgZmluaXNoZWQnLCBFcnJvcilcbkUoJ0VSUl9TVFJFQU1fQ0FOTk9UX1BJUEUnLCAnQ2Fubm90IHBpcGUsIG5vdCByZWFkYWJsZScsIEVycm9yKVxuRSgnRVJSX1NUUkVBTV9ERVNUUk9ZRUQnLCAnQ2Fubm90IGNhbGwgJXMgYWZ0ZXIgYSBzdHJlYW0gd2FzIGRlc3Ryb3llZCcsIEVycm9yKVxuRSgnRVJSX1NUUkVBTV9OVUxMX1ZBTFVFUycsICdNYXkgbm90IHdyaXRlIG51bGwgdmFsdWVzIHRvIHN0cmVhbScsIFR5cGVFcnJvcilcbkUoJ0VSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFJywgJ1ByZW1hdHVyZSBjbG9zZScsIEVycm9yKVxuRSgnRVJSX1NUUkVBTV9QVVNIX0FGVEVSX0VPRicsICdzdHJlYW0ucHVzaCgpIGFmdGVyIEVPRicsIEVycm9yKVxuRSgnRVJSX1NUUkVBTV9VTlNISUZUX0FGVEVSX0VORF9FVkVOVCcsICdzdHJlYW0udW5zaGlmdCgpIGFmdGVyIGVuZCBldmVudCcsIEVycm9yKVxuRSgnRVJSX1NUUkVBTV9XUklURV9BRlRFUl9FTkQnLCAnd3JpdGUgYWZ0ZXIgZW5kJywgRXJyb3IpXG5FKCdFUlJfVU5LTk9XTl9FTkNPRElORycsICdVbmtub3duIGVuY29kaW5nOiAlcycsIFR5cGVFcnJvcilcbm1vZHVsZS5leHBvcnRzID0ge1xuICBBYm9ydEVycm9yLFxuICBhZ2dyZWdhdGVUd29FcnJvcnM6IGhpZGVTdGFja0ZyYW1lcyhhZ2dyZWdhdGVUd29FcnJvcnMpLFxuICBoaWRlU3RhY2tGcmFtZXMsXG4gIGNvZGVzXG59XG4iLAogICAgIi8qIGVzbGludCBqc2RvYy9yZXF1aXJlLWpzZG9jOiBcImVycm9yXCIgKi9cblxuJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHtcbiAgQXJyYXlJc0FycmF5LFxuICBBcnJheVByb3RvdHlwZUluY2x1ZGVzLFxuICBBcnJheVByb3RvdHlwZUpvaW4sXG4gIEFycmF5UHJvdG90eXBlTWFwLFxuICBOdW1iZXJJc0ludGVnZXIsXG4gIE51bWJlcklzTmFOLFxuICBOdW1iZXJNQVhfU0FGRV9JTlRFR0VSLFxuICBOdW1iZXJNSU5fU0FGRV9JTlRFR0VSLFxuICBOdW1iZXJQYXJzZUludCxcbiAgT2JqZWN0UHJvdG90eXBlSGFzT3duUHJvcGVydHksXG4gIFJlZ0V4cFByb3RvdHlwZUV4ZWMsXG4gIFN0cmluZyxcbiAgU3RyaW5nUHJvdG90eXBlVG9VcHBlckNhc2UsXG4gIFN0cmluZ1Byb3RvdHlwZVRyaW1cbn0gPSByZXF1aXJlKCcuLi9vdXJzL3ByaW1vcmRpYWxzJylcbmNvbnN0IHtcbiAgaGlkZVN0YWNrRnJhbWVzLFxuICBjb2RlczogeyBFUlJfU09DS0VUX0JBRF9QT1JULCBFUlJfSU5WQUxJRF9BUkdfVFlQRSwgRVJSX0lOVkFMSURfQVJHX1ZBTFVFLCBFUlJfT1VUX09GX1JBTkdFLCBFUlJfVU5LTk9XTl9TSUdOQUwgfVxufSA9IHJlcXVpcmUoJy4uL291cnMvZXJyb3JzJylcbmNvbnN0IHsgbm9ybWFsaXplRW5jb2RpbmcgfSA9IHJlcXVpcmUoJy4uL291cnMvdXRpbCcpXG5jb25zdCB7IGlzQXN5bmNGdW5jdGlvbiwgaXNBcnJheUJ1ZmZlclZpZXcgfSA9IHJlcXVpcmUoJy4uL291cnMvdXRpbCcpLnR5cGVzXG5jb25zdCBzaWduYWxzID0ge31cblxuLyoqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNJbnQzMih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT09ICh2YWx1ZSB8IDApXG59XG5cbi8qKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzVWludDMyKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gdmFsdWUgPj4+IDBcbn1cbmNvbnN0IG9jdGFsUmVnID0gL15bMC03XSskL1xuY29uc3QgbW9kZURlc2MgPSAnbXVzdCBiZSBhIDMyLWJpdCB1bnNpZ25lZCBpbnRlZ2VyIG9yIGFuIG9jdGFsIHN0cmluZydcblxuLyoqXG4gKiBQYXJzZSBhbmQgdmFsaWRhdGUgdmFsdWVzIHRoYXQgd2lsbCBiZSBjb252ZXJ0ZWQgaW50byBtb2RlX3QgKHRoZSBTXypcbiAqIGNvbnN0YW50cykuIE9ubHkgdmFsaWQgbnVtYmVycyBhbmQgb2N0YWwgc3RyaW5ncyBhcmUgYWxsb3dlZC4gVGhleSBjb3VsZCBiZVxuICogY29udmVydGVkIHRvIDMyLWJpdCB1bnNpZ25lZCBpbnRlZ2VycyBvciBub24tbmVnYXRpdmUgc2lnbmVkIGludGVnZXJzIGluIHRoZVxuICogQysrIGxhbmQsIGJ1dCBhbnkgdmFsdWUgaGlnaGVyIHRoYW4gMG83Nzcgd2lsbCByZXN1bHQgaW4gcGxhdGZvcm0tc3BlY2lmaWNcbiAqIGJlaGF2aW9ycy5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVmFsdWVzIHRvIGJlIHZhbGlkYXRlZFxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgTmFtZSBvZiB0aGUgYXJndW1lbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZGVmXSBJZiBzcGVjaWZpZWQsIHdpbGwgYmUgcmV0dXJuZWQgZm9yIGludmFsaWQgdmFsdWVzXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5mdW5jdGlvbiBwYXJzZUZpbGVNb2RlKHZhbHVlLCBuYW1lLCBkZWYpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICB2YWx1ZSA9IGRlZlxuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKFJlZ0V4cFByb3RvdHlwZUV4ZWMob2N0YWxSZWcsIHZhbHVlKSA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19WQUxVRShuYW1lLCB2YWx1ZSwgbW9kZURlc2MpXG4gICAgfVxuICAgIHZhbHVlID0gTnVtYmVyUGFyc2VJbnQodmFsdWUsIDgpXG4gIH1cbiAgdmFsaWRhdGVVaW50MzIodmFsdWUsIG5hbWUpXG4gIHJldHVybiB2YWx1ZVxufVxuXG4vKipcbiAqIEBjYWxsYmFjayB2YWxpZGF0ZUludGVnZXJcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge251bWJlcn0gW21pbl1cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbWF4XVxuICogQHJldHVybnMge2Fzc2VydHMgdmFsdWUgaXMgbnVtYmVyfVxuICovXG5cbi8qKiBAdHlwZSB7dmFsaWRhdGVJbnRlZ2VyfSAqL1xuY29uc3QgdmFsaWRhdGVJbnRlZ2VyID0gaGlkZVN0YWNrRnJhbWVzKCh2YWx1ZSwgbmFtZSwgbWluID0gTnVtYmVyTUlOX1NBRkVfSU5URUdFUiwgbWF4ID0gTnVtYmVyTUFYX1NBRkVfSU5URUdFUikgPT4ge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJykgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKG5hbWUsICdudW1iZXInLCB2YWx1ZSlcbiAgaWYgKCFOdW1iZXJJc0ludGVnZXIodmFsdWUpKSB0aHJvdyBuZXcgRVJSX09VVF9PRl9SQU5HRShuYW1lLCAnYW4gaW50ZWdlcicsIHZhbHVlKVxuICBpZiAodmFsdWUgPCBtaW4gfHwgdmFsdWUgPiBtYXgpIHRocm93IG5ldyBFUlJfT1VUX09GX1JBTkdFKG5hbWUsIGA+PSAke21pbn0gJiYgPD0gJHttYXh9YCwgdmFsdWUpXG59KVxuXG4vKipcbiAqIEBjYWxsYmFjayB2YWxpZGF0ZUludDMyXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHtudW1iZXJ9IFttaW5dXG4gKiBAcGFyYW0ge251bWJlcn0gW21heF1cbiAqIEByZXR1cm5zIHthc3NlcnRzIHZhbHVlIGlzIG51bWJlcn1cbiAqL1xuXG4vKiogQHR5cGUge3ZhbGlkYXRlSW50MzJ9ICovXG5jb25zdCB2YWxpZGF0ZUludDMyID0gaGlkZVN0YWNrRnJhbWVzKCh2YWx1ZSwgbmFtZSwgbWluID0gLTIxNDc0ODM2NDgsIG1heCA9IDIxNDc0ODM2NDcpID0+IHtcbiAgLy8gVGhlIGRlZmF1bHRzIGZvciBtaW4gYW5kIG1heCBjb3JyZXNwb25kIHRvIHRoZSBsaW1pdHMgb2YgMzItYml0IGludGVnZXJzLlxuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRShuYW1lLCAnbnVtYmVyJywgdmFsdWUpXG4gIH1cbiAgaWYgKCFOdW1iZXJJc0ludGVnZXIodmFsdWUpKSB7XG4gICAgdGhyb3cgbmV3IEVSUl9PVVRfT0ZfUkFOR0UobmFtZSwgJ2FuIGludGVnZXInLCB2YWx1ZSlcbiAgfVxuICBpZiAodmFsdWUgPCBtaW4gfHwgdmFsdWUgPiBtYXgpIHtcbiAgICB0aHJvdyBuZXcgRVJSX09VVF9PRl9SQU5HRShuYW1lLCBgPj0gJHttaW59ICYmIDw9ICR7bWF4fWAsIHZhbHVlKVxuICB9XG59KVxuXG4vKipcbiAqIEBjYWxsYmFjayB2YWxpZGF0ZVVpbnQzMlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7bnVtYmVyfGJvb2xlYW59IFtwb3NpdGl2ZT1mYWxzZV1cbiAqIEByZXR1cm5zIHthc3NlcnRzIHZhbHVlIGlzIG51bWJlcn1cbiAqL1xuXG4vKiogQHR5cGUge3ZhbGlkYXRlVWludDMyfSAqL1xuY29uc3QgdmFsaWRhdGVVaW50MzIgPSBoaWRlU3RhY2tGcmFtZXMoKHZhbHVlLCBuYW1lLCBwb3NpdGl2ZSA9IGZhbHNlKSA9PiB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKG5hbWUsICdudW1iZXInLCB2YWx1ZSlcbiAgfVxuICBpZiAoIU51bWJlcklzSW50ZWdlcih2YWx1ZSkpIHtcbiAgICB0aHJvdyBuZXcgRVJSX09VVF9PRl9SQU5HRShuYW1lLCAnYW4gaW50ZWdlcicsIHZhbHVlKVxuICB9XG4gIGNvbnN0IG1pbiA9IHBvc2l0aXZlID8gMSA6IDBcbiAgLy8gMiAqKiAzMiA9PT0gNDI5NDk2NzI5NlxuICBjb25zdCBtYXggPSA0Mjk0OTY3Mjk1XG4gIGlmICh2YWx1ZSA8IG1pbiB8fCB2YWx1ZSA+IG1heCkge1xuICAgIHRocm93IG5ldyBFUlJfT1VUX09GX1JBTkdFKG5hbWUsIGA+PSAke21pbn0gJiYgPD0gJHttYXh9YCwgdmFsdWUpXG4gIH1cbn0pXG5cbi8qKlxuICogQGNhbGxiYWNrIHZhbGlkYXRlU3RyaW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHJldHVybnMge2Fzc2VydHMgdmFsdWUgaXMgc3RyaW5nfVxuICovXG5cbi8qKiBAdHlwZSB7dmFsaWRhdGVTdHJpbmd9ICovXG5mdW5jdGlvbiB2YWxpZGF0ZVN0cmluZyh2YWx1ZSwgbmFtZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKG5hbWUsICdzdHJpbmcnLCB2YWx1ZSlcbn1cblxuLyoqXG4gKiBAY2FsbGJhY2sgdmFsaWRhdGVOdW1iZXJcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge251bWJlcn0gW21pbl1cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbWF4XVxuICogQHJldHVybnMge2Fzc2VydHMgdmFsdWUgaXMgbnVtYmVyfVxuICovXG5cbi8qKiBAdHlwZSB7dmFsaWRhdGVOdW1iZXJ9ICovXG5mdW5jdGlvbiB2YWxpZGF0ZU51bWJlcih2YWx1ZSwgbmFtZSwgbWluID0gdW5kZWZpbmVkLCBtYXgpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicpIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRShuYW1lLCAnbnVtYmVyJywgdmFsdWUpXG4gIGlmIChcbiAgICAobWluICE9IG51bGwgJiYgdmFsdWUgPCBtaW4pIHx8XG4gICAgKG1heCAhPSBudWxsICYmIHZhbHVlID4gbWF4KSB8fFxuICAgICgobWluICE9IG51bGwgfHwgbWF4ICE9IG51bGwpICYmIE51bWJlcklzTmFOKHZhbHVlKSlcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVSUl9PVVRfT0ZfUkFOR0UoXG4gICAgICBuYW1lLFxuICAgICAgYCR7bWluICE9IG51bGwgPyBgPj0gJHttaW59YCA6ICcnfSR7bWluICE9IG51bGwgJiYgbWF4ICE9IG51bGwgPyAnICYmICcgOiAnJ30ke21heCAhPSBudWxsID8gYDw9ICR7bWF4fWAgOiAnJ31gLFxuICAgICAgdmFsdWVcbiAgICApXG4gIH1cbn1cblxuLyoqXG4gKiBAY2FsbGJhY2sgdmFsaWRhdGVPbmVPZlxuICogQHRlbXBsYXRlIFRcbiAqIEBwYXJhbSB7VH0gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge1RbXX0gb25lT2ZcbiAqL1xuXG4vKiogQHR5cGUge3ZhbGlkYXRlT25lT2Z9ICovXG5jb25zdCB2YWxpZGF0ZU9uZU9mID0gaGlkZVN0YWNrRnJhbWVzKCh2YWx1ZSwgbmFtZSwgb25lT2YpID0+IHtcbiAgaWYgKCFBcnJheVByb3RvdHlwZUluY2x1ZGVzKG9uZU9mLCB2YWx1ZSkpIHtcbiAgICBjb25zdCBhbGxvd2VkID0gQXJyYXlQcm90b3R5cGVKb2luKFxuICAgICAgQXJyYXlQcm90b3R5cGVNYXAob25lT2YsICh2KSA9PiAodHlwZW9mIHYgPT09ICdzdHJpbmcnID8gYCcke3Z9J2AgOiBTdHJpbmcodikpKSxcbiAgICAgICcsICdcbiAgICApXG4gICAgY29uc3QgcmVhc29uID0gJ211c3QgYmUgb25lIG9mOiAnICsgYWxsb3dlZFxuICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVkFMVUUobmFtZSwgdmFsdWUsIHJlYXNvbilcbiAgfVxufSlcblxuLyoqXG4gKiBAY2FsbGJhY2sgdmFsaWRhdGVCb29sZWFuXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHJldHVybnMge2Fzc2VydHMgdmFsdWUgaXMgYm9vbGVhbn1cbiAqL1xuXG4vKiogQHR5cGUge3ZhbGlkYXRlQm9vbGVhbn0gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQm9vbGVhbih2YWx1ZSwgbmFtZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnYm9vbGVhbicpIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRShuYW1lLCAnYm9vbGVhbicsIHZhbHVlKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7YW55fSBvcHRpb25zXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKiBAcGFyYW0ge2Jvb2xlYW59IGRlZmF1bHRWYWx1ZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGdldE93blByb3BlcnR5VmFsdWVPckRlZmF1bHQob3B0aW9ucywga2V5LCBkZWZhdWx0VmFsdWUpIHtcbiAgcmV0dXJuIG9wdGlvbnMgPT0gbnVsbCB8fCAhT2JqZWN0UHJvdG90eXBlSGFzT3duUHJvcGVydHkob3B0aW9ucywga2V5KSA/IGRlZmF1bHRWYWx1ZSA6IG9wdGlvbnNba2V5XVxufVxuXG4vKipcbiAqIEBjYWxsYmFjayB2YWxpZGF0ZU9iamVjdFxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7e1xuICogICBhbGxvd0FycmF5PzogYm9vbGVhbixcbiAqICAgYWxsb3dGdW5jdGlvbj86IGJvb2xlYW4sXG4gKiAgIG51bGxhYmxlPzogYm9vbGVhblxuICogfX0gW29wdGlvbnNdXG4gKi9cblxuLyoqIEB0eXBlIHt2YWxpZGF0ZU9iamVjdH0gKi9cbmNvbnN0IHZhbGlkYXRlT2JqZWN0ID0gaGlkZVN0YWNrRnJhbWVzKCh2YWx1ZSwgbmFtZSwgb3B0aW9ucyA9IG51bGwpID0+IHtcbiAgY29uc3QgYWxsb3dBcnJheSA9IGdldE93blByb3BlcnR5VmFsdWVPckRlZmF1bHQob3B0aW9ucywgJ2FsbG93QXJyYXknLCBmYWxzZSlcbiAgY29uc3QgYWxsb3dGdW5jdGlvbiA9IGdldE93blByb3BlcnR5VmFsdWVPckRlZmF1bHQob3B0aW9ucywgJ2FsbG93RnVuY3Rpb24nLCBmYWxzZSlcbiAgY29uc3QgbnVsbGFibGUgPSBnZXRPd25Qcm9wZXJ0eVZhbHVlT3JEZWZhdWx0KG9wdGlvbnMsICdudWxsYWJsZScsIGZhbHNlKVxuICBpZiAoXG4gICAgKCFudWxsYWJsZSAmJiB2YWx1ZSA9PT0gbnVsbCkgfHxcbiAgICAoIWFsbG93QXJyYXkgJiYgQXJyYXlJc0FycmF5KHZhbHVlKSkgfHxcbiAgICAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyAmJiAoIWFsbG93RnVuY3Rpb24gfHwgdHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nKSlcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKG5hbWUsICdPYmplY3QnLCB2YWx1ZSlcbiAgfVxufSlcblxuLyoqXG4gKiBAY2FsbGJhY2sgdmFsaWRhdGVEaWN0aW9uYXJ5IC0gV2UgYXJlIHVzaW5nIHRoZSBXZWIgSURMIFN0YW5kYXJkIGRlZmluaXRpb25cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiBcImRpY3Rpb25hcnlcIiBoZXJlLCB3aGljaCBtZWFucyBhbnkgdmFsdWVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aG9zZSBUeXBlIGlzIGVpdGhlciBVbmRlZmluZWQsIE51bGwsIG9yXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0ICh3aGljaCBpbmNsdWRlcyBmdW5jdGlvbnMpLlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBzZWUgaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy1kaWN0aW9uYXJ5XG4gKiBAc2VlIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyN0YWJsZS10eXBlb2Ytb3BlcmF0b3ItcmVzdWx0c1xuICovXG5cbi8qKiBAdHlwZSB7dmFsaWRhdGVEaWN0aW9uYXJ5fSAqL1xuY29uc3QgdmFsaWRhdGVEaWN0aW9uYXJ5ID0gaGlkZVN0YWNrRnJhbWVzKCh2YWx1ZSwgbmFtZSkgPT4ge1xuICBpZiAodmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRShuYW1lLCAnYSBkaWN0aW9uYXJ5JywgdmFsdWUpXG4gIH1cbn0pXG5cbi8qKlxuICogQGNhbGxiYWNrIHZhbGlkYXRlQXJyYXlcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge251bWJlcn0gW21pbkxlbmd0aF1cbiAqIEByZXR1cm5zIHthc3NlcnRzIHZhbHVlIGlzIGFueVtdfVxuICovXG5cbi8qKiBAdHlwZSB7dmFsaWRhdGVBcnJheX0gKi9cbmNvbnN0IHZhbGlkYXRlQXJyYXkgPSBoaWRlU3RhY2tGcmFtZXMoKHZhbHVlLCBuYW1lLCBtaW5MZW5ndGggPSAwKSA9PiB7XG4gIGlmICghQXJyYXlJc0FycmF5KHZhbHVlKSkge1xuICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRShuYW1lLCAnQXJyYXknLCB2YWx1ZSlcbiAgfVxuICBpZiAodmFsdWUubGVuZ3RoIDwgbWluTGVuZ3RoKSB7XG4gICAgY29uc3QgcmVhc29uID0gYG11c3QgYmUgbG9uZ2VyIHRoYW4gJHttaW5MZW5ndGh9YFxuICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVkFMVUUobmFtZSwgdmFsdWUsIHJlYXNvbilcbiAgfVxufSlcblxuLyoqXG4gKiBAY2FsbGJhY2sgdmFsaWRhdGVTdHJpbmdBcnJheVxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEByZXR1cm5zIHthc3NlcnRzIHZhbHVlIGlzIHN0cmluZ1tdfVxuICovXG5cbi8qKiBAdHlwZSB7dmFsaWRhdGVTdHJpbmdBcnJheX0gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlU3RyaW5nQXJyYXkodmFsdWUsIG5hbWUpIHtcbiAgdmFsaWRhdGVBcnJheSh2YWx1ZSwgbmFtZSlcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgIHZhbGlkYXRlU3RyaW5nKHZhbHVlW2ldLCBgJHtuYW1lfVske2l9XWApXG4gIH1cbn1cblxuLyoqXG4gKiBAY2FsbGJhY2sgdmFsaWRhdGVCb29sZWFuQXJyYXlcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcmV0dXJucyB7YXNzZXJ0cyB2YWx1ZSBpcyBib29sZWFuW119XG4gKi9cblxuLyoqIEB0eXBlIHt2YWxpZGF0ZUJvb2xlYW5BcnJheX0gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQm9vbGVhbkFycmF5KHZhbHVlLCBuYW1lKSB7XG4gIHZhbGlkYXRlQXJyYXkodmFsdWUsIG5hbWUpXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICB2YWxpZGF0ZUJvb2xlYW4odmFsdWVbaV0sIGAke25hbWV9WyR7aX1dYClcbiAgfVxufVxuXG4vKipcbiAqIEBjYWxsYmFjayB2YWxpZGF0ZUFib3J0U2lnbmFsQXJyYXlcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcmV0dXJucyB7YXNzZXJ0cyB2YWx1ZSBpcyBBYm9ydFNpZ25hbFtdfVxuICovXG5cbi8qKiBAdHlwZSB7dmFsaWRhdGVBYm9ydFNpZ25hbEFycmF5fSAqL1xuZnVuY3Rpb24gdmFsaWRhdGVBYm9ydFNpZ25hbEFycmF5KHZhbHVlLCBuYW1lKSB7XG4gIHZhbGlkYXRlQXJyYXkodmFsdWUsIG5hbWUpXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBzaWduYWwgPSB2YWx1ZVtpXVxuICAgIGNvbnN0IGluZGV4ZWROYW1lID0gYCR7bmFtZX1bJHtpfV1gXG4gICAgaWYgKHNpZ25hbCA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoaW5kZXhlZE5hbWUsICdBYm9ydFNpZ25hbCcsIHNpZ25hbClcbiAgICB9XG4gICAgdmFsaWRhdGVBYm9ydFNpZ25hbChzaWduYWwsIGluZGV4ZWROYW1lKVxuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHsqfSBzaWduYWxcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbmFtZT0nc2lnbmFsJ11cbiAqIEByZXR1cm5zIHthc3NlcnRzIHNpZ25hbCBpcyBrZXlvZiBzaWduYWxzfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVNpZ25hbE5hbWUoc2lnbmFsLCBuYW1lID0gJ3NpZ25hbCcpIHtcbiAgdmFsaWRhdGVTdHJpbmcoc2lnbmFsLCBuYW1lKVxuICBpZiAoc2lnbmFsc1tzaWduYWxdID09PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoc2lnbmFsc1tTdHJpbmdQcm90b3R5cGVUb1VwcGVyQ2FzZShzaWduYWwpXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRVJSX1VOS05PV05fU0lHTkFMKHNpZ25hbCArICcgKHNpZ25hbHMgbXVzdCB1c2UgYWxsIGNhcGl0YWwgbGV0dGVycyknKVxuICAgIH1cbiAgICB0aHJvdyBuZXcgRVJSX1VOS05PV05fU0lHTkFMKHNpZ25hbClcbiAgfVxufVxuXG4vKipcbiAqIEBjYWxsYmFjayB2YWxpZGF0ZUJ1ZmZlclxuICogQHBhcmFtIHsqfSBidWZmZXJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbmFtZT0nYnVmZmVyJ11cbiAqIEByZXR1cm5zIHthc3NlcnRzIGJ1ZmZlciBpcyBBcnJheUJ1ZmZlclZpZXd9XG4gKi9cblxuLyoqIEB0eXBlIHt2YWxpZGF0ZUJ1ZmZlcn0gKi9cbmNvbnN0IHZhbGlkYXRlQnVmZmVyID0gaGlkZVN0YWNrRnJhbWVzKChidWZmZXIsIG5hbWUgPSAnYnVmZmVyJykgPT4ge1xuICBpZiAoIWlzQXJyYXlCdWZmZXJWaWV3KGJ1ZmZlcikpIHtcbiAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUobmFtZSwgWydCdWZmZXInLCAnVHlwZWRBcnJheScsICdEYXRhVmlldyddLCBidWZmZXIpXG4gIH1cbn0pXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGRhdGFcbiAqIEBwYXJhbSB7c3RyaW5nfSBlbmNvZGluZ1xuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUVuY29kaW5nKGRhdGEsIGVuY29kaW5nKSB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRFbmNvZGluZyA9IG5vcm1hbGl6ZUVuY29kaW5nKGVuY29kaW5nKVxuICBjb25zdCBsZW5ndGggPSBkYXRhLmxlbmd0aFxuICBpZiAobm9ybWFsaXplZEVuY29kaW5nID09PSAnaGV4JyAmJiBsZW5ndGggJSAyICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19WQUxVRSgnZW5jb2RpbmcnLCBlbmNvZGluZywgYGlzIGludmFsaWQgZm9yIGRhdGEgb2YgbGVuZ3RoICR7bGVuZ3RofWApXG4gIH1cbn1cblxuLyoqXG4gKiBDaGVjayB0aGF0IHRoZSBwb3J0IG51bWJlciBpcyBub3QgTmFOIHdoZW4gY29lcmNlZCB0byBhIG51bWJlcixcbiAqIGlzIGFuIGludGVnZXIgYW5kIHRoYXQgaXQgZmFsbHMgd2l0aGluIHRoZSBsZWdhbCByYW5nZSBvZiBwb3J0IG51bWJlcnMuXG4gKiBAcGFyYW0geyp9IHBvcnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbmFtZT0nUG9ydCddXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFthbGxvd1plcm89dHJ1ZV1cbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlUG9ydChwb3J0LCBuYW1lID0gJ1BvcnQnLCBhbGxvd1plcm8gPSB0cnVlKSB7XG4gIGlmIChcbiAgICAodHlwZW9mIHBvcnQgIT09ICdudW1iZXInICYmIHR5cGVvZiBwb3J0ICE9PSAnc3RyaW5nJykgfHxcbiAgICAodHlwZW9mIHBvcnQgPT09ICdzdHJpbmcnICYmIFN0cmluZ1Byb3RvdHlwZVRyaW0ocG9ydCkubGVuZ3RoID09PSAwKSB8fFxuICAgICtwb3J0ICE9PSArcG9ydCA+Pj4gMCB8fFxuICAgIHBvcnQgPiAweGZmZmYgfHxcbiAgICAocG9ydCA9PT0gMCAmJiAhYWxsb3daZXJvKVxuICApIHtcbiAgICB0aHJvdyBuZXcgRVJSX1NPQ0tFVF9CQURfUE9SVChuYW1lLCBwb3J0LCBhbGxvd1plcm8pXG4gIH1cbiAgcmV0dXJuIHBvcnQgfCAwXG59XG5cbi8qKlxuICogQGNhbGxiYWNrIHZhbGlkYXRlQWJvcnRTaWduYWxcbiAqIEBwYXJhbSB7Kn0gc2lnbmFsXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICovXG5cbi8qKiBAdHlwZSB7dmFsaWRhdGVBYm9ydFNpZ25hbH0gKi9cbmNvbnN0IHZhbGlkYXRlQWJvcnRTaWduYWwgPSBoaWRlU3RhY2tGcmFtZXMoKHNpZ25hbCwgbmFtZSkgPT4ge1xuICBpZiAoc2lnbmFsICE9PSB1bmRlZmluZWQgJiYgKHNpZ25hbCA9PT0gbnVsbCB8fCB0eXBlb2Ygc2lnbmFsICE9PSAnb2JqZWN0JyB8fCAhKCdhYm9ydGVkJyBpbiBzaWduYWwpKSkge1xuICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRShuYW1lLCAnQWJvcnRTaWduYWwnLCBzaWduYWwpXG4gIH1cbn0pXG5cbi8qKlxuICogQGNhbGxiYWNrIHZhbGlkYXRlRnVuY3Rpb25cbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcmV0dXJucyB7YXNzZXJ0cyB2YWx1ZSBpcyBGdW5jdGlvbn1cbiAqL1xuXG4vKiogQHR5cGUge3ZhbGlkYXRlRnVuY3Rpb259ICovXG5jb25zdCB2YWxpZGF0ZUZ1bmN0aW9uID0gaGlkZVN0YWNrRnJhbWVzKCh2YWx1ZSwgbmFtZSkgPT4ge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nKSB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUobmFtZSwgJ0Z1bmN0aW9uJywgdmFsdWUpXG59KVxuXG4vKipcbiAqIEBjYWxsYmFjayB2YWxpZGF0ZVBsYWluRnVuY3Rpb25cbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcmV0dXJucyB7YXNzZXJ0cyB2YWx1ZSBpcyBGdW5jdGlvbn1cbiAqL1xuXG4vKiogQHR5cGUge3ZhbGlkYXRlUGxhaW5GdW5jdGlvbn0gKi9cbmNvbnN0IHZhbGlkYXRlUGxhaW5GdW5jdGlvbiA9IGhpZGVTdGFja0ZyYW1lcygodmFsdWUsIG5hbWUpID0+IHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Z1bmN0aW9uJyB8fCBpc0FzeW5jRnVuY3Rpb24odmFsdWUpKSB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUobmFtZSwgJ0Z1bmN0aW9uJywgdmFsdWUpXG59KVxuXG4vKipcbiAqIEBjYWxsYmFjayB2YWxpZGF0ZVVuZGVmaW5lZFxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEByZXR1cm5zIHthc3NlcnRzIHZhbHVlIGlzIHVuZGVmaW5lZH1cbiAqL1xuXG4vKiogQHR5cGUge3ZhbGlkYXRlVW5kZWZpbmVkfSAqL1xuY29uc3QgdmFsaWRhdGVVbmRlZmluZWQgPSBoaWRlU3RhY2tGcmFtZXMoKHZhbHVlLCBuYW1lKSA9PiB7XG4gIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUobmFtZSwgJ3VuZGVmaW5lZCcsIHZhbHVlKVxufSlcblxuLyoqXG4gKiBAdGVtcGxhdGUgVFxuICogQHBhcmFtIHtUfSB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7VFtdfSB1bmlvblxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVVuaW9uKHZhbHVlLCBuYW1lLCB1bmlvbikge1xuICBpZiAoIUFycmF5UHJvdG90eXBlSW5jbHVkZXModW5pb24sIHZhbHVlKSkge1xuICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRShuYW1lLCBgKCcke0FycmF5UHJvdG90eXBlSm9pbih1bmlvbiwgJ3wnKX0nKWAsIHZhbHVlKVxuICB9XG59XG5cbi8qXG4gIFRoZSBydWxlcyBmb3IgdGhlIExpbmsgaGVhZGVyIGZpZWxkIGFyZSBkZXNjcmliZWQgaGVyZTpcbiAgaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzgyODguaHRtbCNzZWN0aW9uLTNcblxuICBUaGlzIHJlZ2V4IHZhbGlkYXRlcyBhbnkgc3RyaW5nIHN1cnJvdW5kZWQgYnkgYW5nbGUgYnJhY2tldHNcbiAgKG5vdCBuZWNlc3NhcmlseSBhIHZhbGlkIFVSSSByZWZlcmVuY2UpIGZvbGxvd2VkIGJ5IHplcm8gb3IgbW9yZVxuICBsaW5rLXBhcmFtcyBzZXBhcmF0ZWQgYnkgc2VtaWNvbG9ucy5cbiovXG5jb25zdCBsaW5rVmFsdWVSZWdFeHAgPSAvXig/OjxbXj5dKj4pKD86XFxzKjtcXHMqW147XCJcXHNdKyg/Oj0oXCIpP1teO1wiXFxzXSpcXDEpPykqJC9cblxuLyoqXG4gKiBAcGFyYW0ge2FueX0gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlTGlua0hlYWRlckZvcm1hdCh2YWx1ZSwgbmFtZSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJyB8fCAhUmVnRXhwUHJvdG90eXBlRXhlYyhsaW5rVmFsdWVSZWdFeHAsIHZhbHVlKSkge1xuICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVkFMVUUoXG4gICAgICBuYW1lLFxuICAgICAgdmFsdWUsXG4gICAgICAnbXVzdCBiZSBhbiBhcnJheSBvciBzdHJpbmcgb2YgZm9ybWF0IFwiPC9zdHlsZXMuY3NzPjsgcmVsPXByZWxvYWQ7IGFzPXN0eWxlXCInXG4gICAgKVxuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHthbnl9IGhpbnRzXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlTGlua0hlYWRlclZhbHVlKGhpbnRzKSB7XG4gIGlmICh0eXBlb2YgaGludHMgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFsaWRhdGVMaW5rSGVhZGVyRm9ybWF0KGhpbnRzLCAnaGludHMnKVxuICAgIHJldHVybiBoaW50c1xuICB9IGVsc2UgaWYgKEFycmF5SXNBcnJheShoaW50cykpIHtcbiAgICBjb25zdCBoaW50c0xlbmd0aCA9IGhpbnRzLmxlbmd0aFxuICAgIGxldCByZXN1bHQgPSAnJ1xuICAgIGlmIChoaW50c0xlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhpbnRzTGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGxpbmsgPSBoaW50c1tpXVxuICAgICAgdmFsaWRhdGVMaW5rSGVhZGVyRm9ybWF0KGxpbmssICdoaW50cycpXG4gICAgICByZXN1bHQgKz0gbGlua1xuICAgICAgaWYgKGkgIT09IGhpbnRzTGVuZ3RoIC0gMSkge1xuICAgICAgICByZXN1bHQgKz0gJywgJ1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cbiAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19WQUxVRShcbiAgICAnaGludHMnLFxuICAgIGhpbnRzLFxuICAgICdtdXN0IGJlIGFuIGFycmF5IG9yIHN0cmluZyBvZiBmb3JtYXQgXCI8L3N0eWxlcy5jc3M+OyByZWw9cHJlbG9hZDsgYXM9c3R5bGVcIidcbiAgKVxufVxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGlzSW50MzIsXG4gIGlzVWludDMyLFxuICBwYXJzZUZpbGVNb2RlLFxuICB2YWxpZGF0ZUFycmF5LFxuICB2YWxpZGF0ZVN0cmluZ0FycmF5LFxuICB2YWxpZGF0ZUJvb2xlYW5BcnJheSxcbiAgdmFsaWRhdGVBYm9ydFNpZ25hbEFycmF5LFxuICB2YWxpZGF0ZUJvb2xlYW4sXG4gIHZhbGlkYXRlQnVmZmVyLFxuICB2YWxpZGF0ZURpY3Rpb25hcnksXG4gIHZhbGlkYXRlRW5jb2RpbmcsXG4gIHZhbGlkYXRlRnVuY3Rpb24sXG4gIHZhbGlkYXRlSW50MzIsXG4gIHZhbGlkYXRlSW50ZWdlcixcbiAgdmFsaWRhdGVOdW1iZXIsXG4gIHZhbGlkYXRlT2JqZWN0LFxuICB2YWxpZGF0ZU9uZU9mLFxuICB2YWxpZGF0ZVBsYWluRnVuY3Rpb24sXG4gIHZhbGlkYXRlUG9ydCxcbiAgdmFsaWRhdGVTaWduYWxOYW1lLFxuICB2YWxpZGF0ZVN0cmluZyxcbiAgdmFsaWRhdGVVaW50MzIsXG4gIHZhbGlkYXRlVW5kZWZpbmVkLFxuICB2YWxpZGF0ZVVuaW9uLFxuICB2YWxpZGF0ZUFib3J0U2lnbmFsLFxuICB2YWxpZGF0ZUxpbmtIZWFkZXJWYWx1ZVxufVxuIiwKICAgICIvLyBmb3Igbm93IGp1c3QgZXhwb3NlIHRoZSBidWlsdGluIHByb2Nlc3MgZ2xvYmFsIGZyb20gbm9kZS5qc1xubW9kdWxlLmV4cG9ydHMgPSBnbG9iYWwucHJvY2VzcztcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgU3ltYm9sQXN5bmNJdGVyYXRvciwgU3ltYm9sSXRlcmF0b3IsIFN5bWJvbEZvciB9ID0gcmVxdWlyZSgnLi4vLi4vb3Vycy9wcmltb3JkaWFscycpXG5cbi8vIFdlIG5lZWQgdG8gdXNlIFN5bWJvbEZvciB0byBtYWtlIHRoZXNlIGdsb2JhbGx5IGF2YWlsYWJsZVxuLy8gZm9yIGludGVyb3B0IHdpdGggcmVhZGFibGUtc3RyZWFtLCBpLmUuIHJlYWRhYmxlLXN0cmVhbVxuLy8gYW5kIG5vZGUgY29yZSBuZWVkcyB0byBiZSBhYmxlIHRvIHJlYWQvd3JpdGUgcHJpdmF0ZSBzdGF0ZVxuLy8gZnJvbSBlYWNoIG90aGVyIGZvciBwcm9wZXIgaW50ZXJvcGVyYWJpbGl0eS5cbmNvbnN0IGtJc0Rlc3Ryb3llZCA9IFN5bWJvbEZvcignbm9kZWpzLnN0cmVhbS5kZXN0cm95ZWQnKVxuY29uc3Qga0lzRXJyb3JlZCA9IFN5bWJvbEZvcignbm9kZWpzLnN0cmVhbS5lcnJvcmVkJylcbmNvbnN0IGtJc1JlYWRhYmxlID0gU3ltYm9sRm9yKCdub2RlanMuc3RyZWFtLnJlYWRhYmxlJylcbmNvbnN0IGtJc1dyaXRhYmxlID0gU3ltYm9sRm9yKCdub2RlanMuc3RyZWFtLndyaXRhYmxlJylcbmNvbnN0IGtJc0Rpc3R1cmJlZCA9IFN5bWJvbEZvcignbm9kZWpzLnN0cmVhbS5kaXN0dXJiZWQnKVxuY29uc3Qga0lzQ2xvc2VkUHJvbWlzZSA9IFN5bWJvbEZvcignbm9kZWpzLndlYnN0cmVhbS5pc0Nsb3NlZFByb21pc2UnKVxuY29uc3Qga0NvbnRyb2xsZXJFcnJvckZ1bmN0aW9uID0gU3ltYm9sRm9yKCdub2RlanMud2Vic3RyZWFtLmNvbnRyb2xsZXJFcnJvckZ1bmN0aW9uJylcbmZ1bmN0aW9uIGlzUmVhZGFibGVOb2RlU3RyZWFtKG9iaiwgc3RyaWN0ID0gZmFsc2UpIHtcbiAgdmFyIF9vYmokX3JlYWRhYmxlU3RhdGVcbiAgcmV0dXJuICEhKFxuICAgIChcbiAgICAgIG9iaiAmJlxuICAgICAgdHlwZW9mIG9iai5waXBlID09PSAnZnVuY3Rpb24nICYmXG4gICAgICB0eXBlb2Ygb2JqLm9uID09PSAnZnVuY3Rpb24nICYmXG4gICAgICAoIXN0cmljdCB8fCAodHlwZW9mIG9iai5wYXVzZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2Ygb2JqLnJlc3VtZSA9PT0gJ2Z1bmN0aW9uJykpICYmXG4gICAgICAoIW9iai5fd3JpdGFibGVTdGF0ZSB8fFxuICAgICAgICAoKF9vYmokX3JlYWRhYmxlU3RhdGUgPSBvYmouX3JlYWRhYmxlU3RhdGUpID09PSBudWxsIHx8IF9vYmokX3JlYWRhYmxlU3RhdGUgPT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgOiBfb2JqJF9yZWFkYWJsZVN0YXRlLnJlYWRhYmxlKSAhPT0gZmFsc2UpICYmXG4gICAgICAvLyBEdXBsZXhcbiAgICAgICghb2JqLl93cml0YWJsZVN0YXRlIHx8IG9iai5fcmVhZGFibGVTdGF0ZSlcbiAgICApIC8vIFdyaXRhYmxlIGhhcyAucGlwZS5cbiAgKVxufVxuXG5mdW5jdGlvbiBpc1dyaXRhYmxlTm9kZVN0cmVhbShvYmopIHtcbiAgdmFyIF9vYmokX3dyaXRhYmxlU3RhdGVcbiAgcmV0dXJuICEhKFxuICAgIChcbiAgICAgIG9iaiAmJlxuICAgICAgdHlwZW9mIG9iai53cml0ZSA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgdHlwZW9mIG9iai5vbiA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgKCFvYmouX3JlYWRhYmxlU3RhdGUgfHxcbiAgICAgICAgKChfb2JqJF93cml0YWJsZVN0YXRlID0gb2JqLl93cml0YWJsZVN0YXRlKSA9PT0gbnVsbCB8fCBfb2JqJF93cml0YWJsZVN0YXRlID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICAgIDogX29iaiRfd3JpdGFibGVTdGF0ZS53cml0YWJsZSkgIT09IGZhbHNlKVxuICAgICkgLy8gRHVwbGV4XG4gIClcbn1cblxuZnVuY3Rpb24gaXNEdXBsZXhOb2RlU3RyZWFtKG9iaikge1xuICByZXR1cm4gISEoXG4gICAgb2JqICYmXG4gICAgdHlwZW9mIG9iai5waXBlID09PSAnZnVuY3Rpb24nICYmXG4gICAgb2JqLl9yZWFkYWJsZVN0YXRlICYmXG4gICAgdHlwZW9mIG9iai5vbiA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBvYmoud3JpdGUgPT09ICdmdW5jdGlvbidcbiAgKVxufVxuZnVuY3Rpb24gaXNOb2RlU3RyZWFtKG9iaikge1xuICByZXR1cm4gKFxuICAgIG9iaiAmJlxuICAgIChvYmouX3JlYWRhYmxlU3RhdGUgfHxcbiAgICAgIG9iai5fd3JpdGFibGVTdGF0ZSB8fFxuICAgICAgKHR5cGVvZiBvYmoud3JpdGUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIG9iai5vbiA9PT0gJ2Z1bmN0aW9uJykgfHxcbiAgICAgICh0eXBlb2Ygb2JqLnBpcGUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIG9iai5vbiA9PT0gJ2Z1bmN0aW9uJykpXG4gIClcbn1cbmZ1bmN0aW9uIGlzUmVhZGFibGVTdHJlYW0ob2JqKSB7XG4gIHJldHVybiAhIShcbiAgICBvYmogJiZcbiAgICAhaXNOb2RlU3RyZWFtKG9iaikgJiZcbiAgICB0eXBlb2Ygb2JqLnBpcGVUaHJvdWdoID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIG9iai5nZXRSZWFkZXIgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2Ygb2JqLmNhbmNlbCA9PT0gJ2Z1bmN0aW9uJ1xuICApXG59XG5mdW5jdGlvbiBpc1dyaXRhYmxlU3RyZWFtKG9iaikge1xuICByZXR1cm4gISEob2JqICYmICFpc05vZGVTdHJlYW0ob2JqKSAmJiB0eXBlb2Ygb2JqLmdldFdyaXRlciA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2Ygb2JqLmFib3J0ID09PSAnZnVuY3Rpb24nKVxufVxuZnVuY3Rpb24gaXNUcmFuc2Zvcm1TdHJlYW0ob2JqKSB7XG4gIHJldHVybiAhIShvYmogJiYgIWlzTm9kZVN0cmVhbShvYmopICYmIHR5cGVvZiBvYmoucmVhZGFibGUgPT09ICdvYmplY3QnICYmIHR5cGVvZiBvYmoud3JpdGFibGUgPT09ICdvYmplY3QnKVxufVxuZnVuY3Rpb24gaXNXZWJTdHJlYW0ob2JqKSB7XG4gIHJldHVybiBpc1JlYWRhYmxlU3RyZWFtKG9iaikgfHwgaXNXcml0YWJsZVN0cmVhbShvYmopIHx8IGlzVHJhbnNmb3JtU3RyZWFtKG9iailcbn1cbmZ1bmN0aW9uIGlzSXRlcmFibGUob2JqLCBpc0FzeW5jKSB7XG4gIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIGZhbHNlXG4gIGlmIChpc0FzeW5jID09PSB0cnVlKSByZXR1cm4gdHlwZW9mIG9ialtTeW1ib2xBc3luY0l0ZXJhdG9yXSA9PT0gJ2Z1bmN0aW9uJ1xuICBpZiAoaXNBc3luYyA9PT0gZmFsc2UpIHJldHVybiB0eXBlb2Ygb2JqW1N5bWJvbEl0ZXJhdG9yXSA9PT0gJ2Z1bmN0aW9uJ1xuICByZXR1cm4gdHlwZW9mIG9ialtTeW1ib2xBc3luY0l0ZXJhdG9yXSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2Ygb2JqW1N5bWJvbEl0ZXJhdG9yXSA9PT0gJ2Z1bmN0aW9uJ1xufVxuZnVuY3Rpb24gaXNEZXN0cm95ZWQoc3RyZWFtKSB7XG4gIGlmICghaXNOb2RlU3RyZWFtKHN0cmVhbSkpIHJldHVybiBudWxsXG4gIGNvbnN0IHdTdGF0ZSA9IHN0cmVhbS5fd3JpdGFibGVTdGF0ZVxuICBjb25zdCByU3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGVcbiAgY29uc3Qgc3RhdGUgPSB3U3RhdGUgfHwgclN0YXRlXG4gIHJldHVybiAhIShzdHJlYW0uZGVzdHJveWVkIHx8IHN0cmVhbVtrSXNEZXN0cm95ZWRdIHx8IChzdGF0ZSAhPT0gbnVsbCAmJiBzdGF0ZSAhPT0gdW5kZWZpbmVkICYmIHN0YXRlLmRlc3Ryb3llZCkpXG59XG5cbi8vIEhhdmUgYmVlbiBlbmQoKTpkLlxuZnVuY3Rpb24gaXNXcml0YWJsZUVuZGVkKHN0cmVhbSkge1xuICBpZiAoIWlzV3JpdGFibGVOb2RlU3RyZWFtKHN0cmVhbSkpIHJldHVybiBudWxsXG4gIGlmIChzdHJlYW0ud3JpdGFibGVFbmRlZCA9PT0gdHJ1ZSkgcmV0dXJuIHRydWVcbiAgY29uc3Qgd1N0YXRlID0gc3RyZWFtLl93cml0YWJsZVN0YXRlXG4gIGlmICh3U3RhdGUgIT09IG51bGwgJiYgd1N0YXRlICE9PSB1bmRlZmluZWQgJiYgd1N0YXRlLmVycm9yZWQpIHJldHVybiBmYWxzZVxuICBpZiAodHlwZW9mICh3U3RhdGUgPT09IG51bGwgfHwgd1N0YXRlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB3U3RhdGUuZW5kZWQpICE9PSAnYm9vbGVhbicpIHJldHVybiBudWxsXG4gIHJldHVybiB3U3RhdGUuZW5kZWRcbn1cblxuLy8gSGF2ZSBlbWl0dGVkICdmaW5pc2gnLlxuZnVuY3Rpb24gaXNXcml0YWJsZUZpbmlzaGVkKHN0cmVhbSwgc3RyaWN0KSB7XG4gIGlmICghaXNXcml0YWJsZU5vZGVTdHJlYW0oc3RyZWFtKSkgcmV0dXJuIG51bGxcbiAgaWYgKHN0cmVhbS53cml0YWJsZUZpbmlzaGVkID09PSB0cnVlKSByZXR1cm4gdHJ1ZVxuICBjb25zdCB3U3RhdGUgPSBzdHJlYW0uX3dyaXRhYmxlU3RhdGVcbiAgaWYgKHdTdGF0ZSAhPT0gbnVsbCAmJiB3U3RhdGUgIT09IHVuZGVmaW5lZCAmJiB3U3RhdGUuZXJyb3JlZCkgcmV0dXJuIGZhbHNlXG4gIGlmICh0eXBlb2YgKHdTdGF0ZSA9PT0gbnVsbCB8fCB3U3RhdGUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHdTdGF0ZS5maW5pc2hlZCkgIT09ICdib29sZWFuJykgcmV0dXJuIG51bGxcbiAgcmV0dXJuICEhKHdTdGF0ZS5maW5pc2hlZCB8fCAoc3RyaWN0ID09PSBmYWxzZSAmJiB3U3RhdGUuZW5kZWQgPT09IHRydWUgJiYgd1N0YXRlLmxlbmd0aCA9PT0gMCkpXG59XG5cbi8vIEhhdmUgYmVlbiBwdXNoKG51bGwpOmQuXG5mdW5jdGlvbiBpc1JlYWRhYmxlRW5kZWQoc3RyZWFtKSB7XG4gIGlmICghaXNSZWFkYWJsZU5vZGVTdHJlYW0oc3RyZWFtKSkgcmV0dXJuIG51bGxcbiAgaWYgKHN0cmVhbS5yZWFkYWJsZUVuZGVkID09PSB0cnVlKSByZXR1cm4gdHJ1ZVxuICBjb25zdCByU3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGVcbiAgaWYgKCFyU3RhdGUgfHwgclN0YXRlLmVycm9yZWQpIHJldHVybiBmYWxzZVxuICBpZiAodHlwZW9mIChyU3RhdGUgPT09IG51bGwgfHwgclN0YXRlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiByU3RhdGUuZW5kZWQpICE9PSAnYm9vbGVhbicpIHJldHVybiBudWxsXG4gIHJldHVybiByU3RhdGUuZW5kZWRcbn1cblxuLy8gSGF2ZSBlbWl0dGVkICdlbmQnLlxuZnVuY3Rpb24gaXNSZWFkYWJsZUZpbmlzaGVkKHN0cmVhbSwgc3RyaWN0KSB7XG4gIGlmICghaXNSZWFkYWJsZU5vZGVTdHJlYW0oc3RyZWFtKSkgcmV0dXJuIG51bGxcbiAgY29uc3QgclN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlXG4gIGlmIChyU3RhdGUgIT09IG51bGwgJiYgclN0YXRlICE9PSB1bmRlZmluZWQgJiYgclN0YXRlLmVycm9yZWQpIHJldHVybiBmYWxzZVxuICBpZiAodHlwZW9mIChyU3RhdGUgPT09IG51bGwgfHwgclN0YXRlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiByU3RhdGUuZW5kRW1pdHRlZCkgIT09ICdib29sZWFuJykgcmV0dXJuIG51bGxcbiAgcmV0dXJuICEhKHJTdGF0ZS5lbmRFbWl0dGVkIHx8IChzdHJpY3QgPT09IGZhbHNlICYmIHJTdGF0ZS5lbmRlZCA9PT0gdHJ1ZSAmJiByU3RhdGUubGVuZ3RoID09PSAwKSlcbn1cbmZ1bmN0aW9uIGlzUmVhZGFibGUoc3RyZWFtKSB7XG4gIGlmIChzdHJlYW0gJiYgc3RyZWFtW2tJc1JlYWRhYmxlXSAhPSBudWxsKSByZXR1cm4gc3RyZWFtW2tJc1JlYWRhYmxlXVxuICBpZiAodHlwZW9mIChzdHJlYW0gPT09IG51bGwgfHwgc3RyZWFtID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBzdHJlYW0ucmVhZGFibGUpICE9PSAnYm9vbGVhbicpIHJldHVybiBudWxsXG4gIGlmIChpc0Rlc3Ryb3llZChzdHJlYW0pKSByZXR1cm4gZmFsc2VcbiAgcmV0dXJuIGlzUmVhZGFibGVOb2RlU3RyZWFtKHN0cmVhbSkgJiYgc3RyZWFtLnJlYWRhYmxlICYmICFpc1JlYWRhYmxlRmluaXNoZWQoc3RyZWFtKVxufVxuZnVuY3Rpb24gaXNXcml0YWJsZShzdHJlYW0pIHtcbiAgaWYgKHN0cmVhbSAmJiBzdHJlYW1ba0lzV3JpdGFibGVdICE9IG51bGwpIHJldHVybiBzdHJlYW1ba0lzV3JpdGFibGVdXG4gIGlmICh0eXBlb2YgKHN0cmVhbSA9PT0gbnVsbCB8fCBzdHJlYW0gPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHN0cmVhbS53cml0YWJsZSkgIT09ICdib29sZWFuJykgcmV0dXJuIG51bGxcbiAgaWYgKGlzRGVzdHJveWVkKHN0cmVhbSkpIHJldHVybiBmYWxzZVxuICByZXR1cm4gaXNXcml0YWJsZU5vZGVTdHJlYW0oc3RyZWFtKSAmJiBzdHJlYW0ud3JpdGFibGUgJiYgIWlzV3JpdGFibGVFbmRlZChzdHJlYW0pXG59XG5mdW5jdGlvbiBpc0ZpbmlzaGVkKHN0cmVhbSwgb3B0cykge1xuICBpZiAoIWlzTm9kZVN0cmVhbShzdHJlYW0pKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuICBpZiAoaXNEZXN0cm95ZWQoc3RyZWFtKSkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgaWYgKChvcHRzID09PSBudWxsIHx8IG9wdHMgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IG9wdHMucmVhZGFibGUpICE9PSBmYWxzZSAmJiBpc1JlYWRhYmxlKHN0cmVhbSkpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICBpZiAoKG9wdHMgPT09IG51bGwgfHwgb3B0cyA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogb3B0cy53cml0YWJsZSkgIT09IGZhbHNlICYmIGlzV3JpdGFibGUoc3RyZWFtKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIHJldHVybiB0cnVlXG59XG5mdW5jdGlvbiBpc1dyaXRhYmxlRXJyb3JlZChzdHJlYW0pIHtcbiAgdmFyIF9zdHJlYW0kX3dyaXRhYmxlU3RhdCwgX3N0cmVhbSRfd3JpdGFibGVTdGF0MlxuICBpZiAoIWlzTm9kZVN0cmVhbShzdHJlYW0pKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuICBpZiAoc3RyZWFtLndyaXRhYmxlRXJyb3JlZCkge1xuICAgIHJldHVybiBzdHJlYW0ud3JpdGFibGVFcnJvcmVkXG4gIH1cbiAgcmV0dXJuIChfc3RyZWFtJF93cml0YWJsZVN0YXQgPVxuICAgIChfc3RyZWFtJF93cml0YWJsZVN0YXQyID0gc3RyZWFtLl93cml0YWJsZVN0YXRlKSA9PT0gbnVsbCB8fCBfc3RyZWFtJF93cml0YWJsZVN0YXQyID09PSB1bmRlZmluZWRcbiAgICAgID8gdW5kZWZpbmVkXG4gICAgICA6IF9zdHJlYW0kX3dyaXRhYmxlU3RhdDIuZXJyb3JlZCkgIT09IG51bGwgJiYgX3N0cmVhbSRfd3JpdGFibGVTdGF0ICE9PSB1bmRlZmluZWRcbiAgICA/IF9zdHJlYW0kX3dyaXRhYmxlU3RhdFxuICAgIDogbnVsbFxufVxuZnVuY3Rpb24gaXNSZWFkYWJsZUVycm9yZWQoc3RyZWFtKSB7XG4gIHZhciBfc3RyZWFtJF9yZWFkYWJsZVN0YXQsIF9zdHJlYW0kX3JlYWRhYmxlU3RhdDJcbiAgaWYgKCFpc05vZGVTdHJlYW0oc3RyZWFtKSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgaWYgKHN0cmVhbS5yZWFkYWJsZUVycm9yZWQpIHtcbiAgICByZXR1cm4gc3RyZWFtLnJlYWRhYmxlRXJyb3JlZFxuICB9XG4gIHJldHVybiAoX3N0cmVhbSRfcmVhZGFibGVTdGF0ID1cbiAgICAoX3N0cmVhbSRfcmVhZGFibGVTdGF0MiA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZSkgPT09IG51bGwgfHwgX3N0cmVhbSRfcmVhZGFibGVTdGF0MiA9PT0gdW5kZWZpbmVkXG4gICAgICA/IHVuZGVmaW5lZFxuICAgICAgOiBfc3RyZWFtJF9yZWFkYWJsZVN0YXQyLmVycm9yZWQpICE9PSBudWxsICYmIF9zdHJlYW0kX3JlYWRhYmxlU3RhdCAhPT0gdW5kZWZpbmVkXG4gICAgPyBfc3RyZWFtJF9yZWFkYWJsZVN0YXRcbiAgICA6IG51bGxcbn1cbmZ1bmN0aW9uIGlzQ2xvc2VkKHN0cmVhbSkge1xuICBpZiAoIWlzTm9kZVN0cmVhbShzdHJlYW0pKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuICBpZiAodHlwZW9mIHN0cmVhbS5jbG9zZWQgPT09ICdib29sZWFuJykge1xuICAgIHJldHVybiBzdHJlYW0uY2xvc2VkXG4gIH1cbiAgY29uc3Qgd1N0YXRlID0gc3RyZWFtLl93cml0YWJsZVN0YXRlXG4gIGNvbnN0IHJTdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZVxuICBpZiAoXG4gICAgdHlwZW9mICh3U3RhdGUgPT09IG51bGwgfHwgd1N0YXRlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB3U3RhdGUuY2xvc2VkKSA9PT0gJ2Jvb2xlYW4nIHx8XG4gICAgdHlwZW9mIChyU3RhdGUgPT09IG51bGwgfHwgclN0YXRlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiByU3RhdGUuY2xvc2VkKSA9PT0gJ2Jvb2xlYW4nXG4gICkge1xuICAgIHJldHVybiAoXG4gICAgICAod1N0YXRlID09PSBudWxsIHx8IHdTdGF0ZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogd1N0YXRlLmNsb3NlZCkgfHxcbiAgICAgIChyU3RhdGUgPT09IG51bGwgfHwgclN0YXRlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiByU3RhdGUuY2xvc2VkKVxuICAgIClcbiAgfVxuICBpZiAodHlwZW9mIHN0cmVhbS5fY2xvc2VkID09PSAnYm9vbGVhbicgJiYgaXNPdXRnb2luZ01lc3NhZ2Uoc3RyZWFtKSkge1xuICAgIHJldHVybiBzdHJlYW0uX2Nsb3NlZFxuICB9XG4gIHJldHVybiBudWxsXG59XG5mdW5jdGlvbiBpc091dGdvaW5nTWVzc2FnZShzdHJlYW0pIHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2Ygc3RyZWFtLl9jbG9zZWQgPT09ICdib29sZWFuJyAmJlxuICAgIHR5cGVvZiBzdHJlYW0uX2RlZmF1bHRLZWVwQWxpdmUgPT09ICdib29sZWFuJyAmJlxuICAgIHR5cGVvZiBzdHJlYW0uX3JlbW92ZWRDb25uZWN0aW9uID09PSAnYm9vbGVhbicgJiZcbiAgICB0eXBlb2Ygc3RyZWFtLl9yZW1vdmVkQ29udExlbiA9PT0gJ2Jvb2xlYW4nXG4gIClcbn1cbmZ1bmN0aW9uIGlzU2VydmVyUmVzcG9uc2Uoc3RyZWFtKSB7XG4gIHJldHVybiB0eXBlb2Ygc3RyZWFtLl9zZW50MTAwID09PSAnYm9vbGVhbicgJiYgaXNPdXRnb2luZ01lc3NhZ2Uoc3RyZWFtKVxufVxuZnVuY3Rpb24gaXNTZXJ2ZXJSZXF1ZXN0KHN0cmVhbSkge1xuICB2YXIgX3N0cmVhbSRyZXFcbiAgcmV0dXJuIChcbiAgICB0eXBlb2Ygc3RyZWFtLl9jb25zdW1pbmcgPT09ICdib29sZWFuJyAmJlxuICAgIHR5cGVvZiBzdHJlYW0uX2R1bXBlZCA9PT0gJ2Jvb2xlYW4nICYmXG4gICAgKChfc3RyZWFtJHJlcSA9IHN0cmVhbS5yZXEpID09PSBudWxsIHx8IF9zdHJlYW0kcmVxID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBfc3RyZWFtJHJlcS51cGdyYWRlT3JDb25uZWN0KSA9PT1cbiAgICAgIHVuZGVmaW5lZFxuICApXG59XG5mdW5jdGlvbiB3aWxsRW1pdENsb3NlKHN0cmVhbSkge1xuICBpZiAoIWlzTm9kZVN0cmVhbShzdHJlYW0pKSByZXR1cm4gbnVsbFxuICBjb25zdCB3U3RhdGUgPSBzdHJlYW0uX3dyaXRhYmxlU3RhdGVcbiAgY29uc3QgclN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlXG4gIGNvbnN0IHN0YXRlID0gd1N0YXRlIHx8IHJTdGF0ZVxuICByZXR1cm4gKFxuICAgICghc3RhdGUgJiYgaXNTZXJ2ZXJSZXNwb25zZShzdHJlYW0pKSB8fCAhIShzdGF0ZSAmJiBzdGF0ZS5hdXRvRGVzdHJveSAmJiBzdGF0ZS5lbWl0Q2xvc2UgJiYgc3RhdGUuY2xvc2VkID09PSBmYWxzZSlcbiAgKVxufVxuZnVuY3Rpb24gaXNEaXN0dXJiZWQoc3RyZWFtKSB7XG4gIHZhciBfc3RyZWFtJGtJc0Rpc3R1cmJlZFxuICByZXR1cm4gISEoXG4gICAgc3RyZWFtICYmXG4gICAgKChfc3RyZWFtJGtJc0Rpc3R1cmJlZCA9IHN0cmVhbVtrSXNEaXN0dXJiZWRdKSAhPT0gbnVsbCAmJiBfc3RyZWFtJGtJc0Rpc3R1cmJlZCAhPT0gdW5kZWZpbmVkXG4gICAgICA/IF9zdHJlYW0ka0lzRGlzdHVyYmVkXG4gICAgICA6IHN0cmVhbS5yZWFkYWJsZURpZFJlYWQgfHwgc3RyZWFtLnJlYWRhYmxlQWJvcnRlZClcbiAgKVxufVxuZnVuY3Rpb24gaXNFcnJvcmVkKHN0cmVhbSkge1xuICB2YXIgX3JlZixcbiAgICBfcmVmMixcbiAgICBfcmVmMyxcbiAgICBfcmVmNCxcbiAgICBfcmVmNSxcbiAgICBfc3RyZWFtJGtJc0Vycm9yZWQsXG4gICAgX3N0cmVhbSRfcmVhZGFibGVTdGF0MyxcbiAgICBfc3RyZWFtJF93cml0YWJsZVN0YXQzLFxuICAgIF9zdHJlYW0kX3JlYWRhYmxlU3RhdDQsXG4gICAgX3N0cmVhbSRfd3JpdGFibGVTdGF0NFxuICByZXR1cm4gISEoXG4gICAgc3RyZWFtICYmXG4gICAgKChfcmVmID1cbiAgICAgIChfcmVmMiA9XG4gICAgICAgIChfcmVmMyA9XG4gICAgICAgICAgKF9yZWY0ID1cbiAgICAgICAgICAgIChfcmVmNSA9XG4gICAgICAgICAgICAgIChfc3RyZWFtJGtJc0Vycm9yZWQgPSBzdHJlYW1ba0lzRXJyb3JlZF0pICE9PSBudWxsICYmIF9zdHJlYW0ka0lzRXJyb3JlZCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyBfc3RyZWFtJGtJc0Vycm9yZWRcbiAgICAgICAgICAgICAgICA6IHN0cmVhbS5yZWFkYWJsZUVycm9yZWQpICE9PSBudWxsICYmIF9yZWY1ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgPyBfcmVmNVxuICAgICAgICAgICAgICA6IHN0cmVhbS53cml0YWJsZUVycm9yZWQpICE9PSBudWxsICYmIF9yZWY0ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gX3JlZjRcbiAgICAgICAgICAgIDogKF9zdHJlYW0kX3JlYWRhYmxlU3RhdDMgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGUpID09PSBudWxsIHx8IF9zdHJlYW0kX3JlYWRhYmxlU3RhdDMgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgICAgIDogX3N0cmVhbSRfcmVhZGFibGVTdGF0My5lcnJvckVtaXR0ZWQpICE9PSBudWxsICYmIF9yZWYzICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IF9yZWYzXG4gICAgICAgICAgOiAoX3N0cmVhbSRfd3JpdGFibGVTdGF0MyA9IHN0cmVhbS5fd3JpdGFibGVTdGF0ZSkgPT09IG51bGwgfHwgX3N0cmVhbSRfd3JpdGFibGVTdGF0MyA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgICA6IF9zdHJlYW0kX3dyaXRhYmxlU3RhdDMuZXJyb3JFbWl0dGVkKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gX3JlZjJcbiAgICAgICAgOiAoX3N0cmVhbSRfcmVhZGFibGVTdGF0NCA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZSkgPT09IG51bGwgfHwgX3N0cmVhbSRfcmVhZGFibGVTdGF0NCA9PT0gdW5kZWZpbmVkXG4gICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgIDogX3N0cmVhbSRfcmVhZGFibGVTdGF0NC5lcnJvcmVkKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB1bmRlZmluZWRcbiAgICAgID8gX3JlZlxuICAgICAgOiAoX3N0cmVhbSRfd3JpdGFibGVTdGF0NCA9IHN0cmVhbS5fd3JpdGFibGVTdGF0ZSkgPT09IG51bGwgfHwgX3N0cmVhbSRfd3JpdGFibGVTdGF0NCA9PT0gdW5kZWZpbmVkXG4gICAgICA/IHVuZGVmaW5lZFxuICAgICAgOiBfc3RyZWFtJF93cml0YWJsZVN0YXQ0LmVycm9yZWQpXG4gIClcbn1cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc0Rlc3Ryb3llZCxcbiAga0lzRGVzdHJveWVkLFxuICBpc0Rpc3R1cmJlZCxcbiAga0lzRGlzdHVyYmVkLFxuICBpc0Vycm9yZWQsXG4gIGtJc0Vycm9yZWQsXG4gIGlzUmVhZGFibGUsXG4gIGtJc1JlYWRhYmxlLFxuICBrSXNDbG9zZWRQcm9taXNlLFxuICBrQ29udHJvbGxlckVycm9yRnVuY3Rpb24sXG4gIGtJc1dyaXRhYmxlLFxuICBpc0Nsb3NlZCxcbiAgaXNEdXBsZXhOb2RlU3RyZWFtLFxuICBpc0ZpbmlzaGVkLFxuICBpc0l0ZXJhYmxlLFxuICBpc1JlYWRhYmxlTm9kZVN0cmVhbSxcbiAgaXNSZWFkYWJsZVN0cmVhbSxcbiAgaXNSZWFkYWJsZUVuZGVkLFxuICBpc1JlYWRhYmxlRmluaXNoZWQsXG4gIGlzUmVhZGFibGVFcnJvcmVkLFxuICBpc05vZGVTdHJlYW0sXG4gIGlzV2ViU3RyZWFtLFxuICBpc1dyaXRhYmxlLFxuICBpc1dyaXRhYmxlTm9kZVN0cmVhbSxcbiAgaXNXcml0YWJsZVN0cmVhbSxcbiAgaXNXcml0YWJsZUVuZGVkLFxuICBpc1dyaXRhYmxlRmluaXNoZWQsXG4gIGlzV3JpdGFibGVFcnJvcmVkLFxuICBpc1NlcnZlclJlcXVlc3QsXG4gIGlzU2VydmVyUmVzcG9uc2UsXG4gIHdpbGxFbWl0Q2xvc2UsXG4gIGlzVHJhbnNmb3JtU3RyZWFtXG59XG4iLAogICAgIi8qIHJlcGxhY2VtZW50IHN0YXJ0ICovXG5cbmNvbnN0IHByb2Nlc3MgPSByZXF1aXJlKCdwcm9jZXNzLycpXG5cbi8qIHJlcGxhY2VtZW50IGVuZCAqL1xuLy8gUG9ydGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL21hZmludG9zaC9lbmQtb2Ytc3RyZWFtIHdpdGhcbi8vIHBlcm1pc3Npb24gZnJvbSB0aGUgYXV0aG9yLCBNYXRoaWFzIEJ1dXMgKEBtYWZpbnRvc2gpLlxuXG47KCd1c2Ugc3RyaWN0JylcbmNvbnN0IHsgQWJvcnRFcnJvciwgY29kZXMgfSA9IHJlcXVpcmUoJy4uLy4uL291cnMvZXJyb3JzJylcbmNvbnN0IHsgRVJSX0lOVkFMSURfQVJHX1RZUEUsIEVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFIH0gPSBjb2Rlc1xuY29uc3QgeyBrRW1wdHlPYmplY3QsIG9uY2UgfSA9IHJlcXVpcmUoJy4uLy4uL291cnMvdXRpbCcpXG5jb25zdCB7IHZhbGlkYXRlQWJvcnRTaWduYWwsIHZhbGlkYXRlRnVuY3Rpb24sIHZhbGlkYXRlT2JqZWN0LCB2YWxpZGF0ZUJvb2xlYW4gfSA9IHJlcXVpcmUoJy4uL3ZhbGlkYXRvcnMnKVxuY29uc3QgeyBQcm9taXNlLCBQcm9taXNlUHJvdG90eXBlVGhlbiwgU3ltYm9sRGlzcG9zZSB9ID0gcmVxdWlyZSgnLi4vLi4vb3Vycy9wcmltb3JkaWFscycpXG5jb25zdCB7XG4gIGlzQ2xvc2VkLFxuICBpc1JlYWRhYmxlLFxuICBpc1JlYWRhYmxlTm9kZVN0cmVhbSxcbiAgaXNSZWFkYWJsZVN0cmVhbSxcbiAgaXNSZWFkYWJsZUZpbmlzaGVkLFxuICBpc1JlYWRhYmxlRXJyb3JlZCxcbiAgaXNXcml0YWJsZSxcbiAgaXNXcml0YWJsZU5vZGVTdHJlYW0sXG4gIGlzV3JpdGFibGVTdHJlYW0sXG4gIGlzV3JpdGFibGVGaW5pc2hlZCxcbiAgaXNXcml0YWJsZUVycm9yZWQsXG4gIGlzTm9kZVN0cmVhbSxcbiAgd2lsbEVtaXRDbG9zZTogX3dpbGxFbWl0Q2xvc2UsXG4gIGtJc0Nsb3NlZFByb21pc2Vcbn0gPSByZXF1aXJlKCcuL3V0aWxzJylcbmxldCBhZGRBYm9ydExpc3RlbmVyXG5mdW5jdGlvbiBpc1JlcXVlc3Qoc3RyZWFtKSB7XG4gIHJldHVybiBzdHJlYW0uc2V0SGVhZGVyICYmIHR5cGVvZiBzdHJlYW0uYWJvcnQgPT09ICdmdW5jdGlvbidcbn1cbmNvbnN0IG5vcCA9ICgpID0+IHt9XG5mdW5jdGlvbiBlb3Moc3RyZWFtLCBvcHRpb25zLCBjYWxsYmFjaykge1xuICB2YXIgX29wdGlvbnMkcmVhZGFibGUsIF9vcHRpb25zJHdyaXRhYmxlXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgY2FsbGJhY2sgPSBvcHRpb25zXG4gICAgb3B0aW9ucyA9IGtFbXB0eU9iamVjdFxuICB9IGVsc2UgaWYgKG9wdGlvbnMgPT0gbnVsbCkge1xuICAgIG9wdGlvbnMgPSBrRW1wdHlPYmplY3RcbiAgfSBlbHNlIHtcbiAgICB2YWxpZGF0ZU9iamVjdChvcHRpb25zLCAnb3B0aW9ucycpXG4gIH1cbiAgdmFsaWRhdGVGdW5jdGlvbihjYWxsYmFjaywgJ2NhbGxiYWNrJylcbiAgdmFsaWRhdGVBYm9ydFNpZ25hbChvcHRpb25zLnNpZ25hbCwgJ29wdGlvbnMuc2lnbmFsJylcbiAgY2FsbGJhY2sgPSBvbmNlKGNhbGxiYWNrKVxuICBpZiAoaXNSZWFkYWJsZVN0cmVhbShzdHJlYW0pIHx8IGlzV3JpdGFibGVTdHJlYW0oc3RyZWFtKSkge1xuICAgIHJldHVybiBlb3NXZWIoc3RyZWFtLCBvcHRpb25zLCBjYWxsYmFjaylcbiAgfVxuICBpZiAoIWlzTm9kZVN0cmVhbShzdHJlYW0pKSB7XG4gICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKCdzdHJlYW0nLCBbJ1JlYWRhYmxlU3RyZWFtJywgJ1dyaXRhYmxlU3RyZWFtJywgJ1N0cmVhbSddLCBzdHJlYW0pXG4gIH1cbiAgY29uc3QgcmVhZGFibGUgPVxuICAgIChfb3B0aW9ucyRyZWFkYWJsZSA9IG9wdGlvbnMucmVhZGFibGUpICE9PSBudWxsICYmIF9vcHRpb25zJHJlYWRhYmxlICE9PSB1bmRlZmluZWRcbiAgICAgID8gX29wdGlvbnMkcmVhZGFibGVcbiAgICAgIDogaXNSZWFkYWJsZU5vZGVTdHJlYW0oc3RyZWFtKVxuICBjb25zdCB3cml0YWJsZSA9XG4gICAgKF9vcHRpb25zJHdyaXRhYmxlID0gb3B0aW9ucy53cml0YWJsZSkgIT09IG51bGwgJiYgX29wdGlvbnMkd3JpdGFibGUgIT09IHVuZGVmaW5lZFxuICAgICAgPyBfb3B0aW9ucyR3cml0YWJsZVxuICAgICAgOiBpc1dyaXRhYmxlTm9kZVN0cmVhbShzdHJlYW0pXG4gIGNvbnN0IHdTdGF0ZSA9IHN0cmVhbS5fd3JpdGFibGVTdGF0ZVxuICBjb25zdCByU3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGVcbiAgY29uc3Qgb25sZWdhY3lmaW5pc2ggPSAoKSA9PiB7XG4gICAgaWYgKCFzdHJlYW0ud3JpdGFibGUpIHtcbiAgICAgIG9uZmluaXNoKClcbiAgICB9XG4gIH1cblxuICAvLyBUT0RPIChyb25hZyk6IEltcHJvdmUgc29mdCBkZXRlY3Rpb24gdG8gaW5jbHVkZSBjb3JlIG1vZHVsZXMgYW5kXG4gIC8vIGNvbW1vbiBlY29zeXN0ZW0gbW9kdWxlcyB0aGF0IGRvIHByb3Blcmx5IGVtaXQgJ2Nsb3NlJyBidXQgZmFpbFxuICAvLyB0aGlzIGdlbmVyaWMgY2hlY2suXG4gIGxldCB3aWxsRW1pdENsb3NlID1cbiAgICBfd2lsbEVtaXRDbG9zZShzdHJlYW0pICYmIGlzUmVhZGFibGVOb2RlU3RyZWFtKHN0cmVhbSkgPT09IHJlYWRhYmxlICYmIGlzV3JpdGFibGVOb2RlU3RyZWFtKHN0cmVhbSkgPT09IHdyaXRhYmxlXG4gIGxldCB3cml0YWJsZUZpbmlzaGVkID0gaXNXcml0YWJsZUZpbmlzaGVkKHN0cmVhbSwgZmFsc2UpXG4gIGNvbnN0IG9uZmluaXNoID0gKCkgPT4ge1xuICAgIHdyaXRhYmxlRmluaXNoZWQgPSB0cnVlXG4gICAgLy8gU3RyZWFtIHNob3VsZCBub3QgYmUgZGVzdHJveWVkIGhlcmUuIElmIGl0IGlzIHRoYXRcbiAgICAvLyBtZWFucyB0aGF0IHVzZXIgc3BhY2UgaXMgZG9pbmcgc29tZXRoaW5nIGRpZmZlcmVudGx5IGFuZFxuICAgIC8vIHdlIGNhbm5vdCB0cnVzdCB3aWxsRW1pdENsb3NlLlxuICAgIGlmIChzdHJlYW0uZGVzdHJveWVkKSB7XG4gICAgICB3aWxsRW1pdENsb3NlID0gZmFsc2VcbiAgICB9XG4gICAgaWYgKHdpbGxFbWl0Q2xvc2UgJiYgKCFzdHJlYW0ucmVhZGFibGUgfHwgcmVhZGFibGUpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKCFyZWFkYWJsZSB8fCByZWFkYWJsZUZpbmlzaGVkKSB7XG4gICAgICBjYWxsYmFjay5jYWxsKHN0cmVhbSlcbiAgICB9XG4gIH1cbiAgbGV0IHJlYWRhYmxlRmluaXNoZWQgPSBpc1JlYWRhYmxlRmluaXNoZWQoc3RyZWFtLCBmYWxzZSlcbiAgY29uc3Qgb25lbmQgPSAoKSA9PiB7XG4gICAgcmVhZGFibGVGaW5pc2hlZCA9IHRydWVcbiAgICAvLyBTdHJlYW0gc2hvdWxkIG5vdCBiZSBkZXN0cm95ZWQgaGVyZS4gSWYgaXQgaXMgdGhhdFxuICAgIC8vIG1lYW5zIHRoYXQgdXNlciBzcGFjZSBpcyBkb2luZyBzb21ldGhpbmcgZGlmZmVyZW50bHkgYW5kXG4gICAgLy8gd2UgY2Fubm90IHRydXN0IHdpbGxFbWl0Q2xvc2UuXG4gICAgaWYgKHN0cmVhbS5kZXN0cm95ZWQpIHtcbiAgICAgIHdpbGxFbWl0Q2xvc2UgPSBmYWxzZVxuICAgIH1cbiAgICBpZiAod2lsbEVtaXRDbG9zZSAmJiAoIXN0cmVhbS53cml0YWJsZSB8fCB3cml0YWJsZSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoIXdyaXRhYmxlIHx8IHdyaXRhYmxlRmluaXNoZWQpIHtcbiAgICAgIGNhbGxiYWNrLmNhbGwoc3RyZWFtKVxuICAgIH1cbiAgfVxuICBjb25zdCBvbmVycm9yID0gKGVycikgPT4ge1xuICAgIGNhbGxiYWNrLmNhbGwoc3RyZWFtLCBlcnIpXG4gIH1cbiAgbGV0IGNsb3NlZCA9IGlzQ2xvc2VkKHN0cmVhbSlcbiAgY29uc3Qgb25jbG9zZSA9ICgpID0+IHtcbiAgICBjbG9zZWQgPSB0cnVlXG4gICAgY29uc3QgZXJyb3JlZCA9IGlzV3JpdGFibGVFcnJvcmVkKHN0cmVhbSkgfHwgaXNSZWFkYWJsZUVycm9yZWQoc3RyZWFtKVxuICAgIGlmIChlcnJvcmVkICYmIHR5cGVvZiBlcnJvcmVkICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjay5jYWxsKHN0cmVhbSwgZXJyb3JlZClcbiAgICB9XG4gICAgaWYgKHJlYWRhYmxlICYmICFyZWFkYWJsZUZpbmlzaGVkICYmIGlzUmVhZGFibGVOb2RlU3RyZWFtKHN0cmVhbSwgdHJ1ZSkpIHtcbiAgICAgIGlmICghaXNSZWFkYWJsZUZpbmlzaGVkKHN0cmVhbSwgZmFsc2UpKSByZXR1cm4gY2FsbGJhY2suY2FsbChzdHJlYW0sIG5ldyBFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRSgpKVxuICAgIH1cbiAgICBpZiAod3JpdGFibGUgJiYgIXdyaXRhYmxlRmluaXNoZWQpIHtcbiAgICAgIGlmICghaXNXcml0YWJsZUZpbmlzaGVkKHN0cmVhbSwgZmFsc2UpKSByZXR1cm4gY2FsbGJhY2suY2FsbChzdHJlYW0sIG5ldyBFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRSgpKVxuICAgIH1cbiAgICBjYWxsYmFjay5jYWxsKHN0cmVhbSlcbiAgfVxuICBjb25zdCBvbmNsb3NlZCA9ICgpID0+IHtcbiAgICBjbG9zZWQgPSB0cnVlXG4gICAgY29uc3QgZXJyb3JlZCA9IGlzV3JpdGFibGVFcnJvcmVkKHN0cmVhbSkgfHwgaXNSZWFkYWJsZUVycm9yZWQoc3RyZWFtKVxuICAgIGlmIChlcnJvcmVkICYmIHR5cGVvZiBlcnJvcmVkICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjay5jYWxsKHN0cmVhbSwgZXJyb3JlZClcbiAgICB9XG4gICAgY2FsbGJhY2suY2FsbChzdHJlYW0pXG4gIH1cbiAgY29uc3Qgb25yZXF1ZXN0ID0gKCkgPT4ge1xuICAgIHN0cmVhbS5yZXEub24oJ2ZpbmlzaCcsIG9uZmluaXNoKVxuICB9XG4gIGlmIChpc1JlcXVlc3Qoc3RyZWFtKSkge1xuICAgIHN0cmVhbS5vbignY29tcGxldGUnLCBvbmZpbmlzaClcbiAgICBpZiAoIXdpbGxFbWl0Q2xvc2UpIHtcbiAgICAgIHN0cmVhbS5vbignYWJvcnQnLCBvbmNsb3NlKVxuICAgIH1cbiAgICBpZiAoc3RyZWFtLnJlcSkge1xuICAgICAgb25yZXF1ZXN0KClcbiAgICB9IGVsc2Uge1xuICAgICAgc3RyZWFtLm9uKCdyZXF1ZXN0Jywgb25yZXF1ZXN0KVxuICAgIH1cbiAgfSBlbHNlIGlmICh3cml0YWJsZSAmJiAhd1N0YXRlKSB7XG4gICAgLy8gbGVnYWN5IHN0cmVhbXNcbiAgICBzdHJlYW0ub24oJ2VuZCcsIG9ubGVnYWN5ZmluaXNoKVxuICAgIHN0cmVhbS5vbignY2xvc2UnLCBvbmxlZ2FjeWZpbmlzaClcbiAgfVxuXG4gIC8vIE5vdCBhbGwgc3RyZWFtcyB3aWxsIGVtaXQgJ2Nsb3NlJyBhZnRlciAnYWJvcnRlZCcuXG4gIGlmICghd2lsbEVtaXRDbG9zZSAmJiB0eXBlb2Ygc3RyZWFtLmFib3J0ZWQgPT09ICdib29sZWFuJykge1xuICAgIHN0cmVhbS5vbignYWJvcnRlZCcsIG9uY2xvc2UpXG4gIH1cbiAgc3RyZWFtLm9uKCdlbmQnLCBvbmVuZClcbiAgc3RyZWFtLm9uKCdmaW5pc2gnLCBvbmZpbmlzaClcbiAgaWYgKG9wdGlvbnMuZXJyb3IgIT09IGZhbHNlKSB7XG4gICAgc3RyZWFtLm9uKCdlcnJvcicsIG9uZXJyb3IpXG4gIH1cbiAgc3RyZWFtLm9uKCdjbG9zZScsIG9uY2xvc2UpXG4gIGlmIChjbG9zZWQpIHtcbiAgICBwcm9jZXNzLm5leHRUaWNrKG9uY2xvc2UpXG4gIH0gZWxzZSBpZiAoXG4gICAgKHdTdGF0ZSAhPT0gbnVsbCAmJiB3U3RhdGUgIT09IHVuZGVmaW5lZCAmJiB3U3RhdGUuZXJyb3JFbWl0dGVkKSB8fFxuICAgIChyU3RhdGUgIT09IG51bGwgJiYgclN0YXRlICE9PSB1bmRlZmluZWQgJiYgclN0YXRlLmVycm9yRW1pdHRlZClcbiAgKSB7XG4gICAgaWYgKCF3aWxsRW1pdENsb3NlKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKG9uY2xvc2VkKVxuICAgIH1cbiAgfSBlbHNlIGlmIChcbiAgICAhcmVhZGFibGUgJiZcbiAgICAoIXdpbGxFbWl0Q2xvc2UgfHwgaXNSZWFkYWJsZShzdHJlYW0pKSAmJlxuICAgICh3cml0YWJsZUZpbmlzaGVkIHx8IGlzV3JpdGFibGUoc3RyZWFtKSA9PT0gZmFsc2UpXG4gICkge1xuICAgIHByb2Nlc3MubmV4dFRpY2sob25jbG9zZWQpXG4gIH0gZWxzZSBpZiAoXG4gICAgIXdyaXRhYmxlICYmXG4gICAgKCF3aWxsRW1pdENsb3NlIHx8IGlzV3JpdGFibGUoc3RyZWFtKSkgJiZcbiAgICAocmVhZGFibGVGaW5pc2hlZCB8fCBpc1JlYWRhYmxlKHN0cmVhbSkgPT09IGZhbHNlKVxuICApIHtcbiAgICBwcm9jZXNzLm5leHRUaWNrKG9uY2xvc2VkKVxuICB9IGVsc2UgaWYgKHJTdGF0ZSAmJiBzdHJlYW0ucmVxICYmIHN0cmVhbS5hYm9ydGVkKSB7XG4gICAgcHJvY2Vzcy5uZXh0VGljayhvbmNsb3NlZClcbiAgfVxuICBjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xuICAgIGNhbGxiYWNrID0gbm9wXG4gICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdhYm9ydGVkJywgb25jbG9zZSlcbiAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoJ2NvbXBsZXRlJywgb25maW5pc2gpXG4gICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdhYm9ydCcsIG9uY2xvc2UpXG4gICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdyZXF1ZXN0Jywgb25yZXF1ZXN0KVxuICAgIGlmIChzdHJlYW0ucmVxKSBzdHJlYW0ucmVxLnJlbW92ZUxpc3RlbmVyKCdmaW5pc2gnLCBvbmZpbmlzaClcbiAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIG9ubGVnYWN5ZmluaXNoKVxuICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBvbmxlZ2FjeWZpbmlzaClcbiAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoJ2ZpbmlzaCcsIG9uZmluaXNoKVxuICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25lbmQpXG4gICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uZXJyb3IpXG4gICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uY2xvc2UpXG4gIH1cbiAgaWYgKG9wdGlvbnMuc2lnbmFsICYmICFjbG9zZWQpIHtcbiAgICBjb25zdCBhYm9ydCA9ICgpID0+IHtcbiAgICAgIC8vIEtlZXAgaXQgYmVjYXVzZSBjbGVhbnVwIHJlbW92ZXMgaXQuXG4gICAgICBjb25zdCBlbmRDYWxsYmFjayA9IGNhbGxiYWNrXG4gICAgICBjbGVhbnVwKClcbiAgICAgIGVuZENhbGxiYWNrLmNhbGwoXG4gICAgICAgIHN0cmVhbSxcbiAgICAgICAgbmV3IEFib3J0RXJyb3IodW5kZWZpbmVkLCB7XG4gICAgICAgICAgY2F1c2U6IG9wdGlvbnMuc2lnbmFsLnJlYXNvblxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH1cbiAgICBpZiAob3B0aW9ucy5zaWduYWwuYWJvcnRlZCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhhYm9ydClcbiAgICB9IGVsc2Uge1xuICAgICAgYWRkQWJvcnRMaXN0ZW5lciA9IGFkZEFib3J0TGlzdGVuZXIgfHwgcmVxdWlyZSgnLi4vLi4vb3Vycy91dGlsJykuYWRkQWJvcnRMaXN0ZW5lclxuICAgICAgY29uc3QgZGlzcG9zYWJsZSA9IGFkZEFib3J0TGlzdGVuZXIob3B0aW9ucy5zaWduYWwsIGFib3J0KVxuICAgICAgY29uc3Qgb3JpZ2luYWxDYWxsYmFjayA9IGNhbGxiYWNrXG4gICAgICBjYWxsYmFjayA9IG9uY2UoKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgZGlzcG9zYWJsZVtTeW1ib2xEaXNwb3NlXSgpXG4gICAgICAgIG9yaWdpbmFsQ2FsbGJhY2suYXBwbHkoc3RyZWFtLCBhcmdzKVxuICAgICAgfSlcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNsZWFudXBcbn1cbmZ1bmN0aW9uIGVvc1dlYihzdHJlYW0sIG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gIGxldCBpc0Fib3J0ZWQgPSBmYWxzZVxuICBsZXQgYWJvcnQgPSBub3BcbiAgaWYgKG9wdGlvbnMuc2lnbmFsKSB7XG4gICAgYWJvcnQgPSAoKSA9PiB7XG4gICAgICBpc0Fib3J0ZWQgPSB0cnVlXG4gICAgICBjYWxsYmFjay5jYWxsKFxuICAgICAgICBzdHJlYW0sXG4gICAgICAgIG5ldyBBYm9ydEVycm9yKHVuZGVmaW5lZCwge1xuICAgICAgICAgIGNhdXNlOiBvcHRpb25zLnNpZ25hbC5yZWFzb25cbiAgICAgICAgfSlcbiAgICAgIClcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soYWJvcnQpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFkZEFib3J0TGlzdGVuZXIgPSBhZGRBYm9ydExpc3RlbmVyIHx8IHJlcXVpcmUoJy4uLy4uL291cnMvdXRpbCcpLmFkZEFib3J0TGlzdGVuZXJcbiAgICAgIGNvbnN0IGRpc3Bvc2FibGUgPSBhZGRBYm9ydExpc3RlbmVyKG9wdGlvbnMuc2lnbmFsLCBhYm9ydClcbiAgICAgIGNvbnN0IG9yaWdpbmFsQ2FsbGJhY2sgPSBjYWxsYmFja1xuICAgICAgY2FsbGJhY2sgPSBvbmNlKCguLi5hcmdzKSA9PiB7XG4gICAgICAgIGRpc3Bvc2FibGVbU3ltYm9sRGlzcG9zZV0oKVxuICAgICAgICBvcmlnaW5hbENhbGxiYWNrLmFwcGx5KHN0cmVhbSwgYXJncylcbiAgICAgIH0pXG4gICAgfVxuICB9XG4gIGNvbnN0IHJlc29sdmVyRm4gPSAoLi4uYXJncykgPT4ge1xuICAgIGlmICghaXNBYm9ydGVkKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IGNhbGxiYWNrLmFwcGx5KHN0cmVhbSwgYXJncykpXG4gICAgfVxuICB9XG4gIFByb21pc2VQcm90b3R5cGVUaGVuKHN0cmVhbVtrSXNDbG9zZWRQcm9taXNlXS5wcm9taXNlLCByZXNvbHZlckZuLCByZXNvbHZlckZuKVxuICByZXR1cm4gbm9wXG59XG5mdW5jdGlvbiBmaW5pc2hlZChzdHJlYW0sIG9wdHMpIHtcbiAgdmFyIF9vcHRzXG4gIGxldCBhdXRvQ2xlYW51cCA9IGZhbHNlXG4gIGlmIChvcHRzID09PSBudWxsKSB7XG4gICAgb3B0cyA9IGtFbXB0eU9iamVjdFxuICB9XG4gIGlmICgoX29wdHMgPSBvcHRzKSAhPT0gbnVsbCAmJiBfb3B0cyAhPT0gdW5kZWZpbmVkICYmIF9vcHRzLmNsZWFudXApIHtcbiAgICB2YWxpZGF0ZUJvb2xlYW4ob3B0cy5jbGVhbnVwLCAnY2xlYW51cCcpXG4gICAgYXV0b0NsZWFudXAgPSBvcHRzLmNsZWFudXBcbiAgfVxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IGNsZWFudXAgPSBlb3Moc3RyZWFtLCBvcHRzLCAoZXJyKSA9PiB7XG4gICAgICBpZiAoYXV0b0NsZWFudXApIHtcbiAgICAgICAgY2xlYW51cCgpXG4gICAgICB9XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHJlamVjdChlcnIpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNvbHZlKClcbiAgICAgIH1cbiAgICB9KVxuICB9KVxufVxubW9kdWxlLmV4cG9ydHMgPSBlb3Ncbm1vZHVsZS5leHBvcnRzLmZpbmlzaGVkID0gZmluaXNoZWRcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbi8qIHJlcGxhY2VtZW50IHN0YXJ0ICovXG5cbmNvbnN0IHByb2Nlc3MgPSByZXF1aXJlKCdwcm9jZXNzLycpXG5cbi8qIHJlcGxhY2VtZW50IGVuZCAqL1xuXG5jb25zdCB7XG4gIGFnZ3JlZ2F0ZVR3b0Vycm9ycyxcbiAgY29kZXM6IHsgRVJSX01VTFRJUExFX0NBTExCQUNLIH0sXG4gIEFib3J0RXJyb3Jcbn0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL2Vycm9ycycpXG5jb25zdCB7IFN5bWJvbCB9ID0gcmVxdWlyZSgnLi4vLi4vb3Vycy9wcmltb3JkaWFscycpXG5jb25zdCB7IGtJc0Rlc3Ryb3llZCwgaXNEZXN0cm95ZWQsIGlzRmluaXNoZWQsIGlzU2VydmVyUmVxdWVzdCB9ID0gcmVxdWlyZSgnLi91dGlscycpXG5jb25zdCBrRGVzdHJveSA9IFN5bWJvbCgna0Rlc3Ryb3knKVxuY29uc3Qga0NvbnN0cnVjdCA9IFN5bWJvbCgna0NvbnN0cnVjdCcpXG5mdW5jdGlvbiBjaGVja0Vycm9yKGVyciwgdywgcikge1xuICBpZiAoZXJyKSB7XG4gICAgLy8gQXZvaWQgVjggbGVhaywgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvMzQxMDMjaXNzdWVjb21tZW50LTY1MjAwMjM2NFxuICAgIGVyci5zdGFjayAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC1leHByZXNzaW9uc1xuXG4gICAgaWYgKHcgJiYgIXcuZXJyb3JlZCkge1xuICAgICAgdy5lcnJvcmVkID0gZXJyXG4gICAgfVxuICAgIGlmIChyICYmICFyLmVycm9yZWQpIHtcbiAgICAgIHIuZXJyb3JlZCA9IGVyclxuICAgIH1cbiAgfVxufVxuXG4vLyBCYWNrd2FyZHMgY29tcGF0LiBjYigpIGlzIHVuZG9jdW1lbnRlZCBhbmQgdW51c2VkIGluIGNvcmUgYnV0XG4vLyB1bmZvcnR1bmF0ZWx5IG1pZ2h0IGJlIHVzZWQgYnkgbW9kdWxlcy5cbmZ1bmN0aW9uIGRlc3Ryb3koZXJyLCBjYikge1xuICBjb25zdCByID0gdGhpcy5fcmVhZGFibGVTdGF0ZVxuICBjb25zdCB3ID0gdGhpcy5fd3JpdGFibGVTdGF0ZVxuICAvLyBXaXRoIGR1cGxleCBzdHJlYW1zIHdlIHVzZSB0aGUgd3JpdGFibGUgc2lkZSBmb3Igc3RhdGUuXG4gIGNvbnN0IHMgPSB3IHx8IHJcbiAgaWYgKCh3ICE9PSBudWxsICYmIHcgIT09IHVuZGVmaW5lZCAmJiB3LmRlc3Ryb3llZCkgfHwgKHIgIT09IG51bGwgJiYgciAhPT0gdW5kZWZpbmVkICYmIHIuZGVzdHJveWVkKSkge1xuICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNiKClcbiAgICB9XG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8vIFdlIHNldCBkZXN0cm95ZWQgdG8gdHJ1ZSBiZWZvcmUgZmlyaW5nIGVycm9yIGNhbGxiYWNrcyBpbiBvcmRlclxuICAvLyB0byBtYWtlIGl0IHJlLWVudHJhbmNlIHNhZmUgaW4gY2FzZSBkZXN0cm95KCkgaXMgY2FsbGVkIHdpdGhpbiBjYWxsYmFja3NcbiAgY2hlY2tFcnJvcihlcnIsIHcsIHIpXG4gIGlmICh3KSB7XG4gICAgdy5kZXN0cm95ZWQgPSB0cnVlXG4gIH1cbiAgaWYgKHIpIHtcbiAgICByLmRlc3Ryb3llZCA9IHRydWVcbiAgfVxuXG4gIC8vIElmIHN0aWxsIGNvbnN0cnVjdGluZyB0aGVuIGRlZmVyIGNhbGxpbmcgX2Rlc3Ryb3kuXG4gIGlmICghcy5jb25zdHJ1Y3RlZCkge1xuICAgIHRoaXMub25jZShrRGVzdHJveSwgZnVuY3Rpb24gKGVyKSB7XG4gICAgICBfZGVzdHJveSh0aGlzLCBhZ2dyZWdhdGVUd29FcnJvcnMoZXIsIGVyciksIGNiKVxuICAgIH0pXG4gIH0gZWxzZSB7XG4gICAgX2Rlc3Ryb3kodGhpcywgZXJyLCBjYilcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuZnVuY3Rpb24gX2Rlc3Ryb3koc2VsZiwgZXJyLCBjYikge1xuICBsZXQgY2FsbGVkID0gZmFsc2VcbiAgZnVuY3Rpb24gb25EZXN0cm95KGVycikge1xuICAgIGlmIChjYWxsZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjYWxsZWQgPSB0cnVlXG4gICAgY29uc3QgciA9IHNlbGYuX3JlYWRhYmxlU3RhdGVcbiAgICBjb25zdCB3ID0gc2VsZi5fd3JpdGFibGVTdGF0ZVxuICAgIGNoZWNrRXJyb3IoZXJyLCB3LCByKVxuICAgIGlmICh3KSB7XG4gICAgICB3LmNsb3NlZCA9IHRydWVcbiAgICB9XG4gICAgaWYgKHIpIHtcbiAgICAgIHIuY2xvc2VkID0gdHJ1ZVxuICAgIH1cbiAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjYihlcnIpXG4gICAgfVxuICAgIGlmIChlcnIpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZW1pdEVycm9yQ2xvc2VOVCwgc2VsZiwgZXJyKVxuICAgIH0gZWxzZSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGVtaXRDbG9zZU5ULCBzZWxmKVxuICAgIH1cbiAgfVxuICB0cnkge1xuICAgIHNlbGYuX2Rlc3Ryb3koZXJyIHx8IG51bGwsIG9uRGVzdHJveSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgb25EZXN0cm95KGVycilcbiAgfVxufVxuZnVuY3Rpb24gZW1pdEVycm9yQ2xvc2VOVChzZWxmLCBlcnIpIHtcbiAgZW1pdEVycm9yTlQoc2VsZiwgZXJyKVxuICBlbWl0Q2xvc2VOVChzZWxmKVxufVxuZnVuY3Rpb24gZW1pdENsb3NlTlQoc2VsZikge1xuICBjb25zdCByID0gc2VsZi5fcmVhZGFibGVTdGF0ZVxuICBjb25zdCB3ID0gc2VsZi5fd3JpdGFibGVTdGF0ZVxuICBpZiAodykge1xuICAgIHcuY2xvc2VFbWl0dGVkID0gdHJ1ZVxuICB9XG4gIGlmIChyKSB7XG4gICAgci5jbG9zZUVtaXR0ZWQgPSB0cnVlXG4gIH1cbiAgaWYgKCh3ICE9PSBudWxsICYmIHcgIT09IHVuZGVmaW5lZCAmJiB3LmVtaXRDbG9zZSkgfHwgKHIgIT09IG51bGwgJiYgciAhPT0gdW5kZWZpbmVkICYmIHIuZW1pdENsb3NlKSkge1xuICAgIHNlbGYuZW1pdCgnY2xvc2UnKVxuICB9XG59XG5mdW5jdGlvbiBlbWl0RXJyb3JOVChzZWxmLCBlcnIpIHtcbiAgY29uc3QgciA9IHNlbGYuX3JlYWRhYmxlU3RhdGVcbiAgY29uc3QgdyA9IHNlbGYuX3dyaXRhYmxlU3RhdGVcbiAgaWYgKCh3ICE9PSBudWxsICYmIHcgIT09IHVuZGVmaW5lZCAmJiB3LmVycm9yRW1pdHRlZCkgfHwgKHIgIT09IG51bGwgJiYgciAhPT0gdW5kZWZpbmVkICYmIHIuZXJyb3JFbWl0dGVkKSkge1xuICAgIHJldHVyblxuICB9XG4gIGlmICh3KSB7XG4gICAgdy5lcnJvckVtaXR0ZWQgPSB0cnVlXG4gIH1cbiAgaWYgKHIpIHtcbiAgICByLmVycm9yRW1pdHRlZCA9IHRydWVcbiAgfVxuICBzZWxmLmVtaXQoJ2Vycm9yJywgZXJyKVxufVxuZnVuY3Rpb24gdW5kZXN0cm95KCkge1xuICBjb25zdCByID0gdGhpcy5fcmVhZGFibGVTdGF0ZVxuICBjb25zdCB3ID0gdGhpcy5fd3JpdGFibGVTdGF0ZVxuICBpZiAocikge1xuICAgIHIuY29uc3RydWN0ZWQgPSB0cnVlXG4gICAgci5jbG9zZWQgPSBmYWxzZVxuICAgIHIuY2xvc2VFbWl0dGVkID0gZmFsc2VcbiAgICByLmRlc3Ryb3llZCA9IGZhbHNlXG4gICAgci5lcnJvcmVkID0gbnVsbFxuICAgIHIuZXJyb3JFbWl0dGVkID0gZmFsc2VcbiAgICByLnJlYWRpbmcgPSBmYWxzZVxuICAgIHIuZW5kZWQgPSByLnJlYWRhYmxlID09PSBmYWxzZVxuICAgIHIuZW5kRW1pdHRlZCA9IHIucmVhZGFibGUgPT09IGZhbHNlXG4gIH1cbiAgaWYgKHcpIHtcbiAgICB3LmNvbnN0cnVjdGVkID0gdHJ1ZVxuICAgIHcuZGVzdHJveWVkID0gZmFsc2VcbiAgICB3LmNsb3NlZCA9IGZhbHNlXG4gICAgdy5jbG9zZUVtaXR0ZWQgPSBmYWxzZVxuICAgIHcuZXJyb3JlZCA9IG51bGxcbiAgICB3LmVycm9yRW1pdHRlZCA9IGZhbHNlXG4gICAgdy5maW5hbENhbGxlZCA9IGZhbHNlXG4gICAgdy5wcmVmaW5pc2hlZCA9IGZhbHNlXG4gICAgdy5lbmRlZCA9IHcud3JpdGFibGUgPT09IGZhbHNlXG4gICAgdy5lbmRpbmcgPSB3LndyaXRhYmxlID09PSBmYWxzZVxuICAgIHcuZmluaXNoZWQgPSB3LndyaXRhYmxlID09PSBmYWxzZVxuICB9XG59XG5mdW5jdGlvbiBlcnJvck9yRGVzdHJveShzdHJlYW0sIGVyciwgc3luYykge1xuICAvLyBXZSBoYXZlIHRlc3RzIHRoYXQgcmVseSBvbiBlcnJvcnMgYmVpbmcgZW1pdHRlZFxuICAvLyBpbiB0aGUgc2FtZSB0aWNrLCBzbyBjaGFuZ2luZyB0aGlzIGlzIHNlbXZlciBtYWpvci5cbiAgLy8gRm9yIG5vdyB3aGVuIHlvdSBvcHQtaW4gdG8gYXV0b0Rlc3Ryb3kgd2UgYWxsb3dcbiAgLy8gdGhlIGVycm9yIHRvIGJlIGVtaXR0ZWQgbmV4dFRpY2suIEluIGEgZnV0dXJlXG4gIC8vIHNlbXZlciBtYWpvciB1cGRhdGUgd2Ugc2hvdWxkIGNoYW5nZSB0aGUgZGVmYXVsdCB0byB0aGlzLlxuXG4gIGNvbnN0IHIgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGVcbiAgY29uc3QgdyA9IHN0cmVhbS5fd3JpdGFibGVTdGF0ZVxuICBpZiAoKHcgIT09IG51bGwgJiYgdyAhPT0gdW5kZWZpbmVkICYmIHcuZGVzdHJveWVkKSB8fCAociAhPT0gbnVsbCAmJiByICE9PSB1bmRlZmluZWQgJiYgci5kZXN0cm95ZWQpKSB7XG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuICBpZiAoKHIgIT09IG51bGwgJiYgciAhPT0gdW5kZWZpbmVkICYmIHIuYXV0b0Rlc3Ryb3kpIHx8ICh3ICE9PSBudWxsICYmIHcgIT09IHVuZGVmaW5lZCAmJiB3LmF1dG9EZXN0cm95KSlcbiAgICBzdHJlYW0uZGVzdHJveShlcnIpXG4gIGVsc2UgaWYgKGVycikge1xuICAgIC8vIEF2b2lkIFY4IGxlYWssIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9wdWxsLzM0MTAzI2lzc3VlY29tbWVudC02NTIwMDIzNjRcbiAgICBlcnIuc3RhY2sgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcblxuICAgIGlmICh3ICYmICF3LmVycm9yZWQpIHtcbiAgICAgIHcuZXJyb3JlZCA9IGVyclxuICAgIH1cbiAgICBpZiAociAmJiAhci5lcnJvcmVkKSB7XG4gICAgICByLmVycm9yZWQgPSBlcnJcbiAgICB9XG4gICAgaWYgKHN5bmMpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZW1pdEVycm9yTlQsIHN0cmVhbSwgZXJyKVxuICAgIH0gZWxzZSB7XG4gICAgICBlbWl0RXJyb3JOVChzdHJlYW0sIGVycilcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGNvbnN0cnVjdChzdHJlYW0sIGNiKSB7XG4gIGlmICh0eXBlb2Ygc3RyZWFtLl9jb25zdHJ1Y3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm5cbiAgfVxuICBjb25zdCByID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlXG4gIGNvbnN0IHcgPSBzdHJlYW0uX3dyaXRhYmxlU3RhdGVcbiAgaWYgKHIpIHtcbiAgICByLmNvbnN0cnVjdGVkID0gZmFsc2VcbiAgfVxuICBpZiAodykge1xuICAgIHcuY29uc3RydWN0ZWQgPSBmYWxzZVxuICB9XG4gIHN0cmVhbS5vbmNlKGtDb25zdHJ1Y3QsIGNiKVxuICBpZiAoc3RyZWFtLmxpc3RlbmVyQ291bnQoa0NvbnN0cnVjdCkgPiAxKSB7XG4gICAgLy8gRHVwbGV4XG4gICAgcmV0dXJuXG4gIH1cbiAgcHJvY2Vzcy5uZXh0VGljayhjb25zdHJ1Y3ROVCwgc3RyZWFtKVxufVxuZnVuY3Rpb24gY29uc3RydWN0TlQoc3RyZWFtKSB7XG4gIGxldCBjYWxsZWQgPSBmYWxzZVxuICBmdW5jdGlvbiBvbkNvbnN0cnVjdChlcnIpIHtcbiAgICBpZiAoY2FsbGVkKSB7XG4gICAgICBlcnJvck9yRGVzdHJveShzdHJlYW0sIGVyciAhPT0gbnVsbCAmJiBlcnIgIT09IHVuZGVmaW5lZCA/IGVyciA6IG5ldyBFUlJfTVVMVElQTEVfQ0FMTEJBQ0soKSlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjYWxsZWQgPSB0cnVlXG4gICAgY29uc3QgciA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZVxuICAgIGNvbnN0IHcgPSBzdHJlYW0uX3dyaXRhYmxlU3RhdGVcbiAgICBjb25zdCBzID0gdyB8fCByXG4gICAgaWYgKHIpIHtcbiAgICAgIHIuY29uc3RydWN0ZWQgPSB0cnVlXG4gICAgfVxuICAgIGlmICh3KSB7XG4gICAgICB3LmNvbnN0cnVjdGVkID0gdHJ1ZVxuICAgIH1cbiAgICBpZiAocy5kZXN0cm95ZWQpIHtcbiAgICAgIHN0cmVhbS5lbWl0KGtEZXN0cm95LCBlcnIpXG4gICAgfSBlbHNlIGlmIChlcnIpIHtcbiAgICAgIGVycm9yT3JEZXN0cm95KHN0cmVhbSwgZXJyLCB0cnVlKVxuICAgIH0gZWxzZSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGVtaXRDb25zdHJ1Y3ROVCwgc3RyZWFtKVxuICAgIH1cbiAgfVxuICB0cnkge1xuICAgIHN0cmVhbS5fY29uc3RydWN0KChlcnIpID0+IHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2sob25Db25zdHJ1Y3QsIGVycilcbiAgICB9KVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBwcm9jZXNzLm5leHRUaWNrKG9uQ29uc3RydWN0LCBlcnIpXG4gIH1cbn1cbmZ1bmN0aW9uIGVtaXRDb25zdHJ1Y3ROVChzdHJlYW0pIHtcbiAgc3RyZWFtLmVtaXQoa0NvbnN0cnVjdClcbn1cbmZ1bmN0aW9uIGlzUmVxdWVzdChzdHJlYW0pIHtcbiAgcmV0dXJuIChzdHJlYW0gPT09IG51bGwgfHwgc3RyZWFtID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBzdHJlYW0uc2V0SGVhZGVyKSAmJiB0eXBlb2Ygc3RyZWFtLmFib3J0ID09PSAnZnVuY3Rpb24nXG59XG5mdW5jdGlvbiBlbWl0Q2xvc2VMZWdhY3koc3RyZWFtKSB7XG4gIHN0cmVhbS5lbWl0KCdjbG9zZScpXG59XG5mdW5jdGlvbiBlbWl0RXJyb3JDbG9zZUxlZ2FjeShzdHJlYW0sIGVycikge1xuICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcnIpXG4gIHByb2Nlc3MubmV4dFRpY2soZW1pdENsb3NlTGVnYWN5LCBzdHJlYW0pXG59XG5cbi8vIE5vcm1hbGl6ZSBkZXN0cm95IGZvciBsZWdhY3kuXG5mdW5jdGlvbiBkZXN0cm95ZXIoc3RyZWFtLCBlcnIpIHtcbiAgaWYgKCFzdHJlYW0gfHwgaXNEZXN0cm95ZWQoc3RyZWFtKSkge1xuICAgIHJldHVyblxuICB9XG4gIGlmICghZXJyICYmICFpc0ZpbmlzaGVkKHN0cmVhbSkpIHtcbiAgICBlcnIgPSBuZXcgQWJvcnRFcnJvcigpXG4gIH1cblxuICAvLyBUT0RPOiBSZW1vdmUgaXNSZXF1ZXN0IGJyYW5jaGVzLlxuICBpZiAoaXNTZXJ2ZXJSZXF1ZXN0KHN0cmVhbSkpIHtcbiAgICBzdHJlYW0uc29ja2V0ID0gbnVsbFxuICAgIHN0cmVhbS5kZXN0cm95KGVycilcbiAgfSBlbHNlIGlmIChpc1JlcXVlc3Qoc3RyZWFtKSkge1xuICAgIHN0cmVhbS5hYm9ydCgpXG4gIH0gZWxzZSBpZiAoaXNSZXF1ZXN0KHN0cmVhbS5yZXEpKSB7XG4gICAgc3RyZWFtLnJlcS5hYm9ydCgpXG4gIH0gZWxzZSBpZiAodHlwZW9mIHN0cmVhbS5kZXN0cm95ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgc3RyZWFtLmRlc3Ryb3koZXJyKVxuICB9IGVsc2UgaWYgKHR5cGVvZiBzdHJlYW0uY2xvc2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBUT0RPOiBEb24ndCBsb3NlIGVycj9cbiAgICBzdHJlYW0uY2xvc2UoKVxuICB9IGVsc2UgaWYgKGVycikge1xuICAgIHByb2Nlc3MubmV4dFRpY2soZW1pdEVycm9yQ2xvc2VMZWdhY3ksIHN0cmVhbSwgZXJyKVxuICB9IGVsc2Uge1xuICAgIHByb2Nlc3MubmV4dFRpY2soZW1pdENsb3NlTGVnYWN5LCBzdHJlYW0pXG4gIH1cbiAgaWYgKCFzdHJlYW0uZGVzdHJveWVkKSB7XG4gICAgc3RyZWFtW2tJc0Rlc3Ryb3llZF0gPSB0cnVlXG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0ge1xuICBjb25zdHJ1Y3QsXG4gIGRlc3Ryb3llcixcbiAgZGVzdHJveSxcbiAgdW5kZXN0cm95LFxuICBlcnJvck9yRGVzdHJveVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBBcnJheUlzQXJyYXksIE9iamVjdFNldFByb3RvdHlwZU9mIH0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL3ByaW1vcmRpYWxzJylcbmNvbnN0IHsgRXZlbnRFbWl0dGVyOiBFRSB9ID0gcmVxdWlyZSgnZXZlbnRzJylcbmZ1bmN0aW9uIFN0cmVhbShvcHRzKSB7XG4gIEVFLmNhbGwodGhpcywgb3B0cylcbn1cbk9iamVjdFNldFByb3RvdHlwZU9mKFN0cmVhbS5wcm90b3R5cGUsIEVFLnByb3RvdHlwZSlcbk9iamVjdFNldFByb3RvdHlwZU9mKFN0cmVhbSwgRUUpXG5TdHJlYW0ucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbiAoZGVzdCwgb3B0aW9ucykge1xuICBjb25zdCBzb3VyY2UgPSB0aGlzXG4gIGZ1bmN0aW9uIG9uZGF0YShjaHVuaykge1xuICAgIGlmIChkZXN0LndyaXRhYmxlICYmIGRlc3Qud3JpdGUoY2h1bmspID09PSBmYWxzZSAmJiBzb3VyY2UucGF1c2UpIHtcbiAgICAgIHNvdXJjZS5wYXVzZSgpXG4gICAgfVxuICB9XG4gIHNvdXJjZS5vbignZGF0YScsIG9uZGF0YSlcbiAgZnVuY3Rpb24gb25kcmFpbigpIHtcbiAgICBpZiAoc291cmNlLnJlYWRhYmxlICYmIHNvdXJjZS5yZXN1bWUpIHtcbiAgICAgIHNvdXJjZS5yZXN1bWUoKVxuICAgIH1cbiAgfVxuICBkZXN0Lm9uKCdkcmFpbicsIG9uZHJhaW4pXG5cbiAgLy8gSWYgdGhlICdlbmQnIG9wdGlvbiBpcyBub3Qgc3VwcGxpZWQsIGRlc3QuZW5kKCkgd2lsbCBiZSBjYWxsZWQgd2hlblxuICAvLyBzb3VyY2UgZ2V0cyB0aGUgJ2VuZCcgb3IgJ2Nsb3NlJyBldmVudHMuICBPbmx5IGRlc3QuZW5kKCkgb25jZS5cbiAgaWYgKCFkZXN0Ll9pc1N0ZGlvICYmICghb3B0aW9ucyB8fCBvcHRpb25zLmVuZCAhPT0gZmFsc2UpKSB7XG4gICAgc291cmNlLm9uKCdlbmQnLCBvbmVuZClcbiAgICBzb3VyY2Uub24oJ2Nsb3NlJywgb25jbG9zZSlcbiAgfVxuICBsZXQgZGlkT25FbmQgPSBmYWxzZVxuICBmdW5jdGlvbiBvbmVuZCgpIHtcbiAgICBpZiAoZGlkT25FbmQpIHJldHVyblxuICAgIGRpZE9uRW5kID0gdHJ1ZVxuICAgIGRlc3QuZW5kKClcbiAgfVxuICBmdW5jdGlvbiBvbmNsb3NlKCkge1xuICAgIGlmIChkaWRPbkVuZCkgcmV0dXJuXG4gICAgZGlkT25FbmQgPSB0cnVlXG4gICAgaWYgKHR5cGVvZiBkZXN0LmRlc3Ryb3kgPT09ICdmdW5jdGlvbicpIGRlc3QuZGVzdHJveSgpXG4gIH1cblxuICAvLyBEb24ndCBsZWF2ZSBkYW5nbGluZyBwaXBlcyB3aGVuIHRoZXJlIGFyZSBlcnJvcnMuXG4gIGZ1bmN0aW9uIG9uZXJyb3IoZXIpIHtcbiAgICBjbGVhbnVwKClcbiAgICBpZiAoRUUubGlzdGVuZXJDb3VudCh0aGlzLCAnZXJyb3InKSA9PT0gMCkge1xuICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIGVyKVxuICAgIH1cbiAgfVxuICBwcmVwZW5kTGlzdGVuZXIoc291cmNlLCAnZXJyb3InLCBvbmVycm9yKVxuICBwcmVwZW5kTGlzdGVuZXIoZGVzdCwgJ2Vycm9yJywgb25lcnJvcilcblxuICAvLyBSZW1vdmUgYWxsIHRoZSBldmVudCBsaXN0ZW5lcnMgdGhhdCB3ZXJlIGFkZGVkLlxuICBmdW5jdGlvbiBjbGVhbnVwKCkge1xuICAgIHNvdXJjZS5yZW1vdmVMaXN0ZW5lcignZGF0YScsIG9uZGF0YSlcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdkcmFpbicsIG9uZHJhaW4pXG4gICAgc291cmNlLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBvbmVuZClcbiAgICBzb3VyY2UucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgb25jbG9zZSlcbiAgICBzb3VyY2UucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgb25lcnJvcilcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uZXJyb3IpXG4gICAgc291cmNlLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBjbGVhbnVwKVxuICAgIHNvdXJjZS5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBjbGVhbnVwKVxuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgY2xlYW51cClcbiAgfVxuICBzb3VyY2Uub24oJ2VuZCcsIGNsZWFudXApXG4gIHNvdXJjZS5vbignY2xvc2UnLCBjbGVhbnVwKVxuICBkZXN0Lm9uKCdjbG9zZScsIGNsZWFudXApXG4gIGRlc3QuZW1pdCgncGlwZScsIHNvdXJjZSlcblxuICAvLyBBbGxvdyBmb3IgdW5peC1saWtlIHVzYWdlOiBBLnBpcGUoQikucGlwZShDKVxuICByZXR1cm4gZGVzdFxufVxuZnVuY3Rpb24gcHJlcGVuZExpc3RlbmVyKGVtaXR0ZXIsIGV2ZW50LCBmbikge1xuICAvLyBTYWRseSB0aGlzIGlzIG5vdCBjYWNoZWFibGUgYXMgc29tZSBsaWJyYXJpZXMgYnVuZGxlIHRoZWlyIG93blxuICAvLyBldmVudCBlbWl0dGVyIGltcGxlbWVudGF0aW9uIHdpdGggdGhlbS5cbiAgaWYgKHR5cGVvZiBlbWl0dGVyLnByZXBlbmRMaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIGVtaXR0ZXIucHJlcGVuZExpc3RlbmVyKGV2ZW50LCBmbilcblxuICAvLyBUaGlzIGlzIGEgaGFjayB0byBtYWtlIHN1cmUgdGhhdCBvdXIgZXJyb3IgaGFuZGxlciBpcyBhdHRhY2hlZCBiZWZvcmUgYW55XG4gIC8vIHVzZXJsYW5kIG9uZXMuICBORVZFUiBETyBUSElTLiBUaGlzIGlzIGhlcmUgb25seSBiZWNhdXNlIHRoaXMgY29kZSBuZWVkc1xuICAvLyB0byBjb250aW51ZSB0byB3b3JrIHdpdGggb2xkZXIgdmVyc2lvbnMgb2YgTm9kZS5qcyB0aGF0IGRvIG5vdCBpbmNsdWRlXG4gIC8vIHRoZSBwcmVwZW5kTGlzdGVuZXIoKSBtZXRob2QuIFRoZSBnb2FsIGlzIHRvIGV2ZW50dWFsbHkgcmVtb3ZlIHRoaXMgaGFjay5cbiAgaWYgKCFlbWl0dGVyLl9ldmVudHMgfHwgIWVtaXR0ZXIuX2V2ZW50c1tldmVudF0pIGVtaXR0ZXIub24oZXZlbnQsIGZuKVxuICBlbHNlIGlmIChBcnJheUlzQXJyYXkoZW1pdHRlci5fZXZlbnRzW2V2ZW50XSkpIGVtaXR0ZXIuX2V2ZW50c1tldmVudF0udW5zaGlmdChmbilcbiAgZWxzZSBlbWl0dGVyLl9ldmVudHNbZXZlbnRdID0gW2ZuLCBlbWl0dGVyLl9ldmVudHNbZXZlbnRdXVxufVxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFN0cmVhbSxcbiAgcHJlcGVuZExpc3RlbmVyXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IFN5bWJvbERpc3Bvc2UgfSA9IHJlcXVpcmUoJy4uLy4uL291cnMvcHJpbW9yZGlhbHMnKVxuY29uc3QgeyBBYm9ydEVycm9yLCBjb2RlcyB9ID0gcmVxdWlyZSgnLi4vLi4vb3Vycy9lcnJvcnMnKVxuY29uc3QgeyBpc05vZGVTdHJlYW0sIGlzV2ViU3RyZWFtLCBrQ29udHJvbGxlckVycm9yRnVuY3Rpb24gfSA9IHJlcXVpcmUoJy4vdXRpbHMnKVxuY29uc3QgZW9zID0gcmVxdWlyZSgnLi9lbmQtb2Ytc3RyZWFtJylcbmNvbnN0IHsgRVJSX0lOVkFMSURfQVJHX1RZUEUgfSA9IGNvZGVzXG5sZXQgYWRkQWJvcnRMaXN0ZW5lclxuXG4vLyBUaGlzIG1ldGhvZCBpcyBpbmxpbmVkIGhlcmUgZm9yIHJlYWRhYmxlLXN0cmVhbVxuLy8gSXQgYWxzbyBkb2VzIG5vdCBhbGxvdyBmb3Igc2lnbmFsIHRvIG5vdCBleGlzdCBvbiB0aGUgc3RyZWFtXG4vLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvcHVsbC8zNjA2MSNkaXNjdXNzaW9uX3I1MzM3MTgwMjlcbmNvbnN0IHZhbGlkYXRlQWJvcnRTaWduYWwgPSAoc2lnbmFsLCBuYW1lKSA9PiB7XG4gIGlmICh0eXBlb2Ygc2lnbmFsICE9PSAnb2JqZWN0JyB8fCAhKCdhYm9ydGVkJyBpbiBzaWduYWwpKSB7XG4gICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKG5hbWUsICdBYm9ydFNpZ25hbCcsIHNpZ25hbClcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMuYWRkQWJvcnRTaWduYWwgPSBmdW5jdGlvbiBhZGRBYm9ydFNpZ25hbChzaWduYWwsIHN0cmVhbSkge1xuICB2YWxpZGF0ZUFib3J0U2lnbmFsKHNpZ25hbCwgJ3NpZ25hbCcpXG4gIGlmICghaXNOb2RlU3RyZWFtKHN0cmVhbSkgJiYgIWlzV2ViU3RyZWFtKHN0cmVhbSkpIHtcbiAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoJ3N0cmVhbScsIFsnUmVhZGFibGVTdHJlYW0nLCAnV3JpdGFibGVTdHJlYW0nLCAnU3RyZWFtJ10sIHN0cmVhbSlcbiAgfVxuICByZXR1cm4gbW9kdWxlLmV4cG9ydHMuYWRkQWJvcnRTaWduYWxOb1ZhbGlkYXRlKHNpZ25hbCwgc3RyZWFtKVxufVxubW9kdWxlLmV4cG9ydHMuYWRkQWJvcnRTaWduYWxOb1ZhbGlkYXRlID0gZnVuY3Rpb24gKHNpZ25hbCwgc3RyZWFtKSB7XG4gIGlmICh0eXBlb2Ygc2lnbmFsICE9PSAnb2JqZWN0JyB8fCAhKCdhYm9ydGVkJyBpbiBzaWduYWwpKSB7XG4gICAgcmV0dXJuIHN0cmVhbVxuICB9XG4gIGNvbnN0IG9uQWJvcnQgPSBpc05vZGVTdHJlYW0oc3RyZWFtKVxuICAgID8gKCkgPT4ge1xuICAgICAgICBzdHJlYW0uZGVzdHJveShcbiAgICAgICAgICBuZXcgQWJvcnRFcnJvcih1bmRlZmluZWQsIHtcbiAgICAgICAgICAgIGNhdXNlOiBzaWduYWwucmVhc29uXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgfVxuICAgIDogKCkgPT4ge1xuICAgICAgICBzdHJlYW1ba0NvbnRyb2xsZXJFcnJvckZ1bmN0aW9uXShcbiAgICAgICAgICBuZXcgQWJvcnRFcnJvcih1bmRlZmluZWQsIHtcbiAgICAgICAgICAgIGNhdXNlOiBzaWduYWwucmVhc29uXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgfVxuICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcbiAgICBvbkFib3J0KClcbiAgfSBlbHNlIHtcbiAgICBhZGRBYm9ydExpc3RlbmVyID0gYWRkQWJvcnRMaXN0ZW5lciB8fCByZXF1aXJlKCcuLi8uLi9vdXJzL3V0aWwnKS5hZGRBYm9ydExpc3RlbmVyXG4gICAgY29uc3QgZGlzcG9zYWJsZSA9IGFkZEFib3J0TGlzdGVuZXIoc2lnbmFsLCBvbkFib3J0KVxuICAgIGVvcyhzdHJlYW0sIGRpc3Bvc2FibGVbU3ltYm9sRGlzcG9zZV0pXG4gIH1cbiAgcmV0dXJuIHN0cmVhbVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBTdHJpbmdQcm90b3R5cGVTbGljZSwgU3ltYm9sSXRlcmF0b3IsIFR5cGVkQXJyYXlQcm90b3R5cGVTZXQsIFVpbnQ4QXJyYXkgfSA9IHJlcXVpcmUoJy4uLy4uL291cnMvcHJpbW9yZGlhbHMnKVxuY29uc3QgeyBCdWZmZXIgfSA9IHJlcXVpcmUoJ2J1ZmZlcicpXG5jb25zdCB7IGluc3BlY3QgfSA9IHJlcXVpcmUoJy4uLy4uL291cnMvdXRpbCcpXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIEJ1ZmZlckxpc3Qge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmhlYWQgPSBudWxsXG4gICAgdGhpcy50YWlsID0gbnVsbFxuICAgIHRoaXMubGVuZ3RoID0gMFxuICB9XG4gIHB1c2godikge1xuICAgIGNvbnN0IGVudHJ5ID0ge1xuICAgICAgZGF0YTogdixcbiAgICAgIG5leHQ6IG51bGxcbiAgICB9XG4gICAgaWYgKHRoaXMubGVuZ3RoID4gMCkgdGhpcy50YWlsLm5leHQgPSBlbnRyeVxuICAgIGVsc2UgdGhpcy5oZWFkID0gZW50cnlcbiAgICB0aGlzLnRhaWwgPSBlbnRyeVxuICAgICsrdGhpcy5sZW5ndGhcbiAgfVxuICB1bnNoaWZ0KHYpIHtcbiAgICBjb25zdCBlbnRyeSA9IHtcbiAgICAgIGRhdGE6IHYsXG4gICAgICBuZXh0OiB0aGlzLmhlYWRcbiAgICB9XG4gICAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSB0aGlzLnRhaWwgPSBlbnRyeVxuICAgIHRoaXMuaGVhZCA9IGVudHJ5XG4gICAgKyt0aGlzLmxlbmd0aFxuICB9XG4gIHNoaWZ0KCkge1xuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuXG4gICAgY29uc3QgcmV0ID0gdGhpcy5oZWFkLmRhdGFcbiAgICBpZiAodGhpcy5sZW5ndGggPT09IDEpIHRoaXMuaGVhZCA9IHRoaXMudGFpbCA9IG51bGxcbiAgICBlbHNlIHRoaXMuaGVhZCA9IHRoaXMuaGVhZC5uZXh0XG4gICAgLS10aGlzLmxlbmd0aFxuICAgIHJldHVybiByZXRcbiAgfVxuICBjbGVhcigpIHtcbiAgICB0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBudWxsXG4gICAgdGhpcy5sZW5ndGggPSAwXG4gIH1cbiAgam9pbihzKSB7XG4gICAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSByZXR1cm4gJydcbiAgICBsZXQgcCA9IHRoaXMuaGVhZFxuICAgIGxldCByZXQgPSAnJyArIHAuZGF0YVxuICAgIHdoaWxlICgocCA9IHAubmV4dCkgIT09IG51bGwpIHJldCArPSBzICsgcC5kYXRhXG4gICAgcmV0dXJuIHJldFxuICB9XG4gIGNvbmNhdChuKSB7XG4gICAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSByZXR1cm4gQnVmZmVyLmFsbG9jKDApXG4gICAgY29uc3QgcmV0ID0gQnVmZmVyLmFsbG9jVW5zYWZlKG4gPj4+IDApXG4gICAgbGV0IHAgPSB0aGlzLmhlYWRcbiAgICBsZXQgaSA9IDBcbiAgICB3aGlsZSAocCkge1xuICAgICAgVHlwZWRBcnJheVByb3RvdHlwZVNldChyZXQsIHAuZGF0YSwgaSlcbiAgICAgIGkgKz0gcC5kYXRhLmxlbmd0aFxuICAgICAgcCA9IHAubmV4dFxuICAgIH1cbiAgICByZXR1cm4gcmV0XG4gIH1cblxuICAvLyBDb25zdW1lcyBhIHNwZWNpZmllZCBhbW91bnQgb2YgYnl0ZXMgb3IgY2hhcmFjdGVycyBmcm9tIHRoZSBidWZmZXJlZCBkYXRhLlxuICBjb25zdW1lKG4sIGhhc1N0cmluZ3MpIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5oZWFkLmRhdGFcbiAgICBpZiAobiA8IGRhdGEubGVuZ3RoKSB7XG4gICAgICAvLyBgc2xpY2VgIGlzIHRoZSBzYW1lIGZvciBidWZmZXJzIGFuZCBzdHJpbmdzLlxuICAgICAgY29uc3Qgc2xpY2UgPSBkYXRhLnNsaWNlKDAsIG4pXG4gICAgICB0aGlzLmhlYWQuZGF0YSA9IGRhdGEuc2xpY2UobilcbiAgICAgIHJldHVybiBzbGljZVxuICAgIH1cbiAgICBpZiAobiA9PT0gZGF0YS5sZW5ndGgpIHtcbiAgICAgIC8vIEZpcnN0IGNodW5rIGlzIGEgcGVyZmVjdCBtYXRjaC5cbiAgICAgIHJldHVybiB0aGlzLnNoaWZ0KClcbiAgICB9XG4gICAgLy8gUmVzdWx0IHNwYW5zIG1vcmUgdGhhbiBvbmUgYnVmZmVyLlxuICAgIHJldHVybiBoYXNTdHJpbmdzID8gdGhpcy5fZ2V0U3RyaW5nKG4pIDogdGhpcy5fZ2V0QnVmZmVyKG4pXG4gIH1cbiAgZmlyc3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGVhZC5kYXRhXG4gIH1cbiAgKltTeW1ib2xJdGVyYXRvcl0oKSB7XG4gICAgZm9yIChsZXQgcCA9IHRoaXMuaGVhZDsgcDsgcCA9IHAubmV4dCkge1xuICAgICAgeWllbGQgcC5kYXRhXG4gICAgfVxuICB9XG5cbiAgLy8gQ29uc3VtZXMgYSBzcGVjaWZpZWQgYW1vdW50IG9mIGNoYXJhY3RlcnMgZnJvbSB0aGUgYnVmZmVyZWQgZGF0YS5cbiAgX2dldFN0cmluZyhuKSB7XG4gICAgbGV0IHJldCA9ICcnXG4gICAgbGV0IHAgPSB0aGlzLmhlYWRcbiAgICBsZXQgYyA9IDBcbiAgICBkbyB7XG4gICAgICBjb25zdCBzdHIgPSBwLmRhdGFcbiAgICAgIGlmIChuID4gc3RyLmxlbmd0aCkge1xuICAgICAgICByZXQgKz0gc3RyXG4gICAgICAgIG4gLT0gc3RyLmxlbmd0aFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG4gPT09IHN0ci5sZW5ndGgpIHtcbiAgICAgICAgICByZXQgKz0gc3RyXG4gICAgICAgICAgKytjXG4gICAgICAgICAgaWYgKHAubmV4dCkgdGhpcy5oZWFkID0gcC5uZXh0XG4gICAgICAgICAgZWxzZSB0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBudWxsXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0ICs9IFN0cmluZ1Byb3RvdHlwZVNsaWNlKHN0ciwgMCwgbilcbiAgICAgICAgICB0aGlzLmhlYWQgPSBwXG4gICAgICAgICAgcC5kYXRhID0gU3RyaW5nUHJvdG90eXBlU2xpY2Uoc3RyLCBuKVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICArK2NcbiAgICB9IHdoaWxlICgocCA9IHAubmV4dCkgIT09IG51bGwpXG4gICAgdGhpcy5sZW5ndGggLT0gY1xuICAgIHJldHVybiByZXRcbiAgfVxuXG4gIC8vIENvbnN1bWVzIGEgc3BlY2lmaWVkIGFtb3VudCBvZiBieXRlcyBmcm9tIHRoZSBidWZmZXJlZCBkYXRhLlxuICBfZ2V0QnVmZmVyKG4pIHtcbiAgICBjb25zdCByZXQgPSBCdWZmZXIuYWxsb2NVbnNhZmUobilcbiAgICBjb25zdCByZXRMZW4gPSBuXG4gICAgbGV0IHAgPSB0aGlzLmhlYWRcbiAgICBsZXQgYyA9IDBcbiAgICBkbyB7XG4gICAgICBjb25zdCBidWYgPSBwLmRhdGFcbiAgICAgIGlmIChuID4gYnVmLmxlbmd0aCkge1xuICAgICAgICBUeXBlZEFycmF5UHJvdG90eXBlU2V0KHJldCwgYnVmLCByZXRMZW4gLSBuKVxuICAgICAgICBuIC09IGJ1Zi5sZW5ndGhcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChuID09PSBidWYubGVuZ3RoKSB7XG4gICAgICAgICAgVHlwZWRBcnJheVByb3RvdHlwZVNldChyZXQsIGJ1ZiwgcmV0TGVuIC0gbilcbiAgICAgICAgICArK2NcbiAgICAgICAgICBpZiAocC5uZXh0KSB0aGlzLmhlYWQgPSBwLm5leHRcbiAgICAgICAgICBlbHNlIHRoaXMuaGVhZCA9IHRoaXMudGFpbCA9IG51bGxcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBUeXBlZEFycmF5UHJvdG90eXBlU2V0KHJldCwgbmV3IFVpbnQ4QXJyYXkoYnVmLmJ1ZmZlciwgYnVmLmJ5dGVPZmZzZXQsIG4pLCByZXRMZW4gLSBuKVxuICAgICAgICAgIHRoaXMuaGVhZCA9IHBcbiAgICAgICAgICBwLmRhdGEgPSBidWYuc2xpY2UobilcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgKytjXG4gICAgfSB3aGlsZSAoKHAgPSBwLm5leHQpICE9PSBudWxsKVxuICAgIHRoaXMubGVuZ3RoIC09IGNcbiAgICByZXR1cm4gcmV0XG4gIH1cblxuICAvLyBNYWtlIHN1cmUgdGhlIGxpbmtlZCBsaXN0IG9ubHkgc2hvd3MgdGhlIG1pbmltYWwgbmVjZXNzYXJ5IGluZm9ybWF0aW9uLlxuICBbU3ltYm9sLmZvcignbm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20nKV0oXywgb3B0aW9ucykge1xuICAgIHJldHVybiBpbnNwZWN0KHRoaXMsIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAvLyBPbmx5IGluc3BlY3Qgb25lIGxldmVsLlxuICAgICAgZGVwdGg6IDAsXG4gICAgICAvLyBJdCBzaG91bGQgbm90IHJlY3Vyc2UuXG4gICAgICBjdXN0b21JbnNwZWN0OiBmYWxzZVxuICAgIH0pXG4gIH1cbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgTWF0aEZsb29yLCBOdW1iZXJJc0ludGVnZXIgfSA9IHJlcXVpcmUoJy4uLy4uL291cnMvcHJpbW9yZGlhbHMnKVxuY29uc3QgeyB2YWxpZGF0ZUludGVnZXIgfSA9IHJlcXVpcmUoJy4uL3ZhbGlkYXRvcnMnKVxuY29uc3QgeyBFUlJfSU5WQUxJRF9BUkdfVkFMVUUgfSA9IHJlcXVpcmUoJy4uLy4uL291cnMvZXJyb3JzJykuY29kZXNcbmxldCBkZWZhdWx0SGlnaFdhdGVyTWFya0J5dGVzID0gMTYgKiAxMDI0XG5sZXQgZGVmYXVsdEhpZ2hXYXRlck1hcmtPYmplY3RNb2RlID0gMTZcbmZ1bmN0aW9uIGhpZ2hXYXRlck1hcmtGcm9tKG9wdGlvbnMsIGlzRHVwbGV4LCBkdXBsZXhLZXkpIHtcbiAgcmV0dXJuIG9wdGlvbnMuaGlnaFdhdGVyTWFyayAhPSBudWxsID8gb3B0aW9ucy5oaWdoV2F0ZXJNYXJrIDogaXNEdXBsZXggPyBvcHRpb25zW2R1cGxleEtleV0gOiBudWxsXG59XG5mdW5jdGlvbiBnZXREZWZhdWx0SGlnaFdhdGVyTWFyayhvYmplY3RNb2RlKSB7XG4gIHJldHVybiBvYmplY3RNb2RlID8gZGVmYXVsdEhpZ2hXYXRlck1hcmtPYmplY3RNb2RlIDogZGVmYXVsdEhpZ2hXYXRlck1hcmtCeXRlc1xufVxuZnVuY3Rpb24gc2V0RGVmYXVsdEhpZ2hXYXRlck1hcmsob2JqZWN0TW9kZSwgdmFsdWUpIHtcbiAgdmFsaWRhdGVJbnRlZ2VyKHZhbHVlLCAndmFsdWUnLCAwKVxuICBpZiAob2JqZWN0TW9kZSkge1xuICAgIGRlZmF1bHRIaWdoV2F0ZXJNYXJrT2JqZWN0TW9kZSA9IHZhbHVlXG4gIH0gZWxzZSB7XG4gICAgZGVmYXVsdEhpZ2hXYXRlck1hcmtCeXRlcyA9IHZhbHVlXG4gIH1cbn1cbmZ1bmN0aW9uIGdldEhpZ2hXYXRlck1hcmsoc3RhdGUsIG9wdGlvbnMsIGR1cGxleEtleSwgaXNEdXBsZXgpIHtcbiAgY29uc3QgaHdtID0gaGlnaFdhdGVyTWFya0Zyb20ob3B0aW9ucywgaXNEdXBsZXgsIGR1cGxleEtleSlcbiAgaWYgKGh3bSAhPSBudWxsKSB7XG4gICAgaWYgKCFOdW1iZXJJc0ludGVnZXIoaHdtKSB8fCBod20gPCAwKSB7XG4gICAgICBjb25zdCBuYW1lID0gaXNEdXBsZXggPyBgb3B0aW9ucy4ke2R1cGxleEtleX1gIDogJ29wdGlvbnMuaGlnaFdhdGVyTWFyaydcbiAgICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVkFMVUUobmFtZSwgaHdtKVxuICAgIH1cbiAgICByZXR1cm4gTWF0aEZsb29yKGh3bSlcbiAgfVxuXG4gIC8vIERlZmF1bHQgdmFsdWVcbiAgcmV0dXJuIGdldERlZmF1bHRIaWdoV2F0ZXJNYXJrKHN0YXRlLm9iamVjdE1vZGUpXG59XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0SGlnaFdhdGVyTWFyayxcbiAgZ2V0RGVmYXVsdEhpZ2hXYXRlck1hcmssXG4gIHNldERlZmF1bHRIaWdoV2F0ZXJNYXJrXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG4vKiByZXBsYWNlbWVudCBzdGFydCAqL1xuXG5jb25zdCBwcm9jZXNzID0gcmVxdWlyZSgncHJvY2Vzcy8nKVxuXG4vKiByZXBsYWNlbWVudCBlbmQgKi9cblxuY29uc3QgeyBQcm9taXNlUHJvdG90eXBlVGhlbiwgU3ltYm9sQXN5bmNJdGVyYXRvciwgU3ltYm9sSXRlcmF0b3IgfSA9IHJlcXVpcmUoJy4uLy4uL291cnMvcHJpbW9yZGlhbHMnKVxuY29uc3QgeyBCdWZmZXIgfSA9IHJlcXVpcmUoJ2J1ZmZlcicpXG5jb25zdCB7IEVSUl9JTlZBTElEX0FSR19UWVBFLCBFUlJfU1RSRUFNX05VTExfVkFMVUVTIH0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL2Vycm9ycycpLmNvZGVzXG5mdW5jdGlvbiBmcm9tKFJlYWRhYmxlLCBpdGVyYWJsZSwgb3B0cykge1xuICBsZXQgaXRlcmF0b3JcbiAgaWYgKHR5cGVvZiBpdGVyYWJsZSA9PT0gJ3N0cmluZycgfHwgaXRlcmFibGUgaW5zdGFuY2VvZiBCdWZmZXIpIHtcbiAgICByZXR1cm4gbmV3IFJlYWRhYmxlKHtcbiAgICAgIG9iamVjdE1vZGU6IHRydWUsXG4gICAgICAuLi5vcHRzLFxuICAgICAgcmVhZCgpIHtcbiAgICAgICAgdGhpcy5wdXNoKGl0ZXJhYmxlKVxuICAgICAgICB0aGlzLnB1c2gobnVsbClcbiAgICAgIH1cbiAgICB9KVxuICB9XG4gIGxldCBpc0FzeW5jXG4gIGlmIChpdGVyYWJsZSAmJiBpdGVyYWJsZVtTeW1ib2xBc3luY0l0ZXJhdG9yXSkge1xuICAgIGlzQXN5bmMgPSB0cnVlXG4gICAgaXRlcmF0b3IgPSBpdGVyYWJsZVtTeW1ib2xBc3luY0l0ZXJhdG9yXSgpXG4gIH0gZWxzZSBpZiAoaXRlcmFibGUgJiYgaXRlcmFibGVbU3ltYm9sSXRlcmF0b3JdKSB7XG4gICAgaXNBc3luYyA9IGZhbHNlXG4gICAgaXRlcmF0b3IgPSBpdGVyYWJsZVtTeW1ib2xJdGVyYXRvcl0oKVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRSgnaXRlcmFibGUnLCBbJ0l0ZXJhYmxlJ10sIGl0ZXJhYmxlKVxuICB9XG4gIGNvbnN0IHJlYWRhYmxlID0gbmV3IFJlYWRhYmxlKHtcbiAgICBvYmplY3RNb2RlOiB0cnVlLFxuICAgIGhpZ2hXYXRlck1hcms6IDEsXG4gICAgLy8gVE9ETyhyb25hZyk6IFdoYXQgb3B0aW9ucyBzaG91bGQgYmUgYWxsb3dlZD9cbiAgICAuLi5vcHRzXG4gIH0pXG5cbiAgLy8gRmxhZyB0byBwcm90ZWN0IGFnYWluc3QgX3JlYWRcbiAgLy8gYmVpbmcgY2FsbGVkIGJlZm9yZSBsYXN0IGl0ZXJhdGlvbiBjb21wbGV0aW9uLlxuICBsZXQgcmVhZGluZyA9IGZhbHNlXG4gIHJlYWRhYmxlLl9yZWFkID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICghcmVhZGluZykge1xuICAgICAgcmVhZGluZyA9IHRydWVcbiAgICAgIG5leHQoKVxuICAgIH1cbiAgfVxuICByZWFkYWJsZS5fZGVzdHJveSA9IGZ1bmN0aW9uIChlcnJvciwgY2IpIHtcbiAgICBQcm9taXNlUHJvdG90eXBlVGhlbihcbiAgICAgIGNsb3NlKGVycm9yKSxcbiAgICAgICgpID0+IHByb2Nlc3MubmV4dFRpY2soY2IsIGVycm9yKSxcbiAgICAgIC8vIG5leHRUaWNrIGlzIGhlcmUgaW4gY2FzZSBjYiB0aHJvd3NcbiAgICAgIChlKSA9PiBwcm9jZXNzLm5leHRUaWNrKGNiLCBlIHx8IGVycm9yKVxuICAgIClcbiAgfVxuICBhc3luYyBmdW5jdGlvbiBjbG9zZShlcnJvcikge1xuICAgIGNvbnN0IGhhZEVycm9yID0gZXJyb3IgIT09IHVuZGVmaW5lZCAmJiBlcnJvciAhPT0gbnVsbFxuICAgIGNvbnN0IGhhc1Rocm93ID0gdHlwZW9mIGl0ZXJhdG9yLnRocm93ID09PSAnZnVuY3Rpb24nXG4gICAgaWYgKGhhZEVycm9yICYmIGhhc1Rocm93KSB7XG4gICAgICBjb25zdCB7IHZhbHVlLCBkb25lIH0gPSBhd2FpdCBpdGVyYXRvci50aHJvdyhlcnJvcilcbiAgICAgIGF3YWl0IHZhbHVlXG4gICAgICBpZiAoZG9uZSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHR5cGVvZiBpdGVyYXRvci5yZXR1cm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnN0IHsgdmFsdWUgfSA9IGF3YWl0IGl0ZXJhdG9yLnJldHVybigpXG4gICAgICBhd2FpdCB2YWx1ZVxuICAgIH1cbiAgfVxuICBhc3luYyBmdW5jdGlvbiBuZXh0KCkge1xuICAgIGZvciAoOzspIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgdmFsdWUsIGRvbmUgfSA9IGlzQXN5bmMgPyBhd2FpdCBpdGVyYXRvci5uZXh0KCkgOiBpdGVyYXRvci5uZXh0KClcbiAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICByZWFkYWJsZS5wdXNoKG51bGwpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgcmVzID0gdmFsdWUgJiYgdHlwZW9mIHZhbHVlLnRoZW4gPT09ICdmdW5jdGlvbicgPyBhd2FpdCB2YWx1ZSA6IHZhbHVlXG4gICAgICAgICAgaWYgKHJlcyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmVhZGluZyA9IGZhbHNlXG4gICAgICAgICAgICB0aHJvdyBuZXcgRVJSX1NUUkVBTV9OVUxMX1ZBTFVFUygpXG4gICAgICAgICAgfSBlbHNlIGlmIChyZWFkYWJsZS5wdXNoKHJlcykpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlYWRpbmcgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHJlYWRhYmxlLmRlc3Ryb3koZXJyKVxuICAgICAgfVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlYWRhYmxlXG59XG5tb2R1bGUuZXhwb3J0cyA9IGZyb21cbiIsCiAgICAiLyogcmVwbGFjZW1lbnQgc3RhcnQgKi9cblxuY29uc3QgcHJvY2VzcyA9IHJlcXVpcmUoJ3Byb2Nlc3MvJylcblxuLyogcmVwbGFjZW1lbnQgZW5kICovXG4vLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuOygndXNlIHN0cmljdCcpXG5jb25zdCB7XG4gIEFycmF5UHJvdG90eXBlSW5kZXhPZixcbiAgTnVtYmVySXNJbnRlZ2VyLFxuICBOdW1iZXJJc05hTixcbiAgTnVtYmVyUGFyc2VJbnQsXG4gIE9iamVjdERlZmluZVByb3BlcnRpZXMsXG4gIE9iamVjdEtleXMsXG4gIE9iamVjdFNldFByb3RvdHlwZU9mLFxuICBQcm9taXNlLFxuICBTYWZlU2V0LFxuICBTeW1ib2xBc3luY0Rpc3Bvc2UsXG4gIFN5bWJvbEFzeW5jSXRlcmF0b3IsXG4gIFN5bWJvbFxufSA9IHJlcXVpcmUoJy4uLy4uL291cnMvcHJpbW9yZGlhbHMnKVxubW9kdWxlLmV4cG9ydHMgPSBSZWFkYWJsZVxuUmVhZGFibGUuUmVhZGFibGVTdGF0ZSA9IFJlYWRhYmxlU3RhdGVcbmNvbnN0IHsgRXZlbnRFbWl0dGVyOiBFRSB9ID0gcmVxdWlyZSgnZXZlbnRzJylcbmNvbnN0IHsgU3RyZWFtLCBwcmVwZW5kTGlzdGVuZXIgfSA9IHJlcXVpcmUoJy4vbGVnYWN5JylcbmNvbnN0IHsgQnVmZmVyIH0gPSByZXF1aXJlKCdidWZmZXInKVxuY29uc3QgeyBhZGRBYm9ydFNpZ25hbCB9ID0gcmVxdWlyZSgnLi9hZGQtYWJvcnQtc2lnbmFsJylcbmNvbnN0IGVvcyA9IHJlcXVpcmUoJy4vZW5kLW9mLXN0cmVhbScpXG5sZXQgZGVidWcgPSByZXF1aXJlKCcuLi8uLi9vdXJzL3V0aWwnKS5kZWJ1Z2xvZygnc3RyZWFtJywgKGZuKSA9PiB7XG4gIGRlYnVnID0gZm5cbn0pXG5jb25zdCBCdWZmZXJMaXN0ID0gcmVxdWlyZSgnLi9idWZmZXJfbGlzdCcpXG5jb25zdCBkZXN0cm95SW1wbCA9IHJlcXVpcmUoJy4vZGVzdHJveScpXG5jb25zdCB7IGdldEhpZ2hXYXRlck1hcmssIGdldERlZmF1bHRIaWdoV2F0ZXJNYXJrIH0gPSByZXF1aXJlKCcuL3N0YXRlJylcbmNvbnN0IHtcbiAgYWdncmVnYXRlVHdvRXJyb3JzLFxuICBjb2Rlczoge1xuICAgIEVSUl9JTlZBTElEX0FSR19UWVBFLFxuICAgIEVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVELFxuICAgIEVSUl9PVVRfT0ZfUkFOR0UsXG4gICAgRVJSX1NUUkVBTV9QVVNIX0FGVEVSX0VPRixcbiAgICBFUlJfU1RSRUFNX1VOU0hJRlRfQUZURVJfRU5EX0VWRU5UXG4gIH0sXG4gIEFib3J0RXJyb3Jcbn0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL2Vycm9ycycpXG5jb25zdCB7IHZhbGlkYXRlT2JqZWN0IH0gPSByZXF1aXJlKCcuLi92YWxpZGF0b3JzJylcbmNvbnN0IGtQYXVzZWQgPSBTeW1ib2woJ2tQYXVzZWQnKVxuY29uc3QgeyBTdHJpbmdEZWNvZGVyIH0gPSByZXF1aXJlKCdzdHJpbmdfZGVjb2RlcicpXG5jb25zdCBmcm9tID0gcmVxdWlyZSgnLi9mcm9tJylcbk9iamVjdFNldFByb3RvdHlwZU9mKFJlYWRhYmxlLnByb3RvdHlwZSwgU3RyZWFtLnByb3RvdHlwZSlcbk9iamVjdFNldFByb3RvdHlwZU9mKFJlYWRhYmxlLCBTdHJlYW0pXG5jb25zdCBub3AgPSAoKSA9PiB7fVxuY29uc3QgeyBlcnJvck9yRGVzdHJveSB9ID0gZGVzdHJveUltcGxcbmNvbnN0IGtPYmplY3RNb2RlID0gMSA8PCAwXG5jb25zdCBrRW5kZWQgPSAxIDw8IDFcbmNvbnN0IGtFbmRFbWl0dGVkID0gMSA8PCAyXG5jb25zdCBrUmVhZGluZyA9IDEgPDwgM1xuY29uc3Qga0NvbnN0cnVjdGVkID0gMSA8PCA0XG5jb25zdCBrU3luYyA9IDEgPDwgNVxuY29uc3Qga05lZWRSZWFkYWJsZSA9IDEgPDwgNlxuY29uc3Qga0VtaXR0ZWRSZWFkYWJsZSA9IDEgPDwgN1xuY29uc3Qga1JlYWRhYmxlTGlzdGVuaW5nID0gMSA8PCA4XG5jb25zdCBrUmVzdW1lU2NoZWR1bGVkID0gMSA8PCA5XG5jb25zdCBrRXJyb3JFbWl0dGVkID0gMSA8PCAxMFxuY29uc3Qga0VtaXRDbG9zZSA9IDEgPDwgMTFcbmNvbnN0IGtBdXRvRGVzdHJveSA9IDEgPDwgMTJcbmNvbnN0IGtEZXN0cm95ZWQgPSAxIDw8IDEzXG5jb25zdCBrQ2xvc2VkID0gMSA8PCAxNFxuY29uc3Qga0Nsb3NlRW1pdHRlZCA9IDEgPDwgMTVcbmNvbnN0IGtNdWx0aUF3YWl0RHJhaW4gPSAxIDw8IDE2XG5jb25zdCBrUmVhZGluZ01vcmUgPSAxIDw8IDE3XG5jb25zdCBrRGF0YUVtaXR0ZWQgPSAxIDw8IDE4XG5cbi8vIFRPRE8oYmVuamFtaW5ncikgaXQgaXMgbGlrZWx5IHNsb3dlciB0byBkbyBpdCB0aGlzIHdheSB0aGFuIHdpdGggZnJlZSBmdW5jdGlvbnNcbmZ1bmN0aW9uIG1ha2VCaXRNYXBEZXNjcmlwdG9yKGJpdCkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiAodGhpcy5zdGF0ZSAmIGJpdCkgIT09IDBcbiAgICB9LFxuICAgIHNldCh2YWx1ZSkge1xuICAgICAgaWYgKHZhbHVlKSB0aGlzLnN0YXRlIHw9IGJpdFxuICAgICAgZWxzZSB0aGlzLnN0YXRlICY9IH5iaXRcbiAgICB9XG4gIH1cbn1cbk9iamVjdERlZmluZVByb3BlcnRpZXMoUmVhZGFibGVTdGF0ZS5wcm90b3R5cGUsIHtcbiAgb2JqZWN0TW9kZTogbWFrZUJpdE1hcERlc2NyaXB0b3Ioa09iamVjdE1vZGUpLFxuICBlbmRlZDogbWFrZUJpdE1hcERlc2NyaXB0b3Ioa0VuZGVkKSxcbiAgZW5kRW1pdHRlZDogbWFrZUJpdE1hcERlc2NyaXB0b3Ioa0VuZEVtaXR0ZWQpLFxuICByZWFkaW5nOiBtYWtlQml0TWFwRGVzY3JpcHRvcihrUmVhZGluZyksXG4gIC8vIFN0cmVhbSBpcyBzdGlsbCBiZWluZyBjb25zdHJ1Y3RlZCBhbmQgY2Fubm90IGJlXG4gIC8vIGRlc3Ryb3llZCB1bnRpbCBjb25zdHJ1Y3Rpb24gZmluaXNoZWQgb3IgZmFpbGVkLlxuICAvLyBBc3luYyBjb25zdHJ1Y3Rpb24gaXMgb3B0IGluLCB0aGVyZWZvcmUgd2Ugc3RhcnQgYXNcbiAgLy8gY29uc3RydWN0ZWQuXG4gIGNvbnN0cnVjdGVkOiBtYWtlQml0TWFwRGVzY3JpcHRvcihrQ29uc3RydWN0ZWQpLFxuICAvLyBBIGZsYWcgdG8gYmUgYWJsZSB0byB0ZWxsIGlmIHRoZSBldmVudCAncmVhZGFibGUnLydkYXRhJyBpcyBlbWl0dGVkXG4gIC8vIGltbWVkaWF0ZWx5LCBvciBvbiBhIGxhdGVyIHRpY2suICBXZSBzZXQgdGhpcyB0byB0cnVlIGF0IGZpcnN0LCBiZWNhdXNlXG4gIC8vIGFueSBhY3Rpb25zIHRoYXQgc2hvdWxkbid0IGhhcHBlbiB1bnRpbCBcImxhdGVyXCIgc2hvdWxkIGdlbmVyYWxseSBhbHNvXG4gIC8vIG5vdCBoYXBwZW4gYmVmb3JlIHRoZSBmaXJzdCByZWFkIGNhbGwuXG4gIHN5bmM6IG1ha2VCaXRNYXBEZXNjcmlwdG9yKGtTeW5jKSxcbiAgLy8gV2hlbmV2ZXIgd2UgcmV0dXJuIG51bGwsIHRoZW4gd2Ugc2V0IGEgZmxhZyB0byBzYXlcbiAgLy8gdGhhdCB3ZSdyZSBhd2FpdGluZyBhICdyZWFkYWJsZScgZXZlbnQgZW1pc3Npb24uXG4gIG5lZWRSZWFkYWJsZTogbWFrZUJpdE1hcERlc2NyaXB0b3Ioa05lZWRSZWFkYWJsZSksXG4gIGVtaXR0ZWRSZWFkYWJsZTogbWFrZUJpdE1hcERlc2NyaXB0b3Ioa0VtaXR0ZWRSZWFkYWJsZSksXG4gIHJlYWRhYmxlTGlzdGVuaW5nOiBtYWtlQml0TWFwRGVzY3JpcHRvcihrUmVhZGFibGVMaXN0ZW5pbmcpLFxuICByZXN1bWVTY2hlZHVsZWQ6IG1ha2VCaXRNYXBEZXNjcmlwdG9yKGtSZXN1bWVTY2hlZHVsZWQpLFxuICAvLyBUcnVlIGlmIHRoZSBlcnJvciB3YXMgYWxyZWFkeSBlbWl0dGVkIGFuZCBzaG91bGQgbm90IGJlIHRocm93biBhZ2Fpbi5cbiAgZXJyb3JFbWl0dGVkOiBtYWtlQml0TWFwRGVzY3JpcHRvcihrRXJyb3JFbWl0dGVkKSxcbiAgZW1pdENsb3NlOiBtYWtlQml0TWFwRGVzY3JpcHRvcihrRW1pdENsb3NlKSxcbiAgYXV0b0Rlc3Ryb3k6IG1ha2VCaXRNYXBEZXNjcmlwdG9yKGtBdXRvRGVzdHJveSksXG4gIC8vIEhhcyBpdCBiZWVuIGRlc3Ryb3llZC5cbiAgZGVzdHJveWVkOiBtYWtlQml0TWFwRGVzY3JpcHRvcihrRGVzdHJveWVkKSxcbiAgLy8gSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHN0cmVhbSBoYXMgZmluaXNoZWQgZGVzdHJveWluZy5cbiAgY2xvc2VkOiBtYWtlQml0TWFwRGVzY3JpcHRvcihrQ2xvc2VkKSxcbiAgLy8gVHJ1ZSBpZiBjbG9zZSBoYXMgYmVlbiBlbWl0dGVkIG9yIHdvdWxkIGhhdmUgYmVlbiBlbWl0dGVkXG4gIC8vIGRlcGVuZGluZyBvbiBlbWl0Q2xvc2UuXG4gIGNsb3NlRW1pdHRlZDogbWFrZUJpdE1hcERlc2NyaXB0b3Ioa0Nsb3NlRW1pdHRlZCksXG4gIG11bHRpQXdhaXREcmFpbjogbWFrZUJpdE1hcERlc2NyaXB0b3Ioa011bHRpQXdhaXREcmFpbiksXG4gIC8vIElmIHRydWUsIGEgbWF5YmVSZWFkTW9yZSBoYXMgYmVlbiBzY2hlZHVsZWQuXG4gIHJlYWRpbmdNb3JlOiBtYWtlQml0TWFwRGVzY3JpcHRvcihrUmVhZGluZ01vcmUpLFxuICBkYXRhRW1pdHRlZDogbWFrZUJpdE1hcERlc2NyaXB0b3Ioa0RhdGFFbWl0dGVkKVxufSlcbmZ1bmN0aW9uIFJlYWRhYmxlU3RhdGUob3B0aW9ucywgc3RyZWFtLCBpc0R1cGxleCkge1xuICAvLyBEdXBsZXggc3RyZWFtcyBhcmUgYm90aCByZWFkYWJsZSBhbmQgd3JpdGFibGUsIGJ1dCBzaGFyZVxuICAvLyB0aGUgc2FtZSBvcHRpb25zIG9iamVjdC5cbiAgLy8gSG93ZXZlciwgc29tZSBjYXNlcyByZXF1aXJlIHNldHRpbmcgb3B0aW9ucyB0byBkaWZmZXJlbnRcbiAgLy8gdmFsdWVzIGZvciB0aGUgcmVhZGFibGUgYW5kIHRoZSB3cml0YWJsZSBzaWRlcyBvZiB0aGUgZHVwbGV4IHN0cmVhbS5cbiAgLy8gVGhlc2Ugb3B0aW9ucyBjYW4gYmUgcHJvdmlkZWQgc2VwYXJhdGVseSBhcyByZWFkYWJsZVhYWCBhbmQgd3JpdGFibGVYWFguXG4gIGlmICh0eXBlb2YgaXNEdXBsZXggIT09ICdib29sZWFuJykgaXNEdXBsZXggPSBzdHJlYW0gaW5zdGFuY2VvZiByZXF1aXJlKCcuL2R1cGxleCcpXG5cbiAgLy8gQml0IG1hcCBmaWVsZCB0byBzdG9yZSBSZWFkYWJsZVN0YXRlIG1vcmUgZWZmY2llbnRseSB3aXRoIDEgYml0IHBlciBmaWVsZFxuICAvLyBpbnN0ZWFkIG9mIGEgVjggc2xvdCBwZXIgZmllbGQuXG4gIHRoaXMuc3RhdGUgPSBrRW1pdENsb3NlIHwga0F1dG9EZXN0cm95IHwga0NvbnN0cnVjdGVkIHwga1N5bmNcbiAgLy8gT2JqZWN0IHN0cmVhbSBmbGFnLiBVc2VkIHRvIG1ha2UgcmVhZChuKSBpZ25vcmUgbiBhbmQgdG9cbiAgLy8gbWFrZSBhbGwgdGhlIGJ1ZmZlciBtZXJnaW5nIGFuZCBsZW5ndGggY2hlY2tzIGdvIGF3YXkuXG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMub2JqZWN0TW9kZSkgdGhpcy5zdGF0ZSB8PSBrT2JqZWN0TW9kZVxuICBpZiAoaXNEdXBsZXggJiYgb3B0aW9ucyAmJiBvcHRpb25zLnJlYWRhYmxlT2JqZWN0TW9kZSkgdGhpcy5zdGF0ZSB8PSBrT2JqZWN0TW9kZVxuXG4gIC8vIFRoZSBwb2ludCBhdCB3aGljaCBpdCBzdG9wcyBjYWxsaW5nIF9yZWFkKCkgdG8gZmlsbCB0aGUgYnVmZmVyXG4gIC8vIE5vdGU6IDAgaXMgYSB2YWxpZCB2YWx1ZSwgbWVhbnMgXCJkb24ndCBjYWxsIF9yZWFkIHByZWVtcHRpdmVseSBldmVyXCJcbiAgdGhpcy5oaWdoV2F0ZXJNYXJrID0gb3B0aW9uc1xuICAgID8gZ2V0SGlnaFdhdGVyTWFyayh0aGlzLCBvcHRpb25zLCAncmVhZGFibGVIaWdoV2F0ZXJNYXJrJywgaXNEdXBsZXgpXG4gICAgOiBnZXREZWZhdWx0SGlnaFdhdGVyTWFyayhmYWxzZSlcblxuICAvLyBBIGxpbmtlZCBsaXN0IGlzIHVzZWQgdG8gc3RvcmUgZGF0YSBjaHVua3MgaW5zdGVhZCBvZiBhbiBhcnJheSBiZWNhdXNlIHRoZVxuICAvLyBsaW5rZWQgbGlzdCBjYW4gcmVtb3ZlIGVsZW1lbnRzIGZyb20gdGhlIGJlZ2lubmluZyBmYXN0ZXIgdGhhblxuICAvLyBhcnJheS5zaGlmdCgpLlxuICB0aGlzLmJ1ZmZlciA9IG5ldyBCdWZmZXJMaXN0KClcbiAgdGhpcy5sZW5ndGggPSAwXG4gIHRoaXMucGlwZXMgPSBbXVxuICB0aGlzLmZsb3dpbmcgPSBudWxsXG4gIHRoaXNba1BhdXNlZF0gPSBudWxsXG5cbiAgLy8gU2hvdWxkIGNsb3NlIGJlIGVtaXR0ZWQgb24gZGVzdHJveS4gRGVmYXVsdHMgdG8gdHJ1ZS5cbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5lbWl0Q2xvc2UgPT09IGZhbHNlKSB0aGlzLnN0YXRlICY9IH5rRW1pdENsb3NlXG5cbiAgLy8gU2hvdWxkIC5kZXN0cm95KCkgYmUgY2FsbGVkIGFmdGVyICdlbmQnIChhbmQgcG90ZW50aWFsbHkgJ2ZpbmlzaCcpLlxuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmF1dG9EZXN0cm95ID09PSBmYWxzZSkgdGhpcy5zdGF0ZSAmPSB+a0F1dG9EZXN0cm95XG5cbiAgLy8gSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHN0cmVhbSBoYXMgZXJyb3JlZC4gV2hlbiB0cnVlIG5vIGZ1cnRoZXJcbiAgLy8gX3JlYWQgY2FsbHMsICdkYXRhJyBvciAncmVhZGFibGUnIGV2ZW50cyBzaG91bGQgb2NjdXIuIFRoaXMgaXMgbmVlZGVkXG4gIC8vIHNpbmNlIHdoZW4gYXV0b0Rlc3Ryb3kgaXMgZGlzYWJsZWQgd2UgbmVlZCBhIHdheSB0byB0ZWxsIHdoZXRoZXIgdGhlXG4gIC8vIHN0cmVhbSBoYXMgZmFpbGVkLlxuICB0aGlzLmVycm9yZWQgPSBudWxsXG5cbiAgLy8gQ3J5cHRvIGlzIGtpbmQgb2Ygb2xkIGFuZCBjcnVzdHkuICBIaXN0b3JpY2FsbHksIGl0cyBkZWZhdWx0IHN0cmluZ1xuICAvLyBlbmNvZGluZyBpcyAnYmluYXJ5JyBzbyB3ZSBoYXZlIHRvIG1ha2UgdGhpcyBjb25maWd1cmFibGUuXG4gIC8vIEV2ZXJ5dGhpbmcgZWxzZSBpbiB0aGUgdW5pdmVyc2UgdXNlcyAndXRmOCcsIHRob3VnaC5cbiAgdGhpcy5kZWZhdWx0RW5jb2RpbmcgPSAob3B0aW9ucyAmJiBvcHRpb25zLmRlZmF1bHRFbmNvZGluZykgfHwgJ3V0ZjgnXG5cbiAgLy8gUmVmIHRoZSBwaXBlZCBkZXN0IHdoaWNoIHdlIG5lZWQgYSBkcmFpbiBldmVudCBvbiBpdFxuICAvLyB0eXBlOiBudWxsIHwgV3JpdGFibGUgfCBTZXQ8V3JpdGFibGU+LlxuICB0aGlzLmF3YWl0RHJhaW5Xcml0ZXJzID0gbnVsbFxuICB0aGlzLmRlY29kZXIgPSBudWxsXG4gIHRoaXMuZW5jb2RpbmcgPSBudWxsXG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZW5jb2RpbmcpIHtcbiAgICB0aGlzLmRlY29kZXIgPSBuZXcgU3RyaW5nRGVjb2RlcihvcHRpb25zLmVuY29kaW5nKVxuICAgIHRoaXMuZW5jb2RpbmcgPSBvcHRpb25zLmVuY29kaW5nXG4gIH1cbn1cbmZ1bmN0aW9uIFJlYWRhYmxlKG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlYWRhYmxlKSkgcmV0dXJuIG5ldyBSZWFkYWJsZShvcHRpb25zKVxuXG4gIC8vIENoZWNraW5nIGZvciBhIFN0cmVhbS5EdXBsZXggaW5zdGFuY2UgaXMgZmFzdGVyIGhlcmUgaW5zdGVhZCBvZiBpbnNpZGVcbiAgLy8gdGhlIFJlYWRhYmxlU3RhdGUgY29uc3RydWN0b3IsIGF0IGxlYXN0IHdpdGggVjggNi41LlxuICBjb25zdCBpc0R1cGxleCA9IHRoaXMgaW5zdGFuY2VvZiByZXF1aXJlKCcuL2R1cGxleCcpXG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUgPSBuZXcgUmVhZGFibGVTdGF0ZShvcHRpb25zLCB0aGlzLCBpc0R1cGxleClcbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMucmVhZCA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fcmVhZCA9IG9wdGlvbnMucmVhZFxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5kZXN0cm95ID09PSAnZnVuY3Rpb24nKSB0aGlzLl9kZXN0cm95ID0gb3B0aW9ucy5kZXN0cm95XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmNvbnN0cnVjdCA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fY29uc3RydWN0ID0gb3B0aW9ucy5jb25zdHJ1Y3RcbiAgICBpZiAob3B0aW9ucy5zaWduYWwgJiYgIWlzRHVwbGV4KSBhZGRBYm9ydFNpZ25hbChvcHRpb25zLnNpZ25hbCwgdGhpcylcbiAgfVxuICBTdHJlYW0uY2FsbCh0aGlzLCBvcHRpb25zKVxuICBkZXN0cm95SW1wbC5jb25zdHJ1Y3QodGhpcywgKCkgPT4ge1xuICAgIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlLm5lZWRSZWFkYWJsZSkge1xuICAgICAgbWF5YmVSZWFkTW9yZSh0aGlzLCB0aGlzLl9yZWFkYWJsZVN0YXRlKVxuICAgIH1cbiAgfSlcbn1cblJlYWRhYmxlLnByb3RvdHlwZS5kZXN0cm95ID0gZGVzdHJveUltcGwuZGVzdHJveVxuUmVhZGFibGUucHJvdG90eXBlLl91bmRlc3Ryb3kgPSBkZXN0cm95SW1wbC51bmRlc3Ryb3lcblJlYWRhYmxlLnByb3RvdHlwZS5fZGVzdHJveSA9IGZ1bmN0aW9uIChlcnIsIGNiKSB7XG4gIGNiKGVycilcbn1cblJlYWRhYmxlLnByb3RvdHlwZVtFRS5jYXB0dXJlUmVqZWN0aW9uU3ltYm9sXSA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgdGhpcy5kZXN0cm95KGVycilcbn1cblJlYWRhYmxlLnByb3RvdHlwZVtTeW1ib2xBc3luY0Rpc3Bvc2VdID0gZnVuY3Rpb24gKCkge1xuICBsZXQgZXJyb3JcbiAgaWYgKCF0aGlzLmRlc3Ryb3llZCkge1xuICAgIGVycm9yID0gdGhpcy5yZWFkYWJsZUVuZGVkID8gbnVsbCA6IG5ldyBBYm9ydEVycm9yKClcbiAgICB0aGlzLmRlc3Ryb3koZXJyb3IpXG4gIH1cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IGVvcyh0aGlzLCAoZXJyKSA9PiAoZXJyICYmIGVyciAhPT0gZXJyb3IgPyByZWplY3QoZXJyKSA6IHJlc29sdmUobnVsbCkpKSlcbn1cblxuLy8gTWFudWFsbHkgc2hvdmUgc29tZXRoaW5nIGludG8gdGhlIHJlYWQoKSBidWZmZXIuXG4vLyBUaGlzIHJldHVybnMgdHJ1ZSBpZiB0aGUgaGlnaFdhdGVyTWFyayBoYXMgbm90IGJlZW4gaGl0IHlldCxcbi8vIHNpbWlsYXIgdG8gaG93IFdyaXRhYmxlLndyaXRlKCkgcmV0dXJucyB0cnVlIGlmIHlvdSBzaG91bGRcbi8vIHdyaXRlKCkgc29tZSBtb3JlLlxuUmVhZGFibGUucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nKSB7XG4gIHJldHVybiByZWFkYWJsZUFkZENodW5rKHRoaXMsIGNodW5rLCBlbmNvZGluZywgZmFsc2UpXG59XG5cbi8vIFVuc2hpZnQgc2hvdWxkICphbHdheXMqIGJlIHNvbWV0aGluZyBkaXJlY3RseSBvdXQgb2YgcmVhZCgpLlxuUmVhZGFibGUucHJvdG90eXBlLnVuc2hpZnQgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nKSB7XG4gIHJldHVybiByZWFkYWJsZUFkZENodW5rKHRoaXMsIGNodW5rLCBlbmNvZGluZywgdHJ1ZSlcbn1cbmZ1bmN0aW9uIHJlYWRhYmxlQWRkQ2h1bmsoc3RyZWFtLCBjaHVuaywgZW5jb2RpbmcsIGFkZFRvRnJvbnQpIHtcbiAgZGVidWcoJ3JlYWRhYmxlQWRkQ2h1bmsnLCBjaHVuaylcbiAgY29uc3Qgc3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGVcbiAgbGV0IGVyclxuICBpZiAoKHN0YXRlLnN0YXRlICYga09iamVjdE1vZGUpID09PSAwKSB7XG4gICAgaWYgKHR5cGVvZiBjaHVuayA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gZW5jb2RpbmcgfHwgc3RhdGUuZGVmYXVsdEVuY29kaW5nXG4gICAgICBpZiAoc3RhdGUuZW5jb2RpbmcgIT09IGVuY29kaW5nKSB7XG4gICAgICAgIGlmIChhZGRUb0Zyb250ICYmIHN0YXRlLmVuY29kaW5nKSB7XG4gICAgICAgICAgLy8gV2hlbiB1bnNoaWZ0aW5nLCBpZiBzdGF0ZS5lbmNvZGluZyBpcyBzZXQsIHdlIGhhdmUgdG8gc2F2ZVxuICAgICAgICAgIC8vIHRoZSBzdHJpbmcgaW4gdGhlIEJ1ZmZlckxpc3Qgd2l0aCB0aGUgc3RhdGUgZW5jb2RpbmcuXG4gICAgICAgICAgY2h1bmsgPSBCdWZmZXIuZnJvbShjaHVuaywgZW5jb2RpbmcpLnRvU3RyaW5nKHN0YXRlLmVuY29kaW5nKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNodW5rID0gQnVmZmVyLmZyb20oY2h1bmssIGVuY29kaW5nKVxuICAgICAgICAgIGVuY29kaW5nID0gJydcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2h1bmsgaW5zdGFuY2VvZiBCdWZmZXIpIHtcbiAgICAgIGVuY29kaW5nID0gJydcbiAgICB9IGVsc2UgaWYgKFN0cmVhbS5faXNVaW50OEFycmF5KGNodW5rKSkge1xuICAgICAgY2h1bmsgPSBTdHJlYW0uX3VpbnQ4QXJyYXlUb0J1ZmZlcihjaHVuaylcbiAgICAgIGVuY29kaW5nID0gJydcbiAgICB9IGVsc2UgaWYgKGNodW5rICE9IG51bGwpIHtcbiAgICAgIGVyciA9IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRSgnY2h1bmsnLCBbJ3N0cmluZycsICdCdWZmZXInLCAnVWludDhBcnJheSddLCBjaHVuaylcbiAgICB9XG4gIH1cbiAgaWYgKGVycikge1xuICAgIGVycm9yT3JEZXN0cm95KHN0cmVhbSwgZXJyKVxuICB9IGVsc2UgaWYgKGNodW5rID09PSBudWxsKSB7XG4gICAgc3RhdGUuc3RhdGUgJj0gfmtSZWFkaW5nXG4gICAgb25Fb2ZDaHVuayhzdHJlYW0sIHN0YXRlKVxuICB9IGVsc2UgaWYgKChzdGF0ZS5zdGF0ZSAmIGtPYmplY3RNb2RlKSAhPT0gMCB8fCAoY2h1bmsgJiYgY2h1bmsubGVuZ3RoID4gMCkpIHtcbiAgICBpZiAoYWRkVG9Gcm9udCkge1xuICAgICAgaWYgKChzdGF0ZS5zdGF0ZSAmIGtFbmRFbWl0dGVkKSAhPT0gMCkgZXJyb3JPckRlc3Ryb3koc3RyZWFtLCBuZXcgRVJSX1NUUkVBTV9VTlNISUZUX0FGVEVSX0VORF9FVkVOVCgpKVxuICAgICAgZWxzZSBpZiAoc3RhdGUuZGVzdHJveWVkIHx8IHN0YXRlLmVycm9yZWQpIHJldHVybiBmYWxzZVxuICAgICAgZWxzZSBhZGRDaHVuayhzdHJlYW0sIHN0YXRlLCBjaHVuaywgdHJ1ZSlcbiAgICB9IGVsc2UgaWYgKHN0YXRlLmVuZGVkKSB7XG4gICAgICBlcnJvck9yRGVzdHJveShzdHJlYW0sIG5ldyBFUlJfU1RSRUFNX1BVU0hfQUZURVJfRU9GKCkpXG4gICAgfSBlbHNlIGlmIChzdGF0ZS5kZXN0cm95ZWQgfHwgc3RhdGUuZXJyb3JlZCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLnN0YXRlICY9IH5rUmVhZGluZ1xuICAgICAgaWYgKHN0YXRlLmRlY29kZXIgJiYgIWVuY29kaW5nKSB7XG4gICAgICAgIGNodW5rID0gc3RhdGUuZGVjb2Rlci53cml0ZShjaHVuaylcbiAgICAgICAgaWYgKHN0YXRlLm9iamVjdE1vZGUgfHwgY2h1bmsubGVuZ3RoICE9PSAwKSBhZGRDaHVuayhzdHJlYW0sIHN0YXRlLCBjaHVuaywgZmFsc2UpXG4gICAgICAgIGVsc2UgbWF5YmVSZWFkTW9yZShzdHJlYW0sIHN0YXRlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWRkQ2h1bmsoc3RyZWFtLCBzdGF0ZSwgY2h1bmssIGZhbHNlKVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmICghYWRkVG9Gcm9udCkge1xuICAgIHN0YXRlLnN0YXRlICY9IH5rUmVhZGluZ1xuICAgIG1heWJlUmVhZE1vcmUoc3RyZWFtLCBzdGF0ZSlcbiAgfVxuXG4gIC8vIFdlIGNhbiBwdXNoIG1vcmUgZGF0YSBpZiB3ZSBhcmUgYmVsb3cgdGhlIGhpZ2hXYXRlck1hcmsuXG4gIC8vIEFsc28sIGlmIHdlIGhhdmUgbm8gZGF0YSB5ZXQsIHdlIGNhbiBzdGFuZCBzb21lIG1vcmUgYnl0ZXMuXG4gIC8vIFRoaXMgaXMgdG8gd29yayBhcm91bmQgY2FzZXMgd2hlcmUgaHdtPTAsIHN1Y2ggYXMgdGhlIHJlcGwuXG4gIHJldHVybiAhc3RhdGUuZW5kZWQgJiYgKHN0YXRlLmxlbmd0aCA8IHN0YXRlLmhpZ2hXYXRlck1hcmsgfHwgc3RhdGUubGVuZ3RoID09PSAwKVxufVxuZnVuY3Rpb24gYWRkQ2h1bmsoc3RyZWFtLCBzdGF0ZSwgY2h1bmssIGFkZFRvRnJvbnQpIHtcbiAgaWYgKHN0YXRlLmZsb3dpbmcgJiYgc3RhdGUubGVuZ3RoID09PSAwICYmICFzdGF0ZS5zeW5jICYmIHN0cmVhbS5saXN0ZW5lckNvdW50KCdkYXRhJykgPiAwKSB7XG4gICAgLy8gVXNlIHRoZSBndWFyZCB0byBhdm9pZCBjcmVhdGluZyBgU2V0KClgIHJlcGVhdGVkbHlcbiAgICAvLyB3aGVuIHdlIGhhdmUgbXVsdGlwbGUgcGlwZXMuXG4gICAgaWYgKChzdGF0ZS5zdGF0ZSAmIGtNdWx0aUF3YWl0RHJhaW4pICE9PSAwKSB7XG4gICAgICBzdGF0ZS5hd2FpdERyYWluV3JpdGVycy5jbGVhcigpXG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLmF3YWl0RHJhaW5Xcml0ZXJzID0gbnVsbFxuICAgIH1cbiAgICBzdGF0ZS5kYXRhRW1pdHRlZCA9IHRydWVcbiAgICBzdHJlYW0uZW1pdCgnZGF0YScsIGNodW5rKVxuICB9IGVsc2Uge1xuICAgIC8vIFVwZGF0ZSB0aGUgYnVmZmVyIGluZm8uXG4gICAgc3RhdGUubGVuZ3RoICs9IHN0YXRlLm9iamVjdE1vZGUgPyAxIDogY2h1bmsubGVuZ3RoXG4gICAgaWYgKGFkZFRvRnJvbnQpIHN0YXRlLmJ1ZmZlci51bnNoaWZ0KGNodW5rKVxuICAgIGVsc2Ugc3RhdGUuYnVmZmVyLnB1c2goY2h1bmspXG4gICAgaWYgKChzdGF0ZS5zdGF0ZSAmIGtOZWVkUmVhZGFibGUpICE9PSAwKSBlbWl0UmVhZGFibGUoc3RyZWFtKVxuICB9XG4gIG1heWJlUmVhZE1vcmUoc3RyZWFtLCBzdGF0ZSlcbn1cblJlYWRhYmxlLnByb3RvdHlwZS5pc1BhdXNlZCA9IGZ1bmN0aW9uICgpIHtcbiAgY29uc3Qgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlXG4gIHJldHVybiBzdGF0ZVtrUGF1c2VkXSA9PT0gdHJ1ZSB8fCBzdGF0ZS5mbG93aW5nID09PSBmYWxzZVxufVxuXG4vLyBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eS5cblJlYWRhYmxlLnByb3RvdHlwZS5zZXRFbmNvZGluZyA9IGZ1bmN0aW9uIChlbmMpIHtcbiAgY29uc3QgZGVjb2RlciA9IG5ldyBTdHJpbmdEZWNvZGVyKGVuYylcbiAgdGhpcy5fcmVhZGFibGVTdGF0ZS5kZWNvZGVyID0gZGVjb2RlclxuICAvLyBJZiBzZXRFbmNvZGluZyhudWxsKSwgZGVjb2Rlci5lbmNvZGluZyBlcXVhbHMgdXRmOC5cbiAgdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmNvZGluZyA9IHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2Rlci5lbmNvZGluZ1xuICBjb25zdCBidWZmZXIgPSB0aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlclxuICAvLyBJdGVyYXRlIG92ZXIgY3VycmVudCBidWZmZXIgdG8gY29udmVydCBhbHJlYWR5IHN0b3JlZCBCdWZmZXJzOlxuICBsZXQgY29udGVudCA9ICcnXG4gIGZvciAoY29uc3QgZGF0YSBvZiBidWZmZXIpIHtcbiAgICBjb250ZW50ICs9IGRlY29kZXIud3JpdGUoZGF0YSlcbiAgfVxuICBidWZmZXIuY2xlYXIoKVxuICBpZiAoY29udGVudCAhPT0gJycpIGJ1ZmZlci5wdXNoKGNvbnRlbnQpXG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUubGVuZ3RoID0gY29udGVudC5sZW5ndGhcbiAgcmV0dXJuIHRoaXNcbn1cblxuLy8gRG9uJ3QgcmFpc2UgdGhlIGh3bSA+IDFHQi5cbmNvbnN0IE1BWF9IV00gPSAweDQwMDAwMDAwXG5mdW5jdGlvbiBjb21wdXRlTmV3SGlnaFdhdGVyTWFyayhuKSB7XG4gIGlmIChuID4gTUFYX0hXTSkge1xuICAgIHRocm93IG5ldyBFUlJfT1VUX09GX1JBTkdFKCdzaXplJywgJzw9IDFHaUInLCBuKVxuICB9IGVsc2Uge1xuICAgIC8vIEdldCB0aGUgbmV4dCBoaWdoZXN0IHBvd2VyIG9mIDIgdG8gcHJldmVudCBpbmNyZWFzaW5nIGh3bSBleGNlc3NpdmVseSBpblxuICAgIC8vIHRpbnkgYW1vdW50cy5cbiAgICBuLS1cbiAgICBuIHw9IG4gPj4+IDFcbiAgICBuIHw9IG4gPj4+IDJcbiAgICBuIHw9IG4gPj4+IDRcbiAgICBuIHw9IG4gPj4+IDhcbiAgICBuIHw9IG4gPj4+IDE2XG4gICAgbisrXG4gIH1cbiAgcmV0dXJuIG5cbn1cblxuLy8gVGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBiZSBpbmxpbmFibGUsIHNvIHBsZWFzZSB0YWtlIGNhcmUgd2hlbiBtYWtpbmdcbi8vIGNoYW5nZXMgdG8gdGhlIGZ1bmN0aW9uIGJvZHkuXG5mdW5jdGlvbiBob3dNdWNoVG9SZWFkKG4sIHN0YXRlKSB7XG4gIGlmIChuIDw9IDAgfHwgKHN0YXRlLmxlbmd0aCA9PT0gMCAmJiBzdGF0ZS5lbmRlZCkpIHJldHVybiAwXG4gIGlmICgoc3RhdGUuc3RhdGUgJiBrT2JqZWN0TW9kZSkgIT09IDApIHJldHVybiAxXG4gIGlmIChOdW1iZXJJc05hTihuKSkge1xuICAgIC8vIE9ubHkgZmxvdyBvbmUgYnVmZmVyIGF0IGEgdGltZS5cbiAgICBpZiAoc3RhdGUuZmxvd2luZyAmJiBzdGF0ZS5sZW5ndGgpIHJldHVybiBzdGF0ZS5idWZmZXIuZmlyc3QoKS5sZW5ndGhcbiAgICByZXR1cm4gc3RhdGUubGVuZ3RoXG4gIH1cbiAgaWYgKG4gPD0gc3RhdGUubGVuZ3RoKSByZXR1cm4gblxuICByZXR1cm4gc3RhdGUuZW5kZWQgPyBzdGF0ZS5sZW5ndGggOiAwXG59XG5cbi8vIFlvdSBjYW4gb3ZlcnJpZGUgZWl0aGVyIHRoaXMgbWV0aG9kLCBvciB0aGUgYXN5bmMgX3JlYWQobikgYmVsb3cuXG5SZWFkYWJsZS5wcm90b3R5cGUucmVhZCA9IGZ1bmN0aW9uIChuKSB7XG4gIGRlYnVnKCdyZWFkJywgbilcbiAgLy8gU2FtZSBhcyBwYXJzZUludCh1bmRlZmluZWQsIDEwKSwgaG93ZXZlciBWOCA3LjMgcGVyZm9ybWFuY2UgcmVncmVzc2VkXG4gIC8vIGluIHRoaXMgc2NlbmFyaW8sIHNvIHdlIGFyZSBkb2luZyBpdCBtYW51YWxseS5cbiAgaWYgKG4gPT09IHVuZGVmaW5lZCkge1xuICAgIG4gPSBOYU5cbiAgfSBlbHNlIGlmICghTnVtYmVySXNJbnRlZ2VyKG4pKSB7XG4gICAgbiA9IE51bWJlclBhcnNlSW50KG4sIDEwKVxuICB9XG4gIGNvbnN0IHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZVxuICBjb25zdCBuT3JpZyA9IG5cblxuICAvLyBJZiB3ZSdyZSBhc2tpbmcgZm9yIG1vcmUgdGhhbiB0aGUgY3VycmVudCBod20sIHRoZW4gcmFpc2UgdGhlIGh3bS5cbiAgaWYgKG4gPiBzdGF0ZS5oaWdoV2F0ZXJNYXJrKSBzdGF0ZS5oaWdoV2F0ZXJNYXJrID0gY29tcHV0ZU5ld0hpZ2hXYXRlck1hcmsobilcbiAgaWYgKG4gIT09IDApIHN0YXRlLnN0YXRlICY9IH5rRW1pdHRlZFJlYWRhYmxlXG5cbiAgLy8gSWYgd2UncmUgZG9pbmcgcmVhZCgwKSB0byB0cmlnZ2VyIGEgcmVhZGFibGUgZXZlbnQsIGJ1dCB3ZVxuICAvLyBhbHJlYWR5IGhhdmUgYSBidW5jaCBvZiBkYXRhIGluIHRoZSBidWZmZXIsIHRoZW4ganVzdCB0cmlnZ2VyXG4gIC8vIHRoZSAncmVhZGFibGUnIGV2ZW50IGFuZCBtb3ZlIG9uLlxuICBpZiAoXG4gICAgbiA9PT0gMCAmJlxuICAgIHN0YXRlLm5lZWRSZWFkYWJsZSAmJlxuICAgICgoc3RhdGUuaGlnaFdhdGVyTWFyayAhPT0gMCA/IHN0YXRlLmxlbmd0aCA+PSBzdGF0ZS5oaWdoV2F0ZXJNYXJrIDogc3RhdGUubGVuZ3RoID4gMCkgfHwgc3RhdGUuZW5kZWQpXG4gICkge1xuICAgIGRlYnVnKCdyZWFkOiBlbWl0UmVhZGFibGUnLCBzdGF0ZS5sZW5ndGgsIHN0YXRlLmVuZGVkKVxuICAgIGlmIChzdGF0ZS5sZW5ndGggPT09IDAgJiYgc3RhdGUuZW5kZWQpIGVuZFJlYWRhYmxlKHRoaXMpXG4gICAgZWxzZSBlbWl0UmVhZGFibGUodGhpcylcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIG4gPSBob3dNdWNoVG9SZWFkKG4sIHN0YXRlKVxuXG4gIC8vIElmIHdlJ3ZlIGVuZGVkLCBhbmQgd2UncmUgbm93IGNsZWFyLCB0aGVuIGZpbmlzaCBpdCB1cC5cbiAgaWYgKG4gPT09IDAgJiYgc3RhdGUuZW5kZWQpIHtcbiAgICBpZiAoc3RhdGUubGVuZ3RoID09PSAwKSBlbmRSZWFkYWJsZSh0aGlzKVxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvLyBBbGwgdGhlIGFjdHVhbCBjaHVuayBnZW5lcmF0aW9uIGxvZ2ljIG5lZWRzIHRvIGJlXG4gIC8vICpiZWxvdyogdGhlIGNhbGwgdG8gX3JlYWQuICBUaGUgcmVhc29uIGlzIHRoYXQgaW4gY2VydGFpblxuICAvLyBzeW50aGV0aWMgc3RyZWFtIGNhc2VzLCBzdWNoIGFzIHBhc3N0aHJvdWdoIHN0cmVhbXMsIF9yZWFkXG4gIC8vIG1heSBiZSBhIGNvbXBsZXRlbHkgc3luY2hyb25vdXMgb3BlcmF0aW9uIHdoaWNoIG1heSBjaGFuZ2VcbiAgLy8gdGhlIHN0YXRlIG9mIHRoZSByZWFkIGJ1ZmZlciwgcHJvdmlkaW5nIGVub3VnaCBkYXRhIHdoZW5cbiAgLy8gYmVmb3JlIHRoZXJlIHdhcyAqbm90KiBlbm91Z2guXG4gIC8vXG4gIC8vIFNvLCB0aGUgc3RlcHMgYXJlOlxuICAvLyAxLiBGaWd1cmUgb3V0IHdoYXQgdGhlIHN0YXRlIG9mIHRoaW5ncyB3aWxsIGJlIGFmdGVyIHdlIGRvXG4gIC8vIGEgcmVhZCBmcm9tIHRoZSBidWZmZXIuXG4gIC8vXG4gIC8vIDIuIElmIHRoYXQgcmVzdWx0aW5nIHN0YXRlIHdpbGwgdHJpZ2dlciBhIF9yZWFkLCB0aGVuIGNhbGwgX3JlYWQuXG4gIC8vIE5vdGUgdGhhdCB0aGlzIG1heSBiZSBhc3luY2hyb25vdXMsIG9yIHN5bmNocm9ub3VzLiAgWWVzLCBpdCBpc1xuICAvLyBkZWVwbHkgdWdseSB0byB3cml0ZSBBUElzIHRoaXMgd2F5LCBidXQgdGhhdCBzdGlsbCBkb2Vzbid0IG1lYW5cbiAgLy8gdGhhdCB0aGUgUmVhZGFibGUgY2xhc3Mgc2hvdWxkIGJlaGF2ZSBpbXByb3Blcmx5LCBhcyBzdHJlYW1zIGFyZVxuICAvLyBkZXNpZ25lZCB0byBiZSBzeW5jL2FzeW5jIGFnbm9zdGljLlxuICAvLyBUYWtlIG5vdGUgaWYgdGhlIF9yZWFkIGNhbGwgaXMgc3luYyBvciBhc3luYyAoaWUsIGlmIHRoZSByZWFkIGNhbGxcbiAgLy8gaGFzIHJldHVybmVkIHlldCksIHNvIHRoYXQgd2Uga25vdyB3aGV0aGVyIG9yIG5vdCBpdCdzIHNhZmUgdG8gZW1pdFxuICAvLyAncmVhZGFibGUnIGV0Yy5cbiAgLy9cbiAgLy8gMy4gQWN0dWFsbHkgcHVsbCB0aGUgcmVxdWVzdGVkIGNodW5rcyBvdXQgb2YgdGhlIGJ1ZmZlciBhbmQgcmV0dXJuLlxuXG4gIC8vIGlmIHdlIG5lZWQgYSByZWFkYWJsZSBldmVudCwgdGhlbiB3ZSBuZWVkIHRvIGRvIHNvbWUgcmVhZGluZy5cbiAgbGV0IGRvUmVhZCA9IChzdGF0ZS5zdGF0ZSAmIGtOZWVkUmVhZGFibGUpICE9PSAwXG4gIGRlYnVnKCduZWVkIHJlYWRhYmxlJywgZG9SZWFkKVxuXG4gIC8vIElmIHdlIGN1cnJlbnRseSBoYXZlIGxlc3MgdGhhbiB0aGUgaGlnaFdhdGVyTWFyaywgdGhlbiBhbHNvIHJlYWQgc29tZS5cbiAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCB8fCBzdGF0ZS5sZW5ndGggLSBuIDwgc3RhdGUuaGlnaFdhdGVyTWFyaykge1xuICAgIGRvUmVhZCA9IHRydWVcbiAgICBkZWJ1ZygnbGVuZ3RoIGxlc3MgdGhhbiB3YXRlcm1hcmsnLCBkb1JlYWQpXG4gIH1cblxuICAvLyBIb3dldmVyLCBpZiB3ZSd2ZSBlbmRlZCwgdGhlbiB0aGVyZSdzIG5vIHBvaW50LCBpZiB3ZSdyZSBhbHJlYWR5XG4gIC8vIHJlYWRpbmcsIHRoZW4gaXQncyB1bm5lY2Vzc2FyeSwgaWYgd2UncmUgY29uc3RydWN0aW5nIHdlIGhhdmUgdG8gd2FpdCxcbiAgLy8gYW5kIGlmIHdlJ3JlIGRlc3Ryb3llZCBvciBlcnJvcmVkLCB0aGVuIGl0J3Mgbm90IGFsbG93ZWQsXG4gIGlmIChzdGF0ZS5lbmRlZCB8fCBzdGF0ZS5yZWFkaW5nIHx8IHN0YXRlLmRlc3Ryb3llZCB8fCBzdGF0ZS5lcnJvcmVkIHx8ICFzdGF0ZS5jb25zdHJ1Y3RlZCkge1xuICAgIGRvUmVhZCA9IGZhbHNlXG4gICAgZGVidWcoJ3JlYWRpbmcsIGVuZGVkIG9yIGNvbnN0cnVjdGluZycsIGRvUmVhZClcbiAgfSBlbHNlIGlmIChkb1JlYWQpIHtcbiAgICBkZWJ1ZygnZG8gcmVhZCcpXG4gICAgc3RhdGUuc3RhdGUgfD0ga1JlYWRpbmcgfCBrU3luY1xuICAgIC8vIElmIHRoZSBsZW5ndGggaXMgY3VycmVudGx5IHplcm8sIHRoZW4gd2UgKm5lZWQqIGEgcmVhZGFibGUgZXZlbnQuXG4gICAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCkgc3RhdGUuc3RhdGUgfD0ga05lZWRSZWFkYWJsZVxuXG4gICAgLy8gQ2FsbCBpbnRlcm5hbCByZWFkIG1ldGhvZFxuICAgIHRyeSB7XG4gICAgICB0aGlzLl9yZWFkKHN0YXRlLmhpZ2hXYXRlck1hcmspXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJvck9yRGVzdHJveSh0aGlzLCBlcnIpXG4gICAgfVxuICAgIHN0YXRlLnN0YXRlICY9IH5rU3luY1xuXG4gICAgLy8gSWYgX3JlYWQgcHVzaGVkIGRhdGEgc3luY2hyb25vdXNseSwgdGhlbiBgcmVhZGluZ2Agd2lsbCBiZSBmYWxzZSxcbiAgICAvLyBhbmQgd2UgbmVlZCB0byByZS1ldmFsdWF0ZSBob3cgbXVjaCBkYXRhIHdlIGNhbiByZXR1cm4gdG8gdGhlIHVzZXIuXG4gICAgaWYgKCFzdGF0ZS5yZWFkaW5nKSBuID0gaG93TXVjaFRvUmVhZChuT3JpZywgc3RhdGUpXG4gIH1cbiAgbGV0IHJldFxuICBpZiAobiA+IDApIHJldCA9IGZyb21MaXN0KG4sIHN0YXRlKVxuICBlbHNlIHJldCA9IG51bGxcbiAgaWYgKHJldCA9PT0gbnVsbCkge1xuICAgIHN0YXRlLm5lZWRSZWFkYWJsZSA9IHN0YXRlLmxlbmd0aCA8PSBzdGF0ZS5oaWdoV2F0ZXJNYXJrXG4gICAgbiA9IDBcbiAgfSBlbHNlIHtcbiAgICBzdGF0ZS5sZW5ndGggLT0gblxuICAgIGlmIChzdGF0ZS5tdWx0aUF3YWl0RHJhaW4pIHtcbiAgICAgIHN0YXRlLmF3YWl0RHJhaW5Xcml0ZXJzLmNsZWFyKClcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUuYXdhaXREcmFpbldyaXRlcnMgPSBudWxsXG4gICAgfVxuICB9XG4gIGlmIChzdGF0ZS5sZW5ndGggPT09IDApIHtcbiAgICAvLyBJZiB3ZSBoYXZlIG5vdGhpbmcgaW4gdGhlIGJ1ZmZlciwgdGhlbiB3ZSB3YW50IHRvIGtub3dcbiAgICAvLyBhcyBzb29uIGFzIHdlICpkbyogZ2V0IHNvbWV0aGluZyBpbnRvIHRoZSBidWZmZXIuXG4gICAgaWYgKCFzdGF0ZS5lbmRlZCkgc3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZVxuXG4gICAgLy8gSWYgd2UgdHJpZWQgdG8gcmVhZCgpIHBhc3QgdGhlIEVPRiwgdGhlbiBlbWl0IGVuZCBvbiB0aGUgbmV4dCB0aWNrLlxuICAgIGlmIChuT3JpZyAhPT0gbiAmJiBzdGF0ZS5lbmRlZCkgZW5kUmVhZGFibGUodGhpcylcbiAgfVxuICBpZiAocmV0ICE9PSBudWxsICYmICFzdGF0ZS5lcnJvckVtaXR0ZWQgJiYgIXN0YXRlLmNsb3NlRW1pdHRlZCkge1xuICAgIHN0YXRlLmRhdGFFbWl0dGVkID0gdHJ1ZVxuICAgIHRoaXMuZW1pdCgnZGF0YScsIHJldClcbiAgfVxuICByZXR1cm4gcmV0XG59XG5mdW5jdGlvbiBvbkVvZkNodW5rKHN0cmVhbSwgc3RhdGUpIHtcbiAgZGVidWcoJ29uRW9mQ2h1bmsnKVxuICBpZiAoc3RhdGUuZW5kZWQpIHJldHVyblxuICBpZiAoc3RhdGUuZGVjb2Rlcikge1xuICAgIGNvbnN0IGNodW5rID0gc3RhdGUuZGVjb2Rlci5lbmQoKVxuICAgIGlmIChjaHVuayAmJiBjaHVuay5sZW5ndGgpIHtcbiAgICAgIHN0YXRlLmJ1ZmZlci5wdXNoKGNodW5rKVxuICAgICAgc3RhdGUubGVuZ3RoICs9IHN0YXRlLm9iamVjdE1vZGUgPyAxIDogY2h1bmsubGVuZ3RoXG4gICAgfVxuICB9XG4gIHN0YXRlLmVuZGVkID0gdHJ1ZVxuICBpZiAoc3RhdGUuc3luYykge1xuICAgIC8vIElmIHdlIGFyZSBzeW5jLCB3YWl0IHVudGlsIG5leHQgdGljayB0byBlbWl0IHRoZSBkYXRhLlxuICAgIC8vIE90aGVyd2lzZSB3ZSByaXNrIGVtaXR0aW5nIGRhdGEgaW4gdGhlIGZsb3coKVxuICAgIC8vIHRoZSByZWFkYWJsZSBjb2RlIHRyaWdnZXJzIGR1cmluZyBhIHJlYWQoKSBjYWxsLlxuICAgIGVtaXRSZWFkYWJsZShzdHJlYW0pXG4gIH0gZWxzZSB7XG4gICAgLy8gRW1pdCAncmVhZGFibGUnIG5vdyB0byBtYWtlIHN1cmUgaXQgZ2V0cyBwaWNrZWQgdXAuXG4gICAgc3RhdGUubmVlZFJlYWRhYmxlID0gZmFsc2VcbiAgICBzdGF0ZS5lbWl0dGVkUmVhZGFibGUgPSB0cnVlXG4gICAgLy8gV2UgaGF2ZSB0byBlbWl0IHJlYWRhYmxlIG5vdyB0aGF0IHdlIGFyZSBFT0YuIE1vZHVsZXNcbiAgICAvLyBpbiB0aGUgZWNvc3lzdGVtIChlLmcuIGRpY2VyKSByZWx5IG9uIHRoaXMgZXZlbnQgYmVpbmcgc3luYy5cbiAgICBlbWl0UmVhZGFibGVfKHN0cmVhbSlcbiAgfVxufVxuXG4vLyBEb24ndCBlbWl0IHJlYWRhYmxlIHJpZ2h0IGF3YXkgaW4gc3luYyBtb2RlLCBiZWNhdXNlIHRoaXMgY2FuIHRyaWdnZXJcbi8vIGFub3RoZXIgcmVhZCgpIGNhbGwgPT4gc3RhY2sgb3ZlcmZsb3cuICBUaGlzIHdheSwgaXQgbWlnaHQgdHJpZ2dlclxuLy8gYSBuZXh0VGljayByZWN1cnNpb24gd2FybmluZywgYnV0IHRoYXQncyBub3Qgc28gYmFkLlxuZnVuY3Rpb24gZW1pdFJlYWRhYmxlKHN0cmVhbSkge1xuICBjb25zdCBzdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZVxuICBkZWJ1ZygnZW1pdFJlYWRhYmxlJywgc3RhdGUubmVlZFJlYWRhYmxlLCBzdGF0ZS5lbWl0dGVkUmVhZGFibGUpXG4gIHN0YXRlLm5lZWRSZWFkYWJsZSA9IGZhbHNlXG4gIGlmICghc3RhdGUuZW1pdHRlZFJlYWRhYmxlKSB7XG4gICAgZGVidWcoJ2VtaXRSZWFkYWJsZScsIHN0YXRlLmZsb3dpbmcpXG4gICAgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gdHJ1ZVxuICAgIHByb2Nlc3MubmV4dFRpY2soZW1pdFJlYWRhYmxlXywgc3RyZWFtKVxuICB9XG59XG5mdW5jdGlvbiBlbWl0UmVhZGFibGVfKHN0cmVhbSkge1xuICBjb25zdCBzdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZVxuICBkZWJ1ZygnZW1pdFJlYWRhYmxlXycsIHN0YXRlLmRlc3Ryb3llZCwgc3RhdGUubGVuZ3RoLCBzdGF0ZS5lbmRlZClcbiAgaWYgKCFzdGF0ZS5kZXN0cm95ZWQgJiYgIXN0YXRlLmVycm9yZWQgJiYgKHN0YXRlLmxlbmd0aCB8fCBzdGF0ZS5lbmRlZCkpIHtcbiAgICBzdHJlYW0uZW1pdCgncmVhZGFibGUnKVxuICAgIHN0YXRlLmVtaXR0ZWRSZWFkYWJsZSA9IGZhbHNlXG4gIH1cblxuICAvLyBUaGUgc3RyZWFtIG5lZWRzIGFub3RoZXIgcmVhZGFibGUgZXZlbnQgaWY6XG4gIC8vIDEuIEl0IGlzIG5vdCBmbG93aW5nLCBhcyB0aGUgZmxvdyBtZWNoYW5pc20gd2lsbCB0YWtlXG4gIC8vICAgIGNhcmUgb2YgaXQuXG4gIC8vIDIuIEl0IGlzIG5vdCBlbmRlZC5cbiAgLy8gMy4gSXQgaXMgYmVsb3cgdGhlIGhpZ2hXYXRlck1hcmssIHNvIHdlIGNhbiBzY2hlZHVsZVxuICAvLyAgICBhbm90aGVyIHJlYWRhYmxlIGxhdGVyLlxuICBzdGF0ZS5uZWVkUmVhZGFibGUgPSAhc3RhdGUuZmxvd2luZyAmJiAhc3RhdGUuZW5kZWQgJiYgc3RhdGUubGVuZ3RoIDw9IHN0YXRlLmhpZ2hXYXRlck1hcmtcbiAgZmxvdyhzdHJlYW0pXG59XG5cbi8vIEF0IHRoaXMgcG9pbnQsIHRoZSB1c2VyIGhhcyBwcmVzdW1hYmx5IHNlZW4gdGhlICdyZWFkYWJsZScgZXZlbnQsXG4vLyBhbmQgY2FsbGVkIHJlYWQoKSB0byBjb25zdW1lIHNvbWUgZGF0YS4gIHRoYXQgbWF5IGhhdmUgdHJpZ2dlcmVkXG4vLyBpbiB0dXJuIGFub3RoZXIgX3JlYWQobikgY2FsbCwgaW4gd2hpY2ggY2FzZSByZWFkaW5nID0gdHJ1ZSBpZlxuLy8gaXQncyBpbiBwcm9ncmVzcy5cbi8vIEhvd2V2ZXIsIGlmIHdlJ3JlIG5vdCBlbmRlZCwgb3IgcmVhZGluZywgYW5kIHRoZSBsZW5ndGggPCBod20sXG4vLyB0aGVuIGdvIGFoZWFkIGFuZCB0cnkgdG8gcmVhZCBzb21lIG1vcmUgcHJlZW1wdGl2ZWx5LlxuZnVuY3Rpb24gbWF5YmVSZWFkTW9yZShzdHJlYW0sIHN0YXRlKSB7XG4gIGlmICghc3RhdGUucmVhZGluZ01vcmUgJiYgc3RhdGUuY29uc3RydWN0ZWQpIHtcbiAgICBzdGF0ZS5yZWFkaW5nTW9yZSA9IHRydWVcbiAgICBwcm9jZXNzLm5leHRUaWNrKG1heWJlUmVhZE1vcmVfLCBzdHJlYW0sIHN0YXRlKVxuICB9XG59XG5mdW5jdGlvbiBtYXliZVJlYWRNb3JlXyhzdHJlYW0sIHN0YXRlKSB7XG4gIC8vIEF0dGVtcHQgdG8gcmVhZCBtb3JlIGRhdGEgaWYgd2Ugc2hvdWxkLlxuICAvL1xuICAvLyBUaGUgY29uZGl0aW9ucyBmb3IgcmVhZGluZyBtb3JlIGRhdGEgYXJlIChvbmUgb2YpOlxuICAvLyAtIE5vdCBlbm91Z2ggZGF0YSBidWZmZXJlZCAoc3RhdGUubGVuZ3RoIDwgc3RhdGUuaGlnaFdhdGVyTWFyaykuIFRoZSBsb29wXG4gIC8vICAgaXMgcmVzcG9uc2libGUgZm9yIGZpbGxpbmcgdGhlIGJ1ZmZlciB3aXRoIGVub3VnaCBkYXRhIGlmIHN1Y2ggZGF0YVxuICAvLyAgIGlzIGF2YWlsYWJsZS4gSWYgaGlnaFdhdGVyTWFyayBpcyAwIGFuZCB3ZSBhcmUgbm90IGluIHRoZSBmbG93aW5nIG1vZGVcbiAgLy8gICB3ZSBzaG91bGQgX25vdF8gYXR0ZW1wdCB0byBidWZmZXIgYW55IGV4dHJhIGRhdGEuIFdlJ2xsIGdldCBtb3JlIGRhdGFcbiAgLy8gICB3aGVuIHRoZSBzdHJlYW0gY29uc3VtZXIgY2FsbHMgcmVhZCgpIGluc3RlYWQuXG4gIC8vIC0gTm8gZGF0YSBpbiB0aGUgYnVmZmVyLCBhbmQgdGhlIHN0cmVhbSBpcyBpbiBmbG93aW5nIG1vZGUuIEluIHRoaXMgbW9kZVxuICAvLyAgIHRoZSBsb29wIGJlbG93IGlzIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyByZWFkKCkgaXMgY2FsbGVkLiBGYWlsaW5nIHRvXG4gIC8vICAgY2FsbCByZWFkIGhlcmUgd291bGQgYWJvcnQgdGhlIGZsb3cgYW5kIHRoZXJlJ3Mgbm8gb3RoZXIgbWVjaGFuaXNtIGZvclxuICAvLyAgIGNvbnRpbnVpbmcgdGhlIGZsb3cgaWYgdGhlIHN0cmVhbSBjb25zdW1lciBoYXMganVzdCBzdWJzY3JpYmVkIHRvIHRoZVxuICAvLyAgICdkYXRhJyBldmVudC5cbiAgLy9cbiAgLy8gSW4gYWRkaXRpb24gdG8gdGhlIGFib3ZlIGNvbmRpdGlvbnMgdG8ga2VlcCByZWFkaW5nIGRhdGEsIHRoZSBmb2xsb3dpbmdcbiAgLy8gY29uZGl0aW9ucyBwcmV2ZW50IHRoZSBkYXRhIGZyb20gYmVpbmcgcmVhZDpcbiAgLy8gLSBUaGUgc3RyZWFtIGhhcyBlbmRlZCAoc3RhdGUuZW5kZWQpLlxuICAvLyAtIFRoZXJlIGlzIGFscmVhZHkgYSBwZW5kaW5nICdyZWFkJyBvcGVyYXRpb24gKHN0YXRlLnJlYWRpbmcpLiBUaGlzIGlzIGFcbiAgLy8gICBjYXNlIHdoZXJlIHRoZSBzdHJlYW0gaGFzIGNhbGxlZCB0aGUgaW1wbGVtZW50YXRpb24gZGVmaW5lZCBfcmVhZCgpXG4gIC8vICAgbWV0aG9kLCBidXQgdGhleSBhcmUgcHJvY2Vzc2luZyB0aGUgY2FsbCBhc3luY2hyb25vdXNseSBhbmQgaGF2ZSBfbm90X1xuICAvLyAgIGNhbGxlZCBwdXNoKCkgd2l0aCBuZXcgZGF0YS4gSW4gdGhpcyBjYXNlIHdlIHNraXAgcGVyZm9ybWluZyBtb3JlXG4gIC8vICAgcmVhZCgpcy4gVGhlIGV4ZWN1dGlvbiBlbmRzIGluIHRoaXMgbWV0aG9kIGFnYWluIGFmdGVyIHRoZSBfcmVhZCgpIGVuZHNcbiAgLy8gICB1cCBjYWxsaW5nIHB1c2goKSB3aXRoIG1vcmUgZGF0YS5cbiAgd2hpbGUgKFxuICAgICFzdGF0ZS5yZWFkaW5nICYmXG4gICAgIXN0YXRlLmVuZGVkICYmXG4gICAgKHN0YXRlLmxlbmd0aCA8IHN0YXRlLmhpZ2hXYXRlck1hcmsgfHwgKHN0YXRlLmZsb3dpbmcgJiYgc3RhdGUubGVuZ3RoID09PSAwKSlcbiAgKSB7XG4gICAgY29uc3QgbGVuID0gc3RhdGUubGVuZ3RoXG4gICAgZGVidWcoJ21heWJlUmVhZE1vcmUgcmVhZCAwJylcbiAgICBzdHJlYW0ucmVhZCgwKVxuICAgIGlmIChsZW4gPT09IHN0YXRlLmxlbmd0aClcbiAgICAgIC8vIERpZG4ndCBnZXQgYW55IGRhdGEsIHN0b3Agc3Bpbm5pbmcuXG4gICAgICBicmVha1xuICB9XG4gIHN0YXRlLnJlYWRpbmdNb3JlID0gZmFsc2Vcbn1cblxuLy8gQWJzdHJhY3QgbWV0aG9kLiAgdG8gYmUgb3ZlcnJpZGRlbiBpbiBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBjbGFzc2VzLlxuLy8gY2FsbCBjYihlciwgZGF0YSkgd2hlcmUgZGF0YSBpcyA8PSBuIGluIGxlbmd0aC5cbi8vIGZvciB2aXJ0dWFsIChub24tc3RyaW5nLCBub24tYnVmZmVyKSBzdHJlYW1zLCBcImxlbmd0aFwiIGlzIHNvbWV3aGF0XG4vLyBhcmJpdHJhcnksIGFuZCBwZXJoYXBzIG5vdCB2ZXJ5IG1lYW5pbmdmdWwuXG5SZWFkYWJsZS5wcm90b3R5cGUuX3JlYWQgPSBmdW5jdGlvbiAobikge1xuICB0aHJvdyBuZXcgRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQoJ19yZWFkKCknKVxufVxuUmVhZGFibGUucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbiAoZGVzdCwgcGlwZU9wdHMpIHtcbiAgY29uc3Qgc3JjID0gdGhpc1xuICBjb25zdCBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGVcbiAgaWYgKHN0YXRlLnBpcGVzLmxlbmd0aCA9PT0gMSkge1xuICAgIGlmICghc3RhdGUubXVsdGlBd2FpdERyYWluKSB7XG4gICAgICBzdGF0ZS5tdWx0aUF3YWl0RHJhaW4gPSB0cnVlXG4gICAgICBzdGF0ZS5hd2FpdERyYWluV3JpdGVycyA9IG5ldyBTYWZlU2V0KHN0YXRlLmF3YWl0RHJhaW5Xcml0ZXJzID8gW3N0YXRlLmF3YWl0RHJhaW5Xcml0ZXJzXSA6IFtdKVxuICAgIH1cbiAgfVxuICBzdGF0ZS5waXBlcy5wdXNoKGRlc3QpXG4gIGRlYnVnKCdwaXBlIGNvdW50PSVkIG9wdHM9JWonLCBzdGF0ZS5waXBlcy5sZW5ndGgsIHBpcGVPcHRzKVxuICBjb25zdCBkb0VuZCA9ICghcGlwZU9wdHMgfHwgcGlwZU9wdHMuZW5kICE9PSBmYWxzZSkgJiYgZGVzdCAhPT0gcHJvY2Vzcy5zdGRvdXQgJiYgZGVzdCAhPT0gcHJvY2Vzcy5zdGRlcnJcbiAgY29uc3QgZW5kRm4gPSBkb0VuZCA/IG9uZW5kIDogdW5waXBlXG4gIGlmIChzdGF0ZS5lbmRFbWl0dGVkKSBwcm9jZXNzLm5leHRUaWNrKGVuZEZuKVxuICBlbHNlIHNyYy5vbmNlKCdlbmQnLCBlbmRGbilcbiAgZGVzdC5vbigndW5waXBlJywgb251bnBpcGUpXG4gIGZ1bmN0aW9uIG9udW5waXBlKHJlYWRhYmxlLCB1bnBpcGVJbmZvKSB7XG4gICAgZGVidWcoJ29udW5waXBlJylcbiAgICBpZiAocmVhZGFibGUgPT09IHNyYykge1xuICAgICAgaWYgKHVucGlwZUluZm8gJiYgdW5waXBlSW5mby5oYXNVbnBpcGVkID09PSBmYWxzZSkge1xuICAgICAgICB1bnBpcGVJbmZvLmhhc1VucGlwZWQgPSB0cnVlXG4gICAgICAgIGNsZWFudXAoKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBvbmVuZCgpIHtcbiAgICBkZWJ1Zygnb25lbmQnKVxuICAgIGRlc3QuZW5kKClcbiAgfVxuICBsZXQgb25kcmFpblxuICBsZXQgY2xlYW5lZFVwID0gZmFsc2VcbiAgZnVuY3Rpb24gY2xlYW51cCgpIHtcbiAgICBkZWJ1ZygnY2xlYW51cCcpXG4gICAgLy8gQ2xlYW51cCBldmVudCBoYW5kbGVycyBvbmNlIHRoZSBwaXBlIGlzIGJyb2tlbi5cbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uY2xvc2UpXG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZmluaXNoJywgb25maW5pc2gpXG4gICAgaWYgKG9uZHJhaW4pIHtcbiAgICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2RyYWluJywgb25kcmFpbilcbiAgICB9XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbmVycm9yKVxuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ3VucGlwZScsIG9udW5waXBlKVxuICAgIHNyYy5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25lbmQpXG4gICAgc3JjLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCB1bnBpcGUpXG4gICAgc3JjLnJlbW92ZUxpc3RlbmVyKCdkYXRhJywgb25kYXRhKVxuICAgIGNsZWFuZWRVcCA9IHRydWVcblxuICAgIC8vIElmIHRoZSByZWFkZXIgaXMgd2FpdGluZyBmb3IgYSBkcmFpbiBldmVudCBmcm9tIHRoaXNcbiAgICAvLyBzcGVjaWZpYyB3cml0ZXIsIHRoZW4gaXQgd291bGQgY2F1c2UgaXQgdG8gbmV2ZXIgc3RhcnRcbiAgICAvLyBmbG93aW5nIGFnYWluLlxuICAgIC8vIFNvLCBpZiB0aGlzIGlzIGF3YWl0aW5nIGEgZHJhaW4sIHRoZW4gd2UganVzdCBjYWxsIGl0IG5vdy5cbiAgICAvLyBJZiB3ZSBkb24ndCBrbm93LCB0aGVuIGFzc3VtZSB0aGF0IHdlIGFyZSB3YWl0aW5nIGZvciBvbmUuXG4gICAgaWYgKG9uZHJhaW4gJiYgc3RhdGUuYXdhaXREcmFpbldyaXRlcnMgJiYgKCFkZXN0Ll93cml0YWJsZVN0YXRlIHx8IGRlc3QuX3dyaXRhYmxlU3RhdGUubmVlZERyYWluKSkgb25kcmFpbigpXG4gIH1cbiAgZnVuY3Rpb24gcGF1c2UoKSB7XG4gICAgLy8gSWYgdGhlIHVzZXIgdW5waXBlZCBkdXJpbmcgYGRlc3Qud3JpdGUoKWAsIGl0IGlzIHBvc3NpYmxlXG4gICAgLy8gdG8gZ2V0IHN0dWNrIGluIGEgcGVybWFuZW50bHkgcGF1c2VkIHN0YXRlIGlmIHRoYXQgd3JpdGVcbiAgICAvLyBhbHNvIHJldHVybmVkIGZhbHNlLlxuICAgIC8vID0+IENoZWNrIHdoZXRoZXIgYGRlc3RgIGlzIHN0aWxsIGEgcGlwaW5nIGRlc3RpbmF0aW9uLlxuICAgIGlmICghY2xlYW5lZFVwKSB7XG4gICAgICBpZiAoc3RhdGUucGlwZXMubGVuZ3RoID09PSAxICYmIHN0YXRlLnBpcGVzWzBdID09PSBkZXN0KSB7XG4gICAgICAgIGRlYnVnKCdmYWxzZSB3cml0ZSByZXNwb25zZSwgcGF1c2UnLCAwKVxuICAgICAgICBzdGF0ZS5hd2FpdERyYWluV3JpdGVycyA9IGRlc3RcbiAgICAgICAgc3RhdGUubXVsdGlBd2FpdERyYWluID0gZmFsc2VcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUucGlwZXMubGVuZ3RoID4gMSAmJiBzdGF0ZS5waXBlcy5pbmNsdWRlcyhkZXN0KSkge1xuICAgICAgICBkZWJ1ZygnZmFsc2Ugd3JpdGUgcmVzcG9uc2UsIHBhdXNlJywgc3RhdGUuYXdhaXREcmFpbldyaXRlcnMuc2l6ZSlcbiAgICAgICAgc3RhdGUuYXdhaXREcmFpbldyaXRlcnMuYWRkKGRlc3QpXG4gICAgICB9XG4gICAgICBzcmMucGF1c2UoKVxuICAgIH1cbiAgICBpZiAoIW9uZHJhaW4pIHtcbiAgICAgIC8vIFdoZW4gdGhlIGRlc3QgZHJhaW5zLCBpdCByZWR1Y2VzIHRoZSBhd2FpdERyYWluIGNvdW50ZXJcbiAgICAgIC8vIG9uIHRoZSBzb3VyY2UuICBUaGlzIHdvdWxkIGJlIG1vcmUgZWxlZ2FudCB3aXRoIGEgLm9uY2UoKVxuICAgICAgLy8gaGFuZGxlciBpbiBmbG93KCksIGJ1dCBhZGRpbmcgYW5kIHJlbW92aW5nIHJlcGVhdGVkbHkgaXNcbiAgICAgIC8vIHRvbyBzbG93LlxuICAgICAgb25kcmFpbiA9IHBpcGVPbkRyYWluKHNyYywgZGVzdClcbiAgICAgIGRlc3Qub24oJ2RyYWluJywgb25kcmFpbilcbiAgICB9XG4gIH1cbiAgc3JjLm9uKCdkYXRhJywgb25kYXRhKVxuICBmdW5jdGlvbiBvbmRhdGEoY2h1bmspIHtcbiAgICBkZWJ1Zygnb25kYXRhJylcbiAgICBjb25zdCByZXQgPSBkZXN0LndyaXRlKGNodW5rKVxuICAgIGRlYnVnKCdkZXN0LndyaXRlJywgcmV0KVxuICAgIGlmIChyZXQgPT09IGZhbHNlKSB7XG4gICAgICBwYXVzZSgpXG4gICAgfVxuICB9XG5cbiAgLy8gSWYgdGhlIGRlc3QgaGFzIGFuIGVycm9yLCB0aGVuIHN0b3AgcGlwaW5nIGludG8gaXQuXG4gIC8vIEhvd2V2ZXIsIGRvbid0IHN1cHByZXNzIHRoZSB0aHJvd2luZyBiZWhhdmlvciBmb3IgdGhpcy5cbiAgZnVuY3Rpb24gb25lcnJvcihlcikge1xuICAgIGRlYnVnKCdvbmVycm9yJywgZXIpXG4gICAgdW5waXBlKClcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uZXJyb3IpXG4gICAgaWYgKGRlc3QubGlzdGVuZXJDb3VudCgnZXJyb3InKSA9PT0gMCkge1xuICAgICAgY29uc3QgcyA9IGRlc3QuX3dyaXRhYmxlU3RhdGUgfHwgZGVzdC5fcmVhZGFibGVTdGF0ZVxuICAgICAgaWYgKHMgJiYgIXMuZXJyb3JFbWl0dGVkKSB7XG4gICAgICAgIC8vIFVzZXIgaW5jb3JyZWN0bHkgZW1pdHRlZCAnZXJyb3InIGRpcmVjdGx5IG9uIHRoZSBzdHJlYW0uXG4gICAgICAgIGVycm9yT3JEZXN0cm95KGRlc3QsIGVyKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVzdC5lbWl0KCdlcnJvcicsIGVyKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIE1ha2Ugc3VyZSBvdXIgZXJyb3IgaGFuZGxlciBpcyBhdHRhY2hlZCBiZWZvcmUgdXNlcmxhbmQgb25lcy5cbiAgcHJlcGVuZExpc3RlbmVyKGRlc3QsICdlcnJvcicsIG9uZXJyb3IpXG5cbiAgLy8gQm90aCBjbG9zZSBhbmQgZmluaXNoIHNob3VsZCB0cmlnZ2VyIHVucGlwZSwgYnV0IG9ubHkgb25jZS5cbiAgZnVuY3Rpb24gb25jbG9zZSgpIHtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdmaW5pc2gnLCBvbmZpbmlzaClcbiAgICB1bnBpcGUoKVxuICB9XG4gIGRlc3Qub25jZSgnY2xvc2UnLCBvbmNsb3NlKVxuICBmdW5jdGlvbiBvbmZpbmlzaCgpIHtcbiAgICBkZWJ1Zygnb25maW5pc2gnKVxuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgb25jbG9zZSlcbiAgICB1bnBpcGUoKVxuICB9XG4gIGRlc3Qub25jZSgnZmluaXNoJywgb25maW5pc2gpXG4gIGZ1bmN0aW9uIHVucGlwZSgpIHtcbiAgICBkZWJ1ZygndW5waXBlJylcbiAgICBzcmMudW5waXBlKGRlc3QpXG4gIH1cblxuICAvLyBUZWxsIHRoZSBkZXN0IHRoYXQgaXQncyBiZWluZyBwaXBlZCB0by5cbiAgZGVzdC5lbWl0KCdwaXBlJywgc3JjKVxuXG4gIC8vIFN0YXJ0IHRoZSBmbG93IGlmIGl0IGhhc24ndCBiZWVuIHN0YXJ0ZWQgYWxyZWFkeS5cblxuICBpZiAoZGVzdC53cml0YWJsZU5lZWREcmFpbiA9PT0gdHJ1ZSkge1xuICAgIHBhdXNlKClcbiAgfSBlbHNlIGlmICghc3RhdGUuZmxvd2luZykge1xuICAgIGRlYnVnKCdwaXBlIHJlc3VtZScpXG4gICAgc3JjLnJlc3VtZSgpXG4gIH1cbiAgcmV0dXJuIGRlc3Rcbn1cbmZ1bmN0aW9uIHBpcGVPbkRyYWluKHNyYywgZGVzdCkge1xuICByZXR1cm4gZnVuY3Rpb24gcGlwZU9uRHJhaW5GdW5jdGlvblJlc3VsdCgpIHtcbiAgICBjb25zdCBzdGF0ZSA9IHNyYy5fcmVhZGFibGVTdGF0ZVxuXG4gICAgLy8gYG9uZHJhaW5gIHdpbGwgY2FsbCBkaXJlY3RseSxcbiAgICAvLyBgdGhpc2AgbWF5YmUgbm90IGEgcmVmZXJlbmNlIHRvIGRlc3QsXG4gICAgLy8gc28gd2UgdXNlIHRoZSByZWFsIGRlc3QgaGVyZS5cbiAgICBpZiAoc3RhdGUuYXdhaXREcmFpbldyaXRlcnMgPT09IGRlc3QpIHtcbiAgICAgIGRlYnVnKCdwaXBlT25EcmFpbicsIDEpXG4gICAgICBzdGF0ZS5hd2FpdERyYWluV3JpdGVycyA9IG51bGxcbiAgICB9IGVsc2UgaWYgKHN0YXRlLm11bHRpQXdhaXREcmFpbikge1xuICAgICAgZGVidWcoJ3BpcGVPbkRyYWluJywgc3RhdGUuYXdhaXREcmFpbldyaXRlcnMuc2l6ZSlcbiAgICAgIHN0YXRlLmF3YWl0RHJhaW5Xcml0ZXJzLmRlbGV0ZShkZXN0KVxuICAgIH1cbiAgICBpZiAoKCFzdGF0ZS5hd2FpdERyYWluV3JpdGVycyB8fCBzdGF0ZS5hd2FpdERyYWluV3JpdGVycy5zaXplID09PSAwKSAmJiBzcmMubGlzdGVuZXJDb3VudCgnZGF0YScpKSB7XG4gICAgICBzcmMucmVzdW1lKClcbiAgICB9XG4gIH1cbn1cblJlYWRhYmxlLnByb3RvdHlwZS51bnBpcGUgPSBmdW5jdGlvbiAoZGVzdCkge1xuICBjb25zdCBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGVcbiAgY29uc3QgdW5waXBlSW5mbyA9IHtcbiAgICBoYXNVbnBpcGVkOiBmYWxzZVxuICB9XG5cbiAgLy8gSWYgd2UncmUgbm90IHBpcGluZyBhbnl3aGVyZSwgdGhlbiBkbyBub3RoaW5nLlxuICBpZiAoc3RhdGUucGlwZXMubGVuZ3RoID09PSAwKSByZXR1cm4gdGhpc1xuICBpZiAoIWRlc3QpIHtcbiAgICAvLyByZW1vdmUgYWxsLlxuICAgIGNvbnN0IGRlc3RzID0gc3RhdGUucGlwZXNcbiAgICBzdGF0ZS5waXBlcyA9IFtdXG4gICAgdGhpcy5wYXVzZSgpXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZXN0cy5sZW5ndGg7IGkrKylcbiAgICAgIGRlc3RzW2ldLmVtaXQoJ3VucGlwZScsIHRoaXMsIHtcbiAgICAgICAgaGFzVW5waXBlZDogZmFsc2VcbiAgICAgIH0pXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8vIFRyeSB0byBmaW5kIHRoZSByaWdodCBvbmUuXG4gIGNvbnN0IGluZGV4ID0gQXJyYXlQcm90b3R5cGVJbmRleE9mKHN0YXRlLnBpcGVzLCBkZXN0KVxuICBpZiAoaW5kZXggPT09IC0xKSByZXR1cm4gdGhpc1xuICBzdGF0ZS5waXBlcy5zcGxpY2UoaW5kZXgsIDEpXG4gIGlmIChzdGF0ZS5waXBlcy5sZW5ndGggPT09IDApIHRoaXMucGF1c2UoKVxuICBkZXN0LmVtaXQoJ3VucGlwZScsIHRoaXMsIHVucGlwZUluZm8pXG4gIHJldHVybiB0aGlzXG59XG5cbi8vIFNldCB1cCBkYXRhIGV2ZW50cyBpZiB0aGV5IGFyZSBhc2tlZCBmb3Jcbi8vIEVuc3VyZSByZWFkYWJsZSBsaXN0ZW5lcnMgZXZlbnR1YWxseSBnZXQgc29tZXRoaW5nLlxuUmVhZGFibGUucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gKGV2LCBmbikge1xuICBjb25zdCByZXMgPSBTdHJlYW0ucHJvdG90eXBlLm9uLmNhbGwodGhpcywgZXYsIGZuKVxuICBjb25zdCBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGVcbiAgaWYgKGV2ID09PSAnZGF0YScpIHtcbiAgICAvLyBVcGRhdGUgcmVhZGFibGVMaXN0ZW5pbmcgc28gdGhhdCByZXN1bWUoKSBtYXkgYmUgYSBuby1vcFxuICAgIC8vIGEgZmV3IGxpbmVzIGRvd24uIFRoaXMgaXMgbmVlZGVkIHRvIHN1cHBvcnQgb25jZSgncmVhZGFibGUnKS5cbiAgICBzdGF0ZS5yZWFkYWJsZUxpc3RlbmluZyA9IHRoaXMubGlzdGVuZXJDb3VudCgncmVhZGFibGUnKSA+IDBcblxuICAgIC8vIFRyeSBzdGFydCBmbG93aW5nIG9uIG5leHQgdGljayBpZiBzdHJlYW0gaXNuJ3QgZXhwbGljaXRseSBwYXVzZWQuXG4gICAgaWYgKHN0YXRlLmZsb3dpbmcgIT09IGZhbHNlKSB0aGlzLnJlc3VtZSgpXG4gIH0gZWxzZSBpZiAoZXYgPT09ICdyZWFkYWJsZScpIHtcbiAgICBpZiAoIXN0YXRlLmVuZEVtaXR0ZWQgJiYgIXN0YXRlLnJlYWRhYmxlTGlzdGVuaW5nKSB7XG4gICAgICBzdGF0ZS5yZWFkYWJsZUxpc3RlbmluZyA9IHN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWVcbiAgICAgIHN0YXRlLmZsb3dpbmcgPSBmYWxzZVxuICAgICAgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gZmFsc2VcbiAgICAgIGRlYnVnKCdvbiByZWFkYWJsZScsIHN0YXRlLmxlbmd0aCwgc3RhdGUucmVhZGluZylcbiAgICAgIGlmIChzdGF0ZS5sZW5ndGgpIHtcbiAgICAgICAgZW1pdFJlYWRhYmxlKHRoaXMpXG4gICAgICB9IGVsc2UgaWYgKCFzdGF0ZS5yZWFkaW5nKSB7XG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soblJlYWRpbmdOZXh0VGljaywgdGhpcylcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuUmVhZGFibGUucHJvdG90eXBlLmFkZExpc3RlbmVyID0gUmVhZGFibGUucHJvdG90eXBlLm9uXG5SZWFkYWJsZS5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPSBmdW5jdGlvbiAoZXYsIGZuKSB7XG4gIGNvbnN0IHJlcyA9IFN0cmVhbS5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIuY2FsbCh0aGlzLCBldiwgZm4pXG4gIGlmIChldiA9PT0gJ3JlYWRhYmxlJykge1xuICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUgaXMgc29tZW9uZSBzdGlsbCBsaXN0ZW5pbmcgdG9cbiAgICAvLyByZWFkYWJsZSBhbmQgcmVzZXQgdGhlIHN0YXRlLiBIb3dldmVyIHRoaXMgbmVlZHMgdG8gaGFwcGVuXG4gICAgLy8gYWZ0ZXIgcmVhZGFibGUgaGFzIGJlZW4gZW1pdHRlZCBidXQgYmVmb3JlIEkvTyAobmV4dFRpY2spIHRvXG4gICAgLy8gc3VwcG9ydCBvbmNlKCdyZWFkYWJsZScsIGZuKSBjeWNsZXMuIFRoaXMgbWVhbnMgdGhhdCBjYWxsaW5nXG4gICAgLy8gcmVzdW1lIHdpdGhpbiB0aGUgc2FtZSB0aWNrIHdpbGwgaGF2ZSBub1xuICAgIC8vIGVmZmVjdC5cbiAgICBwcm9jZXNzLm5leHRUaWNrKHVwZGF0ZVJlYWRhYmxlTGlzdGVuaW5nLCB0aGlzKVxuICB9XG4gIHJldHVybiByZXNcbn1cblJlYWRhYmxlLnByb3RvdHlwZS5vZmYgPSBSZWFkYWJsZS5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXJcblJlYWRhYmxlLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBmdW5jdGlvbiAoZXYpIHtcbiAgY29uc3QgcmVzID0gU3RyZWFtLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICBpZiAoZXYgPT09ICdyZWFkYWJsZScgfHwgZXYgPT09IHVuZGVmaW5lZCkge1xuICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUgaXMgc29tZW9uZSBzdGlsbCBsaXN0ZW5pbmcgdG9cbiAgICAvLyByZWFkYWJsZSBhbmQgcmVzZXQgdGhlIHN0YXRlLiBIb3dldmVyIHRoaXMgbmVlZHMgdG8gaGFwcGVuXG4gICAgLy8gYWZ0ZXIgcmVhZGFibGUgaGFzIGJlZW4gZW1pdHRlZCBidXQgYmVmb3JlIEkvTyAobmV4dFRpY2spIHRvXG4gICAgLy8gc3VwcG9ydCBvbmNlKCdyZWFkYWJsZScsIGZuKSBjeWNsZXMuIFRoaXMgbWVhbnMgdGhhdCBjYWxsaW5nXG4gICAgLy8gcmVzdW1lIHdpdGhpbiB0aGUgc2FtZSB0aWNrIHdpbGwgaGF2ZSBub1xuICAgIC8vIGVmZmVjdC5cbiAgICBwcm9jZXNzLm5leHRUaWNrKHVwZGF0ZVJlYWRhYmxlTGlzdGVuaW5nLCB0aGlzKVxuICB9XG4gIHJldHVybiByZXNcbn1cbmZ1bmN0aW9uIHVwZGF0ZVJlYWRhYmxlTGlzdGVuaW5nKHNlbGYpIHtcbiAgY29uc3Qgc3RhdGUgPSBzZWxmLl9yZWFkYWJsZVN0YXRlXG4gIHN0YXRlLnJlYWRhYmxlTGlzdGVuaW5nID0gc2VsZi5saXN0ZW5lckNvdW50KCdyZWFkYWJsZScpID4gMFxuICBpZiAoc3RhdGUucmVzdW1lU2NoZWR1bGVkICYmIHN0YXRlW2tQYXVzZWRdID09PSBmYWxzZSkge1xuICAgIC8vIEZsb3dpbmcgbmVlZHMgdG8gYmUgc2V0IHRvIHRydWUgbm93LCBvdGhlcndpc2VcbiAgICAvLyB0aGUgdXBjb21pbmcgcmVzdW1lIHdpbGwgbm90IGZsb3cuXG4gICAgc3RhdGUuZmxvd2luZyA9IHRydWVcblxuICAgIC8vIENydWRlIHdheSB0byBjaGVjayBpZiB3ZSBzaG91bGQgcmVzdW1lLlxuICB9IGVsc2UgaWYgKHNlbGYubGlzdGVuZXJDb3VudCgnZGF0YScpID4gMCkge1xuICAgIHNlbGYucmVzdW1lKClcbiAgfSBlbHNlIGlmICghc3RhdGUucmVhZGFibGVMaXN0ZW5pbmcpIHtcbiAgICBzdGF0ZS5mbG93aW5nID0gbnVsbFxuICB9XG59XG5mdW5jdGlvbiBuUmVhZGluZ05leHRUaWNrKHNlbGYpIHtcbiAgZGVidWcoJ3JlYWRhYmxlIG5leHR0aWNrIHJlYWQgMCcpXG4gIHNlbGYucmVhZCgwKVxufVxuXG4vLyBwYXVzZSgpIGFuZCByZXN1bWUoKSBhcmUgcmVtbmFudHMgb2YgdGhlIGxlZ2FjeSByZWFkYWJsZSBzdHJlYW0gQVBJXG4vLyBJZiB0aGUgdXNlciB1c2VzIHRoZW0sIHRoZW4gc3dpdGNoIGludG8gb2xkIG1vZGUuXG5SZWFkYWJsZS5wcm90b3R5cGUucmVzdW1lID0gZnVuY3Rpb24gKCkge1xuICBjb25zdCBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGVcbiAgaWYgKCFzdGF0ZS5mbG93aW5nKSB7XG4gICAgZGVidWcoJ3Jlc3VtZScpXG4gICAgLy8gV2UgZmxvdyBvbmx5IGlmIHRoZXJlIGlzIG5vIG9uZSBsaXN0ZW5pbmdcbiAgICAvLyBmb3IgcmVhZGFibGUsIGJ1dCB3ZSBzdGlsbCBoYXZlIHRvIGNhbGxcbiAgICAvLyByZXN1bWUoKS5cbiAgICBzdGF0ZS5mbG93aW5nID0gIXN0YXRlLnJlYWRhYmxlTGlzdGVuaW5nXG4gICAgcmVzdW1lKHRoaXMsIHN0YXRlKVxuICB9XG4gIHN0YXRlW2tQYXVzZWRdID0gZmFsc2VcbiAgcmV0dXJuIHRoaXNcbn1cbmZ1bmN0aW9uIHJlc3VtZShzdHJlYW0sIHN0YXRlKSB7XG4gIGlmICghc3RhdGUucmVzdW1lU2NoZWR1bGVkKSB7XG4gICAgc3RhdGUucmVzdW1lU2NoZWR1bGVkID0gdHJ1ZVxuICAgIHByb2Nlc3MubmV4dFRpY2socmVzdW1lXywgc3RyZWFtLCBzdGF0ZSlcbiAgfVxufVxuZnVuY3Rpb24gcmVzdW1lXyhzdHJlYW0sIHN0YXRlKSB7XG4gIGRlYnVnKCdyZXN1bWUnLCBzdGF0ZS5yZWFkaW5nKVxuICBpZiAoIXN0YXRlLnJlYWRpbmcpIHtcbiAgICBzdHJlYW0ucmVhZCgwKVxuICB9XG4gIHN0YXRlLnJlc3VtZVNjaGVkdWxlZCA9IGZhbHNlXG4gIHN0cmVhbS5lbWl0KCdyZXN1bWUnKVxuICBmbG93KHN0cmVhbSlcbiAgaWYgKHN0YXRlLmZsb3dpbmcgJiYgIXN0YXRlLnJlYWRpbmcpIHN0cmVhbS5yZWFkKDApXG59XG5SZWFkYWJsZS5wcm90b3R5cGUucGF1c2UgPSBmdW5jdGlvbiAoKSB7XG4gIGRlYnVnKCdjYWxsIHBhdXNlIGZsb3dpbmc9JWonLCB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcpXG4gIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcgIT09IGZhbHNlKSB7XG4gICAgZGVidWcoJ3BhdXNlJylcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcgPSBmYWxzZVxuICAgIHRoaXMuZW1pdCgncGF1c2UnKVxuICB9XG4gIHRoaXMuX3JlYWRhYmxlU3RhdGVba1BhdXNlZF0gPSB0cnVlXG4gIHJldHVybiB0aGlzXG59XG5mdW5jdGlvbiBmbG93KHN0cmVhbSkge1xuICBjb25zdCBzdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZVxuICBkZWJ1ZygnZmxvdycsIHN0YXRlLmZsb3dpbmcpXG4gIHdoaWxlIChzdGF0ZS5mbG93aW5nICYmIHN0cmVhbS5yZWFkKCkgIT09IG51bGwpO1xufVxuXG4vLyBXcmFwIGFuIG9sZC1zdHlsZSBzdHJlYW0gYXMgdGhlIGFzeW5jIGRhdGEgc291cmNlLlxuLy8gVGhpcyBpcyAqbm90KiBwYXJ0IG9mIHRoZSByZWFkYWJsZSBzdHJlYW0gaW50ZXJmYWNlLlxuLy8gSXQgaXMgYW4gdWdseSB1bmZvcnR1bmF0ZSBtZXNzIG9mIGhpc3RvcnkuXG5SZWFkYWJsZS5wcm90b3R5cGUud3JhcCA9IGZ1bmN0aW9uIChzdHJlYW0pIHtcbiAgbGV0IHBhdXNlZCA9IGZhbHNlXG5cbiAgLy8gVE9ETyAocm9uYWcpOiBTaG91bGQgdGhpcy5kZXN0cm95KGVycikgZW1pdFxuICAvLyAnZXJyb3InIG9uIHRoZSB3cmFwcGVkIHN0cmVhbT8gV291bGQgcmVxdWlyZVxuICAvLyBhIHN0YXRpYyBmYWN0b3J5IG1ldGhvZCwgZS5nLiBSZWFkYWJsZS53cmFwKHN0cmVhbSkuXG5cbiAgc3RyZWFtLm9uKCdkYXRhJywgKGNodW5rKSA9PiB7XG4gICAgaWYgKCF0aGlzLnB1c2goY2h1bmspICYmIHN0cmVhbS5wYXVzZSkge1xuICAgICAgcGF1c2VkID0gdHJ1ZVxuICAgICAgc3RyZWFtLnBhdXNlKClcbiAgICB9XG4gIH0pXG4gIHN0cmVhbS5vbignZW5kJywgKCkgPT4ge1xuICAgIHRoaXMucHVzaChudWxsKVxuICB9KVxuICBzdHJlYW0ub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgIGVycm9yT3JEZXN0cm95KHRoaXMsIGVycilcbiAgfSlcbiAgc3RyZWFtLm9uKCdjbG9zZScsICgpID0+IHtcbiAgICB0aGlzLmRlc3Ryb3koKVxuICB9KVxuICBzdHJlYW0ub24oJ2Rlc3Ryb3knLCAoKSA9PiB7XG4gICAgdGhpcy5kZXN0cm95KClcbiAgfSlcbiAgdGhpcy5fcmVhZCA9ICgpID0+IHtcbiAgICBpZiAocGF1c2VkICYmIHN0cmVhbS5yZXN1bWUpIHtcbiAgICAgIHBhdXNlZCA9IGZhbHNlXG4gICAgICBzdHJlYW0ucmVzdW1lKClcbiAgICB9XG4gIH1cblxuICAvLyBQcm94eSBhbGwgdGhlIG90aGVyIG1ldGhvZHMuIEltcG9ydGFudCB3aGVuIHdyYXBwaW5nIGZpbHRlcnMgYW5kIGR1cGxleGVzLlxuICBjb25zdCBzdHJlYW1LZXlzID0gT2JqZWN0S2V5cyhzdHJlYW0pXG4gIGZvciAobGV0IGogPSAxOyBqIDwgc3RyZWFtS2V5cy5sZW5ndGg7IGorKykge1xuICAgIGNvbnN0IGkgPSBzdHJlYW1LZXlzW2pdXG4gICAgaWYgKHRoaXNbaV0gPT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygc3RyZWFtW2ldID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzW2ldID0gc3RyZWFtW2ldLmJpbmQoc3RyZWFtKVxuICAgIH1cbiAgfVxuICByZXR1cm4gdGhpc1xufVxuUmVhZGFibGUucHJvdG90eXBlW1N5bWJvbEFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gc3RyZWFtVG9Bc3luY0l0ZXJhdG9yKHRoaXMpXG59XG5SZWFkYWJsZS5wcm90b3R5cGUuaXRlcmF0b3IgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFsaWRhdGVPYmplY3Qob3B0aW9ucywgJ29wdGlvbnMnKVxuICB9XG4gIHJldHVybiBzdHJlYW1Ub0FzeW5jSXRlcmF0b3IodGhpcywgb3B0aW9ucylcbn1cbmZ1bmN0aW9uIHN0cmVhbVRvQXN5bmNJdGVyYXRvcihzdHJlYW0sIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiBzdHJlYW0ucmVhZCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHN0cmVhbSA9IFJlYWRhYmxlLndyYXAoc3RyZWFtLCB7XG4gICAgICBvYmplY3RNb2RlOiB0cnVlXG4gICAgfSlcbiAgfVxuICBjb25zdCBpdGVyID0gY3JlYXRlQXN5bmNJdGVyYXRvcihzdHJlYW0sIG9wdGlvbnMpXG4gIGl0ZXIuc3RyZWFtID0gc3RyZWFtXG4gIHJldHVybiBpdGVyXG59XG5hc3luYyBmdW5jdGlvbiogY3JlYXRlQXN5bmNJdGVyYXRvcihzdHJlYW0sIG9wdGlvbnMpIHtcbiAgbGV0IGNhbGxiYWNrID0gbm9wXG4gIGZ1bmN0aW9uIG5leHQocmVzb2x2ZSkge1xuICAgIGlmICh0aGlzID09PSBzdHJlYW0pIHtcbiAgICAgIGNhbGxiYWNrKClcbiAgICAgIGNhbGxiYWNrID0gbm9wXG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbGxiYWNrID0gcmVzb2x2ZVxuICAgIH1cbiAgfVxuICBzdHJlYW0ub24oJ3JlYWRhYmxlJywgbmV4dClcbiAgbGV0IGVycm9yXG4gIGNvbnN0IGNsZWFudXAgPSBlb3MoXG4gICAgc3RyZWFtLFxuICAgIHtcbiAgICAgIHdyaXRhYmxlOiBmYWxzZVxuICAgIH0sXG4gICAgKGVycikgPT4ge1xuICAgICAgZXJyb3IgPSBlcnIgPyBhZ2dyZWdhdGVUd29FcnJvcnMoZXJyb3IsIGVycikgOiBudWxsXG4gICAgICBjYWxsYmFjaygpXG4gICAgICBjYWxsYmFjayA9IG5vcFxuICAgIH1cbiAgKVxuICB0cnkge1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCBjaHVuayA9IHN0cmVhbS5kZXN0cm95ZWQgPyBudWxsIDogc3RyZWFtLnJlYWQoKVxuICAgICAgaWYgKGNodW5rICE9PSBudWxsKSB7XG4gICAgICAgIHlpZWxkIGNodW5rXG4gICAgICB9IGVsc2UgaWYgKGVycm9yKSB7XG4gICAgICAgIHRocm93IGVycm9yXG4gICAgICB9IGVsc2UgaWYgKGVycm9yID09PSBudWxsKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UobmV4dClcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGVycm9yID0gYWdncmVnYXRlVHdvRXJyb3JzKGVycm9yLCBlcnIpXG4gICAgdGhyb3cgZXJyb3JcbiAgfSBmaW5hbGx5IHtcbiAgICBpZiAoXG4gICAgICAoZXJyb3IgfHwgKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogb3B0aW9ucy5kZXN0cm95T25SZXR1cm4pICE9PSBmYWxzZSkgJiZcbiAgICAgIChlcnJvciA9PT0gdW5kZWZpbmVkIHx8IHN0cmVhbS5fcmVhZGFibGVTdGF0ZS5hdXRvRGVzdHJveSlcbiAgICApIHtcbiAgICAgIGRlc3Ryb3lJbXBsLmRlc3Ryb3llcihzdHJlYW0sIG51bGwpXG4gICAgfSBlbHNlIHtcbiAgICAgIHN0cmVhbS5vZmYoJ3JlYWRhYmxlJywgbmV4dClcbiAgICAgIGNsZWFudXAoKVxuICAgIH1cbiAgfVxufVxuXG4vLyBNYWtpbmcgaXQgZXhwbGljaXQgdGhlc2UgcHJvcGVydGllcyBhcmUgbm90IGVudW1lcmFibGVcbi8vIGJlY2F1c2Ugb3RoZXJ3aXNlIHNvbWUgcHJvdG90eXBlIG1hbmlwdWxhdGlvbiBpblxuLy8gdXNlcmxhbmQgd2lsbCBmYWlsLlxuT2JqZWN0RGVmaW5lUHJvcGVydGllcyhSZWFkYWJsZS5wcm90b3R5cGUsIHtcbiAgcmVhZGFibGU6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZ2V0KCkge1xuICAgICAgY29uc3QgciA9IHRoaXMuX3JlYWRhYmxlU3RhdGVcbiAgICAgIC8vIHIucmVhZGFibGUgPT09IGZhbHNlIG1lYW5zIHRoYXQgdGhpcyBpcyBwYXJ0IG9mIGEgRHVwbGV4IHN0cmVhbVxuICAgICAgLy8gd2hlcmUgdGhlIHJlYWRhYmxlIHNpZGUgd2FzIGRpc2FibGVkIHVwb24gY29uc3RydWN0aW9uLlxuICAgICAgLy8gQ29tcGF0LiBUaGUgdXNlciBtaWdodCBtYW51YWxseSBkaXNhYmxlIHJlYWRhYmxlIHNpZGUgdGhyb3VnaFxuICAgICAgLy8gZGVwcmVjYXRlZCBzZXR0ZXIuXG4gICAgICByZXR1cm4gISFyICYmIHIucmVhZGFibGUgIT09IGZhbHNlICYmICFyLmRlc3Ryb3llZCAmJiAhci5lcnJvckVtaXR0ZWQgJiYgIXIuZW5kRW1pdHRlZFxuICAgIH0sXG4gICAgc2V0KHZhbCkge1xuICAgICAgLy8gQmFja3dhcmRzIGNvbXBhdC5cbiAgICAgIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlKSB7XG4gICAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUucmVhZGFibGUgPSAhIXZhbFxuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgcmVhZGFibGVEaWRSZWFkOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGF0YUVtaXR0ZWRcbiAgICB9XG4gIH0sXG4gIHJlYWRhYmxlQWJvcnRlZDoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiAhIShcbiAgICAgICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5yZWFkYWJsZSAhPT0gZmFsc2UgJiZcbiAgICAgICAgKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkIHx8IHRoaXMuX3JlYWRhYmxlU3RhdGUuZXJyb3JlZCkgJiZcbiAgICAgICAgIXRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZFxuICAgICAgKVxuICAgIH1cbiAgfSxcbiAgcmVhZGFibGVIaWdoV2F0ZXJNYXJrOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya1xuICAgIH1cbiAgfSxcbiAgcmVhZGFibGVCdWZmZXI6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZSAmJiB0aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlclxuICAgIH1cbiAgfSxcbiAgcmVhZGFibGVGbG93aW5nOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZ1xuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgICAgIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlKSB7XG4gICAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyA9IHN0YXRlXG4gICAgICB9XG4gICAgfVxuICB9LFxuICByZWFkYWJsZUxlbmd0aDoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5sZW5ndGhcbiAgICB9XG4gIH0sXG4gIHJlYWRhYmxlT2JqZWN0TW9kZToge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZSA/IHRoaXMuX3JlYWRhYmxlU3RhdGUub2JqZWN0TW9kZSA6IGZhbHNlXG4gICAgfVxuICB9LFxuICByZWFkYWJsZUVuY29kaW5nOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlID8gdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmNvZGluZyA6IG51bGxcbiAgICB9XG4gIH0sXG4gIGVycm9yZWQ6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUgPyB0aGlzLl9yZWFkYWJsZVN0YXRlLmVycm9yZWQgOiBudWxsXG4gICAgfVxuICB9LFxuICBjbG9zZWQ6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUgPyB0aGlzLl9yZWFkYWJsZVN0YXRlLmNsb3NlZCA6IGZhbHNlXG4gICAgfVxuICB9LFxuICBkZXN0cm95ZWQ6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUgPyB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCA6IGZhbHNlXG4gICAgfSxcbiAgICBzZXQodmFsdWUpIHtcbiAgICAgIC8vIFdlIGlnbm9yZSB0aGUgdmFsdWUgaWYgdGhlIHN0cmVhbVxuICAgICAgLy8gaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkIHlldC5cbiAgICAgIGlmICghdGhpcy5fcmVhZGFibGVTdGF0ZSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gQmFja3dhcmQgY29tcGF0aWJpbGl0eSwgdGhlIHVzZXIgaXMgZXhwbGljaXRseVxuICAgICAgLy8gbWFuYWdpbmcgZGVzdHJveWVkLlxuICAgICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQgPSB2YWx1ZVxuICAgIH1cbiAgfSxcbiAgcmVhZGFibGVFbmRlZDoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZSA/IHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCA6IGZhbHNlXG4gICAgfVxuICB9XG59KVxuT2JqZWN0RGVmaW5lUHJvcGVydGllcyhSZWFkYWJsZVN0YXRlLnByb3RvdHlwZSwge1xuICAvLyBMZWdhY3kgZ2V0dGVyIGZvciBgcGlwZXNDb3VudGAuXG4gIHBpcGVzQ291bnQ6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMucGlwZXMubGVuZ3RoXG4gICAgfVxuICB9LFxuICAvLyBMZWdhY3kgcHJvcGVydHkgZm9yIGBwYXVzZWRgLlxuICBwYXVzZWQ6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXNba1BhdXNlZF0gIT09IGZhbHNlXG4gICAgfSxcbiAgICBzZXQodmFsdWUpIHtcbiAgICAgIHRoaXNba1BhdXNlZF0gPSAhIXZhbHVlXG4gICAgfVxuICB9XG59KVxuXG4vLyBFeHBvc2VkIGZvciB0ZXN0aW5nIHB1cnBvc2VzIG9ubHkuXG5SZWFkYWJsZS5fZnJvbUxpc3QgPSBmcm9tTGlzdFxuXG4vLyBQbHVjayBvZmYgbiBieXRlcyBmcm9tIGFuIGFycmF5IG9mIGJ1ZmZlcnMuXG4vLyBMZW5ndGggaXMgdGhlIGNvbWJpbmVkIGxlbmd0aHMgb2YgYWxsIHRoZSBidWZmZXJzIGluIHRoZSBsaXN0LlxuLy8gVGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBiZSBpbmxpbmFibGUsIHNvIHBsZWFzZSB0YWtlIGNhcmUgd2hlbiBtYWtpbmdcbi8vIGNoYW5nZXMgdG8gdGhlIGZ1bmN0aW9uIGJvZHkuXG5mdW5jdGlvbiBmcm9tTGlzdChuLCBzdGF0ZSkge1xuICAvLyBub3RoaW5nIGJ1ZmZlcmVkLlxuICBpZiAoc3RhdGUubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbFxuICBsZXQgcmV0XG4gIGlmIChzdGF0ZS5vYmplY3RNb2RlKSByZXQgPSBzdGF0ZS5idWZmZXIuc2hpZnQoKVxuICBlbHNlIGlmICghbiB8fCBuID49IHN0YXRlLmxlbmd0aCkge1xuICAgIC8vIFJlYWQgaXQgYWxsLCB0cnVuY2F0ZSB0aGUgbGlzdC5cbiAgICBpZiAoc3RhdGUuZGVjb2RlcikgcmV0ID0gc3RhdGUuYnVmZmVyLmpvaW4oJycpXG4gICAgZWxzZSBpZiAoc3RhdGUuYnVmZmVyLmxlbmd0aCA9PT0gMSkgcmV0ID0gc3RhdGUuYnVmZmVyLmZpcnN0KClcbiAgICBlbHNlIHJldCA9IHN0YXRlLmJ1ZmZlci5jb25jYXQoc3RhdGUubGVuZ3RoKVxuICAgIHN0YXRlLmJ1ZmZlci5jbGVhcigpXG4gIH0gZWxzZSB7XG4gICAgLy8gcmVhZCBwYXJ0IG9mIGxpc3QuXG4gICAgcmV0ID0gc3RhdGUuYnVmZmVyLmNvbnN1bWUobiwgc3RhdGUuZGVjb2RlcilcbiAgfVxuICByZXR1cm4gcmV0XG59XG5mdW5jdGlvbiBlbmRSZWFkYWJsZShzdHJlYW0pIHtcbiAgY29uc3Qgc3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGVcbiAgZGVidWcoJ2VuZFJlYWRhYmxlJywgc3RhdGUuZW5kRW1pdHRlZClcbiAgaWYgKCFzdGF0ZS5lbmRFbWl0dGVkKSB7XG4gICAgc3RhdGUuZW5kZWQgPSB0cnVlXG4gICAgcHJvY2Vzcy5uZXh0VGljayhlbmRSZWFkYWJsZU5ULCBzdGF0ZSwgc3RyZWFtKVxuICB9XG59XG5mdW5jdGlvbiBlbmRSZWFkYWJsZU5UKHN0YXRlLCBzdHJlYW0pIHtcbiAgZGVidWcoJ2VuZFJlYWRhYmxlTlQnLCBzdGF0ZS5lbmRFbWl0dGVkLCBzdGF0ZS5sZW5ndGgpXG5cbiAgLy8gQ2hlY2sgdGhhdCB3ZSBkaWRuJ3QgZ2V0IG9uZSBsYXN0IHVuc2hpZnQuXG4gIGlmICghc3RhdGUuZXJyb3JlZCAmJiAhc3RhdGUuY2xvc2VFbWl0dGVkICYmICFzdGF0ZS5lbmRFbWl0dGVkICYmIHN0YXRlLmxlbmd0aCA9PT0gMCkge1xuICAgIHN0YXRlLmVuZEVtaXR0ZWQgPSB0cnVlXG4gICAgc3RyZWFtLmVtaXQoJ2VuZCcpXG4gICAgaWYgKHN0cmVhbS53cml0YWJsZSAmJiBzdHJlYW0uYWxsb3dIYWxmT3BlbiA9PT0gZmFsc2UpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZW5kV3JpdGFibGVOVCwgc3RyZWFtKVxuICAgIH0gZWxzZSBpZiAoc3RhdGUuYXV0b0Rlc3Ryb3kpIHtcbiAgICAgIC8vIEluIGNhc2Ugb2YgZHVwbGV4IHN0cmVhbXMgd2UgbmVlZCBhIHdheSB0byBkZXRlY3RcbiAgICAgIC8vIGlmIHRoZSB3cml0YWJsZSBzaWRlIGlzIHJlYWR5IGZvciBhdXRvRGVzdHJveSBhcyB3ZWxsLlxuICAgICAgY29uc3Qgd1N0YXRlID0gc3RyZWFtLl93cml0YWJsZVN0YXRlXG4gICAgICBjb25zdCBhdXRvRGVzdHJveSA9XG4gICAgICAgICF3U3RhdGUgfHxcbiAgICAgICAgKHdTdGF0ZS5hdXRvRGVzdHJveSAmJlxuICAgICAgICAgIC8vIFdlIGRvbid0IGV4cGVjdCB0aGUgd3JpdGFibGUgdG8gZXZlciAnZmluaXNoJ1xuICAgICAgICAgIC8vIGlmIHdyaXRhYmxlIGlzIGV4cGxpY2l0bHkgc2V0IHRvIGZhbHNlLlxuICAgICAgICAgICh3U3RhdGUuZmluaXNoZWQgfHwgd1N0YXRlLndyaXRhYmxlID09PSBmYWxzZSkpXG4gICAgICBpZiAoYXV0b0Rlc3Ryb3kpIHtcbiAgICAgICAgc3RyZWFtLmRlc3Ryb3koKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZW5kV3JpdGFibGVOVChzdHJlYW0pIHtcbiAgY29uc3Qgd3JpdGFibGUgPSBzdHJlYW0ud3JpdGFibGUgJiYgIXN0cmVhbS53cml0YWJsZUVuZGVkICYmICFzdHJlYW0uZGVzdHJveWVkXG4gIGlmICh3cml0YWJsZSkge1xuICAgIHN0cmVhbS5lbmQoKVxuICB9XG59XG5SZWFkYWJsZS5mcm9tID0gZnVuY3Rpb24gKGl0ZXJhYmxlLCBvcHRzKSB7XG4gIHJldHVybiBmcm9tKFJlYWRhYmxlLCBpdGVyYWJsZSwgb3B0cylcbn1cbmxldCB3ZWJTdHJlYW1zQWRhcHRlcnNcblxuLy8gTGF6eSB0byBhdm9pZCBjaXJjdWxhciByZWZlcmVuY2VzXG5mdW5jdGlvbiBsYXp5V2ViU3RyZWFtcygpIHtcbiAgaWYgKHdlYlN0cmVhbXNBZGFwdGVycyA9PT0gdW5kZWZpbmVkKSB3ZWJTdHJlYW1zQWRhcHRlcnMgPSB7fVxuICByZXR1cm4gd2ViU3RyZWFtc0FkYXB0ZXJzXG59XG5SZWFkYWJsZS5mcm9tV2ViID0gZnVuY3Rpb24gKHJlYWRhYmxlU3RyZWFtLCBvcHRpb25zKSB7XG4gIHJldHVybiBsYXp5V2ViU3RyZWFtcygpLm5ld1N0cmVhbVJlYWRhYmxlRnJvbVJlYWRhYmxlU3RyZWFtKHJlYWRhYmxlU3RyZWFtLCBvcHRpb25zKVxufVxuUmVhZGFibGUudG9XZWIgPSBmdW5jdGlvbiAoc3RyZWFtUmVhZGFibGUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGxhenlXZWJTdHJlYW1zKCkubmV3UmVhZGFibGVTdHJlYW1Gcm9tU3RyZWFtUmVhZGFibGUoc3RyZWFtUmVhZGFibGUsIG9wdGlvbnMpXG59XG5SZWFkYWJsZS53cmFwID0gZnVuY3Rpb24gKHNyYywgb3B0aW9ucykge1xuICB2YXIgX3JlZiwgX3NyYyRyZWFkYWJsZU9iamVjdE1vXG4gIHJldHVybiBuZXcgUmVhZGFibGUoe1xuICAgIG9iamVjdE1vZGU6XG4gICAgICAoX3JlZiA9XG4gICAgICAgIChfc3JjJHJlYWRhYmxlT2JqZWN0TW8gPSBzcmMucmVhZGFibGVPYmplY3RNb2RlKSAhPT0gbnVsbCAmJiBfc3JjJHJlYWRhYmxlT2JqZWN0TW8gIT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gX3NyYyRyZWFkYWJsZU9iamVjdE1vXG4gICAgICAgICAgOiBzcmMub2JqZWN0TW9kZSkgIT09IG51bGwgJiYgX3JlZiAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gX3JlZlxuICAgICAgICA6IHRydWUsXG4gICAgLi4ub3B0aW9ucyxcbiAgICBkZXN0cm95KGVyciwgY2FsbGJhY2spIHtcbiAgICAgIGRlc3Ryb3lJbXBsLmRlc3Ryb3llcihzcmMsIGVycilcbiAgICAgIGNhbGxiYWNrKGVycilcbiAgICB9XG4gIH0pLndyYXAoc3JjKVxufVxuIiwKICAgICIvKiByZXBsYWNlbWVudCBzdGFydCAqL1xuXG5jb25zdCBwcm9jZXNzID0gcmVxdWlyZSgncHJvY2Vzcy8nKVxuXG4vKiByZXBsYWNlbWVudCBlbmQgKi9cbi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyBBIGJpdCBzaW1wbGVyIHRoYW4gcmVhZGFibGUgc3RyZWFtcy5cbi8vIEltcGxlbWVudCBhbiBhc3luYyAuX3dyaXRlKGNodW5rLCBlbmNvZGluZywgY2IpLCBhbmQgaXQnbGwgaGFuZGxlIGFsbFxuLy8gdGhlIGRyYWluIGV2ZW50IGVtaXNzaW9uIGFuZCBidWZmZXJpbmcuXG5cbjsoJ3VzZSBzdHJpY3QnKVxuY29uc3Qge1xuICBBcnJheVByb3RvdHlwZVNsaWNlLFxuICBFcnJvcixcbiAgRnVuY3Rpb25Qcm90b3R5cGVTeW1ib2xIYXNJbnN0YW5jZSxcbiAgT2JqZWN0RGVmaW5lUHJvcGVydHksXG4gIE9iamVjdERlZmluZVByb3BlcnRpZXMsXG4gIE9iamVjdFNldFByb3RvdHlwZU9mLFxuICBTdHJpbmdQcm90b3R5cGVUb0xvd2VyQ2FzZSxcbiAgU3ltYm9sLFxuICBTeW1ib2xIYXNJbnN0YW5jZVxufSA9IHJlcXVpcmUoJy4uLy4uL291cnMvcHJpbW9yZGlhbHMnKVxubW9kdWxlLmV4cG9ydHMgPSBXcml0YWJsZVxuV3JpdGFibGUuV3JpdGFibGVTdGF0ZSA9IFdyaXRhYmxlU3RhdGVcbmNvbnN0IHsgRXZlbnRFbWl0dGVyOiBFRSB9ID0gcmVxdWlyZSgnZXZlbnRzJylcbmNvbnN0IFN0cmVhbSA9IHJlcXVpcmUoJy4vbGVnYWN5JykuU3RyZWFtXG5jb25zdCB7IEJ1ZmZlciB9ID0gcmVxdWlyZSgnYnVmZmVyJylcbmNvbnN0IGRlc3Ryb3lJbXBsID0gcmVxdWlyZSgnLi9kZXN0cm95JylcbmNvbnN0IHsgYWRkQWJvcnRTaWduYWwgfSA9IHJlcXVpcmUoJy4vYWRkLWFib3J0LXNpZ25hbCcpXG5jb25zdCB7IGdldEhpZ2hXYXRlck1hcmssIGdldERlZmF1bHRIaWdoV2F0ZXJNYXJrIH0gPSByZXF1aXJlKCcuL3N0YXRlJylcbmNvbnN0IHtcbiAgRVJSX0lOVkFMSURfQVJHX1RZUEUsXG4gIEVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVELFxuICBFUlJfTVVMVElQTEVfQ0FMTEJBQ0ssXG4gIEVSUl9TVFJFQU1fQ0FOTk9UX1BJUEUsXG4gIEVSUl9TVFJFQU1fREVTVFJPWUVELFxuICBFUlJfU1RSRUFNX0FMUkVBRFlfRklOSVNIRUQsXG4gIEVSUl9TVFJFQU1fTlVMTF9WQUxVRVMsXG4gIEVSUl9TVFJFQU1fV1JJVEVfQUZURVJfRU5ELFxuICBFUlJfVU5LTk9XTl9FTkNPRElOR1xufSA9IHJlcXVpcmUoJy4uLy4uL291cnMvZXJyb3JzJykuY29kZXNcbmNvbnN0IHsgZXJyb3JPckRlc3Ryb3kgfSA9IGRlc3Ryb3lJbXBsXG5PYmplY3RTZXRQcm90b3R5cGVPZihXcml0YWJsZS5wcm90b3R5cGUsIFN0cmVhbS5wcm90b3R5cGUpXG5PYmplY3RTZXRQcm90b3R5cGVPZihXcml0YWJsZSwgU3RyZWFtKVxuZnVuY3Rpb24gbm9wKCkge31cbmNvbnN0IGtPbkZpbmlzaGVkID0gU3ltYm9sKCdrT25GaW5pc2hlZCcpXG5mdW5jdGlvbiBXcml0YWJsZVN0YXRlKG9wdGlvbnMsIHN0cmVhbSwgaXNEdXBsZXgpIHtcbiAgLy8gRHVwbGV4IHN0cmVhbXMgYXJlIGJvdGggcmVhZGFibGUgYW5kIHdyaXRhYmxlLCBidXQgc2hhcmVcbiAgLy8gdGhlIHNhbWUgb3B0aW9ucyBvYmplY3QuXG4gIC8vIEhvd2V2ZXIsIHNvbWUgY2FzZXMgcmVxdWlyZSBzZXR0aW5nIG9wdGlvbnMgdG8gZGlmZmVyZW50XG4gIC8vIHZhbHVlcyBmb3IgdGhlIHJlYWRhYmxlIGFuZCB0aGUgd3JpdGFibGUgc2lkZXMgb2YgdGhlIGR1cGxleCBzdHJlYW0sXG4gIC8vIGUuZy4gb3B0aW9ucy5yZWFkYWJsZU9iamVjdE1vZGUgdnMuIG9wdGlvbnMud3JpdGFibGVPYmplY3RNb2RlLCBldGMuXG4gIGlmICh0eXBlb2YgaXNEdXBsZXggIT09ICdib29sZWFuJykgaXNEdXBsZXggPSBzdHJlYW0gaW5zdGFuY2VvZiByZXF1aXJlKCcuL2R1cGxleCcpXG5cbiAgLy8gT2JqZWN0IHN0cmVhbSBmbGFnIHRvIGluZGljYXRlIHdoZXRoZXIgb3Igbm90IHRoaXMgc3RyZWFtXG4gIC8vIGNvbnRhaW5zIGJ1ZmZlcnMgb3Igb2JqZWN0cy5cbiAgdGhpcy5vYmplY3RNb2RlID0gISEob3B0aW9ucyAmJiBvcHRpb25zLm9iamVjdE1vZGUpXG4gIGlmIChpc0R1cGxleCkgdGhpcy5vYmplY3RNb2RlID0gdGhpcy5vYmplY3RNb2RlIHx8ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy53cml0YWJsZU9iamVjdE1vZGUpXG5cbiAgLy8gVGhlIHBvaW50IGF0IHdoaWNoIHdyaXRlKCkgc3RhcnRzIHJldHVybmluZyBmYWxzZVxuICAvLyBOb3RlOiAwIGlzIGEgdmFsaWQgdmFsdWUsIG1lYW5zIHRoYXQgd2UgYWx3YXlzIHJldHVybiBmYWxzZSBpZlxuICAvLyB0aGUgZW50aXJlIGJ1ZmZlciBpcyBub3QgZmx1c2hlZCBpbW1lZGlhdGVseSBvbiB3cml0ZSgpLlxuICB0aGlzLmhpZ2hXYXRlck1hcmsgPSBvcHRpb25zXG4gICAgPyBnZXRIaWdoV2F0ZXJNYXJrKHRoaXMsIG9wdGlvbnMsICd3cml0YWJsZUhpZ2hXYXRlck1hcmsnLCBpc0R1cGxleClcbiAgICA6IGdldERlZmF1bHRIaWdoV2F0ZXJNYXJrKGZhbHNlKVxuXG4gIC8vIGlmIF9maW5hbCBoYXMgYmVlbiBjYWxsZWQuXG4gIHRoaXMuZmluYWxDYWxsZWQgPSBmYWxzZVxuXG4gIC8vIGRyYWluIGV2ZW50IGZsYWcuXG4gIHRoaXMubmVlZERyYWluID0gZmFsc2VcbiAgLy8gQXQgdGhlIHN0YXJ0IG9mIGNhbGxpbmcgZW5kKClcbiAgdGhpcy5lbmRpbmcgPSBmYWxzZVxuICAvLyBXaGVuIGVuZCgpIGhhcyBiZWVuIGNhbGxlZCwgYW5kIHJldHVybmVkLlxuICB0aGlzLmVuZGVkID0gZmFsc2VcbiAgLy8gV2hlbiAnZmluaXNoJyBpcyBlbWl0dGVkLlxuICB0aGlzLmZpbmlzaGVkID0gZmFsc2VcblxuICAvLyBIYXMgaXQgYmVlbiBkZXN0cm95ZWRcbiAgdGhpcy5kZXN0cm95ZWQgPSBmYWxzZVxuXG4gIC8vIFNob3VsZCB3ZSBkZWNvZGUgc3RyaW5ncyBpbnRvIGJ1ZmZlcnMgYmVmb3JlIHBhc3NpbmcgdG8gX3dyaXRlP1xuICAvLyB0aGlzIGlzIGhlcmUgc28gdGhhdCBzb21lIG5vZGUtY29yZSBzdHJlYW1zIGNhbiBvcHRpbWl6ZSBzdHJpbmdcbiAgLy8gaGFuZGxpbmcgYXQgYSBsb3dlciBsZXZlbC5cbiAgY29uc3Qgbm9EZWNvZGUgPSAhIShvcHRpb25zICYmIG9wdGlvbnMuZGVjb2RlU3RyaW5ncyA9PT0gZmFsc2UpXG4gIHRoaXMuZGVjb2RlU3RyaW5ncyA9ICFub0RlY29kZVxuXG4gIC8vIENyeXB0byBpcyBraW5kIG9mIG9sZCBhbmQgY3J1c3R5LiAgSGlzdG9yaWNhbGx5LCBpdHMgZGVmYXVsdCBzdHJpbmdcbiAgLy8gZW5jb2RpbmcgaXMgJ2JpbmFyeScgc28gd2UgaGF2ZSB0byBtYWtlIHRoaXMgY29uZmlndXJhYmxlLlxuICAvLyBFdmVyeXRoaW5nIGVsc2UgaW4gdGhlIHVuaXZlcnNlIHVzZXMgJ3V0ZjgnLCB0aG91Z2guXG4gIHRoaXMuZGVmYXVsdEVuY29kaW5nID0gKG9wdGlvbnMgJiYgb3B0aW9ucy5kZWZhdWx0RW5jb2RpbmcpIHx8ICd1dGY4J1xuXG4gIC8vIE5vdCBhbiBhY3R1YWwgYnVmZmVyIHdlIGtlZXAgdHJhY2sgb2YsIGJ1dCBhIG1lYXN1cmVtZW50XG4gIC8vIG9mIGhvdyBtdWNoIHdlJ3JlIHdhaXRpbmcgdG8gZ2V0IHB1c2hlZCB0byBzb21lIHVuZGVybHlpbmdcbiAgLy8gc29ja2V0IG9yIGZpbGUuXG4gIHRoaXMubGVuZ3RoID0gMFxuXG4gIC8vIEEgZmxhZyB0byBzZWUgd2hlbiB3ZSdyZSBpbiB0aGUgbWlkZGxlIG9mIGEgd3JpdGUuXG4gIHRoaXMud3JpdGluZyA9IGZhbHNlXG5cbiAgLy8gV2hlbiB0cnVlIGFsbCB3cml0ZXMgd2lsbCBiZSBidWZmZXJlZCB1bnRpbCAudW5jb3JrKCkgY2FsbC5cbiAgdGhpcy5jb3JrZWQgPSAwXG5cbiAgLy8gQSBmbGFnIHRvIGJlIGFibGUgdG8gdGVsbCBpZiB0aGUgb253cml0ZSBjYiBpcyBjYWxsZWQgaW1tZWRpYXRlbHksXG4gIC8vIG9yIG9uIGEgbGF0ZXIgdGljay4gIFdlIHNldCB0aGlzIHRvIHRydWUgYXQgZmlyc3QsIGJlY2F1c2UgYW55XG4gIC8vIGFjdGlvbnMgdGhhdCBzaG91bGRuJ3QgaGFwcGVuIHVudGlsIFwibGF0ZXJcIiBzaG91bGQgZ2VuZXJhbGx5IGFsc29cbiAgLy8gbm90IGhhcHBlbiBiZWZvcmUgdGhlIGZpcnN0IHdyaXRlIGNhbGwuXG4gIHRoaXMuc3luYyA9IHRydWVcblxuICAvLyBBIGZsYWcgdG8ga25vdyBpZiB3ZSdyZSBwcm9jZXNzaW5nIHByZXZpb3VzbHkgYnVmZmVyZWQgaXRlbXMsIHdoaWNoXG4gIC8vIG1heSBjYWxsIHRoZSBfd3JpdGUoKSBjYWxsYmFjayBpbiB0aGUgc2FtZSB0aWNrLCBzbyB0aGF0IHdlIGRvbid0XG4gIC8vIGVuZCB1cCBpbiBhbiBvdmVybGFwcGVkIG9ud3JpdGUgc2l0dWF0aW9uLlxuICB0aGlzLmJ1ZmZlclByb2Nlc3NpbmcgPSBmYWxzZVxuXG4gIC8vIFRoZSBjYWxsYmFjayB0aGF0J3MgcGFzc2VkIHRvIF93cml0ZShjaHVuaywgY2IpLlxuICB0aGlzLm9ud3JpdGUgPSBvbndyaXRlLmJpbmQodW5kZWZpbmVkLCBzdHJlYW0pXG5cbiAgLy8gVGhlIGNhbGxiYWNrIHRoYXQgdGhlIHVzZXIgc3VwcGxpZXMgdG8gd3JpdGUoY2h1bmssIGVuY29kaW5nLCBjYikuXG4gIHRoaXMud3JpdGVjYiA9IG51bGxcblxuICAvLyBUaGUgYW1vdW50IHRoYXQgaXMgYmVpbmcgd3JpdHRlbiB3aGVuIF93cml0ZSBpcyBjYWxsZWQuXG4gIHRoaXMud3JpdGVsZW4gPSAwXG5cbiAgLy8gU3RvcmFnZSBmb3IgZGF0YSBwYXNzZWQgdG8gdGhlIGFmdGVyV3JpdGUoKSBjYWxsYmFjayBpbiBjYXNlIG9mXG4gIC8vIHN5bmNocm9ub3VzIF93cml0ZSgpIGNvbXBsZXRpb24uXG4gIHRoaXMuYWZ0ZXJXcml0ZVRpY2tJbmZvID0gbnVsbFxuICByZXNldEJ1ZmZlcih0aGlzKVxuXG4gIC8vIE51bWJlciBvZiBwZW5kaW5nIHVzZXItc3VwcGxpZWQgd3JpdGUgY2FsbGJhY2tzXG4gIC8vIHRoaXMgbXVzdCBiZSAwIGJlZm9yZSAnZmluaXNoJyBjYW4gYmUgZW1pdHRlZC5cbiAgdGhpcy5wZW5kaW5nY2IgPSAwXG5cbiAgLy8gU3RyZWFtIGlzIHN0aWxsIGJlaW5nIGNvbnN0cnVjdGVkIGFuZCBjYW5ub3QgYmVcbiAgLy8gZGVzdHJveWVkIHVudGlsIGNvbnN0cnVjdGlvbiBmaW5pc2hlZCBvciBmYWlsZWQuXG4gIC8vIEFzeW5jIGNvbnN0cnVjdGlvbiBpcyBvcHQgaW4sIHRoZXJlZm9yZSB3ZSBzdGFydCBhc1xuICAvLyBjb25zdHJ1Y3RlZC5cbiAgdGhpcy5jb25zdHJ1Y3RlZCA9IHRydWVcblxuICAvLyBFbWl0IHByZWZpbmlzaCBpZiB0aGUgb25seSB0aGluZyB3ZSdyZSB3YWl0aW5nIGZvciBpcyBfd3JpdGUgY2JzXG4gIC8vIFRoaXMgaXMgcmVsZXZhbnQgZm9yIHN5bmNocm9ub3VzIFRyYW5zZm9ybSBzdHJlYW1zLlxuICB0aGlzLnByZWZpbmlzaGVkID0gZmFsc2VcblxuICAvLyBUcnVlIGlmIHRoZSBlcnJvciB3YXMgYWxyZWFkeSBlbWl0dGVkIGFuZCBzaG91bGQgbm90IGJlIHRocm93biBhZ2Fpbi5cbiAgdGhpcy5lcnJvckVtaXR0ZWQgPSBmYWxzZVxuXG4gIC8vIFNob3VsZCBjbG9zZSBiZSBlbWl0dGVkIG9uIGRlc3Ryb3kuIERlZmF1bHRzIHRvIHRydWUuXG4gIHRoaXMuZW1pdENsb3NlID0gIW9wdGlvbnMgfHwgb3B0aW9ucy5lbWl0Q2xvc2UgIT09IGZhbHNlXG5cbiAgLy8gU2hvdWxkIC5kZXN0cm95KCkgYmUgY2FsbGVkIGFmdGVyICdmaW5pc2gnIChhbmQgcG90ZW50aWFsbHkgJ2VuZCcpLlxuICB0aGlzLmF1dG9EZXN0cm95ID0gIW9wdGlvbnMgfHwgb3B0aW9ucy5hdXRvRGVzdHJveSAhPT0gZmFsc2VcblxuICAvLyBJbmRpY2F0ZXMgd2hldGhlciB0aGUgc3RyZWFtIGhhcyBlcnJvcmVkLiBXaGVuIHRydWUgYWxsIHdyaXRlKCkgY2FsbHNcbiAgLy8gc2hvdWxkIHJldHVybiBmYWxzZS4gVGhpcyBpcyBuZWVkZWQgc2luY2Ugd2hlbiBhdXRvRGVzdHJveVxuICAvLyBpcyBkaXNhYmxlZCB3ZSBuZWVkIGEgd2F5IHRvIHRlbGwgd2hldGhlciB0aGUgc3RyZWFtIGhhcyBmYWlsZWQuXG4gIHRoaXMuZXJyb3JlZCA9IG51bGxcblxuICAvLyBJbmRpY2F0ZXMgd2hldGhlciB0aGUgc3RyZWFtIGhhcyBmaW5pc2hlZCBkZXN0cm95aW5nLlxuICB0aGlzLmNsb3NlZCA9IGZhbHNlXG5cbiAgLy8gVHJ1ZSBpZiBjbG9zZSBoYXMgYmVlbiBlbWl0dGVkIG9yIHdvdWxkIGhhdmUgYmVlbiBlbWl0dGVkXG4gIC8vIGRlcGVuZGluZyBvbiBlbWl0Q2xvc2UuXG4gIHRoaXMuY2xvc2VFbWl0dGVkID0gZmFsc2VcbiAgdGhpc1trT25GaW5pc2hlZF0gPSBbXVxufVxuZnVuY3Rpb24gcmVzZXRCdWZmZXIoc3RhdGUpIHtcbiAgc3RhdGUuYnVmZmVyZWQgPSBbXVxuICBzdGF0ZS5idWZmZXJlZEluZGV4ID0gMFxuICBzdGF0ZS5hbGxCdWZmZXJzID0gdHJ1ZVxuICBzdGF0ZS5hbGxOb29wID0gdHJ1ZVxufVxuV3JpdGFibGVTdGF0ZS5wcm90b3R5cGUuZ2V0QnVmZmVyID0gZnVuY3Rpb24gZ2V0QnVmZmVyKCkge1xuICByZXR1cm4gQXJyYXlQcm90b3R5cGVTbGljZSh0aGlzLmJ1ZmZlcmVkLCB0aGlzLmJ1ZmZlcmVkSW5kZXgpXG59XG5PYmplY3REZWZpbmVQcm9wZXJ0eShXcml0YWJsZVN0YXRlLnByb3RvdHlwZSwgJ2J1ZmZlcmVkUmVxdWVzdENvdW50Jywge1xuICBfX3Byb3RvX186IG51bGwsXG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5idWZmZXJlZC5sZW5ndGggLSB0aGlzLmJ1ZmZlcmVkSW5kZXhcbiAgfVxufSlcbmZ1bmN0aW9uIFdyaXRhYmxlKG9wdGlvbnMpIHtcbiAgLy8gV3JpdGFibGUgY3RvciBpcyBhcHBsaWVkIHRvIER1cGxleGVzLCB0b28uXG4gIC8vIGByZWFsSGFzSW5zdGFuY2VgIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHVzaW5nIHBsYWluIGBpbnN0YW5jZW9mYFxuICAvLyB3b3VsZCByZXR1cm4gZmFsc2UsIGFzIG5vIGBfd3JpdGFibGVTdGF0ZWAgcHJvcGVydHkgaXMgYXR0YWNoZWQuXG5cbiAgLy8gVHJ5aW5nIHRvIHVzZSB0aGUgY3VzdG9tIGBpbnN0YW5jZW9mYCBmb3IgV3JpdGFibGUgaGVyZSB3aWxsIGFsc28gYnJlYWsgdGhlXG4gIC8vIE5vZGUuanMgTGF6eVRyYW5zZm9ybSBpbXBsZW1lbnRhdGlvbiwgd2hpY2ggaGFzIGEgbm9uLXRyaXZpYWwgZ2V0dGVyIGZvclxuICAvLyBgX3dyaXRhYmxlU3RhdGVgIHRoYXQgd291bGQgbGVhZCB0byBpbmZpbml0ZSByZWN1cnNpb24uXG5cbiAgLy8gQ2hlY2tpbmcgZm9yIGEgU3RyZWFtLkR1cGxleCBpbnN0YW5jZSBpcyBmYXN0ZXIgaGVyZSBpbnN0ZWFkIG9mIGluc2lkZVxuICAvLyB0aGUgV3JpdGFibGVTdGF0ZSBjb25zdHJ1Y3RvciwgYXQgbGVhc3Qgd2l0aCBWOCA2LjUuXG4gIGNvbnN0IGlzRHVwbGV4ID0gdGhpcyBpbnN0YW5jZW9mIHJlcXVpcmUoJy4vZHVwbGV4JylcbiAgaWYgKCFpc0R1cGxleCAmJiAhRnVuY3Rpb25Qcm90b3R5cGVTeW1ib2xIYXNJbnN0YW5jZShXcml0YWJsZSwgdGhpcykpIHJldHVybiBuZXcgV3JpdGFibGUob3B0aW9ucylcbiAgdGhpcy5fd3JpdGFibGVTdGF0ZSA9IG5ldyBXcml0YWJsZVN0YXRlKG9wdGlvbnMsIHRoaXMsIGlzRHVwbGV4KVxuICBpZiAob3B0aW9ucykge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy53cml0ZSA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fd3JpdGUgPSBvcHRpb25zLndyaXRlXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLndyaXRldiA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fd3JpdGV2ID0gb3B0aW9ucy53cml0ZXZcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuZGVzdHJveSA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fZGVzdHJveSA9IG9wdGlvbnMuZGVzdHJveVxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5maW5hbCA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fZmluYWwgPSBvcHRpb25zLmZpbmFsXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmNvbnN0cnVjdCA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fY29uc3RydWN0ID0gb3B0aW9ucy5jb25zdHJ1Y3RcbiAgICBpZiAob3B0aW9ucy5zaWduYWwpIGFkZEFib3J0U2lnbmFsKG9wdGlvbnMuc2lnbmFsLCB0aGlzKVxuICB9XG4gIFN0cmVhbS5jYWxsKHRoaXMsIG9wdGlvbnMpXG4gIGRlc3Ryb3lJbXBsLmNvbnN0cnVjdCh0aGlzLCAoKSA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLl93cml0YWJsZVN0YXRlXG4gICAgaWYgKCFzdGF0ZS53cml0aW5nKSB7XG4gICAgICBjbGVhckJ1ZmZlcih0aGlzLCBzdGF0ZSlcbiAgICB9XG4gICAgZmluaXNoTWF5YmUodGhpcywgc3RhdGUpXG4gIH0pXG59XG5PYmplY3REZWZpbmVQcm9wZXJ0eShXcml0YWJsZSwgU3ltYm9sSGFzSW5zdGFuY2UsIHtcbiAgX19wcm90b19fOiBudWxsLFxuICB2YWx1ZTogZnVuY3Rpb24gKG9iamVjdCkge1xuICAgIGlmIChGdW5jdGlvblByb3RvdHlwZVN5bWJvbEhhc0luc3RhbmNlKHRoaXMsIG9iamVjdCkpIHJldHVybiB0cnVlXG4gICAgaWYgKHRoaXMgIT09IFdyaXRhYmxlKSByZXR1cm4gZmFsc2VcbiAgICByZXR1cm4gb2JqZWN0ICYmIG9iamVjdC5fd3JpdGFibGVTdGF0ZSBpbnN0YW5jZW9mIFdyaXRhYmxlU3RhdGVcbiAgfVxufSlcblxuLy8gT3RoZXJ3aXNlIHBlb3BsZSBjYW4gcGlwZSBXcml0YWJsZSBzdHJlYW1zLCB3aGljaCBpcyBqdXN0IHdyb25nLlxuV3JpdGFibGUucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbiAoKSB7XG4gIGVycm9yT3JEZXN0cm95KHRoaXMsIG5ldyBFUlJfU1RSRUFNX0NBTk5PVF9QSVBFKCkpXG59XG5mdW5jdGlvbiBfd3JpdGUoc3RyZWFtLCBjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIGNvbnN0IHN0YXRlID0gc3RyZWFtLl93cml0YWJsZVN0YXRlXG4gIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYiA9IGVuY29kaW5nXG4gICAgZW5jb2RpbmcgPSBzdGF0ZS5kZWZhdWx0RW5jb2RpbmdcbiAgfSBlbHNlIHtcbiAgICBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9IHN0YXRlLmRlZmF1bHRFbmNvZGluZ1xuICAgIGVsc2UgaWYgKGVuY29kaW5nICE9PSAnYnVmZmVyJyAmJiAhQnVmZmVyLmlzRW5jb2RpbmcoZW5jb2RpbmcpKSB0aHJvdyBuZXcgRVJSX1VOS05PV05fRU5DT0RJTkcoZW5jb2RpbmcpXG4gICAgaWYgKHR5cGVvZiBjYiAhPT0gJ2Z1bmN0aW9uJykgY2IgPSBub3BcbiAgfVxuICBpZiAoY2h1bmsgPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRVJSX1NUUkVBTV9OVUxMX1ZBTFVFUygpXG4gIH0gZWxzZSBpZiAoIXN0YXRlLm9iamVjdE1vZGUpIHtcbiAgICBpZiAodHlwZW9mIGNodW5rID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKHN0YXRlLmRlY29kZVN0cmluZ3MgIT09IGZhbHNlKSB7XG4gICAgICAgIGNodW5rID0gQnVmZmVyLmZyb20oY2h1bmssIGVuY29kaW5nKVxuICAgICAgICBlbmNvZGluZyA9ICdidWZmZXInXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjaHVuayBpbnN0YW5jZW9mIEJ1ZmZlcikge1xuICAgICAgZW5jb2RpbmcgPSAnYnVmZmVyJ1xuICAgIH0gZWxzZSBpZiAoU3RyZWFtLl9pc1VpbnQ4QXJyYXkoY2h1bmspKSB7XG4gICAgICBjaHVuayA9IFN0cmVhbS5fdWludDhBcnJheVRvQnVmZmVyKGNodW5rKVxuICAgICAgZW5jb2RpbmcgPSAnYnVmZmVyJ1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoJ2NodW5rJywgWydzdHJpbmcnLCAnQnVmZmVyJywgJ1VpbnQ4QXJyYXknXSwgY2h1bmspXG4gICAgfVxuICB9XG4gIGxldCBlcnJcbiAgaWYgKHN0YXRlLmVuZGluZykge1xuICAgIGVyciA9IG5ldyBFUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORCgpXG4gIH0gZWxzZSBpZiAoc3RhdGUuZGVzdHJveWVkKSB7XG4gICAgZXJyID0gbmV3IEVSUl9TVFJFQU1fREVTVFJPWUVEKCd3cml0ZScpXG4gIH1cbiAgaWYgKGVycikge1xuICAgIHByb2Nlc3MubmV4dFRpY2soY2IsIGVycilcbiAgICBlcnJvck9yRGVzdHJveShzdHJlYW0sIGVyciwgdHJ1ZSlcbiAgICByZXR1cm4gZXJyXG4gIH1cbiAgc3RhdGUucGVuZGluZ2NiKytcbiAgcmV0dXJuIHdyaXRlT3JCdWZmZXIoc3RyZWFtLCBzdGF0ZSwgY2h1bmssIGVuY29kaW5nLCBjYilcbn1cbldyaXRhYmxlLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIHJldHVybiBfd3JpdGUodGhpcywgY2h1bmssIGVuY29kaW5nLCBjYikgPT09IHRydWVcbn1cbldyaXRhYmxlLnByb3RvdHlwZS5jb3JrID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLl93cml0YWJsZVN0YXRlLmNvcmtlZCsrXG59XG5Xcml0YWJsZS5wcm90b3R5cGUudW5jb3JrID0gZnVuY3Rpb24gKCkge1xuICBjb25zdCBzdGF0ZSA9IHRoaXMuX3dyaXRhYmxlU3RhdGVcbiAgaWYgKHN0YXRlLmNvcmtlZCkge1xuICAgIHN0YXRlLmNvcmtlZC0tXG4gICAgaWYgKCFzdGF0ZS53cml0aW5nKSBjbGVhckJ1ZmZlcih0aGlzLCBzdGF0ZSlcbiAgfVxufVxuV3JpdGFibGUucHJvdG90eXBlLnNldERlZmF1bHRFbmNvZGluZyA9IGZ1bmN0aW9uIHNldERlZmF1bHRFbmNvZGluZyhlbmNvZGluZykge1xuICAvLyBub2RlOjpQYXJzZUVuY29kaW5nKCkgcmVxdWlyZXMgbG93ZXIgY2FzZS5cbiAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZycpIGVuY29kaW5nID0gU3RyaW5nUHJvdG90eXBlVG9Mb3dlckNhc2UoZW5jb2RpbmcpXG4gIGlmICghQnVmZmVyLmlzRW5jb2RpbmcoZW5jb2RpbmcpKSB0aHJvdyBuZXcgRVJSX1VOS05PV05fRU5DT0RJTkcoZW5jb2RpbmcpXG4gIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVmYXVsdEVuY29kaW5nID0gZW5jb2RpbmdcbiAgcmV0dXJuIHRoaXNcbn1cblxuLy8gSWYgd2UncmUgYWxyZWFkeSB3cml0aW5nIHNvbWV0aGluZywgdGhlbiBqdXN0IHB1dCB0aGlzXG4vLyBpbiB0aGUgcXVldWUsIGFuZCB3YWl0IG91ciB0dXJuLiAgT3RoZXJ3aXNlLCBjYWxsIF93cml0ZVxuLy8gSWYgd2UgcmV0dXJuIGZhbHNlLCB0aGVuIHdlIG5lZWQgYSBkcmFpbiBldmVudCwgc28gc2V0IHRoYXQgZmxhZy5cbmZ1bmN0aW9uIHdyaXRlT3JCdWZmZXIoc3RyZWFtLCBzdGF0ZSwgY2h1bmssIGVuY29kaW5nLCBjYWxsYmFjaykge1xuICBjb25zdCBsZW4gPSBzdGF0ZS5vYmplY3RNb2RlID8gMSA6IGNodW5rLmxlbmd0aFxuICBzdGF0ZS5sZW5ndGggKz0gbGVuXG5cbiAgLy8gc3RyZWFtLl93cml0ZSByZXNldHMgc3RhdGUubGVuZ3RoXG4gIGNvbnN0IHJldCA9IHN0YXRlLmxlbmd0aCA8IHN0YXRlLmhpZ2hXYXRlck1hcmtcbiAgLy8gV2UgbXVzdCBlbnN1cmUgdGhhdCBwcmV2aW91cyBuZWVkRHJhaW4gd2lsbCBub3QgYmUgcmVzZXQgdG8gZmFsc2UuXG4gIGlmICghcmV0KSBzdGF0ZS5uZWVkRHJhaW4gPSB0cnVlXG4gIGlmIChzdGF0ZS53cml0aW5nIHx8IHN0YXRlLmNvcmtlZCB8fCBzdGF0ZS5lcnJvcmVkIHx8ICFzdGF0ZS5jb25zdHJ1Y3RlZCkge1xuICAgIHN0YXRlLmJ1ZmZlcmVkLnB1c2goe1xuICAgICAgY2h1bmssXG4gICAgICBlbmNvZGluZyxcbiAgICAgIGNhbGxiYWNrXG4gICAgfSlcbiAgICBpZiAoc3RhdGUuYWxsQnVmZmVycyAmJiBlbmNvZGluZyAhPT0gJ2J1ZmZlcicpIHtcbiAgICAgIHN0YXRlLmFsbEJ1ZmZlcnMgPSBmYWxzZVxuICAgIH1cbiAgICBpZiAoc3RhdGUuYWxsTm9vcCAmJiBjYWxsYmFjayAhPT0gbm9wKSB7XG4gICAgICBzdGF0ZS5hbGxOb29wID0gZmFsc2VcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgc3RhdGUud3JpdGVsZW4gPSBsZW5cbiAgICBzdGF0ZS53cml0ZWNiID0gY2FsbGJhY2tcbiAgICBzdGF0ZS53cml0aW5nID0gdHJ1ZVxuICAgIHN0YXRlLnN5bmMgPSB0cnVlXG4gICAgc3RyZWFtLl93cml0ZShjaHVuaywgZW5jb2RpbmcsIHN0YXRlLm9ud3JpdGUpXG4gICAgc3RhdGUuc3luYyA9IGZhbHNlXG4gIH1cblxuICAvLyBSZXR1cm4gZmFsc2UgaWYgZXJyb3JlZCBvciBkZXN0cm95ZWQgaW4gb3JkZXIgdG8gYnJlYWtcbiAgLy8gYW55IHN5bmNocm9ub3VzIHdoaWxlKHN0cmVhbS53cml0ZShkYXRhKSkgbG9vcHMuXG4gIHJldHVybiByZXQgJiYgIXN0YXRlLmVycm9yZWQgJiYgIXN0YXRlLmRlc3Ryb3llZFxufVxuZnVuY3Rpb24gZG9Xcml0ZShzdHJlYW0sIHN0YXRlLCB3cml0ZXYsIGxlbiwgY2h1bmssIGVuY29kaW5nLCBjYikge1xuICBzdGF0ZS53cml0ZWxlbiA9IGxlblxuICBzdGF0ZS53cml0ZWNiID0gY2JcbiAgc3RhdGUud3JpdGluZyA9IHRydWVcbiAgc3RhdGUuc3luYyA9IHRydWVcbiAgaWYgKHN0YXRlLmRlc3Ryb3llZCkgc3RhdGUub253cml0ZShuZXcgRVJSX1NUUkVBTV9ERVNUUk9ZRUQoJ3dyaXRlJykpXG4gIGVsc2UgaWYgKHdyaXRldikgc3RyZWFtLl93cml0ZXYoY2h1bmssIHN0YXRlLm9ud3JpdGUpXG4gIGVsc2Ugc3RyZWFtLl93cml0ZShjaHVuaywgZW5jb2RpbmcsIHN0YXRlLm9ud3JpdGUpXG4gIHN0YXRlLnN5bmMgPSBmYWxzZVxufVxuZnVuY3Rpb24gb253cml0ZUVycm9yKHN0cmVhbSwgc3RhdGUsIGVyLCBjYikge1xuICAtLXN0YXRlLnBlbmRpbmdjYlxuICBjYihlcilcbiAgLy8gRW5zdXJlIGNhbGxiYWNrcyBhcmUgaW52b2tlZCBldmVuIHdoZW4gYXV0b0Rlc3Ryb3kgaXNcbiAgLy8gbm90IGVuYWJsZWQuIFBhc3NpbmcgYGVyYCBoZXJlIGRvZXNuJ3QgbWFrZSBzZW5zZSBzaW5jZVxuICAvLyBpdCdzIHJlbGF0ZWQgdG8gb25lIHNwZWNpZmljIHdyaXRlLCBub3QgdG8gdGhlIGJ1ZmZlcmVkXG4gIC8vIHdyaXRlcy5cbiAgZXJyb3JCdWZmZXIoc3RhdGUpXG4gIC8vIFRoaXMgY2FuIGVtaXQgZXJyb3IsIGJ1dCBlcnJvciBtdXN0IGFsd2F5cyBmb2xsb3cgY2IuXG4gIGVycm9yT3JEZXN0cm95KHN0cmVhbSwgZXIpXG59XG5mdW5jdGlvbiBvbndyaXRlKHN0cmVhbSwgZXIpIHtcbiAgY29uc3Qgc3RhdGUgPSBzdHJlYW0uX3dyaXRhYmxlU3RhdGVcbiAgY29uc3Qgc3luYyA9IHN0YXRlLnN5bmNcbiAgY29uc3QgY2IgPSBzdGF0ZS53cml0ZWNiXG4gIGlmICh0eXBlb2YgY2IgIT09ICdmdW5jdGlvbicpIHtcbiAgICBlcnJvck9yRGVzdHJveShzdHJlYW0sIG5ldyBFUlJfTVVMVElQTEVfQ0FMTEJBQ0soKSlcbiAgICByZXR1cm5cbiAgfVxuICBzdGF0ZS53cml0aW5nID0gZmFsc2VcbiAgc3RhdGUud3JpdGVjYiA9IG51bGxcbiAgc3RhdGUubGVuZ3RoIC09IHN0YXRlLndyaXRlbGVuXG4gIHN0YXRlLndyaXRlbGVuID0gMFxuICBpZiAoZXIpIHtcbiAgICAvLyBBdm9pZCBWOCBsZWFrLCBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvcHVsbC8zNDEwMyNpc3N1ZWNvbW1lbnQtNjUyMDAyMzY0XG4gICAgZXIuc3RhY2sgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcblxuICAgIGlmICghc3RhdGUuZXJyb3JlZCkge1xuICAgICAgc3RhdGUuZXJyb3JlZCA9IGVyXG4gICAgfVxuXG4gICAgLy8gSW4gY2FzZSBvZiBkdXBsZXggc3RyZWFtcyB3ZSBuZWVkIHRvIG5vdGlmeSB0aGUgcmVhZGFibGUgc2lkZSBvZiB0aGVcbiAgICAvLyBlcnJvci5cbiAgICBpZiAoc3RyZWFtLl9yZWFkYWJsZVN0YXRlICYmICFzdHJlYW0uX3JlYWRhYmxlU3RhdGUuZXJyb3JlZCkge1xuICAgICAgc3RyZWFtLl9yZWFkYWJsZVN0YXRlLmVycm9yZWQgPSBlclxuICAgIH1cbiAgICBpZiAoc3luYykge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhvbndyaXRlRXJyb3IsIHN0cmVhbSwgc3RhdGUsIGVyLCBjYilcbiAgICB9IGVsc2Uge1xuICAgICAgb253cml0ZUVycm9yKHN0cmVhbSwgc3RhdGUsIGVyLCBjYilcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKHN0YXRlLmJ1ZmZlcmVkLmxlbmd0aCA+IHN0YXRlLmJ1ZmZlcmVkSW5kZXgpIHtcbiAgICAgIGNsZWFyQnVmZmVyKHN0cmVhbSwgc3RhdGUpXG4gICAgfVxuICAgIGlmIChzeW5jKSB7XG4gICAgICAvLyBJdCBpcyBhIGNvbW1vbiBjYXNlIHRoYXQgdGhlIGNhbGxiYWNrIHBhc3NlZCB0byAud3JpdGUoKSBpcyBhbHdheXNcbiAgICAgIC8vIHRoZSBzYW1lLiBJbiB0aGF0IGNhc2UsIHdlIGRvIG5vdCBzY2hlZHVsZSBhIG5ldyBuZXh0VGljaygpLCBidXRcbiAgICAgIC8vIHJhdGhlciBqdXN0IGluY3JlYXNlIGEgY291bnRlciwgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSBhbmQgYXZvaWRcbiAgICAgIC8vIG1lbW9yeSBhbGxvY2F0aW9ucy5cbiAgICAgIGlmIChzdGF0ZS5hZnRlcldyaXRlVGlja0luZm8gIT09IG51bGwgJiYgc3RhdGUuYWZ0ZXJXcml0ZVRpY2tJbmZvLmNiID09PSBjYikge1xuICAgICAgICBzdGF0ZS5hZnRlcldyaXRlVGlja0luZm8uY291bnQrK1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhdGUuYWZ0ZXJXcml0ZVRpY2tJbmZvID0ge1xuICAgICAgICAgIGNvdW50OiAxLFxuICAgICAgICAgIGNiLFxuICAgICAgICAgIHN0cmVhbSxcbiAgICAgICAgICBzdGF0ZVxuICAgICAgICB9XG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soYWZ0ZXJXcml0ZVRpY2ssIHN0YXRlLmFmdGVyV3JpdGVUaWNrSW5mbylcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYWZ0ZXJXcml0ZShzdHJlYW0sIHN0YXRlLCAxLCBjYilcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGFmdGVyV3JpdGVUaWNrKHsgc3RyZWFtLCBzdGF0ZSwgY291bnQsIGNiIH0pIHtcbiAgc3RhdGUuYWZ0ZXJXcml0ZVRpY2tJbmZvID0gbnVsbFxuICByZXR1cm4gYWZ0ZXJXcml0ZShzdHJlYW0sIHN0YXRlLCBjb3VudCwgY2IpXG59XG5mdW5jdGlvbiBhZnRlcldyaXRlKHN0cmVhbSwgc3RhdGUsIGNvdW50LCBjYikge1xuICBjb25zdCBuZWVkRHJhaW4gPSAhc3RhdGUuZW5kaW5nICYmICFzdHJlYW0uZGVzdHJveWVkICYmIHN0YXRlLmxlbmd0aCA9PT0gMCAmJiBzdGF0ZS5uZWVkRHJhaW5cbiAgaWYgKG5lZWREcmFpbikge1xuICAgIHN0YXRlLm5lZWREcmFpbiA9IGZhbHNlXG4gICAgc3RyZWFtLmVtaXQoJ2RyYWluJylcbiAgfVxuICB3aGlsZSAoY291bnQtLSA+IDApIHtcbiAgICBzdGF0ZS5wZW5kaW5nY2ItLVxuICAgIGNiKClcbiAgfVxuICBpZiAoc3RhdGUuZGVzdHJveWVkKSB7XG4gICAgZXJyb3JCdWZmZXIoc3RhdGUpXG4gIH1cbiAgZmluaXNoTWF5YmUoc3RyZWFtLCBzdGF0ZSlcbn1cblxuLy8gSWYgdGhlcmUncyBzb21ldGhpbmcgaW4gdGhlIGJ1ZmZlciB3YWl0aW5nLCB0aGVuIGludm9rZSBjYWxsYmFja3MuXG5mdW5jdGlvbiBlcnJvckJ1ZmZlcihzdGF0ZSkge1xuICBpZiAoc3RhdGUud3JpdGluZykge1xuICAgIHJldHVyblxuICB9XG4gIGZvciAobGV0IG4gPSBzdGF0ZS5idWZmZXJlZEluZGV4OyBuIDwgc3RhdGUuYnVmZmVyZWQubGVuZ3RoOyArK24pIHtcbiAgICB2YXIgX3N0YXRlJGVycm9yZWRcbiAgICBjb25zdCB7IGNodW5rLCBjYWxsYmFjayB9ID0gc3RhdGUuYnVmZmVyZWRbbl1cbiAgICBjb25zdCBsZW4gPSBzdGF0ZS5vYmplY3RNb2RlID8gMSA6IGNodW5rLmxlbmd0aFxuICAgIHN0YXRlLmxlbmd0aCAtPSBsZW5cbiAgICBjYWxsYmFjayhcbiAgICAgIChfc3RhdGUkZXJyb3JlZCA9IHN0YXRlLmVycm9yZWQpICE9PSBudWxsICYmIF9zdGF0ZSRlcnJvcmVkICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBfc3RhdGUkZXJyb3JlZFxuICAgICAgICA6IG5ldyBFUlJfU1RSRUFNX0RFU1RST1lFRCgnd3JpdGUnKVxuICAgIClcbiAgfVxuICBjb25zdCBvbmZpbmlzaENhbGxiYWNrcyA9IHN0YXRlW2tPbkZpbmlzaGVkXS5zcGxpY2UoMClcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBvbmZpbmlzaENhbGxiYWNrcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBfc3RhdGUkZXJyb3JlZDJcbiAgICBvbmZpbmlzaENhbGxiYWNrc1tpXShcbiAgICAgIChfc3RhdGUkZXJyb3JlZDIgPSBzdGF0ZS5lcnJvcmVkKSAhPT0gbnVsbCAmJiBfc3RhdGUkZXJyb3JlZDIgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IF9zdGF0ZSRlcnJvcmVkMlxuICAgICAgICA6IG5ldyBFUlJfU1RSRUFNX0RFU1RST1lFRCgnZW5kJylcbiAgICApXG4gIH1cbiAgcmVzZXRCdWZmZXIoc3RhdGUpXG59XG5cbi8vIElmIHRoZXJlJ3Mgc29tZXRoaW5nIGluIHRoZSBidWZmZXIgd2FpdGluZywgdGhlbiBwcm9jZXNzIGl0LlxuZnVuY3Rpb24gY2xlYXJCdWZmZXIoc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoc3RhdGUuY29ya2VkIHx8IHN0YXRlLmJ1ZmZlclByb2Nlc3NpbmcgfHwgc3RhdGUuZGVzdHJveWVkIHx8ICFzdGF0ZS5jb25zdHJ1Y3RlZCkge1xuICAgIHJldHVyblxuICB9XG4gIGNvbnN0IHsgYnVmZmVyZWQsIGJ1ZmZlcmVkSW5kZXgsIG9iamVjdE1vZGUgfSA9IHN0YXRlXG4gIGNvbnN0IGJ1ZmZlcmVkTGVuZ3RoID0gYnVmZmVyZWQubGVuZ3RoIC0gYnVmZmVyZWRJbmRleFxuICBpZiAoIWJ1ZmZlcmVkTGVuZ3RoKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgbGV0IGkgPSBidWZmZXJlZEluZGV4XG4gIHN0YXRlLmJ1ZmZlclByb2Nlc3NpbmcgPSB0cnVlXG4gIGlmIChidWZmZXJlZExlbmd0aCA+IDEgJiYgc3RyZWFtLl93cml0ZXYpIHtcbiAgICBzdGF0ZS5wZW5kaW5nY2IgLT0gYnVmZmVyZWRMZW5ndGggLSAxXG4gICAgY29uc3QgY2FsbGJhY2sgPSBzdGF0ZS5hbGxOb29wXG4gICAgICA/IG5vcFxuICAgICAgOiAoZXJyKSA9PiB7XG4gICAgICAgICAgZm9yIChsZXQgbiA9IGk7IG4gPCBidWZmZXJlZC5sZW5ndGg7ICsrbikge1xuICAgICAgICAgICAgYnVmZmVyZWRbbl0uY2FsbGJhY2soZXJyKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIC8vIE1ha2UgYSBjb3B5IG9mIGBidWZmZXJlZGAgaWYgaXQncyBnb2luZyB0byBiZSB1c2VkIGJ5IGBjYWxsYmFja2AgYWJvdmUsXG4gICAgLy8gc2luY2UgYGRvV3JpdGVgIHdpbGwgbXV0YXRlIHRoZSBhcnJheS5cbiAgICBjb25zdCBjaHVua3MgPSBzdGF0ZS5hbGxOb29wICYmIGkgPT09IDAgPyBidWZmZXJlZCA6IEFycmF5UHJvdG90eXBlU2xpY2UoYnVmZmVyZWQsIGkpXG4gICAgY2h1bmtzLmFsbEJ1ZmZlcnMgPSBzdGF0ZS5hbGxCdWZmZXJzXG4gICAgZG9Xcml0ZShzdHJlYW0sIHN0YXRlLCB0cnVlLCBzdGF0ZS5sZW5ndGgsIGNodW5rcywgJycsIGNhbGxiYWNrKVxuICAgIHJlc2V0QnVmZmVyKHN0YXRlKVxuICB9IGVsc2Uge1xuICAgIGRvIHtcbiAgICAgIGNvbnN0IHsgY2h1bmssIGVuY29kaW5nLCBjYWxsYmFjayB9ID0gYnVmZmVyZWRbaV1cbiAgICAgIGJ1ZmZlcmVkW2krK10gPSBudWxsXG4gICAgICBjb25zdCBsZW4gPSBvYmplY3RNb2RlID8gMSA6IGNodW5rLmxlbmd0aFxuICAgICAgZG9Xcml0ZShzdHJlYW0sIHN0YXRlLCBmYWxzZSwgbGVuLCBjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKVxuICAgIH0gd2hpbGUgKGkgPCBidWZmZXJlZC5sZW5ndGggJiYgIXN0YXRlLndyaXRpbmcpXG4gICAgaWYgKGkgPT09IGJ1ZmZlcmVkLmxlbmd0aCkge1xuICAgICAgcmVzZXRCdWZmZXIoc3RhdGUpXG4gICAgfSBlbHNlIGlmIChpID4gMjU2KSB7XG4gICAgICBidWZmZXJlZC5zcGxpY2UoMCwgaSlcbiAgICAgIHN0YXRlLmJ1ZmZlcmVkSW5kZXggPSAwXG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLmJ1ZmZlcmVkSW5kZXggPSBpXG4gICAgfVxuICB9XG4gIHN0YXRlLmJ1ZmZlclByb2Nlc3NpbmcgPSBmYWxzZVxufVxuV3JpdGFibGUucHJvdG90eXBlLl93cml0ZSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIGlmICh0aGlzLl93cml0ZXYpIHtcbiAgICB0aGlzLl93cml0ZXYoXG4gICAgICBbXG4gICAgICAgIHtcbiAgICAgICAgICBjaHVuayxcbiAgICAgICAgICBlbmNvZGluZ1xuICAgICAgICB9XG4gICAgICBdLFxuICAgICAgY2JcbiAgICApXG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVEKCdfd3JpdGUoKScpXG4gIH1cbn1cbldyaXRhYmxlLnByb3RvdHlwZS5fd3JpdGV2ID0gbnVsbFxuV3JpdGFibGUucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIGNvbnN0IHN0YXRlID0gdGhpcy5fd3JpdGFibGVTdGF0ZVxuICBpZiAodHlwZW9mIGNodW5rID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2IgPSBjaHVua1xuICAgIGNodW5rID0gbnVsbFxuICAgIGVuY29kaW5nID0gbnVsbFxuICB9IGVsc2UgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNiID0gZW5jb2RpbmdcbiAgICBlbmNvZGluZyA9IG51bGxcbiAgfVxuICBsZXQgZXJyXG4gIGlmIChjaHVuayAhPT0gbnVsbCAmJiBjaHVuayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgcmV0ID0gX3dyaXRlKHRoaXMsIGNodW5rLCBlbmNvZGluZylcbiAgICBpZiAocmV0IGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIGVyciA9IHJldFxuICAgIH1cbiAgfVxuXG4gIC8vIC5lbmQoKSBmdWxseSB1bmNvcmtzLlxuICBpZiAoc3RhdGUuY29ya2VkKSB7XG4gICAgc3RhdGUuY29ya2VkID0gMVxuICAgIHRoaXMudW5jb3JrKClcbiAgfVxuICBpZiAoZXJyKSB7XG4gICAgLy8gRG8gbm90aGluZy4uLlxuICB9IGVsc2UgaWYgKCFzdGF0ZS5lcnJvcmVkICYmICFzdGF0ZS5lbmRpbmcpIHtcbiAgICAvLyBUaGlzIGlzIGZvcmdpdmluZyBpbiB0ZXJtcyBvZiB1bm5lY2Vzc2FyeSBjYWxscyB0byBlbmQoKSBhbmQgY2FuIGhpZGVcbiAgICAvLyBsb2dpYyBlcnJvcnMuIEhvd2V2ZXIsIHVzdWFsbHkgc3VjaCBlcnJvcnMgYXJlIGhhcm1sZXNzIGFuZCBjYXVzaW5nIGFcbiAgICAvLyBoYXJkIGVycm9yIGNhbiBiZSBkaXNwcm9wb3J0aW9uYXRlbHkgZGVzdHJ1Y3RpdmUuIEl0IGlzIG5vdCBhbHdheXNcbiAgICAvLyB0cml2aWFsIGZvciB0aGUgdXNlciB0byBkZXRlcm1pbmUgd2hldGhlciBlbmQoKSBuZWVkcyB0byBiZSBjYWxsZWRcbiAgICAvLyBvciBub3QuXG5cbiAgICBzdGF0ZS5lbmRpbmcgPSB0cnVlXG4gICAgZmluaXNoTWF5YmUodGhpcywgc3RhdGUsIHRydWUpXG4gICAgc3RhdGUuZW5kZWQgPSB0cnVlXG4gIH0gZWxzZSBpZiAoc3RhdGUuZmluaXNoZWQpIHtcbiAgICBlcnIgPSBuZXcgRVJSX1NUUkVBTV9BTFJFQURZX0ZJTklTSEVEKCdlbmQnKVxuICB9IGVsc2UgaWYgKHN0YXRlLmRlc3Ryb3llZCkge1xuICAgIGVyciA9IG5ldyBFUlJfU1RSRUFNX0RFU1RST1lFRCgnZW5kJylcbiAgfVxuICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKGVyciB8fCBzdGF0ZS5maW5pc2hlZCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhjYiwgZXJyKVxuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZVtrT25GaW5pc2hlZF0ucHVzaChjYilcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cbmZ1bmN0aW9uIG5lZWRGaW5pc2goc3RhdGUpIHtcbiAgcmV0dXJuIChcbiAgICBzdGF0ZS5lbmRpbmcgJiZcbiAgICAhc3RhdGUuZGVzdHJveWVkICYmXG4gICAgc3RhdGUuY29uc3RydWN0ZWQgJiZcbiAgICBzdGF0ZS5sZW5ndGggPT09IDAgJiZcbiAgICAhc3RhdGUuZXJyb3JlZCAmJlxuICAgIHN0YXRlLmJ1ZmZlcmVkLmxlbmd0aCA9PT0gMCAmJlxuICAgICFzdGF0ZS5maW5pc2hlZCAmJlxuICAgICFzdGF0ZS53cml0aW5nICYmXG4gICAgIXN0YXRlLmVycm9yRW1pdHRlZCAmJlxuICAgICFzdGF0ZS5jbG9zZUVtaXR0ZWRcbiAgKVxufVxuZnVuY3Rpb24gY2FsbEZpbmFsKHN0cmVhbSwgc3RhdGUpIHtcbiAgbGV0IGNhbGxlZCA9IGZhbHNlXG4gIGZ1bmN0aW9uIG9uRmluaXNoKGVycikge1xuICAgIGlmIChjYWxsZWQpIHtcbiAgICAgIGVycm9yT3JEZXN0cm95KHN0cmVhbSwgZXJyICE9PSBudWxsICYmIGVyciAhPT0gdW5kZWZpbmVkID8gZXJyIDogRVJSX01VTFRJUExFX0NBTExCQUNLKCkpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY2FsbGVkID0gdHJ1ZVxuICAgIHN0YXRlLnBlbmRpbmdjYi0tXG4gICAgaWYgKGVycikge1xuICAgICAgY29uc3Qgb25maW5pc2hDYWxsYmFja3MgPSBzdGF0ZVtrT25GaW5pc2hlZF0uc3BsaWNlKDApXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9uZmluaXNoQ2FsbGJhY2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG9uZmluaXNoQ2FsbGJhY2tzW2ldKGVycilcbiAgICAgIH1cbiAgICAgIGVycm9yT3JEZXN0cm95KHN0cmVhbSwgZXJyLCBzdGF0ZS5zeW5jKVxuICAgIH0gZWxzZSBpZiAobmVlZEZpbmlzaChzdGF0ZSkpIHtcbiAgICAgIHN0YXRlLnByZWZpbmlzaGVkID0gdHJ1ZVxuICAgICAgc3RyZWFtLmVtaXQoJ3ByZWZpbmlzaCcpXG4gICAgICAvLyBCYWNrd2FyZHMgY29tcGF0LiBEb24ndCBjaGVjayBzdGF0ZS5zeW5jIGhlcmUuXG4gICAgICAvLyBTb21lIHN0cmVhbXMgYXNzdW1lICdmaW5pc2gnIHdpbGwgYmUgZW1pdHRlZFxuICAgICAgLy8gYXN5bmNocm9ub3VzbHkgcmVsYXRpdmUgdG8gX2ZpbmFsIGNhbGxiYWNrLlxuICAgICAgc3RhdGUucGVuZGluZ2NiKytcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZmluaXNoLCBzdHJlYW0sIHN0YXRlKVxuICAgIH1cbiAgfVxuICBzdGF0ZS5zeW5jID0gdHJ1ZVxuICBzdGF0ZS5wZW5kaW5nY2IrK1xuICB0cnkge1xuICAgIHN0cmVhbS5fZmluYWwob25GaW5pc2gpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIG9uRmluaXNoKGVycilcbiAgfVxuICBzdGF0ZS5zeW5jID0gZmFsc2Vcbn1cbmZ1bmN0aW9uIHByZWZpbmlzaChzdHJlYW0sIHN0YXRlKSB7XG4gIGlmICghc3RhdGUucHJlZmluaXNoZWQgJiYgIXN0YXRlLmZpbmFsQ2FsbGVkKSB7XG4gICAgaWYgKHR5cGVvZiBzdHJlYW0uX2ZpbmFsID09PSAnZnVuY3Rpb24nICYmICFzdGF0ZS5kZXN0cm95ZWQpIHtcbiAgICAgIHN0YXRlLmZpbmFsQ2FsbGVkID0gdHJ1ZVxuICAgICAgY2FsbEZpbmFsKHN0cmVhbSwgc3RhdGUpXG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLnByZWZpbmlzaGVkID0gdHJ1ZVxuICAgICAgc3RyZWFtLmVtaXQoJ3ByZWZpbmlzaCcpXG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBmaW5pc2hNYXliZShzdHJlYW0sIHN0YXRlLCBzeW5jKSB7XG4gIGlmIChuZWVkRmluaXNoKHN0YXRlKSkge1xuICAgIHByZWZpbmlzaChzdHJlYW0sIHN0YXRlKVxuICAgIGlmIChzdGF0ZS5wZW5kaW5nY2IgPT09IDApIHtcbiAgICAgIGlmIChzeW5jKSB7XG4gICAgICAgIHN0YXRlLnBlbmRpbmdjYisrXG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soXG4gICAgICAgICAgKHN0cmVhbSwgc3RhdGUpID0+IHtcbiAgICAgICAgICAgIGlmIChuZWVkRmluaXNoKHN0YXRlKSkge1xuICAgICAgICAgICAgICBmaW5pc2goc3RyZWFtLCBzdGF0ZSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHN0YXRlLnBlbmRpbmdjYi0tXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBzdHJlYW0sXG4gICAgICAgICAgc3RhdGVcbiAgICAgICAgKVxuICAgICAgfSBlbHNlIGlmIChuZWVkRmluaXNoKHN0YXRlKSkge1xuICAgICAgICBzdGF0ZS5wZW5kaW5nY2IrK1xuICAgICAgICBmaW5pc2goc3RyZWFtLCBzdGF0ZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGZpbmlzaChzdHJlYW0sIHN0YXRlKSB7XG4gIHN0YXRlLnBlbmRpbmdjYi0tXG4gIHN0YXRlLmZpbmlzaGVkID0gdHJ1ZVxuICBjb25zdCBvbmZpbmlzaENhbGxiYWNrcyA9IHN0YXRlW2tPbkZpbmlzaGVkXS5zcGxpY2UoMClcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBvbmZpbmlzaENhbGxiYWNrcy5sZW5ndGg7IGkrKykge1xuICAgIG9uZmluaXNoQ2FsbGJhY2tzW2ldKClcbiAgfVxuICBzdHJlYW0uZW1pdCgnZmluaXNoJylcbiAgaWYgKHN0YXRlLmF1dG9EZXN0cm95KSB7XG4gICAgLy8gSW4gY2FzZSBvZiBkdXBsZXggc3RyZWFtcyB3ZSBuZWVkIGEgd2F5IHRvIGRldGVjdFxuICAgIC8vIGlmIHRoZSByZWFkYWJsZSBzaWRlIGlzIHJlYWR5IGZvciBhdXRvRGVzdHJveSBhcyB3ZWxsLlxuICAgIGNvbnN0IHJTdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZVxuICAgIGNvbnN0IGF1dG9EZXN0cm95ID1cbiAgICAgICFyU3RhdGUgfHxcbiAgICAgIChyU3RhdGUuYXV0b0Rlc3Ryb3kgJiZcbiAgICAgICAgLy8gV2UgZG9uJ3QgZXhwZWN0IHRoZSByZWFkYWJsZSB0byBldmVyICdlbmQnXG4gICAgICAgIC8vIGlmIHJlYWRhYmxlIGlzIGV4cGxpY2l0bHkgc2V0IHRvIGZhbHNlLlxuICAgICAgICAoclN0YXRlLmVuZEVtaXR0ZWQgfHwgclN0YXRlLnJlYWRhYmxlID09PSBmYWxzZSkpXG4gICAgaWYgKGF1dG9EZXN0cm95KSB7XG4gICAgICBzdHJlYW0uZGVzdHJveSgpXG4gICAgfVxuICB9XG59XG5PYmplY3REZWZpbmVQcm9wZXJ0aWVzKFdyaXRhYmxlLnByb3RvdHlwZSwge1xuICBjbG9zZWQ6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUgPyB0aGlzLl93cml0YWJsZVN0YXRlLmNsb3NlZCA6IGZhbHNlXG4gICAgfVxuICB9LFxuICBkZXN0cm95ZWQ6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUgPyB0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZCA6IGZhbHNlXG4gICAgfSxcbiAgICBzZXQodmFsdWUpIHtcbiAgICAgIC8vIEJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHRoZSB1c2VyIGlzIGV4cGxpY2l0bHkgbWFuYWdpbmcgZGVzdHJveWVkLlxuICAgICAgaWYgKHRoaXMuX3dyaXRhYmxlU3RhdGUpIHtcbiAgICAgICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQgPSB2YWx1ZVxuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgd3JpdGFibGU6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZ2V0KCkge1xuICAgICAgY29uc3QgdyA9IHRoaXMuX3dyaXRhYmxlU3RhdGVcbiAgICAgIC8vIHcud3JpdGFibGUgPT09IGZhbHNlIG1lYW5zIHRoYXQgdGhpcyBpcyBwYXJ0IG9mIGEgRHVwbGV4IHN0cmVhbVxuICAgICAgLy8gd2hlcmUgdGhlIHdyaXRhYmxlIHNpZGUgd2FzIGRpc2FibGVkIHVwb24gY29uc3RydWN0aW9uLlxuICAgICAgLy8gQ29tcGF0LiBUaGUgdXNlciBtaWdodCBtYW51YWxseSBkaXNhYmxlIHdyaXRhYmxlIHNpZGUgdGhyb3VnaFxuICAgICAgLy8gZGVwcmVjYXRlZCBzZXR0ZXIuXG4gICAgICByZXR1cm4gISF3ICYmIHcud3JpdGFibGUgIT09IGZhbHNlICYmICF3LmRlc3Ryb3llZCAmJiAhdy5lcnJvcmVkICYmICF3LmVuZGluZyAmJiAhdy5lbmRlZFxuICAgIH0sXG4gICAgc2V0KHZhbCkge1xuICAgICAgLy8gQmFja3dhcmRzIGNvbXBhdGlibGUuXG4gICAgICBpZiAodGhpcy5fd3JpdGFibGVTdGF0ZSkge1xuICAgICAgICB0aGlzLl93cml0YWJsZVN0YXRlLndyaXRhYmxlID0gISF2YWxcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIHdyaXRhYmxlRmluaXNoZWQ6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUgPyB0aGlzLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkIDogZmFsc2VcbiAgICB9XG4gIH0sXG4gIHdyaXRhYmxlT2JqZWN0TW9kZToge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSA/IHRoaXMuX3dyaXRhYmxlU3RhdGUub2JqZWN0TW9kZSA6IGZhbHNlXG4gICAgfVxuICB9LFxuICB3cml0YWJsZUJ1ZmZlcjoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSAmJiB0aGlzLl93cml0YWJsZVN0YXRlLmdldEJ1ZmZlcigpXG4gICAgfVxuICB9LFxuICB3cml0YWJsZUVuZGVkOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl93cml0YWJsZVN0YXRlID8gdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRpbmcgOiBmYWxzZVxuICAgIH1cbiAgfSxcbiAgd3JpdGFibGVOZWVkRHJhaW46IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZ2V0KCkge1xuICAgICAgY29uc3Qgd1N0YXRlID0gdGhpcy5fd3JpdGFibGVTdGF0ZVxuICAgICAgaWYgKCF3U3RhdGUpIHJldHVybiBmYWxzZVxuICAgICAgcmV0dXJuICF3U3RhdGUuZGVzdHJveWVkICYmICF3U3RhdGUuZW5kaW5nICYmIHdTdGF0ZS5uZWVkRHJhaW5cbiAgICB9XG4gIH0sXG4gIHdyaXRhYmxlSGlnaFdhdGVyTWFyazoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSAmJiB0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcmtcbiAgICB9XG4gIH0sXG4gIHdyaXRhYmxlQ29ya2VkOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl93cml0YWJsZVN0YXRlID8gdGhpcy5fd3JpdGFibGVTdGF0ZS5jb3JrZWQgOiAwXG4gICAgfVxuICB9LFxuICB3cml0YWJsZUxlbmd0aDoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSAmJiB0aGlzLl93cml0YWJsZVN0YXRlLmxlbmd0aFxuICAgIH1cbiAgfSxcbiAgZXJyb3JlZDoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSA/IHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JlZCA6IG51bGxcbiAgICB9XG4gIH0sXG4gIHdyaXRhYmxlQWJvcnRlZDoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiAhIShcbiAgICAgICAgdGhpcy5fd3JpdGFibGVTdGF0ZS53cml0YWJsZSAhPT0gZmFsc2UgJiZcbiAgICAgICAgKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkIHx8IHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JlZCkgJiZcbiAgICAgICAgIXRoaXMuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWRcbiAgICAgIClcbiAgICB9XG4gIH1cbn0pXG5jb25zdCBkZXN0cm95ID0gZGVzdHJveUltcGwuZGVzdHJveVxuV3JpdGFibGUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoZXJyLCBjYikge1xuICBjb25zdCBzdGF0ZSA9IHRoaXMuX3dyaXRhYmxlU3RhdGVcblxuICAvLyBJbnZva2UgcGVuZGluZyBjYWxsYmFja3MuXG4gIGlmICghc3RhdGUuZGVzdHJveWVkICYmIChzdGF0ZS5idWZmZXJlZEluZGV4IDwgc3RhdGUuYnVmZmVyZWQubGVuZ3RoIHx8IHN0YXRlW2tPbkZpbmlzaGVkXS5sZW5ndGgpKSB7XG4gICAgcHJvY2Vzcy5uZXh0VGljayhlcnJvckJ1ZmZlciwgc3RhdGUpXG4gIH1cbiAgZGVzdHJveS5jYWxsKHRoaXMsIGVyciwgY2IpXG4gIHJldHVybiB0aGlzXG59XG5Xcml0YWJsZS5wcm90b3R5cGUuX3VuZGVzdHJveSA9IGRlc3Ryb3lJbXBsLnVuZGVzdHJveVxuV3JpdGFibGUucHJvdG90eXBlLl9kZXN0cm95ID0gZnVuY3Rpb24gKGVyciwgY2IpIHtcbiAgY2IoZXJyKVxufVxuV3JpdGFibGUucHJvdG90eXBlW0VFLmNhcHR1cmVSZWplY3Rpb25TeW1ib2xdID0gZnVuY3Rpb24gKGVycikge1xuICB0aGlzLmRlc3Ryb3koZXJyKVxufVxubGV0IHdlYlN0cmVhbXNBZGFwdGVyc1xuXG4vLyBMYXp5IHRvIGF2b2lkIGNpcmN1bGFyIHJlZmVyZW5jZXNcbmZ1bmN0aW9uIGxhenlXZWJTdHJlYW1zKCkge1xuICBpZiAod2ViU3RyZWFtc0FkYXB0ZXJzID09PSB1bmRlZmluZWQpIHdlYlN0cmVhbXNBZGFwdGVycyA9IHt9XG4gIHJldHVybiB3ZWJTdHJlYW1zQWRhcHRlcnNcbn1cbldyaXRhYmxlLmZyb21XZWIgPSBmdW5jdGlvbiAod3JpdGFibGVTdHJlYW0sIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGxhenlXZWJTdHJlYW1zKCkubmV3U3RyZWFtV3JpdGFibGVGcm9tV3JpdGFibGVTdHJlYW0od3JpdGFibGVTdHJlYW0sIG9wdGlvbnMpXG59XG5Xcml0YWJsZS50b1dlYiA9IGZ1bmN0aW9uIChzdHJlYW1Xcml0YWJsZSkge1xuICByZXR1cm4gbGF6eVdlYlN0cmVhbXMoKS5uZXdXcml0YWJsZVN0cmVhbUZyb21TdHJlYW1Xcml0YWJsZShzdHJlYW1Xcml0YWJsZSlcbn1cbiIsCiAgICAiLyogcmVwbGFjZW1lbnQgc3RhcnQgKi9cblxuY29uc3QgcHJvY2VzcyA9IHJlcXVpcmUoJ3Byb2Nlc3MvJylcblxuLyogcmVwbGFjZW1lbnQgZW5kICovXG5cbjsoJ3VzZSBzdHJpY3QnKVxuY29uc3QgYnVmZmVyTW9kdWxlID0gcmVxdWlyZSgnYnVmZmVyJylcbmNvbnN0IHtcbiAgaXNSZWFkYWJsZSxcbiAgaXNXcml0YWJsZSxcbiAgaXNJdGVyYWJsZSxcbiAgaXNOb2RlU3RyZWFtLFxuICBpc1JlYWRhYmxlTm9kZVN0cmVhbSxcbiAgaXNXcml0YWJsZU5vZGVTdHJlYW0sXG4gIGlzRHVwbGV4Tm9kZVN0cmVhbSxcbiAgaXNSZWFkYWJsZVN0cmVhbSxcbiAgaXNXcml0YWJsZVN0cmVhbVxufSA9IHJlcXVpcmUoJy4vdXRpbHMnKVxuY29uc3QgZW9zID0gcmVxdWlyZSgnLi9lbmQtb2Ytc3RyZWFtJylcbmNvbnN0IHtcbiAgQWJvcnRFcnJvcixcbiAgY29kZXM6IHsgRVJSX0lOVkFMSURfQVJHX1RZUEUsIEVSUl9JTlZBTElEX1JFVFVSTl9WQUxVRSB9XG59ID0gcmVxdWlyZSgnLi4vLi4vb3Vycy9lcnJvcnMnKVxuY29uc3QgeyBkZXN0cm95ZXIgfSA9IHJlcXVpcmUoJy4vZGVzdHJveScpXG5jb25zdCBEdXBsZXggPSByZXF1aXJlKCcuL2R1cGxleCcpXG5jb25zdCBSZWFkYWJsZSA9IHJlcXVpcmUoJy4vcmVhZGFibGUnKVxuY29uc3QgV3JpdGFibGUgPSByZXF1aXJlKCcuL3dyaXRhYmxlJylcbmNvbnN0IHsgY3JlYXRlRGVmZXJyZWRQcm9taXNlIH0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL3V0aWwnKVxuY29uc3QgZnJvbSA9IHJlcXVpcmUoJy4vZnJvbScpXG5jb25zdCBCbG9iID0gZ2xvYmFsVGhpcy5CbG9iIHx8IGJ1ZmZlck1vZHVsZS5CbG9iXG5jb25zdCBpc0Jsb2IgPVxuICB0eXBlb2YgQmxvYiAhPT0gJ3VuZGVmaW5lZCdcbiAgICA/IGZ1bmN0aW9uIGlzQmxvYihiKSB7XG4gICAgICAgIHJldHVybiBiIGluc3RhbmNlb2YgQmxvYlxuICAgICAgfVxuICAgIDogZnVuY3Rpb24gaXNCbG9iKGIpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG5jb25zdCBBYm9ydENvbnRyb2xsZXIgPSBnbG9iYWxUaGlzLkFib3J0Q29udHJvbGxlciB8fCByZXF1aXJlKCdhYm9ydC1jb250cm9sbGVyJykuQWJvcnRDb250cm9sbGVyXG5jb25zdCB7IEZ1bmN0aW9uUHJvdG90eXBlQ2FsbCB9ID0gcmVxdWlyZSgnLi4vLi4vb3Vycy9wcmltb3JkaWFscycpXG5cbi8vIFRoaXMgaXMgbmVlZGVkIGZvciBwcmUgbm9kZSAxNy5cbmNsYXNzIER1cGxleGlmeSBleHRlbmRzIER1cGxleCB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICBzdXBlcihvcHRpb25zKVxuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvMzQzODVcblxuICAgIGlmICgob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBvcHRpb25zLnJlYWRhYmxlKSA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUucmVhZGFibGUgPSBmYWxzZVxuICAgICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRlZCA9IHRydWVcbiAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCA9IHRydWVcbiAgICB9XG4gICAgaWYgKChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IG9wdGlvbnMud3JpdGFibGUpID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5fd3JpdGFibGVTdGF0ZS53cml0YWJsZSA9IGZhbHNlXG4gICAgICB0aGlzLl93cml0YWJsZVN0YXRlLmVuZGluZyA9IHRydWVcbiAgICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWQgPSB0cnVlXG4gICAgICB0aGlzLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkdXBsZXhpZnkoYm9keSwgbmFtZSkge1xuICBpZiAoaXNEdXBsZXhOb2RlU3RyZWFtKGJvZHkpKSB7XG4gICAgcmV0dXJuIGJvZHlcbiAgfVxuICBpZiAoaXNSZWFkYWJsZU5vZGVTdHJlYW0oYm9keSkpIHtcbiAgICByZXR1cm4gX2R1cGxleGlmeSh7XG4gICAgICByZWFkYWJsZTogYm9keVxuICAgIH0pXG4gIH1cbiAgaWYgKGlzV3JpdGFibGVOb2RlU3RyZWFtKGJvZHkpKSB7XG4gICAgcmV0dXJuIF9kdXBsZXhpZnkoe1xuICAgICAgd3JpdGFibGU6IGJvZHlcbiAgICB9KVxuICB9XG4gIGlmIChpc05vZGVTdHJlYW0oYm9keSkpIHtcbiAgICByZXR1cm4gX2R1cGxleGlmeSh7XG4gICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICByZWFkYWJsZTogZmFsc2VcbiAgICB9KVxuICB9XG4gIGlmIChpc1JlYWRhYmxlU3RyZWFtKGJvZHkpKSB7XG4gICAgcmV0dXJuIF9kdXBsZXhpZnkoe1xuICAgICAgcmVhZGFibGU6IFJlYWRhYmxlLmZyb21XZWIoYm9keSlcbiAgICB9KVxuICB9XG4gIGlmIChpc1dyaXRhYmxlU3RyZWFtKGJvZHkpKSB7XG4gICAgcmV0dXJuIF9kdXBsZXhpZnkoe1xuICAgICAgd3JpdGFibGU6IFdyaXRhYmxlLmZyb21XZWIoYm9keSlcbiAgICB9KVxuICB9XG4gIGlmICh0eXBlb2YgYm9keSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNvbnN0IHsgdmFsdWUsIHdyaXRlLCBmaW5hbCwgZGVzdHJveSB9ID0gZnJvbUFzeW5jR2VuKGJvZHkpXG4gICAgaWYgKGlzSXRlcmFibGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gZnJvbShEdXBsZXhpZnksIHZhbHVlLCB7XG4gICAgICAgIC8vIFRPRE8gKHJvbmFnKTogaGlnaFdhdGVyTWFyaz9cbiAgICAgICAgb2JqZWN0TW9kZTogdHJ1ZSxcbiAgICAgICAgd3JpdGUsXG4gICAgICAgIGZpbmFsLFxuICAgICAgICBkZXN0cm95XG4gICAgICB9KVxuICAgIH1cbiAgICBjb25zdCB0aGVuID0gdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHZhbHVlLnRoZW5cbiAgICBpZiAodHlwZW9mIHRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGxldCBkXG4gICAgICBjb25zdCBwcm9taXNlID0gRnVuY3Rpb25Qcm90b3R5cGVDYWxsKFxuICAgICAgICB0aGVuLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgKHZhbCkgPT4ge1xuICAgICAgICAgIGlmICh2YWwgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX1JFVFVSTl9WQUxVRSgnbnVsbHknLCAnYm9keScsIHZhbClcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICBkZXN0cm95ZXIoZCwgZXJyKVxuICAgICAgICB9XG4gICAgICApXG4gICAgICByZXR1cm4gKGQgPSBuZXcgRHVwbGV4aWZ5KHtcbiAgICAgICAgLy8gVE9ETyAocm9uYWcpOiBoaWdoV2F0ZXJNYXJrP1xuICAgICAgICBvYmplY3RNb2RlOiB0cnVlLFxuICAgICAgICByZWFkYWJsZTogZmFsc2UsXG4gICAgICAgIHdyaXRlLFxuICAgICAgICBmaW5hbChjYikge1xuICAgICAgICAgIGZpbmFsKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGF3YWl0IHByb21pc2VcbiAgICAgICAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhjYiwgbnVsbClcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGNiLCBlcnIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfSxcbiAgICAgICAgZGVzdHJveVxuICAgICAgfSkpXG4gICAgfVxuICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9SRVRVUk5fVkFMVUUoJ0l0ZXJhYmxlLCBBc3luY0l0ZXJhYmxlIG9yIEFzeW5jRnVuY3Rpb24nLCBuYW1lLCB2YWx1ZSlcbiAgfVxuICBpZiAoaXNCbG9iKGJvZHkpKSB7XG4gICAgcmV0dXJuIGR1cGxleGlmeShib2R5LmFycmF5QnVmZmVyKCkpXG4gIH1cbiAgaWYgKGlzSXRlcmFibGUoYm9keSkpIHtcbiAgICByZXR1cm4gZnJvbShEdXBsZXhpZnksIGJvZHksIHtcbiAgICAgIC8vIFRPRE8gKHJvbmFnKTogaGlnaFdhdGVyTWFyaz9cbiAgICAgIG9iamVjdE1vZGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogZmFsc2VcbiAgICB9KVxuICB9XG4gIGlmIChcbiAgICBpc1JlYWRhYmxlU3RyZWFtKGJvZHkgPT09IG51bGwgfHwgYm9keSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogYm9keS5yZWFkYWJsZSkgJiZcbiAgICBpc1dyaXRhYmxlU3RyZWFtKGJvZHkgPT09IG51bGwgfHwgYm9keSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogYm9keS53cml0YWJsZSlcbiAgKSB7XG4gICAgcmV0dXJuIER1cGxleGlmeS5mcm9tV2ViKGJvZHkpXG4gIH1cbiAgaWYgKFxuICAgIHR5cGVvZiAoYm9keSA9PT0gbnVsbCB8fCBib2R5ID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBib2R5LndyaXRhYmxlKSA9PT0gJ29iamVjdCcgfHxcbiAgICB0eXBlb2YgKGJvZHkgPT09IG51bGwgfHwgYm9keSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogYm9keS5yZWFkYWJsZSkgPT09ICdvYmplY3QnXG4gICkge1xuICAgIGNvbnN0IHJlYWRhYmxlID1cbiAgICAgIGJvZHkgIT09IG51bGwgJiYgYm9keSAhPT0gdW5kZWZpbmVkICYmIGJvZHkucmVhZGFibGVcbiAgICAgICAgPyBpc1JlYWRhYmxlTm9kZVN0cmVhbShib2R5ID09PSBudWxsIHx8IGJvZHkgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IGJvZHkucmVhZGFibGUpXG4gICAgICAgICAgPyBib2R5ID09PSBudWxsIHx8IGJvZHkgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgICAgIDogYm9keS5yZWFkYWJsZVxuICAgICAgICAgIDogZHVwbGV4aWZ5KGJvZHkucmVhZGFibGUpXG4gICAgICAgIDogdW5kZWZpbmVkXG4gICAgY29uc3Qgd3JpdGFibGUgPVxuICAgICAgYm9keSAhPT0gbnVsbCAmJiBib2R5ICE9PSB1bmRlZmluZWQgJiYgYm9keS53cml0YWJsZVxuICAgICAgICA/IGlzV3JpdGFibGVOb2RlU3RyZWFtKGJvZHkgPT09IG51bGwgfHwgYm9keSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogYm9keS53cml0YWJsZSlcbiAgICAgICAgICA/IGJvZHkgPT09IG51bGwgfHwgYm9keSA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICAgICAgOiBib2R5LndyaXRhYmxlXG4gICAgICAgICAgOiBkdXBsZXhpZnkoYm9keS53cml0YWJsZSlcbiAgICAgICAgOiB1bmRlZmluZWRcbiAgICByZXR1cm4gX2R1cGxleGlmeSh7XG4gICAgICByZWFkYWJsZSxcbiAgICAgIHdyaXRhYmxlXG4gICAgfSlcbiAgfVxuICBjb25zdCB0aGVuID0gYm9keSA9PT0gbnVsbCB8fCBib2R5ID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBib2R5LnRoZW5cbiAgaWYgKHR5cGVvZiB0aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgbGV0IGRcbiAgICBGdW5jdGlvblByb3RvdHlwZUNhbGwoXG4gICAgICB0aGVuLFxuICAgICAgYm9keSxcbiAgICAgICh2YWwpID0+IHtcbiAgICAgICAgaWYgKHZhbCAhPSBudWxsKSB7XG4gICAgICAgICAgZC5wdXNoKHZhbClcbiAgICAgICAgfVxuICAgICAgICBkLnB1c2gobnVsbClcbiAgICAgIH0sXG4gICAgICAoZXJyKSA9PiB7XG4gICAgICAgIGRlc3Ryb3llcihkLCBlcnIpXG4gICAgICB9XG4gICAgKVxuICAgIHJldHVybiAoZCA9IG5ldyBEdXBsZXhpZnkoe1xuICAgICAgb2JqZWN0TW9kZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIHJlYWQoKSB7fVxuICAgIH0pKVxuICB9XG4gIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRShcbiAgICBuYW1lLFxuICAgIFtcbiAgICAgICdCbG9iJyxcbiAgICAgICdSZWFkYWJsZVN0cmVhbScsXG4gICAgICAnV3JpdGFibGVTdHJlYW0nLFxuICAgICAgJ1N0cmVhbScsXG4gICAgICAnSXRlcmFibGUnLFxuICAgICAgJ0FzeW5jSXRlcmFibGUnLFxuICAgICAgJ0Z1bmN0aW9uJyxcbiAgICAgICd7IHJlYWRhYmxlLCB3cml0YWJsZSB9IHBhaXInLFxuICAgICAgJ1Byb21pc2UnXG4gICAgXSxcbiAgICBib2R5XG4gIClcbn1cbmZ1bmN0aW9uIGZyb21Bc3luY0dlbihmbikge1xuICBsZXQgeyBwcm9taXNlLCByZXNvbHZlIH0gPSBjcmVhdGVEZWZlcnJlZFByb21pc2UoKVxuICBjb25zdCBhYyA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuICBjb25zdCBzaWduYWwgPSBhYy5zaWduYWxcbiAgY29uc3QgdmFsdWUgPSBmbihcbiAgICAoYXN5bmMgZnVuY3Rpb24qICgpIHtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIGNvbnN0IF9wcm9taXNlID0gcHJvbWlzZVxuICAgICAgICBwcm9taXNlID0gbnVsbFxuICAgICAgICBjb25zdCB7IGNodW5rLCBkb25lLCBjYiB9ID0gYXdhaXQgX3Byb21pc2VcbiAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhjYilcbiAgICAgICAgaWYgKGRvbmUpIHJldHVyblxuICAgICAgICBpZiAoc2lnbmFsLmFib3J0ZWQpXG4gICAgICAgICAgdGhyb3cgbmV3IEFib3J0RXJyb3IodW5kZWZpbmVkLCB7XG4gICAgICAgICAgICBjYXVzZTogc2lnbmFsLnJlYXNvblxuICAgICAgICAgIH0pXG4gICAgICAgIDsoeyBwcm9taXNlLCByZXNvbHZlIH0gPSBjcmVhdGVEZWZlcnJlZFByb21pc2UoKSlcbiAgICAgICAgeWllbGQgY2h1bmtcbiAgICAgIH1cbiAgICB9KSgpLFxuICAgIHtcbiAgICAgIHNpZ25hbFxuICAgIH1cbiAgKVxuICByZXR1cm4ge1xuICAgIHZhbHVlLFxuICAgIHdyaXRlKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgICAgIGNvbnN0IF9yZXNvbHZlID0gcmVzb2x2ZVxuICAgICAgcmVzb2x2ZSA9IG51bGxcbiAgICAgIF9yZXNvbHZlKHtcbiAgICAgICAgY2h1bmssXG4gICAgICAgIGRvbmU6IGZhbHNlLFxuICAgICAgICBjYlxuICAgICAgfSlcbiAgICB9LFxuICAgIGZpbmFsKGNiKSB7XG4gICAgICBjb25zdCBfcmVzb2x2ZSA9IHJlc29sdmVcbiAgICAgIHJlc29sdmUgPSBudWxsXG4gICAgICBfcmVzb2x2ZSh7XG4gICAgICAgIGRvbmU6IHRydWUsXG4gICAgICAgIGNiXG4gICAgICB9KVxuICAgIH0sXG4gICAgZGVzdHJveShlcnIsIGNiKSB7XG4gICAgICBhYy5hYm9ydCgpXG4gICAgICBjYihlcnIpXG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBfZHVwbGV4aWZ5KHBhaXIpIHtcbiAgY29uc3QgciA9IHBhaXIucmVhZGFibGUgJiYgdHlwZW9mIHBhaXIucmVhZGFibGUucmVhZCAhPT0gJ2Z1bmN0aW9uJyA/IFJlYWRhYmxlLndyYXAocGFpci5yZWFkYWJsZSkgOiBwYWlyLnJlYWRhYmxlXG4gIGNvbnN0IHcgPSBwYWlyLndyaXRhYmxlXG4gIGxldCByZWFkYWJsZSA9ICEhaXNSZWFkYWJsZShyKVxuICBsZXQgd3JpdGFibGUgPSAhIWlzV3JpdGFibGUodylcbiAgbGV0IG9uZHJhaW5cbiAgbGV0IG9uZmluaXNoXG4gIGxldCBvbnJlYWRhYmxlXG4gIGxldCBvbmNsb3NlXG4gIGxldCBkXG4gIGZ1bmN0aW9uIG9uZmluaXNoZWQoZXJyKSB7XG4gICAgY29uc3QgY2IgPSBvbmNsb3NlXG4gICAgb25jbG9zZSA9IG51bGxcbiAgICBpZiAoY2IpIHtcbiAgICAgIGNiKGVycilcbiAgICB9IGVsc2UgaWYgKGVycikge1xuICAgICAgZC5kZXN0cm95KGVycilcbiAgICB9XG4gIH1cblxuICAvLyBUT0RPKHJvbmFnKTogQXZvaWQgZG91YmxlIGJ1ZmZlcmluZy5cbiAgLy8gSW1wbGVtZW50IFdyaXRhYmxlL1JlYWRhYmxlL0R1cGxleCB0cmFpdHMuXG4gIC8vIFNlZSwgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvMzM1MTUuXG4gIGQgPSBuZXcgRHVwbGV4aWZ5KHtcbiAgICAvLyBUT0RPIChyb25hZyk6IGhpZ2hXYXRlck1hcms/XG4gICAgcmVhZGFibGVPYmplY3RNb2RlOiAhIShyICE9PSBudWxsICYmIHIgIT09IHVuZGVmaW5lZCAmJiByLnJlYWRhYmxlT2JqZWN0TW9kZSksXG4gICAgd3JpdGFibGVPYmplY3RNb2RlOiAhISh3ICE9PSBudWxsICYmIHcgIT09IHVuZGVmaW5lZCAmJiB3LndyaXRhYmxlT2JqZWN0TW9kZSksXG4gICAgcmVhZGFibGUsXG4gICAgd3JpdGFibGVcbiAgfSlcbiAgaWYgKHdyaXRhYmxlKSB7XG4gICAgZW9zKHcsIChlcnIpID0+IHtcbiAgICAgIHdyaXRhYmxlID0gZmFsc2VcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgZGVzdHJveWVyKHIsIGVycilcbiAgICAgIH1cbiAgICAgIG9uZmluaXNoZWQoZXJyKVxuICAgIH0pXG4gICAgZC5fd3JpdGUgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYWxsYmFjaykge1xuICAgICAgaWYgKHcud3JpdGUoY2h1bmssIGVuY29kaW5nKSkge1xuICAgICAgICBjYWxsYmFjaygpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvbmRyYWluID0gY2FsbGJhY2tcbiAgICAgIH1cbiAgICB9XG4gICAgZC5fZmluYWwgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgIHcuZW5kKClcbiAgICAgIG9uZmluaXNoID0gY2FsbGJhY2tcbiAgICB9XG4gICAgdy5vbignZHJhaW4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAob25kcmFpbikge1xuICAgICAgICBjb25zdCBjYiA9IG9uZHJhaW5cbiAgICAgICAgb25kcmFpbiA9IG51bGxcbiAgICAgICAgY2IoKVxuICAgICAgfVxuICAgIH0pXG4gICAgdy5vbignZmluaXNoJywgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKG9uZmluaXNoKSB7XG4gICAgICAgIGNvbnN0IGNiID0gb25maW5pc2hcbiAgICAgICAgb25maW5pc2ggPSBudWxsXG4gICAgICAgIGNiKClcbiAgICAgIH1cbiAgICB9KVxuICB9XG4gIGlmIChyZWFkYWJsZSkge1xuICAgIGVvcyhyLCAoZXJyKSA9PiB7XG4gICAgICByZWFkYWJsZSA9IGZhbHNlXG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIGRlc3Ryb3llcihyLCBlcnIpXG4gICAgICB9XG4gICAgICBvbmZpbmlzaGVkKGVycilcbiAgICB9KVxuICAgIHIub24oJ3JlYWRhYmxlJywgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKG9ucmVhZGFibGUpIHtcbiAgICAgICAgY29uc3QgY2IgPSBvbnJlYWRhYmxlXG4gICAgICAgIG9ucmVhZGFibGUgPSBudWxsXG4gICAgICAgIGNiKClcbiAgICAgIH1cbiAgICB9KVxuICAgIHIub24oJ2VuZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGQucHVzaChudWxsKVxuICAgIH0pXG4gICAgZC5fcmVhZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIGNvbnN0IGJ1ZiA9IHIucmVhZCgpXG4gICAgICAgIGlmIChidWYgPT09IG51bGwpIHtcbiAgICAgICAgICBvbnJlYWRhYmxlID0gZC5fcmVhZFxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGlmICghZC5wdXNoKGJ1ZikpIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBkLl9kZXN0cm95ID0gZnVuY3Rpb24gKGVyciwgY2FsbGJhY2spIHtcbiAgICBpZiAoIWVyciAmJiBvbmNsb3NlICE9PSBudWxsKSB7XG4gICAgICBlcnIgPSBuZXcgQWJvcnRFcnJvcigpXG4gICAgfVxuICAgIG9ucmVhZGFibGUgPSBudWxsXG4gICAgb25kcmFpbiA9IG51bGxcbiAgICBvbmZpbmlzaCA9IG51bGxcbiAgICBpZiAob25jbG9zZSA9PT0gbnVsbCkge1xuICAgICAgY2FsbGJhY2soZXJyKVxuICAgIH0gZWxzZSB7XG4gICAgICBvbmNsb3NlID0gY2FsbGJhY2tcbiAgICAgIGRlc3Ryb3llcih3LCBlcnIpXG4gICAgICBkZXN0cm95ZXIociwgZXJyKVxuICAgIH1cbiAgfVxuICByZXR1cm4gZFxufVxuIiwKICAgICIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuLy8gYSBkdXBsZXggc3RyZWFtIGlzIGp1c3QgYSBzdHJlYW0gdGhhdCBpcyBib3RoIHJlYWRhYmxlIGFuZCB3cml0YWJsZS5cbi8vIFNpbmNlIEpTIGRvZXNuJ3QgaGF2ZSBtdWx0aXBsZSBwcm90b3R5cGUgaW5oZXJpdGFuY2UsIHRoaXMgY2xhc3Ncbi8vIHByb3RvdHlwaWNhbGx5IGluaGVyaXRzIGZyb20gUmVhZGFibGUsIGFuZCB0aGVuIHBhcmFzaXRpY2FsbHkgZnJvbVxuLy8gV3JpdGFibGUuXG5cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIE9iamVjdERlZmluZVByb3BlcnRpZXMsXG4gIE9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcixcbiAgT2JqZWN0S2V5cyxcbiAgT2JqZWN0U2V0UHJvdG90eXBlT2Zcbn0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL3ByaW1vcmRpYWxzJylcbm1vZHVsZS5leHBvcnRzID0gRHVwbGV4XG5jb25zdCBSZWFkYWJsZSA9IHJlcXVpcmUoJy4vcmVhZGFibGUnKVxuY29uc3QgV3JpdGFibGUgPSByZXF1aXJlKCcuL3dyaXRhYmxlJylcbk9iamVjdFNldFByb3RvdHlwZU9mKER1cGxleC5wcm90b3R5cGUsIFJlYWRhYmxlLnByb3RvdHlwZSlcbk9iamVjdFNldFByb3RvdHlwZU9mKER1cGxleCwgUmVhZGFibGUpXG57XG4gIGNvbnN0IGtleXMgPSBPYmplY3RLZXlzKFdyaXRhYmxlLnByb3RvdHlwZSlcbiAgLy8gQWxsb3cgdGhlIGtleXMgYXJyYXkgdG8gYmUgR0MnZWQuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IG1ldGhvZCA9IGtleXNbaV1cbiAgICBpZiAoIUR1cGxleC5wcm90b3R5cGVbbWV0aG9kXSkgRHVwbGV4LnByb3RvdHlwZVttZXRob2RdID0gV3JpdGFibGUucHJvdG90eXBlW21ldGhvZF1cbiAgfVxufVxuZnVuY3Rpb24gRHVwbGV4KG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIER1cGxleCkpIHJldHVybiBuZXcgRHVwbGV4KG9wdGlvbnMpXG4gIFJlYWRhYmxlLmNhbGwodGhpcywgb3B0aW9ucylcbiAgV3JpdGFibGUuY2FsbCh0aGlzLCBvcHRpb25zKVxuICBpZiAob3B0aW9ucykge1xuICAgIHRoaXMuYWxsb3dIYWxmT3BlbiA9IG9wdGlvbnMuYWxsb3dIYWxmT3BlbiAhPT0gZmFsc2VcbiAgICBpZiAob3B0aW9ucy5yZWFkYWJsZSA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUucmVhZGFibGUgPSBmYWxzZVxuICAgICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRlZCA9IHRydWVcbiAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCA9IHRydWVcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMud3JpdGFibGUgPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLl93cml0YWJsZVN0YXRlLndyaXRhYmxlID0gZmFsc2VcbiAgICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kaW5nID0gdHJ1ZVxuICAgICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZCA9IHRydWVcbiAgICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQgPSB0cnVlXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRoaXMuYWxsb3dIYWxmT3BlbiA9IHRydWVcbiAgfVxufVxuT2JqZWN0RGVmaW5lUHJvcGVydGllcyhEdXBsZXgucHJvdG90eXBlLCB7XG4gIHdyaXRhYmxlOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIC4uLk9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcihXcml0YWJsZS5wcm90b3R5cGUsICd3cml0YWJsZScpXG4gIH0sXG4gIHdyaXRhYmxlSGlnaFdhdGVyTWFyazoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAuLi5PYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoV3JpdGFibGUucHJvdG90eXBlLCAnd3JpdGFibGVIaWdoV2F0ZXJNYXJrJylcbiAgfSxcbiAgd3JpdGFibGVPYmplY3RNb2RlOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIC4uLk9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcihXcml0YWJsZS5wcm90b3R5cGUsICd3cml0YWJsZU9iamVjdE1vZGUnKVxuICB9LFxuICB3cml0YWJsZUJ1ZmZlcjoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAuLi5PYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoV3JpdGFibGUucHJvdG90eXBlLCAnd3JpdGFibGVCdWZmZXInKVxuICB9LFxuICB3cml0YWJsZUxlbmd0aDoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAuLi5PYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoV3JpdGFibGUucHJvdG90eXBlLCAnd3JpdGFibGVMZW5ndGgnKVxuICB9LFxuICB3cml0YWJsZUZpbmlzaGVkOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIC4uLk9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcihXcml0YWJsZS5wcm90b3R5cGUsICd3cml0YWJsZUZpbmlzaGVkJylcbiAgfSxcbiAgd3JpdGFibGVDb3JrZWQ6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgLi4uT2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFdyaXRhYmxlLnByb3RvdHlwZSwgJ3dyaXRhYmxlQ29ya2VkJylcbiAgfSxcbiAgd3JpdGFibGVFbmRlZDoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAuLi5PYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoV3JpdGFibGUucHJvdG90eXBlLCAnd3JpdGFibGVFbmRlZCcpXG4gIH0sXG4gIHdyaXRhYmxlTmVlZERyYWluOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIC4uLk9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcihXcml0YWJsZS5wcm90b3R5cGUsICd3cml0YWJsZU5lZWREcmFpbicpXG4gIH0sXG4gIGRlc3Ryb3llZDoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBnZXQoKSB7XG4gICAgICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZSA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuX3dyaXRhYmxlU3RhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCAmJiB0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZFxuICAgIH0sXG4gICAgc2V0KHZhbHVlKSB7XG4gICAgICAvLyBCYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB0aGUgdXNlciBpcyBleHBsaWNpdGx5XG4gICAgICAvLyBtYW5hZ2luZyBkZXN0cm95ZWQuXG4gICAgICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZSAmJiB0aGlzLl93cml0YWJsZVN0YXRlKSB7XG4gICAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkID0gdmFsdWVcbiAgICAgICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQgPSB2YWx1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbmxldCB3ZWJTdHJlYW1zQWRhcHRlcnNcblxuLy8gTGF6eSB0byBhdm9pZCBjaXJjdWxhciByZWZlcmVuY2VzXG5mdW5jdGlvbiBsYXp5V2ViU3RyZWFtcygpIHtcbiAgaWYgKHdlYlN0cmVhbXNBZGFwdGVycyA9PT0gdW5kZWZpbmVkKSB3ZWJTdHJlYW1zQWRhcHRlcnMgPSB7fVxuICByZXR1cm4gd2ViU3RyZWFtc0FkYXB0ZXJzXG59XG5EdXBsZXguZnJvbVdlYiA9IGZ1bmN0aW9uIChwYWlyLCBvcHRpb25zKSB7XG4gIHJldHVybiBsYXp5V2ViU3RyZWFtcygpLm5ld1N0cmVhbUR1cGxleEZyb21SZWFkYWJsZVdyaXRhYmxlUGFpcihwYWlyLCBvcHRpb25zKVxufVxuRHVwbGV4LnRvV2ViID0gZnVuY3Rpb24gKGR1cGxleCkge1xuICByZXR1cm4gbGF6eVdlYlN0cmVhbXMoKS5uZXdSZWFkYWJsZVdyaXRhYmxlUGFpckZyb21EdXBsZXgoZHVwbGV4KVxufVxubGV0IGR1cGxleGlmeVxuRHVwbGV4LmZyb20gPSBmdW5jdGlvbiAoYm9keSkge1xuICBpZiAoIWR1cGxleGlmeSkge1xuICAgIGR1cGxleGlmeSA9IHJlcXVpcmUoJy4vZHVwbGV4aWZ5JylcbiAgfVxuICByZXR1cm4gZHVwbGV4aWZ5KGJvZHksICdib2R5Jylcbn1cbiIsCiAgICAiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbi8vIGEgdHJhbnNmb3JtIHN0cmVhbSBpcyBhIHJlYWRhYmxlL3dyaXRhYmxlIHN0cmVhbSB3aGVyZSB5b3UgZG9cbi8vIHNvbWV0aGluZyB3aXRoIHRoZSBkYXRhLiAgU29tZXRpbWVzIGl0J3MgY2FsbGVkIGEgXCJmaWx0ZXJcIixcbi8vIGJ1dCB0aGF0J3Mgbm90IGEgZ3JlYXQgbmFtZSBmb3IgaXQsIHNpbmNlIHRoYXQgaW1wbGllcyBhIHRoaW5nIHdoZXJlXG4vLyBzb21lIGJpdHMgcGFzcyB0aHJvdWdoLCBhbmQgb3RoZXJzIGFyZSBzaW1wbHkgaWdub3JlZC4gIChUaGF0IHdvdWxkXG4vLyBiZSBhIHZhbGlkIGV4YW1wbGUgb2YgYSB0cmFuc2Zvcm0sIG9mIGNvdXJzZS4pXG4vL1xuLy8gV2hpbGUgdGhlIG91dHB1dCBpcyBjYXVzYWxseSByZWxhdGVkIHRvIHRoZSBpbnB1dCwgaXQncyBub3QgYVxuLy8gbmVjZXNzYXJpbHkgc3ltbWV0cmljIG9yIHN5bmNocm9ub3VzIHRyYW5zZm9ybWF0aW9uLiAgRm9yIGV4YW1wbGUsXG4vLyBhIHpsaWIgc3RyZWFtIG1pZ2h0IHRha2UgbXVsdGlwbGUgcGxhaW4tdGV4dCB3cml0ZXMoKSwgYW5kIHRoZW5cbi8vIGVtaXQgYSBzaW5nbGUgY29tcHJlc3NlZCBjaHVuayBzb21lIHRpbWUgaW4gdGhlIGZ1dHVyZS5cbi8vXG4vLyBIZXJlJ3MgaG93IHRoaXMgd29ya3M6XG4vL1xuLy8gVGhlIFRyYW5zZm9ybSBzdHJlYW0gaGFzIGFsbCB0aGUgYXNwZWN0cyBvZiB0aGUgcmVhZGFibGUgYW5kIHdyaXRhYmxlXG4vLyBzdHJlYW0gY2xhc3Nlcy4gIFdoZW4geW91IHdyaXRlKGNodW5rKSwgdGhhdCBjYWxscyBfd3JpdGUoY2h1bmssY2IpXG4vLyBpbnRlcm5hbGx5LCBhbmQgcmV0dXJucyBmYWxzZSBpZiB0aGVyZSdzIGEgbG90IG9mIHBlbmRpbmcgd3JpdGVzXG4vLyBidWZmZXJlZCB1cC4gIFdoZW4geW91IGNhbGwgcmVhZCgpLCB0aGF0IGNhbGxzIF9yZWFkKG4pIHVudGlsXG4vLyB0aGVyZSdzIGVub3VnaCBwZW5kaW5nIHJlYWRhYmxlIGRhdGEgYnVmZmVyZWQgdXAuXG4vL1xuLy8gSW4gYSB0cmFuc2Zvcm0gc3RyZWFtLCB0aGUgd3JpdHRlbiBkYXRhIGlzIHBsYWNlZCBpbiBhIGJ1ZmZlci4gIFdoZW5cbi8vIF9yZWFkKG4pIGlzIGNhbGxlZCwgaXQgdHJhbnNmb3JtcyB0aGUgcXVldWVkIHVwIGRhdGEsIGNhbGxpbmcgdGhlXG4vLyBidWZmZXJlZCBfd3JpdGUgY2IncyBhcyBpdCBjb25zdW1lcyBjaHVua3MuICBJZiBjb25zdW1pbmcgYSBzaW5nbGVcbi8vIHdyaXR0ZW4gY2h1bmsgd291bGQgcmVzdWx0IGluIG11bHRpcGxlIG91dHB1dCBjaHVua3MsIHRoZW4gdGhlIGZpcnN0XG4vLyBvdXRwdXR0ZWQgYml0IGNhbGxzIHRoZSByZWFkY2IsIGFuZCBzdWJzZXF1ZW50IGNodW5rcyBqdXN0IGdvIGludG9cbi8vIHRoZSByZWFkIGJ1ZmZlciwgYW5kIHdpbGwgY2F1c2UgaXQgdG8gZW1pdCAncmVhZGFibGUnIGlmIG5lY2Vzc2FyeS5cbi8vXG4vLyBUaGlzIHdheSwgYmFjay1wcmVzc3VyZSBpcyBhY3R1YWxseSBkZXRlcm1pbmVkIGJ5IHRoZSByZWFkaW5nIHNpZGUsXG4vLyBzaW5jZSBfcmVhZCBoYXMgdG8gYmUgY2FsbGVkIHRvIHN0YXJ0IHByb2Nlc3NpbmcgYSBuZXcgY2h1bmsuICBIb3dldmVyLFxuLy8gYSBwYXRob2xvZ2ljYWwgaW5mbGF0ZSB0eXBlIG9mIHRyYW5zZm9ybSBjYW4gY2F1c2UgZXhjZXNzaXZlIGJ1ZmZlcmluZ1xuLy8gaGVyZS4gIEZvciBleGFtcGxlLCBpbWFnaW5lIGEgc3RyZWFtIHdoZXJlIGV2ZXJ5IGJ5dGUgb2YgaW5wdXQgaXNcbi8vIGludGVycHJldGVkIGFzIGFuIGludGVnZXIgZnJvbSAwLTI1NSwgYW5kIHRoZW4gcmVzdWx0cyBpbiB0aGF0IG1hbnlcbi8vIGJ5dGVzIG9mIG91dHB1dC4gIFdyaXRpbmcgdGhlIDQgYnl0ZXMge2ZmLGZmLGZmLGZmfSB3b3VsZCByZXN1bHQgaW5cbi8vIDFrYiBvZiBkYXRhIGJlaW5nIG91dHB1dC4gIEluIHRoaXMgY2FzZSwgeW91IGNvdWxkIHdyaXRlIGEgdmVyeSBzbWFsbFxuLy8gYW1vdW50IG9mIGlucHV0LCBhbmQgZW5kIHVwIHdpdGggYSB2ZXJ5IGxhcmdlIGFtb3VudCBvZiBvdXRwdXQuICBJblxuLy8gc3VjaCBhIHBhdGhvbG9naWNhbCBpbmZsYXRpbmcgbWVjaGFuaXNtLCB0aGVyZSdkIGJlIG5vIHdheSB0byB0ZWxsXG4vLyB0aGUgc3lzdGVtIHRvIHN0b3AgZG9pbmcgdGhlIHRyYW5zZm9ybS4gIEEgc2luZ2xlIDRNQiB3cml0ZSBjb3VsZFxuLy8gY2F1c2UgdGhlIHN5c3RlbSB0byBydW4gb3V0IG9mIG1lbW9yeS5cbi8vXG4vLyBIb3dldmVyLCBldmVuIGluIHN1Y2ggYSBwYXRob2xvZ2ljYWwgY2FzZSwgb25seSBhIHNpbmdsZSB3cml0dGVuIGNodW5rXG4vLyB3b3VsZCBiZSBjb25zdW1lZCwgYW5kIHRoZW4gdGhlIHJlc3Qgd291bGQgd2FpdCAodW4tdHJhbnNmb3JtZWQpIHVudGlsXG4vLyB0aGUgcmVzdWx0cyBvZiB0aGUgcHJldmlvdXMgdHJhbnNmb3JtZWQgY2h1bmsgd2VyZSBjb25zdW1lZC5cblxuJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgT2JqZWN0U2V0UHJvdG90eXBlT2YsIFN5bWJvbCB9ID0gcmVxdWlyZSgnLi4vLi4vb3Vycy9wcmltb3JkaWFscycpXG5tb2R1bGUuZXhwb3J0cyA9IFRyYW5zZm9ybVxuY29uc3QgeyBFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCB9ID0gcmVxdWlyZSgnLi4vLi4vb3Vycy9lcnJvcnMnKS5jb2Rlc1xuY29uc3QgRHVwbGV4ID0gcmVxdWlyZSgnLi9kdXBsZXgnKVxuY29uc3QgeyBnZXRIaWdoV2F0ZXJNYXJrIH0gPSByZXF1aXJlKCcuL3N0YXRlJylcbk9iamVjdFNldFByb3RvdHlwZU9mKFRyYW5zZm9ybS5wcm90b3R5cGUsIER1cGxleC5wcm90b3R5cGUpXG5PYmplY3RTZXRQcm90b3R5cGVPZihUcmFuc2Zvcm0sIER1cGxleClcbmNvbnN0IGtDYWxsYmFjayA9IFN5bWJvbCgna0NhbGxiYWNrJylcbmZ1bmN0aW9uIFRyYW5zZm9ybShvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBUcmFuc2Zvcm0pKSByZXR1cm4gbmV3IFRyYW5zZm9ybShvcHRpb25zKVxuXG4gIC8vIFRPRE8gKHJvbmFnKTogVGhpcyBzaG91bGQgcHJlZmVyYWJseSBhbHdheXMgYmVcbiAgLy8gYXBwbGllZCBidXQgd291bGQgYmUgc2VtdmVyLW1ham9yLiBPciBldmVuIGJldHRlcjtcbiAgLy8gbWFrZSBUcmFuc2Zvcm0gYSBSZWFkYWJsZSB3aXRoIHRoZSBXcml0YWJsZSBpbnRlcmZhY2UuXG4gIGNvbnN0IHJlYWRhYmxlSGlnaFdhdGVyTWFyayA9IG9wdGlvbnMgPyBnZXRIaWdoV2F0ZXJNYXJrKHRoaXMsIG9wdGlvbnMsICdyZWFkYWJsZUhpZ2hXYXRlck1hcmsnLCB0cnVlKSA6IG51bGxcbiAgaWYgKHJlYWRhYmxlSGlnaFdhdGVyTWFyayA9PT0gMCkge1xuICAgIC8vIEEgRHVwbGV4IHdpbGwgYnVmZmVyIGJvdGggb24gdGhlIHdyaXRhYmxlIGFuZCByZWFkYWJsZSBzaWRlIHdoaWxlXG4gICAgLy8gYSBUcmFuc2Zvcm0ganVzdCB3YW50cyB0byBidWZmZXIgaHdtIG51bWJlciBvZiBlbGVtZW50cy4gVG8gYXZvaWRcbiAgICAvLyBidWZmZXJpbmcgdHdpY2Ugd2UgZGlzYWJsZSBidWZmZXJpbmcgb24gdGhlIHdyaXRhYmxlIHNpZGUuXG4gICAgb3B0aW9ucyA9IHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBoaWdoV2F0ZXJNYXJrOiBudWxsLFxuICAgICAgcmVhZGFibGVIaWdoV2F0ZXJNYXJrLFxuICAgICAgLy8gVE9ETyAocm9uYWcpOiAwIGlzIG5vdCBvcHRpbWFsIHNpbmNlIHdlIGhhdmVcbiAgICAgIC8vIGEgXCJidWdcIiB3aGVyZSB3ZSBjaGVjayBuZWVkRHJhaW4gYmVmb3JlIGNhbGxpbmcgX3dyaXRlIGFuZCBub3QgYWZ0ZXIuXG4gICAgICAvLyBSZWZzOiBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvcHVsbC8zMjg4N1xuICAgICAgLy8gUmVmczogaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvMzU5NDFcbiAgICAgIHdyaXRhYmxlSGlnaFdhdGVyTWFyazogb3B0aW9ucy53cml0YWJsZUhpZ2hXYXRlck1hcmsgfHwgMFxuICAgIH1cbiAgfVxuICBEdXBsZXguY2FsbCh0aGlzLCBvcHRpb25zKVxuXG4gIC8vIFdlIGhhdmUgaW1wbGVtZW50ZWQgdGhlIF9yZWFkIG1ldGhvZCwgYW5kIGRvbmUgdGhlIG90aGVyIHRoaW5nc1xuICAvLyB0aGF0IFJlYWRhYmxlIHdhbnRzIGJlZm9yZSB0aGUgZmlyc3QgX3JlYWQgY2FsbCwgc28gdW5zZXQgdGhlXG4gIC8vIHN5bmMgZ3VhcmQgZmxhZy5cbiAgdGhpcy5fcmVhZGFibGVTdGF0ZS5zeW5jID0gZmFsc2VcbiAgdGhpc1trQ2FsbGJhY2tdID0gbnVsbFxuICBpZiAob3B0aW9ucykge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy50cmFuc2Zvcm0gPT09ICdmdW5jdGlvbicpIHRoaXMuX3RyYW5zZm9ybSA9IG9wdGlvbnMudHJhbnNmb3JtXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmZsdXNoID09PSAnZnVuY3Rpb24nKSB0aGlzLl9mbHVzaCA9IG9wdGlvbnMuZmx1c2hcbiAgfVxuXG4gIC8vIFdoZW4gdGhlIHdyaXRhYmxlIHNpZGUgZmluaXNoZXMsIHRoZW4gZmx1c2ggb3V0IGFueXRoaW5nIHJlbWFpbmluZy5cbiAgLy8gQmFja3dhcmRzIGNvbXBhdC4gU29tZSBUcmFuc2Zvcm0gc3RyZWFtcyBpbmNvcnJlY3RseSBpbXBsZW1lbnQgX2ZpbmFsXG4gIC8vIGluc3RlYWQgb2Ygb3IgaW4gYWRkaXRpb24gdG8gX2ZsdXNoLiBCeSB1c2luZyAncHJlZmluaXNoJyBpbnN0ZWFkIG9mXG4gIC8vIGltcGxlbWVudGluZyBfZmluYWwgd2UgY29udGludWUgc3VwcG9ydGluZyB0aGlzIHVuZm9ydHVuYXRlIHVzZSBjYXNlLlxuICB0aGlzLm9uKCdwcmVmaW5pc2gnLCBwcmVmaW5pc2gpXG59XG5mdW5jdGlvbiBmaW5hbChjYikge1xuICBpZiAodHlwZW9mIHRoaXMuX2ZsdXNoID09PSAnZnVuY3Rpb24nICYmICF0aGlzLmRlc3Ryb3llZCkge1xuICAgIHRoaXMuX2ZsdXNoKChlciwgZGF0YSkgPT4ge1xuICAgICAgaWYgKGVyKSB7XG4gICAgICAgIGlmIChjYikge1xuICAgICAgICAgIGNiKGVyKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZGVzdHJveShlcilcbiAgICAgICAgfVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGlmIChkYXRhICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy5wdXNoKGRhdGEpXG4gICAgICB9XG4gICAgICB0aGlzLnB1c2gobnVsbClcbiAgICAgIGlmIChjYikge1xuICAgICAgICBjYigpXG4gICAgICB9XG4gICAgfSlcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnB1c2gobnVsbClcbiAgICBpZiAoY2IpIHtcbiAgICAgIGNiKClcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHByZWZpbmlzaCgpIHtcbiAgaWYgKHRoaXMuX2ZpbmFsICE9PSBmaW5hbCkge1xuICAgIGZpbmFsLmNhbGwodGhpcylcbiAgfVxufVxuVHJhbnNmb3JtLnByb3RvdHlwZS5fZmluYWwgPSBmaW5hbFxuVHJhbnNmb3JtLnByb3RvdHlwZS5fdHJhbnNmb3JtID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2FsbGJhY2spIHtcbiAgdGhyb3cgbmV3IEVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVEKCdfdHJhbnNmb3JtKCknKVxufVxuVHJhbnNmb3JtLnByb3RvdHlwZS5fd3JpdGUgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYWxsYmFjaykge1xuICBjb25zdCByU3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlXG4gIGNvbnN0IHdTdGF0ZSA9IHRoaXMuX3dyaXRhYmxlU3RhdGVcbiAgY29uc3QgbGVuZ3RoID0gclN0YXRlLmxlbmd0aFxuICB0aGlzLl90cmFuc2Zvcm0oY2h1bmssIGVuY29kaW5nLCAoZXJyLCB2YWwpID0+IHtcbiAgICBpZiAoZXJyKSB7XG4gICAgICBjYWxsYmFjayhlcnIpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKHZhbCAhPSBudWxsKSB7XG4gICAgICB0aGlzLnB1c2godmFsKVxuICAgIH1cbiAgICBpZiAoXG4gICAgICB3U3RhdGUuZW5kZWQgfHxcbiAgICAgIC8vIEJhY2t3YXJkcyBjb21wYXQuXG4gICAgICBsZW5ndGggPT09IHJTdGF0ZS5sZW5ndGggfHxcbiAgICAgIC8vIEJhY2t3YXJkcyBjb21wYXQuXG4gICAgICByU3RhdGUubGVuZ3RoIDwgclN0YXRlLmhpZ2hXYXRlck1hcmtcbiAgICApIHtcbiAgICAgIGNhbGxiYWNrKClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trQ2FsbGJhY2tdID0gY2FsbGJhY2tcbiAgICB9XG4gIH0pXG59XG5UcmFuc2Zvcm0ucHJvdG90eXBlLl9yZWFkID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpc1trQ2FsbGJhY2tdKSB7XG4gICAgY29uc3QgY2FsbGJhY2sgPSB0aGlzW2tDYWxsYmFja11cbiAgICB0aGlzW2tDYWxsYmFja10gPSBudWxsXG4gICAgY2FsbGJhY2soKVxuICB9XG59XG4iLAogICAgIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyBhIHBhc3N0aHJvdWdoIHN0cmVhbS5cbi8vIGJhc2ljYWxseSBqdXN0IHRoZSBtb3N0IG1pbmltYWwgc29ydCBvZiBUcmFuc2Zvcm0gc3RyZWFtLlxuLy8gRXZlcnkgd3JpdHRlbiBjaHVuayBnZXRzIG91dHB1dCBhcy1pcy5cblxuJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgT2JqZWN0U2V0UHJvdG90eXBlT2YgfSA9IHJlcXVpcmUoJy4uLy4uL291cnMvcHJpbW9yZGlhbHMnKVxubW9kdWxlLmV4cG9ydHMgPSBQYXNzVGhyb3VnaFxuY29uc3QgVHJhbnNmb3JtID0gcmVxdWlyZSgnLi90cmFuc2Zvcm0nKVxuT2JqZWN0U2V0UHJvdG90eXBlT2YoUGFzc1Rocm91Z2gucHJvdG90eXBlLCBUcmFuc2Zvcm0ucHJvdG90eXBlKVxuT2JqZWN0U2V0UHJvdG90eXBlT2YoUGFzc1Rocm91Z2gsIFRyYW5zZm9ybSlcbmZ1bmN0aW9uIFBhc3NUaHJvdWdoKG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFBhc3NUaHJvdWdoKSkgcmV0dXJuIG5ldyBQYXNzVGhyb3VnaChvcHRpb25zKVxuICBUcmFuc2Zvcm0uY2FsbCh0aGlzLCBvcHRpb25zKVxufVxuUGFzc1Rocm91Z2gucHJvdG90eXBlLl90cmFuc2Zvcm0gPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICBjYihudWxsLCBjaHVuaylcbn1cbiIsCiAgICAiLyogcmVwbGFjZW1lbnQgc3RhcnQgKi9cblxuY29uc3QgcHJvY2VzcyA9IHJlcXVpcmUoJ3Byb2Nlc3MvJylcblxuLyogcmVwbGFjZW1lbnQgZW5kICovXG4vLyBQb3J0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbWFmaW50b3NoL3B1bXAgd2l0aFxuLy8gcGVybWlzc2lvbiBmcm9tIHRoZSBhdXRob3IsIE1hdGhpYXMgQnV1cyAoQG1hZmludG9zaCkuXG5cbjsoJ3VzZSBzdHJpY3QnKVxuY29uc3QgeyBBcnJheUlzQXJyYXksIFByb21pc2UsIFN5bWJvbEFzeW5jSXRlcmF0b3IsIFN5bWJvbERpc3Bvc2UgfSA9IHJlcXVpcmUoJy4uLy4uL291cnMvcHJpbW9yZGlhbHMnKVxuY29uc3QgZW9zID0gcmVxdWlyZSgnLi9lbmQtb2Ytc3RyZWFtJylcbmNvbnN0IHsgb25jZSB9ID0gcmVxdWlyZSgnLi4vLi4vb3Vycy91dGlsJylcbmNvbnN0IGRlc3Ryb3lJbXBsID0gcmVxdWlyZSgnLi9kZXN0cm95JylcbmNvbnN0IER1cGxleCA9IHJlcXVpcmUoJy4vZHVwbGV4JylcbmNvbnN0IHtcbiAgYWdncmVnYXRlVHdvRXJyb3JzLFxuICBjb2Rlczoge1xuICAgIEVSUl9JTlZBTElEX0FSR19UWVBFLFxuICAgIEVSUl9JTlZBTElEX1JFVFVSTl9WQUxVRSxcbiAgICBFUlJfTUlTU0lOR19BUkdTLFxuICAgIEVSUl9TVFJFQU1fREVTVFJPWUVELFxuICAgIEVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFXG4gIH0sXG4gIEFib3J0RXJyb3Jcbn0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL2Vycm9ycycpXG5jb25zdCB7IHZhbGlkYXRlRnVuY3Rpb24sIHZhbGlkYXRlQWJvcnRTaWduYWwgfSA9IHJlcXVpcmUoJy4uL3ZhbGlkYXRvcnMnKVxuY29uc3Qge1xuICBpc0l0ZXJhYmxlLFxuICBpc1JlYWRhYmxlLFxuICBpc1JlYWRhYmxlTm9kZVN0cmVhbSxcbiAgaXNOb2RlU3RyZWFtLFxuICBpc1RyYW5zZm9ybVN0cmVhbSxcbiAgaXNXZWJTdHJlYW0sXG4gIGlzUmVhZGFibGVTdHJlYW0sXG4gIGlzUmVhZGFibGVGaW5pc2hlZFxufSA9IHJlcXVpcmUoJy4vdXRpbHMnKVxuY29uc3QgQWJvcnRDb250cm9sbGVyID0gZ2xvYmFsVGhpcy5BYm9ydENvbnRyb2xsZXIgfHwgcmVxdWlyZSgnYWJvcnQtY29udHJvbGxlcicpLkFib3J0Q29udHJvbGxlclxubGV0IFBhc3NUaHJvdWdoXG5sZXQgUmVhZGFibGVcbmxldCBhZGRBYm9ydExpc3RlbmVyXG5mdW5jdGlvbiBkZXN0cm95ZXIoc3RyZWFtLCByZWFkaW5nLCB3cml0aW5nKSB7XG4gIGxldCBmaW5pc2hlZCA9IGZhbHNlXG4gIHN0cmVhbS5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgZmluaXNoZWQgPSB0cnVlXG4gIH0pXG4gIGNvbnN0IGNsZWFudXAgPSBlb3MoXG4gICAgc3RyZWFtLFxuICAgIHtcbiAgICAgIHJlYWRhYmxlOiByZWFkaW5nLFxuICAgICAgd3JpdGFibGU6IHdyaXRpbmdcbiAgICB9LFxuICAgIChlcnIpID0+IHtcbiAgICAgIGZpbmlzaGVkID0gIWVyclxuICAgIH1cbiAgKVxuICByZXR1cm4ge1xuICAgIGRlc3Ryb3k6IChlcnIpID0+IHtcbiAgICAgIGlmIChmaW5pc2hlZCkgcmV0dXJuXG4gICAgICBmaW5pc2hlZCA9IHRydWVcbiAgICAgIGRlc3Ryb3lJbXBsLmRlc3Ryb3llcihzdHJlYW0sIGVyciB8fCBuZXcgRVJSX1NUUkVBTV9ERVNUUk9ZRUQoJ3BpcGUnKSlcbiAgICB9LFxuICAgIGNsZWFudXBcbiAgfVxufVxuZnVuY3Rpb24gcG9wQ2FsbGJhY2soc3RyZWFtcykge1xuICAvLyBTdHJlYW1zIHNob3VsZCBuZXZlciBiZSBhbiBlbXB0eSBhcnJheS4gSXQgc2hvdWxkIGFsd2F5cyBjb250YWluIGF0IGxlYXN0XG4gIC8vIGEgc2luZ2xlIHN0cmVhbS4gVGhlcmVmb3JlIG9wdGltaXplIGZvciB0aGUgYXZlcmFnZSBjYXNlIGluc3RlYWQgb2ZcbiAgLy8gY2hlY2tpbmcgZm9yIGxlbmd0aCA9PT0gMCBhcyB3ZWxsLlxuICB2YWxpZGF0ZUZ1bmN0aW9uKHN0cmVhbXNbc3RyZWFtcy5sZW5ndGggLSAxXSwgJ3N0cmVhbXNbc3RyZWFtLmxlbmd0aCAtIDFdJylcbiAgcmV0dXJuIHN0cmVhbXMucG9wKClcbn1cbmZ1bmN0aW9uIG1ha2VBc3luY0l0ZXJhYmxlKHZhbCkge1xuICBpZiAoaXNJdGVyYWJsZSh2YWwpKSB7XG4gICAgcmV0dXJuIHZhbFxuICB9IGVsc2UgaWYgKGlzUmVhZGFibGVOb2RlU3RyZWFtKHZhbCkpIHtcbiAgICAvLyBMZWdhY3kgc3RyZWFtcyBhcmUgbm90IEl0ZXJhYmxlLlxuICAgIHJldHVybiBmcm9tUmVhZGFibGUodmFsKVxuICB9XG4gIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRSgndmFsJywgWydSZWFkYWJsZScsICdJdGVyYWJsZScsICdBc3luY0l0ZXJhYmxlJ10sIHZhbClcbn1cbmFzeW5jIGZ1bmN0aW9uKiBmcm9tUmVhZGFibGUodmFsKSB7XG4gIGlmICghUmVhZGFibGUpIHtcbiAgICBSZWFkYWJsZSA9IHJlcXVpcmUoJy4vcmVhZGFibGUnKVxuICB9XG4gIHlpZWxkKiBSZWFkYWJsZS5wcm90b3R5cGVbU3ltYm9sQXN5bmNJdGVyYXRvcl0uY2FsbCh2YWwpXG59XG5hc3luYyBmdW5jdGlvbiBwdW1wVG9Ob2RlKGl0ZXJhYmxlLCB3cml0YWJsZSwgZmluaXNoLCB7IGVuZCB9KSB7XG4gIGxldCBlcnJvclxuICBsZXQgb25yZXNvbHZlID0gbnVsbFxuICBjb25zdCByZXN1bWUgPSAoZXJyKSA9PiB7XG4gICAgaWYgKGVycikge1xuICAgICAgZXJyb3IgPSBlcnJcbiAgICB9XG4gICAgaWYgKG9ucmVzb2x2ZSkge1xuICAgICAgY29uc3QgY2FsbGJhY2sgPSBvbnJlc29sdmVcbiAgICAgIG9ucmVzb2x2ZSA9IG51bGxcbiAgICAgIGNhbGxiYWNrKClcbiAgICB9XG4gIH1cbiAgY29uc3Qgd2FpdCA9ICgpID0+XG4gICAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9ucmVzb2x2ZSA9ICgpID0+IHtcbiAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzb2x2ZSgpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgd3JpdGFibGUub24oJ2RyYWluJywgcmVzdW1lKVxuICBjb25zdCBjbGVhbnVwID0gZW9zKFxuICAgIHdyaXRhYmxlLFxuICAgIHtcbiAgICAgIHJlYWRhYmxlOiBmYWxzZVxuICAgIH0sXG4gICAgcmVzdW1lXG4gIClcbiAgdHJ5IHtcbiAgICBpZiAod3JpdGFibGUud3JpdGFibGVOZWVkRHJhaW4pIHtcbiAgICAgIGF3YWl0IHdhaXQoKVxuICAgIH1cbiAgICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIGl0ZXJhYmxlKSB7XG4gICAgICBpZiAoIXdyaXRhYmxlLndyaXRlKGNodW5rKSkge1xuICAgICAgICBhd2FpdCB3YWl0KClcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGVuZCkge1xuICAgICAgd3JpdGFibGUuZW5kKClcbiAgICAgIGF3YWl0IHdhaXQoKVxuICAgIH1cbiAgICBmaW5pc2goKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBmaW5pc2goZXJyb3IgIT09IGVyciA/IGFnZ3JlZ2F0ZVR3b0Vycm9ycyhlcnJvciwgZXJyKSA6IGVycilcbiAgfSBmaW5hbGx5IHtcbiAgICBjbGVhbnVwKClcbiAgICB3cml0YWJsZS5vZmYoJ2RyYWluJywgcmVzdW1lKVxuICB9XG59XG5hc3luYyBmdW5jdGlvbiBwdW1wVG9XZWIocmVhZGFibGUsIHdyaXRhYmxlLCBmaW5pc2gsIHsgZW5kIH0pIHtcbiAgaWYgKGlzVHJhbnNmb3JtU3RyZWFtKHdyaXRhYmxlKSkge1xuICAgIHdyaXRhYmxlID0gd3JpdGFibGUud3JpdGFibGVcbiAgfVxuICAvLyBodHRwczovL3N0cmVhbXMuc3BlYy53aGF0d2cub3JnLyNleGFtcGxlLW1hbnVhbC13cml0ZS13aXRoLWJhY2twcmVzc3VyZVxuICBjb25zdCB3cml0ZXIgPSB3cml0YWJsZS5nZXRXcml0ZXIoKVxuICB0cnkge1xuICAgIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgcmVhZGFibGUpIHtcbiAgICAgIGF3YWl0IHdyaXRlci5yZWFkeVxuICAgICAgd3JpdGVyLndyaXRlKGNodW5rKS5jYXRjaCgoKSA9PiB7fSlcbiAgICB9XG4gICAgYXdhaXQgd3JpdGVyLnJlYWR5XG4gICAgaWYgKGVuZCkge1xuICAgICAgYXdhaXQgd3JpdGVyLmNsb3NlKClcbiAgICB9XG4gICAgZmluaXNoKClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHdyaXRlci5hYm9ydChlcnIpXG4gICAgICBmaW5pc2goZXJyKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZmluaXNoKGVycilcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHBpcGVsaW5lKC4uLnN0cmVhbXMpIHtcbiAgcmV0dXJuIHBpcGVsaW5lSW1wbChzdHJlYW1zLCBvbmNlKHBvcENhbGxiYWNrKHN0cmVhbXMpKSlcbn1cbmZ1bmN0aW9uIHBpcGVsaW5lSW1wbChzdHJlYW1zLCBjYWxsYmFjaywgb3B0cykge1xuICBpZiAoc3RyZWFtcy5sZW5ndGggPT09IDEgJiYgQXJyYXlJc0FycmF5KHN0cmVhbXNbMF0pKSB7XG4gICAgc3RyZWFtcyA9IHN0cmVhbXNbMF1cbiAgfVxuICBpZiAoc3RyZWFtcy5sZW5ndGggPCAyKSB7XG4gICAgdGhyb3cgbmV3IEVSUl9NSVNTSU5HX0FSR1MoJ3N0cmVhbXMnKVxuICB9XG4gIGNvbnN0IGFjID0gbmV3IEFib3J0Q29udHJvbGxlcigpXG4gIGNvbnN0IHNpZ25hbCA9IGFjLnNpZ25hbFxuICBjb25zdCBvdXRlclNpZ25hbCA9IG9wdHMgPT09IG51bGwgfHwgb3B0cyA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogb3B0cy5zaWduYWxcblxuICAvLyBOZWVkIHRvIGNsZWFudXAgZXZlbnQgbGlzdGVuZXJzIGlmIGxhc3Qgc3RyZWFtIGlzIHJlYWRhYmxlXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9pc3N1ZXMvMzU0NTJcbiAgY29uc3QgbGFzdFN0cmVhbUNsZWFudXAgPSBbXVxuICB2YWxpZGF0ZUFib3J0U2lnbmFsKG91dGVyU2lnbmFsLCAnb3B0aW9ucy5zaWduYWwnKVxuICBmdW5jdGlvbiBhYm9ydCgpIHtcbiAgICBmaW5pc2hJbXBsKG5ldyBBYm9ydEVycm9yKCkpXG4gIH1cbiAgYWRkQWJvcnRMaXN0ZW5lciA9IGFkZEFib3J0TGlzdGVuZXIgfHwgcmVxdWlyZSgnLi4vLi4vb3Vycy91dGlsJykuYWRkQWJvcnRMaXN0ZW5lclxuICBsZXQgZGlzcG9zYWJsZVxuICBpZiAob3V0ZXJTaWduYWwpIHtcbiAgICBkaXNwb3NhYmxlID0gYWRkQWJvcnRMaXN0ZW5lcihvdXRlclNpZ25hbCwgYWJvcnQpXG4gIH1cbiAgbGV0IGVycm9yXG4gIGxldCB2YWx1ZVxuICBjb25zdCBkZXN0cm95cyA9IFtdXG4gIGxldCBmaW5pc2hDb3VudCA9IDBcbiAgZnVuY3Rpb24gZmluaXNoKGVycikge1xuICAgIGZpbmlzaEltcGwoZXJyLCAtLWZpbmlzaENvdW50ID09PSAwKVxuICB9XG4gIGZ1bmN0aW9uIGZpbmlzaEltcGwoZXJyLCBmaW5hbCkge1xuICAgIHZhciBfZGlzcG9zYWJsZVxuICAgIGlmIChlcnIgJiYgKCFlcnJvciB8fCBlcnJvci5jb2RlID09PSAnRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UnKSkge1xuICAgICAgZXJyb3IgPSBlcnJcbiAgICB9XG4gICAgaWYgKCFlcnJvciAmJiAhZmluYWwpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB3aGlsZSAoZGVzdHJveXMubGVuZ3RoKSB7XG4gICAgICBkZXN0cm95cy5zaGlmdCgpKGVycm9yKVxuICAgIH1cbiAgICA7KF9kaXNwb3NhYmxlID0gZGlzcG9zYWJsZSkgPT09IG51bGwgfHwgX2Rpc3Bvc2FibGUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IF9kaXNwb3NhYmxlW1N5bWJvbERpc3Bvc2VdKClcbiAgICBhYy5hYm9ydCgpXG4gICAgaWYgKGZpbmFsKSB7XG4gICAgICBpZiAoIWVycm9yKSB7XG4gICAgICAgIGxhc3RTdHJlYW1DbGVhbnVwLmZvckVhY2goKGZuKSA9PiBmbigpKVxuICAgICAgfVxuICAgICAgcHJvY2Vzcy5uZXh0VGljayhjYWxsYmFjaywgZXJyb3IsIHZhbHVlKVxuICAgIH1cbiAgfVxuICBsZXQgcmV0XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyZWFtcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHN0cmVhbSA9IHN0cmVhbXNbaV1cbiAgICBjb25zdCByZWFkaW5nID0gaSA8IHN0cmVhbXMubGVuZ3RoIC0gMVxuICAgIGNvbnN0IHdyaXRpbmcgPSBpID4gMFxuICAgIGNvbnN0IGVuZCA9IHJlYWRpbmcgfHwgKG9wdHMgPT09IG51bGwgfHwgb3B0cyA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogb3B0cy5lbmQpICE9PSBmYWxzZVxuICAgIGNvbnN0IGlzTGFzdFN0cmVhbSA9IGkgPT09IHN0cmVhbXMubGVuZ3RoIC0gMVxuICAgIGlmIChpc05vZGVTdHJlYW0oc3RyZWFtKSkge1xuICAgICAgaWYgKGVuZCkge1xuICAgICAgICBjb25zdCB7IGRlc3Ryb3ksIGNsZWFudXAgfSA9IGRlc3Ryb3llcihzdHJlYW0sIHJlYWRpbmcsIHdyaXRpbmcpXG4gICAgICAgIGRlc3Ryb3lzLnB1c2goZGVzdHJveSlcbiAgICAgICAgaWYgKGlzUmVhZGFibGUoc3RyZWFtKSAmJiBpc0xhc3RTdHJlYW0pIHtcbiAgICAgICAgICBsYXN0U3RyZWFtQ2xlYW51cC5wdXNoKGNsZWFudXApXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQ2F0Y2ggc3RyZWFtIGVycm9ycyB0aGF0IG9jY3VyIGFmdGVyIHBpcGUvcHVtcCBoYXMgY29tcGxldGVkLlxuICAgICAgZnVuY3Rpb24gb25FcnJvcihlcnIpIHtcbiAgICAgICAgaWYgKGVyciAmJiBlcnIubmFtZSAhPT0gJ0Fib3J0RXJyb3InICYmIGVyci5jb2RlICE9PSAnRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UnKSB7XG4gICAgICAgICAgZmluaXNoKGVycilcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc3RyZWFtLm9uKCdlcnJvcicsIG9uRXJyb3IpXG4gICAgICBpZiAoaXNSZWFkYWJsZShzdHJlYW0pICYmIGlzTGFzdFN0cmVhbSkge1xuICAgICAgICBsYXN0U3RyZWFtQ2xlYW51cC5wdXNoKCgpID0+IHtcbiAgICAgICAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgb25FcnJvcilcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGkgPT09IDApIHtcbiAgICAgIGlmICh0eXBlb2Ygc3RyZWFtID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldCA9IHN0cmVhbSh7XG4gICAgICAgICAgc2lnbmFsXG4gICAgICAgIH0pXG4gICAgICAgIGlmICghaXNJdGVyYWJsZShyZXQpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX1JFVFVSTl9WQUxVRSgnSXRlcmFibGUsIEFzeW5jSXRlcmFibGUgb3IgU3RyZWFtJywgJ3NvdXJjZScsIHJldClcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc0l0ZXJhYmxlKHN0cmVhbSkgfHwgaXNSZWFkYWJsZU5vZGVTdHJlYW0oc3RyZWFtKSB8fCBpc1RyYW5zZm9ybVN0cmVhbShzdHJlYW0pKSB7XG4gICAgICAgIHJldCA9IHN0cmVhbVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0ID0gRHVwbGV4LmZyb20oc3RyZWFtKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIHN0cmVhbSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKGlzVHJhbnNmb3JtU3RyZWFtKHJldCkpIHtcbiAgICAgICAgdmFyIF9yZXRcbiAgICAgICAgcmV0ID0gbWFrZUFzeW5jSXRlcmFibGUoKF9yZXQgPSByZXQpID09PSBudWxsIHx8IF9yZXQgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IF9yZXQucmVhZGFibGUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXQgPSBtYWtlQXN5bmNJdGVyYWJsZShyZXQpXG4gICAgICB9XG4gICAgICByZXQgPSBzdHJlYW0ocmV0LCB7XG4gICAgICAgIHNpZ25hbFxuICAgICAgfSlcbiAgICAgIGlmIChyZWFkaW5nKSB7XG4gICAgICAgIGlmICghaXNJdGVyYWJsZShyZXQsIHRydWUpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX1JFVFVSTl9WQUxVRSgnQXN5bmNJdGVyYWJsZScsIGB0cmFuc2Zvcm1bJHtpIC0gMX1dYCwgcmV0KVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgX3JldDJcbiAgICAgICAgaWYgKCFQYXNzVGhyb3VnaCkge1xuICAgICAgICAgIFBhc3NUaHJvdWdoID0gcmVxdWlyZSgnLi9wYXNzdGhyb3VnaCcpXG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB0aGUgbGFzdCBhcmd1bWVudCB0byBwaXBlbGluZSBpcyBub3QgYSBzdHJlYW1cbiAgICAgICAgLy8gd2UgbXVzdCBjcmVhdGUgYSBwcm94eSBzdHJlYW0gc28gdGhhdCBwaXBlbGluZSguLi4pXG4gICAgICAgIC8vIGFsd2F5cyByZXR1cm5zIGEgc3RyZWFtIHdoaWNoIGNhbiBiZSBmdXJ0aGVyXG4gICAgICAgIC8vIGNvbXBvc2VkIHRocm91Z2ggYC5waXBlKHN0cmVhbSlgLlxuXG4gICAgICAgIGNvbnN0IHB0ID0gbmV3IFBhc3NUaHJvdWdoKHtcbiAgICAgICAgICBvYmplY3RNb2RlOiB0cnVlXG4gICAgICAgIH0pXG5cbiAgICAgICAgLy8gSGFuZGxlIFByb21pc2VzL0ErIHNwZWMsIGB0aGVuYCBjb3VsZCBiZSBhIGdldHRlciB0aGF0IHRocm93cyBvblxuICAgICAgICAvLyBzZWNvbmQgdXNlLlxuICAgICAgICBjb25zdCB0aGVuID0gKF9yZXQyID0gcmV0KSA9PT0gbnVsbCB8fCBfcmV0MiA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogX3JldDIudGhlblxuICAgICAgICBpZiAodHlwZW9mIHRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBmaW5pc2hDb3VudCsrXG4gICAgICAgICAgdGhlbi5jYWxsKFxuICAgICAgICAgICAgcmV0LFxuICAgICAgICAgICAgKHZhbCkgPT4ge1xuICAgICAgICAgICAgICB2YWx1ZSA9IHZhbFxuICAgICAgICAgICAgICBpZiAodmFsICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBwdC53cml0ZSh2YWwpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGVuZCkge1xuICAgICAgICAgICAgICAgIHB0LmVuZCgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhmaW5pc2gpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgICAgICBwdC5kZXN0cm95KGVycilcbiAgICAgICAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhmaW5pc2gsIGVycilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSBpZiAoaXNJdGVyYWJsZShyZXQsIHRydWUpKSB7XG4gICAgICAgICAgZmluaXNoQ291bnQrK1xuICAgICAgICAgIHB1bXBUb05vZGUocmV0LCBwdCwgZmluaXNoLCB7XG4gICAgICAgICAgICBlbmRcbiAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2UgaWYgKGlzUmVhZGFibGVTdHJlYW0ocmV0KSB8fCBpc1RyYW5zZm9ybVN0cmVhbShyZXQpKSB7XG4gICAgICAgICAgY29uc3QgdG9SZWFkID0gcmV0LnJlYWRhYmxlIHx8IHJldFxuICAgICAgICAgIGZpbmlzaENvdW50KytcbiAgICAgICAgICBwdW1wVG9Ob2RlKHRvUmVhZCwgcHQsIGZpbmlzaCwge1xuICAgICAgICAgICAgZW5kXG4gICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfUkVUVVJOX1ZBTFVFKCdBc3luY0l0ZXJhYmxlIG9yIFByb21pc2UnLCAnZGVzdGluYXRpb24nLCByZXQpXG4gICAgICAgIH1cbiAgICAgICAgcmV0ID0gcHRcbiAgICAgICAgY29uc3QgeyBkZXN0cm95LCBjbGVhbnVwIH0gPSBkZXN0cm95ZXIocmV0LCBmYWxzZSwgdHJ1ZSlcbiAgICAgICAgZGVzdHJveXMucHVzaChkZXN0cm95KVxuICAgICAgICBpZiAoaXNMYXN0U3RyZWFtKSB7XG4gICAgICAgICAgbGFzdFN0cmVhbUNsZWFudXAucHVzaChjbGVhbnVwKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc05vZGVTdHJlYW0oc3RyZWFtKSkge1xuICAgICAgaWYgKGlzUmVhZGFibGVOb2RlU3RyZWFtKHJldCkpIHtcbiAgICAgICAgZmluaXNoQ291bnQgKz0gMlxuICAgICAgICBjb25zdCBjbGVhbnVwID0gcGlwZShyZXQsIHN0cmVhbSwgZmluaXNoLCB7XG4gICAgICAgICAgZW5kXG4gICAgICAgIH0pXG4gICAgICAgIGlmIChpc1JlYWRhYmxlKHN0cmVhbSkgJiYgaXNMYXN0U3RyZWFtKSB7XG4gICAgICAgICAgbGFzdFN0cmVhbUNsZWFudXAucHVzaChjbGVhbnVwKVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGlzVHJhbnNmb3JtU3RyZWFtKHJldCkgfHwgaXNSZWFkYWJsZVN0cmVhbShyZXQpKSB7XG4gICAgICAgIGNvbnN0IHRvUmVhZCA9IHJldC5yZWFkYWJsZSB8fCByZXRcbiAgICAgICAgZmluaXNoQ291bnQrK1xuICAgICAgICBwdW1wVG9Ob2RlKHRvUmVhZCwgc3RyZWFtLCBmaW5pc2gsIHtcbiAgICAgICAgICBlbmRcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSBpZiAoaXNJdGVyYWJsZShyZXQpKSB7XG4gICAgICAgIGZpbmlzaENvdW50KytcbiAgICAgICAgcHVtcFRvTm9kZShyZXQsIHN0cmVhbSwgZmluaXNoLCB7XG4gICAgICAgICAgZW5kXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoXG4gICAgICAgICAgJ3ZhbCcsXG4gICAgICAgICAgWydSZWFkYWJsZScsICdJdGVyYWJsZScsICdBc3luY0l0ZXJhYmxlJywgJ1JlYWRhYmxlU3RyZWFtJywgJ1RyYW5zZm9ybVN0cmVhbSddLFxuICAgICAgICAgIHJldFxuICAgICAgICApXG4gICAgICB9XG4gICAgICByZXQgPSBzdHJlYW1cbiAgICB9IGVsc2UgaWYgKGlzV2ViU3RyZWFtKHN0cmVhbSkpIHtcbiAgICAgIGlmIChpc1JlYWRhYmxlTm9kZVN0cmVhbShyZXQpKSB7XG4gICAgICAgIGZpbmlzaENvdW50KytcbiAgICAgICAgcHVtcFRvV2ViKG1ha2VBc3luY0l0ZXJhYmxlKHJldCksIHN0cmVhbSwgZmluaXNoLCB7XG4gICAgICAgICAgZW5kXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2UgaWYgKGlzUmVhZGFibGVTdHJlYW0ocmV0KSB8fCBpc0l0ZXJhYmxlKHJldCkpIHtcbiAgICAgICAgZmluaXNoQ291bnQrK1xuICAgICAgICBwdW1wVG9XZWIocmV0LCBzdHJlYW0sIGZpbmlzaCwge1xuICAgICAgICAgIGVuZFxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIGlmIChpc1RyYW5zZm9ybVN0cmVhbShyZXQpKSB7XG4gICAgICAgIGZpbmlzaENvdW50KytcbiAgICAgICAgcHVtcFRvV2ViKHJldC5yZWFkYWJsZSwgc3RyZWFtLCBmaW5pc2gsIHtcbiAgICAgICAgICBlbmRcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRShcbiAgICAgICAgICAndmFsJyxcbiAgICAgICAgICBbJ1JlYWRhYmxlJywgJ0l0ZXJhYmxlJywgJ0FzeW5jSXRlcmFibGUnLCAnUmVhZGFibGVTdHJlYW0nLCAnVHJhbnNmb3JtU3RyZWFtJ10sXG4gICAgICAgICAgcmV0XG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIHJldCA9IHN0cmVhbVxuICAgIH0gZWxzZSB7XG4gICAgICByZXQgPSBEdXBsZXguZnJvbShzdHJlYW0pXG4gICAgfVxuICB9XG4gIGlmIChcbiAgICAoc2lnbmFsICE9PSBudWxsICYmIHNpZ25hbCAhPT0gdW5kZWZpbmVkICYmIHNpZ25hbC5hYm9ydGVkKSB8fFxuICAgIChvdXRlclNpZ25hbCAhPT0gbnVsbCAmJiBvdXRlclNpZ25hbCAhPT0gdW5kZWZpbmVkICYmIG91dGVyU2lnbmFsLmFib3J0ZWQpXG4gICkge1xuICAgIHByb2Nlc3MubmV4dFRpY2soYWJvcnQpXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuZnVuY3Rpb24gcGlwZShzcmMsIGRzdCwgZmluaXNoLCB7IGVuZCB9KSB7XG4gIGxldCBlbmRlZCA9IGZhbHNlXG4gIGRzdC5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgaWYgKCFlbmRlZCkge1xuICAgICAgLy8gRmluaXNoIGlmIHRoZSBkZXN0aW5hdGlvbiBjbG9zZXMgYmVmb3JlIHRoZSBzb3VyY2UgaGFzIGNvbXBsZXRlZC5cbiAgICAgIGZpbmlzaChuZXcgRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UoKSlcbiAgICB9XG4gIH0pXG4gIHNyYy5waXBlKGRzdCwge1xuICAgIGVuZDogZmFsc2VcbiAgfSkgLy8gSWYgZW5kIGlzIHRydWUgd2UgYWxyZWFkeSB3aWxsIGhhdmUgYSBsaXN0ZW5lciB0byBlbmQgZHN0LlxuXG4gIGlmIChlbmQpIHtcbiAgICAvLyBDb21wYXQuIEJlZm9yZSBub2RlIHYxMC4xMi4wIHN0ZGlvIHVzZWQgdG8gdGhyb3cgYW4gZXJyb3Igc29cbiAgICAvLyBwaXBlKCkgZGlkL2RvZXMgbm90IGVuZCgpIHN0ZGlvIGRlc3RpbmF0aW9ucy5cbiAgICAvLyBOb3cgdGhleSBhbGxvdyBpdCBidXQgXCJzZWNyZXRseVwiIGRvbid0IGNsb3NlIHRoZSB1bmRlcmx5aW5nIGZkLlxuXG4gICAgZnVuY3Rpb24gZW5kRm4oKSB7XG4gICAgICBlbmRlZCA9IHRydWVcbiAgICAgIGRzdC5lbmQoKVxuICAgIH1cbiAgICBpZiAoaXNSZWFkYWJsZUZpbmlzaGVkKHNyYykpIHtcbiAgICAgIC8vIEVuZCB0aGUgZGVzdGluYXRpb24gaWYgdGhlIHNvdXJjZSBoYXMgYWxyZWFkeSBlbmRlZC5cbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZW5kRm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHNyYy5vbmNlKCdlbmQnLCBlbmRGbilcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZmluaXNoKClcbiAgfVxuICBlb3MoXG4gICAgc3JjLFxuICAgIHtcbiAgICAgIHJlYWRhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IGZhbHNlXG4gICAgfSxcbiAgICAoZXJyKSA9PiB7XG4gICAgICBjb25zdCByU3RhdGUgPSBzcmMuX3JlYWRhYmxlU3RhdGVcbiAgICAgIGlmIChcbiAgICAgICAgZXJyICYmXG4gICAgICAgIGVyci5jb2RlID09PSAnRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UnICYmXG4gICAgICAgIHJTdGF0ZSAmJlxuICAgICAgICByU3RhdGUuZW5kZWQgJiZcbiAgICAgICAgIXJTdGF0ZS5lcnJvcmVkICYmXG4gICAgICAgICFyU3RhdGUuZXJyb3JFbWl0dGVkXG4gICAgICApIHtcbiAgICAgICAgLy8gU29tZSByZWFkYWJsZSBzdHJlYW1zIHdpbGwgZW1pdCAnY2xvc2UnIGJlZm9yZSAnZW5kJy4gSG93ZXZlciwgc2luY2VcbiAgICAgICAgLy8gdGhpcyBpcyBvbiB0aGUgcmVhZGFibGUgc2lkZSAnZW5kJyBzaG91bGQgc3RpbGwgYmUgZW1pdHRlZCBpZiB0aGVcbiAgICAgICAgLy8gc3RyZWFtIGhhcyBiZWVuIGVuZGVkIGFuZCBubyBlcnJvciBlbWl0dGVkLiBUaGlzIHNob3VsZCBiZSBhbGxvd2VkIGluXG4gICAgICAgIC8vIGZhdm9yIG9mIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiBTaW5jZSB0aGUgc3RyZWFtIGlzIHBpcGVkIHRvIGFcbiAgICAgICAgLy8gZGVzdGluYXRpb24gdGhpcyBzaG91bGQgbm90IHJlc3VsdCBpbiBhbnkgb2JzZXJ2YWJsZSBkaWZmZXJlbmNlLlxuICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGNoZWNrIGlmIHRoaXMgaXMgYSB3cml0YWJsZSBwcmVtYXR1cmUgY2xvc2Ugc2luY2VcbiAgICAgICAgLy8gZW9zIHdpbGwgb25seSBmYWlsIHdpdGggcHJlbWF0dXJlIGNsb3NlIG9uIHRoZSByZWFkaW5nIHNpZGUgZm9yXG4gICAgICAgIC8vIGR1cGxleCBzdHJlYW1zLlxuICAgICAgICBzcmMub25jZSgnZW5kJywgZmluaXNoKS5vbmNlKCdlcnJvcicsIGZpbmlzaClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpbmlzaChlcnIpXG4gICAgICB9XG4gICAgfVxuICApXG4gIHJldHVybiBlb3MoXG4gICAgZHN0LFxuICAgIHtcbiAgICAgIHJlYWRhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSxcbiAgICBmaW5pc2hcbiAgKVxufVxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHBpcGVsaW5lSW1wbCxcbiAgcGlwZWxpbmVcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgcGlwZWxpbmUgfSA9IHJlcXVpcmUoJy4vcGlwZWxpbmUnKVxuY29uc3QgRHVwbGV4ID0gcmVxdWlyZSgnLi9kdXBsZXgnKVxuY29uc3QgeyBkZXN0cm95ZXIgfSA9IHJlcXVpcmUoJy4vZGVzdHJveScpXG5jb25zdCB7XG4gIGlzTm9kZVN0cmVhbSxcbiAgaXNSZWFkYWJsZSxcbiAgaXNXcml0YWJsZSxcbiAgaXNXZWJTdHJlYW0sXG4gIGlzVHJhbnNmb3JtU3RyZWFtLFxuICBpc1dyaXRhYmxlU3RyZWFtLFxuICBpc1JlYWRhYmxlU3RyZWFtXG59ID0gcmVxdWlyZSgnLi91dGlscycpXG5jb25zdCB7XG4gIEFib3J0RXJyb3IsXG4gIGNvZGVzOiB7IEVSUl9JTlZBTElEX0FSR19WQUxVRSwgRVJSX01JU1NJTkdfQVJHUyB9XG59ID0gcmVxdWlyZSgnLi4vLi4vb3Vycy9lcnJvcnMnKVxuY29uc3QgZW9zID0gcmVxdWlyZSgnLi9lbmQtb2Ytc3RyZWFtJylcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY29tcG9zZSguLi5zdHJlYW1zKSB7XG4gIGlmIChzdHJlYW1zLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFUlJfTUlTU0lOR19BUkdTKCdzdHJlYW1zJylcbiAgfVxuICBpZiAoc3RyZWFtcy5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gRHVwbGV4LmZyb20oc3RyZWFtc1swXSlcbiAgfVxuICBjb25zdCBvcmdTdHJlYW1zID0gWy4uLnN0cmVhbXNdXG4gIGlmICh0eXBlb2Ygc3RyZWFtc1swXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHN0cmVhbXNbMF0gPSBEdXBsZXguZnJvbShzdHJlYW1zWzBdKVxuICB9XG4gIGlmICh0eXBlb2Ygc3RyZWFtc1tzdHJlYW1zLmxlbmd0aCAtIDFdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY29uc3QgaWR4ID0gc3RyZWFtcy5sZW5ndGggLSAxXG4gICAgc3RyZWFtc1tpZHhdID0gRHVwbGV4LmZyb20oc3RyZWFtc1tpZHhdKVxuICB9XG4gIGZvciAobGV0IG4gPSAwOyBuIDwgc3RyZWFtcy5sZW5ndGg7ICsrbikge1xuICAgIGlmICghaXNOb2RlU3RyZWFtKHN0cmVhbXNbbl0pICYmICFpc1dlYlN0cmVhbShzdHJlYW1zW25dKSkge1xuICAgICAgLy8gVE9ETyhyb25hZyk6IEFkZCBjaGVja3MgZm9yIG5vbiBzdHJlYW1zLlxuICAgICAgY29udGludWVcbiAgICB9XG4gICAgaWYgKFxuICAgICAgbiA8IHN0cmVhbXMubGVuZ3RoIC0gMSAmJlxuICAgICAgIShpc1JlYWRhYmxlKHN0cmVhbXNbbl0pIHx8IGlzUmVhZGFibGVTdHJlYW0oc3RyZWFtc1tuXSkgfHwgaXNUcmFuc2Zvcm1TdHJlYW0oc3RyZWFtc1tuXSkpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1ZBTFVFKGBzdHJlYW1zWyR7bn1dYCwgb3JnU3RyZWFtc1tuXSwgJ211c3QgYmUgcmVhZGFibGUnKVxuICAgIH1cbiAgICBpZiAobiA+IDAgJiYgIShpc1dyaXRhYmxlKHN0cmVhbXNbbl0pIHx8IGlzV3JpdGFibGVTdHJlYW0oc3RyZWFtc1tuXSkgfHwgaXNUcmFuc2Zvcm1TdHJlYW0oc3RyZWFtc1tuXSkpKSB7XG4gICAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1ZBTFVFKGBzdHJlYW1zWyR7bn1dYCwgb3JnU3RyZWFtc1tuXSwgJ211c3QgYmUgd3JpdGFibGUnKVxuICAgIH1cbiAgfVxuICBsZXQgb25kcmFpblxuICBsZXQgb25maW5pc2hcbiAgbGV0IG9ucmVhZGFibGVcbiAgbGV0IG9uY2xvc2VcbiAgbGV0IGRcbiAgZnVuY3Rpb24gb25maW5pc2hlZChlcnIpIHtcbiAgICBjb25zdCBjYiA9IG9uY2xvc2VcbiAgICBvbmNsb3NlID0gbnVsbFxuICAgIGlmIChjYikge1xuICAgICAgY2IoZXJyKVxuICAgIH0gZWxzZSBpZiAoZXJyKSB7XG4gICAgICBkLmRlc3Ryb3koZXJyKVxuICAgIH0gZWxzZSBpZiAoIXJlYWRhYmxlICYmICF3cml0YWJsZSkge1xuICAgICAgZC5kZXN0cm95KClcbiAgICB9XG4gIH1cbiAgY29uc3QgaGVhZCA9IHN0cmVhbXNbMF1cbiAgY29uc3QgdGFpbCA9IHBpcGVsaW5lKHN0cmVhbXMsIG9uZmluaXNoZWQpXG4gIGNvbnN0IHdyaXRhYmxlID0gISEoaXNXcml0YWJsZShoZWFkKSB8fCBpc1dyaXRhYmxlU3RyZWFtKGhlYWQpIHx8IGlzVHJhbnNmb3JtU3RyZWFtKGhlYWQpKVxuICBjb25zdCByZWFkYWJsZSA9ICEhKGlzUmVhZGFibGUodGFpbCkgfHwgaXNSZWFkYWJsZVN0cmVhbSh0YWlsKSB8fCBpc1RyYW5zZm9ybVN0cmVhbSh0YWlsKSlcblxuICAvLyBUT0RPKHJvbmFnKTogQXZvaWQgZG91YmxlIGJ1ZmZlcmluZy5cbiAgLy8gSW1wbGVtZW50IFdyaXRhYmxlL1JlYWRhYmxlL0R1cGxleCB0cmFpdHMuXG4gIC8vIFNlZSwgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvMzM1MTUuXG4gIGQgPSBuZXcgRHVwbGV4KHtcbiAgICAvLyBUT0RPIChyb25hZyk6IGhpZ2hXYXRlck1hcms/XG4gICAgd3JpdGFibGVPYmplY3RNb2RlOiAhIShoZWFkICE9PSBudWxsICYmIGhlYWQgIT09IHVuZGVmaW5lZCAmJiBoZWFkLndyaXRhYmxlT2JqZWN0TW9kZSksXG4gICAgcmVhZGFibGVPYmplY3RNb2RlOiAhISh0YWlsICE9PSBudWxsICYmIHRhaWwgIT09IHVuZGVmaW5lZCAmJiB0YWlsLnJlYWRhYmxlT2JqZWN0TW9kZSksXG4gICAgd3JpdGFibGUsXG4gICAgcmVhZGFibGVcbiAgfSlcbiAgaWYgKHdyaXRhYmxlKSB7XG4gICAgaWYgKGlzTm9kZVN0cmVhbShoZWFkKSkge1xuICAgICAgZC5fd3JpdGUgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYWxsYmFjaykge1xuICAgICAgICBpZiAoaGVhZC53cml0ZShjaHVuaywgZW5jb2RpbmcpKSB7XG4gICAgICAgICAgY2FsbGJhY2soKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9uZHJhaW4gPSBjYWxsYmFja1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBkLl9maW5hbCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICBoZWFkLmVuZCgpXG4gICAgICAgIG9uZmluaXNoID0gY2FsbGJhY2tcbiAgICAgIH1cbiAgICAgIGhlYWQub24oJ2RyYWluJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAob25kcmFpbikge1xuICAgICAgICAgIGNvbnN0IGNiID0gb25kcmFpblxuICAgICAgICAgIG9uZHJhaW4gPSBudWxsXG4gICAgICAgICAgY2IoKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0gZWxzZSBpZiAoaXNXZWJTdHJlYW0oaGVhZCkpIHtcbiAgICAgIGNvbnN0IHdyaXRhYmxlID0gaXNUcmFuc2Zvcm1TdHJlYW0oaGVhZCkgPyBoZWFkLndyaXRhYmxlIDogaGVhZFxuICAgICAgY29uc3Qgd3JpdGVyID0gd3JpdGFibGUuZ2V0V3JpdGVyKClcbiAgICAgIGQuX3dyaXRlID0gYXN5bmMgZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2FsbGJhY2spIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB3cml0ZXIucmVhZHlcbiAgICAgICAgICB3cml0ZXIud3JpdGUoY2h1bmspLmNhdGNoKCgpID0+IHt9KVxuICAgICAgICAgIGNhbGxiYWNrKClcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY2FsbGJhY2soZXJyKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBkLl9maW5hbCA9IGFzeW5jIGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHdyaXRlci5yZWFkeVxuICAgICAgICAgIHdyaXRlci5jbG9zZSgpLmNhdGNoKCgpID0+IHt9KVxuICAgICAgICAgIG9uZmluaXNoID0gY2FsbGJhY2tcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY2FsbGJhY2soZXJyKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHRvUmVhZCA9IGlzVHJhbnNmb3JtU3RyZWFtKHRhaWwpID8gdGFpbC5yZWFkYWJsZSA6IHRhaWxcbiAgICBlb3ModG9SZWFkLCAoKSA9PiB7XG4gICAgICBpZiAob25maW5pc2gpIHtcbiAgICAgICAgY29uc3QgY2IgPSBvbmZpbmlzaFxuICAgICAgICBvbmZpbmlzaCA9IG51bGxcbiAgICAgICAgY2IoKVxuICAgICAgfVxuICAgIH0pXG4gIH1cbiAgaWYgKHJlYWRhYmxlKSB7XG4gICAgaWYgKGlzTm9kZVN0cmVhbSh0YWlsKSkge1xuICAgICAgdGFpbC5vbigncmVhZGFibGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChvbnJlYWRhYmxlKSB7XG4gICAgICAgICAgY29uc3QgY2IgPSBvbnJlYWRhYmxlXG4gICAgICAgICAgb25yZWFkYWJsZSA9IG51bGxcbiAgICAgICAgICBjYigpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICB0YWlsLm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGQucHVzaChudWxsKVxuICAgICAgfSlcbiAgICAgIGQuX3JlYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgY29uc3QgYnVmID0gdGFpbC5yZWFkKClcbiAgICAgICAgICBpZiAoYnVmID09PSBudWxsKSB7XG4gICAgICAgICAgICBvbnJlYWRhYmxlID0gZC5fcmVhZFxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghZC5wdXNoKGJ1ZikpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNXZWJTdHJlYW0odGFpbCkpIHtcbiAgICAgIGNvbnN0IHJlYWRhYmxlID0gaXNUcmFuc2Zvcm1TdHJlYW0odGFpbCkgPyB0YWlsLnJlYWRhYmxlIDogdGFpbFxuICAgICAgY29uc3QgcmVhZGVyID0gcmVhZGFibGUuZ2V0UmVhZGVyKClcbiAgICAgIGQuX3JlYWQgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHsgdmFsdWUsIGRvbmUgfSA9IGF3YWl0IHJlYWRlci5yZWFkKClcbiAgICAgICAgICAgIGlmICghZC5wdXNoKHZhbHVlKSkge1xuICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICAgIGQucHVzaChudWxsKVxuICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBkLl9kZXN0cm95ID0gZnVuY3Rpb24gKGVyciwgY2FsbGJhY2spIHtcbiAgICBpZiAoIWVyciAmJiBvbmNsb3NlICE9PSBudWxsKSB7XG4gICAgICBlcnIgPSBuZXcgQWJvcnRFcnJvcigpXG4gICAgfVxuICAgIG9ucmVhZGFibGUgPSBudWxsXG4gICAgb25kcmFpbiA9IG51bGxcbiAgICBvbmZpbmlzaCA9IG51bGxcbiAgICBpZiAob25jbG9zZSA9PT0gbnVsbCkge1xuICAgICAgY2FsbGJhY2soZXJyKVxuICAgIH0gZWxzZSB7XG4gICAgICBvbmNsb3NlID0gY2FsbGJhY2tcbiAgICAgIGlmIChpc05vZGVTdHJlYW0odGFpbCkpIHtcbiAgICAgICAgZGVzdHJveWVyKHRhaWwsIGVycilcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IEFib3J0Q29udHJvbGxlciA9IGdsb2JhbFRoaXMuQWJvcnRDb250cm9sbGVyIHx8IHJlcXVpcmUoJ2Fib3J0LWNvbnRyb2xsZXInKS5BYm9ydENvbnRyb2xsZXJcbmNvbnN0IHtcbiAgY29kZXM6IHsgRVJSX0lOVkFMSURfQVJHX1ZBTFVFLCBFUlJfSU5WQUxJRF9BUkdfVFlQRSwgRVJSX01JU1NJTkdfQVJHUywgRVJSX09VVF9PRl9SQU5HRSB9LFxuICBBYm9ydEVycm9yXG59ID0gcmVxdWlyZSgnLi4vLi4vb3Vycy9lcnJvcnMnKVxuY29uc3QgeyB2YWxpZGF0ZUFib3J0U2lnbmFsLCB2YWxpZGF0ZUludGVnZXIsIHZhbGlkYXRlT2JqZWN0IH0gPSByZXF1aXJlKCcuLi92YWxpZGF0b3JzJylcbmNvbnN0IGtXZWFrSGFuZGxlciA9IHJlcXVpcmUoJy4uLy4uL291cnMvcHJpbW9yZGlhbHMnKS5TeW1ib2woJ2tXZWFrJylcbmNvbnN0IGtSZXNpc3RTdG9wUHJvcGFnYXRpb24gPSByZXF1aXJlKCcuLi8uLi9vdXJzL3ByaW1vcmRpYWxzJykuU3ltYm9sKCdrUmVzaXN0U3RvcFByb3BhZ2F0aW9uJylcbmNvbnN0IHsgZmluaXNoZWQgfSA9IHJlcXVpcmUoJy4vZW5kLW9mLXN0cmVhbScpXG5jb25zdCBzdGF0aWNDb21wb3NlID0gcmVxdWlyZSgnLi9jb21wb3NlJylcbmNvbnN0IHsgYWRkQWJvcnRTaWduYWxOb1ZhbGlkYXRlIH0gPSByZXF1aXJlKCcuL2FkZC1hYm9ydC1zaWduYWwnKVxuY29uc3QgeyBpc1dyaXRhYmxlLCBpc05vZGVTdHJlYW0gfSA9IHJlcXVpcmUoJy4vdXRpbHMnKVxuY29uc3QgeyBkZXByZWNhdGUgfSA9IHJlcXVpcmUoJy4uLy4uL291cnMvdXRpbCcpXG5jb25zdCB7XG4gIEFycmF5UHJvdG90eXBlUHVzaCxcbiAgQm9vbGVhbixcbiAgTWF0aEZsb29yLFxuICBOdW1iZXIsXG4gIE51bWJlcklzTmFOLFxuICBQcm9taXNlLFxuICBQcm9taXNlUmVqZWN0LFxuICBQcm9taXNlUmVzb2x2ZSxcbiAgUHJvbWlzZVByb3RvdHlwZVRoZW4sXG4gIFN5bWJvbFxufSA9IHJlcXVpcmUoJy4uLy4uL291cnMvcHJpbW9yZGlhbHMnKVxuY29uc3Qga0VtcHR5ID0gU3ltYm9sKCdrRW1wdHknKVxuY29uc3Qga0VvZiA9IFN5bWJvbCgna0VvZicpXG5mdW5jdGlvbiBjb21wb3NlKHN0cmVhbSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyAhPSBudWxsKSB7XG4gICAgdmFsaWRhdGVPYmplY3Qob3B0aW9ucywgJ29wdGlvbnMnKVxuICB9XG4gIGlmICgob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBvcHRpb25zLnNpZ25hbCkgIT0gbnVsbCkge1xuICAgIHZhbGlkYXRlQWJvcnRTaWduYWwob3B0aW9ucy5zaWduYWwsICdvcHRpb25zLnNpZ25hbCcpXG4gIH1cbiAgaWYgKGlzTm9kZVN0cmVhbShzdHJlYW0pICYmICFpc1dyaXRhYmxlKHN0cmVhbSkpIHtcbiAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1ZBTFVFKCdzdHJlYW0nLCBzdHJlYW0sICdtdXN0IGJlIHdyaXRhYmxlJylcbiAgfVxuICBjb25zdCBjb21wb3NlZFN0cmVhbSA9IHN0YXRpY0NvbXBvc2UodGhpcywgc3RyZWFtKVxuICBpZiAob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB1bmRlZmluZWQgJiYgb3B0aW9ucy5zaWduYWwpIHtcbiAgICAvLyBOb3QgdmFsaWRhdGluZyBhcyB3ZSBhbHJlYWR5IHZhbGlkYXRlZCBiZWZvcmVcbiAgICBhZGRBYm9ydFNpZ25hbE5vVmFsaWRhdGUob3B0aW9ucy5zaWduYWwsIGNvbXBvc2VkU3RyZWFtKVxuICB9XG4gIHJldHVybiBjb21wb3NlZFN0cmVhbVxufVxuZnVuY3Rpb24gbWFwKGZuLCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoJ2ZuJywgWydGdW5jdGlvbicsICdBc3luY0Z1bmN0aW9uJ10sIGZuKVxuICB9XG4gIGlmIChvcHRpb25zICE9IG51bGwpIHtcbiAgICB2YWxpZGF0ZU9iamVjdChvcHRpb25zLCAnb3B0aW9ucycpXG4gIH1cbiAgaWYgKChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IG9wdGlvbnMuc2lnbmFsKSAhPSBudWxsKSB7XG4gICAgdmFsaWRhdGVBYm9ydFNpZ25hbChvcHRpb25zLnNpZ25hbCwgJ29wdGlvbnMuc2lnbmFsJylcbiAgfVxuICBsZXQgY29uY3VycmVuY3kgPSAxXG4gIGlmICgob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBvcHRpb25zLmNvbmN1cnJlbmN5KSAhPSBudWxsKSB7XG4gICAgY29uY3VycmVuY3kgPSBNYXRoRmxvb3Iob3B0aW9ucy5jb25jdXJyZW5jeSlcbiAgfVxuICBsZXQgaGlnaFdhdGVyTWFyayA9IGNvbmN1cnJlbmN5IC0gMVxuICBpZiAoKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogb3B0aW9ucy5oaWdoV2F0ZXJNYXJrKSAhPSBudWxsKSB7XG4gICAgaGlnaFdhdGVyTWFyayA9IE1hdGhGbG9vcihvcHRpb25zLmhpZ2hXYXRlck1hcmspXG4gIH1cbiAgdmFsaWRhdGVJbnRlZ2VyKGNvbmN1cnJlbmN5LCAnb3B0aW9ucy5jb25jdXJyZW5jeScsIDEpXG4gIHZhbGlkYXRlSW50ZWdlcihoaWdoV2F0ZXJNYXJrLCAnb3B0aW9ucy5oaWdoV2F0ZXJNYXJrJywgMClcbiAgaGlnaFdhdGVyTWFyayArPSBjb25jdXJyZW5jeVxuICByZXR1cm4gYXN5bmMgZnVuY3Rpb24qIG1hcCgpIHtcbiAgICBjb25zdCBzaWduYWwgPSByZXF1aXJlKCcuLi8uLi9vdXJzL3V0aWwnKS5BYm9ydFNpZ25hbEFueShcbiAgICAgIFtvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IG9wdGlvbnMuc2lnbmFsXS5maWx0ZXIoQm9vbGVhbilcbiAgICApXG4gICAgY29uc3Qgc3RyZWFtID0gdGhpc1xuICAgIGNvbnN0IHF1ZXVlID0gW11cbiAgICBjb25zdCBzaWduYWxPcHQgPSB7XG4gICAgICBzaWduYWxcbiAgICB9XG4gICAgbGV0IG5leHRcbiAgICBsZXQgcmVzdW1lXG4gICAgbGV0IGRvbmUgPSBmYWxzZVxuICAgIGxldCBjbnQgPSAwXG4gICAgZnVuY3Rpb24gb25DYXRjaCgpIHtcbiAgICAgIGRvbmUgPSB0cnVlXG4gICAgICBhZnRlckl0ZW1Qcm9jZXNzZWQoKVxuICAgIH1cbiAgICBmdW5jdGlvbiBhZnRlckl0ZW1Qcm9jZXNzZWQoKSB7XG4gICAgICBjbnQgLT0gMVxuICAgICAgbWF5YmVSZXN1bWUoKVxuICAgIH1cbiAgICBmdW5jdGlvbiBtYXliZVJlc3VtZSgpIHtcbiAgICAgIGlmIChyZXN1bWUgJiYgIWRvbmUgJiYgY250IDwgY29uY3VycmVuY3kgJiYgcXVldWUubGVuZ3RoIDwgaGlnaFdhdGVyTWFyaykge1xuICAgICAgICByZXN1bWUoKVxuICAgICAgICByZXN1bWUgPSBudWxsXG4gICAgICB9XG4gICAgfVxuICAgIGFzeW5jIGZ1bmN0aW9uIHB1bXAoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBmb3IgYXdhaXQgKGxldCB2YWwgb2Ygc3RyZWFtKSB7XG4gICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBBYm9ydEVycm9yKClcbiAgICAgICAgICB9XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHZhbCA9IGZuKHZhbCwgc2lnbmFsT3B0KVxuICAgICAgICAgICAgaWYgKHZhbCA9PT0ga0VtcHR5KSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YWwgPSBQcm9taXNlUmVzb2x2ZSh2YWwpXG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICB2YWwgPSBQcm9taXNlUmVqZWN0KGVycilcbiAgICAgICAgICB9XG4gICAgICAgICAgY250ICs9IDFcbiAgICAgICAgICBQcm9taXNlUHJvdG90eXBlVGhlbih2YWwsIGFmdGVySXRlbVByb2Nlc3NlZCwgb25DYXRjaClcbiAgICAgICAgICBxdWV1ZS5wdXNoKHZhbClcbiAgICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgbmV4dCgpXG4gICAgICAgICAgICBuZXh0ID0gbnVsbFxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWRvbmUgJiYgKHF1ZXVlLmxlbmd0aCA+PSBoaWdoV2F0ZXJNYXJrIHx8IGNudCA+PSBjb25jdXJyZW5jeSkpIHtcbiAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICAgIHJlc3VtZSA9IHJlc29sdmVcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlLnB1c2goa0VvZilcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zdCB2YWwgPSBQcm9taXNlUmVqZWN0KGVycilcbiAgICAgICAgUHJvbWlzZVByb3RvdHlwZVRoZW4odmFsLCBhZnRlckl0ZW1Qcm9jZXNzZWQsIG9uQ2F0Y2gpXG4gICAgICAgIHF1ZXVlLnB1c2godmFsKVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgZG9uZSA9IHRydWVcbiAgICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgICBuZXh0KClcbiAgICAgICAgICBuZXh0ID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHB1bXAoKVxuICAgIHRyeSB7XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB3aGlsZSAocXVldWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IHZhbCA9IGF3YWl0IHF1ZXVlWzBdXG4gICAgICAgICAgaWYgKHZhbCA9PT0ga0VvZikge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzaWduYWwuYWJvcnRlZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEFib3J0RXJyb3IoKVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodmFsICE9PSBrRW1wdHkpIHtcbiAgICAgICAgICAgIHlpZWxkIHZhbFxuICAgICAgICAgIH1cbiAgICAgICAgICBxdWV1ZS5zaGlmdCgpXG4gICAgICAgICAgbWF5YmVSZXN1bWUoKVxuICAgICAgICB9XG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgbmV4dCA9IHJlc29sdmVcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgZG9uZSA9IHRydWVcbiAgICAgIGlmIChyZXN1bWUpIHtcbiAgICAgICAgcmVzdW1lKClcbiAgICAgICAgcmVzdW1lID0gbnVsbFxuICAgICAgfVxuICAgIH1cbiAgfS5jYWxsKHRoaXMpXG59XG5mdW5jdGlvbiBhc0luZGV4ZWRQYWlycyhvcHRpb25zID0gdW5kZWZpbmVkKSB7XG4gIGlmIChvcHRpb25zICE9IG51bGwpIHtcbiAgICB2YWxpZGF0ZU9iamVjdChvcHRpb25zLCAnb3B0aW9ucycpXG4gIH1cbiAgaWYgKChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IG9wdGlvbnMuc2lnbmFsKSAhPSBudWxsKSB7XG4gICAgdmFsaWRhdGVBYm9ydFNpZ25hbChvcHRpb25zLnNpZ25hbCwgJ29wdGlvbnMuc2lnbmFsJylcbiAgfVxuICByZXR1cm4gYXN5bmMgZnVuY3Rpb24qIGFzSW5kZXhlZFBhaXJzKCkge1xuICAgIGxldCBpbmRleCA9IDBcbiAgICBmb3IgYXdhaXQgKGNvbnN0IHZhbCBvZiB0aGlzKSB7XG4gICAgICB2YXIgX29wdGlvbnMkc2lnbmFsXG4gICAgICBpZiAoXG4gICAgICAgIG9wdGlvbnMgIT09IG51bGwgJiZcbiAgICAgICAgb3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIChfb3B0aW9ucyRzaWduYWwgPSBvcHRpb25zLnNpZ25hbCkgIT09IG51bGwgJiZcbiAgICAgICAgX29wdGlvbnMkc2lnbmFsICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgX29wdGlvbnMkc2lnbmFsLmFib3J0ZWRcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgQWJvcnRFcnJvcih7XG4gICAgICAgICAgY2F1c2U6IG9wdGlvbnMuc2lnbmFsLnJlYXNvblxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgeWllbGQgW2luZGV4KyssIHZhbF1cbiAgICB9XG4gIH0uY2FsbCh0aGlzKVxufVxuYXN5bmMgZnVuY3Rpb24gc29tZShmbiwgb3B0aW9ucyA9IHVuZGVmaW5lZCkge1xuICBmb3IgYXdhaXQgKGNvbnN0IHVudXNlZCBvZiBmaWx0ZXIuY2FsbCh0aGlzLCBmbiwgb3B0aW9ucykpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuYXN5bmMgZnVuY3Rpb24gZXZlcnkoZm4sIG9wdGlvbnMgPSB1bmRlZmluZWQpIHtcbiAgaWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRSgnZm4nLCBbJ0Z1bmN0aW9uJywgJ0FzeW5jRnVuY3Rpb24nXSwgZm4pXG4gIH1cbiAgLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRGVfTW9yZ2FuJTI3c19sYXdzXG4gIHJldHVybiAhKGF3YWl0IHNvbWUuY2FsbChcbiAgICB0aGlzLFxuICAgIGFzeW5jICguLi5hcmdzKSA9PiB7XG4gICAgICByZXR1cm4gIShhd2FpdCBmbiguLi5hcmdzKSlcbiAgICB9LFxuICAgIG9wdGlvbnNcbiAgKSlcbn1cbmFzeW5jIGZ1bmN0aW9uIGZpbmQoZm4sIG9wdGlvbnMpIHtcbiAgZm9yIGF3YWl0IChjb25zdCByZXN1bHQgb2YgZmlsdGVyLmNhbGwodGhpcywgZm4sIG9wdGlvbnMpKSB7XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG4gIHJldHVybiB1bmRlZmluZWRcbn1cbmFzeW5jIGZ1bmN0aW9uIGZvckVhY2goZm4sIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRSgnZm4nLCBbJ0Z1bmN0aW9uJywgJ0FzeW5jRnVuY3Rpb24nXSwgZm4pXG4gIH1cbiAgYXN5bmMgZnVuY3Rpb24gZm9yRWFjaEZuKHZhbHVlLCBvcHRpb25zKSB7XG4gICAgYXdhaXQgZm4odmFsdWUsIG9wdGlvbnMpXG4gICAgcmV0dXJuIGtFbXB0eVxuICB9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBmb3IgYXdhaXQgKGNvbnN0IHVudXNlZCBvZiBtYXAuY2FsbCh0aGlzLCBmb3JFYWNoRm4sIG9wdGlvbnMpKTtcbn1cbmZ1bmN0aW9uIGZpbHRlcihmbiwgb3B0aW9ucykge1xuICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKCdmbicsIFsnRnVuY3Rpb24nLCAnQXN5bmNGdW5jdGlvbiddLCBmbilcbiAgfVxuICBhc3luYyBmdW5jdGlvbiBmaWx0ZXJGbih2YWx1ZSwgb3B0aW9ucykge1xuICAgIGlmIChhd2FpdCBmbih2YWx1ZSwgb3B0aW9ucykpIHtcbiAgICAgIHJldHVybiB2YWx1ZVxuICAgIH1cbiAgICByZXR1cm4ga0VtcHR5XG4gIH1cbiAgcmV0dXJuIG1hcC5jYWxsKHRoaXMsIGZpbHRlckZuLCBvcHRpb25zKVxufVxuXG4vLyBTcGVjaWZpYyB0byBwcm92aWRlIGJldHRlciBlcnJvciB0byByZWR1Y2Ugc2luY2UgdGhlIGFyZ3VtZW50IGlzIG9ubHlcbi8vIG1pc3NpbmcgaWYgdGhlIHN0cmVhbSBoYXMgbm8gaXRlbXMgaW4gaXQgLSBidXQgdGhlIGNvZGUgaXMgc3RpbGwgYXBwcm9wcmlhdGVcbmNsYXNzIFJlZHVjZUF3YXJlRXJyTWlzc2luZ0FyZ3MgZXh0ZW5kcyBFUlJfTUlTU0lOR19BUkdTIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoJ3JlZHVjZScpXG4gICAgdGhpcy5tZXNzYWdlID0gJ1JlZHVjZSBvZiBhbiBlbXB0eSBzdHJlYW0gcmVxdWlyZXMgYW4gaW5pdGlhbCB2YWx1ZSdcbiAgfVxufVxuYXN5bmMgZnVuY3Rpb24gcmVkdWNlKHJlZHVjZXIsIGluaXRpYWxWYWx1ZSwgb3B0aW9ucykge1xuICB2YXIgX29wdGlvbnMkc2lnbmFsMlxuICBpZiAodHlwZW9mIHJlZHVjZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoJ3JlZHVjZXInLCBbJ0Z1bmN0aW9uJywgJ0FzeW5jRnVuY3Rpb24nXSwgcmVkdWNlcilcbiAgfVxuICBpZiAob3B0aW9ucyAhPSBudWxsKSB7XG4gICAgdmFsaWRhdGVPYmplY3Qob3B0aW9ucywgJ29wdGlvbnMnKVxuICB9XG4gIGlmICgob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBvcHRpb25zLnNpZ25hbCkgIT0gbnVsbCkge1xuICAgIHZhbGlkYXRlQWJvcnRTaWduYWwob3B0aW9ucy5zaWduYWwsICdvcHRpb25zLnNpZ25hbCcpXG4gIH1cbiAgbGV0IGhhc0luaXRpYWxWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxXG4gIGlmIChcbiAgICBvcHRpb25zICE9PSBudWxsICYmXG4gICAgb3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmXG4gICAgKF9vcHRpb25zJHNpZ25hbDIgPSBvcHRpb25zLnNpZ25hbCkgIT09IG51bGwgJiZcbiAgICBfb3B0aW9ucyRzaWduYWwyICE9PSB1bmRlZmluZWQgJiZcbiAgICBfb3B0aW9ucyRzaWduYWwyLmFib3J0ZWRcbiAgKSB7XG4gICAgY29uc3QgZXJyID0gbmV3IEFib3J0RXJyb3IodW5kZWZpbmVkLCB7XG4gICAgICBjYXVzZTogb3B0aW9ucy5zaWduYWwucmVhc29uXG4gICAgfSlcbiAgICB0aGlzLm9uY2UoJ2Vycm9yJywgKCkgPT4ge30pIC8vIFRoZSBlcnJvciBpcyBhbHJlYWR5IHByb3BhZ2F0ZWRcbiAgICBhd2FpdCBmaW5pc2hlZCh0aGlzLmRlc3Ryb3koZXJyKSlcbiAgICB0aHJvdyBlcnJcbiAgfVxuICBjb25zdCBhYyA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuICBjb25zdCBzaWduYWwgPSBhYy5zaWduYWxcbiAgaWYgKG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbnMuc2lnbmFsKSB7XG4gICAgY29uc3Qgb3B0cyA9IHtcbiAgICAgIG9uY2U6IHRydWUsXG4gICAgICBba1dlYWtIYW5kbGVyXTogdGhpcyxcbiAgICAgIFtrUmVzaXN0U3RvcFByb3BhZ2F0aW9uXTogdHJ1ZVxuICAgIH1cbiAgICBvcHRpb25zLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsICgpID0+IGFjLmFib3J0KCksIG9wdHMpXG4gIH1cbiAgbGV0IGdvdEFueUl0ZW1Gcm9tU3RyZWFtID0gZmFsc2VcbiAgdHJ5IHtcbiAgICBmb3IgYXdhaXQgKGNvbnN0IHZhbHVlIG9mIHRoaXMpIHtcbiAgICAgIHZhciBfb3B0aW9ucyRzaWduYWwzXG4gICAgICBnb3RBbnlJdGVtRnJvbVN0cmVhbSA9IHRydWVcbiAgICAgIGlmIChcbiAgICAgICAgb3B0aW9ucyAhPT0gbnVsbCAmJlxuICAgICAgICBvcHRpb25zICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgKF9vcHRpb25zJHNpZ25hbDMgPSBvcHRpb25zLnNpZ25hbCkgIT09IG51bGwgJiZcbiAgICAgICAgX29wdGlvbnMkc2lnbmFsMyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIF9vcHRpb25zJHNpZ25hbDMuYWJvcnRlZFxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBBYm9ydEVycm9yKClcbiAgICAgIH1cbiAgICAgIGlmICghaGFzSW5pdGlhbFZhbHVlKSB7XG4gICAgICAgIGluaXRpYWxWYWx1ZSA9IHZhbHVlXG4gICAgICAgIGhhc0luaXRpYWxWYWx1ZSA9IHRydWVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGluaXRpYWxWYWx1ZSA9IGF3YWl0IHJlZHVjZXIoaW5pdGlhbFZhbHVlLCB2YWx1ZSwge1xuICAgICAgICAgIHNpZ25hbFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWdvdEFueUl0ZW1Gcm9tU3RyZWFtICYmICFoYXNJbml0aWFsVmFsdWUpIHtcbiAgICAgIHRocm93IG5ldyBSZWR1Y2VBd2FyZUVyck1pc3NpbmdBcmdzKClcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgYWMuYWJvcnQoKVxuICB9XG4gIHJldHVybiBpbml0aWFsVmFsdWVcbn1cbmFzeW5jIGZ1bmN0aW9uIHRvQXJyYXkob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyAhPSBudWxsKSB7XG4gICAgdmFsaWRhdGVPYmplY3Qob3B0aW9ucywgJ29wdGlvbnMnKVxuICB9XG4gIGlmICgob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBvcHRpb25zLnNpZ25hbCkgIT0gbnVsbCkge1xuICAgIHZhbGlkYXRlQWJvcnRTaWduYWwob3B0aW9ucy5zaWduYWwsICdvcHRpb25zLnNpZ25hbCcpXG4gIH1cbiAgY29uc3QgcmVzdWx0ID0gW11cbiAgZm9yIGF3YWl0IChjb25zdCB2YWwgb2YgdGhpcykge1xuICAgIHZhciBfb3B0aW9ucyRzaWduYWw0XG4gICAgaWYgKFxuICAgICAgb3B0aW9ucyAhPT0gbnVsbCAmJlxuICAgICAgb3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAoX29wdGlvbnMkc2lnbmFsNCA9IG9wdGlvbnMuc2lnbmFsKSAhPT0gbnVsbCAmJlxuICAgICAgX29wdGlvbnMkc2lnbmFsNCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBfb3B0aW9ucyRzaWduYWw0LmFib3J0ZWRcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBBYm9ydEVycm9yKHVuZGVmaW5lZCwge1xuICAgICAgICBjYXVzZTogb3B0aW9ucy5zaWduYWwucmVhc29uXG4gICAgICB9KVxuICAgIH1cbiAgICBBcnJheVByb3RvdHlwZVB1c2gocmVzdWx0LCB2YWwpXG4gIH1cbiAgcmV0dXJuIHJlc3VsdFxufVxuZnVuY3Rpb24gZmxhdE1hcChmbiwgb3B0aW9ucykge1xuICBjb25zdCB2YWx1ZXMgPSBtYXAuY2FsbCh0aGlzLCBmbiwgb3B0aW9ucylcbiAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uKiBmbGF0TWFwKCkge1xuICAgIGZvciBhd2FpdCAoY29uc3QgdmFsIG9mIHZhbHVlcykge1xuICAgICAgeWllbGQqIHZhbFxuICAgIH1cbiAgfS5jYWxsKHRoaXMpXG59XG5mdW5jdGlvbiB0b0ludGVnZXJPckluZmluaXR5KG51bWJlcikge1xuICAvLyBXZSBjb2VyY2UgaGVyZSB0byBhbGlnbiB3aXRoIHRoZSBzcGVjXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWl0ZXJhdG9yLWhlbHBlcnMvaXNzdWVzLzE2OVxuICBudW1iZXIgPSBOdW1iZXIobnVtYmVyKVxuICBpZiAoTnVtYmVySXNOYU4obnVtYmVyKSkge1xuICAgIHJldHVybiAwXG4gIH1cbiAgaWYgKG51bWJlciA8IDApIHtcbiAgICB0aHJvdyBuZXcgRVJSX09VVF9PRl9SQU5HRSgnbnVtYmVyJywgJz49IDAnLCBudW1iZXIpXG4gIH1cbiAgcmV0dXJuIG51bWJlclxufVxuZnVuY3Rpb24gZHJvcChudW1iZXIsIG9wdGlvbnMgPSB1bmRlZmluZWQpIHtcbiAgaWYgKG9wdGlvbnMgIT0gbnVsbCkge1xuICAgIHZhbGlkYXRlT2JqZWN0KG9wdGlvbnMsICdvcHRpb25zJylcbiAgfVxuICBpZiAoKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogb3B0aW9ucy5zaWduYWwpICE9IG51bGwpIHtcbiAgICB2YWxpZGF0ZUFib3J0U2lnbmFsKG9wdGlvbnMuc2lnbmFsLCAnb3B0aW9ucy5zaWduYWwnKVxuICB9XG4gIG51bWJlciA9IHRvSW50ZWdlck9ySW5maW5pdHkobnVtYmVyKVxuICByZXR1cm4gYXN5bmMgZnVuY3Rpb24qIGRyb3AoKSB7XG4gICAgdmFyIF9vcHRpb25zJHNpZ25hbDVcbiAgICBpZiAoXG4gICAgICBvcHRpb25zICE9PSBudWxsICYmXG4gICAgICBvcHRpb25zICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIChfb3B0aW9ucyRzaWduYWw1ID0gb3B0aW9ucy5zaWduYWwpICE9PSBudWxsICYmXG4gICAgICBfb3B0aW9ucyRzaWduYWw1ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIF9vcHRpb25zJHNpZ25hbDUuYWJvcnRlZFxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEFib3J0RXJyb3IoKVxuICAgIH1cbiAgICBmb3IgYXdhaXQgKGNvbnN0IHZhbCBvZiB0aGlzKSB7XG4gICAgICB2YXIgX29wdGlvbnMkc2lnbmFsNlxuICAgICAgaWYgKFxuICAgICAgICBvcHRpb25zICE9PSBudWxsICYmXG4gICAgICAgIG9wdGlvbnMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAoX29wdGlvbnMkc2lnbmFsNiA9IG9wdGlvbnMuc2lnbmFsKSAhPT0gbnVsbCAmJlxuICAgICAgICBfb3B0aW9ucyRzaWduYWw2ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgX29wdGlvbnMkc2lnbmFsNi5hYm9ydGVkXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEFib3J0RXJyb3IoKVxuICAgICAgfVxuICAgICAgaWYgKG51bWJlci0tIDw9IDApIHtcbiAgICAgICAgeWllbGQgdmFsXG4gICAgICB9XG4gICAgfVxuICB9LmNhbGwodGhpcylcbn1cbmZ1bmN0aW9uIHRha2UobnVtYmVyLCBvcHRpb25zID0gdW5kZWZpbmVkKSB7XG4gIGlmIChvcHRpb25zICE9IG51bGwpIHtcbiAgICB2YWxpZGF0ZU9iamVjdChvcHRpb25zLCAnb3B0aW9ucycpXG4gIH1cbiAgaWYgKChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IG9wdGlvbnMuc2lnbmFsKSAhPSBudWxsKSB7XG4gICAgdmFsaWRhdGVBYm9ydFNpZ25hbChvcHRpb25zLnNpZ25hbCwgJ29wdGlvbnMuc2lnbmFsJylcbiAgfVxuICBudW1iZXIgPSB0b0ludGVnZXJPckluZmluaXR5KG51bWJlcilcbiAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uKiB0YWtlKCkge1xuICAgIHZhciBfb3B0aW9ucyRzaWduYWw3XG4gICAgaWYgKFxuICAgICAgb3B0aW9ucyAhPT0gbnVsbCAmJlxuICAgICAgb3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAoX29wdGlvbnMkc2lnbmFsNyA9IG9wdGlvbnMuc2lnbmFsKSAhPT0gbnVsbCAmJlxuICAgICAgX29wdGlvbnMkc2lnbmFsNyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBfb3B0aW9ucyRzaWduYWw3LmFib3J0ZWRcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBBYm9ydEVycm9yKClcbiAgICB9XG4gICAgZm9yIGF3YWl0IChjb25zdCB2YWwgb2YgdGhpcykge1xuICAgICAgdmFyIF9vcHRpb25zJHNpZ25hbDhcbiAgICAgIGlmIChcbiAgICAgICAgb3B0aW9ucyAhPT0gbnVsbCAmJlxuICAgICAgICBvcHRpb25zICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgKF9vcHRpb25zJHNpZ25hbDggPSBvcHRpb25zLnNpZ25hbCkgIT09IG51bGwgJiZcbiAgICAgICAgX29wdGlvbnMkc2lnbmFsOCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIF9vcHRpb25zJHNpZ25hbDguYWJvcnRlZFxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBBYm9ydEVycm9yKClcbiAgICAgIH1cbiAgICAgIGlmIChudW1iZXItLSA+IDApIHtcbiAgICAgICAgeWllbGQgdmFsXG4gICAgICB9XG5cbiAgICAgIC8vIERvbid0IGdldCBhbm90aGVyIGl0ZW0gZnJvbSBpdGVyYXRvciBpbiBjYXNlIHdlIHJlYWNoZWQgdGhlIGVuZFxuICAgICAgaWYgKG51bWJlciA8PSAwKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cbiAgfS5jYWxsKHRoaXMpXG59XG5tb2R1bGUuZXhwb3J0cy5zdHJlYW1SZXR1cm5pbmdPcGVyYXRvcnMgPSB7XG4gIGFzSW5kZXhlZFBhaXJzOiBkZXByZWNhdGUoYXNJbmRleGVkUGFpcnMsICdyZWFkYWJsZS5hc0luZGV4ZWRQYWlycyB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbi4nKSxcbiAgZHJvcCxcbiAgZmlsdGVyLFxuICBmbGF0TWFwLFxuICBtYXAsXG4gIHRha2UsXG4gIGNvbXBvc2Vcbn1cbm1vZHVsZS5leHBvcnRzLnByb21pc2VSZXR1cm5pbmdPcGVyYXRvcnMgPSB7XG4gIGV2ZXJ5LFxuICBmb3JFYWNoLFxuICByZWR1Y2UsXG4gIHRvQXJyYXksXG4gIHNvbWUsXG4gIGZpbmRcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgQXJyYXlQcm90b3R5cGVQb3AsIFByb21pc2UgfSA9IHJlcXVpcmUoJy4uL291cnMvcHJpbW9yZGlhbHMnKVxuY29uc3QgeyBpc0l0ZXJhYmxlLCBpc05vZGVTdHJlYW0sIGlzV2ViU3RyZWFtIH0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbC9zdHJlYW1zL3V0aWxzJylcbmNvbnN0IHsgcGlwZWxpbmVJbXBsOiBwbCB9ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWwvc3RyZWFtcy9waXBlbGluZScpXG5jb25zdCB7IGZpbmlzaGVkIH0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbC9zdHJlYW1zL2VuZC1vZi1zdHJlYW0nKVxucmVxdWlyZSgnLi4vLi4vbGliL3N0cmVhbS5qcycpXG5mdW5jdGlvbiBwaXBlbGluZSguLi5zdHJlYW1zKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgbGV0IHNpZ25hbFxuICAgIGxldCBlbmRcbiAgICBjb25zdCBsYXN0QXJnID0gc3RyZWFtc1tzdHJlYW1zLmxlbmd0aCAtIDFdXG4gICAgaWYgKFxuICAgICAgbGFzdEFyZyAmJlxuICAgICAgdHlwZW9mIGxhc3RBcmcgPT09ICdvYmplY3QnICYmXG4gICAgICAhaXNOb2RlU3RyZWFtKGxhc3RBcmcpICYmXG4gICAgICAhaXNJdGVyYWJsZShsYXN0QXJnKSAmJlxuICAgICAgIWlzV2ViU3RyZWFtKGxhc3RBcmcpXG4gICAgKSB7XG4gICAgICBjb25zdCBvcHRpb25zID0gQXJyYXlQcm90b3R5cGVQb3Aoc3RyZWFtcylcbiAgICAgIHNpZ25hbCA9IG9wdGlvbnMuc2lnbmFsXG4gICAgICBlbmQgPSBvcHRpb25zLmVuZFxuICAgIH1cbiAgICBwbChcbiAgICAgIHN0cmVhbXMsXG4gICAgICAoZXJyLCB2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgcmVqZWN0KGVycilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNvbHZlKHZhbHVlKVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBzaWduYWwsXG4gICAgICAgIGVuZFxuICAgICAgfVxuICAgIClcbiAgfSlcbn1cbm1vZHVsZS5leHBvcnRzID0ge1xuICBmaW5pc2hlZCxcbiAgcGlwZWxpbmVcbn1cbiIsCiAgICAiLyogcmVwbGFjZW1lbnQgc3RhcnQgKi9cblxuY29uc3QgeyBCdWZmZXIgfSA9IHJlcXVpcmUoJ2J1ZmZlcicpXG5cbi8qIHJlcGxhY2VtZW50IGVuZCAqL1xuLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbjsoJ3VzZSBzdHJpY3QnKVxuY29uc3QgeyBPYmplY3REZWZpbmVQcm9wZXJ0eSwgT2JqZWN0S2V5cywgUmVmbGVjdEFwcGx5IH0gPSByZXF1aXJlKCcuL291cnMvcHJpbW9yZGlhbHMnKVxuY29uc3Qge1xuICBwcm9taXNpZnk6IHsgY3VzdG9tOiBjdXN0b21Qcm9taXNpZnkgfVxufSA9IHJlcXVpcmUoJy4vb3Vycy91dGlsJylcbmNvbnN0IHsgc3RyZWFtUmV0dXJuaW5nT3BlcmF0b3JzLCBwcm9taXNlUmV0dXJuaW5nT3BlcmF0b3JzIH0gPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvb3BlcmF0b3JzJylcbmNvbnN0IHtcbiAgY29kZXM6IHsgRVJSX0lMTEVHQUxfQ09OU1RSVUNUT1IgfVxufSA9IHJlcXVpcmUoJy4vb3Vycy9lcnJvcnMnKVxuY29uc3QgY29tcG9zZSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvc3RyZWFtcy9jb21wb3NlJylcbmNvbnN0IHsgc2V0RGVmYXVsdEhpZ2hXYXRlck1hcmssIGdldERlZmF1bHRIaWdoV2F0ZXJNYXJrIH0gPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvc3RhdGUnKVxuY29uc3QgeyBwaXBlbGluZSB9ID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL3BpcGVsaW5lJylcbmNvbnN0IHsgZGVzdHJveWVyIH0gPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvZGVzdHJveScpXG5jb25zdCBlb3MgPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvZW5kLW9mLXN0cmVhbScpXG5jb25zdCBpbnRlcm5hbEJ1ZmZlciA9IHt9XG5jb25zdCBwcm9taXNlcyA9IHJlcXVpcmUoJy4vc3RyZWFtL3Byb21pc2VzJylcbmNvbnN0IHV0aWxzID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL3V0aWxzJylcbmNvbnN0IFN0cmVhbSA9IChtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvc3RyZWFtcy9sZWdhY3knKS5TdHJlYW0pXG5TdHJlYW0uaXNEZXN0cm95ZWQgPSB1dGlscy5pc0Rlc3Ryb3llZFxuU3RyZWFtLmlzRGlzdHVyYmVkID0gdXRpbHMuaXNEaXN0dXJiZWRcblN0cmVhbS5pc0Vycm9yZWQgPSB1dGlscy5pc0Vycm9yZWRcblN0cmVhbS5pc1JlYWRhYmxlID0gdXRpbHMuaXNSZWFkYWJsZVxuU3RyZWFtLmlzV3JpdGFibGUgPSB1dGlscy5pc1dyaXRhYmxlXG5TdHJlYW0uUmVhZGFibGUgPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvcmVhZGFibGUnKVxuZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0S2V5cyhzdHJlYW1SZXR1cm5pbmdPcGVyYXRvcnMpKSB7XG4gIGNvbnN0IG9wID0gc3RyZWFtUmV0dXJuaW5nT3BlcmF0b3JzW2tleV1cbiAgZnVuY3Rpb24gZm4oLi4uYXJncykge1xuICAgIGlmIChuZXcudGFyZ2V0KSB7XG4gICAgICB0aHJvdyBFUlJfSUxMRUdBTF9DT05TVFJVQ1RPUigpXG4gICAgfVxuICAgIHJldHVybiBTdHJlYW0uUmVhZGFibGUuZnJvbShSZWZsZWN0QXBwbHkob3AsIHRoaXMsIGFyZ3MpKVxuICB9XG4gIE9iamVjdERlZmluZVByb3BlcnR5KGZuLCAnbmFtZScsIHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgdmFsdWU6IG9wLm5hbWVcbiAgfSlcbiAgT2JqZWN0RGVmaW5lUHJvcGVydHkoZm4sICdsZW5ndGgnLCB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIHZhbHVlOiBvcC5sZW5ndGhcbiAgfSlcbiAgT2JqZWN0RGVmaW5lUHJvcGVydHkoU3RyZWFtLlJlYWRhYmxlLnByb3RvdHlwZSwga2V5LCB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIHZhbHVlOiBmbixcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgd3JpdGFibGU6IHRydWVcbiAgfSlcbn1cbmZvciAoY29uc3Qga2V5IG9mIE9iamVjdEtleXMocHJvbWlzZVJldHVybmluZ09wZXJhdG9ycykpIHtcbiAgY29uc3Qgb3AgPSBwcm9taXNlUmV0dXJuaW5nT3BlcmF0b3JzW2tleV1cbiAgZnVuY3Rpb24gZm4oLi4uYXJncykge1xuICAgIGlmIChuZXcudGFyZ2V0KSB7XG4gICAgICB0aHJvdyBFUlJfSUxMRUdBTF9DT05TVFJVQ1RPUigpXG4gICAgfVxuICAgIHJldHVybiBSZWZsZWN0QXBwbHkob3AsIHRoaXMsIGFyZ3MpXG4gIH1cbiAgT2JqZWN0RGVmaW5lUHJvcGVydHkoZm4sICduYW1lJywge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICB2YWx1ZTogb3AubmFtZVxuICB9KVxuICBPYmplY3REZWZpbmVQcm9wZXJ0eShmbiwgJ2xlbmd0aCcsIHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgdmFsdWU6IG9wLmxlbmd0aFxuICB9KVxuICBPYmplY3REZWZpbmVQcm9wZXJ0eShTdHJlYW0uUmVhZGFibGUucHJvdG90eXBlLCBrZXksIHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgdmFsdWU6IGZuLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB3cml0YWJsZTogdHJ1ZVxuICB9KVxufVxuU3RyZWFtLldyaXRhYmxlID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL3dyaXRhYmxlJylcblN0cmVhbS5EdXBsZXggPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvZHVwbGV4JylcblN0cmVhbS5UcmFuc2Zvcm0gPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvdHJhbnNmb3JtJylcblN0cmVhbS5QYXNzVGhyb3VnaCA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvc3RyZWFtcy9wYXNzdGhyb3VnaCcpXG5TdHJlYW0ucGlwZWxpbmUgPSBwaXBlbGluZVxuY29uc3QgeyBhZGRBYm9ydFNpZ25hbCB9ID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL2FkZC1hYm9ydC1zaWduYWwnKVxuU3RyZWFtLmFkZEFib3J0U2lnbmFsID0gYWRkQWJvcnRTaWduYWxcblN0cmVhbS5maW5pc2hlZCA9IGVvc1xuU3RyZWFtLmRlc3Ryb3kgPSBkZXN0cm95ZXJcblN0cmVhbS5jb21wb3NlID0gY29tcG9zZVxuU3RyZWFtLnNldERlZmF1bHRIaWdoV2F0ZXJNYXJrID0gc2V0RGVmYXVsdEhpZ2hXYXRlck1hcmtcblN0cmVhbS5nZXREZWZhdWx0SGlnaFdhdGVyTWFyayA9IGdldERlZmF1bHRIaWdoV2F0ZXJNYXJrXG5PYmplY3REZWZpbmVQcm9wZXJ0eShTdHJlYW0sICdwcm9taXNlcycsIHtcbiAgX19wcm90b19fOiBudWxsLFxuICBjb25maWd1cmFibGU6IHRydWUsXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldCgpIHtcbiAgICByZXR1cm4gcHJvbWlzZXNcbiAgfVxufSlcbk9iamVjdERlZmluZVByb3BlcnR5KHBpcGVsaW5lLCBjdXN0b21Qcm9taXNpZnksIHtcbiAgX19wcm90b19fOiBudWxsLFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQoKSB7XG4gICAgcmV0dXJuIHByb21pc2VzLnBpcGVsaW5lXG4gIH1cbn0pXG5PYmplY3REZWZpbmVQcm9wZXJ0eShlb3MsIGN1c3RvbVByb21pc2lmeSwge1xuICBfX3Byb3RvX186IG51bGwsXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldCgpIHtcbiAgICByZXR1cm4gcHJvbWlzZXMuZmluaXNoZWRcbiAgfVxufSlcblxuLy8gQmFja3dhcmRzLWNvbXBhdCB3aXRoIG5vZGUgMC40LnhcblN0cmVhbS5TdHJlYW0gPSBTdHJlYW1cblN0cmVhbS5faXNVaW50OEFycmF5ID0gZnVuY3Rpb24gaXNVaW50OEFycmF5KHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXlcbn1cblN0cmVhbS5fdWludDhBcnJheVRvQnVmZmVyID0gZnVuY3Rpb24gX3VpbnQ4QXJyYXlUb0J1ZmZlcihjaHVuaykge1xuICByZXR1cm4gQnVmZmVyLmZyb20oY2h1bmsuYnVmZmVyLCBjaHVuay5ieXRlT2Zmc2V0LCBjaHVuay5ieXRlTGVuZ3RoKVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJylcbmlmIChTdHJlYW0gJiYgcHJvY2Vzcy5lbnYuUkVBREFCTEVfU1RSRUFNID09PSAnZGlzYWJsZScpIHtcbiAgY29uc3QgcHJvbWlzZXMgPSBTdHJlYW0ucHJvbWlzZXNcblxuICAvLyBFeHBsaWNpdCBleHBvcnQgbmFtaW5nIGlzIG5lZWRlZCBmb3IgRVNNXG4gIG1vZHVsZS5leHBvcnRzLl91aW50OEFycmF5VG9CdWZmZXIgPSBTdHJlYW0uX3VpbnQ4QXJyYXlUb0J1ZmZlclxuICBtb2R1bGUuZXhwb3J0cy5faXNVaW50OEFycmF5ID0gU3RyZWFtLl9pc1VpbnQ4QXJyYXlcbiAgbW9kdWxlLmV4cG9ydHMuaXNEaXN0dXJiZWQgPSBTdHJlYW0uaXNEaXN0dXJiZWRcbiAgbW9kdWxlLmV4cG9ydHMuaXNFcnJvcmVkID0gU3RyZWFtLmlzRXJyb3JlZFxuICBtb2R1bGUuZXhwb3J0cy5pc1JlYWRhYmxlID0gU3RyZWFtLmlzUmVhZGFibGVcbiAgbW9kdWxlLmV4cG9ydHMuUmVhZGFibGUgPSBTdHJlYW0uUmVhZGFibGVcbiAgbW9kdWxlLmV4cG9ydHMuV3JpdGFibGUgPSBTdHJlYW0uV3JpdGFibGVcbiAgbW9kdWxlLmV4cG9ydHMuRHVwbGV4ID0gU3RyZWFtLkR1cGxleFxuICBtb2R1bGUuZXhwb3J0cy5UcmFuc2Zvcm0gPSBTdHJlYW0uVHJhbnNmb3JtXG4gIG1vZHVsZS5leHBvcnRzLlBhc3NUaHJvdWdoID0gU3RyZWFtLlBhc3NUaHJvdWdoXG4gIG1vZHVsZS5leHBvcnRzLmFkZEFib3J0U2lnbmFsID0gU3RyZWFtLmFkZEFib3J0U2lnbmFsXG4gIG1vZHVsZS5leHBvcnRzLmZpbmlzaGVkID0gU3RyZWFtLmZpbmlzaGVkXG4gIG1vZHVsZS5leHBvcnRzLmRlc3Ryb3kgPSBTdHJlYW0uZGVzdHJveVxuICBtb2R1bGUuZXhwb3J0cy5waXBlbGluZSA9IFN0cmVhbS5waXBlbGluZVxuICBtb2R1bGUuZXhwb3J0cy5jb21wb3NlID0gU3RyZWFtLmNvbXBvc2VcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0cmVhbSwgJ3Byb21pc2VzJywge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiBwcm9taXNlc1xuICAgIH1cbiAgfSlcbiAgbW9kdWxlLmV4cG9ydHMuU3RyZWFtID0gU3RyZWFtLlN0cmVhbVxufSBlbHNlIHtcbiAgY29uc3QgQ3VzdG9tU3RyZWFtID0gcmVxdWlyZSgnLi4vc3RyZWFtJylcbiAgY29uc3QgcHJvbWlzZXMgPSByZXF1aXJlKCcuLi9zdHJlYW0vcHJvbWlzZXMnKVxuICBjb25zdCBvcmlnaW5hbERlc3Ryb3kgPSBDdXN0b21TdHJlYW0uUmVhZGFibGUuZGVzdHJveVxuICBtb2R1bGUuZXhwb3J0cyA9IEN1c3RvbVN0cmVhbS5SZWFkYWJsZVxuXG4gIC8vIEV4cGxpY2l0IGV4cG9ydCBuYW1pbmcgaXMgbmVlZGVkIGZvciBFU01cbiAgbW9kdWxlLmV4cG9ydHMuX3VpbnQ4QXJyYXlUb0J1ZmZlciA9IEN1c3RvbVN0cmVhbS5fdWludDhBcnJheVRvQnVmZmVyXG4gIG1vZHVsZS5leHBvcnRzLl9pc1VpbnQ4QXJyYXkgPSBDdXN0b21TdHJlYW0uX2lzVWludDhBcnJheVxuICBtb2R1bGUuZXhwb3J0cy5pc0Rpc3R1cmJlZCA9IEN1c3RvbVN0cmVhbS5pc0Rpc3R1cmJlZFxuICBtb2R1bGUuZXhwb3J0cy5pc0Vycm9yZWQgPSBDdXN0b21TdHJlYW0uaXNFcnJvcmVkXG4gIG1vZHVsZS5leHBvcnRzLmlzUmVhZGFibGUgPSBDdXN0b21TdHJlYW0uaXNSZWFkYWJsZVxuICBtb2R1bGUuZXhwb3J0cy5SZWFkYWJsZSA9IEN1c3RvbVN0cmVhbS5SZWFkYWJsZVxuICBtb2R1bGUuZXhwb3J0cy5Xcml0YWJsZSA9IEN1c3RvbVN0cmVhbS5Xcml0YWJsZVxuICBtb2R1bGUuZXhwb3J0cy5EdXBsZXggPSBDdXN0b21TdHJlYW0uRHVwbGV4XG4gIG1vZHVsZS5leHBvcnRzLlRyYW5zZm9ybSA9IEN1c3RvbVN0cmVhbS5UcmFuc2Zvcm1cbiAgbW9kdWxlLmV4cG9ydHMuUGFzc1Rocm91Z2ggPSBDdXN0b21TdHJlYW0uUGFzc1Rocm91Z2hcbiAgbW9kdWxlLmV4cG9ydHMuYWRkQWJvcnRTaWduYWwgPSBDdXN0b21TdHJlYW0uYWRkQWJvcnRTaWduYWxcbiAgbW9kdWxlLmV4cG9ydHMuZmluaXNoZWQgPSBDdXN0b21TdHJlYW0uZmluaXNoZWRcbiAgbW9kdWxlLmV4cG9ydHMuZGVzdHJveSA9IEN1c3RvbVN0cmVhbS5kZXN0cm95XG4gIG1vZHVsZS5leHBvcnRzLmRlc3Ryb3kgPSBvcmlnaW5hbERlc3Ryb3lcbiAgbW9kdWxlLmV4cG9ydHMucGlwZWxpbmUgPSBDdXN0b21TdHJlYW0ucGlwZWxpbmVcbiAgbW9kdWxlLmV4cG9ydHMuY29tcG9zZSA9IEN1c3RvbVN0cmVhbS5jb21wb3NlXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDdXN0b21TdHJlYW0sICdwcm9taXNlcycsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gcHJvbWlzZXNcbiAgICB9XG4gIH0pXG4gIG1vZHVsZS5leHBvcnRzLlN0cmVhbSA9IEN1c3RvbVN0cmVhbS5TdHJlYW1cbn1cblxuLy8gQWxsb3cgZGVmYXVsdCBpbXBvcnRpbmdcbm1vZHVsZS5leHBvcnRzLmRlZmF1bHQgPSBtb2R1bGUuZXhwb3J0c1xuIiwKICAgICIvKipcbiAqIEFwcGVuZHMgdGhlIGVsZW1lbnRzIG9mIGB2YWx1ZXNgIHRvIGBhcnJheWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHZhbHVlcyB0byBhcHBlbmQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlQdXNoKGFycmF5LCB2YWx1ZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSB2YWx1ZXMubGVuZ3RoLFxuICAgICAgb2Zmc2V0ID0gYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgYXJyYXlbb2Zmc2V0ICsgaW5kZXhdID0gdmFsdWVzW2luZGV4XTtcbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlQdXNoO1xuIiwKICAgICJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzcHJlYWRhYmxlU3ltYm9sID0gU3ltYm9sID8gU3ltYm9sLmlzQ29uY2F0U3ByZWFkYWJsZSA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIGZsYXR0ZW5hYmxlIGBhcmd1bWVudHNgIG9iamVjdCBvciBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBmbGF0dGVuYWJsZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0ZsYXR0ZW5hYmxlKHZhbHVlKSB7XG4gIHJldHVybiBpc0FycmF5KHZhbHVlKSB8fCBpc0FyZ3VtZW50cyh2YWx1ZSkgfHxcbiAgICAhIShzcHJlYWRhYmxlU3ltYm9sICYmIHZhbHVlICYmIHZhbHVlW3NwcmVhZGFibGVTeW1ib2xdKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0ZsYXR0ZW5hYmxlO1xuIiwKICAgICJ2YXIgYXJyYXlQdXNoID0gcmVxdWlyZSgnLi9fYXJyYXlQdXNoJyksXG4gICAgaXNGbGF0dGVuYWJsZSA9IHJlcXVpcmUoJy4vX2lzRmxhdHRlbmFibGUnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mbGF0dGVuYCB3aXRoIHN1cHBvcnQgZm9yIHJlc3RyaWN0aW5nIGZsYXR0ZW5pbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmbGF0dGVuLlxuICogQHBhcmFtIHtudW1iZXJ9IGRlcHRoIFRoZSBtYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3ByZWRpY2F0ZT1pc0ZsYXR0ZW5hYmxlXSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNTdHJpY3RdIFJlc3RyaWN0IHRvIHZhbHVlcyB0aGF0IHBhc3MgYHByZWRpY2F0ZWAgY2hlY2tzLlxuICogQHBhcmFtIHtBcnJheX0gW3Jlc3VsdD1bXV0gVGhlIGluaXRpYWwgcmVzdWx0IHZhbHVlLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmxhdHRlbmVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBiYXNlRmxhdHRlbihhcnJheSwgZGVwdGgsIHByZWRpY2F0ZSwgaXNTdHJpY3QsIHJlc3VsdCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBwcmVkaWNhdGUgfHwgKHByZWRpY2F0ZSA9IGlzRmxhdHRlbmFibGUpO1xuICByZXN1bHQgfHwgKHJlc3VsdCA9IFtdKTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICBpZiAoZGVwdGggPiAwICYmIHByZWRpY2F0ZSh2YWx1ZSkpIHtcbiAgICAgIGlmIChkZXB0aCA+IDEpIHtcbiAgICAgICAgLy8gUmVjdXJzaXZlbHkgZmxhdHRlbiBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICAgICAgYmFzZUZsYXR0ZW4odmFsdWUsIGRlcHRoIC0gMSwgcHJlZGljYXRlLCBpc1N0cmljdCwgcmVzdWx0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFycmF5UHVzaChyZXN1bHQsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFpc1N0cmljdCkge1xuICAgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGhdID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUZsYXR0ZW47XG4iLAogICAgInZhciBiYXNlRmxhdHRlbiA9IHJlcXVpcmUoJy4vX2Jhc2VGbGF0dGVuJyk7XG5cbi8qKlxuICogRmxhdHRlbnMgYGFycmF5YCBhIHNpbmdsZSBsZXZlbCBkZWVwLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGZsYXR0ZW4uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmbGF0dGVuZWQgYXJyYXkuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uZmxhdHRlbihbMSwgWzIsIFszLCBbNF1dLCA1XV0pO1xuICogLy8gPT4gWzEsIDIsIFszLCBbNF1dLCA1XVxuICovXG5mdW5jdGlvbiBmbGF0dGVuKGFycmF5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgcmV0dXJuIGxlbmd0aCA/IGJhc2VGbGF0dGVuKGFycmF5LCAxKSA6IFtdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZsYXR0ZW47XG4iLAogICAgInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIG5hdGl2ZUNyZWF0ZSA9IGdldE5hdGl2ZShPYmplY3QsICdjcmVhdGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBuYXRpdmVDcmVhdGU7XG4iLAogICAgInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBoYXNoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIEhhc2hcbiAqL1xuZnVuY3Rpb24gaGFzaENsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gbmF0aXZlQ3JlYXRlID8gbmF0aXZlQ3JlYXRlKG51bGwpIDoge307XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaENsZWFyO1xuIiwKICAgICIvKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBoYXNoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge09iamVjdH0gaGFzaCBUaGUgaGFzaCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzaERlbGV0ZShrZXkpIHtcbiAgdmFyIHJlc3VsdCA9IHRoaXMuaGFzKGtleSkgJiYgZGVsZXRlIHRoaXMuX19kYXRhX19ba2V5XTtcbiAgdGhpcy5zaXplIC09IHJlc3VsdCA/IDEgOiAwO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hEZWxldGU7XG4iLAogICAgInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEdldHMgdGhlIGhhc2ggdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gaGFzaEdldChrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICBpZiAobmF0aXZlQ3JlYXRlKSB7XG4gICAgdmFyIHJlc3VsdCA9IGRhdGFba2V5XTtcbiAgICByZXR1cm4gcmVzdWx0ID09PSBIQVNIX1VOREVGSU5FRCA/IHVuZGVmaW5lZCA6IHJlc3VsdDtcbiAgfVxuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpID8gZGF0YVtrZXldIDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hHZXQ7XG4iLAogICAgInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBoYXNoIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBoYXNoSGFzKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIHJldHVybiBuYXRpdmVDcmVhdGUgPyAoZGF0YVtrZXldICE9PSB1bmRlZmluZWQpIDogaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hIYXM7XG4iLAogICAgInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKipcbiAqIFNldHMgdGhlIGhhc2ggYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBoYXNoIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBoYXNoU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICB0aGlzLnNpemUgKz0gdGhpcy5oYXMoa2V5KSA/IDAgOiAxO1xuICBkYXRhW2tleV0gPSAobmF0aXZlQ3JlYXRlICYmIHZhbHVlID09PSB1bmRlZmluZWQpID8gSEFTSF9VTkRFRklORUQgOiB2YWx1ZTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaFNldDtcbiIsCiAgICAidmFyIGhhc2hDbGVhciA9IHJlcXVpcmUoJy4vX2hhc2hDbGVhcicpLFxuICAgIGhhc2hEZWxldGUgPSByZXF1aXJlKCcuL19oYXNoRGVsZXRlJyksXG4gICAgaGFzaEdldCA9IHJlcXVpcmUoJy4vX2hhc2hHZXQnKSxcbiAgICBoYXNoSGFzID0gcmVxdWlyZSgnLi9faGFzaEhhcycpLFxuICAgIGhhc2hTZXQgPSByZXF1aXJlKCcuL19oYXNoU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGhhc2ggb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBIYXNoKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYEhhc2hgLlxuSGFzaC5wcm90b3R5cGUuY2xlYXIgPSBoYXNoQ2xlYXI7XG5IYXNoLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBoYXNoRGVsZXRlO1xuSGFzaC5wcm90b3R5cGUuZ2V0ID0gaGFzaEdldDtcbkhhc2gucHJvdG90eXBlLmhhcyA9IGhhc2hIYXM7XG5IYXNoLnByb3RvdHlwZS5zZXQgPSBoYXNoU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEhhc2g7XG4iLAogICAgIi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgbGlzdCBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBbXTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVDbGVhcjtcbiIsCiAgICAidmFyIGVxID0gcmVxdWlyZSgnLi9lcScpO1xuXG4vKipcbiAqIEdldHMgdGhlIGluZGV4IGF0IHdoaWNoIHRoZSBga2V5YCBpcyBmb3VuZCBpbiBgYXJyYXlgIG9mIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IGtleSBUaGUga2V5IHRvIHNlYXJjaCBmb3IuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICovXG5mdW5jdGlvbiBhc3NvY0luZGV4T2YoYXJyYXksIGtleSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICBpZiAoZXEoYXJyYXlbbGVuZ3RoXVswXSwga2V5KSkge1xuICAgICAgcmV0dXJuIGxlbmd0aDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFzc29jSW5kZXhPZjtcbiIsCiAgICAidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgYXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3BsaWNlID0gYXJyYXlQcm90by5zcGxpY2U7XG5cbi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGxpc3QgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZURlbGV0ZShrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBsYXN0SW5kZXggPSBkYXRhLmxlbmd0aCAtIDE7XG4gIGlmIChpbmRleCA9PSBsYXN0SW5kZXgpIHtcbiAgICBkYXRhLnBvcCgpO1xuICB9IGVsc2Uge1xuICAgIHNwbGljZS5jYWxsKGRhdGEsIGluZGV4LCAxKTtcbiAgfVxuICAtLXRoaXMuc2l6ZTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlRGVsZXRlO1xuIiwKICAgICJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUdldChrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICByZXR1cm4gaW5kZXggPCAwID8gdW5kZWZpbmVkIDogZGF0YVtpbmRleF1bMV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlR2V0O1xuIiwKICAgICJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVIYXMoa2V5KSB7XG4gIHJldHVybiBhc3NvY0luZGV4T2YodGhpcy5fX2RhdGFfXywga2V5KSA+IC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZUhhcztcbiIsCiAgICAidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKipcbiAqIFNldHMgdGhlIGxpc3QgY2FjaGUgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGxpc3QgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZVNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgaWYgKGluZGV4IDwgMCkge1xuICAgICsrdGhpcy5zaXplO1xuICAgIGRhdGEucHVzaChba2V5LCB2YWx1ZV0pO1xuICB9IGVsc2Uge1xuICAgIGRhdGFbaW5kZXhdWzFdID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlU2V0O1xuIiwKICAgICJ2YXIgbGlzdENhY2hlQ2xlYXIgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVDbGVhcicpLFxuICAgIGxpc3RDYWNoZURlbGV0ZSA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZURlbGV0ZScpLFxuICAgIGxpc3RDYWNoZUdldCA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZUdldCcpLFxuICAgIGxpc3RDYWNoZUhhcyA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZUhhcycpLFxuICAgIGxpc3RDYWNoZVNldCA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZVNldCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gbGlzdCBjYWNoZSBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIExpc3RDYWNoZShlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBMaXN0Q2FjaGVgLlxuTGlzdENhY2hlLnByb3RvdHlwZS5jbGVhciA9IGxpc3RDYWNoZUNsZWFyO1xuTGlzdENhY2hlLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBsaXN0Q2FjaGVEZWxldGU7XG5MaXN0Q2FjaGUucHJvdG90eXBlLmdldCA9IGxpc3RDYWNoZUdldDtcbkxpc3RDYWNoZS5wcm90b3R5cGUuaGFzID0gbGlzdENhY2hlSGFzO1xuTGlzdENhY2hlLnByb3RvdHlwZS5zZXQgPSBsaXN0Q2FjaGVTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gTGlzdENhY2hlO1xuIiwKICAgICJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIE1hcCA9IGdldE5hdGl2ZShyb290LCAnTWFwJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gTWFwO1xuIiwKICAgICJ2YXIgSGFzaCA9IHJlcXVpcmUoJy4vX0hhc2gnKSxcbiAgICBMaXN0Q2FjaGUgPSByZXF1aXJlKCcuL19MaXN0Q2FjaGUnKSxcbiAgICBNYXAgPSByZXF1aXJlKCcuL19NYXAnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVDbGVhcigpIHtcbiAgdGhpcy5zaXplID0gMDtcbiAgdGhpcy5fX2RhdGFfXyA9IHtcbiAgICAnaGFzaCc6IG5ldyBIYXNoLFxuICAgICdtYXAnOiBuZXcgKE1hcCB8fCBMaXN0Q2FjaGUpLFxuICAgICdzdHJpbmcnOiBuZXcgSGFzaFxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlQ2xlYXI7XG4iLAogICAgIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUgZm9yIHVzZSBhcyB1bmlxdWUgb2JqZWN0IGtleS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0tleWFibGUodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiAodHlwZSA9PSAnc3RyaW5nJyB8fCB0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicpXG4gICAgPyAodmFsdWUgIT09ICdfX3Byb3RvX18nKVxuICAgIDogKHZhbHVlID09PSBudWxsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0tleWFibGU7XG4iLAogICAgInZhciBpc0tleWFibGUgPSByZXF1aXJlKCcuL19pc0tleWFibGUnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBkYXRhIGZvciBgbWFwYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG1hcCBUaGUgbWFwIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUgcmVmZXJlbmNlIGtleS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtYXAgZGF0YS5cbiAqL1xuZnVuY3Rpb24gZ2V0TWFwRGF0YShtYXAsIGtleSkge1xuICB2YXIgZGF0YSA9IG1hcC5fX2RhdGFfXztcbiAgcmV0dXJuIGlzS2V5YWJsZShrZXkpXG4gICAgPyBkYXRhW3R5cGVvZiBrZXkgPT0gJ3N0cmluZycgPyAnc3RyaW5nJyA6ICdoYXNoJ11cbiAgICA6IGRhdGEubWFwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldE1hcERhdGE7XG4iLAogICAgInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSlbJ2RlbGV0ZSddKGtleSk7XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZURlbGV0ZTtcbiIsCiAgICAidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgbWFwIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUdldChrZXkpIHtcbiAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KS5nZXQoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZUdldDtcbiIsCiAgICAidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgbWFwIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVIYXMoa2V5KSB7XG4gIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleSkuaGFzKGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVIYXM7XG4iLAogICAgInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIFNldHMgdGhlIG1hcCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBtYXAgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSksXG4gICAgICBzaXplID0gZGF0YS5zaXplO1xuXG4gIGRhdGEuc2V0KGtleSwgdmFsdWUpO1xuICB0aGlzLnNpemUgKz0gZGF0YS5zaXplID09IHNpemUgPyAwIDogMTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVTZXQ7XG4iLAogICAgInZhciBtYXBDYWNoZUNsZWFyID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVDbGVhcicpLFxuICAgIG1hcENhY2hlRGVsZXRlID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVEZWxldGUnKSxcbiAgICBtYXBDYWNoZUdldCA9IHJlcXVpcmUoJy4vX21hcENhY2hlR2V0JyksXG4gICAgbWFwQ2FjaGVIYXMgPSByZXF1aXJlKCcuL19tYXBDYWNoZUhhcycpLFxuICAgIG1hcENhY2hlU2V0ID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbWFwIGNhY2hlIG9iamVjdCB0byBzdG9yZSBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIE1hcENhY2hlKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYE1hcENhY2hlYC5cbk1hcENhY2hlLnByb3RvdHlwZS5jbGVhciA9IG1hcENhY2hlQ2xlYXI7XG5NYXBDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gbWFwQ2FjaGVEZWxldGU7XG5NYXBDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbWFwQ2FjaGVHZXQ7XG5NYXBDYWNoZS5wcm90b3R5cGUuaGFzID0gbWFwQ2FjaGVIYXM7XG5NYXBDYWNoZS5wcm90b3R5cGUuc2V0ID0gbWFwQ2FjaGVTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gTWFwQ2FjaGU7XG4iLAogICAgIi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuLyoqXG4gKiBBZGRzIGB2YWx1ZWAgdG8gdGhlIGFycmF5IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBhZGRcbiAqIEBtZW1iZXJPZiBTZXRDYWNoZVxuICogQGFsaWFzIHB1c2hcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNhY2hlLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIHNldENhY2hlQWRkKHZhbHVlKSB7XG4gIHRoaXMuX19kYXRhX18uc2V0KHZhbHVlLCBIQVNIX1VOREVGSU5FRCk7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldENhY2hlQWRkO1xuIiwKICAgICIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGluIHRoZSBhcnJheSBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgU2V0Q2FjaGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHNldENhY2hlSGFzKHZhbHVlKSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmhhcyh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0Q2FjaGVIYXM7XG4iLAogICAgInZhciBNYXBDYWNoZSA9IHJlcXVpcmUoJy4vX01hcENhY2hlJyksXG4gICAgc2V0Q2FjaGVBZGQgPSByZXF1aXJlKCcuL19zZXRDYWNoZUFkZCcpLFxuICAgIHNldENhY2hlSGFzID0gcmVxdWlyZSgnLi9fc2V0Q2FjaGVIYXMnKTtcblxuLyoqXG4gKlxuICogQ3JlYXRlcyBhbiBhcnJheSBjYWNoZSBvYmplY3QgdG8gc3RvcmUgdW5pcXVlIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbdmFsdWVzXSBUaGUgdmFsdWVzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBTZXRDYWNoZSh2YWx1ZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSB2YWx1ZXMgPT0gbnVsbCA/IDAgOiB2YWx1ZXMubGVuZ3RoO1xuXG4gIHRoaXMuX19kYXRhX18gPSBuZXcgTWFwQ2FjaGU7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdGhpcy5hZGQodmFsdWVzW2luZGV4XSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYFNldENhY2hlYC5cblNldENhY2hlLnByb3RvdHlwZS5hZGQgPSBTZXRDYWNoZS5wcm90b3R5cGUucHVzaCA9IHNldENhY2hlQWRkO1xuU2V0Q2FjaGUucHJvdG90eXBlLmhhcyA9IHNldENhY2hlSGFzO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNldENhY2hlO1xuIiwKICAgICIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZpbmRJbmRleGAgYW5kIGBfLmZpbmRMYXN0SW5kZXhgIHdpdGhvdXRcbiAqIHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0ge251bWJlcn0gZnJvbUluZGV4IFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUZpbmRJbmRleChhcnJheSwgcHJlZGljYXRlLCBmcm9tSW5kZXgsIGZyb21SaWdodCkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgaW5kZXggPSBmcm9tSW5kZXggKyAoZnJvbVJpZ2h0ID8gMSA6IC0xKTtcblxuICB3aGlsZSAoKGZyb21SaWdodCA/IGluZGV4LS0gOiArK2luZGV4IDwgbGVuZ3RoKSkge1xuICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlRmluZEluZGV4O1xuIiwKICAgICIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTmFOYCB3aXRob3V0IHN1cHBvcnQgZm9yIG51bWJlciBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGBOYU5gLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc05hTih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IHZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc05hTjtcbiIsCiAgICAiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uaW5kZXhPZmAgd2hpY2ggcGVyZm9ybXMgc3RyaWN0IGVxdWFsaXR5XG4gKiBjb21wYXJpc29ucyBvZiB2YWx1ZXMsIGkuZS4gYD09PWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gc3RyaWN0SW5kZXhPZihhcnJheSwgdmFsdWUsIGZyb21JbmRleCkge1xuICB2YXIgaW5kZXggPSBmcm9tSW5kZXggLSAxLFxuICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKGFycmF5W2luZGV4XSA9PT0gdmFsdWUpIHtcbiAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0cmljdEluZGV4T2Y7XG4iLAogICAgInZhciBiYXNlRmluZEluZGV4ID0gcmVxdWlyZSgnLi9fYmFzZUZpbmRJbmRleCcpLFxuICAgIGJhc2VJc05hTiA9IHJlcXVpcmUoJy4vX2Jhc2VJc05hTicpLFxuICAgIHN0cmljdEluZGV4T2YgPSByZXF1aXJlKCcuL19zdHJpY3RJbmRleE9mJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaW5kZXhPZmAgd2l0aG91dCBgZnJvbUluZGV4YCBib3VuZHMgY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcGFyYW0ge251bWJlcn0gZnJvbUluZGV4IFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJbmRleE9mKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4KSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gdmFsdWVcbiAgICA/IHN0cmljdEluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpXG4gICAgOiBiYXNlRmluZEluZGV4KGFycmF5LCBiYXNlSXNOYU4sIGZyb21JbmRleCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUluZGV4T2Y7XG4iLAogICAgInZhciBiYXNlSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Jhc2VJbmRleE9mJyk7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmluY2x1ZGVzYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAqIHNwZWNpZnlpbmcgYW4gaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IHRhcmdldCBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdGFyZ2V0YCBpcyBmb3VuZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBhcnJheUluY2x1ZGVzKGFycmF5LCB2YWx1ZSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gIHJldHVybiAhIWxlbmd0aCAmJiBiYXNlSW5kZXhPZihhcnJheSwgdmFsdWUsIDApID4gLTE7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlJbmNsdWRlcztcbiIsCiAgICAiLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2UgYGFycmF5SW5jbHVkZXNgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYSBjb21wYXJhdG9yLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSB0YXJnZXQgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjb21wYXJhdG9yIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHRhcmdldGAgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlJbmNsdWRlc1dpdGgoYXJyYXksIHZhbHVlLCBjb21wYXJhdG9yKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBpZiAoY29tcGFyYXRvcih2YWx1ZSwgYXJyYXlbaW5kZXhdKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUluY2x1ZGVzV2l0aDtcbiIsCiAgICAiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubWFwYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWVcbiAqIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5TWFwKGFycmF5LCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheU1hcDtcbiIsCiAgICAiLyoqXG4gKiBDaGVja3MgaWYgYSBgY2FjaGVgIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBjYWNoZSBUaGUgY2FjaGUgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gY2FjaGVIYXMoY2FjaGUsIGtleSkge1xuICByZXR1cm4gY2FjaGUuaGFzKGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2FjaGVIYXM7XG4iLAogICAgInZhciBTZXRDYWNoZSA9IHJlcXVpcmUoJy4vX1NldENhY2hlJyksXG4gICAgYXJyYXlJbmNsdWRlcyA9IHJlcXVpcmUoJy4vX2FycmF5SW5jbHVkZXMnKSxcbiAgICBhcnJheUluY2x1ZGVzV2l0aCA9IHJlcXVpcmUoJy4vX2FycmF5SW5jbHVkZXNXaXRoJyksXG4gICAgYXJyYXlNYXAgPSByZXF1aXJlKCcuL19hcnJheU1hcCcpLFxuICAgIGJhc2VVbmFyeSA9IHJlcXVpcmUoJy4vX2Jhc2VVbmFyeScpLFxuICAgIGNhY2hlSGFzID0gcmVxdWlyZSgnLi9fY2FjaGVIYXMnKTtcblxuLyoqIFVzZWQgYXMgdGhlIHNpemUgdG8gZW5hYmxlIGxhcmdlIGFycmF5IG9wdGltaXphdGlvbnMuICovXG52YXIgTEFSR0VfQVJSQVlfU0laRSA9IDIwMDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBtZXRob2RzIGxpa2UgYF8uZGlmZmVyZW5jZWAgd2l0aG91dCBzdXBwb3J0XG4gKiBmb3IgZXhjbHVkaW5nIG11bHRpcGxlIGFycmF5cyBvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIGV4Y2x1ZGUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWVdIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmF0b3JdIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBmaWx0ZXJlZCB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VEaWZmZXJlbmNlKGFycmF5LCB2YWx1ZXMsIGl0ZXJhdGVlLCBjb21wYXJhdG9yKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgaW5jbHVkZXMgPSBhcnJheUluY2x1ZGVzLFxuICAgICAgaXNDb21tb24gPSB0cnVlLFxuICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gW10sXG4gICAgICB2YWx1ZXNMZW5ndGggPSB2YWx1ZXMubGVuZ3RoO1xuXG4gIGlmICghbGVuZ3RoKSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBpZiAoaXRlcmF0ZWUpIHtcbiAgICB2YWx1ZXMgPSBhcnJheU1hcCh2YWx1ZXMsIGJhc2VVbmFyeShpdGVyYXRlZSkpO1xuICB9XG4gIGlmIChjb21wYXJhdG9yKSB7XG4gICAgaW5jbHVkZXMgPSBhcnJheUluY2x1ZGVzV2l0aDtcbiAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICB9XG4gIGVsc2UgaWYgKHZhbHVlcy5sZW5ndGggPj0gTEFSR0VfQVJSQVlfU0laRSkge1xuICAgIGluY2x1ZGVzID0gY2FjaGVIYXM7XG4gICAgaXNDb21tb24gPSBmYWxzZTtcbiAgICB2YWx1ZXMgPSBuZXcgU2V0Q2FjaGUodmFsdWVzKTtcbiAgfVxuICBvdXRlcjpcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF0sXG4gICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUgPT0gbnVsbCA/IHZhbHVlIDogaXRlcmF0ZWUodmFsdWUpO1xuXG4gICAgdmFsdWUgPSAoY29tcGFyYXRvciB8fCB2YWx1ZSAhPT0gMCkgPyB2YWx1ZSA6IDA7XG4gICAgaWYgKGlzQ29tbW9uICYmIGNvbXB1dGVkID09PSBjb21wdXRlZCkge1xuICAgICAgdmFyIHZhbHVlc0luZGV4ID0gdmFsdWVzTGVuZ3RoO1xuICAgICAgd2hpbGUgKHZhbHVlc0luZGV4LS0pIHtcbiAgICAgICAgaWYgKHZhbHVlc1t2YWx1ZXNJbmRleF0gPT09IGNvbXB1dGVkKSB7XG4gICAgICAgICAgY29udGludWUgb3V0ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIWluY2x1ZGVzKHZhbHVlcywgY29tcHV0ZWQsIGNvbXBhcmF0b3IpKSB7XG4gICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZURpZmZlcmVuY2U7XG4iLAogICAgInZhciBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uaXNBcnJheUxpa2VgIGV4Y2VwdCB0aGF0IGl0IGFsc28gY2hlY2tzIGlmIGB2YWx1ZWBcbiAqIGlzIGFuIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheS1saWtlIG9iamVjdCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlT2JqZWN0KGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXlMaWtlT2JqZWN0KF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5TGlrZU9iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBpc0FycmF5TGlrZSh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcnJheUxpa2VPYmplY3Q7XG4iLAogICAgInZhciBiYXNlRGlmZmVyZW5jZSA9IHJlcXVpcmUoJy4vX2Jhc2VEaWZmZXJlbmNlJyksXG4gICAgYmFzZUZsYXR0ZW4gPSByZXF1aXJlKCcuL19iYXNlRmxhdHRlbicpLFxuICAgIGJhc2VSZXN0ID0gcmVxdWlyZSgnLi9fYmFzZVJlc3QnKSxcbiAgICBpc0FycmF5TGlrZU9iamVjdCA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2VPYmplY3QnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIGBhcnJheWAgdmFsdWVzIG5vdCBpbmNsdWRlZCBpbiB0aGUgb3RoZXIgZ2l2ZW4gYXJyYXlzXG4gKiB1c2luZyBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLiBUaGUgb3JkZXIgYW5kIHJlZmVyZW5jZXMgb2YgcmVzdWx0IHZhbHVlcyBhcmVcbiAqIGRldGVybWluZWQgYnkgdGhlIGZpcnN0IGFycmF5LlxuICpcbiAqICoqTm90ZToqKiBVbmxpa2UgYF8ucHVsbEFsbGAsIHRoaXMgbWV0aG9kIHJldHVybnMgYSBuZXcgYXJyYXkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Li4uQXJyYXl9IFt2YWx1ZXNdIFRoZSB2YWx1ZXMgdG8gZXhjbHVkZS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGZpbHRlcmVkIHZhbHVlcy5cbiAqIEBzZWUgXy53aXRob3V0LCBfLnhvclxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmRpZmZlcmVuY2UoWzIsIDFdLCBbMiwgM10pO1xuICogLy8gPT4gWzFdXG4gKi9cbnZhciBkaWZmZXJlbmNlID0gYmFzZVJlc3QoZnVuY3Rpb24oYXJyYXksIHZhbHVlcykge1xuICByZXR1cm4gaXNBcnJheUxpa2VPYmplY3QoYXJyYXkpXG4gICAgPyBiYXNlRGlmZmVyZW5jZShhcnJheSwgYmFzZUZsYXR0ZW4odmFsdWVzLCAxLCBpc0FycmF5TGlrZU9iamVjdCwgdHJ1ZSkpXG4gICAgOiBbXTtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRpZmZlcmVuY2U7XG4iLAogICAgInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgU2V0ID0gZ2V0TmF0aXZlKHJvb3QsICdTZXQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTZXQ7XG4iLAogICAgIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyBgdW5kZWZpbmVkYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDIuMy4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRpbWVzKDIsIF8ubm9vcCk7XG4gKiAvLyA9PiBbdW5kZWZpbmVkLCB1bmRlZmluZWRdXG4gKi9cbmZ1bmN0aW9uIG5vb3AoKSB7XG4gIC8vIE5vIG9wZXJhdGlvbiBwZXJmb3JtZWQuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbm9vcDtcbiIsCiAgICAiLyoqXG4gKiBDb252ZXJ0cyBgc2V0YCB0byBhbiBhcnJheSBvZiBpdHMgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc2V0IFRoZSBzZXQgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBzZXRUb0FycmF5KHNldCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KHNldC5zaXplKTtcblxuICBzZXQuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJlc3VsdFsrK2luZGV4XSA9IHZhbHVlO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXRUb0FycmF5O1xuIiwKICAgICJ2YXIgU2V0ID0gcmVxdWlyZSgnLi9fU2V0JyksXG4gICAgbm9vcCA9IHJlcXVpcmUoJy4vbm9vcCcpLFxuICAgIHNldFRvQXJyYXkgPSByZXF1aXJlKCcuL19zZXRUb0FycmF5Jyk7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIElORklOSVRZID0gMSAvIDA7XG5cbi8qKlxuICogQ3JlYXRlcyBhIHNldCBvYmplY3Qgb2YgYHZhbHVlc2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIGFkZCB0byB0aGUgc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IHNldC5cbiAqL1xudmFyIGNyZWF0ZVNldCA9ICEoU2V0ICYmICgxIC8gc2V0VG9BcnJheShuZXcgU2V0KFssLTBdKSlbMV0pID09IElORklOSVRZKSA/IG5vb3AgOiBmdW5jdGlvbih2YWx1ZXMpIHtcbiAgcmV0dXJuIG5ldyBTZXQodmFsdWVzKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlU2V0O1xuIiwKICAgICJ2YXIgU2V0Q2FjaGUgPSByZXF1aXJlKCcuL19TZXRDYWNoZScpLFxuICAgIGFycmF5SW5jbHVkZXMgPSByZXF1aXJlKCcuL19hcnJheUluY2x1ZGVzJyksXG4gICAgYXJyYXlJbmNsdWRlc1dpdGggPSByZXF1aXJlKCcuL19hcnJheUluY2x1ZGVzV2l0aCcpLFxuICAgIGNhY2hlSGFzID0gcmVxdWlyZSgnLi9fY2FjaGVIYXMnKSxcbiAgICBjcmVhdGVTZXQgPSByZXF1aXJlKCcuL19jcmVhdGVTZXQnKSxcbiAgICBzZXRUb0FycmF5ID0gcmVxdWlyZSgnLi9fc2V0VG9BcnJheScpO1xuXG4vKiogVXNlZCBhcyB0aGUgc2l6ZSB0byBlbmFibGUgbGFyZ2UgYXJyYXkgb3B0aW1pemF0aW9ucy4gKi9cbnZhciBMQVJHRV9BUlJBWV9TSVpFID0gMjAwO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVuaXFCeWAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY29tcGFyYXRvcl0gVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGR1cGxpY2F0ZSBmcmVlIGFycmF5LlxuICovXG5mdW5jdGlvbiBiYXNlVW5pcShhcnJheSwgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBpbmNsdWRlcyA9IGFycmF5SW5jbHVkZXMsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICBpc0NvbW1vbiA9IHRydWUsXG4gICAgICByZXN1bHQgPSBbXSxcbiAgICAgIHNlZW4gPSByZXN1bHQ7XG5cbiAgaWYgKGNvbXBhcmF0b3IpIHtcbiAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICAgIGluY2x1ZGVzID0gYXJyYXlJbmNsdWRlc1dpdGg7XG4gIH1cbiAgZWxzZSBpZiAobGVuZ3RoID49IExBUkdFX0FSUkFZX1NJWkUpIHtcbiAgICB2YXIgc2V0ID0gaXRlcmF0ZWUgPyBudWxsIDogY3JlYXRlU2V0KGFycmF5KTtcbiAgICBpZiAoc2V0KSB7XG4gICAgICByZXR1cm4gc2V0VG9BcnJheShzZXQpO1xuICAgIH1cbiAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICAgIGluY2x1ZGVzID0gY2FjaGVIYXM7XG4gICAgc2VlbiA9IG5ldyBTZXRDYWNoZTtcbiAgfVxuICBlbHNlIHtcbiAgICBzZWVuID0gaXRlcmF0ZWUgPyBbXSA6IHJlc3VsdDtcbiAgfVxuICBvdXRlcjpcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF0sXG4gICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUgPyBpdGVyYXRlZSh2YWx1ZSkgOiB2YWx1ZTtcblxuICAgIHZhbHVlID0gKGNvbXBhcmF0b3IgfHwgdmFsdWUgIT09IDApID8gdmFsdWUgOiAwO1xuICAgIGlmIChpc0NvbW1vbiAmJiBjb21wdXRlZCA9PT0gY29tcHV0ZWQpIHtcbiAgICAgIHZhciBzZWVuSW5kZXggPSBzZWVuLmxlbmd0aDtcbiAgICAgIHdoaWxlIChzZWVuSW5kZXgtLSkge1xuICAgICAgICBpZiAoc2VlbltzZWVuSW5kZXhdID09PSBjb21wdXRlZCkge1xuICAgICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaXRlcmF0ZWUpIHtcbiAgICAgICAgc2Vlbi5wdXNoKGNvbXB1dGVkKTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIWluY2x1ZGVzKHNlZW4sIGNvbXB1dGVkLCBjb21wYXJhdG9yKSkge1xuICAgICAgaWYgKHNlZW4gIT09IHJlc3VsdCkge1xuICAgICAgICBzZWVuLnB1c2goY29tcHV0ZWQpO1xuICAgICAgfVxuICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VVbmlxO1xuIiwKICAgICJ2YXIgYmFzZUZsYXR0ZW4gPSByZXF1aXJlKCcuL19iYXNlRmxhdHRlbicpLFxuICAgIGJhc2VSZXN0ID0gcmVxdWlyZSgnLi9fYmFzZVJlc3QnKSxcbiAgICBiYXNlVW5pcSA9IHJlcXVpcmUoJy4vX2Jhc2VVbmlxJyksXG4gICAgaXNBcnJheUxpa2VPYmplY3QgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlT2JqZWN0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB1bmlxdWUgdmFsdWVzLCBpbiBvcmRlciwgZnJvbSBhbGwgZ2l2ZW4gYXJyYXlzIHVzaW5nXG4gKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHsuLi5BcnJheX0gW2FycmF5c10gVGhlIGFycmF5cyB0byBpbnNwZWN0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgY29tYmluZWQgdmFsdWVzLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnVuaW9uKFsyXSwgWzEsIDJdKTtcbiAqIC8vID0+IFsyLCAxXVxuICovXG52YXIgdW5pb24gPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheXMpIHtcbiAgcmV0dXJuIGJhc2VVbmlxKGJhc2VGbGF0dGVuKGFycmF5cywgMSwgaXNBcnJheUxpa2VPYmplY3QsIHRydWUpKTtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVuaW9uO1xuIiwKICAgICIvKipcbiAqIENyZWF0ZXMgYSB1bmFyeSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggaXRzIGFyZ3VtZW50IHRyYW5zZm9ybWVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNmb3JtIFRoZSBhcmd1bWVudCB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlckFyZyhmdW5jLCB0cmFuc2Zvcm0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiBmdW5jKHRyYW5zZm9ybShhcmcpKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvdmVyQXJnO1xuIiwKICAgICJ2YXIgb3ZlckFyZyA9IHJlcXVpcmUoJy4vX292ZXJBcmcnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgZ2V0UHJvdG90eXBlID0gb3ZlckFyZyhPYmplY3QuZ2V0UHJvdG90eXBlT2YsIE9iamVjdCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0UHJvdG90eXBlO1xuIiwKICAgICJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBnZXRQcm90b3R5cGUgPSByZXF1aXJlKCcuL19nZXRQcm90b3R5cGUnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XSc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGUsXG4gICAgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKiogVXNlZCB0byBpbmZlciB0aGUgYE9iamVjdGAgY29uc3RydWN0b3IuICovXG52YXIgb2JqZWN0Q3RvclN0cmluZyA9IGZ1bmNUb1N0cmluZy5jYWxsKE9iamVjdCk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIHRoYXQgaXMsIGFuIG9iamVjdCBjcmVhdGVkIGJ5IHRoZVxuICogYE9iamVjdGAgY29uc3RydWN0b3Igb3Igb25lIHdpdGggYSBgW1tQcm90b3R5cGVdXWAgb2YgYG51bGxgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC44LjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcGxhaW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqIH1cbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QobmV3IEZvbyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoeyAneCc6IDAsICd5JzogMCB9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoT2JqZWN0LmNyZWF0ZShudWxsKSk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdExpa2UodmFsdWUpIHx8IGJhc2VHZXRUYWcodmFsdWUpICE9IG9iamVjdFRhZykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgcHJvdG8gPSBnZXRQcm90b3R5cGUodmFsdWUpO1xuICBpZiAocHJvdG8gPT09IG51bGwpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICB2YXIgQ3RvciA9IGhhc093blByb3BlcnR5LmNhbGwocHJvdG8sICdjb25zdHJ1Y3RvcicpICYmIHByb3RvLmNvbnN0cnVjdG9yO1xuICByZXR1cm4gdHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yIGluc3RhbmNlb2YgQ3RvciAmJlxuICAgIGZ1bmNUb1N0cmluZy5jYWxsKEN0b3IpID09IG9iamVjdEN0b3JTdHJpbmc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNQbGFpbk9iamVjdDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmFzc2VydFZhbGlkUGF0dGVybiA9IHZvaWQgMDtcbmNvbnN0IE1BWF9QQVRURVJOX0xFTkdUSCA9IDEwMjQgKiA2NDtcbmNvbnN0IGFzc2VydFZhbGlkUGF0dGVybiA9IChwYXR0ZXJuKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBwYXR0ZXJuICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnZhbGlkIHBhdHRlcm4nKTtcbiAgICB9XG4gICAgaWYgKHBhdHRlcm4ubGVuZ3RoID4gTUFYX1BBVFRFUk5fTEVOR1RIKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3BhdHRlcm4gaXMgdG9vIGxvbmcnKTtcbiAgICB9XG59O1xuZXhwb3J0cy5hc3NlcnRWYWxpZFBhdHRlcm4gPSBhc3NlcnRWYWxpZFBhdHRlcm47XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hc3NlcnQtdmFsaWQtcGF0dGVybi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gdHJhbnNsYXRlIHRoZSB2YXJpb3VzIHBvc2l4IGNoYXJhY3RlciBjbGFzc2VzIGludG8gdW5pY29kZSBwcm9wZXJ0aWVzXG4vLyB0aGlzIHdvcmtzIGFjcm9zcyBhbGwgdW5pY29kZSBsb2NhbGVzXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnBhcnNlQ2xhc3MgPSB2b2lkIDA7XG4vLyB7IDxwb3NpeCBjbGFzcz46IFs8dHJhbnNsYXRpb24+LCAvdSBmbGFnIHJlcXVpcmVkLCBuZWdhdGVkXVxuY29uc3QgcG9zaXhDbGFzc2VzID0ge1xuICAgICdbOmFsbnVtOl0nOiBbJ1xcXFxwe0x9XFxcXHB7Tmx9XFxcXHB7TmR9JywgdHJ1ZV0sXG4gICAgJ1s6YWxwaGE6XSc6IFsnXFxcXHB7TH1cXFxccHtObH0nLCB0cnVlXSxcbiAgICAnWzphc2NpaTpdJzogWydcXFxceCcgKyAnMDAtXFxcXHgnICsgJzdmJywgZmFsc2VdLFxuICAgICdbOmJsYW5rOl0nOiBbJ1xcXFxwe1pzfVxcXFx0JywgdHJ1ZV0sXG4gICAgJ1s6Y250cmw6XSc6IFsnXFxcXHB7Q2N9JywgdHJ1ZV0sXG4gICAgJ1s6ZGlnaXQ6XSc6IFsnXFxcXHB7TmR9JywgdHJ1ZV0sXG4gICAgJ1s6Z3JhcGg6XSc6IFsnXFxcXHB7Wn1cXFxccHtDfScsIHRydWUsIHRydWVdLFxuICAgICdbOmxvd2VyOl0nOiBbJ1xcXFxwe0xsfScsIHRydWVdLFxuICAgICdbOnByaW50Ol0nOiBbJ1xcXFxwe0N9JywgdHJ1ZV0sXG4gICAgJ1s6cHVuY3Q6XSc6IFsnXFxcXHB7UH0nLCB0cnVlXSxcbiAgICAnWzpzcGFjZTpdJzogWydcXFxccHtafVxcXFx0XFxcXHJcXFxcblxcXFx2XFxcXGYnLCB0cnVlXSxcbiAgICAnWzp1cHBlcjpdJzogWydcXFxccHtMdX0nLCB0cnVlXSxcbiAgICAnWzp3b3JkOl0nOiBbJ1xcXFxwe0x9XFxcXHB7Tmx9XFxcXHB7TmR9XFxcXHB7UGN9JywgdHJ1ZV0sXG4gICAgJ1s6eGRpZ2l0Ol0nOiBbJ0EtRmEtZjAtOScsIGZhbHNlXSxcbn07XG4vLyBvbmx5IG5lZWQgdG8gZXNjYXBlIGEgZmV3IHRoaW5ncyBpbnNpZGUgb2YgYnJhY2UgZXhwcmVzc2lvbnNcbi8vIGVzY2FwZXM6IFsgXFwgXSAtXG5jb25zdCBicmFjZUVzY2FwZSA9IChzKSA9PiBzLnJlcGxhY2UoL1tbXFxdXFxcXC1dL2csICdcXFxcJCYnKTtcbi8vIGVzY2FwZSBhbGwgcmVnZXhwIG1hZ2ljIGNoYXJhY3RlcnNcbmNvbnN0IHJlZ2V4cEVzY2FwZSA9IChzKSA9PiBzLnJlcGxhY2UoL1stW1xcXXt9KCkqKz8uLFxcXFxeJHwjXFxzXS9nLCAnXFxcXCQmJyk7XG4vLyBldmVyeXRoaW5nIGhhcyBhbHJlYWR5IGJlZW4gZXNjYXBlZCwgd2UganVzdCBoYXZlIHRvIGpvaW5cbmNvbnN0IHJhbmdlc1RvU3RyaW5nID0gKHJhbmdlcykgPT4gcmFuZ2VzLmpvaW4oJycpO1xuLy8gdGFrZXMgYSBnbG9iIHN0cmluZyBhdCBhIHBvc2l4IGJyYWNlIGV4cHJlc3Npb24sIGFuZCByZXR1cm5zXG4vLyBhbiBlcXVpdmFsZW50IHJlZ3VsYXIgZXhwcmVzc2lvbiBzb3VyY2UsIGFuZCBib29sZWFuIGluZGljYXRpbmdcbi8vIHdoZXRoZXIgdGhlIC91IGZsYWcgbmVlZHMgdG8gYmUgYXBwbGllZCwgYW5kIHRoZSBudW1iZXIgb2YgY2hhcnNcbi8vIGNvbnN1bWVkIHRvIHBhcnNlIHRoZSBjaGFyYWN0ZXIgY2xhc3MuXG4vLyBUaGlzIGFsc28gcmVtb3ZlcyBvdXQgb2Ygb3JkZXIgcmFuZ2VzLCBhbmQgcmV0dXJucyAoJC4pIGlmIHRoZVxuLy8gZW50aXJlIGNsYXNzIGp1c3Qgbm8gZ29vZC5cbmNvbnN0IHBhcnNlQ2xhc3MgPSAoZ2xvYiwgcG9zaXRpb24pID0+IHtcbiAgICBjb25zdCBwb3MgPSBwb3NpdGlvbjtcbiAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICBpZiAoZ2xvYi5jaGFyQXQocG9zKSAhPT0gJ1snKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignbm90IGluIGEgYnJhY2UgZXhwcmVzc2lvbicpO1xuICAgIH1cbiAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgIGNvbnN0IHJhbmdlcyA9IFtdO1xuICAgIGNvbnN0IG5lZ3MgPSBbXTtcbiAgICBsZXQgaSA9IHBvcyArIDE7XG4gICAgbGV0IHNhd1N0YXJ0ID0gZmFsc2U7XG4gICAgbGV0IHVmbGFnID0gZmFsc2U7XG4gICAgbGV0IGVzY2FwaW5nID0gZmFsc2U7XG4gICAgbGV0IG5lZ2F0ZSA9IGZhbHNlO1xuICAgIGxldCBlbmRQb3MgPSBwb3M7XG4gICAgbGV0IHJhbmdlU3RhcnQgPSAnJztcbiAgICBXSElMRTogd2hpbGUgKGkgPCBnbG9iLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBjID0gZ2xvYi5jaGFyQXQoaSk7XG4gICAgICAgIGlmICgoYyA9PT0gJyEnIHx8IGMgPT09ICdeJykgJiYgaSA9PT0gcG9zICsgMSkge1xuICAgICAgICAgICAgbmVnYXRlID0gdHJ1ZTtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjID09PSAnXScgJiYgc2F3U3RhcnQgJiYgIWVzY2FwaW5nKSB7XG4gICAgICAgICAgICBlbmRQb3MgPSBpICsgMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHNhd1N0YXJ0ID0gdHJ1ZTtcbiAgICAgICAgaWYgKGMgPT09ICdcXFxcJykge1xuICAgICAgICAgICAgaWYgKCFlc2NhcGluZykge1xuICAgICAgICAgICAgICAgIGVzY2FwaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBlc2NhcGVkIFxcIGNoYXIsIGZhbGwgdGhyb3VnaCBhbmQgdHJlYXQgbGlrZSBub3JtYWwgY2hhclxuICAgICAgICB9XG4gICAgICAgIGlmIChjID09PSAnWycgJiYgIWVzY2FwaW5nKSB7XG4gICAgICAgICAgICAvLyBlaXRoZXIgYSBwb3NpeCBjbGFzcywgYSBjb2xsYXRpb24gZXF1aXZhbGVudCwgb3IganVzdCBhIFtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2NscywgW3VuaXAsIHUsIG5lZ11dIG9mIE9iamVjdC5lbnRyaWVzKHBvc2l4Q2xhc3NlcykpIHtcbiAgICAgICAgICAgICAgICBpZiAoZ2xvYi5zdGFydHNXaXRoKGNscywgaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaW52YWxpZCwgW2EtW10gaXMgZmluZSwgYnV0IG5vdCBbYS1bOmFscGhhXV1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHJhbmdlU3RhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbJyQuJywgZmFsc2UsIGdsb2IubGVuZ3RoIC0gcG9zLCB0cnVlXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpICs9IGNscy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZWcpXG4gICAgICAgICAgICAgICAgICAgICAgICBuZWdzLnB1c2godW5pcCk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlcy5wdXNoKHVuaXApO1xuICAgICAgICAgICAgICAgICAgICB1ZmxhZyA9IHVmbGFnIHx8IHU7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIFdISUxFO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBub3cgaXQncyBqdXN0IGEgbm9ybWFsIGNoYXJhY3RlciwgZWZmZWN0aXZlbHlcbiAgICAgICAgZXNjYXBpbmcgPSBmYWxzZTtcbiAgICAgICAgaWYgKHJhbmdlU3RhcnQpIHtcbiAgICAgICAgICAgIC8vIHRocm93IHRoaXMgcmFuZ2UgYXdheSBpZiBpdCdzIG5vdCB2YWxpZCwgYnV0IG90aGVyc1xuICAgICAgICAgICAgLy8gY2FuIHN0aWxsIG1hdGNoLlxuICAgICAgICAgICAgaWYgKGMgPiByYW5nZVN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgcmFuZ2VzLnB1c2goYnJhY2VFc2NhcGUocmFuZ2VTdGFydCkgKyAnLScgKyBicmFjZUVzY2FwZShjKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjID09PSByYW5nZVN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgcmFuZ2VzLnB1c2goYnJhY2VFc2NhcGUoYykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmFuZ2VTdGFydCA9ICcnO1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbm93IG1pZ2h0IGJlIHRoZSBzdGFydCBvZiBhIHJhbmdlLlxuICAgICAgICAvLyBjYW4gYmUgZWl0aGVyIGMtZCBvciBjLV0gb3IgYzxtb3JlLi4uPl0gb3IgY10gYXQgdGhpcyBwb2ludFxuICAgICAgICBpZiAoZ2xvYi5zdGFydHNXaXRoKCctXScsIGkgKyAxKSkge1xuICAgICAgICAgICAgcmFuZ2VzLnB1c2goYnJhY2VFc2NhcGUoYyArICctJykpO1xuICAgICAgICAgICAgaSArPSAyO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGdsb2Iuc3RhcnRzV2l0aCgnLScsIGkgKyAxKSkge1xuICAgICAgICAgICAgcmFuZ2VTdGFydCA9IGM7XG4gICAgICAgICAgICBpICs9IDI7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBub3QgdGhlIHN0YXJ0IG9mIGEgcmFuZ2UsIGp1c3QgYSBzaW5nbGUgY2hhcmFjdGVyXG4gICAgICAgIHJhbmdlcy5wdXNoKGJyYWNlRXNjYXBlKGMpKTtcbiAgICAgICAgaSsrO1xuICAgIH1cbiAgICBpZiAoZW5kUG9zIDwgaSkge1xuICAgICAgICAvLyBkaWRuJ3Qgc2VlIHRoZSBlbmQgb2YgdGhlIGNsYXNzLCBub3QgYSB2YWxpZCBjbGFzcyxcbiAgICAgICAgLy8gYnV0IG1pZ2h0IHN0aWxsIGJlIHZhbGlkIGFzIGEgbGl0ZXJhbCBtYXRjaC5cbiAgICAgICAgcmV0dXJuIFsnJywgZmFsc2UsIDAsIGZhbHNlXTtcbiAgICB9XG4gICAgLy8gaWYgd2UgZ290IG5vIHJhbmdlcyBhbmQgbm8gbmVnYXRlcywgdGhlbiB3ZSBoYXZlIGEgcmFuZ2UgdGhhdFxuICAgIC8vIGNhbm5vdCBwb3NzaWJseSBtYXRjaCBhbnl0aGluZywgYW5kIHRoYXQgcG9pc29ucyB0aGUgd2hvbGUgZ2xvYlxuICAgIGlmICghcmFuZ2VzLmxlbmd0aCAmJiAhbmVncy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIFsnJC4nLCBmYWxzZSwgZ2xvYi5sZW5ndGggLSBwb3MsIHRydWVdO1xuICAgIH1cbiAgICAvLyBpZiB3ZSBnb3Qgb25lIHBvc2l0aXZlIHJhbmdlLCBhbmQgaXQncyBhIHNpbmdsZSBjaGFyYWN0ZXIsIHRoZW4gdGhhdCdzXG4gICAgLy8gbm90IGFjdHVhbGx5IGEgbWFnaWMgcGF0dGVybiwgaXQncyBqdXN0IHRoYXQgb25lIGxpdGVyYWwgY2hhcmFjdGVyLlxuICAgIC8vIHdlIHNob3VsZCBub3QgdHJlYXQgdGhhdCBhcyBcIm1hZ2ljXCIsIHdlIHNob3VsZCBqdXN0IHJldHVybiB0aGUgbGl0ZXJhbFxuICAgIC8vIGNoYXJhY3Rlci4gW19dIGlzIGEgcGVyZmVjdGx5IHZhbGlkIHdheSB0byBlc2NhcGUgZ2xvYiBtYWdpYyBjaGFycy5cbiAgICBpZiAobmVncy5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgcmFuZ2VzLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICAvXlxcXFw/LiQvLnRlc3QocmFuZ2VzWzBdKSAmJlxuICAgICAgICAhbmVnYXRlKSB7XG4gICAgICAgIGNvbnN0IHIgPSByYW5nZXNbMF0ubGVuZ3RoID09PSAyID8gcmFuZ2VzWzBdLnNsaWNlKC0xKSA6IHJhbmdlc1swXTtcbiAgICAgICAgcmV0dXJuIFtyZWdleHBFc2NhcGUociksIGZhbHNlLCBlbmRQb3MgLSBwb3MsIGZhbHNlXTtcbiAgICB9XG4gICAgY29uc3Qgc3JhbmdlcyA9ICdbJyArIChuZWdhdGUgPyAnXicgOiAnJykgKyByYW5nZXNUb1N0cmluZyhyYW5nZXMpICsgJ10nO1xuICAgIGNvbnN0IHNuZWdzID0gJ1snICsgKG5lZ2F0ZSA/ICcnIDogJ14nKSArIHJhbmdlc1RvU3RyaW5nKG5lZ3MpICsgJ10nO1xuICAgIGNvbnN0IGNvbWIgPSByYW5nZXMubGVuZ3RoICYmIG5lZ3MubGVuZ3RoXG4gICAgICAgID8gJygnICsgc3JhbmdlcyArICd8JyArIHNuZWdzICsgJyknXG4gICAgICAgIDogcmFuZ2VzLmxlbmd0aFxuICAgICAgICAgICAgPyBzcmFuZ2VzXG4gICAgICAgICAgICA6IHNuZWdzO1xuICAgIHJldHVybiBbY29tYiwgdWZsYWcsIGVuZFBvcyAtIHBvcywgdHJ1ZV07XG59O1xuZXhwb3J0cy5wYXJzZUNsYXNzID0gcGFyc2VDbGFzcztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJyYWNlLWV4cHJlc3Npb25zLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnVuZXNjYXBlID0gdm9pZCAwO1xuLyoqXG4gKiBVbi1lc2NhcGUgYSBzdHJpbmcgdGhhdCBoYXMgYmVlbiBlc2NhcGVkIHdpdGgge0BsaW5rIGVzY2FwZX0uXG4gKlxuICogSWYgdGhlIHtAbGluayB3aW5kb3dzUGF0aHNOb0VzY2FwZX0gb3B0aW9uIGlzIHVzZWQsIHRoZW4gc3F1YXJlLWJyYWNlXG4gKiBlc2NhcGVzIGFyZSByZW1vdmVkLCBidXQgbm90IGJhY2tzbGFzaCBlc2NhcGVzLiAgRm9yIGV4YW1wbGUsIGl0IHdpbGwgdHVyblxuICogdGhlIHN0cmluZyBgJ1sqXSdgIGludG8gYCpgLCBidXQgaXQgd2lsbCBub3QgdHVybiBgJ1xcXFwqJ2AgaW50byBgJyonYCxcbiAqIGJlY3Vhc2UgYFxcYCBpcyBhIHBhdGggc2VwYXJhdG9yIGluIGB3aW5kb3dzUGF0aHNOb0VzY2FwZWAgbW9kZS5cbiAqXG4gKiBXaGVuIGB3aW5kb3dzUGF0aHNOb0VzY2FwZWAgaXMgbm90IHNldCwgdGhlbiBib3RoIGJyYWNlIGVzY2FwZXMgYW5kXG4gKiBiYWNrc2xhc2ggZXNjYXBlcyBhcmUgcmVtb3ZlZC5cbiAqXG4gKiBTbGFzaGVzIChhbmQgYmFja3NsYXNoZXMgaW4gYHdpbmRvd3NQYXRoc05vRXNjYXBlYCBtb2RlKSBjYW5ub3QgYmUgZXNjYXBlZFxuICogb3IgdW5lc2NhcGVkLlxuICovXG5jb25zdCB1bmVzY2FwZSA9IChzLCB7IHdpbmRvd3NQYXRoc05vRXNjYXBlID0gZmFsc2UsIH0gPSB7fSkgPT4ge1xuICAgIHJldHVybiB3aW5kb3dzUGF0aHNOb0VzY2FwZVxuICAgICAgICA/IHMucmVwbGFjZSgvXFxbKFteXFwvXFxcXF0pXFxdL2csICckMScpXG4gICAgICAgIDogcy5yZXBsYWNlKC8oKD8hXFxcXCkufF4pXFxbKFteXFwvXFxcXF0pXFxdL2csICckMSQyJykucmVwbGFjZSgvXFxcXChbXlxcL10pL2csICckMScpO1xufTtcbmV4cG9ydHMudW5lc2NhcGUgPSB1bmVzY2FwZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVuZXNjYXBlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBwYXJzZSBhIHNpbmdsZSBwYXRoIHBvcnRpb25cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQVNUID0gdm9pZCAwO1xuY29uc3QgYnJhY2VfZXhwcmVzc2lvbnNfanNfMSA9IHJlcXVpcmUoXCIuL2JyYWNlLWV4cHJlc3Npb25zLmpzXCIpO1xuY29uc3QgdW5lc2NhcGVfanNfMSA9IHJlcXVpcmUoXCIuL3VuZXNjYXBlLmpzXCIpO1xuY29uc3QgdHlwZXMgPSBuZXcgU2V0KFsnIScsICc/JywgJysnLCAnKicsICdAJ10pO1xuY29uc3QgaXNFeHRnbG9iVHlwZSA9IChjKSA9PiB0eXBlcy5oYXMoYyk7XG4vLyBQYXR0ZXJucyB0aGF0IGdldCBwcmVwZW5kZWQgdG8gYmluZCB0byB0aGUgc3RhcnQgb2YgZWl0aGVyIHRoZVxuLy8gZW50aXJlIHN0cmluZywgb3IganVzdCBhIHNpbmdsZSBwYXRoIHBvcnRpb24sIHRvIHByZXZlbnQgZG90c1xuLy8gYW5kL29yIHRyYXZlcnNhbCBwYXR0ZXJucywgd2hlbiBuZWVkZWQuXG4vLyBFeHRzIGRvbid0IG5lZWQgdGhlIF4gb3IgLyBiaXQsIGJlY2F1c2UgdGhlIHJvb3QgYmluZHMgdGhhdCBhbHJlYWR5LlxuY29uc3Qgc3RhcnROb1RyYXZlcnNhbCA9ICcoPyEoPzpefC8pXFxcXC5cXFxcLj8oPzokfC8pKSc7XG5jb25zdCBzdGFydE5vRG90ID0gJyg/IVxcXFwuKSc7XG4vLyBjaGFyYWN0ZXJzIHRoYXQgaW5kaWNhdGUgYSBzdGFydCBvZiBwYXR0ZXJuIG5lZWRzIHRoZSBcIm5vIGRvdHNcIiBiaXQsXG4vLyBiZWNhdXNlIGEgZG90ICptaWdodCogYmUgbWF0Y2hlZC4gKCBpcyBub3QgaW4gdGhlIGxpc3QsIGJlY2F1c2UgaW5cbi8vIHRoZSBjYXNlIG9mIGEgY2hpbGQgZXh0Z2xvYiwgaXQgd2lsbCBoYW5kbGUgdGhlIHByZXZlbnRpb24gaXRzZWxmLlxuY29uc3QgYWRkUGF0dGVyblN0YXJ0ID0gbmV3IFNldChbJ1snLCAnLiddKTtcbi8vIGNhc2VzIHdoZXJlIHRyYXZlcnNhbCBpcyBBLU9LLCBubyBkb3QgcHJldmVudGlvbiBuZWVkZWRcbmNvbnN0IGp1c3REb3RzID0gbmV3IFNldChbJy4uJywgJy4nXSk7XG5jb25zdCByZVNwZWNpYWxzID0gbmV3IFNldCgnKCkuKnt9Kz9bXV4kXFxcXCEnKTtcbmNvbnN0IHJlZ0V4cEVzY2FwZSA9IChzKSA9PiBzLnJlcGxhY2UoL1stW1xcXXt9KCkqKz8uLFxcXFxeJHwjXFxzXS9nLCAnXFxcXCQmJyk7XG4vLyBhbnkgc2luZ2xlIHRoaW5nIG90aGVyIHRoYW4gL1xuY29uc3QgcW1hcmsgPSAnW14vXSc7XG4vLyAqID0+IGFueSBudW1iZXIgb2YgY2hhcmFjdGVyc1xuY29uc3Qgc3RhciA9IHFtYXJrICsgJyo/Jztcbi8vIHVzZSArIHdoZW4gd2UgbmVlZCB0byBlbnN1cmUgdGhhdCAqc29tZXRoaW5nKiBtYXRjaGVzLCBiZWNhdXNlIHRoZSAqIGlzXG4vLyB0aGUgb25seSB0aGluZyBpbiB0aGUgcGF0aCBwb3J0aW9uLlxuY29uc3Qgc3Rhck5vRW1wdHkgPSBxbWFyayArICcrPyc7XG4vLyByZW1vdmUgdGhlIFxcIGNoYXJzIHRoYXQgd2UgYWRkZWQgaWYgd2UgZW5kIHVwIGRvaW5nIGEgbm9ubWFnaWMgY29tcGFyZVxuLy8gY29uc3QgZGVzbGFzaCA9IChzOiBzdHJpbmcpID0+IHMucmVwbGFjZSgvXFxcXCguKS9nLCAnJDEnKVxuY2xhc3MgQVNUIHtcbiAgICB0eXBlO1xuICAgICNyb290O1xuICAgICNoYXNNYWdpYztcbiAgICAjdWZsYWcgPSBmYWxzZTtcbiAgICAjcGFydHMgPSBbXTtcbiAgICAjcGFyZW50O1xuICAgICNwYXJlbnRJbmRleDtcbiAgICAjbmVncztcbiAgICAjZmlsbGVkTmVncyA9IGZhbHNlO1xuICAgICNvcHRpb25zO1xuICAgICN0b1N0cmluZztcbiAgICAvLyBzZXQgdG8gdHJ1ZSBpZiBpdCdzIGFuIGV4dGdsb2Igd2l0aCBubyBjaGlsZHJlblxuICAgIC8vICh3aGljaCByZWFsbHkgbWVhbnMgb25lIGNoaWxkIG9mICcnKVxuICAgICNlbXB0eUV4dCA9IGZhbHNlO1xuICAgIGNvbnN0cnVjdG9yKHR5cGUsIHBhcmVudCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgIC8vIGV4dGdsb2JzIGFyZSBpbmhlcmVudGx5IG1hZ2ljYWxcbiAgICAgICAgaWYgKHR5cGUpXG4gICAgICAgICAgICB0aGlzLiNoYXNNYWdpYyA9IHRydWU7XG4gICAgICAgIHRoaXMuI3BhcmVudCA9IHBhcmVudDtcbiAgICAgICAgdGhpcy4jcm9vdCA9IHRoaXMuI3BhcmVudCA/IHRoaXMuI3BhcmVudC4jcm9vdCA6IHRoaXM7XG4gICAgICAgIHRoaXMuI29wdGlvbnMgPSB0aGlzLiNyb290ID09PSB0aGlzID8gb3B0aW9ucyA6IHRoaXMuI3Jvb3QuI29wdGlvbnM7XG4gICAgICAgIHRoaXMuI25lZ3MgPSB0aGlzLiNyb290ID09PSB0aGlzID8gW10gOiB0aGlzLiNyb290LiNuZWdzO1xuICAgICAgICBpZiAodHlwZSA9PT0gJyEnICYmICF0aGlzLiNyb290LiNmaWxsZWROZWdzKVxuICAgICAgICAgICAgdGhpcy4jbmVncy5wdXNoKHRoaXMpO1xuICAgICAgICB0aGlzLiNwYXJlbnRJbmRleCA9IHRoaXMuI3BhcmVudCA/IHRoaXMuI3BhcmVudC4jcGFydHMubGVuZ3RoIDogMDtcbiAgICB9XG4gICAgZ2V0IGhhc01hZ2ljKCkge1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgaWYgKHRoaXMuI2hhc01hZ2ljICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy4jaGFzTWFnaWM7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIGZvciAoY29uc3QgcCBvZiB0aGlzLiNwYXJ0cykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBwID09PSAnc3RyaW5nJylcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGlmIChwLnR5cGUgfHwgcC5oYXNNYWdpYylcbiAgICAgICAgICAgICAgICByZXR1cm4gKHRoaXMuI2hhc01hZ2ljID0gdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbm90ZTogd2lsbCBiZSB1bmRlZmluZWQgdW50aWwgd2UgZ2VuZXJhdGUgdGhlIHJlZ2V4cCBzcmMgYW5kIGZpbmQgb3V0XG4gICAgICAgIHJldHVybiB0aGlzLiNoYXNNYWdpYztcbiAgICB9XG4gICAgLy8gcmVjb25zdHJ1Y3RzIHRoZSBwYXR0ZXJuXG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIGlmICh0aGlzLiN0b1N0cmluZyAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuI3RvU3RyaW5nO1xuICAgICAgICBpZiAoIXRoaXMudHlwZSkge1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLiN0b1N0cmluZyA9IHRoaXMuI3BhcnRzLm1hcChwID0+IFN0cmluZyhwKSkuam9pbignJykpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLiN0b1N0cmluZyA9XG4gICAgICAgICAgICAgICAgdGhpcy50eXBlICsgJygnICsgdGhpcy4jcGFydHMubWFwKHAgPT4gU3RyaW5nKHApKS5qb2luKCd8JykgKyAnKScpO1xuICAgICAgICB9XG4gICAgfVxuICAgICNmaWxsTmVncygpIHtcbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIGlmICh0aGlzICE9PSB0aGlzLiNyb290KVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzaG91bGQgb25seSBjYWxsIG9uIHJvb3QnKTtcbiAgICAgICAgaWYgKHRoaXMuI2ZpbGxlZE5lZ3MpXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgLy8gY2FsbCB0b1N0cmluZygpIG9uY2UgdG8gZmlsbCB0aGlzIG91dFxuICAgICAgICB0aGlzLnRvU3RyaW5nKCk7XG4gICAgICAgIHRoaXMuI2ZpbGxlZE5lZ3MgPSB0cnVlO1xuICAgICAgICBsZXQgbjtcbiAgICAgICAgd2hpbGUgKChuID0gdGhpcy4jbmVncy5wb3AoKSkpIHtcbiAgICAgICAgICAgIGlmIChuLnR5cGUgIT09ICchJylcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIC8vIHdhbGsgdXAgdGhlIHRyZWUsIGFwcGVuZGluZyBldmVydGhpbmcgdGhhdCBjb21lcyBBRlRFUiBwYXJlbnRJbmRleFxuICAgICAgICAgICAgbGV0IHAgPSBuO1xuICAgICAgICAgICAgbGV0IHBwID0gcC4jcGFyZW50O1xuICAgICAgICAgICAgd2hpbGUgKHBwKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IHAuI3BhcmVudEluZGV4ICsgMTsgIXBwLnR5cGUgJiYgaSA8IHBwLiNwYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHBhcnQgb2Ygbi4jcGFydHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwYXJ0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc3RyaW5nIHBhcnQgaW4gZXh0Z2xvYiBBU1Q/PycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnQuY29weUluKHBwLiNwYXJ0c1tpXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcCA9IHBwO1xuICAgICAgICAgICAgICAgIHBwID0gcC4jcGFyZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBwdXNoKC4uLnBhcnRzKSB7XG4gICAgICAgIGZvciAoY29uc3QgcCBvZiBwYXJ0cykge1xuICAgICAgICAgICAgaWYgKHAgPT09ICcnKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICBpZiAodHlwZW9mIHAgIT09ICdzdHJpbmcnICYmICEocCBpbnN0YW5jZW9mIEFTVCAmJiBwLiNwYXJlbnQgPT09IHRoaXMpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHBhcnQ6ICcgKyBwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICB0aGlzLiNwYXJ0cy5wdXNoKHApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRvSlNPTigpIHtcbiAgICAgICAgY29uc3QgcmV0ID0gdGhpcy50eXBlID09PSBudWxsXG4gICAgICAgICAgICA/IHRoaXMuI3BhcnRzLnNsaWNlKCkubWFwKHAgPT4gKHR5cGVvZiBwID09PSAnc3RyaW5nJyA/IHAgOiBwLnRvSlNPTigpKSlcbiAgICAgICAgICAgIDogW3RoaXMudHlwZSwgLi4udGhpcy4jcGFydHMubWFwKHAgPT4gcC50b0pTT04oKSldO1xuICAgICAgICBpZiAodGhpcy5pc1N0YXJ0KCkgJiYgIXRoaXMudHlwZSlcbiAgICAgICAgICAgIHJldC51bnNoaWZ0KFtdKTtcbiAgICAgICAgaWYgKHRoaXMuaXNFbmQoKSAmJlxuICAgICAgICAgICAgKHRoaXMgPT09IHRoaXMuI3Jvb3QgfHxcbiAgICAgICAgICAgICAgICAodGhpcy4jcm9vdC4jZmlsbGVkTmVncyAmJiB0aGlzLiNwYXJlbnQ/LnR5cGUgPT09ICchJykpKSB7XG4gICAgICAgICAgICByZXQucHVzaCh7fSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gICAgaXNTdGFydCgpIHtcbiAgICAgICAgaWYgKHRoaXMuI3Jvb3QgPT09IHRoaXMpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgLy8gaWYgKHRoaXMudHlwZSkgcmV0dXJuICEhdGhpcy4jcGFyZW50Py5pc1N0YXJ0KClcbiAgICAgICAgaWYgKCF0aGlzLiNwYXJlbnQ/LmlzU3RhcnQoKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuI3BhcmVudEluZGV4ID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIC8vIGlmIGV2ZXJ5dGhpbmcgQUhFQUQgb2YgdGhpcyBpcyBhIG5lZ2F0aW9uLCB0aGVuIGl0J3Mgc3RpbGwgdGhlIFwic3RhcnRcIlxuICAgICAgICBjb25zdCBwID0gdGhpcy4jcGFyZW50O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuI3BhcmVudEluZGV4OyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHBwID0gcC4jcGFydHNbaV07XG4gICAgICAgICAgICBpZiAoIShwcCBpbnN0YW5jZW9mIEFTVCAmJiBwcC50eXBlID09PSAnIScpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpc0VuZCgpIHtcbiAgICAgICAgaWYgKHRoaXMuI3Jvb3QgPT09IHRoaXMpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMuI3BhcmVudD8udHlwZSA9PT0gJyEnKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmICghdGhpcy4jcGFyZW50Py5pc0VuZCgpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoIXRoaXMudHlwZSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiNwYXJlbnQ/LmlzRW5kKCk7XG4gICAgICAgIC8vIGlmIG5vdCByb290LCBpdCdsbCBhbHdheXMgaGF2ZSBhIHBhcmVudFxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgY29uc3QgcGwgPSB0aGlzLiNwYXJlbnQgPyB0aGlzLiNwYXJlbnQuI3BhcnRzLmxlbmd0aCA6IDA7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIHJldHVybiB0aGlzLiNwYXJlbnRJbmRleCA9PT0gcGwgLSAxO1xuICAgIH1cbiAgICBjb3B5SW4ocGFydCkge1xuICAgICAgICBpZiAodHlwZW9mIHBhcnQgPT09ICdzdHJpbmcnKVxuICAgICAgICAgICAgdGhpcy5wdXNoKHBhcnQpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzLnB1c2gocGFydC5jbG9uZSh0aGlzKSk7XG4gICAgfVxuICAgIGNsb25lKHBhcmVudCkge1xuICAgICAgICBjb25zdCBjID0gbmV3IEFTVCh0aGlzLnR5cGUsIHBhcmVudCk7XG4gICAgICAgIGZvciAoY29uc3QgcCBvZiB0aGlzLiNwYXJ0cykge1xuICAgICAgICAgICAgYy5jb3B5SW4ocCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGM7XG4gICAgfVxuICAgIHN0YXRpYyAjcGFyc2VBU1Qoc3RyLCBhc3QsIHBvcywgb3B0KSB7XG4gICAgICAgIGxldCBlc2NhcGluZyA9IGZhbHNlO1xuICAgICAgICBsZXQgaW5CcmFjZSA9IGZhbHNlO1xuICAgICAgICBsZXQgYnJhY2VTdGFydCA9IC0xO1xuICAgICAgICBsZXQgYnJhY2VOZWcgPSBmYWxzZTtcbiAgICAgICAgaWYgKGFzdC50eXBlID09PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBvdXRzaWRlIG9mIGEgZXh0Z2xvYiwgYXBwZW5kIHVudGlsIHdlIGZpbmQgYSBzdGFydFxuICAgICAgICAgICAgbGV0IGkgPSBwb3M7XG4gICAgICAgICAgICBsZXQgYWNjID0gJyc7XG4gICAgICAgICAgICB3aGlsZSAoaSA8IHN0ci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjID0gc3RyLmNoYXJBdChpKyspO1xuICAgICAgICAgICAgICAgIC8vIHN0aWxsIGFjY3VtdWxhdGUgZXNjYXBlcyBhdCB0aGlzIHBvaW50LCBidXQgd2UgZG8gaWdub3JlXG4gICAgICAgICAgICAgICAgLy8gc3RhcnRzIHRoYXQgYXJlIGVzY2FwZWRcbiAgICAgICAgICAgICAgICBpZiAoZXNjYXBpbmcgfHwgYyA9PT0gJ1xcXFwnKSB7XG4gICAgICAgICAgICAgICAgICAgIGVzY2FwaW5nID0gIWVzY2FwaW5nO1xuICAgICAgICAgICAgICAgICAgICBhY2MgKz0gYztcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpbkJyYWNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpID09PSBicmFjZVN0YXJ0ICsgMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT09ICdeJyB8fCBjID09PSAnIScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmFjZU5lZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYyA9PT0gJ10nICYmICEoaSA9PT0gYnJhY2VTdGFydCArIDIgJiYgYnJhY2VOZWcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbkJyYWNlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYWNjICs9IGM7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjID09PSAnWycpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5CcmFjZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyYWNlU3RhcnQgPSBpO1xuICAgICAgICAgICAgICAgICAgICBicmFjZU5lZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBhY2MgKz0gYztcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghb3B0Lm5vZXh0ICYmIGlzRXh0Z2xvYlR5cGUoYykgJiYgc3RyLmNoYXJBdChpKSA9PT0gJygnKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzdC5wdXNoKGFjYyk7XG4gICAgICAgICAgICAgICAgICAgIGFjYyA9ICcnO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBleHQgPSBuZXcgQVNUKGMsIGFzdCk7XG4gICAgICAgICAgICAgICAgICAgIGkgPSBBU1QuI3BhcnNlQVNUKHN0ciwgZXh0LCBpLCBvcHQpO1xuICAgICAgICAgICAgICAgICAgICBhc3QucHVzaChleHQpO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYWNjICs9IGM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhc3QucHVzaChhY2MpO1xuICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gc29tZSBraW5kIG9mIGV4dGdsb2IsIHBvcyBpcyBhdCB0aGUgKFxuICAgICAgICAvLyBmaW5kIHRoZSBuZXh0IHwgb3IgKVxuICAgICAgICBsZXQgaSA9IHBvcyArIDE7XG4gICAgICAgIGxldCBwYXJ0ID0gbmV3IEFTVChudWxsLCBhc3QpO1xuICAgICAgICBjb25zdCBwYXJ0cyA9IFtdO1xuICAgICAgICBsZXQgYWNjID0gJyc7XG4gICAgICAgIHdoaWxlIChpIDwgc3RyLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgYyA9IHN0ci5jaGFyQXQoaSsrKTtcbiAgICAgICAgICAgIC8vIHN0aWxsIGFjY3VtdWxhdGUgZXNjYXBlcyBhdCB0aGlzIHBvaW50LCBidXQgd2UgZG8gaWdub3JlXG4gICAgICAgICAgICAvLyBzdGFydHMgdGhhdCBhcmUgZXNjYXBlZFxuICAgICAgICAgICAgaWYgKGVzY2FwaW5nIHx8IGMgPT09ICdcXFxcJykge1xuICAgICAgICAgICAgICAgIGVzY2FwaW5nID0gIWVzY2FwaW5nO1xuICAgICAgICAgICAgICAgIGFjYyArPSBjO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGluQnJhY2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoaSA9PT0gYnJhY2VTdGFydCArIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT09ICdeJyB8fCBjID09PSAnIScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyYWNlTmVnID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjID09PSAnXScgJiYgIShpID09PSBicmFjZVN0YXJ0ICsgMiAmJiBicmFjZU5lZykpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5CcmFjZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhY2MgKz0gYztcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGMgPT09ICdbJykge1xuICAgICAgICAgICAgICAgIGluQnJhY2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyYWNlU3RhcnQgPSBpO1xuICAgICAgICAgICAgICAgIGJyYWNlTmVnID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgYWNjICs9IGM7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNFeHRnbG9iVHlwZShjKSAmJiBzdHIuY2hhckF0KGkpID09PSAnKCcpIHtcbiAgICAgICAgICAgICAgICBwYXJ0LnB1c2goYWNjKTtcbiAgICAgICAgICAgICAgICBhY2MgPSAnJztcbiAgICAgICAgICAgICAgICBjb25zdCBleHQgPSBuZXcgQVNUKGMsIHBhcnQpO1xuICAgICAgICAgICAgICAgIHBhcnQucHVzaChleHQpO1xuICAgICAgICAgICAgICAgIGkgPSBBU1QuI3BhcnNlQVNUKHN0ciwgZXh0LCBpLCBvcHQpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGMgPT09ICd8Jykge1xuICAgICAgICAgICAgICAgIHBhcnQucHVzaChhY2MpO1xuICAgICAgICAgICAgICAgIGFjYyA9ICcnO1xuICAgICAgICAgICAgICAgIHBhcnRzLnB1c2gocGFydCk7XG4gICAgICAgICAgICAgICAgcGFydCA9IG5ldyBBU1QobnVsbCwgYXN0KTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjID09PSAnKScpIHtcbiAgICAgICAgICAgICAgICBpZiAoYWNjID09PSAnJyAmJiBhc3QuI3BhcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBhc3QuI2VtcHR5RXh0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcGFydC5wdXNoKGFjYyk7XG4gICAgICAgICAgICAgICAgYWNjID0gJyc7XG4gICAgICAgICAgICAgICAgYXN0LnB1c2goLi4ucGFydHMsIHBhcnQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWNjICs9IGM7XG4gICAgICAgIH1cbiAgICAgICAgLy8gdW5maW5pc2hlZCBleHRnbG9iXG4gICAgICAgIC8vIGlmIHdlIGdvdCBoZXJlLCBpdCB3YXMgYSBtYWxmb3JtZWQgZXh0Z2xvYiEgbm90IGFuIGV4dGdsb2IsIGJ1dFxuICAgICAgICAvLyBtYXliZSBzb21ldGhpbmcgZWxzZSBpbiB0aGVyZS5cbiAgICAgICAgYXN0LnR5cGUgPSBudWxsO1xuICAgICAgICBhc3QuI2hhc01hZ2ljID0gdW5kZWZpbmVkO1xuICAgICAgICBhc3QuI3BhcnRzID0gW3N0ci5zdWJzdHJpbmcocG9zIC0gMSldO1xuICAgICAgICByZXR1cm4gaTtcbiAgICB9XG4gICAgc3RhdGljIGZyb21HbG9iKHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCBhc3QgPSBuZXcgQVNUKG51bGwsIHVuZGVmaW5lZCwgb3B0aW9ucyk7XG4gICAgICAgIEFTVC4jcGFyc2VBU1QocGF0dGVybiwgYXN0LCAwLCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIGFzdDtcbiAgICB9XG4gICAgLy8gcmV0dXJucyB0aGUgcmVndWxhciBleHByZXNzaW9uIGlmIHRoZXJlJ3MgbWFnaWMsIG9yIHRoZSB1bmVzY2FwZWRcbiAgICAvLyBzdHJpbmcgaWYgbm90LlxuICAgIHRvTU1QYXR0ZXJuKCkge1xuICAgICAgICAvLyBzaG91bGQgb25seSBiZSBjYWxsZWQgb24gcm9vdFxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgaWYgKHRoaXMgIT09IHRoaXMuI3Jvb3QpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy4jcm9vdC50b01NUGF0dGVybigpO1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICBjb25zdCBnbG9iID0gdGhpcy50b1N0cmluZygpO1xuICAgICAgICBjb25zdCBbcmUsIGJvZHksIGhhc01hZ2ljLCB1ZmxhZ10gPSB0aGlzLnRvUmVnRXhwU291cmNlKCk7XG4gICAgICAgIC8vIGlmIHdlJ3JlIGluIG5vY2FzZSBtb2RlLCBhbmQgbm90IG5vY2FzZU1hZ2ljT25seSwgdGhlbiB3ZSBkb1xuICAgICAgICAvLyBzdGlsbCBuZWVkIGEgcmVndWxhciBleHByZXNzaW9uIGlmIHdlIGhhdmUgdG8gY2FzZS1pbnNlbnNpdGl2ZWx5XG4gICAgICAgIC8vIG1hdGNoIGNhcGl0YWwvbG93ZXJjYXNlIGNoYXJhY3RlcnMuXG4gICAgICAgIGNvbnN0IGFueU1hZ2ljID0gaGFzTWFnaWMgfHxcbiAgICAgICAgICAgIHRoaXMuI2hhc01hZ2ljIHx8XG4gICAgICAgICAgICAodGhpcy4jb3B0aW9ucy5ub2Nhc2UgJiZcbiAgICAgICAgICAgICAgICAhdGhpcy4jb3B0aW9ucy5ub2Nhc2VNYWdpY09ubHkgJiZcbiAgICAgICAgICAgICAgICBnbG9iLnRvVXBwZXJDYXNlKCkgIT09IGdsb2IudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIGlmICghYW55TWFnaWMpIHtcbiAgICAgICAgICAgIHJldHVybiBib2R5O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZsYWdzID0gKHRoaXMuI29wdGlvbnMubm9jYXNlID8gJ2knIDogJycpICsgKHVmbGFnID8gJ3UnIDogJycpO1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgUmVnRXhwKGBeJHtyZX0kYCwgZmxhZ3MpLCB7XG4gICAgICAgICAgICBfc3JjOiByZSxcbiAgICAgICAgICAgIF9nbG9iOiBnbG9iLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNvcHRpb25zO1xuICAgIH1cbiAgICAvLyByZXR1cm5zIHRoZSBzdHJpbmcgbWF0Y2gsIHRoZSByZWdleHAgc291cmNlLCB3aGV0aGVyIHRoZXJlJ3MgbWFnaWNcbiAgICAvLyBpbiB0aGUgcmVnZXhwIChzbyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBpcyByZXF1aXJlZCkgYW5kIHdoZXRoZXIgb3JcbiAgICAvLyBub3QgdGhlIHVmbGFnIGlzIG5lZWRlZCBmb3IgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiAoZm9yIHBvc2l4IGNsYXNzZXMpXG4gICAgLy8gVE9ETzogaW5zdGVhZCBvZiBpbmplY3RpbmcgdGhlIHN0YXJ0L2VuZCBhdCB0aGlzIHBvaW50LCBqdXN0IHJldHVyblxuICAgIC8vIHRoZSBCT0RZIG9mIHRoZSByZWdleHAsIGFsb25nIHdpdGggdGhlIHN0YXJ0L2VuZCBwb3J0aW9ucyBzdWl0YWJsZVxuICAgIC8vIGZvciBiaW5kaW5nIHRoZSBzdGFydC9lbmQgaW4gZWl0aGVyIGEgam9pbmVkIGZ1bGwtcGF0aCBtYWtlUmUgY29udGV4dFxuICAgIC8vICh3aGVyZSB3ZSBiaW5kIHRvIChefC8pLCBvciBhIHN0YW5kYWxvbmUgbWF0Y2hQYXJ0IGNvbnRleHQgKHdoZXJlXG4gICAgLy8gd2UgYmluZCB0byBeLCBhbmQgbm90IC8pLiAgT3RoZXJ3aXNlIHNsYXNoZXMgZ2V0IGR1cGVkIVxuICAgIC8vXG4gICAgLy8gSW4gcGFydC1tYXRjaGluZyBtb2RlLCB0aGUgc3RhcnQgaXM6XG4gICAgLy8gLSBpZiBub3QgaXNTdGFydDogbm90aGluZ1xuICAgIC8vIC0gaWYgdHJhdmVyc2FsIHBvc3NpYmxlLCBidXQgbm90IGFsbG93ZWQ6IF4oPyFcXC5cXC4/JClcbiAgICAvLyAtIGlmIGRvdHMgYWxsb3dlZCBvciBub3QgcG9zc2libGU6IF5cbiAgICAvLyAtIGlmIGRvdHMgcG9zc2libGUgYW5kIG5vdCBhbGxvd2VkOiBeKD8hXFwuKVxuICAgIC8vIGVuZCBpczpcbiAgICAvLyAtIGlmIG5vdCBpc0VuZCgpOiBub3RoaW5nXG4gICAgLy8gLSBlbHNlOiAkXG4gICAgLy9cbiAgICAvLyBJbiBmdWxsLXBhdGggbWF0Y2hpbmcgbW9kZSwgd2UgcHV0IHRoZSBzbGFzaCBhdCB0aGUgU1RBUlQgb2YgdGhlXG4gICAgLy8gcGF0dGVybiwgc28gc3RhcnQgaXM6XG4gICAgLy8gLSBpZiBmaXJzdCBwYXR0ZXJuOiBzYW1lIGFzIHBhcnQtbWF0Y2hpbmcgbW9kZVxuICAgIC8vIC0gaWYgbm90IGlzU3RhcnQoKTogbm90aGluZ1xuICAgIC8vIC0gaWYgdHJhdmVyc2FsIHBvc3NpYmxlLCBidXQgbm90IGFsbG93ZWQ6IC8oPyFcXC5cXC4/KD86JHwvKSlcbiAgICAvLyAtIGlmIGRvdHMgYWxsb3dlZCBvciBub3QgcG9zc2libGU6IC9cbiAgICAvLyAtIGlmIGRvdHMgcG9zc2libGUgYW5kIG5vdCBhbGxvd2VkOiAvKD8hXFwuKVxuICAgIC8vIGVuZCBpczpcbiAgICAvLyAtIGlmIGxhc3QgcGF0dGVybiwgc2FtZSBhcyBwYXJ0LW1hdGNoaW5nIG1vZGVcbiAgICAvLyAtIGVsc2Ugbm90aGluZ1xuICAgIC8vXG4gICAgLy8gQWx3YXlzIHB1dCB0aGUgKD86JHwvKSBvbiBuZWdhdGVkIHRhaWxzLCB0aG91Z2gsIGJlY2F1c2UgdGhhdCBoYXMgdG8gYmVcbiAgICAvLyB0aGVyZSB0byBiaW5kIHRoZSBlbmQgb2YgdGhlIG5lZ2F0ZWQgcGF0dGVybiBwb3J0aW9uLCBhbmQgaXQncyBlYXNpZXIgdG9cbiAgICAvLyBqdXN0IHN0aWNrIGl0IGluIG5vdyByYXRoZXIgdGhhbiB0cnkgdG8gaW5qZWN0IGl0IGxhdGVyIGluIHRoZSBtaWRkbGUgb2ZcbiAgICAvLyB0aGUgcGF0dGVybi5cbiAgICAvL1xuICAgIC8vIFdlIGNhbiBqdXN0IGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgZW5kLCBhbmQgbGVhdmUgaXQgdXAgdG8gdGhlIGNhbGxlclxuICAgIC8vIHRvIGtub3cgd2hldGhlciBpdCdzIGdvaW5nIHRvIGJlIHVzZWQgam9pbmVkIG9yIGluIHBhcnRzLlxuICAgIC8vIEFuZCwgaWYgdGhlIHN0YXJ0IGlzIGFkanVzdGVkIHNsaWdodGx5LCBjYW4gZG8gdGhlIHNhbWUgdGhlcmU6XG4gICAgLy8gLSBpZiBub3QgaXNTdGFydDogbm90aGluZ1xuICAgIC8vIC0gaWYgdHJhdmVyc2FsIHBvc3NpYmxlLCBidXQgbm90IGFsbG93ZWQ6ICg/Oi98XikoPyFcXC5cXC4/JClcbiAgICAvLyAtIGlmIGRvdHMgYWxsb3dlZCBvciBub3QgcG9zc2libGU6ICg/Oi98XilcbiAgICAvLyAtIGlmIGRvdHMgcG9zc2libGUgYW5kIG5vdCBhbGxvd2VkOiAoPzovfF4pKD8hXFwuKVxuICAgIC8vXG4gICAgLy8gQnV0IGl0J3MgYmV0dGVyIHRvIGhhdmUgYSBzaW1wbGVyIGJpbmRpbmcgd2l0aG91dCBhIGNvbmRpdGlvbmFsLCBmb3JcbiAgICAvLyBwZXJmb3JtYW5jZSwgc28gcHJvYmFibHkgYmV0dGVyIHRvIHJldHVybiBib3RoIHN0YXJ0IG9wdGlvbnMuXG4gICAgLy9cbiAgICAvLyBUaGVuIHRoZSBjYWxsZXIganVzdCBpZ25vcmVzIHRoZSBlbmQgaWYgaXQncyBub3QgdGhlIGZpcnN0IHBhdHRlcm4sXG4gICAgLy8gYW5kIHRoZSBzdGFydCBhbHdheXMgZ2V0cyBhcHBsaWVkLlxuICAgIC8vXG4gICAgLy8gQnV0IHRoYXQncyBhbHdheXMgZ29pbmcgdG8gYmUgJCBpZiBpdCdzIHRoZSBlbmRpbmcgcGF0dGVybiwgb3Igbm90aGluZyxcbiAgICAvLyBzbyB0aGUgY2FsbGVyIGNhbiBqdXN0IGF0dGFjaCAkIGF0IHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4gd2hlbiBidWlsZGluZy5cbiAgICAvL1xuICAgIC8vIFNvIHRoZSB0b2RvIGlzOlxuICAgIC8vIC0gYmV0dGVyIGRldGVjdCB3aGF0IGtpbmQgb2Ygc3RhcnQgaXMgbmVlZGVkXG4gICAgLy8gLSByZXR1cm4gYm90aCBmbGF2b3JzIG9mIHN0YXJ0aW5nIHBhdHRlcm5cbiAgICAvLyAtIGF0dGFjaCAkIGF0IHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4gd2hlbiBjcmVhdGluZyB0aGUgYWN0dWFsIFJlZ0V4cFxuICAgIC8vXG4gICAgLy8gQWgsIGJ1dCB3YWl0LCBubywgdGhhdCBhbGwgb25seSBhcHBsaWVzIHRvIHRoZSByb290IHdoZW4gdGhlIGZpcnN0IHBhdHRlcm5cbiAgICAvLyBpcyBub3QgYW4gZXh0Z2xvYi4gSWYgdGhlIGZpcnN0IHBhdHRlcm4gSVMgYW4gZXh0Z2xvYiwgdGhlbiB3ZSBuZWVkIGFsbFxuICAgIC8vIHRoYXQgZG90IHByZXZlbnRpb24gYml6IHRvIGxpdmUgaW4gdGhlIGV4dGdsb2IgcG9ydGlvbnMsIGJlY2F1c2UgZWdcbiAgICAvLyArKCp8LngqKSBjYW4gbWF0Y2ggLnh5IGJ1dCBub3QgLnl4LlxuICAgIC8vXG4gICAgLy8gU28sIHJldHVybiB0aGUgdHdvIGZsYXZvcnMgaWYgaXQncyAjcm9vdCBhbmQgdGhlIGZpcnN0IGNoaWxkIGlzIG5vdCBhblxuICAgIC8vIEFTVCwgb3RoZXJ3aXNlIGxlYXZlIGl0IHRvIHRoZSBjaGlsZCBBU1QgdG8gaGFuZGxlIGl0LCBhbmQgdGhlcmUsXG4gICAgLy8gdXNlIHRoZSAoPzpefC8pIHN0eWxlIG9mIHN0YXJ0IGJpbmRpbmcuXG4gICAgLy9cbiAgICAvLyBFdmVuIHNpbXBsaWZpZWQgZnVydGhlcjpcbiAgICAvLyAtIFNpbmNlIHRoZSBzdGFydCBmb3IgYSBqb2luIGlzIGVnIC8oPyFcXC4pIGFuZCB0aGUgc3RhcnQgZm9yIGEgcGFydFxuICAgIC8vIGlzIF4oPyFcXC4pLCB3ZSBjYW4ganVzdCBwcmVwZW5kICg/IVxcLikgdG8gdGhlIHBhdHRlcm4gKGVpdGhlciByb290XG4gICAgLy8gb3Igc3RhcnQgb3Igd2hhdGV2ZXIpIGFuZCBwcmVwZW5kIF4gb3IgLyBhdCB0aGUgUmVnZXhwIGNvbnN0cnVjdGlvbi5cbiAgICB0b1JlZ0V4cFNvdXJjZShhbGxvd0RvdCkge1xuICAgICAgICBjb25zdCBkb3QgPSBhbGxvd0RvdCA/PyAhIXRoaXMuI29wdGlvbnMuZG90O1xuICAgICAgICBpZiAodGhpcy4jcm9vdCA9PT0gdGhpcylcbiAgICAgICAgICAgIHRoaXMuI2ZpbGxOZWdzKCk7XG4gICAgICAgIGlmICghdGhpcy50eXBlKSB7XG4gICAgICAgICAgICBjb25zdCBub0VtcHR5ID0gdGhpcy5pc1N0YXJ0KCkgJiYgdGhpcy5pc0VuZCgpO1xuICAgICAgICAgICAgY29uc3Qgc3JjID0gdGhpcy4jcGFydHNcbiAgICAgICAgICAgICAgICAubWFwKHAgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IFtyZSwgXywgaGFzTWFnaWMsIHVmbGFnXSA9IHR5cGVvZiBwID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgICA/IEFTVC4jcGFyc2VHbG9iKHAsIHRoaXMuI2hhc01hZ2ljLCBub0VtcHR5KVxuICAgICAgICAgICAgICAgICAgICA6IHAudG9SZWdFeHBTb3VyY2UoYWxsb3dEb3QpO1xuICAgICAgICAgICAgICAgIHRoaXMuI2hhc01hZ2ljID0gdGhpcy4jaGFzTWFnaWMgfHwgaGFzTWFnaWM7XG4gICAgICAgICAgICAgICAgdGhpcy4jdWZsYWcgPSB0aGlzLiN1ZmxhZyB8fCB1ZmxhZztcbiAgICAgICAgICAgICAgICByZXR1cm4gcmU7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5qb2luKCcnKTtcbiAgICAgICAgICAgIGxldCBzdGFydCA9ICcnO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNTdGFydCgpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLiNwYXJ0c1swXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBpcyB0aGUgc3RyaW5nIHRoYXQgd2lsbCBtYXRjaCB0aGUgc3RhcnQgb2YgdGhlIHBhdHRlcm4sXG4gICAgICAgICAgICAgICAgICAgIC8vIHNvIHdlIG5lZWQgdG8gcHJvdGVjdCBhZ2FpbnN0IGRvdHMgYW5kIHN1Y2guXG4gICAgICAgICAgICAgICAgICAgIC8vICcuJyBhbmQgJy4uJyBjYW5ub3QgbWF0Y2ggdW5sZXNzIHRoZSBwYXR0ZXJuIGlzIHRoYXQgZXhhY3RseSxcbiAgICAgICAgICAgICAgICAgICAgLy8gZXZlbiBpZiBpdCBzdGFydHMgd2l0aCAuIG9yIGRvdDp0cnVlIGlzIHNldC5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZG90VHJhdkFsbG93ZWQgPSB0aGlzLiNwYXJ0cy5sZW5ndGggPT09IDEgJiYganVzdERvdHMuaGFzKHRoaXMuI3BhcnRzWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFkb3RUcmF2QWxsb3dlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXBzID0gYWRkUGF0dGVyblN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgd2UgaGF2ZSBhIHBvc3NpYmlsaXR5IG9mIG1hdGNoaW5nIC4gb3IgLi4sXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmQgcHJldmVudCB0aGF0LlxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmVlZE5vVHJhdiA9IFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZG90cyBhcmUgYWxsb3dlZCwgYW5kIHRoZSBwYXR0ZXJuIHN0YXJ0cyB3aXRoIFsgb3IgLlxuICAgICAgICAgICAgICAgICAgICAgICAgKGRvdCAmJiBhcHMuaGFzKHNyYy5jaGFyQXQoMCkpKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBwYXR0ZXJuIHN0YXJ0cyB3aXRoIFxcLiwgYW5kIHRoZW4gWyBvciAuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNyYy5zdGFydHNXaXRoKCdcXFxcLicpICYmIGFwcy5oYXMoc3JjLmNoYXJBdCgyKSkpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHBhdHRlcm4gc3RhcnRzIHdpdGggXFwuXFwuLCBhbmQgdGhlbiBbIG9yIC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3JjLnN0YXJ0c1dpdGgoJ1xcXFwuXFxcXC4nKSAmJiBhcHMuaGFzKHNyYy5jaGFyQXQoNCkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vIG5lZWQgdG8gcHJldmVudCBkb3RzIGlmIGl0IGNhbid0IG1hdGNoIGEgZG90LCBvciBpZiBhXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzdWItcGF0dGVybiB3aWxsIGJlIHByZXZlbnRpbmcgaXQgYW55d2F5LlxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmVlZE5vRG90ID0gIWRvdCAmJiAhYWxsb3dEb3QgJiYgYXBzLmhhcyhzcmMuY2hhckF0KDApKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gbmVlZE5vVHJhdiA/IHN0YXJ0Tm9UcmF2ZXJzYWwgOiBuZWVkTm9Eb3QgPyBzdGFydE5vRG90IDogJyc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBhcHBlbmQgdGhlIFwiZW5kIG9mIHBhdGggcG9ydGlvblwiIHBhdHRlcm4gdG8gbmVnYXRpb24gdGFpbHNcbiAgICAgICAgICAgIGxldCBlbmQgPSAnJztcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRW5kKCkgJiZcbiAgICAgICAgICAgICAgICB0aGlzLiNyb290LiNmaWxsZWROZWdzICYmXG4gICAgICAgICAgICAgICAgdGhpcy4jcGFyZW50Py50eXBlID09PSAnIScpIHtcbiAgICAgICAgICAgICAgICBlbmQgPSAnKD86JHxcXFxcLyknO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZmluYWwgPSBzdGFydCArIHNyYyArIGVuZDtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgZmluYWwsXG4gICAgICAgICAgICAgICAgKDAsIHVuZXNjYXBlX2pzXzEudW5lc2NhcGUpKHNyYyksXG4gICAgICAgICAgICAgICAgKHRoaXMuI2hhc01hZ2ljID0gISF0aGlzLiNoYXNNYWdpYyksXG4gICAgICAgICAgICAgICAgdGhpcy4jdWZsYWcsXG4gICAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICAgIC8vIFdlIG5lZWQgdG8gY2FsY3VsYXRlIHRoZSBib2R5ICp0d2ljZSogaWYgaXQncyBhIHJlcGVhdCBwYXR0ZXJuXG4gICAgICAgIC8vIGF0IHRoZSBzdGFydCwgb25jZSBpbiBub2RvdCBtb2RlLCB0aGVuIGFnYWluIGluIGRvdCBtb2RlLCBzbyBhXG4gICAgICAgIC8vIHBhdHRlcm4gbGlrZSAqKD8pIGNhbiBtYXRjaCAneC55J1xuICAgICAgICBjb25zdCByZXBlYXRlZCA9IHRoaXMudHlwZSA9PT0gJyonIHx8IHRoaXMudHlwZSA9PT0gJysnO1xuICAgICAgICAvLyBzb21lIGtpbmQgb2YgZXh0Z2xvYlxuICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMudHlwZSA9PT0gJyEnID8gJyg/Oig/ISg/OicgOiAnKD86JztcbiAgICAgICAgbGV0IGJvZHkgPSB0aGlzLiNwYXJ0c1RvUmVnRXhwKGRvdCk7XG4gICAgICAgIGlmICh0aGlzLmlzU3RhcnQoKSAmJiB0aGlzLmlzRW5kKCkgJiYgIWJvZHkgJiYgdGhpcy50eXBlICE9PSAnIScpIHtcbiAgICAgICAgICAgIC8vIGludmFsaWQgZXh0Z2xvYiwgaGFzIHRvIGF0IGxlYXN0IGJlICpzb21ldGhpbmcqIHByZXNlbnQsIGlmIGl0J3NcbiAgICAgICAgICAgIC8vIHRoZSBlbnRpcmUgcGF0aCBwb3J0aW9uLlxuICAgICAgICAgICAgY29uc3QgcyA9IHRoaXMudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIHRoaXMuI3BhcnRzID0gW3NdO1xuICAgICAgICAgICAgdGhpcy50eXBlID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuI2hhc01hZ2ljID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgcmV0dXJuIFtzLCAoMCwgdW5lc2NhcGVfanNfMS51bmVzY2FwZSkodGhpcy50b1N0cmluZygpKSwgZmFsc2UsIGZhbHNlXTtcbiAgICAgICAgfVxuICAgICAgICAvLyBYWFggYWJzdHJhY3Qgb3V0IHRoaXMgbWFwIG1ldGhvZFxuICAgICAgICBsZXQgYm9keURvdEFsbG93ZWQgPSAhcmVwZWF0ZWQgfHwgYWxsb3dEb3QgfHwgZG90IHx8ICFzdGFydE5vRG90XG4gICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICA6IHRoaXMuI3BhcnRzVG9SZWdFeHAodHJ1ZSk7XG4gICAgICAgIGlmIChib2R5RG90QWxsb3dlZCA9PT0gYm9keSkge1xuICAgICAgICAgICAgYm9keURvdEFsbG93ZWQgPSAnJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoYm9keURvdEFsbG93ZWQpIHtcbiAgICAgICAgICAgIGJvZHkgPSBgKD86JHtib2R5fSkoPzoke2JvZHlEb3RBbGxvd2VkfSkqP2A7XG4gICAgICAgIH1cbiAgICAgICAgLy8gYW4gZW1wdHkgISgpIGlzIGV4YWN0bHkgZXF1aXZhbGVudCB0byBhIHN0YXJOb0VtcHR5XG4gICAgICAgIGxldCBmaW5hbCA9ICcnO1xuICAgICAgICBpZiAodGhpcy50eXBlID09PSAnIScgJiYgdGhpcy4jZW1wdHlFeHQpIHtcbiAgICAgICAgICAgIGZpbmFsID0gKHRoaXMuaXNTdGFydCgpICYmICFkb3QgPyBzdGFydE5vRG90IDogJycpICsgc3Rhck5vRW1wdHk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBjbG9zZSA9IHRoaXMudHlwZSA9PT0gJyEnXG4gICAgICAgICAgICAgICAgPyAvLyAhKCkgbXVzdCBtYXRjaCBzb21ldGhpbmcsYnV0ICEoeCkgY2FuIG1hdGNoICcnXG4gICAgICAgICAgICAgICAgICAgICcpKScgK1xuICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMuaXNTdGFydCgpICYmICFkb3QgJiYgIWFsbG93RG90ID8gc3RhcnROb0RvdCA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFyICtcbiAgICAgICAgICAgICAgICAgICAgICAgICcpJ1xuICAgICAgICAgICAgICAgIDogdGhpcy50eXBlID09PSAnQCdcbiAgICAgICAgICAgICAgICAgICAgPyAnKSdcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLnR5cGUgPT09ICc/J1xuICAgICAgICAgICAgICAgICAgICAgICAgPyAnKT8nXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMudHlwZSA9PT0gJysnICYmIGJvZHlEb3RBbGxvd2VkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnKSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMudHlwZSA9PT0gJyonICYmIGJvZHlEb3RBbGxvd2VkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gYCk/YFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGApJHt0aGlzLnR5cGV9YDtcbiAgICAgICAgICAgIGZpbmFsID0gc3RhcnQgKyBib2R5ICsgY2xvc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIGZpbmFsLFxuICAgICAgICAgICAgKDAsIHVuZXNjYXBlX2pzXzEudW5lc2NhcGUpKGJvZHkpLFxuICAgICAgICAgICAgKHRoaXMuI2hhc01hZ2ljID0gISF0aGlzLiNoYXNNYWdpYyksXG4gICAgICAgICAgICB0aGlzLiN1ZmxhZyxcbiAgICAgICAgXTtcbiAgICB9XG4gICAgI3BhcnRzVG9SZWdFeHAoZG90KSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNwYXJ0c1xuICAgICAgICAgICAgLm1hcChwID0+IHtcbiAgICAgICAgICAgIC8vIGV4dGdsb2IgQVNUcyBzaG91bGQgb25seSBjb250YWluIHBhcmVudCBBU1RzXG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgICAgIGlmICh0eXBlb2YgcCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N0cmluZyB0eXBlIGluIGV4dGdsb2IgYXN0Pz8nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICAvLyBjYW4gaWdub3JlIGhhc01hZ2ljLCBiZWNhdXNlIGV4dGdsb2JzIGFyZSBhbHJlYWR5IGFsd2F5cyBtYWdpY1xuICAgICAgICAgICAgY29uc3QgW3JlLCBfLCBfaGFzTWFnaWMsIHVmbGFnXSA9IHAudG9SZWdFeHBTb3VyY2UoZG90KTtcbiAgICAgICAgICAgIHRoaXMuI3VmbGFnID0gdGhpcy4jdWZsYWcgfHwgdWZsYWc7XG4gICAgICAgICAgICByZXR1cm4gcmU7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAuZmlsdGVyKHAgPT4gISh0aGlzLmlzU3RhcnQoKSAmJiB0aGlzLmlzRW5kKCkpIHx8ICEhcClcbiAgICAgICAgICAgIC5qb2luKCd8Jyk7XG4gICAgfVxuICAgIHN0YXRpYyAjcGFyc2VHbG9iKGdsb2IsIGhhc01hZ2ljLCBub0VtcHR5ID0gZmFsc2UpIHtcbiAgICAgICAgbGV0IGVzY2FwaW5nID0gZmFsc2U7XG4gICAgICAgIGxldCByZSA9ICcnO1xuICAgICAgICBsZXQgdWZsYWcgPSBmYWxzZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBnbG9iLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gZ2xvYi5jaGFyQXQoaSk7XG4gICAgICAgICAgICBpZiAoZXNjYXBpbmcpIHtcbiAgICAgICAgICAgICAgICBlc2NhcGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJlICs9IChyZVNwZWNpYWxzLmhhcyhjKSA/ICdcXFxcJyA6ICcnKSArIGM7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYyA9PT0gJ1xcXFwnKSB7XG4gICAgICAgICAgICAgICAgaWYgKGkgPT09IGdsb2IubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZSArPSAnXFxcXFxcXFwnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZXNjYXBpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjID09PSAnWycpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBbc3JjLCBuZWVkVWZsYWcsIGNvbnN1bWVkLCBtYWdpY10gPSAoMCwgYnJhY2VfZXhwcmVzc2lvbnNfanNfMS5wYXJzZUNsYXNzKShnbG9iLCBpKTtcbiAgICAgICAgICAgICAgICBpZiAoY29uc3VtZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmUgKz0gc3JjO1xuICAgICAgICAgICAgICAgICAgICB1ZmxhZyA9IHVmbGFnIHx8IG5lZWRVZmxhZztcbiAgICAgICAgICAgICAgICAgICAgaSArPSBjb25zdW1lZCAtIDE7XG4gICAgICAgICAgICAgICAgICAgIGhhc01hZ2ljID0gaGFzTWFnaWMgfHwgbWFnaWM7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjID09PSAnKicpIHtcbiAgICAgICAgICAgICAgICBpZiAobm9FbXB0eSAmJiBnbG9iID09PSAnKicpXG4gICAgICAgICAgICAgICAgICAgIHJlICs9IHN0YXJOb0VtcHR5O1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgcmUgKz0gc3RhcjtcbiAgICAgICAgICAgICAgICBoYXNNYWdpYyA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYyA9PT0gJz8nKSB7XG4gICAgICAgICAgICAgICAgcmUgKz0gcW1hcms7XG4gICAgICAgICAgICAgICAgaGFzTWFnaWMgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmUgKz0gcmVnRXhwRXNjYXBlKGMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbcmUsICgwLCB1bmVzY2FwZV9qc18xLnVuZXNjYXBlKShnbG9iKSwgISFoYXNNYWdpYywgdWZsYWddO1xuICAgIH1cbn1cbmV4cG9ydHMuQVNUID0gQVNUO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXN0LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmVzY2FwZSA9IHZvaWQgMDtcbi8qKlxuICogRXNjYXBlIGFsbCBtYWdpYyBjaGFyYWN0ZXJzIGluIGEgZ2xvYiBwYXR0ZXJuLlxuICpcbiAqIElmIHRoZSB7QGxpbmsgd2luZG93c1BhdGhzTm9Fc2NhcGUgfCBHbG9iT3B0aW9ucy53aW5kb3dzUGF0aHNOb0VzY2FwZX1cbiAqIG9wdGlvbiBpcyB1c2VkLCB0aGVuIGNoYXJhY3RlcnMgYXJlIGVzY2FwZWQgYnkgd3JhcHBpbmcgaW4gYFtdYCwgYmVjYXVzZVxuICogYSBtYWdpYyBjaGFyYWN0ZXIgd3JhcHBlZCBpbiBhIGNoYXJhY3RlciBjbGFzcyBjYW4gb25seSBiZSBzYXRpc2ZpZWQgYnlcbiAqIHRoYXQgZXhhY3QgY2hhcmFjdGVyLiAgSW4gdGhpcyBtb2RlLCBgXFxgIGlzIF9ub3RfIGVzY2FwZWQsIGJlY2F1c2UgaXQgaXNcbiAqIG5vdCBpbnRlcnByZXRlZCBhcyBhIG1hZ2ljIGNoYXJhY3RlciwgYnV0IGluc3RlYWQgYXMgYSBwYXRoIHNlcGFyYXRvci5cbiAqL1xuY29uc3QgZXNjYXBlID0gKHMsIHsgd2luZG93c1BhdGhzTm9Fc2NhcGUgPSBmYWxzZSwgfSA9IHt9KSA9PiB7XG4gICAgLy8gZG9uJ3QgbmVlZCB0byBlc2NhcGUgK0AhIGJlY2F1c2Ugd2UgZXNjYXBlIHRoZSBwYXJlbnNcbiAgICAvLyB0aGF0IG1ha2UgdGhvc2UgbWFnaWMsIGFuZCBlc2NhcGluZyAhIGFzIFshXSBpc24ndCB2YWxpZCxcbiAgICAvLyBiZWNhdXNlIFshXV0gaXMgYSB2YWxpZCBnbG9iIGNsYXNzIG1lYW5pbmcgbm90ICddJy5cbiAgICByZXR1cm4gd2luZG93c1BhdGhzTm9Fc2NhcGVcbiAgICAgICAgPyBzLnJlcGxhY2UoL1s/KigpW1xcXV0vZywgJ1skJl0nKVxuICAgICAgICA6IHMucmVwbGFjZSgvWz8qKClbXFxdXFxcXF0vZywgJ1xcXFwkJicpO1xufTtcbmV4cG9ydHMuZXNjYXBlID0gZXNjYXBlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXNjYXBlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnVuZXNjYXBlID0gZXhwb3J0cy5lc2NhcGUgPSBleHBvcnRzLkFTVCA9IGV4cG9ydHMuTWluaW1hdGNoID0gZXhwb3J0cy5tYXRjaCA9IGV4cG9ydHMubWFrZVJlID0gZXhwb3J0cy5icmFjZUV4cGFuZCA9IGV4cG9ydHMuZGVmYXVsdHMgPSBleHBvcnRzLmZpbHRlciA9IGV4cG9ydHMuR0xPQlNUQVIgPSBleHBvcnRzLnNlcCA9IGV4cG9ydHMubWluaW1hdGNoID0gdm9pZCAwO1xuY29uc3QgYnJhY2VfZXhwYW5zaW9uXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImJyYWNlLWV4cGFuc2lvblwiKSk7XG5jb25zdCBhc3NlcnRfdmFsaWRfcGF0dGVybl9qc18xID0gcmVxdWlyZShcIi4vYXNzZXJ0LXZhbGlkLXBhdHRlcm4uanNcIik7XG5jb25zdCBhc3RfanNfMSA9IHJlcXVpcmUoXCIuL2FzdC5qc1wiKTtcbmNvbnN0IGVzY2FwZV9qc18xID0gcmVxdWlyZShcIi4vZXNjYXBlLmpzXCIpO1xuY29uc3QgdW5lc2NhcGVfanNfMSA9IHJlcXVpcmUoXCIuL3VuZXNjYXBlLmpzXCIpO1xuY29uc3QgbWluaW1hdGNoID0gKHAsIHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkgPT4ge1xuICAgICgwLCBhc3NlcnRfdmFsaWRfcGF0dGVybl9qc18xLmFzc2VydFZhbGlkUGF0dGVybikocGF0dGVybik7XG4gICAgLy8gc2hvcnRjdXQ6IGNvbW1lbnRzIG1hdGNoIG5vdGhpbmcuXG4gICAgaWYgKCFvcHRpb25zLm5vY29tbWVudCAmJiBwYXR0ZXJuLmNoYXJBdCgwKSA9PT0gJyMnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBNaW5pbWF0Y2gocGF0dGVybiwgb3B0aW9ucykubWF0Y2gocCk7XG59O1xuZXhwb3J0cy5taW5pbWF0Y2ggPSBtaW5pbWF0Y2g7XG4vLyBPcHRpbWl6ZWQgY2hlY2tpbmcgZm9yIHRoZSBtb3N0IGNvbW1vbiBnbG9iIHBhdHRlcm5zLlxuY29uc3Qgc3RhckRvdEV4dFJFID0gL15cXCorKFteK0AhP1xcKlxcW1xcKF0qKSQvO1xuY29uc3Qgc3RhckRvdEV4dFRlc3QgPSAoZXh0KSA9PiAoZikgPT4gIWYuc3RhcnRzV2l0aCgnLicpICYmIGYuZW5kc1dpdGgoZXh0KTtcbmNvbnN0IHN0YXJEb3RFeHRUZXN0RG90ID0gKGV4dCkgPT4gKGYpID0+IGYuZW5kc1dpdGgoZXh0KTtcbmNvbnN0IHN0YXJEb3RFeHRUZXN0Tm9jYXNlID0gKGV4dCkgPT4ge1xuICAgIGV4dCA9IGV4dC50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiAoZikgPT4gIWYuc3RhcnRzV2l0aCgnLicpICYmIGYudG9Mb3dlckNhc2UoKS5lbmRzV2l0aChleHQpO1xufTtcbmNvbnN0IHN0YXJEb3RFeHRUZXN0Tm9jYXNlRG90ID0gKGV4dCkgPT4ge1xuICAgIGV4dCA9IGV4dC50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiAoZikgPT4gZi50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKGV4dCk7XG59O1xuY29uc3Qgc3RhckRvdFN0YXJSRSA9IC9eXFwqK1xcLlxcKiskLztcbmNvbnN0IHN0YXJEb3RTdGFyVGVzdCA9IChmKSA9PiAhZi5zdGFydHNXaXRoKCcuJykgJiYgZi5pbmNsdWRlcygnLicpO1xuY29uc3Qgc3RhckRvdFN0YXJUZXN0RG90ID0gKGYpID0+IGYgIT09ICcuJyAmJiBmICE9PSAnLi4nICYmIGYuaW5jbHVkZXMoJy4nKTtcbmNvbnN0IGRvdFN0YXJSRSA9IC9eXFwuXFwqKyQvO1xuY29uc3QgZG90U3RhclRlc3QgPSAoZikgPT4gZiAhPT0gJy4nICYmIGYgIT09ICcuLicgJiYgZi5zdGFydHNXaXRoKCcuJyk7XG5jb25zdCBzdGFyUkUgPSAvXlxcKiskLztcbmNvbnN0IHN0YXJUZXN0ID0gKGYpID0+IGYubGVuZ3RoICE9PSAwICYmICFmLnN0YXJ0c1dpdGgoJy4nKTtcbmNvbnN0IHN0YXJUZXN0RG90ID0gKGYpID0+IGYubGVuZ3RoICE9PSAwICYmIGYgIT09ICcuJyAmJiBmICE9PSAnLi4nO1xuY29uc3QgcW1hcmtzUkUgPSAvXlxcPysoW14rQCE/XFwqXFxbXFwoXSopPyQvO1xuY29uc3QgcW1hcmtzVGVzdE5vY2FzZSA9IChbJDAsIGV4dCA9ICcnXSkgPT4ge1xuICAgIGNvbnN0IG5vZXh0ID0gcW1hcmtzVGVzdE5vRXh0KFskMF0pO1xuICAgIGlmICghZXh0KVxuICAgICAgICByZXR1cm4gbm9leHQ7XG4gICAgZXh0ID0gZXh0LnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuIChmKSA9PiBub2V4dChmKSAmJiBmLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoZXh0KTtcbn07XG5jb25zdCBxbWFya3NUZXN0Tm9jYXNlRG90ID0gKFskMCwgZXh0ID0gJyddKSA9PiB7XG4gICAgY29uc3Qgbm9leHQgPSBxbWFya3NUZXN0Tm9FeHREb3QoWyQwXSk7XG4gICAgaWYgKCFleHQpXG4gICAgICAgIHJldHVybiBub2V4dDtcbiAgICBleHQgPSBleHQudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gKGYpID0+IG5vZXh0KGYpICYmIGYudG9Mb3dlckNhc2UoKS5lbmRzV2l0aChleHQpO1xufTtcbmNvbnN0IHFtYXJrc1Rlc3REb3QgPSAoWyQwLCBleHQgPSAnJ10pID0+IHtcbiAgICBjb25zdCBub2V4dCA9IHFtYXJrc1Rlc3ROb0V4dERvdChbJDBdKTtcbiAgICByZXR1cm4gIWV4dCA/IG5vZXh0IDogKGYpID0+IG5vZXh0KGYpICYmIGYuZW5kc1dpdGgoZXh0KTtcbn07XG5jb25zdCBxbWFya3NUZXN0ID0gKFskMCwgZXh0ID0gJyddKSA9PiB7XG4gICAgY29uc3Qgbm9leHQgPSBxbWFya3NUZXN0Tm9FeHQoWyQwXSk7XG4gICAgcmV0dXJuICFleHQgPyBub2V4dCA6IChmKSA9PiBub2V4dChmKSAmJiBmLmVuZHNXaXRoKGV4dCk7XG59O1xuY29uc3QgcW1hcmtzVGVzdE5vRXh0ID0gKFskMF0pID0+IHtcbiAgICBjb25zdCBsZW4gPSAkMC5sZW5ndGg7XG4gICAgcmV0dXJuIChmKSA9PiBmLmxlbmd0aCA9PT0gbGVuICYmICFmLnN0YXJ0c1dpdGgoJy4nKTtcbn07XG5jb25zdCBxbWFya3NUZXN0Tm9FeHREb3QgPSAoWyQwXSkgPT4ge1xuICAgIGNvbnN0IGxlbiA9ICQwLmxlbmd0aDtcbiAgICByZXR1cm4gKGYpID0+IGYubGVuZ3RoID09PSBsZW4gJiYgZiAhPT0gJy4nICYmIGYgIT09ICcuLic7XG59O1xuLyogYzggaWdub3JlIHN0YXJ0ICovXG5jb25zdCBkZWZhdWx0UGxhdGZvcm0gPSAodHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmIHByb2Nlc3NcbiAgICA/ICh0eXBlb2YgcHJvY2Vzcy5lbnYgPT09ICdvYmplY3QnICYmXG4gICAgICAgIHByb2Nlc3MuZW52ICYmXG4gICAgICAgIHByb2Nlc3MuZW52Ll9fTUlOSU1BVENIX1RFU1RJTkdfUExBVEZPUk1fXykgfHxcbiAgICAgICAgcHJvY2Vzcy5wbGF0Zm9ybVxuICAgIDogJ3Bvc2l4Jyk7XG5jb25zdCBwYXRoID0ge1xuICAgIHdpbjMyOiB7IHNlcDogJ1xcXFwnIH0sXG4gICAgcG9zaXg6IHsgc2VwOiAnLycgfSxcbn07XG4vKiBjOCBpZ25vcmUgc3RvcCAqL1xuZXhwb3J0cy5zZXAgPSBkZWZhdWx0UGxhdGZvcm0gPT09ICd3aW4zMicgPyBwYXRoLndpbjMyLnNlcCA6IHBhdGgucG9zaXguc2VwO1xuZXhwb3J0cy5taW5pbWF0Y2guc2VwID0gZXhwb3J0cy5zZXA7XG5leHBvcnRzLkdMT0JTVEFSID0gU3ltYm9sKCdnbG9ic3RhciAqKicpO1xuZXhwb3J0cy5taW5pbWF0Y2guR0xPQlNUQVIgPSBleHBvcnRzLkdMT0JTVEFSO1xuLy8gYW55IHNpbmdsZSB0aGluZyBvdGhlciB0aGFuIC9cbi8vIGRvbid0IG5lZWQgdG8gZXNjYXBlIC8gd2hlbiB1c2luZyBuZXcgUmVnRXhwKClcbmNvbnN0IHFtYXJrID0gJ1teL10nO1xuLy8gKiA9PiBhbnkgbnVtYmVyIG9mIGNoYXJhY3RlcnNcbmNvbnN0IHN0YXIgPSBxbWFyayArICcqPyc7XG4vLyAqKiB3aGVuIGRvdHMgYXJlIGFsbG93ZWQuICBBbnl0aGluZyBnb2VzLCBleGNlcHQgLi4gYW5kIC5cbi8vIG5vdCAoXiBvciAvIGZvbGxvd2VkIGJ5IG9uZSBvciB0d28gZG90cyBmb2xsb3dlZCBieSAkIG9yIC8pLFxuLy8gZm9sbG93ZWQgYnkgYW55dGhpbmcsIGFueSBudW1iZXIgb2YgdGltZXMuXG5jb25zdCB0d29TdGFyRG90ID0gJyg/Oig/ISg/OlxcXFwvfF4pKD86XFxcXC57MSwyfSkoJHxcXFxcLykpLikqPyc7XG4vLyBub3QgYSBeIG9yIC8gZm9sbG93ZWQgYnkgYSBkb3QsXG4vLyBmb2xsb3dlZCBieSBhbnl0aGluZywgYW55IG51bWJlciBvZiB0aW1lcy5cbmNvbnN0IHR3b1N0YXJOb0RvdCA9ICcoPzooPyEoPzpcXFxcL3xeKVxcXFwuKS4pKj8nO1xuY29uc3QgZmlsdGVyID0gKHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkgPT4gKHApID0+ICgwLCBleHBvcnRzLm1pbmltYXRjaCkocCwgcGF0dGVybiwgb3B0aW9ucyk7XG5leHBvcnRzLmZpbHRlciA9IGZpbHRlcjtcbmV4cG9ydHMubWluaW1hdGNoLmZpbHRlciA9IGV4cG9ydHMuZmlsdGVyO1xuY29uc3QgZXh0ID0gKGEsIGIgPSB7fSkgPT4gT2JqZWN0LmFzc2lnbih7fSwgYSwgYik7XG5jb25zdCBkZWZhdWx0cyA9IChkZWYpID0+IHtcbiAgICBpZiAoIWRlZiB8fCB0eXBlb2YgZGVmICE9PSAnb2JqZWN0JyB8fCAhT2JqZWN0LmtleXMoZGVmKS5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMubWluaW1hdGNoO1xuICAgIH1cbiAgICBjb25zdCBvcmlnID0gZXhwb3J0cy5taW5pbWF0Y2g7XG4gICAgY29uc3QgbSA9IChwLCBwYXR0ZXJuLCBvcHRpb25zID0ge30pID0+IG9yaWcocCwgcGF0dGVybiwgZXh0KGRlZiwgb3B0aW9ucykpO1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKG0sIHtcbiAgICAgICAgTWluaW1hdGNoOiBjbGFzcyBNaW5pbWF0Y2ggZXh0ZW5kcyBvcmlnLk1pbmltYXRjaCB7XG4gICAgICAgICAgICBjb25zdHJ1Y3RvcihwYXR0ZXJuLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgICAgICAgICBzdXBlcihwYXR0ZXJuLCBleHQoZGVmLCBvcHRpb25zKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdGF0aWMgZGVmYXVsdHMob3B0aW9ucykge1xuICAgICAgICAgICAgICAgIHJldHVybiBvcmlnLmRlZmF1bHRzKGV4dChkZWYsIG9wdGlvbnMpKS5NaW5pbWF0Y2g7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIEFTVDogY2xhc3MgQVNUIGV4dGVuZHMgb3JpZy5BU1Qge1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICBjb25zdHJ1Y3Rvcih0eXBlLCBwYXJlbnQsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICAgICAgICAgIHN1cGVyKHR5cGUsIHBhcmVudCwgZXh0KGRlZiwgb3B0aW9ucykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgICAgIHN0YXRpYyBmcm9tR2xvYihwYXR0ZXJuLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZy5BU1QuZnJvbUdsb2IocGF0dGVybiwgZXh0KGRlZiwgb3B0aW9ucykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB1bmVzY2FwZTogKHMsIG9wdGlvbnMgPSB7fSkgPT4gb3JpZy51bmVzY2FwZShzLCBleHQoZGVmLCBvcHRpb25zKSksXG4gICAgICAgIGVzY2FwZTogKHMsIG9wdGlvbnMgPSB7fSkgPT4gb3JpZy5lc2NhcGUocywgZXh0KGRlZiwgb3B0aW9ucykpLFxuICAgICAgICBmaWx0ZXI6IChwYXR0ZXJuLCBvcHRpb25zID0ge30pID0+IG9yaWcuZmlsdGVyKHBhdHRlcm4sIGV4dChkZWYsIG9wdGlvbnMpKSxcbiAgICAgICAgZGVmYXVsdHM6IChvcHRpb25zKSA9PiBvcmlnLmRlZmF1bHRzKGV4dChkZWYsIG9wdGlvbnMpKSxcbiAgICAgICAgbWFrZVJlOiAocGF0dGVybiwgb3B0aW9ucyA9IHt9KSA9PiBvcmlnLm1ha2VSZShwYXR0ZXJuLCBleHQoZGVmLCBvcHRpb25zKSksXG4gICAgICAgIGJyYWNlRXhwYW5kOiAocGF0dGVybiwgb3B0aW9ucyA9IHt9KSA9PiBvcmlnLmJyYWNlRXhwYW5kKHBhdHRlcm4sIGV4dChkZWYsIG9wdGlvbnMpKSxcbiAgICAgICAgbWF0Y2g6IChsaXN0LCBwYXR0ZXJuLCBvcHRpb25zID0ge30pID0+IG9yaWcubWF0Y2gobGlzdCwgcGF0dGVybiwgZXh0KGRlZiwgb3B0aW9ucykpLFxuICAgICAgICBzZXA6IG9yaWcuc2VwLFxuICAgICAgICBHTE9CU1RBUjogZXhwb3J0cy5HTE9CU1RBUixcbiAgICB9KTtcbn07XG5leHBvcnRzLmRlZmF1bHRzID0gZGVmYXVsdHM7XG5leHBvcnRzLm1pbmltYXRjaC5kZWZhdWx0cyA9IGV4cG9ydHMuZGVmYXVsdHM7XG4vLyBCcmFjZSBleHBhbnNpb246XG4vLyBhe2IsY31kIC0+IGFiZCBhY2Rcbi8vIGF7Yix9YyAtPiBhYmMgYWNcbi8vIGF7MC4uM31kIC0+IGEwZCBhMWQgYTJkIGEzZFxuLy8gYXtiLGN7ZCxlfWZ9ZyAtPiBhYmcgYWNkZmcgYWNlZmdcbi8vIGF7YixjfWR7ZSxmfWcgLT4gYWJkZWcgYWNkZWcgYWJkZWcgYWJkZmdcbi8vXG4vLyBJbnZhbGlkIHNldHMgYXJlIG5vdCBleHBhbmRlZC5cbi8vIGF7Mi4ufWIgLT4gYXsyLi59YlxuLy8gYXtifWMgLT4gYXtifWNcbmNvbnN0IGJyYWNlRXhwYW5kID0gKHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkgPT4ge1xuICAgICgwLCBhc3NlcnRfdmFsaWRfcGF0dGVybl9qc18xLmFzc2VydFZhbGlkUGF0dGVybikocGF0dGVybik7XG4gICAgLy8gVGhhbmtzIHRvIFlldGluZyBMaSA8aHR0cHM6Ly9naXRodWIuY29tL3lldGluZ2xpPiBmb3JcbiAgICAvLyBpbXByb3ZpbmcgdGhpcyByZWdleHAgdG8gYXZvaWQgYSBSZURPUyB2dWxuZXJhYmlsaXR5LlxuICAgIGlmIChvcHRpb25zLm5vYnJhY2UgfHwgIS9cXHsoPzooPyFcXHspLikqXFx9Ly50ZXN0KHBhdHRlcm4pKSB7XG4gICAgICAgIC8vIHNob3J0Y3V0LiBubyBuZWVkIHRvIGV4cGFuZC5cbiAgICAgICAgcmV0dXJuIFtwYXR0ZXJuXTtcbiAgICB9XG4gICAgcmV0dXJuICgwLCBicmFjZV9leHBhbnNpb25fMS5kZWZhdWx0KShwYXR0ZXJuKTtcbn07XG5leHBvcnRzLmJyYWNlRXhwYW5kID0gYnJhY2VFeHBhbmQ7XG5leHBvcnRzLm1pbmltYXRjaC5icmFjZUV4cGFuZCA9IGV4cG9ydHMuYnJhY2VFeHBhbmQ7XG4vLyBwYXJzZSBhIGNvbXBvbmVudCBvZiB0aGUgZXhwYW5kZWQgc2V0LlxuLy8gQXQgdGhpcyBwb2ludCwgbm8gcGF0dGVybiBtYXkgY29udGFpbiBcIi9cIiBpbiBpdFxuLy8gc28gd2UncmUgZ29pbmcgdG8gcmV0dXJuIGEgMmQgYXJyYXksIHdoZXJlIGVhY2ggZW50cnkgaXMgdGhlIGZ1bGxcbi8vIHBhdHRlcm4sIHNwbGl0IG9uICcvJywgYW5kIHRoZW4gdHVybmVkIGludG8gYSByZWd1bGFyIGV4cHJlc3Npb24uXG4vLyBBIHJlZ2V4cCBpcyBtYWRlIGF0IHRoZSBlbmQgd2hpY2ggam9pbnMgZWFjaCBhcnJheSB3aXRoIGFuXG4vLyBlc2NhcGVkIC8sIGFuZCBhbm90aGVyIGZ1bGwgb25lIHdoaWNoIGpvaW5zIGVhY2ggcmVnZXhwIHdpdGggfC5cbi8vXG4vLyBGb2xsb3dpbmcgdGhlIGxlYWQgb2YgQmFzaCA0LjEsIG5vdGUgdGhhdCBcIioqXCIgb25seSBoYXMgc3BlY2lhbCBtZWFuaW5nXG4vLyB3aGVuIGl0IGlzIHRoZSAqb25seSogdGhpbmcgaW4gYSBwYXRoIHBvcnRpb24uICBPdGhlcndpc2UsIGFueSBzZXJpZXNcbi8vIG9mICogaXMgZXF1aXZhbGVudCB0byBhIHNpbmdsZSAqLiAgR2xvYnN0YXIgYmVoYXZpb3IgaXMgZW5hYmxlZCBieVxuLy8gZGVmYXVsdCwgYW5kIGNhbiBiZSBkaXNhYmxlZCBieSBzZXR0aW5nIG9wdGlvbnMubm9nbG9ic3Rhci5cbmNvbnN0IG1ha2VSZSA9IChwYXR0ZXJuLCBvcHRpb25zID0ge30pID0+IG5ldyBNaW5pbWF0Y2gocGF0dGVybiwgb3B0aW9ucykubWFrZVJlKCk7XG5leHBvcnRzLm1ha2VSZSA9IG1ha2VSZTtcbmV4cG9ydHMubWluaW1hdGNoLm1ha2VSZSA9IGV4cG9ydHMubWFrZVJlO1xuY29uc3QgbWF0Y2ggPSAobGlzdCwgcGF0dGVybiwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgY29uc3QgbW0gPSBuZXcgTWluaW1hdGNoKHBhdHRlcm4sIG9wdGlvbnMpO1xuICAgIGxpc3QgPSBsaXN0LmZpbHRlcihmID0+IG1tLm1hdGNoKGYpKTtcbiAgICBpZiAobW0ub3B0aW9ucy5ub251bGwgJiYgIWxpc3QubGVuZ3RoKSB7XG4gICAgICAgIGxpc3QucHVzaChwYXR0ZXJuKTtcbiAgICB9XG4gICAgcmV0dXJuIGxpc3Q7XG59O1xuZXhwb3J0cy5tYXRjaCA9IG1hdGNoO1xuZXhwb3J0cy5taW5pbWF0Y2gubWF0Y2ggPSBleHBvcnRzLm1hdGNoO1xuLy8gcmVwbGFjZSBzdHVmZiBsaWtlIFxcKiB3aXRoICpcbmNvbnN0IGdsb2JNYWdpYyA9IC9bPypdfFsrQCFdXFwoLio/XFwpfFxcW3xcXF0vO1xuY29uc3QgcmVnRXhwRXNjYXBlID0gKHMpID0+IHMucmVwbGFjZSgvWy1bXFxde30oKSorPy4sXFxcXF4kfCNcXHNdL2csICdcXFxcJCYnKTtcbmNsYXNzIE1pbmltYXRjaCB7XG4gICAgb3B0aW9ucztcbiAgICBzZXQ7XG4gICAgcGF0dGVybjtcbiAgICB3aW5kb3dzUGF0aHNOb0VzY2FwZTtcbiAgICBub25lZ2F0ZTtcbiAgICBuZWdhdGU7XG4gICAgY29tbWVudDtcbiAgICBlbXB0eTtcbiAgICBwcmVzZXJ2ZU11bHRpcGxlU2xhc2hlcztcbiAgICBwYXJ0aWFsO1xuICAgIGdsb2JTZXQ7XG4gICAgZ2xvYlBhcnRzO1xuICAgIG5vY2FzZTtcbiAgICBpc1dpbmRvd3M7XG4gICAgcGxhdGZvcm07XG4gICAgd2luZG93c05vTWFnaWNSb290O1xuICAgIHJlZ2V4cDtcbiAgICBjb25zdHJ1Y3RvcihwYXR0ZXJuLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgKDAsIGFzc2VydF92YWxpZF9wYXR0ZXJuX2pzXzEuYXNzZXJ0VmFsaWRQYXR0ZXJuKShwYXR0ZXJuKTtcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgIHRoaXMucGF0dGVybiA9IHBhdHRlcm47XG4gICAgICAgIHRoaXMucGxhdGZvcm0gPSBvcHRpb25zLnBsYXRmb3JtIHx8IGRlZmF1bHRQbGF0Zm9ybTtcbiAgICAgICAgdGhpcy5pc1dpbmRvd3MgPSB0aGlzLnBsYXRmb3JtID09PSAnd2luMzInO1xuICAgICAgICB0aGlzLndpbmRvd3NQYXRoc05vRXNjYXBlID1cbiAgICAgICAgICAgICEhb3B0aW9ucy53aW5kb3dzUGF0aHNOb0VzY2FwZSB8fCBvcHRpb25zLmFsbG93V2luZG93c0VzY2FwZSA9PT0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLndpbmRvd3NQYXRoc05vRXNjYXBlKSB7XG4gICAgICAgICAgICB0aGlzLnBhdHRlcm4gPSB0aGlzLnBhdHRlcm4ucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJlc2VydmVNdWx0aXBsZVNsYXNoZXMgPSAhIW9wdGlvbnMucHJlc2VydmVNdWx0aXBsZVNsYXNoZXM7XG4gICAgICAgIHRoaXMucmVnZXhwID0gbnVsbDtcbiAgICAgICAgdGhpcy5uZWdhdGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5ub25lZ2F0ZSA9ICEhb3B0aW9ucy5ub25lZ2F0ZTtcbiAgICAgICAgdGhpcy5jb21tZW50ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZW1wdHkgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5wYXJ0aWFsID0gISFvcHRpb25zLnBhcnRpYWw7XG4gICAgICAgIHRoaXMubm9jYXNlID0gISF0aGlzLm9wdGlvbnMubm9jYXNlO1xuICAgICAgICB0aGlzLndpbmRvd3NOb01hZ2ljUm9vdCA9XG4gICAgICAgICAgICBvcHRpb25zLndpbmRvd3NOb01hZ2ljUm9vdCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyBvcHRpb25zLndpbmRvd3NOb01hZ2ljUm9vdFxuICAgICAgICAgICAgICAgIDogISEodGhpcy5pc1dpbmRvd3MgJiYgdGhpcy5ub2Nhc2UpO1xuICAgICAgICB0aGlzLmdsb2JTZXQgPSBbXTtcbiAgICAgICAgdGhpcy5nbG9iUGFydHMgPSBbXTtcbiAgICAgICAgdGhpcy5zZXQgPSBbXTtcbiAgICAgICAgLy8gbWFrZSB0aGUgc2V0IG9mIHJlZ2V4cHMgZXRjLlxuICAgICAgICB0aGlzLm1ha2UoKTtcbiAgICB9XG4gICAgaGFzTWFnaWMoKSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMubWFnaWNhbEJyYWNlcyAmJiB0aGlzLnNldC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgdGhpcy5zZXQpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcGFydCBvZiBwYXR0ZXJuKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwYXJ0ICE9PSAnc3RyaW5nJylcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBkZWJ1ZyguLi5fKSB7IH1cbiAgICBtYWtlKCkge1xuICAgICAgICBjb25zdCBwYXR0ZXJuID0gdGhpcy5wYXR0ZXJuO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgICAvLyBlbXB0eSBwYXR0ZXJucyBhbmQgY29tbWVudHMgbWF0Y2ggbm90aGluZy5cbiAgICAgICAgaWYgKCFvcHRpb25zLm5vY29tbWVudCAmJiBwYXR0ZXJuLmNoYXJBdCgwKSA9PT0gJyMnKSB7XG4gICAgICAgICAgICB0aGlzLmNvbW1lbnQgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghcGF0dGVybikge1xuICAgICAgICAgICAgdGhpcy5lbXB0eSA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gc3RlcCAxOiBmaWd1cmUgb3V0IG5lZ2F0aW9uLCBldGMuXG4gICAgICAgIHRoaXMucGFyc2VOZWdhdGUoKTtcbiAgICAgICAgLy8gc3RlcCAyOiBleHBhbmQgYnJhY2VzXG4gICAgICAgIHRoaXMuZ2xvYlNldCA9IFsuLi5uZXcgU2V0KHRoaXMuYnJhY2VFeHBhbmQoKSldO1xuICAgICAgICBpZiAob3B0aW9ucy5kZWJ1Zykge1xuICAgICAgICAgICAgdGhpcy5kZWJ1ZyA9ICguLi5hcmdzKSA9PiBjb25zb2xlLmVycm9yKC4uLmFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGVidWcodGhpcy5wYXR0ZXJuLCB0aGlzLmdsb2JTZXQpO1xuICAgICAgICAvLyBzdGVwIDM6IG5vdyB3ZSBoYXZlIGEgc2V0LCBzbyB0dXJuIGVhY2ggb25lIGludG8gYSBzZXJpZXMgb2ZcbiAgICAgICAgLy8gcGF0aC1wb3J0aW9uIG1hdGNoaW5nIHBhdHRlcm5zLlxuICAgICAgICAvLyBUaGVzZSB3aWxsIGJlIHJlZ2V4cHMsIGV4Y2VwdCBpbiB0aGUgY2FzZSBvZiBcIioqXCIsIHdoaWNoIGlzXG4gICAgICAgIC8vIHNldCB0byB0aGUgR0xPQlNUQVIgb2JqZWN0IGZvciBnbG9ic3RhciBiZWhhdmlvcixcbiAgICAgICAgLy8gYW5kIHdpbGwgbm90IGNvbnRhaW4gYW55IC8gY2hhcmFjdGVyc1xuICAgICAgICAvL1xuICAgICAgICAvLyBGaXJzdCwgd2UgcHJlcHJvY2VzcyB0byBtYWtlIHRoZSBnbG9iIHBhdHRlcm4gc2V0cyBhIGJpdCBzaW1wbGVyXG4gICAgICAgIC8vIGFuZCBkZWR1cGVkLiAgVGhlcmUgYXJlIHNvbWUgcGVyZi1raWxsaW5nIHBhdHRlcm5zIHRoYXQgY2FuIGNhdXNlXG4gICAgICAgIC8vIHByb2JsZW1zIHdpdGggYSBnbG9iIHdhbGssIGJ1dCB3ZSBjYW4gc2ltcGxpZnkgdGhlbSBkb3duIGEgYml0LlxuICAgICAgICBjb25zdCByYXdHbG9iUGFydHMgPSB0aGlzLmdsb2JTZXQubWFwKHMgPT4gdGhpcy5zbGFzaFNwbGl0KHMpKTtcbiAgICAgICAgdGhpcy5nbG9iUGFydHMgPSB0aGlzLnByZXByb2Nlc3MocmF3R2xvYlBhcnRzKTtcbiAgICAgICAgdGhpcy5kZWJ1Zyh0aGlzLnBhdHRlcm4sIHRoaXMuZ2xvYlBhcnRzKTtcbiAgICAgICAgLy8gZ2xvYiAtLT4gcmVnZXhwc1xuICAgICAgICBsZXQgc2V0ID0gdGhpcy5nbG9iUGFydHMubWFwKChzLCBfLCBfXykgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNXaW5kb3dzICYmIHRoaXMud2luZG93c05vTWFnaWNSb290KSB7XG4gICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgaXQncyBhIGRyaXZlIG9yIHVuYyBwYXRoLlxuICAgICAgICAgICAgICAgIGNvbnN0IGlzVU5DID0gc1swXSA9PT0gJycgJiZcbiAgICAgICAgICAgICAgICAgICAgc1sxXSA9PT0gJycgJiZcbiAgICAgICAgICAgICAgICAgICAgKHNbMl0gPT09ICc/JyB8fCAhZ2xvYk1hZ2ljLnRlc3Qoc1syXSkpICYmXG4gICAgICAgICAgICAgICAgICAgICFnbG9iTWFnaWMudGVzdChzWzNdKTtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0RyaXZlID0gL15bYS16XTovaS50ZXN0KHNbMF0pO1xuICAgICAgICAgICAgICAgIGlmIChpc1VOQykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWy4uLnMuc2xpY2UoMCwgNCksIC4uLnMuc2xpY2UoNCkubWFwKHNzID0+IHRoaXMucGFyc2Uoc3MpKV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzRHJpdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtzWzBdLCAuLi5zLnNsaWNlKDEpLm1hcChzcyA9PiB0aGlzLnBhcnNlKHNzKSldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzLm1hcChzcyA9PiB0aGlzLnBhcnNlKHNzKSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRlYnVnKHRoaXMucGF0dGVybiwgc2V0KTtcbiAgICAgICAgLy8gZmlsdGVyIG91dCBldmVyeXRoaW5nIHRoYXQgZGlkbid0IGNvbXBpbGUgcHJvcGVybHkuXG4gICAgICAgIHRoaXMuc2V0ID0gc2V0LmZpbHRlcihzID0+IHMuaW5kZXhPZihmYWxzZSkgPT09IC0xKTtcbiAgICAgICAgLy8gZG8gbm90IHRyZWF0IHRoZSA/IGluIFVOQyBwYXRocyBhcyBtYWdpY1xuICAgICAgICBpZiAodGhpcy5pc1dpbmRvd3MpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zZXQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwID0gdGhpcy5zZXRbaV07XG4gICAgICAgICAgICAgICAgaWYgKHBbMF0gPT09ICcnICYmXG4gICAgICAgICAgICAgICAgICAgIHBbMV0gPT09ICcnICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2xvYlBhcnRzW2ldWzJdID09PSAnPycgJiZcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHBbM10gPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAgICAgICAgIC9eW2Etel06JC9pLnRlc3QocFszXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcFsyXSA9ICc/JztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kZWJ1Zyh0aGlzLnBhdHRlcm4sIHRoaXMuc2V0KTtcbiAgICB9XG4gICAgLy8gdmFyaW91cyB0cmFuc2Zvcm1zIHRvIGVxdWl2YWxlbnQgcGF0dGVybiBzZXRzIHRoYXQgYXJlXG4gICAgLy8gZmFzdGVyIHRvIHByb2Nlc3MgaW4gYSBmaWxlc3lzdGVtIHdhbGsuICBUaGUgZ29hbCBpcyB0b1xuICAgIC8vIGVsaW1pbmF0ZSB3aGF0IHdlIGNhbiwgYW5kIHB1c2ggYWxsICoqIHBhdHRlcm5zIGFzIGZhclxuICAgIC8vIHRvIHRoZSByaWdodCBhcyBwb3NzaWJsZSwgZXZlbiBpZiBpdCBpbmNyZWFzZXMgdGhlIG51bWJlclxuICAgIC8vIG9mIHBhdHRlcm5zIHRoYXQgd2UgaGF2ZSB0byBwcm9jZXNzLlxuICAgIHByZXByb2Nlc3MoZ2xvYlBhcnRzKSB7XG4gICAgICAgIC8vIGlmIHdlJ3JlIG5vdCBpbiBnbG9ic3RhciBtb2RlLCB0aGVuIHR1cm4gYWxsICoqIGludG8gKlxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLm5vZ2xvYnN0YXIpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZ2xvYlBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBnbG9iUGFydHNbaV0ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGdsb2JQYXJ0c1tpXVtqXSA9PT0gJyoqJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYlBhcnRzW2ldW2pdID0gJyonO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgb3B0aW1pemF0aW9uTGV2ZWwgPSAxIH0gPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGlmIChvcHRpbWl6YXRpb25MZXZlbCA+PSAyKSB7XG4gICAgICAgICAgICAvLyBhZ2dyZXNzaXZlIG9wdGltaXphdGlvbiBmb3IgdGhlIHB1cnBvc2Ugb2YgZnMgd2Fsa2luZ1xuICAgICAgICAgICAgZ2xvYlBhcnRzID0gdGhpcy5maXJzdFBoYXNlUHJlUHJvY2VzcyhnbG9iUGFydHMpO1xuICAgICAgICAgICAgZ2xvYlBhcnRzID0gdGhpcy5zZWNvbmRQaGFzZVByZVByb2Nlc3MoZ2xvYlBhcnRzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChvcHRpbWl6YXRpb25MZXZlbCA+PSAxKSB7XG4gICAgICAgICAgICAvLyBqdXN0IGJhc2ljIG9wdGltaXphdGlvbnMgdG8gcmVtb3ZlIHNvbWUgLi4gcGFydHNcbiAgICAgICAgICAgIGdsb2JQYXJ0cyA9IHRoaXMubGV2ZWxPbmVPcHRpbWl6ZShnbG9iUGFydHMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8ganVzdCBjb2xsYXBzZSBtdWx0aXBsZSAqKiBwb3J0aW9ucyBpbnRvIG9uZVxuICAgICAgICAgICAgZ2xvYlBhcnRzID0gdGhpcy5hZGphc2NlbnRHbG9ic3Rhck9wdGltaXplKGdsb2JQYXJ0cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdsb2JQYXJ0cztcbiAgICB9XG4gICAgLy8ganVzdCBnZXQgcmlkIG9mIGFkamFzY2VudCAqKiBwb3J0aW9uc1xuICAgIGFkamFzY2VudEdsb2JzdGFyT3B0aW1pemUoZ2xvYlBhcnRzKSB7XG4gICAgICAgIHJldHVybiBnbG9iUGFydHMubWFwKHBhcnRzID0+IHtcbiAgICAgICAgICAgIGxldCBncyA9IC0xO1xuICAgICAgICAgICAgd2hpbGUgKC0xICE9PSAoZ3MgPSBwYXJ0cy5pbmRleE9mKCcqKicsIGdzICsgMSkpKSB7XG4gICAgICAgICAgICAgICAgbGV0IGkgPSBncztcbiAgICAgICAgICAgICAgICB3aGlsZSAocGFydHNbaSArIDFdID09PSAnKionKSB7XG4gICAgICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGkgIT09IGdzKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcnRzLnNwbGljZShncywgaSAtIGdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcGFydHM7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBnZXQgcmlkIG9mIGFkamFzY2VudCAqKiBhbmQgcmVzb2x2ZSAuLiBwb3J0aW9uc1xuICAgIGxldmVsT25lT3B0aW1pemUoZ2xvYlBhcnRzKSB7XG4gICAgICAgIHJldHVybiBnbG9iUGFydHMubWFwKHBhcnRzID0+IHtcbiAgICAgICAgICAgIHBhcnRzID0gcGFydHMucmVkdWNlKChzZXQsIHBhcnQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2ID0gc2V0W3NldC5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICBpZiAocGFydCA9PT0gJyoqJyAmJiBwcmV2ID09PSAnKionKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwYXJ0ID09PSAnLi4nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcmV2ICYmIHByZXYgIT09ICcuLicgJiYgcHJldiAhPT0gJy4nICYmIHByZXYgIT09ICcqKicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldC5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2V0LnB1c2gocGFydCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNldDtcbiAgICAgICAgICAgIH0sIFtdKTtcbiAgICAgICAgICAgIHJldHVybiBwYXJ0cy5sZW5ndGggPT09IDAgPyBbJyddIDogcGFydHM7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBsZXZlbFR3b0ZpbGVPcHRpbWl6ZShwYXJ0cykge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocGFydHMpKSB7XG4gICAgICAgICAgICBwYXJ0cyA9IHRoaXMuc2xhc2hTcGxpdChwYXJ0cyk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGRpZFNvbWV0aGluZyA9IGZhbHNlO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICBkaWRTb21ldGhpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vIDxwcmU+LzxlPi88cmVzdD4gLT4gPHByZT4vPHJlc3Q+XG4gICAgICAgICAgICBpZiAoIXRoaXMucHJlc2VydmVNdWx0aXBsZVNsYXNoZXMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHBhcnRzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwID0gcGFydHNbaV07XG4gICAgICAgICAgICAgICAgICAgIC8vIGRvbid0IHNxdWVlemUgb3V0IFVOQyBwYXR0ZXJuc1xuICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PT0gMSAmJiBwID09PSAnJyAmJiBwYXJ0c1swXSA9PT0gJycpXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHAgPT09ICcuJyB8fCBwID09PSAnJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlkU29tZXRoaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGktLTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocGFydHNbMF0gPT09ICcuJyAmJlxuICAgICAgICAgICAgICAgICAgICBwYXJ0cy5sZW5ndGggPT09IDIgJiZcbiAgICAgICAgICAgICAgICAgICAgKHBhcnRzWzFdID09PSAnLicgfHwgcGFydHNbMV0gPT09ICcnKSkge1xuICAgICAgICAgICAgICAgICAgICBkaWRTb21ldGhpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBwYXJ0cy5wb3AoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyA8cHJlPi88cD4vLi4vPHJlc3Q+IC0+IDxwcmU+LzxyZXN0PlxuICAgICAgICAgICAgbGV0IGRkID0gMDtcbiAgICAgICAgICAgIHdoaWxlICgtMSAhPT0gKGRkID0gcGFydHMuaW5kZXhPZignLi4nLCBkZCArIDEpKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHAgPSBwYXJ0c1tkZCAtIDFdO1xuICAgICAgICAgICAgICAgIGlmIChwICYmIHAgIT09ICcuJyAmJiBwICE9PSAnLi4nICYmIHAgIT09ICcqKicpIHtcbiAgICAgICAgICAgICAgICAgICAgZGlkU29tZXRoaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcGFydHMuc3BsaWNlKGRkIC0gMSwgMik7XG4gICAgICAgICAgICAgICAgICAgIGRkIC09IDI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IHdoaWxlIChkaWRTb21ldGhpbmcpO1xuICAgICAgICByZXR1cm4gcGFydHMubGVuZ3RoID09PSAwID8gWycnXSA6IHBhcnRzO1xuICAgIH1cbiAgICAvLyBGaXJzdCBwaGFzZTogc2luZ2xlLXBhdHRlcm4gcHJvY2Vzc2luZ1xuICAgIC8vIDxwcmU+IGlzIDEgb3IgbW9yZSBwb3J0aW9uc1xuICAgIC8vIDxyZXN0PiBpcyAxIG9yIG1vcmUgcG9ydGlvbnNcbiAgICAvLyA8cD4gaXMgYW55IHBvcnRpb24gb3RoZXIgdGhhbiAuLCAuLiwgJycsIG9yICoqXG4gICAgLy8gPGU+IGlzIC4gb3IgJydcbiAgICAvL1xuICAgIC8vICoqLy4uIGlzICpicnV0YWwqIGZvciBmaWxlc3lzdGVtIHdhbGtpbmcgcGVyZm9ybWFuY2UsIGJlY2F1c2VcbiAgICAvLyBpdCBlZmZlY3RpdmVseSByZXNldHMgdGhlIHJlY3Vyc2l2ZSB3YWxrIGVhY2ggdGltZSBpdCBvY2N1cnMsXG4gICAgLy8gYW5kICoqIGNhbm5vdCBiZSByZWR1Y2VkIG91dCBieSBhIC4uIHBhdHRlcm4gcGFydCBsaWtlIGEgcmVnZXhwXG4gICAgLy8gb3IgbW9zdCBzdHJpbmdzIChvdGhlciB0aGFuIC4uLCAuLCBhbmQgJycpIGNhbiBiZS5cbiAgICAvL1xuICAgIC8vIDxwcmU+LyoqLy4uLzxwPi88cD4vPHJlc3Q+IC0+IHs8cHJlPi8uLi88cD4vPHA+LzxyZXN0Piw8cHJlPi8qKi88cD4vPHA+LzxyZXN0Pn1cbiAgICAvLyA8cHJlPi88ZT4vPHJlc3Q+IC0+IDxwcmU+LzxyZXN0PlxuICAgIC8vIDxwcmU+LzxwPi8uLi88cmVzdD4gLT4gPHByZT4vPHJlc3Q+XG4gICAgLy8gKiovKiovPHJlc3Q+IC0+ICoqLzxyZXN0PlxuICAgIC8vXG4gICAgLy8gKiovKi88cmVzdD4gLT4gKi8qKi88cmVzdD4gPD09IG5vdCB2YWxpZCBiZWNhdXNlICoqIGRvZXNuJ3QgZm9sbG93XG4gICAgLy8gdGhpcyBXT1VMRCBiZSBhbGxvd2VkIGlmICoqIGRpZCBmb2xsb3cgc3ltbGlua3MsIG9yICogZGlkbid0XG4gICAgZmlyc3RQaGFzZVByZVByb2Nlc3MoZ2xvYlBhcnRzKSB7XG4gICAgICAgIGxldCBkaWRTb21ldGhpbmcgPSBmYWxzZTtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgZGlkU29tZXRoaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAvLyA8cHJlPi8qKi8uLi88cD4vPHA+LzxyZXN0PiAtPiB7PHByZT4vLi4vPHA+LzxwPi88cmVzdD4sPHByZT4vKiovPHA+LzxwPi88cmVzdD59XG4gICAgICAgICAgICBmb3IgKGxldCBwYXJ0cyBvZiBnbG9iUGFydHMpIHtcbiAgICAgICAgICAgICAgICBsZXQgZ3MgPSAtMTtcbiAgICAgICAgICAgICAgICB3aGlsZSAoLTEgIT09IChncyA9IHBhcnRzLmluZGV4T2YoJyoqJywgZ3MgKyAxKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGdzcyA9IGdzO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAocGFydHNbZ3NzICsgMV0gPT09ICcqKicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIDxwcmU+LyoqLyoqLzxyZXN0PiAtPiA8cHJlPi8qKi88cmVzdD5cbiAgICAgICAgICAgICAgICAgICAgICAgIGdzcysrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIGVnLCBpZiBncyBpcyAyIGFuZCBnc3MgaXMgNCwgdGhhdCBtZWFucyB3ZSBoYXZlIDMgKipcbiAgICAgICAgICAgICAgICAgICAgLy8gcGFydHMsIGFuZCBjYW4gcmVtb3ZlIDIgb2YgdGhlbS5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGdzcyA+IGdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0cy5zcGxpY2UoZ3MgKyAxLCBnc3MgLSBncyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbGV0IG5leHQgPSBwYXJ0c1tncyArIDFdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwID0gcGFydHNbZ3MgKyAyXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcDIgPSBwYXJ0c1tncyArIDNdO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCAhPT0gJy4uJylcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXAgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHAgPT09ICcuJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgcCA9PT0gJy4uJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgIXAyIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBwMiA9PT0gJy4nIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBwMiA9PT0gJy4uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZGlkU29tZXRoaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgLy8gZWRpdCBwYXJ0cyBpbiBwbGFjZSwgYW5kIHB1c2ggdGhlIG5ldyBvbmVcbiAgICAgICAgICAgICAgICAgICAgcGFydHMuc3BsaWNlKGdzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RoZXIgPSBwYXJ0cy5zbGljZSgwKTtcbiAgICAgICAgICAgICAgICAgICAgb3RoZXJbZ3NdID0gJyoqJztcbiAgICAgICAgICAgICAgICAgICAgZ2xvYlBhcnRzLnB1c2gob3RoZXIpO1xuICAgICAgICAgICAgICAgICAgICBncy0tO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyA8cHJlPi88ZT4vPHJlc3Q+IC0+IDxwcmU+LzxyZXN0PlxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5wcmVzZXJ2ZU11bHRpcGxlU2xhc2hlcykge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHBhcnRzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcCA9IHBhcnRzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZG9uJ3Qgc3F1ZWV6ZSBvdXQgVU5DIHBhdHRlcm5zXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PT0gMSAmJiBwID09PSAnJyAmJiBwYXJ0c1swXSA9PT0gJycpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocCA9PT0gJy4nIHx8IHAgPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlkU29tZXRoaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaS0tO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJ0c1swXSA9PT0gJy4nICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0cy5sZW5ndGggPT09IDIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIChwYXJ0c1sxXSA9PT0gJy4nIHx8IHBhcnRzWzFdID09PSAnJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpZFNvbWV0aGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0cy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyA8cHJlPi88cD4vLi4vPHJlc3Q+IC0+IDxwcmU+LzxyZXN0PlxuICAgICAgICAgICAgICAgIGxldCBkZCA9IDA7XG4gICAgICAgICAgICAgICAgd2hpbGUgKC0xICE9PSAoZGQgPSBwYXJ0cy5pbmRleE9mKCcuLicsIGRkICsgMSkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHAgPSBwYXJ0c1tkZCAtIDFdO1xuICAgICAgICAgICAgICAgICAgICBpZiAocCAmJiBwICE9PSAnLicgJiYgcCAhPT0gJy4uJyAmJiBwICE9PSAnKionKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaWRTb21ldGhpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmVlZERvdCA9IGRkID09PSAxICYmIHBhcnRzW2RkICsgMV0gPT09ICcqKic7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzcGxpbiA9IG5lZWREb3QgPyBbJy4nXSA6IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFydHMuc3BsaWNlKGRkIC0gMSwgMiwgLi4uc3BsaW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0cy5wdXNoKCcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRkIC09IDI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gd2hpbGUgKGRpZFNvbWV0aGluZyk7XG4gICAgICAgIHJldHVybiBnbG9iUGFydHM7XG4gICAgfVxuICAgIC8vIHNlY29uZCBwaGFzZTogbXVsdGktcGF0dGVybiBkZWR1cGVzXG4gICAgLy8gezxwcmU+LyovPHJlc3Q+LDxwcmU+LzxwPi88cmVzdD59IC0+IDxwcmU+LyovPHJlc3Q+XG4gICAgLy8gezxwcmU+LzxyZXN0Piw8cHJlPi88cmVzdD59IC0+IDxwcmU+LzxyZXN0PlxuICAgIC8vIHs8cHJlPi8qKi88cmVzdD4sPHByZT4vPHJlc3Q+fSAtPiA8cHJlPi8qKi88cmVzdD5cbiAgICAvL1xuICAgIC8vIHs8cHJlPi8qKi88cmVzdD4sPHByZT4vKiovPHA+LzxyZXN0Pn0gLT4gPHByZT4vKiovPHJlc3Q+XG4gICAgLy8gXi0tIG5vdCB2YWxpZCBiZWNhdXNlICoqIGRvZW5zJ3QgZm9sbG93IHN5bWxpbmtzXG4gICAgc2Vjb25kUGhhc2VQcmVQcm9jZXNzKGdsb2JQYXJ0cykge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGdsb2JQYXJ0cy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IGdsb2JQYXJ0cy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoZWQgPSB0aGlzLnBhcnRzTWF0Y2goZ2xvYlBhcnRzW2ldLCBnbG9iUGFydHNbal0sICF0aGlzLnByZXNlcnZlTXVsdGlwbGVTbGFzaGVzKTtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2hlZCkge1xuICAgICAgICAgICAgICAgICAgICBnbG9iUGFydHNbaV0gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgZ2xvYlBhcnRzW2pdID0gbWF0Y2hlZDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBnbG9iUGFydHMuZmlsdGVyKGdzID0+IGdzLmxlbmd0aCk7XG4gICAgfVxuICAgIHBhcnRzTWF0Y2goYSwgYiwgZW1wdHlHU01hdGNoID0gZmFsc2UpIHtcbiAgICAgICAgbGV0IGFpID0gMDtcbiAgICAgICAgbGV0IGJpID0gMDtcbiAgICAgICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgICAgICBsZXQgd2hpY2ggPSAnJztcbiAgICAgICAgd2hpbGUgKGFpIDwgYS5sZW5ndGggJiYgYmkgPCBiLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKGFbYWldID09PSBiW2JpXSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHdoaWNoID09PSAnYicgPyBiW2JpXSA6IGFbYWldKTtcbiAgICAgICAgICAgICAgICBhaSsrO1xuICAgICAgICAgICAgICAgIGJpKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChlbXB0eUdTTWF0Y2ggJiYgYVthaV0gPT09ICcqKicgJiYgYltiaV0gPT09IGFbYWkgKyAxXSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGFbYWldKTtcbiAgICAgICAgICAgICAgICBhaSsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZW1wdHlHU01hdGNoICYmIGJbYmldID09PSAnKionICYmIGFbYWldID09PSBiW2JpICsgMV0pIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChiW2JpXSk7XG4gICAgICAgICAgICAgICAgYmkrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGFbYWldID09PSAnKicgJiZcbiAgICAgICAgICAgICAgICBiW2JpXSAmJlxuICAgICAgICAgICAgICAgICh0aGlzLm9wdGlvbnMuZG90IHx8ICFiW2JpXS5zdGFydHNXaXRoKCcuJykpICYmXG4gICAgICAgICAgICAgICAgYltiaV0gIT09ICcqKicpIHtcbiAgICAgICAgICAgICAgICBpZiAod2hpY2ggPT09ICdiJylcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIHdoaWNoID0gJ2EnO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGFbYWldKTtcbiAgICAgICAgICAgICAgICBhaSsrO1xuICAgICAgICAgICAgICAgIGJpKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChiW2JpXSA9PT0gJyonICYmXG4gICAgICAgICAgICAgICAgYVthaV0gJiZcbiAgICAgICAgICAgICAgICAodGhpcy5vcHRpb25zLmRvdCB8fCAhYVthaV0uc3RhcnRzV2l0aCgnLicpKSAmJlxuICAgICAgICAgICAgICAgIGFbYWldICE9PSAnKionKSB7XG4gICAgICAgICAgICAgICAgaWYgKHdoaWNoID09PSAnYScpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB3aGljaCA9ICdiJztcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChiW2JpXSk7XG4gICAgICAgICAgICAgICAgYWkrKztcbiAgICAgICAgICAgICAgICBiaSsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHdlIGZhbGwgb3V0IG9mIHRoZSBsb29wLCBpdCBtZWFucyB0aGV5IHR3byBhcmUgaWRlbnRpY2FsXG4gICAgICAgIC8vIGFzIGxvbmcgYXMgdGhlaXIgbGVuZ3RocyBtYXRjaFxuICAgICAgICByZXR1cm4gYS5sZW5ndGggPT09IGIubGVuZ3RoICYmIHJlc3VsdDtcbiAgICB9XG4gICAgcGFyc2VOZWdhdGUoKSB7XG4gICAgICAgIGlmICh0aGlzLm5vbmVnYXRlKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBwYXR0ZXJuID0gdGhpcy5wYXR0ZXJuO1xuICAgICAgICBsZXQgbmVnYXRlID0gZmFsc2U7XG4gICAgICAgIGxldCBuZWdhdGVPZmZzZXQgPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdHRlcm4ubGVuZ3RoICYmIHBhdHRlcm4uY2hhckF0KGkpID09PSAnISc7IGkrKykge1xuICAgICAgICAgICAgbmVnYXRlID0gIW5lZ2F0ZTtcbiAgICAgICAgICAgIG5lZ2F0ZU9mZnNldCsrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuZWdhdGVPZmZzZXQpXG4gICAgICAgICAgICB0aGlzLnBhdHRlcm4gPSBwYXR0ZXJuLnNsaWNlKG5lZ2F0ZU9mZnNldCk7XG4gICAgICAgIHRoaXMubmVnYXRlID0gbmVnYXRlO1xuICAgIH1cbiAgICAvLyBzZXQgcGFydGlhbCB0byB0cnVlIHRvIHRlc3QgaWYsIGZvciBleGFtcGxlLFxuICAgIC8vIFwiL2EvYlwiIG1hdGNoZXMgdGhlIHN0YXJ0IG9mIFwiLyovYi8qL2RcIlxuICAgIC8vIFBhcnRpYWwgbWVhbnMsIGlmIHlvdSBydW4gb3V0IG9mIGZpbGUgYmVmb3JlIHlvdSBydW5cbiAgICAvLyBvdXQgb2YgcGF0dGVybiwgdGhlbiB0aGF0J3MgZmluZSwgYXMgbG9uZyBhcyBhbGxcbiAgICAvLyB0aGUgcGFydHMgbWF0Y2guXG4gICAgbWF0Y2hPbmUoZmlsZSwgcGF0dGVybiwgcGFydGlhbCA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIC8vIFVOQyBwYXRocyBsaWtlIC8vPy9YOi8uLi4gY2FuIG1hdGNoIFg6Ly4uLiBhbmQgdmljZSB2ZXJzYVxuICAgICAgICAvLyBEcml2ZSBsZXR0ZXJzIGluIGFic29sdXRlIGRyaXZlIG9yIHVuYyBwYXRocyBhcmUgYWx3YXlzIGNvbXBhcmVkXG4gICAgICAgIC8vIGNhc2UtaW5zZW5zaXRpdmVseS5cbiAgICAgICAgaWYgKHRoaXMuaXNXaW5kb3dzKSB7XG4gICAgICAgICAgICBjb25zdCBmaWxlRHJpdmUgPSB0eXBlb2YgZmlsZVswXSA9PT0gJ3N0cmluZycgJiYgL15bYS16XTokL2kudGVzdChmaWxlWzBdKTtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVVTkMgPSAhZmlsZURyaXZlICYmXG4gICAgICAgICAgICAgICAgZmlsZVswXSA9PT0gJycgJiZcbiAgICAgICAgICAgICAgICBmaWxlWzFdID09PSAnJyAmJlxuICAgICAgICAgICAgICAgIGZpbGVbMl0gPT09ICc/JyAmJlxuICAgICAgICAgICAgICAgIC9eW2Etel06JC9pLnRlc3QoZmlsZVszXSk7XG4gICAgICAgICAgICBjb25zdCBwYXR0ZXJuRHJpdmUgPSB0eXBlb2YgcGF0dGVyblswXSA9PT0gJ3N0cmluZycgJiYgL15bYS16XTokL2kudGVzdChwYXR0ZXJuWzBdKTtcbiAgICAgICAgICAgIGNvbnN0IHBhdHRlcm5VTkMgPSAhcGF0dGVybkRyaXZlICYmXG4gICAgICAgICAgICAgICAgcGF0dGVyblswXSA9PT0gJycgJiZcbiAgICAgICAgICAgICAgICBwYXR0ZXJuWzFdID09PSAnJyAmJlxuICAgICAgICAgICAgICAgIHBhdHRlcm5bMl0gPT09ICc/JyAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiBwYXR0ZXJuWzNdID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgICAgIC9eW2Etel06JC9pLnRlc3QocGF0dGVyblszXSk7XG4gICAgICAgICAgICBjb25zdCBmZGkgPSBmaWxlVU5DID8gMyA6IGZpbGVEcml2ZSA/IDAgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjb25zdCBwZGkgPSBwYXR0ZXJuVU5DID8gMyA6IHBhdHRlcm5Ecml2ZSA/IDAgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGZkaSA9PT0gJ251bWJlcicgJiYgdHlwZW9mIHBkaSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBbZmQsIHBkXSA9IFtmaWxlW2ZkaV0sIHBhdHRlcm5bcGRpXV07XG4gICAgICAgICAgICAgICAgaWYgKGZkLnRvTG93ZXJDYXNlKCkgPT09IHBkLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcGF0dGVybltwZGldID0gZmQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwZGkgPiBmZGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm4gPSBwYXR0ZXJuLnNsaWNlKHBkaSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZmRpID4gcGRpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlID0gZmlsZS5zbGljZShmZGkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIHJlc29sdmUgYW5kIHJlZHVjZSAuIGFuZCAuLiBwb3J0aW9ucyBpbiB0aGUgZmlsZSBhcyB3ZWxsLlxuICAgICAgICAvLyBkb250JyBuZWVkIHRvIGRvIHRoZSBzZWNvbmQgcGhhc2UsIGJlY2F1c2UgaXQncyBvbmx5IG9uZSBzdHJpbmdbXVxuICAgICAgICBjb25zdCB7IG9wdGltaXphdGlvbkxldmVsID0gMSB9ID0gdGhpcy5vcHRpb25zO1xuICAgICAgICBpZiAob3B0aW1pemF0aW9uTGV2ZWwgPj0gMikge1xuICAgICAgICAgICAgZmlsZSA9IHRoaXMubGV2ZWxUd29GaWxlT3B0aW1pemUoZmlsZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kZWJ1ZygnbWF0Y2hPbmUnLCB0aGlzLCB7IGZpbGUsIHBhdHRlcm4gfSk7XG4gICAgICAgIHRoaXMuZGVidWcoJ21hdGNoT25lJywgZmlsZS5sZW5ndGgsIHBhdHRlcm4ubGVuZ3RoKTtcbiAgICAgICAgZm9yICh2YXIgZmkgPSAwLCBwaSA9IDAsIGZsID0gZmlsZS5sZW5ndGgsIHBsID0gcGF0dGVybi5sZW5ndGg7IGZpIDwgZmwgJiYgcGkgPCBwbDsgZmkrKywgcGkrKykge1xuICAgICAgICAgICAgdGhpcy5kZWJ1ZygnbWF0Y2hPbmUgbG9vcCcpO1xuICAgICAgICAgICAgdmFyIHAgPSBwYXR0ZXJuW3BpXTtcbiAgICAgICAgICAgIHZhciBmID0gZmlsZVtmaV07XG4gICAgICAgICAgICB0aGlzLmRlYnVnKHBhdHRlcm4sIHAsIGYpO1xuICAgICAgICAgICAgLy8gc2hvdWxkIGJlIGltcG9zc2libGUuXG4gICAgICAgICAgICAvLyBzb21lIGludmFsaWQgcmVnZXhwIHN0dWZmIGluIHRoZSBzZXQuXG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgICAgIGlmIChwID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICBpZiAocCA9PT0gZXhwb3J0cy5HTE9CU1RBUikge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVidWcoJ0dMT0JTVEFSJywgW3BhdHRlcm4sIHAsIGZdKTtcbiAgICAgICAgICAgICAgICAvLyBcIioqXCJcbiAgICAgICAgICAgICAgICAvLyBhLyoqL2IvKiovYyB3b3VsZCBtYXRjaCB0aGUgZm9sbG93aW5nOlxuICAgICAgICAgICAgICAgIC8vIGEvYi94L3kvei9jXG4gICAgICAgICAgICAgICAgLy8gYS94L3kvei9iL2NcbiAgICAgICAgICAgICAgICAvLyBhL2IveC9iL3gvY1xuICAgICAgICAgICAgICAgIC8vIGEvYi9jXG4gICAgICAgICAgICAgICAgLy8gVG8gZG8gdGhpcywgdGFrZSB0aGUgcmVzdCBvZiB0aGUgcGF0dGVybiBhZnRlclxuICAgICAgICAgICAgICAgIC8vIHRoZSAqKiwgYW5kIHNlZSBpZiBpdCB3b3VsZCBtYXRjaCB0aGUgZmlsZSByZW1haW5kZXIuXG4gICAgICAgICAgICAgICAgLy8gSWYgc28sIHJldHVybiBzdWNjZXNzLlxuICAgICAgICAgICAgICAgIC8vIElmIG5vdCwgdGhlICoqIFwic3dhbGxvd3NcIiBhIHNlZ21lbnQsIGFuZCB0cnkgYWdhaW4uXG4gICAgICAgICAgICAgICAgLy8gVGhpcyBpcyByZWN1cnNpdmVseSBhd2Z1bC5cbiAgICAgICAgICAgICAgICAvL1xuICAgICAgICAgICAgICAgIC8vIGEvKiovYi8qKi9jIG1hdGNoaW5nIGEvYi94L3kvei9jXG4gICAgICAgICAgICAgICAgLy8gLSBhIG1hdGNoZXMgYVxuICAgICAgICAgICAgICAgIC8vIC0gZG91Ymxlc3RhclxuICAgICAgICAgICAgICAgIC8vICAgLSBtYXRjaE9uZShiL3gveS96L2MsIGIvKiovYylcbiAgICAgICAgICAgICAgICAvLyAgICAgLSBiIG1hdGNoZXMgYlxuICAgICAgICAgICAgICAgIC8vICAgICAtIGRvdWJsZXN0YXJcbiAgICAgICAgICAgICAgICAvLyAgICAgICAtIG1hdGNoT25lKHgveS96L2MsIGMpIC0+IG5vXG4gICAgICAgICAgICAgICAgLy8gICAgICAgLSBtYXRjaE9uZSh5L3ovYywgYykgLT4gbm9cbiAgICAgICAgICAgICAgICAvLyAgICAgICAtIG1hdGNoT25lKHovYywgYykgLT4gbm9cbiAgICAgICAgICAgICAgICAvLyAgICAgICAtIG1hdGNoT25lKGMsIGMpIHllcywgaGl0XG4gICAgICAgICAgICAgICAgdmFyIGZyID0gZmk7XG4gICAgICAgICAgICAgICAgdmFyIHByID0gcGkgKyAxO1xuICAgICAgICAgICAgICAgIGlmIChwciA9PT0gcGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWJ1ZygnKiogYXQgdGhlIGVuZCcpO1xuICAgICAgICAgICAgICAgICAgICAvLyBhICoqIGF0IHRoZSBlbmQgd2lsbCBqdXN0IHN3YWxsb3cgdGhlIHJlc3QuXG4gICAgICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgZm91bmQgYSBtYXRjaC5cbiAgICAgICAgICAgICAgICAgICAgLy8gaG93ZXZlciwgaXQgd2lsbCBub3Qgc3dhbGxvdyAvLngsIHVubGVzc1xuICAgICAgICAgICAgICAgICAgICAvLyBvcHRpb25zLmRvdCBpcyBzZXQuXG4gICAgICAgICAgICAgICAgICAgIC8vIC4gYW5kIC4uIGFyZSAqbmV2ZXIqIG1hdGNoZWQgYnkgKiosIGZvciBleHBsb3NpdmVseVxuICAgICAgICAgICAgICAgICAgICAvLyBleHBvbmVudGlhbCByZWFzb25zLlxuICAgICAgICAgICAgICAgICAgICBmb3IgKDsgZmkgPCBmbDsgZmkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpbGVbZmldID09PSAnLicgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlW2ZpXSA9PT0gJy4uJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICghb3B0aW9ucy5kb3QgJiYgZmlsZVtmaV0uY2hhckF0KDApID09PSAnLicpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gb2ssIGxldCdzIHNlZSBpZiB3ZSBjYW4gc3dhbGxvdyB3aGF0ZXZlciB3ZSBjYW4uXG4gICAgICAgICAgICAgICAgd2hpbGUgKGZyIDwgZmwpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHN3YWxsb3dlZSA9IGZpbGVbZnJdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRlYnVnKCdcXG5nbG9ic3RhciB3aGlsZScsIGZpbGUsIGZyLCBwYXR0ZXJuLCBwciwgc3dhbGxvd2VlKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gWFhYIHJlbW92ZSB0aGlzIHNsaWNlLiAgSnVzdCBwYXNzIHRoZSBzdGFydCBpbmRleC5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2hPbmUoZmlsZS5zbGljZShmciksIHBhdHRlcm4uc2xpY2UocHIpLCBwYXJ0aWFsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWJ1ZygnZ2xvYnN0YXIgZm91bmQgbWF0Y2ghJywgZnIsIGZsLCBzd2FsbG93ZWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm91bmQgYSBtYXRjaC5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FuJ3Qgc3dhbGxvdyBcIi5cIiBvciBcIi4uXCIgZXZlci5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbiBvbmx5IHN3YWxsb3cgXCIuZm9vXCIgd2hlbiBleHBsaWNpdGx5IGFza2VkLlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN3YWxsb3dlZSA9PT0gJy4nIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dhbGxvd2VlID09PSAnLi4nIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCFvcHRpb25zLmRvdCAmJiBzd2FsbG93ZWUuY2hhckF0KDApID09PSAnLicpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWJ1ZygnZG90IGRldGVjdGVkIScsIGZpbGUsIGZyLCBwYXR0ZXJuLCBwcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAqKiBzd2FsbG93cyBhIHNlZ21lbnQsIGFuZCBjb250aW51ZS5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVidWcoJ2dsb2JzdGFyIHN3YWxsb3cgYSBzZWdtZW50LCBhbmQgY29udGludWUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyKys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gbm8gbWF0Y2ggd2FzIGZvdW5kLlxuICAgICAgICAgICAgICAgIC8vIEhvd2V2ZXIsIGluIHBhcnRpYWwgbW9kZSwgd2UgY2FuJ3Qgc2F5IHRoaXMgaXMgbmVjZXNzYXJpbHkgb3Zlci5cbiAgICAgICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgICAgICAgICBpZiAocGFydGlhbCkge1xuICAgICAgICAgICAgICAgICAgICAvLyByYW4gb3V0IG9mIGZpbGVcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWJ1ZygnXFxuPj4+IG5vIG1hdGNoLCBwYXJ0aWFsPycsIGZpbGUsIGZyLCBwYXR0ZXJuLCBwcik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmciA9PT0gZmwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gc29tZXRoaW5nIG90aGVyIHRoYW4gKipcbiAgICAgICAgICAgIC8vIG5vbi1tYWdpYyBwYXR0ZXJucyBqdXN0IGhhdmUgdG8gbWF0Y2ggZXhhY3RseVxuICAgICAgICAgICAgLy8gcGF0dGVybnMgd2l0aCBtYWdpYyBoYXZlIGJlZW4gdHVybmVkIGludG8gcmVnZXhwcy5cbiAgICAgICAgICAgIGxldCBoaXQ7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHAgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgaGl0ID0gZiA9PT0gcDtcbiAgICAgICAgICAgICAgICB0aGlzLmRlYnVnKCdzdHJpbmcgbWF0Y2gnLCBwLCBmLCBoaXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaGl0ID0gcC50ZXN0KGYpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGVidWcoJ3BhdHRlcm4gbWF0Y2gnLCBwLCBmLCBoaXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFoaXQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIE5vdGU6IGVuZGluZyBpbiAvIG1lYW5zIHRoYXQgd2UnbGwgZ2V0IGEgZmluYWwgXCJcIlxuICAgICAgICAvLyBhdCB0aGUgZW5kIG9mIHRoZSBwYXR0ZXJuLiAgVGhpcyBjYW4gb25seSBtYXRjaCBhXG4gICAgICAgIC8vIGNvcnJlc3BvbmRpbmcgXCJcIiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLlxuICAgICAgICAvLyBJZiB0aGUgZmlsZSBlbmRzIGluIC8sIHRoZW4gaXQgY2FuIG9ubHkgbWF0Y2ggYVxuICAgICAgICAvLyBhIHBhdHRlcm4gdGhhdCBlbmRzIGluIC8sIHVubGVzcyB0aGUgcGF0dGVybiBqdXN0XG4gICAgICAgIC8vIGRvZXNuJ3QgaGF2ZSBhbnkgbW9yZSBmb3IgaXQuIEJ1dCwgYS9iLyBzaG91bGQgKm5vdCpcbiAgICAgICAgLy8gbWF0Y2ggXCJhL2IvKlwiLCBldmVuIHRob3VnaCBcIlwiIG1hdGNoZXMgYWdhaW5zdCB0aGVcbiAgICAgICAgLy8gW14vXSo/IHBhdHRlcm4sIGV4Y2VwdCBpbiBwYXJ0aWFsIG1vZGUsIHdoZXJlIGl0IG1pZ2h0XG4gICAgICAgIC8vIHNpbXBseSBub3QgYmUgcmVhY2hlZCB5ZXQuXG4gICAgICAgIC8vIEhvd2V2ZXIsIGEvYi8gc2hvdWxkIHN0aWxsIHNhdGlzZnkgYS8qXG4gICAgICAgIC8vIG5vdyBlaXRoZXIgd2UgZmVsbCBvZmYgdGhlIGVuZCBvZiB0aGUgcGF0dGVybiwgb3Igd2UncmUgZG9uZS5cbiAgICAgICAgaWYgKGZpID09PSBmbCAmJiBwaSA9PT0gcGwpIHtcbiAgICAgICAgICAgIC8vIHJhbiBvdXQgb2YgcGF0dGVybiBhbmQgZmlsZW5hbWUgYXQgdGhlIHNhbWUgdGltZS5cbiAgICAgICAgICAgIC8vIGFuIGV4YWN0IGhpdCFcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGZpID09PSBmbCkge1xuICAgICAgICAgICAgLy8gcmFuIG91dCBvZiBmaWxlLCBidXQgc3RpbGwgaGFkIHBhdHRlcm4gbGVmdC5cbiAgICAgICAgICAgIC8vIHRoaXMgaXMgb2sgaWYgd2UncmUgZG9pbmcgdGhlIG1hdGNoIGFzIHBhcnQgb2ZcbiAgICAgICAgICAgIC8vIGEgZ2xvYiBmcyB0cmF2ZXJzYWwuXG4gICAgICAgICAgICByZXR1cm4gcGFydGlhbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwaSA9PT0gcGwpIHtcbiAgICAgICAgICAgIC8vIHJhbiBvdXQgb2YgcGF0dGVybiwgc3RpbGwgaGF2ZSBmaWxlIGxlZnQuXG4gICAgICAgICAgICAvLyB0aGlzIGlzIG9ubHkgYWNjZXB0YWJsZSBpZiB3ZSdyZSBvbiB0aGUgdmVyeSBsYXN0XG4gICAgICAgICAgICAvLyBlbXB0eSBzZWdtZW50IG9mIGEgZmlsZSB3aXRoIGEgdHJhaWxpbmcgc2xhc2guXG4gICAgICAgICAgICAvLyBhLyogc2hvdWxkIG1hdGNoIGEvYi9cbiAgICAgICAgICAgIHJldHVybiBmaSA9PT0gZmwgLSAxICYmIGZpbGVbZmldID09PSAnJztcbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gc2hvdWxkIGJlIHVucmVhY2hhYmxlLlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd3dGY/Jyk7XG4gICAgICAgIH1cbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICB9XG4gICAgYnJhY2VFeHBhbmQoKSB7XG4gICAgICAgIHJldHVybiAoMCwgZXhwb3J0cy5icmFjZUV4cGFuZCkodGhpcy5wYXR0ZXJuLCB0aGlzLm9wdGlvbnMpO1xuICAgIH1cbiAgICBwYXJzZShwYXR0ZXJuKSB7XG4gICAgICAgICgwLCBhc3NlcnRfdmFsaWRfcGF0dGVybl9qc18xLmFzc2VydFZhbGlkUGF0dGVybikocGF0dGVybik7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIC8vIHNob3J0Y3V0c1xuICAgICAgICBpZiAocGF0dGVybiA9PT0gJyoqJylcbiAgICAgICAgICAgIHJldHVybiBleHBvcnRzLkdMT0JTVEFSO1xuICAgICAgICBpZiAocGF0dGVybiA9PT0gJycpXG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIC8vIGZhciBhbmQgYXdheSwgdGhlIG1vc3QgY29tbW9uIGdsb2IgcGF0dGVybiBwYXJ0cyBhcmVcbiAgICAgICAgLy8gKiwgKi4qLCBhbmQgKi48ZXh0PiAgQWRkIGEgZmFzdCBjaGVjayBtZXRob2QgZm9yIHRob3NlLlxuICAgICAgICBsZXQgbTtcbiAgICAgICAgbGV0IGZhc3RUZXN0ID0gbnVsbDtcbiAgICAgICAgaWYgKChtID0gcGF0dGVybi5tYXRjaChzdGFyUkUpKSkge1xuICAgICAgICAgICAgZmFzdFRlc3QgPSBvcHRpb25zLmRvdCA/IHN0YXJUZXN0RG90IDogc3RhclRlc3Q7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoKG0gPSBwYXR0ZXJuLm1hdGNoKHN0YXJEb3RFeHRSRSkpKSB7XG4gICAgICAgICAgICBmYXN0VGVzdCA9IChvcHRpb25zLm5vY2FzZVxuICAgICAgICAgICAgICAgID8gb3B0aW9ucy5kb3RcbiAgICAgICAgICAgICAgICAgICAgPyBzdGFyRG90RXh0VGVzdE5vY2FzZURvdFxuICAgICAgICAgICAgICAgICAgICA6IHN0YXJEb3RFeHRUZXN0Tm9jYXNlXG4gICAgICAgICAgICAgICAgOiBvcHRpb25zLmRvdFxuICAgICAgICAgICAgICAgICAgICA/IHN0YXJEb3RFeHRUZXN0RG90XG4gICAgICAgICAgICAgICAgICAgIDogc3RhckRvdEV4dFRlc3QpKG1bMV0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKChtID0gcGF0dGVybi5tYXRjaChxbWFya3NSRSkpKSB7XG4gICAgICAgICAgICBmYXN0VGVzdCA9IChvcHRpb25zLm5vY2FzZVxuICAgICAgICAgICAgICAgID8gb3B0aW9ucy5kb3RcbiAgICAgICAgICAgICAgICAgICAgPyBxbWFya3NUZXN0Tm9jYXNlRG90XG4gICAgICAgICAgICAgICAgICAgIDogcW1hcmtzVGVzdE5vY2FzZVxuICAgICAgICAgICAgICAgIDogb3B0aW9ucy5kb3RcbiAgICAgICAgICAgICAgICAgICAgPyBxbWFya3NUZXN0RG90XG4gICAgICAgICAgICAgICAgICAgIDogcW1hcmtzVGVzdCkobSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoKG0gPSBwYXR0ZXJuLm1hdGNoKHN0YXJEb3RTdGFyUkUpKSkge1xuICAgICAgICAgICAgZmFzdFRlc3QgPSBvcHRpb25zLmRvdCA/IHN0YXJEb3RTdGFyVGVzdERvdCA6IHN0YXJEb3RTdGFyVGVzdDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICgobSA9IHBhdHRlcm4ubWF0Y2goZG90U3RhclJFKSkpIHtcbiAgICAgICAgICAgIGZhc3RUZXN0ID0gZG90U3RhclRlc3Q7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmUgPSBhc3RfanNfMS5BU1QuZnJvbUdsb2IocGF0dGVybiwgdGhpcy5vcHRpb25zKS50b01NUGF0dGVybigpO1xuICAgICAgICBpZiAoZmFzdFRlc3QgJiYgdHlwZW9mIHJlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgLy8gQXZvaWRzIG92ZXJyaWRpbmcgaW4gZnJvemVuIGVudmlyb25tZW50c1xuICAgICAgICAgICAgUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eShyZSwgJ3Rlc3QnLCB7IHZhbHVlOiBmYXN0VGVzdCB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmU7XG4gICAgfVxuICAgIG1ha2VSZSgpIHtcbiAgICAgICAgaWYgKHRoaXMucmVnZXhwIHx8IHRoaXMucmVnZXhwID09PSBmYWxzZSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlZ2V4cDtcbiAgICAgICAgLy8gYXQgdGhpcyBwb2ludCwgdGhpcy5zZXQgaXMgYSAyZCBhcnJheSBvZiBwYXJ0aWFsXG4gICAgICAgIC8vIHBhdHRlcm4gc3RyaW5ncywgb3IgXCIqKlwiLlxuICAgICAgICAvL1xuICAgICAgICAvLyBJdCdzIGJldHRlciB0byB1c2UgLm1hdGNoKCkuICBUaGlzIGZ1bmN0aW9uIHNob3VsZG4ndFxuICAgICAgICAvLyBiZSB1c2VkLCByZWFsbHksIGJ1dCBpdCdzIHByZXR0eSBjb252ZW5pZW50IHNvbWV0aW1lcyxcbiAgICAgICAgLy8gd2hlbiB5b3UganVzdCB3YW50IHRvIHdvcmsgd2l0aCBhIHJlZ2V4LlxuICAgICAgICBjb25zdCBzZXQgPSB0aGlzLnNldDtcbiAgICAgICAgaWYgKCFzZXQubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnJlZ2V4cCA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVnZXhwO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGNvbnN0IHR3b1N0YXIgPSBvcHRpb25zLm5vZ2xvYnN0YXJcbiAgICAgICAgICAgID8gc3RhclxuICAgICAgICAgICAgOiBvcHRpb25zLmRvdFxuICAgICAgICAgICAgICAgID8gdHdvU3RhckRvdFxuICAgICAgICAgICAgICAgIDogdHdvU3Rhck5vRG90O1xuICAgICAgICBjb25zdCBmbGFncyA9IG5ldyBTZXQob3B0aW9ucy5ub2Nhc2UgPyBbJ2knXSA6IFtdKTtcbiAgICAgICAgLy8gcmVnZXhwaWZ5IG5vbi1nbG9ic3RhciBwYXR0ZXJuc1xuICAgICAgICAvLyBpZiAqKiBpcyBvbmx5IGl0ZW0sIHRoZW4gd2UganVzdCBkbyBvbmUgdHdvU3RhclxuICAgICAgICAvLyBpZiAqKiBpcyBmaXJzdCwgYW5kIHRoZXJlIGFyZSBtb3JlLCBwcmVwZW5kIChcXC98dHdvU3RhclxcLyk/IHRvIG5leHRcbiAgICAgICAgLy8gaWYgKiogaXMgbGFzdCwgYXBwZW5kIChcXC90d29TdGFyfCkgdG8gcHJldmlvdXNcbiAgICAgICAgLy8gaWYgKiogaXMgaW4gdGhlIG1pZGRsZSwgYXBwZW5kIChcXC98XFwvdHdvU3RhclxcLykgdG8gcHJldmlvdXNcbiAgICAgICAgLy8gdGhlbiBmaWx0ZXIgb3V0IEdMT0JTVEFSIHN5bWJvbHNcbiAgICAgICAgbGV0IHJlID0gc2V0XG4gICAgICAgICAgICAubWFwKHBhdHRlcm4gPT4ge1xuICAgICAgICAgICAgY29uc3QgcHAgPSBwYXR0ZXJuLm1hcChwID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGYgb2YgcC5mbGFncy5zcGxpdCgnJykpXG4gICAgICAgICAgICAgICAgICAgICAgICBmbGFncy5hZGQoZik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2YgcCA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgICAgPyByZWdFeHBFc2NhcGUocClcbiAgICAgICAgICAgICAgICAgICAgOiBwID09PSBleHBvcnRzLkdMT0JTVEFSXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGV4cG9ydHMuR0xPQlNUQVJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogcC5fc3JjO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwcC5mb3JFYWNoKChwLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IHBwW2kgKyAxXTtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2ID0gcHBbaSAtIDFdO1xuICAgICAgICAgICAgICAgIGlmIChwICE9PSBleHBvcnRzLkdMT0JTVEFSIHx8IHByZXYgPT09IGV4cG9ydHMuR0xPQlNUQVIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocHJldiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0ICE9PSB1bmRlZmluZWQgJiYgbmV4dCAhPT0gZXhwb3J0cy5HTE9CU1RBUikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHBbaSArIDFdID0gJyg/OlxcXFwvfCcgKyB0d29TdGFyICsgJ1xcXFwvKT8nICsgbmV4dDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBwW2ldID0gdHdvU3RhcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChuZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcHBbaSAtIDFdID0gcHJldiArICcoPzpcXFxcL3wnICsgdHdvU3RhciArICcpPyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5leHQgIT09IGV4cG9ydHMuR0xPQlNUQVIpIHtcbiAgICAgICAgICAgICAgICAgICAgcHBbaSAtIDFdID0gcHJldiArICcoPzpcXFxcL3xcXFxcLycgKyB0d29TdGFyICsgJ1xcXFwvKScgKyBuZXh0O1xuICAgICAgICAgICAgICAgICAgICBwcFtpICsgMV0gPSBleHBvcnRzLkdMT0JTVEFSO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHBwLmZpbHRlcihwID0+IHAgIT09IGV4cG9ydHMuR0xPQlNUQVIpLmpvaW4oJy8nKTtcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC5qb2luKCd8Jyk7XG4gICAgICAgIC8vIG5lZWQgdG8gd3JhcCBpbiBwYXJlbnMgaWYgd2UgaGFkIG1vcmUgdGhhbiBvbmUgdGhpbmcgd2l0aCB8LFxuICAgICAgICAvLyBvdGhlcndpc2Ugb25seSB0aGUgZmlyc3Qgd2lsbCBiZSBhbmNob3JlZCB0byBeIGFuZCB0aGUgbGFzdCB0byAkXG4gICAgICAgIGNvbnN0IFtvcGVuLCBjbG9zZV0gPSBzZXQubGVuZ3RoID4gMSA/IFsnKD86JywgJyknXSA6IFsnJywgJyddO1xuICAgICAgICAvLyBtdXN0IG1hdGNoIGVudGlyZSBwYXR0ZXJuXG4gICAgICAgIC8vIGVuZGluZyBpbiBhICogb3IgKiogd2lsbCBtYWtlIGl0IGxlc3Mgc3RyaWN0LlxuICAgICAgICByZSA9ICdeJyArIG9wZW4gKyByZSArIGNsb3NlICsgJyQnO1xuICAgICAgICAvLyBjYW4gbWF0Y2ggYW55dGhpbmcsIGFzIGxvbmcgYXMgaXQncyBub3QgdGhpcy5cbiAgICAgICAgaWYgKHRoaXMubmVnYXRlKVxuICAgICAgICAgICAgcmUgPSAnXig/IScgKyByZSArICcpLiskJztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMucmVnZXhwID0gbmV3IFJlZ0V4cChyZSwgWy4uLmZsYWdzXS5qb2luKCcnKSk7XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXgpIHtcbiAgICAgICAgICAgIC8vIHNob3VsZCBiZSBpbXBvc3NpYmxlXG4gICAgICAgICAgICB0aGlzLnJlZ2V4cCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIHJldHVybiB0aGlzLnJlZ2V4cDtcbiAgICB9XG4gICAgc2xhc2hTcGxpdChwKSB7XG4gICAgICAgIC8vIGlmIHAgc3RhcnRzIHdpdGggLy8gb24gd2luZG93cywgd2UgcHJlc2VydmUgdGhhdFxuICAgICAgICAvLyBzbyB0aGF0IFVOQyBwYXRocyBhcmVuJ3QgYnJva2VuLiAgT3RoZXJ3aXNlLCBhbnkgbnVtYmVyIG9mXG4gICAgICAgIC8vIC8gY2hhcmFjdGVycyBhcmUgY29hbGVzY2VkIGludG8gb25lLCB1bmxlc3NcbiAgICAgICAgLy8gcHJlc2VydmVNdWx0aXBsZVNsYXNoZXMgaXMgc2V0IHRvIHRydWUuXG4gICAgICAgIGlmICh0aGlzLnByZXNlcnZlTXVsdGlwbGVTbGFzaGVzKSB7XG4gICAgICAgICAgICByZXR1cm4gcC5zcGxpdCgnLycpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuaXNXaW5kb3dzICYmIC9eXFwvXFwvW15cXC9dKy8udGVzdChwKSkge1xuICAgICAgICAgICAgLy8gYWRkIGFuIGV4dHJhICcnIGZvciB0aGUgb25lIHdlIGxvc2VcbiAgICAgICAgICAgIHJldHVybiBbJycsIC4uLnAuc3BsaXQoL1xcLysvKV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gcC5zcGxpdCgvXFwvKy8pO1xuICAgICAgICB9XG4gICAgfVxuICAgIG1hdGNoKGYsIHBhcnRpYWwgPSB0aGlzLnBhcnRpYWwpIHtcbiAgICAgICAgdGhpcy5kZWJ1ZygnbWF0Y2gnLCBmLCB0aGlzLnBhdHRlcm4pO1xuICAgICAgICAvLyBzaG9ydC1jaXJjdWl0IGluIHRoZSBjYXNlIG9mIGJ1c3RlZCB0aGluZ3MuXG4gICAgICAgIC8vIGNvbW1lbnRzLCBldGMuXG4gICAgICAgIGlmICh0aGlzLmNvbW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5lbXB0eSkge1xuICAgICAgICAgICAgcmV0dXJuIGYgPT09ICcnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmID09PSAnLycgJiYgcGFydGlhbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgLy8gd2luZG93czogbmVlZCB0byB1c2UgLywgbm90IFxcXG4gICAgICAgIGlmICh0aGlzLmlzV2luZG93cykge1xuICAgICAgICAgICAgZiA9IGYuc3BsaXQoJ1xcXFwnKS5qb2luKCcvJyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gdHJlYXQgdGhlIHRlc3QgcGF0aCBhcyBhIHNldCBvZiBwYXRocGFydHMuXG4gICAgICAgIGNvbnN0IGZmID0gdGhpcy5zbGFzaFNwbGl0KGYpO1xuICAgICAgICB0aGlzLmRlYnVnKHRoaXMucGF0dGVybiwgJ3NwbGl0JywgZmYpO1xuICAgICAgICAvLyBqdXN0IE9ORSBvZiB0aGUgcGF0dGVybiBzZXRzIGluIHRoaXMuc2V0IG5lZWRzIHRvIG1hdGNoXG4gICAgICAgIC8vIGluIG9yZGVyIGZvciBpdCB0byBiZSB2YWxpZC4gIElmIG5lZ2F0aW5nLCB0aGVuIGp1c3Qgb25lXG4gICAgICAgIC8vIG1hdGNoIG1lYW5zIHRoYXQgd2UgaGF2ZSBmYWlsZWQuXG4gICAgICAgIC8vIEVpdGhlciB3YXksIHJldHVybiBvbiB0aGUgZmlyc3QgaGl0LlxuICAgICAgICBjb25zdCBzZXQgPSB0aGlzLnNldDtcbiAgICAgICAgdGhpcy5kZWJ1Zyh0aGlzLnBhdHRlcm4sICdzZXQnLCBzZXQpO1xuICAgICAgICAvLyBGaW5kIHRoZSBiYXNlbmFtZSBvZiB0aGUgcGF0aCBieSBsb29raW5nIGZvciB0aGUgbGFzdCBub24tZW1wdHkgc2VnbWVudFxuICAgICAgICBsZXQgZmlsZW5hbWUgPSBmZltmZi5sZW5ndGggLSAxXTtcbiAgICAgICAgaWYgKCFmaWxlbmFtZSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IGZmLmxlbmd0aCAtIDI7ICFmaWxlbmFtZSAmJiBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gZmZbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZXQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHBhdHRlcm4gPSBzZXRbaV07XG4gICAgICAgICAgICBsZXQgZmlsZSA9IGZmO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMubWF0Y2hCYXNlICYmIHBhdHRlcm4ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgZmlsZSA9IFtmaWxlbmFtZV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBoaXQgPSB0aGlzLm1hdGNoT25lKGZpbGUsIHBhdHRlcm4sIHBhcnRpYWwpO1xuICAgICAgICAgICAgaWYgKGhpdCkge1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmZsaXBOZWdhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAhdGhpcy5uZWdhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gZGlkbid0IGdldCBhbnkgaGl0cy4gIHRoaXMgaXMgc3VjY2VzcyBpZiBpdCdzIGEgbmVnYXRpdmVcbiAgICAgICAgLy8gcGF0dGVybiwgZmFpbHVyZSBvdGhlcndpc2UuXG4gICAgICAgIGlmIChvcHRpb25zLmZsaXBOZWdhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5uZWdhdGU7XG4gICAgfVxuICAgIHN0YXRpYyBkZWZhdWx0cyhkZWYpIHtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMubWluaW1hdGNoLmRlZmF1bHRzKGRlZikuTWluaW1hdGNoO1xuICAgIH1cbn1cbmV4cG9ydHMuTWluaW1hdGNoID0gTWluaW1hdGNoO1xuLyogYzggaWdub3JlIHN0YXJ0ICovXG52YXIgYXN0X2pzXzIgPSByZXF1aXJlKFwiLi9hc3QuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJBU1RcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFzdF9qc18yLkFTVDsgfSB9KTtcbnZhciBlc2NhcGVfanNfMiA9IHJlcXVpcmUoXCIuL2VzY2FwZS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImVzY2FwZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZXNjYXBlX2pzXzIuZXNjYXBlOyB9IH0pO1xudmFyIHVuZXNjYXBlX2pzXzIgPSByZXF1aXJlKFwiLi91bmVzY2FwZS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInVuZXNjYXBlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB1bmVzY2FwZV9qc18yLnVuZXNjYXBlOyB9IH0pO1xuLyogYzggaWdub3JlIHN0b3AgKi9cbmV4cG9ydHMubWluaW1hdGNoLkFTVCA9IGFzdF9qc18xLkFTVDtcbmV4cG9ydHMubWluaW1hdGNoLk1pbmltYXRjaCA9IE1pbmltYXRjaDtcbmV4cG9ydHMubWluaW1hdGNoLmVzY2FwZSA9IGVzY2FwZV9qc18xLmVzY2FwZTtcbmV4cG9ydHMubWluaW1hdGNoLnVuZXNjYXBlID0gdW5lc2NhcGVfanNfMS51bmVzY2FwZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKipcbiAqIEBtb2R1bGUgTFJVQ2FjaGVcbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5MUlVDYWNoZSA9IHZvaWQgMDtcbmNvbnN0IHBlcmYgPSB0eXBlb2YgcGVyZm9ybWFuY2UgPT09ICdvYmplY3QnICYmXG4gICAgcGVyZm9ybWFuY2UgJiZcbiAgICB0eXBlb2YgcGVyZm9ybWFuY2Uubm93ID09PSAnZnVuY3Rpb24nXG4gICAgPyBwZXJmb3JtYW5jZVxuICAgIDogRGF0ZTtcbmNvbnN0IHdhcm5lZCA9IG5ldyBTZXQoKTtcbi8qIGM4IGlnbm9yZSBzdGFydCAqL1xuY29uc3QgUFJPQ0VTUyA9ICh0eXBlb2YgcHJvY2VzcyA9PT0gJ29iamVjdCcgJiYgISFwcm9jZXNzID8gcHJvY2VzcyA6IHt9KTtcbi8qIGM4IGlnbm9yZSBzdGFydCAqL1xuY29uc3QgZW1pdFdhcm5pbmcgPSAobXNnLCB0eXBlLCBjb2RlLCBmbikgPT4ge1xuICAgIHR5cGVvZiBQUk9DRVNTLmVtaXRXYXJuaW5nID09PSAnZnVuY3Rpb24nXG4gICAgICAgID8gUFJPQ0VTUy5lbWl0V2FybmluZyhtc2csIHR5cGUsIGNvZGUsIGZuKVxuICAgICAgICA6IGNvbnNvbGUuZXJyb3IoYFske2NvZGV9XSAke3R5cGV9OiAke21zZ31gKTtcbn07XG5sZXQgQUMgPSBnbG9iYWxUaGlzLkFib3J0Q29udHJvbGxlcjtcbmxldCBBUyA9IGdsb2JhbFRoaXMuQWJvcnRTaWduYWw7XG4vKiBjOCBpZ25vcmUgc3RhcnQgKi9cbmlmICh0eXBlb2YgQUMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgLy9AdHMtaWdub3JlXG4gICAgQVMgPSBjbGFzcyBBYm9ydFNpZ25hbCB7XG4gICAgICAgIG9uYWJvcnQ7XG4gICAgICAgIF9vbmFib3J0ID0gW107XG4gICAgICAgIHJlYXNvbjtcbiAgICAgICAgYWJvcnRlZCA9IGZhbHNlO1xuICAgICAgICBhZGRFdmVudExpc3RlbmVyKF8sIGZuKSB7XG4gICAgICAgICAgICB0aGlzLl9vbmFib3J0LnB1c2goZm4pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICAvL0B0cy1pZ25vcmVcbiAgICBBQyA9IGNsYXNzIEFib3J0Q29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgd2FybkFDUG9seWZpbGwoKTtcbiAgICAgICAgfVxuICAgICAgICBzaWduYWwgPSBuZXcgQVMoKTtcbiAgICAgICAgYWJvcnQocmVhc29uKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zaWduYWwuYWJvcnRlZClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAvL0B0cy1pZ25vcmVcbiAgICAgICAgICAgIHRoaXMuc2lnbmFsLnJlYXNvbiA9IHJlYXNvbjtcbiAgICAgICAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgICAgICAgdGhpcy5zaWduYWwuYWJvcnRlZCA9IHRydWU7XG4gICAgICAgICAgICAvL0B0cy1pZ25vcmVcbiAgICAgICAgICAgIGZvciAoY29uc3QgZm4gb2YgdGhpcy5zaWduYWwuX29uYWJvcnQpIHtcbiAgICAgICAgICAgICAgICBmbihyZWFzb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zaWduYWwub25hYm9ydD8uKHJlYXNvbik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGxldCBwcmludEFDUG9seWZpbGxXYXJuaW5nID0gUFJPQ0VTUy5lbnY/LkxSVV9DQUNIRV9JR05PUkVfQUNfV0FSTklORyAhPT0gJzEnO1xuICAgIGNvbnN0IHdhcm5BQ1BvbHlmaWxsID0gKCkgPT4ge1xuICAgICAgICBpZiAoIXByaW50QUNQb2x5ZmlsbFdhcm5pbmcpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHByaW50QUNQb2x5ZmlsbFdhcm5pbmcgPSBmYWxzZTtcbiAgICAgICAgZW1pdFdhcm5pbmcoJ0Fib3J0Q29udHJvbGxlciBpcyBub3QgZGVmaW5lZC4gSWYgdXNpbmcgbHJ1LWNhY2hlIGluICcgK1xuICAgICAgICAgICAgJ25vZGUgMTQsIGxvYWQgYW4gQWJvcnRDb250cm9sbGVyIHBvbHlmaWxsIGZyb20gdGhlICcgK1xuICAgICAgICAgICAgJ2Bub2RlLWFib3J0LWNvbnRyb2xsZXJgIHBhY2thZ2UuIEEgbWluaW1hbCBwb2x5ZmlsbCBpcyAnICtcbiAgICAgICAgICAgICdwcm92aWRlZCBmb3IgdXNlIGJ5IExSVUNhY2hlLmZldGNoKCksIGJ1dCBpdCBzaG91bGQgbm90IGJlICcgK1xuICAgICAgICAgICAgJ3JlbGllZCB1cG9uIGluIG90aGVyIGNvbnRleHRzIChlZywgcGFzc2luZyBpdCB0byBvdGhlciBBUElzIHRoYXQgJyArXG4gICAgICAgICAgICAndXNlIEFib3J0Q29udHJvbGxlci9BYm9ydFNpZ25hbCBtaWdodCBoYXZlIHVuZGVzaXJhYmxlIGVmZmVjdHMpLiAnICtcbiAgICAgICAgICAgICdZb3UgbWF5IGRpc2FibGUgdGhpcyB3aXRoIExSVV9DQUNIRV9JR05PUkVfQUNfV0FSTklORz0xIGluIHRoZSBlbnYuJywgJ05PX0FCT1JUX0NPTlRST0xMRVInLCAnRU5PVFNVUCcsIHdhcm5BQ1BvbHlmaWxsKTtcbiAgICB9O1xufVxuLyogYzggaWdub3JlIHN0b3AgKi9cbmNvbnN0IHNob3VsZFdhcm4gPSAoY29kZSkgPT4gIXdhcm5lZC5oYXMoY29kZSk7XG5jb25zdCBUWVBFID0gU3ltYm9sKCd0eXBlJyk7XG5jb25zdCBpc1Bvc0ludCA9IChuKSA9PiBuICYmIG4gPT09IE1hdGguZmxvb3IobikgJiYgbiA+IDAgJiYgaXNGaW5pdGUobik7XG4vKiBjOCBpZ25vcmUgc3RhcnQgKi9cbi8vIFRoaXMgaXMgYSBsaXR0bGUgYml0IHJpZGljdWxvdXMsIHRiaC5cbi8vIFRoZSBtYXhpbXVtIGFycmF5IGxlbmd0aCBpcyAyXjMyLTEgb3IgdGhlcmVhYm91dHMgb24gbW9zdCBKUyBpbXBscy5cbi8vIEFuZCB3ZWxsIGJlZm9yZSB0aGF0IHBvaW50LCB5b3UncmUgY2FjaGluZyB0aGUgZW50aXJlIHdvcmxkLCBJIG1lYW4sXG4vLyB0aGF0J3MgfjMyR0Igb2YganVzdCBpbnRlZ2VycyBmb3IgdGhlIG5leHQvcHJldiBsaW5rcywgcGx1cyB3aGF0ZXZlclxuLy8gZWxzZSB0byBob2xkIHRoYXQgbWFueSBrZXlzIGFuZCB2YWx1ZXMuICBKdXN0IGZpbGxpbmcgdGhlIG1lbW9yeSB3aXRoXG4vLyB6ZXJvZXMgYXQgaW5pdCB0aW1lIGlzIGJydXRhbCB3aGVuIHlvdSBnZXQgdGhhdCBiaWcuXG4vLyBCdXQgd2h5IG5vdCBiZSBjb21wbGV0ZT9cbi8vIE1heWJlIGluIHRoZSBmdXR1cmUsIHRoZXNlIGxpbWl0cyB3aWxsIGhhdmUgZXhwYW5kZWQuXG5jb25zdCBnZXRVaW50QXJyYXkgPSAobWF4KSA9PiAhaXNQb3NJbnQobWF4KVxuICAgID8gbnVsbFxuICAgIDogbWF4IDw9IE1hdGgucG93KDIsIDgpXG4gICAgICAgID8gVWludDhBcnJheVxuICAgICAgICA6IG1heCA8PSBNYXRoLnBvdygyLCAxNilcbiAgICAgICAgICAgID8gVWludDE2QXJyYXlcbiAgICAgICAgICAgIDogbWF4IDw9IE1hdGgucG93KDIsIDMyKVxuICAgICAgICAgICAgICAgID8gVWludDMyQXJyYXlcbiAgICAgICAgICAgICAgICA6IG1heCA8PSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUlxuICAgICAgICAgICAgICAgICAgICA/IFplcm9BcnJheVxuICAgICAgICAgICAgICAgICAgICA6IG51bGw7XG4vKiBjOCBpZ25vcmUgc3RvcCAqL1xuY2xhc3MgWmVyb0FycmF5IGV4dGVuZHMgQXJyYXkge1xuICAgIGNvbnN0cnVjdG9yKHNpemUpIHtcbiAgICAgICAgc3VwZXIoc2l6ZSk7XG4gICAgICAgIHRoaXMuZmlsbCgwKTtcbiAgICB9XG59XG5jbGFzcyBTdGFjayB7XG4gICAgaGVhcDtcbiAgICBsZW5ndGg7XG4gICAgLy8gcHJpdmF0ZSBjb25zdHJ1Y3RvclxuICAgIHN0YXRpYyAjY29uc3RydWN0aW5nID0gZmFsc2U7XG4gICAgc3RhdGljIGNyZWF0ZShtYXgpIHtcbiAgICAgICAgY29uc3QgSGVhcENscyA9IGdldFVpbnRBcnJheShtYXgpO1xuICAgICAgICBpZiAoIUhlYXBDbHMpXG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIFN0YWNrLiNjb25zdHJ1Y3RpbmcgPSB0cnVlO1xuICAgICAgICBjb25zdCBzID0gbmV3IFN0YWNrKG1heCwgSGVhcENscyk7XG4gICAgICAgIFN0YWNrLiNjb25zdHJ1Y3RpbmcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHM7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKG1heCwgSGVhcENscykge1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgaWYgKCFTdGFjay4jY29uc3RydWN0aW5nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnN0YW50aWF0ZSBTdGFjayB1c2luZyBTdGFjay5jcmVhdGUobiknKTtcbiAgICAgICAgfVxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICB0aGlzLmhlYXAgPSBuZXcgSGVhcENscyhtYXgpO1xuICAgICAgICB0aGlzLmxlbmd0aCA9IDA7XG4gICAgfVxuICAgIHB1c2gobikge1xuICAgICAgICB0aGlzLmhlYXBbdGhpcy5sZW5ndGgrK10gPSBuO1xuICAgIH1cbiAgICBwb3AoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhlYXBbLS10aGlzLmxlbmd0aF07XG4gICAgfVxufVxuLyoqXG4gKiBEZWZhdWx0IGV4cG9ydCwgdGhlIHRoaW5nIHlvdSdyZSB1c2luZyB0aGlzIG1vZHVsZSB0byBnZXQuXG4gKlxuICogVGhlIGBLYCBhbmQgYFZgIHR5cGVzIGRlZmluZSB0aGUga2V5IGFuZCB2YWx1ZSB0eXBlcywgcmVzcGVjdGl2ZWx5LiBUaGVcbiAqIG9wdGlvbmFsIGBGQ2AgdHlwZSBkZWZpbmVzIHRoZSB0eXBlIG9mIHRoZSBgY29udGV4dGAgb2JqZWN0IHBhc3NlZCB0b1xuICogYGNhY2hlLmZldGNoKClgIGFuZCBgY2FjaGUubWVtbygpYC5cbiAqXG4gKiBLZXlzIGFuZCB2YWx1ZXMgKiptdXN0IG5vdCoqIGJlIGBudWxsYCBvciBgdW5kZWZpbmVkYC5cbiAqXG4gKiBBbGwgcHJvcGVydGllcyBmcm9tIHRoZSBvcHRpb25zIG9iamVjdCAod2l0aCB0aGUgZXhjZXB0aW9uIG9mIGBtYXhgLFxuICogYG1heFNpemVgLCBgZmV0Y2hNZXRob2RgLCBgbWVtb01ldGhvZGAsIGBkaXNwb3NlYCBhbmQgYGRpc3Bvc2VBZnRlcmApIGFyZVxuICogYWRkZWQgYXMgbm9ybWFsIHB1YmxpYyBtZW1iZXJzLiAoVGhlIGxpc3RlZCBvcHRpb25zIGFyZSByZWFkLW9ubHkgZ2V0dGVycy4pXG4gKlxuICogQ2hhbmdpbmcgYW55IG9mIHRoZXNlIHdpbGwgYWx0ZXIgdGhlIGRlZmF1bHRzIGZvciBzdWJzZXF1ZW50IG1ldGhvZCBjYWxscy5cbiAqL1xuY2xhc3MgTFJVQ2FjaGUge1xuICAgIC8vIG9wdGlvbnMgdGhhdCBjYW5ub3QgYmUgY2hhbmdlZCB3aXRob3V0IGRpc2FzdGVyXG4gICAgI21heDtcbiAgICAjbWF4U2l6ZTtcbiAgICAjZGlzcG9zZTtcbiAgICAjZGlzcG9zZUFmdGVyO1xuICAgICNmZXRjaE1ldGhvZDtcbiAgICAjbWVtb01ldGhvZDtcbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UudHRsfVxuICAgICAqL1xuICAgIHR0bDtcbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UudHRsUmVzb2x1dGlvbn1cbiAgICAgKi9cbiAgICB0dGxSZXNvbHV0aW9uO1xuICAgIC8qKlxuICAgICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS50dGxBdXRvcHVyZ2V9XG4gICAgICovXG4gICAgdHRsQXV0b3B1cmdlO1xuICAgIC8qKlxuICAgICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS51cGRhdGVBZ2VPbkdldH1cbiAgICAgKi9cbiAgICB1cGRhdGVBZ2VPbkdldDtcbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UudXBkYXRlQWdlT25IYXN9XG4gICAgICovXG4gICAgdXBkYXRlQWdlT25IYXM7XG4gICAgLyoqXG4gICAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLmFsbG93U3RhbGV9XG4gICAgICovXG4gICAgYWxsb3dTdGFsZTtcbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2Uubm9EaXNwb3NlT25TZXR9XG4gICAgICovXG4gICAgbm9EaXNwb3NlT25TZXQ7XG4gICAgLyoqXG4gICAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLm5vVXBkYXRlVFRMfVxuICAgICAqL1xuICAgIG5vVXBkYXRlVFRMO1xuICAgIC8qKlxuICAgICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5tYXhFbnRyeVNpemV9XG4gICAgICovXG4gICAgbWF4RW50cnlTaXplO1xuICAgIC8qKlxuICAgICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5zaXplQ2FsY3VsYXRpb259XG4gICAgICovXG4gICAgc2l6ZUNhbGN1bGF0aW9uO1xuICAgIC8qKlxuICAgICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5ub0RlbGV0ZU9uRmV0Y2hSZWplY3Rpb259XG4gICAgICovXG4gICAgbm9EZWxldGVPbkZldGNoUmVqZWN0aW9uO1xuICAgIC8qKlxuICAgICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5ub0RlbGV0ZU9uU3RhbGVHZXR9XG4gICAgICovXG4gICAgbm9EZWxldGVPblN0YWxlR2V0O1xuICAgIC8qKlxuICAgICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5hbGxvd1N0YWxlT25GZXRjaEFib3J0fVxuICAgICAqL1xuICAgIGFsbG93U3RhbGVPbkZldGNoQWJvcnQ7XG4gICAgLyoqXG4gICAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLmFsbG93U3RhbGVPbkZldGNoUmVqZWN0aW9ufVxuICAgICAqL1xuICAgIGFsbG93U3RhbGVPbkZldGNoUmVqZWN0aW9uO1xuICAgIC8qKlxuICAgICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5pZ25vcmVGZXRjaEFib3J0fVxuICAgICAqL1xuICAgIGlnbm9yZUZldGNoQWJvcnQ7XG4gICAgLy8gY29tcHV0ZWQgcHJvcGVydGllc1xuICAgICNzaXplO1xuICAgICNjYWxjdWxhdGVkU2l6ZTtcbiAgICAja2V5TWFwO1xuICAgICNrZXlMaXN0O1xuICAgICN2YWxMaXN0O1xuICAgICNuZXh0O1xuICAgICNwcmV2O1xuICAgICNoZWFkO1xuICAgICN0YWlsO1xuICAgICNmcmVlO1xuICAgICNkaXNwb3NlZDtcbiAgICAjc2l6ZXM7XG4gICAgI3N0YXJ0cztcbiAgICAjdHRscztcbiAgICAjaGFzRGlzcG9zZTtcbiAgICAjaGFzRmV0Y2hNZXRob2Q7XG4gICAgI2hhc0Rpc3Bvc2VBZnRlcjtcbiAgICAvKipcbiAgICAgKiBEbyBub3QgY2FsbCB0aGlzIG1ldGhvZCB1bmxlc3MgeW91IG5lZWQgdG8gaW5zcGVjdCB0aGVcbiAgICAgKiBpbm5lciB3b3JraW5ncyBvZiB0aGUgY2FjaGUuICBJZiBhbnl0aGluZyByZXR1cm5lZCBieSB0aGlzXG4gICAgICogb2JqZWN0IGlzIG1vZGlmaWVkIGluIGFueSB3YXksIHN0cmFuZ2UgYnJlYWthZ2UgbWF5IG9jY3VyLlxuICAgICAqXG4gICAgICogVGhlc2UgZmllbGRzIGFyZSBwcml2YXRlIGZvciBhIHJlYXNvbiFcbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHN0YXRpYyB1bnNhZmVFeHBvc2VJbnRlcm5hbHMoYykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLy8gcHJvcGVydGllc1xuICAgICAgICAgICAgc3RhcnRzOiBjLiNzdGFydHMsXG4gICAgICAgICAgICB0dGxzOiBjLiN0dGxzLFxuICAgICAgICAgICAgc2l6ZXM6IGMuI3NpemVzLFxuICAgICAgICAgICAga2V5TWFwOiBjLiNrZXlNYXAsXG4gICAgICAgICAgICBrZXlMaXN0OiBjLiNrZXlMaXN0LFxuICAgICAgICAgICAgdmFsTGlzdDogYy4jdmFsTGlzdCxcbiAgICAgICAgICAgIG5leHQ6IGMuI25leHQsXG4gICAgICAgICAgICBwcmV2OiBjLiNwcmV2LFxuICAgICAgICAgICAgZ2V0IGhlYWQoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGMuI2hlYWQ7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0IHRhaWwoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGMuI3RhaWw7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZnJlZTogYy4jZnJlZSxcbiAgICAgICAgICAgIC8vIG1ldGhvZHNcbiAgICAgICAgICAgIGlzQmFja2dyb3VuZEZldGNoOiAocCkgPT4gYy4jaXNCYWNrZ3JvdW5kRmV0Y2gocCksXG4gICAgICAgICAgICBiYWNrZ3JvdW5kRmV0Y2g6IChrLCBpbmRleCwgb3B0aW9ucywgY29udGV4dCkgPT4gYy4jYmFja2dyb3VuZEZldGNoKGssIGluZGV4LCBvcHRpb25zLCBjb250ZXh0KSxcbiAgICAgICAgICAgIG1vdmVUb1RhaWw6IChpbmRleCkgPT4gYy4jbW92ZVRvVGFpbChpbmRleCksXG4gICAgICAgICAgICBpbmRleGVzOiAob3B0aW9ucykgPT4gYy4jaW5kZXhlcyhvcHRpb25zKSxcbiAgICAgICAgICAgIHJpbmRleGVzOiAob3B0aW9ucykgPT4gYy4jcmluZGV4ZXMob3B0aW9ucyksXG4gICAgICAgICAgICBpc1N0YWxlOiAoaW5kZXgpID0+IGMuI2lzU3RhbGUoaW5kZXgpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICAvLyBQcm90ZWN0ZWQgcmVhZC1vbmx5IG1lbWJlcnNcbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UubWF4fSAocmVhZC1vbmx5KVxuICAgICAqL1xuICAgIGdldCBtYXgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNtYXg7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5tYXhTaXplfSAocmVhZC1vbmx5KVxuICAgICAqL1xuICAgIGdldCBtYXhTaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jbWF4U2l6ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIHRvdGFsIGNvbXB1dGVkIHNpemUgb2YgaXRlbXMgaW4gdGhlIGNhY2hlIChyZWFkLW9ubHkpXG4gICAgICovXG4gICAgZ2V0IGNhbGN1bGF0ZWRTaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jY2FsY3VsYXRlZFNpemU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2YgaXRlbXMgc3RvcmVkIGluIHRoZSBjYWNoZSAocmVhZC1vbmx5KVxuICAgICAqL1xuICAgIGdldCBzaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jc2l6ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLmZldGNoTWV0aG9kfSAocmVhZC1vbmx5KVxuICAgICAqL1xuICAgIGdldCBmZXRjaE1ldGhvZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2ZldGNoTWV0aG9kO1xuICAgIH1cbiAgICBnZXQgbWVtb01ldGhvZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI21lbW9NZXRob2Q7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5kaXNwb3NlfSAocmVhZC1vbmx5KVxuICAgICAqL1xuICAgIGdldCBkaXNwb3NlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jZGlzcG9zZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLmRpc3Bvc2VBZnRlcn0gKHJlYWQtb25seSlcbiAgICAgKi9cbiAgICBnZXQgZGlzcG9zZUFmdGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jZGlzcG9zZUFmdGVyO1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHsgbWF4ID0gMCwgdHRsLCB0dGxSZXNvbHV0aW9uID0gMSwgdHRsQXV0b3B1cmdlLCB1cGRhdGVBZ2VPbkdldCwgdXBkYXRlQWdlT25IYXMsIGFsbG93U3RhbGUsIGRpc3Bvc2UsIGRpc3Bvc2VBZnRlciwgbm9EaXNwb3NlT25TZXQsIG5vVXBkYXRlVFRMLCBtYXhTaXplID0gMCwgbWF4RW50cnlTaXplID0gMCwgc2l6ZUNhbGN1bGF0aW9uLCBmZXRjaE1ldGhvZCwgbWVtb01ldGhvZCwgbm9EZWxldGVPbkZldGNoUmVqZWN0aW9uLCBub0RlbGV0ZU9uU3RhbGVHZXQsIGFsbG93U3RhbGVPbkZldGNoUmVqZWN0aW9uLCBhbGxvd1N0YWxlT25GZXRjaEFib3J0LCBpZ25vcmVGZXRjaEFib3J0LCB9ID0gb3B0aW9ucztcbiAgICAgICAgaWYgKG1heCAhPT0gMCAmJiAhaXNQb3NJbnQobWF4KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbWF4IG9wdGlvbiBtdXN0IGJlIGEgbm9ubmVnYXRpdmUgaW50ZWdlcicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IFVpbnRBcnJheSA9IG1heCA/IGdldFVpbnRBcnJheShtYXgpIDogQXJyYXk7XG4gICAgICAgIGlmICghVWludEFycmF5KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgbWF4IHZhbHVlOiAnICsgbWF4KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiNtYXggPSBtYXg7XG4gICAgICAgIHRoaXMuI21heFNpemUgPSBtYXhTaXplO1xuICAgICAgICB0aGlzLm1heEVudHJ5U2l6ZSA9IG1heEVudHJ5U2l6ZSB8fCB0aGlzLiNtYXhTaXplO1xuICAgICAgICB0aGlzLnNpemVDYWxjdWxhdGlvbiA9IHNpemVDYWxjdWxhdGlvbjtcbiAgICAgICAgaWYgKHRoaXMuc2l6ZUNhbGN1bGF0aW9uKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuI21heFNpemUgJiYgIXRoaXMubWF4RW50cnlTaXplKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignY2Fubm90IHNldCBzaXplQ2FsY3VsYXRpb24gd2l0aG91dCBzZXR0aW5nIG1heFNpemUgb3IgbWF4RW50cnlTaXplJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2l6ZUNhbGN1bGF0aW9uICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc2l6ZUNhbGN1bGF0aW9uIHNldCB0byBub24tZnVuY3Rpb24nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobWVtb01ldGhvZCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICB0eXBlb2YgbWVtb01ldGhvZCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbWVtb01ldGhvZCBtdXN0IGJlIGEgZnVuY3Rpb24gaWYgZGVmaW5lZCcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuI21lbW9NZXRob2QgPSBtZW1vTWV0aG9kO1xuICAgICAgICBpZiAoZmV0Y2hNZXRob2QgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgdHlwZW9mIGZldGNoTWV0aG9kICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdmZXRjaE1ldGhvZCBtdXN0IGJlIGEgZnVuY3Rpb24gaWYgc3BlY2lmaWVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4jZmV0Y2hNZXRob2QgPSBmZXRjaE1ldGhvZDtcbiAgICAgICAgdGhpcy4jaGFzRmV0Y2hNZXRob2QgPSAhIWZldGNoTWV0aG9kO1xuICAgICAgICB0aGlzLiNrZXlNYXAgPSBuZXcgTWFwKCk7XG4gICAgICAgIHRoaXMuI2tleUxpc3QgPSBuZXcgQXJyYXkobWF4KS5maWxsKHVuZGVmaW5lZCk7XG4gICAgICAgIHRoaXMuI3ZhbExpc3QgPSBuZXcgQXJyYXkobWF4KS5maWxsKHVuZGVmaW5lZCk7XG4gICAgICAgIHRoaXMuI25leHQgPSBuZXcgVWludEFycmF5KG1heCk7XG4gICAgICAgIHRoaXMuI3ByZXYgPSBuZXcgVWludEFycmF5KG1heCk7XG4gICAgICAgIHRoaXMuI2hlYWQgPSAwO1xuICAgICAgICB0aGlzLiN0YWlsID0gMDtcbiAgICAgICAgdGhpcy4jZnJlZSA9IFN0YWNrLmNyZWF0ZShtYXgpO1xuICAgICAgICB0aGlzLiNzaXplID0gMDtcbiAgICAgICAgdGhpcy4jY2FsY3VsYXRlZFNpemUgPSAwO1xuICAgICAgICBpZiAodHlwZW9mIGRpc3Bvc2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRoaXMuI2Rpc3Bvc2UgPSBkaXNwb3NlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgZGlzcG9zZUFmdGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aGlzLiNkaXNwb3NlQWZ0ZXIgPSBkaXNwb3NlQWZ0ZXI7XG4gICAgICAgICAgICB0aGlzLiNkaXNwb3NlZCA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy4jZGlzcG9zZUFmdGVyID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy4jZGlzcG9zZWQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4jaGFzRGlzcG9zZSA9ICEhdGhpcy4jZGlzcG9zZTtcbiAgICAgICAgdGhpcy4jaGFzRGlzcG9zZUFmdGVyID0gISF0aGlzLiNkaXNwb3NlQWZ0ZXI7XG4gICAgICAgIHRoaXMubm9EaXNwb3NlT25TZXQgPSAhIW5vRGlzcG9zZU9uU2V0O1xuICAgICAgICB0aGlzLm5vVXBkYXRlVFRMID0gISFub1VwZGF0ZVRUTDtcbiAgICAgICAgdGhpcy5ub0RlbGV0ZU9uRmV0Y2hSZWplY3Rpb24gPSAhIW5vRGVsZXRlT25GZXRjaFJlamVjdGlvbjtcbiAgICAgICAgdGhpcy5hbGxvd1N0YWxlT25GZXRjaFJlamVjdGlvbiA9ICEhYWxsb3dTdGFsZU9uRmV0Y2hSZWplY3Rpb247XG4gICAgICAgIHRoaXMuYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydCA9ICEhYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydDtcbiAgICAgICAgdGhpcy5pZ25vcmVGZXRjaEFib3J0ID0gISFpZ25vcmVGZXRjaEFib3J0O1xuICAgICAgICAvLyBOQjogbWF4RW50cnlTaXplIGlzIHNldCB0byBtYXhTaXplIGlmIGl0J3Mgc2V0XG4gICAgICAgIGlmICh0aGlzLm1heEVudHJ5U2l6ZSAhPT0gMCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuI21heFNpemUgIT09IDApIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzUG9zSW50KHRoaXMuI21heFNpemUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ21heFNpemUgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgaWYgc3BlY2lmaWVkJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpc1Bvc0ludCh0aGlzLm1heEVudHJ5U2l6ZSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdtYXhFbnRyeVNpemUgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgaWYgc3BlY2lmaWVkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLiNpbml0aWFsaXplU2l6ZVRyYWNraW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hbGxvd1N0YWxlID0gISFhbGxvd1N0YWxlO1xuICAgICAgICB0aGlzLm5vRGVsZXRlT25TdGFsZUdldCA9ICEhbm9EZWxldGVPblN0YWxlR2V0O1xuICAgICAgICB0aGlzLnVwZGF0ZUFnZU9uR2V0ID0gISF1cGRhdGVBZ2VPbkdldDtcbiAgICAgICAgdGhpcy51cGRhdGVBZ2VPbkhhcyA9ICEhdXBkYXRlQWdlT25IYXM7XG4gICAgICAgIHRoaXMudHRsUmVzb2x1dGlvbiA9XG4gICAgICAgICAgICBpc1Bvc0ludCh0dGxSZXNvbHV0aW9uKSB8fCB0dGxSZXNvbHV0aW9uID09PSAwXG4gICAgICAgICAgICAgICAgPyB0dGxSZXNvbHV0aW9uXG4gICAgICAgICAgICAgICAgOiAxO1xuICAgICAgICB0aGlzLnR0bEF1dG9wdXJnZSA9ICEhdHRsQXV0b3B1cmdlO1xuICAgICAgICB0aGlzLnR0bCA9IHR0bCB8fCAwO1xuICAgICAgICBpZiAodGhpcy50dGwpIHtcbiAgICAgICAgICAgIGlmICghaXNQb3NJbnQodGhpcy50dGwpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndHRsIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIGlmIHNwZWNpZmllZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy4jaW5pdGlhbGl6ZVRUTFRyYWNraW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZG8gbm90IGFsbG93IGNvbXBsZXRlbHkgdW5ib3VuZGVkIGNhY2hlc1xuICAgICAgICBpZiAodGhpcy4jbWF4ID09PSAwICYmIHRoaXMudHRsID09PSAwICYmIHRoaXMuI21heFNpemUgPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0F0IGxlYXN0IG9uZSBvZiBtYXgsIG1heFNpemUsIG9yIHR0bCBpcyByZXF1aXJlZCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy50dGxBdXRvcHVyZ2UgJiYgIXRoaXMuI21heCAmJiAhdGhpcy4jbWF4U2l6ZSkge1xuICAgICAgICAgICAgY29uc3QgY29kZSA9ICdMUlVfQ0FDSEVfVU5CT1VOREVEJztcbiAgICAgICAgICAgIGlmIChzaG91bGRXYXJuKGNvZGUpKSB7XG4gICAgICAgICAgICAgICAgd2FybmVkLmFkZChjb2RlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBtc2cgPSAnVFRMIGNhY2hpbmcgd2l0aG91dCB0dGxBdXRvcHVyZ2UsIG1heCwgb3IgbWF4U2l6ZSBjYW4gJyArXG4gICAgICAgICAgICAgICAgICAgICdyZXN1bHQgaW4gdW5ib3VuZGVkIG1lbW9yeSBjb25zdW1wdGlvbi4nO1xuICAgICAgICAgICAgICAgIGVtaXRXYXJuaW5nKG1zZywgJ1VuYm91bmRlZENhY2hlV2FybmluZycsIGNvZGUsIExSVUNhY2hlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBtcyBsZWZ0IGluIHRoZSBpdGVtJ3MgVFRMLiBJZiBpdGVtIGlzIG5vdCBpbiBjYWNoZSxcbiAgICAgKiByZXR1cm5zIGAwYC4gUmV0dXJucyBgSW5maW5pdHlgIGlmIGl0ZW0gaXMgaW4gY2FjaGUgd2l0aG91dCBhIGRlZmluZWQgVFRMLlxuICAgICAqL1xuICAgIGdldFJlbWFpbmluZ1RUTChrZXkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2tleU1hcC5oYXMoa2V5KSA/IEluZmluaXR5IDogMDtcbiAgICB9XG4gICAgI2luaXRpYWxpemVUVExUcmFja2luZygpIHtcbiAgICAgICAgY29uc3QgdHRscyA9IG5ldyBaZXJvQXJyYXkodGhpcy4jbWF4KTtcbiAgICAgICAgY29uc3Qgc3RhcnRzID0gbmV3IFplcm9BcnJheSh0aGlzLiNtYXgpO1xuICAgICAgICB0aGlzLiN0dGxzID0gdHRscztcbiAgICAgICAgdGhpcy4jc3RhcnRzID0gc3RhcnRzO1xuICAgICAgICB0aGlzLiNzZXRJdGVtVFRMID0gKGluZGV4LCB0dGwsIHN0YXJ0ID0gcGVyZi5ub3coKSkgPT4ge1xuICAgICAgICAgICAgc3RhcnRzW2luZGV4XSA9IHR0bCAhPT0gMCA/IHN0YXJ0IDogMDtcbiAgICAgICAgICAgIHR0bHNbaW5kZXhdID0gdHRsO1xuICAgICAgICAgICAgaWYgKHR0bCAhPT0gMCAmJiB0aGlzLnR0bEF1dG9wdXJnZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuI2lzU3RhbGUoaW5kZXgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiNkZWxldGUodGhpcy4ja2V5TGlzdFtpbmRleF0sICdleHBpcmUnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIHR0bCArIDEpO1xuICAgICAgICAgICAgICAgIC8vIHVucmVmKCkgbm90IHN1cHBvcnRlZCBvbiBhbGwgcGxhdGZvcm1zXG4gICAgICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICAgICAgaWYgKHQudW5yZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgdC51bnJlZigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLiN1cGRhdGVJdGVtQWdlID0gaW5kZXggPT4ge1xuICAgICAgICAgICAgc3RhcnRzW2luZGV4XSA9IHR0bHNbaW5kZXhdICE9PSAwID8gcGVyZi5ub3coKSA6IDA7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuI3N0YXR1c1RUTCA9IChzdGF0dXMsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAodHRsc1tpbmRleF0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0dGwgPSB0dGxzW2luZGV4XTtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydCA9IHN0YXJ0c1tpbmRleF07XG4gICAgICAgICAgICAgICAgLyogYzggaWdub3JlIG5leHQgKi9cbiAgICAgICAgICAgICAgICBpZiAoIXR0bCB8fCAhc3RhcnQpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBzdGF0dXMudHRsID0gdHRsO1xuICAgICAgICAgICAgICAgIHN0YXR1cy5zdGFydCA9IHN0YXJ0O1xuICAgICAgICAgICAgICAgIHN0YXR1cy5ub3cgPSBjYWNoZWROb3cgfHwgZ2V0Tm93KCk7XG4gICAgICAgICAgICAgICAgY29uc3QgYWdlID0gc3RhdHVzLm5vdyAtIHN0YXJ0O1xuICAgICAgICAgICAgICAgIHN0YXR1cy5yZW1haW5pbmdUVEwgPSB0dGwgLSBhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIC8vIGRlYm91bmNlIGNhbGxzIHRvIHBlcmYubm93KCkgdG8gMXMgc28gd2UncmUgbm90IGhpdHRpbmdcbiAgICAgICAgLy8gdGhhdCBjb3N0bHkgY2FsbCByZXBlYXRlZGx5LlxuICAgICAgICBsZXQgY2FjaGVkTm93ID0gMDtcbiAgICAgICAgY29uc3QgZ2V0Tm93ID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbiA9IHBlcmYubm93KCk7XG4gICAgICAgICAgICBpZiAodGhpcy50dGxSZXNvbHV0aW9uID4gMCkge1xuICAgICAgICAgICAgICAgIGNhY2hlZE5vdyA9IG47XG4gICAgICAgICAgICAgICAgY29uc3QgdCA9IHNldFRpbWVvdXQoKCkgPT4gKGNhY2hlZE5vdyA9IDApLCB0aGlzLnR0bFJlc29sdXRpb24pO1xuICAgICAgICAgICAgICAgIC8vIG5vdCBhdmFpbGFibGUgb24gYWxsIHBsYXRmb3Jtc1xuICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICAgICAgICAgIGlmICh0LnVucmVmKSB7XG4gICAgICAgICAgICAgICAgICAgIHQudW5yZWYoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmdldFJlbWFpbmluZ1RUTCA9IGtleSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuI2tleU1hcC5nZXQoa2V5KTtcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB0dGwgPSB0dGxzW2luZGV4XTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gc3RhcnRzW2luZGV4XTtcbiAgICAgICAgICAgIGlmICghdHRsIHx8ICFzdGFydCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBJbmZpbml0eTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGFnZSA9IChjYWNoZWROb3cgfHwgZ2V0Tm93KCkpIC0gc3RhcnQ7XG4gICAgICAgICAgICByZXR1cm4gdHRsIC0gYWdlO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLiNpc1N0YWxlID0gaW5kZXggPT4ge1xuICAgICAgICAgICAgY29uc3QgcyA9IHN0YXJ0c1tpbmRleF07XG4gICAgICAgICAgICBjb25zdCB0ID0gdHRsc1tpbmRleF07XG4gICAgICAgICAgICByZXR1cm4gISF0ICYmICEhcyAmJiAoY2FjaGVkTm93IHx8IGdldE5vdygpKSAtIHMgPiB0O1xuICAgICAgICB9O1xuICAgIH1cbiAgICAvLyBjb25kaXRpb25hbGx5IHNldCBwcml2YXRlIG1ldGhvZHMgcmVsYXRlZCB0byBUVExcbiAgICAjdXBkYXRlSXRlbUFnZSA9ICgpID0+IHsgfTtcbiAgICAjc3RhdHVzVFRMID0gKCkgPT4geyB9O1xuICAgICNzZXRJdGVtVFRMID0gKCkgPT4geyB9O1xuICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgI2lzU3RhbGUgPSAoKSA9PiBmYWxzZTtcbiAgICAjaW5pdGlhbGl6ZVNpemVUcmFja2luZygpIHtcbiAgICAgICAgY29uc3Qgc2l6ZXMgPSBuZXcgWmVyb0FycmF5KHRoaXMuI21heCk7XG4gICAgICAgIHRoaXMuI2NhbGN1bGF0ZWRTaXplID0gMDtcbiAgICAgICAgdGhpcy4jc2l6ZXMgPSBzaXplcztcbiAgICAgICAgdGhpcy4jcmVtb3ZlSXRlbVNpemUgPSBpbmRleCA9PiB7XG4gICAgICAgICAgICB0aGlzLiNjYWxjdWxhdGVkU2l6ZSAtPSBzaXplc1tpbmRleF07XG4gICAgICAgICAgICBzaXplc1tpbmRleF0gPSAwO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLiNyZXF1aXJlU2l6ZSA9IChrLCB2LCBzaXplLCBzaXplQ2FsY3VsYXRpb24pID0+IHtcbiAgICAgICAgICAgIC8vIHByb3Zpc2lvbmFsbHkgYWNjZXB0IGJhY2tncm91bmQgZmV0Y2hlcy5cbiAgICAgICAgICAgIC8vIGFjdHVhbCB2YWx1ZSBzaXplIHdpbGwgYmUgY2hlY2tlZCB3aGVuIHRoZXkgcmV0dXJuLlxuICAgICAgICAgICAgaWYgKHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHYpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWlzUG9zSW50KHNpemUpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNpemVDYWxjdWxhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNpemVDYWxjdWxhdGlvbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc2l6ZUNhbGN1bGF0aW9uIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHNpemUgPSBzaXplQ2FsY3VsYXRpb24odiwgayk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNQb3NJbnQoc2l6ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3NpemVDYWxjdWxhdGlvbiByZXR1cm4gaW52YWxpZCAoZXhwZWN0IHBvc2l0aXZlIGludGVnZXIpJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludmFsaWQgc2l6ZSB2YWx1ZSAobXVzdCBiZSBwb3NpdGl2ZSBpbnRlZ2VyKS4gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnV2hlbiBtYXhTaXplIG9yIG1heEVudHJ5U2l6ZSBpcyB1c2VkLCBzaXplQ2FsY3VsYXRpb24gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnb3Igc2l6ZSBtdXN0IGJlIHNldC4nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc2l6ZTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy4jYWRkSXRlbVNpemUgPSAoaW5kZXgsIHNpemUsIHN0YXR1cykgPT4ge1xuICAgICAgICAgICAgc2l6ZXNbaW5kZXhdID0gc2l6ZTtcbiAgICAgICAgICAgIGlmICh0aGlzLiNtYXhTaXplKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWF4U2l6ZSA9IHRoaXMuI21heFNpemUgLSBzaXplc1tpbmRleF07XG4gICAgICAgICAgICAgICAgd2hpbGUgKHRoaXMuI2NhbGN1bGF0ZWRTaXplID4gbWF4U2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiNldmljdCh0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLiNjYWxjdWxhdGVkU2l6ZSArPSBzaXplc1tpbmRleF07XG4gICAgICAgICAgICBpZiAoc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgc3RhdHVzLmVudHJ5U2l6ZSA9IHNpemU7XG4gICAgICAgICAgICAgICAgc3RhdHVzLnRvdGFsQ2FsY3VsYXRlZFNpemUgPSB0aGlzLiNjYWxjdWxhdGVkU2l6ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgI3JlbW92ZUl0ZW1TaXplID0gX2kgPT4geyB9O1xuICAgICNhZGRJdGVtU2l6ZSA9IChfaSwgX3MsIF9zdCkgPT4geyB9O1xuICAgICNyZXF1aXJlU2l6ZSA9IChfaywgX3YsIHNpemUsIHNpemVDYWxjdWxhdGlvbikgPT4ge1xuICAgICAgICBpZiAoc2l6ZSB8fCBzaXplQ2FsY3VsYXRpb24pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2Nhbm5vdCBzZXQgc2l6ZSB3aXRob3V0IHNldHRpbmcgbWF4U2l6ZSBvciBtYXhFbnRyeVNpemUgb24gY2FjaGUnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMDtcbiAgICB9O1xuICAgICojaW5kZXhlcyh7IGFsbG93U3RhbGUgPSB0aGlzLmFsbG93U3RhbGUgfSA9IHt9KSB7XG4gICAgICAgIGlmICh0aGlzLiNzaXplKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gdGhpcy4jdGFpbDsgdHJ1ZTspIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuI2lzVmFsaWRJbmRleChpKSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGFsbG93U3RhbGUgfHwgIXRoaXMuI2lzU3RhbGUoaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGkgPT09IHRoaXMuI2hlYWQpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpID0gdGhpcy4jcHJldltpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgKiNyaW5kZXhlcyh7IGFsbG93U3RhbGUgPSB0aGlzLmFsbG93U3RhbGUgfSA9IHt9KSB7XG4gICAgICAgIGlmICh0aGlzLiNzaXplKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gdGhpcy4jaGVhZDsgdHJ1ZTspIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuI2lzVmFsaWRJbmRleChpKSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGFsbG93U3RhbGUgfHwgIXRoaXMuI2lzU3RhbGUoaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGkgPT09IHRoaXMuI3RhaWwpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpID0gdGhpcy4jbmV4dFtpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgI2lzVmFsaWRJbmRleChpbmRleCkge1xuICAgICAgICByZXR1cm4gKGluZGV4ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIHRoaXMuI2tleU1hcC5nZXQodGhpcy4ja2V5TGlzdFtpbmRleF0pID09PSBpbmRleCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiBhIGdlbmVyYXRvciB5aWVsZGluZyBgW2tleSwgdmFsdWVdYCBwYWlycyxcbiAgICAgKiBpbiBvcmRlciBmcm9tIG1vc3QgcmVjZW50bHkgdXNlZCB0byBsZWFzdCByZWNlbnRseSB1c2VkLlxuICAgICAqL1xuICAgICplbnRyaWVzKCkge1xuICAgICAgICBmb3IgKGNvbnN0IGkgb2YgdGhpcy4jaW5kZXhlcygpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy4jdmFsTGlzdFtpXSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgdGhpcy4ja2V5TGlzdFtpXSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgIXRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHRoaXMuI3ZhbExpc3RbaV0pKSB7XG4gICAgICAgICAgICAgICAgeWllbGQgW3RoaXMuI2tleUxpc3RbaV0sIHRoaXMuI3ZhbExpc3RbaV1dO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEludmVyc2Ugb3JkZXIgdmVyc2lvbiBvZiB7QGxpbmsgTFJVQ2FjaGUuZW50cmllc31cbiAgICAgKlxuICAgICAqIFJldHVybiBhIGdlbmVyYXRvciB5aWVsZGluZyBgW2tleSwgdmFsdWVdYCBwYWlycyxcbiAgICAgKiBpbiBvcmRlciBmcm9tIGxlYXN0IHJlY2VudGx5IHVzZWQgdG8gbW9zdCByZWNlbnRseSB1c2VkLlxuICAgICAqL1xuICAgICpyZW50cmllcygpIHtcbiAgICAgICAgZm9yIChjb25zdCBpIG9mIHRoaXMuI3JpbmRleGVzKCkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLiN2YWxMaXN0W2ldICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICB0aGlzLiNrZXlMaXN0W2ldICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAhdGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2godGhpcy4jdmFsTGlzdFtpXSkpIHtcbiAgICAgICAgICAgICAgICB5aWVsZCBbdGhpcy4ja2V5TGlzdFtpXSwgdGhpcy4jdmFsTGlzdFtpXV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIGEgZ2VuZXJhdG9yIHlpZWxkaW5nIHRoZSBrZXlzIGluIHRoZSBjYWNoZSxcbiAgICAgKiBpbiBvcmRlciBmcm9tIG1vc3QgcmVjZW50bHkgdXNlZCB0byBsZWFzdCByZWNlbnRseSB1c2VkLlxuICAgICAqL1xuICAgICprZXlzKCkge1xuICAgICAgICBmb3IgKGNvbnN0IGkgb2YgdGhpcy4jaW5kZXhlcygpKSB7XG4gICAgICAgICAgICBjb25zdCBrID0gdGhpcy4ja2V5TGlzdFtpXTtcbiAgICAgICAgICAgIGlmIChrICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAhdGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2godGhpcy4jdmFsTGlzdFtpXSkpIHtcbiAgICAgICAgICAgICAgICB5aWVsZCBrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEludmVyc2Ugb3JkZXIgdmVyc2lvbiBvZiB7QGxpbmsgTFJVQ2FjaGUua2V5c31cbiAgICAgKlxuICAgICAqIFJldHVybiBhIGdlbmVyYXRvciB5aWVsZGluZyB0aGUga2V5cyBpbiB0aGUgY2FjaGUsXG4gICAgICogaW4gb3JkZXIgZnJvbSBsZWFzdCByZWNlbnRseSB1c2VkIHRvIG1vc3QgcmVjZW50bHkgdXNlZC5cbiAgICAgKi9cbiAgICAqcmtleXMoKSB7XG4gICAgICAgIGZvciAoY29uc3QgaSBvZiB0aGlzLiNyaW5kZXhlcygpKSB7XG4gICAgICAgICAgICBjb25zdCBrID0gdGhpcy4ja2V5TGlzdFtpXTtcbiAgICAgICAgICAgIGlmIChrICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAhdGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2godGhpcy4jdmFsTGlzdFtpXSkpIHtcbiAgICAgICAgICAgICAgICB5aWVsZCBrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiBhIGdlbmVyYXRvciB5aWVsZGluZyB0aGUgdmFsdWVzIGluIHRoZSBjYWNoZSxcbiAgICAgKiBpbiBvcmRlciBmcm9tIG1vc3QgcmVjZW50bHkgdXNlZCB0byBsZWFzdCByZWNlbnRseSB1c2VkLlxuICAgICAqL1xuICAgICp2YWx1ZXMoKSB7XG4gICAgICAgIGZvciAoY29uc3QgaSBvZiB0aGlzLiNpbmRleGVzKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHYgPSB0aGlzLiN2YWxMaXN0W2ldO1xuICAgICAgICAgICAgaWYgKHYgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICF0aGlzLiNpc0JhY2tncm91bmRGZXRjaCh0aGlzLiN2YWxMaXN0W2ldKSkge1xuICAgICAgICAgICAgICAgIHlpZWxkIHRoaXMuI3ZhbExpc3RbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogSW52ZXJzZSBvcmRlciB2ZXJzaW9uIG9mIHtAbGluayBMUlVDYWNoZS52YWx1ZXN9XG4gICAgICpcbiAgICAgKiBSZXR1cm4gYSBnZW5lcmF0b3IgeWllbGRpbmcgdGhlIHZhbHVlcyBpbiB0aGUgY2FjaGUsXG4gICAgICogaW4gb3JkZXIgZnJvbSBsZWFzdCByZWNlbnRseSB1c2VkIHRvIG1vc3QgcmVjZW50bHkgdXNlZC5cbiAgICAgKi9cbiAgICAqcnZhbHVlcygpIHtcbiAgICAgICAgZm9yIChjb25zdCBpIG9mIHRoaXMuI3JpbmRleGVzKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHYgPSB0aGlzLiN2YWxMaXN0W2ldO1xuICAgICAgICAgICAgaWYgKHYgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICF0aGlzLiNpc0JhY2tncm91bmRGZXRjaCh0aGlzLiN2YWxMaXN0W2ldKSkge1xuICAgICAgICAgICAgICAgIHlpZWxkIHRoaXMuI3ZhbExpc3RbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogSXRlcmF0aW5nIG92ZXIgdGhlIGNhY2hlIGl0c2VsZiB5aWVsZHMgdGhlIHNhbWUgcmVzdWx0cyBhc1xuICAgICAqIHtAbGluayBMUlVDYWNoZS5lbnRyaWVzfVxuICAgICAqL1xuICAgIFtTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnRyaWVzKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEEgU3RyaW5nIHZhbHVlIHRoYXQgaXMgdXNlZCBpbiB0aGUgY3JlYXRpb24gb2YgdGhlIGRlZmF1bHQgc3RyaW5nXG4gICAgICogZGVzY3JpcHRpb24gb2YgYW4gb2JqZWN0LiBDYWxsZWQgYnkgdGhlIGJ1aWx0LWluIG1ldGhvZFxuICAgICAqIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYC5cbiAgICAgKi9cbiAgICBbU3ltYm9sLnRvU3RyaW5nVGFnXSA9ICdMUlVDYWNoZSc7XG4gICAgLyoqXG4gICAgICogRmluZCBhIHZhbHVlIGZvciB3aGljaCB0aGUgc3VwcGxpZWQgZm4gbWV0aG9kIHJldHVybnMgYSB0cnV0aHkgdmFsdWUsXG4gICAgICogc2ltaWxhciB0byBgQXJyYXkuZmluZCgpYC4gZm4gaXMgY2FsbGVkIGFzIGBmbih2YWx1ZSwga2V5LCBjYWNoZSlgLlxuICAgICAqL1xuICAgIGZpbmQoZm4sIGdldE9wdGlvbnMgPSB7fSkge1xuICAgICAgICBmb3IgKGNvbnN0IGkgb2YgdGhpcy4jaW5kZXhlcygpKSB7XG4gICAgICAgICAgICBjb25zdCB2ID0gdGhpcy4jdmFsTGlzdFtpXTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2godilcbiAgICAgICAgICAgICAgICA/IHYuX19zdGFsZVdoaWxlRmV0Y2hpbmdcbiAgICAgICAgICAgICAgICA6IHY7XG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGlmIChmbih2YWx1ZSwgdGhpcy4ja2V5TGlzdFtpXSwgdGhpcykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXQodGhpcy4ja2V5TGlzdFtpXSwgZ2V0T3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2FsbCB0aGUgc3VwcGxpZWQgZnVuY3Rpb24gb24gZWFjaCBpdGVtIGluIHRoZSBjYWNoZSwgaW4gb3JkZXIgZnJvbSBtb3N0XG4gICAgICogcmVjZW50bHkgdXNlZCB0byBsZWFzdCByZWNlbnRseSB1c2VkLlxuICAgICAqXG4gICAgICogYGZuYCBpcyBjYWxsZWQgYXMgYGZuKHZhbHVlLCBrZXksIGNhY2hlKWAuXG4gICAgICpcbiAgICAgKiBJZiBgdGhpc3BgIGlzIHByb3ZpZGVkLCBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBpbiB0aGUgYHRoaXNgLWNvbnRleHQgb2ZcbiAgICAgKiB0aGUgcHJvdmlkZWQgb2JqZWN0LCBvciB0aGUgY2FjaGUgaWYgbm8gYHRoaXNwYCBvYmplY3QgaXMgcHJvdmlkZWQuXG4gICAgICpcbiAgICAgKiBEb2VzIG5vdCB1cGRhdGUgYWdlIG9yIHJlY2VudHkgb2YgdXNlLCBvciBpdGVyYXRlIG92ZXIgc3RhbGUgdmFsdWVzLlxuICAgICAqL1xuICAgIGZvckVhY2goZm4sIHRoaXNwID0gdGhpcykge1xuICAgICAgICBmb3IgKGNvbnN0IGkgb2YgdGhpcy4jaW5kZXhlcygpKSB7XG4gICAgICAgICAgICBjb25zdCB2ID0gdGhpcy4jdmFsTGlzdFtpXTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2godilcbiAgICAgICAgICAgICAgICA/IHYuX19zdGFsZVdoaWxlRmV0Y2hpbmdcbiAgICAgICAgICAgICAgICA6IHY7XG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGZuLmNhbGwodGhpc3AsIHZhbHVlLCB0aGlzLiNrZXlMaXN0W2ldLCB0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyB7QGxpbmsgTFJVQ2FjaGUuZm9yRWFjaH0gYnV0IGl0ZW1zIGFyZSBpdGVyYXRlZCBvdmVyIGluXG4gICAgICogcmV2ZXJzZSBvcmRlci4gIChpZSwgbGVzcyByZWNlbnRseSB1c2VkIGl0ZW1zIGFyZSBpdGVyYXRlZCBvdmVyIGZpcnN0LilcbiAgICAgKi9cbiAgICByZm9yRWFjaChmbiwgdGhpc3AgPSB0aGlzKSB7XG4gICAgICAgIGZvciAoY29uc3QgaSBvZiB0aGlzLiNyaW5kZXhlcygpKSB7XG4gICAgICAgICAgICBjb25zdCB2ID0gdGhpcy4jdmFsTGlzdFtpXTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2godilcbiAgICAgICAgICAgICAgICA/IHYuX19zdGFsZVdoaWxlRmV0Y2hpbmdcbiAgICAgICAgICAgICAgICA6IHY7XG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGZuLmNhbGwodGhpc3AsIHZhbHVlLCB0aGlzLiNrZXlMaXN0W2ldLCB0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWxldGUgYW55IHN0YWxlIGVudHJpZXMuIFJldHVybnMgdHJ1ZSBpZiBhbnl0aGluZyB3YXMgcmVtb3ZlZCxcbiAgICAgKiBmYWxzZSBvdGhlcndpc2UuXG4gICAgICovXG4gICAgcHVyZ2VTdGFsZSgpIHtcbiAgICAgICAgbGV0IGRlbGV0ZWQgPSBmYWxzZTtcbiAgICAgICAgZm9yIChjb25zdCBpIG9mIHRoaXMuI3JpbmRleGVzKHsgYWxsb3dTdGFsZTogdHJ1ZSB9KSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuI2lzU3RhbGUoaSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiNkZWxldGUodGhpcy4ja2V5TGlzdFtpXSwgJ2V4cGlyZScpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWxldGVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGV4dGVuZGVkIGluZm8gYWJvdXQgYSBnaXZlbiBlbnRyeSwgdG8gZ2V0IGl0cyB2YWx1ZSwgc2l6ZSwgYW5kXG4gICAgICogVFRMIGluZm8gc2ltdWx0YW5lb3VzbHkuIFJldHVybnMgYHVuZGVmaW5lZGAgaWYgdGhlIGtleSBpcyBub3QgcHJlc2VudC5cbiAgICAgKlxuICAgICAqIFVubGlrZSB7QGxpbmsgTFJVQ2FjaGUjZHVtcH0sIHdoaWNoIGlzIGRlc2lnbmVkIHRvIGJlIHBvcnRhYmxlIGFuZCBzdXJ2aXZlXG4gICAgICogc2VyaWFsaXphdGlvbiwgdGhlIGBzdGFydGAgdmFsdWUgaXMgYWx3YXlzIHRoZSBjdXJyZW50IHRpbWVzdGFtcCwgYW5kIHRoZVxuICAgICAqIGB0dGxgIGlzIGEgY2FsY3VsYXRlZCByZW1haW5pbmcgdGltZSB0byBsaXZlIChuZWdhdGl2ZSBpZiBleHBpcmVkKS5cbiAgICAgKlxuICAgICAqIEFsd2F5cyByZXR1cm5zIHN0YWxlIHZhbHVlcywgaWYgdGhlaXIgaW5mbyBpcyBmb3VuZCBpbiB0aGUgY2FjaGUsIHNvIGJlXG4gICAgICogc3VyZSB0byBjaGVjayBmb3IgZXhwaXJhdGlvbnMgKGllLCBhIG5lZ2F0aXZlIHtAbGluayBMUlVDYWNoZS5FbnRyeSN0dGx9KVxuICAgICAqIGlmIHJlbGV2YW50LlxuICAgICAqL1xuICAgIGluZm8oa2V5KSB7XG4gICAgICAgIGNvbnN0IGkgPSB0aGlzLiNrZXlNYXAuZ2V0KGtleSk7XG4gICAgICAgIGlmIChpID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCB2ID0gdGhpcy4jdmFsTGlzdFtpXTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLiNpc0JhY2tncm91bmRGZXRjaCh2KVxuICAgICAgICAgICAgPyB2Ll9fc3RhbGVXaGlsZUZldGNoaW5nXG4gICAgICAgICAgICA6IHY7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgZW50cnkgPSB7IHZhbHVlIH07XG4gICAgICAgIGlmICh0aGlzLiN0dGxzICYmIHRoaXMuI3N0YXJ0cykge1xuICAgICAgICAgICAgY29uc3QgdHRsID0gdGhpcy4jdHRsc1tpXTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy4jc3RhcnRzW2ldO1xuICAgICAgICAgICAgaWYgKHR0bCAmJiBzdGFydCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlbWFpbiA9IHR0bCAtIChwZXJmLm5vdygpIC0gc3RhcnQpO1xuICAgICAgICAgICAgICAgIGVudHJ5LnR0bCA9IHJlbWFpbjtcbiAgICAgICAgICAgICAgICBlbnRyeS5zdGFydCA9IERhdGUubm93KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuI3NpemVzKSB7XG4gICAgICAgICAgICBlbnRyeS5zaXplID0gdGhpcy4jc2l6ZXNbaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVudHJ5O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYW4gYXJyYXkgb2YgW2tleSwge0BsaW5rIExSVUNhY2hlLkVudHJ5fV0gdHVwbGVzIHdoaWNoIGNhbiBiZVxuICAgICAqIHBhc3NlZCB0byB7QGxpbmsgTFJMVUNhY2hlI2xvYWR9LlxuICAgICAqXG4gICAgICogVGhlIGBzdGFydGAgZmllbGRzIGFyZSBjYWxjdWxhdGVkIHJlbGF0aXZlIHRvIGEgcG9ydGFibGUgYERhdGUubm93KClgXG4gICAgICogdGltZXN0YW1wLCBldmVuIGlmIGBwZXJmb3JtYW5jZS5ub3coKWAgaXMgYXZhaWxhYmxlLlxuICAgICAqXG4gICAgICogU3RhbGUgZW50cmllcyBhcmUgYWx3YXlzIGluY2x1ZGVkIGluIHRoZSBgZHVtcGAsIGV2ZW4gaWZcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UuYWxsb3dTdGFsZX0gaXMgZmFsc2UuXG4gICAgICpcbiAgICAgKiBOb3RlOiB0aGlzIHJldHVybnMgYW4gYWN0dWFsIGFycmF5LCBub3QgYSBnZW5lcmF0b3IsIHNvIGl0IGNhbiBiZSBtb3JlXG4gICAgICogZWFzaWx5IHBhc3NlZCBhcm91bmQuXG4gICAgICovXG4gICAgZHVtcCgpIHtcbiAgICAgICAgY29uc3QgYXJyID0gW107XG4gICAgICAgIGZvciAoY29uc3QgaSBvZiB0aGlzLiNpbmRleGVzKHsgYWxsb3dTdGFsZTogdHJ1ZSB9KSkge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gdGhpcy4ja2V5TGlzdFtpXTtcbiAgICAgICAgICAgIGNvbnN0IHYgPSB0aGlzLiN2YWxMaXN0W2ldO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLiNpc0JhY2tncm91bmRGZXRjaCh2KVxuICAgICAgICAgICAgICAgID8gdi5fX3N0YWxlV2hpbGVGZXRjaGluZ1xuICAgICAgICAgICAgICAgIDogdjtcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IGtleSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgY29uc3QgZW50cnkgPSB7IHZhbHVlIH07XG4gICAgICAgICAgICBpZiAodGhpcy4jdHRscyAmJiB0aGlzLiNzdGFydHMpIHtcbiAgICAgICAgICAgICAgICBlbnRyeS50dGwgPSB0aGlzLiN0dGxzW2ldO1xuICAgICAgICAgICAgICAgIC8vIGFsd2F5cyBkdW1wIHRoZSBzdGFydCByZWxhdGl2ZSB0byBhIHBvcnRhYmxlIHRpbWVzdGFtcFxuICAgICAgICAgICAgICAgIC8vIGl0J3Mgb2sgZm9yIHRoaXMgdG8gYmUgYSBiaXQgc2xvdywgaXQncyBhIHJhcmUgb3BlcmF0aW9uLlxuICAgICAgICAgICAgICAgIGNvbnN0IGFnZSA9IHBlcmYubm93KCkgLSB0aGlzLiNzdGFydHNbaV07XG4gICAgICAgICAgICAgICAgZW50cnkuc3RhcnQgPSBNYXRoLmZsb29yKERhdGUubm93KCkgLSBhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuI3NpemVzKSB7XG4gICAgICAgICAgICAgICAgZW50cnkuc2l6ZSA9IHRoaXMuI3NpemVzW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXJyLnVuc2hpZnQoW2tleSwgZW50cnldKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXJyO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXNldCB0aGUgY2FjaGUgYW5kIGxvYWQgaW4gdGhlIGl0ZW1zIGluIGVudHJpZXMgaW4gdGhlIG9yZGVyIGxpc3RlZC5cbiAgICAgKlxuICAgICAqIFRoZSBzaGFwZSBvZiB0aGUgcmVzdWx0aW5nIGNhY2hlIG1heSBiZSBkaWZmZXJlbnQgaWYgdGhlIHNhbWUgb3B0aW9ucyBhcmVcbiAgICAgKiBub3QgdXNlZCBpbiBib3RoIGNhY2hlcy5cbiAgICAgKlxuICAgICAqIFRoZSBgc3RhcnRgIGZpZWxkcyBhcmUgYXNzdW1lZCB0byBiZSBjYWxjdWxhdGVkIHJlbGF0aXZlIHRvIGEgcG9ydGFibGVcbiAgICAgKiBgRGF0ZS5ub3coKWAgdGltZXN0YW1wLCBldmVuIGlmIGBwZXJmb3JtYW5jZS5ub3coKWAgaXMgYXZhaWxhYmxlLlxuICAgICAqL1xuICAgIGxvYWQoYXJyKSB7XG4gICAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCBlbnRyeV0gb2YgYXJyKSB7XG4gICAgICAgICAgICBpZiAoZW50cnkuc3RhcnQpIHtcbiAgICAgICAgICAgICAgICAvLyBlbnRyeS5zdGFydCBpcyBhIHBvcnRhYmxlIHRpbWVzdGFtcCwgYnV0IHdlIG1heSBiZSB1c2luZ1xuICAgICAgICAgICAgICAgIC8vIG5vZGUncyBwZXJmb3JtYW5jZS5ub3coKSwgc28gY2FsY3VsYXRlIHRoZSBvZmZzZXQsIHNvIHRoYXRcbiAgICAgICAgICAgICAgICAvLyB3ZSBnZXQgdGhlIGludGVuZGVkIHJlbWFpbmluZyBUVEwsIG5vIG1hdHRlciBob3cgbG9uZyBpdCdzXG4gICAgICAgICAgICAgICAgLy8gYmVlbiBvbiBpY2UuXG4gICAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgICAvLyBpdCdzIG9rIGZvciB0aGlzIHRvIGJlIGEgYml0IHNsb3csIGl0J3MgYSByYXJlIG9wZXJhdGlvbi5cbiAgICAgICAgICAgICAgICBjb25zdCBhZ2UgPSBEYXRlLm5vdygpIC0gZW50cnkuc3RhcnQ7XG4gICAgICAgICAgICAgICAgZW50cnkuc3RhcnQgPSBwZXJmLm5vdygpIC0gYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZXQoa2V5LCBlbnRyeS52YWx1ZSwgZW50cnkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZCBhIHZhbHVlIHRvIHRoZSBjYWNoZS5cbiAgICAgKlxuICAgICAqIE5vdGU6IGlmIGB1bmRlZmluZWRgIGlzIHNwZWNpZmllZCBhcyBhIHZhbHVlLCB0aGlzIGlzIGFuIGFsaWFzIGZvclxuICAgICAqIHtAbGluayBMUlVDYWNoZSNkZWxldGV9XG4gICAgICpcbiAgICAgKiBGaWVsZHMgb24gdGhlIHtAbGluayBMUlVDYWNoZS5TZXRPcHRpb25zfSBvcHRpb25zIHBhcmFtIHdpbGwgb3ZlcnJpZGVcbiAgICAgKiB0aGVpciBjb3JyZXNwb25kaW5nIHZhbHVlcyBpbiB0aGUgY29uc3RydWN0b3Igb3B0aW9ucyBmb3IgdGhlIHNjb3BlXG4gICAgICogb2YgdGhpcyBzaW5nbGUgYHNldCgpYCBvcGVyYXRpb24uXG4gICAgICpcbiAgICAgKiBJZiBgc3RhcnRgIGlzIHByb3ZpZGVkLCB0aGVuIHRoYXQgd2lsbCBzZXQgdGhlIGVmZmVjdGl2ZSBzdGFydFxuICAgICAqIHRpbWUgZm9yIHRoZSBUVEwgY2FsY3VsYXRpb24uIE5vdGUgdGhhdCB0aGlzIG11c3QgYmUgYSBwcmV2aW91c1xuICAgICAqIHZhbHVlIG9mIGBwZXJmb3JtYW5jZS5ub3coKWAgaWYgc3VwcG9ydGVkLCBvciBhIHByZXZpb3VzIHZhbHVlIG9mXG4gICAgICogYERhdGUubm93KClgIGlmIG5vdC5cbiAgICAgKlxuICAgICAqIE9wdGlvbnMgb2JqZWN0IG1heSBhbHNvIGluY2x1ZGUgYHNpemVgLCB3aGljaCB3aWxsIHByZXZlbnRcbiAgICAgKiBjYWxsaW5nIHRoZSBgc2l6ZUNhbGN1bGF0aW9uYCBmdW5jdGlvbiBhbmQganVzdCB1c2UgdGhlIHNwZWNpZmllZFxuICAgICAqIG51bWJlciBpZiBpdCBpcyBhIHBvc2l0aXZlIGludGVnZXIsIGFuZCBgbm9EaXNwb3NlT25TZXRgIHdoaWNoXG4gICAgICogd2lsbCBwcmV2ZW50IGNhbGxpbmcgYSBgZGlzcG9zZWAgZnVuY3Rpb24gaW4gdGhlIGNhc2Ugb2ZcbiAgICAgKiBvdmVyd3JpdGVzLlxuICAgICAqXG4gICAgICogSWYgdGhlIGBzaXplYCAob3IgcmV0dXJuIHZhbHVlIG9mIGBzaXplQ2FsY3VsYXRpb25gKSBmb3IgYSBnaXZlblxuICAgICAqIGVudHJ5IGlzIGdyZWF0ZXIgdGhhbiBgbWF4RW50cnlTaXplYCwgdGhlbiB0aGUgaXRlbSB3aWxsIG5vdCBiZVxuICAgICAqIGFkZGVkIHRvIHRoZSBjYWNoZS5cbiAgICAgKlxuICAgICAqIFdpbGwgdXBkYXRlIHRoZSByZWNlbmN5IG9mIHRoZSBlbnRyeS5cbiAgICAgKlxuICAgICAqIElmIHRoZSB2YWx1ZSBpcyBgdW5kZWZpbmVkYCwgdGhlbiB0aGlzIGlzIGFuIGFsaWFzIGZvclxuICAgICAqIGBjYWNoZS5kZWxldGUoa2V5KWAuIGB1bmRlZmluZWRgIGlzIG5ldmVyIHN0b3JlZCBpbiB0aGUgY2FjaGUuXG4gICAgICovXG4gICAgc2V0KGssIHYsIHNldE9wdGlvbnMgPSB7fSkge1xuICAgICAgICBpZiAodiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmRlbGV0ZShrKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgdHRsID0gdGhpcy50dGwsIHN0YXJ0LCBub0Rpc3Bvc2VPblNldCA9IHRoaXMubm9EaXNwb3NlT25TZXQsIHNpemVDYWxjdWxhdGlvbiA9IHRoaXMuc2l6ZUNhbGN1bGF0aW9uLCBzdGF0dXMsIH0gPSBzZXRPcHRpb25zO1xuICAgICAgICBsZXQgeyBub1VwZGF0ZVRUTCA9IHRoaXMubm9VcGRhdGVUVEwgfSA9IHNldE9wdGlvbnM7XG4gICAgICAgIGNvbnN0IHNpemUgPSB0aGlzLiNyZXF1aXJlU2l6ZShrLCB2LCBzZXRPcHRpb25zLnNpemUgfHwgMCwgc2l6ZUNhbGN1bGF0aW9uKTtcbiAgICAgICAgLy8gaWYgdGhlIGl0ZW0gZG9lc24ndCBmaXQsIGRvbid0IGRvIGFueXRoaW5nXG4gICAgICAgIC8vIE5COiBtYXhFbnRyeVNpemUgc2V0IHRvIG1heFNpemUgYnkgZGVmYXVsdFxuICAgICAgICBpZiAodGhpcy5tYXhFbnRyeVNpemUgJiYgc2l6ZSA+IHRoaXMubWF4RW50cnlTaXplKSB7XG4gICAgICAgICAgICBpZiAoc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgc3RhdHVzLnNldCA9ICdtaXNzJztcbiAgICAgICAgICAgICAgICBzdGF0dXMubWF4RW50cnlTaXplRXhjZWVkZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaGF2ZSB0byBkZWxldGUsIGluIGNhc2Ugc29tZXRoaW5nIGlzIHRoZXJlIGFscmVhZHkuXG4gICAgICAgICAgICB0aGlzLiNkZWxldGUoaywgJ3NldCcpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGluZGV4ID0gdGhpcy4jc2l6ZSA9PT0gMCA/IHVuZGVmaW5lZCA6IHRoaXMuI2tleU1hcC5nZXQoayk7XG4gICAgICAgIGlmIChpbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyBhZGRpdGlvblxuICAgICAgICAgICAgaW5kZXggPSAodGhpcy4jc2l6ZSA9PT0gMFxuICAgICAgICAgICAgICAgID8gdGhpcy4jdGFpbFxuICAgICAgICAgICAgICAgIDogdGhpcy4jZnJlZS5sZW5ndGggIT09IDBcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLiNmcmVlLnBvcCgpXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy4jc2l6ZSA9PT0gdGhpcy4jbWF4XG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuI2V2aWN0KGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLiNzaXplKTtcbiAgICAgICAgICAgIHRoaXMuI2tleUxpc3RbaW5kZXhdID0gaztcbiAgICAgICAgICAgIHRoaXMuI3ZhbExpc3RbaW5kZXhdID0gdjtcbiAgICAgICAgICAgIHRoaXMuI2tleU1hcC5zZXQoaywgaW5kZXgpO1xuICAgICAgICAgICAgdGhpcy4jbmV4dFt0aGlzLiN0YWlsXSA9IGluZGV4O1xuICAgICAgICAgICAgdGhpcy4jcHJldltpbmRleF0gPSB0aGlzLiN0YWlsO1xuICAgICAgICAgICAgdGhpcy4jdGFpbCA9IGluZGV4O1xuICAgICAgICAgICAgdGhpcy4jc2l6ZSsrO1xuICAgICAgICAgICAgdGhpcy4jYWRkSXRlbVNpemUoaW5kZXgsIHNpemUsIHN0YXR1cyk7XG4gICAgICAgICAgICBpZiAoc3RhdHVzKVxuICAgICAgICAgICAgICAgIHN0YXR1cy5zZXQgPSAnYWRkJztcbiAgICAgICAgICAgIG5vVXBkYXRlVFRMID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyB1cGRhdGVcbiAgICAgICAgICAgIHRoaXMuI21vdmVUb1RhaWwoaW5kZXgpO1xuICAgICAgICAgICAgY29uc3Qgb2xkVmFsID0gdGhpcy4jdmFsTGlzdFtpbmRleF07XG4gICAgICAgICAgICBpZiAodiAhPT0gb2xkVmFsKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuI2hhc0ZldGNoTWV0aG9kICYmIHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKG9sZFZhbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgb2xkVmFsLl9fYWJvcnRDb250cm9sbGVyLmFib3J0KG5ldyBFcnJvcigncmVwbGFjZWQnKSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgX19zdGFsZVdoaWxlRmV0Y2hpbmc6IHMgfSA9IG9sZFZhbDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHMgIT09IHVuZGVmaW5lZCAmJiAhbm9EaXNwb3NlT25TZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLiNoYXNEaXNwb3NlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jZGlzcG9zZT8uKHMsIGssICdzZXQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLiNoYXNEaXNwb3NlQWZ0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiNkaXNwb3NlZD8ucHVzaChbcywgaywgJ3NldCddKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICghbm9EaXNwb3NlT25TZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuI2hhc0Rpc3Bvc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuI2Rpc3Bvc2U/LihvbGRWYWwsIGssICdzZXQnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy4jaGFzRGlzcG9zZUFmdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiNkaXNwb3NlZD8ucHVzaChbb2xkVmFsLCBrLCAnc2V0J10pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuI3JlbW92ZUl0ZW1TaXplKGluZGV4KTtcbiAgICAgICAgICAgICAgICB0aGlzLiNhZGRJdGVtU2l6ZShpbmRleCwgc2l6ZSwgc3RhdHVzKTtcbiAgICAgICAgICAgICAgICB0aGlzLiN2YWxMaXN0W2luZGV4XSA9IHY7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuc2V0ID0gJ3JlcGxhY2UnO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvbGRWYWx1ZSA9IG9sZFZhbCAmJiB0aGlzLiNpc0JhY2tncm91bmRGZXRjaChvbGRWYWwpXG4gICAgICAgICAgICAgICAgICAgICAgICA/IG9sZFZhbC5fX3N0YWxlV2hpbGVGZXRjaGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBvbGRWYWw7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvbGRWYWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLm9sZFZhbHVlID0gb2xkVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgc3RhdHVzLnNldCA9ICd1cGRhdGUnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0dGwgIT09IDAgJiYgIXRoaXMuI3R0bHMpIHtcbiAgICAgICAgICAgIHRoaXMuI2luaXRpYWxpemVUVExUcmFja2luZygpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLiN0dGxzKSB7XG4gICAgICAgICAgICBpZiAoIW5vVXBkYXRlVFRMKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jc2V0SXRlbVRUTChpbmRleCwgdHRsLCBzdGFydCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3RhdHVzKVxuICAgICAgICAgICAgICAgIHRoaXMuI3N0YXR1c1RUTChzdGF0dXMsIGluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW5vRGlzcG9zZU9uU2V0ICYmIHRoaXMuI2hhc0Rpc3Bvc2VBZnRlciAmJiB0aGlzLiNkaXNwb3NlZCkge1xuICAgICAgICAgICAgY29uc3QgZHQgPSB0aGlzLiNkaXNwb3NlZDtcbiAgICAgICAgICAgIGxldCB0YXNrO1xuICAgICAgICAgICAgd2hpbGUgKCh0YXNrID0gZHQ/LnNoaWZ0KCkpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jZGlzcG9zZUFmdGVyPy4oLi4udGFzayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEV2aWN0IHRoZSBsZWFzdCByZWNlbnRseSB1c2VkIGl0ZW0sIHJldHVybmluZyBpdHMgdmFsdWUgb3JcbiAgICAgKiBgdW5kZWZpbmVkYCBpZiBjYWNoZSBpcyBlbXB0eS5cbiAgICAgKi9cbiAgICBwb3AoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB3aGlsZSAodGhpcy4jc2l6ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbCA9IHRoaXMuI3ZhbExpc3RbdGhpcy4jaGVhZF07XG4gICAgICAgICAgICAgICAgdGhpcy4jZXZpY3QodHJ1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHZhbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbC5fX3N0YWxlV2hpbGVGZXRjaGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbC5fX3N0YWxlV2hpbGVGZXRjaGluZztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIGlmICh0aGlzLiNoYXNEaXNwb3NlQWZ0ZXIgJiYgdGhpcy4jZGlzcG9zZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkdCA9IHRoaXMuI2Rpc3Bvc2VkO1xuICAgICAgICAgICAgICAgIGxldCB0YXNrO1xuICAgICAgICAgICAgICAgIHdoaWxlICgodGFzayA9IGR0Py5zaGlmdCgpKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiNkaXNwb3NlQWZ0ZXI/LiguLi50YXNrKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgI2V2aWN0KGZyZWUpIHtcbiAgICAgICAgY29uc3QgaGVhZCA9IHRoaXMuI2hlYWQ7XG4gICAgICAgIGNvbnN0IGsgPSB0aGlzLiNrZXlMaXN0W2hlYWRdO1xuICAgICAgICBjb25zdCB2ID0gdGhpcy4jdmFsTGlzdFtoZWFkXTtcbiAgICAgICAgaWYgKHRoaXMuI2hhc0ZldGNoTWV0aG9kICYmIHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHYpKSB7XG4gICAgICAgICAgICB2Ll9fYWJvcnRDb250cm9sbGVyLmFib3J0KG5ldyBFcnJvcignZXZpY3RlZCcpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLiNoYXNEaXNwb3NlIHx8IHRoaXMuI2hhc0Rpc3Bvc2VBZnRlcikge1xuICAgICAgICAgICAgaWYgKHRoaXMuI2hhc0Rpc3Bvc2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiNkaXNwb3NlPy4odiwgaywgJ2V2aWN0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy4jaGFzRGlzcG9zZUFmdGVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jZGlzcG9zZWQ/LnB1c2goW3YsIGssICdldmljdCddKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLiNyZW1vdmVJdGVtU2l6ZShoZWFkKTtcbiAgICAgICAgLy8gaWYgd2UgYXJlbid0IGFib3V0IHRvIHVzZSB0aGUgaW5kZXgsIHRoZW4gbnVsbCB0aGVzZSBvdXRcbiAgICAgICAgaWYgKGZyZWUpIHtcbiAgICAgICAgICAgIHRoaXMuI2tleUxpc3RbaGVhZF0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLiN2YWxMaXN0W2hlYWRdID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy4jZnJlZS5wdXNoKGhlYWQpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLiNzaXplID09PSAxKSB7XG4gICAgICAgICAgICB0aGlzLiNoZWFkID0gdGhpcy4jdGFpbCA9IDA7XG4gICAgICAgICAgICB0aGlzLiNmcmVlLmxlbmd0aCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLiNoZWFkID0gdGhpcy4jbmV4dFtoZWFkXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiNrZXlNYXAuZGVsZXRlKGspO1xuICAgICAgICB0aGlzLiNzaXplLS07XG4gICAgICAgIHJldHVybiBoZWFkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiBhIGtleSBpcyBpbiB0aGUgY2FjaGUsIHdpdGhvdXQgdXBkYXRpbmcgdGhlIHJlY2VuY3kgb2YgdXNlLlxuICAgICAqIFdpbGwgcmV0dXJuIGZhbHNlIGlmIHRoZSBpdGVtIGlzIHN0YWxlLCBldmVuIHRob3VnaCBpdCBpcyB0ZWNobmljYWxseVxuICAgICAqIGluIHRoZSBjYWNoZS5cbiAgICAgKlxuICAgICAqIENoZWNrIGlmIGEga2V5IGlzIGluIHRoZSBjYWNoZSwgd2l0aG91dCB1cGRhdGluZyB0aGUgcmVjZW5jeSBvZlxuICAgICAqIHVzZS4gQWdlIGlzIHVwZGF0ZWQgaWYge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLnVwZGF0ZUFnZU9uSGFzfSBpcyBzZXRcbiAgICAgKiB0byBgdHJ1ZWAgaW4gZWl0aGVyIHRoZSBvcHRpb25zIG9yIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICAgKlxuICAgICAqIFdpbGwgcmV0dXJuIGBmYWxzZWAgaWYgdGhlIGl0ZW0gaXMgc3RhbGUsIGV2ZW4gdGhvdWdoIGl0IGlzIHRlY2huaWNhbGx5IGluXG4gICAgICogdGhlIGNhY2hlLiBUaGUgZGlmZmVyZW5jZSBjYW4gYmUgZGV0ZXJtaW5lZCAoaWYgaXQgbWF0dGVycykgYnkgdXNpbmcgYVxuICAgICAqIGBzdGF0dXNgIGFyZ3VtZW50LCBhbmQgaW5zcGVjdGluZyB0aGUgYGhhc2AgZmllbGQuXG4gICAgICpcbiAgICAgKiBXaWxsIG5vdCB1cGRhdGUgaXRlbSBhZ2UgdW5sZXNzXG4gICAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLnVwZGF0ZUFnZU9uSGFzfSBpcyBzZXQuXG4gICAgICovXG4gICAgaGFzKGssIGhhc09wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCB7IHVwZGF0ZUFnZU9uSGFzID0gdGhpcy51cGRhdGVBZ2VPbkhhcywgc3RhdHVzIH0gPSBoYXNPcHRpb25zO1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuI2tleU1hcC5nZXQoayk7XG4gICAgICAgIGlmIChpbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCB2ID0gdGhpcy4jdmFsTGlzdFtpbmRleF07XG4gICAgICAgICAgICBpZiAodGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2godikgJiZcbiAgICAgICAgICAgICAgICB2Ll9fc3RhbGVXaGlsZUZldGNoaW5nID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuI2lzU3RhbGUoaW5kZXgpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHVwZGF0ZUFnZU9uSGFzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI3VwZGF0ZUl0ZW1BZ2UoaW5kZXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5oYXMgPSAnaGl0JztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jc3RhdHVzVFRMKHN0YXR1cywgaW5kZXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHN0YXR1cykge1xuICAgICAgICAgICAgICAgIHN0YXR1cy5oYXMgPSAnc3RhbGUnO1xuICAgICAgICAgICAgICAgIHRoaXMuI3N0YXR1c1RUTChzdGF0dXMsIGluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzdGF0dXMpIHtcbiAgICAgICAgICAgIHN0YXR1cy5oYXMgPSAnbWlzcyc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBMaWtlIHtAbGluayBMUlVDYWNoZSNnZXR9IGJ1dCBkb2Vzbid0IHVwZGF0ZSByZWNlbmN5IG9yIGRlbGV0ZSBzdGFsZVxuICAgICAqIGl0ZW1zLlxuICAgICAqXG4gICAgICogUmV0dXJucyBgdW5kZWZpbmVkYCBpZiB0aGUgaXRlbSBpcyBzdGFsZSwgdW5sZXNzXG4gICAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLmFsbG93U3RhbGV9IGlzIHNldC5cbiAgICAgKi9cbiAgICBwZWVrKGssIHBlZWtPcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgeyBhbGxvd1N0YWxlID0gdGhpcy5hbGxvd1N0YWxlIH0gPSBwZWVrT3B0aW9ucztcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLiNrZXlNYXAuZ2V0KGspO1xuICAgICAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgKCFhbGxvd1N0YWxlICYmIHRoaXMuI2lzU3RhbGUoaW5kZXgpKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHYgPSB0aGlzLiN2YWxMaXN0W2luZGV4XTtcbiAgICAgICAgLy8gZWl0aGVyIHN0YWxlIGFuZCBhbGxvd2VkLCBvciBmb3JjaW5nIGEgcmVmcmVzaCBvZiBub24tc3RhbGUgdmFsdWVcbiAgICAgICAgcmV0dXJuIHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHYpID8gdi5fX3N0YWxlV2hpbGVGZXRjaGluZyA6IHY7XG4gICAgfVxuICAgICNiYWNrZ3JvdW5kRmV0Y2goaywgaW5kZXgsIG9wdGlvbnMsIGNvbnRleHQpIHtcbiAgICAgICAgY29uc3QgdiA9IGluZGV4ID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB0aGlzLiN2YWxMaXN0W2luZGV4XTtcbiAgICAgICAgaWYgKHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHYpKSB7XG4gICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhYyA9IG5ldyBBQygpO1xuICAgICAgICBjb25zdCB7IHNpZ25hbCB9ID0gb3B0aW9ucztcbiAgICAgICAgLy8gd2hlbi9pZiBvdXIgQUMgc2lnbmFscywgdGhlbiBzdG9wIGxpc3RlbmluZyB0byB0aGVpcnMuXG4gICAgICAgIHNpZ25hbD8uYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCAoKSA9PiBhYy5hYm9ydChzaWduYWwucmVhc29uKSwge1xuICAgICAgICAgICAgc2lnbmFsOiBhYy5zaWduYWwsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBmZXRjaE9wdHMgPSB7XG4gICAgICAgICAgICBzaWduYWw6IGFjLnNpZ25hbCxcbiAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBjYiA9ICh2LCB1cGRhdGVDYWNoZSA9IGZhbHNlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IGFib3J0ZWQgfSA9IGFjLnNpZ25hbDtcbiAgICAgICAgICAgIGNvbnN0IGlnbm9yZUFib3J0ID0gb3B0aW9ucy5pZ25vcmVGZXRjaEFib3J0ICYmIHYgIT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnN0YXR1cykge1xuICAgICAgICAgICAgICAgIGlmIChhYm9ydGVkICYmICF1cGRhdGVDYWNoZSkge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnN0YXR1cy5mZXRjaEFib3J0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnN0YXR1cy5mZXRjaEVycm9yID0gYWMuc2lnbmFsLnJlYXNvbjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlnbm9yZUFib3J0KVxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5zdGF0dXMuZmV0Y2hBYm9ydElnbm9yZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5zdGF0dXMuZmV0Y2hSZXNvbHZlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFib3J0ZWQgJiYgIWlnbm9yZUFib3J0ICYmICF1cGRhdGVDYWNoZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmZXRjaEZhaWwoYWMuc2lnbmFsLnJlYXNvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBlaXRoZXIgd2UgZGlkbid0IGFib3J0LCBhbmQgYXJlIHN0aWxsIGhlcmUsIG9yIHdlIGRpZCwgYW5kIGlnbm9yZWRcbiAgICAgICAgICAgIGNvbnN0IGJmID0gcDtcbiAgICAgICAgICAgIGlmICh0aGlzLiN2YWxMaXN0W2luZGV4XSA9PT0gcCkge1xuICAgICAgICAgICAgICAgIGlmICh2ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJmLl9fc3RhbGVXaGlsZUZldGNoaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiN2YWxMaXN0W2luZGV4XSA9IGJmLl9fc3RhbGVXaGlsZUZldGNoaW5nO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jZGVsZXRlKGssICdmZXRjaCcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5zdGF0dXMpXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnN0YXR1cy5mZXRjaFVwZGF0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldChrLCB2LCBmZXRjaE9wdHMub3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGViID0gKGVyKSA9PiB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5zdGF0dXMpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLnN0YXR1cy5mZXRjaFJlamVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBvcHRpb25zLnN0YXR1cy5mZXRjaEVycm9yID0gZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmV0Y2hGYWlsKGVyKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZmV0Y2hGYWlsID0gKGVyKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IGFib3J0ZWQgfSA9IGFjLnNpZ25hbDtcbiAgICAgICAgICAgIGNvbnN0IGFsbG93U3RhbGVBYm9ydGVkID0gYWJvcnRlZCAmJiBvcHRpb25zLmFsbG93U3RhbGVPbkZldGNoQWJvcnQ7XG4gICAgICAgICAgICBjb25zdCBhbGxvd1N0YWxlID0gYWxsb3dTdGFsZUFib3J0ZWQgfHwgb3B0aW9ucy5hbGxvd1N0YWxlT25GZXRjaFJlamVjdGlvbjtcbiAgICAgICAgICAgIGNvbnN0IG5vRGVsZXRlID0gYWxsb3dTdGFsZSB8fCBvcHRpb25zLm5vRGVsZXRlT25GZXRjaFJlamVjdGlvbjtcbiAgICAgICAgICAgIGNvbnN0IGJmID0gcDtcbiAgICAgICAgICAgIGlmICh0aGlzLiN2YWxMaXN0W2luZGV4XSA9PT0gcCkge1xuICAgICAgICAgICAgICAgIC8vIGlmIHdlIGFsbG93IHN0YWxlIG9uIGZldGNoIHJlamVjdGlvbnMsIHRoZW4gd2UgbmVlZCB0byBlbnN1cmUgdGhhdFxuICAgICAgICAgICAgICAgIC8vIHRoZSBzdGFsZSB2YWx1ZSBpcyBub3QgcmVtb3ZlZCBmcm9tIHRoZSBjYWNoZSB3aGVuIHRoZSBmZXRjaCBmYWlscy5cbiAgICAgICAgICAgICAgICBjb25zdCBkZWwgPSAhbm9EZWxldGUgfHwgYmYuX19zdGFsZVdoaWxlRmV0Y2hpbmcgPT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBpZiAoZGVsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI2RlbGV0ZShrLCAnZmV0Y2gnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIWFsbG93U3RhbGVBYm9ydGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHN0aWxsIHJlcGxhY2UgdGhlICpwcm9taXNlKiB3aXRoIHRoZSBzdGFsZSB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgLy8gc2luY2Ugd2UgYXJlIGRvbmUgd2l0aCB0aGUgcHJvbWlzZSBhdCB0aGlzIHBvaW50LlxuICAgICAgICAgICAgICAgICAgICAvLyBsZWF2ZSBpdCB1bnRvdWNoZWQgaWYgd2UncmUgc3RpbGwgd2FpdGluZyBmb3IgYW5cbiAgICAgICAgICAgICAgICAgICAgLy8gYWJvcnRlZCBiYWNrZ3JvdW5kIGZldGNoIHRoYXQgaGFzbid0IHlldCByZXR1cm5lZC5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jdmFsTGlzdFtpbmRleF0gPSBiZi5fX3N0YWxlV2hpbGVGZXRjaGluZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYWxsb3dTdGFsZSkge1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnN0YXR1cyAmJiBiZi5fX3N0YWxlV2hpbGVGZXRjaGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuc3RhdHVzLnJldHVybmVkU3RhbGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYmYuX19zdGFsZVdoaWxlRmV0Y2hpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChiZi5fX3JldHVybmVkID09PSBiZikge1xuICAgICAgICAgICAgICAgIHRocm93IGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBwY2FsbCA9IChyZXMsIHJlaikgPT4ge1xuICAgICAgICAgICAgY29uc3QgZm1wID0gdGhpcy4jZmV0Y2hNZXRob2Q/LihrLCB2LCBmZXRjaE9wdHMpO1xuICAgICAgICAgICAgaWYgKGZtcCAmJiBmbXAgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgZm1wLnRoZW4odiA9PiByZXModiA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogdiksIHJlaik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBpZ25vcmVkLCB3ZSBnbyB1bnRpbCB3ZSBmaW5pc2gsIHJlZ2FyZGxlc3MuXG4gICAgICAgICAgICAvLyBkZWZlciBjaGVjayB1bnRpbCB3ZSBhcmUgYWN0dWFsbHkgYWJvcnRpbmcsXG4gICAgICAgICAgICAvLyBzbyBmZXRjaE1ldGhvZCBjYW4gb3ZlcnJpZGUuXG4gICAgICAgICAgICBhYy5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zLmlnbm9yZUZldGNoQWJvcnQgfHxcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5hbGxvd1N0YWxlT25GZXRjaEFib3J0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcyh1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAvLyB3aGVuIGl0IGV2ZW50dWFsbHkgcmVzb2x2ZXMsIHVwZGF0ZSB0aGUgY2FjaGUuXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmFsbG93U3RhbGVPbkZldGNoQWJvcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcyA9IHYgPT4gY2IodiwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKG9wdGlvbnMuc3RhdHVzKVxuICAgICAgICAgICAgb3B0aW9ucy5zdGF0dXMuZmV0Y2hEaXNwYXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgcCA9IG5ldyBQcm9taXNlKHBjYWxsKS50aGVuKGNiLCBlYik7XG4gICAgICAgIGNvbnN0IGJmID0gT2JqZWN0LmFzc2lnbihwLCB7XG4gICAgICAgICAgICBfX2Fib3J0Q29udHJvbGxlcjogYWMsXG4gICAgICAgICAgICBfX3N0YWxlV2hpbGVGZXRjaGluZzogdixcbiAgICAgICAgICAgIF9fcmV0dXJuZWQ6IHVuZGVmaW5lZCxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChpbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyBpbnRlcm5hbCwgZG9uJ3QgZXhwb3NlIHN0YXR1cy5cbiAgICAgICAgICAgIHRoaXMuc2V0KGssIGJmLCB7IC4uLmZldGNoT3B0cy5vcHRpb25zLCBzdGF0dXM6IHVuZGVmaW5lZCB9KTtcbiAgICAgICAgICAgIGluZGV4ID0gdGhpcy4ja2V5TWFwLmdldChrKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuI3ZhbExpc3RbaW5kZXhdID0gYmY7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJmO1xuICAgIH1cbiAgICAjaXNCYWNrZ3JvdW5kRmV0Y2gocCkge1xuICAgICAgICBpZiAoIXRoaXMuI2hhc0ZldGNoTWV0aG9kKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb25zdCBiID0gcDtcbiAgICAgICAgcmV0dXJuICghIWIgJiZcbiAgICAgICAgICAgIGIgaW5zdGFuY2VvZiBQcm9taXNlICYmXG4gICAgICAgICAgICBiLmhhc093blByb3BlcnR5KCdfX3N0YWxlV2hpbGVGZXRjaGluZycpICYmXG4gICAgICAgICAgICBiLl9fYWJvcnRDb250cm9sbGVyIGluc3RhbmNlb2YgQUMpO1xuICAgIH1cbiAgICBhc3luYyBmZXRjaChrLCBmZXRjaE9wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCB7IFxuICAgICAgICAvLyBnZXQgb3B0aW9uc1xuICAgICAgICBhbGxvd1N0YWxlID0gdGhpcy5hbGxvd1N0YWxlLCB1cGRhdGVBZ2VPbkdldCA9IHRoaXMudXBkYXRlQWdlT25HZXQsIG5vRGVsZXRlT25TdGFsZUdldCA9IHRoaXMubm9EZWxldGVPblN0YWxlR2V0LCBcbiAgICAgICAgLy8gc2V0IG9wdGlvbnNcbiAgICAgICAgdHRsID0gdGhpcy50dGwsIG5vRGlzcG9zZU9uU2V0ID0gdGhpcy5ub0Rpc3Bvc2VPblNldCwgc2l6ZSA9IDAsIHNpemVDYWxjdWxhdGlvbiA9IHRoaXMuc2l6ZUNhbGN1bGF0aW9uLCBub1VwZGF0ZVRUTCA9IHRoaXMubm9VcGRhdGVUVEwsIFxuICAgICAgICAvLyBmZXRjaCBleGNsdXNpdmUgb3B0aW9uc1xuICAgICAgICBub0RlbGV0ZU9uRmV0Y2hSZWplY3Rpb24gPSB0aGlzLm5vRGVsZXRlT25GZXRjaFJlamVjdGlvbiwgYWxsb3dTdGFsZU9uRmV0Y2hSZWplY3Rpb24gPSB0aGlzLmFsbG93U3RhbGVPbkZldGNoUmVqZWN0aW9uLCBpZ25vcmVGZXRjaEFib3J0ID0gdGhpcy5pZ25vcmVGZXRjaEFib3J0LCBhbGxvd1N0YWxlT25GZXRjaEFib3J0ID0gdGhpcy5hbGxvd1N0YWxlT25GZXRjaEFib3J0LCBjb250ZXh0LCBmb3JjZVJlZnJlc2ggPSBmYWxzZSwgc3RhdHVzLCBzaWduYWwsIH0gPSBmZXRjaE9wdGlvbnM7XG4gICAgICAgIGlmICghdGhpcy4jaGFzRmV0Y2hNZXRob2QpIHtcbiAgICAgICAgICAgIGlmIChzdGF0dXMpXG4gICAgICAgICAgICAgICAgc3RhdHVzLmZldGNoID0gJ2dldCc7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXQoaywge1xuICAgICAgICAgICAgICAgIGFsbG93U3RhbGUsXG4gICAgICAgICAgICAgICAgdXBkYXRlQWdlT25HZXQsXG4gICAgICAgICAgICAgICAgbm9EZWxldGVPblN0YWxlR2V0LFxuICAgICAgICAgICAgICAgIHN0YXR1cyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBhbGxvd1N0YWxlLFxuICAgICAgICAgICAgdXBkYXRlQWdlT25HZXQsXG4gICAgICAgICAgICBub0RlbGV0ZU9uU3RhbGVHZXQsXG4gICAgICAgICAgICB0dGwsXG4gICAgICAgICAgICBub0Rpc3Bvc2VPblNldCxcbiAgICAgICAgICAgIHNpemUsXG4gICAgICAgICAgICBzaXplQ2FsY3VsYXRpb24sXG4gICAgICAgICAgICBub1VwZGF0ZVRUTCxcbiAgICAgICAgICAgIG5vRGVsZXRlT25GZXRjaFJlamVjdGlvbixcbiAgICAgICAgICAgIGFsbG93U3RhbGVPbkZldGNoUmVqZWN0aW9uLFxuICAgICAgICAgICAgYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydCxcbiAgICAgICAgICAgIGlnbm9yZUZldGNoQWJvcnQsXG4gICAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgICBzaWduYWwsXG4gICAgICAgIH07XG4gICAgICAgIGxldCBpbmRleCA9IHRoaXMuI2tleU1hcC5nZXQoayk7XG4gICAgICAgIGlmIChpbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoc3RhdHVzKVxuICAgICAgICAgICAgICAgIHN0YXR1cy5mZXRjaCA9ICdtaXNzJztcbiAgICAgICAgICAgIGNvbnN0IHAgPSB0aGlzLiNiYWNrZ3JvdW5kRmV0Y2goaywgaW5kZXgsIG9wdGlvbnMsIGNvbnRleHQpO1xuICAgICAgICAgICAgcmV0dXJuIChwLl9fcmV0dXJuZWQgPSBwKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIGluIGNhY2hlLCBtYXliZSBhbHJlYWR5IGZldGNoaW5nXG4gICAgICAgICAgICBjb25zdCB2ID0gdGhpcy4jdmFsTGlzdFtpbmRleF07XG4gICAgICAgICAgICBpZiAodGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2godikpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFsZSA9IGFsbG93U3RhbGUgJiYgdi5fX3N0YWxlV2hpbGVGZXRjaGluZyAhPT0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGlmIChzdGF0dXMpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmZldGNoID0gJ2luZmxpZ2h0JztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWxlKVxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLnJldHVybmVkU3RhbGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gc3RhbGUgPyB2Ll9fc3RhbGVXaGlsZUZldGNoaW5nIDogKHYuX19yZXR1cm5lZCA9IHYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgd2UgZm9yY2UgYSByZWZyZXNoLCB0aGF0IG1lYW5zIGRvIE5PVCBzZXJ2ZSB0aGUgY2FjaGVkIHZhbHVlLFxuICAgICAgICAgICAgLy8gdW5sZXNzIHdlIGFyZSBhbHJlYWR5IGluIHRoZSBwcm9jZXNzIG9mIHJlZnJlc2hpbmcgdGhlIGNhY2hlLlxuICAgICAgICAgICAgY29uc3QgaXNTdGFsZSA9IHRoaXMuI2lzU3RhbGUoaW5kZXgpO1xuICAgICAgICAgICAgaWYgKCFmb3JjZVJlZnJlc2ggJiYgIWlzU3RhbGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdHVzKVxuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZmV0Y2ggPSAnaGl0JztcbiAgICAgICAgICAgICAgICB0aGlzLiNtb3ZlVG9UYWlsKGluZGV4KTtcbiAgICAgICAgICAgICAgICBpZiAodXBkYXRlQWdlT25HZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jdXBkYXRlSXRlbUFnZShpbmRleCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzdGF0dXMpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI3N0YXR1c1RUTChzdGF0dXMsIGluZGV4KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIG9rLCBpdCBpcyBzdGFsZSBvciBhIGZvcmNlZCByZWZyZXNoLCBhbmQgbm90IGFscmVhZHkgZmV0Y2hpbmcuXG4gICAgICAgICAgICAvLyByZWZyZXNoIHRoZSBjYWNoZS5cbiAgICAgICAgICAgIGNvbnN0IHAgPSB0aGlzLiNiYWNrZ3JvdW5kRmV0Y2goaywgaW5kZXgsIG9wdGlvbnMsIGNvbnRleHQpO1xuICAgICAgICAgICAgY29uc3QgaGFzU3RhbGUgPSBwLl9fc3RhbGVXaGlsZUZldGNoaW5nICE9PSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjb25zdCBzdGFsZVZhbCA9IGhhc1N0YWxlICYmIGFsbG93U3RhbGU7XG4gICAgICAgICAgICBpZiAoc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgc3RhdHVzLmZldGNoID0gaXNTdGFsZSA/ICdzdGFsZScgOiAncmVmcmVzaCc7XG4gICAgICAgICAgICAgICAgaWYgKHN0YWxlVmFsICYmIGlzU3RhbGUpXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5yZXR1cm5lZFN0YWxlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzdGFsZVZhbCA/IHAuX19zdGFsZVdoaWxlRmV0Y2hpbmcgOiAocC5fX3JldHVybmVkID0gcCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgZm9yY2VGZXRjaChrLCBmZXRjaE9wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCB2ID0gYXdhaXQgdGhpcy5mZXRjaChrLCBmZXRjaE9wdGlvbnMpO1xuICAgICAgICBpZiAodiA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdmZXRjaCgpIHJldHVybmVkIHVuZGVmaW5lZCcpO1xuICAgICAgICByZXR1cm4gdjtcbiAgICB9XG4gICAgbWVtbyhrLCBtZW1vT3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IG1lbW9NZXRob2QgPSB0aGlzLiNtZW1vTWV0aG9kO1xuICAgICAgICBpZiAoIW1lbW9NZXRob2QpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbm8gbWVtb01ldGhvZCBwcm92aWRlZCB0byBjb25zdHJ1Y3RvcicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgY29udGV4dCwgZm9yY2VSZWZyZXNoLCAuLi5vcHRpb25zIH0gPSBtZW1vT3B0aW9ucztcbiAgICAgICAgY29uc3QgdiA9IHRoaXMuZ2V0KGssIG9wdGlvbnMpO1xuICAgICAgICBpZiAoIWZvcmNlUmVmcmVzaCAmJiB2ICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgY29uc3QgdnYgPSBtZW1vTWV0aG9kKGssIHYsIHtcbiAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zZXQoaywgdnYsIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gdnY7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiBhIHZhbHVlIGZyb20gdGhlIGNhY2hlLiBXaWxsIHVwZGF0ZSB0aGUgcmVjZW5jeSBvZiB0aGUgY2FjaGVcbiAgICAgKiBlbnRyeSBmb3VuZC5cbiAgICAgKlxuICAgICAqIElmIHRoZSBrZXkgaXMgbm90IGZvdW5kLCBnZXQoKSB3aWxsIHJldHVybiBgdW5kZWZpbmVkYC5cbiAgICAgKi9cbiAgICBnZXQoaywgZ2V0T3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHsgYWxsb3dTdGFsZSA9IHRoaXMuYWxsb3dTdGFsZSwgdXBkYXRlQWdlT25HZXQgPSB0aGlzLnVwZGF0ZUFnZU9uR2V0LCBub0RlbGV0ZU9uU3RhbGVHZXQgPSB0aGlzLm5vRGVsZXRlT25TdGFsZUdldCwgc3RhdHVzLCB9ID0gZ2V0T3B0aW9ucztcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLiNrZXlNYXAuZ2V0KGspO1xuICAgICAgICBpZiAoaW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLiN2YWxMaXN0W2luZGV4XTtcbiAgICAgICAgICAgIGNvbnN0IGZldGNoaW5nID0gdGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2godmFsdWUpO1xuICAgICAgICAgICAgaWYgKHN0YXR1cylcbiAgICAgICAgICAgICAgICB0aGlzLiNzdGF0dXNUVEwoc3RhdHVzLCBpbmRleCk7XG4gICAgICAgICAgICBpZiAodGhpcy4jaXNTdGFsZShpbmRleCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdHVzKVxuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZ2V0ID0gJ3N0YWxlJztcbiAgICAgICAgICAgICAgICAvLyBkZWxldGUgb25seSBpZiBub3QgYW4gaW4tZmxpZ2h0IGJhY2tncm91bmQgZmV0Y2hcbiAgICAgICAgICAgICAgICBpZiAoIWZldGNoaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghbm9EZWxldGVPblN0YWxlR2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiNkZWxldGUoaywgJ2V4cGlyZScpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgJiYgYWxsb3dTdGFsZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cy5yZXR1cm5lZFN0YWxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFsbG93U3RhbGUgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93U3RhbGUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLl9fc3RhbGVXaGlsZUZldGNoaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cy5yZXR1cm5lZFN0YWxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWxsb3dTdGFsZSA/IHZhbHVlLl9fc3RhbGVXaGlsZUZldGNoaW5nIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChzdGF0dXMpXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5nZXQgPSAnaGl0JztcbiAgICAgICAgICAgICAgICAvLyBpZiB3ZSdyZSBjdXJyZW50bHkgZmV0Y2hpbmcgaXQsIHdlIGRvbid0IGFjdHVhbGx5IGhhdmUgaXQgeWV0XG4gICAgICAgICAgICAgICAgLy8gaXQncyBub3Qgc3RhbGUsIHdoaWNoIG1lYW5zIHRoaXMgaXNuJ3QgYSBzdGFsZVdoaWxlUmVmZXRjaGluZy5cbiAgICAgICAgICAgICAgICAvLyBJZiBpdCdzIG5vdCBzdGFsZSwgYW5kIGZldGNoaW5nLCBBTkQgaGFzIGEgX19zdGFsZVdoaWxlRmV0Y2hpbmdcbiAgICAgICAgICAgICAgICAvLyB2YWx1ZSwgdGhlbiB0aGF0IG1lYW5zIHRoZSB1c2VyIGZldGNoZWQgd2l0aCB7Zm9yY2VSZWZyZXNoOnRydWV9LFxuICAgICAgICAgICAgICAgIC8vIHNvIGl0J3Mgc2FmZSB0byByZXR1cm4gdGhhdCB2YWx1ZS5cbiAgICAgICAgICAgICAgICBpZiAoZmV0Y2hpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLl9fc3RhbGVXaGlsZUZldGNoaW5nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLiNtb3ZlVG9UYWlsKGluZGV4KTtcbiAgICAgICAgICAgICAgICBpZiAodXBkYXRlQWdlT25HZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jdXBkYXRlSXRlbUFnZShpbmRleCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzdGF0dXMpIHtcbiAgICAgICAgICAgIHN0YXR1cy5nZXQgPSAnbWlzcyc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgI2Nvbm5lY3QocCwgbikge1xuICAgICAgICB0aGlzLiNwcmV2W25dID0gcDtcbiAgICAgICAgdGhpcy4jbmV4dFtwXSA9IG47XG4gICAgfVxuICAgICNtb3ZlVG9UYWlsKGluZGV4KSB7XG4gICAgICAgIC8vIGlmIHRhaWwgYWxyZWFkeSwgbm90aGluZyB0byBkb1xuICAgICAgICAvLyBpZiBoZWFkLCBtb3ZlIGhlYWQgdG8gbmV4dFtpbmRleF1cbiAgICAgICAgLy8gZWxzZVxuICAgICAgICAvLyAgIG1vdmUgbmV4dFtwcmV2W2luZGV4XV0gdG8gbmV4dFtpbmRleF0gKGhlYWQgaGFzIG5vIHByZXYpXG4gICAgICAgIC8vICAgbW92ZSBwcmV2W25leHRbaW5kZXhdXSB0byBwcmV2W2luZGV4XVxuICAgICAgICAvLyBwcmV2W2luZGV4XSA9IHRhaWxcbiAgICAgICAgLy8gbmV4dFt0YWlsXSA9IGluZGV4XG4gICAgICAgIC8vIHRhaWwgPSBpbmRleFxuICAgICAgICBpZiAoaW5kZXggIT09IHRoaXMuI3RhaWwpIHtcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gdGhpcy4jaGVhZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuI2hlYWQgPSB0aGlzLiNuZXh0W2luZGV4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuI2Nvbm5lY3QodGhpcy4jcHJldltpbmRleF0sIHRoaXMuI25leHRbaW5kZXhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuI2Nvbm5lY3QodGhpcy4jdGFpbCwgaW5kZXgpO1xuICAgICAgICAgICAgdGhpcy4jdGFpbCA9IGluZGV4O1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlbGV0ZXMgYSBrZXkgb3V0IG9mIHRoZSBjYWNoZS5cbiAgICAgKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUga2V5IHdhcyBkZWxldGVkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAgICovXG4gICAgZGVsZXRlKGspIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2RlbGV0ZShrLCAnZGVsZXRlJyk7XG4gICAgfVxuICAgICNkZWxldGUoaywgcmVhc29uKSB7XG4gICAgICAgIGxldCBkZWxldGVkID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLiNzaXplICE9PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuI2tleU1hcC5nZXQoayk7XG4gICAgICAgICAgICBpZiAoaW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLiNzaXplID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI2NsZWFyKHJlYXNvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiNyZW1vdmVJdGVtU2l6ZShpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHYgPSB0aGlzLiN2YWxMaXN0W2luZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHYpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2Ll9fYWJvcnRDb250cm9sbGVyLmFib3J0KG5ldyBFcnJvcignZGVsZXRlZCcpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLiNoYXNEaXNwb3NlIHx8IHRoaXMuI2hhc0Rpc3Bvc2VBZnRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuI2hhc0Rpc3Bvc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiNkaXNwb3NlPy4odiwgaywgcmVhc29uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLiNoYXNEaXNwb3NlQWZ0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiNkaXNwb3NlZD8ucHVzaChbdiwgaywgcmVhc29uXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy4ja2V5TWFwLmRlbGV0ZShrKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4ja2V5TGlzdFtpbmRleF0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI3ZhbExpc3RbaW5kZXhdID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IHRoaXMuI3RhaWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuI3RhaWwgPSB0aGlzLiNwcmV2W2luZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpbmRleCA9PT0gdGhpcy4jaGVhZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jaGVhZCA9IHRoaXMuI25leHRbaW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGkgPSB0aGlzLiNwcmV2W2luZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuI25leHRbcGldID0gdGhpcy4jbmV4dFtpbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuaSA9IHRoaXMuI25leHRbaW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jcHJldltuaV0gPSB0aGlzLiNwcmV2W2luZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLiNzaXplLS07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI2ZyZWUucHVzaChpbmRleCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLiNoYXNEaXNwb3NlQWZ0ZXIgJiYgdGhpcy4jZGlzcG9zZWQ/Lmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgZHQgPSB0aGlzLiNkaXNwb3NlZDtcbiAgICAgICAgICAgIGxldCB0YXNrO1xuICAgICAgICAgICAgd2hpbGUgKCh0YXNrID0gZHQ/LnNoaWZ0KCkpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jZGlzcG9zZUFmdGVyPy4oLi4udGFzayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlbGV0ZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENsZWFyIHRoZSBjYWNoZSBlbnRpcmVseSwgdGhyb3dpbmcgYXdheSBhbGwgdmFsdWVzLlxuICAgICAqL1xuICAgIGNsZWFyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jY2xlYXIoJ2RlbGV0ZScpO1xuICAgIH1cbiAgICAjY2xlYXIocmVhc29uKSB7XG4gICAgICAgIGZvciAoY29uc3QgaW5kZXggb2YgdGhpcy4jcmluZGV4ZXMoeyBhbGxvd1N0YWxlOiB0cnVlIH0pKSB7XG4gICAgICAgICAgICBjb25zdCB2ID0gdGhpcy4jdmFsTGlzdFtpbmRleF07XG4gICAgICAgICAgICBpZiAodGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2godikpIHtcbiAgICAgICAgICAgICAgICB2Ll9fYWJvcnRDb250cm9sbGVyLmFib3J0KG5ldyBFcnJvcignZGVsZXRlZCcpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGsgPSB0aGlzLiNrZXlMaXN0W2luZGV4XTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy4jaGFzRGlzcG9zZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiNkaXNwb3NlPy4odiwgaywgcmVhc29uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuI2hhc0Rpc3Bvc2VBZnRlcikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiNkaXNwb3NlZD8ucHVzaChbdiwgaywgcmVhc29uXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuI2tleU1hcC5jbGVhcigpO1xuICAgICAgICB0aGlzLiN2YWxMaXN0LmZpbGwodW5kZWZpbmVkKTtcbiAgICAgICAgdGhpcy4ja2V5TGlzdC5maWxsKHVuZGVmaW5lZCk7XG4gICAgICAgIGlmICh0aGlzLiN0dGxzICYmIHRoaXMuI3N0YXJ0cykge1xuICAgICAgICAgICAgdGhpcy4jdHRscy5maWxsKDApO1xuICAgICAgICAgICAgdGhpcy4jc3RhcnRzLmZpbGwoMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuI3NpemVzKSB7XG4gICAgICAgICAgICB0aGlzLiNzaXplcy5maWxsKDApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuI2hlYWQgPSAwO1xuICAgICAgICB0aGlzLiN0YWlsID0gMDtcbiAgICAgICAgdGhpcy4jZnJlZS5sZW5ndGggPSAwO1xuICAgICAgICB0aGlzLiNjYWxjdWxhdGVkU2l6ZSA9IDA7XG4gICAgICAgIHRoaXMuI3NpemUgPSAwO1xuICAgICAgICBpZiAodGhpcy4jaGFzRGlzcG9zZUFmdGVyICYmIHRoaXMuI2Rpc3Bvc2VkKSB7XG4gICAgICAgICAgICBjb25zdCBkdCA9IHRoaXMuI2Rpc3Bvc2VkO1xuICAgICAgICAgICAgbGV0IHRhc2s7XG4gICAgICAgICAgICB3aGlsZSAoKHRhc2sgPSBkdD8uc2hpZnQoKSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiNkaXNwb3NlQWZ0ZXI/LiguLi50YXNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuTFJVQ2FjaGUgPSBMUlVDYWNoZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk1pbmlwYXNzID0gZXhwb3J0cy5pc1dyaXRhYmxlID0gZXhwb3J0cy5pc1JlYWRhYmxlID0gZXhwb3J0cy5pc1N0cmVhbSA9IHZvaWQgMDtcbmNvbnN0IHByb2MgPSB0eXBlb2YgcHJvY2VzcyA9PT0gJ29iamVjdCcgJiYgcHJvY2Vzc1xuICAgID8gcHJvY2Vzc1xuICAgIDoge1xuICAgICAgICBzdGRvdXQ6IG51bGwsXG4gICAgICAgIHN0ZGVycjogbnVsbCxcbiAgICB9O1xuY29uc3Qgbm9kZV9ldmVudHNfMSA9IHJlcXVpcmUoXCJub2RlOmV2ZW50c1wiKTtcbmNvbnN0IG5vZGVfc3RyZWFtXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIm5vZGU6c3RyZWFtXCIpKTtcbmNvbnN0IG5vZGVfc3RyaW5nX2RlY29kZXJfMSA9IHJlcXVpcmUoXCJub2RlOnN0cmluZ19kZWNvZGVyXCIpO1xuLyoqXG4gKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgYXJndW1lbnQgaXMgYSBNaW5pcGFzcyBzdHJlYW0sIE5vZGUgc3RyZWFtLCBvciBzb21ldGhpbmdcbiAqIGVsc2UgdGhhdCBNaW5pcGFzcyBjYW4gaW50ZXJhY3Qgd2l0aC5cbiAqL1xuY29uc3QgaXNTdHJlYW0gPSAocykgPT4gISFzICYmXG4gICAgdHlwZW9mIHMgPT09ICdvYmplY3QnICYmXG4gICAgKHMgaW5zdGFuY2VvZiBNaW5pcGFzcyB8fFxuICAgICAgICBzIGluc3RhbmNlb2Ygbm9kZV9zdHJlYW1fMS5kZWZhdWx0IHx8XG4gICAgICAgICgwLCBleHBvcnRzLmlzUmVhZGFibGUpKHMpIHx8XG4gICAgICAgICgwLCBleHBvcnRzLmlzV3JpdGFibGUpKHMpKTtcbmV4cG9ydHMuaXNTdHJlYW0gPSBpc1N0cmVhbTtcbi8qKlxuICogUmV0dXJuIHRydWUgaWYgdGhlIGFyZ3VtZW50IGlzIGEgdmFsaWQge0BsaW5rIE1pbmlwYXNzLlJlYWRhYmxlfVxuICovXG5jb25zdCBpc1JlYWRhYmxlID0gKHMpID0+ICEhcyAmJlxuICAgIHR5cGVvZiBzID09PSAnb2JqZWN0JyAmJlxuICAgIHMgaW5zdGFuY2VvZiBub2RlX2V2ZW50c18xLkV2ZW50RW1pdHRlciAmJlxuICAgIHR5cGVvZiBzLnBpcGUgPT09ICdmdW5jdGlvbicgJiZcbiAgICAvLyBub2RlIGNvcmUgV3JpdGFibGUgc3RyZWFtcyBoYXZlIGEgcGlwZSgpIG1ldGhvZCwgYnV0IGl0IHRocm93c1xuICAgIHMucGlwZSAhPT0gbm9kZV9zdHJlYW1fMS5kZWZhdWx0LldyaXRhYmxlLnByb3RvdHlwZS5waXBlO1xuZXhwb3J0cy5pc1JlYWRhYmxlID0gaXNSZWFkYWJsZTtcbi8qKlxuICogUmV0dXJuIHRydWUgaWYgdGhlIGFyZ3VtZW50IGlzIGEgdmFsaWQge0BsaW5rIE1pbmlwYXNzLldyaXRhYmxlfVxuICovXG5jb25zdCBpc1dyaXRhYmxlID0gKHMpID0+ICEhcyAmJlxuICAgIHR5cGVvZiBzID09PSAnb2JqZWN0JyAmJlxuICAgIHMgaW5zdGFuY2VvZiBub2RlX2V2ZW50c18xLkV2ZW50RW1pdHRlciAmJlxuICAgIHR5cGVvZiBzLndyaXRlID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIHMuZW5kID09PSAnZnVuY3Rpb24nO1xuZXhwb3J0cy5pc1dyaXRhYmxlID0gaXNXcml0YWJsZTtcbmNvbnN0IEVPRiA9IFN5bWJvbCgnRU9GJyk7XG5jb25zdCBNQVlCRV9FTUlUX0VORCA9IFN5bWJvbCgnbWF5YmVFbWl0RW5kJyk7XG5jb25zdCBFTUlUVEVEX0VORCA9IFN5bWJvbCgnZW1pdHRlZEVuZCcpO1xuY29uc3QgRU1JVFRJTkdfRU5EID0gU3ltYm9sKCdlbWl0dGluZ0VuZCcpO1xuY29uc3QgRU1JVFRFRF9FUlJPUiA9IFN5bWJvbCgnZW1pdHRlZEVycm9yJyk7XG5jb25zdCBDTE9TRUQgPSBTeW1ib2woJ2Nsb3NlZCcpO1xuY29uc3QgUkVBRCA9IFN5bWJvbCgncmVhZCcpO1xuY29uc3QgRkxVU0ggPSBTeW1ib2woJ2ZsdXNoJyk7XG5jb25zdCBGTFVTSENIVU5LID0gU3ltYm9sKCdmbHVzaENodW5rJyk7XG5jb25zdCBFTkNPRElORyA9IFN5bWJvbCgnZW5jb2RpbmcnKTtcbmNvbnN0IERFQ09ERVIgPSBTeW1ib2woJ2RlY29kZXInKTtcbmNvbnN0IEZMT1dJTkcgPSBTeW1ib2woJ2Zsb3dpbmcnKTtcbmNvbnN0IFBBVVNFRCA9IFN5bWJvbCgncGF1c2VkJyk7XG5jb25zdCBSRVNVTUUgPSBTeW1ib2woJ3Jlc3VtZScpO1xuY29uc3QgQlVGRkVSID0gU3ltYm9sKCdidWZmZXInKTtcbmNvbnN0IFBJUEVTID0gU3ltYm9sKCdwaXBlcycpO1xuY29uc3QgQlVGRkVSTEVOR1RIID0gU3ltYm9sKCdidWZmZXJMZW5ndGgnKTtcbmNvbnN0IEJVRkZFUlBVU0ggPSBTeW1ib2woJ2J1ZmZlclB1c2gnKTtcbmNvbnN0IEJVRkZFUlNISUZUID0gU3ltYm9sKCdidWZmZXJTaGlmdCcpO1xuY29uc3QgT0JKRUNUTU9ERSA9IFN5bWJvbCgnb2JqZWN0TW9kZScpO1xuLy8gaW50ZXJuYWwgZXZlbnQgd2hlbiBzdHJlYW0gaXMgZGVzdHJveWVkXG5jb25zdCBERVNUUk9ZRUQgPSBTeW1ib2woJ2Rlc3Ryb3llZCcpO1xuLy8gaW50ZXJuYWwgZXZlbnQgd2hlbiBzdHJlYW0gaGFzIGFuIGVycm9yXG5jb25zdCBFUlJPUiA9IFN5bWJvbCgnZXJyb3InKTtcbmNvbnN0IEVNSVREQVRBID0gU3ltYm9sKCdlbWl0RGF0YScpO1xuY29uc3QgRU1JVEVORCA9IFN5bWJvbCgnZW1pdEVuZCcpO1xuY29uc3QgRU1JVEVORDIgPSBTeW1ib2woJ2VtaXRFbmQyJyk7XG5jb25zdCBBU1lOQyA9IFN5bWJvbCgnYXN5bmMnKTtcbmNvbnN0IEFCT1JUID0gU3ltYm9sKCdhYm9ydCcpO1xuY29uc3QgQUJPUlRFRCA9IFN5bWJvbCgnYWJvcnRlZCcpO1xuY29uc3QgU0lHTkFMID0gU3ltYm9sKCdzaWduYWwnKTtcbmNvbnN0IERBVEFMSVNURU5FUlMgPSBTeW1ib2woJ2RhdGFMaXN0ZW5lcnMnKTtcbmNvbnN0IERJU0NBUkRFRCA9IFN5bWJvbCgnZGlzY2FyZGVkJyk7XG5jb25zdCBkZWZlciA9IChmbikgPT4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmbik7XG5jb25zdCBub2RlZmVyID0gKGZuKSA9PiBmbigpO1xuY29uc3QgaXNFbmRpc2ggPSAoZXYpID0+IGV2ID09PSAnZW5kJyB8fCBldiA9PT0gJ2ZpbmlzaCcgfHwgZXYgPT09ICdwcmVmaW5pc2gnO1xuY29uc3QgaXNBcnJheUJ1ZmZlckxpa2UgPSAoYikgPT4gYiBpbnN0YW5jZW9mIEFycmF5QnVmZmVyIHx8XG4gICAgKCEhYiAmJlxuICAgICAgICB0eXBlb2YgYiA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgYi5jb25zdHJ1Y3RvciAmJlxuICAgICAgICBiLmNvbnN0cnVjdG9yLm5hbWUgPT09ICdBcnJheUJ1ZmZlcicgJiZcbiAgICAgICAgYi5ieXRlTGVuZ3RoID49IDApO1xuY29uc3QgaXNBcnJheUJ1ZmZlclZpZXcgPSAoYikgPT4gIUJ1ZmZlci5pc0J1ZmZlcihiKSAmJiBBcnJheUJ1ZmZlci5pc1ZpZXcoYik7XG4vKipcbiAqIEludGVybmFsIGNsYXNzIHJlcHJlc2VudGluZyBhIHBpcGUgdG8gYSBkZXN0aW5hdGlvbiBzdHJlYW0uXG4gKlxuICogQGludGVybmFsXG4gKi9cbmNsYXNzIFBpcGUge1xuICAgIHNyYztcbiAgICBkZXN0O1xuICAgIG9wdHM7XG4gICAgb25kcmFpbjtcbiAgICBjb25zdHJ1Y3RvcihzcmMsIGRlc3QsIG9wdHMpIHtcbiAgICAgICAgdGhpcy5zcmMgPSBzcmM7XG4gICAgICAgIHRoaXMuZGVzdCA9IGRlc3Q7XG4gICAgICAgIHRoaXMub3B0cyA9IG9wdHM7XG4gICAgICAgIHRoaXMub25kcmFpbiA9ICgpID0+IHNyY1tSRVNVTUVdKCk7XG4gICAgICAgIHRoaXMuZGVzdC5vbignZHJhaW4nLCB0aGlzLm9uZHJhaW4pO1xuICAgIH1cbiAgICB1bnBpcGUoKSB7XG4gICAgICAgIHRoaXMuZGVzdC5yZW1vdmVMaXN0ZW5lcignZHJhaW4nLCB0aGlzLm9uZHJhaW4pO1xuICAgIH1cbiAgICAvLyBvbmx5IGhlcmUgZm9yIHRoZSBwcm90b3R5cGVcbiAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICBwcm94eUVycm9ycyhfZXIpIHsgfVxuICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgZW5kKCkge1xuICAgICAgICB0aGlzLnVucGlwZSgpO1xuICAgICAgICBpZiAodGhpcy5vcHRzLmVuZClcbiAgICAgICAgICAgIHRoaXMuZGVzdC5lbmQoKTtcbiAgICB9XG59XG4vKipcbiAqIEludGVybmFsIGNsYXNzIHJlcHJlc2VudGluZyBhIHBpcGUgdG8gYSBkZXN0aW5hdGlvbiBzdHJlYW0gd2hlcmVcbiAqIGVycm9ycyBhcmUgcHJveGllZC5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuY2xhc3MgUGlwZVByb3h5RXJyb3JzIGV4dGVuZHMgUGlwZSB7XG4gICAgdW5waXBlKCkge1xuICAgICAgICB0aGlzLnNyYy5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCB0aGlzLnByb3h5RXJyb3JzKTtcbiAgICAgICAgc3VwZXIudW5waXBlKCk7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKHNyYywgZGVzdCwgb3B0cykge1xuICAgICAgICBzdXBlcihzcmMsIGRlc3QsIG9wdHMpO1xuICAgICAgICB0aGlzLnByb3h5RXJyb3JzID0gZXIgPT4gZGVzdC5lbWl0KCdlcnJvcicsIGVyKTtcbiAgICAgICAgc3JjLm9uKCdlcnJvcicsIHRoaXMucHJveHlFcnJvcnMpO1xuICAgIH1cbn1cbmNvbnN0IGlzT2JqZWN0TW9kZU9wdGlvbnMgPSAobykgPT4gISFvLm9iamVjdE1vZGU7XG5jb25zdCBpc0VuY29kaW5nT3B0aW9ucyA9IChvKSA9PiAhby5vYmplY3RNb2RlICYmICEhby5lbmNvZGluZyAmJiBvLmVuY29kaW5nICE9PSAnYnVmZmVyJztcbi8qKlxuICogTWFpbiBleHBvcnQsIHRoZSBNaW5pcGFzcyBjbGFzc1xuICpcbiAqIGBSVHlwZWAgaXMgdGhlIHR5cGUgb2YgZGF0YSBlbWl0dGVkLCBkZWZhdWx0cyB0byBCdWZmZXJcbiAqXG4gKiBgV1R5cGVgIGlzIHRoZSB0eXBlIG9mIGRhdGEgdG8gYmUgd3JpdHRlbiwgaWYgUlR5cGUgaXMgYnVmZmVyIG9yIHN0cmluZyxcbiAqIHRoZW4gYW55IHtAbGluayBNaW5pcGFzcy5Db250aWd1b3VzRGF0YX0gaXMgYWxsb3dlZC5cbiAqXG4gKiBgRXZlbnRzYCBpcyB0aGUgc2V0IG9mIGV2ZW50IGhhbmRsZXIgc2lnbmF0dXJlcyB0aGF0IHRoaXMgb2JqZWN0XG4gKiB3aWxsIGVtaXQsIHNlZSB7QGxpbmsgTWluaXBhc3MuRXZlbnRzfVxuICovXG5jbGFzcyBNaW5pcGFzcyBleHRlbmRzIG5vZGVfZXZlbnRzXzEuRXZlbnRFbWl0dGVyIHtcbiAgICBbRkxPV0lOR10gPSBmYWxzZTtcbiAgICBbUEFVU0VEXSA9IGZhbHNlO1xuICAgIFtQSVBFU10gPSBbXTtcbiAgICBbQlVGRkVSXSA9IFtdO1xuICAgIFtPQkpFQ1RNT0RFXTtcbiAgICBbRU5DT0RJTkddO1xuICAgIFtBU1lOQ107XG4gICAgW0RFQ09ERVJdO1xuICAgIFtFT0ZdID0gZmFsc2U7XG4gICAgW0VNSVRURURfRU5EXSA9IGZhbHNlO1xuICAgIFtFTUlUVElOR19FTkRdID0gZmFsc2U7XG4gICAgW0NMT1NFRF0gPSBmYWxzZTtcbiAgICBbRU1JVFRFRF9FUlJPUl0gPSBudWxsO1xuICAgIFtCVUZGRVJMRU5HVEhdID0gMDtcbiAgICBbREVTVFJPWUVEXSA9IGZhbHNlO1xuICAgIFtTSUdOQUxdO1xuICAgIFtBQk9SVEVEXSA9IGZhbHNlO1xuICAgIFtEQVRBTElTVEVORVJTXSA9IDA7XG4gICAgW0RJU0NBUkRFRF0gPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiB0cnVlIGlmIHRoZSBzdHJlYW0gY2FuIGJlIHdyaXR0ZW5cbiAgICAgKi9cbiAgICB3cml0YWJsZSA9IHRydWU7XG4gICAgLyoqXG4gICAgICogdHJ1ZSBpZiB0aGUgc3RyZWFtIGNhbiBiZSByZWFkXG4gICAgICovXG4gICAgcmVhZGFibGUgPSB0cnVlO1xuICAgIC8qKlxuICAgICAqIElmIGBSVHlwZWAgaXMgQnVmZmVyLCB0aGVuIG9wdGlvbnMgZG8gbm90IG5lZWQgdG8gYmUgcHJvdmlkZWQuXG4gICAgICogT3RoZXJ3aXNlLCBhbiBvcHRpb25zIG9iamVjdCBtdXN0IGJlIHByb3ZpZGVkIHRvIHNwZWNpZnkgZWl0aGVyXG4gICAgICoge0BsaW5rIE1pbmlwYXNzLlNoYXJlZE9wdGlvbnMub2JqZWN0TW9kZX0gb3JcbiAgICAgKiB7QGxpbmsgTWluaXBhc3MuU2hhcmVkT3B0aW9ucy5lbmNvZGluZ30sIGFzIGFwcHJvcHJpYXRlLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IChhcmdzWzBdIHx8XG4gICAgICAgICAgICB7fSk7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIGlmIChvcHRpb25zLm9iamVjdE1vZGUgJiYgdHlwZW9mIG9wdGlvbnMuZW5jb2RpbmcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFbmNvZGluZyBhbmQgb2JqZWN0TW9kZSBtYXkgbm90IGJlIHVzZWQgdG9nZXRoZXInKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNPYmplY3RNb2RlT3B0aW9ucyhvcHRpb25zKSkge1xuICAgICAgICAgICAgdGhpc1tPQkpFQ1RNT0RFXSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzW0VOQ09ESU5HXSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNFbmNvZGluZ09wdGlvbnMob3B0aW9ucykpIHtcbiAgICAgICAgICAgIHRoaXNbRU5DT0RJTkddID0gb3B0aW9ucy5lbmNvZGluZztcbiAgICAgICAgICAgIHRoaXNbT0JKRUNUTU9ERV0gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXNbT0JKRUNUTU9ERV0gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXNbRU5DT0RJTkddID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzW0FTWU5DXSA9ICEhb3B0aW9ucy5hc3luYztcbiAgICAgICAgdGhpc1tERUNPREVSXSA9IHRoaXNbRU5DT0RJTkddXG4gICAgICAgICAgICA/IG5ldyBub2RlX3N0cmluZ19kZWNvZGVyXzEuU3RyaW5nRGVjb2Rlcih0aGlzW0VOQ09ESU5HXSlcbiAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgLy9AdHMtaWdub3JlIC0gcHJpdmF0ZSBvcHRpb24gZm9yIGRlYnVnZ2luZyBhbmQgdGVzdGluZ1xuICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmRlYnVnRXhwb3NlQnVmZmVyID09PSB0cnVlKSB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2J1ZmZlcicsIHsgZ2V0OiAoKSA9PiB0aGlzW0JVRkZFUl0gfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy9AdHMtaWdub3JlIC0gcHJpdmF0ZSBvcHRpb24gZm9yIGRlYnVnZ2luZyBhbmQgdGVzdGluZ1xuICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmRlYnVnRXhwb3NlUGlwZXMgPT09IHRydWUpIHtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAncGlwZXMnLCB7IGdldDogKCkgPT4gdGhpc1tQSVBFU10gfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBzaWduYWwgfSA9IG9wdGlvbnM7XG4gICAgICAgIGlmIChzaWduYWwpIHtcbiAgICAgICAgICAgIHRoaXNbU0lHTkFMXSA9IHNpZ25hbDtcbiAgICAgICAgICAgIGlmIChzaWduYWwuYWJvcnRlZCkge1xuICAgICAgICAgICAgICAgIHRoaXNbQUJPUlRdKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCAoKSA9PiB0aGlzW0FCT1JUXSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgYW1vdW50IG9mIGRhdGEgc3RvcmVkIGluIHRoZSBidWZmZXIgd2FpdGluZyB0byBiZSByZWFkLlxuICAgICAqXG4gICAgICogRm9yIEJ1ZmZlciBzdHJpbmdzLCB0aGlzIHdpbGwgYmUgdGhlIHRvdGFsIGJ5dGUgbGVuZ3RoLlxuICAgICAqIEZvciBzdHJpbmcgZW5jb2Rpbmcgc3RyZWFtcywgdGhpcyB3aWxsIGJlIHRoZSBzdHJpbmcgY2hhcmFjdGVyIGxlbmd0aCxcbiAgICAgKiBhY2NvcmRpbmcgdG8gSmF2YVNjcmlwdCdzIGBzdHJpbmcubGVuZ3RoYCBsb2dpYy5cbiAgICAgKiBGb3Igb2JqZWN0TW9kZSBzdHJlYW1zLCB0aGlzIGlzIGEgY291bnQgb2YgdGhlIGl0ZW1zIHdhaXRpbmcgdG8gYmVcbiAgICAgKiBlbWl0dGVkLlxuICAgICAqL1xuICAgIGdldCBidWZmZXJMZW5ndGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzW0JVRkZFUkxFTkdUSF07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBgQnVmZmVyRW5jb2RpbmdgIGN1cnJlbnRseSBpbiB1c2UsIG9yIGBudWxsYFxuICAgICAqL1xuICAgIGdldCBlbmNvZGluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbRU5DT0RJTkddO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCAtIFRoaXMgaXMgYSByZWFkIG9ubHkgcHJvcGVydHlcbiAgICAgKi9cbiAgICBzZXQgZW5jb2RpbmcoX2VuYykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VuY29kaW5nIG11c3QgYmUgc2V0IGF0IGluc3RhbnRpYXRpb24gdGltZScpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCAtIEVuY29kaW5nIG1heSBvbmx5IGJlIHNldCBhdCBpbnN0YW50aWF0aW9uIHRpbWVcbiAgICAgKi9cbiAgICBzZXRFbmNvZGluZyhfZW5jKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRW5jb2RpbmcgbXVzdCBiZSBzZXQgYXQgaW5zdGFudGlhdGlvbiB0aW1lJyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRydWUgaWYgdGhpcyBpcyBhbiBvYmplY3RNb2RlIHN0cmVhbVxuICAgICAqL1xuICAgIGdldCBvYmplY3RNb2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpc1tPQkpFQ1RNT0RFXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgLSBUaGlzIGlzIGEgcmVhZC1vbmx5IHByb3BlcnR5XG4gICAgICovXG4gICAgc2V0IG9iamVjdE1vZGUoX29tKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignb2JqZWN0TW9kZSBtdXN0IGJlIHNldCBhdCBpbnN0YW50aWF0aW9uIHRpbWUnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogdHJ1ZSBpZiB0aGlzIGlzIGFuIGFzeW5jIHN0cmVhbVxuICAgICAqL1xuICAgIGdldCBbJ2FzeW5jJ10oKSB7XG4gICAgICAgIHJldHVybiB0aGlzW0FTWU5DXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0IHRvIHRydWUgdG8gbWFrZSB0aGlzIHN0cmVhbSBhc3luYy5cbiAgICAgKlxuICAgICAqIE9uY2Ugc2V0LCBpdCBjYW5ub3QgYmUgdW5zZXQsIGFzIHRoaXMgd291bGQgcG90ZW50aWFsbHkgY2F1c2UgaW5jb3JyZWN0XG4gICAgICogYmVoYXZpb3IuICBJZSwgYSBzeW5jIHN0cmVhbSBjYW4gYmUgbWFkZSBhc3luYywgYnV0IGFuIGFzeW5jIHN0cmVhbVxuICAgICAqIGNhbm5vdCBiZSBzYWZlbHkgbWFkZSBzeW5jLlxuICAgICAqL1xuICAgIHNldCBbJ2FzeW5jJ10oYSkge1xuICAgICAgICB0aGlzW0FTWU5DXSA9IHRoaXNbQVNZTkNdIHx8ICEhYTtcbiAgICB9XG4gICAgLy8gZHJvcCBldmVyeXRoaW5nIGFuZCBnZXQgb3V0IG9mIHRoZSBmbG93IGNvbXBsZXRlbHlcbiAgICBbQUJPUlRdKCkge1xuICAgICAgICB0aGlzW0FCT1JURURdID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5lbWl0KCdhYm9ydCcsIHRoaXNbU0lHTkFMXT8ucmVhc29uKTtcbiAgICAgICAgdGhpcy5kZXN0cm95KHRoaXNbU0lHTkFMXT8ucmVhc29uKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVHJ1ZSBpZiB0aGUgc3RyZWFtIGhhcyBiZWVuIGFib3J0ZWQuXG4gICAgICovXG4gICAgZ2V0IGFib3J0ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzW0FCT1JURURdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBOby1vcCBzZXR0ZXIuIFN0cmVhbSBhYm9ydGVkIHN0YXR1cyBpcyBzZXQgdmlhIHRoZSBBYm9ydFNpZ25hbCBwcm92aWRlZFxuICAgICAqIGluIHRoZSBjb25zdHJ1Y3RvciBvcHRpb25zLlxuICAgICAqL1xuICAgIHNldCBhYm9ydGVkKF8pIHsgfVxuICAgIHdyaXRlKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgICAgICAgaWYgKHRoaXNbQUJPUlRFRF0pXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzW0VPRl0pXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3dyaXRlIGFmdGVyIGVuZCcpO1xuICAgICAgICBpZiAodGhpc1tERVNUUk9ZRURdKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgT2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoJ0Nhbm5vdCBjYWxsIHdyaXRlIGFmdGVyIGEgc3RyZWFtIHdhcyBkZXN0cm95ZWQnKSwgeyBjb2RlOiAnRVJSX1NUUkVBTV9ERVNUUk9ZRUQnIH0pKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNiID0gZW5jb2Rpbmc7XG4gICAgICAgICAgICBlbmNvZGluZyA9ICd1dGY4JztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWVuY29kaW5nKVxuICAgICAgICAgICAgZW5jb2RpbmcgPSAndXRmOCc7XG4gICAgICAgIGNvbnN0IGZuID0gdGhpc1tBU1lOQ10gPyBkZWZlciA6IG5vZGVmZXI7XG4gICAgICAgIC8vIGNvbnZlcnQgYXJyYXkgYnVmZmVycyBhbmQgdHlwZWQgYXJyYXkgdmlld3MgaW50byBidWZmZXJzXG4gICAgICAgIC8vIGF0IHNvbWUgcG9pbnQgaW4gdGhlIGZ1dHVyZSwgd2UgbWF5IHdhbnQgdG8gZG8gdGhlIG9wcG9zaXRlIVxuICAgICAgICAvLyBsZWF2ZSBzdHJpbmdzIGFuZCBidWZmZXJzIGFzLWlzXG4gICAgICAgIC8vIGFueXRoaW5nIGlzIG9ubHkgYWxsb3dlZCBpZiBpbiBvYmplY3QgbW9kZSwgc28gdGhyb3dcbiAgICAgICAgaWYgKCF0aGlzW09CSkVDVE1PREVdICYmICFCdWZmZXIuaXNCdWZmZXIoY2h1bmspKSB7XG4gICAgICAgICAgICBpZiAoaXNBcnJheUJ1ZmZlclZpZXcoY2h1bmspKSB7XG4gICAgICAgICAgICAgICAgLy9AdHMtaWdub3JlIC0gc2luZnVsIHVuc2FmZSB0eXBlIGNoYW5naW5nXG4gICAgICAgICAgICAgICAgY2h1bmsgPSBCdWZmZXIuZnJvbShjaHVuay5idWZmZXIsIGNodW5rLmJ5dGVPZmZzZXQsIGNodW5rLmJ5dGVMZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaXNBcnJheUJ1ZmZlckxpa2UoY2h1bmspKSB7XG4gICAgICAgICAgICAgICAgLy9AdHMtaWdub3JlIC0gc2luZnVsIHVuc2FmZSB0eXBlIGNoYW5naW5nXG4gICAgICAgICAgICAgICAgY2h1bmsgPSBCdWZmZXIuZnJvbShjaHVuayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgY2h1bmsgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb24tY29udGlndW91cyBkYXRhIHdyaXR0ZW4gdG8gbm9uLW9iamVjdE1vZGUgc3RyZWFtJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gaGFuZGxlIG9iamVjdCBtb2RlIHVwIGZyb250LCBzaW5jZSBpdCdzIHNpbXBsZXJcbiAgICAgICAgLy8gdGhpcyB5aWVsZHMgYmV0dGVyIHBlcmZvcm1hbmNlLCBmZXdlciBjaGVja3MgbGF0ZXIuXG4gICAgICAgIGlmICh0aGlzW09CSkVDVE1PREVdKSB7XG4gICAgICAgICAgICAvLyBtYXliZSBpbXBvc3NpYmxlP1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICBpZiAodGhpc1tGTE9XSU5HXSAmJiB0aGlzW0JVRkZFUkxFTkdUSF0gIT09IDApXG4gICAgICAgICAgICAgICAgdGhpc1tGTFVTSF0odHJ1ZSk7XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgaWYgKHRoaXNbRkxPV0lOR10pXG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdkYXRhJywgY2h1bmspO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRoaXNbQlVGRkVSUFVTSF0oY2h1bmspO1xuICAgICAgICAgICAgaWYgKHRoaXNbQlVGRkVSTEVOR1RIXSAhPT0gMClcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ3JlYWRhYmxlJyk7XG4gICAgICAgICAgICBpZiAoY2IpXG4gICAgICAgICAgICAgICAgZm4oY2IpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXNbRkxPV0lOR107XG4gICAgICAgIH1cbiAgICAgICAgLy8gYXQgdGhpcyBwb2ludCB0aGUgY2h1bmsgaXMgYSBidWZmZXIgb3Igc3RyaW5nXG4gICAgICAgIC8vIGRvbid0IGJ1ZmZlciBpdCB1cCBvciBzZW5kIGl0IHRvIHRoZSBkZWNvZGVyXG4gICAgICAgIGlmICghY2h1bmsubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAodGhpc1tCVUZGRVJMRU5HVEhdICE9PSAwKVxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgncmVhZGFibGUnKTtcbiAgICAgICAgICAgIGlmIChjYilcbiAgICAgICAgICAgICAgICBmbihjYik7XG4gICAgICAgICAgICByZXR1cm4gdGhpc1tGTE9XSU5HXTtcbiAgICAgICAgfVxuICAgICAgICAvLyBmYXN0LXBhdGggd3JpdGluZyBzdHJpbmdzIG9mIHNhbWUgZW5jb2RpbmcgdG8gYSBzdHJlYW0gd2l0aFxuICAgICAgICAvLyBhbiBlbXB0eSBidWZmZXIsIHNraXBwaW5nIHRoZSBidWZmZXIvZGVjb2RlciBkYW5jZVxuICAgICAgICBpZiAodHlwZW9mIGNodW5rID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgLy8gdW5sZXNzIGl0IGlzIGEgc3RyaW5nIGFscmVhZHkgcmVhZHkgZm9yIHVzIHRvIHVzZVxuICAgICAgICAgICAgIShlbmNvZGluZyA9PT0gdGhpc1tFTkNPRElOR10gJiYgIXRoaXNbREVDT0RFUl0/Lmxhc3ROZWVkKSkge1xuICAgICAgICAgICAgLy9AdHMtaWdub3JlIC0gc2luZnVsIHVuc2FmZSB0eXBlIGNoYW5nZVxuICAgICAgICAgICAgY2h1bmsgPSBCdWZmZXIuZnJvbShjaHVuaywgZW5jb2RpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoY2h1bmspICYmIHRoaXNbRU5DT0RJTkddKSB7XG4gICAgICAgICAgICAvL0B0cy1pZ25vcmUgLSBzaW5mdWwgdW5zYWZlIHR5cGUgY2hhbmdlXG4gICAgICAgICAgICBjaHVuayA9IHRoaXNbREVDT0RFUl0ud3JpdGUoY2h1bmspO1xuICAgICAgICB9XG4gICAgICAgIC8vIE5vdGU6IGZsdXNoaW5nIENBTiBwb3RlbnRpYWxseSBzd2l0Y2ggdXMgaW50byBub3QtZmxvd2luZyBtb2RlXG4gICAgICAgIGlmICh0aGlzW0ZMT1dJTkddICYmIHRoaXNbQlVGRkVSTEVOR1RIXSAhPT0gMClcbiAgICAgICAgICAgIHRoaXNbRkxVU0hdKHRydWUpO1xuICAgICAgICBpZiAodGhpc1tGTE9XSU5HXSlcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZGF0YScsIGNodW5rKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpc1tCVUZGRVJQVVNIXShjaHVuayk7XG4gICAgICAgIGlmICh0aGlzW0JVRkZFUkxFTkdUSF0gIT09IDApXG4gICAgICAgICAgICB0aGlzLmVtaXQoJ3JlYWRhYmxlJyk7XG4gICAgICAgIGlmIChjYilcbiAgICAgICAgICAgIGZuKGNiKTtcbiAgICAgICAgcmV0dXJuIHRoaXNbRkxPV0lOR107XG4gICAgfVxuICAgIC8qKlxuICAgICAqIExvdy1sZXZlbCBleHBsaWNpdCByZWFkIG1ldGhvZC5cbiAgICAgKlxuICAgICAqIEluIG9iamVjdE1vZGUsIHRoZSBhcmd1bWVudCBpcyBpZ25vcmVkLCBhbmQgb25lIGl0ZW0gaXMgcmV0dXJuZWQgaWZcbiAgICAgKiBhdmFpbGFibGUuXG4gICAgICpcbiAgICAgKiBgbmAgaXMgdGhlIG51bWJlciBvZiBieXRlcyAob3IgaW4gdGhlIGNhc2Ugb2YgZW5jb2Rpbmcgc3RyZWFtcyxcbiAgICAgKiBjaGFyYWN0ZXJzKSB0byBjb25zdW1lLiBJZiBgbmAgaXMgbm90IHByb3ZpZGVkLCB0aGVuIHRoZSBlbnRpcmUgYnVmZmVyXG4gICAgICogaXMgcmV0dXJuZWQsIG9yIGBudWxsYCBpcyByZXR1cm5lZCBpZiBubyBkYXRhIGlzIGF2YWlsYWJsZS5cbiAgICAgKlxuICAgICAqIElmIGBuYCBpcyBncmVhdGVyIHRoYXQgdGhlIGFtb3VudCBvZiBkYXRhIGluIHRoZSBpbnRlcm5hbCBidWZmZXIsXG4gICAgICogdGhlbiBgbnVsbGAgaXMgcmV0dXJuZWQuXG4gICAgICovXG4gICAgcmVhZChuKSB7XG4gICAgICAgIGlmICh0aGlzW0RFU1RST1lFRF0pXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgdGhpc1tESVNDQVJERURdID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzW0JVRkZFUkxFTkdUSF0gPT09IDAgfHxcbiAgICAgICAgICAgIG4gPT09IDAgfHxcbiAgICAgICAgICAgIChuICYmIG4gPiB0aGlzW0JVRkZFUkxFTkdUSF0pKSB7XG4gICAgICAgICAgICB0aGlzW01BWUJFX0VNSVRfRU5EXSgpO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXNbT0JKRUNUTU9ERV0pXG4gICAgICAgICAgICBuID0gbnVsbDtcbiAgICAgICAgaWYgKHRoaXNbQlVGRkVSXS5sZW5ndGggPiAxICYmICF0aGlzW09CSkVDVE1PREVdKSB7XG4gICAgICAgICAgICAvLyBub3Qgb2JqZWN0IG1vZGUsIHNvIGlmIHdlIGhhdmUgYW4gZW5jb2RpbmcsIHRoZW4gUlR5cGUgaXMgc3RyaW5nXG4gICAgICAgICAgICAvLyBvdGhlcndpc2UsIG11c3QgYmUgQnVmZmVyXG4gICAgICAgICAgICB0aGlzW0JVRkZFUl0gPSBbXG4gICAgICAgICAgICAgICAgKHRoaXNbRU5DT0RJTkddXG4gICAgICAgICAgICAgICAgICAgID8gdGhpc1tCVUZGRVJdLmpvaW4oJycpXG4gICAgICAgICAgICAgICAgICAgIDogQnVmZmVyLmNvbmNhdCh0aGlzW0JVRkZFUl0sIHRoaXNbQlVGRkVSTEVOR1RIXSkpLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXQgPSB0aGlzW1JFQURdKG4gfHwgbnVsbCwgdGhpc1tCVUZGRVJdWzBdKTtcbiAgICAgICAgdGhpc1tNQVlCRV9FTUlUX0VORF0oKTtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gICAgW1JFQURdKG4sIGNodW5rKSB7XG4gICAgICAgIGlmICh0aGlzW09CSkVDVE1PREVdKVxuICAgICAgICAgICAgdGhpc1tCVUZGRVJTSElGVF0oKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBjID0gY2h1bms7XG4gICAgICAgICAgICBpZiAobiA9PT0gYy5sZW5ndGggfHwgbiA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICB0aGlzW0JVRkZFUlNISUZUXSgpO1xuICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIGMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgdGhpc1tCVUZGRVJdWzBdID0gYy5zbGljZShuKTtcbiAgICAgICAgICAgICAgICBjaHVuayA9IGMuc2xpY2UoMCwgbik7XG4gICAgICAgICAgICAgICAgdGhpc1tCVUZGRVJMRU5HVEhdIC09IG47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzW0JVRkZFUl1bMF0gPSBjLnN1YmFycmF5KG4pO1xuICAgICAgICAgICAgICAgIGNodW5rID0gYy5zdWJhcnJheSgwLCBuKTtcbiAgICAgICAgICAgICAgICB0aGlzW0JVRkZFUkxFTkdUSF0gLT0gbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVtaXQoJ2RhdGEnLCBjaHVuayk7XG4gICAgICAgIGlmICghdGhpc1tCVUZGRVJdLmxlbmd0aCAmJiAhdGhpc1tFT0ZdKVxuICAgICAgICAgICAgdGhpcy5lbWl0KCdkcmFpbicpO1xuICAgICAgICByZXR1cm4gY2h1bms7XG4gICAgfVxuICAgIGVuZChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2h1bmsgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNiID0gY2h1bms7XG4gICAgICAgICAgICBjaHVuayA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYiA9IGVuY29kaW5nO1xuICAgICAgICAgICAgZW5jb2RpbmcgPSAndXRmOCc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNodW5rICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB0aGlzLndyaXRlKGNodW5rLCBlbmNvZGluZyk7XG4gICAgICAgIGlmIChjYilcbiAgICAgICAgICAgIHRoaXMub25jZSgnZW5kJywgY2IpO1xuICAgICAgICB0aGlzW0VPRl0gPSB0cnVlO1xuICAgICAgICB0aGlzLndyaXRhYmxlID0gZmFsc2U7XG4gICAgICAgIC8vIGlmIHdlIGhhdmVuJ3Qgd3JpdHRlbiBhbnl0aGluZywgdGhlbiBnbyBhaGVhZCBhbmQgZW1pdCxcbiAgICAgICAgLy8gZXZlbiBpZiB3ZSdyZSBub3QgcmVhZGluZy5cbiAgICAgICAgLy8gd2UnbGwgcmUtZW1pdCBpZiBhIG5ldyAnZW5kJyBsaXN0ZW5lciBpcyBhZGRlZCBhbnl3YXkuXG4gICAgICAgIC8vIFRoaXMgbWFrZXMgTVAgbW9yZSBzdWl0YWJsZSB0byB3cml0ZS1vbmx5IHVzZSBjYXNlcy5cbiAgICAgICAgaWYgKHRoaXNbRkxPV0lOR10gfHwgIXRoaXNbUEFVU0VEXSlcbiAgICAgICAgICAgIHRoaXNbTUFZQkVfRU1JVF9FTkRdKCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvLyBkb24ndCBsZXQgdGhlIGludGVybmFsIHJlc3VtZSBiZSBvdmVyd3JpdHRlblxuICAgIFtSRVNVTUVdKCkge1xuICAgICAgICBpZiAodGhpc1tERVNUUk9ZRURdKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAoIXRoaXNbREFUQUxJU1RFTkVSU10gJiYgIXRoaXNbUElQRVNdLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpc1tESVNDQVJERURdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzW1BBVVNFRF0gPSBmYWxzZTtcbiAgICAgICAgdGhpc1tGTE9XSU5HXSA9IHRydWU7XG4gICAgICAgIHRoaXMuZW1pdCgncmVzdW1lJyk7XG4gICAgICAgIGlmICh0aGlzW0JVRkZFUl0ubGVuZ3RoKVxuICAgICAgICAgICAgdGhpc1tGTFVTSF0oKTtcbiAgICAgICAgZWxzZSBpZiAodGhpc1tFT0ZdKVxuICAgICAgICAgICAgdGhpc1tNQVlCRV9FTUlUX0VORF0oKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5lbWl0KCdkcmFpbicpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXN1bWUgdGhlIHN0cmVhbSBpZiBpdCBpcyBjdXJyZW50bHkgaW4gYSBwYXVzZWQgc3RhdGVcbiAgICAgKlxuICAgICAqIElmIGNhbGxlZCB3aGVuIHRoZXJlIGFyZSBubyBwaXBlIGRlc3RpbmF0aW9ucyBvciBgZGF0YWAgZXZlbnQgbGlzdGVuZXJzLFxuICAgICAqIHRoaXMgd2lsbCBwbGFjZSB0aGUgc3RyZWFtIGluIGEgXCJkaXNjYXJkZWRcIiBzdGF0ZSwgd2hlcmUgYWxsIGRhdGEgd2lsbFxuICAgICAqIGJlIHRocm93biBhd2F5LiBUaGUgZGlzY2FyZGVkIHN0YXRlIGlzIHJlbW92ZWQgaWYgYSBwaXBlIGRlc3RpbmF0aW9uIG9yXG4gICAgICogZGF0YSBoYW5kbGVyIGlzIGFkZGVkLCBpZiBwYXVzZSgpIGlzIGNhbGxlZCwgb3IgaWYgYW55IHN5bmNocm9ub3VzIG9yXG4gICAgICogYXN5bmNocm9ub3VzIGl0ZXJhdGlvbiBpcyBzdGFydGVkLlxuICAgICAqL1xuICAgIHJlc3VtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbUkVTVU1FXSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQYXVzZSB0aGUgc3RyZWFtXG4gICAgICovXG4gICAgcGF1c2UoKSB7XG4gICAgICAgIHRoaXNbRkxPV0lOR10gPSBmYWxzZTtcbiAgICAgICAgdGhpc1tQQVVTRURdID0gdHJ1ZTtcbiAgICAgICAgdGhpc1tESVNDQVJERURdID0gZmFsc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHRydWUgaWYgdGhlIHN0cmVhbSBoYXMgYmVlbiBmb3JjaWJseSBkZXN0cm95ZWRcbiAgICAgKi9cbiAgICBnZXQgZGVzdHJveWVkKCkge1xuICAgICAgICByZXR1cm4gdGhpc1tERVNUUk9ZRURdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiB0cnVlIGlmIHRoZSBzdHJlYW0gaXMgY3VycmVudGx5IGluIGEgZmxvd2luZyBzdGF0ZSwgbWVhbmluZyB0aGF0XG4gICAgICogYW55IHdyaXRlcyB3aWxsIGJlIGltbWVkaWF0ZWx5IGVtaXR0ZWQuXG4gICAgICovXG4gICAgZ2V0IGZsb3dpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzW0ZMT1dJTkddO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiB0cnVlIGlmIHRoZSBzdHJlYW0gaXMgY3VycmVudGx5IGluIGEgcGF1c2VkIHN0YXRlXG4gICAgICovXG4gICAgZ2V0IHBhdXNlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbUEFVU0VEXTtcbiAgICB9XG4gICAgW0JVRkZFUlBVU0hdKGNodW5rKSB7XG4gICAgICAgIGlmICh0aGlzW09CSkVDVE1PREVdKVxuICAgICAgICAgICAgdGhpc1tCVUZGRVJMRU5HVEhdICs9IDE7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXNbQlVGRkVSTEVOR1RIXSArPSBjaHVuay5sZW5ndGg7XG4gICAgICAgIHRoaXNbQlVGRkVSXS5wdXNoKGNodW5rKTtcbiAgICB9XG4gICAgW0JVRkZFUlNISUZUXSgpIHtcbiAgICAgICAgaWYgKHRoaXNbT0JKRUNUTU9ERV0pXG4gICAgICAgICAgICB0aGlzW0JVRkZFUkxFTkdUSF0gLT0gMTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpc1tCVUZGRVJMRU5HVEhdIC09IHRoaXNbQlVGRkVSXVswXS5sZW5ndGg7XG4gICAgICAgIHJldHVybiB0aGlzW0JVRkZFUl0uc2hpZnQoKTtcbiAgICB9XG4gICAgW0ZMVVNIXShub0RyYWluID0gZmFsc2UpIHtcbiAgICAgICAgZG8geyB9IHdoaWxlICh0aGlzW0ZMVVNIQ0hVTktdKHRoaXNbQlVGRkVSU0hJRlRdKCkpICYmXG4gICAgICAgICAgICB0aGlzW0JVRkZFUl0ubGVuZ3RoKTtcbiAgICAgICAgaWYgKCFub0RyYWluICYmICF0aGlzW0JVRkZFUl0ubGVuZ3RoICYmICF0aGlzW0VPRl0pXG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2RyYWluJyk7XG4gICAgfVxuICAgIFtGTFVTSENIVU5LXShjaHVuaykge1xuICAgICAgICB0aGlzLmVtaXQoJ2RhdGEnLCBjaHVuayk7XG4gICAgICAgIHJldHVybiB0aGlzW0ZMT1dJTkddO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQaXBlIGFsbCBkYXRhIGVtaXR0ZWQgYnkgdGhpcyBzdHJlYW0gaW50byB0aGUgZGVzdGluYXRpb24gcHJvdmlkZWQuXG4gICAgICpcbiAgICAgKiBUcmlnZ2VycyB0aGUgZmxvdyBvZiBkYXRhLlxuICAgICAqL1xuICAgIHBpcGUoZGVzdCwgb3B0cykge1xuICAgICAgICBpZiAodGhpc1tERVNUUk9ZRURdKVxuICAgICAgICAgICAgcmV0dXJuIGRlc3Q7XG4gICAgICAgIHRoaXNbRElTQ0FSREVEXSA9IGZhbHNlO1xuICAgICAgICBjb25zdCBlbmRlZCA9IHRoaXNbRU1JVFRFRF9FTkRdO1xuICAgICAgICBvcHRzID0gb3B0cyB8fCB7fTtcbiAgICAgICAgaWYgKGRlc3QgPT09IHByb2Muc3Rkb3V0IHx8IGRlc3QgPT09IHByb2Muc3RkZXJyKVxuICAgICAgICAgICAgb3B0cy5lbmQgPSBmYWxzZTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgb3B0cy5lbmQgPSBvcHRzLmVuZCAhPT0gZmFsc2U7XG4gICAgICAgIG9wdHMucHJveHlFcnJvcnMgPSAhIW9wdHMucHJveHlFcnJvcnM7XG4gICAgICAgIC8vIHBpcGluZyBhbiBlbmRlZCBzdHJlYW0gZW5kcyBpbW1lZGlhdGVseVxuICAgICAgICBpZiAoZW5kZWQpIHtcbiAgICAgICAgICAgIGlmIChvcHRzLmVuZClcbiAgICAgICAgICAgICAgICBkZXN0LmVuZCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gXCJhc1wiIGhlcmUganVzdCBpZ25vcmVzIHRoZSBXVHlwZSwgd2hpY2ggcGlwZXMgZG9uJ3QgY2FyZSBhYm91dCxcbiAgICAgICAgICAgIC8vIHNpbmNlIHRoZXkncmUgb25seSBjb25zdW1pbmcgZnJvbSB1cywgYW5kIHdyaXRpbmcgdG8gdGhlIGRlc3RcbiAgICAgICAgICAgIHRoaXNbUElQRVNdLnB1c2goIW9wdHMucHJveHlFcnJvcnNcbiAgICAgICAgICAgICAgICA/IG5ldyBQaXBlKHRoaXMsIGRlc3QsIG9wdHMpXG4gICAgICAgICAgICAgICAgOiBuZXcgUGlwZVByb3h5RXJyb3JzKHRoaXMsIGRlc3QsIG9wdHMpKTtcbiAgICAgICAgICAgIGlmICh0aGlzW0FTWU5DXSlcbiAgICAgICAgICAgICAgICBkZWZlcigoKSA9PiB0aGlzW1JFU1VNRV0oKSk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhpc1tSRVNVTUVdKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlc3Q7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEZ1bGx5IHVuaG9vayBhIHBpcGVkIGRlc3RpbmF0aW9uIHN0cmVhbS5cbiAgICAgKlxuICAgICAqIElmIHRoZSBkZXN0aW5hdGlvbiBzdHJlYW0gd2FzIHRoZSBvbmx5IGNvbnN1bWVyIG9mIHRoaXMgc3RyZWFtIChpZSxcbiAgICAgKiB0aGVyZSBhcmUgbm8gb3RoZXIgcGlwZWQgZGVzdGluYXRpb25zIG9yIGAnZGF0YSdgIGV2ZW50IGxpc3RlbmVycylcbiAgICAgKiB0aGVuIHRoZSBmbG93IG9mIGRhdGEgd2lsbCBzdG9wIHVudGlsIHRoZXJlIGlzIGFub3RoZXIgY29uc3VtZXIgb3JcbiAgICAgKiB7QGxpbmsgTWluaXBhc3MjcmVzdW1lfSBpcyBleHBsaWNpdGx5IGNhbGxlZC5cbiAgICAgKi9cbiAgICB1bnBpcGUoZGVzdCkge1xuICAgICAgICBjb25zdCBwID0gdGhpc1tQSVBFU10uZmluZChwID0+IHAuZGVzdCA9PT0gZGVzdCk7XG4gICAgICAgIGlmIChwKSB7XG4gICAgICAgICAgICBpZiAodGhpc1tQSVBFU10ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXNbRkxPV0lOR10gJiYgdGhpc1tEQVRBTElTVEVORVJTXSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzW0ZMT1dJTkddID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXNbUElQRVNdID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhpc1tQSVBFU10uc3BsaWNlKHRoaXNbUElQRVNdLmluZGV4T2YocCksIDEpO1xuICAgICAgICAgICAgcC51bnBpcGUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBBbGlhcyBmb3Ige0BsaW5rIE1pbmlwYXNzI29ufVxuICAgICAqL1xuICAgIGFkZExpc3RlbmVyKGV2LCBoYW5kbGVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9uKGV2LCBoYW5kbGVyKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTW9zdGx5IGlkZW50aWNhbCB0byBgRXZlbnRFbWl0dGVyLm9uYCwgd2l0aCB0aGUgZm9sbG93aW5nXG4gICAgICogYmVoYXZpb3IgZGlmZmVyZW5jZXMgdG8gcHJldmVudCBkYXRhIGxvc3MgYW5kIHVubmVjZXNzYXJ5IGhhbmdzOlxuICAgICAqXG4gICAgICogLSBBZGRpbmcgYSAnZGF0YScgZXZlbnQgaGFuZGxlciB3aWxsIHRyaWdnZXIgdGhlIGZsb3cgb2YgZGF0YVxuICAgICAqXG4gICAgICogLSBBZGRpbmcgYSAncmVhZGFibGUnIGV2ZW50IGhhbmRsZXIgd2hlbiB0aGVyZSBpcyBkYXRhIHdhaXRpbmcgdG8gYmUgcmVhZFxuICAgICAqICAgd2lsbCBjYXVzZSAncmVhZGFibGUnIHRvIGJlIGVtaXR0ZWQgaW1tZWRpYXRlbHkuXG4gICAgICpcbiAgICAgKiAtIEFkZGluZyBhbiAnZW5kaXNoJyBldmVudCBoYW5kbGVyICgnZW5kJywgJ2ZpbmlzaCcsIGV0Yy4pIHdoaWNoIGhhc1xuICAgICAqICAgYWxyZWFkeSBwYXNzZWQgd2lsbCBjYXVzZSB0aGUgZXZlbnQgdG8gYmUgZW1pdHRlZCBpbW1lZGlhdGVseSBhbmQgYWxsXG4gICAgICogICBoYW5kbGVycyByZW1vdmVkLlxuICAgICAqXG4gICAgICogLSBBZGRpbmcgYW4gJ2Vycm9yJyBldmVudCBoYW5kbGVyIGFmdGVyIGFuIGVycm9yIGhhcyBiZWVuIGVtaXR0ZWQgd2lsbFxuICAgICAqICAgY2F1c2UgdGhlIGV2ZW50IHRvIGJlIHJlLWVtaXR0ZWQgaW1tZWRpYXRlbHkgd2l0aCB0aGUgZXJyb3IgcHJldmlvdXNseVxuICAgICAqICAgcmFpc2VkLlxuICAgICAqL1xuICAgIG9uKGV2LCBoYW5kbGVyKSB7XG4gICAgICAgIGNvbnN0IHJldCA9IHN1cGVyLm9uKGV2LCBoYW5kbGVyKTtcbiAgICAgICAgaWYgKGV2ID09PSAnZGF0YScpIHtcbiAgICAgICAgICAgIHRoaXNbRElTQ0FSREVEXSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpc1tEQVRBTElTVEVORVJTXSsrO1xuICAgICAgICAgICAgaWYgKCF0aGlzW1BJUEVTXS5sZW5ndGggJiYgIXRoaXNbRkxPV0lOR10pIHtcbiAgICAgICAgICAgICAgICB0aGlzW1JFU1VNRV0oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChldiA9PT0gJ3JlYWRhYmxlJyAmJiB0aGlzW0JVRkZFUkxFTkdUSF0gIT09IDApIHtcbiAgICAgICAgICAgIHN1cGVyLmVtaXQoJ3JlYWRhYmxlJyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNFbmRpc2goZXYpICYmIHRoaXNbRU1JVFRFRF9FTkRdKSB7XG4gICAgICAgICAgICBzdXBlci5lbWl0KGV2KTtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKGV2KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChldiA9PT0gJ2Vycm9yJyAmJiB0aGlzW0VNSVRURURfRVJST1JdKSB7XG4gICAgICAgICAgICBjb25zdCBoID0gaGFuZGxlcjtcbiAgICAgICAgICAgIGlmICh0aGlzW0FTWU5DXSlcbiAgICAgICAgICAgICAgICBkZWZlcigoKSA9PiBoLmNhbGwodGhpcywgdGhpc1tFTUlUVEVEX0VSUk9SXSkpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGguY2FsbCh0aGlzLCB0aGlzW0VNSVRURURfRVJST1JdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBbGlhcyBmb3Ige0BsaW5rIE1pbmlwYXNzI29mZn1cbiAgICAgKi9cbiAgICByZW1vdmVMaXN0ZW5lcihldiwgaGFuZGxlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5vZmYoZXYsIGhhbmRsZXIpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBNb3N0bHkgaWRlbnRpY2FsIHRvIGBFdmVudEVtaXR0ZXIub2ZmYFxuICAgICAqXG4gICAgICogSWYgYSAnZGF0YScgZXZlbnQgaGFuZGxlciBpcyByZW1vdmVkLCBhbmQgaXQgd2FzIHRoZSBsYXN0IGNvbnN1bWVyXG4gICAgICogKGllLCB0aGVyZSBhcmUgbm8gcGlwZSBkZXN0aW5hdGlvbnMgb3Igb3RoZXIgJ2RhdGEnIGV2ZW50IGxpc3RlbmVycyksXG4gICAgICogdGhlbiB0aGUgZmxvdyBvZiBkYXRhIHdpbGwgc3RvcCB1bnRpbCB0aGVyZSBpcyBhbm90aGVyIGNvbnN1bWVyIG9yXG4gICAgICoge0BsaW5rIE1pbmlwYXNzI3Jlc3VtZX0gaXMgZXhwbGljaXRseSBjYWxsZWQuXG4gICAgICovXG4gICAgb2ZmKGV2LCBoYW5kbGVyKSB7XG4gICAgICAgIGNvbnN0IHJldCA9IHN1cGVyLm9mZihldiwgaGFuZGxlcik7XG4gICAgICAgIC8vIGlmIHdlIHByZXZpb3VzbHkgaGFkIGxpc3RlbmVycywgYW5kIG5vdyB3ZSBkb24ndCwgYW5kIHdlIGRvbid0XG4gICAgICAgIC8vIGhhdmUgYW55IHBpcGVzLCB0aGVuIHN0b3AgdGhlIGZsb3csIHVubGVzcyBpdCdzIGJlZW4gZXhwbGljaXRseVxuICAgICAgICAvLyBwdXQgaW4gYSBkaXNjYXJkZWQgZmxvd2luZyBzdGF0ZSB2aWEgc3RyZWFtLnJlc3VtZSgpLlxuICAgICAgICBpZiAoZXYgPT09ICdkYXRhJykge1xuICAgICAgICAgICAgdGhpc1tEQVRBTElTVEVORVJTXSA9IHRoaXMubGlzdGVuZXJzKCdkYXRhJykubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKHRoaXNbREFUQUxJU1RFTkVSU10gPT09IDAgJiZcbiAgICAgICAgICAgICAgICAhdGhpc1tESVNDQVJERURdICYmXG4gICAgICAgICAgICAgICAgIXRoaXNbUElQRVNdLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXNbRkxPV0lOR10gPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBNb3N0bHkgaWRlbnRpY2FsIHRvIGBFdmVudEVtaXR0ZXIucmVtb3ZlQWxsTGlzdGVuZXJzYFxuICAgICAqXG4gICAgICogSWYgYWxsICdkYXRhJyBldmVudCBoYW5kbGVycyBhcmUgcmVtb3ZlZCwgYW5kIHRoZXkgd2VyZSB0aGUgbGFzdCBjb25zdW1lclxuICAgICAqIChpZSwgdGhlcmUgYXJlIG5vIHBpcGUgZGVzdGluYXRpb25zKSwgdGhlbiB0aGUgZmxvdyBvZiBkYXRhIHdpbGwgc3RvcFxuICAgICAqIHVudGlsIHRoZXJlIGlzIGFub3RoZXIgY29uc3VtZXIgb3Ige0BsaW5rIE1pbmlwYXNzI3Jlc3VtZX0gaXMgZXhwbGljaXRseVxuICAgICAqIGNhbGxlZC5cbiAgICAgKi9cbiAgICByZW1vdmVBbGxMaXN0ZW5lcnMoZXYpIHtcbiAgICAgICAgY29uc3QgcmV0ID0gc3VwZXIucmVtb3ZlQWxsTGlzdGVuZXJzKGV2KTtcbiAgICAgICAgaWYgKGV2ID09PSAnZGF0YScgfHwgZXYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpc1tEQVRBTElTVEVORVJTXSA9IDA7XG4gICAgICAgICAgICBpZiAoIXRoaXNbRElTQ0FSREVEXSAmJiAhdGhpc1tQSVBFU10ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpc1tGTE9XSU5HXSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHRydWUgaWYgdGhlICdlbmQnIGV2ZW50IGhhcyBiZWVuIGVtaXR0ZWRcbiAgICAgKi9cbiAgICBnZXQgZW1pdHRlZEVuZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbRU1JVFRFRF9FTkRdO1xuICAgIH1cbiAgICBbTUFZQkVfRU1JVF9FTkRdKCkge1xuICAgICAgICBpZiAoIXRoaXNbRU1JVFRJTkdfRU5EXSAmJlxuICAgICAgICAgICAgIXRoaXNbRU1JVFRFRF9FTkRdICYmXG4gICAgICAgICAgICAhdGhpc1tERVNUUk9ZRURdICYmXG4gICAgICAgICAgICB0aGlzW0JVRkZFUl0ubGVuZ3RoID09PSAwICYmXG4gICAgICAgICAgICB0aGlzW0VPRl0pIHtcbiAgICAgICAgICAgIHRoaXNbRU1JVFRJTkdfRU5EXSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2VuZCcpO1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdwcmVmaW5pc2gnKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZmluaXNoJyk7XG4gICAgICAgICAgICBpZiAodGhpc1tDTE9TRURdKVxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnY2xvc2UnKTtcbiAgICAgICAgICAgIHRoaXNbRU1JVFRJTkdfRU5EXSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1vc3RseSBpZGVudGljYWwgdG8gYEV2ZW50RW1pdHRlci5lbWl0YCwgd2l0aCB0aGUgZm9sbG93aW5nXG4gICAgICogYmVoYXZpb3IgZGlmZmVyZW5jZXMgdG8gcHJldmVudCBkYXRhIGxvc3MgYW5kIHVubmVjZXNzYXJ5IGhhbmdzOlxuICAgICAqXG4gICAgICogSWYgdGhlIHN0cmVhbSBoYXMgYmVlbiBkZXN0cm95ZWQsIGFuZCB0aGUgZXZlbnQgaXMgc29tZXRoaW5nIG90aGVyXG4gICAgICogdGhhbiAnY2xvc2UnIG9yICdlcnJvcicsIHRoZW4gYGZhbHNlYCBpcyByZXR1cm5lZCBhbmQgbm8gaGFuZGxlcnNcbiAgICAgKiBhcmUgY2FsbGVkLlxuICAgICAqXG4gICAgICogSWYgdGhlIGV2ZW50IGlzICdlbmQnLCBhbmQgaGFzIGFscmVhZHkgYmVlbiBlbWl0dGVkLCB0aGVuIHRoZSBldmVudFxuICAgICAqIGlzIGlnbm9yZWQuIElmIHRoZSBzdHJlYW0gaXMgaW4gYSBwYXVzZWQgb3Igbm9uLWZsb3dpbmcgc3RhdGUsIHRoZW5cbiAgICAgKiB0aGUgZXZlbnQgd2lsbCBiZSBkZWZlcnJlZCB1bnRpbCBkYXRhIGZsb3cgcmVzdW1lcy4gSWYgdGhlIHN0cmVhbSBpc1xuICAgICAqIGFzeW5jLCB0aGVuIGhhbmRsZXJzIHdpbGwgYmUgY2FsbGVkIG9uIHRoZSBuZXh0IHRpY2sgcmF0aGVyIHRoYW5cbiAgICAgKiBpbW1lZGlhdGVseS5cbiAgICAgKlxuICAgICAqIElmIHRoZSBldmVudCBpcyAnY2xvc2UnLCBhbmQgJ2VuZCcgaGFzIG5vdCB5ZXQgYmVlbiBlbWl0dGVkLCB0aGVuXG4gICAgICogdGhlIGV2ZW50IHdpbGwgYmUgZGVmZXJyZWQgdW50aWwgYWZ0ZXIgJ2VuZCcgaXMgZW1pdHRlZC5cbiAgICAgKlxuICAgICAqIElmIHRoZSBldmVudCBpcyAnZXJyb3InLCBhbmQgYW4gQWJvcnRTaWduYWwgd2FzIHByb3ZpZGVkIGZvciB0aGUgc3RyZWFtLFxuICAgICAqIGFuZCB0aGVyZSBhcmUgbm8gbGlzdGVuZXJzLCB0aGVuIHRoZSBldmVudCBpcyBpZ25vcmVkLCBtYXRjaGluZyB0aGVcbiAgICAgKiBiZWhhdmlvciBvZiBub2RlIGNvcmUgc3RyZWFtcyBpbiB0aGUgcHJlc2Vuc2Ugb2YgYW4gQWJvcnRTaWduYWwuXG4gICAgICpcbiAgICAgKiBJZiB0aGUgZXZlbnQgaXMgJ2ZpbmlzaCcgb3IgJ3ByZWZpbmlzaCcsIHRoZW4gYWxsIGxpc3RlbmVycyB3aWxsIGJlXG4gICAgICogcmVtb3ZlZCBhZnRlciBlbWl0dGluZyB0aGUgZXZlbnQsIHRvIHByZXZlbnQgZG91YmxlLWZpcmluZy5cbiAgICAgKi9cbiAgICBlbWl0KGV2LCAuLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhcmdzWzBdO1xuICAgICAgICAvLyBlcnJvciBhbmQgY2xvc2UgYXJlIG9ubHkgZXZlbnRzIGFsbG93ZWQgYWZ0ZXIgY2FsbGluZyBkZXN0cm95KClcbiAgICAgICAgaWYgKGV2ICE9PSAnZXJyb3InICYmXG4gICAgICAgICAgICBldiAhPT0gJ2Nsb3NlJyAmJlxuICAgICAgICAgICAgZXYgIT09IERFU1RST1lFRCAmJlxuICAgICAgICAgICAgdGhpc1tERVNUUk9ZRURdKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXYgPT09ICdkYXRhJykge1xuICAgICAgICAgICAgcmV0dXJuICF0aGlzW09CSkVDVE1PREVdICYmICFkYXRhXG4gICAgICAgICAgICAgICAgPyBmYWxzZVxuICAgICAgICAgICAgICAgIDogdGhpc1tBU1lOQ11cbiAgICAgICAgICAgICAgICAgICAgPyAoZGVmZXIoKCkgPT4gdGhpc1tFTUlUREFUQV0oZGF0YSkpLCB0cnVlKVxuICAgICAgICAgICAgICAgICAgICA6IHRoaXNbRU1JVERBVEFdKGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGV2ID09PSAnZW5kJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXNbRU1JVEVORF0oKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChldiA9PT0gJ2Nsb3NlJykge1xuICAgICAgICAgICAgdGhpc1tDTE9TRURdID0gdHJ1ZTtcbiAgICAgICAgICAgIC8vIGRvbid0IGVtaXQgY2xvc2UgYmVmb3JlICdlbmQnIGFuZCAnZmluaXNoJ1xuICAgICAgICAgICAgaWYgKCF0aGlzW0VNSVRURURfRU5EXSAmJiAhdGhpc1tERVNUUk9ZRURdKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IHJldCA9IHN1cGVyLmVtaXQoJ2Nsb3NlJyk7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygnY2xvc2UnKTtcbiAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXYgPT09ICdlcnJvcicpIHtcbiAgICAgICAgICAgIHRoaXNbRU1JVFRFRF9FUlJPUl0gPSBkYXRhO1xuICAgICAgICAgICAgc3VwZXIuZW1pdChFUlJPUiwgZGF0YSk7XG4gICAgICAgICAgICBjb25zdCByZXQgPSAhdGhpc1tTSUdOQUxdIHx8IHRoaXMubGlzdGVuZXJzKCdlcnJvcicpLmxlbmd0aFxuICAgICAgICAgICAgICAgID8gc3VwZXIuZW1pdCgnZXJyb3InLCBkYXRhKVxuICAgICAgICAgICAgICAgIDogZmFsc2U7XG4gICAgICAgICAgICB0aGlzW01BWUJFX0VNSVRfRU5EXSgpO1xuICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChldiA9PT0gJ3Jlc3VtZScpIHtcbiAgICAgICAgICAgIGNvbnN0IHJldCA9IHN1cGVyLmVtaXQoJ3Jlc3VtZScpO1xuICAgICAgICAgICAgdGhpc1tNQVlCRV9FTUlUX0VORF0oKTtcbiAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXYgPT09ICdmaW5pc2gnIHx8IGV2ID09PSAncHJlZmluaXNoJykge1xuICAgICAgICAgICAgY29uc3QgcmV0ID0gc3VwZXIuZW1pdChldik7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhldik7XG4gICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICB9XG4gICAgICAgIC8vIFNvbWUgb3RoZXIgdW5rbm93biBldmVudFxuICAgICAgICBjb25zdCByZXQgPSBzdXBlci5lbWl0KGV2LCAuLi5hcmdzKTtcbiAgICAgICAgdGhpc1tNQVlCRV9FTUlUX0VORF0oKTtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gICAgW0VNSVREQVRBXShkYXRhKSB7XG4gICAgICAgIGZvciAoY29uc3QgcCBvZiB0aGlzW1BJUEVTXSkge1xuICAgICAgICAgICAgaWYgKHAuZGVzdC53cml0ZShkYXRhKSA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgdGhpcy5wYXVzZSgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJldCA9IHRoaXNbRElTQ0FSREVEXSA/IGZhbHNlIDogc3VwZXIuZW1pdCgnZGF0YScsIGRhdGEpO1xuICAgICAgICB0aGlzW01BWUJFX0VNSVRfRU5EXSgpO1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cbiAgICBbRU1JVEVORF0oKSB7XG4gICAgICAgIGlmICh0aGlzW0VNSVRURURfRU5EXSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgdGhpc1tFTUlUVEVEX0VORF0gPSB0cnVlO1xuICAgICAgICB0aGlzLnJlYWRhYmxlID0gZmFsc2U7XG4gICAgICAgIHJldHVybiB0aGlzW0FTWU5DXVxuICAgICAgICAgICAgPyAoZGVmZXIoKCkgPT4gdGhpc1tFTUlURU5EMl0oKSksIHRydWUpXG4gICAgICAgICAgICA6IHRoaXNbRU1JVEVORDJdKCk7XG4gICAgfVxuICAgIFtFTUlURU5EMl0oKSB7XG4gICAgICAgIGlmICh0aGlzW0RFQ09ERVJdKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gdGhpc1tERUNPREVSXS5lbmQoKTtcbiAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBwIG9mIHRoaXNbUElQRVNdKSB7XG4gICAgICAgICAgICAgICAgICAgIHAuZGVzdC53cml0ZShkYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzW0RJU0NBUkRFRF0pXG4gICAgICAgICAgICAgICAgICAgIHN1cGVyLmVtaXQoJ2RhdGEnLCBkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IHAgb2YgdGhpc1tQSVBFU10pIHtcbiAgICAgICAgICAgIHAuZW5kKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmV0ID0gc3VwZXIuZW1pdCgnZW5kJyk7XG4gICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCdlbmQnKTtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGFuIGFycmF5IG9mIGFsbCBlbWl0dGVkIGRhdGEgb25jZVxuICAgICAqIHRoZSBzdHJlYW0gZW5kcy5cbiAgICAgKi9cbiAgICBhc3luYyBjb2xsZWN0KCkge1xuICAgICAgICBjb25zdCBidWYgPSBPYmplY3QuYXNzaWduKFtdLCB7XG4gICAgICAgICAgICBkYXRhTGVuZ3RoOiAwLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCF0aGlzW09CSkVDVE1PREVdKVxuICAgICAgICAgICAgYnVmLmRhdGFMZW5ndGggPSAwO1xuICAgICAgICAvLyBzZXQgdGhlIHByb21pc2UgZmlyc3QsIGluIGNhc2UgYW4gZXJyb3IgaXMgcmFpc2VkXG4gICAgICAgIC8vIGJ5IHRyaWdnZXJpbmcgdGhlIGZsb3cgaGVyZS5cbiAgICAgICAgY29uc3QgcCA9IHRoaXMucHJvbWlzZSgpO1xuICAgICAgICB0aGlzLm9uKCdkYXRhJywgYyA9PiB7XG4gICAgICAgICAgICBidWYucHVzaChjKTtcbiAgICAgICAgICAgIGlmICghdGhpc1tPQkpFQ1RNT0RFXSlcbiAgICAgICAgICAgICAgICBidWYuZGF0YUxlbmd0aCArPSBjLmxlbmd0aDtcbiAgICAgICAgfSk7XG4gICAgICAgIGF3YWl0IHA7XG4gICAgICAgIHJldHVybiBidWY7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiBhIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgY29uY2F0ZW5hdGlvbiBvZiBhbGwgZW1pdHRlZCBkYXRhXG4gICAgICogb25jZSB0aGUgc3RyZWFtIGVuZHMuXG4gICAgICpcbiAgICAgKiBOb3QgYWxsb3dlZCBvbiBvYmplY3RNb2RlIHN0cmVhbXMuXG4gICAgICovXG4gICAgYXN5bmMgY29uY2F0KCkge1xuICAgICAgICBpZiAodGhpc1tPQkpFQ1RNT0RFXSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjYW5ub3QgY29uY2F0IGluIG9iamVjdE1vZGUnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBidWYgPSBhd2FpdCB0aGlzLmNvbGxlY3QoKTtcbiAgICAgICAgcmV0dXJuICh0aGlzW0VOQ09ESU5HXVxuICAgICAgICAgICAgPyBidWYuam9pbignJylcbiAgICAgICAgICAgIDogQnVmZmVyLmNvbmNhdChidWYsIGJ1Zi5kYXRhTGVuZ3RoKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiBhIHZvaWQgUHJvbWlzZSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIHN0cmVhbSBlbmRzLlxuICAgICAqL1xuICAgIGFzeW5jIHByb21pc2UoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uKERFU1RST1lFRCwgKCkgPT4gcmVqZWN0KG5ldyBFcnJvcignc3RyZWFtIGRlc3Ryb3llZCcpKSk7XG4gICAgICAgICAgICB0aGlzLm9uKCdlcnJvcicsIGVyID0+IHJlamVjdChlcikpO1xuICAgICAgICAgICAgdGhpcy5vbignZW5kJywgKCkgPT4gcmVzb2x2ZSgpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFzeW5jaHJvbm91cyBgZm9yIGF3YWl0IG9mYCBpdGVyYXRpb24uXG4gICAgICpcbiAgICAgKiBUaGlzIHdpbGwgY29udGludWUgZW1pdHRpbmcgYWxsIGNodW5rcyB1bnRpbCB0aGUgc3RyZWFtIHRlcm1pbmF0ZXMuXG4gICAgICovXG4gICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpIHtcbiAgICAgICAgLy8gc2V0IHRoaXMgdXAgZnJvbnQsIGluIGNhc2UgdGhlIGNvbnN1bWVyIGRvZXNuJ3QgY2FsbCBuZXh0KClcbiAgICAgICAgLy8gcmlnaHQgYXdheS5cbiAgICAgICAgdGhpc1tESVNDQVJERURdID0gZmFsc2U7XG4gICAgICAgIGxldCBzdG9wcGVkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IHN0b3AgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnBhdXNlKCk7XG4gICAgICAgICAgICBzdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbmV4dCA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChzdG9wcGVkKVxuICAgICAgICAgICAgICAgIHJldHVybiBzdG9wKCk7XG4gICAgICAgICAgICBjb25zdCByZXMgPSB0aGlzLnJlYWQoKTtcbiAgICAgICAgICAgIGlmIChyZXMgIT09IG51bGwpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IGRvbmU6IGZhbHNlLCB2YWx1ZTogcmVzIH0pO1xuICAgICAgICAgICAgaWYgKHRoaXNbRU9GXSlcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RvcCgpO1xuICAgICAgICAgICAgbGV0IHJlc29sdmU7XG4gICAgICAgICAgICBsZXQgcmVqZWN0O1xuICAgICAgICAgICAgY29uc3Qgb25lcnIgPSAoZXIpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9mZignZGF0YScsIG9uZGF0YSk7XG4gICAgICAgICAgICAgICAgdGhpcy5vZmYoJ2VuZCcsIG9uZW5kKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9mZihERVNUUk9ZRUQsIG9uZGVzdHJveSk7XG4gICAgICAgICAgICAgICAgc3RvcCgpO1xuICAgICAgICAgICAgICAgIHJlamVjdChlcik7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3Qgb25kYXRhID0gKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vZmYoJ2Vycm9yJywgb25lcnIpO1xuICAgICAgICAgICAgICAgIHRoaXMub2ZmKCdlbmQnLCBvbmVuZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5vZmYoREVTVFJPWUVELCBvbmRlc3Ryb3kpO1xuICAgICAgICAgICAgICAgIHRoaXMucGF1c2UoKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHsgdmFsdWUsIGRvbmU6ICEhdGhpc1tFT0ZdIH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IG9uZW5kID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub2ZmKCdlcnJvcicsIG9uZXJyKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9mZignZGF0YScsIG9uZGF0YSk7XG4gICAgICAgICAgICAgICAgdGhpcy5vZmYoREVTVFJPWUVELCBvbmRlc3Ryb3kpO1xuICAgICAgICAgICAgICAgIHN0b3AoKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBvbmRlc3Ryb3kgPSAoKSA9PiBvbmVycihuZXcgRXJyb3IoJ3N0cmVhbSBkZXN0cm95ZWQnKSk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlcywgcmVqKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVqZWN0ID0gcmVqO1xuICAgICAgICAgICAgICAgIHJlc29sdmUgPSByZXM7XG4gICAgICAgICAgICAgICAgdGhpcy5vbmNlKERFU1RST1lFRCwgb25kZXN0cm95KTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uY2UoJ2Vycm9yJywgb25lcnIpO1xuICAgICAgICAgICAgICAgIHRoaXMub25jZSgnZW5kJywgb25lbmQpO1xuICAgICAgICAgICAgICAgIHRoaXMub25jZSgnZGF0YScsIG9uZGF0YSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5leHQsXG4gICAgICAgICAgICB0aHJvdzogc3RvcCxcbiAgICAgICAgICAgIHJldHVybjogc3RvcCxcbiAgICAgICAgICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTeW5jaHJvbm91cyBgZm9yIG9mYCBpdGVyYXRpb24uXG4gICAgICpcbiAgICAgKiBUaGUgaXRlcmF0aW9uIHdpbGwgdGVybWluYXRlIHdoZW4gdGhlIGludGVybmFsIGJ1ZmZlciBydW5zIG91dCwgZXZlblxuICAgICAqIGlmIHRoZSBzdHJlYW0gaGFzIG5vdCB5ZXQgdGVybWluYXRlZC5cbiAgICAgKi9cbiAgICBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICAgICAgLy8gc2V0IHRoaXMgdXAgZnJvbnQsIGluIGNhc2UgdGhlIGNvbnN1bWVyIGRvZXNuJ3QgY2FsbCBuZXh0KClcbiAgICAgICAgLy8gcmlnaHQgYXdheS5cbiAgICAgICAgdGhpc1tESVNDQVJERURdID0gZmFsc2U7XG4gICAgICAgIGxldCBzdG9wcGVkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IHN0b3AgPSAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnBhdXNlKCk7XG4gICAgICAgICAgICB0aGlzLm9mZihFUlJPUiwgc3RvcCk7XG4gICAgICAgICAgICB0aGlzLm9mZihERVNUUk9ZRUQsIHN0b3ApO1xuICAgICAgICAgICAgdGhpcy5vZmYoJ2VuZCcsIHN0b3ApO1xuICAgICAgICAgICAgc3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogdW5kZWZpbmVkIH07XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IG5leHQgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoc3RvcHBlZClcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RvcCgpO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnJlYWQoKTtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IHN0b3AoKSA6IHsgZG9uZTogZmFsc2UsIHZhbHVlIH07XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMub25jZSgnZW5kJywgc3RvcCk7XG4gICAgICAgIHRoaXMub25jZShFUlJPUiwgc3RvcCk7XG4gICAgICAgIHRoaXMub25jZShERVNUUk9ZRUQsIHN0b3ApO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmV4dCxcbiAgICAgICAgICAgIHRocm93OiBzdG9wLFxuICAgICAgICAgICAgcmV0dXJuOiBzdG9wLFxuICAgICAgICAgICAgW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZXN0cm95IGEgc3RyZWFtLCBwcmV2ZW50aW5nIGl0IGZyb20gYmVpbmcgdXNlZCBmb3IgYW55IGZ1cnRoZXIgcHVycG9zZS5cbiAgICAgKlxuICAgICAqIElmIHRoZSBzdHJlYW0gaGFzIGEgYGNsb3NlKClgIG1ldGhvZCwgdGhlbiBpdCB3aWxsIGJlIGNhbGxlZCBvblxuICAgICAqIGRlc3RydWN0aW9uLlxuICAgICAqXG4gICAgICogQWZ0ZXIgZGVzdHJ1Y3Rpb24sIGFueSBhdHRlbXB0IHRvIHdyaXRlIGRhdGEsIHJlYWQgZGF0YSwgb3IgZW1pdCBtb3N0XG4gICAgICogZXZlbnRzIHdpbGwgYmUgaWdub3JlZC5cbiAgICAgKlxuICAgICAqIElmIGFuIGVycm9yIGFyZ3VtZW50IGlzIHByb3ZpZGVkLCB0aGVuIGl0IHdpbGwgYmUgZW1pdHRlZCBpbiBhblxuICAgICAqICdlcnJvcicgZXZlbnQuXG4gICAgICovXG4gICAgZGVzdHJveShlcikge1xuICAgICAgICBpZiAodGhpc1tERVNUUk9ZRURdKSB7XG4gICAgICAgICAgICBpZiAoZXIpXG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIGVyKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoREVTVFJPWUVEKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHRoaXNbREVTVFJPWUVEXSA9IHRydWU7XG4gICAgICAgIHRoaXNbRElTQ0FSREVEXSA9IHRydWU7XG4gICAgICAgIC8vIHRocm93IGF3YXkgYWxsIGJ1ZmZlcmVkIGRhdGEsIGl0J3MgbmV2ZXIgY29taW5nIG91dFxuICAgICAgICB0aGlzW0JVRkZFUl0ubGVuZ3RoID0gMDtcbiAgICAgICAgdGhpc1tCVUZGRVJMRU5HVEhdID0gMDtcbiAgICAgICAgY29uc3Qgd2MgPSB0aGlzO1xuICAgICAgICBpZiAodHlwZW9mIHdjLmNsb3NlID09PSAnZnVuY3Rpb24nICYmICF0aGlzW0NMT1NFRF0pXG4gICAgICAgICAgICB3Yy5jbG9zZSgpO1xuICAgICAgICBpZiAoZXIpXG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXIpO1xuICAgICAgICAvLyBpZiBubyBlcnJvciB0byBlbWl0LCBzdGlsbCByZWplY3QgcGVuZGluZyBwcm9taXNlc1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzLmVtaXQoREVTVFJPWUVEKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFsaWFzIGZvciB7QGxpbmsgaXNTdHJlYW19XG4gICAgICpcbiAgICAgKiBGb3JtZXIgZXhwb3J0IGxvY2F0aW9uLCBtYWludGFpbmVkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS5cbiAgICAgKlxuICAgICAqIEBkZXByZWNhdGVkXG4gICAgICovXG4gICAgc3RhdGljIGdldCBpc1N0cmVhbSgpIHtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMuaXNTdHJlYW07XG4gICAgfVxufVxuZXhwb3J0cy5NaW5pcGFzcyA9IE1pbmlwYXNzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5QYXRoU2N1cnJ5ID0gZXhwb3J0cy5QYXRoID0gZXhwb3J0cy5QYXRoU2N1cnJ5RGFyd2luID0gZXhwb3J0cy5QYXRoU2N1cnJ5UG9zaXggPSBleHBvcnRzLlBhdGhTY3VycnlXaW4zMiA9IGV4cG9ydHMuUGF0aFNjdXJyeUJhc2UgPSBleHBvcnRzLlBhdGhQb3NpeCA9IGV4cG9ydHMuUGF0aFdpbjMyID0gZXhwb3J0cy5QYXRoQmFzZSA9IGV4cG9ydHMuQ2hpbGRyZW5DYWNoZSA9IGV4cG9ydHMuUmVzb2x2ZUNhY2hlID0gdm9pZCAwO1xuY29uc3QgbHJ1X2NhY2hlXzEgPSByZXF1aXJlKFwibHJ1LWNhY2hlXCIpO1xuY29uc3Qgbm9kZV9wYXRoXzEgPSByZXF1aXJlKFwibm9kZTpwYXRoXCIpO1xuY29uc3Qgbm9kZV91cmxfMSA9IHJlcXVpcmUoXCJub2RlOnVybFwiKTtcbmNvbnN0IGZzXzEgPSByZXF1aXJlKFwiZnNcIik7XG5jb25zdCBhY3R1YWxGUyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwibm9kZTpmc1wiKSk7XG5jb25zdCByZWFscGF0aFN5bmMgPSBmc18xLnJlYWxwYXRoU3luYy5uYXRpdmU7XG4vLyBUT0RPOiB0ZXN0IHBlcmYgb2YgZnMvcHJvbWlzZXMgcmVhbHBhdGggdnMgcmVhbHBhdGhDQixcbi8vIHNpbmNlIHRoZSBwcm9taXNlcyBvbmUgdXNlcyByZWFscGF0aC5uYXRpdmVcbmNvbnN0IHByb21pc2VzXzEgPSByZXF1aXJlKFwibm9kZTpmcy9wcm9taXNlc1wiKTtcbmNvbnN0IG1pbmlwYXNzXzEgPSByZXF1aXJlKFwibWluaXBhc3NcIik7XG5jb25zdCBkZWZhdWx0RlMgPSB7XG4gICAgbHN0YXRTeW5jOiBmc18xLmxzdGF0U3luYyxcbiAgICByZWFkZGlyOiBmc18xLnJlYWRkaXIsXG4gICAgcmVhZGRpclN5bmM6IGZzXzEucmVhZGRpclN5bmMsXG4gICAgcmVhZGxpbmtTeW5jOiBmc18xLnJlYWRsaW5rU3luYyxcbiAgICByZWFscGF0aFN5bmMsXG4gICAgcHJvbWlzZXM6IHtcbiAgICAgICAgbHN0YXQ6IHByb21pc2VzXzEubHN0YXQsXG4gICAgICAgIHJlYWRkaXI6IHByb21pc2VzXzEucmVhZGRpcixcbiAgICAgICAgcmVhZGxpbms6IHByb21pc2VzXzEucmVhZGxpbmssXG4gICAgICAgIHJlYWxwYXRoOiBwcm9taXNlc18xLnJlYWxwYXRoLFxuICAgIH0sXG59O1xuLy8gaWYgdGhleSBqdXN0IGdhdmUgdXMgcmVxdWlyZSgnZnMnKSB0aGVuIHVzZSBvdXIgZGVmYXVsdFxuY29uc3QgZnNGcm9tT3B0aW9uID0gKGZzT3B0aW9uKSA9PiAhZnNPcHRpb24gfHwgZnNPcHRpb24gPT09IGRlZmF1bHRGUyB8fCBmc09wdGlvbiA9PT0gYWN0dWFsRlMgP1xuICAgIGRlZmF1bHRGU1xuICAgIDoge1xuICAgICAgICAuLi5kZWZhdWx0RlMsXG4gICAgICAgIC4uLmZzT3B0aW9uLFxuICAgICAgICBwcm9taXNlczoge1xuICAgICAgICAgICAgLi4uZGVmYXVsdEZTLnByb21pc2VzLFxuICAgICAgICAgICAgLi4uKGZzT3B0aW9uLnByb21pc2VzIHx8IHt9KSxcbiAgICAgICAgfSxcbiAgICB9O1xuLy8gdHVybiBzb21ldGhpbmcgbGlrZSAvLz8vYzovIGludG8gYzpcXFxuY29uc3QgdW5jRHJpdmVSZWdleHAgPSAvXlxcXFxcXFxcXFw/XFxcXChbYS16XTopXFxcXD8kL2k7XG5jb25zdCB1bmNUb0RyaXZlID0gKHJvb3RQYXRoKSA9PiByb290UGF0aC5yZXBsYWNlKC9cXC8vZywgJ1xcXFwnKS5yZXBsYWNlKHVuY0RyaXZlUmVnZXhwLCAnJDFcXFxcJyk7XG4vLyB3aW5kb3dzIHBhdGhzIGFyZSBzZXBhcmF0ZWQgYnkgZWl0aGVyIC8gb3IgXFxcbmNvbnN0IGVpdGhlclNlcCA9IC9bXFxcXFxcL10vO1xuY29uc3QgVU5LTk9XTiA9IDA7IC8vIG1heSBub3QgZXZlbiBleGlzdCwgZm9yIGFsbCB3ZSBrbm93XG5jb25zdCBJRklGTyA9IDBiMDAwMTtcbmNvbnN0IElGQ0hSID0gMGIwMDEwO1xuY29uc3QgSUZESVIgPSAwYjAxMDA7XG5jb25zdCBJRkJMSyA9IDBiMDExMDtcbmNvbnN0IElGUkVHID0gMGIxMDAwO1xuY29uc3QgSUZMTksgPSAwYjEwMTA7XG5jb25zdCBJRlNPQ0sgPSAwYjExMDA7XG5jb25zdCBJRk1UID0gMGIxMTExO1xuLy8gbWFzayB0byB1bnNldCBsb3cgNCBiaXRzXG5jb25zdCBJRk1UX1VOS05PV04gPSB+SUZNVDtcbi8vIHNldCBhZnRlciBzdWNjZXNzZnVsbHkgY2FsbGluZyByZWFkZGlyKCkgYW5kIGdldHRpbmcgZW50cmllcy5cbmNvbnN0IFJFQURESVJfQ0FMTEVEID0gMGIwMDAwXzAwMDFfMDAwMDtcbi8vIHNldCBhZnRlciBhIHN1Y2Nlc3NmdWwgbHN0YXQoKVxuY29uc3QgTFNUQVRfQ0FMTEVEID0gMGIwMDAwXzAwMTBfMDAwMDtcbi8vIHNldCBpZiBhbiBlbnRyeSAob3Igb25lIG9mIGl0cyBwYXJlbnRzKSBpcyBkZWZpbml0ZWx5IG5vdCBhIGRpclxuY29uc3QgRU5PVERJUiA9IDBiMDAwMF8wMTAwXzAwMDA7XG4vLyBzZXQgaWYgYW4gZW50cnkgKG9yIG9uZSBvZiBpdHMgcGFyZW50cykgZG9lcyBub3QgZXhpc3Rcbi8vIChjYW4gYWxzbyBiZSBzZXQgb24gbHN0YXQgZXJyb3JzIGxpa2UgRUFDQ0VTIG9yIEVOQU1FVE9PTE9ORylcbmNvbnN0IEVOT0VOVCA9IDBiMDAwMF8xMDAwXzAwMDA7XG4vLyBjYW5ub3QgaGF2ZSBjaGlsZCBlbnRyaWVzIC0tIGFsc28gdmVyaWZ5ICZJRk1UIGlzIGVpdGhlciBJRkRJUiBvciBJRkxOS1xuLy8gc2V0IGlmIHdlIGZhaWwgdG8gcmVhZGxpbmtcbmNvbnN0IEVOT1JFQURMSU5LID0gMGIwMDAxXzAwMDBfMDAwMDtcbi8vIHNldCBpZiB3ZSBrbm93IHJlYWxwYXRoKCkgd2lsbCBmYWlsXG5jb25zdCBFTk9SRUFMUEFUSCA9IDBiMDAxMF8wMDAwXzAwMDA7XG5jb25zdCBFTk9DSElMRCA9IEVOT1RESVIgfCBFTk9FTlQgfCBFTk9SRUFMUEFUSDtcbmNvbnN0IFRZUEVNQVNLID0gMGIwMDExXzExMTFfMTExMTtcbmNvbnN0IGVudFRvVHlwZSA9IChzKSA9PiBzLmlzRmlsZSgpID8gSUZSRUdcbiAgICA6IHMuaXNEaXJlY3RvcnkoKSA/IElGRElSXG4gICAgICAgIDogcy5pc1N5bWJvbGljTGluaygpID8gSUZMTktcbiAgICAgICAgICAgIDogcy5pc0NoYXJhY3RlckRldmljZSgpID8gSUZDSFJcbiAgICAgICAgICAgICAgICA6IHMuaXNCbG9ja0RldmljZSgpID8gSUZCTEtcbiAgICAgICAgICAgICAgICAgICAgOiBzLmlzU29ja2V0KCkgPyBJRlNPQ0tcbiAgICAgICAgICAgICAgICAgICAgICAgIDogcy5pc0ZJRk8oKSA/IElGSUZPXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBVTktOT1dOO1xuLy8gbm9ybWFsaXplIHVuaWNvZGUgcGF0aCBuYW1lc1xuY29uc3Qgbm9ybWFsaXplQ2FjaGUgPSBuZXcgTWFwKCk7XG5jb25zdCBub3JtYWxpemUgPSAocykgPT4ge1xuICAgIGNvbnN0IGMgPSBub3JtYWxpemVDYWNoZS5nZXQocyk7XG4gICAgaWYgKGMpXG4gICAgICAgIHJldHVybiBjO1xuICAgIGNvbnN0IG4gPSBzLm5vcm1hbGl6ZSgnTkZLRCcpO1xuICAgIG5vcm1hbGl6ZUNhY2hlLnNldChzLCBuKTtcbiAgICByZXR1cm4gbjtcbn07XG5jb25zdCBub3JtYWxpemVOb2Nhc2VDYWNoZSA9IG5ldyBNYXAoKTtcbmNvbnN0IG5vcm1hbGl6ZU5vY2FzZSA9IChzKSA9PiB7XG4gICAgY29uc3QgYyA9IG5vcm1hbGl6ZU5vY2FzZUNhY2hlLmdldChzKTtcbiAgICBpZiAoYylcbiAgICAgICAgcmV0dXJuIGM7XG4gICAgY29uc3QgbiA9IG5vcm1hbGl6ZShzLnRvTG93ZXJDYXNlKCkpO1xuICAgIG5vcm1hbGl6ZU5vY2FzZUNhY2hlLnNldChzLCBuKTtcbiAgICByZXR1cm4gbjtcbn07XG4vKipcbiAqIEFuIExSVUNhY2hlIGZvciBzdG9yaW5nIHJlc29sdmVkIHBhdGggc3RyaW5ncyBvciBQYXRoIG9iamVjdHMuXG4gKiBAaW50ZXJuYWxcbiAqL1xuY2xhc3MgUmVzb2x2ZUNhY2hlIGV4dGVuZHMgbHJ1X2NhY2hlXzEuTFJVQ2FjaGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcih7IG1heDogMjU2IH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuUmVzb2x2ZUNhY2hlID0gUmVzb2x2ZUNhY2hlO1xuLy8gSW4gb3JkZXIgdG8gcHJldmVudCBibG93aW5nIG91dCB0aGUganMgaGVhcCBieSBhbGxvY2F0aW5nIGh1bmRyZWRzIG9mXG4vLyB0aG91c2FuZHMgb2YgUGF0aCBlbnRyaWVzIHdoZW4gd2Fsa2luZyBleHRyZW1lbHkgbGFyZ2UgdHJlZXMsIHRoZSBcImNoaWxkcmVuXCJcbi8vIGluIHRoaXMgdHJlZSBhcmUgcmVwcmVzZW50ZWQgYnkgc3RvcmluZyBhbiBhcnJheSBvZiBQYXRoIGVudHJpZXMgaW4gYW5cbi8vIExSVUNhY2hlLCBpbmRleGVkIGJ5IHRoZSBwYXJlbnQuICBBdCBhbnkgdGltZSwgUGF0aC5jaGlsZHJlbigpIG1heSByZXR1cm4gYW5cbi8vIGVtcHR5IGFycmF5LCBpbmRpY2F0aW5nIHRoYXQgaXQgZG9lc24ndCBrbm93IGFib3V0IGFueSBvZiBpdHMgY2hpbGRyZW4sIGFuZFxuLy8gdGh1cyBoYXMgdG8gcmVidWlsZCB0aGF0IGNhY2hlLiAgVGhpcyBpcyBmaW5lLCBpdCBqdXN0IG1lYW5zIHRoYXQgd2UgZG9uJ3Rcbi8vIGJlbmVmaXQgYXMgbXVjaCBmcm9tIGhhdmluZyB0aGUgY2FjaGVkIGVudHJpZXMsIGJ1dCBodWdlIGRpcmVjdG9yeSB3YWxrc1xuLy8gZG9uJ3QgYmxvdyBvdXQgdGhlIHN0YWNrLCBhbmQgc21hbGxlciBvbmVzIGFyZSBzdGlsbCBhcyBmYXN0IGFzIHBvc3NpYmxlLlxuLy9cbi8vSXQgZG9lcyBpbXBvc2Ugc29tZSBjb21wbGV4aXR5IHdoZW4gYnVpbGRpbmcgdXAgdGhlIHJlYWRkaXIgZGF0YSwgYmVjYXVzZSB3ZVxuLy9uZWVkIHRvIHBhc3MgYSByZWZlcmVuY2UgdG8gdGhlIGNoaWxkcmVuIGFycmF5IHRoYXQgd2Ugc3RhcnRlZCB3aXRoLlxuLyoqXG4gKiBhbiBMUlVDYWNoZSBmb3Igc3RvcmluZyBjaGlsZCBlbnRyaWVzLlxuICogQGludGVybmFsXG4gKi9cbmNsYXNzIENoaWxkcmVuQ2FjaGUgZXh0ZW5kcyBscnVfY2FjaGVfMS5MUlVDYWNoZSB7XG4gICAgY29uc3RydWN0b3IobWF4U2l6ZSA9IDE2ICogMTAyNCkge1xuICAgICAgICBzdXBlcih7XG4gICAgICAgICAgICBtYXhTaXplLFxuICAgICAgICAgICAgLy8gcGFyZW50ICsgY2hpbGRyZW5cbiAgICAgICAgICAgIHNpemVDYWxjdWxhdGlvbjogYSA9PiBhLmxlbmd0aCArIDEsXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuQ2hpbGRyZW5DYWNoZSA9IENoaWxkcmVuQ2FjaGU7XG5jb25zdCBzZXRBc0N3ZCA9IFN5bWJvbCgnUGF0aFNjdXJyeSBzZXRBc0N3ZCcpO1xuLyoqXG4gKiBQYXRoIG9iamVjdHMgYXJlIHNvcnQgb2YgbGlrZSBhIHN1cGVyLXBvd2VyZWRcbiAqIHtAbGluayBodHRwczovL25vZGVqcy5vcmcvZG9jcy9sYXRlc3QvYXBpL2ZzLmh0bWwjY2xhc3MtZnNkaXJlbnQgZnMuRGlyZW50fVxuICpcbiAqIEVhY2ggb25lIHJlcHJlc2VudHMgYSBzaW5nbGUgZmlsZXN5c3RlbSBlbnRyeSBvbiBkaXNrLCB3aGljaCBtYXkgb3IgbWF5IG5vdFxuICogZXhpc3QuIEl0IGluY2x1ZGVzIG1ldGhvZHMgZm9yIHJlYWRpbmcgdmFyaW91cyB0eXBlcyBvZiBpbmZvcm1hdGlvbiB2aWFcbiAqIGxzdGF0LCByZWFkbGluaywgYW5kIHJlYWRkaXIsIGFuZCBjYWNoZXMgYWxsIGluZm9ybWF0aW9uIHRvIHRoZSBncmVhdGVzdFxuICogZGVncmVlIHBvc3NpYmxlLlxuICpcbiAqIE5vdGUgdGhhdCBmcyBvcGVyYXRpb25zIHRoYXQgd291bGQgbm9ybWFsbHkgdGhyb3cgd2lsbCBpbnN0ZWFkIHJldHVybiBhblxuICogXCJlbXB0eVwiIHZhbHVlLiBUaGlzIGlzIGluIG9yZGVyIHRvIHByZXZlbnQgZXhjZXNzaXZlIG92ZXJoZWFkIGZyb20gZXJyb3JcbiAqIHN0YWNrIHRyYWNlcy5cbiAqL1xuY2xhc3MgUGF0aEJhc2Uge1xuICAgIC8qKlxuICAgICAqIHRoZSBiYXNlbmFtZSBvZiB0aGlzIHBhdGhcbiAgICAgKlxuICAgICAqICoqSW1wb3J0YW50Kio6ICphbHdheXMqIHRlc3QgdGhlIHBhdGggbmFtZSBhZ2FpbnN0IGFueSB0ZXN0IHN0cmluZ1xuICAgICAqIHVzaW5ndGhlIHtAbGluayBpc05hbWVkfSBtZXRob2QsIGFuZCBub3QgYnkgZGlyZWN0bHkgY29tcGFyaW5nIHRoaXNcbiAgICAgKiBzdHJpbmcuIE90aGVyd2lzZSwgdW5pY29kZSBwYXRoIHN0cmluZ3MgdGhhdCB0aGUgc3lzdGVtIHNlZXMgYXMgaWRlbnRpY2FsXG4gICAgICogd2lsbCBub3QgYmUgcHJvcGVybHkgdHJlYXRlZCBhcyB0aGUgc2FtZSBwYXRoLCBsZWFkaW5nIHRvIGluY29ycmVjdFxuICAgICAqIGJlaGF2aW9yIGFuZCBwb3NzaWJsZSBzZWN1cml0eSBpc3N1ZXMuXG4gICAgICovXG4gICAgbmFtZTtcbiAgICAvKipcbiAgICAgKiB0aGUgUGF0aCBlbnRyeSBjb3JyZXNwb25kaW5nIHRvIHRoZSBwYXRoIHJvb3QuXG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICByb290O1xuICAgIC8qKlxuICAgICAqIEFsbCByb290cyBmb3VuZCB3aXRoaW4gdGhlIGN1cnJlbnQgUGF0aFNjdXJyeSBmYW1pbHlcbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHJvb3RzO1xuICAgIC8qKlxuICAgICAqIGEgcmVmZXJlbmNlIHRvIHRoZSBwYXJlbnQgcGF0aCwgb3IgdW5kZWZpbmVkIGluIHRoZSBjYXNlIG9mIHJvb3QgZW50cmllc1xuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcGFyZW50O1xuICAgIC8qKlxuICAgICAqIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHBhdGhzIGFyZSBjb21wYXJlZCBjYXNlLWluc2Vuc2l0aXZlbHlcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBub2Nhc2U7XG4gICAgLyoqXG4gICAgICogYm9vbGVhbiBpbmRpY2F0aW5nIHRoYXQgdGhpcyBwYXRoIGlzIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5XG4gICAgICogb2YgdGhlIFBhdGhTY3VycnkgY29sbGVjdGlvbiB0aGF0IGNvbnRhaW5zIGl0LlxuICAgICAqL1xuICAgIGlzQ1dEID0gZmFsc2U7XG4gICAgLy8gcG90ZW50aWFsIGRlZmF1bHQgZnMgb3ZlcnJpZGVcbiAgICAjZnM7XG4gICAgLy8gU3RhdHMgZmllbGRzXG4gICAgI2RldjtcbiAgICBnZXQgZGV2KCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jZGV2O1xuICAgIH1cbiAgICAjbW9kZTtcbiAgICBnZXQgbW9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI21vZGU7XG4gICAgfVxuICAgICNubGluaztcbiAgICBnZXQgbmxpbmsoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNubGluaztcbiAgICB9XG4gICAgI3VpZDtcbiAgICBnZXQgdWlkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jdWlkO1xuICAgIH1cbiAgICAjZ2lkO1xuICAgIGdldCBnaWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNnaWQ7XG4gICAgfVxuICAgICNyZGV2O1xuICAgIGdldCByZGV2KCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcmRldjtcbiAgICB9XG4gICAgI2Jsa3NpemU7XG4gICAgZ2V0IGJsa3NpemUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNibGtzaXplO1xuICAgIH1cbiAgICAjaW5vO1xuICAgIGdldCBpbm8oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNpbm87XG4gICAgfVxuICAgICNzaXplO1xuICAgIGdldCBzaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jc2l6ZTtcbiAgICB9XG4gICAgI2Jsb2NrcztcbiAgICBnZXQgYmxvY2tzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jYmxvY2tzO1xuICAgIH1cbiAgICAjYXRpbWVNcztcbiAgICBnZXQgYXRpbWVNcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2F0aW1lTXM7XG4gICAgfVxuICAgICNtdGltZU1zO1xuICAgIGdldCBtdGltZU1zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jbXRpbWVNcztcbiAgICB9XG4gICAgI2N0aW1lTXM7XG4gICAgZ2V0IGN0aW1lTXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNjdGltZU1zO1xuICAgIH1cbiAgICAjYmlydGh0aW1lTXM7XG4gICAgZ2V0IGJpcnRodGltZU1zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jYmlydGh0aW1lTXM7XG4gICAgfVxuICAgICNhdGltZTtcbiAgICBnZXQgYXRpbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNhdGltZTtcbiAgICB9XG4gICAgI210aW1lO1xuICAgIGdldCBtdGltZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI210aW1lO1xuICAgIH1cbiAgICAjY3RpbWU7XG4gICAgZ2V0IGN0aW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jY3RpbWU7XG4gICAgfVxuICAgICNiaXJ0aHRpbWU7XG4gICAgZ2V0IGJpcnRodGltZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2JpcnRodGltZTtcbiAgICB9XG4gICAgI21hdGNoTmFtZTtcbiAgICAjZGVwdGg7XG4gICAgI2Z1bGxwYXRoO1xuICAgICNmdWxscGF0aFBvc2l4O1xuICAgICNyZWxhdGl2ZTtcbiAgICAjcmVsYXRpdmVQb3NpeDtcbiAgICAjdHlwZTtcbiAgICAjY2hpbGRyZW47XG4gICAgI2xpbmtUYXJnZXQ7XG4gICAgI3JlYWxwYXRoO1xuICAgIC8qKlxuICAgICAqIFRoaXMgcHJvcGVydHkgaXMgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgRGlyZW50IGNsYXNzIGFzIG9mXG4gICAgICogTm9kZSB2MjAsIHdoZXJlIERpcmVudFsncGFyZW50UGF0aCddIHJlZmVycyB0byB0aGUgcGF0aCBvZiB0aGVcbiAgICAgKiBkaXJlY3RvcnkgdGhhdCB3YXMgcGFzc2VkIHRvIHJlYWRkaXIuIEZvciByb290IGVudHJpZXMsIGl0J3MgdGhlIHBhdGhcbiAgICAgKiB0byB0aGUgZW50cnkgaXRzZWxmLlxuICAgICAqL1xuICAgIGdldCBwYXJlbnRQYXRoKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMucGFyZW50IHx8IHRoaXMpLmZ1bGxwYXRoKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlcHJlY2F0ZWQgYWxpYXMgZm9yIERpcmVudFsncGFyZW50UGF0aCddIFNvbWV3aGF0IGNvdW50ZXJpbnR1aXRpdmVseSxcbiAgICAgKiB0aGlzIHByb3BlcnR5IHJlZmVycyB0byB0aGUgKnBhcmVudCogcGF0aCwgbm90IHRoZSBwYXRoIG9iamVjdCBpdHNlbGYuXG4gICAgICovXG4gICAgZ2V0IHBhdGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudFBhdGg7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERvIG5vdCBjcmVhdGUgbmV3IFBhdGggb2JqZWN0cyBkaXJlY3RseS4gIFRoZXkgc2hvdWxkIGFsd2F5cyBiZSBhY2Nlc3NlZFxuICAgICAqIHZpYSB0aGUgUGF0aFNjdXJyeSBjbGFzcyBvciBvdGhlciBtZXRob2RzIG9uIHRoZSBQYXRoIGNsYXNzLlxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgY29uc3RydWN0b3IobmFtZSwgdHlwZSA9IFVOS05PV04sIHJvb3QsIHJvb3RzLCBub2Nhc2UsIGNoaWxkcmVuLCBvcHRzKSB7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMuI21hdGNoTmFtZSA9IG5vY2FzZSA/IG5vcm1hbGl6ZU5vY2FzZShuYW1lKSA6IG5vcm1hbGl6ZShuYW1lKTtcbiAgICAgICAgdGhpcy4jdHlwZSA9IHR5cGUgJiBUWVBFTUFTSztcbiAgICAgICAgdGhpcy5ub2Nhc2UgPSBub2Nhc2U7XG4gICAgICAgIHRoaXMucm9vdHMgPSByb290cztcbiAgICAgICAgdGhpcy5yb290ID0gcm9vdCB8fCB0aGlzO1xuICAgICAgICB0aGlzLiNjaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgICAgICB0aGlzLiNmdWxscGF0aCA9IG9wdHMuZnVsbHBhdGg7XG4gICAgICAgIHRoaXMuI3JlbGF0aXZlID0gb3B0cy5yZWxhdGl2ZTtcbiAgICAgICAgdGhpcy4jcmVsYXRpdmVQb3NpeCA9IG9wdHMucmVsYXRpdmVQb3NpeDtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBvcHRzLnBhcmVudDtcbiAgICAgICAgaWYgKHRoaXMucGFyZW50KSB7XG4gICAgICAgICAgICB0aGlzLiNmcyA9IHRoaXMucGFyZW50LiNmcztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuI2ZzID0gZnNGcm9tT3B0aW9uKG9wdHMuZnMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGRlcHRoIG9mIHRoZSBQYXRoIG9iamVjdCBmcm9tIGl0cyByb290LlxuICAgICAqXG4gICAgICogRm9yIGV4YW1wbGUsIGEgcGF0aCBhdCBgL2Zvby9iYXJgIHdvdWxkIGhhdmUgYSBkZXB0aCBvZiAyLlxuICAgICAqL1xuICAgIGRlcHRoKCkge1xuICAgICAgICBpZiAodGhpcy4jZGVwdGggIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiNkZXB0aDtcbiAgICAgICAgaWYgKCF0aGlzLnBhcmVudClcbiAgICAgICAgICAgIHJldHVybiAodGhpcy4jZGVwdGggPSAwKTtcbiAgICAgICAgcmV0dXJuICh0aGlzLiNkZXB0aCA9IHRoaXMucGFyZW50LmRlcHRoKCkgKyAxKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgY2hpbGRyZW5DYWNoZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2NoaWxkcmVuO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIFBhdGggb2JqZWN0IHJlZmVyZW5jZWQgYnkgdGhlIHN0cmluZyBwYXRoLCByZXNvbHZlZCBmcm9tIHRoaXMgUGF0aFxuICAgICAqL1xuICAgIHJlc29sdmUocGF0aCkge1xuICAgICAgICBpZiAoIXBhdGgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJvb3RQYXRoID0gdGhpcy5nZXRSb290U3RyaW5nKHBhdGgpO1xuICAgICAgICBjb25zdCBkaXIgPSBwYXRoLnN1YnN0cmluZyhyb290UGF0aC5sZW5ndGgpO1xuICAgICAgICBjb25zdCBkaXJQYXJ0cyA9IGRpci5zcGxpdCh0aGlzLnNwbGl0U2VwKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcm9vdFBhdGggP1xuICAgICAgICAgICAgdGhpcy5nZXRSb290KHJvb3RQYXRoKS4jcmVzb2x2ZVBhcnRzKGRpclBhcnRzKVxuICAgICAgICAgICAgOiB0aGlzLiNyZXNvbHZlUGFydHMoZGlyUGFydHMpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICAjcmVzb2x2ZVBhcnRzKGRpclBhcnRzKSB7XG4gICAgICAgIGxldCBwID0gdGhpcztcbiAgICAgICAgZm9yIChjb25zdCBwYXJ0IG9mIGRpclBhcnRzKSB7XG4gICAgICAgICAgICBwID0gcC5jaGlsZChwYXJ0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY2FjaGVkIGNoaWxkcmVuIFBhdGggb2JqZWN0cywgaWYgc3RpbGwgYXZhaWxhYmxlLiAgSWYgdGhleVxuICAgICAqIGhhdmUgZmFsbGVuIG91dCBvZiB0aGUgY2FjaGUsIHRoZW4gcmV0dXJucyBhbiBlbXB0eSBhcnJheSwgYW5kIHJlc2V0cyB0aGVcbiAgICAgKiBSRUFERElSX0NBTExFRCBiaXQsIHNvIHRoYXQgZnV0dXJlIGNhbGxzIHRvIHJlYWRkaXIoKSB3aWxsIHJlcXVpcmUgYW4gZnNcbiAgICAgKiBsb29rdXAuXG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBjaGlsZHJlbigpIHtcbiAgICAgICAgY29uc3QgY2FjaGVkID0gdGhpcy4jY2hpbGRyZW4uZ2V0KHRoaXMpO1xuICAgICAgICBpZiAoY2FjaGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gT2JqZWN0LmFzc2lnbihbXSwgeyBwcm92aXNpb25hbDogMCB9KTtcbiAgICAgICAgdGhpcy4jY2hpbGRyZW4uc2V0KHRoaXMsIGNoaWxkcmVuKTtcbiAgICAgICAgdGhpcy4jdHlwZSAmPSB+UkVBRERJUl9DQUxMRUQ7XG4gICAgICAgIHJldHVybiBjaGlsZHJlbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVzb2x2ZXMgYSBwYXRoIHBvcnRpb24gYW5kIHJldHVybnMgb3IgY3JlYXRlcyB0aGUgY2hpbGQgUGF0aC5cbiAgICAgKlxuICAgICAqIFJldHVybnMgYHRoaXNgIGlmIHBhdGhQYXJ0IGlzIGAnJ2Agb3IgYCcuJ2AsIG9yIGBwYXJlbnRgIGlmIHBhdGhQYXJ0IGlzXG4gICAgICogYCcuLidgLlxuICAgICAqXG4gICAgICogVGhpcyBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS4gIElmIGBwYXRoUGFydGAgY29udGFpbnMgYW55IHBhdGhcbiAgICAgKiBzZXBhcmF0b3JzLCBpdCB3aWxsIGxlYWQgdG8gdW5zYWZlIHVuZGVmaW5lZCBiZWhhdmlvci5cbiAgICAgKlxuICAgICAqIFVzZSBgUGF0aC5yZXNvbHZlKClgIGluc3RlYWQuXG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBjaGlsZChwYXRoUGFydCwgb3B0cykge1xuICAgICAgICBpZiAocGF0aFBhcnQgPT09ICcnIHx8IHBhdGhQYXJ0ID09PSAnLicpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXRoUGFydCA9PT0gJy4uJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50IHx8IHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZmluZCB0aGUgY2hpbGRcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuKCk7XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLm5vY2FzZSA/IG5vcm1hbGl6ZU5vY2FzZShwYXRoUGFydCkgOiBub3JtYWxpemUocGF0aFBhcnQpO1xuICAgICAgICBmb3IgKGNvbnN0IHAgb2YgY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGlmIChwLiNtYXRjaE5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBkaWRuJ3QgZmluZCBpdCwgY3JlYXRlIHByb3Zpc2lvbmFsIGNoaWxkLCBzaW5jZSBpdCBtaWdodCBub3RcbiAgICAgICAgLy8gYWN0dWFsbHkgZXhpc3QuICBJZiB3ZSBrbm93IHRoZSBwYXJlbnQgaXNuJ3QgYSBkaXIsIHRoZW5cbiAgICAgICAgLy8gaW4gZmFjdCBpdCBDQU4nVCBleGlzdC5cbiAgICAgICAgY29uc3QgcyA9IHRoaXMucGFyZW50ID8gdGhpcy5zZXAgOiAnJztcbiAgICAgICAgY29uc3QgZnVsbHBhdGggPSB0aGlzLiNmdWxscGF0aCA/IHRoaXMuI2Z1bGxwYXRoICsgcyArIHBhdGhQYXJ0IDogdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBwY2hpbGQgPSB0aGlzLm5ld0NoaWxkKHBhdGhQYXJ0LCBVTktOT1dOLCB7XG4gICAgICAgICAgICAuLi5vcHRzLFxuICAgICAgICAgICAgcGFyZW50OiB0aGlzLFxuICAgICAgICAgICAgZnVsbHBhdGgsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIXRoaXMuY2FuUmVhZGRpcigpKSB7XG4gICAgICAgICAgICBwY2hpbGQuI3R5cGUgfD0gRU5PRU5UO1xuICAgICAgICB9XG4gICAgICAgIC8vIGRvbid0IGhhdmUgdG8gdXBkYXRlIHByb3Zpc2lvbmFsLCBiZWNhdXNlIGlmIHdlIGhhdmUgcmVhbCBjaGlsZHJlbixcbiAgICAgICAgLy8gdGhlbiBwcm92aXNpb25hbCBpcyBzZXQgdG8gY2hpbGRyZW4ubGVuZ3RoLCBvdGhlcndpc2UgYSBsb3dlciBudW1iZXJcbiAgICAgICAgY2hpbGRyZW4ucHVzaChwY2hpbGQpO1xuICAgICAgICByZXR1cm4gcGNoaWxkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgcmVsYXRpdmUgcGF0aCBmcm9tIHRoZSBjd2QuIElmIGl0IGRvZXMgbm90IHNoYXJlIGFuIGFuY2VzdG9yIHdpdGhcbiAgICAgKiB0aGUgY3dkLCB0aGVuIHRoaXMgZW5kcyB1cCBiZWluZyBlcXVpdmFsZW50IHRvIHRoZSBmdWxscGF0aCgpXG4gICAgICovXG4gICAgcmVsYXRpdmUoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzQ1dEKVxuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICBpZiAodGhpcy4jcmVsYXRpdmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuI3JlbGF0aXZlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLm5hbWU7XG4gICAgICAgIGNvbnN0IHAgPSB0aGlzLnBhcmVudDtcbiAgICAgICAgaWYgKCFwKSB7XG4gICAgICAgICAgICByZXR1cm4gKHRoaXMuI3JlbGF0aXZlID0gdGhpcy5uYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwdiA9IHAucmVsYXRpdmUoKTtcbiAgICAgICAgcmV0dXJuIHB2ICsgKCFwdiB8fCAhcC5wYXJlbnQgPyAnJyA6IHRoaXMuc2VwKSArIG5hbWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSByZWxhdGl2ZSBwYXRoIGZyb20gdGhlIGN3ZCwgdXNpbmcgLyBhcyB0aGUgcGF0aCBzZXBhcmF0b3IuXG4gICAgICogSWYgaXQgZG9lcyBub3Qgc2hhcmUgYW4gYW5jZXN0b3Igd2l0aFxuICAgICAqIHRoZSBjd2QsIHRoZW4gdGhpcyBlbmRzIHVwIGJlaW5nIGVxdWl2YWxlbnQgdG8gdGhlIGZ1bGxwYXRoUG9zaXgoKVxuICAgICAqIE9uIHBvc2l4IHN5c3RlbXMsIHRoaXMgaXMgaWRlbnRpY2FsIHRvIHJlbGF0aXZlKCkuXG4gICAgICovXG4gICAgcmVsYXRpdmVQb3NpeCgpIHtcbiAgICAgICAgaWYgKHRoaXMuc2VwID09PSAnLycpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZWxhdGl2ZSgpO1xuICAgICAgICBpZiAodGhpcy5pc0NXRClcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgaWYgKHRoaXMuI3JlbGF0aXZlUG9zaXggIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiNyZWxhdGl2ZVBvc2l4O1xuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5uYW1lO1xuICAgICAgICBjb25zdCBwID0gdGhpcy5wYXJlbnQ7XG4gICAgICAgIGlmICghcCkge1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLiNyZWxhdGl2ZVBvc2l4ID0gdGhpcy5mdWxscGF0aFBvc2l4KCkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHB2ID0gcC5yZWxhdGl2ZVBvc2l4KCk7XG4gICAgICAgIHJldHVybiBwdiArICghcHYgfHwgIXAucGFyZW50ID8gJycgOiAnLycpICsgbmFtZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGZ1bGx5IHJlc29sdmVkIHBhdGggc3RyaW5nIGZvciB0aGlzIFBhdGggZW50cnlcbiAgICAgKi9cbiAgICBmdWxscGF0aCgpIHtcbiAgICAgICAgaWYgKHRoaXMuI2Z1bGxwYXRoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiNmdWxscGF0aDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5uYW1lO1xuICAgICAgICBjb25zdCBwID0gdGhpcy5wYXJlbnQ7XG4gICAgICAgIGlmICghcCkge1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLiNmdWxscGF0aCA9IHRoaXMubmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHYgPSBwLmZ1bGxwYXRoKCk7XG4gICAgICAgIGNvbnN0IGZwID0gcHYgKyAoIXAucGFyZW50ID8gJycgOiB0aGlzLnNlcCkgKyBuYW1lO1xuICAgICAgICByZXR1cm4gKHRoaXMuI2Z1bGxwYXRoID0gZnApO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBPbiBwbGF0Zm9ybXMgb3RoZXIgdGhhbiB3aW5kb3dzLCB0aGlzIGlzIGlkZW50aWNhbCB0byBmdWxscGF0aC5cbiAgICAgKlxuICAgICAqIE9uIHdpbmRvd3MsIHRoaXMgaXMgb3ZlcnJpZGRlbiB0byByZXR1cm4gdGhlIGZvcndhcmQtc2xhc2ggZm9ybSBvZiB0aGVcbiAgICAgKiBmdWxsIFVOQyBwYXRoLlxuICAgICAqL1xuICAgIGZ1bGxwYXRoUG9zaXgoKSB7XG4gICAgICAgIGlmICh0aGlzLiNmdWxscGF0aFBvc2l4ICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy4jZnVsbHBhdGhQb3NpeDtcbiAgICAgICAgaWYgKHRoaXMuc2VwID09PSAnLycpXG4gICAgICAgICAgICByZXR1cm4gKHRoaXMuI2Z1bGxwYXRoUG9zaXggPSB0aGlzLmZ1bGxwYXRoKCkpO1xuICAgICAgICBpZiAoIXRoaXMucGFyZW50KSB7XG4gICAgICAgICAgICBjb25zdCBwID0gdGhpcy5mdWxscGF0aCgpLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbiAgICAgICAgICAgIGlmICgvXlthLXpdOlxcLy9pLnRlc3QocCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKHRoaXMuI2Z1bGxwYXRoUG9zaXggPSBgLy8/LyR7cH1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAodGhpcy4jZnVsbHBhdGhQb3NpeCA9IHApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHAgPSB0aGlzLnBhcmVudDtcbiAgICAgICAgY29uc3QgcGZwcCA9IHAuZnVsbHBhdGhQb3NpeCgpO1xuICAgICAgICBjb25zdCBmcHAgPSBwZnBwICsgKCFwZnBwIHx8ICFwLnBhcmVudCA/ICcnIDogJy8nKSArIHRoaXMubmFtZTtcbiAgICAgICAgcmV0dXJuICh0aGlzLiNmdWxscGF0aFBvc2l4ID0gZnBwKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSXMgdGhlIFBhdGggb2YgYW4gdW5rbm93biB0eXBlP1xuICAgICAqXG4gICAgICogTm90ZSB0aGF0IHdlIG1pZ2h0IGtub3cgKnNvbWV0aGluZyogYWJvdXQgaXQgaWYgdGhlcmUgaGFzIGJlZW4gYSBwcmV2aW91c1xuICAgICAqIGZpbGVzeXN0ZW0gb3BlcmF0aW9uLCBmb3IgZXhhbXBsZSB0aGF0IGl0IGRvZXMgbm90IGV4aXN0LCBvciBpcyBub3QgYVxuICAgICAqIGxpbmssIG9yIHdoZXRoZXIgaXQgaGFzIGNoaWxkIGVudHJpZXMuXG4gICAgICovXG4gICAgaXNVbmtub3duKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuI3R5cGUgJiBJRk1UKSA9PT0gVU5LTk9XTjtcbiAgICB9XG4gICAgaXNUeXBlKHR5cGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbYGlzJHt0eXBlfWBdKCk7XG4gICAgfVxuICAgIGdldFR5cGUoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5pc1Vua25vd24oKSA/ICdVbmtub3duJ1xuICAgICAgICAgICAgOiB0aGlzLmlzRGlyZWN0b3J5KCkgPyAnRGlyZWN0b3J5J1xuICAgICAgICAgICAgICAgIDogdGhpcy5pc0ZpbGUoKSA/ICdGaWxlJ1xuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuaXNTeW1ib2xpY0xpbmsoKSA/ICdTeW1ib2xpY0xpbmsnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuaXNGSUZPKCkgPyAnRklGTydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuaXNDaGFyYWN0ZXJEZXZpY2UoKSA/ICdDaGFyYWN0ZXJEZXZpY2UnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5pc0Jsb2NrRGV2aWNlKCkgPyAnQmxvY2tEZXZpY2UnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IC8qIGM4IGlnbm9yZSBzdGFydCAqLyB0aGlzLmlzU29ja2V0KCkgPyAnU29ja2V0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ1Vua25vd24nKTtcbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICB9XG4gICAgLyoqXG4gICAgICogSXMgdGhlIFBhdGggYSByZWd1bGFyIGZpbGU/XG4gICAgICovXG4gICAgaXNGaWxlKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuI3R5cGUgJiBJRk1UKSA9PT0gSUZSRUc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElzIHRoZSBQYXRoIGEgZGlyZWN0b3J5P1xuICAgICAqL1xuICAgIGlzRGlyZWN0b3J5KCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuI3R5cGUgJiBJRk1UKSA9PT0gSUZESVI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElzIHRoZSBwYXRoIGEgY2hhcmFjdGVyIGRldmljZT9cbiAgICAgKi9cbiAgICBpc0NoYXJhY3RlckRldmljZSgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLiN0eXBlICYgSUZNVCkgPT09IElGQ0hSO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJcyB0aGUgcGF0aCBhIGJsb2NrIGRldmljZT9cbiAgICAgKi9cbiAgICBpc0Jsb2NrRGV2aWNlKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuI3R5cGUgJiBJRk1UKSA9PT0gSUZCTEs7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElzIHRoZSBwYXRoIGEgRklGTyBwaXBlP1xuICAgICAqL1xuICAgIGlzRklGTygpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLiN0eXBlICYgSUZNVCkgPT09IElGSUZPO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJcyB0aGUgcGF0aCBhIHNvY2tldD9cbiAgICAgKi9cbiAgICBpc1NvY2tldCgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLiN0eXBlICYgSUZNVCkgPT09IElGU09DSztcbiAgICB9XG4gICAgLyoqXG4gICAgICogSXMgdGhlIHBhdGggYSBzeW1ib2xpYyBsaW5rP1xuICAgICAqL1xuICAgIGlzU3ltYm9saWNMaW5rKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuI3R5cGUgJiBJRkxOSykgPT09IElGTE5LO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIGVudHJ5IGlmIGl0IGhhcyBiZWVuIHN1YmplY3Qgb2YgYSBzdWNjZXNzZnVsIGxzdGF0LCBvclxuICAgICAqIHVuZGVmaW5lZCBvdGhlcndpc2UuXG4gICAgICpcbiAgICAgKiBEb2VzIG5vdCByZWFkIHRoZSBmaWxlc3lzdGVtLCBzbyBhbiB1bmRlZmluZWQgcmVzdWx0ICpjb3VsZCogc2ltcGx5XG4gICAgICogbWVhbiB0aGF0IHdlIGhhdmVuJ3QgY2FsbGVkIGxzdGF0IG9uIGl0LlxuICAgICAqL1xuICAgIGxzdGF0Q2FjaGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jdHlwZSAmIExTVEFUX0NBTExFRCA/IHRoaXMgOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgY2FjaGVkIGxpbmsgdGFyZ2V0IGlmIHRoZSBlbnRyeSBoYXMgYmVlbiB0aGUgc3ViamVjdCBvZiBhXG4gICAgICogc3VjY2Vzc2Z1bCByZWFkbGluaywgb3IgdW5kZWZpbmVkIG90aGVyd2lzZS5cbiAgICAgKlxuICAgICAqIERvZXMgbm90IHJlYWQgdGhlIGZpbGVzeXN0ZW0sIHNvIGFuIHVuZGVmaW5lZCByZXN1bHQgKmNvdWxkKiBqdXN0IG1lYW4gd2VcbiAgICAgKiBkb24ndCBoYXZlIGFueSBjYWNoZWQgZGF0YS4gT25seSB1c2UgaXQgaWYgeW91IGFyZSB2ZXJ5IHN1cmUgdGhhdCBhXG4gICAgICogcmVhZGxpbmsoKSBoYXMgYmVlbiBjYWxsZWQgYXQgc29tZSBwb2ludC5cbiAgICAgKi9cbiAgICByZWFkbGlua0NhY2hlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2xpbmtUYXJnZXQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGNhY2hlZCByZWFscGF0aCB0YXJnZXQgaWYgdGhlIGVudHJ5IGhhcyBiZWVuIHRoZSBzdWJqZWN0XG4gICAgICogb2YgYSBzdWNjZXNzZnVsIHJlYWxwYXRoLCBvciB1bmRlZmluZWQgb3RoZXJ3aXNlLlxuICAgICAqXG4gICAgICogRG9lcyBub3QgcmVhZCB0aGUgZmlsZXN5c3RlbSwgc28gYW4gdW5kZWZpbmVkIHJlc3VsdCAqY291bGQqIGp1c3QgbWVhbiB3ZVxuICAgICAqIGRvbid0IGhhdmUgYW55IGNhY2hlZCBkYXRhLiBPbmx5IHVzZSBpdCBpZiB5b3UgYXJlIHZlcnkgc3VyZSB0aGF0IGFcbiAgICAgKiByZWFscGF0aCgpIGhhcyBiZWVuIGNhbGxlZCBhdCBzb21lIHBvaW50LlxuICAgICAqL1xuICAgIHJlYWxwYXRoQ2FjaGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcmVhbHBhdGg7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGNhY2hlZCBjaGlsZCBQYXRoIGVudHJpZXMgYXJyYXkgaWYgdGhlIGVudHJ5IGhhcyBiZWVuIHRoZVxuICAgICAqIHN1YmplY3Qgb2YgYSBzdWNjZXNzZnVsIHJlYWRkaXIoKSwgb3IgW10gb3RoZXJ3aXNlLlxuICAgICAqXG4gICAgICogRG9lcyBub3QgcmVhZCB0aGUgZmlsZXN5c3RlbSwgc28gYW4gZW1wdHkgYXJyYXkgKmNvdWxkKiBqdXN0IG1lYW4gd2VcbiAgICAgKiBkb24ndCBoYXZlIGFueSBjYWNoZWQgZGF0YS4gT25seSB1c2UgaXQgaWYgeW91IGFyZSB2ZXJ5IHN1cmUgdGhhdCBhXG4gICAgICogcmVhZGRpcigpIGhhcyBiZWVuIGNhbGxlZCByZWNlbnRseSBlbm91Z2ggdG8gc3RpbGwgYmUgdmFsaWQuXG4gICAgICovXG4gICAgcmVhZGRpckNhY2hlZCgpIHtcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuKCk7XG4gICAgICAgIHJldHVybiBjaGlsZHJlbi5zbGljZSgwLCBjaGlsZHJlbi5wcm92aXNpb25hbCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiB0cnVlIGlmIGl0J3Mgd29ydGggdHJ5aW5nIHRvIHJlYWRsaW5rLiAgSWUsIHdlIGRvbid0ICh5ZXQpIGhhdmVcbiAgICAgKiBhbnkgaW5kaWNhdGlvbiB0aGF0IHJlYWRsaW5rIHdpbGwgZGVmaW5pdGVseSBmYWlsLlxuICAgICAqXG4gICAgICogUmV0dXJucyBmYWxzZSBpZiB0aGUgcGF0aCBpcyBrbm93biB0byBub3QgYmUgYSBzeW1saW5rLCBpZiBhIHByZXZpb3VzXG4gICAgICogcmVhZGxpbmsgZmFpbGVkLCBvciBpZiB0aGUgZW50cnkgZG9lcyBub3QgZXhpc3QuXG4gICAgICovXG4gICAgY2FuUmVhZGxpbmsoKSB7XG4gICAgICAgIGlmICh0aGlzLiNsaW5rVGFyZ2V0KVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmICghdGhpcy5wYXJlbnQpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIC8vIGNhc2VzIHdoZXJlIGl0IGNhbm5vdCBwb3NzaWJseSBzdWNjZWVkXG4gICAgICAgIGNvbnN0IGlmbXQgPSB0aGlzLiN0eXBlICYgSUZNVDtcbiAgICAgICAgcmV0dXJuICEoKGlmbXQgIT09IFVOS05PV04gJiYgaWZtdCAhPT0gSUZMTkspIHx8XG4gICAgICAgICAgICB0aGlzLiN0eXBlICYgRU5PUkVBRExJTksgfHxcbiAgICAgICAgICAgIHRoaXMuI3R5cGUgJiBFTk9FTlQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiByZWFkZGlyIGhhcyBwcmV2aW91c2x5IGJlZW4gc3VjY2Vzc2Z1bGx5IGNhbGxlZCBvbiB0aGlzXG4gICAgICogcGF0aCwgaW5kaWNhdGluZyB0aGF0IGNhY2hlZFJlYWRkaXIoKSBpcyBsaWtlbHkgdmFsaWQuXG4gICAgICovXG4gICAgY2FsbGVkUmVhZGRpcigpIHtcbiAgICAgICAgcmV0dXJuICEhKHRoaXMuI3R5cGUgJiBSRUFERElSX0NBTExFRCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcGF0aCBpcyBrbm93biB0byBub3QgZXhpc3QuIFRoYXQgaXMsIGEgcHJldmlvdXMgbHN0YXRcbiAgICAgKiBvciByZWFkZGlyIGZhaWxlZCB0byB2ZXJpZnkgaXRzIGV4aXN0ZW5jZSB3aGVuIHRoYXQgd291bGQgaGF2ZSBiZWVuXG4gICAgICogZXhwZWN0ZWQsIG9yIGEgcGFyZW50IGVudHJ5IHdhcyBtYXJrZWQgZWl0aGVyIGVub2VudCBvciBlbm90ZGlyLlxuICAgICAqL1xuICAgIGlzRU5PRU5UKCkge1xuICAgICAgICByZXR1cm4gISEodGhpcy4jdHlwZSAmIEVOT0VOVCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSBwYXRoIGlzIGEgbWF0Y2ggZm9yIHRoZSBnaXZlbiBwYXRoIG5hbWUuICBUaGlzIGhhbmRsZXNcbiAgICAgKiBjYXNlIHNlbnNpdGl2aXR5IGFuZCB1bmljb2RlIG5vcm1hbGl6YXRpb24uXG4gICAgICpcbiAgICAgKiBOb3RlOiBldmVuIG9uIGNhc2Utc2Vuc2l0aXZlIHN5c3RlbXMsIGl0IGlzICoqbm90Kiogc2FmZSB0byB0ZXN0IHRoZVxuICAgICAqIGVxdWFsaXR5IG9mIHRoZSBgLm5hbWVgIHByb3BlcnR5IHRvIGRldGVybWluZSB3aGV0aGVyIGEgZ2l2ZW4gcGF0aG5hbWVcbiAgICAgKiBtYXRjaGVzLCBkdWUgdG8gdW5pY29kZSBub3JtYWxpemF0aW9uIG1pc21hdGNoZXMuXG4gICAgICpcbiAgICAgKiBBbHdheXMgdXNlIHRoaXMgbWV0aG9kIGluc3RlYWQgb2YgdGVzdGluZyB0aGUgYHBhdGgubmFtZWAgcHJvcGVydHlcbiAgICAgKiBkaXJlY3RseS5cbiAgICAgKi9cbiAgICBpc05hbWVkKG4pIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLm5vY2FzZSA/XG4gICAgICAgICAgICB0aGlzLiNtYXRjaE5hbWUgPT09IG5vcm1hbGl6ZShuKVxuICAgICAgICAgICAgOiB0aGlzLiNtYXRjaE5hbWUgPT09IG5vcm1hbGl6ZU5vY2FzZShuKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBQYXRoIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHRoZSB0YXJnZXQgb2YgYSBzeW1ib2xpYyBsaW5rLlxuICAgICAqXG4gICAgICogSWYgdGhlIFBhdGggaXMgbm90IGEgc3ltYm9saWMgbGluaywgb3IgaWYgdGhlIHJlYWRsaW5rIGNhbGwgZmFpbHMgZm9yIGFueVxuICAgICAqIHJlYXNvbiwgYHVuZGVmaW5lZGAgaXMgcmV0dXJuZWQuXG4gICAgICpcbiAgICAgKiBSZXN1bHQgaXMgY2FjaGVkLCBhbmQgdGh1cyBtYXkgYmUgb3V0ZGF0ZWQgaWYgdGhlIGZpbGVzeXN0ZW0gaXMgbXV0YXRlZC5cbiAgICAgKi9cbiAgICBhc3luYyByZWFkbGluaygpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy4jbGlua1RhcmdldDtcbiAgICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuY2FuUmVhZGxpbmsoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgLy8gYWxyZWFkeSBjb3ZlcmVkIGJ5IHRoZSBjYW5SZWFkbGluayB0ZXN0LCBoZXJlIGZvciB0cyBncnVtcGxlc1xuICAgICAgICBpZiAoIXRoaXMucGFyZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZWFkID0gYXdhaXQgdGhpcy4jZnMucHJvbWlzZXMucmVhZGxpbmsodGhpcy5mdWxscGF0aCgpKTtcbiAgICAgICAgICAgIGNvbnN0IGxpbmtUYXJnZXQgPSAoYXdhaXQgdGhpcy5wYXJlbnQucmVhbHBhdGgoKSk/LnJlc29sdmUocmVhZCk7XG4gICAgICAgICAgICBpZiAobGlua1RhcmdldCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAodGhpcy4jbGlua1RhcmdldCA9IGxpbmtUYXJnZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcikge1xuICAgICAgICAgICAgdGhpcy4jcmVhZGxpbmtGYWlsKGVyLmNvZGUpO1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBTeW5jaHJvbm91cyB7QGxpbmsgUGF0aEJhc2UucmVhZGxpbmt9XG4gICAgICovXG4gICAgcmVhZGxpbmtTeW5jKCkge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLiNsaW5rVGFyZ2V0O1xuICAgICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5jYW5SZWFkbGluaygpKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICAvLyBhbHJlYWR5IGNvdmVyZWQgYnkgdGhlIGNhblJlYWRsaW5rIHRlc3QsIGhlcmUgZm9yIHRzIGdydW1wbGVzXG4gICAgICAgIGlmICghdGhpcy5wYXJlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlYWQgPSB0aGlzLiNmcy5yZWFkbGlua1N5bmModGhpcy5mdWxscGF0aCgpKTtcbiAgICAgICAgICAgIGNvbnN0IGxpbmtUYXJnZXQgPSB0aGlzLnBhcmVudC5yZWFscGF0aFN5bmMoKT8ucmVzb2x2ZShyZWFkKTtcbiAgICAgICAgICAgIGlmIChsaW5rVGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICh0aGlzLiNsaW5rVGFyZ2V0ID0gbGlua1RhcmdldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVyKSB7XG4gICAgICAgICAgICB0aGlzLiNyZWFkbGlua0ZhaWwoZXIuY29kZSk7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuICAgICNyZWFkZGlyU3VjY2VzcyhjaGlsZHJlbikge1xuICAgICAgICAvLyBzdWNjZWVkZWQsIG1hcmsgcmVhZGRpciBjYWxsZWQgYml0XG4gICAgICAgIHRoaXMuI3R5cGUgfD0gUkVBRERJUl9DQUxMRUQ7XG4gICAgICAgIC8vIG1hcmsgYWxsIHJlbWFpbmluZyBwcm92aXNpb25hbCBjaGlsZHJlbiBhcyBFTk9FTlRcbiAgICAgICAgZm9yIChsZXQgcCA9IGNoaWxkcmVuLnByb3Zpc2lvbmFsOyBwIDwgY2hpbGRyZW4ubGVuZ3RoOyBwKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBjaGlsZHJlbltwXTtcbiAgICAgICAgICAgIGlmIChjKVxuICAgICAgICAgICAgICAgIGMuI21hcmtFTk9FTlQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAjbWFya0VOT0VOVCgpIHtcbiAgICAgICAgLy8gbWFyayBhcyBVTktOT1dOIGFuZCBFTk9FTlRcbiAgICAgICAgaWYgKHRoaXMuI3R5cGUgJiBFTk9FTlQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuI3R5cGUgPSAodGhpcy4jdHlwZSB8IEVOT0VOVCkgJiBJRk1UX1VOS05PV047XG4gICAgICAgIHRoaXMuI21hcmtDaGlsZHJlbkVOT0VOVCgpO1xuICAgIH1cbiAgICAjbWFya0NoaWxkcmVuRU5PRU5UKCkge1xuICAgICAgICAvLyBhbGwgY2hpbGRyZW4gYXJlIHByb3Zpc2lvbmFsIGFuZCBkbyBub3QgZXhpc3RcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuKCk7XG4gICAgICAgIGNoaWxkcmVuLnByb3Zpc2lvbmFsID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBwIG9mIGNoaWxkcmVuKSB7XG4gICAgICAgICAgICBwLiNtYXJrRU5PRU5UKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgI21hcmtFTk9SRUFMUEFUSCgpIHtcbiAgICAgICAgdGhpcy4jdHlwZSB8PSBFTk9SRUFMUEFUSDtcbiAgICAgICAgdGhpcy4jbWFya0VOT1RESVIoKTtcbiAgICB9XG4gICAgLy8gc2F2ZSB0aGUgaW5mb3JtYXRpb24gd2hlbiB3ZSBrbm93IHRoZSBlbnRyeSBpcyBub3QgYSBkaXJcbiAgICAjbWFya0VOT1RESVIoKSB7XG4gICAgICAgIC8vIGVudHJ5IGlzIG5vdCBhIGRpcmVjdG9yeSwgc28gYW55IGNoaWxkcmVuIGNhbid0IGV4aXN0LlxuICAgICAgICAvLyB0aGlzICpzaG91bGQqIGJlIGltcG9zc2libGUsIHNpbmNlIGFueSBjaGlsZHJlbiBjcmVhdGVkXG4gICAgICAgIC8vIGFmdGVyIGl0J3MgYmVlbiBtYXJrZWQgRU5PVERJUiBzaG91bGQgYmUgbWFya2VkIEVOT0VOVCxcbiAgICAgICAgLy8gc28gaXQgd29uJ3QgZXZlbiBnZXQgdG8gdGhpcyBwb2ludC5cbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIGlmICh0aGlzLiN0eXBlICYgRU5PVERJUilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgbGV0IHQgPSB0aGlzLiN0eXBlO1xuICAgICAgICAvLyB0aGlzIGNvdWxkIGhhcHBlbiBpZiB3ZSBzdGF0IGEgZGlyLCB0aGVuIGRlbGV0ZSBpdCxcbiAgICAgICAgLy8gdGhlbiB0cnkgdG8gcmVhZCBpdCBvciBvbmUgb2YgaXRzIGNoaWxkcmVuLlxuICAgICAgICBpZiAoKHQgJiBJRk1UKSA9PT0gSUZESVIpXG4gICAgICAgICAgICB0ICY9IElGTVRfVU5LTk9XTjtcbiAgICAgICAgdGhpcy4jdHlwZSA9IHQgfCBFTk9URElSO1xuICAgICAgICB0aGlzLiNtYXJrQ2hpbGRyZW5FTk9FTlQoKTtcbiAgICB9XG4gICAgI3JlYWRkaXJGYWlsKGNvZGUgPSAnJykge1xuICAgICAgICAvLyBtYXJrRU5PVERJUiBhbmQgbWFya0VOT0VOVCBhbHNvIHNldCBwcm92aXNpb25hbD0wXG4gICAgICAgIGlmIChjb2RlID09PSAnRU5PVERJUicgfHwgY29kZSA9PT0gJ0VQRVJNJykge1xuICAgICAgICAgICAgdGhpcy4jbWFya0VOT1RESVIoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICAgICAgdGhpcy4jbWFya0VOT0VOVCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbigpLnByb3Zpc2lvbmFsID0gMDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAjbHN0YXRGYWlsKGNvZGUgPSAnJykge1xuICAgICAgICAvLyBXaW5kb3dzIGp1c3QgcmFpc2VzIEVOT0VOVCBpbiB0aGlzIGNhc2UsIGRpc2FibGUgZm9yIHdpbiBDSVxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgaWYgKGNvZGUgPT09ICdFTk9URElSJykge1xuICAgICAgICAgICAgLy8gYWxyZWFkeSBrbm93IGl0IGhhcyBhIHBhcmVudCBieSB0aGlzIHBvaW50XG4gICAgICAgICAgICBjb25zdCBwID0gdGhpcy5wYXJlbnQ7XG4gICAgICAgICAgICBwLiNtYXJrRU5PVERJUigpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgdGhpcy4jbWFya0VOT0VOVCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgICNyZWFkbGlua0ZhaWwoY29kZSA9ICcnKSB7XG4gICAgICAgIGxldCB0ZXIgPSB0aGlzLiN0eXBlO1xuICAgICAgICB0ZXIgfD0gRU5PUkVBRExJTks7XG4gICAgICAgIGlmIChjb2RlID09PSAnRU5PRU5UJylcbiAgICAgICAgICAgIHRlciB8PSBFTk9FTlQ7XG4gICAgICAgIC8vIHdpbmRvd3MgZ2V0cyBhIHdlaXJkIGVycm9yIHdoZW4geW91IHRyeSB0byByZWFkbGluayBhIGZpbGVcbiAgICAgICAgaWYgKGNvZGUgPT09ICdFSU5WQUwnIHx8IGNvZGUgPT09ICdVTktOT1dOJykge1xuICAgICAgICAgICAgLy8gZXhpc3RzLCBidXQgbm90IGEgc3ltbGluaywgd2UgZG9uJ3Qga25vdyBXSEFUIGl0IGlzLCBzbyByZW1vdmVcbiAgICAgICAgICAgIC8vIGFsbCBJRk1UIGJpdHMuXG4gICAgICAgICAgICB0ZXIgJj0gSUZNVF9VTktOT1dOO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuI3R5cGUgPSB0ZXI7XG4gICAgICAgIC8vIHdpbmRvd3MganVzdCBnZXRzIEVOT0VOVCBpbiB0aGlzIGNhc2UuICBXZSBkbyBjb3ZlciB0aGUgY2FzZSxcbiAgICAgICAgLy8ganVzdCBkaXNhYmxlZCBiZWNhdXNlIGl0J3MgaW1wb3NzaWJsZSBvbiBXaW5kb3dzIENJXG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICBpZiAoY29kZSA9PT0gJ0VOT1RESVInICYmIHRoaXMucGFyZW50KSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudC4jbWFya0VOT1RESVIoKTtcbiAgICAgICAgfVxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgIH1cbiAgICAjcmVhZGRpckFkZENoaWxkKGUsIGMpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLiNyZWFkZGlyTWF5YmVQcm9tb3RlQ2hpbGQoZSwgYykgfHxcbiAgICAgICAgICAgIHRoaXMuI3JlYWRkaXJBZGROZXdDaGlsZChlLCBjKSk7XG4gICAgfVxuICAgICNyZWFkZGlyQWRkTmV3Q2hpbGQoZSwgYykge1xuICAgICAgICAvLyBhbGxvYyBuZXcgZW50cnkgYXQgaGVhZCwgc28gaXQncyBuZXZlciBwcm92aXNpb25hbFxuICAgICAgICBjb25zdCB0eXBlID0gZW50VG9UeXBlKGUpO1xuICAgICAgICBjb25zdCBjaGlsZCA9IHRoaXMubmV3Q2hpbGQoZS5uYW1lLCB0eXBlLCB7IHBhcmVudDogdGhpcyB9KTtcbiAgICAgICAgY29uc3QgaWZtdCA9IGNoaWxkLiN0eXBlICYgSUZNVDtcbiAgICAgICAgaWYgKGlmbXQgIT09IElGRElSICYmIGlmbXQgIT09IElGTE5LICYmIGlmbXQgIT09IFVOS05PV04pIHtcbiAgICAgICAgICAgIGNoaWxkLiN0eXBlIHw9IEVOT1RESVI7XG4gICAgICAgIH1cbiAgICAgICAgYy51bnNoaWZ0KGNoaWxkKTtcbiAgICAgICAgYy5wcm92aXNpb25hbCsrO1xuICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgfVxuICAgICNyZWFkZGlyTWF5YmVQcm9tb3RlQ2hpbGQoZSwgYykge1xuICAgICAgICBmb3IgKGxldCBwID0gYy5wcm92aXNpb25hbDsgcCA8IGMubGVuZ3RoOyBwKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHBjaGlsZCA9IGNbcF07XG4gICAgICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5ub2Nhc2UgPyBub3JtYWxpemVOb2Nhc2UoZS5uYW1lKSA6IG5vcm1hbGl6ZShlLm5hbWUpO1xuICAgICAgICAgICAgaWYgKG5hbWUgIT09IHBjaGlsZC4jbWF0Y2hOYW1lKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy4jcmVhZGRpclByb21vdGVDaGlsZChlLCBwY2hpbGQsIHAsIGMpO1xuICAgICAgICB9XG4gICAgfVxuICAgICNyZWFkZGlyUHJvbW90ZUNoaWxkKGUsIHAsIGluZGV4LCBjKSB7XG4gICAgICAgIGNvbnN0IHYgPSBwLm5hbWU7XG4gICAgICAgIC8vIHJldGFpbiBhbnkgb3RoZXIgZmxhZ3MsIGJ1dCBzZXQgaWZtdCBmcm9tIGRpcmVudFxuICAgICAgICBwLiN0eXBlID0gKHAuI3R5cGUgJiBJRk1UX1VOS05PV04pIHwgZW50VG9UeXBlKGUpO1xuICAgICAgICAvLyBjYXNlIHNlbnNpdGl2aXR5IGZpeGluZyB3aGVuIHdlIGxlYXJuIHRoZSB0cnVlIG5hbWUuXG4gICAgICAgIGlmICh2ICE9PSBlLm5hbWUpXG4gICAgICAgICAgICBwLm5hbWUgPSBlLm5hbWU7XG4gICAgICAgIC8vIGp1c3QgYWR2YW5jZSBwcm92aXNpb25hbCBpbmRleCAocG90ZW50aWFsbHkgb2ZmIHRoZSBsaXN0KSxcbiAgICAgICAgLy8gb3RoZXJ3aXNlIHdlIGhhdmUgdG8gc3BsaWNlL3BvcCBpdCBvdXQgYW5kIHJlLWluc2VydCBhdCBoZWFkXG4gICAgICAgIGlmIChpbmRleCAhPT0gYy5wcm92aXNpb25hbCkge1xuICAgICAgICAgICAgaWYgKGluZGV4ID09PSBjLmxlbmd0aCAtIDEpXG4gICAgICAgICAgICAgICAgYy5wb3AoKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBjLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICBjLnVuc2hpZnQocCk7XG4gICAgICAgIH1cbiAgICAgICAgYy5wcm92aXNpb25hbCsrO1xuICAgICAgICByZXR1cm4gcDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2FsbCBsc3RhdCgpIG9uIHRoaXMgUGF0aCwgYW5kIHVwZGF0ZSBhbGwga25vd24gaW5mb3JtYXRpb24gdGhhdCBjYW4gYmVcbiAgICAgKiBkZXRlcm1pbmVkLlxuICAgICAqXG4gICAgICogTm90ZSB0aGF0IHVubGlrZSBgZnMubHN0YXQoKWAsIHRoZSByZXR1cm5lZCB2YWx1ZSBkb2VzIG5vdCBjb250YWluIHNvbWVcbiAgICAgKiBpbmZvcm1hdGlvbiwgc3VjaCBhcyBgbW9kZWAsIGBkZXZgLCBgbmxpbmtgLCBhbmQgYGlub2AuICBJZiB0aGF0XG4gICAgICogaW5mb3JtYXRpb24gaXMgcmVxdWlyZWQsIHlvdSB3aWxsIG5lZWQgdG8gY2FsbCBgZnMubHN0YXRgIHlvdXJzZWxmLlxuICAgICAqXG4gICAgICogSWYgdGhlIFBhdGggcmVmZXJzIHRvIGEgbm9uZXhpc3RlbnQgZmlsZSwgb3IgaWYgdGhlIGxzdGF0IGNhbGwgZmFpbHMgZm9yXG4gICAgICogYW55IHJlYXNvbiwgYHVuZGVmaW5lZGAgaXMgcmV0dXJuZWQuICBPdGhlcndpc2UgdGhlIHVwZGF0ZWQgUGF0aCBvYmplY3QgaXNcbiAgICAgKiByZXR1cm5lZC5cbiAgICAgKlxuICAgICAqIFJlc3VsdHMgYXJlIGNhY2hlZCwgYW5kIHRodXMgbWF5IGJlIG91dCBvZiBkYXRlIGlmIHRoZSBmaWxlc3lzdGVtIGlzXG4gICAgICogbXV0YXRlZC5cbiAgICAgKi9cbiAgICBhc3luYyBsc3RhdCgpIHtcbiAgICAgICAgaWYgKCh0aGlzLiN0eXBlICYgRU5PRU5UKSA9PT0gMCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB0aGlzLiNhcHBseVN0YXQoYXdhaXQgdGhpcy4jZnMucHJvbWlzZXMubHN0YXQodGhpcy5mdWxscGF0aCgpKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiNsc3RhdEZhaWwoZXIuY29kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogc3luY2hyb25vdXMge0BsaW5rIFBhdGhCYXNlLmxzdGF0fVxuICAgICAqL1xuICAgIGxzdGF0U3luYygpIHtcbiAgICAgICAgaWYgKCh0aGlzLiN0eXBlICYgRU5PRU5UKSA9PT0gMCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB0aGlzLiNhcHBseVN0YXQodGhpcy4jZnMubHN0YXRTeW5jKHRoaXMuZnVsbHBhdGgoKSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jbHN0YXRGYWlsKGVyLmNvZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgICNhcHBseVN0YXQoc3QpIHtcbiAgICAgICAgY29uc3QgeyBhdGltZSwgYXRpbWVNcywgYmlydGh0aW1lLCBiaXJ0aHRpbWVNcywgYmxrc2l6ZSwgYmxvY2tzLCBjdGltZSwgY3RpbWVNcywgZGV2LCBnaWQsIGlubywgbW9kZSwgbXRpbWUsIG10aW1lTXMsIG5saW5rLCByZGV2LCBzaXplLCB1aWQsIH0gPSBzdDtcbiAgICAgICAgdGhpcy4jYXRpbWUgPSBhdGltZTtcbiAgICAgICAgdGhpcy4jYXRpbWVNcyA9IGF0aW1lTXM7XG4gICAgICAgIHRoaXMuI2JpcnRodGltZSA9IGJpcnRodGltZTtcbiAgICAgICAgdGhpcy4jYmlydGh0aW1lTXMgPSBiaXJ0aHRpbWVNcztcbiAgICAgICAgdGhpcy4jYmxrc2l6ZSA9IGJsa3NpemU7XG4gICAgICAgIHRoaXMuI2Jsb2NrcyA9IGJsb2NrcztcbiAgICAgICAgdGhpcy4jY3RpbWUgPSBjdGltZTtcbiAgICAgICAgdGhpcy4jY3RpbWVNcyA9IGN0aW1lTXM7XG4gICAgICAgIHRoaXMuI2RldiA9IGRldjtcbiAgICAgICAgdGhpcy4jZ2lkID0gZ2lkO1xuICAgICAgICB0aGlzLiNpbm8gPSBpbm87XG4gICAgICAgIHRoaXMuI21vZGUgPSBtb2RlO1xuICAgICAgICB0aGlzLiNtdGltZSA9IG10aW1lO1xuICAgICAgICB0aGlzLiNtdGltZU1zID0gbXRpbWVNcztcbiAgICAgICAgdGhpcy4jbmxpbmsgPSBubGluaztcbiAgICAgICAgdGhpcy4jcmRldiA9IHJkZXY7XG4gICAgICAgIHRoaXMuI3NpemUgPSBzaXplO1xuICAgICAgICB0aGlzLiN1aWQgPSB1aWQ7XG4gICAgICAgIGNvbnN0IGlmbXQgPSBlbnRUb1R5cGUoc3QpO1xuICAgICAgICAvLyByZXRhaW4gYW55IG90aGVyIGZsYWdzLCBidXQgc2V0IHRoZSBpZm10XG4gICAgICAgIHRoaXMuI3R5cGUgPSAodGhpcy4jdHlwZSAmIElGTVRfVU5LTk9XTikgfCBpZm10IHwgTFNUQVRfQ0FMTEVEO1xuICAgICAgICBpZiAoaWZtdCAhPT0gVU5LTk9XTiAmJiBpZm10ICE9PSBJRkRJUiAmJiBpZm10ICE9PSBJRkxOSykge1xuICAgICAgICAgICAgdGhpcy4jdHlwZSB8PSBFTk9URElSO1xuICAgICAgICB9XG4gICAgfVxuICAgICNvblJlYWRkaXJDQiA9IFtdO1xuICAgICNyZWFkZGlyQ0JJbkZsaWdodCA9IGZhbHNlO1xuICAgICNjYWxsT25SZWFkZGlyQ0IoY2hpbGRyZW4pIHtcbiAgICAgICAgdGhpcy4jcmVhZGRpckNCSW5GbGlnaHQgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgY2JzID0gdGhpcy4jb25SZWFkZGlyQ0Iuc2xpY2UoKTtcbiAgICAgICAgdGhpcy4jb25SZWFkZGlyQ0IubGVuZ3RoID0gMDtcbiAgICAgICAgY2JzLmZvckVhY2goY2IgPT4gY2IobnVsbCwgY2hpbGRyZW4pKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3RhbmRhcmQgbm9kZS1zdHlsZSBjYWxsYmFjayBpbnRlcmZhY2UgdG8gZ2V0IGxpc3Qgb2YgZGlyZWN0b3J5IGVudHJpZXMuXG4gICAgICpcbiAgICAgKiBJZiB0aGUgUGF0aCBjYW5ub3Qgb3IgZG9lcyBub3QgY29udGFpbiBhbnkgY2hpbGRyZW4sIHRoZW4gYW4gZW1wdHkgYXJyYXlcbiAgICAgKiBpcyByZXR1cm5lZC5cbiAgICAgKlxuICAgICAqIFJlc3VsdHMgYXJlIGNhY2hlZCwgYW5kIHRodXMgbWF5IGJlIG91dCBvZiBkYXRlIGlmIHRoZSBmaWxlc3lzdGVtIGlzXG4gICAgICogbXV0YXRlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjYiBUaGUgY2FsbGJhY2sgY2FsbGVkIHdpdGggKGVyLCBlbnRyaWVzKS4gIE5vdGUgdGhhdCB0aGUgYGVyYFxuICAgICAqIHBhcmFtIGlzIHNvbWV3aGF0IGV4dHJhbmVvdXMsIGFzIGFsbCByZWFkZGlyKCkgZXJyb3JzIGFyZSBoYW5kbGVkIGFuZFxuICAgICAqIHNpbXBseSByZXN1bHQgaW4gYW4gZW1wdHkgc2V0IG9mIGVudHJpZXMgYmVpbmcgcmV0dXJuZWQuXG4gICAgICogQHBhcmFtIGFsbG93WmFsZ28gQm9vbGVhbiBpbmRpY2F0aW5nIHRoYXQgaW1tZWRpYXRlbHkga25vd24gcmVzdWx0cyBzaG91bGRcbiAgICAgKiAqbm90KiBiZSBkZWZlcnJlZCB3aXRoIGBxdWV1ZU1pY3JvdGFza2AuIERlZmF1bHRzIHRvIGBmYWxzZWAuIFJlbGVhc2VcbiAgICAgKiB6YWxnbyBhdCB5b3VyIHBlcmlsLCB0aGUgZGFyayBwb255IGxvcmQgaXMgZGV2aW91cyBhbmQgdW5mb3JnaXZpbmcuXG4gICAgICovXG4gICAgcmVhZGRpckNCKGNiLCBhbGxvd1phbGdvID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNhblJlYWRkaXIoKSkge1xuICAgICAgICAgICAgaWYgKGFsbG93WmFsZ28pXG4gICAgICAgICAgICAgICAgY2IobnVsbCwgW10pO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGNiKG51bGwsIFtdKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuKCk7XG4gICAgICAgIGlmICh0aGlzLmNhbGxlZFJlYWRkaXIoKSkge1xuICAgICAgICAgICAgY29uc3QgYyA9IGNoaWxkcmVuLnNsaWNlKDAsIGNoaWxkcmVuLnByb3Zpc2lvbmFsKTtcbiAgICAgICAgICAgIGlmIChhbGxvd1phbGdvKVxuICAgICAgICAgICAgICAgIGNiKG51bGwsIGMpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGNiKG51bGwsIGMpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHphbGdvIGF0IHRoaXMgcG9pbnQuXG4gICAgICAgIHRoaXMuI29uUmVhZGRpckNCLnB1c2goY2IpO1xuICAgICAgICBpZiAodGhpcy4jcmVhZGRpckNCSW5GbGlnaHQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiNyZWFkZGlyQ0JJbkZsaWdodCA9IHRydWU7XG4gICAgICAgIC8vIGVsc2UgcmVhZCB0aGUgZGlyZWN0b3J5LCBmaWxsIHVwIGNoaWxkcmVuXG4gICAgICAgIC8vIGRlLXByb3Zpc2lvbmFsaXplIGFueSBwcm92aXNpb25hbCBjaGlsZHJlbi5cbiAgICAgICAgY29uc3QgZnVsbHBhdGggPSB0aGlzLmZ1bGxwYXRoKCk7XG4gICAgICAgIHRoaXMuI2ZzLnJlYWRkaXIoZnVsbHBhdGgsIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9LCAoZXIsIGVudHJpZXMpID0+IHtcbiAgICAgICAgICAgIGlmIChlcikge1xuICAgICAgICAgICAgICAgIHRoaXMuI3JlYWRkaXJGYWlsKGVyLmNvZGUpO1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuLnByb3Zpc2lvbmFsID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGlmIHdlIGRpZG4ndCBnZXQgYW4gZXJyb3IsIHdlIGFsd2F5cyBnZXQgZW50cmllcy5cbiAgICAgICAgICAgICAgICAvL0B0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGUgb2YgZW50cmllcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiNyZWFkZGlyQWRkQ2hpbGQoZSwgY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLiNyZWFkZGlyU3VjY2VzcyhjaGlsZHJlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLiNjYWxsT25SZWFkZGlyQ0IoY2hpbGRyZW4uc2xpY2UoMCwgY2hpbGRyZW4ucHJvdmlzaW9uYWwpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgICNhc3luY1JlYWRkaXJJbkZsaWdodDtcbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYW4gYXJyYXkgb2Yga25vd24gY2hpbGQgZW50cmllcy5cbiAgICAgKlxuICAgICAqIElmIHRoZSBQYXRoIGNhbm5vdCBvciBkb2VzIG5vdCBjb250YWluIGFueSBjaGlsZHJlbiwgdGhlbiBhbiBlbXB0eSBhcnJheVxuICAgICAqIGlzIHJldHVybmVkLlxuICAgICAqXG4gICAgICogUmVzdWx0cyBhcmUgY2FjaGVkLCBhbmQgdGh1cyBtYXkgYmUgb3V0IG9mIGRhdGUgaWYgdGhlIGZpbGVzeXN0ZW0gaXNcbiAgICAgKiBtdXRhdGVkLlxuICAgICAqL1xuICAgIGFzeW5jIHJlYWRkaXIoKSB7XG4gICAgICAgIGlmICghdGhpcy5jYW5SZWFkZGlyKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW4oKTtcbiAgICAgICAgaWYgKHRoaXMuY2FsbGVkUmVhZGRpcigpKSB7XG4gICAgICAgICAgICByZXR1cm4gY2hpbGRyZW4uc2xpY2UoMCwgY2hpbGRyZW4ucHJvdmlzaW9uYWwpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGVsc2UgcmVhZCB0aGUgZGlyZWN0b3J5LCBmaWxsIHVwIGNoaWxkcmVuXG4gICAgICAgIC8vIGRlLXByb3Zpc2lvbmFsaXplIGFueSBwcm92aXNpb25hbCBjaGlsZHJlbi5cbiAgICAgICAgY29uc3QgZnVsbHBhdGggPSB0aGlzLmZ1bGxwYXRoKCk7XG4gICAgICAgIGlmICh0aGlzLiNhc3luY1JlYWRkaXJJbkZsaWdodCkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy4jYXN5bmNSZWFkZGlySW5GbGlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgICAgIGxldCByZXNvbHZlID0gKCkgPT4geyB9O1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgICAgIHRoaXMuI2FzeW5jUmVhZGRpckluRmxpZ2h0ID0gbmV3IFByb21pc2UocmVzID0+IChyZXNvbHZlID0gcmVzKSk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZSBvZiBhd2FpdCB0aGlzLiNmcy5wcm9taXNlcy5yZWFkZGlyKGZ1bGxwYXRoLCB7XG4gICAgICAgICAgICAgICAgICAgIHdpdGhGaWxlVHlwZXM6IHRydWUsXG4gICAgICAgICAgICAgICAgfSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jcmVhZGRpckFkZENoaWxkKGUsIGNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy4jcmVhZGRpclN1Y2Nlc3MoY2hpbGRyZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jcmVhZGRpckZhaWwoZXIuY29kZSk7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW4ucHJvdmlzaW9uYWwgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy4jYXN5bmNSZWFkZGlySW5GbGlnaHQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuLnNsaWNlKDAsIGNoaWxkcmVuLnByb3Zpc2lvbmFsKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogc3luY2hyb25vdXMge0BsaW5rIFBhdGhCYXNlLnJlYWRkaXJ9XG4gICAgICovXG4gICAgcmVhZGRpclN5bmMoKSB7XG4gICAgICAgIGlmICghdGhpcy5jYW5SZWFkZGlyKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW4oKTtcbiAgICAgICAgaWYgKHRoaXMuY2FsbGVkUmVhZGRpcigpKSB7XG4gICAgICAgICAgICByZXR1cm4gY2hpbGRyZW4uc2xpY2UoMCwgY2hpbGRyZW4ucHJvdmlzaW9uYWwpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGVsc2UgcmVhZCB0aGUgZGlyZWN0b3J5LCBmaWxsIHVwIGNoaWxkcmVuXG4gICAgICAgIC8vIGRlLXByb3Zpc2lvbmFsaXplIGFueSBwcm92aXNpb25hbCBjaGlsZHJlbi5cbiAgICAgICAgY29uc3QgZnVsbHBhdGggPSB0aGlzLmZ1bGxwYXRoKCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGUgb2YgdGhpcy4jZnMucmVhZGRpclN5bmMoZnVsbHBhdGgsIHtcbiAgICAgICAgICAgICAgICB3aXRoRmlsZVR5cGVzOiB0cnVlLFxuICAgICAgICAgICAgfSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiNyZWFkZGlyQWRkQ2hpbGQoZSwgY2hpbGRyZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy4jcmVhZGRpclN1Y2Nlc3MoY2hpbGRyZW4pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcikge1xuICAgICAgICAgICAgdGhpcy4jcmVhZGRpckZhaWwoZXIuY29kZSk7XG4gICAgICAgICAgICBjaGlsZHJlbi5wcm92aXNpb25hbCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuLnNsaWNlKDAsIGNoaWxkcmVuLnByb3Zpc2lvbmFsKTtcbiAgICB9XG4gICAgY2FuUmVhZGRpcigpIHtcbiAgICAgICAgaWYgKHRoaXMuI3R5cGUgJiBFTk9DSElMRClcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgY29uc3QgaWZtdCA9IElGTVQgJiB0aGlzLiN0eXBlO1xuICAgICAgICAvLyB3ZSBhbHdheXMgc2V0IEVOT1RESVIgd2hlbiBzZXR0aW5nIElGTVQsIHNvIHNob3VsZCBiZSBpbXBvc3NpYmxlXG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICBpZiAoIShpZm10ID09PSBVTktOT1dOIHx8IGlmbXQgPT09IElGRElSIHx8IGlmbXQgPT09IElGTE5LKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBzaG91bGRXYWxrKGRpcnMsIHdhbGtGaWx0ZXIpIHtcbiAgICAgICAgcmV0dXJuICgodGhpcy4jdHlwZSAmIElGRElSKSA9PT0gSUZESVIgJiZcbiAgICAgICAgICAgICEodGhpcy4jdHlwZSAmIEVOT0NISUxEKSAmJlxuICAgICAgICAgICAgIWRpcnMuaGFzKHRoaXMpICYmXG4gICAgICAgICAgICAoIXdhbGtGaWx0ZXIgfHwgd2Fsa0ZpbHRlcih0aGlzKSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIFBhdGggb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gcGF0aCBhcyByZXNvbHZlZFxuICAgICAqIGJ5IHJlYWxwYXRoKDMpLlxuICAgICAqXG4gICAgICogSWYgdGhlIHJlYWxwYXRoIGNhbGwgZmFpbHMgZm9yIGFueSByZWFzb24sIGB1bmRlZmluZWRgIGlzIHJldHVybmVkLlxuICAgICAqXG4gICAgICogUmVzdWx0IGlzIGNhY2hlZCwgYW5kIHRodXMgbWF5IGJlIG91dGRhdGVkIGlmIHRoZSBmaWxlc3lzdGVtIGlzIG11dGF0ZWQuXG4gICAgICogT24gc3VjY2VzcywgcmV0dXJucyBhIFBhdGggb2JqZWN0LlxuICAgICAqL1xuICAgIGFzeW5jIHJlYWxwYXRoKCkge1xuICAgICAgICBpZiAodGhpcy4jcmVhbHBhdGgpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy4jcmVhbHBhdGg7XG4gICAgICAgIGlmICgoRU5PUkVBTFBBVEggfCBFTk9SRUFETElOSyB8IEVOT0VOVCkgJiB0aGlzLiN0eXBlKVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJwID0gYXdhaXQgdGhpcy4jZnMucHJvbWlzZXMucmVhbHBhdGgodGhpcy5mdWxscGF0aCgpKTtcbiAgICAgICAgICAgIHJldHVybiAodGhpcy4jcmVhbHBhdGggPSB0aGlzLnJlc29sdmUocnApKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoXykge1xuICAgICAgICAgICAgdGhpcy4jbWFya0VOT1JFQUxQQVRIKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogU3luY2hyb25vdXMge0BsaW5rIHJlYWxwYXRofVxuICAgICAqL1xuICAgIHJlYWxwYXRoU3luYygpIHtcbiAgICAgICAgaWYgKHRoaXMuI3JlYWxwYXRoKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuI3JlYWxwYXRoO1xuICAgICAgICBpZiAoKEVOT1JFQUxQQVRIIHwgRU5PUkVBRExJTksgfCBFTk9FTlQpICYgdGhpcy4jdHlwZSlcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBycCA9IHRoaXMuI2ZzLnJlYWxwYXRoU3luYyh0aGlzLmZ1bGxwYXRoKCkpO1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLiNyZWFscGF0aCA9IHRoaXMucmVzb2x2ZShycCkpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChfKSB7XG4gICAgICAgICAgICB0aGlzLiNtYXJrRU5PUkVBTFBBVEgoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBtZXRob2QgdG8gbWFyayB0aGlzIFBhdGggb2JqZWN0IGFzIHRoZSBzY3VycnkgY3dkLFxuICAgICAqIGNhbGxlZCBieSB7QGxpbmsgUGF0aFNjdXJyeSNjaGRpcn1cbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIFtzZXRBc0N3ZF0ob2xkQ3dkKSB7XG4gICAgICAgIGlmIChvbGRDd2QgPT09IHRoaXMpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIG9sZEN3ZC5pc0NXRCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzQ1dEID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgY2hhbmdlZCA9IG5ldyBTZXQoW10pO1xuICAgICAgICBsZXQgcnAgPSBbXTtcbiAgICAgICAgbGV0IHAgPSB0aGlzO1xuICAgICAgICB3aGlsZSAocCAmJiBwLnBhcmVudCkge1xuICAgICAgICAgICAgY2hhbmdlZC5hZGQocCk7XG4gICAgICAgICAgICBwLiNyZWxhdGl2ZSA9IHJwLmpvaW4odGhpcy5zZXApO1xuICAgICAgICAgICAgcC4jcmVsYXRpdmVQb3NpeCA9IHJwLmpvaW4oJy8nKTtcbiAgICAgICAgICAgIHAgPSBwLnBhcmVudDtcbiAgICAgICAgICAgIHJwLnB1c2goJy4uJyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbm93IHVuLW1lbW9pemUgcGFyZW50cyBvZiBvbGQgY3dkXG4gICAgICAgIHAgPSBvbGRDd2Q7XG4gICAgICAgIHdoaWxlIChwICYmIHAucGFyZW50ICYmICFjaGFuZ2VkLmhhcyhwKSkge1xuICAgICAgICAgICAgcC4jcmVsYXRpdmUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBwLiNyZWxhdGl2ZVBvc2l4ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgcCA9IHAucGFyZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5QYXRoQmFzZSA9IFBhdGhCYXNlO1xuLyoqXG4gKiBQYXRoIGNsYXNzIHVzZWQgb24gd2luMzIgc3lzdGVtc1xuICpcbiAqIFVzZXMgYCdcXFxcJ2AgYXMgdGhlIHBhdGggc2VwYXJhdG9yIGZvciByZXR1cm5lZCBwYXRocywgZWl0aGVyIGAnXFxcXCdgIG9yIGAnLydgXG4gKiBhcyB0aGUgcGF0aCBzZXBhcmF0b3IgZm9yIHBhcnNpbmcgcGF0aHMuXG4gKi9cbmNsYXNzIFBhdGhXaW4zMiBleHRlbmRzIFBhdGhCYXNlIHtcbiAgICAvKipcbiAgICAgKiBTZXBhcmF0b3IgZm9yIGdlbmVyYXRpbmcgcGF0aCBzdHJpbmdzLlxuICAgICAqL1xuICAgIHNlcCA9ICdcXFxcJztcbiAgICAvKipcbiAgICAgKiBTZXBhcmF0b3IgZm9yIHBhcnNpbmcgcGF0aCBzdHJpbmdzLlxuICAgICAqL1xuICAgIHNwbGl0U2VwID0gZWl0aGVyU2VwO1xuICAgIC8qKlxuICAgICAqIERvIG5vdCBjcmVhdGUgbmV3IFBhdGggb2JqZWN0cyBkaXJlY3RseS4gIFRoZXkgc2hvdWxkIGFsd2F5cyBiZSBhY2Nlc3NlZFxuICAgICAqIHZpYSB0aGUgUGF0aFNjdXJyeSBjbGFzcyBvciBvdGhlciBtZXRob2RzIG9uIHRoZSBQYXRoIGNsYXNzLlxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgY29uc3RydWN0b3IobmFtZSwgdHlwZSA9IFVOS05PV04sIHJvb3QsIHJvb3RzLCBub2Nhc2UsIGNoaWxkcmVuLCBvcHRzKSB7XG4gICAgICAgIHN1cGVyKG5hbWUsIHR5cGUsIHJvb3QsIHJvb3RzLCBub2Nhc2UsIGNoaWxkcmVuLCBvcHRzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgbmV3Q2hpbGQobmFtZSwgdHlwZSA9IFVOS05PV04sIG9wdHMgPSB7fSkge1xuICAgICAgICByZXR1cm4gbmV3IFBhdGhXaW4zMihuYW1lLCB0eXBlLCB0aGlzLnJvb3QsIHRoaXMucm9vdHMsIHRoaXMubm9jYXNlLCB0aGlzLmNoaWxkcmVuQ2FjaGUoKSwgb3B0cyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIGdldFJvb3RTdHJpbmcocGF0aCkge1xuICAgICAgICByZXR1cm4gbm9kZV9wYXRoXzEud2luMzIucGFyc2UocGF0aCkucm9vdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgZ2V0Um9vdChyb290UGF0aCkge1xuICAgICAgICByb290UGF0aCA9IHVuY1RvRHJpdmUocm9vdFBhdGgudG9VcHBlckNhc2UoKSk7XG4gICAgICAgIGlmIChyb290UGF0aCA9PT0gdGhpcy5yb290Lm5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJvb3Q7XG4gICAgICAgIH1cbiAgICAgICAgLy8gb2ssIG5vdCB0aGF0IG9uZSwgY2hlY2sgaWYgaXQgbWF0Y2hlcyBhbm90aGVyIHdlIGtub3cgYWJvdXRcbiAgICAgICAgZm9yIChjb25zdCBbY29tcGFyZSwgcm9vdF0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5yb290cykpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNhbWVSb290KHJvb3RQYXRoLCBjb21wYXJlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAodGhpcy5yb290c1tyb290UGF0aF0gPSByb290KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBvdGhlcndpc2UsIGhhdmUgdG8gY3JlYXRlIGEgbmV3IG9uZS5cbiAgICAgICAgcmV0dXJuICh0aGlzLnJvb3RzW3Jvb3RQYXRoXSA9IG5ldyBQYXRoU2N1cnJ5V2luMzIocm9vdFBhdGgsIHRoaXMpLnJvb3QpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBzYW1lUm9vdChyb290UGF0aCwgY29tcGFyZSA9IHRoaXMucm9vdC5uYW1lKSB7XG4gICAgICAgIC8vIHdpbmRvd3MgY2FuIChyYXJlbHkpIGhhdmUgY2FzZS1zZW5zaXRpdmUgZmlsZXN5c3RlbSwgYnV0XG4gICAgICAgIC8vIFVOQyBhbmQgZHJpdmUgbGV0dGVycyBhcmUgYWx3YXlzIGNhc2UtaW5zZW5zaXRpdmUsIGFuZCBjYW5vbmljYWxseVxuICAgICAgICAvLyByZXByZXNlbnRlZCB1cHBlcmNhc2UuXG4gICAgICAgIHJvb3RQYXRoID0gcm9vdFBhdGhcbiAgICAgICAgICAgIC50b1VwcGVyQ2FzZSgpXG4gICAgICAgICAgICAucmVwbGFjZSgvXFwvL2csICdcXFxcJylcbiAgICAgICAgICAgIC5yZXBsYWNlKHVuY0RyaXZlUmVnZXhwLCAnJDFcXFxcJyk7XG4gICAgICAgIHJldHVybiByb290UGF0aCA9PT0gY29tcGFyZTtcbiAgICB9XG59XG5leHBvcnRzLlBhdGhXaW4zMiA9IFBhdGhXaW4zMjtcbi8qKlxuICogUGF0aCBjbGFzcyB1c2VkIG9uIGFsbCBwb3NpeCBzeXN0ZW1zLlxuICpcbiAqIFVzZXMgYCcvJ2AgYXMgdGhlIHBhdGggc2VwYXJhdG9yLlxuICovXG5jbGFzcyBQYXRoUG9zaXggZXh0ZW5kcyBQYXRoQmFzZSB7XG4gICAgLyoqXG4gICAgICogc2VwYXJhdG9yIGZvciBwYXJzaW5nIHBhdGggc3RyaW5nc1xuICAgICAqL1xuICAgIHNwbGl0U2VwID0gJy8nO1xuICAgIC8qKlxuICAgICAqIHNlcGFyYXRvciBmb3IgZ2VuZXJhdGluZyBwYXRoIHN0cmluZ3NcbiAgICAgKi9cbiAgICBzZXAgPSAnLyc7XG4gICAgLyoqXG4gICAgICogRG8gbm90IGNyZWF0ZSBuZXcgUGF0aCBvYmplY3RzIGRpcmVjdGx5LiAgVGhleSBzaG91bGQgYWx3YXlzIGJlIGFjY2Vzc2VkXG4gICAgICogdmlhIHRoZSBQYXRoU2N1cnJ5IGNsYXNzIG9yIG90aGVyIG1ldGhvZHMgb24gdGhlIFBhdGggY2xhc3MuXG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihuYW1lLCB0eXBlID0gVU5LTk9XTiwgcm9vdCwgcm9vdHMsIG5vY2FzZSwgY2hpbGRyZW4sIG9wdHMpIHtcbiAgICAgICAgc3VwZXIobmFtZSwgdHlwZSwgcm9vdCwgcm9vdHMsIG5vY2FzZSwgY2hpbGRyZW4sIG9wdHMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBnZXRSb290U3RyaW5nKHBhdGgpIHtcbiAgICAgICAgcmV0dXJuIHBhdGguc3RhcnRzV2l0aCgnLycpID8gJy8nIDogJyc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIGdldFJvb3QoX3Jvb3RQYXRoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJvb3Q7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIG5ld0NoaWxkKG5hbWUsIHR5cGUgPSBVTktOT1dOLCBvcHRzID0ge30pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQYXRoUG9zaXgobmFtZSwgdHlwZSwgdGhpcy5yb290LCB0aGlzLnJvb3RzLCB0aGlzLm5vY2FzZSwgdGhpcy5jaGlsZHJlbkNhY2hlKCksIG9wdHMpO1xuICAgIH1cbn1cbmV4cG9ydHMuUGF0aFBvc2l4ID0gUGF0aFBvc2l4O1xuLyoqXG4gKiBUaGUgYmFzZSBjbGFzcyBmb3IgYWxsIFBhdGhTY3VycnkgY2xhc3NlcywgcHJvdmlkaW5nIHRoZSBpbnRlcmZhY2UgZm9yIHBhdGhcbiAqIHJlc29sdXRpb24gYW5kIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucy5cbiAqXG4gKiBUeXBpY2FsbHksIHlvdSBzaG91bGQgKm5vdCogaW5zdGFudGlhdGUgdGhpcyBjbGFzcyBkaXJlY3RseSwgYnV0IHJhdGhlciBvbmVcbiAqIG9mIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBjbGFzc2VzLCBvciB0aGUgZXhwb3J0ZWQge0BsaW5rIFBhdGhTY3Vycnl9IHdoaWNoXG4gKiBkZWZhdWx0cyB0byB0aGUgY3VycmVudCBwbGF0Zm9ybS5cbiAqL1xuY2xhc3MgUGF0aFNjdXJyeUJhc2Uge1xuICAgIC8qKlxuICAgICAqIFRoZSByb290IFBhdGggZW50cnkgZm9yIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IG9mIHRoaXMgU2N1cnJ5XG4gICAgICovXG4gICAgcm9vdDtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyaW5nIHBhdGggZm9yIHRoZSByb290IG9mIHRoaXMgU2N1cnJ5J3MgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeVxuICAgICAqL1xuICAgIHJvb3RQYXRoO1xuICAgIC8qKlxuICAgICAqIEEgY29sbGVjdGlvbiBvZiBhbGwgcm9vdHMgZW5jb3VudGVyZWQsIHJlZmVyZW5jZWQgYnkgcm9vdFBhdGhcbiAgICAgKi9cbiAgICByb290cztcbiAgICAvKipcbiAgICAgKiBUaGUgUGF0aCBlbnRyeSBjb3JyZXNwb25kaW5nIHRvIHRoaXMgUGF0aFNjdXJyeSdzIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuXG4gICAgICovXG4gICAgY3dkO1xuICAgICNyZXNvbHZlQ2FjaGU7XG4gICAgI3Jlc29sdmVQb3NpeENhY2hlO1xuICAgICNjaGlsZHJlbjtcbiAgICAvKipcbiAgICAgKiBQZXJmb3JtIHBhdGggY29tcGFyaXNvbnMgY2FzZS1pbnNlbnNpdGl2ZWx5LlxuICAgICAqXG4gICAgICogRGVmYXVsdHMgdHJ1ZSBvbiBEYXJ3aW4gYW5kIFdpbmRvd3Mgc3lzdGVtcywgZmFsc2UgZWxzZXdoZXJlLlxuICAgICAqL1xuICAgIG5vY2FzZTtcbiAgICAjZnM7XG4gICAgLyoqXG4gICAgICogVGhpcyBjbGFzcyBzaG91bGQgbm90IGJlIGluc3RhbnRpYXRlZCBkaXJlY3RseS5cbiAgICAgKlxuICAgICAqIFVzZSBQYXRoU2N1cnJ5V2luMzIsIFBhdGhTY3VycnlEYXJ3aW4sIFBhdGhTY3VycnlQb3NpeCwgb3IgUGF0aFNjdXJyeVxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoY3dkID0gcHJvY2Vzcy5jd2QoKSwgcGF0aEltcGwsIHNlcCwgeyBub2Nhc2UsIGNoaWxkcmVuQ2FjaGVTaXplID0gMTYgKiAxMDI0LCBmcyA9IGRlZmF1bHRGUywgfSA9IHt9KSB7XG4gICAgICAgIHRoaXMuI2ZzID0gZnNGcm9tT3B0aW9uKGZzKTtcbiAgICAgICAgaWYgKGN3ZCBpbnN0YW5jZW9mIFVSTCB8fCBjd2Quc3RhcnRzV2l0aCgnZmlsZTovLycpKSB7XG4gICAgICAgICAgICBjd2QgPSAoMCwgbm9kZV91cmxfMS5maWxlVVJMVG9QYXRoKShjd2QpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHJlc29sdmUgYW5kIHNwbGl0IHJvb3QsIGFuZCB0aGVuIGFkZCB0byB0aGUgc3RvcmUuXG4gICAgICAgIC8vIHRoaXMgaXMgdGhlIG9ubHkgdGltZSB3ZSBjYWxsIHBhdGgucmVzb2x2ZSgpXG4gICAgICAgIGNvbnN0IGN3ZFBhdGggPSBwYXRoSW1wbC5yZXNvbHZlKGN3ZCk7XG4gICAgICAgIHRoaXMucm9vdHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICB0aGlzLnJvb3RQYXRoID0gdGhpcy5wYXJzZVJvb3RQYXRoKGN3ZFBhdGgpO1xuICAgICAgICB0aGlzLiNyZXNvbHZlQ2FjaGUgPSBuZXcgUmVzb2x2ZUNhY2hlKCk7XG4gICAgICAgIHRoaXMuI3Jlc29sdmVQb3NpeENhY2hlID0gbmV3IFJlc29sdmVDYWNoZSgpO1xuICAgICAgICB0aGlzLiNjaGlsZHJlbiA9IG5ldyBDaGlsZHJlbkNhY2hlKGNoaWxkcmVuQ2FjaGVTaXplKTtcbiAgICAgICAgY29uc3Qgc3BsaXQgPSBjd2RQYXRoLnN1YnN0cmluZyh0aGlzLnJvb3RQYXRoLmxlbmd0aCkuc3BsaXQoc2VwKTtcbiAgICAgICAgLy8gcmVzb2x2ZSgnLycpIGxlYXZlcyAnJywgc3BsaXRzIHRvIFsnJ10sIHdlIGRvbid0IHdhbnQgdGhhdC5cbiAgICAgICAgaWYgKHNwbGl0Lmxlbmd0aCA9PT0gMSAmJiAhc3BsaXRbMF0pIHtcbiAgICAgICAgICAgIHNwbGl0LnBvcCgpO1xuICAgICAgICB9XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICBpZiAobm9jYXNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ211c3QgcHJvdmlkZSBub2Nhc2Ugc2V0dGluZyB0byBQYXRoU2N1cnJ5QmFzZSBjdG9yJyk7XG4gICAgICAgIH1cbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgdGhpcy5ub2Nhc2UgPSBub2Nhc2U7XG4gICAgICAgIHRoaXMucm9vdCA9IHRoaXMubmV3Um9vdCh0aGlzLiNmcyk7XG4gICAgICAgIHRoaXMucm9vdHNbdGhpcy5yb290UGF0aF0gPSB0aGlzLnJvb3Q7XG4gICAgICAgIGxldCBwcmV2ID0gdGhpcy5yb290O1xuICAgICAgICBsZXQgbGVuID0gc3BsaXQubGVuZ3RoIC0gMTtcbiAgICAgICAgY29uc3Qgam9pblNlcCA9IHBhdGhJbXBsLnNlcDtcbiAgICAgICAgbGV0IGFicyA9IHRoaXMucm9vdFBhdGg7XG4gICAgICAgIGxldCBzYXdGaXJzdCA9IGZhbHNlO1xuICAgICAgICBmb3IgKGNvbnN0IHBhcnQgb2Ygc3BsaXQpIHtcbiAgICAgICAgICAgIGNvbnN0IGwgPSBsZW4tLTtcbiAgICAgICAgICAgIHByZXYgPSBwcmV2LmNoaWxkKHBhcnQsIHtcbiAgICAgICAgICAgICAgICByZWxhdGl2ZTogbmV3IEFycmF5KGwpLmZpbGwoJy4uJykuam9pbihqb2luU2VwKSxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBvc2l4OiBuZXcgQXJyYXkobCkuZmlsbCgnLi4nKS5qb2luKCcvJyksXG4gICAgICAgICAgICAgICAgZnVsbHBhdGg6IChhYnMgKz0gKHNhd0ZpcnN0ID8gJycgOiBqb2luU2VwKSArIHBhcnQpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzYXdGaXJzdCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jd2QgPSBwcmV2O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGRlcHRoIG9mIGEgcHJvdmlkZWQgcGF0aCwgc3RyaW5nLCBvciB0aGUgY3dkXG4gICAgICovXG4gICAgZGVwdGgocGF0aCA9IHRoaXMuY3dkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgcGF0aCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHBhdGggPSB0aGlzLmN3ZC5yZXNvbHZlKHBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXRoLmRlcHRoKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgY2FjaGUgb2YgY2hpbGQgZW50cmllcy4gIEV4cG9zZWQgc28gc3ViY2xhc3NlcyBjYW4gY3JlYXRlXG4gICAgICogY2hpbGQgUGF0aCBvYmplY3RzIGluIGEgcGxhdGZvcm0tc3BlY2lmaWMgd2F5LlxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgY2hpbGRyZW5DYWNoZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2NoaWxkcmVuO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXNvbHZlIG9uZSBvciBtb3JlIHBhdGggc3RyaW5ncyB0byBhIHJlc29sdmVkIHN0cmluZ1xuICAgICAqXG4gICAgICogU2FtZSBpbnRlcmZhY2UgYXMgcmVxdWlyZSgncGF0aCcpLnJlc29sdmUuXG4gICAgICpcbiAgICAgKiBNdWNoIGZhc3RlciB0aGFuIHBhdGgucmVzb2x2ZSgpIHdoZW4gY2FsbGVkIG11bHRpcGxlIHRpbWVzIGZvciB0aGUgc2FtZVxuICAgICAqIHBhdGgsIGJlY2F1c2UgdGhlIHJlc29sdmVkIFBhdGggb2JqZWN0cyBhcmUgY2FjaGVkLiAgTXVjaCBzbG93ZXJcbiAgICAgKiBvdGhlcndpc2UuXG4gICAgICovXG4gICAgcmVzb2x2ZSguLi5wYXRocykge1xuICAgICAgICAvLyBmaXJzdCBmaWd1cmUgb3V0IHRoZSBtaW5pbXVtIG51bWJlciBvZiBwYXRocyB3ZSBoYXZlIHRvIHRlc3RcbiAgICAgICAgLy8gd2UgYWx3YXlzIHN0YXJ0IGF0IGN3ZCwgYnV0IGFueSBhYnNvbHV0ZXMgd2lsbCBidW1wIHRoZSBzdGFydFxuICAgICAgICBsZXQgciA9ICcnO1xuICAgICAgICBmb3IgKGxldCBpID0gcGF0aHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IHAgPSBwYXRoc1tpXTtcbiAgICAgICAgICAgIGlmICghcCB8fCBwID09PSAnLicpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICByID0gciA/IGAke3B9LyR7cn1gIDogcDtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzQWJzb2x1dGUocCkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjYWNoZWQgPSB0aGlzLiNyZXNvbHZlQ2FjaGUuZ2V0KHIpO1xuICAgICAgICBpZiAoY2FjaGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5jd2QucmVzb2x2ZShyKS5mdWxscGF0aCgpO1xuICAgICAgICB0aGlzLiNyZXNvbHZlQ2FjaGUuc2V0KHIsIHJlc3VsdCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlc29sdmUgb25lIG9yIG1vcmUgcGF0aCBzdHJpbmdzIHRvIGEgcmVzb2x2ZWQgc3RyaW5nLCByZXR1cm5pbmdcbiAgICAgKiB0aGUgcG9zaXggcGF0aC4gIElkZW50aWNhbCB0byAucmVzb2x2ZSgpIG9uIHBvc2l4IHN5c3RlbXMsIGJ1dCBvblxuICAgICAqIHdpbmRvd3Mgd2lsbCByZXR1cm4gYSBmb3J3YXJkLXNsYXNoIHNlcGFyYXRlZCBVTkMgcGF0aC5cbiAgICAgKlxuICAgICAqIFNhbWUgaW50ZXJmYWNlIGFzIHJlcXVpcmUoJ3BhdGgnKS5yZXNvbHZlLlxuICAgICAqXG4gICAgICogTXVjaCBmYXN0ZXIgdGhhbiBwYXRoLnJlc29sdmUoKSB3aGVuIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBmb3IgdGhlIHNhbWVcbiAgICAgKiBwYXRoLCBiZWNhdXNlIHRoZSByZXNvbHZlZCBQYXRoIG9iamVjdHMgYXJlIGNhY2hlZC4gIE11Y2ggc2xvd2VyXG4gICAgICogb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIHJlc29sdmVQb3NpeCguLi5wYXRocykge1xuICAgICAgICAvLyBmaXJzdCBmaWd1cmUgb3V0IHRoZSBtaW5pbXVtIG51bWJlciBvZiBwYXRocyB3ZSBoYXZlIHRvIHRlc3RcbiAgICAgICAgLy8gd2UgYWx3YXlzIHN0YXJ0IGF0IGN3ZCwgYnV0IGFueSBhYnNvbHV0ZXMgd2lsbCBidW1wIHRoZSBzdGFydFxuICAgICAgICBsZXQgciA9ICcnO1xuICAgICAgICBmb3IgKGxldCBpID0gcGF0aHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IHAgPSBwYXRoc1tpXTtcbiAgICAgICAgICAgIGlmICghcCB8fCBwID09PSAnLicpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICByID0gciA/IGAke3B9LyR7cn1gIDogcDtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzQWJzb2x1dGUocCkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjYWNoZWQgPSB0aGlzLiNyZXNvbHZlUG9zaXhDYWNoZS5nZXQocik7XG4gICAgICAgIGlmIChjYWNoZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmN3ZC5yZXNvbHZlKHIpLmZ1bGxwYXRoUG9zaXgoKTtcbiAgICAgICAgdGhpcy4jcmVzb2x2ZVBvc2l4Q2FjaGUuc2V0KHIsIHJlc3VsdCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIGZpbmQgdGhlIHJlbGF0aXZlIHBhdGggZnJvbSB0aGUgY3dkIHRvIHRoZSBzdXBwbGllZCBwYXRoIHN0cmluZyBvciBlbnRyeVxuICAgICAqL1xuICAgIHJlbGF0aXZlKGVudHJ5ID0gdGhpcy5jd2QpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVudHJ5LnJlbGF0aXZlKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIGZpbmQgdGhlIHJlbGF0aXZlIHBhdGggZnJvbSB0aGUgY3dkIHRvIHRoZSBzdXBwbGllZCBwYXRoIHN0cmluZyBvclxuICAgICAqIGVudHJ5LCB1c2luZyAvIGFzIHRoZSBwYXRoIGRlbGltaXRlciwgZXZlbiBvbiBXaW5kb3dzLlxuICAgICAqL1xuICAgIHJlbGF0aXZlUG9zaXgoZW50cnkgPSB0aGlzLmN3ZCkge1xuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZC5yZXNvbHZlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW50cnkucmVsYXRpdmVQb3NpeCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIGJhc2VuYW1lIGZvciB0aGUgcHJvdmlkZWQgc3RyaW5nIG9yIFBhdGggb2JqZWN0XG4gICAgICovXG4gICAgYmFzZW5hbWUoZW50cnkgPSB0aGlzLmN3ZCkge1xuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZC5yZXNvbHZlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW50cnkubmFtZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBkaXJuYW1lIGZvciB0aGUgcHJvdmlkZWQgc3RyaW5nIG9yIFBhdGggb2JqZWN0XG4gICAgICovXG4gICAgZGlybmFtZShlbnRyeSA9IHRoaXMuY3dkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoZW50cnkucGFyZW50IHx8IGVudHJ5KS5mdWxscGF0aCgpO1xuICAgIH1cbiAgICBhc3luYyByZWFkZGlyKGVudHJ5ID0gdGhpcy5jd2QsIG9wdHMgPSB7XG4gICAgICAgIHdpdGhGaWxlVHlwZXM6IHRydWUsXG4gICAgfSkge1xuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZC5yZXNvbHZlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghKGVudHJ5IGluc3RhbmNlb2YgUGF0aEJhc2UpKSB7XG4gICAgICAgICAgICBvcHRzID0gZW50cnk7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgd2l0aEZpbGVUeXBlcyB9ID0gb3B0cztcbiAgICAgICAgaWYgKCFlbnRyeS5jYW5SZWFkZGlyKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHAgPSBhd2FpdCBlbnRyeS5yZWFkZGlyKCk7XG4gICAgICAgICAgICByZXR1cm4gd2l0aEZpbGVUeXBlcyA/IHAgOiBwLm1hcChlID0+IGUubmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVhZGRpclN5bmMoZW50cnkgPSB0aGlzLmN3ZCwgb3B0cyA9IHtcbiAgICAgICAgd2l0aEZpbGVUeXBlczogdHJ1ZSxcbiAgICB9KSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCEoZW50cnkgaW5zdGFuY2VvZiBQYXRoQmFzZSkpIHtcbiAgICAgICAgICAgIG9wdHMgPSBlbnRyeTtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2Q7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyB3aXRoRmlsZVR5cGVzID0gdHJ1ZSB9ID0gb3B0cztcbiAgICAgICAgaWYgKCFlbnRyeS5jYW5SZWFkZGlyKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh3aXRoRmlsZVR5cGVzKSB7XG4gICAgICAgICAgICByZXR1cm4gZW50cnkucmVhZGRpclN5bmMoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBlbnRyeS5yZWFkZGlyU3luYygpLm1hcChlID0+IGUubmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2FsbCBsc3RhdCgpIG9uIHRoZSBzdHJpbmcgb3IgUGF0aCBvYmplY3QsIGFuZCB1cGRhdGUgYWxsIGtub3duXG4gICAgICogaW5mb3JtYXRpb24gdGhhdCBjYW4gYmUgZGV0ZXJtaW5lZC5cbiAgICAgKlxuICAgICAqIE5vdGUgdGhhdCB1bmxpa2UgYGZzLmxzdGF0KClgLCB0aGUgcmV0dXJuZWQgdmFsdWUgZG9lcyBub3QgY29udGFpbiBzb21lXG4gICAgICogaW5mb3JtYXRpb24sIHN1Y2ggYXMgYG1vZGVgLCBgZGV2YCwgYG5saW5rYCwgYW5kIGBpbm9gLiAgSWYgdGhhdFxuICAgICAqIGluZm9ybWF0aW9uIGlzIHJlcXVpcmVkLCB5b3Ugd2lsbCBuZWVkIHRvIGNhbGwgYGZzLmxzdGF0YCB5b3Vyc2VsZi5cbiAgICAgKlxuICAgICAqIElmIHRoZSBQYXRoIHJlZmVycyB0byBhIG5vbmV4aXN0ZW50IGZpbGUsIG9yIGlmIHRoZSBsc3RhdCBjYWxsIGZhaWxzIGZvclxuICAgICAqIGFueSByZWFzb24sIGB1bmRlZmluZWRgIGlzIHJldHVybmVkLiAgT3RoZXJ3aXNlIHRoZSB1cGRhdGVkIFBhdGggb2JqZWN0IGlzXG4gICAgICogcmV0dXJuZWQuXG4gICAgICpcbiAgICAgKiBSZXN1bHRzIGFyZSBjYWNoZWQsIGFuZCB0aHVzIG1heSBiZSBvdXQgb2YgZGF0ZSBpZiB0aGUgZmlsZXN5c3RlbSBpc1xuICAgICAqIG11dGF0ZWQuXG4gICAgICovXG4gICAgYXN5bmMgbHN0YXQoZW50cnkgPSB0aGlzLmN3ZCkge1xuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZC5yZXNvbHZlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW50cnkubHN0YXQoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogc3luY2hyb25vdXMge0BsaW5rIFBhdGhTY3VycnlCYXNlLmxzdGF0fVxuICAgICAqL1xuICAgIGxzdGF0U3luYyhlbnRyeSA9IHRoaXMuY3dkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbnRyeS5sc3RhdFN5bmMoKTtcbiAgICB9XG4gICAgYXN5bmMgcmVhZGxpbmsoZW50cnkgPSB0aGlzLmN3ZCwgeyB3aXRoRmlsZVR5cGVzIH0gPSB7XG4gICAgICAgIHdpdGhGaWxlVHlwZXM6IGZhbHNlLFxuICAgIH0pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIShlbnRyeSBpbnN0YW5jZW9mIFBhdGhCYXNlKSkge1xuICAgICAgICAgICAgd2l0aEZpbGVUeXBlcyA9IGVudHJ5LndpdGhGaWxlVHlwZXM7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGUgPSBhd2FpdCBlbnRyeS5yZWFkbGluaygpO1xuICAgICAgICByZXR1cm4gd2l0aEZpbGVUeXBlcyA/IGUgOiBlPy5mdWxscGF0aCgpO1xuICAgIH1cbiAgICByZWFkbGlua1N5bmMoZW50cnkgPSB0aGlzLmN3ZCwgeyB3aXRoRmlsZVR5cGVzIH0gPSB7XG4gICAgICAgIHdpdGhGaWxlVHlwZXM6IGZhbHNlLFxuICAgIH0pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIShlbnRyeSBpbnN0YW5jZW9mIFBhdGhCYXNlKSkge1xuICAgICAgICAgICAgd2l0aEZpbGVUeXBlcyA9IGVudHJ5LndpdGhGaWxlVHlwZXM7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGUgPSBlbnRyeS5yZWFkbGlua1N5bmMoKTtcbiAgICAgICAgcmV0dXJuIHdpdGhGaWxlVHlwZXMgPyBlIDogZT8uZnVsbHBhdGgoKTtcbiAgICB9XG4gICAgYXN5bmMgcmVhbHBhdGgoZW50cnkgPSB0aGlzLmN3ZCwgeyB3aXRoRmlsZVR5cGVzIH0gPSB7XG4gICAgICAgIHdpdGhGaWxlVHlwZXM6IGZhbHNlLFxuICAgIH0pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIShlbnRyeSBpbnN0YW5jZW9mIFBhdGhCYXNlKSkge1xuICAgICAgICAgICAgd2l0aEZpbGVUeXBlcyA9IGVudHJ5LndpdGhGaWxlVHlwZXM7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGUgPSBhd2FpdCBlbnRyeS5yZWFscGF0aCgpO1xuICAgICAgICByZXR1cm4gd2l0aEZpbGVUeXBlcyA/IGUgOiBlPy5mdWxscGF0aCgpO1xuICAgIH1cbiAgICByZWFscGF0aFN5bmMoZW50cnkgPSB0aGlzLmN3ZCwgeyB3aXRoRmlsZVR5cGVzIH0gPSB7XG4gICAgICAgIHdpdGhGaWxlVHlwZXM6IGZhbHNlLFxuICAgIH0pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIShlbnRyeSBpbnN0YW5jZW9mIFBhdGhCYXNlKSkge1xuICAgICAgICAgICAgd2l0aEZpbGVUeXBlcyA9IGVudHJ5LndpdGhGaWxlVHlwZXM7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGUgPSBlbnRyeS5yZWFscGF0aFN5bmMoKTtcbiAgICAgICAgcmV0dXJuIHdpdGhGaWxlVHlwZXMgPyBlIDogZT8uZnVsbHBhdGgoKTtcbiAgICB9XG4gICAgYXN5bmMgd2FsayhlbnRyeSA9IHRoaXMuY3dkLCBvcHRzID0ge30pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIShlbnRyeSBpbnN0YW5jZW9mIFBhdGhCYXNlKSkge1xuICAgICAgICAgICAgb3B0cyA9IGVudHJ5O1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHdpdGhGaWxlVHlwZXMgPSB0cnVlLCBmb2xsb3cgPSBmYWxzZSwgZmlsdGVyLCB3YWxrRmlsdGVyLCB9ID0gb3B0cztcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IFtdO1xuICAgICAgICBpZiAoIWZpbHRlciB8fCBmaWx0ZXIoZW50cnkpKSB7XG4gICAgICAgICAgICByZXN1bHRzLnB1c2god2l0aEZpbGVUeXBlcyA/IGVudHJ5IDogZW50cnkuZnVsbHBhdGgoKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGlycyA9IG5ldyBTZXQoKTtcbiAgICAgICAgY29uc3Qgd2FsayA9IChkaXIsIGNiKSA9PiB7XG4gICAgICAgICAgICBkaXJzLmFkZChkaXIpO1xuICAgICAgICAgICAgZGlyLnJlYWRkaXJDQigoZXIsIGVudHJpZXMpID0+IHtcbiAgICAgICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgICAgICAgICBpZiAoZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNiKGVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgICAgICAgICBsZXQgbGVuID0gZW50cmllcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgaWYgKCFsZW4pXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYigpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgtLWxlbiA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBlIG9mIGVudHJpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmaWx0ZXIgfHwgZmlsdGVyKGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2god2l0aEZpbGVUeXBlcyA/IGUgOiBlLmZ1bGxwYXRoKCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChmb2xsb3cgJiYgZS5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlLnJlYWxwYXRoKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbihyID0+IChyPy5pc1Vua25vd24oKSA/IHIubHN0YXQoKSA6IHIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKHIgPT4gcj8uc2hvdWxkV2FsayhkaXJzLCB3YWxrRmlsdGVyKSA/IHdhbGsociwgbmV4dCkgOiBuZXh0KCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUuc2hvdWxkV2FsayhkaXJzLCB3YWxrRmlsdGVyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbGsoZSwgbmV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB0cnVlKTsgLy8gemFsZ29vb29vb29cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBlbnRyeTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXMsIHJlaikgPT4ge1xuICAgICAgICAgICAgd2FsayhzdGFydCwgZXIgPT4ge1xuICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICAgICAgICAgIGlmIChlcilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlaihlcik7XG4gICAgICAgICAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgICAgICAgICByZXMocmVzdWx0cyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHdhbGtTeW5jKGVudHJ5ID0gdGhpcy5jd2QsIG9wdHMgPSB7fSkge1xuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZC5yZXNvbHZlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghKGVudHJ5IGluc3RhbmNlb2YgUGF0aEJhc2UpKSB7XG4gICAgICAgICAgICBvcHRzID0gZW50cnk7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgd2l0aEZpbGVUeXBlcyA9IHRydWUsIGZvbGxvdyA9IGZhbHNlLCBmaWx0ZXIsIHdhbGtGaWx0ZXIsIH0gPSBvcHRzO1xuICAgICAgICBjb25zdCByZXN1bHRzID0gW107XG4gICAgICAgIGlmICghZmlsdGVyIHx8IGZpbHRlcihlbnRyeSkpIHtcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaCh3aXRoRmlsZVR5cGVzID8gZW50cnkgOiBlbnRyeS5mdWxscGF0aCgpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkaXJzID0gbmV3IFNldChbZW50cnldKTtcbiAgICAgICAgZm9yIChjb25zdCBkaXIgb2YgZGlycykge1xuICAgICAgICAgICAgY29uc3QgZW50cmllcyA9IGRpci5yZWFkZGlyU3luYygpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBlIG9mIGVudHJpZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWZpbHRlciB8fCBmaWx0ZXIoZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHdpdGhGaWxlVHlwZXMgPyBlIDogZS5mdWxscGF0aCgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IHIgPSBlO1xuICAgICAgICAgICAgICAgIGlmIChlLmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoZm9sbG93ICYmIChyID0gZS5yZWFscGF0aFN5bmMoKSkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyLmlzVW5rbm93bigpKVxuICAgICAgICAgICAgICAgICAgICAgICAgci5sc3RhdFN5bmMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHIuc2hvdWxkV2FsayhkaXJzLCB3YWxrRmlsdGVyKSkge1xuICAgICAgICAgICAgICAgICAgICBkaXJzLmFkZChyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN1cHBvcnQgZm9yIGBmb3IgYXdhaXRgXG4gICAgICpcbiAgICAgKiBBbGlhcyBmb3Ige0BsaW5rIFBhdGhTY3VycnlCYXNlLml0ZXJhdGV9XG4gICAgICpcbiAgICAgKiBOb3RlOiBBcyBvZiBOb2RlIDE5LCB0aGlzIGlzIHZlcnkgc2xvdywgY29tcGFyZWQgdG8gb3RoZXIgbWV0aG9kcyBvZlxuICAgICAqIHdhbGtpbmcuICBDb25zaWRlciB1c2luZyB7QGxpbmsgUGF0aFNjdXJyeUJhc2Uuc3RyZWFtfSBpZiBtZW1vcnkgb3ZlcmhlYWRcbiAgICAgKiBhbmQgYmFja3ByZXNzdXJlIGFyZSBjb25jZXJucywgb3Ige0BsaW5rIFBhdGhTY3VycnlCYXNlLndhbGt9IGlmIG5vdC5cbiAgICAgKi9cbiAgICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pdGVyYXRlKCk7XG4gICAgfVxuICAgIGl0ZXJhdGUoZW50cnkgPSB0aGlzLmN3ZCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIC8vIGl0ZXJhdGluZyBhc3luYyBvdmVyIHRoZSBzdHJlYW0gaXMgc2lnbmlmaWNhbnRseSBtb3JlIHBlcmZvcm1hbnQsXG4gICAgICAgIC8vIGVzcGVjaWFsbHkgaW4gdGhlIHdhcm0tY2FjaGUgc2NlbmFyaW8sIGJlY2F1c2UgaXQgYnVmZmVycyB1cCBkaXJlY3RvcnlcbiAgICAgICAgLy8gZW50cmllcyBpbiB0aGUgYmFja2dyb3VuZCBpbnN0ZWFkIG9mIHdhaXRpbmcgZm9yIGEgeWllbGQgZm9yIGVhY2ggb25lLlxuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZC5yZXNvbHZlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghKGVudHJ5IGluc3RhbmNlb2YgUGF0aEJhc2UpKSB7XG4gICAgICAgICAgICBvcHRpb25zID0gZW50cnk7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnN0cmVhbShlbnRyeSwgb3B0aW9ucylbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEl0ZXJhdGluZyBvdmVyIGEgUGF0aFNjdXJyeSBwZXJmb3JtcyBhIHN5bmNocm9ub3VzIHdhbGsuXG4gICAgICpcbiAgICAgKiBBbGlhcyBmb3Ige0BsaW5rIFBhdGhTY3VycnlCYXNlLml0ZXJhdGVTeW5jfVxuICAgICAqL1xuICAgIFtTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pdGVyYXRlU3luYygpO1xuICAgIH1cbiAgICAqaXRlcmF0ZVN5bmMoZW50cnkgPSB0aGlzLmN3ZCwgb3B0cyA9IHt9KSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCEoZW50cnkgaW5zdGFuY2VvZiBQYXRoQmFzZSkpIHtcbiAgICAgICAgICAgIG9wdHMgPSBlbnRyeTtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2Q7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyB3aXRoRmlsZVR5cGVzID0gdHJ1ZSwgZm9sbG93ID0gZmFsc2UsIGZpbHRlciwgd2Fsa0ZpbHRlciwgfSA9IG9wdHM7XG4gICAgICAgIGlmICghZmlsdGVyIHx8IGZpbHRlcihlbnRyeSkpIHtcbiAgICAgICAgICAgIHlpZWxkIHdpdGhGaWxlVHlwZXMgPyBlbnRyeSA6IGVudHJ5LmZ1bGxwYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGlycyA9IG5ldyBTZXQoW2VudHJ5XSk7XG4gICAgICAgIGZvciAoY29uc3QgZGlyIG9mIGRpcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGVudHJpZXMgPSBkaXIucmVhZGRpclN5bmMoKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFmaWx0ZXIgfHwgZmlsdGVyKGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIHdpdGhGaWxlVHlwZXMgPyBlIDogZS5mdWxscGF0aCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgciA9IGU7XG4gICAgICAgICAgICAgICAgaWYgKGUuaXNTeW1ib2xpY0xpbmsoKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIShmb2xsb3cgJiYgKHIgPSBlLnJlYWxwYXRoU3luYygpKSkpXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHIuaXNVbmtub3duKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICByLmxzdGF0U3luYygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoci5zaG91bGRXYWxrKGRpcnMsIHdhbGtGaWx0ZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRpcnMuYWRkKHIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBzdHJlYW0oZW50cnkgPSB0aGlzLmN3ZCwgb3B0cyA9IHt9KSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCEoZW50cnkgaW5zdGFuY2VvZiBQYXRoQmFzZSkpIHtcbiAgICAgICAgICAgIG9wdHMgPSBlbnRyeTtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2Q7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyB3aXRoRmlsZVR5cGVzID0gdHJ1ZSwgZm9sbG93ID0gZmFsc2UsIGZpbHRlciwgd2Fsa0ZpbHRlciwgfSA9IG9wdHM7XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBuZXcgbWluaXBhc3NfMS5NaW5pcGFzcyh7IG9iamVjdE1vZGU6IHRydWUgfSk7XG4gICAgICAgIGlmICghZmlsdGVyIHx8IGZpbHRlcihlbnRyeSkpIHtcbiAgICAgICAgICAgIHJlc3VsdHMud3JpdGUod2l0aEZpbGVUeXBlcyA/IGVudHJ5IDogZW50cnkuZnVsbHBhdGgoKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGlycyA9IG5ldyBTZXQoKTtcbiAgICAgICAgY29uc3QgcXVldWUgPSBbZW50cnldO1xuICAgICAgICBsZXQgcHJvY2Vzc2luZyA9IDA7XG4gICAgICAgIGNvbnN0IHByb2Nlc3MgPSAoKSA9PiB7XG4gICAgICAgICAgICBsZXQgcGF1c2VkID0gZmFsc2U7XG4gICAgICAgICAgICB3aGlsZSAoIXBhdXNlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpciA9IHF1ZXVlLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgaWYgKCFkaXIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb2Nlc3NpbmcgPT09IDApXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzLmVuZCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHByb2Nlc3NpbmcrKztcbiAgICAgICAgICAgICAgICBkaXJzLmFkZChkaXIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9uUmVhZGRpciA9IChlciwgZW50cmllcywgZGlkUmVhbHBhdGhzID0gZmFsc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICAgICAgICAgIGlmIChlcilcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRzLmVtaXQoJ2Vycm9yJywgZXIpO1xuICAgICAgICAgICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgICAgICAgICBpZiAoZm9sbG93ICYmICFkaWRSZWFscGF0aHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb21pc2VzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGUgb2YgZW50cmllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaChlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVhbHBhdGgoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oKHIpID0+IHI/LmlzVW5rbm93bigpID8gci5sc3RhdCgpIDogcikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9taXNlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbigoKSA9PiBvblJlYWRkaXIobnVsbCwgZW50cmllcywgdHJ1ZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGUgb2YgZW50cmllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUgJiYgKCFmaWx0ZXIgfHwgZmlsdGVyKGUpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVzdWx0cy53cml0ZSh3aXRoRmlsZVR5cGVzID8gZSA6IGUuZnVsbHBhdGgoKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF1c2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2luZy0tO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGUgb2YgZW50cmllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgciA9IGUucmVhbHBhdGhDYWNoZWQoKSB8fCBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIuc2hvdWxkV2FsayhkaXJzLCB3YWxrRmlsdGVyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXVlLnB1c2gocik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhdXNlZCAmJiAhcmVzdWx0cy5mbG93aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzLm9uY2UoJ2RyYWluJywgcHJvY2Vzcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIXN5bmMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgLy8gemFsZ28gY29udGFpbm1lbnRcbiAgICAgICAgICAgICAgICBsZXQgc3luYyA9IHRydWU7XG4gICAgICAgICAgICAgICAgZGlyLnJlYWRkaXJDQihvblJlYWRkaXIsIHRydWUpO1xuICAgICAgICAgICAgICAgIHN5bmMgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcHJvY2VzcygpO1xuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG4gICAgc3RyZWFtU3luYyhlbnRyeSA9IHRoaXMuY3dkLCBvcHRzID0ge30pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIShlbnRyeSBpbnN0YW5jZW9mIFBhdGhCYXNlKSkge1xuICAgICAgICAgICAgb3B0cyA9IGVudHJ5O1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHdpdGhGaWxlVHlwZXMgPSB0cnVlLCBmb2xsb3cgPSBmYWxzZSwgZmlsdGVyLCB3YWxrRmlsdGVyLCB9ID0gb3B0cztcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IG5ldyBtaW5pcGFzc18xLk1pbmlwYXNzKHsgb2JqZWN0TW9kZTogdHJ1ZSB9KTtcbiAgICAgICAgY29uc3QgZGlycyA9IG5ldyBTZXQoKTtcbiAgICAgICAgaWYgKCFmaWx0ZXIgfHwgZmlsdGVyKGVudHJ5KSkge1xuICAgICAgICAgICAgcmVzdWx0cy53cml0ZSh3aXRoRmlsZVR5cGVzID8gZW50cnkgOiBlbnRyeS5mdWxscGF0aCgpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBxdWV1ZSA9IFtlbnRyeV07XG4gICAgICAgIGxldCBwcm9jZXNzaW5nID0gMDtcbiAgICAgICAgY29uc3QgcHJvY2VzcyA9ICgpID0+IHtcbiAgICAgICAgICAgIGxldCBwYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHdoaWxlICghcGF1c2VkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGlyID0gcXVldWUuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICBpZiAoIWRpcikge1xuICAgICAgICAgICAgICAgICAgICBpZiAocHJvY2Vzc2luZyA9PT0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMuZW5kKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcHJvY2Vzc2luZysrO1xuICAgICAgICAgICAgICAgIGRpcnMuYWRkKGRpcik7XG4gICAgICAgICAgICAgICAgY29uc3QgZW50cmllcyA9IGRpci5yZWFkZGlyU3luYygpO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZmlsdGVyIHx8IGZpbHRlcihlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHRzLndyaXRlKHdpdGhGaWxlVHlwZXMgPyBlIDogZS5mdWxscGF0aCgpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdXNlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcHJvY2Vzc2luZy0tO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCByID0gZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUuaXNTeW1ib2xpY0xpbmsoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoZm9sbG93ICYmIChyID0gZS5yZWFscGF0aFN5bmMoKSkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIuaXNVbmtub3duKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgci5sc3RhdFN5bmMoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoci5zaG91bGRXYWxrKGRpcnMsIHdhbGtGaWx0ZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBxdWV1ZS5wdXNoKHIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBhdXNlZCAmJiAhcmVzdWx0cy5mbG93aW5nKVxuICAgICAgICAgICAgICAgIHJlc3VsdHMub25jZSgnZHJhaW4nLCBwcm9jZXNzKTtcbiAgICAgICAgfTtcbiAgICAgICAgcHJvY2VzcygpO1xuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG4gICAgY2hkaXIocGF0aCA9IHRoaXMuY3dkKSB7XG4gICAgICAgIGNvbnN0IG9sZEN3ZCA9IHRoaXMuY3dkO1xuICAgICAgICB0aGlzLmN3ZCA9IHR5cGVvZiBwYXRoID09PSAnc3RyaW5nJyA/IHRoaXMuY3dkLnJlc29sdmUocGF0aCkgOiBwYXRoO1xuICAgICAgICB0aGlzLmN3ZFtzZXRBc0N3ZF0ob2xkQ3dkKTtcbiAgICB9XG59XG5leHBvcnRzLlBhdGhTY3VycnlCYXNlID0gUGF0aFNjdXJyeUJhc2U7XG4vKipcbiAqIFdpbmRvd3MgaW1wbGVtZW50YXRpb24gb2Yge0BsaW5rIFBhdGhTY3VycnlCYXNlfVxuICpcbiAqIERlZmF1bHRzIHRvIGNhc2UgaW5zZW5zaXR2ZSwgdXNlcyBgJ1xcXFwnYCB0byBnZW5lcmF0ZSBwYXRoIHN0cmluZ3MuICBVc2VzXG4gKiB7QGxpbmsgUGF0aFdpbjMyfSBmb3IgUGF0aCBvYmplY3RzLlxuICovXG5jbGFzcyBQYXRoU2N1cnJ5V2luMzIgZXh0ZW5kcyBQYXRoU2N1cnJ5QmFzZSB7XG4gICAgLyoqXG4gICAgICogc2VwYXJhdG9yIGZvciBnZW5lcmF0aW5nIHBhdGggc3RyaW5nc1xuICAgICAqL1xuICAgIHNlcCA9ICdcXFxcJztcbiAgICBjb25zdHJ1Y3Rvcihjd2QgPSBwcm9jZXNzLmN3ZCgpLCBvcHRzID0ge30pIHtcbiAgICAgICAgY29uc3QgeyBub2Nhc2UgPSB0cnVlIH0gPSBvcHRzO1xuICAgICAgICBzdXBlcihjd2QsIG5vZGVfcGF0aF8xLndpbjMyLCAnXFxcXCcsIHsgLi4ub3B0cywgbm9jYXNlIH0pO1xuICAgICAgICB0aGlzLm5vY2FzZSA9IG5vY2FzZTtcbiAgICAgICAgZm9yIChsZXQgcCA9IHRoaXMuY3dkOyBwOyBwID0gcC5wYXJlbnQpIHtcbiAgICAgICAgICAgIHAubm9jYXNlID0gdGhpcy5ub2Nhc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcGFyc2VSb290UGF0aChkaXIpIHtcbiAgICAgICAgLy8gaWYgdGhlIHBhdGggc3RhcnRzIHdpdGggYSBzaW5nbGUgc2VwYXJhdG9yLCBpdCdzIG5vdCBhIFVOQywgYW5kIHdlJ2xsXG4gICAgICAgIC8vIGp1c3QgZ2V0IHNlcGFyYXRvciBhcyB0aGUgcm9vdCwgYW5kIGRyaXZlRnJvbVVOQyB3aWxsIHJldHVybiBcXFxuICAgICAgICAvLyBJbiB0aGF0IGNhc2UsIG1vdW50IFxcIG9uIHRoZSByb290IGZyb20gdGhlIGN3ZC5cbiAgICAgICAgcmV0dXJuIG5vZGVfcGF0aF8xLndpbjMyLnBhcnNlKGRpcikucm9vdC50b1VwcGVyQ2FzZSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBuZXdSb290KGZzKSB7XG4gICAgICAgIHJldHVybiBuZXcgUGF0aFdpbjMyKHRoaXMucm9vdFBhdGgsIElGRElSLCB1bmRlZmluZWQsIHRoaXMucm9vdHMsIHRoaXMubm9jYXNlLCB0aGlzLmNoaWxkcmVuQ2FjaGUoKSwgeyBmcyB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHByb3ZpZGVkIHBhdGggc3RyaW5nIGlzIGFuIGFic29sdXRlIHBhdGhcbiAgICAgKi9cbiAgICBpc0Fic29sdXRlKHApIHtcbiAgICAgICAgcmV0dXJuIChwLnN0YXJ0c1dpdGgoJy8nKSB8fCBwLnN0YXJ0c1dpdGgoJ1xcXFwnKSB8fCAvXlthLXpdOihcXC98XFxcXCkvaS50ZXN0KHApKTtcbiAgICB9XG59XG5leHBvcnRzLlBhdGhTY3VycnlXaW4zMiA9IFBhdGhTY3VycnlXaW4zMjtcbi8qKlxuICoge0BsaW5rIFBhdGhTY3VycnlCYXNlfSBpbXBsZW1lbnRhdGlvbiBmb3IgYWxsIHBvc2l4IHN5c3RlbXMgb3RoZXIgdGhhbiBEYXJ3aW4uXG4gKlxuICogRGVmYXVsdHMgdG8gY2FzZS1zZW5zaXRpdmUgbWF0Y2hpbmcsIHVzZXMgYCcvJ2AgdG8gZ2VuZXJhdGUgcGF0aCBzdHJpbmdzLlxuICpcbiAqIFVzZXMge0BsaW5rIFBhdGhQb3NpeH0gZm9yIFBhdGggb2JqZWN0cy5cbiAqL1xuY2xhc3MgUGF0aFNjdXJyeVBvc2l4IGV4dGVuZHMgUGF0aFNjdXJyeUJhc2Uge1xuICAgIC8qKlxuICAgICAqIHNlcGFyYXRvciBmb3IgZ2VuZXJhdGluZyBwYXRoIHN0cmluZ3NcbiAgICAgKi9cbiAgICBzZXAgPSAnLyc7XG4gICAgY29uc3RydWN0b3IoY3dkID0gcHJvY2Vzcy5jd2QoKSwgb3B0cyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHsgbm9jYXNlID0gZmFsc2UgfSA9IG9wdHM7XG4gICAgICAgIHN1cGVyKGN3ZCwgbm9kZV9wYXRoXzEucG9zaXgsICcvJywgeyAuLi5vcHRzLCBub2Nhc2UgfSk7XG4gICAgICAgIHRoaXMubm9jYXNlID0gbm9jYXNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwYXJzZVJvb3RQYXRoKF9kaXIpIHtcbiAgICAgICAgcmV0dXJuICcvJztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgbmV3Um9vdChmcykge1xuICAgICAgICByZXR1cm4gbmV3IFBhdGhQb3NpeCh0aGlzLnJvb3RQYXRoLCBJRkRJUiwgdW5kZWZpbmVkLCB0aGlzLnJvb3RzLCB0aGlzLm5vY2FzZSwgdGhpcy5jaGlsZHJlbkNhY2hlKCksIHsgZnMgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSBwcm92aWRlZCBwYXRoIHN0cmluZyBpcyBhbiBhYnNvbHV0ZSBwYXRoXG4gICAgICovXG4gICAgaXNBYnNvbHV0ZShwKSB7XG4gICAgICAgIHJldHVybiBwLnN0YXJ0c1dpdGgoJy8nKTtcbiAgICB9XG59XG5leHBvcnRzLlBhdGhTY3VycnlQb3NpeCA9IFBhdGhTY3VycnlQb3NpeDtcbi8qKlxuICoge0BsaW5rIFBhdGhTY3VycnlCYXNlfSBpbXBsZW1lbnRhdGlvbiBmb3IgRGFyd2luIChtYWNPUykgc3lzdGVtcy5cbiAqXG4gKiBEZWZhdWx0cyB0byBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoaW5nLCB1c2VzIGAnLydgIGZvciBnZW5lcmF0aW5nIHBhdGhcbiAqIHN0cmluZ3MuXG4gKlxuICogVXNlcyB7QGxpbmsgUGF0aFBvc2l4fSBmb3IgUGF0aCBvYmplY3RzLlxuICovXG5jbGFzcyBQYXRoU2N1cnJ5RGFyd2luIGV4dGVuZHMgUGF0aFNjdXJyeVBvc2l4IHtcbiAgICBjb25zdHJ1Y3Rvcihjd2QgPSBwcm9jZXNzLmN3ZCgpLCBvcHRzID0ge30pIHtcbiAgICAgICAgY29uc3QgeyBub2Nhc2UgPSB0cnVlIH0gPSBvcHRzO1xuICAgICAgICBzdXBlcihjd2QsIHsgLi4ub3B0cywgbm9jYXNlIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuUGF0aFNjdXJyeURhcndpbiA9IFBhdGhTY3VycnlEYXJ3aW47XG4vKipcbiAqIERlZmF1bHQge0BsaW5rIFBhdGhCYXNlfSBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIGN1cnJlbnQgcGxhdGZvcm0uXG4gKlxuICoge0BsaW5rIFBhdGhXaW4zMn0gb24gV2luZG93cyBzeXN0ZW1zLCB7QGxpbmsgUGF0aFBvc2l4fSBvbiBhbGwgb3RoZXJzLlxuICovXG5leHBvcnRzLlBhdGggPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInID8gUGF0aFdpbjMyIDogUGF0aFBvc2l4O1xuLyoqXG4gKiBEZWZhdWx0IHtAbGluayBQYXRoU2N1cnJ5QmFzZX0gaW1wbGVtZW50YXRpb24gZm9yIHRoZSBjdXJyZW50IHBsYXRmb3JtLlxuICpcbiAqIHtAbGluayBQYXRoU2N1cnJ5V2luMzJ9IG9uIFdpbmRvd3Mgc3lzdGVtcywge0BsaW5rIFBhdGhTY3VycnlEYXJ3aW59IG9uXG4gKiBEYXJ3aW4gKG1hY09TKSBzeXN0ZW1zLCB7QGxpbmsgUGF0aFNjdXJyeVBvc2l4fSBvbiBhbGwgb3RoZXJzLlxuICovXG5leHBvcnRzLlBhdGhTY3VycnkgPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInID8gUGF0aFNjdXJyeVdpbjMyXG4gICAgOiBwcm9jZXNzLnBsYXRmb3JtID09PSAnZGFyd2luJyA/IFBhdGhTY3VycnlEYXJ3aW5cbiAgICAgICAgOiBQYXRoU2N1cnJ5UG9zaXg7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gdGhpcyBpcyBqdXN0IGEgdmVyeSBsaWdodCB3cmFwcGVyIGFyb3VuZCAyIGFycmF5cyB3aXRoIGFuIG9mZnNldCBpbmRleFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5QYXR0ZXJuID0gdm9pZCAwO1xuY29uc3QgbWluaW1hdGNoXzEgPSByZXF1aXJlKFwibWluaW1hdGNoXCIpO1xuY29uc3QgaXNQYXR0ZXJuTGlzdCA9IChwbCkgPT4gcGwubGVuZ3RoID49IDE7XG5jb25zdCBpc0dsb2JMaXN0ID0gKGdsKSA9PiBnbC5sZW5ndGggPj0gMTtcbi8qKlxuICogQW4gaW1tdXRhYmxlLWlzaCB2aWV3IG9uIGFuIGFycmF5IG9mIGdsb2IgcGFydHMgYW5kIHRoZWlyIHBhcnNlZFxuICogcmVzdWx0c1xuICovXG5jbGFzcyBQYXR0ZXJuIHtcbiAgICAjcGF0dGVybkxpc3Q7XG4gICAgI2dsb2JMaXN0O1xuICAgICNpbmRleDtcbiAgICBsZW5ndGg7XG4gICAgI3BsYXRmb3JtO1xuICAgICNyZXN0O1xuICAgICNnbG9iU3RyaW5nO1xuICAgICNpc0RyaXZlO1xuICAgICNpc1VOQztcbiAgICAjaXNBYnNvbHV0ZTtcbiAgICAjZm9sbG93R2xvYnN0YXIgPSB0cnVlO1xuICAgIGNvbnN0cnVjdG9yKHBhdHRlcm5MaXN0LCBnbG9iTGlzdCwgaW5kZXgsIHBsYXRmb3JtKSB7XG4gICAgICAgIGlmICghaXNQYXR0ZXJuTGlzdChwYXR0ZXJuTGlzdCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2VtcHR5IHBhdHRlcm4gbGlzdCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNHbG9iTGlzdChnbG9iTGlzdCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2VtcHR5IGdsb2IgbGlzdCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChnbG9iTGlzdC5sZW5ndGggIT09IHBhdHRlcm5MaXN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbWlzbWF0Y2hlZCBwYXR0ZXJuIGxpc3QgYW5kIGdsb2IgbGlzdCBsZW5ndGhzJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sZW5ndGggPSBwYXR0ZXJuTGlzdC5sZW5ndGg7XG4gICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2luZGV4IG91dCBvZiByYW5nZScpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuI3BhdHRlcm5MaXN0ID0gcGF0dGVybkxpc3Q7XG4gICAgICAgIHRoaXMuI2dsb2JMaXN0ID0gZ2xvYkxpc3Q7XG4gICAgICAgIHRoaXMuI2luZGV4ID0gaW5kZXg7XG4gICAgICAgIHRoaXMuI3BsYXRmb3JtID0gcGxhdGZvcm07XG4gICAgICAgIC8vIG5vcm1hbGl6ZSByb290IGVudHJpZXMgb2YgYWJzb2x1dGUgcGF0dGVybnMgb24gaW5pdGlhbCBjcmVhdGlvbi5cbiAgICAgICAgaWYgKHRoaXMuI2luZGV4ID09PSAwKSB7XG4gICAgICAgICAgICAvLyBjOiA9PiBbJ2M6LyddXG4gICAgICAgICAgICAvLyBDOi8gPT4gWydDOi8nXVxuICAgICAgICAgICAgLy8gQzoveCA9PiBbJ0M6LycsICd4J11cbiAgICAgICAgICAgIC8vIC8vaG9zdC9zaGFyZSA9PiBbJy8vaG9zdC9zaGFyZS8nXVxuICAgICAgICAgICAgLy8gLy9ob3N0L3NoYXJlLyA9PiBbJy8vaG9zdC9zaGFyZS8nXVxuICAgICAgICAgICAgLy8gLy9ob3N0L3NoYXJlL3ggPT4gWycvL2hvc3Qvc2hhcmUvJywgJ3gnXVxuICAgICAgICAgICAgLy8gL2V0YyA9PiBbJy8nLCAnZXRjJ11cbiAgICAgICAgICAgIC8vIC8gPT4gWycvJ11cbiAgICAgICAgICAgIGlmICh0aGlzLmlzVU5DKCkpIHtcbiAgICAgICAgICAgICAgICAvLyAnJyAvICcnIC8gJ2hvc3QnIC8gJ3NoYXJlJ1xuICAgICAgICAgICAgICAgIGNvbnN0IFtwMCwgcDEsIHAyLCBwMywgLi4ucHJlc3RdID0gdGhpcy4jcGF0dGVybkxpc3Q7XG4gICAgICAgICAgICAgICAgY29uc3QgW2cwLCBnMSwgZzIsIGczLCAuLi5ncmVzdF0gPSB0aGlzLiNnbG9iTGlzdDtcbiAgICAgICAgICAgICAgICBpZiAocHJlc3RbMF0gPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGVuZHMgaW4gL1xuICAgICAgICAgICAgICAgICAgICBwcmVzdC5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICBncmVzdC5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBwID0gW3AwLCBwMSwgcDIsIHAzLCAnJ10uam9pbignLycpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGcgPSBbZzAsIGcxLCBnMiwgZzMsICcnXS5qb2luKCcvJyk7XG4gICAgICAgICAgICAgICAgdGhpcy4jcGF0dGVybkxpc3QgPSBbcCwgLi4ucHJlc3RdO1xuICAgICAgICAgICAgICAgIHRoaXMuI2dsb2JMaXN0ID0gW2csIC4uLmdyZXN0XTtcbiAgICAgICAgICAgICAgICB0aGlzLmxlbmd0aCA9IHRoaXMuI3BhdHRlcm5MaXN0Lmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuaXNEcml2ZSgpIHx8IHRoaXMuaXNBYnNvbHV0ZSgpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgW3AxLCAuLi5wcmVzdF0gPSB0aGlzLiNwYXR0ZXJuTGlzdDtcbiAgICAgICAgICAgICAgICBjb25zdCBbZzEsIC4uLmdyZXN0XSA9IHRoaXMuI2dsb2JMaXN0O1xuICAgICAgICAgICAgICAgIGlmIChwcmVzdFswXSA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZW5kcyBpbiAvXG4gICAgICAgICAgICAgICAgICAgIHByZXN0LnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgIGdyZXN0LnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHAgPSBwMSArICcvJztcbiAgICAgICAgICAgICAgICBjb25zdCBnID0gZzEgKyAnLyc7XG4gICAgICAgICAgICAgICAgdGhpcy4jcGF0dGVybkxpc3QgPSBbcCwgLi4ucHJlc3RdO1xuICAgICAgICAgICAgICAgIHRoaXMuI2dsb2JMaXN0ID0gW2csIC4uLmdyZXN0XTtcbiAgICAgICAgICAgICAgICB0aGlzLmxlbmd0aCA9IHRoaXMuI3BhdHRlcm5MaXN0Lmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgZmlyc3QgZW50cnkgaW4gdGhlIHBhcnNlZCBsaXN0IG9mIHBhdHRlcm5zXG4gICAgICovXG4gICAgcGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3BhdHRlcm5MaXN0W3RoaXMuI2luZGV4XTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogdHJ1ZSBvZiBpZiBwYXR0ZXJuKCkgcmV0dXJucyBhIHN0cmluZ1xuICAgICAqL1xuICAgIGlzU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHRoaXMuI3BhdHRlcm5MaXN0W3RoaXMuI2luZGV4XSA9PT0gJ3N0cmluZyc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHRydWUgb2YgaWYgcGF0dGVybigpIHJldHVybnMgR0xPQlNUQVJcbiAgICAgKi9cbiAgICBpc0dsb2JzdGFyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcGF0dGVybkxpc3RbdGhpcy4jaW5kZXhdID09PSBtaW5pbWF0Y2hfMS5HTE9CU1RBUjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogdHJ1ZSBpZiBwYXR0ZXJuKCkgcmV0dXJucyBhIHJlZ2V4cFxuICAgICAqL1xuICAgIGlzUmVnRXhwKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcGF0dGVybkxpc3RbdGhpcy4jaW5kZXhdIGluc3RhbmNlb2YgUmVnRXhwO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgLy1qb2luZWQgc2V0IG9mIGdsb2IgcGFydHMgdGhhdCBtYWtlIHVwIHRoaXMgcGF0dGVyblxuICAgICAqL1xuICAgIGdsb2JTdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy4jZ2xvYlN0cmluZyA9XG4gICAgICAgICAgICB0aGlzLiNnbG9iU3RyaW5nIHx8XG4gICAgICAgICAgICAgICAgKHRoaXMuI2luZGV4ID09PSAwID9cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0Fic29sdXRlKCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jZ2xvYkxpc3RbMF0gKyB0aGlzLiNnbG9iTGlzdC5zbGljZSgxKS5qb2luKCcvJylcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy4jZ2xvYkxpc3Quam9pbignLycpXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy4jZ2xvYkxpc3Quc2xpY2UodGhpcy4jaW5kZXgpLmpvaW4oJy8nKSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiB0cnVlIGlmIHRoZXJlIGFyZSBtb3JlIHBhdHRlcm4gcGFydHMgYWZ0ZXIgdGhpcyBvbmVcbiAgICAgKi9cbiAgICBoYXNNb3JlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sZW5ndGggPiB0aGlzLiNpbmRleCArIDE7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSByZXN0IG9mIHRoZSBwYXR0ZXJuIGFmdGVyIHRoaXMgcGFydCwgb3IgbnVsbCBpZiB0aGlzIGlzIHRoZSBlbmRcbiAgICAgKi9cbiAgICByZXN0KCkge1xuICAgICAgICBpZiAodGhpcy4jcmVzdCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuI3Jlc3Q7XG4gICAgICAgIGlmICghdGhpcy5oYXNNb3JlKCkpXG4gICAgICAgICAgICByZXR1cm4gKHRoaXMuI3Jlc3QgPSBudWxsKTtcbiAgICAgICAgdGhpcy4jcmVzdCA9IG5ldyBQYXR0ZXJuKHRoaXMuI3BhdHRlcm5MaXN0LCB0aGlzLiNnbG9iTGlzdCwgdGhpcy4jaW5kZXggKyAxLCB0aGlzLiNwbGF0Zm9ybSk7XG4gICAgICAgIHRoaXMuI3Jlc3QuI2lzQWJzb2x1dGUgPSB0aGlzLiNpc0Fic29sdXRlO1xuICAgICAgICB0aGlzLiNyZXN0LiNpc1VOQyA9IHRoaXMuI2lzVU5DO1xuICAgICAgICB0aGlzLiNyZXN0LiNpc0RyaXZlID0gdGhpcy4jaXNEcml2ZTtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3Jlc3Q7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHRydWUgaWYgdGhlIHBhdHRlcm4gcmVwcmVzZW50cyBhIC8vdW5jL3BhdGgvIG9uIHdpbmRvd3NcbiAgICAgKi9cbiAgICBpc1VOQygpIHtcbiAgICAgICAgY29uc3QgcGwgPSB0aGlzLiNwYXR0ZXJuTGlzdDtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2lzVU5DICE9PSB1bmRlZmluZWQgP1xuICAgICAgICAgICAgdGhpcy4jaXNVTkNcbiAgICAgICAgICAgIDogKHRoaXMuI2lzVU5DID1cbiAgICAgICAgICAgICAgICB0aGlzLiNwbGF0Zm9ybSA9PT0gJ3dpbjMyJyAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLiNpbmRleCA9PT0gMCAmJlxuICAgICAgICAgICAgICAgICAgICBwbFswXSA9PT0gJycgJiZcbiAgICAgICAgICAgICAgICAgICAgcGxbMV0gPT09ICcnICYmXG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBwbFsyXSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgICAgICAgICAgISFwbFsyXSAmJlxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgcGxbM10gPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAgICAgICAgICEhcGxbM10pO1xuICAgIH1cbiAgICAvLyBwYXR0ZXJuIGxpa2UgQzovLi4uXG4gICAgLy8gc3BsaXQgPSBbJ0M6JywgLi4uXVxuICAgIC8vIFhYWDogd291bGQgYmUgbmljZSB0byBoYW5kbGUgcGF0dGVybnMgbGlrZSBgYzoqYCB0byB0ZXN0IHRoZSBjd2RcbiAgICAvLyBpbiBjOiBmb3IgKiwgYnV0IEkgZG9uJ3Qga25vdyBvZiBhIHdheSB0byBldmVuIGZpZ3VyZSBvdXQgd2hhdCB0aGF0XG4gICAgLy8gY3dkIGlzIHdpdGhvdXQgYWN0dWFsbHkgY2hkaXInaW5nIGludG8gaXQ/XG4gICAgLyoqXG4gICAgICogVHJ1ZSBpZiB0aGUgcGF0dGVybiBzdGFydHMgd2l0aCBhIGRyaXZlIGxldHRlciBvbiBXaW5kb3dzXG4gICAgICovXG4gICAgaXNEcml2ZSgpIHtcbiAgICAgICAgY29uc3QgcGwgPSB0aGlzLiNwYXR0ZXJuTGlzdDtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2lzRHJpdmUgIT09IHVuZGVmaW5lZCA/XG4gICAgICAgICAgICB0aGlzLiNpc0RyaXZlXG4gICAgICAgICAgICA6ICh0aGlzLiNpc0RyaXZlID1cbiAgICAgICAgICAgICAgICB0aGlzLiNwbGF0Zm9ybSA9PT0gJ3dpbjMyJyAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLiNpbmRleCA9PT0gMCAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxlbmd0aCA+IDEgJiZcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHBsWzBdID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgICAgICAgICAvXlthLXpdOiQvaS50ZXN0KHBsWzBdKSk7XG4gICAgfVxuICAgIC8vIHBhdHRlcm4gPSAnLycgb3IgJy8uLi4nIG9yICcveC8uLi4nXG4gICAgLy8gc3BsaXQgPSBbJycsICcnXSBvciBbJycsIC4uLl0gb3IgWycnLCAneCcsIC4uLl1cbiAgICAvLyBEcml2ZSBhbmQgVU5DIGJvdGggY29uc2lkZXJlZCBhYnNvbHV0ZSBvbiB3aW5kb3dzXG4gICAgLyoqXG4gICAgICogVHJ1ZSBpZiB0aGUgcGF0dGVybiBpcyByb290ZWQgb24gYW4gYWJzb2x1dGUgcGF0aFxuICAgICAqL1xuICAgIGlzQWJzb2x1dGUoKSB7XG4gICAgICAgIGNvbnN0IHBsID0gdGhpcy4jcGF0dGVybkxpc3Q7XG4gICAgICAgIHJldHVybiB0aGlzLiNpc0Fic29sdXRlICE9PSB1bmRlZmluZWQgP1xuICAgICAgICAgICAgdGhpcy4jaXNBYnNvbHV0ZVxuICAgICAgICAgICAgOiAodGhpcy4jaXNBYnNvbHV0ZSA9XG4gICAgICAgICAgICAgICAgKHBsWzBdID09PSAnJyAmJiBwbC5sZW5ndGggPiAxKSB8fFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzRHJpdmUoKSB8fFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzVU5DKCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBjb25zdW1lIHRoZSByb290IG9mIHRoZSBwYXR0ZXJuLCBhbmQgcmV0dXJuIGl0XG4gICAgICovXG4gICAgcm9vdCgpIHtcbiAgICAgICAgY29uc3QgcCA9IHRoaXMuI3BhdHRlcm5MaXN0WzBdO1xuICAgICAgICByZXR1cm4gKHR5cGVvZiBwID09PSAnc3RyaW5nJyAmJiB0aGlzLmlzQWJzb2x1dGUoKSAmJiB0aGlzLiNpbmRleCA9PT0gMCkgP1xuICAgICAgICAgICAgcFxuICAgICAgICAgICAgOiAnJztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2hlY2sgdG8gc2VlIGlmIHRoZSBjdXJyZW50IGdsb2JzdGFyIHBhdHRlcm4gaXMgYWxsb3dlZCB0byBmb2xsb3dcbiAgICAgKiBhIHN5bWJvbGljIGxpbmsuXG4gICAgICovXG4gICAgY2hlY2tGb2xsb3dHbG9ic3RhcigpIHtcbiAgICAgICAgcmV0dXJuICEodGhpcy4jaW5kZXggPT09IDAgfHxcbiAgICAgICAgICAgICF0aGlzLmlzR2xvYnN0YXIoKSB8fFxuICAgICAgICAgICAgIXRoaXMuI2ZvbGxvd0dsb2JzdGFyKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTWFyayB0aGF0IHRoZSBjdXJyZW50IGdsb2JzdGFyIHBhdHRlcm4gaXMgZm9sbG93aW5nIGEgc3ltYm9saWMgbGlua1xuICAgICAqL1xuICAgIG1hcmtGb2xsb3dHbG9ic3RhcigpIHtcbiAgICAgICAgaWYgKHRoaXMuI2luZGV4ID09PSAwIHx8ICF0aGlzLmlzR2xvYnN0YXIoKSB8fCAhdGhpcy4jZm9sbG93R2xvYnN0YXIpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHRoaXMuI2ZvbGxvd0dsb2JzdGFyID0gZmFsc2U7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cbmV4cG9ydHMuUGF0dGVybiA9IFBhdHRlcm47XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wYXR0ZXJuLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBnaXZlIGl0IGEgcGF0dGVybiwgYW5kIGl0J2xsIGJlIGFibGUgdG8gdGVsbCB5b3UgaWZcbi8vIGEgZ2l2ZW4gcGF0aCBzaG91bGQgYmUgaWdub3JlZC5cbi8vIElnbm9yaW5nIGEgcGF0aCBpZ25vcmVzIGl0cyBjaGlsZHJlbiBpZiB0aGUgcGF0dGVybiBlbmRzIGluIC8qKlxuLy8gSWdub3JlcyBhcmUgYWx3YXlzIHBhcnNlZCBpbiBkb3Q6dHJ1ZSBtb2RlXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLklnbm9yZSA9IHZvaWQgMDtcbmNvbnN0IG1pbmltYXRjaF8xID0gcmVxdWlyZShcIm1pbmltYXRjaFwiKTtcbmNvbnN0IHBhdHRlcm5fanNfMSA9IHJlcXVpcmUoXCIuL3BhdHRlcm4uanNcIik7XG5jb25zdCBkZWZhdWx0UGxhdGZvcm0gPSAodHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmXG4gICAgcHJvY2VzcyAmJlxuICAgIHR5cGVvZiBwcm9jZXNzLnBsYXRmb3JtID09PSAnc3RyaW5nJykgP1xuICAgIHByb2Nlc3MucGxhdGZvcm1cbiAgICA6ICdsaW51eCc7XG4vKipcbiAqIENsYXNzIHVzZWQgdG8gcHJvY2VzcyBpZ25vcmVkIHBhdHRlcm5zXG4gKi9cbmNsYXNzIElnbm9yZSB7XG4gICAgcmVsYXRpdmU7XG4gICAgcmVsYXRpdmVDaGlsZHJlbjtcbiAgICBhYnNvbHV0ZTtcbiAgICBhYnNvbHV0ZUNoaWxkcmVuO1xuICAgIHBsYXRmb3JtO1xuICAgIG1tb3B0cztcbiAgICBjb25zdHJ1Y3RvcihpZ25vcmVkLCB7IG5vYnJhY2UsIG5vY2FzZSwgbm9leHQsIG5vZ2xvYnN0YXIsIHBsYXRmb3JtID0gZGVmYXVsdFBsYXRmb3JtLCB9KSB7XG4gICAgICAgIHRoaXMucmVsYXRpdmUgPSBbXTtcbiAgICAgICAgdGhpcy5hYnNvbHV0ZSA9IFtdO1xuICAgICAgICB0aGlzLnJlbGF0aXZlQ2hpbGRyZW4gPSBbXTtcbiAgICAgICAgdGhpcy5hYnNvbHV0ZUNoaWxkcmVuID0gW107XG4gICAgICAgIHRoaXMucGxhdGZvcm0gPSBwbGF0Zm9ybTtcbiAgICAgICAgdGhpcy5tbW9wdHMgPSB7XG4gICAgICAgICAgICBkb3Q6IHRydWUsXG4gICAgICAgICAgICBub2JyYWNlLFxuICAgICAgICAgICAgbm9jYXNlLFxuICAgICAgICAgICAgbm9leHQsXG4gICAgICAgICAgICBub2dsb2JzdGFyLFxuICAgICAgICAgICAgb3B0aW1pemF0aW9uTGV2ZWw6IDIsXG4gICAgICAgICAgICBwbGF0Zm9ybSxcbiAgICAgICAgICAgIG5vY29tbWVudDogdHJ1ZSxcbiAgICAgICAgICAgIG5vbmVnYXRlOiB0cnVlLFxuICAgICAgICB9O1xuICAgICAgICBmb3IgKGNvbnN0IGlnbiBvZiBpZ25vcmVkKVxuICAgICAgICAgICAgdGhpcy5hZGQoaWduKTtcbiAgICB9XG4gICAgYWRkKGlnbikge1xuICAgICAgICAvLyB0aGlzIGlzIGEgbGl0dGxlIHdlaXJkLCBidXQgaXQgZ2l2ZXMgdXMgYSBjbGVhbiBzZXQgb2Ygb3B0aW1pemVkXG4gICAgICAgIC8vIG1pbmltYXRjaCBtYXRjaGVycywgd2l0aG91dCBnZXR0aW5nIHRyaXBwZWQgdXAgaWYgb25lIG9mIHRoZW1cbiAgICAgICAgLy8gZW5kcyBpbiAvKiogaW5zaWRlIGEgYnJhY2Ugc2VjdGlvbiwgYW5kIGl0J3Mgb25seSBpbmVmZmljaWVudCBhdFxuICAgICAgICAvLyB0aGUgc3RhcnQgb2YgdGhlIHdhbGssIG5vdCBhbG9uZyBpdC5cbiAgICAgICAgLy8gSXQnZCBiZSBuaWNlIGlmIHRoZSBQYXR0ZXJuIGNsYXNzIGp1c3QgaGFkIGEgLnRlc3QoKSBtZXRob2QsIGJ1dFxuICAgICAgICAvLyBoYW5kbGluZyBnbG9ic3RhcnMgaXMgYSBiaXQgb2YgYSBwaXRhLCBhbmQgdGhhdCBjb2RlIGFscmVhZHkgbGl2ZXNcbiAgICAgICAgLy8gaW4gbWluaW1hdGNoIGFueXdheS5cbiAgICAgICAgLy8gQW5vdGhlciB3YXkgd291bGQgYmUgaWYgbWF5YmUgTWluaW1hdGNoIGNvdWxkIHRha2UgaXRzIHNldC9nbG9iUGFydHNcbiAgICAgICAgLy8gYXMgYW4gb3B0aW9uLCBhbmQgdGhlbiB3ZSBjb3VsZCBhdCBsZWFzdCBqdXN0IHVzZSBQYXR0ZXJuIHRvIHRlc3RcbiAgICAgICAgLy8gZm9yIGFic29sdXRlLW5lc3MuXG4gICAgICAgIC8vIFlldCBhbm90aGVyIHdheSwgTWluaW1hdGNoIGNvdWxkIHRha2UgYW4gYXJyYXkgb2YgZ2xvYiBzdHJpbmdzLCBhbmRcbiAgICAgICAgLy8gYSBjd2Qgb3B0aW9uLCBhbmQgZG8gdGhlIHJpZ2h0IHRoaW5nLlxuICAgICAgICBjb25zdCBtbSA9IG5ldyBtaW5pbWF0Y2hfMS5NaW5pbWF0Y2goaWduLCB0aGlzLm1tb3B0cyk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW0uc2V0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBtbS5zZXRbaV07XG4gICAgICAgICAgICBjb25zdCBnbG9iUGFydHMgPSBtbS5nbG9iUGFydHNbaV07XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgICAgIGlmICghcGFyc2VkIHx8ICFnbG9iUGFydHMpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcGF0dGVybiBvYmplY3QnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHN0cmlwIG9mZiBsZWFkaW5nIC4vIHBvcnRpb25zXG4gICAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vaXNhYWNzL25vZGUtZ2xvYi9pc3N1ZXMvNTcwXG4gICAgICAgICAgICB3aGlsZSAocGFyc2VkWzBdID09PSAnLicgJiYgZ2xvYlBhcnRzWzBdID09PSAnLicpIHtcbiAgICAgICAgICAgICAgICBwYXJzZWQuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICBnbG9iUGFydHMuc2hpZnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICBjb25zdCBwID0gbmV3IHBhdHRlcm5fanNfMS5QYXR0ZXJuKHBhcnNlZCwgZ2xvYlBhcnRzLCAwLCB0aGlzLnBsYXRmb3JtKTtcbiAgICAgICAgICAgIGNvbnN0IG0gPSBuZXcgbWluaW1hdGNoXzEuTWluaW1hdGNoKHAuZ2xvYlN0cmluZygpLCB0aGlzLm1tb3B0cyk7XG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGdsb2JQYXJ0c1tnbG9iUGFydHMubGVuZ3RoIC0gMV0gPT09ICcqKic7XG4gICAgICAgICAgICBjb25zdCBhYnNvbHV0ZSA9IHAuaXNBYnNvbHV0ZSgpO1xuICAgICAgICAgICAgaWYgKGFic29sdXRlKVxuICAgICAgICAgICAgICAgIHRoaXMuYWJzb2x1dGUucHVzaChtKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aGlzLnJlbGF0aXZlLnB1c2gobSk7XG4gICAgICAgICAgICBpZiAoY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBpZiAoYWJzb2x1dGUpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWJzb2x1dGVDaGlsZHJlbi5wdXNoKG0pO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWxhdGl2ZUNoaWxkcmVuLnB1c2gobSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWdub3JlZChwKSB7XG4gICAgICAgIGNvbnN0IGZ1bGxwYXRoID0gcC5mdWxscGF0aCgpO1xuICAgICAgICBjb25zdCBmdWxscGF0aHMgPSBgJHtmdWxscGF0aH0vYDtcbiAgICAgICAgY29uc3QgcmVsYXRpdmUgPSBwLnJlbGF0aXZlKCkgfHwgJy4nO1xuICAgICAgICBjb25zdCByZWxhdGl2ZXMgPSBgJHtyZWxhdGl2ZX0vYDtcbiAgICAgICAgZm9yIChjb25zdCBtIG9mIHRoaXMucmVsYXRpdmUpIHtcbiAgICAgICAgICAgIGlmIChtLm1hdGNoKHJlbGF0aXZlKSB8fCBtLm1hdGNoKHJlbGF0aXZlcykpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBtIG9mIHRoaXMuYWJzb2x1dGUpIHtcbiAgICAgICAgICAgIGlmIChtLm1hdGNoKGZ1bGxwYXRoKSB8fCBtLm1hdGNoKGZ1bGxwYXRocykpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjaGlsZHJlbklnbm9yZWQocCkge1xuICAgICAgICBjb25zdCBmdWxscGF0aCA9IHAuZnVsbHBhdGgoKSArICcvJztcbiAgICAgICAgY29uc3QgcmVsYXRpdmUgPSAocC5yZWxhdGl2ZSgpIHx8ICcuJykgKyAnLyc7XG4gICAgICAgIGZvciAoY29uc3QgbSBvZiB0aGlzLnJlbGF0aXZlQ2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGlmIChtLm1hdGNoKHJlbGF0aXZlKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IG0gb2YgdGhpcy5hYnNvbHV0ZUNoaWxkcmVuKSB7XG4gICAgICAgICAgICBpZiAobS5tYXRjaChmdWxscGF0aCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbmV4cG9ydHMuSWdub3JlID0gSWdub3JlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aWdub3JlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBzeW5jaHJvbm91cyB1dGlsaXR5IGZvciBmaWx0ZXJpbmcgZW50cmllcyBhbmQgY2FsY3VsYXRpbmcgc3Vid2Fsa3Ncbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUHJvY2Vzc29yID0gZXhwb3J0cy5TdWJXYWxrcyA9IGV4cG9ydHMuTWF0Y2hSZWNvcmQgPSBleHBvcnRzLkhhc1dhbGtlZENhY2hlID0gdm9pZCAwO1xuY29uc3QgbWluaW1hdGNoXzEgPSByZXF1aXJlKFwibWluaW1hdGNoXCIpO1xuLyoqXG4gKiBBIGNhY2hlIG9mIHdoaWNoIHBhdHRlcm5zIGhhdmUgYmVlbiBwcm9jZXNzZWQgZm9yIGEgZ2l2ZW4gUGF0aFxuICovXG5jbGFzcyBIYXNXYWxrZWRDYWNoZSB7XG4gICAgc3RvcmU7XG4gICAgY29uc3RydWN0b3Ioc3RvcmUgPSBuZXcgTWFwKCkpIHtcbiAgICAgICAgdGhpcy5zdG9yZSA9IHN0b3JlO1xuICAgIH1cbiAgICBjb3B5KCkge1xuICAgICAgICByZXR1cm4gbmV3IEhhc1dhbGtlZENhY2hlKG5ldyBNYXAodGhpcy5zdG9yZSkpO1xuICAgIH1cbiAgICBoYXNXYWxrZWQodGFyZ2V0LCBwYXR0ZXJuKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0b3JlLmdldCh0YXJnZXQuZnVsbHBhdGgoKSk/LmhhcyhwYXR0ZXJuLmdsb2JTdHJpbmcoKSk7XG4gICAgfVxuICAgIHN0b3JlV2Fsa2VkKHRhcmdldCwgcGF0dGVybikge1xuICAgICAgICBjb25zdCBmdWxscGF0aCA9IHRhcmdldC5mdWxscGF0aCgpO1xuICAgICAgICBjb25zdCBjYWNoZWQgPSB0aGlzLnN0b3JlLmdldChmdWxscGF0aCk7XG4gICAgICAgIGlmIChjYWNoZWQpXG4gICAgICAgICAgICBjYWNoZWQuYWRkKHBhdHRlcm4uZ2xvYlN0cmluZygpKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5zdG9yZS5zZXQoZnVsbHBhdGgsIG5ldyBTZXQoW3BhdHRlcm4uZ2xvYlN0cmluZygpXSkpO1xuICAgIH1cbn1cbmV4cG9ydHMuSGFzV2Fsa2VkQ2FjaGUgPSBIYXNXYWxrZWRDYWNoZTtcbi8qKlxuICogQSByZWNvcmQgb2Ygd2hpY2ggcGF0aHMgaGF2ZSBiZWVuIG1hdGNoZWQgaW4gYSBnaXZlbiB3YWxrIHN0ZXAsXG4gKiBhbmQgd2hldGhlciB0aGV5IG9ubHkgYXJlIGNvbnNpZGVyZWQgYSBtYXRjaCBpZiB0aGV5IGFyZSBhIGRpcmVjdG9yeSxcbiAqIGFuZCB3aGV0aGVyIHRoZWlyIGFic29sdXRlIG9yIHJlbGF0aXZlIHBhdGggc2hvdWxkIGJlIHJldHVybmVkLlxuICovXG5jbGFzcyBNYXRjaFJlY29yZCB7XG4gICAgc3RvcmUgPSBuZXcgTWFwKCk7XG4gICAgYWRkKHRhcmdldCwgYWJzb2x1dGUsIGlmRGlyKSB7XG4gICAgICAgIGNvbnN0IG4gPSAoYWJzb2x1dGUgPyAyIDogMCkgfCAoaWZEaXIgPyAxIDogMCk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLnN0b3JlLmdldCh0YXJnZXQpO1xuICAgICAgICB0aGlzLnN0b3JlLnNldCh0YXJnZXQsIGN1cnJlbnQgPT09IHVuZGVmaW5lZCA/IG4gOiBuICYgY3VycmVudCk7XG4gICAgfVxuICAgIC8vIG1hdGNoLCBhYnNvbHV0ZSwgaWZkaXJcbiAgICBlbnRyaWVzKCkge1xuICAgICAgICByZXR1cm4gWy4uLnRoaXMuc3RvcmUuZW50cmllcygpXS5tYXAoKFtwYXRoLCBuXSkgPT4gW1xuICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgICEhKG4gJiAyKSxcbiAgICAgICAgICAgICEhKG4gJiAxKSxcbiAgICAgICAgXSk7XG4gICAgfVxufVxuZXhwb3J0cy5NYXRjaFJlY29yZCA9IE1hdGNoUmVjb3JkO1xuLyoqXG4gKiBBIGNvbGxlY3Rpb24gb2YgcGF0dGVybnMgdGhhdCBtdXN0IGJlIHByb2Nlc3NlZCBpbiBhIHN1YnNlcXVlbnQgc3RlcFxuICogZm9yIGEgZ2l2ZW4gcGF0aC5cbiAqL1xuY2xhc3MgU3ViV2Fsa3Mge1xuICAgIHN0b3JlID0gbmV3IE1hcCgpO1xuICAgIGFkZCh0YXJnZXQsIHBhdHRlcm4pIHtcbiAgICAgICAgaWYgKCF0YXJnZXQuY2FuUmVhZGRpcigpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3VicyA9IHRoaXMuc3RvcmUuZ2V0KHRhcmdldCk7XG4gICAgICAgIGlmIChzdWJzKSB7XG4gICAgICAgICAgICBpZiAoIXN1YnMuZmluZChwID0+IHAuZ2xvYlN0cmluZygpID09PSBwYXR0ZXJuLmdsb2JTdHJpbmcoKSkpIHtcbiAgICAgICAgICAgICAgICBzdWJzLnB1c2gocGF0dGVybik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5zdG9yZS5zZXQodGFyZ2V0LCBbcGF0dGVybl0pO1xuICAgIH1cbiAgICBnZXQodGFyZ2V0KSB7XG4gICAgICAgIGNvbnN0IHN1YnMgPSB0aGlzLnN0b3JlLmdldCh0YXJnZXQpO1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgaWYgKCFzdWJzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2F0dGVtcHRpbmcgdG8gd2FsayB1bmtub3duIHBhdGgnKTtcbiAgICAgICAgfVxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICByZXR1cm4gc3VicztcbiAgICB9XG4gICAgZW50cmllcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMua2V5cygpLm1hcChrID0+IFtrLCB0aGlzLnN0b3JlLmdldChrKV0pO1xuICAgIH1cbiAgICBrZXlzKCkge1xuICAgICAgICByZXR1cm4gWy4uLnRoaXMuc3RvcmUua2V5cygpXS5maWx0ZXIodCA9PiB0LmNhblJlYWRkaXIoKSk7XG4gICAgfVxufVxuZXhwb3J0cy5TdWJXYWxrcyA9IFN1YldhbGtzO1xuLyoqXG4gKiBUaGUgY2xhc3MgdGhhdCBwcm9jZXNzZXMgcGF0dGVybnMgZm9yIGEgZ2l2ZW4gcGF0aC5cbiAqXG4gKiBIYW5kbGVzIGNoaWxkIGVudHJ5IGZpbHRlcmluZywgYW5kIGRldGVybWluaW5nIHdoZXRoZXIgYSBwYXRoJ3NcbiAqIGRpcmVjdG9yeSBjb250ZW50cyBtdXN0IGJlIHJlYWQuXG4gKi9cbmNsYXNzIFByb2Nlc3NvciB7XG4gICAgaGFzV2Fsa2VkQ2FjaGU7XG4gICAgbWF0Y2hlcyA9IG5ldyBNYXRjaFJlY29yZCgpO1xuICAgIHN1YndhbGtzID0gbmV3IFN1YldhbGtzKCk7XG4gICAgcGF0dGVybnM7XG4gICAgZm9sbG93O1xuICAgIGRvdDtcbiAgICBvcHRzO1xuICAgIGNvbnN0cnVjdG9yKG9wdHMsIGhhc1dhbGtlZENhY2hlKSB7XG4gICAgICAgIHRoaXMub3B0cyA9IG9wdHM7XG4gICAgICAgIHRoaXMuZm9sbG93ID0gISFvcHRzLmZvbGxvdztcbiAgICAgICAgdGhpcy5kb3QgPSAhIW9wdHMuZG90O1xuICAgICAgICB0aGlzLmhhc1dhbGtlZENhY2hlID1cbiAgICAgICAgICAgIGhhc1dhbGtlZENhY2hlID8gaGFzV2Fsa2VkQ2FjaGUuY29weSgpIDogbmV3IEhhc1dhbGtlZENhY2hlKCk7XG4gICAgfVxuICAgIHByb2Nlc3NQYXR0ZXJucyh0YXJnZXQsIHBhdHRlcm5zKSB7XG4gICAgICAgIHRoaXMucGF0dGVybnMgPSBwYXR0ZXJucztcbiAgICAgICAgY29uc3QgcHJvY2Vzc2luZ1NldCA9IHBhdHRlcm5zLm1hcChwID0+IFt0YXJnZXQsIHBdKTtcbiAgICAgICAgLy8gbWFwIG9mIHBhdGhzIHRvIHRoZSBtYWdpYy1zdGFydGluZyBzdWJ3YWxrcyB0aGV5IG5lZWQgdG8gd2Fsa1xuICAgICAgICAvLyBmaXJzdCBpdGVtIGluIHBhdHRlcm5zIGlzIHRoZSBmaWx0ZXJcbiAgICAgICAgZm9yIChsZXQgW3QsIHBhdHRlcm5dIG9mIHByb2Nlc3NpbmdTZXQpIHtcbiAgICAgICAgICAgIHRoaXMuaGFzV2Fsa2VkQ2FjaGUuc3RvcmVXYWxrZWQodCwgcGF0dGVybik7XG4gICAgICAgICAgICBjb25zdCByb290ID0gcGF0dGVybi5yb290KCk7XG4gICAgICAgICAgICBjb25zdCBhYnNvbHV0ZSA9IHBhdHRlcm4uaXNBYnNvbHV0ZSgpICYmIHRoaXMub3B0cy5hYnNvbHV0ZSAhPT0gZmFsc2U7XG4gICAgICAgICAgICAvLyBzdGFydCBhYnNvbHV0ZSBwYXR0ZXJucyBhdCByb290XG4gICAgICAgICAgICBpZiAocm9vdCkge1xuICAgICAgICAgICAgICAgIHQgPSB0LnJlc29sdmUocm9vdCA9PT0gJy8nICYmIHRoaXMub3B0cy5yb290ICE9PSB1bmRlZmluZWQgP1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdHMucm9vdFxuICAgICAgICAgICAgICAgICAgICA6IHJvb3QpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3QgPSBwYXR0ZXJuLnJlc3QoKTtcbiAgICAgICAgICAgICAgICBpZiAoIXJlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRjaGVzLmFkZCh0LCB0cnVlLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcGF0dGVybiA9IHJlc3Q7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHQuaXNFTk9FTlQoKSlcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGxldCBwO1xuICAgICAgICAgICAgbGV0IHJlc3Q7XG4gICAgICAgICAgICBsZXQgY2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICAgICAgd2hpbGUgKHR5cGVvZiAocCA9IHBhdHRlcm4ucGF0dGVybigpKSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgICAgICAocmVzdCA9IHBhdHRlcm4ucmVzdCgpKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGMgPSB0LnJlc29sdmUocCk7XG4gICAgICAgICAgICAgICAgdCA9IGM7XG4gICAgICAgICAgICAgICAgcGF0dGVybiA9IHJlc3Q7XG4gICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwID0gcGF0dGVybi5wYXR0ZXJuKCk7XG4gICAgICAgICAgICByZXN0ID0gcGF0dGVybi5yZXN0KCk7XG4gICAgICAgICAgICBpZiAoY2hhbmdlZCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmhhc1dhbGtlZENhY2hlLmhhc1dhbGtlZCh0LCBwYXR0ZXJuKSlcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgdGhpcy5oYXNXYWxrZWRDYWNoZS5zdG9yZVdhbGtlZCh0LCBwYXR0ZXJuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIG5vdyB3ZSBoYXZlIGVpdGhlciBhIGZpbmFsIHN0cmluZyBmb3IgYSBrbm93biBlbnRyeSxcbiAgICAgICAgICAgIC8vIG1vcmUgc3RyaW5ncyBmb3IgYW4gdW5rbm93biBlbnRyeSxcbiAgICAgICAgICAgIC8vIG9yIGEgcGF0dGVybiBzdGFydGluZyB3aXRoIG1hZ2ljLCBtb3VudGVkIG9uIHQuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHAgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgLy8gbXVzdCBub3QgYmUgZmluYWwgZW50cnksIG90aGVyd2lzZSB3ZSB3b3VsZCBoYXZlXG4gICAgICAgICAgICAgICAgLy8gY29uY2F0ZW5hdGVkIGl0IGVhcmxpZXIuXG4gICAgICAgICAgICAgICAgY29uc3QgaWZEaXIgPSBwID09PSAnLi4nIHx8IHAgPT09ICcnIHx8IHAgPT09ICcuJztcbiAgICAgICAgICAgICAgICB0aGlzLm1hdGNoZXMuYWRkKHQucmVzb2x2ZShwKSwgYWJzb2x1dGUsIGlmRGlyKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHAgPT09IG1pbmltYXRjaF8xLkdMT0JTVEFSKSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgbm8gcmVzdCwgbWF0Y2ggYW5kIHN1YndhbGsgcGF0dGVyblxuICAgICAgICAgICAgICAgIC8vIGlmIHJlc3QsIHByb2Nlc3MgcmVzdCBhbmQgc3Vid2FsayBwYXR0ZXJuXG4gICAgICAgICAgICAgICAgLy8gaWYgaXQncyBhIHN5bWxpbmssIGJ1dCB3ZSBkaWRuJ3QgZ2V0IGhlcmUgYnkgd2F5IG9mIGFcbiAgICAgICAgICAgICAgICAvLyBnbG9ic3RhciBtYXRjaCAobWVhbmluZyBpdCdzIHRoZSBmaXJzdCB0aW1lIFRISVMgZ2xvYnN0YXJcbiAgICAgICAgICAgICAgICAvLyBoYXMgdHJhdmVyc2VkIGEgc3ltbGluayksIHRoZW4gd2UgZm9sbG93IGl0LiBPdGhlcndpc2UsIHN0b3AuXG4gICAgICAgICAgICAgICAgaWYgKCF0LmlzU3ltYm9saWNMaW5rKCkgfHxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2xsb3cgfHxcbiAgICAgICAgICAgICAgICAgICAgcGF0dGVybi5jaGVja0ZvbGxvd0dsb2JzdGFyKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJ3YWxrcy5hZGQodCwgcGF0dGVybik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHJwID0gcmVzdD8ucGF0dGVybigpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJyZXN0ID0gcmVzdD8ucmVzdCgpO1xuICAgICAgICAgICAgICAgIGlmICghcmVzdCB8fCAoKHJwID09PSAnJyB8fCBycCA9PT0gJy4nKSAmJiAhcnJlc3QpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIG9ubHkgSEFTIHRvIGJlIGEgZGlyIGlmIGl0IGVuZHMgaW4gKiovIG9yICoqLy5cbiAgICAgICAgICAgICAgICAgICAgLy8gYnV0IGVuZGluZyBpbiAqKiB3aWxsIG1hdGNoIGZpbGVzIGFzIHdlbGwuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2hlcy5hZGQodCwgYWJzb2x1dGUsIHJwID09PSAnJyB8fCBycCA9PT0gJy4nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChycCA9PT0gJy4uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyB3b3VsZCBtZWFuIHlvdSdyZSBtYXRjaGluZyAqKi8uLiBhdCB0aGUgZnMgcm9vdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCBubyB0aGFua3MsIEknbSBub3QgZ29ubmEgdGVzdCB0aGF0IHNwZWNpZmljIGNhc2UuXG4gICAgICAgICAgICAgICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRwID0gdC5wYXJlbnQgfHwgdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJyZXN0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2hlcy5hZGQodHAsIGFic29sdXRlLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCF0aGlzLmhhc1dhbGtlZENhY2hlLmhhc1dhbGtlZCh0cCwgcnJlc3QpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJ3YWxrcy5hZGQodHAsIHJyZXN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHAgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN1YndhbGtzLmFkZCh0LCBwYXR0ZXJuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgc3Vid2Fsa1RhcmdldHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN1YndhbGtzLmtleXMoKTtcbiAgICB9XG4gICAgY2hpbGQoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvY2Vzc29yKHRoaXMub3B0cywgdGhpcy5oYXNXYWxrZWRDYWNoZSk7XG4gICAgfVxuICAgIC8vIHJldHVybiBhIG5ldyBQcm9jZXNzb3IgY29udGFpbmluZyB0aGUgc3Vid2Fsa3MgZm9yIGVhY2hcbiAgICAvLyBjaGlsZCBlbnRyeSwgYW5kIGEgc2V0IG9mIG1hdGNoZXMsIGFuZFxuICAgIC8vIGEgaGFzV2Fsa2VkQ2FjaGUgdGhhdCdzIGEgY29weSBvZiB0aGlzIG9uZVxuICAgIC8vIHRoZW4gd2UncmUgZ29pbmcgdG8gY2FsbFxuICAgIGZpbHRlckVudHJpZXMocGFyZW50LCBlbnRyaWVzKSB7XG4gICAgICAgIGNvbnN0IHBhdHRlcm5zID0gdGhpcy5zdWJ3YWxrcy5nZXQocGFyZW50KTtcbiAgICAgICAgLy8gcHV0IG1hdGNoZXMgYW5kIGVudHJ5IHdhbGtzIGludG8gdGhlIHJlc3VsdHMgcHJvY2Vzc29yXG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSB0aGlzLmNoaWxkKCk7XG4gICAgICAgIGZvciAoY29uc3QgZSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgcGF0dGVybnMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhYnNvbHV0ZSA9IHBhdHRlcm4uaXNBYnNvbHV0ZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHAgPSBwYXR0ZXJuLnBhdHRlcm4oKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN0ID0gcGF0dGVybi5yZXN0KCk7XG4gICAgICAgICAgICAgICAgaWYgKHAgPT09IG1pbmltYXRjaF8xLkdMT0JTVEFSKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMudGVzdEdsb2JzdGFyKGUsIHBhdHRlcm4sIHJlc3QsIGFic29sdXRlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAocCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnRlc3RSZWdFeHAoZSwgcCwgcmVzdCwgYWJzb2x1dGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy50ZXN0U3RyaW5nKGUsIHAsIHJlc3QsIGFic29sdXRlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuICAgIHRlc3RHbG9ic3RhcihlLCBwYXR0ZXJuLCByZXN0LCBhYnNvbHV0ZSkge1xuICAgICAgICBpZiAodGhpcy5kb3QgfHwgIWUubmFtZS5zdGFydHNXaXRoKCcuJykpIHtcbiAgICAgICAgICAgIGlmICghcGF0dGVybi5oYXNNb3JlKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1hdGNoZXMuYWRkKGUsIGFic29sdXRlLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5jYW5SZWFkZGlyKCkpIHtcbiAgICAgICAgICAgICAgICAvLyBpZiB3ZSdyZSBpbiBmb2xsb3cgbW9kZSBvciBpdCdzIG5vdCBhIHN5bWxpbmssIGp1c3Qga2VlcFxuICAgICAgICAgICAgICAgIC8vIHRlc3RpbmcgdGhlIHNhbWUgcGF0dGVybi4gSWYgdGhlcmUncyBtb3JlIGFmdGVyIHRoZSBnbG9ic3RhcixcbiAgICAgICAgICAgICAgICAvLyB0aGVuIHRoaXMgc3ltbGluayBjb25zdW1lcyB0aGUgZ2xvYnN0YXIuIElmIG5vdCwgdGhlbiB3ZSBjYW5cbiAgICAgICAgICAgICAgICAvLyBmb2xsb3cgYXQgbW9zdCBPTkUgc3ltbGluayBhbG9uZyB0aGUgd2F5LCBzbyB3ZSBtYXJrIGl0LCB3aGljaFxuICAgICAgICAgICAgICAgIC8vIGFsc28gY2hlY2tzIHRvIGVuc3VyZSB0aGF0IGl0IHdhc24ndCBhbHJlYWR5IG1hcmtlZC5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5mb2xsb3cgfHwgIWUuaXNTeW1ib2xpY0xpbmsoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN1YndhbGtzLmFkZChlLCBwYXR0ZXJuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZS5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN0ICYmIHBhdHRlcm4uY2hlY2tGb2xsb3dHbG9ic3RhcigpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1YndhbGtzLmFkZChlLCByZXN0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChwYXR0ZXJuLm1hcmtGb2xsb3dHbG9ic3RhcigpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1YndhbGtzLmFkZChlLCBwYXR0ZXJuKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBpZiB0aGUgTkVYVCB0aGluZyBtYXRjaGVzIHRoaXMgZW50cnksIHRoZW4gYWxzbyBhZGRcbiAgICAgICAgLy8gdGhlIHJlc3QuXG4gICAgICAgIGlmIChyZXN0KSB7XG4gICAgICAgICAgICBjb25zdCBycCA9IHJlc3QucGF0dGVybigpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBycCA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgICAgICAvLyBkb3RzIGFuZCBlbXB0eSB3ZXJlIGhhbmRsZWQgYWxyZWFkeVxuICAgICAgICAgICAgICAgIHJwICE9PSAnLi4nICYmXG4gICAgICAgICAgICAgICAgcnAgIT09ICcnICYmXG4gICAgICAgICAgICAgICAgcnAgIT09ICcuJykge1xuICAgICAgICAgICAgICAgIHRoaXMudGVzdFN0cmluZyhlLCBycCwgcmVzdC5yZXN0KCksIGFic29sdXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHJwID09PSAnLi4nKSB7XG4gICAgICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICAgICAgY29uc3QgZXAgPSBlLnBhcmVudCB8fCBlO1xuICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICAgICAgdGhpcy5zdWJ3YWxrcy5hZGQoZXAsIHJlc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAocnAgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRlc3RSZWdFeHAoZSwgcnAsIHJlc3QucmVzdCgpLCBhYnNvbHV0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGVzdFJlZ0V4cChlLCBwLCByZXN0LCBhYnNvbHV0ZSkge1xuICAgICAgICBpZiAoIXAudGVzdChlLm5hbWUpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAoIXJlc3QpIHtcbiAgICAgICAgICAgIHRoaXMubWF0Y2hlcy5hZGQoZSwgYWJzb2x1dGUsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3Vid2Fsa3MuYWRkKGUsIHJlc3QpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRlc3RTdHJpbmcoZSwgcCwgcmVzdCwgYWJzb2x1dGUpIHtcbiAgICAgICAgLy8gc2hvdWxkIG5ldmVyIGhhcHBlbj9cbiAgICAgICAgaWYgKCFlLmlzTmFtZWQocCkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmICghcmVzdCkge1xuICAgICAgICAgICAgdGhpcy5tYXRjaGVzLmFkZChlLCBhYnNvbHV0ZSwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zdWJ3YWxrcy5hZGQoZSwgcmVzdCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLlByb2Nlc3NvciA9IFByb2Nlc3Nvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXByb2Nlc3Nvci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5HbG9iU3RyZWFtID0gZXhwb3J0cy5HbG9iV2Fsa2VyID0gZXhwb3J0cy5HbG9iVXRpbCA9IHZvaWQgMDtcbi8qKlxuICogU2luZ2xlLXVzZSB1dGlsaXR5IGNsYXNzZXMgdG8gcHJvdmlkZSBmdW5jdGlvbmFsaXR5IHRvIHRoZSB7QGxpbmsgR2xvYn1cbiAqIG1ldGhvZHMuXG4gKlxuICogQG1vZHVsZVxuICovXG5jb25zdCBtaW5pcGFzc18xID0gcmVxdWlyZShcIm1pbmlwYXNzXCIpO1xuY29uc3QgaWdub3JlX2pzXzEgPSByZXF1aXJlKFwiLi9pZ25vcmUuanNcIik7XG5jb25zdCBwcm9jZXNzb3JfanNfMSA9IHJlcXVpcmUoXCIuL3Byb2Nlc3Nvci5qc1wiKTtcbmNvbnN0IG1ha2VJZ25vcmUgPSAoaWdub3JlLCBvcHRzKSA9PiB0eXBlb2YgaWdub3JlID09PSAnc3RyaW5nJyA/IG5ldyBpZ25vcmVfanNfMS5JZ25vcmUoW2lnbm9yZV0sIG9wdHMpXG4gICAgOiBBcnJheS5pc0FycmF5KGlnbm9yZSkgPyBuZXcgaWdub3JlX2pzXzEuSWdub3JlKGlnbm9yZSwgb3B0cylcbiAgICAgICAgOiBpZ25vcmU7XG4vKipcbiAqIGJhc2ljIHdhbGtpbmcgdXRpbGl0aWVzIHRoYXQgYWxsIHRoZSBnbG9iIHdhbGtlciB0eXBlcyB1c2VcbiAqL1xuY2xhc3MgR2xvYlV0aWwge1xuICAgIHBhdGg7XG4gICAgcGF0dGVybnM7XG4gICAgb3B0cztcbiAgICBzZWVuID0gbmV3IFNldCgpO1xuICAgIHBhdXNlZCA9IGZhbHNlO1xuICAgIGFib3J0ZWQgPSBmYWxzZTtcbiAgICAjb25SZXN1bWUgPSBbXTtcbiAgICAjaWdub3JlO1xuICAgICNzZXA7XG4gICAgc2lnbmFsO1xuICAgIG1heERlcHRoO1xuICAgIGluY2x1ZGVDaGlsZE1hdGNoZXM7XG4gICAgY29uc3RydWN0b3IocGF0dGVybnMsIHBhdGgsIG9wdHMpIHtcbiAgICAgICAgdGhpcy5wYXR0ZXJucyA9IHBhdHRlcm5zO1xuICAgICAgICB0aGlzLnBhdGggPSBwYXRoO1xuICAgICAgICB0aGlzLm9wdHMgPSBvcHRzO1xuICAgICAgICB0aGlzLiNzZXAgPSAhb3B0cy5wb3NpeCAmJiBvcHRzLnBsYXRmb3JtID09PSAnd2luMzInID8gJ1xcXFwnIDogJy8nO1xuICAgICAgICB0aGlzLmluY2x1ZGVDaGlsZE1hdGNoZXMgPSBvcHRzLmluY2x1ZGVDaGlsZE1hdGNoZXMgIT09IGZhbHNlO1xuICAgICAgICBpZiAob3B0cy5pZ25vcmUgfHwgIXRoaXMuaW5jbHVkZUNoaWxkTWF0Y2hlcykge1xuICAgICAgICAgICAgdGhpcy4jaWdub3JlID0gbWFrZUlnbm9yZShvcHRzLmlnbm9yZSA/PyBbXSwgb3B0cyk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaW5jbHVkZUNoaWxkTWF0Y2hlcyAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiB0aGlzLiNpZ25vcmUuYWRkICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbSA9ICdjYW5ub3QgaWdub3JlIGNoaWxkIG1hdGNoZXMsIGlnbm9yZSBsYWNrcyBhZGQoKSBtZXRob2QuJztcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWdub3JlLCBhbHdheXMgc2V0IHdpdGggbWF4RGVwdGgsIGJ1dCBpdCdzIG9wdGlvbmFsIG9uIHRoZVxuICAgICAgICAvLyBHbG9iT3B0aW9ucyB0eXBlXG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICB0aGlzLm1heERlcHRoID0gb3B0cy5tYXhEZXB0aCB8fCBJbmZpbml0eTtcbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgaWYgKG9wdHMuc2lnbmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNpZ25hbCA9IG9wdHMuc2lnbmFsO1xuICAgICAgICAgICAgdGhpcy5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy4jb25SZXN1bWUubGVuZ3RoID0gMDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgICNpZ25vcmVkKHBhdGgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2Vlbi5oYXMocGF0aCkgfHwgISF0aGlzLiNpZ25vcmU/Lmlnbm9yZWQ/LihwYXRoKTtcbiAgICB9XG4gICAgI2NoaWxkcmVuSWdub3JlZChwYXRoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuI2lnbm9yZT8uY2hpbGRyZW5JZ25vcmVkPy4ocGF0aCk7XG4gICAgfVxuICAgIC8vIGJhY2twcmVzc3VyZSBtZWNoYW5pc21cbiAgICBwYXVzZSgpIHtcbiAgICAgICAgdGhpcy5wYXVzZWQgPSB0cnVlO1xuICAgIH1cbiAgICByZXN1bWUoKSB7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICBpZiAodGhpcy5zaWduYWw/LmFib3J0ZWQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIHRoaXMucGF1c2VkID0gZmFsc2U7XG4gICAgICAgIGxldCBmbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgd2hpbGUgKCF0aGlzLnBhdXNlZCAmJiAoZm4gPSB0aGlzLiNvblJlc3VtZS5zaGlmdCgpKSkge1xuICAgICAgICAgICAgZm4oKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBvblJlc3VtZShmbikge1xuICAgICAgICBpZiAodGhpcy5zaWduYWw/LmFib3J0ZWQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICBpZiAoIXRoaXMucGF1c2VkKSB7XG4gICAgICAgICAgICBmbigpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgICAgIHRoaXMuI29uUmVzdW1lLnB1c2goZm4pO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIGRvIHRoZSByZXF1aXNpdGUgcmVhbHBhdGgvc3RhdCBjaGVja2luZywgYW5kIHJldHVybiB0aGUgcGF0aFxuICAgIC8vIHRvIGFkZCBvciB1bmRlZmluZWQgdG8gZmlsdGVyIGl0IG91dC5cbiAgICBhc3luYyBtYXRjaENoZWNrKGUsIGlmRGlyKSB7XG4gICAgICAgIGlmIChpZkRpciAmJiB0aGlzLm9wdHMubm9kaXIpXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICBsZXQgcnBjO1xuICAgICAgICBpZiAodGhpcy5vcHRzLnJlYWxwYXRoKSB7XG4gICAgICAgICAgICBycGMgPSBlLnJlYWxwYXRoQ2FjaGVkKCkgfHwgKGF3YWl0IGUucmVhbHBhdGgoKSk7XG4gICAgICAgICAgICBpZiAoIXJwYylcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgZSA9IHJwYztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZWVkU3RhdCA9IGUuaXNVbmtub3duKCkgfHwgdGhpcy5vcHRzLnN0YXQ7XG4gICAgICAgIGNvbnN0IHMgPSBuZWVkU3RhdCA/IGF3YWl0IGUubHN0YXQoKSA6IGU7XG4gICAgICAgIGlmICh0aGlzLm9wdHMuZm9sbG93ICYmIHRoaXMub3B0cy5ub2RpciAmJiBzPy5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBhd2FpdCBzLnJlYWxwYXRoKCk7XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgICAgIGlmICh0YXJnZXQgJiYgKHRhcmdldC5pc1Vua25vd24oKSB8fCB0aGlzLm9wdHMuc3RhdCkpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0YXJnZXQubHN0YXQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubWF0Y2hDaGVja1Rlc3QocywgaWZEaXIpO1xuICAgIH1cbiAgICBtYXRjaENoZWNrVGVzdChlLCBpZkRpcikge1xuICAgICAgICByZXR1cm4gKGUgJiZcbiAgICAgICAgICAgICh0aGlzLm1heERlcHRoID09PSBJbmZpbml0eSB8fCBlLmRlcHRoKCkgPD0gdGhpcy5tYXhEZXB0aCkgJiZcbiAgICAgICAgICAgICghaWZEaXIgfHwgZS5jYW5SZWFkZGlyKCkpICYmXG4gICAgICAgICAgICAoIXRoaXMub3B0cy5ub2RpciB8fCAhZS5pc0RpcmVjdG9yeSgpKSAmJlxuICAgICAgICAgICAgKCF0aGlzLm9wdHMubm9kaXIgfHxcbiAgICAgICAgICAgICAgICAhdGhpcy5vcHRzLmZvbGxvdyB8fFxuICAgICAgICAgICAgICAgICFlLmlzU3ltYm9saWNMaW5rKCkgfHxcbiAgICAgICAgICAgICAgICAhZS5yZWFscGF0aENhY2hlZCgpPy5pc0RpcmVjdG9yeSgpKSAmJlxuICAgICAgICAgICAgIXRoaXMuI2lnbm9yZWQoZSkpID9cbiAgICAgICAgICAgIGVcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICBtYXRjaENoZWNrU3luYyhlLCBpZkRpcikge1xuICAgICAgICBpZiAoaWZEaXIgJiYgdGhpcy5vcHRzLm5vZGlyKVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IHJwYztcbiAgICAgICAgaWYgKHRoaXMub3B0cy5yZWFscGF0aCkge1xuICAgICAgICAgICAgcnBjID0gZS5yZWFscGF0aENhY2hlZCgpIHx8IGUucmVhbHBhdGhTeW5jKCk7XG4gICAgICAgICAgICBpZiAoIXJwYylcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgZSA9IHJwYztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZWVkU3RhdCA9IGUuaXNVbmtub3duKCkgfHwgdGhpcy5vcHRzLnN0YXQ7XG4gICAgICAgIGNvbnN0IHMgPSBuZWVkU3RhdCA/IGUubHN0YXRTeW5jKCkgOiBlO1xuICAgICAgICBpZiAodGhpcy5vcHRzLmZvbGxvdyAmJiB0aGlzLm9wdHMubm9kaXIgJiYgcz8uaXNTeW1ib2xpY0xpbmsoKSkge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gcy5yZWFscGF0aFN5bmMoKTtcbiAgICAgICAgICAgIGlmICh0YXJnZXQgJiYgKHRhcmdldD8uaXNVbmtub3duKCkgfHwgdGhpcy5vcHRzLnN0YXQpKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0LmxzdGF0U3luYygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLm1hdGNoQ2hlY2tUZXN0KHMsIGlmRGlyKTtcbiAgICB9XG4gICAgbWF0Y2hGaW5pc2goZSwgYWJzb2x1dGUpIHtcbiAgICAgICAgaWYgKHRoaXMuI2lnbm9yZWQoZSkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIC8vIHdlIGtub3cgd2UgaGF2ZSBhbiBpZ25vcmUgaWYgdGhpcyBpcyBmYWxzZSwgYnV0IFRTIGRvZXNuJ3RcbiAgICAgICAgaWYgKCF0aGlzLmluY2x1ZGVDaGlsZE1hdGNoZXMgJiYgdGhpcy4jaWdub3JlPy5hZGQpIHtcbiAgICAgICAgICAgIGNvbnN0IGlnbiA9IGAke2UucmVsYXRpdmVQb3NpeCgpfS8qKmA7XG4gICAgICAgICAgICB0aGlzLiNpZ25vcmUuYWRkKGlnbik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWJzID0gdGhpcy5vcHRzLmFic29sdXRlID09PSB1bmRlZmluZWQgPyBhYnNvbHV0ZSA6IHRoaXMub3B0cy5hYnNvbHV0ZTtcbiAgICAgICAgdGhpcy5zZWVuLmFkZChlKTtcbiAgICAgICAgY29uc3QgbWFyayA9IHRoaXMub3B0cy5tYXJrICYmIGUuaXNEaXJlY3RvcnkoKSA/IHRoaXMuI3NlcCA6ICcnO1xuICAgICAgICAvLyBvaywgd2UgaGF2ZSB3aGF0IHdlIG5lZWQhXG4gICAgICAgIGlmICh0aGlzLm9wdHMud2l0aEZpbGVUeXBlcykge1xuICAgICAgICAgICAgdGhpcy5tYXRjaEVtaXQoZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYWJzKSB7XG4gICAgICAgICAgICBjb25zdCBhYnMgPSB0aGlzLm9wdHMucG9zaXggPyBlLmZ1bGxwYXRoUG9zaXgoKSA6IGUuZnVsbHBhdGgoKTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2hFbWl0KGFicyArIG1hcmspO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcmVsID0gdGhpcy5vcHRzLnBvc2l4ID8gZS5yZWxhdGl2ZVBvc2l4KCkgOiBlLnJlbGF0aXZlKCk7XG4gICAgICAgICAgICBjb25zdCBwcmUgPSB0aGlzLm9wdHMuZG90UmVsYXRpdmUgJiYgIXJlbC5zdGFydHNXaXRoKCcuLicgKyB0aGlzLiNzZXApID9cbiAgICAgICAgICAgICAgICAnLicgKyB0aGlzLiNzZXBcbiAgICAgICAgICAgICAgICA6ICcnO1xuICAgICAgICAgICAgdGhpcy5tYXRjaEVtaXQoIXJlbCA/ICcuJyArIG1hcmsgOiBwcmUgKyByZWwgKyBtYXJrKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBtYXRjaChlLCBhYnNvbHV0ZSwgaWZEaXIpIHtcbiAgICAgICAgY29uc3QgcCA9IGF3YWl0IHRoaXMubWF0Y2hDaGVjayhlLCBpZkRpcik7XG4gICAgICAgIGlmIChwKVxuICAgICAgICAgICAgdGhpcy5tYXRjaEZpbmlzaChwLCBhYnNvbHV0ZSk7XG4gICAgfVxuICAgIG1hdGNoU3luYyhlLCBhYnNvbHV0ZSwgaWZEaXIpIHtcbiAgICAgICAgY29uc3QgcCA9IHRoaXMubWF0Y2hDaGVja1N5bmMoZSwgaWZEaXIpO1xuICAgICAgICBpZiAocClcbiAgICAgICAgICAgIHRoaXMubWF0Y2hGaW5pc2gocCwgYWJzb2x1dGUpO1xuICAgIH1cbiAgICB3YWxrQ0IodGFyZ2V0LCBwYXR0ZXJucywgY2IpIHtcbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIGlmICh0aGlzLnNpZ25hbD8uYWJvcnRlZClcbiAgICAgICAgICAgIGNiKCk7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIHRoaXMud2Fsa0NCMih0YXJnZXQsIHBhdHRlcm5zLCBuZXcgcHJvY2Vzc29yX2pzXzEuUHJvY2Vzc29yKHRoaXMub3B0cyksIGNiKTtcbiAgICB9XG4gICAgd2Fsa0NCMih0YXJnZXQsIHBhdHRlcm5zLCBwcm9jZXNzb3IsIGNiKSB7XG4gICAgICAgIGlmICh0aGlzLiNjaGlsZHJlbklnbm9yZWQodGFyZ2V0KSlcbiAgICAgICAgICAgIHJldHVybiBjYigpO1xuICAgICAgICBpZiAodGhpcy5zaWduYWw/LmFib3J0ZWQpXG4gICAgICAgICAgICBjYigpO1xuICAgICAgICBpZiAodGhpcy5wYXVzZWQpIHtcbiAgICAgICAgICAgIHRoaXMub25SZXN1bWUoKCkgPT4gdGhpcy53YWxrQ0IyKHRhcmdldCwgcGF0dGVybnMsIHByb2Nlc3NvciwgY2IpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBwcm9jZXNzb3IucHJvY2Vzc1BhdHRlcm5zKHRhcmdldCwgcGF0dGVybnMpO1xuICAgICAgICAvLyBkb25lIHByb2Nlc3NpbmcuICBhbGwgb2YgdGhlIGFib3ZlIGlzIHN5bmMsIGNhbiBiZSBhYnN0cmFjdGVkIG91dC5cbiAgICAgICAgLy8gc3Vid2Fsa3MgaXMgYSBtYXAgb2YgcGF0aHMgdG8gdGhlIGVudHJ5IGZpbHRlcnMgdGhleSBuZWVkXG4gICAgICAgIC8vIG1hdGNoZXMgaXMgYSBtYXAgb2YgcGF0aHMgdG8gW2Fic29sdXRlLCBpZkRpcl0gdHVwbGVzLlxuICAgICAgICBsZXQgdGFza3MgPSAxO1xuICAgICAgICBjb25zdCBuZXh0ID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKC0tdGFza3MgPT09IDApXG4gICAgICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgfTtcbiAgICAgICAgZm9yIChjb25zdCBbbSwgYWJzb2x1dGUsIGlmRGlyXSBvZiBwcm9jZXNzb3IubWF0Y2hlcy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLiNpZ25vcmVkKG0pKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgdGFza3MrKztcbiAgICAgICAgICAgIHRoaXMubWF0Y2gobSwgYWJzb2x1dGUsIGlmRGlyKS50aGVuKCgpID0+IG5leHQoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCB0IG9mIHByb2Nlc3Nvci5zdWJ3YWxrVGFyZ2V0cygpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5tYXhEZXB0aCAhPT0gSW5maW5pdHkgJiYgdC5kZXB0aCgpID49IHRoaXMubWF4RGVwdGgpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhc2tzKys7XG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbkNhY2hlZCA9IHQucmVhZGRpckNhY2hlZCgpO1xuICAgICAgICAgICAgaWYgKHQuY2FsbGVkUmVhZGRpcigpKVxuICAgICAgICAgICAgICAgIHRoaXMud2Fsa0NCMyh0LCBjaGlsZHJlbkNhY2hlZCwgcHJvY2Vzc29yLCBuZXh0KTtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHQucmVhZGRpckNCKChfLCBlbnRyaWVzKSA9PiB0aGlzLndhbGtDQjModCwgZW50cmllcywgcHJvY2Vzc29yLCBuZXh0KSwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbmV4dCgpO1xuICAgIH1cbiAgICB3YWxrQ0IzKHRhcmdldCwgZW50cmllcywgcHJvY2Vzc29yLCBjYikge1xuICAgICAgICBwcm9jZXNzb3IgPSBwcm9jZXNzb3IuZmlsdGVyRW50cmllcyh0YXJnZXQsIGVudHJpZXMpO1xuICAgICAgICBsZXQgdGFza3MgPSAxO1xuICAgICAgICBjb25zdCBuZXh0ID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKC0tdGFza3MgPT09IDApXG4gICAgICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgfTtcbiAgICAgICAgZm9yIChjb25zdCBbbSwgYWJzb2x1dGUsIGlmRGlyXSBvZiBwcm9jZXNzb3IubWF0Y2hlcy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLiNpZ25vcmVkKG0pKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgdGFza3MrKztcbiAgICAgICAgICAgIHRoaXMubWF0Y2gobSwgYWJzb2x1dGUsIGlmRGlyKS50aGVuKCgpID0+IG5leHQoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBbdGFyZ2V0LCBwYXR0ZXJuc10gb2YgcHJvY2Vzc29yLnN1YndhbGtzLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgdGFza3MrKztcbiAgICAgICAgICAgIHRoaXMud2Fsa0NCMih0YXJnZXQsIHBhdHRlcm5zLCBwcm9jZXNzb3IuY2hpbGQoKSwgbmV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgbmV4dCgpO1xuICAgIH1cbiAgICB3YWxrQ0JTeW5jKHRhcmdldCwgcGF0dGVybnMsIGNiKSB7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICBpZiAodGhpcy5zaWduYWw/LmFib3J0ZWQpXG4gICAgICAgICAgICBjYigpO1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICB0aGlzLndhbGtDQjJTeW5jKHRhcmdldCwgcGF0dGVybnMsIG5ldyBwcm9jZXNzb3JfanNfMS5Qcm9jZXNzb3IodGhpcy5vcHRzKSwgY2IpO1xuICAgIH1cbiAgICB3YWxrQ0IyU3luYyh0YXJnZXQsIHBhdHRlcm5zLCBwcm9jZXNzb3IsIGNiKSB7XG4gICAgICAgIGlmICh0aGlzLiNjaGlsZHJlbklnbm9yZWQodGFyZ2V0KSlcbiAgICAgICAgICAgIHJldHVybiBjYigpO1xuICAgICAgICBpZiAodGhpcy5zaWduYWw/LmFib3J0ZWQpXG4gICAgICAgICAgICBjYigpO1xuICAgICAgICBpZiAodGhpcy5wYXVzZWQpIHtcbiAgICAgICAgICAgIHRoaXMub25SZXN1bWUoKCkgPT4gdGhpcy53YWxrQ0IyU3luYyh0YXJnZXQsIHBhdHRlcm5zLCBwcm9jZXNzb3IsIGNiKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcHJvY2Vzc29yLnByb2Nlc3NQYXR0ZXJucyh0YXJnZXQsIHBhdHRlcm5zKTtcbiAgICAgICAgLy8gZG9uZSBwcm9jZXNzaW5nLiAgYWxsIG9mIHRoZSBhYm92ZSBpcyBzeW5jLCBjYW4gYmUgYWJzdHJhY3RlZCBvdXQuXG4gICAgICAgIC8vIHN1YndhbGtzIGlzIGEgbWFwIG9mIHBhdGhzIHRvIHRoZSBlbnRyeSBmaWx0ZXJzIHRoZXkgbmVlZFxuICAgICAgICAvLyBtYXRjaGVzIGlzIGEgbWFwIG9mIHBhdGhzIHRvIFthYnNvbHV0ZSwgaWZEaXJdIHR1cGxlcy5cbiAgICAgICAgbGV0IHRhc2tzID0gMTtcbiAgICAgICAgY29uc3QgbmV4dCA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmICgtLXRhc2tzID09PSAwKVxuICAgICAgICAgICAgICAgIGNiKCk7XG4gICAgICAgIH07XG4gICAgICAgIGZvciAoY29uc3QgW20sIGFic29sdXRlLCBpZkRpcl0gb2YgcHJvY2Vzc29yLm1hdGNoZXMuZW50cmllcygpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy4jaWdub3JlZChtKSlcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2hTeW5jKG0sIGFic29sdXRlLCBpZkRpcik7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCB0IG9mIHByb2Nlc3Nvci5zdWJ3YWxrVGFyZ2V0cygpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5tYXhEZXB0aCAhPT0gSW5maW5pdHkgJiYgdC5kZXB0aCgpID49IHRoaXMubWF4RGVwdGgpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhc2tzKys7XG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHQucmVhZGRpclN5bmMoKTtcbiAgICAgICAgICAgIHRoaXMud2Fsa0NCM1N5bmModCwgY2hpbGRyZW4sIHByb2Nlc3NvciwgbmV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgbmV4dCgpO1xuICAgIH1cbiAgICB3YWxrQ0IzU3luYyh0YXJnZXQsIGVudHJpZXMsIHByb2Nlc3NvciwgY2IpIHtcbiAgICAgICAgcHJvY2Vzc29yID0gcHJvY2Vzc29yLmZpbHRlckVudHJpZXModGFyZ2V0LCBlbnRyaWVzKTtcbiAgICAgICAgbGV0IHRhc2tzID0gMTtcbiAgICAgICAgY29uc3QgbmV4dCA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmICgtLXRhc2tzID09PSAwKVxuICAgICAgICAgICAgICAgIGNiKCk7XG4gICAgICAgIH07XG4gICAgICAgIGZvciAoY29uc3QgW20sIGFic29sdXRlLCBpZkRpcl0gb2YgcHJvY2Vzc29yLm1hdGNoZXMuZW50cmllcygpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy4jaWdub3JlZChtKSlcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2hTeW5jKG0sIGFic29sdXRlLCBpZkRpcik7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBbdGFyZ2V0LCBwYXR0ZXJuc10gb2YgcHJvY2Vzc29yLnN1YndhbGtzLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgdGFza3MrKztcbiAgICAgICAgICAgIHRoaXMud2Fsa0NCMlN5bmModGFyZ2V0LCBwYXR0ZXJucywgcHJvY2Vzc29yLmNoaWxkKCksIG5leHQpO1xuICAgICAgICB9XG4gICAgICAgIG5leHQoKTtcbiAgICB9XG59XG5leHBvcnRzLkdsb2JVdGlsID0gR2xvYlV0aWw7XG5jbGFzcyBHbG9iV2Fsa2VyIGV4dGVuZHMgR2xvYlV0aWwge1xuICAgIG1hdGNoZXMgPSBuZXcgU2V0KCk7XG4gICAgY29uc3RydWN0b3IocGF0dGVybnMsIHBhdGgsIG9wdHMpIHtcbiAgICAgICAgc3VwZXIocGF0dGVybnMsIHBhdGgsIG9wdHMpO1xuICAgIH1cbiAgICBtYXRjaEVtaXQoZSkge1xuICAgICAgICB0aGlzLm1hdGNoZXMuYWRkKGUpO1xuICAgIH1cbiAgICBhc3luYyB3YWxrKCkge1xuICAgICAgICBpZiAodGhpcy5zaWduYWw/LmFib3J0ZWQpXG4gICAgICAgICAgICB0aHJvdyB0aGlzLnNpZ25hbC5yZWFzb247XG4gICAgICAgIGlmICh0aGlzLnBhdGguaXNVbmtub3duKCkpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucGF0aC5sc3RhdCgpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXMsIHJlaikgPT4ge1xuICAgICAgICAgICAgdGhpcy53YWxrQ0IodGhpcy5wYXRoLCB0aGlzLnBhdHRlcm5zLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2lnbmFsPy5hYm9ydGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlaih0aGlzLnNpZ25hbC5yZWFzb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzKHRoaXMubWF0Y2hlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5tYXRjaGVzO1xuICAgIH1cbiAgICB3YWxrU3luYygpIHtcbiAgICAgICAgaWYgKHRoaXMuc2lnbmFsPy5hYm9ydGVkKVxuICAgICAgICAgICAgdGhyb3cgdGhpcy5zaWduYWwucmVhc29uO1xuICAgICAgICBpZiAodGhpcy5wYXRoLmlzVW5rbm93bigpKSB7XG4gICAgICAgICAgICB0aGlzLnBhdGgubHN0YXRTeW5jKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbm90aGluZyBmb3IgdGhlIGNhbGxiYWNrIHRvIGRvLCBiZWNhdXNlIHRoaXMgbmV2ZXIgcGF1c2VzXG4gICAgICAgIHRoaXMud2Fsa0NCU3luYyh0aGlzLnBhdGgsIHRoaXMucGF0dGVybnMsICgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNpZ25hbD8uYWJvcnRlZClcbiAgICAgICAgICAgICAgICB0aHJvdyB0aGlzLnNpZ25hbC5yZWFzb247XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5tYXRjaGVzO1xuICAgIH1cbn1cbmV4cG9ydHMuR2xvYldhbGtlciA9IEdsb2JXYWxrZXI7XG5jbGFzcyBHbG9iU3RyZWFtIGV4dGVuZHMgR2xvYlV0aWwge1xuICAgIHJlc3VsdHM7XG4gICAgY29uc3RydWN0b3IocGF0dGVybnMsIHBhdGgsIG9wdHMpIHtcbiAgICAgICAgc3VwZXIocGF0dGVybnMsIHBhdGgsIG9wdHMpO1xuICAgICAgICB0aGlzLnJlc3VsdHMgPSBuZXcgbWluaXBhc3NfMS5NaW5pcGFzcyh7XG4gICAgICAgICAgICBzaWduYWw6IHRoaXMuc2lnbmFsLFxuICAgICAgICAgICAgb2JqZWN0TW9kZTogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucmVzdWx0cy5vbignZHJhaW4nLCAoKSA9PiB0aGlzLnJlc3VtZSgpKTtcbiAgICAgICAgdGhpcy5yZXN1bHRzLm9uKCdyZXN1bWUnLCAoKSA9PiB0aGlzLnJlc3VtZSgpKTtcbiAgICB9XG4gICAgbWF0Y2hFbWl0KGUpIHtcbiAgICAgICAgdGhpcy5yZXN1bHRzLndyaXRlKGUpO1xuICAgICAgICBpZiAoIXRoaXMucmVzdWx0cy5mbG93aW5nKVxuICAgICAgICAgICAgdGhpcy5wYXVzZSgpO1xuICAgIH1cbiAgICBzdHJlYW0oKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMucGF0aDtcbiAgICAgICAgaWYgKHRhcmdldC5pc1Vua25vd24oKSkge1xuICAgICAgICAgICAgdGFyZ2V0LmxzdGF0KCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy53YWxrQ0IodGFyZ2V0LCB0aGlzLnBhdHRlcm5zLCAoKSA9PiB0aGlzLnJlc3VsdHMuZW5kKCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLndhbGtDQih0YXJnZXQsIHRoaXMucGF0dGVybnMsICgpID0+IHRoaXMucmVzdWx0cy5lbmQoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMucmVzdWx0cztcbiAgICB9XG4gICAgc3RyZWFtU3luYygpIHtcbiAgICAgICAgaWYgKHRoaXMucGF0aC5pc1Vua25vd24oKSkge1xuICAgICAgICAgICAgdGhpcy5wYXRoLmxzdGF0U3luYygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMud2Fsa0NCU3luYyh0aGlzLnBhdGgsIHRoaXMucGF0dGVybnMsICgpID0+IHRoaXMucmVzdWx0cy5lbmQoKSk7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc3VsdHM7XG4gICAgfVxufVxuZXhwb3J0cy5HbG9iU3RyZWFtID0gR2xvYlN0cmVhbTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXdhbGtlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5HbG9iID0gdm9pZCAwO1xuY29uc3QgbWluaW1hdGNoXzEgPSByZXF1aXJlKFwibWluaW1hdGNoXCIpO1xuY29uc3Qgbm9kZV91cmxfMSA9IHJlcXVpcmUoXCJub2RlOnVybFwiKTtcbmNvbnN0IHBhdGhfc2N1cnJ5XzEgPSByZXF1aXJlKFwicGF0aC1zY3VycnlcIik7XG5jb25zdCBwYXR0ZXJuX2pzXzEgPSByZXF1aXJlKFwiLi9wYXR0ZXJuLmpzXCIpO1xuY29uc3Qgd2Fsa2VyX2pzXzEgPSByZXF1aXJlKFwiLi93YWxrZXIuanNcIik7XG4vLyBpZiBubyBwcm9jZXNzIGdsb2JhbCwganVzdCBjYWxsIGl0IGxpbnV4LlxuLy8gc28gd2UgZGVmYXVsdCB0byBjYXNlLXNlbnNpdGl2ZSwgLyBzZXBhcmF0b3JzXG5jb25zdCBkZWZhdWx0UGxhdGZvcm0gPSAodHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmXG4gICAgcHJvY2VzcyAmJlxuICAgIHR5cGVvZiBwcm9jZXNzLnBsYXRmb3JtID09PSAnc3RyaW5nJykgP1xuICAgIHByb2Nlc3MucGxhdGZvcm1cbiAgICA6ICdsaW51eCc7XG4vKipcbiAqIEFuIG9iamVjdCB0aGF0IGNhbiBwZXJmb3JtIGdsb2IgcGF0dGVybiB0cmF2ZXJzYWxzLlxuICovXG5jbGFzcyBHbG9iIHtcbiAgICBhYnNvbHV0ZTtcbiAgICBjd2Q7XG4gICAgcm9vdDtcbiAgICBkb3Q7XG4gICAgZG90UmVsYXRpdmU7XG4gICAgZm9sbG93O1xuICAgIGlnbm9yZTtcbiAgICBtYWdpY2FsQnJhY2VzO1xuICAgIG1hcms7XG4gICAgbWF0Y2hCYXNlO1xuICAgIG1heERlcHRoO1xuICAgIG5vYnJhY2U7XG4gICAgbm9jYXNlO1xuICAgIG5vZGlyO1xuICAgIG5vZXh0O1xuICAgIG5vZ2xvYnN0YXI7XG4gICAgcGF0dGVybjtcbiAgICBwbGF0Zm9ybTtcbiAgICByZWFscGF0aDtcbiAgICBzY3Vycnk7XG4gICAgc3RhdDtcbiAgICBzaWduYWw7XG4gICAgd2luZG93c1BhdGhzTm9Fc2NhcGU7XG4gICAgd2l0aEZpbGVUeXBlcztcbiAgICBpbmNsdWRlQ2hpbGRNYXRjaGVzO1xuICAgIC8qKlxuICAgICAqIFRoZSBvcHRpb25zIHByb3ZpZGVkIHRvIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICAgKi9cbiAgICBvcHRzO1xuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHBhcnNlZCBpbW11dGFibGUge0BsaW5rIFBhdHRlcm59IG9iamVjdHMuXG4gICAgICovXG4gICAgcGF0dGVybnM7XG4gICAgLyoqXG4gICAgICogQWxsIG9wdGlvbnMgYXJlIHN0b3JlZCBhcyBwcm9wZXJ0aWVzIG9uIHRoZSBgR2xvYmAgb2JqZWN0LlxuICAgICAqXG4gICAgICogU2VlIHtAbGluayBHbG9iT3B0aW9uc30gZm9yIGZ1bGwgb3B0aW9ucyBkZXNjcmlwdGlvbnMuXG4gICAgICpcbiAgICAgKiBOb3RlIHRoYXQgYSBwcmV2aW91cyBgR2xvYmAgb2JqZWN0IGNhbiBiZSBwYXNzZWQgYXMgdGhlXG4gICAgICogYEdsb2JPcHRpb25zYCB0byBhbm90aGVyIGBHbG9iYCBpbnN0YW50aWF0aW9uIHRvIHJlLXVzZSBzZXR0aW5nc1xuICAgICAqIGFuZCBjYWNoZXMgd2l0aCBhIG5ldyBwYXR0ZXJuLlxuICAgICAqXG4gICAgICogVHJhdmVyc2FsIGZ1bmN0aW9ucyBjYW4gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIHRvIHJ1biB0aGUgd2Fsa1xuICAgICAqIGFnYWluLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHBhdHRlcm4sIG9wdHMpIHtcbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIGlmICghb3B0cylcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2dsb2Igb3B0aW9ucyByZXF1aXJlZCcpO1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICB0aGlzLndpdGhGaWxlVHlwZXMgPSAhIW9wdHMud2l0aEZpbGVUeXBlcztcbiAgICAgICAgdGhpcy5zaWduYWwgPSBvcHRzLnNpZ25hbDtcbiAgICAgICAgdGhpcy5mb2xsb3cgPSAhIW9wdHMuZm9sbG93O1xuICAgICAgICB0aGlzLmRvdCA9ICEhb3B0cy5kb3Q7XG4gICAgICAgIHRoaXMuZG90UmVsYXRpdmUgPSAhIW9wdHMuZG90UmVsYXRpdmU7XG4gICAgICAgIHRoaXMubm9kaXIgPSAhIW9wdHMubm9kaXI7XG4gICAgICAgIHRoaXMubWFyayA9ICEhb3B0cy5tYXJrO1xuICAgICAgICBpZiAoIW9wdHMuY3dkKSB7XG4gICAgICAgICAgICB0aGlzLmN3ZCA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG9wdHMuY3dkIGluc3RhbmNlb2YgVVJMIHx8IG9wdHMuY3dkLnN0YXJ0c1dpdGgoJ2ZpbGU6Ly8nKSkge1xuICAgICAgICAgICAgb3B0cy5jd2QgPSAoMCwgbm9kZV91cmxfMS5maWxlVVJMVG9QYXRoKShvcHRzLmN3ZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jd2QgPSBvcHRzLmN3ZCB8fCAnJztcbiAgICAgICAgdGhpcy5yb290ID0gb3B0cy5yb290O1xuICAgICAgICB0aGlzLm1hZ2ljYWxCcmFjZXMgPSAhIW9wdHMubWFnaWNhbEJyYWNlcztcbiAgICAgICAgdGhpcy5ub2JyYWNlID0gISFvcHRzLm5vYnJhY2U7XG4gICAgICAgIHRoaXMubm9leHQgPSAhIW9wdHMubm9leHQ7XG4gICAgICAgIHRoaXMucmVhbHBhdGggPSAhIW9wdHMucmVhbHBhdGg7XG4gICAgICAgIHRoaXMuYWJzb2x1dGUgPSBvcHRzLmFic29sdXRlO1xuICAgICAgICB0aGlzLmluY2x1ZGVDaGlsZE1hdGNoZXMgPSBvcHRzLmluY2x1ZGVDaGlsZE1hdGNoZXMgIT09IGZhbHNlO1xuICAgICAgICB0aGlzLm5vZ2xvYnN0YXIgPSAhIW9wdHMubm9nbG9ic3RhcjtcbiAgICAgICAgdGhpcy5tYXRjaEJhc2UgPSAhIW9wdHMubWF0Y2hCYXNlO1xuICAgICAgICB0aGlzLm1heERlcHRoID1cbiAgICAgICAgICAgIHR5cGVvZiBvcHRzLm1heERlcHRoID09PSAnbnVtYmVyJyA/IG9wdHMubWF4RGVwdGggOiBJbmZpbml0eTtcbiAgICAgICAgdGhpcy5zdGF0ID0gISFvcHRzLnN0YXQ7XG4gICAgICAgIHRoaXMuaWdub3JlID0gb3B0cy5pZ25vcmU7XG4gICAgICAgIGlmICh0aGlzLndpdGhGaWxlVHlwZXMgJiYgdGhpcy5hYnNvbHV0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Nhbm5vdCBzZXQgYWJzb2x1dGUgYW5kIHdpdGhGaWxlVHlwZXM6dHJ1ZScpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgcGF0dGVybiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHBhdHRlcm4gPSBbcGF0dGVybl07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy53aW5kb3dzUGF0aHNOb0VzY2FwZSA9XG4gICAgICAgICAgICAhIW9wdHMud2luZG93c1BhdGhzTm9Fc2NhcGUgfHxcbiAgICAgICAgICAgICAgICBvcHRzLmFsbG93V2luZG93c0VzY2FwZSA9PT1cbiAgICAgICAgICAgICAgICAgICAgZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLndpbmRvd3NQYXRoc05vRXNjYXBlKSB7XG4gICAgICAgICAgICBwYXR0ZXJuID0gcGF0dGVybi5tYXAocCA9PiBwLnJlcGxhY2UoL1xcXFwvZywgJy8nKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubWF0Y2hCYXNlKSB7XG4gICAgICAgICAgICBpZiAob3B0cy5ub2dsb2JzdGFyKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYmFzZSBtYXRjaGluZyByZXF1aXJlcyBnbG9ic3RhcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGF0dGVybiA9IHBhdHRlcm4ubWFwKHAgPT4gKHAuaW5jbHVkZXMoJy8nKSA/IHAgOiBgLi8qKi8ke3B9YCkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGF0dGVybiA9IHBhdHRlcm47XG4gICAgICAgIHRoaXMucGxhdGZvcm0gPSBvcHRzLnBsYXRmb3JtIHx8IGRlZmF1bHRQbGF0Zm9ybTtcbiAgICAgICAgdGhpcy5vcHRzID0geyAuLi5vcHRzLCBwbGF0Zm9ybTogdGhpcy5wbGF0Zm9ybSB9O1xuICAgICAgICBpZiAob3B0cy5zY3VycnkpIHtcbiAgICAgICAgICAgIHRoaXMuc2N1cnJ5ID0gb3B0cy5zY3Vycnk7XG4gICAgICAgICAgICBpZiAob3B0cy5ub2Nhc2UgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgIG9wdHMubm9jYXNlICE9PSBvcHRzLnNjdXJyeS5ub2Nhc2UpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vY2FzZSBvcHRpb24gY29udHJhZGljdHMgcHJvdmlkZWQgc2N1cnJ5IG9wdGlvbicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgU2N1cnJ5ID0gb3B0cy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyA/IHBhdGhfc2N1cnJ5XzEuUGF0aFNjdXJyeVdpbjMyXG4gICAgICAgICAgICAgICAgOiBvcHRzLnBsYXRmb3JtID09PSAnZGFyd2luJyA/IHBhdGhfc2N1cnJ5XzEuUGF0aFNjdXJyeURhcndpblxuICAgICAgICAgICAgICAgICAgICA6IG9wdHMucGxhdGZvcm0gPyBwYXRoX3NjdXJyeV8xLlBhdGhTY3VycnlQb3NpeFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBwYXRoX3NjdXJyeV8xLlBhdGhTY3Vycnk7XG4gICAgICAgICAgICB0aGlzLnNjdXJyeSA9IG5ldyBTY3VycnkodGhpcy5jd2QsIHtcbiAgICAgICAgICAgICAgICBub2Nhc2U6IG9wdHMubm9jYXNlLFxuICAgICAgICAgICAgICAgIGZzOiBvcHRzLmZzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ub2Nhc2UgPSB0aGlzLnNjdXJyeS5ub2Nhc2U7XG4gICAgICAgIC8vIElmIHlvdSBkbyBub2Nhc2U6dHJ1ZSBvbiBhIGNhc2Utc2Vuc2l0aXZlIGZpbGUgc3lzdGVtLCB0aGVuXG4gICAgICAgIC8vIHdlIG5lZWQgdG8gdXNlIHJlZ2V4cHMgaW5zdGVhZCBvZiBzdHJpbmdzIGZvciBub24tbWFnaWNcbiAgICAgICAgLy8gcGF0aCBwb3J0aW9ucywgYmVjYXVzZSBzdGF0dGluZyBgYUJjYCB3b24ndCByZXR1cm4gcmVzdWx0c1xuICAgICAgICAvLyBmb3IgdGhlIGZpbGUgYEFiQ2AgZm9yIGV4YW1wbGUuXG4gICAgICAgIGNvbnN0IG5vY2FzZU1hZ2ljT25seSA9IHRoaXMucGxhdGZvcm0gPT09ICdkYXJ3aW4nIHx8IHRoaXMucGxhdGZvcm0gPT09ICd3aW4zMic7XG4gICAgICAgIGNvbnN0IG1tbyA9IHtcbiAgICAgICAgICAgIC8vIGRlZmF1bHQgbm9jYXNlIGJhc2VkIG9uIHBsYXRmb3JtXG4gICAgICAgICAgICAuLi5vcHRzLFxuICAgICAgICAgICAgZG90OiB0aGlzLmRvdCxcbiAgICAgICAgICAgIG1hdGNoQmFzZTogdGhpcy5tYXRjaEJhc2UsXG4gICAgICAgICAgICBub2JyYWNlOiB0aGlzLm5vYnJhY2UsXG4gICAgICAgICAgICBub2Nhc2U6IHRoaXMubm9jYXNlLFxuICAgICAgICAgICAgbm9jYXNlTWFnaWNPbmx5LFxuICAgICAgICAgICAgbm9jb21tZW50OiB0cnVlLFxuICAgICAgICAgICAgbm9leHQ6IHRoaXMubm9leHQsXG4gICAgICAgICAgICBub25lZ2F0ZTogdHJ1ZSxcbiAgICAgICAgICAgIG9wdGltaXphdGlvbkxldmVsOiAyLFxuICAgICAgICAgICAgcGxhdGZvcm06IHRoaXMucGxhdGZvcm0sXG4gICAgICAgICAgICB3aW5kb3dzUGF0aHNOb0VzY2FwZTogdGhpcy53aW5kb3dzUGF0aHNOb0VzY2FwZSxcbiAgICAgICAgICAgIGRlYnVnOiAhIXRoaXMub3B0cy5kZWJ1ZyxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbW1zID0gdGhpcy5wYXR0ZXJuLm1hcChwID0+IG5ldyBtaW5pbWF0Y2hfMS5NaW5pbWF0Y2gocCwgbW1vKSk7XG4gICAgICAgIGNvbnN0IFttYXRjaFNldCwgZ2xvYlBhcnRzXSA9IG1tcy5yZWR1Y2UoKHNldCwgbSkgPT4ge1xuICAgICAgICAgICAgc2V0WzBdLnB1c2goLi4ubS5zZXQpO1xuICAgICAgICAgICAgc2V0WzFdLnB1c2goLi4ubS5nbG9iUGFydHMpO1xuICAgICAgICAgICAgcmV0dXJuIHNldDtcbiAgICAgICAgfSwgW1tdLCBbXV0pO1xuICAgICAgICB0aGlzLnBhdHRlcm5zID0gbWF0Y2hTZXQubWFwKChzZXQsIGkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGcgPSBnbG9iUGFydHNbaV07XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgICAgIGlmICghZylcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcGF0dGVybiBvYmplY3QnKTtcbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICByZXR1cm4gbmV3IHBhdHRlcm5fanNfMS5QYXR0ZXJuKHNldCwgZywgMCwgdGhpcy5wbGF0Zm9ybSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYyB3YWxrKCkge1xuICAgICAgICAvLyBXYWxrZXJzIGFsd2F5cyByZXR1cm4gYXJyYXkgb2YgUGF0aCBvYmplY3RzLCBzbyB3ZSBqdXN0IGhhdmUgdG9cbiAgICAgICAgLy8gY29lcmNlIHRoZW0gaW50byB0aGUgcmlnaHQgc2hhcGUuICBJdCB3aWxsIGhhdmUgYWxyZWFkeSBjYWxsZWRcbiAgICAgICAgLy8gcmVhbHBhdGgoKSBpZiB0aGUgb3B0aW9uIHdhcyBzZXQgdG8gZG8gc28sIHNvIHdlIGtub3cgdGhhdCdzIGNhY2hlZC5cbiAgICAgICAgLy8gc3RhcnQgb3V0IGtub3dpbmcgdGhlIGN3ZCwgYXQgbGVhc3RcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIC4uLihhd2FpdCBuZXcgd2Fsa2VyX2pzXzEuR2xvYldhbGtlcih0aGlzLnBhdHRlcm5zLCB0aGlzLnNjdXJyeS5jd2QsIHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLm9wdHMsXG4gICAgICAgICAgICAgICAgbWF4RGVwdGg6IHRoaXMubWF4RGVwdGggIT09IEluZmluaXR5ID9cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXhEZXB0aCArIHRoaXMuc2N1cnJ5LmN3ZC5kZXB0aCgpXG4gICAgICAgICAgICAgICAgICAgIDogSW5maW5pdHksXG4gICAgICAgICAgICAgICAgcGxhdGZvcm06IHRoaXMucGxhdGZvcm0sXG4gICAgICAgICAgICAgICAgbm9jYXNlOiB0aGlzLm5vY2FzZSxcbiAgICAgICAgICAgICAgICBpbmNsdWRlQ2hpbGRNYXRjaGVzOiB0aGlzLmluY2x1ZGVDaGlsZE1hdGNoZXMsXG4gICAgICAgICAgICB9KS53YWxrKCkpLFxuICAgICAgICBdO1xuICAgIH1cbiAgICB3YWxrU3luYygpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIC4uLm5ldyB3YWxrZXJfanNfMS5HbG9iV2Fsa2VyKHRoaXMucGF0dGVybnMsIHRoaXMuc2N1cnJ5LmN3ZCwge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMub3B0cyxcbiAgICAgICAgICAgICAgICBtYXhEZXB0aDogdGhpcy5tYXhEZXB0aCAhPT0gSW5maW5pdHkgP1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1heERlcHRoICsgdGhpcy5zY3VycnkuY3dkLmRlcHRoKClcbiAgICAgICAgICAgICAgICAgICAgOiBJbmZpbml0eSxcbiAgICAgICAgICAgICAgICBwbGF0Zm9ybTogdGhpcy5wbGF0Zm9ybSxcbiAgICAgICAgICAgICAgICBub2Nhc2U6IHRoaXMubm9jYXNlLFxuICAgICAgICAgICAgICAgIGluY2x1ZGVDaGlsZE1hdGNoZXM6IHRoaXMuaW5jbHVkZUNoaWxkTWF0Y2hlcyxcbiAgICAgICAgICAgIH0pLndhbGtTeW5jKCksXG4gICAgICAgIF07XG4gICAgfVxuICAgIHN0cmVhbSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyB3YWxrZXJfanNfMS5HbG9iU3RyZWFtKHRoaXMucGF0dGVybnMsIHRoaXMuc2N1cnJ5LmN3ZCwge1xuICAgICAgICAgICAgLi4udGhpcy5vcHRzLFxuICAgICAgICAgICAgbWF4RGVwdGg6IHRoaXMubWF4RGVwdGggIT09IEluZmluaXR5ID9cbiAgICAgICAgICAgICAgICB0aGlzLm1heERlcHRoICsgdGhpcy5zY3VycnkuY3dkLmRlcHRoKClcbiAgICAgICAgICAgICAgICA6IEluZmluaXR5LFxuICAgICAgICAgICAgcGxhdGZvcm06IHRoaXMucGxhdGZvcm0sXG4gICAgICAgICAgICBub2Nhc2U6IHRoaXMubm9jYXNlLFxuICAgICAgICAgICAgaW5jbHVkZUNoaWxkTWF0Y2hlczogdGhpcy5pbmNsdWRlQ2hpbGRNYXRjaGVzLFxuICAgICAgICB9KS5zdHJlYW0oKTtcbiAgICB9XG4gICAgc3RyZWFtU3luYygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyB3YWxrZXJfanNfMS5HbG9iU3RyZWFtKHRoaXMucGF0dGVybnMsIHRoaXMuc2N1cnJ5LmN3ZCwge1xuICAgICAgICAgICAgLi4udGhpcy5vcHRzLFxuICAgICAgICAgICAgbWF4RGVwdGg6IHRoaXMubWF4RGVwdGggIT09IEluZmluaXR5ID9cbiAgICAgICAgICAgICAgICB0aGlzLm1heERlcHRoICsgdGhpcy5zY3VycnkuY3dkLmRlcHRoKClcbiAgICAgICAgICAgICAgICA6IEluZmluaXR5LFxuICAgICAgICAgICAgcGxhdGZvcm06IHRoaXMucGxhdGZvcm0sXG4gICAgICAgICAgICBub2Nhc2U6IHRoaXMubm9jYXNlLFxuICAgICAgICAgICAgaW5jbHVkZUNoaWxkTWF0Y2hlczogdGhpcy5pbmNsdWRlQ2hpbGRNYXRjaGVzLFxuICAgICAgICB9KS5zdHJlYW1TeW5jKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlZmF1bHQgc3luYyBpdGVyYXRpb24gZnVuY3Rpb24uIFJldHVybnMgYSBHZW5lcmF0b3IgdGhhdFxuICAgICAqIGl0ZXJhdGVzIG92ZXIgdGhlIHJlc3VsdHMuXG4gICAgICovXG4gICAgaXRlcmF0ZVN5bmMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0cmVhbVN5bmMoKVtTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgfVxuICAgIFtTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pdGVyYXRlU3luYygpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWZhdWx0IGFzeW5jIGl0ZXJhdGlvbiBmdW5jdGlvbi4gUmV0dXJucyBhbiBBc3luY0dlbmVyYXRvciB0aGF0XG4gICAgICogaXRlcmF0ZXMgb3ZlciB0aGUgcmVzdWx0cy5cbiAgICAgKi9cbiAgICBpdGVyYXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdHJlYW0oKVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKTtcbiAgICB9XG4gICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlcmF0ZSgpO1xuICAgIH1cbn1cbmV4cG9ydHMuR2xvYiA9IEdsb2I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1nbG9iLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmhhc01hZ2ljID0gdm9pZCAwO1xuY29uc3QgbWluaW1hdGNoXzEgPSByZXF1aXJlKFwibWluaW1hdGNoXCIpO1xuLyoqXG4gKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgcGF0dGVybnMgcHJvdmlkZWQgY29udGFpbiBhbnkgbWFnaWMgZ2xvYiBjaGFyYWN0ZXJzLFxuICogZ2l2ZW4gdGhlIG9wdGlvbnMgcHJvdmlkZWQuXG4gKlxuICogQnJhY2UgZXhwYW5zaW9uIGlzIG5vdCBjb25zaWRlcmVkIFwibWFnaWNcIiB1bmxlc3MgdGhlIGBtYWdpY2FsQnJhY2VzYCBvcHRpb25cbiAqIGlzIHNldCwgYXMgYnJhY2UgZXhwYW5zaW9uIGp1c3QgdHVybnMgb25lIHN0cmluZyBpbnRvIGFuIGFycmF5IG9mIHN0cmluZ3MuXG4gKiBTbyBhIHBhdHRlcm4gbGlrZSBgJ3h7YSxifXknYCB3b3VsZCByZXR1cm4gYGZhbHNlYCwgYmVjYXVzZSBgJ3hheSdgIGFuZFxuICogYCd4YnknYCBib3RoIGRvIG5vdCBjb250YWluIGFueSBtYWdpYyBnbG9iIGNoYXJhY3RlcnMsIGFuZCBpdCdzIHRyZWF0ZWQgdGhlXG4gKiBzYW1lIGFzIGlmIHlvdSBoYWQgY2FsbGVkIGl0IG9uIGBbJ3hheScsICd4YnknXWAuIFdoZW4gYG1hZ2ljYWxCcmFjZXM6dHJ1ZWBcbiAqIGlzIGluIHRoZSBvcHRpb25zLCBicmFjZSBleHBhbnNpb24gX2lzXyB0cmVhdGVkIGFzIGEgcGF0dGVybiBoYXZpbmcgbWFnaWMuXG4gKi9cbmNvbnN0IGhhc01hZ2ljID0gKHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkgPT4ge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShwYXR0ZXJuKSkge1xuICAgICAgICBwYXR0ZXJuID0gW3BhdHRlcm5dO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHAgb2YgcGF0dGVybikge1xuICAgICAgICBpZiAobmV3IG1pbmltYXRjaF8xLk1pbmltYXRjaChwLCBvcHRpb25zKS5oYXNNYWdpYygpKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5leHBvcnRzLmhhc01hZ2ljID0gaGFzTWFnaWM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1oYXMtbWFnaWMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2xvYiA9IGV4cG9ydHMuc3luYyA9IGV4cG9ydHMuaXRlcmF0ZSA9IGV4cG9ydHMuaXRlcmF0ZVN5bmMgPSBleHBvcnRzLnN0cmVhbSA9IGV4cG9ydHMuc3RyZWFtU3luYyA9IGV4cG9ydHMuSWdub3JlID0gZXhwb3J0cy5oYXNNYWdpYyA9IGV4cG9ydHMuR2xvYiA9IGV4cG9ydHMudW5lc2NhcGUgPSBleHBvcnRzLmVzY2FwZSA9IHZvaWQgMDtcbmV4cG9ydHMuZ2xvYlN0cmVhbVN5bmMgPSBnbG9iU3RyZWFtU3luYztcbmV4cG9ydHMuZ2xvYlN0cmVhbSA9IGdsb2JTdHJlYW07XG5leHBvcnRzLmdsb2JTeW5jID0gZ2xvYlN5bmM7XG5leHBvcnRzLmdsb2JJdGVyYXRlU3luYyA9IGdsb2JJdGVyYXRlU3luYztcbmV4cG9ydHMuZ2xvYkl0ZXJhdGUgPSBnbG9iSXRlcmF0ZTtcbmNvbnN0IG1pbmltYXRjaF8xID0gcmVxdWlyZShcIm1pbmltYXRjaFwiKTtcbmNvbnN0IGdsb2JfanNfMSA9IHJlcXVpcmUoXCIuL2dsb2IuanNcIik7XG5jb25zdCBoYXNfbWFnaWNfanNfMSA9IHJlcXVpcmUoXCIuL2hhcy1tYWdpYy5qc1wiKTtcbnZhciBtaW5pbWF0Y2hfMiA9IHJlcXVpcmUoXCJtaW5pbWF0Y2hcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJlc2NhcGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1pbmltYXRjaF8yLmVzY2FwZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInVuZXNjYXBlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBtaW5pbWF0Y2hfMi51bmVzY2FwZTsgfSB9KTtcbnZhciBnbG9iX2pzXzIgPSByZXF1aXJlKFwiLi9nbG9iLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiR2xvYlwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZ2xvYl9qc18yLkdsb2I7IH0gfSk7XG52YXIgaGFzX21hZ2ljX2pzXzIgPSByZXF1aXJlKFwiLi9oYXMtbWFnaWMuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJoYXNNYWdpY1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gaGFzX21hZ2ljX2pzXzIuaGFzTWFnaWM7IH0gfSk7XG52YXIgaWdub3JlX2pzXzEgPSByZXF1aXJlKFwiLi9pZ25vcmUuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJJZ25vcmVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGlnbm9yZV9qc18xLklnbm9yZTsgfSB9KTtcbmZ1bmN0aW9uIGdsb2JTdHJlYW1TeW5jKHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiBuZXcgZ2xvYl9qc18xLkdsb2IocGF0dGVybiwgb3B0aW9ucykuc3RyZWFtU3luYygpO1xufVxuZnVuY3Rpb24gZ2xvYlN0cmVhbShwYXR0ZXJuLCBvcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gbmV3IGdsb2JfanNfMS5HbG9iKHBhdHRlcm4sIG9wdGlvbnMpLnN0cmVhbSgpO1xufVxuZnVuY3Rpb24gZ2xvYlN5bmMocGF0dGVybiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgcmV0dXJuIG5ldyBnbG9iX2pzXzEuR2xvYihwYXR0ZXJuLCBvcHRpb25zKS53YWxrU3luYygpO1xufVxuYXN5bmMgZnVuY3Rpb24gZ2xvYl8ocGF0dGVybiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgcmV0dXJuIG5ldyBnbG9iX2pzXzEuR2xvYihwYXR0ZXJuLCBvcHRpb25zKS53YWxrKCk7XG59XG5mdW5jdGlvbiBnbG9iSXRlcmF0ZVN5bmMocGF0dGVybiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgcmV0dXJuIG5ldyBnbG9iX2pzXzEuR2xvYihwYXR0ZXJuLCBvcHRpb25zKS5pdGVyYXRlU3luYygpO1xufVxuZnVuY3Rpb24gZ2xvYkl0ZXJhdGUocGF0dGVybiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgcmV0dXJuIG5ldyBnbG9iX2pzXzEuR2xvYihwYXR0ZXJuLCBvcHRpb25zKS5pdGVyYXRlKCk7XG59XG4vLyBhbGlhc2VzOiBnbG9iLnN5bmMuc3RyZWFtKCkgZ2xvYi5zdHJlYW0uc3luYygpIGdsb2Iuc3luYygpIGV0Y1xuZXhwb3J0cy5zdHJlYW1TeW5jID0gZ2xvYlN0cmVhbVN5bmM7XG5leHBvcnRzLnN0cmVhbSA9IE9iamVjdC5hc3NpZ24oZ2xvYlN0cmVhbSwgeyBzeW5jOiBnbG9iU3RyZWFtU3luYyB9KTtcbmV4cG9ydHMuaXRlcmF0ZVN5bmMgPSBnbG9iSXRlcmF0ZVN5bmM7XG5leHBvcnRzLml0ZXJhdGUgPSBPYmplY3QuYXNzaWduKGdsb2JJdGVyYXRlLCB7XG4gICAgc3luYzogZ2xvYkl0ZXJhdGVTeW5jLFxufSk7XG5leHBvcnRzLnN5bmMgPSBPYmplY3QuYXNzaWduKGdsb2JTeW5jLCB7XG4gICAgc3RyZWFtOiBnbG9iU3RyZWFtU3luYyxcbiAgICBpdGVyYXRlOiBnbG9iSXRlcmF0ZVN5bmMsXG59KTtcbmV4cG9ydHMuZ2xvYiA9IE9iamVjdC5hc3NpZ24oZ2xvYl8sIHtcbiAgICBnbG9iOiBnbG9iXyxcbiAgICBnbG9iU3luYyxcbiAgICBzeW5jOiBleHBvcnRzLnN5bmMsXG4gICAgZ2xvYlN0cmVhbSxcbiAgICBzdHJlYW06IGV4cG9ydHMuc3RyZWFtLFxuICAgIGdsb2JTdHJlYW1TeW5jLFxuICAgIHN0cmVhbVN5bmM6IGV4cG9ydHMuc3RyZWFtU3luYyxcbiAgICBnbG9iSXRlcmF0ZSxcbiAgICBpdGVyYXRlOiBleHBvcnRzLml0ZXJhdGUsXG4gICAgZ2xvYkl0ZXJhdGVTeW5jLFxuICAgIGl0ZXJhdGVTeW5jOiBleHBvcnRzLml0ZXJhdGVTeW5jLFxuICAgIEdsb2I6IGdsb2JfanNfMS5HbG9iLFxuICAgIGhhc01hZ2ljOiBoYXNfbWFnaWNfanNfMS5oYXNNYWdpYyxcbiAgICBlc2NhcGU6IG1pbmltYXRjaF8xLmVzY2FwZSxcbiAgICB1bmVzY2FwZTogbWluaW1hdGNoXzEudW5lc2NhcGUsXG59KTtcbmV4cG9ydHMuZ2xvYi5nbG9iID0gZXhwb3J0cy5nbG9iO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICIvKipcbiAqIGFyY2hpdmVyLXV0aWxzXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTQgQ2hyaXMgVGFsa2luZ3RvbiwgY29udHJpYnV0b3JzLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cHM6Ly9naXRodWIuY29tL2FyY2hpdmVyanMvbm9kZS1hcmNoaXZlci9ibG9iL21hc3Rlci9MSUNFTlNFLU1JVFxuICovXG52YXIgZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpO1xudmFyIHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG5cbnZhciBmbGF0dGVuID0gcmVxdWlyZSgnbG9kYXNoL2ZsYXR0ZW4nKTtcbnZhciBkaWZmZXJlbmNlID0gcmVxdWlyZSgnbG9kYXNoL2RpZmZlcmVuY2UnKTtcbnZhciB1bmlvbiA9IHJlcXVpcmUoJ2xvZGFzaC91bmlvbicpO1xudmFyIGlzUGxhaW5PYmplY3QgPSByZXF1aXJlKCdsb2Rhc2gvaXNQbGFpbk9iamVjdCcpO1xuXG52YXIgZ2xvYiA9IHJlcXVpcmUoJ2dsb2InKTtcblxudmFyIGZpbGUgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xuXG52YXIgcGF0aFNlcGFyYXRvclJlID0gL1tcXC9cXFxcXS9nO1xuXG4vLyBQcm9jZXNzIHNwZWNpZmllZCB3aWxkY2FyZCBnbG9iIHBhdHRlcm5zIG9yIGZpbGVuYW1lcyBhZ2FpbnN0IGFcbi8vIGNhbGxiYWNrLCBleGNsdWRpbmcgYW5kIHVuaXF1aW5nIGZpbGVzIGluIHRoZSByZXN1bHQgc2V0LlxudmFyIHByb2Nlc3NQYXR0ZXJucyA9IGZ1bmN0aW9uKHBhdHRlcm5zLCBmbikge1xuICAvLyBGaWxlcGF0aHMgdG8gcmV0dXJuLlxuICB2YXIgcmVzdWx0ID0gW107XG4gIC8vIEl0ZXJhdGUgb3ZlciBmbGF0dGVuZWQgcGF0dGVybnMgYXJyYXkuXG4gIGZsYXR0ZW4ocGF0dGVybnMpLmZvckVhY2goZnVuY3Rpb24ocGF0dGVybikge1xuICAgIC8vIElmIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaXMgISBpdCBzaG91bGQgYmUgb21pdHRlZFxuICAgIHZhciBleGNsdXNpb24gPSBwYXR0ZXJuLmluZGV4T2YoJyEnKSA9PT0gMDtcbiAgICAvLyBJZiB0aGUgcGF0dGVybiBpcyBhbiBleGNsdXNpb24sIHJlbW92ZSB0aGUgIVxuICAgIGlmIChleGNsdXNpb24pIHsgcGF0dGVybiA9IHBhdHRlcm4uc2xpY2UoMSk7IH1cbiAgICAvLyBGaW5kIGFsbCBtYXRjaGluZyBmaWxlcyBmb3IgdGhpcyBwYXR0ZXJuLlxuICAgIHZhciBtYXRjaGVzID0gZm4ocGF0dGVybik7XG4gICAgaWYgKGV4Y2x1c2lvbikge1xuICAgICAgLy8gSWYgYW4gZXhjbHVzaW9uLCByZW1vdmUgbWF0Y2hpbmcgZmlsZXMuXG4gICAgICByZXN1bHQgPSBkaWZmZXJlbmNlKHJlc3VsdCwgbWF0Y2hlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE90aGVyd2lzZSBhZGQgbWF0Y2hpbmcgZmlsZXMuXG4gICAgICByZXN1bHQgPSB1bmlvbihyZXN1bHQsIG1hdGNoZXMpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG4vLyBUcnVlIGlmIHRoZSBmaWxlIHBhdGggZXhpc3RzLlxuZmlsZS5leGlzdHMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGZpbGVwYXRoID0gcGF0aC5qb2luLmFwcGx5KHBhdGgsIGFyZ3VtZW50cyk7XG4gIHJldHVybiBmcy5leGlzdHNTeW5jKGZpbGVwYXRoKTtcbn07XG5cbi8vIFJldHVybiBhbiBhcnJheSBvZiBhbGwgZmlsZSBwYXRocyB0aGF0IG1hdGNoIHRoZSBnaXZlbiB3aWxkY2FyZCBwYXR0ZXJucy5cbmZpbGUuZXhwYW5kID0gZnVuY3Rpb24oLi4uYXJncykge1xuICAvLyBJZiB0aGUgZmlyc3QgYXJndW1lbnQgaXMgYW4gb3B0aW9ucyBvYmplY3QsIHNhdmUgdGhvc2Ugb3B0aW9ucyB0byBwYXNzXG4gIC8vIGludG8gdGhlIEZpbGUucHJvdG90eXBlLmdsb2Iuc3luYyBtZXRob2QuXG4gIHZhciBvcHRpb25zID0gaXNQbGFpbk9iamVjdChhcmdzWzBdKSA/IGFyZ3Muc2hpZnQoKSA6IHt9O1xuICAvLyBVc2UgdGhlIGZpcnN0IGFyZ3VtZW50IGlmIGl0J3MgYW4gQXJyYXksIG90aGVyd2lzZSBjb252ZXJ0IHRoZSBhcmd1bWVudHNcbiAgLy8gb2JqZWN0IHRvIGFuIGFycmF5IGFuZCB1c2UgdGhhdC5cbiAgdmFyIHBhdHRlcm5zID0gQXJyYXkuaXNBcnJheShhcmdzWzBdKSA/IGFyZ3NbMF0gOiBhcmdzO1xuICAvLyBSZXR1cm4gZW1wdHkgc2V0IGlmIHRoZXJlIGFyZSBubyBwYXR0ZXJucyBvciBmaWxlcGF0aHMuXG4gIGlmIChwYXR0ZXJucy5sZW5ndGggPT09IDApIHsgcmV0dXJuIFtdOyB9XG4gIC8vIFJldHVybiBhbGwgbWF0Y2hpbmcgZmlsZXBhdGhzLlxuICB2YXIgbWF0Y2hlcyA9IHByb2Nlc3NQYXR0ZXJucyhwYXR0ZXJucywgZnVuY3Rpb24ocGF0dGVybikge1xuICAgIC8vIEZpbmQgYWxsIG1hdGNoaW5nIGZpbGVzIGZvciB0aGlzIHBhdHRlcm4uXG4gICAgcmV0dXJuIGdsb2Iuc3luYyhwYXR0ZXJuLCBvcHRpb25zKTtcbiAgfSk7XG4gIC8vIEZpbHRlciByZXN1bHQgc2V0P1xuICBpZiAob3B0aW9ucy5maWx0ZXIpIHtcbiAgICBtYXRjaGVzID0gbWF0Y2hlcy5maWx0ZXIoZnVuY3Rpb24oZmlsZXBhdGgpIHtcbiAgICAgIGZpbGVwYXRoID0gcGF0aC5qb2luKG9wdGlvbnMuY3dkIHx8ICcnLCBmaWxlcGF0aCk7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuZmlsdGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmV0dXJuIG9wdGlvbnMuZmlsdGVyKGZpbGVwYXRoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZmlsZSBpcyBvZiB0aGUgcmlnaHQgdHlwZSBhbmQgZXhpc3RzLCB0aGlzIHNob3VsZCB3b3JrLlxuICAgICAgICAgIHJldHVybiBmcy5zdGF0U3luYyhmaWxlcGF0aClbb3B0aW9ucy5maWx0ZXJdKCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2goZSkge1xuICAgICAgICAvLyBPdGhlcndpc2UsIGl0J3MgcHJvYmFibHkgbm90IHRoZSByaWdodCB0eXBlLlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG1hdGNoZXM7XG59O1xuXG4vLyBCdWlsZCBhIG11bHRpIHRhc2sgXCJmaWxlc1wiIG9iamVjdCBkeW5hbWljYWxseS5cbmZpbGUuZXhwYW5kTWFwcGluZyA9IGZ1bmN0aW9uKHBhdHRlcm5zLCBkZXN0QmFzZSwgb3B0aW9ucykge1xuICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7XG4gICAgcmVuYW1lOiBmdW5jdGlvbihkZXN0QmFzZSwgZGVzdFBhdGgpIHtcbiAgICAgIHJldHVybiBwYXRoLmpvaW4oZGVzdEJhc2UgfHwgJycsIGRlc3RQYXRoKTtcbiAgICB9XG4gIH0sIG9wdGlvbnMpO1xuICB2YXIgZmlsZXMgPSBbXTtcbiAgdmFyIGZpbGVCeURlc3QgPSB7fTtcbiAgLy8gRmluZCBhbGwgZmlsZXMgbWF0Y2hpbmcgcGF0dGVybiwgdXNpbmcgcGFzc2VkLWluIG9wdGlvbnMuXG4gIGZpbGUuZXhwYW5kKG9wdGlvbnMsIHBhdHRlcm5zKS5mb3JFYWNoKGZ1bmN0aW9uKHNyYykge1xuICAgIHZhciBkZXN0UGF0aCA9IHNyYztcbiAgICAvLyBGbGF0dGVuP1xuICAgIGlmIChvcHRpb25zLmZsYXR0ZW4pIHtcbiAgICAgIGRlc3RQYXRoID0gcGF0aC5iYXNlbmFtZShkZXN0UGF0aCk7XG4gICAgfVxuICAgIC8vIENoYW5nZSB0aGUgZXh0ZW5zaW9uP1xuICAgIGlmIChvcHRpb25zLmV4dCkge1xuICAgICAgZGVzdFBhdGggPSBkZXN0UGF0aC5yZXBsYWNlKC8oXFwuW15cXC9dKik/JC8sIG9wdGlvbnMuZXh0KTtcbiAgICB9XG4gICAgLy8gR2VuZXJhdGUgZGVzdGluYXRpb24gZmlsZW5hbWUuXG4gICAgdmFyIGRlc3QgPSBvcHRpb25zLnJlbmFtZShkZXN0QmFzZSwgZGVzdFBhdGgsIG9wdGlvbnMpO1xuICAgIC8vIFByZXBlbmQgY3dkIHRvIHNyYyBwYXRoIGlmIG5lY2Vzc2FyeS5cbiAgICBpZiAob3B0aW9ucy5jd2QpIHsgc3JjID0gcGF0aC5qb2luKG9wdGlvbnMuY3dkLCBzcmMpOyB9XG4gICAgLy8gTm9ybWFsaXplIGZpbGVwYXRocyB0byBiZSB1bml4LXN0eWxlLlxuICAgIGRlc3QgPSBkZXN0LnJlcGxhY2UocGF0aFNlcGFyYXRvclJlLCAnLycpO1xuICAgIHNyYyA9IHNyYy5yZXBsYWNlKHBhdGhTZXBhcmF0b3JSZSwgJy8nKTtcbiAgICAvLyBNYXAgY29ycmVjdCBzcmMgcGF0aCB0byBkZXN0IHBhdGguXG4gICAgaWYgKGZpbGVCeURlc3RbZGVzdF0pIHtcbiAgICAgIC8vIElmIGRlc3QgYWxyZWFkeSBleGlzdHMsIHB1c2ggdGhpcyBzcmMgb250byB0aGF0IGRlc3QncyBzcmMgYXJyYXkuXG4gICAgICBmaWxlQnlEZXN0W2Rlc3RdLnNyYy5wdXNoKHNyYyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE90aGVyd2lzZSBjcmVhdGUgYSBuZXcgc3JjLWRlc3QgZmlsZSBtYXBwaW5nIG9iamVjdC5cbiAgICAgIGZpbGVzLnB1c2goe1xuICAgICAgICBzcmM6IFtzcmNdLFxuICAgICAgICBkZXN0OiBkZXN0LFxuICAgICAgfSk7XG4gICAgICAvLyBBbmQgc3RvcmUgYSByZWZlcmVuY2UgZm9yIGxhdGVyIHVzZS5cbiAgICAgIGZpbGVCeURlc3RbZGVzdF0gPSBmaWxlc1tmaWxlcy5sZW5ndGggLSAxXTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gZmlsZXM7XG59O1xuXG4vLyByZXVzaW5nIGJpdHMgb2YgZ3J1bnQncyBtdWx0aS10YXNrIHNvdXJjZSBub3JtYWxpemF0aW9uXG5maWxlLm5vcm1hbGl6ZUZpbGVzQXJyYXkgPSBmdW5jdGlvbihkYXRhKSB7XG4gIHZhciBmaWxlcyA9IFtdO1xuXG4gIGRhdGEuZm9yRWFjaChmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgcHJvcDtcbiAgICBpZiAoJ3NyYycgaW4gb2JqIHx8ICdkZXN0JyBpbiBvYmopIHtcbiAgICAgIGZpbGVzLnB1c2gob2JqKTtcbiAgICB9XG4gIH0pO1xuXG4gIGlmIChmaWxlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBmaWxlcyA9IF8oZmlsZXMpLmNoYWluKCkuZm9yRWFjaChmdW5jdGlvbihvYmopIHtcbiAgICBpZiAoISgnc3JjJyBpbiBvYmopIHx8ICFvYmouc3JjKSB7IHJldHVybjsgfVxuICAgIC8vIE5vcm1hbGl6ZSAuc3JjIHByb3BlcnRpZXMgdG8gZmxhdHRlbmVkIGFycmF5LlxuICAgIGlmIChBcnJheS5pc0FycmF5KG9iai5zcmMpKSB7XG4gICAgICBvYmouc3JjID0gZmxhdHRlbihvYmouc3JjKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqLnNyYyA9IFtvYmouc3JjXTtcbiAgICB9XG4gIH0pLm1hcChmdW5jdGlvbihvYmopIHtcbiAgICAvLyBCdWlsZCBvcHRpb25zIG9iamVjdCwgcmVtb3ZpbmcgdW53YW50ZWQgcHJvcGVydGllcy5cbiAgICB2YXIgZXhwYW5kT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG9iaik7XG4gICAgZGVsZXRlIGV4cGFuZE9wdGlvbnMuc3JjO1xuICAgIGRlbGV0ZSBleHBhbmRPcHRpb25zLmRlc3Q7XG5cbiAgICAvLyBFeHBhbmQgZmlsZSBtYXBwaW5ncy5cbiAgICBpZiAob2JqLmV4cGFuZCkge1xuICAgICAgcmV0dXJuIGZpbGUuZXhwYW5kTWFwcGluZyhvYmouc3JjLCBvYmouZGVzdCwgZXhwYW5kT3B0aW9ucykubWFwKGZ1bmN0aW9uKG1hcE9iaikge1xuICAgICAgICAvLyBDb3B5IG9iaiBwcm9wZXJ0aWVzIHRvIHJlc3VsdC5cbiAgICAgICAgdmFyIHJlc3VsdCA9IE9iamVjdC5hc3NpZ24oe30sIG9iaik7XG4gICAgICAgIC8vIE1ha2UgYSBjbG9uZSBvZiB0aGUgb3JpZyBvYmogYXZhaWxhYmxlLlxuICAgICAgICByZXN1bHQub3JpZyA9IE9iamVjdC5hc3NpZ24oe30sIG9iaik7XG4gICAgICAgIC8vIFNldCAuc3JjIGFuZCAuZGVzdCwgcHJvY2Vzc2luZyBib3RoIGFzIHRlbXBsYXRlcy5cbiAgICAgICAgcmVzdWx0LnNyYyA9IG1hcE9iai5zcmM7XG4gICAgICAgIHJlc3VsdC5kZXN0ID0gbWFwT2JqLmRlc3Q7XG4gICAgICAgIC8vIFJlbW92ZSB1bndhbnRlZCBwcm9wZXJ0aWVzLlxuICAgICAgICBbJ2V4cGFuZCcsICdjd2QnLCAnZmxhdHRlbicsICdyZW5hbWUnLCAnZXh0J10uZm9yRWFjaChmdW5jdGlvbihwcm9wKSB7XG4gICAgICAgICAgZGVsZXRlIHJlc3VsdFtwcm9wXTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBDb3B5IG9iaiBwcm9wZXJ0aWVzIHRvIHJlc3VsdCwgYWRkaW5nIGFuIC5vcmlnIHByb3BlcnR5LlxuICAgIHZhciByZXN1bHQgPSBPYmplY3QuYXNzaWduKHt9LCBvYmopO1xuICAgIC8vIE1ha2UgYSBjbG9uZSBvZiB0aGUgb3JpZyBvYmogYXZhaWxhYmxlLlxuICAgIHJlc3VsdC5vcmlnID0gT2JqZWN0LmFzc2lnbih7fSwgb2JqKTtcblxuICAgIGlmICgnc3JjJyBpbiByZXN1bHQpIHtcbiAgICAgIC8vIEV4cG9zZSBhbiBleHBhbmQtb24tZGVtYW5kIGdldHRlciBtZXRob2QgYXMgLnNyYy5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXN1bHQsICdzcmMnLCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGdldDogZnVuY3Rpb24gZm4oKSB7XG4gICAgICAgICAgdmFyIHNyYztcbiAgICAgICAgICBpZiAoISgncmVzdWx0JyBpbiBmbikpIHtcbiAgICAgICAgICAgIHNyYyA9IG9iai5zcmM7XG4gICAgICAgICAgICAvLyBJZiBzcmMgaXMgYW4gYXJyYXksIGZsYXR0ZW4gaXQuIE90aGVyd2lzZSwgbWFrZSBpdCBpbnRvIGFuIGFycmF5LlxuICAgICAgICAgICAgc3JjID0gQXJyYXkuaXNBcnJheShzcmMpID8gZmxhdHRlbihzcmMpIDogW3NyY107XG4gICAgICAgICAgICAvLyBFeHBhbmQgc3JjIGZpbGVzLCBtZW1vaXppbmcgcmVzdWx0LlxuICAgICAgICAgICAgZm4ucmVzdWx0ID0gZmlsZS5leHBhbmQoZXhwYW5kT3B0aW9ucywgc3JjKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZuLnJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKCdkZXN0JyBpbiByZXN1bHQpIHtcbiAgICAgIHJlc3VsdC5kZXN0ID0gb2JqLmRlc3Q7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSkuZmxhdHRlbigpLnZhbHVlKCk7XG5cbiAgcmV0dXJuIGZpbGVzO1xufTtcbiIsCiAgICAiLyoqXG4gKiBhcmNoaXZlci11dGlsc1xuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNSBDaHJpcyBUYWxraW5ndG9uLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cHM6Ly9naXRodWIuY29tL2FyY2hpdmVyanMvYXJjaGl2ZXItdXRpbHMvYmxvYi9tYXN0ZXIvTElDRU5TRVxuICovXG52YXIgZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpO1xudmFyIHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG52YXIgaXNTdHJlYW0gPSByZXF1aXJlKCdpcy1zdHJlYW0nKTtcbnZhciBsYXp5c3RyZWFtID0gcmVxdWlyZSgnbGF6eXN0cmVhbScpO1xudmFyIG5vcm1hbGl6ZVBhdGggPSByZXF1aXJlKCdub3JtYWxpemUtcGF0aCcpO1xudmFyIGRlZmF1bHRzID0gcmVxdWlyZSgnbG9kYXNoL2RlZmF1bHRzJyk7XG5cbnZhciBTdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0nKS5TdHJlYW07XG52YXIgUGFzc1Rocm91Z2ggPSByZXF1aXJlKCdyZWFkYWJsZS1zdHJlYW0nKS5QYXNzVGhyb3VnaDtcblxudmFyIHV0aWxzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcbnV0aWxzLmZpbGUgPSByZXF1aXJlKCcuL2ZpbGUuanMnKTtcblxudXRpbHMuY29sbGVjdFN0cmVhbSA9IGZ1bmN0aW9uKHNvdXJjZSwgY2FsbGJhY2spIHtcbiAgdmFyIGNvbGxlY3Rpb24gPSBbXTtcbiAgdmFyIHNpemUgPSAwO1xuXG4gIHNvdXJjZS5vbignZXJyb3InLCBjYWxsYmFjayk7XG5cbiAgc291cmNlLm9uKCdkYXRhJywgZnVuY3Rpb24oY2h1bmspIHtcbiAgICBjb2xsZWN0aW9uLnB1c2goY2h1bmspO1xuICAgIHNpemUgKz0gY2h1bmsubGVuZ3RoO1xuICB9KTtcblxuICBzb3VyY2Uub24oJ2VuZCcsIGZ1bmN0aW9uKCkge1xuICAgIHZhciBidWYgPSBCdWZmZXIuYWxsb2Moc2l6ZSk7XG4gICAgdmFyIG9mZnNldCA9IDA7XG5cbiAgICBjb2xsZWN0aW9uLmZvckVhY2goZnVuY3Rpb24oZGF0YSkge1xuICAgICAgZGF0YS5jb3B5KGJ1Ziwgb2Zmc2V0KTtcbiAgICAgIG9mZnNldCArPSBkYXRhLmxlbmd0aDtcbiAgICB9KTtcblxuICAgIGNhbGxiYWNrKG51bGwsIGJ1Zik7XG4gIH0pO1xufTtcblxudXRpbHMuZGF0ZWlmeSA9IGZ1bmN0aW9uKGRhdGVpc2gpIHtcbiAgZGF0ZWlzaCA9IGRhdGVpc2ggfHwgbmV3IERhdGUoKTtcblxuICBpZiAoZGF0ZWlzaCBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICBkYXRlaXNoID0gZGF0ZWlzaDtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZGF0ZWlzaCA9PT0gJ3N0cmluZycpIHtcbiAgICBkYXRlaXNoID0gbmV3IERhdGUoZGF0ZWlzaCk7XG4gIH0gZWxzZSB7XG4gICAgZGF0ZWlzaCA9IG5ldyBEYXRlKCk7XG4gIH1cblxuICByZXR1cm4gZGF0ZWlzaDtcbn07XG5cbi8vIHRoaXMgaXMgc2xpZ2h0bHkgZGlmZmVyZW50IGZyb20gbG9kYXNoIHZlcnNpb25cbnV0aWxzLmRlZmF1bHRzID0gZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2UsIGd1YXJkKSB7XG4gIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICBhcmdzWzBdID0gYXJnc1swXSB8fCB7fTtcblxuICByZXR1cm4gZGVmYXVsdHMoLi4uYXJncyk7XG59O1xuXG51dGlscy5pc1N0cmVhbSA9IGZ1bmN0aW9uKHNvdXJjZSkge1xuICByZXR1cm4gaXNTdHJlYW0oc291cmNlKTtcbn07XG5cbnV0aWxzLmxhenlSZWFkU3RyZWFtID0gZnVuY3Rpb24oZmlsZXBhdGgpIHtcbiAgcmV0dXJuIG5ldyBsYXp5c3RyZWFtLlJlYWRhYmxlKGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBmcy5jcmVhdGVSZWFkU3RyZWFtKGZpbGVwYXRoKTtcbiAgfSk7XG59O1xuXG51dGlscy5ub3JtYWxpemVJbnB1dFNvdXJjZSA9IGZ1bmN0aW9uKHNvdXJjZSkge1xuICBpZiAoc291cmNlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5hbGxvYygwKTtcbiAgfSBlbHNlIGlmICh0eXBlb2Ygc291cmNlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShzb3VyY2UpO1xuICB9IGVsc2UgaWYgKHV0aWxzLmlzU3RyZWFtKHNvdXJjZSkpIHtcbiAgICAvLyBBbHdheXMgcGlwZSB0aHJvdWdoIGEgUGFzc1Rocm91Z2ggc3RyZWFtIHRvIGd1YXJhbnRlZSBwYXVzaW5nIHRoZSBzdHJlYW0gaWYgaXQncyBhbHJlYWR5IGZsb3dpbmcsXG4gICAgLy8gc2luY2UgaXQgd2lsbCBvbmx5IGJlIHByb2Nlc3NlZCBpbiBhIChkaXN0YW50KSBmdXR1cmUgaXRlcmF0aW9uIG9mIHRoZSBldmVudCBsb29wLCBhbmQgd2lsbCBsb3NlXG4gICAgLy8gZGF0YSBpZiBhbHJlYWR5IGZsb3dpbmcgbm93LlxuICAgIHJldHVybiBzb3VyY2UucGlwZShuZXcgUGFzc1Rocm91Z2goKSk7XG4gIH1cblxuICByZXR1cm4gc291cmNlO1xufTtcblxudXRpbHMuc2FuaXRpemVQYXRoID0gZnVuY3Rpb24oZmlsZXBhdGgpIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZVBhdGgoZmlsZXBhdGgsIGZhbHNlKS5yZXBsYWNlKC9eXFx3KzovLCAnJykucmVwbGFjZSgvXihcXC5cXC5cXC98XFwvKSsvLCAnJyk7XG59O1xuXG51dGlscy50cmFpbGluZ1NsYXNoSXQgPSBmdW5jdGlvbihzdHIpIHtcbiAgcmV0dXJuIHN0ci5zbGljZSgtMSkgIT09ICcvJyA/IHN0ciArICcvJyA6IHN0cjtcbn07XG5cbnV0aWxzLnVuaXhpZnlQYXRoID0gZnVuY3Rpb24oZmlsZXBhdGgpIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZVBhdGgoZmlsZXBhdGgsIGZhbHNlKS5yZXBsYWNlKC9eXFx3KzovLCAnJyk7XG59O1xuXG51dGlscy53YWxrZGlyID0gZnVuY3Rpb24oZGlycGF0aCwgYmFzZSwgY2FsbGJhY2spIHtcbiAgdmFyIHJlc3VsdHMgPSBbXTtcblxuICBpZiAodHlwZW9mIGJhc2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYWxsYmFjayA9IGJhc2U7XG4gICAgYmFzZSA9IGRpcnBhdGg7XG4gIH1cblxuICBmcy5yZWFkZGlyKGRpcnBhdGgsIGZ1bmN0aW9uKGVyciwgbGlzdCkge1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgZmlsZTtcbiAgICB2YXIgZmlsZXBhdGg7XG5cbiAgICBpZiAoZXJyKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICB9XG5cbiAgICAoZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIGZpbGUgPSBsaXN0W2krK107XG5cbiAgICAgIGlmICghZmlsZSkge1xuICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCwgcmVzdWx0cyk7XG4gICAgICB9XG5cbiAgICAgIGZpbGVwYXRoID0gcGF0aC5qb2luKGRpcnBhdGgsIGZpbGUpO1xuXG4gICAgICBmcy5zdGF0KGZpbGVwYXRoLCBmdW5jdGlvbihlcnIsIHN0YXRzKSB7XG4gICAgICAgIHJlc3VsdHMucHVzaCh7XG4gICAgICAgICAgcGF0aDogZmlsZXBhdGgsXG4gICAgICAgICAgcmVsYXRpdmU6IHBhdGgucmVsYXRpdmUoYmFzZSwgZmlsZXBhdGgpLnJlcGxhY2UoL1xcXFwvZywgJy8nKSxcbiAgICAgICAgICBzdGF0czogc3RhdHNcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHN0YXRzICYmIHN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgICB1dGlscy53YWxrZGlyKGZpbGVwYXRoLCBiYXNlLCBmdW5jdGlvbihlcnIsIHJlcykge1xuXHQgICAgaWYoZXJyKXtcblx0ICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG5cdCAgICB9XG5cbiAgICAgICAgICAgIHJlcy5mb3JFYWNoKGZ1bmN0aW9uKGRpckVudHJ5KSB7XG4gICAgICAgICAgICAgIHJlc3VsdHMucHVzaChkaXJFbnRyeSk7XG4gICAgICAgICAgICB9KTtcblx0XHQgIFxuICAgICAgICAgICAgbmV4dCgpOyAgXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KSgpO1xuICB9KTtcbn07XG4iLAogICAgIi8qKlxuICogQXJjaGl2ZXIgQ29yZVxuICpcbiAqIEBpZ25vcmVcbiAqIEBsaWNlbnNlIFtNSVRde0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hcmNoaXZlcmpzL25vZGUtYXJjaGl2ZXIvYmxvYi9tYXN0ZXIvTElDRU5TRX1cbiAqIEBjb3B5cmlnaHQgKGMpIDIwMTItMjAxNCBDaHJpcyBUYWxraW5ndG9uLCBjb250cmlidXRvcnMuXG4gKi9cblxudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG5cbmNvbnN0IEVSUk9SX0NPREVTID0ge1xuICAnQUJPUlRFRCc6ICdhcmNoaXZlIHdhcyBhYm9ydGVkJyxcbiAgJ0RJUkVDVE9SWURJUlBBVEhSRVFVSVJFRCc6ICdkaXJldG9yeSBkaXJwYXRoIGFyZ3VtZW50IG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIHZhbHVlJyxcbiAgJ0RJUkVDVE9SWUZVTkNUSU9OSU5WQUxJRERBVEEnOiAnaW52YWxpZCBkYXRhIHJldHVybmVkIGJ5IGRpcmVjdG9yeSBjdXN0b20gZGF0YSBmdW5jdGlvbicsXG4gICdFTlRSWU5BTUVSRVFVSVJFRCc6ICdlbnRyeSBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIHZhbHVlJyxcbiAgJ0ZJTEVGSUxFUEFUSFJFUVVJUkVEJzogJ2ZpbGUgZmlsZXBhdGggYXJndW1lbnQgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcgdmFsdWUnLFxuICAnRklOQUxJWklORyc6ICdhcmNoaXZlIGFscmVhZHkgZmluYWxpemluZycsXG4gICdRVUVVRUNMT1NFRCc6ICdxdWV1ZSBjbG9zZWQnLFxuICAnTk9FTkRNRVRIT0QnOiAnbm8gc3VpdGFibGUgZmluYWxpemUvZW5kIG1ldGhvZCBkZWZpbmVkIGJ5IG1vZHVsZScsXG4gICdESVJFQ1RPUllOT1RTVVBQT1JURUQnOiAnc3VwcG9ydCBmb3IgZGlyZWN0b3J5IGVudHJpZXMgbm90IGRlZmluZWQgYnkgbW9kdWxlJyxcbiAgJ0ZPUk1BVFNFVCc6ICdhcmNoaXZlIGZvcm1hdCBhbHJlYWR5IHNldCcsXG4gICdJTlBVVFNURUFNQlVGRkVSUkVRVUlSRUQnOiAnaW5wdXQgc291cmNlIG11c3QgYmUgdmFsaWQgU3RyZWFtIG9yIEJ1ZmZlciBpbnN0YW5jZScsXG4gICdNT0RVTEVTRVQnOiAnbW9kdWxlIGFscmVhZHkgc2V0JyxcbiAgJ1NZTUxJTktOT1RTVVBQT1JURUQnOiAnc3VwcG9ydCBmb3Igc3ltbGluayBlbnRyaWVzIG5vdCBkZWZpbmVkIGJ5IG1vZHVsZScsXG4gICdTWU1MSU5LRklMRVBBVEhSRVFVSVJFRCc6ICdzeW1saW5rIGZpbGVwYXRoIGFyZ3VtZW50IG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIHZhbHVlJyxcbiAgJ1NZTUxJTktUQVJHRVRSRVFVSVJFRCc6ICdzeW1saW5rIHRhcmdldCBhcmd1bWVudCBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyB2YWx1ZScsXG4gICdFTlRSWU5PVFNVUFBPUlRFRCc6ICdlbnRyeSBub3Qgc3VwcG9ydGVkJ1xufTtcblxuZnVuY3Rpb24gQXJjaGl2ZXJFcnJvcihjb2RlLCBkYXRhKSB7XG4gIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuICAvL3RoaXMubmFtZSA9IHRoaXMuY29uc3RydWN0b3IubmFtZTtcbiAgdGhpcy5tZXNzYWdlID0gRVJST1JfQ09ERVNbY29kZV0gfHwgY29kZTtcbiAgdGhpcy5jb2RlID0gY29kZTtcbiAgdGhpcy5kYXRhID0gZGF0YTtcbn1cblxudXRpbC5pbmhlcml0cyhBcmNoaXZlckVycm9yLCBFcnJvcik7XG5cbmV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IEFyY2hpdmVyRXJyb3I7IiwKICAgICIvKipcbiAqIEFyY2hpdmVyIENvcmVcbiAqXG4gKiBAaWdub3JlXG4gKiBAbGljZW5zZSBbTUlUXXtAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXJjaGl2ZXJqcy9ub2RlLWFyY2hpdmVyL2Jsb2IvbWFzdGVyL0xJQ0VOU0V9XG4gKiBAY29weXJpZ2h0IChjKSAyMDEyLTIwMTQgQ2hyaXMgVGFsa2luZ3RvbiwgY29udHJpYnV0b3JzLlxuICovXG52YXIgZnMgPSByZXF1aXJlKCdmcycpO1xudmFyIGdsb2IgPSByZXF1aXJlKCdyZWFkZGlyLWdsb2InKTtcbnZhciBhc3luYyA9IHJlcXVpcmUoJ2FzeW5jJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcbnZhciB1dGlsID0gcmVxdWlyZSgnYXJjaGl2ZXItdXRpbHMnKTtcblxudmFyIGluaGVyaXRzID0gcmVxdWlyZSgndXRpbCcpLmluaGVyaXRzO1xudmFyIEFyY2hpdmVyRXJyb3IgPSByZXF1aXJlKCcuL2Vycm9yJyk7XG52YXIgVHJhbnNmb3JtID0gcmVxdWlyZSgncmVhZGFibGUtc3RyZWFtJykuVHJhbnNmb3JtO1xuXG52YXIgd2luMzIgPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInO1xuXG4vKipcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtTdHJpbmd9IGZvcm1hdCBUaGUgYXJjaGl2ZSBmb3JtYXQgdG8gdXNlLlxuICogQHBhcmFtIHsoQ29yZU9wdGlvbnN8VHJhbnNmb3JtT3B0aW9ucyl9IG9wdGlvbnMgU2VlIGFsc28ge0BsaW5rIFppcE9wdGlvbnN9IGFuZCB7QGxpbmsgVGFyT3B0aW9uc30uXG4gKi9cbnZhciBBcmNoaXZlciA9IGZ1bmN0aW9uKGZvcm1hdCwgb3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQXJjaGl2ZXIpKSB7XG4gICAgcmV0dXJuIG5ldyBBcmNoaXZlcihmb3JtYXQsIG9wdGlvbnMpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBmb3JtYXQgIT09ICdzdHJpbmcnKSB7XG4gICAgb3B0aW9ucyA9IGZvcm1hdDtcbiAgICBmb3JtYXQgPSAnemlwJztcbiAgfVxuXG4gIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMgPSB1dGlsLmRlZmF1bHRzKG9wdGlvbnMsIHtcbiAgICBoaWdoV2F0ZXJNYXJrOiAxMDI0ICogMTAyNCxcbiAgICBzdGF0Q29uY3VycmVuY3k6IDRcbiAgfSk7XG5cbiAgVHJhbnNmb3JtLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cbiAgdGhpcy5fZm9ybWF0ID0gZmFsc2U7XG4gIHRoaXMuX21vZHVsZSA9IGZhbHNlO1xuICB0aGlzLl9wZW5kaW5nID0gMDtcbiAgdGhpcy5fcG9pbnRlciA9IDA7XG5cbiAgdGhpcy5fZW50cmllc0NvdW50ID0gMDtcbiAgdGhpcy5fZW50cmllc1Byb2Nlc3NlZENvdW50ID0gMDtcbiAgdGhpcy5fZnNFbnRyaWVzVG90YWxCeXRlcyA9IDA7XG4gIHRoaXMuX2ZzRW50cmllc1Byb2Nlc3NlZEJ5dGVzID0gMDtcblxuICB0aGlzLl9xdWV1ZSA9IGFzeW5jLnF1ZXVlKHRoaXMuX29uUXVldWVUYXNrLmJpbmQodGhpcyksIDEpO1xuICB0aGlzLl9xdWV1ZS5kcmFpbih0aGlzLl9vblF1ZXVlRHJhaW4uYmluZCh0aGlzKSk7XG5cbiAgdGhpcy5fc3RhdFF1ZXVlID0gYXN5bmMucXVldWUodGhpcy5fb25TdGF0UXVldWVUYXNrLmJpbmQodGhpcyksIG9wdGlvbnMuc3RhdENvbmN1cnJlbmN5KTtcbiAgdGhpcy5fc3RhdFF1ZXVlLmRyYWluKHRoaXMuX29uUXVldWVEcmFpbi5iaW5kKHRoaXMpKTtcblxuICB0aGlzLl9zdGF0ZSA9IHtcbiAgICBhYm9ydGVkOiBmYWxzZSxcbiAgICBmaW5hbGl6ZTogZmFsc2UsXG4gICAgZmluYWxpemluZzogZmFsc2UsXG4gICAgZmluYWxpemVkOiBmYWxzZSxcbiAgICBtb2R1bGVQaXBlZDogZmFsc2VcbiAgfTtcblxuICB0aGlzLl9zdHJlYW1zID0gW107XG59O1xuXG5pbmhlcml0cyhBcmNoaXZlciwgVHJhbnNmb3JtKTtcblxuLyoqXG4gKiBJbnRlcm5hbCBsb2dpYyBmb3IgYGFib3J0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB2b2lkXG4gKi9cbkFyY2hpdmVyLnByb3RvdHlwZS5fYWJvcnQgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fc3RhdGUuYWJvcnRlZCA9IHRydWU7XG4gIHRoaXMuX3F1ZXVlLmtpbGwoKTtcbiAgdGhpcy5fc3RhdFF1ZXVlLmtpbGwoKTtcblxuICBpZiAodGhpcy5fcXVldWUuaWRsZSgpKSB7XG4gICAgdGhpcy5fc2h1dGRvd24oKTtcbiAgfVxufTtcblxuLyoqXG4gKiBJbnRlcm5hbCBoZWxwZXIgZm9yIGFwcGVuZGluZyBmaWxlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtICB7U3RyaW5nfSBmaWxlcGF0aCBUaGUgc291cmNlIGZpbGVwYXRoLlxuICogQHBhcmFtICB7RW50cnlEYXRhfSBkYXRhIFRoZSBlbnRyeSBkYXRhLlxuICogQHJldHVybiB2b2lkXG4gKi9cbkFyY2hpdmVyLnByb3RvdHlwZS5fYXBwZW5kID0gZnVuY3Rpb24oZmlsZXBhdGgsIGRhdGEpIHtcbiAgZGF0YSA9IGRhdGEgfHwge307XG5cbiAgdmFyIHRhc2sgPSB7XG4gICAgc291cmNlOiBudWxsLFxuICAgIGZpbGVwYXRoOiBmaWxlcGF0aFxuICB9O1xuXG4gIGlmICghZGF0YS5uYW1lKSB7XG4gICAgZGF0YS5uYW1lID0gZmlsZXBhdGg7XG4gIH1cblxuICBkYXRhLnNvdXJjZVBhdGggPSBmaWxlcGF0aDtcbiAgdGFzay5kYXRhID0gZGF0YTtcbiAgdGhpcy5fZW50cmllc0NvdW50Kys7XG5cbiAgaWYgKGRhdGEuc3RhdHMgJiYgZGF0YS5zdGF0cyBpbnN0YW5jZW9mIGZzLlN0YXRzKSB7XG4gICAgdGFzayA9IHRoaXMuX3VwZGF0ZVF1ZXVlVGFza1dpdGhTdGF0cyh0YXNrLCBkYXRhLnN0YXRzKTtcbiAgICBpZiAodGFzaykge1xuICAgICAgaWYgKGRhdGEuc3RhdHMuc2l6ZSkge1xuICAgICAgICB0aGlzLl9mc0VudHJpZXNUb3RhbEJ5dGVzICs9IGRhdGEuc3RhdHMuc2l6ZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fcXVldWUucHVzaCh0YXNrKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fc3RhdFF1ZXVlLnB1c2godGFzayk7XG4gIH1cbn07XG5cbi8qKlxuICogSW50ZXJuYWwgbG9naWMgZm9yIGBmaW5hbGl6ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4gdm9pZFxuICovXG5BcmNoaXZlci5wcm90b3R5cGUuX2ZpbmFsaXplID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLl9zdGF0ZS5maW5hbGl6aW5nIHx8IHRoaXMuX3N0YXRlLmZpbmFsaXplZCB8fCB0aGlzLl9zdGF0ZS5hYm9ydGVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdGhpcy5fc3RhdGUuZmluYWxpemluZyA9IHRydWU7XG5cbiAgdGhpcy5fbW9kdWxlRmluYWxpemUoKTtcblxuICB0aGlzLl9zdGF0ZS5maW5hbGl6aW5nID0gZmFsc2U7XG4gIHRoaXMuX3N0YXRlLmZpbmFsaXplZCA9IHRydWU7XG59O1xuXG4vKipcbiAqIENoZWNrcyB0aGUgdmFyaW91cyBzdGF0ZSB2YXJpYWJsZXMgdG8gZGV0ZXJtaW5lIGlmIHdlIGNhbiBgZmluYWxpemVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICovXG5BcmNoaXZlci5wcm90b3R5cGUuX21heWJlRmluYWxpemUgPSBmdW5jdGlvbigpIHtcbiAgaWYgKHRoaXMuX3N0YXRlLmZpbmFsaXppbmcgfHwgdGhpcy5fc3RhdGUuZmluYWxpemVkIHx8IHRoaXMuX3N0YXRlLmFib3J0ZWQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAodGhpcy5fc3RhdGUuZmluYWxpemUgJiYgdGhpcy5fcGVuZGluZyA9PT0gMCAmJiB0aGlzLl9xdWV1ZS5pZGxlKCkgJiYgdGhpcy5fc3RhdFF1ZXVlLmlkbGUoKSkge1xuICAgIHRoaXMuX2ZpbmFsaXplKCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIEFwcGVuZHMgYW4gZW50cnkgdG8gdGhlIG1vZHVsZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGZpcmVzICBBcmNoaXZlciNlbnRyeVxuICogQHBhcmFtICB7KEJ1ZmZlcnxTdHJlYW0pfSBzb3VyY2VcbiAqIEBwYXJhbSAge0VudHJ5RGF0YX0gZGF0YVxuICogQHBhcmFtICB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHZvaWRcbiAqL1xuQXJjaGl2ZXIucHJvdG90eXBlLl9tb2R1bGVBcHBlbmQgPSBmdW5jdGlvbihzb3VyY2UsIGRhdGEsIGNhbGxiYWNrKSB7XG4gIGlmICh0aGlzLl9zdGF0ZS5hYm9ydGVkKSB7XG4gICAgY2FsbGJhY2soKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aGlzLl9tb2R1bGUuYXBwZW5kKHNvdXJjZSwgZGF0YSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgdGhpcy5fdGFzayA9IG51bGw7XG5cbiAgICBpZiAodGhpcy5fc3RhdGUuYWJvcnRlZCkge1xuICAgICAgdGhpcy5fc2h1dGRvd24oKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZXJyKSB7XG4gICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgICAgIHNldEltbWVkaWF0ZShjYWxsYmFjayk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiB0aGUgZW50cnkncyBpbnB1dCBoYXMgYmVlbiBwcm9jZXNzZWQgYW5kIGFwcGVuZGVkIHRvIHRoZSBhcmNoaXZlLlxuICAgICAqXG4gICAgICogQGV2ZW50IEFyY2hpdmVyI2VudHJ5XG4gICAgICogQHR5cGUge0VudHJ5RGF0YX1cbiAgICAgKi9cbiAgICB0aGlzLmVtaXQoJ2VudHJ5JywgZGF0YSk7XG4gICAgdGhpcy5fZW50cmllc1Byb2Nlc3NlZENvdW50Kys7XG5cbiAgICBpZiAoZGF0YS5zdGF0cyAmJiBkYXRhLnN0YXRzLnNpemUpIHtcbiAgICAgIHRoaXMuX2ZzRW50cmllc1Byb2Nlc3NlZEJ5dGVzICs9IGRhdGEuc3RhdHMuc2l6ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZXZlbnQgQXJjaGl2ZXIjcHJvZ3Jlc3NcbiAgICAgKiBAdHlwZSB7UHJvZ3Jlc3NEYXRhfVxuICAgICAqL1xuICAgIHRoaXMuZW1pdCgncHJvZ3Jlc3MnLCB7XG4gICAgICBlbnRyaWVzOiB7XG4gICAgICAgIHRvdGFsOiB0aGlzLl9lbnRyaWVzQ291bnQsXG4gICAgICAgIHByb2Nlc3NlZDogdGhpcy5fZW50cmllc1Byb2Nlc3NlZENvdW50XG4gICAgICB9LFxuICAgICAgZnM6IHtcbiAgICAgICAgdG90YWxCeXRlczogdGhpcy5fZnNFbnRyaWVzVG90YWxCeXRlcyxcbiAgICAgICAgcHJvY2Vzc2VkQnl0ZXM6IHRoaXMuX2ZzRW50cmllc1Byb2Nlc3NlZEJ5dGVzXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBzZXRJbW1lZGlhdGUoY2FsbGJhY2spO1xuICB9LmJpbmQodGhpcykpO1xufTtcblxuLyoqXG4gKiBGaW5hbGl6ZXMgdGhlIG1vZHVsZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB2b2lkXG4gKi9cbkFyY2hpdmVyLnByb3RvdHlwZS5fbW9kdWxlRmluYWxpemUgPSBmdW5jdGlvbigpIHtcbiAgaWYgKHR5cGVvZiB0aGlzLl9tb2R1bGUuZmluYWxpemUgPT09ICdmdW5jdGlvbicpIHtcbiAgICB0aGlzLl9tb2R1bGUuZmluYWxpemUoKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5fbW9kdWxlLmVuZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRoaXMuX21vZHVsZS5lbmQoKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmVtaXQoJ2Vycm9yJywgbmV3IEFyY2hpdmVyRXJyb3IoJ05PRU5ETUVUSE9EJykpO1xuICB9XG59O1xuXG4vKipcbiAqIFBpcGVzIHRoZSBtb2R1bGUgdG8gb3VyIGludGVybmFsIHN0cmVhbSB3aXRoIGVycm9yIGJ1YmJsaW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHZvaWRcbiAqL1xuQXJjaGl2ZXIucHJvdG90eXBlLl9tb2R1bGVQaXBlID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX21vZHVsZS5vbignZXJyb3InLCB0aGlzLl9vbk1vZHVsZUVycm9yLmJpbmQodGhpcykpO1xuICB0aGlzLl9tb2R1bGUucGlwZSh0aGlzKTtcbiAgdGhpcy5fc3RhdGUubW9kdWxlUGlwZWQgPSB0cnVlO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIHRoZSBjdXJyZW50IG1vZHVsZSBzdXBwb3J0cyBhIGRlZmluZWQgZmVhdHVyZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtICB7U3RyaW5nfSBrZXlcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKi9cbkFyY2hpdmVyLnByb3RvdHlwZS5fbW9kdWxlU3VwcG9ydHMgPSBmdW5jdGlvbihrZXkpIHtcbiAgaWYgKCF0aGlzLl9tb2R1bGUuc3VwcG9ydHMgfHwgIXRoaXMuX21vZHVsZS5zdXBwb3J0c1trZXldKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuX21vZHVsZS5zdXBwb3J0c1trZXldO1xufTtcblxuLyoqXG4gKiBVbnBpcGVzIHRoZSBtb2R1bGUgZnJvbSBvdXIgaW50ZXJuYWwgc3RyZWFtLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHZvaWRcbiAqL1xuQXJjaGl2ZXIucHJvdG90eXBlLl9tb2R1bGVVbnBpcGUgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fbW9kdWxlLnVucGlwZSh0aGlzKTtcbiAgdGhpcy5fc3RhdGUubW9kdWxlUGlwZWQgPSBmYWxzZTtcbn07XG5cbi8qKlxuICogTm9ybWFsaXplcyBlbnRyeSBkYXRhIHdpdGggZmFsbGJhY2tzIGZvciBrZXkgcHJvcGVydGllcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtICB7T2JqZWN0fSBkYXRhXG4gKiBAcGFyYW0gIHtmcy5TdGF0c30gc3RhdHNcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuQXJjaGl2ZXIucHJvdG90eXBlLl9ub3JtYWxpemVFbnRyeURhdGEgPSBmdW5jdGlvbihkYXRhLCBzdGF0cykge1xuICBkYXRhID0gdXRpbC5kZWZhdWx0cyhkYXRhLCB7XG4gICAgdHlwZTogJ2ZpbGUnLFxuICAgIG5hbWU6IG51bGwsXG4gICAgZGF0ZTogbnVsbCxcbiAgICBtb2RlOiBudWxsLFxuICAgIHByZWZpeDogbnVsbCxcbiAgICBzb3VyY2VQYXRoOiBudWxsLFxuICAgIHN0YXRzOiBmYWxzZVxuICB9KTtcblxuICBpZiAoc3RhdHMgJiYgZGF0YS5zdGF0cyA9PT0gZmFsc2UpIHtcbiAgICBkYXRhLnN0YXRzID0gc3RhdHM7XG4gIH1cblxuICB2YXIgaXNEaXIgPSBkYXRhLnR5cGUgPT09ICdkaXJlY3RvcnknO1xuXG4gIGlmIChkYXRhLm5hbWUpIHtcbiAgICBpZiAodHlwZW9mIGRhdGEucHJlZml4ID09PSAnc3RyaW5nJyAmJiAnJyAhPT0gZGF0YS5wcmVmaXgpIHtcbiAgICAgIGRhdGEubmFtZSA9IGRhdGEucHJlZml4ICsgJy8nICsgZGF0YS5uYW1lO1xuICAgICAgZGF0YS5wcmVmaXggPSBudWxsO1xuICAgIH1cblxuICAgIGRhdGEubmFtZSA9IHV0aWwuc2FuaXRpemVQYXRoKGRhdGEubmFtZSk7XG5cbiAgICBpZiAoZGF0YS50eXBlICE9PSAnc3ltbGluaycgJiYgZGF0YS5uYW1lLnNsaWNlKC0xKSA9PT0gJy8nKSB7XG4gICAgICBpc0RpciA9IHRydWU7XG4gICAgICBkYXRhLnR5cGUgPSAnZGlyZWN0b3J5JztcbiAgICB9IGVsc2UgaWYgKGlzRGlyKSB7XG4gICAgICBkYXRhLm5hbWUgKz0gJy8nO1xuICAgIH1cbiAgfVxuXG4gIC8vIDUxMSA9PT0gMDc3NzsgNDkzID09PSAwNzU1OyA0MzggPT09IDA2NjY7IDQyMCA9PT0gMDY0NFxuICBpZiAodHlwZW9mIGRhdGEubW9kZSA9PT0gJ251bWJlcicpIHtcbiAgICBpZiAod2luMzIpIHtcbiAgICAgIGRhdGEubW9kZSAmPSA1MTE7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGEubW9kZSAmPSA0MDk1XG4gICAgfVxuICB9IGVsc2UgaWYgKGRhdGEuc3RhdHMgJiYgZGF0YS5tb2RlID09PSBudWxsKSB7XG4gICAgaWYgKHdpbjMyKSB7XG4gICAgICBkYXRhLm1vZGUgPSBkYXRhLnN0YXRzLm1vZGUgJiA1MTE7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGEubW9kZSA9IGRhdGEuc3RhdHMubW9kZSAmIDQwOTU7XG4gICAgfVxuXG4gICAgLy8gc3RhdCBpc24ndCByZWxpYWJsZSBvbiB3aW5kb3dzOyBmb3JjZSAwNzU1IGZvciBkaXJcbiAgICBpZiAod2luMzIgJiYgaXNEaXIpIHtcbiAgICAgIGRhdGEubW9kZSA9IDQ5MztcbiAgICB9XG4gIH0gZWxzZSBpZiAoZGF0YS5tb2RlID09PSBudWxsKSB7XG4gICAgZGF0YS5tb2RlID0gaXNEaXIgPyA0OTMgOiA0MjA7XG4gIH1cblxuICBpZiAoZGF0YS5zdGF0cyAmJiBkYXRhLmRhdGUgPT09IG51bGwpIHtcbiAgICBkYXRhLmRhdGUgPSBkYXRhLnN0YXRzLm10aW1lO1xuICB9IGVsc2Uge1xuICAgIGRhdGEuZGF0ZSA9IHV0aWwuZGF0ZWlmeShkYXRhLmRhdGUpO1xuICB9XG5cbiAgcmV0dXJuIGRhdGE7XG59O1xuXG4vKipcbiAqIEVycm9yIGxpc3RlbmVyIHRoYXQgcmUtZW1pdHMgZXJyb3Igb24gdG8gb3VyIGludGVybmFsIHN0cmVhbS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtICB7RXJyb3J9IGVyclxuICogQHJldHVybiB2b2lkXG4gKi9cbkFyY2hpdmVyLnByb3RvdHlwZS5fb25Nb2R1bGVFcnJvciA9IGZ1bmN0aW9uKGVycikge1xuICAvKipcbiAgICogQGV2ZW50IEFyY2hpdmVyI2Vycm9yXG4gICAqIEB0eXBlIHtFcnJvckRhdGF9XG4gICAqL1xuICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHRoZSB2YXJpb3VzIHN0YXRlIHZhcmlhYmxlcyBhZnRlciBxdWV1ZSBoYXMgZHJhaW5lZCB0byBkZXRlcm1pbmUgaWZcbiAqIHdlIG5lZWQgdG8gYGZpbmFsaXplYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB2b2lkXG4gKi9cbkFyY2hpdmVyLnByb3RvdHlwZS5fb25RdWV1ZURyYWluID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLl9zdGF0ZS5maW5hbGl6aW5nIHx8IHRoaXMuX3N0YXRlLmZpbmFsaXplZCB8fCB0aGlzLl9zdGF0ZS5hYm9ydGVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHRoaXMuX3N0YXRlLmZpbmFsaXplICYmIHRoaXMuX3BlbmRpbmcgPT09IDAgJiYgdGhpcy5fcXVldWUuaWRsZSgpICYmIHRoaXMuX3N0YXRRdWV1ZS5pZGxlKCkpIHtcbiAgICB0aGlzLl9maW5hbGl6ZSgpO1xuICB9XG59O1xuXG4vKipcbiAqIEFwcGVuZHMgZWFjaCBxdWV1ZSB0YXNrIHRvIHRoZSBtb2R1bGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSAge09iamVjdH0gdGFza1xuICogQHBhcmFtICB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHZvaWRcbiAqL1xuQXJjaGl2ZXIucHJvdG90eXBlLl9vblF1ZXVlVGFzayA9IGZ1bmN0aW9uKHRhc2ssIGNhbGxiYWNrKSB7XG4gIHZhciBmdWxsQ2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgaWYodGFzay5kYXRhLmNhbGxiYWNrKSB7XG4gICAgICB0YXNrLmRhdGEuY2FsbGJhY2soKTtcbiAgICB9XG4gICAgY2FsbGJhY2soKTtcbiAgfVxuXG4gIGlmICh0aGlzLl9zdGF0ZS5maW5hbGl6aW5nIHx8IHRoaXMuX3N0YXRlLmZpbmFsaXplZCB8fCB0aGlzLl9zdGF0ZS5hYm9ydGVkKSB7XG4gICAgZnVsbENhbGxiYWNrKCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdGhpcy5fdGFzayA9IHRhc2s7XG4gIHRoaXMuX21vZHVsZUFwcGVuZCh0YXNrLnNvdXJjZSwgdGFzay5kYXRhLCBmdWxsQ2FsbGJhY2spO1xufTtcblxuLyoqXG4gKiBQZXJmb3JtcyBhIGZpbGUgc3RhdCBhbmQgcmVpbmplY3RzIHRoZSB0YXNrIGJhY2sgaW50byB0aGUgcXVldWUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSAge09iamVjdH0gdGFza1xuICogQHBhcmFtICB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHZvaWRcbiAqL1xuQXJjaGl2ZXIucHJvdG90eXBlLl9vblN0YXRRdWV1ZVRhc2sgPSBmdW5jdGlvbih0YXNrLCBjYWxsYmFjaykge1xuICBpZiAodGhpcy5fc3RhdGUuZmluYWxpemluZyB8fCB0aGlzLl9zdGF0ZS5maW5hbGl6ZWQgfHwgdGhpcy5fc3RhdGUuYWJvcnRlZCkge1xuICAgIGNhbGxiYWNrKCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZnMubHN0YXQodGFzay5maWxlcGF0aCwgZnVuY3Rpb24oZXJyLCBzdGF0cykge1xuICAgIGlmICh0aGlzLl9zdGF0ZS5hYm9ydGVkKSB7XG4gICAgICBzZXRJbW1lZGlhdGUoY2FsbGJhY2spO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChlcnIpIHtcbiAgICAgIHRoaXMuX2VudHJpZXNDb3VudC0tO1xuXG4gICAgICAvKipcbiAgICAgICAqIEBldmVudCBBcmNoaXZlciN3YXJuaW5nXG4gICAgICAgKiBAdHlwZSB7RXJyb3JEYXRhfVxuICAgICAgICovXG4gICAgICB0aGlzLmVtaXQoJ3dhcm5pbmcnLCBlcnIpO1xuICAgICAgc2V0SW1tZWRpYXRlKGNhbGxiYWNrKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0YXNrID0gdGhpcy5fdXBkYXRlUXVldWVUYXNrV2l0aFN0YXRzKHRhc2ssIHN0YXRzKTtcblxuICAgIGlmICh0YXNrKSB7XG4gICAgICBpZiAoc3RhdHMuc2l6ZSkge1xuICAgICAgICB0aGlzLl9mc0VudHJpZXNUb3RhbEJ5dGVzICs9IHN0YXRzLnNpemU7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3F1ZXVlLnB1c2godGFzayk7XG4gICAgfVxuXG4gICAgc2V0SW1tZWRpYXRlKGNhbGxiYWNrKTtcbiAgfS5iaW5kKHRoaXMpKTtcbn07XG5cbi8qKlxuICogVW5waXBlcyB0aGUgbW9kdWxlIGFuZCBlbmRzIG91ciBpbnRlcm5hbCBzdHJlYW0uXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4gdm9pZFxuICovXG5BcmNoaXZlci5wcm90b3R5cGUuX3NodXRkb3duID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX21vZHVsZVVucGlwZSgpO1xuICB0aGlzLmVuZCgpO1xufTtcblxuLyoqXG4gKiBUcmFja3MgdGhlIGJ5dGVzIGVtaXR0ZWQgYnkgb3VyIGludGVybmFsIHN0cmVhbS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtICB7QnVmZmVyfSBjaHVua1xuICogQHBhcmFtICB7U3RyaW5nfSBlbmNvZGluZ1xuICogQHBhcmFtICB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHZvaWRcbiAqL1xuQXJjaGl2ZXIucHJvdG90eXBlLl90cmFuc2Zvcm0gPSBmdW5jdGlvbihjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gIGlmIChjaHVuaykge1xuICAgIHRoaXMuX3BvaW50ZXIgKz0gY2h1bmsubGVuZ3RoO1xuICB9XG5cbiAgY2FsbGJhY2sobnVsbCwgY2h1bmspO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIGFuZCBub3JtYWxpemVzIGEgcXVldWUgdGFzayB1c2luZyBzdGF0cyBkYXRhLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gIHtPYmplY3R9IHRhc2tcbiAqIEBwYXJhbSAge2ZzLlN0YXRzfSBzdGF0c1xuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5BcmNoaXZlci5wcm90b3R5cGUuX3VwZGF0ZVF1ZXVlVGFza1dpdGhTdGF0cyA9IGZ1bmN0aW9uKHRhc2ssIHN0YXRzKSB7XG4gIGlmIChzdGF0cy5pc0ZpbGUoKSkge1xuICAgIHRhc2suZGF0YS50eXBlID0gJ2ZpbGUnO1xuICAgIHRhc2suZGF0YS5zb3VyY2VUeXBlID0gJ3N0cmVhbSc7XG4gICAgdGFzay5zb3VyY2UgPSB1dGlsLmxhenlSZWFkU3RyZWFtKHRhc2suZmlsZXBhdGgpO1xuICB9IGVsc2UgaWYgKHN0YXRzLmlzRGlyZWN0b3J5KCkgJiYgdGhpcy5fbW9kdWxlU3VwcG9ydHMoJ2RpcmVjdG9yeScpKSB7XG4gICAgdGFzay5kYXRhLm5hbWUgPSB1dGlsLnRyYWlsaW5nU2xhc2hJdCh0YXNrLmRhdGEubmFtZSk7XG4gICAgdGFzay5kYXRhLnR5cGUgPSAnZGlyZWN0b3J5JztcbiAgICB0YXNrLmRhdGEuc291cmNlUGF0aCA9IHV0aWwudHJhaWxpbmdTbGFzaEl0KHRhc2suZmlsZXBhdGgpO1xuICAgIHRhc2suZGF0YS5zb3VyY2VUeXBlID0gJ2J1ZmZlcic7XG4gICAgdGFzay5zb3VyY2UgPSBCdWZmZXIuY29uY2F0KFtdKTtcbiAgfSBlbHNlIGlmIChzdGF0cy5pc1N5bWJvbGljTGluaygpICYmIHRoaXMuX21vZHVsZVN1cHBvcnRzKCdzeW1saW5rJykpIHtcbiAgICB2YXIgbGlua1BhdGggPSBmcy5yZWFkbGlua1N5bmModGFzay5maWxlcGF0aCk7XG4gICAgdmFyIGRpck5hbWUgPSBwYXRoLmRpcm5hbWUodGFzay5maWxlcGF0aCk7XG4gICAgdGFzay5kYXRhLnR5cGUgPSAnc3ltbGluayc7XG4gICAgdGFzay5kYXRhLmxpbmtuYW1lID0gcGF0aC5yZWxhdGl2ZShkaXJOYW1lLCBwYXRoLnJlc29sdmUoZGlyTmFtZSwgbGlua1BhdGgpKTtcbiAgICB0YXNrLmRhdGEuc291cmNlVHlwZSA9ICdidWZmZXInO1xuICAgIHRhc2suc291cmNlID0gQnVmZmVyLmNvbmNhdChbXSk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIHRoaXMuZW1pdCgnd2FybmluZycsIG5ldyBBcmNoaXZlckVycm9yKCdESVJFQ1RPUllOT1RTVVBQT1JURUQnLCB0YXNrLmRhdGEpKTtcbiAgICB9IGVsc2UgaWYgKHN0YXRzLmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICAgIHRoaXMuZW1pdCgnd2FybmluZycsIG5ldyBBcmNoaXZlckVycm9yKCdTWU1MSU5LTk9UU1VQUE9SVEVEJywgdGFzay5kYXRhKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZW1pdCgnd2FybmluZycsIG5ldyBBcmNoaXZlckVycm9yKCdFTlRSWU5PVFNVUFBPUlRFRCcsIHRhc2suZGF0YSkpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdGFzay5kYXRhID0gdGhpcy5fbm9ybWFsaXplRW50cnlEYXRhKHRhc2suZGF0YSwgc3RhdHMpO1xuXG4gIHJldHVybiB0YXNrO1xufTtcblxuLyoqXG4gKiBBYm9ydHMgdGhlIGFyY2hpdmluZyBwcm9jZXNzLCB0YWtpbmcgYSBiZXN0LWVmZm9ydCBhcHByb2FjaCwgYnk6XG4gKlxuICogLSByZW1vdmluZyBhbnkgcGVuZGluZyBxdWV1ZSB0YXNrc1xuICogLSBhbGxvd2luZyBhbnkgYWN0aXZlIHF1ZXVlIHdvcmtlcnMgdG8gZmluaXNoXG4gKiAtIGRldGFjaGluZyBpbnRlcm5hbCBtb2R1bGUgcGlwZXNcbiAqIC0gZW5kaW5nIGJvdGggc2lkZXMgb2YgdGhlIFRyYW5zZm9ybSBzdHJlYW1cbiAqXG4gKiBJdCB3aWxsIE5PVCBkcmFpbiBhbnkgcmVtYWluaW5nIHNvdXJjZXMuXG4gKlxuICogQHJldHVybiB7dGhpc31cbiAqL1xuQXJjaGl2ZXIucHJvdG90eXBlLmFib3J0ID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLl9zdGF0ZS5hYm9ydGVkIHx8IHRoaXMuX3N0YXRlLmZpbmFsaXplZCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdGhpcy5fYWJvcnQoKTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwZW5kcyBhbiBpbnB1dCBzb3VyY2UgKHRleHQgc3RyaW5nLCBidWZmZXIsIG9yIHN0cmVhbSkgdG8gdGhlIGluc3RhbmNlLlxuICpcbiAqIFdoZW4gdGhlIGluc3RhbmNlIGhhcyByZWNlaXZlZCwgcHJvY2Vzc2VkLCBhbmQgZW1pdHRlZCB0aGUgaW5wdXQsIHRoZSBgZW50cnlgXG4gKiBldmVudCBpcyBmaXJlZC5cbiAqXG4gKiBAZmlyZXMgIEFyY2hpdmVyI2VudHJ5XG4gKiBAcGFyYW0gIHsoQnVmZmVyfFN0cmVhbXxTdHJpbmcpfSBzb3VyY2UgVGhlIGlucHV0IHNvdXJjZS5cbiAqIEBwYXJhbSAge0VudHJ5RGF0YX0gZGF0YSBTZWUgYWxzbyB7QGxpbmsgWmlwRW50cnlEYXRhfSBhbmQge0BsaW5rIFRhckVudHJ5RGF0YX0uXG4gKiBAcmV0dXJuIHt0aGlzfVxuICovXG5BcmNoaXZlci5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24oc291cmNlLCBkYXRhKSB7XG4gIGlmICh0aGlzLl9zdGF0ZS5maW5hbGl6ZSB8fCB0aGlzLl9zdGF0ZS5hYm9ydGVkKSB7XG4gICAgdGhpcy5lbWl0KCdlcnJvcicsIG5ldyBBcmNoaXZlckVycm9yKCdRVUVVRUNMT1NFRCcpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGRhdGEgPSB0aGlzLl9ub3JtYWxpemVFbnRyeURhdGEoZGF0YSk7XG5cbiAgaWYgKHR5cGVvZiBkYXRhLm5hbWUgIT09ICdzdHJpbmcnIHx8IGRhdGEubmFtZS5sZW5ndGggPT09IDApIHtcbiAgICB0aGlzLmVtaXQoJ2Vycm9yJywgbmV3IEFyY2hpdmVyRXJyb3IoJ0VOVFJZTkFNRVJFUVVJUkVEJykpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgaWYgKGRhdGEudHlwZSA9PT0gJ2RpcmVjdG9yeScgJiYgIXRoaXMuX21vZHVsZVN1cHBvcnRzKCdkaXJlY3RvcnknKSkge1xuICAgIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgQXJjaGl2ZXJFcnJvcignRElSRUNUT1JZTk9UU1VQUE9SVEVEJywgeyBuYW1lOiBkYXRhLm5hbWUgfSkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc291cmNlID0gdXRpbC5ub3JtYWxpemVJbnB1dFNvdXJjZShzb3VyY2UpO1xuXG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoc291cmNlKSkge1xuICAgIGRhdGEuc291cmNlVHlwZSA9ICdidWZmZXInO1xuICB9IGVsc2UgaWYgKHV0aWwuaXNTdHJlYW0oc291cmNlKSkge1xuICAgIGRhdGEuc291cmNlVHlwZSA9ICdzdHJlYW0nO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgQXJjaGl2ZXJFcnJvcignSU5QVVRTVEVBTUJVRkZFUlJFUVVJUkVEJywgeyBuYW1lOiBkYXRhLm5hbWUgfSkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdGhpcy5fZW50cmllc0NvdW50Kys7XG4gIHRoaXMuX3F1ZXVlLnB1c2goe1xuICAgIGRhdGE6IGRhdGEsXG4gICAgc291cmNlOiBzb3VyY2VcbiAgfSk7XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEFwcGVuZHMgYSBkaXJlY3RvcnkgYW5kIGl0cyBmaWxlcywgcmVjdXJzaXZlbHksIGdpdmVuIGl0cyBkaXJwYXRoLlxuICpcbiAqIEBwYXJhbSAge1N0cmluZ30gZGlycGF0aCBUaGUgc291cmNlIGRpcmVjdG9yeSBwYXRoLlxuICogQHBhcmFtICB7U3RyaW5nfSBkZXN0cGF0aCBUaGUgZGVzdGluYXRpb24gcGF0aCB3aXRoaW4gdGhlIGFyY2hpdmUuXG4gKiBAcGFyYW0gIHsoRW50cnlEYXRhfEZ1bmN0aW9uKX0gZGF0YSBTZWUgYWxzbyBbWmlwRW50cnlEYXRhXXtAbGluayBaaXBFbnRyeURhdGF9IGFuZFxuICogW1RhckVudHJ5RGF0YV17QGxpbmsgVGFyRW50cnlEYXRhfS5cbiAqIEByZXR1cm4ge3RoaXN9XG4gKi9cbkFyY2hpdmVyLnByb3RvdHlwZS5kaXJlY3RvcnkgPSBmdW5jdGlvbihkaXJwYXRoLCBkZXN0cGF0aCwgZGF0YSkge1xuICBpZiAodGhpcy5fc3RhdGUuZmluYWxpemUgfHwgdGhpcy5fc3RhdGUuYWJvcnRlZCkge1xuICAgIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgQXJjaGl2ZXJFcnJvcignUVVFVUVDTE9TRUQnKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBpZiAodHlwZW9mIGRpcnBhdGggIT09ICdzdHJpbmcnIHx8IGRpcnBhdGgubGVuZ3RoID09PSAwKSB7XG4gICAgdGhpcy5lbWl0KCdlcnJvcicsIG5ldyBBcmNoaXZlckVycm9yKCdESVJFQ1RPUllESVJQQVRIUkVRVUlSRUQnKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB0aGlzLl9wZW5kaW5nKys7XG5cbiAgaWYgKGRlc3RwYXRoID09PSBmYWxzZSkge1xuICAgIGRlc3RwYXRoID0gJyc7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGRlc3RwYXRoICE9PSAnc3RyaW5nJyl7XG4gICAgZGVzdHBhdGggPSBkaXJwYXRoO1xuICB9XG5cbiAgdmFyIGRhdGFGdW5jdGlvbiA9IGZhbHNlO1xuICBpZiAodHlwZW9mIGRhdGEgPT09ICdmdW5jdGlvbicpIHtcbiAgICBkYXRhRnVuY3Rpb24gPSBkYXRhO1xuICAgIGRhdGEgPSB7fTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcpIHtcbiAgICBkYXRhID0ge307XG4gIH1cblxuICB2YXIgZ2xvYk9wdGlvbnMgPSB7XG4gICAgc3RhdDogdHJ1ZSxcbiAgICBkb3Q6IHRydWVcbiAgfTtcblxuICBmdW5jdGlvbiBvbkdsb2JFbmQoKSB7XG4gICAgdGhpcy5fcGVuZGluZy0tO1xuICAgIHRoaXMuX21heWJlRmluYWxpemUoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uR2xvYkVycm9yKGVycikge1xuICAgIHRoaXMuZW1pdCgnZXJyb3InLCBlcnIpO1xuICB9XG5cbiAgZnVuY3Rpb24gb25HbG9iTWF0Y2gobWF0Y2gpe1xuICAgIGdsb2JiZXIucGF1c2UoKTtcblxuICAgIHZhciBpZ25vcmVNYXRjaCA9IGZhbHNlO1xuICAgIHZhciBlbnRyeURhdGEgPSBPYmplY3QuYXNzaWduKHt9LCBkYXRhKTtcbiAgICBlbnRyeURhdGEubmFtZSA9IG1hdGNoLnJlbGF0aXZlO1xuICAgIGVudHJ5RGF0YS5wcmVmaXggPSBkZXN0cGF0aDtcbiAgICBlbnRyeURhdGEuc3RhdHMgPSBtYXRjaC5zdGF0O1xuICAgIGVudHJ5RGF0YS5jYWxsYmFjayA9IGdsb2JiZXIucmVzdW1lLmJpbmQoZ2xvYmJlcik7XG5cbiAgICB0cnkge1xuICAgICAgaWYgKGRhdGFGdW5jdGlvbikge1xuICAgICAgICBlbnRyeURhdGEgPSBkYXRhRnVuY3Rpb24oZW50cnlEYXRhKTtcblxuICAgICAgICBpZiAoZW50cnlEYXRhID09PSBmYWxzZSkge1xuICAgICAgICAgIGlnbm9yZU1hdGNoID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZW50cnlEYXRhICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgIHRocm93IG5ldyBBcmNoaXZlckVycm9yKCdESVJFQ1RPUllGVU5DVElPTklOVkFMSUREQVRBJywgeyBkaXJwYXRoOiBkaXJwYXRoIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaChlKSB7XG4gICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGlnbm9yZU1hdGNoKSB7XG4gICAgICBnbG9iYmVyLnJlc3VtZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2FwcGVuZChtYXRjaC5hYnNvbHV0ZSwgZW50cnlEYXRhKTtcbiAgfVxuXG4gIHZhciBnbG9iYmVyID0gZ2xvYihkaXJwYXRoLCBnbG9iT3B0aW9ucyk7XG4gIGdsb2JiZXIub24oJ2Vycm9yJywgb25HbG9iRXJyb3IuYmluZCh0aGlzKSk7XG4gIGdsb2JiZXIub24oJ21hdGNoJywgb25HbG9iTWF0Y2guYmluZCh0aGlzKSk7XG4gIGdsb2JiZXIub24oJ2VuZCcsIG9uR2xvYkVuZC5iaW5kKHRoaXMpKTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwZW5kcyBhIGZpbGUgZ2l2ZW4gaXRzIGZpbGVwYXRoIHVzaW5nIGFcbiAqIFtsYXp5c3RyZWFtXXtAbGluayBodHRwczovL2dpdGh1Yi5jb20vanBvbW1lcmVuaW5nL25vZGUtbGF6eXN0cmVhbX0gd3JhcHBlciB0b1xuICogcHJldmVudCBpc3N1ZXMgd2l0aCBvcGVuIGZpbGUgbGltaXRzLlxuICpcbiAqIFdoZW4gdGhlIGluc3RhbmNlIGhhcyByZWNlaXZlZCwgcHJvY2Vzc2VkLCBhbmQgZW1pdHRlZCB0aGUgZmlsZSwgdGhlIGBlbnRyeWBcbiAqIGV2ZW50IGlzIGZpcmVkLlxuICpcbiAqIEBwYXJhbSAge1N0cmluZ30gZmlsZXBhdGggVGhlIHNvdXJjZSBmaWxlcGF0aC5cbiAqIEBwYXJhbSAge0VudHJ5RGF0YX0gZGF0YSBTZWUgYWxzbyBbWmlwRW50cnlEYXRhXXtAbGluayBaaXBFbnRyeURhdGF9IGFuZFxuICogW1RhckVudHJ5RGF0YV17QGxpbmsgVGFyRW50cnlEYXRhfS5cbiAqIEByZXR1cm4ge3RoaXN9XG4gKi9cbkFyY2hpdmVyLnByb3RvdHlwZS5maWxlID0gZnVuY3Rpb24oZmlsZXBhdGgsIGRhdGEpIHtcbiAgaWYgKHRoaXMuX3N0YXRlLmZpbmFsaXplIHx8IHRoaXMuX3N0YXRlLmFib3J0ZWQpIHtcbiAgICB0aGlzLmVtaXQoJ2Vycm9yJywgbmV3IEFyY2hpdmVyRXJyb3IoJ1FVRVVFQ0xPU0VEJykpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBmaWxlcGF0aCAhPT0gJ3N0cmluZycgfHwgZmlsZXBhdGgubGVuZ3RoID09PSAwKSB7XG4gICAgdGhpcy5lbWl0KCdlcnJvcicsIG5ldyBBcmNoaXZlckVycm9yKCdGSUxFRklMRVBBVEhSRVFVSVJFRCcpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHRoaXMuX2FwcGVuZChmaWxlcGF0aCwgZGF0YSk7XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEFwcGVuZHMgbXVsdGlwbGUgZmlsZXMgdGhhdCBtYXRjaCBhIGdsb2IgcGF0dGVybi5cbiAqXG4gKiBAcGFyYW0gIHtTdHJpbmd9IHBhdHRlcm4gVGhlIFtnbG9iIHBhdHRlcm5de0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9pc2FhY3MvbWluaW1hdGNofSB0byBtYXRjaC5cbiAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9ucyBTZWUgW25vZGUtcmVhZGRpci1nbG9iXXtAbGluayBodHRwczovL2dpdGh1Yi5jb20veXFubi9ub2RlLXJlYWRkaXItZ2xvYiNvcHRpb25zfS5cbiAqIEBwYXJhbSAge0VudHJ5RGF0YX0gZGF0YSBTZWUgYWxzbyBbWmlwRW50cnlEYXRhXXtAbGluayBaaXBFbnRyeURhdGF9IGFuZFxuICogW1RhckVudHJ5RGF0YV17QGxpbmsgVGFyRW50cnlEYXRhfS5cbiAqIEByZXR1cm4ge3RoaXN9XG4gKi9cbkFyY2hpdmVyLnByb3RvdHlwZS5nbG9iID0gZnVuY3Rpb24ocGF0dGVybiwgb3B0aW9ucywgZGF0YSkge1xuICB0aGlzLl9wZW5kaW5nKys7XG5cbiAgb3B0aW9ucyA9IHV0aWwuZGVmYXVsdHMob3B0aW9ucywge1xuICAgIHN0YXQ6IHRydWUsXG4gICAgcGF0dGVybjogcGF0dGVyblxuICB9KTtcblxuICBmdW5jdGlvbiBvbkdsb2JFbmQoKSB7XG4gICAgdGhpcy5fcGVuZGluZy0tO1xuICAgIHRoaXMuX21heWJlRmluYWxpemUoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uR2xvYkVycm9yKGVycikge1xuICAgIHRoaXMuZW1pdCgnZXJyb3InLCBlcnIpO1xuICB9XG5cbiAgZnVuY3Rpb24gb25HbG9iTWF0Y2gobWF0Y2gpe1xuICAgIGdsb2JiZXIucGF1c2UoKTtcbiAgICB2YXIgZW50cnlEYXRhID0gT2JqZWN0LmFzc2lnbih7fSwgZGF0YSk7XG4gICAgZW50cnlEYXRhLmNhbGxiYWNrID0gZ2xvYmJlci5yZXN1bWUuYmluZChnbG9iYmVyKTtcbiAgICBlbnRyeURhdGEuc3RhdHMgPSBtYXRjaC5zdGF0O1xuICAgIGVudHJ5RGF0YS5uYW1lID0gbWF0Y2gucmVsYXRpdmU7XG5cbiAgICB0aGlzLl9hcHBlbmQobWF0Y2guYWJzb2x1dGUsIGVudHJ5RGF0YSk7XG4gIH1cblxuICB2YXIgZ2xvYmJlciA9IGdsb2Iob3B0aW9ucy5jd2QgfHwgJy4nLCBvcHRpb25zKTtcbiAgZ2xvYmJlci5vbignZXJyb3InLCBvbkdsb2JFcnJvci5iaW5kKHRoaXMpKTtcbiAgZ2xvYmJlci5vbignbWF0Y2gnLCBvbkdsb2JNYXRjaC5iaW5kKHRoaXMpKTtcbiAgZ2xvYmJlci5vbignZW5kJywgb25HbG9iRW5kLmJpbmQodGhpcykpO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBGaW5hbGl6ZXMgdGhlIGluc3RhbmNlIGFuZCBwcmV2ZW50cyBmdXJ0aGVyIGFwcGVuZGluZyB0byB0aGUgYXJjaGl2ZVxuICogc3RydWN0dXJlIChxdWV1ZSB3aWxsIGNvbnRpbnVlIHRpbCBkcmFpbmVkKS5cbiAqXG4gKiBUaGUgYGVuZGAsIGBjbG9zZWAgb3IgYGZpbmlzaGAgZXZlbnRzIG9uIHRoZSBkZXN0aW5hdGlvbiBzdHJlYW0gbWF5IGZpcmVcbiAqIHJpZ2h0IGFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2Qgc28geW91IHNob3VsZCBzZXQgbGlzdGVuZXJzIGJlZm9yZWhhbmQgdG9cbiAqIHByb3Blcmx5IGRldGVjdCBzdHJlYW0gY29tcGxldGlvbi5cbiAqXG4gKiBAcmV0dXJuIHtQcm9taXNlfVxuICovXG5BcmNoaXZlci5wcm90b3R5cGUuZmluYWxpemUgPSBmdW5jdGlvbigpIHtcbiAgaWYgKHRoaXMuX3N0YXRlLmFib3J0ZWQpIHtcbiAgICB2YXIgYWJvcnRlZEVycm9yID0gbmV3IEFyY2hpdmVyRXJyb3IoJ0FCT1JURUQnKTtcbiAgICB0aGlzLmVtaXQoJ2Vycm9yJywgYWJvcnRlZEVycm9yKTtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoYWJvcnRlZEVycm9yKTtcbiAgfVxuXG4gIGlmICh0aGlzLl9zdGF0ZS5maW5hbGl6ZSkge1xuICAgIHZhciBmaW5hbGl6aW5nRXJyb3IgPSBuZXcgQXJjaGl2ZXJFcnJvcignRklOQUxJWklORycpO1xuICAgIHRoaXMuZW1pdCgnZXJyb3InLCBmaW5hbGl6aW5nRXJyb3IpO1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChmaW5hbGl6aW5nRXJyb3IpO1xuICB9XG5cbiAgdGhpcy5fc3RhdGUuZmluYWxpemUgPSB0cnVlO1xuXG4gIGlmICh0aGlzLl9wZW5kaW5nID09PSAwICYmIHRoaXMuX3F1ZXVlLmlkbGUoKSAmJiB0aGlzLl9zdGF0UXVldWUuaWRsZSgpKSB7XG4gICAgdGhpcy5fZmluYWxpemUoKTtcbiAgfVxuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgdmFyIGVycm9yZWQ7XG5cbiAgICBzZWxmLl9tb2R1bGUub24oJ2VuZCcsIGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKCFlcnJvcmVkKSB7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgc2VsZi5fbW9kdWxlLm9uKCdlcnJvcicsIGZ1bmN0aW9uKGVycikge1xuICAgICAgZXJyb3JlZCA9IHRydWU7XG4gICAgICByZWplY3QoZXJyKTtcbiAgICB9KVxuICB9KVxufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBtb2R1bGUgZm9ybWF0IG5hbWUgdXNlZCBmb3IgYXJjaGl2aW5nLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBmb3JtYXQgVGhlIG5hbWUgb2YgdGhlIGZvcm1hdC5cbiAqIEByZXR1cm4ge3RoaXN9XG4gKi9cbkFyY2hpdmVyLnByb3RvdHlwZS5zZXRGb3JtYXQgPSBmdW5jdGlvbihmb3JtYXQpIHtcbiAgaWYgKHRoaXMuX2Zvcm1hdCkge1xuICAgIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgQXJjaGl2ZXJFcnJvcignRk9STUFUU0VUJykpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdGhpcy5fZm9ybWF0ID0gZm9ybWF0O1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBtb2R1bGUgdXNlZCBmb3IgYXJjaGl2aW5nLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IG1vZHVsZSBUaGUgZnVuY3Rpb24gZm9yIGFyY2hpdmVyIHRvIGludGVyYWN0IHdpdGguXG4gKiBAcmV0dXJuIHt0aGlzfVxuICovXG5BcmNoaXZlci5wcm90b3R5cGUuc2V0TW9kdWxlID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gIGlmICh0aGlzLl9zdGF0ZS5hYm9ydGVkKSB7XG4gICAgdGhpcy5lbWl0KCdlcnJvcicsIG5ldyBBcmNoaXZlckVycm9yKCdBQk9SVEVEJykpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgaWYgKHRoaXMuX3N0YXRlLm1vZHVsZSkge1xuICAgIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgQXJjaGl2ZXJFcnJvcignTU9EVUxFU0VUJykpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdGhpcy5fbW9kdWxlID0gbW9kdWxlO1xuICB0aGlzLl9tb2R1bGVQaXBlKCk7XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEFwcGVuZHMgYSBzeW1saW5rIHRvIHRoZSBpbnN0YW5jZS5cbiAqXG4gKiBUaGlzIGRvZXMgTk9UIGludGVyYWN0IHdpdGggZmlsZXN5c3RlbSBhbmQgaXMgdXNlZCBmb3IgcHJvZ3JhbW1hdGljYWxseSBjcmVhdGluZyBzeW1saW5rcy5cbiAqXG4gKiBAcGFyYW0gIHtTdHJpbmd9IGZpbGVwYXRoIFRoZSBzeW1saW5rIHBhdGggKHdpdGhpbiBhcmNoaXZlKS5cbiAqIEBwYXJhbSAge1N0cmluZ30gdGFyZ2V0IFRoZSB0YXJnZXQgcGF0aCAod2l0aGluIGFyY2hpdmUpLlxuICogQHBhcmFtICB7TnVtYmVyfSBtb2RlIFNldHMgdGhlIGVudHJ5IHBlcm1pc3Npb25zLlxuICogQHJldHVybiB7dGhpc31cbiAqL1xuQXJjaGl2ZXIucHJvdG90eXBlLnN5bWxpbmsgPSBmdW5jdGlvbihmaWxlcGF0aCwgdGFyZ2V0LCBtb2RlKSB7XG4gIGlmICh0aGlzLl9zdGF0ZS5maW5hbGl6ZSB8fCB0aGlzLl9zdGF0ZS5hYm9ydGVkKSB7XG4gICAgdGhpcy5lbWl0KCdlcnJvcicsIG5ldyBBcmNoaXZlckVycm9yKCdRVUVVRUNMT1NFRCcpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGlmICh0eXBlb2YgZmlsZXBhdGggIT09ICdzdHJpbmcnIHx8IGZpbGVwYXRoLmxlbmd0aCA9PT0gMCkge1xuICAgIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgQXJjaGl2ZXJFcnJvcignU1lNTElOS0ZJTEVQQVRIUkVRVUlSRUQnKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBpZiAodHlwZW9mIHRhcmdldCAhPT0gJ3N0cmluZycgfHwgdGFyZ2V0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgQXJjaGl2ZXJFcnJvcignU1lNTElOS1RBUkdFVFJFUVVJUkVEJywgeyBmaWxlcGF0aDogZmlsZXBhdGggfSkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgaWYgKCF0aGlzLl9tb2R1bGVTdXBwb3J0cygnc3ltbGluaycpKSB7XG4gICAgdGhpcy5lbWl0KCdlcnJvcicsIG5ldyBBcmNoaXZlckVycm9yKCdTWU1MSU5LTk9UU1VQUE9SVEVEJywgeyBmaWxlcGF0aDogZmlsZXBhdGggfSkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdmFyIGRhdGEgPSB7fTtcbiAgZGF0YS50eXBlID0gJ3N5bWxpbmsnO1xuICBkYXRhLm5hbWUgPSBmaWxlcGF0aC5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG4gIGRhdGEubGlua25hbWUgPSB0YXJnZXQucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuICBkYXRhLnNvdXJjZVR5cGUgPSAnYnVmZmVyJztcblxuICBpZiAodHlwZW9mIG1vZGUgPT09IFwibnVtYmVyXCIpIHtcbiAgICBkYXRhLm1vZGUgPSBtb2RlO1xuICB9XG5cbiAgdGhpcy5fZW50cmllc0NvdW50Kys7XG4gIHRoaXMuX3F1ZXVlLnB1c2goe1xuICAgIGRhdGE6IGRhdGEsXG4gICAgc291cmNlOiBCdWZmZXIuY29uY2F0KFtdKVxuICB9KTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY3VycmVudCBsZW5ndGggKGluIGJ5dGVzKSB0aGF0IGhhcyBiZWVuIGVtaXR0ZWQuXG4gKlxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG5BcmNoaXZlci5wcm90b3R5cGUucG9pbnRlciA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5fcG9pbnRlcjtcbn07XG5cbi8qKlxuICogTWlkZGxld2FyZS1saWtlIGhlbHBlciB0aGF0IGhhcyB5ZXQgdG8gYmUgZnVsbHkgaW1wbGVtZW50ZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBwbHVnaW5cbiAqIEByZXR1cm4ge3RoaXN9XG4gKi9cbkFyY2hpdmVyLnByb3RvdHlwZS51c2UgPSBmdW5jdGlvbihwbHVnaW4pIHtcbiAgdGhpcy5fc3RyZWFtcy5wdXNoKHBsdWdpbik7XG4gIHJldHVybiB0aGlzO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBBcmNoaXZlcjtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBDb3JlT3B0aW9uc1xuICogQGdsb2JhbFxuICogQHByb3BlcnR5IHtOdW1iZXJ9IFtzdGF0Q29uY3VycmVuY3k9NF0gU2V0cyB0aGUgbnVtYmVyIG9mIHdvcmtlcnMgdXNlZCB0b1xuICogcHJvY2VzcyB0aGUgaW50ZXJuYWwgZnMgc3RhdCBxdWV1ZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFRyYW5zZm9ybU9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gW2FsbG93SGFsZk9wZW49dHJ1ZV0gSWYgc2V0IHRvIGZhbHNlLCB0aGVuIHRoZSBzdHJlYW1cbiAqIHdpbGwgYXV0b21hdGljYWxseSBlbmQgdGhlIHJlYWRhYmxlIHNpZGUgd2hlbiB0aGUgd3JpdGFibGUgc2lkZSBlbmRzIGFuZCB2aWNlXG4gKiB2ZXJzYS5cbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gW3JlYWRhYmxlT2JqZWN0TW9kZT1mYWxzZV0gU2V0cyBvYmplY3RNb2RlIGZvciByZWFkYWJsZVxuICogc2lkZSBvZiB0aGUgc3RyZWFtLiBIYXMgbm8gZWZmZWN0IGlmIG9iamVjdE1vZGUgaXMgdHJ1ZS5cbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gW3dyaXRhYmxlT2JqZWN0TW9kZT1mYWxzZV0gU2V0cyBvYmplY3RNb2RlIGZvciB3cml0YWJsZVxuICogc2lkZSBvZiB0aGUgc3RyZWFtLiBIYXMgbm8gZWZmZWN0IGlmIG9iamVjdE1vZGUgaXMgdHJ1ZS5cbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gW2RlY29kZVN0cmluZ3M9dHJ1ZV0gV2hldGhlciBvciBub3QgdG8gZGVjb2RlIHN0cmluZ3NcbiAqIGludG8gQnVmZmVycyBiZWZvcmUgcGFzc2luZyB0aGVtIHRvIF93cml0ZSgpLiBgV3JpdGFibGVgXG4gKiBAcHJvcGVydHkge1N0cmluZ30gW2VuY29kaW5nPU5VTExdIElmIHNwZWNpZmllZCwgdGhlbiBidWZmZXJzIHdpbGwgYmUgZGVjb2RlZFxuICogdG8gc3RyaW5ncyB1c2luZyB0aGUgc3BlY2lmaWVkIGVuY29kaW5nLiBgUmVhZGFibGVgXG4gKiBAcHJvcGVydHkge051bWJlcn0gW2hpZ2hXYXRlck1hcms9MTZrYl0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIHN0b3JlXG4gKiBpbiB0aGUgaW50ZXJuYWwgYnVmZmVyIGJlZm9yZSBjZWFzaW5nIHRvIHJlYWQgZnJvbSB0aGUgdW5kZXJseWluZyByZXNvdXJjZS5cbiAqIGBSZWFkYWJsZWAgYFdyaXRhYmxlYFxuICogQHByb3BlcnR5IHtCb29sZWFufSBbb2JqZWN0TW9kZT1mYWxzZV0gV2hldGhlciB0aGlzIHN0cmVhbSBzaG91bGQgYmVoYXZlIGFzIGFcbiAqIHN0cmVhbSBvZiBvYmplY3RzLiBNZWFuaW5nIHRoYXQgc3RyZWFtLnJlYWQobikgcmV0dXJucyBhIHNpbmdsZSB2YWx1ZSBpbnN0ZWFkXG4gKiBvZiBhIEJ1ZmZlciBvZiBzaXplIG4uIGBSZWFkYWJsZWAgYFdyaXRhYmxlYFxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gRW50cnlEYXRhXG4gKiBAcHJvcGVydHkge1N0cmluZ30gbmFtZSBTZXRzIHRoZSBlbnRyeSBuYW1lIGluY2x1ZGluZyBpbnRlcm5hbCBwYXRoLlxuICogQHByb3BlcnR5IHsoU3RyaW5nfERhdGUpfSBbZGF0ZT1OT1coKV0gU2V0cyB0aGUgZW50cnkgZGF0ZS5cbiAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBbbW9kZT1EOjA3NTUvRjowNjQ0XSBTZXRzIHRoZSBlbnRyeSBwZXJtaXNzaW9ucy5cbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBbcHJlZml4XSBTZXRzIGEgcGF0aCBwcmVmaXggZm9yIHRoZSBlbnRyeSBuYW1lLiBVc2VmdWxcbiAqIHdoZW4gd29ya2luZyB3aXRoIG1ldGhvZHMgbGlrZSBgZGlyZWN0b3J5YCBvciBgZ2xvYmAuXG4gKiBAcHJvcGVydHkge2ZzLlN0YXRzfSBbc3RhdHNdIFNldHMgdGhlIGZzIHN0YXQgZGF0YSBmb3IgdGhpcyBlbnRyeSBhbGxvd2luZ1xuICogZm9yIHJlZHVjdGlvbiBvZiBmcyBzdGF0IGNhbGxzIHdoZW4gc3RhdCBkYXRhIGlzIGFscmVhZHkga25vd24uXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBFcnJvckRhdGFcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIG9mIHRoZSBlcnJvci5cbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBjb2RlIFRoZSBlcnJvciBjb2RlIGFzc2lnbmVkIHRvIHRoaXMgZXJyb3IuXG4gKiBAcHJvcGVydHkge1N0cmluZ30gZGF0YSBBZGRpdGlvbmFsIGRhdGEgcHJvdmlkZWQgZm9yIHJlcG9ydGluZyBvciBkZWJ1Z2dpbmcgKHdoZXJlIGF2YWlsYWJsZSkuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBQcm9ncmVzc0RhdGFcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBlbnRyaWVzXG4gKiBAcHJvcGVydHkge051bWJlcn0gZW50cmllcy50b3RhbCBOdW1iZXIgb2YgZW50cmllcyB0aGF0IGhhdmUgYmVlbiBhcHBlbmRlZC5cbiAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBlbnRyaWVzLnByb2Nlc3NlZCBOdW1iZXIgb2YgZW50cmllcyB0aGF0IGhhdmUgYmVlbiBwcm9jZXNzZWQuXG4gKiBAcHJvcGVydHkge09iamVjdH0gZnNcbiAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBmcy50b3RhbEJ5dGVzIE51bWJlciBvZiBieXRlcyB0aGF0IGhhdmUgYmVlbiBhcHBlbmRlZC4gQ2FsY3VsYXRlZCBhc3luY2hyb25vdXNseSBhbmQgbWlnaHQgbm90IGJlIGFjY3VyYXRlOiBpdCBncm93dGggd2hpbGUgZW50cmllcyBhcmUgYWRkZWQuIChiYXNlZCBvbiBmcy5TdGF0cylcbiAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBmcy5wcm9jZXNzZWRCeXRlcyBOdW1iZXIgb2YgYnl0ZXMgdGhhdCBoYXZlIGJlZW4gcHJvY2Vzc2VkLiAoYmFzZWQgb24gZnMuU3RhdHMpXG4gKi9cbiIsCiAgICAiLyoqXG4gKiBub2RlLWNvbXByZXNzLWNvbW1vbnNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQgQ2hyaXMgVGFsa2luZ3RvbiwgY29udHJpYnV0b3JzLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cHM6Ly9naXRodWIuY29tL2FyY2hpdmVyanMvbm9kZS1jb21wcmVzcy1jb21tb25zL2Jsb2IvbWFzdGVyL0xJQ0VOU0UtTUlUXG4gKi9cbnZhciBBcmNoaXZlRW50cnkgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge307XG5cbkFyY2hpdmVFbnRyeS5wcm90b3R5cGUuZ2V0TmFtZSA9IGZ1bmN0aW9uKCkge307XG5cbkFyY2hpdmVFbnRyeS5wcm90b3R5cGUuZ2V0U2l6ZSA9IGZ1bmN0aW9uKCkge307XG5cbkFyY2hpdmVFbnRyeS5wcm90b3R5cGUuZ2V0TGFzdE1vZGlmaWVkRGF0ZSA9IGZ1bmN0aW9uKCkge307XG5cbkFyY2hpdmVFbnRyeS5wcm90b3R5cGUuaXNEaXJlY3RvcnkgPSBmdW5jdGlvbigpIHt9OyIsCiAgICAiLyoqXG4gKiBub2RlLWNvbXByZXNzLWNvbW1vbnNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQgQ2hyaXMgVGFsa2luZ3RvbiwgY29udHJpYnV0b3JzLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cHM6Ly9naXRodWIuY29tL2FyY2hpdmVyanMvbm9kZS1jb21wcmVzcy1jb21tb25zL2Jsb2IvbWFzdGVyL0xJQ0VOU0UtTUlUXG4gKi9cbnZhciB1dGlsID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcblxudXRpbC5kYXRlVG9Eb3MgPSBmdW5jdGlvbihkLCBmb3JjZUxvY2FsVGltZSkge1xuICBmb3JjZUxvY2FsVGltZSA9IGZvcmNlTG9jYWxUaW1lIHx8IGZhbHNlO1xuXG4gIHZhciB5ZWFyID0gZm9yY2VMb2NhbFRpbWUgPyBkLmdldEZ1bGxZZWFyKCkgOiBkLmdldFVUQ0Z1bGxZZWFyKCk7XG5cbiAgaWYgKHllYXIgPCAxOTgwKSB7XG4gICAgcmV0dXJuIDIxNjI2ODg7IC8vIDE5ODAtMS0xIDAwOjAwOjAwXG4gIH0gZWxzZSBpZiAoeWVhciA+PSAyMDQ0KSB7XG4gICAgcmV0dXJuIDIxNDExNzU2Nzc7IC8vIDIwNDMtMTItMzEgMjM6NTk6NThcbiAgfVxuXG4gIHZhciB2YWwgPSB7XG4gICAgeWVhcjogeWVhcixcbiAgICBtb250aDogZm9yY2VMb2NhbFRpbWUgPyBkLmdldE1vbnRoKCkgOiBkLmdldFVUQ01vbnRoKCksXG4gICAgZGF0ZTogZm9yY2VMb2NhbFRpbWUgPyBkLmdldERhdGUoKSA6IGQuZ2V0VVRDRGF0ZSgpLFxuICAgIGhvdXJzOiBmb3JjZUxvY2FsVGltZSA/IGQuZ2V0SG91cnMoKSA6IGQuZ2V0VVRDSG91cnMoKSxcbiAgICBtaW51dGVzOiBmb3JjZUxvY2FsVGltZSA/IGQuZ2V0TWludXRlcygpIDogZC5nZXRVVENNaW51dGVzKCksXG4gICAgc2Vjb25kczogZm9yY2VMb2NhbFRpbWUgPyBkLmdldFNlY29uZHMoKSA6IGQuZ2V0VVRDU2Vjb25kcygpXG4gIH07XG5cbiAgcmV0dXJuICgodmFsLnllYXIgLSAxOTgwKSA8PCAyNSkgfCAoKHZhbC5tb250aCArIDEpIDw8IDIxKSB8ICh2YWwuZGF0ZSA8PCAxNikgfFxuICAgICh2YWwuaG91cnMgPDwgMTEpIHwgKHZhbC5taW51dGVzIDw8IDUpIHwgKHZhbC5zZWNvbmRzIC8gMik7XG59O1xuXG51dGlsLmRvc1RvRGF0ZSA9IGZ1bmN0aW9uKGRvcykge1xuICByZXR1cm4gbmV3IERhdGUoKChkb3MgPj4gMjUpICYgMHg3ZikgKyAxOTgwLCAoKGRvcyA+PiAyMSkgJiAweDBmKSAtIDEsIChkb3MgPj4gMTYpICYgMHgxZiwgKGRvcyA+PiAxMSkgJiAweDFmLCAoZG9zID4+IDUpICYgMHgzZiwgKGRvcyAmIDB4MWYpIDw8IDEpO1xufTtcblxudXRpbC5mcm9tRG9zVGltZSA9IGZ1bmN0aW9uKGJ1Zikge1xuICByZXR1cm4gdXRpbC5kb3NUb0RhdGUoYnVmLnJlYWRVSW50MzJMRSgwKSk7XG59O1xuXG51dGlsLmdldEVpZ2h0Qnl0ZXMgPSBmdW5jdGlvbih2KSB7XG4gIHZhciBidWYgPSBCdWZmZXIuYWxsb2MoOCk7XG4gIGJ1Zi53cml0ZVVJbnQzMkxFKHYgJSAweDAxMDAwMDAwMDAsIDApO1xuICBidWYud3JpdGVVSW50MzJMRSgodiAvIDB4MDEwMDAwMDAwMCkgfCAwLCA0KTtcblxuICByZXR1cm4gYnVmO1xufTtcblxudXRpbC5nZXRTaG9ydEJ5dGVzID0gZnVuY3Rpb24odikge1xuICB2YXIgYnVmID0gQnVmZmVyLmFsbG9jKDIpO1xuICBidWYud3JpdGVVSW50MTZMRSgodiAmIDB4RkZGRikgPj4+IDAsIDApO1xuXG4gIHJldHVybiBidWY7XG59O1xuXG51dGlsLmdldFNob3J0Qnl0ZXNWYWx1ZSA9IGZ1bmN0aW9uKGJ1Ziwgb2Zmc2V0KSB7XG4gIHJldHVybiBidWYucmVhZFVJbnQxNkxFKG9mZnNldCk7XG59O1xuXG51dGlsLmdldExvbmdCeXRlcyA9IGZ1bmN0aW9uKHYpIHtcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvYyg0KTtcbiAgYnVmLndyaXRlVUludDMyTEUoKHYgJiAweEZGRkZGRkZGKSA+Pj4gMCwgMCk7XG5cbiAgcmV0dXJuIGJ1Zjtcbn07XG5cbnV0aWwuZ2V0TG9uZ0J5dGVzVmFsdWUgPSBmdW5jdGlvbihidWYsIG9mZnNldCkge1xuICByZXR1cm4gYnVmLnJlYWRVSW50MzJMRShvZmZzZXQpO1xufTtcblxudXRpbC50b0Rvc1RpbWUgPSBmdW5jdGlvbihkKSB7XG4gIHJldHVybiB1dGlsLmdldExvbmdCeXRlcyh1dGlsLmRhdGVUb0RvcyhkKSk7XG59OyIsCiAgICAiLyoqXG4gKiBub2RlLWNvbXByZXNzLWNvbW1vbnNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQgQ2hyaXMgVGFsa2luZ3RvbiwgY29udHJpYnV0b3JzLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cHM6Ly9naXRodWIuY29tL2FyY2hpdmVyanMvbm9kZS1jb21wcmVzcy1jb21tb25zL2Jsb2IvbWFzdGVyL0xJQ0VOU0UtTUlUXG4gKi9cbnZhciB6aXBVdGlsID0gcmVxdWlyZSgnLi91dGlsJyk7XG5cbnZhciBEQVRBX0RFU0NSSVBUT1JfRkxBRyA9IDEgPDwgMztcbnZhciBFTkNSWVBUSU9OX0ZMQUcgPSAxIDw8IDA7XG52YXIgTlVNQkVSX09GX1NIQU5OT05fRkFOT19UUkVFU19GTEFHID0gMSA8PCAyO1xudmFyIFNMSURJTkdfRElDVElPTkFSWV9TSVpFX0ZMQUcgPSAxIDw8IDE7XG52YXIgU1RST05HX0VOQ1JZUFRJT05fRkxBRyA9IDEgPDwgNjtcbnZhciBVRlQ4X05BTUVTX0ZMQUcgPSAxIDw8IDExO1xuXG52YXIgR2VuZXJhbFB1cnBvc2VCaXQgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgR2VuZXJhbFB1cnBvc2VCaXQpKSB7XG4gICAgcmV0dXJuIG5ldyBHZW5lcmFsUHVycG9zZUJpdCgpO1xuICB9XG5cbiAgdGhpcy5kZXNjcmlwdG9yID0gZmFsc2U7XG4gIHRoaXMuZW5jcnlwdGlvbiA9IGZhbHNlO1xuICB0aGlzLnV0ZjggPSBmYWxzZTtcbiAgdGhpcy5udW1iZXJPZlNoYW5ub25GYW5vVHJlZXMgPSAwO1xuICB0aGlzLnN0cm9uZ0VuY3J5cHRpb24gPSBmYWxzZTtcbiAgdGhpcy5zbGlkaW5nRGljdGlvbmFyeVNpemUgPSAwO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuR2VuZXJhbFB1cnBvc2VCaXQucHJvdG90eXBlLmVuY29kZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gemlwVXRpbC5nZXRTaG9ydEJ5dGVzKFxuICAgICh0aGlzLmRlc2NyaXB0b3IgPyBEQVRBX0RFU0NSSVBUT1JfRkxBRyA6IDApIHxcbiAgICAodGhpcy51dGY4ID8gVUZUOF9OQU1FU19GTEFHIDogMCkgfFxuICAgICh0aGlzLmVuY3J5cHRpb24gPyBFTkNSWVBUSU9OX0ZMQUcgOiAwKSB8XG4gICAgKHRoaXMuc3Ryb25nRW5jcnlwdGlvbiA/IFNUUk9OR19FTkNSWVBUSU9OX0ZMQUcgOiAwKVxuICApO1xufTtcblxuR2VuZXJhbFB1cnBvc2VCaXQucHJvdG90eXBlLnBhcnNlID0gZnVuY3Rpb24oYnVmLCBvZmZzZXQpIHtcbiAgdmFyIGZsYWcgPSB6aXBVdGlsLmdldFNob3J0Qnl0ZXNWYWx1ZShidWYsIG9mZnNldCk7XG4gIHZhciBnYnAgPSBuZXcgR2VuZXJhbFB1cnBvc2VCaXQoKTtcblxuICBnYnAudXNlRGF0YURlc2NyaXB0b3IoKGZsYWcgJiBEQVRBX0RFU0NSSVBUT1JfRkxBRykgIT09IDApO1xuICBnYnAudXNlVVRGOEZvck5hbWVzKChmbGFnICYgVUZUOF9OQU1FU19GTEFHKSAhPT0gMCk7XG4gIGdicC51c2VTdHJvbmdFbmNyeXB0aW9uKChmbGFnICYgU1RST05HX0VOQ1JZUFRJT05fRkxBRykgIT09IDApO1xuICBnYnAudXNlRW5jcnlwdGlvbigoZmxhZyAmIEVOQ1JZUFRJT05fRkxBRykgIT09IDApO1xuICBnYnAuc2V0U2xpZGluZ0RpY3Rpb25hcnlTaXplKChmbGFnICYgU0xJRElOR19ESUNUSU9OQVJZX1NJWkVfRkxBRykgIT09IDAgPyA4MTkyIDogNDA5Nik7XG4gIGdicC5zZXROdW1iZXJPZlNoYW5ub25GYW5vVHJlZXMoKGZsYWcgJiBOVU1CRVJfT0ZfU0hBTk5PTl9GQU5PX1RSRUVTX0ZMQUcpICE9PSAwID8gMyA6IDIpO1xuXG4gIHJldHVybiBnYnA7XG59O1xuXG5HZW5lcmFsUHVycG9zZUJpdC5wcm90b3R5cGUuc2V0TnVtYmVyT2ZTaGFubm9uRmFub1RyZWVzID0gZnVuY3Rpb24obikge1xuICB0aGlzLm51bWJlck9mU2hhbm5vbkZhbm9UcmVlcyA9IG47XG59O1xuXG5HZW5lcmFsUHVycG9zZUJpdC5wcm90b3R5cGUuZ2V0TnVtYmVyT2ZTaGFubm9uRmFub1RyZWVzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLm51bWJlck9mU2hhbm5vbkZhbm9UcmVlcztcbn07XG5cbkdlbmVyYWxQdXJwb3NlQml0LnByb3RvdHlwZS5zZXRTbGlkaW5nRGljdGlvbmFyeVNpemUgPSBmdW5jdGlvbihuKSB7XG4gIHRoaXMuc2xpZGluZ0RpY3Rpb25hcnlTaXplID0gbjtcbn07XG5cbkdlbmVyYWxQdXJwb3NlQml0LnByb3RvdHlwZS5nZXRTbGlkaW5nRGljdGlvbmFyeVNpemUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2xpZGluZ0RpY3Rpb25hcnlTaXplO1xufTtcblxuR2VuZXJhbFB1cnBvc2VCaXQucHJvdG90eXBlLnVzZURhdGFEZXNjcmlwdG9yID0gZnVuY3Rpb24oYikge1xuICB0aGlzLmRlc2NyaXB0b3IgPSBiO1xufTtcblxuR2VuZXJhbFB1cnBvc2VCaXQucHJvdG90eXBlLnVzZXNEYXRhRGVzY3JpcHRvciA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5kZXNjcmlwdG9yO1xufTtcblxuR2VuZXJhbFB1cnBvc2VCaXQucHJvdG90eXBlLnVzZUVuY3J5cHRpb24gPSBmdW5jdGlvbihiKSB7XG4gIHRoaXMuZW5jcnlwdGlvbiA9IGI7XG59O1xuXG5HZW5lcmFsUHVycG9zZUJpdC5wcm90b3R5cGUudXNlc0VuY3J5cHRpb24gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZW5jcnlwdGlvbjtcbn07XG5cbkdlbmVyYWxQdXJwb3NlQml0LnByb3RvdHlwZS51c2VTdHJvbmdFbmNyeXB0aW9uID0gZnVuY3Rpb24oYikge1xuICB0aGlzLnN0cm9uZ0VuY3J5cHRpb24gPSBiO1xufTtcblxuR2VuZXJhbFB1cnBvc2VCaXQucHJvdG90eXBlLnVzZXNTdHJvbmdFbmNyeXB0aW9uID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnN0cm9uZ0VuY3J5cHRpb247XG59O1xuXG5HZW5lcmFsUHVycG9zZUJpdC5wcm90b3R5cGUudXNlVVRGOEZvck5hbWVzID0gZnVuY3Rpb24oYikge1xuICB0aGlzLnV0ZjggPSBiO1xufTtcblxuR2VuZXJhbFB1cnBvc2VCaXQucHJvdG90eXBlLnVzZXNVVEY4Rm9yTmFtZXMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMudXRmODtcbn07IiwKICAgICIvKipcbiAqIG5vZGUtY29tcHJlc3MtY29tbW9uc1xuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNCBDaHJpcyBUYWxraW5ndG9uLCBjb250cmlidXRvcnMuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBodHRwczovL2dpdGh1Yi5jb20vYXJjaGl2ZXJqcy9ub2RlLWNvbXByZXNzLWNvbW1vbnMvYmxvYi9tYXN0ZXIvTElDRU5TRS1NSVRcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgLyoqXG4gICAgICogQml0cyB1c2VkIGZvciBwZXJtaXNzaW9ucyAoYW5kIHN0aWNreSBiaXQpXG4gICAgICovXG4gICAgUEVSTV9NQVNLOiA0MDk1LCAvLyAwNzc3N1xuXG4gICAgLyoqXG4gICAgICogQml0cyB1c2VkIHRvIGluZGljYXRlIHRoZSBmaWxlc3lzdGVtIG9iamVjdCB0eXBlLlxuICAgICAqL1xuICAgIEZJTEVfVFlQRV9GTEFHOiA2MTQ0MCwgLy8gMDE3MDAwMFxuXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHN5bWJvbGljIGxpbmtzLlxuICAgICAqL1xuICAgIExJTktfRkxBRzogNDA5NjAsIC8vIDAxMjAwMDBcblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyBwbGFpbiBmaWxlcy5cbiAgICAgKi9cbiAgICBGSUxFX0ZMQUc6IDMyNzY4LCAvLyAwMTAwMDAwXG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgZGlyZWN0b3JpZXMuXG4gICAgICovXG4gICAgRElSX0ZMQUc6IDE2Mzg0LCAvLyAwNDAwMDBcblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBzb21ld2hhdCBhcmJpdHJhcnkgY2hvaWNlcyB0aGF0IGFyZSBxdWl0ZSBjb21tb24gZm9yIHNoYXJlZFxuICAgIC8vIGluc3RhbGxhdGlvbnNcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgLyoqXG4gICAgICogRGVmYXVsdCBwZXJtaXNzaW9ucyBmb3Igc3ltYm9saWMgbGlua3MuXG4gICAgICovXG4gICAgREVGQVVMVF9MSU5LX1BFUk06IDUxMSwgLy8gMDc3N1xuXG4gICAgLyoqXG4gICAgICogRGVmYXVsdCBwZXJtaXNzaW9ucyBmb3IgZGlyZWN0b3JpZXMuXG4gICAgICovXG4gICAgREVGQVVMVF9ESVJfUEVSTTogNDkzLCAvLyAwNzU1XG5cbiAgICAvKipcbiAgICAgKiBEZWZhdWx0IHBlcm1pc3Npb25zIGZvciBwbGFpbiBmaWxlcy5cbiAgICAgKi9cbiAgICBERUZBVUxUX0ZJTEVfUEVSTTogNDIwIC8vIDA2NDRcbn07IiwKICAgICIvKipcbiAqIG5vZGUtY29tcHJlc3MtY29tbW9uc1xuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNCBDaHJpcyBUYWxraW5ndG9uLCBjb250cmlidXRvcnMuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBodHRwczovL2dpdGh1Yi5jb20vYXJjaGl2ZXJqcy9ub2RlLWNvbXByZXNzLWNvbW1vbnMvYmxvYi9tYXN0ZXIvTElDRU5TRS1NSVRcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFdPUkQ6IDQsXG4gIERXT1JEOiA4LFxuICBFTVBUWTogQnVmZmVyLmFsbG9jKDApLFxuXG4gIFNIT1JUOiAyLFxuICBTSE9SVF9NQVNLOiAweGZmZmYsXG4gIFNIT1JUX1NISUZUOiAxNixcbiAgU0hPUlRfWkVSTzogQnVmZmVyLmZyb20oQXJyYXkoMikpLFxuICBMT05HOiA0LFxuICBMT05HX1pFUk86IEJ1ZmZlci5mcm9tKEFycmF5KDQpKSxcblxuICBNSU5fVkVSU0lPTl9JTklUSUFMOiAxMCxcbiAgTUlOX1ZFUlNJT05fREFUQV9ERVNDUklQVE9SOiAyMCxcbiAgTUlOX1ZFUlNJT05fWklQNjQ6IDQ1LFxuICBWRVJTSU9OX01BREVCWTogNDUsXG5cbiAgTUVUSE9EX1NUT1JFRDogMCxcbiAgTUVUSE9EX0RFRkxBVEVEOiA4LFxuXG4gIFBMQVRGT1JNX1VOSVg6IDMsXG4gIFBMQVRGT1JNX0ZBVDogMCxcblxuICBTSUdfTEZIOiAweDA0MDM0YjUwLFxuICBTSUdfREQ6IDB4MDgwNzRiNTAsXG4gIFNJR19DRkg6IDB4MDIwMTRiNTAsXG4gIFNJR19FT0NEOiAweDA2MDU0YjUwLFxuICBTSUdfWklQNjRfRU9DRDogMHgwNjA2NEI1MCxcbiAgU0lHX1pJUDY0X0VPQ0RfTE9DOiAweDA3MDY0QjUwLFxuXG4gIFpJUDY0X01BR0lDX1NIT1JUOiAweGZmZmYsXG4gIFpJUDY0X01BR0lDOiAweGZmZmZmZmZmLFxuICBaSVA2NF9FWFRSQV9JRDogMHgwMDAxLFxuXG4gIFpMSUJfTk9fQ09NUFJFU1NJT046IDAsXG4gIFpMSUJfQkVTVF9TUEVFRDogMSxcbiAgWkxJQl9CRVNUX0NPTVBSRVNTSU9OOiA5LFxuICBaTElCX0RFRkFVTFRfQ09NUFJFU1NJT046IC0xLFxuXG4gIE1PREVfTUFTSzogMHhGRkYsXG4gIERFRkFVTFRfRklMRV9NT0RFOiAzMzE4OCwgLy8gMDEwNjQ0ID0gLXJ3LXItLXItLSA9IFNfSUZSRUcgfCBTX0lSVVNSIHwgU19JV1VTUiB8IFNfSVJHUlAgfCBTX0lST1RIXG4gIERFRkFVTFRfRElSX01PREU6IDE2ODc3LCAgLy8gMDQwNzU1ID0gZHJ3eHIteHIteCA9IFNfSUZESVIgfCBTX0lSV1hVIHwgU19JUkdSUCB8IFNfSVhHUlAgfCBTX0lST1RIIHwgU19JWE9USFxuXG4gIEVYVF9GSUxFX0FUVFJfRElSOiAxMTA2MDUxMDg4LCAgLy8gMDEwMTczMjAwMDIwID0gZHJ3eHIteHIteCA9ICgoKFNfSUZESVIgfCAwNzU1KSA8PCAxNikgfCBTX0RPU19EKVxuICBFWFRfRklMRV9BVFRSX0ZJTEU6IDIxNzUwMDg4MDAsIC8vIDAyMDE1MTAwMDA0MCA9IC1ydy1yLS1yLS0gPSAoKChTX0lGUkVHIHwgMDY0NCkgPDwgMTYpIHwgU19ET1NfQSkgPj4+IDBcblxuICAvLyBVbml4IGZpbGUgdHlwZXNcbiAgU19JRk1UOiA2MTQ0MCwgICAvLyAwMTcwMDAwIHR5cGUgb2YgZmlsZSBtYXNrXG4gIFNfSUZJRk86IDQwOTYsICAgLy8gMDEwMDAwIG5hbWVkIHBpcGUgKGZpZm8pXG4gIFNfSUZDSFI6IDgxOTIsICAgLy8gMDIwMDAwIGNoYXJhY3RlciBzcGVjaWFsXG4gIFNfSUZESVI6IDE2Mzg0LCAgLy8gMDQwMDAwIGRpcmVjdG9yeVxuICBTX0lGQkxLOiAyNDU3NiwgIC8vIDA2MDAwMCBibG9jayBzcGVjaWFsXG4gIFNfSUZSRUc6IDMyNzY4LCAgLy8gMDEwMDAwMCByZWd1bGFyXG4gIFNfSUZMTks6IDQwOTYwLCAgLy8gMDEyMDAwMCBzeW1ib2xpYyBsaW5rXG4gIFNfSUZTT0NLOiA0OTE1MiwgLy8gMDE0MDAwMCBzb2NrZXRcblxuICAvLyBET1MgZmlsZSB0eXBlIGZsYWdzXG4gIFNfRE9TX0E6IDMyLCAvLyAwNDAgQXJjaGl2ZVxuICBTX0RPU19EOiAxNiwgLy8gMDIwIERpcmVjdG9yeVxuICBTX0RPU19WOiA4LCAgLy8gMDEwIFZvbHVtZVxuICBTX0RPU19TOiA0LCAgLy8gMDQgU3lzdGVtXG4gIFNfRE9TX0g6IDIsICAvLyAwMiBIaWRkZW5cbiAgU19ET1NfUjogMSAgIC8vIDAxIFJlYWQgT25seVxufTtcbiIsCiAgICAiLyoqXG4gKiBub2RlLWNvbXByZXNzLWNvbW1vbnNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQgQ2hyaXMgVGFsa2luZ3RvbiwgY29udHJpYnV0b3JzLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cHM6Ly9naXRodWIuY29tL2FyY2hpdmVyanMvbm9kZS1jb21wcmVzcy1jb21tb25zL2Jsb2IvbWFzdGVyL0xJQ0VOU0UtTUlUXG4gKi9cbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ3V0aWwnKS5pbmhlcml0cztcbnZhciBub3JtYWxpemVQYXRoID0gcmVxdWlyZSgnbm9ybWFsaXplLXBhdGgnKTtcblxudmFyIEFyY2hpdmVFbnRyeSA9IHJlcXVpcmUoJy4uL2FyY2hpdmUtZW50cnknKTtcbnZhciBHZW5lcmFsUHVycG9zZUJpdCA9IHJlcXVpcmUoJy4vZ2VuZXJhbC1wdXJwb3NlLWJpdCcpO1xudmFyIFVuaXhTdGF0ID0gcmVxdWlyZSgnLi91bml4LXN0YXQnKTtcblxudmFyIGNvbnN0YW50cyA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJyk7XG52YXIgemlwVXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xuXG52YXIgWmlwQXJjaGl2ZUVudHJ5ID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihuYW1lKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBaaXBBcmNoaXZlRW50cnkpKSB7XG4gICAgcmV0dXJuIG5ldyBaaXBBcmNoaXZlRW50cnkobmFtZSk7XG4gIH1cblxuICBBcmNoaXZlRW50cnkuY2FsbCh0aGlzKTtcblxuICB0aGlzLnBsYXRmb3JtID0gY29uc3RhbnRzLlBMQVRGT1JNX0ZBVDtcbiAgdGhpcy5tZXRob2QgPSAtMTtcblxuICB0aGlzLm5hbWUgPSBudWxsO1xuICB0aGlzLnNpemUgPSAwO1xuICB0aGlzLmNzaXplID0gMDtcbiAgdGhpcy5ncGIgPSBuZXcgR2VuZXJhbFB1cnBvc2VCaXQoKTtcbiAgdGhpcy5jcmMgPSAwO1xuICB0aGlzLnRpbWUgPSAtMTtcblxuICB0aGlzLm1pbnZlciA9IGNvbnN0YW50cy5NSU5fVkVSU0lPTl9JTklUSUFMO1xuICB0aGlzLm1vZGUgPSAtMTtcbiAgdGhpcy5leHRyYSA9IG51bGw7XG4gIHRoaXMuZXhhdHRyID0gMDtcbiAgdGhpcy5pbmF0dHIgPSAwO1xuICB0aGlzLmNvbW1lbnQgPSBudWxsO1xuXG4gIGlmIChuYW1lKSB7XG4gICAgdGhpcy5zZXROYW1lKG5hbWUpO1xuICB9XG59O1xuXG5pbmhlcml0cyhaaXBBcmNoaXZlRW50cnksIEFyY2hpdmVFbnRyeSk7XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZXh0cmEgZmllbGRzIHJlbGF0ZWQgdG8gdGhlIGVudHJ5LlxuICpcbiAqIEByZXR1cm5zIHtCdWZmZXJ9XG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuZ2V0Q2VudHJhbERpcmVjdG9yeUV4dHJhID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmdldEV4dHJhKCk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGNvbW1lbnQgc2V0IGZvciB0aGUgZW50cnkuXG4gKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5nZXRDb21tZW50ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmNvbW1lbnQgIT09IG51bGwgPyB0aGlzLmNvbW1lbnQgOiAnJztcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY29tcHJlc3NlZCBzaXplIG9mIHRoZSBlbnRyeS5cbiAqXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLmdldENvbXByZXNzZWRTaXplID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmNzaXplO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBDUkMzMiBkaWdlc3QgZm9yIHRoZSBlbnRyeS5cbiAqXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLmdldENyYyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5jcmM7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGV4dGVybmFsIGZpbGUgYXR0cmlidXRlcyBmb3IgdGhlIGVudHJ5LlxuICpcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuZ2V0RXh0ZXJuYWxBdHRyaWJ1dGVzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmV4YXR0cjtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZXh0cmEgZmllbGRzIHJlbGF0ZWQgdG8gdGhlIGVudHJ5LlxuICpcbiAqIEByZXR1cm5zIHtCdWZmZXJ9XG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuZ2V0RXh0cmEgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZXh0cmEgIT09IG51bGwgPyB0aGlzLmV4dHJhIDogY29uc3RhbnRzLkVNUFRZO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBnZW5lcmFsIHB1cnBvc2UgYml0cyByZWxhdGVkIHRvIHRoZSBlbnRyeS5cbiAqXG4gKiBAcmV0dXJucyB7R2VuZXJhbFB1cnBvc2VCaXR9XG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuZ2V0R2VuZXJhbFB1cnBvc2VCaXQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZ3BiO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBpbnRlcm5hbCBmaWxlIGF0dHJpYnV0ZXMgZm9yIHRoZSBlbnRyeS5cbiAqXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLmdldEludGVybmFsQXR0cmlidXRlcyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5pbmF0dHI7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGxhc3QgbW9kaWZpZWQgZGF0ZSBvZiB0aGUgZW50cnkuXG4gKlxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5nZXRMYXN0TW9kaWZpZWREYXRlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmdldFRpbWUoKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZXh0cmEgZmllbGRzIHJlbGF0ZWQgdG8gdGhlIGVudHJ5LlxuICpcbiAqIEByZXR1cm5zIHtCdWZmZXJ9XG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuZ2V0TG9jYWxGaWxlRGF0YUV4dHJhID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmdldEV4dHJhKCk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGNvbXByZXNzaW9uIG1ldGhvZCB1c2VkIG9uIHRoZSBlbnRyeS5cbiAqXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLmdldE1ldGhvZCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5tZXRob2Q7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGZpbGVuYW1lIG9mIHRoZSBlbnRyeS5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLmdldE5hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMubmFtZTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgcGxhdGZvcm0gb24gd2hpY2ggdGhlIGVudHJ5IHdhcyBtYWRlLlxuICpcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuZ2V0UGxhdGZvcm0gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMucGxhdGZvcm07XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIGVudHJ5LlxuICpcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuZ2V0U2l6ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zaXplO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgZGF0ZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBsYXN0IG1vZGlmaWVkIGRhdGUgb2YgdGhlIGVudHJ5LlxuICpcbiAqIEByZXR1cm5zIHtudW1iZXJ8RGF0ZX1cbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5nZXRUaW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnRpbWUgIT09IC0xID8gemlwVXRpbC5kb3NUb0RhdGUodGhpcy50aW1lKSA6IC0xO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBET1MgdGltZXN0YW1wIGZvciB0aGUgZW50cnkuXG4gKlxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5nZXRUaW1lRG9zID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnRpbWUgIT09IC0xID8gdGhpcy50aW1lIDogMDtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgVU5JWCBmaWxlIHBlcm1pc3Npb25zIGZvciB0aGUgZW50cnkuXG4gKlxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5nZXRVbml4TW9kZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5wbGF0Zm9ybSAhPT0gY29uc3RhbnRzLlBMQVRGT1JNX1VOSVggPyAwIDogKCh0aGlzLmdldEV4dGVybmFsQXR0cmlidXRlcygpID4+IGNvbnN0YW50cy5TSE9SVF9TSElGVCkgJiBjb25zdGFudHMuU0hPUlRfTUFTSyk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHZlcnNpb24gb2YgWklQIG5lZWRlZCB0byBleHRyYWN0IHRoZSBlbnRyeS5cbiAqXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLmdldFZlcnNpb25OZWVkZWRUb0V4dHJhY3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMubWludmVyO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBjb21tZW50IG9mIHRoZSBlbnRyeS5cbiAqXG4gKiBAcGFyYW0gY29tbWVudFxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLnNldENvbW1lbnQgPSBmdW5jdGlvbihjb21tZW50KSB7XG4gIGlmIChCdWZmZXIuYnl0ZUxlbmd0aChjb21tZW50KSAhPT0gY29tbWVudC5sZW5ndGgpIHtcbiAgICB0aGlzLmdldEdlbmVyYWxQdXJwb3NlQml0KCkudXNlVVRGOEZvck5hbWVzKHRydWUpO1xuICB9XG5cbiAgdGhpcy5jb21tZW50ID0gY29tbWVudDtcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgY29tcHJlc3NlZCBzaXplIG9mIHRoZSBlbnRyeS5cbiAqXG4gKiBAcGFyYW0gc2l6ZVxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLnNldENvbXByZXNzZWRTaXplID0gZnVuY3Rpb24oc2l6ZSkge1xuICBpZiAoc2l6ZSA8IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgZW50cnkgY29tcHJlc3NlZCBzaXplJyk7XG4gIH1cblxuICB0aGlzLmNzaXplID0gc2l6ZTtcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgY2hlY2tzdW0gb2YgdGhlIGVudHJ5LlxuICpcbiAqIEBwYXJhbSBjcmNcbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5zZXRDcmMgPSBmdW5jdGlvbihjcmMpIHtcbiAgaWYgKGNyYyA8IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgZW50cnkgY3JjMzInKTtcbiAgfVxuXG4gIHRoaXMuY3JjID0gY3JjO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBleHRlcm5hbCBmaWxlIGF0dHJpYnV0ZXMgb2YgdGhlIGVudHJ5LlxuICpcbiAqIEBwYXJhbSBhdHRyXG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuc2V0RXh0ZXJuYWxBdHRyaWJ1dGVzID0gZnVuY3Rpb24oYXR0cikge1xuICB0aGlzLmV4YXR0ciA9IGF0dHIgPj4+IDA7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGV4dHJhIGZpZWxkcyByZWxhdGVkIHRvIHRoZSBlbnRyeS5cbiAqXG4gKiBAcGFyYW0gZXh0cmFcbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5zZXRFeHRyYSA9IGZ1bmN0aW9uKGV4dHJhKSB7XG4gIHRoaXMuZXh0cmEgPSBleHRyYTtcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgZ2VuZXJhbCBwdXJwb3NlIGJpdHMgcmVsYXRlZCB0byB0aGUgZW50cnkuXG4gKlxuICogQHBhcmFtIGdwYlxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLnNldEdlbmVyYWxQdXJwb3NlQml0ID0gZnVuY3Rpb24oZ3BiKSB7XG4gIGlmICghKGdwYiBpbnN0YW5jZW9mIEdlbmVyYWxQdXJwb3NlQml0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBlbnRyeSBHZW5lcmFsUHVycG9zZUJpdCcpO1xuICB9XG5cbiAgdGhpcy5ncGIgPSBncGI7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGludGVybmFsIGZpbGUgYXR0cmlidXRlcyBvZiB0aGUgZW50cnkuXG4gKlxuICogQHBhcmFtIGF0dHJcbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5zZXRJbnRlcm5hbEF0dHJpYnV0ZXMgPSBmdW5jdGlvbihhdHRyKSB7XG4gIHRoaXMuaW5hdHRyID0gYXR0cjtcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgY29tcHJlc3Npb24gbWV0aG9kIG9mIHRoZSBlbnRyeS5cbiAqXG4gKiBAcGFyYW0gbWV0aG9kXG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuc2V0TWV0aG9kID0gZnVuY3Rpb24obWV0aG9kKSB7XG4gIGlmIChtZXRob2QgPCAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGVudHJ5IGNvbXByZXNzaW9uIG1ldGhvZCcpO1xuICB9XG5cbiAgdGhpcy5tZXRob2QgPSBtZXRob2Q7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIG5hbWUgb2YgdGhlIGVudHJ5LlxuICpcbiAqIEBwYXJhbSBuYW1lXG4gKiBAcGFyYW0gcHJlcGVuZFNsYXNoXG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuc2V0TmFtZSA9IGZ1bmN0aW9uKG5hbWUsIHByZXBlbmRTbGFzaCA9IGZhbHNlKSB7XG4gIG5hbWUgPSBub3JtYWxpemVQYXRoKG5hbWUsIGZhbHNlKVxuICAgIC5yZXBsYWNlKC9eXFx3KzovLCAnJylcbiAgICAucmVwbGFjZSgvXihcXC5cXC5cXC98XFwvKSsvLCAnJyk7XG5cbiAgaWYgKHByZXBlbmRTbGFzaCkge1xuICAgIG5hbWUgPSBgLyR7bmFtZX1gO1xuICB9XG5cbiAgaWYgKEJ1ZmZlci5ieXRlTGVuZ3RoKG5hbWUpICE9PSBuYW1lLmxlbmd0aCkge1xuICAgIHRoaXMuZ2V0R2VuZXJhbFB1cnBvc2VCaXQoKS51c2VVVEY4Rm9yTmFtZXModHJ1ZSk7XG4gIH1cblxuICB0aGlzLm5hbWUgPSBuYW1lO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBwbGF0Zm9ybSBvbiB3aGljaCB0aGUgZW50cnkgd2FzIG1hZGUuXG4gKlxuICogQHBhcmFtIHBsYXRmb3JtXG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuc2V0UGxhdGZvcm0gPSBmdW5jdGlvbihwbGF0Zm9ybSkge1xuICB0aGlzLnBsYXRmb3JtID0gcGxhdGZvcm07XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIHNpemUgb2YgdGhlIGVudHJ5LlxuICpcbiAqIEBwYXJhbSBzaXplXG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuc2V0U2l6ZSA9IGZ1bmN0aW9uKHNpemUpIHtcbiAgaWYgKHNpemUgPCAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGVudHJ5IHNpemUnKTtcbiAgfVxuXG4gIHRoaXMuc2l6ZSA9IHNpemU7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIHRpbWUgb2YgdGhlIGVudHJ5LlxuICpcbiAqIEBwYXJhbSB0aW1lXG4gKiBAcGFyYW0gZm9yY2VMb2NhbFRpbWVcbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5zZXRUaW1lID0gZnVuY3Rpb24odGltZSwgZm9yY2VMb2NhbFRpbWUpIHtcbiAgaWYgKCEodGltZSBpbnN0YW5jZW9mIERhdGUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGVudHJ5IHRpbWUnKTtcbiAgfVxuXG4gIHRoaXMudGltZSA9IHppcFV0aWwuZGF0ZVRvRG9zKHRpbWUsIGZvcmNlTG9jYWxUaW1lKTtcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgVU5JWCBmaWxlIHBlcm1pc3Npb25zIGZvciB0aGUgZW50cnkuXG4gKlxuICogQHBhcmFtIG1vZGVcbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5zZXRVbml4TW9kZSA9IGZ1bmN0aW9uKG1vZGUpIHtcbiAgbW9kZSB8PSB0aGlzLmlzRGlyZWN0b3J5KCkgPyBjb25zdGFudHMuU19JRkRJUiA6IGNvbnN0YW50cy5TX0lGUkVHO1xuXG4gIHZhciBleHRhdHRyID0gMDtcbiAgZXh0YXR0ciB8PSAobW9kZSA8PCBjb25zdGFudHMuU0hPUlRfU0hJRlQpIHwgKHRoaXMuaXNEaXJlY3RvcnkoKSA/IGNvbnN0YW50cy5TX0RPU19EIDogY29uc3RhbnRzLlNfRE9TX0EpO1xuXG4gIHRoaXMuc2V0RXh0ZXJuYWxBdHRyaWJ1dGVzKGV4dGF0dHIpO1xuICB0aGlzLm1vZGUgPSBtb2RlICYgY29uc3RhbnRzLk1PREVfTUFTSztcbiAgdGhpcy5wbGF0Zm9ybSA9IGNvbnN0YW50cy5QTEFURk9STV9VTklYO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSB2ZXJzaW9uIG9mIFpJUCBuZWVkZWQgdG8gZXh0cmFjdCB0aGlzIGVudHJ5LlxuICpcbiAqIEBwYXJhbSBtaW52ZXJcbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5zZXRWZXJzaW9uTmVlZGVkVG9FeHRyYWN0ID0gZnVuY3Rpb24obWludmVyKSB7XG4gIHRoaXMubWludmVyID0gbWludmVyO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBlbnRyeSByZXByZXNlbnRzIGEgZGlyZWN0b3J5LlxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLmlzRGlyZWN0b3J5ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmdldE5hbWUoKS5zbGljZSgtMSkgPT09ICcvJztcbn07XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoaXMgZW50cnkgcmVwcmVzZW50cyBhIHVuaXggc3ltbGluayxcbiAqIGluIHdoaWNoIGNhc2UgdGhlIGVudHJ5J3MgY29udGVudCBjb250YWlucyB0aGUgdGFyZ2V0IHBhdGhcbiAqIGZvciB0aGUgc3ltbGluay5cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5pc1VuaXhTeW1saW5rID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAodGhpcy5nZXRVbml4TW9kZSgpICYgVW5peFN0YXQuRklMRV9UWVBFX0ZMQUcpID09PSBVbml4U3RhdC5MSU5LX0ZMQUc7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGVudHJ5IGlzIHVzaW5nIHRoZSBaSVA2NCBleHRlbnNpb24gb2YgWklQLlxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLmlzWmlwNjQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuY3NpemUgPiBjb25zdGFudHMuWklQNjRfTUFHSUMgfHwgdGhpcy5zaXplID4gY29uc3RhbnRzLlpJUDY0X01BR0lDO1xufTtcbiIsCiAgICAiLyoqXG4gKiBub2RlLWNvbXByZXNzLWNvbW1vbnNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQgQ2hyaXMgVGFsa2luZ3RvbiwgY29udHJpYnV0b3JzLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cHM6Ly9naXRodWIuY29tL2FyY2hpdmVyanMvbm9kZS1jb21wcmVzcy1jb21tb25zL2Jsb2IvbWFzdGVyL0xJQ0VOU0UtTUlUXG4gKi9cbnZhciBTdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0nKS5TdHJlYW07XG52YXIgUGFzc1Rocm91Z2ggPSByZXF1aXJlKCdyZWFkYWJsZS1zdHJlYW0nKS5QYXNzVGhyb3VnaDtcbnZhciBpc1N0cmVhbSA9IHJlcXVpcmUoJ2lzLXN0cmVhbScpO1xuXG52YXIgdXRpbCA9IG1vZHVsZS5leHBvcnRzID0ge307XG5cbnV0aWwubm9ybWFsaXplSW5wdXRTb3VyY2UgPSBmdW5jdGlvbihzb3VyY2UpIHtcbiAgaWYgKHNvdXJjZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBCdWZmZXIuYWxsb2MoMCk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHNvdXJjZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oc291cmNlKTtcbiAgfSBlbHNlIGlmIChpc1N0cmVhbShzb3VyY2UpICYmICFzb3VyY2UuX3JlYWRhYmxlU3RhdGUpIHtcbiAgICB2YXIgbm9ybWFsaXplZCA9IG5ldyBQYXNzVGhyb3VnaCgpO1xuICAgIHNvdXJjZS5waXBlKG5vcm1hbGl6ZWQpO1xuXG4gICAgcmV0dXJuIG5vcm1hbGl6ZWQ7XG4gIH1cblxuICByZXR1cm4gc291cmNlO1xufTsiLAogICAgIi8qKlxuICogbm9kZS1jb21wcmVzcy1jb21tb25zXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE0IENocmlzIFRhbGtpbmd0b24sIGNvbnRyaWJ1dG9ycy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hcmNoaXZlcmpzL25vZGUtY29tcHJlc3MtY29tbW9ucy9ibG9iL21hc3Rlci9MSUNFTlNFLU1JVFxuICovXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCd1dGlsJykuaW5oZXJpdHM7XG52YXIgaXNTdHJlYW0gPSByZXF1aXJlKCdpcy1zdHJlYW0nKTtcbnZhciBUcmFuc2Zvcm0gPSByZXF1aXJlKCdyZWFkYWJsZS1zdHJlYW0nKS5UcmFuc2Zvcm07XG5cbnZhciBBcmNoaXZlRW50cnkgPSByZXF1aXJlKCcuL2FyY2hpdmUtZW50cnknKTtcbnZhciB1dGlsID0gcmVxdWlyZSgnLi4vdXRpbCcpO1xuXG52YXIgQXJjaGl2ZU91dHB1dFN0cmVhbSA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQXJjaGl2ZU91dHB1dFN0cmVhbSkpIHtcbiAgICByZXR1cm4gbmV3IEFyY2hpdmVPdXRwdXRTdHJlYW0ob3B0aW9ucyk7XG4gIH1cblxuICBUcmFuc2Zvcm0uY2FsbCh0aGlzLCBvcHRpb25zKTtcblxuICB0aGlzLm9mZnNldCA9IDA7XG4gIHRoaXMuX2FyY2hpdmUgPSB7XG4gICAgZmluaXNoOiBmYWxzZSxcbiAgICBmaW5pc2hlZDogZmFsc2UsXG4gICAgcHJvY2Vzc2luZzogZmFsc2VcbiAgfTtcbn07XG5cbmluaGVyaXRzKEFyY2hpdmVPdXRwdXRTdHJlYW0sIFRyYW5zZm9ybSk7XG5cbkFyY2hpdmVPdXRwdXRTdHJlYW0ucHJvdG90eXBlLl9hcHBlbmRCdWZmZXIgPSBmdW5jdGlvbih6YWUsIHNvdXJjZSwgY2FsbGJhY2spIHtcbiAgLy8gc2NhZmZvbGQgb25seVxufTtcblxuQXJjaGl2ZU91dHB1dFN0cmVhbS5wcm90b3R5cGUuX2FwcGVuZFN0cmVhbSA9IGZ1bmN0aW9uKHphZSwgc291cmNlLCBjYWxsYmFjaykge1xuICAvLyBzY2FmZm9sZCBvbmx5XG59O1xuXG5BcmNoaXZlT3V0cHV0U3RyZWFtLnByb3RvdHlwZS5fZW1pdEVycm9yQ2FsbGJhY2sgPSBmdW5jdGlvbihlcnIpIHtcbiAgaWYgKGVycikge1xuICAgIHRoaXMuZW1pdCgnZXJyb3InLCBlcnIpO1xuICB9XG59O1xuXG5BcmNoaXZlT3V0cHV0U3RyZWFtLnByb3RvdHlwZS5fZmluaXNoID0gZnVuY3Rpb24oYWUpIHtcbiAgLy8gc2NhZmZvbGQgb25seVxufTtcblxuQXJjaGl2ZU91dHB1dFN0cmVhbS5wcm90b3R5cGUuX25vcm1hbGl6ZUVudHJ5ID0gZnVuY3Rpb24oYWUpIHtcbiAgLy8gc2NhZmZvbGQgb25seVxufTtcblxuQXJjaGl2ZU91dHB1dFN0cmVhbS5wcm90b3R5cGUuX3RyYW5zZm9ybSA9IGZ1bmN0aW9uKGNodW5rLCBlbmNvZGluZywgY2FsbGJhY2spIHtcbiAgY2FsbGJhY2sobnVsbCwgY2h1bmspO1xufTtcblxuQXJjaGl2ZU91dHB1dFN0cmVhbS5wcm90b3R5cGUuZW50cnkgPSBmdW5jdGlvbihhZSwgc291cmNlLCBjYWxsYmFjaykge1xuICBzb3VyY2UgPSBzb3VyY2UgfHwgbnVsbDtcblxuICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgY2FsbGJhY2sgPSB0aGlzLl9lbWl0RXJyb3JDYWxsYmFjay5iaW5kKHRoaXMpO1xuICB9XG5cbiAgaWYgKCEoYWUgaW5zdGFuY2VvZiBBcmNoaXZlRW50cnkpKSB7XG4gICAgY2FsbGJhY2sobmV3IEVycm9yKCdub3QgYSB2YWxpZCBpbnN0YW5jZSBvZiBBcmNoaXZlRW50cnknKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHRoaXMuX2FyY2hpdmUuZmluaXNoIHx8IHRoaXMuX2FyY2hpdmUuZmluaXNoZWQpIHtcbiAgICBjYWxsYmFjayhuZXcgRXJyb3IoJ3VuYWNjZXB0YWJsZSBlbnRyeSBhZnRlciBmaW5pc2gnKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHRoaXMuX2FyY2hpdmUucHJvY2Vzc2luZykge1xuICAgIGNhbGxiYWNrKG5ldyBFcnJvcignYWxyZWFkeSBwcm9jZXNzaW5nIGFuIGVudHJ5JykpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRoaXMuX2FyY2hpdmUucHJvY2Vzc2luZyA9IHRydWU7XG4gIHRoaXMuX25vcm1hbGl6ZUVudHJ5KGFlKTtcbiAgdGhpcy5fZW50cnkgPSBhZTtcblxuICBzb3VyY2UgPSB1dGlsLm5vcm1hbGl6ZUlucHV0U291cmNlKHNvdXJjZSk7XG5cbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihzb3VyY2UpKSB7XG4gICAgdGhpcy5fYXBwZW5kQnVmZmVyKGFlLCBzb3VyY2UsIGNhbGxiYWNrKTtcbiAgfSBlbHNlIGlmIChpc1N0cmVhbShzb3VyY2UpKSB7XG4gICAgdGhpcy5fYXBwZW5kU3RyZWFtKGFlLCBzb3VyY2UsIGNhbGxiYWNrKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLl9hcmNoaXZlLnByb2Nlc3NpbmcgPSBmYWxzZTtcbiAgICBjYWxsYmFjayhuZXcgRXJyb3IoJ2lucHV0IHNvdXJjZSBtdXN0IGJlIHZhbGlkIFN0cmVhbSBvciBCdWZmZXIgaW5zdGFuY2UnKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5BcmNoaXZlT3V0cHV0U3RyZWFtLnByb3RvdHlwZS5maW5pc2ggPSBmdW5jdGlvbigpIHtcbiAgaWYgKHRoaXMuX2FyY2hpdmUucHJvY2Vzc2luZykge1xuICAgIHRoaXMuX2FyY2hpdmUuZmluaXNoID0gdHJ1ZTtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aGlzLl9maW5pc2goKTtcbn07XG5cbkFyY2hpdmVPdXRwdXRTdHJlYW0ucHJvdG90eXBlLmdldEJ5dGVzV3JpdHRlbiA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5vZmZzZXQ7XG59O1xuXG5BcmNoaXZlT3V0cHV0U3RyZWFtLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKGNodW5rLCBjYikge1xuICBpZiAoY2h1bmspIHtcbiAgICB0aGlzLm9mZnNldCArPSBjaHVuay5sZW5ndGg7XG4gIH1cblxuICByZXR1cm4gVHJhbnNmb3JtLnByb3RvdHlwZS53cml0ZS5jYWxsKHRoaXMsIGNodW5rLCBjYik7XG59OyIsCiAgICAiLyohIGNyYzMyLmpzIChDKSAyMDE0LXByZXNlbnQgU2hlZXRKUyAtLSBodHRwOi8vc2hlZXRqcy5jb20gKi9cbi8qIHZpbTogc2V0IHRzPTI6ICovXG4vKmV4cG9ydGVkIENSQzMyICovXG52YXIgQ1JDMzI7XG4oZnVuY3Rpb24gKGZhY3RvcnkpIHtcblx0Lypqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG5cdC8qZXNsaW50LWRpc2FibGUgKi9cblx0aWYodHlwZW9mIERPX05PVF9FWFBPUlRfQ1JDID09PSAndW5kZWZpbmVkJykge1xuXHRcdGlmKCdvYmplY3QnID09PSB0eXBlb2YgZXhwb3J0cykge1xuXHRcdFx0ZmFjdG9yeShleHBvcnRzKTtcblx0XHR9IGVsc2UgaWYgKCdmdW5jdGlvbicgPT09IHR5cGVvZiBkZWZpbmUgJiYgZGVmaW5lLmFtZCkge1xuXHRcdFx0ZGVmaW5lKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0dmFyIG1vZHVsZSA9IHt9O1xuXHRcdFx0XHRmYWN0b3J5KG1vZHVsZSk7XG5cdFx0XHRcdHJldHVybiBtb2R1bGU7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZmFjdG9yeShDUkMzMiA9IHt9KTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0ZmFjdG9yeShDUkMzMiA9IHt9KTtcblx0fVxuXHQvKmVzbGludC1lbmFibGUgKi9cblx0Lypqc2hpbnQgaWdub3JlOmVuZCAqL1xufShmdW5jdGlvbihDUkMzMikge1xuQ1JDMzIudmVyc2lvbiA9ICcxLjIuMic7XG4vKmdsb2JhbCBJbnQzMkFycmF5ICovXG5mdW5jdGlvbiBzaWduZWRfY3JjX3RhYmxlKCkge1xuXHR2YXIgYyA9IDAsIHRhYmxlID0gbmV3IEFycmF5KDI1Nik7XG5cblx0Zm9yKHZhciBuID0wOyBuICE9IDI1NjsgKytuKXtcblx0XHRjID0gbjtcblx0XHRjID0gKChjJjEpID8gKC0zMDY2NzQ5MTIgXiAoYyA+Pj4gMSkpIDogKGMgPj4+IDEpKTtcblx0XHRjID0gKChjJjEpID8gKC0zMDY2NzQ5MTIgXiAoYyA+Pj4gMSkpIDogKGMgPj4+IDEpKTtcblx0XHRjID0gKChjJjEpID8gKC0zMDY2NzQ5MTIgXiAoYyA+Pj4gMSkpIDogKGMgPj4+IDEpKTtcblx0XHRjID0gKChjJjEpID8gKC0zMDY2NzQ5MTIgXiAoYyA+Pj4gMSkpIDogKGMgPj4+IDEpKTtcblx0XHRjID0gKChjJjEpID8gKC0zMDY2NzQ5MTIgXiAoYyA+Pj4gMSkpIDogKGMgPj4+IDEpKTtcblx0XHRjID0gKChjJjEpID8gKC0zMDY2NzQ5MTIgXiAoYyA+Pj4gMSkpIDogKGMgPj4+IDEpKTtcblx0XHRjID0gKChjJjEpID8gKC0zMDY2NzQ5MTIgXiAoYyA+Pj4gMSkpIDogKGMgPj4+IDEpKTtcblx0XHRjID0gKChjJjEpID8gKC0zMDY2NzQ5MTIgXiAoYyA+Pj4gMSkpIDogKGMgPj4+IDEpKTtcblx0XHR0YWJsZVtuXSA9IGM7XG5cdH1cblxuXHRyZXR1cm4gdHlwZW9mIEludDMyQXJyYXkgIT09ICd1bmRlZmluZWQnID8gbmV3IEludDMyQXJyYXkodGFibGUpIDogdGFibGU7XG59XG5cbnZhciBUMCA9IHNpZ25lZF9jcmNfdGFibGUoKTtcbmZ1bmN0aW9uIHNsaWNlX2J5XzE2X3RhYmxlcyhUKSB7XG5cdHZhciBjID0gMCwgdiA9IDAsIG4gPSAwLCB0YWJsZSA9IHR5cGVvZiBJbnQzMkFycmF5ICE9PSAndW5kZWZpbmVkJyA/IG5ldyBJbnQzMkFycmF5KDQwOTYpIDogbmV3IEFycmF5KDQwOTYpIDtcblxuXHRmb3IobiA9IDA7IG4gIT0gMjU2OyArK24pIHRhYmxlW25dID0gVFtuXTtcblx0Zm9yKG4gPSAwOyBuICE9IDI1NjsgKytuKSB7XG5cdFx0diA9IFRbbl07XG5cdFx0Zm9yKGMgPSAyNTYgKyBuOyBjIDwgNDA5NjsgYyArPSAyNTYpIHYgPSB0YWJsZVtjXSA9ICh2ID4+PiA4KSBeIFRbdiAmIDB4RkZdO1xuXHR9XG5cdHZhciBvdXQgPSBbXTtcblx0Zm9yKG4gPSAxOyBuICE9IDE2OyArK24pIG91dFtuIC0gMV0gPSB0eXBlb2YgSW50MzJBcnJheSAhPT0gJ3VuZGVmaW5lZCcgPyB0YWJsZS5zdWJhcnJheShuICogMjU2LCBuICogMjU2ICsgMjU2KSA6IHRhYmxlLnNsaWNlKG4gKiAyNTYsIG4gKiAyNTYgKyAyNTYpO1xuXHRyZXR1cm4gb3V0O1xufVxudmFyIFRUID0gc2xpY2VfYnlfMTZfdGFibGVzKFQwKTtcbnZhciBUMSA9IFRUWzBdLCAgVDIgPSBUVFsxXSwgIFQzID0gVFRbMl0sICBUNCA9IFRUWzNdLCAgVDUgPSBUVFs0XTtcbnZhciBUNiA9IFRUWzVdLCAgVDcgPSBUVFs2XSwgIFQ4ID0gVFRbN10sICBUOSA9IFRUWzhdLCAgVGEgPSBUVFs5XTtcbnZhciBUYiA9IFRUWzEwXSwgVGMgPSBUVFsxMV0sIFRkID0gVFRbMTJdLCBUZSA9IFRUWzEzXSwgVGYgPSBUVFsxNF07XG5mdW5jdGlvbiBjcmMzMl9ic3RyKGJzdHIsIHNlZWQpIHtcblx0dmFyIEMgPSBzZWVkIF4gLTE7XG5cdGZvcih2YXIgaSA9IDAsIEwgPSBic3RyLmxlbmd0aDsgaSA8IEw7KSBDID0gKEM+Pj44KSBeIFQwWyhDXmJzdHIuY2hhckNvZGVBdChpKyspKSYweEZGXTtcblx0cmV0dXJuIH5DO1xufVxuXG5mdW5jdGlvbiBjcmMzMl9idWYoQiwgc2VlZCkge1xuXHR2YXIgQyA9IHNlZWQgXiAtMSwgTCA9IEIubGVuZ3RoIC0gMTUsIGkgPSAwO1xuXHRmb3IoOyBpIDwgTDspIEMgPVxuXHRcdFRmW0JbaSsrXSBeIChDICYgMjU1KV0gXlxuXHRcdFRlW0JbaSsrXSBeICgoQyA+PiA4KSAmIDI1NSldIF5cblx0XHRUZFtCW2krK10gXiAoKEMgPj4gMTYpICYgMjU1KV0gXlxuXHRcdFRjW0JbaSsrXSBeIChDID4+PiAyNCldIF5cblx0XHRUYltCW2krK11dIF4gVGFbQltpKytdXSBeIFQ5W0JbaSsrXV0gXiBUOFtCW2krK11dIF5cblx0XHRUN1tCW2krK11dIF4gVDZbQltpKytdXSBeIFQ1W0JbaSsrXV0gXiBUNFtCW2krK11dIF5cblx0XHRUM1tCW2krK11dIF4gVDJbQltpKytdXSBeIFQxW0JbaSsrXV0gXiBUMFtCW2krK11dO1xuXHRMICs9IDE1O1xuXHR3aGlsZShpIDwgTCkgQyA9IChDPj4+OCkgXiBUMFsoQ15CW2krK10pJjB4RkZdO1xuXHRyZXR1cm4gfkM7XG59XG5cbmZ1bmN0aW9uIGNyYzMyX3N0cihzdHIsIHNlZWQpIHtcblx0dmFyIEMgPSBzZWVkIF4gLTE7XG5cdGZvcih2YXIgaSA9IDAsIEwgPSBzdHIubGVuZ3RoLCBjID0gMCwgZCA9IDA7IGkgPCBMOykge1xuXHRcdGMgPSBzdHIuY2hhckNvZGVBdChpKyspO1xuXHRcdGlmKGMgPCAweDgwKSB7XG5cdFx0XHRDID0gKEM+Pj44KSBeIFQwWyhDXmMpJjB4RkZdO1xuXHRcdH0gZWxzZSBpZihjIDwgMHg4MDApIHtcblx0XHRcdEMgPSAoQz4+PjgpIF4gVDBbKEMgXiAoMTkyfCgoYz4+NikmMzEpKSkmMHhGRl07XG5cdFx0XHRDID0gKEM+Pj44KSBeIFQwWyhDIF4gKDEyOHwoYyY2MykpKSYweEZGXTtcblx0XHR9IGVsc2UgaWYoYyA+PSAweEQ4MDAgJiYgYyA8IDB4RTAwMCkge1xuXHRcdFx0YyA9IChjJjEwMjMpKzY0OyBkID0gc3RyLmNoYXJDb2RlQXQoaSsrKSYxMDIzO1xuXHRcdFx0QyA9IChDPj4+OCkgXiBUMFsoQyBeICgyNDB8KChjPj44KSY3KSkpJjB4RkZdO1xuXHRcdFx0QyA9IChDPj4+OCkgXiBUMFsoQyBeICgxMjh8KChjPj4yKSY2MykpKSYweEZGXTtcblx0XHRcdEMgPSAoQz4+PjgpIF4gVDBbKEMgXiAoMTI4fCgoZD4+NikmMTUpfCgoYyYzKTw8NCkpKSYweEZGXTtcblx0XHRcdEMgPSAoQz4+PjgpIF4gVDBbKEMgXiAoMTI4fChkJjYzKSkpJjB4RkZdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRDID0gKEM+Pj44KSBeIFQwWyhDIF4gKDIyNHwoKGM+PjEyKSYxNSkpKSYweEZGXTtcblx0XHRcdEMgPSAoQz4+PjgpIF4gVDBbKEMgXiAoMTI4fCgoYz4+NikmNjMpKSkmMHhGRl07XG5cdFx0XHRDID0gKEM+Pj44KSBeIFQwWyhDIF4gKDEyOHwoYyY2MykpKSYweEZGXTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIH5DO1xufVxuQ1JDMzIudGFibGUgPSBUMDtcbi8vICRGbG93SWdub3JlXG5DUkMzMi5ic3RyID0gY3JjMzJfYnN0cjtcbi8vICRGbG93SWdub3JlXG5DUkMzMi5idWYgPSBjcmMzMl9idWY7XG4vLyAkRmxvd0lnbm9yZVxuQ1JDMzIuc3RyID0gY3JjMzJfc3RyO1xufSkpO1xuIiwKICAgICIvKipcbiAqIG5vZGUtY3JjMzItc3RyZWFtXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE0IENocmlzIFRhbGtpbmd0b24sIGNvbnRyaWJ1dG9ycy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hcmNoaXZlcmpzL25vZGUtY3JjMzItc3RyZWFtL2Jsb2IvbWFzdGVyL0xJQ0VOU0UtTUlUXG4gKi9cblxuICd1c2Ugc3RyaWN0JztcblxuY29uc3Qge1RyYW5zZm9ybX0gPSByZXF1aXJlKCdyZWFkYWJsZS1zdHJlYW0nKTtcblxuY29uc3QgY3JjMzIgPSByZXF1aXJlKCdjcmMtMzInKTtcblxuY2xhc3MgQ1JDMzJTdHJlYW0gZXh0ZW5kcyBUcmFuc2Zvcm0ge1xuICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgc3VwZXIob3B0aW9ucyk7XG4gICAgdGhpcy5jaGVja3N1bSA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSg0KTtcbiAgICB0aGlzLmNoZWNrc3VtLndyaXRlSW50MzJCRSgwLCAwKTtcblxuICAgIHRoaXMucmF3U2l6ZSA9IDA7XG4gIH1cblxuICBfdHJhbnNmb3JtKGNodW5rLCBlbmNvZGluZywgY2FsbGJhY2spIHtcbiAgICBpZiAoY2h1bmspIHtcbiAgICAgIHRoaXMuY2hlY2tzdW0gPSBjcmMzMi5idWYoY2h1bmssIHRoaXMuY2hlY2tzdW0pID4+PiAwO1xuICAgICAgdGhpcy5yYXdTaXplICs9IGNodW5rLmxlbmd0aDtcbiAgICB9XG5cbiAgICBjYWxsYmFjayhudWxsLCBjaHVuayk7XG4gIH1cblxuICBkaWdlc3QoZW5jb2RpbmcpIHtcbiAgICBjb25zdCBjaGVja3N1bSA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSg0KTtcbiAgICBjaGVja3N1bS53cml0ZVVJbnQzMkJFKHRoaXMuY2hlY2tzdW0gPj4+IDAsIDApO1xuICAgIHJldHVybiBlbmNvZGluZyA/IGNoZWNrc3VtLnRvU3RyaW5nKGVuY29kaW5nKSA6IGNoZWNrc3VtO1xuICB9XG5cbiAgaGV4KCkge1xuICAgIHJldHVybiB0aGlzLmRpZ2VzdCgnaGV4JykudG9VcHBlckNhc2UoKTtcbiAgfVxuXG4gIHNpemUoKSB7XG4gICAgcmV0dXJuIHRoaXMucmF3U2l6ZTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IENSQzMyU3RyZWFtO1xuIiwKICAgICIvKipcbiAqIG5vZGUtY3JjMzItc3RyZWFtXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE0IENocmlzIFRhbGtpbmd0b24sIGNvbnRyaWJ1dG9ycy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hcmNoaXZlcmpzL25vZGUtY3JjMzItc3RyZWFtL2Jsb2IvbWFzdGVyL0xJQ0VOU0UtTUlUXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCB7RGVmbGF0ZVJhd30gPSByZXF1aXJlKCd6bGliJyk7XG5cbmNvbnN0IGNyYzMyID0gcmVxdWlyZSgnY3JjLTMyJyk7XG5cbmNsYXNzIERlZmxhdGVDUkMzMlN0cmVhbSBleHRlbmRzIERlZmxhdGVSYXcge1xuICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgc3VwZXIob3B0aW9ucyk7XG5cbiAgICB0aGlzLmNoZWNrc3VtID0gQnVmZmVyLmFsbG9jVW5zYWZlKDQpO1xuICAgIHRoaXMuY2hlY2tzdW0ud3JpdGVJbnQzMkJFKDAsIDApO1xuXG4gICAgdGhpcy5yYXdTaXplID0gMDtcbiAgICB0aGlzLmNvbXByZXNzZWRTaXplID0gMDtcbiAgfVxuXG4gIHB1c2goY2h1bmssIGVuY29kaW5nKSB7XG4gICAgaWYgKGNodW5rKSB7XG4gICAgICB0aGlzLmNvbXByZXNzZWRTaXplICs9IGNodW5rLmxlbmd0aDtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VwZXIucHVzaChjaHVuaywgZW5jb2RpbmcpO1xuICB9XG5cbiAgX3RyYW5zZm9ybShjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gICAgaWYgKGNodW5rKSB7XG4gICAgICB0aGlzLmNoZWNrc3VtID0gY3JjMzIuYnVmKGNodW5rLCB0aGlzLmNoZWNrc3VtKSA+Pj4gMDtcbiAgICAgIHRoaXMucmF3U2l6ZSArPSBjaHVuay5sZW5ndGg7XG4gICAgfVxuXG4gICAgc3VwZXIuX3RyYW5zZm9ybShjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKVxuICB9XG5cbiAgZGlnZXN0KGVuY29kaW5nKSB7XG4gICAgY29uc3QgY2hlY2tzdW0gPSBCdWZmZXIuYWxsb2NVbnNhZmUoNCk7XG4gICAgY2hlY2tzdW0ud3JpdGVVSW50MzJCRSh0aGlzLmNoZWNrc3VtID4+PiAwLCAwKTtcbiAgICByZXR1cm4gZW5jb2RpbmcgPyBjaGVja3N1bS50b1N0cmluZyhlbmNvZGluZykgOiBjaGVja3N1bTtcbiAgfVxuXG4gIGhleCgpIHtcbiAgICByZXR1cm4gdGhpcy5kaWdlc3QoJ2hleCcpLnRvVXBwZXJDYXNlKCk7XG4gIH1cblxuICBzaXplKGNvbXByZXNzZWQgPSBmYWxzZSkge1xuICAgIGlmIChjb21wcmVzc2VkKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb21wcmVzc2VkU2l6ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMucmF3U2l6ZTtcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBEZWZsYXRlQ1JDMzJTdHJlYW07XG4iLAogICAgIi8qKlxuICogbm9kZS1jcmMzMi1zdHJlYW1cbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQgQ2hyaXMgVGFsa2luZ3RvbiwgY29udHJpYnV0b3JzLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cHM6Ly9naXRodWIuY29tL2FyY2hpdmVyanMvbm9kZS1jcmMzMi1zdHJlYW0vYmxvYi9tYXN0ZXIvTElDRU5TRS1NSVRcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBDUkMzMlN0cmVhbTogcmVxdWlyZSgnLi9jcmMzMi1zdHJlYW0nKSxcbiAgRGVmbGF0ZUNSQzMyU3RyZWFtOiByZXF1aXJlKCcuL2RlZmxhdGUtY3JjMzItc3RyZWFtJylcbn1cbiIsCiAgICAiLyoqXG4gKiBub2RlLWNvbXByZXNzLWNvbW1vbnNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQgQ2hyaXMgVGFsa2luZ3RvbiwgY29udHJpYnV0b3JzLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cHM6Ly9naXRodWIuY29tL2FyY2hpdmVyanMvbm9kZS1jb21wcmVzcy1jb21tb25zL2Jsb2IvbWFzdGVyL0xJQ0VOU0UtTUlUXG4gKi9cbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ3V0aWwnKS5pbmhlcml0cztcbnZhciBjcmMzMiA9IHJlcXVpcmUoJ2NyYy0zMicpO1xudmFyIHtDUkMzMlN0cmVhbX0gPSByZXF1aXJlKCdjcmMzMi1zdHJlYW0nKTtcbnZhciB7RGVmbGF0ZUNSQzMyU3RyZWFtfSA9IHJlcXVpcmUoJ2NyYzMyLXN0cmVhbScpO1xuXG52YXIgQXJjaGl2ZU91dHB1dFN0cmVhbSA9IHJlcXVpcmUoJy4uL2FyY2hpdmUtb3V0cHV0LXN0cmVhbScpO1xudmFyIFppcEFyY2hpdmVFbnRyeSA9IHJlcXVpcmUoJy4vemlwLWFyY2hpdmUtZW50cnknKTtcbnZhciBHZW5lcmFsUHVycG9zZUJpdCA9IHJlcXVpcmUoJy4vZ2VuZXJhbC1wdXJwb3NlLWJpdCcpO1xuXG52YXIgY29uc3RhbnRzID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKTtcbnZhciB1dGlsID0gcmVxdWlyZSgnLi4vLi4vdXRpbCcpO1xudmFyIHppcFV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcblxudmFyIFppcEFyY2hpdmVPdXRwdXRTdHJlYW0gPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFppcEFyY2hpdmVPdXRwdXRTdHJlYW0pKSB7XG4gICAgcmV0dXJuIG5ldyBaaXBBcmNoaXZlT3V0cHV0U3RyZWFtKG9wdGlvbnMpO1xuICB9XG5cbiAgb3B0aW9ucyA9IHRoaXMub3B0aW9ucyA9IHRoaXMuX2RlZmF1bHRzKG9wdGlvbnMpO1xuXG4gIEFyY2hpdmVPdXRwdXRTdHJlYW0uY2FsbCh0aGlzLCBvcHRpb25zKTtcblxuICB0aGlzLl9lbnRyeSA9IG51bGw7XG4gIHRoaXMuX2VudHJpZXMgPSBbXTtcbiAgdGhpcy5fYXJjaGl2ZSA9IHtcbiAgICBjZW50cmFsTGVuZ3RoOiAwLFxuICAgIGNlbnRyYWxPZmZzZXQ6IDAsXG4gICAgY29tbWVudDogJycsXG4gICAgZmluaXNoOiBmYWxzZSxcbiAgICBmaW5pc2hlZDogZmFsc2UsXG4gICAgcHJvY2Vzc2luZzogZmFsc2UsXG4gICAgZm9yY2VaaXA2NDogb3B0aW9ucy5mb3JjZVppcDY0LFxuICAgIGZvcmNlTG9jYWxUaW1lOiBvcHRpb25zLmZvcmNlTG9jYWxUaW1lXG4gIH07XG59O1xuXG5pbmhlcml0cyhaaXBBcmNoaXZlT3V0cHV0U3RyZWFtLCBBcmNoaXZlT3V0cHV0U3RyZWFtKTtcblxuWmlwQXJjaGl2ZU91dHB1dFN0cmVhbS5wcm90b3R5cGUuX2FmdGVyQXBwZW5kID0gZnVuY3Rpb24oYWUpIHtcbiAgdGhpcy5fZW50cmllcy5wdXNoKGFlKTtcblxuICBpZiAoYWUuZ2V0R2VuZXJhbFB1cnBvc2VCaXQoKS51c2VzRGF0YURlc2NyaXB0b3IoKSkge1xuICAgIHRoaXMuX3dyaXRlRGF0YURlc2NyaXB0b3IoYWUpO1xuICB9XG5cbiAgdGhpcy5fYXJjaGl2ZS5wcm9jZXNzaW5nID0gZmFsc2U7XG4gIHRoaXMuX2VudHJ5ID0gbnVsbDtcblxuICBpZiAodGhpcy5fYXJjaGl2ZS5maW5pc2ggJiYgIXRoaXMuX2FyY2hpdmUuZmluaXNoZWQpIHtcbiAgICB0aGlzLl9maW5pc2goKTtcbiAgfVxufTtcblxuWmlwQXJjaGl2ZU91dHB1dFN0cmVhbS5wcm90b3R5cGUuX2FwcGVuZEJ1ZmZlciA9IGZ1bmN0aW9uKGFlLCBzb3VyY2UsIGNhbGxiYWNrKSB7XG4gIGlmIChzb3VyY2UubGVuZ3RoID09PSAwKSB7XG4gICAgYWUuc2V0TWV0aG9kKGNvbnN0YW50cy5NRVRIT0RfU1RPUkVEKTtcbiAgfVxuXG4gIHZhciBtZXRob2QgPSBhZS5nZXRNZXRob2QoKTtcblxuICBpZiAobWV0aG9kID09PSBjb25zdGFudHMuTUVUSE9EX1NUT1JFRCkge1xuICAgIGFlLnNldFNpemUoc291cmNlLmxlbmd0aCk7XG4gICAgYWUuc2V0Q29tcHJlc3NlZFNpemUoc291cmNlLmxlbmd0aCk7XG4gICAgYWUuc2V0Q3JjKGNyYzMyLmJ1Zihzb3VyY2UpID4+PiAwKTtcbiAgfVxuXG4gIHRoaXMuX3dyaXRlTG9jYWxGaWxlSGVhZGVyKGFlKTtcblxuICBpZiAobWV0aG9kID09PSBjb25zdGFudHMuTUVUSE9EX1NUT1JFRCkge1xuICAgIHRoaXMud3JpdGUoc291cmNlKTtcbiAgICB0aGlzLl9hZnRlckFwcGVuZChhZSk7XG4gICAgY2FsbGJhY2sobnVsbCwgYWUpO1xuICAgIHJldHVybjtcbiAgfSBlbHNlIGlmIChtZXRob2QgPT09IGNvbnN0YW50cy5NRVRIT0RfREVGTEFURUQpIHtcbiAgICB0aGlzLl9zbWFydFN0cmVhbShhZSwgY2FsbGJhY2spLmVuZChzb3VyY2UpO1xuICAgIHJldHVybjtcbiAgfSBlbHNlIHtcbiAgICBjYWxsYmFjayhuZXcgRXJyb3IoJ2NvbXByZXNzaW9uIG1ldGhvZCAnICsgbWV0aG9kICsgJyBub3QgaW1wbGVtZW50ZWQnKSk7XG4gICAgcmV0dXJuO1xuICB9XG59O1xuXG5aaXBBcmNoaXZlT3V0cHV0U3RyZWFtLnByb3RvdHlwZS5fYXBwZW5kU3RyZWFtID0gZnVuY3Rpb24oYWUsIHNvdXJjZSwgY2FsbGJhY2spIHtcbiAgYWUuZ2V0R2VuZXJhbFB1cnBvc2VCaXQoKS51c2VEYXRhRGVzY3JpcHRvcih0cnVlKTtcbiAgYWUuc2V0VmVyc2lvbk5lZWRlZFRvRXh0cmFjdChjb25zdGFudHMuTUlOX1ZFUlNJT05fREFUQV9ERVNDUklQVE9SKTtcblxuICB0aGlzLl93cml0ZUxvY2FsRmlsZUhlYWRlcihhZSk7XG5cbiAgdmFyIHNtYXJ0ID0gdGhpcy5fc21hcnRTdHJlYW0oYWUsIGNhbGxiYWNrKTtcbiAgc291cmNlLm9uY2UoJ2Vycm9yJywgZnVuY3Rpb24oZXJyKSB7XG4gICAgc21hcnQuZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgIHNtYXJ0LmVuZCgpO1xuICB9KVxuICBzb3VyY2UucGlwZShzbWFydCk7XG59O1xuXG5aaXBBcmNoaXZlT3V0cHV0U3RyZWFtLnByb3RvdHlwZS5fZGVmYXVsdHMgPSBmdW5jdGlvbihvKSB7XG4gIGlmICh0eXBlb2YgbyAhPT0gJ29iamVjdCcpIHtcbiAgICBvID0ge307XG4gIH1cblxuICBpZiAodHlwZW9mIG8uemxpYiAhPT0gJ29iamVjdCcpIHtcbiAgICBvLnpsaWIgPSB7fTtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygby56bGliLmxldmVsICE9PSAnbnVtYmVyJykge1xuICAgIG8uemxpYi5sZXZlbCA9IGNvbnN0YW50cy5aTElCX0JFU1RfU1BFRUQ7XG4gIH1cblxuICBvLmZvcmNlWmlwNjQgPSAhIW8uZm9yY2VaaXA2NDtcbiAgby5mb3JjZUxvY2FsVGltZSA9ICEhby5mb3JjZUxvY2FsVGltZTtcblxuICByZXR1cm4gbztcbn07XG5cblppcEFyY2hpdmVPdXRwdXRTdHJlYW0ucHJvdG90eXBlLl9maW5pc2ggPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fYXJjaGl2ZS5jZW50cmFsT2Zmc2V0ID0gdGhpcy5vZmZzZXQ7XG5cbiAgdGhpcy5fZW50cmllcy5mb3JFYWNoKGZ1bmN0aW9uKGFlKSB7XG4gICAgdGhpcy5fd3JpdGVDZW50cmFsRmlsZUhlYWRlcihhZSk7XG4gIH0uYmluZCh0aGlzKSk7XG5cbiAgdGhpcy5fYXJjaGl2ZS5jZW50cmFsTGVuZ3RoID0gdGhpcy5vZmZzZXQgLSB0aGlzLl9hcmNoaXZlLmNlbnRyYWxPZmZzZXQ7XG5cbiAgaWYgKHRoaXMuaXNaaXA2NCgpKSB7XG4gICAgdGhpcy5fd3JpdGVDZW50cmFsRGlyZWN0b3J5WmlwNjQoKTtcbiAgfVxuXG4gIHRoaXMuX3dyaXRlQ2VudHJhbERpcmVjdG9yeUVuZCgpO1xuXG4gIHRoaXMuX2FyY2hpdmUucHJvY2Vzc2luZyA9IGZhbHNlO1xuICB0aGlzLl9hcmNoaXZlLmZpbmlzaCA9IHRydWU7XG4gIHRoaXMuX2FyY2hpdmUuZmluaXNoZWQgPSB0cnVlO1xuICB0aGlzLmVuZCgpO1xufTtcblxuWmlwQXJjaGl2ZU91dHB1dFN0cmVhbS5wcm90b3R5cGUuX25vcm1hbGl6ZUVudHJ5ID0gZnVuY3Rpb24oYWUpIHtcbiAgaWYgKGFlLmdldE1ldGhvZCgpID09PSAtMSkge1xuICAgIGFlLnNldE1ldGhvZChjb25zdGFudHMuTUVUSE9EX0RFRkxBVEVEKTtcbiAgfVxuXG4gIGlmIChhZS5nZXRNZXRob2QoKSA9PT0gY29uc3RhbnRzLk1FVEhPRF9ERUZMQVRFRCkge1xuICAgIGFlLmdldEdlbmVyYWxQdXJwb3NlQml0KCkudXNlRGF0YURlc2NyaXB0b3IodHJ1ZSk7XG4gICAgYWUuc2V0VmVyc2lvbk5lZWRlZFRvRXh0cmFjdChjb25zdGFudHMuTUlOX1ZFUlNJT05fREFUQV9ERVNDUklQVE9SKTtcbiAgfVxuXG4gIGlmIChhZS5nZXRUaW1lKCkgPT09IC0xKSB7XG4gICAgYWUuc2V0VGltZShuZXcgRGF0ZSgpLCB0aGlzLl9hcmNoaXZlLmZvcmNlTG9jYWxUaW1lKTtcbiAgfVxuXG4gIGFlLl9vZmZzZXRzID0ge1xuICAgIGZpbGU6IDAsXG4gICAgZGF0YTogMCxcbiAgICBjb250ZW50czogMCxcbiAgfTtcbn07XG5cblppcEFyY2hpdmVPdXRwdXRTdHJlYW0ucHJvdG90eXBlLl9zbWFydFN0cmVhbSA9IGZ1bmN0aW9uKGFlLCBjYWxsYmFjaykge1xuICB2YXIgZGVmbGF0ZSA9IGFlLmdldE1ldGhvZCgpID09PSBjb25zdGFudHMuTUVUSE9EX0RFRkxBVEVEO1xuICB2YXIgcHJvY2VzcyA9IGRlZmxhdGUgPyBuZXcgRGVmbGF0ZUNSQzMyU3RyZWFtKHRoaXMub3B0aW9ucy56bGliKSA6IG5ldyBDUkMzMlN0cmVhbSgpO1xuICB2YXIgZXJyb3IgPSBudWxsO1xuXG4gIGZ1bmN0aW9uIGhhbmRsZVN0dWZmKCkge1xuICAgIHZhciBkaWdlc3QgPSBwcm9jZXNzLmRpZ2VzdCgpLnJlYWRVSW50MzJCRSgwKTtcbiAgICBhZS5zZXRDcmMoZGlnZXN0KTtcbiAgICBhZS5zZXRTaXplKHByb2Nlc3Muc2l6ZSgpKTtcbiAgICBhZS5zZXRDb21wcmVzc2VkU2l6ZShwcm9jZXNzLnNpemUodHJ1ZSkpO1xuICAgIHRoaXMuX2FmdGVyQXBwZW5kKGFlKTtcbiAgICBjYWxsYmFjayhlcnJvciwgYWUpO1xuICB9XG5cbiAgcHJvY2Vzcy5vbmNlKCdlbmQnLCBoYW5kbGVTdHVmZi5iaW5kKHRoaXMpKTtcbiAgcHJvY2Vzcy5vbmNlKCdlcnJvcicsIGZ1bmN0aW9uKGVycikge1xuICAgIGVycm9yID0gZXJyO1xuICB9KTtcblxuICBwcm9jZXNzLnBpcGUodGhpcywgeyBlbmQ6IGZhbHNlIH0pO1xuXG4gIHJldHVybiBwcm9jZXNzO1xufTtcblxuWmlwQXJjaGl2ZU91dHB1dFN0cmVhbS5wcm90b3R5cGUuX3dyaXRlQ2VudHJhbERpcmVjdG9yeUVuZCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcmVjb3JkcyA9IHRoaXMuX2VudHJpZXMubGVuZ3RoO1xuICB2YXIgc2l6ZSA9IHRoaXMuX2FyY2hpdmUuY2VudHJhbExlbmd0aDtcbiAgdmFyIG9mZnNldCA9IHRoaXMuX2FyY2hpdmUuY2VudHJhbE9mZnNldDtcblxuICBpZiAodGhpcy5pc1ppcDY0KCkpIHtcbiAgICByZWNvcmRzID0gY29uc3RhbnRzLlpJUDY0X01BR0lDX1NIT1JUO1xuICAgIHNpemUgPSBjb25zdGFudHMuWklQNjRfTUFHSUM7XG4gICAgb2Zmc2V0ID0gY29uc3RhbnRzLlpJUDY0X01BR0lDO1xuICB9XG5cbiAgLy8gc2lnbmF0dXJlXG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRMb25nQnl0ZXMoY29uc3RhbnRzLlNJR19FT0NEKSk7XG5cbiAgLy8gZGlzayBudW1iZXJzXG4gIHRoaXMud3JpdGUoY29uc3RhbnRzLlNIT1JUX1pFUk8pO1xuICB0aGlzLndyaXRlKGNvbnN0YW50cy5TSE9SVF9aRVJPKTtcblxuICAvLyBudW1iZXIgb2YgZW50cmllc1xuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0U2hvcnRCeXRlcyhyZWNvcmRzKSk7XG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRTaG9ydEJ5dGVzKHJlY29yZHMpKTtcblxuICAvLyBsZW5ndGggYW5kIGxvY2F0aW9uIG9mIENEXG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRMb25nQnl0ZXMoc2l6ZSkpO1xuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0TG9uZ0J5dGVzKG9mZnNldCkpO1xuXG4gIC8vIGFyY2hpdmUgY29tbWVudFxuICB2YXIgY29tbWVudCA9IHRoaXMuZ2V0Q29tbWVudCgpO1xuICB2YXIgY29tbWVudExlbmd0aCA9IEJ1ZmZlci5ieXRlTGVuZ3RoKGNvbW1lbnQpO1xuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0U2hvcnRCeXRlcyhjb21tZW50TGVuZ3RoKSk7XG4gIHRoaXMud3JpdGUoY29tbWVudCk7XG59O1xuXG5aaXBBcmNoaXZlT3V0cHV0U3RyZWFtLnByb3RvdHlwZS5fd3JpdGVDZW50cmFsRGlyZWN0b3J5WmlwNjQgPSBmdW5jdGlvbigpIHtcbiAgLy8gc2lnbmF0dXJlXG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRMb25nQnl0ZXMoY29uc3RhbnRzLlNJR19aSVA2NF9FT0NEKSk7XG5cbiAgLy8gc2l6ZSBvZiB0aGUgWklQNjQgRU9DRCByZWNvcmRcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldEVpZ2h0Qnl0ZXMoNDQpKTtcblxuICAvLyB2ZXJzaW9uIG1hZGUgYnlcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldFNob3J0Qnl0ZXMoY29uc3RhbnRzLk1JTl9WRVJTSU9OX1pJUDY0KSk7XG5cbiAgLy8gdmVyc2lvbiB0byBleHRyYWN0XG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRTaG9ydEJ5dGVzKGNvbnN0YW50cy5NSU5fVkVSU0lPTl9aSVA2NCkpO1xuXG4gIC8vIGRpc2sgbnVtYmVyc1xuICB0aGlzLndyaXRlKGNvbnN0YW50cy5MT05HX1pFUk8pO1xuICB0aGlzLndyaXRlKGNvbnN0YW50cy5MT05HX1pFUk8pO1xuXG4gIC8vIG51bWJlciBvZiBlbnRyaWVzXG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRFaWdodEJ5dGVzKHRoaXMuX2VudHJpZXMubGVuZ3RoKSk7XG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRFaWdodEJ5dGVzKHRoaXMuX2VudHJpZXMubGVuZ3RoKSk7XG5cbiAgLy8gbGVuZ3RoIGFuZCBsb2NhdGlvbiBvZiBDRFxuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0RWlnaHRCeXRlcyh0aGlzLl9hcmNoaXZlLmNlbnRyYWxMZW5ndGgpKTtcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldEVpZ2h0Qnl0ZXModGhpcy5fYXJjaGl2ZS5jZW50cmFsT2Zmc2V0KSk7XG5cbiAgLy8gZXh0ZW5zaWJsZSBkYXRhIHNlY3RvclxuICAvLyBub3QgaW1wbGVtZW50ZWQgYXQgdGhpcyB0aW1lXG5cbiAgLy8gZW5kIG9mIGNlbnRyYWwgZGlyZWN0b3J5IGxvY2F0b3JcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldExvbmdCeXRlcyhjb25zdGFudHMuU0lHX1pJUDY0X0VPQ0RfTE9DKSk7XG5cbiAgLy8gZGlzayBudW1iZXIgaG9sZGluZyB0aGUgWklQNjQgRU9DRCByZWNvcmRcbiAgdGhpcy53cml0ZShjb25zdGFudHMuTE9OR19aRVJPKTtcblxuICAvLyByZWxhdGl2ZSBvZmZzZXQgb2YgdGhlIFpJUDY0IEVPQ0QgcmVjb3JkXG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRFaWdodEJ5dGVzKHRoaXMuX2FyY2hpdmUuY2VudHJhbE9mZnNldCArIHRoaXMuX2FyY2hpdmUuY2VudHJhbExlbmd0aCkpO1xuXG4gIC8vIHRvdGFsIG51bWJlciBvZiBkaXNrc1xuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0TG9uZ0J5dGVzKDEpKTtcbn07XG5cblppcEFyY2hpdmVPdXRwdXRTdHJlYW0ucHJvdG90eXBlLl93cml0ZUNlbnRyYWxGaWxlSGVhZGVyID0gZnVuY3Rpb24oYWUpIHtcbiAgdmFyIGdwYiA9IGFlLmdldEdlbmVyYWxQdXJwb3NlQml0KCk7XG4gIHZhciBtZXRob2QgPSBhZS5nZXRNZXRob2QoKTtcbiAgdmFyIGZpbGVPZmZzZXQgPSBhZS5fb2Zmc2V0cy5maWxlO1xuXG4gIHZhciBzaXplID0gYWUuZ2V0U2l6ZSgpO1xuICB2YXIgY29tcHJlc3NlZFNpemUgPSBhZS5nZXRDb21wcmVzc2VkU2l6ZSgpO1xuXG4gIGlmIChhZS5pc1ppcDY0KCkgfHwgZmlsZU9mZnNldCA+IGNvbnN0YW50cy5aSVA2NF9NQUdJQykge1xuICAgIHNpemUgPSBjb25zdGFudHMuWklQNjRfTUFHSUM7XG4gICAgY29tcHJlc3NlZFNpemUgPSBjb25zdGFudHMuWklQNjRfTUFHSUM7XG4gICAgZmlsZU9mZnNldCA9IGNvbnN0YW50cy5aSVA2NF9NQUdJQztcblxuICAgIGFlLnNldFZlcnNpb25OZWVkZWRUb0V4dHJhY3QoY29uc3RhbnRzLk1JTl9WRVJTSU9OX1pJUDY0KTtcblxuICAgIHZhciBleHRyYUJ1ZiA9IEJ1ZmZlci5jb25jYXQoW1xuICAgICAgemlwVXRpbC5nZXRTaG9ydEJ5dGVzKGNvbnN0YW50cy5aSVA2NF9FWFRSQV9JRCksXG4gICAgICB6aXBVdGlsLmdldFNob3J0Qnl0ZXMoMjQpLFxuICAgICAgemlwVXRpbC5nZXRFaWdodEJ5dGVzKGFlLmdldFNpemUoKSksXG4gICAgICB6aXBVdGlsLmdldEVpZ2h0Qnl0ZXMoYWUuZ2V0Q29tcHJlc3NlZFNpemUoKSksXG4gICAgICB6aXBVdGlsLmdldEVpZ2h0Qnl0ZXMoYWUuX29mZnNldHMuZmlsZSlcbiAgICBdLCAyOCk7XG5cbiAgICBhZS5zZXRFeHRyYShleHRyYUJ1Zik7XG4gIH1cblxuICAvLyBzaWduYXR1cmVcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldExvbmdCeXRlcyhjb25zdGFudHMuU0lHX0NGSCkpO1xuXG4gIC8vIHZlcnNpb24gbWFkZSBieVxuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0U2hvcnRCeXRlcygoYWUuZ2V0UGxhdGZvcm0oKSA8PCA4KSB8IGNvbnN0YW50cy5WRVJTSU9OX01BREVCWSkpO1xuXG4gIC8vIHZlcnNpb24gdG8gZXh0cmFjdCBhbmQgZ2VuZXJhbCBiaXQgZmxhZ1xuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0U2hvcnRCeXRlcyhhZS5nZXRWZXJzaW9uTmVlZGVkVG9FeHRyYWN0KCkpKTtcbiAgdGhpcy53cml0ZShncGIuZW5jb2RlKCkpO1xuXG4gIC8vIGNvbXByZXNzaW9uIG1ldGhvZFxuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0U2hvcnRCeXRlcyhtZXRob2QpKTtcblxuICAvLyBkYXRldGltZVxuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0TG9uZ0J5dGVzKGFlLmdldFRpbWVEb3MoKSkpO1xuXG4gIC8vIGNyYzMyIGNoZWNrc3VtXG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRMb25nQnl0ZXMoYWUuZ2V0Q3JjKCkpKTtcblxuICAvLyBzaXplc1xuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0TG9uZ0J5dGVzKGNvbXByZXNzZWRTaXplKSk7XG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRMb25nQnl0ZXMoc2l6ZSkpO1xuXG4gIHZhciBuYW1lID0gYWUuZ2V0TmFtZSgpO1xuICB2YXIgY29tbWVudCA9IGFlLmdldENvbW1lbnQoKTtcbiAgdmFyIGV4dHJhID0gYWUuZ2V0Q2VudHJhbERpcmVjdG9yeUV4dHJhKCk7XG5cbiAgaWYgKGdwYi51c2VzVVRGOEZvck5hbWVzKCkpIHtcbiAgICBuYW1lID0gQnVmZmVyLmZyb20obmFtZSk7XG4gICAgY29tbWVudCA9IEJ1ZmZlci5mcm9tKGNvbW1lbnQpO1xuICB9XG5cbiAgLy8gbmFtZSBsZW5ndGhcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldFNob3J0Qnl0ZXMobmFtZS5sZW5ndGgpKTtcblxuICAvLyBleHRyYSBsZW5ndGhcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldFNob3J0Qnl0ZXMoZXh0cmEubGVuZ3RoKSk7XG5cbiAgLy8gY29tbWVudHMgbGVuZ3RoXG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRTaG9ydEJ5dGVzKGNvbW1lbnQubGVuZ3RoKSk7XG5cbiAgLy8gZGlzayBudW1iZXIgc3RhcnRcbiAgdGhpcy53cml0ZShjb25zdGFudHMuU0hPUlRfWkVSTyk7XG5cbiAgLy8gaW50ZXJuYWwgYXR0cmlidXRlc1xuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0U2hvcnRCeXRlcyhhZS5nZXRJbnRlcm5hbEF0dHJpYnV0ZXMoKSkpO1xuXG4gIC8vIGV4dGVybmFsIGF0dHJpYnV0ZXNcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldExvbmdCeXRlcyhhZS5nZXRFeHRlcm5hbEF0dHJpYnV0ZXMoKSkpO1xuXG4gIC8vIHJlbGF0aXZlIG9mZnNldCBvZiBMRkhcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldExvbmdCeXRlcyhmaWxlT2Zmc2V0KSk7XG5cbiAgLy8gbmFtZVxuICB0aGlzLndyaXRlKG5hbWUpO1xuXG4gIC8vIGV4dHJhXG4gIHRoaXMud3JpdGUoZXh0cmEpO1xuXG4gIC8vIGNvbW1lbnRcbiAgdGhpcy53cml0ZShjb21tZW50KTtcbn07XG5cblppcEFyY2hpdmVPdXRwdXRTdHJlYW0ucHJvdG90eXBlLl93cml0ZURhdGFEZXNjcmlwdG9yID0gZnVuY3Rpb24oYWUpIHtcbiAgLy8gc2lnbmF0dXJlXG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRMb25nQnl0ZXMoY29uc3RhbnRzLlNJR19ERCkpO1xuXG4gIC8vIGNyYzMyIGNoZWNrc3VtXG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRMb25nQnl0ZXMoYWUuZ2V0Q3JjKCkpKTtcblxuICAvLyBzaXplc1xuICBpZiAoYWUuaXNaaXA2NCgpKSB7XG4gICAgdGhpcy53cml0ZSh6aXBVdGlsLmdldEVpZ2h0Qnl0ZXMoYWUuZ2V0Q29tcHJlc3NlZFNpemUoKSkpO1xuICAgIHRoaXMud3JpdGUoemlwVXRpbC5nZXRFaWdodEJ5dGVzKGFlLmdldFNpemUoKSkpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMud3JpdGUoemlwVXRpbC5nZXRMb25nQnl0ZXMoYWUuZ2V0Q29tcHJlc3NlZFNpemUoKSkpO1xuICAgIHRoaXMud3JpdGUoemlwVXRpbC5nZXRMb25nQnl0ZXMoYWUuZ2V0U2l6ZSgpKSk7XG4gIH1cbn07XG5cblppcEFyY2hpdmVPdXRwdXRTdHJlYW0ucHJvdG90eXBlLl93cml0ZUxvY2FsRmlsZUhlYWRlciA9IGZ1bmN0aW9uKGFlKSB7XG4gIHZhciBncGIgPSBhZS5nZXRHZW5lcmFsUHVycG9zZUJpdCgpO1xuICB2YXIgbWV0aG9kID0gYWUuZ2V0TWV0aG9kKCk7XG4gIHZhciBuYW1lID0gYWUuZ2V0TmFtZSgpO1xuICB2YXIgZXh0cmEgPSBhZS5nZXRMb2NhbEZpbGVEYXRhRXh0cmEoKTtcblxuICBpZiAoYWUuaXNaaXA2NCgpKSB7XG4gICAgZ3BiLnVzZURhdGFEZXNjcmlwdG9yKHRydWUpO1xuICAgIGFlLnNldFZlcnNpb25OZWVkZWRUb0V4dHJhY3QoY29uc3RhbnRzLk1JTl9WRVJTSU9OX1pJUDY0KTtcbiAgfVxuXG4gIGlmIChncGIudXNlc1VURjhGb3JOYW1lcygpKSB7XG4gICAgbmFtZSA9IEJ1ZmZlci5mcm9tKG5hbWUpO1xuICB9XG5cbiAgYWUuX29mZnNldHMuZmlsZSA9IHRoaXMub2Zmc2V0O1xuXG4gIC8vIHNpZ25hdHVyZVxuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0TG9uZ0J5dGVzKGNvbnN0YW50cy5TSUdfTEZIKSk7XG5cbiAgLy8gdmVyc2lvbiB0byBleHRyYWN0IGFuZCBnZW5lcmFsIGJpdCBmbGFnXG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRTaG9ydEJ5dGVzKGFlLmdldFZlcnNpb25OZWVkZWRUb0V4dHJhY3QoKSkpO1xuICB0aGlzLndyaXRlKGdwYi5lbmNvZGUoKSk7XG5cbiAgLy8gY29tcHJlc3Npb24gbWV0aG9kXG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRTaG9ydEJ5dGVzKG1ldGhvZCkpO1xuXG4gIC8vIGRhdGV0aW1lXG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRMb25nQnl0ZXMoYWUuZ2V0VGltZURvcygpKSk7XG5cbiAgYWUuX29mZnNldHMuZGF0YSA9IHRoaXMub2Zmc2V0O1xuXG4gIC8vIGNyYzMyIGNoZWNrc3VtIGFuZCBzaXplc1xuICBpZiAoZ3BiLnVzZXNEYXRhRGVzY3JpcHRvcigpKSB7XG4gICAgdGhpcy53cml0ZShjb25zdGFudHMuTE9OR19aRVJPKTtcbiAgICB0aGlzLndyaXRlKGNvbnN0YW50cy5MT05HX1pFUk8pO1xuICAgIHRoaXMud3JpdGUoY29uc3RhbnRzLkxPTkdfWkVSTyk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy53cml0ZSh6aXBVdGlsLmdldExvbmdCeXRlcyhhZS5nZXRDcmMoKSkpO1xuICAgIHRoaXMud3JpdGUoemlwVXRpbC5nZXRMb25nQnl0ZXMoYWUuZ2V0Q29tcHJlc3NlZFNpemUoKSkpO1xuICAgIHRoaXMud3JpdGUoemlwVXRpbC5nZXRMb25nQnl0ZXMoYWUuZ2V0U2l6ZSgpKSk7XG4gIH1cblxuICAvLyBuYW1lIGxlbmd0aFxuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0U2hvcnRCeXRlcyhuYW1lLmxlbmd0aCkpO1xuXG4gIC8vIGV4dHJhIGxlbmd0aFxuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0U2hvcnRCeXRlcyhleHRyYS5sZW5ndGgpKTtcblxuICAvLyBuYW1lXG4gIHRoaXMud3JpdGUobmFtZSk7XG5cbiAgLy8gZXh0cmFcbiAgdGhpcy53cml0ZShleHRyYSk7XG5cbiAgYWUuX29mZnNldHMuY29udGVudHMgPSB0aGlzLm9mZnNldDtcbn07XG5cblppcEFyY2hpdmVPdXRwdXRTdHJlYW0ucHJvdG90eXBlLmdldENvbW1lbnQgPSBmdW5jdGlvbihjb21tZW50KSB7XG4gIHJldHVybiB0aGlzLl9hcmNoaXZlLmNvbW1lbnQgIT09IG51bGwgPyB0aGlzLl9hcmNoaXZlLmNvbW1lbnQgOiAnJztcbn07XG5cblppcEFyY2hpdmVPdXRwdXRTdHJlYW0ucHJvdG90eXBlLmlzWmlwNjQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuX2FyY2hpdmUuZm9yY2VaaXA2NCB8fCB0aGlzLl9lbnRyaWVzLmxlbmd0aCA+IGNvbnN0YW50cy5aSVA2NF9NQUdJQ19TSE9SVCB8fCB0aGlzLl9hcmNoaXZlLmNlbnRyYWxMZW5ndGggPiBjb25zdGFudHMuWklQNjRfTUFHSUMgfHwgdGhpcy5fYXJjaGl2ZS5jZW50cmFsT2Zmc2V0ID4gY29uc3RhbnRzLlpJUDY0X01BR0lDO1xufTtcblxuWmlwQXJjaGl2ZU91dHB1dFN0cmVhbS5wcm90b3R5cGUuc2V0Q29tbWVudCA9IGZ1bmN0aW9uKGNvbW1lbnQpIHtcbiAgdGhpcy5fYXJjaGl2ZS5jb21tZW50ID0gY29tbWVudDtcbn07XG4iLAogICAgIi8qKlxuICogbm9kZS1jb21wcmVzcy1jb21tb25zXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE0IENocmlzIFRhbGtpbmd0b24sIGNvbnRyaWJ1dG9ycy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hcmNoaXZlcmpzL25vZGUtY29tcHJlc3MtY29tbW9ucy9ibG9iL21hc3Rlci9MSUNFTlNFLU1JVFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQXJjaGl2ZUVudHJ5OiByZXF1aXJlKCcuL2FyY2hpdmVycy9hcmNoaXZlLWVudHJ5JyksXG4gIFppcEFyY2hpdmVFbnRyeTogcmVxdWlyZSgnLi9hcmNoaXZlcnMvemlwL3ppcC1hcmNoaXZlLWVudHJ5JyksXG4gIEFyY2hpdmVPdXRwdXRTdHJlYW06IHJlcXVpcmUoJy4vYXJjaGl2ZXJzL2FyY2hpdmUtb3V0cHV0LXN0cmVhbScpLFxuICBaaXBBcmNoaXZlT3V0cHV0U3RyZWFtOiByZXF1aXJlKCcuL2FyY2hpdmVycy96aXAvemlwLWFyY2hpdmUtb3V0cHV0LXN0cmVhbScpXG59OyIsCiAgICAiLyoqXG4gKiBaaXBTdHJlYW1cbiAqXG4gKiBAaWdub3JlXG4gKiBAbGljZW5zZSBbTUlUXXtAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXJjaGl2ZXJqcy9ub2RlLXppcC1zdHJlYW0vYmxvYi9tYXN0ZXIvTElDRU5TRX1cbiAqIEBjb3B5cmlnaHQgKGMpIDIwMTQgQ2hyaXMgVGFsa2luZ3RvbiwgY29udHJpYnV0b3JzLlxuICovXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCd1dGlsJykuaW5oZXJpdHM7XG5cbnZhciBaaXBBcmNoaXZlT3V0cHV0U3RyZWFtID0gcmVxdWlyZSgnY29tcHJlc3MtY29tbW9ucycpLlppcEFyY2hpdmVPdXRwdXRTdHJlYW07XG52YXIgWmlwQXJjaGl2ZUVudHJ5ID0gcmVxdWlyZSgnY29tcHJlc3MtY29tbW9ucycpLlppcEFyY2hpdmVFbnRyeTtcblxudmFyIHV0aWwgPSByZXF1aXJlKCdhcmNoaXZlci11dGlscycpO1xuXG4vKipcbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgZXh0ZXJuYWw6WmlwQXJjaGl2ZU91dHB1dFN0cmVhbVxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLmNvbW1lbnRdIFNldHMgdGhlIHppcCBhcmNoaXZlIGNvbW1lbnQuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLmZvcmNlTG9jYWxUaW1lPWZhbHNlXSBGb3JjZXMgdGhlIGFyY2hpdmUgdG8gY29udGFpbiBsb2NhbCBmaWxlIHRpbWVzIGluc3RlYWQgb2YgVVRDLlxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5mb3JjZVppcDY0PWZhbHNlXSBGb3JjZXMgdGhlIGFyY2hpdmUgdG8gY29udGFpbiBaSVA2NCBoZWFkZXJzLlxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5zdG9yZT1mYWxzZV0gU2V0cyB0aGUgY29tcHJlc3Npb24gbWV0aG9kIHRvIFNUT1JFLlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLnpsaWJdIFBhc3NlZCB0byBbemxpYl17QGxpbmsgaHR0cHM6Ly9ub2RlanMub3JnL2FwaS96bGliLmh0bWwjemxpYl9jbGFzc19vcHRpb25zfVxuICogdG8gY29udHJvbCBjb21wcmVzc2lvbi5cbiAqL1xudmFyIFppcFN0cmVhbSA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgWmlwU3RyZWFtKSkge1xuICAgIHJldHVybiBuZXcgWmlwU3RyZWFtKG9wdGlvbnMpO1xuICB9XG5cbiAgb3B0aW9ucyA9IHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIG9wdGlvbnMuemxpYiA9IG9wdGlvbnMuemxpYiB8fCB7fTtcblxuICBaaXBBcmNoaXZlT3V0cHV0U3RyZWFtLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cbiAgaWYgKHR5cGVvZiBvcHRpb25zLmxldmVsID09PSAnbnVtYmVyJyAmJiBvcHRpb25zLmxldmVsID49IDApIHtcbiAgICBvcHRpb25zLnpsaWIubGV2ZWwgPSBvcHRpb25zLmxldmVsO1xuICAgIGRlbGV0ZSBvcHRpb25zLmxldmVsO1xuICB9XG5cbiAgaWYgKCFvcHRpb25zLmZvcmNlWmlwNjQgJiYgdHlwZW9mIG9wdGlvbnMuemxpYi5sZXZlbCA9PT0gJ251bWJlcicgJiYgb3B0aW9ucy56bGliLmxldmVsID09PSAwKSB7XG4gICAgb3B0aW9ucy5zdG9yZSA9IHRydWU7XG4gIH1cblxuICBvcHRpb25zLm5hbWVQcmVwZW5kU2xhc2ggPSBvcHRpb25zLm5hbWVQcmVwZW5kU2xhc2ggfHwgZmFsc2U7XG5cbiAgaWYgKG9wdGlvbnMuY29tbWVudCAmJiBvcHRpb25zLmNvbW1lbnQubGVuZ3RoID4gMCkge1xuICAgIHRoaXMuc2V0Q29tbWVudChvcHRpb25zLmNvbW1lbnQpO1xuICB9XG59O1xuXG5pbmhlcml0cyhaaXBTdHJlYW0sIFppcEFyY2hpdmVPdXRwdXRTdHJlYW0pO1xuXG4vKipcbiAqIE5vcm1hbGl6ZXMgZW50cnkgZGF0YSB3aXRoIGZhbGxiYWNrcyBmb3Iga2V5IHByb3BlcnRpZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSAge09iamVjdH0gZGF0YVxuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5aaXBTdHJlYW0ucHJvdG90eXBlLl9ub3JtYWxpemVGaWxlRGF0YSA9IGZ1bmN0aW9uKGRhdGEpIHtcbiAgZGF0YSA9IHV0aWwuZGVmYXVsdHMoZGF0YSwge1xuICAgIHR5cGU6ICdmaWxlJyxcbiAgICBuYW1lOiBudWxsLFxuICAgIG5hbWVQcmVwZW5kU2xhc2g6IHRoaXMub3B0aW9ucy5uYW1lUHJlcGVuZFNsYXNoLFxuICAgIGxpbmtuYW1lOiBudWxsLFxuICAgIGRhdGU6IG51bGwsXG4gICAgbW9kZTogbnVsbCxcbiAgICBzdG9yZTogdGhpcy5vcHRpb25zLnN0b3JlLFxuICAgIGNvbW1lbnQ6ICcnXG4gIH0pO1xuXG4gIHZhciBpc0RpciA9IGRhdGEudHlwZSA9PT0gJ2RpcmVjdG9yeSc7XG4gIHZhciBpc1N5bWxpbmsgPSBkYXRhLnR5cGUgPT09ICdzeW1saW5rJztcblxuICBpZiAoZGF0YS5uYW1lKSB7XG4gICAgZGF0YS5uYW1lID0gdXRpbC5zYW5pdGl6ZVBhdGgoZGF0YS5uYW1lKTtcblxuICAgIGlmICghaXNTeW1saW5rICYmIGRhdGEubmFtZS5zbGljZSgtMSkgPT09ICcvJykge1xuICAgICAgaXNEaXIgPSB0cnVlO1xuICAgICAgZGF0YS50eXBlID0gJ2RpcmVjdG9yeSc7XG4gICAgfSBlbHNlIGlmIChpc0Rpcikge1xuICAgICAgZGF0YS5uYW1lICs9ICcvJztcbiAgICB9XG4gIH1cblxuICBpZiAoaXNEaXIgfHwgaXNTeW1saW5rKSB7XG4gICAgZGF0YS5zdG9yZSA9IHRydWU7XG4gIH1cblxuICBkYXRhLmRhdGUgPSB1dGlsLmRhdGVpZnkoZGF0YS5kYXRlKTtcblxuICByZXR1cm4gZGF0YTtcbn07XG5cbi8qKlxuICogQXBwZW5kcyBhbiBlbnRyeSBnaXZlbiBhbiBpbnB1dCBzb3VyY2UgKHRleHQgc3RyaW5nLCBidWZmZXIsIG9yIHN0cmVhbSkuXG4gKlxuICogQHBhcmFtICB7KEJ1ZmZlcnxTdHJlYW18U3RyaW5nKX0gc291cmNlIFRoZSBpbnB1dCBzb3VyY2UuXG4gKiBAcGFyYW0gIHtPYmplY3R9IGRhdGFcbiAqIEBwYXJhbSAge1N0cmluZ30gZGF0YS5uYW1lIFNldHMgdGhlIGVudHJ5IG5hbWUgaW5jbHVkaW5nIGludGVybmFsIHBhdGguXG4gKiBAcGFyYW0gIHtTdHJpbmd9IFtkYXRhLmNvbW1lbnRdIFNldHMgdGhlIGVudHJ5IGNvbW1lbnQuXG4gKiBAcGFyYW0gIHsoU3RyaW5nfERhdGUpfSBbZGF0YS5kYXRlPU5PVygpXSBTZXRzIHRoZSBlbnRyeSBkYXRlLlxuICogQHBhcmFtICB7TnVtYmVyfSBbZGF0YS5tb2RlPUQ6MDc1NS9GOjA2NDRdIFNldHMgdGhlIGVudHJ5IHBlcm1pc3Npb25zLlxuICogQHBhcmFtICB7Qm9vbGVhbn0gW2RhdGEuc3RvcmU9b3B0aW9ucy5zdG9yZV0gU2V0cyB0aGUgY29tcHJlc3Npb24gbWV0aG9kIHRvIFNUT1JFLlxuICogQHBhcmFtICB7U3RyaW5nfSBbZGF0YS50eXBlPWZpbGVdIFNldHMgdGhlIGVudHJ5IHR5cGUuIERlZmF1bHRzIHRvIGBkaXJlY3RvcnlgXG4gKiBpZiBuYW1lIGVuZHMgd2l0aCB0cmFpbGluZyBzbGFzaC5cbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB0aGlzXG4gKi9cblppcFN0cmVhbS5wcm90b3R5cGUuZW50cnkgPSBmdW5jdGlvbihzb3VyY2UsIGRhdGEsIGNhbGxiYWNrKSB7XG4gIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICBjYWxsYmFjayA9IHRoaXMuX2VtaXRFcnJvckNhbGxiYWNrLmJpbmQodGhpcyk7XG4gIH1cblxuICBkYXRhID0gdGhpcy5fbm9ybWFsaXplRmlsZURhdGEoZGF0YSk7XG5cbiAgaWYgKGRhdGEudHlwZSAhPT0gJ2ZpbGUnICYmIGRhdGEudHlwZSAhPT0gJ2RpcmVjdG9yeScgJiYgZGF0YS50eXBlICE9PSAnc3ltbGluaycpIHtcbiAgICBjYWxsYmFjayhuZXcgRXJyb3IoZGF0YS50eXBlICsgJyBlbnRyaWVzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkJykpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh0eXBlb2YgZGF0YS5uYW1lICE9PSAnc3RyaW5nJyB8fCBkYXRhLm5hbWUubGVuZ3RoID09PSAwKSB7XG4gICAgY2FsbGJhY2sobmV3IEVycm9yKCdlbnRyeSBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIHZhbHVlJykpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChkYXRhLnR5cGUgPT09ICdzeW1saW5rJyAmJiB0eXBlb2YgZGF0YS5saW5rbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICBjYWxsYmFjayhuZXcgRXJyb3IoJ2VudHJ5IGxpbmtuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIHZhbHVlIHdoZW4gdHlwZSBlcXVhbHMgc3ltbGluaycpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZW50cnkgPSBuZXcgWmlwQXJjaGl2ZUVudHJ5KGRhdGEubmFtZSk7XG4gIGVudHJ5LnNldFRpbWUoZGF0YS5kYXRlLCB0aGlzLm9wdGlvbnMuZm9yY2VMb2NhbFRpbWUpO1xuXG4gIGlmIChkYXRhLm5hbWVQcmVwZW5kU2xhc2gpIHtcbiAgICBlbnRyeS5zZXROYW1lKGRhdGEubmFtZSwgdHJ1ZSk7XG4gIH1cblxuICBpZiAoZGF0YS5zdG9yZSkge1xuICAgIGVudHJ5LnNldE1ldGhvZCgwKTtcbiAgfVxuXG4gIGlmIChkYXRhLmNvbW1lbnQubGVuZ3RoID4gMCkge1xuICAgIGVudHJ5LnNldENvbW1lbnQoZGF0YS5jb21tZW50KTtcbiAgfVxuXG4gIGlmIChkYXRhLnR5cGUgPT09ICdzeW1saW5rJyAmJiB0eXBlb2YgZGF0YS5tb2RlICE9PSAnbnVtYmVyJykge1xuICAgIGRhdGEubW9kZSA9IDQwOTYwOyAvLyAwMTIwMDAwXG4gIH1cblxuICBpZiAodHlwZW9mIGRhdGEubW9kZSA9PT0gJ251bWJlcicpIHtcbiAgICBpZiAoZGF0YS50eXBlID09PSAnc3ltbGluaycpIHtcbiAgICAgIGRhdGEubW9kZSB8PSA0MDk2MDtcbiAgICB9XG5cbiAgICBlbnRyeS5zZXRVbml4TW9kZShkYXRhLm1vZGUpO1xuICB9XG5cbiAgaWYgKGRhdGEudHlwZSA9PT0gJ3N5bWxpbmsnICYmIHR5cGVvZiBkYXRhLmxpbmtuYW1lID09PSAnc3RyaW5nJykge1xuICAgIHNvdXJjZSA9IEJ1ZmZlci5mcm9tKGRhdGEubGlua25hbWUpO1xuICB9XG5cbiAgcmV0dXJuIFppcEFyY2hpdmVPdXRwdXRTdHJlYW0ucHJvdG90eXBlLmVudHJ5LmNhbGwodGhpcywgZW50cnksIHNvdXJjZSwgY2FsbGJhY2spO1xufTtcblxuLyoqXG4gKiBGaW5hbGl6ZXMgdGhlIGluc3RhbmNlIGFuZCBwcmV2ZW50cyBmdXJ0aGVyIGFwcGVuZGluZyB0byB0aGUgYXJjaGl2ZVxuICogc3RydWN0dXJlIChxdWV1ZSB3aWxsIGNvbnRpbnVlIHRpbCBkcmFpbmVkKS5cbiAqXG4gKiBAcmV0dXJuIHZvaWRcbiAqL1xuWmlwU3RyZWFtLnByb3RvdHlwZS5maW5hbGl6ZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLmZpbmlzaCgpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjdXJyZW50IG51bWJlciBvZiBieXRlcyB3cml0dGVuIHRvIHRoaXMgc3RyZWFtLlxuICogQGZ1bmN0aW9uIFppcFN0cmVhbSNnZXRCeXRlc1dyaXR0ZW5cbiAqIEByZXR1cm5zIHtOdW1iZXJ9XG4gKi9cblxuLyoqXG4gKiBDb21wcmVzcyBDb21tb25zIFppcEFyY2hpdmVPdXRwdXRTdHJlYW1cbiAqIEBleHRlcm5hbCBaaXBBcmNoaXZlT3V0cHV0U3RyZWFtXG4gKiBAc2VlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXJjaGl2ZXJqcy9ub2RlLWNvbXByZXNzLWNvbW1vbnN9XG4gKi9cbiIsCiAgICAiLyoqXG4gKiBaSVAgRm9ybWF0IFBsdWdpblxuICpcbiAqIEBtb2R1bGUgcGx1Z2lucy96aXBcbiAqIEBsaWNlbnNlIFtNSVRde0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hcmNoaXZlcmpzL25vZGUtYXJjaGl2ZXIvYmxvYi9tYXN0ZXIvTElDRU5TRX1cbiAqIEBjb3B5cmlnaHQgKGMpIDIwMTItMjAxNCBDaHJpcyBUYWxraW5ndG9uLCBjb250cmlidXRvcnMuXG4gKi9cbnZhciBlbmdpbmUgPSByZXF1aXJlKCd6aXAtc3RyZWFtJyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJ2FyY2hpdmVyLXV0aWxzJyk7XG5cbi8qKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge1ppcE9wdGlvbnN9IFtvcHRpb25zXVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLmNvbW1lbnRdIFNldHMgdGhlIHppcCBhcmNoaXZlIGNvbW1lbnQuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLmZvcmNlTG9jYWxUaW1lPWZhbHNlXSBGb3JjZXMgdGhlIGFyY2hpdmUgdG8gY29udGFpbiBsb2NhbCBmaWxlIHRpbWVzIGluc3RlYWQgb2YgVVRDLlxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5mb3JjZVppcDY0PWZhbHNlXSBGb3JjZXMgdGhlIGFyY2hpdmUgdG8gY29udGFpbiBaSVA2NCBoZWFkZXJzLlxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5uYW1lUHJlcGVuZFNsYXNoPWZhbHNlXSBQcmVwZW5kcyBhIGZvcndhcmQgc2xhc2ggdG8gYXJjaGl2ZSBmaWxlIHBhdGhzLlxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5zdG9yZT1mYWxzZV0gU2V0cyB0aGUgY29tcHJlc3Npb24gbWV0aG9kIHRvIFNUT1JFLlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLnpsaWJdIFBhc3NlZCB0byBbemxpYl17QGxpbmsgaHR0cHM6Ly9ub2RlanMub3JnL2FwaS96bGliLmh0bWwjemxpYl9jbGFzc19vcHRpb25zfVxuICovXG52YXIgWmlwID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgWmlwKSkge1xuICAgIHJldHVybiBuZXcgWmlwKG9wdGlvbnMpO1xuICB9XG5cbiAgb3B0aW9ucyA9IHRoaXMub3B0aW9ucyA9IHV0aWwuZGVmYXVsdHMob3B0aW9ucywge1xuICAgIGNvbW1lbnQ6ICcnLFxuICAgIGZvcmNlVVRDOiBmYWxzZSxcbiAgICBuYW1lUHJlcGVuZFNsYXNoOiBmYWxzZSxcbiAgICBzdG9yZTogZmFsc2VcbiAgfSk7XG5cbiAgdGhpcy5zdXBwb3J0cyA9IHtcbiAgICBkaXJlY3Rvcnk6IHRydWUsXG4gICAgc3ltbGluazogdHJ1ZVxuICB9O1xuXG4gIHRoaXMuZW5naW5lID0gbmV3IGVuZ2luZShvcHRpb25zKTtcbn07XG5cbi8qKlxuICogQHBhcmFtICB7KEJ1ZmZlcnxTdHJlYW0pfSBzb3VyY2VcbiAqIEBwYXJhbSAge1ppcEVudHJ5RGF0YX0gZGF0YVxuICogQHBhcmFtICB7U3RyaW5nfSBkYXRhLm5hbWUgU2V0cyB0aGUgZW50cnkgbmFtZSBpbmNsdWRpbmcgaW50ZXJuYWwgcGF0aC5cbiAqIEBwYXJhbSAgeyhTdHJpbmd8RGF0ZSl9IFtkYXRhLmRhdGU9Tk9XKCldIFNldHMgdGhlIGVudHJ5IGRhdGUuXG4gKiBAcGFyYW0gIHtOdW1iZXJ9IFtkYXRhLm1vZGU9RDowNzU1L0Y6MDY0NF0gU2V0cyB0aGUgZW50cnkgcGVybWlzc2lvbnMuXG4gKiBAcGFyYW0gIHtTdHJpbmd9IFtkYXRhLnByZWZpeF0gU2V0cyBhIHBhdGggcHJlZml4IGZvciB0aGUgZW50cnkgbmFtZS4gVXNlZnVsXG4gKiB3aGVuIHdvcmtpbmcgd2l0aCBtZXRob2RzIGxpa2UgYGRpcmVjdG9yeWAgb3IgYGdsb2JgLlxuICogQHBhcmFtICB7ZnMuU3RhdHN9IFtkYXRhLnN0YXRzXSBTZXRzIHRoZSBmcyBzdGF0IGRhdGEgZm9yIHRoaXMgZW50cnkgYWxsb3dpbmdcbiAqIGZvciByZWR1Y3Rpb24gb2YgZnMgc3RhdCBjYWxscyB3aGVuIHN0YXQgZGF0YSBpcyBhbHJlYWR5IGtub3duLlxuICogQHBhcmFtICB7Qm9vbGVhbn0gW2RhdGEuc3RvcmU9WmlwT3B0aW9ucy5zdG9yZV0gU2V0cyB0aGUgY29tcHJlc3Npb24gbWV0aG9kIHRvIFNUT1JFLlxuICogQHBhcmFtICB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHZvaWRcbiAqL1xuWmlwLnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbihzb3VyY2UsIGRhdGEsIGNhbGxiYWNrKSB7XG4gIHRoaXMuZW5naW5lLmVudHJ5KHNvdXJjZSwgZGF0YSwgY2FsbGJhY2spO1xufTtcblxuLyoqXG4gKiBAcmV0dXJuIHZvaWRcbiAqL1xuWmlwLnByb3RvdHlwZS5maW5hbGl6ZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLmVuZ2luZS5maW5hbGl6ZSgpO1xufTtcblxuLyoqXG4gKiBAcmV0dXJuIHRoaXMuZW5naW5lXG4gKi9cblppcC5wcm90b3R5cGUub24gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZW5naW5lLm9uLmFwcGx5KHRoaXMuZW5naW5lLCBhcmd1bWVudHMpO1xufTtcblxuLyoqXG4gKiBAcmV0dXJuIHRoaXMuZW5naW5lXG4gKi9cblppcC5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5lbmdpbmUucGlwZS5hcHBseSh0aGlzLmVuZ2luZSwgYXJndW1lbnRzKTtcbn07XG5cbi8qKlxuICogQHJldHVybiB0aGlzLmVuZ2luZVxuICovXG5aaXAucHJvdG90eXBlLnVucGlwZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5lbmdpbmUudW5waXBlLmFwcGx5KHRoaXMuZW5naW5lLCBhcmd1bWVudHMpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBaaXA7XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gWmlwT3B0aW9uc1xuICogQGdsb2JhbFxuICogQHByb3BlcnR5IHtTdHJpbmd9IFtjb21tZW50XSBTZXRzIHRoZSB6aXAgYXJjaGl2ZSBjb21tZW50LlxuICogQHByb3BlcnR5IHtCb29sZWFufSBbZm9yY2VMb2NhbFRpbWU9ZmFsc2VdIEZvcmNlcyB0aGUgYXJjaGl2ZSB0byBjb250YWluIGxvY2FsIGZpbGUgdGltZXMgaW5zdGVhZCBvZiBVVEMuXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IFtmb3JjZVppcDY0PWZhbHNlXSBGb3JjZXMgdGhlIGFyY2hpdmUgdG8gY29udGFpbiBaSVA2NCBoZWFkZXJzLlxuICogQHBycHBlcnR5IHtCb29sZWFufSBbbmFtZVByZXBlbmRTbGFzaD1mYWxzZV0gUHJlcGVuZHMgYSBmb3J3YXJkIHNsYXNoIHRvIGFyY2hpdmUgZmlsZSBwYXRocy5cbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gW3N0b3JlPWZhbHNlXSBTZXRzIHRoZSBjb21wcmVzc2lvbiBtZXRob2QgdG8gU1RPUkUuXG4gKiBAcHJvcGVydHkge09iamVjdH0gW3psaWJdIFBhc3NlZCB0byBbemxpYl17QGxpbmsgaHR0cHM6Ly9ub2RlanMub3JnL2FwaS96bGliLmh0bWwjemxpYl9jbGFzc19vcHRpb25zfVxuICogdG8gY29udHJvbCBjb21wcmVzc2lvbi5cbiAqIEBwcm9wZXJ0eSB7Kn0gWypdIFNlZSBbemlwLXN0cmVhbV17QGxpbmsgaHR0cHM6Ly9hcmNoaXZlcmpzLmNvbS96aXAtc3RyZWFtL1ppcFN0cmVhbS5odG1sfSBkb2N1bWVudGF0aW9uIGZvciBjdXJyZW50IGxpc3Qgb2YgcHJvcGVydGllcy5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFppcEVudHJ5RGF0YVxuICogQGdsb2JhbFxuICogQHByb3BlcnR5IHtTdHJpbmd9IG5hbWUgU2V0cyB0aGUgZW50cnkgbmFtZSBpbmNsdWRpbmcgaW50ZXJuYWwgcGF0aC5cbiAqIEBwcm9wZXJ0eSB7KFN0cmluZ3xEYXRlKX0gW2RhdGU9Tk9XKCldIFNldHMgdGhlIGVudHJ5IGRhdGUuXG4gKiBAcHJvcGVydHkge051bWJlcn0gW21vZGU9RDowNzU1L0Y6MDY0NF0gU2V0cyB0aGUgZW50cnkgcGVybWlzc2lvbnMuXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IFtuYW1lUHJlcGVuZFNsYXNoPVppcE9wdGlvbnMubmFtZVByZXBlbmRTbGFzaF0gUHJlcGVuZHMgYSBmb3J3YXJkIHNsYXNoIHRvIGFyY2hpdmUgZmlsZSBwYXRocy5cbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBbcHJlZml4XSBTZXRzIGEgcGF0aCBwcmVmaXggZm9yIHRoZSBlbnRyeSBuYW1lLiBVc2VmdWxcbiAqIHdoZW4gd29ya2luZyB3aXRoIG1ldGhvZHMgbGlrZSBgZGlyZWN0b3J5YCBvciBgZ2xvYmAuXG4gKiBAcHJvcGVydHkge2ZzLlN0YXRzfSBbc3RhdHNdIFNldHMgdGhlIGZzIHN0YXQgZGF0YSBmb3IgdGhpcyBlbnRyeSBhbGxvd2luZ1xuICogZm9yIHJlZHVjdGlvbiBvZiBmcyBzdGF0IGNhbGxzIHdoZW4gc3RhdCBkYXRhIGlzIGFscmVhZHkga25vd24uXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IFtzdG9yZT1aaXBPcHRpb25zLnN0b3JlXSBTZXRzIHRoZSBjb21wcmVzc2lvbiBtZXRob2QgdG8gU1RPUkUuXG4gKi9cblxuLyoqXG4gKiBaaXBTdHJlYW0gTW9kdWxlXG4gKiBAZXh0ZXJuYWwgWmlwU3RyZWFtXG4gKiBAc2VlIHtAbGluayBodHRwczovL3d3dy5hcmNoaXZlcmpzLmNvbS96aXAtc3RyZWFtL1ppcFN0cmVhbS5odG1sfVxuICovXG4iLAogICAgIm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIHF1ZXVlTWljcm90YXNrID09PSAnZnVuY3Rpb24nID8gcXVldWVNaWNyb3Rhc2sgOiAoZm4pID0+IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZm4pXG4iLAogICAgIm1vZHVsZS5leHBvcnRzID0gKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgcHJvY2Vzcy5uZXh0VGljayA9PT0gJ2Z1bmN0aW9uJylcbiAgPyBwcm9jZXNzLm5leHRUaWNrLmJpbmQocHJvY2VzcylcbiAgOiByZXF1aXJlKCcuL3F1ZXVlLW1pY3JvdGFzaycpXG4iLAogICAgIm1vZHVsZS5leHBvcnRzID0gY2xhc3MgRml4ZWRGSUZPIHtcbiAgY29uc3RydWN0b3IgKGh3bSkge1xuICAgIGlmICghKGh3bSA+IDApIHx8ICgoaHdtIC0gMSkgJiBod20pICE9PSAwKSB0aHJvdyBuZXcgRXJyb3IoJ01heCBzaXplIGZvciBhIEZpeGVkRklGTyBzaG91bGQgYmUgYSBwb3dlciBvZiB0d28nKVxuICAgIHRoaXMuYnVmZmVyID0gbmV3IEFycmF5KGh3bSlcbiAgICB0aGlzLm1hc2sgPSBod20gLSAxXG4gICAgdGhpcy50b3AgPSAwXG4gICAgdGhpcy5idG0gPSAwXG4gICAgdGhpcy5uZXh0ID0gbnVsbFxuICB9XG5cbiAgY2xlYXIgKCkge1xuICAgIHRoaXMudG9wID0gdGhpcy5idG0gPSAwXG4gICAgdGhpcy5uZXh0ID0gbnVsbFxuICAgIHRoaXMuYnVmZmVyLmZpbGwodW5kZWZpbmVkKVxuICB9XG5cbiAgcHVzaCAoZGF0YSkge1xuICAgIGlmICh0aGlzLmJ1ZmZlclt0aGlzLnRvcF0gIT09IHVuZGVmaW5lZCkgcmV0dXJuIGZhbHNlXG4gICAgdGhpcy5idWZmZXJbdGhpcy50b3BdID0gZGF0YVxuICAgIHRoaXMudG9wID0gKHRoaXMudG9wICsgMSkgJiB0aGlzLm1hc2tcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgc2hpZnQgKCkge1xuICAgIGNvbnN0IGxhc3QgPSB0aGlzLmJ1ZmZlclt0aGlzLmJ0bV1cbiAgICBpZiAobGFzdCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkXG4gICAgdGhpcy5idWZmZXJbdGhpcy5idG1dID0gdW5kZWZpbmVkXG4gICAgdGhpcy5idG0gPSAodGhpcy5idG0gKyAxKSAmIHRoaXMubWFza1xuICAgIHJldHVybiBsYXN0XG4gIH1cblxuICBwZWVrICgpIHtcbiAgICByZXR1cm4gdGhpcy5idWZmZXJbdGhpcy5idG1dXG4gIH1cblxuICBpc0VtcHR5ICgpIHtcbiAgICByZXR1cm4gdGhpcy5idWZmZXJbdGhpcy5idG1dID09PSB1bmRlZmluZWRcbiAgfVxufVxuIiwKICAgICJjb25zdCBGaXhlZEZJRk8gPSByZXF1aXJlKCcuL2ZpeGVkLXNpemUnKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIEZhc3RGSUZPIHtcbiAgY29uc3RydWN0b3IgKGh3bSkge1xuICAgIHRoaXMuaHdtID0gaHdtIHx8IDE2XG4gICAgdGhpcy5oZWFkID0gbmV3IEZpeGVkRklGTyh0aGlzLmh3bSlcbiAgICB0aGlzLnRhaWwgPSB0aGlzLmhlYWRcbiAgICB0aGlzLmxlbmd0aCA9IDBcbiAgfVxuXG4gIGNsZWFyICgpIHtcbiAgICB0aGlzLmhlYWQgPSB0aGlzLnRhaWxcbiAgICB0aGlzLmhlYWQuY2xlYXIoKVxuICAgIHRoaXMubGVuZ3RoID0gMFxuICB9XG5cbiAgcHVzaCAodmFsKSB7XG4gICAgdGhpcy5sZW5ndGgrK1xuICAgIGlmICghdGhpcy5oZWFkLnB1c2godmFsKSkge1xuICAgICAgY29uc3QgcHJldiA9IHRoaXMuaGVhZFxuICAgICAgdGhpcy5oZWFkID0gcHJldi5uZXh0ID0gbmV3IEZpeGVkRklGTygyICogdGhpcy5oZWFkLmJ1ZmZlci5sZW5ndGgpXG4gICAgICB0aGlzLmhlYWQucHVzaCh2YWwpXG4gICAgfVxuICB9XG5cbiAgc2hpZnQgKCkge1xuICAgIGlmICh0aGlzLmxlbmd0aCAhPT0gMCkgdGhpcy5sZW5ndGgtLVxuICAgIGNvbnN0IHZhbCA9IHRoaXMudGFpbC5zaGlmdCgpXG4gICAgaWYgKHZhbCA9PT0gdW5kZWZpbmVkICYmIHRoaXMudGFpbC5uZXh0KSB7XG4gICAgICBjb25zdCBuZXh0ID0gdGhpcy50YWlsLm5leHRcbiAgICAgIHRoaXMudGFpbC5uZXh0ID0gbnVsbFxuICAgICAgdGhpcy50YWlsID0gbmV4dFxuICAgICAgcmV0dXJuIHRoaXMudGFpbC5zaGlmdCgpXG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbFxuICB9XG5cbiAgcGVlayAoKSB7XG4gICAgY29uc3QgdmFsID0gdGhpcy50YWlsLnBlZWsoKVxuICAgIGlmICh2YWwgPT09IHVuZGVmaW5lZCAmJiB0aGlzLnRhaWwubmV4dCkgcmV0dXJuIHRoaXMudGFpbC5uZXh0LnBlZWsoKVxuICAgIHJldHVybiB2YWxcbiAgfVxuXG4gIGlzRW1wdHkgKCkge1xuICAgIHJldHVybiB0aGlzLmxlbmd0aCA9PT0gMFxuICB9XG59XG4iLAogICAgIm1vZHVsZS5leHBvcnRzID0gY2xhc3MgUGFzc1Rocm91Z2hEZWNvZGVyIHtcbiAgY29uc3RydWN0b3IgKGVuY29kaW5nKSB7XG4gICAgdGhpcy5lbmNvZGluZyA9IGVuY29kaW5nXG4gIH1cblxuICBnZXQgcmVtYWluaW5nICgpIHtcbiAgICByZXR1cm4gMFxuICB9XG5cbiAgZGVjb2RlICh0YWlsKSB7XG4gICAgcmV0dXJuIHRhaWwudG9TdHJpbmcodGhpcy5lbmNvZGluZylcbiAgfVxuXG4gIGZsdXNoICgpIHtcbiAgICByZXR1cm4gJydcbiAgfVxufVxuIiwKICAgICIvKipcbiAqIGh0dHBzOi8vZW5jb2Rpbmcuc3BlYy53aGF0d2cub3JnLyN1dGYtOC1kZWNvZGVyXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gY2xhc3MgVVRGOERlY29kZXIge1xuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgdGhpcy5jb2RlUG9pbnQgPSAwXG4gICAgdGhpcy5ieXRlc1NlZW4gPSAwXG4gICAgdGhpcy5ieXRlc05lZWRlZCA9IDBcbiAgICB0aGlzLmxvd2VyQm91bmRhcnkgPSAweDgwXG4gICAgdGhpcy51cHBlckJvdW5kYXJ5ID0gMHhiZlxuICB9XG5cbiAgZ2V0IHJlbWFpbmluZyAoKSB7XG4gICAgcmV0dXJuIHRoaXMuYnl0ZXNTZWVuXG4gIH1cblxuICBkZWNvZGUgKGRhdGEpIHtcbiAgICAvLyBJZiB3ZSBoYXZlIGEgZmFzdCBwYXRoLCBqdXN0IHNuaWZmIGlmIHRoZSBsYXN0IHBhcnQgaXMgYSBib3VuZGFyeVxuICAgIGlmICh0aGlzLmJ5dGVzTmVlZGVkID09PSAwKSB7XG4gICAgICBsZXQgaXNCb3VuZGFyeSA9IHRydWVcblxuICAgICAgZm9yIChsZXQgaSA9IE1hdGgubWF4KDAsIGRhdGEuYnl0ZUxlbmd0aCAtIDQpLCBuID0gZGF0YS5ieXRlTGVuZ3RoOyBpIDwgbiAmJiBpc0JvdW5kYXJ5OyBpKyspIHtcbiAgICAgICAgaXNCb3VuZGFyeSA9IGRhdGFbaV0gPD0gMHg3ZlxuICAgICAgfVxuXG4gICAgICBpZiAoaXNCb3VuZGFyeSkgcmV0dXJuIGRhdGEudG9TdHJpbmcoKVxuICAgIH1cblxuICAgIGxldCByZXN1bHQgPSAnJ1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIG4gPSBkYXRhLmJ5dGVMZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgIGNvbnN0IGJ5dGUgPSBkYXRhW2ldXG5cbiAgICAgIGlmICh0aGlzLmJ5dGVzTmVlZGVkID09PSAwKSB7XG4gICAgICAgIGlmIChieXRlIDw9IDB4N2YpIHtcbiAgICAgICAgICByZXN1bHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShieXRlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuYnl0ZXNTZWVuID0gMVxuXG4gICAgICAgICAgaWYgKGJ5dGUgPj0gMHhjMiAmJiBieXRlIDw9IDB4ZGYpIHtcbiAgICAgICAgICAgIHRoaXMuYnl0ZXNOZWVkZWQgPSAyXG4gICAgICAgICAgICB0aGlzLmNvZGVQb2ludCA9IGJ5dGUgJiAweDFmXG4gICAgICAgICAgfSBlbHNlIGlmIChieXRlID49IDB4ZTAgJiYgYnl0ZSA8PSAweGVmKSB7XG4gICAgICAgICAgICBpZiAoYnl0ZSA9PT0gMHhlMCkgdGhpcy5sb3dlckJvdW5kYXJ5ID0gMHhhMFxuICAgICAgICAgICAgZWxzZSBpZiAoYnl0ZSA9PT0gMHhlZCkgdGhpcy51cHBlckJvdW5kYXJ5ID0gMHg5ZlxuICAgICAgICAgICAgdGhpcy5ieXRlc05lZWRlZCA9IDNcbiAgICAgICAgICAgIHRoaXMuY29kZVBvaW50ID0gYnl0ZSAmIDB4ZlxuICAgICAgICAgIH0gZWxzZSBpZiAoYnl0ZSA+PSAweGYwICYmIGJ5dGUgPD0gMHhmNCkge1xuICAgICAgICAgICAgaWYgKGJ5dGUgPT09IDB4ZjApIHRoaXMubG93ZXJCb3VuZGFyeSA9IDB4OTBcbiAgICAgICAgICAgIGlmIChieXRlID09PSAweGY0KSB0aGlzLnVwcGVyQm91bmRhcnkgPSAweDhmXG4gICAgICAgICAgICB0aGlzLmJ5dGVzTmVlZGVkID0gNFxuICAgICAgICAgICAgdGhpcy5jb2RlUG9pbnQgPSBieXRlICYgMHg3XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSAnXFx1ZmZmZCdcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBpZiAoYnl0ZSA8IHRoaXMubG93ZXJCb3VuZGFyeSB8fCBieXRlID4gdGhpcy51cHBlckJvdW5kYXJ5KSB7XG4gICAgICAgIHRoaXMuY29kZVBvaW50ID0gMFxuICAgICAgICB0aGlzLmJ5dGVzTmVlZGVkID0gMFxuICAgICAgICB0aGlzLmJ5dGVzU2VlbiA9IDBcbiAgICAgICAgdGhpcy5sb3dlckJvdW5kYXJ5ID0gMHg4MFxuICAgICAgICB0aGlzLnVwcGVyQm91bmRhcnkgPSAweGJmXG5cbiAgICAgICAgcmVzdWx0ICs9ICdcXHVmZmZkJ1xuXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIHRoaXMubG93ZXJCb3VuZGFyeSA9IDB4ODBcbiAgICAgIHRoaXMudXBwZXJCb3VuZGFyeSA9IDB4YmZcblxuICAgICAgdGhpcy5jb2RlUG9pbnQgPSAodGhpcy5jb2RlUG9pbnQgPDwgNikgfCAoYnl0ZSAmIDB4M2YpXG4gICAgICB0aGlzLmJ5dGVzU2VlbisrXG5cbiAgICAgIGlmICh0aGlzLmJ5dGVzU2VlbiAhPT0gdGhpcy5ieXRlc05lZWRlZCkgY29udGludWVcblxuICAgICAgcmVzdWx0ICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KHRoaXMuY29kZVBvaW50KVxuXG4gICAgICB0aGlzLmNvZGVQb2ludCA9IDBcbiAgICAgIHRoaXMuYnl0ZXNOZWVkZWQgPSAwXG4gICAgICB0aGlzLmJ5dGVzU2VlbiA9IDBcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICBmbHVzaCAoKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5ieXRlc05lZWRlZCA+IDAgPyAnXFx1ZmZmZCcgOiAnJ1xuXG4gICAgdGhpcy5jb2RlUG9pbnQgPSAwXG4gICAgdGhpcy5ieXRlc05lZWRlZCA9IDBcbiAgICB0aGlzLmJ5dGVzU2VlbiA9IDBcbiAgICB0aGlzLmxvd2VyQm91bmRhcnkgPSAweDgwXG4gICAgdGhpcy51cHBlckJvdW5kYXJ5ID0gMHhiZlxuXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG59XG4iLAogICAgImNvbnN0IFBhc3NUaHJvdWdoRGVjb2RlciA9IHJlcXVpcmUoJy4vbGliL3Bhc3MtdGhyb3VnaC1kZWNvZGVyJylcbmNvbnN0IFVURjhEZWNvZGVyID0gcmVxdWlyZSgnLi9saWIvdXRmOC1kZWNvZGVyJylcblxubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBUZXh0RGVjb2RlciB7XG4gIGNvbnN0cnVjdG9yIChlbmNvZGluZyA9ICd1dGY4Jykge1xuICAgIHRoaXMuZW5jb2RpbmcgPSBub3JtYWxpemVFbmNvZGluZyhlbmNvZGluZylcblxuICAgIHN3aXRjaCAodGhpcy5lbmNvZGluZykge1xuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICAgIHRoaXMuZGVjb2RlciA9IG5ldyBVVEY4RGVjb2RlcigpXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgZW5jb2Rpbmc6ICcgKyB0aGlzLmVuY29kaW5nKVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5kZWNvZGVyID0gbmV3IFBhc3NUaHJvdWdoRGVjb2Rlcih0aGlzLmVuY29kaW5nKVxuICAgIH1cbiAgfVxuXG4gIGdldCByZW1haW5pbmcgKCkge1xuICAgIHJldHVybiB0aGlzLmRlY29kZXIucmVtYWluaW5nXG4gIH1cblxuICBwdXNoIChkYXRhKSB7XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykgcmV0dXJuIGRhdGFcbiAgICByZXR1cm4gdGhpcy5kZWNvZGVyLmRlY29kZShkYXRhKVxuICB9XG5cbiAgLy8gRm9yIE5vZGUuanMgY29tcGF0aWJpbGl0eVxuICB3cml0ZSAoZGF0YSkge1xuICAgIHJldHVybiB0aGlzLnB1c2goZGF0YSlcbiAgfVxuXG4gIGVuZCAoZGF0YSkge1xuICAgIGxldCByZXN1bHQgPSAnJ1xuICAgIGlmIChkYXRhKSByZXN1bHQgPSB0aGlzLnB1c2goZGF0YSlcbiAgICByZXN1bHQgKz0gdGhpcy5kZWNvZGVyLmZsdXNoKClcbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplRW5jb2RpbmcgKGVuY29kaW5nKSB7XG4gIGVuY29kaW5nID0gZW5jb2RpbmcudG9Mb3dlckNhc2UoKVxuXG4gIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICBjYXNlICd1dGY4JzpcbiAgICBjYXNlICd1dGYtOCc6XG4gICAgICByZXR1cm4gJ3V0ZjgnXG4gICAgY2FzZSAndWNzMic6XG4gICAgY2FzZSAndWNzLTInOlxuICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgIHJldHVybiAndXRmMTZsZSdcbiAgICBjYXNlICdsYXRpbjEnOlxuICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICByZXR1cm4gJ2xhdGluMSdcbiAgICBjYXNlICdiYXNlNjQnOlxuICAgIGNhc2UgJ2FzY2lpJzpcbiAgICBjYXNlICdoZXgnOlxuICAgICAgcmV0dXJuIGVuY29kaW5nXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICB9XG59O1xuIiwKICAgICJjb25zdCB7IEV2ZW50RW1pdHRlciB9ID0gcmVxdWlyZSgnZXZlbnRzJylcbmNvbnN0IFNUUkVBTV9ERVNUUk9ZRUQgPSBuZXcgRXJyb3IoJ1N0cmVhbSB3YXMgZGVzdHJveWVkJylcbmNvbnN0IFBSRU1BVFVSRV9DTE9TRSA9IG5ldyBFcnJvcignUHJlbWF0dXJlIGNsb3NlJylcblxuY29uc3QgcXVldWVUaWNrID0gcmVxdWlyZSgncXVldWUtdGljaycpXG5jb25zdCBGSUZPID0gcmVxdWlyZSgnZmFzdC1maWZvJylcbmNvbnN0IFRleHREZWNvZGVyID0gcmVxdWlyZSgndGV4dC1kZWNvZGVyJylcblxuLyogZXNsaW50LWRpc2FibGUgbm8tbXVsdGktc3BhY2VzICovXG5cbi8vIDI5IGJpdHMgdXNlZCB0b3RhbCAoNCBmcm9tIHNoYXJlZCwgMTQgZnJvbSByZWFkLCBhbmQgMTEgZnJvbSB3cml0ZSlcbmNvbnN0IE1BWCA9ICgoMSA8PCAyOSkgLSAxKVxuXG4vLyBTaGFyZWQgc3RhdGVcbmNvbnN0IE9QRU5JTkcgICAgICAgPSAwYjAwMDFcbmNvbnN0IFBSRURFU1RST1lJTkcgPSAwYjAwMTBcbmNvbnN0IERFU1RST1lJTkcgICAgPSAwYjAxMDBcbmNvbnN0IERFU1RST1lFRCAgICAgPSAwYjEwMDBcblxuY29uc3QgTk9UX09QRU5JTkcgPSBNQVggXiBPUEVOSU5HXG5jb25zdCBOT1RfUFJFREVTVFJPWUlORyA9IE1BWCBeIFBSRURFU1RST1lJTkdcblxuLy8gUmVhZCBzdGF0ZSAoNCBiaXQgb2Zmc2V0IGZyb20gc2hhcmVkIHN0YXRlKVxuY29uc3QgUkVBRF9BQ1RJVkUgICAgICAgICAgID0gMGIwMDAwMDAwMDAwMDAwMSA8PCA0XG5jb25zdCBSRUFEX1VQREFUSU5HICAgICAgICAgPSAwYjAwMDAwMDAwMDAwMDEwIDw8IDRcbmNvbnN0IFJFQURfUFJJTUFSWSAgICAgICAgICA9IDBiMDAwMDAwMDAwMDAxMDAgPDwgNFxuY29uc3QgUkVBRF9RVUVVRUQgICAgICAgICAgID0gMGIwMDAwMDAwMDAwMTAwMCA8PCA0XG5jb25zdCBSRUFEX1JFU1VNRUQgICAgICAgICAgPSAwYjAwMDAwMDAwMDEwMDAwIDw8IDRcbmNvbnN0IFJFQURfUElQRV9EUkFJTkVEICAgICA9IDBiMDAwMDAwMDAxMDAwMDAgPDwgNFxuY29uc3QgUkVBRF9FTkRJTkcgICAgICAgICAgID0gMGIwMDAwMDAwMTAwMDAwMCA8PCA0XG5jb25zdCBSRUFEX0VNSVRfREFUQSAgICAgICAgPSAwYjAwMDAwMDEwMDAwMDAwIDw8IDRcbmNvbnN0IFJFQURfRU1JVF9SRUFEQUJMRSAgICA9IDBiMDAwMDAxMDAwMDAwMDAgPDwgNFxuY29uc3QgUkVBRF9FTUlUVEVEX1JFQURBQkxFID0gMGIwMDAwMTAwMDAwMDAwMCA8PCA0XG5jb25zdCBSRUFEX0RPTkUgICAgICAgICAgICAgPSAwYjAwMDEwMDAwMDAwMDAwIDw8IDRcbmNvbnN0IFJFQURfTkVYVF9USUNLICAgICAgICA9IDBiMDAxMDAwMDAwMDAwMDAgPDwgNFxuY29uc3QgUkVBRF9ORUVEU19QVVNIICAgICAgID0gMGIwMTAwMDAwMDAwMDAwMCA8PCA0XG5jb25zdCBSRUFEX1JFQURfQUhFQUQgICAgICAgPSAwYjEwMDAwMDAwMDAwMDAwIDw8IDRcblxuLy8gQ29tYmluZWQgcmVhZCBzdGF0ZVxuY29uc3QgUkVBRF9GTE9XSU5HID0gUkVBRF9SRVNVTUVEIHwgUkVBRF9QSVBFX0RSQUlORURcbmNvbnN0IFJFQURfQUNUSVZFX0FORF9ORUVEU19QVVNIID0gUkVBRF9BQ1RJVkUgfCBSRUFEX05FRURTX1BVU0hcbmNvbnN0IFJFQURfUFJJTUFSWV9BTkRfQUNUSVZFID0gUkVBRF9QUklNQVJZIHwgUkVBRF9BQ1RJVkVcbmNvbnN0IFJFQURfRU1JVF9SRUFEQUJMRV9BTkRfUVVFVUVEID0gUkVBRF9FTUlUX1JFQURBQkxFIHwgUkVBRF9RVUVVRURcbmNvbnN0IFJFQURfUkVTVU1FRF9SRUFEX0FIRUFEID0gUkVBRF9SRVNVTUVEIHwgUkVBRF9SRUFEX0FIRUFEXG5cbmNvbnN0IFJFQURfTk9UX0FDVElWRSAgICAgICAgICAgICA9IE1BWCBeIFJFQURfQUNUSVZFXG5jb25zdCBSRUFEX05PTl9QUklNQVJZICAgICAgICAgICAgPSBNQVggXiBSRUFEX1BSSU1BUllcbmNvbnN0IFJFQURfTk9OX1BSSU1BUllfQU5EX1BVU0hFRCA9IE1BWCBeIChSRUFEX1BSSU1BUlkgfCBSRUFEX05FRURTX1BVU0gpXG5jb25zdCBSRUFEX1BVU0hFRCAgICAgICAgICAgICAgICAgPSBNQVggXiBSRUFEX05FRURTX1BVU0hcbmNvbnN0IFJFQURfUEFVU0VEICAgICAgICAgICAgICAgICA9IE1BWCBeIFJFQURfUkVTVU1FRFxuY29uc3QgUkVBRF9OT1RfUVVFVUVEICAgICAgICAgICAgID0gTUFYIF4gKFJFQURfUVVFVUVEIHwgUkVBRF9FTUlUVEVEX1JFQURBQkxFKVxuY29uc3QgUkVBRF9OT1RfRU5ESU5HICAgICAgICAgICAgID0gTUFYIF4gUkVBRF9FTkRJTkdcbmNvbnN0IFJFQURfUElQRV9OT1RfRFJBSU5FRCAgICAgICA9IE1BWCBeIFJFQURfRkxPV0lOR1xuY29uc3QgUkVBRF9OT1RfTkVYVF9USUNLICAgICAgICAgID0gTUFYIF4gUkVBRF9ORVhUX1RJQ0tcbmNvbnN0IFJFQURfTk9UX1VQREFUSU5HICAgICAgICAgICA9IE1BWCBeIFJFQURfVVBEQVRJTkdcbmNvbnN0IFJFQURfTk9fUkVBRF9BSEVBRCAgICAgICAgICA9IE1BWCBeIFJFQURfUkVBRF9BSEVBRFxuY29uc3QgUkVBRF9QQVVTRURfTk9fUkVBRF9BSEVBRCAgID0gTUFYIF4gUkVBRF9SRVNVTUVEX1JFQURfQUhFQURcblxuLy8gV3JpdGUgc3RhdGUgKDE4IGJpdCBvZmZzZXQsIDQgYml0IG9mZnNldCBmcm9tIHNoYXJlZCBzdGF0ZSBhbmQgMTQgZnJvbSByZWFkIHN0YXRlKVxuY29uc3QgV1JJVEVfQUNUSVZFICAgICA9IDBiMDAwMDAwMDAwMDEgPDwgMThcbmNvbnN0IFdSSVRFX1VQREFUSU5HICAgPSAwYjAwMDAwMDAwMDEwIDw8IDE4XG5jb25zdCBXUklURV9QUklNQVJZICAgID0gMGIwMDAwMDAwMDEwMCA8PCAxOFxuY29uc3QgV1JJVEVfUVVFVUVEICAgICA9IDBiMDAwMDAwMDEwMDAgPDwgMThcbmNvbnN0IFdSSVRFX1VORFJBSU5FRCAgPSAwYjAwMDAwMDEwMDAwIDw8IDE4XG5jb25zdCBXUklURV9ET05FICAgICAgID0gMGIwMDAwMDEwMDAwMCA8PCAxOFxuY29uc3QgV1JJVEVfRU1JVF9EUkFJTiA9IDBiMDAwMDEwMDAwMDAgPDwgMThcbmNvbnN0IFdSSVRFX05FWFRfVElDSyAgPSAwYjAwMDEwMDAwMDAwIDw8IDE4XG5jb25zdCBXUklURV9XUklUSU5HICAgID0gMGIwMDEwMDAwMDAwMCA8PCAxOFxuY29uc3QgV1JJVEVfRklOSVNISU5HICA9IDBiMDEwMDAwMDAwMDAgPDwgMThcbmNvbnN0IFdSSVRFX0NPUktFRCAgICAgPSAwYjEwMDAwMDAwMDAwIDw8IDE4XG5cbmNvbnN0IFdSSVRFX05PVF9BQ1RJVkUgICAgPSBNQVggXiAoV1JJVEVfQUNUSVZFIHwgV1JJVEVfV1JJVElORylcbmNvbnN0IFdSSVRFX05PTl9QUklNQVJZICAgPSBNQVggXiBXUklURV9QUklNQVJZXG5jb25zdCBXUklURV9OT1RfRklOSVNISU5HID0gTUFYIF4gV1JJVEVfRklOSVNISU5HXG5jb25zdCBXUklURV9EUkFJTkVEICAgICAgID0gTUFYIF4gV1JJVEVfVU5EUkFJTkVEXG5jb25zdCBXUklURV9OT1RfUVVFVUVEICAgID0gTUFYIF4gV1JJVEVfUVVFVUVEXG5jb25zdCBXUklURV9OT1RfTkVYVF9USUNLID0gTUFYIF4gV1JJVEVfTkVYVF9USUNLXG5jb25zdCBXUklURV9OT1RfVVBEQVRJTkcgID0gTUFYIF4gV1JJVEVfVVBEQVRJTkdcbmNvbnN0IFdSSVRFX05PVF9DT1JLRUQgICAgPSBNQVggXiBXUklURV9DT1JLRURcblxuLy8gQ29tYmluZWQgc2hhcmVkIHN0YXRlXG5jb25zdCBBQ1RJVkUgPSBSRUFEX0FDVElWRSB8IFdSSVRFX0FDVElWRVxuY29uc3QgTk9UX0FDVElWRSA9IE1BWCBeIEFDVElWRVxuY29uc3QgRE9ORSA9IFJFQURfRE9ORSB8IFdSSVRFX0RPTkVcbmNvbnN0IERFU1RST1lfU1RBVFVTID0gREVTVFJPWUlORyB8IERFU1RST1lFRCB8IFBSRURFU1RST1lJTkdcbmNvbnN0IE9QRU5fU1RBVFVTID0gREVTVFJPWV9TVEFUVVMgfCBPUEVOSU5HXG5jb25zdCBBVVRPX0RFU1RST1kgPSBERVNUUk9ZX1NUQVRVUyB8IERPTkVcbmNvbnN0IE5PTl9QUklNQVJZID0gV1JJVEVfTk9OX1BSSU1BUlkgJiBSRUFEX05PTl9QUklNQVJZXG5jb25zdCBBQ1RJVkVfT1JfVElDS0lORyA9IFdSSVRFX05FWFRfVElDSyB8IFJFQURfTkVYVF9USUNLXG5jb25zdCBUSUNLSU5HID0gQUNUSVZFX09SX1RJQ0tJTkcgJiBOT1RfQUNUSVZFXG5jb25zdCBJU19PUEVOSU5HID0gT1BFTl9TVEFUVVMgfCBUSUNLSU5HXG5cbi8vIENvbWJpbmVkIHNoYXJlZCBzdGF0ZSBhbmQgcmVhZCBzdGF0ZVxuY29uc3QgUkVBRF9QUklNQVJZX1NUQVRVUyA9IE9QRU5fU1RBVFVTIHwgUkVBRF9FTkRJTkcgfCBSRUFEX0RPTkVcbmNvbnN0IFJFQURfU1RBVFVTID0gT1BFTl9TVEFUVVMgfCBSRUFEX0RPTkUgfCBSRUFEX1FVRVVFRFxuY29uc3QgUkVBRF9FTkRJTkdfU1RBVFVTID0gT1BFTl9TVEFUVVMgfCBSRUFEX0VORElORyB8IFJFQURfUVVFVUVEXG5jb25zdCBSRUFEX1JFQURBQkxFX1NUQVRVUyA9IE9QRU5fU1RBVFVTIHwgUkVBRF9FTUlUX1JFQURBQkxFIHwgUkVBRF9RVUVVRUQgfCBSRUFEX0VNSVRURURfUkVBREFCTEVcbmNvbnN0IFNIT1VMRF9OT1RfUkVBRCA9IE9QRU5fU1RBVFVTIHwgUkVBRF9BQ1RJVkUgfCBSRUFEX0VORElORyB8IFJFQURfRE9ORSB8IFJFQURfTkVFRFNfUFVTSCB8IFJFQURfUkVBRF9BSEVBRFxuY29uc3QgUkVBRF9CQUNLUFJFU1NVUkVfU1RBVFVTID0gREVTVFJPWV9TVEFUVVMgfCBSRUFEX0VORElORyB8IFJFQURfRE9ORVxuY29uc3QgUkVBRF9VUERBVEVfU1lOQ19TVEFUVVMgPSBSRUFEX1VQREFUSU5HIHwgT1BFTl9TVEFUVVMgfCBSRUFEX05FWFRfVElDSyB8IFJFQURfUFJJTUFSWVxuXG4vLyBDb21iaW5lZCB3cml0ZSBzdGF0ZVxuY29uc3QgV1JJVEVfUFJJTUFSWV9TVEFUVVMgPSBPUEVOX1NUQVRVUyB8IFdSSVRFX0ZJTklTSElORyB8IFdSSVRFX0RPTkVcbmNvbnN0IFdSSVRFX1FVRVVFRF9BTkRfVU5EUkFJTkVEID0gV1JJVEVfUVVFVUVEIHwgV1JJVEVfVU5EUkFJTkVEXG5jb25zdCBXUklURV9RVUVVRURfQU5EX0FDVElWRSA9IFdSSVRFX1FVRVVFRCB8IFdSSVRFX0FDVElWRVxuY29uc3QgV1JJVEVfRFJBSU5fU1RBVFVTID0gV1JJVEVfUVVFVUVEIHwgV1JJVEVfVU5EUkFJTkVEIHwgT1BFTl9TVEFUVVMgfCBXUklURV9BQ1RJVkVcbmNvbnN0IFdSSVRFX1NUQVRVUyA9IE9QRU5fU1RBVFVTIHwgV1JJVEVfQUNUSVZFIHwgV1JJVEVfUVVFVUVEIHwgV1JJVEVfQ09SS0VEXG5jb25zdCBXUklURV9QUklNQVJZX0FORF9BQ1RJVkUgPSBXUklURV9QUklNQVJZIHwgV1JJVEVfQUNUSVZFXG5jb25zdCBXUklURV9BQ1RJVkVfQU5EX1dSSVRJTkcgPSBXUklURV9BQ1RJVkUgfCBXUklURV9XUklUSU5HXG5jb25zdCBXUklURV9GSU5JU0hJTkdfU1RBVFVTID0gT1BFTl9TVEFUVVMgfCBXUklURV9GSU5JU0hJTkcgfCBXUklURV9RVUVVRURfQU5EX0FDVElWRSB8IFdSSVRFX0RPTkVcbmNvbnN0IFdSSVRFX0JBQ0tQUkVTU1VSRV9TVEFUVVMgPSBXUklURV9VTkRSQUlORUQgfCBERVNUUk9ZX1NUQVRVUyB8IFdSSVRFX0ZJTklTSElORyB8IFdSSVRFX0RPTkVcbmNvbnN0IFdSSVRFX1VQREFURV9TWU5DX1NUQVRVUyA9IFdSSVRFX1VQREFUSU5HIHwgT1BFTl9TVEFUVVMgfCBXUklURV9ORVhUX1RJQ0sgfCBXUklURV9QUklNQVJZXG5cbmNvbnN0IGFzeW5jSXRlcmF0b3IgPSBTeW1ib2wuYXN5bmNJdGVyYXRvciB8fCBTeW1ib2woJ2FzeW5jSXRlcmF0b3InKVxuXG5jbGFzcyBXcml0YWJsZVN0YXRlIHtcbiAgY29uc3RydWN0b3IgKHN0cmVhbSwgeyBoaWdoV2F0ZXJNYXJrID0gMTYzODQsIG1hcCA9IG51bGwsIG1hcFdyaXRhYmxlLCBieXRlTGVuZ3RoLCBieXRlTGVuZ3RoV3JpdGFibGUgfSA9IHt9KSB7XG4gICAgdGhpcy5zdHJlYW0gPSBzdHJlYW1cbiAgICB0aGlzLnF1ZXVlID0gbmV3IEZJRk8oKVxuICAgIHRoaXMuaGlnaFdhdGVyTWFyayA9IGhpZ2hXYXRlck1hcmtcbiAgICB0aGlzLmJ1ZmZlcmVkID0gMFxuICAgIHRoaXMuZXJyb3IgPSBudWxsXG4gICAgdGhpcy5waXBlbGluZSA9IG51bGxcbiAgICB0aGlzLmRyYWlucyA9IG51bGwgLy8gaWYgd2UgYWRkIG1vcmUgc2VsZG9tbHkgdXNlZCBoZWxwZXJzIHdlIG1pZ2h0IHRoZW0gaW50byBhIHN1Ym9iamVjdCBzbyBpdHMgYSBzaW5nbGUgcHRyXG4gICAgdGhpcy5ieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aFdyaXRhYmxlIHx8IGJ5dGVMZW5ndGggfHwgZGVmYXVsdEJ5dGVMZW5ndGhcbiAgICB0aGlzLm1hcCA9IG1hcFdyaXRhYmxlIHx8IG1hcFxuICAgIHRoaXMuYWZ0ZXJXcml0ZSA9IGFmdGVyV3JpdGUuYmluZCh0aGlzKVxuICAgIHRoaXMuYWZ0ZXJVcGRhdGVOZXh0VGljayA9IHVwZGF0ZVdyaXRlTlQuYmluZCh0aGlzKVxuICB9XG5cbiAgZ2V0IGVuZGVkICgpIHtcbiAgICByZXR1cm4gKHRoaXMuc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFdSSVRFX0RPTkUpICE9PSAwXG4gIH1cblxuICBwdXNoIChkYXRhKSB7XG4gICAgaWYgKHRoaXMubWFwICE9PSBudWxsKSBkYXRhID0gdGhpcy5tYXAoZGF0YSlcblxuICAgIHRoaXMuYnVmZmVyZWQgKz0gdGhpcy5ieXRlTGVuZ3RoKGRhdGEpXG4gICAgdGhpcy5xdWV1ZS5wdXNoKGRhdGEpXG5cbiAgICBpZiAodGhpcy5idWZmZXJlZCA8IHRoaXMuaGlnaFdhdGVyTWFyaykge1xuICAgICAgdGhpcy5zdHJlYW0uX2R1cGxleFN0YXRlIHw9IFdSSVRFX1FVRVVFRFxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICB0aGlzLnN0cmVhbS5fZHVwbGV4U3RhdGUgfD0gV1JJVEVfUVVFVUVEX0FORF9VTkRSQUlORURcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHNoaWZ0ICgpIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5xdWV1ZS5zaGlmdCgpXG5cbiAgICB0aGlzLmJ1ZmZlcmVkIC09IHRoaXMuYnl0ZUxlbmd0aChkYXRhKVxuICAgIGlmICh0aGlzLmJ1ZmZlcmVkID09PSAwKSB0aGlzLnN0cmVhbS5fZHVwbGV4U3RhdGUgJj0gV1JJVEVfTk9UX1FVRVVFRFxuXG4gICAgcmV0dXJuIGRhdGFcbiAgfVxuXG4gIGVuZCAoZGF0YSkge1xuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5zdHJlYW0ub25jZSgnZmluaXNoJywgZGF0YSlcbiAgICBlbHNlIGlmIChkYXRhICE9PSB1bmRlZmluZWQgJiYgZGF0YSAhPT0gbnVsbCkgdGhpcy5wdXNoKGRhdGEpXG4gICAgdGhpcy5zdHJlYW0uX2R1cGxleFN0YXRlID0gKHRoaXMuc3RyZWFtLl9kdXBsZXhTdGF0ZSB8IFdSSVRFX0ZJTklTSElORykgJiBXUklURV9OT05fUFJJTUFSWVxuICB9XG5cbiAgYXV0b0JhdGNoIChkYXRhLCBjYikge1xuICAgIGNvbnN0IGJ1ZmZlciA9IFtdXG4gICAgY29uc3Qgc3RyZWFtID0gdGhpcy5zdHJlYW1cblxuICAgIGJ1ZmZlci5wdXNoKGRhdGEpXG4gICAgd2hpbGUgKChzdHJlYW0uX2R1cGxleFN0YXRlICYgV1JJVEVfU1RBVFVTKSA9PT0gV1JJVEVfUVVFVUVEX0FORF9BQ1RJVkUpIHtcbiAgICAgIGJ1ZmZlci5wdXNoKHN0cmVhbS5fd3JpdGFibGVTdGF0ZS5zaGlmdCgpKVxuICAgIH1cblxuICAgIGlmICgoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIE9QRU5fU1RBVFVTKSAhPT0gMCkgcmV0dXJuIGNiKG51bGwpXG4gICAgc3RyZWFtLl93cml0ZXYoYnVmZmVyLCBjYilcbiAgfVxuXG4gIHVwZGF0ZSAoKSB7XG4gICAgY29uc3Qgc3RyZWFtID0gdGhpcy5zdHJlYW1cblxuICAgIHN0cmVhbS5fZHVwbGV4U3RhdGUgfD0gV1JJVEVfVVBEQVRJTkdcblxuICAgIGRvIHtcbiAgICAgIHdoaWxlICgoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFdSSVRFX1NUQVRVUykgPT09IFdSSVRFX1FVRVVFRCkge1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5zaGlmdCgpXG4gICAgICAgIHN0cmVhbS5fZHVwbGV4U3RhdGUgfD0gV1JJVEVfQUNUSVZFX0FORF9XUklUSU5HXG4gICAgICAgIHN0cmVhbS5fd3JpdGUoZGF0YSwgdGhpcy5hZnRlcldyaXRlKVxuICAgICAgfVxuXG4gICAgICBpZiAoKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBXUklURV9QUklNQVJZX0FORF9BQ1RJVkUpID09PSAwKSB0aGlzLnVwZGF0ZU5vblByaW1hcnkoKVxuICAgIH0gd2hpbGUgKHRoaXMuY29udGludWVVcGRhdGUoKSA9PT0gdHJ1ZSlcblxuICAgIHN0cmVhbS5fZHVwbGV4U3RhdGUgJj0gV1JJVEVfTk9UX1VQREFUSU5HXG4gIH1cblxuICB1cGRhdGVOb25QcmltYXJ5ICgpIHtcbiAgICBjb25zdCBzdHJlYW0gPSB0aGlzLnN0cmVhbVxuXG4gICAgaWYgKChzdHJlYW0uX2R1cGxleFN0YXRlICYgV1JJVEVfRklOSVNISU5HX1NUQVRVUykgPT09IFdSSVRFX0ZJTklTSElORykge1xuICAgICAgc3RyZWFtLl9kdXBsZXhTdGF0ZSA9IChzdHJlYW0uX2R1cGxleFN0YXRlIHwgV1JJVEVfQUNUSVZFKSAmIFdSSVRFX05PVF9GSU5JU0hJTkdcbiAgICAgIHN0cmVhbS5fZmluYWwoYWZ0ZXJGaW5hbC5iaW5kKHRoaXMpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKChzdHJlYW0uX2R1cGxleFN0YXRlICYgREVTVFJPWV9TVEFUVVMpID09PSBERVNUUk9ZSU5HKSB7XG4gICAgICBpZiAoKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBBQ1RJVkVfT1JfVElDS0lORykgPT09IDApIHtcbiAgICAgICAgc3RyZWFtLl9kdXBsZXhTdGF0ZSB8PSBBQ1RJVkVcbiAgICAgICAgc3RyZWFtLl9kZXN0cm95KGFmdGVyRGVzdHJveS5iaW5kKHRoaXMpKVxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKChzdHJlYW0uX2R1cGxleFN0YXRlICYgSVNfT1BFTklORykgPT09IE9QRU5JTkcpIHtcbiAgICAgIHN0cmVhbS5fZHVwbGV4U3RhdGUgPSAoc3RyZWFtLl9kdXBsZXhTdGF0ZSB8IEFDVElWRSkgJiBOT1RfT1BFTklOR1xuICAgICAgc3RyZWFtLl9vcGVuKGFmdGVyT3Blbi5iaW5kKHRoaXMpKVxuICAgIH1cbiAgfVxuXG4gIGNvbnRpbnVlVXBkYXRlICgpIHtcbiAgICBpZiAoKHRoaXMuc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFdSSVRFX05FWFRfVElDSykgPT09IDApIHJldHVybiBmYWxzZVxuICAgIHRoaXMuc3RyZWFtLl9kdXBsZXhTdGF0ZSAmPSBXUklURV9OT1RfTkVYVF9USUNLXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIHVwZGF0ZUNhbGxiYWNrICgpIHtcbiAgICBpZiAoKHRoaXMuc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFdSSVRFX1VQREFURV9TWU5DX1NUQVRVUykgPT09IFdSSVRFX1BSSU1BUlkpIHRoaXMudXBkYXRlKClcbiAgICBlbHNlIHRoaXMudXBkYXRlTmV4dFRpY2soKVxuICB9XG5cbiAgdXBkYXRlTmV4dFRpY2sgKCkge1xuICAgIGlmICgodGhpcy5zdHJlYW0uX2R1cGxleFN0YXRlICYgV1JJVEVfTkVYVF9USUNLKSAhPT0gMCkgcmV0dXJuXG4gICAgdGhpcy5zdHJlYW0uX2R1cGxleFN0YXRlIHw9IFdSSVRFX05FWFRfVElDS1xuICAgIGlmICgodGhpcy5zdHJlYW0uX2R1cGxleFN0YXRlICYgV1JJVEVfVVBEQVRJTkcpID09PSAwKSBxdWV1ZVRpY2sodGhpcy5hZnRlclVwZGF0ZU5leHRUaWNrKVxuICB9XG59XG5cbmNsYXNzIFJlYWRhYmxlU3RhdGUge1xuICBjb25zdHJ1Y3RvciAoc3RyZWFtLCB7IGhpZ2hXYXRlck1hcmsgPSAxNjM4NCwgbWFwID0gbnVsbCwgbWFwUmVhZGFibGUsIGJ5dGVMZW5ndGgsIGJ5dGVMZW5ndGhSZWFkYWJsZSB9ID0ge30pIHtcbiAgICB0aGlzLnN0cmVhbSA9IHN0cmVhbVxuICAgIHRoaXMucXVldWUgPSBuZXcgRklGTygpXG4gICAgdGhpcy5oaWdoV2F0ZXJNYXJrID0gaGlnaFdhdGVyTWFyayA9PT0gMCA/IDEgOiBoaWdoV2F0ZXJNYXJrXG4gICAgdGhpcy5idWZmZXJlZCA9IDBcbiAgICB0aGlzLnJlYWRBaGVhZCA9IGhpZ2hXYXRlck1hcmsgPiAwXG4gICAgdGhpcy5lcnJvciA9IG51bGxcbiAgICB0aGlzLnBpcGVsaW5lID0gbnVsbFxuICAgIHRoaXMuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGhSZWFkYWJsZSB8fCBieXRlTGVuZ3RoIHx8IGRlZmF1bHRCeXRlTGVuZ3RoXG4gICAgdGhpcy5tYXAgPSBtYXBSZWFkYWJsZSB8fCBtYXBcbiAgICB0aGlzLnBpcGVUbyA9IG51bGxcbiAgICB0aGlzLmFmdGVyUmVhZCA9IGFmdGVyUmVhZC5iaW5kKHRoaXMpXG4gICAgdGhpcy5hZnRlclVwZGF0ZU5leHRUaWNrID0gdXBkYXRlUmVhZE5ULmJpbmQodGhpcylcbiAgfVxuXG4gIGdldCBlbmRlZCAoKSB7XG4gICAgcmV0dXJuICh0aGlzLnN0cmVhbS5fZHVwbGV4U3RhdGUgJiBSRUFEX0RPTkUpICE9PSAwXG4gIH1cblxuICBwaXBlIChwaXBlVG8sIGNiKSB7XG4gICAgaWYgKHRoaXMucGlwZVRvICE9PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoJ0NhbiBvbmx5IHBpcGUgdG8gb25lIGRlc3RpbmF0aW9uJylcbiAgICBpZiAodHlwZW9mIGNiICE9PSAnZnVuY3Rpb24nKSBjYiA9IG51bGxcblxuICAgIHRoaXMuc3RyZWFtLl9kdXBsZXhTdGF0ZSB8PSBSRUFEX1BJUEVfRFJBSU5FRFxuICAgIHRoaXMucGlwZVRvID0gcGlwZVRvXG4gICAgdGhpcy5waXBlbGluZSA9IG5ldyBQaXBlbGluZSh0aGlzLnN0cmVhbSwgcGlwZVRvLCBjYilcblxuICAgIGlmIChjYikgdGhpcy5zdHJlYW0ub24oJ2Vycm9yJywgbm9vcCkgLy8gV2UgYWxyZWFkeSBlcnJvciBoYW5kbGUgdGhpcyBzbyBzdXByZXNzIGNyYXNoZXNcblxuICAgIGlmIChpc1N0cmVhbXgocGlwZVRvKSkge1xuICAgICAgcGlwZVRvLl93cml0YWJsZVN0YXRlLnBpcGVsaW5lID0gdGhpcy5waXBlbGluZVxuICAgICAgaWYgKGNiKSBwaXBlVG8ub24oJ2Vycm9yJywgbm9vcCkgLy8gV2UgYWxyZWFkeSBlcnJvciBoYW5kbGUgdGhpcyBzbyBzdXByZXNzIGNyYXNoZXNcbiAgICAgIHBpcGVUby5vbignZmluaXNoJywgdGhpcy5waXBlbGluZS5maW5pc2hlZC5iaW5kKHRoaXMucGlwZWxpbmUpKSAvLyBUT0RPOiBqdXN0IGNhbGwgZmluaXNoZWQgZnJvbSBwaXBlVG8gaXRzZWxmXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG9uZXJyb3IgPSB0aGlzLnBpcGVsaW5lLmRvbmUuYmluZCh0aGlzLnBpcGVsaW5lLCBwaXBlVG8pXG4gICAgICBjb25zdCBvbmNsb3NlID0gdGhpcy5waXBlbGluZS5kb25lLmJpbmQodGhpcy5waXBlbGluZSwgcGlwZVRvLCBudWxsKSAvLyBvbmNsb3NlIGhhcyBhIHdlaXJkIGJvb2wgYXJnXG4gICAgICBwaXBlVG8ub24oJ2Vycm9yJywgb25lcnJvcilcbiAgICAgIHBpcGVUby5vbignY2xvc2UnLCBvbmNsb3NlKVxuICAgICAgcGlwZVRvLm9uKCdmaW5pc2gnLCB0aGlzLnBpcGVsaW5lLmZpbmlzaGVkLmJpbmQodGhpcy5waXBlbGluZSkpXG4gICAgfVxuXG4gICAgcGlwZVRvLm9uKCdkcmFpbicsIGFmdGVyRHJhaW4uYmluZCh0aGlzKSlcbiAgICB0aGlzLnN0cmVhbS5lbWl0KCdwaXBpbmcnLCBwaXBlVG8pXG4gICAgcGlwZVRvLmVtaXQoJ3BpcGUnLCB0aGlzLnN0cmVhbSlcbiAgfVxuXG4gIHB1c2ggKGRhdGEpIHtcbiAgICBjb25zdCBzdHJlYW0gPSB0aGlzLnN0cmVhbVxuXG4gICAgaWYgKGRhdGEgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuaGlnaFdhdGVyTWFyayA9IDBcbiAgICAgIHN0cmVhbS5fZHVwbGV4U3RhdGUgPSAoc3RyZWFtLl9kdXBsZXhTdGF0ZSB8IFJFQURfRU5ESU5HKSAmIFJFQURfTk9OX1BSSU1BUllfQU5EX1BVU0hFRFxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgaWYgKHRoaXMubWFwICE9PSBudWxsKSB7XG4gICAgICBkYXRhID0gdGhpcy5tYXAoZGF0YSlcbiAgICAgIGlmIChkYXRhID09PSBudWxsKSB7XG4gICAgICAgIHN0cmVhbS5fZHVwbGV4U3RhdGUgJj0gUkVBRF9QVVNIRURcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVmZmVyZWQgPCB0aGlzLmhpZ2hXYXRlck1hcmtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmJ1ZmZlcmVkICs9IHRoaXMuYnl0ZUxlbmd0aChkYXRhKVxuICAgIHRoaXMucXVldWUucHVzaChkYXRhKVxuXG4gICAgc3RyZWFtLl9kdXBsZXhTdGF0ZSA9IChzdHJlYW0uX2R1cGxleFN0YXRlIHwgUkVBRF9RVUVVRUQpICYgUkVBRF9QVVNIRURcblxuICAgIHJldHVybiB0aGlzLmJ1ZmZlcmVkIDwgdGhpcy5oaWdoV2F0ZXJNYXJrXG4gIH1cblxuICBzaGlmdCAoKSB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMucXVldWUuc2hpZnQoKVxuXG4gICAgdGhpcy5idWZmZXJlZCAtPSB0aGlzLmJ5dGVMZW5ndGgoZGF0YSlcbiAgICBpZiAodGhpcy5idWZmZXJlZCA9PT0gMCkgdGhpcy5zdHJlYW0uX2R1cGxleFN0YXRlICY9IFJFQURfTk9UX1FVRVVFRFxuICAgIHJldHVybiBkYXRhXG4gIH1cblxuICB1bnNoaWZ0IChkYXRhKSB7XG4gICAgY29uc3QgcGVuZGluZyA9IFt0aGlzLm1hcCAhPT0gbnVsbCA/IHRoaXMubWFwKGRhdGEpIDogZGF0YV1cbiAgICB3aGlsZSAodGhpcy5idWZmZXJlZCA+IDApIHBlbmRpbmcucHVzaCh0aGlzLnNoaWZ0KCkpXG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBlbmRpbmcubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICBjb25zdCBkYXRhID0gcGVuZGluZ1tpXVxuICAgICAgdGhpcy5idWZmZXJlZCArPSB0aGlzLmJ5dGVMZW5ndGgoZGF0YSlcbiAgICAgIHRoaXMucXVldWUucHVzaChkYXRhKVxuICAgIH1cblxuICAgIHRoaXMucHVzaChwZW5kaW5nW3BlbmRpbmcubGVuZ3RoIC0gMV0pXG4gIH1cblxuICByZWFkICgpIHtcbiAgICBjb25zdCBzdHJlYW0gPSB0aGlzLnN0cmVhbVxuXG4gICAgaWYgKChzdHJlYW0uX2R1cGxleFN0YXRlICYgUkVBRF9TVEFUVVMpID09PSBSRUFEX1FVRVVFRCkge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuc2hpZnQoKVxuICAgICAgaWYgKHRoaXMucGlwZVRvICE9PSBudWxsICYmIHRoaXMucGlwZVRvLndyaXRlKGRhdGEpID09PSBmYWxzZSkgc3RyZWFtLl9kdXBsZXhTdGF0ZSAmPSBSRUFEX1BJUEVfTk9UX0RSQUlORURcbiAgICAgIGlmICgoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFJFQURfRU1JVF9EQVRBKSAhPT0gMCkgc3RyZWFtLmVtaXQoJ2RhdGEnLCBkYXRhKVxuICAgICAgcmV0dXJuIGRhdGFcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZWFkQWhlYWQgPT09IGZhbHNlKSB7XG4gICAgICBzdHJlYW0uX2R1cGxleFN0YXRlIHw9IFJFQURfUkVBRF9BSEVBRFxuICAgICAgdGhpcy51cGRhdGVOZXh0VGljaygpXG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGRyYWluICgpIHtcbiAgICBjb25zdCBzdHJlYW0gPSB0aGlzLnN0cmVhbVxuXG4gICAgd2hpbGUgKChzdHJlYW0uX2R1cGxleFN0YXRlICYgUkVBRF9TVEFUVVMpID09PSBSRUFEX1FVRVVFRCAmJiAoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFJFQURfRkxPV0lORykgIT09IDApIHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLnNoaWZ0KClcbiAgICAgIGlmICh0aGlzLnBpcGVUbyAhPT0gbnVsbCAmJiB0aGlzLnBpcGVUby53cml0ZShkYXRhKSA9PT0gZmFsc2UpIHN0cmVhbS5fZHVwbGV4U3RhdGUgJj0gUkVBRF9QSVBFX05PVF9EUkFJTkVEXG4gICAgICBpZiAoKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBSRUFEX0VNSVRfREFUQSkgIT09IDApIHN0cmVhbS5lbWl0KCdkYXRhJywgZGF0YSlcbiAgICB9XG4gIH1cblxuICB1cGRhdGUgKCkge1xuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuc3RyZWFtXG5cbiAgICBzdHJlYW0uX2R1cGxleFN0YXRlIHw9IFJFQURfVVBEQVRJTkdcblxuICAgIGRvIHtcbiAgICAgIHRoaXMuZHJhaW4oKVxuXG4gICAgICB3aGlsZSAodGhpcy5idWZmZXJlZCA8IHRoaXMuaGlnaFdhdGVyTWFyayAmJiAoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFNIT1VMRF9OT1RfUkVBRCkgPT09IFJFQURfUkVBRF9BSEVBRCkge1xuICAgICAgICBzdHJlYW0uX2R1cGxleFN0YXRlIHw9IFJFQURfQUNUSVZFX0FORF9ORUVEU19QVVNIXG4gICAgICAgIHN0cmVhbS5fcmVhZCh0aGlzLmFmdGVyUmVhZClcbiAgICAgICAgdGhpcy5kcmFpbigpXG4gICAgICB9XG5cbiAgICAgIGlmICgoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFJFQURfUkVBREFCTEVfU1RBVFVTKSA9PT0gUkVBRF9FTUlUX1JFQURBQkxFX0FORF9RVUVVRUQpIHtcbiAgICAgICAgc3RyZWFtLl9kdXBsZXhTdGF0ZSB8PSBSRUFEX0VNSVRURURfUkVBREFCTEVcbiAgICAgICAgc3RyZWFtLmVtaXQoJ3JlYWRhYmxlJylcbiAgICAgIH1cblxuICAgICAgaWYgKChzdHJlYW0uX2R1cGxleFN0YXRlICYgUkVBRF9QUklNQVJZX0FORF9BQ1RJVkUpID09PSAwKSB0aGlzLnVwZGF0ZU5vblByaW1hcnkoKVxuICAgIH0gd2hpbGUgKHRoaXMuY29udGludWVVcGRhdGUoKSA9PT0gdHJ1ZSlcblxuICAgIHN0cmVhbS5fZHVwbGV4U3RhdGUgJj0gUkVBRF9OT1RfVVBEQVRJTkdcbiAgfVxuXG4gIHVwZGF0ZU5vblByaW1hcnkgKCkge1xuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuc3RyZWFtXG5cbiAgICBpZiAoKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBSRUFEX0VORElOR19TVEFUVVMpID09PSBSRUFEX0VORElORykge1xuICAgICAgc3RyZWFtLl9kdXBsZXhTdGF0ZSA9IChzdHJlYW0uX2R1cGxleFN0YXRlIHwgUkVBRF9ET05FKSAmIFJFQURfTk9UX0VORElOR1xuICAgICAgc3RyZWFtLmVtaXQoJ2VuZCcpXG4gICAgICBpZiAoKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBBVVRPX0RFU1RST1kpID09PSBET05FKSBzdHJlYW0uX2R1cGxleFN0YXRlIHw9IERFU1RST1lJTkdcbiAgICAgIGlmICh0aGlzLnBpcGVUbyAhPT0gbnVsbCkgdGhpcy5waXBlVG8uZW5kKClcbiAgICB9XG5cbiAgICBpZiAoKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBERVNUUk9ZX1NUQVRVUykgPT09IERFU1RST1lJTkcpIHtcbiAgICAgIGlmICgoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIEFDVElWRV9PUl9USUNLSU5HKSA9PT0gMCkge1xuICAgICAgICBzdHJlYW0uX2R1cGxleFN0YXRlIHw9IEFDVElWRVxuICAgICAgICBzdHJlYW0uX2Rlc3Ryb3koYWZ0ZXJEZXN0cm95LmJpbmQodGhpcykpXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBJU19PUEVOSU5HKSA9PT0gT1BFTklORykge1xuICAgICAgc3RyZWFtLl9kdXBsZXhTdGF0ZSA9IChzdHJlYW0uX2R1cGxleFN0YXRlIHwgQUNUSVZFKSAmIE5PVF9PUEVOSU5HXG4gICAgICBzdHJlYW0uX29wZW4oYWZ0ZXJPcGVuLmJpbmQodGhpcykpXG4gICAgfVxuICB9XG5cbiAgY29udGludWVVcGRhdGUgKCkge1xuICAgIGlmICgodGhpcy5zdHJlYW0uX2R1cGxleFN0YXRlICYgUkVBRF9ORVhUX1RJQ0spID09PSAwKSByZXR1cm4gZmFsc2VcbiAgICB0aGlzLnN0cmVhbS5fZHVwbGV4U3RhdGUgJj0gUkVBRF9OT1RfTkVYVF9USUNLXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIHVwZGF0ZUNhbGxiYWNrICgpIHtcbiAgICBpZiAoKHRoaXMuc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFJFQURfVVBEQVRFX1NZTkNfU1RBVFVTKSA9PT0gUkVBRF9QUklNQVJZKSB0aGlzLnVwZGF0ZSgpXG4gICAgZWxzZSB0aGlzLnVwZGF0ZU5leHRUaWNrKClcbiAgfVxuXG4gIHVwZGF0ZU5leHRUaWNrICgpIHtcbiAgICBpZiAoKHRoaXMuc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFJFQURfTkVYVF9USUNLKSAhPT0gMCkgcmV0dXJuXG4gICAgdGhpcy5zdHJlYW0uX2R1cGxleFN0YXRlIHw9IFJFQURfTkVYVF9USUNLXG4gICAgaWYgKCh0aGlzLnN0cmVhbS5fZHVwbGV4U3RhdGUgJiBSRUFEX1VQREFUSU5HKSA9PT0gMCkgcXVldWVUaWNrKHRoaXMuYWZ0ZXJVcGRhdGVOZXh0VGljaylcbiAgfVxufVxuXG5jbGFzcyBUcmFuc2Zvcm1TdGF0ZSB7XG4gIGNvbnN0cnVjdG9yIChzdHJlYW0pIHtcbiAgICB0aGlzLmRhdGEgPSBudWxsXG4gICAgdGhpcy5hZnRlclRyYW5zZm9ybSA9IGFmdGVyVHJhbnNmb3JtLmJpbmQoc3RyZWFtKVxuICAgIHRoaXMuYWZ0ZXJGaW5hbCA9IG51bGxcbiAgfVxufVxuXG5jbGFzcyBQaXBlbGluZSB7XG4gIGNvbnN0cnVjdG9yIChzcmMsIGRzdCwgY2IpIHtcbiAgICB0aGlzLmZyb20gPSBzcmNcbiAgICB0aGlzLnRvID0gZHN0XG4gICAgdGhpcy5hZnRlclBpcGUgPSBjYlxuICAgIHRoaXMuZXJyb3IgPSBudWxsXG4gICAgdGhpcy5waXBlVG9GaW5pc2hlZCA9IGZhbHNlXG4gIH1cblxuICBmaW5pc2hlZCAoKSB7XG4gICAgdGhpcy5waXBlVG9GaW5pc2hlZCA9IHRydWVcbiAgfVxuXG4gIGRvbmUgKHN0cmVhbSwgZXJyKSB7XG4gICAgaWYgKGVycikgdGhpcy5lcnJvciA9IGVyclxuXG4gICAgaWYgKHN0cmVhbSA9PT0gdGhpcy50bykge1xuICAgICAgdGhpcy50byA9IG51bGxcblxuICAgICAgaWYgKHRoaXMuZnJvbSAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoKHRoaXMuZnJvbS5fZHVwbGV4U3RhdGUgJiBSRUFEX0RPTkUpID09PSAwIHx8ICF0aGlzLnBpcGVUb0ZpbmlzaGVkKSB7XG4gICAgICAgICAgdGhpcy5mcm9tLmRlc3Ryb3kodGhpcy5lcnJvciB8fCBuZXcgRXJyb3IoJ1dyaXRhYmxlIHN0cmVhbSBjbG9zZWQgcHJlbWF0dXJlbHknKSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3RyZWFtID09PSB0aGlzLmZyb20pIHtcbiAgICAgIHRoaXMuZnJvbSA9IG51bGxcblxuICAgICAgaWYgKHRoaXMudG8gIT09IG51bGwpIHtcbiAgICAgICAgaWYgKChzdHJlYW0uX2R1cGxleFN0YXRlICYgUkVBRF9ET05FKSA9PT0gMCkge1xuICAgICAgICAgIHRoaXMudG8uZGVzdHJveSh0aGlzLmVycm9yIHx8IG5ldyBFcnJvcignUmVhZGFibGUgc3RyZWFtIGNsb3NlZCBiZWZvcmUgZW5kaW5nJykpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYWZ0ZXJQaXBlICE9PSBudWxsKSB0aGlzLmFmdGVyUGlwZSh0aGlzLmVycm9yKVxuICAgIHRoaXMudG8gPSB0aGlzLmZyb20gPSB0aGlzLmFmdGVyUGlwZSA9IG51bGxcbiAgfVxufVxuXG5mdW5jdGlvbiBhZnRlckRyYWluICgpIHtcbiAgdGhpcy5zdHJlYW0uX2R1cGxleFN0YXRlIHw9IFJFQURfUElQRV9EUkFJTkVEXG4gIHRoaXMudXBkYXRlQ2FsbGJhY2soKVxufVxuXG5mdW5jdGlvbiBhZnRlckZpbmFsIChlcnIpIHtcbiAgY29uc3Qgc3RyZWFtID0gdGhpcy5zdHJlYW1cbiAgaWYgKGVycikgc3RyZWFtLmRlc3Ryb3koZXJyKVxuICBpZiAoKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBERVNUUk9ZX1NUQVRVUykgPT09IDApIHtcbiAgICBzdHJlYW0uX2R1cGxleFN0YXRlIHw9IFdSSVRFX0RPTkVcbiAgICBzdHJlYW0uZW1pdCgnZmluaXNoJylcbiAgfVxuICBpZiAoKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBBVVRPX0RFU1RST1kpID09PSBET05FKSB7XG4gICAgc3RyZWFtLl9kdXBsZXhTdGF0ZSB8PSBERVNUUk9ZSU5HXG4gIH1cblxuICBzdHJlYW0uX2R1cGxleFN0YXRlICY9IFdSSVRFX05PVF9BQ1RJVkVcblxuICAvLyBubyBuZWVkIHRvIHdhaXQgdGhlIGV4dHJhIHRpY2sgaGVyZSwgc28gd2Ugc2hvcnQgY2lyY3VpdCB0aGF0XG4gIGlmICgoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFdSSVRFX1VQREFUSU5HKSA9PT0gMCkgdGhpcy51cGRhdGUoKVxuICBlbHNlIHRoaXMudXBkYXRlTmV4dFRpY2soKVxufVxuXG5mdW5jdGlvbiBhZnRlckRlc3Ryb3kgKGVycikge1xuICBjb25zdCBzdHJlYW0gPSB0aGlzLnN0cmVhbVxuXG4gIGlmICghZXJyICYmIHRoaXMuZXJyb3IgIT09IFNUUkVBTV9ERVNUUk9ZRUQpIGVyciA9IHRoaXMuZXJyb3JcbiAgaWYgKGVycikgc3RyZWFtLmVtaXQoJ2Vycm9yJywgZXJyKVxuICBzdHJlYW0uX2R1cGxleFN0YXRlIHw9IERFU1RST1lFRFxuICBzdHJlYW0uZW1pdCgnY2xvc2UnKVxuXG4gIGNvbnN0IHJzID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlXG4gIGNvbnN0IHdzID0gc3RyZWFtLl93cml0YWJsZVN0YXRlXG5cbiAgaWYgKHJzICE9PSBudWxsICYmIHJzLnBpcGVsaW5lICE9PSBudWxsKSBycy5waXBlbGluZS5kb25lKHN0cmVhbSwgZXJyKVxuXG4gIGlmICh3cyAhPT0gbnVsbCkge1xuICAgIHdoaWxlICh3cy5kcmFpbnMgIT09IG51bGwgJiYgd3MuZHJhaW5zLmxlbmd0aCA+IDApIHdzLmRyYWlucy5zaGlmdCgpLnJlc29sdmUoZmFsc2UpXG4gICAgaWYgKHdzLnBpcGVsaW5lICE9PSBudWxsKSB3cy5waXBlbGluZS5kb25lKHN0cmVhbSwgZXJyKVxuICB9XG59XG5cbmZ1bmN0aW9uIGFmdGVyV3JpdGUgKGVycikge1xuICBjb25zdCBzdHJlYW0gPSB0aGlzLnN0cmVhbVxuXG4gIGlmIChlcnIpIHN0cmVhbS5kZXN0cm95KGVycilcbiAgc3RyZWFtLl9kdXBsZXhTdGF0ZSAmPSBXUklURV9OT1RfQUNUSVZFXG5cbiAgaWYgKHRoaXMuZHJhaW5zICE9PSBudWxsKSB0aWNrRHJhaW5zKHRoaXMuZHJhaW5zKVxuXG4gIGlmICgoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFdSSVRFX0RSQUlOX1NUQVRVUykgPT09IFdSSVRFX1VORFJBSU5FRCkge1xuICAgIHN0cmVhbS5fZHVwbGV4U3RhdGUgJj0gV1JJVEVfRFJBSU5FRFxuICAgIGlmICgoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFdSSVRFX0VNSVRfRFJBSU4pID09PSBXUklURV9FTUlUX0RSQUlOKSB7XG4gICAgICBzdHJlYW0uZW1pdCgnZHJhaW4nKVxuICAgIH1cbiAgfVxuXG4gIHRoaXMudXBkYXRlQ2FsbGJhY2soKVxufVxuXG5mdW5jdGlvbiBhZnRlclJlYWQgKGVycikge1xuICBpZiAoZXJyKSB0aGlzLnN0cmVhbS5kZXN0cm95KGVycilcbiAgdGhpcy5zdHJlYW0uX2R1cGxleFN0YXRlICY9IFJFQURfTk9UX0FDVElWRVxuICBpZiAodGhpcy5yZWFkQWhlYWQgPT09IGZhbHNlICYmICh0aGlzLnN0cmVhbS5fZHVwbGV4U3RhdGUgJiBSRUFEX1JFU1VNRUQpID09PSAwKSB0aGlzLnN0cmVhbS5fZHVwbGV4U3RhdGUgJj0gUkVBRF9OT19SRUFEX0FIRUFEXG4gIHRoaXMudXBkYXRlQ2FsbGJhY2soKVxufVxuXG5mdW5jdGlvbiB1cGRhdGVSZWFkTlQgKCkge1xuICBpZiAoKHRoaXMuc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFJFQURfVVBEQVRJTkcpID09PSAwKSB7XG4gICAgdGhpcy5zdHJlYW0uX2R1cGxleFN0YXRlICY9IFJFQURfTk9UX05FWFRfVElDS1xuICAgIHRoaXMudXBkYXRlKClcbiAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVXcml0ZU5UICgpIHtcbiAgaWYgKCh0aGlzLnN0cmVhbS5fZHVwbGV4U3RhdGUgJiBXUklURV9VUERBVElORykgPT09IDApIHtcbiAgICB0aGlzLnN0cmVhbS5fZHVwbGV4U3RhdGUgJj0gV1JJVEVfTk9UX05FWFRfVElDS1xuICAgIHRoaXMudXBkYXRlKClcbiAgfVxufVxuXG5mdW5jdGlvbiB0aWNrRHJhaW5zIChkcmFpbnMpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkcmFpbnMubGVuZ3RoOyBpKyspIHtcbiAgICAvLyBkcmFpbnMud3JpdGVzIGFyZSBtb25vdG9uaWMsIHNvIGlmIG9uZSBpcyAwIGl0cyBhbHdheXMgdGhlIGZpcnN0IG9uZVxuICAgIGlmICgtLWRyYWluc1tpXS53cml0ZXMgPT09IDApIHtcbiAgICAgIGRyYWlucy5zaGlmdCgpLnJlc29sdmUodHJ1ZSlcbiAgICAgIGktLVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhZnRlck9wZW4gKGVycikge1xuICBjb25zdCBzdHJlYW0gPSB0aGlzLnN0cmVhbVxuXG4gIGlmIChlcnIpIHN0cmVhbS5kZXN0cm95KGVycilcblxuICBpZiAoKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBERVNUUk9ZSU5HKSA9PT0gMCkge1xuICAgIGlmICgoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFJFQURfUFJJTUFSWV9TVEFUVVMpID09PSAwKSBzdHJlYW0uX2R1cGxleFN0YXRlIHw9IFJFQURfUFJJTUFSWVxuICAgIGlmICgoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFdSSVRFX1BSSU1BUllfU1RBVFVTKSA9PT0gMCkgc3RyZWFtLl9kdXBsZXhTdGF0ZSB8PSBXUklURV9QUklNQVJZXG4gICAgc3RyZWFtLmVtaXQoJ29wZW4nKVxuICB9XG5cbiAgc3RyZWFtLl9kdXBsZXhTdGF0ZSAmPSBOT1RfQUNUSVZFXG5cbiAgaWYgKHN0cmVhbS5fd3JpdGFibGVTdGF0ZSAhPT0gbnVsbCkge1xuICAgIHN0cmVhbS5fd3JpdGFibGVTdGF0ZS51cGRhdGVDYWxsYmFjaygpXG4gIH1cblxuICBpZiAoc3RyZWFtLl9yZWFkYWJsZVN0YXRlICE9PSBudWxsKSB7XG4gICAgc3RyZWFtLl9yZWFkYWJsZVN0YXRlLnVwZGF0ZUNhbGxiYWNrKClcbiAgfVxufVxuXG5mdW5jdGlvbiBhZnRlclRyYW5zZm9ybSAoZXJyLCBkYXRhKSB7XG4gIGlmIChkYXRhICE9PSB1bmRlZmluZWQgJiYgZGF0YSAhPT0gbnVsbCkgdGhpcy5wdXNoKGRhdGEpXG4gIHRoaXMuX3dyaXRhYmxlU3RhdGUuYWZ0ZXJXcml0ZShlcnIpXG59XG5cbmZ1bmN0aW9uIG5ld0xpc3RlbmVyIChuYW1lKSB7XG4gIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlICE9PSBudWxsKSB7XG4gICAgaWYgKG5hbWUgPT09ICdkYXRhJykge1xuICAgICAgdGhpcy5fZHVwbGV4U3RhdGUgfD0gKFJFQURfRU1JVF9EQVRBIHwgUkVBRF9SRVNVTUVEX1JFQURfQUhFQUQpXG4gICAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLnVwZGF0ZU5leHRUaWNrKClcbiAgICB9XG4gICAgaWYgKG5hbWUgPT09ICdyZWFkYWJsZScpIHtcbiAgICAgIHRoaXMuX2R1cGxleFN0YXRlIHw9IFJFQURfRU1JVF9SRUFEQUJMRVxuICAgICAgdGhpcy5fcmVhZGFibGVTdGF0ZS51cGRhdGVOZXh0VGljaygpXG4gICAgfVxuICB9XG5cbiAgaWYgKHRoaXMuX3dyaXRhYmxlU3RhdGUgIT09IG51bGwpIHtcbiAgICBpZiAobmFtZSA9PT0gJ2RyYWluJykge1xuICAgICAgdGhpcy5fZHVwbGV4U3RhdGUgfD0gV1JJVEVfRU1JVF9EUkFJTlxuICAgICAgdGhpcy5fd3JpdGFibGVTdGF0ZS51cGRhdGVOZXh0VGljaygpXG4gICAgfVxuICB9XG59XG5cbmNsYXNzIFN0cmVhbSBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gIGNvbnN0cnVjdG9yIChvcHRzKSB7XG4gICAgc3VwZXIoKVxuXG4gICAgdGhpcy5fZHVwbGV4U3RhdGUgPSAwXG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZSA9IG51bGxcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlID0gbnVsbFxuXG4gICAgaWYgKG9wdHMpIHtcbiAgICAgIGlmIChvcHRzLm9wZW4pIHRoaXMuX29wZW4gPSBvcHRzLm9wZW5cbiAgICAgIGlmIChvcHRzLmRlc3Ryb3kpIHRoaXMuX2Rlc3Ryb3kgPSBvcHRzLmRlc3Ryb3lcbiAgICAgIGlmIChvcHRzLnByZWRlc3Ryb3kpIHRoaXMuX3ByZWRlc3Ryb3kgPSBvcHRzLnByZWRlc3Ryb3lcbiAgICAgIGlmIChvcHRzLnNpZ25hbCkge1xuICAgICAgICBvcHRzLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0LmJpbmQodGhpcykpXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5vbignbmV3TGlzdGVuZXInLCBuZXdMaXN0ZW5lcilcbiAgfVxuXG4gIF9vcGVuIChjYikge1xuICAgIGNiKG51bGwpXG4gIH1cblxuICBfZGVzdHJveSAoY2IpIHtcbiAgICBjYihudWxsKVxuICB9XG5cbiAgX3ByZWRlc3Ryb3kgKCkge1xuICAgIC8vIGRvZXMgbm90aGluZ1xuICB9XG5cbiAgZ2V0IHJlYWRhYmxlICgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZSAhPT0gbnVsbCA/IHRydWUgOiB1bmRlZmluZWRcbiAgfVxuXG4gIGdldCB3cml0YWJsZSAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUgIT09IG51bGwgPyB0cnVlIDogdW5kZWZpbmVkXG4gIH1cblxuICBnZXQgZGVzdHJveWVkICgpIHtcbiAgICByZXR1cm4gKHRoaXMuX2R1cGxleFN0YXRlICYgREVTVFJPWUVEKSAhPT0gMFxuICB9XG5cbiAgZ2V0IGRlc3Ryb3lpbmcgKCkge1xuICAgIHJldHVybiAodGhpcy5fZHVwbGV4U3RhdGUgJiBERVNUUk9ZX1NUQVRVUykgIT09IDBcbiAgfVxuXG4gIGRlc3Ryb3kgKGVycikge1xuICAgIGlmICgodGhpcy5fZHVwbGV4U3RhdGUgJiBERVNUUk9ZX1NUQVRVUykgPT09IDApIHtcbiAgICAgIGlmICghZXJyKSBlcnIgPSBTVFJFQU1fREVTVFJPWUVEXG4gICAgICB0aGlzLl9kdXBsZXhTdGF0ZSA9ICh0aGlzLl9kdXBsZXhTdGF0ZSB8IERFU1RST1lJTkcpICYgTk9OX1BSSU1BUllcblxuICAgICAgaWYgKHRoaXMuX3JlYWRhYmxlU3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrID0gMFxuICAgICAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmVycm9yID0gZXJyXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fd3JpdGFibGVTdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcmsgPSAwXG4gICAgICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3IgPSBlcnJcbiAgICAgIH1cblxuICAgICAgdGhpcy5fZHVwbGV4U3RhdGUgfD0gUFJFREVTVFJPWUlOR1xuICAgICAgdGhpcy5fcHJlZGVzdHJveSgpXG4gICAgICB0aGlzLl9kdXBsZXhTdGF0ZSAmPSBOT1RfUFJFREVTVFJPWUlOR1xuXG4gICAgICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZSAhPT0gbnVsbCkgdGhpcy5fcmVhZGFibGVTdGF0ZS51cGRhdGVOZXh0VGljaygpXG4gICAgICBpZiAodGhpcy5fd3JpdGFibGVTdGF0ZSAhPT0gbnVsbCkgdGhpcy5fd3JpdGFibGVTdGF0ZS51cGRhdGVOZXh0VGljaygpXG4gICAgfVxuICB9XG59XG5cbmNsYXNzIFJlYWRhYmxlIGV4dGVuZHMgU3RyZWFtIHtcbiAgY29uc3RydWN0b3IgKG9wdHMpIHtcbiAgICBzdXBlcihvcHRzKVxuXG4gICAgdGhpcy5fZHVwbGV4U3RhdGUgfD0gT1BFTklORyB8IFdSSVRFX0RPTkUgfCBSRUFEX1JFQURfQUhFQURcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlID0gbmV3IFJlYWRhYmxlU3RhdGUodGhpcywgb3B0cylcblxuICAgIGlmIChvcHRzKSB7XG4gICAgICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZS5yZWFkQWhlYWQgPT09IGZhbHNlKSB0aGlzLl9kdXBsZXhTdGF0ZSAmPSBSRUFEX05PX1JFQURfQUhFQURcbiAgICAgIGlmIChvcHRzLnJlYWQpIHRoaXMuX3JlYWQgPSBvcHRzLnJlYWRcbiAgICAgIGlmIChvcHRzLmVhZ2VyT3BlbikgdGhpcy5fcmVhZGFibGVTdGF0ZS51cGRhdGVOZXh0VGljaygpXG4gICAgICBpZiAob3B0cy5lbmNvZGluZykgdGhpcy5zZXRFbmNvZGluZyhvcHRzLmVuY29kaW5nKVxuICAgIH1cbiAgfVxuXG4gIHNldEVuY29kaW5nIChlbmNvZGluZykge1xuICAgIGNvbnN0IGRlYyA9IG5ldyBUZXh0RGVjb2RlcihlbmNvZGluZylcbiAgICBjb25zdCBtYXAgPSB0aGlzLl9yZWFkYWJsZVN0YXRlLm1hcCB8fCBlY2hvXG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5tYXAgPSBtYXBPclNraXBcbiAgICByZXR1cm4gdGhpc1xuXG4gICAgZnVuY3Rpb24gbWFwT3JTa2lwIChkYXRhKSB7XG4gICAgICBjb25zdCBuZXh0ID0gZGVjLnB1c2goZGF0YSlcbiAgICAgIHJldHVybiBuZXh0ID09PSAnJyAmJiAoZGF0YS5ieXRlTGVuZ3RoICE9PSAwIHx8IGRlYy5yZW1haW5pbmcgPiAwKSA/IG51bGwgOiBtYXAobmV4dClcbiAgICB9XG4gIH1cblxuICBfcmVhZCAoY2IpIHtcbiAgICBjYihudWxsKVxuICB9XG5cbiAgcGlwZSAoZGVzdCwgY2IpIHtcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLnVwZGF0ZU5leHRUaWNrKClcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLnBpcGUoZGVzdCwgY2IpXG4gICAgcmV0dXJuIGRlc3RcbiAgfVxuXG4gIHJlYWQgKCkge1xuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUudXBkYXRlTmV4dFRpY2soKVxuICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLnJlYWQoKVxuICB9XG5cbiAgcHVzaCAoZGF0YSkge1xuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUudXBkYXRlTmV4dFRpY2soKVxuICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLnB1c2goZGF0YSlcbiAgfVxuXG4gIHVuc2hpZnQgKGRhdGEpIHtcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLnVwZGF0ZU5leHRUaWNrKClcbiAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS51bnNoaWZ0KGRhdGEpXG4gIH1cblxuICByZXN1bWUgKCkge1xuICAgIHRoaXMuX2R1cGxleFN0YXRlIHw9IFJFQURfUkVTVU1FRF9SRUFEX0FIRUFEXG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS51cGRhdGVOZXh0VGljaygpXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIHBhdXNlICgpIHtcbiAgICB0aGlzLl9kdXBsZXhTdGF0ZSAmPSAodGhpcy5fcmVhZGFibGVTdGF0ZS5yZWFkQWhlYWQgPT09IGZhbHNlID8gUkVBRF9QQVVTRURfTk9fUkVBRF9BSEVBRCA6IFJFQURfUEFVU0VEKVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBzdGF0aWMgX2Zyb21Bc3luY0l0ZXJhdG9yIChpdGUsIG9wdHMpIHtcbiAgICBsZXQgZGVzdHJveVxuXG4gICAgY29uc3QgcnMgPSBuZXcgUmVhZGFibGUoe1xuICAgICAgLi4ub3B0cyxcbiAgICAgIHJlYWQgKGNiKSB7XG4gICAgICAgIGl0ZS5uZXh0KCkudGhlbihwdXNoKS50aGVuKGNiLmJpbmQobnVsbCwgbnVsbCkpLmNhdGNoKGNiKVxuICAgICAgfSxcbiAgICAgIHByZWRlc3Ryb3kgKCkge1xuICAgICAgICBkZXN0cm95ID0gaXRlLnJldHVybigpXG4gICAgICB9LFxuICAgICAgZGVzdHJveSAoY2IpIHtcbiAgICAgICAgaWYgKCFkZXN0cm95KSByZXR1cm4gY2IobnVsbClcbiAgICAgICAgZGVzdHJveS50aGVuKGNiLmJpbmQobnVsbCwgbnVsbCkpLmNhdGNoKGNiKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICByZXR1cm4gcnNcblxuICAgIGZ1bmN0aW9uIHB1c2ggKGRhdGEpIHtcbiAgICAgIGlmIChkYXRhLmRvbmUpIHJzLnB1c2gobnVsbClcbiAgICAgIGVsc2UgcnMucHVzaChkYXRhLnZhbHVlKVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBmcm9tIChkYXRhLCBvcHRzKSB7XG4gICAgaWYgKGlzUmVhZFN0cmVhbXgoZGF0YSkpIHJldHVybiBkYXRhXG4gICAgaWYgKGRhdGFbYXN5bmNJdGVyYXRvcl0pIHJldHVybiB0aGlzLl9mcm9tQXN5bmNJdGVyYXRvcihkYXRhW2FzeW5jSXRlcmF0b3JdKCksIG9wdHMpXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGRhdGEpKSBkYXRhID0gZGF0YSA9PT0gdW5kZWZpbmVkID8gW10gOiBbZGF0YV1cblxuICAgIGxldCBpID0gMFxuICAgIHJldHVybiBuZXcgUmVhZGFibGUoe1xuICAgICAgLi4ub3B0cyxcbiAgICAgIHJlYWQgKGNiKSB7XG4gICAgICAgIHRoaXMucHVzaChpID09PSBkYXRhLmxlbmd0aCA/IG51bGwgOiBkYXRhW2krK10pXG4gICAgICAgIGNiKG51bGwpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHN0YXRpYyBpc0JhY2twcmVzc3VyZWQgKHJzKSB7XG4gICAgcmV0dXJuIChycy5fZHVwbGV4U3RhdGUgJiBSRUFEX0JBQ0tQUkVTU1VSRV9TVEFUVVMpICE9PSAwIHx8IHJzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlcmVkID49IHJzLl9yZWFkYWJsZVN0YXRlLmhpZ2hXYXRlck1hcmtcbiAgfVxuXG4gIHN0YXRpYyBpc1BhdXNlZCAocnMpIHtcbiAgICByZXR1cm4gKHJzLl9kdXBsZXhTdGF0ZSAmIFJFQURfUkVTVU1FRCkgPT09IDBcbiAgfVxuXG4gIFthc3luY0l0ZXJhdG9yXSAoKSB7XG4gICAgY29uc3Qgc3RyZWFtID0gdGhpc1xuXG4gICAgbGV0IGVycm9yID0gbnVsbFxuICAgIGxldCBwcm9taXNlUmVzb2x2ZSA9IG51bGxcbiAgICBsZXQgcHJvbWlzZVJlamVjdCA9IG51bGxcblxuICAgIHRoaXMub24oJ2Vycm9yJywgKGVycikgPT4geyBlcnJvciA9IGVyciB9KVxuICAgIHRoaXMub24oJ3JlYWRhYmxlJywgb25yZWFkYWJsZSlcbiAgICB0aGlzLm9uKCdjbG9zZScsIG9uY2xvc2UpXG5cbiAgICByZXR1cm4ge1xuICAgICAgW2FzeW5jSXRlcmF0b3JdICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNcbiAgICAgIH0sXG4gICAgICBuZXh0ICgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICBwcm9taXNlUmVzb2x2ZSA9IHJlc29sdmVcbiAgICAgICAgICBwcm9taXNlUmVqZWN0ID0gcmVqZWN0XG4gICAgICAgICAgY29uc3QgZGF0YSA9IHN0cmVhbS5yZWFkKClcbiAgICAgICAgICBpZiAoZGF0YSAhPT0gbnVsbCkgb25kYXRhKGRhdGEpXG4gICAgICAgICAgZWxzZSBpZiAoKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBERVNUUk9ZRUQpICE9PSAwKSBvbmRhdGEobnVsbClcbiAgICAgICAgfSlcbiAgICAgIH0sXG4gICAgICByZXR1cm4gKCkge1xuICAgICAgICByZXR1cm4gZGVzdHJveShudWxsKVxuICAgICAgfSxcbiAgICAgIHRocm93IChlcnIpIHtcbiAgICAgICAgcmV0dXJuIGRlc3Ryb3koZXJyKVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9ucmVhZGFibGUgKCkge1xuICAgICAgaWYgKHByb21pc2VSZXNvbHZlICE9PSBudWxsKSBvbmRhdGEoc3RyZWFtLnJlYWQoKSlcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvbmNsb3NlICgpIHtcbiAgICAgIGlmIChwcm9taXNlUmVzb2x2ZSAhPT0gbnVsbCkgb25kYXRhKG51bGwpXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25kYXRhIChkYXRhKSB7XG4gICAgICBpZiAocHJvbWlzZVJlamVjdCA9PT0gbnVsbCkgcmV0dXJuXG4gICAgICBpZiAoZXJyb3IpIHByb21pc2VSZWplY3QoZXJyb3IpXG4gICAgICBlbHNlIGlmIChkYXRhID09PSBudWxsICYmIChzdHJlYW0uX2R1cGxleFN0YXRlICYgUkVBRF9ET05FKSA9PT0gMCkgcHJvbWlzZVJlamVjdChTVFJFQU1fREVTVFJPWUVEKVxuICAgICAgZWxzZSBwcm9taXNlUmVzb2x2ZSh7IHZhbHVlOiBkYXRhLCBkb25lOiBkYXRhID09PSBudWxsIH0pXG4gICAgICBwcm9taXNlUmVqZWN0ID0gcHJvbWlzZVJlc29sdmUgPSBudWxsXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVzdHJveSAoZXJyKSB7XG4gICAgICBzdHJlYW0uZGVzdHJveShlcnIpXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBpZiAoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIERFU1RST1lFRCkgcmV0dXJuIHJlc29sdmUoeyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH0pXG4gICAgICAgIHN0cmVhbS5vbmNlKCdjbG9zZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoZXJyKSByZWplY3QoZXJyKVxuICAgICAgICAgIGVsc2UgcmVzb2x2ZSh7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfSlcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfVxuICB9XG59XG5cbmNsYXNzIFdyaXRhYmxlIGV4dGVuZHMgU3RyZWFtIHtcbiAgY29uc3RydWN0b3IgKG9wdHMpIHtcbiAgICBzdXBlcihvcHRzKVxuXG4gICAgdGhpcy5fZHVwbGV4U3RhdGUgfD0gT1BFTklORyB8IFJFQURfRE9ORVxuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUgPSBuZXcgV3JpdGFibGVTdGF0ZSh0aGlzLCBvcHRzKVxuXG4gICAgaWYgKG9wdHMpIHtcbiAgICAgIGlmIChvcHRzLndyaXRldikgdGhpcy5fd3JpdGV2ID0gb3B0cy53cml0ZXZcbiAgICAgIGlmIChvcHRzLndyaXRlKSB0aGlzLl93cml0ZSA9IG9wdHMud3JpdGVcbiAgICAgIGlmIChvcHRzLmZpbmFsKSB0aGlzLl9maW5hbCA9IG9wdHMuZmluYWxcbiAgICAgIGlmIChvcHRzLmVhZ2VyT3BlbikgdGhpcy5fd3JpdGFibGVTdGF0ZS51cGRhdGVOZXh0VGljaygpXG4gICAgfVxuICB9XG5cbiAgY29yayAoKSB7XG4gICAgdGhpcy5fZHVwbGV4U3RhdGUgfD0gV1JJVEVfQ09SS0VEXG4gIH1cblxuICB1bmNvcmsgKCkge1xuICAgIHRoaXMuX2R1cGxleFN0YXRlICY9IFdSSVRFX05PVF9DT1JLRURcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLnVwZGF0ZU5leHRUaWNrKClcbiAgfVxuXG4gIF93cml0ZXYgKGJhdGNoLCBjYikge1xuICAgIGNiKG51bGwpXG4gIH1cblxuICBfd3JpdGUgKGRhdGEsIGNiKSB7XG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5hdXRvQmF0Y2goZGF0YSwgY2IpXG4gIH1cblxuICBfZmluYWwgKGNiKSB7XG4gICAgY2IobnVsbClcbiAgfVxuXG4gIHN0YXRpYyBpc0JhY2twcmVzc3VyZWQgKHdzKSB7XG4gICAgcmV0dXJuICh3cy5fZHVwbGV4U3RhdGUgJiBXUklURV9CQUNLUFJFU1NVUkVfU1RBVFVTKSAhPT0gMFxuICB9XG5cbiAgc3RhdGljIGRyYWluZWQgKHdzKSB7XG4gICAgaWYgKHdzLmRlc3Ryb3llZCkgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSlcbiAgICBjb25zdCBzdGF0ZSA9IHdzLl93cml0YWJsZVN0YXRlXG4gICAgY29uc3QgcGVuZGluZyA9IChpc1dyaXRldih3cykgPyBNYXRoLm1pbigxLCBzdGF0ZS5xdWV1ZS5sZW5ndGgpIDogc3RhdGUucXVldWUubGVuZ3RoKVxuICAgIGNvbnN0IHdyaXRlcyA9IHBlbmRpbmcgKyAoKHdzLl9kdXBsZXhTdGF0ZSAmIFdSSVRFX1dSSVRJTkcpID8gMSA6IDApXG4gICAgaWYgKHdyaXRlcyA9PT0gMCkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKVxuICAgIGlmIChzdGF0ZS5kcmFpbnMgPT09IG51bGwpIHN0YXRlLmRyYWlucyA9IFtdXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBzdGF0ZS5kcmFpbnMucHVzaCh7IHdyaXRlcywgcmVzb2x2ZSB9KVxuICAgIH0pXG4gIH1cblxuICB3cml0ZSAoZGF0YSkge1xuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUudXBkYXRlTmV4dFRpY2soKVxuICAgIHJldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLnB1c2goZGF0YSlcbiAgfVxuXG4gIGVuZCAoZGF0YSkge1xuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUudXBkYXRlTmV4dFRpY2soKVxuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kKGRhdGEpXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxufVxuXG5jbGFzcyBEdXBsZXggZXh0ZW5kcyBSZWFkYWJsZSB7IC8vIGFuZCBXcml0YWJsZVxuICBjb25zdHJ1Y3RvciAob3B0cykge1xuICAgIHN1cGVyKG9wdHMpXG5cbiAgICB0aGlzLl9kdXBsZXhTdGF0ZSA9IE9QRU5JTkcgfCAodGhpcy5fZHVwbGV4U3RhdGUgJiBSRUFEX1JFQURfQUhFQUQpXG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZSA9IG5ldyBXcml0YWJsZVN0YXRlKHRoaXMsIG9wdHMpXG5cbiAgICBpZiAob3B0cykge1xuICAgICAgaWYgKG9wdHMud3JpdGV2KSB0aGlzLl93cml0ZXYgPSBvcHRzLndyaXRldlxuICAgICAgaWYgKG9wdHMud3JpdGUpIHRoaXMuX3dyaXRlID0gb3B0cy53cml0ZVxuICAgICAgaWYgKG9wdHMuZmluYWwpIHRoaXMuX2ZpbmFsID0gb3B0cy5maW5hbFxuICAgIH1cbiAgfVxuXG4gIGNvcmsgKCkge1xuICAgIHRoaXMuX2R1cGxleFN0YXRlIHw9IFdSSVRFX0NPUktFRFxuICB9XG5cbiAgdW5jb3JrICgpIHtcbiAgICB0aGlzLl9kdXBsZXhTdGF0ZSAmPSBXUklURV9OT1RfQ09SS0VEXG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS51cGRhdGVOZXh0VGljaygpXG4gIH1cblxuICBfd3JpdGV2IChiYXRjaCwgY2IpIHtcbiAgICBjYihudWxsKVxuICB9XG5cbiAgX3dyaXRlIChkYXRhLCBjYikge1xuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuYXV0b0JhdGNoKGRhdGEsIGNiKVxuICB9XG5cbiAgX2ZpbmFsIChjYikge1xuICAgIGNiKG51bGwpXG4gIH1cblxuICB3cml0ZSAoZGF0YSkge1xuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUudXBkYXRlTmV4dFRpY2soKVxuICAgIHJldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLnB1c2goZGF0YSlcbiAgfVxuXG4gIGVuZCAoZGF0YSkge1xuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUudXBkYXRlTmV4dFRpY2soKVxuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kKGRhdGEpXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxufVxuXG5jbGFzcyBUcmFuc2Zvcm0gZXh0ZW5kcyBEdXBsZXgge1xuICBjb25zdHJ1Y3RvciAob3B0cykge1xuICAgIHN1cGVyKG9wdHMpXG4gICAgdGhpcy5fdHJhbnNmb3JtU3RhdGUgPSBuZXcgVHJhbnNmb3JtU3RhdGUodGhpcylcblxuICAgIGlmIChvcHRzKSB7XG4gICAgICBpZiAob3B0cy50cmFuc2Zvcm0pIHRoaXMuX3RyYW5zZm9ybSA9IG9wdHMudHJhbnNmb3JtXG4gICAgICBpZiAob3B0cy5mbHVzaCkgdGhpcy5fZmx1c2ggPSBvcHRzLmZsdXNoXG4gICAgfVxuICB9XG5cbiAgX3dyaXRlIChkYXRhLCBjYikge1xuICAgIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlcmVkID49IHRoaXMuX3JlYWRhYmxlU3RhdGUuaGlnaFdhdGVyTWFyaykge1xuICAgICAgdGhpcy5fdHJhbnNmb3JtU3RhdGUuZGF0YSA9IGRhdGFcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fdHJhbnNmb3JtKGRhdGEsIHRoaXMuX3RyYW5zZm9ybVN0YXRlLmFmdGVyVHJhbnNmb3JtKVxuICAgIH1cbiAgfVxuXG4gIF9yZWFkIChjYikge1xuICAgIGlmICh0aGlzLl90cmFuc2Zvcm1TdGF0ZS5kYXRhICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5fdHJhbnNmb3JtU3RhdGUuZGF0YVxuICAgICAgdGhpcy5fdHJhbnNmb3JtU3RhdGUuZGF0YSA9IG51bGxcbiAgICAgIGNiKG51bGwpXG4gICAgICB0aGlzLl90cmFuc2Zvcm0oZGF0YSwgdGhpcy5fdHJhbnNmb3JtU3RhdGUuYWZ0ZXJUcmFuc2Zvcm0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGNiKG51bGwpXG4gICAgfVxuICB9XG5cbiAgZGVzdHJveSAoZXJyKSB7XG4gICAgc3VwZXIuZGVzdHJveShlcnIpXG4gICAgaWYgKHRoaXMuX3RyYW5zZm9ybVN0YXRlLmRhdGEgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuX3RyYW5zZm9ybVN0YXRlLmRhdGEgPSBudWxsXG4gICAgICB0aGlzLl90cmFuc2Zvcm1TdGF0ZS5hZnRlclRyYW5zZm9ybSgpXG4gICAgfVxuICB9XG5cbiAgX3RyYW5zZm9ybSAoZGF0YSwgY2IpIHtcbiAgICBjYihudWxsLCBkYXRhKVxuICB9XG5cbiAgX2ZsdXNoIChjYikge1xuICAgIGNiKG51bGwpXG4gIH1cblxuICBfZmluYWwgKGNiKSB7XG4gICAgdGhpcy5fdHJhbnNmb3JtU3RhdGUuYWZ0ZXJGaW5hbCA9IGNiXG4gICAgdGhpcy5fZmx1c2godHJhbnNmb3JtQWZ0ZXJGbHVzaC5iaW5kKHRoaXMpKVxuICB9XG59XG5cbmNsYXNzIFBhc3NUaHJvdWdoIGV4dGVuZHMgVHJhbnNmb3JtIHt9XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybUFmdGVyRmx1c2ggKGVyciwgZGF0YSkge1xuICBjb25zdCBjYiA9IHRoaXMuX3RyYW5zZm9ybVN0YXRlLmFmdGVyRmluYWxcbiAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgaWYgKGRhdGEgIT09IG51bGwgJiYgZGF0YSAhPT0gdW5kZWZpbmVkKSB0aGlzLnB1c2goZGF0YSlcbiAgdGhpcy5wdXNoKG51bGwpXG4gIGNiKG51bGwpXG59XG5cbmZ1bmN0aW9uIHBpcGVsaW5lUHJvbWlzZSAoLi4uc3RyZWFtcykge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHJldHVybiBwaXBlbGluZSguLi5zdHJlYW1zLCAoZXJyKSA9PiB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gcmVqZWN0KGVycilcbiAgICAgIHJlc29sdmUoKVxuICAgIH0pXG4gIH0pXG59XG5cbmZ1bmN0aW9uIHBpcGVsaW5lIChzdHJlYW0sIC4uLnN0cmVhbXMpIHtcbiAgY29uc3QgYWxsID0gQXJyYXkuaXNBcnJheShzdHJlYW0pID8gWy4uLnN0cmVhbSwgLi4uc3RyZWFtc10gOiBbc3RyZWFtLCAuLi5zdHJlYW1zXVxuICBjb25zdCBkb25lID0gKGFsbC5sZW5ndGggJiYgdHlwZW9mIGFsbFthbGwubGVuZ3RoIC0gMV0gPT09ICdmdW5jdGlvbicpID8gYWxsLnBvcCgpIDogbnVsbFxuXG4gIGlmIChhbGwubGVuZ3RoIDwgMikgdGhyb3cgbmV3IEVycm9yKCdQaXBlbGluZSByZXF1aXJlcyBhdCBsZWFzdCAyIHN0cmVhbXMnKVxuXG4gIGxldCBzcmMgPSBhbGxbMF1cbiAgbGV0IGRlc3QgPSBudWxsXG4gIGxldCBlcnJvciA9IG51bGxcblxuICBmb3IgKGxldCBpID0gMTsgaSA8IGFsbC5sZW5ndGg7IGkrKykge1xuICAgIGRlc3QgPSBhbGxbaV1cblxuICAgIGlmIChpc1N0cmVhbXgoc3JjKSkge1xuICAgICAgc3JjLnBpcGUoZGVzdCwgb25lcnJvcilcbiAgICB9IGVsc2Uge1xuICAgICAgZXJyb3JIYW5kbGUoc3JjLCB0cnVlLCBpID4gMSwgb25lcnJvcilcbiAgICAgIHNyYy5waXBlKGRlc3QpXG4gICAgfVxuXG4gICAgc3JjID0gZGVzdFxuICB9XG5cbiAgaWYgKGRvbmUpIHtcbiAgICBsZXQgZmluID0gZmFsc2VcblxuICAgIGNvbnN0IGF1dG9EZXN0cm95ID0gaXNTdHJlYW14KGRlc3QpIHx8ICEhKGRlc3QuX3dyaXRhYmxlU3RhdGUgJiYgZGVzdC5fd3JpdGFibGVTdGF0ZS5hdXRvRGVzdHJveSlcblxuICAgIGRlc3Qub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgaWYgKGVycm9yID09PSBudWxsKSBlcnJvciA9IGVyclxuICAgIH0pXG5cbiAgICBkZXN0Lm9uKCdmaW5pc2gnLCAoKSA9PiB7XG4gICAgICBmaW4gPSB0cnVlXG4gICAgICBpZiAoIWF1dG9EZXN0cm95KSBkb25lKGVycm9yKVxuICAgIH0pXG5cbiAgICBpZiAoYXV0b0Rlc3Ryb3kpIHtcbiAgICAgIGRlc3Qub24oJ2Nsb3NlJywgKCkgPT4gZG9uZShlcnJvciB8fCAoZmluID8gbnVsbCA6IFBSRU1BVFVSRV9DTE9TRSkpKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkZXN0XG5cbiAgZnVuY3Rpb24gZXJyb3JIYW5kbGUgKHMsIHJkLCB3ciwgb25lcnJvcikge1xuICAgIHMub24oJ2Vycm9yJywgb25lcnJvcilcbiAgICBzLm9uKCdjbG9zZScsIG9uY2xvc2UpXG5cbiAgICBmdW5jdGlvbiBvbmNsb3NlICgpIHtcbiAgICAgIGlmIChyZCAmJiBzLl9yZWFkYWJsZVN0YXRlICYmICFzLl9yZWFkYWJsZVN0YXRlLmVuZGVkKSByZXR1cm4gb25lcnJvcihQUkVNQVRVUkVfQ0xPU0UpXG4gICAgICBpZiAod3IgJiYgcy5fd3JpdGFibGVTdGF0ZSAmJiAhcy5fd3JpdGFibGVTdGF0ZS5lbmRlZCkgcmV0dXJuIG9uZXJyb3IoUFJFTUFUVVJFX0NMT1NFKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG9uZXJyb3IgKGVycikge1xuICAgIGlmICghZXJyIHx8IGVycm9yKSByZXR1cm5cbiAgICBlcnJvciA9IGVyclxuXG4gICAgZm9yIChjb25zdCBzIG9mIGFsbCkge1xuICAgICAgcy5kZXN0cm95KGVycilcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZWNobyAocykge1xuICByZXR1cm4gc1xufVxuXG5mdW5jdGlvbiBpc1N0cmVhbSAoc3RyZWFtKSB7XG4gIHJldHVybiAhIXN0cmVhbS5fcmVhZGFibGVTdGF0ZSB8fCAhIXN0cmVhbS5fd3JpdGFibGVTdGF0ZVxufVxuXG5mdW5jdGlvbiBpc1N0cmVhbXggKHN0cmVhbSkge1xuICByZXR1cm4gdHlwZW9mIHN0cmVhbS5fZHVwbGV4U3RhdGUgPT09ICdudW1iZXInICYmIGlzU3RyZWFtKHN0cmVhbSlcbn1cblxuZnVuY3Rpb24gaXNFbmRlZCAoc3RyZWFtKSB7XG4gIHJldHVybiAhIXN0cmVhbS5fcmVhZGFibGVTdGF0ZSAmJiBzdHJlYW0uX3JlYWRhYmxlU3RhdGUuZW5kZWRcbn1cblxuZnVuY3Rpb24gaXNGaW5pc2hlZCAoc3RyZWFtKSB7XG4gIHJldHVybiAhIXN0cmVhbS5fd3JpdGFibGVTdGF0ZSAmJiBzdHJlYW0uX3dyaXRhYmxlU3RhdGUuZW5kZWRcbn1cblxuZnVuY3Rpb24gZ2V0U3RyZWFtRXJyb3IgKHN0cmVhbSwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IGVyciA9IChzdHJlYW0uX3JlYWRhYmxlU3RhdGUgJiYgc3RyZWFtLl9yZWFkYWJsZVN0YXRlLmVycm9yKSB8fCAoc3RyZWFtLl93cml0YWJsZVN0YXRlICYmIHN0cmVhbS5fd3JpdGFibGVTdGF0ZS5lcnJvcilcblxuICAvLyBhdm9pZCBpbXBsaWNpdCBlcnJvcnMgYnkgZGVmYXVsdFxuICByZXR1cm4gKCFvcHRzLmFsbCAmJiBlcnIgPT09IFNUUkVBTV9ERVNUUk9ZRUQpID8gbnVsbCA6IGVyclxufVxuXG5mdW5jdGlvbiBpc1JlYWRTdHJlYW14IChzdHJlYW0pIHtcbiAgcmV0dXJuIGlzU3RyZWFteChzdHJlYW0pICYmIHN0cmVhbS5yZWFkYWJsZVxufVxuXG5mdW5jdGlvbiBpc1R5cGVkQXJyYXkgKGRhdGEpIHtcbiAgcmV0dXJuIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyAmJiBkYXRhICE9PSBudWxsICYmIHR5cGVvZiBkYXRhLmJ5dGVMZW5ndGggPT09ICdudW1iZXInXG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRCeXRlTGVuZ3RoIChkYXRhKSB7XG4gIHJldHVybiBpc1R5cGVkQXJyYXkoZGF0YSkgPyBkYXRhLmJ5dGVMZW5ndGggOiAxMDI0XG59XG5cbmZ1bmN0aW9uIG5vb3AgKCkge31cblxuZnVuY3Rpb24gYWJvcnQgKCkge1xuICB0aGlzLmRlc3Ryb3kobmV3IEVycm9yKCdTdHJlYW0gYWJvcnRlZC4nKSlcbn1cblxuZnVuY3Rpb24gaXNXcml0ZXYgKHMpIHtcbiAgcmV0dXJuIHMuX3dyaXRldiAhPT0gV3JpdGFibGUucHJvdG90eXBlLl93cml0ZXYgJiYgcy5fd3JpdGV2ICE9PSBEdXBsZXgucHJvdG90eXBlLl93cml0ZXZcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHBpcGVsaW5lLFxuICBwaXBlbGluZVByb21pc2UsXG4gIGlzU3RyZWFtLFxuICBpc1N0cmVhbXgsXG4gIGlzRW5kZWQsXG4gIGlzRmluaXNoZWQsXG4gIGdldFN0cmVhbUVycm9yLFxuICBTdHJlYW0sXG4gIFdyaXRhYmxlLFxuICBSZWFkYWJsZSxcbiAgRHVwbGV4LFxuICBUcmFuc2Zvcm0sXG4gIC8vIEV4cG9ydCBQYXNzVGhyb3VnaCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIE5vZGUuanMgY29yZSdzIHN0cmVhbSBtb2R1bGVcbiAgUGFzc1Rocm91Z2hcbn1cbiIsCiAgICAiZnVuY3Rpb24gaXNCdWZmZXIgKHZhbHVlKSB7XG4gIHJldHVybiBCdWZmZXIuaXNCdWZmZXIodmFsdWUpIHx8IHZhbHVlIGluc3RhbmNlb2YgVWludDhBcnJheVxufVxuXG5mdW5jdGlvbiBpc0VuY29kaW5nIChlbmNvZGluZykge1xuICByZXR1cm4gQnVmZmVyLmlzRW5jb2RpbmcoZW5jb2RpbmcpXG59XG5cbmZ1bmN0aW9uIGFsbG9jIChzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICByZXR1cm4gQnVmZmVyLmFsbG9jKHNpemUsIGZpbGwsIGVuY29kaW5nKVxufVxuXG5mdW5jdGlvbiBhbGxvY1Vuc2FmZSAoc2l6ZSkge1xuICByZXR1cm4gQnVmZmVyLmFsbG9jVW5zYWZlKHNpemUpXG59XG5cbmZ1bmN0aW9uIGFsbG9jVW5zYWZlU2xvdyAoc2l6ZSkge1xuICByZXR1cm4gQnVmZmVyLmFsbG9jVW5zYWZlU2xvdyhzaXplKVxufVxuXG5mdW5jdGlvbiBieXRlTGVuZ3RoIChzdHJpbmcsIGVuY29kaW5nKSB7XG4gIHJldHVybiBCdWZmZXIuYnl0ZUxlbmd0aChzdHJpbmcsIGVuY29kaW5nKVxufVxuXG5mdW5jdGlvbiBjb21wYXJlIChhLCBiKSB7XG4gIHJldHVybiBCdWZmZXIuY29tcGFyZShhLCBiKVxufVxuXG5mdW5jdGlvbiBjb25jYXQgKGJ1ZmZlcnMsIHRvdGFsTGVuZ3RoKSB7XG4gIHJldHVybiBCdWZmZXIuY29uY2F0KGJ1ZmZlcnMsIHRvdGFsTGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBjb3B5IChzb3VyY2UsIHRhcmdldCwgdGFyZ2V0U3RhcnQsIHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIHRvQnVmZmVyKHNvdXJjZSkuY29weSh0YXJnZXQsIHRhcmdldFN0YXJ0LCBzdGFydCwgZW5kKVxufVxuXG5mdW5jdGlvbiBlcXVhbHMgKGEsIGIpIHtcbiAgcmV0dXJuIHRvQnVmZmVyKGEpLmVxdWFscyhiKVxufVxuXG5mdW5jdGlvbiBmaWxsIChidWZmZXIsIHZhbHVlLCBvZmZzZXQsIGVuZCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIHRvQnVmZmVyKGJ1ZmZlcikuZmlsbCh2YWx1ZSwgb2Zmc2V0LCBlbmQsIGVuY29kaW5nKVxufVxuXG5mdW5jdGlvbiBmcm9tICh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBCdWZmZXIuZnJvbSh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBpbmNsdWRlcyAoYnVmZmVyLCB2YWx1ZSwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIHRvQnVmZmVyKGJ1ZmZlcikuaW5jbHVkZXModmFsdWUsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKVxufVxuXG5mdW5jdGlvbiBpbmRleE9mIChidWZmZXIsIHZhbHVlLCBieWZlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gdG9CdWZmZXIoYnVmZmVyKS5pbmRleE9mKHZhbHVlLCBieWZlT2Zmc2V0LCBlbmNvZGluZylcbn1cblxuZnVuY3Rpb24gbGFzdEluZGV4T2YgKGJ1ZmZlciwgdmFsdWUsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiB0b0J1ZmZlcihidWZmZXIpLmxhc3RJbmRleE9mKHZhbHVlLCBieXRlT2Zmc2V0LCBlbmNvZGluZylcbn1cblxuZnVuY3Rpb24gc3dhcDE2IChidWZmZXIpIHtcbiAgcmV0dXJuIHRvQnVmZmVyKGJ1ZmZlcikuc3dhcDE2KClcbn1cblxuZnVuY3Rpb24gc3dhcDMyIChidWZmZXIpIHtcbiAgcmV0dXJuIHRvQnVmZmVyKGJ1ZmZlcikuc3dhcDMyKClcbn1cblxuZnVuY3Rpb24gc3dhcDY0IChidWZmZXIpIHtcbiAgcmV0dXJuIHRvQnVmZmVyKGJ1ZmZlcikuc3dhcDY0KClcbn1cblxuZnVuY3Rpb24gdG9CdWZmZXIgKGJ1ZmZlcikge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKGJ1ZmZlcikpIHJldHVybiBidWZmZXJcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKGJ1ZmZlci5idWZmZXIsIGJ1ZmZlci5ieXRlT2Zmc2V0LCBidWZmZXIuYnl0ZUxlbmd0aClcbn1cblxuZnVuY3Rpb24gdG9TdHJpbmcgKGJ1ZmZlciwgZW5jb2RpbmcsIHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIHRvQnVmZmVyKGJ1ZmZlcikudG9TdHJpbmcoZW5jb2RpbmcsIHN0YXJ0LCBlbmQpXG59XG5cbmZ1bmN0aW9uIHdyaXRlIChidWZmZXIsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgsIGVuY29kaW5nKSB7XG4gIHJldHVybiB0b0J1ZmZlcihidWZmZXIpLndyaXRlKHN0cmluZywgb2Zmc2V0LCBsZW5ndGgsIGVuY29kaW5nKVxufVxuXG5mdW5jdGlvbiB3cml0ZURvdWJsZUxFIChidWZmZXIsIHZhbHVlLCBvZmZzZXQpIHtcbiAgcmV0dXJuIHRvQnVmZmVyKGJ1ZmZlcikud3JpdGVEb3VibGVMRSh2YWx1ZSwgb2Zmc2V0KVxufVxuXG5mdW5jdGlvbiB3cml0ZUZsb2F0TEUgKGJ1ZmZlciwgdmFsdWUsIG9mZnNldCkge1xuICByZXR1cm4gdG9CdWZmZXIoYnVmZmVyKS53cml0ZUZsb2F0TEUodmFsdWUsIG9mZnNldClcbn1cblxuZnVuY3Rpb24gd3JpdGVVSW50MzJMRSAoYnVmZmVyLCB2YWx1ZSwgb2Zmc2V0KSB7XG4gIHJldHVybiB0b0J1ZmZlcihidWZmZXIpLndyaXRlVUludDMyTEUodmFsdWUsIG9mZnNldClcbn1cblxuZnVuY3Rpb24gd3JpdGVJbnQzMkxFIChidWZmZXIsIHZhbHVlLCBvZmZzZXQpIHtcbiAgcmV0dXJuIHRvQnVmZmVyKGJ1ZmZlcikud3JpdGVJbnQzMkxFKHZhbHVlLCBvZmZzZXQpXG59XG5cbmZ1bmN0aW9uIHJlYWREb3VibGVMRSAoYnVmZmVyLCBvZmZzZXQpIHtcbiAgcmV0dXJuIHRvQnVmZmVyKGJ1ZmZlcikucmVhZERvdWJsZUxFKG9mZnNldClcbn1cblxuZnVuY3Rpb24gcmVhZEZsb2F0TEUgKGJ1ZmZlciwgb2Zmc2V0KSB7XG4gIHJldHVybiB0b0J1ZmZlcihidWZmZXIpLnJlYWRGbG9hdExFKG9mZnNldClcbn1cblxuZnVuY3Rpb24gcmVhZFVJbnQzMkxFIChidWZmZXIsIG9mZnNldCkge1xuICByZXR1cm4gdG9CdWZmZXIoYnVmZmVyKS5yZWFkVUludDMyTEUob2Zmc2V0KVxufVxuXG5mdW5jdGlvbiByZWFkSW50MzJMRSAoYnVmZmVyLCBvZmZzZXQpIHtcbiAgcmV0dXJuIHRvQnVmZmVyKGJ1ZmZlcikucmVhZEludDMyTEUob2Zmc2V0KVxufVxuXG5mdW5jdGlvbiB3cml0ZURvdWJsZUJFIChidWZmZXIsIHZhbHVlLCBvZmZzZXQpIHtcbiAgcmV0dXJuIHRvQnVmZmVyKGJ1ZmZlcikud3JpdGVEb3VibGVCRSh2YWx1ZSwgb2Zmc2V0KVxufVxuXG5mdW5jdGlvbiB3cml0ZUZsb2F0QkUgKGJ1ZmZlciwgdmFsdWUsIG9mZnNldCkge1xuICByZXR1cm4gdG9CdWZmZXIoYnVmZmVyKS53cml0ZUZsb2F0QkUodmFsdWUsIG9mZnNldClcbn1cblxuZnVuY3Rpb24gd3JpdGVVSW50MzJCRSAoYnVmZmVyLCB2YWx1ZSwgb2Zmc2V0KSB7XG4gIHJldHVybiB0b0J1ZmZlcihidWZmZXIpLndyaXRlVUludDMyQkUodmFsdWUsIG9mZnNldClcbn1cblxuZnVuY3Rpb24gd3JpdGVJbnQzMkJFIChidWZmZXIsIHZhbHVlLCBvZmZzZXQpIHtcbiAgcmV0dXJuIHRvQnVmZmVyKGJ1ZmZlcikud3JpdGVJbnQzMkJFKHZhbHVlLCBvZmZzZXQpXG59XG5cbmZ1bmN0aW9uIHJlYWREb3VibGVCRSAoYnVmZmVyLCBvZmZzZXQpIHtcbiAgcmV0dXJuIHRvQnVmZmVyKGJ1ZmZlcikucmVhZERvdWJsZUJFKG9mZnNldClcbn1cblxuZnVuY3Rpb24gcmVhZEZsb2F0QkUgKGJ1ZmZlciwgb2Zmc2V0KSB7XG4gIHJldHVybiB0b0J1ZmZlcihidWZmZXIpLnJlYWRGbG9hdEJFKG9mZnNldClcbn1cblxuZnVuY3Rpb24gcmVhZFVJbnQzMkJFIChidWZmZXIsIG9mZnNldCkge1xuICByZXR1cm4gdG9CdWZmZXIoYnVmZmVyKS5yZWFkVUludDMyQkUob2Zmc2V0KVxufVxuXG5mdW5jdGlvbiByZWFkSW50MzJCRSAoYnVmZmVyLCBvZmZzZXQpIHtcbiAgcmV0dXJuIHRvQnVmZmVyKGJ1ZmZlcikucmVhZEludDMyQkUob2Zmc2V0KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXNCdWZmZXIsXG4gIGlzRW5jb2RpbmcsXG4gIGFsbG9jLFxuICBhbGxvY1Vuc2FmZSxcbiAgYWxsb2NVbnNhZmVTbG93LFxuICBieXRlTGVuZ3RoLFxuICBjb21wYXJlLFxuICBjb25jYXQsXG4gIGNvcHksXG4gIGVxdWFscyxcbiAgZmlsbCxcbiAgZnJvbSxcbiAgaW5jbHVkZXMsXG4gIGluZGV4T2YsXG4gIGxhc3RJbmRleE9mLFxuICBzd2FwMTYsXG4gIHN3YXAzMixcbiAgc3dhcDY0LFxuICB0b0J1ZmZlcixcbiAgdG9TdHJpbmcsXG4gIHdyaXRlLFxuICB3cml0ZURvdWJsZUxFLFxuICB3cml0ZUZsb2F0TEUsXG4gIHdyaXRlVUludDMyTEUsXG4gIHdyaXRlSW50MzJMRSxcbiAgcmVhZERvdWJsZUxFLFxuICByZWFkRmxvYXRMRSxcbiAgcmVhZFVJbnQzMkxFLFxuICByZWFkSW50MzJMRSxcbiAgd3JpdGVEb3VibGVCRSxcbiAgd3JpdGVGbG9hdEJFLFxuICB3cml0ZVVJbnQzMkJFLFxuICB3cml0ZUludDMyQkUsXG4gIHJlYWREb3VibGVCRSxcbiAgcmVhZEZsb2F0QkUsXG4gIHJlYWRVSW50MzJCRSxcbiAgcmVhZEludDMyQkVcblxufVxuIiwKICAgICJjb25zdCBiNGEgPSByZXF1aXJlKCdiNGEnKVxuXG5jb25zdCBaRVJPUyA9ICcwMDAwMDAwMDAwMDAwMDAwMDAwJ1xuY29uc3QgU0VWRU5TID0gJzc3Nzc3Nzc3Nzc3Nzc3Nzc3NzcnXG5jb25zdCBaRVJPX09GRlNFVCA9ICcwJy5jaGFyQ29kZUF0KDApXG5jb25zdCBVU1RBUl9NQUdJQyA9IGI0YS5mcm9tKFsweDc1LCAweDczLCAweDc0LCAweDYxLCAweDcyLCAweDAwXSkgLy8gdXN0YXJcXHgwMFxuY29uc3QgVVNUQVJfVkVSID0gYjRhLmZyb20oW1pFUk9fT0ZGU0VULCBaRVJPX09GRlNFVF0pXG5jb25zdCBHTlVfTUFHSUMgPSBiNGEuZnJvbShbMHg3NSwgMHg3MywgMHg3NCwgMHg2MSwgMHg3MiwgMHgyMF0pIC8vIHVzdGFyXFx4MjBcbmNvbnN0IEdOVV9WRVIgPSBiNGEuZnJvbShbMHgyMCwgMHgwMF0pXG5jb25zdCBNQVNLID0gMG83Nzc3XG5jb25zdCBNQUdJQ19PRkZTRVQgPSAyNTdcbmNvbnN0IFZFUlNJT05fT0ZGU0VUID0gMjYzXG5cbmV4cG9ydHMuZGVjb2RlTG9uZ1BhdGggPSBmdW5jdGlvbiBkZWNvZGVMb25nUGF0aCAoYnVmLCBlbmNvZGluZykge1xuICByZXR1cm4gZGVjb2RlU3RyKGJ1ZiwgMCwgYnVmLmxlbmd0aCwgZW5jb2RpbmcpXG59XG5cbmV4cG9ydHMuZW5jb2RlUGF4ID0gZnVuY3Rpb24gZW5jb2RlUGF4IChvcHRzKSB7IC8vIFRPRE86IGVuY29kZSBtb3JlIHN0dWZmIGluIHBheFxuICBsZXQgcmVzdWx0ID0gJydcbiAgaWYgKG9wdHMubmFtZSkgcmVzdWx0ICs9IGFkZExlbmd0aCgnIHBhdGg9JyArIG9wdHMubmFtZSArICdcXG4nKVxuICBpZiAob3B0cy5saW5rbmFtZSkgcmVzdWx0ICs9IGFkZExlbmd0aCgnIGxpbmtwYXRoPScgKyBvcHRzLmxpbmtuYW1lICsgJ1xcbicpXG4gIGNvbnN0IHBheCA9IG9wdHMucGF4XG4gIGlmIChwYXgpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBwYXgpIHtcbiAgICAgIHJlc3VsdCArPSBhZGRMZW5ndGgoJyAnICsga2V5ICsgJz0nICsgcGF4W2tleV0gKyAnXFxuJylcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGI0YS5mcm9tKHJlc3VsdClcbn1cblxuZXhwb3J0cy5kZWNvZGVQYXggPSBmdW5jdGlvbiBkZWNvZGVQYXggKGJ1Zikge1xuICBjb25zdCByZXN1bHQgPSB7fVxuXG4gIHdoaWxlIChidWYubGVuZ3RoKSB7XG4gICAgbGV0IGkgPSAwXG4gICAgd2hpbGUgKGkgPCBidWYubGVuZ3RoICYmIGJ1ZltpXSAhPT0gMzIpIGkrK1xuICAgIGNvbnN0IGxlbiA9IHBhcnNlSW50KGI0YS50b1N0cmluZyhidWYuc3ViYXJyYXkoMCwgaSkpLCAxMClcbiAgICBpZiAoIWxlbikgcmV0dXJuIHJlc3VsdFxuXG4gICAgY29uc3QgYiA9IGI0YS50b1N0cmluZyhidWYuc3ViYXJyYXkoaSArIDEsIGxlbiAtIDEpKVxuICAgIGNvbnN0IGtleUluZGV4ID0gYi5pbmRleE9mKCc9JylcbiAgICBpZiAoa2V5SW5kZXggPT09IC0xKSByZXR1cm4gcmVzdWx0XG4gICAgcmVzdWx0W2Iuc2xpY2UoMCwga2V5SW5kZXgpXSA9IGIuc2xpY2Uoa2V5SW5kZXggKyAxKVxuXG4gICAgYnVmID0gYnVmLnN1YmFycmF5KGxlbilcbiAgfVxuXG4gIHJldHVybiByZXN1bHRcbn1cblxuZXhwb3J0cy5lbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUgKG9wdHMpIHtcbiAgY29uc3QgYnVmID0gYjRhLmFsbG9jKDUxMilcbiAgbGV0IG5hbWUgPSBvcHRzLm5hbWVcbiAgbGV0IHByZWZpeCA9ICcnXG5cbiAgaWYgKG9wdHMudHlwZWZsYWcgPT09IDUgJiYgbmFtZVtuYW1lLmxlbmd0aCAtIDFdICE9PSAnLycpIG5hbWUgKz0gJy8nXG4gIGlmIChiNGEuYnl0ZUxlbmd0aChuYW1lKSAhPT0gbmFtZS5sZW5ndGgpIHJldHVybiBudWxsIC8vIHV0Zi04XG5cbiAgd2hpbGUgKGI0YS5ieXRlTGVuZ3RoKG5hbWUpID4gMTAwKSB7XG4gICAgY29uc3QgaSA9IG5hbWUuaW5kZXhPZignLycpXG4gICAgaWYgKGkgPT09IC0xKSByZXR1cm4gbnVsbFxuICAgIHByZWZpeCArPSBwcmVmaXggPyAnLycgKyBuYW1lLnNsaWNlKDAsIGkpIDogbmFtZS5zbGljZSgwLCBpKVxuICAgIG5hbWUgPSBuYW1lLnNsaWNlKGkgKyAxKVxuICB9XG5cbiAgaWYgKGI0YS5ieXRlTGVuZ3RoKG5hbWUpID4gMTAwIHx8IGI0YS5ieXRlTGVuZ3RoKHByZWZpeCkgPiAxNTUpIHJldHVybiBudWxsXG4gIGlmIChvcHRzLmxpbmtuYW1lICYmIGI0YS5ieXRlTGVuZ3RoKG9wdHMubGlua25hbWUpID4gMTAwKSByZXR1cm4gbnVsbFxuXG4gIGI0YS53cml0ZShidWYsIG5hbWUpXG4gIGI0YS53cml0ZShidWYsIGVuY29kZU9jdChvcHRzLm1vZGUgJiBNQVNLLCA2KSwgMTAwKVxuICBiNGEud3JpdGUoYnVmLCBlbmNvZGVPY3Qob3B0cy51aWQsIDYpLCAxMDgpXG4gIGI0YS53cml0ZShidWYsIGVuY29kZU9jdChvcHRzLmdpZCwgNiksIDExNilcbiAgZW5jb2RlU2l6ZShvcHRzLnNpemUsIGJ1ZiwgMTI0KVxuICBiNGEud3JpdGUoYnVmLCBlbmNvZGVPY3QoKG9wdHMubXRpbWUuZ2V0VGltZSgpIC8gMTAwMCkgfCAwLCAxMSksIDEzNilcblxuICBidWZbMTU2XSA9IFpFUk9fT0ZGU0VUICsgdG9UeXBlZmxhZyhvcHRzLnR5cGUpXG5cbiAgaWYgKG9wdHMubGlua25hbWUpIGI0YS53cml0ZShidWYsIG9wdHMubGlua25hbWUsIDE1NylcblxuICBiNGEuY29weShVU1RBUl9NQUdJQywgYnVmLCBNQUdJQ19PRkZTRVQpXG4gIGI0YS5jb3B5KFVTVEFSX1ZFUiwgYnVmLCBWRVJTSU9OX09GRlNFVClcbiAgaWYgKG9wdHMudW5hbWUpIGI0YS53cml0ZShidWYsIG9wdHMudW5hbWUsIDI2NSlcbiAgaWYgKG9wdHMuZ25hbWUpIGI0YS53cml0ZShidWYsIG9wdHMuZ25hbWUsIDI5NylcbiAgYjRhLndyaXRlKGJ1ZiwgZW5jb2RlT2N0KG9wdHMuZGV2bWFqb3IgfHwgMCwgNiksIDMyOSlcbiAgYjRhLndyaXRlKGJ1ZiwgZW5jb2RlT2N0KG9wdHMuZGV2bWlub3IgfHwgMCwgNiksIDMzNylcblxuICBpZiAocHJlZml4KSBiNGEud3JpdGUoYnVmLCBwcmVmaXgsIDM0NSlcblxuICBiNGEud3JpdGUoYnVmLCBlbmNvZGVPY3QoY2tzdW0oYnVmKSwgNiksIDE0OClcblxuICByZXR1cm4gYnVmXG59XG5cbmV4cG9ydHMuZGVjb2RlID0gZnVuY3Rpb24gZGVjb2RlIChidWYsIGZpbGVuYW1lRW5jb2RpbmcsIGFsbG93VW5rbm93bkZvcm1hdCkge1xuICBsZXQgdHlwZWZsYWcgPSBidWZbMTU2XSA9PT0gMCA/IDAgOiBidWZbMTU2XSAtIFpFUk9fT0ZGU0VUXG5cbiAgbGV0IG5hbWUgPSBkZWNvZGVTdHIoYnVmLCAwLCAxMDAsIGZpbGVuYW1lRW5jb2RpbmcpXG4gIGNvbnN0IG1vZGUgPSBkZWNvZGVPY3QoYnVmLCAxMDAsIDgpXG4gIGNvbnN0IHVpZCA9IGRlY29kZU9jdChidWYsIDEwOCwgOClcbiAgY29uc3QgZ2lkID0gZGVjb2RlT2N0KGJ1ZiwgMTE2LCA4KVxuICBjb25zdCBzaXplID0gZGVjb2RlT2N0KGJ1ZiwgMTI0LCAxMilcbiAgY29uc3QgbXRpbWUgPSBkZWNvZGVPY3QoYnVmLCAxMzYsIDEyKVxuICBjb25zdCB0eXBlID0gdG9UeXBlKHR5cGVmbGFnKVxuICBjb25zdCBsaW5rbmFtZSA9IGJ1ZlsxNTddID09PSAwID8gbnVsbCA6IGRlY29kZVN0cihidWYsIDE1NywgMTAwLCBmaWxlbmFtZUVuY29kaW5nKVxuICBjb25zdCB1bmFtZSA9IGRlY29kZVN0cihidWYsIDI2NSwgMzIpXG4gIGNvbnN0IGduYW1lID0gZGVjb2RlU3RyKGJ1ZiwgMjk3LCAzMilcbiAgY29uc3QgZGV2bWFqb3IgPSBkZWNvZGVPY3QoYnVmLCAzMjksIDgpXG4gIGNvbnN0IGRldm1pbm9yID0gZGVjb2RlT2N0KGJ1ZiwgMzM3LCA4KVxuXG4gIGNvbnN0IGMgPSBja3N1bShidWYpXG5cbiAgLy8gY2hlY2tzdW0gaXMgc3RpbGwgaW5pdGlhbCB2YWx1ZSBpZiBoZWFkZXIgd2FzIG51bGwuXG4gIGlmIChjID09PSA4ICogMzIpIHJldHVybiBudWxsXG5cbiAgLy8gdmFsaWQgY2hlY2tzdW1cbiAgaWYgKGMgIT09IGRlY29kZU9jdChidWYsIDE0OCwgOCkpIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB0YXIgaGVhZGVyLiBNYXliZSB0aGUgdGFyIGlzIGNvcnJ1cHRlZCBvciBpdCBuZWVkcyB0byBiZSBndW56aXBwZWQ/JylcblxuICBpZiAoaXNVU1RBUihidWYpKSB7XG4gICAgLy8gdXN0YXIgKHBvc2l4KSBmb3JtYXQuXG4gICAgLy8gcHJlcGVuZCBwcmVmaXgsIGlmIHByZXNlbnQuXG4gICAgaWYgKGJ1ZlszNDVdKSBuYW1lID0gZGVjb2RlU3RyKGJ1ZiwgMzQ1LCAxNTUsIGZpbGVuYW1lRW5jb2RpbmcpICsgJy8nICsgbmFtZVxuICB9IGVsc2UgaWYgKGlzR05VKGJ1ZikpIHtcbiAgICAvLyAnZ251Jy8nb2xkZ251JyBmb3JtYXQuIFNpbWlsYXIgdG8gdXN0YXIsIGJ1dCBoYXMgc3VwcG9ydCBmb3IgaW5jcmVtZW50YWwgYW5kXG4gICAgLy8gbXVsdGktdm9sdW1lIHRhcmJhbGxzLlxuICB9IGVsc2Uge1xuICAgIGlmICghYWxsb3dVbmtub3duRm9ybWF0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdGFyIGhlYWRlcjogdW5rbm93biBmb3JtYXQuJylcbiAgICB9XG4gIH1cblxuICAvLyB0byBzdXBwb3J0IG9sZCB0YXIgdmVyc2lvbnMgdGhhdCB1c2UgdHJhaWxpbmcgLyB0byBpbmRpY2F0ZSBkaXJzXG4gIGlmICh0eXBlZmxhZyA9PT0gMCAmJiBuYW1lICYmIG5hbWVbbmFtZS5sZW5ndGggLSAxXSA9PT0gJy8nKSB0eXBlZmxhZyA9IDVcblxuICByZXR1cm4ge1xuICAgIG5hbWUsXG4gICAgbW9kZSxcbiAgICB1aWQsXG4gICAgZ2lkLFxuICAgIHNpemUsXG4gICAgbXRpbWU6IG5ldyBEYXRlKDEwMDAgKiBtdGltZSksXG4gICAgdHlwZSxcbiAgICBsaW5rbmFtZSxcbiAgICB1bmFtZSxcbiAgICBnbmFtZSxcbiAgICBkZXZtYWpvcixcbiAgICBkZXZtaW5vcixcbiAgICBwYXg6IG51bGxcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1VTVEFSIChidWYpIHtcbiAgcmV0dXJuIGI0YS5lcXVhbHMoVVNUQVJfTUFHSUMsIGJ1Zi5zdWJhcnJheShNQUdJQ19PRkZTRVQsIE1BR0lDX09GRlNFVCArIDYpKVxufVxuXG5mdW5jdGlvbiBpc0dOVSAoYnVmKSB7XG4gIHJldHVybiBiNGEuZXF1YWxzKEdOVV9NQUdJQywgYnVmLnN1YmFycmF5KE1BR0lDX09GRlNFVCwgTUFHSUNfT0ZGU0VUICsgNikpICYmXG4gICAgYjRhLmVxdWFscyhHTlVfVkVSLCBidWYuc3ViYXJyYXkoVkVSU0lPTl9PRkZTRVQsIFZFUlNJT05fT0ZGU0VUICsgMikpXG59XG5cbmZ1bmN0aW9uIGNsYW1wIChpbmRleCwgbGVuLCBkZWZhdWx0VmFsdWUpIHtcbiAgaWYgKHR5cGVvZiBpbmRleCAhPT0gJ251bWJlcicpIHJldHVybiBkZWZhdWx0VmFsdWVcbiAgaW5kZXggPSB+fmluZGV4IC8vIENvZXJjZSB0byBpbnRlZ2VyLlxuICBpZiAoaW5kZXggPj0gbGVuKSByZXR1cm4gbGVuXG4gIGlmIChpbmRleCA+PSAwKSByZXR1cm4gaW5kZXhcbiAgaW5kZXggKz0gbGVuXG4gIGlmIChpbmRleCA+PSAwKSByZXR1cm4gaW5kZXhcbiAgcmV0dXJuIDBcbn1cblxuZnVuY3Rpb24gdG9UeXBlIChmbGFnKSB7XG4gIHN3aXRjaCAoZmxhZykge1xuICAgIGNhc2UgMDpcbiAgICAgIHJldHVybiAnZmlsZSdcbiAgICBjYXNlIDE6XG4gICAgICByZXR1cm4gJ2xpbmsnXG4gICAgY2FzZSAyOlxuICAgICAgcmV0dXJuICdzeW1saW5rJ1xuICAgIGNhc2UgMzpcbiAgICAgIHJldHVybiAnY2hhcmFjdGVyLWRldmljZSdcbiAgICBjYXNlIDQ6XG4gICAgICByZXR1cm4gJ2Jsb2NrLWRldmljZSdcbiAgICBjYXNlIDU6XG4gICAgICByZXR1cm4gJ2RpcmVjdG9yeSdcbiAgICBjYXNlIDY6XG4gICAgICByZXR1cm4gJ2ZpZm8nXG4gICAgY2FzZSA3OlxuICAgICAgcmV0dXJuICdjb250aWd1b3VzLWZpbGUnXG4gICAgY2FzZSA3MjpcbiAgICAgIHJldHVybiAncGF4LWhlYWRlcidcbiAgICBjYXNlIDU1OlxuICAgICAgcmV0dXJuICdwYXgtZ2xvYmFsLWhlYWRlcidcbiAgICBjYXNlIDI3OlxuICAgICAgcmV0dXJuICdnbnUtbG9uZy1saW5rLXBhdGgnXG4gICAgY2FzZSAyODpcbiAgICBjYXNlIDMwOlxuICAgICAgcmV0dXJuICdnbnUtbG9uZy1wYXRoJ1xuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuZnVuY3Rpb24gdG9UeXBlZmxhZyAoZmxhZykge1xuICBzd2l0Y2ggKGZsYWcpIHtcbiAgICBjYXNlICdmaWxlJzpcbiAgICAgIHJldHVybiAwXG4gICAgY2FzZSAnbGluayc6XG4gICAgICByZXR1cm4gMVxuICAgIGNhc2UgJ3N5bWxpbmsnOlxuICAgICAgcmV0dXJuIDJcbiAgICBjYXNlICdjaGFyYWN0ZXItZGV2aWNlJzpcbiAgICAgIHJldHVybiAzXG4gICAgY2FzZSAnYmxvY2stZGV2aWNlJzpcbiAgICAgIHJldHVybiA0XG4gICAgY2FzZSAnZGlyZWN0b3J5JzpcbiAgICAgIHJldHVybiA1XG4gICAgY2FzZSAnZmlmbyc6XG4gICAgICByZXR1cm4gNlxuICAgIGNhc2UgJ2NvbnRpZ3VvdXMtZmlsZSc6XG4gICAgICByZXR1cm4gN1xuICAgIGNhc2UgJ3BheC1oZWFkZXInOlxuICAgICAgcmV0dXJuIDcyXG4gIH1cblxuICByZXR1cm4gMFxufVxuXG5mdW5jdGlvbiBpbmRleE9mIChibG9jaywgbnVtLCBvZmZzZXQsIGVuZCkge1xuICBmb3IgKDsgb2Zmc2V0IDwgZW5kOyBvZmZzZXQrKykge1xuICAgIGlmIChibG9ja1tvZmZzZXRdID09PSBudW0pIHJldHVybiBvZmZzZXRcbiAgfVxuICByZXR1cm4gZW5kXG59XG5cbmZ1bmN0aW9uIGNrc3VtIChibG9jaykge1xuICBsZXQgc3VtID0gOCAqIDMyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMTQ4OyBpKyspIHN1bSArPSBibG9ja1tpXVxuICBmb3IgKGxldCBqID0gMTU2OyBqIDwgNTEyOyBqKyspIHN1bSArPSBibG9ja1tqXVxuICByZXR1cm4gc3VtXG59XG5cbmZ1bmN0aW9uIGVuY29kZU9jdCAodmFsLCBuKSB7XG4gIHZhbCA9IHZhbC50b1N0cmluZyg4KVxuICBpZiAodmFsLmxlbmd0aCA+IG4pIHJldHVybiBTRVZFTlMuc2xpY2UoMCwgbikgKyAnICdcbiAgcmV0dXJuIFpFUk9TLnNsaWNlKDAsIG4gLSB2YWwubGVuZ3RoKSArIHZhbCArICcgJ1xufVxuXG5mdW5jdGlvbiBlbmNvZGVTaXplQmluIChudW0sIGJ1Ziwgb2ZmKSB7XG4gIGJ1ZltvZmZdID0gMHg4MFxuICBmb3IgKGxldCBpID0gMTE7IGkgPiAwOyBpLS0pIHtcbiAgICBidWZbb2ZmICsgaV0gPSBudW0gJiAweGZmXG4gICAgbnVtID0gTWF0aC5mbG9vcihudW0gLyAweDEwMClcbiAgfVxufVxuXG5mdW5jdGlvbiBlbmNvZGVTaXplIChudW0sIGJ1Ziwgb2ZmKSB7XG4gIGlmIChudW0udG9TdHJpbmcoOCkubGVuZ3RoID4gMTEpIHtcbiAgICBlbmNvZGVTaXplQmluKG51bSwgYnVmLCBvZmYpXG4gIH0gZWxzZSB7XG4gICAgYjRhLndyaXRlKGJ1ZiwgZW5jb2RlT2N0KG51bSwgMTEpLCBvZmYpXG4gIH1cbn1cblxuLyogQ29waWVkIGZyb20gdGhlIG5vZGUtdGFyIHJlcG8gYW5kIG1vZGlmaWVkIHRvIG1lZXRcbiAqIHRhci1zdHJlYW0gY29kaW5nIHN0YW5kYXJkLlxuICpcbiAqIFNvdXJjZTogaHR0cHM6Ly9naXRodWIuY29tL25wbS9ub2RlLXRhci9ibG9iLzUxYjY2MjdhMWYzNTdkMmViNDMzZTczNzhlNWYwNWU4M2I3YWE2Y2QvbGliL2hlYWRlci5qcyNMMzQ5XG4gKi9cbmZ1bmN0aW9uIHBhcnNlMjU2IChidWYpIHtcbiAgLy8gZmlyc3QgYnl0ZSBNVVNUIGJlIGVpdGhlciA4MCBvciBGRlxuICAvLyA4MCBmb3IgcG9zaXRpdmUsIEZGIGZvciAyJ3MgY29tcFxuICBsZXQgcG9zaXRpdmVcbiAgaWYgKGJ1ZlswXSA9PT0gMHg4MCkgcG9zaXRpdmUgPSB0cnVlXG4gIGVsc2UgaWYgKGJ1ZlswXSA9PT0gMHhGRikgcG9zaXRpdmUgPSBmYWxzZVxuICBlbHNlIHJldHVybiBudWxsXG5cbiAgLy8gYnVpbGQgdXAgYSBiYXNlLTI1NiB0dXBsZSBmcm9tIHRoZSBsZWFzdCBzaWcgdG8gdGhlIGhpZ2hlc3RcbiAgY29uc3QgdHVwbGUgPSBbXVxuICBsZXQgaVxuICBmb3IgKGkgPSBidWYubGVuZ3RoIC0gMTsgaSA+IDA7IGktLSkge1xuICAgIGNvbnN0IGJ5dGUgPSBidWZbaV1cbiAgICBpZiAocG9zaXRpdmUpIHR1cGxlLnB1c2goYnl0ZSlcbiAgICBlbHNlIHR1cGxlLnB1c2goMHhGRiAtIGJ5dGUpXG4gIH1cblxuICBsZXQgc3VtID0gMFxuICBjb25zdCBsID0gdHVwbGUubGVuZ3RoXG4gIGZvciAoaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICBzdW0gKz0gdHVwbGVbaV0gKiBNYXRoLnBvdygyNTYsIGkpXG4gIH1cblxuICByZXR1cm4gcG9zaXRpdmUgPyBzdW0gOiAtMSAqIHN1bVxufVxuXG5mdW5jdGlvbiBkZWNvZGVPY3QgKHZhbCwgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgdmFsID0gdmFsLnN1YmFycmF5KG9mZnNldCwgb2Zmc2V0ICsgbGVuZ3RoKVxuICBvZmZzZXQgPSAwXG5cbiAgLy8gSWYgcHJlZml4ZWQgd2l0aCAweDgwIHRoZW4gcGFyc2UgYXMgYSBiYXNlLTI1NiBpbnRlZ2VyXG4gIGlmICh2YWxbb2Zmc2V0XSAmIDB4ODApIHtcbiAgICByZXR1cm4gcGFyc2UyNTYodmFsKVxuICB9IGVsc2Uge1xuICAgIC8vIE9sZGVyIHZlcnNpb25zIG9mIHRhciBjYW4gcHJlZml4IHdpdGggc3BhY2VzXG4gICAgd2hpbGUgKG9mZnNldCA8IHZhbC5sZW5ndGggJiYgdmFsW29mZnNldF0gPT09IDMyKSBvZmZzZXQrK1xuICAgIGNvbnN0IGVuZCA9IGNsYW1wKGluZGV4T2YodmFsLCAzMiwgb2Zmc2V0LCB2YWwubGVuZ3RoKSwgdmFsLmxlbmd0aCwgdmFsLmxlbmd0aClcbiAgICB3aGlsZSAob2Zmc2V0IDwgZW5kICYmIHZhbFtvZmZzZXRdID09PSAwKSBvZmZzZXQrK1xuICAgIGlmIChlbmQgPT09IG9mZnNldCkgcmV0dXJuIDBcbiAgICByZXR1cm4gcGFyc2VJbnQoYjRhLnRvU3RyaW5nKHZhbC5zdWJhcnJheShvZmZzZXQsIGVuZCkpLCA4KVxuICB9XG59XG5cbmZ1bmN0aW9uIGRlY29kZVN0ciAodmFsLCBvZmZzZXQsIGxlbmd0aCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGI0YS50b1N0cmluZyh2YWwuc3ViYXJyYXkob2Zmc2V0LCBpbmRleE9mKHZhbCwgMCwgb2Zmc2V0LCBvZmZzZXQgKyBsZW5ndGgpKSwgZW5jb2RpbmcpXG59XG5cbmZ1bmN0aW9uIGFkZExlbmd0aCAoc3RyKSB7XG4gIGNvbnN0IGxlbiA9IGI0YS5ieXRlTGVuZ3RoKHN0cilcbiAgbGV0IGRpZ2l0cyA9IE1hdGguZmxvb3IoTWF0aC5sb2cobGVuKSAvIE1hdGgubG9nKDEwKSkgKyAxXG4gIGlmIChsZW4gKyBkaWdpdHMgPj0gTWF0aC5wb3coMTAsIGRpZ2l0cykpIGRpZ2l0cysrXG5cbiAgcmV0dXJuIChsZW4gKyBkaWdpdHMpICsgc3RyXG59XG4iLAogICAgImNvbnN0IHsgV3JpdGFibGUsIFJlYWRhYmxlLCBnZXRTdHJlYW1FcnJvciB9ID0gcmVxdWlyZSgnc3RyZWFteCcpXG5jb25zdCBGSUZPID0gcmVxdWlyZSgnZmFzdC1maWZvJylcbmNvbnN0IGI0YSA9IHJlcXVpcmUoJ2I0YScpXG5jb25zdCBoZWFkZXJzID0gcmVxdWlyZSgnLi9oZWFkZXJzJylcblxuY29uc3QgRU1QVFkgPSBiNGEuYWxsb2MoMClcblxuY2xhc3MgQnVmZmVyTGlzdCB7XG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICB0aGlzLmJ1ZmZlcmVkID0gMFxuICAgIHRoaXMuc2hpZnRlZCA9IDBcbiAgICB0aGlzLnF1ZXVlID0gbmV3IEZJRk8oKVxuXG4gICAgdGhpcy5fb2Zmc2V0ID0gMFxuICB9XG5cbiAgcHVzaCAoYnVmZmVyKSB7XG4gICAgdGhpcy5idWZmZXJlZCArPSBidWZmZXIuYnl0ZUxlbmd0aFxuICAgIHRoaXMucXVldWUucHVzaChidWZmZXIpXG4gIH1cblxuICBzaGlmdEZpcnN0IChzaXplKSB7XG4gICAgcmV0dXJuIHRoaXMuX2J1ZmZlcmVkID09PSAwID8gbnVsbCA6IHRoaXMuX25leHQoc2l6ZSlcbiAgfVxuXG4gIHNoaWZ0IChzaXplKSB7XG4gICAgaWYgKHNpemUgPiB0aGlzLmJ1ZmZlcmVkKSByZXR1cm4gbnVsbFxuICAgIGlmIChzaXplID09PSAwKSByZXR1cm4gRU1QVFlcblxuICAgIGxldCBjaHVuayA9IHRoaXMuX25leHQoc2l6ZSlcblxuICAgIGlmIChzaXplID09PSBjaHVuay5ieXRlTGVuZ3RoKSByZXR1cm4gY2h1bmsgLy8gbGlrZWx5IGNhc2VcblxuICAgIGNvbnN0IGNodW5rcyA9IFtjaHVua11cblxuICAgIHdoaWxlICgoc2l6ZSAtPSBjaHVuay5ieXRlTGVuZ3RoKSA+IDApIHtcbiAgICAgIGNodW5rID0gdGhpcy5fbmV4dChzaXplKVxuICAgICAgY2h1bmtzLnB1c2goY2h1bmspXG4gICAgfVxuXG4gICAgcmV0dXJuIGI0YS5jb25jYXQoY2h1bmtzKVxuICB9XG5cbiAgX25leHQgKHNpemUpIHtcbiAgICBjb25zdCBidWYgPSB0aGlzLnF1ZXVlLnBlZWsoKVxuICAgIGNvbnN0IHJlbSA9IGJ1Zi5ieXRlTGVuZ3RoIC0gdGhpcy5fb2Zmc2V0XG5cbiAgICBpZiAoc2l6ZSA+PSByZW0pIHtcbiAgICAgIGNvbnN0IHN1YiA9IHRoaXMuX29mZnNldCA/IGJ1Zi5zdWJhcnJheSh0aGlzLl9vZmZzZXQsIGJ1Zi5ieXRlTGVuZ3RoKSA6IGJ1ZlxuICAgICAgdGhpcy5xdWV1ZS5zaGlmdCgpXG4gICAgICB0aGlzLl9vZmZzZXQgPSAwXG4gICAgICB0aGlzLmJ1ZmZlcmVkIC09IHJlbVxuICAgICAgdGhpcy5zaGlmdGVkICs9IHJlbVxuICAgICAgcmV0dXJuIHN1YlxuICAgIH1cblxuICAgIHRoaXMuYnVmZmVyZWQgLT0gc2l6ZVxuICAgIHRoaXMuc2hpZnRlZCArPSBzaXplXG5cbiAgICByZXR1cm4gYnVmLnN1YmFycmF5KHRoaXMuX29mZnNldCwgKHRoaXMuX29mZnNldCArPSBzaXplKSlcbiAgfVxufVxuXG5jbGFzcyBTb3VyY2UgZXh0ZW5kcyBSZWFkYWJsZSB7XG4gIGNvbnN0cnVjdG9yIChzZWxmLCBoZWFkZXIsIG9mZnNldCkge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXMuaGVhZGVyID0gaGVhZGVyXG4gICAgdGhpcy5vZmZzZXQgPSBvZmZzZXRcblxuICAgIHRoaXMuX3BhcmVudCA9IHNlbGZcbiAgfVxuXG4gIF9yZWFkIChjYikge1xuICAgIGlmICh0aGlzLmhlYWRlci5zaXplID09PSAwKSB7XG4gICAgICB0aGlzLnB1c2gobnVsbClcbiAgICB9XG4gICAgaWYgKHRoaXMuX3BhcmVudC5fc3RyZWFtID09PSB0aGlzKSB7XG4gICAgICB0aGlzLl9wYXJlbnQuX3VwZGF0ZSgpXG4gICAgfVxuICAgIGNiKG51bGwpXG4gIH1cblxuICBfcHJlZGVzdHJveSAoKSB7XG4gICAgdGhpcy5fcGFyZW50LmRlc3Ryb3koZ2V0U3RyZWFtRXJyb3IodGhpcykpXG4gIH1cblxuICBfZGV0YWNoICgpIHtcbiAgICBpZiAodGhpcy5fcGFyZW50Ll9zdHJlYW0gPT09IHRoaXMpIHtcbiAgICAgIHRoaXMuX3BhcmVudC5fc3RyZWFtID0gbnVsbFxuICAgICAgdGhpcy5fcGFyZW50Ll9taXNzaW5nID0gb3ZlcmZsb3codGhpcy5oZWFkZXIuc2l6ZSlcbiAgICAgIHRoaXMuX3BhcmVudC5fdXBkYXRlKClcbiAgICB9XG4gIH1cblxuICBfZGVzdHJveSAoY2IpIHtcbiAgICB0aGlzLl9kZXRhY2goKVxuICAgIGNiKG51bGwpXG4gIH1cbn1cblxuY2xhc3MgRXh0cmFjdCBleHRlbmRzIFdyaXRhYmxlIHtcbiAgY29uc3RydWN0b3IgKG9wdHMpIHtcbiAgICBzdXBlcihvcHRzKVxuXG4gICAgaWYgKCFvcHRzKSBvcHRzID0ge31cblxuICAgIHRoaXMuX2J1ZmZlciA9IG5ldyBCdWZmZXJMaXN0KClcbiAgICB0aGlzLl9vZmZzZXQgPSAwXG4gICAgdGhpcy5faGVhZGVyID0gbnVsbFxuICAgIHRoaXMuX3N0cmVhbSA9IG51bGxcbiAgICB0aGlzLl9taXNzaW5nID0gMFxuICAgIHRoaXMuX2xvbmdIZWFkZXIgPSBmYWxzZVxuICAgIHRoaXMuX2NhbGxiYWNrID0gbm9vcFxuICAgIHRoaXMuX2xvY2tlZCA9IGZhbHNlXG4gICAgdGhpcy5fZmluaXNoZWQgPSBmYWxzZVxuICAgIHRoaXMuX3BheCA9IG51bGxcbiAgICB0aGlzLl9wYXhHbG9iYWwgPSBudWxsXG4gICAgdGhpcy5fZ251TG9uZ1BhdGggPSBudWxsXG4gICAgdGhpcy5fZ251TG9uZ0xpbmtQYXRoID0gbnVsbFxuICAgIHRoaXMuX2ZpbGVuYW1lRW5jb2RpbmcgPSBvcHRzLmZpbGVuYW1lRW5jb2RpbmcgfHwgJ3V0Zi04J1xuICAgIHRoaXMuX2FsbG93VW5rbm93bkZvcm1hdCA9ICEhb3B0cy5hbGxvd1Vua25vd25Gb3JtYXRcbiAgICB0aGlzLl91bmxvY2tCb3VuZCA9IHRoaXMuX3VubG9jay5iaW5kKHRoaXMpXG4gIH1cblxuICBfdW5sb2NrIChlcnIpIHtcbiAgICB0aGlzLl9sb2NrZWQgPSBmYWxzZVxuXG4gICAgaWYgKGVycikge1xuICAgICAgdGhpcy5kZXN0cm95KGVycilcbiAgICAgIHRoaXMuX2NvbnRpbnVlV3JpdGUoZXJyKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5fdXBkYXRlKClcbiAgfVxuXG4gIF9jb25zdW1lSGVhZGVyICgpIHtcbiAgICBpZiAodGhpcy5fbG9ja2VkKSByZXR1cm4gZmFsc2VcblxuICAgIHRoaXMuX29mZnNldCA9IHRoaXMuX2J1ZmZlci5zaGlmdGVkXG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5faGVhZGVyID0gaGVhZGVycy5kZWNvZGUodGhpcy5fYnVmZmVyLnNoaWZ0KDUxMiksIHRoaXMuX2ZpbGVuYW1lRW5jb2RpbmcsIHRoaXMuX2FsbG93VW5rbm93bkZvcm1hdClcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuX2NvbnRpbnVlV3JpdGUoZXJyKVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9oZWFkZXIpIHJldHVybiB0cnVlXG5cbiAgICBzd2l0Y2ggKHRoaXMuX2hlYWRlci50eXBlKSB7XG4gICAgICBjYXNlICdnbnUtbG9uZy1wYXRoJzpcbiAgICAgIGNhc2UgJ2dudS1sb25nLWxpbmstcGF0aCc6XG4gICAgICBjYXNlICdwYXgtZ2xvYmFsLWhlYWRlcic6XG4gICAgICBjYXNlICdwYXgtaGVhZGVyJzpcbiAgICAgICAgdGhpcy5fbG9uZ0hlYWRlciA9IHRydWVcbiAgICAgICAgdGhpcy5fbWlzc2luZyA9IHRoaXMuX2hlYWRlci5zaXplXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgdGhpcy5fbG9ja2VkID0gdHJ1ZVxuICAgIHRoaXMuX2FwcGx5TG9uZ0hlYWRlcnMoKVxuXG4gICAgaWYgKHRoaXMuX2hlYWRlci5zaXplID09PSAwIHx8IHRoaXMuX2hlYWRlci50eXBlID09PSAnZGlyZWN0b3J5Jykge1xuICAgICAgdGhpcy5lbWl0KCdlbnRyeScsIHRoaXMuX2hlYWRlciwgdGhpcy5fY3JlYXRlU3RyZWFtKCksIHRoaXMuX3VubG9ja0JvdW5kKVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICB0aGlzLl9zdHJlYW0gPSB0aGlzLl9jcmVhdGVTdHJlYW0oKVxuICAgIHRoaXMuX21pc3NpbmcgPSB0aGlzLl9oZWFkZXIuc2l6ZVxuXG4gICAgdGhpcy5lbWl0KCdlbnRyeScsIHRoaXMuX2hlYWRlciwgdGhpcy5fc3RyZWFtLCB0aGlzLl91bmxvY2tCb3VuZClcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgX2FwcGx5TG9uZ0hlYWRlcnMgKCkge1xuICAgIGlmICh0aGlzLl9nbnVMb25nUGF0aCkge1xuICAgICAgdGhpcy5faGVhZGVyLm5hbWUgPSB0aGlzLl9nbnVMb25nUGF0aFxuICAgICAgdGhpcy5fZ251TG9uZ1BhdGggPSBudWxsXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2dudUxvbmdMaW5rUGF0aCkge1xuICAgICAgdGhpcy5faGVhZGVyLmxpbmtuYW1lID0gdGhpcy5fZ251TG9uZ0xpbmtQYXRoXG4gICAgICB0aGlzLl9nbnVMb25nTGlua1BhdGggPSBudWxsXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3BheCkge1xuICAgICAgaWYgKHRoaXMuX3BheC5wYXRoKSB0aGlzLl9oZWFkZXIubmFtZSA9IHRoaXMuX3BheC5wYXRoXG4gICAgICBpZiAodGhpcy5fcGF4LmxpbmtwYXRoKSB0aGlzLl9oZWFkZXIubGlua25hbWUgPSB0aGlzLl9wYXgubGlua3BhdGhcbiAgICAgIGlmICh0aGlzLl9wYXguc2l6ZSkgdGhpcy5faGVhZGVyLnNpemUgPSBwYXJzZUludCh0aGlzLl9wYXguc2l6ZSwgMTApXG4gICAgICB0aGlzLl9oZWFkZXIucGF4ID0gdGhpcy5fcGF4XG4gICAgICB0aGlzLl9wYXggPSBudWxsXG4gICAgfVxuICB9XG5cbiAgX2RlY29kZUxvbmdIZWFkZXIgKGJ1Zikge1xuICAgIHN3aXRjaCAodGhpcy5faGVhZGVyLnR5cGUpIHtcbiAgICAgIGNhc2UgJ2dudS1sb25nLXBhdGgnOlxuICAgICAgICB0aGlzLl9nbnVMb25nUGF0aCA9IGhlYWRlcnMuZGVjb2RlTG9uZ1BhdGgoYnVmLCB0aGlzLl9maWxlbmFtZUVuY29kaW5nKVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnZ251LWxvbmctbGluay1wYXRoJzpcbiAgICAgICAgdGhpcy5fZ251TG9uZ0xpbmtQYXRoID0gaGVhZGVycy5kZWNvZGVMb25nUGF0aChidWYsIHRoaXMuX2ZpbGVuYW1lRW5jb2RpbmcpXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdwYXgtZ2xvYmFsLWhlYWRlcic6XG4gICAgICAgIHRoaXMuX3BheEdsb2JhbCA9IGhlYWRlcnMuZGVjb2RlUGF4KGJ1ZilcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ3BheC1oZWFkZXInOlxuICAgICAgICB0aGlzLl9wYXggPSB0aGlzLl9wYXhHbG9iYWwgPT09IG51bGxcbiAgICAgICAgICA/IGhlYWRlcnMuZGVjb2RlUGF4KGJ1ZilcbiAgICAgICAgICA6IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX3BheEdsb2JhbCwgaGVhZGVycy5kZWNvZGVQYXgoYnVmKSlcbiAgICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBfY29uc3VtZUxvbmdIZWFkZXIgKCkge1xuICAgIHRoaXMuX2xvbmdIZWFkZXIgPSBmYWxzZVxuICAgIHRoaXMuX21pc3NpbmcgPSBvdmVyZmxvdyh0aGlzLl9oZWFkZXIuc2l6ZSlcblxuICAgIGNvbnN0IGJ1ZiA9IHRoaXMuX2J1ZmZlci5zaGlmdCh0aGlzLl9oZWFkZXIuc2l6ZSlcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLl9kZWNvZGVMb25nSGVhZGVyKGJ1ZilcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuX2NvbnRpbnVlV3JpdGUoZXJyKVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIF9jb25zdW1lU3RyZWFtICgpIHtcbiAgICBjb25zdCBidWYgPSB0aGlzLl9idWZmZXIuc2hpZnRGaXJzdCh0aGlzLl9taXNzaW5nKVxuICAgIGlmIChidWYgPT09IG51bGwpIHJldHVybiBmYWxzZVxuXG4gICAgdGhpcy5fbWlzc2luZyAtPSBidWYuYnl0ZUxlbmd0aFxuICAgIGNvbnN0IGRyYWluZWQgPSB0aGlzLl9zdHJlYW0ucHVzaChidWYpXG5cbiAgICBpZiAodGhpcy5fbWlzc2luZyA9PT0gMCkge1xuICAgICAgdGhpcy5fc3RyZWFtLnB1c2gobnVsbClcbiAgICAgIGlmIChkcmFpbmVkKSB0aGlzLl9zdHJlYW0uX2RldGFjaCgpXG4gICAgICByZXR1cm4gZHJhaW5lZCAmJiB0aGlzLl9sb2NrZWQgPT09IGZhbHNlXG4gICAgfVxuXG4gICAgcmV0dXJuIGRyYWluZWRcbiAgfVxuXG4gIF9jcmVhdGVTdHJlYW0gKCkge1xuICAgIHJldHVybiBuZXcgU291cmNlKHRoaXMsIHRoaXMuX2hlYWRlciwgdGhpcy5fb2Zmc2V0KVxuICB9XG5cbiAgX3VwZGF0ZSAoKSB7XG4gICAgd2hpbGUgKHRoaXMuX2J1ZmZlci5idWZmZXJlZCA+IDAgJiYgIXRoaXMuZGVzdHJveWluZykge1xuICAgICAgaWYgKHRoaXMuX21pc3NpbmcgPiAwKSB7XG4gICAgICAgIGlmICh0aGlzLl9zdHJlYW0gIT09IG51bGwpIHtcbiAgICAgICAgICBpZiAodGhpcy5fY29uc3VtZVN0cmVhbSgpID09PSBmYWxzZSkgcmV0dXJuXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9sb25nSGVhZGVyID09PSB0cnVlKSB7XG4gICAgICAgICAgaWYgKHRoaXMuX21pc3NpbmcgPiB0aGlzLl9idWZmZXIuYnVmZmVyZWQpIGJyZWFrXG4gICAgICAgICAgaWYgKHRoaXMuX2NvbnN1bWVMb25nSGVhZGVyKCkgPT09IGZhbHNlKSByZXR1cm4gZmFsc2VcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaWdub3JlID0gdGhpcy5fYnVmZmVyLnNoaWZ0Rmlyc3QodGhpcy5fbWlzc2luZylcbiAgICAgICAgaWYgKGlnbm9yZSAhPT0gbnVsbCkgdGhpcy5fbWlzc2luZyAtPSBpZ25vcmUuYnl0ZUxlbmd0aFxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fYnVmZmVyLmJ1ZmZlcmVkIDwgNTEyKSBicmVha1xuICAgICAgaWYgKHRoaXMuX3N0cmVhbSAhPT0gbnVsbCB8fCB0aGlzLl9jb25zdW1lSGVhZGVyKCkgPT09IGZhbHNlKSByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9jb250aW51ZVdyaXRlKG51bGwpXG4gIH1cblxuICBfY29udGludWVXcml0ZSAoZXJyKSB7XG4gICAgY29uc3QgY2IgPSB0aGlzLl9jYWxsYmFja1xuICAgIHRoaXMuX2NhbGxiYWNrID0gbm9vcFxuICAgIGNiKGVycilcbiAgfVxuXG4gIF93cml0ZSAoZGF0YSwgY2IpIHtcbiAgICB0aGlzLl9jYWxsYmFjayA9IGNiXG4gICAgdGhpcy5fYnVmZmVyLnB1c2goZGF0YSlcbiAgICB0aGlzLl91cGRhdGUoKVxuICB9XG5cbiAgX2ZpbmFsIChjYikge1xuICAgIHRoaXMuX2ZpbmlzaGVkID0gdGhpcy5fbWlzc2luZyA9PT0gMCAmJiB0aGlzLl9idWZmZXIuYnVmZmVyZWQgPT09IDBcbiAgICBjYih0aGlzLl9maW5pc2hlZCA/IG51bGwgOiBuZXcgRXJyb3IoJ1VuZXhwZWN0ZWQgZW5kIG9mIGRhdGEnKSlcbiAgfVxuXG4gIF9wcmVkZXN0cm95ICgpIHtcbiAgICB0aGlzLl9jb250aW51ZVdyaXRlKG51bGwpXG4gIH1cblxuICBfZGVzdHJveSAoY2IpIHtcbiAgICBpZiAodGhpcy5fc3RyZWFtKSB0aGlzLl9zdHJlYW0uZGVzdHJveShnZXRTdHJlYW1FcnJvcih0aGlzKSlcbiAgICBjYihudWxsKVxuICB9XG5cbiAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSAoKSB7XG4gICAgbGV0IGVycm9yID0gbnVsbFxuXG4gICAgbGV0IHByb21pc2VSZXNvbHZlID0gbnVsbFxuICAgIGxldCBwcm9taXNlUmVqZWN0ID0gbnVsbFxuXG4gICAgbGV0IGVudHJ5U3RyZWFtID0gbnVsbFxuICAgIGxldCBlbnRyeUNhbGxiYWNrID0gbnVsbFxuXG4gICAgY29uc3QgZXh0cmFjdCA9IHRoaXNcblxuICAgIHRoaXMub24oJ2VudHJ5Jywgb25lbnRyeSlcbiAgICB0aGlzLm9uKCdlcnJvcicsIChlcnIpID0+IHsgZXJyb3IgPSBlcnIgfSlcbiAgICB0aGlzLm9uKCdjbG9zZScsIG9uY2xvc2UpXG5cbiAgICByZXR1cm4ge1xuICAgICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzXG4gICAgICB9LFxuICAgICAgbmV4dCAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShvbm5leHQpXG4gICAgICB9LFxuICAgICAgcmV0dXJuICgpIHtcbiAgICAgICAgcmV0dXJuIGRlc3Ryb3kobnVsbClcbiAgICAgIH0sXG4gICAgICB0aHJvdyAoZXJyKSB7XG4gICAgICAgIHJldHVybiBkZXN0cm95KGVycilcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb25zdW1lQ2FsbGJhY2sgKGVycikge1xuICAgICAgaWYgKCFlbnRyeUNhbGxiYWNrKSByZXR1cm5cbiAgICAgIGNvbnN0IGNiID0gZW50cnlDYWxsYmFja1xuICAgICAgZW50cnlDYWxsYmFjayA9IG51bGxcbiAgICAgIGNiKGVycilcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvbm5leHQgKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoZXJyb3IpXG4gICAgICB9XG5cbiAgICAgIGlmIChlbnRyeVN0cmVhbSkge1xuICAgICAgICByZXNvbHZlKHsgdmFsdWU6IGVudHJ5U3RyZWFtLCBkb25lOiBmYWxzZSB9KVxuICAgICAgICBlbnRyeVN0cmVhbSA9IG51bGxcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHByb21pc2VSZXNvbHZlID0gcmVzb2x2ZVxuICAgICAgcHJvbWlzZVJlamVjdCA9IHJlamVjdFxuXG4gICAgICBjb25zdW1lQ2FsbGJhY2sobnVsbClcblxuICAgICAgaWYgKGV4dHJhY3QuX2ZpbmlzaGVkICYmIHByb21pc2VSZXNvbHZlKSB7XG4gICAgICAgIHByb21pc2VSZXNvbHZlKHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9KVxuICAgICAgICBwcm9taXNlUmVzb2x2ZSA9IHByb21pc2VSZWplY3QgPSBudWxsXG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25lbnRyeSAoaGVhZGVyLCBzdHJlYW0sIGNhbGxiYWNrKSB7XG4gICAgICBlbnRyeUNhbGxiYWNrID0gY2FsbGJhY2tcbiAgICAgIHN0cmVhbS5vbignZXJyb3InLCBub29wKSAvLyBubyB3YXkgYXJvdW5kIHRoaXMgZHVlIHRvIHRpY2sgc2lsbHluZXNzXG5cbiAgICAgIGlmIChwcm9taXNlUmVzb2x2ZSkge1xuICAgICAgICBwcm9taXNlUmVzb2x2ZSh7IHZhbHVlOiBzdHJlYW0sIGRvbmU6IGZhbHNlIH0pXG4gICAgICAgIHByb21pc2VSZXNvbHZlID0gcHJvbWlzZVJlamVjdCA9IG51bGxcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVudHJ5U3RyZWFtID0gc3RyZWFtXG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25jbG9zZSAoKSB7XG4gICAgICBjb25zdW1lQ2FsbGJhY2soZXJyb3IpXG4gICAgICBpZiAoIXByb21pc2VSZXNvbHZlKSByZXR1cm5cbiAgICAgIGlmIChlcnJvcikgcHJvbWlzZVJlamVjdChlcnJvcilcbiAgICAgIGVsc2UgcHJvbWlzZVJlc29sdmUoeyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH0pXG4gICAgICBwcm9taXNlUmVzb2x2ZSA9IHByb21pc2VSZWplY3QgPSBudWxsXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVzdHJveSAoZXJyKSB7XG4gICAgICBleHRyYWN0LmRlc3Ryb3koZXJyKVxuICAgICAgY29uc3VtZUNhbGxiYWNrKGVycilcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGlmIChleHRyYWN0LmRlc3Ryb3llZCkgcmV0dXJuIHJlc29sdmUoeyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH0pXG4gICAgICAgIGV4dHJhY3Qub25jZSgnY2xvc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKGVycikgcmVqZWN0KGVycilcbiAgICAgICAgICBlbHNlIHJlc29sdmUoeyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH0pXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGV4dHJhY3QgKG9wdHMpIHtcbiAgcmV0dXJuIG5ldyBFeHRyYWN0KG9wdHMpXG59XG5cbmZ1bmN0aW9uIG5vb3AgKCkge31cblxuZnVuY3Rpb24gb3ZlcmZsb3cgKHNpemUpIHtcbiAgc2l6ZSAmPSA1MTFcbiAgcmV0dXJuIHNpemUgJiYgNTEyIC0gc2l6ZVxufVxuIiwKICAgICJjb25zdCBjb25zdGFudHMgPSB7IC8vIGp1c3QgZm9yIGVudnMgd2l0aG91dCBmc1xuICBTX0lGTVQ6IDYxNDQwLFxuICBTX0lGRElSOiAxNjM4NCxcbiAgU19JRkNIUjogODE5MixcbiAgU19JRkJMSzogMjQ1NzYsXG4gIFNfSUZJRk86IDQwOTYsXG4gIFNfSUZMTks6IDQwOTYwXG59XG5cbnRyeSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnZnMnKS5jb25zdGFudHMgfHwgY29uc3RhbnRzXG59IGNhdGNoIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBjb25zdGFudHNcbn1cbiIsCiAgICAiY29uc3QgeyBSZWFkYWJsZSwgV3JpdGFibGUsIGdldFN0cmVhbUVycm9yIH0gPSByZXF1aXJlKCdzdHJlYW14JylcbmNvbnN0IGI0YSA9IHJlcXVpcmUoJ2I0YScpXG5cbmNvbnN0IGNvbnN0YW50cyA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IGhlYWRlcnMgPSByZXF1aXJlKCcuL2hlYWRlcnMnKVxuXG5jb25zdCBETU9ERSA9IDBvNzU1XG5jb25zdCBGTU9ERSA9IDBvNjQ0XG5cbmNvbnN0IEVORF9PRl9UQVIgPSBiNGEuYWxsb2MoMTAyNClcblxuY2xhc3MgU2luayBleHRlbmRzIFdyaXRhYmxlIHtcbiAgY29uc3RydWN0b3IgKHBhY2ssIGhlYWRlciwgY2FsbGJhY2spIHtcbiAgICBzdXBlcih7IG1hcFdyaXRhYmxlLCBlYWdlck9wZW46IHRydWUgfSlcblxuICAgIHRoaXMud3JpdHRlbiA9IDBcbiAgICB0aGlzLmhlYWRlciA9IGhlYWRlclxuXG4gICAgdGhpcy5fY2FsbGJhY2sgPSBjYWxsYmFja1xuICAgIHRoaXMuX2xpbmtuYW1lID0gbnVsbFxuICAgIHRoaXMuX2lzTGlua25hbWUgPSBoZWFkZXIudHlwZSA9PT0gJ3N5bWxpbmsnICYmICFoZWFkZXIubGlua25hbWVcbiAgICB0aGlzLl9pc1ZvaWQgPSBoZWFkZXIudHlwZSAhPT0gJ2ZpbGUnICYmIGhlYWRlci50eXBlICE9PSAnY29udGlndW91cy1maWxlJ1xuICAgIHRoaXMuX2ZpbmlzaGVkID0gZmFsc2VcbiAgICB0aGlzLl9wYWNrID0gcGFja1xuICAgIHRoaXMuX29wZW5DYWxsYmFjayA9IG51bGxcblxuICAgIGlmICh0aGlzLl9wYWNrLl9zdHJlYW0gPT09IG51bGwpIHRoaXMuX3BhY2suX3N0cmVhbSA9IHRoaXNcbiAgICBlbHNlIHRoaXMuX3BhY2suX3BlbmRpbmcucHVzaCh0aGlzKVxuICB9XG5cbiAgX29wZW4gKGNiKSB7XG4gICAgdGhpcy5fb3BlbkNhbGxiYWNrID0gY2JcbiAgICBpZiAodGhpcy5fcGFjay5fc3RyZWFtID09PSB0aGlzKSB0aGlzLl9jb250aW51ZU9wZW4oKVxuICB9XG5cbiAgX2NvbnRpbnVlUGFjayAoZXJyKSB7XG4gICAgaWYgKHRoaXMuX2NhbGxiYWNrID09PSBudWxsKSByZXR1cm5cblxuICAgIGNvbnN0IGNhbGxiYWNrID0gdGhpcy5fY2FsbGJhY2tcbiAgICB0aGlzLl9jYWxsYmFjayA9IG51bGxcblxuICAgIGNhbGxiYWNrKGVycilcbiAgfVxuXG4gIF9jb250aW51ZU9wZW4gKCkge1xuICAgIGlmICh0aGlzLl9wYWNrLl9zdHJlYW0gPT09IG51bGwpIHRoaXMuX3BhY2suX3N0cmVhbSA9IHRoaXNcblxuICAgIGNvbnN0IGNiID0gdGhpcy5fb3BlbkNhbGxiYWNrXG4gICAgdGhpcy5fb3BlbkNhbGxiYWNrID0gbnVsbFxuICAgIGlmIChjYiA9PT0gbnVsbCkgcmV0dXJuXG5cbiAgICBpZiAodGhpcy5fcGFjay5kZXN0cm95aW5nKSByZXR1cm4gY2IobmV3IEVycm9yKCdwYWNrIHN0cmVhbSBkZXN0cm95ZWQnKSlcbiAgICBpZiAodGhpcy5fcGFjay5fZmluYWxpemVkKSByZXR1cm4gY2IobmV3IEVycm9yKCdwYWNrIHN0cmVhbSBpcyBhbHJlYWR5IGZpbmFsaXplZCcpKVxuXG4gICAgdGhpcy5fcGFjay5fc3RyZWFtID0gdGhpc1xuXG4gICAgaWYgKCF0aGlzLl9pc0xpbmtuYW1lKSB7XG4gICAgICB0aGlzLl9wYWNrLl9lbmNvZGUodGhpcy5oZWFkZXIpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2lzVm9pZCkge1xuICAgICAgdGhpcy5fZmluaXNoKClcbiAgICAgIHRoaXMuX2NvbnRpbnVlUGFjayhudWxsKVxuICAgIH1cblxuICAgIGNiKG51bGwpXG4gIH1cblxuICBfd3JpdGUgKGRhdGEsIGNiKSB7XG4gICAgaWYgKHRoaXMuX2lzTGlua25hbWUpIHtcbiAgICAgIHRoaXMuX2xpbmtuYW1lID0gdGhpcy5fbGlua25hbWUgPyBiNGEuY29uY2F0KFt0aGlzLl9saW5rbmFtZSwgZGF0YV0pIDogZGF0YVxuICAgICAgcmV0dXJuIGNiKG51bGwpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2lzVm9pZCkge1xuICAgICAgaWYgKGRhdGEuYnl0ZUxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIGNiKG5ldyBFcnJvcignTm8gYm9keSBhbGxvd2VkIGZvciB0aGlzIGVudHJ5JykpXG4gICAgICB9XG4gICAgICByZXR1cm4gY2IoKVxuICAgIH1cblxuICAgIHRoaXMud3JpdHRlbiArPSBkYXRhLmJ5dGVMZW5ndGhcbiAgICBpZiAodGhpcy5fcGFjay5wdXNoKGRhdGEpKSByZXR1cm4gY2IoKVxuICAgIHRoaXMuX3BhY2suX2RyYWluID0gY2JcbiAgfVxuXG4gIF9maW5pc2ggKCkge1xuICAgIGlmICh0aGlzLl9maW5pc2hlZCkgcmV0dXJuXG4gICAgdGhpcy5fZmluaXNoZWQgPSB0cnVlXG5cbiAgICBpZiAodGhpcy5faXNMaW5rbmFtZSkge1xuICAgICAgdGhpcy5oZWFkZXIubGlua25hbWUgPSB0aGlzLl9saW5rbmFtZSA/IGI0YS50b1N0cmluZyh0aGlzLl9saW5rbmFtZSwgJ3V0Zi04JykgOiAnJ1xuICAgICAgdGhpcy5fcGFjay5fZW5jb2RlKHRoaXMuaGVhZGVyKVxuICAgIH1cblxuICAgIG92ZXJmbG93KHRoaXMuX3BhY2ssIHRoaXMuaGVhZGVyLnNpemUpXG5cbiAgICB0aGlzLl9wYWNrLl9kb25lKHRoaXMpXG4gIH1cblxuICBfZmluYWwgKGNiKSB7XG4gICAgaWYgKHRoaXMud3JpdHRlbiAhPT0gdGhpcy5oZWFkZXIuc2l6ZSkgeyAvLyBjb3JydXB0aW5nIHRhclxuICAgICAgcmV0dXJuIGNiKG5ldyBFcnJvcignU2l6ZSBtaXNtYXRjaCcpKVxuICAgIH1cblxuICAgIHRoaXMuX2ZpbmlzaCgpXG4gICAgY2IobnVsbClcbiAgfVxuXG4gIF9nZXRFcnJvciAoKSB7XG4gICAgcmV0dXJuIGdldFN0cmVhbUVycm9yKHRoaXMpIHx8IG5ldyBFcnJvcigndGFyIGVudHJ5IGRlc3Ryb3llZCcpXG4gIH1cblxuICBfcHJlZGVzdHJveSAoKSB7XG4gICAgdGhpcy5fcGFjay5kZXN0cm95KHRoaXMuX2dldEVycm9yKCkpXG4gIH1cblxuICBfZGVzdHJveSAoY2IpIHtcbiAgICB0aGlzLl9wYWNrLl9kb25lKHRoaXMpXG5cbiAgICB0aGlzLl9jb250aW51ZVBhY2sodGhpcy5fZmluaXNoZWQgPyBudWxsIDogdGhpcy5fZ2V0RXJyb3IoKSlcblxuICAgIGNiKClcbiAgfVxufVxuXG5jbGFzcyBQYWNrIGV4dGVuZHMgUmVhZGFibGUge1xuICBjb25zdHJ1Y3RvciAob3B0cykge1xuICAgIHN1cGVyKG9wdHMpXG4gICAgdGhpcy5fZHJhaW4gPSBub29wXG4gICAgdGhpcy5fZmluYWxpemVkID0gZmFsc2VcbiAgICB0aGlzLl9maW5hbGl6aW5nID0gZmFsc2VcbiAgICB0aGlzLl9wZW5kaW5nID0gW11cbiAgICB0aGlzLl9zdHJlYW0gPSBudWxsXG4gIH1cblxuICBlbnRyeSAoaGVhZGVyLCBidWZmZXIsIGNhbGxiYWNrKSB7XG4gICAgaWYgKHRoaXMuX2ZpbmFsaXplZCB8fCB0aGlzLmRlc3Ryb3lpbmcpIHRocm93IG5ldyBFcnJvcignYWxyZWFkeSBmaW5hbGl6ZWQgb3IgZGVzdHJveWVkJylcblxuICAgIGlmICh0eXBlb2YgYnVmZmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjYWxsYmFjayA9IGJ1ZmZlclxuICAgICAgYnVmZmVyID0gbnVsbFxuICAgIH1cblxuICAgIGlmICghY2FsbGJhY2spIGNhbGxiYWNrID0gbm9vcFxuXG4gICAgaWYgKCFoZWFkZXIuc2l6ZSB8fCBoZWFkZXIudHlwZSA9PT0gJ3N5bWxpbmsnKSBoZWFkZXIuc2l6ZSA9IDBcbiAgICBpZiAoIWhlYWRlci50eXBlKSBoZWFkZXIudHlwZSA9IG1vZGVUb1R5cGUoaGVhZGVyLm1vZGUpXG4gICAgaWYgKCFoZWFkZXIubW9kZSkgaGVhZGVyLm1vZGUgPSBoZWFkZXIudHlwZSA9PT0gJ2RpcmVjdG9yeScgPyBETU9ERSA6IEZNT0RFXG4gICAgaWYgKCFoZWFkZXIudWlkKSBoZWFkZXIudWlkID0gMFxuICAgIGlmICghaGVhZGVyLmdpZCkgaGVhZGVyLmdpZCA9IDBcbiAgICBpZiAoIWhlYWRlci5tdGltZSkgaGVhZGVyLm10aW1lID0gbmV3IERhdGUoKVxuXG4gICAgaWYgKHR5cGVvZiBidWZmZXIgPT09ICdzdHJpbmcnKSBidWZmZXIgPSBiNGEuZnJvbShidWZmZXIpXG5cbiAgICBjb25zdCBzaW5rID0gbmV3IFNpbmsodGhpcywgaGVhZGVyLCBjYWxsYmFjaylcblxuICAgIGlmIChiNGEuaXNCdWZmZXIoYnVmZmVyKSkge1xuICAgICAgaGVhZGVyLnNpemUgPSBidWZmZXIuYnl0ZUxlbmd0aFxuICAgICAgc2luay53cml0ZShidWZmZXIpXG4gICAgICBzaW5rLmVuZCgpXG4gICAgICByZXR1cm4gc2lua1xuICAgIH1cblxuICAgIGlmIChzaW5rLl9pc1ZvaWQpIHtcbiAgICAgIHJldHVybiBzaW5rXG4gICAgfVxuXG4gICAgcmV0dXJuIHNpbmtcbiAgfVxuXG4gIGZpbmFsaXplICgpIHtcbiAgICBpZiAodGhpcy5fc3RyZWFtIHx8IHRoaXMuX3BlbmRpbmcubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5fZmluYWxpemluZyA9IHRydWVcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICh0aGlzLl9maW5hbGl6ZWQpIHJldHVyblxuICAgIHRoaXMuX2ZpbmFsaXplZCA9IHRydWVcblxuICAgIHRoaXMucHVzaChFTkRfT0ZfVEFSKVxuICAgIHRoaXMucHVzaChudWxsKVxuICB9XG5cbiAgX2RvbmUgKHN0cmVhbSkge1xuICAgIGlmIChzdHJlYW0gIT09IHRoaXMuX3N0cmVhbSkgcmV0dXJuXG5cbiAgICB0aGlzLl9zdHJlYW0gPSBudWxsXG5cbiAgICBpZiAodGhpcy5fZmluYWxpemluZykgdGhpcy5maW5hbGl6ZSgpXG4gICAgaWYgKHRoaXMuX3BlbmRpbmcubGVuZ3RoKSB0aGlzLl9wZW5kaW5nLnNoaWZ0KCkuX2NvbnRpbnVlT3BlbigpXG4gIH1cblxuICBfZW5jb2RlIChoZWFkZXIpIHtcbiAgICBpZiAoIWhlYWRlci5wYXgpIHtcbiAgICAgIGNvbnN0IGJ1ZiA9IGhlYWRlcnMuZW5jb2RlKGhlYWRlcilcbiAgICAgIGlmIChidWYpIHtcbiAgICAgICAgdGhpcy5wdXNoKGJ1ZilcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX2VuY29kZVBheChoZWFkZXIpXG4gIH1cblxuICBfZW5jb2RlUGF4IChoZWFkZXIpIHtcbiAgICBjb25zdCBwYXhIZWFkZXIgPSBoZWFkZXJzLmVuY29kZVBheCh7XG4gICAgICBuYW1lOiBoZWFkZXIubmFtZSxcbiAgICAgIGxpbmtuYW1lOiBoZWFkZXIubGlua25hbWUsXG4gICAgICBwYXg6IGhlYWRlci5wYXhcbiAgICB9KVxuXG4gICAgY29uc3QgbmV3SGVhZGVyID0ge1xuICAgICAgbmFtZTogJ1BheEhlYWRlcicsXG4gICAgICBtb2RlOiBoZWFkZXIubW9kZSxcbiAgICAgIHVpZDogaGVhZGVyLnVpZCxcbiAgICAgIGdpZDogaGVhZGVyLmdpZCxcbiAgICAgIHNpemU6IHBheEhlYWRlci5ieXRlTGVuZ3RoLFxuICAgICAgbXRpbWU6IGhlYWRlci5tdGltZSxcbiAgICAgIHR5cGU6ICdwYXgtaGVhZGVyJyxcbiAgICAgIGxpbmtuYW1lOiBoZWFkZXIubGlua25hbWUgJiYgJ1BheEhlYWRlcicsXG4gICAgICB1bmFtZTogaGVhZGVyLnVuYW1lLFxuICAgICAgZ25hbWU6IGhlYWRlci5nbmFtZSxcbiAgICAgIGRldm1ham9yOiBoZWFkZXIuZGV2bWFqb3IsXG4gICAgICBkZXZtaW5vcjogaGVhZGVyLmRldm1pbm9yXG4gICAgfVxuXG4gICAgdGhpcy5wdXNoKGhlYWRlcnMuZW5jb2RlKG5ld0hlYWRlcikpXG4gICAgdGhpcy5wdXNoKHBheEhlYWRlcilcbiAgICBvdmVyZmxvdyh0aGlzLCBwYXhIZWFkZXIuYnl0ZUxlbmd0aClcblxuICAgIG5ld0hlYWRlci5zaXplID0gaGVhZGVyLnNpemVcbiAgICBuZXdIZWFkZXIudHlwZSA9IGhlYWRlci50eXBlXG4gICAgdGhpcy5wdXNoKGhlYWRlcnMuZW5jb2RlKG5ld0hlYWRlcikpXG4gIH1cblxuICBfZG9EcmFpbiAoKSB7XG4gICAgY29uc3QgZHJhaW4gPSB0aGlzLl9kcmFpblxuICAgIHRoaXMuX2RyYWluID0gbm9vcFxuICAgIGRyYWluKClcbiAgfVxuXG4gIF9wcmVkZXN0cm95ICgpIHtcbiAgICBjb25zdCBlcnIgPSBnZXRTdHJlYW1FcnJvcih0aGlzKVxuXG4gICAgaWYgKHRoaXMuX3N0cmVhbSkgdGhpcy5fc3RyZWFtLmRlc3Ryb3koZXJyKVxuXG4gICAgd2hpbGUgKHRoaXMuX3BlbmRpbmcubGVuZ3RoKSB7XG4gICAgICBjb25zdCBzdHJlYW0gPSB0aGlzLl9wZW5kaW5nLnNoaWZ0KClcbiAgICAgIHN0cmVhbS5kZXN0cm95KGVycilcbiAgICAgIHN0cmVhbS5fY29udGludWVPcGVuKClcbiAgICB9XG5cbiAgICB0aGlzLl9kb0RyYWluKClcbiAgfVxuXG4gIF9yZWFkIChjYikge1xuICAgIHRoaXMuX2RvRHJhaW4oKVxuICAgIGNiKClcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHBhY2sgKG9wdHMpIHtcbiAgcmV0dXJuIG5ldyBQYWNrKG9wdHMpXG59XG5cbmZ1bmN0aW9uIG1vZGVUb1R5cGUgKG1vZGUpIHtcbiAgc3dpdGNoIChtb2RlICYgY29uc3RhbnRzLlNfSUZNVCkge1xuICAgIGNhc2UgY29uc3RhbnRzLlNfSUZCTEs6IHJldHVybiAnYmxvY2stZGV2aWNlJ1xuICAgIGNhc2UgY29uc3RhbnRzLlNfSUZDSFI6IHJldHVybiAnY2hhcmFjdGVyLWRldmljZSdcbiAgICBjYXNlIGNvbnN0YW50cy5TX0lGRElSOiByZXR1cm4gJ2RpcmVjdG9yeSdcbiAgICBjYXNlIGNvbnN0YW50cy5TX0lGSUZPOiByZXR1cm4gJ2ZpZm8nXG4gICAgY2FzZSBjb25zdGFudHMuU19JRkxOSzogcmV0dXJuICdzeW1saW5rJ1xuICB9XG5cbiAgcmV0dXJuICdmaWxlJ1xufVxuXG5mdW5jdGlvbiBub29wICgpIHt9XG5cbmZ1bmN0aW9uIG92ZXJmbG93IChzZWxmLCBzaXplKSB7XG4gIHNpemUgJj0gNTExXG4gIGlmIChzaXplKSBzZWxmLnB1c2goRU5EX09GX1RBUi5zdWJhcnJheSgwLCA1MTIgLSBzaXplKSlcbn1cblxuZnVuY3Rpb24gbWFwV3JpdGFibGUgKGJ1Zikge1xuICByZXR1cm4gYjRhLmlzQnVmZmVyKGJ1ZikgPyBidWYgOiBiNGEuZnJvbShidWYpXG59XG4iLAogICAgImV4cG9ydHMuZXh0cmFjdCA9IHJlcXVpcmUoJy4vZXh0cmFjdCcpXG5leHBvcnRzLnBhY2sgPSByZXF1aXJlKCcuL3BhY2snKVxuIiwKICAgICIvKipcbiAqIFRBUiBGb3JtYXQgUGx1Z2luXG4gKlxuICogQG1vZHVsZSBwbHVnaW5zL3RhclxuICogQGxpY2Vuc2UgW01JVF17QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FyY2hpdmVyanMvbm9kZS1hcmNoaXZlci9ibG9iL21hc3Rlci9MSUNFTlNFfVxuICogQGNvcHlyaWdodCAoYykgMjAxMi0yMDE0IENocmlzIFRhbGtpbmd0b24sIGNvbnRyaWJ1dG9ycy5cbiAqL1xudmFyIHpsaWIgPSByZXF1aXJlKCd6bGliJyk7XG5cbnZhciBlbmdpbmUgPSByZXF1aXJlKCd0YXItc3RyZWFtJyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJ2FyY2hpdmVyLXV0aWxzJyk7XG5cbi8qKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge1Rhck9wdGlvbnN9IG9wdGlvbnNcbiAqL1xudmFyIFRhciA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFRhcikpIHtcbiAgICByZXR1cm4gbmV3IFRhcihvcHRpb25zKTtcbiAgfVxuXG4gIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMgPSB1dGlsLmRlZmF1bHRzKG9wdGlvbnMsIHtcbiAgICBnemlwOiBmYWxzZVxuICB9KTtcblxuICBpZiAodHlwZW9mIG9wdGlvbnMuZ3ppcE9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgb3B0aW9ucy5nemlwT3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgdGhpcy5zdXBwb3J0cyA9IHtcbiAgICBkaXJlY3Rvcnk6IHRydWUsXG4gICAgc3ltbGluazogdHJ1ZVxuICB9O1xuXG4gIHRoaXMuZW5naW5lID0gZW5naW5lLnBhY2sob3B0aW9ucyk7XG4gIHRoaXMuY29tcHJlc3NvciA9IGZhbHNlO1xuXG4gIGlmIChvcHRpb25zLmd6aXApIHtcbiAgICB0aGlzLmNvbXByZXNzb3IgPSB6bGliLmNyZWF0ZUd6aXAob3B0aW9ucy5nemlwT3B0aW9ucyk7XG4gICAgdGhpcy5jb21wcmVzc29yLm9uKCdlcnJvcicsIHRoaXMuX29uQ29tcHJlc3NvckVycm9yLmJpbmQodGhpcykpO1xuICB9XG59O1xuXG4vKipcbiAqIFtfb25Db21wcmVzc29yRXJyb3IgZGVzY3JpcHRpb25dXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSAge0Vycm9yfSBlcnJcbiAqIEByZXR1cm4gdm9pZFxuICovXG5UYXIucHJvdG90eXBlLl9vbkNvbXByZXNzb3JFcnJvciA9IGZ1bmN0aW9uKGVycikge1xuICB0aGlzLmVuZ2luZS5lbWl0KCdlcnJvcicsIGVycik7XG59O1xuXG4vKipcbiAqIFthcHBlbmQgZGVzY3JpcHRpb25dXG4gKlxuICogQHBhcmFtICB7KEJ1ZmZlcnxTdHJlYW0pfSBzb3VyY2VcbiAqIEBwYXJhbSAge1RhckVudHJ5RGF0YX0gZGF0YVxuICogQHBhcmFtICB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHZvaWRcbiAqL1xuVGFyLnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbihzb3VyY2UsIGRhdGEsIGNhbGxiYWNrKSB7XG4gIHZhciBzZWxmID0gdGhpcztcblxuICBkYXRhLm10aW1lID0gZGF0YS5kYXRlO1xuXG4gIGZ1bmN0aW9uIGFwcGVuZChlcnIsIHNvdXJjZUJ1ZmZlcikge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2VsZi5lbmdpbmUuZW50cnkoZGF0YSwgc291cmNlQnVmZmVyLCBmdW5jdGlvbihlcnIpIHtcbiAgICAgIGNhbGxiYWNrKGVyciwgZGF0YSk7XG4gICAgfSk7XG4gIH1cblxuICBpZiAoZGF0YS5zb3VyY2VUeXBlID09PSAnYnVmZmVyJykge1xuICAgIGFwcGVuZChudWxsLCBzb3VyY2UpO1xuICB9IGVsc2UgaWYgKGRhdGEuc291cmNlVHlwZSA9PT0gJ3N0cmVhbScgJiYgZGF0YS5zdGF0cykge1xuICAgIGRhdGEuc2l6ZSA9IGRhdGEuc3RhdHMuc2l6ZTtcblxuICAgIHZhciBlbnRyeSA9IHNlbGYuZW5naW5lLmVudHJ5KGRhdGEsIGZ1bmN0aW9uKGVycikge1xuICAgICAgY2FsbGJhY2soZXJyLCBkYXRhKTtcbiAgICB9KTtcblxuICAgIHNvdXJjZS5waXBlKGVudHJ5KTtcbiAgfSBlbHNlIGlmIChkYXRhLnNvdXJjZVR5cGUgPT09ICdzdHJlYW0nKSB7XG4gICAgdXRpbC5jb2xsZWN0U3RyZWFtKHNvdXJjZSwgYXBwZW5kKTtcbiAgfVxufTtcblxuLyoqXG4gKiBbZmluYWxpemUgZGVzY3JpcHRpb25dXG4gKlxuICogQHJldHVybiB2b2lkXG4gKi9cblRhci5wcm90b3R5cGUuZmluYWxpemUgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5lbmdpbmUuZmluYWxpemUoKTtcbn07XG5cbi8qKlxuICogW29uIGRlc2NyaXB0aW9uXVxuICpcbiAqIEByZXR1cm4gdGhpcy5lbmdpbmVcbiAqL1xuVGFyLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5lbmdpbmUub24uYXBwbHkodGhpcy5lbmdpbmUsIGFyZ3VtZW50cyk7XG59O1xuXG4vKipcbiAqIFtwaXBlIGRlc2NyaXB0aW9uXVxuICpcbiAqIEBwYXJhbSAge1N0cmluZ30gZGVzdGluYXRpb25cbiAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9uc1xuICogQHJldHVybiB0aGlzLmVuZ2luZVxuICovXG5UYXIucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbihkZXN0aW5hdGlvbiwgb3B0aW9ucykge1xuICBpZiAodGhpcy5jb21wcmVzc29yKSB7XG4gICAgcmV0dXJuIHRoaXMuZW5naW5lLnBpcGUuYXBwbHkodGhpcy5lbmdpbmUsIFt0aGlzLmNvbXByZXNzb3JdKS5waXBlKGRlc3RpbmF0aW9uLCBvcHRpb25zKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdGhpcy5lbmdpbmUucGlwZS5hcHBseSh0aGlzLmVuZ2luZSwgYXJndW1lbnRzKTtcbiAgfVxufTtcblxuLyoqXG4gKiBbdW5waXBlIGRlc2NyaXB0aW9uXVxuICpcbiAqIEByZXR1cm4gdGhpcy5lbmdpbmVcbiAqL1xuVGFyLnByb3RvdHlwZS51bnBpcGUgPSBmdW5jdGlvbigpIHtcbiAgaWYgKHRoaXMuY29tcHJlc3Nvcikge1xuICAgIHJldHVybiB0aGlzLmNvbXByZXNzb3IudW5waXBlLmFwcGx5KHRoaXMuY29tcHJlc3NvciwgYXJndW1lbnRzKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdGhpcy5lbmdpbmUudW5waXBlLmFwcGx5KHRoaXMuZW5naW5lLCBhcmd1bWVudHMpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFRhcjtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBUYXJPcHRpb25zXG4gKiBAZ2xvYmFsXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IFtnemlwPWZhbHNlXSBDb21wcmVzcyB0aGUgdGFyIGFyY2hpdmUgdXNpbmcgZ3ppcC5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbZ3ppcE9wdGlvbnNdIFBhc3NlZCB0byBbemxpYl17QGxpbmsgaHR0cHM6Ly9ub2RlanMub3JnL2FwaS96bGliLmh0bWwjemxpYl9jbGFzc19vcHRpb25zfVxuICogdG8gY29udHJvbCBjb21wcmVzc2lvbi5cbiAqIEBwcm9wZXJ0eSB7Kn0gWypdIFNlZSBbdGFyLXN0cmVhbV17QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL21hZmludG9zaC90YXItc3RyZWFtfSBkb2N1bWVudGF0aW9uIGZvciBhZGRpdGlvbmFsIHByb3BlcnRpZXMuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBUYXJFbnRyeURhdGFcbiAqIEBnbG9iYWxcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBuYW1lIFNldHMgdGhlIGVudHJ5IG5hbWUgaW5jbHVkaW5nIGludGVybmFsIHBhdGguXG4gKiBAcHJvcGVydHkgeyhTdHJpbmd8RGF0ZSl9IFtkYXRlPU5PVygpXSBTZXRzIHRoZSBlbnRyeSBkYXRlLlxuICogQHByb3BlcnR5IHtOdW1iZXJ9IFttb2RlPUQ6MDc1NS9GOjA2NDRdIFNldHMgdGhlIGVudHJ5IHBlcm1pc3Npb25zLlxuICogQHByb3BlcnR5IHtTdHJpbmd9IFtwcmVmaXhdIFNldHMgYSBwYXRoIHByZWZpeCBmb3IgdGhlIGVudHJ5IG5hbWUuIFVzZWZ1bFxuICogd2hlbiB3b3JraW5nIHdpdGggbWV0aG9kcyBsaWtlIGBkaXJlY3RvcnlgIG9yIGBnbG9iYC5cbiAqIEBwcm9wZXJ0eSB7ZnMuU3RhdHN9IFtzdGF0c10gU2V0cyB0aGUgZnMgc3RhdCBkYXRhIGZvciB0aGlzIGVudHJ5IGFsbG93aW5nXG4gKiBmb3IgcmVkdWN0aW9uIG9mIGZzIHN0YXQgY2FsbHMgd2hlbiBzdGF0IGRhdGEgaXMgYWxyZWFkeSBrbm93bi5cbiAqL1xuXG4vKipcbiAqIFRhclN0cmVhbSBNb2R1bGVcbiAqIEBleHRlcm5hbCBUYXJTdHJlYW1cbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9tYWZpbnRvc2gvdGFyLXN0cmVhbX1cbiAqL1xuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIGdldERlZmF1bHRFeHBvcnRGcm9tQ2pzICh4KSB7XG5cdHJldHVybiB4ICYmIHguX19lc01vZHVsZSAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoeCwgJ2RlZmF1bHQnKSA/IHhbJ2RlZmF1bHQnXSA6IHg7XG59XG5cbmNvbnN0IENSQ19UQUJMRSA9IG5ldyBJbnQzMkFycmF5KFtcbiAgMCxcbiAgMTk5Njk1OTg5NCxcbiAgMzk5MzkxOTc4OCxcbiAgMjU2NzUyNDc5NCxcbiAgMTI0NjM0MTM3LFxuICAxODg2MDU3NjE1LFxuICAzOTE1NjIxNjg1LFxuICAyNjU3MzkyMDM1LFxuICAyNDkyNjgyNzQsXG4gIDIwNDQ1MDgzMjQsXG4gIDM3NzIxMTUyMzAsXG4gIDI1NDcxNzc4NjQsXG4gIDE2Mjk0MTk5NSxcbiAgMjEyNTU2MTAyMSxcbiAgMzg4NzYwNzA0NyxcbiAgMjQyODQ0NDA0OSxcbiAgNDk4NTM2NTQ4LFxuICAxNzg5OTI3NjY2LFxuICA0MDg5MDE2NjQ4LFxuICAyMjI3MDYxMjE0LFxuICA0NTA1NDg4NjEsXG4gIDE4NDMyNTg2MDMsXG4gIDQxMDc1ODA3NTMsXG4gIDIyMTE2Nzc2MzksXG4gIDMyNTg4Mzk5MCxcbiAgMTY4NDc3NzE1MixcbiAgNDI1MTEyMjA0MixcbiAgMjMyMTkyNjYzNixcbiAgMzM1NjMzNDg3LFxuICAxNjYxMzY1NDY1LFxuICA0MTk1MzAyNzU1LFxuICAyMzY2MTE1MzE3LFxuICA5OTcwNzMwOTYsXG4gIDEyODE5NTM4ODYsXG4gIDM1Nzk4NTUzMzIsXG4gIDI3MjQ2ODgyNDIsXG4gIDEwMDY4ODgxNDUsXG4gIDEyNTg2MDc2ODcsXG4gIDM1MjQxMDE2MjksXG4gIDI3Njg5NDI0NDMsXG4gIDkwMTA5NzcyMixcbiAgMTExOTAwMDY4NCxcbiAgMzY4NjUxNzIwNixcbiAgMjg5ODA2NTcyOCxcbiAgODUzMDQ0NDUxLFxuICAxMTcyMjY2MTAxLFxuICAzNzA1MDE1NzU5LFxuICAyODgyNjE2NjY1LFxuICA2NTE3Njc5ODAsXG4gIDEzNzM1MDM1NDYsXG4gIDMzNjk1NTQzMDQsXG4gIDMyMTgxMDQ1OTgsXG4gIDU2NTUwNzI1MyxcbiAgMTQ1NDYyMTczMSxcbiAgMzQ4NTExMTcwNSxcbiAgMzA5OTQzNjMwMyxcbiAgNjcxMjY2OTc0LFxuICAxNTk0MTk4MDI0LFxuICAzMzIyNzMwOTMwLFxuICAyOTcwMzQ3ODEyLFxuICA3OTU4MzU1MjcsXG4gIDE0ODMyMzAyMjUsXG4gIDMyNDQzNjcyNzUsXG4gIDMwNjAxNDk1NjUsXG4gIDE5OTQxNDYxOTIsXG4gIDMxMTU4NTM0LFxuICAyNTYzOTA3NzcyLFxuICA0MDIzNzE3OTMwLFxuICAxOTA3NDU5NDY1LFxuICAxMTI2MzcyMTUsXG4gIDI2ODAxNTMyNTMsXG4gIDM5MDQ0MjcwNTksXG4gIDIwMTM3NzYyOTAsXG4gIDI1MTcyMjAzNixcbiAgMjUxNzIxNTM3NCxcbiAgMzc3NTgzMDA0MCxcbiAgMjEzNzY1Njc2MyxcbiAgMTQxMzc2ODEzLFxuICAyNDM5Mjc3NzE5LFxuICAzODY1MjcxMjk3LFxuICAxODAyMTk1NDQ0LFxuICA0NzY4NjQ4NjYsXG4gIDIyMzgwMDEzNjgsXG4gIDQwNjY1MDg4NzgsXG4gIDE4MTIzNzA5MjUsXG4gIDQ1MzA5MjczMSxcbiAgMjE4MTYyNTAyNSxcbiAgNDExMTQ1MTIyMyxcbiAgMTcwNjA4ODkwMixcbiAgMzE0MDQyNzA0LFxuICAyMzQ0NTMyMjAyLFxuICA0MjQwMDE3NTMyLFxuICAxNjU4NjU4MjcxLFxuICAzNjY2MTk5NzcsXG4gIDIzNjI2NzAzMjMsXG4gIDQyMjQ5OTQ0MDUsXG4gIDEzMDM1MzU5NjAsXG4gIDk4NDk2MTQ4NixcbiAgMjc0NzAwNzA5MixcbiAgMzU2OTAzNzUzOCxcbiAgMTI1NjE3MDgxNyxcbiAgMTAzNzYwNDMxMSxcbiAgMjc2NTIxMDczMyxcbiAgMzU1NDA3OTk5NSxcbiAgMTEzMTAxNDUwNixcbiAgODc5Njc5OTk2LFxuICAyOTA5MjQzNDYyLFxuICAzNjYzNzcxODU2LFxuICAxMTQxMTI0NDY3LFxuICA4NTU4NDIyNzcsXG4gIDI4NTI4MDE2MzEsXG4gIDM3MDg2NDg2NDksXG4gIDEzNDI1MzM5NDgsXG4gIDY1NDQ1OTMwNixcbiAgMzE4ODM5NjA0OCxcbiAgMzM3MzAxNTE3NCxcbiAgMTQ2NjQ3OTkwOSxcbiAgNTQ0MTc5NjM1LFxuICAzMTEwNTIzOTEzLFxuICAzNDYyNTIyMDE1LFxuICAxNTkxNjcxMDU0LFxuICA3MDIxMzg3NzYsXG4gIDI5NjY0NjA0NTAsXG4gIDMzNTI3OTk0MTIsXG4gIDE1MDQ5MTg4MDcsXG4gIDc4MzU1MTg3MyxcbiAgMzA4MjY0MDQ0MyxcbiAgMzIzMzQ0Mjk4OSxcbiAgMzk4ODI5MjM4NCxcbiAgMjU5NjI1NDY0NixcbiAgNjIzMTcwNjgsXG4gIDE5NTc4MTA4NDIsXG4gIDM5Mzk4NDU5NDUsXG4gIDI2NDc4MTYxMTEsXG4gIDgxNDcwOTk3LFxuICAxOTQzODAzNTIzLFxuICAzODE0OTE4OTMwLFxuICAyNDg5NTk2ODA0LFxuICAyMjUyNzQ0MzAsXG4gIDIwNTM3OTAzNzYsXG4gIDM4MjYxNzU3NTUsXG4gIDI0NjY5MDYwMTMsXG4gIDE2NzgxNjc0MyxcbiAgMjA5NzY1MTM3NyxcbiAgNDAyNzU1MjU4MCxcbiAgMjI2NTQ5MDM4NixcbiAgNTAzNDQ0MDcyLFxuICAxNzYyMDUwODE0LFxuICA0MTUwNDE3MjQ1LFxuICAyMTU0MTI5MzU1LFxuICA0MjY1MjIyMjUsXG4gIDE4NTI1MDc4NzksXG4gIDQyNzUzMTM1MjYsXG4gIDIzMTIzMTc5MjAsXG4gIDI4Mjc1MzYyNixcbiAgMTc0MjU1NTg1MixcbiAgNDE4OTcwODE0MyxcbiAgMjM5NDg3Nzk0NSxcbiAgMzk3OTE3NzYzLFxuICAxNjIyMTgzNjM3LFxuICAzNjA0MzkwODg4LFxuICAyNzE0ODY2NTU4LFxuICA5NTM3Mjk3MzIsXG4gIDEzNDAwNzY2MjYsXG4gIDM1MTg3MTk5ODUsXG4gIDI3OTczNjA5OTksXG4gIDEwNjg4MjgzODEsXG4gIDEyMTk2Mzg4NTksXG4gIDM2MjQ3NDE4NTAsXG4gIDI5MzY2NzUxNDgsXG4gIDkwNjE4NTQ2MixcbiAgMTA5MDgxMjUxMixcbiAgMzc0NzY3MjAwMyxcbiAgMjgyNTM3OTY2OSxcbiAgODI5MzI5MTM1LFxuICAxMTgxMzM1MTYxLFxuICAzNDEyMTc3ODA0LFxuICAzMTYwODM0ODQyLFxuICA2MjgwODU0MDgsXG4gIDEzODI2MDUzNjYsXG4gIDM0MjMzNjkxMDksXG4gIDMxMzgwNzg0NjcsXG4gIDU3MDU2MjIzMyxcbiAgMTQyNjQwMDgxNSxcbiAgMzMxNzMxNjU0MixcbiAgMjk5ODczMzYwOCxcbiAgNzMzMjM5OTU0LFxuICAxNTU1MjYxOTU2LFxuICAzMjY4OTM1NTkxLFxuICAzMDUwMzYwNjI1LFxuICA3NTI0NTk0MDMsXG4gIDE1NDEzMjAyMjEsXG4gIDI2MDcwNzE5MjAsXG4gIDM5NjU5NzMwMzAsXG4gIDE5Njk5MjI5NzIsXG4gIDQwNzM1NDk4LFxuICAyNjE3ODM3MjI1LFxuICAzOTQzNTc3MTUxLFxuICAxOTEzMDg3ODc3LFxuICA4MzkwODM3MSxcbiAgMjUxMjM0MTYzNCxcbiAgMzgwMzc0MDY5MixcbiAgMjA3NTIwODYyMixcbiAgMjEzMjYxMTEyLFxuICAyNDYzMjcyNjAzLFxuICAzODU1OTkwMjg1LFxuICAyMDk0ODU0MDcxLFxuICAxOTg5NTg4ODEsXG4gIDIyNjIwMjkwMTIsXG4gIDQwNTcyNjA2MTAsXG4gIDE3NTkzNTk5OTIsXG4gIDUzNDQxNDE5MCxcbiAgMjE3NjcxODU0MSxcbiAgNDEzOTMyOTExNSxcbiAgMTg3MzgzNjAwMSxcbiAgNDE0NjY0NTY3LFxuICAyMjgyMjQ4OTM0LFxuICA0Mjc5MjAwMzY4LFxuICAxNzExNjg0NTU0LFxuICAyODUyODExMTYsXG4gIDI0MDU4MDE3MjcsXG4gIDQxNjcyMTY3NDUsXG4gIDE2MzQ0Njc3OTUsXG4gIDM3NjIyOTcwMSxcbiAgMjY4NTA2Nzg5NixcbiAgMzYwODAwNzQwNixcbiAgMTMwODkxODYxMixcbiAgOTU2NTQzOTM4LFxuICAyODA4NTU1MTA1LFxuICAzNDk1OTU4MjYzLFxuICAxMjMxNjM2MzAxLFxuICAxMDQ3NDI3MDM1LFxuICAyOTMyOTU5ODE4LFxuICAzNjU0NzAzODM2LFxuICAxMDg4MzU5MjcwLFxuICA5MzY5MThlMyxcbiAgMjg0NzcxNDg5OSxcbiAgMzczNjgzNzgyOSxcbiAgMTIwMjkwMDg2MyxcbiAgODE3MjMzODk3LFxuICAzMTgzMzQyMTA4LFxuICAzNDAxMjM3MTMwLFxuICAxNDA0Mjc3NTUyLFxuICA2MTU4MTgxNTAsXG4gIDMxMzQyMDc0OTMsXG4gIDM0NTM0MjEyMDMsXG4gIDE0MjM4NTc0NDksXG4gIDYwMTQ1MDQzMSxcbiAgMzAwOTgzNzYxNCxcbiAgMzI5NDcxMDQ1NixcbiAgMTU2NzEwMzc0NixcbiAgNzExOTI4NzI0LFxuICAzMDIwNjY4NDcxLFxuICAzMjcyMzgwMDY1LFxuICAxNTEwMzM0MjM1LFxuICA3NTUxNjcxMTdcbl0pO1xuZnVuY3Rpb24gZW5zdXJlQnVmZmVyKGlucHV0KSB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoaW5wdXQpKSB7XG4gICAgcmV0dXJuIGlucHV0O1xuICB9XG4gIGlmICh0eXBlb2YgaW5wdXQgPT09IFwibnVtYmVyXCIpIHtcbiAgICByZXR1cm4gQnVmZmVyLmFsbG9jKGlucHV0KTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oaW5wdXQpO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihcImlucHV0IG11c3QgYmUgYnVmZmVyLCBudW1iZXIsIG9yIHN0cmluZywgcmVjZWl2ZWQgXCIgKyB0eXBlb2YgaW5wdXQpO1xuICB9XG59XG5mdW5jdGlvbiBidWZmZXJpemVJbnQobnVtKSB7XG4gIGNvbnN0IHRtcCA9IGVuc3VyZUJ1ZmZlcig0KTtcbiAgdG1wLndyaXRlSW50MzJCRShudW0sIDApO1xuICByZXR1cm4gdG1wO1xufVxuZnVuY3Rpb24gX2NyYzMyKGJ1ZiwgcHJldmlvdXMpIHtcbiAgYnVmID0gZW5zdXJlQnVmZmVyKGJ1Zik7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIocHJldmlvdXMpKSB7XG4gICAgcHJldmlvdXMgPSBwcmV2aW91cy5yZWFkVUludDMyQkUoMCk7XG4gIH1cbiAgbGV0IGNyYyA9IH5+cHJldmlvdXMgXiAtMTtcbiAgZm9yICh2YXIgbiA9IDA7IG4gPCBidWYubGVuZ3RoOyBuKyspIHtcbiAgICBjcmMgPSBDUkNfVEFCTEVbKGNyYyBeIGJ1ZltuXSkgJiAyNTVdIF4gY3JjID4+PiA4O1xuICB9XG4gIHJldHVybiBjcmMgXiAtMTtcbn1cbmZ1bmN0aW9uIGNyYzMyKCkge1xuICByZXR1cm4gYnVmZmVyaXplSW50KF9jcmMzMi5hcHBseShudWxsLCBhcmd1bWVudHMpKTtcbn1cbmNyYzMyLnNpZ25lZCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gX2NyYzMyLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG59O1xuY3JjMzIudW5zaWduZWQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIF9jcmMzMi5hcHBseShudWxsLCBhcmd1bWVudHMpID4+PiAwO1xufTtcbnZhciBidWZmZXJDcmMzMiA9IGNyYzMyO1xuXG5jb25zdCBpbmRleCA9IC8qQF9fUFVSRV9fKi9nZXREZWZhdWx0RXhwb3J0RnJvbUNqcyhidWZmZXJDcmMzMik7XG5cbm1vZHVsZS5leHBvcnRzID0gaW5kZXg7XG4iLAogICAgIi8qKlxuICogSlNPTiBGb3JtYXQgUGx1Z2luXG4gKlxuICogQG1vZHVsZSBwbHVnaW5zL2pzb25cbiAqIEBsaWNlbnNlIFtNSVRde0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hcmNoaXZlcmpzL25vZGUtYXJjaGl2ZXIvYmxvYi9tYXN0ZXIvTElDRU5TRX1cbiAqIEBjb3B5cmlnaHQgKGMpIDIwMTItMjAxNCBDaHJpcyBUYWxraW5ndG9uLCBjb250cmlidXRvcnMuXG4gKi9cbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ3V0aWwnKS5pbmhlcml0cztcbnZhciBUcmFuc2Zvcm0gPSByZXF1aXJlKCdyZWFkYWJsZS1zdHJlYW0nKS5UcmFuc2Zvcm07XG5cbnZhciBjcmMzMiA9IHJlcXVpcmUoJ2J1ZmZlci1jcmMzMicpO1xudmFyIHV0aWwgPSByZXF1aXJlKCdhcmNoaXZlci11dGlscycpO1xuXG4vKipcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHsoSnNvbk9wdGlvbnN8VHJhbnNmb3JtT3B0aW9ucyl9IG9wdGlvbnNcbiAqL1xudmFyIEpzb24gPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBKc29uKSkge1xuICAgIHJldHVybiBuZXcgSnNvbihvcHRpb25zKTtcbiAgfVxuXG4gIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMgPSB1dGlsLmRlZmF1bHRzKG9wdGlvbnMsIHt9KTtcblxuICBUcmFuc2Zvcm0uY2FsbCh0aGlzLCBvcHRpb25zKTtcblxuICB0aGlzLnN1cHBvcnRzID0ge1xuICAgIGRpcmVjdG9yeTogdHJ1ZSxcbiAgICBzeW1saW5rOiB0cnVlXG4gIH07XG5cbiAgdGhpcy5maWxlcyA9IFtdO1xufTtcblxuaW5oZXJpdHMoSnNvbiwgVHJhbnNmb3JtKTtcblxuLyoqXG4gKiBbX3RyYW5zZm9ybSBkZXNjcmlwdGlvbl1cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtICB7QnVmZmVyfSAgIGNodW5rXG4gKiBAcGFyYW0gIHtTdHJpbmd9ICAgZW5jb2RpbmdcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB2b2lkXG4gKi9cbkpzb24ucHJvdG90eXBlLl90cmFuc2Zvcm0gPSBmdW5jdGlvbihjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gIGNhbGxiYWNrKG51bGwsIGNodW5rKTtcbn07XG5cbi8qKlxuICogW193cml0ZVN0cmluZ2lmaWVkIGRlc2NyaXB0aW9uXVxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHZvaWRcbiAqL1xuSnNvbi5wcm90b3R5cGUuX3dyaXRlU3RyaW5naWZpZWQgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGZpbGVTdHJpbmcgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmZpbGVzKTtcbiAgdGhpcy53cml0ZShmaWxlU3RyaW5nKTtcbn07XG5cbi8qKlxuICogW2FwcGVuZCBkZXNjcmlwdGlvbl1cbiAqXG4gKiBAcGFyYW0gIHsoQnVmZmVyfFN0cmVhbSl9ICAgc291cmNlXG4gKiBAcGFyYW0gIHtFbnRyeURhdGF9ICAgZGF0YVxuICogQHBhcmFtICB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHZvaWRcbiAqL1xuSnNvbi5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24oc291cmNlLCBkYXRhLCBjYWxsYmFjaykge1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgZGF0YS5jcmMzMiA9IDA7XG5cbiAgZnVuY3Rpb24gb25lbmQoZXJyLCBzb3VyY2VCdWZmZXIpIHtcbiAgICBpZiAoZXJyKSB7XG4gICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRhdGEuc2l6ZSA9IHNvdXJjZUJ1ZmZlci5sZW5ndGggfHwgMDtcbiAgICBkYXRhLmNyYzMyID0gY3JjMzIudW5zaWduZWQoc291cmNlQnVmZmVyKTtcblxuICAgIHNlbGYuZmlsZXMucHVzaChkYXRhKTtcblxuICAgIGNhbGxiYWNrKG51bGwsIGRhdGEpO1xuICB9XG5cbiAgaWYgKGRhdGEuc291cmNlVHlwZSA9PT0gJ2J1ZmZlcicpIHtcbiAgICBvbmVuZChudWxsLCBzb3VyY2UpO1xuICB9IGVsc2UgaWYgKGRhdGEuc291cmNlVHlwZSA9PT0gJ3N0cmVhbScpIHtcbiAgICB1dGlsLmNvbGxlY3RTdHJlYW0oc291cmNlLCBvbmVuZCk7XG4gIH1cbn07XG5cbi8qKlxuICogW2ZpbmFsaXplIGRlc2NyaXB0aW9uXVxuICpcbiAqIEByZXR1cm4gdm9pZFxuICovXG5Kc29uLnByb3RvdHlwZS5maW5hbGl6ZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl93cml0ZVN0cmluZ2lmaWVkKCk7XG4gIHRoaXMuZW5kKCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEpzb247XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gSnNvbk9wdGlvbnNcbiAqIEBnbG9iYWxcbiAqL1xuIiwKICAgICIvKipcbiAqIEFyY2hpdmVyIFZlbmRpbmdcbiAqXG4gKiBAaWdub3JlXG4gKiBAbGljZW5zZSBbTUlUXXtAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXJjaGl2ZXJqcy9ub2RlLWFyY2hpdmVyL2Jsb2IvbWFzdGVyL0xJQ0VOU0V9XG4gKiBAY29weXJpZ2h0IChjKSAyMDEyLTIwMTQgQ2hyaXMgVGFsa2luZ3RvbiwgY29udHJpYnV0b3JzLlxuICovXG52YXIgQXJjaGl2ZXIgPSByZXF1aXJlKCcuL2xpYi9jb3JlJyk7XG5cbnZhciBmb3JtYXRzID0ge307XG5cbi8qKlxuICogRGlzcGVuc2VzIGEgbmV3IEFyY2hpdmVyIGluc3RhbmNlLlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtICB7U3RyaW5nfSBmb3JtYXQgVGhlIGFyY2hpdmUgZm9ybWF0IHRvIHVzZS5cbiAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9ucyBTZWUgW0FyY2hpdmVyXXtAbGluayBBcmNoaXZlcn1cbiAqIEByZXR1cm4ge0FyY2hpdmVyfVxuICovXG52YXIgdmVuZGluZyA9IGZ1bmN0aW9uKGZvcm1hdCwgb3B0aW9ucykge1xuICByZXR1cm4gdmVuZGluZy5jcmVhdGUoZm9ybWF0LCBvcHRpb25zKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBBcmNoaXZlciBpbnN0YW5jZS5cbiAqXG4gKiBAcGFyYW0gIHtTdHJpbmd9IGZvcm1hdCBUaGUgYXJjaGl2ZSBmb3JtYXQgdG8gdXNlLlxuICogQHBhcmFtICB7T2JqZWN0fSBvcHRpb25zIFNlZSBbQXJjaGl2ZXJde0BsaW5rIEFyY2hpdmVyfVxuICogQHJldHVybiB7QXJjaGl2ZXJ9XG4gKi9cbnZlbmRpbmcuY3JlYXRlID0gZnVuY3Rpb24oZm9ybWF0LCBvcHRpb25zKSB7XG4gIGlmIChmb3JtYXRzW2Zvcm1hdF0pIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBuZXcgQXJjaGl2ZXIoZm9ybWF0LCBvcHRpb25zKTtcbiAgICBpbnN0YW5jZS5zZXRGb3JtYXQoZm9ybWF0KTtcbiAgICBpbnN0YW5jZS5zZXRNb2R1bGUobmV3IGZvcm1hdHNbZm9ybWF0XShvcHRpb25zKSk7XG5cbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjcmVhdGUoJyArIGZvcm1hdCArICcpOiBmb3JtYXQgbm90IHJlZ2lzdGVyZWQnKTtcbiAgfVxufTtcblxuLyoqXG4gKiBSZWdpc3RlcnMgYSBmb3JtYXQgZm9yIHVzZSB3aXRoIGFyY2hpdmVyLlxuICpcbiAqIEBwYXJhbSAge1N0cmluZ30gZm9ybWF0IFRoZSBuYW1lIG9mIHRoZSBmb3JtYXQuXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gbW9kdWxlIFRoZSBmdW5jdGlvbiBmb3IgYXJjaGl2ZXIgdG8gaW50ZXJhY3Qgd2l0aC5cbiAqIEByZXR1cm4gdm9pZFxuICovXG52ZW5kaW5nLnJlZ2lzdGVyRm9ybWF0ID0gZnVuY3Rpb24oZm9ybWF0LCBtb2R1bGUpIHtcbiAgaWYgKGZvcm1hdHNbZm9ybWF0XSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncmVnaXN0ZXIoJyArIGZvcm1hdCArICcpOiBmb3JtYXQgYWxyZWFkeSByZWdpc3RlcmVkJyk7XG4gIH1cblxuICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBFcnJvcigncmVnaXN0ZXIoJyArIGZvcm1hdCArICcpOiBmb3JtYXQgbW9kdWxlIGludmFsaWQnKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgbW9kdWxlLnByb3RvdHlwZS5hcHBlbmQgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIG1vZHVsZS5wcm90b3R5cGUuZmluYWxpemUgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlZ2lzdGVyKCcgKyBmb3JtYXQgKyAnKTogZm9ybWF0IG1vZHVsZSBtaXNzaW5nIG1ldGhvZHMnKTtcbiAgfVxuXG4gIGZvcm1hdHNbZm9ybWF0XSA9IG1vZHVsZTtcbn07XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIGZvcm1hdCBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQuXG4gKiBcbiAqIEBwYXJhbSB7U3RyaW5nfSBmb3JtYXQgdGhlIG5hbWUgb2YgdGhlIGZvcm1hdC5cbiAqIEByZXR1cm4gYm9vbGVhblxuICovXG52ZW5kaW5nLmlzUmVnaXN0ZXJlZEZvcm1hdCA9IGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgaWYgKGZvcm1hdHNbZm9ybWF0XSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIFxuICByZXR1cm4gZmFsc2U7XG59O1xuXG52ZW5kaW5nLnJlZ2lzdGVyRm9ybWF0KCd6aXAnLCByZXF1aXJlKCcuL2xpYi9wbHVnaW5zL3ppcCcpKTtcbnZlbmRpbmcucmVnaXN0ZXJGb3JtYXQoJ3RhcicsIHJlcXVpcmUoJy4vbGliL3BsdWdpbnMvdGFyJykpO1xudmVuZGluZy5yZWdpc3RlckZvcm1hdCgnanNvbicsIHJlcXVpcmUoJy4vbGliL3BsdWdpbnMvanNvbicpKTtcblxubW9kdWxlLmV4cG9ydHMgPSB2ZW5kaW5nOyIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jcmVhdGVaaXBVcGxvYWRTdHJlYW0gPSBleHBvcnRzLlppcFVwbG9hZFN0cmVhbSA9IGV4cG9ydHMuREVGQVVMVF9DT01QUkVTU0lPTl9MRVZFTCA9IHZvaWQgMDtcbmNvbnN0IHN0cmVhbSA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwic3RyZWFtXCIpKTtcbmNvbnN0IHByb21pc2VzXzEgPSByZXF1aXJlKFwiZnMvcHJvbWlzZXNcIik7XG5jb25zdCBhcmNoaXZlciA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiYXJjaGl2ZXJcIikpO1xuY29uc3QgY29yZSA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiQGFjdGlvbnMvY29yZVwiKSk7XG5jb25zdCBjb25maWdfMSA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvY29uZmlnXCIpO1xuZXhwb3J0cy5ERUZBVUxUX0NPTVBSRVNTSU9OX0xFVkVMID0gNjtcbi8vIEN1c3RvbSBzdHJlYW0gdHJhbnNmb3JtZXIgc28gd2UgY2FuIHNldCB0aGUgaGlnaFdhdGVyTWFyayBwcm9wZXJ0eVxuLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9pc3N1ZXMvODg1NVxuY2xhc3MgWmlwVXBsb2FkU3RyZWFtIGV4dGVuZHMgc3RyZWFtLlRyYW5zZm9ybSB7XG4gICAgY29uc3RydWN0b3IoYnVmZmVyU2l6ZSkge1xuICAgICAgICBzdXBlcih7XG4gICAgICAgICAgICBoaWdoV2F0ZXJNYXJrOiBidWZmZXJTaXplXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIF90cmFuc2Zvcm0oY2h1bmssIGVuYywgY2IpIHtcbiAgICAgICAgY2IobnVsbCwgY2h1bmspO1xuICAgIH1cbn1cbmV4cG9ydHMuWmlwVXBsb2FkU3RyZWFtID0gWmlwVXBsb2FkU3RyZWFtO1xuZnVuY3Rpb24gY3JlYXRlWmlwVXBsb2FkU3RyZWFtKHVwbG9hZFNwZWNpZmljYXRpb24sIGNvbXByZXNzaW9uTGV2ZWwgPSBleHBvcnRzLkRFRkFVTFRfQ09NUFJFU1NJT05fTEVWRUwpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb3JlLmRlYnVnKGBDcmVhdGluZyBBcnRpZmFjdCBhcmNoaXZlIHdpdGggY29tcHJlc3Npb25MZXZlbDogJHtjb21wcmVzc2lvbkxldmVsfWApO1xuICAgICAgICBjb25zdCB6aXAgPSBhcmNoaXZlci5jcmVhdGUoJ3ppcCcsIHtcbiAgICAgICAgICAgIGhpZ2hXYXRlck1hcms6ICgwLCBjb25maWdfMS5nZXRVcGxvYWRDaHVua1NpemUpKCksXG4gICAgICAgICAgICB6bGliOiB7IGxldmVsOiBjb21wcmVzc2lvbkxldmVsIH1cbiAgICAgICAgfSk7XG4gICAgICAgIC8vIHJlZ2lzdGVyIGNhbGxiYWNrcyBmb3IgdmFyaW91cyBldmVudHMgZHVyaW5nIHRoZSB6aXAgbGlmZWN5Y2xlXG4gICAgICAgIHppcC5vbignZXJyb3InLCB6aXBFcnJvckNhbGxiYWNrKTtcbiAgICAgICAgemlwLm9uKCd3YXJuaW5nJywgemlwV2FybmluZ0NhbGxiYWNrKTtcbiAgICAgICAgemlwLm9uKCdmaW5pc2gnLCB6aXBGaW5pc2hDYWxsYmFjayk7XG4gICAgICAgIHppcC5vbignZW5kJywgemlwRW5kQ2FsbGJhY2spO1xuICAgICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgdXBsb2FkU3BlY2lmaWNhdGlvbikge1xuICAgICAgICAgICAgaWYgKGZpbGUuc291cmNlUGF0aCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHN5bWxpbmsgYW5kIHJlc29sdmUgdGhlIHNvdXJjZSBwYXRoXG4gICAgICAgICAgICAgICAgbGV0IHNvdXJjZVBhdGggPSBmaWxlLnNvdXJjZVBhdGg7XG4gICAgICAgICAgICAgICAgaWYgKGZpbGUuc3RhdHMuaXNTeW1ib2xpY0xpbmsoKSkge1xuICAgICAgICAgICAgICAgICAgICBzb3VyY2VQYXRoID0geWllbGQgKDAsIHByb21pc2VzXzEucmVhbHBhdGgpKGZpbGUuc291cmNlUGF0aCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUgZmlsZSB0byB0aGUgemlwXG4gICAgICAgICAgICAgICAgemlwLmZpbGUoc291cmNlUGF0aCwge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBmaWxlLmRlc3RpbmF0aW9uUGF0aFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gQWRkIGEgZGlyZWN0b3J5IHRvIHRoZSB6aXBcbiAgICAgICAgICAgICAgICB6aXAuYXBwZW5kKCcnLCB7IG5hbWU6IGZpbGUuZGVzdGluYXRpb25QYXRoIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJ1ZmZlclNpemUgPSAoMCwgY29uZmlnXzEuZ2V0VXBsb2FkQ2h1bmtTaXplKSgpO1xuICAgICAgICBjb25zdCB6aXBVcGxvYWRTdHJlYW0gPSBuZXcgWmlwVXBsb2FkU3RyZWFtKGJ1ZmZlclNpemUpO1xuICAgICAgICBjb3JlLmRlYnVnKGBaaXAgd3JpdGUgaGlnaCB3YXRlcm1hcmsgdmFsdWUgJHt6aXBVcGxvYWRTdHJlYW0ud3JpdGFibGVIaWdoV2F0ZXJNYXJrfWApO1xuICAgICAgICBjb3JlLmRlYnVnKGBaaXAgcmVhZCBoaWdoIHdhdGVybWFyayB2YWx1ZSAke3ppcFVwbG9hZFN0cmVhbS5yZWFkYWJsZUhpZ2hXYXRlck1hcmt9YCk7XG4gICAgICAgIHppcC5waXBlKHppcFVwbG9hZFN0cmVhbSk7XG4gICAgICAgIHppcC5maW5hbGl6ZSgpO1xuICAgICAgICByZXR1cm4gemlwVXBsb2FkU3RyZWFtO1xuICAgIH0pO1xufVxuZXhwb3J0cy5jcmVhdGVaaXBVcGxvYWRTdHJlYW0gPSBjcmVhdGVaaXBVcGxvYWRTdHJlYW07XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuY29uc3QgemlwRXJyb3JDYWxsYmFjayA9IChlcnJvcikgPT4ge1xuICAgIGNvcmUuZXJyb3IoJ0FuIGVycm9yIGhhcyBvY2N1cnJlZCB3aGlsZSBjcmVhdGluZyB0aGUgemlwIGZpbGUgZm9yIHVwbG9hZCcpO1xuICAgIGNvcmUuaW5mbyhlcnJvcik7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdBbiBlcnJvciBoYXMgb2NjdXJyZWQgZHVyaW5nIHppcCBjcmVhdGlvbiBmb3IgdGhlIGFydGlmYWN0Jyk7XG59O1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmNvbnN0IHppcFdhcm5pbmdDYWxsYmFjayA9IChlcnJvcikgPT4ge1xuICAgIGlmIChlcnJvci5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICBjb3JlLndhcm5pbmcoJ0VOT0VOVCB3YXJuaW5nIGR1cmluZyBhcnRpZmFjdCB6aXAgY3JlYXRpb24uIE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnknKTtcbiAgICAgICAgY29yZS5pbmZvKGVycm9yKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvcmUud2FybmluZyhgQSBub24tYmxvY2tpbmcgd2FybmluZyBoYXMgb2NjdXJyZWQgZHVyaW5nIGFydGlmYWN0IHppcCBjcmVhdGlvbjogJHtlcnJvci5jb2RlfWApO1xuICAgICAgICBjb3JlLmluZm8oZXJyb3IpO1xuICAgIH1cbn07XG5jb25zdCB6aXBGaW5pc2hDYWxsYmFjayA9ICgpID0+IHtcbiAgICBjb3JlLmRlYnVnKCdaaXAgc3RyZWFtIGZvciB1cGxvYWQgaGFzIGZpbmlzaGVkLicpO1xufTtcbmNvbnN0IHppcEVuZENhbGxiYWNrID0gKCkgPT4ge1xuICAgIGNvcmUuZGVidWcoJ1ppcCBzdHJlYW0gZm9yIHVwbG9hZCBoYXMgZW5kZWQuJyk7XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9emlwLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy51cGxvYWRBcnRpZmFjdCA9IHZvaWQgMDtcbmNvbnN0IGNvcmUgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIkBhY3Rpb25zL2NvcmVcIikpO1xuY29uc3QgcmV0ZW50aW9uXzEgPSByZXF1aXJlKFwiLi9yZXRlbnRpb25cIik7XG5jb25zdCBwYXRoX2FuZF9hcnRpZmFjdF9uYW1lX3ZhbGlkYXRpb25fMSA9IHJlcXVpcmUoXCIuL3BhdGgtYW5kLWFydGlmYWN0LW5hbWUtdmFsaWRhdGlvblwiKTtcbmNvbnN0IGFydGlmYWN0X3R3aXJwX2NsaWVudF8xID0gcmVxdWlyZShcIi4uL3NoYXJlZC9hcnRpZmFjdC10d2lycC1jbGllbnRcIik7XG5jb25zdCB1cGxvYWRfemlwX3NwZWNpZmljYXRpb25fMSA9IHJlcXVpcmUoXCIuL3VwbG9hZC16aXAtc3BlY2lmaWNhdGlvblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvdXRpbFwiKTtcbmNvbnN0IGJsb2JfdXBsb2FkXzEgPSByZXF1aXJlKFwiLi9ibG9iLXVwbG9hZFwiKTtcbmNvbnN0IHppcF8xID0gcmVxdWlyZShcIi4vemlwXCIpO1xuY29uc3QgZ2VuZXJhdGVkXzEgPSByZXF1aXJlKFwiLi4vLi4vZ2VuZXJhdGVkXCIpO1xuY29uc3QgZXJyb3JzXzEgPSByZXF1aXJlKFwiLi4vc2hhcmVkL2Vycm9yc1wiKTtcbmZ1bmN0aW9uIHVwbG9hZEFydGlmYWN0KG5hbWUsIGZpbGVzLCByb290RGlyZWN0b3J5LCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgKDAsIHBhdGhfYW5kX2FydGlmYWN0X25hbWVfdmFsaWRhdGlvbl8xLnZhbGlkYXRlQXJ0aWZhY3ROYW1lKShuYW1lKTtcbiAgICAgICAgKDAsIHVwbG9hZF96aXBfc3BlY2lmaWNhdGlvbl8xLnZhbGlkYXRlUm9vdERpcmVjdG9yeSkocm9vdERpcmVjdG9yeSk7XG4gICAgICAgIGNvbnN0IHppcFNwZWNpZmljYXRpb24gPSAoMCwgdXBsb2FkX3ppcF9zcGVjaWZpY2F0aW9uXzEuZ2V0VXBsb2FkWmlwU3BlY2lmaWNhdGlvbikoZmlsZXMsIHJvb3REaXJlY3RvcnkpO1xuICAgICAgICBpZiAoemlwU3BlY2lmaWNhdGlvbi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBlcnJvcnNfMS5GaWxlc05vdEZvdW5kRXJyb3IoemlwU3BlY2lmaWNhdGlvbi5mbGF0TWFwKHMgPT4gKHMuc291cmNlUGF0aCA/IFtzLnNvdXJjZVBhdGhdIDogW10pKSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZ2V0IHRoZSBJRHMgbmVlZGVkIGZvciB0aGUgYXJ0aWZhY3QgY3JlYXRpb25cbiAgICAgICAgY29uc3QgYmFja2VuZElkcyA9ICgwLCB1dGlsXzEuZ2V0QmFja2VuZElkc0Zyb21Ub2tlbikoKTtcbiAgICAgICAgLy8gY3JlYXRlIHRoZSBhcnRpZmFjdCBjbGllbnRcbiAgICAgICAgY29uc3QgYXJ0aWZhY3RDbGllbnQgPSAoMCwgYXJ0aWZhY3RfdHdpcnBfY2xpZW50XzEuaW50ZXJuYWxBcnRpZmFjdFR3aXJwQ2xpZW50KSgpO1xuICAgICAgICAvLyBjcmVhdGUgdGhlIGFydGlmYWN0XG4gICAgICAgIGNvbnN0IGNyZWF0ZUFydGlmYWN0UmVxID0ge1xuICAgICAgICAgICAgd29ya2Zsb3dSdW5CYWNrZW5kSWQ6IGJhY2tlbmRJZHMud29ya2Zsb3dSdW5CYWNrZW5kSWQsXG4gICAgICAgICAgICB3b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZDogYmFja2VuZElkcy53b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZCxcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICB2ZXJzaW9uOiA0XG4gICAgICAgIH07XG4gICAgICAgIC8vIGlmIHRoZXJlIGlzIGEgcmV0ZW50aW9uIHBlcmlvZCwgYWRkIGl0IHRvIHRoZSByZXF1ZXN0XG4gICAgICAgIGNvbnN0IGV4cGlyZXNBdCA9ICgwLCByZXRlbnRpb25fMS5nZXRFeHBpcmF0aW9uKShvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMucmV0ZW50aW9uRGF5cyk7XG4gICAgICAgIGlmIChleHBpcmVzQXQpIHtcbiAgICAgICAgICAgIGNyZWF0ZUFydGlmYWN0UmVxLmV4cGlyZXNBdCA9IGV4cGlyZXNBdDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjcmVhdGVBcnRpZmFjdFJlc3AgPSB5aWVsZCBhcnRpZmFjdENsaWVudC5DcmVhdGVBcnRpZmFjdChjcmVhdGVBcnRpZmFjdFJlcSk7XG4gICAgICAgIGlmICghY3JlYXRlQXJ0aWZhY3RSZXNwLm9rKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuSW52YWxpZFJlc3BvbnNlRXJyb3IoJ0NyZWF0ZUFydGlmYWN0OiByZXNwb25zZSBmcm9tIGJhY2tlbmQgd2FzIG5vdCBvaycpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHppcFVwbG9hZFN0cmVhbSA9IHlpZWxkICgwLCB6aXBfMS5jcmVhdGVaaXBVcGxvYWRTdHJlYW0pKHppcFNwZWNpZmljYXRpb24sIG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5jb21wcmVzc2lvbkxldmVsKTtcbiAgICAgICAgLy8gVXBsb2FkIHppcCB0byBibG9iIHN0b3JhZ2VcbiAgICAgICAgY29uc3QgdXBsb2FkUmVzdWx0ID0geWllbGQgKDAsIGJsb2JfdXBsb2FkXzEudXBsb2FkWmlwVG9CbG9iU3RvcmFnZSkoY3JlYXRlQXJ0aWZhY3RSZXNwLnNpZ25lZFVwbG9hZFVybCwgemlwVXBsb2FkU3RyZWFtKTtcbiAgICAgICAgLy8gZmluYWxpemUgdGhlIGFydGlmYWN0XG4gICAgICAgIGNvbnN0IGZpbmFsaXplQXJ0aWZhY3RSZXEgPSB7XG4gICAgICAgICAgICB3b3JrZmxvd1J1bkJhY2tlbmRJZDogYmFja2VuZElkcy53b3JrZmxvd1J1bkJhY2tlbmRJZCxcbiAgICAgICAgICAgIHdvcmtmbG93Sm9iUnVuQmFja2VuZElkOiBiYWNrZW5kSWRzLndvcmtmbG93Sm9iUnVuQmFja2VuZElkLFxuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIHNpemU6IHVwbG9hZFJlc3VsdC51cGxvYWRTaXplID8gdXBsb2FkUmVzdWx0LnVwbG9hZFNpemUudG9TdHJpbmcoKSA6ICcwJ1xuICAgICAgICB9O1xuICAgICAgICBpZiAodXBsb2FkUmVzdWx0LnNoYTI1Nkhhc2gpIHtcbiAgICAgICAgICAgIGZpbmFsaXplQXJ0aWZhY3RSZXEuaGFzaCA9IGdlbmVyYXRlZF8xLlN0cmluZ1ZhbHVlLmNyZWF0ZSh7XG4gICAgICAgICAgICAgICAgdmFsdWU6IGBzaGEyNTY6JHt1cGxvYWRSZXN1bHQuc2hhMjU2SGFzaH1gXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb3JlLmluZm8oYEZpbmFsaXppbmcgYXJ0aWZhY3QgdXBsb2FkYCk7XG4gICAgICAgIGNvbnN0IGZpbmFsaXplQXJ0aWZhY3RSZXNwID0geWllbGQgYXJ0aWZhY3RDbGllbnQuRmluYWxpemVBcnRpZmFjdChmaW5hbGl6ZUFydGlmYWN0UmVxKTtcbiAgICAgICAgaWYgKCFmaW5hbGl6ZUFydGlmYWN0UmVzcC5vaykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGVycm9yc18xLkludmFsaWRSZXNwb25zZUVycm9yKCdGaW5hbGl6ZUFydGlmYWN0OiByZXNwb25zZSBmcm9tIGJhY2tlbmQgd2FzIG5vdCBvaycpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFydGlmYWN0SWQgPSBCaWdJbnQoZmluYWxpemVBcnRpZmFjdFJlc3AuYXJ0aWZhY3RJZCk7XG4gICAgICAgIGNvcmUuaW5mbyhgQXJ0aWZhY3QgJHtuYW1lfS56aXAgc3VjY2Vzc2Z1bGx5IGZpbmFsaXplZC4gQXJ0aWZhY3QgSUQgJHthcnRpZmFjdElkfWApO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2l6ZTogdXBsb2FkUmVzdWx0LnVwbG9hZFNpemUsXG4gICAgICAgICAgICBpZDogTnVtYmVyKGFydGlmYWN0SWQpXG4gICAgICAgIH07XG4gICAgfSk7XG59XG5leHBvcnRzLnVwbG9hZEFydGlmYWN0ID0gdXBsb2FkQXJ0aWZhY3Q7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11cGxvYWQtYXJ0aWZhY3QuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQ29udGV4dCA9IHZvaWQgMDtcbmNvbnN0IGZzXzEgPSByZXF1aXJlKFwiZnNcIik7XG5jb25zdCBvc18xID0gcmVxdWlyZShcIm9zXCIpO1xuY2xhc3MgQ29udGV4dCB7XG4gICAgLyoqXG4gICAgICogSHlkcmF0ZSB0aGUgY29udGV4dCBmcm9tIHRoZSBlbnZpcm9ubWVudFxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYztcbiAgICAgICAgdGhpcy5wYXlsb2FkID0ge307XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5HSVRIVUJfRVZFTlRfUEFUSCkge1xuICAgICAgICAgICAgaWYgKGZzXzEuZXhpc3RzU3luYyhwcm9jZXNzLmVudi5HSVRIVUJfRVZFTlRfUEFUSCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBheWxvYWQgPSBKU09OLnBhcnNlKGZzXzEucmVhZEZpbGVTeW5jKHByb2Nlc3MuZW52LkdJVEhVQl9FVkVOVF9QQVRILCB7IGVuY29kaW5nOiAndXRmOCcgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IHByb2Nlc3MuZW52LkdJVEhVQl9FVkVOVF9QQVRIO1xuICAgICAgICAgICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGBHSVRIVUJfRVZFTlRfUEFUSCAke3BhdGh9IGRvZXMgbm90IGV4aXN0JHtvc18xLkVPTH1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmV2ZW50TmFtZSA9IHByb2Nlc3MuZW52LkdJVEhVQl9FVkVOVF9OQU1FO1xuICAgICAgICB0aGlzLnNoYSA9IHByb2Nlc3MuZW52LkdJVEhVQl9TSEE7XG4gICAgICAgIHRoaXMucmVmID0gcHJvY2Vzcy5lbnYuR0lUSFVCX1JFRjtcbiAgICAgICAgdGhpcy53b3JrZmxvdyA9IHByb2Nlc3MuZW52LkdJVEhVQl9XT1JLRkxPVztcbiAgICAgICAgdGhpcy5hY3Rpb24gPSBwcm9jZXNzLmVudi5HSVRIVUJfQUNUSU9OO1xuICAgICAgICB0aGlzLmFjdG9yID0gcHJvY2Vzcy5lbnYuR0lUSFVCX0FDVE9SO1xuICAgICAgICB0aGlzLmpvYiA9IHByb2Nlc3MuZW52LkdJVEhVQl9KT0I7XG4gICAgICAgIHRoaXMucnVuTnVtYmVyID0gcGFyc2VJbnQocHJvY2Vzcy5lbnYuR0lUSFVCX1JVTl9OVU1CRVIsIDEwKTtcbiAgICAgICAgdGhpcy5ydW5JZCA9IHBhcnNlSW50KHByb2Nlc3MuZW52LkdJVEhVQl9SVU5fSUQsIDEwKTtcbiAgICAgICAgdGhpcy5hcGlVcmwgPSAoX2EgPSBwcm9jZXNzLmVudi5HSVRIVUJfQVBJX1VSTCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogYGh0dHBzOi8vYXBpLmdpdGh1Yi5jb21gO1xuICAgICAgICB0aGlzLnNlcnZlclVybCA9IChfYiA9IHByb2Nlc3MuZW52LkdJVEhVQl9TRVJWRVJfVVJMKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBgaHR0cHM6Ly9naXRodWIuY29tYDtcbiAgICAgICAgdGhpcy5ncmFwaHFsVXJsID0gKF9jID0gcHJvY2Vzcy5lbnYuR0lUSFVCX0dSQVBIUUxfVVJMKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiBgaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9ncmFwaHFsYDtcbiAgICB9XG4gICAgZ2V0IGlzc3VlKCkge1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gdGhpcy5wYXlsb2FkO1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCB0aGlzLnJlcG8pLCB7IG51bWJlcjogKHBheWxvYWQuaXNzdWUgfHwgcGF5bG9hZC5wdWxsX3JlcXVlc3QgfHwgcGF5bG9hZCkubnVtYmVyIH0pO1xuICAgIH1cbiAgICBnZXQgcmVwbygpIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52LkdJVEhVQl9SRVBPU0lUT1JZKSB7XG4gICAgICAgICAgICBjb25zdCBbb3duZXIsIHJlcG9dID0gcHJvY2Vzcy5lbnYuR0lUSFVCX1JFUE9TSVRPUlkuc3BsaXQoJy8nKTtcbiAgICAgICAgICAgIHJldHVybiB7IG93bmVyLCByZXBvIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucGF5bG9hZC5yZXBvc2l0b3J5KSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG93bmVyOiB0aGlzLnBheWxvYWQucmVwb3NpdG9yeS5vd25lci5sb2dpbixcbiAgICAgICAgICAgICAgICByZXBvOiB0aGlzLnBheWxvYWQucmVwb3NpdG9yeS5uYW1lXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImNvbnRleHQucmVwbyByZXF1aXJlcyBhIEdJVEhVQl9SRVBPU0lUT1JZIGVudmlyb25tZW50IHZhcmlhYmxlIGxpa2UgJ293bmVyL3JlcG8nXCIpO1xuICAgIH1cbn1cbmV4cG9ydHMuQ29udGV4dCA9IENvbnRleHQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb250ZXh0LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfSk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRBcGlCYXNlVXJsID0gZXhwb3J0cy5nZXRQcm94eUFnZW50ID0gZXhwb3J0cy5nZXRBdXRoU3RyaW5nID0gdm9pZCAwO1xuY29uc3QgaHR0cENsaWVudCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiQGFjdGlvbnMvaHR0cC1jbGllbnRcIikpO1xuZnVuY3Rpb24gZ2V0QXV0aFN0cmluZyh0b2tlbiwgb3B0aW9ucykge1xuICAgIGlmICghdG9rZW4gJiYgIW9wdGlvbnMuYXV0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlciB0b2tlbiBvciBvcHRzLmF1dGggaXMgcmVxdWlyZWQnKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodG9rZW4gJiYgb3B0aW9ucy5hdXRoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUGFyYW1ldGVycyB0b2tlbiBhbmQgb3B0cy5hdXRoIG1heSBub3QgYm90aCBiZSBzcGVjaWZpZWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiBvcHRpb25zLmF1dGggPT09ICdzdHJpbmcnID8gb3B0aW9ucy5hdXRoIDogYHRva2VuICR7dG9rZW59YDtcbn1cbmV4cG9ydHMuZ2V0QXV0aFN0cmluZyA9IGdldEF1dGhTdHJpbmc7XG5mdW5jdGlvbiBnZXRQcm94eUFnZW50KGRlc3RpbmF0aW9uVXJsKSB7XG4gICAgY29uc3QgaGMgPSBuZXcgaHR0cENsaWVudC5IdHRwQ2xpZW50KCk7XG4gICAgcmV0dXJuIGhjLmdldEFnZW50KGRlc3RpbmF0aW9uVXJsKTtcbn1cbmV4cG9ydHMuZ2V0UHJveHlBZ2VudCA9IGdldFByb3h5QWdlbnQ7XG5mdW5jdGlvbiBnZXRBcGlCYXNlVXJsKCkge1xuICAgIHJldHVybiBwcm9jZXNzLmVudlsnR0lUSFVCX0FQSV9VUkwnXSB8fCAnaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbSc7XG59XG5leHBvcnRzLmdldEFwaUJhc2VVcmwgPSBnZXRBcGlCYXNlVXJsO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbHMuanMubWFwIiwKICAgICIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmZ1bmN0aW9uIGdldFVzZXJBZ2VudCgpIHtcbiAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgPT09IFwib2JqZWN0XCIgJiYgXCJ1c2VyQWdlbnRcIiBpbiBuYXZpZ2F0b3IpIHtcbiAgICByZXR1cm4gbmF2aWdhdG9yLnVzZXJBZ2VudDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgcHJvY2VzcyA9PT0gXCJvYmplY3RcIiAmJiBwcm9jZXNzLnZlcnNpb24gIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBgTm9kZS5qcy8ke3Byb2Nlc3MudmVyc2lvbi5zdWJzdHIoMSl9ICgke3Byb2Nlc3MucGxhdGZvcm19OyAke3Byb2Nlc3MuYXJjaH0pYDtcbiAgfVxuXG4gIHJldHVybiBcIjxlbnZpcm9ubWVudCB1bmRldGVjdGFibGU+XCI7XG59XG5cbmV4cG9ydHMuZ2V0VXNlckFnZW50ID0gZ2V0VXNlckFnZW50O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXG4iLAogICAgIm1vZHVsZS5leHBvcnRzID0gcmVnaXN0ZXI7XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyKHN0YXRlLCBuYW1lLCBtZXRob2QsIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiBtZXRob2QgIT09IFwiZnVuY3Rpb25cIikge1xuICAgIHRocm93IG5ldyBFcnJvcihcIm1ldGhvZCBmb3IgYmVmb3JlIGhvb2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICB9XG5cbiAgaWYgKCFvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkobmFtZSkpIHtcbiAgICByZXR1cm4gbmFtZS5yZXZlcnNlKCkucmVkdWNlKGZ1bmN0aW9uIChjYWxsYmFjaywgbmFtZSkge1xuICAgICAgcmV0dXJuIHJlZ2lzdGVyLmJpbmQobnVsbCwgc3RhdGUsIG5hbWUsIGNhbGxiYWNrLCBvcHRpb25zKTtcbiAgICB9LCBtZXRob2QpKCk7XG4gIH1cblxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFzdGF0ZS5yZWdpc3RyeVtuYW1lXSkge1xuICAgICAgcmV0dXJuIG1ldGhvZChvcHRpb25zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGUucmVnaXN0cnlbbmFtZV0ucmVkdWNlKGZ1bmN0aW9uIChtZXRob2QsIHJlZ2lzdGVyZWQpIHtcbiAgICAgIHJldHVybiByZWdpc3RlcmVkLmhvb2suYmluZChudWxsLCBtZXRob2QsIG9wdGlvbnMpO1xuICAgIH0sIG1ldGhvZCkoKTtcbiAgfSk7XG59XG4iLAogICAgIm1vZHVsZS5leHBvcnRzID0gYWRkSG9vaztcblxuZnVuY3Rpb24gYWRkSG9vayhzdGF0ZSwga2luZCwgbmFtZSwgaG9vaykge1xuICB2YXIgb3JpZyA9IGhvb2s7XG4gIGlmICghc3RhdGUucmVnaXN0cnlbbmFtZV0pIHtcbiAgICBzdGF0ZS5yZWdpc3RyeVtuYW1lXSA9IFtdO1xuICB9XG5cbiAgaWYgKGtpbmQgPT09IFwiYmVmb3JlXCIpIHtcbiAgICBob29rID0gZnVuY3Rpb24gKG1ldGhvZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgICAgIC50aGVuKG9yaWcuYmluZChudWxsLCBvcHRpb25zKSlcbiAgICAgICAgLnRoZW4obWV0aG9kLmJpbmQobnVsbCwgb3B0aW9ucykpO1xuICAgIH07XG4gIH1cblxuICBpZiAoa2luZCA9PT0gXCJhZnRlclwiKSB7XG4gICAgaG9vayA9IGZ1bmN0aW9uIChtZXRob2QsIG9wdGlvbnMpIHtcbiAgICAgIHZhciByZXN1bHQ7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICAgICAgLnRoZW4obWV0aG9kLmJpbmQobnVsbCwgb3B0aW9ucykpXG4gICAgICAgIC50aGVuKGZ1bmN0aW9uIChyZXN1bHRfKSB7XG4gICAgICAgICAgcmVzdWx0ID0gcmVzdWx0XztcbiAgICAgICAgICByZXR1cm4gb3JpZyhyZXN1bHQsIG9wdGlvbnMpO1xuICAgICAgICB9KVxuICAgICAgICAudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgfVxuXG4gIGlmIChraW5kID09PSBcImVycm9yXCIpIHtcbiAgICBob29rID0gZnVuY3Rpb24gKG1ldGhvZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgICAgIC50aGVuKG1ldGhvZC5iaW5kKG51bGwsIG9wdGlvbnMpKVxuICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIG9yaWcoZXJyb3IsIG9wdGlvbnMpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGUucmVnaXN0cnlbbmFtZV0ucHVzaCh7XG4gICAgaG9vazogaG9vayxcbiAgICBvcmlnOiBvcmlnLFxuICB9KTtcbn1cbiIsCiAgICAibW9kdWxlLmV4cG9ydHMgPSByZW1vdmVIb29rO1xuXG5mdW5jdGlvbiByZW1vdmVIb29rKHN0YXRlLCBuYW1lLCBtZXRob2QpIHtcbiAgaWYgKCFzdGF0ZS5yZWdpc3RyeVtuYW1lXSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBpbmRleCA9IHN0YXRlLnJlZ2lzdHJ5W25hbWVdXG4gICAgLm1hcChmdW5jdGlvbiAocmVnaXN0ZXJlZCkge1xuICAgICAgcmV0dXJuIHJlZ2lzdGVyZWQub3JpZztcbiAgICB9KVxuICAgIC5pbmRleE9mKG1ldGhvZCk7XG5cbiAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRlLnJlZ2lzdHJ5W25hbWVdLnNwbGljZShpbmRleCwgMSk7XG59XG4iLAogICAgInZhciByZWdpc3RlciA9IHJlcXVpcmUoXCIuL2xpYi9yZWdpc3RlclwiKTtcbnZhciBhZGRIb29rID0gcmVxdWlyZShcIi4vbGliL2FkZFwiKTtcbnZhciByZW1vdmVIb29rID0gcmVxdWlyZShcIi4vbGliL3JlbW92ZVwiKTtcblxuLy8gYmluZCB3aXRoIGFycmF5IG9mIGFyZ3VtZW50czogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzIxNzkyOTEzXG52YXIgYmluZCA9IEZ1bmN0aW9uLmJpbmQ7XG52YXIgYmluZGFibGUgPSBiaW5kLmJpbmQoYmluZCk7XG5cbmZ1bmN0aW9uIGJpbmRBcGkoaG9vaywgc3RhdGUsIG5hbWUpIHtcbiAgdmFyIHJlbW92ZUhvb2tSZWYgPSBiaW5kYWJsZShyZW1vdmVIb29rLCBudWxsKS5hcHBseShcbiAgICBudWxsLFxuICAgIG5hbWUgPyBbc3RhdGUsIG5hbWVdIDogW3N0YXRlXVxuICApO1xuICBob29rLmFwaSA9IHsgcmVtb3ZlOiByZW1vdmVIb29rUmVmIH07XG4gIGhvb2sucmVtb3ZlID0gcmVtb3ZlSG9va1JlZjtcbiAgW1wiYmVmb3JlXCIsIFwiZXJyb3JcIiwgXCJhZnRlclwiLCBcIndyYXBcIl0uZm9yRWFjaChmdW5jdGlvbiAoa2luZCkge1xuICAgIHZhciBhcmdzID0gbmFtZSA/IFtzdGF0ZSwga2luZCwgbmFtZV0gOiBbc3RhdGUsIGtpbmRdO1xuICAgIGhvb2tba2luZF0gPSBob29rLmFwaVtraW5kXSA9IGJpbmRhYmxlKGFkZEhvb2ssIG51bGwpLmFwcGx5KG51bGwsIGFyZ3MpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gSG9va1Npbmd1bGFyKCkge1xuICB2YXIgc2luZ3VsYXJIb29rTmFtZSA9IFwiaFwiO1xuICB2YXIgc2luZ3VsYXJIb29rU3RhdGUgPSB7XG4gICAgcmVnaXN0cnk6IHt9LFxuICB9O1xuICB2YXIgc2luZ3VsYXJIb29rID0gcmVnaXN0ZXIuYmluZChudWxsLCBzaW5ndWxhckhvb2tTdGF0ZSwgc2luZ3VsYXJIb29rTmFtZSk7XG4gIGJpbmRBcGkoc2luZ3VsYXJIb29rLCBzaW5ndWxhckhvb2tTdGF0ZSwgc2luZ3VsYXJIb29rTmFtZSk7XG4gIHJldHVybiBzaW5ndWxhckhvb2s7XG59XG5cbmZ1bmN0aW9uIEhvb2tDb2xsZWN0aW9uKCkge1xuICB2YXIgc3RhdGUgPSB7XG4gICAgcmVnaXN0cnk6IHt9LFxuICB9O1xuXG4gIHZhciBob29rID0gcmVnaXN0ZXIuYmluZChudWxsLCBzdGF0ZSk7XG4gIGJpbmRBcGkoaG9vaywgc3RhdGUpO1xuXG4gIHJldHVybiBob29rO1xufVxuXG52YXIgY29sbGVjdGlvbkhvb2tEZXByZWNhdGlvbk1lc3NhZ2VEaXNwbGF5ZWQgPSBmYWxzZTtcbmZ1bmN0aW9uIEhvb2soKSB7XG4gIGlmICghY29sbGVjdGlvbkhvb2tEZXByZWNhdGlvbk1lc3NhZ2VEaXNwbGF5ZWQpIHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICAnW2JlZm9yZS1hZnRlci1ob29rXTogXCJIb29rKClcIiByZXB1cnBvc2luZyB3YXJuaW5nLCB1c2UgXCJIb29rLkNvbGxlY3Rpb24oKVwiLiBSZWFkIG1vcmU6IGh0dHBzOi8vZ2l0LmlvL3VwZ3JhZGUtYmVmb3JlLWFmdGVyLWhvb2stdG8tMS40J1xuICAgICk7XG4gICAgY29sbGVjdGlvbkhvb2tEZXByZWNhdGlvbk1lc3NhZ2VEaXNwbGF5ZWQgPSB0cnVlO1xuICB9XG4gIHJldHVybiBIb29rQ29sbGVjdGlvbigpO1xufVxuXG5Ib29rLlNpbmd1bGFyID0gSG9va1Npbmd1bGFyLmJpbmQoKTtcbkhvb2suQ29sbGVjdGlvbiA9IEhvb2tDb2xsZWN0aW9uLmJpbmQoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBIb29rO1xuLy8gZXhwb3NlIGNvbnN0cnVjdG9ycyBhcyBhIG5hbWVkIHByb3BlcnR5IGZvciBUeXBlU2NyaXB0XG5tb2R1bGUuZXhwb3J0cy5Ib29rID0gSG9vaztcbm1vZHVsZS5leHBvcnRzLlNpbmd1bGFyID0gSG9vay5TaW5ndWxhcjtcbm1vZHVsZS5leHBvcnRzLkNvbGxlY3Rpb24gPSBIb29rLkNvbGxlY3Rpb247XG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuLyohXG4gKiBpcy1wbGFpbi1vYmplY3QgPGh0dHBzOi8vZ2l0aHViLmNvbS9qb25zY2hsaW5rZXJ0L2lzLXBsYWluLW9iamVjdD5cbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxNywgSm9uIFNjaGxpbmtlcnQuXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKi9cblxuZnVuY3Rpb24gaXNPYmplY3Qobykge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pID09PSAnW29iamVjdCBPYmplY3RdJztcbn1cblxuZnVuY3Rpb24gaXNQbGFpbk9iamVjdChvKSB7XG4gIHZhciBjdG9yLHByb3Q7XG5cbiAgaWYgKGlzT2JqZWN0KG8pID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuXG4gIC8vIElmIGhhcyBtb2RpZmllZCBjb25zdHJ1Y3RvclxuICBjdG9yID0gby5jb25zdHJ1Y3RvcjtcbiAgaWYgKGN0b3IgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHRydWU7XG5cbiAgLy8gSWYgaGFzIG1vZGlmaWVkIHByb3RvdHlwZVxuICBwcm90ID0gY3Rvci5wcm90b3R5cGU7XG4gIGlmIChpc09iamVjdChwcm90KSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcblxuICAvLyBJZiBjb25zdHJ1Y3RvciBkb2VzIG5vdCBoYXZlIGFuIE9iamVjdC1zcGVjaWZpYyBtZXRob2RcbiAgaWYgKHByb3QuaGFzT3duUHJvcGVydHkoJ2lzUHJvdG90eXBlT2YnKSA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBNb3N0IGxpa2VseSBhIHBsYWluIE9iamVjdFxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0cy5pc1BsYWluT2JqZWN0ID0gaXNQbGFpbk9iamVjdDtcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG52YXIgaXNQbGFpbk9iamVjdCA9IHJlcXVpcmUoJ2lzLXBsYWluLW9iamVjdCcpO1xudmFyIHVuaXZlcnNhbFVzZXJBZ2VudCA9IHJlcXVpcmUoJ3VuaXZlcnNhbC11c2VyLWFnZW50Jyk7XG5cbmZ1bmN0aW9uIGxvd2VyY2FzZUtleXMob2JqZWN0KSB7XG4gIGlmICghb2JqZWN0KSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCkucmVkdWNlKChuZXdPYmosIGtleSkgPT4ge1xuICAgIG5ld09ialtrZXkudG9Mb3dlckNhc2UoKV0gPSBvYmplY3Rba2V5XTtcbiAgICByZXR1cm4gbmV3T2JqO1xuICB9LCB7fSk7XG59XG5cbmZ1bmN0aW9uIG1lcmdlRGVlcChkZWZhdWx0cywgb3B0aW9ucykge1xuICBjb25zdCByZXN1bHQgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0cyk7XG4gIE9iamVjdC5rZXlzKG9wdGlvbnMpLmZvckVhY2goa2V5ID0+IHtcbiAgICBpZiAoaXNQbGFpbk9iamVjdC5pc1BsYWluT2JqZWN0KG9wdGlvbnNba2V5XSkpIHtcbiAgICAgIGlmICghKGtleSBpbiBkZWZhdWx0cykpIE9iamVjdC5hc3NpZ24ocmVzdWx0LCB7XG4gICAgICAgIFtrZXldOiBvcHRpb25zW2tleV1cbiAgICAgIH0pO2Vsc2UgcmVzdWx0W2tleV0gPSBtZXJnZURlZXAoZGVmYXVsdHNba2V5XSwgb3B0aW9uc1trZXldKTtcbiAgICB9IGVsc2Uge1xuICAgICAgT2JqZWN0LmFzc2lnbihyZXN1bHQsIHtcbiAgICAgICAgW2tleV06IG9wdGlvbnNba2V5XVxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlVW5kZWZpbmVkUHJvcGVydGllcyhvYmopIHtcbiAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKG9ialtrZXldID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGRlbGV0ZSBvYmpba2V5XTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2JqO1xufVxuXG5mdW5jdGlvbiBtZXJnZShkZWZhdWx0cywgcm91dGUsIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiByb3V0ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgIGxldCBbbWV0aG9kLCB1cmxdID0gcm91dGUuc3BsaXQoXCIgXCIpO1xuICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHVybCA/IHtcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybFxuICAgIH0gOiB7XG4gICAgICB1cmw6IG1ldGhvZFxuICAgIH0sIG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCByb3V0ZSk7XG4gIH0gLy8gbG93ZXJjYXNlIGhlYWRlciBuYW1lcyBiZWZvcmUgbWVyZ2luZyB3aXRoIGRlZmF1bHRzIHRvIGF2b2lkIGR1cGxpY2F0ZXNcblxuXG4gIG9wdGlvbnMuaGVhZGVycyA9IGxvd2VyY2FzZUtleXMob3B0aW9ucy5oZWFkZXJzKTsgLy8gcmVtb3ZlIHByb3BlcnRpZXMgd2l0aCB1bmRlZmluZWQgdmFsdWVzIGJlZm9yZSBtZXJnaW5nXG5cbiAgcmVtb3ZlVW5kZWZpbmVkUHJvcGVydGllcyhvcHRpb25zKTtcbiAgcmVtb3ZlVW5kZWZpbmVkUHJvcGVydGllcyhvcHRpb25zLmhlYWRlcnMpO1xuICBjb25zdCBtZXJnZWRPcHRpb25zID0gbWVyZ2VEZWVwKGRlZmF1bHRzIHx8IHt9LCBvcHRpb25zKTsgLy8gbWVkaWFUeXBlLnByZXZpZXdzIGFycmF5cyBhcmUgbWVyZ2VkLCBpbnN0ZWFkIG9mIG92ZXJ3cml0dGVuXG5cbiAgaWYgKGRlZmF1bHRzICYmIGRlZmF1bHRzLm1lZGlhVHlwZS5wcmV2aWV3cy5sZW5ndGgpIHtcbiAgICBtZXJnZWRPcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cyA9IGRlZmF1bHRzLm1lZGlhVHlwZS5wcmV2aWV3cy5maWx0ZXIocHJldmlldyA9PiAhbWVyZ2VkT3B0aW9ucy5tZWRpYVR5cGUucHJldmlld3MuaW5jbHVkZXMocHJldmlldykpLmNvbmNhdChtZXJnZWRPcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cyk7XG4gIH1cblxuICBtZXJnZWRPcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cyA9IG1lcmdlZE9wdGlvbnMubWVkaWFUeXBlLnByZXZpZXdzLm1hcChwcmV2aWV3ID0+IHByZXZpZXcucmVwbGFjZSgvLXByZXZpZXcvLCBcIlwiKSk7XG4gIHJldHVybiBtZXJnZWRPcHRpb25zO1xufVxuXG5mdW5jdGlvbiBhZGRRdWVyeVBhcmFtZXRlcnModXJsLCBwYXJhbWV0ZXJzKSB7XG4gIGNvbnN0IHNlcGFyYXRvciA9IC9cXD8vLnRlc3QodXJsKSA/IFwiJlwiIDogXCI/XCI7XG4gIGNvbnN0IG5hbWVzID0gT2JqZWN0LmtleXMocGFyYW1ldGVycyk7XG5cbiAgaWYgKG5hbWVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB1cmw7XG4gIH1cblxuICByZXR1cm4gdXJsICsgc2VwYXJhdG9yICsgbmFtZXMubWFwKG5hbWUgPT4ge1xuICAgIGlmIChuYW1lID09PSBcInFcIikge1xuICAgICAgcmV0dXJuIFwicT1cIiArIHBhcmFtZXRlcnMucS5zcGxpdChcIitcIikubWFwKGVuY29kZVVSSUNvbXBvbmVudCkuam9pbihcIitcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGAke25hbWV9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtZXRlcnNbbmFtZV0pfWA7XG4gIH0pLmpvaW4oXCImXCIpO1xufVxuXG5jb25zdCB1cmxWYXJpYWJsZVJlZ2V4ID0gL1xce1tefV0rXFx9L2c7XG5cbmZ1bmN0aW9uIHJlbW92ZU5vbkNoYXJzKHZhcmlhYmxlTmFtZSkge1xuICByZXR1cm4gdmFyaWFibGVOYW1lLnJlcGxhY2UoL15cXFcrfFxcVyskL2csIFwiXCIpLnNwbGl0KC8sLyk7XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RVcmxWYXJpYWJsZU5hbWVzKHVybCkge1xuICBjb25zdCBtYXRjaGVzID0gdXJsLm1hdGNoKHVybFZhcmlhYmxlUmVnZXgpO1xuXG4gIGlmICghbWF0Y2hlcykge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHJldHVybiBtYXRjaGVzLm1hcChyZW1vdmVOb25DaGFycykucmVkdWNlKChhLCBiKSA9PiBhLmNvbmNhdChiKSwgW10pO1xufVxuXG5mdW5jdGlvbiBvbWl0KG9iamVjdCwga2V5c1RvT21pdCkge1xuICByZXR1cm4gT2JqZWN0LmtleXMob2JqZWN0KS5maWx0ZXIob3B0aW9uID0+ICFrZXlzVG9PbWl0LmluY2x1ZGVzKG9wdGlvbikpLnJlZHVjZSgob2JqLCBrZXkpID0+IHtcbiAgICBvYmpba2V5XSA9IG9iamVjdFtrZXldO1xuICAgIHJldHVybiBvYmo7XG4gIH0sIHt9KTtcbn1cblxuLy8gQmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL2JyYW1zdGVpbi91cmwtdGVtcGxhdGUsIGxpY2Vuc2VkIHVuZGVyIEJTRFxuLy8gVE9ETzogY3JlYXRlIHNlcGFyYXRlIHBhY2thZ2UuXG4vL1xuLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTQsIEJyYW0gU3RlaW5cbi8vIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbi8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uc1xuLy8gYXJlIG1ldDpcbi8vICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuLy8gICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbi8vICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodFxuLy8gICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGVcbi8vICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuLy8gIDMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0c1xuLy8gICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIFwiQVMgSVNcIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRFxuLy8gV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PXG4vLyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsXG4vLyBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORyxcbi8vIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsXG4vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZXG4vLyBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElOR1xuLy8gTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLFxuLy8gRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cblxuLyogaXN0YW5idWwgaWdub3JlIGZpbGUgKi9cbmZ1bmN0aW9uIGVuY29kZVJlc2VydmVkKHN0cikge1xuICByZXR1cm4gc3RyLnNwbGl0KC8oJVswLTlBLUZhLWZdezJ9KS9nKS5tYXAoZnVuY3Rpb24gKHBhcnQpIHtcbiAgICBpZiAoIS8lWzAtOUEtRmEtZl0vLnRlc3QocGFydCkpIHtcbiAgICAgIHBhcnQgPSBlbmNvZGVVUkkocGFydCkucmVwbGFjZSgvJTVCL2csIFwiW1wiKS5yZXBsYWNlKC8lNUQvZywgXCJdXCIpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJ0O1xuICB9KS5qb2luKFwiXCIpO1xufVxuXG5mdW5jdGlvbiBlbmNvZGVVbnJlc2VydmVkKHN0cikge1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHN0cikucmVwbGFjZSgvWyEnKCkqXS9nLCBmdW5jdGlvbiAoYykge1xuICAgIHJldHVybiBcIiVcIiArIGMuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGVuY29kZVZhbHVlKG9wZXJhdG9yLCB2YWx1ZSwga2V5KSB7XG4gIHZhbHVlID0gb3BlcmF0b3IgPT09IFwiK1wiIHx8IG9wZXJhdG9yID09PSBcIiNcIiA/IGVuY29kZVJlc2VydmVkKHZhbHVlKSA6IGVuY29kZVVucmVzZXJ2ZWQodmFsdWUpO1xuXG4gIGlmIChrZXkpIHtcbiAgICByZXR1cm4gZW5jb2RlVW5yZXNlcnZlZChrZXkpICsgXCI9XCIgKyB2YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNEZWZpbmVkKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsO1xufVxuXG5mdW5jdGlvbiBpc0tleU9wZXJhdG9yKG9wZXJhdG9yKSB7XG4gIHJldHVybiBvcGVyYXRvciA9PT0gXCI7XCIgfHwgb3BlcmF0b3IgPT09IFwiJlwiIHx8IG9wZXJhdG9yID09PSBcIj9cIjtcbn1cblxuZnVuY3Rpb24gZ2V0VmFsdWVzKGNvbnRleHQsIG9wZXJhdG9yLCBrZXksIG1vZGlmaWVyKSB7XG4gIHZhciB2YWx1ZSA9IGNvbnRleHRba2V5XSxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIGlmIChpc0RlZmluZWQodmFsdWUpICYmIHZhbHVlICE9PSBcIlwiKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgdmFsdWUgPSB2YWx1ZS50b1N0cmluZygpO1xuXG4gICAgICBpZiAobW9kaWZpZXIgJiYgbW9kaWZpZXIgIT09IFwiKlwiKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUuc3Vic3RyaW5nKDAsIHBhcnNlSW50KG1vZGlmaWVyLCAxMCkpO1xuICAgICAgfVxuXG4gICAgICByZXN1bHQucHVzaChlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWUsIGlzS2V5T3BlcmF0b3Iob3BlcmF0b3IpID8ga2V5IDogXCJcIikpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAobW9kaWZpZXIgPT09IFwiKlwiKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgIHZhbHVlLmZpbHRlcihpc0RlZmluZWQpLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaChlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWUsIGlzS2V5T3BlcmF0b3Iob3BlcmF0b3IpID8ga2V5IDogXCJcIikpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIE9iamVjdC5rZXlzKHZhbHVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICBpZiAoaXNEZWZpbmVkKHZhbHVlW2tdKSkge1xuICAgICAgICAgICAgICByZXN1bHQucHVzaChlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWVba10sIGspKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdG1wID0gW107XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgdmFsdWUuZmlsdGVyKGlzRGVmaW5lZCkuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRtcC5wdXNoKGVuY29kZVZhbHVlKG9wZXJhdG9yLCB2YWx1ZSkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIE9iamVjdC5rZXlzKHZhbHVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICBpZiAoaXNEZWZpbmVkKHZhbHVlW2tdKSkge1xuICAgICAgICAgICAgICB0bXAucHVzaChlbmNvZGVVbnJlc2VydmVkKGspKTtcbiAgICAgICAgICAgICAgdG1wLnB1c2goZW5jb2RlVmFsdWUob3BlcmF0b3IsIHZhbHVlW2tdLnRvU3RyaW5nKCkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0tleU9wZXJhdG9yKG9wZXJhdG9yKSkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKGVuY29kZVVucmVzZXJ2ZWQoa2V5KSArIFwiPVwiICsgdG1wLmpvaW4oXCIsXCIpKTtcbiAgICAgICAgfSBlbHNlIGlmICh0bXAubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2godG1wLmpvaW4oXCIsXCIpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAob3BlcmF0b3IgPT09IFwiO1wiKSB7XG4gICAgICBpZiAoaXNEZWZpbmVkKHZhbHVlKSkge1xuICAgICAgICByZXN1bHQucHVzaChlbmNvZGVVbnJlc2VydmVkKGtleSkpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFwiXCIgJiYgKG9wZXJhdG9yID09PSBcIiZcIiB8fCBvcGVyYXRvciA9PT0gXCI/XCIpKSB7XG4gICAgICByZXN1bHQucHVzaChlbmNvZGVVbnJlc2VydmVkKGtleSkgKyBcIj1cIik7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gXCJcIikge1xuICAgICAgcmVzdWx0LnB1c2goXCJcIik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gcGFyc2VVcmwodGVtcGxhdGUpIHtcbiAgcmV0dXJuIHtcbiAgICBleHBhbmQ6IGV4cGFuZC5iaW5kKG51bGwsIHRlbXBsYXRlKVxuICB9O1xufVxuXG5mdW5jdGlvbiBleHBhbmQodGVtcGxhdGUsIGNvbnRleHQpIHtcbiAgdmFyIG9wZXJhdG9ycyA9IFtcIitcIiwgXCIjXCIsIFwiLlwiLCBcIi9cIiwgXCI7XCIsIFwiP1wiLCBcIiZcIl07XG4gIHJldHVybiB0ZW1wbGF0ZS5yZXBsYWNlKC9cXHsoW15cXHtcXH1dKylcXH18KFteXFx7XFx9XSspL2csIGZ1bmN0aW9uIChfLCBleHByZXNzaW9uLCBsaXRlcmFsKSB7XG4gICAgaWYgKGV4cHJlc3Npb24pIHtcbiAgICAgIGxldCBvcGVyYXRvciA9IFwiXCI7XG4gICAgICBjb25zdCB2YWx1ZXMgPSBbXTtcblxuICAgICAgaWYgKG9wZXJhdG9ycy5pbmRleE9mKGV4cHJlc3Npb24uY2hhckF0KDApKSAhPT0gLTEpIHtcbiAgICAgICAgb3BlcmF0b3IgPSBleHByZXNzaW9uLmNoYXJBdCgwKTtcbiAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb24uc3Vic3RyKDEpO1xuICAgICAgfVxuXG4gICAgICBleHByZXNzaW9uLnNwbGl0KC8sL2cpLmZvckVhY2goZnVuY3Rpb24gKHZhcmlhYmxlKSB7XG4gICAgICAgIHZhciB0bXAgPSAvKFteOlxcKl0qKSg/OjooXFxkKyl8KFxcKikpPy8uZXhlYyh2YXJpYWJsZSk7XG4gICAgICAgIHZhbHVlcy5wdXNoKGdldFZhbHVlcyhjb250ZXh0LCBvcGVyYXRvciwgdG1wWzFdLCB0bXBbMl0gfHwgdG1wWzNdKSk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKG9wZXJhdG9yICYmIG9wZXJhdG9yICE9PSBcIitcIikge1xuICAgICAgICB2YXIgc2VwYXJhdG9yID0gXCIsXCI7XG5cbiAgICAgICAgaWYgKG9wZXJhdG9yID09PSBcIj9cIikge1xuICAgICAgICAgIHNlcGFyYXRvciA9IFwiJlwiO1xuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdG9yICE9PSBcIiNcIikge1xuICAgICAgICAgIHNlcGFyYXRvciA9IG9wZXJhdG9yO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICh2YWx1ZXMubGVuZ3RoICE9PSAwID8gb3BlcmF0b3IgOiBcIlwiKSArIHZhbHVlcy5qb2luKHNlcGFyYXRvcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdmFsdWVzLmpvaW4oXCIsXCIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZW5jb2RlUmVzZXJ2ZWQobGl0ZXJhbCk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gcGFyc2Uob3B0aW9ucykge1xuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jbWV0aG9kc1xuICBsZXQgbWV0aG9kID0gb3B0aW9ucy5tZXRob2QudG9VcHBlckNhc2UoKTsgLy8gcmVwbGFjZSA6dmFybmFtZSB3aXRoIHt2YXJuYW1lfSB0byBtYWtlIGl0IFJGQyA2NTcwIGNvbXBhdGlibGVcblxuICBsZXQgdXJsID0gKG9wdGlvbnMudXJsIHx8IFwiL1wiKS5yZXBsYWNlKC86KFthLXpdXFx3KykvZywgXCJ7JDF9XCIpO1xuICBsZXQgaGVhZGVycyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuaGVhZGVycyk7XG4gIGxldCBib2R5O1xuICBsZXQgcGFyYW1ldGVycyA9IG9taXQob3B0aW9ucywgW1wibWV0aG9kXCIsIFwiYmFzZVVybFwiLCBcInVybFwiLCBcImhlYWRlcnNcIiwgXCJyZXF1ZXN0XCIsIFwibWVkaWFUeXBlXCJdKTsgLy8gZXh0cmFjdCB2YXJpYWJsZSBuYW1lcyBmcm9tIFVSTCB0byBjYWxjdWxhdGUgcmVtYWluaW5nIHZhcmlhYmxlcyBsYXRlclxuXG4gIGNvbnN0IHVybFZhcmlhYmxlTmFtZXMgPSBleHRyYWN0VXJsVmFyaWFibGVOYW1lcyh1cmwpO1xuICB1cmwgPSBwYXJzZVVybCh1cmwpLmV4cGFuZChwYXJhbWV0ZXJzKTtcblxuICBpZiAoIS9eaHR0cC8udGVzdCh1cmwpKSB7XG4gICAgdXJsID0gb3B0aW9ucy5iYXNlVXJsICsgdXJsO1xuICB9XG5cbiAgY29uc3Qgb21pdHRlZFBhcmFtZXRlcnMgPSBPYmplY3Qua2V5cyhvcHRpb25zKS5maWx0ZXIob3B0aW9uID0+IHVybFZhcmlhYmxlTmFtZXMuaW5jbHVkZXMob3B0aW9uKSkuY29uY2F0KFwiYmFzZVVybFwiKTtcbiAgY29uc3QgcmVtYWluaW5nUGFyYW1ldGVycyA9IG9taXQocGFyYW1ldGVycywgb21pdHRlZFBhcmFtZXRlcnMpO1xuICBjb25zdCBpc0JpbmFyeVJlcXVlc3QgPSAvYXBwbGljYXRpb25cXC9vY3RldC1zdHJlYW0vaS50ZXN0KGhlYWRlcnMuYWNjZXB0KTtcblxuICBpZiAoIWlzQmluYXJ5UmVxdWVzdCkge1xuICAgIGlmIChvcHRpb25zLm1lZGlhVHlwZS5mb3JtYXQpIHtcbiAgICAgIC8vIGUuZy4gYXBwbGljYXRpb24vdm5kLmdpdGh1Yi52Mytqc29uID0+IGFwcGxpY2F0aW9uL3ZuZC5naXRodWIudjMucmF3XG4gICAgICBoZWFkZXJzLmFjY2VwdCA9IGhlYWRlcnMuYWNjZXB0LnNwbGl0KC8sLykubWFwKHByZXZpZXcgPT4gcHJldmlldy5yZXBsYWNlKC9hcHBsaWNhdGlvblxcL3ZuZChcXC5cXHcrKShcXC52Myk/KFxcLlxcdyspPyhcXCtqc29uKT8kLywgYGFwcGxpY2F0aW9uL3ZuZCQxJDIuJHtvcHRpb25zLm1lZGlhVHlwZS5mb3JtYXR9YCkpLmpvaW4oXCIsXCIpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHByZXZpZXdzRnJvbUFjY2VwdEhlYWRlciA9IGhlYWRlcnMuYWNjZXB0Lm1hdGNoKC9bXFx3LV0rKD89LXByZXZpZXcpL2cpIHx8IFtdO1xuICAgICAgaGVhZGVycy5hY2NlcHQgPSBwcmV2aWV3c0Zyb21BY2NlcHRIZWFkZXIuY29uY2F0KG9wdGlvbnMubWVkaWFUeXBlLnByZXZpZXdzKS5tYXAocHJldmlldyA9PiB7XG4gICAgICAgIGNvbnN0IGZvcm1hdCA9IG9wdGlvbnMubWVkaWFUeXBlLmZvcm1hdCA/IGAuJHtvcHRpb25zLm1lZGlhVHlwZS5mb3JtYXR9YCA6IFwiK2pzb25cIjtcbiAgICAgICAgcmV0dXJuIGBhcHBsaWNhdGlvbi92bmQuZ2l0aHViLiR7cHJldmlld30tcHJldmlldyR7Zm9ybWF0fWA7XG4gICAgICB9KS5qb2luKFwiLFwiKTtcbiAgICB9XG4gIH0gLy8gZm9yIEdFVC9IRUFEIHJlcXVlc3RzLCBzZXQgVVJMIHF1ZXJ5IHBhcmFtZXRlcnMgZnJvbSByZW1haW5pbmcgcGFyYW1ldGVyc1xuICAvLyBmb3IgUEFUQ0gvUE9TVC9QVVQvREVMRVRFIHJlcXVlc3RzLCBzZXQgcmVxdWVzdCBib2R5IGZyb20gcmVtYWluaW5nIHBhcmFtZXRlcnNcblxuXG4gIGlmIChbXCJHRVRcIiwgXCJIRUFEXCJdLmluY2x1ZGVzKG1ldGhvZCkpIHtcbiAgICB1cmwgPSBhZGRRdWVyeVBhcmFtZXRlcnModXJsLCByZW1haW5pbmdQYXJhbWV0ZXJzKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoXCJkYXRhXCIgaW4gcmVtYWluaW5nUGFyYW1ldGVycykge1xuICAgICAgYm9keSA9IHJlbWFpbmluZ1BhcmFtZXRlcnMuZGF0YTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKE9iamVjdC5rZXlzKHJlbWFpbmluZ1BhcmFtZXRlcnMpLmxlbmd0aCkge1xuICAgICAgICBib2R5ID0gcmVtYWluaW5nUGFyYW1ldGVycztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhlYWRlcnNbXCJjb250ZW50LWxlbmd0aFwiXSA9IDA7XG4gICAgICB9XG4gICAgfVxuICB9IC8vIGRlZmF1bHQgY29udGVudC10eXBlIGZvciBKU09OIGlmIGJvZHkgaXMgc2V0XG5cblxuICBpZiAoIWhlYWRlcnNbXCJjb250ZW50LXR5cGVcIl0gJiYgdHlwZW9mIGJvZHkgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBoZWFkZXJzW1wiY29udGVudC10eXBlXCJdID0gXCJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04XCI7XG4gIH0gLy8gR2l0SHViIGV4cGVjdHMgJ2NvbnRlbnQtbGVuZ3RoOiAwJyBoZWFkZXIgZm9yIFBVVC9QQVRDSCByZXF1ZXN0cyB3aXRob3V0IGJvZHkuXG4gIC8vIGZldGNoIGRvZXMgbm90IGFsbG93IHRvIHNldCBgY29udGVudC1sZW5ndGhgIGhlYWRlciwgYnV0IHdlIGNhbiBzZXQgYm9keSB0byBhbiBlbXB0eSBzdHJpbmdcblxuXG4gIGlmIChbXCJQQVRDSFwiLCBcIlBVVFwiXS5pbmNsdWRlcyhtZXRob2QpICYmIHR5cGVvZiBib2R5ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgYm9keSA9IFwiXCI7XG4gIH0gLy8gT25seSByZXR1cm4gYm9keS9yZXF1ZXN0IGtleXMgaWYgcHJlc2VudFxuXG5cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe1xuICAgIG1ldGhvZCxcbiAgICB1cmwsXG4gICAgaGVhZGVyc1xuICB9LCB0eXBlb2YgYm9keSAhPT0gXCJ1bmRlZmluZWRcIiA/IHtcbiAgICBib2R5XG4gIH0gOiBudWxsLCBvcHRpb25zLnJlcXVlc3QgPyB7XG4gICAgcmVxdWVzdDogb3B0aW9ucy5yZXF1ZXN0XG4gIH0gOiBudWxsKTtcbn1cblxuZnVuY3Rpb24gZW5kcG9pbnRXaXRoRGVmYXVsdHMoZGVmYXVsdHMsIHJvdXRlLCBvcHRpb25zKSB7XG4gIHJldHVybiBwYXJzZShtZXJnZShkZWZhdWx0cywgcm91dGUsIG9wdGlvbnMpKTtcbn1cblxuZnVuY3Rpb24gd2l0aERlZmF1bHRzKG9sZERlZmF1bHRzLCBuZXdEZWZhdWx0cykge1xuICBjb25zdCBERUZBVUxUUyA9IG1lcmdlKG9sZERlZmF1bHRzLCBuZXdEZWZhdWx0cyk7XG4gIGNvbnN0IGVuZHBvaW50ID0gZW5kcG9pbnRXaXRoRGVmYXVsdHMuYmluZChudWxsLCBERUZBVUxUUyk7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKGVuZHBvaW50LCB7XG4gICAgREVGQVVMVFMsXG4gICAgZGVmYXVsdHM6IHdpdGhEZWZhdWx0cy5iaW5kKG51bGwsIERFRkFVTFRTKSxcbiAgICBtZXJnZTogbWVyZ2UuYmluZChudWxsLCBERUZBVUxUUyksXG4gICAgcGFyc2VcbiAgfSk7XG59XG5cbmNvbnN0IFZFUlNJT04gPSBcIjYuMC4xMlwiO1xuXG5jb25zdCB1c2VyQWdlbnQgPSBgb2N0b2tpdC1lbmRwb2ludC5qcy8ke1ZFUlNJT059ICR7dW5pdmVyc2FsVXNlckFnZW50LmdldFVzZXJBZ2VudCgpfWA7IC8vIERFRkFVTFRTIGhhcyBhbGwgcHJvcGVydGllcyBzZXQgdGhhdCBFbmRwb2ludE9wdGlvbnMgaGFzLCBleGNlcHQgdXJsLlxuLy8gU28gd2UgdXNlIFJlcXVlc3RQYXJhbWV0ZXJzIGFuZCBhZGQgbWV0aG9kIGFzIGFkZGl0aW9uYWwgcmVxdWlyZWQgcHJvcGVydHkuXG5cbmNvbnN0IERFRkFVTFRTID0ge1xuICBtZXRob2Q6IFwiR0VUXCIsXG4gIGJhc2VVcmw6IFwiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbVwiLFxuICBoZWFkZXJzOiB7XG4gICAgYWNjZXB0OiBcImFwcGxpY2F0aW9uL3ZuZC5naXRodWIudjMranNvblwiLFxuICAgIFwidXNlci1hZ2VudFwiOiB1c2VyQWdlbnRcbiAgfSxcbiAgbWVkaWFUeXBlOiB7XG4gICAgZm9ybWF0OiBcIlwiLFxuICAgIHByZXZpZXdzOiBbXVxuICB9XG59O1xuXG5jb25zdCBlbmRwb2ludCA9IHdpdGhEZWZhdWx0cyhudWxsLCBERUZBVUxUUyk7XG5cbmV4cG9ydHMuZW5kcG9pbnQgPSBlbmRwb2ludDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcblxudmFyIGNvbnZlcnNpb25zID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IGNvbnZlcnNpb25zO1xuXG5mdW5jdGlvbiBzaWduKHgpIHtcbiAgICByZXR1cm4geCA8IDAgPyAtMSA6IDE7XG59XG5cbmZ1bmN0aW9uIGV2ZW5Sb3VuZCh4KSB7XG4gICAgLy8gUm91bmQgeCB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyLCBjaG9vc2luZyB0aGUgZXZlbiBpbnRlZ2VyIGlmIGl0IGxpZXMgaGFsZndheSBiZXR3ZWVuIHR3by5cbiAgICBpZiAoKHggJSAxKSA9PT0gMC41ICYmICh4ICYgMSkgPT09IDApIHsgLy8gW2V2ZW4gbnVtYmVyXS41OyByb3VuZCBkb3duIChpLmUuIGZsb29yKVxuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcih4KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gTWF0aC5yb3VuZCh4KTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU51bWJlckNvbnZlcnNpb24oYml0TGVuZ3RoLCB0eXBlT3B0cykge1xuICAgIGlmICghdHlwZU9wdHMudW5zaWduZWQpIHtcbiAgICAgICAgLS1iaXRMZW5ndGg7XG4gICAgfVxuICAgIGNvbnN0IGxvd2VyQm91bmQgPSB0eXBlT3B0cy51bnNpZ25lZCA/IDAgOiAtTWF0aC5wb3coMiwgYml0TGVuZ3RoKTtcbiAgICBjb25zdCB1cHBlckJvdW5kID0gTWF0aC5wb3coMiwgYml0TGVuZ3RoKSAtIDE7XG5cbiAgICBjb25zdCBtb2R1bG9WYWwgPSB0eXBlT3B0cy5tb2R1bG9CaXRMZW5ndGggPyBNYXRoLnBvdygyLCB0eXBlT3B0cy5tb2R1bG9CaXRMZW5ndGgpIDogTWF0aC5wb3coMiwgYml0TGVuZ3RoKTtcbiAgICBjb25zdCBtb2R1bG9Cb3VuZCA9IHR5cGVPcHRzLm1vZHVsb0JpdExlbmd0aCA/IE1hdGgucG93KDIsIHR5cGVPcHRzLm1vZHVsb0JpdExlbmd0aCAtIDEpIDogTWF0aC5wb3coMiwgYml0TGVuZ3RoIC0gMSk7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24oViwgb3B0cykge1xuICAgICAgICBpZiAoIW9wdHMpIG9wdHMgPSB7fTtcblxuICAgICAgICBsZXQgeCA9ICtWO1xuXG4gICAgICAgIGlmIChvcHRzLmVuZm9yY2VSYW5nZSkge1xuICAgICAgICAgICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoeCkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgaXMgbm90IGEgZmluaXRlIG51bWJlclwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgeCA9IHNpZ24oeCkgKiBNYXRoLmZsb29yKE1hdGguYWJzKHgpKTtcbiAgICAgICAgICAgIGlmICh4IDwgbG93ZXJCb3VuZCB8fCB4ID4gdXBwZXJCb3VuZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCBpcyBub3QgaW4gYnl0ZSByYW5nZVwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzTmFOKHgpICYmIG9wdHMuY2xhbXApIHtcbiAgICAgICAgICAgIHggPSBldmVuUm91bmQoeCk7XG5cbiAgICAgICAgICAgIGlmICh4IDwgbG93ZXJCb3VuZCkgeCA9IGxvd2VyQm91bmQ7XG4gICAgICAgICAgICBpZiAoeCA+IHVwcGVyQm91bmQpIHggPSB1cHBlckJvdW5kO1xuICAgICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIU51bWJlci5pc0Zpbml0ZSh4KSB8fCB4ID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHggPSBzaWduKHgpICogTWF0aC5mbG9vcihNYXRoLmFicyh4KSk7XG4gICAgICAgIHggPSB4ICUgbW9kdWxvVmFsO1xuXG4gICAgICAgIGlmICghdHlwZU9wdHMudW5zaWduZWQgJiYgeCA+PSBtb2R1bG9Cb3VuZCkge1xuICAgICAgICAgICAgcmV0dXJuIHggLSBtb2R1bG9WYWw7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZU9wdHMudW5zaWduZWQpIHtcbiAgICAgICAgICAgIGlmICh4IDwgMCkge1xuICAgICAgICAgICAgICB4ICs9IG1vZHVsb1ZhbDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoeCA9PT0gLTApIHsgLy8gZG9uJ3QgcmV0dXJuIG5lZ2F0aXZlIHplcm9cbiAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4geDtcbiAgICB9XG59XG5cbmNvbnZlcnNpb25zW1widm9pZFwiXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufTtcblxuY29udmVyc2lvbnNbXCJib29sZWFuXCJdID0gZnVuY3Rpb24gKHZhbCkge1xuICAgIHJldHVybiAhIXZhbDtcbn07XG5cbmNvbnZlcnNpb25zW1wiYnl0ZVwiXSA9IGNyZWF0ZU51bWJlckNvbnZlcnNpb24oOCwgeyB1bnNpZ25lZDogZmFsc2UgfSk7XG5jb252ZXJzaW9uc1tcIm9jdGV0XCJdID0gY3JlYXRlTnVtYmVyQ29udmVyc2lvbig4LCB7IHVuc2lnbmVkOiB0cnVlIH0pO1xuXG5jb252ZXJzaW9uc1tcInNob3J0XCJdID0gY3JlYXRlTnVtYmVyQ29udmVyc2lvbigxNiwgeyB1bnNpZ25lZDogZmFsc2UgfSk7XG5jb252ZXJzaW9uc1tcInVuc2lnbmVkIHNob3J0XCJdID0gY3JlYXRlTnVtYmVyQ29udmVyc2lvbigxNiwgeyB1bnNpZ25lZDogdHJ1ZSB9KTtcblxuY29udmVyc2lvbnNbXCJsb25nXCJdID0gY3JlYXRlTnVtYmVyQ29udmVyc2lvbigzMiwgeyB1bnNpZ25lZDogZmFsc2UgfSk7XG5jb252ZXJzaW9uc1tcInVuc2lnbmVkIGxvbmdcIl0gPSBjcmVhdGVOdW1iZXJDb252ZXJzaW9uKDMyLCB7IHVuc2lnbmVkOiB0cnVlIH0pO1xuXG5jb252ZXJzaW9uc1tcImxvbmcgbG9uZ1wiXSA9IGNyZWF0ZU51bWJlckNvbnZlcnNpb24oMzIsIHsgdW5zaWduZWQ6IGZhbHNlLCBtb2R1bG9CaXRMZW5ndGg6IDY0IH0pO1xuY29udmVyc2lvbnNbXCJ1bnNpZ25lZCBsb25nIGxvbmdcIl0gPSBjcmVhdGVOdW1iZXJDb252ZXJzaW9uKDMyLCB7IHVuc2lnbmVkOiB0cnVlLCBtb2R1bG9CaXRMZW5ndGg6IDY0IH0pO1xuXG5jb252ZXJzaW9uc1tcImRvdWJsZVwiXSA9IGZ1bmN0aW9uIChWKSB7XG4gICAgY29uc3QgeCA9ICtWO1xuXG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoeCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50IGlzIG5vdCBhIGZpbml0ZSBmbG9hdGluZy1wb2ludCB2YWx1ZVwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4geDtcbn07XG5cbmNvbnZlcnNpb25zW1widW5yZXN0cmljdGVkIGRvdWJsZVwiXSA9IGZ1bmN0aW9uIChWKSB7XG4gICAgY29uc3QgeCA9ICtWO1xuXG4gICAgaWYgKGlzTmFOKHgpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCBpcyBOYU5cIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHg7XG59O1xuXG4vLyBub3QgcXVpdGUgdmFsaWQsIGJ1dCBnb29kIGVub3VnaCBmb3IgSlNcbmNvbnZlcnNpb25zW1wiZmxvYXRcIl0gPSBjb252ZXJzaW9uc1tcImRvdWJsZVwiXTtcbmNvbnZlcnNpb25zW1widW5yZXN0cmljdGVkIGZsb2F0XCJdID0gY29udmVyc2lvbnNbXCJ1bnJlc3RyaWN0ZWQgZG91YmxlXCJdO1xuXG5jb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXSA9IGZ1bmN0aW9uIChWLCBvcHRzKSB7XG4gICAgaWYgKCFvcHRzKSBvcHRzID0ge307XG5cbiAgICBpZiAob3B0cy50cmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIFYgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIFN0cmluZyhWKTtcbn07XG5cbmNvbnZlcnNpb25zW1wiQnl0ZVN0cmluZ1wiXSA9IGZ1bmN0aW9uIChWLCBvcHRzKSB7XG4gICAgY29uc3QgeCA9IFN0cmluZyhWKTtcbiAgICBsZXQgYyA9IHVuZGVmaW5lZDtcbiAgICBmb3IgKGxldCBpID0gMDsgKGMgPSB4LmNvZGVQb2ludEF0KGkpKSAhPT0gdW5kZWZpbmVkOyArK2kpIHtcbiAgICAgICAgaWYgKGMgPiAyNTUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCBpcyBub3QgYSB2YWxpZCBieXRlc3RyaW5nXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHg7XG59O1xuXG5jb252ZXJzaW9uc1tcIlVTVlN0cmluZ1wiXSA9IGZ1bmN0aW9uIChWKSB7XG4gICAgY29uc3QgUyA9IFN0cmluZyhWKTtcbiAgICBjb25zdCBuID0gUy5sZW5ndGg7XG4gICAgY29uc3QgVSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIGNvbnN0IGMgPSBTLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGlmIChjIDwgMHhEODAwIHx8IGMgPiAweERGRkYpIHtcbiAgICAgICAgICAgIFUucHVzaChTdHJpbmcuZnJvbUNvZGVQb2ludChjKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoMHhEQzAwIDw9IGMgJiYgYyA8PSAweERGRkYpIHtcbiAgICAgICAgICAgIFUucHVzaChTdHJpbmcuZnJvbUNvZGVQb2ludCgweEZGRkQpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChpID09PSBuIC0gMSkge1xuICAgICAgICAgICAgICAgIFUucHVzaChTdHJpbmcuZnJvbUNvZGVQb2ludCgweEZGRkQpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZCA9IFMuY2hhckNvZGVBdChpICsgMSk7XG4gICAgICAgICAgICAgICAgaWYgKDB4REMwMCA8PSBkICYmIGQgPD0gMHhERkZGKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGEgPSBjICYgMHgzRkY7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGIgPSBkICYgMHgzRkY7XG4gICAgICAgICAgICAgICAgICAgIFUucHVzaChTdHJpbmcuZnJvbUNvZGVQb2ludCgoMiA8PCAxNSkgKyAoMiA8PCA5KSAqIGEgKyBiKSk7XG4gICAgICAgICAgICAgICAgICAgICsraTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBVLnB1c2goU3RyaW5nLmZyb21Db2RlUG9pbnQoMHhGRkZEKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFUuam9pbignJyk7XG59O1xuXG5jb252ZXJzaW9uc1tcIkRhdGVcIl0gPSBmdW5jdGlvbiAoViwgb3B0cykge1xuICAgIGlmICghKFYgaW5zdGFuY2VvZiBEYXRlKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgaXMgbm90IGEgRGF0ZSBvYmplY3RcIik7XG4gICAgfVxuICAgIGlmIChpc05hTihWKSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJldHVybiBWO1xufTtcblxuY29udmVyc2lvbnNbXCJSZWdFeHBcIl0gPSBmdW5jdGlvbiAoViwgb3B0cykge1xuICAgIGlmICghKFYgaW5zdGFuY2VvZiBSZWdFeHApKSB7XG4gICAgICAgIFYgPSBuZXcgUmVnRXhwKFYpO1xuICAgIH1cblxuICAgIHJldHVybiBWO1xufTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzLm1peGluID0gZnVuY3Rpb24gbWl4aW4odGFyZ2V0LCBzb3VyY2UpIHtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHNvdXJjZSk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleXNbaV0sIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXlzW2ldKSk7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzLndyYXBwZXJTeW1ib2wgPSBTeW1ib2woXCJ3cmFwcGVyXCIpO1xubW9kdWxlLmV4cG9ydHMuaW1wbFN5bWJvbCA9IFN5bWJvbChcImltcGxcIik7XG5cbm1vZHVsZS5leHBvcnRzLndyYXBwZXJGb3JJbXBsID0gZnVuY3Rpb24gKGltcGwpIHtcbiAgcmV0dXJuIGltcGxbbW9kdWxlLmV4cG9ydHMud3JhcHBlclN5bWJvbF07XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5pbXBsRm9yV3JhcHBlciA9IGZ1bmN0aW9uICh3cmFwcGVyKSB7XG4gIHJldHVybiB3cmFwcGVyW21vZHVsZS5leHBvcnRzLmltcGxTeW1ib2xdO1xufTtcblxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcblxudmFyIHB1bnljb2RlID0gcmVxdWlyZShcInB1bnljb2RlXCIpO1xudmFyIG1hcHBpbmdUYWJsZSA9IHJlcXVpcmUoXCIuL2xpYi9tYXBwaW5nVGFibGUuanNvblwiKTtcblxudmFyIFBST0NFU1NJTkdfT1BUSU9OUyA9IHtcbiAgVFJBTlNJVElPTkFMOiAwLFxuICBOT05UUkFOU0lUSU9OQUw6IDFcbn07XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZShzdHIpIHsgLy8gZml4IGJ1ZyBpbiB2OFxuICByZXR1cm4gc3RyLnNwbGl0KCdcXHUwMDAwJykubWFwKGZ1bmN0aW9uIChzKSB7IHJldHVybiBzLm5vcm1hbGl6ZSgnTkZDJyk7IH0pLmpvaW4oJ1xcdTAwMDAnKTtcbn1cblxuZnVuY3Rpb24gZmluZFN0YXR1cyh2YWwpIHtcbiAgdmFyIHN0YXJ0ID0gMDtcbiAgdmFyIGVuZCA9IG1hcHBpbmdUYWJsZS5sZW5ndGggLSAxO1xuXG4gIHdoaWxlIChzdGFydCA8PSBlbmQpIHtcbiAgICB2YXIgbWlkID0gTWF0aC5mbG9vcigoc3RhcnQgKyBlbmQpIC8gMik7XG5cbiAgICB2YXIgdGFyZ2V0ID0gbWFwcGluZ1RhYmxlW21pZF07XG4gICAgaWYgKHRhcmdldFswXVswXSA8PSB2YWwgJiYgdGFyZ2V0WzBdWzFdID49IHZhbCkge1xuICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9IGVsc2UgaWYgKHRhcmdldFswXVswXSA+IHZhbCkge1xuICAgICAgZW5kID0gbWlkIC0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhcnQgPSBtaWQgKyAxO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG52YXIgcmVnZXhBc3RyYWxTeW1ib2xzID0gL1tcXHVEODAwLVxcdURCRkZdW1xcdURDMDAtXFx1REZGRl0vZztcblxuZnVuY3Rpb24gY291bnRTeW1ib2xzKHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nXG4gICAgLy8gcmVwbGFjZSBldmVyeSBzdXJyb2dhdGUgcGFpciB3aXRoIGEgQk1QIHN5bWJvbFxuICAgIC5yZXBsYWNlKHJlZ2V4QXN0cmFsU3ltYm9scywgJ18nKVxuICAgIC8vIHRoZW4gZ2V0IHRoZSBsZW5ndGhcbiAgICAubGVuZ3RoO1xufVxuXG5mdW5jdGlvbiBtYXBDaGFycyhkb21haW5fbmFtZSwgdXNlU1REMywgcHJvY2Vzc2luZ19vcHRpb24pIHtcbiAgdmFyIGhhc0Vycm9yID0gZmFsc2U7XG4gIHZhciBwcm9jZXNzZWQgPSBcIlwiO1xuXG4gIHZhciBsZW4gPSBjb3VudFN5bWJvbHMoZG9tYWluX25hbWUpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgdmFyIGNvZGVQb2ludCA9IGRvbWFpbl9uYW1lLmNvZGVQb2ludEF0KGkpO1xuICAgIHZhciBzdGF0dXMgPSBmaW5kU3RhdHVzKGNvZGVQb2ludCk7XG5cbiAgICBzd2l0Y2ggKHN0YXR1c1sxXSkge1xuICAgICAgY2FzZSBcImRpc2FsbG93ZWRcIjpcbiAgICAgICAgaGFzRXJyb3IgPSB0cnVlO1xuICAgICAgICBwcm9jZXNzZWQgKz0gU3RyaW5nLmZyb21Db2RlUG9pbnQoY29kZVBvaW50KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiaWdub3JlZFwiOlxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJtYXBwZWRcIjpcbiAgICAgICAgcHJvY2Vzc2VkICs9IFN0cmluZy5mcm9tQ29kZVBvaW50LmFwcGx5KFN0cmluZywgc3RhdHVzWzJdKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiZGV2aWF0aW9uXCI6XG4gICAgICAgIGlmIChwcm9jZXNzaW5nX29wdGlvbiA9PT0gUFJPQ0VTU0lOR19PUFRJT05TLlRSQU5TSVRJT05BTCkge1xuICAgICAgICAgIHByb2Nlc3NlZCArPSBTdHJpbmcuZnJvbUNvZGVQb2ludC5hcHBseShTdHJpbmcsIHN0YXR1c1syXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJvY2Vzc2VkICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KGNvZGVQb2ludCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwidmFsaWRcIjpcbiAgICAgICAgcHJvY2Vzc2VkICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KGNvZGVQb2ludCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIjpcbiAgICAgICAgaWYgKHVzZVNURDMpIHtcbiAgICAgICAgICBoYXNFcnJvciA9IHRydWU7XG4gICAgICAgICAgcHJvY2Vzc2VkICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KGNvZGVQb2ludCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJvY2Vzc2VkICs9IFN0cmluZy5mcm9tQ29kZVBvaW50LmFwcGx5KFN0cmluZywgc3RhdHVzWzJdKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJkaXNhbGxvd2VkX1NURDNfdmFsaWRcIjpcbiAgICAgICAgaWYgKHVzZVNURDMpIHtcbiAgICAgICAgICBoYXNFcnJvciA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBwcm9jZXNzZWQgKz0gU3RyaW5nLmZyb21Db2RlUG9pbnQoY29kZVBvaW50KTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzdHJpbmc6IHByb2Nlc3NlZCxcbiAgICBlcnJvcjogaGFzRXJyb3JcbiAgfTtcbn1cblxudmFyIGNvbWJpbmluZ01hcmtzUmVnZXggPSAvW1xcdTAzMDAtXFx1MDM2RlxcdTA0ODMtXFx1MDQ4OVxcdTA1OTEtXFx1MDVCRFxcdTA1QkZcXHUwNUMxXFx1MDVDMlxcdTA1QzRcXHUwNUM1XFx1MDVDN1xcdTA2MTAtXFx1MDYxQVxcdTA2NEItXFx1MDY1RlxcdTA2NzBcXHUwNkQ2LVxcdTA2RENcXHUwNkRGLVxcdTA2RTRcXHUwNkU3XFx1MDZFOFxcdTA2RUEtXFx1MDZFRFxcdTA3MTFcXHUwNzMwLVxcdTA3NEFcXHUwN0E2LVxcdTA3QjBcXHUwN0VCLVxcdTA3RjNcXHUwODE2LVxcdTA4MTlcXHUwODFCLVxcdTA4MjNcXHUwODI1LVxcdTA4MjdcXHUwODI5LVxcdTA4MkRcXHUwODU5LVxcdTA4NUJcXHUwOEU0LVxcdTA5MDNcXHUwOTNBLVxcdTA5M0NcXHUwOTNFLVxcdTA5NEZcXHUwOTUxLVxcdTA5NTdcXHUwOTYyXFx1MDk2M1xcdTA5ODEtXFx1MDk4M1xcdTA5QkNcXHUwOUJFLVxcdTA5QzRcXHUwOUM3XFx1MDlDOFxcdTA5Q0ItXFx1MDlDRFxcdTA5RDdcXHUwOUUyXFx1MDlFM1xcdTBBMDEtXFx1MEEwM1xcdTBBM0NcXHUwQTNFLVxcdTBBNDJcXHUwQTQ3XFx1MEE0OFxcdTBBNEItXFx1MEE0RFxcdTBBNTFcXHUwQTcwXFx1MEE3MVxcdTBBNzVcXHUwQTgxLVxcdTBBODNcXHUwQUJDXFx1MEFCRS1cXHUwQUM1XFx1MEFDNy1cXHUwQUM5XFx1MEFDQi1cXHUwQUNEXFx1MEFFMlxcdTBBRTNcXHUwQjAxLVxcdTBCMDNcXHUwQjNDXFx1MEIzRS1cXHUwQjQ0XFx1MEI0N1xcdTBCNDhcXHUwQjRCLVxcdTBCNERcXHUwQjU2XFx1MEI1N1xcdTBCNjJcXHUwQjYzXFx1MEI4MlxcdTBCQkUtXFx1MEJDMlxcdTBCQzYtXFx1MEJDOFxcdTBCQ0EtXFx1MEJDRFxcdTBCRDdcXHUwQzAwLVxcdTBDMDNcXHUwQzNFLVxcdTBDNDRcXHUwQzQ2LVxcdTBDNDhcXHUwQzRBLVxcdTBDNERcXHUwQzU1XFx1MEM1NlxcdTBDNjJcXHUwQzYzXFx1MEM4MS1cXHUwQzgzXFx1MENCQ1xcdTBDQkUtXFx1MENDNFxcdTBDQzYtXFx1MENDOFxcdTBDQ0EtXFx1MENDRFxcdTBDRDVcXHUwQ0Q2XFx1MENFMlxcdTBDRTNcXHUwRDAxLVxcdTBEMDNcXHUwRDNFLVxcdTBENDRcXHUwRDQ2LVxcdTBENDhcXHUwRDRBLVxcdTBENERcXHUwRDU3XFx1MEQ2MlxcdTBENjNcXHUwRDgyXFx1MEQ4M1xcdTBEQ0FcXHUwRENGLVxcdTBERDRcXHUwREQ2XFx1MEREOC1cXHUwRERGXFx1MERGMlxcdTBERjNcXHUwRTMxXFx1MEUzNC1cXHUwRTNBXFx1MEU0Ny1cXHUwRTRFXFx1MEVCMVxcdTBFQjQtXFx1MEVCOVxcdTBFQkJcXHUwRUJDXFx1MEVDOC1cXHUwRUNEXFx1MEYxOFxcdTBGMTlcXHUwRjM1XFx1MEYzN1xcdTBGMzlcXHUwRjNFXFx1MEYzRlxcdTBGNzEtXFx1MEY4NFxcdTBGODZcXHUwRjg3XFx1MEY4RC1cXHUwRjk3XFx1MEY5OS1cXHUwRkJDXFx1MEZDNlxcdTEwMkItXFx1MTAzRVxcdTEwNTYtXFx1MTA1OVxcdTEwNUUtXFx1MTA2MFxcdTEwNjItXFx1MTA2NFxcdTEwNjctXFx1MTA2RFxcdTEwNzEtXFx1MTA3NFxcdTEwODItXFx1MTA4RFxcdTEwOEZcXHUxMDlBLVxcdTEwOURcXHUxMzVELVxcdTEzNUZcXHUxNzEyLVxcdTE3MTRcXHUxNzMyLVxcdTE3MzRcXHUxNzUyXFx1MTc1M1xcdTE3NzJcXHUxNzczXFx1MTdCNC1cXHUxN0QzXFx1MTdERFxcdTE4MEItXFx1MTgwRFxcdTE4QTlcXHUxOTIwLVxcdTE5MkJcXHUxOTMwLVxcdTE5M0JcXHUxOUIwLVxcdTE5QzBcXHUxOUM4XFx1MTlDOVxcdTFBMTctXFx1MUExQlxcdTFBNTUtXFx1MUE1RVxcdTFBNjAtXFx1MUE3Q1xcdTFBN0ZcXHUxQUIwLVxcdTFBQkVcXHUxQjAwLVxcdTFCMDRcXHUxQjM0LVxcdTFCNDRcXHUxQjZCLVxcdTFCNzNcXHUxQjgwLVxcdTFCODJcXHUxQkExLVxcdTFCQURcXHUxQkU2LVxcdTFCRjNcXHUxQzI0LVxcdTFDMzdcXHUxQ0QwLVxcdTFDRDJcXHUxQ0Q0LVxcdTFDRThcXHUxQ0VEXFx1MUNGMi1cXHUxQ0Y0XFx1MUNGOFxcdTFDRjlcXHUxREMwLVxcdTFERjVcXHUxREZDLVxcdTFERkZcXHUyMEQwLVxcdTIwRjBcXHUyQ0VGLVxcdTJDRjFcXHUyRDdGXFx1MkRFMC1cXHUyREZGXFx1MzAyQS1cXHUzMDJGXFx1MzA5OVxcdTMwOUFcXHVBNjZGLVxcdUE2NzJcXHVBNjc0LVxcdUE2N0RcXHVBNjlGXFx1QTZGMFxcdUE2RjFcXHVBODAyXFx1QTgwNlxcdUE4MEJcXHVBODIzLVxcdUE4MjdcXHVBODgwXFx1QTg4MVxcdUE4QjQtXFx1QThDNFxcdUE4RTAtXFx1QThGMVxcdUE5MjYtXFx1QTkyRFxcdUE5NDctXFx1QTk1M1xcdUE5ODAtXFx1QTk4M1xcdUE5QjMtXFx1QTlDMFxcdUE5RTVcXHVBQTI5LVxcdUFBMzZcXHVBQTQzXFx1QUE0Q1xcdUFBNERcXHVBQTdCLVxcdUFBN0RcXHVBQUIwXFx1QUFCMi1cXHVBQUI0XFx1QUFCN1xcdUFBQjhcXHVBQUJFXFx1QUFCRlxcdUFBQzFcXHVBQUVCLVxcdUFBRUZcXHVBQUY1XFx1QUFGNlxcdUFCRTMtXFx1QUJFQVxcdUFCRUNcXHVBQkVEXFx1RkIxRVxcdUZFMDAtXFx1RkUwRlxcdUZFMjAtXFx1RkUyRF18XFx1RDgwMFtcXHVEREZEXFx1REVFMFxcdURGNzYtXFx1REY3QV18XFx1RDgwMltcXHVERTAxLVxcdURFMDNcXHVERTA1XFx1REUwNlxcdURFMEMtXFx1REUwRlxcdURFMzgtXFx1REUzQVxcdURFM0ZcXHVERUU1XFx1REVFNl18XFx1RDgwNFtcXHVEQzAwLVxcdURDMDJcXHVEQzM4LVxcdURDNDZcXHVEQzdGLVxcdURDODJcXHVEQ0IwLVxcdURDQkFcXHVERDAwLVxcdUREMDJcXHVERDI3LVxcdUREMzRcXHVERDczXFx1REQ4MC1cXHVERDgyXFx1RERCMy1cXHVEREMwXFx1REUyQy1cXHVERTM3XFx1REVERi1cXHVERUVBXFx1REYwMS1cXHVERjAzXFx1REYzQ1xcdURGM0UtXFx1REY0NFxcdURGNDdcXHVERjQ4XFx1REY0Qi1cXHVERjREXFx1REY1N1xcdURGNjJcXHVERjYzXFx1REY2Ni1cXHVERjZDXFx1REY3MC1cXHVERjc0XXxcXHVEODA1W1xcdURDQjAtXFx1RENDM1xcdUREQUYtXFx1RERCNVxcdUREQjgtXFx1RERDMFxcdURFMzAtXFx1REU0MFxcdURFQUItXFx1REVCN118XFx1RDgxQVtcXHVERUYwLVxcdURFRjRcXHVERjMwLVxcdURGMzZdfFxcdUQ4MUJbXFx1REY1MS1cXHVERjdFXFx1REY4Ri1cXHVERjkyXXxcXHVEODJGW1xcdURDOURcXHVEQzlFXXxcXHVEODM0W1xcdURENjUtXFx1REQ2OVxcdURENkQtXFx1REQ3MlxcdUREN0ItXFx1REQ4MlxcdUREODUtXFx1REQ4QlxcdUREQUEtXFx1RERBRFxcdURFNDItXFx1REU0NF18XFx1RDgzQVtcXHVEQ0QwLVxcdURDRDZdfFxcdURCNDBbXFx1REQwMC1cXHVEREVGXS87XG5cbmZ1bmN0aW9uIHZhbGlkYXRlTGFiZWwobGFiZWwsIHByb2Nlc3Npbmdfb3B0aW9uKSB7XG4gIGlmIChsYWJlbC5zdWJzdHIoMCwgNCkgPT09IFwieG4tLVwiKSB7XG4gICAgbGFiZWwgPSBwdW55Y29kZS50b1VuaWNvZGUobGFiZWwpO1xuICAgIHByb2Nlc3Npbmdfb3B0aW9uID0gUFJPQ0VTU0lOR19PUFRJT05TLk5PTlRSQU5TSVRJT05BTDtcbiAgfVxuXG4gIHZhciBlcnJvciA9IGZhbHNlO1xuXG4gIGlmIChub3JtYWxpemUobGFiZWwpICE9PSBsYWJlbCB8fFxuICAgICAgKGxhYmVsWzNdID09PSBcIi1cIiAmJiBsYWJlbFs0XSA9PT0gXCItXCIpIHx8XG4gICAgICBsYWJlbFswXSA9PT0gXCItXCIgfHwgbGFiZWxbbGFiZWwubGVuZ3RoIC0gMV0gPT09IFwiLVwiIHx8XG4gICAgICBsYWJlbC5pbmRleE9mKFwiLlwiKSAhPT0gLTEgfHxcbiAgICAgIGxhYmVsLnNlYXJjaChjb21iaW5pbmdNYXJrc1JlZ2V4KSA9PT0gMCkge1xuICAgIGVycm9yID0gdHJ1ZTtcbiAgfVxuXG4gIHZhciBsZW4gPSBjb3VudFN5bWJvbHMobGFiZWwpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgdmFyIHN0YXR1cyA9IGZpbmRTdGF0dXMobGFiZWwuY29kZVBvaW50QXQoaSkpO1xuICAgIGlmICgocHJvY2Vzc2luZyA9PT0gUFJPQ0VTU0lOR19PUFRJT05TLlRSQU5TSVRJT05BTCAmJiBzdGF0dXNbMV0gIT09IFwidmFsaWRcIikgfHxcbiAgICAgICAgKHByb2Nlc3NpbmcgPT09IFBST0NFU1NJTkdfT1BUSU9OUy5OT05UUkFOU0lUSU9OQUwgJiZcbiAgICAgICAgIHN0YXR1c1sxXSAhPT0gXCJ2YWxpZFwiICYmIHN0YXR1c1sxXSAhPT0gXCJkZXZpYXRpb25cIikpIHtcbiAgICAgIGVycm9yID0gdHJ1ZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbGFiZWw6IGxhYmVsLFxuICAgIGVycm9yOiBlcnJvclxuICB9O1xufVxuXG5mdW5jdGlvbiBwcm9jZXNzaW5nKGRvbWFpbl9uYW1lLCB1c2VTVEQzLCBwcm9jZXNzaW5nX29wdGlvbikge1xuICB2YXIgcmVzdWx0ID0gbWFwQ2hhcnMoZG9tYWluX25hbWUsIHVzZVNURDMsIHByb2Nlc3Npbmdfb3B0aW9uKTtcbiAgcmVzdWx0LnN0cmluZyA9IG5vcm1hbGl6ZShyZXN1bHQuc3RyaW5nKTtcblxuICB2YXIgbGFiZWxzID0gcmVzdWx0LnN0cmluZy5zcGxpdChcIi5cIik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGFiZWxzLmxlbmd0aDsgKytpKSB7XG4gICAgdHJ5IHtcbiAgICAgIHZhciB2YWxpZGF0aW9uID0gdmFsaWRhdGVMYWJlbChsYWJlbHNbaV0pO1xuICAgICAgbGFiZWxzW2ldID0gdmFsaWRhdGlvbi5sYWJlbDtcbiAgICAgIHJlc3VsdC5lcnJvciA9IHJlc3VsdC5lcnJvciB8fCB2YWxpZGF0aW9uLmVycm9yO1xuICAgIH0gY2F0Y2goZSkge1xuICAgICAgcmVzdWx0LmVycm9yID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHN0cmluZzogbGFiZWxzLmpvaW4oXCIuXCIpLFxuICAgIGVycm9yOiByZXN1bHQuZXJyb3JcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMudG9BU0NJSSA9IGZ1bmN0aW9uKGRvbWFpbl9uYW1lLCB1c2VTVEQzLCBwcm9jZXNzaW5nX29wdGlvbiwgdmVyaWZ5RG5zTGVuZ3RoKSB7XG4gIHZhciByZXN1bHQgPSBwcm9jZXNzaW5nKGRvbWFpbl9uYW1lLCB1c2VTVEQzLCBwcm9jZXNzaW5nX29wdGlvbik7XG4gIHZhciBsYWJlbHMgPSByZXN1bHQuc3RyaW5nLnNwbGl0KFwiLlwiKTtcbiAgbGFiZWxzID0gbGFiZWxzLm1hcChmdW5jdGlvbihsKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBwdW55Y29kZS50b0FTQ0lJKGwpO1xuICAgIH0gY2F0Y2goZSkge1xuICAgICAgcmVzdWx0LmVycm9yID0gdHJ1ZTtcbiAgICAgIHJldHVybiBsO1xuICAgIH1cbiAgfSk7XG5cbiAgaWYgKHZlcmlmeURuc0xlbmd0aCkge1xuICAgIHZhciB0b3RhbCA9IGxhYmVscy5zbGljZSgwLCBsYWJlbHMubGVuZ3RoIC0gMSkuam9pbihcIi5cIikubGVuZ3RoO1xuICAgIGlmICh0b3RhbC5sZW5ndGggPiAyNTMgfHwgdG90YWwubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXN1bHQuZXJyb3IgPSB0cnVlO1xuICAgIH1cblxuICAgIGZvciAodmFyIGk9MDsgaSA8IGxhYmVscy5sZW5ndGg7ICsraSkge1xuICAgICAgaWYgKGxhYmVscy5sZW5ndGggPiA2MyB8fCBsYWJlbHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJlc3VsdC5lcnJvciA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChyZXN1bHQuZXJyb3IpIHJldHVybiBudWxsO1xuICByZXR1cm4gbGFiZWxzLmpvaW4oXCIuXCIpO1xufTtcblxubW9kdWxlLmV4cG9ydHMudG9Vbmljb2RlID0gZnVuY3Rpb24oZG9tYWluX25hbWUsIHVzZVNURDMpIHtcbiAgdmFyIHJlc3VsdCA9IHByb2Nlc3NpbmcoZG9tYWluX25hbWUsIHVzZVNURDMsIFBST0NFU1NJTkdfT1BUSU9OUy5OT05UUkFOU0lUSU9OQUwpO1xuXG4gIHJldHVybiB7XG4gICAgZG9tYWluOiByZXN1bHQuc3RyaW5nLFxuICAgIGVycm9yOiByZXN1bHQuZXJyb3JcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzLlBST0NFU1NJTkdfT1BUSU9OUyA9IFBST0NFU1NJTkdfT1BUSU9OUztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XHJcbmNvbnN0IHB1bnljb2RlID0gcmVxdWlyZShcInB1bnljb2RlXCIpO1xyXG5jb25zdCB0cjQ2ID0gcmVxdWlyZShcInRyNDZcIik7XHJcblxyXG5jb25zdCBzcGVjaWFsU2NoZW1lcyA9IHtcclxuICBmdHA6IDIxLFxyXG4gIGZpbGU6IG51bGwsXHJcbiAgZ29waGVyOiA3MCxcclxuICBodHRwOiA4MCxcclxuICBodHRwczogNDQzLFxyXG4gIHdzOiA4MCxcclxuICB3c3M6IDQ0M1xyXG59O1xyXG5cclxuY29uc3QgZmFpbHVyZSA9IFN5bWJvbChcImZhaWx1cmVcIik7XHJcblxyXG5mdW5jdGlvbiBjb3VudFN5bWJvbHMoc3RyKSB7XHJcbiAgcmV0dXJuIHB1bnljb2RlLnVjczIuZGVjb2RlKHN0cikubGVuZ3RoO1xyXG59XHJcblxyXG5mdW5jdGlvbiBhdChpbnB1dCwgaWR4KSB7XHJcbiAgY29uc3QgYyA9IGlucHV0W2lkeF07XHJcbiAgcmV0dXJuIGlzTmFOKGMpID8gdW5kZWZpbmVkIDogU3RyaW5nLmZyb21Db2RlUG9pbnQoYyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzQVNDSUlEaWdpdChjKSB7XHJcbiAgcmV0dXJuIGMgPj0gMHgzMCAmJiBjIDw9IDB4Mzk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzQVNDSUlBbHBoYShjKSB7XHJcbiAgcmV0dXJuIChjID49IDB4NDEgJiYgYyA8PSAweDVBKSB8fCAoYyA+PSAweDYxICYmIGMgPD0gMHg3QSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzQVNDSUlBbHBoYW51bWVyaWMoYykge1xyXG4gIHJldHVybiBpc0FTQ0lJQWxwaGEoYykgfHwgaXNBU0NJSURpZ2l0KGMpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0FTQ0lJSGV4KGMpIHtcclxuICByZXR1cm4gaXNBU0NJSURpZ2l0KGMpIHx8IChjID49IDB4NDEgJiYgYyA8PSAweDQ2KSB8fCAoYyA+PSAweDYxICYmIGMgPD0gMHg2Nik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzU2luZ2xlRG90KGJ1ZmZlcikge1xyXG4gIHJldHVybiBidWZmZXIgPT09IFwiLlwiIHx8IGJ1ZmZlci50b0xvd2VyQ2FzZSgpID09PSBcIiUyZVwiO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0RvdWJsZURvdChidWZmZXIpIHtcclxuICBidWZmZXIgPSBidWZmZXIudG9Mb3dlckNhc2UoKTtcclxuICByZXR1cm4gYnVmZmVyID09PSBcIi4uXCIgfHwgYnVmZmVyID09PSBcIiUyZS5cIiB8fCBidWZmZXIgPT09IFwiLiUyZVwiIHx8IGJ1ZmZlciA9PT0gXCIlMmUlMmVcIjtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNXaW5kb3dzRHJpdmVMZXR0ZXJDb2RlUG9pbnRzKGNwMSwgY3AyKSB7XHJcbiAgcmV0dXJuIGlzQVNDSUlBbHBoYShjcDEpICYmIChjcDIgPT09IDU4IHx8IGNwMiA9PT0gMTI0KTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNXaW5kb3dzRHJpdmVMZXR0ZXJTdHJpbmcoc3RyaW5nKSB7XHJcbiAgcmV0dXJuIHN0cmluZy5sZW5ndGggPT09IDIgJiYgaXNBU0NJSUFscGhhKHN0cmluZy5jb2RlUG9pbnRBdCgwKSkgJiYgKHN0cmluZ1sxXSA9PT0gXCI6XCIgfHwgc3RyaW5nWzFdID09PSBcInxcIik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzTm9ybWFsaXplZFdpbmRvd3NEcml2ZUxldHRlclN0cmluZyhzdHJpbmcpIHtcclxuICByZXR1cm4gc3RyaW5nLmxlbmd0aCA9PT0gMiAmJiBpc0FTQ0lJQWxwaGEoc3RyaW5nLmNvZGVQb2ludEF0KDApKSAmJiBzdHJpbmdbMV0gPT09IFwiOlwiO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjb250YWluc0ZvcmJpZGRlbkhvc3RDb2RlUG9pbnQoc3RyaW5nKSB7XHJcbiAgcmV0dXJuIHN0cmluZy5zZWFyY2goL1xcdTAwMDB8XFx1MDAwOXxcXHUwMDBBfFxcdTAwMER8XFx1MDAyMHwjfCV8XFwvfDp8XFw/fEB8XFxbfFxcXFx8XFxdLykgIT09IC0xO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjb250YWluc0ZvcmJpZGRlbkhvc3RDb2RlUG9pbnRFeGNsdWRpbmdQZXJjZW50KHN0cmluZykge1xyXG4gIHJldHVybiBzdHJpbmcuc2VhcmNoKC9cXHUwMDAwfFxcdTAwMDl8XFx1MDAwQXxcXHUwMDBEfFxcdTAwMjB8I3xcXC98OnxcXD98QHxcXFt8XFxcXHxcXF0vKSAhPT0gLTE7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzU3BlY2lhbFNjaGVtZShzY2hlbWUpIHtcclxuICByZXR1cm4gc3BlY2lhbFNjaGVtZXNbc2NoZW1lXSAhPT0gdW5kZWZpbmVkO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc1NwZWNpYWwodXJsKSB7XHJcbiAgcmV0dXJuIGlzU3BlY2lhbFNjaGVtZSh1cmwuc2NoZW1lKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZGVmYXVsdFBvcnQoc2NoZW1lKSB7XHJcbiAgcmV0dXJuIHNwZWNpYWxTY2hlbWVzW3NjaGVtZV07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHBlcmNlbnRFbmNvZGUoYykge1xyXG4gIGxldCBoZXggPSBjLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xyXG4gIGlmIChoZXgubGVuZ3RoID09PSAxKSB7XHJcbiAgICBoZXggPSBcIjBcIiArIGhleDtcclxuICB9XHJcblxyXG4gIHJldHVybiBcIiVcIiArIGhleDtcclxufVxyXG5cclxuZnVuY3Rpb24gdXRmOFBlcmNlbnRFbmNvZGUoYykge1xyXG4gIGNvbnN0IGJ1ZiA9IG5ldyBCdWZmZXIoYyk7XHJcblxyXG4gIGxldCBzdHIgPSBcIlwiO1xyXG5cclxuICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1Zi5sZW5ndGg7ICsraSkge1xyXG4gICAgc3RyICs9IHBlcmNlbnRFbmNvZGUoYnVmW2ldKTtcclxuICB9XHJcblxyXG4gIHJldHVybiBzdHI7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHV0ZjhQZXJjZW50RGVjb2RlKHN0cikge1xyXG4gIGNvbnN0IGlucHV0ID0gbmV3IEJ1ZmZlcihzdHIpO1xyXG4gIGNvbnN0IG91dHB1dCA9IFtdO1xyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXQubGVuZ3RoOyArK2kpIHtcclxuICAgIGlmIChpbnB1dFtpXSAhPT0gMzcpIHtcclxuICAgICAgb3V0cHV0LnB1c2goaW5wdXRbaV0pO1xyXG4gICAgfSBlbHNlIGlmIChpbnB1dFtpXSA9PT0gMzcgJiYgaXNBU0NJSUhleChpbnB1dFtpICsgMV0pICYmIGlzQVNDSUlIZXgoaW5wdXRbaSArIDJdKSkge1xyXG4gICAgICBvdXRwdXQucHVzaChwYXJzZUludChpbnB1dC5zbGljZShpICsgMSwgaSArIDMpLnRvU3RyaW5nKCksIDE2KSk7XHJcbiAgICAgIGkgKz0gMjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG91dHB1dC5wdXNoKGlucHV0W2ldKTtcclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIG5ldyBCdWZmZXIob3V0cHV0KS50b1N0cmluZygpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0MwQ29udHJvbFBlcmNlbnRFbmNvZGUoYykge1xyXG4gIHJldHVybiBjIDw9IDB4MUYgfHwgYyA+IDB4N0U7XHJcbn1cclxuXHJcbmNvbnN0IGV4dHJhUGF0aFBlcmNlbnRFbmNvZGVTZXQgPSBuZXcgU2V0KFszMiwgMzQsIDM1LCA2MCwgNjIsIDYzLCA5NiwgMTIzLCAxMjVdKTtcclxuZnVuY3Rpb24gaXNQYXRoUGVyY2VudEVuY29kZShjKSB7XHJcbiAgcmV0dXJuIGlzQzBDb250cm9sUGVyY2VudEVuY29kZShjKSB8fCBleHRyYVBhdGhQZXJjZW50RW5jb2RlU2V0LmhhcyhjKTtcclxufVxyXG5cclxuY29uc3QgZXh0cmFVc2VyaW5mb1BlcmNlbnRFbmNvZGVTZXQgPVxyXG4gIG5ldyBTZXQoWzQ3LCA1OCwgNTksIDYxLCA2NCwgOTEsIDkyLCA5MywgOTQsIDEyNF0pO1xyXG5mdW5jdGlvbiBpc1VzZXJpbmZvUGVyY2VudEVuY29kZShjKSB7XHJcbiAgcmV0dXJuIGlzUGF0aFBlcmNlbnRFbmNvZGUoYykgfHwgZXh0cmFVc2VyaW5mb1BlcmNlbnRFbmNvZGVTZXQuaGFzKGMpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwZXJjZW50RW5jb2RlQ2hhcihjLCBlbmNvZGVTZXRQcmVkaWNhdGUpIHtcclxuICBjb25zdCBjU3RyID0gU3RyaW5nLmZyb21Db2RlUG9pbnQoYyk7XHJcblxyXG4gIGlmIChlbmNvZGVTZXRQcmVkaWNhdGUoYykpIHtcclxuICAgIHJldHVybiB1dGY4UGVyY2VudEVuY29kZShjU3RyKTtcclxuICB9XHJcblxyXG4gIHJldHVybiBjU3RyO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwYXJzZUlQdjROdW1iZXIoaW5wdXQpIHtcclxuICBsZXQgUiA9IDEwO1xyXG5cclxuICBpZiAoaW5wdXQubGVuZ3RoID49IDIgJiYgaW5wdXQuY2hhckF0KDApID09PSBcIjBcIiAmJiBpbnB1dC5jaGFyQXQoMSkudG9Mb3dlckNhc2UoKSA9PT0gXCJ4XCIpIHtcclxuICAgIGlucHV0ID0gaW5wdXQuc3Vic3RyaW5nKDIpO1xyXG4gICAgUiA9IDE2O1xyXG4gIH0gZWxzZSBpZiAoaW5wdXQubGVuZ3RoID49IDIgJiYgaW5wdXQuY2hhckF0KDApID09PSBcIjBcIikge1xyXG4gICAgaW5wdXQgPSBpbnB1dC5zdWJzdHJpbmcoMSk7XHJcbiAgICBSID0gODtcclxuICB9XHJcblxyXG4gIGlmIChpbnB1dCA9PT0gXCJcIikge1xyXG4gICAgcmV0dXJuIDA7XHJcbiAgfVxyXG5cclxuICBjb25zdCByZWdleCA9IFIgPT09IDEwID8gL1teMC05XS8gOiAoUiA9PT0gMTYgPyAvW14wLTlBLUZhLWZdLyA6IC9bXjAtN10vKTtcclxuICBpZiAocmVnZXgudGVzdChpbnB1dCkpIHtcclxuICAgIHJldHVybiBmYWlsdXJlO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHBhcnNlSW50KGlucHV0LCBSKTtcclxufVxyXG5cclxuZnVuY3Rpb24gcGFyc2VJUHY0KGlucHV0KSB7XHJcbiAgY29uc3QgcGFydHMgPSBpbnB1dC5zcGxpdChcIi5cIik7XHJcbiAgaWYgKHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdID09PSBcIlwiKSB7XHJcbiAgICBpZiAocGFydHMubGVuZ3RoID4gMSkge1xyXG4gICAgICBwYXJ0cy5wb3AoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlmIChwYXJ0cy5sZW5ndGggPiA0KSB7XHJcbiAgICByZXR1cm4gaW5wdXQ7XHJcbiAgfVxyXG5cclxuICBjb25zdCBudW1iZXJzID0gW107XHJcbiAgZm9yIChjb25zdCBwYXJ0IG9mIHBhcnRzKSB7XHJcbiAgICBpZiAocGFydCA9PT0gXCJcIikge1xyXG4gICAgICByZXR1cm4gaW5wdXQ7XHJcbiAgICB9XHJcbiAgICBjb25zdCBuID0gcGFyc2VJUHY0TnVtYmVyKHBhcnQpO1xyXG4gICAgaWYgKG4gPT09IGZhaWx1cmUpIHtcclxuICAgICAgcmV0dXJuIGlucHV0O1xyXG4gICAgfVxyXG5cclxuICAgIG51bWJlcnMucHVzaChuKTtcclxuICB9XHJcblxyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtYmVycy5sZW5ndGggLSAxOyArK2kpIHtcclxuICAgIGlmIChudW1iZXJzW2ldID4gMjU1KSB7XHJcbiAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgfVxyXG4gIH1cclxuICBpZiAobnVtYmVyc1tudW1iZXJzLmxlbmd0aCAtIDFdID49IE1hdGgucG93KDI1NiwgNSAtIG51bWJlcnMubGVuZ3RoKSkge1xyXG4gICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgfVxyXG5cclxuICBsZXQgaXB2NCA9IG51bWJlcnMucG9wKCk7XHJcbiAgbGV0IGNvdW50ZXIgPSAwO1xyXG5cclxuICBmb3IgKGNvbnN0IG4gb2YgbnVtYmVycykge1xyXG4gICAgaXB2NCArPSBuICogTWF0aC5wb3coMjU2LCAzIC0gY291bnRlcik7XHJcbiAgICArK2NvdW50ZXI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gaXB2NDtcclxufVxyXG5cclxuZnVuY3Rpb24gc2VyaWFsaXplSVB2NChhZGRyZXNzKSB7XHJcbiAgbGV0IG91dHB1dCA9IFwiXCI7XHJcbiAgbGV0IG4gPSBhZGRyZXNzO1xyXG5cclxuICBmb3IgKGxldCBpID0gMTsgaSA8PSA0OyArK2kpIHtcclxuICAgIG91dHB1dCA9IFN0cmluZyhuICUgMjU2KSArIG91dHB1dDtcclxuICAgIGlmIChpICE9PSA0KSB7XHJcbiAgICAgIG91dHB1dCA9IFwiLlwiICsgb3V0cHV0O1xyXG4gICAgfVxyXG4gICAgbiA9IE1hdGguZmxvb3IobiAvIDI1Nik7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gb3V0cHV0O1xyXG59XHJcblxyXG5mdW5jdGlvbiBwYXJzZUlQdjYoaW5wdXQpIHtcclxuICBjb25zdCBhZGRyZXNzID0gWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdO1xyXG4gIGxldCBwaWVjZUluZGV4ID0gMDtcclxuICBsZXQgY29tcHJlc3MgPSBudWxsO1xyXG4gIGxldCBwb2ludGVyID0gMDtcclxuXHJcbiAgaW5wdXQgPSBwdW55Y29kZS51Y3MyLmRlY29kZShpbnB1dCk7XHJcblxyXG4gIGlmIChpbnB1dFtwb2ludGVyXSA9PT0gNTgpIHtcclxuICAgIGlmIChpbnB1dFtwb2ludGVyICsgMV0gIT09IDU4KSB7XHJcbiAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgfVxyXG5cclxuICAgIHBvaW50ZXIgKz0gMjtcclxuICAgICsrcGllY2VJbmRleDtcclxuICAgIGNvbXByZXNzID0gcGllY2VJbmRleDtcclxuICB9XHJcblxyXG4gIHdoaWxlIChwb2ludGVyIDwgaW5wdXQubGVuZ3RoKSB7XHJcbiAgICBpZiAocGllY2VJbmRleCA9PT0gOCkge1xyXG4gICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaW5wdXRbcG9pbnRlcl0gPT09IDU4KSB7XHJcbiAgICAgIGlmIChjb21wcmVzcyAhPT0gbnVsbCkge1xyXG4gICAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgICB9XHJcbiAgICAgICsrcG9pbnRlcjtcclxuICAgICAgKytwaWVjZUluZGV4O1xyXG4gICAgICBjb21wcmVzcyA9IHBpZWNlSW5kZXg7XHJcbiAgICAgIGNvbnRpbnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCB2YWx1ZSA9IDA7XHJcbiAgICBsZXQgbGVuZ3RoID0gMDtcclxuXHJcbiAgICB3aGlsZSAobGVuZ3RoIDwgNCAmJiBpc0FTQ0lJSGV4KGlucHV0W3BvaW50ZXJdKSkge1xyXG4gICAgICB2YWx1ZSA9IHZhbHVlICogMHgxMCArIHBhcnNlSW50KGF0KGlucHV0LCBwb2ludGVyKSwgMTYpO1xyXG4gICAgICArK3BvaW50ZXI7XHJcbiAgICAgICsrbGVuZ3RoO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpbnB1dFtwb2ludGVyXSA9PT0gNDYpIHtcclxuICAgICAgaWYgKGxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBwb2ludGVyIC09IGxlbmd0aDtcclxuXHJcbiAgICAgIGlmIChwaWVjZUluZGV4ID4gNikge1xyXG4gICAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgbnVtYmVyc1NlZW4gPSAwO1xyXG5cclxuICAgICAgd2hpbGUgKGlucHV0W3BvaW50ZXJdICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBsZXQgaXB2NFBpZWNlID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYgKG51bWJlcnNTZWVuID4gMCkge1xyXG4gICAgICAgICAgaWYgKGlucHV0W3BvaW50ZXJdID09PSA0NiAmJiBudW1iZXJzU2VlbiA8IDQpIHtcclxuICAgICAgICAgICAgKytwb2ludGVyO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWlzQVNDSUlEaWdpdChpbnB1dFtwb2ludGVyXSkpIHtcclxuICAgICAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgd2hpbGUgKGlzQVNDSUlEaWdpdChpbnB1dFtwb2ludGVyXSkpIHtcclxuICAgICAgICAgIGNvbnN0IG51bWJlciA9IHBhcnNlSW50KGF0KGlucHV0LCBwb2ludGVyKSk7XHJcbiAgICAgICAgICBpZiAoaXB2NFBpZWNlID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlwdjRQaWVjZSA9IG51bWJlcjtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoaXB2NFBpZWNlID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaXB2NFBpZWNlID0gaXB2NFBpZWNlICogMTAgKyBudW1iZXI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoaXB2NFBpZWNlID4gMjU1KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgKytwb2ludGVyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYWRkcmVzc1twaWVjZUluZGV4XSA9IGFkZHJlc3NbcGllY2VJbmRleF0gKiAweDEwMCArIGlwdjRQaWVjZTtcclxuXHJcbiAgICAgICAgKytudW1iZXJzU2VlbjtcclxuXHJcbiAgICAgICAgaWYgKG51bWJlcnNTZWVuID09PSAyIHx8IG51bWJlcnNTZWVuID09PSA0KSB7XHJcbiAgICAgICAgICArK3BpZWNlSW5kZXg7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAobnVtYmVyc1NlZW4gIT09IDQpIHtcclxuICAgICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgYnJlYWs7XHJcbiAgICB9IGVsc2UgaWYgKGlucHV0W3BvaW50ZXJdID09PSA1OCkge1xyXG4gICAgICArK3BvaW50ZXI7XHJcbiAgICAgIGlmIChpbnB1dFtwb2ludGVyXSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoaW5wdXRbcG9pbnRlcl0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRyZXNzW3BpZWNlSW5kZXhdID0gdmFsdWU7XHJcbiAgICArK3BpZWNlSW5kZXg7XHJcbiAgfVxyXG5cclxuICBpZiAoY29tcHJlc3MgIT09IG51bGwpIHtcclxuICAgIGxldCBzd2FwcyA9IHBpZWNlSW5kZXggLSBjb21wcmVzcztcclxuICAgIHBpZWNlSW5kZXggPSA3O1xyXG4gICAgd2hpbGUgKHBpZWNlSW5kZXggIT09IDAgJiYgc3dhcHMgPiAwKSB7XHJcbiAgICAgIGNvbnN0IHRlbXAgPSBhZGRyZXNzW2NvbXByZXNzICsgc3dhcHMgLSAxXTtcclxuICAgICAgYWRkcmVzc1tjb21wcmVzcyArIHN3YXBzIC0gMV0gPSBhZGRyZXNzW3BpZWNlSW5kZXhdO1xyXG4gICAgICBhZGRyZXNzW3BpZWNlSW5kZXhdID0gdGVtcDtcclxuICAgICAgLS1waWVjZUluZGV4O1xyXG4gICAgICAtLXN3YXBzO1xyXG4gICAgfVxyXG4gIH0gZWxzZSBpZiAoY29tcHJlc3MgPT09IG51bGwgJiYgcGllY2VJbmRleCAhPT0gOCkge1xyXG4gICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gYWRkcmVzcztcclxufVxyXG5cclxuZnVuY3Rpb24gc2VyaWFsaXplSVB2NihhZGRyZXNzKSB7XHJcbiAgbGV0IG91dHB1dCA9IFwiXCI7XHJcbiAgY29uc3Qgc2VxUmVzdWx0ID0gZmluZExvbmdlc3RaZXJvU2VxdWVuY2UoYWRkcmVzcyk7XHJcbiAgY29uc3QgY29tcHJlc3MgPSBzZXFSZXN1bHQuaWR4O1xyXG4gIGxldCBpZ25vcmUwID0gZmFsc2U7XHJcblxyXG4gIGZvciAobGV0IHBpZWNlSW5kZXggPSAwOyBwaWVjZUluZGV4IDw9IDc7ICsrcGllY2VJbmRleCkge1xyXG4gICAgaWYgKGlnbm9yZTAgJiYgYWRkcmVzc1twaWVjZUluZGV4XSA9PT0gMCkge1xyXG4gICAgICBjb250aW51ZTtcclxuICAgIH0gZWxzZSBpZiAoaWdub3JlMCkge1xyXG4gICAgICBpZ25vcmUwID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbXByZXNzID09PSBwaWVjZUluZGV4KSB7XHJcbiAgICAgIGNvbnN0IHNlcGFyYXRvciA9IHBpZWNlSW5kZXggPT09IDAgPyBcIjo6XCIgOiBcIjpcIjtcclxuICAgICAgb3V0cHV0ICs9IHNlcGFyYXRvcjtcclxuICAgICAgaWdub3JlMCA9IHRydWU7XHJcbiAgICAgIGNvbnRpbnVlO1xyXG4gICAgfVxyXG5cclxuICAgIG91dHB1dCArPSBhZGRyZXNzW3BpZWNlSW5kZXhdLnRvU3RyaW5nKDE2KTtcclxuXHJcbiAgICBpZiAocGllY2VJbmRleCAhPT0gNykge1xyXG4gICAgICBvdXRwdXQgKz0gXCI6XCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gb3V0cHV0O1xyXG59XHJcblxyXG5mdW5jdGlvbiBwYXJzZUhvc3QoaW5wdXQsIGlzU3BlY2lhbEFyZykge1xyXG4gIGlmIChpbnB1dFswXSA9PT0gXCJbXCIpIHtcclxuICAgIGlmIChpbnB1dFtpbnB1dC5sZW5ndGggLSAxXSAhPT0gXCJdXCIpIHtcclxuICAgICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHBhcnNlSVB2NihpbnB1dC5zdWJzdHJpbmcoMSwgaW5wdXQubGVuZ3RoIC0gMSkpO1xyXG4gIH1cclxuXHJcbiAgaWYgKCFpc1NwZWNpYWxBcmcpIHtcclxuICAgIHJldHVybiBwYXJzZU9wYXF1ZUhvc3QoaW5wdXQpO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgZG9tYWluID0gdXRmOFBlcmNlbnREZWNvZGUoaW5wdXQpO1xyXG4gIGNvbnN0IGFzY2lpRG9tYWluID0gdHI0Ni50b0FTQ0lJKGRvbWFpbiwgZmFsc2UsIHRyNDYuUFJPQ0VTU0lOR19PUFRJT05TLk5PTlRSQU5TSVRJT05BTCwgZmFsc2UpO1xyXG4gIGlmIChhc2NpaURvbWFpbiA9PT0gbnVsbCkge1xyXG4gICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgfVxyXG5cclxuICBpZiAoY29udGFpbnNGb3JiaWRkZW5Ib3N0Q29kZVBvaW50KGFzY2lpRG9tYWluKSkge1xyXG4gICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgfVxyXG5cclxuICBjb25zdCBpcHY0SG9zdCA9IHBhcnNlSVB2NChhc2NpaURvbWFpbik7XHJcbiAgaWYgKHR5cGVvZiBpcHY0SG9zdCA9PT0gXCJudW1iZXJcIiB8fCBpcHY0SG9zdCA9PT0gZmFpbHVyZSkge1xyXG4gICAgcmV0dXJuIGlwdjRIb3N0O1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGFzY2lpRG9tYWluO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwYXJzZU9wYXF1ZUhvc3QoaW5wdXQpIHtcclxuICBpZiAoY29udGFpbnNGb3JiaWRkZW5Ib3N0Q29kZVBvaW50RXhjbHVkaW5nUGVyY2VudChpbnB1dCkpIHtcclxuICAgIHJldHVybiBmYWlsdXJlO1xyXG4gIH1cclxuXHJcbiAgbGV0IG91dHB1dCA9IFwiXCI7XHJcbiAgY29uc3QgZGVjb2RlZCA9IHB1bnljb2RlLnVjczIuZGVjb2RlKGlucHV0KTtcclxuICBmb3IgKGxldCBpID0gMDsgaSA8IGRlY29kZWQubGVuZ3RoOyArK2kpIHtcclxuICAgIG91dHB1dCArPSBwZXJjZW50RW5jb2RlQ2hhcihkZWNvZGVkW2ldLCBpc0MwQ29udHJvbFBlcmNlbnRFbmNvZGUpO1xyXG4gIH1cclxuICByZXR1cm4gb3V0cHV0O1xyXG59XHJcblxyXG5mdW5jdGlvbiBmaW5kTG9uZ2VzdFplcm9TZXF1ZW5jZShhcnIpIHtcclxuICBsZXQgbWF4SWR4ID0gbnVsbDtcclxuICBsZXQgbWF4TGVuID0gMTsgLy8gb25seSBmaW5kIGVsZW1lbnRzID4gMVxyXG4gIGxldCBjdXJyU3RhcnQgPSBudWxsO1xyXG4gIGxldCBjdXJyTGVuID0gMDtcclxuXHJcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyArK2kpIHtcclxuICAgIGlmIChhcnJbaV0gIT09IDApIHtcclxuICAgICAgaWYgKGN1cnJMZW4gPiBtYXhMZW4pIHtcclxuICAgICAgICBtYXhJZHggPSBjdXJyU3RhcnQ7XHJcbiAgICAgICAgbWF4TGVuID0gY3VyckxlbjtcclxuICAgICAgfVxyXG5cclxuICAgICAgY3VyclN0YXJ0ID0gbnVsbDtcclxuICAgICAgY3VyckxlbiA9IDA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoY3VyclN0YXJ0ID09PSBudWxsKSB7XHJcbiAgICAgICAgY3VyclN0YXJ0ID0gaTtcclxuICAgICAgfVxyXG4gICAgICArK2N1cnJMZW47XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBpZiB0cmFpbGluZyB6ZXJvc1xyXG4gIGlmIChjdXJyTGVuID4gbWF4TGVuKSB7XHJcbiAgICBtYXhJZHggPSBjdXJyU3RhcnQ7XHJcbiAgICBtYXhMZW4gPSBjdXJyTGVuO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIGlkeDogbWF4SWR4LFxyXG4gICAgbGVuOiBtYXhMZW5cclxuICB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBzZXJpYWxpemVIb3N0KGhvc3QpIHtcclxuICBpZiAodHlwZW9mIGhvc3QgPT09IFwibnVtYmVyXCIpIHtcclxuICAgIHJldHVybiBzZXJpYWxpemVJUHY0KGhvc3QpO1xyXG4gIH1cclxuXHJcbiAgLy8gSVB2NiBzZXJpYWxpemVyXHJcbiAgaWYgKGhvc3QgaW5zdGFuY2VvZiBBcnJheSkge1xyXG4gICAgcmV0dXJuIFwiW1wiICsgc2VyaWFsaXplSVB2Nihob3N0KSArIFwiXVwiO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGhvc3Q7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHRyaW1Db250cm9sQ2hhcnModXJsKSB7XHJcbiAgcmV0dXJuIHVybC5yZXBsYWNlKC9eW1xcdTAwMDAtXFx1MDAxRlxcdTAwMjBdK3xbXFx1MDAwMC1cXHUwMDFGXFx1MDAyMF0rJC9nLCBcIlwiKTtcclxufVxyXG5cclxuZnVuY3Rpb24gdHJpbVRhYkFuZE5ld2xpbmUodXJsKSB7XHJcbiAgcmV0dXJuIHVybC5yZXBsYWNlKC9cXHUwMDA5fFxcdTAwMEF8XFx1MDAwRC9nLCBcIlwiKTtcclxufVxyXG5cclxuZnVuY3Rpb24gc2hvcnRlblBhdGgodXJsKSB7XHJcbiAgY29uc3QgcGF0aCA9IHVybC5wYXRoO1xyXG4gIGlmIChwYXRoLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuICBpZiAodXJsLnNjaGVtZSA9PT0gXCJmaWxlXCIgJiYgcGF0aC5sZW5ndGggPT09IDEgJiYgaXNOb3JtYWxpemVkV2luZG93c0RyaXZlTGV0dGVyKHBhdGhbMF0pKSB7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBwYXRoLnBvcCgpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpbmNsdWRlc0NyZWRlbnRpYWxzKHVybCkge1xyXG4gIHJldHVybiB1cmwudXNlcm5hbWUgIT09IFwiXCIgfHwgdXJsLnBhc3N3b3JkICE9PSBcIlwiO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjYW5ub3RIYXZlQVVzZXJuYW1lUGFzc3dvcmRQb3J0KHVybCkge1xyXG4gIHJldHVybiB1cmwuaG9zdCA9PT0gbnVsbCB8fCB1cmwuaG9zdCA9PT0gXCJcIiB8fCB1cmwuY2Fubm90QmVBQmFzZVVSTCB8fCB1cmwuc2NoZW1lID09PSBcImZpbGVcIjtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNOb3JtYWxpemVkV2luZG93c0RyaXZlTGV0dGVyKHN0cmluZykge1xyXG4gIHJldHVybiAvXltBLVphLXpdOiQvLnRlc3Qoc3RyaW5nKTtcclxufVxyXG5cclxuZnVuY3Rpb24gVVJMU3RhdGVNYWNoaW5lKGlucHV0LCBiYXNlLCBlbmNvZGluZ092ZXJyaWRlLCB1cmwsIHN0YXRlT3ZlcnJpZGUpIHtcclxuICB0aGlzLnBvaW50ZXIgPSAwO1xyXG4gIHRoaXMuaW5wdXQgPSBpbnB1dDtcclxuICB0aGlzLmJhc2UgPSBiYXNlIHx8IG51bGw7XHJcbiAgdGhpcy5lbmNvZGluZ092ZXJyaWRlID0gZW5jb2RpbmdPdmVycmlkZSB8fCBcInV0Zi04XCI7XHJcbiAgdGhpcy5zdGF0ZU92ZXJyaWRlID0gc3RhdGVPdmVycmlkZTtcclxuICB0aGlzLnVybCA9IHVybDtcclxuICB0aGlzLmZhaWx1cmUgPSBmYWxzZTtcclxuICB0aGlzLnBhcnNlRXJyb3IgPSBmYWxzZTtcclxuXHJcbiAgaWYgKCF0aGlzLnVybCkge1xyXG4gICAgdGhpcy51cmwgPSB7XHJcbiAgICAgIHNjaGVtZTogXCJcIixcclxuICAgICAgdXNlcm5hbWU6IFwiXCIsXHJcbiAgICAgIHBhc3N3b3JkOiBcIlwiLFxyXG4gICAgICBob3N0OiBudWxsLFxyXG4gICAgICBwb3J0OiBudWxsLFxyXG4gICAgICBwYXRoOiBbXSxcclxuICAgICAgcXVlcnk6IG51bGwsXHJcbiAgICAgIGZyYWdtZW50OiBudWxsLFxyXG5cclxuICAgICAgY2Fubm90QmVBQmFzZVVSTDogZmFsc2VcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgcmVzID0gdHJpbUNvbnRyb2xDaGFycyh0aGlzLmlucHV0KTtcclxuICAgIGlmIChyZXMgIT09IHRoaXMuaW5wdXQpIHtcclxuICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHRoaXMuaW5wdXQgPSByZXM7XHJcbiAgfVxyXG5cclxuICBjb25zdCByZXMgPSB0cmltVGFiQW5kTmV3bGluZSh0aGlzLmlucHV0KTtcclxuICBpZiAocmVzICE9PSB0aGlzLmlucHV0KSB7XHJcbiAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gIH1cclxuICB0aGlzLmlucHV0ID0gcmVzO1xyXG5cclxuICB0aGlzLnN0YXRlID0gc3RhdGVPdmVycmlkZSB8fCBcInNjaGVtZSBzdGFydFwiO1xyXG5cclxuICB0aGlzLmJ1ZmZlciA9IFwiXCI7XHJcbiAgdGhpcy5hdEZsYWcgPSBmYWxzZTtcclxuICB0aGlzLmFyckZsYWcgPSBmYWxzZTtcclxuICB0aGlzLnBhc3N3b3JkVG9rZW5TZWVuRmxhZyA9IGZhbHNlO1xyXG5cclxuICB0aGlzLmlucHV0ID0gcHVueWNvZGUudWNzMi5kZWNvZGUodGhpcy5pbnB1dCk7XHJcblxyXG4gIGZvciAoOyB0aGlzLnBvaW50ZXIgPD0gdGhpcy5pbnB1dC5sZW5ndGg7ICsrdGhpcy5wb2ludGVyKSB7XHJcbiAgICBjb25zdCBjID0gdGhpcy5pbnB1dFt0aGlzLnBvaW50ZXJdO1xyXG4gICAgY29uc3QgY1N0ciA9IGlzTmFOKGMpID8gdW5kZWZpbmVkIDogU3RyaW5nLmZyb21Db2RlUG9pbnQoYyk7XHJcblxyXG4gICAgLy8gZXhlYyBzdGF0ZSBtYWNoaW5lXHJcbiAgICBjb25zdCByZXQgPSB0aGlzW1wicGFyc2UgXCIgKyB0aGlzLnN0YXRlXShjLCBjU3RyKTtcclxuICAgIGlmICghcmV0KSB7XHJcbiAgICAgIGJyZWFrOyAvLyB0ZXJtaW5hdGUgYWxnb3JpdGhtXHJcbiAgICB9IGVsc2UgaWYgKHJldCA9PT0gZmFpbHVyZSkge1xyXG4gICAgICB0aGlzLmZhaWx1cmUgPSB0cnVlO1xyXG4gICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBzY2hlbWUgc3RhcnRcIl0gPSBmdW5jdGlvbiBwYXJzZVNjaGVtZVN0YXJ0KGMsIGNTdHIpIHtcclxuICBpZiAoaXNBU0NJSUFscGhhKGMpKSB7XHJcbiAgICB0aGlzLmJ1ZmZlciArPSBjU3RyLnRvTG93ZXJDYXNlKCk7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJzY2hlbWVcIjtcclxuICB9IGVsc2UgaWYgKCF0aGlzLnN0YXRlT3ZlcnJpZGUpIHtcclxuICAgIHRoaXMuc3RhdGUgPSBcIm5vIHNjaGVtZVwiO1xyXG4gICAgLS10aGlzLnBvaW50ZXI7XHJcbiAgfSBlbHNlIHtcclxuICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICByZXR1cm4gZmFpbHVyZTtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIHNjaGVtZVwiXSA9IGZ1bmN0aW9uIHBhcnNlU2NoZW1lKGMsIGNTdHIpIHtcclxuICBpZiAoaXNBU0NJSUFscGhhbnVtZXJpYyhjKSB8fCBjID09PSA0MyB8fCBjID09PSA0NSB8fCBjID09PSA0Nikge1xyXG4gICAgdGhpcy5idWZmZXIgKz0gY1N0ci50b0xvd2VyQ2FzZSgpO1xyXG4gIH0gZWxzZSBpZiAoYyA9PT0gNTgpIHtcclxuICAgIGlmICh0aGlzLnN0YXRlT3ZlcnJpZGUpIHtcclxuICAgICAgaWYgKGlzU3BlY2lhbCh0aGlzLnVybCkgJiYgIWlzU3BlY2lhbFNjaGVtZSh0aGlzLmJ1ZmZlcikpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghaXNTcGVjaWFsKHRoaXMudXJsKSAmJiBpc1NwZWNpYWxTY2hlbWUodGhpcy5idWZmZXIpKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoKGluY2x1ZGVzQ3JlZGVudGlhbHModGhpcy51cmwpIHx8IHRoaXMudXJsLnBvcnQgIT09IG51bGwpICYmIHRoaXMuYnVmZmVyID09PSBcImZpbGVcIikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMudXJsLnNjaGVtZSA9PT0gXCJmaWxlXCIgJiYgKHRoaXMudXJsLmhvc3QgPT09IFwiXCIgfHwgdGhpcy51cmwuaG9zdCA9PT0gbnVsbCkpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMudXJsLnNjaGVtZSA9IHRoaXMuYnVmZmVyO1xyXG4gICAgdGhpcy5idWZmZXIgPSBcIlwiO1xyXG4gICAgaWYgKHRoaXMuc3RhdGVPdmVycmlkZSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy51cmwuc2NoZW1lID09PSBcImZpbGVcIikge1xyXG4gICAgICBpZiAodGhpcy5pbnB1dFt0aGlzLnBvaW50ZXIgKyAxXSAhPT0gNDcgfHwgdGhpcy5pbnB1dFt0aGlzLnBvaW50ZXIgKyAyXSAhPT0gNDcpIHtcclxuICAgICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcImZpbGVcIjtcclxuICAgIH0gZWxzZSBpZiAoaXNTcGVjaWFsKHRoaXMudXJsKSAmJiB0aGlzLmJhc2UgIT09IG51bGwgJiYgdGhpcy5iYXNlLnNjaGVtZSA9PT0gdGhpcy51cmwuc2NoZW1lKSB7XHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcInNwZWNpYWwgcmVsYXRpdmUgb3IgYXV0aG9yaXR5XCI7XHJcbiAgICB9IGVsc2UgaWYgKGlzU3BlY2lhbCh0aGlzLnVybCkpIHtcclxuICAgICAgdGhpcy5zdGF0ZSA9IFwic3BlY2lhbCBhdXRob3JpdHkgc2xhc2hlc1wiO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmlucHV0W3RoaXMucG9pbnRlciArIDFdID09PSA0Nykge1xyXG4gICAgICB0aGlzLnN0YXRlID0gXCJwYXRoIG9yIGF1dGhvcml0eVwiO1xyXG4gICAgICArK3RoaXMucG9pbnRlcjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudXJsLmNhbm5vdEJlQUJhc2VVUkwgPSB0cnVlO1xyXG4gICAgICB0aGlzLnVybC5wYXRoLnB1c2goXCJcIik7XHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcImNhbm5vdC1iZS1hLWJhc2UtVVJMIHBhdGhcIjtcclxuICAgIH1cclxuICB9IGVsc2UgaWYgKCF0aGlzLnN0YXRlT3ZlcnJpZGUpIHtcclxuICAgIHRoaXMuYnVmZmVyID0gXCJcIjtcclxuICAgIHRoaXMuc3RhdGUgPSBcIm5vIHNjaGVtZVwiO1xyXG4gICAgdGhpcy5wb2ludGVyID0gLTE7XHJcbiAgfSBlbHNlIHtcclxuICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICByZXR1cm4gZmFpbHVyZTtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIG5vIHNjaGVtZVwiXSA9IGZ1bmN0aW9uIHBhcnNlTm9TY2hlbWUoYykge1xyXG4gIGlmICh0aGlzLmJhc2UgPT09IG51bGwgfHwgKHRoaXMuYmFzZS5jYW5ub3RCZUFCYXNlVVJMICYmIGMgIT09IDM1KSkge1xyXG4gICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgfSBlbHNlIGlmICh0aGlzLmJhc2UuY2Fubm90QmVBQmFzZVVSTCAmJiBjID09PSAzNSkge1xyXG4gICAgdGhpcy51cmwuc2NoZW1lID0gdGhpcy5iYXNlLnNjaGVtZTtcclxuICAgIHRoaXMudXJsLnBhdGggPSB0aGlzLmJhc2UucGF0aC5zbGljZSgpO1xyXG4gICAgdGhpcy51cmwucXVlcnkgPSB0aGlzLmJhc2UucXVlcnk7XHJcbiAgICB0aGlzLnVybC5mcmFnbWVudCA9IFwiXCI7XHJcbiAgICB0aGlzLnVybC5jYW5ub3RCZUFCYXNlVVJMID0gdHJ1ZTtcclxuICAgIHRoaXMuc3RhdGUgPSBcImZyYWdtZW50XCI7XHJcbiAgfSBlbHNlIGlmICh0aGlzLmJhc2Uuc2NoZW1lID09PSBcImZpbGVcIikge1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwiZmlsZVwiO1xyXG4gICAgLS10aGlzLnBvaW50ZXI7XHJcbiAgfSBlbHNlIHtcclxuICAgIHRoaXMuc3RhdGUgPSBcInJlbGF0aXZlXCI7XHJcbiAgICAtLXRoaXMucG9pbnRlcjtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIHNwZWNpYWwgcmVsYXRpdmUgb3IgYXV0aG9yaXR5XCJdID0gZnVuY3Rpb24gcGFyc2VTcGVjaWFsUmVsYXRpdmVPckF1dGhvcml0eShjKSB7XHJcbiAgaWYgKGMgPT09IDQ3ICYmIHRoaXMuaW5wdXRbdGhpcy5wb2ludGVyICsgMV0gPT09IDQ3KSB7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJzcGVjaWFsIGF1dGhvcml0eSBpZ25vcmUgc2xhc2hlc1wiO1xyXG4gICAgKyt0aGlzLnBvaW50ZXI7XHJcbiAgfSBlbHNlIHtcclxuICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJyZWxhdGl2ZVwiO1xyXG4gICAgLS10aGlzLnBvaW50ZXI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBwYXRoIG9yIGF1dGhvcml0eVwiXSA9IGZ1bmN0aW9uIHBhcnNlUGF0aE9yQXV0aG9yaXR5KGMpIHtcclxuICBpZiAoYyA9PT0gNDcpIHtcclxuICAgIHRoaXMuc3RhdGUgPSBcImF1dGhvcml0eVwiO1xyXG4gIH0gZWxzZSB7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJwYXRoXCI7XHJcbiAgICAtLXRoaXMucG9pbnRlcjtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIHJlbGF0aXZlXCJdID0gZnVuY3Rpb24gcGFyc2VSZWxhdGl2ZShjKSB7XHJcbiAgdGhpcy51cmwuc2NoZW1lID0gdGhpcy5iYXNlLnNjaGVtZTtcclxuICBpZiAoaXNOYU4oYykpIHtcclxuICAgIHRoaXMudXJsLnVzZXJuYW1lID0gdGhpcy5iYXNlLnVzZXJuYW1lO1xyXG4gICAgdGhpcy51cmwucGFzc3dvcmQgPSB0aGlzLmJhc2UucGFzc3dvcmQ7XHJcbiAgICB0aGlzLnVybC5ob3N0ID0gdGhpcy5iYXNlLmhvc3Q7XHJcbiAgICB0aGlzLnVybC5wb3J0ID0gdGhpcy5iYXNlLnBvcnQ7XHJcbiAgICB0aGlzLnVybC5wYXRoID0gdGhpcy5iYXNlLnBhdGguc2xpY2UoKTtcclxuICAgIHRoaXMudXJsLnF1ZXJ5ID0gdGhpcy5iYXNlLnF1ZXJ5O1xyXG4gIH0gZWxzZSBpZiAoYyA9PT0gNDcpIHtcclxuICAgIHRoaXMuc3RhdGUgPSBcInJlbGF0aXZlIHNsYXNoXCI7XHJcbiAgfSBlbHNlIGlmIChjID09PSA2Mykge1xyXG4gICAgdGhpcy51cmwudXNlcm5hbWUgPSB0aGlzLmJhc2UudXNlcm5hbWU7XHJcbiAgICB0aGlzLnVybC5wYXNzd29yZCA9IHRoaXMuYmFzZS5wYXNzd29yZDtcclxuICAgIHRoaXMudXJsLmhvc3QgPSB0aGlzLmJhc2UuaG9zdDtcclxuICAgIHRoaXMudXJsLnBvcnQgPSB0aGlzLmJhc2UucG9ydDtcclxuICAgIHRoaXMudXJsLnBhdGggPSB0aGlzLmJhc2UucGF0aC5zbGljZSgpO1xyXG4gICAgdGhpcy51cmwucXVlcnkgPSBcIlwiO1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwicXVlcnlcIjtcclxuICB9IGVsc2UgaWYgKGMgPT09IDM1KSB7XHJcbiAgICB0aGlzLnVybC51c2VybmFtZSA9IHRoaXMuYmFzZS51c2VybmFtZTtcclxuICAgIHRoaXMudXJsLnBhc3N3b3JkID0gdGhpcy5iYXNlLnBhc3N3b3JkO1xyXG4gICAgdGhpcy51cmwuaG9zdCA9IHRoaXMuYmFzZS5ob3N0O1xyXG4gICAgdGhpcy51cmwucG9ydCA9IHRoaXMuYmFzZS5wb3J0O1xyXG4gICAgdGhpcy51cmwucGF0aCA9IHRoaXMuYmFzZS5wYXRoLnNsaWNlKCk7XHJcbiAgICB0aGlzLnVybC5xdWVyeSA9IHRoaXMuYmFzZS5xdWVyeTtcclxuICAgIHRoaXMudXJsLmZyYWdtZW50ID0gXCJcIjtcclxuICAgIHRoaXMuc3RhdGUgPSBcImZyYWdtZW50XCI7XHJcbiAgfSBlbHNlIGlmIChpc1NwZWNpYWwodGhpcy51cmwpICYmIGMgPT09IDkyKSB7XHJcbiAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwicmVsYXRpdmUgc2xhc2hcIjtcclxuICB9IGVsc2Uge1xyXG4gICAgdGhpcy51cmwudXNlcm5hbWUgPSB0aGlzLmJhc2UudXNlcm5hbWU7XHJcbiAgICB0aGlzLnVybC5wYXNzd29yZCA9IHRoaXMuYmFzZS5wYXNzd29yZDtcclxuICAgIHRoaXMudXJsLmhvc3QgPSB0aGlzLmJhc2UuaG9zdDtcclxuICAgIHRoaXMudXJsLnBvcnQgPSB0aGlzLmJhc2UucG9ydDtcclxuICAgIHRoaXMudXJsLnBhdGggPSB0aGlzLmJhc2UucGF0aC5zbGljZSgwLCB0aGlzLmJhc2UucGF0aC5sZW5ndGggLSAxKTtcclxuXHJcbiAgICB0aGlzLnN0YXRlID0gXCJwYXRoXCI7XHJcbiAgICAtLXRoaXMucG9pbnRlcjtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIHJlbGF0aXZlIHNsYXNoXCJdID0gZnVuY3Rpb24gcGFyc2VSZWxhdGl2ZVNsYXNoKGMpIHtcclxuICBpZiAoaXNTcGVjaWFsKHRoaXMudXJsKSAmJiAoYyA9PT0gNDcgfHwgYyA9PT0gOTIpKSB7XHJcbiAgICBpZiAoYyA9PT0gOTIpIHtcclxuICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHRoaXMuc3RhdGUgPSBcInNwZWNpYWwgYXV0aG9yaXR5IGlnbm9yZSBzbGFzaGVzXCI7XHJcbiAgfSBlbHNlIGlmIChjID09PSA0Nykge1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwiYXV0aG9yaXR5XCI7XHJcbiAgfSBlbHNlIHtcclxuICAgIHRoaXMudXJsLnVzZXJuYW1lID0gdGhpcy5iYXNlLnVzZXJuYW1lO1xyXG4gICAgdGhpcy51cmwucGFzc3dvcmQgPSB0aGlzLmJhc2UucGFzc3dvcmQ7XHJcbiAgICB0aGlzLnVybC5ob3N0ID0gdGhpcy5iYXNlLmhvc3Q7XHJcbiAgICB0aGlzLnVybC5wb3J0ID0gdGhpcy5iYXNlLnBvcnQ7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJwYXRoXCI7XHJcbiAgICAtLXRoaXMucG9pbnRlcjtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIHNwZWNpYWwgYXV0aG9yaXR5IHNsYXNoZXNcIl0gPSBmdW5jdGlvbiBwYXJzZVNwZWNpYWxBdXRob3JpdHlTbGFzaGVzKGMpIHtcclxuICBpZiAoYyA9PT0gNDcgJiYgdGhpcy5pbnB1dFt0aGlzLnBvaW50ZXIgKyAxXSA9PT0gNDcpIHtcclxuICAgIHRoaXMuc3RhdGUgPSBcInNwZWNpYWwgYXV0aG9yaXR5IGlnbm9yZSBzbGFzaGVzXCI7XHJcbiAgICArK3RoaXMucG9pbnRlcjtcclxuICB9IGVsc2Uge1xyXG4gICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgIHRoaXMuc3RhdGUgPSBcInNwZWNpYWwgYXV0aG9yaXR5IGlnbm9yZSBzbGFzaGVzXCI7XHJcbiAgICAtLXRoaXMucG9pbnRlcjtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIHNwZWNpYWwgYXV0aG9yaXR5IGlnbm9yZSBzbGFzaGVzXCJdID0gZnVuY3Rpb24gcGFyc2VTcGVjaWFsQXV0aG9yaXR5SWdub3JlU2xhc2hlcyhjKSB7XHJcbiAgaWYgKGMgIT09IDQ3ICYmIGMgIT09IDkyKSB7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJhdXRob3JpdHlcIjtcclxuICAgIC0tdGhpcy5wb2ludGVyO1xyXG4gIH0gZWxzZSB7XHJcbiAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5VUkxTdGF0ZU1hY2hpbmUucHJvdG90eXBlW1wicGFyc2UgYXV0aG9yaXR5XCJdID0gZnVuY3Rpb24gcGFyc2VBdXRob3JpdHkoYywgY1N0cikge1xyXG4gIGlmIChjID09PSA2NCkge1xyXG4gICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLmF0RmxhZykge1xyXG4gICAgICB0aGlzLmJ1ZmZlciA9IFwiJTQwXCIgKyB0aGlzLmJ1ZmZlcjtcclxuICAgIH1cclxuICAgIHRoaXMuYXRGbGFnID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBjYXJlZnVsLCB0aGlzIGlzIGJhc2VkIG9uIGJ1ZmZlciBhbmQgaGFzIGl0cyBvd24gcG9pbnRlciAodGhpcy5wb2ludGVyICE9IHBvaW50ZXIpIGFuZCBpbm5lciBjaGFyc1xyXG4gICAgY29uc3QgbGVuID0gY291bnRTeW1ib2xzKHRoaXMuYnVmZmVyKTtcclxuICAgIGZvciAobGV0IHBvaW50ZXIgPSAwOyBwb2ludGVyIDwgbGVuOyArK3BvaW50ZXIpIHtcclxuICAgICAgY29uc3QgY29kZVBvaW50ID0gdGhpcy5idWZmZXIuY29kZVBvaW50QXQocG9pbnRlcik7XHJcblxyXG4gICAgICBpZiAoY29kZVBvaW50ID09PSA1OCAmJiAhdGhpcy5wYXNzd29yZFRva2VuU2VlbkZsYWcpIHtcclxuICAgICAgICB0aGlzLnBhc3N3b3JkVG9rZW5TZWVuRmxhZyA9IHRydWU7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgZW5jb2RlZENvZGVQb2ludHMgPSBwZXJjZW50RW5jb2RlQ2hhcihjb2RlUG9pbnQsIGlzVXNlcmluZm9QZXJjZW50RW5jb2RlKTtcclxuICAgICAgaWYgKHRoaXMucGFzc3dvcmRUb2tlblNlZW5GbGFnKSB7XHJcbiAgICAgICAgdGhpcy51cmwucGFzc3dvcmQgKz0gZW5jb2RlZENvZGVQb2ludHM7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy51cmwudXNlcm5hbWUgKz0gZW5jb2RlZENvZGVQb2ludHM7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuYnVmZmVyID0gXCJcIjtcclxuICB9IGVsc2UgaWYgKGlzTmFOKGMpIHx8IGMgPT09IDQ3IHx8IGMgPT09IDYzIHx8IGMgPT09IDM1IHx8XHJcbiAgICAgICAgICAgICAoaXNTcGVjaWFsKHRoaXMudXJsKSAmJiBjID09PSA5MikpIHtcclxuICAgIGlmICh0aGlzLmF0RmxhZyAmJiB0aGlzLmJ1ZmZlciA9PT0gXCJcIikge1xyXG4gICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgIH1cclxuICAgIHRoaXMucG9pbnRlciAtPSBjb3VudFN5bWJvbHModGhpcy5idWZmZXIpICsgMTtcclxuICAgIHRoaXMuYnVmZmVyID0gXCJcIjtcclxuICAgIHRoaXMuc3RhdGUgPSBcImhvc3RcIjtcclxuICB9IGVsc2Uge1xyXG4gICAgdGhpcy5idWZmZXIgKz0gY1N0cjtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIGhvc3RuYW1lXCJdID1cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIGhvc3RcIl0gPSBmdW5jdGlvbiBwYXJzZUhvc3ROYW1lKGMsIGNTdHIpIHtcclxuICBpZiAodGhpcy5zdGF0ZU92ZXJyaWRlICYmIHRoaXMudXJsLnNjaGVtZSA9PT0gXCJmaWxlXCIpIHtcclxuICAgIC0tdGhpcy5wb2ludGVyO1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwiZmlsZSBob3N0XCI7XHJcbiAgfSBlbHNlIGlmIChjID09PSA1OCAmJiAhdGhpcy5hcnJGbGFnKSB7XHJcbiAgICBpZiAodGhpcy5idWZmZXIgPT09IFwiXCIpIHtcclxuICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaG9zdCA9IHBhcnNlSG9zdCh0aGlzLmJ1ZmZlciwgaXNTcGVjaWFsKHRoaXMudXJsKSk7XHJcbiAgICBpZiAoaG9zdCA9PT0gZmFpbHVyZSkge1xyXG4gICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVybC5ob3N0ID0gaG9zdDtcclxuICAgIHRoaXMuYnVmZmVyID0gXCJcIjtcclxuICAgIHRoaXMuc3RhdGUgPSBcInBvcnRcIjtcclxuICAgIGlmICh0aGlzLnN0YXRlT3ZlcnJpZGUgPT09IFwiaG9zdG5hbWVcIikge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfSBlbHNlIGlmIChpc05hTihjKSB8fCBjID09PSA0NyB8fCBjID09PSA2MyB8fCBjID09PSAzNSB8fFxyXG4gICAgICAgICAgICAgKGlzU3BlY2lhbCh0aGlzLnVybCkgJiYgYyA9PT0gOTIpKSB7XHJcbiAgICAtLXRoaXMucG9pbnRlcjtcclxuICAgIGlmIChpc1NwZWNpYWwodGhpcy51cmwpICYmIHRoaXMuYnVmZmVyID09PSBcIlwiKSB7XHJcbiAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnN0YXRlT3ZlcnJpZGUgJiYgdGhpcy5idWZmZXIgPT09IFwiXCIgJiZcclxuICAgICAgICAgICAgICAgKGluY2x1ZGVzQ3JlZGVudGlhbHModGhpcy51cmwpIHx8IHRoaXMudXJsLnBvcnQgIT09IG51bGwpKSB7XHJcbiAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBob3N0ID0gcGFyc2VIb3N0KHRoaXMuYnVmZmVyLCBpc1NwZWNpYWwodGhpcy51cmwpKTtcclxuICAgIGlmIChob3N0ID09PSBmYWlsdXJlKSB7XHJcbiAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudXJsLmhvc3QgPSBob3N0O1xyXG4gICAgdGhpcy5idWZmZXIgPSBcIlwiO1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwicGF0aCBzdGFydFwiO1xyXG4gICAgaWYgKHRoaXMuc3RhdGVPdmVycmlkZSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfSBlbHNlIHtcclxuICAgIGlmIChjID09PSA5MSkge1xyXG4gICAgICB0aGlzLmFyckZsYWcgPSB0cnVlO1xyXG4gICAgfSBlbHNlIGlmIChjID09PSA5Mykge1xyXG4gICAgICB0aGlzLmFyckZsYWcgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHRoaXMuYnVmZmVyICs9IGNTdHI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBwb3J0XCJdID0gZnVuY3Rpb24gcGFyc2VQb3J0KGMsIGNTdHIpIHtcclxuICBpZiAoaXNBU0NJSURpZ2l0KGMpKSB7XHJcbiAgICB0aGlzLmJ1ZmZlciArPSBjU3RyO1xyXG4gIH0gZWxzZSBpZiAoaXNOYU4oYykgfHwgYyA9PT0gNDcgfHwgYyA9PT0gNjMgfHwgYyA9PT0gMzUgfHxcclxuICAgICAgICAgICAgIChpc1NwZWNpYWwodGhpcy51cmwpICYmIGMgPT09IDkyKSB8fFxyXG4gICAgICAgICAgICAgdGhpcy5zdGF0ZU92ZXJyaWRlKSB7XHJcbiAgICBpZiAodGhpcy5idWZmZXIgIT09IFwiXCIpIHtcclxuICAgICAgY29uc3QgcG9ydCA9IHBhcnNlSW50KHRoaXMuYnVmZmVyKTtcclxuICAgICAgaWYgKHBvcnQgPiBNYXRoLnBvdygyLCAxNikgLSAxKSB7XHJcbiAgICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnVybC5wb3J0ID0gcG9ydCA9PT0gZGVmYXVsdFBvcnQodGhpcy51cmwuc2NoZW1lKSA/IG51bGwgOiBwb3J0O1xyXG4gICAgICB0aGlzLmJ1ZmZlciA9IFwiXCI7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zdGF0ZU92ZXJyaWRlKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHRoaXMuc3RhdGUgPSBcInBhdGggc3RhcnRcIjtcclxuICAgIC0tdGhpcy5wb2ludGVyO1xyXG4gIH0gZWxzZSB7XHJcbiAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcbmNvbnN0IGZpbGVPdGhlcndpc2VDb2RlUG9pbnRzID0gbmV3IFNldChbNDcsIDkyLCA2MywgMzVdKTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBmaWxlXCJdID0gZnVuY3Rpb24gcGFyc2VGaWxlKGMpIHtcclxuICB0aGlzLnVybC5zY2hlbWUgPSBcImZpbGVcIjtcclxuXHJcbiAgaWYgKGMgPT09IDQ3IHx8IGMgPT09IDkyKSB7XHJcbiAgICBpZiAoYyA9PT0gOTIpIHtcclxuICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHRoaXMuc3RhdGUgPSBcImZpbGUgc2xhc2hcIjtcclxuICB9IGVsc2UgaWYgKHRoaXMuYmFzZSAhPT0gbnVsbCAmJiB0aGlzLmJhc2Uuc2NoZW1lID09PSBcImZpbGVcIikge1xyXG4gICAgaWYgKGlzTmFOKGMpKSB7XHJcbiAgICAgIHRoaXMudXJsLmhvc3QgPSB0aGlzLmJhc2UuaG9zdDtcclxuICAgICAgdGhpcy51cmwucGF0aCA9IHRoaXMuYmFzZS5wYXRoLnNsaWNlKCk7XHJcbiAgICAgIHRoaXMudXJsLnF1ZXJ5ID0gdGhpcy5iYXNlLnF1ZXJ5O1xyXG4gICAgfSBlbHNlIGlmIChjID09PSA2Mykge1xyXG4gICAgICB0aGlzLnVybC5ob3N0ID0gdGhpcy5iYXNlLmhvc3Q7XHJcbiAgICAgIHRoaXMudXJsLnBhdGggPSB0aGlzLmJhc2UucGF0aC5zbGljZSgpO1xyXG4gICAgICB0aGlzLnVybC5xdWVyeSA9IFwiXCI7XHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcInF1ZXJ5XCI7XHJcbiAgICB9IGVsc2UgaWYgKGMgPT09IDM1KSB7XHJcbiAgICAgIHRoaXMudXJsLmhvc3QgPSB0aGlzLmJhc2UuaG9zdDtcclxuICAgICAgdGhpcy51cmwucGF0aCA9IHRoaXMuYmFzZS5wYXRoLnNsaWNlKCk7XHJcbiAgICAgIHRoaXMudXJsLnF1ZXJ5ID0gdGhpcy5iYXNlLnF1ZXJ5O1xyXG4gICAgICB0aGlzLnVybC5mcmFnbWVudCA9IFwiXCI7XHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcImZyYWdtZW50XCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5pbnB1dC5sZW5ndGggLSB0aGlzLnBvaW50ZXIgLSAxID09PSAwIHx8IC8vIHJlbWFpbmluZyBjb25zaXN0cyBvZiAwIGNvZGUgcG9pbnRzXHJcbiAgICAgICAgICAhaXNXaW5kb3dzRHJpdmVMZXR0ZXJDb2RlUG9pbnRzKGMsIHRoaXMuaW5wdXRbdGhpcy5wb2ludGVyICsgMV0pIHx8XHJcbiAgICAgICAgICAodGhpcy5pbnB1dC5sZW5ndGggLSB0aGlzLnBvaW50ZXIgLSAxID49IDIgJiYgLy8gcmVtYWluaW5nIGhhcyBhdCBsZWFzdCAyIGNvZGUgcG9pbnRzXHJcbiAgICAgICAgICAgIWZpbGVPdGhlcndpc2VDb2RlUG9pbnRzLmhhcyh0aGlzLmlucHV0W3RoaXMucG9pbnRlciArIDJdKSkpIHtcclxuICAgICAgICB0aGlzLnVybC5ob3N0ID0gdGhpcy5iYXNlLmhvc3Q7XHJcbiAgICAgICAgdGhpcy51cmwucGF0aCA9IHRoaXMuYmFzZS5wYXRoLnNsaWNlKCk7XHJcbiAgICAgICAgc2hvcnRlblBhdGgodGhpcy51cmwpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcInBhdGhcIjtcclxuICAgICAgLS10aGlzLnBvaW50ZXI7XHJcbiAgICB9XHJcbiAgfSBlbHNlIHtcclxuICAgIHRoaXMuc3RhdGUgPSBcInBhdGhcIjtcclxuICAgIC0tdGhpcy5wb2ludGVyO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5VUkxTdGF0ZU1hY2hpbmUucHJvdG90eXBlW1wicGFyc2UgZmlsZSBzbGFzaFwiXSA9IGZ1bmN0aW9uIHBhcnNlRmlsZVNsYXNoKGMpIHtcclxuICBpZiAoYyA9PT0gNDcgfHwgYyA9PT0gOTIpIHtcclxuICAgIGlmIChjID09PSA5Mikge1xyXG4gICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zdGF0ZSA9IFwiZmlsZSBob3N0XCI7XHJcbiAgfSBlbHNlIHtcclxuICAgIGlmICh0aGlzLmJhc2UgIT09IG51bGwgJiYgdGhpcy5iYXNlLnNjaGVtZSA9PT0gXCJmaWxlXCIpIHtcclxuICAgICAgaWYgKGlzTm9ybWFsaXplZFdpbmRvd3NEcml2ZUxldHRlclN0cmluZyh0aGlzLmJhc2UucGF0aFswXSkpIHtcclxuICAgICAgICB0aGlzLnVybC5wYXRoLnB1c2godGhpcy5iYXNlLnBhdGhbMF0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMudXJsLmhvc3QgPSB0aGlzLmJhc2UuaG9zdDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5zdGF0ZSA9IFwicGF0aFwiO1xyXG4gICAgLS10aGlzLnBvaW50ZXI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBmaWxlIGhvc3RcIl0gPSBmdW5jdGlvbiBwYXJzZUZpbGVIb3N0KGMsIGNTdHIpIHtcclxuICBpZiAoaXNOYU4oYykgfHwgYyA9PT0gNDcgfHwgYyA9PT0gOTIgfHwgYyA9PT0gNjMgfHwgYyA9PT0gMzUpIHtcclxuICAgIC0tdGhpcy5wb2ludGVyO1xyXG4gICAgaWYgKCF0aGlzLnN0YXRlT3ZlcnJpZGUgJiYgaXNXaW5kb3dzRHJpdmVMZXR0ZXJTdHJpbmcodGhpcy5idWZmZXIpKSB7XHJcbiAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcInBhdGhcIjtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5idWZmZXIgPT09IFwiXCIpIHtcclxuICAgICAgdGhpcy51cmwuaG9zdCA9IFwiXCI7XHJcbiAgICAgIGlmICh0aGlzLnN0YXRlT3ZlcnJpZGUpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zdGF0ZSA9IFwicGF0aCBzdGFydFwiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IGhvc3QgPSBwYXJzZUhvc3QodGhpcy5idWZmZXIsIGlzU3BlY2lhbCh0aGlzLnVybCkpO1xyXG4gICAgICBpZiAoaG9zdCA9PT0gZmFpbHVyZSkge1xyXG4gICAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChob3N0ID09PSBcImxvY2FsaG9zdFwiKSB7XHJcbiAgICAgICAgaG9zdCA9IFwiXCI7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy51cmwuaG9zdCA9IGhvc3Q7XHJcblxyXG4gICAgICBpZiAodGhpcy5zdGF0ZU92ZXJyaWRlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmJ1ZmZlciA9IFwiXCI7XHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcInBhdGggc3RhcnRcIjtcclxuICAgIH1cclxuICB9IGVsc2Uge1xyXG4gICAgdGhpcy5idWZmZXIgKz0gY1N0cjtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIHBhdGggc3RhcnRcIl0gPSBmdW5jdGlvbiBwYXJzZVBhdGhTdGFydChjKSB7XHJcbiAgaWYgKGlzU3BlY2lhbCh0aGlzLnVybCkpIHtcclxuICAgIGlmIChjID09PSA5Mikge1xyXG4gICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zdGF0ZSA9IFwicGF0aFwiO1xyXG5cclxuICAgIGlmIChjICE9PSA0NyAmJiBjICE9PSA5Mikge1xyXG4gICAgICAtLXRoaXMucG9pbnRlcjtcclxuICAgIH1cclxuICB9IGVsc2UgaWYgKCF0aGlzLnN0YXRlT3ZlcnJpZGUgJiYgYyA9PT0gNjMpIHtcclxuICAgIHRoaXMudXJsLnF1ZXJ5ID0gXCJcIjtcclxuICAgIHRoaXMuc3RhdGUgPSBcInF1ZXJ5XCI7XHJcbiAgfSBlbHNlIGlmICghdGhpcy5zdGF0ZU92ZXJyaWRlICYmIGMgPT09IDM1KSB7XHJcbiAgICB0aGlzLnVybC5mcmFnbWVudCA9IFwiXCI7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJmcmFnbWVudFwiO1xyXG4gIH0gZWxzZSBpZiAoYyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJwYXRoXCI7XHJcbiAgICBpZiAoYyAhPT0gNDcpIHtcclxuICAgICAgLS10aGlzLnBvaW50ZXI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBwYXRoXCJdID0gZnVuY3Rpb24gcGFyc2VQYXRoKGMpIHtcclxuICBpZiAoaXNOYU4oYykgfHwgYyA9PT0gNDcgfHwgKGlzU3BlY2lhbCh0aGlzLnVybCkgJiYgYyA9PT0gOTIpIHx8XHJcbiAgICAgICghdGhpcy5zdGF0ZU92ZXJyaWRlICYmIChjID09PSA2MyB8fCBjID09PSAzNSkpKSB7XHJcbiAgICBpZiAoaXNTcGVjaWFsKHRoaXMudXJsKSAmJiBjID09PSA5Mikge1xyXG4gICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpc0RvdWJsZURvdCh0aGlzLmJ1ZmZlcikpIHtcclxuICAgICAgc2hvcnRlblBhdGgodGhpcy51cmwpO1xyXG4gICAgICBpZiAoYyAhPT0gNDcgJiYgIShpc1NwZWNpYWwodGhpcy51cmwpICYmIGMgPT09IDkyKSkge1xyXG4gICAgICAgIHRoaXMudXJsLnBhdGgucHVzaChcIlwiKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChpc1NpbmdsZURvdCh0aGlzLmJ1ZmZlcikgJiYgYyAhPT0gNDcgJiZcclxuICAgICAgICAgICAgICAgIShpc1NwZWNpYWwodGhpcy51cmwpICYmIGMgPT09IDkyKSkge1xyXG4gICAgICB0aGlzLnVybC5wYXRoLnB1c2goXCJcIik7XHJcbiAgICB9IGVsc2UgaWYgKCFpc1NpbmdsZURvdCh0aGlzLmJ1ZmZlcikpIHtcclxuICAgICAgaWYgKHRoaXMudXJsLnNjaGVtZSA9PT0gXCJmaWxlXCIgJiYgdGhpcy51cmwucGF0aC5sZW5ndGggPT09IDAgJiYgaXNXaW5kb3dzRHJpdmVMZXR0ZXJTdHJpbmcodGhpcy5idWZmZXIpKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudXJsLmhvc3QgIT09IFwiXCIgJiYgdGhpcy51cmwuaG9zdCAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMudXJsLmhvc3QgPSBcIlwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmJ1ZmZlciA9IHRoaXMuYnVmZmVyWzBdICsgXCI6XCI7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy51cmwucGF0aC5wdXNoKHRoaXMuYnVmZmVyKTtcclxuICAgIH1cclxuICAgIHRoaXMuYnVmZmVyID0gXCJcIjtcclxuICAgIGlmICh0aGlzLnVybC5zY2hlbWUgPT09IFwiZmlsZVwiICYmIChjID09PSB1bmRlZmluZWQgfHwgYyA9PT0gNjMgfHwgYyA9PT0gMzUpKSB7XHJcbiAgICAgIHdoaWxlICh0aGlzLnVybC5wYXRoLmxlbmd0aCA+IDEgJiYgdGhpcy51cmwucGF0aFswXSA9PT0gXCJcIikge1xyXG4gICAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICAgICAgdGhpcy51cmwucGF0aC5zaGlmdCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoYyA9PT0gNjMpIHtcclxuICAgICAgdGhpcy51cmwucXVlcnkgPSBcIlwiO1xyXG4gICAgICB0aGlzLnN0YXRlID0gXCJxdWVyeVwiO1xyXG4gICAgfVxyXG4gICAgaWYgKGMgPT09IDM1KSB7XHJcbiAgICAgIHRoaXMudXJsLmZyYWdtZW50ID0gXCJcIjtcclxuICAgICAgdGhpcy5zdGF0ZSA9IFwiZnJhZ21lbnRcIjtcclxuICAgIH1cclxuICB9IGVsc2Uge1xyXG4gICAgLy8gVE9ETzogSWYgYyBpcyBub3QgYSBVUkwgY29kZSBwb2ludCBhbmQgbm90IFwiJVwiLCBwYXJzZSBlcnJvci5cclxuXHJcbiAgICBpZiAoYyA9PT0gMzcgJiZcclxuICAgICAgKCFpc0FTQ0lJSGV4KHRoaXMuaW5wdXRbdGhpcy5wb2ludGVyICsgMV0pIHx8XHJcbiAgICAgICAgIWlzQVNDSUlIZXgodGhpcy5pbnB1dFt0aGlzLnBvaW50ZXIgKyAyXSkpKSB7XHJcbiAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5idWZmZXIgKz0gcGVyY2VudEVuY29kZUNoYXIoYywgaXNQYXRoUGVyY2VudEVuY29kZSk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBjYW5ub3QtYmUtYS1iYXNlLVVSTCBwYXRoXCJdID0gZnVuY3Rpb24gcGFyc2VDYW5ub3RCZUFCYXNlVVJMUGF0aChjKSB7XHJcbiAgaWYgKGMgPT09IDYzKSB7XHJcbiAgICB0aGlzLnVybC5xdWVyeSA9IFwiXCI7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJxdWVyeVwiO1xyXG4gIH0gZWxzZSBpZiAoYyA9PT0gMzUpIHtcclxuICAgIHRoaXMudXJsLmZyYWdtZW50ID0gXCJcIjtcclxuICAgIHRoaXMuc3RhdGUgPSBcImZyYWdtZW50XCI7XHJcbiAgfSBlbHNlIHtcclxuICAgIC8vIFRPRE86IEFkZDogbm90IGEgVVJMIGNvZGUgcG9pbnRcclxuICAgIGlmICghaXNOYU4oYykgJiYgYyAhPT0gMzcpIHtcclxuICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoYyA9PT0gMzcgJiZcclxuICAgICAgICAoIWlzQVNDSUlIZXgodGhpcy5pbnB1dFt0aGlzLnBvaW50ZXIgKyAxXSkgfHxcclxuICAgICAgICAgIWlzQVNDSUlIZXgodGhpcy5pbnB1dFt0aGlzLnBvaW50ZXIgKyAyXSkpKSB7XHJcbiAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFpc05hTihjKSkge1xyXG4gICAgICB0aGlzLnVybC5wYXRoWzBdID0gdGhpcy51cmwucGF0aFswXSArIHBlcmNlbnRFbmNvZGVDaGFyKGMsIGlzQzBDb250cm9sUGVyY2VudEVuY29kZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBxdWVyeVwiXSA9IGZ1bmN0aW9uIHBhcnNlUXVlcnkoYywgY1N0cikge1xyXG4gIGlmIChpc05hTihjKSB8fCAoIXRoaXMuc3RhdGVPdmVycmlkZSAmJiBjID09PSAzNSkpIHtcclxuICAgIGlmICghaXNTcGVjaWFsKHRoaXMudXJsKSB8fCB0aGlzLnVybC5zY2hlbWUgPT09IFwid3NcIiB8fCB0aGlzLnVybC5zY2hlbWUgPT09IFwid3NzXCIpIHtcclxuICAgICAgdGhpcy5lbmNvZGluZ092ZXJyaWRlID0gXCJ1dGYtOFwiO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBCdWZmZXIodGhpcy5idWZmZXIpOyAvLyBUT0RPOiBVc2UgZW5jb2Rpbmcgb3ZlcnJpZGUgaW5zdGVhZFxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWZmZXIubGVuZ3RoOyArK2kpIHtcclxuICAgICAgaWYgKGJ1ZmZlcltpXSA8IDB4MjEgfHwgYnVmZmVyW2ldID4gMHg3RSB8fCBidWZmZXJbaV0gPT09IDB4MjIgfHwgYnVmZmVyW2ldID09PSAweDIzIHx8XHJcbiAgICAgICAgICBidWZmZXJbaV0gPT09IDB4M0MgfHwgYnVmZmVyW2ldID09PSAweDNFKSB7XHJcbiAgICAgICAgdGhpcy51cmwucXVlcnkgKz0gcGVyY2VudEVuY29kZShidWZmZXJbaV0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMudXJsLnF1ZXJ5ICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KGJ1ZmZlcltpXSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmJ1ZmZlciA9IFwiXCI7XHJcbiAgICBpZiAoYyA9PT0gMzUpIHtcclxuICAgICAgdGhpcy51cmwuZnJhZ21lbnQgPSBcIlwiO1xyXG4gICAgICB0aGlzLnN0YXRlID0gXCJmcmFnbWVudFwiO1xyXG4gICAgfVxyXG4gIH0gZWxzZSB7XHJcbiAgICAvLyBUT0RPOiBJZiBjIGlzIG5vdCBhIFVSTCBjb2RlIHBvaW50IGFuZCBub3QgXCIlXCIsIHBhcnNlIGVycm9yLlxyXG4gICAgaWYgKGMgPT09IDM3ICYmXHJcbiAgICAgICghaXNBU0NJSUhleCh0aGlzLmlucHV0W3RoaXMucG9pbnRlciArIDFdKSB8fFxyXG4gICAgICAgICFpc0FTQ0lJSGV4KHRoaXMuaW5wdXRbdGhpcy5wb2ludGVyICsgMl0pKSkge1xyXG4gICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYnVmZmVyICs9IGNTdHI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBmcmFnbWVudFwiXSA9IGZ1bmN0aW9uIHBhcnNlRnJhZ21lbnQoYykge1xyXG4gIGlmIChpc05hTihjKSkgeyAvLyBkbyBub3RoaW5nXHJcbiAgfSBlbHNlIGlmIChjID09PSAweDApIHtcclxuICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgfSBlbHNlIHtcclxuICAgIC8vIFRPRE86IElmIGMgaXMgbm90IGEgVVJMIGNvZGUgcG9pbnQgYW5kIG5vdCBcIiVcIiwgcGFyc2UgZXJyb3IuXHJcbiAgICBpZiAoYyA9PT0gMzcgJiZcclxuICAgICAgKCFpc0FTQ0lJSGV4KHRoaXMuaW5wdXRbdGhpcy5wb2ludGVyICsgMV0pIHx8XHJcbiAgICAgICAgIWlzQVNDSUlIZXgodGhpcy5pbnB1dFt0aGlzLnBvaW50ZXIgKyAyXSkpKSB7XHJcbiAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy51cmwuZnJhZ21lbnQgKz0gcGVyY2VudEVuY29kZUNoYXIoYywgaXNDMENvbnRyb2xQZXJjZW50RW5jb2RlKTtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuZnVuY3Rpb24gc2VyaWFsaXplVVJMKHVybCwgZXhjbHVkZUZyYWdtZW50KSB7XHJcbiAgbGV0IG91dHB1dCA9IHVybC5zY2hlbWUgKyBcIjpcIjtcclxuICBpZiAodXJsLmhvc3QgIT09IG51bGwpIHtcclxuICAgIG91dHB1dCArPSBcIi8vXCI7XHJcblxyXG4gICAgaWYgKHVybC51c2VybmFtZSAhPT0gXCJcIiB8fCB1cmwucGFzc3dvcmQgIT09IFwiXCIpIHtcclxuICAgICAgb3V0cHV0ICs9IHVybC51c2VybmFtZTtcclxuICAgICAgaWYgKHVybC5wYXNzd29yZCAhPT0gXCJcIikge1xyXG4gICAgICAgIG91dHB1dCArPSBcIjpcIiArIHVybC5wYXNzd29yZDtcclxuICAgICAgfVxyXG4gICAgICBvdXRwdXQgKz0gXCJAXCI7XHJcbiAgICB9XHJcblxyXG4gICAgb3V0cHV0ICs9IHNlcmlhbGl6ZUhvc3QodXJsLmhvc3QpO1xyXG5cclxuICAgIGlmICh1cmwucG9ydCAhPT0gbnVsbCkge1xyXG4gICAgICBvdXRwdXQgKz0gXCI6XCIgKyB1cmwucG9ydDtcclxuICAgIH1cclxuICB9IGVsc2UgaWYgKHVybC5ob3N0ID09PSBudWxsICYmIHVybC5zY2hlbWUgPT09IFwiZmlsZVwiKSB7XHJcbiAgICBvdXRwdXQgKz0gXCIvL1wiO1xyXG4gIH1cclxuXHJcbiAgaWYgKHVybC5jYW5ub3RCZUFCYXNlVVJMKSB7XHJcbiAgICBvdXRwdXQgKz0gdXJsLnBhdGhbMF07XHJcbiAgfSBlbHNlIHtcclxuICAgIGZvciAoY29uc3Qgc3RyaW5nIG9mIHVybC5wYXRoKSB7XHJcbiAgICAgIG91dHB1dCArPSBcIi9cIiArIHN0cmluZztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlmICh1cmwucXVlcnkgIT09IG51bGwpIHtcclxuICAgIG91dHB1dCArPSBcIj9cIiArIHVybC5xdWVyeTtcclxuICB9XHJcblxyXG4gIGlmICghZXhjbHVkZUZyYWdtZW50ICYmIHVybC5mcmFnbWVudCAhPT0gbnVsbCkge1xyXG4gICAgb3V0cHV0ICs9IFwiI1wiICsgdXJsLmZyYWdtZW50O1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIG91dHB1dDtcclxufVxyXG5cclxuZnVuY3Rpb24gc2VyaWFsaXplT3JpZ2luKHR1cGxlKSB7XHJcbiAgbGV0IHJlc3VsdCA9IHR1cGxlLnNjaGVtZSArIFwiOi8vXCI7XHJcbiAgcmVzdWx0ICs9IHNlcmlhbGl6ZUhvc3QodHVwbGUuaG9zdCk7XHJcblxyXG4gIGlmICh0dXBsZS5wb3J0ICE9PSBudWxsKSB7XHJcbiAgICByZXN1bHQgKz0gXCI6XCIgKyB0dXBsZS5wb3J0O1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMuc2VyaWFsaXplVVJMID0gc2VyaWFsaXplVVJMO1xyXG5cclxubW9kdWxlLmV4cG9ydHMuc2VyaWFsaXplVVJMT3JpZ2luID0gZnVuY3Rpb24gKHVybCkge1xyXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC11cmwtb3JpZ2luXHJcbiAgc3dpdGNoICh1cmwuc2NoZW1lKSB7XHJcbiAgICBjYXNlIFwiYmxvYlwiOlxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHJldHVybiBtb2R1bGUuZXhwb3J0cy5zZXJpYWxpemVVUkxPcmlnaW4obW9kdWxlLmV4cG9ydHMucGFyc2VVUkwodXJsLnBhdGhbMF0pKTtcclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIC8vIHNlcmlhbGl6aW5nIGFuIG9wYXF1ZSBvcmlnaW4gcmV0dXJucyBcIm51bGxcIlxyXG4gICAgICAgIHJldHVybiBcIm51bGxcIjtcclxuICAgICAgfVxyXG4gICAgY2FzZSBcImZ0cFwiOlxyXG4gICAgY2FzZSBcImdvcGhlclwiOlxyXG4gICAgY2FzZSBcImh0dHBcIjpcclxuICAgIGNhc2UgXCJodHRwc1wiOlxyXG4gICAgY2FzZSBcIndzXCI6XHJcbiAgICBjYXNlIFwid3NzXCI6XHJcbiAgICAgIHJldHVybiBzZXJpYWxpemVPcmlnaW4oe1xyXG4gICAgICAgIHNjaGVtZTogdXJsLnNjaGVtZSxcclxuICAgICAgICBob3N0OiB1cmwuaG9zdCxcclxuICAgICAgICBwb3J0OiB1cmwucG9ydFxyXG4gICAgICB9KTtcclxuICAgIGNhc2UgXCJmaWxlXCI6XHJcbiAgICAgIC8vIHNwZWMgc2F5cyBcImV4ZXJjaXNlIHRvIHRoZSByZWFkZXJcIiwgY2hyb21lIHNheXMgXCJmaWxlOi8vXCJcclxuICAgICAgcmV0dXJuIFwiZmlsZTovL1wiO1xyXG4gICAgZGVmYXVsdDpcclxuICAgICAgLy8gc2VyaWFsaXppbmcgYW4gb3BhcXVlIG9yaWdpbiByZXR1cm5zIFwibnVsbFwiXHJcbiAgICAgIHJldHVybiBcIm51bGxcIjtcclxuICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5iYXNpY1VSTFBhcnNlID0gZnVuY3Rpb24gKGlucHV0LCBvcHRpb25zKSB7XHJcbiAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgb3B0aW9ucyA9IHt9O1xyXG4gIH1cclxuXHJcbiAgY29uc3QgdXNtID0gbmV3IFVSTFN0YXRlTWFjaGluZShpbnB1dCwgb3B0aW9ucy5iYXNlVVJMLCBvcHRpb25zLmVuY29kaW5nT3ZlcnJpZGUsIG9wdGlvbnMudXJsLCBvcHRpb25zLnN0YXRlT3ZlcnJpZGUpO1xyXG4gIGlmICh1c20uZmFpbHVyZSkge1xyXG4gICAgcmV0dXJuIFwiZmFpbHVyZVwiO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHVzbS51cmw7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5zZXRUaGVVc2VybmFtZSA9IGZ1bmN0aW9uICh1cmwsIHVzZXJuYW1lKSB7XHJcbiAgdXJsLnVzZXJuYW1lID0gXCJcIjtcclxuICBjb25zdCBkZWNvZGVkID0gcHVueWNvZGUudWNzMi5kZWNvZGUodXNlcm5hbWUpO1xyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGVjb2RlZC5sZW5ndGg7ICsraSkge1xyXG4gICAgdXJsLnVzZXJuYW1lICs9IHBlcmNlbnRFbmNvZGVDaGFyKGRlY29kZWRbaV0sIGlzVXNlcmluZm9QZXJjZW50RW5jb2RlKTtcclxuICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5zZXRUaGVQYXNzd29yZCA9IGZ1bmN0aW9uICh1cmwsIHBhc3N3b3JkKSB7XHJcbiAgdXJsLnBhc3N3b3JkID0gXCJcIjtcclxuICBjb25zdCBkZWNvZGVkID0gcHVueWNvZGUudWNzMi5kZWNvZGUocGFzc3dvcmQpO1xyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGVjb2RlZC5sZW5ndGg7ICsraSkge1xyXG4gICAgdXJsLnBhc3N3b3JkICs9IHBlcmNlbnRFbmNvZGVDaGFyKGRlY29kZWRbaV0sIGlzVXNlcmluZm9QZXJjZW50RW5jb2RlKTtcclxuICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5zZXJpYWxpemVIb3N0ID0gc2VyaWFsaXplSG9zdDtcclxuXHJcbm1vZHVsZS5leHBvcnRzLmNhbm5vdEhhdmVBVXNlcm5hbWVQYXNzd29yZFBvcnQgPSBjYW5ub3RIYXZlQVVzZXJuYW1lUGFzc3dvcmRQb3J0O1xyXG5cclxubW9kdWxlLmV4cG9ydHMuc2VyaWFsaXplSW50ZWdlciA9IGZ1bmN0aW9uIChpbnRlZ2VyKSB7XHJcbiAgcmV0dXJuIFN0cmluZyhpbnRlZ2VyKTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzLnBhcnNlVVJMID0gZnVuY3Rpb24gKGlucHV0LCBvcHRpb25zKSB7XHJcbiAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgb3B0aW9ucyA9IHt9O1xyXG4gIH1cclxuXHJcbiAgLy8gV2UgZG9uJ3QgaGFuZGxlIGJsb2JzLCBzbyB0aGlzIGp1c3QgZGVsZWdhdGVzOlxyXG4gIHJldHVybiBtb2R1bGUuZXhwb3J0cy5iYXNpY1VSTFBhcnNlKGlucHV0LCB7IGJhc2VVUkw6IG9wdGlvbnMuYmFzZVVSTCwgZW5jb2RpbmdPdmVycmlkZTogb3B0aW9ucy5lbmNvZGluZ092ZXJyaWRlIH0pO1xyXG59O1xyXG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuY29uc3QgdXNtID0gcmVxdWlyZShcIi4vdXJsLXN0YXRlLW1hY2hpbmVcIik7XG5cbmV4cG9ydHMuaW1wbGVtZW50YXRpb24gPSBjbGFzcyBVUkxJbXBsIHtcbiAgY29uc3RydWN0b3IoY29uc3RydWN0b3JBcmdzKSB7XG4gICAgY29uc3QgdXJsID0gY29uc3RydWN0b3JBcmdzWzBdO1xuICAgIGNvbnN0IGJhc2UgPSBjb25zdHJ1Y3RvckFyZ3NbMV07XG5cbiAgICBsZXQgcGFyc2VkQmFzZSA9IG51bGw7XG4gICAgaWYgKGJhc2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFyc2VkQmFzZSA9IHVzbS5iYXNpY1VSTFBhcnNlKGJhc2UpO1xuICAgICAgaWYgKHBhcnNlZEJhc2UgPT09IFwiZmFpbHVyZVwiKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGJhc2UgVVJMXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHBhcnNlZFVSTCA9IHVzbS5iYXNpY1VSTFBhcnNlKHVybCwgeyBiYXNlVVJMOiBwYXJzZWRCYXNlIH0pO1xuICAgIGlmIChwYXJzZWRVUkwgPT09IFwiZmFpbHVyZVwiKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBVUkxcIik7XG4gICAgfVxuXG4gICAgdGhpcy5fdXJsID0gcGFyc2VkVVJMO1xuXG4gICAgLy8gVE9ETzogcXVlcnkgc3R1ZmZcbiAgfVxuXG4gIGdldCBocmVmKCkge1xuICAgIHJldHVybiB1c20uc2VyaWFsaXplVVJMKHRoaXMuX3VybCk7XG4gIH1cblxuICBzZXQgaHJlZih2KSB7XG4gICAgY29uc3QgcGFyc2VkVVJMID0gdXNtLmJhc2ljVVJMUGFyc2Uodik7XG4gICAgaWYgKHBhcnNlZFVSTCA9PT0gXCJmYWlsdXJlXCIpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIFVSTFwiKTtcbiAgICB9XG5cbiAgICB0aGlzLl91cmwgPSBwYXJzZWRVUkw7XG4gIH1cblxuICBnZXQgb3JpZ2luKCkge1xuICAgIHJldHVybiB1c20uc2VyaWFsaXplVVJMT3JpZ2luKHRoaXMuX3VybCk7XG4gIH1cblxuICBnZXQgcHJvdG9jb2woKSB7XG4gICAgcmV0dXJuIHRoaXMuX3VybC5zY2hlbWUgKyBcIjpcIjtcbiAgfVxuXG4gIHNldCBwcm90b2NvbCh2KSB7XG4gICAgdXNtLmJhc2ljVVJMUGFyc2UodiArIFwiOlwiLCB7IHVybDogdGhpcy5fdXJsLCBzdGF0ZU92ZXJyaWRlOiBcInNjaGVtZSBzdGFydFwiIH0pO1xuICB9XG5cbiAgZ2V0IHVzZXJuYW1lKCkge1xuICAgIHJldHVybiB0aGlzLl91cmwudXNlcm5hbWU7XG4gIH1cblxuICBzZXQgdXNlcm5hbWUodikge1xuICAgIGlmICh1c20uY2Fubm90SGF2ZUFVc2VybmFtZVBhc3N3b3JkUG9ydCh0aGlzLl91cmwpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdXNtLnNldFRoZVVzZXJuYW1lKHRoaXMuX3VybCwgdik7XG4gIH1cblxuICBnZXQgcGFzc3dvcmQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3VybC5wYXNzd29yZDtcbiAgfVxuXG4gIHNldCBwYXNzd29yZCh2KSB7XG4gICAgaWYgKHVzbS5jYW5ub3RIYXZlQVVzZXJuYW1lUGFzc3dvcmRQb3J0KHRoaXMuX3VybCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB1c20uc2V0VGhlUGFzc3dvcmQodGhpcy5fdXJsLCB2KTtcbiAgfVxuXG4gIGdldCBob3N0KCkge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuX3VybDtcblxuICAgIGlmICh1cmwuaG9zdCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgaWYgKHVybC5wb3J0ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gdXNtLnNlcmlhbGl6ZUhvc3QodXJsLmhvc3QpO1xuICAgIH1cblxuICAgIHJldHVybiB1c20uc2VyaWFsaXplSG9zdCh1cmwuaG9zdCkgKyBcIjpcIiArIHVzbS5zZXJpYWxpemVJbnRlZ2VyKHVybC5wb3J0KTtcbiAgfVxuXG4gIHNldCBob3N0KHYpIHtcbiAgICBpZiAodGhpcy5fdXJsLmNhbm5vdEJlQUJhc2VVUkwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB1c20uYmFzaWNVUkxQYXJzZSh2LCB7IHVybDogdGhpcy5fdXJsLCBzdGF0ZU92ZXJyaWRlOiBcImhvc3RcIiB9KTtcbiAgfVxuXG4gIGdldCBob3N0bmFtZSgpIHtcbiAgICBpZiAodGhpcy5fdXJsLmhvc3QgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHJldHVybiB1c20uc2VyaWFsaXplSG9zdCh0aGlzLl91cmwuaG9zdCk7XG4gIH1cblxuICBzZXQgaG9zdG5hbWUodikge1xuICAgIGlmICh0aGlzLl91cmwuY2Fubm90QmVBQmFzZVVSTCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHVzbS5iYXNpY1VSTFBhcnNlKHYsIHsgdXJsOiB0aGlzLl91cmwsIHN0YXRlT3ZlcnJpZGU6IFwiaG9zdG5hbWVcIiB9KTtcbiAgfVxuXG4gIGdldCBwb3J0KCkge1xuICAgIGlmICh0aGlzLl91cmwucG9ydCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVzbS5zZXJpYWxpemVJbnRlZ2VyKHRoaXMuX3VybC5wb3J0KTtcbiAgfVxuXG4gIHNldCBwb3J0KHYpIHtcbiAgICBpZiAodXNtLmNhbm5vdEhhdmVBVXNlcm5hbWVQYXNzd29yZFBvcnQodGhpcy5fdXJsKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh2ID09PSBcIlwiKSB7XG4gICAgICB0aGlzLl91cmwucG9ydCA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVzbS5iYXNpY1VSTFBhcnNlKHYsIHsgdXJsOiB0aGlzLl91cmwsIHN0YXRlT3ZlcnJpZGU6IFwicG9ydFwiIH0pO1xuICAgIH1cbiAgfVxuXG4gIGdldCBwYXRobmFtZSgpIHtcbiAgICBpZiAodGhpcy5fdXJsLmNhbm5vdEJlQUJhc2VVUkwpIHtcbiAgICAgIHJldHVybiB0aGlzLl91cmwucGF0aFswXTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fdXJsLnBhdGgubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICByZXR1cm4gXCIvXCIgKyB0aGlzLl91cmwucGF0aC5qb2luKFwiL1wiKTtcbiAgfVxuXG4gIHNldCBwYXRobmFtZSh2KSB7XG4gICAgaWYgKHRoaXMuX3VybC5jYW5ub3RCZUFCYXNlVVJMKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fdXJsLnBhdGggPSBbXTtcbiAgICB1c20uYmFzaWNVUkxQYXJzZSh2LCB7IHVybDogdGhpcy5fdXJsLCBzdGF0ZU92ZXJyaWRlOiBcInBhdGggc3RhcnRcIiB9KTtcbiAgfVxuXG4gIGdldCBzZWFyY2goKSB7XG4gICAgaWYgKHRoaXMuX3VybC5xdWVyeSA9PT0gbnVsbCB8fCB0aGlzLl91cmwucXVlcnkgPT09IFwiXCIpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHJldHVybiBcIj9cIiArIHRoaXMuX3VybC5xdWVyeTtcbiAgfVxuXG4gIHNldCBzZWFyY2godikge1xuICAgIC8vIFRPRE86IHF1ZXJ5IHN0dWZmXG5cbiAgICBjb25zdCB1cmwgPSB0aGlzLl91cmw7XG5cbiAgICBpZiAodiA9PT0gXCJcIikge1xuICAgICAgdXJsLnF1ZXJ5ID0gbnVsbDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpbnB1dCA9IHZbMF0gPT09IFwiP1wiID8gdi5zdWJzdHJpbmcoMSkgOiB2O1xuICAgIHVybC5xdWVyeSA9IFwiXCI7XG4gICAgdXNtLmJhc2ljVVJMUGFyc2UoaW5wdXQsIHsgdXJsLCBzdGF0ZU92ZXJyaWRlOiBcInF1ZXJ5XCIgfSk7XG4gIH1cblxuICBnZXQgaGFzaCgpIHtcbiAgICBpZiAodGhpcy5fdXJsLmZyYWdtZW50ID09PSBudWxsIHx8IHRoaXMuX3VybC5mcmFnbWVudCA9PT0gXCJcIikge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIFwiI1wiICsgdGhpcy5fdXJsLmZyYWdtZW50O1xuICB9XG5cbiAgc2V0IGhhc2godikge1xuICAgIGlmICh2ID09PSBcIlwiKSB7XG4gICAgICB0aGlzLl91cmwuZnJhZ21lbnQgPSBudWxsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGlucHV0ID0gdlswXSA9PT0gXCIjXCIgPyB2LnN1YnN0cmluZygxKSA6IHY7XG4gICAgdGhpcy5fdXJsLmZyYWdtZW50ID0gXCJcIjtcbiAgICB1c20uYmFzaWNVUkxQYXJzZShpbnB1dCwgeyB1cmw6IHRoaXMuX3VybCwgc3RhdGVPdmVycmlkZTogXCJmcmFnbWVudFwiIH0pO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB0aGlzLmhyZWY7XG4gIH1cbn07XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLy9VUkwtaW1wbC5qc1wiKTtcblxuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIFVSTCh1cmwpIHtcbiAgaWYgKCF0aGlzIHx8IHRoaXNbaW1wbF0gfHwgISh0aGlzIGluc3RhbmNlb2YgVVJMKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gY29uc3RydWN0ICdVUkwnOiBQbGVhc2UgdXNlIHRoZSAnbmV3JyBvcGVyYXRvciwgdGhpcyBET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi5cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ1VSTCc6IDEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAyOyArK2kpIHtcbiAgICBhcmdzW2ldID0gYXJndW1lbnRzW2ldO1xuICB9XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcIlVTVlN0cmluZ1wiXShhcmdzWzBdKTtcbiAgaWYgKGFyZ3NbMV0gIT09IHVuZGVmaW5lZCkge1xuICBhcmdzWzFdID0gY29udmVyc2lvbnNbXCJVU1ZTdHJpbmdcIl0oYXJnc1sxXSk7XG4gIH1cblxuICBtb2R1bGUuZXhwb3J0cy5zZXR1cCh0aGlzLCBhcmdzKTtcbn1cblxuVVJMLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04oKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAwOyArK2kpIHtcbiAgICBhcmdzW2ldID0gYXJndW1lbnRzW2ldO1xuICB9XG4gIHJldHVybiB0aGlzW2ltcGxdLnRvSlNPTi5hcHBseSh0aGlzW2ltcGxdLCBhcmdzKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVVJMLnByb3RvdHlwZSwgXCJocmVmXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmhyZWY7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiVVNWU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0uaHJlZiA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblVSTC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIHJldHVybiB0aGlzLmhyZWY7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVVJMLnByb3RvdHlwZSwgXCJvcmlnaW5cIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ub3JpZ2luO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVVJMLnByb3RvdHlwZSwgXCJwcm90b2NvbFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5wcm90b2NvbDtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJVU1ZTdHJpbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS5wcm90b2NvbCA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShVUkwucHJvdG90eXBlLCBcInVzZXJuYW1lXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnVzZXJuYW1lO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIlVTVlN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLnVzZXJuYW1lID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFVSTC5wcm90b3R5cGUsIFwicGFzc3dvcmRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ucGFzc3dvcmQ7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiVVNWU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0ucGFzc3dvcmQgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVVJMLnByb3RvdHlwZSwgXCJob3N0XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmhvc3Q7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiVVNWU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0uaG9zdCA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShVUkwucHJvdG90eXBlLCBcImhvc3RuYW1lXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmhvc3RuYW1lO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIlVTVlN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLmhvc3RuYW1lID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFVSTC5wcm90b3R5cGUsIFwicG9ydFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5wb3J0O1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIlVTVlN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLnBvcnQgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVVJMLnByb3RvdHlwZSwgXCJwYXRobmFtZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5wYXRobmFtZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJVU1ZTdHJpbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS5wYXRobmFtZSA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShVUkwucHJvdG90eXBlLCBcInNlYXJjaFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5zZWFyY2g7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiVVNWU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0uc2VhcmNoID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFVSTC5wcm90b3R5cGUsIFwiaGFzaFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5oYXNoO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIlVTVlN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLmhhc2ggPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpcyhvYmopIHtcbiAgICByZXR1cm4gISFvYmogJiYgb2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbjtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShVUkwucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IFVSTCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IFVSTDogVVJMIH0sXG4gICAgV29ya2VyOiB7IFVSTDogVVJMIH1cbiAgfVxufTtcblxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5VUkwgPSByZXF1aXJlKFwiLi9VUkxcIikuaW50ZXJmYWNlO1xuZXhwb3J0cy5zZXJpYWxpemVVUkwgPSByZXF1aXJlKFwiLi91cmwtc3RhdGUtbWFjaGluZVwiKS5zZXJpYWxpemVVUkw7XG5leHBvcnRzLnNlcmlhbGl6ZVVSTE9yaWdpbiA9IHJlcXVpcmUoXCIuL3VybC1zdGF0ZS1tYWNoaW5lXCIpLnNlcmlhbGl6ZVVSTE9yaWdpbjtcbmV4cG9ydHMuYmFzaWNVUkxQYXJzZSA9IHJlcXVpcmUoXCIuL3VybC1zdGF0ZS1tYWNoaW5lXCIpLmJhc2ljVVJMUGFyc2U7XG5leHBvcnRzLnNldFRoZVVzZXJuYW1lID0gcmVxdWlyZShcIi4vdXJsLXN0YXRlLW1hY2hpbmVcIikuc2V0VGhlVXNlcm5hbWU7XG5leHBvcnRzLnNldFRoZVBhc3N3b3JkID0gcmVxdWlyZShcIi4vdXJsLXN0YXRlLW1hY2hpbmVcIikuc2V0VGhlUGFzc3dvcmQ7XG5leHBvcnRzLnNlcmlhbGl6ZUhvc3QgPSByZXF1aXJlKFwiLi91cmwtc3RhdGUtbWFjaGluZVwiKS5zZXJpYWxpemVIb3N0O1xuZXhwb3J0cy5zZXJpYWxpemVJbnRlZ2VyID0gcmVxdWlyZShcIi4vdXJsLXN0YXRlLW1hY2hpbmVcIikuc2VyaWFsaXplSW50ZWdlcjtcbmV4cG9ydHMucGFyc2VVUkwgPSByZXF1aXJlKFwiLi91cmwtc3RhdGUtbWFjaGluZVwiKS5wYXJzZVVSTDtcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5mdW5jdGlvbiBfaW50ZXJvcERlZmF1bHQgKGV4KSB7IHJldHVybiAoZXggJiYgKHR5cGVvZiBleCA9PT0gJ29iamVjdCcpICYmICdkZWZhdWx0JyBpbiBleCkgPyBleFsnZGVmYXVsdCddIDogZXg7IH1cblxudmFyIFN0cmVhbSA9IF9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKCdzdHJlYW0nKSk7XG52YXIgaHR0cCA9IF9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKCdodHRwJykpO1xudmFyIFVybCA9IF9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKCd1cmwnKSk7XG52YXIgd2hhdHdnVXJsID0gX2ludGVyb3BEZWZhdWx0KHJlcXVpcmUoJ3doYXR3Zy11cmwnKSk7XG52YXIgaHR0cHMgPSBfaW50ZXJvcERlZmF1bHQocmVxdWlyZSgnaHR0cHMnKSk7XG52YXIgemxpYiA9IF9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKCd6bGliJykpO1xuXG4vLyBCYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vdG1wdmFyL2pzZG9tL2Jsb2IvYWE4NWIyYWJmMDc3NjZmZjdiZjVjMWY2ZGFhZmIzNzI2ZjJmMmRiNS9saWIvanNkb20vbGl2aW5nL2Jsb2IuanNcblxuLy8gZml4IGZvciBcIlJlYWRhYmxlXCIgaXNuJ3QgYSBuYW1lZCBleHBvcnQgaXNzdWVcbmNvbnN0IFJlYWRhYmxlID0gU3RyZWFtLlJlYWRhYmxlO1xuXG5jb25zdCBCVUZGRVIgPSBTeW1ib2woJ2J1ZmZlcicpO1xuY29uc3QgVFlQRSA9IFN5bWJvbCgndHlwZScpO1xuXG5jbGFzcyBCbG9iIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpc1tUWVBFXSA9ICcnO1xuXG5cdFx0Y29uc3QgYmxvYlBhcnRzID0gYXJndW1lbnRzWzBdO1xuXHRcdGNvbnN0IG9wdGlvbnMgPSBhcmd1bWVudHNbMV07XG5cblx0XHRjb25zdCBidWZmZXJzID0gW107XG5cdFx0bGV0IHNpemUgPSAwO1xuXG5cdFx0aWYgKGJsb2JQYXJ0cykge1xuXHRcdFx0Y29uc3QgYSA9IGJsb2JQYXJ0cztcblx0XHRcdGNvbnN0IGxlbmd0aCA9IE51bWJlcihhLmxlbmd0aCk7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGNvbnN0IGVsZW1lbnQgPSBhW2ldO1xuXHRcdFx0XHRsZXQgYnVmZmVyO1xuXHRcdFx0XHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEJ1ZmZlcikge1xuXHRcdFx0XHRcdGJ1ZmZlciA9IGVsZW1lbnQ7XG5cdFx0XHRcdH0gZWxzZSBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KGVsZW1lbnQpKSB7XG5cdFx0XHRcdFx0YnVmZmVyID0gQnVmZmVyLmZyb20oZWxlbWVudC5idWZmZXIsIGVsZW1lbnQuYnl0ZU9mZnNldCwgZWxlbWVudC5ieXRlTGVuZ3RoKTtcblx0XHRcdFx0fSBlbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcblx0XHRcdFx0XHRidWZmZXIgPSBCdWZmZXIuZnJvbShlbGVtZW50KTtcblx0XHRcdFx0fSBlbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgQmxvYikge1xuXHRcdFx0XHRcdGJ1ZmZlciA9IGVsZW1lbnRbQlVGRkVSXTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRidWZmZXIgPSBCdWZmZXIuZnJvbSh0eXBlb2YgZWxlbWVudCA9PT0gJ3N0cmluZycgPyBlbGVtZW50IDogU3RyaW5nKGVsZW1lbnQpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRzaXplICs9IGJ1ZmZlci5sZW5ndGg7XG5cdFx0XHRcdGJ1ZmZlcnMucHVzaChidWZmZXIpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXNbQlVGRkVSXSA9IEJ1ZmZlci5jb25jYXQoYnVmZmVycyk7XG5cblx0XHRsZXQgdHlwZSA9IG9wdGlvbnMgJiYgb3B0aW9ucy50eXBlICE9PSB1bmRlZmluZWQgJiYgU3RyaW5nKG9wdGlvbnMudHlwZSkudG9Mb3dlckNhc2UoKTtcblx0XHRpZiAodHlwZSAmJiAhL1teXFx1MDAyMC1cXHUwMDdFXS8udGVzdCh0eXBlKSkge1xuXHRcdFx0dGhpc1tUWVBFXSA9IHR5cGU7XG5cdFx0fVxuXHR9XG5cdGdldCBzaXplKCkge1xuXHRcdHJldHVybiB0aGlzW0JVRkZFUl0ubGVuZ3RoO1xuXHR9XG5cdGdldCB0eXBlKCkge1xuXHRcdHJldHVybiB0aGlzW1RZUEVdO1xuXHR9XG5cdHRleHQoKSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzW0JVRkZFUl0udG9TdHJpbmcoKSk7XG5cdH1cblx0YXJyYXlCdWZmZXIoKSB7XG5cdFx0Y29uc3QgYnVmID0gdGhpc1tCVUZGRVJdO1xuXHRcdGNvbnN0IGFiID0gYnVmLmJ1ZmZlci5zbGljZShidWYuYnl0ZU9mZnNldCwgYnVmLmJ5dGVPZmZzZXQgKyBidWYuYnl0ZUxlbmd0aCk7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShhYik7XG5cdH1cblx0c3RyZWFtKCkge1xuXHRcdGNvbnN0IHJlYWRhYmxlID0gbmV3IFJlYWRhYmxlKCk7XG5cdFx0cmVhZGFibGUuX3JlYWQgPSBmdW5jdGlvbiAoKSB7fTtcblx0XHRyZWFkYWJsZS5wdXNoKHRoaXNbQlVGRkVSXSk7XG5cdFx0cmVhZGFibGUucHVzaChudWxsKTtcblx0XHRyZXR1cm4gcmVhZGFibGU7XG5cdH1cblx0dG9TdHJpbmcoKSB7XG5cdFx0cmV0dXJuICdbb2JqZWN0IEJsb2JdJztcblx0fVxuXHRzbGljZSgpIHtcblx0XHRjb25zdCBzaXplID0gdGhpcy5zaXplO1xuXG5cdFx0Y29uc3Qgc3RhcnQgPSBhcmd1bWVudHNbMF07XG5cdFx0Y29uc3QgZW5kID0gYXJndW1lbnRzWzFdO1xuXHRcdGxldCByZWxhdGl2ZVN0YXJ0LCByZWxhdGl2ZUVuZDtcblx0XHRpZiAoc3RhcnQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmVsYXRpdmVTdGFydCA9IDA7XG5cdFx0fSBlbHNlIGlmIChzdGFydCA8IDApIHtcblx0XHRcdHJlbGF0aXZlU3RhcnQgPSBNYXRoLm1heChzaXplICsgc3RhcnQsIDApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZWxhdGl2ZVN0YXJ0ID0gTWF0aC5taW4oc3RhcnQsIHNpemUpO1xuXHRcdH1cblx0XHRpZiAoZW5kID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJlbGF0aXZlRW5kID0gc2l6ZTtcblx0XHR9IGVsc2UgaWYgKGVuZCA8IDApIHtcblx0XHRcdHJlbGF0aXZlRW5kID0gTWF0aC5tYXgoc2l6ZSArIGVuZCwgMCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJlbGF0aXZlRW5kID0gTWF0aC5taW4oZW5kLCBzaXplKTtcblx0XHR9XG5cdFx0Y29uc3Qgc3BhbiA9IE1hdGgubWF4KHJlbGF0aXZlRW5kIC0gcmVsYXRpdmVTdGFydCwgMCk7XG5cblx0XHRjb25zdCBidWZmZXIgPSB0aGlzW0JVRkZFUl07XG5cdFx0Y29uc3Qgc2xpY2VkQnVmZmVyID0gYnVmZmVyLnNsaWNlKHJlbGF0aXZlU3RhcnQsIHJlbGF0aXZlU3RhcnQgKyBzcGFuKTtcblx0XHRjb25zdCBibG9iID0gbmV3IEJsb2IoW10sIHsgdHlwZTogYXJndW1lbnRzWzJdIH0pO1xuXHRcdGJsb2JbQlVGRkVSXSA9IHNsaWNlZEJ1ZmZlcjtcblx0XHRyZXR1cm4gYmxvYjtcblx0fVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbG9iLnByb3RvdHlwZSwge1xuXHRzaXplOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0dHlwZTogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG5cdHNsaWNlOiB7IGVudW1lcmFibGU6IHRydWUgfVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShCbG9iLnByb3RvdHlwZSwgU3ltYm9sLnRvU3RyaW5nVGFnLCB7XG5cdHZhbHVlOiAnQmxvYicsXG5cdHdyaXRhYmxlOiBmYWxzZSxcblx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbi8qKlxuICogZmV0Y2gtZXJyb3IuanNcbiAqXG4gKiBGZXRjaEVycm9yIGludGVyZmFjZSBmb3Igb3BlcmF0aW9uYWwgZXJyb3JzXG4gKi9cblxuLyoqXG4gKiBDcmVhdGUgRmV0Y2hFcnJvciBpbnN0YW5jZVxuICpcbiAqIEBwYXJhbSAgIFN0cmluZyAgICAgIG1lc3NhZ2UgICAgICBFcnJvciBtZXNzYWdlIGZvciBodW1hblxuICogQHBhcmFtICAgU3RyaW5nICAgICAgdHlwZSAgICAgICAgIEVycm9yIHR5cGUgZm9yIG1hY2hpbmVcbiAqIEBwYXJhbSAgIFN0cmluZyAgICAgIHN5c3RlbUVycm9yICBGb3IgTm9kZS5qcyBzeXN0ZW0gZXJyb3JcbiAqIEByZXR1cm4gIEZldGNoRXJyb3JcbiAqL1xuZnVuY3Rpb24gRmV0Y2hFcnJvcihtZXNzYWdlLCB0eXBlLCBzeXN0ZW1FcnJvcikge1xuICBFcnJvci5jYWxsKHRoaXMsIG1lc3NhZ2UpO1xuXG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gIHRoaXMudHlwZSA9IHR5cGU7XG5cbiAgLy8gd2hlbiBlcnIudHlwZSBpcyBgc3lzdGVtYCwgZXJyLmNvZGUgY29udGFpbnMgc3lzdGVtIGVycm9yIGNvZGVcbiAgaWYgKHN5c3RlbUVycm9yKSB7XG4gICAgdGhpcy5jb2RlID0gdGhpcy5lcnJubyA9IHN5c3RlbUVycm9yLmNvZGU7XG4gIH1cblxuICAvLyBoaWRlIGN1c3RvbSBlcnJvciBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGZyb20gZW5kLXVzZXJzXG4gIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xufVxuXG5GZXRjaEVycm9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTtcbkZldGNoRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRmV0Y2hFcnJvcjtcbkZldGNoRXJyb3IucHJvdG90eXBlLm5hbWUgPSAnRmV0Y2hFcnJvcic7XG5cbmxldCBjb252ZXJ0O1xudHJ5IHtcblx0Y29udmVydCA9IHJlcXVpcmUoJ2VuY29kaW5nJykuY29udmVydDtcbn0gY2F0Y2ggKGUpIHt9XG5cbmNvbnN0IElOVEVSTkFMUyA9IFN5bWJvbCgnQm9keSBpbnRlcm5hbHMnKTtcblxuLy8gZml4IGFuIGlzc3VlIHdoZXJlIFwiUGFzc1Rocm91Z2hcIiBpc24ndCBhIG5hbWVkIGV4cG9ydCBmb3Igbm9kZSA8MTBcbmNvbnN0IFBhc3NUaHJvdWdoID0gU3RyZWFtLlBhc3NUaHJvdWdoO1xuXG4vKipcbiAqIEJvZHkgbWl4aW5cbiAqXG4gKiBSZWY6IGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNib2R5XG4gKlxuICogQHBhcmFtICAgU3RyZWFtICBib2R5ICBSZWFkYWJsZSBzdHJlYW1cbiAqIEBwYXJhbSAgIE9iamVjdCAgb3B0cyAgUmVzcG9uc2Ugb3B0aW9uc1xuICogQHJldHVybiAgVm9pZFxuICovXG5mdW5jdGlvbiBCb2R5KGJvZHkpIHtcblx0dmFyIF90aGlzID0gdGhpcztcblxuXHR2YXIgX3JlZiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge30sXG5cdCAgICBfcmVmJHNpemUgPSBfcmVmLnNpemU7XG5cblx0bGV0IHNpemUgPSBfcmVmJHNpemUgPT09IHVuZGVmaW5lZCA/IDAgOiBfcmVmJHNpemU7XG5cdHZhciBfcmVmJHRpbWVvdXQgPSBfcmVmLnRpbWVvdXQ7XG5cdGxldCB0aW1lb3V0ID0gX3JlZiR0aW1lb3V0ID09PSB1bmRlZmluZWQgPyAwIDogX3JlZiR0aW1lb3V0O1xuXG5cdGlmIChib2R5ID09IG51bGwpIHtcblx0XHQvLyBib2R5IGlzIHVuZGVmaW5lZCBvciBudWxsXG5cdFx0Ym9keSA9IG51bGw7XG5cdH0gZWxzZSBpZiAoaXNVUkxTZWFyY2hQYXJhbXMoYm9keSkpIHtcblx0XHQvLyBib2R5IGlzIGEgVVJMU2VhcmNoUGFyYW1zXG5cdFx0Ym9keSA9IEJ1ZmZlci5mcm9tKGJvZHkudG9TdHJpbmcoKSk7XG5cdH0gZWxzZSBpZiAoaXNCbG9iKGJvZHkpKSA7IGVsc2UgaWYgKEJ1ZmZlci5pc0J1ZmZlcihib2R5KSkgOyBlbHNlIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYm9keSkgPT09ICdbb2JqZWN0IEFycmF5QnVmZmVyXScpIHtcblx0XHQvLyBib2R5IGlzIEFycmF5QnVmZmVyXG5cdFx0Ym9keSA9IEJ1ZmZlci5mcm9tKGJvZHkpO1xuXHR9IGVsc2UgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhib2R5KSkge1xuXHRcdC8vIGJvZHkgaXMgQXJyYXlCdWZmZXJWaWV3XG5cdFx0Ym9keSA9IEJ1ZmZlci5mcm9tKGJvZHkuYnVmZmVyLCBib2R5LmJ5dGVPZmZzZXQsIGJvZHkuYnl0ZUxlbmd0aCk7XG5cdH0gZWxzZSBpZiAoYm9keSBpbnN0YW5jZW9mIFN0cmVhbSkgOyBlbHNlIHtcblx0XHQvLyBub25lIG9mIHRoZSBhYm92ZVxuXHRcdC8vIGNvZXJjZSB0byBzdHJpbmcgdGhlbiBidWZmZXJcblx0XHRib2R5ID0gQnVmZmVyLmZyb20oU3RyaW5nKGJvZHkpKTtcblx0fVxuXHR0aGlzW0lOVEVSTkFMU10gPSB7XG5cdFx0Ym9keSxcblx0XHRkaXN0dXJiZWQ6IGZhbHNlLFxuXHRcdGVycm9yOiBudWxsXG5cdH07XG5cdHRoaXMuc2l6ZSA9IHNpemU7XG5cdHRoaXMudGltZW91dCA9IHRpbWVvdXQ7XG5cblx0aWYgKGJvZHkgaW5zdGFuY2VvZiBTdHJlYW0pIHtcblx0XHRib2R5Lm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpIHtcblx0XHRcdGNvbnN0IGVycm9yID0gZXJyLm5hbWUgPT09ICdBYm9ydEVycm9yJyA/IGVyciA6IG5ldyBGZXRjaEVycm9yKGBJbnZhbGlkIHJlc3BvbnNlIGJvZHkgd2hpbGUgdHJ5aW5nIHRvIGZldGNoICR7X3RoaXMudXJsfTogJHtlcnIubWVzc2FnZX1gLCAnc3lzdGVtJywgZXJyKTtcblx0XHRcdF90aGlzW0lOVEVSTkFMU10uZXJyb3IgPSBlcnJvcjtcblx0XHR9KTtcblx0fVxufVxuXG5Cb2R5LnByb3RvdHlwZSA9IHtcblx0Z2V0IGJvZHkoKSB7XG5cdFx0cmV0dXJuIHRoaXNbSU5URVJOQUxTXS5ib2R5O1xuXHR9LFxuXG5cdGdldCBib2R5VXNlZCgpIHtcblx0XHRyZXR1cm4gdGhpc1tJTlRFUk5BTFNdLmRpc3R1cmJlZDtcblx0fSxcblxuXHQvKipcbiAgKiBEZWNvZGUgcmVzcG9uc2UgYXMgQXJyYXlCdWZmZXJcbiAgKlxuICAqIEByZXR1cm4gIFByb21pc2VcbiAgKi9cblx0YXJyYXlCdWZmZXIoKSB7XG5cdFx0cmV0dXJuIGNvbnN1bWVCb2R5LmNhbGwodGhpcykudGhlbihmdW5jdGlvbiAoYnVmKSB7XG5cdFx0XHRyZXR1cm4gYnVmLmJ1ZmZlci5zbGljZShidWYuYnl0ZU9mZnNldCwgYnVmLmJ5dGVPZmZzZXQgKyBidWYuYnl0ZUxlbmd0aCk7XG5cdFx0fSk7XG5cdH0sXG5cblx0LyoqXG4gICogUmV0dXJuIHJhdyByZXNwb25zZSBhcyBCbG9iXG4gICpcbiAgKiBAcmV0dXJuIFByb21pc2VcbiAgKi9cblx0YmxvYigpIHtcblx0XHRsZXQgY3QgPSB0aGlzLmhlYWRlcnMgJiYgdGhpcy5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJykgfHwgJyc7XG5cdFx0cmV0dXJuIGNvbnN1bWVCb2R5LmNhbGwodGhpcykudGhlbihmdW5jdGlvbiAoYnVmKSB7XG5cdFx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbihcblx0XHRcdC8vIFByZXZlbnQgY29weWluZ1xuXHRcdFx0bmV3IEJsb2IoW10sIHtcblx0XHRcdFx0dHlwZTogY3QudG9Mb3dlckNhc2UoKVxuXHRcdFx0fSksIHtcblx0XHRcdFx0W0JVRkZFUl06IGJ1ZlxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH0sXG5cblx0LyoqXG4gICogRGVjb2RlIHJlc3BvbnNlIGFzIGpzb25cbiAgKlxuICAqIEByZXR1cm4gIFByb21pc2VcbiAgKi9cblx0anNvbigpIHtcblx0XHR2YXIgX3RoaXMyID0gdGhpcztcblxuXHRcdHJldHVybiBjb25zdW1lQm9keS5jYWxsKHRoaXMpLnRoZW4oZnVuY3Rpb24gKGJ1ZmZlcikge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cmV0dXJuIEpTT04ucGFyc2UoYnVmZmVyLnRvU3RyaW5nKCkpO1xuXHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdHJldHVybiBCb2R5LlByb21pc2UucmVqZWN0KG5ldyBGZXRjaEVycm9yKGBpbnZhbGlkIGpzb24gcmVzcG9uc2UgYm9keSBhdCAke190aGlzMi51cmx9IHJlYXNvbjogJHtlcnIubWVzc2FnZX1gLCAnaW52YWxpZC1qc29uJykpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9LFxuXG5cdC8qKlxuICAqIERlY29kZSByZXNwb25zZSBhcyB0ZXh0XG4gICpcbiAgKiBAcmV0dXJuICBQcm9taXNlXG4gICovXG5cdHRleHQoKSB7XG5cdFx0cmV0dXJuIGNvbnN1bWVCb2R5LmNhbGwodGhpcykudGhlbihmdW5jdGlvbiAoYnVmZmVyKSB7XG5cdFx0XHRyZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7XG5cdFx0fSk7XG5cdH0sXG5cblx0LyoqXG4gICogRGVjb2RlIHJlc3BvbnNlIGFzIGJ1ZmZlciAobm9uLXNwZWMgYXBpKVxuICAqXG4gICogQHJldHVybiAgUHJvbWlzZVxuICAqL1xuXHRidWZmZXIoKSB7XG5cdFx0cmV0dXJuIGNvbnN1bWVCb2R5LmNhbGwodGhpcyk7XG5cdH0sXG5cblx0LyoqXG4gICogRGVjb2RlIHJlc3BvbnNlIGFzIHRleHQsIHdoaWxlIGF1dG9tYXRpY2FsbHkgZGV0ZWN0aW5nIHRoZSBlbmNvZGluZyBhbmRcbiAgKiB0cnlpbmcgdG8gZGVjb2RlIHRvIFVURi04IChub24tc3BlYyBhcGkpXG4gICpcbiAgKiBAcmV0dXJuICBQcm9taXNlXG4gICovXG5cdHRleHRDb252ZXJ0ZWQoKSB7XG5cdFx0dmFyIF90aGlzMyA9IHRoaXM7XG5cblx0XHRyZXR1cm4gY29uc3VtZUJvZHkuY2FsbCh0aGlzKS50aGVuKGZ1bmN0aW9uIChidWZmZXIpIHtcblx0XHRcdHJldHVybiBjb252ZXJ0Qm9keShidWZmZXIsIF90aGlzMy5oZWFkZXJzKTtcblx0XHR9KTtcblx0fVxufTtcblxuLy8gSW4gYnJvd3NlcnMsIGFsbCBwcm9wZXJ0aWVzIGFyZSBlbnVtZXJhYmxlLlxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQm9keS5wcm90b3R5cGUsIHtcblx0Ym9keTogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG5cdGJvZHlVc2VkOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0YXJyYXlCdWZmZXI6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHRibG9iOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0anNvbjogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG5cdHRleHQ6IHsgZW51bWVyYWJsZTogdHJ1ZSB9XG59KTtcblxuQm9keS5taXhJbiA9IGZ1bmN0aW9uIChwcm90bykge1xuXHRmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoQm9keS5wcm90b3R5cGUpKSB7XG5cdFx0Ly8gaXN0YW5idWwgaWdub3JlIGVsc2U6IGZ1dHVyZSBwcm9vZlxuXHRcdGlmICghKG5hbWUgaW4gcHJvdG8pKSB7XG5cdFx0XHRjb25zdCBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihCb2R5LnByb3RvdHlwZSwgbmFtZSk7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG8sIG5hbWUsIGRlc2MpO1xuXHRcdH1cblx0fVxufTtcblxuLyoqXG4gKiBDb25zdW1lIGFuZCBjb252ZXJ0IGFuIGVudGlyZSBCb2R5IHRvIGEgQnVmZmVyLlxuICpcbiAqIFJlZjogaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtYm9keS1jb25zdW1lLWJvZHlcbiAqXG4gKiBAcmV0dXJuICBQcm9taXNlXG4gKi9cbmZ1bmN0aW9uIGNvbnN1bWVCb2R5KCkge1xuXHR2YXIgX3RoaXM0ID0gdGhpcztcblxuXHRpZiAodGhpc1tJTlRFUk5BTFNdLmRpc3R1cmJlZCkge1xuXHRcdHJldHVybiBCb2R5LlByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoYGJvZHkgdXNlZCBhbHJlYWR5IGZvcjogJHt0aGlzLnVybH1gKSk7XG5cdH1cblxuXHR0aGlzW0lOVEVSTkFMU10uZGlzdHVyYmVkID0gdHJ1ZTtcblxuXHRpZiAodGhpc1tJTlRFUk5BTFNdLmVycm9yKSB7XG5cdFx0cmV0dXJuIEJvZHkuUHJvbWlzZS5yZWplY3QodGhpc1tJTlRFUk5BTFNdLmVycm9yKTtcblx0fVxuXG5cdGxldCBib2R5ID0gdGhpcy5ib2R5O1xuXG5cdC8vIGJvZHkgaXMgbnVsbFxuXHRpZiAoYm9keSA9PT0gbnVsbCkge1xuXHRcdHJldHVybiBCb2R5LlByb21pc2UucmVzb2x2ZShCdWZmZXIuYWxsb2MoMCkpO1xuXHR9XG5cblx0Ly8gYm9keSBpcyBibG9iXG5cdGlmIChpc0Jsb2IoYm9keSkpIHtcblx0XHRib2R5ID0gYm9keS5zdHJlYW0oKTtcblx0fVxuXG5cdC8vIGJvZHkgaXMgYnVmZmVyXG5cdGlmIChCdWZmZXIuaXNCdWZmZXIoYm9keSkpIHtcblx0XHRyZXR1cm4gQm9keS5Qcm9taXNlLnJlc29sdmUoYm9keSk7XG5cdH1cblxuXHQvLyBpc3RhbmJ1bCBpZ25vcmUgaWY6IHNob3VsZCBuZXZlciBoYXBwZW5cblx0aWYgKCEoYm9keSBpbnN0YW5jZW9mIFN0cmVhbSkpIHtcblx0XHRyZXR1cm4gQm9keS5Qcm9taXNlLnJlc29sdmUoQnVmZmVyLmFsbG9jKDApKTtcblx0fVxuXG5cdC8vIGJvZHkgaXMgc3RyZWFtXG5cdC8vIGdldCByZWFkeSB0byBhY3R1YWxseSBjb25zdW1lIHRoZSBib2R5XG5cdGxldCBhY2N1bSA9IFtdO1xuXHRsZXQgYWNjdW1CeXRlcyA9IDA7XG5cdGxldCBhYm9ydCA9IGZhbHNlO1xuXG5cdHJldHVybiBuZXcgQm9keS5Qcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcblx0XHRsZXQgcmVzVGltZW91dDtcblxuXHRcdC8vIGFsbG93IHRpbWVvdXQgb24gc2xvdyByZXNwb25zZSBib2R5XG5cdFx0aWYgKF90aGlzNC50aW1lb3V0KSB7XG5cdFx0XHRyZXNUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdGFib3J0ID0gdHJ1ZTtcblx0XHRcdFx0cmVqZWN0KG5ldyBGZXRjaEVycm9yKGBSZXNwb25zZSB0aW1lb3V0IHdoaWxlIHRyeWluZyB0byBmZXRjaCAke190aGlzNC51cmx9IChvdmVyICR7X3RoaXM0LnRpbWVvdXR9bXMpYCwgJ2JvZHktdGltZW91dCcpKTtcblx0XHRcdH0sIF90aGlzNC50aW1lb3V0KTtcblx0XHR9XG5cblx0XHQvLyBoYW5kbGUgc3RyZWFtIGVycm9yc1xuXHRcdGJvZHkub24oJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xuXHRcdFx0aWYgKGVyci5uYW1lID09PSAnQWJvcnRFcnJvcicpIHtcblx0XHRcdFx0Ly8gaWYgdGhlIHJlcXVlc3Qgd2FzIGFib3J0ZWQsIHJlamVjdCB3aXRoIHRoaXMgRXJyb3Jcblx0XHRcdFx0YWJvcnQgPSB0cnVlO1xuXHRcdFx0XHRyZWplY3QoZXJyKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIG90aGVyIGVycm9ycywgc3VjaCBhcyBpbmNvcnJlY3QgY29udGVudC1lbmNvZGluZ1xuXHRcdFx0XHRyZWplY3QobmV3IEZldGNoRXJyb3IoYEludmFsaWQgcmVzcG9uc2UgYm9keSB3aGlsZSB0cnlpbmcgdG8gZmV0Y2ggJHtfdGhpczQudXJsfTogJHtlcnIubWVzc2FnZX1gLCAnc3lzdGVtJywgZXJyKSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRib2R5Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7XG5cdFx0XHRpZiAoYWJvcnQgfHwgY2h1bmsgPT09IG51bGwpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoX3RoaXM0LnNpemUgJiYgYWNjdW1CeXRlcyArIGNodW5rLmxlbmd0aCA+IF90aGlzNC5zaXplKSB7XG5cdFx0XHRcdGFib3J0ID0gdHJ1ZTtcblx0XHRcdFx0cmVqZWN0KG5ldyBGZXRjaEVycm9yKGBjb250ZW50IHNpemUgYXQgJHtfdGhpczQudXJsfSBvdmVyIGxpbWl0OiAke190aGlzNC5zaXplfWAsICdtYXgtc2l6ZScpKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRhY2N1bUJ5dGVzICs9IGNodW5rLmxlbmd0aDtcblx0XHRcdGFjY3VtLnB1c2goY2h1bmspO1xuXHRcdH0pO1xuXG5cdFx0Ym9keS5vbignZW5kJywgZnVuY3Rpb24gKCkge1xuXHRcdFx0aWYgKGFib3J0KSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Y2xlYXJUaW1lb3V0KHJlc1RpbWVvdXQpO1xuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRyZXNvbHZlKEJ1ZmZlci5jb25jYXQoYWNjdW0sIGFjY3VtQnl0ZXMpKTtcblx0XHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0XHQvLyBoYW5kbGUgc3RyZWFtcyB0aGF0IGhhdmUgYWNjdW11bGF0ZWQgdG9vIG11Y2ggZGF0YSAoaXNzdWUgIzQxNClcblx0XHRcdFx0cmVqZWN0KG5ldyBGZXRjaEVycm9yKGBDb3VsZCBub3QgY3JlYXRlIEJ1ZmZlciBmcm9tIHJlc3BvbnNlIGJvZHkgZm9yICR7X3RoaXM0LnVybH06ICR7ZXJyLm1lc3NhZ2V9YCwgJ3N5c3RlbScsIGVycikpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBEZXRlY3QgYnVmZmVyIGVuY29kaW5nIGFuZCBjb252ZXJ0IHRvIHRhcmdldCBlbmNvZGluZ1xuICogcmVmOiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDExL1dELWh0bWw1LTIwMTEwMTEzL3BhcnNpbmcuaHRtbCNkZXRlcm1pbmluZy10aGUtY2hhcmFjdGVyLWVuY29kaW5nXG4gKlxuICogQHBhcmFtICAgQnVmZmVyICBidWZmZXIgICAgSW5jb21pbmcgYnVmZmVyXG4gKiBAcGFyYW0gICBTdHJpbmcgIGVuY29kaW5nICBUYXJnZXQgZW5jb2RpbmdcbiAqIEByZXR1cm4gIFN0cmluZ1xuICovXG5mdW5jdGlvbiBjb252ZXJ0Qm9keShidWZmZXIsIGhlYWRlcnMpIHtcblx0aWYgKHR5cGVvZiBjb252ZXJ0ICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdUaGUgcGFja2FnZSBgZW5jb2RpbmdgIG11c3QgYmUgaW5zdGFsbGVkIHRvIHVzZSB0aGUgdGV4dENvbnZlcnRlZCgpIGZ1bmN0aW9uJyk7XG5cdH1cblxuXHRjb25zdCBjdCA9IGhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKTtcblx0bGV0IGNoYXJzZXQgPSAndXRmLTgnO1xuXHRsZXQgcmVzLCBzdHI7XG5cblx0Ly8gaGVhZGVyXG5cdGlmIChjdCkge1xuXHRcdHJlcyA9IC9jaGFyc2V0PShbXjtdKikvaS5leGVjKGN0KTtcblx0fVxuXG5cdC8vIG5vIGNoYXJzZXQgaW4gY29udGVudCB0eXBlLCBwZWVrIGF0IHJlc3BvbnNlIGJvZHkgZm9yIGF0IG1vc3QgMTAyNCBieXRlc1xuXHRzdHIgPSBidWZmZXIuc2xpY2UoMCwgMTAyNCkudG9TdHJpbmcoKTtcblxuXHQvLyBodG1sNVxuXHRpZiAoIXJlcyAmJiBzdHIpIHtcblx0XHRyZXMgPSAvPG1ldGEuKz9jaGFyc2V0PShbJ1wiXSkoLis/KVxcMS9pLmV4ZWMoc3RyKTtcblx0fVxuXG5cdC8vIGh0bWw0XG5cdGlmICghcmVzICYmIHN0cikge1xuXHRcdHJlcyA9IC88bWV0YVtcXHNdKz9odHRwLWVxdWl2PShbJ1wiXSljb250ZW50LXR5cGVcXDFbXFxzXSs/Y29udGVudD0oWydcIl0pKC4rPylcXDIvaS5leGVjKHN0cik7XG5cdFx0aWYgKCFyZXMpIHtcblx0XHRcdHJlcyA9IC88bWV0YVtcXHNdKz9jb250ZW50PShbJ1wiXSkoLis/KVxcMVtcXHNdKz9odHRwLWVxdWl2PShbJ1wiXSljb250ZW50LXR5cGVcXDMvaS5leGVjKHN0cik7XG5cdFx0XHRpZiAocmVzKSB7XG5cdFx0XHRcdHJlcy5wb3AoKTsgLy8gZHJvcCBsYXN0IHF1b3RlXG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHJlcykge1xuXHRcdFx0cmVzID0gL2NoYXJzZXQ9KC4qKS9pLmV4ZWMocmVzLnBvcCgpKTtcblx0XHR9XG5cdH1cblxuXHQvLyB4bWxcblx0aWYgKCFyZXMgJiYgc3RyKSB7XG5cdFx0cmVzID0gLzxcXD94bWwuKz9lbmNvZGluZz0oWydcIl0pKC4rPylcXDEvaS5leGVjKHN0cik7XG5cdH1cblxuXHQvLyBmb3VuZCBjaGFyc2V0XG5cdGlmIChyZXMpIHtcblx0XHRjaGFyc2V0ID0gcmVzLnBvcCgpO1xuXG5cdFx0Ly8gcHJldmVudCBkZWNvZGUgaXNzdWVzIHdoZW4gc2l0ZXMgdXNlIGluY29ycmVjdCBlbmNvZGluZ1xuXHRcdC8vIHJlZjogaHR0cHM6Ly9oc2l2b25lbi5maS9lbmNvZGluZy1tZW51L1xuXHRcdGlmIChjaGFyc2V0ID09PSAnZ2IyMzEyJyB8fCBjaGFyc2V0ID09PSAnZ2JrJykge1xuXHRcdFx0Y2hhcnNldCA9ICdnYjE4MDMwJztcblx0XHR9XG5cdH1cblxuXHQvLyB0dXJuIHJhdyBidWZmZXJzIGludG8gYSBzaW5nbGUgdXRmLTggYnVmZmVyXG5cdHJldHVybiBjb252ZXJ0KGJ1ZmZlciwgJ1VURi04JywgY2hhcnNldCkudG9TdHJpbmcoKTtcbn1cblxuLyoqXG4gKiBEZXRlY3QgYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0XG4gKiByZWY6IGh0dHBzOi8vZ2l0aHViLmNvbS9iaXRpbm4vbm9kZS1mZXRjaC9pc3N1ZXMvMjk2I2lzc3VlY29tbWVudC0zMDc1OTgxNDNcbiAqXG4gKiBAcGFyYW0gICBPYmplY3QgIG9iaiAgICAgT2JqZWN0IHRvIGRldGVjdCBieSB0eXBlIG9yIGJyYW5kXG4gKiBAcmV0dXJuICBTdHJpbmdcbiAqL1xuZnVuY3Rpb24gaXNVUkxTZWFyY2hQYXJhbXMob2JqKSB7XG5cdC8vIER1Y2stdHlwaW5nIGFzIGEgbmVjZXNzYXJ5IGNvbmRpdGlvbi5cblx0aWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnIHx8IHR5cGVvZiBvYmouYXBwZW5kICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBvYmouZGVsZXRlICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBvYmouZ2V0ICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBvYmouZ2V0QWxsICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBvYmouaGFzICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBvYmouc2V0ICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Ly8gQnJhbmQtY2hlY2tpbmcgYW5kIG1vcmUgZHVjay10eXBpbmcgYXMgb3B0aW9uYWwgY29uZGl0aW9uLlxuXHRyZXR1cm4gb2JqLmNvbnN0cnVjdG9yLm5hbWUgPT09ICdVUkxTZWFyY2hQYXJhbXMnIHx8IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBVUkxTZWFyY2hQYXJhbXNdJyB8fCB0eXBlb2Ygb2JqLnNvcnQgPT09ICdmdW5jdGlvbic7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYG9iamAgaXMgYSBXM0MgYEJsb2JgIG9iamVjdCAod2hpY2ggYEZpbGVgIGluaGVyaXRzIGZyb20pXG4gKiBAcGFyYW0gIHsqfSBvYmpcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzQmxvYihvYmopIHtcblx0cmV0dXJuIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHR5cGVvZiBvYmouYXJyYXlCdWZmZXIgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIG9iai50eXBlID09PSAnc3RyaW5nJyAmJiB0eXBlb2Ygb2JqLnN0cmVhbSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2Ygb2JqLmNvbnN0cnVjdG9yID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBvYmouY29uc3RydWN0b3IubmFtZSA9PT0gJ3N0cmluZycgJiYgL14oQmxvYnxGaWxlKSQvLnRlc3Qob2JqLmNvbnN0cnVjdG9yLm5hbWUpICYmIC9eKEJsb2J8RmlsZSkkLy50ZXN0KG9ialtTeW1ib2wudG9TdHJpbmdUYWddKTtcbn1cblxuLyoqXG4gKiBDbG9uZSBib2R5IGdpdmVuIFJlcy9SZXEgaW5zdGFuY2VcbiAqXG4gKiBAcGFyYW0gICBNaXhlZCAgaW5zdGFuY2UgIFJlc3BvbnNlIG9yIFJlcXVlc3QgaW5zdGFuY2VcbiAqIEByZXR1cm4gIE1peGVkXG4gKi9cbmZ1bmN0aW9uIGNsb25lKGluc3RhbmNlKSB7XG5cdGxldCBwMSwgcDI7XG5cdGxldCBib2R5ID0gaW5zdGFuY2UuYm9keTtcblxuXHQvLyBkb24ndCBhbGxvdyBjbG9uaW5nIGEgdXNlZCBib2R5XG5cdGlmIChpbnN0YW5jZS5ib2R5VXNlZCkge1xuXHRcdHRocm93IG5ldyBFcnJvcignY2Fubm90IGNsb25lIGJvZHkgYWZ0ZXIgaXQgaXMgdXNlZCcpO1xuXHR9XG5cblx0Ly8gY2hlY2sgdGhhdCBib2R5IGlzIGEgc3RyZWFtIGFuZCBub3QgZm9ybS1kYXRhIG9iamVjdFxuXHQvLyBub3RlOiB3ZSBjYW4ndCBjbG9uZSB0aGUgZm9ybS1kYXRhIG9iamVjdCB3aXRob3V0IGhhdmluZyBpdCBhcyBhIGRlcGVuZGVuY3lcblx0aWYgKGJvZHkgaW5zdGFuY2VvZiBTdHJlYW0gJiYgdHlwZW9mIGJvZHkuZ2V0Qm91bmRhcnkgIT09ICdmdW5jdGlvbicpIHtcblx0XHQvLyB0ZWUgaW5zdGFuY2UgYm9keVxuXHRcdHAxID0gbmV3IFBhc3NUaHJvdWdoKCk7XG5cdFx0cDIgPSBuZXcgUGFzc1Rocm91Z2goKTtcblx0XHRib2R5LnBpcGUocDEpO1xuXHRcdGJvZHkucGlwZShwMik7XG5cdFx0Ly8gc2V0IGluc3RhbmNlIGJvZHkgdG8gdGVlZCBib2R5IGFuZCByZXR1cm4gdGhlIG90aGVyIHRlZWQgYm9keVxuXHRcdGluc3RhbmNlW0lOVEVSTkFMU10uYm9keSA9IHAxO1xuXHRcdGJvZHkgPSBwMjtcblx0fVxuXG5cdHJldHVybiBib2R5O1xufVxuXG4vKipcbiAqIFBlcmZvcm1zIHRoZSBvcGVyYXRpb24gXCJleHRyYWN0IGEgYENvbnRlbnQtVHlwZWAgdmFsdWUgZnJvbSB8b2JqZWN0fFwiIGFzXG4gKiBzcGVjaWZpZWQgaW4gdGhlIHNwZWNpZmljYXRpb246XG4gKiBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1ib2R5aW5pdC1leHRyYWN0XG4gKlxuICogVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgaW5zdGFuY2UuYm9keSBpcyBwcmVzZW50LlxuICpcbiAqIEBwYXJhbSAgIE1peGVkICBpbnN0YW5jZSAgQW55IG9wdGlvbnMuYm9keSBpbnB1dFxuICovXG5mdW5jdGlvbiBleHRyYWN0Q29udGVudFR5cGUoYm9keSkge1xuXHRpZiAoYm9keSA9PT0gbnVsbCkge1xuXHRcdC8vIGJvZHkgaXMgbnVsbFxuXHRcdHJldHVybiBudWxsO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJykge1xuXHRcdC8vIGJvZHkgaXMgc3RyaW5nXG5cdFx0cmV0dXJuICd0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLTgnO1xuXHR9IGVsc2UgaWYgKGlzVVJMU2VhcmNoUGFyYW1zKGJvZHkpKSB7XG5cdFx0Ly8gYm9keSBpcyBhIFVSTFNlYXJjaFBhcmFtc1xuXHRcdHJldHVybiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLTgnO1xuXHR9IGVsc2UgaWYgKGlzQmxvYihib2R5KSkge1xuXHRcdC8vIGJvZHkgaXMgYmxvYlxuXHRcdHJldHVybiBib2R5LnR5cGUgfHwgbnVsbDtcblx0fSBlbHNlIGlmIChCdWZmZXIuaXNCdWZmZXIoYm9keSkpIHtcblx0XHQvLyBib2R5IGlzIGJ1ZmZlclxuXHRcdHJldHVybiBudWxsO1xuXHR9IGVsc2UgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChib2R5KSA9PT0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJykge1xuXHRcdC8vIGJvZHkgaXMgQXJyYXlCdWZmZXJcblx0XHRyZXR1cm4gbnVsbDtcblx0fSBlbHNlIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcoYm9keSkpIHtcblx0XHQvLyBib2R5IGlzIEFycmF5QnVmZmVyVmlld1xuXHRcdHJldHVybiBudWxsO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBib2R5LmdldEJvdW5kYXJ5ID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0Ly8gZGV0ZWN0IGZvcm0gZGF0YSBpbnB1dCBmcm9tIGZvcm0tZGF0YSBtb2R1bGVcblx0XHRyZXR1cm4gYG11bHRpcGFydC9mb3JtLWRhdGE7Ym91bmRhcnk9JHtib2R5LmdldEJvdW5kYXJ5KCl9YDtcblx0fSBlbHNlIGlmIChib2R5IGluc3RhbmNlb2YgU3RyZWFtKSB7XG5cdFx0Ly8gYm9keSBpcyBzdHJlYW1cblx0XHQvLyBjYW4ndCByZWFsbHkgZG8gbXVjaCBhYm91dCB0aGlzXG5cdFx0cmV0dXJuIG51bGw7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gQm9keSBjb25zdHJ1Y3RvciBkZWZhdWx0cyBvdGhlciB0aGluZ3MgdG8gc3RyaW5nXG5cdFx0cmV0dXJuICd0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLTgnO1xuXHR9XG59XG5cbi8qKlxuICogVGhlIEZldGNoIFN0YW5kYXJkIHRyZWF0cyB0aGlzIGFzIGlmIFwidG90YWwgYnl0ZXNcIiBpcyBhIHByb3BlcnR5IG9uIHRoZSBib2R5LlxuICogRm9yIHVzLCB3ZSBoYXZlIHRvIGV4cGxpY2l0bHkgZ2V0IGl0IHdpdGggYSBmdW5jdGlvbi5cbiAqXG4gKiByZWY6IGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWJvZHktdG90YWwtYnl0ZXNcbiAqXG4gKiBAcGFyYW0gICBCb2R5ICAgIGluc3RhbmNlICAgSW5zdGFuY2Ugb2YgQm9keVxuICogQHJldHVybiAgTnVtYmVyPyAgICAgICAgICAgIE51bWJlciBvZiBieXRlcywgb3IgbnVsbCBpZiBub3QgcG9zc2libGVcbiAqL1xuZnVuY3Rpb24gZ2V0VG90YWxCeXRlcyhpbnN0YW5jZSkge1xuXHRjb25zdCBib2R5ID0gaW5zdGFuY2UuYm9keTtcblxuXG5cdGlmIChib2R5ID09PSBudWxsKSB7XG5cdFx0Ly8gYm9keSBpcyBudWxsXG5cdFx0cmV0dXJuIDA7XG5cdH0gZWxzZSBpZiAoaXNCbG9iKGJvZHkpKSB7XG5cdFx0cmV0dXJuIGJvZHkuc2l6ZTtcblx0fSBlbHNlIGlmIChCdWZmZXIuaXNCdWZmZXIoYm9keSkpIHtcblx0XHQvLyBib2R5IGlzIGJ1ZmZlclxuXHRcdHJldHVybiBib2R5Lmxlbmd0aDtcblx0fSBlbHNlIGlmIChib2R5ICYmIHR5cGVvZiBib2R5LmdldExlbmd0aFN5bmMgPT09ICdmdW5jdGlvbicpIHtcblx0XHQvLyBkZXRlY3QgZm9ybSBkYXRhIGlucHV0IGZyb20gZm9ybS1kYXRhIG1vZHVsZVxuXHRcdGlmIChib2R5Ll9sZW5ndGhSZXRyaWV2ZXJzICYmIGJvZHkuX2xlbmd0aFJldHJpZXZlcnMubGVuZ3RoID09IDAgfHwgLy8gMS54XG5cdFx0Ym9keS5oYXNLbm93bkxlbmd0aCAmJiBib2R5Lmhhc0tub3duTGVuZ3RoKCkpIHtcblx0XHRcdC8vIDIueFxuXHRcdFx0cmV0dXJuIGJvZHkuZ2V0TGVuZ3RoU3luYygpO1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fSBlbHNlIHtcblx0XHQvLyBib2R5IGlzIHN0cmVhbVxuXHRcdHJldHVybiBudWxsO1xuXHR9XG59XG5cbi8qKlxuICogV3JpdGUgYSBCb2R5IHRvIGEgTm9kZS5qcyBXcml0YWJsZVN0cmVhbSAoZS5nLiBodHRwLlJlcXVlc3QpIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gICBCb2R5ICAgIGluc3RhbmNlICAgSW5zdGFuY2Ugb2YgQm9keVxuICogQHJldHVybiAgVm9pZFxuICovXG5mdW5jdGlvbiB3cml0ZVRvU3RyZWFtKGRlc3QsIGluc3RhbmNlKSB7XG5cdGNvbnN0IGJvZHkgPSBpbnN0YW5jZS5ib2R5O1xuXG5cblx0aWYgKGJvZHkgPT09IG51bGwpIHtcblx0XHQvLyBib2R5IGlzIG51bGxcblx0XHRkZXN0LmVuZCgpO1xuXHR9IGVsc2UgaWYgKGlzQmxvYihib2R5KSkge1xuXHRcdGJvZHkuc3RyZWFtKCkucGlwZShkZXN0KTtcblx0fSBlbHNlIGlmIChCdWZmZXIuaXNCdWZmZXIoYm9keSkpIHtcblx0XHQvLyBib2R5IGlzIGJ1ZmZlclxuXHRcdGRlc3Qud3JpdGUoYm9keSk7XG5cdFx0ZGVzdC5lbmQoKTtcblx0fSBlbHNlIHtcblx0XHQvLyBib2R5IGlzIHN0cmVhbVxuXHRcdGJvZHkucGlwZShkZXN0KTtcblx0fVxufVxuXG4vLyBleHBvc2UgUHJvbWlzZVxuQm9keS5Qcm9taXNlID0gZ2xvYmFsLlByb21pc2U7XG5cbi8qKlxuICogaGVhZGVycy5qc1xuICpcbiAqIEhlYWRlcnMgY2xhc3Mgb2ZmZXJzIGNvbnZlbmllbnQgaGVscGVyc1xuICovXG5cbmNvbnN0IGludmFsaWRUb2tlblJlZ2V4ID0gL1teXFxeX2BhLXpBLVpcXC0wLTkhIyQlJicqKy58fl0vO1xuY29uc3QgaW52YWxpZEhlYWRlckNoYXJSZWdleCA9IC9bXlxcdFxceDIwLVxceDdlXFx4ODAtXFx4ZmZdLztcblxuZnVuY3Rpb24gdmFsaWRhdGVOYW1lKG5hbWUpIHtcblx0bmFtZSA9IGAke25hbWV9YDtcblx0aWYgKGludmFsaWRUb2tlblJlZ2V4LnRlc3QobmFtZSkgfHwgbmFtZSA9PT0gJycpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKGAke25hbWV9IGlzIG5vdCBhIGxlZ2FsIEhUVFAgaGVhZGVyIG5hbWVgKTtcblx0fVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVZhbHVlKHZhbHVlKSB7XG5cdHZhbHVlID0gYCR7dmFsdWV9YDtcblx0aWYgKGludmFsaWRIZWFkZXJDaGFyUmVnZXgudGVzdCh2YWx1ZSkpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKGAke3ZhbHVlfSBpcyBub3QgYSBsZWdhbCBIVFRQIGhlYWRlciB2YWx1ZWApO1xuXHR9XG59XG5cbi8qKlxuICogRmluZCB0aGUga2V5IGluIHRoZSBtYXAgb2JqZWN0IGdpdmVuIGEgaGVhZGVyIG5hbWUuXG4gKlxuICogUmV0dXJucyB1bmRlZmluZWQgaWYgbm90IGZvdW5kLlxuICpcbiAqIEBwYXJhbSAgIFN0cmluZyAgbmFtZSAgSGVhZGVyIG5hbWVcbiAqIEByZXR1cm4gIFN0cmluZ3xVbmRlZmluZWRcbiAqL1xuZnVuY3Rpb24gZmluZChtYXAsIG5hbWUpIHtcblx0bmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcblx0Zm9yIChjb25zdCBrZXkgaW4gbWFwKSB7XG5cdFx0aWYgKGtleS50b0xvd2VyQ2FzZSgpID09PSBuYW1lKSB7XG5cdFx0XHRyZXR1cm4ga2V5O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5jb25zdCBNQVAgPSBTeW1ib2woJ21hcCcpO1xuY2xhc3MgSGVhZGVycyB7XG5cdC8qKlxuICAqIEhlYWRlcnMgY2xhc3NcbiAgKlxuICAqIEBwYXJhbSAgIE9iamVjdCAgaGVhZGVycyAgUmVzcG9uc2UgaGVhZGVyc1xuICAqIEByZXR1cm4gIFZvaWRcbiAgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0bGV0IGluaXQgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZDtcblxuXHRcdHRoaXNbTUFQXSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cblx0XHRpZiAoaW5pdCBpbnN0YW5jZW9mIEhlYWRlcnMpIHtcblx0XHRcdGNvbnN0IHJhd0hlYWRlcnMgPSBpbml0LnJhdygpO1xuXHRcdFx0Y29uc3QgaGVhZGVyTmFtZXMgPSBPYmplY3Qua2V5cyhyYXdIZWFkZXJzKTtcblxuXHRcdFx0Zm9yIChjb25zdCBoZWFkZXJOYW1lIG9mIGhlYWRlck5hbWVzKSB7XG5cdFx0XHRcdGZvciAoY29uc3QgdmFsdWUgb2YgcmF3SGVhZGVyc1toZWFkZXJOYW1lXSkge1xuXHRcdFx0XHRcdHRoaXMuYXBwZW5kKGhlYWRlck5hbWUsIHZhbHVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gV2UgZG9uJ3Qgd29ycnkgYWJvdXQgY29udmVydGluZyBwcm9wIHRvIEJ5dGVTdHJpbmcgaGVyZSBhcyBhcHBlbmQoKVxuXHRcdC8vIHdpbGwgaGFuZGxlIGl0LlxuXHRcdGlmIChpbml0ID09IG51bGwpIDsgZWxzZSBpZiAodHlwZW9mIGluaXQgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRjb25zdCBtZXRob2QgPSBpbml0W1N5bWJvbC5pdGVyYXRvcl07XG5cdFx0XHRpZiAobWV0aG9kICE9IG51bGwpIHtcblx0XHRcdFx0aWYgKHR5cGVvZiBtZXRob2QgIT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdIZWFkZXIgcGFpcnMgbXVzdCBiZSBpdGVyYWJsZScpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gc2VxdWVuY2U8c2VxdWVuY2U8Qnl0ZVN0cmluZz4+XG5cdFx0XHRcdC8vIE5vdGU6IHBlciBzcGVjIHdlIGhhdmUgdG8gZmlyc3QgZXhoYXVzdCB0aGUgbGlzdHMgdGhlbiBwcm9jZXNzIHRoZW1cblx0XHRcdFx0Y29uc3QgcGFpcnMgPSBbXTtcblx0XHRcdFx0Zm9yIChjb25zdCBwYWlyIG9mIGluaXQpIHtcblx0XHRcdFx0XHRpZiAodHlwZW9mIHBhaXIgIT09ICdvYmplY3QnIHx8IHR5cGVvZiBwYWlyW1N5bWJvbC5pdGVyYXRvcl0gIT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0VhY2ggaGVhZGVyIHBhaXIgbXVzdCBiZSBpdGVyYWJsZScpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRwYWlycy5wdXNoKEFycmF5LmZyb20ocGFpcikpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Zm9yIChjb25zdCBwYWlyIG9mIHBhaXJzKSB7XG5cdFx0XHRcdFx0aWYgKHBhaXIubGVuZ3RoICE9PSAyKSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFYWNoIGhlYWRlciBwYWlyIG11c3QgYmUgYSBuYW1lL3ZhbHVlIHR1cGxlJyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRoaXMuYXBwZW5kKHBhaXJbMF0sIHBhaXJbMV0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyByZWNvcmQ8Qnl0ZVN0cmluZywgQnl0ZVN0cmluZz5cblx0XHRcdFx0Zm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoaW5pdCkpIHtcblx0XHRcdFx0XHRjb25zdCB2YWx1ZSA9IGluaXRba2V5XTtcblx0XHRcdFx0XHR0aGlzLmFwcGVuZChrZXksIHZhbHVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdQcm92aWRlZCBpbml0aWFsaXplciBtdXN0IGJlIGFuIG9iamVjdCcpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuICAqIFJldHVybiBjb21iaW5lZCBoZWFkZXIgdmFsdWUgZ2l2ZW4gbmFtZVxuICAqXG4gICogQHBhcmFtICAgU3RyaW5nICBuYW1lICBIZWFkZXIgbmFtZVxuICAqIEByZXR1cm4gIE1peGVkXG4gICovXG5cdGdldChuYW1lKSB7XG5cdFx0bmFtZSA9IGAke25hbWV9YDtcblx0XHR2YWxpZGF0ZU5hbWUobmFtZSk7XG5cdFx0Y29uc3Qga2V5ID0gZmluZCh0aGlzW01BUF0sIG5hbWUpO1xuXHRcdGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXNbTUFQXVtrZXldLmpvaW4oJywgJyk7XG5cdH1cblxuXHQvKipcbiAgKiBJdGVyYXRlIG92ZXIgYWxsIGhlYWRlcnNcbiAgKlxuICAqIEBwYXJhbSAgIEZ1bmN0aW9uICBjYWxsYmFjayAgRXhlY3V0ZWQgZm9yIGVhY2ggaXRlbSB3aXRoIHBhcmFtZXRlcnMgKHZhbHVlLCBuYW1lLCB0aGlzQXJnKVxuICAqIEBwYXJhbSAgIEJvb2xlYW4gICB0aGlzQXJnICAgYHRoaXNgIGNvbnRleHQgZm9yIGNhbGxiYWNrIGZ1bmN0aW9uXG4gICogQHJldHVybiAgVm9pZFxuICAqL1xuXHRmb3JFYWNoKGNhbGxiYWNrKSB7XG5cdFx0bGV0IHRoaXNBcmcgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcblxuXHRcdGxldCBwYWlycyA9IGdldEhlYWRlcnModGhpcyk7XG5cdFx0bGV0IGkgPSAwO1xuXHRcdHdoaWxlIChpIDwgcGFpcnMubGVuZ3RoKSB7XG5cdFx0XHR2YXIgX3BhaXJzJGkgPSBwYWlyc1tpXTtcblx0XHRcdGNvbnN0IG5hbWUgPSBfcGFpcnMkaVswXSxcblx0XHRcdCAgICAgIHZhbHVlID0gX3BhaXJzJGlbMV07XG5cblx0XHRcdGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdmFsdWUsIG5hbWUsIHRoaXMpO1xuXHRcdFx0cGFpcnMgPSBnZXRIZWFkZXJzKHRoaXMpO1xuXHRcdFx0aSsrO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuICAqIE92ZXJ3cml0ZSBoZWFkZXIgdmFsdWVzIGdpdmVuIG5hbWVcbiAgKlxuICAqIEBwYXJhbSAgIFN0cmluZyAgbmFtZSAgIEhlYWRlciBuYW1lXG4gICogQHBhcmFtICAgU3RyaW5nICB2YWx1ZSAgSGVhZGVyIHZhbHVlXG4gICogQHJldHVybiAgVm9pZFxuICAqL1xuXHRzZXQobmFtZSwgdmFsdWUpIHtcblx0XHRuYW1lID0gYCR7bmFtZX1gO1xuXHRcdHZhbHVlID0gYCR7dmFsdWV9YDtcblx0XHR2YWxpZGF0ZU5hbWUobmFtZSk7XG5cdFx0dmFsaWRhdGVWYWx1ZSh2YWx1ZSk7XG5cdFx0Y29uc3Qga2V5ID0gZmluZCh0aGlzW01BUF0sIG5hbWUpO1xuXHRcdHRoaXNbTUFQXVtrZXkgIT09IHVuZGVmaW5lZCA/IGtleSA6IG5hbWVdID0gW3ZhbHVlXTtcblx0fVxuXG5cdC8qKlxuICAqIEFwcGVuZCBhIHZhbHVlIG9udG8gZXhpc3RpbmcgaGVhZGVyXG4gICpcbiAgKiBAcGFyYW0gICBTdHJpbmcgIG5hbWUgICBIZWFkZXIgbmFtZVxuICAqIEBwYXJhbSAgIFN0cmluZyAgdmFsdWUgIEhlYWRlciB2YWx1ZVxuICAqIEByZXR1cm4gIFZvaWRcbiAgKi9cblx0YXBwZW5kKG5hbWUsIHZhbHVlKSB7XG5cdFx0bmFtZSA9IGAke25hbWV9YDtcblx0XHR2YWx1ZSA9IGAke3ZhbHVlfWA7XG5cdFx0dmFsaWRhdGVOYW1lKG5hbWUpO1xuXHRcdHZhbGlkYXRlVmFsdWUodmFsdWUpO1xuXHRcdGNvbnN0IGtleSA9IGZpbmQodGhpc1tNQVBdLCBuYW1lKTtcblx0XHRpZiAoa2V5ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXNbTUFQXVtrZXldLnB1c2godmFsdWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzW01BUF1bbmFtZV0gPSBbdmFsdWVdO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuICAqIENoZWNrIGZvciBoZWFkZXIgbmFtZSBleGlzdGVuY2VcbiAgKlxuICAqIEBwYXJhbSAgIFN0cmluZyAgIG5hbWUgIEhlYWRlciBuYW1lXG4gICogQHJldHVybiAgQm9vbGVhblxuICAqL1xuXHRoYXMobmFtZSkge1xuXHRcdG5hbWUgPSBgJHtuYW1lfWA7XG5cdFx0dmFsaWRhdGVOYW1lKG5hbWUpO1xuXHRcdHJldHVybiBmaW5kKHRoaXNbTUFQXSwgbmFtZSkgIT09IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuICAqIERlbGV0ZSBhbGwgaGVhZGVyIHZhbHVlcyBnaXZlbiBuYW1lXG4gICpcbiAgKiBAcGFyYW0gICBTdHJpbmcgIG5hbWUgIEhlYWRlciBuYW1lXG4gICogQHJldHVybiAgVm9pZFxuICAqL1xuXHRkZWxldGUobmFtZSkge1xuXHRcdG5hbWUgPSBgJHtuYW1lfWA7XG5cdFx0dmFsaWRhdGVOYW1lKG5hbWUpO1xuXHRcdGNvbnN0IGtleSA9IGZpbmQodGhpc1tNQVBdLCBuYW1lKTtcblx0XHRpZiAoa2V5ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGRlbGV0ZSB0aGlzW01BUF1ba2V5XTtcblx0XHR9XG5cdH1cblxuXHQvKipcbiAgKiBSZXR1cm4gcmF3IGhlYWRlcnMgKG5vbi1zcGVjIGFwaSlcbiAgKlxuICAqIEByZXR1cm4gIE9iamVjdFxuICAqL1xuXHRyYXcoKSB7XG5cdFx0cmV0dXJuIHRoaXNbTUFQXTtcblx0fVxuXG5cdC8qKlxuICAqIEdldCBhbiBpdGVyYXRvciBvbiBrZXlzLlxuICAqXG4gICogQHJldHVybiAgSXRlcmF0b3JcbiAgKi9cblx0a2V5cygpIHtcblx0XHRyZXR1cm4gY3JlYXRlSGVhZGVyc0l0ZXJhdG9yKHRoaXMsICdrZXknKTtcblx0fVxuXG5cdC8qKlxuICAqIEdldCBhbiBpdGVyYXRvciBvbiB2YWx1ZXMuXG4gICpcbiAgKiBAcmV0dXJuICBJdGVyYXRvclxuICAqL1xuXHR2YWx1ZXMoKSB7XG5cdFx0cmV0dXJuIGNyZWF0ZUhlYWRlcnNJdGVyYXRvcih0aGlzLCAndmFsdWUnKTtcblx0fVxuXG5cdC8qKlxuICAqIEdldCBhbiBpdGVyYXRvciBvbiBlbnRyaWVzLlxuICAqXG4gICogVGhpcyBpcyB0aGUgZGVmYXVsdCBpdGVyYXRvciBvZiB0aGUgSGVhZGVycyBvYmplY3QuXG4gICpcbiAgKiBAcmV0dXJuICBJdGVyYXRvclxuICAqL1xuXHRbU3ltYm9sLml0ZXJhdG9yXSgpIHtcblx0XHRyZXR1cm4gY3JlYXRlSGVhZGVyc0l0ZXJhdG9yKHRoaXMsICdrZXkrdmFsdWUnKTtcblx0fVxufVxuSGVhZGVycy5wcm90b3R5cGUuZW50cmllcyA9IEhlYWRlcnMucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIZWFkZXJzLnByb3RvdHlwZSwgU3ltYm9sLnRvU3RyaW5nVGFnLCB7XG5cdHZhbHVlOiAnSGVhZGVycycsXG5cdHdyaXRhYmxlOiBmYWxzZSxcblx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEhlYWRlcnMucHJvdG90eXBlLCB7XG5cdGdldDogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG5cdGZvckVhY2g6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHRzZXQ6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHRhcHBlbmQ6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHRoYXM6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHRkZWxldGU6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHRrZXlzOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0dmFsdWVzOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0ZW50cmllczogeyBlbnVtZXJhYmxlOiB0cnVlIH1cbn0pO1xuXG5mdW5jdGlvbiBnZXRIZWFkZXJzKGhlYWRlcnMpIHtcblx0bGV0IGtpbmQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICdrZXkrdmFsdWUnO1xuXG5cdGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhoZWFkZXJzW01BUF0pLnNvcnQoKTtcblx0cmV0dXJuIGtleXMubWFwKGtpbmQgPT09ICdrZXknID8gZnVuY3Rpb24gKGspIHtcblx0XHRyZXR1cm4gay50b0xvd2VyQ2FzZSgpO1xuXHR9IDoga2luZCA9PT0gJ3ZhbHVlJyA/IGZ1bmN0aW9uIChrKSB7XG5cdFx0cmV0dXJuIGhlYWRlcnNbTUFQXVtrXS5qb2luKCcsICcpO1xuXHR9IDogZnVuY3Rpb24gKGspIHtcblx0XHRyZXR1cm4gW2sudG9Mb3dlckNhc2UoKSwgaGVhZGVyc1tNQVBdW2tdLmpvaW4oJywgJyldO1xuXHR9KTtcbn1cblxuY29uc3QgSU5URVJOQUwgPSBTeW1ib2woJ2ludGVybmFsJyk7XG5cbmZ1bmN0aW9uIGNyZWF0ZUhlYWRlcnNJdGVyYXRvcih0YXJnZXQsIGtpbmQpIHtcblx0Y29uc3QgaXRlcmF0b3IgPSBPYmplY3QuY3JlYXRlKEhlYWRlcnNJdGVyYXRvclByb3RvdHlwZSk7XG5cdGl0ZXJhdG9yW0lOVEVSTkFMXSA9IHtcblx0XHR0YXJnZXQsXG5cdFx0a2luZCxcblx0XHRpbmRleDogMFxuXHR9O1xuXHRyZXR1cm4gaXRlcmF0b3I7XG59XG5cbmNvbnN0IEhlYWRlcnNJdGVyYXRvclByb3RvdHlwZSA9IE9iamVjdC5zZXRQcm90b3R5cGVPZih7XG5cdG5leHQoKSB7XG5cdFx0Ly8gaXN0YW5idWwgaWdub3JlIGlmXG5cdFx0aWYgKCF0aGlzIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKSAhPT0gSGVhZGVyc0l0ZXJhdG9yUHJvdG90eXBlKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdWYWx1ZSBvZiBgdGhpc2AgaXMgbm90IGEgSGVhZGVyc0l0ZXJhdG9yJyk7XG5cdFx0fVxuXG5cdFx0dmFyIF9JTlRFUk5BTCA9IHRoaXNbSU5URVJOQUxdO1xuXHRcdGNvbnN0IHRhcmdldCA9IF9JTlRFUk5BTC50YXJnZXQsXG5cdFx0ICAgICAga2luZCA9IF9JTlRFUk5BTC5raW5kLFxuXHRcdCAgICAgIGluZGV4ID0gX0lOVEVSTkFMLmluZGV4O1xuXG5cdFx0Y29uc3QgdmFsdWVzID0gZ2V0SGVhZGVycyh0YXJnZXQsIGtpbmQpO1xuXHRcdGNvbnN0IGxlbiA9IHZhbHVlcy5sZW5ndGg7XG5cdFx0aWYgKGluZGV4ID49IGxlbikge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0dmFsdWU6IHVuZGVmaW5lZCxcblx0XHRcdFx0ZG9uZTogdHJ1ZVxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHR0aGlzW0lOVEVSTkFMXS5pbmRleCA9IGluZGV4ICsgMTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHR2YWx1ZTogdmFsdWVzW2luZGV4XSxcblx0XHRcdGRvbmU6IGZhbHNlXG5cdFx0fTtcblx0fVxufSwgT2JqZWN0LmdldFByb3RvdHlwZU9mKE9iamVjdC5nZXRQcm90b3R5cGVPZihbXVtTeW1ib2wuaXRlcmF0b3JdKCkpKSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIZWFkZXJzSXRlcmF0b3JQcm90b3R5cGUsIFN5bWJvbC50b1N0cmluZ1RhZywge1xuXHR2YWx1ZTogJ0hlYWRlcnNJdGVyYXRvcicsXG5cdHdyaXRhYmxlOiBmYWxzZSxcblx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbi8qKlxuICogRXhwb3J0IHRoZSBIZWFkZXJzIG9iamVjdCBpbiBhIGZvcm0gdGhhdCBOb2RlLmpzIGNhbiBjb25zdW1lLlxuICpcbiAqIEBwYXJhbSAgIEhlYWRlcnMgIGhlYWRlcnNcbiAqIEByZXR1cm4gIE9iamVjdFxuICovXG5mdW5jdGlvbiBleHBvcnROb2RlQ29tcGF0aWJsZUhlYWRlcnMoaGVhZGVycykge1xuXHRjb25zdCBvYmogPSBPYmplY3QuYXNzaWduKHsgX19wcm90b19fOiBudWxsIH0sIGhlYWRlcnNbTUFQXSk7XG5cblx0Ly8gaHR0cC5yZXF1ZXN0KCkgb25seSBzdXBwb3J0cyBzdHJpbmcgYXMgSG9zdCBoZWFkZXIuIFRoaXMgaGFjayBtYWtlc1xuXHQvLyBzcGVjaWZ5aW5nIGN1c3RvbSBIb3N0IGhlYWRlciBwb3NzaWJsZS5cblx0Y29uc3QgaG9zdEhlYWRlcktleSA9IGZpbmQoaGVhZGVyc1tNQVBdLCAnSG9zdCcpO1xuXHRpZiAoaG9zdEhlYWRlcktleSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0b2JqW2hvc3RIZWFkZXJLZXldID0gb2JqW2hvc3RIZWFkZXJLZXldWzBdO1xuXHR9XG5cblx0cmV0dXJuIG9iajtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBIZWFkZXJzIG9iamVjdCBmcm9tIGFuIG9iamVjdCBvZiBoZWFkZXJzLCBpZ25vcmluZyB0aG9zZSB0aGF0IGRvXG4gKiBub3QgY29uZm9ybSB0byBIVFRQIGdyYW1tYXIgcHJvZHVjdGlvbnMuXG4gKlxuICogQHBhcmFtICAgT2JqZWN0ICBvYmogIE9iamVjdCBvZiBoZWFkZXJzXG4gKiBAcmV0dXJuICBIZWFkZXJzXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUhlYWRlcnNMZW5pZW50KG9iaikge1xuXHRjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKTtcblx0Zm9yIChjb25zdCBuYW1lIG9mIE9iamVjdC5rZXlzKG9iaikpIHtcblx0XHRpZiAoaW52YWxpZFRva2VuUmVnZXgudGVzdChuYW1lKSkge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXHRcdGlmIChBcnJheS5pc0FycmF5KG9ialtuYW1lXSkpIHtcblx0XHRcdGZvciAoY29uc3QgdmFsIG9mIG9ialtuYW1lXSkge1xuXHRcdFx0XHRpZiAoaW52YWxpZEhlYWRlckNoYXJSZWdleC50ZXN0KHZhbCkpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoaGVhZGVyc1tNQVBdW25hbWVdID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRoZWFkZXJzW01BUF1bbmFtZV0gPSBbdmFsXTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRoZWFkZXJzW01BUF1bbmFtZV0ucHVzaCh2YWwpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICghaW52YWxpZEhlYWRlckNoYXJSZWdleC50ZXN0KG9ialtuYW1lXSkpIHtcblx0XHRcdGhlYWRlcnNbTUFQXVtuYW1lXSA9IFtvYmpbbmFtZV1dO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gaGVhZGVycztcbn1cblxuY29uc3QgSU5URVJOQUxTJDEgPSBTeW1ib2woJ1Jlc3BvbnNlIGludGVybmFscycpO1xuXG4vLyBmaXggYW4gaXNzdWUgd2hlcmUgXCJTVEFUVVNfQ09ERVNcIiBhcmVuJ3QgYSBuYW1lZCBleHBvcnQgZm9yIG5vZGUgPDEwXG5jb25zdCBTVEFUVVNfQ09ERVMgPSBodHRwLlNUQVRVU19DT0RFUztcblxuLyoqXG4gKiBSZXNwb25zZSBjbGFzc1xuICpcbiAqIEBwYXJhbSAgIFN0cmVhbSAgYm9keSAgUmVhZGFibGUgc3RyZWFtXG4gKiBAcGFyYW0gICBPYmplY3QgIG9wdHMgIFJlc3BvbnNlIG9wdGlvbnNcbiAqIEByZXR1cm4gIFZvaWRcbiAqL1xuY2xhc3MgUmVzcG9uc2Uge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRsZXQgYm9keSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogbnVsbDtcblx0XHRsZXQgb3B0cyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cblx0XHRCb2R5LmNhbGwodGhpcywgYm9keSwgb3B0cyk7XG5cblx0XHRjb25zdCBzdGF0dXMgPSBvcHRzLnN0YXR1cyB8fCAyMDA7XG5cdFx0Y29uc3QgaGVhZGVycyA9IG5ldyBIZWFkZXJzKG9wdHMuaGVhZGVycyk7XG5cblx0XHRpZiAoYm9keSAhPSBudWxsICYmICFoZWFkZXJzLmhhcygnQ29udGVudC1UeXBlJykpIHtcblx0XHRcdGNvbnN0IGNvbnRlbnRUeXBlID0gZXh0cmFjdENvbnRlbnRUeXBlKGJvZHkpO1xuXHRcdFx0aWYgKGNvbnRlbnRUeXBlKSB7XG5cdFx0XHRcdGhlYWRlcnMuYXBwZW5kKCdDb250ZW50LVR5cGUnLCBjb250ZW50VHlwZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpc1tJTlRFUk5BTFMkMV0gPSB7XG5cdFx0XHR1cmw6IG9wdHMudXJsLFxuXHRcdFx0c3RhdHVzLFxuXHRcdFx0c3RhdHVzVGV4dDogb3B0cy5zdGF0dXNUZXh0IHx8IFNUQVRVU19DT0RFU1tzdGF0dXNdLFxuXHRcdFx0aGVhZGVycyxcblx0XHRcdGNvdW50ZXI6IG9wdHMuY291bnRlclxuXHRcdH07XG5cdH1cblxuXHRnZXQgdXJsKCkge1xuXHRcdHJldHVybiB0aGlzW0lOVEVSTkFMUyQxXS51cmwgfHwgJyc7XG5cdH1cblxuXHRnZXQgc3RhdHVzKCkge1xuXHRcdHJldHVybiB0aGlzW0lOVEVSTkFMUyQxXS5zdGF0dXM7XG5cdH1cblxuXHQvKipcbiAgKiBDb252ZW5pZW5jZSBwcm9wZXJ0eSByZXByZXNlbnRpbmcgaWYgdGhlIHJlcXVlc3QgZW5kZWQgbm9ybWFsbHlcbiAgKi9cblx0Z2V0IG9rKCkge1xuXHRcdHJldHVybiB0aGlzW0lOVEVSTkFMUyQxXS5zdGF0dXMgPj0gMjAwICYmIHRoaXNbSU5URVJOQUxTJDFdLnN0YXR1cyA8IDMwMDtcblx0fVxuXG5cdGdldCByZWRpcmVjdGVkKCkge1xuXHRcdHJldHVybiB0aGlzW0lOVEVSTkFMUyQxXS5jb3VudGVyID4gMDtcblx0fVxuXG5cdGdldCBzdGF0dXNUZXh0KCkge1xuXHRcdHJldHVybiB0aGlzW0lOVEVSTkFMUyQxXS5zdGF0dXNUZXh0O1xuXHR9XG5cblx0Z2V0IGhlYWRlcnMoKSB7XG5cdFx0cmV0dXJuIHRoaXNbSU5URVJOQUxTJDFdLmhlYWRlcnM7XG5cdH1cblxuXHQvKipcbiAgKiBDbG9uZSB0aGlzIHJlc3BvbnNlXG4gICpcbiAgKiBAcmV0dXJuICBSZXNwb25zZVxuICAqL1xuXHRjbG9uZSgpIHtcblx0XHRyZXR1cm4gbmV3IFJlc3BvbnNlKGNsb25lKHRoaXMpLCB7XG5cdFx0XHR1cmw6IHRoaXMudXJsLFxuXHRcdFx0c3RhdHVzOiB0aGlzLnN0YXR1cyxcblx0XHRcdHN0YXR1c1RleHQ6IHRoaXMuc3RhdHVzVGV4dCxcblx0XHRcdGhlYWRlcnM6IHRoaXMuaGVhZGVycyxcblx0XHRcdG9rOiB0aGlzLm9rLFxuXHRcdFx0cmVkaXJlY3RlZDogdGhpcy5yZWRpcmVjdGVkXG5cdFx0fSk7XG5cdH1cbn1cblxuQm9keS5taXhJbihSZXNwb25zZS5wcm90b3R5cGUpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhSZXNwb25zZS5wcm90b3R5cGUsIHtcblx0dXJsOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0c3RhdHVzOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0b2s6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHRyZWRpcmVjdGVkOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0c3RhdHVzVGV4dDogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG5cdGhlYWRlcnM6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHRjbG9uZTogeyBlbnVtZXJhYmxlOiB0cnVlIH1cbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoUmVzcG9uc2UucHJvdG90eXBlLCBTeW1ib2wudG9TdHJpbmdUYWcsIHtcblx0dmFsdWU6ICdSZXNwb25zZScsXG5cdHdyaXRhYmxlOiBmYWxzZSxcblx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbmNvbnN0IElOVEVSTkFMUyQyID0gU3ltYm9sKCdSZXF1ZXN0IGludGVybmFscycpO1xuY29uc3QgVVJMID0gVXJsLlVSTCB8fCB3aGF0d2dVcmwuVVJMO1xuXG4vLyBmaXggYW4gaXNzdWUgd2hlcmUgXCJmb3JtYXRcIiwgXCJwYXJzZVwiIGFyZW4ndCBhIG5hbWVkIGV4cG9ydCBmb3Igbm9kZSA8MTBcbmNvbnN0IHBhcnNlX3VybCA9IFVybC5wYXJzZTtcbmNvbnN0IGZvcm1hdF91cmwgPSBVcmwuZm9ybWF0O1xuXG4vKipcbiAqIFdyYXBwZXIgYXJvdW5kIGBuZXcgVVJMYCB0byBoYW5kbGUgYXJiaXRyYXJ5IFVSTHNcbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9IHVybFN0clxuICogQHJldHVybiB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gcGFyc2VVUkwodXJsU3RyKSB7XG5cdC8qXG4gXHRDaGVjayB3aGV0aGVyIHRoZSBVUkwgaXMgYWJzb2x1dGUgb3Igbm90XG4gXHRcdFNjaGVtZTogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi0zLjFcbiBcdEFic29sdXRlIFVSTDogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi00LjNcbiAqL1xuXHRpZiAoL15bYS16QS1aXVthLXpBLVpcXGQrXFwtLl0qOi8uZXhlYyh1cmxTdHIpKSB7XG5cdFx0dXJsU3RyID0gbmV3IFVSTCh1cmxTdHIpLnRvU3RyaW5nKCk7XG5cdH1cblxuXHQvLyBGYWxsYmFjayB0byBvbGQgaW1wbGVtZW50YXRpb24gZm9yIGFyYml0cmFyeSBVUkxzXG5cdHJldHVybiBwYXJzZV91cmwodXJsU3RyKTtcbn1cblxuY29uc3Qgc3RyZWFtRGVzdHJ1Y3Rpb25TdXBwb3J0ZWQgPSAnZGVzdHJveScgaW4gU3RyZWFtLlJlYWRhYmxlLnByb3RvdHlwZTtcblxuLyoqXG4gKiBDaGVjayBpZiBhIHZhbHVlIGlzIGFuIGluc3RhbmNlIG9mIFJlcXVlc3QuXG4gKlxuICogQHBhcmFtICAgTWl4ZWQgICBpbnB1dFxuICogQHJldHVybiAgQm9vbGVhblxuICovXG5mdW5jdGlvbiBpc1JlcXVlc3QoaW5wdXQpIHtcblx0cmV0dXJuIHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIGlucHV0W0lOVEVSTkFMUyQyXSA9PT0gJ29iamVjdCc7XG59XG5cbmZ1bmN0aW9uIGlzQWJvcnRTaWduYWwoc2lnbmFsKSB7XG5cdGNvbnN0IHByb3RvID0gc2lnbmFsICYmIHR5cGVvZiBzaWduYWwgPT09ICdvYmplY3QnICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZihzaWduYWwpO1xuXHRyZXR1cm4gISEocHJvdG8gJiYgcHJvdG8uY29uc3RydWN0b3IubmFtZSA9PT0gJ0Fib3J0U2lnbmFsJyk7XG59XG5cbi8qKlxuICogUmVxdWVzdCBjbGFzc1xuICpcbiAqIEBwYXJhbSAgIE1peGVkICAgaW5wdXQgIFVybCBvciBSZXF1ZXN0IGluc3RhbmNlXG4gKiBAcGFyYW0gICBPYmplY3QgIGluaXQgICBDdXN0b20gb3B0aW9uc1xuICogQHJldHVybiAgVm9pZFxuICovXG5jbGFzcyBSZXF1ZXN0IHtcblx0Y29uc3RydWN0b3IoaW5wdXQpIHtcblx0XHRsZXQgaW5pdCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cblx0XHRsZXQgcGFyc2VkVVJMO1xuXG5cdFx0Ly8gbm9ybWFsaXplIGlucHV0XG5cdFx0aWYgKCFpc1JlcXVlc3QoaW5wdXQpKSB7XG5cdFx0XHRpZiAoaW5wdXQgJiYgaW5wdXQuaHJlZikge1xuXHRcdFx0XHQvLyBpbiBvcmRlciB0byBzdXBwb3J0IE5vZGUuanMnIFVybCBvYmplY3RzOyB0aG91Z2ggV0hBVFdHJ3MgVVJMIG9iamVjdHNcblx0XHRcdFx0Ly8gd2lsbCBmYWxsIGludG8gdGhpcyBicmFuY2ggYWxzbyAoc2luY2UgdGhlaXIgYHRvU3RyaW5nKClgIHdpbGwgcmV0dXJuXG5cdFx0XHRcdC8vIGBocmVmYCBwcm9wZXJ0eSBhbnl3YXkpXG5cdFx0XHRcdHBhcnNlZFVSTCA9IHBhcnNlVVJMKGlucHV0LmhyZWYpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gY29lcmNlIGlucHV0IHRvIGEgc3RyaW5nIGJlZm9yZSBhdHRlbXB0aW5nIHRvIHBhcnNlXG5cdFx0XHRcdHBhcnNlZFVSTCA9IHBhcnNlVVJMKGAke2lucHV0fWApO1xuXHRcdFx0fVxuXHRcdFx0aW5wdXQgPSB7fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cGFyc2VkVVJMID0gcGFyc2VVUkwoaW5wdXQudXJsKTtcblx0XHR9XG5cblx0XHRsZXQgbWV0aG9kID0gaW5pdC5tZXRob2QgfHwgaW5wdXQubWV0aG9kIHx8ICdHRVQnO1xuXHRcdG1ldGhvZCA9IG1ldGhvZC50b1VwcGVyQ2FzZSgpO1xuXG5cdFx0aWYgKChpbml0LmJvZHkgIT0gbnVsbCB8fCBpc1JlcXVlc3QoaW5wdXQpICYmIGlucHV0LmJvZHkgIT09IG51bGwpICYmIChtZXRob2QgPT09ICdHRVQnIHx8IG1ldGhvZCA9PT0gJ0hFQUQnKSkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignUmVxdWVzdCB3aXRoIEdFVC9IRUFEIG1ldGhvZCBjYW5ub3QgaGF2ZSBib2R5Jyk7XG5cdFx0fVxuXG5cdFx0bGV0IGlucHV0Qm9keSA9IGluaXQuYm9keSAhPSBudWxsID8gaW5pdC5ib2R5IDogaXNSZXF1ZXN0KGlucHV0KSAmJiBpbnB1dC5ib2R5ICE9PSBudWxsID8gY2xvbmUoaW5wdXQpIDogbnVsbDtcblxuXHRcdEJvZHkuY2FsbCh0aGlzLCBpbnB1dEJvZHksIHtcblx0XHRcdHRpbWVvdXQ6IGluaXQudGltZW91dCB8fCBpbnB1dC50aW1lb3V0IHx8IDAsXG5cdFx0XHRzaXplOiBpbml0LnNpemUgfHwgaW5wdXQuc2l6ZSB8fCAwXG5cdFx0fSk7XG5cblx0XHRjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoaW5pdC5oZWFkZXJzIHx8IGlucHV0LmhlYWRlcnMgfHwge30pO1xuXG5cdFx0aWYgKGlucHV0Qm9keSAhPSBudWxsICYmICFoZWFkZXJzLmhhcygnQ29udGVudC1UeXBlJykpIHtcblx0XHRcdGNvbnN0IGNvbnRlbnRUeXBlID0gZXh0cmFjdENvbnRlbnRUeXBlKGlucHV0Qm9keSk7XG5cdFx0XHRpZiAoY29udGVudFR5cGUpIHtcblx0XHRcdFx0aGVhZGVycy5hcHBlbmQoJ0NvbnRlbnQtVHlwZScsIGNvbnRlbnRUeXBlKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRsZXQgc2lnbmFsID0gaXNSZXF1ZXN0KGlucHV0KSA/IGlucHV0LnNpZ25hbCA6IG51bGw7XG5cdFx0aWYgKCdzaWduYWwnIGluIGluaXQpIHNpZ25hbCA9IGluaXQuc2lnbmFsO1xuXG5cdFx0aWYgKHNpZ25hbCAhPSBudWxsICYmICFpc0Fib3J0U2lnbmFsKHNpZ25hbCkpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIHNpZ25hbCB0byBiZSBhbiBpbnN0YW5jZW9mIEFib3J0U2lnbmFsJyk7XG5cdFx0fVxuXG5cdFx0dGhpc1tJTlRFUk5BTFMkMl0gPSB7XG5cdFx0XHRtZXRob2QsXG5cdFx0XHRyZWRpcmVjdDogaW5pdC5yZWRpcmVjdCB8fCBpbnB1dC5yZWRpcmVjdCB8fCAnZm9sbG93Jyxcblx0XHRcdGhlYWRlcnMsXG5cdFx0XHRwYXJzZWRVUkwsXG5cdFx0XHRzaWduYWxcblx0XHR9O1xuXG5cdFx0Ly8gbm9kZS1mZXRjaC1vbmx5IG9wdGlvbnNcblx0XHR0aGlzLmZvbGxvdyA9IGluaXQuZm9sbG93ICE9PSB1bmRlZmluZWQgPyBpbml0LmZvbGxvdyA6IGlucHV0LmZvbGxvdyAhPT0gdW5kZWZpbmVkID8gaW5wdXQuZm9sbG93IDogMjA7XG5cdFx0dGhpcy5jb21wcmVzcyA9IGluaXQuY29tcHJlc3MgIT09IHVuZGVmaW5lZCA/IGluaXQuY29tcHJlc3MgOiBpbnB1dC5jb21wcmVzcyAhPT0gdW5kZWZpbmVkID8gaW5wdXQuY29tcHJlc3MgOiB0cnVlO1xuXHRcdHRoaXMuY291bnRlciA9IGluaXQuY291bnRlciB8fCBpbnB1dC5jb3VudGVyIHx8IDA7XG5cdFx0dGhpcy5hZ2VudCA9IGluaXQuYWdlbnQgfHwgaW5wdXQuYWdlbnQ7XG5cdH1cblxuXHRnZXQgbWV0aG9kKCkge1xuXHRcdHJldHVybiB0aGlzW0lOVEVSTkFMUyQyXS5tZXRob2Q7XG5cdH1cblxuXHRnZXQgdXJsKCkge1xuXHRcdHJldHVybiBmb3JtYXRfdXJsKHRoaXNbSU5URVJOQUxTJDJdLnBhcnNlZFVSTCk7XG5cdH1cblxuXHRnZXQgaGVhZGVycygpIHtcblx0XHRyZXR1cm4gdGhpc1tJTlRFUk5BTFMkMl0uaGVhZGVycztcblx0fVxuXG5cdGdldCByZWRpcmVjdCgpIHtcblx0XHRyZXR1cm4gdGhpc1tJTlRFUk5BTFMkMl0ucmVkaXJlY3Q7XG5cdH1cblxuXHRnZXQgc2lnbmFsKCkge1xuXHRcdHJldHVybiB0aGlzW0lOVEVSTkFMUyQyXS5zaWduYWw7XG5cdH1cblxuXHQvKipcbiAgKiBDbG9uZSB0aGlzIHJlcXVlc3RcbiAgKlxuICAqIEByZXR1cm4gIFJlcXVlc3RcbiAgKi9cblx0Y2xvbmUoKSB7XG5cdFx0cmV0dXJuIG5ldyBSZXF1ZXN0KHRoaXMpO1xuXHR9XG59XG5cbkJvZHkubWl4SW4oUmVxdWVzdC5wcm90b3R5cGUpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoUmVxdWVzdC5wcm90b3R5cGUsIFN5bWJvbC50b1N0cmluZ1RhZywge1xuXHR2YWx1ZTogJ1JlcXVlc3QnLFxuXHR3cml0YWJsZTogZmFsc2UsXG5cdGVudW1lcmFibGU6IGZhbHNlLFxuXHRjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhSZXF1ZXN0LnByb3RvdHlwZSwge1xuXHRtZXRob2Q6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHR1cmw6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHRoZWFkZXJzOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0cmVkaXJlY3Q6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHRjbG9uZTogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG5cdHNpZ25hbDogeyBlbnVtZXJhYmxlOiB0cnVlIH1cbn0pO1xuXG4vKipcbiAqIENvbnZlcnQgYSBSZXF1ZXN0IHRvIE5vZGUuanMgaHR0cCByZXF1ZXN0IG9wdGlvbnMuXG4gKlxuICogQHBhcmFtICAgUmVxdWVzdCAgQSBSZXF1ZXN0IGluc3RhbmNlXG4gKiBAcmV0dXJuICBPYmplY3QgICBUaGUgb3B0aW9ucyBvYmplY3QgdG8gYmUgcGFzc2VkIHRvIGh0dHAucmVxdWVzdFxuICovXG5mdW5jdGlvbiBnZXROb2RlUmVxdWVzdE9wdGlvbnMocmVxdWVzdCkge1xuXHRjb25zdCBwYXJzZWRVUkwgPSByZXF1ZXN0W0lOVEVSTkFMUyQyXS5wYXJzZWRVUkw7XG5cdGNvbnN0IGhlYWRlcnMgPSBuZXcgSGVhZGVycyhyZXF1ZXN0W0lOVEVSTkFMUyQyXS5oZWFkZXJzKTtcblxuXHQvLyBmZXRjaCBzdGVwIDEuM1xuXHRpZiAoIWhlYWRlcnMuaGFzKCdBY2NlcHQnKSkge1xuXHRcdGhlYWRlcnMuc2V0KCdBY2NlcHQnLCAnKi8qJyk7XG5cdH1cblxuXHQvLyBCYXNpYyBmZXRjaFxuXHRpZiAoIXBhcnNlZFVSTC5wcm90b2NvbCB8fCAhcGFyc2VkVVJMLmhvc3RuYW1lKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignT25seSBhYnNvbHV0ZSBVUkxzIGFyZSBzdXBwb3J0ZWQnKTtcblx0fVxuXG5cdGlmICghL15odHRwcz86JC8udGVzdChwYXJzZWRVUkwucHJvdG9jb2wpKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignT25seSBIVFRQKFMpIHByb3RvY29scyBhcmUgc3VwcG9ydGVkJyk7XG5cdH1cblxuXHRpZiAocmVxdWVzdC5zaWduYWwgJiYgcmVxdWVzdC5ib2R5IGluc3RhbmNlb2YgU3RyZWFtLlJlYWRhYmxlICYmICFzdHJlYW1EZXN0cnVjdGlvblN1cHBvcnRlZCkge1xuXHRcdHRocm93IG5ldyBFcnJvcignQ2FuY2VsbGF0aW9uIG9mIHN0cmVhbWVkIHJlcXVlc3RzIHdpdGggQWJvcnRTaWduYWwgaXMgbm90IHN1cHBvcnRlZCBpbiBub2RlIDwgOCcpO1xuXHR9XG5cblx0Ly8gSFRUUC1uZXR3b3JrLW9yLWNhY2hlIGZldGNoIHN0ZXBzIDIuNC0yLjdcblx0bGV0IGNvbnRlbnRMZW5ndGhWYWx1ZSA9IG51bGw7XG5cdGlmIChyZXF1ZXN0LmJvZHkgPT0gbnVsbCAmJiAvXihQT1NUfFBVVCkkL2kudGVzdChyZXF1ZXN0Lm1ldGhvZCkpIHtcblx0XHRjb250ZW50TGVuZ3RoVmFsdWUgPSAnMCc7XG5cdH1cblx0aWYgKHJlcXVlc3QuYm9keSAhPSBudWxsKSB7XG5cdFx0Y29uc3QgdG90YWxCeXRlcyA9IGdldFRvdGFsQnl0ZXMocmVxdWVzdCk7XG5cdFx0aWYgKHR5cGVvZiB0b3RhbEJ5dGVzID09PSAnbnVtYmVyJykge1xuXHRcdFx0Y29udGVudExlbmd0aFZhbHVlID0gU3RyaW5nKHRvdGFsQnl0ZXMpO1xuXHRcdH1cblx0fVxuXHRpZiAoY29udGVudExlbmd0aFZhbHVlKSB7XG5cdFx0aGVhZGVycy5zZXQoJ0NvbnRlbnQtTGVuZ3RoJywgY29udGVudExlbmd0aFZhbHVlKTtcblx0fVxuXG5cdC8vIEhUVFAtbmV0d29yay1vci1jYWNoZSBmZXRjaCBzdGVwIDIuMTFcblx0aWYgKCFoZWFkZXJzLmhhcygnVXNlci1BZ2VudCcpKSB7XG5cdFx0aGVhZGVycy5zZXQoJ1VzZXItQWdlbnQnLCAnbm9kZS1mZXRjaC8xLjAgKCtodHRwczovL2dpdGh1Yi5jb20vYml0aW5uL25vZGUtZmV0Y2gpJyk7XG5cdH1cblxuXHQvLyBIVFRQLW5ldHdvcmstb3ItY2FjaGUgZmV0Y2ggc3RlcCAyLjE1XG5cdGlmIChyZXF1ZXN0LmNvbXByZXNzICYmICFoZWFkZXJzLmhhcygnQWNjZXB0LUVuY29kaW5nJykpIHtcblx0XHRoZWFkZXJzLnNldCgnQWNjZXB0LUVuY29kaW5nJywgJ2d6aXAsZGVmbGF0ZScpO1xuXHR9XG5cblx0bGV0IGFnZW50ID0gcmVxdWVzdC5hZ2VudDtcblx0aWYgKHR5cGVvZiBhZ2VudCA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdGFnZW50ID0gYWdlbnQocGFyc2VkVVJMKTtcblx0fVxuXG5cdC8vIEhUVFAtbmV0d29yayBmZXRjaCBzdGVwIDQuMlxuXHQvLyBjaHVua2VkIGVuY29kaW5nIGlzIGhhbmRsZWQgYnkgTm9kZS5qc1xuXG5cdHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBwYXJzZWRVUkwsIHtcblx0XHRtZXRob2Q6IHJlcXVlc3QubWV0aG9kLFxuXHRcdGhlYWRlcnM6IGV4cG9ydE5vZGVDb21wYXRpYmxlSGVhZGVycyhoZWFkZXJzKSxcblx0XHRhZ2VudFxuXHR9KTtcbn1cblxuLyoqXG4gKiBhYm9ydC1lcnJvci5qc1xuICpcbiAqIEFib3J0RXJyb3IgaW50ZXJmYWNlIGZvciBjYW5jZWxsZWQgcmVxdWVzdHNcbiAqL1xuXG4vKipcbiAqIENyZWF0ZSBBYm9ydEVycm9yIGluc3RhbmNlXG4gKlxuICogQHBhcmFtICAgU3RyaW5nICAgICAgbWVzc2FnZSAgICAgIEVycm9yIG1lc3NhZ2UgZm9yIGh1bWFuXG4gKiBAcmV0dXJuICBBYm9ydEVycm9yXG4gKi9cbmZ1bmN0aW9uIEFib3J0RXJyb3IobWVzc2FnZSkge1xuICBFcnJvci5jYWxsKHRoaXMsIG1lc3NhZ2UpO1xuXG4gIHRoaXMudHlwZSA9ICdhYm9ydGVkJztcbiAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcblxuICAvLyBoaWRlIGN1c3RvbSBlcnJvciBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGZyb20gZW5kLXVzZXJzXG4gIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xufVxuXG5BYm9ydEVycm9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTtcbkFib3J0RXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQWJvcnRFcnJvcjtcbkFib3J0RXJyb3IucHJvdG90eXBlLm5hbWUgPSAnQWJvcnRFcnJvcic7XG5cbmNvbnN0IFVSTCQxID0gVXJsLlVSTCB8fCB3aGF0d2dVcmwuVVJMO1xuXG4vLyBmaXggYW4gaXNzdWUgd2hlcmUgXCJQYXNzVGhyb3VnaFwiLCBcInJlc29sdmVcIiBhcmVuJ3QgYSBuYW1lZCBleHBvcnQgZm9yIG5vZGUgPDEwXG5jb25zdCBQYXNzVGhyb3VnaCQxID0gU3RyZWFtLlBhc3NUaHJvdWdoO1xuXG5jb25zdCBpc0RvbWFpbk9yU3ViZG9tYWluID0gZnVuY3Rpb24gaXNEb21haW5PclN1YmRvbWFpbihkZXN0aW5hdGlvbiwgb3JpZ2luYWwpIHtcblx0Y29uc3Qgb3JpZyA9IG5ldyBVUkwkMShvcmlnaW5hbCkuaG9zdG5hbWU7XG5cdGNvbnN0IGRlc3QgPSBuZXcgVVJMJDEoZGVzdGluYXRpb24pLmhvc3RuYW1lO1xuXG5cdHJldHVybiBvcmlnID09PSBkZXN0IHx8IG9yaWdbb3JpZy5sZW5ndGggLSBkZXN0Lmxlbmd0aCAtIDFdID09PSAnLicgJiYgb3JpZy5lbmRzV2l0aChkZXN0KTtcbn07XG5cbi8qKlxuICogaXNTYW1lUHJvdG9jb2wgcmVwb3J0cyB3aGV0aGVyIHRoZSB0d28gcHJvdmlkZWQgVVJMcyB1c2UgdGhlIHNhbWUgcHJvdG9jb2wuXG4gKlxuICogQm90aCBkb21haW5zIG11c3QgYWxyZWFkeSBiZSBpbiBjYW5vbmljYWwgZm9ybS5cbiAqIEBwYXJhbSB7c3RyaW5nfFVSTH0gb3JpZ2luYWxcbiAqIEBwYXJhbSB7c3RyaW5nfFVSTH0gZGVzdGluYXRpb25cbiAqL1xuY29uc3QgaXNTYW1lUHJvdG9jb2wgPSBmdW5jdGlvbiBpc1NhbWVQcm90b2NvbChkZXN0aW5hdGlvbiwgb3JpZ2luYWwpIHtcblx0Y29uc3Qgb3JpZyA9IG5ldyBVUkwkMShvcmlnaW5hbCkucHJvdG9jb2w7XG5cdGNvbnN0IGRlc3QgPSBuZXcgVVJMJDEoZGVzdGluYXRpb24pLnByb3RvY29sO1xuXG5cdHJldHVybiBvcmlnID09PSBkZXN0O1xufTtcblxuLyoqXG4gKiBGZXRjaCBmdW5jdGlvblxuICpcbiAqIEBwYXJhbSAgIE1peGVkICAgIHVybCAgIEFic29sdXRlIHVybCBvciBSZXF1ZXN0IGluc3RhbmNlXG4gKiBAcGFyYW0gICBPYmplY3QgICBvcHRzICBGZXRjaCBvcHRpb25zXG4gKiBAcmV0dXJuICBQcm9taXNlXG4gKi9cbmZ1bmN0aW9uIGZldGNoKHVybCwgb3B0cykge1xuXG5cdC8vIGFsbG93IGN1c3RvbSBwcm9taXNlXG5cdGlmICghZmV0Y2guUHJvbWlzZSkge1xuXHRcdHRocm93IG5ldyBFcnJvcignbmF0aXZlIHByb21pc2UgbWlzc2luZywgc2V0IGZldGNoLlByb21pc2UgdG8geW91ciBmYXZvcml0ZSBhbHRlcm5hdGl2ZScpO1xuXHR9XG5cblx0Qm9keS5Qcm9taXNlID0gZmV0Y2guUHJvbWlzZTtcblxuXHQvLyB3cmFwIGh0dHAucmVxdWVzdCBpbnRvIGZldGNoXG5cdHJldHVybiBuZXcgZmV0Y2guUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdFx0Ly8gYnVpbGQgcmVxdWVzdCBvYmplY3Rcblx0XHRjb25zdCByZXF1ZXN0ID0gbmV3IFJlcXVlc3QodXJsLCBvcHRzKTtcblx0XHRjb25zdCBvcHRpb25zID0gZ2V0Tm9kZVJlcXVlc3RPcHRpb25zKHJlcXVlc3QpO1xuXG5cdFx0Y29uc3Qgc2VuZCA9IChvcHRpb25zLnByb3RvY29sID09PSAnaHR0cHM6JyA/IGh0dHBzIDogaHR0cCkucmVxdWVzdDtcblx0XHRjb25zdCBzaWduYWwgPSByZXF1ZXN0LnNpZ25hbDtcblxuXHRcdGxldCByZXNwb25zZSA9IG51bGw7XG5cblx0XHRjb25zdCBhYm9ydCA9IGZ1bmN0aW9uIGFib3J0KCkge1xuXHRcdFx0bGV0IGVycm9yID0gbmV3IEFib3J0RXJyb3IoJ1RoZSB1c2VyIGFib3J0ZWQgYSByZXF1ZXN0LicpO1xuXHRcdFx0cmVqZWN0KGVycm9yKTtcblx0XHRcdGlmIChyZXF1ZXN0LmJvZHkgJiYgcmVxdWVzdC5ib2R5IGluc3RhbmNlb2YgU3RyZWFtLlJlYWRhYmxlKSB7XG5cdFx0XHRcdGRlc3Ryb3lTdHJlYW0ocmVxdWVzdC5ib2R5LCBlcnJvcik7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIXJlc3BvbnNlIHx8ICFyZXNwb25zZS5ib2R5KSByZXR1cm47XG5cdFx0XHRyZXNwb25zZS5ib2R5LmVtaXQoJ2Vycm9yJywgZXJyb3IpO1xuXHRcdH07XG5cblx0XHRpZiAoc2lnbmFsICYmIHNpZ25hbC5hYm9ydGVkKSB7XG5cdFx0XHRhYm9ydCgpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGFib3J0QW5kRmluYWxpemUgPSBmdW5jdGlvbiBhYm9ydEFuZEZpbmFsaXplKCkge1xuXHRcdFx0YWJvcnQoKTtcblx0XHRcdGZpbmFsaXplKCk7XG5cdFx0fTtcblxuXHRcdC8vIHNlbmQgcmVxdWVzdFxuXHRcdGNvbnN0IHJlcSA9IHNlbmQob3B0aW9ucyk7XG5cdFx0bGV0IHJlcVRpbWVvdXQ7XG5cblx0XHRpZiAoc2lnbmFsKSB7XG5cdFx0XHRzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydEFuZEZpbmFsaXplKTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBmaW5hbGl6ZSgpIHtcblx0XHRcdHJlcS5hYm9ydCgpO1xuXHRcdFx0aWYgKHNpZ25hbCkgc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnRBbmRGaW5hbGl6ZSk7XG5cdFx0XHRjbGVhclRpbWVvdXQocmVxVGltZW91dCk7XG5cdFx0fVxuXG5cdFx0aWYgKHJlcXVlc3QudGltZW91dCkge1xuXHRcdFx0cmVxLm9uY2UoJ3NvY2tldCcsIGZ1bmN0aW9uIChzb2NrZXQpIHtcblx0XHRcdFx0cmVxVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdHJlamVjdChuZXcgRmV0Y2hFcnJvcihgbmV0d29yayB0aW1lb3V0IGF0OiAke3JlcXVlc3QudXJsfWAsICdyZXF1ZXN0LXRpbWVvdXQnKSk7XG5cdFx0XHRcdFx0ZmluYWxpemUoKTtcblx0XHRcdFx0fSwgcmVxdWVzdC50aW1lb3V0KTtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHJlcS5vbignZXJyb3InLCBmdW5jdGlvbiAoZXJyKSB7XG5cdFx0XHRyZWplY3QobmV3IEZldGNoRXJyb3IoYHJlcXVlc3QgdG8gJHtyZXF1ZXN0LnVybH0gZmFpbGVkLCByZWFzb246ICR7ZXJyLm1lc3NhZ2V9YCwgJ3N5c3RlbScsIGVycikpO1xuXG5cdFx0XHRpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UuYm9keSkge1xuXHRcdFx0XHRkZXN0cm95U3RyZWFtKHJlc3BvbnNlLmJvZHksIGVycik7XG5cdFx0XHR9XG5cblx0XHRcdGZpbmFsaXplKCk7XG5cdFx0fSk7XG5cblx0XHRmaXhSZXNwb25zZUNodW5rZWRUcmFuc2ZlckJhZEVuZGluZyhyZXEsIGZ1bmN0aW9uIChlcnIpIHtcblx0XHRcdGlmIChzaWduYWwgJiYgc2lnbmFsLmFib3J0ZWQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UuYm9keSkge1xuXHRcdFx0XHRkZXN0cm95U3RyZWFtKHJlc3BvbnNlLmJvZHksIGVycik7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHQvKiBjOCBpZ25vcmUgbmV4dCAxOCAqL1xuXHRcdGlmIChwYXJzZUludChwcm9jZXNzLnZlcnNpb24uc3Vic3RyaW5nKDEpKSA8IDE0KSB7XG5cdFx0XHQvLyBCZWZvcmUgTm9kZS5qcyAxNCwgcGlwZWxpbmUoKSBkb2VzIG5vdCBmdWxseSBzdXBwb3J0IGFzeW5jIGl0ZXJhdG9ycyBhbmQgZG9lcyBub3QgYWx3YXlzXG5cdFx0XHQvLyBwcm9wZXJseSBoYW5kbGUgd2hlbiB0aGUgc29ja2V0IGNsb3NlL2VuZCBldmVudHMgYXJlIG91dCBvZiBvcmRlci5cblx0XHRcdHJlcS5vbignc29ja2V0JywgZnVuY3Rpb24gKHMpIHtcblx0XHRcdFx0cy5hZGRMaXN0ZW5lcignY2xvc2UnLCBmdW5jdGlvbiAoaGFkRXJyb3IpIHtcblx0XHRcdFx0XHQvLyBpZiBhIGRhdGEgbGlzdGVuZXIgaXMgc3RpbGwgcHJlc2VudCB3ZSBkaWRuJ3QgZW5kIGNsZWFubHlcblx0XHRcdFx0XHRjb25zdCBoYXNEYXRhTGlzdGVuZXIgPSBzLmxpc3RlbmVyQ291bnQoJ2RhdGEnKSA+IDA7XG5cblx0XHRcdFx0XHQvLyBpZiBlbmQgaGFwcGVuZWQgYmVmb3JlIGNsb3NlIGJ1dCB0aGUgc29ja2V0IGRpZG4ndCBlbWl0IGFuIGVycm9yLCBkbyBpdCBub3dcblx0XHRcdFx0XHRpZiAocmVzcG9uc2UgJiYgaGFzRGF0YUxpc3RlbmVyICYmICFoYWRFcnJvciAmJiAhKHNpZ25hbCAmJiBzaWduYWwuYWJvcnRlZCkpIHtcblx0XHRcdFx0XHRcdGNvbnN0IGVyciA9IG5ldyBFcnJvcignUHJlbWF0dXJlIGNsb3NlJyk7XG5cdFx0XHRcdFx0XHRlcnIuY29kZSA9ICdFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRSc7XG5cdFx0XHRcdFx0XHRyZXNwb25zZS5ib2R5LmVtaXQoJ2Vycm9yJywgZXJyKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0cmVxLm9uKCdyZXNwb25zZScsIGZ1bmN0aW9uIChyZXMpIHtcblx0XHRcdGNsZWFyVGltZW91dChyZXFUaW1lb3V0KTtcblxuXHRcdFx0Y29uc3QgaGVhZGVycyA9IGNyZWF0ZUhlYWRlcnNMZW5pZW50KHJlcy5oZWFkZXJzKTtcblxuXHRcdFx0Ly8gSFRUUCBmZXRjaCBzdGVwIDVcblx0XHRcdGlmIChmZXRjaC5pc1JlZGlyZWN0KHJlcy5zdGF0dXNDb2RlKSkge1xuXHRcdFx0XHQvLyBIVFRQIGZldGNoIHN0ZXAgNS4yXG5cdFx0XHRcdGNvbnN0IGxvY2F0aW9uID0gaGVhZGVycy5nZXQoJ0xvY2F0aW9uJyk7XG5cblx0XHRcdFx0Ly8gSFRUUCBmZXRjaCBzdGVwIDUuM1xuXHRcdFx0XHRsZXQgbG9jYXRpb25VUkwgPSBudWxsO1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGxvY2F0aW9uVVJMID0gbG9jYXRpb24gPT09IG51bGwgPyBudWxsIDogbmV3IFVSTCQxKGxvY2F0aW9uLCByZXF1ZXN0LnVybCkudG9TdHJpbmcoKTtcblx0XHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdFx0Ly8gZXJyb3IgaGVyZSBjYW4gb25seSBiZSBpbnZhbGlkIFVSTCBpbiBMb2NhdGlvbjogaGVhZGVyXG5cdFx0XHRcdFx0Ly8gZG8gbm90IHRocm93IHdoZW4gb3B0aW9ucy5yZWRpcmVjdCA9PSBtYW51YWxcblx0XHRcdFx0XHQvLyBsZXQgdGhlIHVzZXIgZXh0cmFjdCB0aGUgZXJyb3JuZW91cyByZWRpcmVjdCBVUkxcblx0XHRcdFx0XHRpZiAocmVxdWVzdC5yZWRpcmVjdCAhPT0gJ21hbnVhbCcpIHtcblx0XHRcdFx0XHRcdHJlamVjdChuZXcgRmV0Y2hFcnJvcihgdXJpIHJlcXVlc3RlZCByZXNwb25kcyB3aXRoIGFuIGludmFsaWQgcmVkaXJlY3QgVVJMOiAke2xvY2F0aW9ufWAsICdpbnZhbGlkLXJlZGlyZWN0JykpO1xuXHRcdFx0XHRcdFx0ZmluYWxpemUoKTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBIVFRQIGZldGNoIHN0ZXAgNS41XG5cdFx0XHRcdHN3aXRjaCAocmVxdWVzdC5yZWRpcmVjdCkge1xuXHRcdFx0XHRcdGNhc2UgJ2Vycm9yJzpcblx0XHRcdFx0XHRcdHJlamVjdChuZXcgRmV0Y2hFcnJvcihgdXJpIHJlcXVlc3RlZCByZXNwb25kcyB3aXRoIGEgcmVkaXJlY3QsIHJlZGlyZWN0IG1vZGUgaXMgc2V0IHRvIGVycm9yOiAke3JlcXVlc3QudXJsfWAsICduby1yZWRpcmVjdCcpKTtcblx0XHRcdFx0XHRcdGZpbmFsaXplKCk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0Y2FzZSAnbWFudWFsJzpcblx0XHRcdFx0XHRcdC8vIG5vZGUtZmV0Y2gtc3BlY2lmaWMgc3RlcDogbWFrZSBtYW51YWwgcmVkaXJlY3QgYSBiaXQgZWFzaWVyIHRvIHVzZSBieSBzZXR0aW5nIHRoZSBMb2NhdGlvbiBoZWFkZXIgdmFsdWUgdG8gdGhlIHJlc29sdmVkIFVSTC5cblx0XHRcdFx0XHRcdGlmIChsb2NhdGlvblVSTCAhPT0gbnVsbCkge1xuXHRcdFx0XHRcdFx0XHQvLyBoYW5kbGUgY29ycnVwdGVkIGhlYWRlclxuXHRcdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRcdGhlYWRlcnMuc2V0KCdMb2NhdGlvbicsIGxvY2F0aW9uVVJMKTtcblx0XHRcdFx0XHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gaXN0YW5idWwgaWdub3JlIG5leHQ6IG5vZGVqcyBzZXJ2ZXIgcHJldmVudCBpbnZhbGlkIHJlc3BvbnNlIGhlYWRlcnMsIHdlIGNhbid0IHRlc3QgdGhpcyB0aHJvdWdoIG5vcm1hbCByZXF1ZXN0XG5cdFx0XHRcdFx0XHRcdFx0cmVqZWN0KGVycik7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ2ZvbGxvdyc6XG5cdFx0XHRcdFx0XHQvLyBIVFRQLXJlZGlyZWN0IGZldGNoIHN0ZXAgMlxuXHRcdFx0XHRcdFx0aWYgKGxvY2F0aW9uVVJMID09PSBudWxsKSB7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBIVFRQLXJlZGlyZWN0IGZldGNoIHN0ZXAgNVxuXHRcdFx0XHRcdFx0aWYgKHJlcXVlc3QuY291bnRlciA+PSByZXF1ZXN0LmZvbGxvdykge1xuXHRcdFx0XHRcdFx0XHRyZWplY3QobmV3IEZldGNoRXJyb3IoYG1heGltdW0gcmVkaXJlY3QgcmVhY2hlZCBhdDogJHtyZXF1ZXN0LnVybH1gLCAnbWF4LXJlZGlyZWN0JykpO1xuXHRcdFx0XHRcdFx0XHRmaW5hbGl6ZSgpO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIEhUVFAtcmVkaXJlY3QgZmV0Y2ggc3RlcCA2IChjb3VudGVyIGluY3JlbWVudClcblx0XHRcdFx0XHRcdC8vIENyZWF0ZSBhIG5ldyBSZXF1ZXN0IG9iamVjdC5cblx0XHRcdFx0XHRcdGNvbnN0IHJlcXVlc3RPcHRzID0ge1xuXHRcdFx0XHRcdFx0XHRoZWFkZXJzOiBuZXcgSGVhZGVycyhyZXF1ZXN0LmhlYWRlcnMpLFxuXHRcdFx0XHRcdFx0XHRmb2xsb3c6IHJlcXVlc3QuZm9sbG93LFxuXHRcdFx0XHRcdFx0XHRjb3VudGVyOiByZXF1ZXN0LmNvdW50ZXIgKyAxLFxuXHRcdFx0XHRcdFx0XHRhZ2VudDogcmVxdWVzdC5hZ2VudCxcblx0XHRcdFx0XHRcdFx0Y29tcHJlc3M6IHJlcXVlc3QuY29tcHJlc3MsXG5cdFx0XHRcdFx0XHRcdG1ldGhvZDogcmVxdWVzdC5tZXRob2QsXG5cdFx0XHRcdFx0XHRcdGJvZHk6IHJlcXVlc3QuYm9keSxcblx0XHRcdFx0XHRcdFx0c2lnbmFsOiByZXF1ZXN0LnNpZ25hbCxcblx0XHRcdFx0XHRcdFx0dGltZW91dDogcmVxdWVzdC50aW1lb3V0LFxuXHRcdFx0XHRcdFx0XHRzaXplOiByZXF1ZXN0LnNpemVcblx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRcdGlmICghaXNEb21haW5PclN1YmRvbWFpbihyZXF1ZXN0LnVybCwgbG9jYXRpb25VUkwpIHx8ICFpc1NhbWVQcm90b2NvbChyZXF1ZXN0LnVybCwgbG9jYXRpb25VUkwpKSB7XG5cdFx0XHRcdFx0XHRcdGZvciAoY29uc3QgbmFtZSBvZiBbJ2F1dGhvcml6YXRpb24nLCAnd3d3LWF1dGhlbnRpY2F0ZScsICdjb29raWUnLCAnY29va2llMiddKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmVxdWVzdE9wdHMuaGVhZGVycy5kZWxldGUobmFtZSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gSFRUUC1yZWRpcmVjdCBmZXRjaCBzdGVwIDlcblx0XHRcdFx0XHRcdGlmIChyZXMuc3RhdHVzQ29kZSAhPT0gMzAzICYmIHJlcXVlc3QuYm9keSAmJiBnZXRUb3RhbEJ5dGVzKHJlcXVlc3QpID09PSBudWxsKSB7XG5cdFx0XHRcdFx0XHRcdHJlamVjdChuZXcgRmV0Y2hFcnJvcignQ2Fubm90IGZvbGxvdyByZWRpcmVjdCB3aXRoIGJvZHkgYmVpbmcgYSByZWFkYWJsZSBzdHJlYW0nLCAndW5zdXBwb3J0ZWQtcmVkaXJlY3QnKSk7XG5cdFx0XHRcdFx0XHRcdGZpbmFsaXplKCk7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gSFRUUC1yZWRpcmVjdCBmZXRjaCBzdGVwIDExXG5cdFx0XHRcdFx0XHRpZiAocmVzLnN0YXR1c0NvZGUgPT09IDMwMyB8fCAocmVzLnN0YXR1c0NvZGUgPT09IDMwMSB8fCByZXMuc3RhdHVzQ29kZSA9PT0gMzAyKSAmJiByZXF1ZXN0Lm1ldGhvZCA9PT0gJ1BPU1QnKSB7XG5cdFx0XHRcdFx0XHRcdHJlcXVlc3RPcHRzLm1ldGhvZCA9ICdHRVQnO1xuXHRcdFx0XHRcdFx0XHRyZXF1ZXN0T3B0cy5ib2R5ID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0XHRyZXF1ZXN0T3B0cy5oZWFkZXJzLmRlbGV0ZSgnY29udGVudC1sZW5ndGgnKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gSFRUUC1yZWRpcmVjdCBmZXRjaCBzdGVwIDE1XG5cdFx0XHRcdFx0XHRyZXNvbHZlKGZldGNoKG5ldyBSZXF1ZXN0KGxvY2F0aW9uVVJMLCByZXF1ZXN0T3B0cykpKTtcblx0XHRcdFx0XHRcdGZpbmFsaXplKCk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gcHJlcGFyZSByZXNwb25zZVxuXHRcdFx0cmVzLm9uY2UoJ2VuZCcsIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0aWYgKHNpZ25hbCkgc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnRBbmRGaW5hbGl6ZSk7XG5cdFx0XHR9KTtcblx0XHRcdGxldCBib2R5ID0gcmVzLnBpcGUobmV3IFBhc3NUaHJvdWdoJDEoKSk7XG5cblx0XHRcdGNvbnN0IHJlc3BvbnNlX29wdGlvbnMgPSB7XG5cdFx0XHRcdHVybDogcmVxdWVzdC51cmwsXG5cdFx0XHRcdHN0YXR1czogcmVzLnN0YXR1c0NvZGUsXG5cdFx0XHRcdHN0YXR1c1RleHQ6IHJlcy5zdGF0dXNNZXNzYWdlLFxuXHRcdFx0XHRoZWFkZXJzOiBoZWFkZXJzLFxuXHRcdFx0XHRzaXplOiByZXF1ZXN0LnNpemUsXG5cdFx0XHRcdHRpbWVvdXQ6IHJlcXVlc3QudGltZW91dCxcblx0XHRcdFx0Y291bnRlcjogcmVxdWVzdC5jb3VudGVyXG5cdFx0XHR9O1xuXG5cdFx0XHQvLyBIVFRQLW5ldHdvcmsgZmV0Y2ggc3RlcCAxMi4xLjEuM1xuXHRcdFx0Y29uc3QgY29kaW5ncyA9IGhlYWRlcnMuZ2V0KCdDb250ZW50LUVuY29kaW5nJyk7XG5cblx0XHRcdC8vIEhUVFAtbmV0d29yayBmZXRjaCBzdGVwIDEyLjEuMS40OiBoYW5kbGUgY29udGVudCBjb2RpbmdzXG5cblx0XHRcdC8vIGluIGZvbGxvd2luZyBzY2VuYXJpb3Mgd2UgaWdub3JlIGNvbXByZXNzaW9uIHN1cHBvcnRcblx0XHRcdC8vIDEuIGNvbXByZXNzaW9uIHN1cHBvcnQgaXMgZGlzYWJsZWRcblx0XHRcdC8vIDIuIEhFQUQgcmVxdWVzdFxuXHRcdFx0Ly8gMy4gbm8gQ29udGVudC1FbmNvZGluZyBoZWFkZXJcblx0XHRcdC8vIDQuIG5vIGNvbnRlbnQgcmVzcG9uc2UgKDIwNClcblx0XHRcdC8vIDUuIGNvbnRlbnQgbm90IG1vZGlmaWVkIHJlc3BvbnNlICgzMDQpXG5cdFx0XHRpZiAoIXJlcXVlc3QuY29tcHJlc3MgfHwgcmVxdWVzdC5tZXRob2QgPT09ICdIRUFEJyB8fCBjb2RpbmdzID09PSBudWxsIHx8IHJlcy5zdGF0dXNDb2RlID09PSAyMDQgfHwgcmVzLnN0YXR1c0NvZGUgPT09IDMwNCkge1xuXHRcdFx0XHRyZXNwb25zZSA9IG5ldyBSZXNwb25zZShib2R5LCByZXNwb25zZV9vcHRpb25zKTtcblx0XHRcdFx0cmVzb2x2ZShyZXNwb25zZSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gRm9yIE5vZGUgdjYrXG5cdFx0XHQvLyBCZSBsZXNzIHN0cmljdCB3aGVuIGRlY29kaW5nIGNvbXByZXNzZWQgcmVzcG9uc2VzLCBzaW5jZSBzb21ldGltZXNcblx0XHRcdC8vIHNlcnZlcnMgc2VuZCBzbGlnaHRseSBpbnZhbGlkIHJlc3BvbnNlcyB0aGF0IGFyZSBzdGlsbCBhY2NlcHRlZFxuXHRcdFx0Ly8gYnkgY29tbW9uIGJyb3dzZXJzLlxuXHRcdFx0Ly8gQWx3YXlzIHVzaW5nIFpfU1lOQ19GTFVTSCBpcyB3aGF0IGNVUkwgZG9lcy5cblx0XHRcdGNvbnN0IHpsaWJPcHRpb25zID0ge1xuXHRcdFx0XHRmbHVzaDogemxpYi5aX1NZTkNfRkxVU0gsXG5cdFx0XHRcdGZpbmlzaEZsdXNoOiB6bGliLlpfU1lOQ19GTFVTSFxuXHRcdFx0fTtcblxuXHRcdFx0Ly8gZm9yIGd6aXBcblx0XHRcdGlmIChjb2RpbmdzID09ICdnemlwJyB8fCBjb2RpbmdzID09ICd4LWd6aXAnKSB7XG5cdFx0XHRcdGJvZHkgPSBib2R5LnBpcGUoemxpYi5jcmVhdGVHdW56aXAoemxpYk9wdGlvbnMpKTtcblx0XHRcdFx0cmVzcG9uc2UgPSBuZXcgUmVzcG9uc2UoYm9keSwgcmVzcG9uc2Vfb3B0aW9ucyk7XG5cdFx0XHRcdHJlc29sdmUocmVzcG9uc2UpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIGZvciBkZWZsYXRlXG5cdFx0XHRpZiAoY29kaW5ncyA9PSAnZGVmbGF0ZScgfHwgY29kaW5ncyA9PSAneC1kZWZsYXRlJykge1xuXHRcdFx0XHQvLyBoYW5kbGUgdGhlIGluZmFtb3VzIHJhdyBkZWZsYXRlIHJlc3BvbnNlIGZyb20gb2xkIHNlcnZlcnNcblx0XHRcdFx0Ly8gYSBoYWNrIGZvciBvbGQgSUlTIGFuZCBBcGFjaGUgc2VydmVyc1xuXHRcdFx0XHRjb25zdCByYXcgPSByZXMucGlwZShuZXcgUGFzc1Rocm91Z2gkMSgpKTtcblx0XHRcdFx0cmF3Lm9uY2UoJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHtcblx0XHRcdFx0XHQvLyBzZWUgaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8zNzUxOTgyOFxuXHRcdFx0XHRcdGlmICgoY2h1bmtbMF0gJiAweDBGKSA9PT0gMHgwOCkge1xuXHRcdFx0XHRcdFx0Ym9keSA9IGJvZHkucGlwZSh6bGliLmNyZWF0ZUluZmxhdGUoKSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGJvZHkgPSBib2R5LnBpcGUoemxpYi5jcmVhdGVJbmZsYXRlUmF3KCkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXNwb25zZSA9IG5ldyBSZXNwb25zZShib2R5LCByZXNwb25zZV9vcHRpb25zKTtcblx0XHRcdFx0XHRyZXNvbHZlKHJlc3BvbnNlKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHJhdy5vbignZW5kJywgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdC8vIHNvbWUgb2xkIElJUyBzZXJ2ZXJzIHJldHVybiB6ZXJvLWxlbmd0aCBPSyBkZWZsYXRlIHJlc3BvbnNlcywgc28gJ2RhdGEnIGlzIG5ldmVyIGVtaXR0ZWQuXG5cdFx0XHRcdFx0aWYgKCFyZXNwb25zZSkge1xuXHRcdFx0XHRcdFx0cmVzcG9uc2UgPSBuZXcgUmVzcG9uc2UoYm9keSwgcmVzcG9uc2Vfb3B0aW9ucyk7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKHJlc3BvbnNlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIGZvciBiclxuXHRcdFx0aWYgKGNvZGluZ3MgPT0gJ2JyJyAmJiB0eXBlb2YgemxpYi5jcmVhdGVCcm90bGlEZWNvbXByZXNzID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdGJvZHkgPSBib2R5LnBpcGUoemxpYi5jcmVhdGVCcm90bGlEZWNvbXByZXNzKCkpO1xuXHRcdFx0XHRyZXNwb25zZSA9IG5ldyBSZXNwb25zZShib2R5LCByZXNwb25zZV9vcHRpb25zKTtcblx0XHRcdFx0cmVzb2x2ZShyZXNwb25zZSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gb3RoZXJ3aXNlLCB1c2UgcmVzcG9uc2UgYXMtaXNcblx0XHRcdHJlc3BvbnNlID0gbmV3IFJlc3BvbnNlKGJvZHksIHJlc3BvbnNlX29wdGlvbnMpO1xuXHRcdFx0cmVzb2x2ZShyZXNwb25zZSk7XG5cdFx0fSk7XG5cblx0XHR3cml0ZVRvU3RyZWFtKHJlcSwgcmVxdWVzdCk7XG5cdH0pO1xufVxuZnVuY3Rpb24gZml4UmVzcG9uc2VDaHVua2VkVHJhbnNmZXJCYWRFbmRpbmcocmVxdWVzdCwgZXJyb3JDYWxsYmFjaykge1xuXHRsZXQgc29ja2V0O1xuXG5cdHJlcXVlc3Qub24oJ3NvY2tldCcsIGZ1bmN0aW9uIChzKSB7XG5cdFx0c29ja2V0ID0gcztcblx0fSk7XG5cblx0cmVxdWVzdC5vbigncmVzcG9uc2UnLCBmdW5jdGlvbiAocmVzcG9uc2UpIHtcblx0XHRjb25zdCBoZWFkZXJzID0gcmVzcG9uc2UuaGVhZGVycztcblxuXHRcdGlmIChoZWFkZXJzWyd0cmFuc2Zlci1lbmNvZGluZyddID09PSAnY2h1bmtlZCcgJiYgIWhlYWRlcnNbJ2NvbnRlbnQtbGVuZ3RoJ10pIHtcblx0XHRcdHJlc3BvbnNlLm9uY2UoJ2Nsb3NlJywgZnVuY3Rpb24gKGhhZEVycm9yKSB7XG5cdFx0XHRcdC8vIHRlc3RzIGZvciBzb2NrZXQgcHJlc2VuY2UsIGFzIGluIHNvbWUgc2l0dWF0aW9ucyB0aGVcblx0XHRcdFx0Ly8gdGhlICdzb2NrZXQnIGV2ZW50IGlzIG5vdCB0cmlnZ2VyZWQgZm9yIHRoZSByZXF1ZXN0XG5cdFx0XHRcdC8vIChoYXBwZW5zIGluIGRlbm8pLCBhdm9pZHMgYFR5cGVFcnJvcmBcblx0XHRcdFx0Ly8gaWYgYSBkYXRhIGxpc3RlbmVyIGlzIHN0aWxsIHByZXNlbnQgd2UgZGlkbid0IGVuZCBjbGVhbmx5XG5cdFx0XHRcdGNvbnN0IGhhc0RhdGFMaXN0ZW5lciA9IHNvY2tldCAmJiBzb2NrZXQubGlzdGVuZXJDb3VudCgnZGF0YScpID4gMDtcblxuXHRcdFx0XHRpZiAoaGFzRGF0YUxpc3RlbmVyICYmICFoYWRFcnJvcikge1xuXHRcdFx0XHRcdGNvbnN0IGVyciA9IG5ldyBFcnJvcignUHJlbWF0dXJlIGNsb3NlJyk7XG5cdFx0XHRcdFx0ZXJyLmNvZGUgPSAnRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UnO1xuXHRcdFx0XHRcdGVycm9yQ2FsbGJhY2soZXJyKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KTtcbn1cblxuZnVuY3Rpb24gZGVzdHJveVN0cmVhbShzdHJlYW0sIGVycikge1xuXHRpZiAoc3RyZWFtLmRlc3Ryb3kpIHtcblx0XHRzdHJlYW0uZGVzdHJveShlcnIpO1xuXHR9IGVsc2Uge1xuXHRcdC8vIG5vZGUgPCA4XG5cdFx0c3RyZWFtLmVtaXQoJ2Vycm9yJywgZXJyKTtcblx0XHRzdHJlYW0uZW5kKCk7XG5cdH1cbn1cblxuLyoqXG4gKiBSZWRpcmVjdCBjb2RlIG1hdGNoaW5nXG4gKlxuICogQHBhcmFtICAgTnVtYmVyICAgY29kZSAgU3RhdHVzIGNvZGVcbiAqIEByZXR1cm4gIEJvb2xlYW5cbiAqL1xuZmV0Y2guaXNSZWRpcmVjdCA9IGZ1bmN0aW9uIChjb2RlKSB7XG5cdHJldHVybiBjb2RlID09PSAzMDEgfHwgY29kZSA9PT0gMzAyIHx8IGNvZGUgPT09IDMwMyB8fCBjb2RlID09PSAzMDcgfHwgY29kZSA9PT0gMzA4O1xufTtcblxuLy8gZXhwb3NlIFByb21pc2VcbmZldGNoLlByb21pc2UgPSBnbG9iYWwuUHJvbWlzZTtcblxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmV0Y2g7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlZmF1bHQgPSBleHBvcnRzO1xuZXhwb3J0cy5IZWFkZXJzID0gSGVhZGVycztcbmV4cG9ydHMuUmVxdWVzdCA9IFJlcXVlc3Q7XG5leHBvcnRzLlJlc3BvbnNlID0gUmVzcG9uc2U7XG5leHBvcnRzLkZldGNoRXJyb3IgPSBGZXRjaEVycm9yO1xuZXhwb3J0cy5BYm9ydEVycm9yID0gQWJvcnRFcnJvcjtcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jbGFzcyBEZXByZWNhdGlvbiBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpOyAvLyBNYWludGFpbnMgcHJvcGVyIHN0YWNrIHRyYWNlIChvbmx5IGF2YWlsYWJsZSBvbiBWOClcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cbiAgICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuICAgIH1cblxuICAgIHRoaXMubmFtZSA9ICdEZXByZWNhdGlvbic7XG4gIH1cblxufVxuXG5leHBvcnRzLkRlcHJlY2F0aW9uID0gRGVwcmVjYXRpb247XG4iLAogICAgIi8vIFJldHVybnMgYSB3cmFwcGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHdyYXBwZWQgY2FsbGJhY2tcbi8vIFRoZSB3cmFwcGVyIGZ1bmN0aW9uIHNob3VsZCBkbyBzb21lIHN0dWZmLCBhbmQgcmV0dXJuIGFcbi8vIHByZXN1bWFibHkgZGlmZmVyZW50IGNhbGxiYWNrIGZ1bmN0aW9uLlxuLy8gVGhpcyBtYWtlcyBzdXJlIHRoYXQgb3duIHByb3BlcnRpZXMgYXJlIHJldGFpbmVkLCBzbyB0aGF0XG4vLyBkZWNvcmF0aW9ucyBhbmQgc3VjaCBhcmUgbm90IGxvc3QgYWxvbmcgdGhlIHdheS5cbm1vZHVsZS5leHBvcnRzID0gd3JhcHB5XG5mdW5jdGlvbiB3cmFwcHkgKGZuLCBjYikge1xuICBpZiAoZm4gJiYgY2IpIHJldHVybiB3cmFwcHkoZm4pKGNiKVxuXG4gIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbmVlZCB3cmFwcGVyIGZ1bmN0aW9uJylcblxuICBPYmplY3Qua2V5cyhmbikuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgIHdyYXBwZXJba10gPSBmbltrXVxuICB9KVxuXG4gIHJldHVybiB3cmFwcGVyXG5cbiAgZnVuY3Rpb24gd3JhcHBlcigpIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXVxuICAgIH1cbiAgICB2YXIgcmV0ID0gZm4uYXBwbHkodGhpcywgYXJncylcbiAgICB2YXIgY2IgPSBhcmdzW2FyZ3MubGVuZ3RoLTFdXG4gICAgaWYgKHR5cGVvZiByZXQgPT09ICdmdW5jdGlvbicgJiYgcmV0ICE9PSBjYikge1xuICAgICAgT2JqZWN0LmtleXMoY2IpLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgICAgICAgcmV0W2tdID0gY2Jba11cbiAgICAgIH0pXG4gICAgfVxuICAgIHJldHVybiByZXRcbiAgfVxufVxuIiwKICAgICJ2YXIgd3JhcHB5ID0gcmVxdWlyZSgnd3JhcHB5Jylcbm1vZHVsZS5leHBvcnRzID0gd3JhcHB5KG9uY2UpXG5tb2R1bGUuZXhwb3J0cy5zdHJpY3QgPSB3cmFwcHkob25jZVN0cmljdClcblxub25jZS5wcm90byA9IG9uY2UoZnVuY3Rpb24gKCkge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRnVuY3Rpb24ucHJvdG90eXBlLCAnb25jZScsIHtcbiAgICB2YWx1ZTogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIG9uY2UodGhpcylcbiAgICB9LFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KVxuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGdW5jdGlvbi5wcm90b3R5cGUsICdvbmNlU3RyaWN0Jywge1xuICAgIHZhbHVlOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gb25jZVN0cmljdCh0aGlzKVxuICAgIH0sXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pXG59KVxuXG5mdW5jdGlvbiBvbmNlIChmbikge1xuICB2YXIgZiA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoZi5jYWxsZWQpIHJldHVybiBmLnZhbHVlXG4gICAgZi5jYWxsZWQgPSB0cnVlXG4gICAgcmV0dXJuIGYudmFsdWUgPSBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gIH1cbiAgZi5jYWxsZWQgPSBmYWxzZVxuICByZXR1cm4gZlxufVxuXG5mdW5jdGlvbiBvbmNlU3RyaWN0IChmbikge1xuICB2YXIgZiA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoZi5jYWxsZWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZi5vbmNlRXJyb3IpXG4gICAgZi5jYWxsZWQgPSB0cnVlXG4gICAgcmV0dXJuIGYudmFsdWUgPSBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gIH1cbiAgdmFyIG5hbWUgPSBmbi5uYW1lIHx8ICdGdW5jdGlvbiB3cmFwcGVkIHdpdGggYG9uY2VgJ1xuICBmLm9uY2VFcnJvciA9IG5hbWUgKyBcIiBzaG91bGRuJ3QgYmUgY2FsbGVkIG1vcmUgdGhhbiBvbmNlXCJcbiAgZi5jYWxsZWQgPSBmYWxzZVxuICByZXR1cm4gZlxufVxuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wRGVmYXVsdCAoZXgpIHsgcmV0dXJuIChleCAmJiAodHlwZW9mIGV4ID09PSAnb2JqZWN0JykgJiYgJ2RlZmF1bHQnIGluIGV4KSA/IGV4WydkZWZhdWx0J10gOiBleDsgfVxuXG52YXIgZGVwcmVjYXRpb24gPSByZXF1aXJlKCdkZXByZWNhdGlvbicpO1xudmFyIG9uY2UgPSBfaW50ZXJvcERlZmF1bHQocmVxdWlyZSgnb25jZScpKTtcblxuY29uc3QgbG9nT25jZUNvZGUgPSBvbmNlKGRlcHJlY2F0aW9uID0+IGNvbnNvbGUud2FybihkZXByZWNhdGlvbikpO1xuY29uc3QgbG9nT25jZUhlYWRlcnMgPSBvbmNlKGRlcHJlY2F0aW9uID0+IGNvbnNvbGUud2FybihkZXByZWNhdGlvbikpO1xuLyoqXG4gKiBFcnJvciB3aXRoIGV4dHJhIHByb3BlcnRpZXMgdG8gaGVscCB3aXRoIGRlYnVnZ2luZ1xuICovXG5cbmNsYXNzIFJlcXVlc3RFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZSwgc3RhdHVzQ29kZSwgb3B0aW9ucykge1xuICAgIHN1cGVyKG1lc3NhZ2UpOyAvLyBNYWludGFpbnMgcHJvcGVyIHN0YWNrIHRyYWNlIChvbmx5IGF2YWlsYWJsZSBvbiBWOClcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cbiAgICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuICAgIH1cblxuICAgIHRoaXMubmFtZSA9IFwiSHR0cEVycm9yXCI7XG4gICAgdGhpcy5zdGF0dXMgPSBzdGF0dXNDb2RlO1xuICAgIGxldCBoZWFkZXJzO1xuXG4gICAgaWYgKFwiaGVhZGVyc1wiIGluIG9wdGlvbnMgJiYgdHlwZW9mIG9wdGlvbnMuaGVhZGVycyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgaGVhZGVycyA9IG9wdGlvbnMuaGVhZGVycztcbiAgICB9XG5cbiAgICBpZiAoXCJyZXNwb25zZVwiIGluIG9wdGlvbnMpIHtcbiAgICAgIHRoaXMucmVzcG9uc2UgPSBvcHRpb25zLnJlc3BvbnNlO1xuICAgICAgaGVhZGVycyA9IG9wdGlvbnMucmVzcG9uc2UuaGVhZGVycztcbiAgICB9IC8vIHJlZGFjdCByZXF1ZXN0IGNyZWRlbnRpYWxzIHdpdGhvdXQgbXV0YXRpbmcgb3JpZ2luYWwgcmVxdWVzdCBvcHRpb25zXG5cblxuICAgIGNvbnN0IHJlcXVlc3RDb3B5ID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5yZXF1ZXN0KTtcblxuICAgIGlmIChvcHRpb25zLnJlcXVlc3QuaGVhZGVycy5hdXRob3JpemF0aW9uKSB7XG4gICAgICByZXF1ZXN0Q29weS5oZWFkZXJzID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5yZXF1ZXN0LmhlYWRlcnMsIHtcbiAgICAgICAgYXV0aG9yaXphdGlvbjogb3B0aW9ucy5yZXF1ZXN0LmhlYWRlcnMuYXV0aG9yaXphdGlvbi5yZXBsYWNlKC8gLiokLywgXCIgW1JFREFDVEVEXVwiKVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVxdWVzdENvcHkudXJsID0gcmVxdWVzdENvcHkudXJsIC8vIGNsaWVudF9pZCAmIGNsaWVudF9zZWNyZXQgY2FuIGJlIHBhc3NlZCBhcyBVUkwgcXVlcnkgcGFyYW1ldGVycyB0byBpbmNyZWFzZSByYXRlIGxpbWl0XG4gICAgLy8gc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmdpdGh1Yi5jb20vdjMvI2luY3JlYXNpbmctdGhlLXVuYXV0aGVudGljYXRlZC1yYXRlLWxpbWl0LWZvci1vYXV0aC1hcHBsaWNhdGlvbnNcbiAgICAucmVwbGFjZSgvXFxiY2xpZW50X3NlY3JldD1cXHcrL2csIFwiY2xpZW50X3NlY3JldD1bUkVEQUNURURdXCIpIC8vIE9BdXRoIHRva2VucyBjYW4gYmUgcGFzc2VkIGFzIFVSTCBxdWVyeSBwYXJhbWV0ZXJzLCBhbHRob3VnaCBpdCBpcyBub3QgcmVjb21tZW5kZWRcbiAgICAvLyBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuZ2l0aHViLmNvbS92My8jb2F1dGgyLXRva2VuLXNlbnQtaW4tYS1oZWFkZXJcbiAgICAucmVwbGFjZSgvXFxiYWNjZXNzX3Rva2VuPVxcdysvZywgXCJhY2Nlc3NfdG9rZW49W1JFREFDVEVEXVwiKTtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0Q29weTsgLy8gZGVwcmVjYXRpb25zXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJjb2RlXCIsIHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgbG9nT25jZUNvZGUobmV3IGRlcHJlY2F0aW9uLkRlcHJlY2F0aW9uKFwiW0BvY3Rva2l0L3JlcXVlc3QtZXJyb3JdIGBlcnJvci5jb2RlYCBpcyBkZXByZWNhdGVkLCB1c2UgYGVycm9yLnN0YXR1c2AuXCIpKTtcbiAgICAgICAgcmV0dXJuIHN0YXR1c0NvZGU7XG4gICAgICB9XG5cbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJoZWFkZXJzXCIsIHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgbG9nT25jZUhlYWRlcnMobmV3IGRlcHJlY2F0aW9uLkRlcHJlY2F0aW9uKFwiW0BvY3Rva2l0L3JlcXVlc3QtZXJyb3JdIGBlcnJvci5oZWFkZXJzYCBpcyBkZXByZWNhdGVkLCB1c2UgYGVycm9yLnJlc3BvbnNlLmhlYWRlcnNgLlwiKSk7XG4gICAgICAgIHJldHVybiBoZWFkZXJzIHx8IHt9O1xuICAgICAgfVxuXG4gICAgfSk7XG4gIH1cblxufVxuXG5leHBvcnRzLlJlcXVlc3RFcnJvciA9IFJlcXVlc3RFcnJvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wRGVmYXVsdCAoZXgpIHsgcmV0dXJuIChleCAmJiAodHlwZW9mIGV4ID09PSAnb2JqZWN0JykgJiYgJ2RlZmF1bHQnIGluIGV4KSA/IGV4WydkZWZhdWx0J10gOiBleDsgfVxuXG52YXIgZW5kcG9pbnQgPSByZXF1aXJlKCdAb2N0b2tpdC9lbmRwb2ludCcpO1xudmFyIHVuaXZlcnNhbFVzZXJBZ2VudCA9IHJlcXVpcmUoJ3VuaXZlcnNhbC11c2VyLWFnZW50Jyk7XG52YXIgaXNQbGFpbk9iamVjdCA9IHJlcXVpcmUoJ2lzLXBsYWluLW9iamVjdCcpO1xudmFyIG5vZGVGZXRjaCA9IF9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKCdub2RlLWZldGNoJykpO1xudmFyIHJlcXVlc3RFcnJvciA9IHJlcXVpcmUoJ0BvY3Rva2l0L3JlcXVlc3QtZXJyb3InKTtcblxuY29uc3QgVkVSU0lPTiA9IFwiNS42LjNcIjtcblxuZnVuY3Rpb24gZ2V0QnVmZmVyUmVzcG9uc2UocmVzcG9uc2UpIHtcbiAgcmV0dXJuIHJlc3BvbnNlLmFycmF5QnVmZmVyKCk7XG59XG5cbmZ1bmN0aW9uIGZldGNoV3JhcHBlcihyZXF1ZXN0T3B0aW9ucykge1xuICBjb25zdCBsb2cgPSByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0ICYmIHJlcXVlc3RPcHRpb25zLnJlcXVlc3QubG9nID8gcmVxdWVzdE9wdGlvbnMucmVxdWVzdC5sb2cgOiBjb25zb2xlO1xuXG4gIGlmIChpc1BsYWluT2JqZWN0LmlzUGxhaW5PYmplY3QocmVxdWVzdE9wdGlvbnMuYm9keSkgfHwgQXJyYXkuaXNBcnJheShyZXF1ZXN0T3B0aW9ucy5ib2R5KSkge1xuICAgIHJlcXVlc3RPcHRpb25zLmJvZHkgPSBKU09OLnN0cmluZ2lmeShyZXF1ZXN0T3B0aW9ucy5ib2R5KTtcbiAgfVxuXG4gIGxldCBoZWFkZXJzID0ge307XG4gIGxldCBzdGF0dXM7XG4gIGxldCB1cmw7XG4gIGNvbnN0IGZldGNoID0gcmVxdWVzdE9wdGlvbnMucmVxdWVzdCAmJiByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0LmZldGNoIHx8IG5vZGVGZXRjaDtcbiAgcmV0dXJuIGZldGNoKHJlcXVlc3RPcHRpb25zLnVybCwgT2JqZWN0LmFzc2lnbih7XG4gICAgbWV0aG9kOiByZXF1ZXN0T3B0aW9ucy5tZXRob2QsXG4gICAgYm9keTogcmVxdWVzdE9wdGlvbnMuYm9keSxcbiAgICBoZWFkZXJzOiByZXF1ZXN0T3B0aW9ucy5oZWFkZXJzLFxuICAgIHJlZGlyZWN0OiByZXF1ZXN0T3B0aW9ucy5yZWRpcmVjdFxuICB9LCAvLyBgcmVxdWVzdE9wdGlvbnMucmVxdWVzdC5hZ2VudGAgdHlwZSBpcyBpbmNvbXBhdGlibGVcbiAgLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9vY3Rva2l0L3R5cGVzLnRzL3B1bGwvMjY0XG4gIHJlcXVlc3RPcHRpb25zLnJlcXVlc3QpKS50aGVuKGFzeW5jIHJlc3BvbnNlID0+IHtcbiAgICB1cmwgPSByZXNwb25zZS51cmw7XG4gICAgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuXG4gICAgZm9yIChjb25zdCBrZXlBbmRWYWx1ZSBvZiByZXNwb25zZS5oZWFkZXJzKSB7XG4gICAgICBoZWFkZXJzW2tleUFuZFZhbHVlWzBdXSA9IGtleUFuZFZhbHVlWzFdO1xuICAgIH1cblxuICAgIGlmIChcImRlcHJlY2F0aW9uXCIgaW4gaGVhZGVycykge1xuICAgICAgY29uc3QgbWF0Y2hlcyA9IGhlYWRlcnMubGluayAmJiBoZWFkZXJzLmxpbmsubWF0Y2goLzwoW14+XSspPjsgcmVsPVwiZGVwcmVjYXRpb25cIi8pO1xuICAgICAgY29uc3QgZGVwcmVjYXRpb25MaW5rID0gbWF0Y2hlcyAmJiBtYXRjaGVzLnBvcCgpO1xuICAgICAgbG9nLndhcm4oYFtAb2N0b2tpdC9yZXF1ZXN0XSBcIiR7cmVxdWVzdE9wdGlvbnMubWV0aG9kfSAke3JlcXVlc3RPcHRpb25zLnVybH1cIiBpcyBkZXByZWNhdGVkLiBJdCBpcyBzY2hlZHVsZWQgdG8gYmUgcmVtb3ZlZCBvbiAke2hlYWRlcnMuc3Vuc2V0fSR7ZGVwcmVjYXRpb25MaW5rID8gYC4gU2VlICR7ZGVwcmVjYXRpb25MaW5rfWAgOiBcIlwifWApO1xuICAgIH1cblxuICAgIGlmIChzdGF0dXMgPT09IDIwNCB8fCBzdGF0dXMgPT09IDIwNSkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gR2l0SHViIEFQSSByZXR1cm5zIDIwMCBmb3IgSEVBRCByZXF1ZXN0c1xuXG5cbiAgICBpZiAocmVxdWVzdE9wdGlvbnMubWV0aG9kID09PSBcIkhFQURcIikge1xuICAgICAgaWYgKHN0YXR1cyA8IDQwMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyByZXF1ZXN0RXJyb3IuUmVxdWVzdEVycm9yKHJlc3BvbnNlLnN0YXR1c1RleHQsIHN0YXR1cywge1xuICAgICAgICByZXNwb25zZToge1xuICAgICAgICAgIHVybCxcbiAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICBkYXRhOiB1bmRlZmluZWRcbiAgICAgICAgfSxcbiAgICAgICAgcmVxdWVzdDogcmVxdWVzdE9wdGlvbnNcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChzdGF0dXMgPT09IDMwNCkge1xuICAgICAgdGhyb3cgbmV3IHJlcXVlc3RFcnJvci5SZXF1ZXN0RXJyb3IoXCJOb3QgbW9kaWZpZWRcIiwgc3RhdHVzLCB7XG4gICAgICAgIHJlc3BvbnNlOiB7XG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIHN0YXR1cyxcbiAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgIGRhdGE6IGF3YWl0IGdldFJlc3BvbnNlRGF0YShyZXNwb25zZSlcbiAgICAgICAgfSxcbiAgICAgICAgcmVxdWVzdDogcmVxdWVzdE9wdGlvbnNcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChzdGF0dXMgPj0gNDAwKSB7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ2V0UmVzcG9uc2VEYXRhKHJlc3BvbnNlKTtcbiAgICAgIGNvbnN0IGVycm9yID0gbmV3IHJlcXVlc3RFcnJvci5SZXF1ZXN0RXJyb3IodG9FcnJvck1lc3NhZ2UoZGF0YSksIHN0YXR1cywge1xuICAgICAgICByZXNwb25zZToge1xuICAgICAgICAgIHVybCxcbiAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICBkYXRhXG4gICAgICAgIH0sXG4gICAgICAgIHJlcXVlc3Q6IHJlcXVlc3RPcHRpb25zXG4gICAgICB9KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cblxuICAgIHJldHVybiBnZXRSZXNwb25zZURhdGEocmVzcG9uc2UpO1xuICB9KS50aGVuKGRhdGEgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXMsXG4gICAgICB1cmwsXG4gICAgICBoZWFkZXJzLFxuICAgICAgZGF0YVxuICAgIH07XG4gIH0pLmNhdGNoKGVycm9yID0+IHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiByZXF1ZXN0RXJyb3IuUmVxdWVzdEVycm9yKSB0aHJvdyBlcnJvcjtcbiAgICB0aHJvdyBuZXcgcmVxdWVzdEVycm9yLlJlcXVlc3RFcnJvcihlcnJvci5tZXNzYWdlLCA1MDAsIHtcbiAgICAgIHJlcXVlc3Q6IHJlcXVlc3RPcHRpb25zXG4gICAgfSk7XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRSZXNwb25zZURhdGEocmVzcG9uc2UpIHtcbiAgY29uc3QgY29udGVudFR5cGUgPSByZXNwb25zZS5oZWFkZXJzLmdldChcImNvbnRlbnQtdHlwZVwiKTtcblxuICBpZiAoL2FwcGxpY2F0aW9uXFwvanNvbi8udGVzdChjb250ZW50VHlwZSkpIHtcbiAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpO1xuICB9XG5cbiAgaWYgKCFjb250ZW50VHlwZSB8fCAvXnRleHRcXC98Y2hhcnNldD11dGYtOCQvLnRlc3QoY29udGVudFR5cGUpKSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLnRleHQoKTtcbiAgfVxuXG4gIHJldHVybiBnZXRCdWZmZXJSZXNwb25zZShyZXNwb25zZSk7XG59XG5cbmZ1bmN0aW9uIHRvRXJyb3JNZXNzYWdlKGRhdGEpIHtcbiAgaWYgKHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiKSByZXR1cm4gZGF0YTsgLy8gaXN0YW5idWwgaWdub3JlIGVsc2UgLSBqdXN0IGluIGNhc2VcblxuICBpZiAoXCJtZXNzYWdlXCIgaW4gZGF0YSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEuZXJyb3JzKSkge1xuICAgICAgcmV0dXJuIGAke2RhdGEubWVzc2FnZX06ICR7ZGF0YS5lcnJvcnMubWFwKEpTT04uc3RyaW5naWZ5KS5qb2luKFwiLCBcIil9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YS5tZXNzYWdlO1xuICB9IC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0IC0ganVzdCBpbiBjYXNlXG5cblxuICByZXR1cm4gYFVua25vd24gZXJyb3I6ICR7SlNPTi5zdHJpbmdpZnkoZGF0YSl9YDtcbn1cblxuZnVuY3Rpb24gd2l0aERlZmF1bHRzKG9sZEVuZHBvaW50LCBuZXdEZWZhdWx0cykge1xuICBjb25zdCBlbmRwb2ludCA9IG9sZEVuZHBvaW50LmRlZmF1bHRzKG5ld0RlZmF1bHRzKTtcblxuICBjb25zdCBuZXdBcGkgPSBmdW5jdGlvbiAocm91dGUsIHBhcmFtZXRlcnMpIHtcbiAgICBjb25zdCBlbmRwb2ludE9wdGlvbnMgPSBlbmRwb2ludC5tZXJnZShyb3V0ZSwgcGFyYW1ldGVycyk7XG5cbiAgICBpZiAoIWVuZHBvaW50T3B0aW9ucy5yZXF1ZXN0IHx8ICFlbmRwb2ludE9wdGlvbnMucmVxdWVzdC5ob29rKSB7XG4gICAgICByZXR1cm4gZmV0Y2hXcmFwcGVyKGVuZHBvaW50LnBhcnNlKGVuZHBvaW50T3B0aW9ucykpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3QgPSAocm91dGUsIHBhcmFtZXRlcnMpID0+IHtcbiAgICAgIHJldHVybiBmZXRjaFdyYXBwZXIoZW5kcG9pbnQucGFyc2UoZW5kcG9pbnQubWVyZ2Uocm91dGUsIHBhcmFtZXRlcnMpKSk7XG4gICAgfTtcblxuICAgIE9iamVjdC5hc3NpZ24ocmVxdWVzdCwge1xuICAgICAgZW5kcG9pbnQsXG4gICAgICBkZWZhdWx0czogd2l0aERlZmF1bHRzLmJpbmQobnVsbCwgZW5kcG9pbnQpXG4gICAgfSk7XG4gICAgcmV0dXJuIGVuZHBvaW50T3B0aW9ucy5yZXF1ZXN0Lmhvb2socmVxdWVzdCwgZW5kcG9pbnRPcHRpb25zKTtcbiAgfTtcblxuICByZXR1cm4gT2JqZWN0LmFzc2lnbihuZXdBcGksIHtcbiAgICBlbmRwb2ludCxcbiAgICBkZWZhdWx0czogd2l0aERlZmF1bHRzLmJpbmQobnVsbCwgZW5kcG9pbnQpXG4gIH0pO1xufVxuXG5jb25zdCByZXF1ZXN0ID0gd2l0aERlZmF1bHRzKGVuZHBvaW50LmVuZHBvaW50LCB7XG4gIGhlYWRlcnM6IHtcbiAgICBcInVzZXItYWdlbnRcIjogYG9jdG9raXQtcmVxdWVzdC5qcy8ke1ZFUlNJT059ICR7dW5pdmVyc2FsVXNlckFnZW50LmdldFVzZXJBZ2VudCgpfWBcbiAgfVxufSk7XG5cbmV4cG9ydHMucmVxdWVzdCA9IHJlcXVlc3Q7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG52YXIgcmVxdWVzdCA9IHJlcXVpcmUoJ0BvY3Rva2l0L3JlcXVlc3QnKTtcbnZhciB1bml2ZXJzYWxVc2VyQWdlbnQgPSByZXF1aXJlKCd1bml2ZXJzYWwtdXNlci1hZ2VudCcpO1xuXG5jb25zdCBWRVJTSU9OID0gXCI0LjguMFwiO1xuXG5mdW5jdGlvbiBfYnVpbGRNZXNzYWdlRm9yUmVzcG9uc2VFcnJvcnMoZGF0YSkge1xuICByZXR1cm4gYFJlcXVlc3QgZmFpbGVkIGR1ZSB0byBmb2xsb3dpbmcgcmVzcG9uc2UgZXJyb3JzOlxcbmAgKyBkYXRhLmVycm9ycy5tYXAoZSA9PiBgIC0gJHtlLm1lc3NhZ2V9YCkuam9pbihcIlxcblwiKTtcbn1cblxuY2xhc3MgR3JhcGhxbFJlc3BvbnNlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHJlcXVlc3QsIGhlYWRlcnMsIHJlc3BvbnNlKSB7XG4gICAgc3VwZXIoX2J1aWxkTWVzc2FnZUZvclJlc3BvbnNlRXJyb3JzKHJlc3BvbnNlKSk7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICB0aGlzLmhlYWRlcnMgPSBoZWFkZXJzO1xuICAgIHRoaXMucmVzcG9uc2UgPSByZXNwb25zZTtcbiAgICB0aGlzLm5hbWUgPSBcIkdyYXBocWxSZXNwb25zZUVycm9yXCI7IC8vIEV4cG9zZSB0aGUgZXJyb3JzIGFuZCByZXNwb25zZSBkYXRhIGluIHRoZWlyIHNob3J0aGFuZCBwcm9wZXJ0aWVzLlxuXG4gICAgdGhpcy5lcnJvcnMgPSByZXNwb25zZS5lcnJvcnM7XG4gICAgdGhpcy5kYXRhID0gcmVzcG9uc2UuZGF0YTsgLy8gTWFpbnRhaW5zIHByb3BlciBzdGFjayB0cmFjZSAob25seSBhdmFpbGFibGUgb24gVjgpXG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXG4gICAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgICB9XG4gIH1cblxufVxuXG5jb25zdCBOT05fVkFSSUFCTEVfT1BUSU9OUyA9IFtcIm1ldGhvZFwiLCBcImJhc2VVcmxcIiwgXCJ1cmxcIiwgXCJoZWFkZXJzXCIsIFwicmVxdWVzdFwiLCBcInF1ZXJ5XCIsIFwibWVkaWFUeXBlXCJdO1xuY29uc3QgRk9SQklEREVOX1ZBUklBQkxFX09QVElPTlMgPSBbXCJxdWVyeVwiLCBcIm1ldGhvZFwiLCBcInVybFwiXTtcbmNvbnN0IEdIRVNfVjNfU1VGRklYX1JFR0VYID0gL1xcL2FwaVxcL3YzXFwvPyQvO1xuZnVuY3Rpb24gZ3JhcGhxbChyZXF1ZXN0LCBxdWVyeSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucykge1xuICAgIGlmICh0eXBlb2YgcXVlcnkgPT09IFwic3RyaW5nXCIgJiYgXCJxdWVyeVwiIGluIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYFtAb2N0b2tpdC9ncmFwaHFsXSBcInF1ZXJ5XCIgY2Fubm90IGJlIHVzZWQgYXMgdmFyaWFibGUgbmFtZWApKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvcHRpb25zKSB7XG4gICAgICBpZiAoIUZPUkJJRERFTl9WQVJJQUJMRV9PUFRJT05TLmluY2x1ZGVzKGtleSkpIGNvbnRpbnVlO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihgW0BvY3Rva2l0L2dyYXBocWxdIFwiJHtrZXl9XCIgY2Fubm90IGJlIHVzZWQgYXMgdmFyaWFibGUgbmFtZWApKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBwYXJzZWRPcHRpb25zID0gdHlwZW9mIHF1ZXJ5ID09PSBcInN0cmluZ1wiID8gT2JqZWN0LmFzc2lnbih7XG4gICAgcXVlcnlcbiAgfSwgb3B0aW9ucykgOiBxdWVyeTtcbiAgY29uc3QgcmVxdWVzdE9wdGlvbnMgPSBPYmplY3Qua2V5cyhwYXJzZWRPcHRpb25zKS5yZWR1Y2UoKHJlc3VsdCwga2V5KSA9PiB7XG4gICAgaWYgKE5PTl9WQVJJQUJMRV9PUFRJT05TLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gcGFyc2VkT3B0aW9uc1trZXldO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBpZiAoIXJlc3VsdC52YXJpYWJsZXMpIHtcbiAgICAgIHJlc3VsdC52YXJpYWJsZXMgPSB7fTtcbiAgICB9XG5cbiAgICByZXN1bHQudmFyaWFibGVzW2tleV0gPSBwYXJzZWRPcHRpb25zW2tleV07XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSwge30pOyAvLyB3b3JrYXJvdW5kIGZvciBHaXRIdWIgRW50ZXJwcmlzZSBiYXNlVXJsIHNldCB3aXRoIC9hcGkvdjMgc3VmZml4XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9vY3Rva2l0L2F1dGgtYXBwLmpzL2lzc3Vlcy8xMTEjaXNzdWVjb21tZW50LTY1NzYxMDQ1MVxuXG4gIGNvbnN0IGJhc2VVcmwgPSBwYXJzZWRPcHRpb25zLmJhc2VVcmwgfHwgcmVxdWVzdC5lbmRwb2ludC5ERUZBVUxUUy5iYXNlVXJsO1xuXG4gIGlmIChHSEVTX1YzX1NVRkZJWF9SRUdFWC50ZXN0KGJhc2VVcmwpKSB7XG4gICAgcmVxdWVzdE9wdGlvbnMudXJsID0gYmFzZVVybC5yZXBsYWNlKEdIRVNfVjNfU1VGRklYX1JFR0VYLCBcIi9hcGkvZ3JhcGhxbFwiKTtcbiAgfVxuXG4gIHJldHVybiByZXF1ZXN0KHJlcXVlc3RPcHRpb25zKS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICBpZiAocmVzcG9uc2UuZGF0YS5lcnJvcnMpIHtcbiAgICAgIGNvbnN0IGhlYWRlcnMgPSB7fTtcblxuICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocmVzcG9uc2UuaGVhZGVycykpIHtcbiAgICAgICAgaGVhZGVyc1trZXldID0gcmVzcG9uc2UuaGVhZGVyc1trZXldO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgR3JhcGhxbFJlc3BvbnNlRXJyb3IocmVxdWVzdE9wdGlvbnMsIGhlYWRlcnMsIHJlc3BvbnNlLmRhdGEpO1xuICAgIH1cblxuICAgIHJldHVybiByZXNwb25zZS5kYXRhLmRhdGE7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB3aXRoRGVmYXVsdHMocmVxdWVzdCQxLCBuZXdEZWZhdWx0cykge1xuICBjb25zdCBuZXdSZXF1ZXN0ID0gcmVxdWVzdCQxLmRlZmF1bHRzKG5ld0RlZmF1bHRzKTtcblxuICBjb25zdCBuZXdBcGkgPSAocXVlcnksIG9wdGlvbnMpID0+IHtcbiAgICByZXR1cm4gZ3JhcGhxbChuZXdSZXF1ZXN0LCBxdWVyeSwgb3B0aW9ucyk7XG4gIH07XG5cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24obmV3QXBpLCB7XG4gICAgZGVmYXVsdHM6IHdpdGhEZWZhdWx0cy5iaW5kKG51bGwsIG5ld1JlcXVlc3QpLFxuICAgIGVuZHBvaW50OiByZXF1ZXN0LnJlcXVlc3QuZW5kcG9pbnRcbiAgfSk7XG59XG5cbmNvbnN0IGdyYXBocWwkMSA9IHdpdGhEZWZhdWx0cyhyZXF1ZXN0LnJlcXVlc3QsIHtcbiAgaGVhZGVyczoge1xuICAgIFwidXNlci1hZ2VudFwiOiBgb2N0b2tpdC1ncmFwaHFsLmpzLyR7VkVSU0lPTn0gJHt1bml2ZXJzYWxVc2VyQWdlbnQuZ2V0VXNlckFnZW50KCl9YFxuICB9LFxuICBtZXRob2Q6IFwiUE9TVFwiLFxuICB1cmw6IFwiL2dyYXBocWxcIlxufSk7XG5mdW5jdGlvbiB3aXRoQ3VzdG9tUmVxdWVzdChjdXN0b21SZXF1ZXN0KSB7XG4gIHJldHVybiB3aXRoRGVmYXVsdHMoY3VzdG9tUmVxdWVzdCwge1xuICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgdXJsOiBcIi9ncmFwaHFsXCJcbiAgfSk7XG59XG5cbmV4cG9ydHMuR3JhcGhxbFJlc3BvbnNlRXJyb3IgPSBHcmFwaHFsUmVzcG9uc2VFcnJvcjtcbmV4cG9ydHMuZ3JhcGhxbCA9IGdyYXBocWwkMTtcbmV4cG9ydHMud2l0aEN1c3RvbVJlcXVlc3QgPSB3aXRoQ3VzdG9tUmVxdWVzdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmNvbnN0IFJFR0VYX0lTX0lOU1RBTExBVElPTl9MRUdBQ1kgPSAvXnYxXFwuLztcbmNvbnN0IFJFR0VYX0lTX0lOU1RBTExBVElPTiA9IC9eZ2hzXy87XG5jb25zdCBSRUdFWF9JU19VU0VSX1RPX1NFUlZFUiA9IC9eZ2h1Xy87XG5hc3luYyBmdW5jdGlvbiBhdXRoKHRva2VuKSB7XG4gIGNvbnN0IGlzQXBwID0gdG9rZW4uc3BsaXQoL1xcLi8pLmxlbmd0aCA9PT0gMztcbiAgY29uc3QgaXNJbnN0YWxsYXRpb24gPSBSRUdFWF9JU19JTlNUQUxMQVRJT05fTEVHQUNZLnRlc3QodG9rZW4pIHx8IFJFR0VYX0lTX0lOU1RBTExBVElPTi50ZXN0KHRva2VuKTtcbiAgY29uc3QgaXNVc2VyVG9TZXJ2ZXIgPSBSRUdFWF9JU19VU0VSX1RPX1NFUlZFUi50ZXN0KHRva2VuKTtcbiAgY29uc3QgdG9rZW5UeXBlID0gaXNBcHAgPyBcImFwcFwiIDogaXNJbnN0YWxsYXRpb24gPyBcImluc3RhbGxhdGlvblwiIDogaXNVc2VyVG9TZXJ2ZXIgPyBcInVzZXItdG8tc2VydmVyXCIgOiBcIm9hdXRoXCI7XG4gIHJldHVybiB7XG4gICAgdHlwZTogXCJ0b2tlblwiLFxuICAgIHRva2VuOiB0b2tlbixcbiAgICB0b2tlblR5cGVcbiAgfTtcbn1cblxuLyoqXG4gKiBQcmVmaXggdG9rZW4gZm9yIHVzYWdlIGluIHRoZSBBdXRob3JpemF0aW9uIGhlYWRlclxuICpcbiAqIEBwYXJhbSB0b2tlbiBPQXV0aCB0b2tlbiBvciBKU09OIFdlYiBUb2tlblxuICovXG5mdW5jdGlvbiB3aXRoQXV0aG9yaXphdGlvblByZWZpeCh0b2tlbikge1xuICBpZiAodG9rZW4uc3BsaXQoL1xcLi8pLmxlbmd0aCA9PT0gMykge1xuICAgIHJldHVybiBgYmVhcmVyICR7dG9rZW59YDtcbiAgfVxuXG4gIHJldHVybiBgdG9rZW4gJHt0b2tlbn1gO1xufVxuXG5hc3luYyBmdW5jdGlvbiBob29rKHRva2VuLCByZXF1ZXN0LCByb3V0ZSwgcGFyYW1ldGVycykge1xuICBjb25zdCBlbmRwb2ludCA9IHJlcXVlc3QuZW5kcG9pbnQubWVyZ2Uocm91dGUsIHBhcmFtZXRlcnMpO1xuICBlbmRwb2ludC5oZWFkZXJzLmF1dGhvcml6YXRpb24gPSB3aXRoQXV0aG9yaXphdGlvblByZWZpeCh0b2tlbik7XG4gIHJldHVybiByZXF1ZXN0KGVuZHBvaW50KTtcbn1cblxuY29uc3QgY3JlYXRlVG9rZW5BdXRoID0gZnVuY3Rpb24gY3JlYXRlVG9rZW5BdXRoKHRva2VuKSB7XG4gIGlmICghdG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJbQG9jdG9raXQvYXV0aC10b2tlbl0gTm8gdG9rZW4gcGFzc2VkIHRvIGNyZWF0ZVRva2VuQXV0aFwiKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdG9rZW4gIT09IFwic3RyaW5nXCIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJbQG9jdG9raXQvYXV0aC10b2tlbl0gVG9rZW4gcGFzc2VkIHRvIGNyZWF0ZVRva2VuQXV0aCBpcyBub3QgYSBzdHJpbmdcIik7XG4gIH1cblxuICB0b2tlbiA9IHRva2VuLnJlcGxhY2UoL14odG9rZW58YmVhcmVyKSArL2ksIFwiXCIpO1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihhdXRoLmJpbmQobnVsbCwgdG9rZW4pLCB7XG4gICAgaG9vazogaG9vay5iaW5kKG51bGwsIHRva2VuKVxuICB9KTtcbn07XG5cbmV4cG9ydHMuY3JlYXRlVG9rZW5BdXRoID0gY3JlYXRlVG9rZW5BdXRoO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxudmFyIHVuaXZlcnNhbFVzZXJBZ2VudCA9IHJlcXVpcmUoJ3VuaXZlcnNhbC11c2VyLWFnZW50Jyk7XG52YXIgYmVmb3JlQWZ0ZXJIb29rID0gcmVxdWlyZSgnYmVmb3JlLWFmdGVyLWhvb2snKTtcbnZhciByZXF1ZXN0ID0gcmVxdWlyZSgnQG9jdG9raXQvcmVxdWVzdCcpO1xudmFyIGdyYXBocWwgPSByZXF1aXJlKCdAb2N0b2tpdC9ncmFwaHFsJyk7XG52YXIgYXV0aFRva2VuID0gcmVxdWlyZSgnQG9jdG9raXQvYXV0aC10b2tlbicpO1xuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7XG4gIGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9O1xuICB2YXIgdGFyZ2V0ID0ge307XG4gIHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTtcbiAgdmFyIGtleSwgaTtcblxuICBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGtleSA9IHNvdXJjZUtleXNbaV07XG4gICAgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTtcbiAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHtcbiAgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307XG5cbiAgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpO1xuXG4gIHZhciBrZXksIGk7XG5cbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldO1xuICAgICAgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTtcbiAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7XG4gICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbmNvbnN0IFZFUlNJT04gPSBcIjMuNi4wXCI7XG5cbmNvbnN0IF9leGNsdWRlZCA9IFtcImF1dGhTdHJhdGVneVwiXTtcbmNsYXNzIE9jdG9raXQge1xuICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCBob29rID0gbmV3IGJlZm9yZUFmdGVySG9vay5Db2xsZWN0aW9uKCk7XG4gICAgY29uc3QgcmVxdWVzdERlZmF1bHRzID0ge1xuICAgICAgYmFzZVVybDogcmVxdWVzdC5yZXF1ZXN0LmVuZHBvaW50LkRFRkFVTFRTLmJhc2VVcmwsXG4gICAgICBoZWFkZXJzOiB7fSxcbiAgICAgIHJlcXVlc3Q6IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMucmVxdWVzdCwge1xuICAgICAgICAvLyBAdHMtaWdub3JlIGludGVybmFsIHVzYWdlIG9ubHksIG5vIG5lZWQgdG8gdHlwZVxuICAgICAgICBob29rOiBob29rLmJpbmQobnVsbCwgXCJyZXF1ZXN0XCIpXG4gICAgICB9KSxcbiAgICAgIG1lZGlhVHlwZToge1xuICAgICAgICBwcmV2aWV3czogW10sXG4gICAgICAgIGZvcm1hdDogXCJcIlxuICAgICAgfVxuICAgIH07IC8vIHByZXBlbmQgZGVmYXVsdCB1c2VyIGFnZW50IHdpdGggYG9wdGlvbnMudXNlckFnZW50YCBpZiBzZXRcblxuICAgIHJlcXVlc3REZWZhdWx0cy5oZWFkZXJzW1widXNlci1hZ2VudFwiXSA9IFtvcHRpb25zLnVzZXJBZ2VudCwgYG9jdG9raXQtY29yZS5qcy8ke1ZFUlNJT059ICR7dW5pdmVyc2FsVXNlckFnZW50LmdldFVzZXJBZ2VudCgpfWBdLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKTtcblxuICAgIGlmIChvcHRpb25zLmJhc2VVcmwpIHtcbiAgICAgIHJlcXVlc3REZWZhdWx0cy5iYXNlVXJsID0gb3B0aW9ucy5iYXNlVXJsO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnByZXZpZXdzKSB7XG4gICAgICByZXF1ZXN0RGVmYXVsdHMubWVkaWFUeXBlLnByZXZpZXdzID0gb3B0aW9ucy5wcmV2aWV3cztcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy50aW1lWm9uZSkge1xuICAgICAgcmVxdWVzdERlZmF1bHRzLmhlYWRlcnNbXCJ0aW1lLXpvbmVcIl0gPSBvcHRpb25zLnRpbWVab25lO1xuICAgIH1cblxuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3QucmVxdWVzdC5kZWZhdWx0cyhyZXF1ZXN0RGVmYXVsdHMpO1xuICAgIHRoaXMuZ3JhcGhxbCA9IGdyYXBocWwud2l0aEN1c3RvbVJlcXVlc3QodGhpcy5yZXF1ZXN0KS5kZWZhdWx0cyhyZXF1ZXN0RGVmYXVsdHMpO1xuICAgIHRoaXMubG9nID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICBkZWJ1ZzogKCkgPT4ge30sXG4gICAgICBpbmZvOiAoKSA9PiB7fSxcbiAgICAgIHdhcm46IGNvbnNvbGUud2Fybi5iaW5kKGNvbnNvbGUpLFxuICAgICAgZXJyb3I6IGNvbnNvbGUuZXJyb3IuYmluZChjb25zb2xlKVxuICAgIH0sIG9wdGlvbnMubG9nKTtcbiAgICB0aGlzLmhvb2sgPSBob29rOyAvLyAoMSkgSWYgbmVpdGhlciBgb3B0aW9ucy5hdXRoU3RyYXRlZ3lgIG5vciBgb3B0aW9ucy5hdXRoYCBhcmUgc2V0LCB0aGUgYG9jdG9raXRgIGluc3RhbmNlXG4gICAgLy8gICAgIGlzIHVuYXV0aGVudGljYXRlZC4gVGhlIGB0aGlzLmF1dGgoKWAgbWV0aG9kIGlzIGEgbm8tb3AgYW5kIG5vIHJlcXVlc3QgaG9vayBpcyByZWdpc3RlcmVkLlxuICAgIC8vICgyKSBJZiBvbmx5IGBvcHRpb25zLmF1dGhgIGlzIHNldCwgdXNlIHRoZSBkZWZhdWx0IHRva2VuIGF1dGhlbnRpY2F0aW9uIHN0cmF0ZWd5LlxuICAgIC8vICgzKSBJZiBgb3B0aW9ucy5hdXRoU3RyYXRlZ3lgIGlzIHNldCB0aGVuIHVzZSBpdCBhbmQgcGFzcyBpbiBgb3B0aW9ucy5hdXRoYC4gQWx3YXlzIHBhc3Mgb3duIHJlcXVlc3QgYXMgbWFueSBzdHJhdGVnaWVzIGFjY2VwdCBhIGN1c3RvbSByZXF1ZXN0IGluc3RhbmNlLlxuICAgIC8vIFRPRE86IHR5cGUgYG9wdGlvbnMuYXV0aGAgYmFzZWQgb24gYG9wdGlvbnMuYXV0aFN0cmF0ZWd5YC5cblxuICAgIGlmICghb3B0aW9ucy5hdXRoU3RyYXRlZ3kpIHtcbiAgICAgIGlmICghb3B0aW9ucy5hdXRoKSB7XG4gICAgICAgIC8vICgxKVxuICAgICAgICB0aGlzLmF1dGggPSBhc3luYyAoKSA9PiAoe1xuICAgICAgICAgIHR5cGU6IFwidW5hdXRoZW50aWNhdGVkXCJcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyAoMilcbiAgICAgICAgY29uc3QgYXV0aCA9IGF1dGhUb2tlbi5jcmVhdGVUb2tlbkF1dGgob3B0aW9ucy5hdXRoKTsgLy8gQHRzLWlnbm9yZSAgwq9cXF8o44OEKV8vwq9cblxuICAgICAgICBob29rLndyYXAoXCJyZXF1ZXN0XCIsIGF1dGguaG9vayk7XG4gICAgICAgIHRoaXMuYXV0aCA9IGF1dGg7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgYXV0aFN0cmF0ZWd5XG4gICAgICB9ID0gb3B0aW9ucyxcbiAgICAgICAgICAgIG90aGVyT3B0aW9ucyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhvcHRpb25zLCBfZXhjbHVkZWQpO1xuXG4gICAgICBjb25zdCBhdXRoID0gYXV0aFN0cmF0ZWd5KE9iamVjdC5hc3NpZ24oe1xuICAgICAgICByZXF1ZXN0OiB0aGlzLnJlcXVlc3QsXG4gICAgICAgIGxvZzogdGhpcy5sb2csXG4gICAgICAgIC8vIHdlIHBhc3MgdGhlIGN1cnJlbnQgb2N0b2tpdCBpbnN0YW5jZSBhcyB3ZWxsIGFzIGl0cyBjb25zdHJ1Y3RvciBvcHRpb25zXG4gICAgICAgIC8vIHRvIGFsbG93IGZvciBhdXRoZW50aWNhdGlvbiBzdHJhdGVnaWVzIHRoYXQgcmV0dXJuIGEgbmV3IG9jdG9raXQgaW5zdGFuY2VcbiAgICAgICAgLy8gdGhhdCBzaGFyZXMgdGhlIHNhbWUgaW50ZXJuYWwgc3RhdGUgYXMgdGhlIGN1cnJlbnQgb25lLiBUaGUgb3JpZ2luYWxcbiAgICAgICAgLy8gcmVxdWlyZW1lbnQgZm9yIHRoaXMgd2FzIHRoZSBcImV2ZW50LW9jdG9raXRcIiBhdXRoZW50aWNhdGlvbiBzdHJhdGVneVxuICAgICAgICAvLyBvZiBodHRwczovL2dpdGh1Yi5jb20vcHJvYm90L29jdG9raXQtYXV0aC1wcm9ib3QuXG4gICAgICAgIG9jdG9raXQ6IHRoaXMsXG4gICAgICAgIG9jdG9raXRPcHRpb25zOiBvdGhlck9wdGlvbnNcbiAgICAgIH0sIG9wdGlvbnMuYXV0aCkpOyAvLyBAdHMtaWdub3JlICDCr1xcXyjjg4QpXy/Cr1xuXG4gICAgICBob29rLndyYXAoXCJyZXF1ZXN0XCIsIGF1dGguaG9vayk7XG4gICAgICB0aGlzLmF1dGggPSBhdXRoO1xuICAgIH0gLy8gYXBwbHkgcGx1Z2luc1xuICAgIC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8xNjM0NTE3MlxuXG5cbiAgICBjb25zdCBjbGFzc0NvbnN0cnVjdG9yID0gdGhpcy5jb25zdHJ1Y3RvcjtcbiAgICBjbGFzc0NvbnN0cnVjdG9yLnBsdWdpbnMuZm9yRWFjaChwbHVnaW4gPT4ge1xuICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBwbHVnaW4odGhpcywgb3B0aW9ucykpO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRzKGRlZmF1bHRzKSB7XG4gICAgY29uc3QgT2N0b2tpdFdpdGhEZWZhdWx0cyA9IGNsYXNzIGV4dGVuZHMgdGhpcyB7XG4gICAgICBjb25zdHJ1Y3RvciguLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBhcmdzWzBdIHx8IHt9O1xuXG4gICAgICAgIGlmICh0eXBlb2YgZGVmYXVsdHMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIHN1cGVyKGRlZmF1bHRzKG9wdGlvbnMpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBzdXBlcihPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0cywgb3B0aW9ucywgb3B0aW9ucy51c2VyQWdlbnQgJiYgZGVmYXVsdHMudXNlckFnZW50ID8ge1xuICAgICAgICAgIHVzZXJBZ2VudDogYCR7b3B0aW9ucy51c2VyQWdlbnR9ICR7ZGVmYXVsdHMudXNlckFnZW50fWBcbiAgICAgICAgfSA6IG51bGwpKTtcbiAgICAgIH1cblxuICAgIH07XG4gICAgcmV0dXJuIE9jdG9raXRXaXRoRGVmYXVsdHM7XG4gIH1cbiAgLyoqXG4gICAqIEF0dGFjaCBhIHBsdWdpbiAob3IgbWFueSkgdG8geW91ciBPY3Rva2l0IGluc3RhbmNlLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBjb25zdCBBUEkgPSBPY3Rva2l0LnBsdWdpbihwbHVnaW4xLCBwbHVnaW4yLCBwbHVnaW4zLCAuLi4pXG4gICAqL1xuXG5cbiAgc3RhdGljIHBsdWdpbiguLi5uZXdQbHVnaW5zKSB7XG4gICAgdmFyIF9hO1xuXG4gICAgY29uc3QgY3VycmVudFBsdWdpbnMgPSB0aGlzLnBsdWdpbnM7XG4gICAgY29uc3QgTmV3T2N0b2tpdCA9IChfYSA9IGNsYXNzIGV4dGVuZHMgdGhpcyB7fSwgX2EucGx1Z2lucyA9IGN1cnJlbnRQbHVnaW5zLmNvbmNhdChuZXdQbHVnaW5zLmZpbHRlcihwbHVnaW4gPT4gIWN1cnJlbnRQbHVnaW5zLmluY2x1ZGVzKHBsdWdpbikpKSwgX2EpO1xuICAgIHJldHVybiBOZXdPY3Rva2l0O1xuICB9XG5cbn1cbk9jdG9raXQuVkVSU0lPTiA9IFZFUlNJT047XG5PY3Rva2l0LnBsdWdpbnMgPSBbXTtcblxuZXhwb3J0cy5PY3Rva2l0ID0gT2N0b2tpdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkge1xuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG5cbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTtcblxuICAgIGlmIChlbnVtZXJhYmxlT25seSkge1xuICAgICAgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7XG4gIH1cblxuICByZXR1cm4ga2V5cztcbn1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZDIodGFyZ2V0KSB7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307XG5cbiAgICBpZiAoaSAlIDIpIHtcbiAgICAgIG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gb2JqO1xufVxuXG5jb25zdCBFbmRwb2ludHMgPSB7XG4gIGFjdGlvbnM6IHtcbiAgICBhZGRDdXN0b21MYWJlbHNUb1NlbGZIb3N0ZWRSdW5uZXJGb3JPcmc6IFtcIlBPU1QgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVsc1wiXSxcbiAgICBhZGRDdXN0b21MYWJlbHNUb1NlbGZIb3N0ZWRSdW5uZXJGb3JSZXBvOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCJdLFxuICAgIGFkZFNlbGVjdGVkUmVwb1RvT3JnU2VjcmV0OiBbXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiXSxcbiAgICBhcHByb3ZlV29ya2Zsb3dSdW46IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hcHByb3ZlXCJdLFxuICAgIGNhbmNlbFdvcmtmbG93UnVuOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vY2FuY2VsXCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlRW52aXJvbm1lbnRTZWNyZXQ6IFtcIlBVVCAvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBjcmVhdGVPclVwZGF0ZU9yZ1NlY3JldDogW1wiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlUmVwb1NlY3JldDogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBjcmVhdGVSZWdpc3RyYXRpb25Ub2tlbkZvck9yZzogW1wiUE9TVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMvcmVnaXN0cmF0aW9uLXRva2VuXCJdLFxuICAgIGNyZWF0ZVJlZ2lzdHJhdGlvblRva2VuRm9yUmVwbzogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3JlZ2lzdHJhdGlvbi10b2tlblwiXSxcbiAgICBjcmVhdGVSZW1vdmVUb2tlbkZvck9yZzogW1wiUE9TVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMvcmVtb3ZlLXRva2VuXCJdLFxuICAgIGNyZWF0ZVJlbW92ZVRva2VuRm9yUmVwbzogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3JlbW92ZS10b2tlblwiXSxcbiAgICBjcmVhdGVXb3JrZmxvd0Rpc3BhdGNoOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L2Rpc3BhdGNoZXNcIl0sXG4gICAgZGVsZXRlQWN0aW9uc0NhY2hlQnlJZDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2NhY2hlcy97Y2FjaGVfaWR9XCJdLFxuICAgIGRlbGV0ZUFjdGlvbnNDYWNoZUJ5S2V5OiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvY2FjaGVzez9rZXkscmVmfVwiXSxcbiAgICBkZWxldGVBcnRpZmFjdDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2FydGlmYWN0cy97YXJ0aWZhY3RfaWR9XCJdLFxuICAgIGRlbGV0ZUVudmlyb25tZW50U2VjcmV0OiBbXCJERUxFVEUgL3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH0vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZGVsZXRlT3JnU2VjcmV0OiBbXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZGVsZXRlUmVwb1NlY3JldDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBkZWxldGVTZWxmSG9zdGVkUnVubmVyRnJvbU9yZzogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfVwiXSxcbiAgICBkZWxldGVTZWxmSG9zdGVkUnVubmVyRnJvbVJlcG86IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9XCJdLFxuICAgIGRlbGV0ZVdvcmtmbG93UnVuOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfVwiXSxcbiAgICBkZWxldGVXb3JrZmxvd1J1bkxvZ3M6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2xvZ3NcIl0sXG4gICAgZGlzYWJsZVNlbGVjdGVkUmVwb3NpdG9yeUdpdGh1YkFjdGlvbnNPcmdhbml6YXRpb246IFtcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIl0sXG4gICAgZGlzYWJsZVdvcmtmbG93OiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvd29ya2Zsb3dzL3t3b3JrZmxvd19pZH0vZGlzYWJsZVwiXSxcbiAgICBkb3dubG9hZEFydGlmYWN0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvYXJ0aWZhY3RzL3thcnRpZmFjdF9pZH0ve2FyY2hpdmVfZm9ybWF0fVwiXSxcbiAgICBkb3dubG9hZEpvYkxvZ3NGb3JXb3JrZmxvd1J1bjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2pvYnMve2pvYl9pZH0vbG9nc1wiXSxcbiAgICBkb3dubG9hZFdvcmtmbG93UnVuQXR0ZW1wdExvZ3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2F0dGVtcHRzL3thdHRlbXB0X251bWJlcn0vbG9nc1wiXSxcbiAgICBkb3dubG9hZFdvcmtmbG93UnVuTG9nczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vbG9nc1wiXSxcbiAgICBlbmFibGVTZWxlY3RlZFJlcG9zaXRvcnlHaXRodWJBY3Rpb25zT3JnYW5pemF0aW9uOiBbXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCJdLFxuICAgIGVuYWJsZVdvcmtmbG93OiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvd29ya2Zsb3dzL3t3b3JrZmxvd19pZH0vZW5hYmxlXCJdLFxuICAgIGdldEFjdGlvbnNDYWNoZUxpc3Q6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9jYWNoZXNcIl0sXG4gICAgZ2V0QWN0aW9uc0NhY2hlVXNhZ2U6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9jYWNoZS91c2FnZVwiXSxcbiAgICBnZXRBY3Rpb25zQ2FjaGVVc2FnZUJ5UmVwb0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvY2FjaGUvdXNhZ2UtYnktcmVwb3NpdG9yeVwiXSxcbiAgICBnZXRBY3Rpb25zQ2FjaGVVc2FnZUZvckVudGVycHJpc2U6IFtcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2FjdGlvbnMvY2FjaGUvdXNhZ2VcIl0sXG4gICAgZ2V0QWN0aW9uc0NhY2hlVXNhZ2VGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2NhY2hlL3VzYWdlXCJdLFxuICAgIGdldEFsbG93ZWRBY3Rpb25zT3JnYW5pemF0aW9uOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9zZWxlY3RlZC1hY3Rpb25zXCJdLFxuICAgIGdldEFsbG93ZWRBY3Rpb25zUmVwb3NpdG9yeTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zL3NlbGVjdGVkLWFjdGlvbnNcIl0sXG4gICAgZ2V0QXJ0aWZhY3Q6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9hcnRpZmFjdHMve2FydGlmYWN0X2lkfVwiXSxcbiAgICBnZXRFbnZpcm9ubWVudFB1YmxpY0tleTogW1wiR0VUIC9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vc2VjcmV0cy9wdWJsaWMta2V5XCJdLFxuICAgIGdldEVudmlyb25tZW50U2VjcmV0OiBbXCJHRVQgL3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH0vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZ2V0R2l0aHViQWN0aW9uc0RlZmF1bHRXb3JrZmxvd1Blcm1pc3Npb25zRW50ZXJwcmlzZTogW1wiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vYWN0aW9ucy9wZXJtaXNzaW9ucy93b3JrZmxvd1wiXSxcbiAgICBnZXRHaXRodWJBY3Rpb25zRGVmYXVsdFdvcmtmbG93UGVybWlzc2lvbnNPcmdhbml6YXRpb246IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3dvcmtmbG93XCJdLFxuICAgIGdldEdpdGh1YkFjdGlvbnNEZWZhdWx0V29ya2Zsb3dQZXJtaXNzaW9uc1JlcG9zaXRvcnk6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9ucy93b3JrZmxvd1wiXSxcbiAgICBnZXRHaXRodWJBY3Rpb25zUGVybWlzc2lvbnNPcmdhbml6YXRpb246IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zXCJdLFxuICAgIGdldEdpdGh1YkFjdGlvbnNQZXJtaXNzaW9uc1JlcG9zaXRvcnk6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9uc1wiXSxcbiAgICBnZXRKb2JGb3JXb3JrZmxvd1J1bjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2pvYnMve2pvYl9pZH1cIl0sXG4gICAgZ2V0T3JnUHVibGljS2V5OiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3B1YmxpYy1rZXlcIl0sXG4gICAgZ2V0T3JnU2VjcmV0OiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZ2V0UGVuZGluZ0RlcGxveW1lbnRzRm9yUnVuOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9wZW5kaW5nX2RlcGxveW1lbnRzXCJdLFxuICAgIGdldFJlcG9QZXJtaXNzaW9uczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zXCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJhY3Rpb25zXCIsIFwiZ2V0R2l0aHViQWN0aW9uc1Blcm1pc3Npb25zUmVwb3NpdG9yeVwiXVxuICAgIH1dLFxuICAgIGdldFJlcG9QdWJsaWNLZXk6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9zZWNyZXRzL3B1YmxpYy1rZXlcIl0sXG4gICAgZ2V0UmVwb1NlY3JldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBnZXRSZXZpZXdzRm9yUnVuOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hcHByb3ZhbHNcIl0sXG4gICAgZ2V0U2VsZkhvc3RlZFJ1bm5lckZvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfVwiXSxcbiAgICBnZXRTZWxmSG9zdGVkUnVubmVyRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH1cIl0sXG4gICAgZ2V0V29ya2Zsb3c6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3Mve3dvcmtmbG93X2lkfVwiXSxcbiAgICBnZXRXb3JrZmxvd0FjY2Vzc1RvUmVwb3NpdG9yeTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zL2FjY2Vzc1wiXSxcbiAgICBnZXRXb3JrZmxvd1J1bjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH1cIl0sXG4gICAgZ2V0V29ya2Zsb3dSdW5BdHRlbXB0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hdHRlbXB0cy97YXR0ZW1wdF9udW1iZXJ9XCJdLFxuICAgIGdldFdvcmtmbG93UnVuVXNhZ2U6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L3RpbWluZ1wiXSxcbiAgICBnZXRXb3JrZmxvd1VzYWdlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvd29ya2Zsb3dzL3t3b3JrZmxvd19pZH0vdGltaW5nXCJdLFxuICAgIGxpc3RBcnRpZmFjdHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvYXJ0aWZhY3RzXCJdLFxuICAgIGxpc3RFbnZpcm9ubWVudFNlY3JldHM6IFtcIkdFVCAvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHNcIl0sXG4gICAgbGlzdEpvYnNGb3JXb3JrZmxvd1J1bjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vam9ic1wiXSxcbiAgICBsaXN0Sm9ic0ZvcldvcmtmbG93UnVuQXR0ZW1wdDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXR0ZW1wdHMve2F0dGVtcHRfbnVtYmVyfS9qb2JzXCJdLFxuICAgIGxpc3RMYWJlbHNGb3JTZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVsc1wiXSxcbiAgICBsaXN0TGFiZWxzRm9yU2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVsc1wiXSxcbiAgICBsaXN0T3JnU2VjcmV0czogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0c1wiXSxcbiAgICBsaXN0UmVwb1NlY3JldHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9zZWNyZXRzXCJdLFxuICAgIGxpc3RSZXBvV29ya2Zsb3dzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvd29ya2Zsb3dzXCJdLFxuICAgIGxpc3RSdW5uZXJBcHBsaWNhdGlvbnNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMvZG93bmxvYWRzXCJdLFxuICAgIGxpc3RSdW5uZXJBcHBsaWNhdGlvbnNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy9kb3dubG9hZHNcIl0sXG4gICAgbGlzdFNlbGVjdGVkUmVwb3NGb3JPcmdTZWNyZXQ6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIl0sXG4gICAgbGlzdFNlbGVjdGVkUmVwb3NpdG9yaWVzRW5hYmxlZEdpdGh1YkFjdGlvbnNPcmdhbml6YXRpb246IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3JlcG9zaXRvcmllc1wiXSxcbiAgICBsaXN0U2VsZkhvc3RlZFJ1bm5lcnNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnNcIl0sXG4gICAgbGlzdFNlbGZIb3N0ZWRSdW5uZXJzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnNcIl0sXG4gICAgbGlzdFdvcmtmbG93UnVuQXJ0aWZhY3RzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hcnRpZmFjdHNcIl0sXG4gICAgbGlzdFdvcmtmbG93UnVuczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L3J1bnNcIl0sXG4gICAgbGlzdFdvcmtmbG93UnVuc0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zXCJdLFxuICAgIHJlUnVuSm9iRm9yV29ya2Zsb3dSdW46IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvam9icy97am9iX2lkfS9yZXJ1blwiXSxcbiAgICByZVJ1bldvcmtmbG93OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vcmVydW5cIl0sXG4gICAgcmVSdW5Xb3JrZmxvd0ZhaWxlZEpvYnM6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9yZXJ1bi1mYWlsZWQtam9ic1wiXSxcbiAgICByZW1vdmVBbGxDdXN0b21MYWJlbHNGcm9tU2VsZkhvc3RlZFJ1bm5lckZvck9yZzogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIl0sXG4gICAgcmVtb3ZlQWxsQ3VzdG9tTGFiZWxzRnJvbVNlbGZIb3N0ZWRSdW5uZXJGb3JSZXBvOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIl0sXG4gICAgcmVtb3ZlQ3VzdG9tTGFiZWxGcm9tU2VsZkhvc3RlZFJ1bm5lckZvck9yZzogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHMve25hbWV9XCJdLFxuICAgIHJlbW92ZUN1c3RvbUxhYmVsRnJvbVNlbGZIb3N0ZWRSdW5uZXJGb3JSZXBvOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHMve25hbWV9XCJdLFxuICAgIHJlbW92ZVNlbGVjdGVkUmVwb0Zyb21PcmdTZWNyZXQ6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCJdLFxuICAgIHJldmlld1BlbmRpbmdEZXBsb3ltZW50c0ZvclJ1bjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L3BlbmRpbmdfZGVwbG95bWVudHNcIl0sXG4gICAgc2V0QWxsb3dlZEFjdGlvbnNPcmdhbml6YXRpb246IFtcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3NlbGVjdGVkLWFjdGlvbnNcIl0sXG4gICAgc2V0QWxsb3dlZEFjdGlvbnNSZXBvc2l0b3J5OiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnMvc2VsZWN0ZWQtYWN0aW9uc1wiXSxcbiAgICBzZXRDdXN0b21MYWJlbHNGb3JTZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVsc1wiXSxcbiAgICBzZXRDdXN0b21MYWJlbHNGb3JTZWxmSG9zdGVkUnVubmVyRm9yUmVwbzogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCJdLFxuICAgIHNldEdpdGh1YkFjdGlvbnNEZWZhdWx0V29ya2Zsb3dQZXJtaXNzaW9uc0VudGVycHJpc2U6IFtcIlBVVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2FjdGlvbnMvcGVybWlzc2lvbnMvd29ya2Zsb3dcIl0sXG4gICAgc2V0R2l0aHViQWN0aW9uc0RlZmF1bHRXb3JrZmxvd1Blcm1pc3Npb25zT3JnYW5pemF0aW9uOiBbXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy93b3JrZmxvd1wiXSxcbiAgICBzZXRHaXRodWJBY3Rpb25zRGVmYXVsdFdvcmtmbG93UGVybWlzc2lvbnNSZXBvc2l0b3J5OiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnMvd29ya2Zsb3dcIl0sXG4gICAgc2V0R2l0aHViQWN0aW9uc1Blcm1pc3Npb25zT3JnYW5pemF0aW9uOiBbXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9uc1wiXSxcbiAgICBzZXRHaXRodWJBY3Rpb25zUGVybWlzc2lvbnNSZXBvc2l0b3J5OiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnNcIl0sXG4gICAgc2V0U2VsZWN0ZWRSZXBvc0Zvck9yZ1NlY3JldDogW1wiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiXSxcbiAgICBzZXRTZWxlY3RlZFJlcG9zaXRvcmllc0VuYWJsZWRHaXRodWJBY3Rpb25zT3JnYW5pemF0aW9uOiBbXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9yZXBvc2l0b3JpZXNcIl0sXG4gICAgc2V0V29ya2Zsb3dBY2Nlc3NUb1JlcG9zaXRvcnk6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9ucy9hY2Nlc3NcIl1cbiAgfSxcbiAgYWN0aXZpdHk6IHtcbiAgICBjaGVja1JlcG9Jc1N0YXJyZWRCeUF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvc3RhcnJlZC97b3duZXJ9L3tyZXBvfVwiXSxcbiAgICBkZWxldGVSZXBvU3Vic2NyaXB0aW9uOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmlwdGlvblwiXSxcbiAgICBkZWxldGVUaHJlYWRTdWJzY3JpcHRpb246IFtcIkRFTEVURSAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9L3N1YnNjcmlwdGlvblwiXSxcbiAgICBnZXRGZWVkczogW1wiR0VUIC9mZWVkc1wiXSxcbiAgICBnZXRSZXBvU3Vic2NyaXB0aW9uOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmlwdGlvblwiXSxcbiAgICBnZXRUaHJlYWQ6IFtcIkdFVCAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9XCJdLFxuICAgIGdldFRocmVhZFN1YnNjcmlwdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL25vdGlmaWNhdGlvbnMvdGhyZWFkcy97dGhyZWFkX2lkfS9zdWJzY3JpcHRpb25cIl0sXG4gICAgbGlzdEV2ZW50c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzXCJdLFxuICAgIGxpc3ROb3RpZmljYXRpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvbm90aWZpY2F0aW9uc1wiXSxcbiAgICBsaXN0T3JnRXZlbnRzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ldmVudHMvb3Jncy97b3JnfVwiXSxcbiAgICBsaXN0UHVibGljRXZlbnRzOiBbXCJHRVQgL2V2ZW50c1wiXSxcbiAgICBsaXN0UHVibGljRXZlbnRzRm9yUmVwb05ldHdvcms6IFtcIkdFVCAvbmV0d29ya3Mve293bmVyfS97cmVwb30vZXZlbnRzXCJdLFxuICAgIGxpc3RQdWJsaWNFdmVudHNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzL3B1YmxpY1wiXSxcbiAgICBsaXN0UHVibGljT3JnRXZlbnRzOiBbXCJHRVQgL29yZ3Mve29yZ30vZXZlbnRzXCJdLFxuICAgIGxpc3RSZWNlaXZlZEV2ZW50c0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9yZWNlaXZlZF9ldmVudHNcIl0sXG4gICAgbGlzdFJlY2VpdmVkUHVibGljRXZlbnRzRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3JlY2VpdmVkX2V2ZW50cy9wdWJsaWNcIl0sXG4gICAgbGlzdFJlcG9FdmVudHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZXZlbnRzXCJdLFxuICAgIGxpc3RSZXBvTm90aWZpY2F0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L25vdGlmaWNhdGlvbnNcIl0sXG4gICAgbGlzdFJlcG9zU3RhcnJlZEJ5QXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9zdGFycmVkXCJdLFxuICAgIGxpc3RSZXBvc1N0YXJyZWRCeVVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zdGFycmVkXCJdLFxuICAgIGxpc3RSZXBvc1dhdGNoZWRCeVVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zdWJzY3JpcHRpb25zXCJdLFxuICAgIGxpc3RTdGFyZ2F6ZXJzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGFyZ2F6ZXJzXCJdLFxuICAgIGxpc3RXYXRjaGVkUmVwb3NGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3N1YnNjcmlwdGlvbnNcIl0sXG4gICAgbGlzdFdhdGNoZXJzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdWJzY3JpYmVyc1wiXSxcbiAgICBtYXJrTm90aWZpY2F0aW9uc0FzUmVhZDogW1wiUFVUIC9ub3RpZmljYXRpb25zXCJdLFxuICAgIG1hcmtSZXBvTm90aWZpY2F0aW9uc0FzUmVhZDogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ub3RpZmljYXRpb25zXCJdLFxuICAgIG1hcmtUaHJlYWRBc1JlYWQ6IFtcIlBBVENIIC9ub3RpZmljYXRpb25zL3RocmVhZHMve3RocmVhZF9pZH1cIl0sXG4gICAgc2V0UmVwb1N1YnNjcmlwdGlvbjogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdWJzY3JpcHRpb25cIl0sXG4gICAgc2V0VGhyZWFkU3Vic2NyaXB0aW9uOiBbXCJQVVQgL25vdGlmaWNhdGlvbnMvdGhyZWFkcy97dGhyZWFkX2lkfS9zdWJzY3JpcHRpb25cIl0sXG4gICAgc3RhclJlcG9Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUFVUIC91c2VyL3N0YXJyZWQve293bmVyfS97cmVwb31cIl0sXG4gICAgdW5zdGFyUmVwb0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvc3RhcnJlZC97b3duZXJ9L3tyZXBvfVwiXVxuICB9LFxuICBhcHBzOiB7XG4gICAgYWRkUmVwb1RvSW5zdGFsbGF0aW9uOiBbXCJQVVQgL3VzZXIvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJhcHBzXCIsIFwiYWRkUmVwb1RvSW5zdGFsbGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXJcIl1cbiAgICB9XSxcbiAgICBhZGRSZXBvVG9JbnN0YWxsYXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUFVUIC91c2VyL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiXSxcbiAgICBjaGVja1Rva2VuOiBbXCJQT1NUIC9hcHBsaWNhdGlvbnMve2NsaWVudF9pZH0vdG9rZW5cIl0sXG4gICAgY3JlYXRlRnJvbU1hbmlmZXN0OiBbXCJQT1NUIC9hcHAtbWFuaWZlc3RzL3tjb2RlfS9jb252ZXJzaW9uc1wiXSxcbiAgICBjcmVhdGVJbnN0YWxsYXRpb25BY2Nlc3NUb2tlbjogW1wiUE9TVCAvYXBwL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vYWNjZXNzX3Rva2Vuc1wiXSxcbiAgICBkZWxldGVBdXRob3JpemF0aW9uOiBbXCJERUxFVEUgL2FwcGxpY2F0aW9ucy97Y2xpZW50X2lkfS9ncmFudFwiXSxcbiAgICBkZWxldGVJbnN0YWxsYXRpb246IFtcIkRFTEVURSAvYXBwL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH1cIl0sXG4gICAgZGVsZXRlVG9rZW46IFtcIkRFTEVURSAvYXBwbGljYXRpb25zL3tjbGllbnRfaWR9L3Rva2VuXCJdLFxuICAgIGdldEF1dGhlbnRpY2F0ZWQ6IFtcIkdFVCAvYXBwXCJdLFxuICAgIGdldEJ5U2x1ZzogW1wiR0VUIC9hcHBzL3thcHBfc2x1Z31cIl0sXG4gICAgZ2V0SW5zdGFsbGF0aW9uOiBbXCJHRVQgL2FwcC9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9XCJdLFxuICAgIGdldE9yZ0luc3RhbGxhdGlvbjogW1wiR0VUIC9vcmdzL3tvcmd9L2luc3RhbGxhdGlvblwiXSxcbiAgICBnZXRSZXBvSW5zdGFsbGF0aW9uOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2luc3RhbGxhdGlvblwiXSxcbiAgICBnZXRTdWJzY3JpcHRpb25QbGFuRm9yQWNjb3VudDogW1wiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL2FjY291bnRzL3thY2NvdW50X2lkfVwiXSxcbiAgICBnZXRTdWJzY3JpcHRpb25QbGFuRm9yQWNjb3VudFN0dWJiZWQ6IFtcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9zdHViYmVkL2FjY291bnRzL3thY2NvdW50X2lkfVwiXSxcbiAgICBnZXRVc2VySW5zdGFsbGF0aW9uOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vaW5zdGFsbGF0aW9uXCJdLFxuICAgIGdldFdlYmhvb2tDb25maWdGb3JBcHA6IFtcIkdFVCAvYXBwL2hvb2svY29uZmlnXCJdLFxuICAgIGdldFdlYmhvb2tEZWxpdmVyeTogW1wiR0VUIC9hcHAvaG9vay9kZWxpdmVyaWVzL3tkZWxpdmVyeV9pZH1cIl0sXG4gICAgbGlzdEFjY291bnRzRm9yUGxhbjogW1wiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3BsYW5zL3twbGFuX2lkfS9hY2NvdW50c1wiXSxcbiAgICBsaXN0QWNjb3VudHNGb3JQbGFuU3R1YmJlZDogW1wiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3N0dWJiZWQvcGxhbnMve3BsYW5faWR9L2FjY291bnRzXCJdLFxuICAgIGxpc3RJbnN0YWxsYXRpb25SZXBvc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIl0sXG4gICAgbGlzdEluc3RhbGxhdGlvbnM6IFtcIkdFVCAvYXBwL2luc3RhbGxhdGlvbnNcIl0sXG4gICAgbGlzdEluc3RhbGxhdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2luc3RhbGxhdGlvbnNcIl0sXG4gICAgbGlzdFBsYW5zOiBbXCJHRVQgL21hcmtldHBsYWNlX2xpc3RpbmcvcGxhbnNcIl0sXG4gICAgbGlzdFBsYW5zU3R1YmJlZDogW1wiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3N0dWJiZWQvcGxhbnNcIl0sXG4gICAgbGlzdFJlcG9zQWNjZXNzaWJsZVRvSW5zdGFsbGF0aW9uOiBbXCJHRVQgL2luc3RhbGxhdGlvbi9yZXBvc2l0b3JpZXNcIl0sXG4gICAgbGlzdFN1YnNjcmlwdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL21hcmtldHBsYWNlX3B1cmNoYXNlc1wiXSxcbiAgICBsaXN0U3Vic2NyaXB0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyU3R1YmJlZDogW1wiR0VUIC91c2VyL21hcmtldHBsYWNlX3B1cmNoYXNlcy9zdHViYmVkXCJdLFxuICAgIGxpc3RXZWJob29rRGVsaXZlcmllczogW1wiR0VUIC9hcHAvaG9vay9kZWxpdmVyaWVzXCJdLFxuICAgIHJlZGVsaXZlcldlYmhvb2tEZWxpdmVyeTogW1wiUE9TVCAvYXBwL2hvb2svZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9L2F0dGVtcHRzXCJdLFxuICAgIHJlbW92ZVJlcG9Gcm9tSW5zdGFsbGF0aW9uOiBbXCJERUxFVEUgL3VzZXIvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJhcHBzXCIsIFwicmVtb3ZlUmVwb0Zyb21JbnN0YWxsYXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlclwiXVxuICAgIH1dLFxuICAgIHJlbW92ZVJlcG9Gcm9tSW5zdGFsbGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIl0sXG4gICAgcmVzZXRUb2tlbjogW1wiUEFUQ0ggL2FwcGxpY2F0aW9ucy97Y2xpZW50X2lkfS90b2tlblwiXSxcbiAgICByZXZva2VJbnN0YWxsYXRpb25BY2Nlc3NUb2tlbjogW1wiREVMRVRFIC9pbnN0YWxsYXRpb24vdG9rZW5cIl0sXG4gICAgc2NvcGVUb2tlbjogW1wiUE9TVCAvYXBwbGljYXRpb25zL3tjbGllbnRfaWR9L3Rva2VuL3Njb3BlZFwiXSxcbiAgICBzdXNwZW5kSW5zdGFsbGF0aW9uOiBbXCJQVVQgL2FwcC9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3N1c3BlbmRlZFwiXSxcbiAgICB1bnN1c3BlbmRJbnN0YWxsYXRpb246IFtcIkRFTEVURSAvYXBwL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vc3VzcGVuZGVkXCJdLFxuICAgIHVwZGF0ZVdlYmhvb2tDb25maWdGb3JBcHA6IFtcIlBBVENIIC9hcHAvaG9vay9jb25maWdcIl1cbiAgfSxcbiAgYmlsbGluZzoge1xuICAgIGdldEdpdGh1YkFjdGlvbnNCaWxsaW5nT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vc2V0dGluZ3MvYmlsbGluZy9hY3Rpb25zXCJdLFxuICAgIGdldEdpdGh1YkFjdGlvbnNCaWxsaW5nVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NldHRpbmdzL2JpbGxpbmcvYWN0aW9uc1wiXSxcbiAgICBnZXRHaXRodWJBZHZhbmNlZFNlY3VyaXR5QmlsbGluZ0doZTogW1wiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vc2V0dGluZ3MvYmlsbGluZy9hZHZhbmNlZC1zZWN1cml0eVwiXSxcbiAgICBnZXRHaXRodWJBZHZhbmNlZFNlY3VyaXR5QmlsbGluZ09yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL2JpbGxpbmcvYWR2YW5jZWQtc2VjdXJpdHlcIl0sXG4gICAgZ2V0R2l0aHViUGFja2FnZXNCaWxsaW5nT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vc2V0dGluZ3MvYmlsbGluZy9wYWNrYWdlc1wiXSxcbiAgICBnZXRHaXRodWJQYWNrYWdlc0JpbGxpbmdVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc2V0dGluZ3MvYmlsbGluZy9wYWNrYWdlc1wiXSxcbiAgICBnZXRTaGFyZWRTdG9yYWdlQmlsbGluZ09yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL2JpbGxpbmcvc2hhcmVkLXN0b3JhZ2VcIl0sXG4gICAgZ2V0U2hhcmVkU3RvcmFnZUJpbGxpbmdVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc2V0dGluZ3MvYmlsbGluZy9zaGFyZWQtc3RvcmFnZVwiXVxuICB9LFxuICBjaGVja3M6IHtcbiAgICBjcmVhdGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXJ1bnNcIl0sXG4gICAgY3JlYXRlU3VpdGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXN1aXRlc1wiXSxcbiAgICBnZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stcnVucy97Y2hlY2tfcnVuX2lkfVwiXSxcbiAgICBnZXRTdWl0ZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1zdWl0ZXMve2NoZWNrX3N1aXRlX2lkfVwiXSxcbiAgICBsaXN0QW5ub3RhdGlvbnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stcnVucy97Y2hlY2tfcnVuX2lkfS9hbm5vdGF0aW9uc1wiXSxcbiAgICBsaXN0Rm9yUmVmOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vY2hlY2stcnVuc1wiXSxcbiAgICBsaXN0Rm9yU3VpdGU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stc3VpdGVzL3tjaGVja19zdWl0ZV9pZH0vY2hlY2stcnVuc1wiXSxcbiAgICBsaXN0U3VpdGVzRm9yUmVmOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vY2hlY2stc3VpdGVzXCJdLFxuICAgIHJlcmVxdWVzdFJ1bjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stcnVucy97Y2hlY2tfcnVuX2lkfS9yZXJlcXVlc3RcIl0sXG4gICAgcmVyZXF1ZXN0U3VpdGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXN1aXRlcy97Y2hlY2tfc3VpdGVfaWR9L3JlcmVxdWVzdFwiXSxcbiAgICBzZXRTdWl0ZXNQcmVmZXJlbmNlczogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXN1aXRlcy9wcmVmZXJlbmNlc1wiXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1ydW5zL3tjaGVja19ydW5faWR9XCJdXG4gIH0sXG4gIGNvZGVTY2FubmluZzoge1xuICAgIGRlbGV0ZUFuYWx5c2lzOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYW5hbHlzZXMve2FuYWx5c2lzX2lkfXs/Y29uZmlybV9kZWxldGV9XCJdLFxuICAgIGdldEFsZXJ0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9XCIsIHt9LCB7XG4gICAgICByZW5hbWVkUGFyYW1ldGVyczoge1xuICAgICAgICBhbGVydF9pZDogXCJhbGVydF9udW1iZXJcIlxuICAgICAgfVxuICAgIH1dLFxuICAgIGdldEFuYWx5c2lzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYW5hbHlzZXMve2FuYWx5c2lzX2lkfVwiXSxcbiAgICBnZXRTYXJpZjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL3Nhcmlmcy97c2FyaWZfaWR9XCJdLFxuICAgIGxpc3RBbGVydEluc3RhbmNlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9pbnN0YW5jZXNcIl0sXG4gICAgbGlzdEFsZXJ0c0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2NvZGUtc2Nhbm5pbmcvYWxlcnRzXCJdLFxuICAgIGxpc3RBbGVydHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzXCJdLFxuICAgIGxpc3RBbGVydHNJbnN0YW5jZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn0vaW5zdGFuY2VzXCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJjb2RlU2Nhbm5pbmdcIiwgXCJsaXN0QWxlcnRJbnN0YW5jZXNcIl1cbiAgICB9XSxcbiAgICBsaXN0UmVjZW50QW5hbHlzZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbmFseXNlc1wiXSxcbiAgICB1cGRhdGVBbGVydDogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9XCJdLFxuICAgIHVwbG9hZFNhcmlmOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL3Nhcmlmc1wiXVxuICB9LFxuICBjb2Rlc09mQ29uZHVjdDoge1xuICAgIGdldEFsbENvZGVzT2ZDb25kdWN0OiBbXCJHRVQgL2NvZGVzX29mX2NvbmR1Y3RcIl0sXG4gICAgZ2V0Q29uZHVjdENvZGU6IFtcIkdFVCAvY29kZXNfb2ZfY29uZHVjdC97a2V5fVwiXVxuICB9LFxuICBjb2Rlc3BhY2VzOiB7XG4gICAgYWRkUmVwb3NpdG9yeUZvclNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQVVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiXSxcbiAgICBjb2Rlc3BhY2VNYWNoaW5lc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9L21hY2hpbmVzXCJdLFxuICAgIGNyZWF0ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL2NvZGVzcGFjZXNcIl0sXG4gICAgY3JlYXRlT3JVcGRhdGVSZXBvU2VjcmV0OiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlU2VjcmV0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBVVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBjcmVhdGVXaXRoUHJGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb2Rlc3BhY2VzXCJdLFxuICAgIGNyZWF0ZVdpdGhSZXBvRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXNcIl0sXG4gICAgZGVsZXRlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX1cIl0sXG4gICAgZGVsZXRlRnJvbU9yZ2FuaXphdGlvbjogW1wiREVMRVRFIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfS9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX1cIl0sXG4gICAgZGVsZXRlUmVwb1NlY3JldDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBkZWxldGVTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiREVMRVRFIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGV4cG9ydEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfS9leHBvcnRzXCJdLFxuICAgIGdldEV4cG9ydERldGFpbHNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfS9leHBvcnRzL3tleHBvcnRfaWR9XCJdLFxuICAgIGdldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9XCJdLFxuICAgIGdldFB1YmxpY0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3B1YmxpYy1rZXlcIl0sXG4gICAgZ2V0UmVwb1B1YmxpY0tleTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL3NlY3JldHMvcHVibGljLWtleVwiXSxcbiAgICBnZXRSZXBvU2VjcmV0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGdldFNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgbGlzdERldmNvbnRhaW5lcnNJblJlcG9zaXRvcnlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL2RldmNvbnRhaW5lcnNcIl0sXG4gICAgbGlzdEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvY29kZXNwYWNlc1wiXSxcbiAgICBsaXN0SW5Pcmdhbml6YXRpb246IFtcIkdFVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzXCIsIHt9LCB7XG4gICAgICByZW5hbWVkUGFyYW1ldGVyczoge1xuICAgICAgICBvcmdfaWQ6IFwib3JnXCJcbiAgICAgIH1cbiAgICB9XSxcbiAgICBsaXN0SW5SZXBvc2l0b3J5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlc1wiXSxcbiAgICBsaXN0UmVwb1NlY3JldHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9zZWNyZXRzXCJdLFxuICAgIGxpc3RSZXBvc2l0b3JpZXNGb3JTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiXSxcbiAgICBsaXN0U2VjcmV0c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzXCJdLFxuICAgIHJlbW92ZVJlcG9zaXRvcnlGb3JTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiREVMRVRFIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIl0sXG4gICAgcmVwb01hY2hpbmVzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9tYWNoaW5lc1wiXSxcbiAgICBzZXRSZXBvc2l0b3JpZXNGb3JTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUFVUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiXSxcbiAgICBzdGFydEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfS9zdGFydFwiXSxcbiAgICBzdG9wRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9L3N0b3BcIl0sXG4gICAgc3RvcEluT3JnYW5pemF0aW9uOiBbXCJQT1NUIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfS9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vc3RvcFwiXSxcbiAgICB1cGRhdGVGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUEFUQ0ggL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9XCJdXG4gIH0sXG4gIGRlcGVuZGFib3Q6IHtcbiAgICBhZGRTZWxlY3RlZFJlcG9Ub09yZ1NlY3JldDogW1wiUFVUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIl0sXG4gICAgY3JlYXRlT3JVcGRhdGVPcmdTZWNyZXQ6IFtcIlBVVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBjcmVhdGVPclVwZGF0ZVJlcG9TZWNyZXQ6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZGVsZXRlT3JnU2VjcmV0OiBbXCJERUxFVEUgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZGVsZXRlUmVwb1NlY3JldDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBnZXRPcmdQdWJsaWNLZXk6IFtcIkdFVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMvcHVibGljLWtleVwiXSxcbiAgICBnZXRPcmdTZWNyZXQ6IFtcIkdFVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBnZXRSZXBvUHVibGljS2V5OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3Qvc2VjcmV0cy9wdWJsaWMta2V5XCJdLFxuICAgIGdldFJlcG9TZWNyZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgbGlzdE9yZ1NlY3JldHM6IFtcIkdFVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHNcIl0sXG4gICAgbGlzdFJlcG9TZWNyZXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3Qvc2VjcmV0c1wiXSxcbiAgICBsaXN0U2VsZWN0ZWRSZXBvc0Zvck9yZ1NlY3JldDogW1wiR0VUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiXSxcbiAgICByZW1vdmVTZWxlY3RlZFJlcG9Gcm9tT3JnU2VjcmV0OiBbXCJERUxFVEUgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiXSxcbiAgICBzZXRTZWxlY3RlZFJlcG9zRm9yT3JnU2VjcmV0OiBbXCJQVVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCJdXG4gIH0sXG4gIGRlcGVuZGVuY3lHcmFwaDoge1xuICAgIGNyZWF0ZVJlcG9zaXRvcnlTbmFwc2hvdDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kZW5jeS1ncmFwaC9zbmFwc2hvdHNcIl0sXG4gICAgZGlmZlJhbmdlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGVuY3ktZ3JhcGgvY29tcGFyZS97YmFzZWhlYWR9XCJdXG4gIH0sXG4gIGVtb2ppczoge1xuICAgIGdldDogW1wiR0VUIC9lbW9qaXNcIl1cbiAgfSxcbiAgZW50ZXJwcmlzZUFkbWluOiB7XG4gICAgYWRkQ3VzdG9tTGFiZWxzVG9TZWxmSG9zdGVkUnVubmVyRm9yRW50ZXJwcmlzZTogW1wiUE9TVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIl0sXG4gICAgZGlzYWJsZVNlbGVjdGVkT3JnYW5pemF0aW9uR2l0aHViQWN0aW9uc0VudGVycHJpc2U6IFtcIkRFTEVURSAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2FjdGlvbnMvcGVybWlzc2lvbnMvb3JnYW5pemF0aW9ucy97b3JnX2lkfVwiXSxcbiAgICBlbmFibGVTZWxlY3RlZE9yZ2FuaXphdGlvbkdpdGh1YkFjdGlvbnNFbnRlcnByaXNlOiBbXCJQVVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9hY3Rpb25zL3Blcm1pc3Npb25zL29yZ2FuaXphdGlvbnMve29yZ19pZH1cIl0sXG4gICAgZ2V0QWxsb3dlZEFjdGlvbnNFbnRlcnByaXNlOiBbXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9hY3Rpb25zL3Blcm1pc3Npb25zL3NlbGVjdGVkLWFjdGlvbnNcIl0sXG4gICAgZ2V0R2l0aHViQWN0aW9uc1Blcm1pc3Npb25zRW50ZXJwcmlzZTogW1wiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vYWN0aW9ucy9wZXJtaXNzaW9uc1wiXSxcbiAgICBnZXRTZXJ2ZXJTdGF0aXN0aWNzOiBbXCJHRVQgL2VudGVycHJpc2UtaW5zdGFsbGF0aW9uL3tlbnRlcnByaXNlX29yX29yZ30vc2VydmVyLXN0YXRpc3RpY3NcIl0sXG4gICAgbGlzdExhYmVsc0ZvclNlbGZIb3N0ZWRSdW5uZXJGb3JFbnRlcnByaXNlOiBbXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCJdLFxuICAgIGxpc3RTZWxlY3RlZE9yZ2FuaXphdGlvbnNFbmFibGVkR2l0aHViQWN0aW9uc0VudGVycHJpc2U6IFtcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2FjdGlvbnMvcGVybWlzc2lvbnMvb3JnYW5pemF0aW9uc1wiXSxcbiAgICByZW1vdmVBbGxDdXN0b21MYWJlbHNGcm9tU2VsZkhvc3RlZFJ1bm5lckZvckVudGVycHJpc2U6IFtcIkRFTEVURSAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIl0sXG4gICAgcmVtb3ZlQ3VzdG9tTGFiZWxGcm9tU2VsZkhvc3RlZFJ1bm5lckZvckVudGVycHJpc2U6IFtcIkRFTEVURSAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHMve25hbWV9XCJdLFxuICAgIHNldEFsbG93ZWRBY3Rpb25zRW50ZXJwcmlzZTogW1wiUFVUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vYWN0aW9ucy9wZXJtaXNzaW9ucy9zZWxlY3RlZC1hY3Rpb25zXCJdLFxuICAgIHNldEN1c3RvbUxhYmVsc0ZvclNlbGZIb3N0ZWRSdW5uZXJGb3JFbnRlcnByaXNlOiBbXCJQVVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCJdLFxuICAgIHNldEdpdGh1YkFjdGlvbnNQZXJtaXNzaW9uc0VudGVycHJpc2U6IFtcIlBVVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2FjdGlvbnMvcGVybWlzc2lvbnNcIl0sXG4gICAgc2V0U2VsZWN0ZWRPcmdhbml6YXRpb25zRW5hYmxlZEdpdGh1YkFjdGlvbnNFbnRlcnByaXNlOiBbXCJQVVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9hY3Rpb25zL3Blcm1pc3Npb25zL29yZ2FuaXphdGlvbnNcIl1cbiAgfSxcbiAgZ2lzdHM6IHtcbiAgICBjaGVja0lzU3RhcnJlZDogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH0vc3RhclwiXSxcbiAgICBjcmVhdGU6IFtcIlBPU1QgL2dpc3RzXCJdLFxuICAgIGNyZWF0ZUNvbW1lbnQ6IFtcIlBPU1QgL2dpc3RzL3tnaXN0X2lkfS9jb21tZW50c1wiXSxcbiAgICBkZWxldGU6IFtcIkRFTEVURSAvZ2lzdHMve2dpc3RfaWR9XCJdLFxuICAgIGRlbGV0ZUNvbW1lbnQ6IFtcIkRFTEVURSAvZ2lzdHMve2dpc3RfaWR9L2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBmb3JrOiBbXCJQT1NUIC9naXN0cy97Z2lzdF9pZH0vZm9ya3NcIl0sXG4gICAgZ2V0OiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfVwiXSxcbiAgICBnZXRDb21tZW50OiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfS9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgZ2V0UmV2aXNpb246IFtcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L3tzaGF9XCJdLFxuICAgIGxpc3Q6IFtcIkdFVCAvZ2lzdHNcIl0sXG4gICAgbGlzdENvbW1lbnRzOiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfS9jb21tZW50c1wiXSxcbiAgICBsaXN0Q29tbWl0czogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH0vY29tbWl0c1wiXSxcbiAgICBsaXN0Rm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2dpc3RzXCJdLFxuICAgIGxpc3RGb3JrczogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH0vZm9ya3NcIl0sXG4gICAgbGlzdFB1YmxpYzogW1wiR0VUIC9naXN0cy9wdWJsaWNcIl0sXG4gICAgbGlzdFN0YXJyZWQ6IFtcIkdFVCAvZ2lzdHMvc3RhcnJlZFwiXSxcbiAgICBzdGFyOiBbXCJQVVQgL2dpc3RzL3tnaXN0X2lkfS9zdGFyXCJdLFxuICAgIHVuc3RhcjogW1wiREVMRVRFIC9naXN0cy97Z2lzdF9pZH0vc3RhclwiXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9naXN0cy97Z2lzdF9pZH1cIl0sXG4gICAgdXBkYXRlQ29tbWVudDogW1wiUEFUQ0ggL2dpc3RzL3tnaXN0X2lkfS9jb21tZW50cy97Y29tbWVudF9pZH1cIl1cbiAgfSxcbiAgZ2l0OiB7XG4gICAgY3JlYXRlQmxvYjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L2Jsb2JzXCJdLFxuICAgIGNyZWF0ZUNvbW1pdDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L2NvbW1pdHNcIl0sXG4gICAgY3JlYXRlUmVmOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvcmVmc1wiXSxcbiAgICBjcmVhdGVUYWc6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC90YWdzXCJdLFxuICAgIGNyZWF0ZVRyZWU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC90cmVlc1wiXSxcbiAgICBkZWxldGVSZWY6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3JlZnMve3JlZn1cIl0sXG4gICAgZ2V0QmxvYjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvYmxvYnMve2ZpbGVfc2hhfVwiXSxcbiAgICBnZXRDb21taXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L2NvbW1pdHMve2NvbW1pdF9zaGF9XCJdLFxuICAgIGdldFJlZjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvcmVmL3tyZWZ9XCJdLFxuICAgIGdldFRhZzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvdGFncy97dGFnX3NoYX1cIl0sXG4gICAgZ2V0VHJlZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvdHJlZXMve3RyZWVfc2hhfVwiXSxcbiAgICBsaXN0TWF0Y2hpbmdSZWZzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9tYXRjaGluZy1yZWZzL3tyZWZ9XCJdLFxuICAgIHVwZGF0ZVJlZjogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9yZWZzL3tyZWZ9XCJdXG4gIH0sXG4gIGdpdGlnbm9yZToge1xuICAgIGdldEFsbFRlbXBsYXRlczogW1wiR0VUIC9naXRpZ25vcmUvdGVtcGxhdGVzXCJdLFxuICAgIGdldFRlbXBsYXRlOiBbXCJHRVQgL2dpdGlnbm9yZS90ZW1wbGF0ZXMve25hbWV9XCJdXG4gIH0sXG4gIGludGVyYWN0aW9uczoge1xuICAgIGdldFJlc3RyaWN0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIGdldFJlc3RyaWN0aW9uc0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICBnZXRSZXN0cmljdGlvbnNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICBnZXRSZXN0cmljdGlvbnNGb3JZb3VyUHVibGljUmVwb3M6IFtcIkdFVCAvdXNlci9pbnRlcmFjdGlvbi1saW1pdHNcIiwge30sIHtcbiAgICAgIHJlbmFtZWQ6IFtcImludGVyYWN0aW9uc1wiLCBcImdldFJlc3RyaWN0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdXG4gICAgfV0sXG4gICAgcmVtb3ZlUmVzdHJpY3Rpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgcmVtb3ZlUmVzdHJpY3Rpb25zRm9yT3JnOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIHJlbW92ZVJlc3RyaWN0aW9uc0ZvclJlcG86IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIHJlbW92ZVJlc3RyaWN0aW9uc0ZvcllvdXJQdWJsaWNSZXBvczogW1wiREVMRVRFIC91c2VyL2ludGVyYWN0aW9uLWxpbWl0c1wiLCB7fSwge1xuICAgICAgcmVuYW1lZDogW1wiaW50ZXJhY3Rpb25zXCIsIFwicmVtb3ZlUmVzdHJpY3Rpb25zRm9yQXV0aGVudGljYXRlZFVzZXJcIl1cbiAgICB9XSxcbiAgICBzZXRSZXN0cmljdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUFVUIC91c2VyL2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICBzZXRSZXN0cmljdGlvbnNGb3JPcmc6IFtcIlBVVCAvb3Jncy97b3JnfS9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgc2V0UmVzdHJpY3Rpb25zRm9yUmVwbzogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgc2V0UmVzdHJpY3Rpb25zRm9yWW91clB1YmxpY1JlcG9zOiBbXCJQVVQgL3VzZXIvaW50ZXJhY3Rpb24tbGltaXRzXCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJpbnRlcmFjdGlvbnNcIiwgXCJzZXRSZXN0cmljdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlclwiXVxuICAgIH1dXG4gIH0sXG4gIGlzc3Vlczoge1xuICAgIGFkZEFzc2lnbmVlczogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2Fzc2lnbmVlc1wiXSxcbiAgICBhZGRMYWJlbHM6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sYWJlbHNcIl0sXG4gICAgY2hlY2tVc2VyQ2FuQmVBc3NpZ25lZDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hc3NpZ25lZXMve2Fzc2lnbmVlfVwiXSxcbiAgICBjcmVhdGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlc1wiXSxcbiAgICBjcmVhdGVDb21tZW50OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vY29tbWVudHNcIl0sXG4gICAgY3JlYXRlTGFiZWw6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhYmVsc1wiXSxcbiAgICBjcmVhdGVNaWxlc3RvbmU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXNcIl0sXG4gICAgZGVsZXRlQ29tbWVudDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIGRlbGV0ZUxhYmVsOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhYmVscy97bmFtZX1cIl0sXG4gICAgZGVsZXRlTWlsZXN0b25lOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXMve21pbGVzdG9uZV9udW1iZXJ9XCJdLFxuICAgIGdldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn1cIl0sXG4gICAgZ2V0Q29tbWVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIGdldEV2ZW50OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9ldmVudHMve2V2ZW50X2lkfVwiXSxcbiAgICBnZXRMYWJlbDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sYWJlbHMve25hbWV9XCJdLFxuICAgIGdldE1pbGVzdG9uZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzL3ttaWxlc3RvbmVfbnVtYmVyfVwiXSxcbiAgICBsaXN0OiBbXCJHRVQgL2lzc3Vlc1wiXSxcbiAgICBsaXN0QXNzaWduZWVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Fzc2lnbmVlc1wiXSxcbiAgICBsaXN0Q29tbWVudHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2NvbW1lbnRzXCJdLFxuICAgIGxpc3RDb21tZW50c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzXCJdLFxuICAgIGxpc3RFdmVudHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2V2ZW50c1wiXSxcbiAgICBsaXN0RXZlbnRzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvZXZlbnRzXCJdLFxuICAgIGxpc3RFdmVudHNGb3JUaW1lbGluZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vdGltZWxpbmVcIl0sXG4gICAgbGlzdEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvaXNzdWVzXCJdLFxuICAgIGxpc3RGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9pc3N1ZXNcIl0sXG4gICAgbGlzdEZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzXCJdLFxuICAgIGxpc3RMYWJlbHNGb3JNaWxlc3RvbmU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lcy97bWlsZXN0b25lX251bWJlcn0vbGFiZWxzXCJdLFxuICAgIGxpc3RMYWJlbHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhYmVsc1wiXSxcbiAgICBsaXN0TGFiZWxzT25Jc3N1ZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbGFiZWxzXCJdLFxuICAgIGxpc3RNaWxlc3RvbmVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXNcIl0sXG4gICAgbG9jazogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbG9ja1wiXSxcbiAgICByZW1vdmVBbGxMYWJlbHM6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xhYmVsc1wiXSxcbiAgICByZW1vdmVBc3NpZ25lZXM6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2Fzc2lnbmVlc1wiXSxcbiAgICByZW1vdmVMYWJlbDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbGFiZWxzL3tuYW1lfVwiXSxcbiAgICBzZXRMYWJlbHM6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xhYmVsc1wiXSxcbiAgICB1bmxvY2s6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xvY2tcIl0sXG4gICAgdXBkYXRlOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9XCJdLFxuICAgIHVwZGF0ZUNvbW1lbnQ6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIHVwZGF0ZUxhYmVsOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vbGFiZWxzL3tuYW1lfVwiXSxcbiAgICB1cGRhdGVNaWxlc3RvbmU6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzL3ttaWxlc3RvbmVfbnVtYmVyfVwiXVxuICB9LFxuICBsaWNlbnNlczoge1xuICAgIGdldDogW1wiR0VUIC9saWNlbnNlcy97bGljZW5zZX1cIl0sXG4gICAgZ2V0QWxsQ29tbW9ubHlVc2VkOiBbXCJHRVQgL2xpY2Vuc2VzXCJdLFxuICAgIGdldEZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbGljZW5zZVwiXVxuICB9LFxuICBtYXJrZG93bjoge1xuICAgIHJlbmRlcjogW1wiUE9TVCAvbWFya2Rvd25cIl0sXG4gICAgcmVuZGVyUmF3OiBbXCJQT1NUIC9tYXJrZG93bi9yYXdcIiwge1xuICAgICAgaGVhZGVyczoge1xuICAgICAgICBcImNvbnRlbnQtdHlwZVwiOiBcInRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLThcIlxuICAgICAgfVxuICAgIH1dXG4gIH0sXG4gIG1ldGE6IHtcbiAgICBnZXQ6IFtcIkdFVCAvbWV0YVwiXSxcbiAgICBnZXRPY3RvY2F0OiBbXCJHRVQgL29jdG9jYXRcIl0sXG4gICAgZ2V0WmVuOiBbXCJHRVQgL3plblwiXSxcbiAgICByb290OiBbXCJHRVQgL1wiXVxuICB9LFxuICBtaWdyYXRpb25zOiB7XG4gICAgY2FuY2VsSW1wb3J0OiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ltcG9ydFwiXSxcbiAgICBkZWxldGVBcmNoaXZlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L2FyY2hpdmVcIl0sXG4gICAgZGVsZXRlQXJjaGl2ZUZvck9yZzogW1wiREVMRVRFIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vYXJjaGl2ZVwiXSxcbiAgICBkb3dubG9hZEFyY2hpdmVGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L2FyY2hpdmVcIl0sXG4gICAgZ2V0QXJjaGl2ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9hcmNoaXZlXCJdLFxuICAgIGdldENvbW1pdEF1dGhvcnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaW1wb3J0L2F1dGhvcnNcIl0sXG4gICAgZ2V0SW1wb3J0U3RhdHVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ltcG9ydFwiXSxcbiAgICBnZXRMYXJnZUZpbGVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ltcG9ydC9sYXJnZV9maWxlc1wiXSxcbiAgICBnZXRTdGF0dXNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH1cIl0sXG4gICAgZ2V0U3RhdHVzRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfVwiXSxcbiAgICBsaXN0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9taWdyYXRpb25zXCJdLFxuICAgIGxpc3RGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9taWdyYXRpb25zXCJdLFxuICAgIGxpc3RSZXBvc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIl0sXG4gICAgbGlzdFJlcG9zRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIl0sXG4gICAgbGlzdFJlcG9zRm9yVXNlcjogW1wiR0VUIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJtaWdyYXRpb25zXCIsIFwibGlzdFJlcG9zRm9yQXV0aGVudGljYXRlZFVzZXJcIl1cbiAgICB9XSxcbiAgICBtYXBDb21taXRBdXRob3I6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbXBvcnQvYXV0aG9ycy97YXV0aG9yX2lkfVwiXSxcbiAgICBzZXRMZnNQcmVmZXJlbmNlOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaW1wb3J0L2xmc1wiXSxcbiAgICBzdGFydEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL21pZ3JhdGlvbnNcIl0sXG4gICAgc3RhcnRGb3JPcmc6IFtcIlBPU1QgL29yZ3Mve29yZ30vbWlncmF0aW9uc1wiXSxcbiAgICBzdGFydEltcG9ydDogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbXBvcnRcIl0sXG4gICAgdW5sb2NrUmVwb0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9yZXBvcy97cmVwb19uYW1lfS9sb2NrXCJdLFxuICAgIHVubG9ja1JlcG9Gb3JPcmc6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L3JlcG9zL3tyZXBvX25hbWV9L2xvY2tcIl0sXG4gICAgdXBkYXRlSW1wb3J0OiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaW1wb3J0XCJdXG4gIH0sXG4gIG9yZ3M6IHtcbiAgICBibG9ja1VzZXI6IFtcIlBVVCAvb3Jncy97b3JnfS9ibG9ja3Mve3VzZXJuYW1lfVwiXSxcbiAgICBjYW5jZWxJbnZpdGF0aW9uOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9XCJdLFxuICAgIGNoZWNrQmxvY2tlZFVzZXI6IFtcIkdFVCAvb3Jncy97b3JnfS9ibG9ja3Mve3VzZXJuYW1lfVwiXSxcbiAgICBjaGVja01lbWJlcnNoaXBGb3JVc2VyOiBbXCJHRVQgL29yZ3Mve29yZ30vbWVtYmVycy97dXNlcm5hbWV9XCJdLFxuICAgIGNoZWNrUHVibGljTWVtYmVyc2hpcEZvclVzZXI6IFtcIkdFVCAvb3Jncy97b3JnfS9wdWJsaWNfbWVtYmVycy97dXNlcm5hbWV9XCJdLFxuICAgIGNvbnZlcnRNZW1iZXJUb091dHNpZGVDb2xsYWJvcmF0b3I6IFtcIlBVVCAvb3Jncy97b3JnfS9vdXRzaWRlX2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiXSxcbiAgICBjcmVhdGVJbnZpdGF0aW9uOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2ludml0YXRpb25zXCJdLFxuICAgIGNyZWF0ZVdlYmhvb2s6IFtcIlBPU1QgL29yZ3Mve29yZ30vaG9va3NcIl0sXG4gICAgZGVsZXRlV2ViaG9vazogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfVwiXSxcbiAgICBnZXQ6IFtcIkdFVCAvb3Jncy97b3JnfVwiXSxcbiAgICBnZXRNZW1iZXJzaGlwRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9tZW1iZXJzaGlwcy9vcmdzL3tvcmd9XCJdLFxuICAgIGdldE1lbWJlcnNoaXBGb3JVc2VyOiBbXCJHRVQgL29yZ3Mve29yZ30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiXSxcbiAgICBnZXRXZWJob29rOiBbXCJHRVQgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9XCJdLFxuICAgIGdldFdlYmhvb2tDb25maWdGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH0vY29uZmlnXCJdLFxuICAgIGdldFdlYmhvb2tEZWxpdmVyeTogW1wiR0VUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzL3tkZWxpdmVyeV9pZH1cIl0sXG4gICAgbGlzdDogW1wiR0VUIC9vcmdhbml6YXRpb25zXCJdLFxuICAgIGxpc3RBcHBJbnN0YWxsYXRpb25zOiBbXCJHRVQgL29yZ3Mve29yZ30vaW5zdGFsbGF0aW9uc1wiXSxcbiAgICBsaXN0QmxvY2tlZFVzZXJzOiBbXCJHRVQgL29yZ3Mve29yZ30vYmxvY2tzXCJdLFxuICAgIGxpc3RDdXN0b21Sb2xlczogW1wiR0VUIC9vcmdhbml6YXRpb25zL3tvcmdhbml6YXRpb25faWR9L2N1c3RvbV9yb2xlc1wiXSxcbiAgICBsaXN0RmFpbGVkSW52aXRhdGlvbnM6IFtcIkdFVCAvb3Jncy97b3JnfS9mYWlsZWRfaW52aXRhdGlvbnNcIl0sXG4gICAgbGlzdEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvb3Jnc1wiXSxcbiAgICBsaXN0Rm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L29yZ3NcIl0sXG4gICAgbGlzdEludml0YXRpb25UZWFtczogW1wiR0VUIC9vcmdzL3tvcmd9L2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfS90ZWFtc1wiXSxcbiAgICBsaXN0TWVtYmVyczogW1wiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnNcIl0sXG4gICAgbGlzdE1lbWJlcnNoaXBzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9tZW1iZXJzaGlwcy9vcmdzXCJdLFxuICAgIGxpc3RPdXRzaWRlQ29sbGFib3JhdG9yczogW1wiR0VUIC9vcmdzL3tvcmd9L291dHNpZGVfY29sbGFib3JhdG9yc1wiXSxcbiAgICBsaXN0UGVuZGluZ0ludml0YXRpb25zOiBbXCJHRVQgL29yZ3Mve29yZ30vaW52aXRhdGlvbnNcIl0sXG4gICAgbGlzdFB1YmxpY01lbWJlcnM6IFtcIkdFVCAvb3Jncy97b3JnfS9wdWJsaWNfbWVtYmVyc1wiXSxcbiAgICBsaXN0V2ViaG9va0RlbGl2ZXJpZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllc1wiXSxcbiAgICBsaXN0V2ViaG9va3M6IFtcIkdFVCAvb3Jncy97b3JnfS9ob29rc1wiXSxcbiAgICBwaW5nV2ViaG9vazogW1wiUE9TVCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH0vcGluZ3NcIl0sXG4gICAgcmVkZWxpdmVyV2ViaG9va0RlbGl2ZXJ5OiBbXCJQT1NUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzL3tkZWxpdmVyeV9pZH0vYXR0ZW1wdHNcIl0sXG4gICAgcmVtb3ZlTWVtYmVyOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vbWVtYmVycy97dXNlcm5hbWV9XCJdLFxuICAgIHJlbW92ZU1lbWJlcnNoaXBGb3JVc2VyOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiXSxcbiAgICByZW1vdmVPdXRzaWRlQ29sbGFib3JhdG9yOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vb3V0c2lkZV9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX1cIl0sXG4gICAgcmVtb3ZlUHVibGljTWVtYmVyc2hpcEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vcHVibGljX21lbWJlcnMve3VzZXJuYW1lfVwiXSxcbiAgICBzZXRNZW1iZXJzaGlwRm9yVXNlcjogW1wiUFVUIC9vcmdzL3tvcmd9L21lbWJlcnNoaXBzL3t1c2VybmFtZX1cIl0sXG4gICAgc2V0UHVibGljTWVtYmVyc2hpcEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQVVQgL29yZ3Mve29yZ30vcHVibGljX21lbWJlcnMve3VzZXJuYW1lfVwiXSxcbiAgICB1bmJsb2NrVXNlcjogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2Jsb2Nrcy97dXNlcm5hbWV9XCJdLFxuICAgIHVwZGF0ZTogW1wiUEFUQ0ggL29yZ3Mve29yZ31cIl0sXG4gICAgdXBkYXRlTWVtYmVyc2hpcEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQQVRDSCAvdXNlci9tZW1iZXJzaGlwcy9vcmdzL3tvcmd9XCJdLFxuICAgIHVwZGF0ZVdlYmhvb2s6IFtcIlBBVENIIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfVwiXSxcbiAgICB1cGRhdGVXZWJob29rQ29uZmlnRm9yT3JnOiBbXCJQQVRDSCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH0vY29uZmlnXCJdXG4gIH0sXG4gIHBhY2thZ2VzOiB7XG4gICAgZGVsZXRlUGFja2FnZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX1cIl0sXG4gICAgZGVsZXRlUGFja2FnZUZvck9yZzogW1wiREVMRVRFIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9XCJdLFxuICAgIGRlbGV0ZVBhY2thZ2VGb3JVc2VyOiBbXCJERUxFVEUgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX1cIl0sXG4gICAgZGVsZXRlUGFja2FnZVZlcnNpb25Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiREVMRVRFIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9XCJdLFxuICAgIGRlbGV0ZVBhY2thZ2VWZXJzaW9uRm9yT3JnOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH1cIl0sXG4gICAgZGVsZXRlUGFja2FnZVZlcnNpb25Gb3JVc2VyOiBbXCJERUxFVEUgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH1cIl0sXG4gICAgZ2V0QWxsUGFja2FnZVZlcnNpb25zRm9yQVBhY2thZ2VPd25lZEJ5QW5Pcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiLCB7fSwge1xuICAgICAgcmVuYW1lZDogW1wicGFja2FnZXNcIiwgXCJnZXRBbGxQYWNrYWdlVmVyc2lvbnNGb3JQYWNrYWdlT3duZWRCeU9yZ1wiXVxuICAgIH1dLFxuICAgIGdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvckFQYWNrYWdlT3duZWRCeVRoZUF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIiwge30sIHtcbiAgICAgIHJlbmFtZWQ6IFtcInBhY2thZ2VzXCIsIFwiZ2V0QWxsUGFja2FnZVZlcnNpb25zRm9yUGFja2FnZU93bmVkQnlBdXRoZW50aWNhdGVkVXNlclwiXVxuICAgIH1dLFxuICAgIGdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvclBhY2thZ2VPd25lZEJ5QXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiXSxcbiAgICBnZXRBbGxQYWNrYWdlVmVyc2lvbnNGb3JQYWNrYWdlT3duZWRCeU9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zXCJdLFxuICAgIGdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvclBhY2thZ2VPd25lZEJ5VXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zXCJdLFxuICAgIGdldFBhY2thZ2VGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9XCJdLFxuICAgIGdldFBhY2thZ2VGb3JPcmdhbml6YXRpb246IFtcIkdFVCAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfVwiXSxcbiAgICBnZXRQYWNrYWdlRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9XCJdLFxuICAgIGdldFBhY2thZ2VWZXJzaW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfVwiXSxcbiAgICBnZXRQYWNrYWdlVmVyc2lvbkZvck9yZ2FuaXphdGlvbjogW1wiR0VUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9XCJdLFxuICAgIGdldFBhY2thZ2VWZXJzaW9uRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9XCJdLFxuICAgIGxpc3RQYWNrYWdlc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvcGFja2FnZXNcIl0sXG4gICAgbGlzdFBhY2thZ2VzRm9yT3JnYW5pemF0aW9uOiBbXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXNcIl0sXG4gICAgbGlzdFBhY2thZ2VzRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzXCJdLFxuICAgIHJlc3RvcmVQYWNrYWdlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vcmVzdG9yZXs/dG9rZW59XCJdLFxuICAgIHJlc3RvcmVQYWNrYWdlRm9yT3JnOiBbXCJQT1NUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3Jlc3RvcmV7P3Rva2VufVwiXSxcbiAgICByZXN0b3JlUGFja2FnZUZvclVzZXI6IFtcIlBPU1QgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vcmVzdG9yZXs/dG9rZW59XCJdLFxuICAgIHJlc3RvcmVQYWNrYWdlVmVyc2lvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9L3Jlc3RvcmVcIl0sXG4gICAgcmVzdG9yZVBhY2thZ2VWZXJzaW9uRm9yT3JnOiBbXCJQT1NUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9L3Jlc3RvcmVcIl0sXG4gICAgcmVzdG9yZVBhY2thZ2VWZXJzaW9uRm9yVXNlcjogW1wiUE9TVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfS9yZXN0b3JlXCJdXG4gIH0sXG4gIHByb2plY3RzOiB7XG4gICAgYWRkQ29sbGFib3JhdG9yOiBbXCJQVVQgL3Byb2plY3RzL3twcm9qZWN0X2lkfS9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX1cIl0sXG4gICAgY3JlYXRlQ2FyZDogW1wiUE9TVCAvcHJvamVjdHMvY29sdW1ucy97Y29sdW1uX2lkfS9jYXJkc1wiXSxcbiAgICBjcmVhdGVDb2x1bW46IFtcIlBPU1QgL3Byb2plY3RzL3twcm9qZWN0X2lkfS9jb2x1bW5zXCJdLFxuICAgIGNyZWF0ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL3Byb2plY3RzXCJdLFxuICAgIGNyZWF0ZUZvck9yZzogW1wiUE9TVCAvb3Jncy97b3JnfS9wcm9qZWN0c1wiXSxcbiAgICBjcmVhdGVGb3JSZXBvOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wcm9qZWN0c1wiXSxcbiAgICBkZWxldGU6IFtcIkRFTEVURSAvcHJvamVjdHMve3Byb2plY3RfaWR9XCJdLFxuICAgIGRlbGV0ZUNhcmQ6IFtcIkRFTEVURSAvcHJvamVjdHMvY29sdW1ucy9jYXJkcy97Y2FyZF9pZH1cIl0sXG4gICAgZGVsZXRlQ29sdW1uOiBbXCJERUxFVEUgL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH1cIl0sXG4gICAgZ2V0OiBbXCJHRVQgL3Byb2plY3RzL3twcm9qZWN0X2lkfVwiXSxcbiAgICBnZXRDYXJkOiBbXCJHRVQgL3Byb2plY3RzL2NvbHVtbnMvY2FyZHMve2NhcmRfaWR9XCJdLFxuICAgIGdldENvbHVtbjogW1wiR0VUIC9wcm9qZWN0cy9jb2x1bW5zL3tjb2x1bW5faWR9XCJdLFxuICAgIGdldFBlcm1pc3Npb25Gb3JVc2VyOiBbXCJHRVQgL3Byb2plY3RzL3twcm9qZWN0X2lkfS9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX0vcGVybWlzc2lvblwiXSxcbiAgICBsaXN0Q2FyZHM6IFtcIkdFVCAvcHJvamVjdHMvY29sdW1ucy97Y29sdW1uX2lkfS9jYXJkc1wiXSxcbiAgICBsaXN0Q29sbGFib3JhdG9yczogW1wiR0VUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sbGFib3JhdG9yc1wiXSxcbiAgICBsaXN0Q29sdW1uczogW1wiR0VUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sdW1uc1wiXSxcbiAgICBsaXN0Rm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vcHJvamVjdHNcIl0sXG4gICAgbGlzdEZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJvamVjdHNcIl0sXG4gICAgbGlzdEZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wcm9qZWN0c1wiXSxcbiAgICBtb3ZlQ2FyZDogW1wiUE9TVCAvcHJvamVjdHMvY29sdW1ucy9jYXJkcy97Y2FyZF9pZH0vbW92ZXNcIl0sXG4gICAgbW92ZUNvbHVtbjogW1wiUE9TVCAvcHJvamVjdHMvY29sdW1ucy97Y29sdW1uX2lkfS9tb3Zlc1wiXSxcbiAgICByZW1vdmVDb2xsYWJvcmF0b3I6IFtcIkRFTEVURSAvcHJvamVjdHMve3Byb2plY3RfaWR9L2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9wcm9qZWN0cy97cHJvamVjdF9pZH1cIl0sXG4gICAgdXBkYXRlQ2FyZDogW1wiUEFUQ0ggL3Byb2plY3RzL2NvbHVtbnMvY2FyZHMve2NhcmRfaWR9XCJdLFxuICAgIHVwZGF0ZUNvbHVtbjogW1wiUEFUQ0ggL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH1cIl1cbiAgfSxcbiAgcHVsbHM6IHtcbiAgICBjaGVja0lmTWVyZ2VkOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vbWVyZ2VcIl0sXG4gICAgY3JlYXRlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxsc1wiXSxcbiAgICBjcmVhdGVSZXBseUZvclJldmlld0NvbW1lbnQ6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfaWR9L3JlcGxpZXNcIl0sXG4gICAgY3JlYXRlUmV2aWV3OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3NcIl0sXG4gICAgY3JlYXRlUmV2aWV3Q29tbWVudDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb21tZW50c1wiXSxcbiAgICBkZWxldGVQZW5kaW5nUmV2aWV3OiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfVwiXSxcbiAgICBkZWxldGVSZXZpZXdDb21tZW50OiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBkaXNtaXNzUmV2aWV3OiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfS9kaXNtaXNzYWxzXCJdLFxuICAgIGdldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9XCJdLFxuICAgIGdldFJldmlldzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH1cIl0sXG4gICAgZ2V0UmV2aWV3Q29tbWVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgbGlzdDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxsc1wiXSxcbiAgICBsaXN0Q29tbWVudHNGb3JSZXZpZXc6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzL3tyZXZpZXdfaWR9L2NvbW1lbnRzXCJdLFxuICAgIGxpc3RDb21taXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vY29tbWl0c1wiXSxcbiAgICBsaXN0RmlsZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9maWxlc1wiXSxcbiAgICBsaXN0UmVxdWVzdGVkUmV2aWV3ZXJzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmVxdWVzdGVkX3Jldmlld2Vyc1wiXSxcbiAgICBsaXN0UmV2aWV3Q29tbWVudHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb21tZW50c1wiXSxcbiAgICBsaXN0UmV2aWV3Q29tbWVudHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzXCJdLFxuICAgIGxpc3RSZXZpZXdzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3c1wiXSxcbiAgICBtZXJnZTogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L21lcmdlXCJdLFxuICAgIHJlbW92ZVJlcXVlc3RlZFJldmlld2VyczogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3JlcXVlc3RlZF9yZXZpZXdlcnNcIl0sXG4gICAgcmVxdWVzdFJldmlld2VyczogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXF1ZXN0ZWRfcmV2aWV3ZXJzXCJdLFxuICAgIHN1Ym1pdFJldmlldzogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzL3tyZXZpZXdfaWR9L2V2ZW50c1wiXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9XCJdLFxuICAgIHVwZGF0ZUJyYW5jaDogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3VwZGF0ZS1icmFuY2hcIl0sXG4gICAgdXBkYXRlUmV2aWV3OiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfVwiXSxcbiAgICB1cGRhdGVSZXZpZXdDb21tZW50OiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9XCJdXG4gIH0sXG4gIHJhdGVMaW1pdDoge1xuICAgIGdldDogW1wiR0VUIC9yYXRlX2xpbWl0XCJdXG4gIH0sXG4gIHJlYWN0aW9uczoge1xuICAgIGNyZWF0ZUZvckNvbW1pdENvbW1lbnQ6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIl0sXG4gICAgY3JlYXRlRm9ySXNzdWU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9yZWFjdGlvbnNcIl0sXG4gICAgY3JlYXRlRm9ySXNzdWVDb21tZW50OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiXSxcbiAgICBjcmVhdGVGb3JQdWxsUmVxdWVzdFJldmlld0NvbW1lbnQ6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIl0sXG4gICAgY3JlYXRlRm9yUmVsZWFzZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9L3JlYWN0aW9uc1wiXSxcbiAgICBjcmVhdGVGb3JUZWFtRGlzY3Vzc2lvbkNvbW1lbnRJbk9yZzogW1wiUE9TVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn0vcmVhY3Rpb25zXCJdLFxuICAgIGNyZWF0ZUZvclRlYW1EaXNjdXNzaW9uSW5Pcmc6IFtcIlBPU1QgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9yZWFjdGlvbnNcIl0sXG4gICAgZGVsZXRlRm9yQ29tbWl0Q29tbWVudDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zL3tyZWFjdGlvbl9pZH1cIl0sXG4gICAgZGVsZXRlRm9ySXNzdWU6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCJdLFxuICAgIGRlbGV0ZUZvcklzc3VlQ29tbWVudDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCJdLFxuICAgIGRlbGV0ZUZvclB1bGxSZXF1ZXN0Q29tbWVudDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zL3tyZWFjdGlvbl9pZH1cIl0sXG4gICAgZGVsZXRlRm9yUmVsZWFzZTogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vcmVhY3Rpb25zL3tyZWFjdGlvbl9pZH1cIl0sXG4gICAgZGVsZXRlRm9yVGVhbURpc2N1c3Npb246IFtcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCJdLFxuICAgIGRlbGV0ZUZvclRlYW1EaXNjdXNzaW9uQ29tbWVudDogW1wiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfbnVtYmVyfS9yZWFjdGlvbnMve3JlYWN0aW9uX2lkfVwiXSxcbiAgICBsaXN0Rm9yQ29tbWl0Q29tbWVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zXCJdLFxuICAgIGxpc3RGb3JJc3N1ZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vcmVhY3Rpb25zXCJdLFxuICAgIGxpc3RGb3JJc3N1ZUNvbW1lbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIl0sXG4gICAgbGlzdEZvclB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zXCJdLFxuICAgIGxpc3RGb3JSZWxlYXNlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfS9yZWFjdGlvbnNcIl0sXG4gICAgbGlzdEZvclRlYW1EaXNjdXNzaW9uQ29tbWVudEluT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9L3JlYWN0aW9uc1wiXSxcbiAgICBsaXN0Rm9yVGVhbURpc2N1c3Npb25Jbk9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vcmVhY3Rpb25zXCJdXG4gIH0sXG4gIHJlcG9zOiB7XG4gICAgYWNjZXB0SW52aXRhdGlvbjogW1wiUEFUQ0ggL3VzZXIvcmVwb3NpdG9yeV9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIiwge30sIHtcbiAgICAgIHJlbmFtZWQ6IFtcInJlcG9zXCIsIFwiYWNjZXB0SW52aXRhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdXG4gICAgfV0sXG4gICAgYWNjZXB0SW52aXRhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQQVRDSCAvdXNlci9yZXBvc2l0b3J5X2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfVwiXSxcbiAgICBhZGRBcHBBY2Nlc3NSZXN0cmljdGlvbnM6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL2FwcHNcIiwge30sIHtcbiAgICAgIG1hcFRvRGF0YTogXCJhcHBzXCJcbiAgICB9XSxcbiAgICBhZGRDb2xsYWJvcmF0b3I6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29sbGFib3JhdG9ycy97dXNlcm5hbWV9XCJdLFxuICAgIGFkZFN0YXR1c0NoZWNrQ29udGV4dHM6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrcy9jb250ZXh0c1wiLCB7fSwge1xuICAgICAgbWFwVG9EYXRhOiBcImNvbnRleHRzXCJcbiAgICB9XSxcbiAgICBhZGRUZWFtQWNjZXNzUmVzdHJpY3Rpb25zOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy90ZWFtc1wiLCB7fSwge1xuICAgICAgbWFwVG9EYXRhOiBcInRlYW1zXCJcbiAgICB9XSxcbiAgICBhZGRVc2VyQWNjZXNzUmVzdHJpY3Rpb25zOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy91c2Vyc1wiLCB7fSwge1xuICAgICAgbWFwVG9EYXRhOiBcInVzZXJzXCJcbiAgICB9XSxcbiAgICBjaGVja0NvbGxhYm9yYXRvcjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX1cIl0sXG4gICAgY2hlY2tWdWxuZXJhYmlsaXR5QWxlcnRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Z1bG5lcmFiaWxpdHktYWxlcnRzXCJdLFxuICAgIGNvZGVvd25lcnNFcnJvcnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZW93bmVycy9lcnJvcnNcIl0sXG4gICAgY29tcGFyZUNvbW1pdHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tcGFyZS97YmFzZX0uLi57aGVhZH1cIl0sXG4gICAgY29tcGFyZUNvbW1pdHNXaXRoQmFzZWhlYWQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tcGFyZS97YmFzZWhlYWR9XCJdLFxuICAgIGNyZWF0ZUF1dG9saW5rOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hdXRvbGlua3NcIl0sXG4gICAgY3JlYXRlQ29tbWl0Q29tbWVudDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97Y29tbWl0X3NoYX0vY29tbWVudHNcIl0sXG4gICAgY3JlYXRlQ29tbWl0U2lnbmF0dXJlUHJvdGVjdGlvbjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zaWduYXR1cmVzXCJdLFxuICAgIGNyZWF0ZUNvbW1pdFN0YXR1czogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3RhdHVzZXMve3NoYX1cIl0sXG4gICAgY3JlYXRlRGVwbG95S2V5OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9rZXlzXCJdLFxuICAgIGNyZWF0ZURlcGxveW1lbnQ6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGxveW1lbnRzXCJdLFxuICAgIGNyZWF0ZURlcGxveW1lbnRTdGF0dXM6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGxveW1lbnRzL3tkZXBsb3ltZW50X2lkfS9zdGF0dXNlc1wiXSxcbiAgICBjcmVhdGVEaXNwYXRjaEV2ZW50OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kaXNwYXRjaGVzXCJdLFxuICAgIGNyZWF0ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL3JlcG9zXCJdLFxuICAgIGNyZWF0ZUZvcms6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ZvcmtzXCJdLFxuICAgIGNyZWF0ZUluT3JnOiBbXCJQT1NUIC9vcmdzL3tvcmd9L3JlcG9zXCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlRW52aXJvbm1lbnQ6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfVwiXSxcbiAgICBjcmVhdGVPclVwZGF0ZUZpbGVDb250ZW50czogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb250ZW50cy97cGF0aH1cIl0sXG4gICAgY3JlYXRlUGFnZXNTaXRlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlc1wiXSxcbiAgICBjcmVhdGVSZWxlYXNlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlc1wiXSxcbiAgICBjcmVhdGVUYWdQcm90ZWN0aW9uOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YWdzL3Byb3RlY3Rpb25cIl0sXG4gICAgY3JlYXRlVXNpbmdUZW1wbGF0ZTogW1wiUE9TVCAvcmVwb3Mve3RlbXBsYXRlX293bmVyfS97dGVtcGxhdGVfcmVwb30vZ2VuZXJhdGVcIl0sXG4gICAgY3JlYXRlV2ViaG9vazogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3NcIl0sXG4gICAgZGVjbGluZUludml0YXRpb246IFtcIkRFTEVURSAvdXNlci9yZXBvc2l0b3J5X2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfVwiLCB7fSwge1xuICAgICAgcmVuYW1lZDogW1wicmVwb3NcIiwgXCJkZWNsaW5lSW52aXRhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdXG4gICAgfV0sXG4gICAgZGVjbGluZUludml0YXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiREVMRVRFIC91c2VyL3JlcG9zaXRvcnlfaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9XCJdLFxuICAgIGRlbGV0ZTogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfVwiXSxcbiAgICBkZWxldGVBY2Nlc3NSZXN0cmljdGlvbnM6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnNcIl0sXG4gICAgZGVsZXRlQWRtaW5CcmFuY2hQcm90ZWN0aW9uOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vZW5mb3JjZV9hZG1pbnNcIl0sXG4gICAgZGVsZXRlQW5FbnZpcm9ubWVudDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9XCJdLFxuICAgIGRlbGV0ZUF1dG9saW5rOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9saW5rcy97YXV0b2xpbmtfaWR9XCJdLFxuICAgIGRlbGV0ZUJyYW5jaFByb3RlY3Rpb246IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvblwiXSxcbiAgICBkZWxldGVDb21taXRDb21tZW50OiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBkZWxldGVDb21taXRTaWduYXR1cmVQcm90ZWN0aW9uOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc2lnbmF0dXJlc1wiXSxcbiAgICBkZWxldGVEZXBsb3lLZXk6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30va2V5cy97a2V5X2lkfVwiXSxcbiAgICBkZWxldGVEZXBsb3ltZW50OiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGxveW1lbnRzL3tkZXBsb3ltZW50X2lkfVwiXSxcbiAgICBkZWxldGVGaWxlOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbnRlbnRzL3twYXRofVwiXSxcbiAgICBkZWxldGVJbnZpdGF0aW9uOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfVwiXSxcbiAgICBkZWxldGVQYWdlc1NpdGU6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXNcIl0sXG4gICAgZGVsZXRlUHVsbFJlcXVlc3RSZXZpZXdQcm90ZWN0aW9uOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfcHVsbF9yZXF1ZXN0X3Jldmlld3NcIl0sXG4gICAgZGVsZXRlUmVsZWFzZTogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH1cIl0sXG4gICAgZGVsZXRlUmVsZWFzZUFzc2V0OiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL2Fzc2V0cy97YXNzZXRfaWR9XCJdLFxuICAgIGRlbGV0ZVRhZ1Byb3RlY3Rpb246IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vdGFncy9wcm90ZWN0aW9uL3t0YWdfcHJvdGVjdGlvbl9pZH1cIl0sXG4gICAgZGVsZXRlV2ViaG9vazogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgZGlzYWJsZUF1dG9tYXRlZFNlY3VyaXR5Rml4ZXM6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYXV0b21hdGVkLXNlY3VyaXR5LWZpeGVzXCJdLFxuICAgIGRpc2FibGVMZnNGb3JSZXBvOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xmc1wiXSxcbiAgICBkaXNhYmxlVnVsbmVyYWJpbGl0eUFsZXJ0czogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS92dWxuZXJhYmlsaXR5LWFsZXJ0c1wiXSxcbiAgICBkb3dubG9hZEFyY2hpdmU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vemlwYmFsbC97cmVmfVwiLCB7fSwge1xuICAgICAgcmVuYW1lZDogW1wicmVwb3NcIiwgXCJkb3dubG9hZFppcGJhbGxBcmNoaXZlXCJdXG4gICAgfV0sXG4gICAgZG93bmxvYWRUYXJiYWxsQXJjaGl2ZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YXJiYWxsL3tyZWZ9XCJdLFxuICAgIGRvd25sb2FkWmlwYmFsbEFyY2hpdmU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vemlwYmFsbC97cmVmfVwiXSxcbiAgICBlbmFibGVBdXRvbWF0ZWRTZWN1cml0eUZpeGVzOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9tYXRlZC1zZWN1cml0eS1maXhlc1wiXSxcbiAgICBlbmFibGVMZnNGb3JSZXBvOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xmc1wiXSxcbiAgICBlbmFibGVWdWxuZXJhYmlsaXR5QWxlcnRzOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Z1bG5lcmFiaWxpdHktYWxlcnRzXCJdLFxuICAgIGdlbmVyYXRlUmVsZWFzZU5vdGVzOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy9nZW5lcmF0ZS1ub3Rlc1wiXSxcbiAgICBnZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb31cIl0sXG4gICAgZ2V0QWNjZXNzUmVzdHJpY3Rpb25zOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zXCJdLFxuICAgIGdldEFkbWluQnJhbmNoUHJvdGVjdGlvbjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL2VuZm9yY2VfYWRtaW5zXCJdLFxuICAgIGdldEFsbEVudmlyb25tZW50czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHNcIl0sXG4gICAgZ2V0QWxsU3RhdHVzQ2hlY2tDb250ZXh0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3MvY29udGV4dHNcIl0sXG4gICAgZ2V0QWxsVG9waWNzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RvcGljc1wiXSxcbiAgICBnZXRBcHBzV2l0aEFjY2Vzc1RvUHJvdGVjdGVkQnJhbmNoOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL2FwcHNcIl0sXG4gICAgZ2V0QXV0b2xpbms6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXV0b2xpbmtzL3thdXRvbGlua19pZH1cIl0sXG4gICAgZ2V0QnJhbmNoOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9XCJdLFxuICAgIGdldEJyYW5jaFByb3RlY3Rpb246IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvblwiXSxcbiAgICBnZXRDbG9uZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdHJhZmZpYy9jbG9uZXNcIl0sXG4gICAgZ2V0Q29kZUZyZXF1ZW5jeVN0YXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXRzL2NvZGVfZnJlcXVlbmN5XCJdLFxuICAgIGdldENvbGxhYm9yYXRvclBlcm1pc3Npb25MZXZlbDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX0vcGVybWlzc2lvblwiXSxcbiAgICBnZXRDb21iaW5lZFN0YXR1c0ZvclJlZjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L3N0YXR1c1wiXSxcbiAgICBnZXRDb21taXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfVwiXSxcbiAgICBnZXRDb21taXRBY3Rpdml0eVN0YXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXRzL2NvbW1pdF9hY3Rpdml0eVwiXSxcbiAgICBnZXRDb21taXRDb21tZW50OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBnZXRDb21taXRTaWduYXR1cmVQcm90ZWN0aW9uOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc2lnbmF0dXJlc1wiXSxcbiAgICBnZXRDb21tdW5pdHlQcm9maWxlTWV0cmljczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tdW5pdHkvcHJvZmlsZVwiXSxcbiAgICBnZXRDb250ZW50OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbnRlbnRzL3twYXRofVwiXSxcbiAgICBnZXRDb250cmlidXRvcnNTdGF0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGF0cy9jb250cmlidXRvcnNcIl0sXG4gICAgZ2V0RGVwbG95S2V5OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2tleXMve2tleV9pZH1cIl0sXG4gICAgZ2V0RGVwbG95bWVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50cy97ZGVwbG95bWVudF9pZH1cIl0sXG4gICAgZ2V0RGVwbG95bWVudFN0YXR1czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50cy97ZGVwbG95bWVudF9pZH0vc3RhdHVzZXMve3N0YXR1c19pZH1cIl0sXG4gICAgZ2V0RW52aXJvbm1lbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfVwiXSxcbiAgICBnZXRMYXRlc3RQYWdlc0J1aWxkOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2J1aWxkcy9sYXRlc3RcIl0sXG4gICAgZ2V0TGF0ZXN0UmVsZWFzZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy9sYXRlc3RcIl0sXG4gICAgZ2V0UGFnZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXNcIl0sXG4gICAgZ2V0UGFnZXNCdWlsZDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9idWlsZHMve2J1aWxkX2lkfVwiXSxcbiAgICBnZXRQYWdlc0hlYWx0aENoZWNrOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2hlYWx0aFwiXSxcbiAgICBnZXRQYXJ0aWNpcGF0aW9uU3RhdHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3RhdHMvcGFydGljaXBhdGlvblwiXSxcbiAgICBnZXRQdWxsUmVxdWVzdFJldmlld1Byb3RlY3Rpb246IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9wdWxsX3JlcXVlc3RfcmV2aWV3c1wiXSxcbiAgICBnZXRQdW5jaENhcmRTdGF0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGF0cy9wdW5jaF9jYXJkXCJdLFxuICAgIGdldFJlYWRtZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWFkbWVcIl0sXG4gICAgZ2V0UmVhZG1lSW5EaXJlY3Rvcnk6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVhZG1lL3tkaXJ9XCJdLFxuICAgIGdldFJlbGVhc2U6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9XCJdLFxuICAgIGdldFJlbGVhc2VBc3NldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy9hc3NldHMve2Fzc2V0X2lkfVwiXSxcbiAgICBnZXRSZWxlYXNlQnlUYWc6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMvdGFncy97dGFnfVwiXSxcbiAgICBnZXRTdGF0dXNDaGVja3NQcm90ZWN0aW9uOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrc1wiXSxcbiAgICBnZXRUZWFtc1dpdGhBY2Nlc3NUb1Byb3RlY3RlZEJyYW5jaDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy90ZWFtc1wiXSxcbiAgICBnZXRUb3BQYXRoczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90cmFmZmljL3BvcHVsYXIvcGF0aHNcIl0sXG4gICAgZ2V0VG9wUmVmZXJyZXJzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RyYWZmaWMvcG9wdWxhci9yZWZlcnJlcnNcIl0sXG4gICAgZ2V0VXNlcnNXaXRoQWNjZXNzVG9Qcm90ZWN0ZWRCcmFuY2g6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdXNlcnNcIl0sXG4gICAgZ2V0Vmlld3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdHJhZmZpYy92aWV3c1wiXSxcbiAgICBnZXRXZWJob29rOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfVwiXSxcbiAgICBnZXRXZWJob29rQ29uZmlnRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vY29uZmlnXCJdLFxuICAgIGdldFdlYmhvb2tEZWxpdmVyeTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9XCJdLFxuICAgIGxpc3RBdXRvbGlua3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXV0b2xpbmtzXCJdLFxuICAgIGxpc3RCcmFuY2hlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlc1wiXSxcbiAgICBsaXN0QnJhbmNoZXNGb3JIZWFkQ29tbWl0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve2NvbW1pdF9zaGF9L2JyYW5jaGVzLXdoZXJlLWhlYWRcIl0sXG4gICAgbGlzdENvbGxhYm9yYXRvcnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29sbGFib3JhdG9yc1wiXSxcbiAgICBsaXN0Q29tbWVudHNGb3JDb21taXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97Y29tbWl0X3NoYX0vY29tbWVudHNcIl0sXG4gICAgbGlzdENvbW1pdENvbW1lbnRzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50c1wiXSxcbiAgICBsaXN0Q29tbWl0U3RhdHVzZXNGb3JSZWY6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfS9zdGF0dXNlc1wiXSxcbiAgICBsaXN0Q29tbWl0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzXCJdLFxuICAgIGxpc3RDb250cmlidXRvcnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29udHJpYnV0b3JzXCJdLFxuICAgIGxpc3REZXBsb3lLZXlzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2tleXNcIl0sXG4gICAgbGlzdERlcGxveW1lbnRTdGF0dXNlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50cy97ZGVwbG95bWVudF9pZH0vc3RhdHVzZXNcIl0sXG4gICAgbGlzdERlcGxveW1lbnRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGxveW1lbnRzXCJdLFxuICAgIGxpc3RGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3JlcG9zXCJdLFxuICAgIGxpc3RGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9yZXBvc1wiXSxcbiAgICBsaXN0Rm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3JlcG9zXCJdLFxuICAgIGxpc3RGb3JrczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9mb3Jrc1wiXSxcbiAgICBsaXN0SW52aXRhdGlvbnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaW52aXRhdGlvbnNcIl0sXG4gICAgbGlzdEludml0YXRpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9yZXBvc2l0b3J5X2ludml0YXRpb25zXCJdLFxuICAgIGxpc3RMYW5ndWFnZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbGFuZ3VhZ2VzXCJdLFxuICAgIGxpc3RQYWdlc0J1aWxkczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9idWlsZHNcIl0sXG4gICAgbGlzdFB1YmxpYzogW1wiR0VUIC9yZXBvc2l0b3JpZXNcIl0sXG4gICAgbGlzdFB1bGxSZXF1ZXN0c0Fzc29jaWF0ZWRXaXRoQ29tbWl0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve2NvbW1pdF9zaGF9L3B1bGxzXCJdLFxuICAgIGxpc3RSZWxlYXNlQXNzZXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfS9hc3NldHNcIl0sXG4gICAgbGlzdFJlbGVhc2VzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzXCJdLFxuICAgIGxpc3RUYWdQcm90ZWN0aW9uOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RhZ3MvcHJvdGVjdGlvblwiXSxcbiAgICBsaXN0VGFnczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YWdzXCJdLFxuICAgIGxpc3RUZWFtczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90ZWFtc1wiXSxcbiAgICBsaXN0V2ViaG9va0RlbGl2ZXJpZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXNcIl0sXG4gICAgbGlzdFdlYmhvb2tzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzXCJdLFxuICAgIG1lcmdlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9tZXJnZXNcIl0sXG4gICAgbWVyZ2VVcHN0cmVhbTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWVyZ2UtdXBzdHJlYW1cIl0sXG4gICAgcGluZ1dlYmhvb2s6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS9waW5nc1wiXSxcbiAgICByZWRlbGl2ZXJXZWJob29rRGVsaXZlcnk6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzL3tkZWxpdmVyeV9pZH0vYXR0ZW1wdHNcIl0sXG4gICAgcmVtb3ZlQXBwQWNjZXNzUmVzdHJpY3Rpb25zOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL2FwcHNcIiwge30sIHtcbiAgICAgIG1hcFRvRGF0YTogXCJhcHBzXCJcbiAgICB9XSxcbiAgICByZW1vdmVDb2xsYWJvcmF0b3I6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vY29sbGFib3JhdG9ycy97dXNlcm5hbWV9XCJdLFxuICAgIHJlbW92ZVN0YXR1c0NoZWNrQ29udGV4dHM6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zdGF0dXNfY2hlY2tzL2NvbnRleHRzXCIsIHt9LCB7XG4gICAgICBtYXBUb0RhdGE6IFwiY29udGV4dHNcIlxuICAgIH1dLFxuICAgIHJlbW92ZVN0YXR1c0NoZWNrUHJvdGVjdGlvbjogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3NcIl0sXG4gICAgcmVtb3ZlVGVhbUFjY2Vzc1Jlc3RyaWN0aW9uczogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy90ZWFtc1wiLCB7fSwge1xuICAgICAgbWFwVG9EYXRhOiBcInRlYW1zXCJcbiAgICB9XSxcbiAgICByZW1vdmVVc2VyQWNjZXNzUmVzdHJpY3Rpb25zOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL3VzZXJzXCIsIHt9LCB7XG4gICAgICBtYXBUb0RhdGE6IFwidXNlcnNcIlxuICAgIH1dLFxuICAgIHJlbmFtZUJyYW5jaDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcmVuYW1lXCJdLFxuICAgIHJlcGxhY2VBbGxUb3BpY3M6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vdG9waWNzXCJdLFxuICAgIHJlcXVlc3RQYWdlc0J1aWxkOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9idWlsZHNcIl0sXG4gICAgc2V0QWRtaW5CcmFuY2hQcm90ZWN0aW9uOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL2VuZm9yY2VfYWRtaW5zXCJdLFxuICAgIHNldEFwcEFjY2Vzc1Jlc3RyaWN0aW9uczogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy9hcHBzXCIsIHt9LCB7XG4gICAgICBtYXBUb0RhdGE6IFwiYXBwc1wiXG4gICAgfV0sXG4gICAgc2V0U3RhdHVzQ2hlY2tDb250ZXh0czogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3MvY29udGV4dHNcIiwge30sIHtcbiAgICAgIG1hcFRvRGF0YTogXCJjb250ZXh0c1wiXG4gICAgfV0sXG4gICAgc2V0VGVhbUFjY2Vzc1Jlc3RyaWN0aW9uczogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy90ZWFtc1wiLCB7fSwge1xuICAgICAgbWFwVG9EYXRhOiBcInRlYW1zXCJcbiAgICB9XSxcbiAgICBzZXRVc2VyQWNjZXNzUmVzdHJpY3Rpb25zOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL3VzZXJzXCIsIHt9LCB7XG4gICAgICBtYXBUb0RhdGE6IFwidXNlcnNcIlxuICAgIH1dLFxuICAgIHRlc3RQdXNoV2ViaG9vazogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L3Rlc3RzXCJdLFxuICAgIHRyYW5zZmVyOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90cmFuc2ZlclwiXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfVwiXSxcbiAgICB1cGRhdGVCcmFuY2hQcm90ZWN0aW9uOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb25cIl0sXG4gICAgdXBkYXRlQ29tbWl0Q29tbWVudDogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICB1cGRhdGVJbmZvcm1hdGlvbkFib3V0UGFnZXNTaXRlOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzXCJdLFxuICAgIHVwZGF0ZUludml0YXRpb246IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIl0sXG4gICAgdXBkYXRlUHVsbFJlcXVlc3RSZXZpZXdQcm90ZWN0aW9uOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9wdWxsX3JlcXVlc3RfcmV2aWV3c1wiXSxcbiAgICB1cGRhdGVSZWxlYXNlOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9XCJdLFxuICAgIHVwZGF0ZVJlbGVhc2VBc3NldDogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL2Fzc2V0cy97YXNzZXRfaWR9XCJdLFxuICAgIHVwZGF0ZVN0YXR1c0NoZWNrUG90ZWN0aW9uOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zdGF0dXNfY2hlY2tzXCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJyZXBvc1wiLCBcInVwZGF0ZVN0YXR1c0NoZWNrUHJvdGVjdGlvblwiXVxuICAgIH1dLFxuICAgIHVwZGF0ZVN0YXR1c0NoZWNrUHJvdGVjdGlvbjogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrc1wiXSxcbiAgICB1cGRhdGVXZWJob29rOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9XCJdLFxuICAgIHVwZGF0ZVdlYmhvb2tDb25maWdGb3JSZXBvOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L2NvbmZpZ1wiXSxcbiAgICB1cGxvYWRSZWxlYXNlQXNzZXQ6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfS9hc3NldHN7P25hbWUsbGFiZWx9XCIsIHtcbiAgICAgIGJhc2VVcmw6IFwiaHR0cHM6Ly91cGxvYWRzLmdpdGh1Yi5jb21cIlxuICAgIH1dXG4gIH0sXG4gIHNlYXJjaDoge1xuICAgIGNvZGU6IFtcIkdFVCAvc2VhcmNoL2NvZGVcIl0sXG4gICAgY29tbWl0czogW1wiR0VUIC9zZWFyY2gvY29tbWl0c1wiXSxcbiAgICBpc3N1ZXNBbmRQdWxsUmVxdWVzdHM6IFtcIkdFVCAvc2VhcmNoL2lzc3Vlc1wiXSxcbiAgICBsYWJlbHM6IFtcIkdFVCAvc2VhcmNoL2xhYmVsc1wiXSxcbiAgICByZXBvczogW1wiR0VUIC9zZWFyY2gvcmVwb3NpdG9yaWVzXCJdLFxuICAgIHRvcGljczogW1wiR0VUIC9zZWFyY2gvdG9waWNzXCJdLFxuICAgIHVzZXJzOiBbXCJHRVQgL3NlYXJjaC91c2Vyc1wiXVxuICB9LFxuICBzZWNyZXRTY2FubmluZzoge1xuICAgIGdldEFsZXJ0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3JldC1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn1cIl0sXG4gICAgbGlzdEFsZXJ0c0ZvckVudGVycHJpc2U6IFtcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L3NlY3JldC1zY2FubmluZy9hbGVydHNcIl0sXG4gICAgbGlzdEFsZXJ0c0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3NlY3JldC1zY2FubmluZy9hbGVydHNcIl0sXG4gICAgbGlzdEFsZXJ0c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0c1wiXSxcbiAgICBsaXN0TG9jYXRpb25zRm9yQWxlcnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9sb2NhdGlvbnNcIl0sXG4gICAgdXBkYXRlQWxlcnQ6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9XCJdXG4gIH0sXG4gIHRlYW1zOiB7XG4gICAgYWRkT3JVcGRhdGVNZW1iZXJzaGlwRm9yVXNlckluT3JnOiBbXCJQVVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiXSxcbiAgICBhZGRPclVwZGF0ZVByb2plY3RQZXJtaXNzaW9uc0luT3JnOiBbXCJQVVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcHJvamVjdHMve3Byb2plY3RfaWR9XCJdLFxuICAgIGFkZE9yVXBkYXRlUmVwb1Blcm1pc3Npb25zSW5Pcmc6IFtcIlBVVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9yZXBvcy97b3duZXJ9L3tyZXBvfVwiXSxcbiAgICBjaGVja1Blcm1pc3Npb25zRm9yUHJvamVjdEluT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcHJvamVjdHMve3Byb2plY3RfaWR9XCJdLFxuICAgIGNoZWNrUGVybWlzc2lvbnNGb3JSZXBvSW5Pcmc6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9yZXBvcy97b3duZXJ9L3tyZXBvfVwiXSxcbiAgICBjcmVhdGU6IFtcIlBPU1QgL29yZ3Mve29yZ30vdGVhbXNcIl0sXG4gICAgY3JlYXRlRGlzY3Vzc2lvbkNvbW1lbnRJbk9yZzogW1wiUE9TVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzXCJdLFxuICAgIGNyZWF0ZURpc2N1c3Npb25Jbk9yZzogW1wiUE9TVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9uc1wiXSxcbiAgICBkZWxldGVEaXNjdXNzaW9uQ29tbWVudEluT3JnOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9XCJdLFxuICAgIGRlbGV0ZURpc2N1c3Npb25Jbk9yZzogW1wiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn1cIl0sXG4gICAgZGVsZXRlSW5Pcmc6IFtcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfVwiXSxcbiAgICBnZXRCeU5hbWU6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfVwiXSxcbiAgICBnZXREaXNjdXNzaW9uQ29tbWVudEluT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9XCJdLFxuICAgIGdldERpc2N1c3Npb25Jbk9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn1cIl0sXG4gICAgZ2V0TWVtYmVyc2hpcEZvclVzZXJJbk9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L21lbWJlcnNoaXBzL3t1c2VybmFtZX1cIl0sXG4gICAgbGlzdDogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zXCJdLFxuICAgIGxpc3RDaGlsZEluT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vdGVhbXNcIl0sXG4gICAgbGlzdERpc2N1c3Npb25Db21tZW50c0luT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50c1wiXSxcbiAgICBsaXN0RGlzY3Vzc2lvbnNJbk9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zXCJdLFxuICAgIGxpc3RGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3RlYW1zXCJdLFxuICAgIGxpc3RNZW1iZXJzSW5Pcmc6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9tZW1iZXJzXCJdLFxuICAgIGxpc3RQZW5kaW5nSW52aXRhdGlvbnNJbk9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2ludml0YXRpb25zXCJdLFxuICAgIGxpc3RQcm9qZWN0c0luT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcHJvamVjdHNcIl0sXG4gICAgbGlzdFJlcG9zSW5Pcmc6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9yZXBvc1wiXSxcbiAgICByZW1vdmVNZW1iZXJzaGlwRm9yVXNlckluT3JnOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiXSxcbiAgICByZW1vdmVQcm9qZWN0SW5Pcmc6IFtcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9wcm9qZWN0cy97cHJvamVjdF9pZH1cIl0sXG4gICAgcmVtb3ZlUmVwb0luT3JnOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcmVwb3Mve293bmVyfS97cmVwb31cIl0sXG4gICAgdXBkYXRlRGlzY3Vzc2lvbkNvbW1lbnRJbk9yZzogW1wiUEFUQ0ggL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9XCJdLFxuICAgIHVwZGF0ZURpc2N1c3Npb25Jbk9yZzogW1wiUEFUQ0ggL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfVwiXSxcbiAgICB1cGRhdGVJbk9yZzogW1wiUEFUQ0ggL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z31cIl1cbiAgfSxcbiAgdXNlcnM6IHtcbiAgICBhZGRFbWFpbEZvckF1dGhlbnRpY2F0ZWQ6IFtcIlBPU1QgL3VzZXIvZW1haWxzXCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImFkZEVtYWlsRm9yQXV0aGVudGljYXRlZFVzZXJcIl1cbiAgICB9XSxcbiAgICBhZGRFbWFpbEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL2VtYWlsc1wiXSxcbiAgICBibG9jazogW1wiUFVUIC91c2VyL2Jsb2Nrcy97dXNlcm5hbWV9XCJdLFxuICAgIGNoZWNrQmxvY2tlZDogW1wiR0VUIC91c2VyL2Jsb2Nrcy97dXNlcm5hbWV9XCJdLFxuICAgIGNoZWNrRm9sbG93aW5nRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2ZvbGxvd2luZy97dGFyZ2V0X3VzZXJ9XCJdLFxuICAgIGNoZWNrUGVyc29uSXNGb2xsb3dlZEJ5QXV0aGVudGljYXRlZDogW1wiR0VUIC91c2VyL2ZvbGxvd2luZy97dXNlcm5hbWV9XCJdLFxuICAgIGNyZWF0ZUdwZ0tleUZvckF1dGhlbnRpY2F0ZWQ6IFtcIlBPU1QgL3VzZXIvZ3BnX2tleXNcIiwge30sIHtcbiAgICAgIHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiY3JlYXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl1cbiAgICB9XSxcbiAgICBjcmVhdGVHcGdLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9ncGdfa2V5c1wiXSxcbiAgICBjcmVhdGVQdWJsaWNTc2hLZXlGb3JBdXRoZW50aWNhdGVkOiBbXCJQT1NUIC91c2VyL2tleXNcIiwge30sIHtcbiAgICAgIHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiY3JlYXRlUHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl1cbiAgICB9XSxcbiAgICBjcmVhdGVQdWJsaWNTc2hLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9rZXlzXCJdLFxuICAgIGRlbGV0ZUVtYWlsRm9yQXV0aGVudGljYXRlZDogW1wiREVMRVRFIC91c2VyL2VtYWlsc1wiLCB7fSwge1xuICAgICAgcmVuYW1lZDogW1widXNlcnNcIiwgXCJkZWxldGVFbWFpbEZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdXG4gICAgfV0sXG4gICAgZGVsZXRlRW1haWxGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiREVMRVRFIC91c2VyL2VtYWlsc1wiXSxcbiAgICBkZWxldGVHcGdLZXlGb3JBdXRoZW50aWNhdGVkOiBbXCJERUxFVEUgL3VzZXIvZ3BnX2tleXMve2dwZ19rZXlfaWR9XCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImRlbGV0ZUdwZ0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdXG4gICAgfV0sXG4gICAgZGVsZXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9ncGdfa2V5cy97Z3BnX2tleV9pZH1cIl0sXG4gICAgZGVsZXRlUHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZDogW1wiREVMRVRFIC91c2VyL2tleXMve2tleV9pZH1cIiwge30sIHtcbiAgICAgIHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiZGVsZXRlUHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl1cbiAgICB9XSxcbiAgICBkZWxldGVQdWJsaWNTc2hLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiREVMRVRFIC91c2VyL2tleXMve2tleV9pZH1cIl0sXG4gICAgZm9sbG93OiBbXCJQVVQgL3VzZXIvZm9sbG93aW5nL3t1c2VybmFtZX1cIl0sXG4gICAgZ2V0QXV0aGVudGljYXRlZDogW1wiR0VUIC91c2VyXCJdLFxuICAgIGdldEJ5VXNlcm5hbWU6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfVwiXSxcbiAgICBnZXRDb250ZXh0Rm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2hvdmVyY2FyZFwiXSxcbiAgICBnZXRHcGdLZXlGb3JBdXRoZW50aWNhdGVkOiBbXCJHRVQgL3VzZXIvZ3BnX2tleXMve2dwZ19rZXlfaWR9XCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImdldEdwZ0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdXG4gICAgfV0sXG4gICAgZ2V0R3BnS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9ncGdfa2V5cy97Z3BnX2tleV9pZH1cIl0sXG4gICAgZ2V0UHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZDogW1wiR0VUIC91c2VyL2tleXMve2tleV9pZH1cIiwge30sIHtcbiAgICAgIHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiZ2V0UHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl1cbiAgICB9XSxcbiAgICBnZXRQdWJsaWNTc2hLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2tleXMve2tleV9pZH1cIl0sXG4gICAgbGlzdDogW1wiR0VUIC91c2Vyc1wiXSxcbiAgICBsaXN0QmxvY2tlZEJ5QXV0aGVudGljYXRlZDogW1wiR0VUIC91c2VyL2Jsb2Nrc1wiLCB7fSwge1xuICAgICAgcmVuYW1lZDogW1widXNlcnNcIiwgXCJsaXN0QmxvY2tlZEJ5QXV0aGVudGljYXRlZFVzZXJcIl1cbiAgICB9XSxcbiAgICBsaXN0QmxvY2tlZEJ5QXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9ibG9ja3NcIl0sXG4gICAgbGlzdEVtYWlsc0ZvckF1dGhlbnRpY2F0ZWQ6IFtcIkdFVCAvdXNlci9lbWFpbHNcIiwge30sIHtcbiAgICAgIHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwibGlzdEVtYWlsc0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdXG4gICAgfV0sXG4gICAgbGlzdEVtYWlsc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvZW1haWxzXCJdLFxuICAgIGxpc3RGb2xsb3dlZEJ5QXV0aGVudGljYXRlZDogW1wiR0VUIC91c2VyL2ZvbGxvd2luZ1wiLCB7fSwge1xuICAgICAgcmVuYW1lZDogW1widXNlcnNcIiwgXCJsaXN0Rm9sbG93ZWRCeUF1dGhlbnRpY2F0ZWRVc2VyXCJdXG4gICAgfV0sXG4gICAgbGlzdEZvbGxvd2VkQnlBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2ZvbGxvd2luZ1wiXSxcbiAgICBsaXN0Rm9sbG93ZXJzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9mb2xsb3dlcnNcIl0sXG4gICAgbGlzdEZvbGxvd2Vyc0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9mb2xsb3dlcnNcIl0sXG4gICAgbGlzdEZvbGxvd2luZ0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9mb2xsb3dpbmdcIl0sXG4gICAgbGlzdEdwZ0tleXNGb3JBdXRoZW50aWNhdGVkOiBbXCJHRVQgL3VzZXIvZ3BnX2tleXNcIiwge30sIHtcbiAgICAgIHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwibGlzdEdwZ0tleXNGb3JBdXRoZW50aWNhdGVkVXNlclwiXVxuICAgIH1dLFxuICAgIGxpc3RHcGdLZXlzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9ncGdfa2V5c1wiXSxcbiAgICBsaXN0R3BnS2V5c0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ncGdfa2V5c1wiXSxcbiAgICBsaXN0UHVibGljRW1haWxzRm9yQXV0aGVudGljYXRlZDogW1wiR0VUIC91c2VyL3B1YmxpY19lbWFpbHNcIiwge30sIHtcbiAgICAgIHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwibGlzdFB1YmxpY0VtYWlsc0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdXG4gICAgfV0sXG4gICAgbGlzdFB1YmxpY0VtYWlsc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvcHVibGljX2VtYWlsc1wiXSxcbiAgICBsaXN0UHVibGljS2V5c0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9rZXlzXCJdLFxuICAgIGxpc3RQdWJsaWNTc2hLZXlzRm9yQXV0aGVudGljYXRlZDogW1wiR0VUIC91c2VyL2tleXNcIiwge30sIHtcbiAgICAgIHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwibGlzdFB1YmxpY1NzaEtleXNGb3JBdXRoZW50aWNhdGVkVXNlclwiXVxuICAgIH1dLFxuICAgIGxpc3RQdWJsaWNTc2hLZXlzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9rZXlzXCJdLFxuICAgIHNldFByaW1hcnlFbWFpbFZpc2liaWxpdHlGb3JBdXRoZW50aWNhdGVkOiBbXCJQQVRDSCAvdXNlci9lbWFpbC92aXNpYmlsaXR5XCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcInNldFByaW1hcnlFbWFpbFZpc2liaWxpdHlGb3JBdXRoZW50aWNhdGVkVXNlclwiXVxuICAgIH1dLFxuICAgIHNldFByaW1hcnlFbWFpbFZpc2liaWxpdHlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUEFUQ0ggL3VzZXIvZW1haWwvdmlzaWJpbGl0eVwiXSxcbiAgICB1bmJsb2NrOiBbXCJERUxFVEUgL3VzZXIvYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgdW5mb2xsb3c6IFtcIkRFTEVURSAvdXNlci9mb2xsb3dpbmcve3VzZXJuYW1lfVwiXSxcbiAgICB1cGRhdGVBdXRoZW50aWNhdGVkOiBbXCJQQVRDSCAvdXNlclwiXVxuICB9XG59O1xuXG5jb25zdCBWRVJTSU9OID0gXCI1LjE2LjJcIjtcblxuZnVuY3Rpb24gZW5kcG9pbnRzVG9NZXRob2RzKG9jdG9raXQsIGVuZHBvaW50c01hcCkge1xuICBjb25zdCBuZXdNZXRob2RzID0ge307XG5cbiAgZm9yIChjb25zdCBbc2NvcGUsIGVuZHBvaW50c10gb2YgT2JqZWN0LmVudHJpZXMoZW5kcG9pbnRzTWFwKSkge1xuICAgIGZvciAoY29uc3QgW21ldGhvZE5hbWUsIGVuZHBvaW50XSBvZiBPYmplY3QuZW50cmllcyhlbmRwb2ludHMpKSB7XG4gICAgICBjb25zdCBbcm91dGUsIGRlZmF1bHRzLCBkZWNvcmF0aW9uc10gPSBlbmRwb2ludDtcbiAgICAgIGNvbnN0IFttZXRob2QsIHVybF0gPSByb3V0ZS5zcGxpdCgvIC8pO1xuICAgICAgY29uc3QgZW5kcG9pbnREZWZhdWx0cyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgICBtZXRob2QsXG4gICAgICAgIHVybFxuICAgICAgfSwgZGVmYXVsdHMpO1xuXG4gICAgICBpZiAoIW5ld01ldGhvZHNbc2NvcGVdKSB7XG4gICAgICAgIG5ld01ldGhvZHNbc2NvcGVdID0ge307XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNjb3BlTWV0aG9kcyA9IG5ld01ldGhvZHNbc2NvcGVdO1xuXG4gICAgICBpZiAoZGVjb3JhdGlvbnMpIHtcbiAgICAgICAgc2NvcGVNZXRob2RzW21ldGhvZE5hbWVdID0gZGVjb3JhdGUob2N0b2tpdCwgc2NvcGUsIG1ldGhvZE5hbWUsIGVuZHBvaW50RGVmYXVsdHMsIGRlY29yYXRpb25zKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHNjb3BlTWV0aG9kc1ttZXRob2ROYW1lXSA9IG9jdG9raXQucmVxdWVzdC5kZWZhdWx0cyhlbmRwb2ludERlZmF1bHRzKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3TWV0aG9kcztcbn1cblxuZnVuY3Rpb24gZGVjb3JhdGUob2N0b2tpdCwgc2NvcGUsIG1ldGhvZE5hbWUsIGRlZmF1bHRzLCBkZWNvcmF0aW9ucykge1xuICBjb25zdCByZXF1ZXN0V2l0aERlZmF1bHRzID0gb2N0b2tpdC5yZXF1ZXN0LmRlZmF1bHRzKGRlZmF1bHRzKTtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblxuICBmdW5jdGlvbiB3aXRoRGVjb3JhdGlvbnMoLi4uYXJncykge1xuICAgIC8vIEB0cy1pZ25vcmUgaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy8yNTQ4OFxuICAgIGxldCBvcHRpb25zID0gcmVxdWVzdFdpdGhEZWZhdWx0cy5lbmRwb2ludC5tZXJnZSguLi5hcmdzKTsgLy8gVGhlcmUgYXJlIGN1cnJlbnRseSBubyBvdGhlciBkZWNvcmF0aW9ucyB0aGFuIGAubWFwVG9EYXRhYFxuXG4gICAgaWYgKGRlY29yYXRpb25zLm1hcFRvRGF0YSkge1xuICAgICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMsIHtcbiAgICAgICAgZGF0YTogb3B0aW9uc1tkZWNvcmF0aW9ucy5tYXBUb0RhdGFdLFxuICAgICAgICBbZGVjb3JhdGlvbnMubWFwVG9EYXRhXTogdW5kZWZpbmVkXG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXF1ZXN0V2l0aERlZmF1bHRzKG9wdGlvbnMpO1xuICAgIH1cblxuICAgIGlmIChkZWNvcmF0aW9ucy5yZW5hbWVkKSB7XG4gICAgICBjb25zdCBbbmV3U2NvcGUsIG5ld01ldGhvZE5hbWVdID0gZGVjb3JhdGlvbnMucmVuYW1lZDtcbiAgICAgIG9jdG9raXQubG9nLndhcm4oYG9jdG9raXQuJHtzY29wZX0uJHttZXRob2ROYW1lfSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gb2N0b2tpdC4ke25ld1Njb3BlfS4ke25ld01ldGhvZE5hbWV9KClgKTtcbiAgICB9XG5cbiAgICBpZiAoZGVjb3JhdGlvbnMuZGVwcmVjYXRlZCkge1xuICAgICAgb2N0b2tpdC5sb2cud2FybihkZWNvcmF0aW9ucy5kZXByZWNhdGVkKTtcbiAgICB9XG5cbiAgICBpZiAoZGVjb3JhdGlvbnMucmVuYW1lZFBhcmFtZXRlcnMpIHtcbiAgICAgIC8vIEB0cy1pZ25vcmUgaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy8yNTQ4OFxuICAgICAgY29uc3Qgb3B0aW9ucyA9IHJlcXVlc3RXaXRoRGVmYXVsdHMuZW5kcG9pbnQubWVyZ2UoLi4uYXJncyk7XG5cbiAgICAgIGZvciAoY29uc3QgW25hbWUsIGFsaWFzXSBvZiBPYmplY3QuZW50cmllcyhkZWNvcmF0aW9ucy5yZW5hbWVkUGFyYW1ldGVycykpIHtcbiAgICAgICAgaWYgKG5hbWUgaW4gb3B0aW9ucykge1xuICAgICAgICAgIG9jdG9raXQubG9nLndhcm4oYFwiJHtuYW1lfVwiIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkIGZvciBcIm9jdG9raXQuJHtzY29wZX0uJHttZXRob2ROYW1lfSgpXCIuIFVzZSBcIiR7YWxpYXN9XCIgaW5zdGVhZGApO1xuXG4gICAgICAgICAgaWYgKCEoYWxpYXMgaW4gb3B0aW9ucykpIHtcbiAgICAgICAgICAgIG9wdGlvbnNbYWxpYXNdID0gb3B0aW9uc1tuYW1lXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkZWxldGUgb3B0aW9uc1tuYW1lXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVxdWVzdFdpdGhEZWZhdWx0cyhvcHRpb25zKTtcbiAgICB9IC8vIEB0cy1pZ25vcmUgaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy8yNTQ4OFxuXG5cbiAgICByZXR1cm4gcmVxdWVzdFdpdGhEZWZhdWx0cyguLi5hcmdzKTtcbiAgfVxuXG4gIHJldHVybiBPYmplY3QuYXNzaWduKHdpdGhEZWNvcmF0aW9ucywgcmVxdWVzdFdpdGhEZWZhdWx0cyk7XG59XG5cbmZ1bmN0aW9uIHJlc3RFbmRwb2ludE1ldGhvZHMob2N0b2tpdCkge1xuICBjb25zdCBhcGkgPSBlbmRwb2ludHNUb01ldGhvZHMob2N0b2tpdCwgRW5kcG9pbnRzKTtcbiAgcmV0dXJuIHtcbiAgICByZXN0OiBhcGlcbiAgfTtcbn1cbnJlc3RFbmRwb2ludE1ldGhvZHMuVkVSU0lPTiA9IFZFUlNJT047XG5mdW5jdGlvbiBsZWdhY3lSZXN0RW5kcG9pbnRNZXRob2RzKG9jdG9raXQpIHtcbiAgY29uc3QgYXBpID0gZW5kcG9pbnRzVG9NZXRob2RzKG9jdG9raXQsIEVuZHBvaW50cyk7XG4gIHJldHVybiBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgYXBpKSwge30sIHtcbiAgICByZXN0OiBhcGlcbiAgfSk7XG59XG5sZWdhY3lSZXN0RW5kcG9pbnRNZXRob2RzLlZFUlNJT04gPSBWRVJTSU9OO1xuXG5leHBvcnRzLmxlZ2FjeVJlc3RFbmRwb2ludE1ldGhvZHMgPSBsZWdhY3lSZXN0RW5kcG9pbnRNZXRob2RzO1xuZXhwb3J0cy5yZXN0RW5kcG9pbnRNZXRob2RzID0gcmVzdEVuZHBvaW50TWV0aG9kcztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmNvbnN0IFZFUlNJT04gPSBcIjIuMjEuM1wiO1xuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7XG4gICAgZW51bWVyYWJsZU9ubHkgJiYgKHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTtcbiAgICB9KSksIGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTtcbiAgfVxuXG4gIHJldHVybiBrZXlzO1xufVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkMih0YXJnZXQpIHtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc291cmNlID0gbnVsbCAhPSBhcmd1bWVudHNbaV0gPyBhcmd1bWVudHNbaV0gOiB7fTtcbiAgICBpICUgMiA/IG93bktleXMoT2JqZWN0KHNvdXJjZSksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pO1xuICAgIH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpIDogb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gb2JqO1xufVxuXG4vKipcbiAqIFNvbWUg4oCcbGlzdOKAnSByZXNwb25zZSB0aGF0IGNhbiBiZSBwYWdpbmF0ZWQgaGF2ZSBhIGRpZmZlcmVudCByZXNwb25zZSBzdHJ1Y3R1cmVcbiAqXG4gKiBUaGV5IGhhdmUgYSBgdG90YWxfY291bnRgIGtleSBpbiB0aGUgcmVzcG9uc2UgKHNlYXJjaCBhbHNvIGhhcyBgaW5jb21wbGV0ZV9yZXN1bHRzYCxcbiAqIC9pbnN0YWxsYXRpb24vcmVwb3NpdG9yaWVzIGFsc28gaGFzIGByZXBvc2l0b3J5X3NlbGVjdGlvbmApLCBhcyB3ZWxsIGFzIGEga2V5IHdpdGhcbiAqIHRoZSBsaXN0IG9mIHRoZSBpdGVtcyB3aGljaCBuYW1lIHZhcmllcyBmcm9tIGVuZHBvaW50IHRvIGVuZHBvaW50LlxuICpcbiAqIE9jdG9raXQgbm9ybWFsaXplcyB0aGVzZSByZXNwb25zZXMgc28gdGhhdCBwYWdpbmF0ZWQgcmVzdWx0cyBhcmUgYWx3YXlzIHJldHVybmVkIGZvbGxvd2luZ1xuICogdGhlIHNhbWUgc3RydWN0dXJlLiBPbmUgY2hhbGxlbmdlIGlzIHRoYXQgaWYgdGhlIGxpc3QgcmVzcG9uc2UgaGFzIG9ubHkgb25lIHBhZ2UsIG5vIExpbmtcbiAqIGhlYWRlciBpcyBwcm92aWRlZCwgc28gdGhpcyBoZWFkZXIgYWxvbmUgaXMgbm90IHN1ZmZpY2llbnQgdG8gY2hlY2sgd2V0aGVyIGEgcmVzcG9uc2UgaXNcbiAqIHBhZ2luYXRlZCBvciBub3QuXG4gKlxuICogV2UgY2hlY2sgaWYgYSBcInRvdGFsX2NvdW50XCIga2V5IGlzIHByZXNlbnQgaW4gdGhlIHJlc3BvbnNlIGRhdGEsIGJ1dCBhbHNvIG1ha2Ugc3VyZSB0aGF0XG4gKiBhIFwidXJsXCIgcHJvcGVydHkgaXMgbm90LCBhcyB0aGUgXCJHZXQgdGhlIGNvbWJpbmVkIHN0YXR1cyBmb3IgYSBzcGVjaWZpYyByZWZcIiBlbmRwb2ludCB3b3VsZFxuICogb3RoZXJ3aXNlIG1hdGNoOiBodHRwczovL2RldmVsb3Blci5naXRodWIuY29tL3YzL3JlcG9zL3N0YXR1c2VzLyNnZXQtdGhlLWNvbWJpbmVkLXN0YXR1cy1mb3ItYS1zcGVjaWZpYy1yZWZcbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplUGFnaW5hdGVkTGlzdFJlc3BvbnNlKHJlc3BvbnNlKSB7XG4gIC8vIGVuZHBvaW50cyBjYW4gcmVzcG9uZCB3aXRoIDIwNCBpZiByZXBvc2l0b3J5IGlzIGVtcHR5XG4gIGlmICghcmVzcG9uc2UuZGF0YSkge1xuICAgIHJldHVybiBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgcmVzcG9uc2UpLCB7fSwge1xuICAgICAgZGF0YTogW11cbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IHJlc3BvbnNlTmVlZHNOb3JtYWxpemF0aW9uID0gXCJ0b3RhbF9jb3VudFwiIGluIHJlc3BvbnNlLmRhdGEgJiYgIShcInVybFwiIGluIHJlc3BvbnNlLmRhdGEpO1xuICBpZiAoIXJlc3BvbnNlTmVlZHNOb3JtYWxpemF0aW9uKSByZXR1cm4gcmVzcG9uc2U7IC8vIGtlZXAgdGhlIGFkZGl0aW9uYWwgcHJvcGVydGllcyBpbnRhY3QgYXMgdGhlcmUgaXMgY3VycmVudGx5IG5vIG90aGVyIHdheVxuICAvLyB0byByZXRyaWV2ZSB0aGUgc2FtZSBpbmZvcm1hdGlvbi5cblxuICBjb25zdCBpbmNvbXBsZXRlUmVzdWx0cyA9IHJlc3BvbnNlLmRhdGEuaW5jb21wbGV0ZV9yZXN1bHRzO1xuICBjb25zdCByZXBvc2l0b3J5U2VsZWN0aW9uID0gcmVzcG9uc2UuZGF0YS5yZXBvc2l0b3J5X3NlbGVjdGlvbjtcbiAgY29uc3QgdG90YWxDb3VudCA9IHJlc3BvbnNlLmRhdGEudG90YWxfY291bnQ7XG4gIGRlbGV0ZSByZXNwb25zZS5kYXRhLmluY29tcGxldGVfcmVzdWx0cztcbiAgZGVsZXRlIHJlc3BvbnNlLmRhdGEucmVwb3NpdG9yeV9zZWxlY3Rpb247XG4gIGRlbGV0ZSByZXNwb25zZS5kYXRhLnRvdGFsX2NvdW50O1xuICBjb25zdCBuYW1lc3BhY2VLZXkgPSBPYmplY3Qua2V5cyhyZXNwb25zZS5kYXRhKVswXTtcbiAgY29uc3QgZGF0YSA9IHJlc3BvbnNlLmRhdGFbbmFtZXNwYWNlS2V5XTtcbiAgcmVzcG9uc2UuZGF0YSA9IGRhdGE7XG5cbiAgaWYgKHR5cGVvZiBpbmNvbXBsZXRlUmVzdWx0cyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJlc3BvbnNlLmRhdGEuaW5jb21wbGV0ZV9yZXN1bHRzID0gaW5jb21wbGV0ZVJlc3VsdHM7XG4gIH1cblxuICBpZiAodHlwZW9mIHJlcG9zaXRvcnlTZWxlY3Rpb24gIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXNwb25zZS5kYXRhLnJlcG9zaXRvcnlfc2VsZWN0aW9uID0gcmVwb3NpdG9yeVNlbGVjdGlvbjtcbiAgfVxuXG4gIHJlc3BvbnNlLmRhdGEudG90YWxfY291bnQgPSB0b3RhbENvdW50O1xuICByZXR1cm4gcmVzcG9uc2U7XG59XG5cbmZ1bmN0aW9uIGl0ZXJhdG9yKG9jdG9raXQsIHJvdXRlLCBwYXJhbWV0ZXJzKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSB0eXBlb2Ygcm91dGUgPT09IFwiZnVuY3Rpb25cIiA/IHJvdXRlLmVuZHBvaW50KHBhcmFtZXRlcnMpIDogb2N0b2tpdC5yZXF1ZXN0LmVuZHBvaW50KHJvdXRlLCBwYXJhbWV0ZXJzKTtcbiAgY29uc3QgcmVxdWVzdE1ldGhvZCA9IHR5cGVvZiByb3V0ZSA9PT0gXCJmdW5jdGlvblwiID8gcm91dGUgOiBvY3Rva2l0LnJlcXVlc3Q7XG4gIGNvbnN0IG1ldGhvZCA9IG9wdGlvbnMubWV0aG9kO1xuICBjb25zdCBoZWFkZXJzID0gb3B0aW9ucy5oZWFkZXJzO1xuICBsZXQgdXJsID0gb3B0aW9ucy51cmw7XG4gIHJldHVybiB7XG4gICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTogKCkgPT4gKHtcbiAgICAgIGFzeW5jIG5leHQoKSB7XG4gICAgICAgIGlmICghdXJsKSByZXR1cm4ge1xuICAgICAgICAgIGRvbmU6IHRydWVcbiAgICAgICAgfTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdE1ldGhvZCh7XG4gICAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICBoZWFkZXJzXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFJlc3BvbnNlID0gbm9ybWFsaXplUGFnaW5hdGVkTGlzdFJlc3BvbnNlKHJlc3BvbnNlKTsgLy8gYHJlc3BvbnNlLmhlYWRlcnMubGlua2AgZm9ybWF0OlxuICAgICAgICAgIC8vICc8aHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS91c2Vycy9hc2VlbWsvZm9sbG93ZXJzP3BhZ2U9Mj47IHJlbD1cIm5leHRcIiwgPGh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vdXNlcnMvYXNlZW1rL2ZvbGxvd2Vycz9wYWdlPTI+OyByZWw9XCJsYXN0XCInXG4gICAgICAgICAgLy8gc2V0cyBgdXJsYCB0byB1bmRlZmluZWQgaWYgXCJuZXh0XCIgVVJMIGlzIG5vdCBwcmVzZW50IG9yIGBsaW5rYCBoZWFkZXIgaXMgbm90IHNldFxuXG4gICAgICAgICAgdXJsID0gKChub3JtYWxpemVkUmVzcG9uc2UuaGVhZGVycy5saW5rIHx8IFwiXCIpLm1hdGNoKC88KFtePl0rKT47XFxzKnJlbD1cIm5leHRcIi8pIHx8IFtdKVsxXTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IG5vcm1hbGl6ZWRSZXNwb25zZVxuICAgICAgICAgIH07XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgaWYgKGVycm9yLnN0YXR1cyAhPT0gNDA5KSB0aHJvdyBlcnJvcjtcbiAgICAgICAgICB1cmwgPSBcIlwiO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICBzdGF0dXM6IDIwMCxcbiAgICAgICAgICAgICAgaGVhZGVyczoge30sXG4gICAgICAgICAgICAgIGRhdGE6IFtdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgfSlcbiAgfTtcbn1cblxuZnVuY3Rpb24gcGFnaW5hdGUob2N0b2tpdCwgcm91dGUsIHBhcmFtZXRlcnMsIG1hcEZuKSB7XG4gIGlmICh0eXBlb2YgcGFyYW1ldGVycyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgbWFwRm4gPSBwYXJhbWV0ZXJzO1xuICAgIHBhcmFtZXRlcnMgPSB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gZ2F0aGVyKG9jdG9raXQsIFtdLCBpdGVyYXRvcihvY3Rva2l0LCByb3V0ZSwgcGFyYW1ldGVycylbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCksIG1hcEZuKTtcbn1cblxuZnVuY3Rpb24gZ2F0aGVyKG9jdG9raXQsIHJlc3VsdHMsIGl0ZXJhdG9yLCBtYXBGbikge1xuICByZXR1cm4gaXRlcmF0b3IubmV4dCgpLnRoZW4ocmVzdWx0ID0+IHtcbiAgICBpZiAocmVzdWx0LmRvbmUpIHtcbiAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cblxuICAgIGxldCBlYXJseUV4aXQgPSBmYWxzZTtcblxuICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICBlYXJseUV4aXQgPSB0cnVlO1xuICAgIH1cblxuICAgIHJlc3VsdHMgPSByZXN1bHRzLmNvbmNhdChtYXBGbiA/IG1hcEZuKHJlc3VsdC52YWx1ZSwgZG9uZSkgOiByZXN1bHQudmFsdWUuZGF0YSk7XG5cbiAgICBpZiAoZWFybHlFeGl0KSB7XG4gICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG5cbiAgICByZXR1cm4gZ2F0aGVyKG9jdG9raXQsIHJlc3VsdHMsIGl0ZXJhdG9yLCBtYXBGbik7XG4gIH0pO1xufVxuXG5jb25zdCBjb21wb3NlUGFnaW5hdGVSZXN0ID0gT2JqZWN0LmFzc2lnbihwYWdpbmF0ZSwge1xuICBpdGVyYXRvclxufSk7XG5cbmNvbnN0IHBhZ2luYXRpbmdFbmRwb2ludHMgPSBbXCJHRVQgL2FwcC9ob29rL2RlbGl2ZXJpZXNcIiwgXCJHRVQgL2FwcC9pbnN0YWxsYXRpb25zXCIsIFwiR0VUIC9hcHBsaWNhdGlvbnMvZ3JhbnRzXCIsIFwiR0VUIC9hdXRob3JpemF0aW9uc1wiLCBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2FjdGlvbnMvcGVybWlzc2lvbnMvb3JnYW5pemF0aW9uc1wiLCBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2FjdGlvbnMvcnVubmVyLWdyb3Vwc1wiLCBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2FjdGlvbnMvcnVubmVyLWdyb3Vwcy97cnVubmVyX2dyb3VwX2lkfS9vcmdhbml6YXRpb25zXCIsIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vYWN0aW9ucy9ydW5uZXItZ3JvdXBzL3tydW5uZXJfZ3JvdXBfaWR9L3J1bm5lcnNcIiwgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9hY3Rpb25zL3J1bm5lcnNcIiwgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9hdWRpdC1sb2dcIiwgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzXCIsIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vc2V0dGluZ3MvYmlsbGluZy9hZHZhbmNlZC1zZWN1cml0eVwiLCBcIkdFVCAvZXZlbnRzXCIsIFwiR0VUIC9naXN0c1wiLCBcIkdFVCAvZ2lzdHMvcHVibGljXCIsIFwiR0VUIC9naXN0cy9zdGFycmVkXCIsIFwiR0VUIC9naXN0cy97Z2lzdF9pZH0vY29tbWVudHNcIiwgXCJHRVQgL2dpc3RzL3tnaXN0X2lkfS9jb21taXRzXCIsIFwiR0VUIC9naXN0cy97Z2lzdF9pZH0vZm9ya3NcIiwgXCJHRVQgL2luc3RhbGxhdGlvbi9yZXBvc2l0b3JpZXNcIiwgXCJHRVQgL2lzc3Vlc1wiLCBcIkdFVCAvbGljZW5zZXNcIiwgXCJHRVQgL21hcmtldHBsYWNlX2xpc3RpbmcvcGxhbnNcIiwgXCJHRVQgL21hcmtldHBsYWNlX2xpc3RpbmcvcGxhbnMve3BsYW5faWR9L2FjY291bnRzXCIsIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3N0dWJiZWQvcGxhbnNcIiwgXCJHRVQgL21hcmtldHBsYWNlX2xpc3Rpbmcvc3R1YmJlZC9wbGFucy97cGxhbl9pZH0vYWNjb3VudHNcIiwgXCJHRVQgL25ldHdvcmtzL3tvd25lcn0ve3JlcG99L2V2ZW50c1wiLCBcIkdFVCAvbm90aWZpY2F0aW9uc1wiLCBcIkdFVCAvb3JnYW5pemF0aW9uc1wiLCBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2NhY2hlL3VzYWdlLWJ5LXJlcG9zaXRvcnlcIiwgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9yZXBvc2l0b3JpZXNcIiwgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXItZ3JvdXBzXCIsIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVyLWdyb3Vwcy97cnVubmVyX2dyb3VwX2lkfS9yZXBvc2l0b3JpZXNcIiwgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXItZ3JvdXBzL3tydW5uZXJfZ3JvdXBfaWR9L3J1bm5lcnNcIiwgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzXCIsIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0c1wiLCBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIiwgXCJHRVQgL29yZ3Mve29yZ30vYXVkaXQtbG9nXCIsIFwiR0VUIC9vcmdzL3tvcmd9L2Jsb2Nrc1wiLCBcIkdFVCAvb3Jncy97b3JnfS9jb2RlLXNjYW5uaW5nL2FsZXJ0c1wiLCBcIkdFVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzXCIsIFwiR0VUIC9vcmdzL3tvcmd9L2NyZWRlbnRpYWwtYXV0aG9yaXphdGlvbnNcIiwgXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzXCIsIFwiR0VUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiLCBcIkdFVCAvb3Jncy97b3JnfS9ldmVudHNcIiwgXCJHRVQgL29yZ3Mve29yZ30vZXh0ZXJuYWwtZ3JvdXBzXCIsIFwiR0VUIC9vcmdzL3tvcmd9L2ZhaWxlZF9pbnZpdGF0aW9uc1wiLCBcIkdFVCAvb3Jncy97b3JnfS9ob29rc1wiLCBcIkdFVCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllc1wiLCBcIkdFVCAvb3Jncy97b3JnfS9pbnN0YWxsYXRpb25zXCIsIFwiR0VUIC9vcmdzL3tvcmd9L2ludml0YXRpb25zXCIsIFwiR0VUIC9vcmdzL3tvcmd9L2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfS90ZWFtc1wiLCBcIkdFVCAvb3Jncy97b3JnfS9pc3N1ZXNcIiwgXCJHRVQgL29yZ3Mve29yZ30vbWVtYmVyc1wiLCBcIkdFVCAvb3Jncy97b3JnfS9taWdyYXRpb25zXCIsIFwiR0VUIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCIsIFwiR0VUIC9vcmdzL3tvcmd9L291dHNpZGVfY29sbGFib3JhdG9yc1wiLCBcIkdFVCAvb3Jncy97b3JnfS9wYWNrYWdlc1wiLCBcIkdFVCAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiLCBcIkdFVCAvb3Jncy97b3JnfS9wcm9qZWN0c1wiLCBcIkdFVCAvb3Jncy97b3JnfS9wdWJsaWNfbWVtYmVyc1wiLCBcIkdFVCAvb3Jncy97b3JnfS9yZXBvc1wiLCBcIkdFVCAvb3Jncy97b3JnfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzXCIsIFwiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL2JpbGxpbmcvYWR2YW5jZWQtc2VjdXJpdHlcIiwgXCJHRVQgL29yZ3Mve29yZ30vdGVhbS1zeW5jL2dyb3Vwc1wiLCBcIkdFVCAvb3Jncy97b3JnfS90ZWFtc1wiLCBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9uc1wiLCBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzXCIsIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfbnVtYmVyfS9yZWFjdGlvbnNcIiwgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9yZWFjdGlvbnNcIiwgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vaW52aXRhdGlvbnNcIiwgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vbWVtYmVyc1wiLCBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9wcm9qZWN0c1wiLCBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9yZXBvc1wiLCBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS90ZWFtc1wiLCBcIkdFVCAvcHJvamVjdHMvY29sdW1ucy97Y29sdW1uX2lkfS9jYXJkc1wiLCBcIkdFVCAvcHJvamVjdHMve3Byb2plY3RfaWR9L2NvbGxhYm9yYXRvcnNcIiwgXCJHRVQgL3Byb2plY3RzL3twcm9qZWN0X2lkfS9jb2x1bW5zXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2FydGlmYWN0c1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9jYWNoZXNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVyc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXJ0aWZhY3RzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXR0ZW1wdHMve2F0dGVtcHRfbnVtYmVyfS9qb2JzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vam9ic1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9zZWNyZXRzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93c1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3Mve3dvcmtmbG93X2lkfS9ydW5zXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hc3NpZ25lZXNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1ydW5zL3tjaGVja19ydW5faWR9L2Fubm90YXRpb25zXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1zdWl0ZXMve2NoZWNrX3N1aXRlX2lkfS9jaGVjay1ydW5zXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0c1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn0vaW5zdGFuY2VzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FuYWx5c2VzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL2RldmNvbnRhaW5lcnNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvc2VjcmV0c1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29sbGFib3JhdG9yc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve2NvbW1pdF9zaGF9L2NvbW1lbnRzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tjb21taXRfc2hhfS9wdWxsc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfS9jaGVjay1ydW5zXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L2NoZWNrLXN1aXRlc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfS9zdGF0dXNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vc3RhdHVzZXNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbnRyaWJ1dG9yc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9zZWNyZXRzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50c1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHMve2RlcGxveW1lbnRfaWR9L3N0YXR1c2VzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2V2ZW50c1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZm9ya3NcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9tYXRjaGluZy1yZWZzL3tyZWZ9XCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludml0YXRpb25zXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50c1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9ldmVudHNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9jb21tZW50c1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2V2ZW50c1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xhYmVsc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L3JlYWN0aW9uc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L3RpbWVsaW5lXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9rZXlzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sYWJlbHNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXMve21pbGVzdG9uZV9udW1iZXJ9L2xhYmVsc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbm90aWZpY2F0aW9uc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXMvYnVpbGRzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wcm9qZWN0c1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2NvbW1lbnRzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2NvbW1pdHNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vZmlsZXNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmVxdWVzdGVkX3Jldmlld2Vyc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH0vY29tbWVudHNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vYXNzZXRzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vcmVhY3Rpb25zXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9L2xvY2F0aW9uc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3RhcmdhemVyc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3Vic2NyaWJlcnNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RhZ3NcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RlYW1zXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90b3BpY3NcIiwgXCJHRVQgL3JlcG9zaXRvcmllc1wiLCBcIkdFVCAvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHNcIiwgXCJHRVQgL3NlYXJjaC9jb2RlXCIsIFwiR0VUIC9zZWFyY2gvY29tbWl0c1wiLCBcIkdFVCAvc2VhcmNoL2lzc3Vlc1wiLCBcIkdFVCAvc2VhcmNoL2xhYmVsc1wiLCBcIkdFVCAvc2VhcmNoL3JlcG9zaXRvcmllc1wiLCBcIkdFVCAvc2VhcmNoL3RvcGljc1wiLCBcIkdFVCAvc2VhcmNoL3VzZXJzXCIsIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vZGlzY3Vzc2lvbnNcIiwgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzXCIsIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9L3JlYWN0aW9uc1wiLCBcIkdFVCAvdGVhbXMve3RlYW1faWR9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vcmVhY3Rpb25zXCIsIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vaW52aXRhdGlvbnNcIiwgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9tZW1iZXJzXCIsIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vcHJvamVjdHNcIiwgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9yZXBvc1wiLCBcIkdFVCAvdGVhbXMve3RlYW1faWR9L3RlYW1zXCIsIFwiR0VUIC91c2VyL2Jsb2Nrc1wiLCBcIkdFVCAvdXNlci9jb2Rlc3BhY2VzXCIsIFwiR0VUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0c1wiLCBcIkdFVCAvdXNlci9lbWFpbHNcIiwgXCJHRVQgL3VzZXIvZm9sbG93ZXJzXCIsIFwiR0VUIC91c2VyL2ZvbGxvd2luZ1wiLCBcIkdFVCAvdXNlci9ncGdfa2V5c1wiLCBcIkdFVCAvdXNlci9pbnN0YWxsYXRpb25zXCIsIFwiR0VUIC91c2VyL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCIsIFwiR0VUIC91c2VyL2lzc3Vlc1wiLCBcIkdFVCAvdXNlci9rZXlzXCIsIFwiR0VUIC91c2VyL21hcmtldHBsYWNlX3B1cmNoYXNlc1wiLCBcIkdFVCAvdXNlci9tYXJrZXRwbGFjZV9wdXJjaGFzZXMvc3R1YmJlZFwiLCBcIkdFVCAvdXNlci9tZW1iZXJzaGlwcy9vcmdzXCIsIFwiR0VUIC91c2VyL21pZ3JhdGlvbnNcIiwgXCJHRVQgL3VzZXIvbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIiwgXCJHRVQgL3VzZXIvb3Jnc1wiLCBcIkdFVCAvdXNlci9wYWNrYWdlc1wiLCBcIkdFVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiLCBcIkdFVCAvdXNlci9wdWJsaWNfZW1haWxzXCIsIFwiR0VUIC91c2VyL3JlcG9zXCIsIFwiR0VUIC91c2VyL3JlcG9zaXRvcnlfaW52aXRhdGlvbnNcIiwgXCJHRVQgL3VzZXIvc3RhcnJlZFwiLCBcIkdFVCAvdXNlci9zdWJzY3JpcHRpb25zXCIsIFwiR0VUIC91c2VyL3RlYW1zXCIsIFwiR0VUIC91c2Vyc1wiLCBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ldmVudHNcIiwgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzL29yZ3Mve29yZ31cIiwgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzL3B1YmxpY1wiLCBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9mb2xsb3dlcnNcIiwgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZm9sbG93aW5nXCIsIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2dpc3RzXCIsIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2dwZ19rZXlzXCIsIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2tleXNcIiwgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vb3Jnc1wiLCBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlc1wiLCBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wcm9qZWN0c1wiLCBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9yZWNlaXZlZF9ldmVudHNcIiwgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcmVjZWl2ZWRfZXZlbnRzL3B1YmxpY1wiLCBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9yZXBvc1wiLCBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zdGFycmVkXCIsIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3N1YnNjcmlwdGlvbnNcIl07XG5cbmZ1bmN0aW9uIGlzUGFnaW5hdGluZ0VuZHBvaW50KGFyZykge1xuICBpZiAodHlwZW9mIGFyZyA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiBwYWdpbmF0aW5nRW5kcG9pbnRzLmluY2x1ZGVzKGFyZyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIG9jdG9raXQgT2N0b2tpdCBpbnN0YW5jZVxuICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBwYXNzZWQgdG8gT2N0b2tpdCBjb25zdHJ1Y3RvclxuICovXG5cbmZ1bmN0aW9uIHBhZ2luYXRlUmVzdChvY3Rva2l0KSB7XG4gIHJldHVybiB7XG4gICAgcGFnaW5hdGU6IE9iamVjdC5hc3NpZ24ocGFnaW5hdGUuYmluZChudWxsLCBvY3Rva2l0KSwge1xuICAgICAgaXRlcmF0b3I6IGl0ZXJhdG9yLmJpbmQobnVsbCwgb2N0b2tpdClcbiAgICB9KVxuICB9O1xufVxucGFnaW5hdGVSZXN0LlZFUlNJT04gPSBWRVJTSU9OO1xuXG5leHBvcnRzLmNvbXBvc2VQYWdpbmF0ZVJlc3QgPSBjb21wb3NlUGFnaW5hdGVSZXN0O1xuZXhwb3J0cy5pc1BhZ2luYXRpbmdFbmRwb2ludCA9IGlzUGFnaW5hdGluZ0VuZHBvaW50O1xuZXhwb3J0cy5wYWdpbmF0ZVJlc3QgPSBwYWdpbmF0ZVJlc3Q7XG5leHBvcnRzLnBhZ2luYXRpbmdFbmRwb2ludHMgPSBwYWdpbmF0aW5nRW5kcG9pbnRzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH0pO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0T2N0b2tpdE9wdGlvbnMgPSBleHBvcnRzLkdpdEh1YiA9IGV4cG9ydHMuZGVmYXVsdHMgPSBleHBvcnRzLmNvbnRleHQgPSB2b2lkIDA7XG5jb25zdCBDb250ZXh0ID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL2NvbnRleHRcIikpO1xuY29uc3QgVXRpbHMgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIi4vaW50ZXJuYWwvdXRpbHNcIikpO1xuLy8gb2N0b2tpdCArIHBsdWdpbnNcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCJAb2N0b2tpdC9jb3JlXCIpO1xuY29uc3QgcGx1Z2luX3Jlc3RfZW5kcG9pbnRfbWV0aG9kc18xID0gcmVxdWlyZShcIkBvY3Rva2l0L3BsdWdpbi1yZXN0LWVuZHBvaW50LW1ldGhvZHNcIik7XG5jb25zdCBwbHVnaW5fcGFnaW5hdGVfcmVzdF8xID0gcmVxdWlyZShcIkBvY3Rva2l0L3BsdWdpbi1wYWdpbmF0ZS1yZXN0XCIpO1xuZXhwb3J0cy5jb250ZXh0ID0gbmV3IENvbnRleHQuQ29udGV4dCgpO1xuY29uc3QgYmFzZVVybCA9IFV0aWxzLmdldEFwaUJhc2VVcmwoKTtcbmV4cG9ydHMuZGVmYXVsdHMgPSB7XG4gICAgYmFzZVVybCxcbiAgICByZXF1ZXN0OiB7XG4gICAgICAgIGFnZW50OiBVdGlscy5nZXRQcm94eUFnZW50KGJhc2VVcmwpXG4gICAgfVxufTtcbmV4cG9ydHMuR2l0SHViID0gY29yZV8xLk9jdG9raXQucGx1Z2luKHBsdWdpbl9yZXN0X2VuZHBvaW50X21ldGhvZHNfMS5yZXN0RW5kcG9pbnRNZXRob2RzLCBwbHVnaW5fcGFnaW5hdGVfcmVzdF8xLnBhZ2luYXRlUmVzdCkuZGVmYXVsdHMoZXhwb3J0cy5kZWZhdWx0cyk7XG4vKipcbiAqIENvbnZpZW5jZSBmdW5jdGlvbiB0byBjb3JyZWN0bHkgZm9ybWF0IE9jdG9raXQgT3B0aW9ucyB0byBwYXNzIGludG8gdGhlIGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSAgICAgdG9rZW4gICAgdGhlIHJlcG8gUEFUIG9yIEdJVEhVQl9UT0tFTlxuICogQHBhcmFtICAgICBvcHRpb25zICBvdGhlciBvcHRpb25zIHRvIHNldFxuICovXG5mdW5jdGlvbiBnZXRPY3Rva2l0T3B0aW9ucyh0b2tlbiwgb3B0aW9ucykge1xuICAgIGNvbnN0IG9wdHMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zIHx8IHt9KTsgLy8gU2hhbGxvdyBjbG9uZSAtIGRvbid0IG11dGF0ZSB0aGUgb2JqZWN0IHByb3ZpZGVkIGJ5IHRoZSBjYWxsZXJcbiAgICAvLyBBdXRoXG4gICAgY29uc3QgYXV0aCA9IFV0aWxzLmdldEF1dGhTdHJpbmcodG9rZW4sIG9wdHMpO1xuICAgIGlmIChhdXRoKSB7XG4gICAgICAgIG9wdHMuYXV0aCA9IGF1dGg7XG4gICAgfVxuICAgIHJldHVybiBvcHRzO1xufVxuZXhwb3J0cy5nZXRPY3Rva2l0T3B0aW9ucyA9IGdldE9jdG9raXRPcHRpb25zO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbHMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9KTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldE9jdG9raXQgPSBleHBvcnRzLmNvbnRleHQgPSB2b2lkIDA7XG5jb25zdCBDb250ZXh0ID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL2NvbnRleHRcIikpO1xuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoXCIuL3V0aWxzXCIpO1xuZXhwb3J0cy5jb250ZXh0ID0gbmV3IENvbnRleHQuQ29udGV4dCgpO1xuLyoqXG4gKiBSZXR1cm5zIGEgaHlkcmF0ZWQgb2N0b2tpdCByZWFkeSB0byB1c2UgZm9yIEdpdEh1YiBBY3Rpb25zXG4gKlxuICogQHBhcmFtICAgICB0b2tlbiAgICB0aGUgcmVwbyBQQVQgb3IgR0lUSFVCX1RPS0VOXG4gKiBAcGFyYW0gICAgIG9wdGlvbnMgIG90aGVyIG9wdGlvbnMgdG8gc2V0XG4gKi9cbmZ1bmN0aW9uIGdldE9jdG9raXQodG9rZW4sIG9wdGlvbnMsIC4uLmFkZGl0aW9uYWxQbHVnaW5zKSB7XG4gICAgY29uc3QgR2l0SHViV2l0aFBsdWdpbnMgPSB1dGlsc18xLkdpdEh1Yi5wbHVnaW4oLi4uYWRkaXRpb25hbFBsdWdpbnMpO1xuICAgIHJldHVybiBuZXcgR2l0SHViV2l0aFBsdWdpbnModXRpbHNfMS5nZXRPY3Rva2l0T3B0aW9ucyh0b2tlbiwgb3B0aW9ucykpO1xufVxuZXhwb3J0cy5nZXRPY3Rva2l0ID0gZ2V0T2N0b2tpdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdpdGh1Yi5qcy5tYXAiLAogICAgIm1vZHVsZS5leHBvcnRzID0gVHJhdmVyc2U7XG5mdW5jdGlvbiBUcmF2ZXJzZSAob2JqKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFRyYXZlcnNlKSkgcmV0dXJuIG5ldyBUcmF2ZXJzZShvYmopO1xuICAgIHRoaXMudmFsdWUgPSBvYmo7XG59XG5cblRyYXZlcnNlLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAocHMpIHtcbiAgICB2YXIgbm9kZSA9IHRoaXMudmFsdWU7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcy5sZW5ndGg7IGkgKyspIHtcbiAgICAgICAgdmFyIGtleSA9IHBzW2ldO1xuICAgICAgICBpZiAoIU9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5vZGUsIGtleSkpIHtcbiAgICAgICAgICAgIG5vZGUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBub2RlID0gbm9kZVtrZXldO1xuICAgIH1cbiAgICByZXR1cm4gbm9kZTtcbn07XG5cblRyYXZlcnNlLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAocHMsIHZhbHVlKSB7XG4gICAgdmFyIG5vZGUgPSB0aGlzLnZhbHVlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHMubGVuZ3RoIC0gMTsgaSArKykge1xuICAgICAgICB2YXIga2V5ID0gcHNbaV07XG4gICAgICAgIGlmICghT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobm9kZSwga2V5KSkgbm9kZVtrZXldID0ge307XG4gICAgICAgIG5vZGUgPSBub2RlW2tleV07XG4gICAgfVxuICAgIG5vZGVbcHNbaV1dID0gdmFsdWU7XG4gICAgcmV0dXJuIHZhbHVlO1xufTtcblxuVHJhdmVyc2UucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uIChjYikge1xuICAgIHJldHVybiB3YWxrKHRoaXMudmFsdWUsIGNiLCB0cnVlKTtcbn07XG5cblRyYXZlcnNlLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgdGhpcy52YWx1ZSA9IHdhbGsodGhpcy52YWx1ZSwgY2IsIGZhbHNlKTtcbiAgICByZXR1cm4gdGhpcy52YWx1ZTtcbn07XG5cblRyYXZlcnNlLnByb3RvdHlwZS5yZWR1Y2UgPSBmdW5jdGlvbiAoY2IsIGluaXQpIHtcbiAgICB2YXIgc2tpcCA9IGFyZ3VtZW50cy5sZW5ndGggPT09IDE7XG4gICAgdmFyIGFjYyA9IHNraXAgPyB0aGlzLnZhbHVlIDogaW5pdDtcbiAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzUm9vdCB8fCAhc2tpcCkge1xuICAgICAgICAgICAgYWNjID0gY2IuY2FsbCh0aGlzLCBhY2MsIHgpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGFjYztcbn07XG5cblRyYXZlcnNlLnByb3RvdHlwZS5kZWVwRXF1YWwgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgJ2RlZXBFcXVhbCByZXF1aXJlcyBleGFjdGx5IG9uZSBvYmplY3QgdG8gY29tcGFyZSBhZ2FpbnN0J1xuICAgICAgICApO1xuICAgIH1cbiAgICBcbiAgICB2YXIgZXF1YWwgPSB0cnVlO1xuICAgIHZhciBub2RlID0gb2JqO1xuICAgIFxuICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbiAoeSkge1xuICAgICAgICB2YXIgbm90RXF1YWwgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXF1YWwgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vdGhpcy5zdG9wKCk7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9KS5iaW5kKHRoaXMpO1xuICAgICAgICBcbiAgICAgICAgLy9pZiAobm9kZSA9PT0gdW5kZWZpbmVkIHx8IG5vZGUgPT09IG51bGwpIHJldHVybiBub3RFcXVhbCgpO1xuICAgICAgICBcbiAgICAgICAgaWYgKCF0aGlzLmlzUm9vdCkge1xuICAgICAgICAvKlxuICAgICAgICAgICAgaWYgKCFPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChub2RlLCB0aGlzLmtleSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbm90RXF1YWwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKi9cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygbm9kZSAhPT0gJ29iamVjdCcpIHJldHVybiBub3RFcXVhbCgpO1xuICAgICAgICAgICAgbm9kZSA9IG5vZGVbdGhpcy5rZXldO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICB2YXIgeCA9IG5vZGU7XG4gICAgICAgIFxuICAgICAgICB0aGlzLnBvc3QoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbm9kZSA9IHg7XG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgdmFyIHRvUyA9IGZ1bmN0aW9uIChvKSB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pO1xuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHRoaXMuY2lyY3VsYXIpIHtcbiAgICAgICAgICAgIGlmIChUcmF2ZXJzZShvYmopLmdldCh0aGlzLmNpcmN1bGFyLnBhdGgpICE9PSB4KSBub3RFcXVhbCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiB4ICE9PSB0eXBlb2YgeSkge1xuICAgICAgICAgICAgbm90RXF1YWwoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh4ID09PSBudWxsIHx8IHkgPT09IG51bGwgfHwgeCA9PT0gdW5kZWZpbmVkIHx8IHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKHggIT09IHkpIG5vdEVxdWFsKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoeC5fX3Byb3RvX18gIT09IHkuX19wcm90b19fKSB7XG4gICAgICAgICAgICBub3RFcXVhbCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHggPT09IHkpIHtcbiAgICAgICAgICAgIC8vIG5vcFxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiB4ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBpZiAoeCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICAgICAgICAgIC8vIGJvdGggcmVnZXhwcyBvbiBhY2NvdW50IG9mIHRoZSBfX3Byb3RvX18gY2hlY2tcbiAgICAgICAgICAgICAgICBpZiAoeC50b1N0cmluZygpICE9IHkudG9TdHJpbmcoKSkgbm90RXF1YWwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHggIT09IHkpIG5vdEVxdWFsKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHggPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBpZiAodG9TKHkpID09PSAnW29iamVjdCBBcmd1bWVudHNdJ1xuICAgICAgICAgICAgfHwgdG9TKHgpID09PSAnW29iamVjdCBBcmd1bWVudHNdJykge1xuICAgICAgICAgICAgICAgIGlmICh0b1MoeCkgIT09IHRvUyh5KSkge1xuICAgICAgICAgICAgICAgICAgICBub3RFcXVhbCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHggaW5zdGFuY2VvZiBEYXRlIHx8IHkgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCEoeCBpbnN0YW5jZW9mIERhdGUpIHx8ICEoeSBpbnN0YW5jZW9mIERhdGUpXG4gICAgICAgICAgICAgICAgfHwgeC5nZXRUaW1lKCkgIT09IHkuZ2V0VGltZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vdEVxdWFsKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIGt4ID0gT2JqZWN0LmtleXMoeCk7XG4gICAgICAgICAgICAgICAgdmFyIGt5ID0gT2JqZWN0LmtleXMoeSk7XG4gICAgICAgICAgICAgICAgaWYgKGt4Lmxlbmd0aCAhPT0ga3kubGVuZ3RoKSByZXR1cm4gbm90RXF1YWwoKTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGt4Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBrID0ga3hbaV07XG4gICAgICAgICAgICAgICAgICAgIGlmICghT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwoeSwgaykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdEVxdWFsKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBcbiAgICByZXR1cm4gZXF1YWw7XG59O1xuXG5UcmF2ZXJzZS5wcm90b3R5cGUucGF0aHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGFjYyA9IFtdO1xuICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbiAoeCkge1xuICAgICAgICBhY2MucHVzaCh0aGlzLnBhdGgpOyBcbiAgICB9KTtcbiAgICByZXR1cm4gYWNjO1xufTtcblxuVHJhdmVyc2UucHJvdG90eXBlLm5vZGVzID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBhY2MgPSBbXTtcbiAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgYWNjLnB1c2godGhpcy5ub2RlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gYWNjO1xufTtcblxuVHJhdmVyc2UucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwYXJlbnRzID0gW10sIG5vZGVzID0gW107XG4gICAgXG4gICAgcmV0dXJuIChmdW5jdGlvbiBjbG9uZSAoc3JjKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHBhcmVudHNbaV0gPT09IHNyYykge1xuICAgICAgICAgICAgICAgIHJldHVybiBub2Rlc1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiBzcmMgPT09ICdvYmplY3QnICYmIHNyYyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIGRzdCA9IGNvcHkoc3JjKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcGFyZW50cy5wdXNoKHNyYyk7XG4gICAgICAgICAgICBub2Rlcy5wdXNoKGRzdCk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHNyYykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgZHN0W2tleV0gPSBjbG9uZShzcmNba2V5XSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcGFyZW50cy5wb3AoKTtcbiAgICAgICAgICAgIG5vZGVzLnBvcCgpO1xuICAgICAgICAgICAgcmV0dXJuIGRzdDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBzcmM7XG4gICAgICAgIH1cbiAgICB9KSh0aGlzLnZhbHVlKTtcbn07XG5cbmZ1bmN0aW9uIHdhbGsgKHJvb3QsIGNiLCBpbW11dGFibGUpIHtcbiAgICB2YXIgcGF0aCA9IFtdO1xuICAgIHZhciBwYXJlbnRzID0gW107XG4gICAgdmFyIGFsaXZlID0gdHJ1ZTtcbiAgICBcbiAgICByZXR1cm4gKGZ1bmN0aW9uIHdhbGtlciAobm9kZV8pIHtcbiAgICAgICAgdmFyIG5vZGUgPSBpbW11dGFibGUgPyBjb3B5KG5vZGVfKSA6IG5vZGVfO1xuICAgICAgICB2YXIgbW9kaWZpZXJzID0ge307XG4gICAgICAgIFxuICAgICAgICB2YXIgc3RhdGUgPSB7XG4gICAgICAgICAgICBub2RlIDogbm9kZSxcbiAgICAgICAgICAgIG5vZGVfIDogbm9kZV8sXG4gICAgICAgICAgICBwYXRoIDogW10uY29uY2F0KHBhdGgpLFxuICAgICAgICAgICAgcGFyZW50IDogcGFyZW50cy5zbGljZSgtMSlbMF0sXG4gICAgICAgICAgICBrZXkgOiBwYXRoLnNsaWNlKC0xKVswXSxcbiAgICAgICAgICAgIGlzUm9vdCA6IHBhdGgubGVuZ3RoID09PSAwLFxuICAgICAgICAgICAgbGV2ZWwgOiBwYXRoLmxlbmd0aCxcbiAgICAgICAgICAgIGNpcmN1bGFyIDogbnVsbCxcbiAgICAgICAgICAgIHVwZGF0ZSA6IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFzdGF0ZS5pc1Jvb3QpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUucGFyZW50Lm5vZGVbc3RhdGUua2V5XSA9IHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHN0YXRlLm5vZGUgPSB4O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdkZWxldGUnIDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBzdGF0ZS5wYXJlbnQubm9kZVtzdGF0ZS5rZXldO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlbW92ZSA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzdGF0ZS5wYXJlbnQubm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUucGFyZW50Lm5vZGUuc3BsaWNlKHN0YXRlLmtleSwgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgc3RhdGUucGFyZW50Lm5vZGVbc3RhdGUua2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmVmb3JlIDogZnVuY3Rpb24gKGYpIHsgbW9kaWZpZXJzLmJlZm9yZSA9IGYgfSxcbiAgICAgICAgICAgIGFmdGVyIDogZnVuY3Rpb24gKGYpIHsgbW9kaWZpZXJzLmFmdGVyID0gZiB9LFxuICAgICAgICAgICAgcHJlIDogZnVuY3Rpb24gKGYpIHsgbW9kaWZpZXJzLnByZSA9IGYgfSxcbiAgICAgICAgICAgIHBvc3QgOiBmdW5jdGlvbiAoZikgeyBtb2RpZmllcnMucG9zdCA9IGYgfSxcbiAgICAgICAgICAgIHN0b3AgOiBmdW5jdGlvbiAoKSB7IGFsaXZlID0gZmFsc2UgfVxuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgaWYgKCFhbGl2ZSkgcmV0dXJuIHN0YXRlO1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiBub2RlID09PSAnb2JqZWN0JyAmJiBub2RlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzdGF0ZS5pc0xlYWYgPSBPYmplY3Qua2V5cyhub2RlKS5sZW5ndGggPT0gMDtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJlbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudHNbaV0ubm9kZV8gPT09IG5vZGVfKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmNpcmN1bGFyID0gcGFyZW50c1tpXTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc3RhdGUuaXNMZWFmID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgc3RhdGUubm90TGVhZiA9ICFzdGF0ZS5pc0xlYWY7XG4gICAgICAgIHN0YXRlLm5vdFJvb3QgPSAhc3RhdGUuaXNSb290O1xuICAgICAgICBcbiAgICAgICAgLy8gdXNlIHJldHVybiB2YWx1ZXMgdG8gdXBkYXRlIGlmIGRlZmluZWRcbiAgICAgICAgdmFyIHJldCA9IGNiLmNhbGwoc3RhdGUsIHN0YXRlLm5vZGUpO1xuICAgICAgICBpZiAocmV0ICE9PSB1bmRlZmluZWQgJiYgc3RhdGUudXBkYXRlKSBzdGF0ZS51cGRhdGUocmV0KTtcbiAgICAgICAgaWYgKG1vZGlmaWVycy5iZWZvcmUpIG1vZGlmaWVycy5iZWZvcmUuY2FsbChzdGF0ZSwgc3RhdGUubm9kZSk7XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHN0YXRlLm5vZGUgPT0gJ29iamVjdCdcbiAgICAgICAgJiYgc3RhdGUubm9kZSAhPT0gbnVsbCAmJiAhc3RhdGUuY2lyY3VsYXIpIHtcbiAgICAgICAgICAgIHBhcmVudHMucHVzaChzdGF0ZSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoc3RhdGUubm9kZSk7XG4gICAgICAgICAgICBrZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSwgaSkge1xuICAgICAgICAgICAgICAgIHBhdGgucHVzaChrZXkpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGlmIChtb2RpZmllcnMucHJlKSBtb2RpZmllcnMucHJlLmNhbGwoc3RhdGUsIHN0YXRlLm5vZGVba2V5XSwga2V5KTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSB3YWxrZXIoc3RhdGUubm9kZVtrZXldKTtcbiAgICAgICAgICAgICAgICBpZiAoaW1tdXRhYmxlICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHN0YXRlLm5vZGUsIGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUubm9kZVtrZXldID0gY2hpbGQubm9kZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgY2hpbGQuaXNMYXN0ID0gaSA9PSBrZXlzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgY2hpbGQuaXNGaXJzdCA9IGkgPT0gMDtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBpZiAobW9kaWZpZXJzLnBvc3QpIG1vZGlmaWVycy5wb3N0LmNhbGwoc3RhdGUsIGNoaWxkKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBwYXRoLnBvcCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwYXJlbnRzLnBvcCgpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBpZiAobW9kaWZpZXJzLmFmdGVyKSBtb2RpZmllcnMuYWZ0ZXIuY2FsbChzdGF0ZSwgc3RhdGUubm9kZSk7XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgfSkocm9vdCkubm9kZTtcbn1cblxuT2JqZWN0LmtleXMoVHJhdmVyc2UucHJvdG90eXBlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICBUcmF2ZXJzZVtrZXldID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICB2YXIgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgdmFyIHQgPSBUcmF2ZXJzZShvYmopO1xuICAgICAgICByZXR1cm4gdFtrZXldLmFwcGx5KHQsIGFyZ3MpO1xuICAgIH07XG59KTtcblxuZnVuY3Rpb24gY29weSAoc3JjKSB7XG4gICAgaWYgKHR5cGVvZiBzcmMgPT09ICdvYmplY3QnICYmIHNyYyAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgZHN0O1xuICAgICAgICBcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc3JjKSkge1xuICAgICAgICAgICAgZHN0ID0gW107XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc3JjIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgICAgZHN0ID0gbmV3IERhdGUoc3JjKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzcmMgaW5zdGFuY2VvZiBCb29sZWFuKSB7XG4gICAgICAgICAgICBkc3QgPSBuZXcgQm9vbGVhbihzcmMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNyYyBpbnN0YW5jZW9mIE51bWJlcikge1xuICAgICAgICAgICAgZHN0ID0gbmV3IE51bWJlcihzcmMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNyYyBpbnN0YW5jZW9mIFN0cmluZykge1xuICAgICAgICAgICAgZHN0ID0gbmV3IFN0cmluZyhzcmMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZHN0ID0gT2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2Yoc3JjKSk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIE9iamVjdC5rZXlzKHNyYykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBkc3Rba2V5XSA9IHNyY1trZXldO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGRzdDtcbiAgICB9XG4gICAgZWxzZSByZXR1cm4gc3JjO1xufVxuIiwKICAgICJ2YXIgVHJhdmVyc2UgPSByZXF1aXJlKCd0cmF2ZXJzZScpO1xudmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50cycpLkV2ZW50RW1pdHRlcjtcblxubW9kdWxlLmV4cG9ydHMgPSBDaGFpbnNhdztcbmZ1bmN0aW9uIENoYWluc2F3IChidWlsZGVyKSB7XG4gICAgdmFyIHNhdyA9IENoYWluc2F3LnNhdyhidWlsZGVyLCB7fSk7XG4gICAgdmFyIHIgPSBidWlsZGVyLmNhbGwoc2F3LmhhbmRsZXJzLCBzYXcpO1xuICAgIGlmIChyICE9PSB1bmRlZmluZWQpIHNhdy5oYW5kbGVycyA9IHI7XG4gICAgc2F3LnJlY29yZCgpO1xuICAgIHJldHVybiBzYXcuY2hhaW4oKTtcbn07XG5cbkNoYWluc2F3LmxpZ2h0ID0gZnVuY3Rpb24gQ2hhaW5zYXdMaWdodCAoYnVpbGRlcikge1xuICAgIHZhciBzYXcgPSBDaGFpbnNhdy5zYXcoYnVpbGRlciwge30pO1xuICAgIHZhciByID0gYnVpbGRlci5jYWxsKHNhdy5oYW5kbGVycywgc2F3KTtcbiAgICBpZiAociAhPT0gdW5kZWZpbmVkKSBzYXcuaGFuZGxlcnMgPSByO1xuICAgIHJldHVybiBzYXcuY2hhaW4oKTtcbn07XG5cbkNoYWluc2F3LnNhdyA9IGZ1bmN0aW9uIChidWlsZGVyLCBoYW5kbGVycykge1xuICAgIHZhciBzYXcgPSBuZXcgRXZlbnRFbWl0dGVyO1xuICAgIHNhdy5oYW5kbGVycyA9IGhhbmRsZXJzO1xuICAgIHNhdy5hY3Rpb25zID0gW107XG5cbiAgICBzYXcuY2hhaW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBjaCA9IFRyYXZlcnNlKHNhdy5oYW5kbGVycykubWFwKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1Jvb3QpIHJldHVybiBub2RlO1xuICAgICAgICAgICAgdmFyIHBzID0gdGhpcy5wYXRoO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIG5vZGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHNhdy5hY3Rpb25zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCA6IHBzLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA6IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHNhdy5lbWl0KCdiZWdpbicpO1xuICAgICAgICAgICAgc2F3Lm5leHQoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGNoO1xuICAgIH07XG5cbiAgICBzYXcucG9wID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gc2F3LmFjdGlvbnMuc2hpZnQoKTtcbiAgICB9O1xuXG4gICAgc2F3Lm5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhY3Rpb24gPSBzYXcucG9wKCk7XG5cbiAgICAgICAgaWYgKCFhY3Rpb24pIHtcbiAgICAgICAgICAgIHNhdy5lbWl0KCdlbmQnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghYWN0aW9uLnRyYXApIHtcbiAgICAgICAgICAgIHZhciBub2RlID0gc2F3LmhhbmRsZXJzO1xuICAgICAgICAgICAgYWN0aW9uLnBhdGguZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IG5vZGUgPSBub2RlW2tleV0gfSk7XG4gICAgICAgICAgICBub2RlLmFwcGx5KHNhdy5oYW5kbGVycywgYWN0aW9uLmFyZ3MpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHNhdy5uZXN0ID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICB2YXIgYXV0b25leHQgPSB0cnVlO1xuXG4gICAgICAgIGlmICh0eXBlb2YgY2IgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgdmFyIGF1dG9uZXh0ID0gY2I7XG4gICAgICAgICAgICBjYiA9IGFyZ3Muc2hpZnQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzID0gQ2hhaW5zYXcuc2F3KGJ1aWxkZXIsIHt9KTtcbiAgICAgICAgdmFyIHIgPSBidWlsZGVyLmNhbGwocy5oYW5kbGVycywgcyk7XG5cbiAgICAgICAgaWYgKHIgIT09IHVuZGVmaW5lZCkgcy5oYW5kbGVycyA9IHI7XG5cbiAgICAgICAgLy8gSWYgd2UgYXJlIHJlY29yZGluZy4uLlxuICAgICAgICBpZiAoXCJ1bmRlZmluZWRcIiAhPT0gdHlwZW9mIHNhdy5zdGVwKSB7XG4gICAgICAgICAgICAvLyAuLi4gb3VyIGNoaWxkcmVuIHNob3VsZCwgdG9vXG4gICAgICAgICAgICBzLnJlY29yZCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2IuYXBwbHkocy5jaGFpbigpLCBhcmdzKTtcbiAgICAgICAgaWYgKGF1dG9uZXh0ICE9PSBmYWxzZSkgcy5vbignZW5kJywgc2F3Lm5leHQpO1xuICAgIH07XG5cbiAgICBzYXcucmVjb3JkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB1cGdyYWRlQ2hhaW5zYXcoc2F3KTtcbiAgICB9O1xuXG4gICAgWyd0cmFwJywgJ2Rvd24nLCAnanVtcCddLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCkge1xuICAgICAgICBzYXdbbWV0aG9kXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRvIHVzZSB0aGUgdHJhcCwgZG93biBhbmQganVtcCBmZWF0dXJlcywgcGxlYXNlIFwiK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY2FsbCByZWNvcmQoKSBmaXJzdCB0byBzdGFydCByZWNvcmRpbmcgYWN0aW9ucy5cIik7XG4gICAgICAgIH07XG4gICAgfSk7XG5cbiAgICByZXR1cm4gc2F3O1xufTtcblxuZnVuY3Rpb24gdXBncmFkZUNoYWluc2F3KHNhdykge1xuICAgIHNhdy5zdGVwID0gMDtcblxuICAgIC8vIG92ZXJyaWRlIHBvcFxuICAgIHNhdy5wb3AgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBzYXcuYWN0aW9uc1tzYXcuc3RlcCsrXTtcbiAgICB9O1xuXG4gICAgc2F3LnRyYXAgPSBmdW5jdGlvbiAobmFtZSwgY2IpIHtcbiAgICAgICAgdmFyIHBzID0gQXJyYXkuaXNBcnJheShuYW1lKSA/IG5hbWUgOiBbbmFtZV07XG4gICAgICAgIHNhdy5hY3Rpb25zLnB1c2goe1xuICAgICAgICAgICAgcGF0aCA6IHBzLFxuICAgICAgICAgICAgc3RlcCA6IHNhdy5zdGVwLFxuICAgICAgICAgICAgY2IgOiBjYixcbiAgICAgICAgICAgIHRyYXAgOiB0cnVlXG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBzYXcuZG93biA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIHZhciBwcyA9IChBcnJheS5pc0FycmF5KG5hbWUpID8gbmFtZSA6IFtuYW1lXSkuam9pbignLycpO1xuICAgICAgICB2YXIgaSA9IHNhdy5hY3Rpb25zLnNsaWNlKHNhdy5zdGVwKS5tYXAoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIGlmICh4LnRyYXAgJiYgeC5zdGVwIDw9IHNhdy5zdGVwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm4geC5wYXRoLmpvaW4oJy8nKSA9PSBwcztcbiAgICAgICAgfSkuaW5kZXhPZih0cnVlKTtcblxuICAgICAgICBpZiAoaSA+PSAwKSBzYXcuc3RlcCArPSBpO1xuICAgICAgICBlbHNlIHNhdy5zdGVwID0gc2F3LmFjdGlvbnMubGVuZ3RoO1xuXG4gICAgICAgIHZhciBhY3QgPSBzYXcuYWN0aW9uc1tzYXcuc3RlcCAtIDFdO1xuICAgICAgICBpZiAoYWN0ICYmIGFjdC50cmFwKSB7XG4gICAgICAgICAgICAvLyBJdCdzIGEgdHJhcCFcbiAgICAgICAgICAgIHNhdy5zdGVwID0gYWN0LnN0ZXA7XG4gICAgICAgICAgICBhY3QuY2IoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHNhdy5uZXh0KCk7XG4gICAgfTtcblxuICAgIHNhdy5qdW1wID0gZnVuY3Rpb24gKHN0ZXApIHtcbiAgICAgICAgc2F3LnN0ZXAgPSBzdGVwO1xuICAgICAgICBzYXcubmV4dCgpO1xuICAgIH07XG59O1xuIiwKICAgICJtb2R1bGUuZXhwb3J0cyA9IEJ1ZmZlcnM7XG5cbmZ1bmN0aW9uIEJ1ZmZlcnMgKGJ1ZnMpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQnVmZmVycykpIHJldHVybiBuZXcgQnVmZmVycyhidWZzKTtcbiAgICB0aGlzLmJ1ZmZlcnMgPSBidWZzIHx8IFtdO1xuICAgIHRoaXMubGVuZ3RoID0gdGhpcy5idWZmZXJzLnJlZHVjZShmdW5jdGlvbiAoc2l6ZSwgYnVmKSB7XG4gICAgICAgIHJldHVybiBzaXplICsgYnVmLmxlbmd0aFxuICAgIH0sIDApO1xufVxuXG5CdWZmZXJzLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKGFyZ3VtZW50c1tpXSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RyaWVkIHRvIHB1c2ggYSBub24tYnVmZmVyJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGJ1ZiA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgdGhpcy5idWZmZXJzLnB1c2goYnVmKTtcbiAgICAgICAgdGhpcy5sZW5ndGggKz0gYnVmLmxlbmd0aDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubGVuZ3RoO1xufTtcblxuQnVmZmVycy5wcm90b3R5cGUudW5zaGlmdCA9IGZ1bmN0aW9uICgpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihhcmd1bWVudHNbaV0pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUcmllZCB0byB1bnNoaWZ0IGEgbm9uLWJ1ZmZlcicpO1xuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBidWYgPSBhcmd1bWVudHNbaV07XG4gICAgICAgIHRoaXMuYnVmZmVycy51bnNoaWZ0KGJ1Zik7XG4gICAgICAgIHRoaXMubGVuZ3RoICs9IGJ1Zi5sZW5ndGg7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmxlbmd0aDtcbn07XG5cbkJ1ZmZlcnMucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiAoZHN0LCBkU3RhcnQsIHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gdGhpcy5zbGljZShzdGFydCwgZW5kKS5jb3B5KGRzdCwgZFN0YXJ0LCAwLCBlbmQgLSBzdGFydCk7XG59O1xuXG5CdWZmZXJzLnByb3RvdHlwZS5zcGxpY2UgPSBmdW5jdGlvbiAoaSwgaG93TWFueSkge1xuICAgIHZhciBidWZmZXJzID0gdGhpcy5idWZmZXJzO1xuICAgIHZhciBpbmRleCA9IGkgPj0gMCA/IGkgOiB0aGlzLmxlbmd0aCAtIGk7XG4gICAgdmFyIHJlcHMgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMik7XG4gICAgXG4gICAgaWYgKGhvd01hbnkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBob3dNYW55ID0gdGhpcy5sZW5ndGggLSBpbmRleDtcbiAgICB9XG4gICAgZWxzZSBpZiAoaG93TWFueSA+IHRoaXMubGVuZ3RoIC0gaW5kZXgpIHtcbiAgICAgICAgaG93TWFueSA9IHRoaXMubGVuZ3RoIC0gaW5kZXg7XG4gICAgfVxuICAgIFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVwcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB0aGlzLmxlbmd0aCArPSByZXBzW2ldLmxlbmd0aDtcbiAgICB9XG4gICAgXG4gICAgdmFyIHJlbW92ZWQgPSBuZXcgQnVmZmVycygpO1xuICAgIHZhciBieXRlcyA9IDA7XG4gICAgXG4gICAgdmFyIHN0YXJ0Qnl0ZXMgPSAwO1xuICAgIGZvciAoXG4gICAgICAgIHZhciBpaSA9IDA7XG4gICAgICAgIGlpIDwgYnVmZmVycy5sZW5ndGggJiYgc3RhcnRCeXRlcyArIGJ1ZmZlcnNbaWldLmxlbmd0aCA8IGluZGV4O1xuICAgICAgICBpaSArK1xuICAgICkgeyBzdGFydEJ5dGVzICs9IGJ1ZmZlcnNbaWldLmxlbmd0aCB9XG4gICAgXG4gICAgaWYgKGluZGV4IC0gc3RhcnRCeXRlcyA+IDApIHtcbiAgICAgICAgdmFyIHN0YXJ0ID0gaW5kZXggLSBzdGFydEJ5dGVzO1xuICAgICAgICBcbiAgICAgICAgaWYgKHN0YXJ0ICsgaG93TWFueSA8IGJ1ZmZlcnNbaWldLmxlbmd0aCkge1xuICAgICAgICAgICAgcmVtb3ZlZC5wdXNoKGJ1ZmZlcnNbaWldLnNsaWNlKHN0YXJ0LCBzdGFydCArIGhvd01hbnkpKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIG9yaWcgPSBidWZmZXJzW2lpXTtcbiAgICAgICAgICAgIC8vdmFyIGJ1ZiA9IG5ldyBCdWZmZXIob3JpZy5sZW5ndGggLSBob3dNYW55KTtcbiAgICAgICAgICAgIHZhciBidWYwID0gbmV3IEJ1ZmZlcihzdGFydCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YXJ0OyBpKyspIHtcbiAgICAgICAgICAgICAgICBidWYwW2ldID0gb3JpZ1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIGJ1ZjEgPSBuZXcgQnVmZmVyKG9yaWcubGVuZ3RoIC0gc3RhcnQgLSBob3dNYW55KTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSBzdGFydCArIGhvd01hbnk7IGkgPCBvcmlnLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgYnVmMVsgaSAtIGhvd01hbnkgLSBzdGFydCBdID0gb3JpZ1tpXVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAocmVwcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlcHNfID0gcmVwcy5zbGljZSgpO1xuICAgICAgICAgICAgICAgIHJlcHNfLnVuc2hpZnQoYnVmMCk7XG4gICAgICAgICAgICAgICAgcmVwc18ucHVzaChidWYxKTtcbiAgICAgICAgICAgICAgICBidWZmZXJzLnNwbGljZS5hcHBseShidWZmZXJzLCBbIGlpLCAxIF0uY29uY2F0KHJlcHNfKSk7XG4gICAgICAgICAgICAgICAgaWkgKz0gcmVwc18ubGVuZ3RoO1xuICAgICAgICAgICAgICAgIHJlcHMgPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGJ1ZmZlcnMuc3BsaWNlKGlpLCAxLCBidWYwLCBidWYxKTtcbiAgICAgICAgICAgICAgICAvL2J1ZmZlcnNbaWldID0gYnVmO1xuICAgICAgICAgICAgICAgIGlpICs9IDI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZW1vdmVkLnB1c2goYnVmZmVyc1tpaV0uc2xpY2Uoc3RhcnQpKTtcbiAgICAgICAgICAgIGJ1ZmZlcnNbaWldID0gYnVmZmVyc1tpaV0uc2xpY2UoMCwgc3RhcnQpO1xuICAgICAgICAgICAgaWkgKys7XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgaWYgKHJlcHMubGVuZ3RoID4gMCkge1xuICAgICAgICBidWZmZXJzLnNwbGljZS5hcHBseShidWZmZXJzLCBbIGlpLCAwIF0uY29uY2F0KHJlcHMpKTtcbiAgICAgICAgaWkgKz0gcmVwcy5sZW5ndGg7XG4gICAgfVxuICAgIFxuICAgIHdoaWxlIChyZW1vdmVkLmxlbmd0aCA8IGhvd01hbnkpIHtcbiAgICAgICAgdmFyIGJ1ZiA9IGJ1ZmZlcnNbaWldO1xuICAgICAgICB2YXIgbGVuID0gYnVmLmxlbmd0aDtcbiAgICAgICAgdmFyIHRha2UgPSBNYXRoLm1pbihsZW4sIGhvd01hbnkgLSByZW1vdmVkLmxlbmd0aCk7XG4gICAgICAgIFxuICAgICAgICBpZiAodGFrZSA9PT0gbGVuKSB7XG4gICAgICAgICAgICByZW1vdmVkLnB1c2goYnVmKTtcbiAgICAgICAgICAgIGJ1ZmZlcnMuc3BsaWNlKGlpLCAxKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlbW92ZWQucHVzaChidWYuc2xpY2UoMCwgdGFrZSkpO1xuICAgICAgICAgICAgYnVmZmVyc1tpaV0gPSBidWZmZXJzW2lpXS5zbGljZSh0YWtlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBcbiAgICB0aGlzLmxlbmd0aCAtPSByZW1vdmVkLmxlbmd0aDtcbiAgICBcbiAgICByZXR1cm4gcmVtb3ZlZDtcbn07XG4gXG5CdWZmZXJzLnByb3RvdHlwZS5zbGljZSA9IGZ1bmN0aW9uIChpLCBqKSB7XG4gICAgdmFyIGJ1ZmZlcnMgPSB0aGlzLmJ1ZmZlcnM7XG4gICAgaWYgKGogPT09IHVuZGVmaW5lZCkgaiA9IHRoaXMubGVuZ3RoO1xuICAgIGlmIChpID09PSB1bmRlZmluZWQpIGkgPSAwO1xuICAgIFxuICAgIGlmIChqID4gdGhpcy5sZW5ndGgpIGogPSB0aGlzLmxlbmd0aDtcbiAgICBcbiAgICB2YXIgc3RhcnRCeXRlcyA9IDA7XG4gICAgZm9yIChcbiAgICAgICAgdmFyIHNpID0gMDtcbiAgICAgICAgc2kgPCBidWZmZXJzLmxlbmd0aCAmJiBzdGFydEJ5dGVzICsgYnVmZmVyc1tzaV0ubGVuZ3RoIDw9IGk7XG4gICAgICAgIHNpICsrXG4gICAgKSB7IHN0YXJ0Qnl0ZXMgKz0gYnVmZmVyc1tzaV0ubGVuZ3RoIH1cbiAgICBcbiAgICB2YXIgdGFyZ2V0ID0gbmV3IEJ1ZmZlcihqIC0gaSk7XG4gICAgXG4gICAgdmFyIHRpID0gMDtcbiAgICBmb3IgKHZhciBpaSA9IHNpOyB0aSA8IGogLSBpICYmIGlpIDwgYnVmZmVycy5sZW5ndGg7IGlpKyspIHtcbiAgICAgICAgdmFyIGxlbiA9IGJ1ZmZlcnNbaWldLmxlbmd0aDtcbiAgICAgICAgXG4gICAgICAgIHZhciBzdGFydCA9IHRpID09PSAwID8gaSAtIHN0YXJ0Qnl0ZXMgOiAwO1xuICAgICAgICB2YXIgZW5kID0gdGkgKyBsZW4gPj0gaiAtIGlcbiAgICAgICAgICAgID8gTWF0aC5taW4oc3RhcnQgKyAoaiAtIGkpIC0gdGksIGxlbilcbiAgICAgICAgICAgIDogbGVuXG4gICAgICAgIDtcbiAgICAgICAgXG4gICAgICAgIGJ1ZmZlcnNbaWldLmNvcHkodGFyZ2V0LCB0aSwgc3RhcnQsIGVuZCk7XG4gICAgICAgIHRpICs9IGVuZCAtIHN0YXJ0O1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gdGFyZ2V0O1xufTtcblxuQnVmZmVycy5wcm90b3R5cGUucG9zID0gZnVuY3Rpb24gKGkpIHtcbiAgICBpZiAoaSA8IDAgfHwgaSA+PSB0aGlzLmxlbmd0aCkgdGhyb3cgbmV3IEVycm9yKCdvb2InKTtcbiAgICB2YXIgbCA9IGksIGJpID0gMCwgYnUgPSBudWxsO1xuICAgIGZvciAoOzspIHtcbiAgICAgICAgYnUgPSB0aGlzLmJ1ZmZlcnNbYmldO1xuICAgICAgICBpZiAobCA8IGJ1Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHtidWY6IGJpLCBvZmZzZXQ6IGx9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbCAtPSBidS5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgYmkrKztcbiAgICB9XG59O1xuXG5CdWZmZXJzLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiBnZXQgKGkpIHtcbiAgICB2YXIgcG9zID0gdGhpcy5wb3MoaSk7XG5cbiAgICByZXR1cm4gdGhpcy5idWZmZXJzW3Bvcy5idWZdLmdldChwb3Mub2Zmc2V0KTtcbn07XG5cbkJ1ZmZlcnMucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIHNldCAoaSwgYikge1xuICAgIHZhciBwb3MgPSB0aGlzLnBvcyhpKTtcblxuICAgIHJldHVybiB0aGlzLmJ1ZmZlcnNbcG9zLmJ1Zl0uc2V0KHBvcy5vZmZzZXQsIGIpO1xufTtcblxuQnVmZmVycy5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uIChuZWVkbGUsIG9mZnNldCkge1xuICAgIGlmIChcInN0cmluZ1wiID09PSB0eXBlb2YgbmVlZGxlKSB7XG4gICAgICAgIG5lZWRsZSA9IG5ldyBCdWZmZXIobmVlZGxlKTtcbiAgICB9IGVsc2UgaWYgKG5lZWRsZSBpbnN0YW5jZW9mIEJ1ZmZlcikge1xuICAgICAgICAvLyBhbHJlYWR5IGEgYnVmZmVyXG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHR5cGUgZm9yIGEgc2VhcmNoIHN0cmluZycpO1xuICAgIH1cblxuICAgIGlmICghbmVlZGxlLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICB2YXIgaSA9IDAsIGogPSAwLCBtYXRjaCA9IDAsIG1zdGFydCwgcG9zID0gMDtcblxuICAgIC8vIHN0YXJ0IHNlYXJjaCBmcm9tIGEgcGFydGljdWxhciBwb2ludCBpbiB0aGUgdmlydHVhbCBidWZmZXJcbiAgICBpZiAob2Zmc2V0KSB7XG4gICAgICAgIHZhciBwID0gdGhpcy5wb3Mob2Zmc2V0KTtcbiAgICAgICAgaSA9IHAuYnVmO1xuICAgICAgICBqID0gcC5vZmZzZXQ7XG4gICAgICAgIHBvcyA9IG9mZnNldDtcbiAgICB9XG5cbiAgICAvLyBmb3IgZWFjaCBjaGFyYWN0ZXIgaW4gdmlydHVhbCBidWZmZXJcbiAgICBmb3IgKDs7KSB7XG4gICAgICAgIHdoaWxlIChqID49IHRoaXMuYnVmZmVyc1tpXS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGogPSAwO1xuICAgICAgICAgICAgaSsrO1xuXG4gICAgICAgICAgICBpZiAoaSA+PSB0aGlzLmJ1ZmZlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgLy8gc2VhcmNoIHN0cmluZyBub3QgZm91bmRcbiAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY2hhciA9IHRoaXMuYnVmZmVyc1tpXVtqXTtcblxuICAgICAgICBpZiAoY2hhciA9PSBuZWVkbGVbbWF0Y2hdKSB7XG4gICAgICAgICAgICAvLyBrZWVwIHRyYWNrIHdoZXJlIG1hdGNoIHN0YXJ0ZWRcbiAgICAgICAgICAgIGlmIChtYXRjaCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgbXN0YXJ0ID0ge1xuICAgICAgICAgICAgICAgICAgICBpOiBpLFxuICAgICAgICAgICAgICAgICAgICBqOiBqLFxuICAgICAgICAgICAgICAgICAgICBwb3M6IHBvc1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBtYXRjaCsrO1xuICAgICAgICAgICAgaWYgKG1hdGNoID09IG5lZWRsZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAvLyBmdWxsIG1hdGNoXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1zdGFydC5wb3M7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAobWF0Y2ggIT0gMCkge1xuICAgICAgICAgICAgLy8gYSBwYXJ0aWFsIG1hdGNoIGVuZGVkLCBnbyBiYWNrIHRvIG1hdGNoIHN0YXJ0aW5nIHBvc2l0aW9uXG4gICAgICAgICAgICAvLyB0aGlzIHdpbGwgY29udGludWUgdGhlIHNlYXJjaCBhdCB0aGUgbmV4dCBjaGFyYWN0ZXJcbiAgICAgICAgICAgIGkgPSBtc3RhcnQuaTtcbiAgICAgICAgICAgIGogPSBtc3RhcnQuajtcbiAgICAgICAgICAgIHBvcyA9IG1zdGFydC5wb3M7XG4gICAgICAgICAgICBtYXRjaCA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBqKys7XG4gICAgICAgIHBvcysrO1xuICAgIH1cbn07XG5cbkJ1ZmZlcnMucHJvdG90eXBlLnRvQnVmZmVyID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuc2xpY2UoKTtcbn1cblxuQnVmZmVycy5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbihlbmNvZGluZywgc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiB0aGlzLnNsaWNlKHN0YXJ0LCBlbmQpLnRvU3RyaW5nKGVuY29kaW5nKTtcbn1cbiIsCiAgICAibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc3RvcmUpIHtcbiAgICBmdW5jdGlvbiBnZXRzZXQgKG5hbWUsIHZhbHVlKSB7XG4gICAgICAgIHZhciBub2RlID0gdmFycy5zdG9yZTtcbiAgICAgICAgdmFyIGtleXMgPSBuYW1lLnNwbGl0KCcuJyk7XG4gICAgICAgIGtleXMuc2xpY2UoMCwtMSkuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgICAgICAgICAgaWYgKG5vZGVba10gPT09IHVuZGVmaW5lZCkgbm9kZVtrXSA9IHt9O1xuICAgICAgICAgICAgbm9kZSA9IG5vZGVba11cbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzW2tleXMubGVuZ3RoIC0gMV07XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBub2RlW2tleV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbm9kZVtrZXldID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgdmFyIHZhcnMgPSB7XG4gICAgICAgIGdldCA6IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0c2V0KG5hbWUpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQgOiBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRzZXQobmFtZSwgdmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBzdG9yZSA6IHN0b3JlIHx8IHt9LFxuICAgIH07XG4gICAgcmV0dXJuIHZhcnM7XG59O1xuIiwKICAgICJ2YXIgQ2hhaW5zYXcgPSByZXF1aXJlKCdjaGFpbnNhdycpO1xudmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50cycpLkV2ZW50RW1pdHRlcjtcbnZhciBCdWZmZXJzID0gcmVxdWlyZSgnYnVmZmVycycpO1xudmFyIFZhcnMgPSByZXF1aXJlKCcuL2xpYi92YXJzLmpzJyk7XG52YXIgU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJykuU3RyZWFtO1xuXG5leHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYnVmT3JFbSwgZXZlbnROYW1lKSB7XG4gICAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihidWZPckVtKSkge1xuICAgICAgICByZXR1cm4gZXhwb3J0cy5wYXJzZShidWZPckVtKTtcbiAgICB9XG4gICAgXG4gICAgdmFyIHMgPSBleHBvcnRzLnN0cmVhbSgpO1xuICAgIGlmIChidWZPckVtICYmIGJ1Zk9yRW0ucGlwZSkge1xuICAgICAgICBidWZPckVtLnBpcGUocyk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGJ1Zk9yRW0pIHtcbiAgICAgICAgYnVmT3JFbS5vbihldmVudE5hbWUgfHwgJ2RhdGEnLCBmdW5jdGlvbiAoYnVmKSB7XG4gICAgICAgICAgICBzLndyaXRlKGJ1Zik7XG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgYnVmT3JFbS5vbignZW5kJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcy5lbmQoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBzO1xufTtcblxuZXhwb3J0cy5zdHJlYW0gPSBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICBpZiAoaW5wdXQpIHJldHVybiBleHBvcnRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgXG4gICAgdmFyIHBlbmRpbmcgPSBudWxsO1xuICAgIGZ1bmN0aW9uIGdldEJ5dGVzIChieXRlcywgY2IsIHNraXApIHtcbiAgICAgICAgcGVuZGluZyA9IHtcbiAgICAgICAgICAgIGJ5dGVzIDogYnl0ZXMsXG4gICAgICAgICAgICBza2lwIDogc2tpcCxcbiAgICAgICAgICAgIGNiIDogZnVuY3Rpb24gKGJ1Zikge1xuICAgICAgICAgICAgICAgIHBlbmRpbmcgPSBudWxsO1xuICAgICAgICAgICAgICAgIGNiKGJ1Zik7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBkaXNwYXRjaCgpO1xuICAgIH1cbiAgICBcbiAgICB2YXIgb2Zmc2V0ID0gbnVsbDtcbiAgICBmdW5jdGlvbiBkaXNwYXRjaCAoKSB7XG4gICAgICAgIGlmICghcGVuZGluZykge1xuICAgICAgICAgICAgaWYgKGNhdWdodEVuZCkgZG9uZSA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBwZW5kaW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBwZW5kaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgYnl0ZXMgPSBvZmZzZXQgKyBwZW5kaW5nLmJ5dGVzO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAoYnVmZmVycy5sZW5ndGggPj0gYnl0ZXMpIHtcbiAgICAgICAgICAgICAgICB2YXIgYnVmO1xuICAgICAgICAgICAgICAgIGlmIChvZmZzZXQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBidWYgPSBidWZmZXJzLnNwbGljZSgwLCBieXRlcyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcGVuZGluZy5za2lwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBidWYgPSBidWYuc2xpY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwZW5kaW5nLnNraXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiA9IGJ1ZmZlcnMuc2xpY2Uob2Zmc2V0LCBieXRlcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gYnl0ZXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGlmIChwZW5kaW5nLnNraXApIHtcbiAgICAgICAgICAgICAgICAgICAgcGVuZGluZy5jYigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcGVuZGluZy5jYihidWYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBmdW5jdGlvbiBidWlsZGVyIChzYXcpIHtcbiAgICAgICAgZnVuY3Rpb24gbmV4dCAoKSB7IGlmICghZG9uZSkgc2F3Lm5leHQoKSB9XG4gICAgICAgIFxuICAgICAgICB2YXIgc2VsZiA9IHdvcmRzKGZ1bmN0aW9uIChieXRlcywgY2IpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICAgICAgICAgIGdldEJ5dGVzKGJ5dGVzLCBmdW5jdGlvbiAoYnVmKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhcnMuc2V0KG5hbWUsIGNiKGJ1ZikpO1xuICAgICAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIHNlbGYudGFwID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgICAgICAgICBzYXcubmVzdChjYiwgdmFycy5zdG9yZSk7XG4gICAgICAgIH07XG4gICAgICAgIFxuICAgICAgICBzZWxmLmludG8gPSBmdW5jdGlvbiAoa2V5LCBjYikge1xuICAgICAgICAgICAgaWYgKCF2YXJzLmdldChrZXkpKSB2YXJzLnNldChrZXksIHt9KTtcbiAgICAgICAgICAgIHZhciBwYXJlbnQgPSB2YXJzO1xuICAgICAgICAgICAgdmFycyA9IFZhcnMocGFyZW50LmdldChrZXkpKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgc2F3Lm5lc3QoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgdGhpcy50YXAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXJzID0gcGFyZW50O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgdmFycy5zdG9yZSk7XG4gICAgICAgIH07XG4gICAgICAgIFxuICAgICAgICBzZWxmLmZsdXNoID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFycy5zdG9yZSA9IHt9O1xuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgc2VsZi5sb29wID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgICAgICAgICB2YXIgZW5kID0gZmFsc2U7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHNhdy5uZXN0KGZhbHNlLCBmdW5jdGlvbiBsb29wICgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhcnMgPSB2YXJzLnN0b3JlO1xuICAgICAgICAgICAgICAgIGNiLmNhbGwodGhpcywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBlbmQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgICAgfSwgdmFycy5zdG9yZSk7XG4gICAgICAgICAgICAgICAgdGhpcy50YXAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZW5kKSBzYXcubmV4dCgpXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgbG9vcC5jYWxsKHRoaXMpXG4gICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgIH0sIHZhcnMuc3RvcmUpO1xuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgc2VsZi5idWZmZXIgPSBmdW5jdGlvbiAobmFtZSwgYnl0ZXMpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgYnl0ZXMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgYnl0ZXMgPSB2YXJzLmdldChieXRlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGdldEJ5dGVzKGJ5dGVzLCBmdW5jdGlvbiAoYnVmKSB7XG4gICAgICAgICAgICAgICAgdmFycy5zZXQobmFtZSwgYnVmKTtcbiAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgXG4gICAgICAgIHNlbGYuc2tpcCA9IGZ1bmN0aW9uIChieXRlcykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBieXRlcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBieXRlcyA9IHZhcnMuZ2V0KGJ5dGVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgZ2V0Qnl0ZXMoYnl0ZXMsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgXG4gICAgICAgIHNlbGYuc2NhbiA9IGZ1bmN0aW9uIGZpbmQgKG5hbWUsIHNlYXJjaCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBzZWFyY2ggPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgc2VhcmNoID0gbmV3IEJ1ZmZlcihzZWFyY2gpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihzZWFyY2gpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzZWFyY2ggbXVzdCBiZSBhIEJ1ZmZlciBvciBhIHN0cmluZycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgdGFrZW4gPSAwO1xuICAgICAgICAgICAgcGVuZGluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgcG9zID0gYnVmZmVycy5pbmRleE9mKHNlYXJjaCwgb2Zmc2V0ICsgdGFrZW4pO1xuICAgICAgICAgICAgICAgIHZhciBpID0gcG9zLW9mZnNldC10YWtlbjtcbiAgICAgICAgICAgICAgICBpZiAocG9zICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBwZW5kaW5nID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9mZnNldCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJzLnNldChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcnMuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyB0YWtlbiArIGkpXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IHRha2VuICsgaSArIHNlYXJjaC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJzLnNldChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcnMuc2xpY2UoMCwgdGFrZW4gKyBpKVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcnMuc3BsaWNlKDAsIHRha2VuICsgaSArIHNlYXJjaC5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2goKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpID0gTWF0aC5tYXgoYnVmZmVycy5sZW5ndGggLSBzZWFyY2gubGVuZ3RoIC0gb2Zmc2V0IC0gdGFrZW4sIDApO1xuXHRcdFx0XHR9XG4gICAgICAgICAgICAgICAgdGFrZW4gKz0gaTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBkaXNwYXRjaCgpO1xuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgc2VsZi5wZWVrID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgICAgICAgICBvZmZzZXQgPSAwO1xuICAgICAgICAgICAgc2F3Lm5lc3QoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGNiLmNhbGwodGhpcywgdmFycy5zdG9yZSk7XG4gICAgICAgICAgICAgICAgdGhpcy50YXAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBudWxsO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIFxuICAgIHZhciBzdHJlYW0gPSBDaGFpbnNhdy5saWdodChidWlsZGVyKTtcbiAgICBzdHJlYW0ud3JpdGFibGUgPSB0cnVlO1xuICAgIFxuICAgIHZhciBidWZmZXJzID0gQnVmZmVycygpO1xuICAgIFxuICAgIHN0cmVhbS53cml0ZSA9IGZ1bmN0aW9uIChidWYpIHtcbiAgICAgICAgYnVmZmVycy5wdXNoKGJ1Zik7XG4gICAgICAgIGRpc3BhdGNoKCk7XG4gICAgfTtcbiAgICBcbiAgICB2YXIgdmFycyA9IFZhcnMoKTtcbiAgICBcbiAgICB2YXIgZG9uZSA9IGZhbHNlLCBjYXVnaHRFbmQgPSBmYWxzZTtcbiAgICBzdHJlYW0uZW5kID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBjYXVnaHRFbmQgPSB0cnVlO1xuICAgIH07XG4gICAgXG4gICAgc3RyZWFtLnBpcGUgPSBTdHJlYW0ucHJvdG90eXBlLnBpcGU7XG4gICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSkuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICBzdHJlYW1bbmFtZV0gPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlW25hbWVdO1xuICAgIH0pO1xuICAgIFxuICAgIHJldHVybiBzdHJlYW07XG59O1xuXG5leHBvcnRzLnBhcnNlID0gZnVuY3Rpb24gcGFyc2UgKGJ1ZmZlcikge1xuICAgIHZhciBzZWxmID0gd29yZHMoZnVuY3Rpb24gKGJ5dGVzLCBjYikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgICAgIGlmIChvZmZzZXQgKyBieXRlcyA8PSBidWZmZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGJ1ZiA9IGJ1ZmZlci5zbGljZShvZmZzZXQsIG9mZnNldCArIGJ5dGVzKTtcbiAgICAgICAgICAgICAgICBvZmZzZXQgKz0gYnl0ZXM7XG4gICAgICAgICAgICAgICAgdmFycy5zZXQobmFtZSwgY2IoYnVmKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXJzLnNldChuYW1lLCBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzZWxmO1xuICAgICAgICB9O1xuICAgIH0pO1xuICAgIFxuICAgIHZhciBvZmZzZXQgPSAwO1xuICAgIHZhciB2YXJzID0gVmFycygpO1xuICAgIHNlbGYudmFycyA9IHZhcnMuc3RvcmU7XG4gICAgXG4gICAgc2VsZi50YXAgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICAgICAgY2IuY2FsbChzZWxmLCB2YXJzLnN0b3JlKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBcbiAgICBzZWxmLmludG8gPSBmdW5jdGlvbiAoa2V5LCBjYikge1xuICAgICAgICBpZiAoIXZhcnMuZ2V0KGtleSkpIHtcbiAgICAgICAgICAgIHZhcnMuc2V0KGtleSwge30pO1xuICAgICAgICB9XG4gICAgICAgIHZhciBwYXJlbnQgPSB2YXJzO1xuICAgICAgICB2YXJzID0gVmFycyhwYXJlbnQuZ2V0KGtleSkpO1xuICAgICAgICBjYi5jYWxsKHNlbGYsIHZhcnMuc3RvcmUpO1xuICAgICAgICB2YXJzID0gcGFyZW50O1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIFxuICAgIHNlbGYubG9vcCA9IGZ1bmN0aW9uIChjYikge1xuICAgICAgICB2YXIgZW5kID0gZmFsc2U7XG4gICAgICAgIHZhciBlbmRlciA9IGZ1bmN0aW9uICgpIHsgZW5kID0gdHJ1ZSB9O1xuICAgICAgICB3aGlsZSAoZW5kID09PSBmYWxzZSkge1xuICAgICAgICAgICAgY2IuY2FsbChzZWxmLCBlbmRlciwgdmFycy5zdG9yZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBcbiAgICBzZWxmLmJ1ZmZlciA9IGZ1bmN0aW9uIChuYW1lLCBzaXplKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2l6ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHNpemUgPSB2YXJzLmdldChzaXplKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgYnVmID0gYnVmZmVyLnNsaWNlKG9mZnNldCwgTWF0aC5taW4oYnVmZmVyLmxlbmd0aCwgb2Zmc2V0ICsgc2l6ZSkpO1xuICAgICAgICBvZmZzZXQgKz0gc2l6ZTtcbiAgICAgICAgdmFycy5zZXQobmFtZSwgYnVmKTtcbiAgICAgICAgXG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgXG4gICAgc2VsZi5za2lwID0gZnVuY3Rpb24gKGJ5dGVzKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYnl0ZXMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBieXRlcyA9IHZhcnMuZ2V0KGJ5dGVzKTtcbiAgICAgICAgfVxuICAgICAgICBvZmZzZXQgKz0gYnl0ZXM7XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIFxuICAgIHNlbGYuc2NhbiA9IGZ1bmN0aW9uIChuYW1lLCBzZWFyY2gpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZWFyY2ggPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBzZWFyY2ggPSBuZXcgQnVmZmVyKHNlYXJjaCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihzZWFyY2gpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NlYXJjaCBtdXN0IGJlIGEgQnVmZmVyIG9yIGEgc3RyaW5nJyk7XG4gICAgICAgIH1cbiAgICAgICAgdmFycy5zZXQobmFtZSwgbnVsbCk7XG4gICAgICAgIFxuICAgICAgICAvLyBzaW1wbGUgYnV0IHNsb3cgc3RyaW5nIHNlYXJjaFxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSArIG9mZnNldCA8PSBidWZmZXIubGVuZ3RoIC0gc2VhcmNoLmxlbmd0aCArIDE7IGkrKykge1xuICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgICB2YXIgaiA9IDA7XG4gICAgICAgICAgICAgICAgaiA8IHNlYXJjaC5sZW5ndGggJiYgYnVmZmVyW29mZnNldCtpK2pdID09PSBzZWFyY2hbal07XG4gICAgICAgICAgICAgICAgaisrXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGogPT09IHNlYXJjaC5sZW5ndGgpIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICB2YXJzLnNldChuYW1lLCBidWZmZXIuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBpKSk7XG4gICAgICAgIG9mZnNldCArPSBpICsgc2VhcmNoLmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBcbiAgICBzZWxmLnBlZWsgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICAgICAgdmFyIHdhcyA9IG9mZnNldDtcbiAgICAgICAgY2IuY2FsbChzZWxmLCB2YXJzLnN0b3JlKTtcbiAgICAgICAgb2Zmc2V0ID0gd2FzO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIFxuICAgIHNlbGYuZmx1c2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhcnMuc3RvcmUgPSB7fTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBcbiAgICBzZWxmLmVvZiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG9mZnNldCA+PSBidWZmZXIubGVuZ3RoO1xuICAgIH07XG4gICAgXG4gICAgcmV0dXJuIHNlbGY7XG59O1xuXG4vLyBjb252ZXJ0IGJ5dGUgc3RyaW5ncyB0byB1bnNpZ25lZCBsaXR0bGUgZW5kaWFuIG51bWJlcnNcbmZ1bmN0aW9uIGRlY29kZUxFdSAoYnl0ZXMpIHtcbiAgICB2YXIgYWNjID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGFjYyArPSBNYXRoLnBvdygyNTYsaSkgKiBieXRlc1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbn1cblxuLy8gY29udmVydCBieXRlIHN0cmluZ3MgdG8gdW5zaWduZWQgYmlnIGVuZGlhbiBudW1iZXJzXG5mdW5jdGlvbiBkZWNvZGVCRXUgKGJ5dGVzKSB7XG4gICAgdmFyIGFjYyA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBhY2MgKz0gTWF0aC5wb3coMjU2LCBieXRlcy5sZW5ndGggLSBpIC0gMSkgKiBieXRlc1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbn1cblxuLy8gY29udmVydCBieXRlIHN0cmluZ3MgdG8gc2lnbmVkIGJpZyBlbmRpYW4gbnVtYmVyc1xuZnVuY3Rpb24gZGVjb2RlQkVzIChieXRlcykge1xuICAgIHZhciB2YWwgPSBkZWNvZGVCRXUoYnl0ZXMpO1xuICAgIGlmICgoYnl0ZXNbMF0gJiAweDgwKSA9PSAweDgwKSB7XG4gICAgICAgIHZhbCAtPSBNYXRoLnBvdygyNTYsIGJ5dGVzLmxlbmd0aCk7XG4gICAgfVxuICAgIHJldHVybiB2YWw7XG59XG5cbi8vIGNvbnZlcnQgYnl0ZSBzdHJpbmdzIHRvIHNpZ25lZCBsaXR0bGUgZW5kaWFuIG51bWJlcnNcbmZ1bmN0aW9uIGRlY29kZUxFcyAoYnl0ZXMpIHtcbiAgICB2YXIgdmFsID0gZGVjb2RlTEV1KGJ5dGVzKTtcbiAgICBpZiAoKGJ5dGVzW2J5dGVzLmxlbmd0aCAtIDFdICYgMHg4MCkgPT0gMHg4MCkge1xuICAgICAgICB2YWwgLT0gTWF0aC5wb3coMjU2LCBieXRlcy5sZW5ndGgpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsO1xufVxuXG5mdW5jdGlvbiB3b3JkcyAoZGVjb2RlKSB7XG4gICAgdmFyIHNlbGYgPSB7fTtcbiAgICBcbiAgICBbIDEsIDIsIDQsIDggXS5mb3JFYWNoKGZ1bmN0aW9uIChieXRlcykge1xuICAgICAgICB2YXIgYml0cyA9IGJ5dGVzICogODtcbiAgICAgICAgXG4gICAgICAgIHNlbGZbJ3dvcmQnICsgYml0cyArICdsZSddXG4gICAgICAgID0gc2VsZlsnd29yZCcgKyBiaXRzICsgJ2x1J11cbiAgICAgICAgPSBkZWNvZGUoYnl0ZXMsIGRlY29kZUxFdSk7XG4gICAgICAgIFxuICAgICAgICBzZWxmWyd3b3JkJyArIGJpdHMgKyAnbHMnXVxuICAgICAgICA9IGRlY29kZShieXRlcywgZGVjb2RlTEVzKTtcbiAgICAgICAgXG4gICAgICAgIHNlbGZbJ3dvcmQnICsgYml0cyArICdiZSddXG4gICAgICAgID0gc2VsZlsnd29yZCcgKyBiaXRzICsgJ2J1J11cbiAgICAgICAgPSBkZWNvZGUoYnl0ZXMsIGRlY29kZUJFdSk7XG4gICAgICAgIFxuICAgICAgICBzZWxmWyd3b3JkJyArIGJpdHMgKyAnYnMnXVxuICAgICAgICA9IGRlY29kZShieXRlcywgZGVjb2RlQkVzKTtcbiAgICB9KTtcbiAgICBcbiAgICAvLyB3b3JkOGJlKG4pID09IHdvcmQ4bGUobikgZm9yIGFsbCBuXG4gICAgc2VsZi53b3JkOCA9IHNlbGYud29yZDh1ID0gc2VsZi53b3JkOGJlO1xuICAgIHNlbGYud29yZDhzID0gc2VsZi53b3JkOGJzO1xuICAgIFxuICAgIHJldHVybiBzZWxmO1xufVxuIiwKICAgICJ2YXIgVHJhbnNmb3JtID0gcmVxdWlyZSgnc3RyZWFtJykuVHJhbnNmb3JtO1xudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG5cbmZ1bmN0aW9uIE1hdGNoZXJTdHJlYW0ocGF0dGVybkRlc2MsIG1hdGNoRm4pIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgTWF0Y2hlclN0cmVhbSkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBNYXRjaGVyU3RyZWFtKCk7XG4gICAgfVxuXG4gICAgVHJhbnNmb3JtLmNhbGwodGhpcyk7XG5cbiAgICB2YXIgcCA9IHR5cGVvZiBwYXR0ZXJuRGVzYyA9PT0gJ29iamVjdCcgPyBwYXR0ZXJuRGVzYy5wYXR0ZXJuIDogcGF0dGVybkRlc2M7XG5cbiAgICB0aGlzLnBhdHRlcm4gPSBCdWZmZXIuaXNCdWZmZXIocCkgPyBwIDogQnVmZmVyLmZyb20ocCk7XG4gICAgdGhpcy5yZXF1aXJlZExlbmd0aCA9IHRoaXMucGF0dGVybi5sZW5ndGg7XG4gICAgaWYgKHBhdHRlcm5EZXNjLnJlcXVpcmVkRXh0cmFTaXplKSB0aGlzLnJlcXVpcmVkTGVuZ3RoICs9IHBhdHRlcm5EZXNjLnJlcXVpcmVkRXh0cmFTaXplO1xuXG4gICAgdGhpcy5kYXRhID0gbmV3IEJ1ZmZlcignJyk7XG4gICAgdGhpcy5ieXRlc1NvRmFyID0gMDtcblxuICAgIHRoaXMubWF0Y2hGbiA9IG1hdGNoRm47XG59XG5cbnV0aWwuaW5oZXJpdHMoTWF0Y2hlclN0cmVhbSwgVHJhbnNmb3JtKTtcblxuTWF0Y2hlclN0cmVhbS5wcm90b3R5cGUuY2hlY2tEYXRhQ2h1bmsgPSBmdW5jdGlvbiAoaWdub3JlTWF0Y2haZXJvKSB7XG4gICAgdmFyIGVub3VnaERhdGEgPSB0aGlzLmRhdGEubGVuZ3RoID49IHRoaXMucmVxdWlyZWRMZW5ndGg7IC8vIHN0cmljdCBtb3JlIHRoYW4gP1xuICAgIGlmICghZW5vdWdoRGF0YSkgeyByZXR1cm47IH1cblxuICAgIHZhciBtYXRjaEluZGV4ID0gdGhpcy5kYXRhLmluZGV4T2YodGhpcy5wYXR0ZXJuLCBpZ25vcmVNYXRjaFplcm8gPyAxIDogMCk7XG4gICAgaWYgKG1hdGNoSW5kZXggPj0gMCAmJiBtYXRjaEluZGV4ICsgdGhpcy5yZXF1aXJlZExlbmd0aCA+IHRoaXMuZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgaWYgKG1hdGNoSW5kZXggPiAwKSB7XG4gICAgICAgICAgICB2YXIgcGFja2V0ID0gdGhpcy5kYXRhLnNsaWNlKDAsIG1hdGNoSW5kZXgpO1xuICAgICAgICAgICAgdGhpcy5wdXNoKHBhY2tldCk7XG4gICAgICAgICAgICB0aGlzLmJ5dGVzU29GYXIgKz0gbWF0Y2hJbmRleDtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHRoaXMuZGF0YS5zbGljZShtYXRjaEluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG1hdGNoSW5kZXggPT09IC0xKSB7XG4gICAgICAgIHZhciBwYWNrZXRMZW4gPSB0aGlzLmRhdGEubGVuZ3RoIC0gdGhpcy5yZXF1aXJlZExlbmd0aCArIDE7XG5cbiAgICAgICAgdmFyIHBhY2tldCA9IHRoaXMuZGF0YS5zbGljZSgwLCBwYWNrZXRMZW4pO1xuICAgICAgICB0aGlzLnB1c2gocGFja2V0KTtcbiAgICAgICAgdGhpcy5ieXRlc1NvRmFyICs9IHBhY2tldExlbjtcbiAgICAgICAgdGhpcy5kYXRhID0gdGhpcy5kYXRhLnNsaWNlKHBhY2tldExlbik7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBmb3VuZCBtYXRjaFxuICAgIGlmIChtYXRjaEluZGV4ID4gMCkge1xuICAgICAgICB2YXIgcGFja2V0ID0gdGhpcy5kYXRhLnNsaWNlKDAsIG1hdGNoSW5kZXgpO1xuICAgICAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGEuc2xpY2UobWF0Y2hJbmRleCk7XG4gICAgICAgIHRoaXMucHVzaChwYWNrZXQpO1xuICAgICAgICB0aGlzLmJ5dGVzU29GYXIgKz0gbWF0Y2hJbmRleDtcbiAgICB9XG5cbiAgICB2YXIgZmluaXNoZWQgPSB0aGlzLm1hdGNoRm4gPyB0aGlzLm1hdGNoRm4odGhpcy5kYXRhLCB0aGlzLmJ5dGVzU29GYXIpIDogdHJ1ZTtcbiAgICBpZiAoZmluaXNoZWQpIHtcbiAgICAgICAgdGhpcy5kYXRhID0gbmV3IEJ1ZmZlcignJyk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuTWF0Y2hlclN0cmVhbS5wcm90b3R5cGUuX3RyYW5zZm9ybSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gICAgdGhpcy5kYXRhID0gQnVmZmVyLmNvbmNhdChbdGhpcy5kYXRhLCBjaHVua10pO1xuXG4gICAgdmFyIGZpcnN0SXRlcmF0aW9uID0gdHJ1ZTtcbiAgICB3aGlsZSAodGhpcy5jaGVja0RhdGFDaHVuayghZmlyc3RJdGVyYXRpb24pKSB7XG4gICAgICAgIGZpcnN0SXRlcmF0aW9uID0gZmFsc2U7XG4gICAgfVxuXG4gICAgY2IoKTtcbn1cblxuTWF0Y2hlclN0cmVhbS5wcm90b3R5cGUuX2ZsdXNoID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgaWYgKHRoaXMuZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHZhciBmaXJzdEl0ZXJhdGlvbiA9IHRydWU7XG4gICAgICAgIHdoaWxlICh0aGlzLmNoZWNrRGF0YUNodW5rKCFmaXJzdEl0ZXJhdGlvbikpIHtcbiAgICAgICAgICAgIGZpcnN0SXRlcmF0aW9uID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5wdXNoKHRoaXMuZGF0YSk7XG4gICAgICAgIHRoaXMuZGF0YSA9IG51bGw7XG4gICAgfVxuXG4gICAgY2IoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBNYXRjaGVyU3RyZWFtOyIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgc3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJyk7XG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCd1dGlsJykuaW5oZXJpdHM7XG5cbmZ1bmN0aW9uIEVudHJ5KCkge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBFbnRyeSkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBFbnRyeSgpO1xuICAgIH1cblxuICAgIHN0cmVhbS5QYXNzVGhyb3VnaC5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5wYXRoID0gbnVsbDtcbiAgICB0aGlzLnR5cGUgPSBudWxsO1xuICAgIHRoaXMuaXNEaXJlY3RvcnkgPSBmYWxzZTtcbn1cblxuaW5oZXJpdHMoRW50cnksIHN0cmVhbS5QYXNzVGhyb3VnaCk7XG5cbkVudHJ5LnByb3RvdHlwZS5hdXRvZHJhaW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMucGlwZShuZXcgc3RyZWFtLlRyYW5zZm9ybSh7IHRyYW5zZm9ybTogZnVuY3Rpb24gKGQsIGUsIGNiKSB7IGNiKCk7IH0gfSkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEVudHJ5OyIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYmluYXJ5ID0gcmVxdWlyZSgnYmluYXJ5Jyk7XG52YXIgc3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbnZhciB6bGliID0gcmVxdWlyZSgnemxpYicpO1xudmFyIE1hdGNoZXJTdHJlYW0gPSByZXF1aXJlKCcuL21hdGNoZXItc3RyZWFtJyk7XG52YXIgRW50cnkgPSByZXF1aXJlKCcuL2VudHJ5Jyk7XG5cbmNvbnN0IHN0YXRlcyA9IHtcbiAgICBTVFJFQU1fU1RBUlQ6ICAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgU1RBUlQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLFxuICAgIExPQ0FMX0ZJTEVfSEVBREVSOiAgICAgICAgICAgICAgICAgICAgMixcbiAgICBMT0NBTF9GSUxFX0hFQURFUl9TVUZGSVg6ICAgICAgICAgICAgIDMsXG4gICAgRklMRV9EQVRBOiAgICAgICAgICAgICAgICAgICAgICAgICAgICA0LFxuICAgIEZJTEVfREFUQV9FTkQ6ICAgICAgICAgICAgICAgICAgICAgICAgNSxcbiAgICBEQVRBX0RFU0NSSVBUT1I6ICAgICAgICAgICAgICAgICAgICAgIDYsXG4gICAgQ0VOVFJBTF9ESVJFQ1RPUllfRklMRV9IRUFERVI6ICAgICAgICA3LFxuICAgIENFTlRSQUxfRElSRUNUT1JZX0ZJTEVfSEVBREVSX1NVRkZJWDogOCxcbiAgICBDRElSNjRfRU5EOiAgICAgICAgICAgICAgICAgICAgICAgICAgIDksXG4gICAgQ0RJUjY0X0VORF9EQVRBX1NFQ1RPUjogICAgICAgICAgICAgICAxMCxcbiAgICBDRElSNjRfTE9DQVRPUjogICAgICAgICAgICAgICAgICAgICAgIDExLFxuICAgIENFTlRSQUxfRElSRUNUT1JZX0VORDogICAgICAgICAgICAgICAgMTIsXG4gICAgQ0VOVFJBTF9ESVJFQ1RPUllfRU5EX0NPTU1FTlQ6ICAgICAgICAxMyxcbiAgICBUUkFJTElOR19KVU5LOiAgICAgICAgICAgICAgICAgICAgICAgIDE0LFxuXG4gICAgRVJST1I6IDk5XG59XG5cbmNvbnN0IEZPVVJfR0lHUyA9IDQyOTQ5NjcyOTY7XG5cbmNvbnN0IFNJR19MT0NBTF9GSUxFX0hFQURFUiAgPSAweDA0MDM0YjUwO1xuY29uc3QgU0lHX0RBVEFfREVTQ1JJUFRPUiAgICA9IDB4MDgwNzRiNTA7XG5jb25zdCBTSUdfQ0RJUl9SRUNPUkQgICAgICAgID0gMHgwMjAxNGI1MDtcbmNvbnN0IFNJR19DRElSNjRfUkVDT1JEX0VORCAgPSAweDA2MDY0YjUwO1xuY29uc3QgU0lHX0NESVI2NF9MT0NBVE9SX0VORCA9IDB4MDcwNjRiNTA7XG5jb25zdCBTSUdfQ0RJUl9SRUNPUkRfRU5EICAgID0gMHgwNjA1NGI1MDtcblxuZnVuY3Rpb24gVW56aXBTdHJlYW0ob3B0aW9ucykge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBVbnppcFN0cmVhbSkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBVbnppcFN0cmVhbShvcHRpb25zKTtcbiAgICB9XG5cbiAgICBzdHJlYW0uVHJhbnNmb3JtLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIHRoaXMuZGF0YSA9IG5ldyBCdWZmZXIoJycpO1xuICAgIHRoaXMuc3RhdGUgPSBzdGF0ZXMuU1RSRUFNX1NUQVJUO1xuICAgIHRoaXMuc2tpcHBlZEJ5dGVzID0gMDtcbiAgICB0aGlzLnBhcnNlZEVudGl0eSA9IG51bGw7XG4gICAgdGhpcy5vdXRTdHJlYW1JbmZvID0ge307XG59XG5cbnV0aWwuaW5oZXJpdHMoVW56aXBTdHJlYW0sIHN0cmVhbS5UcmFuc2Zvcm0pO1xuXG5VbnppcFN0cmVhbS5wcm90b3R5cGUucHJvY2Vzc0RhdGFDaHVuayA9IGZ1bmN0aW9uIChjaHVuaykge1xuICAgIHZhciByZXF1aXJlZExlbmd0aDtcblxuICAgIHN3aXRjaCAodGhpcy5zdGF0ZSkge1xuICAgICAgICBjYXNlIHN0YXRlcy5TVFJFQU1fU1RBUlQ6XG4gICAgICAgIGNhc2Ugc3RhdGVzLlNUQVJUOlxuICAgICAgICAgICAgcmVxdWlyZWRMZW5ndGggPSA0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Ugc3RhdGVzLkxPQ0FMX0ZJTEVfSEVBREVSOlxuICAgICAgICAgICAgcmVxdWlyZWRMZW5ndGggPSAyNjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIHN0YXRlcy5MT0NBTF9GSUxFX0hFQURFUl9TVUZGSVg6XG4gICAgICAgICAgICByZXF1aXJlZExlbmd0aCA9IHRoaXMucGFyc2VkRW50aXR5LmZpbGVOYW1lTGVuZ3RoICsgdGhpcy5wYXJzZWRFbnRpdHkuZXh0cmFGaWVsZExlbmd0aDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIHN0YXRlcy5EQVRBX0RFU0NSSVBUT1I6XG4gICAgICAgICAgICByZXF1aXJlZExlbmd0aCA9IDEyO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Ugc3RhdGVzLkNFTlRSQUxfRElSRUNUT1JZX0ZJTEVfSEVBREVSOlxuICAgICAgICAgICAgcmVxdWlyZWRMZW5ndGggPSA0MjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIHN0YXRlcy5DRU5UUkFMX0RJUkVDVE9SWV9GSUxFX0hFQURFUl9TVUZGSVg6XG4gICAgICAgICAgICByZXF1aXJlZExlbmd0aCA9IHRoaXMucGFyc2VkRW50aXR5LmZpbGVOYW1lTGVuZ3RoICsgdGhpcy5wYXJzZWRFbnRpdHkuZXh0cmFGaWVsZExlbmd0aCArIHRoaXMucGFyc2VkRW50aXR5LmZpbGVDb21tZW50TGVuZ3RoO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Ugc3RhdGVzLkNESVI2NF9FTkQ6XG4gICAgICAgICAgICByZXF1aXJlZExlbmd0aCA9IDUyO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Ugc3RhdGVzLkNESVI2NF9FTkRfREFUQV9TRUNUT1I6XG4gICAgICAgICAgICByZXF1aXJlZExlbmd0aCA9IHRoaXMucGFyc2VkRW50aXR5LmNlbnRyYWxEaXJlY3RvcnlSZWNvcmRTaXplIC0gNDQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBzdGF0ZXMuQ0RJUjY0X0xPQ0FUT1I6XG4gICAgICAgICAgICByZXF1aXJlZExlbmd0aCA9IDE2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Ugc3RhdGVzLkNFTlRSQUxfRElSRUNUT1JZX0VORDpcbiAgICAgICAgICAgIHJlcXVpcmVkTGVuZ3RoID0gMTg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBzdGF0ZXMuQ0VOVFJBTF9ESVJFQ1RPUllfRU5EX0NPTU1FTlQ6XG4gICAgICAgICAgICByZXF1aXJlZExlbmd0aCA9IHRoaXMucGFyc2VkRW50aXR5LmNvbW1lbnRMZW5ndGg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBzdGF0ZXMuRklMRV9EQVRBOlxuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIGNhc2Ugc3RhdGVzLkZJTEVfREFUQV9FTkQ6XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgY2FzZSBzdGF0ZXMuVFJBSUxJTkdfSlVOSzpcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZGVidWcpIGNvbnNvbGUubG9nKFwiZm91bmRcIiwgY2h1bmsubGVuZ3RoLCBcImJ5dGVzIG9mIFRSQUlMSU5HX0pVTktcIik7XG4gICAgICAgICAgICByZXR1cm4gY2h1bmsubGVuZ3RoO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGNodW5rLmxlbmd0aDtcbiAgICB9XG5cbiAgICB2YXIgY2h1bmtMZW5ndGggPSBjaHVuay5sZW5ndGg7XG4gICAgaWYgKGNodW5rTGVuZ3RoIDwgcmVxdWlyZWRMZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgc3dpdGNoICh0aGlzLnN0YXRlKSB7XG4gICAgICAgIGNhc2Ugc3RhdGVzLlNUUkVBTV9TVEFSVDpcbiAgICAgICAgY2FzZSBzdGF0ZXMuU1RBUlQ6XG4gICAgICAgICAgICB2YXIgc2lnbmF0dXJlID0gY2h1bmsucmVhZFVJbnQzMkxFKDApO1xuICAgICAgICAgICAgc3dpdGNoIChzaWduYXR1cmUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFNJR19MT0NBTF9GSUxFX0hFQURFUjpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlcy5MT0NBTF9GSUxFX0hFQURFUjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBTSUdfQ0RJUl9SRUNPUkQ6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZXMuQ0VOVFJBTF9ESVJFQ1RPUllfRklMRV9IRUFERVI7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgU0lHX0NESVI2NF9SRUNPUkRfRU5EOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGVzLkNESVI2NF9FTkQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgU0lHX0NESVI2NF9MT0NBVE9SX0VORDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlcy5DRElSNjRfTE9DQVRPUjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBTSUdfQ0RJUl9SRUNPUkRfRU5EOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGVzLkNFTlRSQUxfRElSRUNUT1JZX0VORDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlzU3RyZWFtU3RhcnQgPSB0aGlzLnN0YXRlID09PSBzdGF0ZXMuU1RSRUFNX1NUQVJUO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzU3RyZWFtU3RhcnQgJiYgKHNpZ25hdHVyZSAmIDB4ZmZmZikgIT09IDB4NGI1MCAmJiB0aGlzLnNraXBwZWRCeXRlcyA8IDI2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSdsbCBhbGxvdyBhIHBhZGRpbmcgb2YgbWF4IDI4IGJ5dGVzXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVtYWluaW5nID0gc2lnbmF0dXJlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRvU2tpcCA9IDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IDQgJiYgcmVtYWluaW5nICE9PSAwOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1haW5pbmcgPSByZW1haW5pbmcgPj4+IDg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChyZW1haW5pbmcgJiAweGZmKSA9PT0gMHg1MCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b1NraXAgPSBpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNraXBwZWRCeXRlcyArPSB0b1NraXA7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmRlYnVnKSBjb25zb2xlLmxvZygnU2tpcHBlZCcsIHRoaXMuc2tpcHBlZEJ5dGVzLCAnYnl0ZXMnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0b1NraXA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlcy5FUlJPUjtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVyck1zZyA9IGlzU3RyZWFtU3RhcnQgPyBcIk5vdCBhIHZhbGlkIHppcCBmaWxlXCIgOiBcIkludmFsaWQgc2lnbmF0dXJlIGluIHppcCBmaWxlXCI7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZGVidWcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaWcgPSBjaHVuay5yZWFkVUludDMyTEUoMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXNTdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkgeyBhc1N0cmluZyA9IGNodW5rLnNsaWNlKDAsIDQpLnRvU3RyaW5nKCk7IH0gY2F0Y2ggKGUpIHt9XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIlVuZXhwZWN0ZWQgc2lnbmF0dXJlIGluIHppcCBmaWxlOiAweFwiICsgc2lnLnRvU3RyaW5nKDE2KSwgJ1wiJyArIGFzU3RyaW5nICsgJ1wiLCBza2lwcGVkJywgdGhpcy5za2lwcGVkQnl0ZXMsICdieXRlcycpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdChcImVycm9yXCIsIG5ldyBFcnJvcihlcnJNc2cpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNodW5rLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2tpcHBlZEJ5dGVzID0gMDtcbiAgICAgICAgICAgIHJldHVybiByZXF1aXJlZExlbmd0aDtcblxuICAgICAgICBjYXNlIHN0YXRlcy5MT0NBTF9GSUxFX0hFQURFUjpcbiAgICAgICAgICAgIHRoaXMucGFyc2VkRW50aXR5ID0gdGhpcy5fcmVhZEZpbGUoY2h1bmspO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlcy5MT0NBTF9GSUxFX0hFQURFUl9TVUZGSVg7XG5cbiAgICAgICAgICAgIHJldHVybiByZXF1aXJlZExlbmd0aDtcblxuICAgICAgICBjYXNlIHN0YXRlcy5MT0NBTF9GSUxFX0hFQURFUl9TVUZGSVg6XG4gICAgICAgICAgICB2YXIgZW50cnkgPSBuZXcgRW50cnkoKTtcbiAgICAgICAgICAgIHZhciBpc1V0ZjggPSAodGhpcy5wYXJzZWRFbnRpdHkuZmxhZ3MgJiAweDgwMCkgIT09IDA7XG4gICAgICAgICAgICBlbnRyeS5wYXRoID0gdGhpcy5fZGVjb2RlU3RyaW5nKGNodW5rLnNsaWNlKDAsIHRoaXMucGFyc2VkRW50aXR5LmZpbGVOYW1lTGVuZ3RoKSwgaXNVdGY4KTtcbiAgICAgICAgICAgIHZhciBleHRyYURhdGFCdWZmZXIgPSBjaHVuay5zbGljZSh0aGlzLnBhcnNlZEVudGl0eS5maWxlTmFtZUxlbmd0aCwgdGhpcy5wYXJzZWRFbnRpdHkuZmlsZU5hbWVMZW5ndGggKyB0aGlzLnBhcnNlZEVudGl0eS5leHRyYUZpZWxkTGVuZ3RoKTtcbiAgICAgICAgICAgIHZhciBleHRyYSA9IHRoaXMuX3JlYWRFeHRyYUZpZWxkcyhleHRyYURhdGFCdWZmZXIpO1xuICAgICAgICAgICAgaWYgKGV4dHJhICYmIGV4dHJhLnBhcnNlZCkge1xuICAgICAgICAgICAgICAgIGlmIChleHRyYS5wYXJzZWQucGF0aCAmJiAhaXNVdGY4KSB7XG4gICAgICAgICAgICAgICAgICAgIGVudHJ5LnBhdGggPSBleHRyYS5wYXJzZWQucGF0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKE51bWJlci5pc0Zpbml0ZShleHRyYS5wYXJzZWQudW5jb21wcmVzc2VkU2l6ZSkgJiYgdGhpcy5wYXJzZWRFbnRpdHkudW5jb21wcmVzc2VkU2l6ZSA9PT0gRk9VUl9HSUdTLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJzZWRFbnRpdHkudW5jb21wcmVzc2VkU2l6ZSA9IGV4dHJhLnBhcnNlZC51bmNvbXByZXNzZWRTaXplO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoTnVtYmVyLmlzRmluaXRlKGV4dHJhLnBhcnNlZC5jb21wcmVzc2VkU2l6ZSkgJiYgdGhpcy5wYXJzZWRFbnRpdHkuY29tcHJlc3NlZFNpemUgPT09IEZPVVJfR0lHUy0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFyc2VkRW50aXR5LmNvbXByZXNzZWRTaXplID0gZXh0cmEucGFyc2VkLmNvbXByZXNzZWRTaXplO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucGFyc2VkRW50aXR5LmV4dHJhID0gZXh0cmEucGFyc2VkIHx8IHt9O1xuXG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmRlYnVnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVidWdPYmogPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLnBhcnNlZEVudGl0eSwge1xuICAgICAgICAgICAgICAgICAgICBwYXRoOiBlbnRyeS5wYXRoLFxuICAgICAgICAgICAgICAgICAgICBmbGFnczogJzB4JyArIHRoaXMucGFyc2VkRW50aXR5LmZsYWdzLnRvU3RyaW5nKDE2KSxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFGaWVsZHM6IGV4dHJhICYmIGV4dHJhLmRlYnVnXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJkZWNvZGVkIExPQ0FMX0ZJTEVfSEVBREVSOlwiLCBKU09OLnN0cmluZ2lmeShkZWJ1Z09iaiwgbnVsbCwgMikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fcHJlcGFyZU91dFN0cmVhbSh0aGlzLnBhcnNlZEVudGl0eSwgZW50cnkpO1xuXG4gICAgICAgICAgICB0aGlzLmVtaXQoXCJlbnRyeVwiLCBlbnRyeSk7XG5cbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZXMuRklMRV9EQVRBO1xuXG4gICAgICAgICAgICByZXR1cm4gcmVxdWlyZWRMZW5ndGg7XG5cbiAgICAgICAgY2FzZSBzdGF0ZXMuQ0VOVFJBTF9ESVJFQ1RPUllfRklMRV9IRUFERVI6XG4gICAgICAgICAgICB0aGlzLnBhcnNlZEVudGl0eSA9IHRoaXMuX3JlYWRDZW50cmFsRGlyZWN0b3J5RW50cnkoY2h1bmspO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlcy5DRU5UUkFMX0RJUkVDVE9SWV9GSUxFX0hFQURFUl9TVUZGSVg7XG5cbiAgICAgICAgICAgIHJldHVybiByZXF1aXJlZExlbmd0aDtcblxuICAgICAgICBjYXNlIHN0YXRlcy5DRU5UUkFMX0RJUkVDVE9SWV9GSUxFX0hFQURFUl9TVUZGSVg6XG4gICAgICAgICAgICAvLyBnb3QgZmlsZSBuYW1lIGluIGNodW5rWzAuLl1cbiAgICAgICAgICAgIHZhciBpc1V0ZjggPSAodGhpcy5wYXJzZWRFbnRpdHkuZmxhZ3MgJiAweDgwMCkgIT09IDA7XG4gICAgICAgICAgICB2YXIgcGF0aCA9IHRoaXMuX2RlY29kZVN0cmluZyhjaHVuay5zbGljZSgwLCB0aGlzLnBhcnNlZEVudGl0eS5maWxlTmFtZUxlbmd0aCksIGlzVXRmOCk7XG4gICAgICAgICAgICB2YXIgZXh0cmFEYXRhQnVmZmVyID0gY2h1bmsuc2xpY2UodGhpcy5wYXJzZWRFbnRpdHkuZmlsZU5hbWVMZW5ndGgsIHRoaXMucGFyc2VkRW50aXR5LmZpbGVOYW1lTGVuZ3RoICsgdGhpcy5wYXJzZWRFbnRpdHkuZXh0cmFGaWVsZExlbmd0aCk7XG4gICAgICAgICAgICB2YXIgZXh0cmEgPSB0aGlzLl9yZWFkRXh0cmFGaWVsZHMoZXh0cmFEYXRhQnVmZmVyKTtcbiAgICAgICAgICAgIGlmIChleHRyYSAmJiBleHRyYS5wYXJzZWQgJiYgZXh0cmEucGFyc2VkLnBhdGggJiYgIWlzVXRmOCkge1xuICAgICAgICAgICAgICAgIHBhdGggPSBleHRyYS5wYXJzZWQucGF0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucGFyc2VkRW50aXR5LmV4dHJhID0gZXh0cmEucGFyc2VkO1xuXG4gICAgICAgICAgICB2YXIgaXNVbml4ID0gKCh0aGlzLnBhcnNlZEVudGl0eS52ZXJzaW9uTWFkZUJ5ICYgMHhmZjAwKSA+PiA4KSA9PT0gMztcbiAgICAgICAgICAgIHZhciB1bml4QXR0cnMsIGlzU3ltbGluaztcbiAgICAgICAgICAgIGlmIChpc1VuaXgpIHtcbiAgICAgICAgICAgICAgICB1bml4QXR0cnMgPSB0aGlzLnBhcnNlZEVudGl0eS5leHRlcm5hbEZpbGVBdHRyaWJ1dGVzID4+PiAxNjtcbiAgICAgICAgICAgICAgICB2YXIgZmlsZVR5cGUgPSB1bml4QXR0cnMgPj4+IDEyO1xuICAgICAgICAgICAgICAgIGlzU3ltbGluayA9IChmaWxlVHlwZSAmIDBvMTIpID09PSAwbzEyOyAvLyBfX1NfSUZMTktcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZGVidWcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkZWJ1Z09iaiA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMucGFyc2VkRW50aXR5LCB7XG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IHBhdGgsXG4gICAgICAgICAgICAgICAgICAgIGZsYWdzOiAnMHgnICsgdGhpcy5wYXJzZWRFbnRpdHkuZmxhZ3MudG9TdHJpbmcoMTYpLFxuICAgICAgICAgICAgICAgICAgICB1bml4QXR0cnM6IHVuaXhBdHRycyAmJiAnMCcgKyB1bml4QXR0cnMudG9TdHJpbmcoOCksXG4gICAgICAgICAgICAgICAgICAgIGlzU3ltbGluazogaXNTeW1saW5rLFxuICAgICAgICAgICAgICAgICAgICBleHRyYUZpZWxkczogZXh0cmEuZGVidWcsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJkZWNvZGVkIENFTlRSQUxfRElSRUNUT1JZX0ZJTEVfSEVBREVSOlwiLCBKU09OLnN0cmluZ2lmeShkZWJ1Z09iaiwgbnVsbCwgMikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlcy5TVEFSVDtcblxuICAgICAgICAgICAgcmV0dXJuIHJlcXVpcmVkTGVuZ3RoO1xuXG4gICAgICAgIGNhc2Ugc3RhdGVzLkNESVI2NF9FTkQ6XG4gICAgICAgICAgICB0aGlzLnBhcnNlZEVudGl0eSA9IHRoaXMuX3JlYWRFbmRPZkNlbnRyYWxEaXJlY3Rvcnk2NChjaHVuayk7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmRlYnVnKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJkZWNvZGVkIENESVI2NF9FTkRfUkVDT1JEOlwiLCB0aGlzLnBhcnNlZEVudGl0eSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGVzLkNESVI2NF9FTkRfREFUQV9TRUNUT1I7XG5cbiAgICAgICAgICAgIHJldHVybiByZXF1aXJlZExlbmd0aDtcblxuICAgICAgICBjYXNlIHN0YXRlcy5DRElSNjRfRU5EX0RBVEFfU0VDVE9SOlxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlcy5TVEFSVDtcblxuICAgICAgICAgICAgcmV0dXJuIHJlcXVpcmVkTGVuZ3RoO1xuXG4gICAgICAgIGNhc2Ugc3RhdGVzLkNESVI2NF9MT0NBVE9SOlxuICAgICAgICAgICAgLy8gaWdub3JlLCBub3RoaW5nIGludGVyZXN0aW5nXG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGVzLlNUQVJUO1xuXG4gICAgICAgICAgICByZXR1cm4gcmVxdWlyZWRMZW5ndGg7XG5cbiAgICAgICAgY2FzZSBzdGF0ZXMuQ0VOVFJBTF9ESVJFQ1RPUllfRU5EOlxuICAgICAgICAgICAgdGhpcy5wYXJzZWRFbnRpdHkgPSB0aGlzLl9yZWFkRW5kT2ZDZW50cmFsRGlyZWN0b3J5KGNodW5rKTtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZGVidWcpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImRlY29kZWQgQ0VOVFJBTF9ESVJFQ1RPUllfRU5EOlwiLCB0aGlzLnBhcnNlZEVudGl0eSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGVzLkNFTlRSQUxfRElSRUNUT1JZX0VORF9DT01NRU5UO1xuXG4gICAgICAgICAgICByZXR1cm4gcmVxdWlyZWRMZW5ndGg7XG5cbiAgICAgICAgY2FzZSBzdGF0ZXMuQ0VOVFJBTF9ESVJFQ1RPUllfRU5EX0NPTU1FTlQ6XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmRlYnVnKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJkZWNvZGVkIENFTlRSQUxfRElSRUNUT1JZX0VORF9DT01NRU5UOlwiLCBjaHVuay5zbGljZSgwLCByZXF1aXJlZExlbmd0aCkudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGVzLlRSQUlMSU5HX0pVTks7XG5cbiAgICAgICAgICAgIHJldHVybiByZXF1aXJlZExlbmd0aDtcblxuICAgICAgICBjYXNlIHN0YXRlcy5FUlJPUjpcbiAgICAgICAgICAgIHJldHVybiBjaHVuay5sZW5ndGg7IC8vIGRpc2NhcmRcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJkaWRuJ3QgaGFuZGxlIHN0YXRlICNcIiwgdGhpcy5zdGF0ZSwgXCJkaXNjYXJkaW5nXCIpO1xuICAgICAgICAgICAgcmV0dXJuIGNodW5rLmxlbmd0aDtcbiAgICB9XG59XG5cblVuemlwU3RyZWFtLnByb3RvdHlwZS5fcHJlcGFyZU91dFN0cmVhbSA9IGZ1bmN0aW9uICh2YXJzLCBlbnRyeSkge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHZhciBpc0RpcmVjdG9yeSA9IHZhcnMudW5jb21wcmVzc2VkU2l6ZSA9PT0gMCAmJiAvW1xcL1xcXFxdJC8udGVzdChlbnRyeS5wYXRoKTtcbiAgICAvLyBwcm90ZWN0IGFnYWluc3QgbWFsaWNpb3VzIHppcCBmaWxlcyB3aGljaCB3YW50IHRvIGV4dHJhY3QgdG8gcGFyZW50IGRpcnNcbiAgICBlbnRyeS5wYXRoID0gZW50cnkucGF0aC5yZXBsYWNlKC8oPzw9XnxbL1xcXFxdKylbLl1bLl0rKD89Wy9cXFxcXSt8JCkvZywgXCIuXCIpO1xuICAgIGVudHJ5LnR5cGUgPSBpc0RpcmVjdG9yeSA/ICdEaXJlY3RvcnknIDogJ0ZpbGUnO1xuICAgIGVudHJ5LmlzRGlyZWN0b3J5ID0gaXNEaXJlY3Rvcnk7XG5cbiAgICB2YXIgZmlsZVNpemVLbm93biA9ICEodmFycy5mbGFncyAmIDB4MDgpO1xuICAgIGlmIChmaWxlU2l6ZUtub3duKSB7XG4gICAgICAgIGVudHJ5LnNpemUgPSB2YXJzLnVuY29tcHJlc3NlZFNpemU7XG4gICAgfVxuXG4gICAgdmFyIGlzVmVyc2lvblN1cHBvcnRlZCA9IHZhcnMudmVyc2lvbnNOZWVkZWRUb0V4dHJhY3QgPD0gNDU7XG5cbiAgICB0aGlzLm91dFN0cmVhbUluZm8gPSB7XG4gICAgICAgIHN0cmVhbTogbnVsbCxcbiAgICAgICAgbGltaXQ6IGZpbGVTaXplS25vd24gPyB2YXJzLmNvbXByZXNzZWRTaXplIDogLTEsXG4gICAgICAgIHdyaXR0ZW46IDBcbiAgICB9O1xuXG4gICAgaWYgKCFmaWxlU2l6ZUtub3duKSB7XG4gICAgICAgIHZhciBwYXR0ZXJuID0gbmV3IEJ1ZmZlcig0KTtcbiAgICAgICAgcGF0dGVybi53cml0ZVVJbnQzMkxFKFNJR19EQVRBX0RFU0NSSVBUT1IsIDApO1xuICAgICAgICB2YXIgemlwNjRNb2RlID0gdmFycy5leHRyYS56aXA2NE1vZGU7XG4gICAgICAgIHZhciBleHRyYVNpemUgPSB6aXA2NE1vZGUgPyAyMCA6IDEyO1xuICAgICAgICB2YXIgc2VhcmNoUGF0dGVybiA9IHtcbiAgICAgICAgICAgIHBhdHRlcm46IHBhdHRlcm4sXG4gICAgICAgICAgICByZXF1aXJlZEV4dHJhU2l6ZTogZXh0cmFTaXplXG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbWF0Y2hlclN0cmVhbSA9IG5ldyBNYXRjaGVyU3RyZWFtKHNlYXJjaFBhdHRlcm4sIGZ1bmN0aW9uIChtYXRjaGVkQ2h1bmssIHNpemVTb0Zhcikge1xuICAgICAgICAgICAgdmFyIHZhcnMgPSBzZWxmLl9yZWFkRGF0YURlc2NyaXB0b3IobWF0Y2hlZENodW5rLCB6aXA2NE1vZGUpO1xuXG4gICAgICAgICAgICB2YXIgY29tcHJlc3NlZFNpemVNYXRjaGVzID0gdmFycy5jb21wcmVzc2VkU2l6ZSA9PT0gc2l6ZVNvRmFyO1xuICAgICAgICAgICAgLy8gbGV0J3MgYWxzbyBkZWFsIHdpdGggYXJjaGl2ZXMgd2l0aCA0R2lCKyBmaWxlcyB3aXRob3V0IHppcDY0XG4gICAgICAgICAgICBpZiAoIXppcDY0TW9kZSAmJiAhY29tcHJlc3NlZFNpemVNYXRjaGVzICYmIHNpemVTb0ZhciA+PSBGT1VSX0dJR1MpIHtcbiAgICAgICAgICAgICAgICB2YXIgb3ZlcmZsb3duID0gc2l6ZVNvRmFyIC0gRk9VUl9HSUdTO1xuICAgICAgICAgICAgICAgIHdoaWxlIChvdmVyZmxvd24gPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICBjb21wcmVzc2VkU2l6ZU1hdGNoZXMgPSB2YXJzLmNvbXByZXNzZWRTaXplID09PSBvdmVyZmxvd247XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21wcmVzc2VkU2l6ZU1hdGNoZXMpIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBvdmVyZmxvd24gLT0gRk9VUl9HSUdTO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghY29tcHJlc3NlZFNpemVNYXRjaGVzKSB7IHJldHVybjsgfVxuXG4gICAgICAgICAgICBzZWxmLnN0YXRlID0gc3RhdGVzLkZJTEVfREFUQV9FTkQ7XG4gICAgICAgICAgICB2YXIgc2xpY2VPZmZzZXQgPSB6aXA2NE1vZGUgPyAyNCA6IDE2O1xuICAgICAgICAgICAgaWYgKHNlbGYuZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5kYXRhID0gQnVmZmVyLmNvbmNhdChbbWF0Y2hlZENodW5rLnNsaWNlKHNsaWNlT2Zmc2V0KSwgc2VsZi5kYXRhXSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNlbGYuZGF0YSA9IG1hdGNoZWRDaHVuay5zbGljZShzbGljZU9mZnNldCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5vdXRTdHJlYW1JbmZvLnN0cmVhbSA9IG1hdGNoZXJTdHJlYW07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vdXRTdHJlYW1JbmZvLnN0cmVhbSA9IG5ldyBzdHJlYW0uUGFzc1Rocm91Z2goKTtcbiAgICB9XG5cbiAgICB2YXIgaXNFbmNyeXB0ZWQgPSAodmFycy5mbGFncyAmIDB4MDEpIHx8ICh2YXJzLmZsYWdzICYgMHg0MCk7XG4gICAgaWYgKGlzRW5jcnlwdGVkIHx8ICFpc1ZlcnNpb25TdXBwb3J0ZWQpIHtcbiAgICAgICAgdmFyIG1lc3NhZ2UgPSBpc0VuY3J5cHRlZCA/IFwiRW5jcnlwdGVkIGZpbGVzIGFyZSBub3Qgc3VwcG9ydGVkIVwiXG4gICAgICAgICAgICA6IChcIlppcCB2ZXJzaW9uIFwiICsgTWF0aC5mbG9vcih2YXJzLnZlcnNpb25zTmVlZGVkVG9FeHRyYWN0IC8gMTApICsgXCIuXCIgKyB2YXJzLnZlcnNpb25zTmVlZGVkVG9FeHRyYWN0ICUgMTAgKyBcIiBpcyBub3Qgc3VwcG9ydGVkXCIpO1xuXG4gICAgICAgIGVudHJ5LnNraXAgPSB0cnVlO1xuICAgICAgICBzZXRJbW1lZGlhdGUoKCkgPT4ge1xuICAgICAgICAgICAgc2VsZi5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcihtZXNzYWdlKSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIHRyeSB0byBza2lwIG92ZXIgdGhpcyBlbnRyeVxuICAgICAgICB0aGlzLm91dFN0cmVhbUluZm8uc3RyZWFtLnBpcGUobmV3IEVudHJ5KCkuYXV0b2RyYWluKCkpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGlzQ29tcHJlc3NlZCA9IHZhcnMuY29tcHJlc3Npb25NZXRob2QgPiAwO1xuICAgIGlmIChpc0NvbXByZXNzZWQpIHtcbiAgICAgICAgdmFyIGluZmxhdGVyID0gemxpYi5jcmVhdGVJbmZsYXRlUmF3KCk7XG4gICAgICAgIGluZmxhdGVyLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIHNlbGYuc3RhdGUgPSBzdGF0ZXMuRVJST1I7XG4gICAgICAgICAgICBzZWxmLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMub3V0U3RyZWFtSW5mby5zdHJlYW0ucGlwZShpbmZsYXRlcikucGlwZShlbnRyeSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vdXRTdHJlYW1JbmZvLnN0cmVhbS5waXBlKGVudHJ5KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fZHJhaW5BbGxFbnRyaWVzKSB7XG4gICAgICAgIGVudHJ5LmF1dG9kcmFpbigpO1xuICAgIH1cbn1cblxuVW56aXBTdHJlYW0ucHJvdG90eXBlLl9yZWFkRmlsZSA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgdmFyIHZhcnMgPSBiaW5hcnkucGFyc2UoZGF0YSlcbiAgICAgICAgLndvcmQxNmx1KCd2ZXJzaW9uc05lZWRlZFRvRXh0cmFjdCcpXG4gICAgICAgIC53b3JkMTZsdSgnZmxhZ3MnKVxuICAgICAgICAud29yZDE2bHUoJ2NvbXByZXNzaW9uTWV0aG9kJylcbiAgICAgICAgLndvcmQxNmx1KCdsYXN0TW9kaWZpZWRUaW1lJylcbiAgICAgICAgLndvcmQxNmx1KCdsYXN0TW9kaWZpZWREYXRlJylcbiAgICAgICAgLndvcmQzMmx1KCdjcmMzMicpXG4gICAgICAgIC53b3JkMzJsdSgnY29tcHJlc3NlZFNpemUnKVxuICAgICAgICAud29yZDMybHUoJ3VuY29tcHJlc3NlZFNpemUnKVxuICAgICAgICAud29yZDE2bHUoJ2ZpbGVOYW1lTGVuZ3RoJylcbiAgICAgICAgLndvcmQxNmx1KCdleHRyYUZpZWxkTGVuZ3RoJylcbiAgICAgICAgLnZhcnM7XG5cbiAgICByZXR1cm4gdmFycztcbn1cblxuVW56aXBTdHJlYW0ucHJvdG90eXBlLl9yZWFkRXh0cmFGaWVsZHMgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgIHZhciBleHRyYSA9IHt9O1xuICAgIHZhciByZXN1bHQgPSB7IHBhcnNlZDogZXh0cmEgfTtcbiAgICBpZiAodGhpcy5vcHRpb25zLmRlYnVnKSB7XG4gICAgICAgIHJlc3VsdC5kZWJ1ZyA9IFtdO1xuICAgIH1cbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHdoaWxlIChpbmRleCA8IGRhdGEubGVuZ3RoKSB7XG4gICAgICAgIHZhciB2YXJzID0gYmluYXJ5LnBhcnNlKGRhdGEpXG4gICAgICAgICAgICAuc2tpcChpbmRleClcbiAgICAgICAgICAgIC53b3JkMTZsdSgnZXh0cmFJZCcpXG4gICAgICAgICAgICAud29yZDE2bHUoJ2V4dHJhU2l6ZScpXG4gICAgICAgICAgICAudmFycztcblxuICAgICAgICBpbmRleCArPSA0O1xuXG4gICAgICAgIHZhciBmaWVsZFR5cGUgPSB1bmRlZmluZWQ7XG4gICAgICAgIHN3aXRjaCAodmFycy5leHRyYUlkKSB7XG4gICAgICAgICAgICBjYXNlIDB4MDAwMTpcbiAgICAgICAgICAgICAgICBmaWVsZFR5cGUgPSBcIlppcDY0IGV4dGVuZGVkIGluZm9ybWF0aW9uIGV4dHJhIGZpZWxkXCI7XG4gICAgICAgICAgICAgICAgdmFyIHo2NHZhcnMgPSBiaW5hcnkucGFyc2UoZGF0YS5zbGljZShpbmRleCwgaW5kZXgrdmFycy5leHRyYVNpemUpKVxuICAgICAgICAgICAgICAgICAgICAud29yZDY0bHUoJ3VuY29tcHJlc3NlZFNpemUnKVxuICAgICAgICAgICAgICAgICAgICAud29yZDY0bHUoJ2NvbXByZXNzZWRTaXplJylcbiAgICAgICAgICAgICAgICAgICAgLndvcmQ2NGx1KCdvZmZzZXRUb0xvY2FsSGVhZGVyJylcbiAgICAgICAgICAgICAgICAgICAgLndvcmQzMmx1KCdkaXNrU3RhcnROdW1iZXInKVxuICAgICAgICAgICAgICAgICAgICAudmFycztcbiAgICAgICAgICAgICAgICBpZiAoejY0dmFycy51bmNvbXByZXNzZWRTaXplICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4dHJhLnVuY29tcHJlc3NlZFNpemUgPSB6NjR2YXJzLnVuY29tcHJlc3NlZFNpemU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh6NjR2YXJzLmNvbXByZXNzZWRTaXplICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4dHJhLmNvbXByZXNzZWRTaXplID0gejY0dmFycy5jb21wcmVzc2VkU2l6ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZXh0cmEuemlwNjRNb2RlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMHgwMDBhOlxuICAgICAgICAgICAgICAgIGZpZWxkVHlwZSA9IFwiTlRGUyBleHRyYSBmaWVsZFwiO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAweDU0NTU6XG4gICAgICAgICAgICAgICAgZmllbGRUeXBlID0gXCJleHRlbmRlZCB0aW1lc3RhbXBcIjtcbiAgICAgICAgICAgICAgICB2YXIgdGltZXN0YW1wRmllbGRzID0gZGF0YS5yZWFkVUludDgoaW5kZXgpO1xuICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSAxO1xuICAgICAgICAgICAgICAgIGlmICh2YXJzLmV4dHJhU2l6ZSA+PSBvZmZzZXQgKyA0ICYmIHRpbWVzdGFtcEZpZWxkcyAmIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgZXh0cmEubXRpbWUgPSBuZXcgRGF0ZShkYXRhLnJlYWRVSW50MzJMRShpbmRleCArIG9mZnNldCkgKiAxMDAwKTtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh2YXJzLmV4dHJhU2l6ZSA+PSBvZmZzZXQgKyA0ICYmIHRpbWVzdGFtcEZpZWxkcyAmIDIpIHtcbiAgICAgICAgICAgICAgICAgICAgZXh0cmEuYXRpbWUgPSBuZXcgRGF0ZShkYXRhLnJlYWRVSW50MzJMRShpbmRleCArIG9mZnNldCkgKiAxMDAwKTtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh2YXJzLmV4dHJhU2l6ZSA+PSBvZmZzZXQgKyA0ICYmIHRpbWVzdGFtcEZpZWxkcyAmIDQpIHtcbiAgICAgICAgICAgICAgICAgICAgZXh0cmEuY3RpbWUgPSBuZXcgRGF0ZShkYXRhLnJlYWRVSW50MzJMRShpbmRleCArIG9mZnNldCkgKiAxMDAwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDB4NzA3NTpcbiAgICAgICAgICAgICAgICBmaWVsZFR5cGUgPSBcIkluZm8tWklQIFVuaWNvZGUgUGF0aCBFeHRyYSBGaWVsZFwiO1xuICAgICAgICAgICAgICAgIHZhciBmaWVsZFZlciA9IGRhdGEucmVhZFVJbnQ4KGluZGV4KTtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGRWZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IDE7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IHNob3VsZCBiZSBjaGVja2luZyB0aGlzIGFnYWluc3Qgb3VyIHBhdGggYnVmZmVyXG4gICAgICAgICAgICAgICAgICAgIHZhciBuYW1lQ3JjMzIgPSBkYXRhLnJlYWRVSW50MzJMRShpbmRleCArIG9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSA0O1xuICAgICAgICAgICAgICAgICAgICB2YXIgcGF0aEJ1ZmZlciA9IGRhdGEuc2xpY2UoaW5kZXggKyBvZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICBleHRyYS5wYXRoID0gcGF0aEJ1ZmZlci50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMHgwMDBkOlxuICAgICAgICAgICAgY2FzZSAweDU4NTU6XG4gICAgICAgICAgICAgICAgZmllbGRUeXBlID0gdmFycy5leHRyYUlkID09PSAweDAwMGQgPyBcIlBLV0FSRSBVbml4XCIgOiBcIkluZm8tWklQIFVOSVggKHR5cGUgMSlcIjtcbiAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gMDtcbiAgICAgICAgICAgICAgICBpZiAodmFycy5leHRyYVNpemUgPj0gOCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYXRpbWUgPSBuZXcgRGF0ZShkYXRhLnJlYWRVSW50MzJMRShpbmRleCArIG9mZnNldCkgKiAxMDAwKTtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDQ7XG4gICAgICAgICAgICAgICAgICAgIHZhciBtdGltZSA9IG5ldyBEYXRlKGRhdGEucmVhZFVJbnQzMkxFKGluZGV4ICsgb2Zmc2V0KSAqIDEwMDApO1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gNDtcbiAgICAgICAgICAgICAgICAgICAgZXh0cmEuYXRpbWUgPSBhdGltZTtcbiAgICAgICAgICAgICAgICAgICAgZXh0cmEubXRpbWUgPSBtdGltZTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodmFycy5leHRyYVNpemUgPj0gMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1aWQgPSBkYXRhLnJlYWRVSW50MTZMRShpbmRleCArIG9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnaWQgPSBkYXRhLnJlYWRVSW50MTZMRShpbmRleCArIG9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhLnVpZCA9IHVpZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhLmdpZCA9IGdpZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMHg3ODU1OlxuICAgICAgICAgICAgICAgIGZpZWxkVHlwZSA9IFwiSW5mby1aSVAgVU5JWCAodHlwZSAyKVwiO1xuICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSAwO1xuICAgICAgICAgICAgICAgIGlmICh2YXJzLmV4dHJhU2l6ZSA+PSA0KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB1aWQgPSBkYXRhLnJlYWRVSW50MTZMRShpbmRleCArIG9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSAyO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZ2lkID0gZGF0YS5yZWFkVUludDE2TEUoaW5kZXggKyBvZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gMjtcbiAgICAgICAgICAgICAgICAgICAgZXh0cmEudWlkID0gdWlkO1xuICAgICAgICAgICAgICAgICAgICBleHRyYS5naWQgPSBnaWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAweDc4NzU6XG4gICAgICAgICAgICAgICAgZmllbGRUeXBlID0gXCJJbmZvLVpJUCBOZXcgVW5peFwiO1xuICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSAwO1xuICAgICAgICAgICAgICAgIHZhciBleHRyYVZlciA9IGRhdGEucmVhZFVJbnQ4KGluZGV4KTtcbiAgICAgICAgICAgICAgICBvZmZzZXQgKz0gMTtcbiAgICAgICAgICAgICAgICBpZiAoZXh0cmFWZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHVpZFNpemUgPSBkYXRhLnJlYWRVSW50OChpbmRleCArIG9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSAxO1xuICAgICAgICAgICAgICAgICAgICBpZiAodWlkU2l6ZSA8PSA2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYS51aWQgPSBkYXRhLnJlYWRVSW50TEUoaW5kZXggKyBvZmZzZXQsIHVpZFNpemUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSB1aWRTaXplO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBnaWRTaXplID0gZGF0YS5yZWFkVUludDgoaW5kZXggKyBvZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGdpZFNpemUgPD0gNikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEuZ2lkID0gZGF0YS5yZWFkVUludExFKGluZGV4ICsgb2Zmc2V0LCBnaWRTaXplKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMHg3NTZlOlxuICAgICAgICAgICAgICAgIGZpZWxkVHlwZSA9IFwiQVNpIFVuaXhcIjtcbiAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gMDtcbiAgICAgICAgICAgICAgICBpZiAodmFycy5leHRyYVNpemUgPj0gMTQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNyYyA9IGRhdGEucmVhZFVJbnQzMkxFKGluZGV4ICsgb2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDQ7XG4gICAgICAgICAgICAgICAgICAgIHZhciBtb2RlID0gZGF0YS5yZWFkVUludDE2TEUoaW5kZXggKyBvZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gMjtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNpemRldiA9IGRhdGEucmVhZFVJbnQzMkxFKGluZGV4ICsgb2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDQ7XG4gICAgICAgICAgICAgICAgICAgIHZhciB1aWQgPSBkYXRhLnJlYWRVSW50MTZMRShpbmRleCArIG9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSAyO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZ2lkID0gZGF0YS5yZWFkVUludDE2TEUoaW5kZXggKyBvZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gMjtcbiAgICAgICAgICAgICAgICAgICAgZXh0cmEubW9kZSA9IG1vZGU7XG4gICAgICAgICAgICAgICAgICAgIGV4dHJhLnVpZCA9IHVpZDtcbiAgICAgICAgICAgICAgICAgICAgZXh0cmEuZ2lkID0gZ2lkO1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFycy5leHRyYVNpemUgPiAxNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gaW5kZXggKyBvZmZzZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kID0gaW5kZXggKyB2YXJzLmV4dHJhU2l6ZSAtIDE0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN5bWxpbmtOYW1lID0gdGhpcy5fZGVjb2RlU3RyaW5nKGRhdGEuc2xpY2Uoc3RhcnQsIGVuZCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEuc3ltbGluayA9IHN5bWxpbmtOYW1lO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5kZWJ1Zykge1xuICAgICAgICAgICAgcmVzdWx0LmRlYnVnLnB1c2goe1xuICAgICAgICAgICAgICAgIGV4dHJhSWQ6ICcweCcgKyB2YXJzLmV4dHJhSWQudG9TdHJpbmcoMTYpLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBmaWVsZFR5cGUsXG4gICAgICAgICAgICAgICAgZGF0YTogZGF0YS5zbGljZShpbmRleCwgaW5kZXggKyB2YXJzLmV4dHJhU2l6ZSkuaW5zcGVjdCgpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGluZGV4ICs9IHZhcnMuZXh0cmFTaXplO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cblVuemlwU3RyZWFtLnByb3RvdHlwZS5fcmVhZERhdGFEZXNjcmlwdG9yID0gZnVuY3Rpb24gKGRhdGEsIHppcDY0TW9kZSkge1xuICAgIGlmICh6aXA2NE1vZGUpIHtcbiAgICAgICAgdmFyIHZhcnMgPSBiaW5hcnkucGFyc2UoZGF0YSlcbiAgICAgICAgICAgIC53b3JkMzJsdSgnZGF0YURlc2NyaXB0b3JTaWduYXR1cmUnKVxuICAgICAgICAgICAgLndvcmQzMmx1KCdjcmMzMicpXG4gICAgICAgICAgICAud29yZDY0bHUoJ2NvbXByZXNzZWRTaXplJylcbiAgICAgICAgICAgIC53b3JkNjRsdSgndW5jb21wcmVzc2VkU2l6ZScpXG4gICAgICAgICAgICAudmFycztcblxuICAgICAgICByZXR1cm4gdmFycztcbiAgICB9XG5cbiAgICB2YXIgdmFycyA9IGJpbmFyeS5wYXJzZShkYXRhKVxuICAgICAgICAud29yZDMybHUoJ2RhdGFEZXNjcmlwdG9yU2lnbmF0dXJlJylcbiAgICAgICAgLndvcmQzMmx1KCdjcmMzMicpXG4gICAgICAgIC53b3JkMzJsdSgnY29tcHJlc3NlZFNpemUnKVxuICAgICAgICAud29yZDMybHUoJ3VuY29tcHJlc3NlZFNpemUnKVxuICAgICAgICAudmFycztcblxuICAgIHJldHVybiB2YXJzO1xufVxuXG5VbnppcFN0cmVhbS5wcm90b3R5cGUuX3JlYWRDZW50cmFsRGlyZWN0b3J5RW50cnkgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgIHZhciB2YXJzID0gYmluYXJ5LnBhcnNlKGRhdGEpXG4gICAgICAgIC53b3JkMTZsdSgndmVyc2lvbk1hZGVCeScpXG4gICAgICAgIC53b3JkMTZsdSgndmVyc2lvbnNOZWVkZWRUb0V4dHJhY3QnKVxuICAgICAgICAud29yZDE2bHUoJ2ZsYWdzJylcbiAgICAgICAgLndvcmQxNmx1KCdjb21wcmVzc2lvbk1ldGhvZCcpXG4gICAgICAgIC53b3JkMTZsdSgnbGFzdE1vZGlmaWVkVGltZScpXG4gICAgICAgIC53b3JkMTZsdSgnbGFzdE1vZGlmaWVkRGF0ZScpXG4gICAgICAgIC53b3JkMzJsdSgnY3JjMzInKVxuICAgICAgICAud29yZDMybHUoJ2NvbXByZXNzZWRTaXplJylcbiAgICAgICAgLndvcmQzMmx1KCd1bmNvbXByZXNzZWRTaXplJylcbiAgICAgICAgLndvcmQxNmx1KCdmaWxlTmFtZUxlbmd0aCcpXG4gICAgICAgIC53b3JkMTZsdSgnZXh0cmFGaWVsZExlbmd0aCcpXG4gICAgICAgIC53b3JkMTZsdSgnZmlsZUNvbW1lbnRMZW5ndGgnKVxuICAgICAgICAud29yZDE2bHUoJ2Rpc2tOdW1iZXInKVxuICAgICAgICAud29yZDE2bHUoJ2ludGVybmFsRmlsZUF0dHJpYnV0ZXMnKVxuICAgICAgICAud29yZDMybHUoJ2V4dGVybmFsRmlsZUF0dHJpYnV0ZXMnKVxuICAgICAgICAud29yZDMybHUoJ29mZnNldFRvTG9jYWxGaWxlSGVhZGVyJylcbiAgICAgICAgLnZhcnM7XG5cbiAgICByZXR1cm4gdmFycztcbn1cblxuVW56aXBTdHJlYW0ucHJvdG90eXBlLl9yZWFkRW5kT2ZDZW50cmFsRGlyZWN0b3J5NjQgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgIHZhciB2YXJzID0gYmluYXJ5LnBhcnNlKGRhdGEpXG4gICAgICAgIC53b3JkNjRsdSgnY2VudHJhbERpcmVjdG9yeVJlY29yZFNpemUnKVxuICAgICAgICAud29yZDE2bHUoJ3ZlcnNpb25NYWRlQnknKVxuICAgICAgICAud29yZDE2bHUoJ3ZlcnNpb25zTmVlZGVkVG9FeHRyYWN0JylcbiAgICAgICAgLndvcmQzMmx1KCdkaXNrTnVtYmVyJylcbiAgICAgICAgLndvcmQzMmx1KCdkaXNrTnVtYmVyV2l0aENlbnRyYWxEaXJlY3RvcnlTdGFydCcpXG4gICAgICAgIC53b3JkNjRsdSgnY2VudHJhbERpcmVjdG9yeUVudHJpZXMnKVxuICAgICAgICAud29yZDY0bHUoJ3RvdGFsQ2VudHJhbERpcmVjdG9yeUVudHJpZXMnKVxuICAgICAgICAud29yZDY0bHUoJ3NpemVPZkNlbnRyYWxEaXJlY3RvcnknKVxuICAgICAgICAud29yZDY0bHUoJ29mZnNldFRvU3RhcnRPZkNlbnRyYWxEaXJlY3RvcnknKVxuICAgICAgICAudmFycztcblxuICAgIHJldHVybiB2YXJzO1xufVxuXG5VbnppcFN0cmVhbS5wcm90b3R5cGUuX3JlYWRFbmRPZkNlbnRyYWxEaXJlY3RvcnkgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgIHZhciB2YXJzID0gYmluYXJ5LnBhcnNlKGRhdGEpXG4gICAgICAgIC53b3JkMTZsdSgnZGlza051bWJlcicpXG4gICAgICAgIC53b3JkMTZsdSgnZGlza1N0YXJ0JylcbiAgICAgICAgLndvcmQxNmx1KCdjZW50cmFsRGlyZWN0b3J5RW50cmllcycpXG4gICAgICAgIC53b3JkMTZsdSgndG90YWxDZW50cmFsRGlyZWN0b3J5RW50cmllcycpXG4gICAgICAgIC53b3JkMzJsdSgnc2l6ZU9mQ2VudHJhbERpcmVjdG9yeScpXG4gICAgICAgIC53b3JkMzJsdSgnb2Zmc2V0VG9TdGFydE9mQ2VudHJhbERpcmVjdG9yeScpXG4gICAgICAgIC53b3JkMTZsdSgnY29tbWVudExlbmd0aCcpXG4gICAgICAgIC52YXJzO1xuXG4gICAgcmV0dXJuIHZhcnM7XG59XG5cbmNvbnN0IGNwNDM3ID0gJ1xcdTAwMDDimLrimLvimaXimabimaPimaDigKLil5jil4vil5nimYLimYDimarimavimLzilrril4TihpXigLzCtsKn4pas4oao4oaR4oaT4oaS4oaQ4oif4oaU4pay4pa8ICFcIiMkJSZcXCcoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX7ijILDh8O8w6nDosOkw6DDpcOnw6rDq8Oow6/DrsOsw4TDhcOJw6bDhsO0w7bDssO7w7nDv8OWw5zCosKjwqXigqfGksOhw63Ds8O6w7HDkcKqwrrCv+KMkMKswr3CvMKhwqvCu+KWkeKWkuKWk+KUguKUpOKVoeKVouKVluKVleKVo+KVkeKVl+KVneKVnOKVm+KUkOKUlOKUtOKUrOKUnOKUgOKUvOKVnuKVn+KVmuKVlOKVqeKVpuKVoOKVkOKVrOKVp+KVqOKVpOKVpeKVmeKVmOKVkuKVk+KVq+KVquKUmOKUjOKWiOKWhOKWjOKWkOKWgM6xw5/Ok8+AzqPPg8K1z4TOps6YzqnOtOKIns+GzrXiiKniiaHCseKJpeKJpOKMoOKMocO34omIwrDiiJnCt+KImuKBv8Ky4pagICc7XG5cblVuemlwU3RyZWFtLnByb3RvdHlwZS5fZGVjb2RlU3RyaW5nID0gZnVuY3Rpb24gKGJ1ZmZlciwgaXNVdGY4KSB7XG4gICAgaWYgKGlzVXRmOCkge1xuICAgICAgICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCd1dGY4Jyk7XG4gICAgfVxuICAgIC8vIGFsbG93IHBhc3NpbmcgY3VzdG9tIGRlY29kZXJcbiAgICBpZiAodGhpcy5vcHRpb25zLmRlY29kZVN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmRlY29kZVN0cmluZyhidWZmZXIpO1xuICAgIH1cbiAgICBsZXQgcmVzdWx0ID0gXCJcIjtcbiAgICBmb3IgKHZhciBpPTA7IGk8YnVmZmVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlc3VsdCArPSBjcDQzN1tidWZmZXJbaV1dO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5VbnppcFN0cmVhbS5wcm90b3R5cGUuX3BhcnNlT3JPdXRwdXQgPSBmdW5jdGlvbiAoZW5jb2RpbmcsIGNiKSB7XG4gICAgdmFyIGNvbnN1bWU7XG4gICAgd2hpbGUgKChjb25zdW1lID0gdGhpcy5wcm9jZXNzRGF0YUNodW5rKHRoaXMuZGF0YSkpID4gMCkge1xuICAgICAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGEuc2xpY2UoY29uc3VtZSk7XG4gICAgICAgIGlmICh0aGlzLmRhdGEubGVuZ3RoID09PSAwKSBicmVhaztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zdGF0ZSA9PT0gc3RhdGVzLkZJTEVfREFUQSkge1xuICAgICAgICBpZiAodGhpcy5vdXRTdHJlYW1JbmZvLmxpbWl0ID49IDApIHtcbiAgICAgICAgICAgIHZhciByZW1haW5pbmcgPSB0aGlzLm91dFN0cmVhbUluZm8ubGltaXQgLSB0aGlzLm91dFN0cmVhbUluZm8ud3JpdHRlbjtcbiAgICAgICAgICAgIHZhciBwYWNrZXQ7XG4gICAgICAgICAgICBpZiAocmVtYWluaW5nIDwgdGhpcy5kYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHBhY2tldCA9IHRoaXMuZGF0YS5zbGljZSgwLCByZW1haW5pbmcpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IHRoaXMuZGF0YS5zbGljZShyZW1haW5pbmcpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwYWNrZXQgPSB0aGlzLmRhdGE7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gbmV3IEJ1ZmZlcignJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMub3V0U3RyZWFtSW5mby53cml0dGVuICs9IHBhY2tldC5sZW5ndGg7XG4gICAgICAgICAgICBpZiAodGhpcy5vdXRTdHJlYW1JbmZvLmxpbWl0ID09PSB0aGlzLm91dFN0cmVhbUluZm8ud3JpdHRlbikge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZXMuU1RBUlQ7XG5cbiAgICAgICAgICAgICAgICB0aGlzLm91dFN0cmVhbUluZm8uc3RyZWFtLmVuZChwYWNrZXQsIGVuY29kaW5nLCBjYik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMub3V0U3RyZWFtSW5mby5zdHJlYW0ud3JpdGUocGFja2V0LCBlbmNvZGluZywgY2IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHBhY2tldCA9IHRoaXMuZGF0YTtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IG5ldyBCdWZmZXIoJycpO1xuXG4gICAgICAgICAgICB0aGlzLm91dFN0cmVhbUluZm8ud3JpdHRlbiArPSBwYWNrZXQubGVuZ3RoO1xuICAgICAgICAgICAgdmFyIG91dHB1dFN0cmVhbSA9IHRoaXMub3V0U3RyZWFtSW5mby5zdHJlYW07XG4gICAgICAgICAgICBvdXRwdXRTdHJlYW0ud3JpdGUocGFja2V0LCBlbmNvZGluZywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXRlID09PSBzdGF0ZXMuRklMRV9EQVRBX0VORCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGVzLlNUQVJUO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3V0cHV0U3RyZWFtLmVuZChjYik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNiKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyB3ZSd2ZSB3cml0dGVuIHRvIHRoZSBvdXRwdXQgc3RyZWFtLCBsZXR0aW5nIHRoYXQgd3JpdGUgZGVhbCB3aXRoIHRoZSBjYWxsYmFja1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY2IoKTtcbn1cblxuVW56aXBTdHJlYW0ucHJvdG90eXBlLmRyYWluQWxsID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuX2RyYWluQWxsRW50cmllcyA9IHRydWU7XG59XG5cblVuemlwU3RyZWFtLnByb3RvdHlwZS5fdHJhbnNmb3JtID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgaWYgKHNlbGYuZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHNlbGYuZGF0YSA9IEJ1ZmZlci5jb25jYXQoW3NlbGYuZGF0YSwgY2h1bmtdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBzZWxmLmRhdGEgPSBjaHVuaztcbiAgICB9XG5cbiAgICB2YXIgc3RhcnREYXRhTGVuZ3RoID0gc2VsZi5kYXRhLmxlbmd0aDtcbiAgICB2YXIgZG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHNlbGYuZGF0YS5sZW5ndGggPiAwICYmIHNlbGYuZGF0YS5sZW5ndGggPCBzdGFydERhdGFMZW5ndGgpIHtcbiAgICAgICAgICAgIHN0YXJ0RGF0YUxlbmd0aCA9IHNlbGYuZGF0YS5sZW5ndGg7XG4gICAgICAgICAgICBzZWxmLl9wYXJzZU9yT3V0cHV0KGVuY29kaW5nLCBkb25lKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjYigpO1xuICAgIH07XG4gICAgc2VsZi5fcGFyc2VPck91dHB1dChlbmNvZGluZywgZG9uZSk7XG59XG5cblVuemlwU3RyZWFtLnByb3RvdHlwZS5fZmx1c2ggPSBmdW5jdGlvbiAoY2IpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgaWYgKHNlbGYuZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHNlbGYuX3BhcnNlT3JPdXRwdXQoJ2J1ZmZlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChzZWxmLmRhdGEubGVuZ3RoID4gMCkgcmV0dXJuIHNldEltbWVkaWF0ZShmdW5jdGlvbiAoKSB7IHNlbGYuX2ZsdXNoKGNiKTsgfSk7XG4gICAgICAgICAgICBjYigpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHNlbGYuc3RhdGUgPT09IHN0YXRlcy5GSUxFX0RBVEEpIHtcbiAgICAgICAgLy8gdWggb2gsIHNvbWV0aGluZyB3ZW50IHdyb25nXG4gICAgICAgIHJldHVybiBjYihuZXcgRXJyb3IoXCJTdHJlYW0gZmluaXNoZWQgaW4gYW4gaW52YWxpZCBzdGF0ZSwgdW5jb21wcmVzc2lvbiBmYWlsZWRcIikpO1xuICAgIH1cblxuICAgIHNldEltbWVkaWF0ZShjYik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVW56aXBTdHJlYW07XG4iLAogICAgInZhciBUcmFuc2Zvcm0gPSByZXF1aXJlKCdzdHJlYW0nKS5UcmFuc2Zvcm07XG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbnZhciBVbnppcFN0cmVhbSA9IHJlcXVpcmUoJy4vdW56aXAtc3RyZWFtJyk7XG5cbmZ1bmN0aW9uIFBhcnNlclN0cmVhbShvcHRzKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFBhcnNlclN0cmVhbSkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQYXJzZXJTdHJlYW0ob3B0cyk7XG4gICAgfVxuXG4gICAgdmFyIHRyYW5zZm9ybU9wdHMgPSBvcHRzIHx8IHt9O1xuICAgIFRyYW5zZm9ybS5jYWxsKHRoaXMsIHsgcmVhZGFibGVPYmplY3RNb2RlOiB0cnVlIH0pO1xuXG4gICAgdGhpcy5vcHRzID0gb3B0cyB8fCB7fTtcbiAgICB0aGlzLnVuemlwU3RyZWFtID0gbmV3IFVuemlwU3RyZWFtKHRoaXMub3B0cyk7XG5cbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy51bnppcFN0cmVhbS5vbignZW50cnknLCBmdW5jdGlvbihlbnRyeSkge1xuICAgICAgICBzZWxmLnB1c2goZW50cnkpO1xuICAgIH0pO1xuICAgIHRoaXMudW56aXBTdHJlYW0ub24oJ2Vycm9yJywgZnVuY3Rpb24oZXJyb3IpIHtcbiAgICAgICAgc2VsZi5lbWl0KCdlcnJvcicsIGVycm9yKTtcbiAgICB9KTtcbn1cblxudXRpbC5pbmhlcml0cyhQYXJzZXJTdHJlYW0sIFRyYW5zZm9ybSk7XG5cblBhcnNlclN0cmVhbS5wcm90b3R5cGUuX3RyYW5zZm9ybSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gICAgdGhpcy51bnppcFN0cmVhbS53cml0ZShjaHVuaywgZW5jb2RpbmcsIGNiKTtcbn1cblxuUGFyc2VyU3RyZWFtLnByb3RvdHlwZS5fZmx1c2ggPSBmdW5jdGlvbiAoY2IpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy51bnppcFN0cmVhbS5lbmQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24oKSB7IHNlbGYuZW1pdCgnY2xvc2UnKTsgfSk7XG4gICAgICAgIGNiKCk7XG4gICAgfSk7XG59XG5cblBhcnNlclN0cmVhbS5wcm90b3R5cGUub24gPSBmdW5jdGlvbihldmVudE5hbWUsIGZuKSB7XG4gICAgaWYgKGV2ZW50TmFtZSA9PT0gJ2VudHJ5Jykge1xuICAgICAgICByZXR1cm4gVHJhbnNmb3JtLnByb3RvdHlwZS5vbi5jYWxsKHRoaXMsICdkYXRhJywgZm4pO1xuICAgIH1cbiAgICByZXR1cm4gVHJhbnNmb3JtLnByb3RvdHlwZS5vbi5jYWxsKHRoaXMsIGV2ZW50TmFtZSwgZm4pO1xufVxuXG5QYXJzZXJTdHJlYW0ucHJvdG90eXBlLmRyYWluQWxsID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMudW56aXBTdHJlYW0uZHJhaW5BbGwoKTtcbiAgICByZXR1cm4gdGhpcy5waXBlKG5ldyBUcmFuc2Zvcm0oeyBvYmplY3RNb2RlOiB0cnVlLCB0cmFuc2Zvcm06IGZ1bmN0aW9uIChkLCBlLCBjYikgeyBjYigpOyB9IH0pKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBQYXJzZXJTdHJlYW07XG4iLAogICAgInZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xudmFyIGZzID0gcmVxdWlyZSgnZnMnKTtcbnZhciBfMDc3NyA9IHBhcnNlSW50KCcwNzc3JywgOCk7XG5cbm1vZHVsZS5leHBvcnRzID0gbWtkaXJQLm1rZGlycCA9IG1rZGlyUC5ta2RpclAgPSBta2RpclA7XG5cbmZ1bmN0aW9uIG1rZGlyUCAocCwgb3B0cywgZiwgbWFkZSkge1xuICAgIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBmID0gb3B0cztcbiAgICAgICAgb3B0cyA9IHt9O1xuICAgIH1cbiAgICBlbHNlIGlmICghb3B0cyB8fCB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgb3B0cyA9IHsgbW9kZTogb3B0cyB9O1xuICAgIH1cbiAgICBcbiAgICB2YXIgbW9kZSA9IG9wdHMubW9kZTtcbiAgICB2YXIgeGZzID0gb3B0cy5mcyB8fCBmcztcbiAgICBcbiAgICBpZiAobW9kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG1vZGUgPSBfMDc3N1xuICAgIH1cbiAgICBpZiAoIW1hZGUpIG1hZGUgPSBudWxsO1xuICAgIFxuICAgIHZhciBjYiA9IGYgfHwgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gZnVuY3Rpb24gKCkge307XG4gICAgcCA9IHBhdGgucmVzb2x2ZShwKTtcbiAgICBcbiAgICB4ZnMubWtkaXIocCwgbW9kZSwgZnVuY3Rpb24gKGVyKSB7XG4gICAgICAgIGlmICghZXIpIHtcbiAgICAgICAgICAgIG1hZGUgPSBtYWRlIHx8IHA7XG4gICAgICAgICAgICByZXR1cm4gY2IobnVsbCwgbWFkZSk7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChlci5jb2RlKSB7XG4gICAgICAgICAgICBjYXNlICdFTk9FTlQnOlxuICAgICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgICAgIGlmIChwYXRoLmRpcm5hbWUocCkgPT09IHApIHJldHVybiBjYihlcik7XG4gICAgICAgICAgICAgICAgbWtkaXJQKHBhdGguZGlybmFtZShwKSwgb3B0cywgZnVuY3Rpb24gKGVyLCBtYWRlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXIpIGNiKGVyLCBtYWRlKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBta2RpclAocCwgb3B0cywgY2IsIG1hZGUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBJbiB0aGUgY2FzZSBvZiBhbnkgb3RoZXIgZXJyb3IsIGp1c3Qgc2VlIGlmIHRoZXJlJ3MgYSBkaXJcbiAgICAgICAgICAgIC8vIHRoZXJlIGFscmVhZHkuICBJZiBzbywgdGhlbiBob29yYXkhICBJZiBub3QsIHRoZW4gc29tZXRoaW5nXG4gICAgICAgICAgICAvLyBpcyBib3JrZWQuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHhmcy5zdGF0KHAsIGZ1bmN0aW9uIChlcjIsIHN0YXQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlIHN0YXQgZmFpbHMsIHRoZW4gdGhhdCdzIHN1cGVyIHdlaXJkLlxuICAgICAgICAgICAgICAgICAgICAvLyBsZXQgdGhlIG9yaWdpbmFsIGVycm9yIGJlIHRoZSBmYWlsdXJlIHJlYXNvbi5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGVyMiB8fCAhc3RhdC5pc0RpcmVjdG9yeSgpKSBjYihlciwgbWFkZSlcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBjYihudWxsLCBtYWRlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG5ta2RpclAuc3luYyA9IGZ1bmN0aW9uIHN5bmMgKHAsIG9wdHMsIG1hZGUpIHtcbiAgICBpZiAoIW9wdHMgfHwgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIG9wdHMgPSB7IG1vZGU6IG9wdHMgfTtcbiAgICB9XG4gICAgXG4gICAgdmFyIG1vZGUgPSBvcHRzLm1vZGU7XG4gICAgdmFyIHhmcyA9IG9wdHMuZnMgfHwgZnM7XG4gICAgXG4gICAgaWYgKG1vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBtb2RlID0gXzA3NzdcbiAgICB9XG4gICAgaWYgKCFtYWRlKSBtYWRlID0gbnVsbDtcblxuICAgIHAgPSBwYXRoLnJlc29sdmUocCk7XG5cbiAgICB0cnkge1xuICAgICAgICB4ZnMubWtkaXJTeW5jKHAsIG1vZGUpO1xuICAgICAgICBtYWRlID0gbWFkZSB8fCBwO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyMCkge1xuICAgICAgICBzd2l0Y2ggKGVycjAuY29kZSkge1xuICAgICAgICAgICAgY2FzZSAnRU5PRU5UJyA6XG4gICAgICAgICAgICAgICAgbWFkZSA9IHN5bmMocGF0aC5kaXJuYW1lKHApLCBvcHRzLCBtYWRlKTtcbiAgICAgICAgICAgICAgICBzeW5jKHAsIG9wdHMsIG1hZGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBJbiB0aGUgY2FzZSBvZiBhbnkgb3RoZXIgZXJyb3IsIGp1c3Qgc2VlIGlmIHRoZXJlJ3MgYSBkaXJcbiAgICAgICAgICAgIC8vIHRoZXJlIGFscmVhZHkuICBJZiBzbywgdGhlbiBob29yYXkhICBJZiBub3QsIHRoZW4gc29tZXRoaW5nXG4gICAgICAgICAgICAvLyBpcyBib3JrZWQuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHZhciBzdGF0O1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXQgPSB4ZnMuc3RhdFN5bmMocCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIxKSAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVycjA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgICAgIGlmICghc3RhdC5pc0RpcmVjdG9yeSgpKSB0aHJvdyBlcnIwO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hZGU7XG59O1xuIiwKICAgICJ2YXIgZnMgPSByZXF1aXJlKCdmcycpO1xudmFyIHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbnZhciBta2RpcnAgPSByZXF1aXJlKCdta2RpcnAnKTtcbnZhciBUcmFuc2Zvcm0gPSByZXF1aXJlKCdzdHJlYW0nKS5UcmFuc2Zvcm07XG52YXIgVW56aXBTdHJlYW0gPSByZXF1aXJlKCcuL3VuemlwLXN0cmVhbScpO1xuXG5mdW5jdGlvbiBFeHRyYWN0IChvcHRzKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEV4dHJhY3QpKVxuICAgIHJldHVybiBuZXcgRXh0cmFjdChvcHRzKTtcblxuICAgIFRyYW5zZm9ybS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5vcHRzID0gb3B0cyB8fCB7fTtcbiAgICB0aGlzLnVuemlwU3RyZWFtID0gbmV3IFVuemlwU3RyZWFtKHRoaXMub3B0cyk7XG4gICAgdGhpcy51bmZpbmlzaGVkRW50cmllcyA9IDA7XG4gICAgdGhpcy5hZnRlckZsdXNoV2FpdCA9IGZhbHNlO1xuICAgIHRoaXMuY3JlYXRlZERpcmVjdG9yaWVzID0ge307XG5cbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy51bnppcFN0cmVhbS5vbignZW50cnknLCB0aGlzLl9wcm9jZXNzRW50cnkuYmluZCh0aGlzKSk7XG4gICAgdGhpcy51bnppcFN0cmVhbS5vbignZXJyb3InLCBmdW5jdGlvbihlcnJvcikge1xuICAgICAgICBzZWxmLmVtaXQoJ2Vycm9yJywgZXJyb3IpO1xuICAgIH0pO1xufVxuXG51dGlsLmluaGVyaXRzKEV4dHJhY3QsIFRyYW5zZm9ybSk7XG5cbkV4dHJhY3QucHJvdG90eXBlLl90cmFuc2Zvcm0gPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICAgIHRoaXMudW56aXBTdHJlYW0ud3JpdGUoY2h1bmssIGVuY29kaW5nLCBjYik7XG59XG5cbkV4dHJhY3QucHJvdG90eXBlLl9mbHVzaCA9IGZ1bmN0aW9uIChjYikge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHZhciBhbGxEb25lID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24oKSB7IHNlbGYuZW1pdCgnY2xvc2UnKTsgfSk7XG4gICAgICAgIGNiKCk7XG4gICAgfVxuXG4gICAgdGhpcy51bnppcFN0cmVhbS5lbmQoZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmIChzZWxmLnVuZmluaXNoZWRFbnRyaWVzID4gMCkge1xuICAgICAgICAgICAgc2VsZi5hZnRlckZsdXNoV2FpdCA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gc2VsZi5vbignYXdhaXQtZmluaXNoZWQnLCBhbGxEb25lKTtcbiAgICAgICAgfVxuICAgICAgICBhbGxEb25lKCk7XG4gICAgfSk7XG59XG5cbkV4dHJhY3QucHJvdG90eXBlLl9wcm9jZXNzRW50cnkgPSBmdW5jdGlvbiAoZW50cnkpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIGRlc3RQYXRoID0gcGF0aC5qb2luKHRoaXMub3B0cy5wYXRoLCBlbnRyeS5wYXRoKTtcbiAgICB2YXIgZGlyZWN0b3J5ID0gZW50cnkuaXNEaXJlY3RvcnkgPyBkZXN0UGF0aCA6IHBhdGguZGlybmFtZShkZXN0UGF0aCk7XG5cbiAgICB0aGlzLnVuZmluaXNoZWRFbnRyaWVzKys7XG5cbiAgICB2YXIgd3JpdGVGaWxlRm4gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHBpcGVkU3RyZWFtID0gZnMuY3JlYXRlV3JpdGVTdHJlYW0oZGVzdFBhdGgpO1xuXG4gICAgICAgIHBpcGVkU3RyZWFtLm9uKCdjbG9zZScsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgc2VsZi51bmZpbmlzaGVkRW50cmllcy0tO1xuICAgICAgICAgICAgc2VsZi5fbm90aWZ5QXdhaXRlcigpO1xuICAgICAgICB9KTtcbiAgICAgICAgcGlwZWRTdHJlYW0ub24oJ2Vycm9yJywgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICBzZWxmLmVtaXQoJ2Vycm9yJywgZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICAgICAgZW50cnkucGlwZShwaXBlZFN0cmVhbSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY3JlYXRlZERpcmVjdG9yaWVzW2RpcmVjdG9yeV0gfHwgZGlyZWN0b3J5ID09PSAnLicpIHtcbiAgICAgICAgcmV0dXJuIHdyaXRlRmlsZUZuKCk7XG4gICAgfVxuXG4gICAgLy8gRklYTUU6IGNhbGxzIHRvIG1rZGlycCBjYW4gc3RpbGwgYmUgZHVwbGljYXRlZFxuICAgIG1rZGlycChkaXJlY3RvcnksIGZ1bmN0aW9uKGVycikge1xuICAgICAgICBpZiAoZXJyKSByZXR1cm4gc2VsZi5lbWl0KCdlcnJvcicsIGVycik7XG5cbiAgICAgICAgc2VsZi5jcmVhdGVkRGlyZWN0b3JpZXNbZGlyZWN0b3J5XSA9IHRydWU7XG5cbiAgICAgICAgaWYgKGVudHJ5LmlzRGlyZWN0b3J5KSB7XG4gICAgICAgICAgICBzZWxmLnVuZmluaXNoZWRFbnRyaWVzLS07XG4gICAgICAgICAgICBzZWxmLl9ub3RpZnlBd2FpdGVyKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB3cml0ZUZpbGVGbigpO1xuICAgIH0pO1xufVxuXG5FeHRyYWN0LnByb3RvdHlwZS5fbm90aWZ5QXdhaXRlciA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLmFmdGVyRmx1c2hXYWl0ICYmIHRoaXMudW5maW5pc2hlZEVudHJpZXMgPT09IDApIHtcbiAgICAgICAgdGhpcy5lbWl0KCdhd2FpdC1maW5pc2hlZCcpO1xuICAgICAgICB0aGlzLmFmdGVyRmx1c2hXYWl0ID0gZmFsc2U7XG4gICAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEV4dHJhY3Q7IiwKICAgICIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuUGFyc2UgPSByZXF1aXJlKCcuL2xpYi9wYXJzZXItc3RyZWFtJyk7XG5leHBvcnRzLkV4dHJhY3QgPSByZXF1aXJlKCcuL2xpYi9leHRyYWN0Jyk7IiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRvd25sb2FkQXJ0aWZhY3RJbnRlcm5hbCA9IGV4cG9ydHMuZG93bmxvYWRBcnRpZmFjdFB1YmxpYyA9IGV4cG9ydHMuc3RyZWFtRXh0cmFjdEV4dGVybmFsID0gdm9pZCAwO1xuY29uc3QgcHJvbWlzZXNfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiZnMvcHJvbWlzZXNcIikpO1xuY29uc3QgZ2l0aHViID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJAYWN0aW9ucy9naXRodWJcIikpO1xuY29uc3QgY29yZSA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiQGFjdGlvbnMvY29yZVwiKSk7XG5jb25zdCBodHRwQ2xpZW50ID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJAYWN0aW9ucy9odHRwLWNsaWVudFwiKSk7XG5jb25zdCB1bnppcF9zdHJlYW1fMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwidW56aXAtc3RyZWFtXCIpKTtcbmNvbnN0IHVzZXJfYWdlbnRfMSA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvdXNlci1hZ2VudFwiKTtcbmNvbnN0IGNvbmZpZ18xID0gcmVxdWlyZShcIi4uL3NoYXJlZC9jb25maWdcIik7XG5jb25zdCBhcnRpZmFjdF90d2lycF9jbGllbnRfMSA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvYXJ0aWZhY3QtdHdpcnAtY2xpZW50XCIpO1xuY29uc3QgZ2VuZXJhdGVkXzEgPSByZXF1aXJlKFwiLi4vLi4vZ2VuZXJhdGVkXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uL3NoYXJlZC91dGlsXCIpO1xuY29uc3QgZXJyb3JzXzEgPSByZXF1aXJlKFwiLi4vc2hhcmVkL2Vycm9yc1wiKTtcbmNvbnN0IHNjcnViUXVlcnlQYXJhbWV0ZXJzID0gKHVybCkgPT4ge1xuICAgIGNvbnN0IHBhcnNlZCA9IG5ldyBVUkwodXJsKTtcbiAgICBwYXJzZWQuc2VhcmNoID0gJyc7XG4gICAgcmV0dXJuIHBhcnNlZC50b1N0cmluZygpO1xufTtcbmZ1bmN0aW9uIGV4aXN0cyhwYXRoKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHlpZWxkIHByb21pc2VzXzEuZGVmYXVsdC5hY2Nlc3MocGF0aCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChlcnJvci5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59XG5mdW5jdGlvbiBzdHJlYW1FeHRyYWN0KHVybCwgZGlyZWN0b3J5KSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgbGV0IHJldHJ5Q291bnQgPSAwO1xuICAgICAgICB3aGlsZSAocmV0cnlDb3VudCA8IDUpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgeWllbGQgc3RyZWFtRXh0cmFjdEV4dGVybmFsKHVybCwgZGlyZWN0b3J5KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICByZXRyeUNvdW50Kys7XG4gICAgICAgICAgICAgICAgY29yZS5kZWJ1ZyhgRmFpbGVkIHRvIGRvd25sb2FkIGFydGlmYWN0IGFmdGVyICR7cmV0cnlDb3VudH0gcmV0cmllcyBkdWUgdG8gJHtlcnJvci5tZXNzYWdlfS4gUmV0cnlpbmcgaW4gNSBzZWNvbmRzLi4uYCk7XG4gICAgICAgICAgICAgICAgLy8gd2FpdCA1IHNlY29uZHMgYmVmb3JlIHJldHJ5aW5nXG4gICAgICAgICAgICAgICAgeWllbGQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDUwMDApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFydGlmYWN0IGRvd25sb2FkIGZhaWxlZCBhZnRlciAke3JldHJ5Q291bnR9IHJldHJpZXMuYCk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBzdHJlYW1FeHRyYWN0RXh0ZXJuYWwodXJsLCBkaXJlY3RvcnkpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBjbGllbnQgPSBuZXcgaHR0cENsaWVudC5IdHRwQ2xpZW50KCgwLCB1c2VyX2FnZW50XzEuZ2V0VXNlckFnZW50U3RyaW5nKSgpKTtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSB5aWVsZCBjbGllbnQuZ2V0KHVybCk7XG4gICAgICAgIGlmIChyZXNwb25zZS5tZXNzYWdlLnN0YXR1c0NvZGUgIT09IDIwMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIEhUVFAgcmVzcG9uc2UgZnJvbSBibG9iIHN0b3JhZ2U6ICR7cmVzcG9uc2UubWVzc2FnZS5zdGF0dXNDb2RlfSAke3Jlc3BvbnNlLm1lc3NhZ2Uuc3RhdHVzTWVzc2FnZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0aW1lb3V0ID0gMzAgKiAxMDAwOyAvLyAzMCBzZWNvbmRzXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0aW1lckZuID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlLm1lc3NhZ2UuZGVzdHJveShuZXcgRXJyb3IoYEJsb2Igc3RvcmFnZSBjaHVuayBkaWQgbm90IHJlc3BvbmQgaW4gJHt0aW1lb3V0fW1zYCkpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCh0aW1lckZuLCB0aW1lb3V0KTtcbiAgICAgICAgICAgIHJlc3BvbnNlLm1lc3NhZ2VcbiAgICAgICAgICAgICAgICAub24oJ2RhdGEnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGltZXIucmVmcmVzaCgpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAub24oJ2Vycm9yJywgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgY29yZS5kZWJ1ZyhgcmVzcG9uc2UubWVzc2FnZTogQXJ0aWZhY3QgZG93bmxvYWQgZmFpbGVkOiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAucGlwZSh1bnppcF9zdHJlYW1fMS5kZWZhdWx0LkV4dHJhY3QoeyBwYXRoOiBkaXJlY3RvcnkgfSkpXG4gICAgICAgICAgICAgICAgLm9uKCdjbG9zZScsICgpID0+IHtcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLm9uKCdlcnJvcicsIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5leHBvcnRzLnN0cmVhbUV4dHJhY3RFeHRlcm5hbCA9IHN0cmVhbUV4dHJhY3RFeHRlcm5hbDtcbmZ1bmN0aW9uIGRvd25sb2FkQXJ0aWZhY3RQdWJsaWMoYXJ0aWZhY3RJZCwgcmVwb3NpdG9yeU93bmVyLCByZXBvc2l0b3J5TmFtZSwgdG9rZW4sIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBkb3dubG9hZFBhdGggPSB5aWVsZCByZXNvbHZlT3JDcmVhdGVEaXJlY3Rvcnkob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnBhdGgpO1xuICAgICAgICBjb25zdCBhcGkgPSBnaXRodWIuZ2V0T2N0b2tpdCh0b2tlbik7XG4gICAgICAgIGNvcmUuaW5mbyhgRG93bmxvYWRpbmcgYXJ0aWZhY3QgJyR7YXJ0aWZhY3RJZH0nIGZyb20gJyR7cmVwb3NpdG9yeU93bmVyfS8ke3JlcG9zaXRvcnlOYW1lfSdgKTtcbiAgICAgICAgY29uc3QgeyBoZWFkZXJzLCBzdGF0dXMgfSA9IHlpZWxkIGFwaS5yZXN0LmFjdGlvbnMuZG93bmxvYWRBcnRpZmFjdCh7XG4gICAgICAgICAgICBvd25lcjogcmVwb3NpdG9yeU93bmVyLFxuICAgICAgICAgICAgcmVwbzogcmVwb3NpdG9yeU5hbWUsXG4gICAgICAgICAgICBhcnRpZmFjdF9pZDogYXJ0aWZhY3RJZCxcbiAgICAgICAgICAgIGFyY2hpdmVfZm9ybWF0OiAnemlwJyxcbiAgICAgICAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgICAgICAgICByZWRpcmVjdDogJ21hbnVhbCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChzdGF0dXMgIT09IDMwMikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gZG93bmxvYWQgYXJ0aWZhY3QuIFVuZXhwZWN0ZWQgc3RhdHVzOiAke3N0YXR1c31gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IGxvY2F0aW9uIH0gPSBoZWFkZXJzO1xuICAgICAgICBpZiAoIWxvY2F0aW9uKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byByZWRpcmVjdCB0byBhcnRpZmFjdCBkb3dubG9hZCB1cmxgKTtcbiAgICAgICAgfVxuICAgICAgICBjb3JlLmluZm8oYFJlZGlyZWN0aW5nIHRvIGJsb2IgZG93bmxvYWQgdXJsOiAke3NjcnViUXVlcnlQYXJhbWV0ZXJzKGxvY2F0aW9uKX1gKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvcmUuaW5mbyhgU3RhcnRpbmcgZG93bmxvYWQgb2YgYXJ0aWZhY3QgdG86ICR7ZG93bmxvYWRQYXRofWApO1xuICAgICAgICAgICAgeWllbGQgc3RyZWFtRXh0cmFjdChsb2NhdGlvbiwgZG93bmxvYWRQYXRoKTtcbiAgICAgICAgICAgIGNvcmUuaW5mbyhgQXJ0aWZhY3QgZG93bmxvYWQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5gKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGRvd25sb2FkIGFuZCBleHRyYWN0IGFydGlmYWN0OiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgZG93bmxvYWRQYXRoIH07XG4gICAgfSk7XG59XG5leHBvcnRzLmRvd25sb2FkQXJ0aWZhY3RQdWJsaWMgPSBkb3dubG9hZEFydGlmYWN0UHVibGljO1xuZnVuY3Rpb24gZG93bmxvYWRBcnRpZmFjdEludGVybmFsKGFydGlmYWN0SWQsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBkb3dubG9hZFBhdGggPSB5aWVsZCByZXNvbHZlT3JDcmVhdGVEaXJlY3Rvcnkob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnBhdGgpO1xuICAgICAgICBjb25zdCBhcnRpZmFjdENsaWVudCA9ICgwLCBhcnRpZmFjdF90d2lycF9jbGllbnRfMS5pbnRlcm5hbEFydGlmYWN0VHdpcnBDbGllbnQpKCk7XG4gICAgICAgIGNvbnN0IHsgd29ya2Zsb3dSdW5CYWNrZW5kSWQsIHdvcmtmbG93Sm9iUnVuQmFja2VuZElkIH0gPSAoMCwgdXRpbF8xLmdldEJhY2tlbmRJZHNGcm9tVG9rZW4pKCk7XG4gICAgICAgIGNvbnN0IGxpc3RSZXEgPSB7XG4gICAgICAgICAgICB3b3JrZmxvd1J1bkJhY2tlbmRJZCxcbiAgICAgICAgICAgIHdvcmtmbG93Sm9iUnVuQmFja2VuZElkLFxuICAgICAgICAgICAgaWRGaWx0ZXI6IGdlbmVyYXRlZF8xLkludDY0VmFsdWUuY3JlYXRlKHsgdmFsdWU6IGFydGlmYWN0SWQudG9TdHJpbmcoKSB9KVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB7IGFydGlmYWN0cyB9ID0geWllbGQgYXJ0aWZhY3RDbGllbnQuTGlzdEFydGlmYWN0cyhsaXN0UmVxKTtcbiAgICAgICAgaWYgKGFydGlmYWN0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBlcnJvcnNfMS5BcnRpZmFjdE5vdEZvdW5kRXJyb3IoYE5vIGFydGlmYWN0cyBmb3VuZCBmb3IgSUQ6ICR7YXJ0aWZhY3RJZH1cXG5BcmUgeW91IHRyeWluZyB0byBkb3dubG9hZCBmcm9tIGEgZGlmZmVyZW50IHJ1bj8gVHJ5IHNwZWNpZnlpbmcgYSBnaXRodWItdG9rZW4gd2l0aCBcXGBhY3Rpb25zOnJlYWRcXGAgc2NvcGUuYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFydGlmYWN0cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBjb3JlLndhcm5pbmcoJ011bHRpcGxlIGFydGlmYWN0cyBmb3VuZCwgZGVmYXVsdGluZyB0byBmaXJzdC4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzaWduZWRSZXEgPSB7XG4gICAgICAgICAgICB3b3JrZmxvd1J1bkJhY2tlbmRJZDogYXJ0aWZhY3RzWzBdLndvcmtmbG93UnVuQmFja2VuZElkLFxuICAgICAgICAgICAgd29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQ6IGFydGlmYWN0c1swXS53b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZCxcbiAgICAgICAgICAgIG5hbWU6IGFydGlmYWN0c1swXS5uYW1lXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHsgc2lnbmVkVXJsIH0gPSB5aWVsZCBhcnRpZmFjdENsaWVudC5HZXRTaWduZWRBcnRpZmFjdFVSTChzaWduZWRSZXEpO1xuICAgICAgICBjb3JlLmluZm8oYFJlZGlyZWN0aW5nIHRvIGJsb2IgZG93bmxvYWQgdXJsOiAke3NjcnViUXVlcnlQYXJhbWV0ZXJzKHNpZ25lZFVybCl9YCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb3JlLmluZm8oYFN0YXJ0aW5nIGRvd25sb2FkIG9mIGFydGlmYWN0IHRvOiAke2Rvd25sb2FkUGF0aH1gKTtcbiAgICAgICAgICAgIHlpZWxkIHN0cmVhbUV4dHJhY3Qoc2lnbmVkVXJsLCBkb3dubG9hZFBhdGgpO1xuICAgICAgICAgICAgY29yZS5pbmZvKGBBcnRpZmFjdCBkb3dubG9hZCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LmApO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gZG93bmxvYWQgYW5kIGV4dHJhY3QgYXJ0aWZhY3Q6ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBkb3dubG9hZFBhdGggfTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZG93bmxvYWRBcnRpZmFjdEludGVybmFsID0gZG93bmxvYWRBcnRpZmFjdEludGVybmFsO1xuZnVuY3Rpb24gcmVzb2x2ZU9yQ3JlYXRlRGlyZWN0b3J5KGRvd25sb2FkUGF0aCA9ICgwLCBjb25maWdfMS5nZXRHaXRIdWJXb3Jrc3BhY2VEaXIpKCkpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBpZiAoISh5aWVsZCBleGlzdHMoZG93bmxvYWRQYXRoKSkpIHtcbiAgICAgICAgICAgIGNvcmUuZGVidWcoYEFydGlmYWN0IGRlc3RpbmF0aW9uIGZvbGRlciBkb2VzIG5vdCBleGlzdCwgY3JlYXRpbmc6ICR7ZG93bmxvYWRQYXRofWApO1xuICAgICAgICAgICAgeWllbGQgcHJvbWlzZXNfMS5kZWZhdWx0Lm1rZGlyKGRvd25sb2FkUGF0aCwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb3JlLmRlYnVnKGBBcnRpZmFjdCBkZXN0aW5hdGlvbiBmb2xkZXIgYWxyZWFkeSBleGlzdHM6ICR7ZG93bmxvYWRQYXRofWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkb3dubG9hZFBhdGg7XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kb3dubG9hZC1hcnRpZmFjdC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldFJldHJ5T3B0aW9ucyA9IHZvaWQgMDtcbmNvbnN0IGNvcmUgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIkBhY3Rpb25zL2NvcmVcIikpO1xuLy8gRGVmYXVsdHMgZm9yIGZldGNoaW5nIGFydGlmYWN0c1xuY29uc3QgZGVmYXVsdE1heFJldHJ5TnVtYmVyID0gNTtcbmNvbnN0IGRlZmF1bHRFeGVtcHRTdGF0dXNDb2RlcyA9IFs0MDAsIDQwMSwgNDAzLCA0MDQsIDQyMl07IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9vY3Rva2l0L3BsdWdpbi1yZXRyeS5qcy9ibG9iLzlhMjQ0Mzc0NmMzNTBiM2JlZWRlYzM1Y2YyNmUxOTdlYTMxOGEyNjEvc3JjL2luZGV4LnRzI0wxNFxuZnVuY3Rpb24gZ2V0UmV0cnlPcHRpb25zKGRlZmF1bHRPcHRpb25zLCByZXRyaWVzID0gZGVmYXVsdE1heFJldHJ5TnVtYmVyLCBleGVtcHRTdGF0dXNDb2RlcyA9IGRlZmF1bHRFeGVtcHRTdGF0dXNDb2Rlcykge1xuICAgIHZhciBfYTtcbiAgICBpZiAocmV0cmllcyA8PSAwKSB7XG4gICAgICAgIHJldHVybiBbeyBlbmFibGVkOiBmYWxzZSB9LCBkZWZhdWx0T3B0aW9ucy5yZXF1ZXN0XTtcbiAgICB9XG4gICAgY29uc3QgcmV0cnlPcHRpb25zID0ge1xuICAgICAgICBlbmFibGVkOiB0cnVlXG4gICAgfTtcbiAgICBpZiAoZXhlbXB0U3RhdHVzQ29kZXMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXRyeU9wdGlvbnMuZG9Ob3RSZXRyeSA9IGV4ZW1wdFN0YXR1c0NvZGVzO1xuICAgIH1cbiAgICAvLyBUaGUgR2l0SHViIHR5cGUgaGFzIHNvbWUgZGVmYXVsdHMgZm9yIGBvcHRpb25zLnJlcXVlc3RgXG4gICAgLy8gc2VlOiBodHRwczovL2dpdGh1Yi5jb20vYWN0aW9ucy90b29sa2l0L2Jsb2IvNGZiYzVjOTQxYTU3MjQ5YjE5NTYyMDE1ZWRiZDcyYWRkMTRiZTkzZC9wYWNrYWdlcy9naXRodWIvc3JjL3V0aWxzLnRzI0wxNVxuICAgIC8vIFdlIHBhc3MgdGhlc2UgaW4gaGVyZSBzbyB0aGV5IGFyZSBub3Qgb3ZlcnJpZGRlbi5cbiAgICBjb25zdCByZXF1ZXN0T3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdE9wdGlvbnMucmVxdWVzdCksIHsgcmV0cmllcyB9KTtcbiAgICBjb3JlLmRlYnVnKGBHaXRIdWIgY2xpZW50IGNvbmZpZ3VyZWQgd2l0aDogKHJldHJpZXM6ICR7cmVxdWVzdE9wdGlvbnMucmV0cmllc30sIHJldHJ5LWV4ZW1wdC1zdGF0dXMtY29kZTogJHsoX2EgPSByZXRyeU9wdGlvbnMuZG9Ob3RSZXRyeSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJ29jdG9raXQgZGVmYXVsdDogWzQwMCwgNDAxLCA0MDMsIDQwNCwgNDIyXSd9KWApO1xuICAgIHJldHVybiBbcmV0cnlPcHRpb25zLCByZXF1ZXN0T3B0aW9uc107XG59XG5leHBvcnRzLmdldFJldHJ5T3B0aW9ucyA9IGdldFJldHJ5T3B0aW9ucztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJldHJ5LW9wdGlvbnMuanMubWFwIiwKICAgICIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmNvbnN0IFZFUlNJT04gPSBcIjEuMC40XCI7XG5cbi8qKlxuICogQHBhcmFtIG9jdG9raXQgT2N0b2tpdCBpbnN0YW5jZVxuICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBwYXNzZWQgdG8gT2N0b2tpdCBjb25zdHJ1Y3RvclxuICovXG5cbmZ1bmN0aW9uIHJlcXVlc3RMb2cob2N0b2tpdCkge1xuICBvY3Rva2l0Lmhvb2sud3JhcChcInJlcXVlc3RcIiwgKHJlcXVlc3QsIG9wdGlvbnMpID0+IHtcbiAgICBvY3Rva2l0LmxvZy5kZWJ1ZyhcInJlcXVlc3RcIiwgb3B0aW9ucyk7XG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zID0gb2N0b2tpdC5yZXF1ZXN0LmVuZHBvaW50LnBhcnNlKG9wdGlvbnMpO1xuICAgIGNvbnN0IHBhdGggPSByZXF1ZXN0T3B0aW9ucy51cmwucmVwbGFjZShvcHRpb25zLmJhc2VVcmwsIFwiXCIpO1xuICAgIHJldHVybiByZXF1ZXN0KG9wdGlvbnMpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgb2N0b2tpdC5sb2cuaW5mbyhgJHtyZXF1ZXN0T3B0aW9ucy5tZXRob2R9ICR7cGF0aH0gLSAke3Jlc3BvbnNlLnN0YXR1c30gaW4gJHtEYXRlLm5vdygpIC0gc3RhcnR9bXNgKTtcbiAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9KS5jYXRjaChlcnJvciA9PiB7XG4gICAgICBvY3Rva2l0LmxvZy5pbmZvKGAke3JlcXVlc3RPcHRpb25zLm1ldGhvZH0gJHtwYXRofSAtICR7ZXJyb3Iuc3RhdHVzfSBpbiAke0RhdGUubm93KCkgLSBzdGFydH1tc2ApO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSk7XG4gIH0pO1xufVxucmVxdWVzdExvZy5WRVJTSU9OID0gVkVSU0lPTjtcblxuZXhwb3J0cy5yZXF1ZXN0TG9nID0gcmVxdWVzdExvZztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxuIiwKICAgICIvKipcbiAgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIEJvdHRsZW5lY2sgbGlicmFyeSAoTUlUKSwgY29tcGlsZWQgdG8gRVMyMDE3LCBhbmQgd2l0aG91dCBDbHVzdGVyaW5nIHN1cHBvcnQuXG4gICogaHR0cHM6Ly9naXRodWIuY29tL1NHcm9uZGluL2JvdHRsZW5lY2tcbiAgKi9cbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG5cdHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpIDpcblx0dHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKGZhY3RvcnkpIDpcblx0KGdsb2JhbC5Cb3R0bGVuZWNrID0gZmFjdG9yeSgpKTtcbn0odGhpcywgKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cdHZhciBjb21tb25qc0dsb2JhbCA9IHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbFRoaXMgOiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsIDogdHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnID8gc2VsZiA6IHt9O1xuXG5cdGZ1bmN0aW9uIGdldENqc0V4cG9ydEZyb21OYW1lc3BhY2UgKG4pIHtcblx0XHRyZXR1cm4gbiAmJiBuWydkZWZhdWx0J10gfHwgbjtcblx0fVxuXG5cdHZhciBsb2FkID0gZnVuY3Rpb24ocmVjZWl2ZWQsIGRlZmF1bHRzLCBvbnRvID0ge30pIHtcblx0ICB2YXIgaywgcmVmLCB2O1xuXHQgIGZvciAoayBpbiBkZWZhdWx0cykge1xuXHQgICAgdiA9IGRlZmF1bHRzW2tdO1xuXHQgICAgb250b1trXSA9IChyZWYgPSByZWNlaXZlZFtrXSkgIT0gbnVsbCA/IHJlZiA6IHY7XG5cdCAgfVxuXHQgIHJldHVybiBvbnRvO1xuXHR9O1xuXG5cdHZhciBvdmVyd3JpdGUgPSBmdW5jdGlvbihyZWNlaXZlZCwgZGVmYXVsdHMsIG9udG8gPSB7fSkge1xuXHQgIHZhciBrLCB2O1xuXHQgIGZvciAoayBpbiByZWNlaXZlZCkge1xuXHQgICAgdiA9IHJlY2VpdmVkW2tdO1xuXHQgICAgaWYgKGRlZmF1bHRzW2tdICE9PSB2b2lkIDApIHtcblx0ICAgICAgb250b1trXSA9IHY7XG5cdCAgICB9XG5cdCAgfVxuXHQgIHJldHVybiBvbnRvO1xuXHR9O1xuXG5cdHZhciBwYXJzZXIgPSB7XG5cdFx0bG9hZDogbG9hZCxcblx0XHRvdmVyd3JpdGU6IG92ZXJ3cml0ZVxuXHR9O1xuXG5cdHZhciBETExpc3Q7XG5cblx0RExMaXN0ID0gY2xhc3MgRExMaXN0IHtcblx0ICBjb25zdHJ1Y3RvcihpbmNyLCBkZWNyKSB7XG5cdCAgICB0aGlzLmluY3IgPSBpbmNyO1xuXHQgICAgdGhpcy5kZWNyID0gZGVjcjtcblx0ICAgIHRoaXMuX2ZpcnN0ID0gbnVsbDtcblx0ICAgIHRoaXMuX2xhc3QgPSBudWxsO1xuXHQgICAgdGhpcy5sZW5ndGggPSAwO1xuXHQgIH1cblxuXHQgIHB1c2godmFsdWUpIHtcblx0ICAgIHZhciBub2RlO1xuXHQgICAgdGhpcy5sZW5ndGgrKztcblx0ICAgIGlmICh0eXBlb2YgdGhpcy5pbmNyID09PSBcImZ1bmN0aW9uXCIpIHtcblx0ICAgICAgdGhpcy5pbmNyKCk7XG5cdCAgICB9XG5cdCAgICBub2RlID0ge1xuXHQgICAgICB2YWx1ZSxcblx0ICAgICAgcHJldjogdGhpcy5fbGFzdCxcblx0ICAgICAgbmV4dDogbnVsbFxuXHQgICAgfTtcblx0ICAgIGlmICh0aGlzLl9sYXN0ICE9IG51bGwpIHtcblx0ICAgICAgdGhpcy5fbGFzdC5uZXh0ID0gbm9kZTtcblx0ICAgICAgdGhpcy5fbGFzdCA9IG5vZGU7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICB0aGlzLl9maXJzdCA9IHRoaXMuX2xhc3QgPSBub2RlO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIHZvaWQgMDtcblx0ICB9XG5cblx0ICBzaGlmdCgpIHtcblx0ICAgIHZhciB2YWx1ZTtcblx0ICAgIGlmICh0aGlzLl9maXJzdCA9PSBudWxsKSB7XG5cdCAgICAgIHJldHVybjtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIHRoaXMubGVuZ3RoLS07XG5cdCAgICAgIGlmICh0eXBlb2YgdGhpcy5kZWNyID09PSBcImZ1bmN0aW9uXCIpIHtcblx0ICAgICAgICB0aGlzLmRlY3IoKTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgICAgdmFsdWUgPSB0aGlzLl9maXJzdC52YWx1ZTtcblx0ICAgIGlmICgodGhpcy5fZmlyc3QgPSB0aGlzLl9maXJzdC5uZXh0KSAhPSBudWxsKSB7XG5cdCAgICAgIHRoaXMuX2ZpcnN0LnByZXYgPSBudWxsO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgdGhpcy5fbGFzdCA9IG51bGw7XG5cdCAgICB9XG5cdCAgICByZXR1cm4gdmFsdWU7XG5cdCAgfVxuXG5cdCAgZmlyc3QoKSB7XG5cdCAgICBpZiAodGhpcy5fZmlyc3QgIT0gbnVsbCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fZmlyc3QudmFsdWU7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgZ2V0QXJyYXkoKSB7XG5cdCAgICB2YXIgbm9kZSwgcmVmLCByZXN1bHRzO1xuXHQgICAgbm9kZSA9IHRoaXMuX2ZpcnN0O1xuXHQgICAgcmVzdWx0cyA9IFtdO1xuXHQgICAgd2hpbGUgKG5vZGUgIT0gbnVsbCkge1xuXHQgICAgICByZXN1bHRzLnB1c2goKHJlZiA9IG5vZGUsIG5vZGUgPSBub2RlLm5leHQsIHJlZi52YWx1ZSkpO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIHJlc3VsdHM7XG5cdCAgfVxuXG5cdCAgZm9yRWFjaFNoaWZ0KGNiKSB7XG5cdCAgICB2YXIgbm9kZTtcblx0ICAgIG5vZGUgPSB0aGlzLnNoaWZ0KCk7XG5cdCAgICB3aGlsZSAobm9kZSAhPSBudWxsKSB7XG5cdCAgICAgIChjYihub2RlKSwgbm9kZSA9IHRoaXMuc2hpZnQoKSk7XG5cdCAgICB9XG5cdCAgICByZXR1cm4gdm9pZCAwO1xuXHQgIH1cblxuXHQgIGRlYnVnKCkge1xuXHQgICAgdmFyIG5vZGUsIHJlZiwgcmVmMSwgcmVmMiwgcmVzdWx0cztcblx0ICAgIG5vZGUgPSB0aGlzLl9maXJzdDtcblx0ICAgIHJlc3VsdHMgPSBbXTtcblx0ICAgIHdoaWxlIChub2RlICE9IG51bGwpIHtcblx0ICAgICAgcmVzdWx0cy5wdXNoKChyZWYgPSBub2RlLCBub2RlID0gbm9kZS5uZXh0LCB7XG5cdCAgICAgICAgdmFsdWU6IHJlZi52YWx1ZSxcblx0ICAgICAgICBwcmV2OiAocmVmMSA9IHJlZi5wcmV2KSAhPSBudWxsID8gcmVmMS52YWx1ZSA6IHZvaWQgMCxcblx0ICAgICAgICBuZXh0OiAocmVmMiA9IHJlZi5uZXh0KSAhPSBudWxsID8gcmVmMi52YWx1ZSA6IHZvaWQgMFxuXHQgICAgICB9KSk7XG5cdCAgICB9XG5cdCAgICByZXR1cm4gcmVzdWx0cztcblx0ICB9XG5cblx0fTtcblxuXHR2YXIgRExMaXN0XzEgPSBETExpc3Q7XG5cblx0dmFyIEV2ZW50cztcblxuXHRFdmVudHMgPSBjbGFzcyBFdmVudHMge1xuXHQgIGNvbnN0cnVjdG9yKGluc3RhbmNlKSB7XG5cdCAgICB0aGlzLmluc3RhbmNlID0gaW5zdGFuY2U7XG5cdCAgICB0aGlzLl9ldmVudHMgPSB7fTtcblx0ICAgIGlmICgodGhpcy5pbnN0YW5jZS5vbiAhPSBudWxsKSB8fCAodGhpcy5pbnN0YW5jZS5vbmNlICE9IG51bGwpIHx8ICh0aGlzLmluc3RhbmNlLnJlbW92ZUFsbExpc3RlbmVycyAhPSBudWxsKSkge1xuXHQgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBbiBFbWl0dGVyIGFscmVhZHkgZXhpc3RzIGZvciB0aGlzIG9iamVjdFwiKTtcblx0ICAgIH1cblx0ICAgIHRoaXMuaW5zdGFuY2Uub24gPSAobmFtZSwgY2IpID0+IHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX2FkZExpc3RlbmVyKG5hbWUsIFwibWFueVwiLCBjYik7XG5cdCAgICB9O1xuXHQgICAgdGhpcy5pbnN0YW5jZS5vbmNlID0gKG5hbWUsIGNiKSA9PiB7XG5cdCAgICAgIHJldHVybiB0aGlzLl9hZGRMaXN0ZW5lcihuYW1lLCBcIm9uY2VcIiwgY2IpO1xuXHQgICAgfTtcblx0ICAgIHRoaXMuaW5zdGFuY2UucmVtb3ZlQWxsTGlzdGVuZXJzID0gKG5hbWUgPSBudWxsKSA9PiB7XG5cdCAgICAgIGlmIChuYW1lICE9IG51bGwpIHtcblx0ICAgICAgICByZXR1cm4gZGVsZXRlIHRoaXMuX2V2ZW50c1tuYW1lXTtcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnRzID0ge307XG5cdCAgICAgIH1cblx0ICAgIH07XG5cdCAgfVxuXG5cdCAgX2FkZExpc3RlbmVyKG5hbWUsIHN0YXR1cywgY2IpIHtcblx0ICAgIHZhciBiYXNlO1xuXHQgICAgaWYgKChiYXNlID0gdGhpcy5fZXZlbnRzKVtuYW1lXSA9PSBudWxsKSB7XG5cdCAgICAgIGJhc2VbbmFtZV0gPSBbXTtcblx0ICAgIH1cblx0ICAgIHRoaXMuX2V2ZW50c1tuYW1lXS5wdXNoKHtjYiwgc3RhdHVzfSk7XG5cdCAgICByZXR1cm4gdGhpcy5pbnN0YW5jZTtcblx0ICB9XG5cblx0ICBsaXN0ZW5lckNvdW50KG5hbWUpIHtcblx0ICAgIGlmICh0aGlzLl9ldmVudHNbbmFtZV0gIT0gbnVsbCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fZXZlbnRzW25hbWVdLmxlbmd0aDtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIHJldHVybiAwO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIGFzeW5jIHRyaWdnZXIobmFtZSwgLi4uYXJncykge1xuXHQgICAgdmFyIGUsIHByb21pc2VzO1xuXHQgICAgdHJ5IHtcblx0ICAgICAgaWYgKG5hbWUgIT09IFwiZGVidWdcIikge1xuXHQgICAgICAgIHRoaXMudHJpZ2dlcihcImRlYnVnXCIsIGBFdmVudCB0cmlnZ2VyZWQ6ICR7bmFtZX1gLCBhcmdzKTtcblx0ICAgICAgfVxuXHQgICAgICBpZiAodGhpcy5fZXZlbnRzW25hbWVdID09IG51bGwpIHtcblx0ICAgICAgICByZXR1cm47XG5cdCAgICAgIH1cblx0ICAgICAgdGhpcy5fZXZlbnRzW25hbWVdID0gdGhpcy5fZXZlbnRzW25hbWVdLmZpbHRlcihmdW5jdGlvbihsaXN0ZW5lcikge1xuXHQgICAgICAgIHJldHVybiBsaXN0ZW5lci5zdGF0dXMgIT09IFwibm9uZVwiO1xuXHQgICAgICB9KTtcblx0ICAgICAgcHJvbWlzZXMgPSB0aGlzLl9ldmVudHNbbmFtZV0ubWFwKGFzeW5jKGxpc3RlbmVyKSA9PiB7XG5cdCAgICAgICAgdmFyIGUsIHJldHVybmVkO1xuXHQgICAgICAgIGlmIChsaXN0ZW5lci5zdGF0dXMgPT09IFwibm9uZVwiKSB7XG5cdCAgICAgICAgICByZXR1cm47XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmIChsaXN0ZW5lci5zdGF0dXMgPT09IFwib25jZVwiKSB7XG5cdCAgICAgICAgICBsaXN0ZW5lci5zdGF0dXMgPSBcIm5vbmVcIjtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdHJ5IHtcblx0ICAgICAgICAgIHJldHVybmVkID0gdHlwZW9mIGxpc3RlbmVyLmNiID09PSBcImZ1bmN0aW9uXCIgPyBsaXN0ZW5lci5jYiguLi5hcmdzKSA6IHZvaWQgMDtcblx0ICAgICAgICAgIGlmICh0eXBlb2YgKHJldHVybmVkICE9IG51bGwgPyByZXR1cm5lZC50aGVuIDogdm9pZCAwKSA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdCAgICAgICAgICAgIHJldHVybiAoYXdhaXQgcmV0dXJuZWQpO1xuXHQgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHJldHVybmVkO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG5cdCAgICAgICAgICBlID0gZXJyb3I7XG5cdCAgICAgICAgICB7XG5cdCAgICAgICAgICAgIHRoaXMudHJpZ2dlcihcImVycm9yXCIsIGUpO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgICAgcmV0dXJuIG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICB9KTtcblx0ICAgICAgcmV0dXJuICgoYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpKSkuZmluZChmdW5jdGlvbih4KSB7XG5cdCAgICAgICAgcmV0dXJuIHggIT0gbnVsbDtcblx0ICAgICAgfSk7XG5cdCAgICB9IGNhdGNoIChlcnJvcikge1xuXHQgICAgICBlID0gZXJyb3I7XG5cdCAgICAgIHtcblx0ICAgICAgICB0aGlzLnRyaWdnZXIoXCJlcnJvclwiLCBlKTtcblx0ICAgICAgfVxuXHQgICAgICByZXR1cm4gbnVsbDtcblx0ICAgIH1cblx0ICB9XG5cblx0fTtcblxuXHR2YXIgRXZlbnRzXzEgPSBFdmVudHM7XG5cblx0dmFyIERMTGlzdCQxLCBFdmVudHMkMSwgUXVldWVzO1xuXG5cdERMTGlzdCQxID0gRExMaXN0XzE7XG5cblx0RXZlbnRzJDEgPSBFdmVudHNfMTtcblxuXHRRdWV1ZXMgPSBjbGFzcyBRdWV1ZXMge1xuXHQgIGNvbnN0cnVjdG9yKG51bV9wcmlvcml0aWVzKSB7XG5cdCAgICB2YXIgaTtcblx0ICAgIHRoaXMuRXZlbnRzID0gbmV3IEV2ZW50cyQxKHRoaXMpO1xuXHQgICAgdGhpcy5fbGVuZ3RoID0gMDtcblx0ICAgIHRoaXMuX2xpc3RzID0gKGZ1bmN0aW9uKCkge1xuXHQgICAgICB2YXIgaiwgcmVmLCByZXN1bHRzO1xuXHQgICAgICByZXN1bHRzID0gW107XG5cdCAgICAgIGZvciAoaSA9IGogPSAxLCByZWYgPSBudW1fcHJpb3JpdGllczsgKDEgPD0gcmVmID8gaiA8PSByZWYgOiBqID49IHJlZik7IGkgPSAxIDw9IHJlZiA/ICsraiA6IC0taikge1xuXHQgICAgICAgIHJlc3VsdHMucHVzaChuZXcgRExMaXN0JDEoKCgpID0+IHtcblx0ICAgICAgICAgIHJldHVybiB0aGlzLmluY3IoKTtcblx0ICAgICAgICB9KSwgKCgpID0+IHtcblx0ICAgICAgICAgIHJldHVybiB0aGlzLmRlY3IoKTtcblx0ICAgICAgICB9KSkpO1xuXHQgICAgICB9XG5cdCAgICAgIHJldHVybiByZXN1bHRzO1xuXHQgICAgfSkuY2FsbCh0aGlzKTtcblx0ICB9XG5cblx0ICBpbmNyKCkge1xuXHQgICAgaWYgKHRoaXMuX2xlbmd0aCsrID09PSAwKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLkV2ZW50cy50cmlnZ2VyKFwibGVmdHplcm9cIik7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgZGVjcigpIHtcblx0ICAgIGlmICgtLXRoaXMuX2xlbmd0aCA9PT0gMCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5FdmVudHMudHJpZ2dlcihcInplcm9cIik7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgcHVzaChqb2IpIHtcblx0ICAgIHJldHVybiB0aGlzLl9saXN0c1tqb2Iub3B0aW9ucy5wcmlvcml0eV0ucHVzaChqb2IpO1xuXHQgIH1cblxuXHQgIHF1ZXVlZChwcmlvcml0eSkge1xuXHQgICAgaWYgKHByaW9yaXR5ICE9IG51bGwpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX2xpc3RzW3ByaW9yaXR5XS5sZW5ndGg7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICByZXR1cm4gdGhpcy5fbGVuZ3RoO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIHNoaWZ0QWxsKGZuKSB7XG5cdCAgICByZXR1cm4gdGhpcy5fbGlzdHMuZm9yRWFjaChmdW5jdGlvbihsaXN0KSB7XG5cdCAgICAgIHJldHVybiBsaXN0LmZvckVhY2hTaGlmdChmbik7XG5cdCAgICB9KTtcblx0ICB9XG5cblx0ICBnZXRGaXJzdChhcnIgPSB0aGlzLl9saXN0cykge1xuXHQgICAgdmFyIGosIGxlbiwgbGlzdDtcblx0ICAgIGZvciAoaiA9IDAsIGxlbiA9IGFyci5sZW5ndGg7IGogPCBsZW47IGorKykge1xuXHQgICAgICBsaXN0ID0gYXJyW2pdO1xuXHQgICAgICBpZiAobGlzdC5sZW5ndGggPiAwKSB7XG5cdCAgICAgICAgcmV0dXJuIGxpc3Q7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICAgIHJldHVybiBbXTtcblx0ICB9XG5cblx0ICBzaGlmdExhc3RGcm9tKHByaW9yaXR5KSB7XG5cdCAgICByZXR1cm4gdGhpcy5nZXRGaXJzdCh0aGlzLl9saXN0cy5zbGljZShwcmlvcml0eSkucmV2ZXJzZSgpKS5zaGlmdCgpO1xuXHQgIH1cblxuXHR9O1xuXG5cdHZhciBRdWV1ZXNfMSA9IFF1ZXVlcztcblxuXHR2YXIgQm90dGxlbmVja0Vycm9yO1xuXG5cdEJvdHRsZW5lY2tFcnJvciA9IGNsYXNzIEJvdHRsZW5lY2tFcnJvciBleHRlbmRzIEVycm9yIHt9O1xuXG5cdHZhciBCb3R0bGVuZWNrRXJyb3JfMSA9IEJvdHRsZW5lY2tFcnJvcjtcblxuXHR2YXIgQm90dGxlbmVja0Vycm9yJDEsIERFRkFVTFRfUFJJT1JJVFksIEpvYiwgTlVNX1BSSU9SSVRJRVMsIHBhcnNlciQxO1xuXG5cdE5VTV9QUklPUklUSUVTID0gMTA7XG5cblx0REVGQVVMVF9QUklPUklUWSA9IDU7XG5cblx0cGFyc2VyJDEgPSBwYXJzZXI7XG5cblx0Qm90dGxlbmVja0Vycm9yJDEgPSBCb3R0bGVuZWNrRXJyb3JfMTtcblxuXHRKb2IgPSBjbGFzcyBKb2Ige1xuXHQgIGNvbnN0cnVjdG9yKHRhc2ssIGFyZ3MsIG9wdGlvbnMsIGpvYkRlZmF1bHRzLCByZWplY3RPbkRyb3AsIEV2ZW50cywgX3N0YXRlcywgUHJvbWlzZSkge1xuXHQgICAgdGhpcy50YXNrID0gdGFzaztcblx0ICAgIHRoaXMuYXJncyA9IGFyZ3M7XG5cdCAgICB0aGlzLnJlamVjdE9uRHJvcCA9IHJlamVjdE9uRHJvcDtcblx0ICAgIHRoaXMuRXZlbnRzID0gRXZlbnRzO1xuXHQgICAgdGhpcy5fc3RhdGVzID0gX3N0YXRlcztcblx0ICAgIHRoaXMuUHJvbWlzZSA9IFByb21pc2U7XG5cdCAgICB0aGlzLm9wdGlvbnMgPSBwYXJzZXIkMS5sb2FkKG9wdGlvbnMsIGpvYkRlZmF1bHRzKTtcblx0ICAgIHRoaXMub3B0aW9ucy5wcmlvcml0eSA9IHRoaXMuX3Nhbml0aXplUHJpb3JpdHkodGhpcy5vcHRpb25zLnByaW9yaXR5KTtcblx0ICAgIGlmICh0aGlzLm9wdGlvbnMuaWQgPT09IGpvYkRlZmF1bHRzLmlkKSB7XG5cdCAgICAgIHRoaXMub3B0aW9ucy5pZCA9IGAke3RoaXMub3B0aW9ucy5pZH0tJHt0aGlzLl9yYW5kb21JbmRleCgpfWA7XG5cdCAgICB9XG5cdCAgICB0aGlzLnByb21pc2UgPSBuZXcgdGhpcy5Qcm9taXNlKChfcmVzb2x2ZSwgX3JlamVjdCkgPT4ge1xuXHQgICAgICB0aGlzLl9yZXNvbHZlID0gX3Jlc29sdmU7XG5cdCAgICAgIHRoaXMuX3JlamVjdCA9IF9yZWplY3Q7XG5cdCAgICB9KTtcblx0ICAgIHRoaXMucmV0cnlDb3VudCA9IDA7XG5cdCAgfVxuXG5cdCAgX3Nhbml0aXplUHJpb3JpdHkocHJpb3JpdHkpIHtcblx0ICAgIHZhciBzUHJvcGVydHk7XG5cdCAgICBzUHJvcGVydHkgPSB+fnByaW9yaXR5ICE9PSBwcmlvcml0eSA/IERFRkFVTFRfUFJJT1JJVFkgOiBwcmlvcml0eTtcblx0ICAgIGlmIChzUHJvcGVydHkgPCAwKSB7XG5cdCAgICAgIHJldHVybiAwO1xuXHQgICAgfSBlbHNlIGlmIChzUHJvcGVydHkgPiBOVU1fUFJJT1JJVElFUyAtIDEpIHtcblx0ICAgICAgcmV0dXJuIE5VTV9QUklPUklUSUVTIC0gMTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIHJldHVybiBzUHJvcGVydHk7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgX3JhbmRvbUluZGV4KCkge1xuXHQgICAgcmV0dXJuIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIpO1xuXHQgIH1cblxuXHQgIGRvRHJvcCh7ZXJyb3IsIG1lc3NhZ2UgPSBcIlRoaXMgam9iIGhhcyBiZWVuIGRyb3BwZWQgYnkgQm90dGxlbmVja1wifSA9IHt9KSB7XG5cdCAgICBpZiAodGhpcy5fc3RhdGVzLnJlbW92ZSh0aGlzLm9wdGlvbnMuaWQpKSB7XG5cdCAgICAgIGlmICh0aGlzLnJlamVjdE9uRHJvcCkge1xuXHQgICAgICAgIHRoaXMuX3JlamVjdChlcnJvciAhPSBudWxsID8gZXJyb3IgOiBuZXcgQm90dGxlbmVja0Vycm9yJDEobWVzc2FnZSkpO1xuXHQgICAgICB9XG5cdCAgICAgIHRoaXMuRXZlbnRzLnRyaWdnZXIoXCJkcm9wcGVkXCIsIHthcmdzOiB0aGlzLmFyZ3MsIG9wdGlvbnM6IHRoaXMub3B0aW9ucywgdGFzazogdGhpcy50YXNrLCBwcm9taXNlOiB0aGlzLnByb21pc2V9KTtcblx0ICAgICAgcmV0dXJuIHRydWU7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICByZXR1cm4gZmFsc2U7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgX2Fzc2VydFN0YXR1cyhleHBlY3RlZCkge1xuXHQgICAgdmFyIHN0YXR1cztcblx0ICAgIHN0YXR1cyA9IHRoaXMuX3N0YXRlcy5qb2JTdGF0dXModGhpcy5vcHRpb25zLmlkKTtcblx0ICAgIGlmICghKHN0YXR1cyA9PT0gZXhwZWN0ZWQgfHwgKGV4cGVjdGVkID09PSBcIkRPTkVcIiAmJiBzdGF0dXMgPT09IG51bGwpKSkge1xuXHQgICAgICB0aHJvdyBuZXcgQm90dGxlbmVja0Vycm9yJDEoYEludmFsaWQgam9iIHN0YXR1cyAke3N0YXR1c30sIGV4cGVjdGVkICR7ZXhwZWN0ZWR9LiBQbGVhc2Ugb3BlbiBhbiBpc3N1ZSBhdCBodHRwczovL2dpdGh1Yi5jb20vU0dyb25kaW4vYm90dGxlbmVjay9pc3N1ZXNgKTtcblx0ICAgIH1cblx0ICB9XG5cblx0ICBkb1JlY2VpdmUoKSB7XG5cdCAgICB0aGlzLl9zdGF0ZXMuc3RhcnQodGhpcy5vcHRpb25zLmlkKTtcblx0ICAgIHJldHVybiB0aGlzLkV2ZW50cy50cmlnZ2VyKFwicmVjZWl2ZWRcIiwge2FyZ3M6IHRoaXMuYXJncywgb3B0aW9uczogdGhpcy5vcHRpb25zfSk7XG5cdCAgfVxuXG5cdCAgZG9RdWV1ZShyZWFjaGVkSFdNLCBibG9ja2VkKSB7XG5cdCAgICB0aGlzLl9hc3NlcnRTdGF0dXMoXCJSRUNFSVZFRFwiKTtcblx0ICAgIHRoaXMuX3N0YXRlcy5uZXh0KHRoaXMub3B0aW9ucy5pZCk7XG5cdCAgICByZXR1cm4gdGhpcy5FdmVudHMudHJpZ2dlcihcInF1ZXVlZFwiLCB7YXJnczogdGhpcy5hcmdzLCBvcHRpb25zOiB0aGlzLm9wdGlvbnMsIHJlYWNoZWRIV00sIGJsb2NrZWR9KTtcblx0ICB9XG5cblx0ICBkb1J1bigpIHtcblx0ICAgIGlmICh0aGlzLnJldHJ5Q291bnQgPT09IDApIHtcblx0ICAgICAgdGhpcy5fYXNzZXJ0U3RhdHVzKFwiUVVFVUVEXCIpO1xuXHQgICAgICB0aGlzLl9zdGF0ZXMubmV4dCh0aGlzLm9wdGlvbnMuaWQpO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgdGhpcy5fYXNzZXJ0U3RhdHVzKFwiRVhFQ1VUSU5HXCIpO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIHRoaXMuRXZlbnRzLnRyaWdnZXIoXCJzY2hlZHVsZWRcIiwge2FyZ3M6IHRoaXMuYXJncywgb3B0aW9uczogdGhpcy5vcHRpb25zfSk7XG5cdCAgfVxuXG5cdCAgYXN5bmMgZG9FeGVjdXRlKGNoYWluZWQsIGNsZWFyR2xvYmFsU3RhdGUsIHJ1biwgZnJlZSkge1xuXHQgICAgdmFyIGVycm9yLCBldmVudEluZm8sIHBhc3NlZDtcblx0ICAgIGlmICh0aGlzLnJldHJ5Q291bnQgPT09IDApIHtcblx0ICAgICAgdGhpcy5fYXNzZXJ0U3RhdHVzKFwiUlVOTklOR1wiKTtcblx0ICAgICAgdGhpcy5fc3RhdGVzLm5leHQodGhpcy5vcHRpb25zLmlkKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIHRoaXMuX2Fzc2VydFN0YXR1cyhcIkVYRUNVVElOR1wiKTtcblx0ICAgIH1cblx0ICAgIGV2ZW50SW5mbyA9IHthcmdzOiB0aGlzLmFyZ3MsIG9wdGlvbnM6IHRoaXMub3B0aW9ucywgcmV0cnlDb3VudDogdGhpcy5yZXRyeUNvdW50fTtcblx0ICAgIHRoaXMuRXZlbnRzLnRyaWdnZXIoXCJleGVjdXRpbmdcIiwgZXZlbnRJbmZvKTtcblx0ICAgIHRyeSB7XG5cdCAgICAgIHBhc3NlZCA9IChhd2FpdCAoY2hhaW5lZCAhPSBudWxsID8gY2hhaW5lZC5zY2hlZHVsZSh0aGlzLm9wdGlvbnMsIHRoaXMudGFzaywgLi4udGhpcy5hcmdzKSA6IHRoaXMudGFzayguLi50aGlzLmFyZ3MpKSk7XG5cdCAgICAgIGlmIChjbGVhckdsb2JhbFN0YXRlKCkpIHtcblx0ICAgICAgICB0aGlzLmRvRG9uZShldmVudEluZm8pO1xuXHQgICAgICAgIGF3YWl0IGZyZWUodGhpcy5vcHRpb25zLCBldmVudEluZm8pO1xuXHQgICAgICAgIHRoaXMuX2Fzc2VydFN0YXR1cyhcIkRPTkVcIik7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc29sdmUocGFzc2VkKTtcblx0ICAgICAgfVxuXHQgICAgfSBjYXRjaCAoZXJyb3IxKSB7XG5cdCAgICAgIGVycm9yID0gZXJyb3IxO1xuXHQgICAgICByZXR1cm4gdGhpcy5fb25GYWlsdXJlKGVycm9yLCBldmVudEluZm8sIGNsZWFyR2xvYmFsU3RhdGUsIHJ1biwgZnJlZSk7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgZG9FeHBpcmUoY2xlYXJHbG9iYWxTdGF0ZSwgcnVuLCBmcmVlKSB7XG5cdCAgICB2YXIgZXJyb3IsIGV2ZW50SW5mbztcblx0ICAgIGlmICh0aGlzLl9zdGF0ZXMuam9iU3RhdHVzKHRoaXMub3B0aW9ucy5pZCA9PT0gXCJSVU5OSU5HXCIpKSB7XG5cdCAgICAgIHRoaXMuX3N0YXRlcy5uZXh0KHRoaXMub3B0aW9ucy5pZCk7XG5cdCAgICB9XG5cdCAgICB0aGlzLl9hc3NlcnRTdGF0dXMoXCJFWEVDVVRJTkdcIik7XG5cdCAgICBldmVudEluZm8gPSB7YXJnczogdGhpcy5hcmdzLCBvcHRpb25zOiB0aGlzLm9wdGlvbnMsIHJldHJ5Q291bnQ6IHRoaXMucmV0cnlDb3VudH07XG5cdCAgICBlcnJvciA9IG5ldyBCb3R0bGVuZWNrRXJyb3IkMShgVGhpcyBqb2IgdGltZWQgb3V0IGFmdGVyICR7dGhpcy5vcHRpb25zLmV4cGlyYXRpb259IG1zLmApO1xuXHQgICAgcmV0dXJuIHRoaXMuX29uRmFpbHVyZShlcnJvciwgZXZlbnRJbmZvLCBjbGVhckdsb2JhbFN0YXRlLCBydW4sIGZyZWUpO1xuXHQgIH1cblxuXHQgIGFzeW5jIF9vbkZhaWx1cmUoZXJyb3IsIGV2ZW50SW5mbywgY2xlYXJHbG9iYWxTdGF0ZSwgcnVuLCBmcmVlKSB7XG5cdCAgICB2YXIgcmV0cnksIHJldHJ5QWZ0ZXI7XG5cdCAgICBpZiAoY2xlYXJHbG9iYWxTdGF0ZSgpKSB7XG5cdCAgICAgIHJldHJ5ID0gKGF3YWl0IHRoaXMuRXZlbnRzLnRyaWdnZXIoXCJmYWlsZWRcIiwgZXJyb3IsIGV2ZW50SW5mbykpO1xuXHQgICAgICBpZiAocmV0cnkgIT0gbnVsbCkge1xuXHQgICAgICAgIHJldHJ5QWZ0ZXIgPSB+fnJldHJ5O1xuXHQgICAgICAgIHRoaXMuRXZlbnRzLnRyaWdnZXIoXCJyZXRyeVwiLCBgUmV0cnlpbmcgJHt0aGlzLm9wdGlvbnMuaWR9IGFmdGVyICR7cmV0cnlBZnRlcn0gbXNgLCBldmVudEluZm8pO1xuXHQgICAgICAgIHRoaXMucmV0cnlDb3VudCsrO1xuXHQgICAgICAgIHJldHVybiBydW4ocmV0cnlBZnRlcik7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgdGhpcy5kb0RvbmUoZXZlbnRJbmZvKTtcblx0ICAgICAgICBhd2FpdCBmcmVlKHRoaXMub3B0aW9ucywgZXZlbnRJbmZvKTtcblx0ICAgICAgICB0aGlzLl9hc3NlcnRTdGF0dXMoXCJET05FXCIpO1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9yZWplY3QoZXJyb3IpO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgZG9Eb25lKGV2ZW50SW5mbykge1xuXHQgICAgdGhpcy5fYXNzZXJ0U3RhdHVzKFwiRVhFQ1VUSU5HXCIpO1xuXHQgICAgdGhpcy5fc3RhdGVzLm5leHQodGhpcy5vcHRpb25zLmlkKTtcblx0ICAgIHJldHVybiB0aGlzLkV2ZW50cy50cmlnZ2VyKFwiZG9uZVwiLCBldmVudEluZm8pO1xuXHQgIH1cblxuXHR9O1xuXG5cdHZhciBKb2JfMSA9IEpvYjtcblxuXHR2YXIgQm90dGxlbmVja0Vycm9yJDIsIExvY2FsRGF0YXN0b3JlLCBwYXJzZXIkMjtcblxuXHRwYXJzZXIkMiA9IHBhcnNlcjtcblxuXHRCb3R0bGVuZWNrRXJyb3IkMiA9IEJvdHRsZW5lY2tFcnJvcl8xO1xuXG5cdExvY2FsRGF0YXN0b3JlID0gY2xhc3MgTG9jYWxEYXRhc3RvcmUge1xuXHQgIGNvbnN0cnVjdG9yKGluc3RhbmNlLCBzdG9yZU9wdGlvbnMsIHN0b3JlSW5zdGFuY2VPcHRpb25zKSB7XG5cdCAgICB0aGlzLmluc3RhbmNlID0gaW5zdGFuY2U7XG5cdCAgICB0aGlzLnN0b3JlT3B0aW9ucyA9IHN0b3JlT3B0aW9ucztcblx0ICAgIHRoaXMuY2xpZW50SWQgPSB0aGlzLmluc3RhbmNlLl9yYW5kb21JbmRleCgpO1xuXHQgICAgcGFyc2VyJDIubG9hZChzdG9yZUluc3RhbmNlT3B0aW9ucywgc3RvcmVJbnN0YW5jZU9wdGlvbnMsIHRoaXMpO1xuXHQgICAgdGhpcy5fbmV4dFJlcXVlc3QgPSB0aGlzLl9sYXN0UmVzZXJ2b2lyUmVmcmVzaCA9IHRoaXMuX2xhc3RSZXNlcnZvaXJJbmNyZWFzZSA9IERhdGUubm93KCk7XG5cdCAgICB0aGlzLl9ydW5uaW5nID0gMDtcblx0ICAgIHRoaXMuX2RvbmUgPSAwO1xuXHQgICAgdGhpcy5fdW5ibG9ja1RpbWUgPSAwO1xuXHQgICAgdGhpcy5yZWFkeSA9IHRoaXMuUHJvbWlzZS5yZXNvbHZlKCk7XG5cdCAgICB0aGlzLmNsaWVudHMgPSB7fTtcblx0ICAgIHRoaXMuX3N0YXJ0SGVhcnRiZWF0KCk7XG5cdCAgfVxuXG5cdCAgX3N0YXJ0SGVhcnRiZWF0KCkge1xuXHQgICAgdmFyIGJhc2U7XG5cdCAgICBpZiAoKHRoaXMuaGVhcnRiZWF0ID09IG51bGwpICYmICgoKHRoaXMuc3RvcmVPcHRpb25zLnJlc2Vydm9pclJlZnJlc2hJbnRlcnZhbCAhPSBudWxsKSAmJiAodGhpcy5zdG9yZU9wdGlvbnMucmVzZXJ2b2lyUmVmcmVzaEFtb3VudCAhPSBudWxsKSkgfHwgKCh0aGlzLnN0b3JlT3B0aW9ucy5yZXNlcnZvaXJJbmNyZWFzZUludGVydmFsICE9IG51bGwpICYmICh0aGlzLnN0b3JlT3B0aW9ucy5yZXNlcnZvaXJJbmNyZWFzZUFtb3VudCAhPSBudWxsKSkpKSB7XG5cdCAgICAgIHJldHVybiB0eXBlb2YgKGJhc2UgPSAodGhpcy5oZWFydGJlYXQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG5cdCAgICAgICAgdmFyIGFtb3VudCwgaW5jciwgbWF4aW11bSwgbm93LCByZXNlcnZvaXI7XG5cdCAgICAgICAgbm93ID0gRGF0ZS5ub3coKTtcblx0ICAgICAgICBpZiAoKHRoaXMuc3RvcmVPcHRpb25zLnJlc2Vydm9pclJlZnJlc2hJbnRlcnZhbCAhPSBudWxsKSAmJiBub3cgPj0gdGhpcy5fbGFzdFJlc2Vydm9pclJlZnJlc2ggKyB0aGlzLnN0b3JlT3B0aW9ucy5yZXNlcnZvaXJSZWZyZXNoSW50ZXJ2YWwpIHtcblx0ICAgICAgICAgIHRoaXMuX2xhc3RSZXNlcnZvaXJSZWZyZXNoID0gbm93O1xuXHQgICAgICAgICAgdGhpcy5zdG9yZU9wdGlvbnMucmVzZXJ2b2lyID0gdGhpcy5zdG9yZU9wdGlvbnMucmVzZXJ2b2lyUmVmcmVzaEFtb3VudDtcblx0ICAgICAgICAgIHRoaXMuaW5zdGFuY2UuX2RyYWluQWxsKHRoaXMuY29tcHV0ZUNhcGFjaXR5KCkpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoKHRoaXMuc3RvcmVPcHRpb25zLnJlc2Vydm9pckluY3JlYXNlSW50ZXJ2YWwgIT0gbnVsbCkgJiYgbm93ID49IHRoaXMuX2xhc3RSZXNlcnZvaXJJbmNyZWFzZSArIHRoaXMuc3RvcmVPcHRpb25zLnJlc2Vydm9pckluY3JlYXNlSW50ZXJ2YWwpIHtcblx0ICAgICAgICAgICh7XG5cdCAgICAgICAgICAgIHJlc2Vydm9pckluY3JlYXNlQW1vdW50OiBhbW91bnQsXG5cdCAgICAgICAgICAgIHJlc2Vydm9pckluY3JlYXNlTWF4aW11bTogbWF4aW11bSxcblx0ICAgICAgICAgICAgcmVzZXJ2b2lyXG5cdCAgICAgICAgICB9ID0gdGhpcy5zdG9yZU9wdGlvbnMpO1xuXHQgICAgICAgICAgdGhpcy5fbGFzdFJlc2Vydm9pckluY3JlYXNlID0gbm93O1xuXHQgICAgICAgICAgaW5jciA9IG1heGltdW0gIT0gbnVsbCA/IE1hdGgubWluKGFtb3VudCwgbWF4aW11bSAtIHJlc2Vydm9pcikgOiBhbW91bnQ7XG5cdCAgICAgICAgICBpZiAoaW5jciA+IDApIHtcblx0ICAgICAgICAgICAgdGhpcy5zdG9yZU9wdGlvbnMucmVzZXJ2b2lyICs9IGluY3I7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLmluc3RhbmNlLl9kcmFpbkFsbCh0aGlzLmNvbXB1dGVDYXBhY2l0eSgpKTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgIH0sIHRoaXMuaGVhcnRiZWF0SW50ZXJ2YWwpKSkudW5yZWYgPT09IFwiZnVuY3Rpb25cIiA/IGJhc2UudW5yZWYoKSA6IHZvaWQgMDtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIHJldHVybiBjbGVhckludGVydmFsKHRoaXMuaGVhcnRiZWF0KTtcblx0ICAgIH1cblx0ICB9XG5cblx0ICBhc3luYyBfX3B1Ymxpc2hfXyhtZXNzYWdlKSB7XG5cdCAgICBhd2FpdCB0aGlzLnlpZWxkTG9vcCgpO1xuXHQgICAgcmV0dXJuIHRoaXMuaW5zdGFuY2UuRXZlbnRzLnRyaWdnZXIoXCJtZXNzYWdlXCIsIG1lc3NhZ2UudG9TdHJpbmcoKSk7XG5cdCAgfVxuXG5cdCAgYXN5bmMgX19kaXNjb25uZWN0X18oZmx1c2gpIHtcblx0ICAgIGF3YWl0IHRoaXMueWllbGRMb29wKCk7XG5cdCAgICBjbGVhckludGVydmFsKHRoaXMuaGVhcnRiZWF0KTtcblx0ICAgIHJldHVybiB0aGlzLlByb21pc2UucmVzb2x2ZSgpO1xuXHQgIH1cblxuXHQgIHlpZWxkTG9vcCh0ID0gMCkge1xuXHQgICAgcmV0dXJuIG5ldyB0aGlzLlByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdCAgICAgIHJldHVybiBzZXRUaW1lb3V0KHJlc29sdmUsIHQpO1xuXHQgICAgfSk7XG5cdCAgfVxuXG5cdCAgY29tcHV0ZVBlbmFsdHkoKSB7XG5cdCAgICB2YXIgcmVmO1xuXHQgICAgcmV0dXJuIChyZWYgPSB0aGlzLnN0b3JlT3B0aW9ucy5wZW5hbHR5KSAhPSBudWxsID8gcmVmIDogKDE1ICogdGhpcy5zdG9yZU9wdGlvbnMubWluVGltZSkgfHwgNTAwMDtcblx0ICB9XG5cblx0ICBhc3luYyBfX3VwZGF0ZVNldHRpbmdzX18ob3B0aW9ucykge1xuXHQgICAgYXdhaXQgdGhpcy55aWVsZExvb3AoKTtcblx0ICAgIHBhcnNlciQyLm92ZXJ3cml0ZShvcHRpb25zLCBvcHRpb25zLCB0aGlzLnN0b3JlT3B0aW9ucyk7XG5cdCAgICB0aGlzLl9zdGFydEhlYXJ0YmVhdCgpO1xuXHQgICAgdGhpcy5pbnN0YW5jZS5fZHJhaW5BbGwodGhpcy5jb21wdXRlQ2FwYWNpdHkoKSk7XG5cdCAgICByZXR1cm4gdHJ1ZTtcblx0ICB9XG5cblx0ICBhc3luYyBfX3J1bm5pbmdfXygpIHtcblx0ICAgIGF3YWl0IHRoaXMueWllbGRMb29wKCk7XG5cdCAgICByZXR1cm4gdGhpcy5fcnVubmluZztcblx0ICB9XG5cblx0ICBhc3luYyBfX3F1ZXVlZF9fKCkge1xuXHQgICAgYXdhaXQgdGhpcy55aWVsZExvb3AoKTtcblx0ICAgIHJldHVybiB0aGlzLmluc3RhbmNlLnF1ZXVlZCgpO1xuXHQgIH1cblxuXHQgIGFzeW5jIF9fZG9uZV9fKCkge1xuXHQgICAgYXdhaXQgdGhpcy55aWVsZExvb3AoKTtcblx0ICAgIHJldHVybiB0aGlzLl9kb25lO1xuXHQgIH1cblxuXHQgIGFzeW5jIF9fZ3JvdXBDaGVja19fKHRpbWUpIHtcblx0ICAgIGF3YWl0IHRoaXMueWllbGRMb29wKCk7XG5cdCAgICByZXR1cm4gKHRoaXMuX25leHRSZXF1ZXN0ICsgdGhpcy50aW1lb3V0KSA8IHRpbWU7XG5cdCAgfVxuXG5cdCAgY29tcHV0ZUNhcGFjaXR5KCkge1xuXHQgICAgdmFyIG1heENvbmN1cnJlbnQsIHJlc2Vydm9pcjtcblx0ICAgICh7bWF4Q29uY3VycmVudCwgcmVzZXJ2b2lyfSA9IHRoaXMuc3RvcmVPcHRpb25zKTtcblx0ICAgIGlmICgobWF4Q29uY3VycmVudCAhPSBudWxsKSAmJiAocmVzZXJ2b2lyICE9IG51bGwpKSB7XG5cdCAgICAgIHJldHVybiBNYXRoLm1pbihtYXhDb25jdXJyZW50IC0gdGhpcy5fcnVubmluZywgcmVzZXJ2b2lyKTtcblx0ICAgIH0gZWxzZSBpZiAobWF4Q29uY3VycmVudCAhPSBudWxsKSB7XG5cdCAgICAgIHJldHVybiBtYXhDb25jdXJyZW50IC0gdGhpcy5fcnVubmluZztcblx0ICAgIH0gZWxzZSBpZiAocmVzZXJ2b2lyICE9IG51bGwpIHtcblx0ICAgICAgcmV0dXJuIHJlc2Vydm9pcjtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIHJldHVybiBudWxsO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIGNvbmRpdGlvbnNDaGVjayh3ZWlnaHQpIHtcblx0ICAgIHZhciBjYXBhY2l0eTtcblx0ICAgIGNhcGFjaXR5ID0gdGhpcy5jb21wdXRlQ2FwYWNpdHkoKTtcblx0ICAgIHJldHVybiAoY2FwYWNpdHkgPT0gbnVsbCkgfHwgd2VpZ2h0IDw9IGNhcGFjaXR5O1xuXHQgIH1cblxuXHQgIGFzeW5jIF9faW5jcmVtZW50UmVzZXJ2b2lyX18oaW5jcikge1xuXHQgICAgdmFyIHJlc2Vydm9pcjtcblx0ICAgIGF3YWl0IHRoaXMueWllbGRMb29wKCk7XG5cdCAgICByZXNlcnZvaXIgPSB0aGlzLnN0b3JlT3B0aW9ucy5yZXNlcnZvaXIgKz0gaW5jcjtcblx0ICAgIHRoaXMuaW5zdGFuY2UuX2RyYWluQWxsKHRoaXMuY29tcHV0ZUNhcGFjaXR5KCkpO1xuXHQgICAgcmV0dXJuIHJlc2Vydm9pcjtcblx0ICB9XG5cblx0ICBhc3luYyBfX2N1cnJlbnRSZXNlcnZvaXJfXygpIHtcblx0ICAgIGF3YWl0IHRoaXMueWllbGRMb29wKCk7XG5cdCAgICByZXR1cm4gdGhpcy5zdG9yZU9wdGlvbnMucmVzZXJ2b2lyO1xuXHQgIH1cblxuXHQgIGlzQmxvY2tlZChub3cpIHtcblx0ICAgIHJldHVybiB0aGlzLl91bmJsb2NrVGltZSA+PSBub3c7XG5cdCAgfVxuXG5cdCAgY2hlY2sod2VpZ2h0LCBub3cpIHtcblx0ICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbnNDaGVjayh3ZWlnaHQpICYmICh0aGlzLl9uZXh0UmVxdWVzdCAtIG5vdykgPD0gMDtcblx0ICB9XG5cblx0ICBhc3luYyBfX2NoZWNrX18od2VpZ2h0KSB7XG5cdCAgICB2YXIgbm93O1xuXHQgICAgYXdhaXQgdGhpcy55aWVsZExvb3AoKTtcblx0ICAgIG5vdyA9IERhdGUubm93KCk7XG5cdCAgICByZXR1cm4gdGhpcy5jaGVjayh3ZWlnaHQsIG5vdyk7XG5cdCAgfVxuXG5cdCAgYXN5bmMgX19yZWdpc3Rlcl9fKGluZGV4LCB3ZWlnaHQsIGV4cGlyYXRpb24pIHtcblx0ICAgIHZhciBub3csIHdhaXQ7XG5cdCAgICBhd2FpdCB0aGlzLnlpZWxkTG9vcCgpO1xuXHQgICAgbm93ID0gRGF0ZS5ub3coKTtcblx0ICAgIGlmICh0aGlzLmNvbmRpdGlvbnNDaGVjayh3ZWlnaHQpKSB7XG5cdCAgICAgIHRoaXMuX3J1bm5pbmcgKz0gd2VpZ2h0O1xuXHQgICAgICBpZiAodGhpcy5zdG9yZU9wdGlvbnMucmVzZXJ2b2lyICE9IG51bGwpIHtcblx0ICAgICAgICB0aGlzLnN0b3JlT3B0aW9ucy5yZXNlcnZvaXIgLT0gd2VpZ2h0O1xuXHQgICAgICB9XG5cdCAgICAgIHdhaXQgPSBNYXRoLm1heCh0aGlzLl9uZXh0UmVxdWVzdCAtIG5vdywgMCk7XG5cdCAgICAgIHRoaXMuX25leHRSZXF1ZXN0ID0gbm93ICsgd2FpdCArIHRoaXMuc3RvcmVPcHRpb25zLm1pblRpbWU7XG5cdCAgICAgIHJldHVybiB7XG5cdCAgICAgICAgc3VjY2VzczogdHJ1ZSxcblx0ICAgICAgICB3YWl0LFxuXHQgICAgICAgIHJlc2Vydm9pcjogdGhpcy5zdG9yZU9wdGlvbnMucmVzZXJ2b2lyXG5cdCAgICAgIH07XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICByZXR1cm4ge1xuXHQgICAgICAgIHN1Y2Nlc3M6IGZhbHNlXG5cdCAgICAgIH07XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgc3RyYXRlZ3lJc0Jsb2NrKCkge1xuXHQgICAgcmV0dXJuIHRoaXMuc3RvcmVPcHRpb25zLnN0cmF0ZWd5ID09PSAzO1xuXHQgIH1cblxuXHQgIGFzeW5jIF9fc3VibWl0X18ocXVldWVMZW5ndGgsIHdlaWdodCkge1xuXHQgICAgdmFyIGJsb2NrZWQsIG5vdywgcmVhY2hlZEhXTTtcblx0ICAgIGF3YWl0IHRoaXMueWllbGRMb29wKCk7XG5cdCAgICBpZiAoKHRoaXMuc3RvcmVPcHRpb25zLm1heENvbmN1cnJlbnQgIT0gbnVsbCkgJiYgd2VpZ2h0ID4gdGhpcy5zdG9yZU9wdGlvbnMubWF4Q29uY3VycmVudCkge1xuXHQgICAgICB0aHJvdyBuZXcgQm90dGxlbmVja0Vycm9yJDIoYEltcG9zc2libGUgdG8gYWRkIGEgam9iIGhhdmluZyBhIHdlaWdodCBvZiAke3dlaWdodH0gdG8gYSBsaW1pdGVyIGhhdmluZyBhIG1heENvbmN1cnJlbnQgc2V0dGluZyBvZiAke3RoaXMuc3RvcmVPcHRpb25zLm1heENvbmN1cnJlbnR9YCk7XG5cdCAgICB9XG5cdCAgICBub3cgPSBEYXRlLm5vdygpO1xuXHQgICAgcmVhY2hlZEhXTSA9ICh0aGlzLnN0b3JlT3B0aW9ucy5oaWdoV2F0ZXIgIT0gbnVsbCkgJiYgcXVldWVMZW5ndGggPT09IHRoaXMuc3RvcmVPcHRpb25zLmhpZ2hXYXRlciAmJiAhdGhpcy5jaGVjayh3ZWlnaHQsIG5vdyk7XG5cdCAgICBibG9ja2VkID0gdGhpcy5zdHJhdGVneUlzQmxvY2soKSAmJiAocmVhY2hlZEhXTSB8fCB0aGlzLmlzQmxvY2tlZChub3cpKTtcblx0ICAgIGlmIChibG9ja2VkKSB7XG5cdCAgICAgIHRoaXMuX3VuYmxvY2tUaW1lID0gbm93ICsgdGhpcy5jb21wdXRlUGVuYWx0eSgpO1xuXHQgICAgICB0aGlzLl9uZXh0UmVxdWVzdCA9IHRoaXMuX3VuYmxvY2tUaW1lICsgdGhpcy5zdG9yZU9wdGlvbnMubWluVGltZTtcblx0ICAgICAgdGhpcy5pbnN0YW5jZS5fZHJvcEFsbFF1ZXVlZCgpO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIHtcblx0ICAgICAgcmVhY2hlZEhXTSxcblx0ICAgICAgYmxvY2tlZCxcblx0ICAgICAgc3RyYXRlZ3k6IHRoaXMuc3RvcmVPcHRpb25zLnN0cmF0ZWd5XG5cdCAgICB9O1xuXHQgIH1cblxuXHQgIGFzeW5jIF9fZnJlZV9fKGluZGV4LCB3ZWlnaHQpIHtcblx0ICAgIGF3YWl0IHRoaXMueWllbGRMb29wKCk7XG5cdCAgICB0aGlzLl9ydW5uaW5nIC09IHdlaWdodDtcblx0ICAgIHRoaXMuX2RvbmUgKz0gd2VpZ2h0O1xuXHQgICAgdGhpcy5pbnN0YW5jZS5fZHJhaW5BbGwodGhpcy5jb21wdXRlQ2FwYWNpdHkoKSk7XG5cdCAgICByZXR1cm4ge1xuXHQgICAgICBydW5uaW5nOiB0aGlzLl9ydW5uaW5nXG5cdCAgICB9O1xuXHQgIH1cblxuXHR9O1xuXG5cdHZhciBMb2NhbERhdGFzdG9yZV8xID0gTG9jYWxEYXRhc3RvcmU7XG5cblx0dmFyIEJvdHRsZW5lY2tFcnJvciQzLCBTdGF0ZXM7XG5cblx0Qm90dGxlbmVja0Vycm9yJDMgPSBCb3R0bGVuZWNrRXJyb3JfMTtcblxuXHRTdGF0ZXMgPSBjbGFzcyBTdGF0ZXMge1xuXHQgIGNvbnN0cnVjdG9yKHN0YXR1czEpIHtcblx0ICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzMTtcblx0ICAgIHRoaXMuX2pvYnMgPSB7fTtcblx0ICAgIHRoaXMuY291bnRzID0gdGhpcy5zdGF0dXMubWFwKGZ1bmN0aW9uKCkge1xuXHQgICAgICByZXR1cm4gMDtcblx0ICAgIH0pO1xuXHQgIH1cblxuXHQgIG5leHQoaWQpIHtcblx0ICAgIHZhciBjdXJyZW50LCBuZXh0O1xuXHQgICAgY3VycmVudCA9IHRoaXMuX2pvYnNbaWRdO1xuXHQgICAgbmV4dCA9IGN1cnJlbnQgKyAxO1xuXHQgICAgaWYgKChjdXJyZW50ICE9IG51bGwpICYmIG5leHQgPCB0aGlzLnN0YXR1cy5sZW5ndGgpIHtcblx0ICAgICAgdGhpcy5jb3VudHNbY3VycmVudF0tLTtcblx0ICAgICAgdGhpcy5jb3VudHNbbmV4dF0rKztcblx0ICAgICAgcmV0dXJuIHRoaXMuX2pvYnNbaWRdKys7XG5cdCAgICB9IGVsc2UgaWYgKGN1cnJlbnQgIT0gbnVsbCkge1xuXHQgICAgICB0aGlzLmNvdW50c1tjdXJyZW50XS0tO1xuXHQgICAgICByZXR1cm4gZGVsZXRlIHRoaXMuX2pvYnNbaWRdO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIHN0YXJ0KGlkKSB7XG5cdCAgICB2YXIgaW5pdGlhbDtcblx0ICAgIGluaXRpYWwgPSAwO1xuXHQgICAgdGhpcy5fam9ic1tpZF0gPSBpbml0aWFsO1xuXHQgICAgcmV0dXJuIHRoaXMuY291bnRzW2luaXRpYWxdKys7XG5cdCAgfVxuXG5cdCAgcmVtb3ZlKGlkKSB7XG5cdCAgICB2YXIgY3VycmVudDtcblx0ICAgIGN1cnJlbnQgPSB0aGlzLl9qb2JzW2lkXTtcblx0ICAgIGlmIChjdXJyZW50ICE9IG51bGwpIHtcblx0ICAgICAgdGhpcy5jb3VudHNbY3VycmVudF0tLTtcblx0ICAgICAgZGVsZXRlIHRoaXMuX2pvYnNbaWRdO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIGN1cnJlbnQgIT0gbnVsbDtcblx0ICB9XG5cblx0ICBqb2JTdGF0dXMoaWQpIHtcblx0ICAgIHZhciByZWY7XG5cdCAgICByZXR1cm4gKHJlZiA9IHRoaXMuc3RhdHVzW3RoaXMuX2pvYnNbaWRdXSkgIT0gbnVsbCA/IHJlZiA6IG51bGw7XG5cdCAgfVxuXG5cdCAgc3RhdHVzSm9icyhzdGF0dXMpIHtcblx0ICAgIHZhciBrLCBwb3MsIHJlZiwgcmVzdWx0cywgdjtcblx0ICAgIGlmIChzdGF0dXMgIT0gbnVsbCkge1xuXHQgICAgICBwb3MgPSB0aGlzLnN0YXR1cy5pbmRleE9mKHN0YXR1cyk7XG5cdCAgICAgIGlmIChwb3MgPCAwKSB7XG5cdCAgICAgICAgdGhyb3cgbmV3IEJvdHRsZW5lY2tFcnJvciQzKGBzdGF0dXMgbXVzdCBiZSBvbmUgb2YgJHt0aGlzLnN0YXR1cy5qb2luKCcsICcpfWApO1xuXHQgICAgICB9XG5cdCAgICAgIHJlZiA9IHRoaXMuX2pvYnM7XG5cdCAgICAgIHJlc3VsdHMgPSBbXTtcblx0ICAgICAgZm9yIChrIGluIHJlZikge1xuXHQgICAgICAgIHYgPSByZWZba107XG5cdCAgICAgICAgaWYgKHYgPT09IHBvcykge1xuXHQgICAgICAgICAgcmVzdWx0cy5wdXNoKGspO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgICByZXR1cm4gcmVzdWx0cztcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLl9qb2JzKTtcblx0ICAgIH1cblx0ICB9XG5cblx0ICBzdGF0dXNDb3VudHMoKSB7XG5cdCAgICByZXR1cm4gdGhpcy5jb3VudHMucmVkdWNlKCgoYWNjLCB2LCBpKSA9PiB7XG5cdCAgICAgIGFjY1t0aGlzLnN0YXR1c1tpXV0gPSB2O1xuXHQgICAgICByZXR1cm4gYWNjO1xuXHQgICAgfSksIHt9KTtcblx0ICB9XG5cblx0fTtcblxuXHR2YXIgU3RhdGVzXzEgPSBTdGF0ZXM7XG5cblx0dmFyIERMTGlzdCQyLCBTeW5jO1xuXG5cdERMTGlzdCQyID0gRExMaXN0XzE7XG5cblx0U3luYyA9IGNsYXNzIFN5bmMge1xuXHQgIGNvbnN0cnVjdG9yKG5hbWUsIFByb21pc2UpIHtcblx0ICAgIHRoaXMuc2NoZWR1bGUgPSB0aGlzLnNjaGVkdWxlLmJpbmQodGhpcyk7XG5cdCAgICB0aGlzLm5hbWUgPSBuYW1lO1xuXHQgICAgdGhpcy5Qcm9taXNlID0gUHJvbWlzZTtcblx0ICAgIHRoaXMuX3J1bm5pbmcgPSAwO1xuXHQgICAgdGhpcy5fcXVldWUgPSBuZXcgRExMaXN0JDIoKTtcblx0ICB9XG5cblx0ICBpc0VtcHR5KCkge1xuXHQgICAgcmV0dXJuIHRoaXMuX3F1ZXVlLmxlbmd0aCA9PT0gMDtcblx0ICB9XG5cblx0ICBhc3luYyBfdHJ5VG9SdW4oKSB7XG5cdCAgICB2YXIgYXJncywgY2IsIGVycm9yLCByZWplY3QsIHJlc29sdmUsIHJldHVybmVkLCB0YXNrO1xuXHQgICAgaWYgKCh0aGlzLl9ydW5uaW5nIDwgMSkgJiYgdGhpcy5fcXVldWUubGVuZ3RoID4gMCkge1xuXHQgICAgICB0aGlzLl9ydW5uaW5nKys7XG5cdCAgICAgICh7dGFzaywgYXJncywgcmVzb2x2ZSwgcmVqZWN0fSA9IHRoaXMuX3F1ZXVlLnNoaWZ0KCkpO1xuXHQgICAgICBjYiA9IChhd2FpdCAoYXN5bmMgZnVuY3Rpb24oKSB7XG5cdCAgICAgICAgdHJ5IHtcblx0ICAgICAgICAgIHJldHVybmVkID0gKGF3YWl0IHRhc2soLi4uYXJncykpO1xuXHQgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShyZXR1cm5lZCk7XG5cdCAgICAgICAgICB9O1xuXHQgICAgICAgIH0gY2F0Y2ggKGVycm9yMSkge1xuXHQgICAgICAgICAgZXJyb3IgPSBlcnJvcjE7XG5cdCAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG5cdCAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyb3IpO1xuXHQgICAgICAgICAgfTtcblx0ICAgICAgICB9XG5cdCAgICAgIH0pKCkpO1xuXHQgICAgICB0aGlzLl9ydW5uaW5nLS07XG5cdCAgICAgIHRoaXMuX3RyeVRvUnVuKCk7XG5cdCAgICAgIHJldHVybiBjYigpO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIHNjaGVkdWxlKHRhc2ssIC4uLmFyZ3MpIHtcblx0ICAgIHZhciBwcm9taXNlLCByZWplY3QsIHJlc29sdmU7XG5cdCAgICByZXNvbHZlID0gcmVqZWN0ID0gbnVsbDtcblx0ICAgIHByb21pc2UgPSBuZXcgdGhpcy5Qcm9taXNlKGZ1bmN0aW9uKF9yZXNvbHZlLCBfcmVqZWN0KSB7XG5cdCAgICAgIHJlc29sdmUgPSBfcmVzb2x2ZTtcblx0ICAgICAgcmV0dXJuIHJlamVjdCA9IF9yZWplY3Q7XG5cdCAgICB9KTtcblx0ICAgIHRoaXMuX3F1ZXVlLnB1c2goe3Rhc2ssIGFyZ3MsIHJlc29sdmUsIHJlamVjdH0pO1xuXHQgICAgdGhpcy5fdHJ5VG9SdW4oKTtcblx0ICAgIHJldHVybiBwcm9taXNlO1xuXHQgIH1cblxuXHR9O1xuXG5cdHZhciBTeW5jXzEgPSBTeW5jO1xuXG5cdHZhciB2ZXJzaW9uID0gXCIyLjE5LjVcIjtcblx0dmFyIHZlcnNpb24kMSA9IHtcblx0XHR2ZXJzaW9uOiB2ZXJzaW9uXG5cdH07XG5cblx0dmFyIHZlcnNpb24kMiA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcblx0XHR2ZXJzaW9uOiB2ZXJzaW9uLFxuXHRcdGRlZmF1bHQ6IHZlcnNpb24kMVxuXHR9KTtcblxuXHR2YXIgcmVxdWlyZSQkMiA9ICgpID0+IGNvbnNvbGUubG9nKCdZb3UgbXVzdCBpbXBvcnQgdGhlIGZ1bGwgdmVyc2lvbiBvZiBCb3R0bGVuZWNrIGluIG9yZGVyIHRvIHVzZSB0aGlzIGZlYXR1cmUuJyk7XG5cblx0dmFyIHJlcXVpcmUkJDMgPSAoKSA9PiBjb25zb2xlLmxvZygnWW91IG11c3QgaW1wb3J0IHRoZSBmdWxsIHZlcnNpb24gb2YgQm90dGxlbmVjayBpbiBvcmRlciB0byB1c2UgdGhpcyBmZWF0dXJlLicpO1xuXG5cdHZhciByZXF1aXJlJCQ0ID0gKCkgPT4gY29uc29sZS5sb2coJ1lvdSBtdXN0IGltcG9ydCB0aGUgZnVsbCB2ZXJzaW9uIG9mIEJvdHRsZW5lY2sgaW4gb3JkZXIgdG8gdXNlIHRoaXMgZmVhdHVyZS4nKTtcblxuXHR2YXIgRXZlbnRzJDIsIEdyb3VwLCBJT1JlZGlzQ29ubmVjdGlvbiQxLCBSZWRpc0Nvbm5lY3Rpb24kMSwgU2NyaXB0cyQxLCBwYXJzZXIkMztcblxuXHRwYXJzZXIkMyA9IHBhcnNlcjtcblxuXHRFdmVudHMkMiA9IEV2ZW50c18xO1xuXG5cdFJlZGlzQ29ubmVjdGlvbiQxID0gcmVxdWlyZSQkMjtcblxuXHRJT1JlZGlzQ29ubmVjdGlvbiQxID0gcmVxdWlyZSQkMztcblxuXHRTY3JpcHRzJDEgPSByZXF1aXJlJCQ0O1xuXG5cdEdyb3VwID0gKGZ1bmN0aW9uKCkge1xuXHQgIGNsYXNzIEdyb3VwIHtcblx0ICAgIGNvbnN0cnVjdG9yKGxpbWl0ZXJPcHRpb25zID0ge30pIHtcblx0ICAgICAgdGhpcy5kZWxldGVLZXkgPSB0aGlzLmRlbGV0ZUtleS5iaW5kKHRoaXMpO1xuXHQgICAgICB0aGlzLmxpbWl0ZXJPcHRpb25zID0gbGltaXRlck9wdGlvbnM7XG5cdCAgICAgIHBhcnNlciQzLmxvYWQodGhpcy5saW1pdGVyT3B0aW9ucywgdGhpcy5kZWZhdWx0cywgdGhpcyk7XG5cdCAgICAgIHRoaXMuRXZlbnRzID0gbmV3IEV2ZW50cyQyKHRoaXMpO1xuXHQgICAgICB0aGlzLmluc3RhbmNlcyA9IHt9O1xuXHQgICAgICB0aGlzLkJvdHRsZW5lY2sgPSBCb3R0bGVuZWNrXzE7XG5cdCAgICAgIHRoaXMuX3N0YXJ0QXV0b0NsZWFudXAoKTtcblx0ICAgICAgdGhpcy5zaGFyZWRDb25uZWN0aW9uID0gdGhpcy5jb25uZWN0aW9uICE9IG51bGw7XG5cdCAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb24gPT0gbnVsbCkge1xuXHQgICAgICAgIGlmICh0aGlzLmxpbWl0ZXJPcHRpb25zLmRhdGFzdG9yZSA9PT0gXCJyZWRpc1wiKSB7XG5cdCAgICAgICAgICB0aGlzLmNvbm5lY3Rpb24gPSBuZXcgUmVkaXNDb25uZWN0aW9uJDEoT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5saW1pdGVyT3B0aW9ucywge0V2ZW50czogdGhpcy5FdmVudHN9KSk7XG5cdCAgICAgICAgfSBlbHNlIGlmICh0aGlzLmxpbWl0ZXJPcHRpb25zLmRhdGFzdG9yZSA9PT0gXCJpb3JlZGlzXCIpIHtcblx0ICAgICAgICAgIHRoaXMuY29ubmVjdGlvbiA9IG5ldyBJT1JlZGlzQ29ubmVjdGlvbiQxKE9iamVjdC5hc3NpZ24oe30sIHRoaXMubGltaXRlck9wdGlvbnMsIHtFdmVudHM6IHRoaXMuRXZlbnRzfSkpO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfVxuXG5cdCAgICBrZXkoa2V5ID0gXCJcIikge1xuXHQgICAgICB2YXIgcmVmO1xuXHQgICAgICByZXR1cm4gKHJlZiA9IHRoaXMuaW5zdGFuY2VzW2tleV0pICE9IG51bGwgPyByZWYgOiAoKCkgPT4ge1xuXHQgICAgICAgIHZhciBsaW1pdGVyO1xuXHQgICAgICAgIGxpbWl0ZXIgPSB0aGlzLmluc3RhbmNlc1trZXldID0gbmV3IHRoaXMuQm90dGxlbmVjayhPYmplY3QuYXNzaWduKHRoaXMubGltaXRlck9wdGlvbnMsIHtcblx0ICAgICAgICAgIGlkOiBgJHt0aGlzLmlkfS0ke2tleX1gLFxuXHQgICAgICAgICAgdGltZW91dDogdGhpcy50aW1lb3V0LFxuXHQgICAgICAgICAgY29ubmVjdGlvbjogdGhpcy5jb25uZWN0aW9uXG5cdCAgICAgICAgfSkpO1xuXHQgICAgICAgIHRoaXMuRXZlbnRzLnRyaWdnZXIoXCJjcmVhdGVkXCIsIGxpbWl0ZXIsIGtleSk7XG5cdCAgICAgICAgcmV0dXJuIGxpbWl0ZXI7XG5cdCAgICAgIH0pKCk7XG5cdCAgICB9XG5cblx0ICAgIGFzeW5jIGRlbGV0ZUtleShrZXkgPSBcIlwiKSB7XG5cdCAgICAgIHZhciBkZWxldGVkLCBpbnN0YW5jZTtcblx0ICAgICAgaW5zdGFuY2UgPSB0aGlzLmluc3RhbmNlc1trZXldO1xuXHQgICAgICBpZiAodGhpcy5jb25uZWN0aW9uKSB7XG5cdCAgICAgICAgZGVsZXRlZCA9IChhd2FpdCB0aGlzLmNvbm5lY3Rpb24uX19ydW5Db21tYW5kX18oWydkZWwnLCAuLi5TY3JpcHRzJDEuYWxsS2V5cyhgJHt0aGlzLmlkfS0ke2tleX1gKV0pKTtcblx0ICAgICAgfVxuXHQgICAgICBpZiAoaW5zdGFuY2UgIT0gbnVsbCkge1xuXHQgICAgICAgIGRlbGV0ZSB0aGlzLmluc3RhbmNlc1trZXldO1xuXHQgICAgICAgIGF3YWl0IGluc3RhbmNlLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgfVxuXHQgICAgICByZXR1cm4gKGluc3RhbmNlICE9IG51bGwpIHx8IGRlbGV0ZWQgPiAwO1xuXHQgICAgfVxuXG5cdCAgICBsaW1pdGVycygpIHtcblx0ICAgICAgdmFyIGssIHJlZiwgcmVzdWx0cywgdjtcblx0ICAgICAgcmVmID0gdGhpcy5pbnN0YW5jZXM7XG5cdCAgICAgIHJlc3VsdHMgPSBbXTtcblx0ICAgICAgZm9yIChrIGluIHJlZikge1xuXHQgICAgICAgIHYgPSByZWZba107XG5cdCAgICAgICAgcmVzdWx0cy5wdXNoKHtcblx0ICAgICAgICAgIGtleTogayxcblx0ICAgICAgICAgIGxpbWl0ZXI6IHZcblx0ICAgICAgICB9KTtcblx0ICAgICAgfVxuXHQgICAgICByZXR1cm4gcmVzdWx0cztcblx0ICAgIH1cblxuXHQgICAga2V5cygpIHtcblx0ICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuaW5zdGFuY2VzKTtcblx0ICAgIH1cblxuXHQgICAgYXN5bmMgY2x1c3RlcktleXMoKSB7XG5cdCAgICAgIHZhciBjdXJzb3IsIGVuZCwgZm91bmQsIGksIGssIGtleXMsIGxlbiwgbmV4dCwgc3RhcnQ7XG5cdCAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb24gPT0gbnVsbCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLlByb21pc2UucmVzb2x2ZSh0aGlzLmtleXMoKSk7XG5cdCAgICAgIH1cblx0ICAgICAga2V5cyA9IFtdO1xuXHQgICAgICBjdXJzb3IgPSBudWxsO1xuXHQgICAgICBzdGFydCA9IGBiXyR7dGhpcy5pZH0tYC5sZW5ndGg7XG5cdCAgICAgIGVuZCA9IFwiX3NldHRpbmdzXCIubGVuZ3RoO1xuXHQgICAgICB3aGlsZSAoY3Vyc29yICE9PSAwKSB7XG5cdCAgICAgICAgW25leHQsIGZvdW5kXSA9IChhd2FpdCB0aGlzLmNvbm5lY3Rpb24uX19ydW5Db21tYW5kX18oW1wic2NhblwiLCBjdXJzb3IgIT0gbnVsbCA/IGN1cnNvciA6IDAsIFwibWF0Y2hcIiwgYGJfJHt0aGlzLmlkfS0qX3NldHRpbmdzYCwgXCJjb3VudFwiLCAxMDAwMF0pKTtcblx0ICAgICAgICBjdXJzb3IgPSB+fm5leHQ7XG5cdCAgICAgICAgZm9yIChpID0gMCwgbGVuID0gZm91bmQubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcblx0ICAgICAgICAgIGsgPSBmb3VuZFtpXTtcblx0ICAgICAgICAgIGtleXMucHVzaChrLnNsaWNlKHN0YXJ0LCAtZW5kKSk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICAgIHJldHVybiBrZXlzO1xuXHQgICAgfVxuXG5cdCAgICBfc3RhcnRBdXRvQ2xlYW51cCgpIHtcblx0ICAgICAgdmFyIGJhc2U7XG5cdCAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbCk7XG5cdCAgICAgIHJldHVybiB0eXBlb2YgKGJhc2UgPSAodGhpcy5pbnRlcnZhbCA9IHNldEludGVydmFsKGFzeW5jKCkgPT4ge1xuXHQgICAgICAgIHZhciBlLCBrLCByZWYsIHJlc3VsdHMsIHRpbWUsIHY7XG5cdCAgICAgICAgdGltZSA9IERhdGUubm93KCk7XG5cdCAgICAgICAgcmVmID0gdGhpcy5pbnN0YW5jZXM7XG5cdCAgICAgICAgcmVzdWx0cyA9IFtdO1xuXHQgICAgICAgIGZvciAoayBpbiByZWYpIHtcblx0ICAgICAgICAgIHYgPSByZWZba107XG5cdCAgICAgICAgICB0cnkge1xuXHQgICAgICAgICAgICBpZiAoKGF3YWl0IHYuX3N0b3JlLl9fZ3JvdXBDaGVja19fKHRpbWUpKSkge1xuXHQgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh0aGlzLmRlbGV0ZUtleShrKSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHZvaWQgMCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG5cdCAgICAgICAgICAgIGUgPSBlcnJvcjtcblx0ICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHYuRXZlbnRzLnRyaWdnZXIoXCJlcnJvclwiLCBlKSk7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiByZXN1bHRzO1xuXHQgICAgICB9LCB0aGlzLnRpbWVvdXQgLyAyKSkpLnVucmVmID09PSBcImZ1bmN0aW9uXCIgPyBiYXNlLnVucmVmKCkgOiB2b2lkIDA7XG5cdCAgICB9XG5cblx0ICAgIHVwZGF0ZVNldHRpbmdzKG9wdGlvbnMgPSB7fSkge1xuXHQgICAgICBwYXJzZXIkMy5vdmVyd3JpdGUob3B0aW9ucywgdGhpcy5kZWZhdWx0cywgdGhpcyk7XG5cdCAgICAgIHBhcnNlciQzLm92ZXJ3cml0ZShvcHRpb25zLCBvcHRpb25zLCB0aGlzLmxpbWl0ZXJPcHRpb25zKTtcblx0ICAgICAgaWYgKG9wdGlvbnMudGltZW91dCAhPSBudWxsKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXJ0QXV0b0NsZWFudXAoKTtcblx0ICAgICAgfVxuXHQgICAgfVxuXG5cdCAgICBkaXNjb25uZWN0KGZsdXNoID0gdHJ1ZSkge1xuXHQgICAgICB2YXIgcmVmO1xuXHQgICAgICBpZiAoIXRoaXMuc2hhcmVkQ29ubmVjdGlvbikge1xuXHQgICAgICAgIHJldHVybiAocmVmID0gdGhpcy5jb25uZWN0aW9uKSAhPSBudWxsID8gcmVmLmRpc2Nvbm5lY3QoZmx1c2gpIDogdm9pZCAwO1xuXHQgICAgICB9XG5cdCAgICB9XG5cblx0ICB9XG5cdCAgR3JvdXAucHJvdG90eXBlLmRlZmF1bHRzID0ge1xuXHQgICAgdGltZW91dDogMTAwMCAqIDYwICogNSxcblx0ICAgIGNvbm5lY3Rpb246IG51bGwsXG5cdCAgICBQcm9taXNlOiBQcm9taXNlLFxuXHQgICAgaWQ6IFwiZ3JvdXAta2V5XCJcblx0ICB9O1xuXG5cdCAgcmV0dXJuIEdyb3VwO1xuXG5cdH0pLmNhbGwoY29tbW9uanNHbG9iYWwpO1xuXG5cdHZhciBHcm91cF8xID0gR3JvdXA7XG5cblx0dmFyIEJhdGNoZXIsIEV2ZW50cyQzLCBwYXJzZXIkNDtcblxuXHRwYXJzZXIkNCA9IHBhcnNlcjtcblxuXHRFdmVudHMkMyA9IEV2ZW50c18xO1xuXG5cdEJhdGNoZXIgPSAoZnVuY3Rpb24oKSB7XG5cdCAgY2xhc3MgQmF0Y2hlciB7XG5cdCAgICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcblx0ICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcblx0ICAgICAgcGFyc2VyJDQubG9hZCh0aGlzLm9wdGlvbnMsIHRoaXMuZGVmYXVsdHMsIHRoaXMpO1xuXHQgICAgICB0aGlzLkV2ZW50cyA9IG5ldyBFdmVudHMkMyh0aGlzKTtcblx0ICAgICAgdGhpcy5fYXJyID0gW107XG5cdCAgICAgIHRoaXMuX3Jlc2V0UHJvbWlzZSgpO1xuXHQgICAgICB0aGlzLl9sYXN0Rmx1c2ggPSBEYXRlLm5vdygpO1xuXHQgICAgfVxuXG5cdCAgICBfcmVzZXRQcm9taXNlKCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fcHJvbWlzZSA9IG5ldyB0aGlzLlByb21pc2UoKHJlcywgcmVqKSA9PiB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc29sdmUgPSByZXM7XG5cdCAgICAgIH0pO1xuXHQgICAgfVxuXG5cdCAgICBfZmx1c2goKSB7XG5cdCAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KTtcblx0ICAgICAgdGhpcy5fbGFzdEZsdXNoID0gRGF0ZS5ub3coKTtcblx0ICAgICAgdGhpcy5fcmVzb2x2ZSgpO1xuXHQgICAgICB0aGlzLkV2ZW50cy50cmlnZ2VyKFwiYmF0Y2hcIiwgdGhpcy5fYXJyKTtcblx0ICAgICAgdGhpcy5fYXJyID0gW107XG5cdCAgICAgIHJldHVybiB0aGlzLl9yZXNldFByb21pc2UoKTtcblx0ICAgIH1cblxuXHQgICAgYWRkKGRhdGEpIHtcblx0ICAgICAgdmFyIHJldDtcblx0ICAgICAgdGhpcy5fYXJyLnB1c2goZGF0YSk7XG5cdCAgICAgIHJldCA9IHRoaXMuX3Byb21pc2U7XG5cdCAgICAgIGlmICh0aGlzLl9hcnIubGVuZ3RoID09PSB0aGlzLm1heFNpemUpIHtcblx0ICAgICAgICB0aGlzLl9mbHVzaCgpO1xuXHQgICAgICB9IGVsc2UgaWYgKCh0aGlzLm1heFRpbWUgIT0gbnVsbCkgJiYgdGhpcy5fYXJyLmxlbmd0aCA9PT0gMSkge1xuXHQgICAgICAgIHRoaXMuX3RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcblx0ICAgICAgICAgIHJldHVybiB0aGlzLl9mbHVzaCgpO1xuXHQgICAgICAgIH0sIHRoaXMubWF4VGltZSk7XG5cdCAgICAgIH1cblx0ICAgICAgcmV0dXJuIHJldDtcblx0ICAgIH1cblxuXHQgIH1cblx0ICBCYXRjaGVyLnByb3RvdHlwZS5kZWZhdWx0cyA9IHtcblx0ICAgIG1heFRpbWU6IG51bGwsXG5cdCAgICBtYXhTaXplOiBudWxsLFxuXHQgICAgUHJvbWlzZTogUHJvbWlzZVxuXHQgIH07XG5cblx0ICByZXR1cm4gQmF0Y2hlcjtcblxuXHR9KS5jYWxsKGNvbW1vbmpzR2xvYmFsKTtcblxuXHR2YXIgQmF0Y2hlcl8xID0gQmF0Y2hlcjtcblxuXHR2YXIgcmVxdWlyZSQkNCQxID0gKCkgPT4gY29uc29sZS5sb2coJ1lvdSBtdXN0IGltcG9ydCB0aGUgZnVsbCB2ZXJzaW9uIG9mIEJvdHRsZW5lY2sgaW4gb3JkZXIgdG8gdXNlIHRoaXMgZmVhdHVyZS4nKTtcblxuXHR2YXIgcmVxdWlyZSQkOCA9IGdldENqc0V4cG9ydEZyb21OYW1lc3BhY2UodmVyc2lvbiQyKTtcblxuXHR2YXIgQm90dGxlbmVjaywgREVGQVVMVF9QUklPUklUWSQxLCBFdmVudHMkNCwgSm9iJDEsIExvY2FsRGF0YXN0b3JlJDEsIE5VTV9QUklPUklUSUVTJDEsIFF1ZXVlcyQxLCBSZWRpc0RhdGFzdG9yZSQxLCBTdGF0ZXMkMSwgU3luYyQxLCBwYXJzZXIkNSxcblx0ICBzcGxpY2UgPSBbXS5zcGxpY2U7XG5cblx0TlVNX1BSSU9SSVRJRVMkMSA9IDEwO1xuXG5cdERFRkFVTFRfUFJJT1JJVFkkMSA9IDU7XG5cblx0cGFyc2VyJDUgPSBwYXJzZXI7XG5cblx0UXVldWVzJDEgPSBRdWV1ZXNfMTtcblxuXHRKb2IkMSA9IEpvYl8xO1xuXG5cdExvY2FsRGF0YXN0b3JlJDEgPSBMb2NhbERhdGFzdG9yZV8xO1xuXG5cdFJlZGlzRGF0YXN0b3JlJDEgPSByZXF1aXJlJCQ0JDE7XG5cblx0RXZlbnRzJDQgPSBFdmVudHNfMTtcblxuXHRTdGF0ZXMkMSA9IFN0YXRlc18xO1xuXG5cdFN5bmMkMSA9IFN5bmNfMTtcblxuXHRCb3R0bGVuZWNrID0gKGZ1bmN0aW9uKCkge1xuXHQgIGNsYXNzIEJvdHRsZW5lY2sge1xuXHQgICAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9LCAuLi5pbnZhbGlkKSB7XG5cdCAgICAgIHZhciBzdG9yZUluc3RhbmNlT3B0aW9ucywgc3RvcmVPcHRpb25zO1xuXHQgICAgICB0aGlzLl9hZGRUb1F1ZXVlID0gdGhpcy5fYWRkVG9RdWV1ZS5iaW5kKHRoaXMpO1xuXHQgICAgICB0aGlzLl92YWxpZGF0ZU9wdGlvbnMob3B0aW9ucywgaW52YWxpZCk7XG5cdCAgICAgIHBhcnNlciQ1LmxvYWQob3B0aW9ucywgdGhpcy5pbnN0YW5jZURlZmF1bHRzLCB0aGlzKTtcblx0ICAgICAgdGhpcy5fcXVldWVzID0gbmV3IFF1ZXVlcyQxKE5VTV9QUklPUklUSUVTJDEpO1xuXHQgICAgICB0aGlzLl9zY2hlZHVsZWQgPSB7fTtcblx0ICAgICAgdGhpcy5fc3RhdGVzID0gbmV3IFN0YXRlcyQxKFtcIlJFQ0VJVkVEXCIsIFwiUVVFVUVEXCIsIFwiUlVOTklOR1wiLCBcIkVYRUNVVElOR1wiXS5jb25jYXQodGhpcy50cmFja0RvbmVTdGF0dXMgPyBbXCJET05FXCJdIDogW10pKTtcblx0ICAgICAgdGhpcy5fbGltaXRlciA9IG51bGw7XG5cdCAgICAgIHRoaXMuRXZlbnRzID0gbmV3IEV2ZW50cyQ0KHRoaXMpO1xuXHQgICAgICB0aGlzLl9zdWJtaXRMb2NrID0gbmV3IFN5bmMkMShcInN1Ym1pdFwiLCB0aGlzLlByb21pc2UpO1xuXHQgICAgICB0aGlzLl9yZWdpc3RlckxvY2sgPSBuZXcgU3luYyQxKFwicmVnaXN0ZXJcIiwgdGhpcy5Qcm9taXNlKTtcblx0ICAgICAgc3RvcmVPcHRpb25zID0gcGFyc2VyJDUubG9hZChvcHRpb25zLCB0aGlzLnN0b3JlRGVmYXVsdHMsIHt9KTtcblx0ICAgICAgdGhpcy5fc3RvcmUgPSAoZnVuY3Rpb24oKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuZGF0YXN0b3JlID09PSBcInJlZGlzXCIgfHwgdGhpcy5kYXRhc3RvcmUgPT09IFwiaW9yZWRpc1wiIHx8ICh0aGlzLmNvbm5lY3Rpb24gIT0gbnVsbCkpIHtcblx0ICAgICAgICAgIHN0b3JlSW5zdGFuY2VPcHRpb25zID0gcGFyc2VyJDUubG9hZChvcHRpb25zLCB0aGlzLnJlZGlzU3RvcmVEZWZhdWx0cywge30pO1xuXHQgICAgICAgICAgcmV0dXJuIG5ldyBSZWRpc0RhdGFzdG9yZSQxKHRoaXMsIHN0b3JlT3B0aW9ucywgc3RvcmVJbnN0YW5jZU9wdGlvbnMpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kYXRhc3RvcmUgPT09IFwibG9jYWxcIikge1xuXHQgICAgICAgICAgc3RvcmVJbnN0YW5jZU9wdGlvbnMgPSBwYXJzZXIkNS5sb2FkKG9wdGlvbnMsIHRoaXMubG9jYWxTdG9yZURlZmF1bHRzLCB7fSk7XG5cdCAgICAgICAgICByZXR1cm4gbmV3IExvY2FsRGF0YXN0b3JlJDEodGhpcywgc3RvcmVPcHRpb25zLCBzdG9yZUluc3RhbmNlT3B0aW9ucyk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIHRocm93IG5ldyBCb3R0bGVuZWNrLnByb3RvdHlwZS5Cb3R0bGVuZWNrRXJyb3IoYEludmFsaWQgZGF0YXN0b3JlIHR5cGU6ICR7dGhpcy5kYXRhc3RvcmV9YCk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9KS5jYWxsKHRoaXMpO1xuXHQgICAgICB0aGlzLl9xdWV1ZXMub24oXCJsZWZ0emVyb1wiLCAoKSA9PiB7XG5cdCAgICAgICAgdmFyIHJlZjtcblx0ICAgICAgICByZXR1cm4gKHJlZiA9IHRoaXMuX3N0b3JlLmhlYXJ0YmVhdCkgIT0gbnVsbCA/IHR5cGVvZiByZWYucmVmID09PSBcImZ1bmN0aW9uXCIgPyByZWYucmVmKCkgOiB2b2lkIDAgOiB2b2lkIDA7XG5cdCAgICAgIH0pO1xuXHQgICAgICB0aGlzLl9xdWV1ZXMub24oXCJ6ZXJvXCIsICgpID0+IHtcblx0ICAgICAgICB2YXIgcmVmO1xuXHQgICAgICAgIHJldHVybiAocmVmID0gdGhpcy5fc3RvcmUuaGVhcnRiZWF0KSAhPSBudWxsID8gdHlwZW9mIHJlZi51bnJlZiA9PT0gXCJmdW5jdGlvblwiID8gcmVmLnVucmVmKCkgOiB2b2lkIDAgOiB2b2lkIDA7XG5cdCAgICAgIH0pO1xuXHQgICAgfVxuXG5cdCAgICBfdmFsaWRhdGVPcHRpb25zKG9wdGlvbnMsIGludmFsaWQpIHtcblx0ICAgICAgaWYgKCEoKG9wdGlvbnMgIT0gbnVsbCkgJiYgdHlwZW9mIG9wdGlvbnMgPT09IFwib2JqZWN0XCIgJiYgaW52YWxpZC5sZW5ndGggPT09IDApKSB7XG5cdCAgICAgICAgdGhyb3cgbmV3IEJvdHRsZW5lY2sucHJvdG90eXBlLkJvdHRsZW5lY2tFcnJvcihcIkJvdHRsZW5lY2sgdjIgdGFrZXMgYSBzaW5nbGUgb2JqZWN0IGFyZ3VtZW50LiBSZWZlciB0byBodHRwczovL2dpdGh1Yi5jb20vU0dyb25kaW4vYm90dGxlbmVjayN1cGdyYWRpbmctdG8tdjIgaWYgeW91J3JlIHVwZ3JhZGluZyBmcm9tIEJvdHRsZW5lY2sgdjEuXCIpO1xuXHQgICAgICB9XG5cdCAgICB9XG5cblx0ICAgIHJlYWR5KCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fc3RvcmUucmVhZHk7XG5cdCAgICB9XG5cblx0ICAgIGNsaWVudHMoKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLl9zdG9yZS5jbGllbnRzO1xuXHQgICAgfVxuXG5cdCAgICBjaGFubmVsKCkge1xuXHQgICAgICByZXR1cm4gYGJfJHt0aGlzLmlkfWA7XG5cdCAgICB9XG5cblx0ICAgIGNoYW5uZWxfY2xpZW50KCkge1xuXHQgICAgICByZXR1cm4gYGJfJHt0aGlzLmlkfV8ke3RoaXMuX3N0b3JlLmNsaWVudElkfWA7XG5cdCAgICB9XG5cblx0ICAgIHB1Ymxpc2gobWVzc2FnZSkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fc3RvcmUuX19wdWJsaXNoX18obWVzc2FnZSk7XG5cdCAgICB9XG5cblx0ICAgIGRpc2Nvbm5lY3QoZmx1c2ggPSB0cnVlKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLl9zdG9yZS5fX2Rpc2Nvbm5lY3RfXyhmbHVzaCk7XG5cdCAgICB9XG5cblx0ICAgIGNoYWluKF9saW1pdGVyKSB7XG5cdCAgICAgIHRoaXMuX2xpbWl0ZXIgPSBfbGltaXRlcjtcblx0ICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9XG5cblx0ICAgIHF1ZXVlZChwcmlvcml0eSkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fcXVldWVzLnF1ZXVlZChwcmlvcml0eSk7XG5cdCAgICB9XG5cblx0ICAgIGNsdXN0ZXJRdWV1ZWQoKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLl9zdG9yZS5fX3F1ZXVlZF9fKCk7XG5cdCAgICB9XG5cblx0ICAgIGVtcHR5KCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5xdWV1ZWQoKSA9PT0gMCAmJiB0aGlzLl9zdWJtaXRMb2NrLmlzRW1wdHkoKTtcblx0ICAgIH1cblxuXHQgICAgcnVubmluZygpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX3N0b3JlLl9fcnVubmluZ19fKCk7XG5cdCAgICB9XG5cblx0ICAgIGRvbmUoKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLl9zdG9yZS5fX2RvbmVfXygpO1xuXHQgICAgfVxuXG5cdCAgICBqb2JTdGF0dXMoaWQpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlcy5qb2JTdGF0dXMoaWQpO1xuXHQgICAgfVxuXG5cdCAgICBqb2JzKHN0YXR1cykge1xuXHQgICAgICByZXR1cm4gdGhpcy5fc3RhdGVzLnN0YXR1c0pvYnMoc3RhdHVzKTtcblx0ICAgIH1cblxuXHQgICAgY291bnRzKCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fc3RhdGVzLnN0YXR1c0NvdW50cygpO1xuXHQgICAgfVxuXG5cdCAgICBfcmFuZG9tSW5kZXgoKSB7XG5cdCAgICAgIHJldHVybiBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyKTtcblx0ICAgIH1cblxuXHQgICAgY2hlY2sod2VpZ2h0ID0gMSkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fc3RvcmUuX19jaGVja19fKHdlaWdodCk7XG5cdCAgICB9XG5cblx0ICAgIF9jbGVhckdsb2JhbFN0YXRlKGluZGV4KSB7XG5cdCAgICAgIGlmICh0aGlzLl9zY2hlZHVsZWRbaW5kZXhdICE9IG51bGwpIHtcblx0ICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fc2NoZWR1bGVkW2luZGV4XS5leHBpcmF0aW9uKTtcblx0ICAgICAgICBkZWxldGUgdGhpcy5fc2NoZWR1bGVkW2luZGV4XTtcblx0ICAgICAgICByZXR1cm4gdHJ1ZTtcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICByZXR1cm4gZmFsc2U7XG5cdCAgICAgIH1cblx0ICAgIH1cblxuXHQgICAgYXN5bmMgX2ZyZWUoaW5kZXgsIGpvYiwgb3B0aW9ucywgZXZlbnRJbmZvKSB7XG5cdCAgICAgIHZhciBlLCBydW5uaW5nO1xuXHQgICAgICB0cnkge1xuXHQgICAgICAgICh7cnVubmluZ30gPSAoYXdhaXQgdGhpcy5fc3RvcmUuX19mcmVlX18oaW5kZXgsIG9wdGlvbnMud2VpZ2h0KSkpO1xuXHQgICAgICAgIHRoaXMuRXZlbnRzLnRyaWdnZXIoXCJkZWJ1Z1wiLCBgRnJlZWQgJHtvcHRpb25zLmlkfWAsIGV2ZW50SW5mbyk7XG5cdCAgICAgICAgaWYgKHJ1bm5pbmcgPT09IDAgJiYgdGhpcy5lbXB0eSgpKSB7XG5cdCAgICAgICAgICByZXR1cm4gdGhpcy5FdmVudHMudHJpZ2dlcihcImlkbGVcIik7XG5cdCAgICAgICAgfVxuXHQgICAgICB9IGNhdGNoIChlcnJvcjEpIHtcblx0ICAgICAgICBlID0gZXJyb3IxO1xuXHQgICAgICAgIHJldHVybiB0aGlzLkV2ZW50cy50cmlnZ2VyKFwiZXJyb3JcIiwgZSk7XG5cdCAgICAgIH1cblx0ICAgIH1cblxuXHQgICAgX3J1bihpbmRleCwgam9iLCB3YWl0KSB7XG5cdCAgICAgIHZhciBjbGVhckdsb2JhbFN0YXRlLCBmcmVlLCBydW47XG5cdCAgICAgIGpvYi5kb1J1bigpO1xuXHQgICAgICBjbGVhckdsb2JhbFN0YXRlID0gdGhpcy5fY2xlYXJHbG9iYWxTdGF0ZS5iaW5kKHRoaXMsIGluZGV4KTtcblx0ICAgICAgcnVuID0gdGhpcy5fcnVuLmJpbmQodGhpcywgaW5kZXgsIGpvYik7XG5cdCAgICAgIGZyZWUgPSB0aGlzLl9mcmVlLmJpbmQodGhpcywgaW5kZXgsIGpvYik7XG5cdCAgICAgIHJldHVybiB0aGlzLl9zY2hlZHVsZWRbaW5kZXhdID0ge1xuXHQgICAgICAgIHRpbWVvdXQ6IHNldFRpbWVvdXQoKCkgPT4ge1xuXHQgICAgICAgICAgcmV0dXJuIGpvYi5kb0V4ZWN1dGUodGhpcy5fbGltaXRlciwgY2xlYXJHbG9iYWxTdGF0ZSwgcnVuLCBmcmVlKTtcblx0ICAgICAgICB9LCB3YWl0KSxcblx0ICAgICAgICBleHBpcmF0aW9uOiBqb2Iub3B0aW9ucy5leHBpcmF0aW9uICE9IG51bGwgPyBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuXHQgICAgICAgICAgcmV0dXJuIGpvYi5kb0V4cGlyZShjbGVhckdsb2JhbFN0YXRlLCBydW4sIGZyZWUpO1xuXHQgICAgICAgIH0sIHdhaXQgKyBqb2Iub3B0aW9ucy5leHBpcmF0aW9uKSA6IHZvaWQgMCxcblx0ICAgICAgICBqb2I6IGpvYlxuXHQgICAgICB9O1xuXHQgICAgfVxuXG5cdCAgICBfZHJhaW5PbmUoY2FwYWNpdHkpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX3JlZ2lzdGVyTG9jay5zY2hlZHVsZSgoKSA9PiB7XG5cdCAgICAgICAgdmFyIGFyZ3MsIGluZGV4LCBuZXh0LCBvcHRpb25zLCBxdWV1ZTtcblx0ICAgICAgICBpZiAodGhpcy5xdWV1ZWQoKSA9PT0gMCkge1xuXHQgICAgICAgICAgcmV0dXJuIHRoaXMuUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBxdWV1ZSA9IHRoaXMuX3F1ZXVlcy5nZXRGaXJzdCgpO1xuXHQgICAgICAgICh7b3B0aW9ucywgYXJnc30gPSBuZXh0ID0gcXVldWUuZmlyc3QoKSk7XG5cdCAgICAgICAgaWYgKChjYXBhY2l0eSAhPSBudWxsKSAmJiBvcHRpb25zLndlaWdodCA+IGNhcGFjaXR5KSB7XG5cdCAgICAgICAgICByZXR1cm4gdGhpcy5Qcm9taXNlLnJlc29sdmUobnVsbCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuRXZlbnRzLnRyaWdnZXIoXCJkZWJ1Z1wiLCBgRHJhaW5pbmcgJHtvcHRpb25zLmlkfWAsIHthcmdzLCBvcHRpb25zfSk7XG5cdCAgICAgICAgaW5kZXggPSB0aGlzLl9yYW5kb21JbmRleCgpO1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9zdG9yZS5fX3JlZ2lzdGVyX18oaW5kZXgsIG9wdGlvbnMud2VpZ2h0LCBvcHRpb25zLmV4cGlyYXRpb24pLnRoZW4oKHtzdWNjZXNzLCB3YWl0LCByZXNlcnZvaXJ9KSA9PiB7XG5cdCAgICAgICAgICB2YXIgZW1wdHk7XG5cdCAgICAgICAgICB0aGlzLkV2ZW50cy50cmlnZ2VyKFwiZGVidWdcIiwgYERyYWluZWQgJHtvcHRpb25zLmlkfWAsIHtzdWNjZXNzLCBhcmdzLCBvcHRpb25zfSk7XG5cdCAgICAgICAgICBpZiAoc3VjY2Vzcykge1xuXHQgICAgICAgICAgICBxdWV1ZS5zaGlmdCgpO1xuXHQgICAgICAgICAgICBlbXB0eSA9IHRoaXMuZW1wdHkoKTtcblx0ICAgICAgICAgICAgaWYgKGVtcHR5KSB7XG5cdCAgICAgICAgICAgICAgdGhpcy5FdmVudHMudHJpZ2dlcihcImVtcHR5XCIpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGlmIChyZXNlcnZvaXIgPT09IDApIHtcblx0ICAgICAgICAgICAgICB0aGlzLkV2ZW50cy50cmlnZ2VyKFwiZGVwbGV0ZWRcIiwgZW1wdHkpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX3J1bihpbmRleCwgbmV4dCwgd2FpdCk7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLlByb21pc2UucmVzb2x2ZShvcHRpb25zLndlaWdodCk7XG5cdCAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5Qcm9taXNlLnJlc29sdmUobnVsbCk7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfSk7XG5cdCAgICAgIH0pO1xuXHQgICAgfVxuXG5cdCAgICBfZHJhaW5BbGwoY2FwYWNpdHksIHRvdGFsID0gMCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fZHJhaW5PbmUoY2FwYWNpdHkpLnRoZW4oKGRyYWluZWQpID0+IHtcblx0ICAgICAgICB2YXIgbmV3Q2FwYWNpdHk7XG5cdCAgICAgICAgaWYgKGRyYWluZWQgIT0gbnVsbCkge1xuXHQgICAgICAgICAgbmV3Q2FwYWNpdHkgPSBjYXBhY2l0eSAhPSBudWxsID8gY2FwYWNpdHkgLSBkcmFpbmVkIDogY2FwYWNpdHk7XG5cdCAgICAgICAgICByZXR1cm4gdGhpcy5fZHJhaW5BbGwobmV3Q2FwYWNpdHksIHRvdGFsICsgZHJhaW5lZCk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIHJldHVybiB0aGlzLlByb21pc2UucmVzb2x2ZSh0b3RhbCk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuXHQgICAgICAgIHJldHVybiB0aGlzLkV2ZW50cy50cmlnZ2VyKFwiZXJyb3JcIiwgZSk7XG5cdCAgICAgIH0pO1xuXHQgICAgfVxuXG5cdCAgICBfZHJvcEFsbFF1ZXVlZChtZXNzYWdlKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLl9xdWV1ZXMuc2hpZnRBbGwoZnVuY3Rpb24oam9iKSB7XG5cdCAgICAgICAgcmV0dXJuIGpvYi5kb0Ryb3Aoe21lc3NhZ2V9KTtcblx0ICAgICAgfSk7XG5cdCAgICB9XG5cblx0ICAgIHN0b3Aob3B0aW9ucyA9IHt9KSB7XG5cdCAgICAgIHZhciBkb25lLCB3YWl0Rm9yRXhlY3V0aW5nO1xuXHQgICAgICBvcHRpb25zID0gcGFyc2VyJDUubG9hZChvcHRpb25zLCB0aGlzLnN0b3BEZWZhdWx0cyk7XG5cdCAgICAgIHdhaXRGb3JFeGVjdXRpbmcgPSAoYXQpID0+IHtcblx0ICAgICAgICB2YXIgZmluaXNoZWQ7XG5cdCAgICAgICAgZmluaXNoZWQgPSAoKSA9PiB7XG5cdCAgICAgICAgICB2YXIgY291bnRzO1xuXHQgICAgICAgICAgY291bnRzID0gdGhpcy5fc3RhdGVzLmNvdW50cztcblx0ICAgICAgICAgIHJldHVybiAoY291bnRzWzBdICsgY291bnRzWzFdICsgY291bnRzWzJdICsgY291bnRzWzNdKSA9PT0gYXQ7XG5cdCAgICAgICAgfTtcblx0ICAgICAgICByZXR1cm4gbmV3IHRoaXMuUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdCAgICAgICAgICBpZiAoZmluaXNoZWQoKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuXHQgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMub24oXCJkb25lXCIsICgpID0+IHtcblx0ICAgICAgICAgICAgICBpZiAoZmluaXNoZWQoKSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoXCJkb25lXCIpO1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcblx0ICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH0pO1xuXHQgICAgICB9O1xuXHQgICAgICBkb25lID0gb3B0aW9ucy5kcm9wV2FpdGluZ0pvYnMgPyAodGhpcy5fcnVuID0gZnVuY3Rpb24oaW5kZXgsIG5leHQpIHtcblx0ICAgICAgICByZXR1cm4gbmV4dC5kb0Ryb3Aoe1xuXHQgICAgICAgICAgbWVzc2FnZTogb3B0aW9ucy5kcm9wRXJyb3JNZXNzYWdlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgIH0sIHRoaXMuX2RyYWluT25lID0gKCkgPT4ge1xuXHQgICAgICAgIHJldHVybiB0aGlzLlByb21pc2UucmVzb2x2ZShudWxsKTtcblx0ICAgICAgfSwgdGhpcy5fcmVnaXN0ZXJMb2NrLnNjaGVkdWxlKCgpID0+IHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fc3VibWl0TG9jay5zY2hlZHVsZSgoKSA9PiB7XG5cdCAgICAgICAgICB2YXIgaywgcmVmLCB2O1xuXHQgICAgICAgICAgcmVmID0gdGhpcy5fc2NoZWR1bGVkO1xuXHQgICAgICAgICAgZm9yIChrIGluIHJlZikge1xuXHQgICAgICAgICAgICB2ID0gcmVmW2tdO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5qb2JTdGF0dXModi5qb2Iub3B0aW9ucy5pZCkgPT09IFwiUlVOTklOR1wiKSB7XG5cdCAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHYudGltZW91dCk7XG5cdCAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHYuZXhwaXJhdGlvbik7XG5cdCAgICAgICAgICAgICAgdi5qb2IuZG9Ecm9wKHtcblx0ICAgICAgICAgICAgICAgIG1lc3NhZ2U6IG9wdGlvbnMuZHJvcEVycm9yTWVzc2FnZVxuXHQgICAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgICB0aGlzLl9kcm9wQWxsUXVldWVkKG9wdGlvbnMuZHJvcEVycm9yTWVzc2FnZSk7XG5cdCAgICAgICAgICByZXR1cm4gd2FpdEZvckV4ZWN1dGluZygwKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgfSkpIDogdGhpcy5zY2hlZHVsZSh7XG5cdCAgICAgICAgcHJpb3JpdHk6IE5VTV9QUklPUklUSUVTJDEgLSAxLFxuXHQgICAgICAgIHdlaWdodDogMFxuXHQgICAgICB9LCAoKSA9PiB7XG5cdCAgICAgICAgcmV0dXJuIHdhaXRGb3JFeGVjdXRpbmcoMSk7XG5cdCAgICAgIH0pO1xuXHQgICAgICB0aGlzLl9yZWNlaXZlID0gZnVuY3Rpb24oam9iKSB7XG5cdCAgICAgICAgcmV0dXJuIGpvYi5fcmVqZWN0KG5ldyBCb3R0bGVuZWNrLnByb3RvdHlwZS5Cb3R0bGVuZWNrRXJyb3Iob3B0aW9ucy5lbnF1ZXVlRXJyb3JNZXNzYWdlKSk7XG5cdCAgICAgIH07XG5cdCAgICAgIHRoaXMuc3RvcCA9ICgpID0+IHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5Qcm9taXNlLnJlamVjdChuZXcgQm90dGxlbmVjay5wcm90b3R5cGUuQm90dGxlbmVja0Vycm9yKFwic3RvcCgpIGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkXCIpKTtcblx0ICAgICAgfTtcblx0ICAgICAgcmV0dXJuIGRvbmU7XG5cdCAgICB9XG5cblx0ICAgIGFzeW5jIF9hZGRUb1F1ZXVlKGpvYikge1xuXHQgICAgICB2YXIgYXJncywgYmxvY2tlZCwgZXJyb3IsIG9wdGlvbnMsIHJlYWNoZWRIV00sIHNoaWZ0ZWQsIHN0cmF0ZWd5O1xuXHQgICAgICAoe2FyZ3MsIG9wdGlvbnN9ID0gam9iKTtcblx0ICAgICAgdHJ5IHtcblx0ICAgICAgICAoe3JlYWNoZWRIV00sIGJsb2NrZWQsIHN0cmF0ZWd5fSA9IChhd2FpdCB0aGlzLl9zdG9yZS5fX3N1Ym1pdF9fKHRoaXMucXVldWVkKCksIG9wdGlvbnMud2VpZ2h0KSkpO1xuXHQgICAgICB9IGNhdGNoIChlcnJvcjEpIHtcblx0ICAgICAgICBlcnJvciA9IGVycm9yMTtcblx0ICAgICAgICB0aGlzLkV2ZW50cy50cmlnZ2VyKFwiZGVidWdcIiwgYENvdWxkIG5vdCBxdWV1ZSAke29wdGlvbnMuaWR9YCwge2FyZ3MsIG9wdGlvbnMsIGVycm9yfSk7XG5cdCAgICAgICAgam9iLmRvRHJvcCh7ZXJyb3J9KTtcblx0ICAgICAgICByZXR1cm4gZmFsc2U7XG5cdCAgICAgIH1cblx0ICAgICAgaWYgKGJsb2NrZWQpIHtcblx0ICAgICAgICBqb2IuZG9Ecm9wKCk7XG5cdCAgICAgICAgcmV0dXJuIHRydWU7XG5cdCAgICAgIH0gZWxzZSBpZiAocmVhY2hlZEhXTSkge1xuXHQgICAgICAgIHNoaWZ0ZWQgPSBzdHJhdGVneSA9PT0gQm90dGxlbmVjay5wcm90b3R5cGUuc3RyYXRlZ3kuTEVBSyA/IHRoaXMuX3F1ZXVlcy5zaGlmdExhc3RGcm9tKG9wdGlvbnMucHJpb3JpdHkpIDogc3RyYXRlZ3kgPT09IEJvdHRsZW5lY2sucHJvdG90eXBlLnN0cmF0ZWd5Lk9WRVJGTE9XX1BSSU9SSVRZID8gdGhpcy5fcXVldWVzLnNoaWZ0TGFzdEZyb20ob3B0aW9ucy5wcmlvcml0eSArIDEpIDogc3RyYXRlZ3kgPT09IEJvdHRsZW5lY2sucHJvdG90eXBlLnN0cmF0ZWd5Lk9WRVJGTE9XID8gam9iIDogdm9pZCAwO1xuXHQgICAgICAgIGlmIChzaGlmdGVkICE9IG51bGwpIHtcblx0ICAgICAgICAgIHNoaWZ0ZWQuZG9Ecm9wKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmICgoc2hpZnRlZCA9PSBudWxsKSB8fCBzdHJhdGVneSA9PT0gQm90dGxlbmVjay5wcm90b3R5cGUuc3RyYXRlZ3kuT1ZFUkZMT1cpIHtcblx0ICAgICAgICAgIGlmIChzaGlmdGVkID09IG51bGwpIHtcblx0ICAgICAgICAgICAgam9iLmRvRHJvcCgpO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgICAgcmV0dXJuIHJlYWNoZWRIV007XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICAgIGpvYi5kb1F1ZXVlKHJlYWNoZWRIV00sIGJsb2NrZWQpO1xuXHQgICAgICB0aGlzLl9xdWV1ZXMucHVzaChqb2IpO1xuXHQgICAgICBhd2FpdCB0aGlzLl9kcmFpbkFsbCgpO1xuXHQgICAgICByZXR1cm4gcmVhY2hlZEhXTTtcblx0ICAgIH1cblxuXHQgICAgX3JlY2VpdmUoam9iKSB7XG5cdCAgICAgIGlmICh0aGlzLl9zdGF0ZXMuam9iU3RhdHVzKGpvYi5vcHRpb25zLmlkKSAhPSBudWxsKSB7XG5cdCAgICAgICAgam9iLl9yZWplY3QobmV3IEJvdHRsZW5lY2sucHJvdG90eXBlLkJvdHRsZW5lY2tFcnJvcihgQSBqb2Igd2l0aCB0aGUgc2FtZSBpZCBhbHJlYWR5IGV4aXN0cyAoaWQ9JHtqb2Iub3B0aW9ucy5pZH0pYCkpO1xuXHQgICAgICAgIHJldHVybiBmYWxzZTtcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICBqb2IuZG9SZWNlaXZlKCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3N1Ym1pdExvY2suc2NoZWR1bGUodGhpcy5fYWRkVG9RdWV1ZSwgam9iKTtcblx0ICAgICAgfVxuXHQgICAgfVxuXG5cdCAgICBzdWJtaXQoLi4uYXJncykge1xuXHQgICAgICB2YXIgY2IsIGZuLCBqb2IsIG9wdGlvbnMsIHJlZiwgcmVmMSwgdGFzaztcblx0ICAgICAgaWYgKHR5cGVvZiBhcmdzWzBdID09PSBcImZ1bmN0aW9uXCIpIHtcblx0ICAgICAgICByZWYgPSBhcmdzLCBbZm4sIC4uLmFyZ3NdID0gcmVmLCBbY2JdID0gc3BsaWNlLmNhbGwoYXJncywgLTEpO1xuXHQgICAgICAgIG9wdGlvbnMgPSBwYXJzZXIkNS5sb2FkKHt9LCB0aGlzLmpvYkRlZmF1bHRzKTtcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICByZWYxID0gYXJncywgW29wdGlvbnMsIGZuLCAuLi5hcmdzXSA9IHJlZjEsIFtjYl0gPSBzcGxpY2UuY2FsbChhcmdzLCAtMSk7XG5cdCAgICAgICAgb3B0aW9ucyA9IHBhcnNlciQ1LmxvYWQob3B0aW9ucywgdGhpcy5qb2JEZWZhdWx0cyk7XG5cdCAgICAgIH1cblx0ICAgICAgdGFzayA9ICguLi5hcmdzKSA9PiB7XG5cdCAgICAgICAgcmV0dXJuIG5ldyB0aGlzLlByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdCAgICAgICAgICByZXR1cm4gZm4oLi4uYXJncywgZnVuY3Rpb24oLi4uYXJncykge1xuXHQgICAgICAgICAgICByZXR1cm4gKGFyZ3NbMF0gIT0gbnVsbCA/IHJlamVjdCA6IHJlc29sdmUpKGFyZ3MpO1xuXHQgICAgICAgICAgfSk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgIH07XG5cdCAgICAgIGpvYiA9IG5ldyBKb2IkMSh0YXNrLCBhcmdzLCBvcHRpb25zLCB0aGlzLmpvYkRlZmF1bHRzLCB0aGlzLnJlamVjdE9uRHJvcCwgdGhpcy5FdmVudHMsIHRoaXMuX3N0YXRlcywgdGhpcy5Qcm9taXNlKTtcblx0ICAgICAgam9iLnByb21pc2UudGhlbihmdW5jdGlvbihhcmdzKSB7XG5cdCAgICAgICAgcmV0dXJuIHR5cGVvZiBjYiA9PT0gXCJmdW5jdGlvblwiID8gY2IoLi4uYXJncykgOiB2b2lkIDA7XG5cdCAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGFyZ3MpIHtcblx0ICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhcmdzKSkge1xuXHQgICAgICAgICAgcmV0dXJuIHR5cGVvZiBjYiA9PT0gXCJmdW5jdGlvblwiID8gY2IoLi4uYXJncykgOiB2b2lkIDA7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIHJldHVybiB0eXBlb2YgY2IgPT09IFwiZnVuY3Rpb25cIiA/IGNiKGFyZ3MpIDogdm9pZCAwO1xuXHQgICAgICAgIH1cblx0ICAgICAgfSk7XG5cdCAgICAgIHJldHVybiB0aGlzLl9yZWNlaXZlKGpvYik7XG5cdCAgICB9XG5cblx0ICAgIHNjaGVkdWxlKC4uLmFyZ3MpIHtcblx0ICAgICAgdmFyIGpvYiwgb3B0aW9ucywgdGFzaztcblx0ICAgICAgaWYgKHR5cGVvZiBhcmdzWzBdID09PSBcImZ1bmN0aW9uXCIpIHtcblx0ICAgICAgICBbdGFzaywgLi4uYXJnc10gPSBhcmdzO1xuXHQgICAgICAgIG9wdGlvbnMgPSB7fTtcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICBbb3B0aW9ucywgdGFzaywgLi4uYXJnc10gPSBhcmdzO1xuXHQgICAgICB9XG5cdCAgICAgIGpvYiA9IG5ldyBKb2IkMSh0YXNrLCBhcmdzLCBvcHRpb25zLCB0aGlzLmpvYkRlZmF1bHRzLCB0aGlzLnJlamVjdE9uRHJvcCwgdGhpcy5FdmVudHMsIHRoaXMuX3N0YXRlcywgdGhpcy5Qcm9taXNlKTtcblx0ICAgICAgdGhpcy5fcmVjZWl2ZShqb2IpO1xuXHQgICAgICByZXR1cm4gam9iLnByb21pc2U7XG5cdCAgICB9XG5cblx0ICAgIHdyYXAoZm4pIHtcblx0ICAgICAgdmFyIHNjaGVkdWxlLCB3cmFwcGVkO1xuXHQgICAgICBzY2hlZHVsZSA9IHRoaXMuc2NoZWR1bGUuYmluZCh0aGlzKTtcblx0ICAgICAgd3JhcHBlZCA9IGZ1bmN0aW9uKC4uLmFyZ3MpIHtcblx0ICAgICAgICByZXR1cm4gc2NoZWR1bGUoZm4uYmluZCh0aGlzKSwgLi4uYXJncyk7XG5cdCAgICAgIH07XG5cdCAgICAgIHdyYXBwZWQud2l0aE9wdGlvbnMgPSBmdW5jdGlvbihvcHRpb25zLCAuLi5hcmdzKSB7XG5cdCAgICAgICAgcmV0dXJuIHNjaGVkdWxlKG9wdGlvbnMsIGZuLCAuLi5hcmdzKTtcblx0ICAgICAgfTtcblx0ICAgICAgcmV0dXJuIHdyYXBwZWQ7XG5cdCAgICB9XG5cblx0ICAgIGFzeW5jIHVwZGF0ZVNldHRpbmdzKG9wdGlvbnMgPSB7fSkge1xuXHQgICAgICBhd2FpdCB0aGlzLl9zdG9yZS5fX3VwZGF0ZVNldHRpbmdzX18ocGFyc2VyJDUub3ZlcndyaXRlKG9wdGlvbnMsIHRoaXMuc3RvcmVEZWZhdWx0cykpO1xuXHQgICAgICBwYXJzZXIkNS5vdmVyd3JpdGUob3B0aW9ucywgdGhpcy5pbnN0YW5jZURlZmF1bHRzLCB0aGlzKTtcblx0ICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9XG5cblx0ICAgIGN1cnJlbnRSZXNlcnZvaXIoKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLl9zdG9yZS5fX2N1cnJlbnRSZXNlcnZvaXJfXygpO1xuXHQgICAgfVxuXG5cdCAgICBpbmNyZW1lbnRSZXNlcnZvaXIoaW5jciA9IDApIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX3N0b3JlLl9faW5jcmVtZW50UmVzZXJ2b2lyX18oaW5jcik7XG5cdCAgICB9XG5cblx0ICB9XG5cdCAgQm90dGxlbmVjay5kZWZhdWx0ID0gQm90dGxlbmVjaztcblxuXHQgIEJvdHRsZW5lY2suRXZlbnRzID0gRXZlbnRzJDQ7XG5cblx0ICBCb3R0bGVuZWNrLnZlcnNpb24gPSBCb3R0bGVuZWNrLnByb3RvdHlwZS52ZXJzaW9uID0gcmVxdWlyZSQkOC52ZXJzaW9uO1xuXG5cdCAgQm90dGxlbmVjay5zdHJhdGVneSA9IEJvdHRsZW5lY2sucHJvdG90eXBlLnN0cmF0ZWd5ID0ge1xuXHQgICAgTEVBSzogMSxcblx0ICAgIE9WRVJGTE9XOiAyLFxuXHQgICAgT1ZFUkZMT1dfUFJJT1JJVFk6IDQsXG5cdCAgICBCTE9DSzogM1xuXHQgIH07XG5cblx0ICBCb3R0bGVuZWNrLkJvdHRsZW5lY2tFcnJvciA9IEJvdHRsZW5lY2sucHJvdG90eXBlLkJvdHRsZW5lY2tFcnJvciA9IEJvdHRsZW5lY2tFcnJvcl8xO1xuXG5cdCAgQm90dGxlbmVjay5Hcm91cCA9IEJvdHRsZW5lY2sucHJvdG90eXBlLkdyb3VwID0gR3JvdXBfMTtcblxuXHQgIEJvdHRsZW5lY2suUmVkaXNDb25uZWN0aW9uID0gQm90dGxlbmVjay5wcm90b3R5cGUuUmVkaXNDb25uZWN0aW9uID0gcmVxdWlyZSQkMjtcblxuXHQgIEJvdHRsZW5lY2suSU9SZWRpc0Nvbm5lY3Rpb24gPSBCb3R0bGVuZWNrLnByb3RvdHlwZS5JT1JlZGlzQ29ubmVjdGlvbiA9IHJlcXVpcmUkJDM7XG5cblx0ICBCb3R0bGVuZWNrLkJhdGNoZXIgPSBCb3R0bGVuZWNrLnByb3RvdHlwZS5CYXRjaGVyID0gQmF0Y2hlcl8xO1xuXG5cdCAgQm90dGxlbmVjay5wcm90b3R5cGUuam9iRGVmYXVsdHMgPSB7XG5cdCAgICBwcmlvcml0eTogREVGQVVMVF9QUklPUklUWSQxLFxuXHQgICAgd2VpZ2h0OiAxLFxuXHQgICAgZXhwaXJhdGlvbjogbnVsbCxcblx0ICAgIGlkOiBcIjxuby1pZD5cIlxuXHQgIH07XG5cblx0ICBCb3R0bGVuZWNrLnByb3RvdHlwZS5zdG9yZURlZmF1bHRzID0ge1xuXHQgICAgbWF4Q29uY3VycmVudDogbnVsbCxcblx0ICAgIG1pblRpbWU6IDAsXG5cdCAgICBoaWdoV2F0ZXI6IG51bGwsXG5cdCAgICBzdHJhdGVneTogQm90dGxlbmVjay5wcm90b3R5cGUuc3RyYXRlZ3kuTEVBSyxcblx0ICAgIHBlbmFsdHk6IG51bGwsXG5cdCAgICByZXNlcnZvaXI6IG51bGwsXG5cdCAgICByZXNlcnZvaXJSZWZyZXNoSW50ZXJ2YWw6IG51bGwsXG5cdCAgICByZXNlcnZvaXJSZWZyZXNoQW1vdW50OiBudWxsLFxuXHQgICAgcmVzZXJ2b2lySW5jcmVhc2VJbnRlcnZhbDogbnVsbCxcblx0ICAgIHJlc2Vydm9pckluY3JlYXNlQW1vdW50OiBudWxsLFxuXHQgICAgcmVzZXJ2b2lySW5jcmVhc2VNYXhpbXVtOiBudWxsXG5cdCAgfTtcblxuXHQgIEJvdHRsZW5lY2sucHJvdG90eXBlLmxvY2FsU3RvcmVEZWZhdWx0cyA9IHtcblx0ICAgIFByb21pc2U6IFByb21pc2UsXG5cdCAgICB0aW1lb3V0OiBudWxsLFxuXHQgICAgaGVhcnRiZWF0SW50ZXJ2YWw6IDI1MFxuXHQgIH07XG5cblx0ICBCb3R0bGVuZWNrLnByb3RvdHlwZS5yZWRpc1N0b3JlRGVmYXVsdHMgPSB7XG5cdCAgICBQcm9taXNlOiBQcm9taXNlLFxuXHQgICAgdGltZW91dDogbnVsbCxcblx0ICAgIGhlYXJ0YmVhdEludGVydmFsOiA1MDAwLFxuXHQgICAgY2xpZW50VGltZW91dDogMTAwMDAsXG5cdCAgICBSZWRpczogbnVsbCxcblx0ICAgIGNsaWVudE9wdGlvbnM6IHt9LFxuXHQgICAgY2x1c3Rlck5vZGVzOiBudWxsLFxuXHQgICAgY2xlYXJEYXRhc3RvcmU6IGZhbHNlLFxuXHQgICAgY29ubmVjdGlvbjogbnVsbFxuXHQgIH07XG5cblx0ICBCb3R0bGVuZWNrLnByb3RvdHlwZS5pbnN0YW5jZURlZmF1bHRzID0ge1xuXHQgICAgZGF0YXN0b3JlOiBcImxvY2FsXCIsXG5cdCAgICBjb25uZWN0aW9uOiBudWxsLFxuXHQgICAgaWQ6IFwiPG5vLWlkPlwiLFxuXHQgICAgcmVqZWN0T25Ecm9wOiB0cnVlLFxuXHQgICAgdHJhY2tEb25lU3RhdHVzOiBmYWxzZSxcblx0ICAgIFByb21pc2U6IFByb21pc2Vcblx0ICB9O1xuXG5cdCAgQm90dGxlbmVjay5wcm90b3R5cGUuc3RvcERlZmF1bHRzID0ge1xuXHQgICAgZW5xdWV1ZUVycm9yTWVzc2FnZTogXCJUaGlzIGxpbWl0ZXIgaGFzIGJlZW4gc3RvcHBlZCBhbmQgY2Fubm90IGFjY2VwdCBuZXcgam9icy5cIixcblx0ICAgIGRyb3BXYWl0aW5nSm9iczogdHJ1ZSxcblx0ICAgIGRyb3BFcnJvck1lc3NhZ2U6IFwiVGhpcyBsaW1pdGVyIGhhcyBiZWVuIHN0b3BwZWQuXCJcblx0ICB9O1xuXG5cdCAgcmV0dXJuIEJvdHRsZW5lY2s7XG5cblx0fSkuY2FsbChjb21tb25qc0dsb2JhbCk7XG5cblx0dmFyIEJvdHRsZW5lY2tfMSA9IEJvdHRsZW5lY2s7XG5cblx0dmFyIGxpYiA9IEJvdHRsZW5lY2tfMTtcblxuXHRyZXR1cm4gbGliO1xuXG59KSkpO1xuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wRGVmYXVsdCAoZXgpIHsgcmV0dXJuIChleCAmJiAodHlwZW9mIGV4ID09PSAnb2JqZWN0JykgJiYgJ2RlZmF1bHQnIGluIGV4KSA/IGV4WydkZWZhdWx0J10gOiBleDsgfVxuXG52YXIgQm90dGxlbmVjayA9IF9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKCdib3R0bGVuZWNrL2xpZ2h0JykpO1xuXG4vLyBAdHMtaWdub3JlXG5hc3luYyBmdW5jdGlvbiBlcnJvclJlcXVlc3Qob2N0b2tpdCwgc3RhdGUsIGVycm9yLCBvcHRpb25zKSB7XG4gIGlmICghZXJyb3IucmVxdWVzdCB8fCAhZXJyb3IucmVxdWVzdC5yZXF1ZXN0KSB7XG4gICAgLy8gYWRkcmVzcyBodHRwczovL2dpdGh1Yi5jb20vb2N0b2tpdC9wbHVnaW4tcmV0cnkuanMvaXNzdWVzLzhcbiAgICB0aHJvdyBlcnJvcjtcbiAgfSAvLyByZXRyeSBhbGwgPj0gNDAwICYmIG5vdCBkb05vdFJldHJ5XG5cblxuICBpZiAoZXJyb3Iuc3RhdHVzID49IDQwMCAmJiAhc3RhdGUuZG9Ob3RSZXRyeS5pbmNsdWRlcyhlcnJvci5zdGF0dXMpKSB7XG4gICAgY29uc3QgcmV0cmllcyA9IG9wdGlvbnMucmVxdWVzdC5yZXRyaWVzICE9IG51bGwgPyBvcHRpb25zLnJlcXVlc3QucmV0cmllcyA6IHN0YXRlLnJldHJpZXM7XG4gICAgY29uc3QgcmV0cnlBZnRlciA9IE1hdGgucG93KChvcHRpb25zLnJlcXVlc3QucmV0cnlDb3VudCB8fCAwKSArIDEsIDIpO1xuICAgIHRocm93IG9jdG9raXQucmV0cnkucmV0cnlSZXF1ZXN0KGVycm9yLCByZXRyaWVzLCByZXRyeUFmdGVyKTtcbiAgfSAvLyBNYXliZSBldmVudHVhbGx5IHRoZXJlIHdpbGwgYmUgbW9yZSBjYXNlcyBoZXJlXG5cblxuICB0aHJvdyBlcnJvcjtcbn1cblxuLy8gQHRzLWlnbm9yZVxuXG5hc3luYyBmdW5jdGlvbiB3cmFwUmVxdWVzdChzdGF0ZSwgcmVxdWVzdCwgb3B0aW9ucykge1xuICBjb25zdCBsaW1pdGVyID0gbmV3IEJvdHRsZW5lY2soKTsgLy8gQHRzLWlnbm9yZVxuXG4gIGxpbWl0ZXIub24oXCJmYWlsZWRcIiwgZnVuY3Rpb24gKGVycm9yLCBpbmZvKSB7XG4gICAgY29uc3QgbWF4UmV0cmllcyA9IH5+ZXJyb3IucmVxdWVzdC5yZXF1ZXN0LnJldHJpZXM7XG4gICAgY29uc3QgYWZ0ZXIgPSB+fmVycm9yLnJlcXVlc3QucmVxdWVzdC5yZXRyeUFmdGVyO1xuICAgIG9wdGlvbnMucmVxdWVzdC5yZXRyeUNvdW50ID0gaW5mby5yZXRyeUNvdW50ICsgMTtcblxuICAgIGlmIChtYXhSZXRyaWVzID4gaW5mby5yZXRyeUNvdW50KSB7XG4gICAgICAvLyBSZXR1cm5pbmcgYSBudW1iZXIgaW5zdHJ1Y3RzIHRoZSBsaW1pdGVyIHRvIHJldHJ5XG4gICAgICAvLyB0aGUgcmVxdWVzdCBhZnRlciB0aGF0IG51bWJlciBvZiBtaWxsaXNlY29uZHMgaGF2ZSBwYXNzZWRcbiAgICAgIHJldHVybiBhZnRlciAqIHN0YXRlLnJldHJ5QWZ0ZXJCYXNlVmFsdWU7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGxpbWl0ZXIuc2NoZWR1bGUocmVxdWVzdCwgb3B0aW9ucyk7XG59XG5cbmNvbnN0IFZFUlNJT04gPSBcIjMuMC45XCI7XG5mdW5jdGlvbiByZXRyeShvY3Rva2l0LCBvY3Rva2l0T3B0aW9ucykge1xuICBjb25zdCBzdGF0ZSA9IE9iamVjdC5hc3NpZ24oe1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgcmV0cnlBZnRlckJhc2VWYWx1ZTogMTAwMCxcbiAgICBkb05vdFJldHJ5OiBbNDAwLCA0MDEsIDQwMywgNDA0LCA0MjJdLFxuICAgIHJldHJpZXM6IDNcbiAgfSwgb2N0b2tpdE9wdGlvbnMucmV0cnkpO1xuXG4gIGlmIChzdGF0ZS5lbmFibGVkKSB7XG4gICAgb2N0b2tpdC5ob29rLmVycm9yKFwicmVxdWVzdFwiLCBlcnJvclJlcXVlc3QuYmluZChudWxsLCBvY3Rva2l0LCBzdGF0ZSkpO1xuICAgIG9jdG9raXQuaG9vay53cmFwKFwicmVxdWVzdFwiLCB3cmFwUmVxdWVzdC5iaW5kKG51bGwsIHN0YXRlKSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHJldHJ5OiB7XG4gICAgICByZXRyeVJlcXVlc3Q6IChlcnJvciwgcmV0cmllcywgcmV0cnlBZnRlcikgPT4ge1xuICAgICAgICBlcnJvci5yZXF1ZXN0LnJlcXVlc3QgPSBPYmplY3QuYXNzaWduKHt9LCBlcnJvci5yZXF1ZXN0LnJlcXVlc3QsIHtcbiAgICAgICAgICByZXRyaWVzOiByZXRyaWVzLFxuICAgICAgICAgIHJldHJ5QWZ0ZXI6IHJldHJ5QWZ0ZXJcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5yZXRyeS5WRVJTSU9OID0gVkVSU0lPTjtcblxuZXhwb3J0cy5WRVJTSU9OID0gVkVSU0lPTjtcbmV4cG9ydHMucmV0cnkgPSByZXRyeTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldEFydGlmYWN0SW50ZXJuYWwgPSBleHBvcnRzLmdldEFydGlmYWN0UHVibGljID0gdm9pZCAwO1xuY29uc3QgZ2l0aHViXzEgPSByZXF1aXJlKFwiQGFjdGlvbnMvZ2l0aHViXCIpO1xuY29uc3QgcGx1Z2luX3JldHJ5XzEgPSByZXF1aXJlKFwiQG9jdG9raXQvcGx1Z2luLXJldHJ5XCIpO1xuY29uc3QgY29yZSA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiQGFjdGlvbnMvY29yZVwiKSk7XG5jb25zdCB1dGlsc18xID0gcmVxdWlyZShcIkBhY3Rpb25zL2dpdGh1Yi9saWIvdXRpbHNcIik7XG5jb25zdCByZXRyeV9vcHRpb25zXzEgPSByZXF1aXJlKFwiLi9yZXRyeS1vcHRpb25zXCIpO1xuY29uc3QgcGx1Z2luX3JlcXVlc3RfbG9nXzEgPSByZXF1aXJlKFwiQG9jdG9raXQvcGx1Z2luLXJlcXVlc3QtbG9nXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uL3NoYXJlZC91dGlsXCIpO1xuY29uc3QgdXNlcl9hZ2VudF8xID0gcmVxdWlyZShcIi4uL3NoYXJlZC91c2VyLWFnZW50XCIpO1xuY29uc3QgYXJ0aWZhY3RfdHdpcnBfY2xpZW50XzEgPSByZXF1aXJlKFwiLi4vc2hhcmVkL2FydGlmYWN0LXR3aXJwLWNsaWVudFwiKTtcbmNvbnN0IGdlbmVyYXRlZF8xID0gcmVxdWlyZShcIi4uLy4uL2dlbmVyYXRlZFwiKTtcbmNvbnN0IGVycm9yc18xID0gcmVxdWlyZShcIi4uL3NoYXJlZC9lcnJvcnNcIik7XG5mdW5jdGlvbiBnZXRBcnRpZmFjdFB1YmxpYyhhcnRpZmFjdE5hbWUsIHdvcmtmbG93UnVuSWQsIHJlcG9zaXRvcnlPd25lciwgcmVwb3NpdG9yeU5hbWUsIHRva2VuKSB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IFtyZXRyeU9wdHMsIHJlcXVlc3RPcHRzXSA9ICgwLCByZXRyeV9vcHRpb25zXzEuZ2V0UmV0cnlPcHRpb25zKSh1dGlsc18xLmRlZmF1bHRzKTtcbiAgICAgICAgY29uc3Qgb3B0cyA9IHtcbiAgICAgICAgICAgIGxvZzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgdXNlckFnZW50OiAoMCwgdXNlcl9hZ2VudF8xLmdldFVzZXJBZ2VudFN0cmluZykoKSxcbiAgICAgICAgICAgIHByZXZpZXdzOiB1bmRlZmluZWQsXG4gICAgICAgICAgICByZXRyeTogcmV0cnlPcHRzLFxuICAgICAgICAgICAgcmVxdWVzdDogcmVxdWVzdE9wdHNcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZ2l0aHViID0gKDAsIGdpdGh1Yl8xLmdldE9jdG9raXQpKHRva2VuLCBvcHRzLCBwbHVnaW5fcmV0cnlfMS5yZXRyeSwgcGx1Z2luX3JlcXVlc3RfbG9nXzEucmVxdWVzdExvZyk7XG4gICAgICAgIGNvbnN0IGdldEFydGlmYWN0UmVzcCA9IHlpZWxkIGdpdGh1Yi5yZXF1ZXN0KCdHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hcnRpZmFjdHN7P25hbWV9Jywge1xuICAgICAgICAgICAgb3duZXI6IHJlcG9zaXRvcnlPd25lcixcbiAgICAgICAgICAgIHJlcG86IHJlcG9zaXRvcnlOYW1lLFxuICAgICAgICAgICAgcnVuX2lkOiB3b3JrZmxvd1J1bklkLFxuICAgICAgICAgICAgbmFtZTogYXJ0aWZhY3ROYW1lXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoZ2V0QXJ0aWZhY3RSZXNwLnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuSW52YWxpZFJlc3BvbnNlRXJyb3IoYEludmFsaWQgcmVzcG9uc2UgZnJvbSBHaXRIdWIgQVBJOiAke2dldEFydGlmYWN0UmVzcC5zdGF0dXN9ICgkeyhfYSA9IGdldEFydGlmYWN0UmVzcCA9PT0gbnVsbCB8fCBnZXRBcnRpZmFjdFJlc3AgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGdldEFydGlmYWN0UmVzcC5oZWFkZXJzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2FbJ3gtZ2l0aHViLXJlcXVlc3QtaWQnXX0pYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGdldEFydGlmYWN0UmVzcC5kYXRhLmFydGlmYWN0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBlcnJvcnNfMS5BcnRpZmFjdE5vdEZvdW5kRXJyb3IoYEFydGlmYWN0IG5vdCBmb3VuZCBmb3IgbmFtZTogJHthcnRpZmFjdE5hbWV9XG4gICAgICAgIFBsZWFzZSBlbnN1cmUgdGhhdCB5b3VyIGFydGlmYWN0IGlzIG5vdCBleHBpcmVkIGFuZCB0aGUgYXJ0aWZhY3Qgd2FzIHVwbG9hZGVkIHVzaW5nIGEgY29tcGF0aWJsZSB2ZXJzaW9uIG9mIHRvb2xraXQvdXBsb2FkLWFydGlmYWN0LlxuICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgdmlzaXQgdGhlIEdpdEh1YiBBcnRpZmFjdHMgRkFROiBodHRwczovL2dpdGh1Yi5jb20vYWN0aW9ucy90b29sa2l0L2Jsb2IvbWFpbi9wYWNrYWdlcy9hcnRpZmFjdC9kb2NzL2ZhcS5tZGApO1xuICAgICAgICB9XG4gICAgICAgIGxldCBhcnRpZmFjdCA9IGdldEFydGlmYWN0UmVzcC5kYXRhLmFydGlmYWN0c1swXTtcbiAgICAgICAgaWYgKGdldEFydGlmYWN0UmVzcC5kYXRhLmFydGlmYWN0cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBhcnRpZmFjdCA9IGdldEFydGlmYWN0UmVzcC5kYXRhLmFydGlmYWN0cy5zb3J0KChhLCBiKSA9PiBiLmlkIC0gYS5pZClbMF07XG4gICAgICAgICAgICBjb3JlLmRlYnVnKGBNb3JlIHRoYW4gb25lIGFydGlmYWN0IGZvdW5kIGZvciBhIHNpbmdsZSBuYW1lLCByZXR1cm5pbmcgbmV3ZXN0IChpZDogJHthcnRpZmFjdC5pZH0pYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFydGlmYWN0OiB7XG4gICAgICAgICAgICAgICAgbmFtZTogYXJ0aWZhY3QubmFtZSxcbiAgICAgICAgICAgICAgICBpZDogYXJ0aWZhY3QuaWQsXG4gICAgICAgICAgICAgICAgc2l6ZTogYXJ0aWZhY3Quc2l6ZV9pbl9ieXRlcyxcbiAgICAgICAgICAgICAgICBjcmVhdGVkQXQ6IGFydGlmYWN0LmNyZWF0ZWRfYXQgPyBuZXcgRGF0ZShhcnRpZmFjdC5jcmVhdGVkX2F0KSA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0pO1xufVxuZXhwb3J0cy5nZXRBcnRpZmFjdFB1YmxpYyA9IGdldEFydGlmYWN0UHVibGljO1xuZnVuY3Rpb24gZ2V0QXJ0aWZhY3RJbnRlcm5hbChhcnRpZmFjdE5hbWUpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBhcnRpZmFjdENsaWVudCA9ICgwLCBhcnRpZmFjdF90d2lycF9jbGllbnRfMS5pbnRlcm5hbEFydGlmYWN0VHdpcnBDbGllbnQpKCk7XG4gICAgICAgIGNvbnN0IHsgd29ya2Zsb3dSdW5CYWNrZW5kSWQsIHdvcmtmbG93Sm9iUnVuQmFja2VuZElkIH0gPSAoMCwgdXRpbF8xLmdldEJhY2tlbmRJZHNGcm9tVG9rZW4pKCk7XG4gICAgICAgIGNvbnN0IHJlcSA9IHtcbiAgICAgICAgICAgIHdvcmtmbG93UnVuQmFja2VuZElkLFxuICAgICAgICAgICAgd29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQsXG4gICAgICAgICAgICBuYW1lRmlsdGVyOiBnZW5lcmF0ZWRfMS5TdHJpbmdWYWx1ZS5jcmVhdGUoeyB2YWx1ZTogYXJ0aWZhY3ROYW1lIH0pXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHJlcyA9IHlpZWxkIGFydGlmYWN0Q2xpZW50Lkxpc3RBcnRpZmFjdHMocmVxKTtcbiAgICAgICAgaWYgKHJlcy5hcnRpZmFjdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuQXJ0aWZhY3ROb3RGb3VuZEVycm9yKGBBcnRpZmFjdCBub3QgZm91bmQgZm9yIG5hbWU6ICR7YXJ0aWZhY3ROYW1lfVxuICAgICAgICBQbGVhc2UgZW5zdXJlIHRoYXQgeW91ciBhcnRpZmFjdCBpcyBub3QgZXhwaXJlZCBhbmQgdGhlIGFydGlmYWN0IHdhcyB1cGxvYWRlZCB1c2luZyBhIGNvbXBhdGlibGUgdmVyc2lvbiBvZiB0b29sa2l0L3VwbG9hZC1hcnRpZmFjdC5cbiAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHZpc2l0IHRoZSBHaXRIdWIgQXJ0aWZhY3RzIEZBUTogaHR0cHM6Ly9naXRodWIuY29tL2FjdGlvbnMvdG9vbGtpdC9ibG9iL21haW4vcGFja2FnZXMvYXJ0aWZhY3QvZG9jcy9mYXEubWRgKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgYXJ0aWZhY3QgPSByZXMuYXJ0aWZhY3RzWzBdO1xuICAgICAgICBpZiAocmVzLmFydGlmYWN0cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBhcnRpZmFjdCA9IHJlcy5hcnRpZmFjdHMuc29ydCgoYSwgYikgPT4gTnVtYmVyKGIuZGF0YWJhc2VJZCkgLSBOdW1iZXIoYS5kYXRhYmFzZUlkKSlbMF07XG4gICAgICAgICAgICBjb3JlLmRlYnVnKGBNb3JlIHRoYW4gb25lIGFydGlmYWN0IGZvdW5kIGZvciBhIHNpbmdsZSBuYW1lLCByZXR1cm5pbmcgbmV3ZXN0IChpZDogJHthcnRpZmFjdC5kYXRhYmFzZUlkfSlgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYXJ0aWZhY3Q6IHtcbiAgICAgICAgICAgICAgICBuYW1lOiBhcnRpZmFjdC5uYW1lLFxuICAgICAgICAgICAgICAgIGlkOiBOdW1iZXIoYXJ0aWZhY3QuZGF0YWJhc2VJZCksXG4gICAgICAgICAgICAgICAgc2l6ZTogTnVtYmVyKGFydGlmYWN0LnNpemUpLFxuICAgICAgICAgICAgICAgIGNyZWF0ZWRBdDogYXJ0aWZhY3QuY3JlYXRlZEF0XG4gICAgICAgICAgICAgICAgICAgID8gZ2VuZXJhdGVkXzEuVGltZXN0YW1wLnRvRGF0ZShhcnRpZmFjdC5jcmVhdGVkQXQpXG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfSk7XG59XG5leHBvcnRzLmdldEFydGlmYWN0SW50ZXJuYWwgPSBnZXRBcnRpZmFjdEludGVybmFsO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Z2V0LWFydGlmYWN0LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZGVsZXRlQXJ0aWZhY3RJbnRlcm5hbCA9IGV4cG9ydHMuZGVsZXRlQXJ0aWZhY3RQdWJsaWMgPSB2b2lkIDA7XG5jb25zdCBjb3JlXzEgPSByZXF1aXJlKFwiQGFjdGlvbnMvY29yZVwiKTtcbmNvbnN0IGdpdGh1Yl8xID0gcmVxdWlyZShcIkBhY3Rpb25zL2dpdGh1YlwiKTtcbmNvbnN0IHVzZXJfYWdlbnRfMSA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvdXNlci1hZ2VudFwiKTtcbmNvbnN0IHJldHJ5X29wdGlvbnNfMSA9IHJlcXVpcmUoXCIuLi9maW5kL3JldHJ5LW9wdGlvbnNcIik7XG5jb25zdCB1dGlsc18xID0gcmVxdWlyZShcIkBhY3Rpb25zL2dpdGh1Yi9saWIvdXRpbHNcIik7XG5jb25zdCBwbHVnaW5fcmVxdWVzdF9sb2dfMSA9IHJlcXVpcmUoXCJAb2N0b2tpdC9wbHVnaW4tcmVxdWVzdC1sb2dcIik7XG5jb25zdCBwbHVnaW5fcmV0cnlfMSA9IHJlcXVpcmUoXCJAb2N0b2tpdC9wbHVnaW4tcmV0cnlcIik7XG5jb25zdCBhcnRpZmFjdF90d2lycF9jbGllbnRfMSA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvYXJ0aWZhY3QtdHdpcnAtY2xpZW50XCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uL3NoYXJlZC91dGlsXCIpO1xuY29uc3QgZ2VuZXJhdGVkXzEgPSByZXF1aXJlKFwiLi4vLi4vZ2VuZXJhdGVkXCIpO1xuY29uc3QgZ2V0X2FydGlmYWN0XzEgPSByZXF1aXJlKFwiLi4vZmluZC9nZXQtYXJ0aWZhY3RcIik7XG5jb25zdCBlcnJvcnNfMSA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvZXJyb3JzXCIpO1xuZnVuY3Rpb24gZGVsZXRlQXJ0aWZhY3RQdWJsaWMoYXJ0aWZhY3ROYW1lLCB3b3JrZmxvd1J1bklkLCByZXBvc2l0b3J5T3duZXIsIHJlcG9zaXRvcnlOYW1lLCB0b2tlbikge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBbcmV0cnlPcHRzLCByZXF1ZXN0T3B0c10gPSAoMCwgcmV0cnlfb3B0aW9uc18xLmdldFJldHJ5T3B0aW9ucykodXRpbHNfMS5kZWZhdWx0cyk7XG4gICAgICAgIGNvbnN0IG9wdHMgPSB7XG4gICAgICAgICAgICBsb2c6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHVzZXJBZ2VudDogKDAsIHVzZXJfYWdlbnRfMS5nZXRVc2VyQWdlbnRTdHJpbmcpKCksXG4gICAgICAgICAgICBwcmV2aWV3czogdW5kZWZpbmVkLFxuICAgICAgICAgICAgcmV0cnk6IHJldHJ5T3B0cyxcbiAgICAgICAgICAgIHJlcXVlc3Q6IHJlcXVlc3RPcHRzXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGdpdGh1YiA9ICgwLCBnaXRodWJfMS5nZXRPY3Rva2l0KSh0b2tlbiwgb3B0cywgcGx1Z2luX3JldHJ5XzEucmV0cnksIHBsdWdpbl9yZXF1ZXN0X2xvZ18xLnJlcXVlc3RMb2cpO1xuICAgICAgICBjb25zdCBnZXRBcnRpZmFjdFJlc3AgPSB5aWVsZCAoMCwgZ2V0X2FydGlmYWN0XzEuZ2V0QXJ0aWZhY3RQdWJsaWMpKGFydGlmYWN0TmFtZSwgd29ya2Zsb3dSdW5JZCwgcmVwb3NpdG9yeU93bmVyLCByZXBvc2l0b3J5TmFtZSwgdG9rZW4pO1xuICAgICAgICBjb25zdCBkZWxldGVBcnRpZmFjdFJlc3AgPSB5aWVsZCBnaXRodWIucmVzdC5hY3Rpb25zLmRlbGV0ZUFydGlmYWN0KHtcbiAgICAgICAgICAgIG93bmVyOiByZXBvc2l0b3J5T3duZXIsXG4gICAgICAgICAgICByZXBvOiByZXBvc2l0b3J5TmFtZSxcbiAgICAgICAgICAgIGFydGlmYWN0X2lkOiBnZXRBcnRpZmFjdFJlc3AuYXJ0aWZhY3QuaWRcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChkZWxldGVBcnRpZmFjdFJlc3Auc3RhdHVzICE9PSAyMDQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBlcnJvcnNfMS5JbnZhbGlkUmVzcG9uc2VFcnJvcihgSW52YWxpZCByZXNwb25zZSBmcm9tIEdpdEh1YiBBUEk6ICR7ZGVsZXRlQXJ0aWZhY3RSZXNwLnN0YXR1c30gKCR7KF9hID0gZGVsZXRlQXJ0aWZhY3RSZXNwID09PSBudWxsIHx8IGRlbGV0ZUFydGlmYWN0UmVzcCA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGVsZXRlQXJ0aWZhY3RSZXNwLmhlYWRlcnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVsneC1naXRodWItcmVxdWVzdC1pZCddfSlgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQ6IGdldEFydGlmYWN0UmVzcC5hcnRpZmFjdC5pZFxuICAgICAgICB9O1xuICAgIH0pO1xufVxuZXhwb3J0cy5kZWxldGVBcnRpZmFjdFB1YmxpYyA9IGRlbGV0ZUFydGlmYWN0UHVibGljO1xuZnVuY3Rpb24gZGVsZXRlQXJ0aWZhY3RJbnRlcm5hbChhcnRpZmFjdE5hbWUpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBhcnRpZmFjdENsaWVudCA9ICgwLCBhcnRpZmFjdF90d2lycF9jbGllbnRfMS5pbnRlcm5hbEFydGlmYWN0VHdpcnBDbGllbnQpKCk7XG4gICAgICAgIGNvbnN0IHsgd29ya2Zsb3dSdW5CYWNrZW5kSWQsIHdvcmtmbG93Sm9iUnVuQmFja2VuZElkIH0gPSAoMCwgdXRpbF8xLmdldEJhY2tlbmRJZHNGcm9tVG9rZW4pKCk7XG4gICAgICAgIGNvbnN0IGxpc3RSZXEgPSB7XG4gICAgICAgICAgICB3b3JrZmxvd1J1bkJhY2tlbmRJZCxcbiAgICAgICAgICAgIHdvcmtmbG93Sm9iUnVuQmFja2VuZElkLFxuICAgICAgICAgICAgbmFtZUZpbHRlcjogZ2VuZXJhdGVkXzEuU3RyaW5nVmFsdWUuY3JlYXRlKHsgdmFsdWU6IGFydGlmYWN0TmFtZSB9KVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBsaXN0UmVzID0geWllbGQgYXJ0aWZhY3RDbGllbnQuTGlzdEFydGlmYWN0cyhsaXN0UmVxKTtcbiAgICAgICAgaWYgKGxpc3RSZXMuYXJ0aWZhY3RzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGVycm9yc18xLkFydGlmYWN0Tm90Rm91bmRFcnJvcihgQXJ0aWZhY3Qgbm90IGZvdW5kIGZvciBuYW1lOiAke2FydGlmYWN0TmFtZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgYXJ0aWZhY3QgPSBsaXN0UmVzLmFydGlmYWN0c1swXTtcbiAgICAgICAgaWYgKGxpc3RSZXMuYXJ0aWZhY3RzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIGFydGlmYWN0ID0gbGlzdFJlcy5hcnRpZmFjdHMuc29ydCgoYSwgYikgPT4gTnVtYmVyKGIuZGF0YWJhc2VJZCkgLSBOdW1iZXIoYS5kYXRhYmFzZUlkKSlbMF07XG4gICAgICAgICAgICAoMCwgY29yZV8xLmRlYnVnKShgTW9yZSB0aGFuIG9uZSBhcnRpZmFjdCBmb3VuZCBmb3IgYSBzaW5nbGUgbmFtZSwgcmV0dXJuaW5nIG5ld2VzdCAoaWQ6ICR7YXJ0aWZhY3QuZGF0YWJhc2VJZH0pYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVxID0ge1xuICAgICAgICAgICAgd29ya2Zsb3dSdW5CYWNrZW5kSWQ6IGFydGlmYWN0LndvcmtmbG93UnVuQmFja2VuZElkLFxuICAgICAgICAgICAgd29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQ6IGFydGlmYWN0LndvcmtmbG93Sm9iUnVuQmFja2VuZElkLFxuICAgICAgICAgICAgbmFtZTogYXJ0aWZhY3QubmFtZVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZXMgPSB5aWVsZCBhcnRpZmFjdENsaWVudC5EZWxldGVBcnRpZmFjdChyZXEpO1xuICAgICAgICAoMCwgY29yZV8xLmluZm8pKGBBcnRpZmFjdCAnJHthcnRpZmFjdE5hbWV9JyAoSUQ6ICR7cmVzLmFydGlmYWN0SWR9KSBkZWxldGVkYCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpZDogTnVtYmVyKHJlcy5hcnRpZmFjdElkKVxuICAgICAgICB9O1xuICAgIH0pO1xufVxuZXhwb3J0cy5kZWxldGVBcnRpZmFjdEludGVybmFsID0gZGVsZXRlQXJ0aWZhY3RJbnRlcm5hbDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlbGV0ZS1hcnRpZmFjdC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmxpc3RBcnRpZmFjdHNJbnRlcm5hbCA9IGV4cG9ydHMubGlzdEFydGlmYWN0c1B1YmxpYyA9IHZvaWQgMDtcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCJAYWN0aW9ucy9jb3JlXCIpO1xuY29uc3QgZ2l0aHViXzEgPSByZXF1aXJlKFwiQGFjdGlvbnMvZ2l0aHViXCIpO1xuY29uc3QgdXNlcl9hZ2VudF8xID0gcmVxdWlyZShcIi4uL3NoYXJlZC91c2VyLWFnZW50XCIpO1xuY29uc3QgcmV0cnlfb3B0aW9uc18xID0gcmVxdWlyZShcIi4vcmV0cnktb3B0aW9uc1wiKTtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiQGFjdGlvbnMvZ2l0aHViL2xpYi91dGlsc1wiKTtcbmNvbnN0IHBsdWdpbl9yZXF1ZXN0X2xvZ18xID0gcmVxdWlyZShcIkBvY3Rva2l0L3BsdWdpbi1yZXF1ZXN0LWxvZ1wiKTtcbmNvbnN0IHBsdWdpbl9yZXRyeV8xID0gcmVxdWlyZShcIkBvY3Rva2l0L3BsdWdpbi1yZXRyeVwiKTtcbmNvbnN0IGFydGlmYWN0X3R3aXJwX2NsaWVudF8xID0gcmVxdWlyZShcIi4uL3NoYXJlZC9hcnRpZmFjdC10d2lycC1jbGllbnRcIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vc2hhcmVkL3V0aWxcIik7XG5jb25zdCBnZW5lcmF0ZWRfMSA9IHJlcXVpcmUoXCIuLi8uLi9nZW5lcmF0ZWRcIik7XG4vLyBMaW1pdGluZyB0byAxMDAwIGZvciBwZXJmIHJlYXNvbnNcbmNvbnN0IG1heGltdW1BcnRpZmFjdENvdW50ID0gMTAwMDtcbmNvbnN0IHBhZ2luYXRpb25Db3VudCA9IDEwMDtcbmNvbnN0IG1heE51bWJlck9mUGFnZXMgPSBtYXhpbXVtQXJ0aWZhY3RDb3VudCAvIHBhZ2luYXRpb25Db3VudDtcbmZ1bmN0aW9uIGxpc3RBcnRpZmFjdHNQdWJsaWMod29ya2Zsb3dSdW5JZCwgcmVwb3NpdG9yeU93bmVyLCByZXBvc2l0b3J5TmFtZSwgdG9rZW4sIGxhdGVzdCA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgKDAsIGNvcmVfMS5pbmZvKShgRmV0Y2hpbmcgYXJ0aWZhY3QgbGlzdCBmb3Igd29ya2Zsb3cgcnVuICR7d29ya2Zsb3dSdW5JZH0gaW4gcmVwb3NpdG9yeSAke3JlcG9zaXRvcnlPd25lcn0vJHtyZXBvc2l0b3J5TmFtZX1gKTtcbiAgICAgICAgbGV0IGFydGlmYWN0cyA9IFtdO1xuICAgICAgICBjb25zdCBbcmV0cnlPcHRzLCByZXF1ZXN0T3B0c10gPSAoMCwgcmV0cnlfb3B0aW9uc18xLmdldFJldHJ5T3B0aW9ucykodXRpbHNfMS5kZWZhdWx0cyk7XG4gICAgICAgIGNvbnN0IG9wdHMgPSB7XG4gICAgICAgICAgICBsb2c6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHVzZXJBZ2VudDogKDAsIHVzZXJfYWdlbnRfMS5nZXRVc2VyQWdlbnRTdHJpbmcpKCksXG4gICAgICAgICAgICBwcmV2aWV3czogdW5kZWZpbmVkLFxuICAgICAgICAgICAgcmV0cnk6IHJldHJ5T3B0cyxcbiAgICAgICAgICAgIHJlcXVlc3Q6IHJlcXVlc3RPcHRzXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGdpdGh1YiA9ICgwLCBnaXRodWJfMS5nZXRPY3Rva2l0KSh0b2tlbiwgb3B0cywgcGx1Z2luX3JldHJ5XzEucmV0cnksIHBsdWdpbl9yZXF1ZXN0X2xvZ18xLnJlcXVlc3RMb2cpO1xuICAgICAgICBsZXQgY3VycmVudFBhZ2VOdW1iZXIgPSAxO1xuICAgICAgICBjb25zdCB7IGRhdGE6IGxpc3RBcnRpZmFjdFJlc3BvbnNlIH0gPSB5aWVsZCBnaXRodWIucmVzdC5hY3Rpb25zLmxpc3RXb3JrZmxvd1J1bkFydGlmYWN0cyh7XG4gICAgICAgICAgICBvd25lcjogcmVwb3NpdG9yeU93bmVyLFxuICAgICAgICAgICAgcmVwbzogcmVwb3NpdG9yeU5hbWUsXG4gICAgICAgICAgICBydW5faWQ6IHdvcmtmbG93UnVuSWQsXG4gICAgICAgICAgICBwZXJfcGFnZTogcGFnaW5hdGlvbkNvdW50LFxuICAgICAgICAgICAgcGFnZTogY3VycmVudFBhZ2VOdW1iZXJcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCBudW1iZXJPZlBhZ2VzID0gTWF0aC5jZWlsKGxpc3RBcnRpZmFjdFJlc3BvbnNlLnRvdGFsX2NvdW50IC8gcGFnaW5hdGlvbkNvdW50KTtcbiAgICAgICAgY29uc3QgdG90YWxBcnRpZmFjdENvdW50ID0gbGlzdEFydGlmYWN0UmVzcG9uc2UudG90YWxfY291bnQ7XG4gICAgICAgIGlmICh0b3RhbEFydGlmYWN0Q291bnQgPiBtYXhpbXVtQXJ0aWZhY3RDb3VudCkge1xuICAgICAgICAgICAgKDAsIGNvcmVfMS53YXJuaW5nKShgV29ya2Zsb3cgcnVuICR7d29ya2Zsb3dSdW5JZH0gaGFzIG1vcmUgdGhhbiAxMDAwIGFydGlmYWN0cy4gUmVzdWx0cyB3aWxsIGJlIGluY29tcGxldGUgYXMgb25seSB0aGUgZmlyc3QgJHttYXhpbXVtQXJ0aWZhY3RDb3VudH0gYXJ0aWZhY3RzIHdpbGwgYmUgcmV0dXJuZWRgKTtcbiAgICAgICAgICAgIG51bWJlck9mUGFnZXMgPSBtYXhOdW1iZXJPZlBhZ2VzO1xuICAgICAgICB9XG4gICAgICAgIC8vIEl0ZXJhdGUgb3ZlciB0aGUgZmlyc3QgcGFnZVxuICAgICAgICBmb3IgKGNvbnN0IGFydGlmYWN0IG9mIGxpc3RBcnRpZmFjdFJlc3BvbnNlLmFydGlmYWN0cykge1xuICAgICAgICAgICAgYXJ0aWZhY3RzLnB1c2goe1xuICAgICAgICAgICAgICAgIG5hbWU6IGFydGlmYWN0Lm5hbWUsXG4gICAgICAgICAgICAgICAgaWQ6IGFydGlmYWN0LmlkLFxuICAgICAgICAgICAgICAgIHNpemU6IGFydGlmYWN0LnNpemVfaW5fYnl0ZXMsXG4gICAgICAgICAgICAgICAgY3JlYXRlZEF0OiBhcnRpZmFjdC5jcmVhdGVkX2F0ID8gbmV3IERhdGUoYXJ0aWZhY3QuY3JlYXRlZF9hdCkgOiB1bmRlZmluZWRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIEl0ZXJhdGUgb3ZlciBhbnkgcmVtYWluaW5nIHBhZ2VzXG4gICAgICAgIGZvciAoY3VycmVudFBhZ2VOdW1iZXI7IGN1cnJlbnRQYWdlTnVtYmVyIDwgbnVtYmVyT2ZQYWdlczsgY3VycmVudFBhZ2VOdW1iZXIrKykge1xuICAgICAgICAgICAgY3VycmVudFBhZ2VOdW1iZXIrKztcbiAgICAgICAgICAgICgwLCBjb3JlXzEuZGVidWcpKGBGZXRjaGluZyBwYWdlICR7Y3VycmVudFBhZ2VOdW1iZXJ9IG9mIGFydGlmYWN0IGxpc3RgKTtcbiAgICAgICAgICAgIGNvbnN0IHsgZGF0YTogbGlzdEFydGlmYWN0UmVzcG9uc2UgfSA9IHlpZWxkIGdpdGh1Yi5yZXN0LmFjdGlvbnMubGlzdFdvcmtmbG93UnVuQXJ0aWZhY3RzKHtcbiAgICAgICAgICAgICAgICBvd25lcjogcmVwb3NpdG9yeU93bmVyLFxuICAgICAgICAgICAgICAgIHJlcG86IHJlcG9zaXRvcnlOYW1lLFxuICAgICAgICAgICAgICAgIHJ1bl9pZDogd29ya2Zsb3dSdW5JZCxcbiAgICAgICAgICAgICAgICBwZXJfcGFnZTogcGFnaW5hdGlvbkNvdW50LFxuICAgICAgICAgICAgICAgIHBhZ2U6IGN1cnJlbnRQYWdlTnVtYmVyXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgYXJ0aWZhY3Qgb2YgbGlzdEFydGlmYWN0UmVzcG9uc2UuYXJ0aWZhY3RzKSB7XG4gICAgICAgICAgICAgICAgYXJ0aWZhY3RzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBhcnRpZmFjdC5uYW1lLFxuICAgICAgICAgICAgICAgICAgICBpZDogYXJ0aWZhY3QuaWQsXG4gICAgICAgICAgICAgICAgICAgIHNpemU6IGFydGlmYWN0LnNpemVfaW5fYnl0ZXMsXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZWRBdDogYXJ0aWZhY3QuY3JlYXRlZF9hdFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBuZXcgRGF0ZShhcnRpZmFjdC5jcmVhdGVkX2F0KVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobGF0ZXN0KSB7XG4gICAgICAgICAgICBhcnRpZmFjdHMgPSBmaWx0ZXJMYXRlc3QoYXJ0aWZhY3RzKTtcbiAgICAgICAgfVxuICAgICAgICAoMCwgY29yZV8xLmluZm8pKGBGb3VuZCAke2FydGlmYWN0cy5sZW5ndGh9IGFydGlmYWN0KHMpYCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhcnRpZmFjdHNcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cbmV4cG9ydHMubGlzdEFydGlmYWN0c1B1YmxpYyA9IGxpc3RBcnRpZmFjdHNQdWJsaWM7XG5mdW5jdGlvbiBsaXN0QXJ0aWZhY3RzSW50ZXJuYWwobGF0ZXN0ID0gZmFsc2UpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBhcnRpZmFjdENsaWVudCA9ICgwLCBhcnRpZmFjdF90d2lycF9jbGllbnRfMS5pbnRlcm5hbEFydGlmYWN0VHdpcnBDbGllbnQpKCk7XG4gICAgICAgIGNvbnN0IHsgd29ya2Zsb3dSdW5CYWNrZW5kSWQsIHdvcmtmbG93Sm9iUnVuQmFja2VuZElkIH0gPSAoMCwgdXRpbF8xLmdldEJhY2tlbmRJZHNGcm9tVG9rZW4pKCk7XG4gICAgICAgIGNvbnN0IHJlcSA9IHtcbiAgICAgICAgICAgIHdvcmtmbG93UnVuQmFja2VuZElkLFxuICAgICAgICAgICAgd29ya2Zsb3dKb2JSdW5CYWNrZW5kSWRcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmVzID0geWllbGQgYXJ0aWZhY3RDbGllbnQuTGlzdEFydGlmYWN0cyhyZXEpO1xuICAgICAgICBsZXQgYXJ0aWZhY3RzID0gcmVzLmFydGlmYWN0cy5tYXAoYXJ0aWZhY3QgPT4gKHtcbiAgICAgICAgICAgIG5hbWU6IGFydGlmYWN0Lm5hbWUsXG4gICAgICAgICAgICBpZDogTnVtYmVyKGFydGlmYWN0LmRhdGFiYXNlSWQpLFxuICAgICAgICAgICAgc2l6ZTogTnVtYmVyKGFydGlmYWN0LnNpemUpLFxuICAgICAgICAgICAgY3JlYXRlZEF0OiBhcnRpZmFjdC5jcmVhdGVkQXRcbiAgICAgICAgICAgICAgICA/IGdlbmVyYXRlZF8xLlRpbWVzdGFtcC50b0RhdGUoYXJ0aWZhY3QuY3JlYXRlZEF0KVxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgIH0pKTtcbiAgICAgICAgaWYgKGxhdGVzdCkge1xuICAgICAgICAgICAgYXJ0aWZhY3RzID0gZmlsdGVyTGF0ZXN0KGFydGlmYWN0cyk7XG4gICAgICAgIH1cbiAgICAgICAgKDAsIGNvcmVfMS5pbmZvKShgRm91bmQgJHthcnRpZmFjdHMubGVuZ3RofSBhcnRpZmFjdChzKWApO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYXJ0aWZhY3RzXG4gICAgICAgIH07XG4gICAgfSk7XG59XG5leHBvcnRzLmxpc3RBcnRpZmFjdHNJbnRlcm5hbCA9IGxpc3RBcnRpZmFjdHNJbnRlcm5hbDtcbi8qKlxuICogRmlsdGVycyBhIGxpc3Qgb2YgYXJ0aWZhY3RzIHRvIG9ubHkgaW5jbHVkZSB0aGUgbGF0ZXN0IGFydGlmYWN0IGZvciBlYWNoIG5hbWVcbiAqIEBwYXJhbSBhcnRpZmFjdHMgVGhlIGFydGlmYWN0cyB0byBmaWx0ZXJcbiAqIEByZXR1cm5zIFRoZSBmaWx0ZXJlZCBsaXN0IG9mIGFydGlmYWN0c1xuICovXG5mdW5jdGlvbiBmaWx0ZXJMYXRlc3QoYXJ0aWZhY3RzKSB7XG4gICAgYXJ0aWZhY3RzLnNvcnQoKGEsIGIpID0+IGIuaWQgLSBhLmlkKTtcbiAgICBjb25zdCBsYXRlc3RBcnRpZmFjdHMgPSBbXTtcbiAgICBjb25zdCBzZWVuQXJ0aWZhY3ROYW1lcyA9IG5ldyBTZXQoKTtcbiAgICBmb3IgKGNvbnN0IGFydGlmYWN0IG9mIGFydGlmYWN0cykge1xuICAgICAgICBpZiAoIXNlZW5BcnRpZmFjdE5hbWVzLmhhcyhhcnRpZmFjdC5uYW1lKSkge1xuICAgICAgICAgICAgbGF0ZXN0QXJ0aWZhY3RzLnB1c2goYXJ0aWZhY3QpO1xuICAgICAgICAgICAgc2VlbkFydGlmYWN0TmFtZXMuYWRkKGFydGlmYWN0Lm5hbWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBsYXRlc3RBcnRpZmFjdHM7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1saXN0LWFydGlmYWN0cy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG52YXIgX19yZXN0ID0gKHRoaXMgJiYgdGhpcy5fX3Jlc3QpIHx8IGZ1bmN0aW9uIChzLCBlKSB7XG4gICAgdmFyIHQgPSB7fTtcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcbiAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XG4gICAgICAgIH1cbiAgICByZXR1cm4gdDtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkRlZmF1bHRBcnRpZmFjdENsaWVudCA9IHZvaWQgMDtcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCJAYWN0aW9ucy9jb3JlXCIpO1xuY29uc3QgY29uZmlnXzEgPSByZXF1aXJlKFwiLi9zaGFyZWQvY29uZmlnXCIpO1xuY29uc3QgdXBsb2FkX2FydGlmYWN0XzEgPSByZXF1aXJlKFwiLi91cGxvYWQvdXBsb2FkLWFydGlmYWN0XCIpO1xuY29uc3QgZG93bmxvYWRfYXJ0aWZhY3RfMSA9IHJlcXVpcmUoXCIuL2Rvd25sb2FkL2Rvd25sb2FkLWFydGlmYWN0XCIpO1xuY29uc3QgZGVsZXRlX2FydGlmYWN0XzEgPSByZXF1aXJlKFwiLi9kZWxldGUvZGVsZXRlLWFydGlmYWN0XCIpO1xuY29uc3QgZ2V0X2FydGlmYWN0XzEgPSByZXF1aXJlKFwiLi9maW5kL2dldC1hcnRpZmFjdFwiKTtcbmNvbnN0IGxpc3RfYXJ0aWZhY3RzXzEgPSByZXF1aXJlKFwiLi9maW5kL2xpc3QtYXJ0aWZhY3RzXCIpO1xuY29uc3QgZXJyb3JzXzEgPSByZXF1aXJlKFwiLi9zaGFyZWQvZXJyb3JzXCIpO1xuLyoqXG4gKiBUaGUgZGVmYXVsdCBhcnRpZmFjdCBjbGllbnQgdGhhdCBpcyB1c2VkIGJ5IHRoZSBhcnRpZmFjdCBhY3Rpb24ocykuXG4gKi9cbmNsYXNzIERlZmF1bHRBcnRpZmFjdENsaWVudCB7XG4gICAgdXBsb2FkQXJ0aWZhY3QobmFtZSwgZmlsZXMsIHJvb3REaXJlY3RvcnksIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKCgwLCBjb25maWdfMS5pc0doZXMpKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGVycm9yc18xLkdIRVNOb3RTdXBwb3J0ZWRFcnJvcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gKDAsIHVwbG9hZF9hcnRpZmFjdF8xLnVwbG9hZEFydGlmYWN0KShuYW1lLCBmaWxlcywgcm9vdERpcmVjdG9yeSwgb3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAoMCwgY29yZV8xLndhcm5pbmcpKGBBcnRpZmFjdCB1cGxvYWQgZmFpbGVkIHdpdGggZXJyb3I6ICR7ZXJyb3J9LlxuXG5FcnJvcnMgY2FuIGJlIHRlbXBvcmFyeSwgc28gcGxlYXNlIHRyeSBhZ2FpbiBhbmQgb3B0aW9uYWxseSBydW4gdGhlIGFjdGlvbiB3aXRoIGRlYnVnIG1vZGUgZW5hYmxlZCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cblxuSWYgdGhlIGVycm9yIHBlcnNpc3RzLCBwbGVhc2UgY2hlY2sgd2hldGhlciBBY3Rpb25zIGlzIG9wZXJhdGluZyBub3JtYWxseSBhdCBbaHR0cHM6Ly9naXRodWJzdGF0dXMuY29tXShodHRwczovL3d3dy5naXRodWJzdGF0dXMuY29tKS5gKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGRvd25sb2FkQXJ0aWZhY3QoYXJ0aWZhY3RJZCwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAoKDAsIGNvbmZpZ18xLmlzR2hlcykoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuR0hFU05vdFN1cHBvcnRlZEVycm9yKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuZmluZEJ5KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgZmluZEJ5OiB7IHJlcG9zaXRvcnlPd25lciwgcmVwb3NpdG9yeU5hbWUsIHRva2VuIH0gfSA9IG9wdGlvbnMsIGRvd25sb2FkT3B0aW9ucyA9IF9fcmVzdChvcHRpb25zLCBbXCJmaW5kQnlcIl0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIGRvd25sb2FkX2FydGlmYWN0XzEuZG93bmxvYWRBcnRpZmFjdFB1YmxpYykoYXJ0aWZhY3RJZCwgcmVwb3NpdG9yeU93bmVyLCByZXBvc2l0b3J5TmFtZSwgdG9rZW4sIGRvd25sb2FkT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAoMCwgZG93bmxvYWRfYXJ0aWZhY3RfMS5kb3dubG9hZEFydGlmYWN0SW50ZXJuYWwpKGFydGlmYWN0SWQsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgKDAsIGNvcmVfMS53YXJuaW5nKShgRG93bmxvYWQgQXJ0aWZhY3QgZmFpbGVkIHdpdGggZXJyb3I6ICR7ZXJyb3J9LlxuXG5FcnJvcnMgY2FuIGJlIHRlbXBvcmFyeSwgc28gcGxlYXNlIHRyeSBhZ2FpbiBhbmQgb3B0aW9uYWxseSBydW4gdGhlIGFjdGlvbiB3aXRoIGRlYnVnIG1vZGUgZW5hYmxlZCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cblxuSWYgdGhlIGVycm9yIHBlcnNpc3RzLCBwbGVhc2UgY2hlY2sgd2hldGhlciBBY3Rpb25zIGFuZCBBUEkgcmVxdWVzdHMgYXJlIG9wZXJhdGluZyBub3JtYWxseSBhdCBbaHR0cHM6Ly9naXRodWJzdGF0dXMuY29tXShodHRwczovL3d3dy5naXRodWJzdGF0dXMuY29tKS5gKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGxpc3RBcnRpZmFjdHMob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAoKDAsIGNvbmZpZ18xLmlzR2hlcykoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuR0hFU05vdFN1cHBvcnRlZEVycm9yKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuZmluZEJ5KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgZmluZEJ5OiB7IHdvcmtmbG93UnVuSWQsIHJlcG9zaXRvcnlPd25lciwgcmVwb3NpdG9yeU5hbWUsIHRva2VuIH0gfSA9IG9wdGlvbnM7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgbGlzdF9hcnRpZmFjdHNfMS5saXN0QXJ0aWZhY3RzUHVibGljKSh3b3JrZmxvd1J1bklkLCByZXBvc2l0b3J5T3duZXIsIHJlcG9zaXRvcnlOYW1lLCB0b2tlbiwgb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmxhdGVzdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAoMCwgbGlzdF9hcnRpZmFjdHNfMS5saXN0QXJ0aWZhY3RzSW50ZXJuYWwpKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5sYXRlc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgKDAsIGNvcmVfMS53YXJuaW5nKShgTGlzdGluZyBBcnRpZmFjdHMgZmFpbGVkIHdpdGggZXJyb3I6ICR7ZXJyb3J9LlxuXG5FcnJvcnMgY2FuIGJlIHRlbXBvcmFyeSwgc28gcGxlYXNlIHRyeSBhZ2FpbiBhbmQgb3B0aW9uYWxseSBydW4gdGhlIGFjdGlvbiB3aXRoIGRlYnVnIG1vZGUgZW5hYmxlZCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cblxuSWYgdGhlIGVycm9yIHBlcnNpc3RzLCBwbGVhc2UgY2hlY2sgd2hldGhlciBBY3Rpb25zIGFuZCBBUEkgcmVxdWVzdHMgYXJlIG9wZXJhdGluZyBub3JtYWxseSBhdCBbaHR0cHM6Ly9naXRodWJzdGF0dXMuY29tXShodHRwczovL3d3dy5naXRodWJzdGF0dXMuY29tKS5gKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGdldEFydGlmYWN0KGFydGlmYWN0TmFtZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAoKDAsIGNvbmZpZ18xLmlzR2hlcykoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuR0hFU05vdFN1cHBvcnRlZEVycm9yKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuZmluZEJ5KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgZmluZEJ5OiB7IHdvcmtmbG93UnVuSWQsIHJlcG9zaXRvcnlPd25lciwgcmVwb3NpdG9yeU5hbWUsIHRva2VuIH0gfSA9IG9wdGlvbnM7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgZ2V0X2FydGlmYWN0XzEuZ2V0QXJ0aWZhY3RQdWJsaWMpKGFydGlmYWN0TmFtZSwgd29ya2Zsb3dSdW5JZCwgcmVwb3NpdG9yeU93bmVyLCByZXBvc2l0b3J5TmFtZSwgdG9rZW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gKDAsIGdldF9hcnRpZmFjdF8xLmdldEFydGlmYWN0SW50ZXJuYWwpKGFydGlmYWN0TmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAoMCwgY29yZV8xLndhcm5pbmcpKGBHZXQgQXJ0aWZhY3QgZmFpbGVkIHdpdGggZXJyb3I6ICR7ZXJyb3J9LlxuXG5FcnJvcnMgY2FuIGJlIHRlbXBvcmFyeSwgc28gcGxlYXNlIHRyeSBhZ2FpbiBhbmQgb3B0aW9uYWxseSBydW4gdGhlIGFjdGlvbiB3aXRoIGRlYnVnIG1vZGUgZW5hYmxlZCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cblxuSWYgdGhlIGVycm9yIHBlcnNpc3RzLCBwbGVhc2UgY2hlY2sgd2hldGhlciBBY3Rpb25zIGFuZCBBUEkgcmVxdWVzdHMgYXJlIG9wZXJhdGluZyBub3JtYWxseSBhdCBbaHR0cHM6Ly9naXRodWJzdGF0dXMuY29tXShodHRwczovL3d3dy5naXRodWJzdGF0dXMuY29tKS5gKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGRlbGV0ZUFydGlmYWN0KGFydGlmYWN0TmFtZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAoKDAsIGNvbmZpZ18xLmlzR2hlcykoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuR0hFU05vdFN1cHBvcnRlZEVycm9yKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuZmluZEJ5KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgZmluZEJ5OiB7IHJlcG9zaXRvcnlPd25lciwgcmVwb3NpdG9yeU5hbWUsIHdvcmtmbG93UnVuSWQsIHRva2VuIH0gfSA9IG9wdGlvbnM7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgZGVsZXRlX2FydGlmYWN0XzEuZGVsZXRlQXJ0aWZhY3RQdWJsaWMpKGFydGlmYWN0TmFtZSwgd29ya2Zsb3dSdW5JZCwgcmVwb3NpdG9yeU93bmVyLCByZXBvc2l0b3J5TmFtZSwgdG9rZW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gKDAsIGRlbGV0ZV9hcnRpZmFjdF8xLmRlbGV0ZUFydGlmYWN0SW50ZXJuYWwpKGFydGlmYWN0TmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAoMCwgY29yZV8xLndhcm5pbmcpKGBEZWxldGUgQXJ0aWZhY3QgZmFpbGVkIHdpdGggZXJyb3I6ICR7ZXJyb3J9LlxuXG5FcnJvcnMgY2FuIGJlIHRlbXBvcmFyeSwgc28gcGxlYXNlIHRyeSBhZ2FpbiBhbmQgb3B0aW9uYWxseSBydW4gdGhlIGFjdGlvbiB3aXRoIGRlYnVnIG1vZGUgZW5hYmxlZCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cblxuSWYgdGhlIGVycm9yIHBlcnNpc3RzLCBwbGVhc2UgY2hlY2sgd2hldGhlciBBY3Rpb25zIGFuZCBBUEkgcmVxdWVzdHMgYXJlIG9wZXJhdGluZyBub3JtYWxseSBhdCBbaHR0cHM6Ly9naXRodWJzdGF0dXMuY29tXShodHRwczovL3d3dy5naXRodWJzdGF0dXMuY29tKS5gKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0cy5EZWZhdWx0QXJ0aWZhY3RDbGllbnQgPSBEZWZhdWx0QXJ0aWZhY3RDbGllbnQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jbGllbnQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWludGVyZmFjZXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19leHBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2V4cG9ydFN0YXIpIHx8IGZ1bmN0aW9uKG0sIGV4cG9ydHMpIHtcbiAgICBmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGV4cG9ydHMsIHApKSBfX2NyZWF0ZUJpbmRpbmcoZXhwb3J0cywgbSwgcCk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY2xpZW50XzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9jbGllbnRcIik7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vaW50ZXJuYWwvc2hhcmVkL2ludGVyZmFjZXNcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2ludGVybmFsL3NoYXJlZC9lcnJvcnNcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2ludGVybmFsL2NsaWVudFwiKSwgZXhwb3J0cyk7XG5jb25zdCBjbGllbnQgPSBuZXcgY2xpZW50XzEuRGVmYXVsdEFydGlmYWN0Q2xpZW50KCk7XG5leHBvcnRzLmRlZmF1bHQgPSBjbGllbnQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hcnRpZmFjdC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Db250ZXh0ID0gdm9pZCAwO1xuY29uc3QgZnNfMSA9IHJlcXVpcmUoXCJmc1wiKTtcbmNvbnN0IG9zXzEgPSByZXF1aXJlKFwib3NcIik7XG5jbGFzcyBDb250ZXh0IHtcbiAgICAvKipcbiAgICAgKiBIeWRyYXRlIHRoZSBjb250ZXh0IGZyb20gdGhlIGVudmlyb25tZW50XG4gICAgICovXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jO1xuICAgICAgICB0aGlzLnBheWxvYWQgPSB7fTtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52LkdJVEhVQl9FVkVOVF9QQVRIKSB7XG4gICAgICAgICAgICBpZiAoKDAsIGZzXzEuZXhpc3RzU3luYykocHJvY2Vzcy5lbnYuR0lUSFVCX0VWRU5UX1BBVEgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYXlsb2FkID0gSlNPTi5wYXJzZSgoMCwgZnNfMS5yZWFkRmlsZVN5bmMpKHByb2Nlc3MuZW52LkdJVEhVQl9FVkVOVF9QQVRILCB7IGVuY29kaW5nOiAndXRmOCcgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IHByb2Nlc3MuZW52LkdJVEhVQl9FVkVOVF9QQVRIO1xuICAgICAgICAgICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGBHSVRIVUJfRVZFTlRfUEFUSCAke3BhdGh9IGRvZXMgbm90IGV4aXN0JHtvc18xLkVPTH1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmV2ZW50TmFtZSA9IHByb2Nlc3MuZW52LkdJVEhVQl9FVkVOVF9OQU1FO1xuICAgICAgICB0aGlzLnNoYSA9IHByb2Nlc3MuZW52LkdJVEhVQl9TSEE7XG4gICAgICAgIHRoaXMucmVmID0gcHJvY2Vzcy5lbnYuR0lUSFVCX1JFRjtcbiAgICAgICAgdGhpcy53b3JrZmxvdyA9IHByb2Nlc3MuZW52LkdJVEhVQl9XT1JLRkxPVztcbiAgICAgICAgdGhpcy5hY3Rpb24gPSBwcm9jZXNzLmVudi5HSVRIVUJfQUNUSU9OO1xuICAgICAgICB0aGlzLmFjdG9yID0gcHJvY2Vzcy5lbnYuR0lUSFVCX0FDVE9SO1xuICAgICAgICB0aGlzLmpvYiA9IHByb2Nlc3MuZW52LkdJVEhVQl9KT0I7XG4gICAgICAgIHRoaXMucnVuTnVtYmVyID0gcGFyc2VJbnQocHJvY2Vzcy5lbnYuR0lUSFVCX1JVTl9OVU1CRVIsIDEwKTtcbiAgICAgICAgdGhpcy5ydW5JZCA9IHBhcnNlSW50KHByb2Nlc3MuZW52LkdJVEhVQl9SVU5fSUQsIDEwKTtcbiAgICAgICAgdGhpcy5hcGlVcmwgPSAoX2EgPSBwcm9jZXNzLmVudi5HSVRIVUJfQVBJX1VSTCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogYGh0dHBzOi8vYXBpLmdpdGh1Yi5jb21gO1xuICAgICAgICB0aGlzLnNlcnZlclVybCA9IChfYiA9IHByb2Nlc3MuZW52LkdJVEhVQl9TRVJWRVJfVVJMKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBgaHR0cHM6Ly9naXRodWIuY29tYDtcbiAgICAgICAgdGhpcy5ncmFwaHFsVXJsID1cbiAgICAgICAgICAgIChfYyA9IHByb2Nlc3MuZW52LkdJVEhVQl9HUkFQSFFMX1VSTCkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogYGh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vZ3JhcGhxbGA7XG4gICAgfVxuICAgIGdldCBpc3N1ZSgpIHtcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IHRoaXMucGF5bG9hZDtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5yZXBvKSwgeyBudW1iZXI6IChwYXlsb2FkLmlzc3VlIHx8IHBheWxvYWQucHVsbF9yZXF1ZXN0IHx8IHBheWxvYWQpLm51bWJlciB9KTtcbiAgICB9XG4gICAgZ2V0IHJlcG8oKSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5HSVRIVUJfUkVQT1NJVE9SWSkge1xuICAgICAgICAgICAgY29uc3QgW293bmVyLCByZXBvXSA9IHByb2Nlc3MuZW52LkdJVEhVQl9SRVBPU0lUT1JZLnNwbGl0KCcvJyk7XG4gICAgICAgICAgICByZXR1cm4geyBvd25lciwgcmVwbyB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnBheWxvYWQucmVwb3NpdG9yeSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBvd25lcjogdGhpcy5wYXlsb2FkLnJlcG9zaXRvcnkub3duZXIubG9naW4sXG4gICAgICAgICAgICAgICAgcmVwbzogdGhpcy5wYXlsb2FkLnJlcG9zaXRvcnkubmFtZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJjb250ZXh0LnJlcG8gcmVxdWlyZXMgYSBHSVRIVUJfUkVQT1NJVE9SWSBlbnZpcm9ubWVudCB2YXJpYWJsZSBsaWtlICdvd25lci9yZXBvJ1wiKTtcbiAgICB9XG59XG5leHBvcnRzLkNvbnRleHQgPSBDb250ZXh0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29udGV4dC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0QXBpQmFzZVVybCA9IGV4cG9ydHMuZ2V0UHJveHlGZXRjaCA9IGV4cG9ydHMuZ2V0UHJveHlBZ2VudERpc3BhdGNoZXIgPSBleHBvcnRzLmdldFByb3h5QWdlbnQgPSBleHBvcnRzLmdldEF1dGhTdHJpbmcgPSB2b2lkIDA7XG5jb25zdCBodHRwQ2xpZW50ID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJAYWN0aW9ucy9odHRwLWNsaWVudFwiKSk7XG5jb25zdCB1bmRpY2lfMSA9IHJlcXVpcmUoXCJ1bmRpY2lcIik7XG5mdW5jdGlvbiBnZXRBdXRoU3RyaW5nKHRva2VuLCBvcHRpb25zKSB7XG4gICAgaWYgKCF0b2tlbiAmJiAhb3B0aW9ucy5hdXRoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUGFyYW1ldGVyIHRva2VuIG9yIG9wdHMuYXV0aCBpcyByZXF1aXJlZCcpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0b2tlbiAmJiBvcHRpb25zLmF1dGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJhbWV0ZXJzIHRva2VuIGFuZCBvcHRzLmF1dGggbWF5IG5vdCBib3RoIGJlIHNwZWNpZmllZCcpO1xuICAgIH1cbiAgICByZXR1cm4gdHlwZW9mIG9wdGlvbnMuYXV0aCA9PT0gJ3N0cmluZycgPyBvcHRpb25zLmF1dGggOiBgdG9rZW4gJHt0b2tlbn1gO1xufVxuZXhwb3J0cy5nZXRBdXRoU3RyaW5nID0gZ2V0QXV0aFN0cmluZztcbmZ1bmN0aW9uIGdldFByb3h5QWdlbnQoZGVzdGluYXRpb25VcmwpIHtcbiAgICBjb25zdCBoYyA9IG5ldyBodHRwQ2xpZW50Lkh0dHBDbGllbnQoKTtcbiAgICByZXR1cm4gaGMuZ2V0QWdlbnQoZGVzdGluYXRpb25VcmwpO1xufVxuZXhwb3J0cy5nZXRQcm94eUFnZW50ID0gZ2V0UHJveHlBZ2VudDtcbmZ1bmN0aW9uIGdldFByb3h5QWdlbnREaXNwYXRjaGVyKGRlc3RpbmF0aW9uVXJsKSB7XG4gICAgY29uc3QgaGMgPSBuZXcgaHR0cENsaWVudC5IdHRwQ2xpZW50KCk7XG4gICAgcmV0dXJuIGhjLmdldEFnZW50RGlzcGF0Y2hlcihkZXN0aW5hdGlvblVybCk7XG59XG5leHBvcnRzLmdldFByb3h5QWdlbnREaXNwYXRjaGVyID0gZ2V0UHJveHlBZ2VudERpc3BhdGNoZXI7XG5mdW5jdGlvbiBnZXRQcm94eUZldGNoKGRlc3RpbmF0aW9uVXJsKSB7XG4gICAgY29uc3QgaHR0cERpc3BhdGNoZXIgPSBnZXRQcm94eUFnZW50RGlzcGF0Y2hlcihkZXN0aW5hdGlvblVybCk7XG4gICAgY29uc3QgcHJveHlGZXRjaCA9ICh1cmwsIG9wdHMpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgcmV0dXJuICgwLCB1bmRpY2lfMS5mZXRjaCkodXJsLCBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdHMpLCB7IGRpc3BhdGNoZXI6IGh0dHBEaXNwYXRjaGVyIH0pKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcHJveHlGZXRjaDtcbn1cbmV4cG9ydHMuZ2V0UHJveHlGZXRjaCA9IGdldFByb3h5RmV0Y2g7XG5mdW5jdGlvbiBnZXRBcGlCYXNlVXJsKCkge1xuICAgIHJldHVybiBwcm9jZXNzLmVudlsnR0lUSFVCX0FQSV9VUkwnXSB8fCAnaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbSc7XG59XG5leHBvcnRzLmdldEFwaUJhc2VVcmwgPSBnZXRBcGlCYXNlVXJsO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbHMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wRGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgX19nZXRPd25Qcm9wTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcztcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fZXhwb3J0ID0gKHRhcmdldCwgYWxsKSA9PiB7XG4gIGZvciAodmFyIG5hbWUgaW4gYWxsKVxuICAgIF9fZGVmUHJvcCh0YXJnZXQsIG5hbWUsIHsgZ2V0OiBhbGxbbmFtZV0sIGVudW1lcmFibGU6IHRydWUgfSk7XG59O1xudmFyIF9fY29weVByb3BzID0gKHRvLCBmcm9tLCBleGNlcHQsIGRlc2MpID0+IHtcbiAgaWYgKGZyb20gJiYgdHlwZW9mIGZyb20gPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGZyb20gPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGZvciAobGV0IGtleSBvZiBfX2dldE93blByb3BOYW1lcyhmcm9tKSlcbiAgICAgIGlmICghX19oYXNPd25Qcm9wLmNhbGwodG8sIGtleSkgJiYga2V5ICE9PSBleGNlcHQpXG4gICAgICAgIF9fZGVmUHJvcCh0bywga2V5LCB7IGdldDogKCkgPT4gZnJvbVtrZXldLCBlbnVtZXJhYmxlOiAhKGRlc2MgPSBfX2dldE93blByb3BEZXNjKGZyb20sIGtleSkpIHx8IGRlc2MuZW51bWVyYWJsZSB9KTtcbiAgfVxuICByZXR1cm4gdG87XG59O1xudmFyIF9fdG9Db21tb25KUyA9IChtb2QpID0+IF9fY29weVByb3BzKF9fZGVmUHJvcCh7fSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSksIG1vZCk7XG5cbi8vIHBrZy9kaXN0LXNyYy9pbmRleC5qc1xudmFyIGRpc3Rfc3JjX2V4cG9ydHMgPSB7fTtcbl9fZXhwb3J0KGRpc3Rfc3JjX2V4cG9ydHMsIHtcbiAgZW5kcG9pbnQ6ICgpID0+IGVuZHBvaW50XG59KTtcbm1vZHVsZS5leHBvcnRzID0gX190b0NvbW1vbkpTKGRpc3Rfc3JjX2V4cG9ydHMpO1xuXG4vLyBwa2cvZGlzdC1zcmMvZGVmYXVsdHMuanNcbnZhciBpbXBvcnRfdW5pdmVyc2FsX3VzZXJfYWdlbnQgPSByZXF1aXJlKFwidW5pdmVyc2FsLXVzZXItYWdlbnRcIik7XG5cbi8vIHBrZy9kaXN0LXNyYy92ZXJzaW9uLmpzXG52YXIgVkVSU0lPTiA9IFwiOS4wLjVcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL2RlZmF1bHRzLmpzXG52YXIgdXNlckFnZW50ID0gYG9jdG9raXQtZW5kcG9pbnQuanMvJHtWRVJTSU9OfSAkeygwLCBpbXBvcnRfdW5pdmVyc2FsX3VzZXJfYWdlbnQuZ2V0VXNlckFnZW50KSgpfWA7XG52YXIgREVGQVVMVFMgPSB7XG4gIG1ldGhvZDogXCJHRVRcIixcbiAgYmFzZVVybDogXCJodHRwczovL2FwaS5naXRodWIuY29tXCIsXG4gIGhlYWRlcnM6IHtcbiAgICBhY2NlcHQ6IFwiYXBwbGljYXRpb24vdm5kLmdpdGh1Yi52Mytqc29uXCIsXG4gICAgXCJ1c2VyLWFnZW50XCI6IHVzZXJBZ2VudFxuICB9LFxuICBtZWRpYVR5cGU6IHtcbiAgICBmb3JtYXQ6IFwiXCJcbiAgfVxufTtcblxuLy8gcGtnL2Rpc3Qtc3JjL3V0aWwvbG93ZXJjYXNlLWtleXMuanNcbmZ1bmN0aW9uIGxvd2VyY2FzZUtleXMob2JqZWN0KSB7XG4gIGlmICghb2JqZWN0KSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmplY3QpLnJlZHVjZSgobmV3T2JqLCBrZXkpID0+IHtcbiAgICBuZXdPYmpba2V5LnRvTG93ZXJDYXNlKCldID0gb2JqZWN0W2tleV07XG4gICAgcmV0dXJuIG5ld09iajtcbiAgfSwge30pO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC9pcy1wbGFpbi1vYmplY3QuanNcbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fCB2YWx1ZSA9PT0gbnVsbClcbiAgICByZXR1cm4gZmFsc2U7XG4gIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpICE9PSBcIltvYmplY3QgT2JqZWN0XVwiKVxuICAgIHJldHVybiBmYWxzZTtcbiAgY29uc3QgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpO1xuICBpZiAocHJvdG8gPT09IG51bGwpXG4gICAgcmV0dXJuIHRydWU7XG4gIGNvbnN0IEN0b3IgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocHJvdG8sIFwiY29uc3RydWN0b3JcIikgJiYgcHJvdG8uY29uc3RydWN0b3I7XG4gIHJldHVybiB0eXBlb2YgQ3RvciA9PT0gXCJmdW5jdGlvblwiICYmIEN0b3IgaW5zdGFuY2VvZiBDdG9yICYmIEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsKEN0b3IpID09PSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbCh2YWx1ZSk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy91dGlsL21lcmdlLWRlZXAuanNcbmZ1bmN0aW9uIG1lcmdlRGVlcChkZWZhdWx0cywgb3B0aW9ucykge1xuICBjb25zdCByZXN1bHQgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0cyk7XG4gIE9iamVjdC5rZXlzKG9wdGlvbnMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgIGlmIChpc1BsYWluT2JqZWN0KG9wdGlvbnNba2V5XSkpIHtcbiAgICAgIGlmICghKGtleSBpbiBkZWZhdWx0cykpXG4gICAgICAgIE9iamVjdC5hc3NpZ24ocmVzdWx0LCB7IFtrZXldOiBvcHRpb25zW2tleV0gfSk7XG4gICAgICBlbHNlXG4gICAgICAgIHJlc3VsdFtrZXldID0gbWVyZ2VEZWVwKGRlZmF1bHRzW2tleV0sIG9wdGlvbnNba2V5XSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIE9iamVjdC5hc3NpZ24ocmVzdWx0LCB7IFtrZXldOiBvcHRpb25zW2tleV0gfSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3V0aWwvcmVtb3ZlLXVuZGVmaW5lZC1wcm9wZXJ0aWVzLmpzXG5mdW5jdGlvbiByZW1vdmVVbmRlZmluZWRQcm9wZXJ0aWVzKG9iaikge1xuICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICBpZiAob2JqW2tleV0gPT09IHZvaWQgMCkge1xuICAgICAgZGVsZXRlIG9ialtrZXldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb2JqO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvbWVyZ2UuanNcbmZ1bmN0aW9uIG1lcmdlKGRlZmF1bHRzLCByb3V0ZSwgb3B0aW9ucykge1xuICBpZiAodHlwZW9mIHJvdXRlID09PSBcInN0cmluZ1wiKSB7XG4gICAgbGV0IFttZXRob2QsIHVybF0gPSByb3V0ZS5zcGxpdChcIiBcIik7XG4gICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24odXJsID8geyBtZXRob2QsIHVybCB9IDogeyB1cmw6IG1ldGhvZCB9LCBvcHRpb25zKTtcbiAgfSBlbHNlIHtcbiAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgcm91dGUpO1xuICB9XG4gIG9wdGlvbnMuaGVhZGVycyA9IGxvd2VyY2FzZUtleXMob3B0aW9ucy5oZWFkZXJzKTtcbiAgcmVtb3ZlVW5kZWZpbmVkUHJvcGVydGllcyhvcHRpb25zKTtcbiAgcmVtb3ZlVW5kZWZpbmVkUHJvcGVydGllcyhvcHRpb25zLmhlYWRlcnMpO1xuICBjb25zdCBtZXJnZWRPcHRpb25zID0gbWVyZ2VEZWVwKGRlZmF1bHRzIHx8IHt9LCBvcHRpb25zKTtcbiAgaWYgKG9wdGlvbnMudXJsID09PSBcIi9ncmFwaHFsXCIpIHtcbiAgICBpZiAoZGVmYXVsdHMgJiYgZGVmYXVsdHMubWVkaWFUeXBlLnByZXZpZXdzPy5sZW5ndGgpIHtcbiAgICAgIG1lcmdlZE9wdGlvbnMubWVkaWFUeXBlLnByZXZpZXdzID0gZGVmYXVsdHMubWVkaWFUeXBlLnByZXZpZXdzLmZpbHRlcihcbiAgICAgICAgKHByZXZpZXcpID0+ICFtZXJnZWRPcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cy5pbmNsdWRlcyhwcmV2aWV3KVxuICAgICAgKS5jb25jYXQobWVyZ2VkT3B0aW9ucy5tZWRpYVR5cGUucHJldmlld3MpO1xuICAgIH1cbiAgICBtZXJnZWRPcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cyA9IChtZXJnZWRPcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cyB8fCBbXSkubWFwKChwcmV2aWV3KSA9PiBwcmV2aWV3LnJlcGxhY2UoLy1wcmV2aWV3LywgXCJcIikpO1xuICB9XG4gIHJldHVybiBtZXJnZWRPcHRpb25zO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC9hZGQtcXVlcnktcGFyYW1ldGVycy5qc1xuZnVuY3Rpb24gYWRkUXVlcnlQYXJhbWV0ZXJzKHVybCwgcGFyYW1ldGVycykge1xuICBjb25zdCBzZXBhcmF0b3IgPSAvXFw/Ly50ZXN0KHVybCkgPyBcIiZcIiA6IFwiP1wiO1xuICBjb25zdCBuYW1lcyA9IE9iamVjdC5rZXlzKHBhcmFtZXRlcnMpO1xuICBpZiAobmFtZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuICByZXR1cm4gdXJsICsgc2VwYXJhdG9yICsgbmFtZXMubWFwKChuYW1lKSA9PiB7XG4gICAgaWYgKG5hbWUgPT09IFwicVwiKSB7XG4gICAgICByZXR1cm4gXCJxPVwiICsgcGFyYW1ldGVycy5xLnNwbGl0KFwiK1wiKS5tYXAoZW5jb2RlVVJJQ29tcG9uZW50KS5qb2luKFwiK1wiKTtcbiAgICB9XG4gICAgcmV0dXJuIGAke25hbWV9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtZXRlcnNbbmFtZV0pfWA7XG4gIH0pLmpvaW4oXCImXCIpO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC9leHRyYWN0LXVybC12YXJpYWJsZS1uYW1lcy5qc1xudmFyIHVybFZhcmlhYmxlUmVnZXggPSAvXFx7W159XStcXH0vZztcbmZ1bmN0aW9uIHJlbW92ZU5vbkNoYXJzKHZhcmlhYmxlTmFtZSkge1xuICByZXR1cm4gdmFyaWFibGVOYW1lLnJlcGxhY2UoL15cXFcrfFxcVyskL2csIFwiXCIpLnNwbGl0KC8sLyk7XG59XG5mdW5jdGlvbiBleHRyYWN0VXJsVmFyaWFibGVOYW1lcyh1cmwpIHtcbiAgY29uc3QgbWF0Y2hlcyA9IHVybC5tYXRjaCh1cmxWYXJpYWJsZVJlZ2V4KTtcbiAgaWYgKCFtYXRjaGVzKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHJldHVybiBtYXRjaGVzLm1hcChyZW1vdmVOb25DaGFycykucmVkdWNlKChhLCBiKSA9PiBhLmNvbmNhdChiKSwgW10pO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC9vbWl0LmpzXG5mdW5jdGlvbiBvbWl0KG9iamVjdCwga2V5c1RvT21pdCkge1xuICBjb25zdCByZXN1bHQgPSB7IF9fcHJvdG9fXzogbnVsbCB9O1xuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhvYmplY3QpKSB7XG4gICAgaWYgKGtleXNUb09taXQuaW5kZXhPZihrZXkpID09PSAtMSkge1xuICAgICAgcmVzdWx0W2tleV0gPSBvYmplY3Rba2V5XTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3V0aWwvdXJsLXRlbXBsYXRlLmpzXG5mdW5jdGlvbiBlbmNvZGVSZXNlcnZlZChzdHIpIHtcbiAgcmV0dXJuIHN0ci5zcGxpdCgvKCVbMC05QS1GYS1mXXsyfSkvZykubWFwKGZ1bmN0aW9uKHBhcnQpIHtcbiAgICBpZiAoIS8lWzAtOUEtRmEtZl0vLnRlc3QocGFydCkpIHtcbiAgICAgIHBhcnQgPSBlbmNvZGVVUkkocGFydCkucmVwbGFjZSgvJTVCL2csIFwiW1wiKS5yZXBsYWNlKC8lNUQvZywgXCJdXCIpO1xuICAgIH1cbiAgICByZXR1cm4gcGFydDtcbiAgfSkuam9pbihcIlwiKTtcbn1cbmZ1bmN0aW9uIGVuY29kZVVucmVzZXJ2ZWQoc3RyKSB7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3RyKS5yZXBsYWNlKC9bIScoKSpdL2csIGZ1bmN0aW9uKGMpIHtcbiAgICByZXR1cm4gXCIlXCIgKyBjLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7XG4gIH0pO1xufVxuZnVuY3Rpb24gZW5jb2RlVmFsdWUob3BlcmF0b3IsIHZhbHVlLCBrZXkpIHtcbiAgdmFsdWUgPSBvcGVyYXRvciA9PT0gXCIrXCIgfHwgb3BlcmF0b3IgPT09IFwiI1wiID8gZW5jb2RlUmVzZXJ2ZWQodmFsdWUpIDogZW5jb2RlVW5yZXNlcnZlZCh2YWx1ZSk7XG4gIGlmIChrZXkpIHtcbiAgICByZXR1cm4gZW5jb2RlVW5yZXNlcnZlZChrZXkpICsgXCI9XCIgKyB2YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cbmZ1bmN0aW9uIGlzRGVmaW5lZCh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IHZvaWQgMCAmJiB2YWx1ZSAhPT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzS2V5T3BlcmF0b3Iob3BlcmF0b3IpIHtcbiAgcmV0dXJuIG9wZXJhdG9yID09PSBcIjtcIiB8fCBvcGVyYXRvciA9PT0gXCImXCIgfHwgb3BlcmF0b3IgPT09IFwiP1wiO1xufVxuZnVuY3Rpb24gZ2V0VmFsdWVzKGNvbnRleHQsIG9wZXJhdG9yLCBrZXksIG1vZGlmaWVyKSB7XG4gIHZhciB2YWx1ZSA9IGNvbnRleHRba2V5XSwgcmVzdWx0ID0gW107XG4gIGlmIChpc0RlZmluZWQodmFsdWUpICYmIHZhbHVlICE9PSBcIlwiKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgdmFsdWUgPSB2YWx1ZS50b1N0cmluZygpO1xuICAgICAgaWYgKG1vZGlmaWVyICYmIG1vZGlmaWVyICE9PSBcIipcIikge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZygwLCBwYXJzZUludChtb2RpZmllciwgMTApKTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICBlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWUsIGlzS2V5T3BlcmF0b3Iob3BlcmF0b3IpID8ga2V5IDogXCJcIilcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChtb2RpZmllciA9PT0gXCIqXCIpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgdmFsdWUuZmlsdGVyKGlzRGVmaW5lZCkuZm9yRWFjaChmdW5jdGlvbih2YWx1ZTIpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICAgICAgICBlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWUyLCBpc0tleU9wZXJhdG9yKG9wZXJhdG9yKSA/IGtleSA6IFwiXCIpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIE9iamVjdC5rZXlzKHZhbHVlKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHtcbiAgICAgICAgICAgIGlmIChpc0RlZmluZWQodmFsdWVba10pKSB7XG4gICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGVuY29kZVZhbHVlKG9wZXJhdG9yLCB2YWx1ZVtrXSwgaykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB0bXAgPSBbXTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgdmFsdWUuZmlsdGVyKGlzRGVmaW5lZCkuZm9yRWFjaChmdW5jdGlvbih2YWx1ZTIpIHtcbiAgICAgICAgICAgIHRtcC5wdXNoKGVuY29kZVZhbHVlKG9wZXJhdG9yLCB2YWx1ZTIpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBPYmplY3Qua2V5cyh2YWx1ZSkuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgICAgICAgICBpZiAoaXNEZWZpbmVkKHZhbHVlW2tdKSkge1xuICAgICAgICAgICAgICB0bXAucHVzaChlbmNvZGVVbnJlc2VydmVkKGspKTtcbiAgICAgICAgICAgICAgdG1wLnB1c2goZW5jb2RlVmFsdWUob3BlcmF0b3IsIHZhbHVlW2tdLnRvU3RyaW5nKCkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNLZXlPcGVyYXRvcihvcGVyYXRvcikpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChlbmNvZGVVbnJlc2VydmVkKGtleSkgKyBcIj1cIiArIHRtcC5qb2luKFwiLFwiKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodG1wLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKHRtcC5qb2luKFwiLFwiKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKG9wZXJhdG9yID09PSBcIjtcIikge1xuICAgICAgaWYgKGlzRGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goZW5jb2RlVW5yZXNlcnZlZChrZXkpKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBcIlwiICYmIChvcGVyYXRvciA9PT0gXCImXCIgfHwgb3BlcmF0b3IgPT09IFwiP1wiKSkge1xuICAgICAgcmVzdWx0LnB1c2goZW5jb2RlVW5yZXNlcnZlZChrZXkpICsgXCI9XCIpO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFwiXCIpIHtcbiAgICAgIHJlc3VsdC5wdXNoKFwiXCIpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gcGFyc2VVcmwodGVtcGxhdGUpIHtcbiAgcmV0dXJuIHtcbiAgICBleHBhbmQ6IGV4cGFuZC5iaW5kKG51bGwsIHRlbXBsYXRlKVxuICB9O1xufVxuZnVuY3Rpb24gZXhwYW5kKHRlbXBsYXRlLCBjb250ZXh0KSB7XG4gIHZhciBvcGVyYXRvcnMgPSBbXCIrXCIsIFwiI1wiLCBcIi5cIiwgXCIvXCIsIFwiO1wiLCBcIj9cIiwgXCImXCJdO1xuICB0ZW1wbGF0ZSA9IHRlbXBsYXRlLnJlcGxhY2UoXG4gICAgL1xceyhbXlxce1xcfV0rKVxcfXwoW15cXHtcXH1dKykvZyxcbiAgICBmdW5jdGlvbihfLCBleHByZXNzaW9uLCBsaXRlcmFsKSB7XG4gICAgICBpZiAoZXhwcmVzc2lvbikge1xuICAgICAgICBsZXQgb3BlcmF0b3IgPSBcIlwiO1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBbXTtcbiAgICAgICAgaWYgKG9wZXJhdG9ycy5pbmRleE9mKGV4cHJlc3Npb24uY2hhckF0KDApKSAhPT0gLTEpIHtcbiAgICAgICAgICBvcGVyYXRvciA9IGV4cHJlc3Npb24uY2hhckF0KDApO1xuICAgICAgICAgIGV4cHJlc3Npb24gPSBleHByZXNzaW9uLnN1YnN0cigxKTtcbiAgICAgICAgfVxuICAgICAgICBleHByZXNzaW9uLnNwbGl0KC8sL2cpLmZvckVhY2goZnVuY3Rpb24odmFyaWFibGUpIHtcbiAgICAgICAgICB2YXIgdG1wID0gLyhbXjpcXCpdKikoPzo6KFxcZCspfChcXCopKT8vLmV4ZWModmFyaWFibGUpO1xuICAgICAgICAgIHZhbHVlcy5wdXNoKGdldFZhbHVlcyhjb250ZXh0LCBvcGVyYXRvciwgdG1wWzFdLCB0bXBbMl0gfHwgdG1wWzNdKSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAob3BlcmF0b3IgJiYgb3BlcmF0b3IgIT09IFwiK1wiKSB7XG4gICAgICAgICAgdmFyIHNlcGFyYXRvciA9IFwiLFwiO1xuICAgICAgICAgIGlmIChvcGVyYXRvciA9PT0gXCI/XCIpIHtcbiAgICAgICAgICAgIHNlcGFyYXRvciA9IFwiJlwiO1xuICAgICAgICAgIH0gZWxzZSBpZiAob3BlcmF0b3IgIT09IFwiI1wiKSB7XG4gICAgICAgICAgICBzZXBhcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuICh2YWx1ZXMubGVuZ3RoICE9PSAwID8gb3BlcmF0b3IgOiBcIlwiKSArIHZhbHVlcy5qb2luKHNlcGFyYXRvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlcy5qb2luKFwiLFwiKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGVuY29kZVJlc2VydmVkKGxpdGVyYWwpO1xuICAgICAgfVxuICAgIH1cbiAgKTtcbiAgaWYgKHRlbXBsYXRlID09PSBcIi9cIikge1xuICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdGVtcGxhdGUucmVwbGFjZSgvXFwvJC8sIFwiXCIpO1xuICB9XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9wYXJzZS5qc1xuZnVuY3Rpb24gcGFyc2Uob3B0aW9ucykge1xuICBsZXQgbWV0aG9kID0gb3B0aW9ucy5tZXRob2QudG9VcHBlckNhc2UoKTtcbiAgbGV0IHVybCA9IChvcHRpb25zLnVybCB8fCBcIi9cIikucmVwbGFjZSgvOihbYS16XVxcdyspL2csIFwieyQxfVwiKTtcbiAgbGV0IGhlYWRlcnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmhlYWRlcnMpO1xuICBsZXQgYm9keTtcbiAgbGV0IHBhcmFtZXRlcnMgPSBvbWl0KG9wdGlvbnMsIFtcbiAgICBcIm1ldGhvZFwiLFxuICAgIFwiYmFzZVVybFwiLFxuICAgIFwidXJsXCIsXG4gICAgXCJoZWFkZXJzXCIsXG4gICAgXCJyZXF1ZXN0XCIsXG4gICAgXCJtZWRpYVR5cGVcIlxuICBdKTtcbiAgY29uc3QgdXJsVmFyaWFibGVOYW1lcyA9IGV4dHJhY3RVcmxWYXJpYWJsZU5hbWVzKHVybCk7XG4gIHVybCA9IHBhcnNlVXJsKHVybCkuZXhwYW5kKHBhcmFtZXRlcnMpO1xuICBpZiAoIS9eaHR0cC8udGVzdCh1cmwpKSB7XG4gICAgdXJsID0gb3B0aW9ucy5iYXNlVXJsICsgdXJsO1xuICB9XG4gIGNvbnN0IG9taXR0ZWRQYXJhbWV0ZXJzID0gT2JqZWN0LmtleXMob3B0aW9ucykuZmlsdGVyKChvcHRpb24pID0+IHVybFZhcmlhYmxlTmFtZXMuaW5jbHVkZXMob3B0aW9uKSkuY29uY2F0KFwiYmFzZVVybFwiKTtcbiAgY29uc3QgcmVtYWluaW5nUGFyYW1ldGVycyA9IG9taXQocGFyYW1ldGVycywgb21pdHRlZFBhcmFtZXRlcnMpO1xuICBjb25zdCBpc0JpbmFyeVJlcXVlc3QgPSAvYXBwbGljYXRpb25cXC9vY3RldC1zdHJlYW0vaS50ZXN0KGhlYWRlcnMuYWNjZXB0KTtcbiAgaWYgKCFpc0JpbmFyeVJlcXVlc3QpIHtcbiAgICBpZiAob3B0aW9ucy5tZWRpYVR5cGUuZm9ybWF0KSB7XG4gICAgICBoZWFkZXJzLmFjY2VwdCA9IGhlYWRlcnMuYWNjZXB0LnNwbGl0KC8sLykubWFwKFxuICAgICAgICAoZm9ybWF0KSA9PiBmb3JtYXQucmVwbGFjZShcbiAgICAgICAgICAvYXBwbGljYXRpb25cXC92bmQoXFwuXFx3KykoXFwudjMpPyhcXC5cXHcrKT8oXFwranNvbik/JC8sXG4gICAgICAgICAgYGFwcGxpY2F0aW9uL3ZuZCQxJDIuJHtvcHRpb25zLm1lZGlhVHlwZS5mb3JtYXR9YFxuICAgICAgICApXG4gICAgICApLmpvaW4oXCIsXCIpO1xuICAgIH1cbiAgICBpZiAodXJsLmVuZHNXaXRoKFwiL2dyYXBocWxcIikpIHtcbiAgICAgIGlmIChvcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cz8ubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHByZXZpZXdzRnJvbUFjY2VwdEhlYWRlciA9IGhlYWRlcnMuYWNjZXB0Lm1hdGNoKC9bXFx3LV0rKD89LXByZXZpZXcpL2cpIHx8IFtdO1xuICAgICAgICBoZWFkZXJzLmFjY2VwdCA9IHByZXZpZXdzRnJvbUFjY2VwdEhlYWRlci5jb25jYXQob3B0aW9ucy5tZWRpYVR5cGUucHJldmlld3MpLm1hcCgocHJldmlldykgPT4ge1xuICAgICAgICAgIGNvbnN0IGZvcm1hdCA9IG9wdGlvbnMubWVkaWFUeXBlLmZvcm1hdCA/IGAuJHtvcHRpb25zLm1lZGlhVHlwZS5mb3JtYXR9YCA6IFwiK2pzb25cIjtcbiAgICAgICAgICByZXR1cm4gYGFwcGxpY2F0aW9uL3ZuZC5naXRodWIuJHtwcmV2aWV3fS1wcmV2aWV3JHtmb3JtYXR9YDtcbiAgICAgICAgfSkuam9pbihcIixcIik7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChbXCJHRVRcIiwgXCJIRUFEXCJdLmluY2x1ZGVzKG1ldGhvZCkpIHtcbiAgICB1cmwgPSBhZGRRdWVyeVBhcmFtZXRlcnModXJsLCByZW1haW5pbmdQYXJhbWV0ZXJzKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoXCJkYXRhXCIgaW4gcmVtYWluaW5nUGFyYW1ldGVycykge1xuICAgICAgYm9keSA9IHJlbWFpbmluZ1BhcmFtZXRlcnMuZGF0YTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKE9iamVjdC5rZXlzKHJlbWFpbmluZ1BhcmFtZXRlcnMpLmxlbmd0aCkge1xuICAgICAgICBib2R5ID0gcmVtYWluaW5nUGFyYW1ldGVycztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKCFoZWFkZXJzW1wiY29udGVudC10eXBlXCJdICYmIHR5cGVvZiBib2R5ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgaGVhZGVyc1tcImNvbnRlbnQtdHlwZVwiXSA9IFwiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOFwiO1xuICB9XG4gIGlmIChbXCJQQVRDSFwiLCBcIlBVVFwiXS5pbmNsdWRlcyhtZXRob2QpICYmIHR5cGVvZiBib2R5ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgYm9keSA9IFwiXCI7XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oXG4gICAgeyBtZXRob2QsIHVybCwgaGVhZGVycyB9LFxuICAgIHR5cGVvZiBib2R5ICE9PSBcInVuZGVmaW5lZFwiID8geyBib2R5IH0gOiBudWxsLFxuICAgIG9wdGlvbnMucmVxdWVzdCA/IHsgcmVxdWVzdDogb3B0aW9ucy5yZXF1ZXN0IH0gOiBudWxsXG4gICk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9lbmRwb2ludC13aXRoLWRlZmF1bHRzLmpzXG5mdW5jdGlvbiBlbmRwb2ludFdpdGhEZWZhdWx0cyhkZWZhdWx0cywgcm91dGUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHBhcnNlKG1lcmdlKGRlZmF1bHRzLCByb3V0ZSwgb3B0aW9ucykpO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvd2l0aC1kZWZhdWx0cy5qc1xuZnVuY3Rpb24gd2l0aERlZmF1bHRzKG9sZERlZmF1bHRzLCBuZXdEZWZhdWx0cykge1xuICBjb25zdCBERUZBVUxUUzIgPSBtZXJnZShvbGREZWZhdWx0cywgbmV3RGVmYXVsdHMpO1xuICBjb25zdCBlbmRwb2ludDIgPSBlbmRwb2ludFdpdGhEZWZhdWx0cy5iaW5kKG51bGwsIERFRkFVTFRTMik7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKGVuZHBvaW50Miwge1xuICAgIERFRkFVTFRTOiBERUZBVUxUUzIsXG4gICAgZGVmYXVsdHM6IHdpdGhEZWZhdWx0cy5iaW5kKG51bGwsIERFRkFVTFRTMiksXG4gICAgbWVyZ2U6IG1lcmdlLmJpbmQobnVsbCwgREVGQVVMVFMyKSxcbiAgICBwYXJzZVxuICB9KTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG52YXIgZW5kcG9pbnQgPSB3aXRoRGVmYXVsdHMobnVsbCwgREVGQVVMVFMpO1xuLy8gQW5ub3RhdGUgdGhlIENvbW1vbkpTIGV4cG9ydCBuYW1lcyBmb3IgRVNNIGltcG9ydCBpbiBub2RlOlxuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gIGVuZHBvaW50XG59KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGUgPSBPYmplY3QuY3JlYXRlO1xudmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BEZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBfX2dldE93blByb3BOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO1xudmFyIF9fZ2V0UHJvdG9PZiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fZXhwb3J0ID0gKHRhcmdldCwgYWxsKSA9PiB7XG4gIGZvciAodmFyIG5hbWUgaW4gYWxsKVxuICAgIF9fZGVmUHJvcCh0YXJnZXQsIG5hbWUsIHsgZ2V0OiBhbGxbbmFtZV0sIGVudW1lcmFibGU6IHRydWUgfSk7XG59O1xudmFyIF9fY29weVByb3BzID0gKHRvLCBmcm9tLCBleGNlcHQsIGRlc2MpID0+IHtcbiAgaWYgKGZyb20gJiYgdHlwZW9mIGZyb20gPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGZyb20gPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGZvciAobGV0IGtleSBvZiBfX2dldE93blByb3BOYW1lcyhmcm9tKSlcbiAgICAgIGlmICghX19oYXNPd25Qcm9wLmNhbGwodG8sIGtleSkgJiYga2V5ICE9PSBleGNlcHQpXG4gICAgICAgIF9fZGVmUHJvcCh0bywga2V5LCB7IGdldDogKCkgPT4gZnJvbVtrZXldLCBlbnVtZXJhYmxlOiAhKGRlc2MgPSBfX2dldE93blByb3BEZXNjKGZyb20sIGtleSkpIHx8IGRlc2MuZW51bWVyYWJsZSB9KTtcbiAgfVxuICByZXR1cm4gdG87XG59O1xudmFyIF9fdG9FU00gPSAobW9kLCBpc05vZGVNb2RlLCB0YXJnZXQpID0+ICh0YXJnZXQgPSBtb2QgIT0gbnVsbCA/IF9fY3JlYXRlKF9fZ2V0UHJvdG9PZihtb2QpKSA6IHt9LCBfX2NvcHlQcm9wcyhcbiAgLy8gSWYgdGhlIGltcG9ydGVyIGlzIGluIG5vZGUgY29tcGF0aWJpbGl0eSBtb2RlIG9yIHRoaXMgaXMgbm90IGFuIEVTTVxuICAvLyBmaWxlIHRoYXQgaGFzIGJlZW4gY29udmVydGVkIHRvIGEgQ29tbW9uSlMgZmlsZSB1c2luZyBhIEJhYmVsLVxuICAvLyBjb21wYXRpYmxlIHRyYW5zZm9ybSAoaS5lLiBcIl9fZXNNb2R1bGVcIiBoYXMgbm90IGJlZW4gc2V0KSwgdGhlbiBzZXRcbiAgLy8gXCJkZWZhdWx0XCIgdG8gdGhlIENvbW1vbkpTIFwibW9kdWxlLmV4cG9ydHNcIiBmb3Igbm9kZSBjb21wYXRpYmlsaXR5LlxuICBpc05vZGVNb2RlIHx8ICFtb2QgfHwgIW1vZC5fX2VzTW9kdWxlID8gX19kZWZQcm9wKHRhcmdldCwgXCJkZWZhdWx0XCIsIHsgdmFsdWU6IG1vZCwgZW51bWVyYWJsZTogdHJ1ZSB9KSA6IHRhcmdldCxcbiAgbW9kXG4pKTtcbnZhciBfX3RvQ29tbW9uSlMgPSAobW9kKSA9PiBfX2NvcHlQcm9wcyhfX2RlZlByb3Aoe30sIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pLCBtb2QpO1xuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbnZhciBkaXN0X3NyY19leHBvcnRzID0ge307XG5fX2V4cG9ydChkaXN0X3NyY19leHBvcnRzLCB7XG4gIFJlcXVlc3RFcnJvcjogKCkgPT4gUmVxdWVzdEVycm9yXG59KTtcbm1vZHVsZS5leHBvcnRzID0gX190b0NvbW1vbkpTKGRpc3Rfc3JjX2V4cG9ydHMpO1xudmFyIGltcG9ydF9kZXByZWNhdGlvbiA9IHJlcXVpcmUoXCJkZXByZWNhdGlvblwiKTtcbnZhciBpbXBvcnRfb25jZSA9IF9fdG9FU00ocmVxdWlyZShcIm9uY2VcIikpO1xudmFyIGxvZ09uY2VDb2RlID0gKDAsIGltcG9ydF9vbmNlLmRlZmF1bHQpKChkZXByZWNhdGlvbikgPT4gY29uc29sZS53YXJuKGRlcHJlY2F0aW9uKSk7XG52YXIgbG9nT25jZUhlYWRlcnMgPSAoMCwgaW1wb3J0X29uY2UuZGVmYXVsdCkoKGRlcHJlY2F0aW9uKSA9PiBjb25zb2xlLndhcm4oZGVwcmVjYXRpb24pKTtcbnZhciBSZXF1ZXN0RXJyb3IgPSBjbGFzcyBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZSwgc3RhdHVzQ29kZSwgb3B0aW9ucykge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gICAgfVxuICAgIHRoaXMubmFtZSA9IFwiSHR0cEVycm9yXCI7XG4gICAgdGhpcy5zdGF0dXMgPSBzdGF0dXNDb2RlO1xuICAgIGxldCBoZWFkZXJzO1xuICAgIGlmIChcImhlYWRlcnNcIiBpbiBvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLmhlYWRlcnMgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGhlYWRlcnMgPSBvcHRpb25zLmhlYWRlcnM7XG4gICAgfVxuICAgIGlmIChcInJlc3BvbnNlXCIgaW4gb3B0aW9ucykge1xuICAgICAgdGhpcy5yZXNwb25zZSA9IG9wdGlvbnMucmVzcG9uc2U7XG4gICAgICBoZWFkZXJzID0gb3B0aW9ucy5yZXNwb25zZS5oZWFkZXJzO1xuICAgIH1cbiAgICBjb25zdCByZXF1ZXN0Q29weSA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMucmVxdWVzdCk7XG4gICAgaWYgKG9wdGlvbnMucmVxdWVzdC5oZWFkZXJzLmF1dGhvcml6YXRpb24pIHtcbiAgICAgIHJlcXVlc3RDb3B5LmhlYWRlcnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLnJlcXVlc3QuaGVhZGVycywge1xuICAgICAgICBhdXRob3JpemF0aW9uOiBvcHRpb25zLnJlcXVlc3QuaGVhZGVycy5hdXRob3JpemF0aW9uLnJlcGxhY2UoXG4gICAgICAgICAgLyAuKiQvLFxuICAgICAgICAgIFwiIFtSRURBQ1RFRF1cIlxuICAgICAgICApXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmVxdWVzdENvcHkudXJsID0gcmVxdWVzdENvcHkudXJsLnJlcGxhY2UoL1xcYmNsaWVudF9zZWNyZXQ9XFx3Ky9nLCBcImNsaWVudF9zZWNyZXQ9W1JFREFDVEVEXVwiKS5yZXBsYWNlKC9cXGJhY2Nlc3NfdG9rZW49XFx3Ky9nLCBcImFjY2Vzc190b2tlbj1bUkVEQUNURURdXCIpO1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3RDb3B5O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImNvZGVcIiwge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBsb2dPbmNlQ29kZShcbiAgICAgICAgICBuZXcgaW1wb3J0X2RlcHJlY2F0aW9uLkRlcHJlY2F0aW9uKFxuICAgICAgICAgICAgXCJbQG9jdG9raXQvcmVxdWVzdC1lcnJvcl0gYGVycm9yLmNvZGVgIGlzIGRlcHJlY2F0ZWQsIHVzZSBgZXJyb3Iuc3RhdHVzYC5cIlxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHN0YXR1c0NvZGU7XG4gICAgICB9XG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwiaGVhZGVyc1wiLCB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGxvZ09uY2VIZWFkZXJzKFxuICAgICAgICAgIG5ldyBpbXBvcnRfZGVwcmVjYXRpb24uRGVwcmVjYXRpb24oXG4gICAgICAgICAgICBcIltAb2N0b2tpdC9yZXF1ZXN0LWVycm9yXSBgZXJyb3IuaGVhZGVyc2AgaXMgZGVwcmVjYXRlZCwgdXNlIGBlcnJvci5yZXNwb25zZS5oZWFkZXJzYC5cIlxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGhlYWRlcnMgfHwge307XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn07XG4vLyBBbm5vdGF0ZSB0aGUgQ29tbW9uSlMgZXhwb3J0IG5hbWVzIGZvciBFU00gaW1wb3J0IGluIG5vZGU6XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgUmVxdWVzdEVycm9yXG59KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIF9fZ2V0T3duUHJvcE5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XG52YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX2V4cG9ydCA9ICh0YXJnZXQsIGFsbCkgPT4ge1xuICBmb3IgKHZhciBuYW1lIGluIGFsbClcbiAgICBfX2RlZlByb3AodGFyZ2V0LCBuYW1lLCB7IGdldDogYWxsW25hbWVdLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xufTtcbnZhciBfX2NvcHlQcm9wcyA9ICh0bywgZnJvbSwgZXhjZXB0LCBkZXNjKSA9PiB7XG4gIGlmIChmcm9tICYmIHR5cGVvZiBmcm9tID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBmcm9tID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBmb3IgKGxldCBrZXkgb2YgX19nZXRPd25Qcm9wTmFtZXMoZnJvbSkpXG4gICAgICBpZiAoIV9faGFzT3duUHJvcC5jYWxsKHRvLCBrZXkpICYmIGtleSAhPT0gZXhjZXB0KVxuICAgICAgICBfX2RlZlByb3AodG8sIGtleSwgeyBnZXQ6ICgpID0+IGZyb21ba2V5XSwgZW51bWVyYWJsZTogIShkZXNjID0gX19nZXRPd25Qcm9wRGVzYyhmcm9tLCBrZXkpKSB8fCBkZXNjLmVudW1lcmFibGUgfSk7XG4gIH1cbiAgcmV0dXJuIHRvO1xufTtcbnZhciBfX3RvQ29tbW9uSlMgPSAobW9kKSA9PiBfX2NvcHlQcm9wcyhfX2RlZlByb3Aoe30sIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pLCBtb2QpO1xuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbnZhciBkaXN0X3NyY19leHBvcnRzID0ge307XG5fX2V4cG9ydChkaXN0X3NyY19leHBvcnRzLCB7XG4gIHJlcXVlc3Q6ICgpID0+IHJlcXVlc3Rcbn0pO1xubW9kdWxlLmV4cG9ydHMgPSBfX3RvQ29tbW9uSlMoZGlzdF9zcmNfZXhwb3J0cyk7XG52YXIgaW1wb3J0X2VuZHBvaW50ID0gcmVxdWlyZShcIkBvY3Rva2l0L2VuZHBvaW50XCIpO1xudmFyIGltcG9ydF91bml2ZXJzYWxfdXNlcl9hZ2VudCA9IHJlcXVpcmUoXCJ1bml2ZXJzYWwtdXNlci1hZ2VudFwiKTtcblxuLy8gcGtnL2Rpc3Qtc3JjL3ZlcnNpb24uanNcbnZhciBWRVJTSU9OID0gXCI4LjQuMFwiO1xuXG4vLyBwa2cvZGlzdC1zcmMvaXMtcGxhaW4tb2JqZWN0LmpzXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgfHwgdmFsdWUgPT09IG51bGwpXG4gICAgcmV0dXJuIGZhbHNlO1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSAhPT0gXCJbb2JqZWN0IE9iamVjdF1cIilcbiAgICByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKTtcbiAgaWYgKHByb3RvID09PSBudWxsKVxuICAgIHJldHVybiB0cnVlO1xuICBjb25zdCBDdG9yID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3RvLCBcImNvbnN0cnVjdG9yXCIpICYmIHByb3RvLmNvbnN0cnVjdG9yO1xuICByZXR1cm4gdHlwZW9mIEN0b3IgPT09IFwiZnVuY3Rpb25cIiAmJiBDdG9yIGluc3RhbmNlb2YgQ3RvciAmJiBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbChDdG9yKSA9PT0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGwodmFsdWUpO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvZmV0Y2gtd3JhcHBlci5qc1xudmFyIGltcG9ydF9yZXF1ZXN0X2Vycm9yID0gcmVxdWlyZShcIkBvY3Rva2l0L3JlcXVlc3QtZXJyb3JcIik7XG5cbi8vIHBrZy9kaXN0LXNyYy9nZXQtYnVmZmVyLXJlc3BvbnNlLmpzXG5mdW5jdGlvbiBnZXRCdWZmZXJSZXNwb25zZShyZXNwb25zZSkge1xuICByZXR1cm4gcmVzcG9uc2UuYXJyYXlCdWZmZXIoKTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2ZldGNoLXdyYXBwZXIuanNcbmZ1bmN0aW9uIGZldGNoV3JhcHBlcihyZXF1ZXN0T3B0aW9ucykge1xuICB2YXIgX2EsIF9iLCBfYywgX2Q7XG4gIGNvbnN0IGxvZyA9IHJlcXVlc3RPcHRpb25zLnJlcXVlc3QgJiYgcmVxdWVzdE9wdGlvbnMucmVxdWVzdC5sb2cgPyByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0LmxvZyA6IGNvbnNvbGU7XG4gIGNvbnN0IHBhcnNlU3VjY2Vzc1Jlc3BvbnNlQm9keSA9ICgoX2EgPSByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0KSA9PSBudWxsID8gdm9pZCAwIDogX2EucGFyc2VTdWNjZXNzUmVzcG9uc2VCb2R5KSAhPT0gZmFsc2U7XG4gIGlmIChpc1BsYWluT2JqZWN0KHJlcXVlc3RPcHRpb25zLmJvZHkpIHx8IEFycmF5LmlzQXJyYXkocmVxdWVzdE9wdGlvbnMuYm9keSkpIHtcbiAgICByZXF1ZXN0T3B0aW9ucy5ib2R5ID0gSlNPTi5zdHJpbmdpZnkocmVxdWVzdE9wdGlvbnMuYm9keSk7XG4gIH1cbiAgbGV0IGhlYWRlcnMgPSB7fTtcbiAgbGV0IHN0YXR1cztcbiAgbGV0IHVybDtcbiAgbGV0IHsgZmV0Y2ggfSA9IGdsb2JhbFRoaXM7XG4gIGlmICgoX2IgPSByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0KSA9PSBudWxsID8gdm9pZCAwIDogX2IuZmV0Y2gpIHtcbiAgICBmZXRjaCA9IHJlcXVlc3RPcHRpb25zLnJlcXVlc3QuZmV0Y2g7XG4gIH1cbiAgaWYgKCFmZXRjaCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiZmV0Y2ggaXMgbm90IHNldC4gUGxlYXNlIHBhc3MgYSBmZXRjaCBpbXBsZW1lbnRhdGlvbiBhcyBuZXcgT2N0b2tpdCh7IHJlcXVlc3Q6IHsgZmV0Y2ggfX0pLiBMZWFybiBtb3JlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9vY3Rva2l0L29jdG9raXQuanMvI2ZldGNoLW1pc3NpbmdcIlxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGZldGNoKHJlcXVlc3RPcHRpb25zLnVybCwge1xuICAgIG1ldGhvZDogcmVxdWVzdE9wdGlvbnMubWV0aG9kLFxuICAgIGJvZHk6IHJlcXVlc3RPcHRpb25zLmJvZHksXG4gICAgcmVkaXJlY3Q6IChfYyA9IHJlcXVlc3RPcHRpb25zLnJlcXVlc3QpID09IG51bGwgPyB2b2lkIDAgOiBfYy5yZWRpcmVjdCxcbiAgICBoZWFkZXJzOiByZXF1ZXN0T3B0aW9ucy5oZWFkZXJzLFxuICAgIHNpZ25hbDogKF9kID0gcmVxdWVzdE9wdGlvbnMucmVxdWVzdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9kLnNpZ25hbCxcbiAgICAvLyBkdXBsZXggbXVzdCBiZSBzZXQgaWYgcmVxdWVzdC5ib2R5IGlzIFJlYWRhYmxlU3RyZWFtIG9yIEFzeW5jIEl0ZXJhYmxlcy5cbiAgICAvLyBTZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1yZXF1ZXN0aW5pdC1kdXBsZXguXG4gICAgLi4ucmVxdWVzdE9wdGlvbnMuYm9keSAmJiB7IGR1cGxleDogXCJoYWxmXCIgfVxuICB9KS50aGVuKGFzeW5jIChyZXNwb25zZSkgPT4ge1xuICAgIHVybCA9IHJlc3BvbnNlLnVybDtcbiAgICBzdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgZm9yIChjb25zdCBrZXlBbmRWYWx1ZSBvZiByZXNwb25zZS5oZWFkZXJzKSB7XG4gICAgICBoZWFkZXJzW2tleUFuZFZhbHVlWzBdXSA9IGtleUFuZFZhbHVlWzFdO1xuICAgIH1cbiAgICBpZiAoXCJkZXByZWNhdGlvblwiIGluIGhlYWRlcnMpIHtcbiAgICAgIGNvbnN0IG1hdGNoZXMgPSBoZWFkZXJzLmxpbmsgJiYgaGVhZGVycy5saW5rLm1hdGNoKC88KFtePl0rKT47IHJlbD1cImRlcHJlY2F0aW9uXCIvKTtcbiAgICAgIGNvbnN0IGRlcHJlY2F0aW9uTGluayA9IG1hdGNoZXMgJiYgbWF0Y2hlcy5wb3AoKTtcbiAgICAgIGxvZy53YXJuKFxuICAgICAgICBgW0BvY3Rva2l0L3JlcXVlc3RdIFwiJHtyZXF1ZXN0T3B0aW9ucy5tZXRob2R9ICR7cmVxdWVzdE9wdGlvbnMudXJsfVwiIGlzIGRlcHJlY2F0ZWQuIEl0IGlzIHNjaGVkdWxlZCB0byBiZSByZW1vdmVkIG9uICR7aGVhZGVycy5zdW5zZXR9JHtkZXByZWNhdGlvbkxpbmsgPyBgLiBTZWUgJHtkZXByZWNhdGlvbkxpbmt9YCA6IFwiXCJ9YFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHN0YXR1cyA9PT0gMjA0IHx8IHN0YXR1cyA9PT0gMjA1KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChyZXF1ZXN0T3B0aW9ucy5tZXRob2QgPT09IFwiSEVBRFwiKSB7XG4gICAgICBpZiAoc3RhdHVzIDwgNDAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBpbXBvcnRfcmVxdWVzdF9lcnJvci5SZXF1ZXN0RXJyb3IocmVzcG9uc2Uuc3RhdHVzVGV4dCwgc3RhdHVzLCB7XG4gICAgICAgIHJlc3BvbnNlOiB7XG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIHN0YXR1cyxcbiAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgIGRhdGE6IHZvaWQgMFxuICAgICAgICB9LFxuICAgICAgICByZXF1ZXN0OiByZXF1ZXN0T3B0aW9uc1xuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChzdGF0dXMgPT09IDMwNCkge1xuICAgICAgdGhyb3cgbmV3IGltcG9ydF9yZXF1ZXN0X2Vycm9yLlJlcXVlc3RFcnJvcihcIk5vdCBtb2RpZmllZFwiLCBzdGF0dXMsIHtcbiAgICAgICAgcmVzcG9uc2U6IHtcbiAgICAgICAgICB1cmwsXG4gICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgZGF0YTogYXdhaXQgZ2V0UmVzcG9uc2VEYXRhKHJlc3BvbnNlKVxuICAgICAgICB9LFxuICAgICAgICByZXF1ZXN0OiByZXF1ZXN0T3B0aW9uc1xuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChzdGF0dXMgPj0gNDAwKSB7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ2V0UmVzcG9uc2VEYXRhKHJlc3BvbnNlKTtcbiAgICAgIGNvbnN0IGVycm9yID0gbmV3IGltcG9ydF9yZXF1ZXN0X2Vycm9yLlJlcXVlc3RFcnJvcih0b0Vycm9yTWVzc2FnZShkYXRhKSwgc3RhdHVzLCB7XG4gICAgICAgIHJlc3BvbnNlOiB7XG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIHN0YXR1cyxcbiAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgIGRhdGFcbiAgICAgICAgfSxcbiAgICAgICAgcmVxdWVzdDogcmVxdWVzdE9wdGlvbnNcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICAgIHJldHVybiBwYXJzZVN1Y2Nlc3NSZXNwb25zZUJvZHkgPyBhd2FpdCBnZXRSZXNwb25zZURhdGEocmVzcG9uc2UpIDogcmVzcG9uc2UuYm9keTtcbiAgfSkudGhlbigoZGF0YSkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXMsXG4gICAgICB1cmwsXG4gICAgICBoZWFkZXJzLFxuICAgICAgZGF0YVxuICAgIH07XG4gIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIGltcG9ydF9yZXF1ZXN0X2Vycm9yLlJlcXVlc3RFcnJvcilcbiAgICAgIHRocm93IGVycm9yO1xuICAgIGVsc2UgaWYgKGVycm9yLm5hbWUgPT09IFwiQWJvcnRFcnJvclwiKVxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgbGV0IG1lc3NhZ2UgPSBlcnJvci5tZXNzYWdlO1xuICAgIGlmIChlcnJvci5uYW1lID09PSBcIlR5cGVFcnJvclwiICYmIFwiY2F1c2VcIiBpbiBlcnJvcikge1xuICAgICAgaWYgKGVycm9yLmNhdXNlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgbWVzc2FnZSA9IGVycm9yLmNhdXNlLm1lc3NhZ2U7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBlcnJvci5jYXVzZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBtZXNzYWdlID0gZXJyb3IuY2F1c2U7XG4gICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyBpbXBvcnRfcmVxdWVzdF9lcnJvci5SZXF1ZXN0RXJyb3IobWVzc2FnZSwgNTAwLCB7XG4gICAgICByZXF1ZXN0OiByZXF1ZXN0T3B0aW9uc1xuICAgIH0pO1xuICB9KTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGdldFJlc3BvbnNlRGF0YShyZXNwb25zZSkge1xuICBjb25zdCBjb250ZW50VHlwZSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFwiY29udGVudC10eXBlXCIpO1xuICBpZiAoL2FwcGxpY2F0aW9uXFwvanNvbi8udGVzdChjb250ZW50VHlwZSkpIHtcbiAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpLmNhdGNoKCgpID0+IHJlc3BvbnNlLnRleHQoKSkuY2F0Y2goKCkgPT4gXCJcIik7XG4gIH1cbiAgaWYgKCFjb250ZW50VHlwZSB8fCAvXnRleHRcXC98Y2hhcnNldD11dGYtOCQvLnRlc3QoY29udGVudFR5cGUpKSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLnRleHQoKTtcbiAgfVxuICByZXR1cm4gZ2V0QnVmZmVyUmVzcG9uc2UocmVzcG9uc2UpO1xufVxuZnVuY3Rpb24gdG9FcnJvck1lc3NhZ2UoZGF0YSkge1xuICBpZiAodHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIpXG4gICAgcmV0dXJuIGRhdGE7XG4gIGxldCBzdWZmaXg7XG4gIGlmIChcImRvY3VtZW50YXRpb25fdXJsXCIgaW4gZGF0YSkge1xuICAgIHN1ZmZpeCA9IGAgLSAke2RhdGEuZG9jdW1lbnRhdGlvbl91cmx9YDtcbiAgfSBlbHNlIHtcbiAgICBzdWZmaXggPSBcIlwiO1xuICB9XG4gIGlmIChcIm1lc3NhZ2VcIiBpbiBkYXRhKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YS5lcnJvcnMpKSB7XG4gICAgICByZXR1cm4gYCR7ZGF0YS5tZXNzYWdlfTogJHtkYXRhLmVycm9ycy5tYXAoSlNPTi5zdHJpbmdpZnkpLmpvaW4oXCIsIFwiKX0ke3N1ZmZpeH1gO1xuICAgIH1cbiAgICByZXR1cm4gYCR7ZGF0YS5tZXNzYWdlfSR7c3VmZml4fWA7XG4gIH1cbiAgcmV0dXJuIGBVbmtub3duIGVycm9yOiAke0pTT04uc3RyaW5naWZ5KGRhdGEpfWA7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy93aXRoLWRlZmF1bHRzLmpzXG5mdW5jdGlvbiB3aXRoRGVmYXVsdHMob2xkRW5kcG9pbnQsIG5ld0RlZmF1bHRzKSB7XG4gIGNvbnN0IGVuZHBvaW50MiA9IG9sZEVuZHBvaW50LmRlZmF1bHRzKG5ld0RlZmF1bHRzKTtcbiAgY29uc3QgbmV3QXBpID0gZnVuY3Rpb24ocm91dGUsIHBhcmFtZXRlcnMpIHtcbiAgICBjb25zdCBlbmRwb2ludE9wdGlvbnMgPSBlbmRwb2ludDIubWVyZ2Uocm91dGUsIHBhcmFtZXRlcnMpO1xuICAgIGlmICghZW5kcG9pbnRPcHRpb25zLnJlcXVlc3QgfHwgIWVuZHBvaW50T3B0aW9ucy5yZXF1ZXN0Lmhvb2spIHtcbiAgICAgIHJldHVybiBmZXRjaFdyYXBwZXIoZW5kcG9pbnQyLnBhcnNlKGVuZHBvaW50T3B0aW9ucykpO1xuICAgIH1cbiAgICBjb25zdCByZXF1ZXN0MiA9IChyb3V0ZTIsIHBhcmFtZXRlcnMyKSA9PiB7XG4gICAgICByZXR1cm4gZmV0Y2hXcmFwcGVyKFxuICAgICAgICBlbmRwb2ludDIucGFyc2UoZW5kcG9pbnQyLm1lcmdlKHJvdXRlMiwgcGFyYW1ldGVyczIpKVxuICAgICAgKTtcbiAgICB9O1xuICAgIE9iamVjdC5hc3NpZ24ocmVxdWVzdDIsIHtcbiAgICAgIGVuZHBvaW50OiBlbmRwb2ludDIsXG4gICAgICBkZWZhdWx0czogd2l0aERlZmF1bHRzLmJpbmQobnVsbCwgZW5kcG9pbnQyKVxuICAgIH0pO1xuICAgIHJldHVybiBlbmRwb2ludE9wdGlvbnMucmVxdWVzdC5ob29rKHJlcXVlc3QyLCBlbmRwb2ludE9wdGlvbnMpO1xuICB9O1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihuZXdBcGksIHtcbiAgICBlbmRwb2ludDogZW5kcG9pbnQyLFxuICAgIGRlZmF1bHRzOiB3aXRoRGVmYXVsdHMuYmluZChudWxsLCBlbmRwb2ludDIpXG4gIH0pO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbnZhciByZXF1ZXN0ID0gd2l0aERlZmF1bHRzKGltcG9ydF9lbmRwb2ludC5lbmRwb2ludCwge1xuICBoZWFkZXJzOiB7XG4gICAgXCJ1c2VyLWFnZW50XCI6IGBvY3Rva2l0LXJlcXVlc3QuanMvJHtWRVJTSU9OfSAkeygwLCBpbXBvcnRfdW5pdmVyc2FsX3VzZXJfYWdlbnQuZ2V0VXNlckFnZW50KSgpfWBcbiAgfVxufSk7XG4vLyBBbm5vdGF0ZSB0aGUgQ29tbW9uSlMgZXhwb3J0IG5hbWVzIGZvciBFU00gaW1wb3J0IGluIG5vZGU6XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgcmVxdWVzdFxufSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BEZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBfX2dldE93blByb3BOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO1xudmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19leHBvcnQgPSAodGFyZ2V0LCBhbGwpID0+IHtcbiAgZm9yICh2YXIgbmFtZSBpbiBhbGwpXG4gICAgX19kZWZQcm9wKHRhcmdldCwgbmFtZSwgeyBnZXQ6IGFsbFtuYW1lXSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcbn07XG52YXIgX19jb3B5UHJvcHMgPSAodG8sIGZyb20sIGV4Y2VwdCwgZGVzYykgPT4ge1xuICBpZiAoZnJvbSAmJiB0eXBlb2YgZnJvbSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgZnJvbSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgZm9yIChsZXQga2V5IG9mIF9fZ2V0T3duUHJvcE5hbWVzKGZyb20pKVxuICAgICAgaWYgKCFfX2hhc093blByb3AuY2FsbCh0bywga2V5KSAmJiBrZXkgIT09IGV4Y2VwdClcbiAgICAgICAgX19kZWZQcm9wKHRvLCBrZXksIHsgZ2V0OiAoKSA9PiBmcm9tW2tleV0sIGVudW1lcmFibGU6ICEoZGVzYyA9IF9fZ2V0T3duUHJvcERlc2MoZnJvbSwga2V5KSkgfHwgZGVzYy5lbnVtZXJhYmxlIH0pO1xuICB9XG4gIHJldHVybiB0bztcbn07XG52YXIgX190b0NvbW1vbkpTID0gKG1vZCkgPT4gX19jb3B5UHJvcHMoX19kZWZQcm9wKHt9LCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KSwgbW9kKTtcblxuLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG52YXIgZGlzdF9zcmNfZXhwb3J0cyA9IHt9O1xuX19leHBvcnQoZGlzdF9zcmNfZXhwb3J0cywge1xuICBHcmFwaHFsUmVzcG9uc2VFcnJvcjogKCkgPT4gR3JhcGhxbFJlc3BvbnNlRXJyb3IsXG4gIGdyYXBocWw6ICgpID0+IGdyYXBocWwyLFxuICB3aXRoQ3VzdG9tUmVxdWVzdDogKCkgPT4gd2l0aEN1c3RvbVJlcXVlc3Rcbn0pO1xubW9kdWxlLmV4cG9ydHMgPSBfX3RvQ29tbW9uSlMoZGlzdF9zcmNfZXhwb3J0cyk7XG52YXIgaW1wb3J0X3JlcXVlc3QzID0gcmVxdWlyZShcIkBvY3Rva2l0L3JlcXVlc3RcIik7XG52YXIgaW1wb3J0X3VuaXZlcnNhbF91c2VyX2FnZW50ID0gcmVxdWlyZShcInVuaXZlcnNhbC11c2VyLWFnZW50XCIpO1xuXG4vLyBwa2cvZGlzdC1zcmMvdmVyc2lvbi5qc1xudmFyIFZFUlNJT04gPSBcIjcuMS4wXCI7XG5cbi8vIHBrZy9kaXN0LXNyYy93aXRoLWRlZmF1bHRzLmpzXG52YXIgaW1wb3J0X3JlcXVlc3QyID0gcmVxdWlyZShcIkBvY3Rva2l0L3JlcXVlc3RcIik7XG5cbi8vIHBrZy9kaXN0LXNyYy9ncmFwaHFsLmpzXG52YXIgaW1wb3J0X3JlcXVlc3QgPSByZXF1aXJlKFwiQG9jdG9raXQvcmVxdWVzdFwiKTtcblxuLy8gcGtnL2Rpc3Qtc3JjL2Vycm9yLmpzXG5mdW5jdGlvbiBfYnVpbGRNZXNzYWdlRm9yUmVzcG9uc2VFcnJvcnMoZGF0YSkge1xuICByZXR1cm4gYFJlcXVlc3QgZmFpbGVkIGR1ZSB0byBmb2xsb3dpbmcgcmVzcG9uc2UgZXJyb3JzOlxuYCArIGRhdGEuZXJyb3JzLm1hcCgoZSkgPT4gYCAtICR7ZS5tZXNzYWdlfWApLmpvaW4oXCJcXG5cIik7XG59XG52YXIgR3JhcGhxbFJlc3BvbnNlRXJyb3IgPSBjbGFzcyBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IocmVxdWVzdDIsIGhlYWRlcnMsIHJlc3BvbnNlKSB7XG4gICAgc3VwZXIoX2J1aWxkTWVzc2FnZUZvclJlc3BvbnNlRXJyb3JzKHJlc3BvbnNlKSk7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDI7XG4gICAgdGhpcy5oZWFkZXJzID0gaGVhZGVycztcbiAgICB0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gICAgdGhpcy5uYW1lID0gXCJHcmFwaHFsUmVzcG9uc2VFcnJvclwiO1xuICAgIHRoaXMuZXJyb3JzID0gcmVzcG9uc2UuZXJyb3JzO1xuICAgIHRoaXMuZGF0YSA9IHJlc3BvbnNlLmRhdGE7XG4gICAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgICB9XG4gIH1cbn07XG5cbi8vIHBrZy9kaXN0LXNyYy9ncmFwaHFsLmpzXG52YXIgTk9OX1ZBUklBQkxFX09QVElPTlMgPSBbXG4gIFwibWV0aG9kXCIsXG4gIFwiYmFzZVVybFwiLFxuICBcInVybFwiLFxuICBcImhlYWRlcnNcIixcbiAgXCJyZXF1ZXN0XCIsXG4gIFwicXVlcnlcIixcbiAgXCJtZWRpYVR5cGVcIlxuXTtcbnZhciBGT1JCSURERU5fVkFSSUFCTEVfT1BUSU9OUyA9IFtcInF1ZXJ5XCIsIFwibWV0aG9kXCIsIFwidXJsXCJdO1xudmFyIEdIRVNfVjNfU1VGRklYX1JFR0VYID0gL1xcL2FwaVxcL3YzXFwvPyQvO1xuZnVuY3Rpb24gZ3JhcGhxbChyZXF1ZXN0MiwgcXVlcnksIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIHF1ZXJ5ID09PSBcInN0cmluZ1wiICYmIFwicXVlcnlcIiBpbiBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXG4gICAgICAgIG5ldyBFcnJvcihgW0BvY3Rva2l0L2dyYXBocWxdIFwicXVlcnlcIiBjYW5ub3QgYmUgdXNlZCBhcyB2YXJpYWJsZSBuYW1lYClcbiAgICAgICk7XG4gICAgfVxuICAgIGZvciAoY29uc3Qga2V5IGluIG9wdGlvbnMpIHtcbiAgICAgIGlmICghRk9SQklEREVOX1ZBUklBQkxFX09QVElPTlMuaW5jbHVkZXMoa2V5KSlcbiAgICAgICAgY29udGludWU7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXG4gICAgICAgIG5ldyBFcnJvcihcbiAgICAgICAgICBgW0BvY3Rva2l0L2dyYXBocWxdIFwiJHtrZXl9XCIgY2Fubm90IGJlIHVzZWQgYXMgdmFyaWFibGUgbmFtZWBcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgcGFyc2VkT3B0aW9ucyA9IHR5cGVvZiBxdWVyeSA9PT0gXCJzdHJpbmdcIiA/IE9iamVjdC5hc3NpZ24oeyBxdWVyeSB9LCBvcHRpb25zKSA6IHF1ZXJ5O1xuICBjb25zdCByZXF1ZXN0T3B0aW9ucyA9IE9iamVjdC5rZXlzKFxuICAgIHBhcnNlZE9wdGlvbnNcbiAgKS5yZWR1Y2UoKHJlc3VsdCwga2V5KSA9PiB7XG4gICAgaWYgKE5PTl9WQVJJQUJMRV9PUFRJT05TLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gcGFyc2VkT3B0aW9uc1trZXldO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgaWYgKCFyZXN1bHQudmFyaWFibGVzKSB7XG4gICAgICByZXN1bHQudmFyaWFibGVzID0ge307XG4gICAgfVxuICAgIHJlc3VsdC52YXJpYWJsZXNba2V5XSA9IHBhcnNlZE9wdGlvbnNba2V5XTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9LCB7fSk7XG4gIGNvbnN0IGJhc2VVcmwgPSBwYXJzZWRPcHRpb25zLmJhc2VVcmwgfHwgcmVxdWVzdDIuZW5kcG9pbnQuREVGQVVMVFMuYmFzZVVybDtcbiAgaWYgKEdIRVNfVjNfU1VGRklYX1JFR0VYLnRlc3QoYmFzZVVybCkpIHtcbiAgICByZXF1ZXN0T3B0aW9ucy51cmwgPSBiYXNlVXJsLnJlcGxhY2UoR0hFU19WM19TVUZGSVhfUkVHRVgsIFwiL2FwaS9ncmFwaHFsXCIpO1xuICB9XG4gIHJldHVybiByZXF1ZXN0MihyZXF1ZXN0T3B0aW9ucykudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICBpZiAocmVzcG9uc2UuZGF0YS5lcnJvcnMpIHtcbiAgICAgIGNvbnN0IGhlYWRlcnMgPSB7fTtcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHJlc3BvbnNlLmhlYWRlcnMpKSB7XG4gICAgICAgIGhlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnNba2V5XTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBHcmFwaHFsUmVzcG9uc2VFcnJvcihcbiAgICAgICAgcmVxdWVzdE9wdGlvbnMsXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIHJlc3BvbnNlLmRhdGFcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiByZXNwb25zZS5kYXRhLmRhdGE7XG4gIH0pO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvd2l0aC1kZWZhdWx0cy5qc1xuZnVuY3Rpb24gd2l0aERlZmF1bHRzKHJlcXVlc3QyLCBuZXdEZWZhdWx0cykge1xuICBjb25zdCBuZXdSZXF1ZXN0ID0gcmVxdWVzdDIuZGVmYXVsdHMobmV3RGVmYXVsdHMpO1xuICBjb25zdCBuZXdBcGkgPSAocXVlcnksIG9wdGlvbnMpID0+IHtcbiAgICByZXR1cm4gZ3JhcGhxbChuZXdSZXF1ZXN0LCBxdWVyeSwgb3B0aW9ucyk7XG4gIH07XG4gIHJldHVybiBPYmplY3QuYXNzaWduKG5ld0FwaSwge1xuICAgIGRlZmF1bHRzOiB3aXRoRGVmYXVsdHMuYmluZChudWxsLCBuZXdSZXF1ZXN0KSxcbiAgICBlbmRwb2ludDogbmV3UmVxdWVzdC5lbmRwb2ludFxuICB9KTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG52YXIgZ3JhcGhxbDIgPSB3aXRoRGVmYXVsdHMoaW1wb3J0X3JlcXVlc3QzLnJlcXVlc3QsIHtcbiAgaGVhZGVyczoge1xuICAgIFwidXNlci1hZ2VudFwiOiBgb2N0b2tpdC1ncmFwaHFsLmpzLyR7VkVSU0lPTn0gJHsoMCwgaW1wb3J0X3VuaXZlcnNhbF91c2VyX2FnZW50LmdldFVzZXJBZ2VudCkoKX1gXG4gIH0sXG4gIG1ldGhvZDogXCJQT1NUXCIsXG4gIHVybDogXCIvZ3JhcGhxbFwiXG59KTtcbmZ1bmN0aW9uIHdpdGhDdXN0b21SZXF1ZXN0KGN1c3RvbVJlcXVlc3QpIHtcbiAgcmV0dXJuIHdpdGhEZWZhdWx0cyhjdXN0b21SZXF1ZXN0LCB7XG4gICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICB1cmw6IFwiL2dyYXBocWxcIlxuICB9KTtcbn1cbi8vIEFubm90YXRlIHRoZSBDb21tb25KUyBleHBvcnQgbmFtZXMgZm9yIEVTTSBpbXBvcnQgaW4gbm9kZTpcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICBHcmFwaHFsUmVzcG9uc2VFcnJvcixcbiAgZ3JhcGhxbCxcbiAgd2l0aEN1c3RvbVJlcXVlc3Rcbn0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wRGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgX19nZXRPd25Qcm9wTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcztcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fZXhwb3J0ID0gKHRhcmdldCwgYWxsKSA9PiB7XG4gIGZvciAodmFyIG5hbWUgaW4gYWxsKVxuICAgIF9fZGVmUHJvcCh0YXJnZXQsIG5hbWUsIHsgZ2V0OiBhbGxbbmFtZV0sIGVudW1lcmFibGU6IHRydWUgfSk7XG59O1xudmFyIF9fY29weVByb3BzID0gKHRvLCBmcm9tLCBleGNlcHQsIGRlc2MpID0+IHtcbiAgaWYgKGZyb20gJiYgdHlwZW9mIGZyb20gPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGZyb20gPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGZvciAobGV0IGtleSBvZiBfX2dldE93blByb3BOYW1lcyhmcm9tKSlcbiAgICAgIGlmICghX19oYXNPd25Qcm9wLmNhbGwodG8sIGtleSkgJiYga2V5ICE9PSBleGNlcHQpXG4gICAgICAgIF9fZGVmUHJvcCh0bywga2V5LCB7IGdldDogKCkgPT4gZnJvbVtrZXldLCBlbnVtZXJhYmxlOiAhKGRlc2MgPSBfX2dldE93blByb3BEZXNjKGZyb20sIGtleSkpIHx8IGRlc2MuZW51bWVyYWJsZSB9KTtcbiAgfVxuICByZXR1cm4gdG87XG59O1xudmFyIF9fdG9Db21tb25KUyA9IChtb2QpID0+IF9fY29weVByb3BzKF9fZGVmUHJvcCh7fSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSksIG1vZCk7XG5cbi8vIHBrZy9kaXN0LXNyYy9pbmRleC5qc1xudmFyIGRpc3Rfc3JjX2V4cG9ydHMgPSB7fTtcbl9fZXhwb3J0KGRpc3Rfc3JjX2V4cG9ydHMsIHtcbiAgY3JlYXRlVG9rZW5BdXRoOiAoKSA9PiBjcmVhdGVUb2tlbkF1dGhcbn0pO1xubW9kdWxlLmV4cG9ydHMgPSBfX3RvQ29tbW9uSlMoZGlzdF9zcmNfZXhwb3J0cyk7XG5cbi8vIHBrZy9kaXN0LXNyYy9hdXRoLmpzXG52YXIgUkVHRVhfSVNfSU5TVEFMTEFUSU9OX0xFR0FDWSA9IC9edjFcXC4vO1xudmFyIFJFR0VYX0lTX0lOU1RBTExBVElPTiA9IC9eZ2hzXy87XG52YXIgUkVHRVhfSVNfVVNFUl9UT19TRVJWRVIgPSAvXmdodV8vO1xuYXN5bmMgZnVuY3Rpb24gYXV0aCh0b2tlbikge1xuICBjb25zdCBpc0FwcCA9IHRva2VuLnNwbGl0KC9cXC4vKS5sZW5ndGggPT09IDM7XG4gIGNvbnN0IGlzSW5zdGFsbGF0aW9uID0gUkVHRVhfSVNfSU5TVEFMTEFUSU9OX0xFR0FDWS50ZXN0KHRva2VuKSB8fCBSRUdFWF9JU19JTlNUQUxMQVRJT04udGVzdCh0b2tlbik7XG4gIGNvbnN0IGlzVXNlclRvU2VydmVyID0gUkVHRVhfSVNfVVNFUl9UT19TRVJWRVIudGVzdCh0b2tlbik7XG4gIGNvbnN0IHRva2VuVHlwZSA9IGlzQXBwID8gXCJhcHBcIiA6IGlzSW5zdGFsbGF0aW9uID8gXCJpbnN0YWxsYXRpb25cIiA6IGlzVXNlclRvU2VydmVyID8gXCJ1c2VyLXRvLXNlcnZlclwiIDogXCJvYXV0aFwiO1xuICByZXR1cm4ge1xuICAgIHR5cGU6IFwidG9rZW5cIixcbiAgICB0b2tlbixcbiAgICB0b2tlblR5cGVcbiAgfTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3dpdGgtYXV0aG9yaXphdGlvbi1wcmVmaXguanNcbmZ1bmN0aW9uIHdpdGhBdXRob3JpemF0aW9uUHJlZml4KHRva2VuKSB7XG4gIGlmICh0b2tlbi5zcGxpdCgvXFwuLykubGVuZ3RoID09PSAzKSB7XG4gICAgcmV0dXJuIGBiZWFyZXIgJHt0b2tlbn1gO1xuICB9XG4gIHJldHVybiBgdG9rZW4gJHt0b2tlbn1gO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvaG9vay5qc1xuYXN5bmMgZnVuY3Rpb24gaG9vayh0b2tlbiwgcmVxdWVzdCwgcm91dGUsIHBhcmFtZXRlcnMpIHtcbiAgY29uc3QgZW5kcG9pbnQgPSByZXF1ZXN0LmVuZHBvaW50Lm1lcmdlKFxuICAgIHJvdXRlLFxuICAgIHBhcmFtZXRlcnNcbiAgKTtcbiAgZW5kcG9pbnQuaGVhZGVycy5hdXRob3JpemF0aW9uID0gd2l0aEF1dGhvcml6YXRpb25QcmVmaXgodG9rZW4pO1xuICByZXR1cm4gcmVxdWVzdChlbmRwb2ludCk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9pbmRleC5qc1xudmFyIGNyZWF0ZVRva2VuQXV0aCA9IGZ1bmN0aW9uIGNyZWF0ZVRva2VuQXV0aDIodG9rZW4pIHtcbiAgaWYgKCF0b2tlbikge1xuICAgIHRocm93IG5ldyBFcnJvcihcIltAb2N0b2tpdC9hdXRoLXRva2VuXSBObyB0b2tlbiBwYXNzZWQgdG8gY3JlYXRlVG9rZW5BdXRoXCIpO1xuICB9XG4gIGlmICh0eXBlb2YgdG9rZW4gIT09IFwic3RyaW5nXCIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcIltAb2N0b2tpdC9hdXRoLXRva2VuXSBUb2tlbiBwYXNzZWQgdG8gY3JlYXRlVG9rZW5BdXRoIGlzIG5vdCBhIHN0cmluZ1wiXG4gICAgKTtcbiAgfVxuICB0b2tlbiA9IHRva2VuLnJlcGxhY2UoL14odG9rZW58YmVhcmVyKSArL2ksIFwiXCIpO1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihhdXRoLmJpbmQobnVsbCwgdG9rZW4pLCB7XG4gICAgaG9vazogaG9vay5iaW5kKG51bGwsIHRva2VuKVxuICB9KTtcbn07XG4vLyBBbm5vdGF0ZSB0aGUgQ29tbW9uSlMgZXhwb3J0IG5hbWVzIGZvciBFU00gaW1wb3J0IGluIG5vZGU6XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgY3JlYXRlVG9rZW5BdXRoXG59KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIF9fZ2V0T3duUHJvcE5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XG52YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX2V4cG9ydCA9ICh0YXJnZXQsIGFsbCkgPT4ge1xuICBmb3IgKHZhciBuYW1lIGluIGFsbClcbiAgICBfX2RlZlByb3AodGFyZ2V0LCBuYW1lLCB7IGdldDogYWxsW25hbWVdLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xufTtcbnZhciBfX2NvcHlQcm9wcyA9ICh0bywgZnJvbSwgZXhjZXB0LCBkZXNjKSA9PiB7XG4gIGlmIChmcm9tICYmIHR5cGVvZiBmcm9tID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBmcm9tID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBmb3IgKGxldCBrZXkgb2YgX19nZXRPd25Qcm9wTmFtZXMoZnJvbSkpXG4gICAgICBpZiAoIV9faGFzT3duUHJvcC5jYWxsKHRvLCBrZXkpICYmIGtleSAhPT0gZXhjZXB0KVxuICAgICAgICBfX2RlZlByb3AodG8sIGtleSwgeyBnZXQ6ICgpID0+IGZyb21ba2V5XSwgZW51bWVyYWJsZTogIShkZXNjID0gX19nZXRPd25Qcm9wRGVzYyhmcm9tLCBrZXkpKSB8fCBkZXNjLmVudW1lcmFibGUgfSk7XG4gIH1cbiAgcmV0dXJuIHRvO1xufTtcbnZhciBfX3RvQ29tbW9uSlMgPSAobW9kKSA9PiBfX2NvcHlQcm9wcyhfX2RlZlByb3Aoe30sIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pLCBtb2QpO1xuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbnZhciBkaXN0X3NyY19leHBvcnRzID0ge307XG5fX2V4cG9ydChkaXN0X3NyY19leHBvcnRzLCB7XG4gIE9jdG9raXQ6ICgpID0+IE9jdG9raXRcbn0pO1xubW9kdWxlLmV4cG9ydHMgPSBfX3RvQ29tbW9uSlMoZGlzdF9zcmNfZXhwb3J0cyk7XG52YXIgaW1wb3J0X3VuaXZlcnNhbF91c2VyX2FnZW50ID0gcmVxdWlyZShcInVuaXZlcnNhbC11c2VyLWFnZW50XCIpO1xudmFyIGltcG9ydF9iZWZvcmVfYWZ0ZXJfaG9vayA9IHJlcXVpcmUoXCJiZWZvcmUtYWZ0ZXItaG9va1wiKTtcbnZhciBpbXBvcnRfcmVxdWVzdCA9IHJlcXVpcmUoXCJAb2N0b2tpdC9yZXF1ZXN0XCIpO1xudmFyIGltcG9ydF9ncmFwaHFsID0gcmVxdWlyZShcIkBvY3Rva2l0L2dyYXBocWxcIik7XG52YXIgaW1wb3J0X2F1dGhfdG9rZW4gPSByZXF1aXJlKFwiQG9jdG9raXQvYXV0aC10b2tlblwiKTtcblxuLy8gcGtnL2Rpc3Qtc3JjL3ZlcnNpb24uanNcbnZhciBWRVJTSU9OID0gXCI1LjIuMFwiO1xuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbnZhciBub29wID0gKCkgPT4ge1xufTtcbnZhciBjb25zb2xlV2FybiA9IGNvbnNvbGUud2Fybi5iaW5kKGNvbnNvbGUpO1xudmFyIGNvbnNvbGVFcnJvciA9IGNvbnNvbGUuZXJyb3IuYmluZChjb25zb2xlKTtcbnZhciB1c2VyQWdlbnRUcmFpbCA9IGBvY3Rva2l0LWNvcmUuanMvJHtWRVJTSU9OfSAkeygwLCBpbXBvcnRfdW5pdmVyc2FsX3VzZXJfYWdlbnQuZ2V0VXNlckFnZW50KSgpfWA7XG52YXIgT2N0b2tpdCA9IGNsYXNzIHtcbiAgc3RhdGljIHtcbiAgICB0aGlzLlZFUlNJT04gPSBWRVJTSU9OO1xuICB9XG4gIHN0YXRpYyBkZWZhdWx0cyhkZWZhdWx0cykge1xuICAgIGNvbnN0IE9jdG9raXRXaXRoRGVmYXVsdHMgPSBjbGFzcyBleHRlbmRzIHRoaXMge1xuICAgICAgY29uc3RydWN0b3IoLi4uYXJncykge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gYXJnc1swXSB8fCB7fTtcbiAgICAgICAgaWYgKHR5cGVvZiBkZWZhdWx0cyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgc3VwZXIoZGVmYXVsdHMob3B0aW9ucykpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzdXBlcihcbiAgICAgICAgICBPYmplY3QuYXNzaWduKFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgICBkZWZhdWx0cyxcbiAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICBvcHRpb25zLnVzZXJBZ2VudCAmJiBkZWZhdWx0cy51c2VyQWdlbnQgPyB7XG4gICAgICAgICAgICAgIHVzZXJBZ2VudDogYCR7b3B0aW9ucy51c2VyQWdlbnR9ICR7ZGVmYXVsdHMudXNlckFnZW50fWBcbiAgICAgICAgICAgIH0gOiBudWxsXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIE9jdG9raXRXaXRoRGVmYXVsdHM7XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLnBsdWdpbnMgPSBbXTtcbiAgfVxuICAvKipcbiAgICogQXR0YWNoIGEgcGx1Z2luIChvciBtYW55KSB0byB5b3VyIE9jdG9raXQgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGNvbnN0IEFQSSA9IE9jdG9raXQucGx1Z2luKHBsdWdpbjEsIHBsdWdpbjIsIHBsdWdpbjMsIC4uLilcbiAgICovXG4gIHN0YXRpYyBwbHVnaW4oLi4ubmV3UGx1Z2lucykge1xuICAgIGNvbnN0IGN1cnJlbnRQbHVnaW5zID0gdGhpcy5wbHVnaW5zO1xuICAgIGNvbnN0IE5ld09jdG9raXQgPSBjbGFzcyBleHRlbmRzIHRoaXMge1xuICAgICAgc3RhdGljIHtcbiAgICAgICAgdGhpcy5wbHVnaW5zID0gY3VycmVudFBsdWdpbnMuY29uY2F0KFxuICAgICAgICAgIG5ld1BsdWdpbnMuZmlsdGVyKChwbHVnaW4pID0+ICFjdXJyZW50UGx1Z2lucy5pbmNsdWRlcyhwbHVnaW4pKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIE5ld09jdG9raXQ7XG4gIH1cbiAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgaG9vayA9IG5ldyBpbXBvcnRfYmVmb3JlX2FmdGVyX2hvb2suQ29sbGVjdGlvbigpO1xuICAgIGNvbnN0IHJlcXVlc3REZWZhdWx0cyA9IHtcbiAgICAgIGJhc2VVcmw6IGltcG9ydF9yZXF1ZXN0LnJlcXVlc3QuZW5kcG9pbnQuREVGQVVMVFMuYmFzZVVybCxcbiAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgcmVxdWVzdDogT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5yZXF1ZXN0LCB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmUgaW50ZXJuYWwgdXNhZ2Ugb25seSwgbm8gbmVlZCB0byB0eXBlXG4gICAgICAgIGhvb2s6IGhvb2suYmluZChudWxsLCBcInJlcXVlc3RcIilcbiAgICAgIH0pLFxuICAgICAgbWVkaWFUeXBlOiB7XG4gICAgICAgIHByZXZpZXdzOiBbXSxcbiAgICAgICAgZm9ybWF0OiBcIlwiXG4gICAgICB9XG4gICAgfTtcbiAgICByZXF1ZXN0RGVmYXVsdHMuaGVhZGVyc1tcInVzZXItYWdlbnRcIl0gPSBvcHRpb25zLnVzZXJBZ2VudCA/IGAke29wdGlvbnMudXNlckFnZW50fSAke3VzZXJBZ2VudFRyYWlsfWAgOiB1c2VyQWdlbnRUcmFpbDtcbiAgICBpZiAob3B0aW9ucy5iYXNlVXJsKSB7XG4gICAgICByZXF1ZXN0RGVmYXVsdHMuYmFzZVVybCA9IG9wdGlvbnMuYmFzZVVybDtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMucHJldmlld3MpIHtcbiAgICAgIHJlcXVlc3REZWZhdWx0cy5tZWRpYVR5cGUucHJldmlld3MgPSBvcHRpb25zLnByZXZpZXdzO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy50aW1lWm9uZSkge1xuICAgICAgcmVxdWVzdERlZmF1bHRzLmhlYWRlcnNbXCJ0aW1lLXpvbmVcIl0gPSBvcHRpb25zLnRpbWVab25lO1xuICAgIH1cbiAgICB0aGlzLnJlcXVlc3QgPSBpbXBvcnRfcmVxdWVzdC5yZXF1ZXN0LmRlZmF1bHRzKHJlcXVlc3REZWZhdWx0cyk7XG4gICAgdGhpcy5ncmFwaHFsID0gKDAsIGltcG9ydF9ncmFwaHFsLndpdGhDdXN0b21SZXF1ZXN0KSh0aGlzLnJlcXVlc3QpLmRlZmF1bHRzKHJlcXVlc3REZWZhdWx0cyk7XG4gICAgdGhpcy5sb2cgPSBPYmplY3QuYXNzaWduKFxuICAgICAge1xuICAgICAgICBkZWJ1Zzogbm9vcCxcbiAgICAgICAgaW5mbzogbm9vcCxcbiAgICAgICAgd2FybjogY29uc29sZVdhcm4sXG4gICAgICAgIGVycm9yOiBjb25zb2xlRXJyb3JcbiAgICAgIH0sXG4gICAgICBvcHRpb25zLmxvZ1xuICAgICk7XG4gICAgdGhpcy5ob29rID0gaG9vaztcbiAgICBpZiAoIW9wdGlvbnMuYXV0aFN0cmF0ZWd5KSB7XG4gICAgICBpZiAoIW9wdGlvbnMuYXV0aCkge1xuICAgICAgICB0aGlzLmF1dGggPSBhc3luYyAoKSA9PiAoe1xuICAgICAgICAgIHR5cGU6IFwidW5hdXRoZW50aWNhdGVkXCJcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBhdXRoID0gKDAsIGltcG9ydF9hdXRoX3Rva2VuLmNyZWF0ZVRva2VuQXV0aCkob3B0aW9ucy5hdXRoKTtcbiAgICAgICAgaG9vay53cmFwKFwicmVxdWVzdFwiLCBhdXRoLmhvb2spO1xuICAgICAgICB0aGlzLmF1dGggPSBhdXRoO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB7IGF1dGhTdHJhdGVneSwgLi4ub3RoZXJPcHRpb25zIH0gPSBvcHRpb25zO1xuICAgICAgY29uc3QgYXV0aCA9IGF1dGhTdHJhdGVneShcbiAgICAgICAgT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICB7XG4gICAgICAgICAgICByZXF1ZXN0OiB0aGlzLnJlcXVlc3QsXG4gICAgICAgICAgICBsb2c6IHRoaXMubG9nLFxuICAgICAgICAgICAgLy8gd2UgcGFzcyB0aGUgY3VycmVudCBvY3Rva2l0IGluc3RhbmNlIGFzIHdlbGwgYXMgaXRzIGNvbnN0cnVjdG9yIG9wdGlvbnNcbiAgICAgICAgICAgIC8vIHRvIGFsbG93IGZvciBhdXRoZW50aWNhdGlvbiBzdHJhdGVnaWVzIHRoYXQgcmV0dXJuIGEgbmV3IG9jdG9raXQgaW5zdGFuY2VcbiAgICAgICAgICAgIC8vIHRoYXQgc2hhcmVzIHRoZSBzYW1lIGludGVybmFsIHN0YXRlIGFzIHRoZSBjdXJyZW50IG9uZS4gVGhlIG9yaWdpbmFsXG4gICAgICAgICAgICAvLyByZXF1aXJlbWVudCBmb3IgdGhpcyB3YXMgdGhlIFwiZXZlbnQtb2N0b2tpdFwiIGF1dGhlbnRpY2F0aW9uIHN0cmF0ZWd5XG4gICAgICAgICAgICAvLyBvZiBodHRwczovL2dpdGh1Yi5jb20vcHJvYm90L29jdG9raXQtYXV0aC1wcm9ib3QuXG4gICAgICAgICAgICBvY3Rva2l0OiB0aGlzLFxuICAgICAgICAgICAgb2N0b2tpdE9wdGlvbnM6IG90aGVyT3B0aW9uc1xuICAgICAgICAgIH0sXG4gICAgICAgICAgb3B0aW9ucy5hdXRoXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICBob29rLndyYXAoXCJyZXF1ZXN0XCIsIGF1dGguaG9vayk7XG4gICAgICB0aGlzLmF1dGggPSBhdXRoO1xuICAgIH1cbiAgICBjb25zdCBjbGFzc0NvbnN0cnVjdG9yID0gdGhpcy5jb25zdHJ1Y3RvcjtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNsYXNzQ29uc3RydWN0b3IucGx1Z2lucy5sZW5ndGg7ICsraSkge1xuICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBjbGFzc0NvbnN0cnVjdG9yLnBsdWdpbnNbaV0odGhpcywgb3B0aW9ucykpO1xuICAgIH1cbiAgfVxufTtcbi8vIEFubm90YXRlIHRoZSBDb21tb25KUyBleHBvcnQgbmFtZXMgZm9yIEVTTSBpbXBvcnQgaW4gbm9kZTpcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICBPY3Rva2l0XG59KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIF9fZ2V0T3duUHJvcE5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XG52YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX2V4cG9ydCA9ICh0YXJnZXQsIGFsbCkgPT4ge1xuICBmb3IgKHZhciBuYW1lIGluIGFsbClcbiAgICBfX2RlZlByb3AodGFyZ2V0LCBuYW1lLCB7IGdldDogYWxsW25hbWVdLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xufTtcbnZhciBfX2NvcHlQcm9wcyA9ICh0bywgZnJvbSwgZXhjZXB0LCBkZXNjKSA9PiB7XG4gIGlmIChmcm9tICYmIHR5cGVvZiBmcm9tID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBmcm9tID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBmb3IgKGxldCBrZXkgb2YgX19nZXRPd25Qcm9wTmFtZXMoZnJvbSkpXG4gICAgICBpZiAoIV9faGFzT3duUHJvcC5jYWxsKHRvLCBrZXkpICYmIGtleSAhPT0gZXhjZXB0KVxuICAgICAgICBfX2RlZlByb3AodG8sIGtleSwgeyBnZXQ6ICgpID0+IGZyb21ba2V5XSwgZW51bWVyYWJsZTogIShkZXNjID0gX19nZXRPd25Qcm9wRGVzYyhmcm9tLCBrZXkpKSB8fCBkZXNjLmVudW1lcmFibGUgfSk7XG4gIH1cbiAgcmV0dXJuIHRvO1xufTtcbnZhciBfX3RvQ29tbW9uSlMgPSAobW9kKSA9PiBfX2NvcHlQcm9wcyhfX2RlZlByb3Aoe30sIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pLCBtb2QpO1xuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbnZhciBkaXN0X3NyY19leHBvcnRzID0ge307XG5fX2V4cG9ydChkaXN0X3NyY19leHBvcnRzLCB7XG4gIGxlZ2FjeVJlc3RFbmRwb2ludE1ldGhvZHM6ICgpID0+IGxlZ2FjeVJlc3RFbmRwb2ludE1ldGhvZHMsXG4gIHJlc3RFbmRwb2ludE1ldGhvZHM6ICgpID0+IHJlc3RFbmRwb2ludE1ldGhvZHNcbn0pO1xubW9kdWxlLmV4cG9ydHMgPSBfX3RvQ29tbW9uSlMoZGlzdF9zcmNfZXhwb3J0cyk7XG5cbi8vIHBrZy9kaXN0LXNyYy92ZXJzaW9uLmpzXG52YXIgVkVSU0lPTiA9IFwiMTAuNC4xXCI7XG5cbi8vIHBrZy9kaXN0LXNyYy9nZW5lcmF0ZWQvZW5kcG9pbnRzLmpzXG52YXIgRW5kcG9pbnRzID0ge1xuICBhY3Rpb25zOiB7XG4gICAgYWRkQ3VzdG9tTGFiZWxzVG9TZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVsc1wiXG4gICAgXSxcbiAgICBhZGRDdXN0b21MYWJlbHNUb1NlbGZIb3N0ZWRSdW5uZXJGb3JSZXBvOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIlxuICAgIF0sXG4gICAgYWRkU2VsZWN0ZWRSZXBvVG9PcmdTZWNyZXQ6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIlxuICAgIF0sXG4gICAgYWRkU2VsZWN0ZWRSZXBvVG9PcmdWYXJpYWJsZTogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIlxuICAgIF0sXG4gICAgYXBwcm92ZVdvcmtmbG93UnVuOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hcHByb3ZlXCJcbiAgICBdLFxuICAgIGNhbmNlbFdvcmtmbG93UnVuOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9jYW5jZWxcIlxuICAgIF0sXG4gICAgY3JlYXRlRW52aXJvbm1lbnRWYXJpYWJsZTogW1xuICAgICAgXCJQT1NUIC9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vdmFyaWFibGVzXCJcbiAgICBdLFxuICAgIGNyZWF0ZU9yVXBkYXRlRW52aXJvbm1lbnRTZWNyZXQ6IFtcbiAgICAgIFwiUFVUIC9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vc2VjcmV0cy97c2VjcmV0X25hbWV9XCJcbiAgICBdLFxuICAgIGNyZWF0ZU9yVXBkYXRlT3JnU2VjcmV0OiBbXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgY3JlYXRlT3JVcGRhdGVSZXBvU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIlxuICAgIF0sXG4gICAgY3JlYXRlT3JnVmFyaWFibGU6IFtcIlBPU1QgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXNcIl0sXG4gICAgY3JlYXRlUmVnaXN0cmF0aW9uVG9rZW5Gb3JPcmc6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMvcmVnaXN0cmF0aW9uLXRva2VuXCJcbiAgICBdLFxuICAgIGNyZWF0ZVJlZ2lzdHJhdGlvblRva2VuRm9yUmVwbzogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMvcmVnaXN0cmF0aW9uLXRva2VuXCJcbiAgICBdLFxuICAgIGNyZWF0ZVJlbW92ZVRva2VuRm9yT3JnOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy9yZW1vdmUtdG9rZW5cIl0sXG4gICAgY3JlYXRlUmVtb3ZlVG9rZW5Gb3JSZXBvOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy9yZW1vdmUtdG9rZW5cIlxuICAgIF0sXG4gICAgY3JlYXRlUmVwb1ZhcmlhYmxlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3ZhcmlhYmxlc1wiXSxcbiAgICBjcmVhdGVXb3JrZmxvd0Rpc3BhdGNoOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvd29ya2Zsb3dzL3t3b3JrZmxvd19pZH0vZGlzcGF0Y2hlc1wiXG4gICAgXSxcbiAgICBkZWxldGVBY3Rpb25zQ2FjaGVCeUlkOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9jYWNoZXMve2NhY2hlX2lkfVwiXG4gICAgXSxcbiAgICBkZWxldGVBY3Rpb25zQ2FjaGVCeUtleTogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvY2FjaGVzez9rZXkscmVmfVwiXG4gICAgXSxcbiAgICBkZWxldGVBcnRpZmFjdDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvYXJ0aWZhY3RzL3thcnRpZmFjdF9pZH1cIlxuICAgIF0sXG4gICAgZGVsZXRlRW52aXJvbm1lbnRTZWNyZXQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vc2VjcmV0cy97c2VjcmV0X25hbWV9XCJcbiAgICBdLFxuICAgIGRlbGV0ZUVudmlyb25tZW50VmFyaWFibGU6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vdmFyaWFibGVzL3tuYW1lfVwiXG4gICAgXSxcbiAgICBkZWxldGVPcmdTZWNyZXQ6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBkZWxldGVPcmdWYXJpYWJsZTogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2FjdGlvbnMvdmFyaWFibGVzL3tuYW1lfVwiXSxcbiAgICBkZWxldGVSZXBvU2VjcmV0OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIlxuICAgIF0sXG4gICAgZGVsZXRlUmVwb1ZhcmlhYmxlOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCJcbiAgICBdLFxuICAgIGRlbGV0ZVNlbGZIb3N0ZWRSdW5uZXJGcm9tT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH1cIlxuICAgIF0sXG4gICAgZGVsZXRlU2VsZkhvc3RlZFJ1bm5lckZyb21SZXBvOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZVdvcmtmbG93UnVuOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfVwiXSxcbiAgICBkZWxldGVXb3JrZmxvd1J1bkxvZ3M6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vbG9nc1wiXG4gICAgXSxcbiAgICBkaXNhYmxlU2VsZWN0ZWRSZXBvc2l0b3J5R2l0aHViQWN0aW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCJcbiAgICBdLFxuICAgIGRpc2FibGVXb3JrZmxvdzogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvd29ya2Zsb3dzL3t3b3JrZmxvd19pZH0vZGlzYWJsZVwiXG4gICAgXSxcbiAgICBkb3dubG9hZEFydGlmYWN0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9hcnRpZmFjdHMve2FydGlmYWN0X2lkfS97YXJjaGl2ZV9mb3JtYXR9XCJcbiAgICBdLFxuICAgIGRvd25sb2FkSm9iTG9nc0ZvcldvcmtmbG93UnVuOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9qb2JzL3tqb2JfaWR9L2xvZ3NcIlxuICAgIF0sXG4gICAgZG93bmxvYWRXb3JrZmxvd1J1bkF0dGVtcHRMb2dzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2F0dGVtcHRzL3thdHRlbXB0X251bWJlcn0vbG9nc1wiXG4gICAgXSxcbiAgICBkb3dubG9hZFdvcmtmbG93UnVuTG9nczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9sb2dzXCJcbiAgICBdLFxuICAgIGVuYWJsZVNlbGVjdGVkUmVwb3NpdG9yeUdpdGh1YkFjdGlvbnNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiXG4gICAgXSxcbiAgICBlbmFibGVXb3JrZmxvdzogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvd29ya2Zsb3dzL3t3b3JrZmxvd19pZH0vZW5hYmxlXCJcbiAgICBdLFxuICAgIGZvcmNlQ2FuY2VsV29ya2Zsb3dSdW46IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2ZvcmNlLWNhbmNlbFwiXG4gICAgXSxcbiAgICBnZW5lcmF0ZVJ1bm5lckppdGNvbmZpZ0Zvck9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy9nZW5lcmF0ZS1qaXRjb25maWdcIlxuICAgIF0sXG4gICAgZ2VuZXJhdGVSdW5uZXJKaXRjb25maWdGb3JSZXBvOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy9nZW5lcmF0ZS1qaXRjb25maWdcIlxuICAgIF0sXG4gICAgZ2V0QWN0aW9uc0NhY2hlTGlzdDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2NhY2hlc1wiXSxcbiAgICBnZXRBY3Rpb25zQ2FjaGVVc2FnZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2NhY2hlL3VzYWdlXCJdLFxuICAgIGdldEFjdGlvbnNDYWNoZVVzYWdlQnlSZXBvRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2NhY2hlL3VzYWdlLWJ5LXJlcG9zaXRvcnlcIlxuICAgIF0sXG4gICAgZ2V0QWN0aW9uc0NhY2hlVXNhZ2VGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2NhY2hlL3VzYWdlXCJdLFxuICAgIGdldEFsbG93ZWRBY3Rpb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3NlbGVjdGVkLWFjdGlvbnNcIlxuICAgIF0sXG4gICAgZ2V0QWxsb3dlZEFjdGlvbnNSZXBvc2l0b3J5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9ucy9zZWxlY3RlZC1hY3Rpb25zXCJcbiAgICBdLFxuICAgIGdldEFydGlmYWN0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvYXJ0aWZhY3RzL3thcnRpZmFjdF9pZH1cIl0sXG4gICAgZ2V0Q3VzdG9tT2lkY1N1YkNsYWltRm9yUmVwbzogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvb2lkYy9jdXN0b21pemF0aW9uL3N1YlwiXG4gICAgXSxcbiAgICBnZXRFbnZpcm9ubWVudFB1YmxpY0tleTogW1xuICAgICAgXCJHRVQgL3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH0vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9zZWNyZXRzL3B1YmxpYy1rZXlcIlxuICAgIF0sXG4gICAgZ2V0RW52aXJvbm1lbnRTZWNyZXQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vc2VjcmV0cy97c2VjcmV0X25hbWV9XCJcbiAgICBdLFxuICAgIGdldEVudmlyb25tZW50VmFyaWFibGU6IFtcbiAgICAgIFwiR0VUIC9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vdmFyaWFibGVzL3tuYW1lfVwiXG4gICAgXSxcbiAgICBnZXRHaXRodWJBY3Rpb25zRGVmYXVsdFdvcmtmbG93UGVybWlzc2lvbnNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvd29ya2Zsb3dcIlxuICAgIF0sXG4gICAgZ2V0R2l0aHViQWN0aW9uc0RlZmF1bHRXb3JrZmxvd1Blcm1pc3Npb25zUmVwb3NpdG9yeTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnMvd29ya2Zsb3dcIlxuICAgIF0sXG4gICAgZ2V0R2l0aHViQWN0aW9uc1Blcm1pc3Npb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zXCJcbiAgICBdLFxuICAgIGdldEdpdGh1YkFjdGlvbnNQZXJtaXNzaW9uc1JlcG9zaXRvcnk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zXCJcbiAgICBdLFxuICAgIGdldEpvYkZvcldvcmtmbG93UnVuOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvam9icy97am9iX2lkfVwiXSxcbiAgICBnZXRPcmdQdWJsaWNLZXk6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMvcHVibGljLWtleVwiXSxcbiAgICBnZXRPcmdTZWNyZXQ6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBnZXRPcmdWYXJpYWJsZTogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvdmFyaWFibGVzL3tuYW1lfVwiXSxcbiAgICBnZXRQZW5kaW5nRGVwbG95bWVudHNGb3JSdW46IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vcGVuZGluZ19kZXBsb3ltZW50c1wiXG4gICAgXSxcbiAgICBnZXRSZXBvUGVybWlzc2lvbnM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiYWN0aW9uc1wiLCBcImdldEdpdGh1YkFjdGlvbnNQZXJtaXNzaW9uc1JlcG9zaXRvcnlcIl0gfVxuICAgIF0sXG4gICAgZ2V0UmVwb1B1YmxpY0tleTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3NlY3JldHMvcHVibGljLWtleVwiXSxcbiAgICBnZXRSZXBvU2VjcmV0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGdldFJlcG9WYXJpYWJsZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX1cIl0sXG4gICAgZ2V0UmV2aWV3c0ZvclJ1bjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hcHByb3ZhbHNcIlxuICAgIF0sXG4gICAgZ2V0U2VsZkhvc3RlZFJ1bm5lckZvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfVwiXSxcbiAgICBnZXRTZWxmSG9zdGVkUnVubmVyRm9yUmVwbzogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfVwiXG4gICAgXSxcbiAgICBnZXRXb3JrZmxvdzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9XCJdLFxuICAgIGdldFdvcmtmbG93QWNjZXNzVG9SZXBvc2l0b3J5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9ucy9hY2Nlc3NcIlxuICAgIF0sXG4gICAgZ2V0V29ya2Zsb3dSdW46IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9XCJdLFxuICAgIGdldFdvcmtmbG93UnVuQXR0ZW1wdDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hdHRlbXB0cy97YXR0ZW1wdF9udW1iZXJ9XCJcbiAgICBdLFxuICAgIGdldFdvcmtmbG93UnVuVXNhZ2U6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vdGltaW5nXCJcbiAgICBdLFxuICAgIGdldFdvcmtmbG93VXNhZ2U6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L3RpbWluZ1wiXG4gICAgXSxcbiAgICBsaXN0QXJ0aWZhY3RzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2FydGlmYWN0c1wiXSxcbiAgICBsaXN0RW52aXJvbm1lbnRTZWNyZXRzOiBbXG4gICAgICBcIkdFVCAvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHNcIlxuICAgIF0sXG4gICAgbGlzdEVudmlyb25tZW50VmFyaWFibGVzOiBbXG4gICAgICBcIkdFVCAvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3ZhcmlhYmxlc1wiXG4gICAgXSxcbiAgICBsaXN0Sm9ic0ZvcldvcmtmbG93UnVuOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2pvYnNcIlxuICAgIF0sXG4gICAgbGlzdEpvYnNGb3JXb3JrZmxvd1J1bkF0dGVtcHQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXR0ZW1wdHMve2F0dGVtcHRfbnVtYmVyfS9qb2JzXCJcbiAgICBdLFxuICAgIGxpc3RMYWJlbHNGb3JTZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCJcbiAgICBdLFxuICAgIGxpc3RMYWJlbHNGb3JTZWxmSG9zdGVkUnVubmVyRm9yUmVwbzogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIlxuICAgIF0sXG4gICAgbGlzdE9yZ1NlY3JldHM6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHNcIl0sXG4gICAgbGlzdE9yZ1ZhcmlhYmxlczogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvdmFyaWFibGVzXCJdLFxuICAgIGxpc3RSZXBvT3JnYW5pemF0aW9uU2VjcmV0czogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvb3JnYW5pemF0aW9uLXNlY3JldHNcIlxuICAgIF0sXG4gICAgbGlzdFJlcG9Pcmdhbml6YXRpb25WYXJpYWJsZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL29yZ2FuaXphdGlvbi12YXJpYWJsZXNcIlxuICAgIF0sXG4gICAgbGlzdFJlcG9TZWNyZXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvc2VjcmV0c1wiXSxcbiAgICBsaXN0UmVwb1ZhcmlhYmxlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3ZhcmlhYmxlc1wiXSxcbiAgICBsaXN0UmVwb1dvcmtmbG93czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93c1wiXSxcbiAgICBsaXN0UnVubmVyQXBwbGljYXRpb25zRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL2Rvd25sb2Fkc1wiXSxcbiAgICBsaXN0UnVubmVyQXBwbGljYXRpb25zRm9yUmVwbzogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy9kb3dubG9hZHNcIlxuICAgIF0sXG4gICAgbGlzdFNlbGVjdGVkUmVwb3NGb3JPcmdTZWNyZXQ6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiXG4gICAgXSxcbiAgICBsaXN0U2VsZWN0ZWRSZXBvc0Zvck9yZ1ZhcmlhYmxlOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX0vcmVwb3NpdG9yaWVzXCJcbiAgICBdLFxuICAgIGxpc3RTZWxlY3RlZFJlcG9zaXRvcmllc0VuYWJsZWRHaXRodWJBY3Rpb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3JlcG9zaXRvcmllc1wiXG4gICAgXSxcbiAgICBsaXN0U2VsZkhvc3RlZFJ1bm5lcnNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnNcIl0sXG4gICAgbGlzdFNlbGZIb3N0ZWRSdW5uZXJzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnNcIl0sXG4gICAgbGlzdFdvcmtmbG93UnVuQXJ0aWZhY3RzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2FydGlmYWN0c1wiXG4gICAgXSxcbiAgICBsaXN0V29ya2Zsb3dSdW5zOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3Mve3dvcmtmbG93X2lkfS9ydW5zXCJcbiAgICBdLFxuICAgIGxpc3RXb3JrZmxvd1J1bnNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVuc1wiXSxcbiAgICByZVJ1bkpvYkZvcldvcmtmbG93UnVuOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvam9icy97am9iX2lkfS9yZXJ1blwiXG4gICAgXSxcbiAgICByZVJ1bldvcmtmbG93OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vcmVydW5cIl0sXG4gICAgcmVSdW5Xb3JrZmxvd0ZhaWxlZEpvYnM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L3JlcnVuLWZhaWxlZC1qb2JzXCJcbiAgICBdLFxuICAgIHJlbW92ZUFsbEN1c3RvbUxhYmVsc0Zyb21TZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCJcbiAgICBdLFxuICAgIHJlbW92ZUFsbEN1c3RvbUxhYmVsc0Zyb21TZWxmSG9zdGVkUnVubmVyRm9yUmVwbzogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIlxuICAgIF0sXG4gICAgcmVtb3ZlQ3VzdG9tTGFiZWxGcm9tU2VsZkhvc3RlZFJ1bm5lckZvck9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVscy97bmFtZX1cIlxuICAgIF0sXG4gICAgcmVtb3ZlQ3VzdG9tTGFiZWxGcm9tU2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzL3tuYW1lfVwiXG4gICAgXSxcbiAgICByZW1vdmVTZWxlY3RlZFJlcG9Gcm9tT3JnU2VjcmV0OiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCJcbiAgICBdLFxuICAgIHJlbW92ZVNlbGVjdGVkUmVwb0Zyb21PcmdWYXJpYWJsZTogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIlxuICAgIF0sXG4gICAgcmV2aWV3Q3VzdG9tR2F0ZXNGb3JSdW46IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2RlcGxveW1lbnRfcHJvdGVjdGlvbl9ydWxlXCJcbiAgICBdLFxuICAgIHJldmlld1BlbmRpbmdEZXBsb3ltZW50c0ZvclJ1bjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vcGVuZGluZ19kZXBsb3ltZW50c1wiXG4gICAgXSxcbiAgICBzZXRBbGxvd2VkQWN0aW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9zZWxlY3RlZC1hY3Rpb25zXCJcbiAgICBdLFxuICAgIHNldEFsbG93ZWRBY3Rpb25zUmVwb3NpdG9yeTogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnMvc2VsZWN0ZWQtYWN0aW9uc1wiXG4gICAgXSxcbiAgICBzZXRDdXN0b21MYWJlbHNGb3JTZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCJcbiAgICBdLFxuICAgIHNldEN1c3RvbUxhYmVsc0ZvclNlbGZIb3N0ZWRSdW5uZXJGb3JSZXBvOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVsc1wiXG4gICAgXSxcbiAgICBzZXRDdXN0b21PaWRjU3ViQ2xhaW1Gb3JSZXBvOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9vaWRjL2N1c3RvbWl6YXRpb24vc3ViXCJcbiAgICBdLFxuICAgIHNldEdpdGh1YkFjdGlvbnNEZWZhdWx0V29ya2Zsb3dQZXJtaXNzaW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy93b3JrZmxvd1wiXG4gICAgXSxcbiAgICBzZXRHaXRodWJBY3Rpb25zRGVmYXVsdFdvcmtmbG93UGVybWlzc2lvbnNSZXBvc2l0b3J5OiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9ucy93b3JrZmxvd1wiXG4gICAgXSxcbiAgICBzZXRHaXRodWJBY3Rpb25zUGVybWlzc2lvbnNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnNcIlxuICAgIF0sXG4gICAgc2V0R2l0aHViQWN0aW9uc1Blcm1pc3Npb25zUmVwb3NpdG9yeTogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnNcIlxuICAgIF0sXG4gICAgc2V0U2VsZWN0ZWRSZXBvc0Zvck9yZ1NlY3JldDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCJcbiAgICBdLFxuICAgIHNldFNlbGVjdGVkUmVwb3NGb3JPcmdWYXJpYWJsZTogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9L3JlcG9zaXRvcmllc1wiXG4gICAgXSxcbiAgICBzZXRTZWxlY3RlZFJlcG9zaXRvcmllc0VuYWJsZWRHaXRodWJBY3Rpb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3JlcG9zaXRvcmllc1wiXG4gICAgXSxcbiAgICBzZXRXb3JrZmxvd0FjY2Vzc1RvUmVwb3NpdG9yeTogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnMvYWNjZXNzXCJcbiAgICBdLFxuICAgIHVwZGF0ZUVudmlyb25tZW50VmFyaWFibGU6IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH0vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS92YXJpYWJsZXMve25hbWV9XCJcbiAgICBdLFxuICAgIHVwZGF0ZU9yZ1ZhcmlhYmxlOiBbXCJQQVRDSCAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX1cIl0sXG4gICAgdXBkYXRlUmVwb1ZhcmlhYmxlOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX1cIlxuICAgIF1cbiAgfSxcbiAgYWN0aXZpdHk6IHtcbiAgICBjaGVja1JlcG9Jc1N0YXJyZWRCeUF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvc3RhcnJlZC97b3duZXJ9L3tyZXBvfVwiXSxcbiAgICBkZWxldGVSZXBvU3Vic2NyaXB0aW9uOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmlwdGlvblwiXSxcbiAgICBkZWxldGVUaHJlYWRTdWJzY3JpcHRpb246IFtcbiAgICAgIFwiREVMRVRFIC9ub3RpZmljYXRpb25zL3RocmVhZHMve3RocmVhZF9pZH0vc3Vic2NyaXB0aW9uXCJcbiAgICBdLFxuICAgIGdldEZlZWRzOiBbXCJHRVQgL2ZlZWRzXCJdLFxuICAgIGdldFJlcG9TdWJzY3JpcHRpb246IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3Vic2NyaXB0aW9uXCJdLFxuICAgIGdldFRocmVhZDogW1wiR0VUIC9ub3RpZmljYXRpb25zL3RocmVhZHMve3RocmVhZF9pZH1cIl0sXG4gICAgZ2V0VGhyZWFkU3Vic2NyaXB0aW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC9ub3RpZmljYXRpb25zL3RocmVhZHMve3RocmVhZF9pZH0vc3Vic2NyaXB0aW9uXCJcbiAgICBdLFxuICAgIGxpc3RFdmVudHNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2V2ZW50c1wiXSxcbiAgICBsaXN0Tm90aWZpY2F0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL25vdGlmaWNhdGlvbnNcIl0sXG4gICAgbGlzdE9yZ0V2ZW50c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ldmVudHMvb3Jncy97b3JnfVwiXG4gICAgXSxcbiAgICBsaXN0UHVibGljRXZlbnRzOiBbXCJHRVQgL2V2ZW50c1wiXSxcbiAgICBsaXN0UHVibGljRXZlbnRzRm9yUmVwb05ldHdvcms6IFtcIkdFVCAvbmV0d29ya3Mve293bmVyfS97cmVwb30vZXZlbnRzXCJdLFxuICAgIGxpc3RQdWJsaWNFdmVudHNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzL3B1YmxpY1wiXSxcbiAgICBsaXN0UHVibGljT3JnRXZlbnRzOiBbXCJHRVQgL29yZ3Mve29yZ30vZXZlbnRzXCJdLFxuICAgIGxpc3RSZWNlaXZlZEV2ZW50c0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9yZWNlaXZlZF9ldmVudHNcIl0sXG4gICAgbGlzdFJlY2VpdmVkUHVibGljRXZlbnRzRm9yVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcmVjZWl2ZWRfZXZlbnRzL3B1YmxpY1wiXG4gICAgXSxcbiAgICBsaXN0UmVwb0V2ZW50czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ldmVudHNcIl0sXG4gICAgbGlzdFJlcG9Ob3RpZmljYXRpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ub3RpZmljYXRpb25zXCJcbiAgICBdLFxuICAgIGxpc3RSZXBvc1N0YXJyZWRCeUF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvc3RhcnJlZFwiXSxcbiAgICBsaXN0UmVwb3NTdGFycmVkQnlVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc3RhcnJlZFwiXSxcbiAgICBsaXN0UmVwb3NXYXRjaGVkQnlVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc3Vic2NyaXB0aW9uc1wiXSxcbiAgICBsaXN0U3RhcmdhemVyc0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3RhcmdhemVyc1wiXSxcbiAgICBsaXN0V2F0Y2hlZFJlcG9zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9zdWJzY3JpcHRpb25zXCJdLFxuICAgIGxpc3RXYXRjaGVyc0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3Vic2NyaWJlcnNcIl0sXG4gICAgbWFya05vdGlmaWNhdGlvbnNBc1JlYWQ6IFtcIlBVVCAvbm90aWZpY2F0aW9uc1wiXSxcbiAgICBtYXJrUmVwb05vdGlmaWNhdGlvbnNBc1JlYWQ6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vbm90aWZpY2F0aW9uc1wiXSxcbiAgICBtYXJrVGhyZWFkQXNEb25lOiBbXCJERUxFVEUgL25vdGlmaWNhdGlvbnMvdGhyZWFkcy97dGhyZWFkX2lkfVwiXSxcbiAgICBtYXJrVGhyZWFkQXNSZWFkOiBbXCJQQVRDSCAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9XCJdLFxuICAgIHNldFJlcG9TdWJzY3JpcHRpb246IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3Vic2NyaXB0aW9uXCJdLFxuICAgIHNldFRocmVhZFN1YnNjcmlwdGlvbjogW1xuICAgICAgXCJQVVQgL25vdGlmaWNhdGlvbnMvdGhyZWFkcy97dGhyZWFkX2lkfS9zdWJzY3JpcHRpb25cIlxuICAgIF0sXG4gICAgc3RhclJlcG9Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUFVUIC91c2VyL3N0YXJyZWQve293bmVyfS97cmVwb31cIl0sXG4gICAgdW5zdGFyUmVwb0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvc3RhcnJlZC97b3duZXJ9L3tyZXBvfVwiXVxuICB9LFxuICBhcHBzOiB7XG4gICAgYWRkUmVwb1RvSW5zdGFsbGF0aW9uOiBbXG4gICAgICBcIlBVVCAvdXNlci9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJhcHBzXCIsIFwiYWRkUmVwb1RvSW5zdGFsbGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfVxuICAgIF0sXG4gICAgYWRkUmVwb1RvSW5zdGFsbGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUFVUIC91c2VyL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiXG4gICAgXSxcbiAgICBjaGVja1Rva2VuOiBbXCJQT1NUIC9hcHBsaWNhdGlvbnMve2NsaWVudF9pZH0vdG9rZW5cIl0sXG4gICAgY3JlYXRlRnJvbU1hbmlmZXN0OiBbXCJQT1NUIC9hcHAtbWFuaWZlc3RzL3tjb2RlfS9jb252ZXJzaW9uc1wiXSxcbiAgICBjcmVhdGVJbnN0YWxsYXRpb25BY2Nlc3NUb2tlbjogW1xuICAgICAgXCJQT1NUIC9hcHAvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9hY2Nlc3NfdG9rZW5zXCJcbiAgICBdLFxuICAgIGRlbGV0ZUF1dGhvcml6YXRpb246IFtcIkRFTEVURSAvYXBwbGljYXRpb25zL3tjbGllbnRfaWR9L2dyYW50XCJdLFxuICAgIGRlbGV0ZUluc3RhbGxhdGlvbjogW1wiREVMRVRFIC9hcHAvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfVwiXSxcbiAgICBkZWxldGVUb2tlbjogW1wiREVMRVRFIC9hcHBsaWNhdGlvbnMve2NsaWVudF9pZH0vdG9rZW5cIl0sXG4gICAgZ2V0QXV0aGVudGljYXRlZDogW1wiR0VUIC9hcHBcIl0sXG4gICAgZ2V0QnlTbHVnOiBbXCJHRVQgL2FwcHMve2FwcF9zbHVnfVwiXSxcbiAgICBnZXRJbnN0YWxsYXRpb246IFtcIkdFVCAvYXBwL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH1cIl0sXG4gICAgZ2V0T3JnSW5zdGFsbGF0aW9uOiBbXCJHRVQgL29yZ3Mve29yZ30vaW5zdGFsbGF0aW9uXCJdLFxuICAgIGdldFJlcG9JbnN0YWxsYXRpb246IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaW5zdGFsbGF0aW9uXCJdLFxuICAgIGdldFN1YnNjcmlwdGlvblBsYW5Gb3JBY2NvdW50OiBbXG4gICAgICBcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9hY2NvdW50cy97YWNjb3VudF9pZH1cIlxuICAgIF0sXG4gICAgZ2V0U3Vic2NyaXB0aW9uUGxhbkZvckFjY291bnRTdHViYmVkOiBbXG4gICAgICBcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9zdHViYmVkL2FjY291bnRzL3thY2NvdW50X2lkfVwiXG4gICAgXSxcbiAgICBnZXRVc2VySW5zdGFsbGF0aW9uOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vaW5zdGFsbGF0aW9uXCJdLFxuICAgIGdldFdlYmhvb2tDb25maWdGb3JBcHA6IFtcIkdFVCAvYXBwL2hvb2svY29uZmlnXCJdLFxuICAgIGdldFdlYmhvb2tEZWxpdmVyeTogW1wiR0VUIC9hcHAvaG9vay9kZWxpdmVyaWVzL3tkZWxpdmVyeV9pZH1cIl0sXG4gICAgbGlzdEFjY291bnRzRm9yUGxhbjogW1wiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3BsYW5zL3twbGFuX2lkfS9hY2NvdW50c1wiXSxcbiAgICBsaXN0QWNjb3VudHNGb3JQbGFuU3R1YmJlZDogW1xuICAgICAgXCJHRVQgL21hcmtldHBsYWNlX2xpc3Rpbmcvc3R1YmJlZC9wbGFucy97cGxhbl9pZH0vYWNjb3VudHNcIlxuICAgIF0sXG4gICAgbGlzdEluc3RhbGxhdGlvblJlcG9zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCJcbiAgICBdLFxuICAgIGxpc3RJbnN0YWxsYXRpb25SZXF1ZXN0c0ZvckF1dGhlbnRpY2F0ZWRBcHA6IFtcbiAgICAgIFwiR0VUIC9hcHAvaW5zdGFsbGF0aW9uLXJlcXVlc3RzXCJcbiAgICBdLFxuICAgIGxpc3RJbnN0YWxsYXRpb25zOiBbXCJHRVQgL2FwcC9pbnN0YWxsYXRpb25zXCJdLFxuICAgIGxpc3RJbnN0YWxsYXRpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9pbnN0YWxsYXRpb25zXCJdLFxuICAgIGxpc3RQbGFuczogW1wiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3BsYW5zXCJdLFxuICAgIGxpc3RQbGFuc1N0dWJiZWQ6IFtcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9zdHViYmVkL3BsYW5zXCJdLFxuICAgIGxpc3RSZXBvc0FjY2Vzc2libGVUb0luc3RhbGxhdGlvbjogW1wiR0VUIC9pbnN0YWxsYXRpb24vcmVwb3NpdG9yaWVzXCJdLFxuICAgIGxpc3RTdWJzY3JpcHRpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9tYXJrZXRwbGFjZV9wdXJjaGFzZXNcIl0sXG4gICAgbGlzdFN1YnNjcmlwdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlclN0dWJiZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL21hcmtldHBsYWNlX3B1cmNoYXNlcy9zdHViYmVkXCJcbiAgICBdLFxuICAgIGxpc3RXZWJob29rRGVsaXZlcmllczogW1wiR0VUIC9hcHAvaG9vay9kZWxpdmVyaWVzXCJdLFxuICAgIHJlZGVsaXZlcldlYmhvb2tEZWxpdmVyeTogW1xuICAgICAgXCJQT1NUIC9hcHAvaG9vay9kZWxpdmVyaWVzL3tkZWxpdmVyeV9pZH0vYXR0ZW1wdHNcIlxuICAgIF0sXG4gICAgcmVtb3ZlUmVwb0Zyb21JbnN0YWxsYXRpb246IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcImFwcHNcIiwgXCJyZW1vdmVSZXBvRnJvbUluc3RhbGxhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIHJlbW92ZVJlcG9Gcm9tSW5zdGFsbGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiXG4gICAgXSxcbiAgICByZXNldFRva2VuOiBbXCJQQVRDSCAvYXBwbGljYXRpb25zL3tjbGllbnRfaWR9L3Rva2VuXCJdLFxuICAgIHJldm9rZUluc3RhbGxhdGlvbkFjY2Vzc1Rva2VuOiBbXCJERUxFVEUgL2luc3RhbGxhdGlvbi90b2tlblwiXSxcbiAgICBzY29wZVRva2VuOiBbXCJQT1NUIC9hcHBsaWNhdGlvbnMve2NsaWVudF9pZH0vdG9rZW4vc2NvcGVkXCJdLFxuICAgIHN1c3BlbmRJbnN0YWxsYXRpb246IFtcIlBVVCAvYXBwL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vc3VzcGVuZGVkXCJdLFxuICAgIHVuc3VzcGVuZEluc3RhbGxhdGlvbjogW1xuICAgICAgXCJERUxFVEUgL2FwcC9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3N1c3BlbmRlZFwiXG4gICAgXSxcbiAgICB1cGRhdGVXZWJob29rQ29uZmlnRm9yQXBwOiBbXCJQQVRDSCAvYXBwL2hvb2svY29uZmlnXCJdXG4gIH0sXG4gIGJpbGxpbmc6IHtcbiAgICBnZXRHaXRodWJBY3Rpb25zQmlsbGluZ09yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL2JpbGxpbmcvYWN0aW9uc1wiXSxcbiAgICBnZXRHaXRodWJBY3Rpb25zQmlsbGluZ1VzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NldHRpbmdzL2JpbGxpbmcvYWN0aW9uc1wiXG4gICAgXSxcbiAgICBnZXRHaXRodWJQYWNrYWdlc0JpbGxpbmdPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9zZXR0aW5ncy9iaWxsaW5nL3BhY2thZ2VzXCJdLFxuICAgIGdldEdpdGh1YlBhY2thZ2VzQmlsbGluZ1VzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NldHRpbmdzL2JpbGxpbmcvcGFja2FnZXNcIlxuICAgIF0sXG4gICAgZ2V0U2hhcmVkU3RvcmFnZUJpbGxpbmdPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL2JpbGxpbmcvc2hhcmVkLXN0b3JhZ2VcIlxuICAgIF0sXG4gICAgZ2V0U2hhcmVkU3RvcmFnZUJpbGxpbmdVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zZXR0aW5ncy9iaWxsaW5nL3NoYXJlZC1zdG9yYWdlXCJcbiAgICBdXG4gIH0sXG4gIGNoZWNrczoge1xuICAgIGNyZWF0ZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stcnVuc1wiXSxcbiAgICBjcmVhdGVTdWl0ZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stc3VpdGVzXCJdLFxuICAgIGdldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1ydW5zL3tjaGVja19ydW5faWR9XCJdLFxuICAgIGdldFN1aXRlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXN1aXRlcy97Y2hlY2tfc3VpdGVfaWR9XCJdLFxuICAgIGxpc3RBbm5vdGF0aW9uczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXJ1bnMve2NoZWNrX3J1bl9pZH0vYW5ub3RhdGlvbnNcIlxuICAgIF0sXG4gICAgbGlzdEZvclJlZjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L2NoZWNrLXJ1bnNcIl0sXG4gICAgbGlzdEZvclN1aXRlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stc3VpdGVzL3tjaGVja19zdWl0ZV9pZH0vY2hlY2stcnVuc1wiXG4gICAgXSxcbiAgICBsaXN0U3VpdGVzRm9yUmVmOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vY2hlY2stc3VpdGVzXCJdLFxuICAgIHJlcmVxdWVzdFJ1bjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1ydW5zL3tjaGVja19ydW5faWR9L3JlcmVxdWVzdFwiXG4gICAgXSxcbiAgICByZXJlcXVlc3RTdWl0ZTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1zdWl0ZXMve2NoZWNrX3N1aXRlX2lkfS9yZXJlcXVlc3RcIlxuICAgIF0sXG4gICAgc2V0U3VpdGVzUHJlZmVyZW5jZXM6IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXN1aXRlcy9wcmVmZXJlbmNlc1wiXG4gICAgXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1ydW5zL3tjaGVja19ydW5faWR9XCJdXG4gIH0sXG4gIGNvZGVTY2FubmluZzoge1xuICAgIGRlbGV0ZUFuYWx5c2lzOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbmFseXNlcy97YW5hbHlzaXNfaWR9ez9jb25maXJtX2RlbGV0ZX1cIlxuICAgIF0sXG4gICAgZ2V0QWxlcnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWRQYXJhbWV0ZXJzOiB7IGFsZXJ0X2lkOiBcImFsZXJ0X251bWJlclwiIH0gfVxuICAgIF0sXG4gICAgZ2V0QW5hbHlzaXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FuYWx5c2VzL3thbmFseXNpc19pZH1cIlxuICAgIF0sXG4gICAgZ2V0Q29kZXFsRGF0YWJhc2U6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2NvZGVxbC9kYXRhYmFzZXMve2xhbmd1YWdlfVwiXG4gICAgXSxcbiAgICBnZXREZWZhdWx0U2V0dXA6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9kZWZhdWx0LXNldHVwXCJdLFxuICAgIGdldFNhcmlmOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvc2FyaWZzL3tzYXJpZl9pZH1cIl0sXG4gICAgbGlzdEFsZXJ0SW5zdGFuY2VzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn0vaW5zdGFuY2VzXCJcbiAgICBdLFxuICAgIGxpc3RBbGVydHNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9jb2RlLXNjYW5uaW5nL2FsZXJ0c1wiXSxcbiAgICBsaXN0QWxlcnRzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0c1wiXSxcbiAgICBsaXN0QWxlcnRzSW5zdGFuY2VzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn0vaW5zdGFuY2VzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiY29kZVNjYW5uaW5nXCIsIFwibGlzdEFsZXJ0SW5zdGFuY2VzXCJdIH1cbiAgICBdLFxuICAgIGxpc3RDb2RlcWxEYXRhYmFzZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2NvZGVxbC9kYXRhYmFzZXNcIlxuICAgIF0sXG4gICAgbGlzdFJlY2VudEFuYWx5c2VzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYW5hbHlzZXNcIl0sXG4gICAgdXBkYXRlQWxlcnQ6IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9XCJcbiAgICBdLFxuICAgIHVwZGF0ZURlZmF1bHRTZXR1cDogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9kZWZhdWx0LXNldHVwXCJcbiAgICBdLFxuICAgIHVwbG9hZFNhcmlmOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL3Nhcmlmc1wiXVxuICB9LFxuICBjb2Rlc09mQ29uZHVjdDoge1xuICAgIGdldEFsbENvZGVzT2ZDb25kdWN0OiBbXCJHRVQgL2NvZGVzX29mX2NvbmR1Y3RcIl0sXG4gICAgZ2V0Q29uZHVjdENvZGU6IFtcIkdFVCAvY29kZXNfb2ZfY29uZHVjdC97a2V5fVwiXVxuICB9LFxuICBjb2Rlc3BhY2VzOiB7XG4gICAgYWRkUmVwb3NpdG9yeUZvclNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBVVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCJcbiAgICBdLFxuICAgIGFkZFNlbGVjdGVkUmVwb1RvT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCJcbiAgICBdLFxuICAgIGNoZWNrUGVybWlzc2lvbnNGb3JEZXZjb250YWluZXI6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL3Blcm1pc3Npb25zX2NoZWNrXCJcbiAgICBdLFxuICAgIGNvZGVzcGFjZU1hY2hpbmVzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfS9tYWNoaW5lc1wiXG4gICAgXSxcbiAgICBjcmVhdGVGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9jb2Rlc3BhY2VzXCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXG4gICAgXSxcbiAgICBjcmVhdGVPclVwZGF0ZVJlcG9TZWNyZXQ6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXG4gICAgXSxcbiAgICBjcmVhdGVPclVwZGF0ZVNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBVVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXG4gICAgXSxcbiAgICBjcmVhdGVXaXRoUHJGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2NvZGVzcGFjZXNcIlxuICAgIF0sXG4gICAgY3JlYXRlV2l0aFJlcG9Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzXCJcbiAgICBdLFxuICAgIGRlbGV0ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9XCJdLFxuICAgIGRlbGV0ZUZyb21Pcmdhbml6YXRpb246IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfS9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX1cIlxuICAgIF0sXG4gICAgZGVsZXRlT3JnU2VjcmV0OiBbXCJERUxFVEUgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZGVsZXRlUmVwb1NlY3JldDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJcbiAgICBdLFxuICAgIGRlbGV0ZVNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXG4gICAgXSxcbiAgICBleHBvcnRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQT1NUIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfS9leHBvcnRzXCJcbiAgICBdLFxuICAgIGdldENvZGVzcGFjZXNGb3JVc2VySW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfS9jb2Rlc3BhY2VzXCJcbiAgICBdLFxuICAgIGdldEV4cG9ydERldGFpbHNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9L2V4cG9ydHMve2V4cG9ydF9pZH1cIlxuICAgIF0sXG4gICAgZ2V0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX1cIl0sXG4gICAgZ2V0T3JnUHVibGljS2V5OiBbXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3B1YmxpYy1rZXlcIl0sXG4gICAgZ2V0T3JnU2VjcmV0OiBbXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZ2V0UHVibGljS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy9wdWJsaWMta2V5XCJcbiAgICBdLFxuICAgIGdldFJlcG9QdWJsaWNLZXk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL3NlY3JldHMvcHVibGljLWtleVwiXG4gICAgXSxcbiAgICBnZXRSZXBvU2VjcmV0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIlxuICAgIF0sXG4gICAgZ2V0U2VjcmV0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJcbiAgICBdLFxuICAgIGxpc3REZXZjb250YWluZXJzSW5SZXBvc2l0b3J5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL2RldmNvbnRhaW5lcnNcIlxuICAgIF0sXG4gICAgbGlzdEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvY29kZXNwYWNlc1wiXSxcbiAgICBsaXN0SW5Pcmdhbml6YXRpb246IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkUGFyYW1ldGVyczogeyBvcmdfaWQ6IFwib3JnXCIgfSB9XG4gICAgXSxcbiAgICBsaXN0SW5SZXBvc2l0b3J5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzXCJcbiAgICBdLFxuICAgIGxpc3RPcmdTZWNyZXRzOiBbXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzXCJdLFxuICAgIGxpc3RSZXBvU2VjcmV0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL3NlY3JldHNcIl0sXG4gICAgbGlzdFJlcG9zaXRvcmllc0ZvclNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIlxuICAgIF0sXG4gICAgbGlzdFNlY3JldHNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0c1wiXSxcbiAgICBsaXN0U2VsZWN0ZWRSZXBvc0Zvck9yZ1NlY3JldDogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCJcbiAgICBdLFxuICAgIHByZUZsaWdodFdpdGhSZXBvRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL25ld1wiXG4gICAgXSxcbiAgICBwdWJsaXNoRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUE9TVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vcHVibGlzaFwiXG4gICAgXSxcbiAgICByZW1vdmVSZXBvc2l0b3J5Rm9yU2VjcmV0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIlxuICAgIF0sXG4gICAgcmVtb3ZlU2VsZWN0ZWRSZXBvRnJvbU9yZ1NlY3JldDogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiXG4gICAgXSxcbiAgICByZXBvTWFjaGluZXNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvbWFjaGluZXNcIlxuICAgIF0sXG4gICAgc2V0UmVwb3NpdG9yaWVzRm9yU2VjcmV0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUFVUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiXG4gICAgXSxcbiAgICBzZXRTZWxlY3RlZFJlcG9zRm9yT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIlxuICAgIF0sXG4gICAgc3RhcnRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vc3RhcnRcIl0sXG4gICAgc3RvcEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfS9zdG9wXCJdLFxuICAgIHN0b3BJbk9yZ2FuaXphdGlvbjogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfS9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vc3RvcFwiXG4gICAgXSxcbiAgICB1cGRhdGVGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUEFUQ0ggL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9XCJdXG4gIH0sXG4gIGNvcGlsb3Q6IHtcbiAgICBhZGRDb3BpbG90U2VhdHNGb3JUZWFtczogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L2NvcGlsb3QvYmlsbGluZy9zZWxlY3RlZF90ZWFtc1wiXG4gICAgXSxcbiAgICBhZGRDb3BpbG90U2VhdHNGb3JVc2VyczogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L2NvcGlsb3QvYmlsbGluZy9zZWxlY3RlZF91c2Vyc1wiXG4gICAgXSxcbiAgICBjYW5jZWxDb3BpbG90U2VhdEFzc2lnbm1lbnRGb3JUZWFtczogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vY29waWxvdC9iaWxsaW5nL3NlbGVjdGVkX3RlYW1zXCJcbiAgICBdLFxuICAgIGNhbmNlbENvcGlsb3RTZWF0QXNzaWdubWVudEZvclVzZXJzOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmcvc2VsZWN0ZWRfdXNlcnNcIlxuICAgIF0sXG4gICAgZ2V0Q29waWxvdE9yZ2FuaXphdGlvbkRldGFpbHM6IFtcIkdFVCAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmdcIl0sXG4gICAgZ2V0Q29waWxvdFNlYXREZXRhaWxzRm9yVXNlcjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vbWVtYmVycy97dXNlcm5hbWV9L2NvcGlsb3RcIlxuICAgIF0sXG4gICAgbGlzdENvcGlsb3RTZWF0czogW1wiR0VUIC9vcmdzL3tvcmd9L2NvcGlsb3QvYmlsbGluZy9zZWF0c1wiXVxuICB9LFxuICBkZXBlbmRhYm90OiB7XG4gICAgYWRkU2VsZWN0ZWRSZXBvVG9PcmdTZWNyZXQ6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIlxuICAgIF0sXG4gICAgY3JlYXRlT3JVcGRhdGVPcmdTZWNyZXQ6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJcbiAgICBdLFxuICAgIGNyZWF0ZU9yVXBkYXRlUmVwb1NlY3JldDogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJcbiAgICBdLFxuICAgIGRlbGV0ZU9yZ1NlY3JldDogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGRlbGV0ZVJlcG9TZWNyZXQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfVwiXG4gICAgXSxcbiAgICBnZXRBbGVydDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L2FsZXJ0cy97YWxlcnRfbnVtYmVyfVwiXSxcbiAgICBnZXRPcmdQdWJsaWNLZXk6IFtcIkdFVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMvcHVibGljLWtleVwiXSxcbiAgICBnZXRPcmdTZWNyZXQ6IFtcIkdFVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBnZXRSZXBvUHVibGljS2V5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9zZWNyZXRzL3B1YmxpYy1rZXlcIlxuICAgIF0sXG4gICAgZ2V0UmVwb1NlY3JldDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJcbiAgICBdLFxuICAgIGxpc3RBbGVydHNGb3JFbnRlcnByaXNlOiBbXG4gICAgICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2RlcGVuZGFib3QvYWxlcnRzXCJcbiAgICBdLFxuICAgIGxpc3RBbGVydHNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L2FsZXJ0c1wiXSxcbiAgICBsaXN0QWxlcnRzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L2FsZXJ0c1wiXSxcbiAgICBsaXN0T3JnU2VjcmV0czogW1wiR0VUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0c1wiXSxcbiAgICBsaXN0UmVwb1NlY3JldHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9zZWNyZXRzXCJdLFxuICAgIGxpc3RTZWxlY3RlZFJlcG9zRm9yT3JnU2VjcmV0OiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIlxuICAgIF0sXG4gICAgcmVtb3ZlU2VsZWN0ZWRSZXBvRnJvbU9yZ1NlY3JldDogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiXG4gICAgXSxcbiAgICBzZXRTZWxlY3RlZFJlcG9zRm9yT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIlxuICAgIF0sXG4gICAgdXBkYXRlQWxlcnQ6IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3QvYWxlcnRzL3thbGVydF9udW1iZXJ9XCJcbiAgICBdXG4gIH0sXG4gIGRlcGVuZGVuY3lHcmFwaDoge1xuICAgIGNyZWF0ZVJlcG9zaXRvcnlTbmFwc2hvdDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRlbmN5LWdyYXBoL3NuYXBzaG90c1wiXG4gICAgXSxcbiAgICBkaWZmUmFuZ2U6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRlbmN5LWdyYXBoL2NvbXBhcmUve2Jhc2VoZWFkfVwiXG4gICAgXSxcbiAgICBleHBvcnRTYm9tOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGVuY3ktZ3JhcGgvc2JvbVwiXVxuICB9LFxuICBlbW9qaXM6IHsgZ2V0OiBbXCJHRVQgL2Vtb2ppc1wiXSB9LFxuICBnaXN0czoge1xuICAgIGNoZWNrSXNTdGFycmVkOiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfS9zdGFyXCJdLFxuICAgIGNyZWF0ZTogW1wiUE9TVCAvZ2lzdHNcIl0sXG4gICAgY3JlYXRlQ29tbWVudDogW1wiUE9TVCAvZ2lzdHMve2dpc3RfaWR9L2NvbW1lbnRzXCJdLFxuICAgIGRlbGV0ZTogW1wiREVMRVRFIC9naXN0cy97Z2lzdF9pZH1cIl0sXG4gICAgZGVsZXRlQ29tbWVudDogW1wiREVMRVRFIC9naXN0cy97Z2lzdF9pZH0vY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIGZvcms6IFtcIlBPU1QgL2dpc3RzL3tnaXN0X2lkfS9mb3Jrc1wiXSxcbiAgICBnZXQ6IFtcIkdFVCAvZ2lzdHMve2dpc3RfaWR9XCJdLFxuICAgIGdldENvbW1lbnQ6IFtcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBnZXRSZXZpc2lvbjogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH0ve3NoYX1cIl0sXG4gICAgbGlzdDogW1wiR0VUIC9naXN0c1wiXSxcbiAgICBsaXN0Q29tbWVudHM6IFtcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L2NvbW1lbnRzXCJdLFxuICAgIGxpc3RDb21taXRzOiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfS9jb21taXRzXCJdLFxuICAgIGxpc3RGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZ2lzdHNcIl0sXG4gICAgbGlzdEZvcmtzOiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfS9mb3Jrc1wiXSxcbiAgICBsaXN0UHVibGljOiBbXCJHRVQgL2dpc3RzL3B1YmxpY1wiXSxcbiAgICBsaXN0U3RhcnJlZDogW1wiR0VUIC9naXN0cy9zdGFycmVkXCJdLFxuICAgIHN0YXI6IFtcIlBVVCAvZ2lzdHMve2dpc3RfaWR9L3N0YXJcIl0sXG4gICAgdW5zdGFyOiBbXCJERUxFVEUgL2dpc3RzL3tnaXN0X2lkfS9zdGFyXCJdLFxuICAgIHVwZGF0ZTogW1wiUEFUQ0ggL2dpc3RzL3tnaXN0X2lkfVwiXSxcbiAgICB1cGRhdGVDb21tZW50OiBbXCJQQVRDSCAvZ2lzdHMve2dpc3RfaWR9L2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXVxuICB9LFxuICBnaXQ6IHtcbiAgICBjcmVhdGVCbG9iOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvYmxvYnNcIl0sXG4gICAgY3JlYXRlQ29tbWl0OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvY29tbWl0c1wiXSxcbiAgICBjcmVhdGVSZWY6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9yZWZzXCJdLFxuICAgIGNyZWF0ZVRhZzogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3RhZ3NcIl0sXG4gICAgY3JlYXRlVHJlZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3RyZWVzXCJdLFxuICAgIGRlbGV0ZVJlZjogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvcmVmcy97cmVmfVwiXSxcbiAgICBnZXRCbG9iOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9ibG9icy97ZmlsZV9zaGF9XCJdLFxuICAgIGdldENvbW1pdDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvY29tbWl0cy97Y29tbWl0X3NoYX1cIl0sXG4gICAgZ2V0UmVmOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9yZWYve3JlZn1cIl0sXG4gICAgZ2V0VGFnOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC90YWdzL3t0YWdfc2hhfVwiXSxcbiAgICBnZXRUcmVlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC90cmVlcy97dHJlZV9zaGF9XCJdLFxuICAgIGxpc3RNYXRjaGluZ1JlZnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L21hdGNoaW5nLXJlZnMve3JlZn1cIl0sXG4gICAgdXBkYXRlUmVmOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3JlZnMve3JlZn1cIl1cbiAgfSxcbiAgZ2l0aWdub3JlOiB7XG4gICAgZ2V0QWxsVGVtcGxhdGVzOiBbXCJHRVQgL2dpdGlnbm9yZS90ZW1wbGF0ZXNcIl0sXG4gICAgZ2V0VGVtcGxhdGU6IFtcIkdFVCAvZ2l0aWdub3JlL3RlbXBsYXRlcy97bmFtZX1cIl1cbiAgfSxcbiAgaW50ZXJhY3Rpb25zOiB7XG4gICAgZ2V0UmVzdHJpY3Rpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgZ2V0UmVzdHJpY3Rpb25zRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIGdldFJlc3RyaWN0aW9uc0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIGdldFJlc3RyaWN0aW9uc0ZvcllvdXJQdWJsaWNSZXBvczogW1xuICAgICAgXCJHRVQgL3VzZXIvaW50ZXJhY3Rpb24tbGltaXRzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiaW50ZXJhY3Rpb25zXCIsIFwiZ2V0UmVzdHJpY3Rpb25zRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfVxuICAgIF0sXG4gICAgcmVtb3ZlUmVzdHJpY3Rpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgcmVtb3ZlUmVzdHJpY3Rpb25zRm9yT3JnOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIHJlbW92ZVJlc3RyaWN0aW9uc0ZvclJlcG86IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbnRlcmFjdGlvbi1saW1pdHNcIlxuICAgIF0sXG4gICAgcmVtb3ZlUmVzdHJpY3Rpb25zRm9yWW91clB1YmxpY1JlcG9zOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9pbnRlcmFjdGlvbi1saW1pdHNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJpbnRlcmFjdGlvbnNcIiwgXCJyZW1vdmVSZXN0cmljdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBzZXRSZXN0cmljdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUFVUIC91c2VyL2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICBzZXRSZXN0cmljdGlvbnNGb3JPcmc6IFtcIlBVVCAvb3Jncy97b3JnfS9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgc2V0UmVzdHJpY3Rpb25zRm9yUmVwbzogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgc2V0UmVzdHJpY3Rpb25zRm9yWW91clB1YmxpY1JlcG9zOiBbXG4gICAgICBcIlBVVCAvdXNlci9pbnRlcmFjdGlvbi1saW1pdHNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJpbnRlcmFjdGlvbnNcIiwgXCJzZXRSZXN0cmljdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXVxuICB9LFxuICBpc3N1ZXM6IHtcbiAgICBhZGRBc3NpZ25lZXM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2Fzc2lnbmVlc1wiXG4gICAgXSxcbiAgICBhZGRMYWJlbHM6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sYWJlbHNcIl0sXG4gICAgY2hlY2tVc2VyQ2FuQmVBc3NpZ25lZDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hc3NpZ25lZXMve2Fzc2lnbmVlfVwiXSxcbiAgICBjaGVja1VzZXJDYW5CZUFzc2lnbmVkVG9Jc3N1ZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9hc3NpZ25lZXMve2Fzc2lnbmVlfVwiXG4gICAgXSxcbiAgICBjcmVhdGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlc1wiXSxcbiAgICBjcmVhdGVDb21tZW50OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9jb21tZW50c1wiXG4gICAgXSxcbiAgICBjcmVhdGVMYWJlbDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vbGFiZWxzXCJdLFxuICAgIGNyZWF0ZU1pbGVzdG9uZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lc1wiXSxcbiAgICBkZWxldGVDb21tZW50OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXG4gICAgXSxcbiAgICBkZWxldGVMYWJlbDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sYWJlbHMve25hbWV9XCJdLFxuICAgIGRlbGV0ZU1pbGVzdG9uZTogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXMve21pbGVzdG9uZV9udW1iZXJ9XCJcbiAgICBdLFxuICAgIGdldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn1cIl0sXG4gICAgZ2V0Q29tbWVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIGdldEV2ZW50OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9ldmVudHMve2V2ZW50X2lkfVwiXSxcbiAgICBnZXRMYWJlbDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sYWJlbHMve25hbWV9XCJdLFxuICAgIGdldE1pbGVzdG9uZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzL3ttaWxlc3RvbmVfbnVtYmVyfVwiXSxcbiAgICBsaXN0OiBbXCJHRVQgL2lzc3Vlc1wiXSxcbiAgICBsaXN0QXNzaWduZWVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Fzc2lnbmVlc1wiXSxcbiAgICBsaXN0Q29tbWVudHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2NvbW1lbnRzXCJdLFxuICAgIGxpc3RDb21tZW50c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzXCJdLFxuICAgIGxpc3RFdmVudHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2V2ZW50c1wiXSxcbiAgICBsaXN0RXZlbnRzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvZXZlbnRzXCJdLFxuICAgIGxpc3RFdmVudHNGb3JUaW1lbGluZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS90aW1lbGluZVwiXG4gICAgXSxcbiAgICBsaXN0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9pc3N1ZXNcIl0sXG4gICAgbGlzdEZvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2lzc3Vlc1wiXSxcbiAgICBsaXN0Rm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXNcIl0sXG4gICAgbGlzdExhYmVsc0Zvck1pbGVzdG9uZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXMve21pbGVzdG9uZV9udW1iZXJ9L2xhYmVsc1wiXG4gICAgXSxcbiAgICBsaXN0TGFiZWxzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sYWJlbHNcIl0sXG4gICAgbGlzdExhYmVsc09uSXNzdWU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbGFiZWxzXCJcbiAgICBdLFxuICAgIGxpc3RNaWxlc3RvbmVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXNcIl0sXG4gICAgbG9jazogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbG9ja1wiXSxcbiAgICByZW1vdmVBbGxMYWJlbHM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbGFiZWxzXCJcbiAgICBdLFxuICAgIHJlbW92ZUFzc2lnbmVlczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9hc3NpZ25lZXNcIlxuICAgIF0sXG4gICAgcmVtb3ZlTGFiZWw6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbGFiZWxzL3tuYW1lfVwiXG4gICAgXSxcbiAgICBzZXRMYWJlbHM6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xhYmVsc1wiXSxcbiAgICB1bmxvY2s6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xvY2tcIl0sXG4gICAgdXBkYXRlOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9XCJdLFxuICAgIHVwZGF0ZUNvbW1lbnQ6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIHVwZGF0ZUxhYmVsOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vbGFiZWxzL3tuYW1lfVwiXSxcbiAgICB1cGRhdGVNaWxlc3RvbmU6IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXMve21pbGVzdG9uZV9udW1iZXJ9XCJcbiAgICBdXG4gIH0sXG4gIGxpY2Vuc2VzOiB7XG4gICAgZ2V0OiBbXCJHRVQgL2xpY2Vuc2VzL3tsaWNlbnNlfVwiXSxcbiAgICBnZXRBbGxDb21tb25seVVzZWQ6IFtcIkdFVCAvbGljZW5zZXNcIl0sXG4gICAgZ2V0Rm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9saWNlbnNlXCJdXG4gIH0sXG4gIG1hcmtkb3duOiB7XG4gICAgcmVuZGVyOiBbXCJQT1NUIC9tYXJrZG93blwiXSxcbiAgICByZW5kZXJSYXc6IFtcbiAgICAgIFwiUE9TVCAvbWFya2Rvd24vcmF3XCIsXG4gICAgICB7IGhlYWRlcnM6IHsgXCJjb250ZW50LXR5cGVcIjogXCJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04XCIgfSB9XG4gICAgXVxuICB9LFxuICBtZXRhOiB7XG4gICAgZ2V0OiBbXCJHRVQgL21ldGFcIl0sXG4gICAgZ2V0QWxsVmVyc2lvbnM6IFtcIkdFVCAvdmVyc2lvbnNcIl0sXG4gICAgZ2V0T2N0b2NhdDogW1wiR0VUIC9vY3RvY2F0XCJdLFxuICAgIGdldFplbjogW1wiR0VUIC96ZW5cIl0sXG4gICAgcm9vdDogW1wiR0VUIC9cIl1cbiAgfSxcbiAgbWlncmF0aW9uczoge1xuICAgIGNhbmNlbEltcG9ydDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ltcG9ydFwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6IFwib2N0b2tpdC5yZXN0Lm1pZ3JhdGlvbnMuY2FuY2VsSW1wb3J0KCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvbWlncmF0aW9ucy9zb3VyY2UtaW1wb3J0cyNjYW5jZWwtYW4taW1wb3J0XCJcbiAgICAgIH1cbiAgICBdLFxuICAgIGRlbGV0ZUFyY2hpdmVGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9hcmNoaXZlXCJcbiAgICBdLFxuICAgIGRlbGV0ZUFyY2hpdmVGb3JPcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vYXJjaGl2ZVwiXG4gICAgXSxcbiAgICBkb3dubG9hZEFyY2hpdmVGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vYXJjaGl2ZVwiXG4gICAgXSxcbiAgICBnZXRBcmNoaXZlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vYXJjaGl2ZVwiXG4gICAgXSxcbiAgICBnZXRDb21taXRBdXRob3JzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaW1wb3J0L2F1dGhvcnNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOiBcIm9jdG9raXQucmVzdC5taWdyYXRpb25zLmdldENvbW1pdEF1dGhvcnMoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9taWdyYXRpb25zL3NvdXJjZS1pbXBvcnRzI2dldC1jb21taXQtYXV0aG9yc1wiXG4gICAgICB9XG4gICAgXSxcbiAgICBnZXRJbXBvcnRTdGF0dXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbXBvcnRcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOiBcIm9jdG9raXQucmVzdC5taWdyYXRpb25zLmdldEltcG9ydFN0YXR1cygpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L21pZ3JhdGlvbnMvc291cmNlLWltcG9ydHMjZ2V0LWFuLWltcG9ydC1zdGF0dXNcIlxuICAgICAgfVxuICAgIF0sXG4gICAgZ2V0TGFyZ2VGaWxlczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ltcG9ydC9sYXJnZV9maWxlc1wiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6IFwib2N0b2tpdC5yZXN0Lm1pZ3JhdGlvbnMuZ2V0TGFyZ2VGaWxlcygpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L21pZ3JhdGlvbnMvc291cmNlLWltcG9ydHMjZ2V0LWxhcmdlLWZpbGVzXCJcbiAgICAgIH1cbiAgICBdLFxuICAgIGdldFN0YXR1c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfVwiXSxcbiAgICBnZXRTdGF0dXNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9XCJdLFxuICAgIGxpc3RGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL21pZ3JhdGlvbnNcIl0sXG4gICAgbGlzdEZvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnNcIl0sXG4gICAgbGlzdFJlcG9zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCJcbiAgICBdLFxuICAgIGxpc3RSZXBvc0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCJdLFxuICAgIGxpc3RSZXBvc0ZvclVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wibWlncmF0aW9uc1wiLCBcImxpc3RSZXBvc0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIG1hcENvbW1pdEF1dGhvcjogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaW1wb3J0L2F1dGhvcnMve2F1dGhvcl9pZH1cIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOiBcIm9jdG9raXQucmVzdC5taWdyYXRpb25zLm1hcENvbW1pdEF1dGhvcigpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L21pZ3JhdGlvbnMvc291cmNlLWltcG9ydHMjbWFwLWEtY29tbWl0LWF1dGhvclwiXG4gICAgICB9XG4gICAgXSxcbiAgICBzZXRMZnNQcmVmZXJlbmNlOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbXBvcnQvbGZzXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDogXCJvY3Rva2l0LnJlc3QubWlncmF0aW9ucy5zZXRMZnNQcmVmZXJlbmNlKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvbWlncmF0aW9ucy9zb3VyY2UtaW1wb3J0cyN1cGRhdGUtZ2l0LWxmcy1wcmVmZXJlbmNlXCJcbiAgICAgIH1cbiAgICBdLFxuICAgIHN0YXJ0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvbWlncmF0aW9uc1wiXSxcbiAgICBzdGFydEZvck9yZzogW1wiUE9TVCAvb3Jncy97b3JnfS9taWdyYXRpb25zXCJdLFxuICAgIHN0YXJ0SW1wb3J0OiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vaW1wb3J0XCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDogXCJvY3Rva2l0LnJlc3QubWlncmF0aW9ucy5zdGFydEltcG9ydCgpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L21pZ3JhdGlvbnMvc291cmNlLWltcG9ydHMjc3RhcnQtYW4taW1wb3J0XCJcbiAgICAgIH1cbiAgICBdLFxuICAgIHVubG9ja1JlcG9Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9yZXBvcy97cmVwb19uYW1lfS9sb2NrXCJcbiAgICBdLFxuICAgIHVubG9ja1JlcG9Gb3JPcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3Mve3JlcG9fbmFtZX0vbG9ja1wiXG4gICAgXSxcbiAgICB1cGRhdGVJbXBvcnQ6IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2ltcG9ydFwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6IFwib2N0b2tpdC5yZXN0Lm1pZ3JhdGlvbnMudXBkYXRlSW1wb3J0KCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvbWlncmF0aW9ucy9zb3VyY2UtaW1wb3J0cyN1cGRhdGUtYW4taW1wb3J0XCJcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIG9pZGM6IHtcbiAgICBnZXRPaWRjQ3VzdG9tU3ViVGVtcGxhdGVGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvb2lkYy9jdXN0b21pemF0aW9uL3N1YlwiXG4gICAgXSxcbiAgICB1cGRhdGVPaWRjQ3VzdG9tU3ViVGVtcGxhdGVGb3JPcmc6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvb2lkYy9jdXN0b21pemF0aW9uL3N1YlwiXG4gICAgXVxuICB9LFxuICBvcmdzOiB7XG4gICAgYWRkU2VjdXJpdHlNYW5hZ2VyVGVhbTogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vc2VjdXJpdHktbWFuYWdlcnMvdGVhbXMve3RlYW1fc2x1Z31cIlxuICAgIF0sXG4gICAgYXNzaWduVGVhbVRvT3JnUm9sZTogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3RlYW1zL3t0ZWFtX3NsdWd9L3tyb2xlX2lkfVwiXG4gICAgXSxcbiAgICBhc3NpZ25Vc2VyVG9PcmdSb2xlOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMvdXNlcnMve3VzZXJuYW1lfS97cm9sZV9pZH1cIlxuICAgIF0sXG4gICAgYmxvY2tVc2VyOiBbXCJQVVQgL29yZ3Mve29yZ30vYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgY2FuY2VsSW52aXRhdGlvbjogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfVwiXSxcbiAgICBjaGVja0Jsb2NrZWRVc2VyOiBbXCJHRVQgL29yZ3Mve29yZ30vYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgY2hlY2tNZW1iZXJzaGlwRm9yVXNlcjogW1wiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfVwiXSxcbiAgICBjaGVja1B1YmxpY01lbWJlcnNoaXBGb3JVc2VyOiBbXCJHRVQgL29yZ3Mve29yZ30vcHVibGljX21lbWJlcnMve3VzZXJuYW1lfVwiXSxcbiAgICBjb252ZXJ0TWVtYmVyVG9PdXRzaWRlQ29sbGFib3JhdG9yOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9vdXRzaWRlX2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiXG4gICAgXSxcbiAgICBjcmVhdGVDdXN0b21Pcmdhbml6YXRpb25Sb2xlOiBbXCJQT1NUIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlc1wiXSxcbiAgICBjcmVhdGVJbnZpdGF0aW9uOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2ludml0YXRpb25zXCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlQ3VzdG9tUHJvcGVydGllczogW1wiUEFUQ0ggL29yZ3Mve29yZ30vcHJvcGVydGllcy9zY2hlbWFcIl0sXG4gICAgY3JlYXRlT3JVcGRhdGVDdXN0b21Qcm9wZXJ0aWVzVmFsdWVzRm9yUmVwb3M6IFtcbiAgICAgIFwiUEFUQ0ggL29yZ3Mve29yZ30vcHJvcGVydGllcy92YWx1ZXNcIlxuICAgIF0sXG4gICAgY3JlYXRlT3JVcGRhdGVDdXN0b21Qcm9wZXJ0eTogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vcHJvcGVydGllcy9zY2hlbWEve2N1c3RvbV9wcm9wZXJ0eV9uYW1lfVwiXG4gICAgXSxcbiAgICBjcmVhdGVXZWJob29rOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2hvb2tzXCJdLFxuICAgIGRlbGV0ZTogW1wiREVMRVRFIC9vcmdzL3tvcmd9XCJdLFxuICAgIGRlbGV0ZUN1c3RvbU9yZ2FuaXphdGlvblJvbGU6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy97cm9sZV9pZH1cIlxuICAgIF0sXG4gICAgZGVsZXRlV2ViaG9vazogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfVwiXSxcbiAgICBlbmFibGVPckRpc2FibGVTZWN1cml0eVByb2R1Y3RPbkFsbE9yZ1JlcG9zOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30ve3NlY3VyaXR5X3Byb2R1Y3R9L3tlbmFibGVtZW50fVwiXG4gICAgXSxcbiAgICBnZXQ6IFtcIkdFVCAvb3Jncy97b3JnfVwiXSxcbiAgICBnZXRBbGxDdXN0b21Qcm9wZXJ0aWVzOiBbXCJHRVQgL29yZ3Mve29yZ30vcHJvcGVydGllcy9zY2hlbWFcIl0sXG4gICAgZ2V0Q3VzdG9tUHJvcGVydHk6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvc2NoZW1hL3tjdXN0b21fcHJvcGVydHlfbmFtZX1cIlxuICAgIF0sXG4gICAgZ2V0TWVtYmVyc2hpcEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvbWVtYmVyc2hpcHMvb3Jncy97b3JnfVwiXSxcbiAgICBnZXRNZW1iZXJzaGlwRm9yVXNlcjogW1wiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnNoaXBzL3t1c2VybmFtZX1cIl0sXG4gICAgZ2V0T3JnUm9sZTogW1wiR0VUIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy97cm9sZV9pZH1cIl0sXG4gICAgZ2V0V2ViaG9vazogW1wiR0VUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfVwiXSxcbiAgICBnZXRXZWJob29rQ29uZmlnRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L2NvbmZpZ1wiXSxcbiAgICBnZXRXZWJob29rRGVsaXZlcnk6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzL3tkZWxpdmVyeV9pZH1cIlxuICAgIF0sXG4gICAgbGlzdDogW1wiR0VUIC9vcmdhbml6YXRpb25zXCJdLFxuICAgIGxpc3RBcHBJbnN0YWxsYXRpb25zOiBbXCJHRVQgL29yZ3Mve29yZ30vaW5zdGFsbGF0aW9uc1wiXSxcbiAgICBsaXN0QmxvY2tlZFVzZXJzOiBbXCJHRVQgL29yZ3Mve29yZ30vYmxvY2tzXCJdLFxuICAgIGxpc3RDdXN0b21Qcm9wZXJ0aWVzVmFsdWVzRm9yUmVwb3M6IFtcIkdFVCAvb3Jncy97b3JnfS9wcm9wZXJ0aWVzL3ZhbHVlc1wiXSxcbiAgICBsaXN0RmFpbGVkSW52aXRhdGlvbnM6IFtcIkdFVCAvb3Jncy97b3JnfS9mYWlsZWRfaW52aXRhdGlvbnNcIl0sXG4gICAgbGlzdEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvb3Jnc1wiXSxcbiAgICBsaXN0Rm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L29yZ3NcIl0sXG4gICAgbGlzdEludml0YXRpb25UZWFtczogW1wiR0VUIC9vcmdzL3tvcmd9L2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfS90ZWFtc1wiXSxcbiAgICBsaXN0TWVtYmVyczogW1wiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnNcIl0sXG4gICAgbGlzdE1lbWJlcnNoaXBzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9tZW1iZXJzaGlwcy9vcmdzXCJdLFxuICAgIGxpc3RPcmdSb2xlVGVhbXM6IFtcIkdFVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMve3JvbGVfaWR9L3RlYW1zXCJdLFxuICAgIGxpc3RPcmdSb2xlVXNlcnM6IFtcIkdFVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMve3JvbGVfaWR9L3VzZXJzXCJdLFxuICAgIGxpc3RPcmdSb2xlczogW1wiR0VUIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlc1wiXSxcbiAgICBsaXN0T3JnYW5pemF0aW9uRmluZUdyYWluZWRQZXJtaXNzaW9uczogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLWZpbmUtZ3JhaW5lZC1wZXJtaXNzaW9uc1wiXG4gICAgXSxcbiAgICBsaXN0T3V0c2lkZUNvbGxhYm9yYXRvcnM6IFtcIkdFVCAvb3Jncy97b3JnfS9vdXRzaWRlX2NvbGxhYm9yYXRvcnNcIl0sXG4gICAgbGlzdFBhdEdyYW50UmVwb3NpdG9yaWVzOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW5zL3twYXRfaWR9L3JlcG9zaXRvcmllc1wiXG4gICAgXSxcbiAgICBsaXN0UGF0R3JhbnRSZXF1ZXN0UmVwb3NpdG9yaWVzOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW4tcmVxdWVzdHMve3BhdF9yZXF1ZXN0X2lkfS9yZXBvc2l0b3JpZXNcIlxuICAgIF0sXG4gICAgbGlzdFBhdEdyYW50UmVxdWVzdHM6IFtcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW4tcmVxdWVzdHNcIl0sXG4gICAgbGlzdFBhdEdyYW50czogW1wiR0VUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbnNcIl0sXG4gICAgbGlzdFBlbmRpbmdJbnZpdGF0aW9uczogW1wiR0VUIC9vcmdzL3tvcmd9L2ludml0YXRpb25zXCJdLFxuICAgIGxpc3RQdWJsaWNNZW1iZXJzOiBbXCJHRVQgL29yZ3Mve29yZ30vcHVibGljX21lbWJlcnNcIl0sXG4gICAgbGlzdFNlY3VyaXR5TWFuYWdlclRlYW1zOiBbXCJHRVQgL29yZ3Mve29yZ30vc2VjdXJpdHktbWFuYWdlcnNcIl0sXG4gICAgbGlzdFdlYmhvb2tEZWxpdmVyaWVzOiBbXCJHRVQgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXNcIl0sXG4gICAgbGlzdFdlYmhvb2tzOiBbXCJHRVQgL29yZ3Mve29yZ30vaG9va3NcIl0sXG4gICAgcGF0Y2hDdXN0b21Pcmdhbml6YXRpb25Sb2xlOiBbXG4gICAgICBcIlBBVENIIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy97cm9sZV9pZH1cIlxuICAgIF0sXG4gICAgcGluZ1dlYmhvb2s6IFtcIlBPU1QgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L3BpbmdzXCJdLFxuICAgIHJlZGVsaXZlcldlYmhvb2tEZWxpdmVyeTogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzL3tkZWxpdmVyeV9pZH0vYXR0ZW1wdHNcIlxuICAgIF0sXG4gICAgcmVtb3ZlQ3VzdG9tUHJvcGVydHk6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvc2NoZW1hL3tjdXN0b21fcHJvcGVydHlfbmFtZX1cIlxuICAgIF0sXG4gICAgcmVtb3ZlTWVtYmVyOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vbWVtYmVycy97dXNlcm5hbWV9XCJdLFxuICAgIHJlbW92ZU1lbWJlcnNoaXBGb3JVc2VyOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiXSxcbiAgICByZW1vdmVPdXRzaWRlQ29sbGFib3JhdG9yOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9vdXRzaWRlX2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiXG4gICAgXSxcbiAgICByZW1vdmVQdWJsaWNNZW1iZXJzaGlwRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3B1YmxpY19tZW1iZXJzL3t1c2VybmFtZX1cIlxuICAgIF0sXG4gICAgcmVtb3ZlU2VjdXJpdHlNYW5hZ2VyVGVhbTogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vc2VjdXJpdHktbWFuYWdlcnMvdGVhbXMve3RlYW1fc2x1Z31cIlxuICAgIF0sXG4gICAgcmV2aWV3UGF0R3JhbnRSZXF1ZXN0OiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2VuLXJlcXVlc3RzL3twYXRfcmVxdWVzdF9pZH1cIlxuICAgIF0sXG4gICAgcmV2aWV3UGF0R3JhbnRSZXF1ZXN0c0luQnVsazogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbi1yZXF1ZXN0c1wiXG4gICAgXSxcbiAgICByZXZva2VBbGxPcmdSb2xlc1RlYW06IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy90ZWFtcy97dGVhbV9zbHVnfVwiXG4gICAgXSxcbiAgICByZXZva2VBbGxPcmdSb2xlc1VzZXI6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy91c2Vycy97dXNlcm5hbWV9XCJcbiAgICBdLFxuICAgIHJldm9rZU9yZ1JvbGVUZWFtOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMvdGVhbXMve3RlYW1fc2x1Z30ve3JvbGVfaWR9XCJcbiAgICBdLFxuICAgIHJldm9rZU9yZ1JvbGVVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMvdXNlcnMve3VzZXJuYW1lfS97cm9sZV9pZH1cIlxuICAgIF0sXG4gICAgc2V0TWVtYmVyc2hpcEZvclVzZXI6IFtcIlBVVCAvb3Jncy97b3JnfS9tZW1iZXJzaGlwcy97dXNlcm5hbWV9XCJdLFxuICAgIHNldFB1YmxpY01lbWJlcnNoaXBGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vcHVibGljX21lbWJlcnMve3VzZXJuYW1lfVwiXG4gICAgXSxcbiAgICB1bmJsb2NrVXNlcjogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2Jsb2Nrcy97dXNlcm5hbWV9XCJdLFxuICAgIHVwZGF0ZTogW1wiUEFUQ0ggL29yZ3Mve29yZ31cIl0sXG4gICAgdXBkYXRlTWVtYmVyc2hpcEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBBVENIIC91c2VyL21lbWJlcnNoaXBzL29yZ3Mve29yZ31cIlxuICAgIF0sXG4gICAgdXBkYXRlUGF0QWNjZXNzOiBbXCJQT1NUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbnMve3BhdF9pZH1cIl0sXG4gICAgdXBkYXRlUGF0QWNjZXNzZXM6IFtcIlBPU1QgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2Vuc1wiXSxcbiAgICB1cGRhdGVXZWJob29rOiBbXCJQQVRDSCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgdXBkYXRlV2ViaG9va0NvbmZpZ0Zvck9yZzogW1wiUEFUQ0ggL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L2NvbmZpZ1wiXVxuICB9LFxuICBwYWNrYWdlczoge1xuICAgIGRlbGV0ZVBhY2thZ2VGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX1cIlxuICAgIF0sXG4gICAgZGVsZXRlUGFja2FnZUZvck9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX1cIlxuICAgIF0sXG4gICAgZGVsZXRlUGFja2FnZUZvclVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9XCJcbiAgICBdLFxuICAgIGRlbGV0ZVBhY2thZ2VWZXJzaW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZVBhY2thZ2VWZXJzaW9uRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfVwiXG4gICAgXSxcbiAgICBkZWxldGVQYWNrYWdlVmVyc2lvbkZvclVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9XCJcbiAgICBdLFxuICAgIGdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvckFQYWNrYWdlT3duZWRCeUFuT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInBhY2thZ2VzXCIsIFwiZ2V0QWxsUGFja2FnZVZlcnNpb25zRm9yUGFja2FnZU93bmVkQnlPcmdcIl0gfVxuICAgIF0sXG4gICAgZ2V0QWxsUGFja2FnZVZlcnNpb25zRm9yQVBhY2thZ2VPd25lZEJ5VGhlQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgcmVuYW1lZDogW1xuICAgICAgICAgIFwicGFja2FnZXNcIixcbiAgICAgICAgICBcImdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvclBhY2thZ2VPd25lZEJ5QXV0aGVudGljYXRlZFVzZXJcIlxuICAgICAgICBdXG4gICAgICB9XG4gICAgXSxcbiAgICBnZXRBbGxQYWNrYWdlVmVyc2lvbnNGb3JQYWNrYWdlT3duZWRCeUF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiXG4gICAgXSxcbiAgICBnZXRBbGxQYWNrYWdlVmVyc2lvbnNGb3JQYWNrYWdlT3duZWRCeU9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIlxuICAgIF0sXG4gICAgZ2V0QWxsUGFja2FnZVZlcnNpb25zRm9yUGFja2FnZU93bmVkQnlVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiXG4gICAgXSxcbiAgICBnZXRQYWNrYWdlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9XCJcbiAgICBdLFxuICAgIGdldFBhY2thZ2VGb3JPcmdhbml6YXRpb246IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9XCJcbiAgICBdLFxuICAgIGdldFBhY2thZ2VGb3JVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfVwiXG4gICAgXSxcbiAgICBnZXRQYWNrYWdlVmVyc2lvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfVwiXG4gICAgXSxcbiAgICBnZXRQYWNrYWdlVmVyc2lvbkZvck9yZ2FuaXphdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH1cIlxuICAgIF0sXG4gICAgZ2V0UGFja2FnZVZlcnNpb25Gb3JVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfVwiXG4gICAgXSxcbiAgICBsaXN0RG9ja2VyTWlncmF0aW9uQ29uZmxpY3RpbmdQYWNrYWdlc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9kb2NrZXIvY29uZmxpY3RzXCJcbiAgICBdLFxuICAgIGxpc3REb2NrZXJNaWdyYXRpb25Db25mbGljdGluZ1BhY2thZ2VzRm9yT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9kb2NrZXIvY29uZmxpY3RzXCJcbiAgICBdLFxuICAgIGxpc3REb2NrZXJNaWdyYXRpb25Db25mbGljdGluZ1BhY2thZ2VzRm9yVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZG9ja2VyL2NvbmZsaWN0c1wiXG4gICAgXSxcbiAgICBsaXN0UGFja2FnZXNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3BhY2thZ2VzXCJdLFxuICAgIGxpc3RQYWNrYWdlc0Zvck9yZ2FuaXphdGlvbjogW1wiR0VUIC9vcmdzL3tvcmd9L3BhY2thZ2VzXCJdLFxuICAgIGxpc3RQYWNrYWdlc0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlc1wiXSxcbiAgICByZXN0b3JlUGFja2FnZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBPU1QgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vcmVzdG9yZXs/dG9rZW59XCJcbiAgICBdLFxuICAgIHJlc3RvcmVQYWNrYWdlRm9yT3JnOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vcmVzdG9yZXs/dG9rZW59XCJcbiAgICBdLFxuICAgIHJlc3RvcmVQYWNrYWdlRm9yVXNlcjogW1xuICAgICAgXCJQT1NUIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3Jlc3RvcmV7P3Rva2VufVwiXG4gICAgXSxcbiAgICByZXN0b3JlUGFja2FnZVZlcnNpb25Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQT1NUIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9L3Jlc3RvcmVcIlxuICAgIF0sXG4gICAgcmVzdG9yZVBhY2thZ2VWZXJzaW9uRm9yT3JnOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH0vcmVzdG9yZVwiXG4gICAgXSxcbiAgICByZXN0b3JlUGFja2FnZVZlcnNpb25Gb3JVc2VyOiBbXG4gICAgICBcIlBPU1QgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH0vcmVzdG9yZVwiXG4gICAgXVxuICB9LFxuICBwcm9qZWN0czoge1xuICAgIGFkZENvbGxhYm9yYXRvcjogW1wiUFVUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sbGFib3JhdG9ycy97dXNlcm5hbWV9XCJdLFxuICAgIGNyZWF0ZUNhcmQ6IFtcIlBPU1QgL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH0vY2FyZHNcIl0sXG4gICAgY3JlYXRlQ29sdW1uOiBbXCJQT1NUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sdW1uc1wiXSxcbiAgICBjcmVhdGVGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9wcm9qZWN0c1wiXSxcbiAgICBjcmVhdGVGb3JPcmc6IFtcIlBPU1QgL29yZ3Mve29yZ30vcHJvamVjdHNcIl0sXG4gICAgY3JlYXRlRm9yUmVwbzogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJvamVjdHNcIl0sXG4gICAgZGVsZXRlOiBbXCJERUxFVEUgL3Byb2plY3RzL3twcm9qZWN0X2lkfVwiXSxcbiAgICBkZWxldGVDYXJkOiBbXCJERUxFVEUgL3Byb2plY3RzL2NvbHVtbnMvY2FyZHMve2NhcmRfaWR9XCJdLFxuICAgIGRlbGV0ZUNvbHVtbjogW1wiREVMRVRFIC9wcm9qZWN0cy9jb2x1bW5zL3tjb2x1bW5faWR9XCJdLFxuICAgIGdldDogW1wiR0VUIC9wcm9qZWN0cy97cHJvamVjdF9pZH1cIl0sXG4gICAgZ2V0Q2FyZDogW1wiR0VUIC9wcm9qZWN0cy9jb2x1bW5zL2NhcmRzL3tjYXJkX2lkfVwiXSxcbiAgICBnZXRDb2x1bW46IFtcIkdFVCAvcHJvamVjdHMvY29sdW1ucy97Y29sdW1uX2lkfVwiXSxcbiAgICBnZXRQZXJtaXNzaW9uRm9yVXNlcjogW1xuICAgICAgXCJHRVQgL3Byb2plY3RzL3twcm9qZWN0X2lkfS9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX0vcGVybWlzc2lvblwiXG4gICAgXSxcbiAgICBsaXN0Q2FyZHM6IFtcIkdFVCAvcHJvamVjdHMvY29sdW1ucy97Y29sdW1uX2lkfS9jYXJkc1wiXSxcbiAgICBsaXN0Q29sbGFib3JhdG9yczogW1wiR0VUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sbGFib3JhdG9yc1wiXSxcbiAgICBsaXN0Q29sdW1uczogW1wiR0VUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sdW1uc1wiXSxcbiAgICBsaXN0Rm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vcHJvamVjdHNcIl0sXG4gICAgbGlzdEZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJvamVjdHNcIl0sXG4gICAgbGlzdEZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wcm9qZWN0c1wiXSxcbiAgICBtb3ZlQ2FyZDogW1wiUE9TVCAvcHJvamVjdHMvY29sdW1ucy9jYXJkcy97Y2FyZF9pZH0vbW92ZXNcIl0sXG4gICAgbW92ZUNvbHVtbjogW1wiUE9TVCAvcHJvamVjdHMvY29sdW1ucy97Y29sdW1uX2lkfS9tb3Zlc1wiXSxcbiAgICByZW1vdmVDb2xsYWJvcmF0b3I6IFtcbiAgICAgIFwiREVMRVRFIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sbGFib3JhdG9ycy97dXNlcm5hbWV9XCJcbiAgICBdLFxuICAgIHVwZGF0ZTogW1wiUEFUQ0ggL3Byb2plY3RzL3twcm9qZWN0X2lkfVwiXSxcbiAgICB1cGRhdGVDYXJkOiBbXCJQQVRDSCAvcHJvamVjdHMvY29sdW1ucy9jYXJkcy97Y2FyZF9pZH1cIl0sXG4gICAgdXBkYXRlQ29sdW1uOiBbXCJQQVRDSCAvcHJvamVjdHMvY29sdW1ucy97Y29sdW1uX2lkfVwiXVxuICB9LFxuICBwdWxsczoge1xuICAgIGNoZWNrSWZNZXJnZWQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9tZXJnZVwiXSxcbiAgICBjcmVhdGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzXCJdLFxuICAgIGNyZWF0ZVJlcGx5Rm9yUmV2aWV3Q29tbWVudDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZXBsaWVzXCJcbiAgICBdLFxuICAgIGNyZWF0ZVJldmlldzogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzXCJdLFxuICAgIGNyZWF0ZVJldmlld0NvbW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb21tZW50c1wiXG4gICAgXSxcbiAgICBkZWxldGVQZW5kaW5nUmV2aWV3OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzL3tyZXZpZXdfaWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZVJldmlld0NvbW1lbnQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy9jb21tZW50cy97Y29tbWVudF9pZH1cIlxuICAgIF0sXG4gICAgZGlzbWlzc1JldmlldzogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfS9kaXNtaXNzYWxzXCJcbiAgICBdLFxuICAgIGdldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9XCJdLFxuICAgIGdldFJldmlldzogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfVwiXG4gICAgXSxcbiAgICBnZXRSZXZpZXdDb21tZW50OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBsaXN0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzXCJdLFxuICAgIGxpc3RDb21tZW50c0ZvclJldmlldzogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfS9jb21tZW50c1wiXG4gICAgXSxcbiAgICBsaXN0Q29tbWl0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2NvbW1pdHNcIl0sXG4gICAgbGlzdEZpbGVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vZmlsZXNcIl0sXG4gICAgbGlzdFJlcXVlc3RlZFJldmlld2VyczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmVxdWVzdGVkX3Jldmlld2Vyc1wiXG4gICAgXSxcbiAgICBsaXN0UmV2aWV3Q29tbWVudHM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2NvbW1lbnRzXCJcbiAgICBdLFxuICAgIGxpc3RSZXZpZXdDb21tZW50c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHNcIl0sXG4gICAgbGlzdFJldmlld3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzXCJdLFxuICAgIG1lcmdlOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vbWVyZ2VcIl0sXG4gICAgcmVtb3ZlUmVxdWVzdGVkUmV2aWV3ZXJzOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXF1ZXN0ZWRfcmV2aWV3ZXJzXCJcbiAgICBdLFxuICAgIHJlcXVlc3RSZXZpZXdlcnM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXF1ZXN0ZWRfcmV2aWV3ZXJzXCJcbiAgICBdLFxuICAgIHN1Ym1pdFJldmlldzogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH0vZXZlbnRzXCJcbiAgICBdLFxuICAgIHVwZGF0ZTogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn1cIl0sXG4gICAgdXBkYXRlQnJhbmNoOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS91cGRhdGUtYnJhbmNoXCJcbiAgICBdLFxuICAgIHVwZGF0ZVJldmlldzogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfVwiXG4gICAgXSxcbiAgICB1cGRhdGVSZXZpZXdDb21tZW50OiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy9jb21tZW50cy97Y29tbWVudF9pZH1cIlxuICAgIF1cbiAgfSxcbiAgcmF0ZUxpbWl0OiB7IGdldDogW1wiR0VUIC9yYXRlX2xpbWl0XCJdIH0sXG4gIHJlYWN0aW9uczoge1xuICAgIGNyZWF0ZUZvckNvbW1pdENvbW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiXG4gICAgXSxcbiAgICBjcmVhdGVGb3JJc3N1ZTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vcmVhY3Rpb25zXCJcbiAgICBdLFxuICAgIGNyZWF0ZUZvcklzc3VlQ29tbWVudDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiXG4gICAgXSxcbiAgICBjcmVhdGVGb3JQdWxsUmVxdWVzdFJldmlld0NvbW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiXG4gICAgXSxcbiAgICBjcmVhdGVGb3JSZWxlYXNlOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfS9yZWFjdGlvbnNcIlxuICAgIF0sXG4gICAgY3JlYXRlRm9yVGVhbURpc2N1c3Npb25Db21tZW50SW5Pcmc6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn0vcmVhY3Rpb25zXCJcbiAgICBdLFxuICAgIGNyZWF0ZUZvclRlYW1EaXNjdXNzaW9uSW5Pcmc6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L3JlYWN0aW9uc1wiXG4gICAgXSxcbiAgICBkZWxldGVGb3JDb21taXRDb21tZW50OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZUZvcklzc3VlOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZUZvcklzc3VlQ29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zL3tyZWFjdGlvbl9pZH1cIlxuICAgIF0sXG4gICAgZGVsZXRlRm9yUHVsbFJlcXVlc3RDb21tZW50OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZUZvclJlbGVhc2U6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vcmVhY3Rpb25zL3tyZWFjdGlvbl9pZH1cIlxuICAgIF0sXG4gICAgZGVsZXRlRm9yVGVhbURpc2N1c3Npb246IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vcmVhY3Rpb25zL3tyZWFjdGlvbl9pZH1cIlxuICAgIF0sXG4gICAgZGVsZXRlRm9yVGVhbURpc2N1c3Npb25Db21tZW50OiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn0vcmVhY3Rpb25zL3tyZWFjdGlvbl9pZH1cIlxuICAgIF0sXG4gICAgbGlzdEZvckNvbW1pdENvbW1lbnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zXCJcbiAgICBdLFxuICAgIGxpc3RGb3JJc3N1ZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vcmVhY3Rpb25zXCJdLFxuICAgIGxpc3RGb3JJc3N1ZUNvbW1lbnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiXG4gICAgXSxcbiAgICBsaXN0Rm9yUHVsbFJlcXVlc3RSZXZpZXdDb21tZW50OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiXG4gICAgXSxcbiAgICBsaXN0Rm9yUmVsZWFzZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfS9yZWFjdGlvbnNcIlxuICAgIF0sXG4gICAgbGlzdEZvclRlYW1EaXNjdXNzaW9uQ29tbWVudEluT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn0vcmVhY3Rpb25zXCJcbiAgICBdLFxuICAgIGxpc3RGb3JUZWFtRGlzY3Vzc2lvbkluT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L3JlYWN0aW9uc1wiXG4gICAgXVxuICB9LFxuICByZXBvczoge1xuICAgIGFjY2VwdEludml0YXRpb246IFtcbiAgICAgIFwiUEFUQ0ggL3VzZXIvcmVwb3NpdG9yeV9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJyZXBvc1wiLCBcImFjY2VwdEludml0YXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBhY2NlcHRJbnZpdGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUEFUQ0ggL3VzZXIvcmVwb3NpdG9yeV9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIlxuICAgIF0sXG4gICAgYWRkQXBwQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL2FwcHNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwiYXBwc1wiIH1cbiAgICBdLFxuICAgIGFkZENvbGxhYm9yYXRvcjogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX1cIl0sXG4gICAgYWRkU3RhdHVzQ2hlY2tDb250ZXh0czogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3MvY29udGV4dHNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwiY29udGV4dHNcIiB9XG4gICAgXSxcbiAgICBhZGRUZWFtQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL3RlYW1zXCIsXG4gICAgICB7fSxcbiAgICAgIHsgbWFwVG9EYXRhOiBcInRlYW1zXCIgfVxuICAgIF0sXG4gICAgYWRkVXNlckFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy91c2Vyc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJ1c2Vyc1wiIH1cbiAgICBdLFxuICAgIGNhbmNlbFBhZ2VzRGVwbG95bWVudDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9kZXBsb3ltZW50cy97cGFnZXNfZGVwbG95bWVudF9pZH0vY2FuY2VsXCJcbiAgICBdLFxuICAgIGNoZWNrQXV0b21hdGVkU2VjdXJpdHlGaXhlczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9tYXRlZC1zZWN1cml0eS1maXhlc1wiXG4gICAgXSxcbiAgICBjaGVja0NvbGxhYm9yYXRvcjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX1cIl0sXG4gICAgY2hlY2tWdWxuZXJhYmlsaXR5QWxlcnRzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdnVsbmVyYWJpbGl0eS1hbGVydHNcIlxuICAgIF0sXG4gICAgY29kZW93bmVyc0Vycm9yczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlb3duZXJzL2Vycm9yc1wiXSxcbiAgICBjb21wYXJlQ29tbWl0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21wYXJlL3tiYXNlfS4uLntoZWFkfVwiXSxcbiAgICBjb21wYXJlQ29tbWl0c1dpdGhCYXNlaGVhZDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbXBhcmUve2Jhc2VoZWFkfVwiXG4gICAgXSxcbiAgICBjcmVhdGVBdXRvbGluazogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXV0b2xpbmtzXCJdLFxuICAgIGNyZWF0ZUNvbW1pdENvbW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97Y29tbWl0X3NoYX0vY29tbWVudHNcIlxuICAgIF0sXG4gICAgY3JlYXRlQ29tbWl0U2lnbmF0dXJlUHJvdGVjdGlvbjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3NpZ25hdHVyZXNcIlxuICAgIF0sXG4gICAgY3JlYXRlQ29tbWl0U3RhdHVzOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGF0dXNlcy97c2hhfVwiXSxcbiAgICBjcmVhdGVEZXBsb3lLZXk6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2tleXNcIl0sXG4gICAgY3JlYXRlRGVwbG95bWVudDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHNcIl0sXG4gICAgY3JlYXRlRGVwbG95bWVudEJyYW5jaFBvbGljeTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnQtYnJhbmNoLXBvbGljaWVzXCJcbiAgICBdLFxuICAgIGNyZWF0ZURlcGxveW1lbnRQcm90ZWN0aW9uUnVsZTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnRfcHJvdGVjdGlvbl9ydWxlc1wiXG4gICAgXSxcbiAgICBjcmVhdGVEZXBsb3ltZW50U3RhdHVzOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGxveW1lbnRzL3tkZXBsb3ltZW50X2lkfS9zdGF0dXNlc1wiXG4gICAgXSxcbiAgICBjcmVhdGVEaXNwYXRjaEV2ZW50OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kaXNwYXRjaGVzXCJdLFxuICAgIGNyZWF0ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL3JlcG9zXCJdLFxuICAgIGNyZWF0ZUZvcms6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ZvcmtzXCJdLFxuICAgIGNyZWF0ZUluT3JnOiBbXCJQT1NUIC9vcmdzL3tvcmd9L3JlcG9zXCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlQ3VzdG9tUHJvcGVydGllc1ZhbHVlczogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJvcGVydGllcy92YWx1ZXNcIlxuICAgIF0sXG4gICAgY3JlYXRlT3JVcGRhdGVFbnZpcm9ubWVudDogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX1cIlxuICAgIF0sXG4gICAgY3JlYXRlT3JVcGRhdGVGaWxlQ29udGVudHM6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29udGVudHMve3BhdGh9XCJdLFxuICAgIGNyZWF0ZU9yZ1J1bGVzZXQ6IFtcIlBPU1QgL29yZ3Mve29yZ30vcnVsZXNldHNcIl0sXG4gICAgY3JlYXRlUGFnZXNEZXBsb3ltZW50OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9kZXBsb3ltZW50c1wiXSxcbiAgICBjcmVhdGVQYWdlc1NpdGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzXCJdLFxuICAgIGNyZWF0ZVJlbGVhc2U6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzXCJdLFxuICAgIGNyZWF0ZVJlcG9SdWxlc2V0OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlc2V0c1wiXSxcbiAgICBjcmVhdGVUYWdQcm90ZWN0aW9uOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YWdzL3Byb3RlY3Rpb25cIl0sXG4gICAgY3JlYXRlVXNpbmdUZW1wbGF0ZTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97dGVtcGxhdGVfb3duZXJ9L3t0ZW1wbGF0ZV9yZXBvfS9nZW5lcmF0ZVwiXG4gICAgXSxcbiAgICBjcmVhdGVXZWJob29rOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rc1wiXSxcbiAgICBkZWNsaW5lSW52aXRhdGlvbjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvcmVwb3NpdG9yeV9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJyZXBvc1wiLCBcImRlY2xpbmVJbnZpdGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfVxuICAgIF0sXG4gICAgZGVjbGluZUludml0YXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvcmVwb3NpdG9yeV9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIlxuICAgIF0sXG4gICAgZGVsZXRlOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99XCJdLFxuICAgIGRlbGV0ZUFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zXCJcbiAgICBdLFxuICAgIGRlbGV0ZUFkbWluQnJhbmNoUHJvdGVjdGlvbjogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vZW5mb3JjZV9hZG1pbnNcIlxuICAgIF0sXG4gICAgZGVsZXRlQW5FbnZpcm9ubWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX1cIlxuICAgIF0sXG4gICAgZGVsZXRlQXV0b2xpbms6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYXV0b2xpbmtzL3thdXRvbGlua19pZH1cIl0sXG4gICAgZGVsZXRlQnJhbmNoUHJvdGVjdGlvbjogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb25cIlxuICAgIF0sXG4gICAgZGVsZXRlQ29tbWl0Q29tbWVudDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgZGVsZXRlQ29tbWl0U2lnbmF0dXJlUHJvdGVjdGlvbjogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc2lnbmF0dXJlc1wiXG4gICAgXSxcbiAgICBkZWxldGVEZXBsb3lLZXk6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30va2V5cy97a2V5X2lkfVwiXSxcbiAgICBkZWxldGVEZXBsb3ltZW50OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHMve2RlcGxveW1lbnRfaWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZURlcGxveW1lbnRCcmFuY2hQb2xpY3k6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnQtYnJhbmNoLXBvbGljaWVzL3ticmFuY2hfcG9saWN5X2lkfVwiXG4gICAgXSxcbiAgICBkZWxldGVGaWxlOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbnRlbnRzL3twYXRofVwiXSxcbiAgICBkZWxldGVJbnZpdGF0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZU9yZ1J1bGVzZXQ6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9ydWxlc2V0cy97cnVsZXNldF9pZH1cIl0sXG4gICAgZGVsZXRlUGFnZXNTaXRlOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzXCJdLFxuICAgIGRlbGV0ZVB1bGxSZXF1ZXN0UmV2aWV3UHJvdGVjdGlvbjogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfcHVsbF9yZXF1ZXN0X3Jldmlld3NcIlxuICAgIF0sXG4gICAgZGVsZXRlUmVsZWFzZTogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH1cIl0sXG4gICAgZGVsZXRlUmVsZWFzZUFzc2V0OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMvYXNzZXRzL3thc3NldF9pZH1cIlxuICAgIF0sXG4gICAgZGVsZXRlUmVwb1J1bGVzZXQ6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHMve3J1bGVzZXRfaWR9XCJdLFxuICAgIGRlbGV0ZVRhZ1Byb3RlY3Rpb246IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YWdzL3Byb3RlY3Rpb24ve3RhZ19wcm90ZWN0aW9uX2lkfVwiXG4gICAgXSxcbiAgICBkZWxldGVXZWJob29rOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfVwiXSxcbiAgICBkaXNhYmxlQXV0b21hdGVkU2VjdXJpdHlGaXhlczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9tYXRlZC1zZWN1cml0eS1maXhlc1wiXG4gICAgXSxcbiAgICBkaXNhYmxlRGVwbG95bWVudFByb3RlY3Rpb25SdWxlOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50X3Byb3RlY3Rpb25fcnVsZXMve3Byb3RlY3Rpb25fcnVsZV9pZH1cIlxuICAgIF0sXG4gICAgZGlzYWJsZVByaXZhdGVWdWxuZXJhYmlsaXR5UmVwb3J0aW5nOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcHJpdmF0ZS12dWxuZXJhYmlsaXR5LXJlcG9ydGluZ1wiXG4gICAgXSxcbiAgICBkaXNhYmxlVnVsbmVyYWJpbGl0eUFsZXJ0czogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Z1bG5lcmFiaWxpdHktYWxlcnRzXCJcbiAgICBdLFxuICAgIGRvd25sb2FkQXJjaGl2ZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3ppcGJhbGwve3JlZn1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJyZXBvc1wiLCBcImRvd25sb2FkWmlwYmFsbEFyY2hpdmVcIl0gfVxuICAgIF0sXG4gICAgZG93bmxvYWRUYXJiYWxsQXJjaGl2ZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YXJiYWxsL3tyZWZ9XCJdLFxuICAgIGRvd25sb2FkWmlwYmFsbEFyY2hpdmU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vemlwYmFsbC97cmVmfVwiXSxcbiAgICBlbmFibGVBdXRvbWF0ZWRTZWN1cml0eUZpeGVzOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXV0b21hdGVkLXNlY3VyaXR5LWZpeGVzXCJcbiAgICBdLFxuICAgIGVuYWJsZVByaXZhdGVWdWxuZXJhYmlsaXR5UmVwb3J0aW5nOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJpdmF0ZS12dWxuZXJhYmlsaXR5LXJlcG9ydGluZ1wiXG4gICAgXSxcbiAgICBlbmFibGVWdWxuZXJhYmlsaXR5QWxlcnRzOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vdnVsbmVyYWJpbGl0eS1hbGVydHNcIlxuICAgIF0sXG4gICAgZ2VuZXJhdGVSZWxlYXNlTm90ZXM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMvZ2VuZXJhdGUtbm90ZXNcIlxuICAgIF0sXG4gICAgZ2V0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99XCJdLFxuICAgIGdldEFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zXCJcbiAgICBdLFxuICAgIGdldEFkbWluQnJhbmNoUHJvdGVjdGlvbjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vZW5mb3JjZV9hZG1pbnNcIlxuICAgIF0sXG4gICAgZ2V0QWxsRGVwbG95bWVudFByb3RlY3Rpb25SdWxlczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudF9wcm90ZWN0aW9uX3J1bGVzXCJcbiAgICBdLFxuICAgIGdldEFsbEVudmlyb25tZW50czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHNcIl0sXG4gICAgZ2V0QWxsU3RhdHVzQ2hlY2tDb250ZXh0czogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrcy9jb250ZXh0c1wiXG4gICAgXSxcbiAgICBnZXRBbGxUb3BpY3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdG9waWNzXCJdLFxuICAgIGdldEFwcHNXaXRoQWNjZXNzVG9Qcm90ZWN0ZWRCcmFuY2g6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy9hcHBzXCJcbiAgICBdLFxuICAgIGdldEF1dG9saW5rOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9saW5rcy97YXV0b2xpbmtfaWR9XCJdLFxuICAgIGdldEJyYW5jaDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofVwiXSxcbiAgICBnZXRCcmFuY2hQcm90ZWN0aW9uOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvblwiXG4gICAgXSxcbiAgICBnZXRCcmFuY2hSdWxlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlcy9icmFuY2hlcy97YnJhbmNofVwiXSxcbiAgICBnZXRDbG9uZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdHJhZmZpYy9jbG9uZXNcIl0sXG4gICAgZ2V0Q29kZUZyZXF1ZW5jeVN0YXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXRzL2NvZGVfZnJlcXVlbmN5XCJdLFxuICAgIGdldENvbGxhYm9yYXRvclBlcm1pc3Npb25MZXZlbDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfS9wZXJtaXNzaW9uXCJcbiAgICBdLFxuICAgIGdldENvbWJpbmVkU3RhdHVzRm9yUmVmOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vc3RhdHVzXCJdLFxuICAgIGdldENvbW1pdDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9XCJdLFxuICAgIGdldENvbW1pdEFjdGl2aXR5U3RhdHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3RhdHMvY29tbWl0X2FjdGl2aXR5XCJdLFxuICAgIGdldENvbW1pdENvbW1lbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIGdldENvbW1pdFNpZ25hdHVyZVByb3RlY3Rpb246IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3NpZ25hdHVyZXNcIlxuICAgIF0sXG4gICAgZ2V0Q29tbXVuaXR5UHJvZmlsZU1ldHJpY3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbXVuaXR5L3Byb2ZpbGVcIl0sXG4gICAgZ2V0Q29udGVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb250ZW50cy97cGF0aH1cIl0sXG4gICAgZ2V0Q29udHJpYnV0b3JzU3RhdHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3RhdHMvY29udHJpYnV0b3JzXCJdLFxuICAgIGdldEN1c3RvbURlcGxveW1lbnRQcm90ZWN0aW9uUnVsZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudF9wcm90ZWN0aW9uX3J1bGVzL3twcm90ZWN0aW9uX3J1bGVfaWR9XCJcbiAgICBdLFxuICAgIGdldEN1c3RvbVByb3BlcnRpZXNWYWx1ZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJvcGVydGllcy92YWx1ZXNcIl0sXG4gICAgZ2V0RGVwbG95S2V5OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2tleXMve2tleV9pZH1cIl0sXG4gICAgZ2V0RGVwbG95bWVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50cy97ZGVwbG95bWVudF9pZH1cIl0sXG4gICAgZ2V0RGVwbG95bWVudEJyYW5jaFBvbGljeTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudC1icmFuY2gtcG9saWNpZXMve2JyYW5jaF9wb2xpY3lfaWR9XCJcbiAgICBdLFxuICAgIGdldERlcGxveW1lbnRTdGF0dXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50cy97ZGVwbG95bWVudF9pZH0vc3RhdHVzZXMve3N0YXR1c19pZH1cIlxuICAgIF0sXG4gICAgZ2V0RW52aXJvbm1lbnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9XCJcbiAgICBdLFxuICAgIGdldExhdGVzdFBhZ2VzQnVpbGQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXMvYnVpbGRzL2xhdGVzdFwiXSxcbiAgICBnZXRMYXRlc3RSZWxlYXNlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL2xhdGVzdFwiXSxcbiAgICBnZXRPcmdSdWxlU3VpdGU6IFtcIkdFVCAvb3Jncy97b3JnfS9ydWxlc2V0cy9ydWxlLXN1aXRlcy97cnVsZV9zdWl0ZV9pZH1cIl0sXG4gICAgZ2V0T3JnUnVsZVN1aXRlczogW1wiR0VUIC9vcmdzL3tvcmd9L3J1bGVzZXRzL3J1bGUtc3VpdGVzXCJdLFxuICAgIGdldE9yZ1J1bGVzZXQ6IFtcIkdFVCAvb3Jncy97b3JnfS9ydWxlc2V0cy97cnVsZXNldF9pZH1cIl0sXG4gICAgZ2V0T3JnUnVsZXNldHM6IFtcIkdFVCAvb3Jncy97b3JnfS9ydWxlc2V0c1wiXSxcbiAgICBnZXRQYWdlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlc1wiXSxcbiAgICBnZXRQYWdlc0J1aWxkOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2J1aWxkcy97YnVpbGRfaWR9XCJdLFxuICAgIGdldFBhZ2VzRGVwbG95bWVudDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2RlcGxveW1lbnRzL3twYWdlc19kZXBsb3ltZW50X2lkfVwiXG4gICAgXSxcbiAgICBnZXRQYWdlc0hlYWx0aENoZWNrOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2hlYWx0aFwiXSxcbiAgICBnZXRQYXJ0aWNpcGF0aW9uU3RhdHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3RhdHMvcGFydGljaXBhdGlvblwiXSxcbiAgICBnZXRQdWxsUmVxdWVzdFJldmlld1Byb3RlY3Rpb246IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3B1bGxfcmVxdWVzdF9yZXZpZXdzXCJcbiAgICBdLFxuICAgIGdldFB1bmNoQ2FyZFN0YXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXRzL3B1bmNoX2NhcmRcIl0sXG4gICAgZ2V0UmVhZG1lOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlYWRtZVwiXSxcbiAgICBnZXRSZWFkbWVJbkRpcmVjdG9yeTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWFkbWUve2Rpcn1cIl0sXG4gICAgZ2V0UmVsZWFzZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH1cIl0sXG4gICAgZ2V0UmVsZWFzZUFzc2V0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL2Fzc2V0cy97YXNzZXRfaWR9XCJdLFxuICAgIGdldFJlbGVhc2VCeVRhZzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy90YWdzL3t0YWd9XCJdLFxuICAgIGdldFJlcG9SdWxlU3VpdGU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlc2V0cy9ydWxlLXN1aXRlcy97cnVsZV9zdWl0ZV9pZH1cIlxuICAgIF0sXG4gICAgZ2V0UmVwb1J1bGVTdWl0ZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHMvcnVsZS1zdWl0ZXNcIl0sXG4gICAgZ2V0UmVwb1J1bGVzZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHMve3J1bGVzZXRfaWR9XCJdLFxuICAgIGdldFJlcG9SdWxlc2V0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlc2V0c1wiXSxcbiAgICBnZXRTdGF0dXNDaGVja3NQcm90ZWN0aW9uOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zdGF0dXNfY2hlY2tzXCJcbiAgICBdLFxuICAgIGdldFRlYW1zV2l0aEFjY2Vzc1RvUHJvdGVjdGVkQnJhbmNoOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdGVhbXNcIlxuICAgIF0sXG4gICAgZ2V0VG9wUGF0aHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdHJhZmZpYy9wb3B1bGFyL3BhdGhzXCJdLFxuICAgIGdldFRvcFJlZmVycmVyczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90cmFmZmljL3BvcHVsYXIvcmVmZXJyZXJzXCJdLFxuICAgIGdldFVzZXJzV2l0aEFjY2Vzc1RvUHJvdGVjdGVkQnJhbmNoOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdXNlcnNcIlxuICAgIF0sXG4gICAgZ2V0Vmlld3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdHJhZmZpYy92aWV3c1wiXSxcbiAgICBnZXRXZWJob29rOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfVwiXSxcbiAgICBnZXRXZWJob29rQ29uZmlnRm9yUmVwbzogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS9jb25maWdcIlxuICAgIF0sXG4gICAgZ2V0V2ViaG9va0RlbGl2ZXJ5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXMve2RlbGl2ZXJ5X2lkfVwiXG4gICAgXSxcbiAgICBsaXN0QWN0aXZpdGllczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpdml0eVwiXSxcbiAgICBsaXN0QXV0b2xpbmtzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9saW5rc1wiXSxcbiAgICBsaXN0QnJhbmNoZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXNcIl0sXG4gICAgbGlzdEJyYW5jaGVzRm9ySGVhZENvbW1pdDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve2NvbW1pdF9zaGF9L2JyYW5jaGVzLXdoZXJlLWhlYWRcIlxuICAgIF0sXG4gICAgbGlzdENvbGxhYm9yYXRvcnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29sbGFib3JhdG9yc1wiXSxcbiAgICBsaXN0Q29tbWVudHNGb3JDb21taXQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tjb21taXRfc2hhfS9jb21tZW50c1wiXG4gICAgXSxcbiAgICBsaXN0Q29tbWl0Q29tbWVudHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzXCJdLFxuICAgIGxpc3RDb21taXRTdGF0dXNlc0ZvclJlZjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vc3RhdHVzZXNcIlxuICAgIF0sXG4gICAgbGlzdENvbW1pdHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0c1wiXSxcbiAgICBsaXN0Q29udHJpYnV0b3JzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbnRyaWJ1dG9yc1wiXSxcbiAgICBsaXN0Q3VzdG9tRGVwbG95bWVudFJ1bGVJbnRlZ3JhdGlvbnM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnRfcHJvdGVjdGlvbl9ydWxlcy9hcHBzXCJcbiAgICBdLFxuICAgIGxpc3REZXBsb3lLZXlzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2tleXNcIl0sXG4gICAgbGlzdERlcGxveW1lbnRCcmFuY2hQb2xpY2llczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudC1icmFuY2gtcG9saWNpZXNcIlxuICAgIF0sXG4gICAgbGlzdERlcGxveW1lbnRTdGF0dXNlczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGxveW1lbnRzL3tkZXBsb3ltZW50X2lkfS9zdGF0dXNlc1wiXG4gICAgXSxcbiAgICBsaXN0RGVwbG95bWVudHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHNcIl0sXG4gICAgbGlzdEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvcmVwb3NcIl0sXG4gICAgbGlzdEZvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3JlcG9zXCJdLFxuICAgIGxpc3RGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcmVwb3NcIl0sXG4gICAgbGlzdEZvcmtzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ZvcmtzXCJdLFxuICAgIGxpc3RJbnZpdGF0aW9uczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbnZpdGF0aW9uc1wiXSxcbiAgICBsaXN0SW52aXRhdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3JlcG9zaXRvcnlfaW52aXRhdGlvbnNcIl0sXG4gICAgbGlzdExhbmd1YWdlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sYW5ndWFnZXNcIl0sXG4gICAgbGlzdFBhZ2VzQnVpbGRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2J1aWxkc1wiXSxcbiAgICBsaXN0UHVibGljOiBbXCJHRVQgL3JlcG9zaXRvcmllc1wiXSxcbiAgICBsaXN0UHVsbFJlcXVlc3RzQXNzb2NpYXRlZFdpdGhDb21taXQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tjb21taXRfc2hhfS9wdWxsc1wiXG4gICAgXSxcbiAgICBsaXN0UmVsZWFzZUFzc2V0czogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfS9hc3NldHNcIlxuICAgIF0sXG4gICAgbGlzdFJlbGVhc2VzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzXCJdLFxuICAgIGxpc3RUYWdQcm90ZWN0aW9uOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RhZ3MvcHJvdGVjdGlvblwiXSxcbiAgICBsaXN0VGFnczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YWdzXCJdLFxuICAgIGxpc3RUZWFtczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90ZWFtc1wiXSxcbiAgICBsaXN0V2ViaG9va0RlbGl2ZXJpZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllc1wiXG4gICAgXSxcbiAgICBsaXN0V2ViaG9va3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3NcIl0sXG4gICAgbWVyZ2U6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L21lcmdlc1wiXSxcbiAgICBtZXJnZVVwc3RyZWFtOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9tZXJnZS11cHN0cmVhbVwiXSxcbiAgICBwaW5nV2ViaG9vazogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L3BpbmdzXCJdLFxuICAgIHJlZGVsaXZlcldlYmhvb2tEZWxpdmVyeTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9L2F0dGVtcHRzXCJcbiAgICBdLFxuICAgIHJlbW92ZUFwcEFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL2FwcHNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwiYXBwc1wiIH1cbiAgICBdLFxuICAgIHJlbW92ZUNvbGxhYm9yYXRvcjogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiXG4gICAgXSxcbiAgICByZW1vdmVTdGF0dXNDaGVja0NvbnRleHRzOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zdGF0dXNfY2hlY2tzL2NvbnRleHRzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgbWFwVG9EYXRhOiBcImNvbnRleHRzXCIgfVxuICAgIF0sXG4gICAgcmVtb3ZlU3RhdHVzQ2hlY2tQcm90ZWN0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zdGF0dXNfY2hlY2tzXCJcbiAgICBdLFxuICAgIHJlbW92ZVRlYW1BY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy90ZWFtc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJ0ZWFtc1wiIH1cbiAgICBdLFxuICAgIHJlbW92ZVVzZXJBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy91c2Vyc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJ1c2Vyc1wiIH1cbiAgICBdLFxuICAgIHJlbmFtZUJyYW5jaDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcmVuYW1lXCJdLFxuICAgIHJlcGxhY2VBbGxUb3BpY3M6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vdG9waWNzXCJdLFxuICAgIHJlcXVlc3RQYWdlc0J1aWxkOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9idWlsZHNcIl0sXG4gICAgc2V0QWRtaW5CcmFuY2hQcm90ZWN0aW9uOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vZW5mb3JjZV9hZG1pbnNcIlxuICAgIF0sXG4gICAgc2V0QXBwQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvYXBwc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJhcHBzXCIgfVxuICAgIF0sXG4gICAgc2V0U3RhdHVzQ2hlY2tDb250ZXh0czogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrcy9jb250ZXh0c1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJjb250ZXh0c1wiIH1cbiAgICBdLFxuICAgIHNldFRlYW1BY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy90ZWFtc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJ0ZWFtc1wiIH1cbiAgICBdLFxuICAgIHNldFVzZXJBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy91c2Vyc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJ1c2Vyc1wiIH1cbiAgICBdLFxuICAgIHRlc3RQdXNoV2ViaG9vazogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L3Rlc3RzXCJdLFxuICAgIHRyYW5zZmVyOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90cmFuc2ZlclwiXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfVwiXSxcbiAgICB1cGRhdGVCcmFuY2hQcm90ZWN0aW9uOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvblwiXG4gICAgXSxcbiAgICB1cGRhdGVDb21taXRDb21tZW50OiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIHVwZGF0ZURlcGxveW1lbnRCcmFuY2hQb2xpY3k6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnQtYnJhbmNoLXBvbGljaWVzL3ticmFuY2hfcG9saWN5X2lkfVwiXG4gICAgXSxcbiAgICB1cGRhdGVJbmZvcm1hdGlvbkFib3V0UGFnZXNTaXRlOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzXCJdLFxuICAgIHVwZGF0ZUludml0YXRpb246IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfVwiXG4gICAgXSxcbiAgICB1cGRhdGVPcmdSdWxlc2V0OiBbXCJQVVQgL29yZ3Mve29yZ30vcnVsZXNldHMve3J1bGVzZXRfaWR9XCJdLFxuICAgIHVwZGF0ZVB1bGxSZXF1ZXN0UmV2aWV3UHJvdGVjdGlvbjogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9wdWxsX3JlcXVlc3RfcmV2aWV3c1wiXG4gICAgXSxcbiAgICB1cGRhdGVSZWxlYXNlOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9XCJdLFxuICAgIHVwZGF0ZVJlbGVhc2VBc3NldDogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMvYXNzZXRzL3thc3NldF9pZH1cIlxuICAgIF0sXG4gICAgdXBkYXRlUmVwb1J1bGVzZXQ6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHMve3J1bGVzZXRfaWR9XCJdLFxuICAgIHVwZGF0ZVN0YXR1c0NoZWNrUG90ZWN0aW9uOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3NcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJyZXBvc1wiLCBcInVwZGF0ZVN0YXR1c0NoZWNrUHJvdGVjdGlvblwiXSB9XG4gICAgXSxcbiAgICB1cGRhdGVTdGF0dXNDaGVja1Byb3RlY3Rpb246IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrc1wiXG4gICAgXSxcbiAgICB1cGRhdGVXZWJob29rOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9XCJdLFxuICAgIHVwZGF0ZVdlYmhvb2tDb25maWdGb3JSZXBvOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vY29uZmlnXCJcbiAgICBdLFxuICAgIHVwbG9hZFJlbGVhc2VBc3NldDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vYXNzZXRzez9uYW1lLGxhYmVsfVwiLFxuICAgICAgeyBiYXNlVXJsOiBcImh0dHBzOi8vdXBsb2Fkcy5naXRodWIuY29tXCIgfVxuICAgIF1cbiAgfSxcbiAgc2VhcmNoOiB7XG4gICAgY29kZTogW1wiR0VUIC9zZWFyY2gvY29kZVwiXSxcbiAgICBjb21taXRzOiBbXCJHRVQgL3NlYXJjaC9jb21taXRzXCJdLFxuICAgIGlzc3Vlc0FuZFB1bGxSZXF1ZXN0czogW1wiR0VUIC9zZWFyY2gvaXNzdWVzXCJdLFxuICAgIGxhYmVsczogW1wiR0VUIC9zZWFyY2gvbGFiZWxzXCJdLFxuICAgIHJlcG9zOiBbXCJHRVQgL3NlYXJjaC9yZXBvc2l0b3JpZXNcIl0sXG4gICAgdG9waWNzOiBbXCJHRVQgL3NlYXJjaC90b3BpY3NcIl0sXG4gICAgdXNlcnM6IFtcIkdFVCAvc2VhcmNoL3VzZXJzXCJdXG4gIH0sXG4gIHNlY3JldFNjYW5uaW5nOiB7XG4gICAgZ2V0QWxlcnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9XCJcbiAgICBdLFxuICAgIGxpc3RBbGVydHNGb3JFbnRlcnByaXNlOiBbXG4gICAgICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L3NlY3JldC1zY2FubmluZy9hbGVydHNcIlxuICAgIF0sXG4gICAgbGlzdEFsZXJ0c0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3NlY3JldC1zY2FubmluZy9hbGVydHNcIl0sXG4gICAgbGlzdEFsZXJ0c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0c1wiXSxcbiAgICBsaXN0TG9jYXRpb25zRm9yQWxlcnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9L2xvY2F0aW9uc1wiXG4gICAgXSxcbiAgICB1cGRhdGVBbGVydDogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfVwiXG4gICAgXVxuICB9LFxuICBzZWN1cml0eUFkdmlzb3JpZXM6IHtcbiAgICBjcmVhdGVGb3JrOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3VyaXR5LWFkdmlzb3JpZXMve2doc2FfaWR9L2ZvcmtzXCJcbiAgICBdLFxuICAgIGNyZWF0ZVByaXZhdGVWdWxuZXJhYmlsaXR5UmVwb3J0OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3VyaXR5LWFkdmlzb3JpZXMvcmVwb3J0c1wiXG4gICAgXSxcbiAgICBjcmVhdGVSZXBvc2l0b3J5QWR2aXNvcnk6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjdXJpdHktYWR2aXNvcmllc1wiXG4gICAgXSxcbiAgICBjcmVhdGVSZXBvc2l0b3J5QWR2aXNvcnlDdmVSZXF1ZXN0OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3VyaXR5LWFkdmlzb3JpZXMve2doc2FfaWR9L2N2ZVwiXG4gICAgXSxcbiAgICBnZXRHbG9iYWxBZHZpc29yeTogW1wiR0VUIC9hZHZpc29yaWVzL3tnaHNhX2lkfVwiXSxcbiAgICBnZXRSZXBvc2l0b3J5QWR2aXNvcnk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWN1cml0eS1hZHZpc29yaWVzL3tnaHNhX2lkfVwiXG4gICAgXSxcbiAgICBsaXN0R2xvYmFsQWR2aXNvcmllczogW1wiR0VUIC9hZHZpc29yaWVzXCJdLFxuICAgIGxpc3RPcmdSZXBvc2l0b3J5QWR2aXNvcmllczogW1wiR0VUIC9vcmdzL3tvcmd9L3NlY3VyaXR5LWFkdmlzb3JpZXNcIl0sXG4gICAgbGlzdFJlcG9zaXRvcnlBZHZpc29yaWVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3VyaXR5LWFkdmlzb3JpZXNcIl0sXG4gICAgdXBkYXRlUmVwb3NpdG9yeUFkdmlzb3J5OiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWN1cml0eS1hZHZpc29yaWVzL3tnaHNhX2lkfVwiXG4gICAgXVxuICB9LFxuICB0ZWFtczoge1xuICAgIGFkZE9yVXBkYXRlTWVtYmVyc2hpcEZvclVzZXJJbk9yZzogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiXG4gICAgXSxcbiAgICBhZGRPclVwZGF0ZVByb2plY3RQZXJtaXNzaW9uc0luT3JnOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9wcm9qZWN0cy97cHJvamVjdF9pZH1cIlxuICAgIF0sXG4gICAgYWRkT3JVcGRhdGVSZXBvUGVybWlzc2lvbnNJbk9yZzogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcmVwb3Mve293bmVyfS97cmVwb31cIlxuICAgIF0sXG4gICAgY2hlY2tQZXJtaXNzaW9uc0ZvclByb2plY3RJbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcHJvamVjdHMve3Byb2plY3RfaWR9XCJcbiAgICBdLFxuICAgIGNoZWNrUGVybWlzc2lvbnNGb3JSZXBvSW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3JlcG9zL3tvd25lcn0ve3JlcG99XCJcbiAgICBdLFxuICAgIGNyZWF0ZTogW1wiUE9TVCAvb3Jncy97b3JnfS90ZWFtc1wiXSxcbiAgICBjcmVhdGVEaXNjdXNzaW9uQ29tbWVudEluT3JnOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50c1wiXG4gICAgXSxcbiAgICBjcmVhdGVEaXNjdXNzaW9uSW5Pcmc6IFtcIlBPU1QgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnNcIl0sXG4gICAgZGVsZXRlRGlzY3Vzc2lvbkNvbW1lbnRJbk9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9XCJcbiAgICBdLFxuICAgIGRlbGV0ZURpc2N1c3Npb25Jbk9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfVwiXG4gICAgXSxcbiAgICBkZWxldGVJbk9yZzogW1wiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9XCJdLFxuICAgIGdldEJ5TmFtZTogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9XCJdLFxuICAgIGdldERpc2N1c3Npb25Db21tZW50SW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfbnVtYmVyfVwiXG4gICAgXSxcbiAgICBnZXREaXNjdXNzaW9uSW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn1cIlxuICAgIF0sXG4gICAgZ2V0TWVtYmVyc2hpcEZvclVzZXJJbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiXG4gICAgXSxcbiAgICBsaXN0OiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXNcIl0sXG4gICAgbGlzdENoaWxkSW5Pcmc6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS90ZWFtc1wiXSxcbiAgICBsaXN0RGlzY3Vzc2lvbkNvbW1lbnRzSW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHNcIlxuICAgIF0sXG4gICAgbGlzdERpc2N1c3Npb25zSW5Pcmc6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9uc1wiXSxcbiAgICBsaXN0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci90ZWFtc1wiXSxcbiAgICBsaXN0TWVtYmVyc0luT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vbWVtYmVyc1wiXSxcbiAgICBsaXN0UGVuZGluZ0ludml0YXRpb25zSW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2ludml0YXRpb25zXCJcbiAgICBdLFxuICAgIGxpc3RQcm9qZWN0c0luT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcHJvamVjdHNcIl0sXG4gICAgbGlzdFJlcG9zSW5Pcmc6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9yZXBvc1wiXSxcbiAgICByZW1vdmVNZW1iZXJzaGlwRm9yVXNlckluT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9tZW1iZXJzaGlwcy97dXNlcm5hbWV9XCJcbiAgICBdLFxuICAgIHJlbW92ZVByb2plY3RJbk9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcHJvamVjdHMve3Byb2plY3RfaWR9XCJcbiAgICBdLFxuICAgIHJlbW92ZVJlcG9Jbk9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcmVwb3Mve293bmVyfS97cmVwb31cIlxuICAgIF0sXG4gICAgdXBkYXRlRGlzY3Vzc2lvbkNvbW1lbnRJbk9yZzogW1xuICAgICAgXCJQQVRDSCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn1cIlxuICAgIF0sXG4gICAgdXBkYXRlRGlzY3Vzc2lvbkluT3JnOiBbXG4gICAgICBcIlBBVENIIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn1cIlxuICAgIF0sXG4gICAgdXBkYXRlSW5Pcmc6IFtcIlBBVENIIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9XCJdXG4gIH0sXG4gIHVzZXJzOiB7XG4gICAgYWRkRW1haWxGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIlBPU1QgL3VzZXIvZW1haWxzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJhZGRFbWFpbEZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIGFkZEVtYWlsRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvZW1haWxzXCJdLFxuICAgIGFkZFNvY2lhbEFjY291bnRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9zb2NpYWxfYWNjb3VudHNcIl0sXG4gICAgYmxvY2s6IFtcIlBVVCAvdXNlci9ibG9ja3Mve3VzZXJuYW1lfVwiXSxcbiAgICBjaGVja0Jsb2NrZWQ6IFtcIkdFVCAvdXNlci9ibG9ja3Mve3VzZXJuYW1lfVwiXSxcbiAgICBjaGVja0ZvbGxvd2luZ0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9mb2xsb3dpbmcve3RhcmdldF91c2VyfVwiXSxcbiAgICBjaGVja1BlcnNvbklzRm9sbG93ZWRCeUF1dGhlbnRpY2F0ZWQ6IFtcIkdFVCAvdXNlci9mb2xsb3dpbmcve3VzZXJuYW1lfVwiXSxcbiAgICBjcmVhdGVHcGdLZXlGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIlBPU1QgL3VzZXIvZ3BnX2tleXNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImNyZWF0ZUdwZ0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIGNyZWF0ZUdwZ0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL2dwZ19rZXlzXCJdLFxuICAgIGNyZWF0ZVB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiUE9TVCAvdXNlci9rZXlzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJjcmVhdGVQdWJsaWNTc2hLZXlGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBjcmVhdGVQdWJsaWNTc2hLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9rZXlzXCJdLFxuICAgIGNyZWF0ZVNzaFNpZ25pbmdLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9zc2hfc2lnbmluZ19rZXlzXCJdLFxuICAgIGRlbGV0ZUVtYWlsRm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvZW1haWxzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJkZWxldGVFbWFpbEZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIGRlbGV0ZUVtYWlsRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9lbWFpbHNcIl0sXG4gICAgZGVsZXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvZ3BnX2tleXMve2dwZ19rZXlfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJkZWxldGVHcGdLZXlGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBkZWxldGVHcGdLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiREVMRVRFIC91c2VyL2dwZ19rZXlzL3tncGdfa2V5X2lkfVwiXSxcbiAgICBkZWxldGVQdWJsaWNTc2hLZXlGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9rZXlzL3trZXlfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJkZWxldGVQdWJsaWNTc2hLZXlGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBkZWxldGVQdWJsaWNTc2hLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiREVMRVRFIC91c2VyL2tleXMve2tleV9pZH1cIl0sXG4gICAgZGVsZXRlU29jaWFsQWNjb3VudEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvc29jaWFsX2FjY291bnRzXCJdLFxuICAgIGRlbGV0ZVNzaFNpZ25pbmdLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvc3NoX3NpZ25pbmdfa2V5cy97c3NoX3NpZ25pbmdfa2V5X2lkfVwiXG4gICAgXSxcbiAgICBmb2xsb3c6IFtcIlBVVCAvdXNlci9mb2xsb3dpbmcve3VzZXJuYW1lfVwiXSxcbiAgICBnZXRBdXRoZW50aWNhdGVkOiBbXCJHRVQgL3VzZXJcIl0sXG4gICAgZ2V0QnlVc2VybmFtZTogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9XCJdLFxuICAgIGdldENvbnRleHRGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vaG92ZXJjYXJkXCJdLFxuICAgIGdldEdwZ0tleUZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL2dwZ19rZXlzL3tncGdfa2V5X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiZ2V0R3BnS2V5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfVxuICAgIF0sXG4gICAgZ2V0R3BnS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9ncGdfa2V5cy97Z3BnX2tleV9pZH1cIl0sXG4gICAgZ2V0UHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJHRVQgL3VzZXIva2V5cy97a2V5X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiZ2V0UHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfVxuICAgIF0sXG4gICAgZ2V0UHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9rZXlzL3trZXlfaWR9XCJdLFxuICAgIGdldFNzaFNpZ25pbmdLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvc3NoX3NpZ25pbmdfa2V5cy97c3NoX3NpZ25pbmdfa2V5X2lkfVwiXG4gICAgXSxcbiAgICBsaXN0OiBbXCJHRVQgL3VzZXJzXCJdLFxuICAgIGxpc3RCbG9ja2VkQnlBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIkdFVCAvdXNlci9ibG9ja3NcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImxpc3RCbG9ja2VkQnlBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBsaXN0QmxvY2tlZEJ5QXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9ibG9ja3NcIl0sXG4gICAgbGlzdEVtYWlsc0ZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL2VtYWlsc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwibGlzdEVtYWlsc0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIGxpc3RFbWFpbHNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2VtYWlsc1wiXSxcbiAgICBsaXN0Rm9sbG93ZWRCeUF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL2ZvbGxvd2luZ1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwibGlzdEZvbGxvd2VkQnlBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBsaXN0Rm9sbG93ZWRCeUF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvZm9sbG93aW5nXCJdLFxuICAgIGxpc3RGb2xsb3dlcnNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2ZvbGxvd2Vyc1wiXSxcbiAgICBsaXN0Rm9sbG93ZXJzRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2ZvbGxvd2Vyc1wiXSxcbiAgICBsaXN0Rm9sbG93aW5nRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2ZvbGxvd2luZ1wiXSxcbiAgICBsaXN0R3BnS2V5c0ZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL2dwZ19rZXlzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJsaXN0R3BnS2V5c0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIGxpc3RHcGdLZXlzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9ncGdfa2V5c1wiXSxcbiAgICBsaXN0R3BnS2V5c0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ncGdfa2V5c1wiXSxcbiAgICBsaXN0UHVibGljRW1haWxzRm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJHRVQgL3VzZXIvcHVibGljX2VtYWlsc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwibGlzdFB1YmxpY0VtYWlsc0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIGxpc3RQdWJsaWNFbWFpbHNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3B1YmxpY19lbWFpbHNcIl0sXG4gICAgbGlzdFB1YmxpY0tleXNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0va2V5c1wiXSxcbiAgICBsaXN0UHVibGljU3NoS2V5c0ZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL2tleXNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImxpc3RQdWJsaWNTc2hLZXlzRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfVxuICAgIF0sXG4gICAgbGlzdFB1YmxpY1NzaEtleXNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2tleXNcIl0sXG4gICAgbGlzdFNvY2lhbEFjY291bnRzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9zb2NpYWxfYWNjb3VudHNcIl0sXG4gICAgbGlzdFNvY2lhbEFjY291bnRzRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NvY2lhbF9hY2NvdW50c1wiXSxcbiAgICBsaXN0U3NoU2lnbmluZ0tleXNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3NzaF9zaWduaW5nX2tleXNcIl0sXG4gICAgbGlzdFNzaFNpZ25pbmdLZXlzRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NzaF9zaWduaW5nX2tleXNcIl0sXG4gICAgc2V0UHJpbWFyeUVtYWlsVmlzaWJpbGl0eUZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiUEFUQ0ggL3VzZXIvZW1haWwvdmlzaWJpbGl0eVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwic2V0UHJpbWFyeUVtYWlsVmlzaWJpbGl0eUZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIHNldFByaW1hcnlFbWFpbFZpc2liaWxpdHlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQQVRDSCAvdXNlci9lbWFpbC92aXNpYmlsaXR5XCJcbiAgICBdLFxuICAgIHVuYmxvY2s6IFtcIkRFTEVURSAvdXNlci9ibG9ja3Mve3VzZXJuYW1lfVwiXSxcbiAgICB1bmZvbGxvdzogW1wiREVMRVRFIC91c2VyL2ZvbGxvd2luZy97dXNlcm5hbWV9XCJdLFxuICAgIHVwZGF0ZUF1dGhlbnRpY2F0ZWQ6IFtcIlBBVENIIC91c2VyXCJdXG4gIH1cbn07XG52YXIgZW5kcG9pbnRzX2RlZmF1bHQgPSBFbmRwb2ludHM7XG5cbi8vIHBrZy9kaXN0LXNyYy9lbmRwb2ludHMtdG8tbWV0aG9kcy5qc1xudmFyIGVuZHBvaW50TWV0aG9kc01hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5mb3IgKGNvbnN0IFtzY29wZSwgZW5kcG9pbnRzXSBvZiBPYmplY3QuZW50cmllcyhlbmRwb2ludHNfZGVmYXVsdCkpIHtcbiAgZm9yIChjb25zdCBbbWV0aG9kTmFtZSwgZW5kcG9pbnRdIG9mIE9iamVjdC5lbnRyaWVzKGVuZHBvaW50cykpIHtcbiAgICBjb25zdCBbcm91dGUsIGRlZmF1bHRzLCBkZWNvcmF0aW9uc10gPSBlbmRwb2ludDtcbiAgICBjb25zdCBbbWV0aG9kLCB1cmxdID0gcm91dGUuc3BsaXQoLyAvKTtcbiAgICBjb25zdCBlbmRwb2ludERlZmF1bHRzID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHtcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICB1cmxcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0c1xuICAgICk7XG4gICAgaWYgKCFlbmRwb2ludE1ldGhvZHNNYXAuaGFzKHNjb3BlKSkge1xuICAgICAgZW5kcG9pbnRNZXRob2RzTWFwLnNldChzY29wZSwgLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSk7XG4gICAgfVxuICAgIGVuZHBvaW50TWV0aG9kc01hcC5nZXQoc2NvcGUpLnNldChtZXRob2ROYW1lLCB7XG4gICAgICBzY29wZSxcbiAgICAgIG1ldGhvZE5hbWUsXG4gICAgICBlbmRwb2ludERlZmF1bHRzLFxuICAgICAgZGVjb3JhdGlvbnNcbiAgICB9KTtcbiAgfVxufVxudmFyIGhhbmRsZXIgPSB7XG4gIGhhcyh7IHNjb3BlIH0sIG1ldGhvZE5hbWUpIHtcbiAgICByZXR1cm4gZW5kcG9pbnRNZXRob2RzTWFwLmdldChzY29wZSkuaGFzKG1ldGhvZE5hbWUpO1xuICB9LFxuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBtZXRob2ROYW1lKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiB0aGlzLmdldCh0YXJnZXQsIG1ldGhvZE5hbWUpLFxuICAgICAgLy8gZW5zdXJlcyBtZXRob2QgaXMgaW4gdGhlIGNhY2hlXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICB9O1xuICB9LFxuICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG1ldGhvZE5hbWUsIGRlc2NyaXB0b3IpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LmNhY2hlLCBtZXRob2ROYW1lLCBkZXNjcmlwdG9yKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSxcbiAgZGVsZXRlUHJvcGVydHkodGFyZ2V0LCBtZXRob2ROYW1lKSB7XG4gICAgZGVsZXRlIHRhcmdldC5jYWNoZVttZXRob2ROYW1lXTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSxcbiAgb3duS2V5cyh7IHNjb3BlIH0pIHtcbiAgICByZXR1cm4gWy4uLmVuZHBvaW50TWV0aG9kc01hcC5nZXQoc2NvcGUpLmtleXMoKV07XG4gIH0sXG4gIHNldCh0YXJnZXQsIG1ldGhvZE5hbWUsIHZhbHVlKSB7XG4gICAgcmV0dXJuIHRhcmdldC5jYWNoZVttZXRob2ROYW1lXSA9IHZhbHVlO1xuICB9LFxuICBnZXQoeyBvY3Rva2l0LCBzY29wZSwgY2FjaGUgfSwgbWV0aG9kTmFtZSkge1xuICAgIGlmIChjYWNoZVttZXRob2ROYW1lXSkge1xuICAgICAgcmV0dXJuIGNhY2hlW21ldGhvZE5hbWVdO1xuICAgIH1cbiAgICBjb25zdCBtZXRob2QgPSBlbmRwb2ludE1ldGhvZHNNYXAuZ2V0KHNjb3BlKS5nZXQobWV0aG9kTmFtZSk7XG4gICAgaWYgKCFtZXRob2QpIHtcbiAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgfVxuICAgIGNvbnN0IHsgZW5kcG9pbnREZWZhdWx0cywgZGVjb3JhdGlvbnMgfSA9IG1ldGhvZDtcbiAgICBpZiAoZGVjb3JhdGlvbnMpIHtcbiAgICAgIGNhY2hlW21ldGhvZE5hbWVdID0gZGVjb3JhdGUoXG4gICAgICAgIG9jdG9raXQsXG4gICAgICAgIHNjb3BlLFxuICAgICAgICBtZXRob2ROYW1lLFxuICAgICAgICBlbmRwb2ludERlZmF1bHRzLFxuICAgICAgICBkZWNvcmF0aW9uc1xuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FjaGVbbWV0aG9kTmFtZV0gPSBvY3Rva2l0LnJlcXVlc3QuZGVmYXVsdHMoZW5kcG9pbnREZWZhdWx0cyk7XG4gICAgfVxuICAgIHJldHVybiBjYWNoZVttZXRob2ROYW1lXTtcbiAgfVxufTtcbmZ1bmN0aW9uIGVuZHBvaW50c1RvTWV0aG9kcyhvY3Rva2l0KSB7XG4gIGNvbnN0IG5ld01ldGhvZHMgPSB7fTtcbiAgZm9yIChjb25zdCBzY29wZSBvZiBlbmRwb2ludE1ldGhvZHNNYXAua2V5cygpKSB7XG4gICAgbmV3TWV0aG9kc1tzY29wZV0gPSBuZXcgUHJveHkoeyBvY3Rva2l0LCBzY29wZSwgY2FjaGU6IHt9IH0sIGhhbmRsZXIpO1xuICB9XG4gIHJldHVybiBuZXdNZXRob2RzO1xufVxuZnVuY3Rpb24gZGVjb3JhdGUob2N0b2tpdCwgc2NvcGUsIG1ldGhvZE5hbWUsIGRlZmF1bHRzLCBkZWNvcmF0aW9ucykge1xuICBjb25zdCByZXF1ZXN0V2l0aERlZmF1bHRzID0gb2N0b2tpdC5yZXF1ZXN0LmRlZmF1bHRzKGRlZmF1bHRzKTtcbiAgZnVuY3Rpb24gd2l0aERlY29yYXRpb25zKC4uLmFyZ3MpIHtcbiAgICBsZXQgb3B0aW9ucyA9IHJlcXVlc3RXaXRoRGVmYXVsdHMuZW5kcG9pbnQubWVyZ2UoLi4uYXJncyk7XG4gICAgaWYgKGRlY29yYXRpb25zLm1hcFRvRGF0YSkge1xuICAgICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMsIHtcbiAgICAgICAgZGF0YTogb3B0aW9uc1tkZWNvcmF0aW9ucy5tYXBUb0RhdGFdLFxuICAgICAgICBbZGVjb3JhdGlvbnMubWFwVG9EYXRhXTogdm9pZCAwXG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXF1ZXN0V2l0aERlZmF1bHRzKG9wdGlvbnMpO1xuICAgIH1cbiAgICBpZiAoZGVjb3JhdGlvbnMucmVuYW1lZCkge1xuICAgICAgY29uc3QgW25ld1Njb3BlLCBuZXdNZXRob2ROYW1lXSA9IGRlY29yYXRpb25zLnJlbmFtZWQ7XG4gICAgICBvY3Rva2l0LmxvZy53YXJuKFxuICAgICAgICBgb2N0b2tpdC4ke3Njb3BlfS4ke21ldGhvZE5hbWV9KCkgaGFzIGJlZW4gcmVuYW1lZCB0byBvY3Rva2l0LiR7bmV3U2NvcGV9LiR7bmV3TWV0aG9kTmFtZX0oKWBcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChkZWNvcmF0aW9ucy5kZXByZWNhdGVkKSB7XG4gICAgICBvY3Rva2l0LmxvZy53YXJuKGRlY29yYXRpb25zLmRlcHJlY2F0ZWQpO1xuICAgIH1cbiAgICBpZiAoZGVjb3JhdGlvbnMucmVuYW1lZFBhcmFtZXRlcnMpIHtcbiAgICAgIGNvbnN0IG9wdGlvbnMyID0gcmVxdWVzdFdpdGhEZWZhdWx0cy5lbmRwb2ludC5tZXJnZSguLi5hcmdzKTtcbiAgICAgIGZvciAoY29uc3QgW25hbWUsIGFsaWFzXSBvZiBPYmplY3QuZW50cmllcyhcbiAgICAgICAgZGVjb3JhdGlvbnMucmVuYW1lZFBhcmFtZXRlcnNcbiAgICAgICkpIHtcbiAgICAgICAgaWYgKG5hbWUgaW4gb3B0aW9uczIpIHtcbiAgICAgICAgICBvY3Rva2l0LmxvZy53YXJuKFxuICAgICAgICAgICAgYFwiJHtuYW1lfVwiIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkIGZvciBcIm9jdG9raXQuJHtzY29wZX0uJHttZXRob2ROYW1lfSgpXCIuIFVzZSBcIiR7YWxpYXN9XCIgaW5zdGVhZGBcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmICghKGFsaWFzIGluIG9wdGlvbnMyKSkge1xuICAgICAgICAgICAgb3B0aW9uczJbYWxpYXNdID0gb3B0aW9uczJbbmFtZV07XG4gICAgICAgICAgfVxuICAgICAgICAgIGRlbGV0ZSBvcHRpb25zMltuYW1lXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlcXVlc3RXaXRoRGVmYXVsdHMob3B0aW9uczIpO1xuICAgIH1cbiAgICByZXR1cm4gcmVxdWVzdFdpdGhEZWZhdWx0cyguLi5hcmdzKTtcbiAgfVxuICByZXR1cm4gT2JqZWN0LmFzc2lnbih3aXRoRGVjb3JhdGlvbnMsIHJlcXVlc3RXaXRoRGVmYXVsdHMpO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbmZ1bmN0aW9uIHJlc3RFbmRwb2ludE1ldGhvZHMob2N0b2tpdCkge1xuICBjb25zdCBhcGkgPSBlbmRwb2ludHNUb01ldGhvZHMob2N0b2tpdCk7XG4gIHJldHVybiB7XG4gICAgcmVzdDogYXBpXG4gIH07XG59XG5yZXN0RW5kcG9pbnRNZXRob2RzLlZFUlNJT04gPSBWRVJTSU9OO1xuZnVuY3Rpb24gbGVnYWN5UmVzdEVuZHBvaW50TWV0aG9kcyhvY3Rva2l0KSB7XG4gIGNvbnN0IGFwaSA9IGVuZHBvaW50c1RvTWV0aG9kcyhvY3Rva2l0KTtcbiAgcmV0dXJuIHtcbiAgICAuLi5hcGksXG4gICAgcmVzdDogYXBpXG4gIH07XG59XG5sZWdhY3lSZXN0RW5kcG9pbnRNZXRob2RzLlZFUlNJT04gPSBWRVJTSU9OO1xuLy8gQW5ub3RhdGUgdGhlIENvbW1vbkpTIGV4cG9ydCBuYW1lcyBmb3IgRVNNIGltcG9ydCBpbiBub2RlOlxuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gIGxlZ2FjeVJlc3RFbmRwb2ludE1ldGhvZHMsXG4gIHJlc3RFbmRwb2ludE1ldGhvZHNcbn0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wRGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgX19nZXRPd25Qcm9wTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcztcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fZXhwb3J0ID0gKHRhcmdldCwgYWxsKSA9PiB7XG4gIGZvciAodmFyIG5hbWUgaW4gYWxsKVxuICAgIF9fZGVmUHJvcCh0YXJnZXQsIG5hbWUsIHsgZ2V0OiBhbGxbbmFtZV0sIGVudW1lcmFibGU6IHRydWUgfSk7XG59O1xudmFyIF9fY29weVByb3BzID0gKHRvLCBmcm9tLCBleGNlcHQsIGRlc2MpID0+IHtcbiAgaWYgKGZyb20gJiYgdHlwZW9mIGZyb20gPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGZyb20gPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGZvciAobGV0IGtleSBvZiBfX2dldE93blByb3BOYW1lcyhmcm9tKSlcbiAgICAgIGlmICghX19oYXNPd25Qcm9wLmNhbGwodG8sIGtleSkgJiYga2V5ICE9PSBleGNlcHQpXG4gICAgICAgIF9fZGVmUHJvcCh0bywga2V5LCB7IGdldDogKCkgPT4gZnJvbVtrZXldLCBlbnVtZXJhYmxlOiAhKGRlc2MgPSBfX2dldE93blByb3BEZXNjKGZyb20sIGtleSkpIHx8IGRlc2MuZW51bWVyYWJsZSB9KTtcbiAgfVxuICByZXR1cm4gdG87XG59O1xudmFyIF9fdG9Db21tb25KUyA9IChtb2QpID0+IF9fY29weVByb3BzKF9fZGVmUHJvcCh7fSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSksIG1vZCk7XG5cbi8vIHBrZy9kaXN0LXNyYy9pbmRleC5qc1xudmFyIGRpc3Rfc3JjX2V4cG9ydHMgPSB7fTtcbl9fZXhwb3J0KGRpc3Rfc3JjX2V4cG9ydHMsIHtcbiAgY29tcG9zZVBhZ2luYXRlUmVzdDogKCkgPT4gY29tcG9zZVBhZ2luYXRlUmVzdCxcbiAgaXNQYWdpbmF0aW5nRW5kcG9pbnQ6ICgpID0+IGlzUGFnaW5hdGluZ0VuZHBvaW50LFxuICBwYWdpbmF0ZVJlc3Q6ICgpID0+IHBhZ2luYXRlUmVzdCxcbiAgcGFnaW5hdGluZ0VuZHBvaW50czogKCkgPT4gcGFnaW5hdGluZ0VuZHBvaW50c1xufSk7XG5tb2R1bGUuZXhwb3J0cyA9IF9fdG9Db21tb25KUyhkaXN0X3NyY19leHBvcnRzKTtcblxuLy8gcGtnL2Rpc3Qtc3JjL3ZlcnNpb24uanNcbnZhciBWRVJTSU9OID0gXCI5LjIuMVwiO1xuXG4vLyBwa2cvZGlzdC1zcmMvbm9ybWFsaXplLXBhZ2luYXRlZC1saXN0LXJlc3BvbnNlLmpzXG5mdW5jdGlvbiBub3JtYWxpemVQYWdpbmF0ZWRMaXN0UmVzcG9uc2UocmVzcG9uc2UpIHtcbiAgaWYgKCFyZXNwb25zZS5kYXRhKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnJlc3BvbnNlLFxuICAgICAgZGF0YTogW11cbiAgICB9O1xuICB9XG4gIGNvbnN0IHJlc3BvbnNlTmVlZHNOb3JtYWxpemF0aW9uID0gXCJ0b3RhbF9jb3VudFwiIGluIHJlc3BvbnNlLmRhdGEgJiYgIShcInVybFwiIGluIHJlc3BvbnNlLmRhdGEpO1xuICBpZiAoIXJlc3BvbnNlTmVlZHNOb3JtYWxpemF0aW9uKVxuICAgIHJldHVybiByZXNwb25zZTtcbiAgY29uc3QgaW5jb21wbGV0ZVJlc3VsdHMgPSByZXNwb25zZS5kYXRhLmluY29tcGxldGVfcmVzdWx0cztcbiAgY29uc3QgcmVwb3NpdG9yeVNlbGVjdGlvbiA9IHJlc3BvbnNlLmRhdGEucmVwb3NpdG9yeV9zZWxlY3Rpb247XG4gIGNvbnN0IHRvdGFsQ291bnQgPSByZXNwb25zZS5kYXRhLnRvdGFsX2NvdW50O1xuICBkZWxldGUgcmVzcG9uc2UuZGF0YS5pbmNvbXBsZXRlX3Jlc3VsdHM7XG4gIGRlbGV0ZSByZXNwb25zZS5kYXRhLnJlcG9zaXRvcnlfc2VsZWN0aW9uO1xuICBkZWxldGUgcmVzcG9uc2UuZGF0YS50b3RhbF9jb3VudDtcbiAgY29uc3QgbmFtZXNwYWNlS2V5ID0gT2JqZWN0LmtleXMocmVzcG9uc2UuZGF0YSlbMF07XG4gIGNvbnN0IGRhdGEgPSByZXNwb25zZS5kYXRhW25hbWVzcGFjZUtleV07XG4gIHJlc3BvbnNlLmRhdGEgPSBkYXRhO1xuICBpZiAodHlwZW9mIGluY29tcGxldGVSZXN1bHRzICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmVzcG9uc2UuZGF0YS5pbmNvbXBsZXRlX3Jlc3VsdHMgPSBpbmNvbXBsZXRlUmVzdWx0cztcbiAgfVxuICBpZiAodHlwZW9mIHJlcG9zaXRvcnlTZWxlY3Rpb24gIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXNwb25zZS5kYXRhLnJlcG9zaXRvcnlfc2VsZWN0aW9uID0gcmVwb3NpdG9yeVNlbGVjdGlvbjtcbiAgfVxuICByZXNwb25zZS5kYXRhLnRvdGFsX2NvdW50ID0gdG90YWxDb3VudDtcbiAgcmV0dXJuIHJlc3BvbnNlO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvaXRlcmF0b3IuanNcbmZ1bmN0aW9uIGl0ZXJhdG9yKG9jdG9raXQsIHJvdXRlLCBwYXJhbWV0ZXJzKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSB0eXBlb2Ygcm91dGUgPT09IFwiZnVuY3Rpb25cIiA/IHJvdXRlLmVuZHBvaW50KHBhcmFtZXRlcnMpIDogb2N0b2tpdC5yZXF1ZXN0LmVuZHBvaW50KHJvdXRlLCBwYXJhbWV0ZXJzKTtcbiAgY29uc3QgcmVxdWVzdE1ldGhvZCA9IHR5cGVvZiByb3V0ZSA9PT0gXCJmdW5jdGlvblwiID8gcm91dGUgOiBvY3Rva2l0LnJlcXVlc3Q7XG4gIGNvbnN0IG1ldGhvZCA9IG9wdGlvbnMubWV0aG9kO1xuICBjb25zdCBoZWFkZXJzID0gb3B0aW9ucy5oZWFkZXJzO1xuICBsZXQgdXJsID0gb3B0aW9ucy51cmw7XG4gIHJldHVybiB7XG4gICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTogKCkgPT4gKHtcbiAgICAgIGFzeW5jIG5leHQoKSB7XG4gICAgICAgIGlmICghdXJsKVxuICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUgfTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcXVlc3RNZXRob2QoeyBtZXRob2QsIHVybCwgaGVhZGVycyB9KTtcbiAgICAgICAgICBjb25zdCBub3JtYWxpemVkUmVzcG9uc2UgPSBub3JtYWxpemVQYWdpbmF0ZWRMaXN0UmVzcG9uc2UocmVzcG9uc2UpO1xuICAgICAgICAgIHVybCA9ICgobm9ybWFsaXplZFJlc3BvbnNlLmhlYWRlcnMubGluayB8fCBcIlwiKS5tYXRjaChcbiAgICAgICAgICAgIC88KFtePl0rKT47XFxzKnJlbD1cIm5leHRcIi9cbiAgICAgICAgICApIHx8IFtdKVsxXTtcbiAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbm9ybWFsaXplZFJlc3BvbnNlIH07XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgaWYgKGVycm9yLnN0YXR1cyAhPT0gNDA5KVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgdXJsID0gXCJcIjtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgc3RhdHVzOiAyMDAsXG4gICAgICAgICAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgICAgICAgICBkYXRhOiBbXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9O1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvcGFnaW5hdGUuanNcbmZ1bmN0aW9uIHBhZ2luYXRlKG9jdG9raXQsIHJvdXRlLCBwYXJhbWV0ZXJzLCBtYXBGbikge1xuICBpZiAodHlwZW9mIHBhcmFtZXRlcnMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIG1hcEZuID0gcGFyYW1ldGVycztcbiAgICBwYXJhbWV0ZXJzID0gdm9pZCAwO1xuICB9XG4gIHJldHVybiBnYXRoZXIoXG4gICAgb2N0b2tpdCxcbiAgICBbXSxcbiAgICBpdGVyYXRvcihvY3Rva2l0LCByb3V0ZSwgcGFyYW1ldGVycylbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCksXG4gICAgbWFwRm5cbiAgKTtcbn1cbmZ1bmN0aW9uIGdhdGhlcihvY3Rva2l0LCByZXN1bHRzLCBpdGVyYXRvcjIsIG1hcEZuKSB7XG4gIHJldHVybiBpdGVyYXRvcjIubmV4dCgpLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgIGlmIChyZXN1bHQuZG9uZSkge1xuICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuICAgIGxldCBlYXJseUV4aXQgPSBmYWxzZTtcbiAgICBmdW5jdGlvbiBkb25lKCkge1xuICAgICAgZWFybHlFeGl0ID0gdHJ1ZTtcbiAgICB9XG4gICAgcmVzdWx0cyA9IHJlc3VsdHMuY29uY2F0KFxuICAgICAgbWFwRm4gPyBtYXBGbihyZXN1bHQudmFsdWUsIGRvbmUpIDogcmVzdWx0LnZhbHVlLmRhdGFcbiAgICApO1xuICAgIGlmIChlYXJseUV4aXQpIHtcbiAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbiAgICByZXR1cm4gZ2F0aGVyKG9jdG9raXQsIHJlc3VsdHMsIGl0ZXJhdG9yMiwgbWFwRm4pO1xuICB9KTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2NvbXBvc2UtcGFnaW5hdGUuanNcbnZhciBjb21wb3NlUGFnaW5hdGVSZXN0ID0gT2JqZWN0LmFzc2lnbihwYWdpbmF0ZSwge1xuICBpdGVyYXRvclxufSk7XG5cbi8vIHBrZy9kaXN0LXNyYy9nZW5lcmF0ZWQvcGFnaW5hdGluZy1lbmRwb2ludHMuanNcbnZhciBwYWdpbmF0aW5nRW5kcG9pbnRzID0gW1xuICBcIkdFVCAvYWR2aXNvcmllc1wiLFxuICBcIkdFVCAvYXBwL2hvb2svZGVsaXZlcmllc1wiLFxuICBcIkdFVCAvYXBwL2luc3RhbGxhdGlvbi1yZXF1ZXN0c1wiLFxuICBcIkdFVCAvYXBwL2luc3RhbGxhdGlvbnNcIixcbiAgXCJHRVQgL2Fzc2lnbm1lbnRzL3thc3NpZ25tZW50X2lkfS9hY2NlcHRlZF9hc3NpZ25tZW50c1wiLFxuICBcIkdFVCAvY2xhc3Nyb29tc1wiLFxuICBcIkdFVCAvY2xhc3Nyb29tcy97Y2xhc3Nyb29tX2lkfS9hc3NpZ25tZW50c1wiLFxuICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2RlcGVuZGFib3QvYWxlcnRzXCIsXG4gIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0c1wiLFxuICBcIkdFVCAvZXZlbnRzXCIsXG4gIFwiR0VUIC9naXN0c1wiLFxuICBcIkdFVCAvZ2lzdHMvcHVibGljXCIsXG4gIFwiR0VUIC9naXN0cy9zdGFycmVkXCIsXG4gIFwiR0VUIC9naXN0cy97Z2lzdF9pZH0vY29tbWVudHNcIixcbiAgXCJHRVQgL2dpc3RzL3tnaXN0X2lkfS9jb21taXRzXCIsXG4gIFwiR0VUIC9naXN0cy97Z2lzdF9pZH0vZm9ya3NcIixcbiAgXCJHRVQgL2luc3RhbGxhdGlvbi9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL2lzc3Vlc1wiLFxuICBcIkdFVCAvbGljZW5zZXNcIixcbiAgXCJHRVQgL21hcmtldHBsYWNlX2xpc3RpbmcvcGxhbnNcIixcbiAgXCJHRVQgL21hcmtldHBsYWNlX2xpc3RpbmcvcGxhbnMve3BsYW5faWR9L2FjY291bnRzXCIsXG4gIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3N0dWJiZWQvcGxhbnNcIixcbiAgXCJHRVQgL21hcmtldHBsYWNlX2xpc3Rpbmcvc3R1YmJlZC9wbGFucy97cGxhbl9pZH0vYWNjb3VudHNcIixcbiAgXCJHRVQgL25ldHdvcmtzL3tvd25lcn0ve3JlcG99L2V2ZW50c1wiLFxuICBcIkdFVCAvbm90aWZpY2F0aW9uc1wiLFxuICBcIkdFVCAvb3JnYW5pemF0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2NhY2hlL3VzYWdlLWJ5LXJlcG9zaXRvcnlcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9ibG9ja3NcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vY29kZS1zY2FubmluZy9hbGVydHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzL3NlY3JldHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2NvcGlsb3QvYmlsbGluZy9zZWF0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L2FsZXJ0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2V2ZW50c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9mYWlsZWRfaW52aXRhdGlvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vaG9va3NcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vaW5zdGFsbGF0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9pbnZpdGF0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH0vdGVhbXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vaXNzdWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vbWVtYmVycy97dXNlcm5hbWV9L2NvZGVzcGFjZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vbWlncmF0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMve3JvbGVfaWR9L3RlYW1zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy97cm9sZV9pZH0vdXNlcnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vb3V0c2lkZV9jb2xsYWJvcmF0b3JzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3BhY2thZ2VzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbi1yZXF1ZXN0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW4tcmVxdWVzdHMve3BhdF9yZXF1ZXN0X2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2Vuc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW5zL3twYXRfaWR9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wcm9qZWN0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wcm9wZXJ0aWVzL3ZhbHVlc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wdWJsaWNfbWVtYmVyc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9yZXBvc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9ydWxlc2V0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9ydWxlc2V0cy9ydWxlLXN1aXRlc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3NlY3VyaXR5LWFkdmlzb3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2ludml0YXRpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L21lbWJlcnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcHJvamVjdHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcmVwb3NcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vdGVhbXNcIixcbiAgXCJHRVQgL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH0vY2FyZHNcIixcbiAgXCJHRVQgL3Byb2plY3RzL3twcm9qZWN0X2lkfS9jb2xsYWJvcmF0b3JzXCIsXG4gIFwiR0VUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sdW1uc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9hcnRpZmFjdHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvY2FjaGVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL29yZ2FuaXphdGlvbi1zZWNyZXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL29yZ2FuaXphdGlvbi12YXJpYWJsZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVyc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXJ0aWZhY3RzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXR0ZW1wdHMve2F0dGVtcHRfbnVtYmVyfS9qb2JzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vam9ic1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9zZWNyZXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3ZhcmlhYmxlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3NcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvd29ya2Zsb3dzL3t3b3JrZmxvd19pZH0vcnVuc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aXZpdHlcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Fzc2lnbmVlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXJ1bnMve2NoZWNrX3J1bl9pZH0vYW5ub3RhdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXN1aXRlcy97Y2hlY2tfc3VpdGVfaWR9L2NoZWNrLXJ1bnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9pbnN0YW5jZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYW5hbHlzZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvZGV2Y29udGFpbmVyc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9zZWNyZXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2xsYWJvcmF0b3JzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97Y29tbWl0X3NoYX0vY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve2NvbW1pdF9zaGF9L3B1bGxzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L2NoZWNrLXJ1bnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vY2hlY2stc3VpdGVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L3N0YXR1c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfS9zdGF0dXNlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29udHJpYnV0b3JzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L2FsZXJ0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9zZWNyZXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHMve2RlcGxveW1lbnRfaWR9L3N0YXR1c2VzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudC1icmFuY2gtcG9saWNpZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudF9wcm90ZWN0aW9uX3J1bGVzL2FwcHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2V2ZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZm9ya3NcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaW52aXRhdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2V2ZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2NvbW1lbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vZXZlbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbGFiZWxzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vdGltZWxpbmVcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2tleXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhYmVsc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lcy97bWlsZXN0b25lX251bWJlcn0vbGFiZWxzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ub3RpZmljYXRpb25zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9idWlsZHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Byb2plY3RzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxsc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vY29tbWl0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9maWxlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH0vY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vYXNzZXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlcy9icmFuY2hlcy97YnJhbmNofVwiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzL3J1bGUtc3VpdGVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9L2xvY2F0aW9uc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjdXJpdHktYWR2aXNvcmllc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3RhcmdhemVyc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3Vic2NyaWJlcnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RhZ3NcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RlYW1zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90b3BpY3NcIixcbiAgXCJHRVQgL3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHNcIixcbiAgXCJHRVQgL3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH0vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS92YXJpYWJsZXNcIixcbiAgXCJHRVQgL3NlYXJjaC9jb2RlXCIsXG4gIFwiR0VUIC9zZWFyY2gvY29tbWl0c1wiLFxuICBcIkdFVCAvc2VhcmNoL2lzc3Vlc1wiLFxuICBcIkdFVCAvc2VhcmNoL2xhYmVsc1wiLFxuICBcIkdFVCAvc2VhcmNoL3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvc2VhcmNoL3RvcGljc1wiLFxuICBcIkdFVCAvc2VhcmNoL3VzZXJzXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vZGlzY3Vzc2lvbnNcIixcbiAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvdGVhbXMve3RlYW1faWR9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vaW52aXRhdGlvbnNcIixcbiAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9tZW1iZXJzXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vcHJvamVjdHNcIixcbiAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9yZXBvc1wiLFxuICBcIkdFVCAvdGVhbXMve3RlYW1faWR9L3RlYW1zXCIsXG4gIFwiR0VUIC91c2VyL2Jsb2Nrc1wiLFxuICBcIkdFVCAvdXNlci9jb2Rlc3BhY2VzXCIsXG4gIFwiR0VUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0c1wiLFxuICBcIkdFVCAvdXNlci9lbWFpbHNcIixcbiAgXCJHRVQgL3VzZXIvZm9sbG93ZXJzXCIsXG4gIFwiR0VUIC91c2VyL2ZvbGxvd2luZ1wiLFxuICBcIkdFVCAvdXNlci9ncGdfa2V5c1wiLFxuICBcIkdFVCAvdXNlci9pbnN0YWxsYXRpb25zXCIsXG4gIFwiR0VUIC91c2VyL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC91c2VyL2lzc3Vlc1wiLFxuICBcIkdFVCAvdXNlci9rZXlzXCIsXG4gIFwiR0VUIC91c2VyL21hcmtldHBsYWNlX3B1cmNoYXNlc1wiLFxuICBcIkdFVCAvdXNlci9tYXJrZXRwbGFjZV9wdXJjaGFzZXMvc3R1YmJlZFwiLFxuICBcIkdFVCAvdXNlci9tZW1iZXJzaGlwcy9vcmdzXCIsXG4gIFwiR0VUIC91c2VyL21pZ3JhdGlvbnNcIixcbiAgXCJHRVQgL3VzZXIvbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL3VzZXIvb3Jnc1wiLFxuICBcIkdFVCAvdXNlci9wYWNrYWdlc1wiLFxuICBcIkdFVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiLFxuICBcIkdFVCAvdXNlci9wdWJsaWNfZW1haWxzXCIsXG4gIFwiR0VUIC91c2VyL3JlcG9zXCIsXG4gIFwiR0VUIC91c2VyL3JlcG9zaXRvcnlfaW52aXRhdGlvbnNcIixcbiAgXCJHRVQgL3VzZXIvc29jaWFsX2FjY291bnRzXCIsXG4gIFwiR0VUIC91c2VyL3NzaF9zaWduaW5nX2tleXNcIixcbiAgXCJHRVQgL3VzZXIvc3RhcnJlZFwiLFxuICBcIkdFVCAvdXNlci9zdWJzY3JpcHRpb25zXCIsXG4gIFwiR0VUIC91c2VyL3RlYW1zXCIsXG4gIFwiR0VUIC91c2Vyc1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ldmVudHNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzL29yZ3Mve29yZ31cIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzL3B1YmxpY1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9mb2xsb3dlcnNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZm9sbG93aW5nXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2dpc3RzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2dwZ19rZXlzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2tleXNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vb3Jnc1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlc1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wcm9qZWN0c1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9yZWNlaXZlZF9ldmVudHNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcmVjZWl2ZWRfZXZlbnRzL3B1YmxpY1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9yZXBvc1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zb2NpYWxfYWNjb3VudHNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc3NoX3NpZ25pbmdfa2V5c1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zdGFycmVkXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3N1YnNjcmlwdGlvbnNcIlxuXTtcblxuLy8gcGtnL2Rpc3Qtc3JjL3BhZ2luYXRpbmctZW5kcG9pbnRzLmpzXG5mdW5jdGlvbiBpc1BhZ2luYXRpbmdFbmRwb2ludChhcmcpIHtcbiAgaWYgKHR5cGVvZiBhcmcgPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gcGFnaW5hdGluZ0VuZHBvaW50cy5pbmNsdWRlcyhhcmcpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbmZ1bmN0aW9uIHBhZ2luYXRlUmVzdChvY3Rva2l0KSB7XG4gIHJldHVybiB7XG4gICAgcGFnaW5hdGU6IE9iamVjdC5hc3NpZ24ocGFnaW5hdGUuYmluZChudWxsLCBvY3Rva2l0KSwge1xuICAgICAgaXRlcmF0b3I6IGl0ZXJhdG9yLmJpbmQobnVsbCwgb2N0b2tpdClcbiAgICB9KVxuICB9O1xufVxucGFnaW5hdGVSZXN0LlZFUlNJT04gPSBWRVJTSU9OO1xuLy8gQW5ub3RhdGUgdGhlIENvbW1vbkpTIGV4cG9ydCBuYW1lcyBmb3IgRVNNIGltcG9ydCBpbiBub2RlOlxuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gIGNvbXBvc2VQYWdpbmF0ZVJlc3QsXG4gIGlzUGFnaW5hdGluZ0VuZHBvaW50LFxuICBwYWdpbmF0ZVJlc3QsXG4gIHBhZ2luYXRpbmdFbmRwb2ludHNcbn0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRPY3Rva2l0T3B0aW9ucyA9IGV4cG9ydHMuR2l0SHViID0gZXhwb3J0cy5kZWZhdWx0cyA9IGV4cG9ydHMuY29udGV4dCA9IHZvaWQgMDtcbmNvbnN0IENvbnRleHQgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIi4vY29udGV4dFwiKSk7XG5jb25zdCBVdGlscyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiLi9pbnRlcm5hbC91dGlsc1wiKSk7XG4vLyBvY3Rva2l0ICsgcGx1Z2luc1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIkBvY3Rva2l0L2NvcmVcIik7XG5jb25zdCBwbHVnaW5fcmVzdF9lbmRwb2ludF9tZXRob2RzXzEgPSByZXF1aXJlKFwiQG9jdG9raXQvcGx1Z2luLXJlc3QtZW5kcG9pbnQtbWV0aG9kc1wiKTtcbmNvbnN0IHBsdWdpbl9wYWdpbmF0ZV9yZXN0XzEgPSByZXF1aXJlKFwiQG9jdG9raXQvcGx1Z2luLXBhZ2luYXRlLXJlc3RcIik7XG5leHBvcnRzLmNvbnRleHQgPSBuZXcgQ29udGV4dC5Db250ZXh0KCk7XG5jb25zdCBiYXNlVXJsID0gVXRpbHMuZ2V0QXBpQmFzZVVybCgpO1xuZXhwb3J0cy5kZWZhdWx0cyA9IHtcbiAgICBiYXNlVXJsLFxuICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgYWdlbnQ6IFV0aWxzLmdldFByb3h5QWdlbnQoYmFzZVVybCksXG4gICAgICAgIGZldGNoOiBVdGlscy5nZXRQcm94eUZldGNoKGJhc2VVcmwpXG4gICAgfVxufTtcbmV4cG9ydHMuR2l0SHViID0gY29yZV8xLk9jdG9raXQucGx1Z2luKHBsdWdpbl9yZXN0X2VuZHBvaW50X21ldGhvZHNfMS5yZXN0RW5kcG9pbnRNZXRob2RzLCBwbHVnaW5fcGFnaW5hdGVfcmVzdF8xLnBhZ2luYXRlUmVzdCkuZGVmYXVsdHMoZXhwb3J0cy5kZWZhdWx0cyk7XG4vKipcbiAqIENvbnZpZW5jZSBmdW5jdGlvbiB0byBjb3JyZWN0bHkgZm9ybWF0IE9jdG9raXQgT3B0aW9ucyB0byBwYXNzIGludG8gdGhlIGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSAgICAgdG9rZW4gICAgdGhlIHJlcG8gUEFUIG9yIEdJVEhVQl9UT0tFTlxuICogQHBhcmFtICAgICBvcHRpb25zICBvdGhlciBvcHRpb25zIHRvIHNldFxuICovXG5mdW5jdGlvbiBnZXRPY3Rva2l0T3B0aW9ucyh0b2tlbiwgb3B0aW9ucykge1xuICAgIGNvbnN0IG9wdHMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zIHx8IHt9KTsgLy8gU2hhbGxvdyBjbG9uZSAtIGRvbid0IG11dGF0ZSB0aGUgb2JqZWN0IHByb3ZpZGVkIGJ5IHRoZSBjYWxsZXJcbiAgICAvLyBBdXRoXG4gICAgY29uc3QgYXV0aCA9IFV0aWxzLmdldEF1dGhTdHJpbmcodG9rZW4sIG9wdHMpO1xuICAgIGlmIChhdXRoKSB7XG4gICAgICAgIG9wdHMuYXV0aCA9IGF1dGg7XG4gICAgfVxuICAgIHJldHVybiBvcHRzO1xufVxuZXhwb3J0cy5nZXRPY3Rva2l0T3B0aW9ucyA9IGdldE9jdG9raXRPcHRpb25zO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbHMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRPY3Rva2l0ID0gZXhwb3J0cy5jb250ZXh0ID0gdm9pZCAwO1xuY29uc3QgQ29udGV4dCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiLi9jb250ZXh0XCIpKTtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi91dGlsc1wiKTtcbmV4cG9ydHMuY29udGV4dCA9IG5ldyBDb250ZXh0LkNvbnRleHQoKTtcbi8qKlxuICogUmV0dXJucyBhIGh5ZHJhdGVkIG9jdG9raXQgcmVhZHkgdG8gdXNlIGZvciBHaXRIdWIgQWN0aW9uc1xuICpcbiAqIEBwYXJhbSAgICAgdG9rZW4gICAgdGhlIHJlcG8gUEFUIG9yIEdJVEhVQl9UT0tFTlxuICogQHBhcmFtICAgICBvcHRpb25zICBvdGhlciBvcHRpb25zIHRvIHNldFxuICovXG5mdW5jdGlvbiBnZXRPY3Rva2l0KHRva2VuLCBvcHRpb25zLCAuLi5hZGRpdGlvbmFsUGx1Z2lucykge1xuICAgIGNvbnN0IEdpdEh1YldpdGhQbHVnaW5zID0gdXRpbHNfMS5HaXRIdWIucGx1Z2luKC4uLmFkZGl0aW9uYWxQbHVnaW5zKTtcbiAgICByZXR1cm4gbmV3IEdpdEh1YldpdGhQbHVnaW5zKCgwLCB1dGlsc18xLmdldE9jdG9raXRPcHRpb25zKSh0b2tlbiwgb3B0aW9ucykpO1xufVxuZXhwb3J0cy5nZXRPY3Rva2l0ID0gZ2V0T2N0b2tpdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdpdGh1Yi5qcy5tYXAiLAogICAgImltcG9ydCB7IERlZmF1bHRBcnRpZmFjdENsaWVudCB9IGZyb20gJ0BhY3Rpb25zL2FydGlmYWN0JztcbmltcG9ydCB7IGRlYnVnLCBnZXRJbnB1dCwgaW5mbyB9IGZyb20gJ0BhY3Rpb25zL2NvcmUnXG5pbXBvcnQgeyBjb250ZXh0IH0gZnJvbSAnQGFjdGlvbnMvZ2l0aHViJztcblxuKGFzeW5jIGZ1bmN0aW9uIG1haW4oKSB7XG5cdGRlYnVnKEpTT04uc3RyaW5naWZ5KGNvbnRleHQsIG51bGwsIDQpKVxuXHRsZXQgYXJ0aWZhY3RDbGllbnQgPSBuZXcgRGVmYXVsdEFydGlmYWN0Q2xpZW50KCk7XG5cblx0bGV0IHsgYXJ0aWZhY3RzIH0gPSBhd2FpdCBhcnRpZmFjdENsaWVudC5saXN0QXJ0aWZhY3RzKHtcblx0XHRmaW5kQnk6IHtcblx0XHRcdHRva2VuOiBnZXRJbnB1dChcInRva2VuXCIsIHsgcmVxdWlyZWQ6IHRydWUgfSksXG5cdFx0XHR3b3JrZmxvd1J1bklkOiBwYXJzZUludChnZXRJbnB1dChcInJ1bl9pZFwiLCB7IHJlcXVpcmVkOiB0cnVlIH0pKSxcblx0XHRcdHJlcG9zaXRvcnlPd25lcjogY29udGV4dC5yZXBvLm93bmVyLFxuXHRcdFx0cmVwb3NpdG9yeU5hbWU6IGNvbnRleHQucmVwby5yZXBvLFxuXHRcdH1cblx0fSk7XG5cblx0aW5mbyhgRm91bmQgJHthcnRpZmFjdHMubGVuZ3RofSBhcnRpZmFjdHM6ICR7SlNPTi5zdHJpbmdpZnkoYXJ0aWZhY3RzLCBudWxsLCA0KX1gKVxufSkoKVxuIgogIF0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHQSxTQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDNUQsRUFBUSw4QkFBOEIseUJBQXNCO0FBSzVELFdBQVMsY0FBYyxDQUFDLE9BQU87QUFDM0IsUUFBSSxVQUFVLFFBQVEsVUFBVSxXQUFXO0FBQ3ZDLGFBQU87QUFBQSxJQUNYLGtCQUNnQixVQUFVLFlBQVksaUJBQWlCLFFBQVE7QUFDM0QsYUFBTztBQUFBLElBQ1g7QUFDQSxXQUFP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LE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztB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LElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQzdDO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFDN0M7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUM3QztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQzdDO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFDN0M7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUM3QztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLEVBQy9DO0FBRUEsV0FBUyxPQUFRLEdBQUc7QUFDbEIsU0FBSyxTQUFTO0FBQUE7QUFFaEIsVUFBUSxVQUFVLGdCQUFpQixDQUFDLEtBQUs7QUFFdkMsVUFBTSxJQUFJLFFBQVEsU0FBUyxHQUFHO0FBQzlCLFFBQUksTUFBTTtBQUNWLFFBQUksSUFBSTtBQUFHLFFBQUksSUFBSTtBQUFHLFVBQU0sTUFBTSxJQUFJO0FBQ3RDLFVBQU8sSUFBSSxPQUFPLEdBQUc7QUFDbkIsVUFBSSxLQUFLLFdBQVcsV0FBVztBQUM3QixhQUFLLElBQUksSUFBSSxXQUFXLENBQUMsSUFBSTtBQUMzQixpQkFBTyxNQUFNLEtBQUs7QUFDbEIsZUFBSyxTQUFTO0FBQ2QsWUFBRTtBQUFBLFFBQ0osT0FBTztBQUNMLGVBQUssVUFBVSxJQUFJO0FBQ25CLFlBQUU7QUFDRixjQUFJLEtBQUssT0FBTyxXQUFXLEdBQUc7QUFDNUIsbUJBQU8sT0FBTyxhQUFhLFNBQVMsS0FBSyxRQUFRLEVBQUUsQ0FBQztBQUNwRCxpQkFBSyxTQUFTO0FBQUEsVUFDaEI7QUFBQTtBQUFBLE1BRUosV0FBVyxJQUFJLE9BQU8sS0FBSztBQUN6QixZQUFJLElBQUksR0FBRztBQUNULGlCQUFPLElBQUksVUFBVSxHQUFHLENBQUM7QUFDekIsY0FBSTtBQUFBLFFBQ047QUFDQSxhQUFLLFNBQVM7QUFDZCxVQUFFO0FBQUEsTUFDSjtBQUFBLElBQ0Y7QUFDQSxRQUFJLElBQUksT0FBTyxLQUFLLFdBQVcsV0FBVztBQUFFLGFBQU8sSUFBSSxVQUFVLENBQUM7QUFBQSxJQUFFO0FBQ3BFLFdBQU87QUFBQTtBQUVULFVBQVEsVUFBVSxnQkFBaUIsR0FBRztBQUNwQyxTQUFLLFNBQVM7QUFBQTtBQUdoQixTQUFPLFVBQVU7QUFBQTs7OztBQ25EakIsTUFBTTtBQUNOLE1BQU07QUFDTixNQUFNO0FBRU4sTUFBTSxhQUFhO0FBRW5CLGFBQVcsU0FBUztBQUNwQixXQUFTLFVBQVcsQ0FBQyxLQUFLLEtBQUs7QUFDN0IsVUFBTSxTQUFTLElBQUk7QUFDbkIsVUFBTSxnQkFBZ0IsSUFBSTtBQUMxQixTQUFLLE1BQU07QUFFWCxTQUFLLGlCQUFpQixTQUFTLFFBQVEsYUFBYSxJQUFJLE9BQU8sSUFBSTtBQUNuRSxTQUFLLHFCQUFxQixTQUFTLFFBQVEsaUJBQWlCLEdBQUc7QUFDL0QsU0FBSyxjQUFjLFNBQVMsUUFBUSxVQUFVLFFBQVE7QUFFdEQsUUFBSTtBQUNKLGFBQVMsSUFBSSxHQUFHLE1BQU0sY0FBYyxPQUFRLElBQUksT0FBTyxHQUFHO0FBQ3hELFVBQUksTUFBTSxRQUFRLGNBQWMsRUFBRSxLQUM5QixXQUFXLEtBQUssY0FBYyxHQUFHLEVBQUUsR0FBRztBQUN4QyxrQkFBVSxjQUFjLEdBQUcsR0FBRyxZQUFZO0FBQzFDO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFFQSxRQUFJLFlBQVksV0FBVztBQUFFLGdCQUFVLElBQUksY0FBYztBQUFBLElBQU87QUFFaEUsU0FBSyxVQUFVLElBQUk7QUFDbkIsU0FBSyxVQUFVO0FBQ2YsU0FBSyxVQUFVO0FBQ2YsU0FBSyxTQUFTO0FBQ2QsU0FBSyxpQkFBaUI7QUFDdEIsU0FBSyxZQUFZO0FBQ2pCLFNBQUssWUFBWTtBQUNqQixTQUFLLE9BQU87QUFDWixTQUFLLE9BQU87QUFDWixTQUFLLFlBQVk7QUFDakIsU0FBSyxZQUFZO0FBQ2pCLFNBQUssWUFBWTtBQUFBO0FBR25CLGFBQVcsVUFBVSxnQkFBaUIsQ0FBQyxNQUFNLElBQUk7QUFDL0MsUUFBSSxLQUFLLFlBQVksS0FBSyxhQUFhO0FBQ3JDLFdBQUssS0FBSyxJQUFJLGdCQUFnQjtBQUM1QixhQUFLLElBQUksaUJBQWlCO0FBQzFCLGFBQUssSUFBSSxLQUFLLGFBQWE7QUFBQSxNQUM3QjtBQUNBLGFBQU8sR0FBRztBQUFBLElBQ1o7QUFFQSxRQUFJO0FBQU8sUUFBSTtBQUFRLFFBQUk7QUFBRyxRQUFJLElBQUk7QUFBRyxVQUFNLE1BQU0sS0FBSztBQUUxRCxXQUFPLElBQUksS0FBSztBQUNkLFVBQUksS0FBSyxXQUFXLE9BQU87QUFDekIsZ0JBQVEsU0FBUztBQUNqQixhQUFLLElBQUksRUFBRyxJQUFJLE9BQU8sR0FBRztBQUN4QixlQUFLLEtBQUssZ0JBQWdCO0FBQUUsY0FBRTtBQUFBLFVBQUU7QUFDaEMsY0FBSSxLQUFLLE9BQU8sSUFBYTtBQUMzQixvQkFBUTtBQUNSO0FBQUEsVUFDRixXQUFXLEtBQUssT0FBTyxJQUFhO0FBQ2xDLHFCQUFTO0FBQ1Q7QUFBQSxVQUNGO0FBQ0EsY0FBSSxLQUFLLGtCQUFrQixLQUFLLGNBQWMsS0FBSyxvQkFBb0I7QUFDckUsaUJBQUssWUFBWTtBQUNqQjtBQUFBLFVBQ0YsV0FBVyxLQUFLLGdCQUFnQjtBQUFFLGNBQUUsS0FBSztBQUFBLFVBQVU7QUFBQSxRQUNyRDtBQUVBLFlBQUksVUFBVSxXQUFXO0FBRXZCLGNBQUksUUFBUSxHQUFHO0FBQUUsaUJBQUssUUFBUSxLQUFLLFFBQVEsTUFBTSxLQUFLLFNBQVMsVUFBVSxHQUFHLEtBQUssQ0FBQztBQUFBLFVBQUU7QUFDcEYsZUFBSyxTQUFTO0FBRWQsZUFBSyxZQUFZO0FBQ2pCLGVBQUssaUJBQWlCO0FBQ3RCLGVBQUssT0FBTztBQUNaLGVBQUssWUFBWTtBQUNqQixlQUFLLFlBQVk7QUFDakIsZUFBSyxRQUFRLE1BQU07QUFFbkIsY0FBSSxRQUFRO0FBQUEsUUFDZCxXQUFXLFdBQVcsV0FBVztBQUUvQixZQUFFLEtBQUs7QUFDUCxjQUFJO0FBQUssZ0JBQU0sV0FBVyxLQUFLO0FBQy9CLGNBQUksU0FBUyxHQUFHO0FBQUUsa0JBQU8sS0FBSyxRQUFRLEtBQUssUUFBUSxNQUFNLEtBQUssU0FBUyxVQUFVLEdBQUcsTUFBTSxDQUFDO0FBQUEsVUFBRyxPQUFPO0FBQUUsa0JBQU0sS0FBSztBQUFBO0FBRWxILGVBQUssWUFBWTtBQUNqQixlQUFLLGlCQUFpQjtBQUN0QixlQUFLLE9BQU87QUFDWixlQUFLLFlBQVk7QUFDakIsZUFBSyxZQUFZO0FBQ2pCLGVBQUssUUFBUSxNQUFNO0FBRW5CLGNBQUksSUFBSSxRQUFRO0FBQ2QsaUJBQUssSUFBSSxLQUFLLFNBQVMsV0FBVyxLQUFLLFVBQVUsS0FBSyxPQUFPLEdBQzNELElBQ0EsVUFDQSxLQUFLO0FBQUEsVUFDVDtBQUVBLGNBQUksU0FBUztBQUNiLGNBQUksS0FBSyxZQUFZLEtBQUssYUFBYTtBQUFFLG1CQUFPLEdBQUc7QUFBQSxVQUFFO0FBQUEsUUFDdkQsV0FBVyxLQUFLLFdBQVc7QUFFekIsY0FBSSxJQUFJLEdBQUc7QUFBRSxpQkFBSyxRQUFRLEtBQUssUUFBUSxNQUFNLEtBQUssU0FBUyxVQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQUEsVUFBRTtBQUM1RSxjQUFJO0FBQ0osZUFBSyxLQUFLLFlBQVksS0FBSyxLQUFLLFlBQVksS0FBSyxvQkFBb0I7QUFFbkUsaUJBQUssaUJBQWlCO0FBQ3RCLGlCQUFLLFlBQVk7QUFBQSxVQUNuQjtBQUFBLFFBQ0YsT0FBTztBQUNMLGNBQUksSUFBSSxLQUFLO0FBQUUsaUJBQUssUUFBUSxLQUFLLFFBQVEsTUFBTSxLQUFLLFNBQVMsVUFBVSxDQUFDLENBQUM7QUFBQSxVQUFFO0FBQzNFLGNBQUk7QUFBQTtBQUFBLE1BRVIsT0FBTztBQUNMLGlCQUFTO0FBQ1QsYUFBSyxJQUFJLEVBQUcsSUFBSSxPQUFPLEdBQUc7QUFDeEIsZUFBSyxLQUFLLGdCQUFnQjtBQUFFLGNBQUU7QUFBQSxVQUFFO0FBQ2hDLGNBQUksS0FBSyxPQUFPLElBQWE7QUFDM0IscUJBQVM7QUFDVDtBQUFBLFVBQ0Y7QUFDQSxjQUFJLEtBQUssa0JBQWtCLEtBQUssY0FBYyxLQUFLLGdCQUFnQjtBQUNqRSxpQkFBSyxZQUFZO0FBQ2pCO0FBQUEsVUFDRixXQUFXLEtBQUssZ0JBQWdCO0FBQUUsY0FBRSxLQUFLO0FBQUEsVUFBVTtBQUFBLFFBQ3JEO0FBRUEsWUFBSSxXQUFXLFdBQVc7QUFDeEIsWUFBRSxLQUFLO0FBQ1AsY0FBSSxTQUFTLEdBQUc7QUFBRSxpQkFBSyxRQUFRLEtBQUssUUFBUSxNQUFNLEtBQUssU0FBUyxVQUFVLEdBQUcsTUFBTSxDQUFDO0FBQUEsVUFBRTtBQUN0RixlQUFLLElBQUksS0FBSyxTQUFTLFdBQVcsS0FBSyxNQUFNLFVBQVUsS0FBSyxPQUFPLEdBQ2pFLFdBQVcsS0FBSyxNQUFNLFVBQVUsS0FBSyxPQUFPLEdBQzVDLEtBQUssV0FDTCxLQUFLLFNBQVM7QUFDaEIsZUFBSyxTQUFTO0FBRWQsZUFBSyxZQUFZO0FBQ2pCLGVBQUssaUJBQWlCO0FBQ3RCLGVBQUssT0FBTztBQUNaLGVBQUssWUFBWTtBQUNqQixlQUFLLFlBQVk7QUFDakIsZUFBSyxRQUFRLE1BQU07QUFFbkIsY0FBSSxTQUFTO0FBQ2IsY0FBSSxLQUFLLFlBQVksS0FBSyxhQUFhO0FBQUUsbUJBQU8sR0FBRztBQUFBLFVBQUU7QUFBQSxRQUN2RCxXQUFXLEtBQUssV0FBVztBQUV6QixjQUFJLElBQUksR0FBRztBQUFFLGlCQUFLLFFBQVEsS0FBSyxRQUFRLE1BQU0sS0FBSyxTQUFTLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFBQSxVQUFFO0FBQzVFLGNBQUk7QUFDSixjQUFLLEtBQUssU0FBUyxNQUFNLEtBQUssbUJBQW1CLE1BQzVDLEtBQUssWUFBWSxLQUFLLEtBQUssWUFBWSxLQUFLLGdCQUFnQjtBQUUvRCxpQkFBSyxpQkFBaUI7QUFDdEIsaUJBQUssWUFBWTtBQUFBLFVBQ25CO0FBQUEsUUFDRixPQUFPO0FBQ0wsY0FBSSxJQUFJLEtBQUs7QUFBRSxpQkFBSyxRQUFRLEtBQUssUUFBUSxNQUFNLEtBQUssU0FBUyxVQUFVLENBQUMsQ0FBQztBQUFBLFVBQUU7QUFDM0UsY0FBSTtBQUFBO0FBQUE7QUFBQSxJQUdWO0FBQ0EsT0FBRztBQUFBO0FBR0wsYUFBVyxVQUFVLGNBQWUsR0FBRztBQUNyQyxRQUFJLEtBQUssSUFBSSxPQUFPO0FBQUU7QUFBQSxJQUFPO0FBRTdCLFFBQUksS0FBSyxXQUFXLFNBQVMsS0FBSyxLQUFLLFNBQVMsR0FBRztBQUNqRCxXQUFLLElBQUksS0FBSyxTQUFTLFdBQVcsS0FBSyxNQUFNLFVBQVUsS0FBSyxPQUFPLEdBQ2pFLElBQ0EsS0FBSyxXQUNMLEtBQUs7QUFBQSxJQUNULFdBQVcsS0FBSyxXQUFXLE9BQU87QUFDaEMsV0FBSyxJQUFJLEtBQUssU0FBUyxXQUFXLEtBQUssTUFBTSxVQUFVLEtBQUssT0FBTyxHQUNqRSxXQUFXLEtBQUssTUFBTSxVQUFVLEtBQUssT0FBTyxHQUM1QyxLQUFLLFdBQ0wsS0FBSyxTQUFTO0FBQUEsSUFDbEI7QUFDQSxTQUFLLElBQUksUUFBUTtBQUNqQixTQUFLLElBQUksS0FBSyxRQUFRO0FBQUE7QUFHeEIsU0FBTyxVQUFVO0FBQUE7Ozs7QUMzTGpCLE1BQU0sMENBQXdDO0FBQzlDLFFBQVE7QUFDUixNQUFNO0FBRU4sTUFBTTtBQUNOLE1BQU07QUFDTixNQUFNO0FBRU4sV0FBUyxNQUFPLENBQUMsTUFBTTtBQUNyQixVQUFNLGdCQUFnQixTQUFTO0FBQUUsYUFBTyxJQUFJLE9BQU8sSUFBSTtBQUFBLElBQUU7QUFFekQsZUFBVyxTQUFTLFVBQVU7QUFDNUIsWUFBTSxJQUFJLFVBQVUsb0NBQW9DO0FBQUEsSUFDMUQ7QUFDQSxlQUFXLEtBQUssWUFBWSxVQUFVO0FBQ3BDLFlBQU0sSUFBSSxVQUFVLDJEQUEyRDtBQUFBLElBQ2pGO0FBQ0EsZUFBVyxLQUFLLFFBQVEsb0JBQW9CLFVBQVU7QUFDcEQsWUFBTSxJQUFJLFVBQVUsOEJBQThCO0FBQUEsSUFDcEQ7QUFFQTtBQUFBLE1BQ0U7QUFBQSxTQUNHO0FBQUEsUUFDRDtBQUVKLFNBQUssT0FBTztBQUFBLE1BQ1YsYUFBYTtBQUFBLFNBQ1Y7QUFBQSxJQUNMO0FBQ0EsbUJBQWUsS0FBSyxNQUFNLEtBQUssSUFBSTtBQUVuQyxTQUFLLFFBQVE7QUFDYixTQUFLLFVBQVUsS0FBSyxtQkFBbUIsT0FBTztBQUM5QyxTQUFLLFlBQVk7QUFBQTtBQUVuQixXQUFTLFFBQVEsY0FBYztBQUUvQixTQUFPLFVBQVUsZUFBZ0IsQ0FBQyxJQUFJO0FBQ3BDLFFBQUksT0FBTyxVQUFVO0FBQ25CLFdBQUssS0FBSyxPQUFPO0FBQ2YsYUFBSyxTQUFTLElBQUk7QUFDbEI7QUFBQSxNQUNGLFdBQVcsS0FBSyxXQUFXO0FBQ3pCO0FBQUEsTUFDRjtBQUNBLFdBQUssWUFBWTtBQUFBLElBQ25CO0FBQ0EsbUJBQWUsVUFBVSxLQUFLLE1BQU0sTUFBTSxTQUFTO0FBQUE7QUFHckQsU0FBTyxVQUFVLDZCQUE4QixDQUFDLFNBQVM7QUFDdkQsVUFBTSxTQUFTLFlBQVksUUFBUSxlQUFlO0FBRWxELFVBQU0sTUFBTTtBQUFBLE1BQ1YsWUFBWSxLQUFLLEtBQUs7QUFBQSxNQUN0QixTQUFTLEtBQUssS0FBSztBQUFBLE1BQ25CO0FBQUEsTUFDQSxlQUFlLEtBQUssS0FBSztBQUFBLE1BQ3pCLGFBQWEsS0FBSyxLQUFLO0FBQUEsTUFDdkIsUUFBUSxLQUFLLEtBQUs7QUFBQSxNQUNsQixlQUFlO0FBQUEsTUFDZixjQUFjLEtBQUssS0FBSztBQUFBLElBQzFCO0FBRUEsUUFBSSxnQkFBZ0IsT0FBTyxLQUFLLE9BQU8sRUFBRSxHQUFHO0FBQzFDLGFBQU8sSUFBSSxnQkFBZ0IsTUFBTSxHQUFHO0FBQUEsSUFDdEM7QUFDQSxRQUFJLGlCQUFpQixPQUFPLEtBQUssT0FBTyxFQUFFLEdBQUc7QUFDM0MsYUFBTyxJQUFJLGlCQUFpQixNQUFNLEdBQUc7QUFBQSxJQUN2QztBQUNBLFVBQU0sSUFBSSxNQUFNLDJCQUEyQjtBQUFBO0FBRzdDLFNBQU8sVUFBVSxpQkFBa0IsQ0FBQyxPQUFPLFVBQVUsSUFBSTtBQUN2RCxTQUFLLFFBQVEsTUFBTSxPQUFPLEVBQUU7QUFBQTtBQUc5QixTQUFPLFVBQVU7QUFDakIsU0FBTyxRQUFRLFVBQVU7QUFDekIsU0FBTyxRQUFRLFNBQVM7QUFFeEIsU0FBTyxRQUFRLFFBQVE7QUFBQTs7OztBQ2xGdkIsUUFBUSxnQkFBZ0I7QUFFeEIsTUFBTSx3QkFBd0IsQ0FBQyxPQUFPLFFBQVEsTUFBTTtBQUNwRCxNQUFNLDJCQUEyQixJQUFJLElBQUkscUJBQXFCO0FBRTlELE1BQU0saUJBQWlCLENBQUMsS0FBSyxLQUFLLEtBQUssR0FBRztBQUUxQyxNQUFNLGlCQUFpQixDQUFDLEtBQUssS0FBSyxLQUFLLEtBQUssR0FBRztBQUMvQyxNQUFNLG9CQUFvQixJQUFJLElBQUksY0FBYztBQUdoRCxNQUFNLFdBQVc7QUFBQSxJQUNmO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBTTtBQUFBLElBQU07QUFBQSxJQUFNO0FBQUEsSUFBTTtBQUFBLElBQU07QUFBQSxJQUFNO0FBQUEsSUFBTTtBQUFBLElBQU07QUFBQSxJQUFNO0FBQUEsSUFBTTtBQUFBLElBQU07QUFBQSxJQUFNO0FBQUEsSUFBTTtBQUFBLElBQU07QUFBQSxJQUFNO0FBQUEsSUFBTTtBQUFBLElBQy9HO0FBQUEsSUFBTTtBQUFBLElBQU07QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFDdkc7QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQ2xHO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBUTtBQUFBLElBQVE7QUFBQSxJQUNwRztBQUFBLElBQVE7QUFBQSxJQUFRO0FBQUEsSUFBUTtBQUFBLElBQVE7QUFBQSxJQUFRO0FBQUEsSUFBUTtBQUFBLElBQVE7QUFBQSxJQUFRO0FBQUEsSUFBUTtBQUFBLElBQVE7QUFBQSxJQUFRO0FBQUEsSUFBUTtBQUFBLElBQ2hHO0FBQUEsRUFDRjtBQUVBLE1BQU0sY0FBYyxJQUFJLElBQUksUUFBUTtBQUdwQyxNQUFNLGlCQUFpQjtBQUFBLElBQ3JCO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNGO0FBQ0EsTUFBTSxvQkFBb0IsSUFBSSxJQUFJLGNBQWM7QUFFaEQsTUFBTSxrQkFBa0IsQ0FBQyxVQUFVLFVBQVUsT0FBTztBQUVwRCxNQUFNLGNBQWMsQ0FBQyxPQUFPLFFBQVEsV0FBVyxPQUFPO0FBQ3RELE1BQU0saUJBQWlCLElBQUksSUFBSSxXQUFXO0FBRTFDLE1BQU0sY0FBYyxDQUFDLFlBQVksZUFBZSxXQUFXLE1BQU07QUFFakUsTUFBTSxxQkFBcUIsQ0FBQyxRQUFRLGVBQWUsU0FBUztBQUU1RCxNQUFNLGVBQWU7QUFBQSxJQUNuQjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDRjtBQUdBLE1BQU0sb0JBQW9CO0FBQUEsSUFDeEI7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUtBO0FBQUEsRUFDRjtBQUdBLE1BQU0sZ0JBQWdCO0FBQUEsSUFDcEI7QUFBQSxFQUNGO0FBR0EsTUFBTSxtQkFBbUIsQ0FBQyxXQUFXLFNBQVMsT0FBTztBQUNyRCxNQUFNLHNCQUFzQixJQUFJLElBQUksZ0JBQWdCO0FBRXBELE1BQU0sY0FBYztBQUFBLElBQ2xCO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNGO0FBQ0EsTUFBTSxpQkFBaUIsSUFBSSxJQUFJLFdBQVc7QUFHMUMsTUFBTSxnQkFBZSxXQUFXLGlCQUFpQixNQUFNO0FBR3JELFFBQUk7QUFDRixXQUFLLEdBQUc7QUFBQSxhQUNELEtBQVA7QUFDQSxhQUFPLE9BQU8sZUFBZSxHQUFHLEVBQUU7QUFBQTtBQUFBLEtBRW5DO0FBRUgsTUFBSTtBQUdKLE1BQU0sa0JBQ0osV0FBVyw0QkFHRixlQUFnQixDQUFDLE9BQU8sVUFBVSxXQUFXO0FBQ3BELFFBQUksVUFBVSxXQUFXLEdBQUc7QUFDMUIsWUFBTSxJQUFJLFVBQVUsa0JBQWtCO0FBQUEsSUFDeEM7QUFFQSxTQUFLLFNBQVM7QUFDWixnQkFBVSxJQUFJO0FBQUEsSUFDaEI7QUFDQSxZQUFRLE1BQU0sTUFBTTtBQUNwQixZQUFRLE1BQU0sTUFBTTtBQUNwQixZQUFRLE1BQU0sWUFBWSxPQUFPLFNBQVMsUUFBUTtBQUNsRCxXQUFPLHFCQUFxQixRQUFRLEtBQUssRUFBRTtBQUFBO0FBRy9DLFNBQU8sVUFBVTtBQUFBLElBQ2Y7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDRjtBQUFBOzs7O0FDbEpBLE1BQU0sZUFBZSxPQUFPLElBQUksdUJBQXVCO0FBRXZELFdBQVMsZUFBZ0IsR0FBRztBQUMxQixXQUFPLFdBQVc7QUFBQTtBQUdwQixXQUFTLGVBQWdCLENBQUMsV0FBVztBQUNuQyxRQUFJLGNBQWMsV0FBVztBQUMzQixhQUFPLGVBQWUsWUFBWSxjQUFjO0FBQUEsUUFDOUMsT0FBTztBQUFBLFFBQ1AsVUFBVTtBQUFBLFFBQ1YsWUFBWTtBQUFBLFFBQ1osY0FBYztBQUFBLE1BQ2hCLENBQUM7QUFFRDtBQUFBLElBQ0Y7QUFFQSxVQUFNLFlBQVksSUFBSSxJQUFJLFNBQVM7QUFFbkMsUUFBSSxVQUFVLGFBQWEsV0FBVyxVQUFVLGFBQWEsVUFBVTtBQUNyRSxZQUFNLElBQUksVUFBVSxnREFBZ0QsVUFBVSxVQUFVO0FBQUEsSUFDMUY7QUFFQSxXQUFPLGVBQWUsWUFBWSxjQUFjO0FBQUEsTUFDOUMsT0FBTztBQUFBLE1BQ1AsVUFBVTtBQUFBLE1BQ1YsWUFBWTtBQUFBLE1BQ1osY0FBYztBQUFBLElBQ2hCLENBQUM7QUFBQTtBQUdILFNBQU8sVUFBVTtBQUFBLElBQ2Y7QUFBQSxJQUNBO0FBQUEsRUFDRjtBQUFBOzs7O0FDckNBLFFBQVEsbUJBQW1CLG1CQUFtQixzQkFBc0I7QUFDcEUsUUFBUTtBQUNSLFFBQVE7QUFDUixRQUFRLFlBQVksYUFBYTtBQUNqQyxNQUFNO0FBQ04sUUFBUTtBQUVSLE1BQUksa0JBQWtCLENBQUM7QUFJdkIsTUFBSTtBQUVKLE1BQUk7QUFDRjtBQUNBLFVBQU0seUJBQXlCLENBQUMsVUFBVSxVQUFVLFFBQVE7QUFDNUQsc0JBQWtCLE9BQU8sVUFBVSxFQUFFLE9BQU8sQ0FBQyxTQUFTLHVCQUF1QixTQUFTLElBQUksQ0FBQztBQUFBLFVBRTNGO0FBQUE7QUFHRixXQUFTLFdBQVksQ0FBQyxVQUFVO0FBSTlCLFVBQU0sVUFBVSxTQUFTO0FBQ3pCLFVBQU0sU0FBUyxRQUFRO0FBQ3ZCLFdBQU8sV0FBVyxJQUFJLE9BQU8sUUFBUSxTQUFTLEdBQUcsU0FBUztBQUFBO0FBSTVELFdBQVMsbUJBQW9CLENBQUMsVUFBVSxpQkFBaUI7QUFFdkQsU0FBSyxrQkFBa0IsSUFBSSxTQUFTLE1BQU0sR0FBRztBQUMzQyxhQUFPO0FBQUEsSUFDVDtBQUlBLFFBQUksV0FBVyxTQUFTLFlBQVksSUFBSSxVQUFVO0FBSWxELFFBQUksYUFBYSxRQUFRLG1CQUFtQixRQUFRLEdBQUc7QUFDckQsaUJBQVcsSUFBSSxJQUFJLFVBQVUsWUFBWSxRQUFRLENBQUM7QUFBQSxJQUNwRDtBQUlBLFFBQUksYUFBYSxTQUFTLE1BQU07QUFDOUIsZUFBUyxPQUFPO0FBQUEsSUFDbEI7QUFHQSxXQUFPO0FBQUE7QUFJVCxXQUFTLGlCQUFrQixDQUFDLFNBQVM7QUFDbkMsV0FBTyxRQUFRLFFBQVEsUUFBUSxRQUFRLFNBQVM7QUFBQTtBQUdsRCxXQUFTLGNBQWUsQ0FBQyxTQUFTO0FBRWhDLFVBQU0sTUFBTSxrQkFBa0IsT0FBTztBQUlyQyxRQUFJLHFCQUFxQixHQUFHLEtBQUssWUFBWSxJQUFJLElBQUksSUFBSSxHQUFHO0FBQzFELGFBQU87QUFBQSxJQUNUO0FBR0EsV0FBTztBQUFBO0FBR1QsV0FBUyxXQUFZLENBQUMsUUFBUTtBQUM1QixXQUFPLGtCQUFrQixVQUN2QixRQUFRLGFBQWEsU0FBUyxXQUM5QixRQUFRLGFBQWEsU0FBUztBQUFBO0FBVWxDLFdBQVMsbUJBQW9CLENBQUMsWUFBWTtBQUN4QyxhQUFTLElBQUksRUFBRyxJQUFJLFdBQVcsVUFBVSxHQUFHO0FBQzFDLFlBQU0sSUFBSSxXQUFXLFdBQVcsQ0FBQztBQUNqQyxZQUdNLE1BQU0sS0FDTCxLQUFLLE1BQVEsS0FBSyxPQUNsQixLQUFLLE9BQVEsS0FBSyxNQUd2QjtBQUNBLGVBQU87QUFBQSxNQUNUO0FBQUEsSUFDRjtBQUNBLFdBQU87QUFBQTtBQU9ULFdBQVMsZUFBZ0IsQ0FBQyxHQUFHO0FBQzNCLFlBQVE7QUFBQSxXQUNEO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUVILGVBQU87QUFBQTtBQUdQLGVBQU8sS0FBSyxNQUFRLEtBQUs7QUFBQTtBQUFBO0FBTy9CLFdBQVMsZ0JBQWlCLENBQUMsWUFBWTtBQUNyQyxRQUFJLFdBQVcsV0FBVyxHQUFHO0FBQzNCLGFBQU87QUFBQSxJQUNUO0FBQ0EsYUFBUyxJQUFJLEVBQUcsSUFBSSxXQUFXLFVBQVUsR0FBRztBQUMxQyxXQUFLLGdCQUFnQixXQUFXLFdBQVcsQ0FBQyxDQUFDLEdBQUc7QUFDOUMsZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGO0FBQ0EsV0FBTztBQUFBO0FBT1QsV0FBUyxpQkFBa0IsQ0FBQyxnQkFBZ0I7QUFDMUMsV0FBTyxpQkFBaUIsY0FBYztBQUFBO0FBT3hDLFdBQVMsa0JBQW1CLENBQUMsZ0JBQWdCO0FBRzNDLFFBQ0UsZUFBZSxXQUFXLElBQUksS0FDOUIsZUFBZSxXQUFXLEdBQUcsS0FDN0IsZUFBZSxTQUFTLElBQUksS0FDNUIsZUFBZSxTQUFTLEdBQUcsR0FDM0I7QUFDQSxhQUFPO0FBQUEsSUFDVDtBQUVBLFFBQ0UsZUFBZSxTQUFTLElBQUksS0FDNUIsZUFBZSxTQUFTLElBQUksS0FDNUIsZUFBZSxTQUFTLElBQUksR0FDNUI7QUFDQSxhQUFPO0FBQUEsSUFDVDtBQUVBLFdBQU87QUFBQTtBQUlULFdBQVMsa0NBQW1DLENBQUMsU0FBUyxnQkFBZ0I7QUFVcEUsWUFBUSxnQkFBZ0I7QUFJeEIsVUFBTSxnQkFBZ0IsWUFBWSxJQUFJLGlCQUFpQixLQUFLLElBQUksTUFBTSxHQUFHO0FBTXpFLFFBQUksU0FBUztBQUNiLFFBQUksYUFBYSxTQUFTLEdBQUc7QUFHM0IsZUFBUyxJQUFJLGFBQWEsT0FBUSxNQUFNLEdBQUcsS0FBSztBQUM5QyxjQUFNLFFBQVEsYUFBYSxJQUFJLEdBQUcsS0FBSztBQUN2QyxZQUFJLHFCQUFxQixJQUFJLEtBQUssR0FBRztBQUNuQyxtQkFBUztBQUNUO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBR0EsUUFBSSxXQUFXLElBQUk7QUFDakIsY0FBUSxpQkFBaUI7QUFBQSxJQUMzQjtBQUFBO0FBSUYsV0FBUyw4QkFBK0IsR0FBRztBQUV6QyxXQUFPO0FBQUE7QUFJVCxXQUFTLFNBQVUsR0FBRztBQUVwQixXQUFPO0FBQUE7QUFJVCxXQUFTLFFBQVMsR0FBRztBQUVuQixXQUFPO0FBQUE7QUFHVCxXQUFTLG1CQUFvQixDQUFDLGFBQWE7QUFVekMsUUFBSSxTQUFTO0FBR2IsYUFBUyxZQUFZO0FBR3JCLGdCQUFZLFlBQVksSUFBSSxrQkFBa0IsTUFBTTtBQUFBO0FBVXRELFdBQVMseUJBQTBCLENBQUMsU0FBUztBQUUzQyxRQUFJLG1CQUFtQixRQUFRO0FBRy9CLFFBQUksUUFBUSxxQkFBcUIsVUFBVSxRQUFRLFNBQVMsYUFBYTtBQUN2RSxVQUFJLGtCQUFrQjtBQUNwQixnQkFBUSxZQUFZLE9BQU8sVUFBVSxnQkFBZ0I7QUFBQSxNQUN2RDtBQUFBLElBR0YsV0FBVyxRQUFRLFdBQVcsU0FBUyxRQUFRLFdBQVcsUUFBUTtBQUVoRSxjQUFRLFFBQVE7QUFBQSxhQUNUO0FBRUgsNkJBQW1CO0FBQ25CO0FBQUEsYUFDRztBQUFBLGFBQ0E7QUFBQSxhQUNBO0FBRUgsY0FBSSxRQUFRLFVBQVUsa0JBQWtCLFFBQVEsTUFBTSxNQUFNLGtCQUFrQixrQkFBa0IsT0FBTyxDQUFDLEdBQUc7QUFDekcsK0JBQW1CO0FBQUEsVUFDckI7QUFDQTtBQUFBLGFBQ0c7QUFFSCxlQUFLLFdBQVcsU0FBUyxrQkFBa0IsT0FBTyxDQUFDLEdBQUc7QUFDcEQsK0JBQW1CO0FBQUEsVUFDckI7QUFDQTtBQUFBO0FBQUE7QUFLSixVQUFJLGtCQUFrQjtBQUVwQixnQkFBUSxZQUFZLE9BQU8sVUFBVSxnQkFBZ0I7QUFBQSxNQUN2RDtBQUFBLElBQ0Y7QUFBQTtBQUdGLFdBQVMsMEJBQTJCLENBQUMsK0JBQStCO0FBRWxFLFdBQU8sYUFBWSxJQUFJO0FBQUE7QUFJekIsV0FBUyxzQkFBdUIsQ0FBQyxZQUFZO0FBQzNDLFdBQU87QUFBQSxNQUNMLFdBQVcsV0FBVyxhQUFhO0FBQUEsTUFDbkMsbUJBQW1CO0FBQUEsTUFDbkIsaUJBQWlCO0FBQUEsTUFDakIsdUJBQXVCLFdBQVcsYUFBYTtBQUFBLE1BQy9DLDZCQUE2QjtBQUFBLE1BQzdCLCtCQUErQjtBQUFBLE1BQy9CLDhCQUE4QjtBQUFBLE1BQzlCLFNBQVM7QUFBQSxNQUNULGlCQUFpQjtBQUFBLE1BQ2pCLGlCQUFpQjtBQUFBLE1BQ2pCLDJCQUEyQjtBQUFBLElBQzdCO0FBQUE7QUFJRixXQUFTLG1CQUFvQixHQUFHO0FBRTlCLFdBQU87QUFBQSxNQUNMLGdCQUFnQjtBQUFBLElBQ2xCO0FBQUE7QUFJRixXQUFTLG9CQUFxQixDQUFDLGlCQUFpQjtBQUM5QyxXQUFPO0FBQUEsTUFDTCxnQkFBZ0IsZ0JBQWdCO0FBQUEsSUFDbEM7QUFBQTtBQUlGLFdBQVMseUJBQTBCLENBQUMsU0FBUztBQUUzQyxVQUFNLFNBQVMsUUFBUTtBQUd2QixXQUFPLE1BQU07QUFJYixRQUFJLGlCQUFpQjtBQUdyQixRQUFJLFFBQVEsYUFBYSxVQUFVO0FBSWpDLFlBQU0sZUFBZSxnQkFBZ0I7QUFFckMsV0FBSyxnQkFBZ0IsYUFBYSxXQUFXLFFBQVE7QUFDbkQsZUFBTztBQUFBLE1BQ1Q7QUFHQSx1QkFBaUIsSUFBSSxJQUFJLFlBQVk7QUFBQSxJQUN2QyxXQUFXLFFBQVEsb0JBQW9CLEtBQUs7QUFFMUMsdUJBQWlCLFFBQVE7QUFBQSxJQUMzQjtBQUlBLFFBQUksY0FBYyxvQkFBb0IsY0FBYztBQUlwRCxVQUFNLGlCQUFpQixvQkFBb0IsZ0JBQWdCLElBQUk7QUFJL0QsUUFBSSxZQUFZLFNBQVMsRUFBRSxTQUFTLE1BQU07QUFDeEMsb0JBQWM7QUFBQSxJQUNoQjtBQUVBLFVBQU0sZ0JBQWdCLFdBQVcsU0FBUyxXQUFXO0FBQ3JELFVBQU0sOEJBQThCLDRCQUE0QixXQUFXLE1BQ3hFLDRCQUE0QixRQUFRLEdBQUc7QUFHMUMsWUFBUTtBQUFBLFdBQ0Q7QUFBVSxlQUFPLGtCQUFrQixPQUFPLGlCQUFpQixvQkFBb0IsZ0JBQWdCLElBQUk7QUFBQSxXQUNuRztBQUFjLGVBQU87QUFBQSxXQUNyQjtBQUNILGVBQU8sZ0JBQWdCLGlCQUFpQjtBQUFBLFdBQ3JDO0FBQ0gsZUFBTyxnQkFBZ0IsY0FBYztBQUFBLFdBQ2xDLG1DQUFtQztBQUN0QyxjQUFNLGFBQWEsa0JBQWtCLE9BQU87QUFJNUMsWUFBSSxXQUFXLGFBQWEsVUFBVSxHQUFHO0FBQ3ZDLGlCQUFPO0FBQUEsUUFDVDtBQUtBLFlBQUksNEJBQTRCLFdBQVcsTUFBTSw0QkFBNEIsVUFBVSxHQUFHO0FBQ3hGLGlCQUFPO0FBQUEsUUFDVDtBQUdBLGVBQU87QUFBQSxNQUNUO0FBQUEsV0FDSztBQUFBLFdBT0E7QUFBQTtBQVNILGVBQU8sOEJBQThCLGdCQUFnQjtBQUFBO0FBQUE7QUFTM0QsV0FBUyxtQkFBb0IsQ0FBQyxLQUFLLFlBQVk7QUFFN0MsV0FBTyxlQUFlLEdBQUc7QUFHekIsUUFBSSxJQUFJLGFBQWEsV0FBVyxJQUFJLGFBQWEsWUFBWSxJQUFJLGFBQWEsVUFBVTtBQUN0RixhQUFPO0FBQUEsSUFDVDtBQUdBLFFBQUksV0FBVztBQUdmLFFBQUksV0FBVztBQUdmLFFBQUksT0FBTztBQUdYLFFBQUksWUFBWTtBQUVkLFVBQUksV0FBVztBQUdmLFVBQUksU0FBUztBQUFBLElBQ2Y7QUFHQSxXQUFPO0FBQUE7QUFHVCxXQUFTLDJCQUE0QixDQUFDLEtBQUs7QUFDekMsVUFBTSxlQUFlLE1BQU07QUFDekIsYUFBTztBQUFBLElBQ1Q7QUFHQSxRQUFJLElBQUksU0FBUyxpQkFBaUIsSUFBSSxTQUFTLGdCQUFnQjtBQUM3RCxhQUFPO0FBQUEsSUFDVDtBQUdBLFFBQUksSUFBSSxhQUFhO0FBQVMsYUFBTztBQUdyQyxRQUFJLElBQUksYUFBYTtBQUFTLGFBQU87QUFFckMsV0FBTywrQkFBK0IsSUFBSSxNQUFNO0FBRWhELGFBQVMsOEJBQStCLENBQUMsUUFBUTtBQUUvQyxVQUFJLFVBQVUsUUFBUSxXQUFXO0FBQVEsZUFBTztBQUVoRCxZQUFNLGNBQWMsSUFBSSxJQUFJLE1BQU07QUFHbEMsVUFBSSxZQUFZLGFBQWEsWUFBWSxZQUFZLGFBQWEsUUFBUTtBQUN4RSxlQUFPO0FBQUEsTUFDVDtBQUdBLFVBQUksc0RBQXNELEtBQUssWUFBWSxRQUFRLE1BQ2pGLFlBQVksYUFBYSxlQUFlLFlBQVksU0FBUyxTQUFTLFlBQVksTUFDbEYsWUFBWSxTQUFTLFNBQVMsWUFBWSxHQUFJO0FBQzlDLGVBQU87QUFBQSxNQUNUO0FBR0EsYUFBTztBQUFBO0FBQUE7QUFTWCxXQUFTLFVBQVcsQ0FBQyxPQUFPLGNBQWM7QUFLeEMsUUFBSSxXQUFXLFdBQVc7QUFDeEIsYUFBTztBQUFBLElBQ1Q7QUFHQSxVQUFNLGlCQUFpQixjQUFjLFlBQVk7QUFHakQsUUFBSSxtQkFBbUIsZUFBZTtBQUNwQyxhQUFPO0FBQUEsSUFDVDtBQU1BLFFBQUksZUFBZSxXQUFXLEdBQUc7QUFDL0IsYUFBTztBQUFBLElBQ1Q7QUFJQSxVQUFNLFlBQVkscUJBQXFCLGNBQWM7QUFDckQsVUFBTSxXQUFXLDhCQUE4QixnQkFBZ0IsU0FBUztBQUd4RSxlQUFXLFFBQVEsVUFBVTtBQUUzQixZQUFNLFlBQVksS0FBSztBQUd2QixZQUFNLGdCQUFnQixLQUFLO0FBTTNCLFVBQUksY0FBYyxPQUFPLFdBQVcsU0FBUyxFQUFFLE9BQU8sS0FBSyxFQUFFLE9BQU8sUUFBUTtBQUU1RSxVQUFJLFlBQVksWUFBWSxTQUFTLE9BQU8sS0FBSztBQUMvQyxZQUFJLFlBQVksWUFBWSxTQUFTLE9BQU8sS0FBSztBQUMvQyx3QkFBYyxZQUFZLE1BQU0sR0FBRyxFQUFFO0FBQUEsUUFDdkMsT0FBTztBQUNMLHdCQUFjLFlBQVksTUFBTSxHQUFHLEVBQUU7QUFBQTtBQUFBLE1BRXpDO0FBSUEsVUFBSSxtQkFBbUIsYUFBYSxhQUFhLEdBQUc7QUFDbEQsZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGO0FBR0EsV0FBTztBQUFBO0FBTVQsTUFBTSx1QkFBdUI7QUFNN0IsV0FBUyxhQUFjLENBQUMsVUFBVTtBQUdoQyxVQUFNLFNBQVMsQ0FBQztBQUdoQixRQUFJLFFBQVE7QUFHWixlQUFXLFNBQVMsU0FBUyxNQUFNLEdBQUcsR0FBRztBQUV2QyxjQUFRO0FBR1IsWUFBTSxjQUFjLHFCQUFxQixLQUFLLEtBQUs7QUFHbkQsVUFDRSxnQkFBZ0IsUUFDaEIsWUFBWSxXQUFXLGFBQ3ZCLFlBQVksT0FBTyxTQUFTLFdBQzVCO0FBS0E7QUFBQSxNQUNGO0FBR0EsWUFBTSxZQUFZLFlBQVksT0FBTyxLQUFLLFlBQVk7QUFJdEQsVUFBSSxnQkFBZ0IsU0FBUyxTQUFTLEdBQUc7QUFDdkMsZUFBTyxLQUFLLFlBQVksTUFBTTtBQUFBLE1BQ2hDO0FBQUEsSUFDRjtBQUdBLFFBQUksVUFBVSxNQUFNO0FBQ2xCLGFBQU87QUFBQSxJQUNUO0FBRUEsV0FBTztBQUFBO0FBTVQsV0FBUyxvQkFBcUIsQ0FBQyxjQUFjO0FBRzNDLFFBQUksWUFBWSxhQUFhLEdBQUc7QUFHaEMsUUFBSSxVQUFVLE9BQU8sS0FBSztBQUN4QixhQUFPO0FBQUEsSUFDVDtBQUVBLGFBQVMsSUFBSSxFQUFHLElBQUksYUFBYSxVQUFVLEdBQUc7QUFDNUMsWUFBTSxXQUFXLGFBQWE7QUFHOUIsVUFBSSxTQUFTLEtBQUssT0FBTyxLQUFLO0FBQzVCLG9CQUFZO0FBQ1o7QUFBQSxNQUVGLFdBQVcsVUFBVSxPQUFPLEtBQUs7QUFDL0I7QUFBQSxNQUdGLFdBQVcsU0FBUyxLQUFLLE9BQU8sS0FBSztBQUNuQyxvQkFBWTtBQUFBLE1BQ2Q7QUFBQSxJQUNGO0FBQ0EsV0FBTztBQUFBO0FBR1QsV0FBUyw2QkFBOEIsQ0FBQyxjQUFjLFdBQVc7QUFDL0QsUUFBSSxhQUFhLFdBQVcsR0FBRztBQUM3QixhQUFPO0FBQUEsSUFDVDtBQUVBLFFBQUksTUFBTTtBQUNWLGFBQVMsSUFBSSxFQUFHLElBQUksYUFBYSxVQUFVLEdBQUc7QUFDNUMsVUFBSSxhQUFhLEdBQUcsU0FBUyxXQUFXO0FBQ3RDLHFCQUFhLFNBQVMsYUFBYTtBQUFBLE1BQ3JDO0FBQUEsSUFDRjtBQUVBLGlCQUFhLFNBQVM7QUFFdEIsV0FBTztBQUFBO0FBV1QsV0FBUyxrQkFBbUIsQ0FBQyxhQUFhLGVBQWU7QUFDdkQsUUFBSSxZQUFZLFdBQVcsY0FBYyxRQUFRO0FBQy9DLGFBQU87QUFBQSxJQUNUO0FBQ0EsYUFBUyxJQUFJLEVBQUcsSUFBSSxZQUFZLFVBQVUsR0FBRztBQUMzQyxVQUFJLFlBQVksT0FBTyxjQUFjLElBQUk7QUFDdkMsWUFDRyxZQUFZLE9BQU8sT0FBTyxjQUFjLE9BQU8sT0FDL0MsWUFBWSxPQUFPLE9BQU8sY0FBYyxPQUFPLEtBQ2hEO0FBQ0E7QUFBQSxRQUNGO0FBQ0EsZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGO0FBRUEsV0FBTztBQUFBO0FBSVQsV0FBUyw2Q0FBOEMsQ0FBQyxTQUFTO0FBQUE7QUFTakUsV0FBUyxVQUFXLENBQUMsR0FBRyxHQUFHO0FBRXpCLFFBQUksRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFdBQVcsUUFBUTtBQUNoRCxhQUFPO0FBQUEsSUFDVDtBQUlBLFFBQUksRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU07QUFDL0UsYUFBTztBQUFBLElBQ1Q7QUFHQSxXQUFPO0FBQUE7QUFHVCxXQUFTLHFCQUFzQixHQUFHO0FBQ2hDLFFBQUk7QUFDSixRQUFJO0FBQ0osVUFBTSxVQUFVLElBQUksUUFBUSxDQUFDLFNBQVMsV0FBVztBQUMvQyxZQUFNO0FBQ04sWUFBTTtBQUFBLEtBQ1A7QUFFRCxXQUFPLEVBQUUsU0FBUyxTQUFTLEtBQUssUUFBUSxJQUFJO0FBQUE7QUFHOUMsV0FBUyxTQUFVLENBQUMsYUFBYTtBQUMvQixXQUFPLFlBQVksV0FBVyxVQUFVO0FBQUE7QUFHMUMsV0FBUyxXQUFZLENBQUMsYUFBYTtBQUNqQyxXQUFPLFlBQVksV0FBVyxVQUFVLGFBQ3RDLFlBQVksV0FBVyxVQUFVO0FBQUE7QUFHckMsTUFBTSx3QkFBd0I7QUFBQSxJQUM1QixRQUFRO0FBQUEsSUFDUixRQUFRO0FBQUEsSUFDUixLQUFLO0FBQUEsSUFDTCxLQUFLO0FBQUEsSUFDTCxNQUFNO0FBQUEsSUFDTixNQUFNO0FBQUEsSUFDTixTQUFTO0FBQUEsSUFDVCxTQUFTO0FBQUEsSUFDVCxNQUFNO0FBQUEsSUFDTixNQUFNO0FBQUEsSUFDTixLQUFLO0FBQUEsSUFDTCxLQUFLO0FBQUEsRUFDUDtBQUdBLFNBQU8sZUFBZSx1QkFBdUIsSUFBSTtBQU1qRCxXQUFTLGVBQWdCLENBQUMsUUFBUTtBQUNoQyxXQUFPLHNCQUFzQixPQUFPLFlBQVksTUFBTTtBQUFBO0FBSXhELFdBQVMsb0NBQXFDLENBQUMsT0FBTztBQUVwRCxVQUFNLFNBQVMsS0FBSyxVQUFVLEtBQUs7QUFHbkMsUUFBSSxXQUFXLFdBQVc7QUFDeEIsWUFBTSxJQUFJLFVBQVUsZ0NBQWdDO0FBQUEsSUFDdEQ7QUFHQSxrQkFBYyxXQUFXLFFBQVE7QUFHakMsV0FBTztBQUFBO0FBSVQsTUFBTSxzQkFBc0IsT0FBTyxlQUFlLE9BQU8sZUFBZSxDQUFDLEVBQUUsT0FBTyxVQUFVLENBQUMsQ0FBQztBQVE5RixXQUFTLFlBQWEsQ0FBQyxVQUFVLE1BQU0sTUFBTTtBQUMzQyxVQUFNLFNBQVM7QUFBQSxNQUNiLE9BQU87QUFBQSxNQUNQO0FBQUEsTUFDQSxRQUFRO0FBQUEsSUFDVjtBQUVBLFVBQU0sSUFBSTtBQUFBLE1BQ1IsSUFBSyxHQUFHO0FBWU4sWUFBSSxPQUFPLGVBQWUsSUFBSSxNQUFNLEdBQUc7QUFDckMsZ0JBQU0sSUFBSSxVQUNSLGdFQUFnRSxnQkFDbEU7QUFBQSxRQUNGO0FBS0EsZ0JBQVEsT0FBTyxhQUFNLFdBQVc7QUFDaEMsY0FBTSxTQUFTLE9BQU87QUFHdEIsY0FBTSxNQUFNLE9BQU87QUFJbkIsWUFBSSxTQUFTLEtBQUs7QUFDaEIsaUJBQU8sRUFBRSxPQUFPLFdBQVcsTUFBTSxLQUFLO0FBQUEsUUFDeEM7QUFHQSxjQUFNLE9BQU8sT0FBTztBQUdwQixlQUFPLFFBQVEsUUFBUTtBQUd2QixlQUFPLGVBQWUsTUFBTSxLQUFJO0FBQUE7QUFBQSxPQUlqQyxPQUFPLGNBQWMsR0FBRztBQUFBLElBQzNCO0FBR0EsV0FBTyxlQUFlLEdBQUcsbUJBQW1CO0FBRzVDLFdBQU8sT0FBTyxlQUFlLENBQUMsR0FBRyxDQUFDO0FBQUE7QUFJcEMsV0FBUyxjQUFlLENBQUMsTUFBTSxNQUFNO0FBQ25DLFFBQUk7QUFHSixZQUFRO0FBQUEsV0FDRCxPQUFPO0FBS1YsaUJBQVMsS0FBSztBQUNkO0FBQUEsTUFDRjtBQUFBLFdBQ0ssU0FBUztBQUtaLGlCQUFTLEtBQUs7QUFDZDtBQUFBLE1BQ0Y7QUFBQSxXQUNLLGFBQWE7QUFXaEIsaUJBQVM7QUFDVDtBQUFBLE1BQ0Y7QUFBQTtBQUlGLFdBQU8sRUFBRSxPQUFPLFFBQVEsTUFBTSxNQUFNO0FBQUE7QUFNdEMsaUJBQWUsYUFBYyxDQUFDLE1BQU0sYUFBYSxrQkFBa0I7QUFNakUsVUFBTSxlQUFlO0FBSXJCLFVBQU0sYUFBYTtBQUtuQixRQUFJO0FBRUosUUFBSTtBQUNGLGVBQVMsS0FBSyxPQUFPLFVBQVU7QUFBQSxhQUN4QixHQUFQO0FBQ0EsaUJBQVcsQ0FBQztBQUNaO0FBQUE7QUFJRixRQUFJO0FBQ0YsWUFBTSxTQUFTLE1BQU0sYUFBYSxNQUFNO0FBQ3hDLG1CQUFhLE1BQU07QUFBQSxhQUNaLEdBQVA7QUFDQSxpQkFBVyxDQUFDO0FBQUE7QUFBQTtBQUtoQixNQUFJLGtCQUFpQixXQUFXO0FBRWhDLFdBQVMsb0JBQXFCLENBQUMsUUFBUTtBQUNyQyxTQUFLLGlCQUFnQjtBQUNuQixnREFBdUM7QUFBQSxJQUN6QztBQUVBLFdBQU8sa0JBQWtCLG1CQUN2QixPQUFPLE9BQU8saUJBQWlCLDJCQUN4QixPQUFPLFFBQVE7QUFBQTtBQUkxQixNQUFNLDBCQUEwQjtBQU1oQyxXQUFTLGdCQUFpQixDQUFDLE9BQU87QUFLaEMsUUFBSSxNQUFNLFNBQVMseUJBQXlCO0FBQzFDLGFBQU8sT0FBTyxhQUFhLEdBQUcsS0FBSztBQUFBLElBQ3JDO0FBRUEsV0FBTyxNQUFNLE9BQU8sQ0FBQyxVQUFVLFlBQVksV0FBVyxPQUFPLGFBQWEsT0FBTyxHQUFHLEVBQUU7QUFBQTtBQU14RixXQUFTLG1CQUFvQixDQUFDLFlBQVk7QUFDeEMsUUFBSTtBQUNGLGlCQUFXLE1BQU07QUFBQSxhQUNWLEtBQVA7QUFFQSxXQUFLLElBQUksUUFBUSxTQUFTLDhCQUE4QixHQUFHO0FBQ3pELGNBQU07QUFBQSxNQUNSO0FBQUE7QUFBQTtBQVFKLFdBQVMsZ0JBQWlCLENBQUMsT0FBTztBQUVoQyxhQUFTLElBQUksRUFBRyxJQUFJLE1BQU0sUUFBUSxLQUFLO0FBQ3JDLGFBQU8sTUFBTSxXQUFXLENBQUMsS0FBSyxHQUFJO0FBQUEsSUFDcEM7QUFLQSxXQUFPO0FBQUE7QUFRVCxpQkFBZSxZQUFhLENBQUMsUUFBUTtBQUNuQyxVQUFNLFFBQVEsQ0FBQztBQUNmLFFBQUksYUFBYTtBQUVqQixXQUFPLE1BQU07QUFDWCxjQUFRLE1BQU0sT0FBTyxVQUFVLE1BQU0sT0FBTyxLQUFLO0FBRWpELFVBQUksTUFBTTtBQUVSLGVBQU8sT0FBTyxPQUFPLE9BQU8sVUFBVTtBQUFBLE1BQ3hDO0FBSUEsV0FBSyxhQUFhLEtBQUssR0FBRztBQUN4QixjQUFNLElBQUksVUFBVSwrQkFBK0I7QUFBQSxNQUNyRDtBQUdBLFlBQU0sS0FBSyxLQUFLO0FBQ2hCLG9CQUFjLE1BQU07QUFBQSxJQUd0QjtBQUFBO0FBT0YsV0FBUyxVQUFXLENBQUMsS0FBSztBQUN4QixXQUFPLGNBQWMsR0FBRztBQUV4QixVQUFNLFdBQVcsSUFBSTtBQUVyQixXQUFPLGFBQWEsWUFBWSxhQUFhLFdBQVcsYUFBYTtBQUFBO0FBTXZFLFdBQVMsaUJBQWtCLENBQUMsS0FBSztBQUMvQixlQUFXLFFBQVEsVUFBVTtBQUMzQixhQUFPLElBQUksV0FBVyxRQUFRO0FBQUEsSUFDaEM7QUFFQSxXQUFPLElBQUksYUFBYTtBQUFBO0FBTzFCLFdBQVMsb0JBQXFCLENBQUMsS0FBSztBQUNsQyxXQUFPLGNBQWMsR0FBRztBQUV4QixVQUFNLFdBQVcsSUFBSTtBQUVyQixXQUFPLGFBQWEsV0FBVyxhQUFhO0FBQUE7QUFNOUMsTUFBTSxTQUFTLE9BQU8sV0FBVyxDQUFDLE1BQU0sUUFBUSxPQUFPLFVBQVUsZUFBZSxLQUFLLE1BQU0sR0FBRztBQUU5RixTQUFPLFVBQVU7QUFBQSxJQUNmO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNGO0FBQUE7Ozs7QUNybkNBLFNBQU8sVUFBVTtBQUFBLElBQ2YsTUFBTSxPQUFPLEtBQUs7QUFBQSxJQUNsQixVQUFVLE9BQU8sU0FBUztBQUFBLElBQzFCLFNBQVMsT0FBTyxRQUFRO0FBQUEsSUFDeEIsUUFBUSxPQUFPLE9BQU87QUFBQSxJQUN0QixRQUFRLE9BQU8sT0FBTztBQUFBLElBQ3RCLFFBQVEsT0FBTyxPQUFPO0FBQUEsRUFDeEI7QUFBQTs7OztBQ1BBLFFBQVE7QUFDUixRQUFRLFFBQVE7QUFHaEIsTUFBTSxTQUFTLENBQUM7QUFDaEIsU0FBTyxhQUFhLENBQUM7QUFDckIsU0FBTyxPQUFPLENBQUM7QUFDZixTQUFPLFNBQVMsQ0FBQztBQUVqQixTQUFPLE9BQU8sb0JBQXFCLENBQUMsU0FBUztBQUMzQyxXQUFPLElBQUksVUFBVSxHQUFHLFFBQVEsV0FBVyxRQUFRLFNBQVM7QUFBQTtBQUc5RCxTQUFPLE9BQU8sMkJBQTRCLENBQUMsU0FBUztBQUNsRCxVQUFNLFNBQVMsUUFBUSxNQUFNLFdBQVcsSUFBSSxLQUFLO0FBQ2pELFVBQU0sVUFDSixHQUFHLFFBQVEsdUNBQ1gsR0FBRyxXQUFXLFFBQVEsTUFBTSxLQUFLLElBQUk7QUFFdkMsV0FBTyxPQUFPLE9BQU8sVUFBVTtBQUFBLE1BQzdCLFFBQVEsUUFBUTtBQUFBLE1BQ2hCO0FBQUEsSUFDRixDQUFDO0FBQUE7QUFHSCxTQUFPLE9BQU8sMEJBQTJCLENBQUMsU0FBUztBQUNqRCxXQUFPLE9BQU8sT0FBTyxVQUFVO0FBQUEsTUFDN0IsUUFBUSxRQUFRO0FBQUEsTUFDaEIsU0FBUyxJQUFJLFFBQVEsd0JBQXdCLFFBQVE7QUFBQSxJQUN2RCxDQUFDO0FBQUE7QUFJSCxTQUFPLHFCQUFzQixDQUFDLEdBQUcsR0FBRyxPQUFPLFdBQVc7QUFDcEQsUUFBSSxNQUFNLFdBQVcsV0FBVyxhQUFhLElBQUk7QUFDL0MsWUFBTSxJQUFJLFVBQVUsb0JBQW9CO0FBQUEsSUFDMUMsT0FBTztBQUNMLGFBQU8sSUFBSSxPQUFPLGlCQUFpQixFQUFFLFVBQVUsT0FBTztBQUFBO0FBQUE7QUFJMUQsU0FBTyw4QkFBK0IsR0FBRyxVQUFVLEtBQUssS0FBSztBQUMzRCxRQUFJLFNBQVMsS0FBSztBQUNoQixZQUFNLE9BQU8sT0FBTyxVQUFVO0FBQUEsUUFDNUIsU0FBUyxHQUFHLGVBQWUsUUFBUSxJQUFJLE1BQU0sa0JBQ3BDLE1BQU0sU0FBUyxVQUFVLE1BQU07QUFBQSxXQUNyQztBQUFBLE1BQ0wsQ0FBQztBQUFBLElBQ0g7QUFBQTtBQUdGLFNBQU8sNkJBQThCLEdBQUc7QUFDdEMsVUFBTSxPQUFPLE9BQU8sVUFBVTtBQUFBLE1BQzVCLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxJQUNYLENBQUM7QUFBQTtBQUlILFNBQU8sS0FBSyxlQUFnQixDQUFDLEdBQUc7QUFDOUIsbUJBQWU7QUFBQSxXQUNSO0FBQWEsZUFBTztBQUFBLFdBQ3BCO0FBQVcsZUFBTztBQUFBLFdBQ2xCO0FBQVUsZUFBTztBQUFBLFdBQ2pCO0FBQVUsZUFBTztBQUFBLFdBQ2pCO0FBQVUsZUFBTztBQUFBLFdBQ2pCO0FBQVUsZUFBTztBQUFBLFdBQ2pCO0FBQUEsV0FDQSxVQUFVO0FBQ2IsWUFBSSxNQUFNLE1BQU07QUFDZCxpQkFBTztBQUFBLFFBQ1Q7QUFFQSxlQUFPO0FBQUEsTUFDVDtBQUFBO0FBQUE7QUFLSixTQUFPLEtBQUssdUJBQXdCLENBQUMsR0FBRyxXQUFXLFlBQVksT0FBTyxDQUFDLEdBQUc7QUFDeEUsUUFBSTtBQUNKLFFBQUk7QUFHSixRQUFJLGNBQWMsSUFBSTtBQUVwQixtQkFBYSxLQUFLLElBQUksR0FBRyxFQUFFLElBQUk7QUFHL0IsVUFBSSxlQUFlLFlBQVk7QUFDN0IscUJBQWE7QUFBQSxNQUNmLE9BQU87QUFFTCxxQkFBYSxLQUFLLElBQUksSUFBSSxFQUFFLElBQUk7QUFBQTtBQUFBLElBRXBDLFdBQVcsZUFBZSxZQUFZO0FBSXBDLG1CQUFhO0FBR2IsbUJBQWEsS0FBSyxJQUFJLEdBQUcsU0FBUyxJQUFJO0FBQUEsSUFDeEMsT0FBTztBQUlMLG1CQUFhLEtBQUssSUFBSSxJQUFJLFNBQVMsSUFBSTtBQUd2QyxtQkFBYSxLQUFLLElBQUksR0FBRyxZQUFZLENBQUMsSUFBSTtBQUFBO0FBSTVDLFFBQUksSUFBSSxPQUFPLENBQUM7QUFHaEIsUUFBSSxNQUFNLEdBQUc7QUFDWCxVQUFJO0FBQUEsSUFDTjtBQUlBLFFBQUksS0FBSyxpQkFBaUIsTUFBTTtBQUU5QixVQUNFLE9BQU8sTUFBTSxDQUFDLEtBQ2QsTUFBTSxPQUFPLHFCQUNiLE1BQU0sT0FBTyxtQkFDYjtBQUNBLGNBQU0sT0FBTyxPQUFPLFVBQVU7QUFBQSxVQUM1QixRQUFRO0FBQUEsVUFDUixTQUFTLHFCQUFxQjtBQUFBLFFBQ2hDLENBQUM7QUFBQSxNQUNIO0FBR0EsVUFBSSxPQUFPLEtBQUssWUFBWSxDQUFDO0FBSTdCLFVBQUksSUFBSSxjQUFjLElBQUksWUFBWTtBQUNwQyxjQUFNLE9BQU8sT0FBTyxVQUFVO0FBQUEsVUFDNUIsUUFBUTtBQUFBLFVBQ1IsU0FBUyx5QkFBeUIsY0FBYyxtQkFBbUI7QUFBQSxRQUNyRSxDQUFDO0FBQUEsTUFDSDtBQUdBLGFBQU87QUFBQSxJQUNUO0FBS0EsU0FBSyxPQUFPLE1BQU0sQ0FBQyxLQUFLLEtBQUssVUFBVSxNQUFNO0FBRTNDLFVBQUksS0FBSyxJQUFJLEtBQUssSUFBSSxHQUFHLFVBQVUsR0FBRyxVQUFVO0FBS2hELFVBQUksS0FBSyxNQUFNLENBQUMsSUFBSSxNQUFNLEdBQUc7QUFDM0IsWUFBSSxLQUFLLE1BQU0sQ0FBQztBQUFBLE1BQ2xCLE9BQU87QUFDTCxZQUFJLEtBQUssS0FBSyxDQUFDO0FBQUE7QUFJakIsYUFBTztBQUFBLElBQ1Q7QUFHQSxRQUNFLE9BQU8sTUFBTSxDQUFDLEtBQ2IsTUFBTSxLQUFLLE9BQU8sR0FBRyxHQUFHLENBQUMsS0FDMUIsTUFBTSxPQUFPLHFCQUNiLE1BQU0sT0FBTyxtQkFDYjtBQUNBLGFBQU87QUFBQSxJQUNUO0FBR0EsUUFBSSxPQUFPLEtBQUssWUFBWSxDQUFDO0FBRzdCLFFBQUksSUFBSSxLQUFLLElBQUksR0FBRyxTQUFTO0FBSTdCLFFBQUksZUFBZSxZQUFZLEtBQUssS0FBSyxJQUFJLEdBQUcsU0FBUyxJQUFJLEdBQUc7QUFDOUQsYUFBTyxJQUFJLEtBQUssSUFBSSxHQUFHLFNBQVM7QUFBQSxJQUNsQztBQUdBLFdBQU87QUFBQTtBQUlULFNBQU8sS0FBSyxzQkFBdUIsQ0FBQyxHQUFHO0FBRXJDLFVBQU0sSUFBSSxLQUFLLE1BQU0sS0FBSyxJQUFJLENBQUMsQ0FBQztBQUdoQyxRQUFJLElBQUksR0FBRztBQUNULGFBQU8sS0FBSztBQUFBLElBQ2Q7QUFHQSxXQUFPO0FBQUE7QUFJVCxTQUFPLDRCQUE2QixDQUFDLFdBQVc7QUFDOUMsV0FBTyxDQUFDLE1BQU07QUFFWixVQUFJLE9BQU8sS0FBSyxLQUFLLENBQUMsTUFBTSxVQUFVO0FBQ3BDLGNBQU0sT0FBTyxPQUFPLFVBQVU7QUFBQSxVQUM1QixRQUFRO0FBQUEsVUFDUixTQUFTLGlCQUFpQixPQUFPLEtBQUssS0FBSyxDQUFDO0FBQUEsUUFDOUMsQ0FBQztBQUFBLE1BQ0g7QUFJQSxZQUFNLFNBQVMsSUFBSSxPQUFPLFlBQVk7QUFDdEMsWUFBTSxNQUFNLENBQUM7QUFHYixVQUNFLFdBQVcsb0JBQ0osT0FBTyxTQUFTLFlBQ3ZCO0FBQ0EsY0FBTSxPQUFPLE9BQU8sVUFBVTtBQUFBLFVBQzVCLFFBQVE7QUFBQSxVQUNSLFNBQVM7QUFBQSxRQUNYLENBQUM7QUFBQSxNQUNIO0FBR0EsYUFBTyxNQUFNO0FBQ1gsZ0JBQVEsTUFBTSxVQUFVLE9BQU8sS0FBSztBQUVwQyxZQUFJLE1BQU07QUFDUjtBQUFBLFFBQ0Y7QUFFQSxZQUFJLEtBQUssVUFBVSxLQUFLLENBQUM7QUFBQSxNQUMzQjtBQUVBLGFBQU87QUFBQTtBQUFBO0FBS1gsU0FBTywwQkFBMkIsQ0FBQyxjQUFjLGdCQUFnQjtBQUMvRCxXQUFPLENBQUMsTUFBTTtBQUVaLFVBQUksT0FBTyxLQUFLLEtBQUssQ0FBQyxNQUFNLFVBQVU7QUFDcEMsY0FBTSxPQUFPLE9BQU8sVUFBVTtBQUFBLFVBQzVCLFFBQVE7QUFBQSxVQUNSLFNBQVMsaUJBQWlCLE9BQU8sS0FBSyxLQUFLLENBQUM7QUFBQSxRQUM5QyxDQUFDO0FBQUEsTUFDSDtBQUdBLFlBQU0sU0FBUyxDQUFDO0FBRWhCLFdBQUssTUFBTSxRQUFRLENBQUMsR0FBRztBQUVyQixjQUFNLFFBQU8sT0FBTyxLQUFLLENBQUM7QUFFMUIsbUJBQVcsT0FBTyxPQUFNO0FBRXRCLGdCQUFNLFdBQVcsYUFBYSxHQUFHO0FBSWpDLGdCQUFNLGFBQWEsZUFBZSxFQUFFLElBQUk7QUFHeEMsaUJBQU8sWUFBWTtBQUFBLFFBQ3JCO0FBR0EsZUFBTztBQUFBLE1BQ1Q7QUFHQSxZQUFNLE9BQU8sUUFBUSxRQUFRLENBQUM7QUFHOUIsaUJBQVcsT0FBTyxNQUFNO0FBRXRCLGNBQU0sT0FBTyxRQUFRLHlCQUF5QixHQUFHLEdBQUc7QUFHcEQsWUFBSSxNQUFNLFlBQVk7QUFFcEIsZ0JBQU0sV0FBVyxhQUFhLEdBQUc7QUFJakMsZ0JBQU0sYUFBYSxlQUFlLEVBQUUsSUFBSTtBQUd4QyxpQkFBTyxZQUFZO0FBQUEsUUFDckI7QUFBQSxNQUNGO0FBR0EsYUFBTztBQUFBO0FBQUE7QUFJWCxTQUFPLDZCQUE4QixDQUFDLEdBQUc7QUFDdkMsV0FBTyxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU07QUFDdkIsVUFBSSxLQUFLLFdBQVcsV0FBVyxhQUFhLElBQUk7QUFDOUMsY0FBTSxPQUFPLE9BQU8sVUFBVTtBQUFBLFVBQzVCLFFBQVEsRUFBRTtBQUFBLFVBQ1YsU0FBUyxZQUFZLDBCQUEwQixFQUFFO0FBQUEsUUFDbkQsQ0FBQztBQUFBLE1BQ0g7QUFFQSxhQUFPO0FBQUE7QUFBQTtBQUlYLFNBQU8sOEJBQStCLENBQUMsWUFBWTtBQUNqRCxXQUFPLENBQUMsZUFBZTtBQUNyQixZQUFNLE9BQU8sT0FBTyxLQUFLLEtBQUssVUFBVTtBQUN4QyxZQUFNLE9BQU8sQ0FBQztBQUVkLFVBQUksU0FBUyxVQUFVLFNBQVMsYUFBYTtBQUMzQyxlQUFPO0FBQUEsTUFDVCxXQUFXLFNBQVMsVUFBVTtBQUM1QixjQUFNLE9BQU8sT0FBTyxVQUFVO0FBQUEsVUFDNUIsUUFBUTtBQUFBLFVBQ1IsU0FBUyxZQUFZO0FBQUEsUUFDdkIsQ0FBQztBQUFBLE1BQ0g7QUFFQSxpQkFBVyxXQUFXLFlBQVk7QUFDaEMsZ0JBQVEsS0FBSyxjQUFjLFVBQVUsY0FBYztBQUVuRCxZQUFJLGFBQWEsTUFBTTtBQUNyQixlQUFLLE9BQU8sWUFBWSxHQUFHLEdBQUc7QUFDNUIsa0JBQU0sT0FBTyxPQUFPLFVBQVU7QUFBQSxjQUM1QixRQUFRO0FBQUEsY0FDUixTQUFTLHlCQUF5QjtBQUFBLFlBQ3BDLENBQUM7QUFBQSxVQUNIO0FBQUEsUUFDRjtBQUVBLFlBQUksUUFBUSxXQUFXO0FBQ3ZCLGNBQU0sYUFBYSxPQUFPLFNBQVMsY0FBYztBQUlqRCxZQUFJLGNBQWMsVUFBVSxNQUFNO0FBQ2hDLGtCQUFRLFNBQVM7QUFBQSxRQUNuQjtBQUtBLFlBQUksWUFBWSxjQUFjLFVBQVUsV0FBVztBQUNqRCxrQkFBUSxVQUFVLEtBQUs7QUFFdkIsY0FDRSxRQUFRLGtCQUNQLFFBQVEsY0FBYyxTQUFTLEtBQUssR0FDckM7QUFDQSxrQkFBTSxPQUFPLE9BQU8sVUFBVTtBQUFBLGNBQzVCLFFBQVE7QUFBQSxjQUNSLFNBQVMsR0FBRyxrREFBa0QsUUFBUSxjQUFjLEtBQUssSUFBSTtBQUFBLFlBQy9GLENBQUM7QUFBQSxVQUNIO0FBRUEsZUFBSyxPQUFPO0FBQUEsUUFDZDtBQUFBLE1BQ0Y7QUFFQSxhQUFPO0FBQUE7QUFBQTtBQUlYLFNBQU8sNEJBQTZCLENBQUMsV0FBVztBQUM5QyxXQUFPLENBQUMsTUFBTTtBQUNaLFVBQUksTUFBTSxNQUFNO0FBQ2QsZUFBTztBQUFBLE1BQ1Q7QUFFQSxhQUFPLFVBQVUsQ0FBQztBQUFBO0FBQUE7QUFLdEIsU0FBTyxXQUFXLG9CQUFxQixDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUc7QUFLcEQsUUFBSSxNQUFNLFFBQVEsS0FBSyx5QkFBeUI7QUFDOUMsYUFBTztBQUFBLElBQ1Q7QUFHQSxlQUFXLE1BQU0sVUFBVTtBQUN6QixZQUFNLElBQUksVUFBVSxzREFBc0Q7QUFBQSxJQUM1RTtBQUtBLFdBQU8sT0FBTyxDQUFDO0FBQUE7QUFJakIsU0FBTyxXQUFXLHFCQUFzQixDQUFDLEdBQUc7QUFHMUMsVUFBTSxJQUFJLE9BQU8sV0FBVyxVQUFVLENBQUM7QUFJdkMsYUFBUyxRQUFRLEVBQUcsUUFBUSxFQUFFLFFBQVEsU0FBUztBQUM3QyxVQUFJLEVBQUUsV0FBVyxLQUFLLElBQUksS0FBSztBQUM3QixjQUFNLElBQUksVUFDUixzRUFDQSxTQUFTLHdCQUF3QixFQUFFLFdBQVcsS0FBSyw4QkFDckQ7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUtBLFdBQU87QUFBQTtBQUlULFNBQU8sV0FBVyxZQUFZO0FBRzlCLFNBQU8sV0FBVyxrQkFBbUIsQ0FBQyxHQUFHO0FBRXZDLFVBQU0sSUFBSSxRQUFRLENBQUM7QUFJbkIsV0FBTztBQUFBO0FBSVQsU0FBTyxXQUFXLGNBQWUsQ0FBQyxHQUFHO0FBQ25DLFdBQU87QUFBQTtBQUlULFNBQU8sV0FBVyx1QkFBd0IsQ0FBQyxHQUFHO0FBRTVDLFVBQU0sSUFBSSxPQUFPLEtBQUssYUFBYSxHQUFHLElBQUksUUFBUTtBQUlsRCxXQUFPO0FBQUE7QUFJVCxTQUFPLFdBQVcsZ0NBQWlDLENBQUMsR0FBRztBQUVyRCxVQUFNLElBQUksT0FBTyxLQUFLLGFBQWEsR0FBRyxJQUFJLFVBQVU7QUFJcEQsV0FBTztBQUFBO0FBSVQsU0FBTyxXQUFXLDJCQUE0QixDQUFDLEdBQUc7QUFFaEQsVUFBTSxJQUFJLE9BQU8sS0FBSyxhQUFhLEdBQUcsSUFBSSxVQUFVO0FBSXBELFdBQU87QUFBQTtBQUlULFNBQU8sV0FBVyw0QkFBNkIsQ0FBQyxHQUFHLE1BQU07QUFFdkQsVUFBTSxJQUFJLE9BQU8sS0FBSyxhQUFhLEdBQUcsSUFBSSxZQUFZLElBQUk7QUFJMUQsV0FBTztBQUFBO0FBSVQsU0FBTyxXQUFXLHNCQUF1QixDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUc7QUFNdEQsUUFDRSxPQUFPLEtBQUssS0FBSyxDQUFDLE1BQU0sYUFDdkIsTUFBTSxpQkFBaUIsQ0FBQyxHQUN6QjtBQUNBLFlBQU0sT0FBTyxPQUFPLGlCQUFpQjtBQUFBLFFBQ25DLFFBQVEsR0FBRztBQUFBLFFBQ1gsVUFBVSxHQUFHO0FBQUEsUUFDYixPQUFPLENBQUMsYUFBYTtBQUFBLE1BQ3ZCLENBQUM7QUFBQSxJQUNIO0FBTUEsUUFBSSxLQUFLLGdCQUFnQixTQUFTLE1BQU0sb0JBQW9CLENBQUMsR0FBRztBQUM5RCxZQUFNLE9BQU8sT0FBTyxVQUFVO0FBQUEsUUFDNUIsUUFBUTtBQUFBLFFBQ1IsU0FBUztBQUFBLE1BQ1gsQ0FBQztBQUFBLElBQ0g7QUFVQSxXQUFPO0FBQUE7QUFHVCxTQUFPLFdBQVcscUJBQXNCLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHO0FBTXhELFFBQ0UsT0FBTyxLQUFLLEtBQUssQ0FBQyxNQUFNLGFBQ3ZCLE1BQU0sYUFBYSxDQUFDLEtBQ3JCLEVBQUUsWUFBWSxTQUFTLEVBQUUsTUFDekI7QUFDQSxZQUFNLE9BQU8sT0FBTyxpQkFBaUI7QUFBQSxRQUNuQyxRQUFRLEdBQUcsRUFBRTtBQUFBLFFBQ2IsVUFBVSxHQUFHO0FBQUEsUUFDYixPQUFPLENBQUMsRUFBRSxJQUFJO0FBQUEsTUFDaEIsQ0FBQztBQUFBLElBQ0g7QUFNQSxRQUFJLEtBQUssZ0JBQWdCLFNBQVMsTUFBTSxvQkFBb0IsRUFBRSxNQUFNLEdBQUc7QUFDckUsWUFBTSxPQUFPLE9BQU8sVUFBVTtBQUFBLFFBQzVCLFFBQVE7QUFBQSxRQUNSLFNBQVM7QUFBQSxNQUNYLENBQUM7QUFBQSxJQUNIO0FBVUEsV0FBTztBQUFBO0FBR1QsU0FBTyxXQUFXLG1CQUFvQixDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUc7QUFHbkQsUUFBSSxPQUFPLEtBQUssS0FBSyxDQUFDLE1BQU0sYUFBYSxNQUFNLFdBQVcsQ0FBQyxHQUFHO0FBQzVELFlBQU0sT0FBTyxPQUFPLFVBQVU7QUFBQSxRQUM1QixRQUFRO0FBQUEsUUFDUixTQUFTO0FBQUEsTUFDWCxDQUFDO0FBQUEsSUFDSDtBQU1BLFFBQUksS0FBSyxnQkFBZ0IsU0FBUyxNQUFNLG9CQUFvQixFQUFFLE1BQU0sR0FBRztBQUNyRSxZQUFNLE9BQU8sT0FBTyxVQUFVO0FBQUEsUUFDNUIsUUFBUTtBQUFBLFFBQ1IsU0FBUztBQUFBLE1BQ1gsQ0FBQztBQUFBLElBQ0g7QUFVQSxXQUFPO0FBQUE7QUFJVCxTQUFPLFdBQVcsdUJBQXdCLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRztBQUN2RCxRQUFJLE1BQU0saUJBQWlCLENBQUMsR0FBRztBQUM3QixhQUFPLE9BQU8sV0FBVyxZQUFZLEdBQUcsSUFBSTtBQUFBLElBQzlDO0FBRUEsUUFBSSxNQUFNLGFBQWEsQ0FBQyxHQUFHO0FBQ3pCLGFBQU8sT0FBTyxXQUFXLFdBQVcsR0FBRyxFQUFFLFdBQVc7QUFBQSxJQUN0RDtBQUVBLFFBQUksTUFBTSxXQUFXLENBQUMsR0FBRztBQUN2QixhQUFPLE9BQU8sV0FBVyxTQUFTLEdBQUcsSUFBSTtBQUFBLElBQzNDO0FBRUEsVUFBTSxJQUFJLFVBQVUscUJBQXFCLHNCQUFzQjtBQUFBO0FBR2pFLFNBQU8sV0FBVywwQkFBMEIsT0FBTyxrQkFDakQsT0FBTyxXQUFXLFVBQ3BCO0FBRUEsU0FBTyxXQUFXLG9DQUFvQyxPQUFPLGtCQUMzRCxPQUFPLFdBQVcsdUJBQ3BCO0FBRUEsU0FBTyxXQUFXLG9DQUFvQyxPQUFPLGdCQUMzRCxPQUFPLFdBQVcsWUFDbEIsT0FBTyxXQUFXLFVBQ3BCO0FBRUEsU0FBTyxVQUFVO0FBQUEsSUFDZjtBQUFBLEVBQ0Y7QUFBQTs7OztBQ3JvQkEsTUFBTTtBQUNOLFFBQVE7QUFDUixRQUFRO0FBRVIsTUFBTSxVQUFVLElBQUk7QUFLcEIsTUFBTSx3QkFBd0I7QUFDOUIsTUFBTSx3QkFBd0I7QUFJOUIsTUFBTSw0QkFBNEI7QUFJbEMsV0FBUyxnQkFBaUIsQ0FBQyxTQUFTO0FBRWxDLFdBQU8sUUFBUSxhQUFhLE9BQU87QUFLbkMsUUFBSSxRQUFRLGNBQWMsU0FBUyxJQUFJO0FBR3ZDLFlBQVEsTUFBTSxNQUFNLENBQUM7QUFHckIsVUFBTSxXQUFXLEVBQUUsVUFBVSxFQUFFO0FBSy9CLFFBQUksV0FBVyxpQ0FDYixLQUNBLE9BQ0EsUUFDRjtBQVFBLFVBQU0saUJBQWlCLFNBQVM7QUFDaEMsZUFBVyxzQkFBc0IsVUFBVSxNQUFNLElBQUk7QUFJckQsUUFBSSxTQUFTLFlBQVksTUFBTSxRQUFRO0FBQ3JDLGFBQU87QUFBQSxJQUNUO0FBR0EsYUFBUztBQUdULFVBQU0sY0FBYyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFHbEQsUUFBSSxPQUFPLG9CQUFvQixXQUFXO0FBSzFDLFFBQUksd0JBQXdCLEtBQUssUUFBUSxHQUFHO0FBRTFDLFlBQU0sYUFBYSxpQkFBaUIsSUFBSTtBQUl4QyxhQUFPLGdCQUFnQixVQUFVO0FBR2pDLFVBQUksU0FBUyxXQUFXO0FBQ3RCLGVBQU87QUFBQSxNQUNUO0FBR0EsaUJBQVcsU0FBUyxNQUFNLEdBQUcsRUFBRTtBQUkvQixpQkFBVyxTQUFTLFFBQVEsY0FBYyxFQUFFO0FBRzVDLGlCQUFXLFNBQVMsTUFBTSxHQUFHLEVBQUU7QUFBQSxJQUNqQztBQUlBLFFBQUksU0FBUyxXQUFXLEdBQUcsR0FBRztBQUM1QixpQkFBVyxlQUFlO0FBQUEsSUFDNUI7QUFJQSxRQUFJLGlCQUFpQixjQUFjLFFBQVE7QUFJM0MsUUFBSSxtQkFBbUIsV0FBVztBQUNoQyx1QkFBaUIsY0FBYyw2QkFBNkI7QUFBQSxJQUM5RDtBQUtBLFdBQU8sRUFBRSxVQUFVLGdCQUFnQixLQUFLO0FBQUE7QUFRMUMsV0FBUyxhQUFjLENBQUMsS0FBSyxrQkFBa0IsT0FBTztBQUNwRCxTQUFLLGlCQUFpQjtBQUNwQixhQUFPLElBQUk7QUFBQSxJQUNiO0FBRUEsVUFBTSxPQUFPLElBQUk7QUFDakIsVUFBTSxhQUFhLElBQUksS0FBSztBQUU1QixXQUFPLGVBQWUsSUFBSSxPQUFPLEtBQUssVUFBVSxHQUFHLEtBQUssU0FBUyxVQUFVO0FBQUE7QUFTN0UsV0FBUyw0QkFBNkIsQ0FBQyxXQUFXLE9BQU8sVUFBVTtBQUVqRSxRQUFJLFNBQVM7QUFJYixXQUFPLFNBQVMsV0FBVyxNQUFNLFVBQVUsVUFBVSxNQUFNLFNBQVMsU0FBUyxHQUFHO0FBRTlFLGdCQUFVLE1BQU0sU0FBUztBQUd6QixlQUFTO0FBQUEsSUFDWDtBQUdBLFdBQU87QUFBQTtBQVNULFdBQVMsZ0NBQWlDLENBQUMsTUFBTSxPQUFPLFVBQVU7QUFDaEUsVUFBTSxNQUFNLE1BQU0sUUFBUSxNQUFNLFNBQVMsUUFBUTtBQUNqRCxVQUFNLFFBQVEsU0FBUztBQUV2QixRQUFJLFFBQVEsSUFBSTtBQUNkLGVBQVMsV0FBVyxNQUFNO0FBQzFCLGFBQU8sTUFBTSxNQUFNLEtBQUs7QUFBQSxJQUMxQjtBQUVBLGFBQVMsV0FBVztBQUNwQixXQUFPLE1BQU0sTUFBTSxPQUFPLFNBQVMsUUFBUTtBQUFBO0FBSzdDLFdBQVMsbUJBQW9CLENBQUMsT0FBTztBQUVuQyxVQUFNLFFBQVEsUUFBUSxPQUFPLEtBQUs7QUFHbEMsV0FBTyxjQUFjLEtBQUs7QUFBQTtBQUs1QixXQUFTLGFBQWMsQ0FBQyxPQUFPO0FBRzdCLFVBQU0sU0FBUyxDQUFDO0FBR2hCLGFBQVMsSUFBSSxFQUFHLElBQUksTUFBTSxRQUFRLEtBQUs7QUFDckMsWUFBTSxPQUFPLE1BQU07QUFHbkIsVUFBSSxTQUFTLElBQU07QUFDakIsZUFBTyxLQUFLLElBQUk7QUFBQSxNQU9sQixXQUNFLFNBQVMsT0FDUixvQkFBb0IsS0FBSyxPQUFPLGFBQWEsTUFBTSxJQUFJLElBQUksTUFBTSxJQUFJLEVBQUUsQ0FBQyxHQUN6RTtBQUNBLGVBQU8sS0FBSyxFQUFJO0FBQUEsTUFHbEIsT0FBTztBQUdMLGNBQU0sZUFBZSxPQUFPLGFBQWEsTUFBTSxJQUFJLElBQUksTUFBTSxJQUFJLEVBQUU7QUFDbkUsY0FBTSxZQUFZLE9BQU8sU0FBUyxjQUFjLEVBQUU7QUFHbEQsZUFBTyxLQUFLLFNBQVM7QUFHckIsYUFBSztBQUFBO0FBQUEsSUFFVDtBQUdBLFdBQU8sV0FBVyxLQUFLLE1BQU07QUFBQTtBQUsvQixXQUFTLGFBQWMsQ0FBQyxPQUFPO0FBRzdCLFlBQVEscUJBQXFCLE9BQU8sTUFBTSxJQUFJO0FBSTlDLFVBQU0sV0FBVyxFQUFFLFVBQVUsRUFBRTtBQUsvQixVQUFNLE9BQU8saUNBQ1gsS0FDQSxPQUNBLFFBQ0Y7QUFLQSxRQUFJLEtBQUssV0FBVyxNQUFNLHNCQUFzQixLQUFLLElBQUksR0FBRztBQUMxRCxhQUFPO0FBQUEsSUFDVDtBQUlBLFFBQUksU0FBUyxXQUFXLE1BQU0sUUFBUTtBQUNwQyxhQUFPO0FBQUEsSUFDVDtBQUdBLGFBQVM7QUFLVCxRQUFJLFVBQVUsaUNBQ1osS0FDQSxPQUNBLFFBQ0Y7QUFHQSxjQUFVLHFCQUFxQixTQUFTLE9BQU8sSUFBSTtBQUluRCxRQUFJLFFBQVEsV0FBVyxNQUFNLHNCQUFzQixLQUFLLE9BQU8sR0FBRztBQUNoRSxhQUFPO0FBQUEsSUFDVDtBQUVBLFVBQU0sZ0JBQWdCLEtBQUssWUFBWTtBQUN2QyxVQUFNLG1CQUFtQixRQUFRLFlBQVk7QUFNN0MsVUFBTSxXQUFXO0FBQUEsTUFDZixNQUFNO0FBQUEsTUFDTixTQUFTO0FBQUEsTUFFVCxZQUFZLElBQUk7QUFBQSxNQUVoQixTQUFTLEdBQUcsaUJBQWlCO0FBQUEsSUFDL0I7QUFHQSxXQUFPLFNBQVMsV0FBVyxNQUFNLFFBQVE7QUFFdkMsZUFBUztBQUlULG1DQUVFLFVBQVEsc0JBQXNCLEtBQUssSUFBSSxHQUN2QyxPQUNBLFFBQ0Y7QUFLQSxVQUFJLGdCQUFnQiw2QkFDbEIsQ0FBQyxTQUFTLFNBQVMsT0FBTyxTQUFTLEtBQ25DLE9BQ0EsUUFDRjtBQUlBLHNCQUFnQixjQUFjLFlBQVk7QUFHMUMsVUFBSSxTQUFTLFdBQVcsTUFBTSxRQUFRO0FBR3BDLFlBQUksTUFBTSxTQUFTLGNBQWMsS0FBSztBQUNwQztBQUFBLFFBQ0Y7QUFHQSxpQkFBUztBQUFBLE1BQ1g7QUFHQSxVQUFJLFNBQVMsV0FBVyxNQUFNLFFBQVE7QUFDcEM7QUFBQSxNQUNGO0FBR0EsVUFBSSxpQkFBaUI7QUFJckIsVUFBSSxNQUFNLFNBQVMsY0FBYyxLQUFLO0FBSXBDLHlCQUFpQiwwQkFBMEIsT0FBTyxVQUFVLElBQUk7QUFJaEUseUNBQ0UsS0FDQSxPQUNBLFFBQ0Y7QUFBQSxNQUdGLE9BQU87QUFJTCx5QkFBaUIsaUNBQ2YsS0FDQSxPQUNBLFFBQ0Y7QUFHQSx5QkFBaUIscUJBQXFCLGdCQUFnQixPQUFPLElBQUk7QUFHakUsWUFBSSxlQUFlLFdBQVcsR0FBRztBQUMvQjtBQUFBLFFBQ0Y7QUFBQTtBQVNGLFVBQ0UsY0FBYyxXQUFXLEtBQ3pCLHNCQUFzQixLQUFLLGFBQWEsTUFDdkMsZUFBZSxXQUFXLEtBQUssMEJBQTBCLEtBQUssY0FBYyxPQUM1RSxTQUFTLFdBQVcsSUFBSSxhQUFhLEdBQ3RDO0FBQ0EsaUJBQVMsV0FBVyxJQUFJLGVBQWUsY0FBYztBQUFBLE1BQ3ZEO0FBQUEsSUFDRjtBQUdBLFdBQU87QUFBQTtBQUtULFdBQVMsZUFBZ0IsQ0FBQyxNQUFNO0FBRTlCLFdBQU8sS0FBSyxRQUFRLHFDQUFxQyxFQUFFO0FBSTNELFFBQUksS0FBSyxTQUFTLE1BQU0sR0FBRztBQUd6QixhQUFPLEtBQUssUUFBUSxRQUFRLEVBQUU7QUFBQSxJQUNoQztBQUlBLFFBQUksS0FBSyxTQUFTLE1BQU0sR0FBRztBQUN6QixhQUFPO0FBQUEsSUFDVDtBQU9BLFFBQUksaUJBQWlCLEtBQUssSUFBSSxHQUFHO0FBQy9CLGFBQU87QUFBQSxJQUNUO0FBRUEsVUFBTSxTQUFTLE1BQUssSUFBSTtBQUN4QixVQUFNLFFBQVEsSUFBSSxXQUFXLE9BQU8sTUFBTTtBQUUxQyxhQUFTLE9BQU8sRUFBRyxPQUFPLE9BQU8sUUFBUSxRQUFRO0FBQy9DLFlBQU0sUUFBUSxPQUFPLFdBQVcsSUFBSTtBQUFBLElBQ3RDO0FBRUEsV0FBTztBQUFBO0FBVVQsV0FBUyx5QkFBMEIsQ0FBQyxPQUFPLFVBQVUsY0FBYztBQUVqRSxVQUFNLGdCQUFnQixTQUFTO0FBRy9CLFFBQUksUUFBUTtBQUlaLFdBQU8sTUFBTSxTQUFTLGNBQWMsR0FBRztBQUd2QyxhQUFTO0FBR1QsV0FBTyxNQUFNO0FBSVgsZUFBUyw2QkFDUCxDQUFDLFNBQVMsU0FBUyxPQUFPLFNBQVMsTUFDbkMsT0FDQSxRQUNGO0FBR0EsVUFBSSxTQUFTLFlBQVksTUFBTSxRQUFRO0FBQ3JDO0FBQUEsTUFDRjtBQUlBLFlBQU0sbUJBQW1CLE1BQU0sU0FBUztBQUd4QyxlQUFTO0FBR1QsVUFBSSxxQkFBcUIsTUFBTTtBQUc3QixZQUFJLFNBQVMsWUFBWSxNQUFNLFFBQVE7QUFDckMsbUJBQVM7QUFDVDtBQUFBLFFBQ0Y7QUFHQSxpQkFBUyxNQUFNLFNBQVM7QUFHeEIsaUJBQVM7QUFBQSxNQUdYLE9BQU87QUFFTCxlQUFPLHFCQUFxQixHQUFHO0FBRy9CO0FBQUE7QUFBQSxJQUVKO0FBR0EsUUFBSSxjQUFjO0FBQ2hCLGFBQU87QUFBQSxJQUNUO0FBSUEsV0FBTyxNQUFNLE1BQU0sZUFBZSxTQUFTLFFBQVE7QUFBQTtBQU1yRCxXQUFTLGtCQUFtQixDQUFDLFVBQVU7QUFDckMsV0FBTyxhQUFhLFNBQVM7QUFDN0IsWUFBUSxZQUFZLFlBQVk7QUFJaEMsUUFBSSxnQkFBZ0I7QUFHcEIsY0FBVSxNQUFNLFVBQVUsV0FBVyxRQUFRLEdBQUc7QUFFOUMsdUJBQWlCO0FBR2pCLHVCQUFpQjtBQUdqQix1QkFBaUI7QUFJakIsV0FBSyxzQkFBc0IsS0FBSyxLQUFLLEdBQUc7QUFHdEMsZ0JBQVEsTUFBTSxRQUFRLFdBQVcsTUFBTTtBQUd2QyxnQkFBUSxNQUFNO0FBR2QsaUJBQVM7QUFBQSxNQUNYO0FBR0EsdUJBQWlCO0FBQUEsSUFDbkI7QUFHQSxXQUFPO0FBQUE7QUFPVCxXQUFTLGdCQUFpQixDQUFDLE1BQU07QUFDL0IsV0FBTyxTQUFTLFFBQVEsU0FBUyxRQUFRLFNBQVMsUUFBUSxTQUFTO0FBQUE7QUFPckUsV0FBUyxvQkFBcUIsQ0FBQyxLQUFLLFVBQVUsTUFBTSxXQUFXLE1BQU07QUFDbkUsUUFBSSxPQUFPO0FBQ1gsUUFBSSxRQUFRLElBQUksU0FBUztBQUV6QixRQUFJLFNBQVM7QUFDWCxZQUFPLE9BQU8sSUFBSSxVQUFVLGlCQUFpQixJQUFJLEtBQUssR0FBRztBQUFBO0FBQUEsSUFDM0Q7QUFFQSxRQUFJLFVBQVU7QUFDWixZQUFPLFFBQVEsS0FBSyxpQkFBaUIsSUFBSSxNQUFNLEdBQUc7QUFBQTtBQUFBLElBQ3BEO0FBRUEsV0FBTyxJQUFJLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFBQTtBQU9sQyxXQUFTLGlCQUFrQixDQUFDLE1BQU07QUFDaEMsV0FBTyxTQUFTLFFBQVEsU0FBUyxRQUFRLFNBQVMsUUFBUSxTQUFTLFFBQVEsU0FBUztBQUFBO0FBTXRGLFdBQVMscUJBQXNCLENBQUMsS0FBSyxVQUFVLE1BQU0sV0FBVyxNQUFNO0FBQ3BFLFFBQUksT0FBTztBQUNYLFFBQUksUUFBUSxJQUFJLFNBQVM7QUFFekIsUUFBSSxTQUFTO0FBQ1gsWUFBTyxPQUFPLElBQUksVUFBVSxrQkFBa0IsSUFBSSxLQUFLLEdBQUc7QUFBQTtBQUFBLElBQzVEO0FBRUEsUUFBSSxVQUFVO0FBQ1osWUFBTyxRQUFRLEtBQUssa0JBQWtCLElBQUksTUFBTSxHQUFHO0FBQUE7QUFBQSxJQUNyRDtBQUVBLFdBQU8sSUFBSSxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQUE7QUFHbEMsU0FBTyxVQUFVO0FBQUEsSUFDZjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNGO0FBQUE7Ozs7QUNobkJBLFFBQVEsYUFBTSxNQUFNO0FBQ3BCLFFBQVE7QUFDUixRQUFRO0FBQ1IsUUFBUTtBQUNSLFFBQVE7QUFDUixRQUFRLGVBQWU7QUFDdkIsUUFBUTtBQUNSLE1BQU0sVUFBVSxJQUFJO0FBRXBCO0FBQUEsUUFBTSxjQUFhLE1BQUs7QUFBQSxJQUN0QixXQUFZLENBQUMsVUFBVSxVQUFVLFVBQVUsQ0FBQyxHQUFHO0FBSTdDLGFBQU8sb0JBQW9CLFdBQVcsR0FBRyxFQUFFLFFBQVEsbUJBQW1CLENBQUM7QUFFdkUsaUJBQVcsT0FBTyxXQUFXLHNCQUFzQixRQUFRO0FBQzNELGlCQUFXLE9BQU8sV0FBVyxVQUFVLFFBQVE7QUFDL0MsZ0JBQVUsT0FBTyxXQUFXLGdCQUFnQixPQUFPO0FBT25ELFlBQU0sSUFBSTtBQVVWLFVBQUksSUFBSSxRQUFRO0FBQ2hCLFVBQUk7QUFHSixlQUFTO0FBQ1AsWUFBSSxHQUFHO0FBQ0wsY0FBSSxjQUFjLENBQUM7QUFFbkIsY0FBSSxNQUFNLFdBQVc7QUFDbkIsZ0JBQUk7QUFFSjtBQUFBLFVBQ0Y7QUFFQSxjQUFJLG1CQUFtQixDQUFDLEVBQUUsWUFBWTtBQUFBLFFBQ3hDO0FBTUEsWUFBSSxRQUFRO0FBQUEsTUFDZDtBQVNBLFlBQU0saUJBQWlCLFVBQVUsT0FBTyxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDdEQsV0FBSyxVQUFVO0FBQUEsUUFDYixNQUFNO0FBQUEsUUFDTixjQUFjO0FBQUEsUUFDZCxNQUFNO0FBQUEsTUFDUjtBQUFBO0FBQUEsUUFHRSxJQUFLLEdBQUc7QUFDVixhQUFPLFdBQVcsTUFBTSxLQUFJO0FBRTVCLGFBQU8sS0FBSyxRQUFRO0FBQUE7QUFBQSxRQUdsQixZQUFhLEdBQUc7QUFDbEIsYUFBTyxXQUFXLE1BQU0sS0FBSTtBQUU1QixhQUFPLEtBQUssUUFBUTtBQUFBO0FBQUEsUUFHbEIsSUFBSyxHQUFHO0FBQ1YsYUFBTyxXQUFXLE1BQU0sS0FBSTtBQUU1QixhQUFPLEtBQUssUUFBUTtBQUFBO0FBQUEsRUFFeEI7QUFFQTtBQUFBLFFBQU0sU0FBUztBQUFBLElBQ2IsV0FBWSxDQUFDLFVBQVUsVUFBVSxVQUFVLENBQUMsR0FBRztBQVc3QyxZQUFNLElBQUk7QUFVVixZQUFNLElBQUksUUFBUTtBQVNsQixZQUFNLElBQUksUUFBUSxnQkFBZ0IsS0FBSyxJQUFJO0FBUzNDLFdBQUssVUFBVTtBQUFBLFFBQ2I7QUFBQSxRQUNBLE1BQU07QUFBQSxRQUNOLE1BQU07QUFBQSxRQUNOLGNBQWM7QUFBQSxNQUNoQjtBQUFBO0FBQUEsSUFHRixNQUFPLElBQUksTUFBTTtBQUNmLGFBQU8sV0FBVyxNQUFNLFFBQVE7QUFFaEMsYUFBTyxLQUFLLFFBQVEsU0FBUyxPQUFPLEdBQUcsSUFBSTtBQUFBO0FBQUEsSUFHN0MsV0FBWSxJQUFJLE1BQU07QUFDcEIsYUFBTyxXQUFXLE1BQU0sUUFBUTtBQUVoQyxhQUFPLEtBQUssUUFBUSxTQUFTLFlBQVksR0FBRyxJQUFJO0FBQUE7QUFBQSxJQUdsRCxLQUFNLElBQUksTUFBTTtBQUNkLGFBQU8sV0FBVyxNQUFNLFFBQVE7QUFFaEMsYUFBTyxLQUFLLFFBQVEsU0FBUyxNQUFNLEdBQUcsSUFBSTtBQUFBO0FBQUEsSUFHNUMsSUFBSyxJQUFJLE1BQU07QUFDYixhQUFPLFdBQVcsTUFBTSxRQUFRO0FBRWhDLGFBQU8sS0FBSyxRQUFRLFNBQVMsS0FBSyxHQUFHLElBQUk7QUFBQTtBQUFBLFFBR3ZDLElBQUssR0FBRztBQUNWLGFBQU8sV0FBVyxNQUFNLFFBQVE7QUFFaEMsYUFBTyxLQUFLLFFBQVEsU0FBUztBQUFBO0FBQUEsUUFHM0IsSUFBSyxHQUFHO0FBQ1YsYUFBTyxXQUFXLE1BQU0sUUFBUTtBQUVoQyxhQUFPLEtBQUssUUFBUSxTQUFTO0FBQUE7QUFBQSxRQUczQixJQUFLLEdBQUc7QUFDVixhQUFPLFdBQVcsTUFBTSxRQUFRO0FBRWhDLGFBQU8sS0FBSyxRQUFRO0FBQUE7QUFBQSxRQUdsQixZQUFhLEdBQUc7QUFDbEIsYUFBTyxXQUFXLE1BQU0sUUFBUTtBQUVoQyxhQUFPLEtBQUssUUFBUTtBQUFBO0FBQUEsU0FHakIsT0FBTyxZQUFhLEdBQUc7QUFDMUIsYUFBTztBQUFBO0FBQUEsRUFFWDtBQUVBLFNBQU8saUJBQWlCLE1BQUssV0FBVztBQUFBLEtBQ3JDLE9BQU8sY0FBYztBQUFBLE1BQ3BCLE9BQU87QUFBQSxNQUNQLGNBQWM7QUFBQSxJQUNoQjtBQUFBLElBQ0EsTUFBTTtBQUFBLElBQ04sY0FBYztBQUFBLEVBQ2hCLENBQUM7QUFFRCxTQUFPLFdBQVcsT0FBTyxPQUFPLG1CQUFtQixLQUFJO0FBRXZELFNBQU8sV0FBVyxtQkFBb0IsQ0FBQyxHQUFHLE1BQU07QUFDOUMsUUFBSSxPQUFPLEtBQUssS0FBSyxDQUFDLE1BQU0sVUFBVTtBQUNwQyxVQUFJLFdBQVcsQ0FBQyxHQUFHO0FBQ2pCLGVBQU8sT0FBTyxXQUFXLEtBQUssR0FBRyxFQUFFLFFBQVEsTUFBTSxDQUFDO0FBQUEsTUFDcEQ7QUFFQSxVQUNFLFlBQVksT0FBTyxDQUFDLEtBQ3BCLE1BQU0saUJBQWlCLENBQUMsR0FDeEI7QUFDQSxlQUFPLE9BQU8sV0FBVyxhQUFhLEdBQUcsSUFBSTtBQUFBLE1BQy9DO0FBQUEsSUFDRjtBQUVBLFdBQU8sT0FBTyxXQUFXLFVBQVUsR0FBRyxJQUFJO0FBQUE7QUFHNUMsU0FBTyxXQUFXLHdCQUF3QixPQUFPLGtCQUMvQyxPQUFPLFdBQVcsUUFDcEI7QUFHQSxTQUFPLFdBQVcsa0JBQWtCLE9BQU8sb0JBQW9CO0FBQUEsSUFDN0Q7QUFBQSxNQUNFLEtBQUs7QUFBQSxNQUNMLFdBQVcsT0FBTyxXQUFXO0FBQUEsVUFDekIsWUFBYSxHQUFHO0FBQ2xCLGVBQU8sS0FBSyxJQUFJO0FBQUE7QUFBQSxJQUVwQjtBQUFBLElBQ0E7QUFBQSxNQUNFLEtBQUs7QUFBQSxNQUNMLFdBQVcsT0FBTyxXQUFXO0FBQUEsTUFDN0IsY0FBYztBQUFBLElBQ2hCO0FBQUEsSUFDQTtBQUFBLE1BQ0UsS0FBSztBQUFBLE1BQ0wsV0FBVyxDQUFDLFVBQVU7QUFDcEIsZ0JBQVEsT0FBTyxXQUFXLFVBQVUsS0FBSztBQUN6QyxnQkFBUSxNQUFNLFlBQVk7QUFFMUIsWUFBSSxVQUFVLFVBQVU7QUFDdEIsa0JBQVE7QUFBQSxRQUNWO0FBRUEsZUFBTztBQUFBO0FBQUEsTUFFVCxjQUFjO0FBQUEsSUFDaEI7QUFBQSxFQUNGLENBQUM7QUFPRCxXQUFTLGdCQUFpQixDQUFDLE9BQU8sU0FBUztBQUd6QyxVQUFNLFFBQVEsQ0FBQztBQUdmLGVBQVcsV0FBVyxPQUFPO0FBRTNCLGlCQUFXLFlBQVksVUFBVTtBQUUvQixZQUFJLElBQUk7QUFLUixZQUFJLFFBQVEsWUFBWSxVQUFVO0FBQ2hDLGNBQUkseUJBQXlCLENBQUM7QUFBQSxRQUNoQztBQUdBLGNBQU0sS0FBSyxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQUEsTUFDOUIsV0FDRSxNQUFNLGlCQUFpQixPQUFPLEtBQzlCLE1BQU0sYUFBYSxPQUFPLEdBQzFCO0FBSUEsYUFBSyxRQUFRLFFBQVE7QUFDbkIsZ0JBQU0sS0FBSyxJQUFJLFdBQVcsT0FBTyxDQUFDO0FBQUEsUUFDcEMsT0FBTztBQUNMLGdCQUFNLEtBQ0osSUFBSSxXQUFXLFFBQVEsUUFBUSxRQUFRLFlBQVksUUFBUSxVQUFVLENBQ3ZFO0FBQUE7QUFBQSxNQUVKLFdBQVcsV0FBVyxPQUFPLEdBQUc7QUFHOUIsY0FBTSxLQUFLLE9BQU87QUFBQSxNQUNwQjtBQUFBLElBQ0Y7QUFHQSxXQUFPO0FBQUE7QUFPVCxXQUFTLHdCQUF5QixDQUFDLEdBQUc7QUFFcEMsUUFBSSxtQkFBbUI7QUFNdkIsUUFBSSxRQUFRLGFBQWEsU0FBUztBQUNoQyx5QkFBbUI7QUFBQSxJQUNyQjtBQUVBLFdBQU8sRUFBRSxRQUFRLFVBQVUsZ0JBQWdCO0FBQUE7QUFNN0MsV0FBUyxVQUFXLENBQUMsUUFBUTtBQUMzQixXQUNHLGNBQWMsa0JBQWtCLGNBQ2pDLGtCQUFrQixTQUNoQixrQkFDUSxPQUFPLFdBQVcscUJBQ25CLE9BQU8sZ0JBQWdCLGVBQzlCLE9BQU8sT0FBTyxpQkFBaUI7QUFBQTtBQUtyQyxTQUFPLFVBQVUsRUFBRSxhQUFNLFVBQVUsV0FBVztBQUFBOzs7O0FDclY5QyxRQUFRLFlBQVksYUFBYTtBQUNqQyxRQUFRO0FBQ1IsUUFBUSxNQUFNLFlBQVksVUFBVTtBQUNwQyxRQUFRO0FBQ1IsUUFBUSxhQUFNLE1BQU07QUFHcEIsTUFBTSxRQUFPLGNBQWM7QUFHM0I7QUFBQSxRQUFNLFVBQVM7QUFBQSxJQUNiLFdBQVksQ0FBQyxNQUFNO0FBQ2pCLFVBQUksU0FBUyxXQUFXO0FBQ3RCLGNBQU0sT0FBTyxPQUFPLGlCQUFpQjtBQUFBLFVBQ25DLFFBQVE7QUFBQSxVQUNSLFVBQVU7QUFBQSxVQUNWLE9BQU8sQ0FBQyxXQUFXO0FBQUEsUUFDckIsQ0FBQztBQUFBLE1BQ0g7QUFFQSxXQUFLLFVBQVUsQ0FBQztBQUFBO0FBQUEsSUFHbEIsTUFBTyxDQUFDLE1BQU0sT0FBTyxXQUFXLFdBQVc7QUFDekMsYUFBTyxXQUFXLE1BQU0sU0FBUTtBQUVoQyxhQUFPLG9CQUFvQixXQUFXLEdBQUcsRUFBRSxRQUFRLGtCQUFrQixDQUFDO0FBRXRFLFVBQUksVUFBVSxXQUFXLE1BQU0sV0FBVyxLQUFLLEdBQUc7QUFDaEQsY0FBTSxJQUFJLFVBQ1IsNkVBQ0Y7QUFBQSxNQUNGO0FBSUEsYUFBTyxPQUFPLFdBQVcsVUFBVSxJQUFJO0FBQ3ZDLGNBQVEsV0FBVyxLQUFLLElBQ3BCLE9BQU8sV0FBVyxLQUFLLE9BQU8sRUFBRSxRQUFRLE1BQU0sQ0FBQyxJQUMvQyxPQUFPLFdBQVcsVUFBVSxLQUFLO0FBQ3JDLGlCQUFXLFVBQVUsV0FBVyxJQUM1QixPQUFPLFdBQVcsVUFBVSxRQUFRLElBQ3BDO0FBSUosWUFBTSxRQUFRLFVBQVUsTUFBTSxPQUFPLFFBQVE7QUFHN0MsV0FBSyxRQUFRLEtBQUssS0FBSztBQUFBO0FBQUEsSUFHekIsTUFBTyxDQUFDLE1BQU07QUFDWixhQUFPLFdBQVcsTUFBTSxTQUFRO0FBRWhDLGFBQU8sb0JBQW9CLFdBQVcsR0FBRyxFQUFFLFFBQVEsa0JBQWtCLENBQUM7QUFFdEUsYUFBTyxPQUFPLFdBQVcsVUFBVSxJQUFJO0FBSXZDLFdBQUssVUFBVSxLQUFLLFFBQVEsT0FBTyxXQUFTLE1BQU0sU0FBUyxJQUFJO0FBQUE7QUFBQSxJQUdqRSxHQUFJLENBQUMsTUFBTTtBQUNULGFBQU8sV0FBVyxNQUFNLFNBQVE7QUFFaEMsYUFBTyxvQkFBb0IsV0FBVyxHQUFHLEVBQUUsUUFBUSxlQUFlLENBQUM7QUFFbkUsYUFBTyxPQUFPLFdBQVcsVUFBVSxJQUFJO0FBSXZDLFlBQU0sTUFBTSxLQUFLLFFBQVEsVUFBVSxDQUFDLFVBQVUsTUFBTSxTQUFTLElBQUk7QUFDakUsVUFBSSxRQUFRLElBQUk7QUFDZCxlQUFPO0FBQUEsTUFDVDtBQUlBLGFBQU8sS0FBSyxRQUFRLEtBQUs7QUFBQTtBQUFBLElBRzNCLE1BQU8sQ0FBQyxNQUFNO0FBQ1osYUFBTyxXQUFXLE1BQU0sU0FBUTtBQUVoQyxhQUFPLG9CQUFvQixXQUFXLEdBQUcsRUFBRSxRQUFRLGtCQUFrQixDQUFDO0FBRXRFLGFBQU8sT0FBTyxXQUFXLFVBQVUsSUFBSTtBQU12QyxhQUFPLEtBQUssUUFDVCxPQUFPLENBQUMsVUFBVSxNQUFNLFNBQVMsSUFBSSxFQUNyQyxJQUFJLENBQUMsVUFBVSxNQUFNLEtBQUs7QUFBQTtBQUFBLElBRy9CLEdBQUksQ0FBQyxNQUFNO0FBQ1QsYUFBTyxXQUFXLE1BQU0sU0FBUTtBQUVoQyxhQUFPLG9CQUFvQixXQUFXLEdBQUcsRUFBRSxRQUFRLGVBQWUsQ0FBQztBQUVuRSxhQUFPLE9BQU8sV0FBVyxVQUFVLElBQUk7QUFJdkMsYUFBTyxLQUFLLFFBQVEsVUFBVSxDQUFDLFVBQVUsTUFBTSxTQUFTLElBQUksTUFBTTtBQUFBO0FBQUEsSUFHcEUsR0FBSSxDQUFDLE1BQU0sT0FBTyxXQUFXLFdBQVc7QUFDdEMsYUFBTyxXQUFXLE1BQU0sU0FBUTtBQUVoQyxhQUFPLG9CQUFvQixXQUFXLEdBQUcsRUFBRSxRQUFRLGVBQWUsQ0FBQztBQUVuRSxVQUFJLFVBQVUsV0FBVyxNQUFNLFdBQVcsS0FBSyxHQUFHO0FBQ2hELGNBQU0sSUFBSSxVQUNSLDBFQUNGO0FBQUEsTUFDRjtBQU9BLGFBQU8sT0FBTyxXQUFXLFVBQVUsSUFBSTtBQUN2QyxjQUFRLFdBQVcsS0FBSyxJQUNwQixPQUFPLFdBQVcsS0FBSyxPQUFPLEVBQUUsUUFBUSxNQUFNLENBQUMsSUFDL0MsT0FBTyxXQUFXLFVBQVUsS0FBSztBQUNyQyxpQkFBVyxVQUFVLFdBQVcsSUFDNUIsWUFBWSxRQUFRLElBQ3BCO0FBSUosWUFBTSxRQUFRLFVBQVUsTUFBTSxPQUFPLFFBQVE7QUFJN0MsWUFBTSxNQUFNLEtBQUssUUFBUSxVQUFVLENBQUMsV0FBVSxPQUFNLFNBQVMsSUFBSTtBQUNqRSxVQUFJLFFBQVEsSUFBSTtBQUNkLGFBQUssVUFBVTtBQUFBLFVBQ2IsR0FBRyxLQUFLLFFBQVEsTUFBTSxHQUFHLEdBQUc7QUFBQSxVQUM1QjtBQUFBLFVBQ0EsR0FBRyxLQUFLLFFBQVEsTUFBTSxNQUFNLENBQUMsRUFBRSxPQUFPLENBQUMsV0FBVSxPQUFNLFNBQVMsSUFBSTtBQUFBLFFBQ3RFO0FBQUEsTUFDRixPQUFPO0FBRUwsYUFBSyxRQUFRLEtBQUssS0FBSztBQUFBO0FBQUE7QUFBQSxJQUkzQixPQUFRLEdBQUc7QUFDVCxhQUFPLFdBQVcsTUFBTSxTQUFRO0FBRWhDLGFBQU8sYUFDTCxNQUFNLEtBQUssUUFBUSxJQUFJLFVBQVEsQ0FBQyxLQUFLLE1BQU0sS0FBSyxLQUFLLENBQUMsR0FDdEQsWUFDQSxXQUNGO0FBQUE7QUFBQSxJQUdGLElBQUssR0FBRztBQUNOLGFBQU8sV0FBVyxNQUFNLFNBQVE7QUFFaEMsYUFBTyxhQUNMLE1BQU0sS0FBSyxRQUFRLElBQUksVUFBUSxDQUFDLEtBQUssTUFBTSxLQUFLLEtBQUssQ0FBQyxHQUN0RCxZQUNBLEtBQ0Y7QUFBQTtBQUFBLElBR0YsTUFBTyxHQUFHO0FBQ1IsYUFBTyxXQUFXLE1BQU0sU0FBUTtBQUVoQyxhQUFPLGFBQ0wsTUFBTSxLQUFLLFFBQVEsSUFBSSxVQUFRLENBQUMsS0FBSyxNQUFNLEtBQUssS0FBSyxDQUFDLEdBQ3RELFlBQ0EsT0FDRjtBQUFBO0FBQUEsSUFPRixPQUFRLENBQUMsWUFBWSxVQUFVLFlBQVk7QUFDekMsYUFBTyxXQUFXLE1BQU0sU0FBUTtBQUVoQyxhQUFPLG9CQUFvQixXQUFXLEdBQUcsRUFBRSxRQUFRLG1CQUFtQixDQUFDO0FBRXZFLGlCQUFXLGVBQWUsWUFBWTtBQUNwQyxjQUFNLElBQUksVUFDUixtRkFDRjtBQUFBLE1BQ0Y7QUFFQSxrQkFBWSxLQUFLLFVBQVUsTUFBTTtBQUMvQixtQkFBVyxNQUFNLFNBQVMsQ0FBQyxPQUFPLEtBQUssSUFBSSxDQUFDO0FBQUEsTUFDOUM7QUFBQTtBQUFBLEVBRUo7QUFFQSxZQUFTLFVBQVUsT0FBTyxZQUFZLFVBQVMsVUFBVTtBQUV6RCxTQUFPLGlCQUFpQixVQUFTLFdBQVc7QUFBQSxLQUN6QyxPQUFPLGNBQWM7QUFBQSxNQUNwQixPQUFPO0FBQUEsTUFDUCxjQUFjO0FBQUEsSUFDaEI7QUFBQSxFQUNGLENBQUM7QUFTRCxXQUFTLFNBQVUsQ0FBQyxNQUFNLE9BQU8sVUFBVTtBQUt6QyxXQUFPLE9BQU8sS0FBSyxJQUFJLEVBQUUsU0FBUyxNQUFNO0FBSXhDLGVBQVcsVUFBVSxVQUFVO0FBQzdCLGNBQVEsT0FBTyxLQUFLLEtBQUssRUFBRSxTQUFTLE1BQU07QUFBQSxJQUM1QyxPQUFPO0FBS0wsV0FBSyxXQUFXLEtBQUssR0FBRztBQUN0QixnQkFBUSxpQkFBaUIsUUFDckIsSUFBSSxNQUFLLENBQUMsS0FBSyxHQUFHLFFBQVEsRUFBRSxNQUFNLE1BQU0sS0FBSyxDQUFDLElBQzlDLElBQUksU0FBUyxPQUFPLFFBQVEsRUFBRSxNQUFNLE1BQU0sS0FBSyxDQUFDO0FBQUEsTUFDdEQ7QUFJQSxVQUFJLGFBQWEsV0FBVztBQUUxQixjQUFNLFVBQVU7QUFBQSxVQUNkLE1BQU0sTUFBTTtBQUFBLFVBQ1osY0FBYyxNQUFNO0FBQUEsUUFDdEI7QUFFQSxnQkFBUyxjQUFjLGlCQUFpQixjQUFlLGlCQUFpQixhQUNwRSxJQUFJLE1BQUssQ0FBQyxLQUFLLEdBQUcsVUFBVSxPQUFPLElBQ25DLElBQUksU0FBUyxPQUFPLFVBQVUsT0FBTztBQUFBLE1BQzNDO0FBQUE7QUFJRixXQUFPLEVBQUUsTUFBTSxNQUFNO0FBQUE7QUFHdkIsU0FBTyxVQUFVLEVBQUUsb0JBQVM7QUFBQTs7OztBQ3RRNUIsTUFBTTtBQUNOLE1BQU07QUFDTjtBQUFBLElBQ0U7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBO0FBRUYsUUFBUTtBQUNSLFFBQVE7QUFDUixRQUFRO0FBQ1IsUUFBUSw2QkFBYztBQUN0QixRQUFRLGFBQU0sTUFBTTtBQUNwQixRQUFRO0FBQ1IsTUFBTTtBQUNOLFFBQVE7QUFDUixRQUFRLGNBQWM7QUFDdEIsUUFBUSxNQUFNO0FBQ2QsUUFBUSxlQUFlO0FBRXZCLE1BQUksa0JBQWlCLFdBQVc7QUFHaEMsTUFBTSxRQUFPLGNBQWM7QUFDM0IsTUFBTSxjQUFjLElBQUk7QUFDeEIsTUFBTSxjQUFjLElBQUk7QUFHeEIsV0FBUyxXQUFZLENBQUMsUUFBUSxZQUFZLE9BQU87QUFDL0MsU0FBSyxpQkFBZ0I7QUFDbkIsZ0RBQXVDO0FBQUEsSUFDekM7QUFHQSxRQUFJLFNBQVM7QUFHYixRQUFJLGtCQUFrQixpQkFBZ0I7QUFDcEMsZUFBUztBQUFBLElBQ1gsV0FBVyxXQUFXLE1BQU0sR0FBRztBQUc3QixlQUFTLE9BQU8sT0FBTztBQUFBLElBQ3pCLE9BQU87QUFHTCxlQUFTLElBQUksZ0JBQWU7QUFBQSxhQUNwQixLQUFLLENBQUMsWUFBWTtBQUN0QixxQkFBVyxlQUNGLFdBQVcsV0FBVyxZQUFZLE9BQU8sTUFBTSxJQUFJLE1BQzVEO0FBQ0EseUJBQWUsTUFBTSxvQkFBb0IsVUFBVSxDQUFDO0FBQUE7QUFBQSxRQUV0RCxLQUFNLEdBQUc7QUFBQTtBQUFBLFFBQ1QsTUFBTTtBQUFBLE1BQ1IsQ0FBQztBQUFBO0FBSUgsV0FBTyxxQkFBcUIsTUFBTSxDQUFDO0FBR25DLFFBQUksU0FBUztBQUdiLFFBQUksU0FBUztBQUdiLFFBQUksU0FBUztBQUdiLFFBQUksT0FBTztBQUdYLGVBQVcsV0FBVyxVQUFVO0FBRzlCLGVBQVM7QUFHVCxhQUFPO0FBQUEsSUFDVCxXQUFXLGtCQUFrQixpQkFBaUI7QUFTNUMsZUFBUyxPQUFPLFNBQVM7QUFHekIsYUFBTztBQUFBLElBQ1QsV0FBVyxjQUFjLE1BQU0sR0FBRztBQUloQyxlQUFTLElBQUksV0FBVyxPQUFPLE1BQU0sQ0FBQztBQUFBLElBQ3hDLFdBQVcsWUFBWSxPQUFPLE1BQU0sR0FBRztBQUlyQyxlQUFTLElBQUksV0FBVyxPQUFPLE9BQU8sTUFBTSxPQUFPLFlBQVksT0FBTyxhQUFhLE9BQU8sVUFBVSxDQUFDO0FBQUEsSUFDdkcsV0FBVyxLQUFLLGVBQWUsTUFBTSxHQUFHO0FBQ3RDLFlBQU0sV0FBVyx3QkFBd0IsR0FBRyxLQUFLLE1BQU0sS0FBSyxPQUFPLElBQUksWUFBSSxJQUFJLFNBQVMsSUFBSSxHQUFHO0FBQy9GLFlBQU0sU0FBUyxLQUFLO0FBR3BCO0FBQUEsWUFBTSxTQUFTLENBQUMsUUFDZCxJQUFJLFFBQVEsT0FBTyxLQUFLLEVBQUUsUUFBUSxPQUFPLEtBQUssRUFBRSxRQUFRLE1BQU0sS0FBSztBQUNyRSxZQUFNLHFCQUFxQixDQUFDLFVBQVUsTUFBTSxRQUFRLGFBQWEsTUFBTTtBQVF2RSxZQUFNLFlBQVksQ0FBQztBQUNuQixZQUFNLEtBQUssSUFBSSxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDbEMsZUFBUztBQUNULFVBQUksc0JBQXNCO0FBRTFCLGtCQUFZLE1BQU0sVUFBVSxRQUFRO0FBQ2xDLG1CQUFXLFVBQVUsVUFBVTtBQUM3QixnQkFBTSxTQUFRLFlBQVksT0FBTyxTQUMvQixXQUFXLE9BQU8sbUJBQW1CLElBQUksQ0FBQyxPQUMxQyxXQUFXLG1CQUFtQixLQUFLLE9BQU87QUFDNUMsb0JBQVUsS0FBSyxNQUFLO0FBQ3BCLG9CQUFVLE9BQU07QUFBQSxRQUNsQixPQUFPO0FBQ0wsZ0JBQU0sU0FBUSxZQUFZLE9BQU8sR0FBRyxpQkFBaUIsT0FBTyxtQkFBbUIsSUFBSSxDQUFDLFFBQ2pGLE1BQU0sT0FBTyxlQUFlLE9BQU8sTUFBTSxJQUFJLE9BQU8sTUFBTSxTQUMzRCxpQkFDRSxNQUFNLFFBQVEsb0NBQ047QUFDWixvQkFBVSxLQUFLLFFBQU8sT0FBTyxFQUFFO0FBQy9CLHFCQUFXLE1BQU0sU0FBUyxVQUFVO0FBQ2xDLHNCQUFVLE9BQU0sYUFBYSxNQUFNLE9BQU8sR0FBRztBQUFBLFVBQy9DLE9BQU87QUFDTCxrQ0FBc0I7QUFBQTtBQUFBO0FBQUEsTUFHNUI7QUFFQSxZQUFNLFFBQVEsWUFBWSxPQUFPLEtBQUssWUFBWTtBQUNsRCxnQkFBVSxLQUFLLEtBQUs7QUFDcEIsZ0JBQVUsTUFBTTtBQUNoQixVQUFJLHFCQUFxQjtBQUN2QixpQkFBUztBQUFBLE1BQ1g7QUFHQSxlQUFTO0FBRVQsZUFBUyxnQkFBaUIsR0FBRztBQUMzQixtQkFBVyxRQUFRLFdBQVc7QUFDNUIsY0FBSSxLQUFLLFFBQVE7QUFDZixtQkFBUSxLQUFLLE9BQU87QUFBQSxVQUN0QixPQUFPO0FBQ0wsa0JBQU07QUFBQTtBQUFBLFFBRVY7QUFBQTtBQU1GLGFBQU8sbUNBQW1DO0FBQUEsSUFDNUMsV0FBVyxXQUFXLE1BQU0sR0FBRztBQUk3QixlQUFTO0FBR1QsZUFBUyxPQUFPO0FBSWhCLFVBQUksT0FBTyxNQUFNO0FBQ2YsZUFBTyxPQUFPO0FBQUEsTUFDaEI7QUFBQSxJQUNGLGtCQUFrQixPQUFPLE9BQU8sbUJBQW1CLFlBQVk7QUFFN0QsVUFBSSxXQUFXO0FBQ2IsY0FBTSxJQUFJLFVBQVUsV0FBVztBQUFBLE1BQ2pDO0FBR0EsVUFBSSxLQUFLLFlBQVksTUFBTSxLQUFLLE9BQU8sUUFBUTtBQUM3QyxjQUFNLElBQUksVUFDUix3REFDRjtBQUFBLE1BQ0Y7QUFFQSxlQUNFLGtCQUFrQixrQkFBaUIsU0FBUyxtQkFBbUIsTUFBTTtBQUFBLElBQ3pFO0FBSUEsZUFBVyxXQUFXLFlBQVksS0FBSyxTQUFTLE1BQU0sR0FBRztBQUN2RCxlQUFTLE9BQU8sV0FBVyxNQUFNO0FBQUEsSUFDbkM7QUFHQSxRQUFJLFVBQVUsTUFBTTtBQUVsQixVQUFJO0FBQ0osZUFBUyxJQUFJLGdCQUFlO0FBQUEsYUFDcEIsTUFBTSxHQUFHO0FBQ2IscUJBQVcsT0FBTyxNQUFNLEVBQUUsT0FBTyxlQUFlO0FBQUE7QUFBQSxhQUU1QyxLQUFLLENBQUMsWUFBWTtBQUN0QixrQkFBUSxPQUFPLFNBQVMsTUFBTSxTQUFTLEtBQUs7QUFDNUMsY0FBSSxNQUFNO0FBRVIsMkJBQWUsTUFBTTtBQUNuQix5QkFBVyxNQUFNO0FBQUEsYUFDbEI7QUFBQSxVQUNILE9BQU87QUFJTCxpQkFBSyxVQUFVLE1BQU0sR0FBRztBQUN0Qix5QkFBVyxRQUFRLElBQUksV0FBVyxLQUFLLENBQUM7QUFBQSxZQUMxQztBQUFBO0FBRUYsaUJBQU8sV0FBVyxjQUFjO0FBQUE7QUFBQSxhQUU1QixPQUFPLENBQUMsUUFBUTtBQUNwQixnQkFBTSxTQUFTLE9BQU87QUFBQTtBQUFBLFFBRXhCLE1BQU07QUFBQSxNQUNSLENBQUM7QUFBQSxJQUNIO0FBSUEsVUFBTSxPQUFPLEVBQUUsUUFBUSxRQUFRLE9BQU87QUFHdEMsV0FBTyxDQUFDLE1BQU0sSUFBSTtBQUFBO0FBSXBCLFdBQVMsaUJBQWtCLENBQUMsUUFBUSxZQUFZLE9BQU87QUFDckQsU0FBSyxpQkFBZ0I7QUFFbkIsZ0RBQXVDO0FBQUEsSUFDekM7QUFNQSxRQUFJLGtCQUFrQixpQkFBZ0I7QUFHcEMsY0FBUSxLQUFLLFlBQVksTUFBTSxHQUFHLHFDQUFxQztBQUV2RSxjQUFRLE9BQU8sUUFBUSx1QkFBdUI7QUFBQSxJQUNoRDtBQUdBLFdBQU8sWUFBWSxRQUFRLFNBQVM7QUFBQTtBQUd0QyxXQUFTLFNBQVUsQ0FBQyxNQUFNO0FBTXhCLFdBQU8sTUFBTSxRQUFRLEtBQUssT0FBTyxJQUFJO0FBQ3JDLFVBQU0sWUFBWSxnQkFBZ0IsTUFBTSxFQUFFLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUc1RCxhQUFTLGNBQWMsVUFBVSxJQUFJO0FBR3JDLFNBQUssU0FBUztBQUdkLFdBQU87QUFBQSxNQUNMLFFBQVE7QUFBQSxNQUNSLFFBQVEsS0FBSztBQUFBLE1BQ2IsUUFBUSxLQUFLO0FBQUEsSUFDZjtBQUFBO0FBR0Ysa0JBQWlCLFdBQVksQ0FBQyxNQUFNO0FBQ2xDLFFBQUksTUFBTTtBQUNSLFVBQUksYUFBYSxJQUFJLEdBQUc7QUFDdEIsY0FBTTtBQUFBLE1BQ1IsT0FBTztBQUNMLGNBQU0sU0FBUyxLQUFLO0FBRXBCLFlBQUksS0FBSyxZQUFZLE1BQU0sR0FBRztBQUM1QixnQkFBTSxJQUFJLFVBQVUscUNBQXFDO0FBQUEsUUFDM0Q7QUFFQSxZQUFJLE9BQU8sUUFBUTtBQUNqQixnQkFBTSxJQUFJLFVBQVUsdUJBQXVCO0FBQUEsUUFDN0M7QUFHQSxlQUFPLGFBQWE7QUFFcEIsZUFBUTtBQUFBO0FBQUEsSUFFWjtBQUFBO0FBR0YsV0FBUyxjQUFlLENBQUMsT0FBTztBQUM5QixRQUFJLE1BQU0sU0FBUztBQUNqQixZQUFNLElBQUksY0FBYSw4QkFBOEIsWUFBWTtBQUFBLElBQ25FO0FBQUE7QUFHRixXQUFTLGdCQUFpQixDQUFDLFVBQVU7QUFDbkMsVUFBTSxVQUFVO0FBQUEsTUFDZCxJQUFLLEdBQUc7QUFNTixlQUFPLGdCQUFnQixNQUFNLENBQUMsVUFBVTtBQUN0QyxjQUFJLFdBQVcsYUFBYSxJQUFJO0FBRWhDLGNBQUksYUFBYSxXQUFXO0FBQzFCLHVCQUFXO0FBQUEsVUFDYixXQUFXLFVBQVU7QUFDbkIsdUJBQVcsbUJBQW1CLFFBQVE7QUFBQSxVQUN4QztBQUlBLGlCQUFPLElBQUksTUFBSyxDQUFDLEtBQUssR0FBRyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQUEsV0FDMUMsUUFBUTtBQUFBO0FBQUEsTUFHYixXQUFZLEdBQUc7QUFLYixlQUFPLGdCQUFnQixNQUFNLENBQUMsVUFBVTtBQUN0QyxpQkFBTyxJQUFJLFdBQVcsS0FBSyxFQUFFO0FBQUEsV0FDNUIsUUFBUTtBQUFBO0FBQUEsTUFHYixJQUFLLEdBQUc7QUFHTixlQUFPLGdCQUFnQixNQUFNLGlCQUFpQixRQUFRO0FBQUE7QUFBQSxNQUd4RCxJQUFLLEdBQUc7QUFHTixlQUFPLGdCQUFnQixNQUFNLG9CQUFvQixRQUFRO0FBQUE7QUFBQSxXQUdyRCxTQUFTLEdBQUc7QUFDaEIsZUFBTyxXQUFXLE1BQU0sUUFBUTtBQUVoQyx1QkFBZSxLQUFLLE9BQU87QUFFM0IsY0FBTSxjQUFjLEtBQUssUUFBUSxJQUFJLGNBQWM7QUFHbkQsWUFBSSx1QkFBdUIsS0FBSyxXQUFXLEdBQUc7QUFDNUMsZ0JBQU0sVUFBVSxDQUFDO0FBQ2pCLHNCQUFZLEtBQUssVUFBVSxLQUFLO0FBQVMsb0JBQVEsSUFBSSxZQUFZLEtBQUs7QUFFdEUsZ0JBQU0sbUJBQW1CLElBQUk7QUFFN0IsY0FBSTtBQUVKLGNBQUk7QUFDRixxQkFBUyxJQUFJLE9BQU87QUFBQSxjQUNsQjtBQUFBLGNBQ0EsY0FBYztBQUFBLFlBQ2hCLENBQUM7QUFBQSxtQkFDTSxLQUFQO0FBQ0Esa0JBQU0sSUFBSSxjQUFhLEdBQUcsT0FBTyxZQUFZO0FBQUE7QUFHL0MsaUJBQU8sR0FBRyxTQUFTLENBQUMsTUFBTSxVQUFVO0FBQ2xDLDZCQUFpQixPQUFPLE1BQU0sS0FBSztBQUFBLFdBQ3BDO0FBQ0QsaUJBQU8sR0FBRyxRQUFRLENBQUMsTUFBTSxPQUFPLFVBQVUsVUFBVSxhQUFhO0FBQy9ELGtCQUFNLFNBQVMsQ0FBQztBQUVoQixnQkFBSSxhQUFhLFlBQVksU0FBUyxZQUFZLE1BQU0sVUFBVTtBQUNoRSxrQkFBSSxjQUFjO0FBRWxCLG9CQUFNLEdBQUcsUUFBUSxDQUFDLFVBQVU7QUFDMUIsK0JBQWUsTUFBTSxTQUFTLEVBQUUsUUFBUSxZQUFZLEVBQUU7QUFFdEQsc0JBQU0sTUFBTSxZQUFZLFNBQVMsWUFBWSxTQUFTO0FBQ3RELHVCQUFPLEtBQUssT0FBTyxLQUFLLFlBQVksTUFBTSxHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUM7QUFFNUQsOEJBQWMsWUFBWSxNQUFNLEdBQUc7QUFBQSxlQUNwQztBQUNELG9CQUFNLEdBQUcsT0FBTyxNQUFNO0FBQ3BCLHVCQUFPLEtBQUssT0FBTyxLQUFLLGFBQWEsUUFBUSxDQUFDO0FBQzlDLGlDQUFpQixPQUFPLE1BQU0sSUFBSSxNQUFLLFFBQVEsVUFBVSxFQUFFLE1BQU0sU0FBUyxDQUFDLENBQUM7QUFBQSxlQUM3RTtBQUFBLFlBQ0gsT0FBTztBQUNMLG9CQUFNLEdBQUcsUUFBUSxDQUFDLFVBQVU7QUFDMUIsdUJBQU8sS0FBSyxLQUFLO0FBQUEsZUFDbEI7QUFDRCxvQkFBTSxHQUFHLE9BQU8sTUFBTTtBQUNwQixpQ0FBaUIsT0FBTyxNQUFNLElBQUksTUFBSyxRQUFRLFVBQVUsRUFBRSxNQUFNLFNBQVMsQ0FBQyxDQUFDO0FBQUEsZUFDN0U7QUFBQTtBQUFBLFdBRUo7QUFFRCxnQkFBTSxnQkFBZ0IsSUFBSSxRQUFRLENBQUMsU0FBUyxXQUFXO0FBQ3JELG1CQUFPLEdBQUcsVUFBVSxPQUFPO0FBQzNCLG1CQUFPLEdBQUcsU0FBUyxDQUFDLFFBQVEsT0FBTyxJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFBQSxXQUN2RDtBQUVELGNBQUksS0FBSyxTQUFTO0FBQU0sNkJBQWlCLFNBQVMsWUFBWSxLQUFLLFFBQVEsSUFBSTtBQUFHLHFCQUFPLE1BQU0sS0FBSztBQUNwRyxpQkFBTyxJQUFJO0FBQ1gsZ0JBQU07QUFFTixpQkFBTztBQUFBLFFBQ1QsV0FBVyxxQ0FBcUMsS0FBSyxXQUFXLEdBQUc7QUFJakUsY0FBSTtBQUNKLGNBQUk7QUFDRixnQkFBSSxPQUFPO0FBSVgsa0JBQU0sbUJBQW1CLElBQUksWUFBWSxTQUFTLEVBQUUsV0FBVyxLQUFLLENBQUM7QUFFckUsNkJBQWlCLFNBQVMsWUFBWSxLQUFLLFFBQVEsSUFBSSxHQUFHO0FBQ3hELG1CQUFLLGFBQWEsS0FBSyxHQUFHO0FBQ3hCLHNCQUFNLElBQUksVUFBVSwyQkFBMkI7QUFBQSxjQUNqRDtBQUNBLHNCQUFRLGlCQUFpQixPQUFPLE9BQU8sRUFBRSxRQUFRLEtBQUssQ0FBQztBQUFBLFlBQ3pEO0FBQ0Esb0JBQVEsaUJBQWlCLE9BQU87QUFDaEMsc0JBQVUsSUFBSSxnQkFBZ0IsSUFBSTtBQUFBLG1CQUMzQixLQUFQO0FBR0Esa0JBQU0sT0FBTyxPQUFPLElBQUksV0FBYSxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQUE7QUFJckQsZ0JBQU0sV0FBVyxJQUFJO0FBQ3JCLHNCQUFZLE1BQU0sVUFBVSxTQUFTO0FBQ25DLHFCQUFTLE9BQU8sTUFBTSxLQUFLO0FBQUEsVUFDN0I7QUFDQSxpQkFBTztBQUFBLFFBQ1QsT0FBTztBQUdMLGdCQUFNLFFBQVEsUUFBUTtBQUV0Qix5QkFBZSxLQUFLLE9BQU87QUFHM0IsZ0JBQU0sT0FBTyxPQUFPLFVBQVU7QUFBQSxZQUM1QixRQUFRLEdBQUcsU0FBUztBQUFBLFlBQ3BCLFNBQVM7QUFBQSxVQUNYLENBQUM7QUFBQTtBQUFBO0FBQUEsSUFHUDtBQUVBLFdBQU87QUFBQTtBQUdULFdBQVMsU0FBVSxDQUFDLFdBQVc7QUFDN0IsV0FBTyxPQUFPLFVBQVUsV0FBVyxpQkFBaUIsU0FBUyxDQUFDO0FBQUE7QUFTaEUsaUJBQWUsZUFBZ0IsQ0FBQyxRQUFRLHVCQUF1QixVQUFVO0FBQ3ZFLFdBQU8sV0FBVyxRQUFRLFFBQVE7QUFFbEMsbUJBQWUsT0FBTyxPQUFPO0FBSTdCLFFBQUksYUFBYSxPQUFPLFFBQVEsSUFBSSxHQUFHO0FBQ3JDLFlBQU0sSUFBSSxVQUFVLGtCQUFrQjtBQUFBLElBQ3hDO0FBR0EsVUFBTSxVQUFVLHNCQUFzQjtBQUd0QyxVQUFNLGFBQWEsQ0FBQyxVQUFVLFFBQVEsT0FBTyxLQUFLO0FBTWxELFVBQU0sZUFBZSxDQUFDLFNBQVM7QUFDN0IsVUFBSTtBQUNGLGdCQUFRLFFBQVEsc0JBQXNCLElBQUksQ0FBQztBQUFBLGVBQ3BDLEdBQVA7QUFDQSxtQkFBVyxDQUFDO0FBQUE7QUFBQTtBQU1oQixRQUFJLE9BQU8sUUFBUSxRQUFRLE1BQU07QUFDL0IsbUJBQWEsSUFBSSxVQUFZO0FBQzdCLGFBQU8sUUFBUTtBQUFBLElBQ2pCO0FBSUEsVUFBTSxjQUFjLE9BQU8sUUFBUSxNQUFNLGNBQWMsVUFBVTtBQUdqRSxXQUFPLFFBQVE7QUFBQTtBQUlqQixXQUFTLFlBQWEsQ0FBQyxNQUFNO0FBSTNCLFdBQU8sUUFBUSxTQUFTLEtBQUssT0FBTyxVQUFVLEtBQUssWUFBWSxLQUFLLE1BQU07QUFBQTtBQU81RSxXQUFTLGVBQWdCLENBQUMsUUFBUTtBQUNoQyxRQUFJLE9BQU8sV0FBVyxHQUFHO0FBQ3ZCLGFBQU87QUFBQSxJQUNUO0FBT0EsUUFBSSxPQUFPLE9BQU8sT0FBUSxPQUFPLE9BQU8sT0FBUSxPQUFPLE9BQU8sS0FBTTtBQUNsRSxlQUFTLE9BQU8sU0FBUyxDQUFDO0FBQUEsSUFDNUI7QUFJQSxVQUFNLFNBQVMsWUFBWSxPQUFPLE1BQU07QUFHeEMsV0FBTztBQUFBO0FBT1QsV0FBUyxrQkFBbUIsQ0FBQyxPQUFPO0FBQ2xDLFdBQU8sS0FBSyxNQUFNLGdCQUFnQixLQUFLLENBQUM7QUFBQTtBQU8xQyxXQUFTLFlBQWEsQ0FBQyxRQUFRO0FBQzdCLFlBQVEsZ0JBQWdCLE9BQU87QUFDL0IsVUFBTSxjQUFjLFlBQVksSUFBSSxjQUFjO0FBRWxELFFBQUksZ0JBQWdCLE1BQU07QUFDeEIsYUFBTztBQUFBLElBQ1Q7QUFFQSxXQUFPLGNBQWMsV0FBVztBQUFBO0FBR2xDLFNBQU8sVUFBVTtBQUFBLElBQ2Y7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNGO0FBQUE7Ozs7QUMxbEJBO0FBQUEsSUFDRTtBQUFBLElBQ0E7QUFBQTtBQUVGLE1BQU07QUFDTixRQUFRLG9CQUFvQixtQkFBbUI7QUFDL0MsTUFBTTtBQVVOLE1BQU0sY0FBYztBQVFwQixNQUFNLGtCQUFrQjtBQUd4QixNQUFNLG1CQUFtQjtBQUV6QixNQUFNLFdBQVcsT0FBTyxTQUFTO0FBRWpDLE1BQU0sV0FBVyxDQUFDO0FBRWxCLE1BQUk7QUFFSixNQUFJO0FBQ0YsVUFBTTtBQUNOLGFBQVMsU0FBUyxtQkFBbUIsUUFBUSx1QkFBdUI7QUFDcEUsYUFBUyxXQUFXLG1CQUFtQixRQUFRLHlCQUF5QjtBQUN4RSxhQUFTLFVBQVUsbUJBQW1CLFFBQVEsd0JBQXdCO0FBQ3RFLGFBQVMsV0FBVyxtQkFBbUIsUUFBUSx5QkFBeUI7QUFDeEUsYUFBUyxRQUFRLG1CQUFtQixRQUFRLHNCQUFzQjtBQUFBLFVBQ2xFO0FBQ0EsYUFBUyxTQUFTLEVBQUUsZ0JBQWdCLE1BQU07QUFDMUMsYUFBUyxXQUFXLEVBQUUsZ0JBQWdCLE1BQU07QUFDNUMsYUFBUyxVQUFVLEVBQUUsZ0JBQWdCLE1BQU07QUFDM0MsYUFBUyxXQUFXLEVBQUUsZ0JBQWdCLE1BQU07QUFDNUMsYUFBUyxRQUFRLEVBQUUsZ0JBQWdCLE1BQU07QUFBQTtBQUczQztBQUFBLFFBQU0sUUFBUTtBQUFBLElBQ1osV0FBWSxDQUFDO0FBQUEsTUFDWDtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE9BQ0MsU0FBUztBQUNWLGlCQUFXLFNBQVMsVUFBVTtBQUM1QixjQUFNLElBQUkscUJBQXFCLHVCQUF1QjtBQUFBLE1BQ3hELFdBQ0UsS0FBSyxPQUFPLFNBQ1YsS0FBSyxXQUFXLFNBQVMsS0FBSyxLQUFLLFdBQVcsVUFBVSxNQUMxRCxXQUFXLFdBQ1g7QUFDQSxjQUFNLElBQUkscUJBQXFCLG9EQUFvRDtBQUFBLE1BQ3JGLFdBQVcsaUJBQWlCLEtBQUssSUFBSSxNQUFNLE1BQU07QUFDL0MsY0FBTSxJQUFJLHFCQUFxQixzQkFBc0I7QUFBQSxNQUN2RDtBQUVBLGlCQUFXLFdBQVcsVUFBVTtBQUM5QixjQUFNLElBQUkscUJBQXFCLHlCQUF5QjtBQUFBLE1BQzFELFdBQVcsWUFBWSxLQUFLLE1BQU0sTUFBTSxNQUFNO0FBQzVDLGNBQU0sSUFBSSxxQkFBcUIsd0JBQXdCO0FBQUEsTUFDekQ7QUFFQSxVQUFJLGtCQUFrQixZQUFZLFVBQVU7QUFDMUMsY0FBTSxJQUFJLHFCQUFxQiwwQkFBMEI7QUFBQSxNQUMzRDtBQUVBLFVBQUksa0JBQWtCLFVBQVUsT0FBTyxTQUFTLGNBQWMsS0FBSyxpQkFBaUIsSUFBSTtBQUN0RixjQUFNLElBQUkscUJBQXFCLHdCQUF3QjtBQUFBLE1BQ3pEO0FBRUEsVUFBSSxlQUFlLFVBQVUsT0FBTyxTQUFTLFdBQVcsS0FBSyxjQUFjLElBQUk7QUFDN0UsY0FBTSxJQUFJLHFCQUFxQixxQkFBcUI7QUFBQSxNQUN0RDtBQUVBLFVBQUksU0FBUyxlQUFlLFVBQVUsV0FBVztBQUMvQyxjQUFNLElBQUkscUJBQXFCLGVBQWU7QUFBQSxNQUNoRDtBQUVBLFVBQUksa0JBQWtCLGVBQWUsbUJBQW1CLFdBQVc7QUFDakUsY0FBTSxJQUFJLHFCQUFxQix3QkFBd0I7QUFBQSxNQUN6RDtBQUVBLFdBQUssaUJBQWlCO0FBRXRCLFdBQUssY0FBYztBQUVuQixXQUFLLGVBQWUsaUJBQWlCO0FBRXJDLFdBQUssU0FBUztBQUVkLFdBQUssUUFBUTtBQUViLFVBQUksUUFBUSxNQUFNO0FBQ2hCLGFBQUssT0FBTztBQUFBLE1BQ2QsV0FBVyxLQUFLLFNBQVMsSUFBSSxHQUFHO0FBQzlCLGFBQUssT0FBTztBQUVaLGNBQU0sU0FBUyxLQUFLLEtBQUs7QUFDekIsYUFBSyxXQUFXLE9BQU8sYUFBYTtBQUNsQyxlQUFLLHNCQUFzQixXQUFZLEdBQUc7QUFDeEMsaUJBQUssUUFBUSxJQUFJO0FBQUE7QUFFbkIsZUFBSyxLQUFLLEdBQUcsT0FBTyxLQUFLLFVBQVU7QUFBQSxRQUNyQztBQUVBLGFBQUssZUFBZSxTQUFPO0FBQ3pCLGNBQUksS0FBSyxPQUFPO0FBQ2QsaUJBQUssTUFBTSxHQUFHO0FBQUEsVUFDaEIsT0FBTztBQUNMLGlCQUFLLFFBQVE7QUFBQTtBQUFBO0FBR2pCLGFBQUssS0FBSyxHQUFHLFNBQVMsS0FBSyxZQUFZO0FBQUEsTUFDekMsV0FBVyxLQUFLLFNBQVMsSUFBSSxHQUFHO0FBQzlCLGFBQUssT0FBTyxLQUFLLGFBQWEsT0FBTztBQUFBLE1BQ3ZDLFdBQVcsWUFBWSxPQUFPLElBQUksR0FBRztBQUNuQyxhQUFLLE9BQU8sS0FBSyxPQUFPLGFBQWEsT0FBTyxLQUFLLEtBQUssUUFBUSxLQUFLLFlBQVksS0FBSyxVQUFVLElBQUk7QUFBQSxNQUNwRyxXQUFXLGdCQUFnQixhQUFhO0FBQ3RDLGFBQUssT0FBTyxLQUFLLGFBQWEsT0FBTyxLQUFLLElBQUksSUFBSTtBQUFBLE1BQ3BELGtCQUFrQixTQUFTLFVBQVU7QUFDbkMsYUFBSyxPQUFPLEtBQUssU0FBUyxPQUFPLEtBQUssSUFBSSxJQUFJO0FBQUEsTUFDaEQsV0FBVyxLQUFLLGVBQWUsSUFBSSxLQUFLLEtBQUssV0FBVyxJQUFJLEtBQUssS0FBSyxXQUFXLElBQUksR0FBRztBQUN0RixhQUFLLE9BQU87QUFBQSxNQUNkLE9BQU87QUFDTCxjQUFNLElBQUkscUJBQXFCLHVGQUF1RjtBQUFBO0FBR3hILFdBQUssWUFBWTtBQUVqQixXQUFLLFVBQVU7QUFFZixXQUFLLFVBQVUsV0FBVztBQUUxQixXQUFLLE9BQU8sUUFBUSxLQUFLLFNBQVMsTUFBTSxLQUFLLElBQUk7QUFFakQsV0FBSyxTQUFTO0FBRWQsV0FBSyxhQUFhLGNBQWMsT0FDNUIsV0FBVyxVQUFVLFdBQVcsUUFDaEM7QUFFSixXQUFLLFdBQVcsWUFBWSxPQUFPLFFBQVE7QUFFM0MsV0FBSyxRQUFRLFNBQVMsT0FBTyxPQUFPO0FBRXBDLFdBQUssT0FBTztBQUVaLFdBQUssZ0JBQWdCO0FBRXJCLFdBQUssY0FBYztBQUVuQixXQUFLLFVBQVU7QUFHZixXQUFLLGlCQUFpQixrQkFBa0IsT0FBTyxpQkFBaUI7QUFFaEUsVUFBSSxNQUFNLFFBQVEsT0FBTyxHQUFHO0FBQzFCLFlBQUksUUFBUSxTQUFTLE1BQU0sR0FBRztBQUM1QixnQkFBTSxJQUFJLHFCQUFxQiw0QkFBNEI7QUFBQSxRQUM3RDtBQUNBLGlCQUFTLElBQUksRUFBRyxJQUFJLFFBQVEsUUFBUSxLQUFLLEdBQUc7QUFDMUMsd0JBQWMsTUFBTSxRQUFRLElBQUksUUFBUSxJQUFJLEVBQUU7QUFBQSxRQUNoRDtBQUFBLE1BQ0YsV0FBVyxrQkFBa0IsWUFBWSxVQUFVO0FBQ2pELGNBQU0sT0FBTyxPQUFPLEtBQUssT0FBTztBQUNoQyxpQkFBUyxJQUFJLEVBQUcsSUFBSSxLQUFLLFFBQVEsS0FBSztBQUNwQyxnQkFBTSxNQUFNLEtBQUs7QUFDakIsd0JBQWMsTUFBTSxLQUFLLFFBQVEsSUFBSTtBQUFBLFFBQ3ZDO0FBQUEsTUFDRixXQUFXLFdBQVcsTUFBTTtBQUMxQixjQUFNLElBQUkscUJBQXFCLHVDQUF1QztBQUFBLE1BQ3hFO0FBRUEsVUFBSSxLQUFLLGVBQWUsS0FBSyxJQUFJLEdBQUc7QUFDbEMsWUFBSSxLQUFLLFlBQVksTUFBTyxLQUFLLGNBQWMsTUFBTSxLQUFLLFlBQVksR0FBSTtBQUN4RSxnQkFBTSxJQUFJLHFCQUFxQiw4REFBOEQ7QUFBQSxRQUMvRjtBQUVBLGFBQUssYUFBYTtBQUNoQix1Q0FBMEM7QUFBQSxRQUM1QztBQUVBLGVBQU8sWUFBWSxlQUFlLFlBQVksSUFBSTtBQUNsRCxZQUFJLEtBQUssZUFBZSxNQUFNO0FBQzVCLGVBQUssY0FBYztBQUNuQixlQUFLLFdBQVcsaUJBQWlCO0FBQUEsUUFDbkM7QUFDQSxhQUFLLE9BQU8sV0FBVztBQUN2QixhQUFLLGdCQUFnQixXQUFXO0FBQUEsTUFDbEMsV0FBVyxLQUFLLFdBQVcsSUFBSSxLQUFLLEtBQUssZUFBZSxRQUFRLEtBQUssTUFBTTtBQUN6RSxhQUFLLGNBQWMsS0FBSztBQUN4QixhQUFLLFdBQVcsaUJBQWlCLEtBQUs7QUFBQSxNQUN4QztBQUVBLFdBQUssZ0JBQWdCLFNBQVMsUUFBUSxPQUFPO0FBRTdDLFdBQUssYUFBYSxLQUFLLGNBQWMsS0FBSyxJQUFJO0FBRTlDLFdBQUssWUFBWTtBQUVqQixVQUFJLFNBQVMsT0FBTyxnQkFBZ0I7QUFDbEMsaUJBQVMsT0FBTyxRQUFRLEVBQUUsU0FBUyxLQUFLLENBQUM7QUFBQSxNQUMzQztBQUFBO0FBQUEsSUFHRixVQUFXLENBQUMsT0FBTztBQUNqQixVQUFJLEtBQUssVUFBVSxZQUFZO0FBQzdCLFlBQUk7QUFDRixpQkFBTyxLQUFLLFVBQVUsV0FBVyxLQUFLO0FBQUEsaUJBQy9CLEtBQVA7QUFDQSxlQUFLLE1BQU0sR0FBRztBQUFBO0FBQUEsTUFFbEI7QUFBQTtBQUFBLElBR0YsYUFBYyxHQUFHO0FBQ2YsVUFBSSxTQUFTLFNBQVMsZ0JBQWdCO0FBQ3BDLGlCQUFTLFNBQVMsUUFBUSxFQUFFLFNBQVMsS0FBSyxDQUFDO0FBQUEsTUFDN0M7QUFFQSxVQUFJLEtBQUssVUFBVSxlQUFlO0FBQ2hDLFlBQUk7QUFDRixpQkFBTyxLQUFLLFVBQVUsY0FBYztBQUFBLGlCQUM3QixLQUFQO0FBQ0EsZUFBSyxNQUFNLEdBQUc7QUFBQTtBQUFBLE1BRWxCO0FBQUE7QUFBQSxJQUdGLFNBQVUsQ0FBQyxPQUFPO0FBQ2hCLGNBQVEsS0FBSyxPQUFPO0FBQ3BCLGNBQVEsS0FBSyxTQUFTO0FBRXRCLFVBQUksS0FBSyxPQUFPO0FBQ2QsY0FBTSxLQUFLLEtBQUs7QUFBQSxNQUNsQixPQUFPO0FBQ0wsYUFBSyxRQUFRO0FBQ2IsZUFBTyxLQUFLLFVBQVUsVUFBVSxLQUFLO0FBQUE7QUFBQTtBQUFBLElBSXpDLFNBQVUsQ0FBQyxZQUFZLFNBQVMsUUFBUSxZQUFZO0FBQ2xELGNBQVEsS0FBSyxPQUFPO0FBQ3BCLGNBQVEsS0FBSyxTQUFTO0FBRXRCLFVBQUksU0FBUyxRQUFRLGdCQUFnQjtBQUNuQyxpQkFBUyxRQUFRLFFBQVEsRUFBRSxTQUFTLE1BQU0sVUFBVSxFQUFFLFlBQVksU0FBUyxXQUFXLEVBQUUsQ0FBQztBQUFBLE1BQzNGO0FBRUEsVUFBSTtBQUNGLGVBQU8sS0FBSyxVQUFVLFVBQVUsWUFBWSxTQUFTLFFBQVEsVUFBVTtBQUFBLGVBQ2hFLEtBQVA7QUFDQSxhQUFLLE1BQU0sR0FBRztBQUFBO0FBQUE7QUFBQSxJQUlsQixNQUFPLENBQUMsT0FBTztBQUNiLGNBQVEsS0FBSyxPQUFPO0FBQ3BCLGNBQVEsS0FBSyxTQUFTO0FBRXRCLFVBQUk7QUFDRixlQUFPLEtBQUssVUFBVSxPQUFPLEtBQUs7QUFBQSxlQUMzQixLQUFQO0FBQ0EsYUFBSyxNQUFNLEdBQUc7QUFDZCxlQUFPO0FBQUE7QUFBQTtBQUFBLElBSVgsU0FBVSxDQUFDLFlBQVksU0FBUyxRQUFRO0FBQ3RDLGNBQVEsS0FBSyxPQUFPO0FBQ3BCLGNBQVEsS0FBSyxTQUFTO0FBRXRCLGFBQU8sS0FBSyxVQUFVLFVBQVUsWUFBWSxTQUFTLE1BQU07QUFBQTtBQUFBLElBRzdELFVBQVcsQ0FBQyxVQUFVO0FBQ3BCLFdBQUssVUFBVTtBQUVmLGNBQVEsS0FBSyxPQUFPO0FBRXBCLFdBQUssWUFBWTtBQUNqQixVQUFJLFNBQVMsU0FBUyxnQkFBZ0I7QUFDcEMsaUJBQVMsU0FBUyxRQUFRLEVBQUUsU0FBUyxNQUFNLFNBQVMsQ0FBQztBQUFBLE1BQ3ZEO0FBRUEsVUFBSTtBQUNGLGVBQU8sS0FBSyxVQUFVLFdBQVcsUUFBUTtBQUFBLGVBQ2xDLEtBQVA7QUFFQSxhQUFLLFFBQVEsR0FBRztBQUFBO0FBQUE7QUFBQSxJQUlwQixPQUFRLENBQUMsT0FBTztBQUNkLFdBQUssVUFBVTtBQUVmLFVBQUksU0FBUyxNQUFNLGdCQUFnQjtBQUNqQyxpQkFBUyxNQUFNLFFBQVEsRUFBRSxTQUFTLE1BQU0sTUFBTSxDQUFDO0FBQUEsTUFDakQ7QUFFQSxVQUFJLEtBQUssU0FBUztBQUNoQjtBQUFBLE1BQ0Y7QUFDQSxXQUFLLFVBQVU7QUFFZixhQUFPLEtBQUssVUFBVSxRQUFRLEtBQUs7QUFBQTtBQUFBLElBR3JDLFNBQVUsR0FBRztBQUNYLFVBQUksS0FBSyxjQUFjO0FBQ3JCLGFBQUssS0FBSyxJQUFJLFNBQVMsS0FBSyxZQUFZO0FBQ3hDLGFBQUssZUFBZTtBQUFBLE1BQ3RCO0FBRUEsVUFBSSxLQUFLLFlBQVk7QUFDbkIsYUFBSyxLQUFLLElBQUksT0FBTyxLQUFLLFVBQVU7QUFDcEMsYUFBSyxhQUFhO0FBQUEsTUFDcEI7QUFBQTtBQUFBLElBSUYsU0FBVSxDQUFDLEtBQUssT0FBTztBQUNyQixvQkFBYyxNQUFNLEtBQUssS0FBSztBQUM5QixhQUFPO0FBQUE7QUFBQSxZQUdELG1CQUFvQixDQUFDLFFBQVEsTUFBTSxTQUFTO0FBR2xELGFBQU8sSUFBSSxRQUFRLFFBQVEsTUFBTSxPQUFPO0FBQUE7QUFBQSxZQUdsQyxtQkFBb0IsQ0FBQyxRQUFRLE1BQU0sU0FBUztBQUNsRCxZQUFNLFVBQVUsS0FBSztBQUNyQixhQUFPLEtBQUssTUFBTSxTQUFTLEtBQUs7QUFFaEMsWUFBTSxVQUFVLElBQUksUUFBUSxRQUFRLE1BQU0sT0FBTztBQUVqRCxjQUFRLFVBQVUsQ0FBQztBQUVuQixVQUFJLE1BQU0sUUFBUSxPQUFPLEdBQUc7QUFDMUIsWUFBSSxRQUFRLFNBQVMsTUFBTSxHQUFHO0FBQzVCLGdCQUFNLElBQUkscUJBQXFCLDRCQUE0QjtBQUFBLFFBQzdEO0FBQ0EsaUJBQVMsSUFBSSxFQUFHLElBQUksUUFBUSxRQUFRLEtBQUssR0FBRztBQUMxQyx3QkFBYyxTQUFTLFFBQVEsSUFBSSxRQUFRLElBQUksSUFBSSxJQUFJO0FBQUEsUUFDekQ7QUFBQSxNQUNGLFdBQVcsa0JBQWtCLFlBQVksVUFBVTtBQUNqRCxjQUFNLE9BQU8sT0FBTyxLQUFLLE9BQU87QUFDaEMsaUJBQVMsSUFBSSxFQUFHLElBQUksS0FBSyxRQUFRLEtBQUs7QUFDcEMsZ0JBQU0sTUFBTSxLQUFLO0FBQ2pCLHdCQUFjLFNBQVMsS0FBSyxRQUFRLE1BQU0sSUFBSTtBQUFBLFFBQ2hEO0FBQUEsTUFDRixXQUFXLFdBQVcsTUFBTTtBQUMxQixjQUFNLElBQUkscUJBQXFCLHVDQUF1QztBQUFBLE1BQ3hFO0FBRUEsYUFBTztBQUFBO0FBQUEsWUFHRCxrQkFBbUIsQ0FBQyxLQUFLO0FBQy9CLFlBQU0sYUFBYSxJQUFJLE1BQU0sTUFBTTtBQUNuQyxZQUFNLFVBQVUsQ0FBQztBQUVqQixpQkFBVyxVQUFVLFlBQVk7QUFDL0IsZUFBTyxLQUFLLFNBQVMsT0FBTyxNQUFNLElBQUk7QUFFdEMsWUFBSSxTQUFTLFFBQVEsTUFBTSxXQUFXO0FBQUc7QUFFekMsWUFBSSxRQUFRO0FBQU0sa0JBQVEsUUFBUSxJQUFJO0FBQUE7QUFDakMsa0JBQVEsT0FBTztBQUFBLE1BQ3RCO0FBRUEsYUFBTztBQUFBO0FBQUEsRUFFWDtBQUVBLFdBQVMsa0JBQW1CLENBQUMsS0FBSyxNQUFLLFlBQVk7QUFDakQsUUFBSSxlQUFjLFNBQVEsVUFBVTtBQUNsQyxZQUFNLElBQUkscUJBQXFCLFdBQVcsWUFBWTtBQUFBLElBQ3hEO0FBRUEsV0FBTSxRQUFPLE9BQU8sR0FBRyxTQUFRO0FBRS9CLFFBQUksZ0JBQWdCLEtBQUssSUFBRyxNQUFNLE1BQU07QUFDdEMsWUFBTSxJQUFJLHFCQUFxQixXQUFXLFlBQVk7QUFBQSxJQUN4RDtBQUVBLFdBQU8sYUFBYSxPQUFNLEdBQUcsUUFBUTtBQUFBO0FBR3ZDLFdBQVMsYUFBYyxDQUFDLFNBQVMsS0FBSyxNQUFLLGFBQWEsT0FBTztBQUM3RCxRQUFJLGdCQUFlLFNBQVEsYUFBYSxNQUFNLFFBQVEsSUFBRyxJQUFJO0FBQzNELFlBQU0sSUFBSSxxQkFBcUIsV0FBVyxZQUFZO0FBQUEsSUFDeEQsV0FBVyxTQUFRLFdBQVc7QUFDNUI7QUFBQSxJQUNGO0FBRUEsUUFDRSxRQUFRLFNBQVMsUUFDakIsSUFBSSxXQUFXLEtBQ2YsSUFBSSxZQUFZLE1BQU0sUUFDdEI7QUFDQSxVQUFJLGdCQUFnQixLQUFLLElBQUcsTUFBTSxNQUFNO0FBQ3RDLGNBQU0sSUFBSSxxQkFBcUIsV0FBVyxZQUFZO0FBQUEsTUFDeEQ7QUFFQSxjQUFRLE9BQU87QUFBQSxJQUNqQixXQUNFLFFBQVEsa0JBQWtCLFFBQzFCLElBQUksV0FBVyxNQUNmLElBQUksWUFBWSxNQUFNLGtCQUN0QjtBQUNBLGNBQVEsZ0JBQWdCLFNBQVMsTUFBSyxFQUFFO0FBQ3hDLFdBQUssT0FBTyxTQUFTLFFBQVEsYUFBYSxHQUFHO0FBQzNDLGNBQU0sSUFBSSxxQkFBcUIsK0JBQStCO0FBQUEsTUFDaEU7QUFBQSxJQUNGLFdBQ0UsUUFBUSxnQkFBZ0IsUUFDeEIsSUFBSSxXQUFXLE1BQ2YsSUFBSSxZQUFZLE1BQU0sZ0JBQ3RCO0FBQ0EsY0FBUSxjQUFjO0FBQ3RCLFVBQUk7QUFBWSxnQkFBUSxRQUFRLE9BQU8sbUJBQW1CLEtBQUssTUFBSyxVQUFVO0FBQUE7QUFDekUsZ0JBQVEsV0FBVyxtQkFBbUIsS0FBSyxJQUFHO0FBQUEsSUFDckQsV0FDRSxJQUFJLFdBQVcsTUFDZixJQUFJLFlBQVksTUFBTSxxQkFDdEI7QUFDQSxZQUFNLElBQUkscUJBQXFCLGtDQUFrQztBQUFBLElBQ25FLFdBQ0UsSUFBSSxXQUFXLE1BQ2YsSUFBSSxZQUFZLE1BQU0sY0FDdEI7QUFDQSxZQUFNLGVBQWUsU0FBUSxXQUFXLEtBQUksWUFBWSxJQUFJO0FBQzVELFVBQUksVUFBVSxXQUFXLFVBQVUsY0FBYztBQUMvQyxjQUFNLElBQUkscUJBQXFCLDJCQUEyQjtBQUFBLE1BQzVELFdBQVcsVUFBVSxTQUFTO0FBQzVCLGdCQUFRLFFBQVE7QUFBQSxNQUNsQjtBQUFBLElBQ0YsV0FDRSxJQUFJLFdBQVcsTUFDZixJQUFJLFlBQVksTUFBTSxjQUN0QjtBQUNBLFlBQU0sSUFBSSxxQkFBcUIsMkJBQTJCO0FBQUEsSUFDNUQsV0FDRSxJQUFJLFdBQVcsS0FDZixJQUFJLFlBQVksTUFBTSxXQUN0QjtBQUNBLFlBQU0sSUFBSSxxQkFBcUIsd0JBQXdCO0FBQUEsSUFDekQsV0FDRSxJQUFJLFdBQVcsS0FDZixJQUFJLFlBQVksTUFBTSxVQUN0QjtBQUNBLFlBQU0sSUFBSSxrQkFBa0IsNkJBQTZCO0FBQUEsSUFDM0QsV0FBVyxZQUFZLEtBQUssR0FBRyxNQUFNLE1BQU07QUFDekMsWUFBTSxJQUFJLHFCQUFxQixvQkFBb0I7QUFBQSxJQUNyRCxPQUFPO0FBQ0wsVUFBSSxNQUFNLFFBQVEsSUFBRyxHQUFHO0FBQ3RCLGlCQUFTLElBQUksRUFBRyxJQUFJLEtBQUksUUFBUSxLQUFLO0FBQ25DLGNBQUksWUFBWTtBQUNkLGdCQUFJLFFBQVEsUUFBUTtBQUFNLHNCQUFRLFFBQVEsUUFBUSxJQUFJLG1CQUFtQixLQUFLLEtBQUksSUFBSSxVQUFVO0FBQUE7QUFDM0Ysc0JBQVEsUUFBUSxPQUFPLG1CQUFtQixLQUFLLEtBQUksSUFBSSxVQUFVO0FBQUEsVUFDeEUsT0FBTztBQUNMLG9CQUFRLFdBQVcsbUJBQW1CLEtBQUssS0FBSSxFQUFFO0FBQUE7QUFBQSxRQUVyRDtBQUFBLE1BQ0YsT0FBTztBQUNMLFlBQUk7QUFBWSxrQkFBUSxRQUFRLE9BQU8sbUJBQW1CLEtBQUssTUFBSyxVQUFVO0FBQUE7QUFDekUsa0JBQVEsV0FBVyxtQkFBbUIsS0FBSyxJQUFHO0FBQUE7QUFBQTtBQUFBO0FBS3pELFNBQU8sVUFBVTtBQUFBOzs7O0FDaGZqQixNQUFNO0FBRU47QUFBQSxRQUFNLG1CQUFtQixhQUFhO0FBQUEsSUFDcEMsUUFBUyxHQUFHO0FBQ1YsWUFBTSxJQUFJLE1BQU0saUJBQWlCO0FBQUE7QUFBQSxJQUduQyxLQUFNLEdBQUc7QUFDUCxZQUFNLElBQUksTUFBTSxpQkFBaUI7QUFBQTtBQUFBLElBR25DLE9BQVEsR0FBRztBQUNULFlBQU0sSUFBSSxNQUFNLGlCQUFpQjtBQUFBO0FBQUEsRUFFckM7QUFFQSxTQUFPLFVBQVU7QUFBQTs7OztBQ2hCakIsTUFBTTtBQUNOO0FBQUEsSUFDRTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUE7QUFFRixRQUFRLFVBQVUsUUFBUSxXQUFXO0FBRXJDLE1BQU0sYUFBYSxPQUFPLFdBQVc7QUFDckMsTUFBTSxVQUFVLE9BQU8sUUFBUTtBQUMvQixNQUFNLGVBQWUsT0FBTyxhQUFhO0FBQ3pDLE1BQU0sWUFBWSxPQUFPLFVBQVU7QUFDbkMsTUFBTSx1QkFBdUIsT0FBTyxzQkFBc0I7QUFFMUQ7QUFBQSxRQUFNLHVCQUF1QixXQUFXO0FBQUEsSUFDdEMsV0FBWSxHQUFHO0FBQ2IsWUFBTTtBQUVOLFdBQUssY0FBYztBQUNuQixXQUFLLGdCQUFnQjtBQUNyQixXQUFLLFdBQVc7QUFDaEIsV0FBSyxhQUFhLENBQUM7QUFBQTtBQUFBLFFBR2pCLFNBQVUsR0FBRztBQUNmLGFBQU8sS0FBSztBQUFBO0FBQUEsUUFHVixNQUFPLEdBQUc7QUFDWixhQUFPLEtBQUs7QUFBQTtBQUFBLFFBR1YsWUFBYSxHQUFHO0FBQ2xCLGFBQU8sS0FBSztBQUFBO0FBQUEsUUFHVixZQUFhLENBQUMsaUJBQWlCO0FBQ2pDLFVBQUksaUJBQWlCO0FBQ25CLGlCQUFTLElBQUksZ0JBQWdCLFNBQVMsRUFBRyxLQUFLLEdBQUcsS0FBSztBQUNwRCxnQkFBTSxjQUFjLEtBQUssZUFBZTtBQUN4QyxxQkFBVyxnQkFBZ0IsWUFBWTtBQUNyQyxrQkFBTSxJQUFJLHFCQUFxQixpQ0FBaUM7QUFBQSxVQUNsRTtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBRUEsV0FBSyxpQkFBaUI7QUFBQTtBQUFBLElBR3hCLEtBQU0sQ0FBQyxVQUFVO0FBQ2YsVUFBSSxhQUFhLFdBQVc7QUFDMUIsZUFBTyxJQUFJLFFBQVEsQ0FBQyxTQUFTLFdBQVc7QUFDdEMsZUFBSyxNQUFNLENBQUMsS0FBSyxTQUFTO0FBQ3hCLG1CQUFPLE1BQU0sT0FBTyxHQUFHLElBQUksUUFBUSxJQUFJO0FBQUEsV0FDeEM7QUFBQSxTQUNGO0FBQUEsTUFDSDtBQUVBLGlCQUFXLGFBQWEsWUFBWTtBQUNsQyxjQUFNLElBQUkscUJBQXFCLGtCQUFrQjtBQUFBLE1BQ25EO0FBRUEsVUFBSSxLQUFLLGFBQWE7QUFDcEIsdUJBQWUsTUFBTSxTQUFTLElBQUksc0JBQXdCLElBQUksQ0FBQztBQUMvRDtBQUFBLE1BQ0Y7QUFFQSxVQUFJLEtBQUssVUFBVTtBQUNqQixZQUFJLEtBQUssWUFBWTtBQUNuQixlQUFLLFdBQVcsS0FBSyxRQUFRO0FBQUEsUUFDL0IsT0FBTztBQUNMLHlCQUFlLE1BQU0sU0FBUyxNQUFNLElBQUksQ0FBQztBQUFBO0FBRTNDO0FBQUEsTUFDRjtBQUVBLFdBQUssV0FBVztBQUNoQixXQUFLLFdBQVcsS0FBSyxRQUFRO0FBRTdCLFlBQU0sV0FBVyxNQUFNO0FBQ3JCLGNBQU0sWUFBWSxLQUFLO0FBQ3ZCLGFBQUssYUFBYTtBQUNsQixpQkFBUyxJQUFJLEVBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUN6QyxvQkFBVSxHQUFHLE1BQU0sSUFBSTtBQUFBLFFBQ3pCO0FBQUE7QUFJRixXQUFLLFFBQVEsRUFDVixLQUFLLE1BQU0sS0FBSyxRQUFRLENBQUMsRUFDekIsS0FBSyxNQUFNO0FBQ1YsdUJBQWUsUUFBUTtBQUFBLE9BQ3hCO0FBQUE7QUFBQSxJQUdMLE9BQVEsQ0FBQyxLQUFLLFVBQVU7QUFDdEIsaUJBQVcsUUFBUSxZQUFZO0FBQzdCLG1CQUFXO0FBQ1gsY0FBTTtBQUFBLE1BQ1I7QUFFQSxVQUFJLGFBQWEsV0FBVztBQUMxQixlQUFPLElBQUksUUFBUSxDQUFDLFNBQVMsV0FBVztBQUN0QyxlQUFLLFFBQVEsS0FBSyxDQUFDLE1BQUssU0FBUztBQUMvQixtQkFBTyxPQUFxRCxPQUFPLElBQUcsSUFBSSxRQUFRLElBQUk7QUFBQSxXQUN2RjtBQUFBLFNBQ0Y7QUFBQSxNQUNIO0FBRUEsaUJBQVcsYUFBYSxZQUFZO0FBQ2xDLGNBQU0sSUFBSSxxQkFBcUIsa0JBQWtCO0FBQUEsTUFDbkQ7QUFFQSxVQUFJLEtBQUssYUFBYTtBQUNwQixZQUFJLEtBQUssZUFBZTtBQUN0QixlQUFLLGNBQWMsS0FBSyxRQUFRO0FBQUEsUUFDbEMsT0FBTztBQUNMLHlCQUFlLE1BQU0sU0FBUyxNQUFNLElBQUksQ0FBQztBQUFBO0FBRTNDO0FBQUEsTUFDRjtBQUVBLFdBQUssS0FBSztBQUNSLGNBQU0sSUFBSTtBQUFBLE1BQ1o7QUFFQSxXQUFLLGNBQWM7QUFDbkIsV0FBSyxnQkFBZ0IsS0FBSyxpQkFBaUIsQ0FBQztBQUM1QyxXQUFLLGNBQWMsS0FBSyxRQUFRO0FBRWhDLFlBQU0sY0FBYyxNQUFNO0FBQ3hCLGNBQU0sWUFBWSxLQUFLO0FBQ3ZCLGFBQUssZ0JBQWdCO0FBQ3JCLGlCQUFTLElBQUksRUFBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQ3pDLG9CQUFVLEdBQUcsTUFBTSxJQUFJO0FBQUEsUUFDekI7QUFBQTtBQUlGLFdBQUssVUFBVSxHQUFHLEVBQUUsS0FBSyxNQUFNO0FBQzdCLHVCQUFlLFdBQVc7QUFBQSxPQUMzQjtBQUFBO0FBQUEsS0FHRixxQkFBc0IsQ0FBQyxNQUFNLFNBQVM7QUFDckMsV0FBSyxLQUFLLGtCQUFrQixLQUFLLGVBQWUsV0FBVyxHQUFHO0FBQzVELGFBQUssd0JBQXdCLEtBQUs7QUFDbEMsZUFBTyxLQUFLLFdBQVcsTUFBTSxPQUFPO0FBQUEsTUFDdEM7QUFFQSxVQUFJLFdBQVcsS0FBSyxXQUFXLEtBQUssSUFBSTtBQUN4QyxlQUFTLElBQUksS0FBSyxlQUFlLFNBQVMsRUFBRyxLQUFLLEdBQUcsS0FBSztBQUN4RCxtQkFBVyxLQUFLLGVBQWUsR0FBRyxRQUFRO0FBQUEsTUFDNUM7QUFDQSxXQUFLLHdCQUF3QjtBQUM3QixhQUFPLFNBQVMsTUFBTSxPQUFPO0FBQUE7QUFBQSxJQUcvQixRQUFTLENBQUMsTUFBTSxTQUFTO0FBQ3ZCLFdBQUssa0JBQWtCLFlBQVksVUFBVTtBQUMzQyxjQUFNLElBQUkscUJBQXFCLDJCQUEyQjtBQUFBLE1BQzVEO0FBRUEsVUFBSTtBQUNGLGFBQUssZUFBZSxTQUFTLFVBQVU7QUFDckMsZ0JBQU0sSUFBSSxxQkFBcUIseUJBQXlCO0FBQUEsUUFDMUQ7QUFFQSxZQUFJLEtBQUssZUFBZSxLQUFLLGVBQWU7QUFDMUMsZ0JBQU0sSUFBSTtBQUFBLFFBQ1o7QUFFQSxZQUFJLEtBQUssVUFBVTtBQUNqQixnQkFBTSxJQUFJO0FBQUEsUUFDWjtBQUVBLGVBQU8sS0FBSyxzQkFBc0IsTUFBTSxPQUFPO0FBQUEsZUFDeEMsS0FBUDtBQUNBLG1CQUFXLFFBQVEsWUFBWSxZQUFZO0FBQ3pDLGdCQUFNLElBQUkscUJBQXFCLHdCQUF3QjtBQUFBLFFBQ3pEO0FBRUEsZ0JBQVEsUUFBUSxHQUFHO0FBRW5CLGVBQU87QUFBQTtBQUFBO0FBQUEsRUFHYjtBQUVBLFNBQU8sVUFBVTtBQUFBOzs7O0FDN0xqQixNQUFNO0FBQ04sTUFBTTtBQUNOLE1BQU07QUFDTixRQUFRLHNCQUFzQjtBQUU5QixNQUFJO0FBT0osTUFBSTtBQUdKLE1BQUksT0FBTyx5QkFBeUIsUUFBUSxJQUFJLGtCQUFrQjtBQUNoRSxtQkFBZSxNQUFNLGlCQUFpQjtBQUFBLE1BQ3BDLFdBQVksQ0FBQyxtQkFBbUI7QUFDOUIsYUFBSyxxQkFBcUI7QUFDMUIsYUFBSyxnQkFBZ0IsSUFBSTtBQUN6QixhQUFLLG1CQUFtQixJQUFJLE9BQU8scUJBQXFCLENBQUMsUUFBUTtBQUMvRCxjQUFJLEtBQUssY0FBYyxPQUFPLEtBQUssb0JBQW9CO0FBQ3JEO0FBQUEsVUFDRjtBQUVBLGdCQUFNLE1BQU0sS0FBSyxjQUFjLElBQUksR0FBRztBQUN0QyxjQUFJLFFBQVEsYUFBYSxJQUFJLE1BQU0sTUFBTSxXQUFXO0FBQ2xELGlCQUFLLGNBQWMsT0FBTyxHQUFHO0FBQUEsVUFDL0I7QUFBQSxTQUNEO0FBQUE7QUFBQSxNQUdILEdBQUksQ0FBQyxZQUFZO0FBQ2YsY0FBTSxNQUFNLEtBQUssY0FBYyxJQUFJLFVBQVU7QUFDN0MsZUFBTyxNQUFNLElBQUksTUFBTSxJQUFJO0FBQUE7QUFBQSxNQUc3QixHQUFJLENBQUMsWUFBWSxTQUFTO0FBQ3hCLFlBQUksS0FBSyx1QkFBdUIsR0FBRztBQUNqQztBQUFBLFFBQ0Y7QUFFQSxhQUFLLGNBQWMsSUFBSSxZQUFZLElBQUksUUFBUSxPQUFPLENBQUM7QUFDdkQsYUFBSyxpQkFBaUIsU0FBUyxTQUFTLFVBQVU7QUFBQTtBQUFBLElBRXREO0FBQUEsRUFDRixPQUFPO0FBQ0wsbUJBQWUsTUFBTSxtQkFBbUI7QUFBQSxNQUN0QyxXQUFZLENBQUMsbUJBQW1CO0FBQzlCLGFBQUsscUJBQXFCO0FBQzFCLGFBQUssZ0JBQWdCLElBQUk7QUFBQTtBQUFBLE1BRzNCLEdBQUksQ0FBQyxZQUFZO0FBQ2YsZUFBTyxLQUFLLGNBQWMsSUFBSSxVQUFVO0FBQUE7QUFBQSxNQUcxQyxHQUFJLENBQUMsWUFBWSxTQUFTO0FBQ3hCLFlBQUksS0FBSyx1QkFBdUIsR0FBRztBQUNqQztBQUFBLFFBQ0Y7QUFFQSxZQUFJLEtBQUssY0FBYyxRQUFRLEtBQUssb0JBQW9CO0FBRXRELGtCQUFRLE9BQU8sY0FBYyxLQUFLLGNBQWMsS0FBSyxFQUFFLEtBQUs7QUFDNUQsZUFBSyxjQUFjLE9BQU8sU0FBUztBQUFBLFFBQ3JDO0FBRUEsYUFBSyxjQUFjLElBQUksWUFBWSxPQUFPO0FBQUE7QUFBQSxJQUU5QztBQUFBO0FBR0YsV0FBUyxjQUFlLEdBQUcsU0FBUyxtQkFBbUIsWUFBWSxZQUFZLFFBQVE7QUFDckYsUUFBSSxxQkFBcUIsVUFBVSxPQUFPLFVBQVUsaUJBQWlCLEtBQUssb0JBQW9CLElBQUk7QUFDaEcsWUFBTSxJQUFJLHFCQUFxQixzREFBc0Q7QUFBQSxJQUN2RjtBQUVBLFVBQU0sVUFBVSxFQUFFLE1BQU0sZUFBZSxLQUFLO0FBQzVDLFVBQU0sZUFBZSxJQUFJLGFBQWEscUJBQXFCLE9BQU8sTUFBTSxpQkFBaUI7QUFDekYsY0FBVSxXQUFXLE9BQU8sTUFBTztBQUNuQyxjQUFVLFdBQVcsT0FBTyxVQUFVO0FBQ3RDLG9CQUFnQixPQUFRLEdBQUcsVUFBVSxNQUFNLFVBQVUsTUFBTSxZQUFZLGNBQWMsY0FBYyxVQUFVO0FBQzNHLFVBQUk7QUFDSixVQUFJLGFBQWEsVUFBVTtBQUN6QixhQUFLLEtBQUs7QUFDUjtBQUFBLFFBQ0Y7QUFDQSxxQkFBYSxjQUFjLFFBQVEsY0FBYyxLQUFLLGNBQWMsSUFBSSxLQUFLO0FBRTdFLGNBQU0sYUFBYSxjQUFjO0FBQ2pDLGNBQU0sVUFBVSxhQUFhLElBQUksVUFBVSxLQUFLO0FBRWhELGVBQU8sVUFBVTtBQUVqQixpQkFBUyxJQUFJLFFBQVE7QUFBQSxVQUNuQixlQUFlO0FBQUEsYUFDWjtBQUFBLFVBQ0g7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBRUEsZUFBZSxVQUFVLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxVQUFVO0FBQUEsVUFDekQsUUFBUTtBQUFBLFVBQ1IsTUFBTSxRQUFRO0FBQUEsVUFDZCxNQUFNO0FBQUEsUUFDUixDQUFDO0FBRUQsZUFDRyxHQUFHLG1CQUFvQixDQUFDLFVBQVM7QUFFaEMsdUJBQWEsSUFBSSxZQUFZLFFBQU87QUFBQSxTQUNyQztBQUFBLE1BQ0wsT0FBTztBQUNMLGdCQUFRLFlBQVksMkNBQTJDO0FBQy9ELGlCQUFTLElBQUksUUFBUTtBQUFBLFVBQ25CLGVBQWUsS0FBSztBQUFBLGFBQ2pCO0FBQUEsVUFDSDtBQUFBLFVBQ0EsTUFBTSxRQUFRO0FBQUEsVUFDZCxNQUFNO0FBQUEsUUFDUixDQUFDO0FBQUE7QUFJSCxVQUFJLFFBQVEsYUFBYSxRQUFRLFFBQVEsV0FBVztBQUNsRCxjQUFNLHdCQUF3QixRQUFRLDBCQUEwQixZQUFZLFFBQU8sUUFBUTtBQUMzRixlQUFPLGFBQWEsTUFBTSxxQkFBcUI7QUFBQSxNQUNqRDtBQUVBLFlBQU0sZ0JBQWdCLGFBQWEsTUFBTSxpQkFBaUIsTUFBTSxHQUFHLE9BQU87QUFFMUUsYUFDRyxXQUFXLElBQUksRUFDZixLQUFLLGFBQWEsV0FBVyxrQkFBa0IsbUJBQW9CLEdBQUc7QUFDckUsc0JBQWM7QUFFZCxZQUFJLFVBQVU7QUFDWixnQkFBTSxLQUFLO0FBQ1gscUJBQVc7QUFDWCxhQUFHLE1BQU0sSUFBSTtBQUFBLFFBQ2Y7QUFBQSxPQUNELEVBQ0EsR0FBRyxpQkFBa0IsQ0FBQyxLQUFLO0FBQzFCLHNCQUFjO0FBRWQsWUFBSSxVQUFVO0FBQ1osZ0JBQU0sS0FBSztBQUNYLHFCQUFXO0FBQ1gsYUFBRyxHQUFHO0FBQUEsUUFDUjtBQUFBLE9BQ0Q7QUFFSCxhQUFPO0FBQUE7QUFBQTtBQUlYLFdBQVMsWUFBYSxDQUFDLG1CQUFrQixTQUFTO0FBQ2hELFNBQUssU0FBUztBQUNaLGFBQU8sTUFBTTtBQUFBO0FBQUEsSUFDZjtBQUVBLFFBQUksS0FBSztBQUNULFFBQUksS0FBSztBQUNULFVBQU0sWUFBWSxXQUFXLE1BQU07QUFFakMsV0FBSyxhQUFhLE1BQU07QUFDdEIsWUFBSSxRQUFRLGFBQWEsU0FBUztBQUVoQyxlQUFLLGFBQWEsTUFBTSxrQkFBaUIsQ0FBQztBQUFBLFFBQzVDLE9BQU87QUFDTCw0QkFBaUI7QUFBQTtBQUFBLE9BRXBCO0FBQUEsT0FDQSxPQUFPO0FBQ1YsV0FBTyxNQUFNO0FBQ1gsbUJBQWEsU0FBUztBQUN0QixxQkFBZSxFQUFFO0FBQ2pCLHFCQUFlLEVBQUU7QUFBQTtBQUFBO0FBSXJCLFdBQVMsZ0JBQWlCLENBQUMsUUFBUTtBQUNqQyxTQUFLLFFBQVEsUUFBUSxJQUFJLG1CQUFxQjtBQUFBO0FBR2hELFNBQU8sVUFBVTtBQUFBOzs7O0FDM0xqQixTQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDNUQsRUFBUSxvQkFBaUI7QUFDekIsV0FBUyxTQUFTLENBQUMsS0FBSztBQUNwQixVQUFNLE1BQU0sQ0FBQztBQUNiLFdBQU8sS0FBSyxHQUFHLEVBQUUsUUFBUSxDQUFDLFFBQVE7QUFDOUIsWUFBTSxRQUFRLElBQUk7QUFDbEIsaUJBQVcsVUFBVSxVQUFVO0FBQzNCLFlBQUksT0FBTztBQUFBLE1BQ2Y7QUFBQSxLQUNIO0FBQ0QsV0FBTztBQUFBO0FBRVgsRUFBUSxvQkFBWTtBQUFBOzs7O0FDWnBCLFNBQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUM1RCxFQUFRLDBCQUEwQix1QkFBdUIsZ0JBQWdCLGdCQUFnQixpQ0FBaUMsdUJBQXVCLGdCQUFnQix1QkFBdUIsY0FBYyxtQkFBbUIsMEJBQTBCLHlCQUF5QixlQUFlLG1CQUFtQixjQUFjLGtCQUFrQixrQkFBa0IsZ0JBQWdCLGlCQUFpQix1QkFBdUIscUJBQXFCLHVCQUF1QixzQkFBc0IsdUJBQXVCLGtCQUFrQix3QkFBd0IsZ0JBQWdCLGVBQWUsZ0JBQWE7QUFDdmtCLE1BQU07QUFFTixNQUFJO0FBQ0osV0FBVSxDQUFDLFFBQU87QUFDZCxXQUFNLE9BQU0sUUFBUSxLQUFLO0FBQ3pCLFdBQU0sT0FBTSxjQUFjLEtBQUs7QUFDL0IsV0FBTSxPQUFNLFlBQVksS0FBSztBQUM3QixXQUFNLE9BQU0saUJBQWlCLEtBQUs7QUFDbEMsV0FBTSxPQUFNLCtCQUErQixLQUFLO0FBQ2hELFdBQU0sT0FBTSx1QkFBdUIsS0FBSztBQUN4QyxXQUFNLE9BQU0sb0JBQW9CLEtBQUs7QUFDckMsV0FBTSxPQUFNLGlCQUFpQixLQUFLO0FBQ2xDLFdBQU0sT0FBTSxzQkFBc0IsS0FBSztBQUN2QyxXQUFNLE9BQU0scUJBQXFCLEtBQUs7QUFDdEMsV0FBTSxPQUFNLDBCQUEwQixNQUFNO0FBQzVDLFdBQU0sT0FBTSw0QkFBNEIsTUFBTTtBQUM5QyxXQUFNLE9BQU0sd0JBQXdCLE1BQU07QUFDMUMsV0FBTSxPQUFNLG9CQUFvQixNQUFNO0FBQ3RDLFdBQU0sT0FBTSx1QkFBdUIsTUFBTTtBQUN6QyxXQUFNLE9BQU0sK0JBQStCLE1BQU07QUFDakQsV0FBTSxPQUFNLHNCQUFzQixNQUFNO0FBQ3hDLFdBQU0sT0FBTSx5QkFBeUIsTUFBTTtBQUMzQyxXQUFNLE9BQU0seUJBQXlCLE1BQU07QUFDM0MsV0FBTSxPQUFNLHFCQUFxQixNQUFNO0FBQ3ZDLFdBQU0sT0FBTSx1QkFBdUIsTUFBTTtBQUN6QyxXQUFNLE9BQU0sWUFBWSxNQUFNO0FBQzlCLFdBQU0sT0FBTSxvQkFBb0IsTUFBTTtBQUN0QyxXQUFNLE9BQU0sdUJBQXVCLE1BQU07QUFDekMsV0FBTSxPQUFNLFVBQVUsTUFBTTtBQUFBLEtBQzdCLFFBQWdCLGtCQUFrQixnQkFBUSxDQUFDLEVBQUU7QUFDaEQsTUFBSTtBQUNKLFdBQVUsQ0FBQyxPQUFNO0FBQ2IsVUFBSyxNQUFLLFVBQVUsS0FBSztBQUN6QixVQUFLLE1BQUssYUFBYSxLQUFLO0FBQzVCLFVBQUssTUFBSyxjQUFjLEtBQUs7QUFBQSxLQUM5QixPQUFlLGlCQUFpQixlQUFPLENBQUMsRUFBRTtBQUM3QyxNQUFJO0FBQ0osV0FBVSxDQUFDLFFBQU87QUFDZCxXQUFNLE9BQU0sMkJBQTJCLEtBQUs7QUFDNUMsV0FBTSxPQUFNLHNCQUFzQixLQUFLO0FBQ3ZDLFdBQU0sT0FBTSx3QkFBd0IsS0FBSztBQUN6QyxXQUFNLE9BQU0sYUFBYSxLQUFLO0FBQzlCLFdBQU0sT0FBTSxhQUFhLE1BQU07QUFDL0IsV0FBTSxPQUFNLG9CQUFvQixNQUFNO0FBQ3RDLFdBQU0sT0FBTSxjQUFjLE1BQU07QUFDaEMsV0FBTSxPQUFNLGNBQWMsT0FBTztBQUVqQyxXQUFNLE9BQU0sdUJBQXVCLE9BQU87QUFBQSxLQUMzQyxRQUFnQixrQkFBa0IsZ0JBQVEsQ0FBQyxFQUFFO0FBQ2hELE1BQUk7QUFDSixXQUFVLENBQUMsZ0JBQWU7QUFDdEIsbUJBQWMsZUFBYyxhQUFhLEtBQUs7QUFDOUMsbUJBQWMsZUFBYyxvQkFBb0IsS0FBSztBQUNyRCxtQkFBYyxlQUFjLGdCQUFnQixLQUFLO0FBQUEsS0FDbEQsZ0JBQXdCLDBCQUEwQix3QkFBZ0IsQ0FBQyxFQUFFO0FBQ3hFLE1BQUk7QUFDSixXQUFVLENBQUMsVUFBUztBQUNoQixhQUFRLFNBQVEsWUFBWSxLQUFLO0FBQ2pDLGFBQVEsU0FBUSxTQUFTLEtBQUs7QUFDOUIsYUFBUSxTQUFRLFVBQVUsS0FBSztBQUMvQixhQUFRLFNBQVEsVUFBVSxLQUFLO0FBQy9CLGFBQVEsU0FBUSxTQUFTLEtBQUs7QUFFOUIsYUFBUSxTQUFRLGFBQWEsS0FBSztBQUNsQyxhQUFRLFNBQVEsYUFBYSxLQUFLO0FBQ2xDLGFBQVEsU0FBUSxXQUFXLEtBQUs7QUFFaEMsYUFBUSxTQUFRLFVBQVUsS0FBSztBQUMvQixhQUFRLFNBQVEsVUFBVSxLQUFLO0FBQy9CLGFBQVEsU0FBUSxXQUFXLE1BQU07QUFDakMsYUFBUSxTQUFRLFVBQVUsTUFBTTtBQUNoQyxhQUFRLFNBQVEsY0FBYyxNQUFNO0FBQ3BDLGFBQVEsU0FBUSxlQUFlLE1BQU07QUFDckMsYUFBUSxTQUFRLFlBQVksTUFBTTtBQUNsQyxhQUFRLFNBQVEsWUFBWSxNQUFNO0FBQ2xDLGFBQVEsU0FBUSxVQUFVLE1BQU07QUFDaEMsYUFBUSxTQUFRLFlBQVksTUFBTTtBQUNsQyxhQUFRLFNBQVEsWUFBWSxNQUFNO0FBQ2xDLGFBQVEsU0FBUSxTQUFTLE1BQU07QUFFL0IsYUFBUSxTQUFRLFlBQVksTUFBTTtBQUNsQyxhQUFRLFNBQVEsZ0JBQWdCLE1BQU07QUFDdEMsYUFBUSxTQUFRLGNBQWMsTUFBTTtBQUNwQyxhQUFRLFNBQVEsV0FBVyxNQUFNO0FBRWpDLGFBQVEsU0FBUSxjQUFjLE1BQU07QUFDcEMsYUFBUSxTQUFRLFlBQVksTUFBTTtBQUNsQyxhQUFRLFNBQVEsZUFBZSxNQUFNO0FBQ3JDLGFBQVEsU0FBUSxpQkFBaUIsTUFBTTtBQUV2QyxhQUFRLFNBQVEsV0FBVyxNQUFNO0FBQ2pDLGFBQVEsU0FBUSxXQUFXLE1BQU07QUFFakMsYUFBUSxTQUFRLGdCQUFnQixNQUFNO0FBRXRDLGFBQVEsU0FBUSxVQUFVLE1BQU07QUFDaEMsYUFBUSxTQUFRLFlBQVksTUFBTTtBQUVsQyxhQUFRLFNBQVEsWUFBWSxNQUFNO0FBRWxDLGFBQVEsU0FBUSxTQUFTLE1BQU07QUFFL0IsYUFBUSxTQUFRLGNBQWMsTUFBTTtBQUNwQyxhQUFRLFNBQVEsY0FBYyxNQUFNO0FBQ3BDLGFBQVEsU0FBUSxXQUFXLE1BQU07QUFDakMsYUFBUSxTQUFRLFVBQVUsTUFBTTtBQUNoQyxhQUFRLFNBQVEsV0FBVyxNQUFNO0FBQ2pDLGFBQVEsU0FBUSxjQUFjLE1BQU07QUFDcEMsYUFBUSxTQUFRLG1CQUFtQixNQUFNO0FBQ3pDLGFBQVEsU0FBUSxtQkFBbUIsTUFBTTtBQUN6QyxhQUFRLFNBQVEsY0FBYyxNQUFNO0FBQ3BDLGFBQVEsU0FBUSxZQUFZLE1BQU07QUFFbEMsYUFBUSxTQUFRLFdBQVcsTUFBTTtBQUFBLEtBQ2xDLFVBQWtCLG9CQUFvQixrQkFBVSxDQUFDLEVBQUU7QUFDdEQsRUFBUSx1QkFBZTtBQUFBLElBQ25CLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUVSLFFBQVE7QUFBQSxFQUNaO0FBQ0EsRUFBUSxzQkFBYztBQUFBLElBQ2xCLFFBQVE7QUFBQSxFQUNaO0FBQ0EsRUFBUSx1QkFBZTtBQUFBLElBQ25CLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUVSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxFQUNaO0FBQ0EsRUFBUSxxQkFBYSxRQUFRLFVBQVUsT0FBTztBQUM5QyxFQUFRLHVCQUFlLENBQUM7QUFD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QUssRUFBRSxZQUFZO0FBQUEsV0FDMUI7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQ0gsZUFBTztBQUFBO0FBQ0EsZUFBTztB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Q0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNKO0FBQ0EsTUFBTSwyQ0FBMkM7QUFBQSxJQUM3QztBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNB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SztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQ3RGO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFDM0Y7QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFDM0Y7QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQzVGO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQzNGO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBSztBQUFBLElBQ3pGO0FBQUEsSUFBSztBQUFBLElBQU87QUFBQSxFQUNoQixDQUFDO0FBQ0QsTUFBTSxZQUFZLElBQUksWUFBWTtBQUFBLElBQzlCO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFDMUY7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUMxRjtBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQzFGO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFNO0FBQUEsSUFBTTtBQUFBLElBQU07QUFBQSxJQUFNO0FBQUEsSUFBTTtBQUFBLElBQU07QUFBQSxJQUFNO0FBQUEsSUFBTTtBQUFBLElBQ3hGO0FBQUEsSUFBTTtBQUFBLElBQU07QUFBQSxJQUFNO0FBQUEsSUFBTTtBQUFBLElBQU07QUFBQSxJQUFNO0FBQUEsSUFBTTtBQUFBLElBQU07QUFBQSxJQUFNO0FBQUEsSUFBTTtBQUFBLElBQU07QUFBQSxJQUFNO0FBQUEsSUFBTTtBQUFBLElBQU07QUFBQSxJQUFNO0FBQUEsSUFDMUY7QUFBQSxJQUFNO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUMzRjtBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLEVBQzlGLENBQUM7QUFDRCxNQUFNLFlBQVksSUFBSSxZQUFZO0FBQUEsSUFDOUI7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUMxRjtBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQzFGO0FBQUEsSUFBSztBQUFBLElBQVE7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQVE7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUMzRjtBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQzFGO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFDMUY7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUMxRjtBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsRUFDMUUsQ0FBQztBQUNELFdBQVMsYUFBYSxDQUFDLEtBQUssS0FBSztBQUM3QixRQUFJLFdBQVcsS0FBSyxHQUFHO0FBQ25CLGFBQU87QUFDWCxXQUFPO0FBQUE7QUFFWCxXQUFTLFVBQVUsQ0FBQyxLQUFLLEtBQUs7QUFDMUIsVUFBTSxTQUFTLENB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QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7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QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7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LHlEQUF5RDtBQUFBLE1BQ3BGLCtCQUErQixDQUFDLHFEQUFxRDtBQUFBLE1BQ3JGLGdDQUFnQyxDQUFDLCtEQUErRDtBQUFBLE1BQ2hHLHlCQUF5QixDQUFDLCtDQUErQztBQUFBLE1BQ3pFLDBCQUEwQixDQUFDLHlEQUF5RDtBQUFBLE1BQ3BGLHdCQUF3QixDQUFDLHVFQUF1RTtBQUFBLE1BQ2hHLHdCQUF3QixDQUFDLHdEQUF3RDtBQUFBLE1BQ2pGLHlCQUF5QixDQUFDLHVEQUF1RDtBQUFBLE1BQ2pGLGdCQUFnQixDQUFDLDhEQUE4RDtBQUFBLE1BQy9FLHlCQUF5QixDQUFDLDRGQUE0RjtBQUFBLE1BQ3RILGlCQUFpQixDQUFDLGtEQUFrRDtBQUFBLE1BQ3BFLGtCQUFrQixDQUFDLDREQUE0RDtBQUFBLE1BQy9FLCtCQUErQixDQUFDLGdEQUFnRDtBQUFBLE1BQ2hGLGdDQUFnQyxDQUFDLDBEQUEwRDtBQUFBLE1BQzNGLG1CQUFtQixDQUFDLG9EQUFvRDtBQUFBLE1BQ3hFLHVCQUF1QixDQUFDLHlEQUF5RDtBQUFBLE1BQ2pGLG9EQUFvRCxDQUFDLHFFQUFxRTtBQUFBLE1BQzFILGlCQUFpQixDQUFDLG1FQUFtRTtBQUFBLE1BQ3JGLGtCQUFrQixDQUFDLDRFQUE0RTtBQUFBLE1BQy9GLCtCQUErQixDQUFDLHNEQUFzRDtBQUFBLE1BQ3RGLGdDQUFnQyxDQUFDLGdGQUFnRjtBQUFBLE1BQ2pILHlCQUF5QixDQUFDLHNEQUFzRDtBQUFBLE1BQ2hGLG1EQUFtRCxDQUFDLGtFQUFrRTtBQUFBLE1BQ3RILGdCQUFnQixDQUFDLGtFQUFrRTtBQUFBLE1BQ25GLHFCQUFxQixDQUFDLDBDQUEwQztBQUFBLE1BQ2hFLHNCQUFzQixDQUFDLCtDQUErQztBQUFBLE1BQ3RFLGtDQUFrQyxDQUFDLG1EQUFtRDtBQUFBLE1BQ3RGLG1DQUFtQyxDQUFDLG1EQUFtRDtBQUFBLE1BQ3ZGLDRCQUE0QixDQUFDLHFDQUFxQztBQUFBLE1BQ2xFLCtCQUErQixDQUFDLHNEQUFzRDtBQUFBLE1BQ3RGLDZCQUE2QixDQUFD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MUI7QUFBQSxRQUNBLENBQUM7QUFBQSxRQUNELEVBQUUsU0FBUyxDQUFDLFNBQVMsZ0NBQWdDLEVBQUU7QUFBQSxNQUN6RDtBQUFBLE1BQ0EsZ0NBQWdDLENBQUMsa0JBQWtCO0FBQUEsTUFDbkQsNkJBQTZCO0FBQUEsUUFDM0I7QUFBQSxRQUNBLENBQUM7QUFBQSxRQUNELEVBQUUsU0FBUyxDQUFDLFNBQVMsaUNBQWlDLEVBQUU7QUFBQSxNQUMxRDtBQUFBLE1BQ0EsaUNBQWlDLENBQUMscUJBQXFCO0FBQUEsTUFDdkQsbUNBQW1DLENBQUMscUJBQXFCO0FBQUEsTUFDekQsc0JBQXNCLENBQUMsaUNBQWlDO0FBQUEsTUFDeEQsc0JBQXNCLENBQUMsaUNBQWlDO0FBQUEsTUFDeEQsNkJBQTZCO0FBQUEsUUFDM0I7QUFBQSxRQUNBLENBQUM7QUFBQSxRQUNELEVBQUUsU0FBUyxDQUFDLFNBQVMsaUNBQWlDLEVBQUU7QUFBQSxNQUMxRDtBQUFBLE1BQ0EsaUNBQWlDLENBQUMsb0JBQW9CO0FBQUEsTUFDdEQsb0JBQW9CLENBQUMsZ0NBQWdDO0FBQUEsTUFDckQsa0NBQWtDO0FBQUEsUUFDaEM7QUFBQSxRQUNBLENBQUM7QUFBQSxRQUNELEVBQUUsU0FBUyxDQUFDLFNBQVMsc0NBQXNDLEVBQUU7QUFBQSxNQUMvRDtBQUFBLE1BQ0Esc0NBQXNDLENBQUMseUJBQXlCO0FBQUEsTUFDaEUsdUJBQXVCLENBQUMsNEJBQTRCO0FBQUEsTUFDcEQsbUNBQW1DO0FBQUEsUUFDakM7QUFBQSxRQUNBLENBQUM7QUFBQSxRQUNELEVBQUUsU0FBUyxDQUFDLFNBQVMsdUNBQXVDLEVBQUU7QUFBQSxNQUNoRTtBQUFBLE1BQ0EsdUNBQXVDLENBQUMsZ0JBQWdCO0FBQUEsTUFDeEQsd0NBQXdDLENBQUMsMkJBQTJCO0FBQUEsTUFDcEUsMkJBQTJCLENBQUMsdUNBQXVDO0FBQUEsTUFDbkUsd0NBQXdDLENBQUMsNEJBQTRCO0FBQUEsTUFDckUsMkJBQTJCLENBQUMsd0NBQXdDO0FBQUEsTUFDcEUsMkNBQTJDO0FBQUEsUUFD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QUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtB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QVcsRUFBRSxZQUFZLE1BQU0sT0FBTyxFQUFFLENBQUM7QUFBQSxjQUN6RCxDQUFDLEdBQUcsR0FBRztBQUNoQixNQUFFLGFBQWE7QUFBQTtBQUVuQixNQUFJLGVBQWdCLFdBQVEsUUFBSyx3QkFBMEIsQ0FBQyxLQUFLO0FBQzdELFFBQUksT0FBTyxJQUFJO0FBQVksYUFBTztBQUNsQyxRQUFJLFNBQVMsQ0FBQztBQUNkLFFBQUksT0FBTztBQUFNLGVBQVMsS0FBSztBQUFLLFlBQUksTUFBTSxhQUFhLE9BQU8sVUFBVSxlQUFlLEtBQUssS0FBSyxDQUFDO0FBQUcsMEJBQWdCLFFBQVEsS0FBSyxDQUFDO0FBQUE7QUFDdkksdUJBQW1CLFFBQVEsR0FBRztBQUM5QixXQUFPO0FBQUE7QUFFWCxTQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDNUQsVUFBUSxhQUFhLFFBQVEsVUFBZTtBQUM1QyxNQUFNLFVBQVUsK0JBQWlDO0FBQ2pELE1BQU07QUFDTixVQUFRLFVBQVUsSUFBSSxRQUFRO0FBTzlCLFdBQVMsVUFBVSxDQUFDLE9BQU8sWUFBWSxtQkFBbUI7QUFDdEQsVUFBTSxvQkFBb0IsUUFBUSxPQUFPLE9BQU8sR0FBRyxpQkFBaUI7QUFDcEUsV0FBTyxJQUFJLG1CQUFtQixHQUFHLFFBQVEsbUJBQW1CLE9BQU8sT0FBTyxDQUFDO0FBQUE7QUFFL0UsVUFBUSxhQUFhO0FBQUE7OztBQ3ZDckI7QUFDQTtBQUNBO0FBRUEsQ0FBQyxlQUFlLElBQUksR0FBRztBQUN0QixvQkFBTSxLQUFLLFVBQVUsdUJBQVMsTUFBTSxDQUFDLENBQUM7QUFDdEMsTUFBSSxpQkFBaUIsSUFBSTtBQUV6QixRQUFNLGNBQWMsTUFBTSxlQUFlLGNBQWM7QUFBQSxJQUN0RCxRQUFRO0FBQUEsTUFDUCxPQUFPLHFCQUFTLFNBQVMsRUFBRSxVQUFVLEtBQUssQ0FBQztBQUFBLE1BQzNDLGVBQWUsU0FBUyxxQkFBUyxVQUFVLEVBQUUsVUFBVSxLQUFLLENBQUMsQ0FBQztBQUFBLE1BQzlELGlCQUFpQixzQkFBUSxLQUFLO0FBQUEsTUFDOUIsZ0JBQWdCLHNCQUFRLEtBQUs7QUFBQSxJQUM5QjtBQUFBLEVBQ0QsQ0FBQztBQUVELG1CQUFLLFNBQVMsVUFBVSxxQkFBcUIsS0FBSyxVQUFVLFdBQVcsTUFBTSxDQUFDLEdBQUc7QUFBQSxHQUMvRTsiLAogICJkZWJ1Z0lkIjogIkQ4NUUwQjdBN0Y2MEMwMjA2NDc1NkUyMTY0NzU2RTIxIiwKICAibmFtZXMiOiBbXQp9 +//# debugId=CD62937E27444CA064756E2164756E21 +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2NvcmUvbGliL3V0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9jb3JlL2xpYi9jb21tYW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9jb3JlL2xpYi9maWxlLWNvbW1hbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2h0dHAtY2xpZW50L2xpYi9wcm94eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdHVubmVsL2xpYi90dW5uZWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29yZS9zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvZXJyb3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvY29uc3RhbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi90aW1lcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9kZXBzL3N0cmVhbXNlYXJjaC9zYm1oLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZmFzdGlmeS9idXNib3kvZGVwcy9kaWNlci9saWIvUGFydFN0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGZhc3RpZnkvYnVzYm95L2xpYi91dGlscy9nZXRMaW1pdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGZhc3RpZnkvYnVzYm95L2RlcHMvZGljZXIvbGliL0hlYWRlclBhcnNlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGZhc3RpZnkvYnVzYm95L2RlcHMvZGljZXIvbGliL0RpY2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZmFzdGlmeS9idXNib3kvbGliL3V0aWxzL2RlY29kZVRleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9saWIvdXRpbHMvcGFyc2VQYXJhbXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9saWIvdXRpbHMvYmFzZW5hbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9saWIvdHlwZXMvbXVsdGlwYXJ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZmFzdGlmeS9idXNib3kvbGliL3V0aWxzL0RlY29kZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9saWIvdHlwZXMvdXJsZW5jb2RlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGZhc3RpZnkvYnVzYm95L2xpYi9tYWluLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL2NvbnN0YW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9mZXRjaC9nbG9iYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9mZXRjaC9zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL3dlYmlkbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9mZXRjaC9kYXRhVVJMLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL2ZpbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvZm9ybWRhdGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvYm9keS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb3JlL3JlcXVlc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9kaXNwYXRjaGVyLWJhc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29yZS9jb25uZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2xsaHR0cC91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9sbGh0dHAvY29uc3RhbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2hhbmRsZXIvUmVkaXJlY3RIYW5kbGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ludGVyY2VwdG9yL3JlZGlyZWN0SW50ZXJjZXB0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbGxodHRwL2xsaHR0cC13YXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2xsaHR0cC9sbGh0dHBfc2ltZC13YXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NsaWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9ub2RlL2ZpeGVkLXF1ZXVlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3Bvb2wtc3RhdHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvcG9vbC1iYXNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3Bvb2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYmFsYW5jZWQtcG9vbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb21wYXQvZGlzcGF0Y2hlci13ZWFrcmVmLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FnZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9yZWFkYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvYWJvcnQtc2lnbmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hcGktcmVxdWVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvYXBpLXN0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvYXBpLXBpcGVsaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hcGktdXBncmFkZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvYXBpLWNvbm5lY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYXBpL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1lcnJvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbW9jay9tb2NrLXN5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbW9jay9tb2NrLXV0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1pbnRlcmNlcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL21vY2stY2xpZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1wb29sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svcGx1cmFsaXplci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL3BlbmRpbmctaW50ZXJjZXB0b3JzLWZvcm1hdHRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL21vY2stYWdlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvcHJveHktYWdlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaGFuZGxlci9SZXRyeUhhbmRsZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZ2xvYmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2hhbmRsZXIvRGVjb3JhdG9ySGFuZGxlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9mZXRjaC9oZWFkZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL3Jlc3BvbnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL3JlcXVlc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmlsZWFwaS9zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZpbGVhcGkvcHJvZ3Jlc3NldmVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9maWxlYXBpL2VuY29kaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZpbGVhcGkvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9maWxlYXBpL2ZpbGVyZWFkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY2FjaGUvc3ltYm9scy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jYWNoZS91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NhY2hlL2NhY2hlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NhY2hlL2NhY2hlc3RvcmFnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb29raWVzL2NvbnN0YW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb29raWVzL3V0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29va2llcy9wYXJzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb29raWVzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYnNvY2tldC9jb25zdGFudHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2Vic29ja2V0L3N5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2Vic29ja2V0L2V2ZW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWJzb2NrZXQvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWJzb2NrZXQvY29ubmVjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWJzb2NrZXQvZnJhbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2Vic29ja2V0L3JlY2VpdmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYnNvY2tldC93ZWJzb2NrZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvaHR0cC1jbGllbnQvbGliL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9odHRwLWNsaWVudC9saWIvYXV0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9saWIvb2lkYy11dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9saWIvc3VtbWFyeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9saWIvcGF0aC11dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvaW8vbGliL2lvLXV0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2lvL2xpYi9pby5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvZXhlYy9saWIvdG9vbHJ1bm5lci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvZXhlYy9saWIvZXhlYy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9saWIvcGxhdGZvcm0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2NvcmUvbGliL2NvcmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2FydGlmYWN0L2xpYi9pbnRlcm5hbC9zaGFyZWQvY29uZmlnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9qc29uLXR5cGluZ3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lL2J1aWxkL2NvbW1vbmpzL2Jhc2U2NC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUvYnVpbGQvY29tbW9uanMvcHJvdG9idWZqcy11dGY4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9iaW5hcnktZm9ybWF0LWNvbnRyYWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9nb29nLXZhcmludC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUvYnVpbGQvY29tbW9uanMvcGItbG9uZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUvYnVpbGQvY29tbW9uanMvYmluYXJ5LXJlYWRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUvYnVpbGQvY29tbW9uanMvYXNzZXJ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9iaW5hcnktd3JpdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9qc29uLWZvcm1hdC1jb250cmFjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUvYnVpbGQvY29tbW9uanMvbWVzc2FnZS10eXBlLWNvbnRyYWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9sb3dlci1jYW1lbC1jYXNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9yZWZsZWN0aW9uLWluZm8uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lL2J1aWxkL2NvbW1vbmpzL29uZW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9yZWZsZWN0aW9uLXR5cGUtY2hlY2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lL2J1aWxkL2NvbW1vbmpzL3JlZmxlY3Rpb24tbG9uZy1jb252ZXJ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9yZWZsZWN0aW9uLWpzb24tcmVhZGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9yZWZsZWN0aW9uLWpzb24td3JpdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9yZWZsZWN0aW9uLXNjYWxhci1kZWZhdWx0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9yZWZsZWN0aW9uLWJpbmFyeS1yZWFkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lL2J1aWxkL2NvbW1vbmpzL3JlZmxlY3Rpb24tYmluYXJ5LXdyaXRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUvYnVpbGQvY29tbW9uanMvcmVmbGVjdGlvbi1jcmVhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lL2J1aWxkL2NvbW1vbmpzL3JlZmxlY3Rpb24tbWVyZ2UtcGFydGlhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUvYnVpbGQvY29tbW9uanMvcmVmbGVjdGlvbi1lcXVhbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lL2J1aWxkL2NvbW1vbmpzL21lc3NhZ2UtdHlwZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUvYnVpbGQvY29tbW9uanMvcmVmbGVjdGlvbi1jb250YWlucy1tZXNzYWdlLXR5cGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lL2J1aWxkL2NvbW1vbmpzL2VudW0tb2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS9idWlsZC9jb21tb25qcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvYXJ0aWZhY3QvbGliL2dlbmVyYXRlZC9nb29nbGUvcHJvdG9idWYvdGltZXN0YW1wLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9hcnRpZmFjdC9saWIvZ2VuZXJhdGVkL2dvb2dsZS9wcm90b2J1Zi93cmFwcGVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUtcnBjL2J1aWxkL2NvbW1vbmpzL3JlZmxlY3Rpb24taW5mby5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUtcnBjL2J1aWxkL2NvbW1vbmpzL3NlcnZpY2UtdHlwZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUtcnBjL2J1aWxkL2NvbW1vbmpzL3JwYy1lcnJvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUtcnBjL2J1aWxkL2NvbW1vbmpzL3JwYy1vcHRpb25zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWYtdHMvcnVudGltZS1ycGMvYnVpbGQvY29tbW9uanMvZGVmZXJyZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lLXJwYy9idWlsZC9jb21tb25qcy9ycGMtb3V0cHV0LXN0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUtcnBjL2J1aWxkL2NvbW1vbmpzL3VuYXJ5LWNhbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lLXJwYy9idWlsZC9jb21tb25qcy9zZXJ2ZXItc3RyZWFtaW5nLWNhbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lLXJwYy9idWlsZC9jb21tb25qcy9jbGllbnQtc3RyZWFtaW5nLWNhbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lLXJwYy9idWlsZC9jb21tb25qcy9kdXBsZXgtc3RyZWFtaW5nLWNhbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lLXJwYy9idWlsZC9jb21tb25qcy90ZXN0LXRyYW5zcG9ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUtcnBjL2J1aWxkL2NvbW1vbmpzL3JwYy1pbnRlcmNlcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmLXRzL3J1bnRpbWUtcnBjL2J1aWxkL2NvbW1vbmpzL3NlcnZlci1jYWxsLWNvbnRleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1Zi10cy9ydW50aW1lLXJwYy9idWlsZC9jb21tb25qcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvYXJ0aWZhY3QvbGliL2dlbmVyYXRlZC9yZXN1bHRzL2FwaS92MS9hcnRpZmFjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdHdpcnAtdHMvYnVpbGQvdHdpcnAvY29udGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdHdpcnAtdHMvYnVpbGQvdHdpcnAvaG9va3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3R3aXJwLXRzL2J1aWxkL3R3aXJwL2Vycm9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdHdpcnAtdHMvYnVpbGQvdHdpcnAvcmVxdWVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdHdpcnAtdHMvYnVpbGQvdHdpcnAvc2VydmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy90d2lycC10cy9idWlsZC90d2lycC9pbnRlcmNlcHRvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2RvdC1vYmplY3QvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3R3aXJwLXRzL2J1aWxkL3R3aXJwL2h0dHAuY2xpZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy90d2lycC10cy9idWlsZC90d2lycC9nYXRld2F5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy90d2lycC10cy9idWlsZC90d2lycC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvYXJ0aWZhY3QvbGliL2dlbmVyYXRlZC9yZXN1bHRzL2FwaS92MS9hcnRpZmFjdC50d2lycC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvYXJ0aWZhY3QvbGliL2dlbmVyYXRlZC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvYXJ0aWZhY3QvbGliL2ludGVybmFsL3VwbG9hZC9yZXRlbnRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2FydGlmYWN0L2xpYi9pbnRlcm5hbC91cGxvYWQvcGF0aC1hbmQtYXJ0aWZhY3QtbmFtZS12YWxpZGF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9hcnRpZmFjdC9saWIvaW50ZXJuYWwvc2hhcmVkL3VzZXItYWdlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2FydGlmYWN0L2xpYi9pbnRlcm5hbC9zaGFyZWQvZXJyb3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9hcnRpZmFjdC9saWIvaW50ZXJuYWwvc2hhcmVkL2FydGlmYWN0LXR3aXJwLWNsaWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvYXJ0aWZhY3QvbGliL2ludGVybmFsL3VwbG9hZC91cGxvYWQtemlwLXNwZWNpZmljYXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2p3dC1kZWNvZGUvYnVpbGQvand0LWRlY29kZS5janMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2FydGlmYWN0L2xpYi9pbnRlcm5hbC9zaGFyZWQvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3BpcGVsaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2xvZ2dlci9kaXN0L2NvbW1vbmpzL2xvZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2xvZ2dlci9kaXN0L2NvbW1vbmpzL2RlYnVnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvbG9nZ2VyL2Rpc3QvY29tbW9uanMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9sb2cuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9hYm9ydC1jb250cm9sbGVyL2Rpc3QvY29tbW9uanMvQWJvcnRFcnJvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2Fib3J0LWNvbnRyb2xsZXIvZGlzdC9jb21tb25qcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtdXRpbC9kaXN0L2NvbW1vbmpzL2NyZWF0ZUFib3J0YWJsZVByb21pc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXV0aWwvZGlzdC9jb21tb25qcy9yYW5kb20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXV0aWwvZGlzdC9jb21tb25qcy9kZWxheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtdXRpbC9kaXN0L2NvbW1vbmpzL2Fib3J0ZXJVdGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtdXRpbC9kaXN0L2NvbW1vbmpzL29iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtdXRpbC9kaXN0L2NvbW1vbmpzL2Vycm9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS11dGlsL2Rpc3QvY29tbW9uanMvc2hhMjU2LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS11dGlsL2Rpc3QvY29tbW9uanMvdHlwZUd1YXJkcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtdXRpbC9kaXN0L2NvbW1vbmpzL3V1aWRVdGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtdXRpbC9kaXN0L2NvbW1vbmpzL2NoZWNrRW52aXJvbm1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXV0aWwvZGlzdC9jb21tb25qcy9ieXRlc0VuY29kaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS11dGlsL2Rpc3QvY29tbW9uanMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy91dGlsL3Nhbml0aXplci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3BvbGljaWVzL2xvZ1BvbGljeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3BvbGljaWVzL3JlZGlyZWN0UG9saWN5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvdXRpbC91c2VyQWdlbnRQbGF0Zm9ybS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL2NvbnN0YW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3V0aWwvdXNlckFnZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvcG9saWNpZXMvdXNlckFnZW50UG9saWN5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvdXRpbC90eXBlR3VhcmRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvdXRpbC9maWxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvdXRpbC9jb25jYXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9wb2xpY2llcy9tdWx0aXBhcnRQb2xpY3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9wb2xpY2llcy9kZWNvbXByZXNzUmVzcG9uc2VQb2xpY3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy91dGlsL2hlbHBlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9yZXRyeVN0cmF0ZWdpZXMvdGhyb3R0bGluZ1JldHJ5U3RyYXRlZ3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9yZXRyeVN0cmF0ZWdpZXMvZXhwb25lbnRpYWxSZXRyeVN0cmF0ZWd5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvcG9saWNpZXMvcmV0cnlQb2xpY3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9wb2xpY2llcy9kZWZhdWx0UmV0cnlQb2xpY3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9odHRwSGVhZGVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3BvbGljaWVzL2Zvcm1EYXRhUG9saWN5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9tcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvZGVidWcvc3JjL2NvbW1vbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvZGVidWcvc3JjL2Jyb3dzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2RlYnVnL3NyYy9ub2RlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2FnZW50LWJhc2UvZGlzdC9oZWxwZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9hZ2VudC1iYXNlL2Rpc3QvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2h0dHBzLXByb3h5LWFnZW50L2Rpc3QvcGFyc2UtcHJveHktcmVzcG9uc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2h0dHBzLXByb3h5LWFnZW50L2Rpc3QvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2h0dHAtcHJveHktYWdlbnQvZGlzdC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3BvbGljaWVzL3Byb3h5UG9saWN5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvcG9saWNpZXMvc2V0Q2xpZW50UmVxdWVzdElkUG9saWN5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvcG9saWNpZXMvdGxzUG9saWN5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS10cmFjaW5nL2Rpc3QvY29tbW9uanMvdHJhY2luZ0NvbnRleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXRyYWNpbmcvZGlzdC9jb21tb25qcy9zdGF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtdHJhY2luZy9kaXN0L2NvbW1vbmpzL2luc3RydW1lbnRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtdHJhY2luZy9kaXN0L2NvbW1vbmpzL3RyYWNpbmdDbGllbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXRyYWNpbmcvZGlzdC9jb21tb25qcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3V0aWwvaW5zcGVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3Jlc3RFcnJvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3BvbGljaWVzL3RyYWNpbmdQb2xpY3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9jcmVhdGVQaXBlbGluZUZyb21PcHRpb25zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvbm9kZUh0dHBDbGllbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9kZWZhdWx0SHR0cENsaWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3BpcGVsaW5lUmVxdWVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3BvbGljaWVzL2V4cG9uZW50aWFsUmV0cnlQb2xpY3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9wb2xpY2llcy9zeXN0ZW1FcnJvclJldHJ5UG9saWN5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvcG9saWNpZXMvdGhyb3R0bGluZ1JldHJ5UG9saWN5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lL2Rpc3QvY29tbW9uanMvdXRpbC90b2tlbkN5Y2xlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL3BvbGljaWVzL2JlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9wb2xpY2llcy9uZEpzb25Qb2xpY3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmUvZGlzdC9jb21tb25qcy9wb2xpY2llcy9hdXhpbGlhcnlBdXRoZW50aWNhdGlvbkhlYWRlclBvbGljeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZS9kaXN0L2NvbW1vbmpzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1hdXRoL2Rpc3QvY29tbW9uanMvYXp1cmVLZXlDcmVkZW50aWFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1hdXRoL2Rpc3QvY29tbW9uanMva2V5Q3JlZGVudGlhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtYXV0aC9kaXN0L2NvbW1vbmpzL2F6dXJlTmFtZWRLZXlDcmVkZW50aWFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1hdXRoL2Rpc3QvY29tbW9uanMvYXp1cmVTQVNDcmVkZW50aWFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1hdXRoL2Rpc3QvY29tbW9uanMvdG9rZW5DcmVkZW50aWFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1hdXRoL2Rpc3QvY29tbW9uanMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLWh0dHAtY29tcGF0L2Rpc3QvY29tbW9uanMvcG9saWNpZXMvZGlzYWJsZUtlZXBBbGl2ZVBvbGljeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtY2xpZW50L2Rpc3QvY29tbW9uanMvYmFzZTY0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1jbGllbnQvZGlzdC9jb21tb25qcy9pbnRlcmZhY2VzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1jbGllbnQvZGlzdC9jb21tb25qcy91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtY2xpZW50L2Rpc3QvY29tbW9uanMvc2VyaWFsaXplci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtY2xpZW50L2Rpc3QvY29tbW9uanMvc3RhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLWNsaWVudC9kaXN0L2NvbW1vbmpzL29wZXJhdGlvbkhlbHBlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLWNsaWVudC9kaXN0L2NvbW1vbmpzL2Rlc2VyaWFsaXphdGlvblBvbGljeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtY2xpZW50L2Rpc3QvY29tbW9uanMvaW50ZXJmYWNlSGVscGVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtY2xpZW50L2Rpc3QvY29tbW9uanMvc2VyaWFsaXphdGlvblBvbGljeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtY2xpZW50L2Rpc3QvY29tbW9uanMvcGlwZWxpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLWNsaWVudC9kaXN0L2NvbW1vbmpzL2h0dHBDbGllbnRDYWNoZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtY2xpZW50L2Rpc3QvY29tbW9uanMvdXJsSGVscGVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtY2xpZW50L2Rpc3QvY29tbW9uanMvbG9nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1jbGllbnQvZGlzdC9jb21tb25qcy9zZXJ2aWNlQ2xpZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1jbGllbnQvZGlzdC9jb21tb25qcy9hdXRob3JpemVSZXF1ZXN0T25DbGFpbUNoYWxsZW5nZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtY2xpZW50L2Rpc3QvY29tbW9uanMvYXV0aG9yaXplUmVxdWVzdE9uVGVuYW50Q2hhbGxlbmdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1jbGllbnQvZGlzdC9jb21tb25qcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtaHR0cC1jb21wYXQvZGlzdC9jb21tb25qcy91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1odHRwLWNvbXBhdC9kaXN0L2NvbW1vbmpzL3Jlc3BvbnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1odHRwLWNvbXBhdC9kaXN0L2NvbW1vbmpzL2V4dGVuZGVkQ2xpZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1odHRwLWNvbXBhdC9kaXN0L2NvbW1vbmpzL3BvbGljaWVzL3JlcXVlc3RQb2xpY3lGYWN0b3J5UG9saWN5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1odHRwLWNvbXBhdC9kaXN0L2NvbW1vbmpzL2h0dHBDbGllbnRBZGFwdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1odHRwLWNvbXBhdC9kaXN0L2NvbW1vbmpzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mYXN0LXhtbC1wYXJzZXIvc3JjL3V0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Zhc3QteG1sLXBhcnNlci9zcmMvdmFsaWRhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mYXN0LXhtbC1wYXJzZXIvc3JjL3htbHBhcnNlci9PcHRpb25zQnVpbGRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvZmFzdC14bWwtcGFyc2VyL3NyYy94bWxwYXJzZXIveG1sTm9kZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvZmFzdC14bWwtcGFyc2VyL3NyYy94bWxwYXJzZXIvRG9jVHlwZVJlYWRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvc3RybnVtL3N0cm51bS5qcyIsICIuLi9ub2RlX21vZHVsZXMvZmFzdC14bWwtcGFyc2VyL3NyYy9pZ25vcmVBdHRyaWJ1dGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mYXN0LXhtbC1wYXJzZXIvc3JjL3htbHBhcnNlci9PcmRlcmVkT2JqUGFyc2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mYXN0LXhtbC1wYXJzZXIvc3JjL3htbHBhcnNlci9ub2RlMmpzb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Zhc3QteG1sLXBhcnNlci9zcmMveG1scGFyc2VyL1hNTFBhcnNlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvZmFzdC14bWwtcGFyc2VyL3NyYy94bWxidWlsZGVyL29yZGVyZWRKczJYbWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Zhc3QteG1sLXBhcnNlci9zcmMveG1sYnVpbGRlci9qc29uMnhtbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvZmFzdC14bWwtcGFyc2VyL3NyYy9meHAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXhtbC9kaXN0L2NvbW1vbmpzL3htbC5jb21tb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLXhtbC9kaXN0L2NvbW1vbmpzL3htbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUteG1sL2Rpc3QvY29tbW9uanMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLWxyby9kaXN0L2NvbW1vbmpzL2xvZ2dlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtbHJvL2Rpc3QvY29tbW9uanMvcG9sbGVyL2NvbnN0YW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtbHJvL2Rpc3QvY29tbW9uanMvcG9sbGVyL29wZXJhdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtbHJvL2Rpc3QvY29tbW9uanMvaHR0cC9vcGVyYXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLWxyby9kaXN0L2NvbW1vbmpzL3BvbGxlci9wb2xsZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLWxyby9kaXN0L2NvbW1vbmpzL2h0dHAvcG9sbGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1scm8vZGlzdC9jb21tb25qcy9sZWdhY3kvbHJvRW5naW5lL29wZXJhdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtbHJvL2Rpc3QvY29tbW9uanMvbGVnYWN5L3BvbGxlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL2NvcmUtbHJvL2Rpc3QvY29tbW9uanMvbGVnYWN5L2xyb0VuZ2luZS9scm9FbmdpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLWxyby9kaXN0L2NvbW1vbmpzL2xlZ2FjeS9scm9FbmdpbmUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhenVyZS9jb3JlLWxyby9kaXN0L2NvbW1vbmpzL2xlZ2FjeS9wb2xsT3BlcmF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXp1cmUvY29yZS1scm8vZGlzdC9jb21tb25qcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF6dXJlL3N0b3JhZ2UtYmxvYi9kaXN0L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9hcnRpZmFjdC9saWIvaW50ZXJuYWwvdXBsb2FkL2Jsb2ItdXBsb2FkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9taW5pbWF0Y2gvbGliL3BhdGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2JhbGFuY2VkLW1hdGNoL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9icmFjZS1leHBhbnNpb24vaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL21pbmltYXRjaC9taW5pbWF0Y2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWRkaXItZ2xvYi9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXN5bmMvZGlzdC9hc3luYy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZ3JhY2VmdWwtZnMvcG9seWZpbGxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9ncmFjZWZ1bC1mcy9sZWdhY3ktc3RyZWFtcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZ3JhY2VmdWwtZnMvY2xvbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2dyYWNlZnVsLWZzL2dyYWNlZnVsLWZzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9pcy1zdHJlYW0vaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Byb2Nlc3MtbmV4dGljay1hcmdzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9pc2FycmF5L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sYXp5c3RyZWFtL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbm9kZV9tb2R1bGVzL3NhZmUtYnVmZmVyL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jb3JlLXV0aWwtaXMvbGliL3V0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2luaGVyaXRzL2luaGVyaXRzX2Jyb3dzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2luaGVyaXRzL2luaGVyaXRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sYXp5c3RyZWFtL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvQnVmZmVyTGlzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbGF6eXN0cmVhbS9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL2Rlc3Ryb3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3V0aWwtZGVwcmVjYXRlL25vZGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xhenlzdHJlYW0vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV93cml0YWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbGF6eXN0cmVhbS9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX2R1cGxleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbGF6eXN0cmVhbS9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL25vZGVfbW9kdWxlcy9zdHJpbmdfZGVjb2Rlci9saWIvc3RyaW5nX2RlY29kZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xhenlzdHJlYW0vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV9yZWFkYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbGF6eXN0cmVhbS9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3RyYW5zZm9ybS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbGF6eXN0cmVhbS9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3Bhc3N0aHJvdWdoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sYXp5c3RyZWFtL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vcmVhZGFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xhenlzdHJlYW0vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9wYXNzdGhyb3VnaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbGF6eXN0cmVhbS9saWIvbGF6eXN0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbm9ybWFsaXplLXBhdGgvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pZGVudGl0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcHBseS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19vdmVyUmVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2NvbnN0YW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2ZyZWVHbG9iYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fcm9vdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19TeW1ib2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0UmF3VGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX29iamVjdFRvU3RyaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VHZXRUYWcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc09iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzRnVuY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29yZUpzRGF0YS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc01hc2tlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL190b1NvdXJjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNOYXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0VmFsdWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TmF0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2RlZmluZVByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VTZXRUb1N0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zaG9ydE91dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRUb1N0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlUmVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2VxLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNMZW5ndGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5TGlrZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzSXRlcmF0ZWVDYWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VUaW1lcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzT2JqZWN0TGlrZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNBcmd1bWVudHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FyZ3VtZW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9zdHViRmFsc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0J1ZmZlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNUeXBlZEFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VVbmFyeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19ub2RlVXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzVHlwZWRBcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUxpa2VLZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzUHJvdG90eXBlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25hdGl2ZUtleXNJbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlS2V5c0luLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gva2V5c0luLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZGVmYXVsdHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvb3Vycy9wcmltb3JkaWFscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZXZlbnQtdGFyZ2V0LXNoaW0vZGlzdC9ldmVudC10YXJnZXQtc2hpbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvYWJvcnQtY29udHJvbGxlci9kaXN0L2Fib3J0LWNvbnRyb2xsZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvb3Vycy91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL291cnMvZXJyb3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3ZhbGlkYXRvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Byb2Nlc3MvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL2VuZC1vZi1zdHJlYW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9kZXN0cm95LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvbGVnYWN5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvYWRkLWFib3J0LXNpZ25hbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL2J1ZmZlcl9saXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvc3RhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9mcm9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvcmVhZGFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy93cml0YWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL2R1cGxleGlmeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL2R1cGxleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL3RyYW5zZm9ybS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL3Bhc3N0aHJvdWdoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvcGlwZWxpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9jb21wb3NlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvb3BlcmF0b3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL3N0cmVhbS9wcm9taXNlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9zdHJlYW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvb3Vycy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheVB1c2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNGbGF0dGVuYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlRmxhdHRlbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2ZsYXR0ZW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbmF0aXZlQ3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hDbGVhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoRGVsZXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hHZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaEhhcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoU2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0hhc2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlQ2xlYXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzb2NJbmRleE9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZURlbGV0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19saXN0Q2FjaGVHZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlSGFzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZVNldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19MaXN0Q2FjaGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlQ2xlYXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNLZXlhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldE1hcERhdGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVEZWxldGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVHZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVIYXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVTZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTWFwQ2FjaGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0Q2FjaGVBZGQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0Q2FjaGVIYXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU2V0Q2FjaGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUZpbmRJbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNOYU4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RyaWN0SW5kZXhPZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSW5kZXhPZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUluY2x1ZGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5SW5jbHVkZXNXaXRoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5TWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NhY2hlSGFzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VEaWZmZXJlbmNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheUxpa2VPYmplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9kaWZmZXJlbmNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1NldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL25vb3AuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0VG9BcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVTZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVVuaXEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC91bmlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19vdmVyQXJnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFByb3RvdHlwZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzUGxhaW5PYmplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2dsb2Ivbm9kZV9tb2R1bGVzL21pbmltYXRjaC9kaXN0L2NvbW1vbmpzL2Fzc2VydC12YWxpZC1wYXR0ZXJuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9nbG9iL25vZGVfbW9kdWxlcy9taW5pbWF0Y2gvZGlzdC9jb21tb25qcy9icmFjZS1leHByZXNzaW9ucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZ2xvYi9ub2RlX21vZHVsZXMvbWluaW1hdGNoL2Rpc3QvY29tbW9uanMvdW5lc2NhcGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2dsb2Ivbm9kZV9tb2R1bGVzL21pbmltYXRjaC9kaXN0L2NvbW1vbmpzL2FzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvZ2xvYi9ub2RlX21vZHVsZXMvbWluaW1hdGNoL2Rpc3QvY29tbW9uanMvZXNjYXBlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9nbG9iL25vZGVfbW9kdWxlcy9taW5pbWF0Y2gvZGlzdC9jb21tb25qcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbHJ1LWNhY2hlL2Rpc3QvY29tbW9uanMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL21pbmlwYXNzL2Rpc3QvY29tbW9uanMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3BhdGgtc2N1cnJ5L2Rpc3QvY29tbW9uanMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2dsb2IvZGlzdC9jb21tb25qcy9wYXR0ZXJuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9nbG9iL2Rpc3QvY29tbW9uanMvaWdub3JlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9nbG9iL2Rpc3QvY29tbW9uanMvcHJvY2Vzc29yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9nbG9iL2Rpc3QvY29tbW9uanMvd2Fsa2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9nbG9iL2Rpc3QvY29tbW9uanMvZ2xvYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvZ2xvYi9kaXN0L2NvbW1vbmpzL2hhcy1tYWdpYy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZ2xvYi9kaXN0L2NvbW1vbmpzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9hcmNoaXZlci11dGlscy9maWxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9hcmNoaXZlci11dGlscy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXJjaGl2ZXIvbGliL2Vycm9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9hcmNoaXZlci9saWIvY29yZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvY29tcHJlc3MtY29tbW9ucy9saWIvYXJjaGl2ZXJzL2FyY2hpdmUtZW50cnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NvbXByZXNzLWNvbW1vbnMvbGliL2FyY2hpdmVycy96aXAvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY29tcHJlc3MtY29tbW9ucy9saWIvYXJjaGl2ZXJzL3ppcC9nZW5lcmFsLXB1cnBvc2UtYml0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jb21wcmVzcy1jb21tb25zL2xpYi9hcmNoaXZlcnMvemlwL3VuaXgtc3RhdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY29tcHJlc3MtY29tbW9ucy9saWIvYXJjaGl2ZXJzL3ppcC9jb25zdGFudHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NvbXByZXNzLWNvbW1vbnMvbGliL2FyY2hpdmVycy96aXAvemlwLWFyY2hpdmUtZW50cnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NvbXByZXNzLWNvbW1vbnMvbGliL3V0aWwvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NvbXByZXNzLWNvbW1vbnMvbGliL2FyY2hpdmVycy9hcmNoaXZlLW91dHB1dC1zdHJlYW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NyYy0zMi9jcmMzMi5qcyIsICIuLi9ub2RlX21vZHVsZXMvY3JjMzItc3RyZWFtL2xpYi9jcmMzMi1zdHJlYW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NyYzMyLXN0cmVhbS9saWIvZGVmbGF0ZS1jcmMzMi1zdHJlYW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NyYzMyLXN0cmVhbS9saWIvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NvbXByZXNzLWNvbW1vbnMvbGliL2FyY2hpdmVycy96aXAvemlwLWFyY2hpdmUtb3V0cHV0LXN0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvY29tcHJlc3MtY29tbW9ucy9saWIvY29tcHJlc3MtY29tbW9ucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvemlwLXN0cmVhbS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXJjaGl2ZXIvbGliL3BsdWdpbnMvemlwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9xdWV1ZS10aWNrL3F1ZXVlLW1pY3JvdGFzay5qcyIsICIuLi9ub2RlX21vZHVsZXMvcXVldWUtdGljay9wcm9jZXNzLW5leHQtdGljay5qcyIsICIuLi9ub2RlX21vZHVsZXMvZmFzdC1maWZvL2ZpeGVkLXNpemUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Zhc3QtZmlmby9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdGV4dC1kZWNvZGVyL2xpYi9wYXNzLXRocm91Z2gtZGVjb2Rlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdGV4dC1kZWNvZGVyL2xpYi91dGY4LWRlY29kZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3RleHQtZGVjb2Rlci9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvc3RyZWFteC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYjRhL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy90YXItc3RyZWFtL2hlYWRlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Rhci1zdHJlYW0vZXh0cmFjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdGFyLXN0cmVhbS9jb25zdGFudHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Rhci1zdHJlYW0vcGFjay5qcyIsICIuLi9ub2RlX21vZHVsZXMvdGFyLXN0cmVhbS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXJjaGl2ZXIvbGliL3BsdWdpbnMvdGFyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9idWZmZXItY3JjMzIvZGlzdC9pbmRleC5janMiLCAiLi4vbm9kZV9tb2R1bGVzL2FyY2hpdmVyL2xpYi9wbHVnaW5zL2pzb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2FyY2hpdmVyL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9hcnRpZmFjdC9saWIvaW50ZXJuYWwvdXBsb2FkL3ppcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvYXJ0aWZhY3QvbGliL2ludGVybmFsL3VwbG9hZC91cGxvYWQtYXJ0aWZhY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2FydGlmYWN0L25vZGVfbW9kdWxlcy9AYWN0aW9ucy9naXRodWIvbGliL2NvbnRleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2FydGlmYWN0L25vZGVfbW9kdWxlcy9AYWN0aW9ucy9naXRodWIvbGliL2ludGVybmFsL3V0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bml2ZXJzYWwtdXNlci1hZ2VudC9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2JlZm9yZS1hZnRlci1ob29rL2xpYi9yZWdpc3Rlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvYmVmb3JlLWFmdGVyLWhvb2svbGliL2FkZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYmVmb3JlLWFmdGVyLWhvb2svbGliL3JlbW92ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvYmVmb3JlLWFmdGVyLWhvb2svaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2lzLXBsYWluLW9iamVjdC9kaXN0L2lzLXBsYWluLW9iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQG9jdG9raXQvZW5kcG9pbnQvZGlzdC1ub2RlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy93ZWJpZGwtY29udmVyc2lvbnMvbGliL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy93aGF0d2ctdXJsL2xpYi91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdHI0Ni9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvd2hhdHdnLXVybC9saWIvdXJsLXN0YXRlLW1hY2hpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3doYXR3Zy11cmwvbGliL1VSTC1pbXBsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy93aGF0d2ctdXJsL2xpYi9VUkwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3doYXR3Zy11cmwvbGliL3B1YmxpYy1hcGkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL25vZGUtZmV0Y2gvbGliL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9kZXByZWNhdGlvbi9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3dyYXBweS93cmFwcHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL29uY2Uvb25jZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQG9jdG9raXQvcmVxdWVzdC9ub2RlX21vZHVsZXMvQG9jdG9raXQvcmVxdWVzdC1lcnJvci9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3JlcXVlc3QvZGlzdC1ub2RlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9ncmFwaHFsL2Rpc3Qtbm9kZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQG9jdG9raXQvYXV0aC10b2tlbi9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2NvcmUvZGlzdC1ub2RlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9hcnRpZmFjdC9ub2RlX21vZHVsZXMvQGFjdGlvbnMvZ2l0aHViL25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9wbHVnaW4tcmVzdC1lbmRwb2ludC1tZXRob2RzL2Rpc3Qtbm9kZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvYXJ0aWZhY3Qvbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2dpdGh1Yi9ub2RlX21vZHVsZXMvQG9jdG9raXQvcGx1Z2luLXBhZ2luYXRlLXJlc3QvZGlzdC1ub2RlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9hcnRpZmFjdC9ub2RlX21vZHVsZXMvQGFjdGlvbnMvZ2l0aHViL2xpYi91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvYXJ0aWZhY3Qvbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2dpdGh1Yi9saWIvZ2l0aHViLmpzIiwgIi4uL25vZGVfbW9kdWxlcy90cmF2ZXJzZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hhaW5zYXcvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2J1ZmZlcnMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2JpbmFyeS9saWIvdmFycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvYmluYXJ5L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bnppcC1zdHJlYW0vbGliL21hdGNoZXItc3RyZWFtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bnppcC1zdHJlYW0vbGliL2VudHJ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bnppcC1zdHJlYW0vbGliL3VuemlwLXN0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW56aXAtc3RyZWFtL2xpYi9wYXJzZXItc3RyZWFtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9ta2RpcnAvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuemlwLXN0cmVhbS9saWIvZXh0cmFjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW56aXAtc3RyZWFtL3VuemlwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9hcnRpZmFjdC9saWIvaW50ZXJuYWwvZG93bmxvYWQvZG93bmxvYWQtYXJ0aWZhY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2FydGlmYWN0L2xpYi9pbnRlcm5hbC9maW5kL3JldHJ5LW9wdGlvbnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3BsdWdpbi1yZXF1ZXN0LWxvZy9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2JvdHRsZW5lY2svbGlnaHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3BsdWdpbi1yZXRyeS9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2FydGlmYWN0L2xpYi9pbnRlcm5hbC9maW5kL2dldC1hcnRpZmFjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvYXJ0aWZhY3QvbGliL2ludGVybmFsL2RlbGV0ZS9kZWxldGUtYXJ0aWZhY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2FydGlmYWN0L2xpYi9pbnRlcm5hbC9maW5kL2xpc3QtYXJ0aWZhY3RzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9hcnRpZmFjdC9saWIvaW50ZXJuYWwvY2xpZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9hcnRpZmFjdC9saWIvaW50ZXJuYWwvc2hhcmVkL2ludGVyZmFjZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2FydGlmYWN0L2xpYi9hcnRpZmFjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvZ2l0aHViL2xpYi9jb250ZXh0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9naXRodWIvbGliL2ludGVybmFsL3V0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9naXRodWIvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2NvcmUvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3JlcXVlc3Qvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2VuZHBvaW50L2Rpc3Qtbm9kZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQG9jdG9raXQvcmVxdWVzdC1lcnJvci9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2dpdGh1Yi9ub2RlX21vZHVsZXMvQG9jdG9raXQvY29yZS9ub2RlX21vZHVsZXMvQG9jdG9raXQvcmVxdWVzdC9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2dpdGh1Yi9ub2RlX21vZHVsZXMvQG9jdG9raXQvY29yZS9ub2RlX21vZHVsZXMvQG9jdG9raXQvZ3JhcGhxbC9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2dpdGh1Yi9ub2RlX21vZHVsZXMvQG9jdG9raXQvY29yZS9ub2RlX21vZHVsZXMvQG9jdG9raXQvYXV0aC10b2tlbi9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2dpdGh1Yi9ub2RlX21vZHVsZXMvQG9jdG9raXQvY29yZS9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3BsdWdpbi1yZXN0LWVuZHBvaW50LW1ldGhvZHMvZGlzdC1ub2RlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9wbHVnaW4tcGFnaW5hdGUtcmVzdC9kaXN0LW5vZGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2dpdGh1Yi9saWIvdXRpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2dpdGh1Yi9saWIvZ2l0aHViLmpzIiwgInNyYy9qb2JzL21haW4udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBXZSB1c2UgYW55IGFzIGEgdmFsaWQgaW5wdXQgdHlwZVxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50b0NvbW1hbmRQcm9wZXJ0aWVzID0gZXhwb3J0cy50b0NvbW1hbmRWYWx1ZSA9IHZvaWQgMDtcbi8qKlxuICogU2FuaXRpemVzIGFuIGlucHV0IGludG8gYSBzdHJpbmcgc28gaXQgY2FuIGJlIHBhc3NlZCBpbnRvIGlzc3VlQ29tbWFuZCBzYWZlbHlcbiAqIEBwYXJhbSBpbnB1dCBpbnB1dCB0byBzYW5pdGl6ZSBpbnRvIGEgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIHRvQ29tbWFuZFZhbHVlKGlucHV0KSB7XG4gICAgaWYgKGlucHV0ID09PSBudWxsIHx8IGlucHV0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnIHx8IGlucHV0IGluc3RhbmNlb2YgU3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBpbnB1dDtcbiAgICB9XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGlucHV0KTtcbn1cbmV4cG9ydHMudG9Db21tYW5kVmFsdWUgPSB0b0NvbW1hbmRWYWx1ZTtcbi8qKlxuICpcbiAqIEBwYXJhbSBhbm5vdGF0aW9uUHJvcGVydGllc1xuICogQHJldHVybnMgVGhlIGNvbW1hbmQgcHJvcGVydGllcyB0byBzZW5kIHdpdGggdGhlIGFjdHVhbCBhbm5vdGF0aW9uIGNvbW1hbmRcbiAqIFNlZSBJc3N1ZUNvbW1hbmRQcm9wZXJ0aWVzOiBodHRwczovL2dpdGh1Yi5jb20vYWN0aW9ucy9ydW5uZXIvYmxvYi9tYWluL3NyYy9SdW5uZXIuV29ya2VyL0FjdGlvbkNvbW1hbmRNYW5hZ2VyLmNzI0w2NDZcbiAqL1xuZnVuY3Rpb24gdG9Db21tYW5kUHJvcGVydGllcyhhbm5vdGF0aW9uUHJvcGVydGllcykge1xuICAgIGlmICghT2JqZWN0LmtleXMoYW5ub3RhdGlvblByb3BlcnRpZXMpLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHRpdGxlOiBhbm5vdGF0aW9uUHJvcGVydGllcy50aXRsZSxcbiAgICAgICAgZmlsZTogYW5ub3RhdGlvblByb3BlcnRpZXMuZmlsZSxcbiAgICAgICAgbGluZTogYW5ub3RhdGlvblByb3BlcnRpZXMuc3RhcnRMaW5lLFxuICAgICAgICBlbmRMaW5lOiBhbm5vdGF0aW9uUHJvcGVydGllcy5lbmRMaW5lLFxuICAgICAgICBjb2w6IGFubm90YXRpb25Qcm9wZXJ0aWVzLnN0YXJ0Q29sdW1uLFxuICAgICAgICBlbmRDb2x1bW46IGFubm90YXRpb25Qcm9wZXJ0aWVzLmVuZENvbHVtblxuICAgIH07XG59XG5leHBvcnRzLnRvQ29tbWFuZFByb3BlcnRpZXMgPSB0b0NvbW1hbmRQcm9wZXJ0aWVzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbHMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc3N1ZSA9IGV4cG9ydHMuaXNzdWVDb21tYW5kID0gdm9pZCAwO1xuY29uc3Qgb3MgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIm9zXCIpKTtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi91dGlsc1wiKTtcbi8qKlxuICogQ29tbWFuZHNcbiAqXG4gKiBDb21tYW5kIEZvcm1hdDpcbiAqICAgOjpuYW1lIGtleT12YWx1ZSxrZXk9dmFsdWU6Om1lc3NhZ2VcbiAqXG4gKiBFeGFtcGxlczpcbiAqICAgOjp3YXJuaW5nOjpUaGlzIGlzIHRoZSBtZXNzYWdlXG4gKiAgIDo6c2V0LWVudiBuYW1lPU1ZX1ZBUjo6c29tZSB2YWx1ZVxuICovXG5mdW5jdGlvbiBpc3N1ZUNvbW1hbmQoY29tbWFuZCwgcHJvcGVydGllcywgbWVzc2FnZSkge1xuICAgIGNvbnN0IGNtZCA9IG5ldyBDb21tYW5kKGNvbW1hbmQsIHByb3BlcnRpZXMsIG1lc3NhZ2UpO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGNtZC50b1N0cmluZygpICsgb3MuRU9MKTtcbn1cbmV4cG9ydHMuaXNzdWVDb21tYW5kID0gaXNzdWVDb21tYW5kO1xuZnVuY3Rpb24gaXNzdWUobmFtZSwgbWVzc2FnZSA9ICcnKSB7XG4gICAgaXNzdWVDb21tYW5kKG5hbWUsIHt9LCBtZXNzYWdlKTtcbn1cbmV4cG9ydHMuaXNzdWUgPSBpc3N1ZTtcbmNvbnN0IENNRF9TVFJJTkcgPSAnOjonO1xuY2xhc3MgQ29tbWFuZCB7XG4gICAgY29uc3RydWN0b3IoY29tbWFuZCwgcHJvcGVydGllcywgbWVzc2FnZSkge1xuICAgICAgICBpZiAoIWNvbW1hbmQpIHtcbiAgICAgICAgICAgIGNvbW1hbmQgPSAnbWlzc2luZy5jb21tYW5kJztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbW1hbmQgPSBjb21tYW5kO1xuICAgICAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIH1cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgbGV0IGNtZFN0ciA9IENNRF9TVFJJTkcgKyB0aGlzLmNvbW1hbmQ7XG4gICAgICAgIGlmICh0aGlzLnByb3BlcnRpZXMgJiYgT2JqZWN0LmtleXModGhpcy5wcm9wZXJ0aWVzKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjbWRTdHIgKz0gJyAnO1xuICAgICAgICAgICAgbGV0IGZpcnN0ID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMucHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWwgPSB0aGlzLnByb3BlcnRpZXNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZFN0ciArPSAnLCc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjbWRTdHIgKz0gYCR7a2V5fT0ke2VzY2FwZVByb3BlcnR5KHZhbCl9YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjbWRTdHIgKz0gYCR7Q01EX1NUUklOR30ke2VzY2FwZURhdGEodGhpcy5tZXNzYWdlKX1gO1xuICAgICAgICByZXR1cm4gY21kU3RyO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGVzY2FwZURhdGEocykge1xuICAgIHJldHVybiAoMCwgdXRpbHNfMS50b0NvbW1hbmRWYWx1ZSkocylcbiAgICAgICAgLnJlcGxhY2UoLyUvZywgJyUyNScpXG4gICAgICAgIC5yZXBsYWNlKC9cXHIvZywgJyUwRCcpXG4gICAgICAgIC5yZXBsYWNlKC9cXG4vZywgJyUwQScpO1xufVxuZnVuY3Rpb24gZXNjYXBlUHJvcGVydHkocykge1xuICAgIHJldHVybiAoMCwgdXRpbHNfMS50b0NvbW1hbmRWYWx1ZSkocylcbiAgICAgICAgLnJlcGxhY2UoLyUvZywgJyUyNScpXG4gICAgICAgIC5yZXBsYWNlKC9cXHIvZywgJyUwRCcpXG4gICAgICAgIC5yZXBsYWNlKC9cXG4vZywgJyUwQScpXG4gICAgICAgIC5yZXBsYWNlKC86L2csICclM0EnKVxuICAgICAgICAucmVwbGFjZSgvLC9nLCAnJTJDJyk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb21tYW5kLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBGb3IgaW50ZXJuYWwgdXNlLCBzdWJqZWN0IHRvIGNoYW5nZS5cbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5wcmVwYXJlS2V5VmFsdWVNZXNzYWdlID0gZXhwb3J0cy5pc3N1ZUZpbGVDb21tYW5kID0gdm9pZCAwO1xuLy8gV2UgdXNlIGFueSBhcyBhIHZhbGlkIGlucHV0IHR5cGVcbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmNvbnN0IGNyeXB0byA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiY3J5cHRvXCIpKTtcbmNvbnN0IGZzID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJmc1wiKSk7XG5jb25zdCBvcyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwib3NcIikpO1xuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoXCIuL3V0aWxzXCIpO1xuZnVuY3Rpb24gaXNzdWVGaWxlQ29tbWFuZChjb21tYW5kLCBtZXNzYWdlKSB7XG4gICAgY29uc3QgZmlsZVBhdGggPSBwcm9jZXNzLmVudltgR0lUSFVCXyR7Y29tbWFuZH1gXTtcbiAgICBpZiAoIWZpbGVQYXRoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGZpbmQgZW52aXJvbm1lbnQgdmFyaWFibGUgZm9yIGZpbGUgY29tbWFuZCAke2NvbW1hbmR9YCk7XG4gICAgfVxuICAgIGlmICghZnMuZXhpc3RzU3luYyhmaWxlUGF0aCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIGZpbGUgYXQgcGF0aDogJHtmaWxlUGF0aH1gKTtcbiAgICB9XG4gICAgZnMuYXBwZW5kRmlsZVN5bmMoZmlsZVBhdGgsIGAkeygwLCB1dGlsc18xLnRvQ29tbWFuZFZhbHVlKShtZXNzYWdlKX0ke29zLkVPTH1gLCB7XG4gICAgICAgIGVuY29kaW5nOiAndXRmOCdcbiAgICB9KTtcbn1cbmV4cG9ydHMuaXNzdWVGaWxlQ29tbWFuZCA9IGlzc3VlRmlsZUNvbW1hbmQ7XG5mdW5jdGlvbiBwcmVwYXJlS2V5VmFsdWVNZXNzYWdlKGtleSwgdmFsdWUpIHtcbiAgICBjb25zdCBkZWxpbWl0ZXIgPSBgZ2hhZGVsaW1pdGVyXyR7Y3J5cHRvLnJhbmRvbVVVSUQoKX1gO1xuICAgIGNvbnN0IGNvbnZlcnRlZFZhbHVlID0gKDAsIHV0aWxzXzEudG9Db21tYW5kVmFsdWUpKHZhbHVlKTtcbiAgICAvLyBUaGVzZSBzaG91bGQgcmVhbGlzdGljYWxseSBuZXZlciBoYXBwZW4sIGJ1dCBqdXN0IGluIGNhc2Ugc29tZW9uZSBmaW5kcyBhXG4gICAgLy8gd2F5IHRvIGV4cGxvaXQgdXVpZCBnZW5lcmF0aW9uIGxldCdzIG5vdCBhbGxvdyBrZXlzIG9yIHZhbHVlcyB0aGF0IGNvbnRhaW5cbiAgICAvLyB0aGUgZGVsaW1pdGVyLlxuICAgIGlmIChrZXkuaW5jbHVkZXMoZGVsaW1pdGVyKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgaW5wdXQ6IG5hbWUgc2hvdWxkIG5vdCBjb250YWluIHRoZSBkZWxpbWl0ZXIgXCIke2RlbGltaXRlcn1cImApO1xuICAgIH1cbiAgICBpZiAoY29udmVydGVkVmFsdWUuaW5jbHVkZXMoZGVsaW1pdGVyKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgaW5wdXQ6IHZhbHVlIHNob3VsZCBub3QgY29udGFpbiB0aGUgZGVsaW1pdGVyIFwiJHtkZWxpbWl0ZXJ9XCJgKTtcbiAgICB9XG4gICAgcmV0dXJuIGAke2tleX08PCR7ZGVsaW1pdGVyfSR7b3MuRU9MfSR7Y29udmVydGVkVmFsdWV9JHtvcy5FT0x9JHtkZWxpbWl0ZXJ9YDtcbn1cbmV4cG9ydHMucHJlcGFyZUtleVZhbHVlTWVzc2FnZSA9IHByZXBhcmVLZXlWYWx1ZU1lc3NhZ2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1maWxlLWNvbW1hbmQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY2hlY2tCeXBhc3MgPSBleHBvcnRzLmdldFByb3h5VXJsID0gdm9pZCAwO1xuZnVuY3Rpb24gZ2V0UHJveHlVcmwocmVxVXJsKSB7XG4gICAgY29uc3QgdXNpbmdTc2wgPSByZXFVcmwucHJvdG9jb2wgPT09ICdodHRwczonO1xuICAgIGlmIChjaGVja0J5cGFzcyhyZXFVcmwpKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IHByb3h5VmFyID0gKCgpID0+IHtcbiAgICAgICAgaWYgKHVzaW5nU3NsKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvY2Vzcy5lbnZbJ2h0dHBzX3Byb3h5J10gfHwgcHJvY2Vzcy5lbnZbJ0hUVFBTX1BST1hZJ107XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvY2Vzcy5lbnZbJ2h0dHBfcHJveHknXSB8fCBwcm9jZXNzLmVudlsnSFRUUF9QUk9YWSddO1xuICAgICAgICB9XG4gICAgfSkoKTtcbiAgICBpZiAocHJveHlWYXIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGVjb2RlZFVSTChwcm94eVZhcik7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgICAgICBpZiAoIXByb3h5VmFyLnN0YXJ0c1dpdGgoJ2h0dHA6Ly8nKSAmJiAhcHJveHlWYXIuc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERlY29kZWRVUkwoYGh0dHA6Ly8ke3Byb3h5VmFyfWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbn1cbmV4cG9ydHMuZ2V0UHJveHlVcmwgPSBnZXRQcm94eVVybDtcbmZ1bmN0aW9uIGNoZWNrQnlwYXNzKHJlcVVybCkge1xuICAgIGlmICghcmVxVXJsLmhvc3RuYW1lKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgcmVxSG9zdCA9IHJlcVVybC5ob3N0bmFtZTtcbiAgICBpZiAoaXNMb29wYmFja0FkZHJlc3MocmVxSG9zdCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IG5vUHJveHkgPSBwcm9jZXNzLmVudlsnbm9fcHJveHknXSB8fCBwcm9jZXNzLmVudlsnTk9fUFJPWFknXSB8fCAnJztcbiAgICBpZiAoIW5vUHJveHkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBEZXRlcm1pbmUgdGhlIHJlcXVlc3QgcG9ydFxuICAgIGxldCByZXFQb3J0O1xuICAgIGlmIChyZXFVcmwucG9ydCkge1xuICAgICAgICByZXFQb3J0ID0gTnVtYmVyKHJlcVVybC5wb3J0KTtcbiAgICB9XG4gICAgZWxzZSBpZiAocmVxVXJsLnByb3RvY29sID09PSAnaHR0cDonKSB7XG4gICAgICAgIHJlcVBvcnQgPSA4MDtcbiAgICB9XG4gICAgZWxzZSBpZiAocmVxVXJsLnByb3RvY29sID09PSAnaHR0cHM6Jykge1xuICAgICAgICByZXFQb3J0ID0gNDQzO1xuICAgIH1cbiAgICAvLyBGb3JtYXQgdGhlIHJlcXVlc3QgaG9zdG5hbWUgYW5kIGhvc3RuYW1lIHdpdGggcG9ydFxuICAgIGNvbnN0IHVwcGVyUmVxSG9zdHMgPSBbcmVxVXJsLmhvc3RuYW1lLnRvVXBwZXJDYXNlKCldO1xuICAgIGlmICh0eXBlb2YgcmVxUG9ydCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgdXBwZXJSZXFIb3N0cy5wdXNoKGAke3VwcGVyUmVxSG9zdHNbMF19OiR7cmVxUG9ydH1gKTtcbiAgICB9XG4gICAgLy8gQ29tcGFyZSByZXF1ZXN0IGhvc3QgYWdhaW5zdCBub3Byb3h5XG4gICAgZm9yIChjb25zdCB1cHBlck5vUHJveHlJdGVtIG9mIG5vUHJveHlcbiAgICAgICAgLnNwbGl0KCcsJylcbiAgICAgICAgLm1hcCh4ID0+IHgudHJpbSgpLnRvVXBwZXJDYXNlKCkpXG4gICAgICAgIC5maWx0ZXIoeCA9PiB4KSkge1xuICAgICAgICBpZiAodXBwZXJOb1Byb3h5SXRlbSA9PT0gJyonIHx8XG4gICAgICAgICAgICB1cHBlclJlcUhvc3RzLnNvbWUoeCA9PiB4ID09PSB1cHBlck5vUHJveHlJdGVtIHx8XG4gICAgICAgICAgICAgICAgeC5lbmRzV2l0aChgLiR7dXBwZXJOb1Byb3h5SXRlbX1gKSB8fFxuICAgICAgICAgICAgICAgICh1cHBlck5vUHJveHlJdGVtLnN0YXJ0c1dpdGgoJy4nKSAmJlxuICAgICAgICAgICAgICAgICAgICB4LmVuZHNXaXRoKGAke3VwcGVyTm9Qcm94eUl0ZW19YCkpKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZXhwb3J0cy5jaGVja0J5cGFzcyA9IGNoZWNrQnlwYXNzO1xuZnVuY3Rpb24gaXNMb29wYmFja0FkZHJlc3MoaG9zdCkge1xuICAgIGNvbnN0IGhvc3RMb3dlciA9IGhvc3QudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gKGhvc3RMb3dlciA9PT0gJ2xvY2FsaG9zdCcgfHxcbiAgICAgICAgaG9zdExvd2VyLnN0YXJ0c1dpdGgoJzEyNy4nKSB8fFxuICAgICAgICBob3N0TG93ZXIuc3RhcnRzV2l0aCgnWzo6MV0nKSB8fFxuICAgICAgICBob3N0TG93ZXIuc3RhcnRzV2l0aCgnWzA6MDowOjA6MDowOjA6MV0nKSk7XG59XG5jbGFzcyBEZWNvZGVkVVJMIGV4dGVuZHMgVVJMIHtcbiAgICBjb25zdHJ1Y3Rvcih1cmwsIGJhc2UpIHtcbiAgICAgICAgc3VwZXIodXJsLCBiYXNlKTtcbiAgICAgICAgdGhpcy5fZGVjb2RlZFVzZXJuYW1lID0gZGVjb2RlVVJJQ29tcG9uZW50KHN1cGVyLnVzZXJuYW1lKTtcbiAgICAgICAgdGhpcy5fZGVjb2RlZFBhc3N3b3JkID0gZGVjb2RlVVJJQ29tcG9uZW50KHN1cGVyLnBhc3N3b3JkKTtcbiAgICB9XG4gICAgZ2V0IHVzZXJuYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVjb2RlZFVzZXJuYW1lO1xuICAgIH1cbiAgICBnZXQgcGFzc3dvcmQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWNvZGVkUGFzc3dvcmQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cHJveHkuanMubWFwIiwKICAgICIndXNlIHN0cmljdCc7XG5cbnZhciBuZXQgPSByZXF1aXJlKCduZXQnKTtcbnZhciB0bHMgPSByZXF1aXJlKCd0bHMnKTtcbnZhciBodHRwID0gcmVxdWlyZSgnaHR0cCcpO1xudmFyIGh0dHBzID0gcmVxdWlyZSgnaHR0cHMnKTtcbnZhciBldmVudHMgPSByZXF1aXJlKCdldmVudHMnKTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKTtcbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuXG5cbmV4cG9ydHMuaHR0cE92ZXJIdHRwID0gaHR0cE92ZXJIdHRwO1xuZXhwb3J0cy5odHRwc092ZXJIdHRwID0gaHR0cHNPdmVySHR0cDtcbmV4cG9ydHMuaHR0cE92ZXJIdHRwcyA9IGh0dHBPdmVySHR0cHM7XG5leHBvcnRzLmh0dHBzT3Zlckh0dHBzID0gaHR0cHNPdmVySHR0cHM7XG5cblxuZnVuY3Rpb24gaHR0cE92ZXJIdHRwKG9wdGlvbnMpIHtcbiAgdmFyIGFnZW50ID0gbmV3IFR1bm5lbGluZ0FnZW50KG9wdGlvbnMpO1xuICBhZ2VudC5yZXF1ZXN0ID0gaHR0cC5yZXF1ZXN0O1xuICByZXR1cm4gYWdlbnQ7XG59XG5cbmZ1bmN0aW9uIGh0dHBzT3Zlckh0dHAob3B0aW9ucykge1xuICB2YXIgYWdlbnQgPSBuZXcgVHVubmVsaW5nQWdlbnQob3B0aW9ucyk7XG4gIGFnZW50LnJlcXVlc3QgPSBodHRwLnJlcXVlc3Q7XG4gIGFnZW50LmNyZWF0ZVNvY2tldCA9IGNyZWF0ZVNlY3VyZVNvY2tldDtcbiAgYWdlbnQuZGVmYXVsdFBvcnQgPSA0NDM7XG4gIHJldHVybiBhZ2VudDtcbn1cblxuZnVuY3Rpb24gaHR0cE92ZXJIdHRwcyhvcHRpb25zKSB7XG4gIHZhciBhZ2VudCA9IG5ldyBUdW5uZWxpbmdBZ2VudChvcHRpb25zKTtcbiAgYWdlbnQucmVxdWVzdCA9IGh0dHBzLnJlcXVlc3Q7XG4gIHJldHVybiBhZ2VudDtcbn1cblxuZnVuY3Rpb24gaHR0cHNPdmVySHR0cHMob3B0aW9ucykge1xuICB2YXIgYWdlbnQgPSBuZXcgVHVubmVsaW5nQWdlbnQob3B0aW9ucyk7XG4gIGFnZW50LnJlcXVlc3QgPSBodHRwcy5yZXF1ZXN0O1xuICBhZ2VudC5jcmVhdGVTb2NrZXQgPSBjcmVhdGVTZWN1cmVTb2NrZXQ7XG4gIGFnZW50LmRlZmF1bHRQb3J0ID0gNDQzO1xuICByZXR1cm4gYWdlbnQ7XG59XG5cblxuZnVuY3Rpb24gVHVubmVsaW5nQWdlbnQob3B0aW9ucykge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHNlbGYub3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIHNlbGYucHJveHlPcHRpb25zID0gc2VsZi5vcHRpb25zLnByb3h5IHx8IHt9O1xuICBzZWxmLm1heFNvY2tldHMgPSBzZWxmLm9wdGlvbnMubWF4U29ja2V0cyB8fCBodHRwLkFnZW50LmRlZmF1bHRNYXhTb2NrZXRzO1xuICBzZWxmLnJlcXVlc3RzID0gW107XG4gIHNlbGYuc29ja2V0cyA9IFtdO1xuXG4gIHNlbGYub24oJ2ZyZWUnLCBmdW5jdGlvbiBvbkZyZWUoc29ja2V0LCBob3N0LCBwb3J0LCBsb2NhbEFkZHJlc3MpIHtcbiAgICB2YXIgb3B0aW9ucyA9IHRvT3B0aW9ucyhob3N0LCBwb3J0LCBsb2NhbEFkZHJlc3MpO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBzZWxmLnJlcXVlc3RzLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICB2YXIgcGVuZGluZyA9IHNlbGYucmVxdWVzdHNbaV07XG4gICAgICBpZiAocGVuZGluZy5ob3N0ID09PSBvcHRpb25zLmhvc3QgJiYgcGVuZGluZy5wb3J0ID09PSBvcHRpb25zLnBvcnQpIHtcbiAgICAgICAgLy8gRGV0ZWN0IHRoZSByZXF1ZXN0IHRvIGNvbm5lY3Qgc2FtZSBvcmlnaW4gc2VydmVyLFxuICAgICAgICAvLyByZXVzZSB0aGUgY29ubmVjdGlvbi5cbiAgICAgICAgc2VsZi5yZXF1ZXN0cy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIHBlbmRpbmcucmVxdWVzdC5vblNvY2tldChzb2NrZXQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIHNvY2tldC5kZXN0cm95KCk7XG4gICAgc2VsZi5yZW1vdmVTb2NrZXQoc29ja2V0KTtcbiAgfSk7XG59XG51dGlsLmluaGVyaXRzKFR1bm5lbGluZ0FnZW50LCBldmVudHMuRXZlbnRFbWl0dGVyKTtcblxuVHVubmVsaW5nQWdlbnQucHJvdG90eXBlLmFkZFJlcXVlc3QgPSBmdW5jdGlvbiBhZGRSZXF1ZXN0KHJlcSwgaG9zdCwgcG9ydCwgbG9jYWxBZGRyZXNzKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIG9wdGlvbnMgPSBtZXJnZU9wdGlvbnMoe3JlcXVlc3Q6IHJlcX0sIHNlbGYub3B0aW9ucywgdG9PcHRpb25zKGhvc3QsIHBvcnQsIGxvY2FsQWRkcmVzcykpO1xuXG4gIGlmIChzZWxmLnNvY2tldHMubGVuZ3RoID49IHRoaXMubWF4U29ja2V0cykge1xuICAgIC8vIFdlIGFyZSBvdmVyIGxpbWl0IHNvIHdlJ2xsIGFkZCBpdCB0byB0aGUgcXVldWUuXG4gICAgc2VsZi5yZXF1ZXN0cy5wdXNoKG9wdGlvbnMpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIElmIHdlIGFyZSB1bmRlciBtYXhTb2NrZXRzIGNyZWF0ZSBhIG5ldyBvbmUuXG4gIHNlbGYuY3JlYXRlU29ja2V0KG9wdGlvbnMsIGZ1bmN0aW9uKHNvY2tldCkge1xuICAgIHNvY2tldC5vbignZnJlZScsIG9uRnJlZSk7XG4gICAgc29ja2V0Lm9uKCdjbG9zZScsIG9uQ2xvc2VPclJlbW92ZSk7XG4gICAgc29ja2V0Lm9uKCdhZ2VudFJlbW92ZScsIG9uQ2xvc2VPclJlbW92ZSk7XG4gICAgcmVxLm9uU29ja2V0KHNvY2tldCk7XG5cbiAgICBmdW5jdGlvbiBvbkZyZWUoKSB7XG4gICAgICBzZWxmLmVtaXQoJ2ZyZWUnLCBzb2NrZXQsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9uQ2xvc2VPclJlbW92ZShlcnIpIHtcbiAgICAgIHNlbGYucmVtb3ZlU29ja2V0KHNvY2tldCk7XG4gICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ2ZyZWUnLCBvbkZyZWUpO1xuICAgICAgc29ja2V0LnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uQ2xvc2VPclJlbW92ZSk7XG4gICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ2FnZW50UmVtb3ZlJywgb25DbG9zZU9yUmVtb3ZlKTtcbiAgICB9XG4gIH0pO1xufTtcblxuVHVubmVsaW5nQWdlbnQucHJvdG90eXBlLmNyZWF0ZVNvY2tldCA9IGZ1bmN0aW9uIGNyZWF0ZVNvY2tldChvcHRpb25zLCBjYikge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciBwbGFjZWhvbGRlciA9IHt9O1xuICBzZWxmLnNvY2tldHMucHVzaChwbGFjZWhvbGRlcik7XG5cbiAgdmFyIGNvbm5lY3RPcHRpb25zID0gbWVyZ2VPcHRpb25zKHt9LCBzZWxmLnByb3h5T3B0aW9ucywge1xuICAgIG1ldGhvZDogJ0NPTk5FQ1QnLFxuICAgIHBhdGg6IG9wdGlvbnMuaG9zdCArICc6JyArIG9wdGlvbnMucG9ydCxcbiAgICBhZ2VudDogZmFsc2UsXG4gICAgaGVhZGVyczoge1xuICAgICAgaG9zdDogb3B0aW9ucy5ob3N0ICsgJzonICsgb3B0aW9ucy5wb3J0XG4gICAgfVxuICB9KTtcbiAgaWYgKG9wdGlvbnMubG9jYWxBZGRyZXNzKSB7XG4gICAgY29ubmVjdE9wdGlvbnMubG9jYWxBZGRyZXNzID0gb3B0aW9ucy5sb2NhbEFkZHJlc3M7XG4gIH1cbiAgaWYgKGNvbm5lY3RPcHRpb25zLnByb3h5QXV0aCkge1xuICAgIGNvbm5lY3RPcHRpb25zLmhlYWRlcnMgPSBjb25uZWN0T3B0aW9ucy5oZWFkZXJzIHx8IHt9O1xuICAgIGNvbm5lY3RPcHRpb25zLmhlYWRlcnNbJ1Byb3h5LUF1dGhvcml6YXRpb24nXSA9ICdCYXNpYyAnICtcbiAgICAgICAgbmV3IEJ1ZmZlcihjb25uZWN0T3B0aW9ucy5wcm94eUF1dGgpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgfVxuXG4gIGRlYnVnKCdtYWtpbmcgQ09OTkVDVCByZXF1ZXN0Jyk7XG4gIHZhciBjb25uZWN0UmVxID0gc2VsZi5yZXF1ZXN0KGNvbm5lY3RPcHRpb25zKTtcbiAgY29ubmVjdFJlcS51c2VDaHVua2VkRW5jb2RpbmdCeURlZmF1bHQgPSBmYWxzZTsgLy8gZm9yIHYwLjZcbiAgY29ubmVjdFJlcS5vbmNlKCdyZXNwb25zZScsIG9uUmVzcG9uc2UpOyAvLyBmb3IgdjAuNlxuICBjb25uZWN0UmVxLm9uY2UoJ3VwZ3JhZGUnLCBvblVwZ3JhZGUpOyAgIC8vIGZvciB2MC42XG4gIGNvbm5lY3RSZXEub25jZSgnY29ubmVjdCcsIG9uQ29ubmVjdCk7ICAgLy8gZm9yIHYwLjcgb3IgbGF0ZXJcbiAgY29ubmVjdFJlcS5vbmNlKCdlcnJvcicsIG9uRXJyb3IpO1xuICBjb25uZWN0UmVxLmVuZCgpO1xuXG4gIGZ1bmN0aW9uIG9uUmVzcG9uc2UocmVzKSB7XG4gICAgLy8gVmVyeSBoYWNreS4gVGhpcyBpcyBuZWNlc3NhcnkgdG8gYXZvaWQgaHR0cC1wYXJzZXIgbGVha3MuXG4gICAgcmVzLnVwZ3JhZGUgPSB0cnVlO1xuICB9XG5cbiAgZnVuY3Rpb24gb25VcGdyYWRlKHJlcywgc29ja2V0LCBoZWFkKSB7XG4gICAgLy8gSGFja3kuXG4gICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbigpIHtcbiAgICAgIG9uQ29ubmVjdChyZXMsIHNvY2tldCwgaGVhZCk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBvbkNvbm5lY3QocmVzLCBzb2NrZXQsIGhlYWQpIHtcbiAgICBjb25uZWN0UmVxLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgIHNvY2tldC5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcblxuICAgIGlmIChyZXMuc3RhdHVzQ29kZSAhPT0gMjAwKSB7XG4gICAgICBkZWJ1ZygndHVubmVsaW5nIHNvY2tldCBjb3VsZCBub3QgYmUgZXN0YWJsaXNoZWQsIHN0YXR1c0NvZGU9JWQnLFxuICAgICAgICByZXMuc3RhdHVzQ29kZSk7XG4gICAgICBzb2NrZXQuZGVzdHJveSgpO1xuICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKCd0dW5uZWxpbmcgc29ja2V0IGNvdWxkIG5vdCBiZSBlc3RhYmxpc2hlZCwgJyArXG4gICAgICAgICdzdGF0dXNDb2RlPScgKyByZXMuc3RhdHVzQ29kZSk7XG4gICAgICBlcnJvci5jb2RlID0gJ0VDT05OUkVTRVQnO1xuICAgICAgb3B0aW9ucy5yZXF1ZXN0LmVtaXQoJ2Vycm9yJywgZXJyb3IpO1xuICAgICAgc2VsZi5yZW1vdmVTb2NrZXQocGxhY2Vob2xkZXIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaGVhZC5sZW5ndGggPiAwKSB7XG4gICAgICBkZWJ1ZygnZ290IGlsbGVnYWwgcmVzcG9uc2UgYm9keSBmcm9tIHByb3h5Jyk7XG4gICAgICBzb2NrZXQuZGVzdHJveSgpO1xuICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKCdnb3QgaWxsZWdhbCByZXNwb25zZSBib2R5IGZyb20gcHJveHknKTtcbiAgICAgIGVycm9yLmNvZGUgPSAnRUNPTk5SRVNFVCc7XG4gICAgICBvcHRpb25zLnJlcXVlc3QuZW1pdCgnZXJyb3InLCBlcnJvcik7XG4gICAgICBzZWxmLnJlbW92ZVNvY2tldChwbGFjZWhvbGRlcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGRlYnVnKCd0dW5uZWxpbmcgY29ubmVjdGlvbiBoYXMgZXN0YWJsaXNoZWQnKTtcbiAgICBzZWxmLnNvY2tldHNbc2VsZi5zb2NrZXRzLmluZGV4T2YocGxhY2Vob2xkZXIpXSA9IHNvY2tldDtcbiAgICByZXR1cm4gY2Ioc29ja2V0KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uRXJyb3IoY2F1c2UpIHtcbiAgICBjb25uZWN0UmVxLnJlbW92ZUFsbExpc3RlbmVycygpO1xuXG4gICAgZGVidWcoJ3R1bm5lbGluZyBzb2NrZXQgY291bGQgbm90IGJlIGVzdGFibGlzaGVkLCBjYXVzZT0lc1xcbicsXG4gICAgICAgICAgY2F1c2UubWVzc2FnZSwgY2F1c2Uuc3RhY2spO1xuICAgIHZhciBlcnJvciA9IG5ldyBFcnJvcigndHVubmVsaW5nIHNvY2tldCBjb3VsZCBub3QgYmUgZXN0YWJsaXNoZWQsICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnY2F1c2U9JyArIGNhdXNlLm1lc3NhZ2UpO1xuICAgIGVycm9yLmNvZGUgPSAnRUNPTk5SRVNFVCc7XG4gICAgb3B0aW9ucy5yZXF1ZXN0LmVtaXQoJ2Vycm9yJywgZXJyb3IpO1xuICAgIHNlbGYucmVtb3ZlU29ja2V0KHBsYWNlaG9sZGVyKTtcbiAgfVxufTtcblxuVHVubmVsaW5nQWdlbnQucHJvdG90eXBlLnJlbW92ZVNvY2tldCA9IGZ1bmN0aW9uIHJlbW92ZVNvY2tldChzb2NrZXQpIHtcbiAgdmFyIHBvcyA9IHRoaXMuc29ja2V0cy5pbmRleE9mKHNvY2tldClcbiAgaWYgKHBvcyA9PT0gLTEpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdGhpcy5zb2NrZXRzLnNwbGljZShwb3MsIDEpO1xuXG4gIHZhciBwZW5kaW5nID0gdGhpcy5yZXF1ZXN0cy5zaGlmdCgpO1xuICBpZiAocGVuZGluZykge1xuICAgIC8vIElmIHdlIGhhdmUgcGVuZGluZyByZXF1ZXN0cyBhbmQgYSBzb2NrZXQgZ2V0cyBjbG9zZWQgYSBuZXcgb25lXG4gICAgLy8gbmVlZHMgdG8gYmUgY3JlYXRlZCB0byB0YWtlIG92ZXIgaW4gdGhlIHBvb2wgZm9yIHRoZSBvbmUgdGhhdCBjbG9zZWQuXG4gICAgdGhpcy5jcmVhdGVTb2NrZXQocGVuZGluZywgZnVuY3Rpb24oc29ja2V0KSB7XG4gICAgICBwZW5kaW5nLnJlcXVlc3Qub25Tb2NrZXQoc29ja2V0KTtcbiAgICB9KTtcbiAgfVxufTtcblxuZnVuY3Rpb24gY3JlYXRlU2VjdXJlU29ja2V0KG9wdGlvbnMsIGNiKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgVHVubmVsaW5nQWdlbnQucHJvdG90eXBlLmNyZWF0ZVNvY2tldC5jYWxsKHNlbGYsIG9wdGlvbnMsIGZ1bmN0aW9uKHNvY2tldCkge1xuICAgIHZhciBob3N0SGVhZGVyID0gb3B0aW9ucy5yZXF1ZXN0LmdldEhlYWRlcignaG9zdCcpO1xuICAgIHZhciB0bHNPcHRpb25zID0gbWVyZ2VPcHRpb25zKHt9LCBzZWxmLm9wdGlvbnMsIHtcbiAgICAgIHNvY2tldDogc29ja2V0LFxuICAgICAgc2VydmVybmFtZTogaG9zdEhlYWRlciA/IGhvc3RIZWFkZXIucmVwbGFjZSgvOi4qJC8sICcnKSA6IG9wdGlvbnMuaG9zdFxuICAgIH0pO1xuXG4gICAgLy8gMCBpcyBkdW1teSBwb3J0IGZvciB2MC42XG4gICAgdmFyIHNlY3VyZVNvY2tldCA9IHRscy5jb25uZWN0KDAsIHRsc09wdGlvbnMpO1xuICAgIHNlbGYuc29ja2V0c1tzZWxmLnNvY2tldHMuaW5kZXhPZihzb2NrZXQpXSA9IHNlY3VyZVNvY2tldDtcbiAgICBjYihzZWN1cmVTb2NrZXQpO1xuICB9KTtcbn1cblxuXG5mdW5jdGlvbiB0b09wdGlvbnMoaG9zdCwgcG9ydCwgbG9jYWxBZGRyZXNzKSB7XG4gIGlmICh0eXBlb2YgaG9zdCA9PT0gJ3N0cmluZycpIHsgLy8gc2luY2UgdjAuMTBcbiAgICByZXR1cm4ge1xuICAgICAgaG9zdDogaG9zdCxcbiAgICAgIHBvcnQ6IHBvcnQsXG4gICAgICBsb2NhbEFkZHJlc3M6IGxvY2FsQWRkcmVzc1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIGhvc3Q7IC8vIGZvciB2MC4xMSBvciBsYXRlclxufVxuXG5mdW5jdGlvbiBtZXJnZU9wdGlvbnModGFyZ2V0KSB7XG4gIGZvciAodmFyIGkgPSAxLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICB2YXIgb3ZlcnJpZGVzID0gYXJndW1lbnRzW2ldO1xuICAgIGlmICh0eXBlb2Ygb3ZlcnJpZGVzID09PSAnb2JqZWN0Jykge1xuICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvdmVycmlkZXMpO1xuICAgICAgZm9yICh2YXIgaiA9IDAsIGtleUxlbiA9IGtleXMubGVuZ3RoOyBqIDwga2V5TGVuOyArK2opIHtcbiAgICAgICAgdmFyIGsgPSBrZXlzW2pdO1xuICAgICAgICBpZiAob3ZlcnJpZGVzW2tdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0YXJnZXRba10gPSBvdmVycmlkZXNba107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuXG52YXIgZGVidWc7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9ERUJVRyAmJiAvXFxidHVubmVsXFxiLy50ZXN0KHByb2Nlc3MuZW52Lk5PREVfREVCVUcpKSB7XG4gIGRlYnVnID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgIGlmICh0eXBlb2YgYXJnc1swXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGFyZ3NbMF0gPSAnVFVOTkVMOiAnICsgYXJnc1swXTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXJncy51bnNoaWZ0KCdUVU5ORUw6Jyk7XG4gICAgfVxuICAgIGNvbnNvbGUuZXJyb3IuYXBwbHkoY29uc29sZSwgYXJncyk7XG4gIH1cbn0gZWxzZSB7XG4gIGRlYnVnID0gZnVuY3Rpb24oKSB7fTtcbn1cbmV4cG9ydHMuZGVidWcgPSBkZWJ1ZzsgLy8gZm9yIHRlc3RcbiIsCiAgICAibW9kdWxlLmV4cG9ydHMgPSB7XG4gIGtDbG9zZTogU3ltYm9sKCdjbG9zZScpLFxuICBrRGVzdHJveTogU3ltYm9sKCdkZXN0cm95JyksXG4gIGtEaXNwYXRjaDogU3ltYm9sKCdkaXNwYXRjaCcpLFxuICBrVXJsOiBTeW1ib2woJ3VybCcpLFxuICBrV3JpdGluZzogU3ltYm9sKCd3cml0aW5nJyksXG4gIGtSZXN1bWluZzogU3ltYm9sKCdyZXN1bWluZycpLFxuICBrUXVldWU6IFN5bWJvbCgncXVldWUnKSxcbiAga0Nvbm5lY3Q6IFN5bWJvbCgnY29ubmVjdCcpLFxuICBrQ29ubmVjdGluZzogU3ltYm9sKCdjb25uZWN0aW5nJyksXG4gIGtIZWFkZXJzTGlzdDogU3ltYm9sKCdoZWFkZXJzIGxpc3QnKSxcbiAga0tlZXBBbGl2ZURlZmF1bHRUaW1lb3V0OiBTeW1ib2woJ2RlZmF1bHQga2VlcCBhbGl2ZSB0aW1lb3V0JyksXG4gIGtLZWVwQWxpdmVNYXhUaW1lb3V0OiBTeW1ib2woJ21heCBrZWVwIGFsaXZlIHRpbWVvdXQnKSxcbiAga0tlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGQ6IFN5bWJvbCgna2VlcCBhbGl2ZSB0aW1lb3V0IHRocmVzaG9sZCcpLFxuICBrS2VlcEFsaXZlVGltZW91dFZhbHVlOiBTeW1ib2woJ2tlZXAgYWxpdmUgdGltZW91dCcpLFxuICBrS2VlcEFsaXZlOiBTeW1ib2woJ2tlZXAgYWxpdmUnKSxcbiAga0hlYWRlcnNUaW1lb3V0OiBTeW1ib2woJ2hlYWRlcnMgdGltZW91dCcpLFxuICBrQm9keVRpbWVvdXQ6IFN5bWJvbCgnYm9keSB0aW1lb3V0JyksXG4gIGtTZXJ2ZXJOYW1lOiBTeW1ib2woJ3NlcnZlciBuYW1lJyksXG4gIGtMb2NhbEFkZHJlc3M6IFN5bWJvbCgnbG9jYWwgYWRkcmVzcycpLFxuICBrSG9zdDogU3ltYm9sKCdob3N0JyksXG4gIGtOb1JlZjogU3ltYm9sKCdubyByZWYnKSxcbiAga0JvZHlVc2VkOiBTeW1ib2woJ3VzZWQnKSxcbiAga1J1bm5pbmc6IFN5bWJvbCgncnVubmluZycpLFxuICBrQmxvY2tpbmc6IFN5bWJvbCgnYmxvY2tpbmcnKSxcbiAga1BlbmRpbmc6IFN5bWJvbCgncGVuZGluZycpLFxuICBrU2l6ZTogU3ltYm9sKCdzaXplJyksXG4gIGtCdXN5OiBTeW1ib2woJ2J1c3knKSxcbiAga1F1ZXVlZDogU3ltYm9sKCdxdWV1ZWQnKSxcbiAga0ZyZWU6IFN5bWJvbCgnZnJlZScpLFxuICBrQ29ubmVjdGVkOiBTeW1ib2woJ2Nvbm5lY3RlZCcpLFxuICBrQ2xvc2VkOiBTeW1ib2woJ2Nsb3NlZCcpLFxuICBrTmVlZERyYWluOiBTeW1ib2woJ25lZWQgZHJhaW4nKSxcbiAga1Jlc2V0OiBTeW1ib2woJ3Jlc2V0JyksXG4gIGtEZXN0cm95ZWQ6IFN5bWJvbC5mb3IoJ25vZGVqcy5zdHJlYW0uZGVzdHJveWVkJyksXG4gIGtNYXhIZWFkZXJzU2l6ZTogU3ltYm9sKCdtYXggaGVhZGVycyBzaXplJyksXG4gIGtSdW5uaW5nSWR4OiBTeW1ib2woJ3J1bm5pbmcgaW5kZXgnKSxcbiAga1BlbmRpbmdJZHg6IFN5bWJvbCgncGVuZGluZyBpbmRleCcpLFxuICBrRXJyb3I6IFN5bWJvbCgnZXJyb3InKSxcbiAga0NsaWVudHM6IFN5bWJvbCgnY2xpZW50cycpLFxuICBrQ2xpZW50OiBTeW1ib2woJ2NsaWVudCcpLFxuICBrUGFyc2VyOiBTeW1ib2woJ3BhcnNlcicpLFxuICBrT25EZXN0cm95ZWQ6IFN5bWJvbCgnZGVzdHJveSBjYWxsYmFja3MnKSxcbiAga1BpcGVsaW5pbmc6IFN5bWJvbCgncGlwZWxpbmluZycpLFxuICBrU29ja2V0OiBTeW1ib2woJ3NvY2tldCcpLFxuICBrSG9zdEhlYWRlcjogU3ltYm9sKCdob3N0IGhlYWRlcicpLFxuICBrQ29ubmVjdG9yOiBTeW1ib2woJ2Nvbm5lY3RvcicpLFxuICBrU3RyaWN0Q29udGVudExlbmd0aDogU3ltYm9sKCdzdHJpY3QgY29udGVudCBsZW5ndGgnKSxcbiAga01heFJlZGlyZWN0aW9uczogU3ltYm9sKCdtYXhSZWRpcmVjdGlvbnMnKSxcbiAga01heFJlcXVlc3RzOiBTeW1ib2woJ21heFJlcXVlc3RzUGVyQ2xpZW50JyksXG4gIGtQcm94eTogU3ltYm9sKCdwcm94eSBhZ2VudCBvcHRpb25zJyksXG4gIGtDb3VudGVyOiBTeW1ib2woJ3NvY2tldCByZXF1ZXN0IGNvdW50ZXInKSxcbiAga0ludGVyY2VwdG9yczogU3ltYm9sKCdkaXNwYXRjaCBpbnRlcmNlcHRvcnMnKSxcbiAga01heFJlc3BvbnNlU2l6ZTogU3ltYm9sKCdtYXggcmVzcG9uc2Ugc2l6ZScpLFxuICBrSFRUUDJTZXNzaW9uOiBTeW1ib2woJ2h0dHAyU2Vzc2lvbicpLFxuICBrSFRUUDJTZXNzaW9uU3RhdGU6IFN5bWJvbCgnaHR0cDJTZXNzaW9uIHN0YXRlJyksXG4gIGtIVFRQMkJ1aWxkUmVxdWVzdDogU3ltYm9sKCdodHRwMiBidWlsZCByZXF1ZXN0JyksXG4gIGtIVFRQMUJ1aWxkUmVxdWVzdDogU3ltYm9sKCdodHRwMSBidWlsZCByZXF1ZXN0JyksXG4gIGtIVFRQMkNvcHlIZWFkZXJzOiBTeW1ib2woJ2h0dHAyIGNvcHkgaGVhZGVycycpLFxuICBrSFRUUENvbm5WZXJzaW9uOiBTeW1ib2woJ2h0dHAgY29ubmVjdGlvbiB2ZXJzaW9uJyksXG4gIGtSZXRyeUhhbmRsZXJEZWZhdWx0UmV0cnk6IFN5bWJvbCgncmV0cnkgYWdlbnQgZGVmYXVsdCByZXRyeScpLFxuICBrQ29uc3RydWN0OiBTeW1ib2woJ2NvbnN0cnVjdGFibGUnKVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY2xhc3MgVW5kaWNpRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICB0aGlzLm5hbWUgPSAnVW5kaWNpRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlInXG4gIH1cbn1cblxuY2xhc3MgQ29ubmVjdFRpbWVvdXRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIENvbm5lY3RUaW1lb3V0RXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0Nvbm5lY3RUaW1lb3V0RXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnQ29ubmVjdCBUaW1lb3V0IEVycm9yJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0NPTk5FQ1RfVElNRU9VVCdcbiAgfVxufVxuXG5jbGFzcyBIZWFkZXJzVGltZW91dEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgSGVhZGVyc1RpbWVvdXRFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnSGVhZGVyc1RpbWVvdXRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdIZWFkZXJzIFRpbWVvdXQgRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfSEVBREVSU19USU1FT1VUJ1xuICB9XG59XG5cbmNsYXNzIEhlYWRlcnNPdmVyZmxvd0Vycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgSGVhZGVyc092ZXJmbG93RXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0hlYWRlcnNPdmVyZmxvd0Vycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ0hlYWRlcnMgT3ZlcmZsb3cgRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfSEVBREVSU19PVkVSRkxPVydcbiAgfVxufVxuXG5jbGFzcyBCb2R5VGltZW91dEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgQm9keVRpbWVvdXRFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnQm9keVRpbWVvdXRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdCb2R5IFRpbWVvdXQgRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfQk9EWV9USU1FT1VUJ1xuICB9XG59XG5cbmNsYXNzIFJlc3BvbnNlU3RhdHVzQ29kZUVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSwgc3RhdHVzQ29kZSwgaGVhZGVycywgYm9keSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ1Jlc3BvbnNlU3RhdHVzQ29kZUVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1Jlc3BvbnNlIFN0YXR1cyBDb2RlIEVycm9yJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX1JFU1BPTlNFX1NUQVRVU19DT0RFJ1xuICAgIHRoaXMuYm9keSA9IGJvZHlcbiAgICB0aGlzLnN0YXR1cyA9IHN0YXR1c0NvZGVcbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBzdGF0dXNDb2RlXG4gICAgdGhpcy5oZWFkZXJzID0gaGVhZGVyc1xuICB9XG59XG5cbmNsYXNzIEludmFsaWRBcmd1bWVudEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgSW52YWxpZEFyZ3VtZW50RXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0ludmFsaWRBcmd1bWVudEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ0ludmFsaWQgQXJndW1lbnQgRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfSU5WQUxJRF9BUkcnXG4gIH1cbn1cblxuY2xhc3MgSW52YWxpZFJldHVyblZhbHVlRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnSW52YWxpZFJldHVyblZhbHVlRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnSW52YWxpZCBSZXR1cm4gVmFsdWUgRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfSU5WQUxJRF9SRVRVUk5fVkFMVUUnXG4gIH1cbn1cblxuY2xhc3MgUmVxdWVzdEFib3J0ZWRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFJlcXVlc3RBYm9ydGVkRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0Fib3J0RXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnUmVxdWVzdCBhYm9ydGVkJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0FCT1JURUQnXG4gIH1cbn1cblxuY2xhc3MgSW5mb3JtYXRpb25hbEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgSW5mb3JtYXRpb25hbEVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdJbmZvcm1hdGlvbmFsRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnUmVxdWVzdCBpbmZvcm1hdGlvbidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9JTkZPJ1xuICB9XG59XG5cbmNsYXNzIFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1JlcXVlc3QgYm9keSBsZW5ndGggZG9lcyBub3QgbWF0Y2ggY29udGVudC1sZW5ndGggaGVhZGVyJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX1JFUV9DT05URU5UX0xFTkdUSF9NSVNNQVRDSCdcbiAgfVxufVxuXG5jbGFzcyBSZXNwb25zZUNvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgUmVzcG9uc2VDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnUmVzcG9uc2VDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdSZXNwb25zZSBib2R5IGxlbmd0aCBkb2VzIG5vdCBtYXRjaCBjb250ZW50LWxlbmd0aCBoZWFkZXInXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfUkVTX0NPTlRFTlRfTEVOR1RIX01JU01BVENIJ1xuICB9XG59XG5cbmNsYXNzIENsaWVudERlc3Ryb3llZEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgQ2xpZW50RGVzdHJveWVkRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0NsaWVudERlc3Ryb3llZEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1RoZSBjbGllbnQgaXMgZGVzdHJveWVkJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0RFU1RST1lFRCdcbiAgfVxufVxuXG5jbGFzcyBDbGllbnRDbG9zZWRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIENsaWVudENsb3NlZEVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdDbGllbnRDbG9zZWRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdUaGUgY2xpZW50IGlzIGNsb3NlZCdcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9DTE9TRUQnXG4gIH1cbn1cblxuY2xhc3MgU29ja2V0RXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlLCBzb2NrZXQpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFNvY2tldEVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdTb2NrZXRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdTb2NrZXQgZXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfU09DS0VUJ1xuICAgIHRoaXMuc29ja2V0ID0gc29ja2V0XG4gIH1cbn1cblxuY2xhc3MgTm90U3VwcG9ydGVkRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBOb3RTdXBwb3J0ZWRFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnTm90U3VwcG9ydGVkRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnTm90IHN1cHBvcnRlZCBlcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9OT1RfU1VQUE9SVEVEJ1xuICB9XG59XG5cbmNsYXNzIEJhbGFuY2VkUG9vbE1pc3NpbmdVcHN0cmVhbUVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgTm90U3VwcG9ydGVkRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ01pc3NpbmdVcHN0cmVhbUVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ05vIHVwc3RyZWFtIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBCYWxhbmNlZFBvb2wnXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfQlBMX01JU1NJTkdfVVBTVFJFQU0nXG4gIH1cbn1cblxuY2xhc3MgSFRUUFBhcnNlckVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSwgY29kZSwgZGF0YSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgSFRUUFBhcnNlckVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdIVFRQUGFyc2VyRXJyb3InXG4gICAgdGhpcy5jb2RlID0gY29kZSA/IGBIUEVfJHtjb2RlfWAgOiB1bmRlZmluZWRcbiAgICB0aGlzLmRhdGEgPSBkYXRhID8gZGF0YS50b1N0cmluZygpIDogdW5kZWZpbmVkXG4gIH1cbn1cblxuY2xhc3MgUmVzcG9uc2VFeGNlZWRlZE1heFNpemVFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFJlc3BvbnNlRXhjZWVkZWRNYXhTaXplRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ1Jlc3BvbnNlRXhjZWVkZWRNYXhTaXplRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnUmVzcG9uc2UgY29udGVudCBleGNlZWRlZCBtYXggc2l6ZSdcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9SRVNfRVhDRUVERURfTUFYX1NJWkUnXG4gIH1cbn1cblxuY2xhc3MgUmVxdWVzdFJldHJ5RXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlLCBjb2RlLCB7IGhlYWRlcnMsIGRhdGEgfSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgUmVxdWVzdFJldHJ5RXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ1JlcXVlc3RSZXRyeUVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1JlcXVlc3QgcmV0cnkgZXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfUkVRX1JFVFJZJ1xuICAgIHRoaXMuc3RhdHVzQ29kZSA9IGNvZGVcbiAgICB0aGlzLmRhdGEgPSBkYXRhXG4gICAgdGhpcy5oZWFkZXJzID0gaGVhZGVyc1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBIVFRQUGFyc2VyRXJyb3IsXG4gIFVuZGljaUVycm9yLFxuICBIZWFkZXJzVGltZW91dEVycm9yLFxuICBIZWFkZXJzT3ZlcmZsb3dFcnJvcixcbiAgQm9keVRpbWVvdXRFcnJvcixcbiAgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yLFxuICBDb25uZWN0VGltZW91dEVycm9yLFxuICBSZXNwb25zZVN0YXR1c0NvZGVFcnJvcixcbiAgSW52YWxpZEFyZ3VtZW50RXJyb3IsXG4gIEludmFsaWRSZXR1cm5WYWx1ZUVycm9yLFxuICBSZXF1ZXN0QWJvcnRlZEVycm9yLFxuICBDbGllbnREZXN0cm95ZWRFcnJvcixcbiAgQ2xpZW50Q2xvc2VkRXJyb3IsXG4gIEluZm9ybWF0aW9uYWxFcnJvcixcbiAgU29ja2V0RXJyb3IsXG4gIE5vdFN1cHBvcnRlZEVycm9yLFxuICBSZXNwb25zZUNvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yLFxuICBCYWxhbmNlZFBvb2xNaXNzaW5nVXBzdHJlYW1FcnJvcixcbiAgUmVzcG9uc2VFeGNlZWRlZE1heFNpemVFcnJvcixcbiAgUmVxdWVzdFJldHJ5RXJyb3Jcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbi8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPn0gKi9cbmNvbnN0IGhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkID0ge31cblxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRUUC9IZWFkZXJzXG5jb25zdCB3ZWxsa25vd25IZWFkZXJOYW1lcyA9IFtcbiAgJ0FjY2VwdCcsXG4gICdBY2NlcHQtRW5jb2RpbmcnLFxuICAnQWNjZXB0LUxhbmd1YWdlJyxcbiAgJ0FjY2VwdC1SYW5nZXMnLFxuICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctQ3JlZGVudGlhbHMnLFxuICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycycsXG4gICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzJyxcbiAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbicsXG4gICdBY2Nlc3MtQ29udHJvbC1FeHBvc2UtSGVhZGVycycsXG4gICdBY2Nlc3MtQ29udHJvbC1NYXgtQWdlJyxcbiAgJ0FjY2Vzcy1Db250cm9sLVJlcXVlc3QtSGVhZGVycycsXG4gICdBY2Nlc3MtQ29udHJvbC1SZXF1ZXN0LU1ldGhvZCcsXG4gICdBZ2UnLFxuICAnQWxsb3cnLFxuICAnQWx0LVN2YycsXG4gICdBbHQtVXNlZCcsXG4gICdBdXRob3JpemF0aW9uJyxcbiAgJ0NhY2hlLUNvbnRyb2wnLFxuICAnQ2xlYXItU2l0ZS1EYXRhJyxcbiAgJ0Nvbm5lY3Rpb24nLFxuICAnQ29udGVudC1EaXNwb3NpdGlvbicsXG4gICdDb250ZW50LUVuY29kaW5nJyxcbiAgJ0NvbnRlbnQtTGFuZ3VhZ2UnLFxuICAnQ29udGVudC1MZW5ndGgnLFxuICAnQ29udGVudC1Mb2NhdGlvbicsXG4gICdDb250ZW50LVJhbmdlJyxcbiAgJ0NvbnRlbnQtU2VjdXJpdHktUG9saWN5JyxcbiAgJ0NvbnRlbnQtU2VjdXJpdHktUG9saWN5LVJlcG9ydC1Pbmx5JyxcbiAgJ0NvbnRlbnQtVHlwZScsXG4gICdDb29raWUnLFxuICAnQ3Jvc3MtT3JpZ2luLUVtYmVkZGVyLVBvbGljeScsXG4gICdDcm9zcy1PcmlnaW4tT3BlbmVyLVBvbGljeScsXG4gICdDcm9zcy1PcmlnaW4tUmVzb3VyY2UtUG9saWN5JyxcbiAgJ0RhdGUnLFxuICAnRGV2aWNlLU1lbW9yeScsXG4gICdEb3dubGluaycsXG4gICdFQ1QnLFxuICAnRVRhZycsXG4gICdFeHBlY3QnLFxuICAnRXhwZWN0LUNUJyxcbiAgJ0V4cGlyZXMnLFxuICAnRm9yd2FyZGVkJyxcbiAgJ0Zyb20nLFxuICAnSG9zdCcsXG4gICdJZi1NYXRjaCcsXG4gICdJZi1Nb2RpZmllZC1TaW5jZScsXG4gICdJZi1Ob25lLU1hdGNoJyxcbiAgJ0lmLVJhbmdlJyxcbiAgJ0lmLVVubW9kaWZpZWQtU2luY2UnLFxuICAnS2VlcC1BbGl2ZScsXG4gICdMYXN0LU1vZGlmaWVkJyxcbiAgJ0xpbmsnLFxuICAnTG9jYXRpb24nLFxuICAnTWF4LUZvcndhcmRzJyxcbiAgJ09yaWdpbicsXG4gICdQZXJtaXNzaW9ucy1Qb2xpY3knLFxuICAnUHJhZ21hJyxcbiAgJ1Byb3h5LUF1dGhlbnRpY2F0ZScsXG4gICdQcm94eS1BdXRob3JpemF0aW9uJyxcbiAgJ1JUVCcsXG4gICdSYW5nZScsXG4gICdSZWZlcmVyJyxcbiAgJ1JlZmVycmVyLVBvbGljeScsXG4gICdSZWZyZXNoJyxcbiAgJ1JldHJ5LUFmdGVyJyxcbiAgJ1NlYy1XZWJTb2NrZXQtQWNjZXB0JyxcbiAgJ1NlYy1XZWJTb2NrZXQtRXh0ZW5zaW9ucycsXG4gICdTZWMtV2ViU29ja2V0LUtleScsXG4gICdTZWMtV2ViU29ja2V0LVByb3RvY29sJyxcbiAgJ1NlYy1XZWJTb2NrZXQtVmVyc2lvbicsXG4gICdTZXJ2ZXInLFxuICAnU2VydmVyLVRpbWluZycsXG4gICdTZXJ2aWNlLVdvcmtlci1BbGxvd2VkJyxcbiAgJ1NlcnZpY2UtV29ya2VyLU5hdmlnYXRpb24tUHJlbG9hZCcsXG4gICdTZXQtQ29va2llJyxcbiAgJ1NvdXJjZU1hcCcsXG4gICdTdHJpY3QtVHJhbnNwb3J0LVNlY3VyaXR5JyxcbiAgJ1N1cHBvcnRzLUxvYWRpbmctTW9kZScsXG4gICdURScsXG4gICdUaW1pbmctQWxsb3ctT3JpZ2luJyxcbiAgJ1RyYWlsZXInLFxuICAnVHJhbnNmZXItRW5jb2RpbmcnLFxuICAnVXBncmFkZScsXG4gICdVcGdyYWRlLUluc2VjdXJlLVJlcXVlc3RzJyxcbiAgJ1VzZXItQWdlbnQnLFxuICAnVmFyeScsXG4gICdWaWEnLFxuICAnV1dXLUF1dGhlbnRpY2F0ZScsXG4gICdYLUNvbnRlbnQtVHlwZS1PcHRpb25zJyxcbiAgJ1gtRE5TLVByZWZldGNoLUNvbnRyb2wnLFxuICAnWC1GcmFtZS1PcHRpb25zJyxcbiAgJ1gtUGVybWl0dGVkLUNyb3NzLURvbWFpbi1Qb2xpY2llcycsXG4gICdYLVBvd2VyZWQtQnknLFxuICAnWC1SZXF1ZXN0ZWQtV2l0aCcsXG4gICdYLVhTUy1Qcm90ZWN0aW9uJ1xuXVxuXG5mb3IgKGxldCBpID0gMDsgaSA8IHdlbGxrbm93bkhlYWRlck5hbWVzLmxlbmd0aDsgKytpKSB7XG4gIGNvbnN0IGtleSA9IHdlbGxrbm93bkhlYWRlck5hbWVzW2ldXG4gIGNvbnN0IGxvd2VyQ2FzZWRLZXkgPSBrZXkudG9Mb3dlckNhc2UoKVxuICBoZWFkZXJOYW1lTG93ZXJDYXNlZFJlY29yZFtrZXldID0gaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmRbbG93ZXJDYXNlZEtleV0gPVxuICAgIGxvd2VyQ2FzZWRLZXlcbn1cblxuLy8gTm90ZTogb2JqZWN0IHByb3RvdHlwZXMgc2hvdWxkIG5vdCBiZSBhYmxlIHRvIGJlIHJlZmVyZW5jZWQuIGUuZy4gYE9iamVjdCNoYXNPd25Qcm9wZXJ0eWAuXG5PYmplY3Quc2V0UHJvdG90eXBlT2YoaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmQsIG51bGwpXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICB3ZWxsa25vd25IZWFkZXJOYW1lcyxcbiAgaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmRcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7IGtEZXN0cm95ZWQsIGtCb2R5VXNlZCB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgSW5jb21pbmdNZXNzYWdlIH0gPSByZXF1aXJlKCdodHRwJylcbmNvbnN0IHN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpXG5jb25zdCBuZXQgPSByZXF1aXJlKCduZXQnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi9lcnJvcnMnKVxuY29uc3QgeyBCbG9iIH0gPSByZXF1aXJlKCdidWZmZXInKVxuY29uc3Qgbm9kZVV0aWwgPSByZXF1aXJlKCd1dGlsJylcbmNvbnN0IHsgc3RyaW5naWZ5IH0gPSByZXF1aXJlKCdxdWVyeXN0cmluZycpXG5jb25zdCB7IGhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5cbmNvbnN0IFtub2RlTWFqb3IsIG5vZGVNaW5vcl0gPSBwcm9jZXNzLnZlcnNpb25zLm5vZGUuc3BsaXQoJy4nKS5tYXAodiA9PiBOdW1iZXIodikpXG5cbmZ1bmN0aW9uIG5vcCAoKSB7fVxuXG5mdW5jdGlvbiBpc1N0cmVhbSAob2JqKSB7XG4gIHJldHVybiBvYmogJiYgdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG9iai5waXBlID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBvYmoub24gPT09ICdmdW5jdGlvbidcbn1cblxuLy8gYmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL25vZGUtZmV0Y2gvZmV0Y2gtYmxvYi9ibG9iLzhhYjU4N2QzNDA4MGRlOTQxNDBiNTRmMDcxNjg0NTFlN2QwYjY1NWUvaW5kZXguanMjTDIyOS1MMjQxIChNSVQgTGljZW5zZSlcbmZ1bmN0aW9uIGlzQmxvYkxpa2UgKG9iamVjdCkge1xuICByZXR1cm4gKEJsb2IgJiYgb2JqZWN0IGluc3RhbmNlb2YgQmxvYikgfHwgKFxuICAgIG9iamVjdCAmJlxuICAgIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmXG4gICAgKHR5cGVvZiBvYmplY3Quc3RyZWFtID09PSAnZnVuY3Rpb24nIHx8XG4gICAgICB0eXBlb2Ygb2JqZWN0LmFycmF5QnVmZmVyID09PSAnZnVuY3Rpb24nKSAmJlxuICAgIC9eKEJsb2J8RmlsZSkkLy50ZXN0KG9iamVjdFtTeW1ib2wudG9TdHJpbmdUYWddKVxuICApXG59XG5cbmZ1bmN0aW9uIGJ1aWxkVVJMICh1cmwsIHF1ZXJ5UGFyYW1zKSB7XG4gIGlmICh1cmwuaW5jbHVkZXMoJz8nKSB8fCB1cmwuaW5jbHVkZXMoJyMnKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignUXVlcnkgcGFyYW1zIGNhbm5vdCBiZSBwYXNzZWQgd2hlbiB1cmwgYWxyZWFkeSBjb250YWlucyBcIj9cIiBvciBcIiNcIi4nKVxuICB9XG5cbiAgY29uc3Qgc3RyaW5naWZpZWQgPSBzdHJpbmdpZnkocXVlcnlQYXJhbXMpXG5cbiAgaWYgKHN0cmluZ2lmaWVkKSB7XG4gICAgdXJsICs9ICc/JyArIHN0cmluZ2lmaWVkXG4gIH1cblxuICByZXR1cm4gdXJsXG59XG5cbmZ1bmN0aW9uIHBhcnNlVVJMICh1cmwpIHtcbiAgaWYgKHR5cGVvZiB1cmwgPT09ICdzdHJpbmcnKSB7XG4gICAgdXJsID0gbmV3IFVSTCh1cmwpXG5cbiAgICBpZiAoIS9eaHR0cHM/Oi8udGVzdCh1cmwub3JpZ2luIHx8IHVybC5wcm90b2NvbCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkwgcHJvdG9jb2w6IHRoZSBVUkwgbXVzdCBzdGFydCB3aXRoIGBodHRwOmAgb3IgYGh0dHBzOmAuJylcbiAgICB9XG5cbiAgICByZXR1cm4gdXJsXG4gIH1cblxuICBpZiAoIXVybCB8fCB0eXBlb2YgdXJsICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkw6IFRoZSBVUkwgYXJndW1lbnQgbXVzdCBiZSBhIG5vbi1udWxsIG9iamVjdC4nKVxuICB9XG5cbiAgaWYgKCEvXmh0dHBzPzovLnRlc3QodXJsLm9yaWdpbiB8fCB1cmwucHJvdG9jb2wpKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIFVSTCBwcm90b2NvbDogdGhlIFVSTCBtdXN0IHN0YXJ0IHdpdGggYGh0dHA6YCBvciBgaHR0cHM6YC4nKVxuICB9XG5cbiAgaWYgKCEodXJsIGluc3RhbmNlb2YgVVJMKSkge1xuICAgIGlmICh1cmwucG9ydCAhPSBudWxsICYmIHVybC5wb3J0ICE9PSAnJyAmJiAhTnVtYmVyLmlzRmluaXRlKHBhcnNlSW50KHVybC5wb3J0KSkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkw6IHBvcnQgbXVzdCBiZSBhIHZhbGlkIGludGVnZXIgb3IgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gaW50ZWdlci4nKVxuICAgIH1cblxuICAgIGlmICh1cmwucGF0aCAhPSBudWxsICYmIHR5cGVvZiB1cmwucGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkwgcGF0aDogdGhlIHBhdGggbXVzdCBiZSBhIHN0cmluZyBvciBudWxsL3VuZGVmaW5lZC4nKVxuICAgIH1cblxuICAgIGlmICh1cmwucGF0aG5hbWUgIT0gbnVsbCAmJiB0eXBlb2YgdXJsLnBhdGhuYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIFVSTCBwYXRobmFtZTogdGhlIHBhdGhuYW1lIG11c3QgYmUgYSBzdHJpbmcgb3IgbnVsbC91bmRlZmluZWQuJylcbiAgICB9XG5cbiAgICBpZiAodXJsLmhvc3RuYW1lICE9IG51bGwgJiYgdHlwZW9mIHVybC5ob3N0bmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkwgaG9zdG5hbWU6IHRoZSBob3N0bmFtZSBtdXN0IGJlIGEgc3RyaW5nIG9yIG51bGwvdW5kZWZpbmVkLicpXG4gICAgfVxuXG4gICAgaWYgKHVybC5vcmlnaW4gIT0gbnVsbCAmJiB0eXBlb2YgdXJsLm9yaWdpbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkwgb3JpZ2luOiB0aGUgb3JpZ2luIG11c3QgYmUgYSBzdHJpbmcgb3IgbnVsbC91bmRlZmluZWQuJylcbiAgICB9XG5cbiAgICBjb25zdCBwb3J0ID0gdXJsLnBvcnQgIT0gbnVsbFxuICAgICAgPyB1cmwucG9ydFxuICAgICAgOiAodXJsLnByb3RvY29sID09PSAnaHR0cHM6JyA/IDQ0MyA6IDgwKVxuICAgIGxldCBvcmlnaW4gPSB1cmwub3JpZ2luICE9IG51bGxcbiAgICAgID8gdXJsLm9yaWdpblxuICAgICAgOiBgJHt1cmwucHJvdG9jb2x9Ly8ke3VybC5ob3N0bmFtZX06JHtwb3J0fWBcbiAgICBsZXQgcGF0aCA9IHVybC5wYXRoICE9IG51bGxcbiAgICAgID8gdXJsLnBhdGhcbiAgICAgIDogYCR7dXJsLnBhdGhuYW1lIHx8ICcnfSR7dXJsLnNlYXJjaCB8fCAnJ31gXG5cbiAgICBpZiAob3JpZ2luLmVuZHNXaXRoKCcvJykpIHtcbiAgICAgIG9yaWdpbiA9IG9yaWdpbi5zdWJzdHJpbmcoMCwgb3JpZ2luLmxlbmd0aCAtIDEpXG4gICAgfVxuXG4gICAgaWYgKHBhdGggJiYgIXBhdGguc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICBwYXRoID0gYC8ke3BhdGh9YFxuICAgIH1cbiAgICAvLyBuZXcgVVJMKHBhdGgsIG9yaWdpbikgaXMgdW5zYWZlIHdoZW4gYHBhdGhgIGNvbnRhaW5zIGFuIGFic29sdXRlIFVSTFxuICAgIC8vIEZyb20gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1VSTC9VUkw6XG4gICAgLy8gSWYgZmlyc3QgcGFyYW1ldGVyIGlzIGEgcmVsYXRpdmUgVVJMLCBzZWNvbmQgcGFyYW0gaXMgcmVxdWlyZWQsIGFuZCB3aWxsIGJlIHVzZWQgYXMgdGhlIGJhc2UgVVJMLlxuICAgIC8vIElmIGZpcnN0IHBhcmFtZXRlciBpcyBhbiBhYnNvbHV0ZSBVUkwsIGEgZ2l2ZW4gc2Vjb25kIHBhcmFtIHdpbGwgYmUgaWdub3JlZC5cbiAgICB1cmwgPSBuZXcgVVJMKG9yaWdpbiArIHBhdGgpXG4gIH1cblxuICByZXR1cm4gdXJsXG59XG5cbmZ1bmN0aW9uIHBhcnNlT3JpZ2luICh1cmwpIHtcbiAgdXJsID0gcGFyc2VVUkwodXJsKVxuXG4gIGlmICh1cmwucGF0aG5hbWUgIT09ICcvJyB8fCB1cmwuc2VhcmNoIHx8IHVybC5oYXNoKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIHVybCcpXG4gIH1cblxuICByZXR1cm4gdXJsXG59XG5cbmZ1bmN0aW9uIGdldEhvc3RuYW1lIChob3N0KSB7XG4gIGlmIChob3N0WzBdID09PSAnWycpIHtcbiAgICBjb25zdCBpZHggPSBob3N0LmluZGV4T2YoJ10nKVxuXG4gICAgYXNzZXJ0KGlkeCAhPT0gLTEpXG4gICAgcmV0dXJuIGhvc3Quc3Vic3RyaW5nKDEsIGlkeClcbiAgfVxuXG4gIGNvbnN0IGlkeCA9IGhvc3QuaW5kZXhPZignOicpXG4gIGlmIChpZHggPT09IC0xKSByZXR1cm4gaG9zdFxuXG4gIHJldHVybiBob3N0LnN1YnN0cmluZygwLCBpZHgpXG59XG5cbi8vIElQIGFkZHJlc3NlcyBhcmUgbm90IHZhbGlkIHNlcnZlciBuYW1lcyBwZXIgUkZDNjA2NlxuLy8gPiBDdXJyZW50bHksIHRoZSBvbmx5IHNlcnZlciBuYW1lcyBzdXBwb3J0ZWQgYXJlIEROUyBob3N0bmFtZXNcbmZ1bmN0aW9uIGdldFNlcnZlck5hbWUgKGhvc3QpIHtcbiAgaWYgKCFob3N0KSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgaG9zdCwgJ3N0cmluZycpXG5cbiAgY29uc3Qgc2VydmVybmFtZSA9IGdldEhvc3RuYW1lKGhvc3QpXG4gIGlmIChuZXQuaXNJUChzZXJ2ZXJuYW1lKSkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgcmV0dXJuIHNlcnZlcm5hbWVcbn1cblxuZnVuY3Rpb24gZGVlcENsb25lIChvYmopIHtcbiAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob2JqKSlcbn1cblxuZnVuY3Rpb24gaXNBc3luY0l0ZXJhYmxlIChvYmopIHtcbiAgcmV0dXJuICEhKG9iaiAhPSBudWxsICYmIHR5cGVvZiBvYmpbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID09PSAnZnVuY3Rpb24nKVxufVxuXG5mdW5jdGlvbiBpc0l0ZXJhYmxlIChvYmopIHtcbiAgcmV0dXJuICEhKG9iaiAhPSBudWxsICYmICh0eXBlb2Ygb2JqW1N5bWJvbC5pdGVyYXRvcl0gPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIG9ialtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPT09ICdmdW5jdGlvbicpKVxufVxuXG5mdW5jdGlvbiBib2R5TGVuZ3RoIChib2R5KSB7XG4gIGlmIChib2R5ID09IG51bGwpIHtcbiAgICByZXR1cm4gMFxuICB9IGVsc2UgaWYgKGlzU3RyZWFtKGJvZHkpKSB7XG4gICAgY29uc3Qgc3RhdGUgPSBib2R5Ll9yZWFkYWJsZVN0YXRlXG4gICAgcmV0dXJuIHN0YXRlICYmIHN0YXRlLm9iamVjdE1vZGUgPT09IGZhbHNlICYmIHN0YXRlLmVuZGVkID09PSB0cnVlICYmIE51bWJlci5pc0Zpbml0ZShzdGF0ZS5sZW5ndGgpXG4gICAgICA/IHN0YXRlLmxlbmd0aFxuICAgICAgOiBudWxsXG4gIH0gZWxzZSBpZiAoaXNCbG9iTGlrZShib2R5KSkge1xuICAgIHJldHVybiBib2R5LnNpemUgIT0gbnVsbCA/IGJvZHkuc2l6ZSA6IG51bGxcbiAgfSBlbHNlIGlmIChpc0J1ZmZlcihib2R5KSkge1xuICAgIHJldHVybiBib2R5LmJ5dGVMZW5ndGhcbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG5cbmZ1bmN0aW9uIGlzRGVzdHJveWVkIChzdHJlYW0pIHtcbiAgcmV0dXJuICFzdHJlYW0gfHwgISEoc3RyZWFtLmRlc3Ryb3llZCB8fCBzdHJlYW1ba0Rlc3Ryb3llZF0pXG59XG5cbmZ1bmN0aW9uIGlzUmVhZGFibGVBYm9ydGVkIChzdHJlYW0pIHtcbiAgY29uc3Qgc3RhdGUgPSBzdHJlYW0gJiYgc3RyZWFtLl9yZWFkYWJsZVN0YXRlXG4gIHJldHVybiBpc0Rlc3Ryb3llZChzdHJlYW0pICYmIHN0YXRlICYmICFzdGF0ZS5lbmRFbWl0dGVkXG59XG5cbmZ1bmN0aW9uIGRlc3Ryb3kgKHN0cmVhbSwgZXJyKSB7XG4gIGlmIChzdHJlYW0gPT0gbnVsbCB8fCAhaXNTdHJlYW0oc3RyZWFtKSB8fCBpc0Rlc3Ryb3llZChzdHJlYW0pKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAodHlwZW9mIHN0cmVhbS5kZXN0cm95ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKE9iamVjdC5nZXRQcm90b3R5cGVPZihzdHJlYW0pLmNvbnN0cnVjdG9yID09PSBJbmNvbWluZ01lc3NhZ2UpIHtcbiAgICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvMzg1MDUvZmlsZXNcbiAgICAgIHN0cmVhbS5zb2NrZXQgPSBudWxsXG4gICAgfVxuXG4gICAgc3RyZWFtLmRlc3Ryb3koZXJyKVxuICB9IGVsc2UgaWYgKGVycikge1xuICAgIHByb2Nlc3MubmV4dFRpY2soKHN0cmVhbSwgZXJyKSA9PiB7XG4gICAgICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcnIpXG4gICAgfSwgc3RyZWFtLCBlcnIpXG4gIH1cblxuICBpZiAoc3RyZWFtLmRlc3Ryb3llZCAhPT0gdHJ1ZSkge1xuICAgIHN0cmVhbVtrRGVzdHJveWVkXSA9IHRydWVcbiAgfVxufVxuXG5jb25zdCBLRUVQQUxJVkVfVElNRU9VVF9FWFBSID0gL3RpbWVvdXQ9KFxcZCspL1xuZnVuY3Rpb24gcGFyc2VLZWVwQWxpdmVUaW1lb3V0ICh2YWwpIHtcbiAgY29uc3QgbSA9IHZhbC50b1N0cmluZygpLm1hdGNoKEtFRVBBTElWRV9USU1FT1VUX0VYUFIpXG4gIHJldHVybiBtID8gcGFyc2VJbnQobVsxXSwgMTApICogMTAwMCA6IG51bGxcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgYSBoZWFkZXIgbmFtZSBhbmQgcmV0dXJucyBpdHMgbG93ZXJjYXNlIHZhbHVlLlxuICogQHBhcmFtIHtzdHJpbmcgfCBCdWZmZXJ9IHZhbHVlIEhlYWRlciBuYW1lXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBoZWFkZXJOYW1lVG9TdHJpbmcgKHZhbHVlKSB7XG4gIHJldHVybiBoZWFkZXJOYW1lTG93ZXJDYXNlZFJlY29yZFt2YWx1ZV0gfHwgdmFsdWUudG9Mb3dlckNhc2UoKVxufVxuXG5mdW5jdGlvbiBwYXJzZUhlYWRlcnMgKGhlYWRlcnMsIG9iaiA9IHt9KSB7XG4gIC8vIEZvciBIMiBzdXBwb3J0XG4gIGlmICghQXJyYXkuaXNBcnJheShoZWFkZXJzKSkgcmV0dXJuIGhlYWRlcnNcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICBjb25zdCBrZXkgPSBoZWFkZXJzW2ldLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKVxuICAgIGxldCB2YWwgPSBvYmpba2V5XVxuXG4gICAgaWYgKCF2YWwpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnNbaSArIDFdKSkge1xuICAgICAgICBvYmpba2V5XSA9IGhlYWRlcnNbaSArIDFdLm1hcCh4ID0+IHgudG9TdHJpbmcoJ3V0ZjgnKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9ialtrZXldID0gaGVhZGVyc1tpICsgMV0udG9TdHJpbmcoJ3V0ZjgnKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgICB2YWwgPSBbdmFsXVxuICAgICAgICBvYmpba2V5XSA9IHZhbFxuICAgICAgfVxuICAgICAgdmFsLnB1c2goaGVhZGVyc1tpICsgMV0udG9TdHJpbmcoJ3V0ZjgnKSlcbiAgICB9XG4gIH1cblxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvNDY1MjhcbiAgaWYgKCdjb250ZW50LWxlbmd0aCcgaW4gb2JqICYmICdjb250ZW50LWRpc3Bvc2l0aW9uJyBpbiBvYmopIHtcbiAgICBvYmpbJ2NvbnRlbnQtZGlzcG9zaXRpb24nXSA9IEJ1ZmZlci5mcm9tKG9ialsnY29udGVudC1kaXNwb3NpdGlvbiddKS50b1N0cmluZygnbGF0aW4xJylcbiAgfVxuXG4gIHJldHVybiBvYmpcbn1cblxuZnVuY3Rpb24gcGFyc2VSYXdIZWFkZXJzIChoZWFkZXJzKSB7XG4gIGNvbnN0IHJldCA9IFtdXG4gIGxldCBoYXNDb250ZW50TGVuZ3RoID0gZmFsc2VcbiAgbGV0IGNvbnRlbnREaXNwb3NpdGlvbklkeCA9IC0xXG5cbiAgZm9yIChsZXQgbiA9IDA7IG4gPCBoZWFkZXJzLmxlbmd0aDsgbiArPSAyKSB7XG4gICAgY29uc3Qga2V5ID0gaGVhZGVyc1tuICsgMF0udG9TdHJpbmcoKVxuICAgIGNvbnN0IHZhbCA9IGhlYWRlcnNbbiArIDFdLnRvU3RyaW5nKCd1dGY4JylcblxuICAgIGlmIChrZXkubGVuZ3RoID09PSAxNCAmJiAoa2V5ID09PSAnY29udGVudC1sZW5ndGgnIHx8IGtleS50b0xvd2VyQ2FzZSgpID09PSAnY29udGVudC1sZW5ndGgnKSkge1xuICAgICAgcmV0LnB1c2goa2V5LCB2YWwpXG4gICAgICBoYXNDb250ZW50TGVuZ3RoID0gdHJ1ZVxuICAgIH0gZWxzZSBpZiAoa2V5Lmxlbmd0aCA9PT0gMTkgJiYgKGtleSA9PT0gJ2NvbnRlbnQtZGlzcG9zaXRpb24nIHx8IGtleS50b0xvd2VyQ2FzZSgpID09PSAnY29udGVudC1kaXNwb3NpdGlvbicpKSB7XG4gICAgICBjb250ZW50RGlzcG9zaXRpb25JZHggPSByZXQucHVzaChrZXksIHZhbCkgLSAxXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldC5wdXNoKGtleSwgdmFsKVxuICAgIH1cbiAgfVxuXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvcHVsbC80NjUyOFxuICBpZiAoaGFzQ29udGVudExlbmd0aCAmJiBjb250ZW50RGlzcG9zaXRpb25JZHggIT09IC0xKSB7XG4gICAgcmV0W2NvbnRlbnREaXNwb3NpdGlvbklkeF0gPSBCdWZmZXIuZnJvbShyZXRbY29udGVudERpc3Bvc2l0aW9uSWR4XSkudG9TdHJpbmcoJ2xhdGluMScpXG4gIH1cblxuICByZXR1cm4gcmV0XG59XG5cbmZ1bmN0aW9uIGlzQnVmZmVyIChidWZmZXIpIHtcbiAgLy8gU2VlLCBodHRwczovL2dpdGh1Yi5jb20vbWNvbGxpbmEvdW5kaWNpL3B1bGwvMzE5XG4gIHJldHVybiBidWZmZXIgaW5zdGFuY2VvZiBVaW50OEFycmF5IHx8IEJ1ZmZlci5pc0J1ZmZlcihidWZmZXIpXG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlSGFuZGxlciAoaGFuZGxlciwgbWV0aG9kLCB1cGdyYWRlKSB7XG4gIGlmICghaGFuZGxlciB8fCB0eXBlb2YgaGFuZGxlciAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2hhbmRsZXIgbXVzdCBiZSBhbiBvYmplY3QnKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBoYW5kbGVyLm9uQ29ubmVjdCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkNvbm5lY3QgbWV0aG9kJylcbiAgfVxuXG4gIGlmICh0eXBlb2YgaGFuZGxlci5vbkVycm9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uRXJyb3IgbWV0aG9kJylcbiAgfVxuXG4gIGlmICh0eXBlb2YgaGFuZGxlci5vbkJvZHlTZW50ICE9PSAnZnVuY3Rpb24nICYmIGhhbmRsZXIub25Cb2R5U2VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uQm9keVNlbnQgbWV0aG9kJylcbiAgfVxuXG4gIGlmICh1cGdyYWRlIHx8IG1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSB7XG4gICAgaWYgKHR5cGVvZiBoYW5kbGVyLm9uVXBncmFkZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uVXBncmFkZSBtZXRob2QnKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAodHlwZW9mIGhhbmRsZXIub25IZWFkZXJzICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25IZWFkZXJzIG1ldGhvZCcpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBoYW5kbGVyLm9uRGF0YSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uRGF0YSBtZXRob2QnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaGFuZGxlci5vbkNvbXBsZXRlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25Db21wbGV0ZSBtZXRob2QnKVxuICAgIH1cbiAgfVxufVxuXG4vLyBBIGJvZHkgaXMgZGlzdHVyYmVkIGlmIGl0IGhhcyBiZWVuIHJlYWQgZnJvbSBhbmQgaXQgY2Fubm90XG4vLyBiZSByZS11c2VkIHdpdGhvdXQgbG9zaW5nIHN0YXRlIG9yIGRhdGEuXG5mdW5jdGlvbiBpc0Rpc3R1cmJlZCAoYm9keSkge1xuICByZXR1cm4gISEoYm9keSAmJiAoXG4gICAgc3RyZWFtLmlzRGlzdHVyYmVkXG4gICAgICA/IHN0cmVhbS5pc0Rpc3R1cmJlZChib2R5KSB8fCBib2R5W2tCb2R5VXNlZF0gLy8gVE9ETyAoZml4KTogV2h5IGlzIGJvZHlba0JvZHlVc2VkXSBuZWVkZWQ/XG4gICAgICA6IGJvZHlba0JvZHlVc2VkXSB8fFxuICAgICAgICBib2R5LnJlYWRhYmxlRGlkUmVhZCB8fFxuICAgICAgICAoYm9keS5fcmVhZGFibGVTdGF0ZSAmJiBib2R5Ll9yZWFkYWJsZVN0YXRlLmRhdGFFbWl0dGVkKSB8fFxuICAgICAgICBpc1JlYWRhYmxlQWJvcnRlZChib2R5KVxuICApKVxufVxuXG5mdW5jdGlvbiBpc0Vycm9yZWQgKGJvZHkpIHtcbiAgcmV0dXJuICEhKGJvZHkgJiYgKFxuICAgIHN0cmVhbS5pc0Vycm9yZWRcbiAgICAgID8gc3RyZWFtLmlzRXJyb3JlZChib2R5KVxuICAgICAgOiAvc3RhdGU6ICdlcnJvcmVkJy8udGVzdChub2RlVXRpbC5pbnNwZWN0KGJvZHkpXG4gICAgICApKSlcbn1cblxuZnVuY3Rpb24gaXNSZWFkYWJsZSAoYm9keSkge1xuICByZXR1cm4gISEoYm9keSAmJiAoXG4gICAgc3RyZWFtLmlzUmVhZGFibGVcbiAgICAgID8gc3RyZWFtLmlzUmVhZGFibGUoYm9keSlcbiAgICAgIDogL3N0YXRlOiAncmVhZGFibGUnLy50ZXN0KG5vZGVVdGlsLmluc3BlY3QoYm9keSlcbiAgICAgICkpKVxufVxuXG5mdW5jdGlvbiBnZXRTb2NrZXRJbmZvIChzb2NrZXQpIHtcbiAgcmV0dXJuIHtcbiAgICBsb2NhbEFkZHJlc3M6IHNvY2tldC5sb2NhbEFkZHJlc3MsXG4gICAgbG9jYWxQb3J0OiBzb2NrZXQubG9jYWxQb3J0LFxuICAgIHJlbW90ZUFkZHJlc3M6IHNvY2tldC5yZW1vdGVBZGRyZXNzLFxuICAgIHJlbW90ZVBvcnQ6IHNvY2tldC5yZW1vdGVQb3J0LFxuICAgIHJlbW90ZUZhbWlseTogc29ja2V0LnJlbW90ZUZhbWlseSxcbiAgICB0aW1lb3V0OiBzb2NrZXQudGltZW91dCxcbiAgICBieXRlc1dyaXR0ZW46IHNvY2tldC5ieXRlc1dyaXR0ZW4sXG4gICAgYnl0ZXNSZWFkOiBzb2NrZXQuYnl0ZXNSZWFkXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gKiBjb252ZXJ0SXRlcmFibGVUb0J1ZmZlciAoaXRlcmFibGUpIHtcbiAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBpdGVyYWJsZSkge1xuICAgIHlpZWxkIEJ1ZmZlci5pc0J1ZmZlcihjaHVuaykgPyBjaHVuayA6IEJ1ZmZlci5mcm9tKGNodW5rKVxuICB9XG59XG5cbmxldCBSZWFkYWJsZVN0cmVhbVxuZnVuY3Rpb24gUmVhZGFibGVTdHJlYW1Gcm9tIChpdGVyYWJsZSkge1xuICBpZiAoIVJlYWRhYmxlU3RyZWFtKSB7XG4gICAgUmVhZGFibGVTdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0vd2ViJykuUmVhZGFibGVTdHJlYW1cbiAgfVxuXG4gIGlmIChSZWFkYWJsZVN0cmVhbS5mcm9tKSB7XG4gICAgcmV0dXJuIFJlYWRhYmxlU3RyZWFtLmZyb20oY29udmVydEl0ZXJhYmxlVG9CdWZmZXIoaXRlcmFibGUpKVxuICB9XG5cbiAgbGV0IGl0ZXJhdG9yXG4gIHJldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oXG4gICAge1xuICAgICAgYXN5bmMgc3RhcnQgKCkge1xuICAgICAgICBpdGVyYXRvciA9IGl0ZXJhYmxlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpXG4gICAgICB9LFxuICAgICAgYXN5bmMgcHVsbCAoY29udHJvbGxlcikge1xuICAgICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCBpdGVyYXRvci5uZXh0KClcbiAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgICAgICBjb250cm9sbGVyLmNsb3NlKClcbiAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5pc0J1ZmZlcih2YWx1ZSkgPyB2YWx1ZSA6IEJ1ZmZlci5mcm9tKHZhbHVlKVxuICAgICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShuZXcgVWludDhBcnJheShidWYpKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb250cm9sbGVyLmRlc2lyZWRTaXplID4gMFxuICAgICAgfSxcbiAgICAgIGFzeW5jIGNhbmNlbCAocmVhc29uKSB7XG4gICAgICAgIGF3YWl0IGl0ZXJhdG9yLnJldHVybigpXG4gICAgICB9XG4gICAgfSxcbiAgICAwXG4gIClcbn1cblxuLy8gVGhlIGNodW5rIHNob3VsZCBiZSBhIEZvcm1EYXRhIGluc3RhbmNlIGFuZCBjb250YWluc1xuLy8gYWxsIHRoZSByZXF1aXJlZCBtZXRob2RzLlxuZnVuY3Rpb24gaXNGb3JtRGF0YUxpa2UgKG9iamVjdCkge1xuICByZXR1cm4gKFxuICAgIG9iamVjdCAmJlxuICAgIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmXG4gICAgdHlwZW9mIG9iamVjdC5hcHBlbmQgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2Ygb2JqZWN0LmRlbGV0ZSA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBvYmplY3QuZ2V0ID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIG9iamVjdC5nZXRBbGwgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2Ygb2JqZWN0LmhhcyA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBvYmplY3Quc2V0ID09PSAnZnVuY3Rpb24nICYmXG4gICAgb2JqZWN0W1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdGb3JtRGF0YSdcbiAgKVxufVxuXG5mdW5jdGlvbiB0aHJvd0lmQWJvcnRlZCAoc2lnbmFsKSB7XG4gIGlmICghc2lnbmFsKSB7IHJldHVybiB9XG4gIGlmICh0eXBlb2Ygc2lnbmFsLnRocm93SWZBYm9ydGVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgc2lnbmFsLnRocm93SWZBYm9ydGVkKClcbiAgfSBlbHNlIHtcbiAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgIC8vIERPTUV4Y2VwdGlvbiBub3QgYXZhaWxhYmxlIDwgdjE3LjAuMFxuICAgICAgY29uc3QgZXJyID0gbmV3IEVycm9yKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkJylcbiAgICAgIGVyci5uYW1lID0gJ0Fib3J0RXJyb3InXG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYWRkQWJvcnRMaXN0ZW5lciAoc2lnbmFsLCBsaXN0ZW5lcikge1xuICBpZiAoJ2FkZEV2ZW50TGlzdGVuZXInIGluIHNpZ25hbCkge1xuICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIGxpc3RlbmVyLCB7IG9uY2U6IHRydWUgfSlcbiAgICByZXR1cm4gKCkgPT4gc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgbGlzdGVuZXIpXG4gIH1cbiAgc2lnbmFsLmFkZExpc3RlbmVyKCdhYm9ydCcsIGxpc3RlbmVyKVxuICByZXR1cm4gKCkgPT4gc2lnbmFsLnJlbW92ZUxpc3RlbmVyKCdhYm9ydCcsIGxpc3RlbmVyKVxufVxuXG5jb25zdCBoYXNUb1dlbGxGb3JtZWQgPSAhIVN0cmluZy5wcm90b3R5cGUudG9XZWxsRm9ybWVkXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbFxuICovXG5mdW5jdGlvbiB0b1VTVlN0cmluZyAodmFsKSB7XG4gIGlmIChoYXNUb1dlbGxGb3JtZWQpIHtcbiAgICByZXR1cm4gYCR7dmFsfWAudG9XZWxsRm9ybWVkKClcbiAgfSBlbHNlIGlmIChub2RlVXRpbC50b1VTVlN0cmluZykge1xuICAgIHJldHVybiBub2RlVXRpbC50b1VTVlN0cmluZyh2YWwpXG4gIH1cblxuICByZXR1cm4gYCR7dmFsfWBcbn1cblxuLy8gUGFyc2VkIGFjY29yZGluZ2x5IHRvIFJGQyA5MTEwXG4vLyBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjOTExMCNmaWVsZC5jb250ZW50LXJhbmdlXG5mdW5jdGlvbiBwYXJzZVJhbmdlSGVhZGVyIChyYW5nZSkge1xuICBpZiAocmFuZ2UgPT0gbnVsbCB8fCByYW5nZSA9PT0gJycpIHJldHVybiB7IHN0YXJ0OiAwLCBlbmQ6IG51bGwsIHNpemU6IG51bGwgfVxuXG4gIGNvbnN0IG0gPSByYW5nZSA/IHJhbmdlLm1hdGNoKC9eYnl0ZXMgKFxcZCspLShcXGQrKVxcLyhcXGQrKT8kLykgOiBudWxsXG4gIHJldHVybiBtXG4gICAgPyB7XG4gICAgICAgIHN0YXJ0OiBwYXJzZUludChtWzFdKSxcbiAgICAgICAgZW5kOiBtWzJdID8gcGFyc2VJbnQobVsyXSkgOiBudWxsLFxuICAgICAgICBzaXplOiBtWzNdID8gcGFyc2VJbnQobVszXSkgOiBudWxsXG4gICAgICB9XG4gICAgOiBudWxsXG59XG5cbmNvbnN0IGtFbnVtZXJhYmxlUHJvcGVydHkgPSBPYmplY3QuY3JlYXRlKG51bGwpXG5rRW51bWVyYWJsZVByb3BlcnR5LmVudW1lcmFibGUgPSB0cnVlXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBub3AsXG4gIGlzRGlzdHVyYmVkLFxuICBpc0Vycm9yZWQsXG4gIGlzUmVhZGFibGUsXG4gIHRvVVNWU3RyaW5nLFxuICBpc1JlYWRhYmxlQWJvcnRlZCxcbiAgaXNCbG9iTGlrZSxcbiAgcGFyc2VPcmlnaW4sXG4gIHBhcnNlVVJMLFxuICBnZXRTZXJ2ZXJOYW1lLFxuICBpc1N0cmVhbSxcbiAgaXNJdGVyYWJsZSxcbiAgaXNBc3luY0l0ZXJhYmxlLFxuICBpc0Rlc3Ryb3llZCxcbiAgaGVhZGVyTmFtZVRvU3RyaW5nLFxuICBwYXJzZVJhd0hlYWRlcnMsXG4gIHBhcnNlSGVhZGVycyxcbiAgcGFyc2VLZWVwQWxpdmVUaW1lb3V0LFxuICBkZXN0cm95LFxuICBib2R5TGVuZ3RoLFxuICBkZWVwQ2xvbmUsXG4gIFJlYWRhYmxlU3RyZWFtRnJvbSxcbiAgaXNCdWZmZXIsXG4gIHZhbGlkYXRlSGFuZGxlcixcbiAgZ2V0U29ja2V0SW5mbyxcbiAgaXNGb3JtRGF0YUxpa2UsXG4gIGJ1aWxkVVJMLFxuICB0aHJvd0lmQWJvcnRlZCxcbiAgYWRkQWJvcnRMaXN0ZW5lcixcbiAgcGFyc2VSYW5nZUhlYWRlcixcbiAgbm9kZU1ham9yLFxuICBub2RlTWlub3IsXG4gIG5vZGVIYXNBdXRvU2VsZWN0RmFtaWx5OiBub2RlTWFqb3IgPiAxOCB8fCAobm9kZU1ham9yID09PSAxOCAmJiBub2RlTWlub3IgPj0gMTMpLFxuICBzYWZlSFRUUE1ldGhvZHM6IFsnR0VUJywgJ0hFQUQnLCAnT1BUSU9OUycsICdUUkFDRSddXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5sZXQgZmFzdE5vdyA9IERhdGUubm93KClcbmxldCBmYXN0Tm93VGltZW91dFxuXG5jb25zdCBmYXN0VGltZXJzID0gW11cblxuZnVuY3Rpb24gb25UaW1lb3V0ICgpIHtcbiAgZmFzdE5vdyA9IERhdGUubm93KClcblxuICBsZXQgbGVuID0gZmFzdFRpbWVycy5sZW5ndGhcbiAgbGV0IGlkeCA9IDBcbiAgd2hpbGUgKGlkeCA8IGxlbikge1xuICAgIGNvbnN0IHRpbWVyID0gZmFzdFRpbWVyc1tpZHhdXG5cbiAgICBpZiAodGltZXIuc3RhdGUgPT09IDApIHtcbiAgICAgIHRpbWVyLnN0YXRlID0gZmFzdE5vdyArIHRpbWVyLmRlbGF5XG4gICAgfSBlbHNlIGlmICh0aW1lci5zdGF0ZSA+IDAgJiYgZmFzdE5vdyA+PSB0aW1lci5zdGF0ZSkge1xuICAgICAgdGltZXIuc3RhdGUgPSAtMVxuICAgICAgdGltZXIuY2FsbGJhY2sodGltZXIub3BhcXVlKVxuICAgIH1cblxuICAgIGlmICh0aW1lci5zdGF0ZSA9PT0gLTEpIHtcbiAgICAgIHRpbWVyLnN0YXRlID0gLTJcbiAgICAgIGlmIChpZHggIT09IGxlbiAtIDEpIHtcbiAgICAgICAgZmFzdFRpbWVyc1tpZHhdID0gZmFzdFRpbWVycy5wb3AoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmFzdFRpbWVycy5wb3AoKVxuICAgICAgfVxuICAgICAgbGVuIC09IDFcbiAgICB9IGVsc2Uge1xuICAgICAgaWR4ICs9IDFcbiAgICB9XG4gIH1cblxuICBpZiAoZmFzdFRpbWVycy5sZW5ndGggPiAwKSB7XG4gICAgcmVmcmVzaFRpbWVvdXQoKVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlZnJlc2hUaW1lb3V0ICgpIHtcbiAgaWYgKGZhc3ROb3dUaW1lb3V0ICYmIGZhc3ROb3dUaW1lb3V0LnJlZnJlc2gpIHtcbiAgICBmYXN0Tm93VGltZW91dC5yZWZyZXNoKClcbiAgfSBlbHNlIHtcbiAgICBjbGVhclRpbWVvdXQoZmFzdE5vd1RpbWVvdXQpXG4gICAgZmFzdE5vd1RpbWVvdXQgPSBzZXRUaW1lb3V0KG9uVGltZW91dCwgMWUzKVxuICAgIGlmIChmYXN0Tm93VGltZW91dC51bnJlZikge1xuICAgICAgZmFzdE5vd1RpbWVvdXQudW5yZWYoKVxuICAgIH1cbiAgfVxufVxuXG5jbGFzcyBUaW1lb3V0IHtcbiAgY29uc3RydWN0b3IgKGNhbGxiYWNrLCBkZWxheSwgb3BhcXVlKSB7XG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrXG4gICAgdGhpcy5kZWxheSA9IGRlbGF5XG4gICAgdGhpcy5vcGFxdWUgPSBvcGFxdWVcblxuICAgIC8vICAtMiBub3QgaW4gdGltZXIgbGlzdFxuICAgIC8vICAtMSBpbiB0aW1lciBsaXN0IGJ1dCBpbmFjdGl2ZVxuICAgIC8vICAgMCBpbiB0aW1lciBsaXN0IHdhaXRpbmcgZm9yIHRpbWVcbiAgICAvLyA+IDAgaW4gdGltZXIgbGlzdCB3YWl0aW5nIGZvciB0aW1lIHRvIGV4cGlyZVxuICAgIHRoaXMuc3RhdGUgPSAtMlxuXG4gICAgdGhpcy5yZWZyZXNoKClcbiAgfVxuXG4gIHJlZnJlc2ggKCkge1xuICAgIGlmICh0aGlzLnN0YXRlID09PSAtMikge1xuICAgICAgZmFzdFRpbWVycy5wdXNoKHRoaXMpXG4gICAgICBpZiAoIWZhc3ROb3dUaW1lb3V0IHx8IGZhc3RUaW1lcnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJlZnJlc2hUaW1lb3V0KClcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnN0YXRlID0gMFxuICB9XG5cbiAgY2xlYXIgKCkge1xuICAgIHRoaXMuc3RhdGUgPSAtMVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXRUaW1lb3V0IChjYWxsYmFjaywgZGVsYXksIG9wYXF1ZSkge1xuICAgIHJldHVybiBkZWxheSA8IDFlM1xuICAgICAgPyBzZXRUaW1lb3V0KGNhbGxiYWNrLCBkZWxheSwgb3BhcXVlKVxuICAgICAgOiBuZXcgVGltZW91dChjYWxsYmFjaywgZGVsYXksIG9wYXF1ZSlcbiAgfSxcbiAgY2xlYXJUaW1lb3V0ICh0aW1lb3V0KSB7XG4gICAgaWYgKHRpbWVvdXQgaW5zdGFuY2VvZiBUaW1lb3V0KSB7XG4gICAgICB0aW1lb3V0LmNsZWFyKClcbiAgICB9IGVsc2Uge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpXG4gICAgfVxuICB9XG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG4vKipcbiAqIENvcHlyaWdodCBCcmlhbiBXaGl0ZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tc2NkZXgvc3RyZWFtc2VhcmNoXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG9cbiAqIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlXG4gKiByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3JcbiAqIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkdcbiAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1NcbiAqIElOIFRIRSBTT0ZUV0FSRS5cbiAqXG4gKiBCYXNlZCBoZWF2aWx5IG9uIHRoZSBTdHJlYW1pbmcgQm95ZXItTW9vcmUtSG9yc3Bvb2wgQysrIGltcGxlbWVudGF0aW9uXG4gKiBieSBIb25nbGkgTGFpIGF0OiBodHRwczovL2dpdGh1Yi5jb20vRm9vQmFyV2lkZ2V0L2JveWVyLW1vb3JlLWhvcnNwb29sXG4gKi9cbmNvbnN0IEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ25vZGU6ZXZlbnRzJykuRXZlbnRFbWl0dGVyXG5jb25zdCBpbmhlcml0cyA9IHJlcXVpcmUoJ25vZGU6dXRpbCcpLmluaGVyaXRzXG5cbmZ1bmN0aW9uIFNCTUggKG5lZWRsZSkge1xuICBpZiAodHlwZW9mIG5lZWRsZSA9PT0gJ3N0cmluZycpIHtcbiAgICBuZWVkbGUgPSBCdWZmZXIuZnJvbShuZWVkbGUpXG4gIH1cblxuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihuZWVkbGUpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIG5lZWRsZSBoYXMgdG8gYmUgYSBTdHJpbmcgb3IgYSBCdWZmZXIuJylcbiAgfVxuXG4gIGNvbnN0IG5lZWRsZUxlbmd0aCA9IG5lZWRsZS5sZW5ndGhcblxuICBpZiAobmVlZGxlTGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgbmVlZGxlIGNhbm5vdCBiZSBhbiBlbXB0eSBTdHJpbmcvQnVmZmVyLicpXG4gIH1cblxuICBpZiAobmVlZGxlTGVuZ3RoID4gMjU2KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgbmVlZGxlIGNhbm5vdCBoYXZlIGEgbGVuZ3RoIGJpZ2dlciB0aGFuIDI1Ni4nKVxuICB9XG5cbiAgdGhpcy5tYXhNYXRjaGVzID0gSW5maW5pdHlcbiAgdGhpcy5tYXRjaGVzID0gMFxuXG4gIHRoaXMuX29jYyA9IG5ldyBBcnJheSgyNTYpXG4gICAgLmZpbGwobmVlZGxlTGVuZ3RoKSAvLyBJbml0aWFsaXplIG9jY3VycmVuY2UgdGFibGUuXG4gIHRoaXMuX2xvb2tiZWhpbmRfc2l6ZSA9IDBcbiAgdGhpcy5fbmVlZGxlID0gbmVlZGxlXG4gIHRoaXMuX2J1ZnBvcyA9IDBcblxuICB0aGlzLl9sb29rYmVoaW5kID0gQnVmZmVyLmFsbG9jKG5lZWRsZUxlbmd0aClcblxuICAvLyBQb3B1bGF0ZSBvY2N1cnJlbmNlIHRhYmxlIHdpdGggYW5hbHlzaXMgb2YgdGhlIG5lZWRsZSxcbiAgLy8gaWdub3JpbmcgbGFzdCBsZXR0ZXIuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbmVlZGxlTGVuZ3RoIC0gMTsgKytpKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdmFyXG4gICAgdGhpcy5fb2NjW25lZWRsZVtpXV0gPSBuZWVkbGVMZW5ndGggLSAxIC0gaVxuICB9XG59XG5pbmhlcml0cyhTQk1ILCBFdmVudEVtaXR0ZXIpXG5cblNCTUgucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLl9sb29rYmVoaW5kX3NpemUgPSAwXG4gIHRoaXMubWF0Y2hlcyA9IDBcbiAgdGhpcy5fYnVmcG9zID0gMFxufVxuXG5TQk1ILnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGNodW5rLCBwb3MpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoY2h1bmspKSB7XG4gICAgY2h1bmsgPSBCdWZmZXIuZnJvbShjaHVuaywgJ2JpbmFyeScpXG4gIH1cbiAgY29uc3QgY2hsZW4gPSBjaHVuay5sZW5ndGhcbiAgdGhpcy5fYnVmcG9zID0gcG9zIHx8IDBcbiAgbGV0IHJcbiAgd2hpbGUgKHIgIT09IGNobGVuICYmIHRoaXMubWF0Y2hlcyA8IHRoaXMubWF4TWF0Y2hlcykgeyByID0gdGhpcy5fc2JtaF9mZWVkKGNodW5rKSB9XG4gIHJldHVybiByXG59XG5cblNCTUgucHJvdG90eXBlLl9zYm1oX2ZlZWQgPSBmdW5jdGlvbiAoZGF0YSkge1xuICBjb25zdCBsZW4gPSBkYXRhLmxlbmd0aFxuICBjb25zdCBuZWVkbGUgPSB0aGlzLl9uZWVkbGVcbiAgY29uc3QgbmVlZGxlTGVuZ3RoID0gbmVlZGxlLmxlbmd0aFxuICBjb25zdCBsYXN0TmVlZGxlQ2hhciA9IG5lZWRsZVtuZWVkbGVMZW5ndGggLSAxXVxuXG4gIC8vIFBvc2l0aXZlOiBwb2ludHMgdG8gYSBwb3NpdGlvbiBpbiBgZGF0YWBcbiAgLy8gICAgICAgICAgIHBvcyA9PSAzIHBvaW50cyB0byBkYXRhWzNdXG4gIC8vIE5lZ2F0aXZlOiBwb2ludHMgdG8gYSBwb3NpdGlvbiBpbiB0aGUgbG9va2JlaGluZCBidWZmZXJcbiAgLy8gICAgICAgICAgIHBvcyA9PSAtMiBwb2ludHMgdG8gbG9va2JlaGluZFtsb29rYmVoaW5kX3NpemUgLSAyXVxuICBsZXQgcG9zID0gLXRoaXMuX2xvb2tiZWhpbmRfc2l6ZVxuICBsZXQgY2hcblxuICBpZiAocG9zIDwgMCkge1xuICAgIC8vIExvb2tiZWhpbmQgYnVmZmVyIGlzIG5vdCBlbXB0eS4gUGVyZm9ybSBCb3llci1Nb29yZS1Ib3JzcG9vbFxuICAgIC8vIHNlYXJjaCB3aXRoIGNoYXJhY3RlciBsb29rdXAgY29kZSB0aGF0IGNvbnNpZGVycyBib3RoIHRoZVxuICAgIC8vIGxvb2tiZWhpbmQgYnVmZmVyIGFuZCB0aGUgY3VycmVudCByb3VuZCdzIGhheXN0YWNrIGRhdGEuXG4gICAgLy9cbiAgICAvLyBMb29wIHVudGlsXG4gICAgLy8gICB0aGVyZSBpcyBhIG1hdGNoLlxuICAgIC8vIG9yIHVudGlsXG4gICAgLy8gICB3ZSd2ZSBtb3ZlZCBwYXN0IHRoZSBwb3NpdGlvbiB0aGF0IHJlcXVpcmVzIHRoZVxuICAgIC8vICAgbG9va2JlaGluZCBidWZmZXIuIEluIHRoaXMgY2FzZSB3ZSBzd2l0Y2ggdG8gdGhlXG4gICAgLy8gICBvcHRpbWl6ZWQgbG9vcC5cbiAgICAvLyBvciB1bnRpbFxuICAgIC8vICAgdGhlIGNoYXJhY3RlciB0byBsb29rIGF0IGxpZXMgb3V0c2lkZSB0aGUgaGF5c3RhY2suXG4gICAgd2hpbGUgKHBvcyA8IDAgJiYgcG9zIDw9IGxlbiAtIG5lZWRsZUxlbmd0aCkge1xuICAgICAgY2ggPSB0aGlzLl9zYm1oX2xvb2t1cF9jaGFyKGRhdGEsIHBvcyArIG5lZWRsZUxlbmd0aCAtIDEpXG5cbiAgICAgIGlmIChcbiAgICAgICAgY2ggPT09IGxhc3ROZWVkbGVDaGFyICYmXG4gICAgICAgIHRoaXMuX3NibWhfbWVtY21wKGRhdGEsIHBvcywgbmVlZGxlTGVuZ3RoIC0gMSlcbiAgICAgICkge1xuICAgICAgICB0aGlzLl9sb29rYmVoaW5kX3NpemUgPSAwXG4gICAgICAgICsrdGhpcy5tYXRjaGVzXG4gICAgICAgIHRoaXMuZW1pdCgnaW5mbycsIHRydWUpXG5cbiAgICAgICAgcmV0dXJuICh0aGlzLl9idWZwb3MgPSBwb3MgKyBuZWVkbGVMZW5ndGgpXG4gICAgICB9XG4gICAgICBwb3MgKz0gdGhpcy5fb2NjW2NoXVxuICAgIH1cblxuICAgIC8vIE5vIG1hdGNoLlxuXG4gICAgaWYgKHBvcyA8IDApIHtcbiAgICAgIC8vIFRoZXJlJ3MgdG9vIGZldyBkYXRhIGZvciBCb3llci1Nb29yZS1Ib3JzcG9vbCB0byBydW4sXG4gICAgICAvLyBzbyBsZXQncyB1c2UgYSBkaWZmZXJlbnQgYWxnb3JpdGhtIHRvIHNraXAgYXMgbXVjaCBhc1xuICAgICAgLy8gd2UgY2FuLlxuICAgICAgLy8gRm9yd2FyZCBwb3MgdW50aWxcbiAgICAgIC8vICAgdGhlIHRyYWlsaW5nIHBhcnQgb2YgbG9va2JlaGluZCArIGRhdGFcbiAgICAgIC8vICAgbG9va3MgbGlrZSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZWVkbGVcbiAgICAgIC8vIG9yIHVudGlsXG4gICAgICAvLyAgIHBvcyA9PSAwXG4gICAgICB3aGlsZSAocG9zIDwgMCAmJiAhdGhpcy5fc2JtaF9tZW1jbXAoZGF0YSwgcG9zLCBsZW4gLSBwb3MpKSB7ICsrcG9zIH1cbiAgICB9XG5cbiAgICBpZiAocG9zID49IDApIHtcbiAgICAgIC8vIERpc2NhcmQgbG9va2JlaGluZCBidWZmZXIuXG4gICAgICB0aGlzLmVtaXQoJ2luZm8nLCBmYWxzZSwgdGhpcy5fbG9va2JlaGluZCwgMCwgdGhpcy5fbG9va2JlaGluZF9zaXplKVxuICAgICAgdGhpcy5fbG9va2JlaGluZF9zaXplID0gMFxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDdXQgb2ZmIHBhcnQgb2YgdGhlIGxvb2tiZWhpbmQgYnVmZmVyIHRoYXQgaGFzXG4gICAgICAvLyBiZWVuIHByb2Nlc3NlZCBhbmQgYXBwZW5kIHRoZSBlbnRpcmUgaGF5c3RhY2tcbiAgICAgIC8vIGludG8gaXQuXG4gICAgICBjb25zdCBieXRlc1RvQ3V0T2ZmID0gdGhpcy5fbG9va2JlaGluZF9zaXplICsgcG9zXG4gICAgICBpZiAoYnl0ZXNUb0N1dE9mZiA+IDApIHtcbiAgICAgICAgLy8gVGhlIGN1dCBvZmYgZGF0YSBpcyBndWFyYW50ZWVkIG5vdCB0byBjb250YWluIHRoZSBuZWVkbGUuXG4gICAgICAgIHRoaXMuZW1pdCgnaW5mbycsIGZhbHNlLCB0aGlzLl9sb29rYmVoaW5kLCAwLCBieXRlc1RvQ3V0T2ZmKVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9sb29rYmVoaW5kLmNvcHkodGhpcy5fbG9va2JlaGluZCwgMCwgYnl0ZXNUb0N1dE9mZixcbiAgICAgICAgdGhpcy5fbG9va2JlaGluZF9zaXplIC0gYnl0ZXNUb0N1dE9mZilcbiAgICAgIHRoaXMuX2xvb2tiZWhpbmRfc2l6ZSAtPSBieXRlc1RvQ3V0T2ZmXG5cbiAgICAgIGRhdGEuY29weSh0aGlzLl9sb29rYmVoaW5kLCB0aGlzLl9sb29rYmVoaW5kX3NpemUpXG4gICAgICB0aGlzLl9sb29rYmVoaW5kX3NpemUgKz0gbGVuXG5cbiAgICAgIHRoaXMuX2J1ZnBvcyA9IGxlblxuICAgICAgcmV0dXJuIGxlblxuICAgIH1cbiAgfVxuXG4gIHBvcyArPSAocG9zID49IDApICogdGhpcy5fYnVmcG9zXG5cbiAgLy8gTG9va2JlaGluZCBidWZmZXIgaXMgbm93IGVtcHR5LiBXZSBvbmx5IG5lZWQgdG8gY2hlY2sgaWYgdGhlXG4gIC8vIG5lZWRsZSBpcyBpbiB0aGUgaGF5c3RhY2suXG4gIGlmIChkYXRhLmluZGV4T2YobmVlZGxlLCBwb3MpICE9PSAtMSkge1xuICAgIHBvcyA9IGRhdGEuaW5kZXhPZihuZWVkbGUsIHBvcylcbiAgICArK3RoaXMubWF0Y2hlc1xuICAgIGlmIChwb3MgPiAwKSB7IHRoaXMuZW1pdCgnaW5mbycsIHRydWUsIGRhdGEsIHRoaXMuX2J1ZnBvcywgcG9zKSB9IGVsc2UgeyB0aGlzLmVtaXQoJ2luZm8nLCB0cnVlKSB9XG5cbiAgICByZXR1cm4gKHRoaXMuX2J1ZnBvcyA9IHBvcyArIG5lZWRsZUxlbmd0aClcbiAgfSBlbHNlIHtcbiAgICBwb3MgPSBsZW4gLSBuZWVkbGVMZW5ndGhcbiAgfVxuXG4gIC8vIFRoZXJlIHdhcyBubyBtYXRjaC4gSWYgdGhlcmUncyB0cmFpbGluZyBoYXlzdGFjayBkYXRhIHRoYXQgd2UgY2Fubm90XG4gIC8vIG1hdGNoIHlldCB1c2luZyB0aGUgQm95ZXItTW9vcmUtSG9yc3Bvb2wgYWxnb3JpdGhtIChiZWNhdXNlIHRoZSB0cmFpbGluZ1xuICAvLyBkYXRhIGlzIGxlc3MgdGhhbiB0aGUgbmVlZGxlIHNpemUpIHRoZW4gbWF0Y2ggdXNpbmcgYSBtb2RpZmllZFxuICAvLyBhbGdvcml0aG0gdGhhdCBzdGFydHMgbWF0Y2hpbmcgZnJvbSB0aGUgYmVnaW5uaW5nIGluc3RlYWQgb2YgdGhlIGVuZC5cbiAgLy8gV2hhdGV2ZXIgdHJhaWxpbmcgZGF0YSBpcyBsZWZ0IGFmdGVyIHJ1bm5pbmcgdGhpcyBhbGdvcml0aG0gaXMgYWRkZWQgdG9cbiAgLy8gdGhlIGxvb2tiZWhpbmQgYnVmZmVyLlxuICB3aGlsZSAoXG4gICAgcG9zIDwgbGVuICYmXG4gICAgKFxuICAgICAgZGF0YVtwb3NdICE9PSBuZWVkbGVbMF0gfHxcbiAgICAgIChcbiAgICAgICAgKEJ1ZmZlci5jb21wYXJlKFxuICAgICAgICAgIGRhdGEuc3ViYXJyYXkocG9zLCBwb3MgKyBsZW4gLSBwb3MpLFxuICAgICAgICAgIG5lZWRsZS5zdWJhcnJheSgwLCBsZW4gLSBwb3MpXG4gICAgICAgICkgIT09IDApXG4gICAgICApXG4gICAgKVxuICApIHtcbiAgICArK3Bvc1xuICB9XG4gIGlmIChwb3MgPCBsZW4pIHtcbiAgICBkYXRhLmNvcHkodGhpcy5fbG9va2JlaGluZCwgMCwgcG9zLCBwb3MgKyAobGVuIC0gcG9zKSlcbiAgICB0aGlzLl9sb29rYmVoaW5kX3NpemUgPSBsZW4gLSBwb3NcbiAgfVxuXG4gIC8vIEV2ZXJ5dGhpbmcgdW50aWwgcG9zIGlzIGd1YXJhbnRlZWQgbm90IHRvIGNvbnRhaW4gbmVlZGxlIGRhdGEuXG4gIGlmIChwb3MgPiAwKSB7IHRoaXMuZW1pdCgnaW5mbycsIGZhbHNlLCBkYXRhLCB0aGlzLl9idWZwb3MsIHBvcyA8IGxlbiA/IHBvcyA6IGxlbikgfVxuXG4gIHRoaXMuX2J1ZnBvcyA9IGxlblxuICByZXR1cm4gbGVuXG59XG5cblNCTUgucHJvdG90eXBlLl9zYm1oX2xvb2t1cF9jaGFyID0gZnVuY3Rpb24gKGRhdGEsIHBvcykge1xuICByZXR1cm4gKHBvcyA8IDApXG4gICAgPyB0aGlzLl9sb29rYmVoaW5kW3RoaXMuX2xvb2tiZWhpbmRfc2l6ZSArIHBvc11cbiAgICA6IGRhdGFbcG9zXVxufVxuXG5TQk1ILnByb3RvdHlwZS5fc2JtaF9tZW1jbXAgPSBmdW5jdGlvbiAoZGF0YSwgcG9zLCBsZW4pIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXZhclxuICAgIGlmICh0aGlzLl9zYm1oX2xvb2t1cF9jaGFyKGRhdGEsIHBvcyArIGkpICE9PSB0aGlzLl9uZWVkbGVbaV0pIHsgcmV0dXJuIGZhbHNlIH1cbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNCTUhcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGluaGVyaXRzID0gcmVxdWlyZSgnbm9kZTp1dGlsJykuaW5oZXJpdHNcbmNvbnN0IFJlYWRhYmxlU3RyZWFtID0gcmVxdWlyZSgnbm9kZTpzdHJlYW0nKS5SZWFkYWJsZVxuXG5mdW5jdGlvbiBQYXJ0U3RyZWFtIChvcHRzKSB7XG4gIFJlYWRhYmxlU3RyZWFtLmNhbGwodGhpcywgb3B0cylcbn1cbmluaGVyaXRzKFBhcnRTdHJlYW0sIFJlYWRhYmxlU3RyZWFtKVxuXG5QYXJ0U3RyZWFtLnByb3RvdHlwZS5fcmVhZCA9IGZ1bmN0aW9uIChuKSB7fVxuXG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRTdHJlYW1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0TGltaXQgKGxpbWl0cywgbmFtZSwgZGVmYXVsdExpbWl0KSB7XG4gIGlmIChcbiAgICAhbGltaXRzIHx8XG4gICAgbGltaXRzW25hbWVdID09PSB1bmRlZmluZWQgfHxcbiAgICBsaW1pdHNbbmFtZV0gPT09IG51bGxcbiAgKSB7IHJldHVybiBkZWZhdWx0TGltaXQgfVxuXG4gIGlmIChcbiAgICB0eXBlb2YgbGltaXRzW25hbWVdICE9PSAnbnVtYmVyJyB8fFxuICAgIGlzTmFOKGxpbWl0c1tuYW1lXSlcbiAgKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoJ0xpbWl0ICcgKyBuYW1lICsgJyBpcyBub3QgYSB2YWxpZCBudW1iZXInKSB9XG5cbiAgcmV0dXJuIGxpbWl0c1tuYW1lXVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnbm9kZTpldmVudHMnKS5FdmVudEVtaXR0ZXJcbmNvbnN0IGluaGVyaXRzID0gcmVxdWlyZSgnbm9kZTp1dGlsJykuaW5oZXJpdHNcbmNvbnN0IGdldExpbWl0ID0gcmVxdWlyZSgnLi4vLi4vLi4vbGliL3V0aWxzL2dldExpbWl0JylcblxuY29uc3QgU3RyZWFtU2VhcmNoID0gcmVxdWlyZSgnLi4vLi4vc3RyZWFtc2VhcmNoL3NibWgnKVxuXG5jb25zdCBCX0RDUkxGID0gQnVmZmVyLmZyb20oJ1xcclxcblxcclxcbicpXG5jb25zdCBSRV9DUkxGID0gL1xcclxcbi9nXG5jb25zdCBSRV9IRFIgPSAvXihbXjpdKyk6WyBcXHRdPyhbXFx4MDAtXFx4RkZdKyk/JC8gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb250cm9sLXJlZ2V4XG5cbmZ1bmN0aW9uIEhlYWRlclBhcnNlciAoY2ZnKSB7XG4gIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpXG5cbiAgY2ZnID0gY2ZnIHx8IHt9XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIHRoaXMubnJlYWQgPSAwXG4gIHRoaXMubWF4ZWQgPSBmYWxzZVxuICB0aGlzLm5wYWlycyA9IDBcbiAgdGhpcy5tYXhIZWFkZXJQYWlycyA9IGdldExpbWl0KGNmZywgJ21heEhlYWRlclBhaXJzJywgMjAwMClcbiAgdGhpcy5tYXhIZWFkZXJTaXplID0gZ2V0TGltaXQoY2ZnLCAnbWF4SGVhZGVyU2l6ZScsIDgwICogMTAyNClcbiAgdGhpcy5idWZmZXIgPSAnJ1xuICB0aGlzLmhlYWRlciA9IHt9XG4gIHRoaXMuZmluaXNoZWQgPSBmYWxzZVxuICB0aGlzLnNzID0gbmV3IFN0cmVhbVNlYXJjaChCX0RDUkxGKVxuICB0aGlzLnNzLm9uKCdpbmZvJywgZnVuY3Rpb24gKGlzTWF0Y2gsIGRhdGEsIHN0YXJ0LCBlbmQpIHtcbiAgICBpZiAoZGF0YSAmJiAhc2VsZi5tYXhlZCkge1xuICAgICAgaWYgKHNlbGYubnJlYWQgKyBlbmQgLSBzdGFydCA+PSBzZWxmLm1heEhlYWRlclNpemUpIHtcbiAgICAgICAgZW5kID0gc2VsZi5tYXhIZWFkZXJTaXplIC0gc2VsZi5ucmVhZCArIHN0YXJ0XG4gICAgICAgIHNlbGYubnJlYWQgPSBzZWxmLm1heEhlYWRlclNpemVcbiAgICAgICAgc2VsZi5tYXhlZCA9IHRydWVcbiAgICAgIH0gZWxzZSB7IHNlbGYubnJlYWQgKz0gKGVuZCAtIHN0YXJ0KSB9XG5cbiAgICAgIHNlbGYuYnVmZmVyICs9IGRhdGEudG9TdHJpbmcoJ2JpbmFyeScsIHN0YXJ0LCBlbmQpXG4gICAgfVxuICAgIGlmIChpc01hdGNoKSB7IHNlbGYuX2ZpbmlzaCgpIH1cbiAgfSlcbn1cbmluaGVyaXRzKEhlYWRlclBhcnNlciwgRXZlbnRFbWl0dGVyKVxuXG5IZWFkZXJQYXJzZXIucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoZGF0YSkge1xuICBjb25zdCByID0gdGhpcy5zcy5wdXNoKGRhdGEpXG4gIGlmICh0aGlzLmZpbmlzaGVkKSB7IHJldHVybiByIH1cbn1cblxuSGVhZGVyUGFyc2VyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5maW5pc2hlZCA9IGZhbHNlXG4gIHRoaXMuYnVmZmVyID0gJydcbiAgdGhpcy5oZWFkZXIgPSB7fVxuICB0aGlzLnNzLnJlc2V0KClcbn1cblxuSGVhZGVyUGFyc2VyLnByb3RvdHlwZS5fZmluaXNoID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5idWZmZXIpIHsgdGhpcy5fcGFyc2VIZWFkZXIoKSB9XG4gIHRoaXMuc3MubWF0Y2hlcyA9IHRoaXMuc3MubWF4TWF0Y2hlc1xuICBjb25zdCBoZWFkZXIgPSB0aGlzLmhlYWRlclxuICB0aGlzLmhlYWRlciA9IHt9XG4gIHRoaXMuYnVmZmVyID0gJydcbiAgdGhpcy5maW5pc2hlZCA9IHRydWVcbiAgdGhpcy5ucmVhZCA9IHRoaXMubnBhaXJzID0gMFxuICB0aGlzLm1heGVkID0gZmFsc2VcbiAgdGhpcy5lbWl0KCdoZWFkZXInLCBoZWFkZXIpXG59XG5cbkhlYWRlclBhcnNlci5wcm90b3R5cGUuX3BhcnNlSGVhZGVyID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5ucGFpcnMgPT09IHRoaXMubWF4SGVhZGVyUGFpcnMpIHsgcmV0dXJuIH1cblxuICBjb25zdCBsaW5lcyA9IHRoaXMuYnVmZmVyLnNwbGl0KFJFX0NSTEYpXG4gIGNvbnN0IGxlbiA9IGxpbmVzLmxlbmd0aFxuICBsZXQgbSwgaFxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby12YXJcbiAgICBpZiAobGluZXNbaV0ubGVuZ3RoID09PSAwKSB7IGNvbnRpbnVlIH1cbiAgICBpZiAobGluZXNbaV1bMF0gPT09ICdcXHQnIHx8IGxpbmVzW2ldWzBdID09PSAnICcpIHtcbiAgICAgIC8vIGZvbGRlZCBoZWFkZXIgY29udGVudFxuICAgICAgLy8gUkZDMjgyMiBzYXlzIHRvIGp1c3QgcmVtb3ZlIHRoZSBDUkxGIGFuZCBub3QgdGhlIHdoaXRlc3BhY2UgZm9sbG93aW5nXG4gICAgICAvLyBpdCwgc28gd2UgZm9sbG93IHRoZSBSRkMgYW5kIGluY2x1ZGUgdGhlIGxlYWRpbmcgd2hpdGVzcGFjZSAuLi5cbiAgICAgIGlmIChoKSB7XG4gICAgICAgIHRoaXMuaGVhZGVyW2hdW3RoaXMuaGVhZGVyW2hdLmxlbmd0aCAtIDFdICs9IGxpbmVzW2ldXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcG9zQ29sb24gPSBsaW5lc1tpXS5pbmRleE9mKCc6JylcbiAgICBpZiAoXG4gICAgICBwb3NDb2xvbiA9PT0gLTEgfHxcbiAgICAgIHBvc0NvbG9uID09PSAwXG4gICAgKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgbSA9IFJFX0hEUi5leGVjKGxpbmVzW2ldKVxuICAgIGggPSBtWzFdLnRvTG93ZXJDYXNlKClcbiAgICB0aGlzLmhlYWRlcltoXSA9IHRoaXMuaGVhZGVyW2hdIHx8IFtdXG4gICAgdGhpcy5oZWFkZXJbaF0ucHVzaCgobVsyXSB8fCAnJykpXG4gICAgaWYgKCsrdGhpcy5ucGFpcnMgPT09IHRoaXMubWF4SGVhZGVyUGFpcnMpIHsgYnJlYWsgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gSGVhZGVyUGFyc2VyXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBXcml0YWJsZVN0cmVhbSA9IHJlcXVpcmUoJ25vZGU6c3RyZWFtJykuV3JpdGFibGVcbmNvbnN0IGluaGVyaXRzID0gcmVxdWlyZSgnbm9kZTp1dGlsJykuaW5oZXJpdHNcblxuY29uc3QgU3RyZWFtU2VhcmNoID0gcmVxdWlyZSgnLi4vLi4vc3RyZWFtc2VhcmNoL3NibWgnKVxuXG5jb25zdCBQYXJ0U3RyZWFtID0gcmVxdWlyZSgnLi9QYXJ0U3RyZWFtJylcbmNvbnN0IEhlYWRlclBhcnNlciA9IHJlcXVpcmUoJy4vSGVhZGVyUGFyc2VyJylcblxuY29uc3QgREFTSCA9IDQ1XG5jb25zdCBCX09ORURBU0ggPSBCdWZmZXIuZnJvbSgnLScpXG5jb25zdCBCX0NSTEYgPSBCdWZmZXIuZnJvbSgnXFxyXFxuJylcbmNvbnN0IEVNUFRZX0ZOID0gZnVuY3Rpb24gKCkge31cblxuZnVuY3Rpb24gRGljZXIgKGNmZykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRGljZXIpKSB7IHJldHVybiBuZXcgRGljZXIoY2ZnKSB9XG4gIFdyaXRhYmxlU3RyZWFtLmNhbGwodGhpcywgY2ZnKVxuXG4gIGlmICghY2ZnIHx8ICghY2ZnLmhlYWRlckZpcnN0ICYmIHR5cGVvZiBjZmcuYm91bmRhcnkgIT09ICdzdHJpbmcnKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCdCb3VuZGFyeSByZXF1aXJlZCcpIH1cblxuICBpZiAodHlwZW9mIGNmZy5ib3VuZGFyeSA9PT0gJ3N0cmluZycpIHsgdGhpcy5zZXRCb3VuZGFyeShjZmcuYm91bmRhcnkpIH0gZWxzZSB7IHRoaXMuX2JwYXJzZXIgPSB1bmRlZmluZWQgfVxuXG4gIHRoaXMuX2hlYWRlckZpcnN0ID0gY2ZnLmhlYWRlckZpcnN0XG5cbiAgdGhpcy5fZGFzaGVzID0gMFxuICB0aGlzLl9wYXJ0cyA9IDBcbiAgdGhpcy5fZmluaXNoZWQgPSBmYWxzZVxuICB0aGlzLl9yZWFsRmluaXNoID0gZmFsc2VcbiAgdGhpcy5faXNQcmVhbWJsZSA9IHRydWVcbiAgdGhpcy5fanVzdE1hdGNoZWQgPSBmYWxzZVxuICB0aGlzLl9maXJzdFdyaXRlID0gdHJ1ZVxuICB0aGlzLl9pbkhlYWRlciA9IHRydWVcbiAgdGhpcy5fcGFydCA9IHVuZGVmaW5lZFxuICB0aGlzLl9jYiA9IHVuZGVmaW5lZFxuICB0aGlzLl9pZ25vcmVEYXRhID0gZmFsc2VcbiAgdGhpcy5fcGFydE9wdHMgPSB7IGhpZ2hXYXRlck1hcms6IGNmZy5wYXJ0SHdtIH1cbiAgdGhpcy5fcGF1c2UgPSBmYWxzZVxuXG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIHRoaXMuX2hwYXJzZXIgPSBuZXcgSGVhZGVyUGFyc2VyKGNmZylcbiAgdGhpcy5faHBhcnNlci5vbignaGVhZGVyJywgZnVuY3Rpb24gKGhlYWRlcikge1xuICAgIHNlbGYuX2luSGVhZGVyID0gZmFsc2VcbiAgICBzZWxmLl9wYXJ0LmVtaXQoJ2hlYWRlcicsIGhlYWRlcilcbiAgfSlcbn1cbmluaGVyaXRzKERpY2VyLCBXcml0YWJsZVN0cmVhbSlcblxuRGljZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiAoZXYpIHtcbiAgaWYgKGV2ID09PSAnZmluaXNoJyAmJiAhdGhpcy5fcmVhbEZpbmlzaCkge1xuICAgIGlmICghdGhpcy5fZmluaXNoZWQpIHtcbiAgICAgIGNvbnN0IHNlbGYgPSB0aGlzXG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2VsZi5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcignVW5leHBlY3RlZCBlbmQgb2YgbXVsdGlwYXJ0IGRhdGEnKSlcbiAgICAgICAgaWYgKHNlbGYuX3BhcnQgJiYgIXNlbGYuX2lnbm9yZURhdGEpIHtcbiAgICAgICAgICBjb25zdCB0eXBlID0gKHNlbGYuX2lzUHJlYW1ibGUgPyAnUHJlYW1ibGUnIDogJ1BhcnQnKVxuICAgICAgICAgIHNlbGYuX3BhcnQuZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IodHlwZSArICcgdGVybWluYXRlZCBlYXJseSBkdWUgdG8gdW5leHBlY3RlZCBlbmQgb2YgbXVsdGlwYXJ0IGRhdGEnKSlcbiAgICAgICAgICBzZWxmLl9wYXJ0LnB1c2gobnVsbClcbiAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHNlbGYuX3JlYWxGaW5pc2ggPSB0cnVlXG4gICAgICAgICAgICBzZWxmLmVtaXQoJ2ZpbmlzaCcpXG4gICAgICAgICAgICBzZWxmLl9yZWFsRmluaXNoID0gZmFsc2VcbiAgICAgICAgICB9KVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIHNlbGYuX3JlYWxGaW5pc2ggPSB0cnVlXG4gICAgICAgIHNlbGYuZW1pdCgnZmluaXNoJylcbiAgICAgICAgc2VsZi5fcmVhbEZpbmlzaCA9IGZhbHNlXG4gICAgICB9KVxuICAgIH1cbiAgfSBlbHNlIHsgV3JpdGFibGVTdHJlYW0ucHJvdG90eXBlLmVtaXQuYXBwbHkodGhpcywgYXJndW1lbnRzKSB9XG59XG5cbkRpY2VyLnByb3RvdHlwZS5fd3JpdGUgPSBmdW5jdGlvbiAoZGF0YSwgZW5jb2RpbmcsIGNiKSB7XG4gIC8vIGlnbm9yZSB1bmV4cGVjdGVkIGRhdGEgKGUuZy4gZXh0cmEgdHJhaWxlciBkYXRhIGFmdGVyIGZpbmlzaGVkKVxuICBpZiAoIXRoaXMuX2hwYXJzZXIgJiYgIXRoaXMuX2JwYXJzZXIpIHsgcmV0dXJuIGNiKCkgfVxuXG4gIGlmICh0aGlzLl9oZWFkZXJGaXJzdCAmJiB0aGlzLl9pc1ByZWFtYmxlKSB7XG4gICAgaWYgKCF0aGlzLl9wYXJ0KSB7XG4gICAgICB0aGlzLl9wYXJ0ID0gbmV3IFBhcnRTdHJlYW0odGhpcy5fcGFydE9wdHMpXG4gICAgICBpZiAodGhpcy5saXN0ZW5lckNvdW50KCdwcmVhbWJsZScpICE9PSAwKSB7IHRoaXMuZW1pdCgncHJlYW1ibGUnLCB0aGlzLl9wYXJ0KSB9IGVsc2UgeyB0aGlzLl9pZ25vcmUoKSB9XG4gICAgfVxuICAgIGNvbnN0IHIgPSB0aGlzLl9ocGFyc2VyLnB1c2goZGF0YSlcbiAgICBpZiAoIXRoaXMuX2luSGVhZGVyICYmIHIgIT09IHVuZGVmaW5lZCAmJiByIDwgZGF0YS5sZW5ndGgpIHsgZGF0YSA9IGRhdGEuc2xpY2UocikgfSBlbHNlIHsgcmV0dXJuIGNiKCkgfVxuICB9XG5cbiAgLy8gYWxsb3dzIGZvciBcImVhc2llclwiIHRlc3RpbmdcbiAgaWYgKHRoaXMuX2ZpcnN0V3JpdGUpIHtcbiAgICB0aGlzLl9icGFyc2VyLnB1c2goQl9DUkxGKVxuICAgIHRoaXMuX2ZpcnN0V3JpdGUgPSBmYWxzZVxuICB9XG5cbiAgdGhpcy5fYnBhcnNlci5wdXNoKGRhdGEpXG5cbiAgaWYgKHRoaXMuX3BhdXNlKSB7IHRoaXMuX2NiID0gY2IgfSBlbHNlIHsgY2IoKSB9XG59XG5cbkRpY2VyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5fcGFydCA9IHVuZGVmaW5lZFxuICB0aGlzLl9icGFyc2VyID0gdW5kZWZpbmVkXG4gIHRoaXMuX2hwYXJzZXIgPSB1bmRlZmluZWRcbn1cblxuRGljZXIucHJvdG90eXBlLnNldEJvdW5kYXJ5ID0gZnVuY3Rpb24gKGJvdW5kYXJ5KSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIHRoaXMuX2JwYXJzZXIgPSBuZXcgU3RyZWFtU2VhcmNoKCdcXHJcXG4tLScgKyBib3VuZGFyeSlcbiAgdGhpcy5fYnBhcnNlci5vbignaW5mbycsIGZ1bmN0aW9uIChpc01hdGNoLCBkYXRhLCBzdGFydCwgZW5kKSB7XG4gICAgc2VsZi5fb25pbmZvKGlzTWF0Y2gsIGRhdGEsIHN0YXJ0LCBlbmQpXG4gIH0pXG59XG5cbkRpY2VyLnByb3RvdHlwZS5faWdub3JlID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5fcGFydCAmJiAhdGhpcy5faWdub3JlRGF0YSkge1xuICAgIHRoaXMuX2lnbm9yZURhdGEgPSB0cnVlXG4gICAgdGhpcy5fcGFydC5vbignZXJyb3InLCBFTVBUWV9GTilcbiAgICAvLyB3ZSBtdXN0IHBlcmZvcm0gc29tZSBraW5kIG9mIHJlYWQgb24gdGhlIHN0cmVhbSBldmVuIHRob3VnaCB3ZSBhcmVcbiAgICAvLyBpZ25vcmluZyB0aGUgZGF0YSwgb3RoZXJ3aXNlIG5vZGUncyBSZWFkYWJsZSBzdHJlYW0gd2lsbCBub3QgZW1pdCAnZW5kJ1xuICAgIC8vIGFmdGVyIHB1c2hpbmcgbnVsbCB0byB0aGUgc3RyZWFtXG4gICAgdGhpcy5fcGFydC5yZXN1bWUoKVxuICB9XG59XG5cbkRpY2VyLnByb3RvdHlwZS5fb25pbmZvID0gZnVuY3Rpb24gKGlzTWF0Y2gsIGRhdGEsIHN0YXJ0LCBlbmQpIHtcbiAgbGV0IGJ1ZjsgY29uc3Qgc2VsZiA9IHRoaXM7IGxldCBpID0gMDsgbGV0IHI7IGxldCBzaG91bGRXcml0ZU1vcmUgPSB0cnVlXG5cbiAgaWYgKCF0aGlzLl9wYXJ0ICYmIHRoaXMuX2p1c3RNYXRjaGVkICYmIGRhdGEpIHtcbiAgICB3aGlsZSAodGhpcy5fZGFzaGVzIDwgMiAmJiAoc3RhcnQgKyBpKSA8IGVuZCkge1xuICAgICAgaWYgKGRhdGFbc3RhcnQgKyBpXSA9PT0gREFTSCkge1xuICAgICAgICArK2lcbiAgICAgICAgKyt0aGlzLl9kYXNoZXNcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLl9kYXNoZXMpIHsgYnVmID0gQl9PTkVEQVNIIH1cbiAgICAgICAgdGhpcy5fZGFzaGVzID0gMFxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5fZGFzaGVzID09PSAyKSB7XG4gICAgICBpZiAoKHN0YXJ0ICsgaSkgPCBlbmQgJiYgdGhpcy5saXN0ZW5lckNvdW50KCd0cmFpbGVyJykgIT09IDApIHsgdGhpcy5lbWl0KCd0cmFpbGVyJywgZGF0YS5zbGljZShzdGFydCArIGksIGVuZCkpIH1cbiAgICAgIHRoaXMucmVzZXQoKVxuICAgICAgdGhpcy5fZmluaXNoZWQgPSB0cnVlXG4gICAgICAvLyBubyBtb3JlIHBhcnRzIHdpbGwgYmUgYWRkZWRcbiAgICAgIGlmIChzZWxmLl9wYXJ0cyA9PT0gMCkge1xuICAgICAgICBzZWxmLl9yZWFsRmluaXNoID0gdHJ1ZVxuICAgICAgICBzZWxmLmVtaXQoJ2ZpbmlzaCcpXG4gICAgICAgIHNlbGYuX3JlYWxGaW5pc2ggPSBmYWxzZVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5fZGFzaGVzKSB7IHJldHVybiB9XG4gIH1cbiAgaWYgKHRoaXMuX2p1c3RNYXRjaGVkKSB7IHRoaXMuX2p1c3RNYXRjaGVkID0gZmFsc2UgfVxuICBpZiAoIXRoaXMuX3BhcnQpIHtcbiAgICB0aGlzLl9wYXJ0ID0gbmV3IFBhcnRTdHJlYW0odGhpcy5fcGFydE9wdHMpXG4gICAgdGhpcy5fcGFydC5fcmVhZCA9IGZ1bmN0aW9uIChuKSB7XG4gICAgICBzZWxmLl91bnBhdXNlKClcbiAgICB9XG4gICAgaWYgKHRoaXMuX2lzUHJlYW1ibGUgJiYgdGhpcy5saXN0ZW5lckNvdW50KCdwcmVhbWJsZScpICE9PSAwKSB7XG4gICAgICB0aGlzLmVtaXQoJ3ByZWFtYmxlJywgdGhpcy5fcGFydClcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2lzUHJlYW1ibGUgIT09IHRydWUgJiYgdGhpcy5saXN0ZW5lckNvdW50KCdwYXJ0JykgIT09IDApIHtcbiAgICAgIHRoaXMuZW1pdCgncGFydCcsIHRoaXMuX3BhcnQpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2lnbm9yZSgpXG4gICAgfVxuICAgIGlmICghdGhpcy5faXNQcmVhbWJsZSkgeyB0aGlzLl9pbkhlYWRlciA9IHRydWUgfVxuICB9XG4gIGlmIChkYXRhICYmIHN0YXJ0IDwgZW5kICYmICF0aGlzLl9pZ25vcmVEYXRhKSB7XG4gICAgaWYgKHRoaXMuX2lzUHJlYW1ibGUgfHwgIXRoaXMuX2luSGVhZGVyKSB7XG4gICAgICBpZiAoYnVmKSB7IHNob3VsZFdyaXRlTW9yZSA9IHRoaXMuX3BhcnQucHVzaChidWYpIH1cbiAgICAgIHNob3VsZFdyaXRlTW9yZSA9IHRoaXMuX3BhcnQucHVzaChkYXRhLnNsaWNlKHN0YXJ0LCBlbmQpKVxuICAgICAgaWYgKCFzaG91bGRXcml0ZU1vcmUpIHsgdGhpcy5fcGF1c2UgPSB0cnVlIH1cbiAgICB9IGVsc2UgaWYgKCF0aGlzLl9pc1ByZWFtYmxlICYmIHRoaXMuX2luSGVhZGVyKSB7XG4gICAgICBpZiAoYnVmKSB7IHRoaXMuX2hwYXJzZXIucHVzaChidWYpIH1cbiAgICAgIHIgPSB0aGlzLl9ocGFyc2VyLnB1c2goZGF0YS5zbGljZShzdGFydCwgZW5kKSlcbiAgICAgIGlmICghdGhpcy5faW5IZWFkZXIgJiYgciAhPT0gdW5kZWZpbmVkICYmIHIgPCBlbmQpIHsgdGhpcy5fb25pbmZvKGZhbHNlLCBkYXRhLCBzdGFydCArIHIsIGVuZCkgfVxuICAgIH1cbiAgfVxuICBpZiAoaXNNYXRjaCkge1xuICAgIHRoaXMuX2hwYXJzZXIucmVzZXQoKVxuICAgIGlmICh0aGlzLl9pc1ByZWFtYmxlKSB7IHRoaXMuX2lzUHJlYW1ibGUgPSBmYWxzZSB9IGVsc2Uge1xuICAgICAgaWYgKHN0YXJ0ICE9PSBlbmQpIHtcbiAgICAgICAgKyt0aGlzLl9wYXJ0c1xuICAgICAgICB0aGlzLl9wYXJ0Lm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKC0tc2VsZi5fcGFydHMgPT09IDApIHtcbiAgICAgICAgICAgIGlmIChzZWxmLl9maW5pc2hlZCkge1xuICAgICAgICAgICAgICBzZWxmLl9yZWFsRmluaXNoID0gdHJ1ZVxuICAgICAgICAgICAgICBzZWxmLmVtaXQoJ2ZpbmlzaCcpXG4gICAgICAgICAgICAgIHNlbGYuX3JlYWxGaW5pc2ggPSBmYWxzZVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2VsZi5fdW5wYXVzZSgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9wYXJ0LnB1c2gobnVsbClcbiAgICB0aGlzLl9wYXJ0ID0gdW5kZWZpbmVkXG4gICAgdGhpcy5faWdub3JlRGF0YSA9IGZhbHNlXG4gICAgdGhpcy5fanVzdE1hdGNoZWQgPSB0cnVlXG4gICAgdGhpcy5fZGFzaGVzID0gMFxuICB9XG59XG5cbkRpY2VyLnByb3RvdHlwZS5fdW5wYXVzZSA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKCF0aGlzLl9wYXVzZSkgeyByZXR1cm4gfVxuXG4gIHRoaXMuX3BhdXNlID0gZmFsc2VcbiAgaWYgKHRoaXMuX2NiKSB7XG4gICAgY29uc3QgY2IgPSB0aGlzLl9jYlxuICAgIHRoaXMuX2NiID0gdW5kZWZpbmVkXG4gICAgY2IoKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRGljZXJcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbi8vIE5vZGUgaGFzIGFsd2F5cyB1dGYtOFxuY29uc3QgdXRmOERlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoJ3V0Zi04JylcbmNvbnN0IHRleHREZWNvZGVycyA9IG5ldyBNYXAoW1xuICBbJ3V0Zi04JywgdXRmOERlY29kZXJdLFxuICBbJ3V0ZjgnLCB1dGY4RGVjb2Rlcl1cbl0pXG5cbmZ1bmN0aW9uIGdldERlY29kZXIgKGNoYXJzZXQpIHtcbiAgbGV0IGxjXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgc3dpdGNoIChjaGFyc2V0KSB7XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgICAgcmV0dXJuIGRlY29kZXJzLnV0ZjhcbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdhc2NpaSc6IC8vIFRPRE86IE1ha2UgdGhlc2UgYSBzZXBhcmF0ZSwgc3RyaWN0IGRlY29kZXI/XG4gICAgICBjYXNlICd1cy1hc2NpaSc6XG4gICAgICBjYXNlICdpc28tODg1OS0xJzpcbiAgICAgIGNhc2UgJ2lzbzg4NTktMSc6XG4gICAgICBjYXNlICdpc284ODU5MSc6XG4gICAgICBjYXNlICdpc29fODg1OS0xJzpcbiAgICAgIGNhc2UgJ3dpbmRvd3MtMTI1Mic6XG4gICAgICBjYXNlICdpc29fODg1OS0xOjE5ODcnOlxuICAgICAgY2FzZSAnY3AxMjUyJzpcbiAgICAgIGNhc2UgJ3gtY3AxMjUyJzpcbiAgICAgICAgcmV0dXJuIGRlY29kZXJzLmxhdGluMVxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgICAgcmV0dXJuIGRlY29kZXJzLnV0ZjE2bGVcbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIHJldHVybiBkZWNvZGVycy5iYXNlNjRcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsYyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbGMgPSB0cnVlXG4gICAgICAgICAgY2hhcnNldCA9IGNoYXJzZXQudG9Mb3dlckNhc2UoKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlY29kZXJzLm90aGVyLmJpbmQoY2hhcnNldClcbiAgICB9XG4gIH1cbn1cblxuY29uc3QgZGVjb2RlcnMgPSB7XG4gIHV0Zjg6IChkYXRhLCBzb3VyY2VFbmNvZGluZykgPT4ge1xuICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGRhdGEgPSBCdWZmZXIuZnJvbShkYXRhLCBzb3VyY2VFbmNvZGluZylcbiAgICB9XG4gICAgcmV0dXJuIGRhdGEudXRmOFNsaWNlKDAsIGRhdGEubGVuZ3RoKVxuICB9LFxuXG4gIGxhdGluMTogKGRhdGEsIHNvdXJjZUVuY29kaW5nKSA9PiB7XG4gICAgaWYgKGRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGRhdGFcbiAgICB9XG4gICAgcmV0dXJuIGRhdGEubGF0aW4xU2xpY2UoMCwgZGF0YS5sZW5ndGgpXG4gIH0sXG5cbiAgdXRmMTZsZTogKGRhdGEsIHNvdXJjZUVuY29kaW5nKSA9PiB7XG4gICAgaWYgKGRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgZGF0YSA9IEJ1ZmZlci5mcm9tKGRhdGEsIHNvdXJjZUVuY29kaW5nKVxuICAgIH1cbiAgICByZXR1cm4gZGF0YS51Y3MyU2xpY2UoMCwgZGF0YS5sZW5ndGgpXG4gIH0sXG5cbiAgYmFzZTY0OiAoZGF0YSwgc291cmNlRW5jb2RpbmcpID0+IHtcbiAgICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICBkYXRhID0gQnVmZmVyLmZyb20oZGF0YSwgc291cmNlRW5jb2RpbmcpXG4gICAgfVxuICAgIHJldHVybiBkYXRhLmJhc2U2NFNsaWNlKDAsIGRhdGEubGVuZ3RoKVxuICB9LFxuXG4gIG90aGVyOiAoZGF0YSwgc291cmNlRW5jb2RpbmcpID0+IHtcbiAgICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICBkYXRhID0gQnVmZmVyLmZyb20oZGF0YSwgc291cmNlRW5jb2RpbmcpXG4gICAgfVxuXG4gICAgaWYgKHRleHREZWNvZGVycy5oYXModGhpcy50b1N0cmluZygpKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHRleHREZWNvZGVycy5nZXQodGhpcykuZGVjb2RlKGRhdGEpXG4gICAgICB9IGNhdGNoIHt9XG4gICAgfVxuICAgIHJldHVybiB0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZydcbiAgICAgID8gZGF0YVxuICAgICAgOiBkYXRhLnRvU3RyaW5nKClcbiAgfVxufVxuXG5mdW5jdGlvbiBkZWNvZGVUZXh0ICh0ZXh0LCBzb3VyY2VFbmNvZGluZywgZGVzdEVuY29kaW5nKSB7XG4gIGlmICh0ZXh0KSB7XG4gICAgcmV0dXJuIGdldERlY29kZXIoZGVzdEVuY29kaW5nKSh0ZXh0LCBzb3VyY2VFbmNvZGluZylcbiAgfVxuICByZXR1cm4gdGV4dFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRlY29kZVRleHRcbiIsCiAgICAiLyogZXNsaW50LWRpc2FibGUgb2JqZWN0LXByb3BlcnR5LW5ld2xpbmUgKi9cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCBkZWNvZGVUZXh0ID0gcmVxdWlyZSgnLi9kZWNvZGVUZXh0JylcblxuY29uc3QgUkVfRU5DT0RFRCA9IC8lW2EtZkEtRjAtOV1bYS1mQS1GMC05XS9nXG5cbmNvbnN0IEVuY29kZWRMb29rdXAgPSB7XG4gICclMDAnOiAnXFx4MDAnLCAnJTAxJzogJ1xceDAxJywgJyUwMic6ICdcXHgwMicsICclMDMnOiAnXFx4MDMnLCAnJTA0JzogJ1xceDA0JyxcbiAgJyUwNSc6ICdcXHgwNScsICclMDYnOiAnXFx4MDYnLCAnJTA3JzogJ1xceDA3JywgJyUwOCc6ICdcXHgwOCcsICclMDknOiAnXFx4MDknLFxuICAnJTBhJzogJ1xceDBhJywgJyUwQSc6ICdcXHgwYScsICclMGInOiAnXFx4MGInLCAnJTBCJzogJ1xceDBiJywgJyUwYyc6ICdcXHgwYycsXG4gICclMEMnOiAnXFx4MGMnLCAnJTBkJzogJ1xceDBkJywgJyUwRCc6ICdcXHgwZCcsICclMGUnOiAnXFx4MGUnLCAnJTBFJzogJ1xceDBlJyxcbiAgJyUwZic6ICdcXHgwZicsICclMEYnOiAnXFx4MGYnLCAnJTEwJzogJ1xceDEwJywgJyUxMSc6ICdcXHgxMScsICclMTInOiAnXFx4MTInLFxuICAnJTEzJzogJ1xceDEzJywgJyUxNCc6ICdcXHgxNCcsICclMTUnOiAnXFx4MTUnLCAnJTE2JzogJ1xceDE2JywgJyUxNyc6ICdcXHgxNycsXG4gICclMTgnOiAnXFx4MTgnLCAnJTE5JzogJ1xceDE5JywgJyUxYSc6ICdcXHgxYScsICclMUEnOiAnXFx4MWEnLCAnJTFiJzogJ1xceDFiJyxcbiAgJyUxQic6ICdcXHgxYicsICclMWMnOiAnXFx4MWMnLCAnJTFDJzogJ1xceDFjJywgJyUxZCc6ICdcXHgxZCcsICclMUQnOiAnXFx4MWQnLFxuICAnJTFlJzogJ1xceDFlJywgJyUxRSc6ICdcXHgxZScsICclMWYnOiAnXFx4MWYnLCAnJTFGJzogJ1xceDFmJywgJyUyMCc6ICdcXHgyMCcsXG4gICclMjEnOiAnXFx4MjEnLCAnJTIyJzogJ1xceDIyJywgJyUyMyc6ICdcXHgyMycsICclMjQnOiAnXFx4MjQnLCAnJTI1JzogJ1xceDI1JyxcbiAgJyUyNic6ICdcXHgyNicsICclMjcnOiAnXFx4MjcnLCAnJTI4JzogJ1xceDI4JywgJyUyOSc6ICdcXHgyOScsICclMmEnOiAnXFx4MmEnLFxuICAnJTJBJzogJ1xceDJhJywgJyUyYic6ICdcXHgyYicsICclMkInOiAnXFx4MmInLCAnJTJjJzogJ1xceDJjJywgJyUyQyc6ICdcXHgyYycsXG4gICclMmQnOiAnXFx4MmQnLCAnJTJEJzogJ1xceDJkJywgJyUyZSc6ICdcXHgyZScsICclMkUnOiAnXFx4MmUnLCAnJTJmJzogJ1xceDJmJyxcbiAgJyUyRic6ICdcXHgyZicsICclMzAnOiAnXFx4MzAnLCAnJTMxJzogJ1xceDMxJywgJyUzMic6ICdcXHgzMicsICclMzMnOiAnXFx4MzMnLFxuICAnJTM0JzogJ1xceDM0JywgJyUzNSc6ICdcXHgzNScsICclMzYnOiAnXFx4MzYnLCAnJTM3JzogJ1xceDM3JywgJyUzOCc6ICdcXHgzOCcsXG4gICclMzknOiAnXFx4MzknLCAnJTNhJzogJ1xceDNhJywgJyUzQSc6ICdcXHgzYScsICclM2InOiAnXFx4M2InLCAnJTNCJzogJ1xceDNiJyxcbiAgJyUzYyc6ICdcXHgzYycsICclM0MnOiAnXFx4M2MnLCAnJTNkJzogJ1xceDNkJywgJyUzRCc6ICdcXHgzZCcsICclM2UnOiAnXFx4M2UnLFxuICAnJTNFJzogJ1xceDNlJywgJyUzZic6ICdcXHgzZicsICclM0YnOiAnXFx4M2YnLCAnJTQwJzogJ1xceDQwJywgJyU0MSc6ICdcXHg0MScsXG4gICclNDInOiAnXFx4NDInLCAnJTQzJzogJ1xceDQzJywgJyU0NCc6ICdcXHg0NCcsICclNDUnOiAnXFx4NDUnLCAnJTQ2JzogJ1xceDQ2JyxcbiAgJyU0Nyc6ICdcXHg0NycsICclNDgnOiAnXFx4NDgnLCAnJTQ5JzogJ1xceDQ5JywgJyU0YSc6ICdcXHg0YScsICclNEEnOiAnXFx4NGEnLFxuICAnJTRiJzogJ1xceDRiJywgJyU0Qic6ICdcXHg0YicsICclNGMnOiAnXFx4NGMnLCAnJTRDJzogJ1xceDRjJywgJyU0ZCc6ICdcXHg0ZCcsXG4gICclNEQnOiAnXFx4NGQnLCAnJTRlJzogJ1xceDRlJywgJyU0RSc6ICdcXHg0ZScsICclNGYnOiAnXFx4NGYnLCAnJTRGJzogJ1xceDRmJyxcbiAgJyU1MCc6ICdcXHg1MCcsICclNTEnOiAnXFx4NTEnLCAnJTUyJzogJ1xceDUyJywgJyU1Myc6ICdcXHg1MycsICclNTQnOiAnXFx4NTQnLFxuICAnJTU1JzogJ1xceDU1JywgJyU1Nic6ICdcXHg1NicsICclNTcnOiAnXFx4NTcnLCAnJTU4JzogJ1xceDU4JywgJyU1OSc6ICdcXHg1OScsXG4gICclNWEnOiAnXFx4NWEnLCAnJTVBJzogJ1xceDVhJywgJyU1Yic6ICdcXHg1YicsICclNUInOiAnXFx4NWInLCAnJTVjJzogJ1xceDVjJyxcbiAgJyU1Qyc6ICdcXHg1YycsICclNWQnOiAnXFx4NWQnLCAnJTVEJzogJ1xceDVkJywgJyU1ZSc6ICdcXHg1ZScsICclNUUnOiAnXFx4NWUnLFxuICAnJTVmJzogJ1xceDVmJywgJyU1Ric6ICdcXHg1ZicsICclNjAnOiAnXFx4NjAnLCAnJTYxJzogJ1xceDYxJywgJyU2Mic6ICdcXHg2MicsXG4gICclNjMnOiAnXFx4NjMnLCAnJTY0JzogJ1xceDY0JywgJyU2NSc6ICdcXHg2NScsICclNjYnOiAnXFx4NjYnLCAnJTY3JzogJ1xceDY3JyxcbiAgJyU2OCc6ICdcXHg2OCcsICclNjknOiAnXFx4NjknLCAnJTZhJzogJ1xceDZhJywgJyU2QSc6ICdcXHg2YScsICclNmInOiAnXFx4NmInLFxuICAnJTZCJzogJ1xceDZiJywgJyU2Yyc6ICdcXHg2YycsICclNkMnOiAnXFx4NmMnLCAnJTZkJzogJ1xceDZkJywgJyU2RCc6ICdcXHg2ZCcsXG4gICclNmUnOiAnXFx4NmUnLCAnJTZFJzogJ1xceDZlJywgJyU2Zic6ICdcXHg2ZicsICclNkYnOiAnXFx4NmYnLCAnJTcwJzogJ1xceDcwJyxcbiAgJyU3MSc6ICdcXHg3MScsICclNzInOiAnXFx4NzInLCAnJTczJzogJ1xceDczJywgJyU3NCc6ICdcXHg3NCcsICclNzUnOiAnXFx4NzUnLFxuICAnJTc2JzogJ1xceDc2JywgJyU3Nyc6ICdcXHg3NycsICclNzgnOiAnXFx4NzgnLCAnJTc5JzogJ1xceDc5JywgJyU3YSc6ICdcXHg3YScsXG4gICclN0EnOiAnXFx4N2EnLCAnJTdiJzogJ1xceDdiJywgJyU3Qic6ICdcXHg3YicsICclN2MnOiAnXFx4N2MnLCAnJTdDJzogJ1xceDdjJyxcbiAgJyU3ZCc6ICdcXHg3ZCcsICclN0QnOiAnXFx4N2QnLCAnJTdlJzogJ1xceDdlJywgJyU3RSc6ICdcXHg3ZScsICclN2YnOiAnXFx4N2YnLFxuICAnJTdGJzogJ1xceDdmJywgJyU4MCc6ICdcXHg4MCcsICclODEnOiAnXFx4ODEnLCAnJTgyJzogJ1xceDgyJywgJyU4Myc6ICdcXHg4MycsXG4gICclODQnOiAnXFx4ODQnLCAnJTg1JzogJ1xceDg1JywgJyU4Nic6ICdcXHg4NicsICclODcnOiAnXFx4ODcnLCAnJTg4JzogJ1xceDg4JyxcbiAgJyU4OSc6ICdcXHg4OScsICclOGEnOiAnXFx4OGEnLCAnJThBJzogJ1xceDhhJywgJyU4Yic6ICdcXHg4YicsICclOEInOiAnXFx4OGInLFxuICAnJThjJzogJ1xceDhjJywgJyU4Qyc6ICdcXHg4YycsICclOGQnOiAnXFx4OGQnLCAnJThEJzogJ1xceDhkJywgJyU4ZSc6ICdcXHg4ZScsXG4gICclOEUnOiAnXFx4OGUnLCAnJThmJzogJ1xceDhmJywgJyU4Ric6ICdcXHg4ZicsICclOTAnOiAnXFx4OTAnLCAnJTkxJzogJ1xceDkxJyxcbiAgJyU5Mic6ICdcXHg5MicsICclOTMnOiAnXFx4OTMnLCAnJTk0JzogJ1xceDk0JywgJyU5NSc6ICdcXHg5NScsICclOTYnOiAnXFx4OTYnLFxuICAnJTk3JzogJ1xceDk3JywgJyU5OCc6ICdcXHg5OCcsICclOTknOiAnXFx4OTknLCAnJTlhJzogJ1xceDlhJywgJyU5QSc6ICdcXHg5YScsXG4gICclOWInOiAnXFx4OWInLCAnJTlCJzogJ1xceDliJywgJyU5Yyc6ICdcXHg5YycsICclOUMnOiAnXFx4OWMnLCAnJTlkJzogJ1xceDlkJyxcbiAgJyU5RCc6ICdcXHg5ZCcsICclOWUnOiAnXFx4OWUnLCAnJTlFJzogJ1xceDllJywgJyU5Zic6ICdcXHg5ZicsICclOUYnOiAnXFx4OWYnLFxuICAnJWEwJzogJ1xceGEwJywgJyVBMCc6ICdcXHhhMCcsICclYTEnOiAnXFx4YTEnLCAnJUExJzogJ1xceGExJywgJyVhMic6ICdcXHhhMicsXG4gICclQTInOiAnXFx4YTInLCAnJWEzJzogJ1xceGEzJywgJyVBMyc6ICdcXHhhMycsICclYTQnOiAnXFx4YTQnLCAnJUE0JzogJ1xceGE0JyxcbiAgJyVhNSc6ICdcXHhhNScsICclQTUnOiAnXFx4YTUnLCAnJWE2JzogJ1xceGE2JywgJyVBNic6ICdcXHhhNicsICclYTcnOiAnXFx4YTcnLFxuICAnJUE3JzogJ1xceGE3JywgJyVhOCc6ICdcXHhhOCcsICclQTgnOiAnXFx4YTgnLCAnJWE5JzogJ1xceGE5JywgJyVBOSc6ICdcXHhhOScsXG4gICclYWEnOiAnXFx4YWEnLCAnJUFhJzogJ1xceGFhJywgJyVhQSc6ICdcXHhhYScsICclQUEnOiAnXFx4YWEnLCAnJWFiJzogJ1xceGFiJyxcbiAgJyVBYic6ICdcXHhhYicsICclYUInOiAnXFx4YWInLCAnJUFCJzogJ1xceGFiJywgJyVhYyc6ICdcXHhhYycsICclQWMnOiAnXFx4YWMnLFxuICAnJWFDJzogJ1xceGFjJywgJyVBQyc6ICdcXHhhYycsICclYWQnOiAnXFx4YWQnLCAnJUFkJzogJ1xceGFkJywgJyVhRCc6ICdcXHhhZCcsXG4gICclQUQnOiAnXFx4YWQnLCAnJWFlJzogJ1xceGFlJywgJyVBZSc6ICdcXHhhZScsICclYUUnOiAnXFx4YWUnLCAnJUFFJzogJ1xceGFlJyxcbiAgJyVhZic6ICdcXHhhZicsICclQWYnOiAnXFx4YWYnLCAnJWFGJzogJ1xceGFmJywgJyVBRic6ICdcXHhhZicsICclYjAnOiAnXFx4YjAnLFxuICAnJUIwJzogJ1xceGIwJywgJyViMSc6ICdcXHhiMScsICclQjEnOiAnXFx4YjEnLCAnJWIyJzogJ1xceGIyJywgJyVCMic6ICdcXHhiMicsXG4gICclYjMnOiAnXFx4YjMnLCAnJUIzJzogJ1xceGIzJywgJyViNCc6ICdcXHhiNCcsICclQjQnOiAnXFx4YjQnLCAnJWI1JzogJ1xceGI1JyxcbiAgJyVCNSc6ICdcXHhiNScsICclYjYnOiAnXFx4YjYnLCAnJUI2JzogJ1xceGI2JywgJyViNyc6ICdcXHhiNycsICclQjcnOiAnXFx4YjcnLFxuICAnJWI4JzogJ1xceGI4JywgJyVCOCc6ICdcXHhiOCcsICclYjknOiAnXFx4YjknLCAnJUI5JzogJ1xceGI5JywgJyViYSc6ICdcXHhiYScsXG4gICclQmEnOiAnXFx4YmEnLCAnJWJBJzogJ1xceGJhJywgJyVCQSc6ICdcXHhiYScsICclYmInOiAnXFx4YmInLCAnJUJiJzogJ1xceGJiJyxcbiAgJyViQic6ICdcXHhiYicsICclQkInOiAnXFx4YmInLCAnJWJjJzogJ1xceGJjJywgJyVCYyc6ICdcXHhiYycsICclYkMnOiAnXFx4YmMnLFxuICAnJUJDJzogJ1xceGJjJywgJyViZCc6ICdcXHhiZCcsICclQmQnOiAnXFx4YmQnLCAnJWJEJzogJ1xceGJkJywgJyVCRCc6ICdcXHhiZCcsXG4gICclYmUnOiAnXFx4YmUnLCAnJUJlJzogJ1xceGJlJywgJyViRSc6ICdcXHhiZScsICclQkUnOiAnXFx4YmUnLCAnJWJmJzogJ1xceGJmJyxcbiAgJyVCZic6ICdcXHhiZicsICclYkYnOiAnXFx4YmYnLCAnJUJGJzogJ1xceGJmJywgJyVjMCc6ICdcXHhjMCcsICclQzAnOiAnXFx4YzAnLFxuICAnJWMxJzogJ1xceGMxJywgJyVDMSc6ICdcXHhjMScsICclYzInOiAnXFx4YzInLCAnJUMyJzogJ1xceGMyJywgJyVjMyc6ICdcXHhjMycsXG4gICclQzMnOiAnXFx4YzMnLCAnJWM0JzogJ1xceGM0JywgJyVDNCc6ICdcXHhjNCcsICclYzUnOiAnXFx4YzUnLCAnJUM1JzogJ1xceGM1JyxcbiAgJyVjNic6ICdcXHhjNicsICclQzYnOiAnXFx4YzYnLCAnJWM3JzogJ1xceGM3JywgJyVDNyc6ICdcXHhjNycsICclYzgnOiAnXFx4YzgnLFxuICAnJUM4JzogJ1xceGM4JywgJyVjOSc6ICdcXHhjOScsICclQzknOiAnXFx4YzknLCAnJWNhJzogJ1xceGNhJywgJyVDYSc6ICdcXHhjYScsXG4gICclY0EnOiAnXFx4Y2EnLCAnJUNBJzogJ1xceGNhJywgJyVjYic6ICdcXHhjYicsICclQ2InOiAnXFx4Y2InLCAnJWNCJzogJ1xceGNiJyxcbiAgJyVDQic6ICdcXHhjYicsICclY2MnOiAnXFx4Y2MnLCAnJUNjJzogJ1xceGNjJywgJyVjQyc6ICdcXHhjYycsICclQ0MnOiAnXFx4Y2MnLFxuICAnJWNkJzogJ1xceGNkJywgJyVDZCc6ICdcXHhjZCcsICclY0QnOiAnXFx4Y2QnLCAnJUNEJzogJ1xceGNkJywgJyVjZSc6ICdcXHhjZScsXG4gICclQ2UnOiAnXFx4Y2UnLCAnJWNFJzogJ1xceGNlJywgJyVDRSc6ICdcXHhjZScsICclY2YnOiAnXFx4Y2YnLCAnJUNmJzogJ1xceGNmJyxcbiAgJyVjRic6ICdcXHhjZicsICclQ0YnOiAnXFx4Y2YnLCAnJWQwJzogJ1xceGQwJywgJyVEMCc6ICdcXHhkMCcsICclZDEnOiAnXFx4ZDEnLFxuICAnJUQxJzogJ1xceGQxJywgJyVkMic6ICdcXHhkMicsICclRDInOiAnXFx4ZDInLCAnJWQzJzogJ1xceGQzJywgJyVEMyc6ICdcXHhkMycsXG4gICclZDQnOiAnXFx4ZDQnLCAnJUQ0JzogJ1xceGQ0JywgJyVkNSc6ICdcXHhkNScsICclRDUnOiAnXFx4ZDUnLCAnJWQ2JzogJ1xceGQ2JyxcbiAgJyVENic6ICdcXHhkNicsICclZDcnOiAnXFx4ZDcnLCAnJUQ3JzogJ1xceGQ3JywgJyVkOCc6ICdcXHhkOCcsICclRDgnOiAnXFx4ZDgnLFxuICAnJWQ5JzogJ1xceGQ5JywgJyVEOSc6ICdcXHhkOScsICclZGEnOiAnXFx4ZGEnLCAnJURhJzogJ1xceGRhJywgJyVkQSc6ICdcXHhkYScsXG4gICclREEnOiAnXFx4ZGEnLCAnJWRiJzogJ1xceGRiJywgJyVEYic6ICdcXHhkYicsICclZEInOiAnXFx4ZGInLCAnJURCJzogJ1xceGRiJyxcbiAgJyVkYyc6ICdcXHhkYycsICclRGMnOiAnXFx4ZGMnLCAnJWRDJzogJ1xceGRjJywgJyVEQyc6ICdcXHhkYycsICclZGQnOiAnXFx4ZGQnLFxuICAnJURkJzogJ1xceGRkJywgJyVkRCc6ICdcXHhkZCcsICclREQnOiAnXFx4ZGQnLCAnJWRlJzogJ1xceGRlJywgJyVEZSc6ICdcXHhkZScsXG4gICclZEUnOiAnXFx4ZGUnLCAnJURFJzogJ1xceGRlJywgJyVkZic6ICdcXHhkZicsICclRGYnOiAnXFx4ZGYnLCAnJWRGJzogJ1xceGRmJyxcbiAgJyVERic6ICdcXHhkZicsICclZTAnOiAnXFx4ZTAnLCAnJUUwJzogJ1xceGUwJywgJyVlMSc6ICdcXHhlMScsICclRTEnOiAnXFx4ZTEnLFxuICAnJWUyJzogJ1xceGUyJywgJyVFMic6ICdcXHhlMicsICclZTMnOiAnXFx4ZTMnLCAnJUUzJzogJ1xceGUzJywgJyVlNCc6ICdcXHhlNCcsXG4gICclRTQnOiAnXFx4ZTQnLCAnJWU1JzogJ1xceGU1JywgJyVFNSc6ICdcXHhlNScsICclZTYnOiAnXFx4ZTYnLCAnJUU2JzogJ1xceGU2JyxcbiAgJyVlNyc6ICdcXHhlNycsICclRTcnOiAnXFx4ZTcnLCAnJWU4JzogJ1xceGU4JywgJyVFOCc6ICdcXHhlOCcsICclZTknOiAnXFx4ZTknLFxuICAnJUU5JzogJ1xceGU5JywgJyVlYSc6ICdcXHhlYScsICclRWEnOiAnXFx4ZWEnLCAnJWVBJzogJ1xceGVhJywgJyVFQSc6ICdcXHhlYScsXG4gICclZWInOiAnXFx4ZWInLCAnJUViJzogJ1xceGViJywgJyVlQic6ICdcXHhlYicsICclRUInOiAnXFx4ZWInLCAnJWVjJzogJ1xceGVjJyxcbiAgJyVFYyc6ICdcXHhlYycsICclZUMnOiAnXFx4ZWMnLCAnJUVDJzogJ1xceGVjJywgJyVlZCc6ICdcXHhlZCcsICclRWQnOiAnXFx4ZWQnLFxuICAnJWVEJzogJ1xceGVkJywgJyVFRCc6ICdcXHhlZCcsICclZWUnOiAnXFx4ZWUnLCAnJUVlJzogJ1xceGVlJywgJyVlRSc6ICdcXHhlZScsXG4gICclRUUnOiAnXFx4ZWUnLCAnJWVmJzogJ1xceGVmJywgJyVFZic6ICdcXHhlZicsICclZUYnOiAnXFx4ZWYnLCAnJUVGJzogJ1xceGVmJyxcbiAgJyVmMCc6ICdcXHhmMCcsICclRjAnOiAnXFx4ZjAnLCAnJWYxJzogJ1xceGYxJywgJyVGMSc6ICdcXHhmMScsICclZjInOiAnXFx4ZjInLFxuICAnJUYyJzogJ1xceGYyJywgJyVmMyc6ICdcXHhmMycsICclRjMnOiAnXFx4ZjMnLCAnJWY0JzogJ1xceGY0JywgJyVGNCc6ICdcXHhmNCcsXG4gICclZjUnOiAnXFx4ZjUnLCAnJUY1JzogJ1xceGY1JywgJyVmNic6ICdcXHhmNicsICclRjYnOiAnXFx4ZjYnLCAnJWY3JzogJ1xceGY3JyxcbiAgJyVGNyc6ICdcXHhmNycsICclZjgnOiAnXFx4ZjgnLCAnJUY4JzogJ1xceGY4JywgJyVmOSc6ICdcXHhmOScsICclRjknOiAnXFx4ZjknLFxuICAnJWZhJzogJ1xceGZhJywgJyVGYSc6ICdcXHhmYScsICclZkEnOiAnXFx4ZmEnLCAnJUZBJzogJ1xceGZhJywgJyVmYic6ICdcXHhmYicsXG4gICclRmInOiAnXFx4ZmInLCAnJWZCJzogJ1xceGZiJywgJyVGQic6ICdcXHhmYicsICclZmMnOiAnXFx4ZmMnLCAnJUZjJzogJ1xceGZjJyxcbiAgJyVmQyc6ICdcXHhmYycsICclRkMnOiAnXFx4ZmMnLCAnJWZkJzogJ1xceGZkJywgJyVGZCc6ICdcXHhmZCcsICclZkQnOiAnXFx4ZmQnLFxuICAnJUZEJzogJ1xceGZkJywgJyVmZSc6ICdcXHhmZScsICclRmUnOiAnXFx4ZmUnLCAnJWZFJzogJ1xceGZlJywgJyVGRSc6ICdcXHhmZScsXG4gICclZmYnOiAnXFx4ZmYnLCAnJUZmJzogJ1xceGZmJywgJyVmRic6ICdcXHhmZicsICclRkYnOiAnXFx4ZmYnXG59XG5cbmZ1bmN0aW9uIGVuY29kZWRSZXBsYWNlciAobWF0Y2gpIHtcbiAgcmV0dXJuIEVuY29kZWRMb29rdXBbbWF0Y2hdXG59XG5cbmNvbnN0IFNUQVRFX0tFWSA9IDBcbmNvbnN0IFNUQVRFX1ZBTFVFID0gMVxuY29uc3QgU1RBVEVfQ0hBUlNFVCA9IDJcbmNvbnN0IFNUQVRFX0xBTkcgPSAzXG5cbmZ1bmN0aW9uIHBhcnNlUGFyYW1zIChzdHIpIHtcbiAgY29uc3QgcmVzID0gW11cbiAgbGV0IHN0YXRlID0gU1RBVEVfS0VZXG4gIGxldCBjaGFyc2V0ID0gJydcbiAgbGV0IGlucXVvdGUgPSBmYWxzZVxuICBsZXQgZXNjYXBpbmcgPSBmYWxzZVxuICBsZXQgcCA9IDBcbiAgbGV0IHRtcCA9ICcnXG4gIGNvbnN0IGxlbiA9IHN0ci5sZW5ndGhcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdmFyXG4gICAgY29uc3QgY2hhciA9IHN0cltpXVxuICAgIGlmIChjaGFyID09PSAnXFxcXCcgJiYgaW5xdW90ZSkge1xuICAgICAgaWYgKGVzY2FwaW5nKSB7IGVzY2FwaW5nID0gZmFsc2UgfSBlbHNlIHtcbiAgICAgICAgZXNjYXBpbmcgPSB0cnVlXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjaGFyID09PSAnXCInKSB7XG4gICAgICBpZiAoIWVzY2FwaW5nKSB7XG4gICAgICAgIGlmIChpbnF1b3RlKSB7XG4gICAgICAgICAgaW5xdW90ZSA9IGZhbHNlXG4gICAgICAgICAgc3RhdGUgPSBTVEFURV9LRVlcbiAgICAgICAgfSBlbHNlIHsgaW5xdW90ZSA9IHRydWUgfVxuICAgICAgICBjb250aW51ZVxuICAgICAgfSBlbHNlIHsgZXNjYXBpbmcgPSBmYWxzZSB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChlc2NhcGluZyAmJiBpbnF1b3RlKSB7IHRtcCArPSAnXFxcXCcgfVxuICAgICAgZXNjYXBpbmcgPSBmYWxzZVxuICAgICAgaWYgKChzdGF0ZSA9PT0gU1RBVEVfQ0hBUlNFVCB8fCBzdGF0ZSA9PT0gU1RBVEVfTEFORykgJiYgY2hhciA9PT0gXCInXCIpIHtcbiAgICAgICAgaWYgKHN0YXRlID09PSBTVEFURV9DSEFSU0VUKSB7XG4gICAgICAgICAgc3RhdGUgPSBTVEFURV9MQU5HXG4gICAgICAgICAgY2hhcnNldCA9IHRtcC5zdWJzdHJpbmcoMSlcbiAgICAgICAgfSBlbHNlIHsgc3RhdGUgPSBTVEFURV9WQUxVRSB9XG4gICAgICAgIHRtcCA9ICcnXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9IGVsc2UgaWYgKHN0YXRlID09PSBTVEFURV9LRVkgJiZcbiAgICAgICAgKGNoYXIgPT09ICcqJyB8fCBjaGFyID09PSAnPScpICYmXG4gICAgICAgIHJlcy5sZW5ndGgpIHtcbiAgICAgICAgc3RhdGUgPSBjaGFyID09PSAnKidcbiAgICAgICAgICA/IFNUQVRFX0NIQVJTRVRcbiAgICAgICAgICA6IFNUQVRFX1ZBTFVFXG4gICAgICAgIHJlc1twXSA9IFt0bXAsIHVuZGVmaW5lZF1cbiAgICAgICAgdG1wID0gJydcbiAgICAgICAgY29udGludWVcbiAgICAgIH0gZWxzZSBpZiAoIWlucXVvdGUgJiYgY2hhciA9PT0gJzsnKSB7XG4gICAgICAgIHN0YXRlID0gU1RBVEVfS0VZXG4gICAgICAgIGlmIChjaGFyc2V0KSB7XG4gICAgICAgICAgaWYgKHRtcC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRtcCA9IGRlY29kZVRleHQodG1wLnJlcGxhY2UoUkVfRU5DT0RFRCwgZW5jb2RlZFJlcGxhY2VyKSxcbiAgICAgICAgICAgICAgJ2JpbmFyeScsXG4gICAgICAgICAgICAgIGNoYXJzZXQpXG4gICAgICAgICAgfVxuICAgICAgICAgIGNoYXJzZXQgPSAnJ1xuICAgICAgICB9IGVsc2UgaWYgKHRtcC5sZW5ndGgpIHtcbiAgICAgICAgICB0bXAgPSBkZWNvZGVUZXh0KHRtcCwgJ2JpbmFyeScsICd1dGY4JylcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzW3BdID09PSB1bmRlZmluZWQpIHsgcmVzW3BdID0gdG1wIH0gZWxzZSB7IHJlc1twXVsxXSA9IHRtcCB9XG4gICAgICAgIHRtcCA9ICcnXG4gICAgICAgICsrcFxuICAgICAgICBjb250aW51ZVxuICAgICAgfSBlbHNlIGlmICghaW5xdW90ZSAmJiAoY2hhciA9PT0gJyAnIHx8IGNoYXIgPT09ICdcXHQnKSkgeyBjb250aW51ZSB9XG4gICAgfVxuICAgIHRtcCArPSBjaGFyXG4gIH1cbiAgaWYgKGNoYXJzZXQgJiYgdG1wLmxlbmd0aCkge1xuICAgIHRtcCA9IGRlY29kZVRleHQodG1wLnJlcGxhY2UoUkVfRU5DT0RFRCwgZW5jb2RlZFJlcGxhY2VyKSxcbiAgICAgICdiaW5hcnknLFxuICAgICAgY2hhcnNldClcbiAgfSBlbHNlIGlmICh0bXApIHtcbiAgICB0bXAgPSBkZWNvZGVUZXh0KHRtcCwgJ2JpbmFyeScsICd1dGY4JylcbiAgfVxuXG4gIGlmIChyZXNbcF0gPT09IHVuZGVmaW5lZCkge1xuICAgIGlmICh0bXApIHsgcmVzW3BdID0gdG1wIH1cbiAgfSBlbHNlIHsgcmVzW3BdWzFdID0gdG1wIH1cblxuICByZXR1cm4gcmVzXG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyc2VQYXJhbXNcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYmFzZW5hbWUgKHBhdGgpIHtcbiAgaWYgKHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJykgeyByZXR1cm4gJycgfVxuICBmb3IgKHZhciBpID0gcGF0aC5sZW5ndGggLSAxOyBpID49IDA7IC0taSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXZhclxuICAgIHN3aXRjaCAocGF0aC5jaGFyQ29kZUF0KGkpKSB7XG4gICAgICBjYXNlIDB4MkY6IC8vICcvJ1xuICAgICAgY2FzZSAweDVDOiAvLyAnXFwnXG4gICAgICAgIHBhdGggPSBwYXRoLnNsaWNlKGkgKyAxKVxuICAgICAgICByZXR1cm4gKHBhdGggPT09ICcuLicgfHwgcGF0aCA9PT0gJy4nID8gJycgOiBwYXRoKVxuICAgIH1cbiAgfVxuICByZXR1cm4gKHBhdGggPT09ICcuLicgfHwgcGF0aCA9PT0gJy4nID8gJycgOiBwYXRoKVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuLy8gVE9ETzpcbi8vICAqIHN1cHBvcnQgMSBuZXN0ZWQgbXVsdGlwYXJ0IGxldmVsXG4vLyAgICAoc2VlIHNlY29uZCBtdWx0aXBhcnQgZXhhbXBsZSBoZXJlOlxuLy8gICAgIGh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0MDEvaW50ZXJhY3QvZm9ybXMuaHRtbCNkaWR4LW11bHRpcGFydGZvcm0tZGF0YSlcbi8vICAqIHN1cHBvcnQgbGltaXRzLmZpZWxkTmFtZVNpemVcbi8vICAgICAtLSB0aGlzIHdpbGwgcmVxdWlyZSBtb2RpZmljYXRpb25zIHRvIHV0aWxzLnBhcnNlUGFyYW1zXG5cbmNvbnN0IHsgUmVhZGFibGUgfSA9IHJlcXVpcmUoJ25vZGU6c3RyZWFtJylcbmNvbnN0IHsgaW5oZXJpdHMgfSA9IHJlcXVpcmUoJ25vZGU6dXRpbCcpXG5cbmNvbnN0IERpY2VyID0gcmVxdWlyZSgnLi4vLi4vZGVwcy9kaWNlci9saWIvRGljZXInKVxuXG5jb25zdCBwYXJzZVBhcmFtcyA9IHJlcXVpcmUoJy4uL3V0aWxzL3BhcnNlUGFyYW1zJylcbmNvbnN0IGRlY29kZVRleHQgPSByZXF1aXJlKCcuLi91dGlscy9kZWNvZGVUZXh0JylcbmNvbnN0IGJhc2VuYW1lID0gcmVxdWlyZSgnLi4vdXRpbHMvYmFzZW5hbWUnKVxuY29uc3QgZ2V0TGltaXQgPSByZXF1aXJlKCcuLi91dGlscy9nZXRMaW1pdCcpXG5cbmNvbnN0IFJFX0JPVU5EQVJZID0gL15ib3VuZGFyeSQvaVxuY29uc3QgUkVfRklFTEQgPSAvXmZvcm0tZGF0YSQvaVxuY29uc3QgUkVfQ0hBUlNFVCA9IC9eY2hhcnNldCQvaVxuY29uc3QgUkVfRklMRU5BTUUgPSAvXmZpbGVuYW1lJC9pXG5jb25zdCBSRV9OQU1FID0gL15uYW1lJC9pXG5cbk11bHRpcGFydC5kZXRlY3QgPSAvXm11bHRpcGFydFxcL2Zvcm0tZGF0YS9pXG5mdW5jdGlvbiBNdWx0aXBhcnQgKGJveSwgY2ZnKSB7XG4gIGxldCBpXG4gIGxldCBsZW5cbiAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgbGV0IGJvdW5kYXJ5XG4gIGNvbnN0IGxpbWl0cyA9IGNmZy5saW1pdHNcbiAgY29uc3QgaXNQYXJ0QUZpbGUgPSBjZmcuaXNQYXJ0QUZpbGUgfHwgKChmaWVsZE5hbWUsIGNvbnRlbnRUeXBlLCBmaWxlTmFtZSkgPT4gKGNvbnRlbnRUeXBlID09PSAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJyB8fCBmaWxlTmFtZSAhPT0gdW5kZWZpbmVkKSlcbiAgY29uc3QgcGFyc2VkQ29uVHlwZSA9IGNmZy5wYXJzZWRDb25UeXBlIHx8IFtdXG4gIGNvbnN0IGRlZkNoYXJzZXQgPSBjZmcuZGVmQ2hhcnNldCB8fCAndXRmOCdcbiAgY29uc3QgcHJlc2VydmVQYXRoID0gY2ZnLnByZXNlcnZlUGF0aFxuICBjb25zdCBmaWxlT3B0cyA9IHsgaGlnaFdhdGVyTWFyazogY2ZnLmZpbGVId20gfVxuXG4gIGZvciAoaSA9IDAsIGxlbiA9IHBhcnNlZENvblR5cGUubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJzZWRDb25UeXBlW2ldKSAmJlxuICAgICAgUkVfQk9VTkRBUlkudGVzdChwYXJzZWRDb25UeXBlW2ldWzBdKSkge1xuICAgICAgYm91bmRhcnkgPSBwYXJzZWRDb25UeXBlW2ldWzFdXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNoZWNrRmluaXNoZWQgKCkge1xuICAgIGlmIChuZW5kcyA9PT0gMCAmJiBmaW5pc2hlZCAmJiAhYm95Ll9kb25lKSB7XG4gICAgICBmaW5pc2hlZCA9IGZhbHNlXG4gICAgICBzZWxmLmVuZCgpXG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiBib3VuZGFyeSAhPT0gJ3N0cmluZycpIHsgdGhyb3cgbmV3IEVycm9yKCdNdWx0aXBhcnQ6IEJvdW5kYXJ5IG5vdCBmb3VuZCcpIH1cblxuICBjb25zdCBmaWVsZFNpemVMaW1pdCA9IGdldExpbWl0KGxpbWl0cywgJ2ZpZWxkU2l6ZScsIDEgKiAxMDI0ICogMTAyNClcbiAgY29uc3QgZmlsZVNpemVMaW1pdCA9IGdldExpbWl0KGxpbWl0cywgJ2ZpbGVTaXplJywgSW5maW5pdHkpXG4gIGNvbnN0IGZpbGVzTGltaXQgPSBnZXRMaW1pdChsaW1pdHMsICdmaWxlcycsIEluZmluaXR5KVxuICBjb25zdCBmaWVsZHNMaW1pdCA9IGdldExpbWl0KGxpbWl0cywgJ2ZpZWxkcycsIEluZmluaXR5KVxuICBjb25zdCBwYXJ0c0xpbWl0ID0gZ2V0TGltaXQobGltaXRzLCAncGFydHMnLCBJbmZpbml0eSlcbiAgY29uc3QgaGVhZGVyUGFpcnNMaW1pdCA9IGdldExpbWl0KGxpbWl0cywgJ2hlYWRlclBhaXJzJywgMjAwMClcbiAgY29uc3QgaGVhZGVyU2l6ZUxpbWl0ID0gZ2V0TGltaXQobGltaXRzLCAnaGVhZGVyU2l6ZScsIDgwICogMTAyNClcblxuICBsZXQgbmZpbGVzID0gMFxuICBsZXQgbmZpZWxkcyA9IDBcbiAgbGV0IG5lbmRzID0gMFxuICBsZXQgY3VyRmlsZVxuICBsZXQgY3VyRmllbGRcbiAgbGV0IGZpbmlzaGVkID0gZmFsc2VcblxuICB0aGlzLl9uZWVkRHJhaW4gPSBmYWxzZVxuICB0aGlzLl9wYXVzZSA9IGZhbHNlXG4gIHRoaXMuX2NiID0gdW5kZWZpbmVkXG4gIHRoaXMuX25wYXJ0cyA9IDBcbiAgdGhpcy5fYm95ID0gYm95XG5cbiAgY29uc3QgcGFyc2VyQ2ZnID0ge1xuICAgIGJvdW5kYXJ5LFxuICAgIG1heEhlYWRlclBhaXJzOiBoZWFkZXJQYWlyc0xpbWl0LFxuICAgIG1heEhlYWRlclNpemU6IGhlYWRlclNpemVMaW1pdCxcbiAgICBwYXJ0SHdtOiBmaWxlT3B0cy5oaWdoV2F0ZXJNYXJrLFxuICAgIGhpZ2hXYXRlck1hcms6IGNmZy5oaWdoV2F0ZXJNYXJrXG4gIH1cblxuICB0aGlzLnBhcnNlciA9IG5ldyBEaWNlcihwYXJzZXJDZmcpXG4gIHRoaXMucGFyc2VyLm9uKCdkcmFpbicsIGZ1bmN0aW9uICgpIHtcbiAgICBzZWxmLl9uZWVkRHJhaW4gPSBmYWxzZVxuICAgIGlmIChzZWxmLl9jYiAmJiAhc2VsZi5fcGF1c2UpIHtcbiAgICAgIGNvbnN0IGNiID0gc2VsZi5fY2JcbiAgICAgIHNlbGYuX2NiID0gdW5kZWZpbmVkXG4gICAgICBjYigpXG4gICAgfVxuICB9KS5vbigncGFydCcsIGZ1bmN0aW9uIG9uUGFydCAocGFydCkge1xuICAgIGlmICgrK3NlbGYuX25wYXJ0cyA+IHBhcnRzTGltaXQpIHtcbiAgICAgIHNlbGYucGFyc2VyLnJlbW92ZUxpc3RlbmVyKCdwYXJ0Jywgb25QYXJ0KVxuICAgICAgc2VsZi5wYXJzZXIub24oJ3BhcnQnLCBza2lwUGFydClcbiAgICAgIGJveS5oaXRQYXJ0c0xpbWl0ID0gdHJ1ZVxuICAgICAgYm95LmVtaXQoJ3BhcnRzTGltaXQnKVxuICAgICAgcmV0dXJuIHNraXBQYXJ0KHBhcnQpXG4gICAgfVxuXG4gICAgLy8gaGFjayBiZWNhdXNlIHN0cmVhbXMyIF9hbHdheXNfIGRvZXNuJ3QgZW1pdCAnZW5kJyB1bnRpbCBuZXh0VGljaywgc28gbGV0XG4gICAgLy8gdXMgZW1pdCAnZW5kJyBlYXJseSBzaW5jZSB3ZSBrbm93IHRoZSBwYXJ0IGhhcyBlbmRlZCBpZiB3ZSBhcmUgYWxyZWFkeVxuICAgIC8vIHNlZWluZyB0aGUgbmV4dCBwYXJ0XG4gICAgaWYgKGN1ckZpZWxkKSB7XG4gICAgICBjb25zdCBmaWVsZCA9IGN1ckZpZWxkXG4gICAgICBmaWVsZC5lbWl0KCdlbmQnKVxuICAgICAgZmllbGQucmVtb3ZlQWxsTGlzdGVuZXJzKCdlbmQnKVxuICAgIH1cblxuICAgIHBhcnQub24oJ2hlYWRlcicsIGZ1bmN0aW9uIChoZWFkZXIpIHtcbiAgICAgIGxldCBjb250eXBlXG4gICAgICBsZXQgZmllbGRuYW1lXG4gICAgICBsZXQgcGFyc2VkXG4gICAgICBsZXQgY2hhcnNldFxuICAgICAgbGV0IGVuY29kaW5nXG4gICAgICBsZXQgZmlsZW5hbWVcbiAgICAgIGxldCBuc2l6ZSA9IDBcblxuICAgICAgaWYgKGhlYWRlclsnY29udGVudC10eXBlJ10pIHtcbiAgICAgICAgcGFyc2VkID0gcGFyc2VQYXJhbXMoaGVhZGVyWydjb250ZW50LXR5cGUnXVswXSlcbiAgICAgICAgaWYgKHBhcnNlZFswXSkge1xuICAgICAgICAgIGNvbnR5cGUgPSBwYXJzZWRbMF0udG9Mb3dlckNhc2UoKVxuICAgICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IHBhcnNlZC5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgICAgICAgICAgaWYgKFJFX0NIQVJTRVQudGVzdChwYXJzZWRbaV1bMF0pKSB7XG4gICAgICAgICAgICAgIGNoYXJzZXQgPSBwYXJzZWRbaV1bMV0udG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoY29udHlwZSA9PT0gdW5kZWZpbmVkKSB7IGNvbnR5cGUgPSAndGV4dC9wbGFpbicgfVxuICAgICAgaWYgKGNoYXJzZXQgPT09IHVuZGVmaW5lZCkgeyBjaGFyc2V0ID0gZGVmQ2hhcnNldCB9XG5cbiAgICAgIGlmIChoZWFkZXJbJ2NvbnRlbnQtZGlzcG9zaXRpb24nXSkge1xuICAgICAgICBwYXJzZWQgPSBwYXJzZVBhcmFtcyhoZWFkZXJbJ2NvbnRlbnQtZGlzcG9zaXRpb24nXVswXSlcbiAgICAgICAgaWYgKCFSRV9GSUVMRC50ZXN0KHBhcnNlZFswXSkpIHsgcmV0dXJuIHNraXBQYXJ0KHBhcnQpIH1cbiAgICAgICAgZm9yIChpID0gMCwgbGVuID0gcGFyc2VkLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICAgICAgaWYgKFJFX05BTUUudGVzdChwYXJzZWRbaV1bMF0pKSB7XG4gICAgICAgICAgICBmaWVsZG5hbWUgPSBwYXJzZWRbaV1bMV1cbiAgICAgICAgICB9IGVsc2UgaWYgKFJFX0ZJTEVOQU1FLnRlc3QocGFyc2VkW2ldWzBdKSkge1xuICAgICAgICAgICAgZmlsZW5hbWUgPSBwYXJzZWRbaV1bMV1cbiAgICAgICAgICAgIGlmICghcHJlc2VydmVQYXRoKSB7IGZpbGVuYW1lID0gYmFzZW5hbWUoZmlsZW5hbWUpIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7IHJldHVybiBza2lwUGFydChwYXJ0KSB9XG5cbiAgICAgIGlmIChoZWFkZXJbJ2NvbnRlbnQtdHJhbnNmZXItZW5jb2RpbmcnXSkgeyBlbmNvZGluZyA9IGhlYWRlclsnY29udGVudC10cmFuc2Zlci1lbmNvZGluZyddWzBdLnRvTG93ZXJDYXNlKCkgfSBlbHNlIHsgZW5jb2RpbmcgPSAnN2JpdCcgfVxuXG4gICAgICBsZXQgb25EYXRhLFxuICAgICAgICBvbkVuZFxuXG4gICAgICBpZiAoaXNQYXJ0QUZpbGUoZmllbGRuYW1lLCBjb250eXBlLCBmaWxlbmFtZSkpIHtcbiAgICAgICAgLy8gZmlsZS9iaW5hcnkgZmllbGRcbiAgICAgICAgaWYgKG5maWxlcyA9PT0gZmlsZXNMaW1pdCkge1xuICAgICAgICAgIGlmICghYm95LmhpdEZpbGVzTGltaXQpIHtcbiAgICAgICAgICAgIGJveS5oaXRGaWxlc0xpbWl0ID0gdHJ1ZVxuICAgICAgICAgICAgYm95LmVtaXQoJ2ZpbGVzTGltaXQnKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gc2tpcFBhcnQocGFydClcbiAgICAgICAgfVxuXG4gICAgICAgICsrbmZpbGVzXG5cbiAgICAgICAgaWYgKGJveS5saXN0ZW5lckNvdW50KCdmaWxlJykgPT09IDApIHtcbiAgICAgICAgICBzZWxmLnBhcnNlci5faWdub3JlKClcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgICsrbmVuZHNcbiAgICAgICAgY29uc3QgZmlsZSA9IG5ldyBGaWxlU3RyZWFtKGZpbGVPcHRzKVxuICAgICAgICBjdXJGaWxlID0gZmlsZVxuICAgICAgICBmaWxlLm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLS1uZW5kc1xuICAgICAgICAgIHNlbGYuX3BhdXNlID0gZmFsc2VcbiAgICAgICAgICBjaGVja0ZpbmlzaGVkKClcbiAgICAgICAgICBpZiAoc2VsZi5fY2IgJiYgIXNlbGYuX25lZWREcmFpbikge1xuICAgICAgICAgICAgY29uc3QgY2IgPSBzZWxmLl9jYlxuICAgICAgICAgICAgc2VsZi5fY2IgPSB1bmRlZmluZWRcbiAgICAgICAgICAgIGNiKClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIGZpbGUuX3JlYWQgPSBmdW5jdGlvbiAobikge1xuICAgICAgICAgIGlmICghc2VsZi5fcGF1c2UpIHsgcmV0dXJuIH1cbiAgICAgICAgICBzZWxmLl9wYXVzZSA9IGZhbHNlXG4gICAgICAgICAgaWYgKHNlbGYuX2NiICYmICFzZWxmLl9uZWVkRHJhaW4pIHtcbiAgICAgICAgICAgIGNvbnN0IGNiID0gc2VsZi5fY2JcbiAgICAgICAgICAgIHNlbGYuX2NiID0gdW5kZWZpbmVkXG4gICAgICAgICAgICBjYigpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJveS5lbWl0KCdmaWxlJywgZmllbGRuYW1lLCBmaWxlLCBmaWxlbmFtZSwgZW5jb2RpbmcsIGNvbnR5cGUpXG5cbiAgICAgICAgb25EYXRhID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICBpZiAoKG5zaXplICs9IGRhdGEubGVuZ3RoKSA+IGZpbGVTaXplTGltaXQpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4dHJhbGVuID0gZmlsZVNpemVMaW1pdCAtIG5zaXplICsgZGF0YS5sZW5ndGhcbiAgICAgICAgICAgIGlmIChleHRyYWxlbiA+IDApIHsgZmlsZS5wdXNoKGRhdGEuc2xpY2UoMCwgZXh0cmFsZW4pKSB9XG4gICAgICAgICAgICBmaWxlLnRydW5jYXRlZCA9IHRydWVcbiAgICAgICAgICAgIGZpbGUuYnl0ZXNSZWFkID0gZmlsZVNpemVMaW1pdFxuICAgICAgICAgICAgcGFydC5yZW1vdmVBbGxMaXN0ZW5lcnMoJ2RhdGEnKVxuICAgICAgICAgICAgZmlsZS5lbWl0KCdsaW1pdCcpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9IGVsc2UgaWYgKCFmaWxlLnB1c2goZGF0YSkpIHsgc2VsZi5fcGF1c2UgPSB0cnVlIH1cblxuICAgICAgICAgIGZpbGUuYnl0ZXNSZWFkID0gbnNpemVcbiAgICAgICAgfVxuXG4gICAgICAgIG9uRW5kID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGN1ckZpbGUgPSB1bmRlZmluZWRcbiAgICAgICAgICBmaWxlLnB1c2gobnVsbClcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gbm9uLWZpbGUgZmllbGRcbiAgICAgICAgaWYgKG5maWVsZHMgPT09IGZpZWxkc0xpbWl0KSB7XG4gICAgICAgICAgaWYgKCFib3kuaGl0RmllbGRzTGltaXQpIHtcbiAgICAgICAgICAgIGJveS5oaXRGaWVsZHNMaW1pdCA9IHRydWVcbiAgICAgICAgICAgIGJveS5lbWl0KCdmaWVsZHNMaW1pdCcpXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBza2lwUGFydChwYXJ0KVxuICAgICAgICB9XG5cbiAgICAgICAgKytuZmllbGRzXG4gICAgICAgICsrbmVuZHNcbiAgICAgICAgbGV0IGJ1ZmZlciA9ICcnXG4gICAgICAgIGxldCB0cnVuY2F0ZWQgPSBmYWxzZVxuICAgICAgICBjdXJGaWVsZCA9IHBhcnRcblxuICAgICAgICBvbkRhdGEgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgIGlmICgobnNpemUgKz0gZGF0YS5sZW5ndGgpID4gZmllbGRTaXplTGltaXQpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4dHJhbGVuID0gKGZpZWxkU2l6ZUxpbWl0IC0gKG5zaXplIC0gZGF0YS5sZW5ndGgpKVxuICAgICAgICAgICAgYnVmZmVyICs9IGRhdGEudG9TdHJpbmcoJ2JpbmFyeScsIDAsIGV4dHJhbGVuKVxuICAgICAgICAgICAgdHJ1bmNhdGVkID0gdHJ1ZVxuICAgICAgICAgICAgcGFydC5yZW1vdmVBbGxMaXN0ZW5lcnMoJ2RhdGEnKVxuICAgICAgICAgIH0gZWxzZSB7IGJ1ZmZlciArPSBkYXRhLnRvU3RyaW5nKCdiaW5hcnknKSB9XG4gICAgICAgIH1cblxuICAgICAgICBvbkVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjdXJGaWVsZCA9IHVuZGVmaW5lZFxuICAgICAgICAgIGlmIChidWZmZXIubGVuZ3RoKSB7IGJ1ZmZlciA9IGRlY29kZVRleHQoYnVmZmVyLCAnYmluYXJ5JywgY2hhcnNldCkgfVxuICAgICAgICAgIGJveS5lbWl0KCdmaWVsZCcsIGZpZWxkbmFtZSwgYnVmZmVyLCBmYWxzZSwgdHJ1bmNhdGVkLCBlbmNvZGluZywgY29udHlwZSlcbiAgICAgICAgICAtLW5lbmRzXG4gICAgICAgICAgY2hlY2tGaW5pc2hlZCgpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLyogQXMgb2Ygbm9kZUAyZWZlNGFiNzYxNjY2ICh2MC4xMC4yOSsvdjAuMTEuMTQrKSwgYnVzYm95IGhhZCBiZWNvbWVcbiAgICAgICAgIGJyb2tlbi4gU3RyZWFtczIvc3RyZWFtczMgaXMgYSBodWdlIGJsYWNrIGJveCBvZiBjb25mdXNpb24sIGJ1dFxuICAgICAgICAgc29tZWhvdyBvdmVycmlkaW5nIHRoZSBzeW5jIHN0YXRlIHNlZW1zIHRvIGZpeCB0aGluZ3MgYWdhaW4gKGFuZCBzdGlsbFxuICAgICAgICAgc2VlbXMgdG8gd29yayBmb3IgcHJldmlvdXMgbm9kZSB2ZXJzaW9ucykuXG4gICAgICAqL1xuICAgICAgcGFydC5fcmVhZGFibGVTdGF0ZS5zeW5jID0gZmFsc2VcblxuICAgICAgcGFydC5vbignZGF0YScsIG9uRGF0YSlcbiAgICAgIHBhcnQub24oJ2VuZCcsIG9uRW5kKVxuICAgIH0pLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgIGlmIChjdXJGaWxlKSB7IGN1ckZpbGUuZW1pdCgnZXJyb3InLCBlcnIpIH1cbiAgICB9KVxuICB9KS5vbignZXJyb3InLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgYm95LmVtaXQoJ2Vycm9yJywgZXJyKVxuICB9KS5vbignZmluaXNoJywgZnVuY3Rpb24gKCkge1xuICAgIGZpbmlzaGVkID0gdHJ1ZVxuICAgIGNoZWNrRmluaXNoZWQoKVxuICB9KVxufVxuXG5NdWx0aXBhcnQucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKGNodW5rLCBjYikge1xuICBjb25zdCByID0gdGhpcy5wYXJzZXIud3JpdGUoY2h1bmspXG4gIGlmIChyICYmICF0aGlzLl9wYXVzZSkge1xuICAgIGNiKClcbiAgfSBlbHNlIHtcbiAgICB0aGlzLl9uZWVkRHJhaW4gPSAhclxuICAgIHRoaXMuX2NiID0gY2JcbiAgfVxufVxuXG5NdWx0aXBhcnQucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgY29uc3Qgc2VsZiA9IHRoaXNcblxuICBpZiAoc2VsZi5wYXJzZXIud3JpdGFibGUpIHtcbiAgICBzZWxmLnBhcnNlci5lbmQoKVxuICB9IGVsc2UgaWYgKCFzZWxmLl9ib3kuX2RvbmUpIHtcbiAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlbGYuX2JveS5fZG9uZSA9IHRydWVcbiAgICAgIHNlbGYuX2JveS5lbWl0KCdmaW5pc2gnKVxuICAgIH0pXG4gIH1cbn1cblxuZnVuY3Rpb24gc2tpcFBhcnQgKHBhcnQpIHtcbiAgcGFydC5yZXN1bWUoKVxufVxuXG5mdW5jdGlvbiBGaWxlU3RyZWFtIChvcHRzKSB7XG4gIFJlYWRhYmxlLmNhbGwodGhpcywgb3B0cylcblxuICB0aGlzLmJ5dGVzUmVhZCA9IDBcblxuICB0aGlzLnRydW5jYXRlZCA9IGZhbHNlXG59XG5cbmluaGVyaXRzKEZpbGVTdHJlYW0sIFJlYWRhYmxlKVxuXG5GaWxlU3RyZWFtLnByb3RvdHlwZS5fcmVhZCA9IGZ1bmN0aW9uIChuKSB7fVxuXG5tb2R1bGUuZXhwb3J0cyA9IE11bHRpcGFydFxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgUkVfUExVUyA9IC9cXCsvZ1xuXG5jb25zdCBIRVggPSBbXG4gIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsXG4gIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsXG4gIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsXG4gIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsXG4gIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsXG4gIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsXG4gIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsXG4gIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBcbl1cblxuZnVuY3Rpb24gRGVjb2RlciAoKSB7XG4gIHRoaXMuYnVmZmVyID0gdW5kZWZpbmVkXG59XG5EZWNvZGVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgLy8gUmVwbGFjZSAnKycgd2l0aCAnICcgYmVmb3JlIGRlY29kaW5nXG4gIHN0ciA9IHN0ci5yZXBsYWNlKFJFX1BMVVMsICcgJylcbiAgbGV0IHJlcyA9ICcnXG4gIGxldCBpID0gMDsgbGV0IHAgPSAwOyBjb25zdCBsZW4gPSBzdHIubGVuZ3RoXG4gIGZvciAoOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAodGhpcy5idWZmZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCFIRVhbc3RyLmNoYXJDb2RlQXQoaSldKSB7XG4gICAgICAgIHJlcyArPSAnJScgKyB0aGlzLmJ1ZmZlclxuICAgICAgICB0aGlzLmJ1ZmZlciA9IHVuZGVmaW5lZFxuICAgICAgICAtLWkgLy8gcmV0cnkgY2hhcmFjdGVyXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmJ1ZmZlciArPSBzdHJbaV1cbiAgICAgICAgKytwXG4gICAgICAgIGlmICh0aGlzLmJ1ZmZlci5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludCh0aGlzLmJ1ZmZlciwgMTYpKVxuICAgICAgICAgIHRoaXMuYnVmZmVyID0gdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHN0cltpXSA9PT0gJyUnKSB7XG4gICAgICBpZiAoaSA+IHApIHtcbiAgICAgICAgcmVzICs9IHN0ci5zdWJzdHJpbmcocCwgaSlcbiAgICAgICAgcCA9IGlcbiAgICAgIH1cbiAgICAgIHRoaXMuYnVmZmVyID0gJydcbiAgICAgICsrcFxuICAgIH1cbiAgfVxuICBpZiAocCA8IGxlbiAmJiB0aGlzLmJ1ZmZlciA9PT0gdW5kZWZpbmVkKSB7IHJlcyArPSBzdHIuc3Vic3RyaW5nKHApIH1cbiAgcmV0dXJuIHJlc1xufVxuRGVjb2Rlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuYnVmZmVyID0gdW5kZWZpbmVkXG59XG5cbm1vZHVsZS5leHBvcnRzID0gRGVjb2RlclxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgRGVjb2RlciA9IHJlcXVpcmUoJy4uL3V0aWxzL0RlY29kZXInKVxuY29uc3QgZGVjb2RlVGV4dCA9IHJlcXVpcmUoJy4uL3V0aWxzL2RlY29kZVRleHQnKVxuY29uc3QgZ2V0TGltaXQgPSByZXF1aXJlKCcuLi91dGlscy9nZXRMaW1pdCcpXG5cbmNvbnN0IFJFX0NIQVJTRVQgPSAvXmNoYXJzZXQkL2lcblxuVXJsRW5jb2RlZC5kZXRlY3QgPSAvXmFwcGxpY2F0aW9uXFwveC13d3ctZm9ybS11cmxlbmNvZGVkL2lcbmZ1bmN0aW9uIFVybEVuY29kZWQgKGJveSwgY2ZnKSB7XG4gIGNvbnN0IGxpbWl0cyA9IGNmZy5saW1pdHNcbiAgY29uc3QgcGFyc2VkQ29uVHlwZSA9IGNmZy5wYXJzZWRDb25UeXBlXG4gIHRoaXMuYm95ID0gYm95XG5cbiAgdGhpcy5maWVsZFNpemVMaW1pdCA9IGdldExpbWl0KGxpbWl0cywgJ2ZpZWxkU2l6ZScsIDEgKiAxMDI0ICogMTAyNClcbiAgdGhpcy5maWVsZE5hbWVTaXplTGltaXQgPSBnZXRMaW1pdChsaW1pdHMsICdmaWVsZE5hbWVTaXplJywgMTAwKVxuICB0aGlzLmZpZWxkc0xpbWl0ID0gZ2V0TGltaXQobGltaXRzLCAnZmllbGRzJywgSW5maW5pdHkpXG5cbiAgbGV0IGNoYXJzZXRcbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHBhcnNlZENvblR5cGUubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby12YXJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJzZWRDb25UeXBlW2ldKSAmJlxuICAgICAgICBSRV9DSEFSU0VULnRlc3QocGFyc2VkQ29uVHlwZVtpXVswXSkpIHtcbiAgICAgIGNoYXJzZXQgPSBwYXJzZWRDb25UeXBlW2ldWzFdLnRvTG93ZXJDYXNlKClcbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaWYgKGNoYXJzZXQgPT09IHVuZGVmaW5lZCkgeyBjaGFyc2V0ID0gY2ZnLmRlZkNoYXJzZXQgfHwgJ3V0ZjgnIH1cblxuICB0aGlzLmRlY29kZXIgPSBuZXcgRGVjb2RlcigpXG4gIHRoaXMuY2hhcnNldCA9IGNoYXJzZXRcbiAgdGhpcy5fZmllbGRzID0gMFxuICB0aGlzLl9zdGF0ZSA9ICdrZXknXG4gIHRoaXMuX2NoZWNraW5nQnl0ZXMgPSB0cnVlXG4gIHRoaXMuX2J5dGVzS2V5ID0gMFxuICB0aGlzLl9ieXRlc1ZhbCA9IDBcbiAgdGhpcy5fa2V5ID0gJydcbiAgdGhpcy5fdmFsID0gJydcbiAgdGhpcy5fa2V5VHJ1bmMgPSBmYWxzZVxuICB0aGlzLl92YWxUcnVuYyA9IGZhbHNlXG4gIHRoaXMuX2hpdExpbWl0ID0gZmFsc2Vcbn1cblxuVXJsRW5jb2RlZC5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiAoZGF0YSwgY2IpIHtcbiAgaWYgKHRoaXMuX2ZpZWxkcyA9PT0gdGhpcy5maWVsZHNMaW1pdCkge1xuICAgIGlmICghdGhpcy5ib3kuaGl0RmllbGRzTGltaXQpIHtcbiAgICAgIHRoaXMuYm95LmhpdEZpZWxkc0xpbWl0ID0gdHJ1ZVxuICAgICAgdGhpcy5ib3kuZW1pdCgnZmllbGRzTGltaXQnKVxuICAgIH1cbiAgICByZXR1cm4gY2IoKVxuICB9XG5cbiAgbGV0IGlkeGVxOyBsZXQgaWR4YW1wOyBsZXQgaTsgbGV0IHAgPSAwOyBjb25zdCBsZW4gPSBkYXRhLmxlbmd0aFxuXG4gIHdoaWxlIChwIDwgbGVuKSB7XG4gICAgaWYgKHRoaXMuX3N0YXRlID09PSAna2V5Jykge1xuICAgICAgaWR4ZXEgPSBpZHhhbXAgPSB1bmRlZmluZWRcbiAgICAgIGZvciAoaSA9IHA7IGkgPCBsZW47ICsraSkge1xuICAgICAgICBpZiAoIXRoaXMuX2NoZWNraW5nQnl0ZXMpIHsgKytwIH1cbiAgICAgICAgaWYgKGRhdGFbaV0gPT09IDB4M0QvKiA9ICovKSB7XG4gICAgICAgICAgaWR4ZXEgPSBpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhW2ldID09PSAweDI2LyogJiAqLykge1xuICAgICAgICAgIGlkeGFtcCA9IGlcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9jaGVja2luZ0J5dGVzICYmIHRoaXMuX2J5dGVzS2V5ID09PSB0aGlzLmZpZWxkTmFtZVNpemVMaW1pdCkge1xuICAgICAgICAgIHRoaXMuX2hpdExpbWl0ID0gdHJ1ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fY2hlY2tpbmdCeXRlcykgeyArK3RoaXMuX2J5dGVzS2V5IH1cbiAgICAgIH1cblxuICAgICAgaWYgKGlkeGVxICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8ga2V5IHdpdGggYXNzaWdubWVudFxuICAgICAgICBpZiAoaWR4ZXEgPiBwKSB7IHRoaXMuX2tleSArPSB0aGlzLmRlY29kZXIud3JpdGUoZGF0YS50b1N0cmluZygnYmluYXJ5JywgcCwgaWR4ZXEpKSB9XG4gICAgICAgIHRoaXMuX3N0YXRlID0gJ3ZhbCdcblxuICAgICAgICB0aGlzLl9oaXRMaW1pdCA9IGZhbHNlXG4gICAgICAgIHRoaXMuX2NoZWNraW5nQnl0ZXMgPSB0cnVlXG4gICAgICAgIHRoaXMuX3ZhbCA9ICcnXG4gICAgICAgIHRoaXMuX2J5dGVzVmFsID0gMFxuICAgICAgICB0aGlzLl92YWxUcnVuYyA9IGZhbHNlXG4gICAgICAgIHRoaXMuZGVjb2Rlci5yZXNldCgpXG5cbiAgICAgICAgcCA9IGlkeGVxICsgMVxuICAgICAgfSBlbHNlIGlmIChpZHhhbXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBrZXkgd2l0aCBubyBhc3NpZ25tZW50XG4gICAgICAgICsrdGhpcy5fZmllbGRzXG4gICAgICAgIGxldCBrZXk7IGNvbnN0IGtleVRydW5jID0gdGhpcy5fa2V5VHJ1bmNcbiAgICAgICAgaWYgKGlkeGFtcCA+IHApIHsga2V5ID0gKHRoaXMuX2tleSArPSB0aGlzLmRlY29kZXIud3JpdGUoZGF0YS50b1N0cmluZygnYmluYXJ5JywgcCwgaWR4YW1wKSkpIH0gZWxzZSB7IGtleSA9IHRoaXMuX2tleSB9XG5cbiAgICAgICAgdGhpcy5faGl0TGltaXQgPSBmYWxzZVxuICAgICAgICB0aGlzLl9jaGVja2luZ0J5dGVzID0gdHJ1ZVxuICAgICAgICB0aGlzLl9rZXkgPSAnJ1xuICAgICAgICB0aGlzLl9ieXRlc0tleSA9IDBcbiAgICAgICAgdGhpcy5fa2V5VHJ1bmMgPSBmYWxzZVxuICAgICAgICB0aGlzLmRlY29kZXIucmVzZXQoKVxuXG4gICAgICAgIGlmIChrZXkubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5ib3kuZW1pdCgnZmllbGQnLCBkZWNvZGVUZXh0KGtleSwgJ2JpbmFyeScsIHRoaXMuY2hhcnNldCksXG4gICAgICAgICAgICAnJyxcbiAgICAgICAgICAgIGtleVRydW5jLFxuICAgICAgICAgICAgZmFsc2UpXG4gICAgICAgIH1cblxuICAgICAgICBwID0gaWR4YW1wICsgMVxuICAgICAgICBpZiAodGhpcy5fZmllbGRzID09PSB0aGlzLmZpZWxkc0xpbWl0KSB7IHJldHVybiBjYigpIH1cbiAgICAgIH0gZWxzZSBpZiAodGhpcy5faGl0TGltaXQpIHtcbiAgICAgICAgLy8gd2UgbWF5IG5vdCBoYXZlIGhpdCB0aGUgYWN0dWFsIGxpbWl0IGlmIHRoZXJlIGFyZSBlbmNvZGVkIGJ5dGVzLi4uXG4gICAgICAgIGlmIChpID4gcCkgeyB0aGlzLl9rZXkgKz0gdGhpcy5kZWNvZGVyLndyaXRlKGRhdGEudG9TdHJpbmcoJ2JpbmFyeScsIHAsIGkpKSB9XG4gICAgICAgIHAgPSBpXG4gICAgICAgIGlmICgodGhpcy5fYnl0ZXNLZXkgPSB0aGlzLl9rZXkubGVuZ3RoKSA9PT0gdGhpcy5maWVsZE5hbWVTaXplTGltaXQpIHtcbiAgICAgICAgICAvLyB5ZXAsIHdlIGFjdHVhbGx5IGRpZCBoaXQgdGhlIGxpbWl0XG4gICAgICAgICAgdGhpcy5fY2hlY2tpbmdCeXRlcyA9IGZhbHNlXG4gICAgICAgICAgdGhpcy5fa2V5VHJ1bmMgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChwIDwgbGVuKSB7IHRoaXMuX2tleSArPSB0aGlzLmRlY29kZXIud3JpdGUoZGF0YS50b1N0cmluZygnYmluYXJ5JywgcCkpIH1cbiAgICAgICAgcCA9IGxlblxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZHhhbXAgPSB1bmRlZmluZWRcbiAgICAgIGZvciAoaSA9IHA7IGkgPCBsZW47ICsraSkge1xuICAgICAgICBpZiAoIXRoaXMuX2NoZWNraW5nQnl0ZXMpIHsgKytwIH1cbiAgICAgICAgaWYgKGRhdGFbaV0gPT09IDB4MjYvKiAmICovKSB7XG4gICAgICAgICAgaWR4YW1wID0gaVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2NoZWNraW5nQnl0ZXMgJiYgdGhpcy5fYnl0ZXNWYWwgPT09IHRoaXMuZmllbGRTaXplTGltaXQpIHtcbiAgICAgICAgICB0aGlzLl9oaXRMaW1pdCA9IHRydWVcbiAgICAgICAgICBicmVha1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2NoZWNraW5nQnl0ZXMpIHsgKyt0aGlzLl9ieXRlc1ZhbCB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpZHhhbXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICArK3RoaXMuX2ZpZWxkc1xuICAgICAgICBpZiAoaWR4YW1wID4gcCkgeyB0aGlzLl92YWwgKz0gdGhpcy5kZWNvZGVyLndyaXRlKGRhdGEudG9TdHJpbmcoJ2JpbmFyeScsIHAsIGlkeGFtcCkpIH1cbiAgICAgICAgdGhpcy5ib3kuZW1pdCgnZmllbGQnLCBkZWNvZGVUZXh0KHRoaXMuX2tleSwgJ2JpbmFyeScsIHRoaXMuY2hhcnNldCksXG4gICAgICAgICAgZGVjb2RlVGV4dCh0aGlzLl92YWwsICdiaW5hcnknLCB0aGlzLmNoYXJzZXQpLFxuICAgICAgICAgIHRoaXMuX2tleVRydW5jLFxuICAgICAgICAgIHRoaXMuX3ZhbFRydW5jKVxuICAgICAgICB0aGlzLl9zdGF0ZSA9ICdrZXknXG5cbiAgICAgICAgdGhpcy5faGl0TGltaXQgPSBmYWxzZVxuICAgICAgICB0aGlzLl9jaGVja2luZ0J5dGVzID0gdHJ1ZVxuICAgICAgICB0aGlzLl9rZXkgPSAnJ1xuICAgICAgICB0aGlzLl9ieXRlc0tleSA9IDBcbiAgICAgICAgdGhpcy5fa2V5VHJ1bmMgPSBmYWxzZVxuICAgICAgICB0aGlzLmRlY29kZXIucmVzZXQoKVxuXG4gICAgICAgIHAgPSBpZHhhbXAgKyAxXG4gICAgICAgIGlmICh0aGlzLl9maWVsZHMgPT09IHRoaXMuZmllbGRzTGltaXQpIHsgcmV0dXJuIGNiKCkgfVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9oaXRMaW1pdCkge1xuICAgICAgICAvLyB3ZSBtYXkgbm90IGhhdmUgaGl0IHRoZSBhY3R1YWwgbGltaXQgaWYgdGhlcmUgYXJlIGVuY29kZWQgYnl0ZXMuLi5cbiAgICAgICAgaWYgKGkgPiBwKSB7IHRoaXMuX3ZhbCArPSB0aGlzLmRlY29kZXIud3JpdGUoZGF0YS50b1N0cmluZygnYmluYXJ5JywgcCwgaSkpIH1cbiAgICAgICAgcCA9IGlcbiAgICAgICAgaWYgKCh0aGlzLl92YWwgPT09ICcnICYmIHRoaXMuZmllbGRTaXplTGltaXQgPT09IDApIHx8XG4gICAgICAgICAgICAodGhpcy5fYnl0ZXNWYWwgPSB0aGlzLl92YWwubGVuZ3RoKSA9PT0gdGhpcy5maWVsZFNpemVMaW1pdCkge1xuICAgICAgICAgIC8vIHllcCwgd2UgYWN0dWFsbHkgZGlkIGhpdCB0aGUgbGltaXRcbiAgICAgICAgICB0aGlzLl9jaGVja2luZ0J5dGVzID0gZmFsc2VcbiAgICAgICAgICB0aGlzLl92YWxUcnVuYyA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHAgPCBsZW4pIHsgdGhpcy5fdmFsICs9IHRoaXMuZGVjb2Rlci53cml0ZShkYXRhLnRvU3RyaW5nKCdiaW5hcnknLCBwKSkgfVxuICAgICAgICBwID0gbGVuXG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNiKClcbn1cblxuVXJsRW5jb2RlZC5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5ib3kuX2RvbmUpIHsgcmV0dXJuIH1cblxuICBpZiAodGhpcy5fc3RhdGUgPT09ICdrZXknICYmIHRoaXMuX2tleS5sZW5ndGggPiAwKSB7XG4gICAgdGhpcy5ib3kuZW1pdCgnZmllbGQnLCBkZWNvZGVUZXh0KHRoaXMuX2tleSwgJ2JpbmFyeScsIHRoaXMuY2hhcnNldCksXG4gICAgICAnJyxcbiAgICAgIHRoaXMuX2tleVRydW5jLFxuICAgICAgZmFsc2UpXG4gIH0gZWxzZSBpZiAodGhpcy5fc3RhdGUgPT09ICd2YWwnKSB7XG4gICAgdGhpcy5ib3kuZW1pdCgnZmllbGQnLCBkZWNvZGVUZXh0KHRoaXMuX2tleSwgJ2JpbmFyeScsIHRoaXMuY2hhcnNldCksXG4gICAgICBkZWNvZGVUZXh0KHRoaXMuX3ZhbCwgJ2JpbmFyeScsIHRoaXMuY2hhcnNldCksXG4gICAgICB0aGlzLl9rZXlUcnVuYyxcbiAgICAgIHRoaXMuX3ZhbFRydW5jKVxuICB9XG4gIHRoaXMuYm95Ll9kb25lID0gdHJ1ZVxuICB0aGlzLmJveS5lbWl0KCdmaW5pc2gnKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFVybEVuY29kZWRcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFdyaXRhYmxlU3RyZWFtID0gcmVxdWlyZSgnbm9kZTpzdHJlYW0nKS5Xcml0YWJsZVxuY29uc3QgeyBpbmhlcml0cyB9ID0gcmVxdWlyZSgnbm9kZTp1dGlsJylcbmNvbnN0IERpY2VyID0gcmVxdWlyZSgnLi4vZGVwcy9kaWNlci9saWIvRGljZXInKVxuXG5jb25zdCBNdWx0aXBhcnRQYXJzZXIgPSByZXF1aXJlKCcuL3R5cGVzL211bHRpcGFydCcpXG5jb25zdCBVcmxlbmNvZGVkUGFyc2VyID0gcmVxdWlyZSgnLi90eXBlcy91cmxlbmNvZGVkJylcbmNvbnN0IHBhcnNlUGFyYW1zID0gcmVxdWlyZSgnLi91dGlscy9wYXJzZVBhcmFtcycpXG5cbmZ1bmN0aW9uIEJ1c2JveSAob3B0cykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQnVzYm95KSkgeyByZXR1cm4gbmV3IEJ1c2JveShvcHRzKSB9XG5cbiAgaWYgKHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0J1c2JveSBleHBlY3RlZCBhbiBvcHRpb25zLU9iamVjdC4nKVxuICB9XG4gIGlmICh0eXBlb2Ygb3B0cy5oZWFkZXJzICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0J1c2JveSBleHBlY3RlZCBhbiBvcHRpb25zLU9iamVjdCB3aXRoIGhlYWRlcnMtYXR0cmlidXRlLicpXG4gIH1cbiAgaWYgKHR5cGVvZiBvcHRzLmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ01pc3NpbmcgQ29udGVudC1UeXBlLWhlYWRlci4nKVxuICB9XG5cbiAgY29uc3Qge1xuICAgIGhlYWRlcnMsXG4gICAgLi4uc3RyZWFtT3B0aW9uc1xuICB9ID0gb3B0c1xuXG4gIHRoaXMub3B0cyA9IHtcbiAgICBhdXRvRGVzdHJveTogZmFsc2UsXG4gICAgLi4uc3RyZWFtT3B0aW9uc1xuICB9XG4gIFdyaXRhYmxlU3RyZWFtLmNhbGwodGhpcywgdGhpcy5vcHRzKVxuXG4gIHRoaXMuX2RvbmUgPSBmYWxzZVxuICB0aGlzLl9wYXJzZXIgPSB0aGlzLmdldFBhcnNlckJ5SGVhZGVycyhoZWFkZXJzKVxuICB0aGlzLl9maW5pc2hlZCA9IGZhbHNlXG59XG5pbmhlcml0cyhCdXNib3ksIFdyaXRhYmxlU3RyZWFtKVxuXG5CdXNib3kucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiAoZXYpIHtcbiAgaWYgKGV2ID09PSAnZmluaXNoJykge1xuICAgIGlmICghdGhpcy5fZG9uZSkge1xuICAgICAgdGhpcy5fcGFyc2VyPy5lbmQoKVxuICAgICAgcmV0dXJuXG4gICAgfSBlbHNlIGlmICh0aGlzLl9maW5pc2hlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHRoaXMuX2ZpbmlzaGVkID0gdHJ1ZVxuICB9XG4gIFdyaXRhYmxlU3RyZWFtLnByb3RvdHlwZS5lbWl0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbn1cblxuQnVzYm95LnByb3RvdHlwZS5nZXRQYXJzZXJCeUhlYWRlcnMgPSBmdW5jdGlvbiAoaGVhZGVycykge1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZVBhcmFtcyhoZWFkZXJzWydjb250ZW50LXR5cGUnXSlcblxuICBjb25zdCBjZmcgPSB7XG4gICAgZGVmQ2hhcnNldDogdGhpcy5vcHRzLmRlZkNoYXJzZXQsXG4gICAgZmlsZUh3bTogdGhpcy5vcHRzLmZpbGVId20sXG4gICAgaGVhZGVycyxcbiAgICBoaWdoV2F0ZXJNYXJrOiB0aGlzLm9wdHMuaGlnaFdhdGVyTWFyayxcbiAgICBpc1BhcnRBRmlsZTogdGhpcy5vcHRzLmlzUGFydEFGaWxlLFxuICAgIGxpbWl0czogdGhpcy5vcHRzLmxpbWl0cyxcbiAgICBwYXJzZWRDb25UeXBlOiBwYXJzZWQsXG4gICAgcHJlc2VydmVQYXRoOiB0aGlzLm9wdHMucHJlc2VydmVQYXRoXG4gIH1cblxuICBpZiAoTXVsdGlwYXJ0UGFyc2VyLmRldGVjdC50ZXN0KHBhcnNlZFswXSkpIHtcbiAgICByZXR1cm4gbmV3IE11bHRpcGFydFBhcnNlcih0aGlzLCBjZmcpXG4gIH1cbiAgaWYgKFVybGVuY29kZWRQYXJzZXIuZGV0ZWN0LnRlc3QocGFyc2VkWzBdKSkge1xuICAgIHJldHVybiBuZXcgVXJsZW5jb2RlZFBhcnNlcih0aGlzLCBjZmcpXG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBDb250ZW50LVR5cGUuJylcbn1cblxuQnVzYm95LnByb3RvdHlwZS5fd3JpdGUgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICB0aGlzLl9wYXJzZXIud3JpdGUoY2h1bmssIGNiKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEJ1c2JveVxubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IEJ1c2JveVxubW9kdWxlLmV4cG9ydHMuQnVzYm95ID0gQnVzYm95XG5cbm1vZHVsZS5leHBvcnRzLkRpY2VyID0gRGljZXJcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgTWVzc2FnZUNoYW5uZWwsIHJlY2VpdmVNZXNzYWdlT25Qb3J0IH0gPSByZXF1aXJlKCd3b3JrZXJfdGhyZWFkcycpXG5cbmNvbnN0IGNvcnNTYWZlTGlzdGVkTWV0aG9kcyA9IFsnR0VUJywgJ0hFQUQnLCAnUE9TVCddXG5jb25zdCBjb3JzU2FmZUxpc3RlZE1ldGhvZHNTZXQgPSBuZXcgU2V0KGNvcnNTYWZlTGlzdGVkTWV0aG9kcylcblxuY29uc3QgbnVsbEJvZHlTdGF0dXMgPSBbMTAxLCAyMDQsIDIwNSwgMzA0XVxuXG5jb25zdCByZWRpcmVjdFN0YXR1cyA9IFszMDEsIDMwMiwgMzAzLCAzMDcsIDMwOF1cbmNvbnN0IHJlZGlyZWN0U3RhdHVzU2V0ID0gbmV3IFNldChyZWRpcmVjdFN0YXR1cylcblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2Jsb2NrLWJhZC1wb3J0XG5jb25zdCBiYWRQb3J0cyA9IFtcbiAgJzEnLCAnNycsICc5JywgJzExJywgJzEzJywgJzE1JywgJzE3JywgJzE5JywgJzIwJywgJzIxJywgJzIyJywgJzIzJywgJzI1JywgJzM3JywgJzQyJywgJzQzJywgJzUzJywgJzY5JywgJzc3JywgJzc5JyxcbiAgJzg3JywgJzk1JywgJzEwMScsICcxMDInLCAnMTAzJywgJzEwNCcsICcxMDknLCAnMTEwJywgJzExMScsICcxMTMnLCAnMTE1JywgJzExNycsICcxMTknLCAnMTIzJywgJzEzNScsICcxMzcnLFxuICAnMTM5JywgJzE0MycsICcxNjEnLCAnMTc5JywgJzM4OScsICc0MjcnLCAnNDY1JywgJzUxMicsICc1MTMnLCAnNTE0JywgJzUxNScsICc1MjYnLCAnNTMwJywgJzUzMScsICc1MzInLFxuICAnNTQwJywgJzU0OCcsICc1NTQnLCAnNTU2JywgJzU2MycsICc1ODcnLCAnNjAxJywgJzYzNicsICc5ODknLCAnOTkwJywgJzk5MycsICc5OTUnLCAnMTcxOScsICcxNzIwJywgJzE3MjMnLFxuICAnMjA0OScsICczNjU5JywgJzQwNDUnLCAnNTA2MCcsICc1MDYxJywgJzYwMDAnLCAnNjU2NicsICc2NjY1JywgJzY2NjYnLCAnNjY2NycsICc2NjY4JywgJzY2NjknLCAnNjY5NycsXG4gICcxMDA4MCdcbl1cblxuY29uc3QgYmFkUG9ydHNTZXQgPSBuZXcgU2V0KGJhZFBvcnRzKVxuXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLXJlZmVycmVyLXBvbGljeS8jcmVmZXJyZXItcG9saWNpZXNcbmNvbnN0IHJlZmVycmVyUG9saWN5ID0gW1xuICAnJyxcbiAgJ25vLXJlZmVycmVyJyxcbiAgJ25vLXJlZmVycmVyLXdoZW4tZG93bmdyYWRlJyxcbiAgJ3NhbWUtb3JpZ2luJyxcbiAgJ29yaWdpbicsXG4gICdzdHJpY3Qtb3JpZ2luJyxcbiAgJ29yaWdpbi13aGVuLWNyb3NzLW9yaWdpbicsXG4gICdzdHJpY3Qtb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luJyxcbiAgJ3Vuc2FmZS11cmwnXG5dXG5jb25zdCByZWZlcnJlclBvbGljeVNldCA9IG5ldyBTZXQocmVmZXJyZXJQb2xpY3kpXG5cbmNvbnN0IHJlcXVlc3RSZWRpcmVjdCA9IFsnZm9sbG93JywgJ21hbnVhbCcsICdlcnJvciddXG5cbmNvbnN0IHNhZmVNZXRob2RzID0gWydHRVQnLCAnSEVBRCcsICdPUFRJT05TJywgJ1RSQUNFJ11cbmNvbnN0IHNhZmVNZXRob2RzU2V0ID0gbmV3IFNldChzYWZlTWV0aG9kcylcblxuY29uc3QgcmVxdWVzdE1vZGUgPSBbJ25hdmlnYXRlJywgJ3NhbWUtb3JpZ2luJywgJ25vLWNvcnMnLCAnY29ycyddXG5cbmNvbnN0IHJlcXVlc3RDcmVkZW50aWFscyA9IFsnb21pdCcsICdzYW1lLW9yaWdpbicsICdpbmNsdWRlJ11cblxuY29uc3QgcmVxdWVzdENhY2hlID0gW1xuICAnZGVmYXVsdCcsXG4gICduby1zdG9yZScsXG4gICdyZWxvYWQnLFxuICAnbm8tY2FjaGUnLFxuICAnZm9yY2UtY2FjaGUnLFxuICAnb25seS1pZi1jYWNoZWQnXG5dXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXF1ZXN0LWJvZHktaGVhZGVyLW5hbWVcbmNvbnN0IHJlcXVlc3RCb2R5SGVhZGVyID0gW1xuICAnY29udGVudC1lbmNvZGluZycsXG4gICdjb250ZW50LWxhbmd1YWdlJyxcbiAgJ2NvbnRlbnQtbG9jYXRpb24nLFxuICAnY29udGVudC10eXBlJyxcbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8yMDIxXG4gIC8vICdDb250ZW50LUxlbmd0aCcgaXMgYSBmb3JiaWRkZW4gaGVhZGVyIG5hbWUsIHdoaWNoIGlzIHR5cGljYWxseVxuICAvLyByZW1vdmVkIGluIHRoZSBIZWFkZXJzIGltcGxlbWVudGF0aW9uLiBIb3dldmVyLCB1bmRpY2kgZG9lc24ndFxuICAvLyBmaWx0ZXIgb3V0IGhlYWRlcnMsIHNvIHdlIGFkZCBpdCBoZXJlLlxuICAnY29udGVudC1sZW5ndGgnXG5dXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNlbnVtZGVmLXJlcXVlc3RkdXBsZXhcbmNvbnN0IHJlcXVlc3REdXBsZXggPSBbXG4gICdoYWxmJ1xuXVxuXG4vLyBodHRwOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmb3JiaWRkZW4tbWV0aG9kXG5jb25zdCBmb3JiaWRkZW5NZXRob2RzID0gWydDT05ORUNUJywgJ1RSQUNFJywgJ1RSQUNLJ11cbmNvbnN0IGZvcmJpZGRlbk1ldGhvZHNTZXQgPSBuZXcgU2V0KGZvcmJpZGRlbk1ldGhvZHMpXG5cbmNvbnN0IHN1YnJlc291cmNlID0gW1xuICAnYXVkaW8nLFxuICAnYXVkaW93b3JrbGV0JyxcbiAgJ2ZvbnQnLFxuICAnaW1hZ2UnLFxuICAnbWFuaWZlc3QnLFxuICAncGFpbnR3b3JrbGV0JyxcbiAgJ3NjcmlwdCcsXG4gICdzdHlsZScsXG4gICd0cmFjaycsXG4gICd2aWRlbycsXG4gICd4c2x0JyxcbiAgJydcbl1cbmNvbnN0IHN1YnJlc291cmNlU2V0ID0gbmV3IFNldChzdWJyZXNvdXJjZSlcblxuLyoqIEB0eXBlIHtnbG9iYWxUaGlzWydET01FeGNlcHRpb24nXX0gKi9cbmNvbnN0IERPTUV4Y2VwdGlvbiA9IGdsb2JhbFRoaXMuRE9NRXhjZXB0aW9uID8/ICgoKSA9PiB7XG4gIC8vIERPTUV4Y2VwdGlvbiB3YXMgb25seSBtYWRlIGEgZ2xvYmFsIGluIE5vZGUgdjE3LjAuMCxcbiAgLy8gYnV0IGZldGNoIHN1cHBvcnRzID49IHYxNi44LlxuICB0cnkge1xuICAgIGF0b2IoJ34nKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKGVycikuY29uc3RydWN0b3JcbiAgfVxufSkoKVxuXG5sZXQgY2hhbm5lbFxuXG4vKiogQHR5cGUge2dsb2JhbFRoaXNbJ3N0cnVjdHVyZWRDbG9uZSddfSAqL1xuY29uc3Qgc3RydWN0dXJlZENsb25lID1cbiAgZ2xvYmFsVGhpcy5zdHJ1Y3R1cmVkQ2xvbmUgPz9cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvYjI3YWUyNGRjYzQyNTFiYWQ3MjZkOWQ4NGJhZjY3OGQxZjcwN2ZlZC9saWIvaW50ZXJuYWwvc3RydWN0dXJlZF9jbG9uZS5qc1xuICAvLyBzdHJ1Y3R1cmVkQ2xvbmUgd2FzIGFkZGVkIGluIHYxNy4wLjAsIGJ1dCBmZXRjaCBzdXBwb3J0cyB2MTYuOFxuICBmdW5jdGlvbiBzdHJ1Y3R1cmVkQ2xvbmUgKHZhbHVlLCBvcHRpb25zID0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ21pc3NpbmcgYXJndW1lbnQnKVxuICAgIH1cblxuICAgIGlmICghY2hhbm5lbCkge1xuICAgICAgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpXG4gICAgfVxuICAgIGNoYW5uZWwucG9ydDEudW5yZWYoKVxuICAgIGNoYW5uZWwucG9ydDIudW5yZWYoKVxuICAgIGNoYW5uZWwucG9ydDEucG9zdE1lc3NhZ2UodmFsdWUsIG9wdGlvbnM/LnRyYW5zZmVyKVxuICAgIHJldHVybiByZWNlaXZlTWVzc2FnZU9uUG9ydChjaGFubmVsLnBvcnQyKS5tZXNzYWdlXG4gIH1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIERPTUV4Y2VwdGlvbixcbiAgc3RydWN0dXJlZENsb25lLFxuICBzdWJyZXNvdXJjZSxcbiAgZm9yYmlkZGVuTWV0aG9kcyxcbiAgcmVxdWVzdEJvZHlIZWFkZXIsXG4gIHJlZmVycmVyUG9saWN5LFxuICByZXF1ZXN0UmVkaXJlY3QsXG4gIHJlcXVlc3RNb2RlLFxuICByZXF1ZXN0Q3JlZGVudGlhbHMsXG4gIHJlcXVlc3RDYWNoZSxcbiAgcmVkaXJlY3RTdGF0dXMsXG4gIGNvcnNTYWZlTGlzdGVkTWV0aG9kcyxcbiAgbnVsbEJvZHlTdGF0dXMsXG4gIHNhZmVNZXRob2RzLFxuICBiYWRQb3J0cyxcbiAgcmVxdWVzdER1cGxleCxcbiAgc3VicmVzb3VyY2VTZXQsXG4gIGJhZFBvcnRzU2V0LFxuICByZWRpcmVjdFN0YXR1c1NldCxcbiAgY29yc1NhZmVMaXN0ZWRNZXRob2RzU2V0LFxuICBzYWZlTWV0aG9kc1NldCxcbiAgZm9yYmlkZGVuTWV0aG9kc1NldCxcbiAgcmVmZXJyZXJQb2xpY3lTZXRcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbi8vIEluIGNhc2Ugb2YgYnJlYWtpbmcgY2hhbmdlcywgaW5jcmVhc2UgdGhlIHZlcnNpb25cbi8vIG51bWJlciB0byBhdm9pZCBjb25mbGljdHMuXG5jb25zdCBnbG9iYWxPcmlnaW4gPSBTeW1ib2wuZm9yKCd1bmRpY2kuZ2xvYmFsT3JpZ2luLjEnKVxuXG5mdW5jdGlvbiBnZXRHbG9iYWxPcmlnaW4gKCkge1xuICByZXR1cm4gZ2xvYmFsVGhpc1tnbG9iYWxPcmlnaW5dXG59XG5cbmZ1bmN0aW9uIHNldEdsb2JhbE9yaWdpbiAobmV3T3JpZ2luKSB7XG4gIGlmIChuZXdPcmlnaW4gPT09IHVuZGVmaW5lZCkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnbG9iYWxUaGlzLCBnbG9iYWxPcmlnaW4sIHtcbiAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZVxuICAgIH0pXG5cbiAgICByZXR1cm5cbiAgfVxuXG4gIGNvbnN0IHBhcnNlZFVSTCA9IG5ldyBVUkwobmV3T3JpZ2luKVxuXG4gIGlmIChwYXJzZWRVUkwucHJvdG9jb2wgIT09ICdodHRwOicgJiYgcGFyc2VkVVJMLnByb3RvY29sICE9PSAnaHR0cHM6Jykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE9ubHkgaHR0cCAmIGh0dHBzIHVybHMgYXJlIGFsbG93ZWQsIHJlY2VpdmVkICR7cGFyc2VkVVJMLnByb3RvY29sfWApXG4gIH1cblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZ2xvYmFsVGhpcywgZ2xvYmFsT3JpZ2luLCB7XG4gICAgdmFsdWU6IHBhcnNlZFVSTCxcbiAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IGZhbHNlXG4gIH0pXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRHbG9iYWxPcmlnaW4sXG4gIHNldEdsb2JhbE9yaWdpblxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyByZWRpcmVjdFN0YXR1c1NldCwgcmVmZXJyZXJQb2xpY3lTZXQ6IHJlZmVycmVyUG9saWN5VG9rZW5zLCBiYWRQb3J0c1NldCB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3QgeyBnZXRHbG9iYWxPcmlnaW4gfSA9IHJlcXVpcmUoJy4vZ2xvYmFsJylcbmNvbnN0IHsgcGVyZm9ybWFuY2UgfSA9IHJlcXVpcmUoJ3BlcmZfaG9va3MnKVxuY29uc3QgeyBpc0Jsb2JMaWtlLCB0b1VTVlN0cmluZywgUmVhZGFibGVTdHJlYW1Gcm9tIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbmNvbnN0IHsgaXNVaW50OEFycmF5IH0gPSByZXF1aXJlKCd1dGlsL3R5cGVzJylcblxubGV0IHN1cHBvcnRlZEhhc2hlcyA9IFtdXG5cbi8vIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvY3J5cHRvLmh0bWwjZGV0ZXJtaW5pbmctaWYtY3J5cHRvLXN1cHBvcnQtaXMtdW5hdmFpbGFibGVcbi8qKiBAdHlwZSB7aW1wb3J0KCdjcnlwdG8nKXx1bmRlZmluZWR9ICovXG5sZXQgY3J5cHRvXG5cbnRyeSB7XG4gIGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpXG4gIGNvbnN0IHBvc3NpYmxlUmVsZXZhbnRIYXNoZXMgPSBbJ3NoYTI1NicsICdzaGEzODQnLCAnc2hhNTEyJ11cbiAgc3VwcG9ydGVkSGFzaGVzID0gY3J5cHRvLmdldEhhc2hlcygpLmZpbHRlcigoaGFzaCkgPT4gcG9zc2libGVSZWxldmFudEhhc2hlcy5pbmNsdWRlcyhoYXNoKSlcbi8qIGM4IGlnbm9yZSBuZXh0IDMgKi9cbn0gY2F0Y2gge1xufVxuXG5mdW5jdGlvbiByZXNwb25zZVVSTCAocmVzcG9uc2UpIHtcbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3Jlc3BvbnNlc1xuICAvLyBBIHJlc3BvbnNlIGhhcyBhbiBhc3NvY2lhdGVkIFVSTC4gSXQgaXMgYSBwb2ludGVyIHRvIHRoZSBsYXN0IFVSTFxuICAvLyBpbiByZXNwb25zZeKAmXMgVVJMIGxpc3QgYW5kIG51bGwgaWYgcmVzcG9uc2XigJlzIFVSTCBsaXN0IGlzIGVtcHR5LlxuICBjb25zdCB1cmxMaXN0ID0gcmVzcG9uc2UudXJsTGlzdFxuICBjb25zdCBsZW5ndGggPSB1cmxMaXN0Lmxlbmd0aFxuICByZXR1cm4gbGVuZ3RoID09PSAwID8gbnVsbCA6IHVybExpc3RbbGVuZ3RoIC0gMV0udG9TdHJpbmcoKVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1yZXNwb25zZS1sb2NhdGlvbi11cmxcbmZ1bmN0aW9uIHJlc3BvbnNlTG9jYXRpb25VUkwgKHJlc3BvbnNlLCByZXF1ZXN0RnJhZ21lbnQpIHtcbiAgLy8gMS4gSWYgcmVzcG9uc2XigJlzIHN0YXR1cyBpcyBub3QgYSByZWRpcmVjdCBzdGF0dXMsIHRoZW4gcmV0dXJuIG51bGwuXG4gIGlmICghcmVkaXJlY3RTdGF0dXNTZXQuaGFzKHJlc3BvbnNlLnN0YXR1cykpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLy8gMi4gTGV0IGxvY2F0aW9uIGJlIHRoZSByZXN1bHQgb2YgZXh0cmFjdGluZyBoZWFkZXIgbGlzdCB2YWx1ZXMgZ2l2ZW5cbiAgLy8gYExvY2F0aW9uYCBhbmQgcmVzcG9uc2XigJlzIGhlYWRlciBsaXN0LlxuICBsZXQgbG9jYXRpb24gPSByZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ2xvY2F0aW9uJylcblxuICAvLyAzLiBJZiBsb2NhdGlvbiBpcyBhIGhlYWRlciB2YWx1ZSwgdGhlbiBzZXQgbG9jYXRpb24gdG8gdGhlIHJlc3VsdCBvZlxuICAvLyAgICBwYXJzaW5nIGxvY2F0aW9uIHdpdGggcmVzcG9uc2XigJlzIFVSTC5cbiAgaWYgKGxvY2F0aW9uICE9PSBudWxsICYmIGlzVmFsaWRIZWFkZXJWYWx1ZShsb2NhdGlvbikpIHtcbiAgICBsb2NhdGlvbiA9IG5ldyBVUkwobG9jYXRpb24sIHJlc3BvbnNlVVJMKHJlc3BvbnNlKSlcbiAgfVxuXG4gIC8vIDQuIElmIGxvY2F0aW9uIGlzIGEgVVJMIHdob3NlIGZyYWdtZW50IGlzIG51bGwsIHRoZW4gc2V0IGxvY2F0aW9u4oCZc1xuICAvLyBmcmFnbWVudCB0byByZXF1ZXN0RnJhZ21lbnQuXG4gIGlmIChsb2NhdGlvbiAmJiAhbG9jYXRpb24uaGFzaCkge1xuICAgIGxvY2F0aW9uLmhhc2ggPSByZXF1ZXN0RnJhZ21lbnRcbiAgfVxuXG4gIC8vIDUuIFJldHVybiBsb2NhdGlvbi5cbiAgcmV0dXJuIGxvY2F0aW9uXG59XG5cbi8qKiBAcmV0dXJucyB7VVJMfSAqL1xuZnVuY3Rpb24gcmVxdWVzdEN1cnJlbnRVUkwgKHJlcXVlc3QpIHtcbiAgcmV0dXJuIHJlcXVlc3QudXJsTGlzdFtyZXF1ZXN0LnVybExpc3QubGVuZ3RoIC0gMV1cbn1cblxuZnVuY3Rpb24gcmVxdWVzdEJhZFBvcnQgKHJlcXVlc3QpIHtcbiAgLy8gMS4gTGV0IHVybCBiZSByZXF1ZXN04oCZcyBjdXJyZW50IFVSTC5cbiAgY29uc3QgdXJsID0gcmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdClcblxuICAvLyAyLiBJZiB1cmzigJlzIHNjaGVtZSBpcyBhbiBIVFRQKFMpIHNjaGVtZSBhbmQgdXJs4oCZcyBwb3J0IGlzIGEgYmFkIHBvcnQsXG4gIC8vIHRoZW4gcmV0dXJuIGJsb2NrZWQuXG4gIGlmICh1cmxJc0h0dHBIdHRwc1NjaGVtZSh1cmwpICYmIGJhZFBvcnRzU2V0Lmhhcyh1cmwucG9ydCkpIHtcbiAgICByZXR1cm4gJ2Jsb2NrZWQnXG4gIH1cblxuICAvLyAzLiBSZXR1cm4gYWxsb3dlZC5cbiAgcmV0dXJuICdhbGxvd2VkJ1xufVxuXG5mdW5jdGlvbiBpc0Vycm9yTGlrZSAob2JqZWN0KSB7XG4gIHJldHVybiBvYmplY3QgaW5zdGFuY2VvZiBFcnJvciB8fCAoXG4gICAgb2JqZWN0Py5jb25zdHJ1Y3Rvcj8ubmFtZSA9PT0gJ0Vycm9yJyB8fFxuICAgIG9iamVjdD8uY29uc3RydWN0b3I/Lm5hbWUgPT09ICdET01FeGNlcHRpb24nXG4gIClcbn1cblxuLy8gQ2hlY2sgd2hldGhlciB8c3RhdHVzVGV4dHwgaXMgYSBCeXRlU3RyaW5nIGFuZFxuLy8gbWF0Y2hlcyB0aGUgUmVhc29uLVBocmFzZSB0b2tlbiBwcm9kdWN0aW9uLlxuLy8gUkZDIDI2MTY6IGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyNjE2XG4vLyBSRkMgNzIzMDogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzBcbi8vIFwicmVhc29uLXBocmFzZSA9ICooIEhUQUIgLyBTUCAvIFZDSEFSIC8gb2JzLXRleHQgKVwiXG4vLyBodHRwczovL2dpdGh1Yi5jb20vY2hyb21pdW0vY2hyb21pdW0vYmxvYi85NC4wLjQ2MDQuMS90aGlyZF9wYXJ0eS9ibGluay9yZW5kZXJlci9jb3JlL2ZldGNoL3Jlc3BvbnNlLmNjI0wxMTZcbmZ1bmN0aW9uIGlzVmFsaWRSZWFzb25QaHJhc2UgKHN0YXR1c1RleHQpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdGF0dXNUZXh0Lmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgYyA9IHN0YXR1c1RleHQuY2hhckNvZGVBdChpKVxuICAgIGlmIChcbiAgICAgICEoXG4gICAgICAgIChcbiAgICAgICAgICBjID09PSAweDA5IHx8IC8vIEhUQUJcbiAgICAgICAgICAoYyA+PSAweDIwICYmIGMgPD0gMHg3ZSkgfHwgLy8gU1AgLyBWQ0hBUlxuICAgICAgICAgIChjID49IDB4ODAgJiYgYyA8PSAweGZmKVxuICAgICAgICApIC8vIG9icy10ZXh0XG4gICAgICApXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4yLjZcbiAqIEBwYXJhbSB7bnVtYmVyfSBjXG4gKi9cbmZ1bmN0aW9uIGlzVG9rZW5DaGFyQ29kZSAoYykge1xuICBzd2l0Y2ggKGMpIHtcbiAgICBjYXNlIDB4MjI6XG4gICAgY2FzZSAweDI4OlxuICAgIGNhc2UgMHgyOTpcbiAgICBjYXNlIDB4MmM6XG4gICAgY2FzZSAweDJmOlxuICAgIGNhc2UgMHgzYTpcbiAgICBjYXNlIDB4M2I6XG4gICAgY2FzZSAweDNjOlxuICAgIGNhc2UgMHgzZDpcbiAgICBjYXNlIDB4M2U6XG4gICAgY2FzZSAweDNmOlxuICAgIGNhc2UgMHg0MDpcbiAgICBjYXNlIDB4NWI6XG4gICAgY2FzZSAweDVjOlxuICAgIGNhc2UgMHg1ZDpcbiAgICBjYXNlIDB4N2I6XG4gICAgY2FzZSAweDdkOlxuICAgICAgLy8gRFFVT1RFIGFuZCBcIigpLC86Ozw9Pj9AW1xcXXt9XCJcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBWQ0hBUiAleDIxLTdFXG4gICAgICByZXR1cm4gYyA+PSAweDIxICYmIGMgPD0gMHg3ZVxuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGNoYXJhY3RlcnNcbiAqL1xuZnVuY3Rpb24gaXNWYWxpZEhUVFBUb2tlbiAoY2hhcmFjdGVycykge1xuICBpZiAoY2hhcmFjdGVycy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGNoYXJhY3RlcnMubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoIWlzVG9rZW5DaGFyQ29kZShjaGFyYWN0ZXJzLmNoYXJDb2RlQXQoaSkpKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNoZWFkZXItbmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IHBvdGVudGlhbFZhbHVlXG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRIZWFkZXJOYW1lIChwb3RlbnRpYWxWYWx1ZSkge1xuICByZXR1cm4gaXNWYWxpZEhUVFBUb2tlbihwb3RlbnRpYWxWYWx1ZSlcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNoZWFkZXItdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBwb3RlbnRpYWxWYWx1ZVxuICovXG5mdW5jdGlvbiBpc1ZhbGlkSGVhZGVyVmFsdWUgKHBvdGVudGlhbFZhbHVlKSB7XG4gIC8vIC0gSGFzIG5vIGxlYWRpbmcgb3IgdHJhaWxpbmcgSFRUUCB0YWIgb3Igc3BhY2UgYnl0ZXMuXG4gIC8vIC0gQ29udGFpbnMgbm8gMHgwMCAoTlVMKSBvciBIVFRQIG5ld2xpbmUgYnl0ZXMuXG4gIGlmIChcbiAgICBwb3RlbnRpYWxWYWx1ZS5zdGFydHNXaXRoKCdcXHQnKSB8fFxuICAgIHBvdGVudGlhbFZhbHVlLnN0YXJ0c1dpdGgoJyAnKSB8fFxuICAgIHBvdGVudGlhbFZhbHVlLmVuZHNXaXRoKCdcXHQnKSB8fFxuICAgIHBvdGVudGlhbFZhbHVlLmVuZHNXaXRoKCcgJylcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBpZiAoXG4gICAgcG90ZW50aWFsVmFsdWUuaW5jbHVkZXMoJ1xcMCcpIHx8XG4gICAgcG90ZW50aWFsVmFsdWUuaW5jbHVkZXMoJ1xccicpIHx8XG4gICAgcG90ZW50aWFsVmFsdWUuaW5jbHVkZXMoJ1xcbicpXG4gICkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1yZWZlcnJlci1wb2xpY3kvI3NldC1yZXF1ZXN0cy1yZWZlcnJlci1wb2xpY3ktb24tcmVkaXJlY3RcbmZ1bmN0aW9uIHNldFJlcXVlc3RSZWZlcnJlclBvbGljeU9uUmVkaXJlY3QgKHJlcXVlc3QsIGFjdHVhbFJlc3BvbnNlKSB7XG4gIC8vICBHaXZlbiBhIHJlcXVlc3QgcmVxdWVzdCBhbmQgYSByZXNwb25zZSBhY3R1YWxSZXNwb25zZSwgdGhpcyBhbGdvcml0aG1cbiAgLy8gIHVwZGF0ZXMgcmVxdWVzdOKAmXMgcmVmZXJyZXIgcG9saWN5IGFjY29yZGluZyB0byB0aGUgUmVmZXJyZXItUG9saWN5XG4gIC8vICBoZWFkZXIgKGlmIGFueSkgaW4gYWN0dWFsUmVzcG9uc2UuXG5cbiAgLy8gMS4gTGV0IHBvbGljeSBiZSB0aGUgcmVzdWx0IG9mIGV4ZWN1dGluZyDCpyA4LjEgUGFyc2UgYSByZWZlcnJlciBwb2xpY3lcbiAgLy8gZnJvbSBhIFJlZmVycmVyLVBvbGljeSBoZWFkZXIgb24gYWN0dWFsUmVzcG9uc2UuXG5cbiAgLy8gOC4xIFBhcnNlIGEgcmVmZXJyZXIgcG9saWN5IGZyb20gYSBSZWZlcnJlci1Qb2xpY3kgaGVhZGVyXG4gIC8vIDEuIExldCBwb2xpY3ktdG9rZW5zIGJlIHRoZSByZXN1bHQgb2YgZXh0cmFjdGluZyBoZWFkZXIgbGlzdCB2YWx1ZXMgZ2l2ZW4gYFJlZmVycmVyLVBvbGljeWAgYW5kIHJlc3BvbnNl4oCZcyBoZWFkZXIgbGlzdC5cbiAgY29uc3QgeyBoZWFkZXJzTGlzdCB9ID0gYWN0dWFsUmVzcG9uc2VcbiAgLy8gMi4gTGV0IHBvbGljeSBiZSB0aGUgZW1wdHkgc3RyaW5nLlxuICAvLyAzLiBGb3IgZWFjaCB0b2tlbiBpbiBwb2xpY3ktdG9rZW5zLCBpZiB0b2tlbiBpcyBhIHJlZmVycmVyIHBvbGljeSBhbmQgdG9rZW4gaXMgbm90IHRoZSBlbXB0eSBzdHJpbmcsIHRoZW4gc2V0IHBvbGljeSB0byB0b2tlbi5cbiAgLy8gNC4gUmV0dXJuIHBvbGljeS5cbiAgY29uc3QgcG9saWN5SGVhZGVyID0gKGhlYWRlcnNMaXN0LmdldCgncmVmZXJyZXItcG9saWN5JykgPz8gJycpLnNwbGl0KCcsJylcblxuICAvLyBOb3RlOiBBcyB0aGUgcmVmZXJyZXItcG9saWN5IGNhbiBjb250YWluIG11bHRpcGxlIHBvbGljaWVzXG4gIC8vIHNlcGFyYXRlZCBieSBjb21tYSwgd2UgbmVlZCB0byBsb29wIHRocm91Z2ggYWxsIG9mIHRoZW1cbiAgLy8gYW5kIHBpY2sgdGhlIGZpcnN0IHZhbGlkIG9uZS5cbiAgLy8gUmVmOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvUmVmZXJyZXItUG9saWN5I3NwZWNpZnlfYV9mYWxsYmFja19wb2xpY3lcbiAgbGV0IHBvbGljeSA9ICcnXG4gIGlmIChwb2xpY3lIZWFkZXIubGVuZ3RoID4gMCkge1xuICAgIC8vIFRoZSByaWdodC1tb3N0IHBvbGljeSB0YWtlcyBwcmVjZWRlbmNlLlxuICAgIC8vIFRoZSBsZWZ0LW1vc3QgcG9saWN5IGlzIHRoZSBmYWxsYmFjay5cbiAgICBmb3IgKGxldCBpID0gcG9saWN5SGVhZGVyLmxlbmd0aDsgaSAhPT0gMDsgaS0tKSB7XG4gICAgICBjb25zdCB0b2tlbiA9IHBvbGljeUhlYWRlcltpIC0gMV0udHJpbSgpXG4gICAgICBpZiAocmVmZXJyZXJQb2xpY3lUb2tlbnMuaGFzKHRva2VuKSkge1xuICAgICAgICBwb2xpY3kgPSB0b2tlblxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIDIuIElmIHBvbGljeSBpcyBub3QgdGhlIGVtcHR5IHN0cmluZywgdGhlbiBzZXQgcmVxdWVzdOKAmXMgcmVmZXJyZXIgcG9saWN5IHRvIHBvbGljeS5cbiAgaWYgKHBvbGljeSAhPT0gJycpIHtcbiAgICByZXF1ZXN0LnJlZmVycmVyUG9saWN5ID0gcG9saWN5XG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2Nyb3NzLW9yaWdpbi1yZXNvdXJjZS1wb2xpY3ktY2hlY2tcbmZ1bmN0aW9uIGNyb3NzT3JpZ2luUmVzb3VyY2VQb2xpY3lDaGVjayAoKSB7XG4gIC8vIFRPRE9cbiAgcmV0dXJuICdhbGxvd2VkJ1xufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1jb3JzLWNoZWNrXG5mdW5jdGlvbiBjb3JzQ2hlY2sgKCkge1xuICAvLyBUT0RPXG4gIHJldHVybiAnc3VjY2Vzcydcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtdGFvLWNoZWNrXG5mdW5jdGlvbiBUQU9DaGVjayAoKSB7XG4gIC8vIFRPRE9cbiAgcmV0dXJuICdzdWNjZXNzJ1xufVxuXG5mdW5jdGlvbiBhcHBlbmRGZXRjaE1ldGFkYXRhIChodHRwUmVxdWVzdCkge1xuICAvLyAgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1mZXRjaC1tZXRhZGF0YS8jc2VjLWZldGNoLWRlc3QtaGVhZGVyXG4gIC8vICBUT0RPXG5cbiAgLy8gIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtZmV0Y2gtbWV0YWRhdGEvI3NlYy1mZXRjaC1tb2RlLWhlYWRlclxuXG4gIC8vICAxLiBBc3NlcnQ6IHLigJlzIHVybCBpcyBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTC5cbiAgLy8gIFRPRE9cblxuICAvLyAgMi4gTGV0IGhlYWRlciBiZSBhIFN0cnVjdHVyZWQgSGVhZGVyIHdob3NlIHZhbHVlIGlzIGEgdG9rZW4uXG4gIGxldCBoZWFkZXIgPSBudWxsXG5cbiAgLy8gIDMuIFNldCBoZWFkZXLigJlzIHZhbHVlIHRvIHLigJlzIG1vZGUuXG4gIGhlYWRlciA9IGh0dHBSZXF1ZXN0Lm1vZGVcblxuICAvLyAgNC4gU2V0IGEgc3RydWN0dXJlZCBmaWVsZCB2YWx1ZSBgU2VjLUZldGNoLU1vZGVgL2hlYWRlciBpbiBy4oCZcyBoZWFkZXIgbGlzdC5cbiAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3Quc2V0KCdzZWMtZmV0Y2gtbW9kZScsIGhlYWRlcilcblxuICAvLyAgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1mZXRjaC1tZXRhZGF0YS8jc2VjLWZldGNoLXNpdGUtaGVhZGVyXG4gIC8vICBUT0RPXG5cbiAgLy8gIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtZmV0Y2gtbWV0YWRhdGEvI3NlYy1mZXRjaC11c2VyLWhlYWRlclxuICAvLyAgVE9ET1xufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYXBwZW5kLWEtcmVxdWVzdC1vcmlnaW4taGVhZGVyXG5mdW5jdGlvbiBhcHBlbmRSZXF1ZXN0T3JpZ2luSGVhZGVyIChyZXF1ZXN0KSB7XG4gIC8vIDEuIExldCBzZXJpYWxpemVkT3JpZ2luIGJlIHRoZSByZXN1bHQgb2YgYnl0ZS1zZXJpYWxpemluZyBhIHJlcXVlc3Qgb3JpZ2luIHdpdGggcmVxdWVzdC5cbiAgbGV0IHNlcmlhbGl6ZWRPcmlnaW4gPSByZXF1ZXN0Lm9yaWdpblxuXG4gIC8vIDIuIElmIHJlcXVlc3TigJlzIHJlc3BvbnNlIHRhaW50aW5nIGlzIFwiY29yc1wiIG9yIHJlcXVlc3TigJlzIG1vZGUgaXMgXCJ3ZWJzb2NrZXRcIiwgdGhlbiBhcHBlbmQgKGBPcmlnaW5gLCBzZXJpYWxpemVkT3JpZ2luKSB0byByZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cbiAgaWYgKHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ2NvcnMnIHx8IHJlcXVlc3QubW9kZSA9PT0gJ3dlYnNvY2tldCcpIHtcbiAgICBpZiAoc2VyaWFsaXplZE9yaWdpbikge1xuICAgICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ29yaWdpbicsIHNlcmlhbGl6ZWRPcmlnaW4pXG4gICAgfVxuXG4gIC8vIDMuIE90aGVyd2lzZSwgaWYgcmVxdWVzdOKAmXMgbWV0aG9kIGlzIG5laXRoZXIgYEdFVGAgbm9yIGBIRUFEYCwgdGhlbjpcbiAgfSBlbHNlIGlmIChyZXF1ZXN0Lm1ldGhvZCAhPT0gJ0dFVCcgJiYgcmVxdWVzdC5tZXRob2QgIT09ICdIRUFEJykge1xuICAgIC8vIDEuIFN3aXRjaCBvbiByZXF1ZXN04oCZcyByZWZlcnJlciBwb2xpY3k6XG4gICAgc3dpdGNoIChyZXF1ZXN0LnJlZmVycmVyUG9saWN5KSB7XG4gICAgICBjYXNlICduby1yZWZlcnJlcic6XG4gICAgICAgIC8vIFNldCBzZXJpYWxpemVkT3JpZ2luIHRvIGBudWxsYC5cbiAgICAgICAgc2VyaWFsaXplZE9yaWdpbiA9IG51bGxcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ25vLXJlZmVycmVyLXdoZW4tZG93bmdyYWRlJzpcbiAgICAgIGNhc2UgJ3N0cmljdC1vcmlnaW4nOlxuICAgICAgY2FzZSAnc3RyaWN0LW9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbic6XG4gICAgICAgIC8vIElmIHJlcXVlc3TigJlzIG9yaWdpbiBpcyBhIHR1cGxlIG9yaWdpbiwgaXRzIHNjaGVtZSBpcyBcImh0dHBzXCIsIGFuZCByZXF1ZXN04oCZcyBjdXJyZW50IFVSTOKAmXMgc2NoZW1lIGlzIG5vdCBcImh0dHBzXCIsIHRoZW4gc2V0IHNlcmlhbGl6ZWRPcmlnaW4gdG8gYG51bGxgLlxuICAgICAgICBpZiAocmVxdWVzdC5vcmlnaW4gJiYgdXJsSGFzSHR0cHNTY2hlbWUocmVxdWVzdC5vcmlnaW4pICYmICF1cmxIYXNIdHRwc1NjaGVtZShyZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KSkpIHtcbiAgICAgICAgICBzZXJpYWxpemVkT3JpZ2luID0gbnVsbFxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdzYW1lLW9yaWdpbic6XG4gICAgICAgIC8vIElmIHJlcXVlc3TigJlzIG9yaWdpbiBpcyBub3Qgc2FtZSBvcmlnaW4gd2l0aCByZXF1ZXN04oCZcyBjdXJyZW50IFVSTOKAmXMgb3JpZ2luLCB0aGVuIHNldCBzZXJpYWxpemVkT3JpZ2luIHRvIGBudWxsYC5cbiAgICAgICAgaWYgKCFzYW1lT3JpZ2luKHJlcXVlc3QsIHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpKSkge1xuICAgICAgICAgIHNlcmlhbGl6ZWRPcmlnaW4gPSBudWxsXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIERvIG5vdGhpbmcuXG4gICAgfVxuXG4gICAgaWYgKHNlcmlhbGl6ZWRPcmlnaW4pIHtcbiAgICAgIC8vIDIuIEFwcGVuZCAoYE9yaWdpbmAsIHNlcmlhbGl6ZWRPcmlnaW4pIHRvIHJlcXVlc3TigJlzIGhlYWRlciBsaXN0LlxuICAgICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ29yaWdpbicsIHNlcmlhbGl6ZWRPcmlnaW4pXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvYXJzZW5lZFNoYXJlZEN1cnJlbnRUaW1lIChjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSkge1xuICAvLyBUT0RPXG4gIHJldHVybiBwZXJmb3JtYW5jZS5ub3coKVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY3JlYXRlLWFuLW9wYXF1ZS10aW1pbmctaW5mb1xuZnVuY3Rpb24gY3JlYXRlT3BhcXVlVGltaW5nSW5mbyAodGltaW5nSW5mbykge1xuICByZXR1cm4ge1xuICAgIHN0YXJ0VGltZTogdGltaW5nSW5mby5zdGFydFRpbWUgPz8gMCxcbiAgICByZWRpcmVjdFN0YXJ0VGltZTogMCxcbiAgICByZWRpcmVjdEVuZFRpbWU6IDAsXG4gICAgcG9zdFJlZGlyZWN0U3RhcnRUaW1lOiB0aW1pbmdJbmZvLnN0YXJ0VGltZSA/PyAwLFxuICAgIGZpbmFsU2VydmljZVdvcmtlclN0YXJ0VGltZTogMCxcbiAgICBmaW5hbE5ldHdvcmtSZXNwb25zZVN0YXJ0VGltZTogMCxcbiAgICBmaW5hbE5ldHdvcmtSZXF1ZXN0U3RhcnRUaW1lOiAwLFxuICAgIGVuZFRpbWU6IDAsXG4gICAgZW5jb2RlZEJvZHlTaXplOiAwLFxuICAgIGRlY29kZWRCb2R5U2l6ZTogMCxcbiAgICBmaW5hbENvbm5lY3Rpb25UaW1pbmdJbmZvOiBudWxsXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvb3JpZ2luLmh0bWwjcG9saWN5LWNvbnRhaW5lclxuZnVuY3Rpb24gbWFrZVBvbGljeUNvbnRhaW5lciAoKSB7XG4gIC8vIE5vdGU6IHRoZSBmZXRjaCBzcGVjIGRvZXNuJ3QgbWFrZSB1c2Ugb2YgZW1iZWRkZXIgcG9saWN5IG9yIENTUCBsaXN0XG4gIHJldHVybiB7XG4gICAgcmVmZXJyZXJQb2xpY3k6ICdzdHJpY3Qtb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luJ1xuICB9XG59XG5cbi8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL29yaWdpbi5odG1sI2Nsb25lLWEtcG9saWN5LWNvbnRhaW5lclxuZnVuY3Rpb24gY2xvbmVQb2xpY3lDb250YWluZXIgKHBvbGljeUNvbnRhaW5lcikge1xuICByZXR1cm4ge1xuICAgIHJlZmVycmVyUG9saWN5OiBwb2xpY3lDb250YWluZXIucmVmZXJyZXJQb2xpY3lcbiAgfVxufVxuXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLXJlZmVycmVyLXBvbGljeS8jZGV0ZXJtaW5lLXJlcXVlc3RzLXJlZmVycmVyXG5mdW5jdGlvbiBkZXRlcm1pbmVSZXF1ZXN0c1JlZmVycmVyIChyZXF1ZXN0KSB7XG4gIC8vIDEuIExldCBwb2xpY3kgYmUgcmVxdWVzdCdzIHJlZmVycmVyIHBvbGljeS5cbiAgY29uc3QgcG9saWN5ID0gcmVxdWVzdC5yZWZlcnJlclBvbGljeVxuXG4gIC8vIE5vdGU6IHBvbGljeSBjYW5ub3QgKHNob3VsZG4ndCkgYmUgbnVsbCBvciBhbiBlbXB0eSBzdHJpbmcuXG4gIGFzc2VydChwb2xpY3kpXG5cbiAgLy8gMi4gTGV0IGVudmlyb25tZW50IGJlIHJlcXVlc3TigJlzIGNsaWVudC5cblxuICBsZXQgcmVmZXJyZXJTb3VyY2UgPSBudWxsXG5cbiAgLy8gMy4gU3dpdGNoIG9uIHJlcXVlc3TigJlzIHJlZmVycmVyOlxuICBpZiAocmVxdWVzdC5yZWZlcnJlciA9PT0gJ2NsaWVudCcpIHtcbiAgICAvLyBOb3RlOiBub2RlIGlzbid0IGEgYnJvd3NlciBhbmQgZG9lc24ndCBpbXBsZW1lbnQgZG9jdW1lbnQvaWZyYW1lcyxcbiAgICAvLyBzbyB3ZSBieXBhc3MgdGhpcyBzdGVwIGFuZCByZXBsYWNlIGl0IHdpdGggb3VyIG93bi5cblxuICAgIGNvbnN0IGdsb2JhbE9yaWdpbiA9IGdldEdsb2JhbE9yaWdpbigpXG5cbiAgICBpZiAoIWdsb2JhbE9yaWdpbiB8fCBnbG9iYWxPcmlnaW4ub3JpZ2luID09PSAnbnVsbCcpIHtcbiAgICAgIHJldHVybiAnbm8tcmVmZXJyZXInXG4gICAgfVxuXG4gICAgLy8gbm90ZTogd2UgbmVlZCB0byBjbG9uZSBpdCBhcyBpdCdzIG11dGF0ZWRcbiAgICByZWZlcnJlclNvdXJjZSA9IG5ldyBVUkwoZ2xvYmFsT3JpZ2luKVxuICB9IGVsc2UgaWYgKHJlcXVlc3QucmVmZXJyZXIgaW5zdGFuY2VvZiBVUkwpIHtcbiAgICAvLyBMZXQgcmVmZXJyZXJTb3VyY2UgYmUgcmVxdWVzdOKAmXMgcmVmZXJyZXIuXG4gICAgcmVmZXJyZXJTb3VyY2UgPSByZXF1ZXN0LnJlZmVycmVyXG4gIH1cblxuICAvLyA0LiBMZXQgcmVxdWVzdOKAmXMgcmVmZXJyZXJVUkwgYmUgdGhlIHJlc3VsdCBvZiBzdHJpcHBpbmcgcmVmZXJyZXJTb3VyY2UgZm9yXG4gIC8vICAgIHVzZSBhcyBhIHJlZmVycmVyLlxuICBsZXQgcmVmZXJyZXJVUkwgPSBzdHJpcFVSTEZvclJlZmVycmVyKHJlZmVycmVyU291cmNlKVxuXG4gIC8vIDUuIExldCByZWZlcnJlck9yaWdpbiBiZSB0aGUgcmVzdWx0IG9mIHN0cmlwcGluZyByZWZlcnJlclNvdXJjZSBmb3IgdXNlIGFzXG4gIC8vICAgIGEgcmVmZXJyZXIsIHdpdGggdGhlIG9yaWdpbi1vbmx5IGZsYWcgc2V0IHRvIHRydWUuXG4gIGNvbnN0IHJlZmVycmVyT3JpZ2luID0gc3RyaXBVUkxGb3JSZWZlcnJlcihyZWZlcnJlclNvdXJjZSwgdHJ1ZSlcblxuICAvLyA2LiBJZiB0aGUgcmVzdWx0IG9mIHNlcmlhbGl6aW5nIHJlZmVycmVyVVJMIGlzIGEgc3RyaW5nIHdob3NlIGxlbmd0aCBpc1xuICAvLyAgICBncmVhdGVyIHRoYW4gNDA5Niwgc2V0IHJlZmVycmVyVVJMIHRvIHJlZmVycmVyT3JpZ2luLlxuICBpZiAocmVmZXJyZXJVUkwudG9TdHJpbmcoKS5sZW5ndGggPiA0MDk2KSB7XG4gICAgcmVmZXJyZXJVUkwgPSByZWZlcnJlck9yaWdpblxuICB9XG5cbiAgY29uc3QgYXJlU2FtZU9yaWdpbiA9IHNhbWVPcmlnaW4ocmVxdWVzdCwgcmVmZXJyZXJVUkwpXG4gIGNvbnN0IGlzTm9uUG90ZW50aWFsbHlUcnVzdFdvcnRoeSA9IGlzVVJMUG90ZW50aWFsbHlUcnVzdHdvcnRoeShyZWZlcnJlclVSTCkgJiZcbiAgICAhaXNVUkxQb3RlbnRpYWxseVRydXN0d29ydGh5KHJlcXVlc3QudXJsKVxuXG4gIC8vIDguIEV4ZWN1dGUgdGhlIHN3aXRjaCBzdGF0ZW1lbnRzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHZhbHVlIG9mIHBvbGljeTpcbiAgc3dpdGNoIChwb2xpY3kpIHtcbiAgICBjYXNlICdvcmlnaW4nOiByZXR1cm4gcmVmZXJyZXJPcmlnaW4gIT0gbnVsbCA/IHJlZmVycmVyT3JpZ2luIDogc3RyaXBVUkxGb3JSZWZlcnJlcihyZWZlcnJlclNvdXJjZSwgdHJ1ZSlcbiAgICBjYXNlICd1bnNhZmUtdXJsJzogcmV0dXJuIHJlZmVycmVyVVJMXG4gICAgY2FzZSAnc2FtZS1vcmlnaW4nOlxuICAgICAgcmV0dXJuIGFyZVNhbWVPcmlnaW4gPyByZWZlcnJlck9yaWdpbiA6ICduby1yZWZlcnJlcidcbiAgICBjYXNlICdvcmlnaW4td2hlbi1jcm9zcy1vcmlnaW4nOlxuICAgICAgcmV0dXJuIGFyZVNhbWVPcmlnaW4gPyByZWZlcnJlclVSTCA6IHJlZmVycmVyT3JpZ2luXG4gICAgY2FzZSAnc3RyaWN0LW9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbic6IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRVUkwgPSByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KVxuXG4gICAgICAvLyAxLiBJZiB0aGUgb3JpZ2luIG9mIHJlZmVycmVyVVJMIGFuZCB0aGUgb3JpZ2luIG9mIHJlcXVlc3TigJlzIGN1cnJlbnRcbiAgICAgIC8vICAgIFVSTCBhcmUgdGhlIHNhbWUsIHRoZW4gcmV0dXJuIHJlZmVycmVyVVJMLlxuICAgICAgaWYgKHNhbWVPcmlnaW4ocmVmZXJyZXJVUkwsIGN1cnJlbnRVUkwpKSB7XG4gICAgICAgIHJldHVybiByZWZlcnJlclVSTFxuICAgICAgfVxuXG4gICAgICAvLyAyLiBJZiByZWZlcnJlclVSTCBpcyBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTCBhbmQgcmVxdWVzdOKAmXNcbiAgICAgIC8vICAgIGN1cnJlbnQgVVJMIGlzIG5vdCBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTCwgdGhlbiByZXR1cm4gbm9cbiAgICAgIC8vICAgIHJlZmVycmVyLlxuICAgICAgaWYgKGlzVVJMUG90ZW50aWFsbHlUcnVzdHdvcnRoeShyZWZlcnJlclVSTCkgJiYgIWlzVVJMUG90ZW50aWFsbHlUcnVzdHdvcnRoeShjdXJyZW50VVJMKSkge1xuICAgICAgICByZXR1cm4gJ25vLXJlZmVycmVyJ1xuICAgICAgfVxuXG4gICAgICAvLyAzLiBSZXR1cm4gcmVmZXJyZXJPcmlnaW4uXG4gICAgICByZXR1cm4gcmVmZXJyZXJPcmlnaW5cbiAgICB9XG4gICAgY2FzZSAnc3RyaWN0LW9yaWdpbic6IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICAgIC8qKlxuICAgICAgICAgKiAxLiBJZiByZWZlcnJlclVSTCBpcyBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTCBhbmRcbiAgICAgICAgICogcmVxdWVzdOKAmXMgY3VycmVudCBVUkwgaXMgbm90IGEgcG90ZW50aWFsbHkgdHJ1c3R3b3J0aHkgVVJMLFxuICAgICAgICAgKiB0aGVuIHJldHVybiBubyByZWZlcnJlci5cbiAgICAgICAgICogMi4gUmV0dXJuIHJlZmVycmVyT3JpZ2luXG4gICAgICAgICovXG4gICAgY2FzZSAnbm8tcmVmZXJyZXItd2hlbi1kb3duZ3JhZGUnOiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICAvKipcbiAgICAgICAqIDEuIElmIHJlZmVycmVyVVJMIGlzIGEgcG90ZW50aWFsbHkgdHJ1c3R3b3J0aHkgVVJMIGFuZFxuICAgICAgICogcmVxdWVzdOKAmXMgY3VycmVudCBVUkwgaXMgbm90IGEgcG90ZW50aWFsbHkgdHJ1c3R3b3J0aHkgVVJMLFxuICAgICAgICogdGhlbiByZXR1cm4gbm8gcmVmZXJyZXIuXG4gICAgICAgKiAyLiBSZXR1cm4gcmVmZXJyZXJPcmlnaW5cbiAgICAgICovXG5cbiAgICBkZWZhdWx0OiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICByZXR1cm4gaXNOb25Qb3RlbnRpYWxseVRydXN0V29ydGh5ID8gJ25vLXJlZmVycmVyJyA6IHJlZmVycmVyT3JpZ2luXG4gIH1cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtcmVmZXJyZXItcG9saWN5LyNzdHJpcC11cmxcbiAqIEBwYXJhbSB7VVJMfSB1cmxcbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IG9yaWdpbk9ubHlcbiAqL1xuZnVuY3Rpb24gc3RyaXBVUkxGb3JSZWZlcnJlciAodXJsLCBvcmlnaW5Pbmx5KSB7XG4gIC8vIDEuIEFzc2VydDogdXJsIGlzIGEgVVJMLlxuICBhc3NlcnQodXJsIGluc3RhbmNlb2YgVVJMKVxuXG4gIC8vIDIuIElmIHVybOKAmXMgc2NoZW1lIGlzIGEgbG9jYWwgc2NoZW1lLCB0aGVuIHJldHVybiBubyByZWZlcnJlci5cbiAgaWYgKHVybC5wcm90b2NvbCA9PT0gJ2ZpbGU6JyB8fCB1cmwucHJvdG9jb2wgPT09ICdhYm91dDonIHx8IHVybC5wcm90b2NvbCA9PT0gJ2JsYW5rOicpIHtcbiAgICByZXR1cm4gJ25vLXJlZmVycmVyJ1xuICB9XG5cbiAgLy8gMy4gU2V0IHVybOKAmXMgdXNlcm5hbWUgdG8gdGhlIGVtcHR5IHN0cmluZy5cbiAgdXJsLnVzZXJuYW1lID0gJydcblxuICAvLyA0LiBTZXQgdXJs4oCZcyBwYXNzd29yZCB0byB0aGUgZW1wdHkgc3RyaW5nLlxuICB1cmwucGFzc3dvcmQgPSAnJ1xuXG4gIC8vIDUuIFNldCB1cmzigJlzIGZyYWdtZW50IHRvIG51bGwuXG4gIHVybC5oYXNoID0gJydcblxuICAvLyA2LiBJZiB0aGUgb3JpZ2luLW9ubHkgZmxhZyBpcyB0cnVlLCB0aGVuOlxuICBpZiAob3JpZ2luT25seSkge1xuICAgIC8vIDEuIFNldCB1cmzigJlzIHBhdGggdG8gwqsgdGhlIGVtcHR5IHN0cmluZyDCuy5cbiAgICB1cmwucGF0aG5hbWUgPSAnJ1xuXG4gICAgLy8gMi4gU2V0IHVybOKAmXMgcXVlcnkgdG8gbnVsbC5cbiAgICB1cmwuc2VhcmNoID0gJydcbiAgfVxuXG4gIC8vIDcuIFJldHVybiB1cmwuXG4gIHJldHVybiB1cmxcbn1cblxuZnVuY3Rpb24gaXNVUkxQb3RlbnRpYWxseVRydXN0d29ydGh5ICh1cmwpIHtcbiAgaWYgKCEodXJsIGluc3RhbmNlb2YgVVJMKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gSWYgY2hpbGQgb2YgYWJvdXQsIHJldHVybiB0cnVlXG4gIGlmICh1cmwuaHJlZiA9PT0gJ2Fib3V0OmJsYW5rJyB8fCB1cmwuaHJlZiA9PT0gJ2Fib3V0OnNyY2RvYycpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gSWYgc2NoZW1lIGlzIGRhdGEsIHJldHVybiB0cnVlXG4gIGlmICh1cmwucHJvdG9jb2wgPT09ICdkYXRhOicpIHJldHVybiB0cnVlXG5cbiAgLy8gSWYgZmlsZSwgcmV0dXJuIHRydWVcbiAgaWYgKHVybC5wcm90b2NvbCA9PT0gJ2ZpbGU6JykgcmV0dXJuIHRydWVcblxuICByZXR1cm4gaXNPcmlnaW5Qb3RlbnRpYWxseVRydXN0d29ydGh5KHVybC5vcmlnaW4pXG5cbiAgZnVuY3Rpb24gaXNPcmlnaW5Qb3RlbnRpYWxseVRydXN0d29ydGh5IChvcmlnaW4pIHtcbiAgICAvLyBJZiBvcmlnaW4gaXMgZXhwbGljaXRseSBudWxsLCByZXR1cm4gZmFsc2VcbiAgICBpZiAob3JpZ2luID09IG51bGwgfHwgb3JpZ2luID09PSAnbnVsbCcpIHJldHVybiBmYWxzZVxuXG4gICAgY29uc3Qgb3JpZ2luQXNVUkwgPSBuZXcgVVJMKG9yaWdpbilcblxuICAgIC8vIElmIHNlY3VyZSwgcmV0dXJuIHRydWVcbiAgICBpZiAob3JpZ2luQXNVUkwucHJvdG9jb2wgPT09ICdodHRwczonIHx8IG9yaWdpbkFzVVJMLnByb3RvY29sID09PSAnd3NzOicpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgLy8gSWYgbG9jYWxob3N0IG9yIHZhcmlhbnRzLCByZXR1cm4gdHJ1ZVxuICAgIGlmICgvXjEyNyg/OlxcLlswLTldKyl7MCwyfVxcLlswLTldKyR8XlxcWyg/OjAqOikqPzo/MCoxXFxdJC8udGVzdChvcmlnaW5Bc1VSTC5ob3N0bmFtZSkgfHxcbiAgICAgKG9yaWdpbkFzVVJMLmhvc3RuYW1lID09PSAnbG9jYWxob3N0JyB8fCBvcmlnaW5Bc1VSTC5ob3N0bmFtZS5pbmNsdWRlcygnbG9jYWxob3N0LicpKSB8fFxuICAgICAob3JpZ2luQXNVUkwuaG9zdG5hbWUuZW5kc1dpdGgoJy5sb2NhbGhvc3QnKSkpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgLy8gSWYgYW55IG90aGVyLCByZXR1cm4gZmFsc2VcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1zdWJyZXNvdXJjZS1pbnRlZ3JpdHkvI2RvZXMtcmVzcG9uc2UtbWF0Y2gtbWV0YWRhdGFsaXN0XG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGJ5dGVzXG4gKiBAcGFyYW0ge3N0cmluZ30gbWV0YWRhdGFMaXN0XG4gKi9cbmZ1bmN0aW9uIGJ5dGVzTWF0Y2ggKGJ5dGVzLCBtZXRhZGF0YUxpc3QpIHtcbiAgLy8gSWYgbm9kZSBpcyBub3QgYnVpbHQgd2l0aCBPcGVuU1NMIHN1cHBvcnQsIHdlIGNhbm5vdCBjaGVja1xuICAvLyBhIHJlcXVlc3QncyBpbnRlZ3JpdHksIHNvIGFsbG93IGl0IGJ5IGRlZmF1bHQgKHRoZSBzcGVjIHdpbGxcbiAgLy8gYWxsb3cgcmVxdWVzdHMgaWYgYW4gaW52YWxpZCBoYXNoIGlzIGdpdmVuLCBhcyBwcmVjZWRlbmNlKS5cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmOiBvbmx5IGlmIG5vZGUgaXMgYnVpbHQgd2l0aCAtLXdpdGhvdXQtc3NsICovXG4gIGlmIChjcnlwdG8gPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyAxLiBMZXQgcGFyc2VkTWV0YWRhdGEgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIG1ldGFkYXRhTGlzdC5cbiAgY29uc3QgcGFyc2VkTWV0YWRhdGEgPSBwYXJzZU1ldGFkYXRhKG1ldGFkYXRhTGlzdClcblxuICAvLyAyLiBJZiBwYXJzZWRNZXRhZGF0YSBpcyBubyBtZXRhZGF0YSwgcmV0dXJuIHRydWUuXG4gIGlmIChwYXJzZWRNZXRhZGF0YSA9PT0gJ25vIG1ldGFkYXRhJykge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyAzLiBJZiByZXNwb25zZSBpcyBub3QgZWxpZ2libGUgZm9yIGludGVncml0eSB2YWxpZGF0aW9uLCByZXR1cm4gZmFsc2UuXG4gIC8vIFRPRE9cblxuICAvLyA0LiBJZiBwYXJzZWRNZXRhZGF0YSBpcyB0aGUgZW1wdHkgc2V0LCByZXR1cm4gdHJ1ZS5cbiAgaWYgKHBhcnNlZE1ldGFkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyA1LiBMZXQgbWV0YWRhdGEgYmUgdGhlIHJlc3VsdCBvZiBnZXR0aW5nIHRoZSBzdHJvbmdlc3RcbiAgLy8gICAgbWV0YWRhdGEgZnJvbSBwYXJzZWRNZXRhZGF0YS5cbiAgY29uc3Qgc3Ryb25nZXN0ID0gZ2V0U3Ryb25nZXN0TWV0YWRhdGEocGFyc2VkTWV0YWRhdGEpXG4gIGNvbnN0IG1ldGFkYXRhID0gZmlsdGVyTWV0YWRhdGFMaXN0QnlBbGdvcml0aG0ocGFyc2VkTWV0YWRhdGEsIHN0cm9uZ2VzdClcblxuICAvLyA2LiBGb3IgZWFjaCBpdGVtIGluIG1ldGFkYXRhOlxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgbWV0YWRhdGEpIHtcbiAgICAvLyAxLiBMZXQgYWxnb3JpdGhtIGJlIHRoZSBhbGcgY29tcG9uZW50IG9mIGl0ZW0uXG4gICAgY29uc3QgYWxnb3JpdGhtID0gaXRlbS5hbGdvXG5cbiAgICAvLyAyLiBMZXQgZXhwZWN0ZWRWYWx1ZSBiZSB0aGUgdmFsIGNvbXBvbmVudCBvZiBpdGVtLlxuICAgIGNvbnN0IGV4cGVjdGVkVmFsdWUgPSBpdGVtLmhhc2hcblxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vd2ViLXBsYXRmb3JtLXRlc3RzL3dwdC9jb21taXQvZTRjNWNjN2E1ZTQ4MDkzMjIwNTI4ZGZkZDFjNDAxMmRjMzgzN2EwZVxuICAgIC8vIFwiYmUgbGliZXJhbCB3aXRoIHBhZGRpbmdcIi4gVGhpcyBpcyBhbm5veWluZywgYW5kIGl0J3Mgbm90IGV2ZW4gaW4gdGhlIHNwZWMuXG5cbiAgICAvLyAzLiBMZXQgYWN0dWFsVmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBhcHBseWluZyBhbGdvcml0aG0gdG8gYnl0ZXMuXG4gICAgbGV0IGFjdHVhbFZhbHVlID0gY3J5cHRvLmNyZWF0ZUhhc2goYWxnb3JpdGhtKS51cGRhdGUoYnl0ZXMpLmRpZ2VzdCgnYmFzZTY0JylcblxuICAgIGlmIChhY3R1YWxWYWx1ZVthY3R1YWxWYWx1ZS5sZW5ndGggLSAxXSA9PT0gJz0nKSB7XG4gICAgICBpZiAoYWN0dWFsVmFsdWVbYWN0dWFsVmFsdWUubGVuZ3RoIC0gMl0gPT09ICc9Jykge1xuICAgICAgICBhY3R1YWxWYWx1ZSA9IGFjdHVhbFZhbHVlLnNsaWNlKDAsIC0yKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWN0dWFsVmFsdWUgPSBhY3R1YWxWYWx1ZS5zbGljZSgwLCAtMSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA0LiBJZiBhY3R1YWxWYWx1ZSBpcyBhIGNhc2Utc2Vuc2l0aXZlIG1hdGNoIGZvciBleHBlY3RlZFZhbHVlLFxuICAgIC8vICAgIHJldHVybiB0cnVlLlxuICAgIGlmIChjb21wYXJlQmFzZTY0TWl4ZWQoYWN0dWFsVmFsdWUsIGV4cGVjdGVkVmFsdWUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxuXG4gIC8vIDcuIFJldHVybiBmYWxzZS5cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtc3VicmVzb3VyY2UtaW50ZWdyaXR5LyNncmFtbWFyZGVmLWhhc2gtd2l0aC1vcHRpb25zXG4vLyBodHRwczovL3d3dy53My5vcmcvVFIvQ1NQMi8jc291cmNlLWxpc3Qtc3ludGF4XG4vLyBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNTIzNCNhcHBlbmRpeC1CLjFcbmNvbnN0IHBhcnNlSGFzaFdpdGhPcHRpb25zID0gLyg/PGFsZ28+c2hhMjU2fHNoYTM4NHxzaGE1MTIpLSgoPzxoYXNoPltBLVphLXowLTkrL10rfFtBLVphLXowLTlfLV0rKT17MCwyfSg/Olxcc3wkKSggK1shLX5dKik/KT8vaVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1zdWJyZXNvdXJjZS1pbnRlZ3JpdHkvI3BhcnNlLW1ldGFkYXRhXG4gKiBAcGFyYW0ge3N0cmluZ30gbWV0YWRhdGFcbiAqL1xuZnVuY3Rpb24gcGFyc2VNZXRhZGF0YSAobWV0YWRhdGEpIHtcbiAgLy8gMS4gTGV0IHJlc3VsdCBiZSB0aGUgZW1wdHkgc2V0LlxuICAvKiogQHR5cGUge3sgYWxnbzogc3RyaW5nLCBoYXNoOiBzdHJpbmcgfVtdfSAqL1xuICBjb25zdCByZXN1bHQgPSBbXVxuXG4gIC8vIDIuIExldCBlbXB0eSBiZSBlcXVhbCB0byB0cnVlLlxuICBsZXQgZW1wdHkgPSB0cnVlXG5cbiAgLy8gMy4gRm9yIGVhY2ggdG9rZW4gcmV0dXJuZWQgYnkgc3BsaXR0aW5nIG1ldGFkYXRhIG9uIHNwYWNlczpcbiAgZm9yIChjb25zdCB0b2tlbiBvZiBtZXRhZGF0YS5zcGxpdCgnICcpKSB7XG4gICAgLy8gMS4gU2V0IGVtcHR5IHRvIGZhbHNlLlxuICAgIGVtcHR5ID0gZmFsc2VcblxuICAgIC8vIDIuIFBhcnNlIHRva2VuIGFzIGEgaGFzaC13aXRoLW9wdGlvbnMuXG4gICAgY29uc3QgcGFyc2VkVG9rZW4gPSBwYXJzZUhhc2hXaXRoT3B0aW9ucy5leGVjKHRva2VuKVxuXG4gICAgLy8gMy4gSWYgdG9rZW4gZG9lcyBub3QgcGFyc2UsIGNvbnRpbnVlIHRvIHRoZSBuZXh0IHRva2VuLlxuICAgIGlmIChcbiAgICAgIHBhcnNlZFRva2VuID09PSBudWxsIHx8XG4gICAgICBwYXJzZWRUb2tlbi5ncm91cHMgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgcGFyc2VkVG9rZW4uZ3JvdXBzLmFsZ28gPT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgLy8gTm90ZTogQ2hyb21pdW0gYmxvY2tzIHRoZSByZXF1ZXN0IGF0IHRoaXMgcG9pbnQsIGJ1dCBGaXJlZm94XG4gICAgICAvLyBnaXZlcyBhIHdhcm5pbmcgdGhhdCBhbiBpbnZhbGlkIGludGVncml0eSB3YXMgZ2l2ZW4uIFRoZVxuICAgICAgLy8gY29ycmVjdCBiZWhhdmlvciBpcyB0byBpZ25vcmUgdGhlc2UsIGFuZCBzdWJzZXF1ZW50bHkgbm90XG4gICAgICAvLyBjaGVjayB0aGUgaW50ZWdyaXR5IG9mIHRoZSByZXNvdXJjZS5cbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgLy8gNC4gTGV0IGFsZ29yaXRobSBiZSB0aGUgaGFzaC1hbGdvIGNvbXBvbmVudCBvZiB0b2tlbi5cbiAgICBjb25zdCBhbGdvcml0aG0gPSBwYXJzZWRUb2tlbi5ncm91cHMuYWxnby50b0xvd2VyQ2FzZSgpXG5cbiAgICAvLyA1LiBJZiBhbGdvcml0aG0gaXMgYSBoYXNoIGZ1bmN0aW9uIHJlY29nbml6ZWQgYnkgdGhlIHVzZXJcbiAgICAvLyAgICBhZ2VudCwgYWRkIHRoZSBwYXJzZWQgdG9rZW4gdG8gcmVzdWx0LlxuICAgIGlmIChzdXBwb3J0ZWRIYXNoZXMuaW5jbHVkZXMoYWxnb3JpdGhtKSkge1xuICAgICAgcmVzdWx0LnB1c2gocGFyc2VkVG9rZW4uZ3JvdXBzKVxuICAgIH1cbiAgfVxuXG4gIC8vIDQuIFJldHVybiBubyBtZXRhZGF0YSBpZiBlbXB0eSBpcyB0cnVlLCBvdGhlcndpc2UgcmV0dXJuIHJlc3VsdC5cbiAgaWYgKGVtcHR5ID09PSB0cnVlKSB7XG4gICAgcmV0dXJuICdubyBtZXRhZGF0YSdcbiAgfVxuXG4gIHJldHVybiByZXN1bHRcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3sgYWxnbzogJ3NoYTI1NicgfCAnc2hhMzg0JyB8ICdzaGE1MTInIH1bXX0gbWV0YWRhdGFMaXN0XG4gKi9cbmZ1bmN0aW9uIGdldFN0cm9uZ2VzdE1ldGFkYXRhIChtZXRhZGF0YUxpc3QpIHtcbiAgLy8gTGV0IGFsZ29yaXRobSBiZSB0aGUgYWxnbyBjb21wb25lbnQgb2YgdGhlIGZpcnN0IGl0ZW0gaW4gbWV0YWRhdGFMaXN0LlxuICAvLyBDYW4gYmUgc2hhMjU2XG4gIGxldCBhbGdvcml0aG0gPSBtZXRhZGF0YUxpc3RbMF0uYWxnb1xuICAvLyBJZiB0aGUgYWxnb3JpdGhtIGlzIHNoYTUxMiwgdGhlbiBpdCBpcyB0aGUgc3Ryb25nZXN0XG4gIC8vIGFuZCB3ZSBjYW4gcmV0dXJuIGltbWVkaWF0ZWx5XG4gIGlmIChhbGdvcml0aG1bM10gPT09ICc1Jykge1xuICAgIHJldHVybiBhbGdvcml0aG1cbiAgfVxuXG4gIGZvciAobGV0IGkgPSAxOyBpIDwgbWV0YWRhdGFMaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgbWV0YWRhdGEgPSBtZXRhZGF0YUxpc3RbaV1cbiAgICAvLyBJZiB0aGUgYWxnb3JpdGhtIGlzIHNoYTUxMiwgdGhlbiBpdCBpcyB0aGUgc3Ryb25nZXN0XG4gICAgLy8gYW5kIHdlIGNhbiBicmVhayB0aGUgbG9vcCBpbW1lZGlhdGVseVxuICAgIGlmIChtZXRhZGF0YS5hbGdvWzNdID09PSAnNScpIHtcbiAgICAgIGFsZ29yaXRobSA9ICdzaGE1MTInXG4gICAgICBicmVha1xuICAgIC8vIElmIHRoZSBhbGdvcml0aG0gaXMgc2hhMzg0LCB0aGVuIGEgcG90ZW50aWFsIHNoYTI1NiBvciBzaGEzODQgaXMgaWdub3JlZFxuICAgIH0gZWxzZSBpZiAoYWxnb3JpdGhtWzNdID09PSAnMycpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgLy8gYWxnb3JpdGhtIGlzIHNoYTI1NiwgY2hlY2sgaWYgYWxnb3JpdGhtIGlzIHNoYTM4NCBhbmQgaWYgc28sIHNldCBpdCBhc1xuICAgIC8vIHRoZSBzdHJvbmdlc3RcbiAgICB9IGVsc2UgaWYgKG1ldGFkYXRhLmFsZ29bM10gPT09ICczJykge1xuICAgICAgYWxnb3JpdGhtID0gJ3NoYTM4NCdcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGFsZ29yaXRobVxufVxuXG5mdW5jdGlvbiBmaWx0ZXJNZXRhZGF0YUxpc3RCeUFsZ29yaXRobSAobWV0YWRhdGFMaXN0LCBhbGdvcml0aG0pIHtcbiAgaWYgKG1ldGFkYXRhTGlzdC5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gbWV0YWRhdGFMaXN0XG4gIH1cblxuICBsZXQgcG9zID0gMFxuICBmb3IgKGxldCBpID0gMDsgaSA8IG1ldGFkYXRhTGlzdC5sZW5ndGg7ICsraSkge1xuICAgIGlmIChtZXRhZGF0YUxpc3RbaV0uYWxnbyA9PT0gYWxnb3JpdGhtKSB7XG4gICAgICBtZXRhZGF0YUxpc3RbcG9zKytdID0gbWV0YWRhdGFMaXN0W2ldXG4gICAgfVxuICB9XG5cbiAgbWV0YWRhdGFMaXN0Lmxlbmd0aCA9IHBvc1xuXG4gIHJldHVybiBtZXRhZGF0YUxpc3Rcbn1cblxuLyoqXG4gKiBDb21wYXJlcyB0d28gYmFzZTY0IHN0cmluZ3MsIGFsbG93aW5nIGZvciBiYXNlNjR1cmxcbiAqIGluIHRoZSBzZWNvbmQgc3RyaW5nLlxuICpcbiogQHBhcmFtIHtzdHJpbmd9IGFjdHVhbFZhbHVlIGFsd2F5cyBiYXNlNjRcbiAqIEBwYXJhbSB7c3RyaW5nfSBleHBlY3RlZFZhbHVlIGJhc2U2NCBvciBiYXNlNjR1cmxcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBjb21wYXJlQmFzZTY0TWl4ZWQgKGFjdHVhbFZhbHVlLCBleHBlY3RlZFZhbHVlKSB7XG4gIGlmIChhY3R1YWxWYWx1ZS5sZW5ndGggIT09IGV4cGVjdGVkVmFsdWUubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhY3R1YWxWYWx1ZS5sZW5ndGg7ICsraSkge1xuICAgIGlmIChhY3R1YWxWYWx1ZVtpXSAhPT0gZXhwZWN0ZWRWYWx1ZVtpXSkge1xuICAgICAgaWYgKFxuICAgICAgICAoYWN0dWFsVmFsdWVbaV0gPT09ICcrJyAmJiBleHBlY3RlZFZhbHVlW2ldID09PSAnLScpIHx8XG4gICAgICAgIChhY3R1YWxWYWx1ZVtpXSA9PT0gJy8nICYmIGV4cGVjdGVkVmFsdWVbaV0gPT09ICdfJylcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy11cGdyYWRlLWluc2VjdXJlLXJlcXVlc3RzLyN1cGdyYWRlLXJlcXVlc3RcbmZ1bmN0aW9uIHRyeVVwZ3JhZGVSZXF1ZXN0VG9BUG90ZW50aWFsbHlUcnVzdHdvcnRoeVVSTCAocmVxdWVzdCkge1xuICAvLyBUT0RPXG59XG5cbi8qKlxuICogQGxpbmsge2h0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL29yaWdpbi5odG1sI3NhbWUtb3JpZ2lufVxuICogQHBhcmFtIHtVUkx9IEFcbiAqIEBwYXJhbSB7VVJMfSBCXG4gKi9cbmZ1bmN0aW9uIHNhbWVPcmlnaW4gKEEsIEIpIHtcbiAgLy8gMS4gSWYgQSBhbmQgQiBhcmUgdGhlIHNhbWUgb3BhcXVlIG9yaWdpbiwgdGhlbiByZXR1cm4gdHJ1ZS5cbiAgaWYgKEEub3JpZ2luID09PSBCLm9yaWdpbiAmJiBBLm9yaWdpbiA9PT0gJ251bGwnKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8vIDIuIElmIEEgYW5kIEIgYXJlIGJvdGggdHVwbGUgb3JpZ2lucyBhbmQgdGhlaXIgc2NoZW1lcyxcbiAgLy8gICAgaG9zdHMsIGFuZCBwb3J0IGFyZSBpZGVudGljYWwsIHRoZW4gcmV0dXJuIHRydWUuXG4gIGlmIChBLnByb3RvY29sID09PSBCLnByb3RvY29sICYmIEEuaG9zdG5hbWUgPT09IEIuaG9zdG5hbWUgJiYgQS5wb3J0ID09PSBCLnBvcnQpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gMy4gUmV0dXJuIGZhbHNlLlxuICByZXR1cm4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gY3JlYXRlRGVmZXJyZWRQcm9taXNlICgpIHtcbiAgbGV0IHJlc1xuICBsZXQgcmVqXG4gIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgcmVzID0gcmVzb2x2ZVxuICAgIHJlaiA9IHJlamVjdFxuICB9KVxuXG4gIHJldHVybiB7IHByb21pc2UsIHJlc29sdmU6IHJlcywgcmVqZWN0OiByZWogfVxufVxuXG5mdW5jdGlvbiBpc0Fib3J0ZWQgKGZldGNoUGFyYW1zKSB7XG4gIHJldHVybiBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnN0YXRlID09PSAnYWJvcnRlZCdcbn1cblxuZnVuY3Rpb24gaXNDYW5jZWxsZWQgKGZldGNoUGFyYW1zKSB7XG4gIHJldHVybiBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnN0YXRlID09PSAnYWJvcnRlZCcgfHxcbiAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnN0YXRlID09PSAndGVybWluYXRlZCdcbn1cblxuY29uc3Qgbm9ybWFsaXplTWV0aG9kUmVjb3JkID0ge1xuICBkZWxldGU6ICdERUxFVEUnLFxuICBERUxFVEU6ICdERUxFVEUnLFxuICBnZXQ6ICdHRVQnLFxuICBHRVQ6ICdHRVQnLFxuICBoZWFkOiAnSEVBRCcsXG4gIEhFQUQ6ICdIRUFEJyxcbiAgb3B0aW9uczogJ09QVElPTlMnLFxuICBPUFRJT05TOiAnT1BUSU9OUycsXG4gIHBvc3Q6ICdQT1NUJyxcbiAgUE9TVDogJ1BPU1QnLFxuICBwdXQ6ICdQVVQnLFxuICBQVVQ6ICdQVVQnXG59XG5cbi8vIE5vdGU6IG9iamVjdCBwcm90b3R5cGVzIHNob3VsZCBub3QgYmUgYWJsZSB0byBiZSByZWZlcmVuY2VkLiBlLmcuIGBPYmplY3QjaGFzT3duUHJvcGVydHlgLlxuT2JqZWN0LnNldFByb3RvdHlwZU9mKG5vcm1hbGl6ZU1ldGhvZFJlY29yZCwgbnVsbClcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LW1ldGhvZC1ub3JtYWxpemVcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2RcbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplTWV0aG9kIChtZXRob2QpIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZU1ldGhvZFJlY29yZFttZXRob2QudG9Mb3dlckNhc2UoKV0gPz8gbWV0aG9kXG59XG5cbi8vIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNzZXJpYWxpemUtYS1qYXZhc2NyaXB0LXZhbHVlLXRvLWEtanNvbi1zdHJpbmdcbmZ1bmN0aW9uIHNlcmlhbGl6ZUphdmFzY3JpcHRWYWx1ZVRvSlNPTlN0cmluZyAodmFsdWUpIHtcbiAgLy8gMS4gTGV0IHJlc3VsdCBiZSA/IENhbGwoJUpTT04uc3RyaW5naWZ5JSwgdW5kZWZpbmVkLCDCqyB2YWx1ZSDCuykuXG4gIGNvbnN0IHJlc3VsdCA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKVxuXG4gIC8vIDIuIElmIHJlc3VsdCBpcyB1bmRlZmluZWQsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1ZhbHVlIGlzIG5vdCBKU09OIHNlcmlhbGl6YWJsZScpXG4gIH1cblxuICAvLyAzLiBBc3NlcnQ6IHJlc3VsdCBpcyBhIHN0cmluZy5cbiAgYXNzZXJ0KHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnKVxuXG4gIC8vIDQuIFJldHVybiByZXN1bHQuXG4gIHJldHVybiByZXN1bHRcbn1cblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0lMjVpdGVyYXRvcnByb3RvdHlwZSUyNS1vYmplY3RcbmNvbnN0IGVzSXRlcmF0b3JQcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoT2JqZWN0LmdldFByb3RvdHlwZU9mKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSkpXG5cbi8qKlxuICogQHNlZSBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2Rmbi1pdGVyYXRvci1wcm90b3R5cGUtb2JqZWN0XG4gKiBAcGFyYW0geygpID0+IHVua25vd25bXX0gaXRlcmF0b3JcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIG5hbWUgb2YgdGhlIGluc3RhbmNlXG4gKiBAcGFyYW0geydrZXknfCd2YWx1ZSd8J2tleSt2YWx1ZSd9IGtpbmRcbiAqL1xuZnVuY3Rpb24gbWFrZUl0ZXJhdG9yIChpdGVyYXRvciwgbmFtZSwga2luZCkge1xuICBjb25zdCBvYmplY3QgPSB7XG4gICAgaW5kZXg6IDAsXG4gICAga2luZCxcbiAgICB0YXJnZXQ6IGl0ZXJhdG9yXG4gIH1cblxuICBjb25zdCBpID0ge1xuICAgIG5leHQgKCkge1xuICAgICAgLy8gMS4gTGV0IGludGVyZmFjZSBiZSB0aGUgaW50ZXJmYWNlIGZvciB3aGljaCB0aGUgaXRlcmF0b3IgcHJvdG90eXBlIG9iamVjdCBleGlzdHMuXG5cbiAgICAgIC8vIDIuIExldCB0aGlzVmFsdWUgYmUgdGhlIHRoaXMgdmFsdWUuXG5cbiAgICAgIC8vIDMuIExldCBvYmplY3QgYmUgPyBUb09iamVjdCh0aGlzVmFsdWUpLlxuXG4gICAgICAvLyA0LiBJZiBvYmplY3QgaXMgYSBwbGF0Zm9ybSBvYmplY3QsIHRoZW4gcGVyZm9ybSBhIHNlY3VyaXR5XG4gICAgICAvLyAgICBjaGVjaywgcGFzc2luZzpcblxuICAgICAgLy8gNS4gSWYgb2JqZWN0IGlzIG5vdCBhIGRlZmF1bHQgaXRlcmF0b3Igb2JqZWN0IGZvciBpbnRlcmZhY2UsXG4gICAgICAvLyAgICB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgaWYgKE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKSAhPT0gaSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgIGAnbmV4dCcgY2FsbGVkIG9uIGFuIG9iamVjdCB0aGF0IGRvZXMgbm90IGltcGxlbWVudCBpbnRlcmZhY2UgJHtuYW1lfSBJdGVyYXRvci5gXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgLy8gNi4gTGV0IGluZGV4IGJlIG9iamVjdOKAmXMgaW5kZXguXG4gICAgICAvLyA3LiBMZXQga2luZCBiZSBvYmplY3TigJlzIGtpbmQuXG4gICAgICAvLyA4LiBMZXQgdmFsdWVzIGJlIG9iamVjdOKAmXMgdGFyZ2V0J3MgdmFsdWUgcGFpcnMgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAgY29uc3QgeyBpbmRleCwga2luZCwgdGFyZ2V0IH0gPSBvYmplY3RcbiAgICAgIGNvbnN0IHZhbHVlcyA9IHRhcmdldCgpXG5cbiAgICAgIC8vIDkuIExldCBsZW4gYmUgdGhlIGxlbmd0aCBvZiB2YWx1ZXMuXG4gICAgICBjb25zdCBsZW4gPSB2YWx1ZXMubGVuZ3RoXG5cbiAgICAgIC8vIDEwLiBJZiBpbmRleCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gbGVuLCB0aGVuIHJldHVyblxuICAgICAgLy8gICAgIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKS5cbiAgICAgIGlmIChpbmRleCA+PSBsZW4pIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9XG4gICAgICB9XG5cbiAgICAgIC8vIDExLiBMZXQgcGFpciBiZSB0aGUgZW50cnkgaW4gdmFsdWVzIGF0IGluZGV4IGluZGV4LlxuICAgICAgY29uc3QgcGFpciA9IHZhbHVlc1tpbmRleF1cblxuICAgICAgLy8gMTIuIFNldCBvYmplY3TigJlzIGluZGV4IHRvIGluZGV4ICsgMS5cbiAgICAgIG9iamVjdC5pbmRleCA9IGluZGV4ICsgMVxuXG4gICAgICAvLyAxMy4gUmV0dXJuIHRoZSBpdGVyYXRvciByZXN1bHQgZm9yIHBhaXIgYW5kIGtpbmQuXG4gICAgICByZXR1cm4gaXRlcmF0b3JSZXN1bHQocGFpciwga2luZClcbiAgICB9LFxuICAgIC8vIFRoZSBjbGFzcyBzdHJpbmcgb2YgYW4gaXRlcmF0b3IgcHJvdG90eXBlIG9iamVjdCBmb3IgYSBnaXZlbiBpbnRlcmZhY2UgaXMgdGhlXG4gICAgLy8gcmVzdWx0IG9mIGNvbmNhdGVuYXRpbmcgdGhlIGlkZW50aWZpZXIgb2YgdGhlIGludGVyZmFjZSBhbmQgdGhlIHN0cmluZyBcIiBJdGVyYXRvclwiLlxuICAgIFtTeW1ib2wudG9TdHJpbmdUYWddOiBgJHtuYW1lfSBJdGVyYXRvcmBcbiAgfVxuXG4gIC8vIFRoZSBbW1Byb3RvdHlwZV1dIGludGVybmFsIHNsb3Qgb2YgYW4gaXRlcmF0b3IgcHJvdG90eXBlIG9iamVjdCBtdXN0IGJlICVJdGVyYXRvclByb3RvdHlwZSUuXG4gIE9iamVjdC5zZXRQcm90b3R5cGVPZihpLCBlc0l0ZXJhdG9yUHJvdG90eXBlKVxuICAvLyBlc0l0ZXJhdG9yUHJvdG90eXBlIG5lZWRzIHRvIGJlIHRoZSBwcm90b3R5cGUgb2YgaVxuICAvLyB3aGljaCBpcyB0aGUgcHJvdG90eXBlIG9mIGFuIGVtcHR5IG9iamVjdC4gWWVzLCBpdCdzIGNvbmZ1c2luZy5cbiAgcmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZih7fSwgaSlcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNpdGVyYXRvci1yZXN1bHRcbmZ1bmN0aW9uIGl0ZXJhdG9yUmVzdWx0IChwYWlyLCBraW5kKSB7XG4gIGxldCByZXN1bHRcblxuICAvLyAxLiBMZXQgcmVzdWx0IGJlIGEgdmFsdWUgZGV0ZXJtaW5lZCBieSB0aGUgdmFsdWUgb2Yga2luZDpcbiAgc3dpdGNoIChraW5kKSB7XG4gICAgY2FzZSAna2V5Jzoge1xuICAgICAgLy8gMS4gTGV0IGlkbEtleSBiZSBwYWly4oCZcyBrZXkuXG4gICAgICAvLyAyLiBMZXQga2V5IGJlIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBpZGxLZXkgdG8gYW5cbiAgICAgIC8vICAgIEVDTUFTY3JpcHQgdmFsdWUuXG4gICAgICAvLyAzLiByZXN1bHQgaXMga2V5LlxuICAgICAgcmVzdWx0ID0gcGFpclswXVxuICAgICAgYnJlYWtcbiAgICB9XG4gICAgY2FzZSAndmFsdWUnOiB7XG4gICAgICAvLyAxLiBMZXQgaWRsVmFsdWUgYmUgcGFpcuKAmXMgdmFsdWUuXG4gICAgICAvLyAyLiBMZXQgdmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIGlkbFZhbHVlIHRvXG4gICAgICAvLyAgICBhbiBFQ01BU2NyaXB0IHZhbHVlLlxuICAgICAgLy8gMy4gcmVzdWx0IGlzIHZhbHVlLlxuICAgICAgcmVzdWx0ID0gcGFpclsxXVxuICAgICAgYnJlYWtcbiAgICB9XG4gICAgY2FzZSAna2V5K3ZhbHVlJzoge1xuICAgICAgLy8gMS4gTGV0IGlkbEtleSBiZSBwYWly4oCZcyBrZXkuXG4gICAgICAvLyAyLiBMZXQgaWRsVmFsdWUgYmUgcGFpcuKAmXMgdmFsdWUuXG4gICAgICAvLyAzLiBMZXQga2V5IGJlIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBpZGxLZXkgdG8gYW5cbiAgICAgIC8vICAgIEVDTUFTY3JpcHQgdmFsdWUuXG4gICAgICAvLyA0LiBMZXQgdmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIGlkbFZhbHVlIHRvXG4gICAgICAvLyAgICBhbiBFQ01BU2NyaXB0IHZhbHVlLlxuICAgICAgLy8gNS4gTGV0IGFycmF5IGJlICEgQXJyYXlDcmVhdGUoMikuXG4gICAgICAvLyA2LiBDYWxsICEgQ3JlYXRlRGF0YVByb3BlcnR5KGFycmF5LCBcIjBcIiwga2V5KS5cbiAgICAgIC8vIDcuIENhbGwgISBDcmVhdGVEYXRhUHJvcGVydHkoYXJyYXksIFwiMVwiLCB2YWx1ZSkuXG4gICAgICAvLyA4LiByZXN1bHQgaXMgYXJyYXkuXG4gICAgICByZXN1bHQgPSBwYWlyXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIC8vIDIuIFJldHVybiBDcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHJlc3VsdCwgZmFsc2UpLlxuICByZXR1cm4geyB2YWx1ZTogcmVzdWx0LCBkb25lOiBmYWxzZSB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYm9keS1mdWxseS1yZWFkXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZ1bGx5UmVhZEJvZHkgKGJvZHksIHByb2Nlc3NCb2R5LCBwcm9jZXNzQm9keUVycm9yKSB7XG4gIC8vIDEuIElmIHRhc2tEZXN0aW5hdGlvbiBpcyBudWxsLCB0aGVuIHNldCB0YXNrRGVzdGluYXRpb24gdG9cbiAgLy8gICAgdGhlIHJlc3VsdCBvZiBzdGFydGluZyBhIG5ldyBwYXJhbGxlbCBxdWV1ZS5cblxuICAvLyAyLiBMZXQgc3VjY2Vzc1N0ZXBzIGdpdmVuIGEgYnl0ZSBzZXF1ZW5jZSBieXRlcyBiZSB0byBxdWV1ZSBhXG4gIC8vICAgIGZldGNoIHRhc2sgdG8gcnVuIHByb2Nlc3NCb2R5IGdpdmVuIGJ5dGVzLCB3aXRoIHRhc2tEZXN0aW5hdGlvbi5cbiAgY29uc3Qgc3VjY2Vzc1N0ZXBzID0gcHJvY2Vzc0JvZHlcblxuICAvLyAzLiBMZXQgZXJyb3JTdGVwcyBiZSB0byBxdWV1ZSBhIGZldGNoIHRhc2sgdG8gcnVuIHByb2Nlc3NCb2R5RXJyb3IsXG4gIC8vICAgIHdpdGggdGFza0Rlc3RpbmF0aW9uLlxuICBjb25zdCBlcnJvclN0ZXBzID0gcHJvY2Vzc0JvZHlFcnJvclxuXG4gIC8vIDQuIExldCByZWFkZXIgYmUgdGhlIHJlc3VsdCBvZiBnZXR0aW5nIGEgcmVhZGVyIGZvciBib2R54oCZcyBzdHJlYW0uXG4gIC8vICAgIElmIHRoYXQgdGhyZXcgYW4gZXhjZXB0aW9uLCB0aGVuIHJ1biBlcnJvclN0ZXBzIHdpdGggdGhhdFxuICAvLyAgICBleGNlcHRpb24gYW5kIHJldHVybi5cbiAgbGV0IHJlYWRlclxuXG4gIHRyeSB7XG4gICAgcmVhZGVyID0gYm9keS5zdHJlYW0uZ2V0UmVhZGVyKClcbiAgfSBjYXRjaCAoZSkge1xuICAgIGVycm9yU3RlcHMoZSlcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIDUuIFJlYWQgYWxsIGJ5dGVzIGZyb20gcmVhZGVyLCBnaXZlbiBzdWNjZXNzU3RlcHMgYW5kIGVycm9yU3RlcHMuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVhZEFsbEJ5dGVzKHJlYWRlcilcbiAgICBzdWNjZXNzU3RlcHMocmVzdWx0KVxuICB9IGNhdGNoIChlKSB7XG4gICAgZXJyb3JTdGVwcyhlKVxuICB9XG59XG5cbi8qKiBAdHlwZSB7UmVhZGFibGVTdHJlYW19ICovXG5sZXQgUmVhZGFibGVTdHJlYW0gPSBnbG9iYWxUaGlzLlJlYWRhYmxlU3RyZWFtXG5cbmZ1bmN0aW9uIGlzUmVhZGFibGVTdHJlYW1MaWtlIChzdHJlYW0pIHtcbiAgaWYgKCFSZWFkYWJsZVN0cmVhbSkge1xuICAgIFJlYWRhYmxlU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtL3dlYicpLlJlYWRhYmxlU3RyZWFtXG4gIH1cblxuICByZXR1cm4gc3RyZWFtIGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW0gfHwgKFxuICAgIHN0cmVhbVtTeW1ib2wudG9TdHJpbmdUYWddID09PSAnUmVhZGFibGVTdHJlYW0nICYmXG4gICAgdHlwZW9mIHN0cmVhbS50ZWUgPT09ICdmdW5jdGlvbidcbiAgKVxufVxuXG5jb25zdCBNQVhJTVVNX0FSR1VNRU5UX0xFTkdUSCA9IDY1NTM1XG5cbi8qKlxuICogQHNlZSBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jaXNvbW9ycGhpYy1kZWNvZGVcbiAqIEBwYXJhbSB7bnVtYmVyW118VWludDhBcnJheX0gaW5wdXRcbiAqL1xuZnVuY3Rpb24gaXNvbW9ycGhpY0RlY29kZSAoaW5wdXQpIHtcbiAgLy8gMS4gVG8gaXNvbW9ycGhpYyBkZWNvZGUgYSBieXRlIHNlcXVlbmNlIGlucHV0LCByZXR1cm4gYSBzdHJpbmcgd2hvc2UgY29kZSBwb2ludFxuICAvLyAgICBsZW5ndGggaXMgZXF1YWwgdG8gaW5wdXTigJlzIGxlbmd0aCBhbmQgd2hvc2UgY29kZSBwb2ludHMgaGF2ZSB0aGUgc2FtZSB2YWx1ZXNcbiAgLy8gICAgYXMgdGhlIHZhbHVlcyBvZiBpbnB1dOKAmXMgYnl0ZXMsIGluIHRoZSBzYW1lIG9yZGVyLlxuXG4gIGlmIChpbnB1dC5sZW5ndGggPCBNQVhJTVVNX0FSR1VNRU5UX0xFTkdUSCkge1xuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKC4uLmlucHV0KVxuICB9XG5cbiAgcmV0dXJuIGlucHV0LnJlZHVjZSgocHJldmlvdXMsIGN1cnJlbnQpID0+IHByZXZpb3VzICsgU3RyaW5nLmZyb21DaGFyQ29kZShjdXJyZW50KSwgJycpXG59XG5cbi8qKlxuICogQHBhcmFtIHtSZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXI8VWludDhBcnJheT59IGNvbnRyb2xsZXJcbiAqL1xuZnVuY3Rpb24gcmVhZGFibGVTdHJlYW1DbG9zZSAoY29udHJvbGxlcikge1xuICB0cnkge1xuICAgIGNvbnRyb2xsZXIuY2xvc2UoKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBUT0RPOiBhZGQgY29tbWVudCBleHBsYWluaW5nIHdoeSB0aGlzIGVycm9yIG9jY3Vycy5cbiAgICBpZiAoIWVyci5tZXNzYWdlLmluY2x1ZGVzKCdDb250cm9sbGVyIGlzIGFscmVhZHkgY2xvc2VkJykpIHtcbiAgICAgIHRocm93IGVyclxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2lzb21vcnBoaWMtZW5jb2RlXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRcbiAqL1xuZnVuY3Rpb24gaXNvbW9ycGhpY0VuY29kZSAoaW5wdXQpIHtcbiAgLy8gMS4gQXNzZXJ0OiBpbnB1dCBjb250YWlucyBubyBjb2RlIHBvaW50cyBncmVhdGVyIHRoYW4gVSswMEZGLlxuICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgYXNzZXJ0KGlucHV0LmNoYXJDb2RlQXQoaSkgPD0gMHhGRilcbiAgfVxuXG4gIC8vIDIuIFJldHVybiBhIGJ5dGUgc2VxdWVuY2Ugd2hvc2UgbGVuZ3RoIGlzIGVxdWFsIHRvIGlucHV04oCZcyBjb2RlXG4gIC8vICAgIHBvaW50IGxlbmd0aCBhbmQgd2hvc2UgYnl0ZXMgaGF2ZSB0aGUgc2FtZSB2YWx1ZXMgYXMgdGhlXG4gIC8vICAgIHZhbHVlcyBvZiBpbnB1dOKAmXMgY29kZSBwb2ludHMsIGluIHRoZSBzYW1lIG9yZGVyXG4gIHJldHVybiBpbnB1dFxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9zdHJlYW1zLnNwZWMud2hhdHdnLm9yZy8jcmVhZGFibGVzdHJlYW1kZWZhdWx0cmVhZGVyLXJlYWQtYWxsLWJ5dGVzXG4gKiBAc2VlIGh0dHBzOi8vc3RyZWFtcy5zcGVjLndoYXR3Zy5vcmcvI3JlYWQtbG9vcFxuICogQHBhcmFtIHtSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXJ9IHJlYWRlclxuICovXG5hc3luYyBmdW5jdGlvbiByZWFkQWxsQnl0ZXMgKHJlYWRlcikge1xuICBjb25zdCBieXRlcyA9IFtdXG4gIGxldCBieXRlTGVuZ3RoID0gMFxuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgeyBkb25lLCB2YWx1ZTogY2h1bmsgfSA9IGF3YWl0IHJlYWRlci5yZWFkKClcblxuICAgIGlmIChkb25lKSB7XG4gICAgICAvLyAxLiBDYWxsIHN1Y2Nlc3NTdGVwcyB3aXRoIGJ5dGVzLlxuICAgICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoYnl0ZXMsIGJ5dGVMZW5ndGgpXG4gICAgfVxuXG4gICAgLy8gMS4gSWYgY2h1bmsgaXMgbm90IGEgVWludDhBcnJheSBvYmplY3QsIGNhbGwgZmFpbHVyZVN0ZXBzXG4gICAgLy8gICAgd2l0aCBhIFR5cGVFcnJvciBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMuXG4gICAgaWYgKCFpc1VpbnQ4QXJyYXkoY2h1bmspKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWNlaXZlZCBub24tVWludDhBcnJheSBjaHVuaycpXG4gICAgfVxuXG4gICAgLy8gMi4gQXBwZW5kIHRoZSBieXRlcyByZXByZXNlbnRlZCBieSBjaHVuayB0byBieXRlcy5cbiAgICBieXRlcy5wdXNoKGNodW5rKVxuICAgIGJ5dGVMZW5ndGggKz0gY2h1bmsubGVuZ3RoXG5cbiAgICAvLyAzLiBSZWFkLWxvb3AgZ2l2ZW4gcmVhZGVyLCBieXRlcywgc3VjY2Vzc1N0ZXBzLCBhbmQgZmFpbHVyZVN0ZXBzLlxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaXMtbG9jYWxcbiAqIEBwYXJhbSB7VVJMfSB1cmxcbiAqL1xuZnVuY3Rpb24gdXJsSXNMb2NhbCAodXJsKSB7XG4gIGFzc2VydCgncHJvdG9jb2wnIGluIHVybCkgLy8gZW5zdXJlIGl0J3MgYSB1cmwgb2JqZWN0XG5cbiAgY29uc3QgcHJvdG9jb2wgPSB1cmwucHJvdG9jb2xcblxuICByZXR1cm4gcHJvdG9jb2wgPT09ICdhYm91dDonIHx8IHByb3RvY29sID09PSAnYmxvYjonIHx8IHByb3RvY29sID09PSAnZGF0YTonXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd8VVJMfSB1cmxcbiAqL1xuZnVuY3Rpb24gdXJsSGFzSHR0cHNTY2hlbWUgKHVybCkge1xuICBpZiAodHlwZW9mIHVybCA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdXJsLnN0YXJ0c1dpdGgoJ2h0dHBzOicpXG4gIH1cblxuICByZXR1cm4gdXJsLnByb3RvY29sID09PSAnaHR0cHM6J1xufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtc2NoZW1lXG4gKiBAcGFyYW0ge1VSTH0gdXJsXG4gKi9cbmZ1bmN0aW9uIHVybElzSHR0cEh0dHBzU2NoZW1lICh1cmwpIHtcbiAgYXNzZXJ0KCdwcm90b2NvbCcgaW4gdXJsKSAvLyBlbnN1cmUgaXQncyBhIHVybCBvYmplY3RcblxuICBjb25zdCBwcm90b2NvbCA9IHVybC5wcm90b2NvbFxuXG4gIHJldHVybiBwcm90b2NvbCA9PT0gJ2h0dHA6JyB8fCBwcm90b2NvbCA9PT0gJ2h0dHBzOidcbn1cblxuLyoqXG4gKiBGZXRjaCBzdXBwb3J0cyBub2RlID49IDE2LjguMCwgYnV0IE9iamVjdC5oYXNPd24gd2FzIGFkZGVkIGluIHYxNi45LjAuXG4gKi9cbmNvbnN0IGhhc093biA9IE9iamVjdC5oYXNPd24gfHwgKChkaWN0LCBrZXkpID0+IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkaWN0LCBrZXkpKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXNBYm9ydGVkLFxuICBpc0NhbmNlbGxlZCxcbiAgY3JlYXRlRGVmZXJyZWRQcm9taXNlLFxuICBSZWFkYWJsZVN0cmVhbUZyb20sXG4gIHRvVVNWU3RyaW5nLFxuICB0cnlVcGdyYWRlUmVxdWVzdFRvQVBvdGVudGlhbGx5VHJ1c3R3b3J0aHlVUkwsXG4gIGNvYXJzZW5lZFNoYXJlZEN1cnJlbnRUaW1lLFxuICBkZXRlcm1pbmVSZXF1ZXN0c1JlZmVycmVyLFxuICBtYWtlUG9saWN5Q29udGFpbmVyLFxuICBjbG9uZVBvbGljeUNvbnRhaW5lcixcbiAgYXBwZW5kRmV0Y2hNZXRhZGF0YSxcbiAgYXBwZW5kUmVxdWVzdE9yaWdpbkhlYWRlcixcbiAgVEFPQ2hlY2ssXG4gIGNvcnNDaGVjayxcbiAgY3Jvc3NPcmlnaW5SZXNvdXJjZVBvbGljeUNoZWNrLFxuICBjcmVhdGVPcGFxdWVUaW1pbmdJbmZvLFxuICBzZXRSZXF1ZXN0UmVmZXJyZXJQb2xpY3lPblJlZGlyZWN0LFxuICBpc1ZhbGlkSFRUUFRva2VuLFxuICByZXF1ZXN0QmFkUG9ydCxcbiAgcmVxdWVzdEN1cnJlbnRVUkwsXG4gIHJlc3BvbnNlVVJMLFxuICByZXNwb25zZUxvY2F0aW9uVVJMLFxuICBpc0Jsb2JMaWtlLFxuICBpc1VSTFBvdGVudGlhbGx5VHJ1c3R3b3J0aHksXG4gIGlzVmFsaWRSZWFzb25QaHJhc2UsXG4gIHNhbWVPcmlnaW4sXG4gIG5vcm1hbGl6ZU1ldGhvZCxcbiAgc2VyaWFsaXplSmF2YXNjcmlwdFZhbHVlVG9KU09OU3RyaW5nLFxuICBtYWtlSXRlcmF0b3IsXG4gIGlzVmFsaWRIZWFkZXJOYW1lLFxuICBpc1ZhbGlkSGVhZGVyVmFsdWUsXG4gIGhhc093bixcbiAgaXNFcnJvckxpa2UsXG4gIGZ1bGx5UmVhZEJvZHksXG4gIGJ5dGVzTWF0Y2gsXG4gIGlzUmVhZGFibGVTdHJlYW1MaWtlLFxuICByZWFkYWJsZVN0cmVhbUNsb3NlLFxuICBpc29tb3JwaGljRW5jb2RlLFxuICBpc29tb3JwaGljRGVjb2RlLFxuICB1cmxJc0xvY2FsLFxuICB1cmxIYXNIdHRwc1NjaGVtZSxcbiAgdXJsSXNIdHRwSHR0cHNTY2hlbWUsXG4gIHJlYWRBbGxCeXRlcyxcbiAgbm9ybWFsaXplTWV0aG9kUmVjb3JkLFxuICBwYXJzZU1ldGFkYXRhXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAga1VybDogU3ltYm9sKCd1cmwnKSxcbiAga0hlYWRlcnM6IFN5bWJvbCgnaGVhZGVycycpLFxuICBrU2lnbmFsOiBTeW1ib2woJ3NpZ25hbCcpLFxuICBrU3RhdGU6IFN5bWJvbCgnc3RhdGUnKSxcbiAga0d1YXJkOiBTeW1ib2woJ2d1YXJkJyksXG4gIGtSZWFsbTogU3ltYm9sKCdyZWFsbScpXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHR5cGVzIH0gPSByZXF1aXJlKCd1dGlsJylcbmNvbnN0IHsgaGFzT3duLCB0b1VTVlN0cmluZyB9ID0gcmVxdWlyZSgnLi91dGlsJylcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4uLy4uL3R5cGVzL3dlYmlkbCcpLldlYmlkbH0gKi9cbmNvbnN0IHdlYmlkbCA9IHt9XG53ZWJpZGwuY29udmVydGVycyA9IHt9XG53ZWJpZGwudXRpbCA9IHt9XG53ZWJpZGwuZXJyb3JzID0ge31cblxud2ViaWRsLmVycm9ycy5leGNlcHRpb24gPSBmdW5jdGlvbiAobWVzc2FnZSkge1xuICByZXR1cm4gbmV3IFR5cGVFcnJvcihgJHttZXNzYWdlLmhlYWRlcn06ICR7bWVzc2FnZS5tZXNzYWdlfWApXG59XG5cbndlYmlkbC5lcnJvcnMuY29udmVyc2lvbkZhaWxlZCA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gIGNvbnN0IHBsdXJhbCA9IGNvbnRleHQudHlwZXMubGVuZ3RoID09PSAxID8gJycgOiAnIG9uZSBvZidcbiAgY29uc3QgbWVzc2FnZSA9XG4gICAgYCR7Y29udGV4dC5hcmd1bWVudH0gY291bGQgbm90IGJlIGNvbnZlcnRlZCB0b2AgK1xuICAgIGAke3BsdXJhbH06ICR7Y29udGV4dC50eXBlcy5qb2luKCcsICcpfS5gXG5cbiAgcmV0dXJuIHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICBoZWFkZXI6IGNvbnRleHQucHJlZml4LFxuICAgIG1lc3NhZ2VcbiAgfSlcbn1cblxud2ViaWRsLmVycm9ycy5pbnZhbGlkQXJndW1lbnQgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuICByZXR1cm4gd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgIGhlYWRlcjogY29udGV4dC5wcmVmaXgsXG4gICAgbWVzc2FnZTogYFwiJHtjb250ZXh0LnZhbHVlfVwiIGlzIGFuIGludmFsaWQgJHtjb250ZXh0LnR5cGV9LmBcbiAgfSlcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNpbXBsZW1lbnRzXG53ZWJpZGwuYnJhbmRDaGVjayA9IGZ1bmN0aW9uIChWLCBJLCBvcHRzID0gdW5kZWZpbmVkKSB7XG4gIGlmIChvcHRzPy5zdHJpY3QgIT09IGZhbHNlICYmICEoViBpbnN0YW5jZW9mIEkpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSWxsZWdhbCBpbnZvY2F0aW9uJylcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gVj8uW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09IEkucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ11cbiAgfVxufVxuXG53ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayA9IGZ1bmN0aW9uICh7IGxlbmd0aCB9LCBtaW4sIGN0eCkge1xuICBpZiAobGVuZ3RoIDwgbWluKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgbWVzc2FnZTogYCR7bWlufSBhcmd1bWVudCR7bWluICE9PSAxID8gJ3MnIDogJyd9IHJlcXVpcmVkLCBgICtcbiAgICAgICAgICAgICAgIGBidXQke2xlbmd0aCA/ICcgb25seScgOiAnJ30gJHtsZW5ndGh9IGZvdW5kLmAsXG4gICAgICAuLi5jdHhcbiAgICB9KVxuICB9XG59XG5cbndlYmlkbC5pbGxlZ2FsQ29uc3RydWN0b3IgPSBmdW5jdGlvbiAoKSB7XG4gIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICBoZWFkZXI6ICdUeXBlRXJyb3InLFxuICAgIG1lc3NhZ2U6ICdJbGxlZ2FsIGNvbnN0cnVjdG9yJ1xuICB9KVxufVxuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWVjbWFzY3JpcHQtZGF0YS10eXBlcy1hbmQtdmFsdWVzXG53ZWJpZGwudXRpbC5UeXBlID0gZnVuY3Rpb24gKFYpIHtcbiAgc3dpdGNoICh0eXBlb2YgVikge1xuICAgIGNhc2UgJ3VuZGVmaW5lZCc6IHJldHVybiAnVW5kZWZpbmVkJ1xuICAgIGNhc2UgJ2Jvb2xlYW4nOiByZXR1cm4gJ0Jvb2xlYW4nXG4gICAgY2FzZSAnc3RyaW5nJzogcmV0dXJuICdTdHJpbmcnXG4gICAgY2FzZSAnc3ltYm9sJzogcmV0dXJuICdTeW1ib2wnXG4gICAgY2FzZSAnbnVtYmVyJzogcmV0dXJuICdOdW1iZXInXG4gICAgY2FzZSAnYmlnaW50JzogcmV0dXJuICdCaWdJbnQnXG4gICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgIGNhc2UgJ29iamVjdCc6IHtcbiAgICAgIGlmIChWID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnTnVsbCdcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICdPYmplY3QnXG4gICAgfVxuICB9XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jYWJzdHJhY3Qtb3BkZWYtY29udmVydHRvaW50XG53ZWJpZGwudXRpbC5Db252ZXJ0VG9JbnQgPSBmdW5jdGlvbiAoViwgYml0TGVuZ3RoLCBzaWduZWRuZXNzLCBvcHRzID0ge30pIHtcbiAgbGV0IHVwcGVyQm91bmRcbiAgbGV0IGxvd2VyQm91bmRcblxuICAvLyAxLiBJZiBiaXRMZW5ndGggaXMgNjQsIHRoZW46XG4gIGlmIChiaXRMZW5ndGggPT09IDY0KSB7XG4gICAgLy8gMS4gTGV0IHVwcGVyQm91bmQgYmUgMl41MyDiiJIgMS5cbiAgICB1cHBlckJvdW5kID0gTWF0aC5wb3coMiwgNTMpIC0gMVxuXG4gICAgLy8gMi4gSWYgc2lnbmVkbmVzcyBpcyBcInVuc2lnbmVkXCIsIHRoZW4gbGV0IGxvd2VyQm91bmQgYmUgMC5cbiAgICBpZiAoc2lnbmVkbmVzcyA9PT0gJ3Vuc2lnbmVkJykge1xuICAgICAgbG93ZXJCb3VuZCA9IDBcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gMy4gT3RoZXJ3aXNlIGxldCBsb3dlckJvdW5kIGJlIOKIkjJeNTMgKyAxLlxuICAgICAgbG93ZXJCb3VuZCA9IE1hdGgucG93KC0yLCA1MykgKyAxXG4gICAgfVxuICB9IGVsc2UgaWYgKHNpZ25lZG5lc3MgPT09ICd1bnNpZ25lZCcpIHtcbiAgICAvLyAyLiBPdGhlcndpc2UsIGlmIHNpZ25lZG5lc3MgaXMgXCJ1bnNpZ25lZFwiLCB0aGVuOlxuXG4gICAgLy8gMS4gTGV0IGxvd2VyQm91bmQgYmUgMC5cbiAgICBsb3dlckJvdW5kID0gMFxuXG4gICAgLy8gMi4gTGV0IHVwcGVyQm91bmQgYmUgMl5iaXRMZW5ndGgg4oiSIDEuXG4gICAgdXBwZXJCb3VuZCA9IE1hdGgucG93KDIsIGJpdExlbmd0aCkgLSAxXG4gIH0gZWxzZSB7XG4gICAgLy8gMy4gT3RoZXJ3aXNlOlxuXG4gICAgLy8gMS4gTGV0IGxvd2VyQm91bmQgYmUgLTJeYml0TGVuZ3RoIOKIkiAxLlxuICAgIGxvd2VyQm91bmQgPSBNYXRoLnBvdygtMiwgYml0TGVuZ3RoKSAtIDFcblxuICAgIC8vIDIuIExldCB1cHBlckJvdW5kIGJlIDJeYml0TGVuZ3RoIOKIkiAxIOKIkiAxLlxuICAgIHVwcGVyQm91bmQgPSBNYXRoLnBvdygyLCBiaXRMZW5ndGggLSAxKSAtIDFcbiAgfVxuXG4gIC8vIDQuIExldCB4IGJlID8gVG9OdW1iZXIoVikuXG4gIGxldCB4ID0gTnVtYmVyKFYpXG5cbiAgLy8gNS4gSWYgeCBpcyDiiJIwLCB0aGVuIHNldCB4IHRvICswLlxuICBpZiAoeCA9PT0gMCkge1xuICAgIHggPSAwXG4gIH1cblxuICAvLyA2LiBJZiB0aGUgY29udmVyc2lvbiBpcyB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtFbmZvcmNlUmFuZ2VdIGV4dGVuZGVkIGF0dHJpYnV0ZSwgdGhlbjpcbiAgaWYgKG9wdHMuZW5mb3JjZVJhbmdlID09PSB0cnVlKSB7XG4gICAgLy8gMS4gSWYgeCBpcyBOYU4sICviiJ4sIG9yIOKIkuKIniwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoXG4gICAgICBOdW1iZXIuaXNOYU4oeCkgfHxcbiAgICAgIHggPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSB8fFxuICAgICAgeCA9PT0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZXG4gICAgKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ0ludGVnZXIgY29udmVyc2lvbicsXG4gICAgICAgIG1lc3NhZ2U6IGBDb3VsZCBub3QgY29udmVydCAke1Z9IHRvIGFuIGludGVnZXIuYFxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAyLiBTZXQgeCB0byBJbnRlZ2VyUGFydCh4KS5cbiAgICB4ID0gd2ViaWRsLnV0aWwuSW50ZWdlclBhcnQoeClcblxuICAgIC8vIDMuIElmIHggPCBsb3dlckJvdW5kIG9yIHggPiB1cHBlckJvdW5kLCB0aGVuXG4gICAgLy8gICAgdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKHggPCBsb3dlckJvdW5kIHx8IHggPiB1cHBlckJvdW5kKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ0ludGVnZXIgY29udmVyc2lvbicsXG4gICAgICAgIG1lc3NhZ2U6IGBWYWx1ZSBtdXN0IGJlIGJldHdlZW4gJHtsb3dlckJvdW5kfS0ke3VwcGVyQm91bmR9LCBnb3QgJHt4fS5gXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDQuIFJldHVybiB4LlxuICAgIHJldHVybiB4XG4gIH1cblxuICAvLyA3LiBJZiB4IGlzIG5vdCBOYU4gYW5kIHRoZSBjb252ZXJzaW9uIGlzIHRvIGFuIElETFxuICAvLyAgICB0eXBlIGFzc29jaWF0ZWQgd2l0aCB0aGUgW0NsYW1wXSBleHRlbmRlZFxuICAvLyAgICBhdHRyaWJ1dGUsIHRoZW46XG4gIGlmICghTnVtYmVyLmlzTmFOKHgpICYmIG9wdHMuY2xhbXAgPT09IHRydWUpIHtcbiAgICAvLyAxLiBTZXQgeCB0byBtaW4obWF4KHgsIGxvd2VyQm91bmQpLCB1cHBlckJvdW5kKS5cbiAgICB4ID0gTWF0aC5taW4oTWF0aC5tYXgoeCwgbG93ZXJCb3VuZCksIHVwcGVyQm91bmQpXG5cbiAgICAvLyAyLiBSb3VuZCB4IHRvIHRoZSBuZWFyZXN0IGludGVnZXIsIGNob29zaW5nIHRoZVxuICAgIC8vICAgIGV2ZW4gaW50ZWdlciBpZiBpdCBsaWVzIGhhbGZ3YXkgYmV0d2VlbiB0d28sXG4gICAgLy8gICAgYW5kIGNob29zaW5nICswIHJhdGhlciB0aGFuIOKIkjAuXG4gICAgaWYgKE1hdGguZmxvb3IoeCkgJSAyID09PSAwKSB7XG4gICAgICB4ID0gTWF0aC5mbG9vcih4KVxuICAgIH0gZWxzZSB7XG4gICAgICB4ID0gTWF0aC5jZWlsKHgpXG4gICAgfVxuXG4gICAgLy8gMy4gUmV0dXJuIHguXG4gICAgcmV0dXJuIHhcbiAgfVxuXG4gIC8vIDguIElmIHggaXMgTmFOLCArMCwgK+KIniwgb3Ig4oiS4oieLCB0aGVuIHJldHVybiArMC5cbiAgaWYgKFxuICAgIE51bWJlci5pc05hTih4KSB8fFxuICAgICh4ID09PSAwICYmIE9iamVjdC5pcygwLCB4KSkgfHxcbiAgICB4ID09PSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkgfHxcbiAgICB4ID09PSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFlcbiAgKSB7XG4gICAgcmV0dXJuIDBcbiAgfVxuXG4gIC8vIDkuIFNldCB4IHRvIEludGVnZXJQYXJ0KHgpLlxuICB4ID0gd2ViaWRsLnV0aWwuSW50ZWdlclBhcnQoeClcblxuICAvLyAxMC4gU2V0IHggdG8geCBtb2R1bG8gMl5iaXRMZW5ndGguXG4gIHggPSB4ICUgTWF0aC5wb3coMiwgYml0TGVuZ3RoKVxuXG4gIC8vIDExLiBJZiBzaWduZWRuZXNzIGlzIFwic2lnbmVkXCIgYW5kIHgg4omlIDJeYml0TGVuZ3RoIOKIkiAxLFxuICAvLyAgICB0aGVuIHJldHVybiB4IOKIkiAyXmJpdExlbmd0aC5cbiAgaWYgKHNpZ25lZG5lc3MgPT09ICdzaWduZWQnICYmIHggPj0gTWF0aC5wb3coMiwgYml0TGVuZ3RoKSAtIDEpIHtcbiAgICByZXR1cm4geCAtIE1hdGgucG93KDIsIGJpdExlbmd0aClcbiAgfVxuXG4gIC8vIDEyLiBPdGhlcndpc2UsIHJldHVybiB4LlxuICByZXR1cm4geFxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2Fic3RyYWN0LW9wZGVmLWludGVnZXJwYXJ0XG53ZWJpZGwudXRpbC5JbnRlZ2VyUGFydCA9IGZ1bmN0aW9uIChuKSB7XG4gIC8vIDEuIExldCByIGJlIGZsb29yKGFicyhuKSkuXG4gIGNvbnN0IHIgPSBNYXRoLmZsb29yKE1hdGguYWJzKG4pKVxuXG4gIC8vIDIuIElmIG4gPCAwLCB0aGVuIHJldHVybiAtMSDDlyByLlxuICBpZiAobiA8IDApIHtcbiAgICByZXR1cm4gLTEgKiByXG4gIH1cblxuICAvLyAzLiBPdGhlcndpc2UsIHJldHVybiByLlxuICByZXR1cm4gclxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLXNlcXVlbmNlXG53ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIgPSBmdW5jdGlvbiAoY29udmVydGVyKSB7XG4gIHJldHVybiAoVikgPT4ge1xuICAgIC8vIDEuIElmIFR5cGUoVikgaXMgbm90IE9iamVjdCwgdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKHdlYmlkbC51dGlsLlR5cGUoVikgIT09ICdPYmplY3QnKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ1NlcXVlbmNlJyxcbiAgICAgICAgbWVzc2FnZTogYFZhbHVlIG9mIHR5cGUgJHt3ZWJpZGwudXRpbC5UeXBlKFYpfSBpcyBub3QgYW4gT2JqZWN0LmBcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gTGV0IG1ldGhvZCBiZSA/IEdldE1ldGhvZChWLCBAQGl0ZXJhdG9yKS5cbiAgICAvKiogQHR5cGUge0dlbmVyYXRvcn0gKi9cbiAgICBjb25zdCBtZXRob2QgPSBWPy5bU3ltYm9sLml0ZXJhdG9yXT8uKClcbiAgICBjb25zdCBzZXEgPSBbXVxuXG4gICAgLy8gMy4gSWYgbWV0aG9kIGlzIHVuZGVmaW5lZCwgdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKFxuICAgICAgbWV0aG9kID09PSB1bmRlZmluZWQgfHxcbiAgICAgIHR5cGVvZiBtZXRob2QubmV4dCAhPT0gJ2Z1bmN0aW9uJ1xuICAgICkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6ICdTZXF1ZW5jZScsXG4gICAgICAgIG1lc3NhZ2U6ICdPYmplY3QgaXMgbm90IGFuIGl0ZXJhdG9yLidcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNjcmVhdGUtc2VxdWVuY2UtZnJvbS1pdGVyYWJsZVxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBtZXRob2QubmV4dCgpXG5cbiAgICAgIGlmIChkb25lKSB7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIHNlcS5wdXNoKGNvbnZlcnRlcih2YWx1ZSkpXG4gICAgfVxuXG4gICAgcmV0dXJuIHNlcVxuICB9XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtdG8tcmVjb3JkXG53ZWJpZGwucmVjb3JkQ29udmVydGVyID0gZnVuY3Rpb24gKGtleUNvbnZlcnRlciwgdmFsdWVDb252ZXJ0ZXIpIHtcbiAgcmV0dXJuIChPKSA9PiB7XG4gICAgLy8gMS4gSWYgVHlwZShPKSBpcyBub3QgT2JqZWN0LCB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAod2ViaWRsLnV0aWwuVHlwZShPKSAhPT0gJ09iamVjdCcpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnUmVjb3JkJyxcbiAgICAgICAgbWVzc2FnZTogYFZhbHVlIG9mIHR5cGUgJHt3ZWJpZGwudXRpbC5UeXBlKE8pfSBpcyBub3QgYW4gT2JqZWN0LmBcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gTGV0IHJlc3VsdCBiZSBhIG5ldyBlbXB0eSBpbnN0YW5jZSBvZiByZWNvcmQ8SywgVj4uXG4gICAgY29uc3QgcmVzdWx0ID0ge31cblxuICAgIGlmICghdHlwZXMuaXNQcm94eShPKSkge1xuICAgICAgLy8gT2JqZWN0LmtleXMgb25seSByZXR1cm5zIGVudW1lcmFibGUgcHJvcGVydGllc1xuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKE8pXG5cbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgLy8gMS4gTGV0IHR5cGVkS2V5IGJlIGtleSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgSy5cbiAgICAgICAgY29uc3QgdHlwZWRLZXkgPSBrZXlDb252ZXJ0ZXIoa2V5KVxuXG4gICAgICAgIC8vIDIuIExldCB2YWx1ZSBiZSA/IEdldChPLCBrZXkpLlxuICAgICAgICAvLyAzLiBMZXQgdHlwZWRWYWx1ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgVi5cbiAgICAgICAgY29uc3QgdHlwZWRWYWx1ZSA9IHZhbHVlQ29udmVydGVyKE9ba2V5XSlcblxuICAgICAgICAvLyA0LiBTZXQgcmVzdWx0W3R5cGVkS2V5XSB0byB0eXBlZFZhbHVlLlxuICAgICAgICByZXN1bHRbdHlwZWRLZXldID0gdHlwZWRWYWx1ZVxuICAgICAgfVxuXG4gICAgICAvLyA1LiBSZXR1cm4gcmVzdWx0LlxuICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH1cblxuICAgIC8vIDMuIExldCBrZXlzIGJlID8gTy5bW093blByb3BlcnR5S2V5c11dKCkuXG4gICAgY29uc3Qga2V5cyA9IFJlZmxlY3Qub3duS2V5cyhPKVxuXG4gICAgLy8gNC4gRm9yIGVhY2gga2V5IG9mIGtleXMuXG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgLy8gMS4gTGV0IGRlc2MgYmUgPyBPLltbR2V0T3duUHJvcGVydHldXShrZXkpLlxuICAgICAgY29uc3QgZGVzYyA9IFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIGtleSlcblxuICAgICAgLy8gMi4gSWYgZGVzYyBpcyBub3QgdW5kZWZpbmVkIGFuZCBkZXNjLltbRW51bWVyYWJsZV1dIGlzIHRydWU6XG4gICAgICBpZiAoZGVzYz8uZW51bWVyYWJsZSkge1xuICAgICAgICAvLyAxLiBMZXQgdHlwZWRLZXkgYmUga2V5IGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBLLlxuICAgICAgICBjb25zdCB0eXBlZEtleSA9IGtleUNvbnZlcnRlcihrZXkpXG5cbiAgICAgICAgLy8gMi4gTGV0IHZhbHVlIGJlID8gR2V0KE8sIGtleSkuXG4gICAgICAgIC8vIDMuIExldCB0eXBlZFZhbHVlIGJlIHZhbHVlIGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBWLlxuICAgICAgICBjb25zdCB0eXBlZFZhbHVlID0gdmFsdWVDb252ZXJ0ZXIoT1trZXldKVxuXG4gICAgICAgIC8vIDQuIFNldCByZXN1bHRbdHlwZWRLZXldIHRvIHR5cGVkVmFsdWUuXG4gICAgICAgIHJlc3VsdFt0eXBlZEtleV0gPSB0eXBlZFZhbHVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNS4gUmV0dXJuIHJlc3VsdC5cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cbn1cblxud2ViaWRsLmludGVyZmFjZUNvbnZlcnRlciA9IGZ1bmN0aW9uIChpKSB7XG4gIHJldHVybiAoViwgb3B0cyA9IHt9KSA9PiB7XG4gICAgaWYgKG9wdHMuc3RyaWN0ICE9PSBmYWxzZSAmJiAhKFYgaW5zdGFuY2VvZiBpKSkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6IGkubmFtZSxcbiAgICAgICAgbWVzc2FnZTogYEV4cGVjdGVkICR7Vn0gdG8gYmUgYW4gaW5zdGFuY2Ugb2YgJHtpLm5hbWV9LmBcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIFZcbiAgfVxufVxuXG53ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlciA9IGZ1bmN0aW9uIChjb252ZXJ0ZXJzKSB7XG4gIHJldHVybiAoZGljdGlvbmFyeSkgPT4ge1xuICAgIGNvbnN0IHR5cGUgPSB3ZWJpZGwudXRpbC5UeXBlKGRpY3Rpb25hcnkpXG4gICAgY29uc3QgZGljdCA9IHt9XG5cbiAgICBpZiAodHlwZSA9PT0gJ051bGwnIHx8IHR5cGUgPT09ICdVbmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gZGljdFxuICAgIH0gZWxzZSBpZiAodHlwZSAhPT0gJ09iamVjdCcpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnRGljdGlvbmFyeScsXG4gICAgICAgIG1lc3NhZ2U6IGBFeHBlY3RlZCAke2RpY3Rpb25hcnl9IHRvIGJlIG9uZSBvZjogTnVsbCwgVW5kZWZpbmVkLCBPYmplY3QuYFxuICAgICAgfSlcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IG9wdGlvbnMgb2YgY29udmVydGVycykge1xuICAgICAgY29uc3QgeyBrZXksIGRlZmF1bHRWYWx1ZSwgcmVxdWlyZWQsIGNvbnZlcnRlciB9ID0gb3B0aW9uc1xuXG4gICAgICBpZiAocmVxdWlyZWQgPT09IHRydWUpIHtcbiAgICAgICAgaWYgKCFoYXNPd24oZGljdGlvbmFyeSwga2V5KSkge1xuICAgICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICAgIGhlYWRlcjogJ0RpY3Rpb25hcnknLFxuICAgICAgICAgICAgbWVzc2FnZTogYE1pc3NpbmcgcmVxdWlyZWQga2V5IFwiJHtrZXl9XCIuYFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGV0IHZhbHVlID0gZGljdGlvbmFyeVtrZXldXG4gICAgICBjb25zdCBoYXNEZWZhdWx0ID0gaGFzT3duKG9wdGlvbnMsICdkZWZhdWx0VmFsdWUnKVxuXG4gICAgICAvLyBPbmx5IHVzZSBkZWZhdWx0VmFsdWUgaWYgdmFsdWUgaXMgdW5kZWZpbmVkIGFuZFxuICAgICAgLy8gYSBkZWZhdWx0VmFsdWUgb3B0aW9ucyB3YXMgcHJvdmlkZWQuXG4gICAgICBpZiAoaGFzRGVmYXVsdCAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlID8/IGRlZmF1bHRWYWx1ZVxuICAgICAgfVxuXG4gICAgICAvLyBBIGtleSBjYW4gYmUgb3B0aW9uYWwgYW5kIGhhdmUgbm8gZGVmYXVsdCB2YWx1ZS5cbiAgICAgIC8vIFdoZW4gdGhpcyBoYXBwZW5zLCBkbyBub3QgcGVyZm9ybSBhIGNvbnZlcnNpb24sXG4gICAgICAvLyBhbmQgZG8gbm90IGFzc2lnbiB0aGUga2V5IGEgdmFsdWUuXG4gICAgICBpZiAocmVxdWlyZWQgfHwgaGFzRGVmYXVsdCB8fCB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhbHVlID0gY29udmVydGVyKHZhbHVlKVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBvcHRpb25zLmFsbG93ZWRWYWx1ZXMgJiZcbiAgICAgICAgICAhb3B0aW9ucy5hbGxvd2VkVmFsdWVzLmluY2x1ZGVzKHZhbHVlKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICBoZWFkZXI6ICdEaWN0aW9uYXJ5JyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGAke3ZhbHVlfSBpcyBub3QgYW4gYWNjZXB0ZWQgdHlwZS4gRXhwZWN0ZWQgb25lIG9mICR7b3B0aW9ucy5hbGxvd2VkVmFsdWVzLmpvaW4oJywgJyl9LmBcbiAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgZGljdFtrZXldID0gdmFsdWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGljdFxuICB9XG59XG5cbndlYmlkbC5udWxsYWJsZUNvbnZlcnRlciA9IGZ1bmN0aW9uIChjb252ZXJ0ZXIpIHtcbiAgcmV0dXJuIChWKSA9PiB7XG4gICAgaWYgKFYgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBWXG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnZlcnRlcihWKVxuICB9XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtRE9NU3RyaW5nXG53ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcgPSBmdW5jdGlvbiAoViwgb3B0cyA9IHt9KSB7XG4gIC8vIDEuIElmIFYgaXMgbnVsbCBhbmQgdGhlIGNvbnZlcnNpb24gaXMgdG8gYW4gSURMIHR5cGVcbiAgLy8gICAgYXNzb2NpYXRlZCB3aXRoIHRoZSBbTGVnYWN5TnVsbFRvRW1wdHlTdHJpbmddXG4gIC8vICAgIGV4dGVuZGVkIGF0dHJpYnV0ZSwgdGhlbiByZXR1cm4gdGhlIERPTVN0cmluZyB2YWx1ZVxuICAvLyAgICB0aGF0IHJlcHJlc2VudHMgdGhlIGVtcHR5IHN0cmluZy5cbiAgaWYgKFYgPT09IG51bGwgJiYgb3B0cy5sZWdhY3lOdWxsVG9FbXB0eVN0cmluZykge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgLy8gMi4gTGV0IHggYmUgPyBUb1N0cmluZyhWKS5cbiAgaWYgKHR5cGVvZiBWID09PSAnc3ltYm9sJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0NvdWxkIG5vdCBjb252ZXJ0IGFyZ3VtZW50IG9mIHR5cGUgc3ltYm9sIHRvIHN0cmluZy4nKVxuICB9XG5cbiAgLy8gMy4gUmV0dXJuIHRoZSBJREwgRE9NU3RyaW5nIHZhbHVlIHRoYXQgcmVwcmVzZW50cyB0aGVcbiAgLy8gICAgc2FtZSBzZXF1ZW5jZSBvZiBjb2RlIHVuaXRzIGFzIHRoZSBvbmUgdGhlXG4gIC8vICAgIEVDTUFTY3JpcHQgU3RyaW5nIHZhbHVlIHggcmVwcmVzZW50cy5cbiAgcmV0dXJuIFN0cmluZyhWKVxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLUJ5dGVTdHJpbmdcbndlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcgPSBmdW5jdGlvbiAoVikge1xuICAvLyAxLiBMZXQgeCBiZSA/IFRvU3RyaW5nKFYpLlxuICAvLyBOb3RlOiBET01TdHJpbmcgY29udmVydGVyIHBlcmZvcm0gPyBUb1N0cmluZyhWKVxuICBjb25zdCB4ID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKFYpXG5cbiAgLy8gMi4gSWYgdGhlIHZhbHVlIG9mIGFueSBlbGVtZW50IG9mIHggaXMgZ3JlYXRlciB0aGFuXG4gIC8vICAgIDI1NSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHgubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgaWYgKHguY2hhckNvZGVBdChpbmRleCkgPiAyNTUpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICdDYW5ub3QgY29udmVydCBhcmd1bWVudCB0byBhIEJ5dGVTdHJpbmcgYmVjYXVzZSB0aGUgY2hhcmFjdGVyIGF0ICcgK1xuICAgICAgICBgaW5kZXggJHtpbmRleH0gaGFzIGEgdmFsdWUgb2YgJHt4LmNoYXJDb2RlQXQoaW5kZXgpfSB3aGljaCBpcyBncmVhdGVyIHRoYW4gMjU1LmBcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICAvLyAzLiBSZXR1cm4gYW4gSURMIEJ5dGVTdHJpbmcgdmFsdWUgd2hvc2UgbGVuZ3RoIGlzIHRoZVxuICAvLyAgICBsZW5ndGggb2YgeCwgYW5kIHdoZXJlIHRoZSB2YWx1ZSBvZiBlYWNoIGVsZW1lbnQgaXNcbiAgLy8gICAgdGhlIHZhbHVlIG9mIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnQgb2YgeC5cbiAgcmV0dXJuIHhcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy1VU1ZTdHJpbmdcbndlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyA9IHRvVVNWU3RyaW5nXG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtYm9vbGVhblxud2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbiA9IGZ1bmN0aW9uIChWKSB7XG4gIC8vIDEuIExldCB4IGJlIHRoZSByZXN1bHQgb2YgY29tcHV0aW5nIFRvQm9vbGVhbihWKS5cbiAgY29uc3QgeCA9IEJvb2xlYW4oVilcblxuICAvLyAyLiBSZXR1cm4gdGhlIElETCBib29sZWFuIHZhbHVlIHRoYXQgaXMgdGhlIG9uZSB0aGF0IHJlcHJlc2VudHNcbiAgLy8gICAgdGhlIHNhbWUgdHJ1dGggdmFsdWUgYXMgdGhlIEVDTUFTY3JpcHQgQm9vbGVhbiB2YWx1ZSB4LlxuICByZXR1cm4geFxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLWFueVxud2ViaWRsLmNvbnZlcnRlcnMuYW55ID0gZnVuY3Rpb24gKFYpIHtcbiAgcmV0dXJuIFZcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy1sb25nLWxvbmdcbndlYmlkbC5jb252ZXJ0ZXJzWydsb25nIGxvbmcnXSA9IGZ1bmN0aW9uIChWKSB7XG4gIC8vIDEuIExldCB4IGJlID8gQ29udmVydFRvSW50KFYsIDY0LCBcInNpZ25lZFwiKS5cbiAgY29uc3QgeCA9IHdlYmlkbC51dGlsLkNvbnZlcnRUb0ludChWLCA2NCwgJ3NpZ25lZCcpXG5cbiAgLy8gMi4gUmV0dXJuIHRoZSBJREwgbG9uZyBsb25nIHZhbHVlIHRoYXQgcmVwcmVzZW50c1xuICAvLyAgICB0aGUgc2FtZSBudW1lcmljIHZhbHVlIGFzIHguXG4gIHJldHVybiB4XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtdW5zaWduZWQtbG9uZy1sb25nXG53ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgbG9uZyBsb25nJ10gPSBmdW5jdGlvbiAoVikge1xuICAvLyAxLiBMZXQgeCBiZSA/IENvbnZlcnRUb0ludChWLCA2NCwgXCJ1bnNpZ25lZFwiKS5cbiAgY29uc3QgeCA9IHdlYmlkbC51dGlsLkNvbnZlcnRUb0ludChWLCA2NCwgJ3Vuc2lnbmVkJylcblxuICAvLyAyLiBSZXR1cm4gdGhlIElETCB1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWUgdGhhdFxuICAvLyAgICByZXByZXNlbnRzIHRoZSBzYW1lIG51bWVyaWMgdmFsdWUgYXMgeC5cbiAgcmV0dXJuIHhcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy11bnNpZ25lZC1sb25nXG53ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgbG9uZyddID0gZnVuY3Rpb24gKFYpIHtcbiAgLy8gMS4gTGV0IHggYmUgPyBDb252ZXJ0VG9JbnQoViwgMzIsIFwidW5zaWduZWRcIikuXG4gIGNvbnN0IHggPSB3ZWJpZGwudXRpbC5Db252ZXJ0VG9JbnQoViwgMzIsICd1bnNpZ25lZCcpXG5cbiAgLy8gMi4gUmV0dXJuIHRoZSBJREwgdW5zaWduZWQgbG9uZyB2YWx1ZSB0aGF0XG4gIC8vICAgIHJlcHJlc2VudHMgdGhlIHNhbWUgbnVtZXJpYyB2YWx1ZSBhcyB4LlxuICByZXR1cm4geFxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLXVuc2lnbmVkLXNob3J0XG53ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgc2hvcnQnXSA9IGZ1bmN0aW9uIChWLCBvcHRzKSB7XG4gIC8vIDEuIExldCB4IGJlID8gQ29udmVydFRvSW50KFYsIDE2LCBcInVuc2lnbmVkXCIpLlxuICBjb25zdCB4ID0gd2ViaWRsLnV0aWwuQ29udmVydFRvSW50KFYsIDE2LCAndW5zaWduZWQnLCBvcHRzKVxuXG4gIC8vIDIuIFJldHVybiB0aGUgSURMIHVuc2lnbmVkIHNob3J0IHZhbHVlIHRoYXQgcmVwcmVzZW50c1xuICAvLyAgICB0aGUgc2FtZSBudW1lcmljIHZhbHVlIGFzIHguXG4gIHJldHVybiB4XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jaWRsLUFycmF5QnVmZmVyXG53ZWJpZGwuY29udmVydGVycy5BcnJheUJ1ZmZlciA9IGZ1bmN0aW9uIChWLCBvcHRzID0ge30pIHtcbiAgLy8gMS4gSWYgVHlwZShWKSBpcyBub3QgT2JqZWN0LCBvciBWIGRvZXMgbm90IGhhdmUgYW5cbiAgLy8gICAgW1tBcnJheUJ1ZmZlckRhdGFdXSBpbnRlcm5hbCBzbG90LCB0aGVuIHRocm93IGFcbiAgLy8gICAgVHlwZUVycm9yLlxuICAvLyBzZWU6IGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvcGVydGllcy1vZi10aGUtYXJyYXlidWZmZXItaW5zdGFuY2VzXG4gIC8vIHNlZTogaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9wZXJ0aWVzLW9mLXRoZS1zaGFyZWRhcnJheWJ1ZmZlci1pbnN0YW5jZXNcbiAgaWYgKFxuICAgIHdlYmlkbC51dGlsLlR5cGUoVikgIT09ICdPYmplY3QnIHx8XG4gICAgIXR5cGVzLmlzQW55QXJyYXlCdWZmZXIoVilcbiAgKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5jb252ZXJzaW9uRmFpbGVkKHtcbiAgICAgIHByZWZpeDogYCR7Vn1gLFxuICAgICAgYXJndW1lbnQ6IGAke1Z9YCxcbiAgICAgIHR5cGVzOiBbJ0FycmF5QnVmZmVyJ11cbiAgICB9KVxuICB9XG5cbiAgLy8gMi4gSWYgdGhlIGNvbnZlcnNpb24gaXMgbm90IHRvIGFuIElETCB0eXBlIGFzc29jaWF0ZWRcbiAgLy8gICAgd2l0aCB0aGUgW0FsbG93U2hhcmVkXSBleHRlbmRlZCBhdHRyaWJ1dGUsIGFuZFxuICAvLyAgICBJc1NoYXJlZEFycmF5QnVmZmVyKFYpIGlzIHRydWUsIHRoZW4gdGhyb3cgYVxuICAvLyAgICBUeXBlRXJyb3IuXG4gIGlmIChvcHRzLmFsbG93U2hhcmVkID09PSBmYWxzZSAmJiB0eXBlcy5pc1NoYXJlZEFycmF5QnVmZmVyKFYpKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgaGVhZGVyOiAnQXJyYXlCdWZmZXInLFxuICAgICAgbWVzc2FnZTogJ1NoYXJlZEFycmF5QnVmZmVyIGlzIG5vdCBhbGxvd2VkLidcbiAgICB9KVxuICB9XG5cbiAgLy8gMy4gSWYgdGhlIGNvbnZlcnNpb24gaXMgbm90IHRvIGFuIElETCB0eXBlIGFzc29jaWF0ZWRcbiAgLy8gICAgd2l0aCB0aGUgW0FsbG93UmVzaXphYmxlXSBleHRlbmRlZCBhdHRyaWJ1dGUsIGFuZFxuICAvLyAgICBJc1Jlc2l6YWJsZUFycmF5QnVmZmVyKFYpIGlzIHRydWUsIHRoZW4gdGhyb3cgYVxuICAvLyAgICBUeXBlRXJyb3IuXG4gIC8vIE5vdGU6IHJlc2l6YWJsZSBBcnJheUJ1ZmZlcnMgYXJlIGN1cnJlbnRseSBhIHByb3Bvc2FsLlxuXG4gIC8vIDQuIFJldHVybiB0aGUgSURMIEFycmF5QnVmZmVyIHZhbHVlIHRoYXQgaXMgYVxuICAvLyAgICByZWZlcmVuY2UgdG8gdGhlIHNhbWUgb2JqZWN0IGFzIFYuXG4gIHJldHVybiBWXG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLlR5cGVkQXJyYXkgPSBmdW5jdGlvbiAoViwgVCwgb3B0cyA9IHt9KSB7XG4gIC8vIDEuIExldCBUIGJlIHRoZSBJREwgdHlwZSBWIGlzIGJlaW5nIGNvbnZlcnRlZCB0by5cblxuICAvLyAyLiBJZiBUeXBlKFYpIGlzIG5vdCBPYmplY3QsIG9yIFYgZG9lcyBub3QgaGF2ZSBhXG4gIC8vICAgIFtbVHlwZWRBcnJheU5hbWVdXSBpbnRlcm5hbCBzbG90IHdpdGggYSB2YWx1ZVxuICAvLyAgICBlcXVhbCB0byBU4oCZcyBuYW1lLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICBpZiAoXG4gICAgd2ViaWRsLnV0aWwuVHlwZShWKSAhPT0gJ09iamVjdCcgfHxcbiAgICAhdHlwZXMuaXNUeXBlZEFycmF5KFYpIHx8XG4gICAgVi5jb25zdHJ1Y3Rvci5uYW1lICE9PSBULm5hbWVcbiAgKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5jb252ZXJzaW9uRmFpbGVkKHtcbiAgICAgIHByZWZpeDogYCR7VC5uYW1lfWAsXG4gICAgICBhcmd1bWVudDogYCR7Vn1gLFxuICAgICAgdHlwZXM6IFtULm5hbWVdXG4gICAgfSlcbiAgfVxuXG4gIC8vIDMuIElmIHRoZSBjb252ZXJzaW9uIGlzIG5vdCB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtBbGxvd1NoYXJlZF0gZXh0ZW5kZWQgYXR0cmlidXRlLCBhbmRcbiAgLy8gICAgSXNTaGFyZWRBcnJheUJ1ZmZlcihWLltbVmlld2VkQXJyYXlCdWZmZXJdXSkgaXNcbiAgLy8gICAgdHJ1ZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKG9wdHMuYWxsb3dTaGFyZWQgPT09IGZhbHNlICYmIHR5cGVzLmlzU2hhcmVkQXJyYXlCdWZmZXIoVi5idWZmZXIpKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgaGVhZGVyOiAnQXJyYXlCdWZmZXInLFxuICAgICAgbWVzc2FnZTogJ1NoYXJlZEFycmF5QnVmZmVyIGlzIG5vdCBhbGxvd2VkLidcbiAgICB9KVxuICB9XG5cbiAgLy8gNC4gSWYgdGhlIGNvbnZlcnNpb24gaXMgbm90IHRvIGFuIElETCB0eXBlIGFzc29jaWF0ZWRcbiAgLy8gICAgd2l0aCB0aGUgW0FsbG93UmVzaXphYmxlXSBleHRlbmRlZCBhdHRyaWJ1dGUsIGFuZFxuICAvLyAgICBJc1Jlc2l6YWJsZUFycmF5QnVmZmVyKFYuW1tWaWV3ZWRBcnJheUJ1ZmZlcl1dKSBpc1xuICAvLyAgICB0cnVlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAvLyBOb3RlOiByZXNpemFibGUgYXJyYXkgYnVmZmVycyBhcmUgY3VycmVudGx5IGEgcHJvcG9zYWxcblxuICAvLyA1LiBSZXR1cm4gdGhlIElETCB2YWx1ZSBvZiB0eXBlIFQgdGhhdCBpcyBhIHJlZmVyZW5jZVxuICAvLyAgICB0byB0aGUgc2FtZSBvYmplY3QgYXMgVi5cbiAgcmV0dXJuIFZcbn1cblxud2ViaWRsLmNvbnZlcnRlcnMuRGF0YVZpZXcgPSBmdW5jdGlvbiAoViwgb3B0cyA9IHt9KSB7XG4gIC8vIDEuIElmIFR5cGUoVikgaXMgbm90IE9iamVjdCwgb3IgViBkb2VzIG5vdCBoYXZlIGFcbiAgLy8gICAgW1tEYXRhVmlld11dIGludGVybmFsIHNsb3QsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIGlmICh3ZWJpZGwudXRpbC5UeXBlKFYpICE9PSAnT2JqZWN0JyB8fCAhdHlwZXMuaXNEYXRhVmlldyhWKSkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgIGhlYWRlcjogJ0RhdGFWaWV3JyxcbiAgICAgIG1lc3NhZ2U6ICdPYmplY3QgaXMgbm90IGEgRGF0YVZpZXcuJ1xuICAgIH0pXG4gIH1cblxuICAvLyAyLiBJZiB0aGUgY29udmVyc2lvbiBpcyBub3QgdG8gYW4gSURMIHR5cGUgYXNzb2NpYXRlZFxuICAvLyAgICB3aXRoIHRoZSBbQWxsb3dTaGFyZWRdIGV4dGVuZGVkIGF0dHJpYnV0ZSwgYW5kXG4gIC8vICAgIElzU2hhcmVkQXJyYXlCdWZmZXIoVi5bW1ZpZXdlZEFycmF5QnVmZmVyXV0pIGlzIHRydWUsXG4gIC8vICAgIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIGlmIChvcHRzLmFsbG93U2hhcmVkID09PSBmYWxzZSAmJiB0eXBlcy5pc1NoYXJlZEFycmF5QnVmZmVyKFYuYnVmZmVyKSkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgIGhlYWRlcjogJ0FycmF5QnVmZmVyJyxcbiAgICAgIG1lc3NhZ2U6ICdTaGFyZWRBcnJheUJ1ZmZlciBpcyBub3QgYWxsb3dlZC4nXG4gICAgfSlcbiAgfVxuXG4gIC8vIDMuIElmIHRoZSBjb252ZXJzaW9uIGlzIG5vdCB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtBbGxvd1Jlc2l6YWJsZV0gZXh0ZW5kZWQgYXR0cmlidXRlLCBhbmRcbiAgLy8gICAgSXNSZXNpemFibGVBcnJheUJ1ZmZlcihWLltbVmlld2VkQXJyYXlCdWZmZXJdXSkgaXNcbiAgLy8gICAgdHJ1ZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgLy8gTm90ZTogcmVzaXphYmxlIEFycmF5QnVmZmVycyBhcmUgY3VycmVudGx5IGEgcHJvcG9zYWxcblxuICAvLyA0LiBSZXR1cm4gdGhlIElETCBEYXRhVmlldyB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlXG4gIC8vICAgIHRvIHRoZSBzYW1lIG9iamVjdCBhcyBWLlxuICByZXR1cm4gVlxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI0J1ZmZlclNvdXJjZVxud2ViaWRsLmNvbnZlcnRlcnMuQnVmZmVyU291cmNlID0gZnVuY3Rpb24gKFYsIG9wdHMgPSB7fSkge1xuICBpZiAodHlwZXMuaXNBbnlBcnJheUJ1ZmZlcihWKSkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5BcnJheUJ1ZmZlcihWLCBvcHRzKVxuICB9XG5cbiAgaWYgKHR5cGVzLmlzVHlwZWRBcnJheShWKSkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5UeXBlZEFycmF5KFYsIFYuY29uc3RydWN0b3IpXG4gIH1cblxuICBpZiAodHlwZXMuaXNEYXRhVmlldyhWKSkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5EYXRhVmlldyhWLCBvcHRzKVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihgQ291bGQgbm90IGNvbnZlcnQgJHtWfSB0byBhIEJ1ZmZlclNvdXJjZS5gKVxufVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8Qnl0ZVN0cmluZz4nXSA9IHdlYmlkbC5zZXF1ZW5jZUNvbnZlcnRlcihcbiAgd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZ1xuKVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8c2VxdWVuY2U8Qnl0ZVN0cmluZz4+J10gPSB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxCeXRlU3RyaW5nPiddXG4pXG5cbndlYmlkbC5jb252ZXJ0ZXJzWydyZWNvcmQ8Qnl0ZVN0cmluZywgQnl0ZVN0cmluZz4nXSA9IHdlYmlkbC5yZWNvcmRDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcsXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmdcbilcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHdlYmlkbFxufVxuIiwKICAgICJjb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBhdG9iIH0gPSByZXF1aXJlKCdidWZmZXInKVxuY29uc3QgeyBpc29tb3JwaGljRGVjb2RlIH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuXG5jb25zdCBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKClcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jaHR0cC10b2tlbi1jb2RlLXBvaW50XG4gKi9cbmNvbnN0IEhUVFBfVE9LRU5fQ09ERVBPSU5UUyA9IC9eWyEjJCUmJyorLS5eX3x+QS1aYS16MC05XSskL1xuY29uc3QgSFRUUF9XSElURVNQQUNFX1JFR0VYID0gLyhcXHUwMDBBfFxcdTAwMER8XFx1MDAwOXxcXHUwMDIwKS8gLy8gZXNsaW50LWRpc2FibGUtbGluZVxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jaHR0cC1xdW90ZWQtc3RyaW5nLXRva2VuLWNvZGUtcG9pbnRcbiAqL1xuY29uc3QgSFRUUF9RVU9URURfU1RSSU5HX1RPS0VOUyA9IC9bXFx1MDAwOXxcXHUwMDIwLVxcdTAwN0V8XFx1MDA4MC1cXHUwMEZGXS8gLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZGF0YS11cmwtcHJvY2Vzc29yXG4vKiogQHBhcmFtIHtVUkx9IGRhdGFVUkwgKi9cbmZ1bmN0aW9uIGRhdGFVUkxQcm9jZXNzb3IgKGRhdGFVUkwpIHtcbiAgLy8gMS4gQXNzZXJ0OiBkYXRhVVJM4oCZcyBzY2hlbWUgaXMgXCJkYXRhXCIuXG4gIGFzc2VydChkYXRhVVJMLnByb3RvY29sID09PSAnZGF0YTonKVxuXG4gIC8vIDIuIExldCBpbnB1dCBiZSB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgdGhlIFVSTFxuICAvLyBzZXJpYWxpemVyIG9uIGRhdGFVUkwgd2l0aCBleGNsdWRlIGZyYWdtZW50XG4gIC8vIHNldCB0byB0cnVlLlxuICBsZXQgaW5wdXQgPSBVUkxTZXJpYWxpemVyKGRhdGFVUkwsIHRydWUpXG5cbiAgLy8gMy4gUmVtb3ZlIHRoZSBsZWFkaW5nIFwiZGF0YTpcIiBzdHJpbmcgZnJvbSBpbnB1dC5cbiAgaW5wdXQgPSBpbnB1dC5zbGljZSg1KVxuXG4gIC8vIDQuIExldCBwb3NpdGlvbiBwb2ludCBhdCB0aGUgc3RhcnQgb2YgaW5wdXQuXG4gIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogMCB9XG5cbiAgLy8gNS4gTGV0IG1pbWVUeXBlIGJlIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhXG4gIC8vIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzIHRoYXQgYXJlIG5vdCBlcXVhbFxuICAvLyB0byBVKzAwMkMgKCwpLCBnaXZlbiBwb3NpdGlvbi5cbiAgbGV0IG1pbWVUeXBlID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoXG4gICAgJywnLFxuICAgIGlucHV0LFxuICAgIHBvc2l0aW9uXG4gIClcblxuICAvLyA2LiBTdHJpcCBsZWFkaW5nIGFuZCB0cmFpbGluZyBBU0NJSSB3aGl0ZXNwYWNlXG4gIC8vIGZyb20gbWltZVR5cGUuXG4gIC8vIFVuZGljaSBpbXBsZW1lbnRhdGlvbiBub3RlOiB3ZSBuZWVkIHRvIHN0b3JlIHRoZVxuICAvLyBsZW5ndGggYmVjYXVzZSBpZiB0aGUgbWltZXR5cGUgaGFzIHNwYWNlcyByZW1vdmVkLFxuICAvLyB0aGUgd3JvbmcgYW1vdW50IHdpbGwgYmUgc2xpY2VkIGZyb20gdGhlIGlucHV0IGluXG4gIC8vIHN0ZXAgIzlcbiAgY29uc3QgbWltZVR5cGVMZW5ndGggPSBtaW1lVHlwZS5sZW5ndGhcbiAgbWltZVR5cGUgPSByZW1vdmVBU0NJSVdoaXRlc3BhY2UobWltZVR5cGUsIHRydWUsIHRydWUpXG5cbiAgLy8gNy4gSWYgcG9zaXRpb24gaXMgcGFzdCB0aGUgZW5kIG9mIGlucHV0LCB0aGVuXG4gIC8vIHJldHVybiBmYWlsdXJlXG4gIGlmIChwb3NpdGlvbi5wb3NpdGlvbiA+PSBpbnB1dC5sZW5ndGgpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICAvLyA4LiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuXG4gIHBvc2l0aW9uLnBvc2l0aW9uKytcblxuICAvLyA5LiBMZXQgZW5jb2RlZEJvZHkgYmUgdGhlIHJlbWFpbmRlciBvZiBpbnB1dC5cbiAgY29uc3QgZW5jb2RlZEJvZHkgPSBpbnB1dC5zbGljZShtaW1lVHlwZUxlbmd0aCArIDEpXG5cbiAgLy8gMTAuIExldCBib2R5IGJlIHRoZSBwZXJjZW50LWRlY29kaW5nIG9mIGVuY29kZWRCb2R5LlxuICBsZXQgYm9keSA9IHN0cmluZ1BlcmNlbnREZWNvZGUoZW5jb2RlZEJvZHkpXG5cbiAgLy8gMTEuIElmIG1pbWVUeXBlIGVuZHMgd2l0aCBVKzAwM0IgKDspLCBmb2xsb3dlZCBieVxuICAvLyB6ZXJvIG9yIG1vcmUgVSswMDIwIFNQQUNFLCBmb2xsb3dlZCBieSBhbiBBU0NJSVxuICAvLyBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvciBcImJhc2U2NFwiLCB0aGVuOlxuICBpZiAoLzsoXFx1MDAyMCl7MCx9YmFzZTY0JC9pLnRlc3QobWltZVR5cGUpKSB7XG4gICAgLy8gMS4gTGV0IHN0cmluZ0JvZHkgYmUgdGhlIGlzb21vcnBoaWMgZGVjb2RlIG9mIGJvZHkuXG4gICAgY29uc3Qgc3RyaW5nQm9keSA9IGlzb21vcnBoaWNEZWNvZGUoYm9keSlcblxuICAgIC8vIDIuIFNldCBib2R5IHRvIHRoZSBmb3JnaXZpbmctYmFzZTY0IGRlY29kZSBvZlxuICAgIC8vIHN0cmluZ0JvZHkuXG4gICAgYm9keSA9IGZvcmdpdmluZ0Jhc2U2NChzdHJpbmdCb2R5KVxuXG4gICAgLy8gMy4gSWYgYm9keSBpcyBmYWlsdXJlLCB0aGVuIHJldHVybiBmYWlsdXJlLlxuICAgIGlmIChib2R5ID09PSAnZmFpbHVyZScpIHtcbiAgICAgIHJldHVybiAnZmFpbHVyZSdcbiAgICB9XG5cbiAgICAvLyA0LiBSZW1vdmUgdGhlIGxhc3QgNiBjb2RlIHBvaW50cyBmcm9tIG1pbWVUeXBlLlxuICAgIG1pbWVUeXBlID0gbWltZVR5cGUuc2xpY2UoMCwgLTYpXG5cbiAgICAvLyA1LiBSZW1vdmUgdHJhaWxpbmcgVSswMDIwIFNQQUNFIGNvZGUgcG9pbnRzIGZyb20gbWltZVR5cGUsXG4gICAgLy8gaWYgYW55LlxuICAgIG1pbWVUeXBlID0gbWltZVR5cGUucmVwbGFjZSgvKFxcdTAwMjApKyQvLCAnJylcblxuICAgIC8vIDYuIFJlbW92ZSB0aGUgbGFzdCBVKzAwM0IgKDspIGNvZGUgcG9pbnQgZnJvbSBtaW1lVHlwZS5cbiAgICBtaW1lVHlwZSA9IG1pbWVUeXBlLnNsaWNlKDAsIC0xKVxuICB9XG5cbiAgLy8gMTIuIElmIG1pbWVUeXBlIHN0YXJ0cyB3aXRoIFUrMDAzQiAoOyksIHRoZW4gcHJlcGVuZFxuICAvLyBcInRleHQvcGxhaW5cIiB0byBtaW1lVHlwZS5cbiAgaWYgKG1pbWVUeXBlLnN0YXJ0c1dpdGgoJzsnKSkge1xuICAgIG1pbWVUeXBlID0gJ3RleHQvcGxhaW4nICsgbWltZVR5cGVcbiAgfVxuXG4gIC8vIDEzLiBMZXQgbWltZVR5cGVSZWNvcmQgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nXG4gIC8vIG1pbWVUeXBlLlxuICBsZXQgbWltZVR5cGVSZWNvcmQgPSBwYXJzZU1JTUVUeXBlKG1pbWVUeXBlKVxuXG4gIC8vIDE0LiBJZiBtaW1lVHlwZVJlY29yZCBpcyBmYWlsdXJlLCB0aGVuIHNldFxuICAvLyBtaW1lVHlwZVJlY29yZCB0byB0ZXh0L3BsYWluO2NoYXJzZXQ9VVMtQVNDSUkuXG4gIGlmIChtaW1lVHlwZVJlY29yZCA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgbWltZVR5cGVSZWNvcmQgPSBwYXJzZU1JTUVUeXBlKCd0ZXh0L3BsYWluO2NoYXJzZXQ9VVMtQVNDSUknKVxuICB9XG5cbiAgLy8gMTUuIFJldHVybiBhIG5ldyBkYXRhOiBVUkwgc3RydWN0IHdob3NlIE1JTUVcbiAgLy8gdHlwZSBpcyBtaW1lVHlwZVJlY29yZCBhbmQgYm9keSBpcyBib2R5LlxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZGF0YS11cmwtc3RydWN0XG4gIHJldHVybiB7IG1pbWVUeXBlOiBtaW1lVHlwZVJlY29yZCwgYm9keSB9XG59XG5cbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC11cmwtc2VyaWFsaXplclxuLyoqXG4gKiBAcGFyYW0ge1VSTH0gdXJsXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGV4Y2x1ZGVGcmFnbWVudFxuICovXG5mdW5jdGlvbiBVUkxTZXJpYWxpemVyICh1cmwsIGV4Y2x1ZGVGcmFnbWVudCA9IGZhbHNlKSB7XG4gIGlmICghZXhjbHVkZUZyYWdtZW50KSB7XG4gICAgcmV0dXJuIHVybC5ocmVmXG4gIH1cblxuICBjb25zdCBocmVmID0gdXJsLmhyZWZcbiAgY29uc3QgaGFzaExlbmd0aCA9IHVybC5oYXNoLmxlbmd0aFxuXG4gIHJldHVybiBoYXNoTGVuZ3RoID09PSAwID8gaHJlZiA6IGhyZWYuc3Vic3RyaW5nKDAsIGhyZWYubGVuZ3RoIC0gaGFzaExlbmd0aClcbn1cblxuLy8gaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2NvbGxlY3QtYS1zZXF1ZW5jZS1vZi1jb2RlLXBvaW50c1xuLyoqXG4gKiBAcGFyYW0geyhjaGFyOiBzdHJpbmcpID0+IGJvb2xlYW59IGNvbmRpdGlvblxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0XG4gKiBAcGFyYW0ge3sgcG9zaXRpb246IG51bWJlciB9fSBwb3NpdGlvblxuICovXG5mdW5jdGlvbiBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzIChjb25kaXRpb24sIGlucHV0LCBwb3NpdGlvbikge1xuICAvLyAxLiBMZXQgcmVzdWx0IGJlIHRoZSBlbXB0eSBzdHJpbmcuXG4gIGxldCByZXN1bHQgPSAnJ1xuXG4gIC8vIDIuIFdoaWxlIHBvc2l0aW9uIGRvZXNu4oCZdCBwb2ludCBwYXN0IHRoZSBlbmQgb2YgaW5wdXQgYW5kIHRoZVxuICAvLyBjb2RlIHBvaW50IGF0IHBvc2l0aW9uIHdpdGhpbiBpbnB1dCBtZWV0cyB0aGUgY29uZGl0aW9uIGNvbmRpdGlvbjpcbiAgd2hpbGUgKHBvc2l0aW9uLnBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoICYmIGNvbmRpdGlvbihpbnB1dFtwb3NpdGlvbi5wb3NpdGlvbl0pKSB7XG4gICAgLy8gMS4gQXBwZW5kIHRoYXQgY29kZSBwb2ludCB0byB0aGUgZW5kIG9mIHJlc3VsdC5cbiAgICByZXN1bHQgKz0gaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dXG5cbiAgICAvLyAyLiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuXG4gICAgcG9zaXRpb24ucG9zaXRpb24rK1xuICB9XG5cbiAgLy8gMy4gUmV0dXJuIHJlc3VsdC5cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG4vKipcbiAqIEEgZmFzdGVyIGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMgdGhhdCBvbmx5IHdvcmtzIHdoZW4gY29tcGFyaW5nIGEgc2luZ2xlIGNoYXJhY3Rlci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjaGFyXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRcbiAqIEBwYXJhbSB7eyBwb3NpdGlvbjogbnVtYmVyIH19IHBvc2l0aW9uXG4gKi9cbmZ1bmN0aW9uIGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0IChjaGFyLCBpbnB1dCwgcG9zaXRpb24pIHtcbiAgY29uc3QgaWR4ID0gaW5wdXQuaW5kZXhPZihjaGFyLCBwb3NpdGlvbi5wb3NpdGlvbilcbiAgY29uc3Qgc3RhcnQgPSBwb3NpdGlvbi5wb3NpdGlvblxuXG4gIGlmIChpZHggPT09IC0xKSB7XG4gICAgcG9zaXRpb24ucG9zaXRpb24gPSBpbnB1dC5sZW5ndGhcbiAgICByZXR1cm4gaW5wdXQuc2xpY2Uoc3RhcnQpXG4gIH1cblxuICBwb3NpdGlvbi5wb3NpdGlvbiA9IGlkeFxuICByZXR1cm4gaW5wdXQuc2xpY2Uoc3RhcnQsIHBvc2l0aW9uLnBvc2l0aW9uKVxufVxuXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3N0cmluZy1wZXJjZW50LWRlY29kZVxuLyoqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dCAqL1xuZnVuY3Rpb24gc3RyaW5nUGVyY2VudERlY29kZSAoaW5wdXQpIHtcbiAgLy8gMS4gTGV0IGJ5dGVzIGJlIHRoZSBVVEYtOCBlbmNvZGluZyBvZiBpbnB1dC5cbiAgY29uc3QgYnl0ZXMgPSBlbmNvZGVyLmVuY29kZShpbnB1dClcblxuICAvLyAyLiBSZXR1cm4gdGhlIHBlcmNlbnQtZGVjb2Rpbmcgb2YgYnl0ZXMuXG4gIHJldHVybiBwZXJjZW50RGVjb2RlKGJ5dGVzKVxufVxuXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3BlcmNlbnQtZGVjb2RlXG4vKiogQHBhcmFtIHtVaW50OEFycmF5fSBpbnB1dCAqL1xuZnVuY3Rpb24gcGVyY2VudERlY29kZSAoaW5wdXQpIHtcbiAgLy8gMS4gTGV0IG91dHB1dCBiZSBhbiBlbXB0eSBieXRlIHNlcXVlbmNlLlxuICAvKiogQHR5cGUge251bWJlcltdfSAqL1xuICBjb25zdCBvdXRwdXQgPSBbXVxuXG4gIC8vIDIuIEZvciBlYWNoIGJ5dGUgYnl0ZSBpbiBpbnB1dDpcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGJ5dGUgPSBpbnB1dFtpXVxuXG4gICAgLy8gMS4gSWYgYnl0ZSBpcyBub3QgMHgyNSAoJSksIHRoZW4gYXBwZW5kIGJ5dGUgdG8gb3V0cHV0LlxuICAgIGlmIChieXRlICE9PSAweDI1KSB7XG4gICAgICBvdXRwdXQucHVzaChieXRlKVxuXG4gICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiBieXRlIGlzIDB4MjUgKCUpIGFuZCB0aGUgbmV4dCB0d28gYnl0ZXNcbiAgICAvLyBhZnRlciBieXRlIGluIGlucHV0IGFyZSBub3QgaW4gdGhlIHJhbmdlc1xuICAgIC8vIDB4MzAgKDApIHRvIDB4MzkgKDkpLCAweDQxIChBKSB0byAweDQ2IChGKSxcbiAgICAvLyBhbmQgMHg2MSAoYSkgdG8gMHg2NiAoZiksIGFsbCBpbmNsdXNpdmUsIGFwcGVuZCBieXRlXG4gICAgLy8gdG8gb3V0cHV0LlxuICAgIH0gZWxzZSBpZiAoXG4gICAgICBieXRlID09PSAweDI1ICYmXG4gICAgICAhL15bMC05QS1GYS1mXXsyfSQvaS50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoaW5wdXRbaSArIDFdLCBpbnB1dFtpICsgMl0pKVxuICAgICkge1xuICAgICAgb3V0cHV0LnB1c2goMHgyNSlcblxuICAgIC8vIDMuIE90aGVyd2lzZTpcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gMS4gTGV0IGJ5dGVQb2ludCBiZSB0aGUgdHdvIGJ5dGVzIGFmdGVyIGJ5dGUgaW4gaW5wdXQsXG4gICAgICAvLyBkZWNvZGVkLCBhbmQgdGhlbiBpbnRlcnByZXRlZCBhcyBoZXhhZGVjaW1hbCBudW1iZXIuXG4gICAgICBjb25zdCBuZXh0VHdvQnl0ZXMgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGlucHV0W2kgKyAxXSwgaW5wdXRbaSArIDJdKVxuICAgICAgY29uc3QgYnl0ZVBvaW50ID0gTnVtYmVyLnBhcnNlSW50KG5leHRUd29CeXRlcywgMTYpXG5cbiAgICAgIC8vIDIuIEFwcGVuZCBhIGJ5dGUgd2hvc2UgdmFsdWUgaXMgYnl0ZVBvaW50IHRvIG91dHB1dC5cbiAgICAgIG91dHB1dC5wdXNoKGJ5dGVQb2ludClcblxuICAgICAgLy8gMy4gU2tpcCB0aGUgbmV4dCB0d28gYnl0ZXMgaW4gaW5wdXQuXG4gICAgICBpICs9IDJcbiAgICB9XG4gIH1cblxuICAvLyAzLiBSZXR1cm4gb3V0cHV0LlxuICByZXR1cm4gVWludDhBcnJheS5mcm9tKG91dHB1dClcbn1cblxuLy8gaHR0cHM6Ly9taW1lc25pZmYuc3BlYy53aGF0d2cub3JnLyNwYXJzZS1hLW1pbWUtdHlwZVxuLyoqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dCAqL1xuZnVuY3Rpb24gcGFyc2VNSU1FVHlwZSAoaW5wdXQpIHtcbiAgLy8gMS4gUmVtb3ZlIGFueSBsZWFkaW5nIGFuZCB0cmFpbGluZyBIVFRQIHdoaXRlc3BhY2VcbiAgLy8gZnJvbSBpbnB1dC5cbiAgaW5wdXQgPSByZW1vdmVIVFRQV2hpdGVzcGFjZShpbnB1dCwgdHJ1ZSwgdHJ1ZSlcblxuICAvLyAyLiBMZXQgcG9zaXRpb24gYmUgYSBwb3NpdGlvbiB2YXJpYWJsZSBmb3IgaW5wdXQsXG4gIC8vIGluaXRpYWxseSBwb2ludGluZyBhdCB0aGUgc3RhcnQgb2YgaW5wdXQuXG4gIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogMCB9XG5cbiAgLy8gMy4gTGV0IHR5cGUgYmUgdGhlIHJlc3VsdCBvZiBjb2xsZWN0aW5nIGEgc2VxdWVuY2VcbiAgLy8gb2YgY29kZSBwb2ludHMgdGhhdCBhcmUgbm90IFUrMDAyRiAoLykgZnJvbVxuICAvLyBpbnB1dCwgZ2l2ZW4gcG9zaXRpb24uXG4gIGNvbnN0IHR5cGUgPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdChcbiAgICAnLycsXG4gICAgaW5wdXQsXG4gICAgcG9zaXRpb25cbiAgKVxuXG4gIC8vIDQuIElmIHR5cGUgaXMgdGhlIGVtcHR5IHN0cmluZyBvciBkb2VzIG5vdCBzb2xlbHlcbiAgLy8gY29udGFpbiBIVFRQIHRva2VuIGNvZGUgcG9pbnRzLCB0aGVuIHJldHVybiBmYWlsdXJlLlxuICAvLyBodHRwczovL21pbWVzbmlmZi5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtdG9rZW4tY29kZS1wb2ludFxuICBpZiAodHlwZS5sZW5ndGggPT09IDAgfHwgIUhUVFBfVE9LRU5fQ09ERVBPSU5UUy50ZXN0KHR5cGUpKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgLy8gNS4gSWYgcG9zaXRpb24gaXMgcGFzdCB0aGUgZW5kIG9mIGlucHV0LCB0aGVuIHJldHVyblxuICAvLyBmYWlsdXJlXG4gIGlmIChwb3NpdGlvbi5wb3NpdGlvbiA+IGlucHV0Lmxlbmd0aCkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIC8vIDYuIEFkdmFuY2UgcG9zaXRpb24gYnkgMS4gKFRoaXMgc2tpcHMgcGFzdCBVKzAwMkYgKC8pLilcbiAgcG9zaXRpb24ucG9zaXRpb24rK1xuXG4gIC8vIDcuIExldCBzdWJ0eXBlIGJlIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhIHNlcXVlbmNlIG9mXG4gIC8vIGNvZGUgcG9pbnRzIHRoYXQgYXJlIG5vdCBVKzAwM0IgKDspIGZyb20gaW5wdXQsIGdpdmVuXG4gIC8vIHBvc2l0aW9uLlxuICBsZXQgc3VidHlwZSA9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0KFxuICAgICc7JyxcbiAgICBpbnB1dCxcbiAgICBwb3NpdGlvblxuICApXG5cbiAgLy8gOC4gUmVtb3ZlIGFueSB0cmFpbGluZyBIVFRQIHdoaXRlc3BhY2UgZnJvbSBzdWJ0eXBlLlxuICBzdWJ0eXBlID0gcmVtb3ZlSFRUUFdoaXRlc3BhY2Uoc3VidHlwZSwgZmFsc2UsIHRydWUpXG5cbiAgLy8gOS4gSWYgc3VidHlwZSBpcyB0aGUgZW1wdHkgc3RyaW5nIG9yIGRvZXMgbm90IHNvbGVseVxuICAvLyBjb250YWluIEhUVFAgdG9rZW4gY29kZSBwb2ludHMsIHRoZW4gcmV0dXJuIGZhaWx1cmUuXG4gIGlmIChzdWJ0eXBlLmxlbmd0aCA9PT0gMCB8fCAhSFRUUF9UT0tFTl9DT0RFUE9JTlRTLnRlc3Qoc3VidHlwZSkpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICBjb25zdCB0eXBlTG93ZXJjYXNlID0gdHlwZS50b0xvd2VyQ2FzZSgpXG4gIGNvbnN0IHN1YnR5cGVMb3dlcmNhc2UgPSBzdWJ0eXBlLnRvTG93ZXJDYXNlKClcblxuICAvLyAxMC4gTGV0IG1pbWVUeXBlIGJlIGEgbmV3IE1JTUUgdHlwZSByZWNvcmQgd2hvc2UgdHlwZVxuICAvLyBpcyB0eXBlLCBpbiBBU0NJSSBsb3dlcmNhc2UsIGFuZCBzdWJ0eXBlIGlzIHN1YnR5cGUsXG4gIC8vIGluIEFTQ0lJIGxvd2VyY2FzZS5cbiAgLy8gaHR0cHM6Ly9taW1lc25pZmYuc3BlYy53aGF0d2cub3JnLyNtaW1lLXR5cGVcbiAgY29uc3QgbWltZVR5cGUgPSB7XG4gICAgdHlwZTogdHlwZUxvd2VyY2FzZSxcbiAgICBzdWJ0eXBlOiBzdWJ0eXBlTG93ZXJjYXNlLFxuICAgIC8qKiBAdHlwZSB7TWFwPHN0cmluZywgc3RyaW5nPn0gKi9cbiAgICBwYXJhbWV0ZXJzOiBuZXcgTWFwKCksXG4gICAgLy8gaHR0cHM6Ly9taW1lc25pZmYuc3BlYy53aGF0d2cub3JnLyNtaW1lLXR5cGUtZXNzZW5jZVxuICAgIGVzc2VuY2U6IGAke3R5cGVMb3dlcmNhc2V9LyR7c3VidHlwZUxvd2VyY2FzZX1gXG4gIH1cblxuICAvLyAxMS4gV2hpbGUgcG9zaXRpb24gaXMgbm90IHBhc3QgdGhlIGVuZCBvZiBpbnB1dDpcbiAgd2hpbGUgKHBvc2l0aW9uLnBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgLy8gMS4gQWR2YW5jZSBwb3NpdGlvbiBieSAxLiAoVGhpcyBza2lwcyBwYXN0IFUrMDAzQiAoOykuKVxuICAgIHBvc2l0aW9uLnBvc2l0aW9uKytcblxuICAgIC8vIDIuIENvbGxlY3QgYSBzZXF1ZW5jZSBvZiBjb2RlIHBvaW50cyB0aGF0IGFyZSBIVFRQXG4gICAgLy8gd2hpdGVzcGFjZSBmcm9tIGlucHV0IGdpdmVuIHBvc2l0aW9uLlxuICAgIGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMoXG4gICAgICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC13aGl0ZXNwYWNlXG4gICAgICBjaGFyID0+IEhUVFBfV0hJVEVTUEFDRV9SRUdFWC50ZXN0KGNoYXIpLFxuICAgICAgaW5wdXQsXG4gICAgICBwb3NpdGlvblxuICAgIClcblxuICAgIC8vIDMuIExldCBwYXJhbWV0ZXJOYW1lIGJlIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhXG4gICAgLy8gc2VxdWVuY2Ugb2YgY29kZSBwb2ludHMgdGhhdCBhcmUgbm90IFUrMDAzQiAoOylcbiAgICAvLyBvciBVKzAwM0QgKD0pIGZyb20gaW5wdXQsIGdpdmVuIHBvc2l0aW9uLlxuICAgIGxldCBwYXJhbWV0ZXJOYW1lID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50cyhcbiAgICAgIChjaGFyKSA9PiBjaGFyICE9PSAnOycgJiYgY2hhciAhPT0gJz0nLFxuICAgICAgaW5wdXQsXG4gICAgICBwb3NpdGlvblxuICAgIClcblxuICAgIC8vIDQuIFNldCBwYXJhbWV0ZXJOYW1lIHRvIHBhcmFtZXRlck5hbWUsIGluIEFTQ0lJXG4gICAgLy8gbG93ZXJjYXNlLlxuICAgIHBhcmFtZXRlck5hbWUgPSBwYXJhbWV0ZXJOYW1lLnRvTG93ZXJDYXNlKClcblxuICAgIC8vIDUuIElmIHBvc2l0aW9uIGlzIG5vdCBwYXN0IHRoZSBlbmQgb2YgaW5wdXQsIHRoZW46XG4gICAgaWYgKHBvc2l0aW9uLnBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAvLyAxLiBJZiB0aGUgY29kZSBwb2ludCBhdCBwb3NpdGlvbiB3aXRoaW4gaW5wdXQgaXNcbiAgICAgIC8vIFUrMDAzQiAoOyksIHRoZW4gY29udGludWUuXG4gICAgICBpZiAoaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dID09PSAnOycpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gMi4gQWR2YW5jZSBwb3NpdGlvbiBieSAxLiAoVGhpcyBza2lwcyBwYXN0IFUrMDAzRCAoPSkuKVxuICAgICAgcG9zaXRpb24ucG9zaXRpb24rK1xuICAgIH1cblxuICAgIC8vIDYuIElmIHBvc2l0aW9uIGlzIHBhc3QgdGhlIGVuZCBvZiBpbnB1dCwgdGhlbiBicmVhay5cbiAgICBpZiAocG9zaXRpb24ucG9zaXRpb24gPiBpbnB1dC5sZW5ndGgpIHtcbiAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgLy8gNy4gTGV0IHBhcmFtZXRlclZhbHVlIGJlIG51bGwuXG4gICAgbGV0IHBhcmFtZXRlclZhbHVlID0gbnVsbFxuXG4gICAgLy8gOC4gSWYgdGhlIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluIGlucHV0IGlzXG4gICAgLy8gVSswMDIyIChcIiksIHRoZW46XG4gICAgaWYgKGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXSA9PT0gJ1wiJykge1xuICAgICAgLy8gMS4gU2V0IHBhcmFtZXRlclZhbHVlIHRvIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZ1xuICAgICAgLy8gYW4gSFRUUCBxdW90ZWQgc3RyaW5nIGZyb20gaW5wdXQsIGdpdmVuIHBvc2l0aW9uXG4gICAgICAvLyBhbmQgdGhlIGV4dHJhY3QtdmFsdWUgZmxhZy5cbiAgICAgIHBhcmFtZXRlclZhbHVlID0gY29sbGVjdEFuSFRUUFF1b3RlZFN0cmluZyhpbnB1dCwgcG9zaXRpb24sIHRydWUpXG5cbiAgICAgIC8vIDIuIENvbGxlY3QgYSBzZXF1ZW5jZSBvZiBjb2RlIHBvaW50cyB0aGF0IGFyZSBub3RcbiAgICAgIC8vIFUrMDAzQiAoOykgZnJvbSBpbnB1dCwgZ2l2ZW4gcG9zaXRpb24uXG4gICAgICBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdChcbiAgICAgICAgJzsnLFxuICAgICAgICBpbnB1dCxcbiAgICAgICAgcG9zaXRpb25cbiAgICAgIClcblxuICAgIC8vIDkuIE90aGVyd2lzZTpcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gMS4gU2V0IHBhcmFtZXRlclZhbHVlIHRvIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZ1xuICAgICAgLy8gYSBzZXF1ZW5jZSBvZiBjb2RlIHBvaW50cyB0aGF0IGFyZSBub3QgVSswMDNCICg7KVxuICAgICAgLy8gZnJvbSBpbnB1dCwgZ2l2ZW4gcG9zaXRpb24uXG4gICAgICBwYXJhbWV0ZXJWYWx1ZSA9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0KFxuICAgICAgICAnOycsXG4gICAgICAgIGlucHV0LFxuICAgICAgICBwb3NpdGlvblxuICAgICAgKVxuXG4gICAgICAvLyAyLiBSZW1vdmUgYW55IHRyYWlsaW5nIEhUVFAgd2hpdGVzcGFjZSBmcm9tIHBhcmFtZXRlclZhbHVlLlxuICAgICAgcGFyYW1ldGVyVmFsdWUgPSByZW1vdmVIVFRQV2hpdGVzcGFjZShwYXJhbWV0ZXJWYWx1ZSwgZmFsc2UsIHRydWUpXG5cbiAgICAgIC8vIDMuIElmIHBhcmFtZXRlclZhbHVlIGlzIHRoZSBlbXB0eSBzdHJpbmcsIHRoZW4gY29udGludWUuXG4gICAgICBpZiAocGFyYW1ldGVyVmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gMTAuIElmIGFsbCBvZiB0aGUgZm9sbG93aW5nIGFyZSB0cnVlXG4gICAgLy8gLSBwYXJhbWV0ZXJOYW1lIGlzIG5vdCB0aGUgZW1wdHkgc3RyaW5nXG4gICAgLy8gLSBwYXJhbWV0ZXJOYW1lIHNvbGVseSBjb250YWlucyBIVFRQIHRva2VuIGNvZGUgcG9pbnRzXG4gICAgLy8gLSBwYXJhbWV0ZXJWYWx1ZSBzb2xlbHkgY29udGFpbnMgSFRUUCBxdW90ZWQtc3RyaW5nIHRva2VuIGNvZGUgcG9pbnRzXG4gICAgLy8gLSBtaW1lVHlwZeKAmXMgcGFyYW1ldGVyc1twYXJhbWV0ZXJOYW1lXSBkb2VzIG5vdCBleGlzdFxuICAgIC8vIHRoZW4gc2V0IG1pbWVUeXBl4oCZcyBwYXJhbWV0ZXJzW3BhcmFtZXRlck5hbWVdIHRvIHBhcmFtZXRlclZhbHVlLlxuICAgIGlmIChcbiAgICAgIHBhcmFtZXRlck5hbWUubGVuZ3RoICE9PSAwICYmXG4gICAgICBIVFRQX1RPS0VOX0NPREVQT0lOVFMudGVzdChwYXJhbWV0ZXJOYW1lKSAmJlxuICAgICAgKHBhcmFtZXRlclZhbHVlLmxlbmd0aCA9PT0gMCB8fCBIVFRQX1FVT1RFRF9TVFJJTkdfVE9LRU5TLnRlc3QocGFyYW1ldGVyVmFsdWUpKSAmJlxuICAgICAgIW1pbWVUeXBlLnBhcmFtZXRlcnMuaGFzKHBhcmFtZXRlck5hbWUpXG4gICAgKSB7XG4gICAgICBtaW1lVHlwZS5wYXJhbWV0ZXJzLnNldChwYXJhbWV0ZXJOYW1lLCBwYXJhbWV0ZXJWYWx1ZSlcbiAgICB9XG4gIH1cblxuICAvLyAxMi4gUmV0dXJuIG1pbWVUeXBlLlxuICByZXR1cm4gbWltZVR5cGVcbn1cblxuLy8gaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2ZvcmdpdmluZy1iYXNlNjQtZGVjb2RlXG4vKiogQHBhcmFtIHtzdHJpbmd9IGRhdGEgKi9cbmZ1bmN0aW9uIGZvcmdpdmluZ0Jhc2U2NCAoZGF0YSkge1xuICAvLyAxLiBSZW1vdmUgYWxsIEFTQ0lJIHdoaXRlc3BhY2UgZnJvbSBkYXRhLlxuICBkYXRhID0gZGF0YS5yZXBsYWNlKC9bXFx1MDAwOVxcdTAwMEFcXHUwMDBDXFx1MDAwRFxcdTAwMjBdL2csICcnKSAgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gIC8vIDIuIElmIGRhdGHigJlzIGNvZGUgcG9pbnQgbGVuZ3RoIGRpdmlkZXMgYnkgNCBsZWF2aW5nXG4gIC8vIG5vIHJlbWFpbmRlciwgdGhlbjpcbiAgaWYgKGRhdGEubGVuZ3RoICUgNCA9PT0gMCkge1xuICAgIC8vIDEuIElmIGRhdGEgZW5kcyB3aXRoIG9uZSBvciB0d28gVSswMDNEICg9KSBjb2RlIHBvaW50cyxcbiAgICAvLyB0aGVuIHJlbW92ZSB0aGVtIGZyb20gZGF0YS5cbiAgICBkYXRhID0gZGF0YS5yZXBsYWNlKC89Pz0kLywgJycpXG4gIH1cblxuICAvLyAzLiBJZiBkYXRh4oCZcyBjb2RlIHBvaW50IGxlbmd0aCBkaXZpZGVzIGJ5IDQgbGVhdmluZ1xuICAvLyBhIHJlbWFpbmRlciBvZiAxLCB0aGVuIHJldHVybiBmYWlsdXJlLlxuICBpZiAoZGF0YS5sZW5ndGggJSA0ID09PSAxKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgLy8gNC4gSWYgZGF0YSBjb250YWlucyBhIGNvZGUgcG9pbnQgdGhhdCBpcyBub3Qgb25lIG9mXG4gIC8vICBVKzAwMkIgKCspXG4gIC8vICBVKzAwMkYgKC8pXG4gIC8vICBBU0NJSSBhbHBoYW51bWVyaWNcbiAgLy8gdGhlbiByZXR1cm4gZmFpbHVyZS5cbiAgaWYgKC9bXisvMC05QS1aYS16XS8udGVzdChkYXRhKSkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIGNvbnN0IGJpbmFyeSA9IGF0b2IoZGF0YSlcbiAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheShiaW5hcnkubGVuZ3RoKVxuXG4gIGZvciAobGV0IGJ5dGUgPSAwOyBieXRlIDwgYmluYXJ5Lmxlbmd0aDsgYnl0ZSsrKSB7XG4gICAgYnl0ZXNbYnl0ZV0gPSBiaW5hcnkuY2hhckNvZGVBdChieXRlKVxuICB9XG5cbiAgcmV0dXJuIGJ5dGVzXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb2xsZWN0LWFuLWh0dHAtcXVvdGVkLXN0cmluZ1xuLy8gdGVzdHM6IGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNleGFtcGxlLWh0dHAtcXVvdGVkLXN0cmluZ1xuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRcbiAqIEBwYXJhbSB7eyBwb3NpdGlvbjogbnVtYmVyIH19IHBvc2l0aW9uXG4gKiBAcGFyYW0ge2Jvb2xlYW4/fSBleHRyYWN0VmFsdWVcbiAqL1xuZnVuY3Rpb24gY29sbGVjdEFuSFRUUFF1b3RlZFN0cmluZyAoaW5wdXQsIHBvc2l0aW9uLCBleHRyYWN0VmFsdWUpIHtcbiAgLy8gMS4gTGV0IHBvc2l0aW9uU3RhcnQgYmUgcG9zaXRpb24uXG4gIGNvbnN0IHBvc2l0aW9uU3RhcnQgPSBwb3NpdGlvbi5wb3NpdGlvblxuXG4gIC8vIDIuIExldCB2YWx1ZSBiZSB0aGUgZW1wdHkgc3RyaW5nLlxuICBsZXQgdmFsdWUgPSAnJ1xuXG4gIC8vIDMuIEFzc2VydDogdGhlIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluIGlucHV0XG4gIC8vIGlzIFUrMDAyMiAoXCIpLlxuICBhc3NlcnQoaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dID09PSAnXCInKVxuXG4gIC8vIDQuIEFkdmFuY2UgcG9zaXRpb24gYnkgMS5cbiAgcG9zaXRpb24ucG9zaXRpb24rK1xuXG4gIC8vIDUuIFdoaWxlIHRydWU6XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgLy8gMS4gQXBwZW5kIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzXG4gICAgLy8gdGhhdCBhcmUgbm90IFUrMDAyMiAoXCIpIG9yIFUrMDA1QyAoXFwpIGZyb20gaW5wdXQsIGdpdmVuXG4gICAgLy8gcG9zaXRpb24sIHRvIHZhbHVlLlxuICAgIHZhbHVlICs9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMoXG4gICAgICAoY2hhcikgPT4gY2hhciAhPT0gJ1wiJyAmJiBjaGFyICE9PSAnXFxcXCcsXG4gICAgICBpbnB1dCxcbiAgICAgIHBvc2l0aW9uXG4gICAgKVxuXG4gICAgLy8gMi4gSWYgcG9zaXRpb24gaXMgcGFzdCB0aGUgZW5kIG9mIGlucHV0LCB0aGVuIGJyZWFrLlxuICAgIGlmIChwb3NpdGlvbi5wb3NpdGlvbiA+PSBpbnB1dC5sZW5ndGgpIHtcbiAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgLy8gMy4gTGV0IHF1b3RlT3JCYWNrc2xhc2ggYmUgdGhlIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluXG4gICAgLy8gaW5wdXQuXG4gICAgY29uc3QgcXVvdGVPckJhY2tzbGFzaCA9IGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXVxuXG4gICAgLy8gNC4gQWR2YW5jZSBwb3NpdGlvbiBieSAxLlxuICAgIHBvc2l0aW9uLnBvc2l0aW9uKytcblxuICAgIC8vIDUuIElmIHF1b3RlT3JCYWNrc2xhc2ggaXMgVSswMDVDIChcXCksIHRoZW46XG4gICAgaWYgKHF1b3RlT3JCYWNrc2xhc2ggPT09ICdcXFxcJykge1xuICAgICAgLy8gMS4gSWYgcG9zaXRpb24gaXMgcGFzdCB0aGUgZW5kIG9mIGlucHV0LCB0aGVuIGFwcGVuZFxuICAgICAgLy8gVSswMDVDIChcXCkgdG8gdmFsdWUgYW5kIGJyZWFrLlxuICAgICAgaWYgKHBvc2l0aW9uLnBvc2l0aW9uID49IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICB2YWx1ZSArPSAnXFxcXCdcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgLy8gMi4gQXBwZW5kIHRoZSBjb2RlIHBvaW50IGF0IHBvc2l0aW9uIHdpdGhpbiBpbnB1dCB0byB2YWx1ZS5cbiAgICAgIHZhbHVlICs9IGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXVxuXG4gICAgICAvLyAzLiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuXG4gICAgICBwb3NpdGlvbi5wb3NpdGlvbisrXG5cbiAgICAvLyA2LiBPdGhlcndpc2U6XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIDEuIEFzc2VydDogcXVvdGVPckJhY2tzbGFzaCBpcyBVKzAwMjIgKFwiKS5cbiAgICAgIGFzc2VydChxdW90ZU9yQmFja3NsYXNoID09PSAnXCInKVxuXG4gICAgICAvLyAyLiBCcmVhay5cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgLy8gNi4gSWYgdGhlIGV4dHJhY3QtdmFsdWUgZmxhZyBpcyBzZXQsIHRoZW4gcmV0dXJuIHZhbHVlLlxuICBpZiAoZXh0cmFjdFZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cblxuICAvLyA3LiBSZXR1cm4gdGhlIGNvZGUgcG9pbnRzIGZyb20gcG9zaXRpb25TdGFydCB0byBwb3NpdGlvbixcbiAgLy8gaW5jbHVzaXZlLCB3aXRoaW4gaW5wdXQuXG4gIHJldHVybiBpbnB1dC5zbGljZShwb3NpdGlvblN0YXJ0LCBwb3NpdGlvbi5wb3NpdGlvbilcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jc2VyaWFsaXplLWEtbWltZS10eXBlXG4gKi9cbmZ1bmN0aW9uIHNlcmlhbGl6ZUFNaW1lVHlwZSAobWltZVR5cGUpIHtcbiAgYXNzZXJ0KG1pbWVUeXBlICE9PSAnZmFpbHVyZScpXG4gIGNvbnN0IHsgcGFyYW1ldGVycywgZXNzZW5jZSB9ID0gbWltZVR5cGVcblxuICAvLyAxLiBMZXQgc2VyaWFsaXphdGlvbiBiZSB0aGUgY29uY2F0ZW5hdGlvbiBvZiBtaW1lVHlwZeKAmXNcbiAgLy8gICAgdHlwZSwgVSswMDJGICgvKSwgYW5kIG1pbWVUeXBl4oCZcyBzdWJ0eXBlLlxuICBsZXQgc2VyaWFsaXphdGlvbiA9IGVzc2VuY2VcblxuICAvLyAyLiBGb3IgZWFjaCBuYW1lIOKGkiB2YWx1ZSBvZiBtaW1lVHlwZeKAmXMgcGFyYW1ldGVyczpcbiAgZm9yIChsZXQgW25hbWUsIHZhbHVlXSBvZiBwYXJhbWV0ZXJzLmVudHJpZXMoKSkge1xuICAgIC8vIDEuIEFwcGVuZCBVKzAwM0IgKDspIHRvIHNlcmlhbGl6YXRpb24uXG4gICAgc2VyaWFsaXphdGlvbiArPSAnOydcblxuICAgIC8vIDIuIEFwcGVuZCBuYW1lIHRvIHNlcmlhbGl6YXRpb24uXG4gICAgc2VyaWFsaXphdGlvbiArPSBuYW1lXG5cbiAgICAvLyAzLiBBcHBlbmQgVSswMDNEICg9KSB0byBzZXJpYWxpemF0aW9uLlxuICAgIHNlcmlhbGl6YXRpb24gKz0gJz0nXG5cbiAgICAvLyA0LiBJZiB2YWx1ZSBkb2VzIG5vdCBzb2xlbHkgY29udGFpbiBIVFRQIHRva2VuIGNvZGVcbiAgICAvLyAgICBwb2ludHMgb3IgdmFsdWUgaXMgdGhlIGVtcHR5IHN0cmluZywgdGhlbjpcbiAgICBpZiAoIUhUVFBfVE9LRU5fQ09ERVBPSU5UUy50ZXN0KHZhbHVlKSkge1xuICAgICAgLy8gMS4gUHJlY2VkZSBlYWNoIG9jY3VyZW5jZSBvZiBVKzAwMjIgKFwiKSBvclxuICAgICAgLy8gICAgVSswMDVDIChcXCkgaW4gdmFsdWUgd2l0aCBVKzAwNUMgKFxcKS5cbiAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvKFxcXFx8XCIpL2csICdcXFxcJDEnKVxuXG4gICAgICAvLyAyLiBQcmVwZW5kIFUrMDAyMiAoXCIpIHRvIHZhbHVlLlxuICAgICAgdmFsdWUgPSAnXCInICsgdmFsdWVcblxuICAgICAgLy8gMy4gQXBwZW5kIFUrMDAyMiAoXCIpIHRvIHZhbHVlLlxuICAgICAgdmFsdWUgKz0gJ1wiJ1xuICAgIH1cblxuICAgIC8vIDUuIEFwcGVuZCB2YWx1ZSB0byBzZXJpYWxpemF0aW9uLlxuICAgIHNlcmlhbGl6YXRpb24gKz0gdmFsdWVcbiAgfVxuXG4gIC8vIDMuIFJldHVybiBzZXJpYWxpemF0aW9uLlxuICByZXR1cm4gc2VyaWFsaXphdGlvblxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtd2hpdGVzcGFjZVxuICogQHBhcmFtIHtzdHJpbmd9IGNoYXJcbiAqL1xuZnVuY3Rpb24gaXNIVFRQV2hpdGVTcGFjZSAoY2hhcikge1xuICByZXR1cm4gY2hhciA9PT0gJ1xccicgfHwgY2hhciA9PT0gJ1xcbicgfHwgY2hhciA9PT0gJ1xcdCcgfHwgY2hhciA9PT0gJyAnXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC13aGl0ZXNwYWNlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUhUVFBXaGl0ZXNwYWNlIChzdHIsIGxlYWRpbmcgPSB0cnVlLCB0cmFpbGluZyA9IHRydWUpIHtcbiAgbGV0IGxlYWQgPSAwXG4gIGxldCB0cmFpbCA9IHN0ci5sZW5ndGggLSAxXG5cbiAgaWYgKGxlYWRpbmcpIHtcbiAgICBmb3IgKDsgbGVhZCA8IHN0ci5sZW5ndGggJiYgaXNIVFRQV2hpdGVTcGFjZShzdHJbbGVhZF0pOyBsZWFkKyspO1xuICB9XG5cbiAgaWYgKHRyYWlsaW5nKSB7XG4gICAgZm9yICg7IHRyYWlsID4gMCAmJiBpc0hUVFBXaGl0ZVNwYWNlKHN0clt0cmFpbF0pOyB0cmFpbC0tKTtcbiAgfVxuXG4gIHJldHVybiBzdHIuc2xpY2UobGVhZCwgdHJhaWwgKyAxKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2FzY2lpLXdoaXRlc3BhY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBjaGFyXG4gKi9cbmZ1bmN0aW9uIGlzQVNDSUlXaGl0ZXNwYWNlIChjaGFyKSB7XG4gIHJldHVybiBjaGFyID09PSAnXFxyJyB8fCBjaGFyID09PSAnXFxuJyB8fCBjaGFyID09PSAnXFx0JyB8fCBjaGFyID09PSAnXFxmJyB8fCBjaGFyID09PSAnICdcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNzdHJpcC1sZWFkaW5nLWFuZC10cmFpbGluZy1hc2NpaS13aGl0ZXNwYWNlXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUFTQ0lJV2hpdGVzcGFjZSAoc3RyLCBsZWFkaW5nID0gdHJ1ZSwgdHJhaWxpbmcgPSB0cnVlKSB7XG4gIGxldCBsZWFkID0gMFxuICBsZXQgdHJhaWwgPSBzdHIubGVuZ3RoIC0gMVxuXG4gIGlmIChsZWFkaW5nKSB7XG4gICAgZm9yICg7IGxlYWQgPCBzdHIubGVuZ3RoICYmIGlzQVNDSUlXaGl0ZXNwYWNlKHN0cltsZWFkXSk7IGxlYWQrKyk7XG4gIH1cblxuICBpZiAodHJhaWxpbmcpIHtcbiAgICBmb3IgKDsgdHJhaWwgPiAwICYmIGlzQVNDSUlXaGl0ZXNwYWNlKHN0clt0cmFpbF0pOyB0cmFpbC0tKTtcbiAgfVxuXG4gIHJldHVybiBzdHIuc2xpY2UobGVhZCwgdHJhaWwgKyAxKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZGF0YVVSTFByb2Nlc3NvcixcbiAgVVJMU2VyaWFsaXplcixcbiAgY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50cyxcbiAgY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QsXG4gIHN0cmluZ1BlcmNlbnREZWNvZGUsXG4gIHBhcnNlTUlNRVR5cGUsXG4gIGNvbGxlY3RBbkhUVFBRdW90ZWRTdHJpbmcsXG4gIHNlcmlhbGl6ZUFNaW1lVHlwZVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBCbG9iLCBGaWxlOiBOYXRpdmVGaWxlIH0gPSByZXF1aXJlKCdidWZmZXInKVxuY29uc3QgeyB0eXBlcyB9ID0gcmVxdWlyZSgndXRpbCcpXG5jb25zdCB7IGtTdGF0ZSB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgaXNCbG9iTGlrZSB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuL3dlYmlkbCcpXG5jb25zdCB7IHBhcnNlTUlNRVR5cGUsIHNlcmlhbGl6ZUFNaW1lVHlwZSB9ID0gcmVxdWlyZSgnLi9kYXRhVVJMJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKVxuXG5jbGFzcyBGaWxlIGV4dGVuZHMgQmxvYiB7XG4gIGNvbnN0cnVjdG9yIChmaWxlQml0cywgZmlsZU5hbWUsIG9wdGlvbnMgPSB7fSkge1xuICAgIC8vIFRoZSBGaWxlIGNvbnN0cnVjdG9yIGlzIGludm9rZWQgd2l0aCB0d28gb3IgdGhyZWUgcGFyYW1ldGVycywgZGVwZW5kaW5nXG4gICAgLy8gb24gd2hldGhlciB0aGUgb3B0aW9uYWwgZGljdGlvbmFyeSBwYXJhbWV0ZXIgaXMgdXNlZC4gV2hlbiB0aGUgRmlsZSgpXG4gICAgLy8gY29uc3RydWN0b3IgaXMgaW52b2tlZCwgdXNlciBhZ2VudHMgbXVzdCBydW4gdGhlIGZvbGxvd2luZyBzdGVwczpcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnRmlsZSBjb25zdHJ1Y3RvcicgfSlcblxuICAgIGZpbGVCaXRzID0gd2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPEJsb2JQYXJ0PiddKGZpbGVCaXRzKVxuICAgIGZpbGVOYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKGZpbGVOYW1lKVxuICAgIG9wdGlvbnMgPSB3ZWJpZGwuY29udmVydGVycy5GaWxlUHJvcGVydHlCYWcob3B0aW9ucylcblxuICAgIC8vIDEuIExldCBieXRlcyBiZSB0aGUgcmVzdWx0IG9mIHByb2Nlc3NpbmcgYmxvYiBwYXJ0cyBnaXZlbiBmaWxlQml0cyBhbmRcbiAgICAvLyBvcHRpb25zLlxuICAgIC8vIE5vdGU6IEJsb2IgaGFuZGxlcyB0aGlzIGZvciB1c1xuXG4gICAgLy8gMi4gTGV0IG4gYmUgdGhlIGZpbGVOYW1lIGFyZ3VtZW50IHRvIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICBjb25zdCBuID0gZmlsZU5hbWVcblxuICAgIC8vIDMuIFByb2Nlc3MgRmlsZVByb3BlcnR5QmFnIGRpY3Rpb25hcnkgYXJndW1lbnQgYnkgcnVubmluZyB0aGUgZm9sbG93aW5nXG4gICAgLy8gc3Vic3RlcHM6XG5cbiAgICAvLyAgICAxLiBJZiB0aGUgdHlwZSBtZW1iZXIgaXMgcHJvdmlkZWQgYW5kIGlzIG5vdCB0aGUgZW1wdHkgc3RyaW5nLCBsZXQgdFxuICAgIC8vICAgIGJlIHNldCB0byB0aGUgdHlwZSBkaWN0aW9uYXJ5IG1lbWJlci4gSWYgdCBjb250YWlucyBhbnkgY2hhcmFjdGVyc1xuICAgIC8vICAgIG91dHNpZGUgdGhlIHJhbmdlIFUrMDAyMCB0byBVKzAwN0UsIHRoZW4gc2V0IHQgdG8gdGhlIGVtcHR5IHN0cmluZ1xuICAgIC8vICAgIGFuZCByZXR1cm4gZnJvbSB0aGVzZSBzdWJzdGVwcy5cbiAgICAvLyAgICAyLiBDb252ZXJ0IGV2ZXJ5IGNoYXJhY3RlciBpbiB0IHRvIEFTQ0lJIGxvd2VyY2FzZS5cbiAgICBsZXQgdCA9IG9wdGlvbnMudHlwZVxuICAgIGxldCBkXG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbGFiZWxzXG4gICAgc3Vic3RlcDoge1xuICAgICAgaWYgKHQpIHtcbiAgICAgICAgdCA9IHBhcnNlTUlNRVR5cGUodClcblxuICAgICAgICBpZiAodCA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgICAgdCA9ICcnXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxhYmVsc1xuICAgICAgICAgIGJyZWFrIHN1YnN0ZXBcbiAgICAgICAgfVxuXG4gICAgICAgIHQgPSBzZXJpYWxpemVBTWltZVR5cGUodCkudG9Mb3dlckNhc2UoKVxuICAgICAgfVxuXG4gICAgICAvLyAgICAzLiBJZiB0aGUgbGFzdE1vZGlmaWVkIG1lbWJlciBpcyBwcm92aWRlZCwgbGV0IGQgYmUgc2V0IHRvIHRoZVxuICAgICAgLy8gICAgbGFzdE1vZGlmaWVkIGRpY3Rpb25hcnkgbWVtYmVyLiBJZiBpdCBpcyBub3QgcHJvdmlkZWQsIHNldCBkIHRvIHRoZVxuICAgICAgLy8gICAgY3VycmVudCBkYXRlIGFuZCB0aW1lIHJlcHJlc2VudGVkIGFzIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHNpbmNlXG4gICAgICAvLyAgICB0aGUgVW5peCBFcG9jaCAod2hpY2ggaXMgdGhlIGVxdWl2YWxlbnQgb2YgRGF0ZS5ub3coKSBbRUNNQS0yNjJdKS5cbiAgICAgIGQgPSBvcHRpb25zLmxhc3RNb2RpZmllZFxuICAgIH1cblxuICAgIC8vIDQuIFJldHVybiBhIG5ldyBGaWxlIG9iamVjdCBGIHN1Y2ggdGhhdDpcbiAgICAvLyBGIHJlZmVycyB0byB0aGUgYnl0ZXMgYnl0ZSBzZXF1ZW5jZS5cbiAgICAvLyBGLnNpemUgaXMgc2V0IHRvIHRoZSBudW1iZXIgb2YgdG90YWwgYnl0ZXMgaW4gYnl0ZXMuXG4gICAgLy8gRi5uYW1lIGlzIHNldCB0byBuLlxuICAgIC8vIEYudHlwZSBpcyBzZXQgdG8gdC5cbiAgICAvLyBGLmxhc3RNb2RpZmllZCBpcyBzZXQgdG8gZC5cblxuICAgIHN1cGVyKHByb2Nlc3NCbG9iUGFydHMoZmlsZUJpdHMsIG9wdGlvbnMpLCB7IHR5cGU6IHQgfSlcbiAgICB0aGlzW2tTdGF0ZV0gPSB7XG4gICAgICBuYW1lOiBuLFxuICAgICAgbGFzdE1vZGlmaWVkOiBkLFxuICAgICAgdHlwZTogdFxuICAgIH1cbiAgfVxuXG4gIGdldCBuYW1lICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5uYW1lXG4gIH1cblxuICBnZXQgbGFzdE1vZGlmaWVkICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5sYXN0TW9kaWZpZWRcbiAgfVxuXG4gIGdldCB0eXBlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS50eXBlXG4gIH1cbn1cblxuY2xhc3MgRmlsZUxpa2Uge1xuICBjb25zdHJ1Y3RvciAoYmxvYkxpa2UsIGZpbGVOYW1lLCBvcHRpb25zID0ge30pIHtcbiAgICAvLyBUT0RPOiBhcmd1bWVudCBpZGwgdHlwZSBjaGVja1xuXG4gICAgLy8gVGhlIEZpbGUgY29uc3RydWN0b3IgaXMgaW52b2tlZCB3aXRoIHR3byBvciB0aHJlZSBwYXJhbWV0ZXJzLCBkZXBlbmRpbmdcbiAgICAvLyBvbiB3aGV0aGVyIHRoZSBvcHRpb25hbCBkaWN0aW9uYXJ5IHBhcmFtZXRlciBpcyB1c2VkLiBXaGVuIHRoZSBGaWxlKClcbiAgICAvLyBjb25zdHJ1Y3RvciBpcyBpbnZva2VkLCB1c2VyIGFnZW50cyBtdXN0IHJ1biB0aGUgZm9sbG93aW5nIHN0ZXBzOlxuXG4gICAgLy8gMS4gTGV0IGJ5dGVzIGJlIHRoZSByZXN1bHQgb2YgcHJvY2Vzc2luZyBibG9iIHBhcnRzIGdpdmVuIGZpbGVCaXRzIGFuZFxuICAgIC8vIG9wdGlvbnMuXG5cbiAgICAvLyAyLiBMZXQgbiBiZSB0aGUgZmlsZU5hbWUgYXJndW1lbnQgdG8gdGhlIGNvbnN0cnVjdG9yLlxuICAgIGNvbnN0IG4gPSBmaWxlTmFtZVxuXG4gICAgLy8gMy4gUHJvY2VzcyBGaWxlUHJvcGVydHlCYWcgZGljdGlvbmFyeSBhcmd1bWVudCBieSBydW5uaW5nIHRoZSBmb2xsb3dpbmdcbiAgICAvLyBzdWJzdGVwczpcblxuICAgIC8vICAgIDEuIElmIHRoZSB0eXBlIG1lbWJlciBpcyBwcm92aWRlZCBhbmQgaXMgbm90IHRoZSBlbXB0eSBzdHJpbmcsIGxldCB0XG4gICAgLy8gICAgYmUgc2V0IHRvIHRoZSB0eXBlIGRpY3Rpb25hcnkgbWVtYmVyLiBJZiB0IGNvbnRhaW5zIGFueSBjaGFyYWN0ZXJzXG4gICAgLy8gICAgb3V0c2lkZSB0aGUgcmFuZ2UgVSswMDIwIHRvIFUrMDA3RSwgdGhlbiBzZXQgdCB0byB0aGUgZW1wdHkgc3RyaW5nXG4gICAgLy8gICAgYW5kIHJldHVybiBmcm9tIHRoZXNlIHN1YnN0ZXBzLlxuICAgIC8vICAgIFRPRE9cbiAgICBjb25zdCB0ID0gb3B0aW9ucy50eXBlXG5cbiAgICAvLyAgICAyLiBDb252ZXJ0IGV2ZXJ5IGNoYXJhY3RlciBpbiB0IHRvIEFTQ0lJIGxvd2VyY2FzZS5cbiAgICAvLyAgICBUT0RPXG5cbiAgICAvLyAgICAzLiBJZiB0aGUgbGFzdE1vZGlmaWVkIG1lbWJlciBpcyBwcm92aWRlZCwgbGV0IGQgYmUgc2V0IHRvIHRoZVxuICAgIC8vICAgIGxhc3RNb2RpZmllZCBkaWN0aW9uYXJ5IG1lbWJlci4gSWYgaXQgaXMgbm90IHByb3ZpZGVkLCBzZXQgZCB0byB0aGVcbiAgICAvLyAgICBjdXJyZW50IGRhdGUgYW5kIHRpbWUgcmVwcmVzZW50ZWQgYXMgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgc2luY2VcbiAgICAvLyAgICB0aGUgVW5peCBFcG9jaCAod2hpY2ggaXMgdGhlIGVxdWl2YWxlbnQgb2YgRGF0ZS5ub3coKSBbRUNNQS0yNjJdKS5cbiAgICBjb25zdCBkID0gb3B0aW9ucy5sYXN0TW9kaWZpZWQgPz8gRGF0ZS5ub3coKVxuXG4gICAgLy8gNC4gUmV0dXJuIGEgbmV3IEZpbGUgb2JqZWN0IEYgc3VjaCB0aGF0OlxuICAgIC8vIEYgcmVmZXJzIHRvIHRoZSBieXRlcyBieXRlIHNlcXVlbmNlLlxuICAgIC8vIEYuc2l6ZSBpcyBzZXQgdG8gdGhlIG51bWJlciBvZiB0b3RhbCBieXRlcyBpbiBieXRlcy5cbiAgICAvLyBGLm5hbWUgaXMgc2V0IHRvIG4uXG4gICAgLy8gRi50eXBlIGlzIHNldCB0byB0LlxuICAgIC8vIEYubGFzdE1vZGlmaWVkIGlzIHNldCB0byBkLlxuXG4gICAgdGhpc1trU3RhdGVdID0ge1xuICAgICAgYmxvYkxpa2UsXG4gICAgICBuYW1lOiBuLFxuICAgICAgdHlwZTogdCxcbiAgICAgIGxhc3RNb2RpZmllZDogZFxuICAgIH1cbiAgfVxuXG4gIHN0cmVhbSAoLi4uYXJncykge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVMaWtlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5ibG9iTGlrZS5zdHJlYW0oLi4uYXJncylcbiAgfVxuXG4gIGFycmF5QnVmZmVyICguLi5hcmdzKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZUxpa2UpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmJsb2JMaWtlLmFycmF5QnVmZmVyKC4uLmFyZ3MpXG4gIH1cblxuICBzbGljZSAoLi4uYXJncykge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVMaWtlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5ibG9iTGlrZS5zbGljZSguLi5hcmdzKVxuICB9XG5cbiAgdGV4dCAoLi4uYXJncykge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVMaWtlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5ibG9iTGlrZS50ZXh0KC4uLmFyZ3MpXG4gIH1cblxuICBnZXQgc2l6ZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZUxpa2UpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmJsb2JMaWtlLnNpemVcbiAgfVxuXG4gIGdldCB0eXBlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlTGlrZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uYmxvYkxpa2UudHlwZVxuICB9XG5cbiAgZ2V0IG5hbWUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVMaWtlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5uYW1lXG4gIH1cblxuICBnZXQgbGFzdE1vZGlmaWVkICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlTGlrZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ubGFzdE1vZGlmaWVkXG4gIH1cblxuICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10gKCkge1xuICAgIHJldHVybiAnRmlsZSdcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhGaWxlLnByb3RvdHlwZSwge1xuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnRmlsZScsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0sXG4gIG5hbWU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGxhc3RNb2RpZmllZDoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxud2ViaWRsLmNvbnZlcnRlcnMuQmxvYiA9IHdlYmlkbC5pbnRlcmZhY2VDb252ZXJ0ZXIoQmxvYilcblxud2ViaWRsLmNvbnZlcnRlcnMuQmxvYlBhcnQgPSBmdW5jdGlvbiAoViwgb3B0cykge1xuICBpZiAod2ViaWRsLnV0aWwuVHlwZShWKSA9PT0gJ09iamVjdCcpIHtcbiAgICBpZiAoaXNCbG9iTGlrZShWKSkge1xuICAgICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkJsb2IoViwgeyBzdHJpY3Q6IGZhbHNlIH0pXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgQXJyYXlCdWZmZXIuaXNWaWV3KFYpIHx8XG4gICAgICB0eXBlcy5pc0FueUFycmF5QnVmZmVyKFYpXG4gICAgKSB7XG4gICAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuQnVmZmVyU291cmNlKFYsIG9wdHMpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhWLCBvcHRzKVxufVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8QmxvYlBhcnQ+J10gPSB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLkJsb2JQYXJ0XG4pXG5cbi8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9GaWxlQVBJLyNkZm4tRmlsZVByb3BlcnR5QmFnXG53ZWJpZGwuY29udmVydGVycy5GaWxlUHJvcGVydHlCYWcgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIHtcbiAgICBrZXk6ICdsYXN0TW9kaWZpZWQnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ2xvbmcgbG9uZyddLFxuICAgIGdldCBkZWZhdWx0VmFsdWUgKCkge1xuICAgICAgcmV0dXJuIERhdGUubm93KClcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBrZXk6ICd0eXBlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6ICcnXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdlbmRpbmdzJyxcbiAgICBjb252ZXJ0ZXI6ICh2YWx1ZSkgPT4ge1xuICAgICAgdmFsdWUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcodmFsdWUpXG4gICAgICB2YWx1ZSA9IHZhbHVlLnRvTG93ZXJDYXNlKClcblxuICAgICAgaWYgKHZhbHVlICE9PSAnbmF0aXZlJykge1xuICAgICAgICB2YWx1ZSA9ICd0cmFuc3BhcmVudCdcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgfSxcbiAgICBkZWZhdWx0VmFsdWU6ICd0cmFuc3BhcmVudCdcbiAgfVxuXSlcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9GaWxlQVBJLyNwcm9jZXNzLWJsb2ItcGFydHNcbiAqIEBwYXJhbSB7KE5vZGVKUy5UeXBlZEFycmF5fEJsb2J8c3RyaW5nKVtdfSBwYXJ0c1xuICogQHBhcmFtIHt7IHR5cGU6IHN0cmluZywgZW5kaW5nczogc3RyaW5nIH19IG9wdGlvbnNcbiAqL1xuZnVuY3Rpb24gcHJvY2Vzc0Jsb2JQYXJ0cyAocGFydHMsIG9wdGlvbnMpIHtcbiAgLy8gMS4gTGV0IGJ5dGVzIGJlIGFuIGVtcHR5IHNlcXVlbmNlIG9mIGJ5dGVzLlxuICAvKiogQHR5cGUge05vZGVKUy5UeXBlZEFycmF5W119ICovXG4gIGNvbnN0IGJ5dGVzID0gW11cblxuICAvLyAyLiBGb3IgZWFjaCBlbGVtZW50IGluIHBhcnRzOlxuICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgcGFydHMpIHtcbiAgICAvLyAxLiBJZiBlbGVtZW50IGlzIGEgVVNWU3RyaW5nLCBydW4gdGhlIGZvbGxvd2luZyBzdWJzdGVwczpcbiAgICBpZiAodHlwZW9mIGVsZW1lbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyAxLiBMZXQgcyBiZSBlbGVtZW50LlxuICAgICAgbGV0IHMgPSBlbGVtZW50XG5cbiAgICAgIC8vIDIuIElmIHRoZSBlbmRpbmdzIG1lbWJlciBvZiBvcHRpb25zIGlzIFwibmF0aXZlXCIsIHNldCBzXG4gICAgICAvLyAgICB0byB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgbGluZSBlbmRpbmdzIHRvIG5hdGl2ZVxuICAgICAgLy8gICAgb2YgZWxlbWVudC5cbiAgICAgIGlmIChvcHRpb25zLmVuZGluZ3MgPT09ICduYXRpdmUnKSB7XG4gICAgICAgIHMgPSBjb252ZXJ0TGluZUVuZGluZ3NOYXRpdmUocylcbiAgICAgIH1cblxuICAgICAgLy8gMy4gQXBwZW5kIHRoZSByZXN1bHQgb2YgVVRGLTggZW5jb2RpbmcgcyB0byBieXRlcy5cbiAgICAgIGJ5dGVzLnB1c2goZW5jb2Rlci5lbmNvZGUocykpXG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHR5cGVzLmlzQW55QXJyYXlCdWZmZXIoZWxlbWVudCkgfHxcbiAgICAgIHR5cGVzLmlzVHlwZWRBcnJheShlbGVtZW50KVxuICAgICkge1xuICAgICAgLy8gMi4gSWYgZWxlbWVudCBpcyBhIEJ1ZmZlclNvdXJjZSwgZ2V0IGEgY29weSBvZiB0aGVcbiAgICAgIC8vICAgIGJ5dGVzIGhlbGQgYnkgdGhlIGJ1ZmZlciBzb3VyY2UsIGFuZCBhcHBlbmQgdGhvc2VcbiAgICAgIC8vICAgIGJ5dGVzIHRvIGJ5dGVzLlxuICAgICAgaWYgKCFlbGVtZW50LmJ1ZmZlcikgeyAvLyBBcnJheUJ1ZmZlclxuICAgICAgICBieXRlcy5wdXNoKG5ldyBVaW50OEFycmF5KGVsZW1lbnQpKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgICBuZXcgVWludDhBcnJheShlbGVtZW50LmJ1ZmZlciwgZWxlbWVudC5ieXRlT2Zmc2V0LCBlbGVtZW50LmJ5dGVMZW5ndGgpXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzQmxvYkxpa2UoZWxlbWVudCkpIHtcbiAgICAgIC8vIDMuIElmIGVsZW1lbnQgaXMgYSBCbG9iLCBhcHBlbmQgdGhlIGJ5dGVzIGl0IHJlcHJlc2VudHNcbiAgICAgIC8vICAgIHRvIGJ5dGVzLlxuICAgICAgYnl0ZXMucHVzaChlbGVtZW50KVxuICAgIH1cbiAgfVxuXG4gIC8vIDMuIFJldHVybiBieXRlcy5cbiAgcmV0dXJuIGJ5dGVzXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3d3dy53My5vcmcvVFIvRmlsZUFQSS8jY29udmVydC1saW5lLWVuZGluZ3MtdG8tbmF0aXZlXG4gKiBAcGFyYW0ge3N0cmluZ30gc1xuICovXG5mdW5jdGlvbiBjb252ZXJ0TGluZUVuZGluZ3NOYXRpdmUgKHMpIHtcbiAgLy8gMS4gTGV0IG5hdGl2ZSBsaW5lIGVuZGluZyBiZSBiZSB0aGUgY29kZSBwb2ludCBVKzAwMEEgTEYuXG4gIGxldCBuYXRpdmVMaW5lRW5kaW5nID0gJ1xcbidcblxuICAvLyAyLiBJZiB0aGUgdW5kZXJseWluZyBwbGF0Zm9ybeKAmXMgY29udmVudGlvbnMgYXJlIHRvXG4gIC8vICAgIHJlcHJlc2VudCBuZXdsaW5lcyBhcyBhIGNhcnJpYWdlIHJldHVybiBhbmQgbGluZSBmZWVkXG4gIC8vICAgIHNlcXVlbmNlLCBzZXQgbmF0aXZlIGxpbmUgZW5kaW5nIHRvIHRoZSBjb2RlIHBvaW50XG4gIC8vICAgIFUrMDAwRCBDUiBmb2xsb3dlZCBieSB0aGUgY29kZSBwb2ludCBVKzAwMEEgTEYuXG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG4gICAgbmF0aXZlTGluZUVuZGluZyA9ICdcXHJcXG4nXG4gIH1cblxuICByZXR1cm4gcy5yZXBsYWNlKC9cXHI/XFxuL2csIG5hdGl2ZUxpbmVFbmRpbmcpXG59XG5cbi8vIElmIHRoaXMgZnVuY3Rpb24gaXMgbW92ZWQgdG8gLi91dGlsLmpzLCBzb21lIHRvb2xzIChzdWNoIGFzXG4vLyByb2xsdXApIHdpbGwgd2FybiBhYm91dCBjaXJjdWxhciBkZXBlbmRlbmNpZXMuIFNlZTpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8xNjI5XG5mdW5jdGlvbiBpc0ZpbGVMaWtlIChvYmplY3QpIHtcbiAgcmV0dXJuIChcbiAgICAoTmF0aXZlRmlsZSAmJiBvYmplY3QgaW5zdGFuY2VvZiBOYXRpdmVGaWxlKSB8fFxuICAgIG9iamVjdCBpbnN0YW5jZW9mIEZpbGUgfHwgKFxuICAgICAgb2JqZWN0ICYmXG4gICAgICAodHlwZW9mIG9iamVjdC5zdHJlYW0gPT09ICdmdW5jdGlvbicgfHxcbiAgICAgIHR5cGVvZiBvYmplY3QuYXJyYXlCdWZmZXIgPT09ICdmdW5jdGlvbicpICYmXG4gICAgICBvYmplY3RbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ0ZpbGUnXG4gICAgKVxuICApXG59XG5cbm1vZHVsZS5leHBvcnRzID0geyBGaWxlLCBGaWxlTGlrZSwgaXNGaWxlTGlrZSB9XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGlzQmxvYkxpa2UsIHRvVVNWU3RyaW5nLCBtYWtlSXRlcmF0b3IgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IGtTdGF0ZSB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgRmlsZTogVW5kaWNpRmlsZSwgRmlsZUxpa2UsIGlzRmlsZUxpa2UgfSA9IHJlcXVpcmUoJy4vZmlsZScpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi93ZWJpZGwnKVxuY29uc3QgeyBCbG9iLCBGaWxlOiBOYXRpdmVGaWxlIH0gPSByZXF1aXJlKCdidWZmZXInKVxuXG4vKiogQHR5cGUge2dsb2JhbFRoaXNbJ0ZpbGUnXX0gKi9cbmNvbnN0IEZpbGUgPSBOYXRpdmVGaWxlID8/IFVuZGljaUZpbGVcblxuLy8gaHR0cHM6Ly94aHIuc3BlYy53aGF0d2cub3JnLyNmb3JtZGF0YVxuY2xhc3MgRm9ybURhdGEge1xuICBjb25zdHJ1Y3RvciAoZm9ybSkge1xuICAgIGlmIChmb3JtICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuY29udmVyc2lvbkZhaWxlZCh7XG4gICAgICAgIHByZWZpeDogJ0Zvcm1EYXRhIGNvbnN0cnVjdG9yJyxcbiAgICAgICAgYXJndW1lbnQ6ICdBcmd1bWVudCAxJyxcbiAgICAgICAgdHlwZXM6IFsndW5kZWZpbmVkJ11cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgdGhpc1trU3RhdGVdID0gW11cbiAgfVxuXG4gIGFwcGVuZCAobmFtZSwgdmFsdWUsIGZpbGVuYW1lID0gdW5kZWZpbmVkKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRm9ybURhdGEpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnRm9ybURhdGEuYXBwZW5kJyB9KVxuXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgIWlzQmxvYkxpa2UodmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBcIkZhaWxlZCB0byBleGVjdXRlICdhcHBlbmQnIG9uICdGb3JtRGF0YSc6IHBhcmFtZXRlciAyIGlzIG5vdCBvZiB0eXBlICdCbG9iJ1wiXG4gICAgICApXG4gICAgfVxuXG4gICAgLy8gMS4gTGV0IHZhbHVlIGJlIHZhbHVlIGlmIGdpdmVuOyBvdGhlcndpc2UgYmxvYlZhbHVlLlxuXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhuYW1lKVxuICAgIHZhbHVlID0gaXNCbG9iTGlrZSh2YWx1ZSlcbiAgICAgID8gd2ViaWRsLmNvbnZlcnRlcnMuQmxvYih2YWx1ZSwgeyBzdHJpY3Q6IGZhbHNlIH0pXG4gICAgICA6IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyh2YWx1ZSlcbiAgICBmaWxlbmFtZSA9IGFyZ3VtZW50cy5sZW5ndGggPT09IDNcbiAgICAgID8gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKGZpbGVuYW1lKVxuICAgICAgOiB1bmRlZmluZWRcblxuICAgIC8vIDIuIExldCBlbnRyeSBiZSB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGFuIGVudHJ5IHdpdGhcbiAgICAvLyBuYW1lLCB2YWx1ZSwgYW5kIGZpbGVuYW1lIGlmIGdpdmVuLlxuICAgIGNvbnN0IGVudHJ5ID0gbWFrZUVudHJ5KG5hbWUsIHZhbHVlLCBmaWxlbmFtZSlcblxuICAgIC8vIDMuIEFwcGVuZCBlbnRyeSB0byB0aGlz4oCZcyBlbnRyeSBsaXN0LlxuICAgIHRoaXNba1N0YXRlXS5wdXNoKGVudHJ5KVxuICB9XG5cbiAgZGVsZXRlIChuYW1lKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRm9ybURhdGEpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRm9ybURhdGEuZGVsZXRlJyB9KVxuXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhuYW1lKVxuXG4gICAgLy8gVGhlIGRlbGV0ZShuYW1lKSBtZXRob2Qgc3RlcHMgYXJlIHRvIHJlbW92ZSBhbGwgZW50cmllcyB3aG9zZSBuYW1lXG4gICAgLy8gaXMgbmFtZSBmcm9tIHRoaXPigJlzIGVudHJ5IGxpc3QuXG4gICAgdGhpc1trU3RhdGVdID0gdGhpc1trU3RhdGVdLmZpbHRlcihlbnRyeSA9PiBlbnRyeS5uYW1lICE9PSBuYW1lKVxuICB9XG5cbiAgZ2V0IChuYW1lKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRm9ybURhdGEpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRm9ybURhdGEuZ2V0JyB9KVxuXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhuYW1lKVxuXG4gICAgLy8gMS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgd2hvc2UgbmFtZSBpcyBuYW1lIGluIHRoaXPigJlzIGVudHJ5IGxpc3QsXG4gICAgLy8gdGhlbiByZXR1cm4gbnVsbC5cbiAgICBjb25zdCBpZHggPSB0aGlzW2tTdGF0ZV0uZmluZEluZGV4KChlbnRyeSkgPT4gZW50cnkubmFtZSA9PT0gbmFtZSlcbiAgICBpZiAoaWR4ID09PSAtMSkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBlbnRyeSB3aG9zZSBuYW1lIGlzIG5hbWUgZnJvbVxuICAgIC8vIHRoaXPigJlzIGVudHJ5IGxpc3QuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXVtpZHhdLnZhbHVlXG4gIH1cblxuICBnZXRBbGwgKG5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdGb3JtRGF0YS5nZXRBbGwnIH0pXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKG5hbWUpXG5cbiAgICAvLyAxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSB3aG9zZSBuYW1lIGlzIG5hbWUgaW4gdGhpc+KAmXMgZW50cnkgbGlzdCxcbiAgICAvLyB0aGVuIHJldHVybiB0aGUgZW1wdHkgbGlzdC5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIHZhbHVlcyBvZiBhbGwgZW50cmllcyB3aG9zZSBuYW1lIGlzIG5hbWUsIGluIG9yZGVyLFxuICAgIC8vIGZyb20gdGhpc+KAmXMgZW50cnkgbGlzdC5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdXG4gICAgICAuZmlsdGVyKChlbnRyeSkgPT4gZW50cnkubmFtZSA9PT0gbmFtZSlcbiAgICAgIC5tYXAoKGVudHJ5KSA9PiBlbnRyeS52YWx1ZSlcbiAgfVxuXG4gIGhhcyAobmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZvcm1EYXRhKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0Zvcm1EYXRhLmhhcycgfSlcblxuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcobmFtZSlcblxuICAgIC8vIFRoZSBoYXMobmFtZSkgbWV0aG9kIHN0ZXBzIGFyZSB0byByZXR1cm4gdHJ1ZSBpZiB0aGVyZSBpcyBhbiBlbnRyeVxuICAgIC8vIHdob3NlIG5hbWUgaXMgbmFtZSBpbiB0aGlz4oCZcyBlbnRyeSBsaXN0OyBvdGhlcndpc2UgZmFsc2UuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5maW5kSW5kZXgoKGVudHJ5KSA9PiBlbnRyeS5uYW1lID09PSBuYW1lKSAhPT0gLTFcbiAgfVxuXG4gIHNldCAobmFtZSwgdmFsdWUsIGZpbGVuYW1lID0gdW5kZWZpbmVkKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRm9ybURhdGEpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnRm9ybURhdGEuc2V0JyB9KVxuXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgIWlzQmxvYkxpa2UodmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBcIkZhaWxlZCB0byBleGVjdXRlICdzZXQnIG9uICdGb3JtRGF0YSc6IHBhcmFtZXRlciAyIGlzIG5vdCBvZiB0eXBlICdCbG9iJ1wiXG4gICAgICApXG4gICAgfVxuXG4gICAgLy8gVGhlIHNldChuYW1lLCB2YWx1ZSkgYW5kIHNldChuYW1lLCBibG9iVmFsdWUsIGZpbGVuYW1lKSBtZXRob2Qgc3RlcHNcbiAgICAvLyBhcmU6XG5cbiAgICAvLyAxLiBMZXQgdmFsdWUgYmUgdmFsdWUgaWYgZ2l2ZW47IG90aGVyd2lzZSBibG9iVmFsdWUuXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKG5hbWUpXG4gICAgdmFsdWUgPSBpc0Jsb2JMaWtlKHZhbHVlKVxuICAgICAgPyB3ZWJpZGwuY29udmVydGVycy5CbG9iKHZhbHVlLCB7IHN0cmljdDogZmFsc2UgfSlcbiAgICAgIDogd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKHZhbHVlKVxuICAgIGZpbGVuYW1lID0gYXJndW1lbnRzLmxlbmd0aCA9PT0gM1xuICAgICAgPyB0b1VTVlN0cmluZyhmaWxlbmFtZSlcbiAgICAgIDogdW5kZWZpbmVkXG5cbiAgICAvLyAyLiBMZXQgZW50cnkgYmUgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhbiBlbnRyeSB3aXRoIG5hbWUsIHZhbHVlLCBhbmRcbiAgICAvLyBmaWxlbmFtZSBpZiBnaXZlbi5cbiAgICBjb25zdCBlbnRyeSA9IG1ha2VFbnRyeShuYW1lLCB2YWx1ZSwgZmlsZW5hbWUpXG5cbiAgICAvLyAzLiBJZiB0aGVyZSBhcmUgZW50cmllcyBpbiB0aGlz4oCZcyBlbnRyeSBsaXN0IHdob3NlIG5hbWUgaXMgbmFtZSwgdGhlblxuICAgIC8vIHJlcGxhY2UgdGhlIGZpcnN0IHN1Y2ggZW50cnkgd2l0aCBlbnRyeSBhbmQgcmVtb3ZlIHRoZSBvdGhlcnMuXG4gICAgY29uc3QgaWR4ID0gdGhpc1trU3RhdGVdLmZpbmRJbmRleCgoZW50cnkpID0+IGVudHJ5Lm5hbWUgPT09IG5hbWUpXG4gICAgaWYgKGlkeCAhPT0gLTEpIHtcbiAgICAgIHRoaXNba1N0YXRlXSA9IFtcbiAgICAgICAgLi4udGhpc1trU3RhdGVdLnNsaWNlKDAsIGlkeCksXG4gICAgICAgIGVudHJ5LFxuICAgICAgICAuLi50aGlzW2tTdGF0ZV0uc2xpY2UoaWR4ICsgMSkuZmlsdGVyKChlbnRyeSkgPT4gZW50cnkubmFtZSAhPT0gbmFtZSlcbiAgICAgIF1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gNC4gT3RoZXJ3aXNlLCBhcHBlbmQgZW50cnkgdG8gdGhpc+KAmXMgZW50cnkgbGlzdC5cbiAgICAgIHRoaXNba1N0YXRlXS5wdXNoKGVudHJ5KVxuICAgIH1cbiAgfVxuXG4gIGVudHJpZXMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZvcm1EYXRhKVxuXG4gICAgcmV0dXJuIG1ha2VJdGVyYXRvcihcbiAgICAgICgpID0+IHRoaXNba1N0YXRlXS5tYXAocGFpciA9PiBbcGFpci5uYW1lLCBwYWlyLnZhbHVlXSksXG4gICAgICAnRm9ybURhdGEnLFxuICAgICAgJ2tleSt2YWx1ZSdcbiAgICApXG4gIH1cblxuICBrZXlzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIHJldHVybiBtYWtlSXRlcmF0b3IoXG4gICAgICAoKSA9PiB0aGlzW2tTdGF0ZV0ubWFwKHBhaXIgPT4gW3BhaXIubmFtZSwgcGFpci52YWx1ZV0pLFxuICAgICAgJ0Zvcm1EYXRhJyxcbiAgICAgICdrZXknXG4gICAgKVxuICB9XG5cbiAgdmFsdWVzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIHJldHVybiBtYWtlSXRlcmF0b3IoXG4gICAgICAoKSA9PiB0aGlzW2tTdGF0ZV0ubWFwKHBhaXIgPT4gW3BhaXIubmFtZSwgcGFpci52YWx1ZV0pLFxuICAgICAgJ0Zvcm1EYXRhJyxcbiAgICAgICd2YWx1ZSdcbiAgICApXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHsodmFsdWU6IHN0cmluZywga2V5OiBzdHJpbmcsIHNlbGY6IEZvcm1EYXRhKSA9PiB2b2lkfSBjYWxsYmFja0ZuXG4gICAqIEBwYXJhbSB7dW5rbm93bn0gdGhpc0FyZ1xuICAgKi9cbiAgZm9yRWFjaCAoY2FsbGJhY2tGbiwgdGhpc0FyZyA9IGdsb2JhbFRoaXMpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdGb3JtRGF0YS5mb3JFYWNoJyB9KVxuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFja0ZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBcIkZhaWxlZCB0byBleGVjdXRlICdmb3JFYWNoJyBvbiAnRm9ybURhdGEnOiBwYXJhbWV0ZXIgMSBpcyBub3Qgb2YgdHlwZSAnRnVuY3Rpb24nLlwiXG4gICAgICApXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgdGhpcykge1xuICAgICAgY2FsbGJhY2tGbi5hcHBseSh0aGlzQXJnLCBbdmFsdWUsIGtleSwgdGhpc10pXG4gICAgfVxuICB9XG59XG5cbkZvcm1EYXRhLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdID0gRm9ybURhdGEucHJvdG90eXBlLmVudHJpZXNcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRm9ybURhdGEucHJvdG90eXBlLCB7XG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdGb3JtRGF0YScsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH1cbn0pXG5cbi8qKlxuICogQHNlZSBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3JtLWNvbnRyb2wtaW5mcmFzdHJ1Y3R1cmUuaHRtbCNjcmVhdGUtYW4tZW50cnlcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge3N0cmluZ3xCbG9ifSB2YWx1ZVxuICogQHBhcmFtIHs/c3RyaW5nfSBmaWxlbmFtZVxuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24gbWFrZUVudHJ5IChuYW1lLCB2YWx1ZSwgZmlsZW5hbWUpIHtcbiAgLy8gMS4gU2V0IG5hbWUgdG8gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIG5hbWUgaW50byBhIHNjYWxhciB2YWx1ZSBzdHJpbmcuXG4gIC8vIFwiVG8gY29udmVydCBhIHN0cmluZyBpbnRvIGEgc2NhbGFyIHZhbHVlIHN0cmluZywgcmVwbGFjZSBhbnkgc3Vycm9nYXRlc1xuICAvLyAgd2l0aCBVK0ZGRkQuXCJcbiAgLy8gc2VlOiBodHRwczovL25vZGVqcy5vcmcvZGlzdC9sYXRlc3QtdjE4LngvZG9jcy9hcGkvYnVmZmVyLmh0bWwjYnVmdG9zdHJpbmdlbmNvZGluZy1zdGFydC1lbmRcbiAgbmFtZSA9IEJ1ZmZlci5mcm9tKG5hbWUpLnRvU3RyaW5nKCd1dGY4JylcblxuICAvLyAyLiBJZiB2YWx1ZSBpcyBhIHN0cmluZywgdGhlbiBzZXQgdmFsdWUgdG8gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nXG4gIC8vICAgIHZhbHVlIGludG8gYSBzY2FsYXIgdmFsdWUgc3RyaW5nLlxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHZhbHVlID0gQnVmZmVyLmZyb20odmFsdWUpLnRvU3RyaW5nKCd1dGY4JylcbiAgfSBlbHNlIHtcbiAgICAvLyAzLiBPdGhlcndpc2U6XG5cbiAgICAvLyAxLiBJZiB2YWx1ZSBpcyBub3QgYSBGaWxlIG9iamVjdCwgdGhlbiBzZXQgdmFsdWUgdG8gYSBuZXcgRmlsZSBvYmplY3QsXG4gICAgLy8gICAgcmVwcmVzZW50aW5nIHRoZSBzYW1lIGJ5dGVzLCB3aG9zZSBuYW1lIGF0dHJpYnV0ZSB2YWx1ZSBpcyBcImJsb2JcIlxuICAgIGlmICghaXNGaWxlTGlrZSh2YWx1ZSkpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUgaW5zdGFuY2VvZiBCbG9iXG4gICAgICAgID8gbmV3IEZpbGUoW3ZhbHVlXSwgJ2Jsb2InLCB7IHR5cGU6IHZhbHVlLnR5cGUgfSlcbiAgICAgICAgOiBuZXcgRmlsZUxpa2UodmFsdWUsICdibG9iJywgeyB0eXBlOiB2YWx1ZS50eXBlIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gSWYgZmlsZW5hbWUgaXMgZ2l2ZW4sIHRoZW4gc2V0IHZhbHVlIHRvIGEgbmV3IEZpbGUgb2JqZWN0LFxuICAgIC8vICAgIHJlcHJlc2VudGluZyB0aGUgc2FtZSBieXRlcywgd2hvc2UgbmFtZSBhdHRyaWJ1dGUgaXMgZmlsZW5hbWUuXG4gICAgaWYgKGZpbGVuYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8qKiBAdHlwZSB7RmlsZVByb3BlcnR5QmFnfSAqL1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgdHlwZTogdmFsdWUudHlwZSxcbiAgICAgICAgbGFzdE1vZGlmaWVkOiB2YWx1ZS5sYXN0TW9kaWZpZWRcbiAgICAgIH1cblxuICAgICAgdmFsdWUgPSAoTmF0aXZlRmlsZSAmJiB2YWx1ZSBpbnN0YW5jZW9mIE5hdGl2ZUZpbGUpIHx8IHZhbHVlIGluc3RhbmNlb2YgVW5kaWNpRmlsZVxuICAgICAgICA/IG5ldyBGaWxlKFt2YWx1ZV0sIGZpbGVuYW1lLCBvcHRpb25zKVxuICAgICAgICA6IG5ldyBGaWxlTGlrZSh2YWx1ZSwgZmlsZW5hbWUsIG9wdGlvbnMpXG4gICAgfVxuICB9XG5cbiAgLy8gNC4gUmV0dXJuIGFuIGVudHJ5IHdob3NlIG5hbWUgaXMgbmFtZSBhbmQgd2hvc2UgdmFsdWUgaXMgdmFsdWUuXG4gIHJldHVybiB7IG5hbWUsIHZhbHVlIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7IEZvcm1EYXRhIH1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IEJ1c2JveSA9IHJlcXVpcmUoJ0BmYXN0aWZ5L2J1c2JveScpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHtcbiAgUmVhZGFibGVTdHJlYW1Gcm9tLFxuICBpc0Jsb2JMaWtlLFxuICBpc1JlYWRhYmxlU3RyZWFtTGlrZSxcbiAgcmVhZGFibGVTdHJlYW1DbG9zZSxcbiAgY3JlYXRlRGVmZXJyZWRQcm9taXNlLFxuICBmdWxseVJlYWRCb2R5XG59ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgRm9ybURhdGEgfSA9IHJlcXVpcmUoJy4vZm9ybWRhdGEnKVxuY29uc3QgeyBrU3RhdGUgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi93ZWJpZGwnKVxuY29uc3QgeyBET01FeGNlcHRpb24sIHN0cnVjdHVyZWRDbG9uZSB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3QgeyBCbG9iLCBGaWxlOiBOYXRpdmVGaWxlIH0gPSByZXF1aXJlKCdidWZmZXInKVxuY29uc3QgeyBrQm9keVVzZWQgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBpc0Vycm9yZWQgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGlzVWludDhBcnJheSwgaXNBcnJheUJ1ZmZlciB9ID0gcmVxdWlyZSgndXRpbC90eXBlcycpXG5jb25zdCB7IEZpbGU6IFVuZGljaUZpbGUgfSA9IHJlcXVpcmUoJy4vZmlsZScpXG5jb25zdCB7IHBhcnNlTUlNRVR5cGUsIHNlcmlhbGl6ZUFNaW1lVHlwZSB9ID0gcmVxdWlyZSgnLi9kYXRhVVJMJylcblxubGV0IFJlYWRhYmxlU3RyZWFtID0gZ2xvYmFsVGhpcy5SZWFkYWJsZVN0cmVhbVxuXG4vKiogQHR5cGUge2dsb2JhbFRoaXNbJ0ZpbGUnXX0gKi9cbmNvbnN0IEZpbGUgPSBOYXRpdmVGaWxlID8/IFVuZGljaUZpbGVcbmNvbnN0IHRleHRFbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKClcbmNvbnN0IHRleHREZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKClcblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtYm9keWluaXQtZXh0cmFjdFxuZnVuY3Rpb24gZXh0cmFjdEJvZHkgKG9iamVjdCwga2VlcGFsaXZlID0gZmFsc2UpIHtcbiAgaWYgKCFSZWFkYWJsZVN0cmVhbSkge1xuICAgIFJlYWRhYmxlU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtL3dlYicpLlJlYWRhYmxlU3RyZWFtXG4gIH1cblxuICAvLyAxLiBMZXQgc3RyZWFtIGJlIG51bGwuXG4gIGxldCBzdHJlYW0gPSBudWxsXG5cbiAgLy8gMi4gSWYgb2JqZWN0IGlzIGEgUmVhZGFibGVTdHJlYW0gb2JqZWN0LCB0aGVuIHNldCBzdHJlYW0gdG8gb2JqZWN0LlxuICBpZiAob2JqZWN0IGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW0pIHtcbiAgICBzdHJlYW0gPSBvYmplY3RcbiAgfSBlbHNlIGlmIChpc0Jsb2JMaWtlKG9iamVjdCkpIHtcbiAgICAvLyAzLiBPdGhlcndpc2UsIGlmIG9iamVjdCBpcyBhIEJsb2Igb2JqZWN0LCBzZXQgc3RyZWFtIHRvIHRoZVxuICAgIC8vICAgIHJlc3VsdCBvZiBydW5uaW5nIG9iamVjdOKAmXMgZ2V0IHN0cmVhbS5cbiAgICBzdHJlYW0gPSBvYmplY3Quc3RyZWFtKClcbiAgfSBlbHNlIHtcbiAgICAvLyA0LiBPdGhlcndpc2UsIHNldCBzdHJlYW0gdG8gYSBuZXcgUmVhZGFibGVTdHJlYW0gb2JqZWN0LCBhbmQgc2V0XG4gICAgLy8gICAgdXAgc3RyZWFtLlxuICAgIHN0cmVhbSA9IG5ldyBSZWFkYWJsZVN0cmVhbSh7XG4gICAgICBhc3luYyBwdWxsIChjb250cm9sbGVyKSB7XG4gICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShcbiAgICAgICAgICB0eXBlb2Ygc291cmNlID09PSAnc3RyaW5nJyA/IHRleHRFbmNvZGVyLmVuY29kZShzb3VyY2UpIDogc291cmNlXG4gICAgICAgIClcbiAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gcmVhZGFibGVTdHJlYW1DbG9zZShjb250cm9sbGVyKSlcbiAgICAgIH0sXG4gICAgICBzdGFydCAoKSB7fSxcbiAgICAgIHR5cGU6IHVuZGVmaW5lZFxuICAgIH0pXG4gIH1cblxuICAvLyA1LiBBc3NlcnQ6IHN0cmVhbSBpcyBhIFJlYWRhYmxlU3RyZWFtIG9iamVjdC5cbiAgYXNzZXJ0KGlzUmVhZGFibGVTdHJlYW1MaWtlKHN0cmVhbSkpXG5cbiAgLy8gNi4gTGV0IGFjdGlvbiBiZSBudWxsLlxuICBsZXQgYWN0aW9uID0gbnVsbFxuXG4gIC8vIDcuIExldCBzb3VyY2UgYmUgbnVsbC5cbiAgbGV0IHNvdXJjZSA9IG51bGxcblxuICAvLyA4LiBMZXQgbGVuZ3RoIGJlIG51bGwuXG4gIGxldCBsZW5ndGggPSBudWxsXG5cbiAgLy8gOS4gTGV0IHR5cGUgYmUgbnVsbC5cbiAgbGV0IHR5cGUgPSBudWxsXG5cbiAgLy8gMTAuIFN3aXRjaCBvbiBvYmplY3Q6XG4gIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAnc3RyaW5nJykge1xuICAgIC8vIFNldCBzb3VyY2UgdG8gdGhlIFVURi04IGVuY29kaW5nIG9mIG9iamVjdC5cbiAgICAvLyBOb3RlOiBzZXR0aW5nIHNvdXJjZSB0byBhIFVpbnQ4QXJyYXkgaGVyZSBicmVha3Mgc29tZSBtb2NraW5nIGFzc3VtcHRpb25zLlxuICAgIHNvdXJjZSA9IG9iamVjdFxuXG4gICAgLy8gU2V0IHR5cGUgdG8gYHRleHQvcGxhaW47Y2hhcnNldD1VVEYtOGAuXG4gICAgdHlwZSA9ICd0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLTgnXG4gIH0gZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zKSB7XG4gICAgLy8gVVJMU2VhcmNoUGFyYW1zXG5cbiAgICAvLyBzcGVjIHNheXMgdG8gcnVuIGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCBvbiBib2R5Lmxpc3RcbiAgICAvLyB0aGlzIGlzIGltcGxlbWVudGVkIGluIE5vZGUuanMgYXMgYXBhcnQgb2YgYW4gVVJMU2VhcmNoUGFyYW1zIGluc3RhbmNlIHRvU3RyaW5nIG1ldGhvZFxuICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvZTQ2YzY4MGJmMmIyMTFiYmQ1MmNmOTU5Y2ExN2VlOThjN2Y2NTdmNS9saWIvaW50ZXJuYWwvdXJsLmpzI0w0OTBcbiAgICAvLyBhbmQgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvZTQ2YzY4MGJmMmIyMTFiYmQ1MmNmOTU5Y2ExN2VlOThjN2Y2NTdmNS9saWIvaW50ZXJuYWwvdXJsLmpzI0wxMTAwXG5cbiAgICAvLyBTZXQgc291cmNlIHRvIHRoZSByZXN1bHQgb2YgcnVubmluZyB0aGUgYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIHNlcmlhbGl6ZXIgd2l0aCBvYmplY3TigJlzIGxpc3QuXG4gICAgc291cmNlID0gb2JqZWN0LnRvU3RyaW5nKClcblxuICAgIC8vIFNldCB0eXBlIHRvIGBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOGAuXG4gICAgdHlwZSA9ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCdcbiAgfSBlbHNlIGlmIChpc0FycmF5QnVmZmVyKG9iamVjdCkpIHtcbiAgICAvLyBCdWZmZXJTb3VyY2UvQXJyYXlCdWZmZXJcblxuICAgIC8vIFNldCBzb3VyY2UgdG8gYSBjb3B5IG9mIHRoZSBieXRlcyBoZWxkIGJ5IG9iamVjdC5cbiAgICBzb3VyY2UgPSBuZXcgVWludDhBcnJheShvYmplY3Quc2xpY2UoKSlcbiAgfSBlbHNlIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcob2JqZWN0KSkge1xuICAgIC8vIEJ1ZmZlclNvdXJjZS9BcnJheUJ1ZmZlclZpZXdcblxuICAgIC8vIFNldCBzb3VyY2UgdG8gYSBjb3B5IG9mIHRoZSBieXRlcyBoZWxkIGJ5IG9iamVjdC5cbiAgICBzb3VyY2UgPSBuZXcgVWludDhBcnJheShvYmplY3QuYnVmZmVyLnNsaWNlKG9iamVjdC5ieXRlT2Zmc2V0LCBvYmplY3QuYnl0ZU9mZnNldCArIG9iamVjdC5ieXRlTGVuZ3RoKSlcbiAgfSBlbHNlIGlmICh1dGlsLmlzRm9ybURhdGFMaWtlKG9iamVjdCkpIHtcbiAgICBjb25zdCBib3VuZGFyeSA9IGAtLS0tZm9ybWRhdGEtdW5kaWNpLTAke2Ake01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDFlMTEpfWAucGFkU3RhcnQoMTEsICcwJyl9YFxuICAgIGNvbnN0IHByZWZpeCA9IGAtLSR7Ym91bmRhcnl9XFxyXFxuQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhYFxuXG4gICAgLyohIGZvcm1kYXRhLXBvbHlmaWxsLiBNSVQgTGljZW5zZS4gSmltbXkgV8OkcnRpbmcgPGh0dHBzOi8vamltbXkud2FydGluZy5zZS9vcGVuc291cmNlPiAqL1xuICAgIGNvbnN0IGVzY2FwZSA9IChzdHIpID0+XG4gICAgICBzdHIucmVwbGFjZSgvXFxuL2csICclMEEnKS5yZXBsYWNlKC9cXHIvZywgJyUwRCcpLnJlcGxhY2UoL1wiL2csICclMjInKVxuICAgIGNvbnN0IG5vcm1hbGl6ZUxpbmVmZWVkcyA9ICh2YWx1ZSkgPT4gdmFsdWUucmVwbGFjZSgvXFxyP1xcbnxcXHIvZywgJ1xcclxcbicpXG5cbiAgICAvLyBTZXQgYWN0aW9uIHRvIHRoaXMgc3RlcDogcnVuIHRoZSBtdWx0aXBhcnQvZm9ybS1kYXRhXG4gICAgLy8gZW5jb2RpbmcgYWxnb3JpdGhtLCB3aXRoIG9iamVjdOKAmXMgZW50cnkgbGlzdCBhbmQgVVRGLTguXG4gICAgLy8gLSBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgYm9keSBpcyBpbW11dGFibGUgYW5kIGNhbid0IGJlIGNoYW5nZWQgYWZ0ZXJ3b3Jkc1xuICAgIC8vIC0gVGhhdCB0aGUgY29udGVudC1sZW5ndGggaXMgY2FsY3VsYXRlZCBpbiBhZHZhbmNlLlxuICAgIC8vIC0gQW5kIHRoYXQgYWxsIHBhcnRzIGFyZSBwcmUtZW5jb2RlZCBhbmQgcmVhZHkgdG8gYmUgc2VudC5cblxuICAgIGNvbnN0IGJsb2JQYXJ0cyA9IFtdXG4gICAgY29uc3Qgcm4gPSBuZXcgVWludDhBcnJheShbMTMsIDEwXSkgLy8gJ1xcclxcbidcbiAgICBsZW5ndGggPSAwXG4gICAgbGV0IGhhc1Vua25vd25TaXplVmFsdWUgPSBmYWxzZVxuXG4gICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIG9iamVjdCkge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3QgY2h1bmsgPSB0ZXh0RW5jb2Rlci5lbmNvZGUocHJlZml4ICtcbiAgICAgICAgICBgOyBuYW1lPVwiJHtlc2NhcGUobm9ybWFsaXplTGluZWZlZWRzKG5hbWUpKX1cImAgK1xuICAgICAgICAgIGBcXHJcXG5cXHJcXG4ke25vcm1hbGl6ZUxpbmVmZWVkcyh2YWx1ZSl9XFxyXFxuYClcbiAgICAgICAgYmxvYlBhcnRzLnB1c2goY2h1bmspXG4gICAgICAgIGxlbmd0aCArPSBjaHVuay5ieXRlTGVuZ3RoXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjaHVuayA9IHRleHRFbmNvZGVyLmVuY29kZShgJHtwcmVmaXh9OyBuYW1lPVwiJHtlc2NhcGUobm9ybWFsaXplTGluZWZlZWRzKG5hbWUpKX1cImAgK1xuICAgICAgICAgICh2YWx1ZS5uYW1lID8gYDsgZmlsZW5hbWU9XCIke2VzY2FwZSh2YWx1ZS5uYW1lKX1cImAgOiAnJykgKyAnXFxyXFxuJyArXG4gICAgICAgICAgYENvbnRlbnQtVHlwZTogJHtcbiAgICAgICAgICAgIHZhbHVlLnR5cGUgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSdcbiAgICAgICAgICB9XFxyXFxuXFxyXFxuYClcbiAgICAgICAgYmxvYlBhcnRzLnB1c2goY2h1bmssIHZhbHVlLCBybilcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZS5zaXplID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIGxlbmd0aCArPSBjaHVuay5ieXRlTGVuZ3RoICsgdmFsdWUuc2l6ZSArIHJuLmJ5dGVMZW5ndGhcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoYXNVbmtub3duU2l6ZVZhbHVlID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY2h1bmsgPSB0ZXh0RW5jb2Rlci5lbmNvZGUoYC0tJHtib3VuZGFyeX0tLWApXG4gICAgYmxvYlBhcnRzLnB1c2goY2h1bmspXG4gICAgbGVuZ3RoICs9IGNodW5rLmJ5dGVMZW5ndGhcbiAgICBpZiAoaGFzVW5rbm93blNpemVWYWx1ZSkge1xuICAgICAgbGVuZ3RoID0gbnVsbFxuICAgIH1cblxuICAgIC8vIFNldCBzb3VyY2UgdG8gb2JqZWN0LlxuICAgIHNvdXJjZSA9IG9iamVjdFxuXG4gICAgYWN0aW9uID0gYXN5bmMgZnVuY3Rpb24gKiAoKSB7XG4gICAgICBmb3IgKGNvbnN0IHBhcnQgb2YgYmxvYlBhcnRzKSB7XG4gICAgICAgIGlmIChwYXJ0LnN0cmVhbSkge1xuICAgICAgICAgIHlpZWxkICogcGFydC5zdHJlYW0oKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHlpZWxkIHBhcnRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNldCB0eXBlIHRvIGBtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT1gLFxuICAgIC8vIGZvbGxvd2VkIGJ5IHRoZSBtdWx0aXBhcnQvZm9ybS1kYXRhIGJvdW5kYXJ5IHN0cmluZyBnZW5lcmF0ZWRcbiAgICAvLyBieSB0aGUgbXVsdGlwYXJ0L2Zvcm0tZGF0YSBlbmNvZGluZyBhbGdvcml0aG0uXG4gICAgdHlwZSA9ICdtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0nICsgYm91bmRhcnlcbiAgfSBlbHNlIGlmIChpc0Jsb2JMaWtlKG9iamVjdCkpIHtcbiAgICAvLyBCbG9iXG5cbiAgICAvLyBTZXQgc291cmNlIHRvIG9iamVjdC5cbiAgICBzb3VyY2UgPSBvYmplY3RcblxuICAgIC8vIFNldCBsZW5ndGggdG8gb2JqZWN04oCZcyBzaXplLlxuICAgIGxlbmd0aCA9IG9iamVjdC5zaXplXG5cbiAgICAvLyBJZiBvYmplY3TigJlzIHR5cGUgYXR0cmlidXRlIGlzIG5vdCB0aGUgZW1wdHkgYnl0ZSBzZXF1ZW5jZSwgc2V0XG4gICAgLy8gdHlwZSB0byBpdHMgdmFsdWUuXG4gICAgaWYgKG9iamVjdC50eXBlKSB7XG4gICAgICB0eXBlID0gb2JqZWN0LnR5cGVcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIG9iamVjdFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBJZiBrZWVwYWxpdmUgaXMgdHJ1ZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoa2VlcGFsaXZlKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdrZWVwYWxpdmUnKVxuICAgIH1cblxuICAgIC8vIElmIG9iamVjdCBpcyBkaXN0dXJiZWQgb3IgbG9ja2VkLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICh1dGlsLmlzRGlzdHVyYmVkKG9iamVjdCkgfHwgb2JqZWN0LmxvY2tlZCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgJ1Jlc3BvbnNlIGJvZHkgb2JqZWN0IHNob3VsZCBub3QgYmUgZGlzdHVyYmVkIG9yIGxvY2tlZCdcbiAgICAgIClcbiAgICB9XG5cbiAgICBzdHJlYW0gPVxuICAgICAgb2JqZWN0IGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW0gPyBvYmplY3QgOiBSZWFkYWJsZVN0cmVhbUZyb20ob2JqZWN0KVxuICB9XG5cbiAgLy8gMTEuIElmIHNvdXJjZSBpcyBhIGJ5dGUgc2VxdWVuY2UsIHRoZW4gc2V0IGFjdGlvbiB0byBhXG4gIC8vIHN0ZXAgdGhhdCByZXR1cm5zIHNvdXJjZSBhbmQgbGVuZ3RoIHRvIHNvdXJjZeKAmXMgbGVuZ3RoLlxuICBpZiAodHlwZW9mIHNvdXJjZSA9PT0gJ3N0cmluZycgfHwgdXRpbC5pc0J1ZmZlcihzb3VyY2UpKSB7XG4gICAgbGVuZ3RoID0gQnVmZmVyLmJ5dGVMZW5ndGgoc291cmNlKVxuICB9XG5cbiAgLy8gMTIuIElmIGFjdGlvbiBpcyBub24tbnVsbCwgdGhlbiBydW4gdGhlc2Ugc3RlcHMgaW4gaW4gcGFyYWxsZWw6XG4gIGlmIChhY3Rpb24gIT0gbnVsbCkge1xuICAgIC8vIFJ1biBhY3Rpb24uXG4gICAgbGV0IGl0ZXJhdG9yXG4gICAgc3RyZWFtID0gbmV3IFJlYWRhYmxlU3RyZWFtKHtcbiAgICAgIGFzeW5jIHN0YXJ0ICgpIHtcbiAgICAgICAgaXRlcmF0b3IgPSBhY3Rpb24ob2JqZWN0KVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKVxuICAgICAgfSxcbiAgICAgIGFzeW5jIHB1bGwgKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgY29uc3QgeyB2YWx1ZSwgZG9uZSB9ID0gYXdhaXQgaXRlcmF0b3IubmV4dCgpXG4gICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgLy8gV2hlbiBydW5uaW5nIGFjdGlvbiBpcyBkb25lLCBjbG9zZSBzdHJlYW0uXG4gICAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICAgICAgY29udHJvbGxlci5jbG9zZSgpXG4gICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBXaGVuZXZlciBvbmUgb3IgbW9yZSBieXRlcyBhcmUgYXZhaWxhYmxlIGFuZCBzdHJlYW0gaXMgbm90IGVycm9yZWQsXG4gICAgICAgICAgLy8gZW5xdWV1ZSBhIFVpbnQ4QXJyYXkgd3JhcHBpbmcgYW4gQXJyYXlCdWZmZXIgY29udGFpbmluZyB0aGUgYXZhaWxhYmxlXG4gICAgICAgICAgLy8gYnl0ZXMgaW50byBzdHJlYW0uXG4gICAgICAgICAgaWYgKCFpc0Vycm9yZWQoc3RyZWFtKSkge1xuICAgICAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KHZhbHVlKSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXIuZGVzaXJlZFNpemUgPiAwXG4gICAgICB9LFxuICAgICAgYXN5bmMgY2FuY2VsIChyZWFzb24pIHtcbiAgICAgICAgYXdhaXQgaXRlcmF0b3IucmV0dXJuKClcbiAgICAgIH0sXG4gICAgICB0eXBlOiB1bmRlZmluZWRcbiAgICB9KVxuICB9XG5cbiAgLy8gMTMuIExldCBib2R5IGJlIGEgYm9keSB3aG9zZSBzdHJlYW0gaXMgc3RyZWFtLCBzb3VyY2UgaXMgc291cmNlLFxuICAvLyBhbmQgbGVuZ3RoIGlzIGxlbmd0aC5cbiAgY29uc3QgYm9keSA9IHsgc3RyZWFtLCBzb3VyY2UsIGxlbmd0aCB9XG5cbiAgLy8gMTQuIFJldHVybiAoYm9keSwgdHlwZSkuXG4gIHJldHVybiBbYm9keSwgdHlwZV1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2JvZHlpbml0LXNhZmVseS1leHRyYWN0XG5mdW5jdGlvbiBzYWZlbHlFeHRyYWN0Qm9keSAob2JqZWN0LCBrZWVwYWxpdmUgPSBmYWxzZSkge1xuICBpZiAoIVJlYWRhYmxlU3RyZWFtKSB7XG4gICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICBSZWFkYWJsZVN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbS93ZWInKS5SZWFkYWJsZVN0cmVhbVxuICB9XG5cbiAgLy8gVG8gc2FmZWx5IGV4dHJhY3QgYSBib2R5IGFuZCBhIGBDb250ZW50LVR5cGVgIHZhbHVlIGZyb21cbiAgLy8gYSBieXRlIHNlcXVlbmNlIG9yIEJvZHlJbml0IG9iamVjdCBvYmplY3QsIHJ1biB0aGVzZSBzdGVwczpcblxuICAvLyAxLiBJZiBvYmplY3QgaXMgYSBSZWFkYWJsZVN0cmVhbSBvYmplY3QsIHRoZW46XG4gIGlmIChvYmplY3QgaW5zdGFuY2VvZiBSZWFkYWJsZVN0cmVhbSkge1xuICAgIC8vIEFzc2VydDogb2JqZWN0IGlzIG5laXRoZXIgZGlzdHVyYmVkIG5vciBsb2NrZWQuXG4gICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICBhc3NlcnQoIXV0aWwuaXNEaXN0dXJiZWQob2JqZWN0KSwgJ1RoZSBib2R5IGhhcyBhbHJlYWR5IGJlZW4gY29uc3VtZWQuJylcbiAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgIGFzc2VydCghb2JqZWN0LmxvY2tlZCwgJ1RoZSBzdHJlYW0gaXMgbG9ja2VkLicpXG4gIH1cblxuICAvLyAyLiBSZXR1cm4gdGhlIHJlc3VsdHMgb2YgZXh0cmFjdGluZyBvYmplY3QuXG4gIHJldHVybiBleHRyYWN0Qm9keShvYmplY3QsIGtlZXBhbGl2ZSlcbn1cblxuZnVuY3Rpb24gY2xvbmVCb2R5IChib2R5KSB7XG4gIC8vIFRvIGNsb25lIGEgYm9keSBib2R5LCBydW4gdGhlc2Ugc3RlcHM6XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtYm9keS1jbG9uZVxuXG4gIC8vIDEuIExldCDCqyBvdXQxLCBvdXQyIMK7IGJlIHRoZSByZXN1bHQgb2YgdGVlaW5nIGJvZHnigJlzIHN0cmVhbS5cbiAgY29uc3QgW291dDEsIG91dDJdID0gYm9keS5zdHJlYW0udGVlKClcbiAgY29uc3Qgb3V0MkNsb25lID0gc3RydWN0dXJlZENsb25lKG91dDIsIHsgdHJhbnNmZXI6IFtvdXQyXSB9KVxuICAvLyBUaGlzLCBmb3Igd2hhdGV2ZXIgcmVhc29ucywgdW5yZWZzIG91dDJDbG9uZSB3aGljaCBhbGxvd3NcbiAgLy8gdGhlIHByb2Nlc3MgdG8gZXhpdCBieSBpdHNlbGYuXG4gIGNvbnN0IFssIGZpbmFsQ2xvbmVdID0gb3V0MkNsb25lLnRlZSgpXG5cbiAgLy8gMi4gU2V0IGJvZHnigJlzIHN0cmVhbSB0byBvdXQxLlxuICBib2R5LnN0cmVhbSA9IG91dDFcblxuICAvLyAzLiBSZXR1cm4gYSBib2R5IHdob3NlIHN0cmVhbSBpcyBvdXQyIGFuZCBvdGhlciBtZW1iZXJzIGFyZSBjb3BpZWQgZnJvbSBib2R5LlxuICByZXR1cm4ge1xuICAgIHN0cmVhbTogZmluYWxDbG9uZSxcbiAgICBsZW5ndGg6IGJvZHkubGVuZ3RoLFxuICAgIHNvdXJjZTogYm9keS5zb3VyY2VcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiAqIGNvbnN1bWVCb2R5IChib2R5KSB7XG4gIGlmIChib2R5KSB7XG4gICAgaWYgKGlzVWludDhBcnJheShib2R5KSkge1xuICAgICAgeWllbGQgYm9keVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzdHJlYW0gPSBib2R5LnN0cmVhbVxuXG4gICAgICBpZiAodXRpbC5pc0Rpc3R1cmJlZChzdHJlYW0pKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBib2R5IGhhcyBhbHJlYWR5IGJlZW4gY29uc3VtZWQuJylcbiAgICAgIH1cblxuICAgICAgaWYgKHN0cmVhbS5sb2NrZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHN0cmVhbSBpcyBsb2NrZWQuJylcbiAgICAgIH1cblxuICAgICAgLy8gQ29tcGF0LlxuICAgICAgc3RyZWFtW2tCb2R5VXNlZF0gPSB0cnVlXG5cbiAgICAgIHlpZWxkICogc3RyZWFtXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHRocm93SWZBYm9ydGVkIChzdGF0ZSkge1xuICBpZiAoc3RhdGUuYWJvcnRlZCkge1xuICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oJ1RoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQuJywgJ0Fib3J0RXJyb3InKVxuICB9XG59XG5cbmZ1bmN0aW9uIGJvZHlNaXhpbk1ldGhvZHMgKGluc3RhbmNlKSB7XG4gIGNvbnN0IG1ldGhvZHMgPSB7XG4gICAgYmxvYiAoKSB7XG4gICAgICAvLyBUaGUgYmxvYigpIG1ldGhvZCBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoZSByZXN1bHQgb2ZcbiAgICAgIC8vIHJ1bm5pbmcgY29uc3VtZSBib2R5IHdpdGggdGhpcyBhbmQgdGhlIGZvbGxvd2luZyBzdGVwXG4gICAgICAvLyBnaXZlbiBhIGJ5dGUgc2VxdWVuY2UgYnl0ZXM6IHJldHVybiBhIEJsb2Igd2hvc2VcbiAgICAgIC8vIGNvbnRlbnRzIGFyZSBieXRlcyBhbmQgd2hvc2UgdHlwZSBhdHRyaWJ1dGUgaXMgdGhpc+KAmXNcbiAgICAgIC8vIE1JTUUgdHlwZS5cbiAgICAgIHJldHVybiBzcGVjQ29uc3VtZUJvZHkodGhpcywgKGJ5dGVzKSA9PiB7XG4gICAgICAgIGxldCBtaW1lVHlwZSA9IGJvZHlNaW1lVHlwZSh0aGlzKVxuXG4gICAgICAgIGlmIChtaW1lVHlwZSA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgICAgbWltZVR5cGUgPSAnJ1xuICAgICAgICB9IGVsc2UgaWYgKG1pbWVUeXBlKSB7XG4gICAgICAgICAgbWltZVR5cGUgPSBzZXJpYWxpemVBTWltZVR5cGUobWltZVR5cGUpXG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZXR1cm4gYSBCbG9iIHdob3NlIGNvbnRlbnRzIGFyZSBieXRlcyBhbmQgdHlwZSBhdHRyaWJ1dGVcbiAgICAgICAgLy8gaXMgbWltZVR5cGUuXG4gICAgICAgIHJldHVybiBuZXcgQmxvYihbYnl0ZXNdLCB7IHR5cGU6IG1pbWVUeXBlIH0pXG4gICAgICB9LCBpbnN0YW5jZSlcbiAgICB9LFxuXG4gICAgYXJyYXlCdWZmZXIgKCkge1xuICAgICAgLy8gVGhlIGFycmF5QnVmZmVyKCkgbWV0aG9kIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhlIHJlc3VsdFxuICAgICAgLy8gb2YgcnVubmluZyBjb25zdW1lIGJvZHkgd2l0aCB0aGlzIGFuZCB0aGUgZm9sbG93aW5nIHN0ZXBcbiAgICAgIC8vIGdpdmVuIGEgYnl0ZSBzZXF1ZW5jZSBieXRlczogcmV0dXJuIGEgbmV3IEFycmF5QnVmZmVyXG4gICAgICAvLyB3aG9zZSBjb250ZW50cyBhcmUgYnl0ZXMuXG4gICAgICByZXR1cm4gc3BlY0NvbnN1bWVCb2R5KHRoaXMsIChieXRlcykgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYnl0ZXMpLmJ1ZmZlclxuICAgICAgfSwgaW5zdGFuY2UpXG4gICAgfSxcblxuICAgIHRleHQgKCkge1xuICAgICAgLy8gVGhlIHRleHQoKSBtZXRob2Qgc3RlcHMgYXJlIHRvIHJldHVybiB0aGUgcmVzdWx0IG9mIHJ1bm5pbmdcbiAgICAgIC8vIGNvbnN1bWUgYm9keSB3aXRoIHRoaXMgYW5kIFVURi04IGRlY29kZS5cbiAgICAgIHJldHVybiBzcGVjQ29uc3VtZUJvZHkodGhpcywgdXRmOERlY29kZUJ5dGVzLCBpbnN0YW5jZSlcbiAgICB9LFxuXG4gICAganNvbiAoKSB7XG4gICAgICAvLyBUaGUganNvbigpIG1ldGhvZCBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZ1xuICAgICAgLy8gY29uc3VtZSBib2R5IHdpdGggdGhpcyBhbmQgcGFyc2UgSlNPTiBmcm9tIGJ5dGVzLlxuICAgICAgcmV0dXJuIHNwZWNDb25zdW1lQm9keSh0aGlzLCBwYXJzZUpTT05Gcm9tQnl0ZXMsIGluc3RhbmNlKVxuICAgIH0sXG5cbiAgICBhc3luYyBmb3JtRGF0YSAoKSB7XG4gICAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBpbnN0YW5jZSlcblxuICAgICAgdGhyb3dJZkFib3J0ZWQodGhpc1trU3RhdGVdKVxuXG4gICAgICBjb25zdCBjb250ZW50VHlwZSA9IHRoaXMuaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpXG5cbiAgICAgIC8vIElmIG1pbWVUeXBl4oCZcyBlc3NlbmNlIGlzIFwibXVsdGlwYXJ0L2Zvcm0tZGF0YVwiLCB0aGVuOlxuICAgICAgaWYgKC9tdWx0aXBhcnRcXC9mb3JtLWRhdGEvLnRlc3QoY29udGVudFR5cGUpKSB7XG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7fVxuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiB0aGlzLmhlYWRlcnMpIGhlYWRlcnNba2V5LnRvTG93ZXJDYXNlKCldID0gdmFsdWVcblxuICAgICAgICBjb25zdCByZXNwb25zZUZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKClcblxuICAgICAgICBsZXQgYnVzYm95XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBidXNib3kgPSBuZXcgQnVzYm95KHtcbiAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICBwcmVzZXJ2ZVBhdGg6IHRydWVcbiAgICAgICAgICB9KVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKGAke2Vycn1gLCAnQWJvcnRFcnJvcicpXG4gICAgICAgIH1cblxuICAgICAgICBidXNib3kub24oJ2ZpZWxkJywgKG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgICAgICAgcmVzcG9uc2VGb3JtRGF0YS5hcHBlbmQobmFtZSwgdmFsdWUpXG4gICAgICAgIH0pXG4gICAgICAgIGJ1c2JveS5vbignZmlsZScsIChuYW1lLCB2YWx1ZSwgZmlsZW5hbWUsIGVuY29kaW5nLCBtaW1lVHlwZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNodW5rcyA9IFtdXG5cbiAgICAgICAgICBpZiAoZW5jb2RpbmcgPT09ICdiYXNlNjQnIHx8IGVuY29kaW5nLnRvTG93ZXJDYXNlKCkgPT09ICdiYXNlNjQnKSB7XG4gICAgICAgICAgICBsZXQgYmFzZTY0Y2h1bmsgPSAnJ1xuXG4gICAgICAgICAgICB2YWx1ZS5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgICAgICAgICAgICBiYXNlNjRjaHVuayArPSBjaHVuay50b1N0cmluZygpLnJlcGxhY2UoL1tcXHJcXG5dL2dtLCAnJylcblxuICAgICAgICAgICAgICBjb25zdCBlbmQgPSBiYXNlNjRjaHVuay5sZW5ndGggLSBiYXNlNjRjaHVuay5sZW5ndGggJSA0XG4gICAgICAgICAgICAgIGNodW5rcy5wdXNoKEJ1ZmZlci5mcm9tKGJhc2U2NGNodW5rLnNsaWNlKDAsIGVuZCksICdiYXNlNjQnKSlcblxuICAgICAgICAgICAgICBiYXNlNjRjaHVuayA9IGJhc2U2NGNodW5rLnNsaWNlKGVuZClcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB2YWx1ZS5vbignZW5kJywgKCkgPT4ge1xuICAgICAgICAgICAgICBjaHVua3MucHVzaChCdWZmZXIuZnJvbShiYXNlNjRjaHVuaywgJ2Jhc2U2NCcpKVxuICAgICAgICAgICAgICByZXNwb25zZUZvcm1EYXRhLmFwcGVuZChuYW1lLCBuZXcgRmlsZShjaHVua3MsIGZpbGVuYW1lLCB7IHR5cGU6IG1pbWVUeXBlIH0pKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsdWUub24oJ2RhdGEnLCAoY2h1bmspID0+IHtcbiAgICAgICAgICAgICAgY2h1bmtzLnB1c2goY2h1bmspXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgdmFsdWUub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgICAgICAgcmVzcG9uc2VGb3JtRGF0YS5hcHBlbmQobmFtZSwgbmV3IEZpbGUoY2h1bmtzLCBmaWxlbmFtZSwgeyB0eXBlOiBtaW1lVHlwZSB9KSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgICAgIGNvbnN0IGJ1c2JveVJlc29sdmUgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgYnVzYm95Lm9uKCdmaW5pc2gnLCByZXNvbHZlKVxuICAgICAgICAgIGJ1c2JveS5vbignZXJyb3InLCAoZXJyKSA9PiByZWplY3QobmV3IFR5cGVFcnJvcihlcnIpKSlcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAodGhpcy5ib2R5ICE9PSBudWxsKSBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIGNvbnN1bWVCb2R5KHRoaXNba1N0YXRlXS5ib2R5KSkgYnVzYm95LndyaXRlKGNodW5rKVxuICAgICAgICBidXNib3kuZW5kKClcbiAgICAgICAgYXdhaXQgYnVzYm95UmVzb2x2ZVxuXG4gICAgICAgIHJldHVybiByZXNwb25zZUZvcm1EYXRhXG4gICAgICB9IGVsc2UgaWYgKC9hcHBsaWNhdGlvblxcL3gtd3d3LWZvcm0tdXJsZW5jb2RlZC8udGVzdChjb250ZW50VHlwZSkpIHtcbiAgICAgICAgLy8gT3RoZXJ3aXNlLCBpZiBtaW1lVHlwZeKAmXMgZXNzZW5jZSBpcyBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiLCB0aGVuOlxuXG4gICAgICAgIC8vIDEuIExldCBlbnRyaWVzIGJlIHRoZSByZXN1bHQgb2YgcGFyc2luZyBieXRlcy5cbiAgICAgICAgbGV0IGVudHJpZXNcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBsZXQgdGV4dCA9ICcnXG4gICAgICAgICAgLy8gYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIHBhcnNlciB3aWxsIGtlZXAgdGhlIEJPTS5cbiAgICAgICAgICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtdXJsZW5jb2RlZC1wYXJzZXJcbiAgICAgICAgICAvLyBOb3RlIHRoYXQgc3RyZWFtaW5nIGRlY29kZXIgaXMgc3RhdGVmdWwgYW5kIGNhbm5vdCBiZSByZXVzZWRcbiAgICAgICAgICBjb25zdCBzdHJlYW1pbmdEZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCd1dGYtOCcsIHsgaWdub3JlQk9NOiB0cnVlIH0pXG5cbiAgICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIGNvbnN1bWVCb2R5KHRoaXNba1N0YXRlXS5ib2R5KSkge1xuICAgICAgICAgICAgaWYgKCFpc1VpbnQ4QXJyYXkoY2h1bmspKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIFVpbnQ4QXJyYXkgY2h1bmsnKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGV4dCArPSBzdHJlYW1pbmdEZWNvZGVyLmRlY29kZShjaHVuaywgeyBzdHJlYW06IHRydWUgfSlcbiAgICAgICAgICB9XG4gICAgICAgICAgdGV4dCArPSBzdHJlYW1pbmdEZWNvZGVyLmRlY29kZSgpXG4gICAgICAgICAgZW50cmllcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXModGV4dClcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHQ6IFVuY2xlYXIgd2hlbiBuZXcgVVJMU2VhcmNoUGFyYW1zIGNhbiBmYWlsIG9uIGEgc3RyaW5nLlxuICAgICAgICAgIC8vIDIuIElmIGVudHJpZXMgaXMgZmFpbHVyZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgICAgICB0aHJvdyBPYmplY3QuYXNzaWduKG5ldyBUeXBlRXJyb3IoKSwgeyBjYXVzZTogZXJyIH0pXG4gICAgICAgIH1cblxuICAgICAgICAvLyAzLiBSZXR1cm4gYSBuZXcgRm9ybURhdGEgb2JqZWN0IHdob3NlIGVudHJpZXMgYXJlIGVudHJpZXMuXG4gICAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKClcbiAgICAgICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIGVudHJpZXMpIHtcbiAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQobmFtZSwgdmFsdWUpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZvcm1EYXRhXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBXYWl0IGEgdGljayBiZWZvcmUgY2hlY2tpbmcgaWYgdGhlIHJlcXVlc3QgaGFzIGJlZW4gYWJvcnRlZC5cbiAgICAgICAgLy8gT3RoZXJ3aXNlLCBhIFR5cGVFcnJvciBjYW4gYmUgdGhyb3duIHdoZW4gYW4gQWJvcnRFcnJvciBzaG91bGQuXG4gICAgICAgIGF3YWl0IFByb21pc2UucmVzb2x2ZSgpXG5cbiAgICAgICAgdGhyb3dJZkFib3J0ZWQodGhpc1trU3RhdGVdKVxuXG4gICAgICAgIC8vIE90aGVyd2lzZSwgdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICBoZWFkZXI6IGAke2luc3RhbmNlLm5hbWV9LmZvcm1EYXRhYCxcbiAgICAgICAgICBtZXNzYWdlOiAnQ291bGQgbm90IHBhcnNlIGNvbnRlbnQgYXMgRm9ybURhdGEuJ1xuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtZXRob2RzXG59XG5cbmZ1bmN0aW9uIG1peGluQm9keSAocHJvdG90eXBlKSB7XG4gIE9iamVjdC5hc3NpZ24ocHJvdG90eXBlLnByb3RvdHlwZSwgYm9keU1peGluTWV0aG9kcyhwcm90b3R5cGUpKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtYm9keS1jb25zdW1lLWJvZHlcbiAqIEBwYXJhbSB7UmVzcG9uc2V8UmVxdWVzdH0gb2JqZWN0XG4gKiBAcGFyYW0geyh2YWx1ZTogdW5rbm93bikgPT4gdW5rbm93bn0gY29udmVydEJ5dGVzVG9KU1ZhbHVlXG4gKiBAcGFyYW0ge1Jlc3BvbnNlfFJlcXVlc3R9IGluc3RhbmNlXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNwZWNDb25zdW1lQm9keSAob2JqZWN0LCBjb252ZXJ0Qnl0ZXNUb0pTVmFsdWUsIGluc3RhbmNlKSB7XG4gIHdlYmlkbC5icmFuZENoZWNrKG9iamVjdCwgaW5zdGFuY2UpXG5cbiAgdGhyb3dJZkFib3J0ZWQob2JqZWN0W2tTdGF0ZV0pXG5cbiAgLy8gMS4gSWYgb2JqZWN0IGlzIHVudXNhYmxlLCB0aGVuIHJldHVybiBhIHByb21pc2UgcmVqZWN0ZWRcbiAgLy8gICAgd2l0aCBhIFR5cGVFcnJvci5cbiAgaWYgKGJvZHlVbnVzYWJsZShvYmplY3Rba1N0YXRlXS5ib2R5KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0JvZHkgaXMgdW51c2FibGUnKVxuICB9XG5cbiAgLy8gMi4gTGV0IHByb21pc2UgYmUgYSBuZXcgcHJvbWlzZS5cbiAgY29uc3QgcHJvbWlzZSA9IGNyZWF0ZURlZmVycmVkUHJvbWlzZSgpXG5cbiAgLy8gMy4gTGV0IGVycm9yU3RlcHMgZ2l2ZW4gZXJyb3IgYmUgdG8gcmVqZWN0IHByb21pc2Ugd2l0aCBlcnJvci5cbiAgY29uc3QgZXJyb3JTdGVwcyA9IChlcnJvcikgPT4gcHJvbWlzZS5yZWplY3QoZXJyb3IpXG5cbiAgLy8gNC4gTGV0IHN1Y2Nlc3NTdGVwcyBnaXZlbiBhIGJ5dGUgc2VxdWVuY2UgZGF0YSBiZSB0byByZXNvbHZlXG4gIC8vICAgIHByb21pc2Ugd2l0aCB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgY29udmVydEJ5dGVzVG9KU1ZhbHVlXG4gIC8vICAgIHdpdGggZGF0YS4gSWYgdGhhdCB0aHJldyBhbiBleGNlcHRpb24sIHRoZW4gcnVuIGVycm9yU3RlcHNcbiAgLy8gICAgd2l0aCB0aGF0IGV4Y2VwdGlvbi5cbiAgY29uc3Qgc3VjY2Vzc1N0ZXBzID0gKGRhdGEpID0+IHtcbiAgICB0cnkge1xuICAgICAgcHJvbWlzZS5yZXNvbHZlKGNvbnZlcnRCeXRlc1RvSlNWYWx1ZShkYXRhKSlcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlcnJvclN0ZXBzKGUpXG4gICAgfVxuICB9XG5cbiAgLy8gNS4gSWYgb2JqZWN04oCZcyBib2R5IGlzIG51bGwsIHRoZW4gcnVuIHN1Y2Nlc3NTdGVwcyB3aXRoIGFuXG4gIC8vICAgIGVtcHR5IGJ5dGUgc2VxdWVuY2UuXG4gIGlmIChvYmplY3Rba1N0YXRlXS5ib2R5ID09IG51bGwpIHtcbiAgICBzdWNjZXNzU3RlcHMobmV3IFVpbnQ4QXJyYXkoKSlcbiAgICByZXR1cm4gcHJvbWlzZS5wcm9taXNlXG4gIH1cblxuICAvLyA2LiBPdGhlcndpc2UsIGZ1bGx5IHJlYWQgb2JqZWN04oCZcyBib2R5IGdpdmVuIHN1Y2Nlc3NTdGVwcyxcbiAgLy8gICAgZXJyb3JTdGVwcywgYW5kIG9iamVjdOKAmXMgcmVsZXZhbnQgZ2xvYmFsIG9iamVjdC5cbiAgYXdhaXQgZnVsbHlSZWFkQm9keShvYmplY3Rba1N0YXRlXS5ib2R5LCBzdWNjZXNzU3RlcHMsIGVycm9yU3RlcHMpXG5cbiAgLy8gNy4gUmV0dXJuIHByb21pc2UuXG4gIHJldHVybiBwcm9taXNlLnByb21pc2Vcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2JvZHktdW51c2FibGVcbmZ1bmN0aW9uIGJvZHlVbnVzYWJsZSAoYm9keSkge1xuICAvLyBBbiBvYmplY3QgaW5jbHVkaW5nIHRoZSBCb2R5IGludGVyZmFjZSBtaXhpbiBpc1xuICAvLyBzYWlkIHRvIGJlIHVudXNhYmxlIGlmIGl0cyBib2R5IGlzIG5vbi1udWxsIGFuZFxuICAvLyBpdHMgYm9keeKAmXMgc3RyZWFtIGlzIGRpc3R1cmJlZCBvciBsb2NrZWQuXG4gIHJldHVybiBib2R5ICE9IG51bGwgJiYgKGJvZHkuc3RyZWFtLmxvY2tlZCB8fCB1dGlsLmlzRGlzdHVyYmVkKGJvZHkuc3RyZWFtKSlcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZW5jb2Rpbmcuc3BlYy53aGF0d2cub3JnLyN1dGYtOC1kZWNvZGVcbiAqIEBwYXJhbSB7QnVmZmVyfSBidWZmZXJcbiAqL1xuZnVuY3Rpb24gdXRmOERlY29kZUJ5dGVzIChidWZmZXIpIHtcbiAgaWYgKGJ1ZmZlci5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIC8vIDEuIExldCBidWZmZXIgYmUgdGhlIHJlc3VsdCBvZiBwZWVraW5nIHRocmVlIGJ5dGVzIGZyb21cbiAgLy8gICAgaW9RdWV1ZSwgY29udmVydGVkIHRvIGEgYnl0ZSBzZXF1ZW5jZS5cblxuICAvLyAyLiBJZiBidWZmZXIgaXMgMHhFRiAweEJCIDB4QkYsIHRoZW4gcmVhZCB0aHJlZVxuICAvLyAgICBieXRlcyBmcm9tIGlvUXVldWUuIChEbyBub3RoaW5nIHdpdGggdGhvc2UgYnl0ZXMuKVxuICBpZiAoYnVmZmVyWzBdID09PSAweEVGICYmIGJ1ZmZlclsxXSA9PT0gMHhCQiAmJiBidWZmZXJbMl0gPT09IDB4QkYpIHtcbiAgICBidWZmZXIgPSBidWZmZXIuc3ViYXJyYXkoMylcbiAgfVxuXG4gIC8vIDMuIFByb2Nlc3MgYSBxdWV1ZSB3aXRoIGFuIGluc3RhbmNlIG9mIFVURi044oCZc1xuICAvLyAgICBkZWNvZGVyLCBpb1F1ZXVlLCBvdXRwdXQsIGFuZCBcInJlcGxhY2VtZW50XCIuXG4gIGNvbnN0IG91dHB1dCA9IHRleHREZWNvZGVyLmRlY29kZShidWZmZXIpXG5cbiAgLy8gNC4gUmV0dXJuIG91dHB1dC5cbiAgcmV0dXJuIG91dHB1dFxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI3BhcnNlLWpzb24tYnl0ZXMtdG8tYS1qYXZhc2NyaXB0LXZhbHVlXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGJ5dGVzXG4gKi9cbmZ1bmN0aW9uIHBhcnNlSlNPTkZyb21CeXRlcyAoYnl0ZXMpIHtcbiAgcmV0dXJuIEpTT04ucGFyc2UodXRmOERlY29kZUJ5dGVzKGJ5dGVzKSlcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWJvZHktbWltZS10eXBlXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9yZXNwb25zZScpLlJlc3BvbnNlfGltcG9ydCgnLi9yZXF1ZXN0JykuUmVxdWVzdH0gb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIGJvZHlNaW1lVHlwZSAob2JqZWN0KSB7XG4gIGNvbnN0IHsgaGVhZGVyc0xpc3QgfSA9IG9iamVjdFtrU3RhdGVdXG4gIGNvbnN0IGNvbnRlbnRUeXBlID0gaGVhZGVyc0xpc3QuZ2V0KCdjb250ZW50LXR5cGUnKVxuXG4gIGlmIChjb250ZW50VHlwZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIHJldHVybiBwYXJzZU1JTUVUeXBlKGNvbnRlbnRUeXBlKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZXh0cmFjdEJvZHksXG4gIHNhZmVseUV4dHJhY3RCb2R5LFxuICBjbG9uZUJvZHksXG4gIG1peGluQm9keVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3Qge1xuICBJbnZhbGlkQXJndW1lbnRFcnJvcixcbiAgTm90U3VwcG9ydGVkRXJyb3Jcbn0gPSByZXF1aXJlKCcuL2Vycm9ycycpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBrSFRUUDJCdWlsZFJlcXVlc3QsIGtIVFRQMkNvcHlIZWFkZXJzLCBrSFRUUDFCdWlsZFJlcXVlc3QgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi91dGlsJylcblxuLy8gdG9rZW5SZWdFeHAgYW5kIGhlYWRlckNoYXJSZWdleCBoYXZlIGJlZW4gbGlmdGVkIGZyb21cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL21haW4vbGliL19odHRwX2NvbW1vbi5qc1xuXG4vKipcbiAqIFZlcmlmaWVzIHRoYXQgdGhlIGdpdmVuIHZhbCBpcyBhIHZhbGlkIEhUVFAgdG9rZW5cbiAqIHBlciB0aGUgcnVsZXMgZGVmaW5lZCBpbiBSRkMgNzIzMFxuICogU2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4yLjZcbiAqL1xuY29uc3QgdG9rZW5SZWdFeHAgPSAvXltcXF5fYGEtekEtWlxcLTAtOSEjJCUmJyorLnx+XSskL1xuXG4vKipcbiAqIE1hdGNoZXMgaWYgdmFsIGNvbnRhaW5zIGFuIGludmFsaWQgZmllbGQtdmNoYXJcbiAqICBmaWVsZC12YWx1ZSAgICA9ICooIGZpZWxkLWNvbnRlbnQgLyBvYnMtZm9sZCApXG4gKiAgZmllbGQtY29udGVudCAgPSBmaWVsZC12Y2hhciBbIDEqKCBTUCAvIEhUQUIgKSBmaWVsZC12Y2hhciBdXG4gKiAgZmllbGQtdmNoYXIgICAgPSBWQ0hBUiAvIG9icy10ZXh0XG4gKi9cbmNvbnN0IGhlYWRlckNoYXJSZWdleCA9IC9bXlxcdFxceDIwLVxceDdlXFx4ODAtXFx4ZmZdL1xuXG4vLyBWZXJpZmllcyB0aGF0IGEgZ2l2ZW4gcGF0aCBpcyB2YWxpZCBkb2VzIG5vdCBjb250YWluIGNvbnRyb2wgY2hhcnMgXFx4MDAgdG8gXFx4MjBcbmNvbnN0IGludmFsaWRQYXRoUmVnZXggPSAvW15cXHUwMDIxLVxcdTAwZmZdL1xuXG5jb25zdCBrSGFuZGxlciA9IFN5bWJvbCgnaGFuZGxlcicpXG5cbmNvbnN0IGNoYW5uZWxzID0ge31cblxubGV0IGV4dHJhY3RCb2R5XG5cbnRyeSB7XG4gIGNvbnN0IGRpYWdub3N0aWNzQ2hhbm5lbCA9IHJlcXVpcmUoJ2RpYWdub3N0aWNzX2NoYW5uZWwnKVxuICBjaGFubmVscy5jcmVhdGUgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOnJlcXVlc3Q6Y3JlYXRlJylcbiAgY2hhbm5lbHMuYm9keVNlbnQgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOnJlcXVlc3Q6Ym9keVNlbnQnKVxuICBjaGFubmVscy5oZWFkZXJzID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpyZXF1ZXN0OmhlYWRlcnMnKVxuICBjaGFubmVscy50cmFpbGVycyA9IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6cmVxdWVzdDp0cmFpbGVycycpXG4gIGNoYW5uZWxzLmVycm9yID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpyZXF1ZXN0OmVycm9yJylcbn0gY2F0Y2gge1xuICBjaGFubmVscy5jcmVhdGUgPSB7IGhhc1N1YnNjcmliZXJzOiBmYWxzZSB9XG4gIGNoYW5uZWxzLmJvZHlTZW50ID0geyBoYXNTdWJzY3JpYmVyczogZmFsc2UgfVxuICBjaGFubmVscy5oZWFkZXJzID0geyBoYXNTdWJzY3JpYmVyczogZmFsc2UgfVxuICBjaGFubmVscy50cmFpbGVycyA9IHsgaGFzU3Vic2NyaWJlcnM6IGZhbHNlIH1cbiAgY2hhbm5lbHMuZXJyb3IgPSB7IGhhc1N1YnNjcmliZXJzOiBmYWxzZSB9XG59XG5cbmNsYXNzIFJlcXVlc3Qge1xuICBjb25zdHJ1Y3RvciAob3JpZ2luLCB7XG4gICAgcGF0aCxcbiAgICBtZXRob2QsXG4gICAgYm9keSxcbiAgICBoZWFkZXJzLFxuICAgIHF1ZXJ5LFxuICAgIGlkZW1wb3RlbnQsXG4gICAgYmxvY2tpbmcsXG4gICAgdXBncmFkZSxcbiAgICBoZWFkZXJzVGltZW91dCxcbiAgICBib2R5VGltZW91dCxcbiAgICByZXNldCxcbiAgICB0aHJvd09uRXJyb3IsXG4gICAgZXhwZWN0Q29udGludWVcbiAgfSwgaGFuZGxlcikge1xuICAgIGlmICh0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigncGF0aCBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgcGF0aFswXSAhPT0gJy8nICYmXG4gICAgICAhKHBhdGguc3RhcnRzV2l0aCgnaHR0cDovLycpIHx8IHBhdGguc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSkgJiZcbiAgICAgIG1ldGhvZCAhPT0gJ0NPTk5FQ1QnXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3BhdGggbXVzdCBiZSBhbiBhYnNvbHV0ZSBVUkwgb3Igc3RhcnQgd2l0aCBhIHNsYXNoJylcbiAgICB9IGVsc2UgaWYgKGludmFsaWRQYXRoUmVnZXguZXhlYyhwYXRoKSAhPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIHJlcXVlc3QgcGF0aCcpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBtZXRob2QgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ21ldGhvZCBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9IGVsc2UgaWYgKHRva2VuUmVnRXhwLmV4ZWMobWV0aG9kKSA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIHJlcXVlc3QgbWV0aG9kJylcbiAgICB9XG5cbiAgICBpZiAodXBncmFkZSAmJiB0eXBlb2YgdXBncmFkZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndXBncmFkZSBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9XG5cbiAgICBpZiAoaGVhZGVyc1RpbWVvdXQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0Zpbml0ZShoZWFkZXJzVGltZW91dCkgfHwgaGVhZGVyc1RpbWVvdXQgPCAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGhlYWRlcnNUaW1lb3V0JylcbiAgICB9XG5cbiAgICBpZiAoYm9keVRpbWVvdXQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0Zpbml0ZShib2R5VGltZW91dCkgfHwgYm9keVRpbWVvdXQgPCAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGJvZHlUaW1lb3V0JylcbiAgICB9XG5cbiAgICBpZiAocmVzZXQgIT0gbnVsbCAmJiB0eXBlb2YgcmVzZXQgIT09ICdib29sZWFuJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIHJlc2V0JylcbiAgICB9XG5cbiAgICBpZiAoZXhwZWN0Q29udGludWUgIT0gbnVsbCAmJiB0eXBlb2YgZXhwZWN0Q29udGludWUgIT09ICdib29sZWFuJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGV4cGVjdENvbnRpbnVlJylcbiAgICB9XG5cbiAgICB0aGlzLmhlYWRlcnNUaW1lb3V0ID0gaGVhZGVyc1RpbWVvdXRcblxuICAgIHRoaXMuYm9keVRpbWVvdXQgPSBib2R5VGltZW91dFxuXG4gICAgdGhpcy50aHJvd09uRXJyb3IgPSB0aHJvd09uRXJyb3IgPT09IHRydWVcblxuICAgIHRoaXMubWV0aG9kID0gbWV0aG9kXG5cbiAgICB0aGlzLmFib3J0ID0gbnVsbFxuXG4gICAgaWYgKGJvZHkgPT0gbnVsbCkge1xuICAgICAgdGhpcy5ib2R5ID0gbnVsbFxuICAgIH0gZWxzZSBpZiAodXRpbC5pc1N0cmVhbShib2R5KSkge1xuICAgICAgdGhpcy5ib2R5ID0gYm9keVxuXG4gICAgICBjb25zdCByU3RhdGUgPSB0aGlzLmJvZHkuX3JlYWRhYmxlU3RhdGVcbiAgICAgIGlmICghclN0YXRlIHx8ICFyU3RhdGUuYXV0b0Rlc3Ryb3kpIHtcbiAgICAgICAgdGhpcy5lbmRIYW5kbGVyID0gZnVuY3Rpb24gYXV0b0Rlc3Ryb3kgKCkge1xuICAgICAgICAgIHV0aWwuZGVzdHJveSh0aGlzKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuYm9keS5vbignZW5kJywgdGhpcy5lbmRIYW5kbGVyKVxuICAgICAgfVxuXG4gICAgICB0aGlzLmVycm9ySGFuZGxlciA9IGVyciA9PiB7XG4gICAgICAgIGlmICh0aGlzLmFib3J0KSB7XG4gICAgICAgICAgdGhpcy5hYm9ydChlcnIpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5lcnJvciA9IGVyclxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmJvZHkub24oJ2Vycm9yJywgdGhpcy5lcnJvckhhbmRsZXIpXG4gICAgfSBlbHNlIGlmICh1dGlsLmlzQnVmZmVyKGJvZHkpKSB7XG4gICAgICB0aGlzLmJvZHkgPSBib2R5LmJ5dGVMZW5ndGggPyBib2R5IDogbnVsbFxuICAgIH0gZWxzZSBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KGJvZHkpKSB7XG4gICAgICB0aGlzLmJvZHkgPSBib2R5LmJ1ZmZlci5ieXRlTGVuZ3RoID8gQnVmZmVyLmZyb20oYm9keS5idWZmZXIsIGJvZHkuYnl0ZU9mZnNldCwgYm9keS5ieXRlTGVuZ3RoKSA6IG51bGxcbiAgICB9IGVsc2UgaWYgKGJvZHkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgICAgdGhpcy5ib2R5ID0gYm9keS5ieXRlTGVuZ3RoID8gQnVmZmVyLmZyb20oYm9keSkgOiBudWxsXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuYm9keSA9IGJvZHkubGVuZ3RoID8gQnVmZmVyLmZyb20oYm9keSkgOiBudWxsXG4gICAgfSBlbHNlIGlmICh1dGlsLmlzRm9ybURhdGFMaWtlKGJvZHkpIHx8IHV0aWwuaXNJdGVyYWJsZShib2R5KSB8fCB1dGlsLmlzQmxvYkxpa2UoYm9keSkpIHtcbiAgICAgIHRoaXMuYm9keSA9IGJvZHlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdib2R5IG11c3QgYmUgYSBzdHJpbmcsIGEgQnVmZmVyLCBhIFJlYWRhYmxlIHN0cmVhbSwgYW4gaXRlcmFibGUsIG9yIGFuIGFzeW5jIGl0ZXJhYmxlJylcbiAgICB9XG5cbiAgICB0aGlzLmNvbXBsZXRlZCA9IGZhbHNlXG5cbiAgICB0aGlzLmFib3J0ZWQgPSBmYWxzZVxuXG4gICAgdGhpcy51cGdyYWRlID0gdXBncmFkZSB8fCBudWxsXG5cbiAgICB0aGlzLnBhdGggPSBxdWVyeSA/IHV0aWwuYnVpbGRVUkwocGF0aCwgcXVlcnkpIDogcGF0aFxuXG4gICAgdGhpcy5vcmlnaW4gPSBvcmlnaW5cblxuICAgIHRoaXMuaWRlbXBvdGVudCA9IGlkZW1wb3RlbnQgPT0gbnVsbFxuICAgICAgPyBtZXRob2QgPT09ICdIRUFEJyB8fCBtZXRob2QgPT09ICdHRVQnXG4gICAgICA6IGlkZW1wb3RlbnRcblxuICAgIHRoaXMuYmxvY2tpbmcgPSBibG9ja2luZyA9PSBudWxsID8gZmFsc2UgOiBibG9ja2luZ1xuXG4gICAgdGhpcy5yZXNldCA9IHJlc2V0ID09IG51bGwgPyBudWxsIDogcmVzZXRcblxuICAgIHRoaXMuaG9zdCA9IG51bGxcblxuICAgIHRoaXMuY29udGVudExlbmd0aCA9IG51bGxcblxuICAgIHRoaXMuY29udGVudFR5cGUgPSBudWxsXG5cbiAgICB0aGlzLmhlYWRlcnMgPSAnJ1xuXG4gICAgLy8gT25seSBmb3IgSDJcbiAgICB0aGlzLmV4cGVjdENvbnRpbnVlID0gZXhwZWN0Q29udGludWUgIT0gbnVsbCA/IGV4cGVjdENvbnRpbnVlIDogZmFsc2VcblxuICAgIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgICBpZiAoaGVhZGVycy5sZW5ndGggJSAyICE9PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaGVhZGVycyBhcnJheSBtdXN0IGJlIGV2ZW4nKVxuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgIHByb2Nlc3NIZWFkZXIodGhpcywgaGVhZGVyc1tpXSwgaGVhZGVyc1tpICsgMV0pXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChoZWFkZXJzICYmIHR5cGVvZiBoZWFkZXJzID09PSAnb2JqZWN0Jykge1xuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGhlYWRlcnMpXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXVxuICAgICAgICBwcm9jZXNzSGVhZGVyKHRoaXMsIGtleSwgaGVhZGVyc1trZXldKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaGVhZGVycyAhPSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2hlYWRlcnMgbXVzdCBiZSBhbiBvYmplY3Qgb3IgYW4gYXJyYXknKVxuICAgIH1cblxuICAgIGlmICh1dGlsLmlzRm9ybURhdGFMaWtlKHRoaXMuYm9keSkpIHtcbiAgICAgIGlmICh1dGlsLm5vZGVNYWpvciA8IDE2IHx8ICh1dGlsLm5vZGVNYWpvciA9PT0gMTYgJiYgdXRpbC5ub2RlTWlub3IgPCA4KSkge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0Zvcm0tRGF0YSBib2RpZXMgYXJlIG9ubHkgc3VwcG9ydGVkIGluIG5vZGUgdjE2LjggYW5kIG5ld2VyLicpXG4gICAgICB9XG5cbiAgICAgIGlmICghZXh0cmFjdEJvZHkpIHtcbiAgICAgICAgZXh0cmFjdEJvZHkgPSByZXF1aXJlKCcuLi9mZXRjaC9ib2R5LmpzJykuZXh0cmFjdEJvZHlcbiAgICAgIH1cblxuICAgICAgY29uc3QgW2JvZHlTdHJlYW0sIGNvbnRlbnRUeXBlXSA9IGV4dHJhY3RCb2R5KGJvZHkpXG4gICAgICBpZiAodGhpcy5jb250ZW50VHlwZSA9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuY29udGVudFR5cGUgPSBjb250ZW50VHlwZVxuICAgICAgICB0aGlzLmhlYWRlcnMgKz0gYGNvbnRlbnQtdHlwZTogJHtjb250ZW50VHlwZX1cXHJcXG5gXG4gICAgICB9XG4gICAgICB0aGlzLmJvZHkgPSBib2R5U3RyZWFtLnN0cmVhbVxuICAgICAgdGhpcy5jb250ZW50TGVuZ3RoID0gYm9keVN0cmVhbS5sZW5ndGhcbiAgICB9IGVsc2UgaWYgKHV0aWwuaXNCbG9iTGlrZShib2R5KSAmJiB0aGlzLmNvbnRlbnRUeXBlID09IG51bGwgJiYgYm9keS50eXBlKSB7XG4gICAgICB0aGlzLmNvbnRlbnRUeXBlID0gYm9keS50eXBlXG4gICAgICB0aGlzLmhlYWRlcnMgKz0gYGNvbnRlbnQtdHlwZTogJHtib2R5LnR5cGV9XFxyXFxuYFxuICAgIH1cblxuICAgIHV0aWwudmFsaWRhdGVIYW5kbGVyKGhhbmRsZXIsIG1ldGhvZCwgdXBncmFkZSlcblxuICAgIHRoaXMuc2VydmVybmFtZSA9IHV0aWwuZ2V0U2VydmVyTmFtZSh0aGlzLmhvc3QpXG5cbiAgICB0aGlzW2tIYW5kbGVyXSA9IGhhbmRsZXJcblxuICAgIGlmIChjaGFubmVscy5jcmVhdGUuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICAgIGNoYW5uZWxzLmNyZWF0ZS5wdWJsaXNoKHsgcmVxdWVzdDogdGhpcyB9KVxuICAgIH1cbiAgfVxuXG4gIG9uQm9keVNlbnQgKGNodW5rKSB7XG4gICAgaWYgKHRoaXNba0hhbmRsZXJdLm9uQm9keVNlbnQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB0aGlzW2tIYW5kbGVyXS5vbkJvZHlTZW50KGNodW5rKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMuYWJvcnQoZXJyKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uUmVxdWVzdFNlbnQgKCkge1xuICAgIGlmIChjaGFubmVscy5ib2R5U2VudC5oYXNTdWJzY3JpYmVycykge1xuICAgICAgY2hhbm5lbHMuYm9keVNlbnQucHVibGlzaCh7IHJlcXVlc3Q6IHRoaXMgfSlcbiAgICB9XG5cbiAgICBpZiAodGhpc1trSGFuZGxlcl0ub25SZXF1ZXN0U2VudCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uUmVxdWVzdFNlbnQoKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMuYWJvcnQoZXJyKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uQ29ubmVjdCAoYWJvcnQpIHtcbiAgICBhc3NlcnQoIXRoaXMuYWJvcnRlZClcbiAgICBhc3NlcnQoIXRoaXMuY29tcGxldGVkKVxuXG4gICAgaWYgKHRoaXMuZXJyb3IpIHtcbiAgICAgIGFib3J0KHRoaXMuZXJyb3IpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uQ29ubmVjdChhYm9ydClcbiAgICB9XG4gIH1cblxuICBvbkhlYWRlcnMgKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHJlc3VtZSwgc3RhdHVzVGV4dCkge1xuICAgIGFzc2VydCghdGhpcy5hYm9ydGVkKVxuICAgIGFzc2VydCghdGhpcy5jb21wbGV0ZWQpXG5cbiAgICBpZiAoY2hhbm5lbHMuaGVhZGVycy5oYXNTdWJzY3JpYmVycykge1xuICAgICAgY2hhbm5lbHMuaGVhZGVycy5wdWJsaXNoKHsgcmVxdWVzdDogdGhpcywgcmVzcG9uc2U6IHsgc3RhdHVzQ29kZSwgaGVhZGVycywgc3RhdHVzVGV4dCB9IH0pXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzW2tIYW5kbGVyXS5vbkhlYWRlcnMoc3RhdHVzQ29kZSwgaGVhZGVycywgcmVzdW1lLCBzdGF0dXNUZXh0KVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5hYm9ydChlcnIpXG4gICAgfVxuICB9XG5cbiAgb25EYXRhIChjaHVuaykge1xuICAgIGFzc2VydCghdGhpcy5hYm9ydGVkKVxuICAgIGFzc2VydCghdGhpcy5jb21wbGV0ZWQpXG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uRGF0YShjaHVuaylcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuYWJvcnQoZXJyKVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgb25VcGdyYWRlIChzdGF0dXNDb2RlLCBoZWFkZXJzLCBzb2NrZXQpIHtcbiAgICBhc3NlcnQoIXRoaXMuYWJvcnRlZClcbiAgICBhc3NlcnQoIXRoaXMuY29tcGxldGVkKVxuXG4gICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uVXBncmFkZShzdGF0dXNDb2RlLCBoZWFkZXJzLCBzb2NrZXQpXG4gIH1cblxuICBvbkNvbXBsZXRlICh0cmFpbGVycykge1xuICAgIHRoaXMub25GaW5hbGx5KClcblxuICAgIGFzc2VydCghdGhpcy5hYm9ydGVkKVxuXG4gICAgdGhpcy5jb21wbGV0ZWQgPSB0cnVlXG4gICAgaWYgKGNoYW5uZWxzLnRyYWlsZXJzLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICBjaGFubmVscy50cmFpbGVycy5wdWJsaXNoKHsgcmVxdWVzdDogdGhpcywgdHJhaWxlcnMgfSlcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uQ29tcGxldGUodHJhaWxlcnMpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBUT0RPIChmaXgpOiBUaGlzIG1pZ2h0IGJlIGEgYmFkIGlkZWE/XG4gICAgICB0aGlzLm9uRXJyb3IoZXJyKVxuICAgIH1cbiAgfVxuXG4gIG9uRXJyb3IgKGVycm9yKSB7XG4gICAgdGhpcy5vbkZpbmFsbHkoKVxuXG4gICAgaWYgKGNoYW5uZWxzLmVycm9yLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICBjaGFubmVscy5lcnJvci5wdWJsaXNoKHsgcmVxdWVzdDogdGhpcywgZXJyb3IgfSlcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hYm9ydGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdGhpcy5hYm9ydGVkID0gdHJ1ZVxuXG4gICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uRXJyb3IoZXJyb3IpXG4gIH1cblxuICBvbkZpbmFsbHkgKCkge1xuICAgIGlmICh0aGlzLmVycm9ySGFuZGxlcikge1xuICAgICAgdGhpcy5ib2R5Lm9mZignZXJyb3InLCB0aGlzLmVycm9ySGFuZGxlcilcbiAgICAgIHRoaXMuZXJyb3JIYW5kbGVyID0gbnVsbFxuICAgIH1cblxuICAgIGlmICh0aGlzLmVuZEhhbmRsZXIpIHtcbiAgICAgIHRoaXMuYm9keS5vZmYoJ2VuZCcsIHRoaXMuZW5kSGFuZGxlcilcbiAgICAgIHRoaXMuZW5kSGFuZGxlciA9IG51bGxcbiAgICB9XG4gIH1cblxuICAvLyBUT0RPOiBhZGp1c3QgdG8gc3VwcG9ydCBIMlxuICBhZGRIZWFkZXIgKGtleSwgdmFsdWUpIHtcbiAgICBwcm9jZXNzSGVhZGVyKHRoaXMsIGtleSwgdmFsdWUpXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIHN0YXRpYyBba0hUVFAxQnVpbGRSZXF1ZXN0XSAob3JpZ2luLCBvcHRzLCBoYW5kbGVyKSB7XG4gICAgLy8gVE9ETzogTWlncmF0ZSBoZWFkZXIgcGFyc2luZyBoZXJlLCB0byBtYWtlIFJlcXVlc3RzXG4gICAgLy8gSFRUUCBhZ25vc3RpY1xuICAgIHJldHVybiBuZXcgUmVxdWVzdChvcmlnaW4sIG9wdHMsIGhhbmRsZXIpXG4gIH1cblxuICBzdGF0aWMgW2tIVFRQMkJ1aWxkUmVxdWVzdF0gKG9yaWdpbiwgb3B0cywgaGFuZGxlcikge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBvcHRzLmhlYWRlcnNcbiAgICBvcHRzID0geyAuLi5vcHRzLCBoZWFkZXJzOiBudWxsIH1cblxuICAgIGNvbnN0IHJlcXVlc3QgPSBuZXcgUmVxdWVzdChvcmlnaW4sIG9wdHMsIGhhbmRsZXIpXG5cbiAgICByZXF1ZXN0LmhlYWRlcnMgPSB7fVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICAgIGlmIChoZWFkZXJzLmxlbmd0aCAlIDIgIT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdoZWFkZXJzIGFycmF5IG11c3QgYmUgZXZlbicpXG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgcHJvY2Vzc0hlYWRlcihyZXF1ZXN0LCBoZWFkZXJzW2ldLCBoZWFkZXJzW2kgKyAxXSwgdHJ1ZSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGhlYWRlcnMgJiYgdHlwZW9mIGhlYWRlcnMgPT09ICdvYmplY3QnKSB7XG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoaGVhZGVycylcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBrZXkgPSBrZXlzW2ldXG4gICAgICAgIHByb2Nlc3NIZWFkZXIocmVxdWVzdCwga2V5LCBoZWFkZXJzW2tleV0sIHRydWUpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChoZWFkZXJzICE9IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaGVhZGVycyBtdXN0IGJlIGFuIG9iamVjdCBvciBhbiBhcnJheScpXG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcXVlc3RcbiAgfVxuXG4gIHN0YXRpYyBba0hUVFAyQ29weUhlYWRlcnNdIChyYXcpIHtcbiAgICBjb25zdCByYXdIZWFkZXJzID0gcmF3LnNwbGl0KCdcXHJcXG4nKVxuICAgIGNvbnN0IGhlYWRlcnMgPSB7fVxuXG4gICAgZm9yIChjb25zdCBoZWFkZXIgb2YgcmF3SGVhZGVycykge1xuICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0gaGVhZGVyLnNwbGl0KCc6ICcpXG5cbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlLmxlbmd0aCA9PT0gMCkgY29udGludWVcblxuICAgICAgaWYgKGhlYWRlcnNba2V5XSkgaGVhZGVyc1trZXldICs9IGAsJHt2YWx1ZX1gXG4gICAgICBlbHNlIGhlYWRlcnNba2V5XSA9IHZhbHVlXG4gICAgfVxuXG4gICAgcmV0dXJuIGhlYWRlcnNcbiAgfVxufVxuXG5mdW5jdGlvbiBwcm9jZXNzSGVhZGVyVmFsdWUgKGtleSwgdmFsLCBza2lwQXBwZW5kKSB7XG4gIGlmICh2YWwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoYGludmFsaWQgJHtrZXl9IGhlYWRlcmApXG4gIH1cblxuICB2YWwgPSB2YWwgIT0gbnVsbCA/IGAke3ZhbH1gIDogJydcblxuICBpZiAoaGVhZGVyQ2hhclJlZ2V4LmV4ZWModmFsKSAhPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihgaW52YWxpZCAke2tleX0gaGVhZGVyYClcbiAgfVxuXG4gIHJldHVybiBza2lwQXBwZW5kID8gdmFsIDogYCR7a2V5fTogJHt2YWx9XFxyXFxuYFxufVxuXG5mdW5jdGlvbiBwcm9jZXNzSGVhZGVyIChyZXF1ZXN0LCBrZXksIHZhbCwgc2tpcEFwcGVuZCA9IGZhbHNlKSB7XG4gIGlmICh2YWwgJiYgKHR5cGVvZiB2YWwgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbCkpKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKGBpbnZhbGlkICR7a2V5fSBoZWFkZXJgKVxuICB9IGVsc2UgaWYgKHZhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoXG4gICAgcmVxdWVzdC5ob3N0ID09PSBudWxsICYmXG4gICAga2V5Lmxlbmd0aCA9PT0gNCAmJlxuICAgIGtleS50b0xvd2VyQ2FzZSgpID09PSAnaG9zdCdcbiAgKSB7XG4gICAgaWYgKGhlYWRlckNoYXJSZWdleC5leGVjKHZhbCkgIT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihgaW52YWxpZCAke2tleX0gaGVhZGVyYClcbiAgICB9XG4gICAgLy8gQ29uc3VtZWQgYnkgQ2xpZW50XG4gICAgcmVxdWVzdC5ob3N0ID0gdmFsXG4gIH0gZWxzZSBpZiAoXG4gICAgcmVxdWVzdC5jb250ZW50TGVuZ3RoID09PSBudWxsICYmXG4gICAga2V5Lmxlbmd0aCA9PT0gMTQgJiZcbiAgICBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtbGVuZ3RoJ1xuICApIHtcbiAgICByZXF1ZXN0LmNvbnRlbnRMZW5ndGggPSBwYXJzZUludCh2YWwsIDEwKVxuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHJlcXVlc3QuY29udGVudExlbmd0aCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjb250ZW50LWxlbmd0aCBoZWFkZXInKVxuICAgIH1cbiAgfSBlbHNlIGlmIChcbiAgICByZXF1ZXN0LmNvbnRlbnRUeXBlID09PSBudWxsICYmXG4gICAga2V5Lmxlbmd0aCA9PT0gMTIgJiZcbiAgICBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtdHlwZSdcbiAgKSB7XG4gICAgcmVxdWVzdC5jb250ZW50VHlwZSA9IHZhbFxuICAgIGlmIChza2lwQXBwZW5kKSByZXF1ZXN0LmhlYWRlcnNba2V5XSA9IHByb2Nlc3NIZWFkZXJWYWx1ZShrZXksIHZhbCwgc2tpcEFwcGVuZClcbiAgICBlbHNlIHJlcXVlc3QuaGVhZGVycyArPSBwcm9jZXNzSGVhZGVyVmFsdWUoa2V5LCB2YWwpXG4gIH0gZWxzZSBpZiAoXG4gICAga2V5Lmxlbmd0aCA9PT0gMTcgJiZcbiAgICBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3RyYW5zZmVyLWVuY29kaW5nJ1xuICApIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgdHJhbnNmZXItZW5jb2RpbmcgaGVhZGVyJylcbiAgfSBlbHNlIGlmIChcbiAgICBrZXkubGVuZ3RoID09PSAxMCAmJlxuICAgIGtleS50b0xvd2VyQ2FzZSgpID09PSAnY29ubmVjdGlvbidcbiAgKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0eXBlb2YgdmFsID09PSAnc3RyaW5nJyA/IHZhbC50b0xvd2VyQ2FzZSgpIDogbnVsbFxuICAgIGlmICh2YWx1ZSAhPT0gJ2Nsb3NlJyAmJiB2YWx1ZSAhPT0gJ2tlZXAtYWxpdmUnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY29ubmVjdGlvbiBoZWFkZXInKVxuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09ICdjbG9zZScpIHtcbiAgICAgIHJlcXVlc3QucmVzZXQgPSB0cnVlXG4gICAgfVxuICB9IGVsc2UgaWYgKFxuICAgIGtleS5sZW5ndGggPT09IDEwICYmXG4gICAga2V5LnRvTG93ZXJDYXNlKCkgPT09ICdrZWVwLWFsaXZlJ1xuICApIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQga2VlcC1hbGl2ZSBoZWFkZXInKVxuICB9IGVsc2UgaWYgKFxuICAgIGtleS5sZW5ndGggPT09IDcgJiZcbiAgICBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3VwZ3JhZGUnXG4gICkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCB1cGdyYWRlIGhlYWRlcicpXG4gIH0gZWxzZSBpZiAoXG4gICAga2V5Lmxlbmd0aCA9PT0gNiAmJlxuICAgIGtleS50b0xvd2VyQ2FzZSgpID09PSAnZXhwZWN0J1xuICApIHtcbiAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkRXJyb3IoJ2V4cGVjdCBoZWFkZXIgbm90IHN1cHBvcnRlZCcpXG4gIH0gZWxzZSBpZiAodG9rZW5SZWdFeHAuZXhlYyhrZXkpID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGhlYWRlciBrZXknKVxuICB9IGVsc2Uge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChza2lwQXBwZW5kKSB7XG4gICAgICAgICAgaWYgKHJlcXVlc3QuaGVhZGVyc1trZXldKSByZXF1ZXN0LmhlYWRlcnNba2V5XSArPSBgLCR7cHJvY2Vzc0hlYWRlclZhbHVlKGtleSwgdmFsW2ldLCBza2lwQXBwZW5kKX1gXG4gICAgICAgICAgZWxzZSByZXF1ZXN0LmhlYWRlcnNba2V5XSA9IHByb2Nlc3NIZWFkZXJWYWx1ZShrZXksIHZhbFtpXSwgc2tpcEFwcGVuZClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXF1ZXN0LmhlYWRlcnMgKz0gcHJvY2Vzc0hlYWRlclZhbHVlKGtleSwgdmFsW2ldKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChza2lwQXBwZW5kKSByZXF1ZXN0LmhlYWRlcnNba2V5XSA9IHByb2Nlc3NIZWFkZXJWYWx1ZShrZXksIHZhbCwgc2tpcEFwcGVuZClcbiAgICAgIGVsc2UgcmVxdWVzdC5oZWFkZXJzICs9IHByb2Nlc3NIZWFkZXJWYWx1ZShrZXksIHZhbClcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBSZXF1ZXN0XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudHMnKVxuXG5jbGFzcyBEaXNwYXRjaGVyIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgZGlzcGF0Y2ggKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignbm90IGltcGxlbWVudGVkJylcbiAgfVxuXG4gIGNsb3NlICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBpbXBsZW1lbnRlZCcpXG4gIH1cblxuICBkZXN0cm95ICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBpbXBsZW1lbnRlZCcpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBEaXNwYXRjaGVyXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBEaXNwYXRjaGVyID0gcmVxdWlyZSgnLi9kaXNwYXRjaGVyJylcbmNvbnN0IHtcbiAgQ2xpZW50RGVzdHJveWVkRXJyb3IsXG4gIENsaWVudENsb3NlZEVycm9yLFxuICBJbnZhbGlkQXJndW1lbnRFcnJvclxufSA9IHJlcXVpcmUoJy4vY29yZS9lcnJvcnMnKVxuY29uc3QgeyBrRGVzdHJveSwga0Nsb3NlLCBrRGlzcGF0Y2gsIGtJbnRlcmNlcHRvcnMgfSA9IHJlcXVpcmUoJy4vY29yZS9zeW1ib2xzJylcblxuY29uc3Qga0Rlc3Ryb3llZCA9IFN5bWJvbCgnZGVzdHJveWVkJylcbmNvbnN0IGtDbG9zZWQgPSBTeW1ib2woJ2Nsb3NlZCcpXG5jb25zdCBrT25EZXN0cm95ZWQgPSBTeW1ib2woJ29uRGVzdHJveWVkJylcbmNvbnN0IGtPbkNsb3NlZCA9IFN5bWJvbCgnb25DbG9zZWQnKVxuY29uc3Qga0ludGVyY2VwdGVkRGlzcGF0Y2ggPSBTeW1ib2woJ0ludGVyY2VwdGVkIERpc3BhdGNoJylcblxuY2xhc3MgRGlzcGF0Y2hlckJhc2UgZXh0ZW5kcyBEaXNwYXRjaGVyIHtcbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXNba0Rlc3Ryb3llZF0gPSBmYWxzZVxuICAgIHRoaXNba09uRGVzdHJveWVkXSA9IG51bGxcbiAgICB0aGlzW2tDbG9zZWRdID0gZmFsc2VcbiAgICB0aGlzW2tPbkNsb3NlZF0gPSBbXVxuICB9XG5cbiAgZ2V0IGRlc3Ryb3llZCAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0Rlc3Ryb3llZF1cbiAgfVxuXG4gIGdldCBjbG9zZWQgKCkge1xuICAgIHJldHVybiB0aGlzW2tDbG9zZWRdXG4gIH1cblxuICBnZXQgaW50ZXJjZXB0b3JzICgpIHtcbiAgICByZXR1cm4gdGhpc1trSW50ZXJjZXB0b3JzXVxuICB9XG5cbiAgc2V0IGludGVyY2VwdG9ycyAobmV3SW50ZXJjZXB0b3JzKSB7XG4gICAgaWYgKG5ld0ludGVyY2VwdG9ycykge1xuICAgICAgZm9yIChsZXQgaSA9IG5ld0ludGVyY2VwdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBjb25zdCBpbnRlcmNlcHRvciA9IHRoaXNba0ludGVyY2VwdG9yc11baV1cbiAgICAgICAgaWYgKHR5cGVvZiBpbnRlcmNlcHRvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW50ZXJjZXB0b3IgbXVzdCBiZSBhbiBmdW5jdGlvbicpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzW2tJbnRlcmNlcHRvcnNdID0gbmV3SW50ZXJjZXB0b3JzXG4gIH1cblxuICBjbG9zZSAoY2FsbGJhY2spIHtcbiAgICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgdGhpcy5jbG9zZSgoZXJyLCBkYXRhKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGVyciA/IHJlamVjdChlcnIpIDogcmVzb2x2ZShkYXRhKVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY2FsbGJhY2snKVxuICAgIH1cblxuICAgIGlmICh0aGlzW2tEZXN0cm95ZWRdKSB7XG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhuZXcgQ2xpZW50RGVzdHJveWVkRXJyb3IoKSwgbnVsbCkpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAodGhpc1trQ2xvc2VkXSkge1xuICAgICAgaWYgKHRoaXNba09uQ2xvc2VkXSkge1xuICAgICAgICB0aGlzW2tPbkNsb3NlZF0ucHVzaChjYWxsYmFjaylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGNhbGxiYWNrKG51bGwsIG51bGwpKVxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpc1trQ2xvc2VkXSA9IHRydWVcbiAgICB0aGlzW2tPbkNsb3NlZF0ucHVzaChjYWxsYmFjaylcblxuICAgIGNvbnN0IG9uQ2xvc2VkID0gKCkgPT4ge1xuICAgICAgY29uc3QgY2FsbGJhY2tzID0gdGhpc1trT25DbG9zZWRdXG4gICAgICB0aGlzW2tPbkNsb3NlZF0gPSBudWxsXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNhbGxiYWNrcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjYWxsYmFja3NbaV0obnVsbCwgbnVsbClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTaG91bGQgbm90IGVycm9yLlxuICAgIHRoaXNba0Nsb3NlXSgpXG4gICAgICAudGhlbigoKSA9PiB0aGlzLmRlc3Ryb3koKSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgcXVldWVNaWNyb3Rhc2sob25DbG9zZWQpXG4gICAgICB9KVxuICB9XG5cbiAgZGVzdHJveSAoZXJyLCBjYWxsYmFjaykge1xuICAgIGlmICh0eXBlb2YgZXJyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjYWxsYmFjayA9IGVyclxuICAgICAgZXJyID0gbnVsbFxuICAgIH1cblxuICAgIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICB0aGlzLmRlc3Ryb3koZXJyLCAoZXJyLCBkYXRhKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGVyciA/IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBzaG91bGQgbmV2ZXIgZXJyb3IgKi8gcmVqZWN0KGVycikgOiByZXNvbHZlKGRhdGEpXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjYWxsYmFjaycpXG4gICAgfVxuXG4gICAgaWYgKHRoaXNba0Rlc3Ryb3llZF0pIHtcbiAgICAgIGlmICh0aGlzW2tPbkRlc3Ryb3llZF0pIHtcbiAgICAgICAgdGhpc1trT25EZXN0cm95ZWRdLnB1c2goY2FsbGJhY2spXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhudWxsLCBudWxsKSlcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghZXJyKSB7XG4gICAgICBlcnIgPSBuZXcgQ2xpZW50RGVzdHJveWVkRXJyb3IoKVxuICAgIH1cblxuICAgIHRoaXNba0Rlc3Ryb3llZF0gPSB0cnVlXG4gICAgdGhpc1trT25EZXN0cm95ZWRdID0gdGhpc1trT25EZXN0cm95ZWRdIHx8IFtdXG4gICAgdGhpc1trT25EZXN0cm95ZWRdLnB1c2goY2FsbGJhY2spXG5cbiAgICBjb25zdCBvbkRlc3Ryb3llZCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGNhbGxiYWNrcyA9IHRoaXNba09uRGVzdHJveWVkXVxuICAgICAgdGhpc1trT25EZXN0cm95ZWRdID0gbnVsbFxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjYWxsYmFja3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY2FsbGJhY2tzW2ldKG51bGwsIG51bGwpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2hvdWxkIG5vdCBlcnJvci5cbiAgICB0aGlzW2tEZXN0cm95XShlcnIpLnRoZW4oKCkgPT4ge1xuICAgICAgcXVldWVNaWNyb3Rhc2sob25EZXN0cm95ZWQpXG4gICAgfSlcbiAgfVxuXG4gIFtrSW50ZXJjZXB0ZWREaXNwYXRjaF0gKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBpZiAoIXRoaXNba0ludGVyY2VwdG9yc10gfHwgdGhpc1trSW50ZXJjZXB0b3JzXS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXNba0ludGVyY2VwdGVkRGlzcGF0Y2hdID0gdGhpc1trRGlzcGF0Y2hdXG4gICAgICByZXR1cm4gdGhpc1trRGlzcGF0Y2hdKG9wdHMsIGhhbmRsZXIpXG4gICAgfVxuXG4gICAgbGV0IGRpc3BhdGNoID0gdGhpc1trRGlzcGF0Y2hdLmJpbmQodGhpcylcbiAgICBmb3IgKGxldCBpID0gdGhpc1trSW50ZXJjZXB0b3JzXS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgZGlzcGF0Y2ggPSB0aGlzW2tJbnRlcmNlcHRvcnNdW2ldKGRpc3BhdGNoKVxuICAgIH1cbiAgICB0aGlzW2tJbnRlcmNlcHRlZERpc3BhdGNoXSA9IGRpc3BhdGNoXG4gICAgcmV0dXJuIGRpc3BhdGNoKG9wdHMsIGhhbmRsZXIpXG4gIH1cblxuICBkaXNwYXRjaCAob3B0cywgaGFuZGxlcikge1xuICAgIGlmICghaGFuZGxlciB8fCB0eXBlb2YgaGFuZGxlciAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaGFuZGxlciBtdXN0IGJlIGFuIG9iamVjdCcpXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGlmICghb3B0cyB8fCB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdvcHRzIG11c3QgYmUgYW4gb2JqZWN0LicpXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzW2tEZXN0cm95ZWRdIHx8IHRoaXNba09uRGVzdHJveWVkXSkge1xuICAgICAgICB0aHJvdyBuZXcgQ2xpZW50RGVzdHJveWVkRXJyb3IoKVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpc1trQ2xvc2VkXSkge1xuICAgICAgICB0aHJvdyBuZXcgQ2xpZW50Q2xvc2VkRXJyb3IoKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpc1trSW50ZXJjZXB0ZWREaXNwYXRjaF0ob3B0cywgaGFuZGxlcilcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICh0eXBlb2YgaGFuZGxlci5vbkVycm9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkVycm9yIG1ldGhvZCcpXG4gICAgICB9XG5cbiAgICAgIGhhbmRsZXIub25FcnJvcihlcnIpXG5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IERpc3BhdGNoZXJCYXNlXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBuZXQgPSByZXF1aXJlKCduZXQnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciwgQ29ubmVjdFRpbWVvdXRFcnJvciB9ID0gcmVxdWlyZSgnLi9lcnJvcnMnKVxuXG5sZXQgdGxzIC8vIGluY2x1ZGUgdGxzIGNvbmRpdGlvbmFsbHkgc2luY2UgaXQgaXMgbm90IGFsd2F5cyBhdmFpbGFibGVcblxuLy8gVE9ETzogc2Vzc2lvbiByZS11c2UgZG9lcyBub3Qgd2FpdCBmb3IgdGhlIGZpcnN0XG4vLyBjb25uZWN0aW9uIHRvIHJlc29sdmUgdGhlIHNlc3Npb24gYW5kIG1pZ2h0IHRoZXJlZm9yZVxuLy8gcmVzb2x2ZSB0aGUgc2FtZSBzZXJ2ZXJuYW1lIG11bHRpcGxlIHRpbWVzIGV2ZW4gd2hlblxuLy8gcmUtdXNlIGlzIGVuYWJsZWQuXG5cbmxldCBTZXNzaW9uQ2FjaGVcbi8vIEZJWE1FOiByZW1vdmUgd29ya2Fyb3VuZCB3aGVuIHRoZSBOb2RlIGJ1ZyBpcyBmaXhlZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2lzc3Vlcy80OTM0NCNpc3N1ZWNvbW1lbnQtMTc0MTc3NjMwOFxuaWYgKGdsb2JhbC5GaW5hbGl6YXRpb25SZWdpc3RyeSAmJiAhcHJvY2Vzcy5lbnYuTk9ERV9WOF9DT1ZFUkFHRSkge1xuICBTZXNzaW9uQ2FjaGUgPSBjbGFzcyBXZWFrU2Vzc2lvbkNhY2hlIHtcbiAgICBjb25zdHJ1Y3RvciAobWF4Q2FjaGVkU2Vzc2lvbnMpIHtcbiAgICAgIHRoaXMuX21heENhY2hlZFNlc3Npb25zID0gbWF4Q2FjaGVkU2Vzc2lvbnNcbiAgICAgIHRoaXMuX3Nlc3Npb25DYWNoZSA9IG5ldyBNYXAoKVxuICAgICAgdGhpcy5fc2Vzc2lvblJlZ2lzdHJ5ID0gbmV3IGdsb2JhbC5GaW5hbGl6YXRpb25SZWdpc3RyeSgoa2V5KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9zZXNzaW9uQ2FjaGUuc2l6ZSA8IHRoaXMuX21heENhY2hlZFNlc3Npb25zKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZWYgPSB0aGlzLl9zZXNzaW9uQ2FjaGUuZ2V0KGtleSlcbiAgICAgICAgaWYgKHJlZiAhPT0gdW5kZWZpbmVkICYmIHJlZi5kZXJlZigpID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLl9zZXNzaW9uQ2FjaGUuZGVsZXRlKGtleSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBnZXQgKHNlc3Npb25LZXkpIHtcbiAgICAgIGNvbnN0IHJlZiA9IHRoaXMuX3Nlc3Npb25DYWNoZS5nZXQoc2Vzc2lvbktleSlcbiAgICAgIHJldHVybiByZWYgPyByZWYuZGVyZWYoKSA6IG51bGxcbiAgICB9XG5cbiAgICBzZXQgKHNlc3Npb25LZXksIHNlc3Npb24pIHtcbiAgICAgIGlmICh0aGlzLl9tYXhDYWNoZWRTZXNzaW9ucyA9PT0gMCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgdGhpcy5fc2Vzc2lvbkNhY2hlLnNldChzZXNzaW9uS2V5LCBuZXcgV2Vha1JlZihzZXNzaW9uKSlcbiAgICAgIHRoaXMuX3Nlc3Npb25SZWdpc3RyeS5yZWdpc3RlcihzZXNzaW9uLCBzZXNzaW9uS2V5KVxuICAgIH1cbiAgfVxufSBlbHNlIHtcbiAgU2Vzc2lvbkNhY2hlID0gY2xhc3MgU2ltcGxlU2Vzc2lvbkNhY2hlIHtcbiAgICBjb25zdHJ1Y3RvciAobWF4Q2FjaGVkU2Vzc2lvbnMpIHtcbiAgICAgIHRoaXMuX21heENhY2hlZFNlc3Npb25zID0gbWF4Q2FjaGVkU2Vzc2lvbnNcbiAgICAgIHRoaXMuX3Nlc3Npb25DYWNoZSA9IG5ldyBNYXAoKVxuICAgIH1cblxuICAgIGdldCAoc2Vzc2lvbktleSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3Nlc3Npb25DYWNoZS5nZXQoc2Vzc2lvbktleSlcbiAgICB9XG5cbiAgICBzZXQgKHNlc3Npb25LZXksIHNlc3Npb24pIHtcbiAgICAgIGlmICh0aGlzLl9tYXhDYWNoZWRTZXNzaW9ucyA9PT0gMCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX3Nlc3Npb25DYWNoZS5zaXplID49IHRoaXMuX21heENhY2hlZFNlc3Npb25zKSB7XG4gICAgICAgIC8vIHJlbW92ZSB0aGUgb2xkZXN0IHNlc3Npb25cbiAgICAgICAgY29uc3QgeyB2YWx1ZTogb2xkZXN0S2V5IH0gPSB0aGlzLl9zZXNzaW9uQ2FjaGUua2V5cygpLm5leHQoKVxuICAgICAgICB0aGlzLl9zZXNzaW9uQ2FjaGUuZGVsZXRlKG9sZGVzdEtleSlcbiAgICAgIH1cblxuICAgICAgdGhpcy5fc2Vzc2lvbkNhY2hlLnNldChzZXNzaW9uS2V5LCBzZXNzaW9uKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBidWlsZENvbm5lY3RvciAoeyBhbGxvd0gyLCBtYXhDYWNoZWRTZXNzaW9ucywgc29ja2V0UGF0aCwgdGltZW91dCwgLi4ub3B0cyB9KSB7XG4gIGlmIChtYXhDYWNoZWRTZXNzaW9ucyAhPSBudWxsICYmICghTnVtYmVyLmlzSW50ZWdlcihtYXhDYWNoZWRTZXNzaW9ucykgfHwgbWF4Q2FjaGVkU2Vzc2lvbnMgPCAwKSkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignbWF4Q2FjaGVkU2Vzc2lvbnMgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgb3IgemVybycpXG4gIH1cblxuICBjb25zdCBvcHRpb25zID0geyBwYXRoOiBzb2NrZXRQYXRoLCAuLi5vcHRzIH1cbiAgY29uc3Qgc2Vzc2lvbkNhY2hlID0gbmV3IFNlc3Npb25DYWNoZShtYXhDYWNoZWRTZXNzaW9ucyA9PSBudWxsID8gMTAwIDogbWF4Q2FjaGVkU2Vzc2lvbnMpXG4gIHRpbWVvdXQgPSB0aW1lb3V0ID09IG51bGwgPyAxMGUzIDogdGltZW91dFxuICBhbGxvd0gyID0gYWxsb3dIMiAhPSBudWxsID8gYWxsb3dIMiA6IGZhbHNlXG4gIHJldHVybiBmdW5jdGlvbiBjb25uZWN0ICh7IGhvc3RuYW1lLCBob3N0LCBwcm90b2NvbCwgcG9ydCwgc2VydmVybmFtZSwgbG9jYWxBZGRyZXNzLCBodHRwU29ja2V0IH0sIGNhbGxiYWNrKSB7XG4gICAgbGV0IHNvY2tldFxuICAgIGlmIChwcm90b2NvbCA9PT0gJ2h0dHBzOicpIHtcbiAgICAgIGlmICghdGxzKSB7XG4gICAgICAgIHRscyA9IHJlcXVpcmUoJ3RscycpXG4gICAgICB9XG4gICAgICBzZXJ2ZXJuYW1lID0gc2VydmVybmFtZSB8fCBvcHRpb25zLnNlcnZlcm5hbWUgfHwgdXRpbC5nZXRTZXJ2ZXJOYW1lKGhvc3QpIHx8IG51bGxcblxuICAgICAgY29uc3Qgc2Vzc2lvbktleSA9IHNlcnZlcm5hbWUgfHwgaG9zdG5hbWVcbiAgICAgIGNvbnN0IHNlc3Npb24gPSBzZXNzaW9uQ2FjaGUuZ2V0KHNlc3Npb25LZXkpIHx8IG51bGxcblxuICAgICAgYXNzZXJ0KHNlc3Npb25LZXkpXG5cbiAgICAgIHNvY2tldCA9IHRscy5jb25uZWN0KHtcbiAgICAgICAgaGlnaFdhdGVyTWFyazogMTYzODQsIC8vIFRMUyBpbiBub2RlIGNhbid0IGhhdmUgYmlnZ2VyIEhXTSBhbnl3YXkuLi5cbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgc2VydmVybmFtZSxcbiAgICAgICAgc2Vzc2lvbixcbiAgICAgICAgbG9jYWxBZGRyZXNzLFxuICAgICAgICAvLyBUT0RPKEhUVFAvMik6IEFkZCBzdXBwb3J0IGZvciBoMmNcbiAgICAgICAgQUxQTlByb3RvY29sczogYWxsb3dIMiA/IFsnaHR0cC8xLjEnLCAnaDInXSA6IFsnaHR0cC8xLjEnXSxcbiAgICAgICAgc29ja2V0OiBodHRwU29ja2V0LCAvLyB1cGdyYWRlIHNvY2tldCBjb25uZWN0aW9uXG4gICAgICAgIHBvcnQ6IHBvcnQgfHwgNDQzLFxuICAgICAgICBob3N0OiBob3N0bmFtZVxuICAgICAgfSlcblxuICAgICAgc29ja2V0XG4gICAgICAgIC5vbignc2Vzc2lvbicsIGZ1bmN0aW9uIChzZXNzaW9uKSB7XG4gICAgICAgICAgLy8gVE9ETyAoZml4KTogQ2FuIGEgc2Vzc2lvbiBiZWNvbWUgaW52YWxpZCBvbmNlIGVzdGFibGlzaGVkPyBEb24ndCB0aGluayBzbz9cbiAgICAgICAgICBzZXNzaW9uQ2FjaGUuc2V0KHNlc3Npb25LZXksIHNlc3Npb24pXG4gICAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydCghaHR0cFNvY2tldCwgJ2h0dHBTb2NrZXQgY2FuIG9ubHkgYmUgc2VudCBvbiBUTFMgdXBkYXRlJylcbiAgICAgIHNvY2tldCA9IG5ldC5jb25uZWN0KHtcbiAgICAgICAgaGlnaFdhdGVyTWFyazogNjQgKiAxMDI0LCAvLyBTYW1lIGFzIG5vZGVqcyBmcyBzdHJlYW1zLlxuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICBsb2NhbEFkZHJlc3MsXG4gICAgICAgIHBvcnQ6IHBvcnQgfHwgODAsXG4gICAgICAgIGhvc3Q6IGhvc3RuYW1lXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIFNldCBUQ1Aga2VlcCBhbGl2ZSBvcHRpb25zIG9uIHRoZSBzb2NrZXQgaGVyZSBpbnN0ZWFkIG9mIGluIGNvbm5lY3QoKSBmb3IgdGhlIGNhc2Ugb2YgYXNzaWduaW5nIHRoZSBzb2NrZXRcbiAgICBpZiAob3B0aW9ucy5rZWVwQWxpdmUgPT0gbnVsbCB8fCBvcHRpb25zLmtlZXBBbGl2ZSkge1xuICAgICAgY29uc3Qga2VlcEFsaXZlSW5pdGlhbERlbGF5ID0gb3B0aW9ucy5rZWVwQWxpdmVJbml0aWFsRGVsYXkgPT09IHVuZGVmaW5lZCA/IDYwZTMgOiBvcHRpb25zLmtlZXBBbGl2ZUluaXRpYWxEZWxheVxuICAgICAgc29ja2V0LnNldEtlZXBBbGl2ZSh0cnVlLCBrZWVwQWxpdmVJbml0aWFsRGVsYXkpXG4gICAgfVxuXG4gICAgY29uc3QgY2FuY2VsVGltZW91dCA9IHNldHVwVGltZW91dCgoKSA9PiBvbkNvbm5lY3RUaW1lb3V0KHNvY2tldCksIHRpbWVvdXQpXG5cbiAgICBzb2NrZXRcbiAgICAgIC5zZXROb0RlbGF5KHRydWUpXG4gICAgICAub25jZShwcm90b2NvbCA9PT0gJ2h0dHBzOicgPyAnc2VjdXJlQ29ubmVjdCcgOiAnY29ubmVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY2FuY2VsVGltZW91dCgpXG5cbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgY29uc3QgY2IgPSBjYWxsYmFja1xuICAgICAgICAgIGNhbGxiYWNrID0gbnVsbFxuICAgICAgICAgIGNiKG51bGwsIHRoaXMpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAub24oJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBjYW5jZWxUaW1lb3V0KClcblxuICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICBjb25zdCBjYiA9IGNhbGxiYWNrXG4gICAgICAgICAgY2FsbGJhY2sgPSBudWxsXG4gICAgICAgICAgY2IoZXJyKVxuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgcmV0dXJuIHNvY2tldFxuICB9XG59XG5cbmZ1bmN0aW9uIHNldHVwVGltZW91dCAob25Db25uZWN0VGltZW91dCwgdGltZW91dCkge1xuICBpZiAoIXRpbWVvdXQpIHtcbiAgICByZXR1cm4gKCkgPT4ge31cbiAgfVxuXG4gIGxldCBzMSA9IG51bGxcbiAgbGV0IHMyID0gbnVsbFxuICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyBzZXRJbW1lZGlhdGUgaXMgYWRkZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2UgcHJpb3RvcmlzZSBzb2NrZXQgZXJyb3IgZXZlbnRzIG92ZXIgdGltZW91dHNcbiAgICBzMSA9IHNldEltbWVkaWF0ZSgoKSA9PiB7XG4gICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgICAgICAvLyBXaW5kb3dzIG5lZWRzIGFuIGV4dHJhIHNldEltbWVkaWF0ZSBwcm9iYWJseSBkdWUgdG8gaW1wbGVtZW50YXRpb24gZGlmZmVyZW5jZXMgaW4gdGhlIHNvY2tldCBsb2dpY1xuICAgICAgICBzMiA9IHNldEltbWVkaWF0ZSgoKSA9PiBvbkNvbm5lY3RUaW1lb3V0KCkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvbkNvbm5lY3RUaW1lb3V0KClcbiAgICAgIH1cbiAgICB9KVxuICB9LCB0aW1lb3V0KVxuICByZXR1cm4gKCkgPT4ge1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpXG4gICAgY2xlYXJJbW1lZGlhdGUoczEpXG4gICAgY2xlYXJJbW1lZGlhdGUoczIpXG4gIH1cbn1cblxuZnVuY3Rpb24gb25Db25uZWN0VGltZW91dCAoc29ja2V0KSB7XG4gIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBDb25uZWN0VGltZW91dEVycm9yKCkpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRDb25uZWN0b3JcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmVudW1Ub01hcCA9IHZvaWQgMDtcbmZ1bmN0aW9uIGVudW1Ub01hcChvYmopIHtcbiAgICBjb25zdCByZXMgPSB7fTtcbiAgICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IG9ialtrZXldO1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgcmVzW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXM7XG59XG5leHBvcnRzLmVudW1Ub01hcCA9IGVudW1Ub01hcDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlNQRUNJQUxfSEVBREVSUyA9IGV4cG9ydHMuSEVBREVSX1NUQVRFID0gZXhwb3J0cy5NSU5PUiA9IGV4cG9ydHMuTUFKT1IgPSBleHBvcnRzLkNPTk5FQ1RJT05fVE9LRU5fQ0hBUlMgPSBleHBvcnRzLkhFQURFUl9DSEFSUyA9IGV4cG9ydHMuVE9LRU4gPSBleHBvcnRzLlNUUklDVF9UT0tFTiA9IGV4cG9ydHMuSEVYID0gZXhwb3J0cy5VUkxfQ0hBUiA9IGV4cG9ydHMuU1RSSUNUX1VSTF9DSEFSID0gZXhwb3J0cy5VU0VSSU5GT19DSEFSUyA9IGV4cG9ydHMuTUFSSyA9IGV4cG9ydHMuQUxQSEFOVU0gPSBleHBvcnRzLk5VTSA9IGV4cG9ydHMuSEVYX01BUCA9IGV4cG9ydHMuTlVNX01BUCA9IGV4cG9ydHMuQUxQSEEgPSBleHBvcnRzLkZJTklTSCA9IGV4cG9ydHMuSF9NRVRIT0RfTUFQID0gZXhwb3J0cy5NRVRIT0RfTUFQID0gZXhwb3J0cy5NRVRIT0RTX1JUU1AgPSBleHBvcnRzLk1FVEhPRFNfSUNFID0gZXhwb3J0cy5NRVRIT0RTX0hUVFAgPSBleHBvcnRzLk1FVEhPRFMgPSBleHBvcnRzLkxFTklFTlRfRkxBR1MgPSBleHBvcnRzLkZMQUdTID0gZXhwb3J0cy5UWVBFID0gZXhwb3J0cy5FUlJPUiA9IHZvaWQgMDtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi91dGlsc1wiKTtcbi8vIEMgaGVhZGVyc1xudmFyIEVSUk9SO1xuKGZ1bmN0aW9uIChFUlJPUikge1xuICAgIEVSUk9SW0VSUk9SW1wiT0tcIl0gPSAwXSA9IFwiT0tcIjtcbiAgICBFUlJPUltFUlJPUltcIklOVEVSTkFMXCJdID0gMV0gPSBcIklOVEVSTkFMXCI7XG4gICAgRVJST1JbRVJST1JbXCJTVFJJQ1RcIl0gPSAyXSA9IFwiU1RSSUNUXCI7XG4gICAgRVJST1JbRVJST1JbXCJMRl9FWFBFQ1RFRFwiXSA9IDNdID0gXCJMRl9FWFBFQ1RFRFwiO1xuICAgIEVSUk9SW0VSUk9SW1wiVU5FWFBFQ1RFRF9DT05URU5UX0xFTkdUSFwiXSA9IDRdID0gXCJVTkVYUEVDVEVEX0NPTlRFTlRfTEVOR1RIXCI7XG4gICAgRVJST1JbRVJST1JbXCJDTE9TRURfQ09OTkVDVElPTlwiXSA9IDVdID0gXCJDTE9TRURfQ09OTkVDVElPTlwiO1xuICAgIEVSUk9SW0VSUk9SW1wiSU5WQUxJRF9NRVRIT0RcIl0gPSA2XSA9IFwiSU5WQUxJRF9NRVRIT0RcIjtcbiAgICBFUlJPUltFUlJPUltcIklOVkFMSURfVVJMXCJdID0gN10gPSBcIklOVkFMSURfVVJMXCI7XG4gICAgRVJST1JbRVJST1JbXCJJTlZBTElEX0NPTlNUQU5UXCJdID0gOF0gPSBcIklOVkFMSURfQ09OU1RBTlRcIjtcbiAgICBFUlJPUltFUlJPUltcIklOVkFMSURfVkVSU0lPTlwiXSA9IDldID0gXCJJTlZBTElEX1ZFUlNJT05cIjtcbiAgICBFUlJPUltFUlJPUltcIklOVkFMSURfSEVBREVSX1RPS0VOXCJdID0gMTBdID0gXCJJTlZBTElEX0hFQURFUl9UT0tFTlwiO1xuICAgIEVSUk9SW0VSUk9SW1wiSU5WQUxJRF9DT05URU5UX0xFTkdUSFwiXSA9IDExXSA9IFwiSU5WQUxJRF9DT05URU5UX0xFTkdUSFwiO1xuICAgIEVSUk9SW0VSUk9SW1wiSU5WQUxJRF9DSFVOS19TSVpFXCJdID0gMTJdID0gXCJJTlZBTElEX0NIVU5LX1NJWkVcIjtcbiAgICBFUlJPUltFUlJPUltcIklOVkFMSURfU1RBVFVTXCJdID0gMTNdID0gXCJJTlZBTElEX1NUQVRVU1wiO1xuICAgIEVSUk9SW0VSUk9SW1wiSU5WQUxJRF9FT0ZfU1RBVEVcIl0gPSAxNF0gPSBcIklOVkFMSURfRU9GX1NUQVRFXCI7XG4gICAgRVJST1JbRVJST1JbXCJJTlZBTElEX1RSQU5TRkVSX0VOQ09ESU5HXCJdID0gMTVdID0gXCJJTlZBTElEX1RSQU5TRkVSX0VOQ09ESU5HXCI7XG4gICAgRVJST1JbRVJST1JbXCJDQl9NRVNTQUdFX0JFR0lOXCJdID0gMTZdID0gXCJDQl9NRVNTQUdFX0JFR0lOXCI7XG4gICAgRVJST1JbRVJST1JbXCJDQl9IRUFERVJTX0NPTVBMRVRFXCJdID0gMTddID0gXCJDQl9IRUFERVJTX0NPTVBMRVRFXCI7XG4gICAgRVJST1JbRVJST1JbXCJDQl9NRVNTQUdFX0NPTVBMRVRFXCJdID0gMThdID0gXCJDQl9NRVNTQUdFX0NPTVBMRVRFXCI7XG4gICAgRVJST1JbRVJST1JbXCJDQl9DSFVOS19IRUFERVJcIl0gPSAxOV0gPSBcIkNCX0NIVU5LX0hFQURFUlwiO1xuICAgIEVSUk9SW0VSUk9SW1wiQ0JfQ0hVTktfQ09NUExFVEVcIl0gPSAyMF0gPSBcIkNCX0NIVU5LX0NPTVBMRVRFXCI7XG4gICAgRVJST1JbRVJST1JbXCJQQVVTRURcIl0gPSAyMV0gPSBcIlBBVVNFRFwiO1xuICAgIEVSUk9SW0VSUk9SW1wiUEFVU0VEX1VQR1JBREVcIl0gPSAyMl0gPSBcIlBBVVNFRF9VUEdSQURFXCI7XG4gICAgRVJST1JbRVJST1JbXCJQQVVTRURfSDJfVVBHUkFERVwiXSA9IDIzXSA9IFwiUEFVU0VEX0gyX1VQR1JBREVcIjtcbiAgICBFUlJPUltFUlJPUltcIlVTRVJcIl0gPSAyNF0gPSBcIlVTRVJcIjtcbn0pKEVSUk9SID0gZXhwb3J0cy5FUlJPUiB8fCAoZXhwb3J0cy5FUlJPUiA9IHt9KSk7XG52YXIgVFlQRTtcbihmdW5jdGlvbiAoVFlQRSkge1xuICAgIFRZUEVbVFlQRVtcIkJPVEhcIl0gPSAwXSA9IFwiQk9USFwiO1xuICAgIFRZUEVbVFlQRVtcIlJFUVVFU1RcIl0gPSAxXSA9IFwiUkVRVUVTVFwiO1xuICAgIFRZUEVbVFlQRVtcIlJFU1BPTlNFXCJdID0gMl0gPSBcIlJFU1BPTlNFXCI7XG59KShUWVBFID0gZXhwb3J0cy5UWVBFIHx8IChleHBvcnRzLlRZUEUgPSB7fSkpO1xudmFyIEZMQUdTO1xuKGZ1bmN0aW9uIChGTEFHUykge1xuICAgIEZMQUdTW0ZMQUdTW1wiQ09OTkVDVElPTl9LRUVQX0FMSVZFXCJdID0gMV0gPSBcIkNPTk5FQ1RJT05fS0VFUF9BTElWRVwiO1xuICAgIEZMQUdTW0ZMQUdTW1wiQ09OTkVDVElPTl9DTE9TRVwiXSA9IDJdID0gXCJDT05ORUNUSU9OX0NMT1NFXCI7XG4gICAgRkxBR1NbRkxBR1NbXCJDT05ORUNUSU9OX1VQR1JBREVcIl0gPSA0XSA9IFwiQ09OTkVDVElPTl9VUEdSQURFXCI7XG4gICAgRkxBR1NbRkxBR1NbXCJDSFVOS0VEXCJdID0gOF0gPSBcIkNIVU5LRURcIjtcbiAgICBGTEFHU1tGTEFHU1tcIlVQR1JBREVcIl0gPSAxNl0gPSBcIlVQR1JBREVcIjtcbiAgICBGTEFHU1tGTEFHU1tcIkNPTlRFTlRfTEVOR1RIXCJdID0gMzJdID0gXCJDT05URU5UX0xFTkdUSFwiO1xuICAgIEZMQUdTW0ZMQUdTW1wiU0tJUEJPRFlcIl0gPSA2NF0gPSBcIlNLSVBCT0RZXCI7XG4gICAgRkxBR1NbRkxBR1NbXCJUUkFJTElOR1wiXSA9IDEyOF0gPSBcIlRSQUlMSU5HXCI7XG4gICAgLy8gMSA8PCA4IGlzIHVudXNlZFxuICAgIEZMQUdTW0ZMQUdTW1wiVFJBTlNGRVJfRU5DT0RJTkdcIl0gPSA1MTJdID0gXCJUUkFOU0ZFUl9FTkNPRElOR1wiO1xufSkoRkxBR1MgPSBleHBvcnRzLkZMQUdTIHx8IChleHBvcnRzLkZMQUdTID0ge30pKTtcbnZhciBMRU5JRU5UX0ZMQUdTO1xuKGZ1bmN0aW9uIChMRU5JRU5UX0ZMQUdTKSB7XG4gICAgTEVOSUVOVF9GTEFHU1tMRU5JRU5UX0ZMQUdTW1wiSEVBREVSU1wiXSA9IDFdID0gXCJIRUFERVJTXCI7XG4gICAgTEVOSUVOVF9GTEFHU1tMRU5JRU5UX0ZMQUdTW1wiQ0hVTktFRF9MRU5HVEhcIl0gPSAyXSA9IFwiQ0hVTktFRF9MRU5HVEhcIjtcbiAgICBMRU5JRU5UX0ZMQUdTW0xFTklFTlRfRkxBR1NbXCJLRUVQX0FMSVZFXCJdID0gNF0gPSBcIktFRVBfQUxJVkVcIjtcbn0pKExFTklFTlRfRkxBR1MgPSBleHBvcnRzLkxFTklFTlRfRkxBR1MgfHwgKGV4cG9ydHMuTEVOSUVOVF9GTEFHUyA9IHt9KSk7XG52YXIgTUVUSE9EUztcbihmdW5jdGlvbiAoTUVUSE9EUykge1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIkRFTEVURVwiXSA9IDBdID0gXCJERUxFVEVcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJHRVRcIl0gPSAxXSA9IFwiR0VUXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiSEVBRFwiXSA9IDJdID0gXCJIRUFEXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiUE9TVFwiXSA9IDNdID0gXCJQT1NUXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiUFVUXCJdID0gNF0gPSBcIlBVVFwiO1xuICAgIC8qIHBhdGhvbG9naWNhbCAqL1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIkNPTk5FQ1RcIl0gPSA1XSA9IFwiQ09OTkVDVFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIk9QVElPTlNcIl0gPSA2XSA9IFwiT1BUSU9OU1wiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlRSQUNFXCJdID0gN10gPSBcIlRSQUNFXCI7XG4gICAgLyogV2ViREFWICovXG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiQ09QWVwiXSA9IDhdID0gXCJDT1BZXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiTE9DS1wiXSA9IDldID0gXCJMT0NLXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiTUtDT0xcIl0gPSAxMF0gPSBcIk1LQ09MXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiTU9WRVwiXSA9IDExXSA9IFwiTU9WRVwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlBST1BGSU5EXCJdID0gMTJdID0gXCJQUk9QRklORFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlBST1BQQVRDSFwiXSA9IDEzXSA9IFwiUFJPUFBBVENIXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiU0VBUkNIXCJdID0gMTRdID0gXCJTRUFSQ0hcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJVTkxPQ0tcIl0gPSAxNV0gPSBcIlVOTE9DS1wiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIkJJTkRcIl0gPSAxNl0gPSBcIkJJTkRcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJSRUJJTkRcIl0gPSAxN10gPSBcIlJFQklORFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlVOQklORFwiXSA9IDE4XSA9IFwiVU5CSU5EXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiQUNMXCJdID0gMTldID0gXCJBQ0xcIjtcbiAgICAvKiBzdWJ2ZXJzaW9uICovXG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiUkVQT1JUXCJdID0gMjBdID0gXCJSRVBPUlRcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJNS0FDVElWSVRZXCJdID0gMjFdID0gXCJNS0FDVElWSVRZXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiQ0hFQ0tPVVRcIl0gPSAyMl0gPSBcIkNIRUNLT1VUXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiTUVSR0VcIl0gPSAyM10gPSBcIk1FUkdFXCI7XG4gICAgLyogdXBucCAqL1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIk0tU0VBUkNIXCJdID0gMjRdID0gXCJNLVNFQVJDSFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIk5PVElGWVwiXSA9IDI1XSA9IFwiTk9USUZZXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiU1VCU0NSSUJFXCJdID0gMjZdID0gXCJTVUJTQ1JJQkVcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJVTlNVQlNDUklCRVwiXSA9IDI3XSA9IFwiVU5TVUJTQ1JJQkVcIjtcbiAgICAvKiBSRkMtNTc4OSAqL1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlBBVENIXCJdID0gMjhdID0gXCJQQVRDSFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlBVUkdFXCJdID0gMjldID0gXCJQVVJHRVwiO1xuICAgIC8qIENhbERBViAqL1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIk1LQ0FMRU5EQVJcIl0gPSAzMF0gPSBcIk1LQ0FMRU5EQVJcIjtcbiAgICAvKiBSRkMtMjA2OCwgc2VjdGlvbiAxOS42LjEuMiAqL1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIkxJTktcIl0gPSAzMV0gPSBcIkxJTktcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJVTkxJTktcIl0gPSAzMl0gPSBcIlVOTElOS1wiO1xuICAgIC8qIGljZWNhc3QgKi9cbiAgICBNRVRIT0RTW01FVEhPRFNbXCJTT1VSQ0VcIl0gPSAzM10gPSBcIlNPVVJDRVwiO1xuICAgIC8qIFJGQy03NTQwLCBzZWN0aW9uIDExLjYgKi9cbiAgICBNRVRIT0RTW01FVEhPRFNbXCJQUklcIl0gPSAzNF0gPSBcIlBSSVwiO1xuICAgIC8qIFJGQy0yMzI2IFJUU1AgKi9cbiAgICBNRVRIT0RTW01FVEhPRFNbXCJERVNDUklCRVwiXSA9IDM1XSA9IFwiREVTQ1JJQkVcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJBTk5PVU5DRVwiXSA9IDM2XSA9IFwiQU5OT1VOQ0VcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJTRVRVUFwiXSA9IDM3XSA9IFwiU0VUVVBcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJQTEFZXCJdID0gMzhdID0gXCJQTEFZXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiUEFVU0VcIl0gPSAzOV0gPSBcIlBBVVNFXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiVEVBUkRPV05cIl0gPSA0MF0gPSBcIlRFQVJET1dOXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiR0VUX1BBUkFNRVRFUlwiXSA9IDQxXSA9IFwiR0VUX1BBUkFNRVRFUlwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlNFVF9QQVJBTUVURVJcIl0gPSA0Ml0gPSBcIlNFVF9QQVJBTUVURVJcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJSRURJUkVDVFwiXSA9IDQzXSA9IFwiUkVESVJFQ1RcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJSRUNPUkRcIl0gPSA0NF0gPSBcIlJFQ09SRFwiO1xuICAgIC8qIFJBT1AgKi9cbiAgICBNRVRIT0RTW01FVEhPRFNbXCJGTFVTSFwiXSA9IDQ1XSA9IFwiRkxVU0hcIjtcbn0pKE1FVEhPRFMgPSBleHBvcnRzLk1FVEhPRFMgfHwgKGV4cG9ydHMuTUVUSE9EUyA9IHt9KSk7XG5leHBvcnRzLk1FVEhPRFNfSFRUUCA9IFtcbiAgICBNRVRIT0RTLkRFTEVURSxcbiAgICBNRVRIT0RTLkdFVCxcbiAgICBNRVRIT0RTLkhFQUQsXG4gICAgTUVUSE9EUy5QT1NULFxuICAgIE1FVEhPRFMuUFVULFxuICAgIE1FVEhPRFMuQ09OTkVDVCxcbiAgICBNRVRIT0RTLk9QVElPTlMsXG4gICAgTUVUSE9EUy5UUkFDRSxcbiAgICBNRVRIT0RTLkNPUFksXG4gICAgTUVUSE9EUy5MT0NLLFxuICAgIE1FVEhPRFMuTUtDT0wsXG4gICAgTUVUSE9EUy5NT1ZFLFxuICAgIE1FVEhPRFMuUFJPUEZJTkQsXG4gICAgTUVUSE9EUy5QUk9QUEFUQ0gsXG4gICAgTUVUSE9EUy5TRUFSQ0gsXG4gICAgTUVUSE9EUy5VTkxPQ0ssXG4gICAgTUVUSE9EUy5CSU5ELFxuICAgIE1FVEhPRFMuUkVCSU5ELFxuICAgIE1FVEhPRFMuVU5CSU5ELFxuICAgIE1FVEhPRFMuQUNMLFxuICAgIE1FVEhPRFMuUkVQT1JULFxuICAgIE1FVEhPRFMuTUtBQ1RJVklUWSxcbiAgICBNRVRIT0RTLkNIRUNLT1VULFxuICAgIE1FVEhPRFMuTUVSR0UsXG4gICAgTUVUSE9EU1snTS1TRUFSQ0gnXSxcbiAgICBNRVRIT0RTLk5PVElGWSxcbiAgICBNRVRIT0RTLlNVQlNDUklCRSxcbiAgICBNRVRIT0RTLlVOU1VCU0NSSUJFLFxuICAgIE1FVEhPRFMuUEFUQ0gsXG4gICAgTUVUSE9EUy5QVVJHRSxcbiAgICBNRVRIT0RTLk1LQ0FMRU5EQVIsXG4gICAgTUVUSE9EUy5MSU5LLFxuICAgIE1FVEhPRFMuVU5MSU5LLFxuICAgIE1FVEhPRFMuUFJJLFxuICAgIC8vIFRPRE8oaW5kdXRueSk6IHNob3VsZCB3ZSBhbGxvdyBpdCB3aXRoIEhUVFA/XG4gICAgTUVUSE9EUy5TT1VSQ0UsXG5dO1xuZXhwb3J0cy5NRVRIT0RTX0lDRSA9IFtcbiAgICBNRVRIT0RTLlNPVVJDRSxcbl07XG5leHBvcnRzLk1FVEhPRFNfUlRTUCA9IFtcbiAgICBNRVRIT0RTLk9QVElPTlMsXG4gICAgTUVUSE9EUy5ERVNDUklCRSxcbiAgICBNRVRIT0RTLkFOTk9VTkNFLFxuICAgIE1FVEhPRFMuU0VUVVAsXG4gICAgTUVUSE9EUy5QTEFZLFxuICAgIE1FVEhPRFMuUEFVU0UsXG4gICAgTUVUSE9EUy5URUFSRE9XTixcbiAgICBNRVRIT0RTLkdFVF9QQVJBTUVURVIsXG4gICAgTUVUSE9EUy5TRVRfUEFSQU1FVEVSLFxuICAgIE1FVEhPRFMuUkVESVJFQ1QsXG4gICAgTUVUSE9EUy5SRUNPUkQsXG4gICAgTUVUSE9EUy5GTFVTSCxcbiAgICAvLyBGb3IgQWlyUGxheVxuICAgIE1FVEhPRFMuR0VULFxuICAgIE1FVEhPRFMuUE9TVCxcbl07XG5leHBvcnRzLk1FVEhPRF9NQVAgPSB1dGlsc18xLmVudW1Ub01hcChNRVRIT0RTKTtcbmV4cG9ydHMuSF9NRVRIT0RfTUFQID0ge307XG5PYmplY3Qua2V5cyhleHBvcnRzLk1FVEhPRF9NQVApLmZvckVhY2goKGtleSkgPT4ge1xuICAgIGlmICgvXkgvLnRlc3Qoa2V5KSkge1xuICAgICAgICBleHBvcnRzLkhfTUVUSE9EX01BUFtrZXldID0gZXhwb3J0cy5NRVRIT0RfTUFQW2tleV07XG4gICAgfVxufSk7XG52YXIgRklOSVNIO1xuKGZ1bmN0aW9uIChGSU5JU0gpIHtcbiAgICBGSU5JU0hbRklOSVNIW1wiU0FGRVwiXSA9IDBdID0gXCJTQUZFXCI7XG4gICAgRklOSVNIW0ZJTklTSFtcIlNBRkVfV0lUSF9DQlwiXSA9IDFdID0gXCJTQUZFX1dJVEhfQ0JcIjtcbiAgICBGSU5JU0hbRklOSVNIW1wiVU5TQUZFXCJdID0gMl0gPSBcIlVOU0FGRVwiO1xufSkoRklOSVNIID0gZXhwb3J0cy5GSU5JU0ggfHwgKGV4cG9ydHMuRklOSVNIID0ge30pKTtcbmV4cG9ydHMuQUxQSEEgPSBbXTtcbmZvciAobGV0IGkgPSAnQScuY2hhckNvZGVBdCgwKTsgaSA8PSAnWicuY2hhckNvZGVBdCgwKTsgaSsrKSB7XG4gICAgLy8gVXBwZXIgY2FzZVxuICAgIGV4cG9ydHMuQUxQSEEucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGkpKTtcbiAgICAvLyBMb3dlciBjYXNlXG4gICAgZXhwb3J0cy5BTFBIQS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoaSArIDB4MjApKTtcbn1cbmV4cG9ydHMuTlVNX01BUCA9IHtcbiAgICAwOiAwLCAxOiAxLCAyOiAyLCAzOiAzLCA0OiA0LFxuICAgIDU6IDUsIDY6IDYsIDc6IDcsIDg6IDgsIDk6IDksXG59O1xuZXhwb3J0cy5IRVhfTUFQID0ge1xuICAgIDA6IDAsIDE6IDEsIDI6IDIsIDM6IDMsIDQ6IDQsXG4gICAgNTogNSwgNjogNiwgNzogNywgODogOCwgOTogOSxcbiAgICBBOiAwWEEsIEI6IDBYQiwgQzogMFhDLCBEOiAwWEQsIEU6IDBYRSwgRjogMFhGLFxuICAgIGE6IDB4YSwgYjogMHhiLCBjOiAweGMsIGQ6IDB4ZCwgZTogMHhlLCBmOiAweGYsXG59O1xuZXhwb3J0cy5OVU0gPSBbXG4gICAgJzAnLCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsICc4JywgJzknLFxuXTtcbmV4cG9ydHMuQUxQSEFOVU0gPSBleHBvcnRzLkFMUEhBLmNvbmNhdChleHBvcnRzLk5VTSk7XG5leHBvcnRzLk1BUksgPSBbJy0nLCAnXycsICcuJywgJyEnLCAnficsICcqJywgJ1xcJycsICcoJywgJyknXTtcbmV4cG9ydHMuVVNFUklORk9fQ0hBUlMgPSBleHBvcnRzLkFMUEhBTlVNXG4gICAgLmNvbmNhdChleHBvcnRzLk1BUkspXG4gICAgLmNvbmNhdChbJyUnLCAnOycsICc6JywgJyYnLCAnPScsICcrJywgJyQnLCAnLCddKTtcbi8vIFRPRE8oaW5kdXRueSk6IHVzZSBSRkNcbmV4cG9ydHMuU1RSSUNUX1VSTF9DSEFSID0gW1xuICAgICchJywgJ1wiJywgJyQnLCAnJScsICcmJywgJ1xcJycsXG4gICAgJygnLCAnKScsICcqJywgJysnLCAnLCcsICctJywgJy4nLCAnLycsXG4gICAgJzonLCAnOycsICc8JywgJz0nLCAnPicsXG4gICAgJ0AnLCAnWycsICdcXFxcJywgJ10nLCAnXicsICdfJyxcbiAgICAnYCcsXG4gICAgJ3snLCAnfCcsICd9JywgJ34nLFxuXS5jb25jYXQoZXhwb3J0cy5BTFBIQU5VTSk7XG5leHBvcnRzLlVSTF9DSEFSID0gZXhwb3J0cy5TVFJJQ1RfVVJMX0NIQVJcbiAgICAuY29uY2F0KFsnXFx0JywgJ1xcZiddKTtcbi8vIEFsbCBjaGFyYWN0ZXJzIHdpdGggMHg4MCBiaXQgc2V0IHRvIDFcbmZvciAobGV0IGkgPSAweDgwOyBpIDw9IDB4ZmY7IGkrKykge1xuICAgIGV4cG9ydHMuVVJMX0NIQVIucHVzaChpKTtcbn1cbmV4cG9ydHMuSEVYID0gZXhwb3J0cy5OVU0uY29uY2F0KFsnYScsICdiJywgJ2MnLCAnZCcsICdlJywgJ2YnLCAnQScsICdCJywgJ0MnLCAnRCcsICdFJywgJ0YnXSk7XG4vKiBUb2tlbnMgYXMgZGVmaW5lZCBieSByZmMgMjYxNi4gQWxzbyBsb3dlcmNhc2VzIHRoZW0uXG4gKiAgICAgICAgdG9rZW4gICAgICAgPSAxKjxhbnkgQ0hBUiBleGNlcHQgQ1RMcyBvciBzZXBhcmF0b3JzPlxuICogICAgIHNlcGFyYXRvcnMgICAgID0gXCIoXCIgfCBcIilcIiB8IFwiPFwiIHwgXCI+XCIgfCBcIkBcIlxuICogICAgICAgICAgICAgICAgICAgIHwgXCIsXCIgfCBcIjtcIiB8IFwiOlwiIHwgXCJcXFwiIHwgPFwiPlxuICogICAgICAgICAgICAgICAgICAgIHwgXCIvXCIgfCBcIltcIiB8IFwiXVwiIHwgXCI/XCIgfCBcIj1cIlxuICogICAgICAgICAgICAgICAgICAgIHwgXCJ7XCIgfCBcIn1cIiB8IFNQIHwgSFRcbiAqL1xuZXhwb3J0cy5TVFJJQ1RfVE9LRU4gPSBbXG4gICAgJyEnLCAnIycsICckJywgJyUnLCAnJicsICdcXCcnLFxuICAgICcqJywgJysnLCAnLScsICcuJyxcbiAgICAnXicsICdfJywgJ2AnLFxuICAgICd8JywgJ34nLFxuXS5jb25jYXQoZXhwb3J0cy5BTFBIQU5VTSk7XG5leHBvcnRzLlRPS0VOID0gZXhwb3J0cy5TVFJJQ1RfVE9LRU4uY29uY2F0KFsnICddKTtcbi8qXG4gKiBWZXJpZnkgdGhhdCBhIGNoYXIgaXMgYSB2YWxpZCB2aXNpYmxlIChwcmludGFibGUpIFVTLUFTQ0lJXG4gKiBjaGFyYWN0ZXIgb3IgJXg4MC1GRlxuICovXG5leHBvcnRzLkhFQURFUl9DSEFSUyA9IFsnXFx0J107XG5mb3IgKGxldCBpID0gMzI7IGkgPD0gMjU1OyBpKyspIHtcbiAgICBpZiAoaSAhPT0gMTI3KSB7XG4gICAgICAgIGV4cG9ydHMuSEVBREVSX0NIQVJTLnB1c2goaSk7XG4gICAgfVxufVxuLy8gJywnID0gXFx4NDRcbmV4cG9ydHMuQ09OTkVDVElPTl9UT0tFTl9DSEFSUyA9IGV4cG9ydHMuSEVBREVSX0NIQVJTLmZpbHRlcigoYykgPT4gYyAhPT0gNDQpO1xuZXhwb3J0cy5NQUpPUiA9IGV4cG9ydHMuTlVNX01BUDtcbmV4cG9ydHMuTUlOT1IgPSBleHBvcnRzLk1BSk9SO1xudmFyIEhFQURFUl9TVEFURTtcbihmdW5jdGlvbiAoSEVBREVSX1NUQVRFKSB7XG4gICAgSEVBREVSX1NUQVRFW0hFQURFUl9TVEFURVtcIkdFTkVSQUxcIl0gPSAwXSA9IFwiR0VORVJBTFwiO1xuICAgIEhFQURFUl9TVEFURVtIRUFERVJfU1RBVEVbXCJDT05ORUNUSU9OXCJdID0gMV0gPSBcIkNPTk5FQ1RJT05cIjtcbiAgICBIRUFERVJfU1RBVEVbSEVBREVSX1NUQVRFW1wiQ09OVEVOVF9MRU5HVEhcIl0gPSAyXSA9IFwiQ09OVEVOVF9MRU5HVEhcIjtcbiAgICBIRUFERVJfU1RBVEVbSEVBREVSX1NUQVRFW1wiVFJBTlNGRVJfRU5DT0RJTkdcIl0gPSAzXSA9IFwiVFJBTlNGRVJfRU5DT0RJTkdcIjtcbiAgICBIRUFERVJfU1RBVEVbSEVBREVSX1NUQVRFW1wiVVBHUkFERVwiXSA9IDRdID0gXCJVUEdSQURFXCI7XG4gICAgSEVBREVSX1NUQVRFW0hFQURFUl9TVEFURVtcIkNPTk5FQ1RJT05fS0VFUF9BTElWRVwiXSA9IDVdID0gXCJDT05ORUNUSU9OX0tFRVBfQUxJVkVcIjtcbiAgICBIRUFERVJfU1RBVEVbSEVBREVSX1NUQVRFW1wiQ09OTkVDVElPTl9DTE9TRVwiXSA9IDZdID0gXCJDT05ORUNUSU9OX0NMT1NFXCI7XG4gICAgSEVBREVSX1NUQVRFW0hFQURFUl9TVEFURVtcIkNPTk5FQ1RJT05fVVBHUkFERVwiXSA9IDddID0gXCJDT05ORUNUSU9OX1VQR1JBREVcIjtcbiAgICBIRUFERVJfU1RBVEVbSEVBREVSX1NUQVRFW1wiVFJBTlNGRVJfRU5DT0RJTkdfQ0hVTktFRFwiXSA9IDhdID0gXCJUUkFOU0ZFUl9FTkNPRElOR19DSFVOS0VEXCI7XG59KShIRUFERVJfU1RBVEUgPSBleHBvcnRzLkhFQURFUl9TVEFURSB8fCAoZXhwb3J0cy5IRUFERVJfU1RBVEUgPSB7fSkpO1xuZXhwb3J0cy5TUEVDSUFMX0hFQURFUlMgPSB7XG4gICAgJ2Nvbm5lY3Rpb24nOiBIRUFERVJfU1RBVEUuQ09OTkVDVElPTixcbiAgICAnY29udGVudC1sZW5ndGgnOiBIRUFERVJfU1RBVEUuQ09OVEVOVF9MRU5HVEgsXG4gICAgJ3Byb3h5LWNvbm5lY3Rpb24nOiBIRUFERVJfU1RBVEUuQ09OTkVDVElPTixcbiAgICAndHJhbnNmZXItZW5jb2RpbmcnOiBIRUFERVJfU1RBVEUuVFJBTlNGRVJfRU5DT0RJTkcsXG4gICAgJ3VwZ3JhZGUnOiBIRUFERVJfU1RBVEUuVVBHUkFERSxcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25zdGFudHMuanMubWFwIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGtCb2R5VXNlZCB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCBFRSA9IHJlcXVpcmUoJ2V2ZW50cycpXG5cbmNvbnN0IHJlZGlyZWN0YWJsZVN0YXR1c0NvZGVzID0gWzMwMCwgMzAxLCAzMDIsIDMwMywgMzA3LCAzMDhdXG5cbmNvbnN0IGtCb2R5ID0gU3ltYm9sKCdib2R5JylcblxuY2xhc3MgQm9keUFzeW5jSXRlcmFibGUge1xuICBjb25zdHJ1Y3RvciAoYm9keSkge1xuICAgIHRoaXNba0JvZHldID0gYm9keVxuICAgIHRoaXNba0JvZHlVc2VkXSA9IGZhbHNlXG4gIH1cblxuICBhc3luYyAqIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gKCkge1xuICAgIGFzc2VydCghdGhpc1trQm9keVVzZWRdLCAnZGlzdHVyYmVkJylcbiAgICB0aGlzW2tCb2R5VXNlZF0gPSB0cnVlXG4gICAgeWllbGQgKiB0aGlzW2tCb2R5XVxuICB9XG59XG5cbmNsYXNzIFJlZGlyZWN0SGFuZGxlciB7XG4gIGNvbnN0cnVjdG9yIChkaXNwYXRjaCwgbWF4UmVkaXJlY3Rpb25zLCBvcHRzLCBoYW5kbGVyKSB7XG4gICAgaWYgKG1heFJlZGlyZWN0aW9ucyAhPSBudWxsICYmICghTnVtYmVyLmlzSW50ZWdlcihtYXhSZWRpcmVjdGlvbnMpIHx8IG1heFJlZGlyZWN0aW9ucyA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ21heFJlZGlyZWN0aW9ucyBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJylcbiAgICB9XG5cbiAgICB1dGlsLnZhbGlkYXRlSGFuZGxlcihoYW5kbGVyLCBvcHRzLm1ldGhvZCwgb3B0cy51cGdyYWRlKVxuXG4gICAgdGhpcy5kaXNwYXRjaCA9IGRpc3BhdGNoXG4gICAgdGhpcy5sb2NhdGlvbiA9IG51bGxcbiAgICB0aGlzLmFib3J0ID0gbnVsbFxuICAgIHRoaXMub3B0cyA9IHsgLi4ub3B0cywgbWF4UmVkaXJlY3Rpb25zOiAwIH0gLy8gb3B0cyBtdXN0IGJlIGEgY29weVxuICAgIHRoaXMubWF4UmVkaXJlY3Rpb25zID0gbWF4UmVkaXJlY3Rpb25zXG4gICAgdGhpcy5oYW5kbGVyID0gaGFuZGxlclxuICAgIHRoaXMuaGlzdG9yeSA9IFtdXG5cbiAgICBpZiAodXRpbC5pc1N0cmVhbSh0aGlzLm9wdHMuYm9keSkpIHtcbiAgICAgIC8vIFRPRE8gKGZpeCk6IFByb3ZpZGUgc29tZSB3YXkgZm9yIHRoZSB1c2VyIHRvIGNhY2hlIHRoZSBmaWxlIHRvIGUuZy4gL3RtcFxuICAgICAgLy8gc28gdGhhdCBpdCBjYW4gYmUgZGlzcGF0Y2hlZCBhZ2Fpbj9cbiAgICAgIC8vIFRPRE8gKGZpeCk6IERvIHdlIG5lZWQgMTAwLWV4cGVjdCBzdXBwb3J0IHRvIHByb3ZpZGUgYSB3YXkgdG8gZG8gdGhpcyBwcm9wZXJseT9cbiAgICAgIGlmICh1dGlsLmJvZHlMZW5ndGgodGhpcy5vcHRzLmJvZHkpID09PSAwKSB7XG4gICAgICAgIHRoaXMub3B0cy5ib2R5XG4gICAgICAgICAgLm9uKCdkYXRhJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKVxuICAgICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRzLmJvZHkucmVhZGFibGVEaWRSZWFkICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgdGhpcy5vcHRzLmJvZHlba0JvZHlVc2VkXSA9IGZhbHNlXG4gICAgICAgIEVFLnByb3RvdHlwZS5vbi5jYWxsKHRoaXMub3B0cy5ib2R5LCAnZGF0YScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB0aGlzW2tCb2R5VXNlZF0gPSB0cnVlXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdHMuYm9keSAmJiB0eXBlb2YgdGhpcy5vcHRzLmJvZHkucGlwZVRvID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBUT0RPIChmaXgpOiBXZSBjYW4ndCBhY2Nlc3MgUmVhZGFibGVTdHJlYW0gaW50ZXJuYWwgc3RhdGVcbiAgICAgIC8vIHRvIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCBpdCBoYXMgYmVlbiBkaXN0dXJiZWQuIFRoaXMgaXMganVzdFxuICAgICAgLy8gYSB3b3JrYXJvdW5kLlxuICAgICAgdGhpcy5vcHRzLmJvZHkgPSBuZXcgQm9keUFzeW5jSXRlcmFibGUodGhpcy5vcHRzLmJvZHkpXG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMub3B0cy5ib2R5ICYmXG4gICAgICB0eXBlb2YgdGhpcy5vcHRzLmJvZHkgIT09ICdzdHJpbmcnICYmXG4gICAgICAhQXJyYXlCdWZmZXIuaXNWaWV3KHRoaXMub3B0cy5ib2R5KSAmJlxuICAgICAgdXRpbC5pc0l0ZXJhYmxlKHRoaXMub3B0cy5ib2R5KVxuICAgICkge1xuICAgICAgLy8gVE9ETzogU2hvdWxkIHdlIGFsbG93IHJlLXVzaW5nIGl0ZXJhYmxlIGlmICF0aGlzLm9wdHMuaWRlbXBvdGVudFxuICAgICAgLy8gb3IgdGhyb3VnaCBzb21lIG90aGVyIGZsYWc/XG4gICAgICB0aGlzLm9wdHMuYm9keSA9IG5ldyBCb2R5QXN5bmNJdGVyYWJsZSh0aGlzLm9wdHMuYm9keSlcbiAgICB9XG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0KSB7XG4gICAgdGhpcy5hYm9ydCA9IGFib3J0XG4gICAgdGhpcy5oYW5kbGVyLm9uQ29ubmVjdChhYm9ydCwgeyBoaXN0b3J5OiB0aGlzLmhpc3RvcnkgfSlcbiAgfVxuXG4gIG9uVXBncmFkZSAoc3RhdHVzQ29kZSwgaGVhZGVycywgc29ja2V0KSB7XG4gICAgdGhpcy5oYW5kbGVyLm9uVXBncmFkZShzdGF0dXNDb2RlLCBoZWFkZXJzLCBzb2NrZXQpXG4gIH1cblxuICBvbkVycm9yIChlcnJvcikge1xuICAgIHRoaXMuaGFuZGxlci5vbkVycm9yKGVycm9yKVxuICB9XG5cbiAgb25IZWFkZXJzIChzdGF0dXNDb2RlLCBoZWFkZXJzLCByZXN1bWUsIHN0YXR1c1RleHQpIHtcbiAgICB0aGlzLmxvY2F0aW9uID0gdGhpcy5oaXN0b3J5Lmxlbmd0aCA+PSB0aGlzLm1heFJlZGlyZWN0aW9ucyB8fCB1dGlsLmlzRGlzdHVyYmVkKHRoaXMub3B0cy5ib2R5KVxuICAgICAgPyBudWxsXG4gICAgICA6IHBhcnNlTG9jYXRpb24oc3RhdHVzQ29kZSwgaGVhZGVycylcblxuICAgIGlmICh0aGlzLm9wdHMub3JpZ2luKSB7XG4gICAgICB0aGlzLmhpc3RvcnkucHVzaChuZXcgVVJMKHRoaXMub3B0cy5wYXRoLCB0aGlzLm9wdHMub3JpZ2luKSlcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMubG9jYXRpb24pIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25IZWFkZXJzKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHJlc3VtZSwgc3RhdHVzVGV4dClcbiAgICB9XG5cbiAgICBjb25zdCB7IG9yaWdpbiwgcGF0aG5hbWUsIHNlYXJjaCB9ID0gdXRpbC5wYXJzZVVSTChuZXcgVVJMKHRoaXMubG9jYXRpb24sIHRoaXMub3B0cy5vcmlnaW4gJiYgbmV3IFVSTCh0aGlzLm9wdHMucGF0aCwgdGhpcy5vcHRzLm9yaWdpbikpKVxuICAgIGNvbnN0IHBhdGggPSBzZWFyY2ggPyBgJHtwYXRobmFtZX0ke3NlYXJjaH1gIDogcGF0aG5hbWVcblxuICAgIC8vIFJlbW92ZSBoZWFkZXJzIHJlZmVycmluZyB0byB0aGUgb3JpZ2luYWwgVVJMLlxuICAgIC8vIEJ5IGRlZmF1bHQgaXQgaXMgSG9zdCBvbmx5LCB1bmxlc3MgaXQncyBhIDMwMyAoc2VlIGJlbG93KSwgd2hpY2ggcmVtb3ZlcyBhbHNvIGFsbCBDb250ZW50LSogaGVhZGVycy5cbiAgICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTYuNFxuICAgIHRoaXMub3B0cy5oZWFkZXJzID0gY2xlYW5SZXF1ZXN0SGVhZGVycyh0aGlzLm9wdHMuaGVhZGVycywgc3RhdHVzQ29kZSA9PT0gMzAzLCB0aGlzLm9wdHMub3JpZ2luICE9PSBvcmlnaW4pXG4gICAgdGhpcy5vcHRzLnBhdGggPSBwYXRoXG4gICAgdGhpcy5vcHRzLm9yaWdpbiA9IG9yaWdpblxuICAgIHRoaXMub3B0cy5tYXhSZWRpcmVjdGlvbnMgPSAwXG4gICAgdGhpcy5vcHRzLnF1ZXJ5ID0gbnVsbFxuXG4gICAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi02LjQuNFxuICAgIC8vIEluIGNhc2Ugb2YgSFRUUCAzMDMsIGFsd2F5cyByZXBsYWNlIG1ldGhvZCB0byBiZSBlaXRoZXIgSEVBRCBvciBHRVRcbiAgICBpZiAoc3RhdHVzQ29kZSA9PT0gMzAzICYmIHRoaXMub3B0cy5tZXRob2QgIT09ICdIRUFEJykge1xuICAgICAgdGhpcy5vcHRzLm1ldGhvZCA9ICdHRVQnXG4gICAgICB0aGlzLm9wdHMuYm9keSA9IG51bGxcbiAgICB9XG4gIH1cblxuICBvbkRhdGEgKGNodW5rKSB7XG4gICAgaWYgKHRoaXMubG9jYXRpb24pIHtcbiAgICAgIC8qXG4gICAgICAgIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNi40XG5cbiAgICAgICAgVExEUjogdW5kaWNpIGFsd2F5cyBpZ25vcmVzIDN4eCByZXNwb25zZSBib2RpZXMuXG5cbiAgICAgICAgUmVkaXJlY3Rpb24gaXMgdXNlZCB0byBzZXJ2ZSB0aGUgcmVxdWVzdGVkIHJlc291cmNlIGZyb20gYW5vdGhlciBVUkwsIHNvIGl0IGlzIGFzc3VtZXMgdGhhdFxuICAgICAgICBubyBib2R5IGlzIGdlbmVyYXRlZCAoYW5kIHRodXMgY2FuIGJlIGlnbm9yZWQpLiBFdmVuIHRob3VnaCBnZW5lcmF0aW5nIGEgYm9keSBpcyBub3QgcHJvaGliaXRlZC5cblxuICAgICAgICBGb3Igc3RhdHVzIDMwMSwgMzAyLCAzMDMsIDMwNyBhbmQgMzA4ICh0aGUgbGF0dGVyIGZyb20gUkZDIDcyMzgpLCB0aGUgc3BlY3MgbWVudGlvbiB0aGF0IHRoZSBib2R5IHVzdWFsbHlcbiAgICAgICAgKHdoaWNoIG1lYW5zIGl0J3Mgb3B0aW9uYWwgYW5kIG5vdCBtYW5kYXRlZCkgY29udGFpbiBqdXN0IGFuIGh5cGVybGluayB0byB0aGUgdmFsdWUgb2ZcbiAgICAgICAgdGhlIExvY2F0aW9uIHJlc3BvbnNlIGhlYWRlciwgc28gdGhlIGJvZHkgY2FuIGJlIGlnbm9yZWQgc2FmZWx5LlxuXG4gICAgICAgIEZvciBzdGF0dXMgMzAwLCB3aGljaCBpcyBcIk11bHRpcGxlIENob2ljZXNcIiwgdGhlIHNwZWMgbWVudGlvbnMgYm90aCBnZW5lcmF0aW5nIGEgTG9jYXRpb25cbiAgICAgICAgcmVzcG9uc2UgaGVhZGVyIEFORCBhIHJlc3BvbnNlIGJvZHkgd2l0aCB0aGUgb3RoZXIgcG9zc2libGUgbG9jYXRpb24gdG8gZm9sbG93LlxuICAgICAgICBTaW5jZSB0aGUgc3BlYyBleHBsaWNpdGlseSBjaG9vc2VzIG5vdCB0byBzcGVjaWZ5IGEgZm9ybWF0IGZvciBzdWNoIGJvZHkgYW5kIGxlYXZlIGl0IHRvXG4gICAgICAgIHNlcnZlcnMgYW5kIGJyb3dzZXJzIGltcGxlbWVudG9ycywgd2UgaWdub3JlIHRoZSBib2R5IGFzIHRoZXJlIGlzIG5vIHNwZWNpZmllZCB3YXkgdG8gZXZlbnR1YWxseSBwYXJzZSBpdC5cbiAgICAgICovXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25EYXRhKGNodW5rKVxuICAgIH1cbiAgfVxuXG4gIG9uQ29tcGxldGUgKHRyYWlsZXJzKSB7XG4gICAgaWYgKHRoaXMubG9jYXRpb24pIHtcbiAgICAgIC8qXG4gICAgICAgIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNi40XG5cbiAgICAgICAgVExEUjogdW5kaWNpIGFsd2F5cyBpZ25vcmVzIDN4eCByZXNwb25zZSB0cmFpbGVycyBhcyB0aGV5IGFyZSBub3QgZXhwZWN0ZWQgaW4gY2FzZSBvZiByZWRpcmVjdGlvbnNcbiAgICAgICAgYW5kIG5laXRoZXIgYXJlIHVzZWZ1bCBpZiBwcmVzZW50LlxuXG4gICAgICAgIFNlZSBjb21tZW50IG9uIG9uRGF0YSBtZXRob2QgYWJvdmUgZm9yIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb25zLlxuICAgICAgKi9cblxuICAgICAgdGhpcy5sb2NhdGlvbiA9IG51bGxcbiAgICAgIHRoaXMuYWJvcnQgPSBudWxsXG5cbiAgICAgIHRoaXMuZGlzcGF0Y2godGhpcy5vcHRzLCB0aGlzKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhhbmRsZXIub25Db21wbGV0ZSh0cmFpbGVycylcbiAgICB9XG4gIH1cblxuICBvbkJvZHlTZW50IChjaHVuaykge1xuICAgIGlmICh0aGlzLmhhbmRsZXIub25Cb2R5U2VudCkge1xuICAgICAgdGhpcy5oYW5kbGVyLm9uQm9keVNlbnQoY2h1bmspXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlTG9jYXRpb24gKHN0YXR1c0NvZGUsIGhlYWRlcnMpIHtcbiAgaWYgKHJlZGlyZWN0YWJsZVN0YXR1c0NvZGVzLmluZGV4T2Yoc3RhdHVzQ29kZSkgPT09IC0xKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaGVhZGVycy5sZW5ndGg7IGkgKz0gMikge1xuICAgIGlmIChoZWFkZXJzW2ldLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT0gJ2xvY2F0aW9uJykge1xuICAgICAgcmV0dXJuIGhlYWRlcnNbaSArIDFdXG4gICAgfVxuICB9XG59XG5cbi8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNi40LjRcbmZ1bmN0aW9uIHNob3VsZFJlbW92ZUhlYWRlciAoaGVhZGVyLCByZW1vdmVDb250ZW50LCB1bmtub3duT3JpZ2luKSB7XG4gIGlmIChoZWFkZXIubGVuZ3RoID09PSA0KSB7XG4gICAgcmV0dXJuIHV0aWwuaGVhZGVyTmFtZVRvU3RyaW5nKGhlYWRlcikgPT09ICdob3N0J1xuICB9XG4gIGlmIChyZW1vdmVDb250ZW50ICYmIHV0aWwuaGVhZGVyTmFtZVRvU3RyaW5nKGhlYWRlcikuc3RhcnRzV2l0aCgnY29udGVudC0nKSkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgaWYgKHVua25vd25PcmlnaW4gJiYgKGhlYWRlci5sZW5ndGggPT09IDEzIHx8IGhlYWRlci5sZW5ndGggPT09IDYgfHwgaGVhZGVyLmxlbmd0aCA9PT0gMTkpKSB7XG4gICAgY29uc3QgbmFtZSA9IHV0aWwuaGVhZGVyTmFtZVRvU3RyaW5nKGhlYWRlcilcbiAgICByZXR1cm4gbmFtZSA9PT0gJ2F1dGhvcml6YXRpb24nIHx8IG5hbWUgPT09ICdjb29raWUnIHx8IG5hbWUgPT09ICdwcm94eS1hdXRob3JpemF0aW9uJ1xuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG4vLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTYuNFxuZnVuY3Rpb24gY2xlYW5SZXF1ZXN0SGVhZGVycyAoaGVhZGVycywgcmVtb3ZlQ29udGVudCwgdW5rbm93bk9yaWdpbikge1xuICBjb25zdCByZXQgPSBbXVxuICBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzKSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGVhZGVycy5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgaWYgKCFzaG91bGRSZW1vdmVIZWFkZXIoaGVhZGVyc1tpXSwgcmVtb3ZlQ29udGVudCwgdW5rbm93bk9yaWdpbikpIHtcbiAgICAgICAgcmV0LnB1c2goaGVhZGVyc1tpXSwgaGVhZGVyc1tpICsgMV0pXG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKGhlYWRlcnMgJiYgdHlwZW9mIGhlYWRlcnMgPT09ICdvYmplY3QnKSB7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoaGVhZGVycykpIHtcbiAgICAgIGlmICghc2hvdWxkUmVtb3ZlSGVhZGVyKGtleSwgcmVtb3ZlQ29udGVudCwgdW5rbm93bk9yaWdpbikpIHtcbiAgICAgICAgcmV0LnB1c2goa2V5LCBoZWFkZXJzW2tleV0pXG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGFzc2VydChoZWFkZXJzID09IG51bGwsICdoZWFkZXJzIG11c3QgYmUgYW4gb2JqZWN0IG9yIGFuIGFycmF5JylcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUmVkaXJlY3RIYW5kbGVyXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBSZWRpcmVjdEhhbmRsZXIgPSByZXF1aXJlKCcuLi9oYW5kbGVyL1JlZGlyZWN0SGFuZGxlcicpXG5cbmZ1bmN0aW9uIGNyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3IgKHsgbWF4UmVkaXJlY3Rpb25zOiBkZWZhdWx0TWF4UmVkaXJlY3Rpb25zIH0pIHtcbiAgcmV0dXJuIChkaXNwYXRjaCkgPT4ge1xuICAgIHJldHVybiBmdW5jdGlvbiBJbnRlcmNlcHQgKG9wdHMsIGhhbmRsZXIpIHtcbiAgICAgIGNvbnN0IHsgbWF4UmVkaXJlY3Rpb25zID0gZGVmYXVsdE1heFJlZGlyZWN0aW9ucyB9ID0gb3B0c1xuXG4gICAgICBpZiAoIW1heFJlZGlyZWN0aW9ucykge1xuICAgICAgICByZXR1cm4gZGlzcGF0Y2gob3B0cywgaGFuZGxlcilcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVkaXJlY3RIYW5kbGVyID0gbmV3IFJlZGlyZWN0SGFuZGxlcihkaXNwYXRjaCwgbWF4UmVkaXJlY3Rpb25zLCBvcHRzLCBoYW5kbGVyKVxuICAgICAgb3B0cyA9IHsgLi4ub3B0cywgbWF4UmVkaXJlY3Rpb25zOiAwIH0gLy8gU3RvcCBzdWIgZGlzcGF0Y2hlciBmcm9tIGFsc28gcmVkaXJlY3RpbmcuXG4gICAgICByZXR1cm4gZGlzcGF0Y2gob3B0cywgcmVkaXJlY3RIYW5kbGVyKVxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3JcbiIsCiAgICAibW9kdWxlLmV4cG9ydHMgPSAnQUdGemJRRUFBQUFCTUFoZ0FYOEJmMkFEZjM5L0FYOWdCSDkvZjM4QmYyQUFBR0FEZjM5L0FHQUJmd0JnQW45L0FHQUdmMzkvZjM5L0FBTExBUWdEWlc1MkdIZGhjMjFmYjI1ZmFHVmhaR1Z5YzE5amIyMXdiR1YwWlFBQ0EyVnVkaFYzWVhOdFgyOXVYMjFsYzNOaFoyVmZZbVZuYVc0QUFBTmxibllMZDJGemJWOXZibDkxY213QUFRTmxibllPZDJGemJWOXZibDl6ZEdGMGRYTUFBUU5sYm5ZVWQyRnpiVjl2Ymw5b1pXRmtaWEpmWm1sbGJHUUFBUU5sYm5ZVWQyRnpiVjl2Ymw5b1pXRmtaWEpmZG1Gc2RXVUFBUU5sYm5ZTWQyRnpiVjl2Ymw5aWIyUjVBQUVEWlc1MkdIZGhjMjFmYjI1ZmJXVnpjMkZuWlY5amIyMXdiR1YwWlFBQUEwWkZBd01FQUFBRkFBQUFBQUFBQlFFRkFBVUZCUUFBQmdBQUFBQUdCZ1lHQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFCQUFBQkFRY0FBQVVGQXdBQkJBVUJjQUVTRWdVREFRQUNCZ2dCZndGQmdOUUVDd2ZSQlNJR2JXVnRiM0o1QWdBTFgybHVhWFJwWVd4cGVtVUFDUmxmWDJsdVpHbHlaV04wWDJaMWJtTjBhVzl1WDNSaFlteGxBUUFMYkd4b2RIUndYMmx1YVhRQUNoaHNiR2gwZEhCZmMyaHZkV3hrWDJ0bFpYQmZZV3hwZG1VQVFReHNiR2gwZEhCZllXeHNiMk1BREFadFlXeHNiMk1BUmd0c2JHaDBkSEJmWm5KbFpRQU5CR1p5WldVQVNBOXNiR2gwZEhCZloyVjBYM1I1Y0dVQURoVnNiR2gwZEhCZloyVjBYMmgwZEhCZmJXRnFiM0lBRHhWc2JHaDBkSEJmWjJWMFgyaDBkSEJmYldsdWIzSUFFQkZzYkdoMGRIQmZaMlYwWDIxbGRHaHZaQUFSRm14c2FIUjBjRjluWlhSZmMzUmhkSFZ6WDJOdlpHVUFFaEpzYkdoMGRIQmZaMlYwWDNWd1ozSmhaR1VBRXd4c2JHaDBkSEJmY21WelpYUUFGQTVzYkdoMGRIQmZaWGhsWTNWMFpRQVZGR3hzYUhSMGNGOXpaWFIwYVc1bmMxOXBibWwwQUJZTmJHeG9kSFJ3WDJacGJtbHphQUFYREd4c2FIUjBjRjl3WVhWelpRQVlEV3hzYUhSMGNGOXlaWE4xYldVQUdSdHNiR2gwZEhCZmNtVnpkVzFsWDJGbWRHVnlYM1Z3WjNKaFpHVUFHaEJzYkdoMGRIQmZaMlYwWDJWeWNtNXZBQnNYYkd4b2RIUndYMmRsZEY5bGNuSnZjbDl5WldGemIyNEFIQmRzYkdoMGRIQmZjMlYwWDJWeWNtOXlYM0psWVhOdmJnQWRGR3hzYUhSMGNGOW5aWFJmWlhKeWIzSmZjRzl6QUI0UmJHeG9kSFJ3WDJWeWNtNXZYMjVoYldVQUh4SnNiR2gwZEhCZmJXVjBhRzlrWDI1aGJXVUFJQkpzYkdoMGRIQmZjM1JoZEhWelgyNWhiV1VBSVJwc2JHaDBkSEJmYzJWMFgyeGxibWxsYm5SZmFHVmhaR1Z5Y3dBaUlXeHNhSFIwY0Y5elpYUmZiR1Z1YVdWdWRGOWphSFZ1YTJWa1gyeGxibWQwYUFBakhXeHNhSFIwY0Y5elpYUmZiR1Z1YVdWdWRGOXJaV1Z3WDJGc2FYWmxBQ1FrYkd4b2RIUndYM05sZEY5c1pXNXBaVzUwWDNSeVlXNXpabVZ5WDJWdVkyOWthVzVuQUNVWWJHeG9kSFJ3WDIxbGMzTmhaMlZmYm1WbFpITmZaVzltQUQ4SkZ3RUFRUUVMRVFFQ0F3UUZDd1lITlRrM01TOHRKeXNwQ3NMZ0FrVUNBQXNJQUJDSWdJQ0FBQXNaQUNBQUVNS0FnSUFBR2lBQUlBSTJBamdnQUNBQk9nQW9DeHdBSUFBZ0FDOEJNaUFBTFFBdUlBQVF3WUNBZ0FBUWdJQ0FnQUFMS2dFQmYwSEFBQkRHZ0lDQUFDSUJFTUtBZ0lBQUdpQUJRWUNJZ0lBQU5nSTRJQUVnQURvQUtDQUJDd29BSUFBUXlJQ0FnQUFMQndBZ0FDMEFLQXNIQUNBQUxRQXFDd2NBSUFBdEFDc0xCd0FnQUMwQUtRc0hBQ0FBTHdFeUN3Y0FJQUF0QUM0TFJRRUVmeUFBS0FJWUlRRWdBQzBBTFNFQ0lBQXRBQ2doQXlBQUtBSTRJUVFnQUJEQ2dJQ0FBQm9nQUNBRU5nSTRJQUFnQXpvQUtDQUFJQUk2QUMwZ0FDQUJOZ0lZQ3hFQUlBQWdBU0FCSUFKcUVNT0FnSUFBQ3hBQUlBQkJBRUhjQUJETWdJQ0FBQm9MWndFQmYwRUFJUUVDUUNBQUtBSU1EUUFDUUFKQUFrQUNRQ0FBTFFBdkRnTUJBQU1DQ3lBQUtBSTRJZ0ZGRFFBZ0FTZ0NMQ0lCUlEwQUlBQWdBUkdBZ0lDQUFBQWlBUTBEQzBFQUR3c1F5b0NBZ0FBQUN5QUFRY09XZ0lBQU5nSVFRUTRoQVFzZ0FRc2VBQUpBSUFBb0Fnd05BQ0FBUWRHYmdJQUFOZ0lRSUFCQkZUWUNEQXNMRmdBQ1FDQUFLQUlNUVJWSERRQWdBRUVBTmdJTUN3c1dBQUpBSUFBb0FneEJGa2NOQUNBQVFRQTJBZ3dMQ3djQUlBQW9BZ3dMQndBZ0FDZ0NFQXNKQUNBQUlBRTJBaEFMQndBZ0FDZ0NGQXNpQUFKQUlBQkJKRWtOQUJES2dJQ0FBQUFMSUFCQkFuUkJvTE9BZ0FCcUtBSUFDeUlBQWtBZ0FFRXVTUTBBRU1xQWdJQUFBQXNnQUVFQ2RFR3d0SUNBQUdvb0FnQUw3Z3NCQVg5QjY2aUFnQUFoQVFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUlBQkJuSDlxRHZRRFkySUFBV0ZoWVdGaFlRSURCQVZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaEJnY0lDUW9MREEwT0QyRmhZV0ZoRUdGaFlXRmhZV0ZoWVdGaEVXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlSSVRGQlVXRnhnWkdodGhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhIQjBlSHlBaElpTWtKU1luS0NrcUt5d3RMaTh3TVRJek5EVTJZVGM0T1RwaFlXRmhZV0ZoWVR0aFlXRThZV0ZoWVQwK1AyRmhZV0ZoWVdGaFFHRmhRV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVVKRFJFVkdSMGhKU2t0TVRVNVBVRkZTVTJGaFlXRmhZV0ZoVkZWV1YxaFpXbHRoWEYxaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmVZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhYMkJoQzBIaHA0Q0FBQThMUWFTaGdJQUFEd3RCeTZ5QWdBQVBDMEgrc1lDQUFBOExRY0NrZ0lBQUR3dEJxNlNBZ0FBUEMwR05xSUNBQUE4TFFlS21nSUFBRHd0QmdMQ0FnQUFQQzBHNXI0Q0FBQThMUWRla2dJQUFEd3RCNzUrQWdBQVBDMEhobjRDQUFBOExRZnFmZ0lBQUR3dEI4cUNBZ0FBUEMwR29yNENBQUE4TFFhNnlnSUFBRHd0QmlMQ0FnQUFQQzBIc3A0Q0FBQThMUVlLaWdJQUFEd3RCanAyQWdBQVBDMEhRcm9DQUFBOExRY3FqZ0lBQUR3dEJ4YktBZ0FBUEMwSGZuSUNBQUE4TFFkS2NnSUFBRHd0QnhLQ0FnQUFQQzBIWG9JQ0FBQThMUWFLZmdJQUFEd3RCN2E2QWdBQVBDMEdyc0lDQUFBOExRZFNsZ0lBQUR3dEJ6SzZBZ0FBUEMwSDZyb0NBQUE4TFFmeXJnSUFBRHd0QjByQ0FnQUFQQzBIeG5ZQ0FBQThMUWJ1Z2dJQUFEd3RCOTZ1QWdBQVBDMEdRc1lDQUFBOExRZGV4Z0lBQUR3dEJvcTJBZ0FBUEMwSFVwNENBQUE4TFFlQ3JnSUFBRHd0Qm42eUFnQUFQQzBIcnNZQ0FBQThMUWRXZmdJQUFEd3RCeXJHQWdBQVBDMEhlcFlDQUFBOExRZFNlZ0lBQUR3dEI5SnlBZ0FBUEMwR25zb0NBQUE4TFFiR2RnSUFBRHd0Qm9KMkFnQUFQQzBHNXNZQ0FBQThMUWJ5d2dJQUFEd3RCa3FHQWdBQVBDMEd6cG9DQUFBOExRZW1zZ0lBQUR3dEJySjZBZ0FBUEMwSFVxNENBQUE4TFFmZW1nSUFBRHd0QmdLYUFnQUFQQzBHd29ZQ0FBQThMUWY2ZWdJQUFEd3RCamFPQWdBQVBDMEdKcllDQUFBOExRZmVpZ0lBQUR3dEJvTEdBZ0FBUEMwR3VuNENBQUE4TFFjYWxnSUFBRHd0QjZKNkFnQUFQQzBHVG9vQ0FBQThMUWNLdmdJQUFEd3RCdzUyQWdBQVBDMEdMcklDQUFBOExRZUdkZ0lBQUR3dEJqYStBZ0FBUEMwSHFvWUNBQUE4TFFiU3RnSUFBRHd0QjBxK0FnQUFQQzBIZnNvQ0FBQThMUWRLeWdJQUFEd3RCOExDQWdBQVBDMEdwb29DQUFBOExRZm1qZ0lBQUR3dEJtWjZBZ0FBUEMwRzFySUNBQUE4TFFadXdnSUFBRHd0QmtyS0FnQUFQQzBHMnE0Q0FBQThMUWNLaWdJQUFEd3RCK0xLQWdBQVBDMEdlcFlDQUFBOExRZENpZ0lBQUR3dEJ1cDZBZ0FBUEMwR0Jub0NBQUE4TEVNcUFnSUFBQUF0QjFxR0FnQUFoQVFzZ0FRc1dBQ0FBSUFBdEFDMUIvZ0Z4SUFGQkFFZHlPZ0F0Q3hrQUlBQWdBQzBBTFVIOUFYRWdBVUVBUjBFQmRISTZBQzBMR1FBZ0FDQUFMUUF0UWZzQmNTQUJRUUJIUVFKMGNqb0FMUXNaQUNBQUlBQXRBQzFCOXdGeElBRkJBRWRCQTNSeU9nQXRDeTRCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FnQWlCRVVOQUNBQUlBUVJnSUNBZ0FBQUlRTUxJQU1MU1FFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NCQ0lFUlEwQUlBQWdBU0FDSUFGcklBUVJnWUNBZ0FBQUlnTkJmMGNOQUNBQVFjYVJnSUFBTmdJUVFSZ2hBd3NnQXdzdUFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUl3SWdSRkRRQWdBQ0FFRVlDQWdJQUFBQ0VEQ3lBREMwa0JBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWdnaUJFVU5BQ0FBSUFFZ0FpQUJheUFFRVlHQWdJQUFBQ0lEUVg5SERRQWdBRUgyaW9DQUFEWUNFRUVZSVFNTElBTUxMZ0VDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ05DSUVSUTBBSUFBZ0JCR0FnSUNBQUFBaEF3c2dBd3RKQVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSU1JZ1JGRFFBZ0FDQUJJQUlnQVdzZ0JCR0JnSUNBQUFBaUEwRi9SdzBBSUFCQjdacUFnQUEyQWhCQkdDRURDeUFEQ3k0QkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9BamdpQkVVTkFDQUFJQVFSZ0lDQWdBQUFJUU1MSUFNTFNRRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDRUNJRVJRMEFJQUFnQVNBQ0lBRnJJQVFSZ1lDQWdBQUFJZ05CZjBjTkFDQUFRWldRZ0lBQU5nSVFRUmdoQXdzZ0F3c3VBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FJOElnUkZEUUFnQUNBRUVZQ0FnSUFBQUNFREN5QURDMGtCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FoUWlCRVVOQUNBQUlBRWdBaUFCYXlBRUVZR0FnSUFBQUNJRFFYOUhEUUFnQUVHcW00Q0FBRFlDRUVFWUlRTUxJQU1MTGdFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NRQ0lFUlEwQUlBQWdCQkdBZ0lDQUFBQWhBd3NnQXd0SkFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUlZSWdSRkRRQWdBQ0FCSUFJZ0FXc2dCQkdCZ0lDQUFBQWlBMEYvUncwQUlBQkI3Wk9BZ0FBMkFoQkJHQ0VEQ3lBREN5NEJBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWtRaUJFVU5BQ0FBSUFRUmdJQ0FnQUFBSVFNTElBTUxMZ0VDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ0pDSUVSUTBBSUFBZ0JCR0FnSUNBQUFBaEF3c2dBd3N1QVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSXNJZ1JGRFFBZ0FDQUVFWUNBZ0lBQUFDRURDeUFEQzBrQkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9BaWdpQkVVTkFDQUFJQUVnQWlBQmF5QUVFWUdBZ0lBQUFDSURRWDlIRFFBZ0FFSDJpSUNBQURZQ0VFRVlJUU1MSUFNTExnRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDVUNJRVJRMEFJQUFnQkJHQWdJQ0FBQUFoQXdzZ0F3dEpBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FJY0lnUkZEUUFnQUNBQklBSWdBV3NnQkJHQmdJQ0FBQUFpQTBGL1J3MEFJQUJCd3BtQWdBQTJBaEJCR0NFREN5QURDeTRCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FrZ2lCRVVOQUNBQUlBUVJnSUNBZ0FBQUlRTUxJQU1MU1FFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NJQ0lFUlEwQUlBQWdBU0FDSUFGcklBUVJnWUNBZ0FBQUlnTkJmMGNOQUNBQVFaU1VnSUFBTmdJUVFSZ2hBd3NnQXdzdUFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUpNSWdSRkRRQWdBQ0FFRVlDQWdJQUFBQ0VEQ3lBREN5NEJBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWxRaUJFVU5BQ0FBSUFRUmdJQ0FnQUFBSVFNTElBTUxMZ0VDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ1dDSUVSUTBBSUFBZ0JCR0FnSUNBQUFBaEF3c2dBd3RGQVFGL0FrQUNRQ0FBTHdFd1FSUnhRUlJIRFFCQkFTRURJQUF0QUNoQkFVWU5BU0FBTHdFeVFlVUFSaUVEREFFTElBQXRBQ2xCQlVZaEF3c2dBQ0FET2dBdVFRQUwvZ0VCQTM5QkFTRURBa0FnQUM4Qk1DSUVRUWh4RFFBZ0FDa0RJRUlBVWlFREN3SkFBa0FnQUMwQUxrVU5BRUVCSVFVZ0FDMEFLVUVGUmcwQlFRRWhCU0FFUWNBQWNVVWdBM0ZCQVVjTkFRdEJBQ0VGSUFSQndBQnhEUUJCQWlFRklBUkIvLzhEY1NJRFFRaHhEUUFDUUNBRFFZQUVjVVVOQUFKQUlBQXRBQ2hCQVVjTkFDQUFMUUF0UVFweERRQkJCUThMUVFRUEN3SkFJQU5CSUhFTkFBSkFJQUF0QUNoQkFVWU5BQ0FBTHdFeVFmLy9BM0VpQUVHY2YycEI1QUJKRFFBZ0FFSE1BVVlOQUNBQVFiQUNSZzBBUVFRaEJTQUVRU2h4UlEwQ0lBTkJpQVJ4UVlBRVJnMENDMEVBRHd0QkFFRURJQUFwQXlCUUd5RUZDeUFGQzJJQkFuOUJBQ0VCQWtBZ0FDMEFLRUVCUmcwQUlBQXZBVEpCLy84RGNTSUNRWngvYWtIa0FFa05BQ0FDUWN3QlJnMEFJQUpCc0FKR0RRQWdBQzhCTUNJQVFjQUFjUTBBUVFFaEFTQUFRWWdFY1VHQUJFWU5BQ0FBUVNoeFJTRUJDeUFCQzZjQkFRTi9Ba0FDUUFKQUlBQXRBQ3BGRFFBZ0FDMEFLMFVOQUVFQUlRTWdBQzhCTUNJRVFRSnhSUTBCREFJTFFRQWhBeUFBTHdFd0lnUkJBWEZGRFFFTFFRRWhBeUFBTFFBb1FRRkdEUUFnQUM4Qk1rSC8vd054SWdWQm5IOXFRZVFBU1EwQUlBVkJ6QUZHRFFBZ0JVR3dBa1lOQUNBRVFjQUFjUTBBUVFBaEF5QUVRWWdFY1VHQUJFWU5BQ0FFUVNoeFFRQkhJUU1MSUFCQkFEc0JNQ0FBUVFBNkFDOGdBd3VaQVFFQ2Z3SkFBa0FDUUNBQUxRQXFSUTBBSUFBdEFDdEZEUUJCQUNFQklBQXZBVEFpQWtFQ2NVVU5BUXdDQzBFQUlRRWdBQzhCTUNJQ1FRRnhSUTBCQzBFQklRRWdBQzBBS0VFQlJnMEFJQUF2QVRKQi8vOERjU0lBUVp4L2FrSGtBRWtOQUNBQVFjd0JSZzBBSUFCQnNBSkdEUUFnQWtIQUFIRU5BRUVBSVFFZ0FrR0lCSEZCZ0FSR0RRQWdBa0VvY1VFQVJ5RUJDeUFCQzFrQUlBQkJHR3BDQURjREFDQUFRZ0EzQXdBZ0FFRTRha0lBTndNQUlBQkJNR3BDQURjREFDQUFRU2hxUWdBM0F3QWdBRUVnYWtJQU53TUFJQUJCRUdwQ0FEY0RBQ0FBUVFocVFnQTNBd0FnQUVIZEFUWUNIRUVBQzNzQkFYOENRQ0FBS0FJTUlnTU5BQUpBSUFBb0FnUkZEUUFnQUNBQk5nSUVDd0pBSUFBZ0FTQUNFTVNBZ0lBQUlnTU5BQ0FBS0FJTUR3c2dBQ0FETmdJY1FRQWhBeUFBS0FJRUlnRkZEUUFnQUNBQklBSWdBQ2dDQ0JHQmdJQ0FBQUFpQVVVTkFDQUFJQUkyQWhRZ0FDQUJOZ0lNSUFFaEF3c2dBd3ZrOHdFRERuOERmZ1IvSTRDQWdJQUFRUkJySWdNa2dJQ0FnQUFnQVNFRUlBRWhCU0FCSVFZZ0FTRUhJQUVoQ0NBQklRa2dBU0VLSUFFaEN5QUJJUXdnQVNFTklBRWhEaUFCSVE4Q1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBZ0FDZ0NIQ0lRUVg5cUR0MEIyZ0VCMlFFQ0F3UUZCZ2NJQ1FvTERBME8yQUVQRU5jQkVSTFdBUk1VRlJZWEdCa2FHK0FCM3dFY0hSN1ZBUjhnSVNJakpDWFVBU1luS0NrcUt5elRBZElCTFM3UkFkQUJMekF4TWpNME5UWTNPRGs2T3p3OVBqOUFRVUpEUkVWRzJ3RkhTRWxLendIT0FVdk5BVXpNQVUxT1QxQlJVbE5VVlZaWFdGbGFXMXhkWGw5Z1lXSmpaR1ZtWjJocGFtdHNiVzV2Y0hGeWMzUjFkbmQ0ZVhwN2ZIMStmNEFCZ1FHQ0FZTUJoQUdGQVlZQmh3R0lBWWtCaWdHTEFZd0JqUUdPQVk4QmtBR1JBWklCa3dHVUFaVUJsZ0dYQVpnQm1RR2FBWnNCbkFHZEFaNEJud0dnQWFFQm9nR2pBYVFCcFFHbUFhY0JxQUdwQWFvQnF3R3NBYTBCcmdHdkFiQUJzUUd5QWJNQnRBRzFBYllCdHdITEFjb0J1QUhKQWJrQnlBRzZBYnNCdkFHOUFiNEJ2d0hBQWNFQndnSERBY1FCeFFIR0FRRGNBUXRCQUNFUURNWUJDMEVPSVJBTXhRRUxRUTBoRUF6RUFRdEJEeUVRRE1NQkMwRVFJUkFNd2dFTFFSTWhFQXpCQVF0QkZDRVFETUFCQzBFVklSQU12d0VMUVJZaEVBeStBUXRCRnlFUURMMEJDMEVZSVJBTXZBRUxRUmtoRUF5N0FRdEJHaUVRRExvQkMwRWJJUkFNdVFFTFFSd2hFQXk0QVF0QkNDRVFETGNCQzBFZElSQU10Z0VMUVNBaEVBeTFBUXRCSHlFUURMUUJDMEVISVJBTXN3RUxRU0VoRUF5eUFRdEJJaUVRRExFQkMwRWVJUkFNc0FFTFFTTWhFQXl2QVF0QkVpRVFESzRCQzBFUklSQU1yUUVMUVNRaEVBeXNBUXRCSlNFUURLc0JDMEVtSVJBTXFnRUxRU2NoRUF5cEFRdEJ3d0VoRUF5b0FRdEJLU0VRREtjQkMwRXJJUkFNcGdFTFFTd2hFQXlsQVF0QkxTRVFES1FCQzBFdUlSQU1vd0VMUVM4aEVBeWlBUXRCeEFFaEVBeWhBUXRCTUNFUURLQUJDMEUwSVJBTW53RUxRUXdoRUF5ZUFRdEJNU0VRREowQkMwRXlJUkFNbkFFTFFUTWhFQXliQVF0Qk9TRVFESm9CQzBFMUlSQU1tUUVMUWNVQklSQU1tQUVMUVFzaEVBeVhBUXRCT2lFUURKWUJDMEUySVJBTWxRRUxRUW9oRUF5VUFRdEJOeUVRREpNQkMwRTRJUkFNa2dFTFFUd2hFQXlSQVF0Qk95RVFESkFCQzBFOUlSQU1qd0VMUVFraEVBeU9BUXRCS0NFUURJMEJDMEUrSVJBTWpBRUxRVDhoRUF5TEFRdEJ3QUFoRUF5S0FRdEJ3UUFoRUF5SkFRdEJ3Z0FoRUF5SUFRdEJ3d0FoRUF5SEFRdEJ4QUFoRUF5R0FRdEJ4UUFoRUF5RkFRdEJ4Z0FoRUF5RUFRdEJLaUVRRElNQkMwSEhBQ0VRRElJQkMwSElBQ0VRRElFQkMwSEpBQ0VRRElBQkMwSEtBQ0VRREg4TFFjc0FJUkFNZmd0QnpRQWhFQXg5QzBITUFDRVFESHdMUWM0QUlSQU1ld3RCendBaEVBeDZDMEhRQUNFUURIa0xRZEVBSVJBTWVBdEIwZ0FoRUF4M0MwSFRBQ0VRREhZTFFkUUFJUkFNZFF0QjFnQWhFQXgwQzBIVkFDRVFESE1MUVFZaEVBeHlDMEhYQUNFUURIRUxRUVVoRUF4d0MwSFlBQ0VRREc4TFFRUWhFQXh1QzBIWkFDRVFERzBMUWRvQUlSQU1iQXRCMndBaEVBeHJDMEhjQUNFUURHb0xRUU1oRUF4cEMwSGRBQ0VRREdnTFFkNEFJUkFNWnd0QjN3QWhFQXhtQzBIaEFDRVFER1VMUWVBQUlSQU1aQXRCNGdBaEVBeGpDMEhqQUNFUURHSUxRUUloRUF4aEMwSGtBQ0VRREdBTFFlVUFJUkFNWHd0QjVnQWhFQXhlQzBIbkFDRVFERjBMUWVnQUlSQU1YQXRCNlFBaEVBeGJDMEhxQUNFUURGb0xRZXNBSVJBTVdRdEI3QUFoRUF4WUMwSHRBQ0VRREZjTFFlNEFJUkFNVmd0Qjd3QWhFQXhWQzBId0FDRVFERlFMUWZFQUlSQU1Vd3RCOGdBaEVBeFNDMEh6QUNFUURGRUxRZlFBSVJBTVVBdEI5UUFoRUF4UEMwSDJBQ0VRREU0TFFmY0FJUkFNVFF0QitBQWhFQXhNQzBINUFDRVFERXNMUWZvQUlSQU1TZ3RCK3dBaEVBeEpDMEg4QUNFUURFZ0xRZjBBSVJBTVJ3dEIvZ0FoRUF4R0MwSC9BQ0VRREVVTFFZQUJJUkFNUkF0QmdRRWhFQXhEQzBHQ0FTRVFERUlMUVlNQklSQU1RUXRCaEFFaEVBeEFDMEdGQVNFUUREOExRWVlCSVJBTVBndEJod0VoRUF3OUMwR0lBU0VRRER3TFFZa0JJUkFNT3d0QmlnRWhFQXc2QzBHTEFTRVFERGtMUVl3QklSQU1PQXRCalFFaEVBdzNDMEdPQVNFUUREWUxRWThCSVJBTU5RdEJrQUVoRUF3MEMwR1JBU0VRRERNTFFaSUJJUkFNTWd0Qmt3RWhFQXd4QzBHVUFTRVFEREFMUVpVQklSQU1Md3RCbGdFaEVBd3VDMEdYQVNFUURDMExRWmdCSVJBTUxBdEJtUUVoRUF3ckMwR2FBU0VRRENvTFFac0JJUkFNS1F0Qm5BRWhFQXdvQzBHZEFTRVFEQ2NMUVo0QklSQU1KZ3RCbndFaEVBd2xDMEdnQVNFUURDUUxRYUVCSVJBTUl3dEJvZ0VoRUF3aUMwR2pBU0VRRENFTFFhUUJJUkFNSUF0QnBRRWhFQXdmQzBHbUFTRVFEQjRMUWFjQklSQU1IUXRCcUFFaEVBd2NDMEdwQVNFUURCc0xRYW9CSVJBTUdndEJxd0VoRUF3WkMwR3NBU0VRREJnTFFhMEJJUkFNRnd0QnJnRWhFQXdXQzBFQklSQU1GUXRCcndFaEVBd1VDMEd3QVNFUURCTUxRYkVCSVJBTUVndEJzd0VoRUF3UkMwR3lBU0VRREJBTFFiUUJJUkFNRHd0QnRRRWhFQXdPQzBHMkFTRVFEQTBMUWJjQklSQU1EQXRCdUFFaEVBd0xDMEc1QVNFUURBb0xRYm9CSVJBTUNRdEJ1d0VoRUF3SUMwSEdBU0VRREFjTFFid0JJUkFNQmd0QnZRRWhFQXdGQzBHK0FTRVFEQVFMUWI4QklSQU1Bd3RCd0FFaEVBd0NDMEhDQVNFUURBRUxRY0VCSVJBTEEwQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQ0FRRHNjQkFBRUNBd1FGQmdjSUNRb0xEQTBPRHhBUkVoTVVGUllYR0JrYUd4d2VIeUFoSXlVb1AwQkJSRVZHUjBoSlNrdE1UVTlRVVZKVDNnTlhXVnRjWFdCaVpXWm5hR2xxYTJ4dGIzQnhjbk4wZFhaM2VIbDZlM3g5Zm9BQmdnR0ZBWVlCaHdHSkFZc0JqQUdOQVk0Qmp3R1FBWkVCbEFHVkFaWUJsd0dZQVprQm1nR2JBWndCblFHZUFaOEJvQUdoQWFJQm93R2tBYVVCcGdHbkFhZ0JxUUdxQWFzQnJBR3RBYTRCcndHd0FiRUJzZ0d6QWJRQnRRRzJBYmNCdUFHNUFib0J1d0c4QWIwQnZnRy9BY0FCd1FIQ0FjTUJ4QUhGQWNZQnh3SElBY2tCeWdITEFjd0J6UUhPQWM4QjBBSFJBZElCMHdIVUFkVUIxZ0hYQWRnQjJRSGFBZHNCM0FIZEFkNEI0QUhoQWVJQjR3SGtBZVVCNWdIbkFlZ0I2UUhxQWVzQjdBSHRBZTRCN3dId0FmRUI4Z0h6QVprQ3BBS3dBdjRDL2dJTElBRWlCQ0FDUnczekFVSGRBU0VRRFA4REN5QUJJaEFnQWtjTjNRRkJ3d0VoRUF6K0F3c2dBU0lCSUFKSERaQUJRZmNBSVJBTS9RTUxJQUVpQVNBQ1J3MkdBVUh2QUNFUURQd0RDeUFCSWdFZ0FrY05mMEhxQUNFUURQc0RDeUFCSWdFZ0FrY05lMEhvQUNFUURQb0RDeUFCSWdFZ0FrY05lRUhtQUNFUURQa0RDeUFCSWdFZ0FrY05Ha0VZSVJBTStBTUxJQUVpQVNBQ1J3MFVRUkloRUF6M0F3c2dBU0lCSUFKSERWbEJ4UUFoRUF6MkF3c2dBU0lCSUFKSERVcEJQeUVRRFBVREN5QUJJZ0VnQWtjTlNFRThJUkFNOUFNTElBRWlBU0FDUncxQlFURWhFQXp6QXdzZ0FDMEFMa0VCUmczckF3eUhBZ3NnQUNBQklnRWdBaERBZ0lDQUFFRUJSdzNtQVNBQVFnQTNBeUFNNXdFTElBQWdBU0lCSUFJUXRJQ0FnQUFpRUEzbkFTQUJJUUVNOVFJTEFrQWdBU0lCSUFKSERRQkJCaUVRRFBBREN5QUFJQUZCQVdvaUFTQUNFTHVBZ0lBQUloQU42QUVnQVNFQkRERUxJQUJDQURjRElFRVNJUkFNMVFNTElBRWlFQ0FDUncwclFSMGhFQXp0QXdzQ1FDQUJJZ0VnQWtZTkFDQUJRUUZxSVFGQkVDRVFETlFEQzBFSElSQU03QU1MSUFCQ0FDQUFLUU1nSWhFZ0FpQUJJaEJyclNJU2ZTSVRJQk1nRVZZYk53TWdJQkVnRWxZaUZFVU41UUZCQ0NFUURPc0RDd0pBSUFFaUFTQUNSZzBBSUFCQmlZQ0FnQUEyQWdnZ0FDQUJOZ0lFSUFFaEFVRVVJUkFNMGdNTFFRa2hFQXpxQXdzZ0FTRUJJQUFwQXlCUURlUUJJQUVoQVF6eUFnc0NRQ0FCSWdFZ0FrY05BRUVMSVJBTTZRTUxJQUFnQVVFQmFpSUJJQUlRdG9DQWdBQWlFQTNsQVNBQklRRU04Z0lMSUFBZ0FTSUJJQUlRdUlDQWdBQWlFQTNsQVNBQklRRU04Z0lMSUFBZ0FTSUJJQUlRdUlDQWdBQWlFQTNtQVNBQklRRU1EUXNnQUNBQklnRWdBaEM2Z0lDQUFDSVFEZWNCSUFFaEFRendBZ3NDUUNBQklnRWdBa2NOQUVFUElSQU01UU1MSUFFdEFBQWlFRUU3UmcwSUlCQkJEVWNONkFFZ0FVRUJhaUVCRE84Q0N5QUFJQUVpQVNBQ0VMcUFnSUFBSWhBTjZBRWdBU0VCRFBJQ0N3TkFBa0FnQVMwQUFFSHd0WUNBQUdvdEFBQWlFRUVCUmcwQUlCQkJBa2NONndFZ0FDZ0NCQ0VRSUFCQkFEWUNCQ0FBSUJBZ0FVRUJhaUlCRUxtQWdJQUFJaEFONmdFZ0FTRUJEUFFDQ3lBQlFRRnFJZ0VnQWtjTkFBdEJFaUVRRE9JREN5QUFJQUVpQVNBQ0VMcUFnSUFBSWhBTjZRRWdBU0VCREFvTElBRWlBU0FDUncwR1FSc2hFQXpnQXdzQ1FDQUJJZ0VnQWtjTkFFRVdJUkFNNEFNTElBQkJpb0NBZ0FBMkFnZ2dBQ0FCTmdJRUlBQWdBU0FDRUxpQWdJQUFJaEFONmdFZ0FTRUJRU0FoRUF6R0F3c0NRQ0FCSWdFZ0FrWU5BQU5BQWtBZ0FTMEFBRUh3dDRDQUFHb3RBQUFpRUVFQ1JnMEFBa0FnRUVGL2FnNEU1UUhzQVFEckFld0JDeUFCUVFGcUlRRkJDQ0VRRE1nREN5QUJRUUZxSWdFZ0FrY05BQXRCRlNFUUROOERDMEVWSVJBTTNnTUxBMEFDUUNBQkxRQUFRZkM1Z0lBQWFpMEFBQ0lRUVFKR0RRQWdFRUYvYWc0RTNnSHNBZUFCNndIc0FRc2dBVUVCYWlJQklBSkhEUUFMUVJnaEVBemRBd3NDUUNBQklnRWdBa1lOQUNBQVFZdUFnSUFBTmdJSUlBQWdBVFlDQkNBQklRRkJCeUVRRE1RREMwRVpJUkFNM0FNTElBRkJBV29oQVF3Q0N3SkFJQUVpRkNBQ1J3MEFRUm9oRUF6YkF3c2dGQ0VCQWtBZ0ZDMEFBRUZ6YWc0VTNRTHVBdTRDN2dMdUF1NEM3Z0x1QXU0QzdnTHVBdTRDN2dMdUF1NEM3Z0x1QXU0QzdnSUE3Z0lMUVFBaEVDQUFRUUEyQWh3Z0FFR3ZpNENBQURZQ0VDQUFRUUkyQWd3Z0FDQVVRUUZxTmdJVUROb0RDd0pBSUFFdEFBQWlFRUU3UmcwQUlCQkJEVWNONkFFZ0FVRUJhaUVCRE9VQ0N5QUJRUUZxSVFFTFFTSWhFQXkvQXdzQ1FDQUJJaEFnQWtjTkFFRWNJUkFNMkFNTFFnQWhFU0FRSVFFZ0VDMEFBRUZRYWc0MzV3SG1BUUVDQXdRRkJnY0lBQUFBQUFBQUFBa0tDd3dORGdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRHhBUkVoTVVBQXRCSGlFUURMMERDMElDSVJFTTVRRUxRZ01oRVF6a0FRdENCQ0VSRE9NQkMwSUZJUkVNNGdFTFFnWWhFUXpoQVF0Q0J5RVJET0FCQzBJSUlSRU0zd0VMUWdraEVRemVBUXRDQ2lFUkROMEJDMElMSVJFTTNBRUxRZ3doRVF6YkFRdENEU0VSRE5vQkMwSU9JUkVNMlFFTFFnOGhFUXpZQVF0Q0NpRVJETmNCQzBJTElSRU0xZ0VMUWd3aEVRelZBUXRDRFNFUkROUUJDMElPSVJFTTB3RUxRZzhoRVF6U0FRdENBQ0VSQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FDQVFMUUFBUVZCcURqZmxBZVFCQUFFQ0F3UUZCZ2ZtQWVZQjVnSG1BZVlCNWdIbUFRZ0pDZ3NNRGVZQjVnSG1BZVlCNWdIbUFlWUI1Z0htQWVZQjVnSG1BZVlCNWdIbUFlWUI1Z0htQWVZQjVnSG1BZVlCNWdIbUFlWUI1Z0VPRHhBUkVoUG1BUXRDQWlFUkRPUUJDMElESVJFTTR3RUxRZ1FoRVF6aUFRdENCU0VSRE9FQkMwSUdJUkVNNEFFTFFnY2hFUXpmQVF0Q0NDRVJETjRCQzBJSklSRU0zUUVMUWdvaEVRemNBUXRDQ3lFUkROc0JDMElNSVJFTTJnRUxRZzBoRVF6WkFRdENEaUVSRE5nQkMwSVBJUkVNMXdFTFFnb2hFUXpXQVF0Q0N5RVJETlVCQzBJTUlSRU0xQUVMUWcwaEVRelRBUXRDRGlFUkROSUJDMElQSVJFTTBRRUxJQUJDQUNBQUtRTWdJaEVnQWlBQkloQnJyU0lTZlNJVElCTWdFVlliTndNZ0lCRWdFbFlpRkVVTjBnRkJIeUVRRE1BREN3SkFJQUVpQVNBQ1JnMEFJQUJCaVlDQWdBQTJBZ2dnQUNBQk5nSUVJQUVoQVVFa0lSQU1wd01MUVNBaEVBeS9Bd3NnQUNBQkloQWdBaEMrZ0lDQUFFRi9hZzRGdGdFQXhRSUIwUUhTQVF0QkVTRVFES1FEQ3lBQVFRRTZBQzhnRUNFQkRMc0RDeUFCSWdFZ0FrY04wZ0ZCSkNFUURMc0RDeUFCSWcwZ0FrY05Ia0hHQUNFUURMb0RDeUFBSUFFaUFTQUNFTEtBZ0lBQUloQU4xQUVnQVNFQkRMVUJDeUFCSWhBZ0FrY05Ka0hRQUNFUURMZ0RDd0pBSUFFaUFTQUNSdzBBUVNnaEVBeTRBd3NnQUVFQU5nSUVJQUJCaklDQWdBQTJBZ2dnQUNBQklBRVFzWUNBZ0FBaUVBM1RBU0FCSVFFTTJBRUxBa0FnQVNJUUlBSkhEUUJCS1NFUURMY0RDeUFRTFFBQUlnRkJJRVlORkNBQlFRbEhEZE1CSUJCQkFXb2hBUXdWQ3dKQUlBRWlBU0FDUmcwQUlBRkJBV29oQVF3WEMwRXFJUkFNdFFNTEFrQWdBU0lRSUFKSERRQkJLeUVRRExVREN3SkFJQkF0QUFBaUFVRUpSZzBBSUFGQklFY04xUUVMSUFBdEFDeEJDRVlOMHdFZ0VDRUJESkVEQ3dKQUlBRWlBU0FDUncwQVFTd2hFQXkwQXdzZ0FTMEFBRUVLUnczVkFTQUJRUUZxSVFFTXlRSUxJQUVpRGlBQ1J3M1ZBVUV2SVJBTXNnTUxBMEFDUUNBQkxRQUFJaEJCSUVZTkFBSkFJQkJCZG1vT0JBRGNBZHdCQU5vQkN5QUJJUUVNNEFFTElBRkJBV29pQVNBQ1J3MEFDMEV4SVJBTXNRTUxRVEloRUNBQkloUWdBa1lOc0FNZ0FpQVVheUFBS0FJQUlnRnFJUlVnRkNBQmEwRURhaUVXQWtBRFFDQVVMUUFBSWhkQklISWdGeUFYUWI5L2FrSC9BWEZCR2trYlFmOEJjU0FCUWZDN2dJQUFhaTBBQUVjTkFRSkFJQUZCQTBjTkFFRUdJUUVNbGdNTElBRkJBV29oQVNBVVFRRnFJaFFnQWtjTkFBc2dBQ0FWTmdJQURMRURDeUFBUVFBMkFnQWdGQ0VCRE5rQkMwRXpJUkFnQVNJVUlBSkdEYThESUFJZ0ZHc2dBQ2dDQUNJQmFpRVZJQlFnQVd0QkNHb2hGZ0pBQTBBZ0ZDMEFBQ0lYUVNCeUlCY2dGMEcvZjJwQi93RnhRUnBKRzBIL0FYRWdBVUgwdTRDQUFHb3RBQUJIRFFFQ1FDQUJRUWhIRFFCQkJTRUJESlVEQ3lBQlFRRnFJUUVnRkVFQmFpSVVJQUpIRFFBTElBQWdGVFlDQUF5d0F3c2dBRUVBTmdJQUlCUWhBUXpZQVF0Qk5DRVFJQUVpRkNBQ1JnMnVBeUFDSUJScklBQW9BZ0FpQVdvaEZTQVVJQUZyUVFWcUlSWUNRQU5BSUJRdEFBQWlGMEVnY2lBWElCZEJ2MzlxUWY4QmNVRWFTUnRCL3dGeElBRkIwTUtBZ0FCcUxRQUFSdzBCQWtBZ0FVRUZSdzBBUVFjaEFReVVBd3NnQVVFQmFpRUJJQlJCQVdvaUZDQUNSdzBBQ3lBQUlCVTJBZ0FNcndNTElBQkJBRFlDQUNBVUlRRU0xd0VMQWtBZ0FTSUJJQUpHRFFBRFFBSkFJQUV0QUFCQmdMNkFnQUJxTFFBQUloQkJBVVlOQUNBUVFRSkdEUW9nQVNFQkROMEJDeUFCUVFGcUlnRWdBa2NOQUF0Qk1DRVFESzREQzBFd0lSQU1yUU1MQWtBZ0FTSUJJQUpHRFFBRFFBSkFJQUV0QUFBaUVFRWdSZzBBSUJCQmRtb09CTmtCMmdIYUFka0IyZ0VMSUFGQkFXb2lBU0FDUncwQUMwRTRJUkFNclFNTFFUZ2hFQXlzQXdzRFFBSkFJQUV0QUFBaUVFRWdSZzBBSUJCQkNVY05Bd3NnQVVFQmFpSUJJQUpIRFFBTFFUd2hFQXlyQXdzRFFBSkFJQUV0QUFBaUVFRWdSZzBBQWtBQ1FDQVFRWFpxRGdUYUFRRUIyZ0VBQ3lBUVFTeEdEZHNCQ3lBQklRRU1CQXNnQVVFQmFpSUJJQUpIRFFBTFFUOGhFQXlxQXdzZ0FTRUJETnNCQzBIQUFDRVFJQUVpRkNBQ1JnMm9BeUFDSUJScklBQW9BZ0FpQVdvaEZpQVVJQUZyUVFacUlSY0NRQU5BSUJRdEFBQkJJSElnQVVHQXdJQ0FBR290QUFCSERRRWdBVUVHUmcyT0F5QUJRUUZxSVFFZ0ZFRUJhaUlVSUFKSERRQUxJQUFnRmpZQ0FBeXBBd3NnQUVFQU5nSUFJQlFoQVF0Qk5pRVFESTREQ3dKQUlBRWlEeUFDUncwQVFjRUFJUkFNcHdNTElBQkJqSUNBZ0FBMkFnZ2dBQ0FQTmdJRUlBOGhBU0FBTFFBc1FYOXFEZ1ROQWRVQjF3SFpBWWNEQ3lBQlFRRnFJUUVNekFFTEFrQWdBU0lCSUFKR0RRQURRQUpBSUFFdEFBQWlFRUVnY2lBUUlCQkJ2MzlxUWY4QmNVRWFTUnRCL3dGeEloQkJDVVlOQUNBUVFTQkdEUUFDUUFKQUFrQUNRQ0FRUVoxL2FnNFRBQU1EQXdNREF3TUJBd01EQXdNREF3TURBZ01MSUFGQkFXb2hBVUV4SVJBTWtRTUxJQUZCQVdvaEFVRXlJUkFNa0FNTElBRkJBV29oQVVFeklSQU1qd01MSUFFaEFRelFBUXNnQVVFQmFpSUJJQUpIRFFBTFFUVWhFQXlsQXd0Qk5TRVFES1FEQ3dKQUlBRWlBU0FDUmcwQUEwQUNRQ0FCTFFBQVFZQzhnSUFBYWkwQUFFRUJSZzBBSUFFaEFRelRBUXNnQVVFQmFpSUJJQUpIRFFBTFFUMGhFQXlrQXd0QlBTRVFES01EQ3lBQUlBRWlBU0FDRUxDQWdJQUFJaEFOMWdFZ0FTRUJEQUVMSUJCQkFXb2hBUXRCUENFUURJY0RDd0pBSUFFaUFTQUNSdzBBUWNJQUlSQU1vQU1MQWtBRFFBSkFJQUV0QUFCQmQyb09HQUFDL2dMK0FvUUQvZ0wrQXY0Qy9nTCtBdjRDL2dMK0F2NEMvZ0wrQXY0Qy9nTCtBdjRDL2dMK0F2NENBUDRDQ3lBQlFRRnFJZ0VnQWtjTkFBdEJ3Z0FoRUF5Z0F3c2dBVUVCYWlFQklBQXRBQzFCQVhGRkRiMEJJQUVoQVF0QkxDRVFESVVEQ3lBQklnRWdBa2NOMHdGQnhBQWhFQXlkQXdzRFFBSkFJQUV0QUFCQmtNQ0FnQUJxTFFBQVFRRkdEUUFnQVNFQkRMY0NDeUFCUVFGcUlnRWdBa2NOQUF0QnhRQWhFQXljQXdzZ0RTMEFBQ0lRUVNCR0RiTUJJQkJCT2tjTmdRTWdBQ2dDQkNFQklBQkJBRFlDQkNBQUlBRWdEUkN2Z0lDQUFDSUJEZEFCSUExQkFXb2hBUXl6QWd0Qnh3QWhFQ0FCSWcwZ0FrWU5tZ01nQWlBTmF5QUFLQUlBSWdGcUlSWWdEU0FCYTBFRmFpRVhBMEFnRFMwQUFDSVVRU0J5SUJRZ0ZFRy9mMnBCL3dGeFFScEpHMEgvQVhFZ0FVR1F3b0NBQUdvdEFBQkhEWUFESUFGQkJVWU45QUlnQVVFQmFpRUJJQTFCQVdvaURTQUNSdzBBQ3lBQUlCWTJBZ0FNbWdNTFFjZ0FJUkFnQVNJTklBSkdEWmtESUFJZ0RXc2dBQ2dDQUNJQmFpRVdJQTBnQVd0QkNXb2hGd05BSUEwdEFBQWlGRUVnY2lBVUlCUkJ2MzlxUWY4QmNVRWFTUnRCL3dGeElBRkJsc0tBZ0FCcUxRQUFSdzMvQWdKQUlBRkJDVWNOQUVFQ0lRRU05UUlMSUFGQkFXb2hBU0FOUVFGcUlnMGdBa2NOQUFzZ0FDQVdOZ0lBREprREN3SkFJQUVpRFNBQ1J3MEFRY2tBSVJBTW1RTUxBa0FDUUNBTkxRQUFJZ0ZCSUhJZ0FTQUJRYjkvYWtIL0FYRkJHa2tiUWY4QmNVR1NmMm9PQndDQUE0QURnQU9BQTRBREFZQURDeUFOUVFGcUlRRkJQaUVRRElBREN5QU5RUUZxSVFGQlB5RVFEUDhDQzBIS0FDRVFJQUVpRFNBQ1JnMlhBeUFDSUExcklBQW9BZ0FpQVdvaEZpQU5JQUZyUVFGcUlSY0RRQ0FOTFFBQUloUkJJSElnRkNBVVFiOS9ha0gvQVhGQkdra2JRZjhCY1NBQlFhRENnSUFBYWkwQUFFY04vUUlnQVVFQlJnM3dBaUFCUVFGcUlRRWdEVUVCYWlJTklBSkhEUUFMSUFBZ0ZqWUNBQXlYQXd0Qnl3QWhFQ0FCSWcwZ0FrWU5sZ01nQWlBTmF5QUFLQUlBSWdGcUlSWWdEU0FCYTBFT2FpRVhBMEFnRFMwQUFDSVVRU0J5SUJRZ0ZFRy9mMnBCL3dGeFFScEpHMEgvQVhFZ0FVR2l3b0NBQUdvdEFBQkhEZndDSUFGQkRrWU44QUlnQVVFQmFpRUJJQTFCQVdvaURTQUNSdzBBQ3lBQUlCWTJBZ0FNbGdNTFFjd0FJUkFnQVNJTklBSkdEWlVESUFJZ0RXc2dBQ2dDQUNJQmFpRVdJQTBnQVd0QkQyb2hGd05BSUEwdEFBQWlGRUVnY2lBVUlCUkJ2MzlxUWY4QmNVRWFTUnRCL3dGeElBRkJ3TUtBZ0FCcUxRQUFSdzM3QWdKQUlBRkJEMGNOQUVFRElRRU04UUlMSUFGQkFXb2hBU0FOUVFGcUlnMGdBa2NOQUFzZ0FDQVdOZ0lBREpVREMwSE5BQ0VRSUFFaURTQUNSZzJVQXlBQ0lBMXJJQUFvQWdBaUFXb2hGaUFOSUFGclFRVnFJUmNEUUNBTkxRQUFJaFJCSUhJZ0ZDQVVRYjkvYWtIL0FYRkJHa2tiUWY4QmNTQUJRZERDZ0lBQWFpMEFBRWNOK2dJQ1FDQUJRUVZIRFFCQkJDRUJEUEFDQ3lBQlFRRnFJUUVnRFVFQmFpSU5JQUpIRFFBTElBQWdGallDQUF5VUF3c0NRQ0FCSWcwZ0FrY05BRUhPQUNFUURKUURDd0pBQWtBQ1FBSkFJQTB0QUFBaUFVRWdjaUFCSUFGQnYzOXFRZjhCY1VFYVNSdEIvd0Z4UVoxL2FnNFRBUDBDL1FMOUF2MEMvUUw5QXYwQy9RTDlBdjBDL1FMOUFnSDlBdjBDL1FJQ0EvMENDeUFOUVFGcUlRRkJ3UUFoRUF6OUFnc2dEVUVCYWlFQlFjSUFJUkFNL0FJTElBMUJBV29oQVVIREFDRVFEUHNDQ3lBTlFRRnFJUUZCeEFBaEVBejZBZ3NDUUNBQklnRWdBa1lOQUNBQVFZMkFnSUFBTmdJSUlBQWdBVFlDQkNBQklRRkJ4UUFoRUF6NkFndEJ6d0FoRUF5U0F3c2dFQ0VCQWtBQ1FDQVFMUUFBUVhacURnUUJxQUtvQWdDb0Fnc2dFRUVCYWlFQkMwRW5JUkFNK0FJTEFrQWdBU0lCSUFKSERRQkIwUUFoRUF5UkF3c0NRQ0FCTFFBQVFTQkdEUUFnQVNFQkRJMEJDeUFCUVFGcUlRRWdBQzBBTFVFQmNVVU54d0VnQVNFQkRJd0JDeUFCSWhjZ0FrY055QUZCMGdBaEVBeVBBd3RCMHdBaEVDQUJJaFFnQWtZTmpnTWdBaUFVYXlBQUtBSUFJZ0ZxSVJZZ0ZDQUJhMEVCYWlFWEEwQWdGQzBBQUNBQlFkYkNnSUFBYWkwQUFFY056QUVnQVVFQlJnM0hBU0FCUVFGcUlRRWdGRUVCYWlJVUlBSkhEUUFMSUFBZ0ZqWUNBQXlPQXdzQ1FDQUJJZ0VnQWtjTkFFSFZBQ0VRREk0REN5QUJMUUFBUVFwSERjd0JJQUZCQVdvaEFRekhBUXNDUUNBQklnRWdBa2NOQUVIV0FDRVFESTBEQ3dKQUFrQWdBUzBBQUVGMmFnNEVBTTBCelFFQnpRRUxJQUZCQVdvaEFRekhBUXNnQVVFQmFpRUJRY29BSVJBTTh3SUxJQUFnQVNJQklBSVFyb0NBZ0FBaUVBM0xBU0FCSVFGQnpRQWhFQXp5QWdzZ0FDMEFLVUVpUmcyRkF3eW1BZ3NDUUNBQklnRWdBa2NOQUVIYkFDRVFESW9EQzBFQUlSUkJBU0VYUVFFaEZrRUFJUkFDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FnQVMwQUFFRlFhZzRLMUFIVEFRQUJBZ01FQlFZSTFRRUxRUUloRUF3R0MwRURJUkFNQlF0QkJDRVFEQVFMUVFVaEVBd0RDMEVHSVJBTUFndEJCeUVRREFFTFFRZ2hFQXRCQUNFWFFRQWhGa0VBSVJRTXpBRUxRUWtoRUVFQklSUkJBQ0VYUVFBaEZnekxBUXNDUUNBQklnRWdBa2NOQUVIZEFDRVFESWtEQ3lBQkxRQUFRUzVIRGN3QklBRkJBV29oQVF5bUFnc2dBU0lCSUFKSERjd0JRZDhBSVJBTWh3TUxBa0FnQVNJQklBSkdEUUFnQUVHT2dJQ0FBRFlDQ0NBQUlBRTJBZ1FnQVNFQlFkQUFJUkFNN2dJTFFlQUFJUkFNaGdNTFFlRUFJUkFnQVNJQklBSkdEWVVESUFJZ0FXc2dBQ2dDQUNJVWFpRVdJQUVnRkd0QkEyb2hGd05BSUFFdEFBQWdGRUhpd29DQUFHb3RBQUJIRGMwQklCUkJBMFlOekFFZ0ZFRUJhaUVVSUFGQkFXb2lBU0FDUncwQUN5QUFJQlkyQWdBTWhRTUxRZUlBSVJBZ0FTSUJJQUpHRFlRRElBSWdBV3NnQUNnQ0FDSVVhaUVXSUFFZ0ZHdEJBbW9oRndOQUlBRXRBQUFnRkVIbXdvQ0FBR290QUFCSERjd0JJQlJCQWtZTnpnRWdGRUVCYWlFVUlBRkJBV29pQVNBQ1J3MEFDeUFBSUJZMkFnQU1oQU1MUWVNQUlSQWdBU0lCSUFKR0RZTURJQUlnQVdzZ0FDZ0NBQ0lVYWlFV0lBRWdGR3RCQTJvaEZ3TkFJQUV0QUFBZ0ZFSHB3b0NBQUdvdEFBQkhEY3NCSUJSQkEwWU56Z0VnRkVFQmFpRVVJQUZCQVdvaUFTQUNSdzBBQ3lBQUlCWTJBZ0FNZ3dNTEFrQWdBU0lCSUFKSERRQkI1UUFoRUF5REF3c2dBQ0FCUVFGcUlnRWdBaENvZ0lDQUFDSVFEYzBCSUFFaEFVSFdBQ0VRRE9rQ0N3SkFJQUVpQVNBQ1JnMEFBMEFDUUNBQkxRQUFJaEJCSUVZTkFBSkFBa0FDUUNBUVFiaC9hZzRMQUFIUEFjOEJ6d0hQQWM4Qnp3SFBBYzhCQXM4QkN5QUJRUUZxSVFGQjBnQWhFQXp0QWdzZ0FVRUJhaUVCUWRNQUlSQU03QUlMSUFGQkFXb2hBVUhVQUNFUURPc0NDeUFCUVFGcUlnRWdBa2NOQUF0QjVBQWhFQXlDQXd0QjVBQWhFQXlCQXdzRFFBSkFJQUV0QUFCQjhNS0FnQUJxTFFBQUloQkJBVVlOQUNBUVFYNXFEZ1BQQWRBQjBRSFNBUXNnQVVFQmFpSUJJQUpIRFFBTFFlWUFJUkFNZ0FNTEFrQWdBU0lCSUFKR0RRQWdBVUVCYWlFQkRBTUxRZWNBSVJBTS93SUxBMEFDUUNBQkxRQUFRZkRFZ0lBQWFpMEFBQ0lRUVFGR0RRQUNRQ0FRUVg1cURnVFNBZE1CMUFFQTFRRUxJQUVoQVVIWEFDRVFET2NDQ3lBQlFRRnFJZ0VnQWtjTkFBdEI2QUFoRUF6K0Fnc0NRQ0FCSWdFZ0FrY05BRUhwQUNFUURQNENDd0pBSUFFdEFBQWlFRUYyYWc0YXVnSFZBZFVCdkFIVkFkVUIxUUhWQWRVQjFRSFZBZFVCMVFIVkFkVUIxUUhWQWRVQjFRSFZBZFVCMVFIS0FkVUIxUUVBMHdFTElBRkJBV29oQVF0QkJpRVFET01DQ3dOQUFrQWdBUzBBQUVId3hvQ0FBR290QUFCQkFVWU5BQ0FCSVFFTW5nSUxJQUZCQVdvaUFTQUNSdzBBQzBIcUFDRVFEUHNDQ3dKQUlBRWlBU0FDUmcwQUlBRkJBV29oQVF3REMwSHJBQ0VRRFBvQ0N3SkFJQUVpQVNBQ1J3MEFRZXdBSVJBTStnSUxJQUZCQVdvaEFRd0JDd0pBSUFFaUFTQUNSdzBBUWUwQUlSQU0rUUlMSUFGQkFXb2hBUXRCQkNFUURONENDd0pBSUFFaUZDQUNSdzBBUWU0QUlSQU05d0lMSUJRaEFRSkFBa0FDUUNBVUxRQUFRZkRJZ0lBQWFpMEFBRUYvYWc0SDFBSFZBZFlCQUp3Q0FRTFhBUXNnRkVFQmFpRUJEQW9MSUJSQkFXb2hBUXpOQVF0QkFDRVFJQUJCQURZQ0hDQUFRWnVTZ0lBQU5nSVFJQUJCQnpZQ0RDQUFJQlJCQVdvMkFoUU05Z0lMQWtBRFFBSkFJQUV0QUFCQjhNaUFnQUJxTFFBQUloQkJCRVlOQUFKQUFrQWdFRUYvYWc0SDBnSFRBZFFCMlFFQUJBSFpBUXNnQVNFQlFkb0FJUkFNNEFJTElBRkJBV29oQVVIY0FDRVFETjhDQ3lBQlFRRnFJZ0VnQWtjTkFBdEI3d0FoRUF6MkFnc2dBVUVCYWlFQkRNc0JDd0pBSUFFaUZDQUNSdzBBUWZBQUlSQU05UUlMSUJRdEFBQkJMMGNOMUFFZ0ZFRUJhaUVCREFZTEFrQWdBU0lVSUFKSERRQkI4UUFoRUF6MEFnc0NRQ0FVTFFBQUlnRkJMMGNOQUNBVVFRRnFJUUZCM1FBaEVBemJBZ3NnQVVGMmFpSUVRUlpMRGRNQlFRRWdCSFJCaVlDQUFuRkZEZE1CRE1vQ0N3SkFJQUVpQVNBQ1JnMEFJQUZCQVdvaEFVSGVBQ0VRRE5vQ0MwSHlBQ0VRRFBJQ0N3SkFJQUVpRkNBQ1J3MEFRZlFBSVJBTThnSUxJQlFoQVFKQUlCUXRBQUJCOE15QWdBQnFMUUFBUVg5cURnUEpBcFFDQU5RQkMwSGhBQ0VRRE5nQ0N3SkFJQUVpRkNBQ1JnMEFBMEFDUUNBVUxRQUFRZkRLZ0lBQWFpMEFBQ0lCUVFOR0RRQUNRQ0FCUVg5cURnTExBZ0RWQVFzZ0ZDRUJRZDhBSVJBTTJnSUxJQlJCQVdvaUZDQUNSdzBBQzBIekFDRVFEUEVDQzBIekFDRVFEUEFDQ3dKQUlBRWlBU0FDUmcwQUlBQkJqNENBZ0FBMkFnZ2dBQ0FCTmdJRUlBRWhBVUhnQUNFUUROY0NDMEgxQUNFUURPOENDd0pBSUFFaUFTQUNSdzBBUWZZQUlSQU03d0lMSUFCQmo0Q0FnQUEyQWdnZ0FDQUJOZ0lFSUFFaEFRdEJBeUVRRE5RQ0N3TkFJQUV0QUFCQklFY053d0lnQVVFQmFpSUJJQUpIRFFBTFFmY0FJUkFNN0FJTEFrQWdBU0lCSUFKSERRQkIrQUFoRUF6c0Fnc2dBUzBBQUVFZ1J3M09BU0FCUVFGcUlRRU03d0VMSUFBZ0FTSUJJQUlRcklDQWdBQWlFQTNPQVNBQklRRU1qZ0lMQWtBZ0FTSUVJQUpIRFFCQitnQWhFQXpxQWdzZ0JDMEFBRUhNQUVjTjBRRWdCRUVCYWlFQlFSTWhFQXpQQVFzQ1FDQUJJZ1FnQWtjTkFFSDdBQ0VRRE9rQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUVZxSVJBRFFDQUVMUUFBSUFGQjhNNkFnQUJxTFFBQVJ3M1FBU0FCUVFWR0RjNEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRZnNBSVJBTTZBSUxBa0FnQVNJRUlBSkhEUUJCL0FBaEVBem9BZ3NDUUFKQUlBUXRBQUJCdlg5cURnd0EwUUhSQWRFQjBRSFJBZEVCMFFIUkFkRUIwUUVCMFFFTElBUkJBV29oQVVIbUFDRVFETThDQ3lBRVFRRnFJUUZCNXdBaEVBek9BZ3NDUUNBQklnUWdBa2NOQUVIOUFDRVFET2NDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRSnFJUkFDUUFOQUlBUXRBQUFnQVVIdHo0Q0FBR290QUFCSERjOEJJQUZCQWtZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFSDlBQ0VRRE9jQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVJBaEVBek1BUXNDUUNBQklnUWdBa2NOQUVIK0FDRVFET1lDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRVnFJUkFDUUFOQUlBUXRBQUFnQVVIMnpvQ0FBR290QUFCSERjNEJJQUZCQlVZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFSCtBQ0VRRE9ZQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVJZaEVBekxBUXNDUUNBQklnUWdBa2NOQUVIL0FDRVFET1VDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRTnFJUkFDUUFOQUlBUXRBQUFnQVVIOHpvQ0FBR290QUFCSERjMEJJQUZCQTBZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFSC9BQ0VRRE9VQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVFVaEVBektBUXNDUUNBQklnUWdBa2NOQUVHQUFTRVFET1FDQ3lBRUxRQUFRZGtBUnczTEFTQUVRUUZxSVFGQkNDRVFETWtCQ3dKQUlBRWlCQ0FDUncwQVFZRUJJUkFNNHdJTEFrQUNRQ0FFTFFBQVFiSi9hZzREQU13QkFjd0JDeUFFUVFGcUlRRkI2d0FoRUF6S0Fnc2dCRUVCYWlFQlFld0FJUkFNeVFJTEFrQWdBU0lFSUFKSERRQkJnZ0VoRUF6aUFnc0NRQUpBSUFRdEFBQkJ1SDlxRGdnQXl3SExBY3NCeXdITEFjc0JBY3NCQ3lBRVFRRnFJUUZCNmdBaEVBekpBZ3NnQkVFQmFpRUJRZTBBSVJBTXlBSUxBa0FnQVNJRUlBSkhEUUJCZ3dFaEVBemhBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSQWdCQ0FCYTBFQ2FpRVVBa0FEUUNBRUxRQUFJQUZCZ00rQWdBQnFMUUFBUnczSkFTQUJRUUpHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQkEyQWdCQmd3RWhFQXpoQWd0QkFDRVFJQUJCQURZQ0FDQVVRUUZxSVFFTXhnRUxBa0FnQVNJRUlBSkhEUUJCaEFFaEVBemdBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFRWFpRVFBa0FEUUNBRUxRQUFJQUZCZzgrQWdBQnFMUUFBUnczSUFTQUJRUVJHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQmhBRWhFQXpnQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVqSVJBTXhRRUxBa0FnQVNJRUlBSkhEUUJCaFFFaEVBemZBZ3NDUUFKQUlBUXRBQUJCdEg5cURnZ0F5QUhJQWNnQnlBSElBY2dCQWNnQkN5QUVRUUZxSVFGQjd3QWhFQXpHQWdzZ0JFRUJhaUVCUWZBQUlSQU14UUlMQWtBZ0FTSUVJQUpIRFFCQmhnRWhFQXplQWdzZ0JDMEFBRUhGQUVjTnhRRWdCRUVCYWlFQkRJTUNDd0pBSUFFaUJDQUNSdzBBUVljQklSQU0zUUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkEyb2hFQUpBQTBBZ0JDMEFBQ0FCUVlqUGdJQUFhaTBBQUVjTnhRRWdBVUVEUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFZY0JJUkFNM1FJTElBQkJBRFlDQUNBUVFRRnFJUUZCTFNFUURNSUJDd0pBSUFFaUJDQUNSdzBBUVlnQklSQU0zQUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkNHb2hFQUpBQTBBZ0JDMEFBQ0FCUWREUGdJQUFhaTBBQUVjTnhBRWdBVUVJUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFZZ0JJUkFNM0FJTElBQkJBRFlDQUNBUVFRRnFJUUZCS1NFUURNRUJDd0pBSUFFaUFTQUNSdzBBUVlrQklSQU0yd0lMUVFFaEVDQUJMUUFBUWQ4QVJ3M0FBU0FCUVFGcUlRRU1nUUlMQWtBZ0FTSUVJQUpIRFFCQmlnRWhFQXphQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUJhaUVRQTBBZ0JDMEFBQ0FCUVl6UGdJQUFhaTBBQUVjTndRRWdBVUVCUmcydkFpQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR0tBU0VRRE5rQ0N3SkFJQUVpQkNBQ1J3MEFRWXNCSVJBTTJRSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQW1vaEVBSkFBMEFnQkMwQUFDQUJRWTdQZ0lBQWFpMEFBRWNOd1FFZ0FVRUNSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVlzQklSQU0yUUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJBaUVRREw0QkN3SkFJQUVpQkNBQ1J3MEFRWXdCSVJBTTJBSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQVdvaEVBSkFBMEFnQkMwQUFDQUJRZkRQZ0lBQWFpMEFBRWNOd0FFZ0FVRUJSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVl3QklSQU0yQUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJIeUVRREwwQkN3SkFJQUVpQkNBQ1J3MEFRWTBCSVJBTTF3SUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQVdvaEVBSkFBMEFnQkMwQUFDQUJRZkxQZ0lBQWFpMEFBRWNOdndFZ0FVRUJSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVkwQklSQU0xd0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJDU0VRREx3QkN3SkFJQUVpQkNBQ1J3MEFRWTRCSVJBTTFnSUxBa0FDUUNBRUxRQUFRYmQvYWc0SEFMOEJ2d0cvQWI4QnZ3RUJ2d0VMSUFSQkFXb2hBVUg0QUNFUURMMENDeUFFUVFGcUlRRkIrUUFoRUF5OEFnc0NRQ0FCSWdRZ0FrY05BRUdQQVNFUUROVUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFWcUlSQUNRQU5BSUFRdEFBQWdBVUdSejRDQUFHb3RBQUJIRGIwQklBRkJCVVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHUEFTRVFETlVDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUmdoRUF5NkFRc0NRQ0FCSWdRZ0FrY05BRUdRQVNFUUROUUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFKcUlSQUNRQU5BSUFRdEFBQWdBVUdYejRDQUFHb3RBQUJIRGJ3QklBRkJBa1lOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHUUFTRVFETlFDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUmNoRUF5NUFRc0NRQ0FCSWdRZ0FrY05BRUdSQVNFUUROTUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFacUlSQUNRQU5BSUFRdEFBQWdBVUdhejRDQUFHb3RBQUJIRGJzQklBRkJCa1lOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHUkFTRVFETk1DQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUlVoRUF5NEFRc0NRQ0FCSWdRZ0FrY05BRUdTQVNFUUROSUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFWcUlSQUNRQU5BSUFRdEFBQWdBVUdoejRDQUFHb3RBQUJIRGJvQklBRkJCVVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHU0FTRVFETklDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUjRoRUF5M0FRc0NRQ0FCSWdRZ0FrY05BRUdUQVNFUURORUNDeUFFTFFBQVFjd0FSdzI0QVNBRVFRRnFJUUZCQ2lFUURMWUJDd0pBSUFRZ0FrY05BRUdVQVNFUUROQUNDd0pBQWtBZ0JDMEFBRUcvZjJvT0R3QzVBYmtCdVFHNUFia0J1UUc1QWJrQnVRRzVBYmtCdVFHNUFRRzVBUXNnQkVFQmFpRUJRZjRBSVJBTXR3SUxJQVJCQVdvaEFVSC9BQ0VRRExZQ0N3SkFJQVFnQWtjTkFFR1ZBU0VRRE04Q0N3SkFBa0FnQkMwQUFFRy9mMm9PQXdDNEFRRzRBUXNnQkVFQmFpRUJRZjBBSVJBTXRnSUxJQVJCQVdvaEJFR0FBU0VRRExVQ0N3SkFJQVFnQWtjTkFFR1dBU0VRRE00Q0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUZxSVJBQ1FBTkFJQVF0QUFBZ0FVR256NENBQUdvdEFBQkhEYllCSUFGQkFVWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdXQVNFUURNNENDeUFBUVFBMkFnQWdFRUVCYWlFQlFRc2hFQXl6QVFzQ1FDQUVJQUpIRFFCQmx3RWhFQXpOQWdzQ1FBSkFBa0FDUUNBRUxRQUFRVk5xRGlNQXVBRzRBYmdCdUFHNEFiZ0J1QUc0QWJnQnVBRzRBYmdCdUFHNEFiZ0J1QUc0QWJnQnVBRzRBYmdCdUFHNEFRRzRBYmdCdUFHNEFiZ0JBcmdCdUFHNEFRTzRBUXNnQkVFQmFpRUJRZnNBSVJBTXRnSUxJQVJCQVdvaEFVSDhBQ0VRRExVQ0N5QUVRUUZxSVFSQmdRRWhFQXkwQWdzZ0JFRUJhaUVFUVlJQklSQU1zd0lMQWtBZ0JDQUNSdzBBUVpnQklSQU16QUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkJHb2hFQUpBQTBBZ0JDMEFBQ0FCUWFuUGdJQUFhaTBBQUVjTnRBRWdBVUVFUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFaZ0JJUkFNekFJTElBQkJBRFlDQUNBUVFRRnFJUUZCR1NFUURMRUJDd0pBSUFRZ0FrY05BRUdaQVNFUURNc0NDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFWcUlSQUNRQU5BSUFRdEFBQWdBVUd1ejRDQUFHb3RBQUJIRGJNQklBRkJCVVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHWkFTRVFETXNDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUVloRUF5d0FRc0NRQ0FFSUFKSERRQkJtZ0VoRUF6S0Fnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVCYWlFUUFrQURRQ0FFTFFBQUlBRkJ0TStBZ0FCcUxRQUFSdzJ5QVNBQlFRRkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCbWdFaEVBektBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRWNJUkFNcndFTEFrQWdCQ0FDUncwQVFac0JJUkFNeVFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBV29oRUFKQUEwQWdCQzBBQUNBQlFiYlBnSUFBYWkwQUFFY05zUUVnQVVFQlJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWnNCSVJBTXlRSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkp5RVFESzRCQ3dKQUlBUWdBa2NOQUVHY0FTRVFETWdDQ3dKQUFrQWdCQzBBQUVHc2Yyb09BZ0FCc1FFTElBUkJBV29oQkVHR0FTRVFESzhDQ3lBRVFRRnFJUVJCaHdFaEVBeXVBZ3NDUUNBRUlBSkhEUUJCblFFaEVBekhBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFQmFpRVFBa0FEUUNBRUxRQUFJQUZCdU0rQWdBQnFMUUFBUncydkFTQUJRUUZHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQm5RRWhFQXpIQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVtSVJBTXJBRUxBa0FnQkNBQ1J3MEFRWjRCSVJBTXhnSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQVdvaEVBSkFBMEFnQkMwQUFDQUJRYnJQZ0lBQWFpMEFBRWNOcmdFZ0FVRUJSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVo0QklSQU14Z0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJBeUVRREtzQkN3SkFJQVFnQWtjTkFFR2ZBU0VRRE1VQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUpxSVJBQ1FBTkFJQVF0QUFBZ0FVSHR6NENBQUdvdEFBQkhEYTBCSUFGQkFrWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdmQVNFUURNVUNDeUFBUVFBMkFnQWdFRUVCYWlFQlFRd2hFQXlxQVFzQ1FDQUVJQUpIRFFCQm9BRWhFQXpFQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRURhaUVRQWtBRFFDQUVMUUFBSUFGQnZNK0FnQUJxTFFBQVJ3MnNBU0FCUVFOR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJvQUVoRUF6RUFnc2dBRUVBTmdJQUlCQkJBV29oQVVFTklSQU1xUUVMQWtBZ0JDQUNSdzBBUWFFQklSQU13d0lMQWtBQ1FDQUVMUUFBUWJwL2FnNExBS3dCckFHc0Fhd0JyQUdzQWF3QnJBR3NBUUdzQVFzZ0JFRUJhaUVFUVlzQklSQU1xZ0lMSUFSQkFXb2hCRUdNQVNFUURLa0NDd0pBSUFRZ0FrY05BRUdpQVNFUURNSUNDeUFFTFFBQVFkQUFSdzJwQVNBRVFRRnFJUVFNNlFFTEFrQWdCQ0FDUncwQVFhTUJJUkFNd1FJTEFrQUNRQ0FFTFFBQVFiZC9hZzRIQWFvQnFnR3FBYW9CcWdFQXFnRUxJQVJCQVdvaEJFR09BU0VRREtnQ0N5QUVRUUZxSVFGQklpRVFES1lCQ3dKQUlBUWdBa2NOQUVHa0FTRVFETUFDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRRnFJUkFDUUFOQUlBUXRBQUFnQVVIQXo0Q0FBR290QUFCSERhZ0JJQUZCQVVZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR2tBU0VRRE1BQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVIwaEVBeWxBUXNDUUNBRUlBSkhEUUJCcFFFaEVBeS9BZ3NDUUFKQUlBUXRBQUJCcm45cURnTUFxQUVCcUFFTElBUkJBV29oQkVHUUFTRVFES1lDQ3lBRVFRRnFJUUZCQkNFUURLUUJDd0pBSUFRZ0FrY05BRUdtQVNFUURMNENDd0pBQWtBQ1FBSkFBa0FnQkMwQUFFRy9mMm9PRlFDcUFhb0JxZ0dxQWFvQnFnR3FBYW9CcWdHcUFRR3FBYW9CQXFvQnFnRURxZ0dxQVFTcUFRc2dCRUVCYWlFRVFZZ0JJUkFNcUFJTElBUkJBV29oQkVHSkFTRVFES2NDQ3lBRVFRRnFJUVJCaWdFaEVBeW1BZ3NnQkVFQmFpRUVRWThCSVJBTXBRSUxJQVJCQVdvaEJFR1JBU0VRREtRQ0N3SkFJQVFnQWtjTkFFR25BU0VRREwwQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUpxSVJBQ1FBTkFJQVF0QUFBZ0FVSHR6NENBQUdvdEFBQkhEYVVCSUFGQkFrWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUduQVNFUURMMENDeUFBUVFBMkFnQWdFRUVCYWlFQlFSRWhFQXlpQVFzQ1FDQUVJQUpIRFFCQnFBRWhFQXk4QWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUNhaUVRQWtBRFFDQUVMUUFBSUFGQndzK0FnQUJxTFFBQVJ3MmtBU0FCUVFKR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJxQUVoRUF5OEFnc2dBRUVBTmdJQUlCQkJBV29oQVVFc0lSQU1vUUVMQWtBZ0JDQUNSdzBBUWFrQklSQU11d0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkJHb2hFQUpBQTBBZ0JDMEFBQ0FCUWNYUGdJQUFhaTBBQUVjTm93RWdBVUVFUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFha0JJUkFNdXdJTElBQkJBRFlDQUNBUVFRRnFJUUZCS3lFUURLQUJDd0pBSUFRZ0FrY05BRUdxQVNFUURMb0NDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFKcUlSQUNRQU5BSUFRdEFBQWdBVUhLejRDQUFHb3RBQUJIRGFJQklBRkJBa1lOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHcUFTRVFETG9DQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUlFoRUF5ZkFRc0NRQ0FFSUFKSERRQkJxd0VoRUF5NUFnc0NRQUpBQWtBQ1FDQUVMUUFBUWI1L2FnNFBBQUVDcEFHa0FhUUJwQUdrQWFRQnBBR2tBYVFCcEFHa0FRT2tBUXNnQkVFQmFpRUVRWk1CSVJBTW9nSUxJQVJCQVdvaEJFR1VBU0VRREtFQ0N5QUVRUUZxSVFSQmxRRWhFQXlnQWdzZ0JFRUJhaUVFUVpZQklSQU1ud0lMQWtBZ0JDQUNSdzBBUWF3QklSQU11QUlMSUFRdEFBQkJ4UUJIRFo4QklBUkJBV29oQkF6Z0FRc0NRQ0FFSUFKSERRQkJyUUVoRUF5M0Fnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVDYWlFUUFrQURRQ0FFTFFBQUlBRkJ6YytBZ0FCcUxRQUFSdzJmQVNBQlFRSkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCclFFaEVBeTNBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRU9JUkFNbkFFTEFrQWdCQ0FDUncwQVFhNEJJUkFNdGdJTElBUXRBQUJCMEFCSERaMEJJQVJCQVdvaEFVRWxJUkFNbXdFTEFrQWdCQ0FDUncwQVFhOEJJUkFNdFFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJDR29oRUFKQUEwQWdCQzBBQUNBQlFkRFBnSUFBYWkwQUFFY05uUUVnQVVFSVJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRYThCSVJBTXRRSUxJQUJCQURZQ0FDQVFRUUZxSVFGQktpRVFESm9CQ3dKQUlBUWdBa2NOQUVHd0FTRVFETFFDQ3dKQUFrQWdCQzBBQUVHcmYyb09Dd0NkQVowQm5RR2RBWjBCblFHZEFaMEJuUUVCblFFTElBUkJBV29oQkVHYUFTRVFESnNDQ3lBRVFRRnFJUVJCbXdFaEVBeWFBZ3NDUUNBRUlBSkhEUUJCc1FFaEVBeXpBZ3NDUUFKQUlBUXRBQUJCdjM5cURoUUFuQUdjQVp3Qm5BR2NBWndCbkFHY0Fad0JuQUdjQVp3Qm5BR2NBWndCbkFHY0Fad0JBWndCQ3lBRVFRRnFJUVJCbVFFaEVBeWFBZ3NnQkVFQmFpRUVRWndCSVJBTW1RSUxBa0FnQkNBQ1J3MEFRYklCSVJBTXNnSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQTJvaEVBSkFBMEFnQkMwQUFDQUJRZG5QZ0lBQWFpMEFBRWNObWdFZ0FVRURSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWJJQklSQU1zZ0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJJU0VRREpjQkN3SkFJQVFnQWtjTkFFR3pBU0VRRExFQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUVpxSVJBQ1FBTkFJQVF0QUFBZ0FVSGR6NENBQUdvdEFBQkhEWmtCSUFGQkJrWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUd6QVNFUURMRUNDeUFBUVFBMkFnQWdFRUVCYWlFQlFSb2hFQXlXQVFzQ1FDQUVJQUpIRFFCQnRBRWhFQXl3QWdzQ1FBSkFBa0FnQkMwQUFFRzdmMm9PRVFDYUFab0JtZ0dhQVpvQm1nR2FBWm9CbWdFQm1nR2FBWm9CbWdHYUFRS2FBUXNnQkVFQmFpRUVRWjBCSVJBTW1BSUxJQVJCQVdvaEJFR2VBU0VRREpjQ0N5QUVRUUZxSVFSQm53RWhFQXlXQWdzQ1FDQUVJQUpIRFFCQnRRRWhFQXl2QWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUZhaUVRQWtBRFFDQUVMUUFBSUFGQjVNK0FnQUJxTFFBQVJ3MlhBU0FCUVFWR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJ0UUVoRUF5dkFnc2dBRUVBTmdJQUlCQkJBV29oQVVFb0lSQU1sQUVMQWtBZ0JDQUNSdzBBUWJZQklSQU1yZ0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFtb2hFQUpBQTBBZ0JDMEFBQ0FCUWVyUGdJQUFhaTBBQUVjTmxnRWdBVUVDUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFiWUJJUkFNcmdJTElBQkJBRFlDQUNBUVFRRnFJUUZCQnlFUURKTUJDd0pBSUFRZ0FrY05BRUczQVNFUURLMENDd0pBQWtBZ0JDMEFBRUc3ZjJvT0RnQ1dBWllCbGdHV0FaWUJsZ0dXQVpZQmxnR1dBWllCbGdFQmxnRUxJQVJCQVdvaEJFR2hBU0VRREpRQ0N5QUVRUUZxSVFSQm9nRWhFQXlUQWdzQ1FDQUVJQUpIRFFCQnVBRWhFQXlzQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUNhaUVRQWtBRFFDQUVMUUFBSUFGQjdjK0FnQUJxTFFBQVJ3MlVBU0FCUVFKR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJ1QUVoRUF5c0Fnc2dBRUVBTmdJQUlCQkJBV29oQVVFU0lSQU1rUUVMQWtBZ0JDQUNSdzBBUWJrQklSQU1xd0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFXb2hFQUpBQTBBZ0JDMEFBQ0FCUWZEUGdJQUFhaTBBQUVjTmt3RWdBVUVCUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFia0JJUkFNcXdJTElBQkJBRFlDQUNBUVFRRnFJUUZCSUNFUURKQUJDd0pBSUFRZ0FrY05BRUc2QVNFUURLb0NDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFGcUlSQUNRQU5BSUFRdEFBQWdBVUh5ejRDQUFHb3RBQUJIRFpJQklBRkJBVVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHNkFTRVFES29DQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUThoRUF5UEFRc0NRQ0FFSUFKSERRQkJ1d0VoRUF5cEFnc0NRQUpBSUFRdEFBQkJ0MzlxRGdjQWtnR1NBWklCa2dHU0FRR1NBUXNnQkVFQmFpRUVRYVVCSVJBTWtBSUxJQVJCQVdvaEJFR21BU0VRREk4Q0N3SkFJQVFnQWtjTkFFRzhBU0VRREtnQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUWRxSVJBQ1FBTkFJQVF0QUFBZ0FVSDB6NENBQUdvdEFBQkhEWkFCSUFGQkIwWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUc4QVNFUURLZ0NDeUFBUVFBMkFnQWdFRUVCYWlFQlFSc2hFQXlOQVFzQ1FDQUVJQUpIRFFCQnZRRWhFQXluQWdzQ1FBSkFBa0FnQkMwQUFFRytmMm9PRWdDUkFaRUJrUUdSQVpFQmtRR1JBWkVCa1FFQmtRR1JBWkVCa1FHUkFaRUJBcEVCQ3lBRVFRRnFJUVJCcEFFaEVBeVBBZ3NnQkVFQmFpRUVRYWNCSVJBTWpnSUxJQVJCQVdvaEJFR29BU0VRREkwQ0N3SkFJQVFnQWtjTkFFRytBU0VRREtZQ0N5QUVMUUFBUWM0QVJ3Mk5BU0FFUVFGcUlRUU16d0VMQWtBZ0JDQUNSdzBBUWI4QklSQU1wUUlMQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQWdCQzBBQUVHL2Yyb09GUUFCQWdPY0FRUUZCcHdCbkFHY0FRY0lDUW9MbkFFTURRNFBuQUVMSUFSQkFXb2hBVUhvQUNFUURKb0NDeUFFUVFGcUlRRkI2UUFoRUF5WkFnc2dCRUVCYWlFQlFlNEFJUkFNbUFJTElBUkJBV29oQVVIeUFDRVFESmNDQ3lBRVFRRnFJUUZCOHdBaEVBeVdBZ3NnQkVFQmFpRUJRZllBSVJBTWxRSUxJQVJCQVdvaEFVSDNBQ0VRREpRQ0N5QUVRUUZxSVFGQitnQWhFQXlUQWdzZ0JFRUJhaUVFUVlNQklSQU1rZ0lMSUFSQkFXb2hCRUdFQVNFUURKRUNDeUFFUVFGcUlRUkJoUUVoRUF5UUFnc2dCRUVCYWlFRVFaSUJJUkFNandJTElBUkJBV29oQkVHWUFTRVFESTRDQ3lBRVFRRnFJUVJCb0FFaEVBeU5BZ3NnQkVFQmFpRUVRYU1CSVJBTWpBSUxJQVJCQVdvaEJFR3FBU0VRRElzQ0N3SkFJQVFnQWtZTkFDQUFRWkNBZ0lBQU5nSUlJQUFnQkRZQ0JFR3JBU0VRRElzQ0MwSEFBU0VRREtNQ0N5QUFJQVVnQWhDcWdJQ0FBQ0lCRFlzQklBVWhBUXhjQ3dKQUlBWWdBa1lOQUNBR1FRRnFJUVVNalFFTFFjSUJJUkFNb1FJTEEwQUNRQ0FRTFFBQVFYWnFEZ1NNQVFBQWp3RUFDeUFRUVFGcUloQWdBa2NOQUF0Qnd3RWhFQXlnQWdzQ1FDQUhJQUpHRFFBZ0FFR1JnSUNBQURZQ0NDQUFJQWMyQWdRZ0J5RUJRUUVoRUF5SEFndEJ4QUVoRUF5ZkFnc0NRQ0FISUFKSERRQkJ4UUVoRUF5ZkFnc0NRQUpBSUFjdEFBQkJkbW9PQkFIT0FjNEJBTTRCQ3lBSFFRRnFJUVlNalFFTElBZEJBV29oQlF5SkFRc0NRQ0FISUFKSERRQkJ4Z0VoRUF5ZUFnc0NRQUpBSUFjdEFBQkJkbW9PRndHUEFZOEJBWThCandHUEFZOEJqd0dQQVk4Qmp3R1BBWThCandHUEFZOEJqd0dQQVk4Qmp3R1BBUUNQQVFzZ0IwRUJhaUVIQzBHd0FTRVFESVFDQ3dKQUlBZ2dBa2NOQUVISUFTRVFESjBDQ3lBSUxRQUFRU0JIRFkwQklBQkJBRHNCTWlBSVFRRnFJUUZCc3dFaEVBeURBZ3NnQVNFWEFrQURRQ0FYSWdjZ0FrWU5BU0FITFFBQVFWQnFRZjhCY1NJUVFRcFBEY3dCQWtBZ0FDOEJNaUlVUVprelN3MEFJQUFnRkVFS2JDSVVPd0V5SUJCQi8vOERjeUFVUWY3L0EzRkpEUUFnQjBFQmFpRVhJQUFnRkNBUWFpSVFPd0V5SUJCQi8vOERjVUhvQjBrTkFRc0xRUUFoRUNBQVFRQTJBaHdnQUVIQmlZQ0FBRFlDRUNBQVFRMDJBZ3dnQUNBSFFRRnFOZ0lVREp3Q0MwSEhBU0VRREpzQ0N5QUFJQWdnQWhDdWdJQ0FBQ0lRUlEzS0FTQVFRUlZIRFl3QklBQkJ5QUUyQWh3Z0FDQUlOZ0lVSUFCQnlaZUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBeWFBZ3NDUUNBSklBSkhEUUJCekFFaEVBeWFBZ3RCQUNFVVFRRWhGMEVCSVJaQkFDRVFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQWt0QUFCQlVHb09DcFlCbFFFQUFRSURCQVVHQ0pjQkMwRUNJUkFNQmd0QkF5RVFEQVVMUVFRaEVBd0VDMEVGSVJBTUF3dEJCaUVRREFJTFFRY2hFQXdCQzBFSUlSQUxRUUFoRjBFQUlSWkJBQ0VVREk0QkMwRUpJUkJCQVNFVVFRQWhGMEVBSVJZTWpRRUxBa0FnQ2lBQ1J3MEFRYzRCSVJBTW1RSUxJQW90QUFCQkxrY05qZ0VnQ2tFQmFpRUpETW9CQ3lBTElBSkhEWTRCUWRBQklSQU1sd0lMQWtBZ0N5QUNSZzBBSUFCQmpvQ0FnQUEyQWdnZ0FDQUxOZ0lFUWJjQklSQU0vZ0VMUWRFQklSQU1sZ0lMQWtBZ0JDQUNSdzBBUWRJQklSQU1sZ0lMSUFJZ0JHc2dBQ2dDQUNJUWFpRVVJQVFnRUd0QkJHb2hDd05BSUFRdEFBQWdFRUg4ejRDQUFHb3RBQUJIRFk0QklCQkJCRVlONlFFZ0VFRUJhaUVRSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQjBnRWhFQXlWQWdzZ0FDQU1JQUlRcklDQWdBQWlBUTJOQVNBTUlRRU11QUVMQWtBZ0JDQUNSdzBBUWRRQklSQU1sQUlMSUFJZ0JHc2dBQ2dDQUNJUWFpRVVJQVFnRUd0QkFXb2hEQU5BSUFRdEFBQWdFRUdCMElDQUFHb3RBQUJIRFk4QklCQkJBVVlOamdFZ0VFRUJhaUVRSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQjFBRWhFQXlUQWdzQ1FDQUVJQUpIRFFCQjFnRWhFQXlUQWdzZ0FpQUVheUFBS0FJQUloQnFJUlFnQkNBUWEwRUNhaUVMQTBBZ0JDMEFBQ0FRUVlQUWdJQUFhaTBBQUVjTmpnRWdFRUVDUmcyUUFTQVFRUUZxSVJBZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFSFdBU0VRREpJQ0N3SkFJQVFnQWtjTkFFSFhBU0VRREpJQ0N3SkFBa0FnQkMwQUFFRzdmMm9PRUFDUEFZOEJqd0dQQVk4Qmp3R1BBWThCandHUEFZOEJqd0dQQVk4QkFZOEJDeUFFUVFGcUlRUkJ1d0VoRUF6NUFRc2dCRUVCYWlFRVFid0JJUkFNK0FFTEFrQWdCQ0FDUncwQVFkZ0JJUkFNa1FJTElBUXRBQUJCeUFCSERZd0JJQVJCQVdvaEJBekVBUXNDUUNBRUlBSkdEUUFnQUVHUWdJQ0FBRFlDQ0NBQUlBUTJBZ1JCdmdFaEVBejNBUXRCMlFFaEVBeVBBZ3NDUUNBRUlBSkhEUUJCMmdFaEVBeVBBZ3NnQkMwQUFFSElBRVlOd3dFZ0FFRUJPZ0FvRExrQkN5QUFRUUk2QUM4Z0FDQUVJQUlRcG9DQWdBQWlFQTJOQVVIQ0FTRVFEUFFCQ3lBQUxRQW9RWDlxRGdLM0Fia0J1QUVMQTBBQ1FDQUVMUUFBUVhacURnUUFqZ0dPQVFDT0FRc2dCRUVCYWlJRUlBSkhEUUFMUWQwQklSQU1pd0lMSUFCQkFEb0FMeUFBTFFBdFFRUnhSUTJFQWdzZ0FFRUFPZ0F2SUFCQkFUb0FOQ0FCSVFFTWpBRUxJQkJCRlVZTjJnRWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFhZU9nSUFBTmdJUUlBQkJFallDREVFQUlSQU1pQUlMQWtBZ0FDQVFJQUlRdElDQWdBQWlCQTBBSUJBaEFReUJBZ3NDUUNBRVFSVkhEUUFnQUVFRE5nSWNJQUFnRURZQ0ZDQUFRYkNZZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNaUFJTElBQkJBRFlDSENBQUlCQTJBaFFnQUVHbmpvQ0FBRFlDRUNBQVFSSTJBZ3hCQUNFUURJY0NDeUFRUVJWR0RkWUJJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFSGFqWUNBQURZQ0VDQUFRUlEyQWd4QkFDRVFESVlDQ3lBQUtBSUVJUmNnQUVFQU5nSUVJQkFnRWFkcUloWWhBU0FBSUJjZ0VDQVdJQlFiSWhBUXRZQ0FnQUFpRkVVTmpRRWdBRUVITmdJY0lBQWdFRFlDRkNBQUlCUTJBZ3hCQUNFUURJVUNDeUFBSUFBdkFUQkJnQUZ5T3dFd0lBRWhBUXRCS2lFUURPb0JDeUFRUVJWR0RkRUJJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFR0RqSUNBQURZQ0VDQUFRUk0yQWd4QkFDRVFESUlDQ3lBUVFSVkdEYzhCSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUdhajRDQUFEWUNFQ0FBUVNJMkFneEJBQ0VRRElFQ0N5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRdDRDQWdBQWlFQTBBSUFGQkFXb2hBUXlOQVFzZ0FFRU1OZ0ljSUFBZ0VEWUNEQ0FBSUFGQkFXbzJBaFJCQUNFUURJQUNDeUFRUVJWR0Rjd0JJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFR2FqNENBQURZQ0VDQUFRU0kyQWd4QkFDRVFEUDhCQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVF0NENBZ0FBaUVBMEFJQUZCQVdvaEFReU1BUXNnQUVFTk5nSWNJQUFnRURZQ0RDQUFJQUZCQVdvMkFoUkJBQ0VRRFA0QkN5QVFRUlZHRGNrQklBQkJBRFlDSENBQUlBRTJBaFFnQUVIR2pJQ0FBRFlDRUNBQVFTTTJBZ3hCQUNFUURQMEJDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXVZQ0FnQUFpRUEwQUlBRkJBV29oQVF5TEFRc2dBRUVPTmdJY0lBQWdFRFlDRENBQUlBRkJBV28yQWhSQkFDRVFEUHdCQ3lBQVFRQTJBaHdnQUNBQk5nSVVJQUJCd0pXQWdBQTJBaEFnQUVFQ05nSU1RUUFoRUF6N0FRc2dFRUVWUmczRkFTQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnhveUFnQUEyQWhBZ0FFRWpOZ0lNUVFBaEVBejZBUXNnQUVFUU5nSWNJQUFnQVRZQ0ZDQUFJQkEyQWd4QkFDRVFEUGtCQ3lBQUtBSUVJUVFnQUVFQU5nSUVBa0FnQUNBRUlBRVF1WUNBZ0FBaUJBMEFJQUZCQVdvaEFRenhBUXNnQUVFUk5nSWNJQUFnQkRZQ0RDQUFJQUZCQVdvMkFoUkJBQ0VRRFBnQkN5QVFRUlZHRGNFQklBQkJBRFlDSENBQUlBRTJBaFFnQUVIR2pJQ0FBRFlDRUNBQVFTTTJBZ3hCQUNFUURQY0JDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXVZQ0FnQUFpRUEwQUlBRkJBV29oQVF5SUFRc2dBRUVUTmdJY0lBQWdFRFlDRENBQUlBRkJBV28yQWhSQkFDRVFEUFlCQ3lBQUtBSUVJUVFnQUVFQU5nSUVBa0FnQUNBRUlBRVF1WUNBZ0FBaUJBMEFJQUZCQVdvaEFRenRBUXNnQUVFVU5nSWNJQUFnQkRZQ0RDQUFJQUZCQVdvMkFoUkJBQ0VRRFBVQkN5QVFRUlZHRGIwQklBQkJBRFlDSENBQUlBRTJBaFFnQUVHYWo0Q0FBRFlDRUNBQVFTSTJBZ3hCQUNFUURQUUJDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXQ0Q0FnQUFpRUEwQUlBRkJBV29oQVF5R0FRc2dBRUVXTmdJY0lBQWdFRFlDRENBQUlBRkJBV28yQWhSQkFDRVFEUE1CQ3lBQUtBSUVJUVFnQUVFQU5nSUVBa0FnQUNBRUlBRVF0NENBZ0FBaUJBMEFJQUZCQVdvaEFRenBBUXNnQUVFWE5nSWNJQUFnQkRZQ0RDQUFJQUZCQVdvMkFoUkJBQ0VRRFBJQkN5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnpaT0FnQUEyQWhBZ0FFRU1OZ0lNUVFBaEVBenhBUXRDQVNFUkN5QVFRUUZxSVFFQ1FDQUFLUU1nSWhKQy8vLy8vLy8vLy84UFZnMEFJQUFnRWtJRWhpQVJoRGNESUNBQklRRU1oQUVMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUd0aVlDQUFEWUNFQ0FBUVF3MkFneEJBQ0VRRE84QkN5QUFRUUEyQWh3Z0FDQVFOZ0lVSUFCQnpaT0FnQUEyQWhBZ0FFRU1OZ0lNUVFBaEVBenVBUXNnQUNnQ0JDRVhJQUJCQURZQ0JDQVFJQkduYWlJV0lRRWdBQ0FYSUJBZ0ZpQVVHeUlRRUxXQWdJQUFJaFJGRFhNZ0FFRUZOZ0ljSUFBZ0VEWUNGQ0FBSUJRMkFneEJBQ0VRRE8wQkN5QUFRUUEyQWh3Z0FDQVFOZ0lVSUFCQnFweUFnQUEyQWhBZ0FFRVBOZ0lNUVFBaEVBenNBUXNnQUNBUUlBSVF0SUNBZ0FBaUFRMEJJQkFoQVF0QkRpRVFETkVCQ3dKQUlBRkJGVWNOQUNBQVFRSTJBaHdnQUNBUU5nSVVJQUJCc0ppQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF6cUFRc2dBRUVBTmdJY0lBQWdFRFlDRkNBQVFhZU9nSUFBTmdJUUlBQkJFallDREVFQUlSQU02UUVMSUFGQkFXb2hFQUpBSUFBdkFUQWlBVUdBQVhGRkRRQUNRQ0FBSUJBZ0FoQzdnSUNBQUNJQkRRQWdFQ0VCREhBTElBRkJGVWNOdWdFZ0FFRUZOZ0ljSUFBZ0VEWUNGQ0FBUWZtWGdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTTZRRUxBa0FnQVVHZ0JIRkJvQVJIRFFBZ0FDMEFMVUVDY1EwQUlBQkJBRFlDSENBQUlCQTJBaFFnQUVHV2s0Q0FBRFlDRUNBQVFRUTJBZ3hCQUNFUURPa0JDeUFBSUJBZ0FoQzlnSUNBQUJvZ0VDRUJBa0FDUUFKQUFrQUNRQ0FBSUJBZ0FoQ3pnSUNBQUE0V0FnRUFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBd1FMSUFCQkFUb0FMZ3NnQUNBQUx3RXdRY0FBY2pzQk1DQVFJUUVMUVNZaEVBelJBUXNnQUVFak5nSWNJQUFnRURZQ0ZDQUFRYVdXZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNNlFFTElBQkJBRFlDSENBQUlCQTJBaFFnQUVIVmk0Q0FBRFlDRUNBQVFSRTJBZ3hCQUNFUURPZ0JDeUFBTFFBdFFRRnhSUTBCUWNNQklSQU16Z0VMQWtBZ0RTQUNSZzBBQTBBQ1FDQU5MUUFBUVNCR0RRQWdEU0VCRE1RQkN5QU5RUUZxSWcwZ0FrY05BQXRCSlNFUURPY0JDMEVsSVJBTTVnRUxJQUFvQWdRaEJDQUFRUUEyQWdRZ0FDQUVJQTBRcjRDQWdBQWlCRVVOclFFZ0FFRW1OZ0ljSUFBZ0JEWUNEQ0FBSUExQkFXbzJBaFJCQUNFUURPVUJDeUFRUVJWR0Rhc0JJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFSDlqWUNBQURZQ0VDQUFRUjAyQWd4QkFDRVFET1FCQ3lBQVFTYzJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNNHdFTElCQWhBVUVCSVJRQ1FBSkFBa0FDUUFKQUFrQUNRQ0FBTFFBc1FYNXFEZ2NHQlFVREFRSUFCUXNnQUNBQUx3RXdRUWh5T3dFd0RBTUxRUUloRkF3QkMwRUVJUlFMSUFCQkFUb0FMQ0FBSUFBdkFUQWdGSEk3QVRBTElCQWhBUXRCS3lFUURNb0JDeUFBUVFBMkFod2dBQ0FRTmdJVUlBQkJxNUtBZ0FBMkFoQWdBRUVMTmdJTVFRQWhFQXppQVFzZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWVHUGdJQUFOZ0lRSUFCQkNqWUNERUVBSVJBTTRRRUxJQUJCQURvQUxDQVFJUUVNdlFFTElCQWhBVUVCSVJRQ1FBSkFBa0FDUUFKQUlBQXRBQ3hCZTJvT0JBTUJBZ0FGQ3lBQUlBQXZBVEJCQ0hJN0FUQU1Bd3RCQWlFVURBRUxRUVFoRkFzZ0FFRUJPZ0FzSUFBZ0FDOEJNQ0FVY2pzQk1Bc2dFQ0VCQzBFcElSQU14UUVMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUh3bElDQUFEWUNFQ0FBUVFNMkFneEJBQ0VRRE4wQkN3SkFJQTR0QUFCQkRVY05BQ0FBS0FJRUlRRWdBRUVBTmdJRUFrQWdBQ0FCSUE0UXNZQ0FnQUFpQVEwQUlBNUJBV29oQVF4MUN5QUFRU3cyQWh3Z0FDQUJOZ0lNSUFBZ0RrRUJhallDRkVFQUlSQU0zUUVMSUFBdEFDMUJBWEZGRFFGQnhBRWhFQXpEQVFzQ1FDQU9JQUpIRFFCQkxTRVFETndCQ3dKQUFrQURRQUpBSUE0dEFBQkJkbW9PQkFJQUFBTUFDeUFPUVFGcUlnNGdBa2NOQUF0QkxTRVFETjBCQ3lBQUtBSUVJUUVnQUVFQU5nSUVBa0FnQUNBQklBNFFzWUNBZ0FBaUFRMEFJQTRoQVF4MEN5QUFRU3cyQWh3Z0FDQU9OZ0lVSUFBZ0FUWUNERUVBSVJBTTNBRUxJQUFvQWdRaEFTQUFRUUEyQWdRQ1FDQUFJQUVnRGhDeGdJQ0FBQ0lCRFFBZ0RrRUJhaUVCREhNTElBQkJMRFlDSENBQUlBRTJBZ3dnQUNBT1FRRnFOZ0lVUVFBaEVBemJBUXNnQUNnQ0JDRUVJQUJCQURZQ0JDQUFJQVFnRGhDeGdJQ0FBQ0lFRGFBQklBNGhBUXpPQVFzZ0VFRXNSdzBCSUFGQkFXb2hFRUVCSVFFQ1FBSkFBa0FDUUFKQUlBQXRBQ3hCZTJvT0JBTUJBZ1FBQ3lBUUlRRU1CQXRCQWlFQkRBRUxRUVFoQVFzZ0FFRUJPZ0FzSUFBZ0FDOEJNQ0FCY2pzQk1DQVFJUUVNQVFzZ0FDQUFMd0V3UVFoeU93RXdJQkFoQVF0Qk9TRVFETDhCQ3lBQVFRQTZBQ3dnQVNFQkMwRTBJUkFNdlFFTElBQWdBQzhCTUVFZ2Nqc0JNQ0FCSVFFTUFnc2dBQ2dDQkNFRUlBQkJBRFlDQkFKQUlBQWdCQ0FCRUxHQWdJQUFJZ1FOQUNBQklRRU14d0VMSUFCQk56WUNIQ0FBSUFFMkFoUWdBQ0FFTmdJTVFRQWhFQXpVQVFzZ0FFRUlPZ0FzSUFFaEFRdEJNQ0VRRExrQkN3SkFJQUF0QUNoQkFVWU5BQ0FCSVFFTUJBc2dBQzBBTFVFSWNVVU5rd0VnQVNFQkRBTUxJQUF0QURCQklIRU5sQUZCeFFFaEVBeTNBUXNDUUNBUElBSkdEUUFDUUFOQUFrQWdEeTBBQUVGUWFpSUJRZjhCY1VFS1NRMEFJQThoQVVFMUlSQU11Z0VMSUFBcEF5QWlFVUtacytiTW1iUG16QmxXRFFFZ0FDQVJRZ3ArSWhFM0F5QWdFU0FCclVML0FZTWlFa0ovaFZZTkFTQUFJQkVnRW53M0F5QWdEMEVCYWlJUElBSkhEUUFMUVRraEVBelJBUXNnQUNnQ0JDRUNJQUJCQURZQ0JDQUFJQUlnRDBFQmFpSUVFTEdBZ0lBQUlnSU5sUUVnQkNFQkRNTUJDMEU1SVJBTXp3RUxBa0FnQUM4Qk1DSUJRUWh4UlEwQUlBQXRBQ2hCQVVjTkFDQUFMUUF0UVFoeFJRMlFBUXNnQUNBQlFmZjdBM0ZCZ0FSeU93RXdJQThoQVF0Qk55RVFETFFCQ3lBQUlBQXZBVEJCRUhJN0FUQU1xd0VMSUJCQkZVWU5pd0VnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZkNPZ0lBQU5nSVFJQUJCSERZQ0RFRUFJUkFNeXdFTElBQkJ3d0EyQWh3Z0FDQUJOZ0lNSUFBZ0RVRUJhallDRkVFQUlSQU15Z0VMQWtBZ0FTMEFBRUU2UncwQUlBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkN2Z0lDQUFDSVFEUUFnQVVFQmFpRUJER01MSUFCQnd3QTJBaHdnQUNBUU5nSU1JQUFnQVVFQmFqWUNGRUVBSVJBTXlnRUxJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFR3hrWUNBQURZQ0VDQUFRUW8yQWd4QkFDRVFETWtCQ3lBQVFRQTJBaHdnQUNBQk5nSVVJQUJCb0ptQWdBQTJBaEFnQUVFZU5nSU1RUUFoRUF6SUFRc2dBRUVBTmdJQUN5QUFRWUFTT3dFcUlBQWdGMEVCYWlJQklBSVFxSUNBZ0FBaUVBMEJJQUVoQVF0Qnh3QWhFQXlzQVFzZ0VFRVZSdzJEQVNBQVFkRUFOZ0ljSUFBZ0FUWUNGQ0FBUWVPWGdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTXhBRUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDbmdJQ0FBQ0lRRFFBZ0FTRUJERjRMSUFCQjBnQTJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNd3dFTElBQkJBRFlDSENBQUlCUTJBaFFnQUVIQnFJQ0FBRFlDRUNBQVFRYzJBZ3dnQUVFQU5nSUFRUUFoRUF6Q0FRc2dBQ2dDQkNFUUlBQkJBRFlDQkFKQUlBQWdFQ0FCRUtlQWdJQUFJaEFOQUNBQklRRU1YUXNnQUVIVEFEWUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXpCQVF0QkFDRVFJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFR0FrWUNBQURZQ0VDQUFRUWsyQWd3TXdBRUxJQkJCRlVZTmZTQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQmxJMkFnQUEyQWhBZ0FFRWhOZ0lNUVFBaEVBeS9BUXRCQVNFV1FRQWhGMEVBSVJSQkFTRVFDeUFBSUJBNkFDc2dBVUVCYWlFQkFrQUNRQ0FBTFFBdFFSQnhEUUFDUUFKQUFrQWdBQzBBS2c0REFRQUNCQXNnRmtVTkF3d0NDeUFVRFFFTUFnc2dGMFVOQVFzZ0FDZ0NCQ0VRSUFCQkFEWUNCQUpBSUFBZ0VDQUJFSzJBZ0lBQUloQU5BQ0FCSVFFTVhBc2dBRUhZQURZQ0hDQUFJQUUyQWhRZ0FDQVFOZ0lNUVFBaEVBeStBUXNnQUNnQ0JDRUVJQUJCQURZQ0JBSkFJQUFnQkNBQkVLMkFnSUFBSWdRTkFDQUJJUUVNclFFTElBQkIyUUEyQWh3Z0FDQUJOZ0lVSUFBZ0JEWUNERUVBSVJBTXZRRUxJQUFvQWdRaEJDQUFRUUEyQWdRQ1FDQUFJQVFnQVJDdGdJQ0FBQ0lFRFFBZ0FTRUJES3NCQ3lBQVFkb0FOZ0ljSUFBZ0FUWUNGQ0FBSUFRMkFneEJBQ0VRREx3QkN5QUFLQUlFSVFRZ0FFRUFOZ0lFQWtBZ0FDQUVJQUVRcllDQWdBQWlCQTBBSUFFaEFReXBBUXNnQUVIY0FEWUNIQ0FBSUFFMkFoUWdBQ0FFTmdJTVFRQWhFQXk3QVFzQ1FDQUJMUUFBUVZCcUloQkIvd0Z4UVFwUERRQWdBQ0FRT2dBcUlBRkJBV29oQVVIUEFDRVFES0lCQ3lBQUtBSUVJUVFnQUVFQU5nSUVBa0FnQUNBRUlBRVFyWUNBZ0FBaUJBMEFJQUVoQVF5bkFRc2dBRUhlQURZQ0hDQUFJQUUyQWhRZ0FDQUVOZ0lNUVFBaEVBeTZBUXNnQUVFQU5nSUFJQmRCQVdvaEFRSkFJQUF0QUNsQkkwOE5BQ0FCSVFFTVdRc2dBRUVBTmdJY0lBQWdBVFlDRkNBQVFkT0pnSUFBTmdJUUlBQkJDRFlDREVFQUlSQU11UUVMSUFCQkFEWUNBQXRCQUNFUUlBQkJBRFlDSENBQUlBRTJBaFFnQUVHUXM0Q0FBRFlDRUNBQVFRZzJBZ3dNdHdFTElBQkJBRFlDQUNBWFFRRnFJUUVDUUNBQUxRQXBRU0ZIRFFBZ0FTRUJERllMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUdiaW9DQUFEWUNFQ0FBUVFnMkFneEJBQ0VRRExZQkN5QUFRUUEyQWdBZ0YwRUJhaUVCQWtBZ0FDMEFLU0lRUVYxcVFRdFBEUUFnQVNFQkRGVUxBa0FnRUVFR1N3MEFRUUVnRUhSQnlnQnhSUTBBSUFFaEFReFZDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWZlSmdJQUFOZ0lRSUFCQkNEWUNEQXkxQVFzZ0VFRVZSZzF4SUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUc1allDQUFEWUNFQ0FBUVJvMkFneEJBQ0VRRExRQkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRcDRDQWdBQWlFQTBBSUFFaEFReFVDeUFBUWVVQU5nSWNJQUFnQVRZQ0ZDQUFJQkEyQWd4QkFDRVFETE1CQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVFwNENBZ0FBaUVBMEFJQUVoQVF4TkN5QUFRZElBTmdJY0lBQWdBVFlDRkNBQUlCQTJBZ3hCQUNFUURMSUJDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXA0Q0FnQUFpRUEwQUlBRWhBUXhOQ3lBQVFkTUFOZ0ljSUFBZ0FUWUNGQ0FBSUJBMkFneEJBQ0VRRExFQkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRcDRDQWdBQWlFQTBBSUFFaEFReFJDeUFBUWVVQU5nSWNJQUFnQVRZQ0ZDQUFJQkEyQWd4QkFDRVFETEFCQ3lBQVFRQTJBaHdnQUNBQk5nSVVJQUJCeG9xQWdBQTJBaEFnQUVFSE5nSU1RUUFoRUF5dkFRc2dBQ2dDQkNFUUlBQkJBRFlDQkFKQUlBQWdFQ0FCRUtlQWdJQUFJaEFOQUNBQklRRU1TUXNnQUVIU0FEWUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXl1QVFzZ0FDZ0NCQ0VRSUFCQkFEWUNCQUpBSUFBZ0VDQUJFS2VBZ0lBQUloQU5BQ0FCSVFFTVNRc2dBRUhUQURZQ0hDQUFJQUUyQWhRZ0FDQVFOZ0lNUVFBaEVBeXRBUXNnQUNnQ0JDRVFJQUJCQURZQ0JBSkFJQUFnRUNBQkVLZUFnSUFBSWhBTkFDQUJJUUVNVFFzZ0FFSGxBRFlDSENBQUlBRTJBaFFnQUNBUU5nSU1RUUFoRUF5c0FRc2dBRUVBTmdJY0lBQWdBVFlDRkNBQVFkeUlnSUFBTmdJUUlBQkJCellDREVFQUlSQU1xd0VMSUJCQlAwY05BU0FCUVFGcUlRRUxRUVVoRUF5UUFRdEJBQ0VRSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUg5a29DQUFEWUNFQ0FBUVFjMkFnd01xQUVMSUFBb0FnUWhFQ0FBUVFBMkFnUUNRQ0FBSUJBZ0FSQ25nSUNBQUNJUURRQWdBU0VCREVJTElBQkIwZ0EyQWh3Z0FDQUJOZ0lVSUFBZ0VEWUNERUVBSVJBTXB3RUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDbmdJQ0FBQ0lRRFFBZ0FTRUJERUlMSUFCQjB3QTJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNcGdFTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkNuZ0lDQUFDSVFEUUFnQVNFQkRFWUxJQUJCNVFBMkFod2dBQ0FCTmdJVUlBQWdFRFlDREVFQUlSQU1wUUVMSUFBb0FnUWhBU0FBUVFBMkFnUUNRQ0FBSUFFZ0ZCQ25nSUNBQUNJQkRRQWdGQ0VCREQ4TElBQkIwZ0EyQWh3Z0FDQVVOZ0lVSUFBZ0FUWUNERUVBSVJBTXBBRUxJQUFvQWdRaEFTQUFRUUEyQWdRQ1FDQUFJQUVnRkJDbmdJQ0FBQ0lCRFFBZ0ZDRUJERDhMSUFCQjB3QTJBaHdnQUNBVU5nSVVJQUFnQVRZQ0RFRUFJUkFNb3dFTElBQW9BZ1FoQVNBQVFRQTJBZ1FDUUNBQUlBRWdGQkNuZ0lDQUFDSUJEUUFnRkNFQkRFTUxJQUJCNVFBMkFod2dBQ0FVTmdJVUlBQWdBVFlDREVFQUlSQU1vZ0VMSUFCQkFEWUNIQ0FBSUJRMkFoUWdBRUhEajRDQUFEWUNFQ0FBUVFjMkFneEJBQ0VRREtFQkN5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnc0K0FnQUEyQWhBZ0FFRUhOZ0lNUVFBaEVBeWdBUXRCQUNFUUlBQkJBRFlDSENBQUlCUTJBaFFnQUVHTW5JQ0FBRFlDRUNBQVFRYzJBZ3dNbndFTElBQkJBRFlDSENBQUlCUTJBaFFnQUVHTW5JQ0FBRFlDRUNBQVFRYzJBZ3hCQUNFUURKNEJDeUFBUVFBMkFod2dBQ0FVTmdJVUlBQkIvcEdBZ0FBMkFoQWdBRUVITmdJTVFRQWhFQXlkQVFzZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVk2YmdJQUFOZ0lRSUFCQkJqWUNERUVBSVJBTW5BRUxJQkJCRlVZTlZ5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnpJNkFnQUEyQWhBZ0FFRWdOZ0lNUVFBaEVBeWJBUXNnQUVFQU5nSUFJQkJCQVdvaEFVRWtJUkFMSUFBZ0VEb0FLU0FBS0FJRUlSQWdBRUVBTmdJRUlBQWdFQ0FCRUt1QWdJQUFJaEFOVkNBQklRRU1QZ3NnQUVFQU5nSUFDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0JEWUNGQ0FBUWZHYmdJQUFOZ0lRSUFCQkJqWUNEQXlYQVFzZ0FVRVZSZzFRSUFCQkFEWUNIQ0FBSUFVMkFoUWdBRUh3aklDQUFEWUNFQ0FBUVJzMkFneEJBQ0VRREpZQkN5QUFLQUlFSVFVZ0FFRUFOZ0lFSUFBZ0JTQVFFS21BZ0lBQUlnVU5BU0FRUVFGcUlRVUxRYTBCSVJBTWV3c2dBRUhCQVRZQ0hDQUFJQVUyQWd3Z0FDQVFRUUZxTmdJVVFRQWhFQXlUQVFzZ0FDZ0NCQ0VHSUFCQkFEWUNCQ0FBSUFZZ0VCQ3BnSUNBQUNJR0RRRWdFRUVCYWlFR0MwR3VBU0VRREhnTElBQkJ3Z0UyQWh3Z0FDQUdOZ0lNSUFBZ0VFRUJhallDRkVFQUlSQU1rQUVMSUFCQkFEWUNIQ0FBSUFjMkFoUWdBRUdYaTRDQUFEWUNFQ0FBUVEwMkFneEJBQ0VRREk4QkN5QUFRUUEyQWh3Z0FDQUlOZ0lVSUFCQjQ1Q0FnQUEyQWhBZ0FFRUpOZ0lNUVFBaEVBeU9BUXNnQUVFQU5nSWNJQUFnQ0RZQ0ZDQUFRWlNOZ0lBQU5nSVFJQUJCSVRZQ0RFRUFJUkFNalFFTFFRRWhGa0VBSVJkQkFDRVVRUUVoRUFzZ0FDQVFPZ0FySUFsQkFXb2hDQUpBQWtBZ0FDMEFMVUVRY1EwQUFrQUNRQUpBSUFBdEFDb09Bd0VBQWdRTElCWkZEUU1NQWdzZ0ZBMEJEQUlMSUJkRkRRRUxJQUFvQWdRaEVDQUFRUUEyQWdRZ0FDQVFJQWdRcllDQWdBQWlFRVVOUFNBQVFja0JOZ0ljSUFBZ0NEWUNGQ0FBSUJBMkFneEJBQ0VRREl3QkN5QUFLQUlFSVFRZ0FFRUFOZ0lFSUFBZ0JDQUlFSzJBZ0lBQUlnUkZEWFlnQUVIS0FUWUNIQ0FBSUFnMkFoUWdBQ0FFTmdJTVFRQWhFQXlMQVFzZ0FDZ0NCQ0VFSUFCQkFEWUNCQ0FBSUFRZ0NSQ3RnSUNBQUNJRVJRMTBJQUJCeXdFMkFod2dBQ0FKTmdJVUlBQWdCRFlDREVFQUlSQU1pZ0VMSUFBb0FnUWhCQ0FBUVFBMkFnUWdBQ0FFSUFvUXJZQ0FnQUFpQkVVTmNpQUFRYzBCTmdJY0lBQWdDallDRkNBQUlBUTJBZ3hCQUNFUURJa0JDd0pBSUFzdEFBQkJVR29pRUVIL0FYRkJDazhOQUNBQUlCQTZBQ29nQzBFQmFpRUtRYllCSVJBTWNBc2dBQ2dDQkNFRUlBQkJBRFlDQkNBQUlBUWdDeEN0Z0lDQUFDSUVSUTF3SUFCQnp3RTJBaHdnQUNBTE5nSVVJQUFnQkRZQ0RFRUFJUkFNaUFFTElBQkJBRFlDSENBQUlBUTJBaFFnQUVHUXM0Q0FBRFlDRUNBQVFRZzJBZ3dnQUVFQU5nSUFRUUFoRUF5SEFRc2dBVUVWUmcwL0lBQkJBRFlDSENBQUlBdzJBaFFnQUVITWpvQ0FBRFlDRUNBQVFTQTJBZ3hCQUNFUURJWUJDeUFBUVlFRU93RW9JQUFvQWdRaEVDQUFRZ0EzQXdBZ0FDQVFJQXhCQVdvaURCQ3JnSUNBQUNJUVJRMDRJQUJCMHdFMkFod2dBQ0FNTmdJVUlBQWdFRFlDREVFQUlSQU1oUUVMSUFCQkFEWUNBQXRCQUNFUUlBQkJBRFlDSENBQUlBUTJBaFFnQUVIWW00Q0FBRFlDRUNBQVFRZzJBZ3dNZ3dFTElBQW9BZ1FoRUNBQVFnQTNBd0FnQUNBUUlBdEJBV29pQ3hDcmdJQ0FBQ0lRRFFGQnhnRWhFQXhwQ3lBQVFRSTZBQ2dNVlFzZ0FFSFZBVFlDSENBQUlBczJBaFFnQUNBUU5nSU1RUUFoRUF5QUFRc2dFRUVWUmcwM0lBQkJBRFlDSENBQUlBUTJBaFFnQUVHa2pJQ0FBRFlDRUNBQVFSQTJBZ3hCQUNFUURIOExJQUF0QURSQkFVY05OQ0FBSUFRZ0FoQzhnSUNBQUNJUVJRMDBJQkJCRlVjTk5TQUFRZHdCTmdJY0lBQWdCRFlDRkNBQVFkV1dnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1mZ3RCQUNFUUlBQkJBRFlDSENBQVFhK0xnSUFBTmdJUUlBQkJBallDRENBQUlCUkJBV28yQWhRTWZRdEJBQ0VRREdNTFFRSWhFQXhpQzBFTklSQU1ZUXRCRHlFUURHQUxRU1VoRUF4ZkMwRVRJUkFNWGd0QkZTRVFERjBMUVJZaEVBeGNDMEVYSVJBTVd3dEJHQ0VRREZvTFFSa2hFQXhaQzBFYUlSQU1XQXRCR3lFUURGY0xRUndoRUF4V0MwRWRJUkFNVlF0Qkh5RVFERlFMUVNFaEVBeFRDMEVqSVJBTVVndEJ4Z0FoRUF4UkMwRXVJUkFNVUF0Qkx5RVFERThMUVRzaEVBeE9DMEU5SVJBTVRRdEJ5QUFoRUF4TUMwSEpBQ0VRREVzTFFjc0FJUkFNU2d0QnpBQWhFQXhKQzBIT0FDRVFERWdMUWRFQUlSQU1Sd3RCMVFBaEVBeEdDMEhZQUNFUURFVUxRZGtBSVJBTVJBdEIyd0FoRUF4REMwSGtBQ0VRREVJTFFlVUFJUkFNUVF0QjhRQWhFQXhBQzBIMEFDRVFERDhMUVkwQklSQU1QZ3RCbHdFaEVBdzlDMEdwQVNFUUREd0xRYXdCSVJBTU93dEJ3QUVoRUF3NkMwRzVBU0VRRERrTFFhOEJJUkFNT0F0QnNRRWhFQXczQzBHeUFTRVFERFlMUWJRQklSQU1OUXRCdFFFaEVBdzBDMEc2QVNFUURETUxRYjBCSVJBTU1ndEJ2d0VoRUF3eEMwSEJBU0VRRERBTElBQkJBRFlDSENBQUlBUTJBaFFnQUVIcGk0Q0FBRFlDRUNBQVFSODJBZ3hCQUNFUURFZ0xJQUJCMndFMkFod2dBQ0FFTmdJVUlBQkIrcGFBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXhIQ3lBQVFmZ0FOZ0ljSUFBZ0REWUNGQ0FBUWNxWWdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTVJnc2dBRUhSQURZQ0hDQUFJQVUyQWhRZ0FFR3dsNENBQURZQ0VDQUFRUlUyQWd4QkFDRVFERVVMSUFCQitRQTJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNUkFzZ0FFSDRBRFlDSENBQUlBRTJBaFFnQUVIS21JQ0FBRFlDRUNBQVFSVTJBZ3hCQUNFUURFTUxJQUJCNUFBMkFod2dBQ0FCTmdJVUlBQkI0NWVBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXhDQ3lBQVFkY0FOZ0ljSUFBZ0FUWUNGQ0FBUWNtWGdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTVFRc2dBRUVBTmdJY0lBQWdBVFlDRkNBQVFibU5nSUFBTmdJUUlBQkJHallDREVFQUlSQU1RQXNnQUVIQ0FEWUNIQ0FBSUFFMkFoUWdBRUhqbUlDQUFEWUNFQ0FBUVJVMkFneEJBQ0VRREQ4TElBQkJBRFlDQkNBQUlBOGdEeEN4Z0lDQUFDSUVSUTBCSUFCQk9qWUNIQ0FBSUFRMkFnd2dBQ0FQUVFGcU5nSVVRUUFoRUF3K0N5QUFLQUlFSVFRZ0FFRUFOZ0lFQWtBZ0FDQUVJQUVRc1lDQWdBQWlCRVVOQUNBQVFUczJBaHdnQUNBRU5nSU1JQUFnQVVFQmFqWUNGRUVBSVJBTVBnc2dBVUVCYWlFQkRDMExJQTlCQVdvaEFRd3RDeUFBUVFBMkFod2dBQ0FQTmdJVUlBQkI1SktBZ0FBMkFoQWdBRUVFTmdJTVFRQWhFQXc3Q3lBQVFUWTJBaHdnQUNBRU5nSVVJQUFnQWpZQ0RFRUFJUkFNT2dzZ0FFRXVOZ0ljSUFBZ0RqWUNGQ0FBSUFRMkFneEJBQ0VRRERrTElBQkIwQUEyQWh3Z0FDQUJOZ0lVSUFCQmtaaUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBdzRDeUFOUVFGcUlRRU1MQXNnQUVFVk5nSWNJQUFnQVRZQ0ZDQUFRWUtaZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNTmdzZ0FFRWJOZ0ljSUFBZ0FUWUNGQ0FBUVpHWGdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTU5Rc2dBRUVQTmdJY0lBQWdBVFlDRkNBQVFaR1hnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1OQXNnQUVFTE5nSWNJQUFnQVRZQ0ZDQUFRWkdYZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNTXdzZ0FFRWFOZ0ljSUFBZ0FUWUNGQ0FBUVlLWmdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTU1nc2dBRUVMTmdJY0lBQWdBVFlDRkNBQVFZS1pnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1NUXNnQUVFS05nSWNJQUFnQVRZQ0ZDQUFRZVNXZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNTUFzZ0FFRWVOZ0ljSUFBZ0FUWUNGQ0FBUWZtWGdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTUx3c2dBRUVBTmdJY0lBQWdFRFlDRkNBQVFkcU5nSUFBTmdJUUlBQkJGRFlDREVFQUlSQU1MZ3NnQUVFRU5nSWNJQUFnQVRZQ0ZDQUFRYkNZZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNTFFzZ0FFRUFOZ0lBSUF0QkFXb2hDd3RCdUFFaEVBd1NDeUFBUVFBMkFnQWdFRUVCYWlFQlFmVUFJUkFNRVFzZ0FTRUJBa0FnQUMwQUtVRUZSdzBBUWVNQUlSQU1FUXRCNGdBaEVBd1FDMEVBSVJBZ0FFRUFOZ0ljSUFCQjVKR0FnQUEyQWhBZ0FFRUhOZ0lNSUFBZ0ZFRUJhallDRkF3b0N5QUFRUUEyQWdBZ0YwRUJhaUVCUWNBQUlSQU1EZ3RCQVNFQkN5QUFJQUU2QUN3Z0FFRUFOZ0lBSUJkQkFXb2hBUXRCS0NFUURBc0xJQUVoQVF0Qk9DRVFEQWtMQWtBZ0FTSVBJQUpHRFFBRFFBSkFJQTh0QUFCQmdMNkFnQUJxTFFBQUlnRkJBVVlOQUNBQlFRSkhEUU1nRDBFQmFpRUJEQVFMSUE5QkFXb2lEeUFDUncwQUMwRStJUkFNSWd0QlBpRVFEQ0VMSUFCQkFEb0FMQ0FQSVFFTUFRdEJDeUVRREFZTFFUb2hFQXdGQ3lBQlFRRnFJUUZCTFNFUURBUUxJQUFnQVRvQUxDQUFRUUEyQWdBZ0ZrRUJhaUVCUVF3aEVBd0RDeUFBUVFBMkFnQWdGMEVCYWlFQlFRb2hFQXdDQ3lBQVFRQTJBZ0FMSUFCQkFEb0FMQ0FOSVFGQkNTRVFEQUFMQzBFQUlSQWdBRUVBTmdJY0lBQWdDellDRkNBQVFjMlFnSUFBTmdJUUlBQkJDVFlDREF3WEMwRUFJUkFnQUVFQU5nSWNJQUFnQ2pZQ0ZDQUFRZW1LZ0lBQU5nSVFJQUJCQ1RZQ0RBd1dDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0NUWUNGQ0FBUWJlUWdJQUFOZ0lRSUFCQkNUWUNEQXdWQzBFQUlSQWdBRUVBTmdJY0lBQWdDRFlDRkNBQVFaeVJnSUFBTmdJUUlBQkJDVFlDREF3VUMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRYzJRZ0lBQU5nSVFJQUJCQ1RZQ0RBd1RDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWVtS2dJQUFOZ0lRSUFCQkNUWUNEQXdTQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFiZVFnSUFBTmdJUUlBQkJDVFlDREF3UkMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRWnlSZ0lBQU5nSVFJQUJCQ1RZQ0RBd1FDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVplVmdJQUFOZ0lRSUFCQkR6WUNEQXdQQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFaZVZnSUFBTmdJUUlBQkJEellDREF3T0MwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRY0NTZ0lBQU5nSVFJQUJCQ3pZQ0RBd05DMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVpXSmdJQUFOZ0lRSUFCQkN6WUNEQXdNQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFlR1BnSUFBTmdJUUlBQkJDallDREF3TEMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZnVQZ0lBQU5nSVFJQUJCQ2pZQ0RBd0tDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWZHWmdJQUFOZ0lRSUFCQkFqWUNEQXdKQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFjU1VnSUFBTmdJUUlBQkJBallDREF3SUMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZktWZ0lBQU5nSVFJQUJCQWpZQ0RBd0hDeUFBUVFJMkFod2dBQ0FCTmdJVUlBQkJuSnFBZ0FBMkFoQWdBRUVXTmdJTVFRQWhFQXdHQzBFQklSQU1CUXRCMUFBaEVDQUJJZ1FnQWtZTkJDQURRUWhxSUFBZ0JDQUNRZGpDZ0lBQVFRb1F4WUNBZ0FBZ0F5Z0NEQ0VFSUFNb0FnZ09Bd0VFQWdBTEVNcUFnSUFBQUFzZ0FFRUFOZ0ljSUFCQnRacUFnQUEyQWhBZ0FFRVhOZ0lNSUFBZ0JFRUJhallDRkVFQUlSQU1BZ3NnQUVFQU5nSWNJQUFnQkRZQ0ZDQUFRY3FhZ0lBQU5nSVFJQUJCQ1RZQ0RFRUFJUkFNQVFzQ1FDQUJJZ1FnQWtjTkFFRWlJUkFNQVFzZ0FFR0pnSUNBQURZQ0NDQUFJQVEyQWdSQklTRVFDeUFEUVJCcUpJQ0FnSUFBSUJBTHJ3RUJBbjhnQVNnQ0FDRUdBa0FDUUNBQ0lBTkdEUUFnQkNBR2FpRUVJQVlnQTJvZ0Ftc2hCeUFDSUFaQmYzTWdCV29pQm1vaEJRTkFBa0FnQWkwQUFDQUVMUUFBUmcwQVFRSWhCQXdEQ3dKQUlBWU5BRUVBSVFRZ0JTRUNEQU1MSUFaQmYyb2hCaUFFUVFGcUlRUWdBa0VCYWlJQ0lBTkhEUUFMSUFjaEJpQURJUUlMSUFCQkFUWUNBQ0FCSUFZMkFnQWdBQ0FDTmdJRUR3c2dBVUVBTmdJQUlBQWdCRFlDQUNBQUlBSTJBZ1FMQ2dBZ0FCREhnSUNBQUF2eU5nRUxmeU9BZ0lDQUFFRVFheUlCSklDQWdJQUFBa0JCQUNnQ29OQ0FnQUFOQUVFQUVNdUFnSUFBUVlEVWhJQUFheUlDUWRrQVNRMEFRUUFoQXdKQVFRQW9BdURUZ0lBQUlnUU5BRUVBUW44M0F1elRnSUFBUVFCQ2dJQ0VnSUNBd0FBM0F1VFRnSUFBUVFBZ0FVRUlha0Z3Y1VIWXF0V3FCWE1pQkRZQzROT0FnQUJCQUVFQU5nTDAwNENBQUVFQVFRQTJBc1RUZ0lBQUMwRUFJQUkyQXN6VGdJQUFRUUJCZ05TRWdBQTJBc2pUZ0lBQVFRQkJnTlNFZ0FBMkFwalFnSUFBUVFBZ0JEWUNyTkNBZ0FCQkFFRi9OZ0tvMElDQUFBTkFJQU5CeE5DQWdBQnFJQU5CdU5DQWdBQnFJZ1EyQWdBZ0JDQURRYkRRZ0lBQWFpSUZOZ0lBSUFOQnZOQ0FnQUJxSUFVMkFnQWdBMEhNMElDQUFHb2dBMEhBMElDQUFHb2lCVFlDQUNBRklBUTJBZ0FnQTBIVTBJQ0FBR29nQTBISTBJQ0FBR29pQkRZQ0FDQUVJQVUyQWdBZ0EwSFEwSUNBQUdvZ0JEWUNBQ0FEUVNCcUlnTkJnQUpIRFFBTFFZRFVoSUFBUVhoQmdOU0VnQUJyUVE5eFFRQkJnTlNFZ0FCQkNHcEJEM0ViSWdOcUlnUkJCR29nQWtGSWFpSUZJQU5ySWdOQkFYSTJBZ0JCQUVFQUtBTHcwNENBQURZQ3BOQ0FnQUJCQUNBRE5nS1UwSUNBQUVFQUlBUTJBcURRZ0lBQVFZRFVoSUFBSUFWcVFUZzJBZ1FMQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQUJCN0FGTERRQUNRRUVBS0FLSTBJQ0FBQ0lHUVJBZ0FFRVRha0Z3Y1NBQVFRdEpHeUlDUVFOMklnUjJJZ05CQTNGRkRRQUNRQUpBSUFOQkFYRWdCSEpCQVhNaUJVRURkQ0lFUWJEUWdJQUFhaUlESUFSQnVOQ0FnQUJxS0FJQUlnUW9BZ2dpQWtjTkFFRUFJQVpCZmlBRmQzRTJBb2pRZ0lBQURBRUxJQU1nQWpZQ0NDQUNJQU0yQWd3TElBUkJDR29oQXlBRUlBVkJBM1FpQlVFRGNqWUNCQ0FFSUFWcUlnUWdCQ2dDQkVFQmNqWUNCQXdNQ3lBQ1FRQW9BcERRZ0lBQUlnZE5EUUVDUUNBRFJRMEFBa0FDUUNBRElBUjBRUUlnQkhRaUEwRUFJQU5yY25FaUEwRUFJQU5yY1VGL2FpSURJQU5CREhaQkVIRWlBM1lpQkVFRmRrRUljU0lGSUFOeUlBUWdCWFlpQTBFQ2RrRUVjU0lFY2lBRElBUjJJZ05CQVhaQkFuRWlCSElnQXlBRWRpSURRUUYyUVFGeElnUnlJQU1nQkhacUlnUkJBM1FpQTBHdzBJQ0FBR29pQlNBRFFialFnSUFBYWlnQ0FDSURLQUlJSWdCSERRQkJBQ0FHUVg0Z0JIZHhJZ1kyQW9qUWdJQUFEQUVMSUFVZ0FEWUNDQ0FBSUFVMkFnd0xJQU1nQWtFRGNqWUNCQ0FESUFSQkEzUWlCR29nQkNBQ2F5SUZOZ0lBSUFNZ0Ftb2lBQ0FGUVFGeU5nSUVBa0FnQjBVTkFDQUhRWGh4UWJEUWdJQUFhaUVDUVFBb0FwelFnSUFBSVFRQ1FBSkFJQVpCQVNBSFFRTjJkQ0lJY1EwQVFRQWdCaUFJY2pZQ2lOQ0FnQUFnQWlFSURBRUxJQUlvQWdnaENBc2dDQ0FFTmdJTUlBSWdCRFlDQ0NBRUlBSTJBZ3dnQkNBSU5nSUlDeUFEUVFocUlRTkJBQ0FBTmdLYzBJQ0FBRUVBSUFVMkFwRFFnSUFBREF3TFFRQW9Bb3pRZ0lBQUlnbEZEUUVnQ1VFQUlBbHJjVUYvYWlJRElBTkJESFpCRUhFaUEzWWlCRUVGZGtFSWNTSUZJQU55SUFRZ0JYWWlBMEVDZGtFRWNTSUVjaUFESUFSMklnTkJBWFpCQW5FaUJISWdBeUFFZGlJRFFRRjJRUUZ4SWdSeUlBTWdCSFpxUVFKMFFialNnSUFBYWlnQ0FDSUFLQUlFUVhoeElBSnJJUVFnQUNFRkFrQURRQUpBSUFVb0FoQWlBdzBBSUFWQkZHb29BZ0FpQTBVTkFnc2dBeWdDQkVGNGNTQUNheUlGSUFRZ0JTQUVTU0lGR3lFRUlBTWdBQ0FGR3lFQUlBTWhCUXdBQ3dzZ0FDZ0NHQ0VLQWtBZ0FDZ0NEQ0lJSUFCR0RRQWdBQ2dDQ0NJRFFRQW9BcGpRZ0lBQVNSb2dDQ0FETmdJSUlBTWdDRFlDREF3TEN3SkFJQUJCRkdvaUJTZ0NBQ0lERFFBZ0FDZ0NFQ0lEUlEwRElBQkJFR29oQlFzRFFDQUZJUXNnQXlJSVFSUnFJZ1VvQWdBaUF3MEFJQWhCRUdvaEJTQUlLQUlRSWdNTkFBc2dDMEVBTmdJQURBb0xRWDhoQWlBQVFiOS9TdzBBSUFCQkUyb2lBMEZ3Y1NFQ1FRQW9Bb3pRZ0lBQUlnZEZEUUJCQUNFTEFrQWdBa0dBQWtrTkFFRWZJUXNnQWtILy8vOEhTdzBBSUFOQkNIWWlBeUFEUVlEK1AycEJFSFpCQ0hFaUEzUWlCQ0FFUVlEZ0gycEJFSFpCQkhFaUJIUWlCU0FGUVlDQUQycEJFSFpCQW5FaUJYUkJEM1lnQXlBRWNpQUZjbXNpQTBFQmRDQUNJQU5CRldwMlFRRnhja0VjYWlFTEMwRUFJQUpySVFRQ1FBSkFBa0FDUUNBTFFRSjBRYmpTZ0lBQWFpZ0NBQ0lGRFFCQkFDRURRUUFoQ0F3QkMwRUFJUU1nQWtFQVFSa2dDMEVCZG1zZ0MwRWZSaHQwSVFCQkFDRUlBMEFDUUNBRktBSUVRWGh4SUFKcklnWWdCRThOQUNBR0lRUWdCU0VJSUFZTkFFRUFJUVFnQlNFSUlBVWhBd3dEQ3lBRElBVkJGR29vQWdBaUJpQUdJQVVnQUVFZGRrRUVjV3BCRUdvb0FnQWlCVVliSUFNZ0Joc2hBeUFBUVFGMElRQWdCUTBBQ3dzQ1FDQURJQWh5RFFCQkFDRUlRUUlnQzNRaUEwRUFJQU5yY2lBSGNTSURSUTBESUFOQkFDQURhM0ZCZjJvaUF5QURRUXgyUVJCeElnTjJJZ1ZCQlhaQkNIRWlBQ0FEY2lBRklBQjJJZ05CQW5aQkJIRWlCWElnQXlBRmRpSURRUUYyUVFKeElnVnlJQU1nQlhZaUEwRUJka0VCY1NJRmNpQURJQVYyYWtFQ2RFRzQwb0NBQUdvb0FnQWhBd3NnQTBVTkFRc0RRQ0FES0FJRVFYaHhJQUpySWdZZ0JFa2hBQUpBSUFNb0FoQWlCUTBBSUFOQkZHb29BZ0FoQlFzZ0JpQUVJQUFiSVFRZ0F5QUlJQUFiSVFnZ0JTRURJQVVOQUFzTElBaEZEUUFnQkVFQUtBS1EwSUNBQUNBQ2EwOE5BQ0FJS0FJWUlRc0NRQ0FJS0FJTUlnQWdDRVlOQUNBSUtBSUlJZ05CQUNnQ21OQ0FnQUJKR2lBQUlBTTJBZ2dnQXlBQU5nSU1EQWtMQWtBZ0NFRVVhaUlGS0FJQUlnTU5BQ0FJS0FJUUlnTkZEUU1nQ0VFUWFpRUZDd05BSUFVaEJpQURJZ0JCRkdvaUJTZ0NBQ0lERFFBZ0FFRVFhaUVGSUFBb0FoQWlBdzBBQ3lBR1FRQTJBZ0FNQ0FzQ1FFRUFLQUtRMElDQUFDSURJQUpKRFFCQkFDZ0NuTkNBZ0FBaEJBSkFBa0FnQXlBQ2F5SUZRUkJKRFFBZ0JDQUNhaUlBSUFWQkFYSTJBZ1JCQUNBRk5nS1EwSUNBQUVFQUlBQTJBcHpRZ0lBQUlBUWdBMm9nQlRZQ0FDQUVJQUpCQTNJMkFnUU1BUXNnQkNBRFFRTnlOZ0lFSUFRZ0Eyb2lBeUFES0FJRVFRRnlOZ0lFUVFCQkFEWUNuTkNBZ0FCQkFFRUFOZ0tRMElDQUFBc2dCRUVJYWlFRERBb0xBa0JCQUNnQ2xOQ0FnQUFpQUNBQ1RRMEFRUUFvQXFEUWdJQUFJZ01nQW1vaUJDQUFJQUpySWdWQkFYSTJBZ1JCQUNBRk5nS1UwSUNBQUVFQUlBUTJBcURRZ0lBQUlBTWdBa0VEY2pZQ0JDQURRUWhxSVFNTUNnc0NRQUpBUVFBb0F1RFRnSUFBUlEwQVFRQW9BdWpUZ0lBQUlRUU1BUXRCQUVKL053THMwNENBQUVFQVFvQ0FoSUNBZ01BQU53TGswNENBQUVFQUlBRkJER3BCY0hGQjJLclZxZ1Z6TmdMZzA0Q0FBRUVBUVFBMkF2VFRnSUFBUVFCQkFEWUN4Tk9BZ0FCQmdJQUVJUVFMUVFBaEF3SkFJQVFnQWtISEFHb2lCMm9pQmtFQUlBUnJJZ3R4SWdnZ0Frc05BRUVBUVRBMkF2alRnSUFBREFvTEFrQkJBQ2dDd05PQWdBQWlBMFVOQUFKQVFRQW9BcmpUZ0lBQUlnUWdDR29pQlNBRVRRMEFJQVVnQTAwTkFRdEJBQ0VEUVFCQk1EWUMrTk9BZ0FBTUNndEJBQzBBeE5PQWdBQkJCSEVOQkFKQUFrQUNRRUVBS0FLZzBJQ0FBQ0lFUlEwQVFjalRnSUFBSVFNRFFBSkFJQU1vQWdBaUJTQUVTdzBBSUFVZ0F5Z0NCR29nQkVzTkF3c2dBeWdDQ0NJRERRQUxDMEVBRU11QWdJQUFJZ0JCZjBZTkJTQUlJUVlDUUVFQUtBTGswNENBQUNJRFFYOXFJZ1FnQUhGRkRRQWdDQ0FBYXlBRUlBQnFRUUFnQTJ0eGFpRUdDeUFHSUFKTkRRVWdCa0grLy8vL0Iwc05CUUpBUVFBb0FzRFRnSUFBSWdORkRRQkJBQ2dDdU5PQWdBQWlCQ0FHYWlJRklBUk5EUVlnQlNBRFN3MEdDeUFHRU11QWdJQUFJZ01nQUVjTkFRd0hDeUFHSUFCcklBdHhJZ1pCL3YvLy93ZExEUVFnQmhETGdJQ0FBQ0lBSUFNb0FnQWdBeWdDQkdwR0RRTWdBQ0VEQ3dKQUlBTkJmMFlOQUNBQ1FjZ0FhaUFHVFEwQUFrQWdCeUFHYTBFQUtBTG8wNENBQUNJRWFrRUFJQVJyY1NJRVFmNy8vLzhIVFEwQUlBTWhBQXdIQ3dKQUlBUVF5NENBZ0FCQmYwWU5BQ0FFSUFacUlRWWdBeUVBREFjTFFRQWdCbXNReTRDQWdBQWFEQVFMSUFNaEFDQURRWDlIRFFVTUF3dEJBQ0VJREFjTFFRQWhBQXdGQ3lBQVFYOUhEUUlMUVFCQkFDZ0N4Tk9BZ0FCQkJISTJBc1RUZ0lBQUN5QUlRZjcvLy84SFN3MEJJQWdReTRDQWdBQWhBRUVBRU11QWdJQUFJUU1nQUVGL1JnMEJJQU5CZjBZTkFTQUFJQU5QRFFFZ0F5QUFheUlHSUFKQk9HcE5EUUVMUVFCQkFDZ0N1Tk9BZ0FBZ0Jtb2lBellDdU5PQWdBQUNRQ0FEUVFBb0FyelRnSUFBVFEwQVFRQWdBellDdk5PQWdBQUxBa0FDUUFKQUFrQkJBQ2dDb05DQWdBQWlCRVVOQUVISTA0Q0FBQ0VEQTBBZ0FDQURLQUlBSWdVZ0F5Z0NCQ0lJYWtZTkFpQURLQUlJSWdNTkFBd0RDd3NDUUFKQVFRQW9BcGpRZ0lBQUlnTkZEUUFnQUNBRFR3MEJDMEVBSUFBMkFwalFnSUFBQzBFQUlRTkJBQ0FHTmdMTTA0Q0FBRUVBSUFBMkFzalRnSUFBUVFCQmZ6WUNxTkNBZ0FCQkFFRUFLQUxnMDRDQUFEWUNyTkNBZ0FCQkFFRUFOZ0xVMDRDQUFBTkFJQU5CeE5DQWdBQnFJQU5CdU5DQWdBQnFJZ1EyQWdBZ0JDQURRYkRRZ0lBQWFpSUZOZ0lBSUFOQnZOQ0FnQUJxSUFVMkFnQWdBMEhNMElDQUFHb2dBMEhBMElDQUFHb2lCVFlDQUNBRklBUTJBZ0FnQTBIVTBJQ0FBR29nQTBISTBJQ0FBR29pQkRZQ0FDQUVJQVUyQWdBZ0EwSFEwSUNBQUdvZ0JEWUNBQ0FEUVNCcUlnTkJnQUpIRFFBTElBQkJlQ0FBYTBFUGNVRUFJQUJCQ0dwQkQzRWJJZ05xSWdRZ0JrRklhaUlGSUFOcklnTkJBWEkyQWdSQkFFRUFLQUx3MDRDQUFEWUNwTkNBZ0FCQkFDQUROZ0tVMElDQUFFRUFJQVEyQXFEUWdJQUFJQUFnQldwQk9EWUNCQXdDQ3lBRExRQU1RUWh4RFFBZ0JDQUZTUTBBSUFRZ0FFOE5BQ0FFUVhnZ0JHdEJEM0ZCQUNBRVFRaHFRUTl4R3lJRmFpSUFRUUFvQXBUUWdJQUFJQVpxSWdzZ0JXc2lCVUVCY2pZQ0JDQURJQWdnQm1vMkFnUkJBRUVBS0FMdzA0Q0FBRFlDcE5DQWdBQkJBQ0FGTmdLVTBJQ0FBRUVBSUFBMkFxRFFnSUFBSUFRZ0MycEJPRFlDQkF3QkN3SkFJQUJCQUNnQ21OQ0FnQUFpQ0U4TkFFRUFJQUEyQXBqUWdJQUFJQUFoQ0FzZ0FDQUdhaUVGUWNqVGdJQUFJUU1DUUFKQUFrQUNRQUpBQWtBQ1FBTkFJQU1vQWdBZ0JVWU5BU0FES0FJSUlnTU5BQXdDQ3dzZ0F5MEFERUVJY1VVTkFRdEJ5Tk9BZ0FBaEF3TkFBa0FnQXlnQ0FDSUZJQVJMRFFBZ0JTQURLQUlFYWlJRklBUkxEUU1MSUFNb0FnZ2hBd3dBQ3dzZ0F5QUFOZ0lBSUFNZ0F5Z0NCQ0FHYWpZQ0JDQUFRWGdnQUd0QkQzRkJBQ0FBUVFocVFROXhHMm9pQ3lBQ1FRTnlOZ0lFSUFWQmVDQUZhMEVQY1VFQUlBVkJDR3BCRDNFYmFpSUdJQXNnQW1vaUFtc2hBd0pBSUFZZ0JFY05BRUVBSUFJMkFxRFFnSUFBUVFCQkFDZ0NsTkNBZ0FBZ0Eyb2lBellDbE5DQWdBQWdBaUFEUVFGeU5nSUVEQU1MQWtBZ0JrRUFLQUtjMElDQUFFY05BRUVBSUFJMkFwelFnSUFBUVFCQkFDZ0NrTkNBZ0FBZ0Eyb2lBellDa05DQWdBQWdBaUFEUVFGeU5nSUVJQUlnQTJvZ0F6WUNBQXdEQ3dKQUlBWW9BZ1FpQkVFRGNVRUJSdzBBSUFSQmVIRWhCd0pBQWtBZ0JFSC9BVXNOQUNBR0tBSUlJZ1VnQkVFRGRpSUlRUU4wUWJEUWdJQUFhaUlBUmhvQ1FDQUdLQUlNSWdRZ0JVY05BRUVBUVFBb0FvalFnSUFBUVg0Z0NIZHhOZ0tJMElDQUFBd0NDeUFFSUFCR0dpQUVJQVUyQWdnZ0JTQUVOZ0lNREFFTElBWW9BaGdoQ1FKQUFrQWdCaWdDRENJQUlBWkdEUUFnQmlnQ0NDSUVJQWhKR2lBQUlBUTJBZ2dnQkNBQU5nSU1EQUVMQWtBZ0JrRVVhaUlFS0FJQUlnVU5BQ0FHUVJCcUlnUW9BZ0FpQlEwQVFRQWhBQXdCQ3dOQUlBUWhDQ0FGSWdCQkZHb2lCQ2dDQUNJRkRRQWdBRUVRYWlFRUlBQW9BaEFpQlEwQUN5QUlRUUEyQWdBTElBbEZEUUFDUUFKQUlBWWdCaWdDSENJRlFRSjBRYmpTZ0lBQWFpSUVLQUlBUncwQUlBUWdBRFlDQUNBQURRRkJBRUVBS0FLTTBJQ0FBRUYrSUFWM2NUWUNqTkNBZ0FBTUFnc2dDVUVRUVJRZ0NTZ0NFQ0FHUmh0cUlBQTJBZ0FnQUVVTkFRc2dBQ0FKTmdJWUFrQWdCaWdDRUNJRVJRMEFJQUFnQkRZQ0VDQUVJQUEyQWhnTElBWW9BaFFpQkVVTkFDQUFRUlJxSUFRMkFnQWdCQ0FBTmdJWUN5QUhJQU5xSVFNZ0JpQUhhaUlHS0FJRUlRUUxJQVlnQkVGK2NUWUNCQ0FDSUFOcUlBTTJBZ0FnQWlBRFFRRnlOZ0lFQWtBZ0EwSC9BVXNOQUNBRFFYaHhRYkRRZ0lBQWFpRUVBa0FDUUVFQUtBS0kwSUNBQUNJRlFRRWdBMEVEZG5RaUEzRU5BRUVBSUFVZ0EzSTJBb2pRZ0lBQUlBUWhBd3dCQ3lBRUtBSUlJUU1MSUFNZ0FqWUNEQ0FFSUFJMkFnZ2dBaUFFTmdJTUlBSWdBellDQ0F3REMwRWZJUVFDUUNBRFFmLy8vd2RMRFFBZ0EwRUlkaUlFSUFSQmdQNC9ha0VRZGtFSWNTSUVkQ0lGSUFWQmdPQWZha0VRZGtFRWNTSUZkQ0lBSUFCQmdJQVBha0VRZGtFQ2NTSUFkRUVQZGlBRUlBVnlJQUJ5YXlJRVFRRjBJQU1nQkVFVmFuWkJBWEZ5UVJ4cUlRUUxJQUlnQkRZQ0hDQUNRZ0EzQWhBZ0JFRUNkRUc0MG9DQUFHb2hCUUpBUVFBb0FvelFnSUFBSWdCQkFTQUVkQ0lJY1EwQUlBVWdBallDQUVFQUlBQWdDSEkyQW96UWdJQUFJQUlnQlRZQ0dDQUNJQUkyQWdnZ0FpQUNOZ0lNREFNTElBTkJBRUVaSUFSQkFYWnJJQVJCSDBZYmRDRUVJQVVvQWdBaEFBTkFJQUFpQlNnQ0JFRjRjU0FEUmcwQ0lBUkJIWFloQUNBRVFRRjBJUVFnQlNBQVFRUnhha0VRYWlJSUtBSUFJZ0FOQUFzZ0NDQUNOZ0lBSUFJZ0JUWUNHQ0FDSUFJMkFnd2dBaUFDTmdJSURBSUxJQUJCZUNBQWEwRVBjVUVBSUFCQkNHcEJEM0ViSWdOcUlnc2dCa0ZJYWlJSUlBTnJJZ05CQVhJMkFnUWdBQ0FJYWtFNE5nSUVJQVFnQlVFM0lBVnJRUTl4UVFBZ0JVRkpha0VQY1J0cVFVRnFJZ2dnQ0NBRVFSQnFTUnNpQ0VFak5nSUVRUUJCQUNnQzhOT0FnQUEyQXFUUWdJQUFRUUFnQXpZQ2xOQ0FnQUJCQUNBTE5nS2cwSUNBQUNBSVFSQnFRUUFwQXREVGdJQUFOd0lBSUFoQkFDa0N5Tk9BZ0FBM0FnaEJBQ0FJUVFocU5nTFEwNENBQUVFQUlBWTJBc3pUZ0lBQVFRQWdBRFlDeU5PQWdBQkJBRUVBTmdMVTA0Q0FBQ0FJUVNScUlRTURRQ0FEUVFjMkFnQWdBMEVFYWlJRElBVkpEUUFMSUFnZ0JFWU5BeUFJSUFnb0FnUkJmbkUyQWdRZ0NDQUlJQVJySWdBMkFnQWdCQ0FBUVFGeU5nSUVBa0FnQUVIL0FVc05BQ0FBUVhoeFFiRFFnSUFBYWlFREFrQUNRRUVBS0FLSTBJQ0FBQ0lGUVFFZ0FFRURkblFpQUhFTkFFRUFJQVVnQUhJMkFvalFnSUFBSUFNaEJRd0JDeUFES0FJSUlRVUxJQVVnQkRZQ0RDQURJQVEyQWdnZ0JDQUROZ0lNSUFRZ0JUWUNDQXdFQzBFZklRTUNRQ0FBUWYvLy93ZExEUUFnQUVFSWRpSURJQU5CZ1A0L2FrRVFka0VJY1NJRGRDSUZJQVZCZ09BZmFrRVFka0VFY1NJRmRDSUlJQWhCZ0lBUGFrRVFka0VDY1NJSWRFRVBkaUFESUFWeUlBaHlheUlEUVFGMElBQWdBMEVWYW5aQkFYRnlRUnhxSVFNTElBUWdBellDSENBRVFnQTNBaEFnQTBFQ2RFRzQwb0NBQUdvaEJRSkFRUUFvQW96UWdJQUFJZ2hCQVNBRGRDSUdjUTBBSUFVZ0JEWUNBRUVBSUFnZ0JuSTJBb3pRZ0lBQUlBUWdCVFlDR0NBRUlBUTJBZ2dnQkNBRU5nSU1EQVFMSUFCQkFFRVpJQU5CQVhacklBTkJIMFliZENFRElBVW9BZ0FoQ0FOQUlBZ2lCU2dDQkVGNGNTQUFSZzBESUFOQkhYWWhDQ0FEUVFGMElRTWdCU0FJUVFSeGFrRVFhaUlHS0FJQUlnZ05BQXNnQmlBRU5nSUFJQVFnQlRZQ0dDQUVJQVEyQWd3Z0JDQUVOZ0lJREFNTElBVW9BZ2dpQXlBQ05nSU1JQVVnQWpZQ0NDQUNRUUEyQWhnZ0FpQUZOZ0lNSUFJZ0F6WUNDQXNnQzBFSWFpRUREQVVMSUFVb0FnZ2lBeUFFTmdJTUlBVWdCRFlDQ0NBRVFRQTJBaGdnQkNBRk5nSU1JQVFnQXpZQ0NBdEJBQ2dDbE5DQWdBQWlBeUFDVFEwQVFRQW9BcURRZ0lBQUlnUWdBbW9pQlNBRElBSnJJZ05CQVhJMkFnUkJBQ0FETmdLVTBJQ0FBRUVBSUFVMkFxRFFnSUFBSUFRZ0FrRURjallDQkNBRVFRaHFJUU1NQXd0QkFDRURRUUJCTURZQytOT0FnQUFNQWdzQ1FDQUxSUTBBQWtBQ1FDQUlJQWdvQWh3aUJVRUNkRUc0MG9DQUFHb2lBeWdDQUVjTkFDQURJQUEyQWdBZ0FBMEJRUUFnQjBGK0lBVjNjU0lITmdLTTBJQ0FBQXdDQ3lBTFFSQkJGQ0FMS0FJUUlBaEdHMm9nQURZQ0FDQUFSUTBCQ3lBQUlBczJBaGdDUUNBSUtBSVFJZ05GRFFBZ0FDQUROZ0lRSUFNZ0FEWUNHQXNnQ0VFVWFpZ0NBQ0lEUlEwQUlBQkJGR29nQXpZQ0FDQURJQUEyQWhnTEFrQUNRQ0FFUVE5TERRQWdDQ0FFSUFKcUlnTkJBM0kyQWdRZ0NDQURhaUlESUFNb0FnUkJBWEkyQWdRTUFRc2dDQ0FDYWlJQUlBUkJBWEkyQWdRZ0NDQUNRUU55TmdJRUlBQWdCR29nQkRZQ0FBSkFJQVJCL3dGTERRQWdCRUY0Y1VHdzBJQ0FBR29oQXdKQUFrQkJBQ2dDaU5DQWdBQWlCVUVCSUFSQkEzWjBJZ1J4RFFCQkFDQUZJQVJ5TmdLSTBJQ0FBQ0FESVFRTUFRc2dBeWdDQ0NFRUN5QUVJQUEyQWd3Z0F5QUFOZ0lJSUFBZ0F6WUNEQ0FBSUFRMkFnZ01BUXRCSHlFREFrQWdCRUgvLy84SFN3MEFJQVJCQ0hZaUF5QURRWUQrUDJwQkVIWkJDSEVpQTNRaUJTQUZRWURnSDJwQkVIWkJCSEVpQlhRaUFpQUNRWUNBRDJwQkVIWkJBbkVpQW5SQkQzWWdBeUFGY2lBQ2Ntc2lBMEVCZENBRUlBTkJGV3AyUVFGeGNrRWNhaUVEQ3lBQUlBTTJBaHdnQUVJQU53SVFJQU5CQW5SQnVOS0FnQUJxSVFVQ1FDQUhRUUVnQTNRaUFuRU5BQ0FGSUFBMkFnQkJBQ0FISUFKeU5nS00wSUNBQUNBQUlBVTJBaGdnQUNBQU5nSUlJQUFnQURZQ0RBd0JDeUFFUVFCQkdTQURRUUYyYXlBRFFSOUdHM1FoQXlBRktBSUFJUUlDUUFOQUlBSWlCU2dDQkVGNGNTQUVSZzBCSUFOQkhYWWhBaUFEUVFGMElRTWdCU0FDUVFSeGFrRVFhaUlHS0FJQUlnSU5BQXNnQmlBQU5nSUFJQUFnQlRZQ0dDQUFJQUEyQWd3Z0FDQUFOZ0lJREFFTElBVW9BZ2dpQXlBQU5nSU1JQVVnQURZQ0NDQUFRUUEyQWhnZ0FDQUZOZ0lNSUFBZ0F6WUNDQXNnQ0VFSWFpRUREQUVMQWtBZ0NrVU5BQUpBQWtBZ0FDQUFLQUljSWdWQkFuUkJ1TktBZ0FCcUlnTW9BZ0JIRFFBZ0F5QUlOZ0lBSUFnTkFVRUFJQWxCZmlBRmQzRTJBb3pRZ0lBQURBSUxJQXBCRUVFVUlBb29BaEFnQUVZYmFpQUlOZ0lBSUFoRkRRRUxJQWdnQ2pZQ0dBSkFJQUFvQWhBaUEwVU5BQ0FJSUFNMkFoQWdBeUFJTmdJWUN5QUFRUlJxS0FJQUlnTkZEUUFnQ0VFVWFpQUROZ0lBSUFNZ0NEWUNHQXNDUUFKQUlBUkJEMHNOQUNBQUlBUWdBbW9pQTBFRGNqWUNCQ0FBSUFOcUlnTWdBeWdDQkVFQmNqWUNCQXdCQ3lBQUlBSnFJZ1VnQkVFQmNqWUNCQ0FBSUFKQkEzSTJBZ1FnQlNBRWFpQUVOZ0lBQWtBZ0IwVU5BQ0FIUVhoeFFiRFFnSUFBYWlFQ1FRQW9BcHpRZ0lBQUlRTUNRQUpBUVFFZ0IwRURkblFpQ0NBR2NRMEFRUUFnQ0NBR2NqWUNpTkNBZ0FBZ0FpRUlEQUVMSUFJb0FnZ2hDQXNnQ0NBRE5nSU1JQUlnQXpZQ0NDQURJQUkyQWd3Z0F5QUlOZ0lJQzBFQUlBVTJBcHpRZ0lBQVFRQWdCRFlDa05DQWdBQUxJQUJCQ0dvaEF3c2dBVUVRYWlTQWdJQ0FBQ0FEQ3dvQUlBQVF5WUNBZ0FBTDRnMEJCMzhDUUNBQVJRMEFJQUJCZUdvaUFTQUFRWHhxS0FJQUlnSkJlSEVpQUdvaEF3SkFJQUpCQVhFTkFDQUNRUU54UlEwQklBRWdBU2dDQUNJQ2F5SUJRUUFvQXBqUWdJQUFJZ1JKRFFFZ0FpQUFhaUVBQWtBZ0FVRUFLQUtjMElDQUFFWU5BQUpBSUFKQi93RkxEUUFnQVNnQ0NDSUVJQUpCQTNZaUJVRURkRUd3MElDQUFHb2lCa1lhQWtBZ0FTZ0NEQ0lDSUFSSERRQkJBRUVBS0FLSTBJQ0FBRUYrSUFWM2NUWUNpTkNBZ0FBTUF3c2dBaUFHUmhvZ0FpQUVOZ0lJSUFRZ0FqWUNEQXdDQ3lBQktBSVlJUWNDUUFKQUlBRW9BZ3dpQmlBQlJnMEFJQUVvQWdnaUFpQUVTUm9nQmlBQ05nSUlJQUlnQmpZQ0RBd0JDd0pBSUFGQkZHb2lBaWdDQUNJRURRQWdBVUVRYWlJQ0tBSUFJZ1FOQUVFQUlRWU1BUXNEUUNBQ0lRVWdCQ0lHUVJScUlnSW9BZ0FpQkEwQUlBWkJFR29oQWlBR0tBSVFJZ1FOQUFzZ0JVRUFOZ0lBQ3lBSFJRMEJBa0FDUUNBQklBRW9BaHdpQkVFQ2RFRzQwb0NBQUdvaUFpZ0NBRWNOQUNBQ0lBWTJBZ0FnQmcwQlFRQkJBQ2dDak5DQWdBQkJmaUFFZDNFMkFvelFnSUFBREFNTElBZEJFRUVVSUFjb0FoQWdBVVliYWlBR05nSUFJQVpGRFFJTElBWWdCellDR0FKQUlBRW9BaEFpQWtVTkFDQUdJQUkyQWhBZ0FpQUdOZ0lZQ3lBQktBSVVJZ0pGRFFFZ0JrRVVhaUFDTmdJQUlBSWdCallDR0F3QkN5QURLQUlFSWdKQkEzRkJBMGNOQUNBRElBSkJmbkUyQWdSQkFDQUFOZ0tRMElDQUFDQUJJQUJxSUFBMkFnQWdBU0FBUVFGeU5nSUVEd3NnQVNBRFR3MEFJQU1vQWdRaUFrRUJjVVVOQUFKQUFrQWdBa0VDY1EwQUFrQWdBMEVBS0FLZzBJQ0FBRWNOQUVFQUlBRTJBcURRZ0lBQVFRQkJBQ2dDbE5DQWdBQWdBR29pQURZQ2xOQ0FnQUFnQVNBQVFRRnlOZ0lFSUFGQkFDZ0NuTkNBZ0FCSERRTkJBRUVBTmdLUTBJQ0FBRUVBUVFBMkFwelFnSUFBRHdzQ1FDQURRUUFvQXB6UWdJQUFSdzBBUVFBZ0FUWUNuTkNBZ0FCQkFFRUFLQUtRMElDQUFDQUFhaUlBTmdLUTBJQ0FBQ0FCSUFCQkFYSTJBZ1FnQVNBQWFpQUFOZ0lBRHdzZ0FrRjRjU0FBYWlFQUFrQUNRQ0FDUWY4QlN3MEFJQU1vQWdnaUJDQUNRUU4ySWdWQkEzUkJzTkNBZ0FCcUlnWkdHZ0pBSUFNb0Fnd2lBaUFFUncwQVFRQkJBQ2dDaU5DQWdBQkJmaUFGZDNFMkFvalFnSUFBREFJTElBSWdCa1lhSUFJZ0JEWUNDQ0FFSUFJMkFnd01BUXNnQXlnQ0dDRUhBa0FDUUNBREtBSU1JZ1lnQTBZTkFDQURLQUlJSWdKQkFDZ0NtTkNBZ0FCSkdpQUdJQUkyQWdnZ0FpQUdOZ0lNREFFTEFrQWdBMEVVYWlJQ0tBSUFJZ1FOQUNBRFFSQnFJZ0lvQWdBaUJBMEFRUUFoQmd3QkN3TkFJQUloQlNBRUlnWkJGR29pQWlnQ0FDSUVEUUFnQmtFUWFpRUNJQVlvQWhBaUJBMEFDeUFGUVFBMkFnQUxJQWRGRFFBQ1FBSkFJQU1nQXlnQ0hDSUVRUUowUWJqU2dJQUFhaUlDS0FJQVJ3MEFJQUlnQmpZQ0FDQUdEUUZCQUVFQUtBS00wSUNBQUVGK0lBUjNjVFlDak5DQWdBQU1BZ3NnQjBFUVFSUWdCeWdDRUNBRFJodHFJQVkyQWdBZ0JrVU5BUXNnQmlBSE5nSVlBa0FnQXlnQ0VDSUNSUTBBSUFZZ0FqWUNFQ0FDSUFZMkFoZ0xJQU1vQWhRaUFrVU5BQ0FHUVJScUlBSTJBZ0FnQWlBR05nSVlDeUFCSUFCcUlBQTJBZ0FnQVNBQVFRRnlOZ0lFSUFGQkFDZ0NuTkNBZ0FCSERRRkJBQ0FBTmdLUTBJQ0FBQThMSUFNZ0FrRitjVFlDQkNBQklBQnFJQUEyQWdBZ0FTQUFRUUZ5TmdJRUN3SkFJQUJCL3dGTERRQWdBRUY0Y1VHdzBJQ0FBR29oQWdKQUFrQkJBQ2dDaU5DQWdBQWlCRUVCSUFCQkEzWjBJZ0J4RFFCQkFDQUVJQUJ5TmdLSTBJQ0FBQ0FDSVFBTUFRc2dBaWdDQ0NFQUN5QUFJQUUyQWd3Z0FpQUJOZ0lJSUFFZ0FqWUNEQ0FCSUFBMkFnZ1BDMEVmSVFJQ1FDQUFRZi8vL3dkTERRQWdBRUVJZGlJQ0lBSkJnUDQvYWtFUWRrRUljU0lDZENJRUlBUkJnT0FmYWtFUWRrRUVjU0lFZENJR0lBWkJnSUFQYWtFUWRrRUNjU0lHZEVFUGRpQUNJQVJ5SUFaeWF5SUNRUUYwSUFBZ0FrRVZhblpCQVhGeVFSeHFJUUlMSUFFZ0FqWUNIQ0FCUWdBM0FoQWdBa0VDZEVHNDBvQ0FBR29oQkFKQUFrQkJBQ2dDak5DQWdBQWlCa0VCSUFKMElnTnhEUUFnQkNBQk5nSUFRUUFnQmlBRGNqWUNqTkNBZ0FBZ0FTQUVOZ0lZSUFFZ0FUWUNDQ0FCSUFFMkFnd01BUXNnQUVFQVFSa2dBa0VCZG1zZ0FrRWZSaHQwSVFJZ0JDZ0NBQ0VHQWtBRFFDQUdJZ1FvQWdSQmVIRWdBRVlOQVNBQ1FSMTJJUVlnQWtFQmRDRUNJQVFnQmtFRWNXcEJFR29pQXlnQ0FDSUdEUUFMSUFNZ0FUWUNBQ0FCSUFRMkFoZ2dBU0FCTmdJTUlBRWdBVFlDQ0F3QkN5QUVLQUlJSWdBZ0FUWUNEQ0FFSUFFMkFnZ2dBVUVBTmdJWUlBRWdCRFlDRENBQklBQTJBZ2dMUVFCQkFDZ0NxTkNBZ0FCQmYyb2lBVUYvSUFFYk5nS28wSUNBQUFzTEJBQUFBQXRPQUFKQUlBQU5BRDhBUVJCMER3c0NRQ0FBUWYvL0EzRU5BQ0FBUVg5TURRQUNRQ0FBUVJCMlFBQWlBRUYvUncwQVFRQkJNRFlDK05PQWdBQkJmdzhMSUFCQkVIUVBDeERLZ0lDQUFBQUw4Z0lDQTM4QmZnSkFJQUpGRFFBZ0FDQUJPZ0FBSUFJZ0FHb2lBMEYvYWlBQk9nQUFJQUpCQTBrTkFDQUFJQUU2QUFJZ0FDQUJPZ0FCSUFOQmZXb2dBVG9BQUNBRFFYNXFJQUU2QUFBZ0FrRUhTUTBBSUFBZ0FUb0FBeUFEUVh4cUlBRTZBQUFnQWtFSlNRMEFJQUJCQUNBQWEwRURjU0lFYWlJRElBRkIvd0Z4UVlHQ2hBaHNJZ0UyQWdBZ0F5QUNJQVJyUVh4eElnUnFJZ0pCZkdvZ0FUWUNBQ0FFUVFsSkRRQWdBeUFCTmdJSUlBTWdBVFlDQkNBQ1FYaHFJQUUyQWdBZ0FrRjBhaUFCTmdJQUlBUkJHVWtOQUNBRElBRTJBaGdnQXlBQk5nSVVJQU1nQVRZQ0VDQURJQUUyQWd3Z0FrRndhaUFCTmdJQUlBSkJiR29nQVRZQ0FDQUNRV2hxSUFFMkFnQWdBa0ZrYWlBQk5nSUFJQVFnQTBFRWNVRVljaUlGYXlJQ1FTQkpEUUFnQWExQ2dZQ0FnQkIrSVFZZ0F5QUZhaUVCQTBBZ0FTQUdOd01ZSUFFZ0JqY0RFQ0FCSUFZM0F3Z2dBU0FHTndNQUlBRkJJR29oQVNBQ1FXQnFJZ0pCSDBzTkFBc0xJQUFMQzQ1SUFRQkJnQWdMaGtnQkFBQUFBZ0FBQUFNQUFBQUFBQUFBQUFBQUFBUUFBQUFGQUFBQUFBQUFBQUFBQUFBR0FBQUFCd0FBQUFnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFbHVkbUZzYVdRZ1kyaGhjaUJwYmlCMWNtd2djWFZsY25rQVUzQmhiaUJqWVd4c1ltRmpheUJsY25KdmNpQnBiaUJ2Ymw5aWIyUjVBRU52Ym5SbGJuUXRUR1Z1WjNSb0lHOTJaWEptYkc5M0FFTm9kVzVySUhOcGVtVWdiM1psY21ac2IzY0FVbVZ6Y0c5dWMyVWdiM1psY21ac2IzY0FTVzUyWVd4cFpDQnRaWFJvYjJRZ1ptOXlJRWhVVkZBdmVDNTRJSEpsY1hWbGMzUUFTVzUyWVd4cFpDQnRaWFJvYjJRZ1ptOXlJRkpVVTFBdmVDNTRJSEpsY1hWbGMzUUFSWGh3WldOMFpXUWdVMDlWVWtORklHMWxkR2h2WkNCbWIzSWdTVU5GTDNndWVDQnlaWEYxWlhOMEFFbHVkbUZzYVdRZ1kyaGhjaUJwYmlCMWNtd2dabkpoWjIxbGJuUWdjM1JoY25RQVJYaHdaV04wWldRZ1pHOTBBRk53WVc0Z1kyRnNiR0poWTJzZ1pYSnliM0lnYVc0Z2IyNWZjM1JoZEhWekFFbHVkbUZzYVdRZ2NtVnpjRzl1YzJVZ2MzUmhkSFZ6QUVsdWRtRnNhV1FnWTJoaGNtRmpkR1Z5SUdsdUlHTm9kVzVySUdWNGRHVnVjMmx2Ym5NQVZYTmxjaUJqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmY21WelpYUmdJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDlqYUhWdWExOW9aV0ZrWlhKZ0lHTmhiR3hpWVdOcklHVnljbTl5QUdCdmJsOXRaWE56WVdkbFgySmxaMmx1WUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZlkyaDFibXRmWlhoMFpXNXphVzl1WDNaaGJIVmxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmYzNSaGRIVnpYMk52YlhCc1pYUmxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmZG1WeWMybHZibDlqYjIxd2JHVjBaV0FnWTJGc2JHSmhZMnNnWlhKeWIzSUFZRzl1WDNWeWJGOWpiMjF3YkdWMFpXQWdZMkZzYkdKaFkyc2daWEp5YjNJQVlHOXVYMk5vZFc1clgyTnZiWEJzWlhSbFlDQmpZV3hzWW1GamF5Qmxjbkp2Y2dCZ2IyNWZhR1ZoWkdWeVgzWmhiSFZsWDJOdmJYQnNaWFJsWUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZmJXVnpjMkZuWlY5amIyMXdiR1YwWldBZ1kyRnNiR0poWTJzZ1pYSnliM0lBWUc5dVgyMWxkR2h2WkY5amIyMXdiR1YwWldBZ1kyRnNiR0poWTJzZ1pYSnliM0lBWUc5dVgyaGxZV1JsY2w5bWFXVnNaRjlqYjIxd2JHVjBaV0FnWTJGc2JHSmhZMnNnWlhKeWIzSUFZRzl1WDJOb2RXNXJYMlY0ZEdWdWMybHZibDl1WVcxbFlDQmpZV3hzWW1GamF5Qmxjbkp2Y2dCVmJtVjRjR1ZqZEdWa0lHTm9ZWElnYVc0Z2RYSnNJSE5sY25abGNnQkpiblpoYkdsa0lHaGxZV1JsY2lCMllXeDFaU0JqYUdGeUFFbHVkbUZzYVdRZ2FHVmhaR1Z5SUdacFpXeGtJR05vWVhJQVUzQmhiaUJqWVd4c1ltRmpheUJsY25KdmNpQnBiaUJ2Ymw5MlpYSnphVzl1QUVsdWRtRnNhV1FnYldsdWIzSWdkbVZ5YzJsdmJnQkpiblpoYkdsa0lHMWhhbTl5SUhabGNuTnBiMjRBUlhod1pXTjBaV1FnYzNCaFkyVWdZV1owWlhJZ2RtVnljMmx2YmdCRmVIQmxZM1JsWkNCRFVreEdJR0ZtZEdWeUlIWmxjbk5wYjI0QVNXNTJZV3hwWkNCSVZGUlFJSFpsY25OcGIyNEFTVzUyWVd4cFpDQm9aV0ZrWlhJZ2RHOXJaVzRBVTNCaGJpQmpZV3hzWW1GamF5Qmxjbkp2Y2lCcGJpQnZibDkxY213QVNXNTJZV3hwWkNCamFHRnlZV04wWlhKeklHbHVJSFZ5YkFCVmJtVjRjR1ZqZEdWa0lITjBZWEowSUdOb1lYSWdhVzRnZFhKc0FFUnZkV0pzWlNCQUlHbHVJSFZ5YkFCRmJYQjBlU0JEYjI1MFpXNTBMVXhsYm1kMGFBQkpiblpoYkdsa0lHTm9ZWEpoWTNSbGNpQnBiaUJEYjI1MFpXNTBMVXhsYm1kMGFBQkVkWEJzYVdOaGRHVWdRMjl1ZEdWdWRDMU1aVzVuZEdnQVNXNTJZV3hwWkNCamFHRnlJR2x1SUhWeWJDQndZWFJvQUVOdmJuUmxiblF0VEdWdVozUm9JR05oYmlkMElHSmxJSEJ5WlhObGJuUWdkMmwwYUNCVWNtRnVjMlpsY2kxRmJtTnZaR2x1WndCSmJuWmhiR2xrSUdOb1lYSmhZM1JsY2lCcGJpQmphSFZ1YXlCemFYcGxBRk53WVc0Z1kyRnNiR0poWTJzZ1pYSnliM0lnYVc0Z2IyNWZhR1ZoWkdWeVgzWmhiSFZsQUZOd1lXNGdZMkZzYkdKaFkyc2daWEp5YjNJZ2FXNGdiMjVmWTJoMWJtdGZaWGgwWlc1emFXOXVYM1poYkhWbEFFbHVkbUZzYVdRZ1kyaGhjbUZqZEdWeUlHbHVJR05vZFc1cklHVjRkR1Z1YzJsdmJuTWdkbUZzZFdVQVRXbHpjMmx1WnlCbGVIQmxZM1JsWkNCTVJpQmhablJsY2lCb1pXRmtaWElnZG1Gc2RXVUFTVzUyWVd4cFpDQmdWSEpoYm5ObVpYSXRSVzVqYjJScGJtZGdJR2hsWVdSbGNpQjJZV3gxWlFCSmJuWmhiR2xrSUdOb1lYSmhZM1JsY2lCcGJpQmphSFZ1YXlCbGVIUmxibk5wYjI1eklIRjFiM1JsSUhaaGJIVmxBRWx1ZG1Gc2FXUWdZMmhoY21GamRHVnlJR2x1SUdOb2RXNXJJR1Y0ZEdWdWMybHZibk1nY1hWdmRHVmtJSFpoYkhWbEFGQmhkWE5sWkNCaWVTQnZibDlvWldGa1pYSnpYMk52YlhCc1pYUmxBRWx1ZG1Gc2FXUWdSVTlHSUhOMFlYUmxBRzl1WDNKbGMyVjBJSEJoZFhObEFHOXVYMk5vZFc1clgyaGxZV1JsY2lCd1lYVnpaUUJ2Ymw5dFpYTnpZV2RsWDJKbFoybHVJSEJoZFhObEFHOXVYMk5vZFc1clgyVjRkR1Z1YzJsdmJsOTJZV3gxWlNCd1lYVnpaUUJ2Ymw5emRHRjBkWE5mWTI5dGNHeGxkR1VnY0dGMWMyVUFiMjVmZG1WeWMybHZibDlqYjIxd2JHVjBaU0J3WVhWelpRQnZibDkxY214ZlkyOXRjR3hsZEdVZ2NHRjFjMlVBYjI1ZlkyaDFibXRmWTI5dGNHeGxkR1VnY0dGMWMyVUFiMjVmYUdWaFpHVnlYM1poYkhWbFgyTnZiWEJzWlhSbElIQmhkWE5sQUc5dVgyMWxjM05oWjJWZlkyOXRjR3hsZEdVZ2NHRjFjMlVBYjI1ZmJXVjBhRzlrWDJOdmJYQnNaWFJsSUhCaGRYTmxBRzl1WDJobFlXUmxjbDltYVdWc1pGOWpiMjF3YkdWMFpTQndZWFZ6WlFCdmJsOWphSFZ1YTE5bGVIUmxibk5wYjI1ZmJtRnRaU0J3WVhWelpRQlZibVY0Y0dWamRHVmtJSE53WVdObElHRm1kR1Z5SUhOMFlYSjBJR3hwYm1VQVUzQmhiaUJqWVd4c1ltRmpheUJsY25KdmNpQnBiaUJ2Ymw5amFIVnVhMTlsZUhSbGJuTnBiMjVmYm1GdFpRQkpiblpoYkdsa0lHTm9ZWEpoWTNSbGNpQnBiaUJqYUhWdWF5QmxlSFJsYm5OcGIyNXpJRzVoYldVQVVHRjFjMlVnYjI0Z1EwOU9Ua1ZEVkM5VmNHZHlZV1JsQUZCaGRYTmxJRzl1SUZCU1NTOVZjR2R5WVdSbEFFVjRjR1ZqZEdWa0lFaFVWRkF2TWlCRGIyNXVaV04wYVc5dUlGQnlaV1poWTJVQVUzQmhiaUJqWVd4c1ltRmpheUJsY25KdmNpQnBiaUJ2Ymw5dFpYUm9iMlFBUlhod1pXTjBaV1FnYzNCaFkyVWdZV1owWlhJZ2JXVjBhRzlrQUZOd1lXNGdZMkZzYkdKaFkyc2daWEp5YjNJZ2FXNGdiMjVmYUdWaFpHVnlYMlpwWld4a0FGQmhkWE5sWkFCSmJuWmhiR2xrSUhkdmNtUWdaVzVqYjNWdWRHVnlaV1FBU1c1MllXeHBaQ0J0WlhSb2IyUWdaVzVqYjNWdWRHVnlaV1FBVlc1bGVIQmxZM1JsWkNCamFHRnlJR2x1SUhWeWJDQnpZMmhsYldFQVVtVnhkV1Z6ZENCb1lYTWdhVzUyWVd4cFpDQmdWSEpoYm5ObVpYSXRSVzVqYjJScGJtZGdBRk5YU1ZSRFNGOVFVazlZV1FCVlUwVmZVRkpQV0ZrQVRVdEJRMVJKVmtsVVdRQlZUbEJTVDBORlUxTkJRa3hGWDBWT1ZFbFVXUUJEVDFCWkFFMVBWa1ZFWDFCRlVrMUJUa1ZPVkV4WkFGUlBUMTlGUVZKTVdRQk9UMVJKUmxrQVJrRkpURVZFWDBSRlVFVk9SRVZPUTFrQVFrRkVYMGRCVkVWWFFWa0FVRXhCV1FCUVZWUUFRMGhGUTB0UFZWUUFSMEZVUlZkQldWOVVTVTFGVDFWVUFGSkZVVlZGVTFSZlZFbE5SVTlWVkFCT1JWUlhUMUpMWDBOUFRrNUZRMVJmVkVsTlJVOVZWQUJEVDA1T1JVTlVTVTlPWDFSSlRVVlBWVlFBVEU5SFNVNWZWRWxOUlU5VlZBQk9SVlJYVDFKTFgxSkZRVVJmVkVsTlJVOVZWQUJRVDFOVUFFMUpVMFJKVWtWRFZFVkVYMUpGVVZWRlUxUUFRMHhKUlU1VVgwTk1UMU5GUkY5U1JWRlZSVk5VQUVOTVNVVk9WRjlEVEU5VFJVUmZURTlCUkY5Q1FVeEJUa05GUkY5U1JWRlZSVk5VQUVKQlJGOVNSVkZWUlZOVUFFaFVWRkJmVWtWUlZVVlRWRjlUUlU1VVgxUlBYMGhVVkZCVFgxQlBVbFFBVWtWUVQxSlVBRWxOWDBGZlZFVkJVRTlVQUZKRlUwVlVYME5QVGxSRlRsUUFUazlmUTA5T1ZFVk9WQUJRUVZKVVNVRk1YME5QVGxSRlRsUUFTRkJGWDBsT1ZrRk1TVVJmUTA5T1UxUkJUbFFBU0ZCRlgwTkNYMUpGVTBWVUFFZEZWQUJJVUVWZlUxUlNTVU5VQUVOUFRrWk1TVU5VQUZSRlRWQlBVa0ZTV1Y5U1JVUkpVa1ZEVkFCUVJWSk5RVTVGVGxSZlVrVkVTVkpGUTFRQVEwOU9Ua1ZEVkFCTlZVeFVTVjlUVkVGVVZWTUFTRkJGWDBsT1ZrRk1TVVJmVTFSQlZGVlRBRlJQVDE5TlFVNVpYMUpGVVZWRlUxUlRBRVZCVWt4WlgwaEpUbFJUQUZWT1FWWkJTVXhCUWt4RlgwWlBVbDlNUlVkQlRGOVNSVUZUVDA1VEFFOVFWRWxQVGxNQVUxZEpWRU5JU1U1SFgxQlNUMVJQUTA5TVV3QldRVkpKUVU1VVgwRk1VMDlmVGtWSFQxUkpRVlJGVXdCTlZVeFVTVkJNUlY5RFNFOUpRMFZUQUVsT1ZFVlNUa0ZNWDFORlVsWkZVbDlGVWxKUFVnQlhSVUpmVTBWU1ZrVlNYMVZPUzA1UFYwNWZSVkpTVDFJQVVrRkpURWRWVGw5RlVsSlBVZ0JKUkVWT1ZFbFVXVjlRVWs5V1NVUkZVbDlCVlZSSVJVNVVTVU5CVkVsUFRsOUZVbEpQVWdCVFUweGZRMFZTVkVsR1NVTkJWRVZmUlZKU1QxSUFTVTVXUVV4SlJGOVlYMFpQVWxkQlVrUkZSRjlHVDFJQVUwVlVYMUJCVWtGTlJWUkZVZ0JIUlZSZlVFRlNRVTFGVkVWU0FFaFFSVjlWVTBWU0FGTkZSVjlQVkVoRlVnQklVRVZmUTBKZlEwaFZUa3RmU0VWQlJFVlNBRTFMUTBGTVJVNUVRVklBVTBWVVZWQUFWMFZDWDFORlVsWkZVbDlKVTE5RVQxZE9BRlJGUVZKRVQxZE9BRWhRUlY5RFRFOVRSVVJmUTA5T1RrVkRWRWxQVGdCSVJWVlNTVk5VU1VOZlJWaFFTVkpCVkVsUFRnQkVTVk5EVDA1T1JVTlVSVVJmVDFCRlVrRlVTVTlPQUU1UFRsOUJWVlJJVDFKSlZFRlVTVlpGWDBsT1JrOVNUVUZVU1U5T0FFaFFSVjlKVGxaQlRFbEVYMVpGVWxOSlQwNEFTRkJGWDBOQ1gwMUZVMU5CUjBWZlFrVkhTVTRBVTBsVVJWOUpVMTlHVWs5YVJVNEFTRkJGWDBsT1ZrRk1TVVJmU0VWQlJFVlNYMVJQUzBWT0FFbE9Wa0ZNU1VSZlZFOUxSVTRBUms5U1FrbEVSRVZPQUVWT1NFRk9RMFZmV1U5VlVsOURRVXhOQUVoUVJWOUpUbFpCVEVsRVgxVlNUQUJDVEU5RFMwVkVYMEpaWDFCQlVrVk9WRUZNWDBOUFRsUlNUMHdBVFV0RFQwd0FRVU5NQUVoUVJWOUpUbFJGVWs1QlRBQlNSVkZWUlZOVVgwaEZRVVJGVWw5R1NVVk1SRk5mVkU5UFgweEJVa2RGWDFWT1QwWkdTVU5KUVV3QVNGQkZYMDlMQUZWT1RFbE9Td0JWVGt4UFEwc0FVRkpKQUZKRlZGSlpYMWRKVkVnQVNGQkZYMGxPVmtGTVNVUmZRMDlPVkVWT1ZGOU1SVTVIVkVnQVNGQkZYMVZPUlZoUVJVTlVSVVJmUTA5T1ZFVk9WRjlNUlU1SFZFZ0FSa3hWVTBnQVVGSlBVRkJCVkVOSUFFMHRVMFZCVWtOSUFGVlNTVjlVVDA5ZlRFOU9Sd0JRVWs5RFJWTlRTVTVIQUUxSlUwTkZURXhCVGtWUFZWTmZVRVZTVTBsVFZFVk9WRjlYUVZKT1NVNUhBRTFKVTBORlRFeEJUa1ZQVlZOZlYwRlNUa2xPUndCSVVFVmZTVTVXUVV4SlJGOVVVa0ZPVTBaRlVsOUZUa05QUkVsT1J3QkZlSEJsWTNSbFpDQkRVa3hHQUVoUVJWOUpUbFpCVEVsRVgwTklWVTVMWDFOSldrVUFUVTlXUlFCRFQwNVVTVTVWUlFCSVVFVmZRMEpmVTFSQlZGVlRYME5QVFZCTVJWUkZBRWhRUlY5RFFsOUlSVUZFUlZKVFgwTlBUVkJNUlZSRkFFaFFSVjlEUWw5V1JWSlRTVTlPWDBOUFRWQk1SVlJGQUVoUVJWOURRbDlWVWt4ZlEwOU5VRXhGVkVVQVNGQkZYME5DWDBOSVZVNUxYME5QVFZCTVJWUkZBRWhRUlY5RFFsOUlSVUZFUlZKZlZrRk1WVVZmUTA5TlVFeEZWRVVBU0ZCRlgwTkNYME5JVlU1TFgwVllWRVZPVTBsUFRsOVdRVXhWUlY5RFQwMVFURVZVUlFCSVVFVmZRMEpmUTBoVlRrdGZSVmhVUlU1VFNVOU9YMDVCVFVWZlEwOU5VRXhGVkVVQVNGQkZYME5DWDAxRlUxTkJSMFZmUTA5TlVFeEZWRVVBU0ZCRlgwTkNYMDFGVkVoUFJGOURUMDFRVEVWVVJRQklVRVZmUTBKZlNFVkJSRVZTWDBaSlJVeEVYME5QVFZCTVJWUkZBRVJGVEVWVVJRQklVRVZmU1U1V1FVeEpSRjlGVDBaZlUxUkJWRVVBU1U1V1FVeEpSRjlUVTB4ZlEwVlNWRWxHU1VOQlZFVUFVRUZWVTBVQVRrOWZVa1ZUVUU5T1UwVUFWVTVUVlZCUVQxSlVSVVJmVFVWRVNVRmZWRmxRUlFCSFQwNUZBRTVQVkY5QlEwTkZVRlJCUWt4RkFGTkZVbFpKUTBWZlZVNUJWa0ZKVEVGQ1RFVUFVa0ZPUjBWZlRrOVVYMU5CVkVsVFJrbEJRa3hGQUU5U1NVZEpUbDlKVTE5VlRsSkZRVU5JUVVKTVJRQlNSVk5RVDA1VFJWOUpVMTlUVkVGTVJRQlFWVkpIUlFCTlJWSkhSUUJTUlZGVlJWTlVYMGhGUVVSRlVsOUdTVVZNUkZOZlZFOVBYMHhCVWtkRkFGSkZVVlZGVTFSZlNFVkJSRVZTWDFSUFQxOU1RVkpIUlFCUVFWbE1UMEZFWDFSUFQxOU1RVkpIUlFCSlRsTlZSa1pKUTBsRlRsUmZVMVJQVWtGSFJRQklVRVZmVUVGVlUwVkVYMVZRUjFKQlJFVUFTRkJGWDFCQlZWTkZSRjlJTWw5VlVFZFNRVVJGQUZOUFZWSkRSUUJCVGs1UFZVNURSUUJVVWtGRFJRQklVRVZmVlU1RldGQkZRMVJGUkY5VFVFRkRSUUJFUlZORFVrbENSUUJWVGxOVlFsTkRVa2xDUlFCU1JVTlBVa1FBU0ZCRlgwbE9Wa0ZNU1VSZlRVVlVTRTlFQUU1UFZGOUdUMVZPUkFCUVVrOVFSa2xPUkFCVlRrSkpUa1FBVWtWQ1NVNUVBRlZPUVZWVVNFOVNTVnBGUkFCTlJWUklUMFJmVGs5VVgwRk1URTlYUlVRQVNGUlVVRjlXUlZKVFNVOU9YMDVQVkY5VFZWQlFUMUpVUlVRQVFVeFNSVUZFV1Y5U1JWQlBVbFJGUkFCQlEwTkZVRlJGUkFCT1QxUmZTVTFRVEVWTlJVNVVSVVFBVEU5UFVGOUVSVlJGUTFSRlJBQklVRVZmUTFKZlJWaFFSVU5VUlVRQVNGQkZYMHhHWDBWWVVFVkRWRVZFQUVOU1JVRlVSVVFBU1UxZlZWTkZSQUJJVUVWZlVFRlZVMFZFQUZSSlRVVlBWVlJmVDBORFZWSkZSQUJRUVZsTlJVNVVYMUpGVVZWSlVrVkVBRkJTUlVOUFRrUkpWRWxQVGw5U1JWRlZTVkpGUkFCUVVrOVlXVjlCVlZSSVJVNVVTVU5CVkVsUFRsOVNSVkZWU1ZKRlJBQk9SVlJYVDFKTFgwRlZWRWhGVGxSSlEwRlVTVTlPWDFKRlVWVkpVa1ZFQUV4RlRrZFVTRjlTUlZGVlNWSkZSQUJUVTB4ZlEwVlNWRWxHU1VOQlZFVmZVa1ZSVlVsU1JVUUFWVkJIVWtGRVJWOVNSVkZWU1ZKRlJBQlFRVWRGWDBWWVVFbFNSVVFBVUZKRlEwOU9SRWxVU1U5T1gwWkJTVXhGUkFCRldGQkZRMVJCVkVsUFRsOUdRVWxNUlVRQVVrVldRVXhKUkVGVVNVOU9YMFpCU1V4RlJBQlRVMHhmU0VGT1JGTklRVXRGWDBaQlNVeEZSQUJNVDBOTFJVUUFWRkpCVGxOR1QxSk5RVlJKVDA1ZlFWQlFURWxGUkFCT1QxUmZUVTlFU1VaSlJVUUFUazlVWDBWWVZFVk9SRVZFQUVKQlRrUlhTVVJVU0Y5TVNVMUpWRjlGV0VORlJVUkZSQUJUU1ZSRlgwbFRYMDlXUlZKTVQwRkVSVVFBU0VWQlJBQkZlSEJsWTNSbFpDQklWRlJRTHdBQVhoTUFBQ1lUQUFBd0VBQUE4QmNBQUowVEFBQVZFZ0FBT1JjQUFQQVNBQUFLRUFBQWRSSUFBSzBTQUFDQ0V3QUFUeFFBQUg4UUFBQ2dGUUFBSXhRQUFJa1NBQUNMRkFBQVRSVUFBTlFSQUFEUEZBQUFFQmdBQU1rV0FBRGNGZ0FBd1JFQUFPQVhBQUM3RkFBQWRCUUFBSHdWQUFEbEZBQUFDQmNBQUI4UUFBQmxGUUFBb3hRQUFDZ1ZBQUFDRlFBQW1SVUFBQ3dRQUFDTEdRQUFUdzhBQU5RT0FBQnFFQUFBemhBQUFBSVhBQUNKRGdBQWJoTUFBQndUQUFCbUZBQUFWaGNBQU1FVEFBRE5Fd0FBYkJNQUFHZ1hBQUJtRndBQVh4Y0FBQ0lUQUFET0R3QUFhUTRBQU5nT0FBQmpGZ0FBeXhNQUFLb09BQUFvRndBQUpoY0FBTVVUQUFCZEZnQUE2QkVBQUdjVEFBQmxFd0FBOGhZQUFITVRBQUFkRndBQStSWUFBUE1SQUFEUERnQUF6aFVBQUF3U0FBQ3pFUUFBcFJFQUFHRVFBQUF5RndBQXV4TUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFRSUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQUFBQUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUlEQWdJQ0FnSUFBQUlDQUFJQ0FBSUNBZ0lDQWdJQ0FnSUFCQUFBQUFBQUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQUFBQUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0FDQUFJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ0FBSUNBZ0lDQUFBQ0FnQUNBZ0FDQWdJQ0FnSUNBZ0lDQUFNQUJBQUFBQUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBQUFBQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQUFnQUNBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBYkc5elpXVmxjQzFoYkdsMlpRQUFBQUFBQUFBQUFBQUFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQUFBQUFBQUFBQUFBQkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVCQVFFQkFRRUJBUUVCQVFJQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJZMmgxYm10bFpBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFFQUFRRUJBUUVBQUFFQkFBRUJBQUVCQVFFQkFRRUJBUUVBQUFBQUFBQUFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBQUFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQkFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJsWTNScGIyNWxiblF0YkdWdVozUm9iMjV5YjNoNUxXTnZibTVsWTNScGIyNEFBQUFBQUFBQUFBQUFBQUFBQUFCeVlXNXpabVZ5TFdWdVkyOWthVzVuY0dkeVlXUmxEUW9OQ2cwS1UwME5DZzBLVkZSUUwwTkZMMVJUVUM4QUFBQUFBQUFBQUFBQUFBQUJBZ0FCQXdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFBQUFBQUFBQUFBQVFJQUFRTUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVBUUVGQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUFBQUFBQUFBQUFBRUFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFQkFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQUFBQUFBQUFBQUFBQVFBQUFnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTUVBQUFFQkFRRUJBUUVCQVFFQkFVRUJBUUVCQVFFQkFRRUJBUUFCQUFHQndRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBRUFBUUFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRUFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUlBQUFBQUFBQURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3QUFBQUFBQUFNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQUFBQkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUFBQUFBQUFBQUFBSUFBQUFBQWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01BQUFBQUFBQURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCT1QxVk9RMFZGUTB0UFZWUk9SVU5VUlZSRlExSkpRa1ZNVlZOSVJWUkZRVVJUUlVGU1EwaFNSMFZEVkVsV1NWUlpURVZPUkVGU1ZrVlBWRWxHV1ZCVVNVOU9VME5JVTBWQldWTlVRVlJEU0VkRlQxSkVTVkpGUTFSUFVsUlNRMGhRUVZKQlRVVlVSVkpWVWtORlFsTkRVa2xDUlVGU1JFOVhUa0ZEUlVsT1JFNUxRMHRWUWxORFVrbENSVWhVVkZBdlFVUlVVQzg9J1xuIiwKICAgICJtb2R1bGUuZXhwb3J0cyA9ICdBR0Z6YlFFQUFBQUJNQWhnQVg4QmYyQURmMzkvQVg5Z0JIOS9mMzhCZjJBQUFHQURmMzkvQUdBQmZ3QmdBbjkvQUdBR2YzOS9mMzkvQUFMTEFRZ0RaVzUyR0hkaGMyMWZiMjVmYUdWaFpHVnljMTlqYjIxd2JHVjBaUUFDQTJWdWRoVjNZWE50WDI5dVgyMWxjM05oWjJWZlltVm5hVzRBQUFObGJuWUxkMkZ6YlY5dmJsOTFjbXdBQVFObGJuWU9kMkZ6YlY5dmJsOXpkR0YwZFhNQUFRTmxibllVZDJGemJWOXZibDlvWldGa1pYSmZabWxsYkdRQUFRTmxibllVZDJGemJWOXZibDlvWldGa1pYSmZkbUZzZFdVQUFRTmxibllNZDJGemJWOXZibDlpYjJSNUFBRURaVzUyR0hkaGMyMWZiMjVmYldWemMyRm5aVjlqYjIxd2JHVjBaUUFBQTBaRkF3TUVBQUFGQUFBQUFBQUFCUUVGQUFVRkJRQUFCZ0FBQUFBR0JnWUdBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBQUFCQVFjQUFBVUZBd0FCQkFVQmNBRVNFZ1VEQVFBQ0JnZ0Jmd0ZCZ05RRUN3ZlJCU0lHYldWdGIzSjVBZ0FMWDJsdWFYUnBZV3hwZW1VQUNSbGZYMmx1WkdseVpXTjBYMloxYm1OMGFXOXVYM1JoWW14bEFRQUxiR3hvZEhSd1gybHVhWFFBQ2hoc2JHaDBkSEJmYzJodmRXeGtYMnRsWlhCZllXeHBkbVVBUVF4c2JHaDBkSEJmWVd4c2IyTUFEQVp0WVd4c2IyTUFSZ3RzYkdoMGRIQmZabkpsWlFBTkJHWnlaV1VBU0E5c2JHaDBkSEJmWjJWMFgzUjVjR1VBRGhWc2JHaDBkSEJmWjJWMFgyaDBkSEJmYldGcWIzSUFEeFZzYkdoMGRIQmZaMlYwWDJoMGRIQmZiV2x1YjNJQUVCRnNiR2gwZEhCZloyVjBYMjFsZEdodlpBQVJGbXhzYUhSMGNGOW5aWFJmYzNSaGRIVnpYMk52WkdVQUVoSnNiR2gwZEhCZloyVjBYM1Z3WjNKaFpHVUFFd3hzYkdoMGRIQmZjbVZ6WlhRQUZBNXNiR2gwZEhCZlpYaGxZM1YwWlFBVkZHeHNhSFIwY0Y5elpYUjBhVzVuYzE5cGJtbDBBQllOYkd4b2RIUndYMlpwYm1semFBQVhER3hzYUhSMGNGOXdZWFZ6WlFBWURXeHNhSFIwY0Y5eVpYTjFiV1VBR1J0c2JHaDBkSEJmY21WemRXMWxYMkZtZEdWeVgzVndaM0poWkdVQUdoQnNiR2gwZEhCZloyVjBYMlZ5Y201dkFCc1hiR3hvZEhSd1gyZGxkRjlsY25KdmNsOXlaV0Z6YjI0QUhCZHNiR2gwZEhCZmMyVjBYMlZ5Y205eVgzSmxZWE52YmdBZEZHeHNhSFIwY0Y5blpYUmZaWEp5YjNKZmNHOXpBQjRSYkd4b2RIUndYMlZ5Y201dlgyNWhiV1VBSHhKc2JHaDBkSEJmYldWMGFHOWtYMjVoYldVQUlCSnNiR2gwZEhCZmMzUmhkSFZ6WDI1aGJXVUFJUnBzYkdoMGRIQmZjMlYwWDJ4bGJtbGxiblJmYUdWaFpHVnljd0FpSVd4c2FIUjBjRjl6WlhSZmJHVnVhV1Z1ZEY5amFIVnVhMlZrWDJ4bGJtZDBhQUFqSFd4c2FIUjBjRjl6WlhSZmJHVnVhV1Z1ZEY5clpXVndYMkZzYVhabEFDUWtiR3hvZEhSd1gzTmxkRjlzWlc1cFpXNTBYM1J5WVc1elptVnlYMlZ1WTI5a2FXNW5BQ1VZYkd4b2RIUndYMjFsYzNOaFoyVmZibVZsWkhOZlpXOW1BRDhKRndFQVFRRUxFUUVDQXdRRkN3WUhOVGszTVM4dEp5c3BDckxnQWtVQ0FBc0lBQkNJZ0lDQUFBc1pBQ0FBRU1LQWdJQUFHaUFBSUFJMkFqZ2dBQ0FCT2dBb0N4d0FJQUFnQUM4Qk1pQUFMUUF1SUFBUXdZQ0FnQUFRZ0lDQWdBQUxLZ0VCZjBIQUFCREdnSUNBQUNJQkVNS0FnSUFBR2lBQlFZQ0lnSUFBTmdJNElBRWdBRG9BS0NBQkN3b0FJQUFReUlDQWdBQUxCd0FnQUMwQUtBc0hBQ0FBTFFBcUN3Y0FJQUF0QUNzTEJ3QWdBQzBBS1FzSEFDQUFMd0V5Q3djQUlBQXRBQzRMUlFFRWZ5QUFLQUlZSVFFZ0FDMEFMU0VDSUFBdEFDZ2hBeUFBS0FJNElRUWdBQkRDZ0lDQUFCb2dBQ0FFTmdJNElBQWdBem9BS0NBQUlBSTZBQzBnQUNBQk5nSVlDeEVBSUFBZ0FTQUJJQUpxRU1PQWdJQUFDeEFBSUFCQkFFSGNBQkRNZ0lDQUFCb0xad0VCZjBFQUlRRUNRQ0FBS0FJTURRQUNRQUpBQWtBQ1FDQUFMUUF2RGdNQkFBTUNDeUFBS0FJNElnRkZEUUFnQVNnQ0xDSUJSUTBBSUFBZ0FSR0FnSUNBQUFBaUFRMERDMEVBRHdzUXlvQ0FnQUFBQ3lBQVFjT1dnSUFBTmdJUVFRNGhBUXNnQVFzZUFBSkFJQUFvQWd3TkFDQUFRZEdiZ0lBQU5nSVFJQUJCRlRZQ0RBc0xGZ0FDUUNBQUtBSU1RUlZIRFFBZ0FFRUFOZ0lNQ3dzV0FBSkFJQUFvQWd4QkZrY05BQ0FBUVFBMkFnd0xDd2NBSUFBb0Fnd0xCd0FnQUNnQ0VBc0pBQ0FBSUFFMkFoQUxCd0FnQUNnQ0ZBc2lBQUpBSUFCQkpFa05BQkRLZ0lDQUFBQUxJQUJCQW5SQm9MT0FnQUJxS0FJQUN5SUFBa0FnQUVFdVNRMEFFTXFBZ0lBQUFBc2dBRUVDZEVHd3RJQ0FBR29vQWdBTDdnc0JBWDlCNjZpQWdBQWhBUUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBSUFCQm5IOXFEdlFEWTJJQUFXRmhZV0ZoWVFJREJBVmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoQmdjSUNRb0xEQTBPRDJGaFlXRmhFR0ZoWVdGaFlXRmhZV0ZoRVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVJJVEZCVVdGeGdaR2h0aFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaEhCMGVIeUFoSWlNa0pTWW5LQ2txS3l3dExpOHdNVEl6TkRVMllUYzRPVHBoWVdGaFlXRmhZVHRoWVdFOFlXRmhZVDArUDJGaFlXRmhZV0ZoUUdGaFFXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZVUpEUkVWR1IwaEpTa3RNVFU1UFVGRlNVMkZoWVdGaFlXRmhWRlZXVjFoWldsdGhYRjFoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGZVlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFgyQmhDMEhocDRDQUFBOExRYVNoZ0lBQUR3dEJ5NnlBZ0FBUEMwSCtzWUNBQUE4TFFjQ2tnSUFBRHd0QnE2U0FnQUFQQzBHTnFJQ0FBQThMUWVLbWdJQUFEd3RCZ0xDQWdBQVBDMEc1cjRDQUFBOExRZGVrZ0lBQUR3dEI3NStBZ0FBUEMwSGhuNENBQUE4TFFmcWZnSUFBRHd0QjhxQ0FnQUFQQzBHb3I0Q0FBQThMUWE2eWdJQUFEd3RCaUxDQWdBQVBDMEhzcDRDQUFBOExRWUtpZ0lBQUR3dEJqcDJBZ0FBUEMwSFFyb0NBQUE4TFFjcWpnSUFBRHd0QnhiS0FnQUFQQzBIZm5JQ0FBQThMUWRLY2dJQUFEd3RCeEtDQWdBQVBDMEhYb0lDQUFBOExRYUtmZ0lBQUR3dEI3YTZBZ0FBUEMwR3JzSUNBQUE4TFFkU2xnSUFBRHd0QnpLNkFnQUFQQzBINnJvQ0FBQThMUWZ5cmdJQUFEd3RCMHJDQWdBQVBDMEh4bllDQUFBOExRYnVnZ0lBQUR3dEI5NnVBZ0FBUEMwR1FzWUNBQUE4TFFkZXhnSUFBRHd0Qm9xMkFnQUFQQzBIVXA0Q0FBQThMUWVDcmdJQUFEd3RCbjZ5QWdBQVBDMEhyc1lDQUFBOExRZFdmZ0lBQUR3dEJ5ckdBZ0FBUEMwSGVwWUNBQUE4TFFkU2VnSUFBRHd0QjlKeUFnQUFQQzBHbnNvQ0FBQThMUWJHZGdJQUFEd3RCb0oyQWdBQVBDMEc1c1lDQUFBOExRYnl3Z0lBQUR3dEJrcUdBZ0FBUEMwR3pwb0NBQUE4TFFlbXNnSUFBRHd0QnJKNkFnQUFQQzBIVXE0Q0FBQThMUWZlbWdJQUFEd3RCZ0thQWdBQVBDMEd3b1lDQUFBOExRZjZlZ0lBQUR3dEJqYU9BZ0FBUEMwR0pyWUNBQUE4TFFmZWlnSUFBRHd0Qm9MR0FnQUFQQzBHdW40Q0FBQThMUWNhbGdJQUFEd3RCNko2QWdBQVBDMEdUb29DQUFBOExRY0t2Z0lBQUR3dEJ3NTJBZ0FBUEMwR0xySUNBQUE4TFFlR2RnSUFBRHd0QmphK0FnQUFQQzBIcW9ZQ0FBQThMUWJTdGdJQUFEd3RCMHErQWdBQVBDMEhmc29DQUFBOExRZEt5Z0lBQUR3dEI4TENBZ0FBUEMwR3Bvb0NBQUE4TFFmbWpnSUFBRHd0Qm1aNkFnQUFQQzBHMXJJQ0FBQThMUVp1d2dJQUFEd3RCa3JLQWdBQVBDMEcycTRDQUFBOExRY0tpZ0lBQUR3dEIrTEtBZ0FBUEMwR2VwWUNBQUE4TFFkQ2lnSUFBRHd0QnVwNkFnQUFQQzBHQm5vQ0FBQThMRU1xQWdJQUFBQXRCMXFHQWdBQWhBUXNnQVFzV0FDQUFJQUF0QUMxQi9nRnhJQUZCQUVkeU9nQXRDeGtBSUFBZ0FDMEFMVUg5QVhFZ0FVRUFSMEVCZEhJNkFDMExHUUFnQUNBQUxRQXRRZnNCY1NBQlFRQkhRUUowY2pvQUxRc1pBQ0FBSUFBdEFDMUI5d0Z4SUFGQkFFZEJBM1J5T2dBdEN5NEJBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWdBaUJFVU5BQ0FBSUFRUmdJQ0FnQUFBSVFNTElBTUxTUUVDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ0JDSUVSUTBBSUFBZ0FTQUNJQUZySUFRUmdZQ0FnQUFBSWdOQmYwY05BQ0FBUWNhUmdJQUFOZ0lRUVJnaEF3c2dBd3N1QVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSXdJZ1JGRFFBZ0FDQUVFWUNBZ0lBQUFDRURDeUFEQzBrQkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9BZ2dpQkVVTkFDQUFJQUVnQWlBQmF5QUVFWUdBZ0lBQUFDSURRWDlIRFFBZ0FFSDJpb0NBQURZQ0VFRVlJUU1MSUFNTExnRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDTkNJRVJRMEFJQUFnQkJHQWdJQ0FBQUFoQXdzZ0F3dEpBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FJTUlnUkZEUUFnQUNBQklBSWdBV3NnQkJHQmdJQ0FBQUFpQTBGL1J3MEFJQUJCN1pxQWdBQTJBaEJCR0NFREN5QURDeTRCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FqZ2lCRVVOQUNBQUlBUVJnSUNBZ0FBQUlRTUxJQU1MU1FFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NFQ0lFUlEwQUlBQWdBU0FDSUFGcklBUVJnWUNBZ0FBQUlnTkJmMGNOQUNBQVFaV1FnSUFBTmdJUVFSZ2hBd3NnQXdzdUFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUk4SWdSRkRRQWdBQ0FFRVlDQWdJQUFBQ0VEQ3lBREMwa0JBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWhRaUJFVU5BQ0FBSUFFZ0FpQUJheUFFRVlHQWdJQUFBQ0lEUVg5SERRQWdBRUdxbTRDQUFEWUNFRUVZSVFNTElBTUxMZ0VDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ1FDSUVSUTBBSUFBZ0JCR0FnSUNBQUFBaEF3c2dBd3RKQVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSVlJZ1JGRFFBZ0FDQUJJQUlnQVdzZ0JCR0JnSUNBQUFBaUEwRi9SdzBBSUFCQjdaT0FnQUEyQWhCQkdDRURDeUFEQ3k0QkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9Ba1FpQkVVTkFDQUFJQVFSZ0lDQWdBQUFJUU1MSUFNTExnRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDSkNJRVJRMEFJQUFnQkJHQWdJQ0FBQUFoQXdzZ0F3c3VBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FJc0lnUkZEUUFnQUNBRUVZQ0FnSUFBQUNFREN5QURDMGtCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FpZ2lCRVVOQUNBQUlBRWdBaUFCYXlBRUVZR0FnSUFBQUNJRFFYOUhEUUFnQUVIMmlJQ0FBRFlDRUVFWUlRTUxJQU1MTGdFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NVQ0lFUlEwQUlBQWdCQkdBZ0lDQUFBQWhBd3NnQXd0SkFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUljSWdSRkRRQWdBQ0FCSUFJZ0FXc2dCQkdCZ0lDQUFBQWlBMEYvUncwQUlBQkJ3cG1BZ0FBMkFoQkJHQ0VEQ3lBREN5NEJBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWtnaUJFVU5BQ0FBSUFRUmdJQ0FnQUFBSVFNTElBTUxTUUVDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ0lDSUVSUTBBSUFBZ0FTQUNJQUZySUFRUmdZQ0FnQUFBSWdOQmYwY05BQ0FBUVpTVWdJQUFOZ0lRUVJnaEF3c2dBd3N1QVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSk1JZ1JGRFFBZ0FDQUVFWUNBZ0lBQUFDRURDeUFEQ3k0QkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9BbFFpQkVVTkFDQUFJQVFSZ0lDQWdBQUFJUU1MSUFNTExnRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDV0NJRVJRMEFJQUFnQkJHQWdJQ0FBQUFoQXdzZ0F3dEZBUUYvQWtBQ1FDQUFMd0V3UVJSeFFSUkhEUUJCQVNFRElBQXRBQ2hCQVVZTkFTQUFMd0V5UWVVQVJpRUREQUVMSUFBdEFDbEJCVVloQXdzZ0FDQURPZ0F1UVFBTC9nRUJBMzlCQVNFREFrQWdBQzhCTUNJRVFRaHhEUUFnQUNrRElFSUFVaUVEQ3dKQUFrQWdBQzBBTGtVTkFFRUJJUVVnQUMwQUtVRUZSZzBCUVFFaEJTQUVRY0FBY1VVZ0EzRkJBVWNOQVF0QkFDRUZJQVJCd0FCeERRQkJBaUVGSUFSQi8vOERjU0lEUVFoeERRQUNRQ0FEUVlBRWNVVU5BQUpBSUFBdEFDaEJBVWNOQUNBQUxRQXRRUXB4RFFCQkJROExRUVFQQ3dKQUlBTkJJSEVOQUFKQUlBQXRBQ2hCQVVZTkFDQUFMd0V5UWYvL0EzRWlBRUdjZjJwQjVBQkpEUUFnQUVITUFVWU5BQ0FBUWJBQ1JnMEFRUVFoQlNBRVFTaHhSUTBDSUFOQmlBUnhRWUFFUmcwQ0MwRUFEd3RCQUVFRElBQXBBeUJRR3lFRkN5QUZDMklCQW45QkFDRUJBa0FnQUMwQUtFRUJSZzBBSUFBdkFUSkIvLzhEY1NJQ1FaeC9ha0hrQUVrTkFDQUNRY3dCUmcwQUlBSkJzQUpHRFFBZ0FDOEJNQ0lBUWNBQWNRMEFRUUVoQVNBQVFZZ0VjVUdBQkVZTkFDQUFRU2h4UlNFQkN5QUJDNmNCQVFOL0FrQUNRQUpBSUFBdEFDcEZEUUFnQUMwQUswVU5BRUVBSVFNZ0FDOEJNQ0lFUVFKeFJRMEJEQUlMUVFBaEF5QUFMd0V3SWdSQkFYRkZEUUVMUVFFaEF5QUFMUUFvUVFGR0RRQWdBQzhCTWtILy93TnhJZ1ZCbkg5cVFlUUFTUTBBSUFWQnpBRkdEUUFnQlVHd0FrWU5BQ0FFUWNBQWNRMEFRUUFoQXlBRVFZZ0VjVUdBQkVZTkFDQUVRU2h4UVFCSElRTUxJQUJCQURzQk1DQUFRUUE2QUM4Z0F3dVpBUUVDZndKQUFrQUNRQ0FBTFFBcVJRMEFJQUF0QUN0RkRRQkJBQ0VCSUFBdkFUQWlBa0VDY1VVTkFRd0NDMEVBSVFFZ0FDOEJNQ0lDUVFGeFJRMEJDMEVCSVFFZ0FDMEFLRUVCUmcwQUlBQXZBVEpCLy84RGNTSUFRWngvYWtIa0FFa05BQ0FBUWN3QlJnMEFJQUJCc0FKR0RRQWdBa0hBQUhFTkFFRUFJUUVnQWtHSUJIRkJnQVJHRFFBZ0FrRW9jVUVBUnlFQkN5QUJDMGtCQVhzZ0FFRVFhdjBNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ0lCL1FzREFDQUFJQUg5Q3dNQUlBQkJNR29nQWYwTEF3QWdBRUVnYWlBQi9Rc0RBQ0FBUWQwQk5nSWNRUUFMZXdFQmZ3SkFJQUFvQWd3aUF3MEFBa0FnQUNnQ0JFVU5BQ0FBSUFFMkFnUUxBa0FnQUNBQklBSVF4SUNBZ0FBaUF3MEFJQUFvQWd3UEN5QUFJQU0yQWh4QkFDRURJQUFvQWdRaUFVVU5BQ0FBSUFFZ0FpQUFLQUlJRVlHQWdJQUFBQ0lCUlEwQUlBQWdBallDRkNBQUlBRTJBZ3dnQVNFREN5QURDK1R6QVFNT2Z3TitCSDhqZ0lDQWdBQkJFR3NpQXlTQWdJQ0FBQ0FCSVFRZ0FTRUZJQUVoQmlBQklRY2dBU0VJSUFFaENTQUJJUW9nQVNFTElBRWhEQ0FCSVEwZ0FTRU9JQUVoRHdKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUNBQUtBSWNJaEJCZjJvTzNRSGFBUUhaQVFJREJBVUdCd2dKQ2dzTURRN1lBUThRMXdFUkV0WUJFeFFWRmhjWUdSb2I0QUhmQVJ3ZEh0VUJIeUFoSWlNa0pkUUJKaWNvS1NvckxOTUIwZ0V0THRFQjBBRXZNREV5TXpRMU5qYzRPVG83UEQwK1AwQkJRa05FUlViYkFVZElTVXJQQWM0QlM4MEJUTXdCVFU1UFVGRlNVMVJWVmxkWVdWcGJYRjFlWDJCaFltTmtaV1puYUdscWEyeHRibTl3Y1hKemRIVjJkM2g1ZW50OGZYNS9nQUdCQVlJQmd3R0VBWVVCaGdHSEFZZ0JpUUdLQVlzQmpBR05BWTRCandHUUFaRUJrZ0dUQVpRQmxRR1dBWmNCbUFHWkFab0Jtd0djQVowQm5nR2ZBYUFCb1FHaUFhTUJwQUdsQWFZQnB3R29BYWtCcWdHckFhd0JyUUd1QWE4QnNBR3hBYklCc3dHMEFiVUJ0Z0czQWNzQnlnRzRBY2tCdVFISUFib0J1d0c4QWIwQnZnRy9BY0FCd1FIQ0FjTUJ4QUhGQWNZQkFOd0JDMEVBSVJBTXhnRUxRUTRoRUF6RkFRdEJEU0VRRE1RQkMwRVBJUkFNd3dFTFFSQWhFQXpDQVF0QkV5RVFETUVCQzBFVUlSQU13QUVMUVJVaEVBeS9BUXRCRmlFUURMNEJDMEVYSVJBTXZRRUxRUmdoRUF5OEFRdEJHU0VRRExzQkMwRWFJUkFNdWdFTFFSc2hFQXk1QVF0QkhDRVFETGdCQzBFSUlSQU10d0VMUVIwaEVBeTJBUXRCSUNFUURMVUJDMEVmSVJBTXRBRUxRUWNoRUF5ekFRdEJJU0VRRExJQkMwRWlJUkFNc1FFTFFSNGhFQXl3QVF0Qkl5RVFESzhCQzBFU0lSQU1yZ0VMUVJFaEVBeXRBUXRCSkNFUURLd0JDMEVsSVJBTXF3RUxRU1loRUF5cUFRdEJKeUVRREtrQkMwSERBU0VRREtnQkMwRXBJUkFNcHdFTFFTc2hFQXltQVF0QkxDRVFES1VCQzBFdElSQU1wQUVMUVM0aEVBeWpBUXRCTHlFUURLSUJDMEhFQVNFUURLRUJDMEV3SVJBTW9BRUxRVFFoRUF5ZkFRdEJEQ0VRREo0QkMwRXhJUkFNblFFTFFUSWhFQXljQVF0Qk15RVFESnNCQzBFNUlSQU1tZ0VMUVRVaEVBeVpBUXRCeFFFaEVBeVlBUXRCQ3lFUURKY0JDMEU2SVJBTWxnRUxRVFloRUF5VkFRdEJDaUVRREpRQkMwRTNJUkFNa3dFTFFUZ2hFQXlTQVF0QlBDRVFESkVCQzBFN0lSQU1rQUVMUVQwaEVBeVBBUXRCQ1NFUURJNEJDMEVvSVJBTWpRRUxRVDRoRUF5TUFRdEJQeUVRRElzQkMwSEFBQ0VRRElvQkMwSEJBQ0VRRElrQkMwSENBQ0VRRElnQkMwSERBQ0VRREljQkMwSEVBQ0VRRElZQkMwSEZBQ0VRRElVQkMwSEdBQ0VRRElRQkMwRXFJUkFNZ3dFTFFjY0FJUkFNZ2dFTFFjZ0FJUkFNZ1FFTFFja0FJUkFNZ0FFTFFjb0FJUkFNZnd0Qnl3QWhFQXgrQzBITkFDRVFESDBMUWN3QUlSQU1mQXRCemdBaEVBeDdDMEhQQUNFUURIb0xRZEFBSVJBTWVRdEIwUUFoRUF4NEMwSFNBQ0VRREhjTFFkTUFJUkFNZGd0QjFBQWhFQXgxQzBIV0FDRVFESFFMUWRVQUlSQU1jd3RCQmlFUURISUxRZGNBSVJBTWNRdEJCU0VRREhBTFFkZ0FJUkFNYnd0QkJDRVFERzRMUWRrQUlSQU1iUXRCMmdBaEVBeHNDMEhiQUNFUURHc0xRZHdBSVJBTWFndEJBeUVRREdrTFFkMEFJUkFNYUF0QjNnQWhFQXhuQzBIZkFDRVFER1lMUWVFQUlSQU1aUXRCNEFBaEVBeGtDMEhpQUNFUURHTUxRZU1BSVJBTVlndEJBaUVRREdFTFFlUUFJUkFNWUF0QjVRQWhFQXhmQzBIbUFDRVFERjRMUWVjQUlSQU1YUXRCNkFBaEVBeGNDMEhwQUNFUURGc0xRZW9BSVJBTVdndEI2d0FoRUF4WkMwSHNBQ0VRREZnTFFlMEFJUkFNVnd0QjdnQWhFQXhXQzBIdkFDRVFERlVMUWZBQUlSQU1WQXRCOFFBaEVBeFRDMEh5QUNFUURGSUxRZk1BSVJBTVVRdEI5QUFoRUF4UUMwSDFBQ0VRREU4TFFmWUFJUkFNVGd0Qjl3QWhFQXhOQzBINEFDRVFERXdMUWZrQUlSQU1Td3RCK2dBaEVBeEtDMEg3QUNFUURFa0xRZndBSVJBTVNBdEIvUUFoRUF4SEMwSCtBQ0VRREVZTFFmOEFJUkFNUlF0QmdBRWhFQXhFQzBHQkFTRVFERU1MUVlJQklSQU1RZ3RCZ3dFaEVBeEJDMEdFQVNFUURFQUxRWVVCSVJBTVB3dEJoZ0VoRUF3K0MwR0hBU0VRREQwTFFZZ0JJUkFNUEF0QmlRRWhFQXc3QzBHS0FTRVFERG9MUVlzQklSQU1PUXRCakFFaEVBdzRDMEdOQVNFUUREY0xRWTRCSVJBTU5ndEJqd0VoRUF3MUMwR1FBU0VRRERRTFFaRUJJUkFNTXd0QmtnRWhFQXd5QzBHVEFTRVFEREVMUVpRQklSQU1NQXRCbFFFaEVBd3ZDMEdXQVNFUURDNExRWmNCSVJBTUxRdEJtQUVoRUF3c0MwR1pBU0VRRENzTFFab0JJUkFNS2d0Qm13RWhFQXdwQzBHY0FTRVFEQ2dMUVowQklSQU1Kd3RCbmdFaEVBd21DMEdmQVNFUURDVUxRYUFCSVJBTUpBdEJvUUVoRUF3akMwR2lBU0VRRENJTFFhTUJJUkFNSVF0QnBBRWhFQXdnQzBHbEFTRVFEQjhMUWFZQklSQU1IZ3RCcHdFaEVBd2RDMEdvQVNFUURCd0xRYWtCSVJBTUd3dEJxZ0VoRUF3YUMwR3JBU0VRREJrTFFhd0JJUkFNR0F0QnJRRWhFQXdYQzBHdUFTRVFEQllMUVFFaEVBd1ZDMEd2QVNFUURCUUxRYkFCSVJBTUV3dEJzUUVoRUF3U0MwR3pBU0VRREJFTFFiSUJJUkFNRUF0QnRBRWhFQXdQQzBHMUFTRVFEQTRMUWJZQklSQU1EUXRCdHdFaEVBd01DMEc0QVNFUURBc0xRYmtCSVJBTUNndEJ1Z0VoRUF3SkMwRzdBU0VRREFnTFFjWUJJUkFNQnd0QnZBRWhFQXdHQzBHOUFTRVFEQVVMUWI0QklSQU1CQXRCdndFaEVBd0RDMEhBQVNFUURBSUxRY0lCSVJBTUFRdEJ3UUVoRUFzRFFBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQkFPeHdFQUFRSURCQVVHQndnSkNnc01EUTRQRUJFU0V4UVZGaGNZR1JvYkhCNGZJQ0VqSlNnL1FFRkVSVVpIU0VsS1MweE5UMUJSVWxQZUExZFpXMXhkWUdKbFptZG9hV3ByYkcxdmNIRnljM1IxZG5kNGVYcDdmSDErZ0FHQ0FZVUJoZ0dIQVlrQml3R01BWTBCamdHUEFaQUJrUUdVQVpVQmxnR1hBWmdCbVFHYUFac0JuQUdkQVo0Qm53R2dBYUVCb2dHakFhUUJwUUdtQWFjQnFBR3BBYW9CcXdHc0FhMEJyZ0d2QWJBQnNRR3lBYk1CdEFHMUFiWUJ0d0c0QWJrQnVnRzdBYndCdlFHK0FiOEJ3QUhCQWNJQnd3SEVBY1VCeGdISEFjZ0J5UUhLQWNzQnpBSE5BYzRCendIUUFkRUIwZ0hUQWRRQjFRSFdBZGNCMkFIWkFkb0Iyd0hjQWQwQjNnSGdBZUVCNGdIakFlUUI1UUhtQWVjQjZBSHBBZW9CNndIc0FlMEI3Z0h2QWZBQjhRSHlBZk1CbVFLa0FyQUMvZ0wrQWdzZ0FTSUVJQUpIRGZNQlFkMEJJUkFNL3dNTElBRWlFQ0FDUnczZEFVSERBU0VRRFA0REN5QUJJZ0VnQWtjTmtBRkI5d0FoRUF6OUF3c2dBU0lCSUFKSERZWUJRZThBSVJBTS9BTUxJQUVpQVNBQ1J3MS9RZW9BSVJBTSt3TUxJQUVpQVNBQ1J3MTdRZWdBSVJBTStnTUxJQUVpQVNBQ1J3MTRRZVlBSVJBTStRTUxJQUVpQVNBQ1J3MGFRUmdoRUF6NEF3c2dBU0lCSUFKSERSUkJFaUVRRFBjREN5QUJJZ0VnQWtjTldVSEZBQ0VRRFBZREN5QUJJZ0VnQWtjTlNrRS9JUkFNOVFNTElBRWlBU0FDUncxSVFUd2hFQXowQXdzZ0FTSUJJQUpIRFVGQk1TRVFEUE1EQ3lBQUxRQXVRUUZHRGVzRERJY0NDeUFBSUFFaUFTQUNFTUNBZ0lBQVFRRkhEZVlCSUFCQ0FEY0RJQXpuQVFzZ0FDQUJJZ0VnQWhDMGdJQ0FBQ0lRRGVjQklBRWhBUXoxQWdzQ1FDQUJJZ0VnQWtjTkFFRUdJUkFNOEFNTElBQWdBVUVCYWlJQklBSVF1NENBZ0FBaUVBM29BU0FCSVFFTU1Rc2dBRUlBTndNZ1FSSWhFQXpWQXdzZ0FTSVFJQUpIRFN0QkhTRVFETzBEQ3dKQUlBRWlBU0FDUmcwQUlBRkJBV29oQVVFUUlSQU0xQU1MUVFjaEVBenNBd3NnQUVJQUlBQXBBeUFpRVNBQ0lBRWlFR3V0SWhKOUloTWdFeUFSVmhzM0F5QWdFU0FTVmlJVVJRM2xBVUVJSVJBTTZ3TUxBa0FnQVNJQklBSkdEUUFnQUVHSmdJQ0FBRFlDQ0NBQUlBRTJBZ1FnQVNFQlFSUWhFQXpTQXd0QkNTRVFET29EQ3lBQklRRWdBQ2tESUZBTjVBRWdBU0VCRFBJQ0N3SkFJQUVpQVNBQ1J3MEFRUXNoRUF6cEF3c2dBQ0FCUVFGcUlnRWdBaEMyZ0lDQUFDSVFEZVVCSUFFaEFRenlBZ3NnQUNBQklnRWdBaEM0Z0lDQUFDSVFEZVVCSUFFaEFRenlBZ3NnQUNBQklnRWdBaEM0Z0lDQUFDSVFEZVlCSUFFaEFRd05DeUFBSUFFaUFTQUNFTHFBZ0lBQUloQU41d0VnQVNFQkRQQUNDd0pBSUFFaUFTQUNSdzBBUVE4aEVBemxBd3NnQVMwQUFDSVFRVHRHRFFnZ0VFRU5SdzNvQVNBQlFRRnFJUUVNN3dJTElBQWdBU0lCSUFJUXVvQ0FnQUFpRUEzb0FTQUJJUUVNOGdJTEEwQUNRQ0FCTFFBQVFmQzFnSUFBYWkwQUFDSVFRUUZHRFFBZ0VFRUNSdzNyQVNBQUtBSUVJUkFnQUVFQU5nSUVJQUFnRUNBQlFRRnFJZ0VRdVlDQWdBQWlFQTNxQVNBQklRRU05QUlMSUFGQkFXb2lBU0FDUncwQUMwRVNJUkFNNGdNTElBQWdBU0lCSUFJUXVvQ0FnQUFpRUEzcEFTQUJJUUVNQ2dzZ0FTSUJJQUpIRFFaQkd5RVFET0FEQ3dKQUlBRWlBU0FDUncwQVFSWWhFQXpnQXdzZ0FFR0tnSUNBQURZQ0NDQUFJQUUyQWdRZ0FDQUJJQUlRdUlDQWdBQWlFQTNxQVNBQklRRkJJQ0VRRE1ZREN3SkFJQUVpQVNBQ1JnMEFBMEFDUUNBQkxRQUFRZkMzZ0lBQWFpMEFBQ0lRUVFKR0RRQUNRQ0FRUVg5cURnVGxBZXdCQU9zQjdBRUxJQUZCQVdvaEFVRUlJUkFNeUFNTElBRkJBV29pQVNBQ1J3MEFDMEVWSVJBTTN3TUxRUlVoRUF6ZUF3c0RRQUpBSUFFdEFBQkI4TG1BZ0FCcUxRQUFJaEJCQWtZTkFDQVFRWDlxRGdUZUFld0I0QUhyQWV3QkN5QUJRUUZxSWdFZ0FrY05BQXRCR0NFUUROMERDd0pBSUFFaUFTQUNSZzBBSUFCQmk0Q0FnQUEyQWdnZ0FDQUJOZ0lFSUFFaEFVRUhJUkFNeEFNTFFSa2hFQXpjQXdzZ0FVRUJhaUVCREFJTEFrQWdBU0lVSUFKSERRQkJHaUVRRE5zREN5QVVJUUVDUUNBVUxRQUFRWE5xRGhUZEF1NEM3Z0x1QXU0QzdnTHVBdTRDN2dMdUF1NEM3Z0x1QXU0QzdnTHVBdTRDN2dMdUFnRHVBZ3RCQUNFUUlBQkJBRFlDSENBQVFhK0xnSUFBTmdJUUlBQkJBallDRENBQUlCUkJBV28yQWhRTTJnTUxBa0FnQVMwQUFDSVFRVHRHRFFBZ0VFRU5SdzNvQVNBQlFRRnFJUUVNNVFJTElBRkJBV29oQVF0QklpRVFETDhEQ3dKQUlBRWlFQ0FDUncwQVFSd2hFQXpZQXd0Q0FDRVJJQkFoQVNBUUxRQUFRVkJxRGpmbkFlWUJBUUlEQkFVR0J3Z0FBQUFBQUFBQUNRb0xEQTBPQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFQRUJFU0V4UUFDMEVlSVJBTXZRTUxRZ0loRVF6bEFRdENBeUVSRE9RQkMwSUVJUkVNNHdFTFFnVWhFUXppQVF0Q0JpRVJET0VCQzBJSElSRU00QUVMUWdnaEVRemZBUXRDQ1NFUkRONEJDMElLSVJFTTNRRUxRZ3NoRVF6Y0FRdENEQ0VSRE5zQkMwSU5JUkVNMmdFTFFnNGhFUXpaQVF0Q0R5RVJETmdCQzBJS0lSRU0xd0VMUWdzaEVReldBUXRDRENFUkROVUJDMElOSVJFTTFBRUxRZzRoRVF6VEFRdENEeUVSRE5JQkMwSUFJUkVDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUlCQXRBQUJCVUdvT04rVUI1QUVBQVFJREJBVUdCK1lCNWdIbUFlWUI1Z0htQWVZQkNBa0tDd3dONWdIbUFlWUI1Z0htQWVZQjVnSG1BZVlCNWdIbUFlWUI1Z0htQWVZQjVnSG1BZVlCNWdIbUFlWUI1Z0htQWVZQjVnSG1BUTRQRUJFU0UrWUJDMElDSVJFTTVBRUxRZ01oRVF6akFRdENCQ0VSRE9JQkMwSUZJUkVNNFFFTFFnWWhFUXpnQVF0Q0J5RVJETjhCQzBJSUlSRU0zZ0VMUWdraEVRemRBUXRDQ2lFUkROd0JDMElMSVJFTTJ3RUxRZ3doRVF6YUFRdENEU0VSRE5rQkMwSU9JUkVNMkFFTFFnOGhFUXpYQVF0Q0NpRVJETllCQzBJTElSRU0xUUVMUWd3aEVRelVBUXRDRFNFUkROTUJDMElPSVJFTTBnRUxRZzhoRVF6UkFRc2dBRUlBSUFBcEF5QWlFU0FDSUFFaUVHdXRJaEo5SWhNZ0V5QVJWaHMzQXlBZ0VTQVNWaUlVUlEzU0FVRWZJUkFNd0FNTEFrQWdBU0lCSUFKR0RRQWdBRUdKZ0lDQUFEWUNDQ0FBSUFFMkFnUWdBU0VCUVNRaEVBeW5Bd3RCSUNFUURMOERDeUFBSUFFaUVDQUNFTDZBZ0lBQVFYOXFEZ1cyQVFERkFnSFJBZElCQzBFUklSQU1wQU1MSUFCQkFUb0FMeUFRSVFFTXV3TUxJQUVpQVNBQ1J3M1NBVUVrSVJBTXV3TUxJQUVpRFNBQ1J3MGVRY1lBSVJBTXVnTUxJQUFnQVNJQklBSVFzb0NBZ0FBaUVBM1VBU0FCSVFFTXRRRUxJQUVpRUNBQ1J3MG1RZEFBSVJBTXVBTUxBa0FnQVNJQklBSkhEUUJCS0NFUURMZ0RDeUFBUVFBMkFnUWdBRUdNZ0lDQUFEWUNDQ0FBSUFFZ0FSQ3hnSUNBQUNJUURkTUJJQUVoQVF6WUFRc0NRQ0FCSWhBZ0FrY05BRUVwSVJBTXR3TUxJQkF0QUFBaUFVRWdSZzBVSUFGQkNVY04wd0VnRUVFQmFpRUJEQlVMQWtBZ0FTSUJJQUpHRFFBZ0FVRUJhaUVCREJjTFFTb2hFQXkxQXdzQ1FDQUJJaEFnQWtjTkFFRXJJUkFNdFFNTEFrQWdFQzBBQUNJQlFRbEdEUUFnQVVFZ1J3M1ZBUXNnQUMwQUxFRUlSZzNUQVNBUUlRRU1rUU1MQWtBZ0FTSUJJQUpIRFFCQkxDRVFETFFEQ3lBQkxRQUFRUXBIRGRVQklBRkJBV29oQVF6SkFnc2dBU0lPSUFKSERkVUJRUzhoRUF5eUF3c0RRQUpBSUFFdEFBQWlFRUVnUmcwQUFrQWdFRUYyYWc0RUFOd0IzQUVBMmdFTElBRWhBUXpnQVFzZ0FVRUJhaUlCSUFKSERRQUxRVEVoRUF5eEF3dEJNaUVRSUFFaUZDQUNSZzJ3QXlBQ0lCUnJJQUFvQWdBaUFXb2hGU0FVSUFGclFRTnFJUllDUUFOQUlCUXRBQUFpRjBFZ2NpQVhJQmRCdjM5cVFmOEJjVUVhU1J0Qi93RnhJQUZCOEx1QWdBQnFMUUFBUncwQkFrQWdBVUVEUncwQVFRWWhBUXlXQXdzZ0FVRUJhaUVCSUJSQkFXb2lGQ0FDUncwQUN5QUFJQlUyQWdBTXNRTUxJQUJCQURZQ0FDQVVJUUVNMlFFTFFUTWhFQ0FCSWhRZ0FrWU5yd01nQWlBVWF5QUFLQUlBSWdGcUlSVWdGQ0FCYTBFSWFpRVdBa0FEUUNBVUxRQUFJaGRCSUhJZ0Z5QVhRYjkvYWtIL0FYRkJHa2tiUWY4QmNTQUJRZlM3Z0lBQWFpMEFBRWNOQVFKQUlBRkJDRWNOQUVFRklRRU1sUU1MSUFGQkFXb2hBU0FVUVFGcUloUWdBa2NOQUFzZ0FDQVZOZ0lBRExBREN5QUFRUUEyQWdBZ0ZDRUJETmdCQzBFMElSQWdBU0lVSUFKR0RhNERJQUlnRkdzZ0FDZ0NBQ0lCYWlFVklCUWdBV3RCQldvaEZnSkFBMEFnRkMwQUFDSVhRU0J5SUJjZ0YwRy9mMnBCL3dGeFFScEpHMEgvQVhFZ0FVSFF3b0NBQUdvdEFBQkhEUUVDUUNBQlFRVkhEUUJCQnlFQkRKUURDeUFCUVFGcUlRRWdGRUVCYWlJVUlBSkhEUUFMSUFBZ0ZUWUNBQXl2QXdzZ0FFRUFOZ0lBSUJRaEFRelhBUXNDUUNBQklnRWdBa1lOQUFOQUFrQWdBUzBBQUVHQXZvQ0FBR290QUFBaUVFRUJSZzBBSUJCQkFrWU5DaUFCSVFFTTNRRUxJQUZCQVdvaUFTQUNSdzBBQzBFd0lSQU1yZ01MUVRBaEVBeXRBd3NDUUNBQklnRWdBa1lOQUFOQUFrQWdBUzBBQUNJUVFTQkdEUUFnRUVGMmFnNEUyUUhhQWRvQjJRSGFBUXNnQVVFQmFpSUJJQUpIRFFBTFFUZ2hFQXl0QXd0Qk9DRVFES3dEQ3dOQUFrQWdBUzBBQUNJUVFTQkdEUUFnRUVFSlJ3MERDeUFCUVFGcUlnRWdBa2NOQUF0QlBDRVFES3NEQ3dOQUFrQWdBUzBBQUNJUVFTQkdEUUFDUUFKQUlCQkJkbW9PQk5vQkFRSGFBUUFMSUJCQkxFWU4yd0VMSUFFaEFRd0VDeUFCUVFGcUlnRWdBa2NOQUF0QlB5RVFES29EQ3lBQklRRU0yd0VMUWNBQUlSQWdBU0lVSUFKR0RhZ0RJQUlnRkdzZ0FDZ0NBQ0lCYWlFV0lCUWdBV3RCQm1vaEZ3SkFBMEFnRkMwQUFFRWdjaUFCUVlEQWdJQUFhaTBBQUVjTkFTQUJRUVpHRFk0RElBRkJBV29oQVNBVVFRRnFJaFFnQWtjTkFBc2dBQ0FXTmdJQURLa0RDeUFBUVFBMkFnQWdGQ0VCQzBFMklSQU1qZ01MQWtBZ0FTSVBJQUpIRFFCQndRQWhFQXluQXdzZ0FFR01nSUNBQURZQ0NDQUFJQTgyQWdRZ0R5RUJJQUF0QUN4QmYyb09CTTBCMVFIWEFka0Jod01MSUFGQkFXb2hBUXpNQVFzQ1FDQUJJZ0VnQWtZTkFBTkFBa0FnQVMwQUFDSVFRU0J5SUJBZ0VFRy9mMnBCL3dGeFFScEpHMEgvQVhFaUVFRUpSZzBBSUJCQklFWU5BQUpBQWtBQ1FBSkFJQkJCblg5cURoTUFBd01EQXdNREF3RURBd01EQXdNREF3TUNBd3NnQVVFQmFpRUJRVEVoRUF5UkF3c2dBVUVCYWlFQlFUSWhFQXlRQXdzZ0FVRUJhaUVCUVRNaEVBeVBBd3NnQVNFQkROQUJDeUFCUVFGcUlnRWdBa2NOQUF0Qk5TRVFES1VEQzBFMUlSQU1wQU1MQWtBZ0FTSUJJQUpHRFFBRFFBSkFJQUV0QUFCQmdMeUFnQUJxTFFBQVFRRkdEUUFnQVNFQkROTUJDeUFCUVFGcUlnRWdBa2NOQUF0QlBTRVFES1FEQzBFOUlSQU1vd01MSUFBZ0FTSUJJQUlRc0lDQWdBQWlFQTNXQVNBQklRRU1BUXNnRUVFQmFpRUJDMEU4SVJBTWh3TUxBa0FnQVNJQklBSkhEUUJCd2dBaEVBeWdBd3NDUUFOQUFrQWdBUzBBQUVGM2FnNFlBQUwrQXY0Q2hBUCtBdjRDL2dMK0F2NEMvZ0wrQXY0Qy9nTCtBdjRDL2dMK0F2NEMvZ0wrQXY0Qy9nSUEvZ0lMSUFGQkFXb2lBU0FDUncwQUMwSENBQ0VRREtBREN5QUJRUUZxSVFFZ0FDMEFMVUVCY1VVTnZRRWdBU0VCQzBFc0lSQU1oUU1MSUFFaUFTQUNSdzNUQVVIRUFDRVFESjBEQ3dOQUFrQWdBUzBBQUVHUXdJQ0FBR290QUFCQkFVWU5BQ0FCSVFFTXR3SUxJQUZCQVdvaUFTQUNSdzBBQzBIRkFDRVFESndEQ3lBTkxRQUFJaEJCSUVZTnN3RWdFRUU2UncyQkF5QUFLQUlFSVFFZ0FFRUFOZ0lFSUFBZ0FTQU5FSytBZ0lBQUlnRU4wQUVnRFVFQmFpRUJETE1DQzBISEFDRVFJQUVpRFNBQ1JnMmFBeUFDSUExcklBQW9BZ0FpQVdvaEZpQU5JQUZyUVFWcUlSY0RRQ0FOTFFBQUloUkJJSElnRkNBVVFiOS9ha0gvQVhGQkdra2JRZjhCY1NBQlFaRENnSUFBYWkwQUFFY05nQU1nQVVFRlJnMzBBaUFCUVFGcUlRRWdEVUVCYWlJTklBSkhEUUFMSUFBZ0ZqWUNBQXlhQXd0QnlBQWhFQ0FCSWcwZ0FrWU5tUU1nQWlBTmF5QUFLQUlBSWdGcUlSWWdEU0FCYTBFSmFpRVhBMEFnRFMwQUFDSVVRU0J5SUJRZ0ZFRy9mMnBCL3dGeFFScEpHMEgvQVhFZ0FVR1d3b0NBQUdvdEFBQkhEZjhDQWtBZ0FVRUpSdzBBUVFJaEFRejFBZ3NnQVVFQmFpRUJJQTFCQVdvaURTQUNSdzBBQ3lBQUlCWTJBZ0FNbVFNTEFrQWdBU0lOSUFKSERRQkJ5UUFoRUF5WkF3c0NRQUpBSUEwdEFBQWlBVUVnY2lBQklBRkJ2MzlxUWY4QmNVRWFTUnRCL3dGeFFaSi9hZzRIQUlBRGdBT0FBNEFEZ0FNQmdBTUxJQTFCQVdvaEFVRStJUkFNZ0FNTElBMUJBV29oQVVFL0lSQU0vd0lMUWNvQUlSQWdBU0lOSUFKR0RaY0RJQUlnRFdzZ0FDZ0NBQ0lCYWlFV0lBMGdBV3RCQVdvaEZ3TkFJQTB0QUFBaUZFRWdjaUFVSUJSQnYzOXFRZjhCY1VFYVNSdEIvd0Z4SUFGQm9NS0FnQUJxTFFBQVJ3MzlBaUFCUVFGR0RmQUNJQUZCQVdvaEFTQU5RUUZxSWcwZ0FrY05BQXNnQUNBV05nSUFESmNEQzBITEFDRVFJQUVpRFNBQ1JnMldBeUFDSUExcklBQW9BZ0FpQVdvaEZpQU5JQUZyUVE1cUlSY0RRQ0FOTFFBQUloUkJJSElnRkNBVVFiOS9ha0gvQVhGQkdra2JRZjhCY1NBQlFhTENnSUFBYWkwQUFFY04vQUlnQVVFT1JnM3dBaUFCUVFGcUlRRWdEVUVCYWlJTklBSkhEUUFMSUFBZ0ZqWUNBQXlXQXd0QnpBQWhFQ0FCSWcwZ0FrWU5sUU1nQWlBTmF5QUFLQUlBSWdGcUlSWWdEU0FCYTBFUGFpRVhBMEFnRFMwQUFDSVVRU0J5SUJRZ0ZFRy9mMnBCL3dGeFFScEpHMEgvQVhFZ0FVSEF3b0NBQUdvdEFBQkhEZnNDQWtBZ0FVRVBSdzBBUVFNaEFRenhBZ3NnQVVFQmFpRUJJQTFCQVdvaURTQUNSdzBBQ3lBQUlCWTJBZ0FNbFFNTFFjMEFJUkFnQVNJTklBSkdEWlFESUFJZ0RXc2dBQ2dDQUNJQmFpRVdJQTBnQVd0QkJXb2hGd05BSUEwdEFBQWlGRUVnY2lBVUlCUkJ2MzlxUWY4QmNVRWFTUnRCL3dGeElBRkIwTUtBZ0FCcUxRQUFSdzM2QWdKQUlBRkJCVWNOQUVFRUlRRU04QUlMSUFGQkFXb2hBU0FOUVFGcUlnMGdBa2NOQUFzZ0FDQVdOZ0lBREpRREN3SkFJQUVpRFNBQ1J3MEFRYzRBSVJBTWxBTUxBa0FDUUFKQUFrQWdEUzBBQUNJQlFTQnlJQUVnQVVHL2YycEIvd0Z4UVJwSkcwSC9BWEZCblg5cURoTUEvUUw5QXYwQy9RTDlBdjBDL1FMOUF2MEMvUUw5QXYwQ0FmMEMvUUw5QWdJRC9RSUxJQTFCQVdvaEFVSEJBQ0VRRFAwQ0N5QU5RUUZxSVFGQndnQWhFQXo4QWdzZ0RVRUJhaUVCUWNNQUlSQU0rd0lMSUExQkFXb2hBVUhFQUNFUURQb0NDd0pBSUFFaUFTQUNSZzBBSUFCQmpZQ0FnQUEyQWdnZ0FDQUJOZ0lFSUFFaEFVSEZBQ0VRRFBvQ0MwSFBBQ0VRREpJREN5QVFJUUVDUUFKQUlCQXRBQUJCZG1vT0JBR29BcWdDQUtnQ0N5QVFRUUZxSVFFTFFTY2hFQXo0QWdzQ1FDQUJJZ0VnQWtjTkFFSFJBQ0VRREpFREN3SkFJQUV0QUFCQklFWU5BQ0FCSVFFTWpRRUxJQUZCQVdvaEFTQUFMUUF0UVFGeFJRM0hBU0FCSVFFTWpBRUxJQUVpRnlBQ1J3M0lBVUhTQUNFUURJOERDMEhUQUNFUUlBRWlGQ0FDUmcyT0F5QUNJQlJySUFBb0FnQWlBV29oRmlBVUlBRnJRUUZxSVJjRFFDQVVMUUFBSUFGQjFzS0FnQUJxTFFBQVJ3M01BU0FCUVFGR0RjY0JJQUZCQVdvaEFTQVVRUUZxSWhRZ0FrY05BQXNnQUNBV05nSUFESTREQ3dKQUlBRWlBU0FDUncwQVFkVUFJUkFNamdNTElBRXRBQUJCQ2tjTnpBRWdBVUVCYWlFQkRNY0JDd0pBSUFFaUFTQUNSdzBBUWRZQUlSQU1qUU1MQWtBQ1FDQUJMUUFBUVhacURnUUF6UUhOQVFITkFRc2dBVUVCYWlFQkRNY0JDeUFCUVFGcUlRRkJ5Z0FoRUF6ekFnc2dBQ0FCSWdFZ0FoQ3VnSUNBQUNJUURjc0JJQUVoQVVITkFDRVFEUElDQ3lBQUxRQXBRU0pHRFlVRERLWUNDd0pBSUFFaUFTQUNSdzBBUWRzQUlSQU1pZ01MUVFBaEZFRUJJUmRCQVNFV1FRQWhFQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQ0FCTFFBQVFWQnFEZ3JVQWRNQkFBRUNBd1FGQmdqVkFRdEJBaUVRREFZTFFRTWhFQXdGQzBFRUlSQU1CQXRCQlNFUURBTUxRUVloRUF3Q0MwRUhJUkFNQVF0QkNDRVFDMEVBSVJkQkFDRVdRUUFoRkF6TUFRdEJDU0VRUVFFaEZFRUFJUmRCQUNFV0RNc0JDd0pBSUFFaUFTQUNSdzBBUWQwQUlSQU1pUU1MSUFFdEFBQkJMa2NOekFFZ0FVRUJhaUVCREtZQ0N5QUJJZ0VnQWtjTnpBRkIzd0FoRUF5SEF3c0NRQ0FCSWdFZ0FrWU5BQ0FBUVk2QWdJQUFOZ0lJSUFBZ0FUWUNCQ0FCSVFGQjBBQWhFQXp1QWd0QjRBQWhFQXlHQXd0QjRRQWhFQ0FCSWdFZ0FrWU5oUU1nQWlBQmF5QUFLQUlBSWhScUlSWWdBU0FVYTBFRGFpRVhBMEFnQVMwQUFDQVVRZUxDZ0lBQWFpMEFBRWNOelFFZ0ZFRURSZzNNQVNBVVFRRnFJUlFnQVVFQmFpSUJJQUpIRFFBTElBQWdGallDQUF5RkF3dEI0Z0FoRUNBQklnRWdBa1lOaEFNZ0FpQUJheUFBS0FJQUloUnFJUllnQVNBVWEwRUNhaUVYQTBBZ0FTMEFBQ0FVUWViQ2dJQUFhaTBBQUVjTnpBRWdGRUVDUmczT0FTQVVRUUZxSVJRZ0FVRUJhaUlCSUFKSERRQUxJQUFnRmpZQ0FBeUVBd3RCNHdBaEVDQUJJZ0VnQWtZTmd3TWdBaUFCYXlBQUtBSUFJaFJxSVJZZ0FTQVVhMEVEYWlFWEEwQWdBUzBBQUNBVVFlbkNnSUFBYWkwQUFFY055d0VnRkVFRFJnM09BU0FVUVFGcUlSUWdBVUVCYWlJQklBSkhEUUFMSUFBZ0ZqWUNBQXlEQXdzQ1FDQUJJZ0VnQWtjTkFFSGxBQ0VRRElNREN5QUFJQUZCQVdvaUFTQUNFS2lBZ0lBQUloQU56UUVnQVNFQlFkWUFJUkFNNlFJTEFrQWdBU0lCSUFKR0RRQURRQUpBSUFFdEFBQWlFRUVnUmcwQUFrQUNRQUpBSUJCQnVIOXFEZ3NBQWM4Qnp3SFBBYzhCendIUEFjOEJ6d0VDendFTElBRkJBV29oQVVIU0FDRVFETzBDQ3lBQlFRRnFJUUZCMHdBaEVBenNBZ3NnQVVFQmFpRUJRZFFBSVJBTTZ3SUxJQUZCQVdvaUFTQUNSdzBBQzBIa0FDRVFESUlEQzBIa0FDRVFESUVEQ3dOQUFrQWdBUzBBQUVId3dvQ0FBR290QUFBaUVFRUJSZzBBSUJCQmZtb09BODhCMEFIUkFkSUJDeUFCUVFGcUlnRWdBa2NOQUF0QjVnQWhFQXlBQXdzQ1FDQUJJZ0VnQWtZTkFDQUJRUUZxSVFFTUF3dEI1d0FoRUF6L0Fnc0RRQUpBSUFFdEFBQkI4TVNBZ0FCcUxRQUFJaEJCQVVZTkFBSkFJQkJCZm1vT0JOSUIwd0hVQVFEVkFRc2dBU0VCUWRjQUlSQU01d0lMSUFGQkFXb2lBU0FDUncwQUMwSG9BQ0VRRFA0Q0N3SkFJQUVpQVNBQ1J3MEFRZWtBSVJBTS9nSUxBa0FnQVMwQUFDSVFRWFpxRGhxNkFkVUIxUUc4QWRVQjFRSFZBZFVCMVFIVkFkVUIxUUhWQWRVQjFRSFZBZFVCMVFIVkFkVUIxUUhWQWNvQjFRSFZBUURUQVFzZ0FVRUJhaUVCQzBFR0lSQU00d0lMQTBBQ1FDQUJMUUFBUWZER2dJQUFhaTBBQUVFQlJnMEFJQUVoQVF5ZUFnc2dBVUVCYWlJQklBSkhEUUFMUWVvQUlSQU0rd0lMQWtBZ0FTSUJJQUpHRFFBZ0FVRUJhaUVCREFNTFFlc0FJUkFNK2dJTEFrQWdBU0lCSUFKSERRQkI3QUFoRUF6NkFnc2dBVUVCYWlFQkRBRUxBa0FnQVNJQklBSkhEUUJCN1FBaEVBejVBZ3NnQVVFQmFpRUJDMEVFSVJBTTNnSUxBa0FnQVNJVUlBSkhEUUJCN2dBaEVBejNBZ3NnRkNFQkFrQUNRQUpBSUJRdEFBQkI4TWlBZ0FCcUxRQUFRWDlxRGdmVUFkVUIxZ0VBbkFJQkF0Y0JDeUFVUVFGcUlRRU1DZ3NnRkVFQmFpRUJETTBCQzBFQUlSQWdBRUVBTmdJY0lBQkJtNUtBZ0FBMkFoQWdBRUVITmdJTUlBQWdGRUVCYWpZQ0ZBejJBZ3NDUUFOQUFrQWdBUzBBQUVId3lJQ0FBR290QUFBaUVFRUVSZzBBQWtBQ1FDQVFRWDlxRGdmU0FkTUIxQUhaQVFBRUFka0JDeUFCSVFGQjJnQWhFQXpnQWdzZ0FVRUJhaUVCUWR3QUlSQU0zd0lMSUFGQkFXb2lBU0FDUncwQUMwSHZBQ0VRRFBZQ0N5QUJRUUZxSVFFTXl3RUxBa0FnQVNJVUlBSkhEUUJCOEFBaEVBejFBZ3NnRkMwQUFFRXZSdzNVQVNBVVFRRnFJUUVNQmdzQ1FDQUJJaFFnQWtjTkFFSHhBQ0VRRFBRQ0N3SkFJQlF0QUFBaUFVRXZSdzBBSUJSQkFXb2hBVUhkQUNFUUROc0NDeUFCUVhacUlnUkJGa3NOMHdGQkFTQUVkRUdKZ0lBQ2NVVU4wd0VNeWdJTEFrQWdBU0lCSUFKR0RRQWdBVUVCYWlFQlFkNEFJUkFNMmdJTFFmSUFJUkFNOGdJTEFrQWdBU0lVSUFKSERRQkI5QUFoRUF6eUFnc2dGQ0VCQWtBZ0ZDMEFBRUh3eklDQUFHb3RBQUJCZjJvT0E4a0NsQUlBMUFFTFFlRUFJUkFNMkFJTEFrQWdBU0lVSUFKR0RRQURRQUpBSUJRdEFBQkI4TXFBZ0FCcUxRQUFJZ0ZCQTBZTkFBSkFJQUZCZjJvT0Fzc0NBTlVCQ3lBVUlRRkIzd0FoRUF6YUFnc2dGRUVCYWlJVUlBSkhEUUFMUWZNQUlSQU04UUlMUWZNQUlSQU04QUlMQWtBZ0FTSUJJQUpHRFFBZ0FFR1BnSUNBQURZQ0NDQUFJQUUyQWdRZ0FTRUJRZUFBSVJBTTF3SUxRZlVBSVJBTTd3SUxBa0FnQVNJQklBSkhEUUJCOWdBaEVBenZBZ3NnQUVHUGdJQ0FBRFlDQ0NBQUlBRTJBZ1FnQVNFQkMwRURJUkFNMUFJTEEwQWdBUzBBQUVFZ1J3M0RBaUFCUVFGcUlnRWdBa2NOQUF0Qjl3QWhFQXpzQWdzQ1FDQUJJZ0VnQWtjTkFFSDRBQ0VRRE93Q0N5QUJMUUFBUVNCSERjNEJJQUZCQVdvaEFRenZBUXNnQUNBQklnRWdBaENzZ0lDQUFDSVFEYzRCSUFFaEFReU9BZ3NDUUNBQklnUWdBa2NOQUVINkFDRVFET29DQ3lBRUxRQUFRY3dBUnczUkFTQUVRUUZxSVFGQkV5RVFETThCQ3dKQUlBRWlCQ0FDUncwQVFmc0FJUkFNNlFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJCV29oRUFOQUlBUXRBQUFnQVVId3pvQ0FBR290QUFCSERkQUJJQUZCQlVZTnpnRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkIrd0FoRUF6b0Fnc0NRQ0FCSWdRZ0FrY05BRUg4QUNFUURPZ0NDd0pBQWtBZ0JDMEFBRUc5ZjJvT0RBRFJBZEVCMFFIUkFkRUIwUUhSQWRFQjBRSFJBUUhSQVFzZ0JFRUJhaUVCUWVZQUlSQU16d0lMSUFSQkFXb2hBVUhuQUNFUURNNENDd0pBSUFFaUJDQUNSdzBBUWYwQUlSQU01d0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFtb2hFQUpBQTBBZ0JDMEFBQ0FCUWUzUGdJQUFhaTBBQUVjTnp3RWdBVUVDUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFmMEFJUkFNNXdJTElBQkJBRFlDQUNBUVFRRnFJUUZCRUNFUURNd0JDd0pBSUFFaUJDQUNSdzBBUWY0QUlSQU01Z0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkJXb2hFQUpBQTBBZ0JDMEFBQ0FCUWZiT2dJQUFhaTBBQUVjTnpnRWdBVUVGUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFmNEFJUkFNNWdJTElBQkJBRFlDQUNBUVFRRnFJUUZCRmlFUURNc0JDd0pBSUFFaUJDQUNSdzBBUWY4QUlSQU01UUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkEyb2hFQUpBQTBBZ0JDMEFBQ0FCUWZ6T2dJQUFhaTBBQUVjTnpRRWdBVUVEUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFmOEFJUkFNNVFJTElBQkJBRFlDQUNBUVFRRnFJUUZCQlNFUURNb0JDd0pBSUFFaUJDQUNSdzBBUVlBQklSQU01QUlMSUFRdEFBQkIyUUJIRGNzQklBUkJBV29oQVVFSUlSQU15UUVMQWtBZ0FTSUVJQUpIRFFCQmdRRWhFQXpqQWdzQ1FBSkFJQVF0QUFCQnNuOXFEZ01BekFFQnpBRUxJQVJCQVdvaEFVSHJBQ0VRRE1vQ0N5QUVRUUZxSVFGQjdBQWhFQXpKQWdzQ1FDQUJJZ1FnQWtjTkFFR0NBU0VRRE9JQ0N3SkFBa0FnQkMwQUFFRzRmMm9PQ0FETEFjc0J5d0hMQWNzQnl3RUJ5d0VMSUFSQkFXb2hBVUhxQUNFUURNa0NDeUFFUVFGcUlRRkI3UUFoRUF6SUFnc0NRQ0FCSWdRZ0FrY05BRUdEQVNFUURPRUNDeUFDSUFScklBQW9BZ0FpQVdvaEVDQUVJQUZyUVFKcUlSUUNRQU5BSUFRdEFBQWdBVUdBejRDQUFHb3RBQUJIRGNrQklBRkJBa1lOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdFRFlDQUVHREFTRVFET0VDQzBFQUlSQWdBRUVBTmdJQUlCUkJBV29oQVF6R0FRc0NRQ0FCSWdRZ0FrY05BRUdFQVNFUURPQUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFScUlSQUNRQU5BSUFRdEFBQWdBVUdEejRDQUFHb3RBQUJIRGNnQklBRkJCRVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHRUFTRVFET0FDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRU01oRUF6RkFRc0NRQ0FCSWdRZ0FrY05BRUdGQVNFUUROOENDd0pBQWtBZ0JDMEFBRUcwZjJvT0NBRElBY2dCeUFISUFjZ0J5QUVCeUFFTElBUkJBV29oQVVIdkFDRVFETVlDQ3lBRVFRRnFJUUZCOEFBaEVBekZBZ3NDUUNBQklnUWdBa2NOQUVHR0FTRVFETjRDQ3lBRUxRQUFRY1VBUnczRkFTQUVRUUZxSVFFTWd3SUxBa0FnQVNJRUlBSkhEUUJCaHdFaEVBemRBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFRGFpRVFBa0FEUUNBRUxRQUFJQUZCaU0rQWdBQnFMUUFBUnczRkFTQUJRUU5HRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQmh3RWhFQXpkQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUV0SVJBTXdnRUxBa0FnQVNJRUlBSkhEUUJCaUFFaEVBemNBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFSWFpRVFBa0FEUUNBRUxRQUFJQUZCME0rQWdBQnFMUUFBUnczRUFTQUJRUWhHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQmlBRWhFQXpjQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVwSVJBTXdRRUxBa0FnQVNJQklBSkhEUUJCaVFFaEVBemJBZ3RCQVNFUUlBRXRBQUJCM3dCSERjQUJJQUZCQVdvaEFReUJBZ3NDUUNBQklnUWdBa2NOQUVHS0FTRVFETm9DQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRRnFJUkFEUUNBRUxRQUFJQUZCak0rQWdBQnFMUUFBUnczQkFTQUJRUUZHRGE4Q0lBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFZb0JJUkFNMlFJTEFrQWdBU0lFSUFKSERRQkJpd0VoRUF6WkFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVDYWlFUUFrQURRQ0FFTFFBQUlBRkJqcytBZ0FCcUxRQUFSdzNCQVNBQlFRSkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCaXdFaEVBelpBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRUNJUkFNdmdFTEFrQWdBU0lFSUFKSERRQkJqQUVoRUF6WUFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVCYWlFUUFrQURRQ0FFTFFBQUlBRkI4TStBZ0FCcUxRQUFSdzNBQVNBQlFRRkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCakFFaEVBellBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRWZJUkFNdlFFTEFrQWdBU0lFSUFKSERRQkJqUUVoRUF6WEFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVCYWlFUUFrQURRQ0FFTFFBQUlBRkI4cytBZ0FCcUxRQUFSdzIvQVNBQlFRRkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCalFFaEVBelhBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRUpJUkFNdkFFTEFrQWdBU0lFSUFKSERRQkJqZ0VoRUF6V0Fnc0NRQUpBSUFRdEFBQkJ0MzlxRGdjQXZ3Ry9BYjhCdndHL0FRRy9BUXNnQkVFQmFpRUJRZmdBSVJBTXZRSUxJQVJCQVdvaEFVSDVBQ0VRREx3Q0N3SkFJQUVpQkNBQ1J3MEFRWThCSVJBTTFRSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQldvaEVBSkFBMEFnQkMwQUFDQUJRWkhQZ0lBQWFpMEFBRWNOdlFFZ0FVRUZSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVk4QklSQU0xUUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJHQ0VRRExvQkN3SkFJQUVpQkNBQ1J3MEFRWkFCSVJBTTFBSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQW1vaEVBSkFBMEFnQkMwQUFDQUJRWmZQZ0lBQWFpMEFBRWNOdkFFZ0FVRUNSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVpBQklSQU0xQUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJGeUVRRExrQkN3SkFJQUVpQkNBQ1J3MEFRWkVCSVJBTTB3SUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQm1vaEVBSkFBMEFnQkMwQUFDQUJRWnJQZ0lBQWFpMEFBRWNOdXdFZ0FVRUdSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVpFQklSQU0wd0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJGU0VRRExnQkN3SkFJQUVpQkNBQ1J3MEFRWklCSVJBTTBnSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQldvaEVBSkFBMEFnQkMwQUFDQUJRYUhQZ0lBQWFpMEFBRWNOdWdFZ0FVRUZSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVpJQklSQU0wZ0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJIaUVRRExjQkN3SkFJQUVpQkNBQ1J3MEFRWk1CSVJBTTBRSUxJQVF0QUFCQnpBQkhEYmdCSUFSQkFXb2hBVUVLSVJBTXRnRUxBa0FnQkNBQ1J3MEFRWlFCSVJBTTBBSUxBa0FDUUNBRUxRQUFRYjkvYWc0UEFMa0J1UUc1QWJrQnVRRzVBYmtCdVFHNUFia0J1UUc1QWJrQkFia0JDeUFFUVFGcUlRRkIvZ0FoRUF5M0Fnc2dCRUVCYWlFQlFmOEFJUkFNdGdJTEFrQWdCQ0FDUncwQVFaVUJJUkFNendJTEFrQUNRQ0FFTFFBQVFiOS9hZzREQUxnQkFiZ0JDeUFFUVFGcUlRRkIvUUFoRUF5MkFnc2dCRUVCYWlFRVFZQUJJUkFNdFFJTEFrQWdCQ0FDUncwQVFaWUJJUkFNemdJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBV29oRUFKQUEwQWdCQzBBQUNBQlFhZlBnSUFBYWkwQUFFY050Z0VnQVVFQlJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWllCSVJBTXpnSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkN5RVFETE1CQ3dKQUlBUWdBa2NOQUVHWEFTRVFETTBDQ3dKQUFrQUNRQUpBSUFRdEFBQkJVMm9PSXdDNEFiZ0J1QUc0QWJnQnVBRzRBYmdCdUFHNEFiZ0J1QUc0QWJnQnVBRzRBYmdCdUFHNEFiZ0J1QUc0QWJnQkFiZ0J1QUc0QWJnQnVBRUN1QUc0QWJnQkE3Z0JDeUFFUVFGcUlRRkIrd0FoRUF5MkFnc2dCRUVCYWlFQlFmd0FJUkFNdFFJTElBUkJBV29oQkVHQkFTRVFETFFDQ3lBRVFRRnFJUVJCZ2dFaEVBeXpBZ3NDUUNBRUlBSkhEUUJCbUFFaEVBek1BZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFRWFpRVFBa0FEUUNBRUxRQUFJQUZCcWMrQWdBQnFMUUFBUncyMEFTQUJRUVJHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQm1BRWhFQXpNQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVaSVJBTXNRRUxBa0FnQkNBQ1J3MEFRWmtCSVJBTXl3SUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQldvaEVBSkFBMEFnQkMwQUFDQUJRYTdQZ0lBQWFpMEFBRWNOc3dFZ0FVRUZSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVprQklSQU15d0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJCaUVRRExBQkN3SkFJQVFnQWtjTkFFR2FBU0VRRE1vQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUZxSVJBQ1FBTkFJQVF0QUFBZ0FVRzB6NENBQUdvdEFBQkhEYklCSUFGQkFVWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdhQVNFUURNb0NDeUFBUVFBMkFnQWdFRUVCYWlFQlFSd2hFQXl2QVFzQ1FDQUVJQUpIRFFCQm13RWhFQXpKQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUJhaUVRQWtBRFFDQUVMUUFBSUFGQnRzK0FnQUJxTFFBQVJ3MnhBU0FCUVFGR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJtd0VoRUF6SkFnc2dBRUVBTmdJQUlCQkJBV29oQVVFbklSQU1yZ0VMQWtBZ0JDQUNSdzBBUVp3QklSQU15QUlMQWtBQ1FDQUVMUUFBUWF4L2FnNENBQUd4QVFzZ0JFRUJhaUVFUVlZQklSQU1yd0lMSUFSQkFXb2hCRUdIQVNFUURLNENDd0pBSUFRZ0FrY05BRUdkQVNFUURNY0NDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFGcUlSQUNRQU5BSUFRdEFBQWdBVUc0ejRDQUFHb3RBQUJIRGE4QklBRkJBVVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHZEFTRVFETWNDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRU1loRUF5c0FRc0NRQ0FFSUFKSERRQkJuZ0VoRUF6R0Fnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVCYWlFUUFrQURRQ0FFTFFBQUlBRkJ1cytBZ0FCcUxRQUFSdzJ1QVNBQlFRRkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCbmdFaEVBekdBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRURJUkFNcXdFTEFrQWdCQ0FDUncwQVFaOEJJUkFNeFFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBbW9oRUFKQUEwQWdCQzBBQUNBQlFlM1BnSUFBYWkwQUFFY05yUUVnQVVFQ1JnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWjhCSVJBTXhRSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkRDRVFES29CQ3dKQUlBUWdBa2NOQUVHZ0FTRVFETVFDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRTnFJUkFDUUFOQUlBUXRBQUFnQVVHOHo0Q0FBR290QUFCSERhd0JJQUZCQTBZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR2dBU0VRRE1RQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVEwaEVBeXBBUXNDUUNBRUlBSkhEUUJCb1FFaEVBekRBZ3NDUUFKQUlBUXRBQUJCdW45cURnc0FyQUdzQWF3QnJBR3NBYXdCckFHc0Fhd0JBYXdCQ3lBRVFRRnFJUVJCaXdFaEVBeXFBZ3NnQkVFQmFpRUVRWXdCSVJBTXFRSUxBa0FnQkNBQ1J3MEFRYUlCSVJBTXdnSUxJQVF0QUFCQjBBQkhEYWtCSUFSQkFXb2hCQXpwQVFzQ1FDQUVJQUpIRFFCQm93RWhFQXpCQWdzQ1FBSkFJQVF0QUFCQnQzOXFEZ2NCcWdHcUFhb0JxZ0dxQVFDcUFRc2dCRUVCYWlFRVFZNEJJUkFNcUFJTElBUkJBV29oQVVFaUlSQU1wZ0VMQWtBZ0JDQUNSdzBBUWFRQklSQU13QUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFXb2hFQUpBQTBBZ0JDMEFBQ0FCUWNEUGdJQUFhaTBBQUVjTnFBRWdBVUVCUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFhUUJJUkFNd0FJTElBQkJBRFlDQUNBUVFRRnFJUUZCSFNFUURLVUJDd0pBSUFRZ0FrY05BRUdsQVNFUURMOENDd0pBQWtBZ0JDMEFBRUd1ZjJvT0F3Q29BUUdvQVFzZ0JFRUJhaUVFUVpBQklSQU1wZ0lMSUFSQkFXb2hBVUVFSVJBTXBBRUxBa0FnQkNBQ1J3MEFRYVlCSVJBTXZnSUxBa0FDUUFKQUFrQUNRQ0FFTFFBQVFiOS9hZzRWQUtvQnFnR3FBYW9CcWdHcUFhb0JxZ0dxQWFvQkFhb0JxZ0VDcWdHcUFRT3FBYW9CQktvQkN5QUVRUUZxSVFSQmlBRWhFQXlvQWdzZ0JFRUJhaUVFUVlrQklSQU1wd0lMSUFSQkFXb2hCRUdLQVNFUURLWUNDeUFFUVFGcUlRUkJqd0VoRUF5bEFnc2dCRUVCYWlFRVFaRUJJUkFNcEFJTEFrQWdCQ0FDUncwQVFhY0JJUkFNdlFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBbW9oRUFKQUEwQWdCQzBBQUNBQlFlM1BnSUFBYWkwQUFFY05wUUVnQVVFQ1JnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRYWNCSVJBTXZRSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkVTRVFES0lCQ3dKQUlBUWdBa2NOQUVHb0FTRVFETHdDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRSnFJUkFDUUFOQUlBUXRBQUFnQVVIQ3o0Q0FBR290QUFCSERhUUJJQUZCQWtZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR29BU0VRREx3Q0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVN3aEVBeWhBUXNDUUNBRUlBSkhEUUJCcVFFaEVBeTdBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFRWFpRVFBa0FEUUNBRUxRQUFJQUZCeGMrQWdBQnFMUUFBUncyakFTQUJRUVJHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQnFRRWhFQXk3QWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVySVJBTW9BRUxBa0FnQkNBQ1J3MEFRYW9CSVJBTXVnSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQW1vaEVBSkFBMEFnQkMwQUFDQUJRY3JQZ0lBQWFpMEFBRWNOb2dFZ0FVRUNSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWFvQklSQU11Z0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJGQ0VRREo4QkN3SkFJQVFnQWtjTkFFR3JBU0VRRExrQ0N3SkFBa0FDUUFKQUlBUXRBQUJCdm45cURnOEFBUUtrQWFRQnBBR2tBYVFCcEFHa0FhUUJwQUdrQWFRQkE2UUJDeUFFUVFGcUlRUkJrd0VoRUF5aUFnc2dCRUVCYWlFRVFaUUJJUkFNb1FJTElBUkJBV29oQkVHVkFTRVFES0FDQ3lBRVFRRnFJUVJCbGdFaEVBeWZBZ3NDUUNBRUlBSkhEUUJCckFFaEVBeTRBZ3NnQkMwQUFFSEZBRWNObndFZ0JFRUJhaUVFRE9BQkN3SkFJQVFnQWtjTkFFR3RBU0VRRExjQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUpxSVJBQ1FBTkFJQVF0QUFBZ0FVSE56NENBQUdvdEFBQkhEWjhCSUFGQkFrWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUd0QVNFUURMY0NDeUFBUVFBMkFnQWdFRUVCYWlFQlFRNGhFQXljQVFzQ1FDQUVJQUpIRFFCQnJnRWhFQXkyQWdzZ0JDMEFBRUhRQUVjTm5RRWdCRUVCYWlFQlFTVWhFQXliQVFzQ1FDQUVJQUpIRFFCQnJ3RWhFQXkxQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUlhaUVRQWtBRFFDQUVMUUFBSUFGQjBNK0FnQUJxTFFBQVJ3MmRBU0FCUVFoR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJyd0VoRUF5MUFnc2dBRUVBTmdJQUlCQkJBV29oQVVFcUlSQU1tZ0VMQWtBZ0JDQUNSdzBBUWJBQklSQU10QUlMQWtBQ1FDQUVMUUFBUWF0L2FnNExBSjBCblFHZEFaMEJuUUdkQVowQm5RR2RBUUdkQVFzZ0JFRUJhaUVFUVpvQklSQU1td0lMSUFSQkFXb2hCRUdiQVNFUURKb0NDd0pBSUFRZ0FrY05BRUd4QVNFUURMTUNDd0pBQWtBZ0JDMEFBRUcvZjJvT0ZBQ2NBWndCbkFHY0Fad0JuQUdjQVp3Qm5BR2NBWndCbkFHY0Fad0JuQUdjQVp3Qm5BRUJuQUVMSUFSQkFXb2hCRUdaQVNFUURKb0NDeUFFUVFGcUlRUkJuQUVoRUF5WkFnc0NRQ0FFSUFKSERRQkJzZ0VoRUF5eUFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVEYWlFUUFrQURRQ0FFTFFBQUlBRkIyYytBZ0FCcUxRQUFSdzJhQVNBQlFRTkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCc2dFaEVBeXlBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRWhJUkFNbHdFTEFrQWdCQ0FDUncwQVFiTUJJUkFNc1FJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJCbW9oRUFKQUEwQWdCQzBBQUNBQlFkM1BnSUFBYWkwQUFFY05tUUVnQVVFR1JnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRYk1CSVJBTXNRSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkdpRVFESllCQ3dKQUlBUWdBa2NOQUVHMEFTRVFETEFDQ3dKQUFrQUNRQ0FFTFFBQVFidC9hZzRSQUpvQm1nR2FBWm9CbWdHYUFab0JtZ0dhQVFHYUFab0JtZ0dhQVpvQkFwb0JDeUFFUVFGcUlRUkJuUUVoRUF5WUFnc2dCRUVCYWlFRVFaNEJJUkFNbHdJTElBUkJBV29oQkVHZkFTRVFESllDQ3dKQUlBUWdBa2NOQUVHMUFTRVFESzhDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRVnFJUkFDUUFOQUlBUXRBQUFnQVVIa3o0Q0FBR290QUFCSERaY0JJQUZCQlVZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFRzFBU0VRREs4Q0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVNnaEVBeVVBUXNDUUNBRUlBSkhEUUJCdGdFaEVBeXVBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFQ2FpRVFBa0FEUUNBRUxRQUFJQUZCNnMrQWdBQnFMUUFBUncyV0FTQUJRUUpHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQnRnRWhFQXl1QWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVISVJBTWt3RUxBa0FnQkNBQ1J3MEFRYmNCSVJBTXJRSUxBa0FDUUNBRUxRQUFRYnQvYWc0T0FKWUJsZ0dXQVpZQmxnR1dBWllCbGdHV0FaWUJsZ0dXQVFHV0FRc2dCRUVCYWlFRVFhRUJJUkFNbEFJTElBUkJBV29oQkVHaUFTRVFESk1DQ3dKQUlBUWdBa2NOQUVHNEFTRVFES3dDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRSnFJUkFDUUFOQUlBUXRBQUFnQVVIdHo0Q0FBR290QUFCSERaUUJJQUZCQWtZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFRzRBU0VRREt3Q0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVJJaEVBeVJBUXNDUUNBRUlBSkhEUUJCdVFFaEVBeXJBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFQmFpRVFBa0FEUUNBRUxRQUFJQUZCOE0rQWdBQnFMUUFBUncyVEFTQUJRUUZHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQnVRRWhFQXlyQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVnSVJBTWtBRUxBa0FnQkNBQ1J3MEFRYm9CSVJBTXFnSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQVdvaEVBSkFBMEFnQkMwQUFDQUJRZkxQZ0lBQWFpMEFBRWNOa2dFZ0FVRUJSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWJvQklSQU1xZ0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJEeUVRREk4QkN3SkFJQVFnQWtjTkFFRzdBU0VRREtrQ0N3SkFBa0FnQkMwQUFFRzNmMm9PQndDU0FaSUJrZ0dTQVpJQkFaSUJDeUFFUVFGcUlRUkJwUUVoRUF5UUFnc2dCRUVCYWlFRVFhWUJJUkFNandJTEFrQWdCQ0FDUncwQVFid0JJUkFNcUFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJCMm9oRUFKQUEwQWdCQzBBQUNBQlFmVFBnSUFBYWkwQUFFY05rQUVnQVVFSFJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRYndCSVJBTXFBSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkd5RVFESTBCQ3dKQUlBUWdBa2NOQUVHOUFTRVFES2NDQ3dKQUFrQUNRQ0FFTFFBQVFiNS9hZzRTQUpFQmtRR1JBWkVCa1FHUkFaRUJrUUdSQVFHUkFaRUJrUUdSQVpFQmtRRUNrUUVMSUFSQkFXb2hCRUdrQVNFUURJOENDeUFFUVFGcUlRUkJwd0VoRUF5T0Fnc2dCRUVCYWlFRVFhZ0JJUkFNalFJTEFrQWdCQ0FDUncwQVFiNEJJUkFNcGdJTElBUXRBQUJCemdCSERZMEJJQVJCQVdvaEJBelBBUXNDUUNBRUlBSkhEUUJCdndFaEVBeWxBZ3NDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FDQUVMUUFBUWI5L2FnNFZBQUVDQTV3QkJBVUduQUdjQVp3QkJ3Z0pDZ3VjQVF3TkRnK2NBUXNnQkVFQmFpRUJRZWdBSVJBTW1nSUxJQVJCQVdvaEFVSHBBQ0VRREprQ0N5QUVRUUZxSVFGQjdnQWhFQXlZQWdzZ0JFRUJhaUVCUWZJQUlSQU1sd0lMSUFSQkFXb2hBVUh6QUNFUURKWUNDeUFFUVFGcUlRRkI5Z0FoRUF5VkFnc2dCRUVCYWlFQlFmY0FJUkFNbEFJTElBUkJBV29oQVVINkFDRVFESk1DQ3lBRVFRRnFJUVJCZ3dFaEVBeVNBZ3NnQkVFQmFpRUVRWVFCSVJBTWtRSUxJQVJCQVdvaEJFR0ZBU0VRREpBQ0N5QUVRUUZxSVFSQmtnRWhFQXlQQWdzZ0JFRUJhaUVFUVpnQklSQU1qZ0lMSUFSQkFXb2hCRUdnQVNFUURJMENDeUFFUVFGcUlRUkJvd0VoRUF5TUFnc2dCRUVCYWlFRVFhb0JJUkFNaXdJTEFrQWdCQ0FDUmcwQUlBQkJrSUNBZ0FBMkFnZ2dBQ0FFTmdJRVFhc0JJUkFNaXdJTFFjQUJJUkFNb3dJTElBQWdCU0FDRUtxQWdJQUFJZ0VOaXdFZ0JTRUJERndMQWtBZ0JpQUNSZzBBSUFaQkFXb2hCUXlOQVF0QndnRWhFQXloQWdzRFFBSkFJQkF0QUFCQmRtb09CSXdCQUFDUEFRQUxJQkJCQVdvaUVDQUNSdzBBQzBIREFTRVFES0FDQ3dKQUlBY2dBa1lOQUNBQVFaR0FnSUFBTmdJSUlBQWdCellDQkNBSElRRkJBU0VRREljQ0MwSEVBU0VRREo4Q0N3SkFJQWNnQWtjTkFFSEZBU0VRREo4Q0N3SkFBa0FnQnkwQUFFRjJhZzRFQWM0QnpnRUF6Z0VMSUFkQkFXb2hCZ3lOQVFzZ0IwRUJhaUVGRElrQkN3SkFJQWNnQWtjTkFFSEdBU0VRREo0Q0N3SkFBa0FnQnkwQUFFRjJhZzRYQVk4Qmp3RUJqd0dQQVk4Qmp3R1BBWThCandHUEFZOEJqd0dQQVk4Qmp3R1BBWThCandHUEFZOEJBSThCQ3lBSFFRRnFJUWNMUWJBQklSQU1oQUlMQWtBZ0NDQUNSdzBBUWNnQklSQU1uUUlMSUFndEFBQkJJRWNOalFFZ0FFRUFPd0V5SUFoQkFXb2hBVUd6QVNFUURJTUNDeUFCSVJjQ1FBTkFJQmNpQnlBQ1JnMEJJQWN0QUFCQlVHcEIvd0Z4SWhCQkNrOE56QUVDUUNBQUx3RXlJaFJCbVROTERRQWdBQ0FVUVFwc0loUTdBVElnRUVILy93TnpJQlJCL3Y4RGNVa05BQ0FIUVFGcUlSY2dBQ0FVSUJCcUloQTdBVElnRUVILy93TnhRZWdIU1EwQkN3dEJBQ0VRSUFCQkFEWUNIQ0FBUWNHSmdJQUFOZ0lRSUFCQkRUWUNEQ0FBSUFkQkFXbzJBaFFNbkFJTFFjY0JJUkFNbXdJTElBQWdDQ0FDRUs2QWdJQUFJaEJGRGNvQklCQkJGVWNOakFFZ0FFSElBVFlDSENBQUlBZzJBaFFnQUVISmw0Q0FBRFlDRUNBQVFSVTJBZ3hCQUNFUURKb0NDd0pBSUFrZ0FrY05BRUhNQVNFUURKb0NDMEVBSVJSQkFTRVhRUUVoRmtFQUlSQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQWdDUzBBQUVGUWFnNEtsZ0dWQVFBQkFnTUVCUVlJbHdFTFFRSWhFQXdHQzBFRElSQU1CUXRCQkNFUURBUUxRUVVoRUF3REMwRUdJUkFNQWd0QkJ5RVFEQUVMUVFnaEVBdEJBQ0VYUVFBaEZrRUFJUlFNamdFTFFRa2hFRUVCSVJSQkFDRVhRUUFoRmd5TkFRc0NRQ0FLSUFKSERRQkJ6Z0VoRUF5WkFnc2dDaTBBQUVFdVJ3Mk9BU0FLUVFGcUlRa015Z0VMSUFzZ0FrY05qZ0ZCMEFFaEVBeVhBZ3NDUUNBTElBSkdEUUFnQUVHT2dJQ0FBRFlDQ0NBQUlBczJBZ1JCdHdFaEVBeitBUXRCMFFFaEVBeVdBZ3NDUUNBRUlBSkhEUUJCMGdFaEVBeVdBZ3NnQWlBRWF5QUFLQUlBSWhCcUlSUWdCQ0FRYTBFRWFpRUxBMEFnQkMwQUFDQVFRZnpQZ0lBQWFpMEFBRWNOamdFZ0VFRUVSZzNwQVNBUVFRRnFJUkFnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVIU0FTRVFESlVDQ3lBQUlBd2dBaENzZ0lDQUFDSUJEWTBCSUF3aEFReTRBUXNDUUNBRUlBSkhEUUJCMUFFaEVBeVVBZ3NnQWlBRWF5QUFLQUlBSWhCcUlSUWdCQ0FRYTBFQmFpRU1BMEFnQkMwQUFDQVFRWUhRZ0lBQWFpMEFBRWNOandFZ0VFRUJSZzJPQVNBUVFRRnFJUkFnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVIVUFTRVFESk1DQ3dKQUlBUWdBa2NOQUVIV0FTRVFESk1DQ3lBQ0lBUnJJQUFvQWdBaUVHb2hGQ0FFSUJCclFRSnFJUXNEUUNBRUxRQUFJQkJCZzlDQWdBQnFMUUFBUncyT0FTQVFRUUpHRFpBQklCQkJBV29oRUNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFkWUJJUkFNa2dJTEFrQWdCQ0FDUncwQVFkY0JJUkFNa2dJTEFrQUNRQ0FFTFFBQVFidC9hZzRRQUk4Qmp3R1BBWThCandHUEFZOEJqd0dQQVk4Qmp3R1BBWThCandFQmp3RUxJQVJCQVdvaEJFRzdBU0VRRFBrQkN5QUVRUUZxSVFSQnZBRWhFQXo0QVFzQ1FDQUVJQUpIRFFCQjJBRWhFQXlSQWdzZ0JDMEFBRUhJQUVjTmpBRWdCRUVCYWlFRURNUUJDd0pBSUFRZ0FrWU5BQ0FBUVpDQWdJQUFOZ0lJSUFBZ0JEWUNCRUcrQVNFUURQY0JDMEhaQVNFUURJOENDd0pBSUFRZ0FrY05BRUhhQVNFUURJOENDeUFFTFFBQVFjZ0FSZzNEQVNBQVFRRTZBQ2dNdVFFTElBQkJBam9BTHlBQUlBUWdBaENtZ0lDQUFDSVFEWTBCUWNJQklSQU05QUVMSUFBdEFDaEJmMm9PQXJjQnVRRzRBUXNEUUFKQUlBUXRBQUJCZG1vT0JBQ09BWTRCQUk0QkN5QUVRUUZxSWdRZ0FrY05BQXRCM1FFaEVBeUxBZ3NnQUVFQU9nQXZJQUF0QUMxQkJIRkZEWVFDQ3lBQVFRQTZBQzhnQUVFQk9nQTBJQUVoQVF5TUFRc2dFRUVWUmczYUFTQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnA0NkFnQUEyQWhBZ0FFRVNOZ0lNUVFBaEVBeUlBZ3NDUUNBQUlCQWdBaEMwZ0lDQUFDSUVEUUFnRUNFQkRJRUNDd0pBSUFSQkZVY05BQ0FBUVFNMkFod2dBQ0FRTmdJVUlBQkJzSmlBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXlJQWdzZ0FFRUFOZ0ljSUFBZ0VEWUNGQ0FBUWFlT2dJQUFOZ0lRSUFCQkVqWUNERUVBSVJBTWh3SUxJQkJCRlVZTjFnRWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFkcU5nSUFBTmdJUUlBQkJGRFlDREVFQUlSQU1oZ0lMSUFBb0FnUWhGeUFBUVFBMkFnUWdFQ0FScDJvaUZpRUJJQUFnRnlBUUlCWWdGQnNpRUJDMWdJQ0FBQ0lVUlEyTkFTQUFRUWMyQWh3Z0FDQVFOZ0lVSUFBZ0ZEWUNERUVBSVJBTWhRSUxJQUFnQUM4Qk1FR0FBWEk3QVRBZ0FTRUJDMEVxSVJBTTZnRUxJQkJCRlVZTjBRRWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFZT01nSUFBTmdJUUlBQkJFellDREVFQUlSQU1nZ0lMSUJCQkZVWU56d0VnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRWnFQZ0lBQU5nSVFJQUJCSWpZQ0RFRUFJUkFNZ1FJTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkMzZ0lDQUFDSVFEUUFnQVVFQmFpRUJESTBCQ3lBQVFRdzJBaHdnQUNBUU5nSU1JQUFnQVVFQmFqWUNGRUVBSVJBTWdBSUxJQkJCRlVZTnpBRWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFacVBnSUFBTmdJUUlBQkJJallDREVFQUlSQU0vd0VMSUFBb0FnUWhFQ0FBUVFBMkFnUUNRQ0FBSUJBZ0FSQzNnSUNBQUNJUURRQWdBVUVCYWlFQkRJd0JDeUFBUVEwMkFod2dBQ0FRTmdJTUlBQWdBVUVCYWpZQ0ZFRUFJUkFNL2dFTElCQkJGVVlOeVFFZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWNhTWdJQUFOZ0lRSUFCQkl6WUNERUVBSVJBTS9RRUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDNWdJQ0FBQ0lRRFFBZ0FVRUJhaUVCRElzQkN5QUFRUTQyQWh3Z0FDQVFOZ0lNSUFBZ0FVRUJhallDRkVFQUlSQU0vQUVMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUhBbFlDQUFEWUNFQ0FBUVFJMkFneEJBQ0VRRFBzQkN5QVFRUlZHRGNVQklBQkJBRFlDSENBQUlBRTJBaFFnQUVIR2pJQ0FBRFlDRUNBQVFTTTJBZ3hCQUNFUURQb0JDeUFBUVJBMkFod2dBQ0FCTmdJVUlBQWdFRFlDREVFQUlSQU0rUUVMSUFBb0FnUWhCQ0FBUVFBMkFnUUNRQ0FBSUFRZ0FSQzVnSUNBQUNJRURRQWdBVUVCYWlFQkRQRUJDeUFBUVJFMkFod2dBQ0FFTmdJTUlBQWdBVUVCYWpZQ0ZFRUFJUkFNK0FFTElCQkJGVVlOd1FFZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWNhTWdJQUFOZ0lRSUFCQkl6WUNERUVBSVJBTTl3RUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDNWdJQ0FBQ0lRRFFBZ0FVRUJhaUVCRElnQkN5QUFRUk0yQWh3Z0FDQVFOZ0lNSUFBZ0FVRUJhallDRkVFQUlSQU05Z0VMSUFBb0FnUWhCQ0FBUVFBMkFnUUNRQ0FBSUFRZ0FSQzVnSUNBQUNJRURRQWdBVUVCYWlFQkRPMEJDeUFBUVJRMkFod2dBQ0FFTmdJTUlBQWdBVUVCYWpZQ0ZFRUFJUkFNOVFFTElCQkJGVVlOdlFFZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVpxUGdJQUFOZ0lRSUFCQklqWUNERUVBSVJBTTlBRUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDM2dJQ0FBQ0lRRFFBZ0FVRUJhaUVCRElZQkN5QUFRUlkyQWh3Z0FDQVFOZ0lNSUFBZ0FVRUJhallDRkVFQUlSQU04d0VMSUFBb0FnUWhCQ0FBUVFBMkFnUUNRQ0FBSUFRZ0FSQzNnSUNBQUNJRURRQWdBVUVCYWlFQkRPa0JDeUFBUVJjMkFod2dBQ0FFTmdJTUlBQWdBVUVCYWpZQ0ZFRUFJUkFNOGdFTElBQkJBRFlDSENBQUlBRTJBaFFnQUVITms0Q0FBRFlDRUNBQVFRdzJBZ3hCQUNFUURQRUJDMElCSVJFTElCQkJBV29oQVFKQUlBQXBBeUFpRWtMLy8vLy8vLy8vL3c5V0RRQWdBQ0FTUWdTR0lCR0VOd01nSUFFaEFReUVBUXNnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRYTJKZ0lBQU5nSVFJQUJCRERZQ0RFRUFJUkFNN3dFTElBQkJBRFlDSENBQUlCQTJBaFFnQUVITms0Q0FBRFlDRUNBQVFRdzJBZ3hCQUNFUURPNEJDeUFBS0FJRUlSY2dBRUVBTmdJRUlCQWdFYWRxSWhZaEFTQUFJQmNnRUNBV0lCUWJJaEFRdFlDQWdBQWlGRVVOY3lBQVFRVTJBaHdnQUNBUU5nSVVJQUFnRkRZQ0RFRUFJUkFNN1FFTElBQkJBRFlDSENBQUlCQTJBaFFnQUVHcW5JQ0FBRFlDRUNBQVFRODJBZ3hCQUNFUURPd0JDeUFBSUJBZ0FoQzBnSUNBQUNJQkRRRWdFQ0VCQzBFT0lSQU0wUUVMQWtBZ0FVRVZSdzBBSUFCQkFqWUNIQ0FBSUJBMkFoUWdBRUd3bUlDQUFEWUNFQ0FBUVJVMkFneEJBQ0VRRE9vQkN5QUFRUUEyQWh3Z0FDQVFOZ0lVSUFCQnA0NkFnQUEyQWhBZ0FFRVNOZ0lNUVFBaEVBenBBUXNnQVVFQmFpRVFBa0FnQUM4Qk1DSUJRWUFCY1VVTkFBSkFJQUFnRUNBQ0VMdUFnSUFBSWdFTkFDQVFJUUVNY0FzZ0FVRVZSdzI2QVNBQVFRVTJBaHdnQUNBUU5nSVVJQUJCK1plQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF6cEFRc0NRQ0FCUWFBRWNVR2dCRWNOQUNBQUxRQXRRUUp4RFFBZ0FFRUFOZ0ljSUFBZ0VEWUNGQ0FBUVphVGdJQUFOZ0lRSUFCQkJEWUNERUVBSVJBTTZRRUxJQUFnRUNBQ0VMMkFnSUFBR2lBUUlRRUNRQUpBQWtBQ1FBSkFJQUFnRUNBQ0VMT0FnSUFBRGhZQ0FRQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUURCQXNnQUVFQk9nQXVDeUFBSUFBdkFUQkJ3QUJ5T3dFd0lCQWhBUXRCSmlFUURORUJDeUFBUVNNMkFod2dBQ0FRTmdJVUlBQkJwWmFBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXpwQVFzZ0FFRUFOZ0ljSUFBZ0VEWUNGQ0FBUWRXTGdJQUFOZ0lRSUFCQkVUWUNERUVBSVJBTTZBRUxJQUF0QUMxQkFYRkZEUUZCd3dFaEVBek9BUXNDUUNBTklBSkdEUUFEUUFKQUlBMHRBQUJCSUVZTkFDQU5JUUVNeEFFTElBMUJBV29pRFNBQ1J3MEFDMEVsSVJBTTV3RUxRU1VoRUF6bUFRc2dBQ2dDQkNFRUlBQkJBRFlDQkNBQUlBUWdEUkN2Z0lDQUFDSUVSUTJ0QVNBQVFTWTJBaHdnQUNBRU5nSU1JQUFnRFVFQmFqWUNGRUVBSVJBTTVRRUxJQkJCRlVZTnF3RWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFmMk5nSUFBTmdJUUlBQkJIVFlDREVFQUlSQU01QUVMSUFCQkp6WUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXpqQVFzZ0VDRUJRUUVoRkFKQUFrQUNRQUpBQWtBQ1FBSkFJQUF0QUN4QmZtb09Cd1lGQlFNQkFnQUZDeUFBSUFBdkFUQkJDSEk3QVRBTUF3dEJBaUVVREFFTFFRUWhGQXNnQUVFQk9nQXNJQUFnQUM4Qk1DQVVjanNCTUFzZ0VDRUJDMEVySVJBTXlnRUxJQUJCQURZQ0hDQUFJQkEyQWhRZ0FFR3Jrb0NBQURZQ0VDQUFRUXMyQWd4QkFDRVFET0lCQ3lBQVFRQTJBaHdnQUNBQk5nSVVJQUJCNFkrQWdBQTJBaEFnQUVFS05nSU1RUUFoRUF6aEFRc2dBRUVBT2dBc0lCQWhBUXk5QVFzZ0VDRUJRUUVoRkFKQUFrQUNRQUpBQWtBZ0FDMEFMRUY3YWc0RUF3RUNBQVVMSUFBZ0FDOEJNRUVJY2pzQk1Bd0RDMEVDSVJRTUFRdEJCQ0VVQ3lBQVFRRTZBQ3dnQUNBQUx3RXdJQlJ5T3dFd0N5QVFJUUVMUVNraEVBekZBUXNnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZkNVZ0lBQU5nSVFJQUJCQXpZQ0RFRUFJUkFNM1FFTEFrQWdEaTBBQUVFTlJ3MEFJQUFvQWdRaEFTQUFRUUEyQWdRQ1FDQUFJQUVnRGhDeGdJQ0FBQ0lCRFFBZ0RrRUJhaUVCREhVTElBQkJMRFlDSENBQUlBRTJBZ3dnQUNBT1FRRnFOZ0lVUVFBaEVBemRBUXNnQUMwQUxVRUJjVVVOQVVIRUFTRVFETU1CQ3dKQUlBNGdBa2NOQUVFdElSQU0zQUVMQWtBQ1FBTkFBa0FnRGkwQUFFRjJhZzRFQWdBQUF3QUxJQTVCQVdvaURpQUNSdzBBQzBFdElSQU0zUUVMSUFBb0FnUWhBU0FBUVFBMkFnUUNRQ0FBSUFFZ0RoQ3hnSUNBQUNJQkRRQWdEaUVCREhRTElBQkJMRFlDSENBQUlBNDJBaFFnQUNBQk5nSU1RUUFoRUF6Y0FRc2dBQ2dDQkNFQklBQkJBRFlDQkFKQUlBQWdBU0FPRUxHQWdJQUFJZ0VOQUNBT1FRRnFJUUVNY3dzZ0FFRXNOZ0ljSUFBZ0FUWUNEQ0FBSUE1QkFXbzJBaFJCQUNFUUROc0JDeUFBS0FJRUlRUWdBRUVBTmdJRUlBQWdCQ0FPRUxHQWdJQUFJZ1FOb0FFZ0RpRUJETTRCQ3lBUVFTeEhEUUVnQVVFQmFpRVFRUUVoQVFKQUFrQUNRQUpBQWtBZ0FDMEFMRUY3YWc0RUF3RUNCQUFMSUJBaEFRd0VDMEVDSVFFTUFRdEJCQ0VCQ3lBQVFRRTZBQ3dnQUNBQUx3RXdJQUZ5T3dFd0lCQWhBUXdCQ3lBQUlBQXZBVEJCQ0hJN0FUQWdFQ0VCQzBFNUlSQU12d0VMSUFCQkFEb0FMQ0FCSVFFTFFUUWhFQXk5QVFzZ0FDQUFMd0V3UVNCeU93RXdJQUVoQVF3Q0N5QUFLQUlFSVFRZ0FFRUFOZ0lFQWtBZ0FDQUVJQUVRc1lDQWdBQWlCQTBBSUFFaEFRekhBUXNnQUVFM05nSWNJQUFnQVRZQ0ZDQUFJQVEyQWd4QkFDRVFETlFCQ3lBQVFRZzZBQ3dnQVNFQkMwRXdJUkFNdVFFTEFrQWdBQzBBS0VFQlJnMEFJQUVoQVF3RUN5QUFMUUF0UVFoeFJRMlRBU0FCSVFFTUF3c2dBQzBBTUVFZ2NRMlVBVUhGQVNFUURMY0JDd0pBSUE4Z0FrWU5BQUpBQTBBQ1FDQVBMUUFBUVZCcUlnRkIvd0Z4UVFwSkRRQWdEeUVCUVRVaEVBeTZBUXNnQUNrRElDSVJRcG16NXN5WnMrYk1HVllOQVNBQUlCRkNDbjRpRVRjRElDQVJJQUd0UXY4Qmd5SVNRbitGVmcwQklBQWdFU0FTZkRjRElDQVBRUUZxSWc4Z0FrY05BQXRCT1NFUURORUJDeUFBS0FJRUlRSWdBRUVBTmdJRUlBQWdBaUFQUVFGcUlnUVFzWUNBZ0FBaUFnMlZBU0FFSVFFTXd3RUxRVGtoRUF6UEFRc0NRQ0FBTHdFd0lnRkJDSEZGRFFBZ0FDMEFLRUVCUncwQUlBQXRBQzFCQ0hGRkRaQUJDeUFBSUFGQjkvc0RjVUdBQkhJN0FUQWdEeUVCQzBFM0lSQU10QUVMSUFBZ0FDOEJNRUVRY2pzQk1BeXJBUXNnRUVFVlJnMkxBU0FBUVFBMkFod2dBQ0FCTmdJVUlBQkI4STZBZ0FBMkFoQWdBRUVjTmdJTVFRQWhFQXpMQVFzZ0FFSERBRFlDSENBQUlBRTJBZ3dnQUNBTlFRRnFOZ0lVUVFBaEVBektBUXNDUUNBQkxRQUFRVHBIRFFBZ0FDZ0NCQ0VRSUFCQkFEWUNCQUpBSUFBZ0VDQUJFSytBZ0lBQUloQU5BQ0FCUVFGcUlRRU1Zd3NnQUVIREFEWUNIQ0FBSUJBMkFnd2dBQ0FCUVFGcU5nSVVRUUFoRUF6S0FRc2dBRUVBTmdJY0lBQWdBVFlDRkNBQVFiR1JnSUFBTmdJUUlBQkJDallDREVFQUlSQU15UUVMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUdnbVlDQUFEWUNFQ0FBUVI0MkFneEJBQ0VRRE1nQkN5QUFRUUEyQWdBTElBQkJnQkk3QVNvZ0FDQVhRUUZxSWdFZ0FoQ29nSUNBQUNJUURRRWdBU0VCQzBISEFDRVFES3dCQ3lBUVFSVkhEWU1CSUFCQjBRQTJBaHdnQUNBQk5nSVVJQUJCNDVlQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF6RUFRc2dBQ2dDQkNFUUlBQkJBRFlDQkFKQUlBQWdFQ0FCRUtlQWdJQUFJaEFOQUNBQklRRU1YZ3NnQUVIU0FEWUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXpEQVFzZ0FFRUFOZ0ljSUFBZ0ZEWUNGQ0FBUWNHb2dJQUFOZ0lRSUFCQkJ6WUNEQ0FBUVFBMkFnQkJBQ0VRRE1JQkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRcDRDQWdBQWlFQTBBSUFFaEFReGRDeUFBUWRNQU5nSWNJQUFnQVRZQ0ZDQUFJQkEyQWd4QkFDRVFETUVCQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFZQ1JnSUFBTmdJUUlBQkJDVFlDREF6QUFRc2dFRUVWUmcxOUlBQkJBRFlDSENBQUlBRTJBaFFnQUVHVWpZQ0FBRFlDRUNBQVFTRTJBZ3hCQUNFUURMOEJDMEVCSVJaQkFDRVhRUUFoRkVFQklSQUxJQUFnRURvQUt5QUJRUUZxSVFFQ1FBSkFJQUF0QUMxQkVIRU5BQUpBQWtBQ1FDQUFMUUFxRGdNQkFBSUVDeUFXUlEwRERBSUxJQlFOQVF3Q0N5QVhSUTBCQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVFyWUNBZ0FBaUVBMEFJQUVoQVF4Y0N5QUFRZGdBTmdJY0lBQWdBVFlDRkNBQUlCQTJBZ3hCQUNFUURMNEJDeUFBS0FJRUlRUWdBRUVBTmdJRUFrQWdBQ0FFSUFFUXJZQ0FnQUFpQkEwQUlBRWhBUXl0QVFzZ0FFSFpBRFlDSENBQUlBRTJBaFFnQUNBRU5nSU1RUUFoRUF5OUFRc2dBQ2dDQkNFRUlBQkJBRFlDQkFKQUlBQWdCQ0FCRUsyQWdJQUFJZ1FOQUNBQklRRU1xd0VMSUFCQjJnQTJBaHdnQUNBQk5nSVVJQUFnQkRZQ0RFRUFJUkFNdkFFTElBQW9BZ1FoQkNBQVFRQTJBZ1FDUUNBQUlBUWdBUkN0Z0lDQUFDSUVEUUFnQVNFQkRLa0JDeUFBUWR3QU5nSWNJQUFnQVRZQ0ZDQUFJQVEyQWd4QkFDRVFETHNCQ3dKQUlBRXRBQUJCVUdvaUVFSC9BWEZCQ2s4TkFDQUFJQkE2QUNvZ0FVRUJhaUVCUWM4QUlSQU1vZ0VMSUFBb0FnUWhCQ0FBUVFBMkFnUUNRQ0FBSUFRZ0FSQ3RnSUNBQUNJRURRQWdBU0VCREtjQkN5QUFRZDRBTmdJY0lBQWdBVFlDRkNBQUlBUTJBZ3hCQUNFUURMb0JDeUFBUVFBMkFnQWdGMEVCYWlFQkFrQWdBQzBBS1VFalR3MEFJQUVoQVF4WkN5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQjA0bUFnQUEyQWhBZ0FFRUlOZ0lNUVFBaEVBeTVBUXNnQUVFQU5nSUFDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVpDemdJQUFOZ0lRSUFCQkNEWUNEQXkzQVFzZ0FFRUFOZ0lBSUJkQkFXb2hBUUpBSUFBdEFDbEJJVWNOQUNBQklRRU1WZ3NnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRWnVLZ0lBQU5nSVFJQUJCQ0RZQ0RFRUFJUkFNdGdFTElBQkJBRFlDQUNBWFFRRnFJUUVDUUNBQUxRQXBJaEJCWFdwQkMwOE5BQ0FCSVFFTVZRc0NRQ0FRUVFaTERRQkJBU0FRZEVIS0FIRkZEUUFnQVNFQkRGVUxRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCOTRtQWdBQTJBaEFnQUVFSU5nSU1ETFVCQ3lBUVFSVkdEWEVnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRYm1OZ0lBQU5nSVFJQUJCR2pZQ0RFRUFJUkFNdEFFTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkNuZ0lDQUFDSVFEUUFnQVNFQkRGUUxJQUJCNVFBMkFod2dBQ0FCTmdJVUlBQWdFRFlDREVFQUlSQU1zd0VMSUFBb0FnUWhFQ0FBUVFBMkFnUUNRQ0FBSUJBZ0FSQ25nSUNBQUNJUURRQWdBU0VCREUwTElBQkIwZ0EyQWh3Z0FDQUJOZ0lVSUFBZ0VEWUNERUVBSVJBTXNnRUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDbmdJQ0FBQ0lRRFFBZ0FTRUJERTBMSUFCQjB3QTJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNc1FFTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkNuZ0lDQUFDSVFEUUFnQVNFQkRGRUxJQUJCNVFBMkFod2dBQ0FCTmdJVUlBQWdFRFlDREVFQUlSQU1zQUVMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUhHaW9DQUFEWUNFQ0FBUVFjMkFneEJBQ0VRREs4QkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRcDRDQWdBQWlFQTBBSUFFaEFReEpDeUFBUWRJQU5nSWNJQUFnQVRZQ0ZDQUFJQkEyQWd4QkFDRVFESzRCQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVFwNENBZ0FBaUVBMEFJQUVoQVF4SkN5QUFRZE1BTmdJY0lBQWdBVFlDRkNBQUlCQTJBZ3hCQUNFUURLMEJDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXA0Q0FnQUFpRUEwQUlBRWhBUXhOQ3lBQVFlVUFOZ0ljSUFBZ0FUWUNGQ0FBSUJBMkFneEJBQ0VRREt3QkN5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQjNJaUFnQUEyQWhBZ0FFRUhOZ0lNUVFBaEVBeXJBUXNnRUVFL1J3MEJJQUZCQVdvaEFRdEJCU0VRREpBQkMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZjJTZ0lBQU5nSVFJQUJCQnpZQ0RBeW9BUXNnQUNnQ0JDRVFJQUJCQURZQ0JBSkFJQUFnRUNBQkVLZUFnSUFBSWhBTkFDQUJJUUVNUWdzZ0FFSFNBRFlDSENBQUlBRTJBaFFnQUNBUU5nSU1RUUFoRUF5bkFRc2dBQ2dDQkNFUUlBQkJBRFlDQkFKQUlBQWdFQ0FCRUtlQWdJQUFJaEFOQUNBQklRRU1RZ3NnQUVIVEFEWUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXltQVFzZ0FDZ0NCQ0VRSUFCQkFEWUNCQUpBSUFBZ0VDQUJFS2VBZ0lBQUloQU5BQ0FCSVFFTVJnc2dBRUhsQURZQ0hDQUFJQUUyQWhRZ0FDQVFOZ0lNUVFBaEVBeWxBUXNnQUNnQ0JDRUJJQUJCQURZQ0JBSkFJQUFnQVNBVUVLZUFnSUFBSWdFTkFDQVVJUUVNUHdzZ0FFSFNBRFlDSENBQUlCUTJBaFFnQUNBQk5nSU1RUUFoRUF5a0FRc2dBQ2dDQkNFQklBQkJBRFlDQkFKQUlBQWdBU0FVRUtlQWdJQUFJZ0VOQUNBVUlRRU1Qd3NnQUVIVEFEWUNIQ0FBSUJRMkFoUWdBQ0FCTmdJTVFRQWhFQXlqQVFzZ0FDZ0NCQ0VCSUFCQkFEWUNCQUpBSUFBZ0FTQVVFS2VBZ0lBQUlnRU5BQ0FVSVFFTVF3c2dBRUhsQURZQ0hDQUFJQlEyQWhRZ0FDQUJOZ0lNUVFBaEVBeWlBUXNnQUVFQU5nSWNJQUFnRkRZQ0ZDQUFRY09QZ0lBQU5nSVFJQUJCQnpZQ0RFRUFJUkFNb1FFTElBQkJBRFlDSENBQUlBRTJBaFFnQUVIRGo0Q0FBRFlDRUNBQVFRYzJBZ3hCQUNFUURLQUJDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0ZEWUNGQ0FBUVl5Y2dJQUFOZ0lRSUFCQkJ6WUNEQXlmQVFzZ0FFRUFOZ0ljSUFBZ0ZEWUNGQ0FBUVl5Y2dJQUFOZ0lRSUFCQkJ6WUNERUVBSVJBTW5nRUxJQUJCQURZQ0hDQUFJQlEyQWhRZ0FFSCtrWUNBQURZQ0VDQUFRUWMyQWd4QkFDRVFESjBCQ3lBQVFRQTJBaHdnQUNBQk5nSVVJQUJCanB1QWdBQTJBaEFnQUVFR05nSU1RUUFoRUF5Y0FRc2dFRUVWUmcxWElBQkJBRFlDSENBQUlBRTJBaFFnQUVITWpvQ0FBRFlDRUNBQVFTQTJBZ3hCQUNFUURKc0JDeUFBUVFBMkFnQWdFRUVCYWlFQlFTUWhFQXNnQUNBUU9nQXBJQUFvQWdRaEVDQUFRUUEyQWdRZ0FDQVFJQUVRcTRDQWdBQWlFQTFVSUFFaEFRdytDeUFBUVFBMkFnQUxRUUFoRUNBQVFRQTJBaHdnQUNBRU5nSVVJQUJCOFp1QWdBQTJBaEFnQUVFR05nSU1ESmNCQ3lBQlFSVkdEVkFnQUVFQU5nSWNJQUFnQlRZQ0ZDQUFRZkNNZ0lBQU5nSVFJQUJCR3pZQ0RFRUFJUkFNbGdFTElBQW9BZ1FoQlNBQVFRQTJBZ1FnQUNBRklCQVFxWUNBZ0FBaUJRMEJJQkJCQVdvaEJRdEJyUUVoRUF4N0N5QUFRY0VCTmdJY0lBQWdCVFlDRENBQUlCQkJBV28yQWhSQkFDRVFESk1CQ3lBQUtBSUVJUVlnQUVFQU5nSUVJQUFnQmlBUUVLbUFnSUFBSWdZTkFTQVFRUUZxSVFZTFFhNEJJUkFNZUFzZ0FFSENBVFlDSENBQUlBWTJBZ3dnQUNBUVFRRnFOZ0lVUVFBaEVBeVFBUXNnQUVFQU5nSWNJQUFnQnpZQ0ZDQUFRWmVMZ0lBQU5nSVFJQUJCRFRZQ0RFRUFJUkFNandFTElBQkJBRFlDSENBQUlBZzJBaFFnQUVIamtJQ0FBRFlDRUNBQVFRazJBZ3hCQUNFUURJNEJDeUFBUVFBMkFod2dBQ0FJTmdJVUlBQkJsSTJBZ0FBMkFoQWdBRUVoTmdJTVFRQWhFQXlOQVF0QkFTRVdRUUFoRjBFQUlSUkJBU0VRQ3lBQUlCQTZBQ3NnQ1VFQmFpRUlBa0FDUUNBQUxRQXRRUkJ4RFFBQ1FBSkFBa0FnQUMwQUtnNERBUUFDQkFzZ0ZrVU5Bd3dDQ3lBVURRRU1BZ3NnRjBVTkFRc2dBQ2dDQkNFUUlBQkJBRFlDQkNBQUlCQWdDQkN0Z0lDQUFDSVFSUTA5SUFCQnlRRTJBaHdnQUNBSU5nSVVJQUFnRURZQ0RFRUFJUkFNakFFTElBQW9BZ1FoQkNBQVFRQTJBZ1FnQUNBRUlBZ1FyWUNBZ0FBaUJFVU5kaUFBUWNvQk5nSWNJQUFnQ0RZQ0ZDQUFJQVEyQWd4QkFDRVFESXNCQ3lBQUtBSUVJUVFnQUVFQU5nSUVJQUFnQkNBSkVLMkFnSUFBSWdSRkRYUWdBRUhMQVRZQ0hDQUFJQWsyQWhRZ0FDQUVOZ0lNUVFBaEVBeUtBUXNnQUNnQ0JDRUVJQUJCQURZQ0JDQUFJQVFnQ2hDdGdJQ0FBQ0lFUlExeUlBQkJ6UUUyQWh3Z0FDQUtOZ0lVSUFBZ0JEWUNERUVBSVJBTWlRRUxBa0FnQ3kwQUFFRlFhaUlRUWY4QmNVRUtUdzBBSUFBZ0VEb0FLaUFMUVFGcUlRcEJ0Z0VoRUF4d0N5QUFLQUlFSVFRZ0FFRUFOZ0lFSUFBZ0JDQUxFSzJBZ0lBQUlnUkZEWEFnQUVIUEFUWUNIQ0FBSUFzMkFoUWdBQ0FFTmdJTVFRQWhFQXlJQVFzZ0FFRUFOZ0ljSUFBZ0JEWUNGQ0FBUVpDemdJQUFOZ0lRSUFCQkNEWUNEQ0FBUVFBMkFnQkJBQ0VRREljQkN5QUJRUlZHRFQ4Z0FFRUFOZ0ljSUFBZ0REWUNGQ0FBUWN5T2dJQUFOZ0lRSUFCQklEWUNERUVBSVJBTWhnRUxJQUJCZ1FRN0FTZ2dBQ2dDQkNFUUlBQkNBRGNEQUNBQUlCQWdERUVCYWlJTUVLdUFnSUFBSWhCRkRUZ2dBRUhUQVRZQ0hDQUFJQXcyQWhRZ0FDQVFOZ0lNUVFBaEVBeUZBUXNnQUVFQU5nSUFDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0JEWUNGQ0FBUWRpYmdJQUFOZ0lRSUFCQkNEWUNEQXlEQVFzZ0FDZ0NCQ0VRSUFCQ0FEY0RBQ0FBSUJBZ0MwRUJhaUlMRUt1QWdJQUFJaEFOQVVIR0FTRVFER2tMSUFCQkFqb0FLQXhWQ3lBQVFkVUJOZ0ljSUFBZ0N6WUNGQ0FBSUJBMkFneEJBQ0VRRElBQkN5QVFRUlZHRFRjZ0FFRUFOZ0ljSUFBZ0JEWUNGQ0FBUWFTTWdJQUFOZ0lRSUFCQkVEWUNERUVBSVJBTWZ3c2dBQzBBTkVFQlJ3MDBJQUFnQkNBQ0VMeUFnSUFBSWhCRkRUUWdFRUVWUncwMUlBQkIzQUUyQWh3Z0FDQUVOZ0lVSUFCQjFaYUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBeCtDMEVBSVJBZ0FFRUFOZ0ljSUFCQnI0dUFnQUEyQWhBZ0FFRUNOZ0lNSUFBZ0ZFRUJhallDRkF4OUMwRUFJUkFNWXd0QkFpRVFER0lMUVEwaEVBeGhDMEVQSVJBTVlBdEJKU0VRREY4TFFSTWhFQXhlQzBFVklSQU1YUXRCRmlFUURGd0xRUmNoRUF4YkMwRVlJUkFNV2d0QkdTRVFERmtMUVJvaEVBeFlDMEViSVJBTVZ3dEJIQ0VRREZZTFFSMGhFQXhWQzBFZklSQU1WQXRCSVNFUURGTUxRU01oRUF4U0MwSEdBQ0VRREZFTFFTNGhFQXhRQzBFdklSQU1Ud3RCT3lFUURFNExRVDBoRUF4TkMwSElBQ0VRREV3TFFja0FJUkFNU3d0Qnl3QWhFQXhLQzBITUFDRVFERWtMUWM0QUlSQU1TQXRCMFFBaEVBeEhDMEhWQUNFUURFWUxRZGdBSVJBTVJRdEIyUUFoRUF4RUMwSGJBQ0VRREVNTFFlUUFJUkFNUWd0QjVRQWhFQXhCQzBIeEFDRVFERUFMUWZRQUlSQU1Qd3RCalFFaEVBdytDMEdYQVNFUUREMExRYWtCSVJBTVBBdEJyQUVoRUF3N0MwSEFBU0VRRERvTFFia0JJUkFNT1F0QnJ3RWhFQXc0QzBHeEFTRVFERGNMUWJJQklSQU1OZ3RCdEFFaEVBdzFDMEcxQVNFUUREUUxRYm9CSVJBTU13dEJ2UUVoRUF3eUMwRy9BU0VRRERFTFFjRUJJUkFNTUFzZ0FFRUFOZ0ljSUFBZ0JEWUNGQ0FBUWVtTGdJQUFOZ0lRSUFCQkh6WUNERUVBSVJBTVNBc2dBRUhiQVRZQ0hDQUFJQVEyQWhRZ0FFSDZsb0NBQURZQ0VDQUFRUlUyQWd4QkFDRVFERWNMSUFCQitBQTJBaHdnQUNBTU5nSVVJQUJCeXBpQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF4R0N5QUFRZEVBTmdJY0lBQWdCVFlDRkNBQVFiQ1hnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1SUXNnQUVINUFEWUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXhFQ3lBQVFmZ0FOZ0ljSUFBZ0FUWUNGQ0FBUWNxWWdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTVF3c2dBRUhrQURZQ0hDQUFJQUUyQWhRZ0FFSGpsNENBQURZQ0VDQUFRUlUyQWd4QkFDRVFERUlMSUFCQjF3QTJBaHdnQUNBQk5nSVVJQUJCeVplQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF4QkN5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnVZMkFnQUEyQWhBZ0FFRWFOZ0lNUVFBaEVBeEFDeUFBUWNJQU5nSWNJQUFnQVRZQ0ZDQUFRZU9ZZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNUHdzZ0FFRUFOZ0lFSUFBZ0R5QVBFTEdBZ0lBQUlnUkZEUUVnQUVFNk5nSWNJQUFnQkRZQ0RDQUFJQTlCQVdvMkFoUkJBQ0VRREQ0TElBQW9BZ1FoQkNBQVFRQTJBZ1FDUUNBQUlBUWdBUkN4Z0lDQUFDSUVSUTBBSUFCQk96WUNIQ0FBSUFRMkFnd2dBQ0FCUVFGcU5nSVVRUUFoRUF3K0N5QUJRUUZxSVFFTUxRc2dEMEVCYWlFQkRDMExJQUJCQURZQ0hDQUFJQTgyQWhRZ0FFSGtrb0NBQURZQ0VDQUFRUVEyQWd4QkFDRVFERHNMSUFCQk5qWUNIQ0FBSUFRMkFoUWdBQ0FDTmdJTVFRQWhFQXc2Q3lBQVFTNDJBaHdnQUNBT05nSVVJQUFnQkRZQ0RFRUFJUkFNT1FzZ0FFSFFBRFlDSENBQUlBRTJBaFFnQUVHUm1JQ0FBRFlDRUNBQVFSVTJBZ3hCQUNFUUREZ0xJQTFCQVdvaEFRd3NDeUFBUVJVMkFod2dBQ0FCTmdJVUlBQkJncG1BZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXcyQ3lBQVFSczJBaHdnQUNBQk5nSVVJQUJCa1plQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF3MUN5QUFRUTgyQWh3Z0FDQUJOZ0lVSUFCQmtaZUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBdzBDeUFBUVFzMkFod2dBQ0FCTmdJVUlBQkJrWmVBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXd6Q3lBQVFSbzJBaHdnQUNBQk5nSVVJQUJCZ3BtQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF3eUN5QUFRUXMyQWh3Z0FDQUJOZ0lVSUFCQmdwbUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBd3hDeUFBUVFvMkFod2dBQ0FCTmdJVUlBQkI1SmFBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXd3Q3lBQVFSNDJBaHdnQUNBQk5nSVVJQUJCK1plQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF3dkN5QUFRUUEyQWh3Z0FDQVFOZ0lVSUFCQjJvMkFnQUEyQWhBZ0FFRVVOZ0lNUVFBaEVBd3VDeUFBUVFRMkFod2dBQ0FCTmdJVUlBQkJzSmlBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXd0Q3lBQVFRQTJBZ0FnQzBFQmFpRUxDMEc0QVNFUURCSUxJQUJCQURZQ0FDQVFRUUZxSVFGQjlRQWhFQXdSQ3lBQklRRUNRQ0FBTFFBcFFRVkhEUUJCNHdBaEVBd1JDMEhpQUNFUURCQUxRUUFoRUNBQVFRQTJBaHdnQUVIa2tZQ0FBRFlDRUNBQVFRYzJBZ3dnQUNBVVFRRnFOZ0lVRENnTElBQkJBRFlDQUNBWFFRRnFJUUZCd0FBaEVBd09DMEVCSVFFTElBQWdBVG9BTENBQVFRQTJBZ0FnRjBFQmFpRUJDMEVvSVJBTUN3c2dBU0VCQzBFNElSQU1DUXNDUUNBQklnOGdBa1lOQUFOQUFrQWdEeTBBQUVHQXZvQ0FBR290QUFBaUFVRUJSZzBBSUFGQkFrY05BeUFQUVFGcUlRRU1CQXNnRDBFQmFpSVBJQUpIRFFBTFFUNGhFQXdpQzBFK0lSQU1JUXNnQUVFQU9nQXNJQThoQVF3QkMwRUxJUkFNQmd0Qk9pRVFEQVVMSUFGQkFXb2hBVUV0SVJBTUJBc2dBQ0FCT2dBc0lBQkJBRFlDQUNBV1FRRnFJUUZCRENFUURBTUxJQUJCQURZQ0FDQVhRUUZxSVFGQkNpRVFEQUlMSUFCQkFEWUNBQXNnQUVFQU9nQXNJQTBoQVVFSklSQU1BQXNMUVFBaEVDQUFRUUEyQWh3Z0FDQUxOZ0lVSUFCQnpaQ0FnQUEyQWhBZ0FFRUpOZ0lNREJjTFFRQWhFQ0FBUVFBMkFod2dBQ0FLTmdJVUlBQkI2WXFBZ0FBMkFoQWdBRUVKTmdJTURCWUxRUUFoRUNBQVFRQTJBaHdnQUNBSk5nSVVJQUJCdDVDQWdBQTJBaEFnQUVFSk5nSU1EQlVMUVFBaEVDQUFRUUEyQWh3Z0FDQUlOZ0lVSUFCQm5KR0FnQUEyQWhBZ0FFRUpOZ0lNREJRTFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkJ6WkNBZ0FBMkFoQWdBRUVKTmdJTURCTUxRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCNllxQWdBQTJBaEFnQUVFSk5nSU1EQklMUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnQ1Q0FnQUEyQWhBZ0FFRUpOZ0lNREJFTFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkJuSkdBZ0FBMkFoQWdBRUVKTmdJTURCQUxRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCbDVXQWdBQTJBaEFnQUVFUE5nSU1EQThMUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQmw1V0FnQUEyQWhBZ0FFRVBOZ0lNREE0TFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkJ3SktBZ0FBMkFoQWdBRUVMTmdJTURBMExRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCbFltQWdBQTJBaEFnQUVFTE5nSU1EQXdMUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQjRZK0FnQUEyQWhBZ0FFRUtOZ0lNREFzTFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkIrNCtBZ0FBMkFoQWdBRUVLTmdJTURBb0xRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCOFptQWdBQTJBaEFnQUVFQ05nSU1EQWtMUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnhKU0FnQUEyQWhBZ0FFRUNOZ0lNREFnTFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkI4cFdBZ0FBMkFoQWdBRUVDTmdJTURBY0xJQUJCQWpZQ0hDQUFJQUUyQWhRZ0FFR2Ntb0NBQURZQ0VDQUFRUlkyQWd4QkFDRVFEQVlMUVFFaEVBd0ZDMEhVQUNFUUlBRWlCQ0FDUmcwRUlBTkJDR29nQUNBRUlBSkIyTUtBZ0FCQkNoREZnSUNBQUNBREtBSU1JUVFnQXlnQ0NBNERBUVFDQUFzUXlvQ0FnQUFBQ3lBQVFRQTJBaHdnQUVHMW1vQ0FBRFlDRUNBQVFSYzJBZ3dnQUNBRVFRRnFOZ0lVUVFBaEVBd0NDeUFBUVFBMkFod2dBQ0FFTmdJVUlBQkJ5cHFBZ0FBMkFoQWdBRUVKTmdJTVFRQWhFQXdCQ3dKQUlBRWlCQ0FDUncwQVFTSWhFQXdCQ3lBQVFZbUFnSUFBTmdJSUlBQWdCRFlDQkVFaElSQUxJQU5CRUdva2dJQ0FnQUFnRUF1dkFRRUNmeUFCS0FJQUlRWUNRQUpBSUFJZ0EwWU5BQ0FFSUFacUlRUWdCaUFEYWlBQ2F5RUhJQUlnQmtGL2N5QUZhaUlHYWlFRkEwQUNRQ0FDTFFBQUlBUXRBQUJHRFFCQkFpRUVEQU1MQWtBZ0JnMEFRUUFoQkNBRklRSU1Bd3NnQmtGL2FpRUdJQVJCQVdvaEJDQUNRUUZxSWdJZ0EwY05BQXNnQnlFR0lBTWhBZ3NnQUVFQk5nSUFJQUVnQmpZQ0FDQUFJQUkyQWdRUEN5QUJRUUEyQWdBZ0FDQUVOZ0lBSUFBZ0FqWUNCQXNLQUNBQUVNZUFnSUFBQy9JMkFRdC9JNENBZ0lBQVFSQnJJZ0VrZ0lDQWdBQUNRRUVBS0FLZzBJQ0FBQTBBUVFBUXk0Q0FnQUJCZ05TRWdBQnJJZ0pCMlFCSkRRQkJBQ0VEQWtCQkFDZ0M0Tk9BZ0FBaUJBMEFRUUJDZnpjQzdOT0FnQUJCQUVLQWdJU0FnSURBQURjQzVOT0FnQUJCQUNBQlFRaHFRWEJ4UWRpcTFhb0ZjeUlFTmdMZzA0Q0FBRUVBUVFBMkF2VFRnSUFBUVFCQkFEWUN4Tk9BZ0FBTFFRQWdBallDek5PQWdBQkJBRUdBMUlTQUFEWUN5Tk9BZ0FCQkFFR0ExSVNBQURZQ21OQ0FnQUJCQUNBRU5nS3MwSUNBQUVFQVFYODJBcWpRZ0lBQUEwQWdBMEhFMElDQUFHb2dBMEc0MElDQUFHb2lCRFlDQUNBRUlBTkJzTkNBZ0FCcUlnVTJBZ0FnQTBHODBJQ0FBR29nQlRZQ0FDQURRY3pRZ0lBQWFpQURRY0RRZ0lBQWFpSUZOZ0lBSUFVZ0JEWUNBQ0FEUWRUUWdJQUFhaUFEUWNqUWdJQUFhaUlFTmdJQUlBUWdCVFlDQUNBRFFkRFFnSUFBYWlBRU5nSUFJQU5CSUdvaUEwR0FBa2NOQUF0QmdOU0VnQUJCZUVHQTFJU0FBR3RCRDNGQkFFR0ExSVNBQUVFSWFrRVBjUnNpQTJvaUJFRUVhaUFDUVVocUlnVWdBMnNpQTBFQmNqWUNBRUVBUVFBb0F2RFRnSUFBTmdLazBJQ0FBRUVBSUFNMkFwVFFnSUFBUVFBZ0JEWUNvTkNBZ0FCQmdOU0VnQUFnQldwQk9EWUNCQXNDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQWdBRUhzQVVzTkFBSkFRUUFvQW9qUWdJQUFJZ1pCRUNBQVFSTnFRWEJ4SUFCQkMwa2JJZ0pCQTNZaUJIWWlBMEVEY1VVTkFBSkFBa0FnQTBFQmNTQUVja0VCY3lJRlFRTjBJZ1JCc05DQWdBQnFJZ01nQkVHNDBJQ0FBR29vQWdBaUJDZ0NDQ0lDUncwQVFRQWdCa0YrSUFWM2NUWUNpTkNBZ0FBTUFRc2dBeUFDTmdJSUlBSWdBellDREFzZ0JFRUlhaUVESUFRZ0JVRURkQ0lGUVFOeU5nSUVJQVFnQldvaUJDQUVLQUlFUVFGeU5nSUVEQXdMSUFKQkFDZ0NrTkNBZ0FBaUIwME5BUUpBSUFORkRRQUNRQUpBSUFNZ0JIUkJBaUFFZENJRFFRQWdBMnR5Y1NJRFFRQWdBMnR4UVg5cUlnTWdBMEVNZGtFUWNTSURkaUlFUVFWMlFRaHhJZ1VnQTNJZ0JDQUZkaUlEUVFKMlFRUnhJZ1J5SUFNZ0JIWWlBMEVCZGtFQ2NTSUVjaUFESUFSMklnTkJBWFpCQVhFaUJISWdBeUFFZG1vaUJFRURkQ0lEUWJEUWdJQUFhaUlGSUFOQnVOQ0FnQUJxS0FJQUlnTW9BZ2dpQUVjTkFFRUFJQVpCZmlBRWQzRWlCallDaU5DQWdBQU1BUXNnQlNBQU5nSUlJQUFnQlRZQ0RBc2dBeUFDUVFOeU5nSUVJQU1nQkVFRGRDSUVhaUFFSUFKcklnVTJBZ0FnQXlBQ2FpSUFJQVZCQVhJMkFnUUNRQ0FIUlEwQUlBZEJlSEZCc05DQWdBQnFJUUpCQUNnQ25OQ0FnQUFoQkFKQUFrQWdCa0VCSUFkQkEzWjBJZ2h4RFFCQkFDQUdJQWh5TmdLSTBJQ0FBQ0FDSVFnTUFRc2dBaWdDQ0NFSUN5QUlJQVEyQWd3Z0FpQUVOZ0lJSUFRZ0FqWUNEQ0FFSUFnMkFnZ0xJQU5CQ0dvaEEwRUFJQUEyQXB6UWdJQUFRUUFnQlRZQ2tOQ0FnQUFNREF0QkFDZ0NqTkNBZ0FBaUNVVU5BU0FKUVFBZ0NXdHhRWDlxSWdNZ0EwRU1ka0VRY1NJRGRpSUVRUVYyUVFoeElnVWdBM0lnQkNBRmRpSURRUUoyUVFSeElnUnlJQU1nQkhZaUEwRUJka0VDY1NJRWNpQURJQVIySWdOQkFYWkJBWEVpQkhJZ0F5QUVkbXBCQW5SQnVOS0FnQUJxS0FJQUlnQW9BZ1JCZUhFZ0Ftc2hCQ0FBSVFVQ1FBTkFBa0FnQlNnQ0VDSUREUUFnQlVFVWFpZ0NBQ0lEUlEwQ0N5QURLQUlFUVhoeElBSnJJZ1VnQkNBRklBUkpJZ1ViSVFRZ0F5QUFJQVViSVFBZ0F5RUZEQUFMQ3lBQUtBSVlJUW9DUUNBQUtBSU1JZ2dnQUVZTkFDQUFLQUlJSWdOQkFDZ0NtTkNBZ0FCSkdpQUlJQU0yQWdnZ0F5QUlOZ0lNREFzTEFrQWdBRUVVYWlJRktBSUFJZ01OQUNBQUtBSVFJZ05GRFFNZ0FFRVFhaUVGQ3dOQUlBVWhDeUFESWdoQkZHb2lCU2dDQUNJRERRQWdDRUVRYWlFRklBZ29BaEFpQXcwQUN5QUxRUUEyQWdBTUNndEJmeUVDSUFCQnYzOUxEUUFnQUVFVGFpSURRWEJ4SVFKQkFDZ0NqTkNBZ0FBaUIwVU5BRUVBSVFzQ1FDQUNRWUFDU1EwQVFSOGhDeUFDUWYvLy93ZExEUUFnQTBFSWRpSURJQU5CZ1A0L2FrRVFka0VJY1NJRGRDSUVJQVJCZ09BZmFrRVFka0VFY1NJRWRDSUZJQVZCZ0lBUGFrRVFka0VDY1NJRmRFRVBkaUFESUFSeUlBVnlheUlEUVFGMElBSWdBMEVWYW5aQkFYRnlRUnhxSVFzTFFRQWdBbXNoQkFKQUFrQUNRQUpBSUF0QkFuUkJ1TktBZ0FCcUtBSUFJZ1VOQUVFQUlRTkJBQ0VJREFFTFFRQWhBeUFDUVFCQkdTQUxRUUYyYXlBTFFSOUdHM1FoQUVFQUlRZ0RRQUpBSUFVb0FnUkJlSEVnQW1zaUJpQUVUdzBBSUFZaEJDQUZJUWdnQmcwQVFRQWhCQ0FGSVFnZ0JTRUREQU1MSUFNZ0JVRVVhaWdDQUNJR0lBWWdCU0FBUVIxMlFRUnhha0VRYWlnQ0FDSUZSaHNnQXlBR0d5RURJQUJCQVhRaEFDQUZEUUFMQ3dKQUlBTWdDSElOQUVFQUlRaEJBaUFMZENJRFFRQWdBMnR5SUFkeElnTkZEUU1nQTBFQUlBTnJjVUYvYWlJRElBTkJESFpCRUhFaUEzWWlCVUVGZGtFSWNTSUFJQU55SUFVZ0FIWWlBMEVDZGtFRWNTSUZjaUFESUFWMklnTkJBWFpCQW5FaUJYSWdBeUFGZGlJRFFRRjJRUUZ4SWdWeUlBTWdCWFpxUVFKMFFialNnSUFBYWlnQ0FDRURDeUFEUlEwQkN3TkFJQU1vQWdSQmVIRWdBbXNpQmlBRVNTRUFBa0FnQXlnQ0VDSUZEUUFnQTBFVWFpZ0NBQ0VGQ3lBR0lBUWdBQnNoQkNBRElBZ2dBQnNoQ0NBRklRTWdCUTBBQ3dzZ0NFVU5BQ0FFUVFBb0FwRFFnSUFBSUFKclR3MEFJQWdvQWhnaEN3SkFJQWdvQWd3aUFDQUlSZzBBSUFnb0FnZ2lBMEVBS0FLWTBJQ0FBRWthSUFBZ0F6WUNDQ0FESUFBMkFnd01DUXNDUUNBSVFSUnFJZ1VvQWdBaUF3MEFJQWdvQWhBaUEwVU5BeUFJUVJCcUlRVUxBMEFnQlNFR0lBTWlBRUVVYWlJRktBSUFJZ01OQUNBQVFSQnFJUVVnQUNnQ0VDSUREUUFMSUFaQkFEWUNBQXdJQ3dKQVFRQW9BcERRZ0lBQUlnTWdBa2tOQUVFQUtBS2MwSUNBQUNFRUFrQUNRQ0FESUFKcklnVkJFRWtOQUNBRUlBSnFJZ0FnQlVFQmNqWUNCRUVBSUFVMkFwRFFnSUFBUVFBZ0FEWUNuTkNBZ0FBZ0JDQURhaUFGTmdJQUlBUWdBa0VEY2pZQ0JBd0JDeUFFSUFOQkEzSTJBZ1FnQkNBRGFpSURJQU1vQWdSQkFYSTJBZ1JCQUVFQU5nS2MwSUNBQUVFQVFRQTJBcERRZ0lBQUN5QUVRUWhxSVFNTUNnc0NRRUVBS0FLVTBJQ0FBQ0lBSUFKTkRRQkJBQ2dDb05DQWdBQWlBeUFDYWlJRUlBQWdBbXNpQlVFQmNqWUNCRUVBSUFVMkFwVFFnSUFBUVFBZ0JEWUNvTkNBZ0FBZ0F5QUNRUU55TmdJRUlBTkJDR29oQXd3S0N3SkFBa0JCQUNnQzROT0FnQUJGRFFCQkFDZ0M2Tk9BZ0FBaEJBd0JDMEVBUW44M0F1elRnSUFBUVFCQ2dJQ0VnSUNBd0FBM0F1VFRnSUFBUVFBZ0FVRU1ha0Z3Y1VIWXF0V3FCWE0yQXVEVGdJQUFRUUJCQURZQzlOT0FnQUJCQUVFQU5nTEUwNENBQUVHQWdBUWhCQXRCQUNFREFrQWdCQ0FDUWNjQWFpSUhhaUlHUVFBZ0JHc2lDM0VpQ0NBQ1N3MEFRUUJCTURZQytOT0FnQUFNQ2dzQ1FFRUFLQUxBMDRDQUFDSURSUTBBQWtCQkFDZ0N1Tk9BZ0FBaUJDQUlhaUlGSUFSTkRRQWdCU0FEVFEwQkMwRUFJUU5CQUVFd05nTDQwNENBQUF3S0MwRUFMUURFMDRDQUFFRUVjUTBFQWtBQ1FBSkFRUUFvQXFEUWdJQUFJZ1JGRFFCQnlOT0FnQUFoQXdOQUFrQWdBeWdDQUNJRklBUkxEUUFnQlNBREtBSUVhaUFFU3cwREN5QURLQUlJSWdNTkFBc0xRUUFReTRDQWdBQWlBRUYvUmcwRklBZ2hCZ0pBUVFBb0F1VFRnSUFBSWdOQmYyb2lCQ0FBY1VVTkFDQUlJQUJySUFRZ0FHcEJBQ0FEYTNGcUlRWUxJQVlnQWswTkJTQUdRZjcvLy84SFN3MEZBa0JCQUNnQ3dOT0FnQUFpQTBVTkFFRUFLQUs0MDRDQUFDSUVJQVpxSWdVZ0JFME5CaUFGSUFOTERRWUxJQVlReTRDQWdBQWlBeUFBUncwQkRBY0xJQVlnQUdzZ0MzRWlCa0grLy8vL0Iwc05CQ0FHRU11QWdJQUFJZ0FnQXlnQ0FDQURLQUlFYWtZTkF5QUFJUU1MQWtBZ0EwRi9SZzBBSUFKQnlBQnFJQVpORFFBQ1FDQUhJQVpyUVFBb0F1alRnSUFBSWdScVFRQWdCR3R4SWdSQi92Ly8vd2RORFFBZ0F5RUFEQWNMQWtBZ0JCRExnSUNBQUVGL1JnMEFJQVFnQm1vaEJpQURJUUFNQnd0QkFDQUdheERMZ0lDQUFCb01CQXNnQXlFQUlBTkJmMGNOQlF3REMwRUFJUWdNQnd0QkFDRUFEQVVMSUFCQmYwY05BZ3RCQUVFQUtBTEUwNENBQUVFRWNqWUN4Tk9BZ0FBTElBaEIvdi8vL3dkTERRRWdDQkRMZ0lDQUFDRUFRUUFReTRDQWdBQWhBeUFBUVg5R0RRRWdBMEYvUmcwQklBQWdBMDhOQVNBRElBQnJJZ1lnQWtFNGFrME5BUXRCQUVFQUtBSzQwNENBQUNBR2FpSUROZ0s0MDRDQUFBSkFJQU5CQUNnQ3ZOT0FnQUJORFFCQkFDQUROZ0s4MDRDQUFBc0NRQUpBQWtBQ1FFRUFLQUtnMElDQUFDSUVSUTBBUWNqVGdJQUFJUU1EUUNBQUlBTW9BZ0FpQlNBREtBSUVJZ2hxUmcwQ0lBTW9BZ2dpQXcwQURBTUxDd0pBQWtCQkFDZ0NtTkNBZ0FBaUEwVU5BQ0FBSUFOUERRRUxRUUFnQURZQ21OQ0FnQUFMUVFBaEEwRUFJQVkyQXN6VGdJQUFRUUFnQURZQ3lOT0FnQUJCQUVGL05nS28wSUNBQUVFQVFRQW9BdURUZ0lBQU5nS3MwSUNBQUVFQVFRQTJBdFRUZ0lBQUEwQWdBMEhFMElDQUFHb2dBMEc0MElDQUFHb2lCRFlDQUNBRUlBTkJzTkNBZ0FCcUlnVTJBZ0FnQTBHODBJQ0FBR29nQlRZQ0FDQURRY3pRZ0lBQWFpQURRY0RRZ0lBQWFpSUZOZ0lBSUFVZ0JEWUNBQ0FEUWRUUWdJQUFhaUFEUWNqUWdJQUFhaUlFTmdJQUlBUWdCVFlDQUNBRFFkRFFnSUFBYWlBRU5nSUFJQU5CSUdvaUEwR0FBa2NOQUFzZ0FFRjRJQUJyUVE5eFFRQWdBRUVJYWtFUGNSc2lBMm9pQkNBR1FVaHFJZ1VnQTJzaUEwRUJjallDQkVFQVFRQW9BdkRUZ0lBQU5nS2swSUNBQUVFQUlBTTJBcFRRZ0lBQVFRQWdCRFlDb05DQWdBQWdBQ0FGYWtFNE5nSUVEQUlMSUFNdEFBeEJDSEVOQUNBRUlBVkpEUUFnQkNBQVR3MEFJQVJCZUNBRWEwRVBjVUVBSUFSQkNHcEJEM0ViSWdWcUlnQkJBQ2dDbE5DQWdBQWdCbW9pQ3lBRmF5SUZRUUZ5TmdJRUlBTWdDQ0FHYWpZQ0JFRUFRUUFvQXZEVGdJQUFOZ0trMElDQUFFRUFJQVUyQXBUUWdJQUFRUUFnQURZQ29OQ0FnQUFnQkNBTGFrRTROZ0lFREFFTEFrQWdBRUVBS0FLWTBJQ0FBQ0lJVHcwQVFRQWdBRFlDbU5DQWdBQWdBQ0VJQ3lBQUlBWnFJUVZCeU5PQWdBQWhBd0pBQWtBQ1FBSkFBa0FDUUFKQUEwQWdBeWdDQUNBRlJnMEJJQU1vQWdnaUF3MEFEQUlMQ3lBRExRQU1RUWh4UlEwQkMwSEkwNENBQUNFREEwQUNRQ0FES0FJQUlnVWdCRXNOQUNBRklBTW9BZ1JxSWdVZ0JFc05Bd3NnQXlnQ0NDRUREQUFMQ3lBRElBQTJBZ0FnQXlBREtBSUVJQVpxTmdJRUlBQkJlQ0FBYTBFUGNVRUFJQUJCQ0dwQkQzRWJhaUlMSUFKQkEzSTJBZ1FnQlVGNElBVnJRUTl4UVFBZ0JVRUlha0VQY1J0cUlnWWdDeUFDYWlJQ2F5RURBa0FnQmlBRVJ3MEFRUUFnQWpZQ29OQ0FnQUJCQUVFQUtBS1UwSUNBQUNBRGFpSUROZ0tVMElDQUFDQUNJQU5CQVhJMkFnUU1Bd3NDUUNBR1FRQW9BcHpRZ0lBQVJ3MEFRUUFnQWpZQ25OQ0FnQUJCQUVFQUtBS1EwSUNBQUNBRGFpSUROZ0tRMElDQUFDQUNJQU5CQVhJMkFnUWdBaUFEYWlBRE5nSUFEQU1MQWtBZ0JpZ0NCQ0lFUVFOeFFRRkhEUUFnQkVGNGNTRUhBa0FDUUNBRVFmOEJTdzBBSUFZb0FnZ2lCU0FFUVFOMklnaEJBM1JCc05DQWdBQnFJZ0JHR2dKQUlBWW9BZ3dpQkNBRlJ3MEFRUUJCQUNnQ2lOQ0FnQUJCZmlBSWQzRTJBb2pRZ0lBQURBSUxJQVFnQUVZYUlBUWdCVFlDQ0NBRklBUTJBZ3dNQVFzZ0JpZ0NHQ0VKQWtBQ1FDQUdLQUlNSWdBZ0JrWU5BQ0FHS0FJSUlnUWdDRWthSUFBZ0JEWUNDQ0FFSUFBMkFnd01BUXNDUUNBR1FSUnFJZ1FvQWdBaUJRMEFJQVpCRUdvaUJDZ0NBQ0lGRFFCQkFDRUFEQUVMQTBBZ0JDRUlJQVVpQUVFVWFpSUVLQUlBSWdVTkFDQUFRUkJxSVFRZ0FDZ0NFQ0lGRFFBTElBaEJBRFlDQUFzZ0NVVU5BQUpBQWtBZ0JpQUdLQUljSWdWQkFuUkJ1TktBZ0FCcUlnUW9BZ0JIRFFBZ0JDQUFOZ0lBSUFBTkFVRUFRUUFvQW96UWdJQUFRWDRnQlhkeE5nS00wSUNBQUF3Q0N5QUpRUkJCRkNBSktBSVFJQVpHRzJvZ0FEWUNBQ0FBUlEwQkN5QUFJQWsyQWhnQ1FDQUdLQUlRSWdSRkRRQWdBQ0FFTmdJUUlBUWdBRFlDR0FzZ0JpZ0NGQ0lFUlEwQUlBQkJGR29nQkRZQ0FDQUVJQUEyQWhnTElBY2dBMm9oQXlBR0lBZHFJZ1lvQWdRaEJBc2dCaUFFUVg1eE5nSUVJQUlnQTJvZ0F6WUNBQ0FDSUFOQkFYSTJBZ1FDUUNBRFFmOEJTdzBBSUFOQmVIRkJzTkNBZ0FCcUlRUUNRQUpBUVFBb0FvalFnSUFBSWdWQkFTQURRUU4yZENJRGNRMEFRUUFnQlNBRGNqWUNpTkNBZ0FBZ0JDRUREQUVMSUFRb0FnZ2hBd3NnQXlBQ05nSU1JQVFnQWpZQ0NDQUNJQVEyQWd3Z0FpQUROZ0lJREFNTFFSOGhCQUpBSUFOQi8vLy9CMHNOQUNBRFFRaDJJZ1FnQkVHQS9qOXFRUkIyUVFoeElnUjBJZ1VnQlVHQTRCOXFRUkIyUVFSeElnVjBJZ0FnQUVHQWdBOXFRUkIyUVFKeElnQjBRUTkySUFRZ0JYSWdBSEpySWdSQkFYUWdBeUFFUVJWcWRrRUJjWEpCSEdvaEJBc2dBaUFFTmdJY0lBSkNBRGNDRUNBRVFRSjBRYmpTZ0lBQWFpRUZBa0JCQUNnQ2pOQ0FnQUFpQUVFQklBUjBJZ2h4RFFBZ0JTQUNOZ0lBUVFBZ0FDQUljallDak5DQWdBQWdBaUFGTmdJWUlBSWdBallDQ0NBQ0lBSTJBZ3dNQXdzZ0EwRUFRUmtnQkVFQmRtc2dCRUVmUmh0MElRUWdCU2dDQUNFQUEwQWdBQ0lGS0FJRVFYaHhJQU5HRFFJZ0JFRWRkaUVBSUFSQkFYUWhCQ0FGSUFCQkJIRnFRUkJxSWdnb0FnQWlBQTBBQ3lBSUlBSTJBZ0FnQWlBRk5nSVlJQUlnQWpZQ0RDQUNJQUkyQWdnTUFnc2dBRUY0SUFCclFROXhRUUFnQUVFSWFrRVBjUnNpQTJvaUN5QUdRVWhxSWdnZ0Eyc2lBMEVCY2pZQ0JDQUFJQWhxUVRnMkFnUWdCQ0FGUVRjZ0JXdEJEM0ZCQUNBRlFVbHFRUTl4RzJwQlFXb2lDQ0FJSUFSQkVHcEpHeUlJUVNNMkFnUkJBRUVBS0FMdzA0Q0FBRFlDcE5DQWdBQkJBQ0FETmdLVTBJQ0FBRUVBSUFzMkFxRFFnSUFBSUFoQkVHcEJBQ2tDME5PQWdBQTNBZ0FnQ0VFQUtRTEkwNENBQURjQ0NFRUFJQWhCQ0dvMkF0RFRnSUFBUVFBZ0JqWUN6Tk9BZ0FCQkFDQUFOZ0xJMDRDQUFFRUFRUUEyQXRUVGdJQUFJQWhCSkdvaEF3TkFJQU5CQnpZQ0FDQURRUVJxSWdNZ0JVa05BQXNnQ0NBRVJnMERJQWdnQ0NnQ0JFRitjVFlDQkNBSUlBZ2dCR3NpQURZQ0FDQUVJQUJCQVhJMkFnUUNRQ0FBUWY4QlN3MEFJQUJCZUhGQnNOQ0FnQUJxSVFNQ1FBSkFRUUFvQW9qUWdJQUFJZ1ZCQVNBQVFRTjJkQ0lBY1EwQVFRQWdCU0FBY2pZQ2lOQ0FnQUFnQXlFRkRBRUxJQU1vQWdnaEJRc2dCU0FFTmdJTUlBTWdCRFlDQ0NBRUlBTTJBZ3dnQkNBRk5nSUlEQVFMUVI4aEF3SkFJQUJCLy8vL0Iwc05BQ0FBUVFoMklnTWdBMEdBL2o5cVFSQjJRUWh4SWdOMElnVWdCVUdBNEI5cVFSQjJRUVJ4SWdWMElnZ2dDRUdBZ0E5cVFSQjJRUUp4SWdoMFFROTJJQU1nQlhJZ0NISnJJZ05CQVhRZ0FDQURRUlZxZGtFQmNYSkJIR29oQXdzZ0JDQUROZ0ljSUFSQ0FEY0NFQ0FEUVFKMFFialNnSUFBYWlFRkFrQkJBQ2dDak5DQWdBQWlDRUVCSUFOMElnWnhEUUFnQlNBRU5nSUFRUUFnQ0NBR2NqWUNqTkNBZ0FBZ0JDQUZOZ0lZSUFRZ0JEWUNDQ0FFSUFRMkFnd01CQXNnQUVFQVFSa2dBMEVCZG1zZ0EwRWZSaHQwSVFNZ0JTZ0NBQ0VJQTBBZ0NDSUZLQUlFUVhoeElBQkdEUU1nQTBFZGRpRUlJQU5CQVhRaEF5QUZJQWhCQkhGcVFSQnFJZ1lvQWdBaUNBMEFDeUFHSUFRMkFnQWdCQ0FGTmdJWUlBUWdCRFlDRENBRUlBUTJBZ2dNQXdzZ0JTZ0NDQ0lESUFJMkFnd2dCU0FDTmdJSUlBSkJBRFlDR0NBQ0lBVTJBZ3dnQWlBRE5nSUlDeUFMUVFocUlRTU1CUXNnQlNnQ0NDSURJQVEyQWd3Z0JTQUVOZ0lJSUFSQkFEWUNHQ0FFSUFVMkFnd2dCQ0FETmdJSUMwRUFLQUtVMElDQUFDSURJQUpORFFCQkFDZ0NvTkNBZ0FBaUJDQUNhaUlGSUFNZ0Ftc2lBMEVCY2pZQ0JFRUFJQU0yQXBUUWdJQUFRUUFnQlRZQ29OQ0FnQUFnQkNBQ1FRTnlOZ0lFSUFSQkNHb2hBd3dEQzBFQUlRTkJBRUV3TmdMNDA0Q0FBQXdDQ3dKQUlBdEZEUUFDUUFKQUlBZ2dDQ2dDSENJRlFRSjBRYmpTZ0lBQWFpSURLQUlBUncwQUlBTWdBRFlDQUNBQURRRkJBQ0FIUVg0Z0JYZHhJZ2MyQW96UWdJQUFEQUlMSUF0QkVFRVVJQXNvQWhBZ0NFWWJhaUFBTmdJQUlBQkZEUUVMSUFBZ0N6WUNHQUpBSUFnb0FoQWlBMFVOQUNBQUlBTTJBaEFnQXlBQU5nSVlDeUFJUVJScUtBSUFJZ05GRFFBZ0FFRVVhaUFETmdJQUlBTWdBRFlDR0FzQ1FBSkFJQVJCRDBzTkFDQUlJQVFnQW1vaUEwRURjallDQkNBSUlBTnFJZ01nQXlnQ0JFRUJjallDQkF3QkN5QUlJQUpxSWdBZ0JFRUJjallDQkNBSUlBSkJBM0kyQWdRZ0FDQUVhaUFFTmdJQUFrQWdCRUgvQVVzTkFDQUVRWGh4UWJEUWdJQUFhaUVEQWtBQ1FFRUFLQUtJMElDQUFDSUZRUUVnQkVFRGRuUWlCSEVOQUVFQUlBVWdCSEkyQW9qUWdJQUFJQU1oQkF3QkN5QURLQUlJSVFRTElBUWdBRFlDRENBRElBQTJBZ2dnQUNBRE5nSU1JQUFnQkRZQ0NBd0JDMEVmSVFNQ1FDQUVRZi8vL3dkTERRQWdCRUVJZGlJRElBTkJnUDQvYWtFUWRrRUljU0lEZENJRklBVkJnT0FmYWtFUWRrRUVjU0lGZENJQ0lBSkJnSUFQYWtFUWRrRUNjU0lDZEVFUGRpQURJQVZ5SUFKeWF5SURRUUYwSUFRZ0EwRVZhblpCQVhGeVFSeHFJUU1MSUFBZ0F6WUNIQ0FBUWdBM0FoQWdBMEVDZEVHNDBvQ0FBR29oQlFKQUlBZEJBU0FEZENJQ2NRMEFJQVVnQURZQ0FFRUFJQWNnQW5JMkFvelFnSUFBSUFBZ0JUWUNHQ0FBSUFBMkFnZ2dBQ0FBTmdJTURBRUxJQVJCQUVFWklBTkJBWFpySUFOQkgwWWJkQ0VESUFVb0FnQWhBZ0pBQTBBZ0FpSUZLQUlFUVhoeElBUkdEUUVnQTBFZGRpRUNJQU5CQVhRaEF5QUZJQUpCQkhGcVFSQnFJZ1lvQWdBaUFnMEFDeUFHSUFBMkFnQWdBQ0FGTmdJWUlBQWdBRFlDRENBQUlBQTJBZ2dNQVFzZ0JTZ0NDQ0lESUFBMkFnd2dCU0FBTmdJSUlBQkJBRFlDR0NBQUlBVTJBZ3dnQUNBRE5nSUlDeUFJUVFocUlRTU1BUXNDUUNBS1JRMEFBa0FDUUNBQUlBQW9BaHdpQlVFQ2RFRzQwb0NBQUdvaUF5Z0NBRWNOQUNBRElBZzJBZ0FnQ0EwQlFRQWdDVUYrSUFWM2NUWUNqTkNBZ0FBTUFnc2dDa0VRUVJRZ0NpZ0NFQ0FBUmh0cUlBZzJBZ0FnQ0VVTkFRc2dDQ0FLTmdJWUFrQWdBQ2dDRUNJRFJRMEFJQWdnQXpZQ0VDQURJQWcyQWhnTElBQkJGR29vQWdBaUEwVU5BQ0FJUVJScUlBTTJBZ0FnQXlBSU5nSVlDd0pBQWtBZ0JFRVBTdzBBSUFBZ0JDQUNhaUlEUVFOeU5nSUVJQUFnQTJvaUF5QURLQUlFUVFGeU5nSUVEQUVMSUFBZ0Ftb2lCU0FFUVFGeU5nSUVJQUFnQWtFRGNqWUNCQ0FGSUFScUlBUTJBZ0FDUUNBSFJRMEFJQWRCZUhGQnNOQ0FnQUJxSVFKQkFDZ0NuTkNBZ0FBaEF3SkFBa0JCQVNBSFFRTjJkQ0lJSUFaeERRQkJBQ0FJSUFaeU5nS0kwSUNBQUNBQ0lRZ01BUXNnQWlnQ0NDRUlDeUFJSUFNMkFnd2dBaUFETmdJSUlBTWdBallDRENBRElBZzJBZ2dMUVFBZ0JUWUNuTkNBZ0FCQkFDQUVOZ0tRMElDQUFBc2dBRUVJYWlFREN5QUJRUkJxSklDQWdJQUFJQU1MQ2dBZ0FCREpnSUNBQUF2aURRRUhmd0pBSUFCRkRRQWdBRUY0YWlJQklBQkJmR29vQWdBaUFrRjRjU0lBYWlFREFrQWdBa0VCY1EwQUlBSkJBM0ZGRFFFZ0FTQUJLQUlBSWdKcklnRkJBQ2dDbU5DQWdBQWlCRWtOQVNBQ0lBQnFJUUFDUUNBQlFRQW9BcHpRZ0lBQVJnMEFBa0FnQWtIL0FVc05BQ0FCS0FJSUlnUWdBa0VEZGlJRlFRTjBRYkRRZ0lBQWFpSUdSaG9DUUNBQktBSU1JZ0lnQkVjTkFFRUFRUUFvQW9qUWdJQUFRWDRnQlhkeE5nS0kwSUNBQUF3REN5QUNJQVpHR2lBQ0lBUTJBZ2dnQkNBQ05nSU1EQUlMSUFFb0FoZ2hCd0pBQWtBZ0FTZ0NEQ0lHSUFGR0RRQWdBU2dDQ0NJQ0lBUkpHaUFHSUFJMkFnZ2dBaUFHTmdJTURBRUxBa0FnQVVFVWFpSUNLQUlBSWdRTkFDQUJRUkJxSWdJb0FnQWlCQTBBUVFBaEJnd0JDd05BSUFJaEJTQUVJZ1pCRkdvaUFpZ0NBQ0lFRFFBZ0JrRVFhaUVDSUFZb0FoQWlCQTBBQ3lBRlFRQTJBZ0FMSUFkRkRRRUNRQUpBSUFFZ0FTZ0NIQ0lFUVFKMFFialNnSUFBYWlJQ0tBSUFSdzBBSUFJZ0JqWUNBQ0FHRFFGQkFFRUFLQUtNMElDQUFFRitJQVIzY1RZQ2pOQ0FnQUFNQXdzZ0IwRVFRUlFnQnlnQ0VDQUJSaHRxSUFZMkFnQWdCa1VOQWdzZ0JpQUhOZ0lZQWtBZ0FTZ0NFQ0lDUlEwQUlBWWdBallDRUNBQ0lBWTJBaGdMSUFFb0FoUWlBa1VOQVNBR1FSUnFJQUkyQWdBZ0FpQUdOZ0lZREFFTElBTW9BZ1FpQWtFRGNVRURSdzBBSUFNZ0FrRitjVFlDQkVFQUlBQTJBcERRZ0lBQUlBRWdBR29nQURZQ0FDQUJJQUJCQVhJMkFnUVBDeUFCSUFOUERRQWdBeWdDQkNJQ1FRRnhSUTBBQWtBQ1FDQUNRUUp4RFFBQ1FDQURRUUFvQXFEUWdJQUFSdzBBUVFBZ0FUWUNvTkNBZ0FCQkFFRUFLQUtVMElDQUFDQUFhaUlBTmdLVTBJQ0FBQ0FCSUFCQkFYSTJBZ1FnQVVFQUtBS2MwSUNBQUVjTkEwRUFRUUEyQXBEUWdJQUFRUUJCQURZQ25OQ0FnQUFQQ3dKQUlBTkJBQ2dDbk5DQWdBQkhEUUJCQUNBQk5nS2MwSUNBQUVFQVFRQW9BcERRZ0lBQUlBQnFJZ0EyQXBEUWdJQUFJQUVnQUVFQmNqWUNCQ0FCSUFCcUlBQTJBZ0FQQ3lBQ1FYaHhJQUJxSVFBQ1FBSkFJQUpCL3dGTERRQWdBeWdDQ0NJRUlBSkJBM1lpQlVFRGRFR3cwSUNBQUdvaUJrWWFBa0FnQXlnQ0RDSUNJQVJIRFFCQkFFRUFLQUtJMElDQUFFRitJQVYzY1RZQ2lOQ0FnQUFNQWdzZ0FpQUdSaG9nQWlBRU5nSUlJQVFnQWpZQ0RBd0JDeUFES0FJWUlRY0NRQUpBSUFNb0Fnd2lCaUFEUmcwQUlBTW9BZ2dpQWtFQUtBS1kwSUNBQUVrYUlBWWdBallDQ0NBQ0lBWTJBZ3dNQVFzQ1FDQURRUlJxSWdJb0FnQWlCQTBBSUFOQkVHb2lBaWdDQUNJRURRQkJBQ0VHREFFTEEwQWdBaUVGSUFRaUJrRVVhaUlDS0FJQUlnUU5BQ0FHUVJCcUlRSWdCaWdDRUNJRURRQUxJQVZCQURZQ0FBc2dCMFVOQUFKQUFrQWdBeUFES0FJY0lnUkJBblJCdU5LQWdBQnFJZ0lvQWdCSERRQWdBaUFHTmdJQUlBWU5BVUVBUVFBb0FvelFnSUFBUVg0Z0JIZHhOZ0tNMElDQUFBd0NDeUFIUVJCQkZDQUhLQUlRSUFOR0cyb2dCallDQUNBR1JRMEJDeUFHSUFjMkFoZ0NRQ0FES0FJUUlnSkZEUUFnQmlBQ05nSVFJQUlnQmpZQ0dBc2dBeWdDRkNJQ1JRMEFJQVpCRkdvZ0FqWUNBQ0FDSUFZMkFoZ0xJQUVnQUdvZ0FEWUNBQ0FCSUFCQkFYSTJBZ1FnQVVFQUtBS2MwSUNBQUVjTkFVRUFJQUEyQXBEUWdJQUFEd3NnQXlBQ1FYNXhOZ0lFSUFFZ0FHb2dBRFlDQUNBQklBQkJBWEkyQWdRTEFrQWdBRUgvQVVzTkFDQUFRWGh4UWJEUWdJQUFhaUVDQWtBQ1FFRUFLQUtJMElDQUFDSUVRUUVnQUVFRGRuUWlBSEVOQUVFQUlBUWdBSEkyQW9qUWdJQUFJQUloQUF3QkN5QUNLQUlJSVFBTElBQWdBVFlDRENBQ0lBRTJBZ2dnQVNBQ05nSU1JQUVnQURZQ0NBOExRUjhoQWdKQUlBQkIvLy8vQjBzTkFDQUFRUWgySWdJZ0FrR0EvajlxUVJCMlFRaHhJZ0owSWdRZ0JFR0E0QjlxUVJCMlFRUnhJZ1IwSWdZZ0JrR0FnQTlxUVJCMlFRSnhJZ1owUVE5MklBSWdCSElnQm5KcklnSkJBWFFnQUNBQ1FSVnFka0VCY1hKQkhHb2hBZ3NnQVNBQ05nSWNJQUZDQURjQ0VDQUNRUUowUWJqU2dJQUFhaUVFQWtBQ1FFRUFLQUtNMElDQUFDSUdRUUVnQW5RaUEzRU5BQ0FFSUFFMkFnQkJBQ0FHSUFOeU5nS00wSUNBQUNBQklBUTJBaGdnQVNBQk5nSUlJQUVnQVRZQ0RBd0JDeUFBUVFCQkdTQUNRUUYyYXlBQ1FSOUdHM1FoQWlBRUtBSUFJUVlDUUFOQUlBWWlCQ2dDQkVGNGNTQUFSZzBCSUFKQkhYWWhCaUFDUVFGMElRSWdCQ0FHUVFSeGFrRVFhaUlES0FJQUlnWU5BQXNnQXlBQk5nSUFJQUVnQkRZQ0dDQUJJQUUyQWd3Z0FTQUJOZ0lJREFFTElBUW9BZ2dpQUNBQk5nSU1JQVFnQVRZQ0NDQUJRUUEyQWhnZ0FTQUVOZ0lNSUFFZ0FEWUNDQXRCQUVFQUtBS28wSUNBQUVGL2FpSUJRWDhnQVJzMkFxalFnSUFBQ3dzRUFBQUFDMDRBQWtBZ0FBMEFQd0JCRUhRUEN3SkFJQUJCLy84RGNRMEFJQUJCZjB3TkFBSkFJQUJCRUhaQUFDSUFRWDlIRFFCQkFFRXdOZ0w0MDRDQUFFRi9Ed3NnQUVFUWRBOExFTXFBZ0lBQUFBdnlBZ0lEZndGK0FrQWdBa1VOQUNBQUlBRTZBQUFnQWlBQWFpSURRWDlxSUFFNkFBQWdBa0VEU1EwQUlBQWdBVG9BQWlBQUlBRTZBQUVnQTBGOWFpQUJPZ0FBSUFOQmZtb2dBVG9BQUNBQ1FRZEpEUUFnQUNBQk9nQURJQU5CZkdvZ0FUb0FBQ0FDUVFsSkRRQWdBRUVBSUFCclFRTnhJZ1JxSWdNZ0FVSC9BWEZCZ1lLRUNHd2lBVFlDQUNBRElBSWdCR3RCZkhFaUJHb2lBa0Y4YWlBQk5nSUFJQVJCQ1VrTkFDQURJQUUyQWdnZ0F5QUJOZ0lFSUFKQmVHb2dBVFlDQUNBQ1FYUnFJQUUyQWdBZ0JFRVpTUTBBSUFNZ0FUWUNHQ0FESUFFMkFoUWdBeUFCTmdJUUlBTWdBVFlDRENBQ1FYQnFJQUUyQWdBZ0FrRnNhaUFCTmdJQUlBSkJhR29nQVRZQ0FDQUNRV1JxSUFFMkFnQWdCQ0FEUVFSeFFSaHlJZ1ZySWdKQklFa05BQ0FCclVLQmdJQ0FFSDRoQmlBRElBVnFJUUVEUUNBQklBWTNBeGdnQVNBR053TVFJQUVnQmpjRENDQUJJQVkzQXdBZ0FVRWdhaUVCSUFKQllHb2lBa0VmU3cwQUN3c2dBQXNMamtnQkFFR0FDQXVHU0FFQUFBQUNBQUFBQXdBQUFBQUFBQUFBQUFBQUJBQUFBQVVBQUFBQUFBQUFBQUFBQUFZQUFBQUhBQUFBQ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVNXNTJZV3hwWkNCamFHRnlJR2x1SUhWeWJDQnhkV1Z5ZVFCVGNHRnVJR05oYkd4aVlXTnJJR1Z5Y205eUlHbHVJRzl1WDJKdlpIa0FRMjl1ZEdWdWRDMU1aVzVuZEdnZ2IzWmxjbVpzYjNjQVEyaDFibXNnYzJsNlpTQnZkbVZ5Wm14dmR3QlNaWE53YjI1elpTQnZkbVZ5Wm14dmR3QkpiblpoYkdsa0lHMWxkR2h2WkNCbWIzSWdTRlJVVUM5NExuZ2djbVZ4ZFdWemRBQkpiblpoYkdsa0lHMWxkR2h2WkNCbWIzSWdVbFJUVUM5NExuZ2djbVZ4ZFdWemRBQkZlSEJsWTNSbFpDQlRUMVZTUTBVZ2JXVjBhRzlrSUdadmNpQkpRMFV2ZUM1NElISmxjWFZsYzNRQVNXNTJZV3hwWkNCamFHRnlJR2x1SUhWeWJDQm1jbUZuYldWdWRDQnpkR0Z5ZEFCRmVIQmxZM1JsWkNCa2IzUUFVM0JoYmlCallXeHNZbUZqYXlCbGNuSnZjaUJwYmlCdmJsOXpkR0YwZFhNQVNXNTJZV3hwWkNCeVpYTndiMjV6WlNCemRHRjBkWE1BU1c1MllXeHBaQ0JqYUdGeVlXTjBaWElnYVc0Z1kyaDFibXNnWlhoMFpXNXphVzl1Y3dCVmMyVnlJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDl5WlhObGRHQWdZMkZzYkdKaFkyc2daWEp5YjNJQVlHOXVYMk5vZFc1clgyaGxZV1JsY21BZ1kyRnNiR0poWTJzZ1pYSnliM0lBWUc5dVgyMWxjM05oWjJWZlltVm5hVzVnSUdOaGJHeGlZV05ySUdWeWNtOXlBR0J2Ymw5amFIVnVhMTlsZUhSbGJuTnBiMjVmZG1Gc2RXVmdJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDl6ZEdGMGRYTmZZMjl0Y0d4bGRHVmdJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDkyWlhKemFXOXVYMk52YlhCc1pYUmxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmZFhKc1gyTnZiWEJzWlhSbFlDQmpZV3hzWW1GamF5Qmxjbkp2Y2dCZ2IyNWZZMmgxYm10ZlkyOXRjR3hsZEdWZ0lHTmhiR3hpWVdOcklHVnljbTl5QUdCdmJsOW9aV0ZrWlhKZmRtRnNkV1ZmWTI5dGNHeGxkR1ZnSUdOaGJHeGlZV05ySUdWeWNtOXlBR0J2Ymw5dFpYTnpZV2RsWDJOdmJYQnNaWFJsWUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZmJXVjBhRzlrWDJOdmJYQnNaWFJsWUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZmFHVmhaR1Z5WDJacFpXeGtYMk52YlhCc1pYUmxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmWTJoMWJtdGZaWGgwWlc1emFXOXVYMjVoYldWZ0lHTmhiR3hpWVdOcklHVnljbTl5QUZWdVpYaHdaV04wWldRZ1kyaGhjaUJwYmlCMWNtd2djMlZ5ZG1WeUFFbHVkbUZzYVdRZ2FHVmhaR1Z5SUhaaGJIVmxJR05vWVhJQVNXNTJZV3hwWkNCb1pXRmtaWElnWm1sbGJHUWdZMmhoY2dCVGNHRnVJR05oYkd4aVlXTnJJR1Z5Y205eUlHbHVJRzl1WDNabGNuTnBiMjRBU1c1MllXeHBaQ0J0YVc1dmNpQjJaWEp6YVc5dUFFbHVkbUZzYVdRZ2JXRnFiM0lnZG1WeWMybHZiZ0JGZUhCbFkzUmxaQ0J6Y0dGalpTQmhablJsY2lCMlpYSnphVzl1QUVWNGNHVmpkR1ZrSUVOU1RFWWdZV1owWlhJZ2RtVnljMmx2YmdCSmJuWmhiR2xrSUVoVVZGQWdkbVZ5YzJsdmJnQkpiblpoYkdsa0lHaGxZV1JsY2lCMGIydGxiZ0JUY0dGdUlHTmhiR3hpWVdOcklHVnljbTl5SUdsdUlHOXVYM1Z5YkFCSmJuWmhiR2xrSUdOb1lYSmhZM1JsY25NZ2FXNGdkWEpzQUZWdVpYaHdaV04wWldRZ2MzUmhjblFnWTJoaGNpQnBiaUIxY213QVJHOTFZbXhsSUVBZ2FXNGdkWEpzQUVWdGNIUjVJRU52Ym5SbGJuUXRUR1Z1WjNSb0FFbHVkbUZzYVdRZ1kyaGhjbUZqZEdWeUlHbHVJRU52Ym5SbGJuUXRUR1Z1WjNSb0FFUjFjR3hwWTJGMFpTQkRiMjUwWlc1MExVeGxibWQwYUFCSmJuWmhiR2xrSUdOb1lYSWdhVzRnZFhKc0lIQmhkR2dBUTI5dWRHVnVkQzFNWlc1bmRHZ2dZMkZ1SjNRZ1ltVWdjSEpsYzJWdWRDQjNhWFJvSUZSeVlXNXpabVZ5TFVWdVkyOWthVzVuQUVsdWRtRnNhV1FnWTJoaGNtRmpkR1Z5SUdsdUlHTm9kVzVySUhOcGVtVUFVM0JoYmlCallXeHNZbUZqYXlCbGNuSnZjaUJwYmlCdmJsOW9aV0ZrWlhKZmRtRnNkV1VBVTNCaGJpQmpZV3hzWW1GamF5Qmxjbkp2Y2lCcGJpQnZibDlqYUhWdWExOWxlSFJsYm5OcGIyNWZkbUZzZFdVQVNXNTJZV3hwWkNCamFHRnlZV04wWlhJZ2FXNGdZMmgxYm1zZ1pYaDBaVzV6YVc5dWN5QjJZV3gxWlFCTmFYTnphVzVuSUdWNGNHVmpkR1ZrSUV4R0lHRm1kR1Z5SUdobFlXUmxjaUIyWVd4MVpRQkpiblpoYkdsa0lHQlVjbUZ1YzJabGNpMUZibU52WkdsdVoyQWdhR1ZoWkdWeUlIWmhiSFZsQUVsdWRtRnNhV1FnWTJoaGNtRmpkR1Z5SUdsdUlHTm9kVzVySUdWNGRHVnVjMmx2Ym5NZ2NYVnZkR1VnZG1Gc2RXVUFTVzUyWVd4cFpDQmphR0Z5WVdOMFpYSWdhVzRnWTJoMWJtc2daWGgwWlc1emFXOXVjeUJ4ZFc5MFpXUWdkbUZzZFdVQVVHRjFjMlZrSUdKNUlHOXVYMmhsWVdSbGNuTmZZMjl0Y0d4bGRHVUFTVzUyWVd4cFpDQkZUMFlnYzNSaGRHVUFiMjVmY21WelpYUWdjR0YxYzJVQWIyNWZZMmgxYm10ZmFHVmhaR1Z5SUhCaGRYTmxBRzl1WDIxbGMzTmhaMlZmWW1WbmFXNGdjR0YxYzJVQWIyNWZZMmgxYm10ZlpYaDBaVzV6YVc5dVgzWmhiSFZsSUhCaGRYTmxBRzl1WDNOMFlYUjFjMTlqYjIxd2JHVjBaU0J3WVhWelpRQnZibDkyWlhKemFXOXVYMk52YlhCc1pYUmxJSEJoZFhObEFHOXVYM1Z5YkY5amIyMXdiR1YwWlNCd1lYVnpaUUJ2Ymw5amFIVnVhMTlqYjIxd2JHVjBaU0J3WVhWelpRQnZibDlvWldGa1pYSmZkbUZzZFdWZlkyOXRjR3hsZEdVZ2NHRjFjMlVBYjI1ZmJXVnpjMkZuWlY5amIyMXdiR1YwWlNCd1lYVnpaUUJ2Ymw5dFpYUm9iMlJmWTI5dGNHeGxkR1VnY0dGMWMyVUFiMjVmYUdWaFpHVnlYMlpwWld4a1gyTnZiWEJzWlhSbElIQmhkWE5sQUc5dVgyTm9kVzVyWDJWNGRHVnVjMmx2Ymw5dVlXMWxJSEJoZFhObEFGVnVaWGh3WldOMFpXUWdjM0JoWTJVZ1lXWjBaWElnYzNSaGNuUWdiR2x1WlFCVGNHRnVJR05oYkd4aVlXTnJJR1Z5Y205eUlHbHVJRzl1WDJOb2RXNXJYMlY0ZEdWdWMybHZibDl1WVcxbEFFbHVkbUZzYVdRZ1kyaGhjbUZqZEdWeUlHbHVJR05vZFc1cklHVjRkR1Z1YzJsdmJuTWdibUZ0WlFCUVlYVnpaU0J2YmlCRFQwNU9SVU5VTDFWd1ozSmhaR1VBVUdGMWMyVWdiMjRnVUZKSkwxVndaM0poWkdVQVJYaHdaV04wWldRZ1NGUlVVQzh5SUVOdmJtNWxZM1JwYjI0Z1VISmxabUZqWlFCVGNHRnVJR05oYkd4aVlXTnJJR1Z5Y205eUlHbHVJRzl1WDIxbGRHaHZaQUJGZUhCbFkzUmxaQ0J6Y0dGalpTQmhablJsY2lCdFpYUm9iMlFBVTNCaGJpQmpZV3hzWW1GamF5Qmxjbkp2Y2lCcGJpQnZibDlvWldGa1pYSmZabWxsYkdRQVVHRjFjMlZrQUVsdWRtRnNhV1FnZDI5eVpDQmxibU52ZFc1MFpYSmxaQUJKYm5aaGJHbGtJRzFsZEdodlpDQmxibU52ZFc1MFpYSmxaQUJWYm1WNGNHVmpkR1ZrSUdOb1lYSWdhVzRnZFhKc0lITmphR1Z0WVFCU1pYRjFaWE4wSUdoaGN5QnBiblpoYkdsa0lHQlVjbUZ1YzJabGNpMUZibU52WkdsdVoyQUFVMWRKVkVOSVgxQlNUMWhaQUZWVFJWOVFVazlZV1FCTlMwRkRWRWxXU1ZSWkFGVk9VRkpQUTBWVFUwRkNURVZmUlU1VVNWUlpBRU5QVUZrQVRVOVdSVVJmVUVWU1RVRk9SVTVVVEZrQVZFOVBYMFZCVWt4WkFFNVBWRWxHV1FCR1FVbE1SVVJmUkVWUVJVNUVSVTVEV1FCQ1FVUmZSMEZVUlZkQldRQlFURUZaQUZCVlZBQkRTRVZEUzA5VlZBQkhRVlJGVjBGWlgxUkpUVVZQVlZRQVVrVlJWVVZUVkY5VVNVMUZUMVZVQUU1RlZGZFBVa3RmUTA5T1RrVkRWRjlVU1UxRlQxVlVBRU5QVGs1RlExUkpUMDVmVkVsTlJVOVZWQUJNVDBkSlRsOVVTVTFGVDFWVUFFNUZWRmRQVWt0ZlVrVkJSRjlVU1UxRlQxVlVBRkJQVTFRQVRVbFRSRWxTUlVOVVJVUmZVa1ZSVlVWVFZBQkRURWxGVGxSZlEweFBVMFZFWDFKRlVWVkZVMVFBUTB4SlJVNVVYME5NVDFORlJGOU1UMEZFWDBKQlRFRk9RMFZFWDFKRlVWVkZVMVFBUWtGRVgxSkZVVlZGVTFRQVNGUlVVRjlTUlZGVlJWTlVYMU5GVGxSZlZFOWZTRlJVVUZOZlVFOVNWQUJTUlZCUFVsUUFTVTFmUVY5VVJVRlFUMVFBVWtWVFJWUmZRMDlPVkVWT1ZBQk9UMTlEVDA1VVJVNVVBRkJCVWxSSlFVeGZRMDlPVkVWT1ZBQklVRVZmU1U1V1FVeEpSRjlEVDA1VFZFRk9WQUJJVUVWZlEwSmZVa1ZUUlZRQVIwVlVBRWhRUlY5VFZGSkpRMVFBUTA5T1JreEpRMVFBVkVWTlVFOVNRVkpaWDFKRlJFbFNSVU5VQUZCRlVrMUJUa1ZPVkY5U1JVUkpVa1ZEVkFCRFQwNU9SVU5VQUUxVlRGUkpYMU5VUVZSVlV3QklVRVZmU1U1V1FVeEpSRjlUVkVGVVZWTUFWRTlQWDAxQlRsbGZVa1ZSVlVWVFZGTUFSVUZTVEZsZlNFbE9WRk1BVlU1QlZrRkpURUZDVEVWZlJrOVNYMHhGUjBGTVgxSkZRVk5QVGxNQVQxQlVTVTlPVXdCVFYwbFVRMGhKVGtkZlVGSlBWRTlEVDB4VEFGWkJVa2xCVGxSZlFVeFRUMTlPUlVkUFZFbEJWRVZUQUUxVlRGUkpVRXhGWDBOSVQwbERSVk1BU1U1VVJWSk9RVXhmVTBWU1ZrVlNYMFZTVWs5U0FGZEZRbDlUUlZKV1JWSmZWVTVMVGs5WFRsOUZVbEpQVWdCU1FVbE1SMVZPWDBWU1VrOVNBRWxFUlU1VVNWUlpYMUJTVDFaSlJFVlNYMEZWVkVoRlRsUkpRMEZVU1U5T1gwVlNVazlTQUZOVFRGOURSVkpVU1VaSlEwRlVSVjlGVWxKUFVnQkpUbFpCVEVsRVgxaGZSazlTVjBGU1JFVkVYMFpQVWdCVFJWUmZVRUZTUVUxRlZFVlNBRWRGVkY5UVFWSkJUVVZVUlZJQVNGQkZYMVZUUlZJQVUwVkZYMDlVU0VWU0FFaFFSVjlEUWw5RFNGVk9TMTlJUlVGRVJWSUFUVXREUVV4RlRrUkJVZ0JUUlZSVlVBQlhSVUpmVTBWU1ZrVlNYMGxUWDBSUFYwNEFWRVZCVWtSUFYwNEFTRkJGWDBOTVQxTkZSRjlEVDA1T1JVTlVTVTlPQUVoRlZWSkpVMVJKUTE5RldGQkpVa0ZVU1U5T0FFUkpVME5QVGs1RlExUkZSRjlQVUVWU1FWUkpUMDRBVGs5T1gwRlZWRWhQVWtsVVFWUkpWa1ZmU1U1R1QxSk5RVlJKVDA0QVNGQkZYMGxPVmtGTVNVUmZWa1ZTVTBsUFRnQklVRVZmUTBKZlRVVlRVMEZIUlY5Q1JVZEpUZ0JUU1ZSRlgwbFRYMFpTVDFwRlRnQklVRVZmU1U1V1FVeEpSRjlJUlVGRVJWSmZWRTlMUlU0QVNVNVdRVXhKUkY5VVQwdEZUZ0JHVDFKQ1NVUkVSVTRBUlU1SVFVNURSVjlaVDFWU1gwTkJURTBBU0ZCRlgwbE9Wa0ZNU1VSZlZWSk1BRUpNVDBOTFJVUmZRbGxmVUVGU1JVNVVRVXhmUTA5T1ZGSlBUQUJOUzBOUFRBQkJRMHdBU0ZCRlgwbE9WRVZTVGtGTUFGSkZVVlZGVTFSZlNFVkJSRVZTWDBaSlJVeEVVMTlVVDA5ZlRFRlNSMFZmVlU1UFJrWkpRMGxCVEFCSVVFVmZUMHNBVlU1TVNVNUxBRlZPVEU5RFN3QlFVa2tBVWtWVVVsbGZWMGxVU0FCSVVFVmZTVTVXUVV4SlJGOURUMDVVUlU1VVgweEZUa2RVU0FCSVVFVmZWVTVGV0ZCRlExUkZSRjlEVDA1VVJVNVVYMHhGVGtkVVNBQkdURlZUU0FCUVVrOVFVRUZVUTBnQVRTMVRSVUZTUTBnQVZWSkpYMVJQVDE5TVQwNUhBRkJTVDBORlUxTkpUa2NBVFVsVFEwVk1URUZPUlU5VlUxOVFSVkpUU1ZOVVJVNVVYMWRCVWs1SlRrY0FUVWxUUTBWTVRFRk9SVTlWVTE5WFFWSk9TVTVIQUVoUVJWOUpUbFpCVEVsRVgxUlNRVTVUUmtWU1gwVk9RMDlFU1U1SEFFVjRjR1ZqZEdWa0lFTlNURVlBU0ZCRlgwbE9Wa0ZNU1VSZlEwaFZUa3RmVTBsYVJRQk5UMVpGQUVOUFRsUkpUbFZGQUVoUVJWOURRbDlUVkVGVVZWTmZRMDlOVUV4RlZFVUFTRkJGWDBOQ1gwaEZRVVJGVWxOZlEwOU5VRXhGVkVVQVNGQkZYME5DWDFaRlVsTkpUMDVmUTA5TlVFeEZWRVVBU0ZCRlgwTkNYMVZTVEY5RFQwMVFURVZVUlFCSVVFVmZRMEpmUTBoVlRrdGZRMDlOVUV4RlZFVUFTRkJGWDBOQ1gwaEZRVVJGVWw5V1FVeFZSVjlEVDAxUVRFVlVSUUJJVUVWZlEwSmZRMGhWVGt0ZlJWaFVSVTVUU1U5T1gxWkJURlZGWDBOUFRWQk1SVlJGQUVoUVJWOURRbDlEU0ZWT1MxOUZXRlJGVGxOSlQwNWZUa0ZOUlY5RFQwMVFURVZVUlFCSVVFVmZRMEpmVFVWVFUwRkhSVjlEVDAxUVRFVlVSUUJJVUVWZlEwSmZUVVZVU0U5RVgwTlBUVkJNUlZSRkFFaFFSVjlEUWw5SVJVRkVSVkpmUmtsRlRFUmZRMDlOVUV4RlZFVUFSRVZNUlZSRkFFaFFSVjlKVGxaQlRFbEVYMFZQUmw5VFZFRlVSUUJKVGxaQlRFbEVYMU5UVEY5RFJWSlVTVVpKUTBGVVJRQlFRVlZUUlFCT1QxOVNSVk5RVDA1VFJRQlZUbE5WVUZCUFVsUkZSRjlOUlVSSlFWOVVXVkJGQUVkUFRrVUFUazlVWDBGRFEwVlFWRUZDVEVVQVUwVlNWa2xEUlY5VlRrRldRVWxNUVVKTVJRQlNRVTVIUlY5T1QxUmZVMEZVU1ZOR1NVRkNURVVBVDFKSlIwbE9YMGxUWDFWT1VrVkJRMGhCUWt4RkFGSkZVMUJQVGxORlgwbFRYMU5VUVV4RkFGQlZVa2RGQUUxRlVrZEZBRkpGVVZWRlUxUmZTRVZCUkVWU1gwWkpSVXhFVTE5VVQwOWZURUZTUjBVQVVrVlJWVVZUVkY5SVJVRkVSVkpmVkU5UFgweEJVa2RGQUZCQldVeFBRVVJmVkU5UFgweEJVa2RGQUVsT1UxVkdSa2xEU1VWT1ZGOVRWRTlTUVVkRkFFaFFSVjlRUVZWVFJVUmZWVkJIVWtGRVJRQklVRVZmVUVGVlUwVkVYMGd5WDFWUVIxSkJSRVVBVTA5VlVrTkZBRUZPVGs5VlRrTkZBRlJTUVVORkFFaFFSVjlWVGtWWVVFVkRWRVZFWDFOUVFVTkZBRVJGVTBOU1NVSkZBRlZPVTFWQ1UwTlNTVUpGQUZKRlEwOVNSQUJJVUVWZlNVNVdRVXhKUkY5TlJWUklUMFFBVGs5VVgwWlBWVTVFQUZCU1QxQkdTVTVFQUZWT1FrbE9SQUJTUlVKSlRrUUFWVTVCVlZSSVQxSkpXa1ZFQUUxRlZFaFBSRjlPVDFSZlFVeE1UMWRGUkFCSVZGUlFYMVpGVWxOSlQwNWZUazlVWDFOVlVGQlBVbFJGUkFCQlRGSkZRVVJaWDFKRlVFOVNWRVZFQUVGRFEwVlFWRVZFQUU1UFZGOUpUVkJNUlUxRlRsUkZSQUJNVDA5UVgwUkZWRVZEVkVWRUFFaFFSVjlEVWw5RldGQkZRMVJGUkFCSVVFVmZURVpmUlZoUVJVTlVSVVFBUTFKRlFWUkZSQUJKVFY5VlUwVkVBRWhRUlY5UVFWVlRSVVFBVkVsTlJVOVZWRjlQUTBOVlVrVkVBRkJCV1UxRlRsUmZVa1ZSVlVsU1JVUUFVRkpGUTA5T1JFbFVTVTlPWDFKRlVWVkpVa1ZFQUZCU1QxaFpYMEZWVkVoRlRsUkpRMEZVU1U5T1gxSkZVVlZKVWtWRUFFNUZWRmRQVWt0ZlFWVlVTRVZPVkVsRFFWUkpUMDVmVWtWUlZVbFNSVVFBVEVWT1IxUklYMUpGVVZWSlVrVkVBRk5UVEY5RFJWSlVTVVpKUTBGVVJWOVNSVkZWU1ZKRlJBQlZVRWRTUVVSRlgxSkZVVlZKVWtWRUFGQkJSMFZmUlZoUVNWSkZSQUJRVWtWRFQwNUVTVlJKVDA1ZlJrRkpURVZFQUVWWVVFVkRWRUZVU1U5T1gwWkJTVXhGUkFCU1JWWkJURWxFUVZSSlQwNWZSa0ZKVEVWRUFGTlRURjlJUVU1RVUwaEJTMFZmUmtGSlRFVkVBRXhQUTB0RlJBQlVVa0ZPVTBaUFVrMUJWRWxQVGw5QlVGQk1TVVZFQUU1UFZGOU5UMFJKUmtsRlJBQk9UMVJmUlZoVVJVNUVSVVFBUWtGT1JGZEpSRlJJWDB4SlRVbFVYMFZZUTBWRlJFVkVBRk5KVkVWZlNWTmZUMVpGVWt4UFFVUkZSQUJJUlVGRUFFVjRjR1ZqZEdWa0lFaFVWRkF2QUFCZUV3QUFKaE1BQURBUUFBRHdGd0FBblJNQUFCVVNBQUE1RndBQThCSUFBQW9RQUFCMUVnQUFyUklBQUlJVEFBQlBGQUFBZnhBQUFLQVZBQUFqRkFBQWlSSUFBSXNVQUFCTkZRQUExQkVBQU04VUFBQVFHQUFBeVJZQUFOd1dBQURCRVFBQTRCY0FBTHNVQUFCMEZBQUFmQlVBQU9VVUFBQUlGd0FBSHhBQUFHVVZBQUNqRkFBQUtCVUFBQUlWQUFDWkZRQUFMQkFBQUlzWkFBQlBEd0FBMUE0QUFHb1FBQURPRUFBQUFoY0FBSWtPQUFCdUV3QUFIQk1BQUdZVUFBQldGd0FBd1JNQUFNMFRBQUJzRXdBQWFCY0FBR1lYQUFCZkZ3QUFJaE1BQU00UEFBQnBEZ0FBMkE0QUFHTVdBQURMRXdBQXFnNEFBQ2dYQUFBbUZ3QUF4Uk1BQUYwV0FBRG9FUUFBWnhNQUFHVVRBQUR5RmdBQWN4TUFBQjBYQUFENUZnQUE4eEVBQU04T0FBRE9GUUFBREJJQUFMTVJBQUNsRVFBQVlSQUFBRElYQUFDN0V3QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFQkFnRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFBQUFBQUFBQUFBQUFBQUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBZ01DQWdJQ0FnQUFBZ0lBQWdJQUFnSUNBZ0lDQWdJQ0FnQUVBQUFBQUFBQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdBQUFBSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBQUlBQWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFJQUFnSUNBZ0lBQUFJQ0FBSUNBQUlDQWdJQ0FnSUNBZ0lBQXdBRUFBQUFBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFBQUFDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdBQ0FBSUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJzYjNObFpXVndMV0ZzYVhabEFBQUFBQUFBQUFBQUFBQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQUFBQUFBQUFBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUVCQVFFQkFRRUJBUUVCQWdFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRmphSFZ1YTJWa0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQVFBQkFRRUJBUUFBQVFFQUFRRUFBUUVCQVFFQkFRRUJBUUFBQUFBQUFBQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUFBQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFFQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBR1ZqZEdsdmJtVnVkQzFzWlc1bmRHaHZibkp2ZUhrdFkyOXVibVZqZEdsdmJnQUFBQUFBQUFBQUFBQUFBQUFBQUhKaGJuTm1aWEl0Wlc1amIyUnBibWR3WjNKaFpHVU5DZzBLRFFwVFRRMEtEUXBVVkZBdlEwVXZWRk5RTHdBQUFBQUFBQUFBQUFBQUFBRUNBQUVEQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQUFBQUFBQUFBQUFCQWdBQkF3QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUJBUVVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBQUFBQUFBQUFBQUFRQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFFQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFBQUFBQUFBQUFBQUFCQUFBQ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUF3UUFBQVFFQkFRRUJBUUVCQVFFQlFRRUJBUUVCQVFFQkFRRUJBQUVBQVlIQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQUFRQUJBQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBQUFBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBZ0FBQUFBQUFBTURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREFBQUFBQUFBQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFBQUFBQUFBQUFBQUFnQUFBQUFDQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFEQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd0FBQUFBQUFBTURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUU1UFZVNURSVVZEUzA5VlZFNUZRMVJGVkVWRFVrbENSVXhWVTBoRlZFVkJSRk5GUVZKRFNGSkhSVU5VU1ZaSlZGbE1SVTVFUVZKV1JVOVVTVVpaVUZSSlQwNVRRMGhUUlVGWlUxUkJWRU5JUjBWUFVrUkpVa1ZEVkU5U1ZGSkRTRkJCVWtGTlJWUkZVbFZTUTBWQ1UwTlNTVUpGUVZKRVQxZE9RVU5GU1U1RVRrdERTMVZDVTBOU1NVSkZTRlJVVUM5QlJGUlFMdz09J1xuIiwKICAgICIvLyBAdHMtY2hlY2tcblxuJ3VzZSBzdHJpY3QnXG5cbi8qIGdsb2JhbCBXZWJBc3NlbWJseSAqL1xuXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgbmV0ID0gcmVxdWlyZSgnbmV0JylcbmNvbnN0IGh0dHAgPSByZXF1aXJlKCdodHRwJylcbmNvbnN0IHsgcGlwZWxpbmUgfSA9IHJlcXVpcmUoJ3N0cmVhbScpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi9jb3JlL3V0aWwnKVxuY29uc3QgdGltZXJzID0gcmVxdWlyZSgnLi90aW1lcnMnKVxuY29uc3QgUmVxdWVzdCA9IHJlcXVpcmUoJy4vY29yZS9yZXF1ZXN0JylcbmNvbnN0IERpc3BhdGNoZXJCYXNlID0gcmVxdWlyZSgnLi9kaXNwYXRjaGVyLWJhc2UnKVxuY29uc3Qge1xuICBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IsXG4gIFJlc3BvbnNlQ29udGVudExlbmd0aE1pc21hdGNoRXJyb3IsXG4gIEludmFsaWRBcmd1bWVudEVycm9yLFxuICBSZXF1ZXN0QWJvcnRlZEVycm9yLFxuICBIZWFkZXJzVGltZW91dEVycm9yLFxuICBIZWFkZXJzT3ZlcmZsb3dFcnJvcixcbiAgU29ja2V0RXJyb3IsXG4gIEluZm9ybWF0aW9uYWxFcnJvcixcbiAgQm9keVRpbWVvdXRFcnJvcixcbiAgSFRUUFBhcnNlckVycm9yLFxuICBSZXNwb25zZUV4Y2VlZGVkTWF4U2l6ZUVycm9yLFxuICBDbGllbnREZXN0cm95ZWRFcnJvclxufSA9IHJlcXVpcmUoJy4vY29yZS9lcnJvcnMnKVxuY29uc3QgYnVpbGRDb25uZWN0b3IgPSByZXF1aXJlKCcuL2NvcmUvY29ubmVjdCcpXG5jb25zdCB7XG4gIGtVcmwsXG4gIGtSZXNldCxcbiAga1NlcnZlck5hbWUsXG4gIGtDbGllbnQsXG4gIGtCdXN5LFxuICBrUGFyc2VyLFxuICBrQ29ubmVjdCxcbiAga0Jsb2NraW5nLFxuICBrUmVzdW1pbmcsXG4gIGtSdW5uaW5nLFxuICBrUGVuZGluZyxcbiAga1NpemUsXG4gIGtXcml0aW5nLFxuICBrUXVldWUsXG4gIGtDb25uZWN0ZWQsXG4gIGtDb25uZWN0aW5nLFxuICBrTmVlZERyYWluLFxuICBrTm9SZWYsXG4gIGtLZWVwQWxpdmVEZWZhdWx0VGltZW91dCxcbiAga0hvc3RIZWFkZXIsXG4gIGtQZW5kaW5nSWR4LFxuICBrUnVubmluZ0lkeCxcbiAga0Vycm9yLFxuICBrUGlwZWxpbmluZyxcbiAga1NvY2tldCxcbiAga0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZSxcbiAga01heEhlYWRlcnNTaXplLFxuICBrS2VlcEFsaXZlTWF4VGltZW91dCxcbiAga0tlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGQsXG4gIGtIZWFkZXJzVGltZW91dCxcbiAga0JvZHlUaW1lb3V0LFxuICBrU3RyaWN0Q29udGVudExlbmd0aCxcbiAga0Nvbm5lY3RvcixcbiAga01heFJlZGlyZWN0aW9ucyxcbiAga01heFJlcXVlc3RzLFxuICBrQ291bnRlcixcbiAga0Nsb3NlLFxuICBrRGVzdHJveSxcbiAga0Rpc3BhdGNoLFxuICBrSW50ZXJjZXB0b3JzLFxuICBrTG9jYWxBZGRyZXNzLFxuICBrTWF4UmVzcG9uc2VTaXplLFxuICBrSFRUUENvbm5WZXJzaW9uLFxuICAvLyBIVFRQMlxuICBrSG9zdCxcbiAga0hUVFAyU2Vzc2lvbixcbiAga0hUVFAyU2Vzc2lvblN0YXRlLFxuICBrSFRUUDJCdWlsZFJlcXVlc3QsXG4gIGtIVFRQMkNvcHlIZWFkZXJzLFxuICBrSFRUUDFCdWlsZFJlcXVlc3Rcbn0gPSByZXF1aXJlKCcuL2NvcmUvc3ltYm9scycpXG5cbi8qKiBAdHlwZSB7aW1wb3J0KCdodHRwMicpfSAqL1xubGV0IGh0dHAyXG50cnkge1xuICBodHRwMiA9IHJlcXVpcmUoJ2h0dHAyJylcbn0gY2F0Y2gge1xuICAvLyBAdHMtaWdub3JlXG4gIGh0dHAyID0geyBjb25zdGFudHM6IHt9IH1cbn1cblxuY29uc3Qge1xuICBjb25zdGFudHM6IHtcbiAgICBIVFRQMl9IRUFERVJfQVVUSE9SSVRZLFxuICAgIEhUVFAyX0hFQURFUl9NRVRIT0QsXG4gICAgSFRUUDJfSEVBREVSX1BBVEgsXG4gICAgSFRUUDJfSEVBREVSX1NDSEVNRSxcbiAgICBIVFRQMl9IRUFERVJfQ09OVEVOVF9MRU5HVEgsXG4gICAgSFRUUDJfSEVBREVSX0VYUEVDVCxcbiAgICBIVFRQMl9IRUFERVJfU1RBVFVTXG4gIH1cbn0gPSBodHRwMlxuXG4vLyBFeHBlcmltZW50YWxcbmxldCBoMkV4cGVyaW1lbnRhbFdhcm5lZCA9IGZhbHNlXG5cbmNvbnN0IEZhc3RCdWZmZXIgPSBCdWZmZXJbU3ltYm9sLnNwZWNpZXNdXG5cbmNvbnN0IGtDbG9zZWRSZXNvbHZlID0gU3ltYm9sKCdrQ2xvc2VkUmVzb2x2ZScpXG5cbmNvbnN0IGNoYW5uZWxzID0ge31cblxudHJ5IHtcbiAgY29uc3QgZGlhZ25vc3RpY3NDaGFubmVsID0gcmVxdWlyZSgnZGlhZ25vc3RpY3NfY2hhbm5lbCcpXG4gIGNoYW5uZWxzLnNlbmRIZWFkZXJzID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpjbGllbnQ6c2VuZEhlYWRlcnMnKVxuICBjaGFubmVscy5iZWZvcmVDb25uZWN0ID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpjbGllbnQ6YmVmb3JlQ29ubmVjdCcpXG4gIGNoYW5uZWxzLmNvbm5lY3RFcnJvciA9IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6Y2xpZW50OmNvbm5lY3RFcnJvcicpXG4gIGNoYW5uZWxzLmNvbm5lY3RlZCA9IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6Y2xpZW50OmNvbm5lY3RlZCcpXG59IGNhdGNoIHtcbiAgY2hhbm5lbHMuc2VuZEhlYWRlcnMgPSB7IGhhc1N1YnNjcmliZXJzOiBmYWxzZSB9XG4gIGNoYW5uZWxzLmJlZm9yZUNvbm5lY3QgPSB7IGhhc1N1YnNjcmliZXJzOiBmYWxzZSB9XG4gIGNoYW5uZWxzLmNvbm5lY3RFcnJvciA9IHsgaGFzU3Vic2NyaWJlcnM6IGZhbHNlIH1cbiAgY2hhbm5lbHMuY29ubmVjdGVkID0geyBoYXNTdWJzY3JpYmVyczogZmFsc2UgfVxufVxuXG4vKipcbiAqIEB0eXBlIHtpbXBvcnQoJy4uL3R5cGVzL2NsaWVudCcpLmRlZmF1bHR9XG4gKi9cbmNsYXNzIENsaWVudCBleHRlbmRzIERpc3BhdGNoZXJCYXNlIHtcbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfFVSTH0gdXJsXG4gICAqIEBwYXJhbSB7aW1wb3J0KCcuLi90eXBlcy9jbGllbnQnKS5DbGllbnQuT3B0aW9uc30gb3B0aW9uc1xuICAgKi9cbiAgY29uc3RydWN0b3IgKHVybCwge1xuICAgIGludGVyY2VwdG9ycyxcbiAgICBtYXhIZWFkZXJTaXplLFxuICAgIGhlYWRlcnNUaW1lb3V0LFxuICAgIHNvY2tldFRpbWVvdXQsXG4gICAgcmVxdWVzdFRpbWVvdXQsXG4gICAgY29ubmVjdFRpbWVvdXQsXG4gICAgYm9keVRpbWVvdXQsXG4gICAgaWRsZVRpbWVvdXQsXG4gICAga2VlcEFsaXZlLFxuICAgIGtlZXBBbGl2ZVRpbWVvdXQsXG4gICAgbWF4S2VlcEFsaXZlVGltZW91dCxcbiAgICBrZWVwQWxpdmVNYXhUaW1lb3V0LFxuICAgIGtlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGQsXG4gICAgc29ja2V0UGF0aCxcbiAgICBwaXBlbGluaW5nLFxuICAgIHRscyxcbiAgICBzdHJpY3RDb250ZW50TGVuZ3RoLFxuICAgIG1heENhY2hlZFNlc3Npb25zLFxuICAgIG1heFJlZGlyZWN0aW9ucyxcbiAgICBjb25uZWN0LFxuICAgIG1heFJlcXVlc3RzUGVyQ2xpZW50LFxuICAgIGxvY2FsQWRkcmVzcyxcbiAgICBtYXhSZXNwb25zZVNpemUsXG4gICAgYXV0b1NlbGVjdEZhbWlseSxcbiAgICBhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQsXG4gICAgLy8gaDJcbiAgICBhbGxvd0gyLFxuICAgIG1heENvbmN1cnJlbnRTdHJlYW1zXG4gIH0gPSB7fSkge1xuICAgIHN1cGVyKClcblxuICAgIGlmIChrZWVwQWxpdmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCd1bnN1cHBvcnRlZCBrZWVwQWxpdmUsIHVzZSBwaXBlbGluaW5nPTAgaW5zdGVhZCcpXG4gICAgfVxuXG4gICAgaWYgKHNvY2tldFRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCd1bnN1cHBvcnRlZCBzb2NrZXRUaW1lb3V0LCB1c2UgaGVhZGVyc1RpbWVvdXQgJiBib2R5VGltZW91dCBpbnN0ZWFkJylcbiAgICB9XG5cbiAgICBpZiAocmVxdWVzdFRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCd1bnN1cHBvcnRlZCByZXF1ZXN0VGltZW91dCwgdXNlIGhlYWRlcnNUaW1lb3V0ICYgYm9keVRpbWVvdXQgaW5zdGVhZCcpXG4gICAgfVxuXG4gICAgaWYgKGlkbGVUaW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndW5zdXBwb3J0ZWQgaWRsZVRpbWVvdXQsIHVzZSBrZWVwQWxpdmVUaW1lb3V0IGluc3RlYWQnKVxuICAgIH1cblxuICAgIGlmIChtYXhLZWVwQWxpdmVUaW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndW5zdXBwb3J0ZWQgbWF4S2VlcEFsaXZlVGltZW91dCwgdXNlIGtlZXBBbGl2ZU1heFRpbWVvdXQgaW5zdGVhZCcpXG4gICAgfVxuXG4gICAgaWYgKG1heEhlYWRlclNpemUgIT0gbnVsbCAmJiAhTnVtYmVyLmlzRmluaXRlKG1heEhlYWRlclNpemUpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgbWF4SGVhZGVyU2l6ZScpXG4gICAgfVxuXG4gICAgaWYgKHNvY2tldFBhdGggIT0gbnVsbCAmJiB0eXBlb2Ygc29ja2V0UGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBzb2NrZXRQYXRoJylcbiAgICB9XG5cbiAgICBpZiAoY29ubmVjdFRpbWVvdXQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0Zpbml0ZShjb25uZWN0VGltZW91dCkgfHwgY29ubmVjdFRpbWVvdXQgPCAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGNvbm5lY3RUaW1lb3V0JylcbiAgICB9XG5cbiAgICBpZiAoa2VlcEFsaXZlVGltZW91dCAhPSBudWxsICYmICghTnVtYmVyLmlzRmluaXRlKGtlZXBBbGl2ZVRpbWVvdXQpIHx8IGtlZXBBbGl2ZVRpbWVvdXQgPD0gMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBrZWVwQWxpdmVUaW1lb3V0JylcbiAgICB9XG5cbiAgICBpZiAoa2VlcEFsaXZlTWF4VGltZW91dCAhPSBudWxsICYmICghTnVtYmVyLmlzRmluaXRlKGtlZXBBbGl2ZU1heFRpbWVvdXQpIHx8IGtlZXBBbGl2ZU1heFRpbWVvdXQgPD0gMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBrZWVwQWxpdmVNYXhUaW1lb3V0JylcbiAgICB9XG5cbiAgICBpZiAoa2VlcEFsaXZlVGltZW91dFRocmVzaG9sZCAhPSBudWxsICYmICFOdW1iZXIuaXNGaW5pdGUoa2VlcEFsaXZlVGltZW91dFRocmVzaG9sZCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBrZWVwQWxpdmVUaW1lb3V0VGhyZXNob2xkJylcbiAgICB9XG5cbiAgICBpZiAoaGVhZGVyc1RpbWVvdXQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0ludGVnZXIoaGVhZGVyc1RpbWVvdXQpIHx8IGhlYWRlcnNUaW1lb3V0IDwgMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaGVhZGVyc1RpbWVvdXQgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgb3IgemVybycpXG4gICAgfVxuXG4gICAgaWYgKGJvZHlUaW1lb3V0ICE9IG51bGwgJiYgKCFOdW1iZXIuaXNJbnRlZ2VyKGJvZHlUaW1lb3V0KSB8fCBib2R5VGltZW91dCA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2JvZHlUaW1lb3V0IG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIG9yIHplcm8nKVxuICAgIH1cblxuICAgIGlmIChjb25uZWN0ICE9IG51bGwgJiYgdHlwZW9mIGNvbm5lY3QgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGNvbm5lY3QgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2Nvbm5lY3QgbXVzdCBiZSBhIGZ1bmN0aW9uIG9yIGFuIG9iamVjdCcpXG4gICAgfVxuXG4gICAgaWYgKG1heFJlZGlyZWN0aW9ucyAhPSBudWxsICYmICghTnVtYmVyLmlzSW50ZWdlcihtYXhSZWRpcmVjdGlvbnMpIHx8IG1heFJlZGlyZWN0aW9ucyA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ21heFJlZGlyZWN0aW9ucyBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJylcbiAgICB9XG5cbiAgICBpZiAobWF4UmVxdWVzdHNQZXJDbGllbnQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0ludGVnZXIobWF4UmVxdWVzdHNQZXJDbGllbnQpIHx8IG1heFJlcXVlc3RzUGVyQ2xpZW50IDwgMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignbWF4UmVxdWVzdHNQZXJDbGllbnQgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpXG4gICAgfVxuXG4gICAgaWYgKGxvY2FsQWRkcmVzcyAhPSBudWxsICYmICh0eXBlb2YgbG9jYWxBZGRyZXNzICE9PSAnc3RyaW5nJyB8fCBuZXQuaXNJUChsb2NhbEFkZHJlc3MpID09PSAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdsb2NhbEFkZHJlc3MgbXVzdCBiZSB2YWxpZCBzdHJpbmcgSVAgYWRkcmVzcycpXG4gICAgfVxuXG4gICAgaWYgKG1heFJlc3BvbnNlU2l6ZSAhPSBudWxsICYmICghTnVtYmVyLmlzSW50ZWdlcihtYXhSZXNwb25zZVNpemUpIHx8IG1heFJlc3BvbnNlU2l6ZSA8IC0xKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdtYXhSZXNwb25zZVNpemUgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgYXV0b1NlbGVjdEZhbWlseUF0dGVtcHRUaW1lb3V0ICE9IG51bGwgJiZcbiAgICAgICghTnVtYmVyLmlzSW50ZWdlcihhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQpIHx8IGF1dG9TZWxlY3RGYW1pbHlBdHRlbXB0VGltZW91dCA8IC0xKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpXG4gICAgfVxuXG4gICAgLy8gaDJcbiAgICBpZiAoYWxsb3dIMiAhPSBudWxsICYmIHR5cGVvZiBhbGxvd0gyICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignYWxsb3dIMiBtdXN0IGJlIGEgdmFsaWQgYm9vbGVhbiB2YWx1ZScpXG4gICAgfVxuXG4gICAgaWYgKG1heENvbmN1cnJlbnRTdHJlYW1zICE9IG51bGwgJiYgKHR5cGVvZiBtYXhDb25jdXJyZW50U3RyZWFtcyAhPT0gJ251bWJlcicgfHwgbWF4Q29uY3VycmVudFN0cmVhbXMgPCAxKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdtYXhDb25jdXJyZW50U3RyZWFtcyBtdXN0IGJlIGEgcG9zc2l0aXZlIGludGVnZXIsIGdyZWF0ZXIgdGhhbiAwJylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNvbm5lY3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbm5lY3QgPSBidWlsZENvbm5lY3Rvcih7XG4gICAgICAgIC4uLnRscyxcbiAgICAgICAgbWF4Q2FjaGVkU2Vzc2lvbnMsXG4gICAgICAgIGFsbG93SDIsXG4gICAgICAgIHNvY2tldFBhdGgsXG4gICAgICAgIHRpbWVvdXQ6IGNvbm5lY3RUaW1lb3V0LFxuICAgICAgICAuLi4odXRpbC5ub2RlSGFzQXV0b1NlbGVjdEZhbWlseSAmJiBhdXRvU2VsZWN0RmFtaWx5ID8geyBhdXRvU2VsZWN0RmFtaWx5LCBhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQgfSA6IHVuZGVmaW5lZCksXG4gICAgICAgIC4uLmNvbm5lY3RcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgdGhpc1trSW50ZXJjZXB0b3JzXSA9IGludGVyY2VwdG9ycyAmJiBpbnRlcmNlcHRvcnMuQ2xpZW50ICYmIEFycmF5LmlzQXJyYXkoaW50ZXJjZXB0b3JzLkNsaWVudClcbiAgICAgID8gaW50ZXJjZXB0b3JzLkNsaWVudFxuICAgICAgOiBbY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvcih7IG1heFJlZGlyZWN0aW9ucyB9KV1cbiAgICB0aGlzW2tVcmxdID0gdXRpbC5wYXJzZU9yaWdpbih1cmwpXG4gICAgdGhpc1trQ29ubmVjdG9yXSA9IGNvbm5lY3RcbiAgICB0aGlzW2tTb2NrZXRdID0gbnVsbFxuICAgIHRoaXNba1BpcGVsaW5pbmddID0gcGlwZWxpbmluZyAhPSBudWxsID8gcGlwZWxpbmluZyA6IDFcbiAgICB0aGlzW2tNYXhIZWFkZXJzU2l6ZV0gPSBtYXhIZWFkZXJTaXplIHx8IGh0dHAubWF4SGVhZGVyU2l6ZVxuICAgIHRoaXNba0tlZXBBbGl2ZURlZmF1bHRUaW1lb3V0XSA9IGtlZXBBbGl2ZVRpbWVvdXQgPT0gbnVsbCA/IDRlMyA6IGtlZXBBbGl2ZVRpbWVvdXRcbiAgICB0aGlzW2tLZWVwQWxpdmVNYXhUaW1lb3V0XSA9IGtlZXBBbGl2ZU1heFRpbWVvdXQgPT0gbnVsbCA/IDYwMGUzIDoga2VlcEFsaXZlTWF4VGltZW91dFxuICAgIHRoaXNba0tlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGRdID0ga2VlcEFsaXZlVGltZW91dFRocmVzaG9sZCA9PSBudWxsID8gMWUzIDoga2VlcEFsaXZlVGltZW91dFRocmVzaG9sZFxuICAgIHRoaXNba0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZV0gPSB0aGlzW2tLZWVwQWxpdmVEZWZhdWx0VGltZW91dF1cbiAgICB0aGlzW2tTZXJ2ZXJOYW1lXSA9IG51bGxcbiAgICB0aGlzW2tMb2NhbEFkZHJlc3NdID0gbG9jYWxBZGRyZXNzICE9IG51bGwgPyBsb2NhbEFkZHJlc3MgOiBudWxsXG4gICAgdGhpc1trUmVzdW1pbmddID0gMCAvLyAwLCBpZGxlLCAxLCBzY2hlZHVsZWQsIDIgcmVzdW1pbmdcbiAgICB0aGlzW2tOZWVkRHJhaW5dID0gMCAvLyAwLCBpZGxlLCAxLCBzY2hlZHVsZWQsIDIgcmVzdW1pbmdcbiAgICB0aGlzW2tIb3N0SGVhZGVyXSA9IGBob3N0OiAke3RoaXNba1VybF0uaG9zdG5hbWV9JHt0aGlzW2tVcmxdLnBvcnQgPyBgOiR7dGhpc1trVXJsXS5wb3J0fWAgOiAnJ31cXHJcXG5gXG4gICAgdGhpc1trQm9keVRpbWVvdXRdID0gYm9keVRpbWVvdXQgIT0gbnVsbCA/IGJvZHlUaW1lb3V0IDogMzAwZTNcbiAgICB0aGlzW2tIZWFkZXJzVGltZW91dF0gPSBoZWFkZXJzVGltZW91dCAhPSBudWxsID8gaGVhZGVyc1RpbWVvdXQgOiAzMDBlM1xuICAgIHRoaXNba1N0cmljdENvbnRlbnRMZW5ndGhdID0gc3RyaWN0Q29udGVudExlbmd0aCA9PSBudWxsID8gdHJ1ZSA6IHN0cmljdENvbnRlbnRMZW5ndGhcbiAgICB0aGlzW2tNYXhSZWRpcmVjdGlvbnNdID0gbWF4UmVkaXJlY3Rpb25zXG4gICAgdGhpc1trTWF4UmVxdWVzdHNdID0gbWF4UmVxdWVzdHNQZXJDbGllbnRcbiAgICB0aGlzW2tDbG9zZWRSZXNvbHZlXSA9IG51bGxcbiAgICB0aGlzW2tNYXhSZXNwb25zZVNpemVdID0gbWF4UmVzcG9uc2VTaXplID4gLTEgPyBtYXhSZXNwb25zZVNpemUgOiAtMVxuICAgIHRoaXNba0hUVFBDb25uVmVyc2lvbl0gPSAnaDEnXG5cbiAgICAvLyBIVFRQLzJcbiAgICB0aGlzW2tIVFRQMlNlc3Npb25dID0gbnVsbFxuICAgIHRoaXNba0hUVFAyU2Vzc2lvblN0YXRlXSA9ICFhbGxvd0gyXG4gICAgICA/IG51bGxcbiAgICAgIDoge1xuICAgICAgICAvLyBzdHJlYW1zOiBudWxsLCAvLyBGaXhlZCBxdWV1ZSBvZiBzdHJlYW1zIC0gRm9yIGZ1dHVyZSBzdXBwb3J0IG9mIGBwdXNoYFxuICAgICAgICAgIG9wZW5TdHJlYW1zOiAwLCAvLyBLZWVwIHRyYWNrIG9mIHRoZW0gdG8gZGVjaWRlIHdldGhlciBvciBub3QgdW5yZWYgdGhlIHNlc3Npb25cbiAgICAgICAgICBtYXhDb25jdXJyZW50U3RyZWFtczogbWF4Q29uY3VycmVudFN0cmVhbXMgIT0gbnVsbCA/IG1heENvbmN1cnJlbnRTdHJlYW1zIDogMTAwIC8vIE1heCBwZWVyQ29uY3VycmVudFN0cmVhbXMgZm9yIGEgTm9kZSBoMiBzZXJ2ZXJcbiAgICAgICAgfVxuICAgIHRoaXNba0hvc3RdID0gYCR7dGhpc1trVXJsXS5ob3N0bmFtZX0ke3RoaXNba1VybF0ucG9ydCA/IGA6JHt0aGlzW2tVcmxdLnBvcnR9YCA6ICcnfWBcblxuICAgIC8vIGtRdWV1ZSBpcyBidWlsdCB1cCBvZiAzIHNlY3Rpb25zIHNlcGFyYXRlZCBieVxuICAgIC8vIHRoZSBrUnVubmluZ0lkeCBhbmQga1BlbmRpbmdJZHggaW5kaWNlcy5cbiAgICAvLyB8ICAgY29tcGxldGUgICB8ICAgcnVubmluZyAgIHwgICBwZW5kaW5nICAgfFxuICAgIC8vICAgICAgICAgICAgICAgIF4ga1J1bm5pbmdJZHggXiBrUGVuZGluZ0lkeCBeIGtRdWV1ZS5sZW5ndGhcbiAgICAvLyBrUnVubmluZ0lkeCBwb2ludHMgdG8gdGhlIGZpcnN0IHJ1bm5pbmcgZWxlbWVudC5cbiAgICAvLyBrUGVuZGluZ0lkeCBwb2ludHMgdG8gdGhlIGZpcnN0IHBlbmRpbmcgZWxlbWVudC5cbiAgICAvLyBUaGlzIGltcGxlbWVudHMgYSBmYXN0IHF1ZXVlIHdpdGggYW4gYW1vcnRpemVkXG4gICAgLy8gdGltZSBvZiBPKDEpLlxuXG4gICAgdGhpc1trUXVldWVdID0gW11cbiAgICB0aGlzW2tSdW5uaW5nSWR4XSA9IDBcbiAgICB0aGlzW2tQZW5kaW5nSWR4XSA9IDBcbiAgfVxuXG4gIGdldCBwaXBlbGluaW5nICgpIHtcbiAgICByZXR1cm4gdGhpc1trUGlwZWxpbmluZ11cbiAgfVxuXG4gIHNldCBwaXBlbGluaW5nICh2YWx1ZSkge1xuICAgIHRoaXNba1BpcGVsaW5pbmddID0gdmFsdWVcbiAgICByZXN1bWUodGhpcywgdHJ1ZSlcbiAgfVxuXG4gIGdldCBba1BlbmRpbmddICgpIHtcbiAgICByZXR1cm4gdGhpc1trUXVldWVdLmxlbmd0aCAtIHRoaXNba1BlbmRpbmdJZHhdXG4gIH1cblxuICBnZXQgW2tSdW5uaW5nXSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1BlbmRpbmdJZHhdIC0gdGhpc1trUnVubmluZ0lkeF1cbiAgfVxuXG4gIGdldCBba1NpemVdICgpIHtcbiAgICByZXR1cm4gdGhpc1trUXVldWVdLmxlbmd0aCAtIHRoaXNba1J1bm5pbmdJZHhdXG4gIH1cblxuICBnZXQgW2tDb25uZWN0ZWRdICgpIHtcbiAgICByZXR1cm4gISF0aGlzW2tTb2NrZXRdICYmICF0aGlzW2tDb25uZWN0aW5nXSAmJiAhdGhpc1trU29ja2V0XS5kZXN0cm95ZWRcbiAgfVxuXG4gIGdldCBba0J1c3ldICgpIHtcbiAgICBjb25zdCBzb2NrZXQgPSB0aGlzW2tTb2NrZXRdXG4gICAgcmV0dXJuIChcbiAgICAgIChzb2NrZXQgJiYgKHNvY2tldFtrUmVzZXRdIHx8IHNvY2tldFtrV3JpdGluZ10gfHwgc29ja2V0W2tCbG9ja2luZ10pKSB8fFxuICAgICAgKHRoaXNba1NpemVdID49ICh0aGlzW2tQaXBlbGluaW5nXSB8fCAxKSkgfHxcbiAgICAgIHRoaXNba1BlbmRpbmddID4gMFxuICAgIClcbiAgfVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZTogb25seSB1c2VkIGZvciB0ZXN0ICovXG4gIFtrQ29ubmVjdF0gKGNiKSB7XG4gICAgY29ubmVjdCh0aGlzKVxuICAgIHRoaXMub25jZSgnY29ubmVjdCcsIGNiKVxuICB9XG5cbiAgW2tEaXNwYXRjaF0gKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBjb25zdCBvcmlnaW4gPSBvcHRzLm9yaWdpbiB8fCB0aGlzW2tVcmxdLm9yaWdpblxuXG4gICAgY29uc3QgcmVxdWVzdCA9IHRoaXNba0hUVFBDb25uVmVyc2lvbl0gPT09ICdoMidcbiAgICAgID8gUmVxdWVzdFtrSFRUUDJCdWlsZFJlcXVlc3RdKG9yaWdpbiwgb3B0cywgaGFuZGxlcilcbiAgICAgIDogUmVxdWVzdFtrSFRUUDFCdWlsZFJlcXVlc3RdKG9yaWdpbiwgb3B0cywgaGFuZGxlcilcblxuICAgIHRoaXNba1F1ZXVlXS5wdXNoKHJlcXVlc3QpXG4gICAgaWYgKHRoaXNba1Jlc3VtaW5nXSkge1xuICAgICAgLy8gRG8gbm90aGluZy5cbiAgICB9IGVsc2UgaWYgKHV0aWwuYm9keUxlbmd0aChyZXF1ZXN0LmJvZHkpID09IG51bGwgJiYgdXRpbC5pc0l0ZXJhYmxlKHJlcXVlc3QuYm9keSkpIHtcbiAgICAgIC8vIFdhaXQgYSB0aWNrIGluIGNhc2Ugc3RyZWFtL2l0ZXJhdG9yIGlzIGVuZGVkIGluIHRoZSBzYW1lIHRpY2suXG4gICAgICB0aGlzW2tSZXN1bWluZ10gPSAxXG4gICAgICBwcm9jZXNzLm5leHRUaWNrKHJlc3VtZSwgdGhpcylcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdW1lKHRoaXMsIHRydWUpXG4gICAgfVxuXG4gICAgaWYgKHRoaXNba1Jlc3VtaW5nXSAmJiB0aGlzW2tOZWVkRHJhaW5dICE9PSAyICYmIHRoaXNba0J1c3ldKSB7XG4gICAgICB0aGlzW2tOZWVkRHJhaW5dID0gMlxuICAgIH1cblxuICAgIHJldHVybiB0aGlzW2tOZWVkRHJhaW5dIDwgMlxuICB9XG5cbiAgYXN5bmMgW2tDbG9zZV0gKCkge1xuICAgIC8vIFRPRE86IGZvciBIMiB3ZSBuZWVkIHRvIGdyYWNlZnVsbHkgZmx1c2ggdGhlIHJlbWFpbmluZyBlbnF1ZXVlZFxuICAgIC8vIHJlcXVlc3QgYW5kIGNsb3NlIGVhY2ggc3RyZWFtLlxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgaWYgKCF0aGlzW2tTaXplXSkge1xuICAgICAgICByZXNvbHZlKG51bGwpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzW2tDbG9zZWRSZXNvbHZlXSA9IHJlc29sdmVcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgYXN5bmMgW2tEZXN0cm95XSAoZXJyKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBjb25zdCByZXF1ZXN0cyA9IHRoaXNba1F1ZXVlXS5zcGxpY2UodGhpc1trUGVuZGluZ0lkeF0pXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcXVlc3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSByZXF1ZXN0c1tpXVxuICAgICAgICBlcnJvclJlcXVlc3QodGhpcywgcmVxdWVzdCwgZXJyKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBjYWxsYmFjayA9ICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXNba0Nsb3NlZFJlc29sdmVdKSB7XG4gICAgICAgICAgLy8gVE9ETyAoZml4KTogU2hvdWxkIHdlIGVycm9yIGhlcmUgd2l0aCBDbGllbnREZXN0cm95ZWRFcnJvcj9cbiAgICAgICAgICB0aGlzW2tDbG9zZWRSZXNvbHZlXSgpXG4gICAgICAgICAgdGhpc1trQ2xvc2VkUmVzb2x2ZV0gPSBudWxsXG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZSgpXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzW2tIVFRQMlNlc3Npb25dICE9IG51bGwpIHtcbiAgICAgICAgdXRpbC5kZXN0cm95KHRoaXNba0hUVFAyU2Vzc2lvbl0sIGVycilcbiAgICAgICAgdGhpc1trSFRUUDJTZXNzaW9uXSA9IG51bGxcbiAgICAgICAgdGhpc1trSFRUUDJTZXNzaW9uU3RhdGVdID0gbnVsbFxuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXNba1NvY2tldF0pIHtcbiAgICAgICAgcXVldWVNaWNyb3Rhc2soY2FsbGJhY2spXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1dGlsLmRlc3Ryb3kodGhpc1trU29ja2V0XS5vbignY2xvc2UnLCBjYWxsYmFjayksIGVycilcbiAgICAgIH1cblxuICAgICAgcmVzdW1lKHRoaXMpXG4gICAgfSlcbiAgfVxufVxuXG5mdW5jdGlvbiBvbkh0dHAyU2Vzc2lvbkVycm9yIChlcnIpIHtcbiAgYXNzZXJ0KGVyci5jb2RlICE9PSAnRVJSX1RMU19DRVJUX0FMVE5BTUVfSU5WQUxJRCcpXG5cbiAgdGhpc1trU29ja2V0XVtrRXJyb3JdID0gZXJyXG5cbiAgb25FcnJvcih0aGlzW2tDbGllbnRdLCBlcnIpXG59XG5cbmZ1bmN0aW9uIG9uSHR0cDJGcmFtZUVycm9yICh0eXBlLCBjb2RlLCBpZCkge1xuICBjb25zdCBlcnIgPSBuZXcgSW5mb3JtYXRpb25hbEVycm9yKGBIVFRQLzI6IFwiZnJhbWVFcnJvclwiIHJlY2VpdmVkIC0gdHlwZSAke3R5cGV9LCBjb2RlICR7Y29kZX1gKVxuXG4gIGlmIChpZCA9PT0gMCkge1xuICAgIHRoaXNba1NvY2tldF1ba0Vycm9yXSA9IGVyclxuICAgIG9uRXJyb3IodGhpc1trQ2xpZW50XSwgZXJyKVxuICB9XG59XG5cbmZ1bmN0aW9uIG9uSHR0cDJTZXNzaW9uRW5kICgpIHtcbiAgdXRpbC5kZXN0cm95KHRoaXMsIG5ldyBTb2NrZXRFcnJvcignb3RoZXIgc2lkZSBjbG9zZWQnKSlcbiAgdXRpbC5kZXN0cm95KHRoaXNba1NvY2tldF0sIG5ldyBTb2NrZXRFcnJvcignb3RoZXIgc2lkZSBjbG9zZWQnKSlcbn1cblxuZnVuY3Rpb24gb25IVFRQMkdvQXdheSAoY29kZSkge1xuICBjb25zdCBjbGllbnQgPSB0aGlzW2tDbGllbnRdXG4gIGNvbnN0IGVyciA9IG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoYEhUVFAvMjogXCJHT0FXQVlcIiBmcmFtZSByZWNlaXZlZCB3aXRoIGNvZGUgJHtjb2RlfWApXG4gIGNsaWVudFtrU29ja2V0XSA9IG51bGxcbiAgY2xpZW50W2tIVFRQMlNlc3Npb25dID0gbnVsbFxuXG4gIGlmIChjbGllbnQuZGVzdHJveWVkKSB7XG4gICAgYXNzZXJ0KHRoaXNba1BlbmRpbmddID09PSAwKVxuXG4gICAgLy8gRmFpbCBlbnRpcmUgcXVldWUuXG4gICAgY29uc3QgcmVxdWVzdHMgPSBjbGllbnRba1F1ZXVlXS5zcGxpY2UoY2xpZW50W2tSdW5uaW5nSWR4XSlcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcXVlc3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCByZXF1ZXN0ID0gcmVxdWVzdHNbaV1cbiAgICAgIGVycm9yUmVxdWVzdCh0aGlzLCByZXF1ZXN0LCBlcnIpXG4gICAgfVxuICB9IGVsc2UgaWYgKGNsaWVudFtrUnVubmluZ10gPiAwKSB7XG4gICAgLy8gRmFpbCBoZWFkIG9mIHBpcGVsaW5lLlxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdXVxuICAgIGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF0rK10gPSBudWxsXG5cbiAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIpXG4gIH1cblxuICBjbGllbnRba1BlbmRpbmdJZHhdID0gY2xpZW50W2tSdW5uaW5nSWR4XVxuXG4gIGFzc2VydChjbGllbnRba1J1bm5pbmddID09PSAwKVxuXG4gIGNsaWVudC5lbWl0KCdkaXNjb25uZWN0JyxcbiAgICBjbGllbnRba1VybF0sXG4gICAgW2NsaWVudF0sXG4gICAgZXJyXG4gIClcblxuICByZXN1bWUoY2xpZW50KVxufVxuXG5jb25zdCBjb25zdGFudHMgPSByZXF1aXJlKCcuL2xsaHR0cC9jb25zdGFudHMnKVxuY29uc3QgY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvciA9IHJlcXVpcmUoJy4vaW50ZXJjZXB0b3IvcmVkaXJlY3RJbnRlcmNlcHRvcicpXG5jb25zdCBFTVBUWV9CVUYgPSBCdWZmZXIuYWxsb2MoMClcblxuYXN5bmMgZnVuY3Rpb24gbGF6eWxsaHR0cCAoKSB7XG4gIGNvbnN0IGxsaHR0cFdhc21EYXRhID0gcHJvY2Vzcy5lbnYuSkVTVF9XT1JLRVJfSUQgPyByZXF1aXJlKCcuL2xsaHR0cC9sbGh0dHAtd2FzbS5qcycpIDogdW5kZWZpbmVkXG5cbiAgbGV0IG1vZFxuICB0cnkge1xuICAgIG1vZCA9IGF3YWl0IFdlYkFzc2VtYmx5LmNvbXBpbGUoQnVmZmVyLmZyb20ocmVxdWlyZSgnLi9sbGh0dHAvbGxodHRwX3NpbWQtd2FzbS5qcycpLCAnYmFzZTY0JykpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXG4gICAgLy8gV2UgY291bGQgY2hlY2sgaWYgdGhlIGVycm9yIHdhcyBjYXVzZWQgYnkgdGhlIHNpbWQgb3B0aW9uIG5vdFxuICAgIC8vIGJlaW5nIGVuYWJsZWQsIGJ1dCB0aGUgb2NjdXJyaW5nIG9mIHRoaXMgb3RoZXIgZXJyb3JcbiAgICAvLyAqIGh0dHBzOi8vZ2l0aHViLmNvbS9lbXNjcmlwdGVuLWNvcmUvZW1zY3JpcHRlbi9pc3N1ZXMvMTE0OTVcbiAgICAvLyBnb3QgbWUgdG8gcmVtb3ZlIHRoYXQgY2hlY2sgdG8gYXZvaWQgYnJlYWtpbmcgTm9kZSAxMi5cbiAgICBtb2QgPSBhd2FpdCBXZWJBc3NlbWJseS5jb21waWxlKEJ1ZmZlci5mcm9tKGxsaHR0cFdhc21EYXRhIHx8IHJlcXVpcmUoJy4vbGxodHRwL2xsaHR0cC13YXNtLmpzJyksICdiYXNlNjQnKSlcbiAgfVxuXG4gIHJldHVybiBhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShtb2QsIHtcbiAgICBlbnY6IHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIGNhbWVsY2FzZSAqL1xuXG4gICAgICB3YXNtX29uX3VybDogKHAsIGF0LCBsZW4pID0+IHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgcmV0dXJuIDBcbiAgICAgIH0sXG4gICAgICB3YXNtX29uX3N0YXR1czogKHAsIGF0LCBsZW4pID0+IHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGN1cnJlbnRQYXJzZXIucHRyLCBwKVxuICAgICAgICBjb25zdCBzdGFydCA9IGF0IC0gY3VycmVudEJ1ZmZlclB0ciArIGN1cnJlbnRCdWZmZXJSZWYuYnl0ZU9mZnNldFxuICAgICAgICByZXR1cm4gY3VycmVudFBhcnNlci5vblN0YXR1cyhuZXcgRmFzdEJ1ZmZlcihjdXJyZW50QnVmZmVyUmVmLmJ1ZmZlciwgc3RhcnQsIGxlbikpIHx8IDBcbiAgICAgIH0sXG4gICAgICB3YXNtX29uX21lc3NhZ2VfYmVnaW46IChwKSA9PiB7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjdXJyZW50UGFyc2VyLnB0ciwgcClcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRQYXJzZXIub25NZXNzYWdlQmVnaW4oKSB8fCAwXG4gICAgICB9LFxuICAgICAgd2FzbV9vbl9oZWFkZXJfZmllbGQ6IChwLCBhdCwgbGVuKSA9PiB7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjdXJyZW50UGFyc2VyLnB0ciwgcClcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBhdCAtIGN1cnJlbnRCdWZmZXJQdHIgKyBjdXJyZW50QnVmZmVyUmVmLmJ5dGVPZmZzZXRcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRQYXJzZXIub25IZWFkZXJGaWVsZChuZXcgRmFzdEJ1ZmZlcihjdXJyZW50QnVmZmVyUmVmLmJ1ZmZlciwgc3RhcnQsIGxlbikpIHx8IDBcbiAgICAgIH0sXG4gICAgICB3YXNtX29uX2hlYWRlcl92YWx1ZTogKHAsIGF0LCBsZW4pID0+IHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGN1cnJlbnRQYXJzZXIucHRyLCBwKVxuICAgICAgICBjb25zdCBzdGFydCA9IGF0IC0gY3VycmVudEJ1ZmZlclB0ciArIGN1cnJlbnRCdWZmZXJSZWYuYnl0ZU9mZnNldFxuICAgICAgICByZXR1cm4gY3VycmVudFBhcnNlci5vbkhlYWRlclZhbHVlKG5ldyBGYXN0QnVmZmVyKGN1cnJlbnRCdWZmZXJSZWYuYnVmZmVyLCBzdGFydCwgbGVuKSkgfHwgMFxuICAgICAgfSxcbiAgICAgIHdhc21fb25faGVhZGVyc19jb21wbGV0ZTogKHAsIHN0YXR1c0NvZGUsIHVwZ3JhZGUsIHNob3VsZEtlZXBBbGl2ZSkgPT4ge1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY3VycmVudFBhcnNlci5wdHIsIHApXG4gICAgICAgIHJldHVybiBjdXJyZW50UGFyc2VyLm9uSGVhZGVyc0NvbXBsZXRlKHN0YXR1c0NvZGUsIEJvb2xlYW4odXBncmFkZSksIEJvb2xlYW4oc2hvdWxkS2VlcEFsaXZlKSkgfHwgMFxuICAgICAgfSxcbiAgICAgIHdhc21fb25fYm9keTogKHAsIGF0LCBsZW4pID0+IHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGN1cnJlbnRQYXJzZXIucHRyLCBwKVxuICAgICAgICBjb25zdCBzdGFydCA9IGF0IC0gY3VycmVudEJ1ZmZlclB0ciArIGN1cnJlbnRCdWZmZXJSZWYuYnl0ZU9mZnNldFxuICAgICAgICByZXR1cm4gY3VycmVudFBhcnNlci5vbkJvZHkobmV3IEZhc3RCdWZmZXIoY3VycmVudEJ1ZmZlclJlZi5idWZmZXIsIHN0YXJ0LCBsZW4pKSB8fCAwXG4gICAgICB9LFxuICAgICAgd2FzbV9vbl9tZXNzYWdlX2NvbXBsZXRlOiAocCkgPT4ge1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY3VycmVudFBhcnNlci5wdHIsIHApXG4gICAgICAgIHJldHVybiBjdXJyZW50UGFyc2VyLm9uTWVzc2FnZUNvbXBsZXRlKCkgfHwgMFxuICAgICAgfVxuXG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIGNhbWVsY2FzZSAqL1xuICAgIH1cbiAgfSlcbn1cblxubGV0IGxsaHR0cEluc3RhbmNlID0gbnVsbFxubGV0IGxsaHR0cFByb21pc2UgPSBsYXp5bGxodHRwKClcbmxsaHR0cFByb21pc2UuY2F0Y2goKVxuXG5sZXQgY3VycmVudFBhcnNlciA9IG51bGxcbmxldCBjdXJyZW50QnVmZmVyUmVmID0gbnVsbFxubGV0IGN1cnJlbnRCdWZmZXJTaXplID0gMFxubGV0IGN1cnJlbnRCdWZmZXJQdHIgPSBudWxsXG5cbmNvbnN0IFRJTUVPVVRfSEVBREVSUyA9IDFcbmNvbnN0IFRJTUVPVVRfQk9EWSA9IDJcbmNvbnN0IFRJTUVPVVRfSURMRSA9IDNcblxuY2xhc3MgUGFyc2VyIHtcbiAgY29uc3RydWN0b3IgKGNsaWVudCwgc29ja2V0LCB7IGV4cG9ydHMgfSkge1xuICAgIGFzc2VydChOdW1iZXIuaXNGaW5pdGUoY2xpZW50W2tNYXhIZWFkZXJzU2l6ZV0pICYmIGNsaWVudFtrTWF4SGVhZGVyc1NpemVdID4gMClcblxuICAgIHRoaXMubGxodHRwID0gZXhwb3J0c1xuICAgIHRoaXMucHRyID0gdGhpcy5sbGh0dHAubGxodHRwX2FsbG9jKGNvbnN0YW50cy5UWVBFLlJFU1BPTlNFKVxuICAgIHRoaXMuY2xpZW50ID0gY2xpZW50XG4gICAgdGhpcy5zb2NrZXQgPSBzb2NrZXRcbiAgICB0aGlzLnRpbWVvdXQgPSBudWxsXG4gICAgdGhpcy50aW1lb3V0VmFsdWUgPSBudWxsXG4gICAgdGhpcy50aW1lb3V0VHlwZSA9IG51bGxcbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBudWxsXG4gICAgdGhpcy5zdGF0dXNUZXh0ID0gJydcbiAgICB0aGlzLnVwZ3JhZGUgPSBmYWxzZVxuICAgIHRoaXMuaGVhZGVycyA9IFtdXG4gICAgdGhpcy5oZWFkZXJzU2l6ZSA9IDBcbiAgICB0aGlzLmhlYWRlcnNNYXhTaXplID0gY2xpZW50W2tNYXhIZWFkZXJzU2l6ZV1cbiAgICB0aGlzLnNob3VsZEtlZXBBbGl2ZSA9IGZhbHNlXG4gICAgdGhpcy5wYXVzZWQgPSBmYWxzZVxuICAgIHRoaXMucmVzdW1lID0gdGhpcy5yZXN1bWUuYmluZCh0aGlzKVxuXG4gICAgdGhpcy5ieXRlc1JlYWQgPSAwXG5cbiAgICB0aGlzLmtlZXBBbGl2ZSA9ICcnXG4gICAgdGhpcy5jb250ZW50TGVuZ3RoID0gJydcbiAgICB0aGlzLmNvbm5lY3Rpb24gPSAnJ1xuICAgIHRoaXMubWF4UmVzcG9uc2VTaXplID0gY2xpZW50W2tNYXhSZXNwb25zZVNpemVdXG4gIH1cblxuICBzZXRUaW1lb3V0ICh2YWx1ZSwgdHlwZSkge1xuICAgIHRoaXMudGltZW91dFR5cGUgPSB0eXBlXG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLnRpbWVvdXRWYWx1ZSkge1xuICAgICAgdGltZXJzLmNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpXG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgdGhpcy50aW1lb3V0ID0gdGltZXJzLnNldFRpbWVvdXQob25QYXJzZXJUaW1lb3V0LCB2YWx1ZSwgdGhpcylcbiAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIGVsc2U6IG9ubHkgZm9yIGplc3RcbiAgICAgICAgaWYgKHRoaXMudGltZW91dC51bnJlZikge1xuICAgICAgICAgIHRoaXMudGltZW91dC51bnJlZigpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudGltZW91dCA9IG51bGxcbiAgICAgIH1cbiAgICAgIHRoaXMudGltZW91dFZhbHVlID0gdmFsdWVcbiAgICB9IGVsc2UgaWYgKHRoaXMudGltZW91dCkge1xuICAgICAgLy8gaXN0YW5idWwgaWdub3JlIGVsc2U6IG9ubHkgZm9yIGplc3RcbiAgICAgIGlmICh0aGlzLnRpbWVvdXQucmVmcmVzaCkge1xuICAgICAgICB0aGlzLnRpbWVvdXQucmVmcmVzaCgpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmVzdW1lICgpIHtcbiAgICBpZiAodGhpcy5zb2NrZXQuZGVzdHJveWVkIHx8ICF0aGlzLnBhdXNlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgYXNzZXJ0KHRoaXMucHRyICE9IG51bGwpXG4gICAgYXNzZXJ0KGN1cnJlbnRQYXJzZXIgPT0gbnVsbClcblxuICAgIHRoaXMubGxodHRwLmxsaHR0cF9yZXN1bWUodGhpcy5wdHIpXG5cbiAgICBhc3NlcnQodGhpcy50aW1lb3V0VHlwZSA9PT0gVElNRU9VVF9CT0RZKVxuICAgIGlmICh0aGlzLnRpbWVvdXQpIHtcbiAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBvbmx5IGZvciBqZXN0XG4gICAgICBpZiAodGhpcy50aW1lb3V0LnJlZnJlc2gpIHtcbiAgICAgICAgdGhpcy50aW1lb3V0LnJlZnJlc2goKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucGF1c2VkID0gZmFsc2VcbiAgICB0aGlzLmV4ZWN1dGUodGhpcy5zb2NrZXQucmVhZCgpIHx8IEVNUFRZX0JVRikgLy8gRmx1c2ggcGFyc2VyLlxuICAgIHRoaXMucmVhZE1vcmUoKVxuICB9XG5cbiAgcmVhZE1vcmUgKCkge1xuICAgIHdoaWxlICghdGhpcy5wYXVzZWQgJiYgdGhpcy5wdHIpIHtcbiAgICAgIGNvbnN0IGNodW5rID0gdGhpcy5zb2NrZXQucmVhZCgpXG4gICAgICBpZiAoY2h1bmsgPT09IG51bGwpIHtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIHRoaXMuZXhlY3V0ZShjaHVuaylcbiAgICB9XG4gIH1cblxuICBleGVjdXRlIChkYXRhKSB7XG4gICAgYXNzZXJ0KHRoaXMucHRyICE9IG51bGwpXG4gICAgYXNzZXJ0KGN1cnJlbnRQYXJzZXIgPT0gbnVsbClcbiAgICBhc3NlcnQoIXRoaXMucGF1c2VkKVxuXG4gICAgY29uc3QgeyBzb2NrZXQsIGxsaHR0cCB9ID0gdGhpc1xuXG4gICAgaWYgKGRhdGEubGVuZ3RoID4gY3VycmVudEJ1ZmZlclNpemUpIHtcbiAgICAgIGlmIChjdXJyZW50QnVmZmVyUHRyKSB7XG4gICAgICAgIGxsaHR0cC5mcmVlKGN1cnJlbnRCdWZmZXJQdHIpXG4gICAgICB9XG4gICAgICBjdXJyZW50QnVmZmVyU2l6ZSA9IE1hdGguY2VpbChkYXRhLmxlbmd0aCAvIDQwOTYpICogNDA5NlxuICAgICAgY3VycmVudEJ1ZmZlclB0ciA9IGxsaHR0cC5tYWxsb2MoY3VycmVudEJ1ZmZlclNpemUpXG4gICAgfVxuXG4gICAgbmV3IFVpbnQ4QXJyYXkobGxodHRwLm1lbW9yeS5idWZmZXIsIGN1cnJlbnRCdWZmZXJQdHIsIGN1cnJlbnRCdWZmZXJTaXplKS5zZXQoZGF0YSlcblxuICAgIC8vIENhbGwgYGV4ZWN1dGVgIG9uIHRoZSB3YXNtIHBhcnNlci5cbiAgICAvLyBXZSBwYXNzIHRoZSBgbGxodHRwX3BhcnNlcmAgcG9pbnRlciBhZGRyZXNzLCB0aGUgcG9pbnRlciBhZGRyZXNzIG9mIGJ1ZmZlciB2aWV3IGRhdGEsXG4gICAgLy8gYW5kIGZpbmFsbHkgdGhlIGxlbmd0aCBvZiBieXRlcyB0byBwYXJzZS5cbiAgICAvLyBUaGUgcmV0dXJuIHZhbHVlIGlzIGFuIGVycm9yIGNvZGUgb3IgYGNvbnN0YW50cy5FUlJPUi5PS2AuXG4gICAgdHJ5IHtcbiAgICAgIGxldCByZXRcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY3VycmVudEJ1ZmZlclJlZiA9IGRhdGFcbiAgICAgICAgY3VycmVudFBhcnNlciA9IHRoaXNcbiAgICAgICAgcmV0ID0gbGxodHRwLmxsaHR0cF9leGVjdXRlKHRoaXMucHRyLCBjdXJyZW50QnVmZmVyUHRyLCBkYXRhLmxlbmd0aClcbiAgICAgICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY2F0Y2ggKi9cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogZGlmZmljdWx0IHRvIG1ha2UgYSB0ZXN0IGNhc2UgZm9yICovXG4gICAgICAgIHRocm93IGVyclxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgY3VycmVudFBhcnNlciA9IG51bGxcbiAgICAgICAgY3VycmVudEJ1ZmZlclJlZiA9IG51bGxcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb2Zmc2V0ID0gbGxodHRwLmxsaHR0cF9nZXRfZXJyb3JfcG9zKHRoaXMucHRyKSAtIGN1cnJlbnRCdWZmZXJQdHJcblxuICAgICAgaWYgKHJldCA9PT0gY29uc3RhbnRzLkVSUk9SLlBBVVNFRF9VUEdSQURFKSB7XG4gICAgICAgIHRoaXMub25VcGdyYWRlKGRhdGEuc2xpY2Uob2Zmc2V0KSlcbiAgICAgIH0gZWxzZSBpZiAocmV0ID09PSBjb25zdGFudHMuRVJST1IuUEFVU0VEKSB7XG4gICAgICAgIHRoaXMucGF1c2VkID0gdHJ1ZVxuICAgICAgICBzb2NrZXQudW5zaGlmdChkYXRhLnNsaWNlKG9mZnNldCkpXG4gICAgICB9IGVsc2UgaWYgKHJldCAhPT0gY29uc3RhbnRzLkVSUk9SLk9LKSB7XG4gICAgICAgIGNvbnN0IHB0ciA9IGxsaHR0cC5sbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbih0aGlzLnB0cilcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSAnJ1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogZGlmZmljdWx0IHRvIG1ha2UgYSB0ZXN0IGNhc2UgZm9yICovXG4gICAgICAgIGlmIChwdHIpIHtcbiAgICAgICAgICBjb25zdCBsZW4gPSBuZXcgVWludDhBcnJheShsbGh0dHAubWVtb3J5LmJ1ZmZlciwgcHRyKS5pbmRleE9mKDApXG4gICAgICAgICAgbWVzc2FnZSA9XG4gICAgICAgICAgICAnUmVzcG9uc2UgZG9lcyBub3QgbWF0Y2ggdGhlIEhUVFAvMS4xIHByb3RvY29sICgnICtcbiAgICAgICAgICAgIEJ1ZmZlci5mcm9tKGxsaHR0cC5tZW1vcnkuYnVmZmVyLCBwdHIsIGxlbikudG9TdHJpbmcoKSArXG4gICAgICAgICAgICAnKSdcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgSFRUUFBhcnNlckVycm9yKG1lc3NhZ2UsIGNvbnN0YW50cy5FUlJPUltyZXRdLCBkYXRhLnNsaWNlKG9mZnNldCkpXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBlcnIpXG4gICAgfVxuICB9XG5cbiAgZGVzdHJveSAoKSB7XG4gICAgYXNzZXJ0KHRoaXMucHRyICE9IG51bGwpXG4gICAgYXNzZXJ0KGN1cnJlbnRQYXJzZXIgPT0gbnVsbClcblxuICAgIHRoaXMubGxodHRwLmxsaHR0cF9mcmVlKHRoaXMucHRyKVxuICAgIHRoaXMucHRyID0gbnVsbFxuXG4gICAgdGltZXJzLmNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpXG4gICAgdGhpcy50aW1lb3V0ID0gbnVsbFxuICAgIHRoaXMudGltZW91dFZhbHVlID0gbnVsbFxuICAgIHRoaXMudGltZW91dFR5cGUgPSBudWxsXG5cbiAgICB0aGlzLnBhdXNlZCA9IGZhbHNlXG4gIH1cblxuICBvblN0YXR1cyAoYnVmKSB7XG4gICAgdGhpcy5zdGF0dXNUZXh0ID0gYnVmLnRvU3RyaW5nKClcbiAgfVxuXG4gIG9uTWVzc2FnZUJlZ2luICgpIHtcbiAgICBjb25zdCB7IHNvY2tldCwgY2xpZW50IH0gPSB0aGlzXG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogZGlmZmljdWx0IHRvIG1ha2UgYSB0ZXN0IGNhc2UgZm9yICovXG4gICAgaWYgKHNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdXVxuICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuICB9XG5cbiAgb25IZWFkZXJGaWVsZCAoYnVmKSB7XG4gICAgY29uc3QgbGVuID0gdGhpcy5oZWFkZXJzLmxlbmd0aFxuXG4gICAgaWYgKChsZW4gJiAxKSA9PT0gMCkge1xuICAgICAgdGhpcy5oZWFkZXJzLnB1c2goYnVmKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhlYWRlcnNbbGVuIC0gMV0gPSBCdWZmZXIuY29uY2F0KFt0aGlzLmhlYWRlcnNbbGVuIC0gMV0sIGJ1Zl0pXG4gICAgfVxuXG4gICAgdGhpcy50cmFja0hlYWRlcihidWYubGVuZ3RoKVxuICB9XG5cbiAgb25IZWFkZXJWYWx1ZSAoYnVmKSB7XG4gICAgbGV0IGxlbiA9IHRoaXMuaGVhZGVycy5sZW5ndGhcblxuICAgIGlmICgobGVuICYgMSkgPT09IDEpIHtcbiAgICAgIHRoaXMuaGVhZGVycy5wdXNoKGJ1ZilcbiAgICAgIGxlbiArPSAxXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGVhZGVyc1tsZW4gLSAxXSA9IEJ1ZmZlci5jb25jYXQoW3RoaXMuaGVhZGVyc1tsZW4gLSAxXSwgYnVmXSlcbiAgICB9XG5cbiAgICBjb25zdCBrZXkgPSB0aGlzLmhlYWRlcnNbbGVuIC0gMl1cbiAgICBpZiAoa2V5Lmxlbmd0aCA9PT0gMTAgJiYga2V5LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT0gJ2tlZXAtYWxpdmUnKSB7XG4gICAgICB0aGlzLmtlZXBBbGl2ZSArPSBidWYudG9TdHJpbmcoKVxuICAgIH0gZWxzZSBpZiAoa2V5Lmxlbmd0aCA9PT0gMTAgJiYga2V5LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT0gJ2Nvbm5lY3Rpb24nKSB7XG4gICAgICB0aGlzLmNvbm5lY3Rpb24gKz0gYnVmLnRvU3RyaW5nKClcbiAgICB9IGVsc2UgaWYgKGtleS5sZW5ndGggPT09IDE0ICYmIGtleS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT09ICdjb250ZW50LWxlbmd0aCcpIHtcbiAgICAgIHRoaXMuY29udGVudExlbmd0aCArPSBidWYudG9TdHJpbmcoKVxuICAgIH1cblxuICAgIHRoaXMudHJhY2tIZWFkZXIoYnVmLmxlbmd0aClcbiAgfVxuXG4gIHRyYWNrSGVhZGVyIChsZW4pIHtcbiAgICB0aGlzLmhlYWRlcnNTaXplICs9IGxlblxuICAgIGlmICh0aGlzLmhlYWRlcnNTaXplID49IHRoaXMuaGVhZGVyc01heFNpemUpIHtcbiAgICAgIHV0aWwuZGVzdHJveSh0aGlzLnNvY2tldCwgbmV3IEhlYWRlcnNPdmVyZmxvd0Vycm9yKCkpXG4gICAgfVxuICB9XG5cbiAgb25VcGdyYWRlIChoZWFkKSB7XG4gICAgY29uc3QgeyB1cGdyYWRlLCBjbGllbnQsIHNvY2tldCwgaGVhZGVycywgc3RhdHVzQ29kZSB9ID0gdGhpc1xuXG4gICAgYXNzZXJ0KHVwZ3JhZGUpXG5cbiAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XV1cbiAgICBhc3NlcnQocmVxdWVzdClcblxuICAgIGFzc2VydCghc29ja2V0LmRlc3Ryb3llZClcbiAgICBhc3NlcnQoc29ja2V0ID09PSBjbGllbnRba1NvY2tldF0pXG4gICAgYXNzZXJ0KCF0aGlzLnBhdXNlZClcbiAgICBhc3NlcnQocmVxdWVzdC51cGdyYWRlIHx8IHJlcXVlc3QubWV0aG9kID09PSAnQ09OTkVDVCcpXG5cbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBudWxsXG4gICAgdGhpcy5zdGF0dXNUZXh0ID0gJydcbiAgICB0aGlzLnNob3VsZEtlZXBBbGl2ZSA9IG51bGxcblxuICAgIGFzc2VydCh0aGlzLmhlYWRlcnMubGVuZ3RoICUgMiA9PT0gMClcbiAgICB0aGlzLmhlYWRlcnMgPSBbXVxuICAgIHRoaXMuaGVhZGVyc1NpemUgPSAwXG5cbiAgICBzb2NrZXQudW5zaGlmdChoZWFkKVxuXG4gICAgc29ja2V0W2tQYXJzZXJdLmRlc3Ryb3koKVxuICAgIHNvY2tldFtrUGFyc2VyXSA9IG51bGxcblxuICAgIHNvY2tldFtrQ2xpZW50XSA9IG51bGxcbiAgICBzb2NrZXRba0Vycm9yXSA9IG51bGxcbiAgICBzb2NrZXRcbiAgICAgIC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvblNvY2tldEVycm9yKVxuICAgICAgLnJlbW92ZUxpc3RlbmVyKCdyZWFkYWJsZScsIG9uU29ja2V0UmVhZGFibGUpXG4gICAgICAucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIG9uU29ja2V0RW5kKVxuICAgICAgLnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uU29ja2V0Q2xvc2UpXG5cbiAgICBjbGllbnRba1NvY2tldF0gPSBudWxsXG4gICAgY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XSsrXSA9IG51bGxcbiAgICBjbGllbnQuZW1pdCgnZGlzY29ubmVjdCcsIGNsaWVudFtrVXJsXSwgW2NsaWVudF0sIG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoJ3VwZ3JhZGUnKSlcblxuICAgIHRyeSB7XG4gICAgICByZXF1ZXN0Lm9uVXBncmFkZShzdGF0dXNDb2RlLCBoZWFkZXJzLCBzb2NrZXQpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBlcnIpXG4gICAgfVxuXG4gICAgcmVzdW1lKGNsaWVudClcbiAgfVxuXG4gIG9uSGVhZGVyc0NvbXBsZXRlIChzdGF0dXNDb2RlLCB1cGdyYWRlLCBzaG91bGRLZWVwQWxpdmUpIHtcbiAgICBjb25zdCB7IGNsaWVudCwgc29ja2V0LCBoZWFkZXJzLCBzdGF0dXNUZXh0IH0gPSB0aGlzXG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogZGlmZmljdWx0IHRvIG1ha2UgYSB0ZXN0IGNhc2UgZm9yICovXG4gICAgaWYgKHNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdXVxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IGRpZmZpY3VsdCB0byBtYWtlIGEgdGVzdCBjYXNlIGZvciAqL1xuICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgYXNzZXJ0KCF0aGlzLnVwZ3JhZGUpXG4gICAgYXNzZXJ0KHRoaXMuc3RhdHVzQ29kZSA8IDIwMClcblxuICAgIGlmIChzdGF0dXNDb2RlID09PSAxMDApIHtcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBTb2NrZXRFcnJvcignYmFkIHJlc3BvbnNlJywgdXRpbC5nZXRTb2NrZXRJbmZvKHNvY2tldCkpKVxuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgLyogdGhpcyBjYW4gb25seSBoYXBwZW4gaWYgc2VydmVyIGlzIG1pc2JlaGF2aW5nICovXG4gICAgaWYgKHVwZ3JhZGUgJiYgIXJlcXVlc3QudXBncmFkZSkge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IFNvY2tldEVycm9yKCdiYWQgdXBncmFkZScsIHV0aWwuZ2V0U29ja2V0SW5mbyhzb2NrZXQpKSlcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0aGlzLnRpbWVvdXRUeXBlLCBUSU1FT1VUX0hFQURFUlMpXG5cbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBzdGF0dXNDb2RlXG4gICAgdGhpcy5zaG91bGRLZWVwQWxpdmUgPSAoXG4gICAgICBzaG91bGRLZWVwQWxpdmUgfHxcbiAgICAgIC8vIE92ZXJyaWRlIGxsaHR0cCB2YWx1ZSB3aGljaCBkb2VzIG5vdCBhbGxvdyBrZWVwQWxpdmUgZm9yIEhFQUQuXG4gICAgICAocmVxdWVzdC5tZXRob2QgPT09ICdIRUFEJyAmJiAhc29ja2V0W2tSZXNldF0gJiYgdGhpcy5jb25uZWN0aW9uLnRvTG93ZXJDYXNlKCkgPT09ICdrZWVwLWFsaXZlJylcbiAgICApXG5cbiAgICBpZiAodGhpcy5zdGF0dXNDb2RlID49IDIwMCkge1xuICAgICAgY29uc3QgYm9keVRpbWVvdXQgPSByZXF1ZXN0LmJvZHlUaW1lb3V0ICE9IG51bGxcbiAgICAgICAgPyByZXF1ZXN0LmJvZHlUaW1lb3V0XG4gICAgICAgIDogY2xpZW50W2tCb2R5VGltZW91dF1cbiAgICAgIHRoaXMuc2V0VGltZW91dChib2R5VGltZW91dCwgVElNRU9VVF9CT0RZKVxuICAgIH0gZWxzZSBpZiAodGhpcy50aW1lb3V0KSB7XG4gICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogb25seSBmb3IgamVzdFxuICAgICAgaWYgKHRoaXMudGltZW91dC5yZWZyZXNoKSB7XG4gICAgICAgIHRoaXMudGltZW91dC5yZWZyZXNoKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocmVxdWVzdC5tZXRob2QgPT09ICdDT05ORUNUJykge1xuICAgICAgYXNzZXJ0KGNsaWVudFtrUnVubmluZ10gPT09IDEpXG4gICAgICB0aGlzLnVwZ3JhZGUgPSB0cnVlXG4gICAgICByZXR1cm4gMlxuICAgIH1cblxuICAgIGlmICh1cGdyYWRlKSB7XG4gICAgICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA9PT0gMSlcbiAgICAgIHRoaXMudXBncmFkZSA9IHRydWVcbiAgICAgIHJldHVybiAyXG4gICAgfVxuXG4gICAgYXNzZXJ0KHRoaXMuaGVhZGVycy5sZW5ndGggJSAyID09PSAwKVxuICAgIHRoaXMuaGVhZGVycyA9IFtdXG4gICAgdGhpcy5oZWFkZXJzU2l6ZSA9IDBcblxuICAgIGlmICh0aGlzLnNob3VsZEtlZXBBbGl2ZSAmJiBjbGllbnRba1BpcGVsaW5pbmddKSB7XG4gICAgICBjb25zdCBrZWVwQWxpdmVUaW1lb3V0ID0gdGhpcy5rZWVwQWxpdmUgPyB1dGlsLnBhcnNlS2VlcEFsaXZlVGltZW91dCh0aGlzLmtlZXBBbGl2ZSkgOiBudWxsXG5cbiAgICAgIGlmIChrZWVwQWxpdmVUaW1lb3V0ICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgdGltZW91dCA9IE1hdGgubWluKFxuICAgICAgICAgIGtlZXBBbGl2ZVRpbWVvdXQgLSBjbGllbnRba0tlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGRdLFxuICAgICAgICAgIGNsaWVudFtrS2VlcEFsaXZlTWF4VGltZW91dF1cbiAgICAgICAgKVxuICAgICAgICBpZiAodGltZW91dCA8PSAwKSB7XG4gICAgICAgICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2xpZW50W2tLZWVwQWxpdmVUaW1lb3V0VmFsdWVdID0gdGltZW91dFxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjbGllbnRba0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZV0gPSBjbGllbnRba0tlZXBBbGl2ZURlZmF1bHRUaW1lb3V0XVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTdG9wIG1vcmUgcmVxdWVzdHMgZnJvbSBiZWluZyBkaXNwYXRjaGVkLlxuICAgICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gICAgfVxuXG4gICAgY29uc3QgcGF1c2UgPSByZXF1ZXN0Lm9uSGVhZGVycyhzdGF0dXNDb2RlLCBoZWFkZXJzLCB0aGlzLnJlc3VtZSwgc3RhdHVzVGV4dCkgPT09IGZhbHNlXG5cbiAgICBpZiAocmVxdWVzdC5hYm9ydGVkKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICBpZiAocmVxdWVzdC5tZXRob2QgPT09ICdIRUFEJykge1xuICAgICAgcmV0dXJuIDFcbiAgICB9XG5cbiAgICBpZiAoc3RhdHVzQ29kZSA8IDIwMCkge1xuICAgICAgcmV0dXJuIDFcbiAgICB9XG5cbiAgICBpZiAoc29ja2V0W2tCbG9ja2luZ10pIHtcbiAgICAgIHNvY2tldFtrQmxvY2tpbmddID0gZmFsc2VcbiAgICAgIHJlc3VtZShjbGllbnQpXG4gICAgfVxuXG4gICAgcmV0dXJuIHBhdXNlID8gY29uc3RhbnRzLkVSUk9SLlBBVVNFRCA6IDBcbiAgfVxuXG4gIG9uQm9keSAoYnVmKSB7XG4gICAgY29uc3QgeyBjbGllbnQsIHNvY2tldCwgc3RhdHVzQ29kZSwgbWF4UmVzcG9uc2VTaXplIH0gPSB0aGlzXG5cbiAgICBpZiAoc29ja2V0LmRlc3Ryb3llZCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdCA9IGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF1dXG4gICAgYXNzZXJ0KHJlcXVlc3QpXG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwodGhpcy50aW1lb3V0VHlwZSwgVElNRU9VVF9CT0RZKVxuICAgIGlmICh0aGlzLnRpbWVvdXQpIHtcbiAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBvbmx5IGZvciBqZXN0XG4gICAgICBpZiAodGhpcy50aW1lb3V0LnJlZnJlc2gpIHtcbiAgICAgICAgdGhpcy50aW1lb3V0LnJlZnJlc2goKVxuICAgICAgfVxuICAgIH1cblxuICAgIGFzc2VydChzdGF0dXNDb2RlID49IDIwMClcblxuICAgIGlmIChtYXhSZXNwb25zZVNpemUgPiAtMSAmJiB0aGlzLmJ5dGVzUmVhZCArIGJ1Zi5sZW5ndGggPiBtYXhSZXNwb25zZVNpemUpIHtcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBSZXNwb25zZUV4Y2VlZGVkTWF4U2l6ZUVycm9yKCkpXG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICB0aGlzLmJ5dGVzUmVhZCArPSBidWYubGVuZ3RoXG5cbiAgICBpZiAocmVxdWVzdC5vbkRhdGEoYnVmKSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBjb25zdGFudHMuRVJST1IuUEFVU0VEXG4gICAgfVxuICB9XG5cbiAgb25NZXNzYWdlQ29tcGxldGUgKCkge1xuICAgIGNvbnN0IHsgY2xpZW50LCBzb2NrZXQsIHN0YXR1c0NvZGUsIHVwZ3JhZGUsIGhlYWRlcnMsIGNvbnRlbnRMZW5ndGgsIGJ5dGVzUmVhZCwgc2hvdWxkS2VlcEFsaXZlIH0gPSB0aGlzXG5cbiAgICBpZiAoc29ja2V0LmRlc3Ryb3llZCAmJiAoIXN0YXR1c0NvZGUgfHwgc2hvdWxkS2VlcEFsaXZlKSkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgaWYgKHVwZ3JhZGUpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdXVxuICAgIGFzc2VydChyZXF1ZXN0KVxuXG4gICAgYXNzZXJ0KHN0YXR1c0NvZGUgPj0gMTAwKVxuXG4gICAgdGhpcy5zdGF0dXNDb2RlID0gbnVsbFxuICAgIHRoaXMuc3RhdHVzVGV4dCA9ICcnXG4gICAgdGhpcy5ieXRlc1JlYWQgPSAwXG4gICAgdGhpcy5jb250ZW50TGVuZ3RoID0gJydcbiAgICB0aGlzLmtlZXBBbGl2ZSA9ICcnXG4gICAgdGhpcy5jb25uZWN0aW9uID0gJydcblxuICAgIGFzc2VydCh0aGlzLmhlYWRlcnMubGVuZ3RoICUgMiA9PT0gMClcbiAgICB0aGlzLmhlYWRlcnMgPSBbXVxuICAgIHRoaXMuaGVhZGVyc1NpemUgPSAwXG5cbiAgICBpZiAoc3RhdHVzQ29kZSA8IDIwMCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IHNob3VsZCBiZSBoYW5kbGVkIGJ5IGxsaHR0cD8gKi9cbiAgICBpZiAocmVxdWVzdC5tZXRob2QgIT09ICdIRUFEJyAmJiBjb250ZW50TGVuZ3RoICYmIGJ5dGVzUmVhZCAhPT0gcGFyc2VJbnQoY29udGVudExlbmd0aCwgMTApKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgUmVzcG9uc2VDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpKVxuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgcmVxdWVzdC5vbkNvbXBsZXRlKGhlYWRlcnMpXG5cbiAgICBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdKytdID0gbnVsbFxuXG4gICAgaWYgKHNvY2tldFtrV3JpdGluZ10pIHtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjbGllbnRba1J1bm5pbmddLCAwKVxuICAgICAgLy8gUmVzcG9uc2UgY29tcGxldGVkIGJlZm9yZSByZXF1ZXN0LlxuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEluZm9ybWF0aW9uYWxFcnJvcigncmVzZXQnKSlcbiAgICAgIHJldHVybiBjb25zdGFudHMuRVJST1IuUEFVU0VEXG4gICAgfSBlbHNlIGlmICghc2hvdWxkS2VlcEFsaXZlKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgSW5mb3JtYXRpb25hbEVycm9yKCdyZXNldCcpKVxuICAgICAgcmV0dXJuIGNvbnN0YW50cy5FUlJPUi5QQVVTRURcbiAgICB9IGVsc2UgaWYgKHNvY2tldFtrUmVzZXRdICYmIGNsaWVudFtrUnVubmluZ10gPT09IDApIHtcbiAgICAgIC8vIERlc3Ryb3kgc29ja2V0IG9uY2UgYWxsIHJlcXVlc3RzIGhhdmUgY29tcGxldGVkLlxuICAgICAgLy8gVGhlIHJlcXVlc3QgYXQgdGhlIHRhaWwgb2YgdGhlIHBpcGVsaW5lIGlzIHRoZSBvbmVcbiAgICAgIC8vIHRoYXQgcmVxdWVzdGVkIHJlc2V0IGFuZCBubyBmdXJ0aGVyIHJlcXVlc3RzIHNob3VsZFxuICAgICAgLy8gaGF2ZSBiZWVuIHF1ZXVlZCBzaW5jZSB0aGVuLlxuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEluZm9ybWF0aW9uYWxFcnJvcigncmVzZXQnKSlcbiAgICAgIHJldHVybiBjb25zdGFudHMuRVJST1IuUEFVU0VEXG4gICAgfSBlbHNlIGlmIChjbGllbnRba1BpcGVsaW5pbmddID09PSAxKSB7XG4gICAgICAvLyBXZSBtdXN0IHdhaXQgYSBmdWxsIGV2ZW50IGxvb3AgY3ljbGUgdG8gcmV1c2UgdGhpcyBzb2NrZXQgdG8gbWFrZSBzdXJlXG4gICAgICAvLyB0aGF0IG5vbi1zcGVjIGNvbXBsaWFudCBzZXJ2ZXJzIGFyZSBub3QgY2xvc2luZyB0aGUgY29ubmVjdGlvbiBldmVuIGlmIHRoZXlcbiAgICAgIC8vIHNhaWQgdGhleSB3b24ndC5cbiAgICAgIHNldEltbWVkaWF0ZShyZXN1bWUsIGNsaWVudClcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdW1lKGNsaWVudClcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gb25QYXJzZXJUaW1lb3V0IChwYXJzZXIpIHtcbiAgY29uc3QgeyBzb2NrZXQsIHRpbWVvdXRUeXBlLCBjbGllbnQgfSA9IHBhcnNlclxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmICh0aW1lb3V0VHlwZSA9PT0gVElNRU9VVF9IRUFERVJTKSB7XG4gICAgaWYgKCFzb2NrZXRba1dyaXRpbmddIHx8IHNvY2tldC53cml0YWJsZU5lZWREcmFpbiB8fCBjbGllbnRba1J1bm5pbmddID4gMSkge1xuICAgICAgYXNzZXJ0KCFwYXJzZXIucGF1c2VkLCAnY2Fubm90IGJlIHBhdXNlZCB3aGlsZSB3YWl0aW5nIGZvciBoZWFkZXJzJylcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBIZWFkZXJzVGltZW91dEVycm9yKCkpXG4gICAgfVxuICB9IGVsc2UgaWYgKHRpbWVvdXRUeXBlID09PSBUSU1FT1VUX0JPRFkpIHtcbiAgICBpZiAoIXBhcnNlci5wYXVzZWQpIHtcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBCb2R5VGltZW91dEVycm9yKCkpXG4gICAgfVxuICB9IGVsc2UgaWYgKHRpbWVvdXRUeXBlID09PSBUSU1FT1VUX0lETEUpIHtcbiAgICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA9PT0gMCAmJiBjbGllbnRba0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZV0pXG4gICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEluZm9ybWF0aW9uYWxFcnJvcignc29ja2V0IGlkbGUgdGltZW91dCcpKVxuICB9XG59XG5cbmZ1bmN0aW9uIG9uU29ja2V0UmVhZGFibGUgKCkge1xuICBjb25zdCB7IFtrUGFyc2VyXTogcGFyc2VyIH0gPSB0aGlzXG4gIGlmIChwYXJzZXIpIHtcbiAgICBwYXJzZXIucmVhZE1vcmUoKVxuICB9XG59XG5cbmZ1bmN0aW9uIG9uU29ja2V0RXJyb3IgKGVycikge1xuICBjb25zdCB7IFtrQ2xpZW50XTogY2xpZW50LCBba1BhcnNlcl06IHBhcnNlciB9ID0gdGhpc1xuXG4gIGFzc2VydChlcnIuY29kZSAhPT0gJ0VSUl9UTFNfQ0VSVF9BTFROQU1FX0lOVkFMSUQnKVxuXG4gIGlmIChjbGllbnRba0hUVFBDb25uVmVyc2lvbl0gIT09ICdoMicpIHtcbiAgICAvLyBPbiBNYWMgT1MsIHdlIGdldCBhbiBFQ09OTlJFU0VUIGV2ZW4gaWYgdGhlcmUgaXMgYSBmdWxsIGJvZHkgdG8gYmUgZm9yd2FyZGVkXG4gICAgLy8gdG8gdGhlIHVzZXIuXG4gICAgaWYgKGVyci5jb2RlID09PSAnRUNPTk5SRVNFVCcgJiYgcGFyc2VyLnN0YXR1c0NvZGUgJiYgIXBhcnNlci5zaG91bGRLZWVwQWxpdmUpIHtcbiAgICAgIC8vIFdlIHRyZWF0IGFsbCBpbmNvbWluZyBkYXRhIHNvIGZvciBhcyBhIHZhbGlkIHJlc3BvbnNlLlxuICAgICAgcGFyc2VyLm9uTWVzc2FnZUNvbXBsZXRlKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgfVxuXG4gIHRoaXNba0Vycm9yXSA9IGVyclxuXG4gIG9uRXJyb3IodGhpc1trQ2xpZW50XSwgZXJyKVxufVxuXG5mdW5jdGlvbiBvbkVycm9yIChjbGllbnQsIGVycikge1xuICBpZiAoXG4gICAgY2xpZW50W2tSdW5uaW5nXSA9PT0gMCAmJlxuICAgIGVyci5jb2RlICE9PSAnVU5EX0VSUl9JTkZPJyAmJlxuICAgIGVyci5jb2RlICE9PSAnVU5EX0VSUl9TT0NLRVQnXG4gICkge1xuICAgIC8vIEVycm9yIGlzIG5vdCBjYXVzZWQgYnkgcnVubmluZyByZXF1ZXN0IGFuZCBub3QgYSByZWNvdmVyYWJsZVxuICAgIC8vIHNvY2tldCBlcnJvci5cblxuICAgIGFzc2VydChjbGllbnRba1BlbmRpbmdJZHhdID09PSBjbGllbnRba1J1bm5pbmdJZHhdKVxuXG4gICAgY29uc3QgcmVxdWVzdHMgPSBjbGllbnRba1F1ZXVlXS5zcGxpY2UoY2xpZW50W2tSdW5uaW5nSWR4XSlcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcXVlc3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCByZXF1ZXN0ID0gcmVxdWVzdHNbaV1cbiAgICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIGVycilcbiAgICB9XG4gICAgYXNzZXJ0KGNsaWVudFtrU2l6ZV0gPT09IDApXG4gIH1cbn1cblxuZnVuY3Rpb24gb25Tb2NrZXRFbmQgKCkge1xuICBjb25zdCB7IFtrUGFyc2VyXTogcGFyc2VyLCBba0NsaWVudF06IGNsaWVudCB9ID0gdGhpc1xuXG4gIGlmIChjbGllbnRba0hUVFBDb25uVmVyc2lvbl0gIT09ICdoMicpIHtcbiAgICBpZiAocGFyc2VyLnN0YXR1c0NvZGUgJiYgIXBhcnNlci5zaG91bGRLZWVwQWxpdmUpIHtcbiAgICAgIC8vIFdlIHRyZWF0IGFsbCBpbmNvbWluZyBkYXRhIHNvIGZhciBhcyBhIHZhbGlkIHJlc3BvbnNlLlxuICAgICAgcGFyc2VyLm9uTWVzc2FnZUNvbXBsZXRlKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgfVxuXG4gIHV0aWwuZGVzdHJveSh0aGlzLCBuZXcgU29ja2V0RXJyb3IoJ290aGVyIHNpZGUgY2xvc2VkJywgdXRpbC5nZXRTb2NrZXRJbmZvKHRoaXMpKSlcbn1cblxuZnVuY3Rpb24gb25Tb2NrZXRDbG9zZSAoKSB7XG4gIGNvbnN0IHsgW2tDbGllbnRdOiBjbGllbnQsIFtrUGFyc2VyXTogcGFyc2VyIH0gPSB0aGlzXG5cbiAgaWYgKGNsaWVudFtrSFRUUENvbm5WZXJzaW9uXSA9PT0gJ2gxJyAmJiBwYXJzZXIpIHtcbiAgICBpZiAoIXRoaXNba0Vycm9yXSAmJiBwYXJzZXIuc3RhdHVzQ29kZSAmJiAhcGFyc2VyLnNob3VsZEtlZXBBbGl2ZSkge1xuICAgICAgLy8gV2UgdHJlYXQgYWxsIGluY29taW5nIGRhdGEgc28gZmFyIGFzIGEgdmFsaWQgcmVzcG9uc2UuXG4gICAgICBwYXJzZXIub25NZXNzYWdlQ29tcGxldGUoKVxuICAgIH1cblxuICAgIHRoaXNba1BhcnNlcl0uZGVzdHJveSgpXG4gICAgdGhpc1trUGFyc2VyXSA9IG51bGxcbiAgfVxuXG4gIGNvbnN0IGVyciA9IHRoaXNba0Vycm9yXSB8fCBuZXcgU29ja2V0RXJyb3IoJ2Nsb3NlZCcsIHV0aWwuZ2V0U29ja2V0SW5mbyh0aGlzKSlcblxuICBjbGllbnRba1NvY2tldF0gPSBudWxsXG5cbiAgaWYgKGNsaWVudC5kZXN0cm95ZWQpIHtcbiAgICBhc3NlcnQoY2xpZW50W2tQZW5kaW5nXSA9PT0gMClcblxuICAgIC8vIEZhaWwgZW50aXJlIHF1ZXVlLlxuICAgIGNvbnN0IHJlcXVlc3RzID0gY2xpZW50W2tRdWV1ZV0uc3BsaWNlKGNsaWVudFtrUnVubmluZ0lkeF0pXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXF1ZXN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgcmVxdWVzdCA9IHJlcXVlc3RzW2ldXG4gICAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIpXG4gICAgfVxuICB9IGVsc2UgaWYgKGNsaWVudFtrUnVubmluZ10gPiAwICYmIGVyci5jb2RlICE9PSAnVU5EX0VSUl9JTkZPJykge1xuICAgIC8vIEZhaWwgaGVhZCBvZiBwaXBlbGluZS5cbiAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XV1cbiAgICBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdKytdID0gbnVsbFxuXG4gICAgZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyKVxuICB9XG5cbiAgY2xpZW50W2tQZW5kaW5nSWR4XSA9IGNsaWVudFtrUnVubmluZ0lkeF1cblxuICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA9PT0gMClcblxuICBjbGllbnQuZW1pdCgnZGlzY29ubmVjdCcsIGNsaWVudFtrVXJsXSwgW2NsaWVudF0sIGVycilcblxuICByZXN1bWUoY2xpZW50KVxufVxuXG5hc3luYyBmdW5jdGlvbiBjb25uZWN0IChjbGllbnQpIHtcbiAgYXNzZXJ0KCFjbGllbnRba0Nvbm5lY3RpbmddKVxuICBhc3NlcnQoIWNsaWVudFtrU29ja2V0XSlcblxuICBsZXQgeyBob3N0LCBob3N0bmFtZSwgcHJvdG9jb2wsIHBvcnQgfSA9IGNsaWVudFtrVXJsXVxuXG4gIC8vIFJlc29sdmUgaXB2NlxuICBpZiAoaG9zdG5hbWVbMF0gPT09ICdbJykge1xuICAgIGNvbnN0IGlkeCA9IGhvc3RuYW1lLmluZGV4T2YoJ10nKVxuXG4gICAgYXNzZXJ0KGlkeCAhPT0gLTEpXG4gICAgY29uc3QgaXAgPSBob3N0bmFtZS5zdWJzdHJpbmcoMSwgaWR4KVxuXG4gICAgYXNzZXJ0KG5ldC5pc0lQKGlwKSlcbiAgICBob3N0bmFtZSA9IGlwXG4gIH1cblxuICBjbGllbnRba0Nvbm5lY3RpbmddID0gdHJ1ZVxuXG4gIGlmIChjaGFubmVscy5iZWZvcmVDb25uZWN0Lmhhc1N1YnNjcmliZXJzKSB7XG4gICAgY2hhbm5lbHMuYmVmb3JlQ29ubmVjdC5wdWJsaXNoKHtcbiAgICAgIGNvbm5lY3RQYXJhbXM6IHtcbiAgICAgICAgaG9zdCxcbiAgICAgICAgaG9zdG5hbWUsXG4gICAgICAgIHByb3RvY29sLFxuICAgICAgICBwb3J0LFxuICAgICAgICBzZXJ2ZXJuYW1lOiBjbGllbnRba1NlcnZlck5hbWVdLFxuICAgICAgICBsb2NhbEFkZHJlc3M6IGNsaWVudFtrTG9jYWxBZGRyZXNzXVxuICAgICAgfSxcbiAgICAgIGNvbm5lY3RvcjogY2xpZW50W2tDb25uZWN0b3JdXG4gICAgfSlcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3Qgc29ja2V0ID0gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY2xpZW50W2tDb25uZWN0b3JdKHtcbiAgICAgICAgaG9zdCxcbiAgICAgICAgaG9zdG5hbWUsXG4gICAgICAgIHByb3RvY29sLFxuICAgICAgICBwb3J0LFxuICAgICAgICBzZXJ2ZXJuYW1lOiBjbGllbnRba1NlcnZlck5hbWVdLFxuICAgICAgICBsb2NhbEFkZHJlc3M6IGNsaWVudFtrTG9jYWxBZGRyZXNzXVxuICAgICAgfSwgKGVyciwgc29ja2V0KSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICByZWplY3QoZXJyKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc29sdmUoc29ja2V0KVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0pXG5cbiAgICBpZiAoY2xpZW50LmRlc3Ryb3llZCkge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldC5vbignZXJyb3InLCAoKSA9PiB7fSksIG5ldyBDbGllbnREZXN0cm95ZWRFcnJvcigpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY2xpZW50W2tDb25uZWN0aW5nXSA9IGZhbHNlXG5cbiAgICBhc3NlcnQoc29ja2V0KVxuXG4gICAgY29uc3QgaXNIMiA9IHNvY2tldC5hbHBuUHJvdG9jb2wgPT09ICdoMidcbiAgICBpZiAoaXNIMikge1xuICAgICAgaWYgKCFoMkV4cGVyaW1lbnRhbFdhcm5lZCkge1xuICAgICAgICBoMkV4cGVyaW1lbnRhbFdhcm5lZCA9IHRydWVcbiAgICAgICAgcHJvY2Vzcy5lbWl0V2FybmluZygnSDIgc3VwcG9ydCBpcyBleHBlcmltZW50YWwsIGV4cGVjdCB0aGVtIHRvIGNoYW5nZSBhdCBhbnkgdGltZS4nLCB7XG4gICAgICAgICAgY29kZTogJ1VORElDSS1IMidcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2Vzc2lvbiA9IGh0dHAyLmNvbm5lY3QoY2xpZW50W2tVcmxdLCB7XG4gICAgICAgIGNyZWF0ZUNvbm5lY3Rpb246ICgpID0+IHNvY2tldCxcbiAgICAgICAgcGVlck1heENvbmN1cnJlbnRTdHJlYW1zOiBjbGllbnRba0hUVFAyU2Vzc2lvblN0YXRlXS5tYXhDb25jdXJyZW50U3RyZWFtc1xuICAgICAgfSlcblxuICAgICAgY2xpZW50W2tIVFRQQ29ublZlcnNpb25dID0gJ2gyJ1xuICAgICAgc2Vzc2lvbltrQ2xpZW50XSA9IGNsaWVudFxuICAgICAgc2Vzc2lvbltrU29ja2V0XSA9IHNvY2tldFxuICAgICAgc2Vzc2lvbi5vbignZXJyb3InLCBvbkh0dHAyU2Vzc2lvbkVycm9yKVxuICAgICAgc2Vzc2lvbi5vbignZnJhbWVFcnJvcicsIG9uSHR0cDJGcmFtZUVycm9yKVxuICAgICAgc2Vzc2lvbi5vbignZW5kJywgb25IdHRwMlNlc3Npb25FbmQpXG4gICAgICBzZXNzaW9uLm9uKCdnb2F3YXknLCBvbkhUVFAyR29Bd2F5KVxuICAgICAgc2Vzc2lvbi5vbignY2xvc2UnLCBvblNvY2tldENsb3NlKVxuICAgICAgc2Vzc2lvbi51bnJlZigpXG5cbiAgICAgIGNsaWVudFtrSFRUUDJTZXNzaW9uXSA9IHNlc3Npb25cbiAgICAgIHNvY2tldFtrSFRUUDJTZXNzaW9uXSA9IHNlc3Npb25cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFsbGh0dHBJbnN0YW5jZSkge1xuICAgICAgICBsbGh0dHBJbnN0YW5jZSA9IGF3YWl0IGxsaHR0cFByb21pc2VcbiAgICAgICAgbGxodHRwUHJvbWlzZSA9IG51bGxcbiAgICAgIH1cblxuICAgICAgc29ja2V0W2tOb1JlZl0gPSBmYWxzZVxuICAgICAgc29ja2V0W2tXcml0aW5nXSA9IGZhbHNlXG4gICAgICBzb2NrZXRba1Jlc2V0XSA9IGZhbHNlXG4gICAgICBzb2NrZXRba0Jsb2NraW5nXSA9IGZhbHNlXG4gICAgICBzb2NrZXRba1BhcnNlcl0gPSBuZXcgUGFyc2VyKGNsaWVudCwgc29ja2V0LCBsbGh0dHBJbnN0YW5jZSlcbiAgICB9XG5cbiAgICBzb2NrZXRba0NvdW50ZXJdID0gMFxuICAgIHNvY2tldFtrTWF4UmVxdWVzdHNdID0gY2xpZW50W2tNYXhSZXF1ZXN0c11cbiAgICBzb2NrZXRba0NsaWVudF0gPSBjbGllbnRcbiAgICBzb2NrZXRba0Vycm9yXSA9IG51bGxcblxuICAgIHNvY2tldFxuICAgICAgLm9uKCdlcnJvcicsIG9uU29ja2V0RXJyb3IpXG4gICAgICAub24oJ3JlYWRhYmxlJywgb25Tb2NrZXRSZWFkYWJsZSlcbiAgICAgIC5vbignZW5kJywgb25Tb2NrZXRFbmQpXG4gICAgICAub24oJ2Nsb3NlJywgb25Tb2NrZXRDbG9zZSlcblxuICAgIGNsaWVudFtrU29ja2V0XSA9IHNvY2tldFxuXG4gICAgaWYgKGNoYW5uZWxzLmNvbm5lY3RlZC5oYXNTdWJzY3JpYmVycykge1xuICAgICAgY2hhbm5lbHMuY29ubmVjdGVkLnB1Ymxpc2goe1xuICAgICAgICBjb25uZWN0UGFyYW1zOiB7XG4gICAgICAgICAgaG9zdCxcbiAgICAgICAgICBob3N0bmFtZSxcbiAgICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgICBwb3J0LFxuICAgICAgICAgIHNlcnZlcm5hbWU6IGNsaWVudFtrU2VydmVyTmFtZV0sXG4gICAgICAgICAgbG9jYWxBZGRyZXNzOiBjbGllbnRba0xvY2FsQWRkcmVzc11cbiAgICAgICAgfSxcbiAgICAgICAgY29ubmVjdG9yOiBjbGllbnRba0Nvbm5lY3Rvcl0sXG4gICAgICAgIHNvY2tldFxuICAgICAgfSlcbiAgICB9XG4gICAgY2xpZW50LmVtaXQoJ2Nvbm5lY3QnLCBjbGllbnRba1VybF0sIFtjbGllbnRdKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoY2xpZW50LmRlc3Ryb3llZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY2xpZW50W2tDb25uZWN0aW5nXSA9IGZhbHNlXG5cbiAgICBpZiAoY2hhbm5lbHMuY29ubmVjdEVycm9yLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICBjaGFubmVscy5jb25uZWN0RXJyb3IucHVibGlzaCh7XG4gICAgICAgIGNvbm5lY3RQYXJhbXM6IHtcbiAgICAgICAgICBob3N0LFxuICAgICAgICAgIGhvc3RuYW1lLFxuICAgICAgICAgIHByb3RvY29sLFxuICAgICAgICAgIHBvcnQsXG4gICAgICAgICAgc2VydmVybmFtZTogY2xpZW50W2tTZXJ2ZXJOYW1lXSxcbiAgICAgICAgICBsb2NhbEFkZHJlc3M6IGNsaWVudFtrTG9jYWxBZGRyZXNzXVxuICAgICAgICB9LFxuICAgICAgICBjb25uZWN0b3I6IGNsaWVudFtrQ29ubmVjdG9yXSxcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAoZXJyLmNvZGUgPT09ICdFUlJfVExTX0NFUlRfQUxUTkFNRV9JTlZBTElEJykge1xuICAgICAgYXNzZXJ0KGNsaWVudFtrUnVubmluZ10gPT09IDApXG4gICAgICB3aGlsZSAoY2xpZW50W2tQZW5kaW5nXSA+IDAgJiYgY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tQZW5kaW5nSWR4XV0uc2VydmVybmFtZSA9PT0gY2xpZW50W2tTZXJ2ZXJOYW1lXSkge1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tQZW5kaW5nSWR4XSsrXVxuICAgICAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG9uRXJyb3IoY2xpZW50LCBlcnIpXG4gICAgfVxuXG4gICAgY2xpZW50LmVtaXQoJ2Nvbm5lY3Rpb25FcnJvcicsIGNsaWVudFtrVXJsXSwgW2NsaWVudF0sIGVycilcbiAgfVxuXG4gIHJlc3VtZShjbGllbnQpXG59XG5cbmZ1bmN0aW9uIGVtaXREcmFpbiAoY2xpZW50KSB7XG4gIGNsaWVudFtrTmVlZERyYWluXSA9IDBcbiAgY2xpZW50LmVtaXQoJ2RyYWluJywgY2xpZW50W2tVcmxdLCBbY2xpZW50XSlcbn1cblxuZnVuY3Rpb24gcmVzdW1lIChjbGllbnQsIHN5bmMpIHtcbiAgaWYgKGNsaWVudFtrUmVzdW1pbmddID09PSAyKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBjbGllbnRba1Jlc3VtaW5nXSA9IDJcblxuICBfcmVzdW1lKGNsaWVudCwgc3luYylcbiAgY2xpZW50W2tSZXN1bWluZ10gPSAwXG5cbiAgaWYgKGNsaWVudFtrUnVubmluZ0lkeF0gPiAyNTYpIHtcbiAgICBjbGllbnRba1F1ZXVlXS5zcGxpY2UoMCwgY2xpZW50W2tSdW5uaW5nSWR4XSlcbiAgICBjbGllbnRba1BlbmRpbmdJZHhdIC09IGNsaWVudFtrUnVubmluZ0lkeF1cbiAgICBjbGllbnRba1J1bm5pbmdJZHhdID0gMFxuICB9XG59XG5cbmZ1bmN0aW9uIF9yZXN1bWUgKGNsaWVudCwgc3luYykge1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIGlmIChjbGllbnQuZGVzdHJveWVkKSB7XG4gICAgICBhc3NlcnQoY2xpZW50W2tQZW5kaW5nXSA9PT0gMClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChjbGllbnRba0Nsb3NlZFJlc29sdmVdICYmICFjbGllbnRba1NpemVdKSB7XG4gICAgICBjbGllbnRba0Nsb3NlZFJlc29sdmVdKClcbiAgICAgIGNsaWVudFtrQ2xvc2VkUmVzb2x2ZV0gPSBudWxsXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBzb2NrZXQgPSBjbGllbnRba1NvY2tldF1cblxuICAgIGlmIChzb2NrZXQgJiYgIXNvY2tldC5kZXN0cm95ZWQgJiYgc29ja2V0LmFscG5Qcm90b2NvbCAhPT0gJ2gyJykge1xuICAgICAgaWYgKGNsaWVudFtrU2l6ZV0gPT09IDApIHtcbiAgICAgICAgaWYgKCFzb2NrZXRba05vUmVmXSAmJiBzb2NrZXQudW5yZWYpIHtcbiAgICAgICAgICBzb2NrZXQudW5yZWYoKVxuICAgICAgICAgIHNvY2tldFtrTm9SZWZdID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHNvY2tldFtrTm9SZWZdICYmIHNvY2tldC5yZWYpIHtcbiAgICAgICAgc29ja2V0LnJlZigpXG4gICAgICAgIHNvY2tldFtrTm9SZWZdID0gZmFsc2VcbiAgICAgIH1cblxuICAgICAgaWYgKGNsaWVudFtrU2l6ZV0gPT09IDApIHtcbiAgICAgICAgaWYgKHNvY2tldFtrUGFyc2VyXS50aW1lb3V0VHlwZSAhPT0gVElNRU9VVF9JRExFKSB7XG4gICAgICAgICAgc29ja2V0W2tQYXJzZXJdLnNldFRpbWVvdXQoY2xpZW50W2tLZWVwQWxpdmVUaW1lb3V0VmFsdWVdLCBUSU1FT1VUX0lETEUpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDAgJiYgc29ja2V0W2tQYXJzZXJdLnN0YXR1c0NvZGUgPCAyMDApIHtcbiAgICAgICAgaWYgKHNvY2tldFtrUGFyc2VyXS50aW1lb3V0VHlwZSAhPT0gVElNRU9VVF9IRUFERVJTKSB7XG4gICAgICAgICAgY29uc3QgcmVxdWVzdCA9IGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF1dXG4gICAgICAgICAgY29uc3QgaGVhZGVyc1RpbWVvdXQgPSByZXF1ZXN0LmhlYWRlcnNUaW1lb3V0ICE9IG51bGxcbiAgICAgICAgICAgID8gcmVxdWVzdC5oZWFkZXJzVGltZW91dFxuICAgICAgICAgICAgOiBjbGllbnRba0hlYWRlcnNUaW1lb3V0XVxuICAgICAgICAgIHNvY2tldFtrUGFyc2VyXS5zZXRUaW1lb3V0KGhlYWRlcnNUaW1lb3V0LCBUSU1FT1VUX0hFQURFUlMpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tCdXN5XSkge1xuICAgICAgY2xpZW50W2tOZWVkRHJhaW5dID0gMlxuICAgIH0gZWxzZSBpZiAoY2xpZW50W2tOZWVkRHJhaW5dID09PSAyKSB7XG4gICAgICBpZiAoc3luYykge1xuICAgICAgICBjbGllbnRba05lZWREcmFpbl0gPSAxXG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soZW1pdERyYWluLCBjbGllbnQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbWl0RHJhaW4oY2xpZW50KVxuICAgICAgfVxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tQZW5kaW5nXSA9PT0gMCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGNsaWVudFtrUnVubmluZ10gPj0gKGNsaWVudFtrUGlwZWxpbmluZ10gfHwgMSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1BlbmRpbmdJZHhdXVxuXG4gICAgaWYgKGNsaWVudFtrVXJsXS5wcm90b2NvbCA9PT0gJ2h0dHBzOicgJiYgY2xpZW50W2tTZXJ2ZXJOYW1lXSAhPT0gcmVxdWVzdC5zZXJ2ZXJuYW1lKSB7XG4gICAgICBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDApIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNsaWVudFtrU2VydmVyTmFtZV0gPSByZXF1ZXN0LnNlcnZlcm5hbWVcblxuICAgICAgaWYgKHNvY2tldCAmJiBzb2NrZXQuc2VydmVybmFtZSAhPT0gcmVxdWVzdC5zZXJ2ZXJuYW1lKSB7XG4gICAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoJ3NlcnZlcm5hbWUgY2hhbmdlZCcpKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tDb25uZWN0aW5nXSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKCFzb2NrZXQgJiYgIWNsaWVudFtrSFRUUDJTZXNzaW9uXSkge1xuICAgICAgY29ubmVjdChjbGllbnQpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoc29ja2V0LmRlc3Ryb3llZCB8fCBzb2NrZXRba1dyaXRpbmddIHx8IHNvY2tldFtrUmVzZXRdIHx8IHNvY2tldFtrQmxvY2tpbmddKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDAgJiYgIXJlcXVlc3QuaWRlbXBvdGVudCkge1xuICAgICAgLy8gTm9uLWlkZW1wb3RlbnQgcmVxdWVzdCBjYW5ub3QgYmUgcmV0cmllZC5cbiAgICAgIC8vIEVuc3VyZSB0aGF0IG5vIG90aGVyIHJlcXVlc3RzIGFyZSBpbmZsaWdodCBhbmRcbiAgICAgIC8vIGNvdWxkIGNhdXNlIGZhaWx1cmUuXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDAgJiYgKHJlcXVlc3QudXBncmFkZSB8fCByZXF1ZXN0Lm1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSkge1xuICAgICAgLy8gRG9uJ3QgZGlzcGF0Y2ggYW4gdXBncmFkZSB1bnRpbCBhbGwgcHJlY2VkaW5nIHJlcXVlc3RzIGhhdmUgY29tcGxldGVkLlxuICAgICAgLy8gQSBtaXNiZWhhdmluZyBzZXJ2ZXIgbWlnaHQgdXBncmFkZSB0aGUgY29ubmVjdGlvbiBiZWZvcmUgYWxsIHBpcGVsaW5lZFxuICAgICAgLy8gcmVxdWVzdCBoYXMgY29tcGxldGVkLlxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGNsaWVudFtrUnVubmluZ10gPiAwICYmIHV0aWwuYm9keUxlbmd0aChyZXF1ZXN0LmJvZHkpICE9PSAwICYmXG4gICAgICAodXRpbC5pc1N0cmVhbShyZXF1ZXN0LmJvZHkpIHx8IHV0aWwuaXNBc3luY0l0ZXJhYmxlKHJlcXVlc3QuYm9keSkpKSB7XG4gICAgICAvLyBSZXF1ZXN0IHdpdGggc3RyZWFtIG9yIGl0ZXJhdG9yIGJvZHkgY2FuIGVycm9yIHdoaWxlIG90aGVyIHJlcXVlc3RzXG4gICAgICAvLyBhcmUgaW5mbGlnaHQgYW5kIGluZGlyZWN0bHkgZXJyb3IgdGhvc2UgYXMgd2VsbC5cbiAgICAgIC8vIEVuc3VyZSB0aGlzIGRvZXNuJ3QgaGFwcGVuIGJ5IHdhaXRpbmcgZm9yIGluZmxpZ2h0XG4gICAgICAvLyB0byBjb21wbGV0ZSBiZWZvcmUgZGlzcGF0Y2hpbmcuXG5cbiAgICAgIC8vIFJlcXVlc3Qgd2l0aCBzdHJlYW0gb3IgaXRlcmF0b3IgYm9keSBjYW5ub3QgYmUgcmV0cmllZC5cbiAgICAgIC8vIEVuc3VyZSB0aGF0IG5vIG90aGVyIHJlcXVlc3RzIGFyZSBpbmZsaWdodCBhbmRcbiAgICAgIC8vIGNvdWxkIGNhdXNlIGZhaWx1cmUuXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIXJlcXVlc3QuYWJvcnRlZCAmJiB3cml0ZShjbGllbnQsIHJlcXVlc3QpKSB7XG4gICAgICBjbGllbnRba1BlbmRpbmdJZHhdKytcbiAgICB9IGVsc2Uge1xuICAgICAgY2xpZW50W2tRdWV1ZV0uc3BsaWNlKGNsaWVudFtrUGVuZGluZ0lkeF0sIDEpXG4gICAgfVxuICB9XG59XG5cbi8vIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM3MjMwI3NlY3Rpb24tMy4zLjJcbmZ1bmN0aW9uIHNob3VsZFNlbmRDb250ZW50TGVuZ3RoIChtZXRob2QpIHtcbiAgcmV0dXJuIG1ldGhvZCAhPT0gJ0dFVCcgJiYgbWV0aG9kICE9PSAnSEVBRCcgJiYgbWV0aG9kICE9PSAnT1BUSU9OUycgJiYgbWV0aG9kICE9PSAnVFJBQ0UnICYmIG1ldGhvZCAhPT0gJ0NPTk5FQ1QnXG59XG5cbmZ1bmN0aW9uIHdyaXRlIChjbGllbnQsIHJlcXVlc3QpIHtcbiAgaWYgKGNsaWVudFtrSFRUUENvbm5WZXJzaW9uXSA9PT0gJ2gyJykge1xuICAgIHdyaXRlSDIoY2xpZW50LCBjbGllbnRba0hUVFAyU2Vzc2lvbl0sIHJlcXVlc3QpXG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCB7IGJvZHksIG1ldGhvZCwgcGF0aCwgaG9zdCwgdXBncmFkZSwgaGVhZGVycywgYmxvY2tpbmcsIHJlc2V0IH0gPSByZXF1ZXN0XG5cbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi00LjMuMVxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTQuMy4yXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNC4zLjVcblxuICAvLyBTZW5kaW5nIGEgcGF5bG9hZCBib2R5IG9uIGEgcmVxdWVzdCB0aGF0IGRvZXMgbm90XG4gIC8vIGV4cGVjdCBpdCBjYW4gY2F1c2UgdW5kZWZpbmVkIGJlaGF2aW9yIG9uIHNvbWVcbiAgLy8gc2VydmVycyBhbmQgY29ycnVwdCBjb25uZWN0aW9uIHN0YXRlLiBEbyBub3RcbiAgLy8gcmUtdXNlIHRoZSBjb25uZWN0aW9uIGZvciBmdXJ0aGVyIHJlcXVlc3RzLlxuXG4gIGNvbnN0IGV4cGVjdHNQYXlsb2FkID0gKFxuICAgIG1ldGhvZCA9PT0gJ1BVVCcgfHxcbiAgICBtZXRob2QgPT09ICdQT1NUJyB8fFxuICAgIG1ldGhvZCA9PT0gJ1BBVENIJ1xuICApXG5cbiAgaWYgKGJvZHkgJiYgdHlwZW9mIGJvZHkucmVhZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIFRyeSB0byByZWFkIEVPRiBpbiBvcmRlciB0byBnZXQgbGVuZ3RoLlxuICAgIGJvZHkucmVhZCgwKVxuICB9XG5cbiAgY29uc3QgYm9keUxlbmd0aCA9IHV0aWwuYm9keUxlbmd0aChib2R5KVxuXG4gIGxldCBjb250ZW50TGVuZ3RoID0gYm9keUxlbmd0aFxuXG4gIGlmIChjb250ZW50TGVuZ3RoID09PSBudWxsKSB7XG4gICAgY29udGVudExlbmd0aCA9IHJlcXVlc3QuY29udGVudExlbmd0aFxuICB9XG5cbiAgaWYgKGNvbnRlbnRMZW5ndGggPT09IDAgJiYgIWV4cGVjdHNQYXlsb2FkKSB7XG4gICAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjMuMlxuICAgIC8vIEEgdXNlciBhZ2VudCBTSE9VTEQgTk9UIHNlbmQgYSBDb250ZW50LUxlbmd0aCBoZWFkZXIgZmllbGQgd2hlblxuICAgIC8vIHRoZSByZXF1ZXN0IG1lc3NhZ2UgZG9lcyBub3QgY29udGFpbiBhIHBheWxvYWQgYm9keSBhbmQgdGhlIG1ldGhvZFxuICAgIC8vIHNlbWFudGljcyBkbyBub3QgYW50aWNpcGF0ZSBzdWNoIGEgYm9keS5cblxuICAgIGNvbnRlbnRMZW5ndGggPSBudWxsXG4gIH1cblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMjA0NlxuICAvLyBBIHVzZXIgYWdlbnQgbWF5IHNlbmQgYSBDb250ZW50LUxlbmd0aCBoZWFkZXIgd2l0aCAwIHZhbHVlLCB0aGlzIHNob3VsZCBiZSBhbGxvd2VkLlxuICBpZiAoc2hvdWxkU2VuZENvbnRlbnRMZW5ndGgobWV0aG9kKSAmJiBjb250ZW50TGVuZ3RoID4gMCAmJiByZXF1ZXN0LmNvbnRlbnRMZW5ndGggIT09IG51bGwgJiYgcmVxdWVzdC5jb250ZW50TGVuZ3RoICE9PSBjb250ZW50TGVuZ3RoKSB7XG4gICAgaWYgKGNsaWVudFtrU3RyaWN0Q29udGVudExlbmd0aF0pIHtcbiAgICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKSlcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIHByb2Nlc3MuZW1pdFdhcm5pbmcobmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpKVxuICB9XG5cbiAgY29uc3Qgc29ja2V0ID0gY2xpZW50W2tTb2NrZXRdXG5cbiAgdHJ5IHtcbiAgICByZXF1ZXN0Lm9uQ29ubmVjdCgoZXJyKSA9PiB7XG4gICAgICBpZiAocmVxdWVzdC5hYm9ydGVkIHx8IHJlcXVlc3QuY29tcGxldGVkKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIgfHwgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKSlcblxuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEluZm9ybWF0aW9uYWxFcnJvcignYWJvcnRlZCcpKVxuICAgIH0pXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIGVycilcbiAgfVxuXG4gIGlmIChyZXF1ZXN0LmFib3J0ZWQpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlmIChtZXRob2QgPT09ICdIRUFEJykge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tY29sbGluYS91bmRpY2kvaXNzdWVzLzI1OFxuICAgIC8vIENsb3NlIGFmdGVyIGEgSEVBRCByZXF1ZXN0IHRvIGludGVyb3Agd2l0aCBtaXNiZWhhdmluZyBzZXJ2ZXJzXG4gICAgLy8gdGhhdCBtYXkgc2VuZCBhIGJvZHkgaW4gdGhlIHJlc3BvbnNlLlxuXG4gICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gIH1cblxuICBpZiAodXBncmFkZSB8fCBtZXRob2QgPT09ICdDT05ORUNUJykge1xuICAgIC8vIE9uIENPTk5FQ1Qgb3IgdXBncmFkZSwgYmxvY2sgcGlwZWxpbmUgZnJvbSBkaXNwYXRjaGluZyBmdXJ0aGVyXG4gICAgLy8gcmVxdWVzdHMgb24gdGhpcyBjb25uZWN0aW9uLlxuXG4gICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gIH1cblxuICBpZiAocmVzZXQgIT0gbnVsbCkge1xuICAgIHNvY2tldFtrUmVzZXRdID0gcmVzZXRcbiAgfVxuXG4gIGlmIChjbGllbnRba01heFJlcXVlc3RzXSAmJiBzb2NrZXRba0NvdW50ZXJdKysgPj0gY2xpZW50W2tNYXhSZXF1ZXN0c10pIHtcbiAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgfVxuXG4gIGlmIChibG9ja2luZykge1xuICAgIHNvY2tldFtrQmxvY2tpbmddID0gdHJ1ZVxuICB9XG5cbiAgbGV0IGhlYWRlciA9IGAke21ldGhvZH0gJHtwYXRofSBIVFRQLzEuMVxcclxcbmBcblxuICBpZiAodHlwZW9mIGhvc3QgPT09ICdzdHJpbmcnKSB7XG4gICAgaGVhZGVyICs9IGBob3N0OiAke2hvc3R9XFxyXFxuYFxuICB9IGVsc2Uge1xuICAgIGhlYWRlciArPSBjbGllbnRba0hvc3RIZWFkZXJdXG4gIH1cblxuICBpZiAodXBncmFkZSkge1xuICAgIGhlYWRlciArPSBgY29ubmVjdGlvbjogdXBncmFkZVxcclxcbnVwZ3JhZGU6ICR7dXBncmFkZX1cXHJcXG5gXG4gIH0gZWxzZSBpZiAoY2xpZW50W2tQaXBlbGluaW5nXSAmJiAhc29ja2V0W2tSZXNldF0pIHtcbiAgICBoZWFkZXIgKz0gJ2Nvbm5lY3Rpb246IGtlZXAtYWxpdmVcXHJcXG4nXG4gIH0gZWxzZSB7XG4gICAgaGVhZGVyICs9ICdjb25uZWN0aW9uOiBjbG9zZVxcclxcbidcbiAgfVxuXG4gIGlmIChoZWFkZXJzKSB7XG4gICAgaGVhZGVyICs9IGhlYWRlcnNcbiAgfVxuXG4gIGlmIChjaGFubmVscy5zZW5kSGVhZGVycy5oYXNTdWJzY3JpYmVycykge1xuICAgIGNoYW5uZWxzLnNlbmRIZWFkZXJzLnB1Ymxpc2goeyByZXF1ZXN0LCBoZWFkZXJzOiBoZWFkZXIsIHNvY2tldCB9KVxuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2U6IGFzc2VydGlvbiAqL1xuICBpZiAoIWJvZHkgfHwgYm9keUxlbmd0aCA9PT0gMCkge1xuICAgIGlmIChjb250ZW50TGVuZ3RoID09PSAwKSB7XG4gICAgICBzb2NrZXQud3JpdGUoYCR7aGVhZGVyfWNvbnRlbnQtbGVuZ3RoOiAwXFxyXFxuXFxyXFxuYCwgJ2xhdGluMScpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydChjb250ZW50TGVuZ3RoID09PSBudWxsLCAnbm8gYm9keSBtdXN0IG5vdCBoYXZlIGNvbnRlbnQgbGVuZ3RoJylcbiAgICAgIHNvY2tldC53cml0ZShgJHtoZWFkZXJ9XFxyXFxuYCwgJ2xhdGluMScpXG4gICAgfVxuICAgIHJlcXVlc3Qub25SZXF1ZXN0U2VudCgpXG4gIH0gZWxzZSBpZiAodXRpbC5pc0J1ZmZlcihib2R5KSkge1xuICAgIGFzc2VydChjb250ZW50TGVuZ3RoID09PSBib2R5LmJ5dGVMZW5ndGgsICdidWZmZXIgYm9keSBtdXN0IGhhdmUgY29udGVudCBsZW5ndGgnKVxuXG4gICAgc29ja2V0LmNvcmsoKVxuICAgIHNvY2tldC53cml0ZShgJHtoZWFkZXJ9Y29udGVudC1sZW5ndGg6ICR7Y29udGVudExlbmd0aH1cXHJcXG5cXHJcXG5gLCAnbGF0aW4xJylcbiAgICBzb2NrZXQud3JpdGUoYm9keSlcbiAgICBzb2NrZXQudW5jb3JrKClcbiAgICByZXF1ZXN0Lm9uQm9keVNlbnQoYm9keSlcbiAgICByZXF1ZXN0Lm9uUmVxdWVzdFNlbnQoKVxuICAgIGlmICghZXhwZWN0c1BheWxvYWQpIHtcbiAgICAgIHNvY2tldFtrUmVzZXRdID0gdHJ1ZVxuICAgIH1cbiAgfSBlbHNlIGlmICh1dGlsLmlzQmxvYkxpa2UoYm9keSkpIHtcbiAgICBpZiAodHlwZW9mIGJvZHkuc3RyZWFtID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB3cml0ZUl0ZXJhYmxlKHsgYm9keTogYm9keS5zdHJlYW0oKSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgd3JpdGVCbG9iKHsgYm9keSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQgfSlcbiAgICB9XG4gIH0gZWxzZSBpZiAodXRpbC5pc1N0cmVhbShib2R5KSkge1xuICAgIHdyaXRlU3RyZWFtKHsgYm9keSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQgfSlcbiAgfSBlbHNlIGlmICh1dGlsLmlzSXRlcmFibGUoYm9keSkpIHtcbiAgICB3cml0ZUl0ZXJhYmxlKHsgYm9keSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQgfSlcbiAgfSBlbHNlIHtcbiAgICBhc3NlcnQoZmFsc2UpXG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiB3cml0ZUgyIChjbGllbnQsIHNlc3Npb24sIHJlcXVlc3QpIHtcbiAgY29uc3QgeyBib2R5LCBtZXRob2QsIHBhdGgsIGhvc3QsIHVwZ3JhZGUsIGV4cGVjdENvbnRpbnVlLCBzaWduYWwsIGhlYWRlcnM6IHJlcUhlYWRlcnMgfSA9IHJlcXVlc3RcblxuICBsZXQgaGVhZGVyc1xuICBpZiAodHlwZW9mIHJlcUhlYWRlcnMgPT09ICdzdHJpbmcnKSBoZWFkZXJzID0gUmVxdWVzdFtrSFRUUDJDb3B5SGVhZGVyc10ocmVxSGVhZGVycy50cmltKCkpXG4gIGVsc2UgaGVhZGVycyA9IHJlcUhlYWRlcnNcblxuICBpZiAodXBncmFkZSkge1xuICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIG5ldyBFcnJvcignVXBncmFkZSBub3Qgc3VwcG9ydGVkIGZvciBIMicpKVxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBUT0RPKEhUVFAvMik6IFNob3VsZCB3ZSBjYWxsIG9uQ29ubmVjdCBpbW1lZGlhdGVseSBvciBvbiBzdHJlYW0gcmVhZHkgZXZlbnQ/XG4gICAgcmVxdWVzdC5vbkNvbm5lY3QoKGVycikgPT4ge1xuICAgICAgaWYgKHJlcXVlc3QuYWJvcnRlZCB8fCByZXF1ZXN0LmNvbXBsZXRlZCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyIHx8IG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKCkpXG4gICAgfSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyKVxuICB9XG5cbiAgaWYgKHJlcXVlc3QuYWJvcnRlZCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLyoqIEB0eXBlIHtpbXBvcnQoJ25vZGU6aHR0cDInKS5DbGllbnRIdHRwMlN0cmVhbX0gKi9cbiAgbGV0IHN0cmVhbVxuICBjb25zdCBoMlN0YXRlID0gY2xpZW50W2tIVFRQMlNlc3Npb25TdGF0ZV1cblxuICBoZWFkZXJzW0hUVFAyX0hFQURFUl9BVVRIT1JJVFldID0gaG9zdCB8fCBjbGllbnRba0hvc3RdXG4gIGhlYWRlcnNbSFRUUDJfSEVBREVSX01FVEhPRF0gPSBtZXRob2RcblxuICBpZiAobWV0aG9kID09PSAnQ09OTkVDVCcpIHtcbiAgICBzZXNzaW9uLnJlZigpXG4gICAgLy8gd2UgYXJlIGFscmVhZHkgY29ubmVjdGVkLCBzdHJlYW1zIGFyZSBwZW5kaW5nLCBmaXJzdCByZXF1ZXN0XG4gICAgLy8gd2lsbCBjcmVhdGUgYSBuZXcgc3RyZWFtLiBXZSB0cmlnZ2VyIGEgcmVxdWVzdCB0byBjcmVhdGUgdGhlIHN0cmVhbSBhbmQgd2FpdCB1bnRpbFxuICAgIC8vIGByZWFkeWAgZXZlbnQgaXMgdHJpZ2dlcmVkXG4gICAgLy8gV2UgZGlzYWJsZWQgZW5kU3RyZWFtIHRvIGFsbG93IHRoZSB1c2VyIHRvIHdyaXRlIHRvIHRoZSBzdHJlYW1cbiAgICBzdHJlYW0gPSBzZXNzaW9uLnJlcXVlc3QoaGVhZGVycywgeyBlbmRTdHJlYW06IGZhbHNlLCBzaWduYWwgfSlcblxuICAgIGlmIChzdHJlYW0uaWQgJiYgIXN0cmVhbS5wZW5kaW5nKSB7XG4gICAgICByZXF1ZXN0Lm9uVXBncmFkZShudWxsLCBudWxsLCBzdHJlYW0pXG4gICAgICArK2gyU3RhdGUub3BlblN0cmVhbXNcbiAgICB9IGVsc2Uge1xuICAgICAgc3RyZWFtLm9uY2UoJ3JlYWR5JywgKCkgPT4ge1xuICAgICAgICByZXF1ZXN0Lm9uVXBncmFkZShudWxsLCBudWxsLCBzdHJlYW0pXG4gICAgICAgICsraDJTdGF0ZS5vcGVuU3RyZWFtc1xuICAgICAgfSlcbiAgICB9XG5cbiAgICBzdHJlYW0ub25jZSgnY2xvc2UnLCAoKSA9PiB7XG4gICAgICBoMlN0YXRlLm9wZW5TdHJlYW1zIC09IDFcbiAgICAgIC8vIFRPRE8oSFRUUC8yKTogdW5yZWYgb25seSBpZiBjdXJyZW50IHN0cmVhbXMgY291bnQgaXMgMFxuICAgICAgaWYgKGgyU3RhdGUub3BlblN0cmVhbXMgPT09IDApIHNlc3Npb24udW5yZWYoKVxuICAgIH0pXG5cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc1NDAjc2VjdGlvbi04LjNcbiAgLy8gOnBhdGggYW5kIDpzY2hlbWUgaGVhZGVycyBtdXN0IGJlIG9taXRlZCB3aGVuIHNlbmRpbmcgQ09OTkVDVFxuXG4gIGhlYWRlcnNbSFRUUDJfSEVBREVSX1BBVEhdID0gcGF0aFxuICBoZWFkZXJzW0hUVFAyX0hFQURFUl9TQ0hFTUVdID0gJ2h0dHBzJ1xuXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNC4zLjFcbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi00LjMuMlxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTQuMy41XG5cbiAgLy8gU2VuZGluZyBhIHBheWxvYWQgYm9keSBvbiBhIHJlcXVlc3QgdGhhdCBkb2VzIG5vdFxuICAvLyBleHBlY3QgaXQgY2FuIGNhdXNlIHVuZGVmaW5lZCBiZWhhdmlvciBvbiBzb21lXG4gIC8vIHNlcnZlcnMgYW5kIGNvcnJ1cHQgY29ubmVjdGlvbiBzdGF0ZS4gRG8gbm90XG4gIC8vIHJlLXVzZSB0aGUgY29ubmVjdGlvbiBmb3IgZnVydGhlciByZXF1ZXN0cy5cblxuICBjb25zdCBleHBlY3RzUGF5bG9hZCA9IChcbiAgICBtZXRob2QgPT09ICdQVVQnIHx8XG4gICAgbWV0aG9kID09PSAnUE9TVCcgfHxcbiAgICBtZXRob2QgPT09ICdQQVRDSCdcbiAgKVxuXG4gIGlmIChib2R5ICYmIHR5cGVvZiBib2R5LnJlYWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBUcnkgdG8gcmVhZCBFT0YgaW4gb3JkZXIgdG8gZ2V0IGxlbmd0aC5cbiAgICBib2R5LnJlYWQoMClcbiAgfVxuXG4gIGxldCBjb250ZW50TGVuZ3RoID0gdXRpbC5ib2R5TGVuZ3RoKGJvZHkpXG5cbiAgaWYgKGNvbnRlbnRMZW5ndGggPT0gbnVsbCkge1xuICAgIGNvbnRlbnRMZW5ndGggPSByZXF1ZXN0LmNvbnRlbnRMZW5ndGhcbiAgfVxuXG4gIGlmIChjb250ZW50TGVuZ3RoID09PSAwIHx8ICFleHBlY3RzUGF5bG9hZCkge1xuICAgIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4zLjJcbiAgICAvLyBBIHVzZXIgYWdlbnQgU0hPVUxEIE5PVCBzZW5kIGEgQ29udGVudC1MZW5ndGggaGVhZGVyIGZpZWxkIHdoZW5cbiAgICAvLyB0aGUgcmVxdWVzdCBtZXNzYWdlIGRvZXMgbm90IGNvbnRhaW4gYSBwYXlsb2FkIGJvZHkgYW5kIHRoZSBtZXRob2RcbiAgICAvLyBzZW1hbnRpY3MgZG8gbm90IGFudGljaXBhdGUgc3VjaCBhIGJvZHkuXG5cbiAgICBjb250ZW50TGVuZ3RoID0gbnVsbFxuICB9XG5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzIwNDZcbiAgLy8gQSB1c2VyIGFnZW50IG1heSBzZW5kIGEgQ29udGVudC1MZW5ndGggaGVhZGVyIHdpdGggMCB2YWx1ZSwgdGhpcyBzaG91bGQgYmUgYWxsb3dlZC5cbiAgaWYgKHNob3VsZFNlbmRDb250ZW50TGVuZ3RoKG1ldGhvZCkgJiYgY29udGVudExlbmd0aCA+IDAgJiYgcmVxdWVzdC5jb250ZW50TGVuZ3RoICE9IG51bGwgJiYgcmVxdWVzdC5jb250ZW50TGVuZ3RoICE9PSBjb250ZW50TGVuZ3RoKSB7XG4gICAgaWYgKGNsaWVudFtrU3RyaWN0Q29udGVudExlbmd0aF0pIHtcbiAgICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKSlcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIHByb2Nlc3MuZW1pdFdhcm5pbmcobmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpKVxuICB9XG5cbiAgaWYgKGNvbnRlbnRMZW5ndGggIT0gbnVsbCkge1xuICAgIGFzc2VydChib2R5LCAnbm8gYm9keSBtdXN0IG5vdCBoYXZlIGNvbnRlbnQgbGVuZ3RoJylcbiAgICBoZWFkZXJzW0hUVFAyX0hFQURFUl9DT05URU5UX0xFTkdUSF0gPSBgJHtjb250ZW50TGVuZ3RofWBcbiAgfVxuXG4gIHNlc3Npb24ucmVmKClcblxuICBjb25zdCBzaG91bGRFbmRTdHJlYW0gPSBtZXRob2QgPT09ICdHRVQnIHx8IG1ldGhvZCA9PT0gJ0hFQUQnXG4gIGlmIChleHBlY3RDb250aW51ZSkge1xuICAgIGhlYWRlcnNbSFRUUDJfSEVBREVSX0VYUEVDVF0gPSAnMTAwLWNvbnRpbnVlJ1xuICAgIHN0cmVhbSA9IHNlc3Npb24ucmVxdWVzdChoZWFkZXJzLCB7IGVuZFN0cmVhbTogc2hvdWxkRW5kU3RyZWFtLCBzaWduYWwgfSlcblxuICAgIHN0cmVhbS5vbmNlKCdjb250aW51ZScsIHdyaXRlQm9keUgyKVxuICB9IGVsc2Uge1xuICAgIHN0cmVhbSA9IHNlc3Npb24ucmVxdWVzdChoZWFkZXJzLCB7XG4gICAgICBlbmRTdHJlYW06IHNob3VsZEVuZFN0cmVhbSxcbiAgICAgIHNpZ25hbFxuICAgIH0pXG4gICAgd3JpdGVCb2R5SDIoKVxuICB9XG5cbiAgLy8gSW5jcmVtZW50IGNvdW50ZXIgYXMgd2UgaGF2ZSBuZXcgc2V2ZXJhbCBzdHJlYW1zIG9wZW5cbiAgKytoMlN0YXRlLm9wZW5TdHJlYW1zXG5cbiAgc3RyZWFtLm9uY2UoJ3Jlc3BvbnNlJywgaGVhZGVycyA9PiB7XG4gICAgY29uc3QgeyBbSFRUUDJfSEVBREVSX1NUQVRVU106IHN0YXR1c0NvZGUsIC4uLnJlYWxIZWFkZXJzIH0gPSBoZWFkZXJzXG5cbiAgICBpZiAocmVxdWVzdC5vbkhlYWRlcnMoTnVtYmVyKHN0YXR1c0NvZGUpLCByZWFsSGVhZGVycywgc3RyZWFtLnJlc3VtZS5iaW5kKHN0cmVhbSksICcnKSA9PT0gZmFsc2UpIHtcbiAgICAgIHN0cmVhbS5wYXVzZSgpXG4gICAgfVxuICB9KVxuXG4gIHN0cmVhbS5vbmNlKCdlbmQnLCAoKSA9PiB7XG4gICAgcmVxdWVzdC5vbkNvbXBsZXRlKFtdKVxuICB9KVxuXG4gIHN0cmVhbS5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgIGlmIChyZXF1ZXN0Lm9uRGF0YShjaHVuaykgPT09IGZhbHNlKSB7XG4gICAgICBzdHJlYW0ucGF1c2UoKVxuICAgIH1cbiAgfSlcblxuICBzdHJlYW0ub25jZSgnY2xvc2UnLCAoKSA9PiB7XG4gICAgaDJTdGF0ZS5vcGVuU3RyZWFtcyAtPSAxXG4gICAgLy8gVE9ETyhIVFRQLzIpOiB1bnJlZiBvbmx5IGlmIGN1cnJlbnQgc3RyZWFtcyBjb3VudCBpcyAwXG4gICAgaWYgKGgyU3RhdGUub3BlblN0cmVhbXMgPT09IDApIHtcbiAgICAgIHNlc3Npb24udW5yZWYoKVxuICAgIH1cbiAgfSlcblxuICBzdHJlYW0ub25jZSgnZXJyb3InLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgaWYgKGNsaWVudFtrSFRUUDJTZXNzaW9uXSAmJiAhY2xpZW50W2tIVFRQMlNlc3Npb25dLmRlc3Ryb3llZCAmJiAhdGhpcy5jbG9zZWQgJiYgIXRoaXMuZGVzdHJveWVkKSB7XG4gICAgICBoMlN0YXRlLnN0cmVhbXMgLT0gMVxuICAgICAgdXRpbC5kZXN0cm95KHN0cmVhbSwgZXJyKVxuICAgIH1cbiAgfSlcblxuICBzdHJlYW0ub25jZSgnZnJhbWVFcnJvcicsICh0eXBlLCBjb2RlKSA9PiB7XG4gICAgY29uc3QgZXJyID0gbmV3IEluZm9ybWF0aW9uYWxFcnJvcihgSFRUUC8yOiBcImZyYW1lRXJyb3JcIiByZWNlaXZlZCAtIHR5cGUgJHt0eXBlfSwgY29kZSAke2NvZGV9YClcbiAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIpXG5cbiAgICBpZiAoY2xpZW50W2tIVFRQMlNlc3Npb25dICYmICFjbGllbnRba0hUVFAyU2Vzc2lvbl0uZGVzdHJveWVkICYmICF0aGlzLmNsb3NlZCAmJiAhdGhpcy5kZXN0cm95ZWQpIHtcbiAgICAgIGgyU3RhdGUuc3RyZWFtcyAtPSAxXG4gICAgICB1dGlsLmRlc3Ryb3koc3RyZWFtLCBlcnIpXG4gICAgfVxuICB9KVxuXG4gIC8vIHN0cmVhbS5vbignYWJvcnRlZCcsICgpID0+IHtcbiAgLy8gICAvLyBUT0RPKEhUVFAvMik6IFN1cHBvcnQgYWJvcnRlZFxuICAvLyB9KVxuXG4gIC8vIHN0cmVhbS5vbigndGltZW91dCcsICgpID0+IHtcbiAgLy8gICAvLyBUT0RPKEhUVFAvMik6IFN1cHBvcnQgdGltZW91dFxuICAvLyB9KVxuXG4gIC8vIHN0cmVhbS5vbigncHVzaCcsIGhlYWRlcnMgPT4ge1xuICAvLyAgIC8vIFRPRE8oSFRUUC8yKTogU3VwcG9yIHB1c2hcbiAgLy8gfSlcblxuICAvLyBzdHJlYW0ub24oJ3RyYWlsZXJzJywgaGVhZGVycyA9PiB7XG4gIC8vICAgLy8gVE9ETyhIVFRQLzIpOiBTdXBwb3J0IHRyYWlsZXJzXG4gIC8vIH0pXG5cbiAgcmV0dXJuIHRydWVcblxuICBmdW5jdGlvbiB3cml0ZUJvZHlIMiAoKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2U6IGFzc2VydGlvbiAqL1xuICAgIGlmICghYm9keSkge1xuICAgICAgcmVxdWVzdC5vblJlcXVlc3RTZW50KClcbiAgICB9IGVsc2UgaWYgKHV0aWwuaXNCdWZmZXIoYm9keSkpIHtcbiAgICAgIGFzc2VydChjb250ZW50TGVuZ3RoID09PSBib2R5LmJ5dGVMZW5ndGgsICdidWZmZXIgYm9keSBtdXN0IGhhdmUgY29udGVudCBsZW5ndGgnKVxuICAgICAgc3RyZWFtLmNvcmsoKVxuICAgICAgc3RyZWFtLndyaXRlKGJvZHkpXG4gICAgICBzdHJlYW0udW5jb3JrKClcbiAgICAgIHN0cmVhbS5lbmQoKVxuICAgICAgcmVxdWVzdC5vbkJvZHlTZW50KGJvZHkpXG4gICAgICByZXF1ZXN0Lm9uUmVxdWVzdFNlbnQoKVxuICAgIH0gZWxzZSBpZiAodXRpbC5pc0Jsb2JMaWtlKGJvZHkpKSB7XG4gICAgICBpZiAodHlwZW9mIGJvZHkuc3RyZWFtID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHdyaXRlSXRlcmFibGUoe1xuICAgICAgICAgIGNsaWVudCxcbiAgICAgICAgICByZXF1ZXN0LFxuICAgICAgICAgIGNvbnRlbnRMZW5ndGgsXG4gICAgICAgICAgaDJzdHJlYW06IHN0cmVhbSxcbiAgICAgICAgICBleHBlY3RzUGF5bG9hZCxcbiAgICAgICAgICBib2R5OiBib2R5LnN0cmVhbSgpLFxuICAgICAgICAgIHNvY2tldDogY2xpZW50W2tTb2NrZXRdLFxuICAgICAgICAgIGhlYWRlcjogJydcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdyaXRlQmxvYih7XG4gICAgICAgICAgYm9keSxcbiAgICAgICAgICBjbGllbnQsXG4gICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgICBjb250ZW50TGVuZ3RoLFxuICAgICAgICAgIGV4cGVjdHNQYXlsb2FkLFxuICAgICAgICAgIGgyc3RyZWFtOiBzdHJlYW0sXG4gICAgICAgICAgaGVhZGVyOiAnJyxcbiAgICAgICAgICBzb2NrZXQ6IGNsaWVudFtrU29ja2V0XVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodXRpbC5pc1N0cmVhbShib2R5KSkge1xuICAgICAgd3JpdGVTdHJlYW0oe1xuICAgICAgICBib2R5LFxuICAgICAgICBjbGllbnQsXG4gICAgICAgIHJlcXVlc3QsXG4gICAgICAgIGNvbnRlbnRMZW5ndGgsXG4gICAgICAgIGV4cGVjdHNQYXlsb2FkLFxuICAgICAgICBzb2NrZXQ6IGNsaWVudFtrU29ja2V0XSxcbiAgICAgICAgaDJzdHJlYW06IHN0cmVhbSxcbiAgICAgICAgaGVhZGVyOiAnJ1xuICAgICAgfSlcbiAgICB9IGVsc2UgaWYgKHV0aWwuaXNJdGVyYWJsZShib2R5KSkge1xuICAgICAgd3JpdGVJdGVyYWJsZSh7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGNsaWVudCxcbiAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgZXhwZWN0c1BheWxvYWQsXG4gICAgICAgIGhlYWRlcjogJycsXG4gICAgICAgIGgyc3RyZWFtOiBzdHJlYW0sXG4gICAgICAgIHNvY2tldDogY2xpZW50W2tTb2NrZXRdXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBhc3NlcnQoZmFsc2UpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHdyaXRlU3RyZWFtICh7IGgyc3RyZWFtLCBib2R5LCBjbGllbnQsIHJlcXVlc3QsIHNvY2tldCwgY29udGVudExlbmd0aCwgaGVhZGVyLCBleHBlY3RzUGF5bG9hZCB9KSB7XG4gIGFzc2VydChjb250ZW50TGVuZ3RoICE9PSAwIHx8IGNsaWVudFtrUnVubmluZ10gPT09IDAsICdzdHJlYW0gYm9keSBjYW5ub3QgYmUgcGlwZWxpbmVkJylcblxuICBpZiAoY2xpZW50W2tIVFRQQ29ublZlcnNpb25dID09PSAnaDInKSB7XG4gICAgLy8gRm9yIEhUVFAvMiwgaXMgZW5vdWdoIHRvIHBpcGUgdGhlIHN0cmVhbVxuICAgIGNvbnN0IHBpcGUgPSBwaXBlbGluZShcbiAgICAgIGJvZHksXG4gICAgICBoMnN0cmVhbSxcbiAgICAgIChlcnIpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHV0aWwuZGVzdHJveShib2R5LCBlcnIpXG4gICAgICAgICAgdXRpbC5kZXN0cm95KGgyc3RyZWFtLCBlcnIpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVxdWVzdC5vblJlcXVlc3RTZW50KClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIClcblxuICAgIHBpcGUub24oJ2RhdGEnLCBvblBpcGVEYXRhKVxuICAgIHBpcGUub25jZSgnZW5kJywgKCkgPT4ge1xuICAgICAgcGlwZS5yZW1vdmVMaXN0ZW5lcignZGF0YScsIG9uUGlwZURhdGEpXG4gICAgICB1dGlsLmRlc3Ryb3kocGlwZSlcbiAgICB9KVxuXG4gICAgZnVuY3Rpb24gb25QaXBlRGF0YSAoY2h1bmspIHtcbiAgICAgIHJlcXVlc3Qub25Cb2R5U2VudChjaHVuaylcbiAgICB9XG5cbiAgICByZXR1cm5cbiAgfVxuXG4gIGxldCBmaW5pc2hlZCA9IGZhbHNlXG5cbiAgY29uc3Qgd3JpdGVyID0gbmV3IEFzeW5jV3JpdGVyKHsgc29ja2V0LCByZXF1ZXN0LCBjb250ZW50TGVuZ3RoLCBjbGllbnQsIGV4cGVjdHNQYXlsb2FkLCBoZWFkZXIgfSlcblxuICBjb25zdCBvbkRhdGEgPSBmdW5jdGlvbiAoY2h1bmspIHtcbiAgICBpZiAoZmluaXNoZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBpZiAoIXdyaXRlci53cml0ZShjaHVuaykgJiYgdGhpcy5wYXVzZSkge1xuICAgICAgICB0aGlzLnBhdXNlKClcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHV0aWwuZGVzdHJveSh0aGlzLCBlcnIpXG4gICAgfVxuICB9XG4gIGNvbnN0IG9uRHJhaW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGZpbmlzaGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoYm9keS5yZXN1bWUpIHtcbiAgICAgIGJvZHkucmVzdW1lKClcbiAgICB9XG4gIH1cbiAgY29uc3Qgb25BYm9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoZmluaXNoZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjb25zdCBlcnIgPSBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gb25GaW5pc2hlZChlcnIpKVxuICB9XG4gIGNvbnN0IG9uRmluaXNoZWQgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgaWYgKGZpbmlzaGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBmaW5pc2hlZCA9IHRydWVcblxuICAgIGFzc2VydChzb2NrZXQuZGVzdHJveWVkIHx8IChzb2NrZXRba1dyaXRpbmddICYmIGNsaWVudFtrUnVubmluZ10gPD0gMSkpXG5cbiAgICBzb2NrZXRcbiAgICAgIC5vZmYoJ2RyYWluJywgb25EcmFpbilcbiAgICAgIC5vZmYoJ2Vycm9yJywgb25GaW5pc2hlZClcblxuICAgIGJvZHlcbiAgICAgIC5yZW1vdmVMaXN0ZW5lcignZGF0YScsIG9uRGF0YSlcbiAgICAgIC5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25GaW5pc2hlZClcbiAgICAgIC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbkZpbmlzaGVkKVxuICAgICAgLnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uQWJvcnQpXG5cbiAgICBpZiAoIWVycikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgd3JpdGVyLmVuZCgpXG4gICAgICB9IGNhdGNoIChlcikge1xuICAgICAgICBlcnIgPSBlclxuICAgICAgfVxuICAgIH1cblxuICAgIHdyaXRlci5kZXN0cm95KGVycilcblxuICAgIGlmIChlcnIgJiYgKGVyci5jb2RlICE9PSAnVU5EX0VSUl9JTkZPJyB8fCBlcnIubWVzc2FnZSAhPT0gJ3Jlc2V0JykpIHtcbiAgICAgIHV0aWwuZGVzdHJveShib2R5LCBlcnIpXG4gICAgfSBlbHNlIHtcbiAgICAgIHV0aWwuZGVzdHJveShib2R5KVxuICAgIH1cbiAgfVxuXG4gIGJvZHlcbiAgICAub24oJ2RhdGEnLCBvbkRhdGEpXG4gICAgLm9uKCdlbmQnLCBvbkZpbmlzaGVkKVxuICAgIC5vbignZXJyb3InLCBvbkZpbmlzaGVkKVxuICAgIC5vbignY2xvc2UnLCBvbkFib3J0KVxuXG4gIGlmIChib2R5LnJlc3VtZSkge1xuICAgIGJvZHkucmVzdW1lKClcbiAgfVxuXG4gIHNvY2tldFxuICAgIC5vbignZHJhaW4nLCBvbkRyYWluKVxuICAgIC5vbignZXJyb3InLCBvbkZpbmlzaGVkKVxufVxuXG5hc3luYyBmdW5jdGlvbiB3cml0ZUJsb2IgKHsgaDJzdHJlYW0sIGJvZHksIGNsaWVudCwgcmVxdWVzdCwgc29ja2V0LCBjb250ZW50TGVuZ3RoLCBoZWFkZXIsIGV4cGVjdHNQYXlsb2FkIH0pIHtcbiAgYXNzZXJ0KGNvbnRlbnRMZW5ndGggPT09IGJvZHkuc2l6ZSwgJ2Jsb2IgYm9keSBtdXN0IGhhdmUgY29udGVudCBsZW5ndGgnKVxuXG4gIGNvbnN0IGlzSDIgPSBjbGllbnRba0hUVFBDb25uVmVyc2lvbl0gPT09ICdoMidcbiAgdHJ5IHtcbiAgICBpZiAoY29udGVudExlbmd0aCAhPSBudWxsICYmIGNvbnRlbnRMZW5ndGggIT09IGJvZHkuc2l6ZSkge1xuICAgICAgdGhyb3cgbmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpXG4gICAgfVxuXG4gICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20oYXdhaXQgYm9keS5hcnJheUJ1ZmZlcigpKVxuXG4gICAgaWYgKGlzSDIpIHtcbiAgICAgIGgyc3RyZWFtLmNvcmsoKVxuICAgICAgaDJzdHJlYW0ud3JpdGUoYnVmZmVyKVxuICAgICAgaDJzdHJlYW0udW5jb3JrKClcbiAgICB9IGVsc2Uge1xuICAgICAgc29ja2V0LmNvcmsoKVxuICAgICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn1jb250ZW50LWxlbmd0aDogJHtjb250ZW50TGVuZ3RofVxcclxcblxcclxcbmAsICdsYXRpbjEnKVxuICAgICAgc29ja2V0LndyaXRlKGJ1ZmZlcilcbiAgICAgIHNvY2tldC51bmNvcmsoKVxuICAgIH1cblxuICAgIHJlcXVlc3Qub25Cb2R5U2VudChidWZmZXIpXG4gICAgcmVxdWVzdC5vblJlcXVlc3RTZW50KClcblxuICAgIGlmICghZXhwZWN0c1BheWxvYWQpIHtcbiAgICAgIHNvY2tldFtrUmVzZXRdID0gdHJ1ZVxuICAgIH1cblxuICAgIHJlc3VtZShjbGllbnQpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHV0aWwuZGVzdHJveShpc0gyID8gaDJzdHJlYW0gOiBzb2NrZXQsIGVycilcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiB3cml0ZUl0ZXJhYmxlICh7IGgyc3RyZWFtLCBib2R5LCBjbGllbnQsIHJlcXVlc3QsIHNvY2tldCwgY29udGVudExlbmd0aCwgaGVhZGVyLCBleHBlY3RzUGF5bG9hZCB9KSB7XG4gIGFzc2VydChjb250ZW50TGVuZ3RoICE9PSAwIHx8IGNsaWVudFtrUnVubmluZ10gPT09IDAsICdpdGVyYXRvciBib2R5IGNhbm5vdCBiZSBwaXBlbGluZWQnKVxuXG4gIGxldCBjYWxsYmFjayA9IG51bGxcbiAgZnVuY3Rpb24gb25EcmFpbiAoKSB7XG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBjb25zdCBjYiA9IGNhbGxiYWNrXG4gICAgICBjYWxsYmFjayA9IG51bGxcbiAgICAgIGNiKClcbiAgICB9XG4gIH1cblxuICBjb25zdCB3YWl0Rm9yRHJhaW4gPSAoKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgYXNzZXJ0KGNhbGxiYWNrID09PSBudWxsKVxuXG4gICAgaWYgKHNvY2tldFtrRXJyb3JdKSB7XG4gICAgICByZWplY3Qoc29ja2V0W2tFcnJvcl0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbGxiYWNrID0gcmVzb2x2ZVxuICAgIH1cbiAgfSlcblxuICBpZiAoY2xpZW50W2tIVFRQQ29ublZlcnNpb25dID09PSAnaDInKSB7XG4gICAgaDJzdHJlYW1cbiAgICAgIC5vbignY2xvc2UnLCBvbkRyYWluKVxuICAgICAgLm9uKCdkcmFpbicsIG9uRHJhaW4pXG5cbiAgICB0cnkge1xuICAgICAgLy8gSXQncyB1cCB0byB0aGUgdXNlciB0byBzb21laG93IGFib3J0IHRoZSBhc3luYyBpdGVyYWJsZS5cbiAgICAgIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgYm9keSkge1xuICAgICAgICBpZiAoc29ja2V0W2tFcnJvcl0pIHtcbiAgICAgICAgICB0aHJvdyBzb2NrZXRba0Vycm9yXVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzID0gaDJzdHJlYW0ud3JpdGUoY2h1bmspXG4gICAgICAgIHJlcXVlc3Qub25Cb2R5U2VudChjaHVuaylcbiAgICAgICAgaWYgKCFyZXMpIHtcbiAgICAgICAgICBhd2FpdCB3YWl0Rm9yRHJhaW4oKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBoMnN0cmVhbS5kZXN0cm95KGVycilcbiAgICB9IGZpbmFsbHkge1xuICAgICAgcmVxdWVzdC5vblJlcXVlc3RTZW50KClcbiAgICAgIGgyc3RyZWFtLmVuZCgpXG4gICAgICBoMnN0cmVhbVxuICAgICAgICAub2ZmKCdjbG9zZScsIG9uRHJhaW4pXG4gICAgICAgIC5vZmYoJ2RyYWluJywgb25EcmFpbilcbiAgICB9XG5cbiAgICByZXR1cm5cbiAgfVxuXG4gIHNvY2tldFxuICAgIC5vbignY2xvc2UnLCBvbkRyYWluKVxuICAgIC5vbignZHJhaW4nLCBvbkRyYWluKVxuXG4gIGNvbnN0IHdyaXRlciA9IG5ldyBBc3luY1dyaXRlcih7IHNvY2tldCwgcmVxdWVzdCwgY29udGVudExlbmd0aCwgY2xpZW50LCBleHBlY3RzUGF5bG9hZCwgaGVhZGVyIH0pXG4gIHRyeSB7XG4gICAgLy8gSXQncyB1cCB0byB0aGUgdXNlciB0byBzb21laG93IGFib3J0IHRoZSBhc3luYyBpdGVyYWJsZS5cbiAgICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIGJvZHkpIHtcbiAgICAgIGlmIChzb2NrZXRba0Vycm9yXSkge1xuICAgICAgICB0aHJvdyBzb2NrZXRba0Vycm9yXVxuICAgICAgfVxuXG4gICAgICBpZiAoIXdyaXRlci53cml0ZShjaHVuaykpIHtcbiAgICAgICAgYXdhaXQgd2FpdEZvckRyYWluKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICB3cml0ZXIuZW5kKClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgd3JpdGVyLmRlc3Ryb3koZXJyKVxuICB9IGZpbmFsbHkge1xuICAgIHNvY2tldFxuICAgICAgLm9mZignY2xvc2UnLCBvbkRyYWluKVxuICAgICAgLm9mZignZHJhaW4nLCBvbkRyYWluKVxuICB9XG59XG5cbmNsYXNzIEFzeW5jV3JpdGVyIHtcbiAgY29uc3RydWN0b3IgKHsgc29ja2V0LCByZXF1ZXN0LCBjb250ZW50TGVuZ3RoLCBjbGllbnQsIGV4cGVjdHNQYXlsb2FkLCBoZWFkZXIgfSkge1xuICAgIHRoaXMuc29ja2V0ID0gc29ja2V0XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdFxuICAgIHRoaXMuY29udGVudExlbmd0aCA9IGNvbnRlbnRMZW5ndGhcbiAgICB0aGlzLmNsaWVudCA9IGNsaWVudFxuICAgIHRoaXMuYnl0ZXNXcml0dGVuID0gMFxuICAgIHRoaXMuZXhwZWN0c1BheWxvYWQgPSBleHBlY3RzUGF5bG9hZFxuICAgIHRoaXMuaGVhZGVyID0gaGVhZGVyXG5cbiAgICBzb2NrZXRba1dyaXRpbmddID0gdHJ1ZVxuICB9XG5cbiAgd3JpdGUgKGNodW5rKSB7XG4gICAgY29uc3QgeyBzb2NrZXQsIHJlcXVlc3QsIGNvbnRlbnRMZW5ndGgsIGNsaWVudCwgYnl0ZXNXcml0dGVuLCBleHBlY3RzUGF5bG9hZCwgaGVhZGVyIH0gPSB0aGlzXG5cbiAgICBpZiAoc29ja2V0W2tFcnJvcl0pIHtcbiAgICAgIHRocm93IHNvY2tldFtrRXJyb3JdXG4gICAgfVxuXG4gICAgaWYgKHNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGNvbnN0IGxlbiA9IEJ1ZmZlci5ieXRlTGVuZ3RoKGNodW5rKVxuICAgIGlmICghbGVuKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIC8vIFdlIHNob3VsZCBkZWZlciB3cml0aW5nIGNodW5rcy5cbiAgICBpZiAoY29udGVudExlbmd0aCAhPT0gbnVsbCAmJiBieXRlc1dyaXR0ZW4gKyBsZW4gPiBjb250ZW50TGVuZ3RoKSB7XG4gICAgICBpZiAoY2xpZW50W2tTdHJpY3RDb250ZW50TGVuZ3RoXSkge1xuICAgICAgICB0aHJvdyBuZXcgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKClcbiAgICAgIH1cblxuICAgICAgcHJvY2Vzcy5lbWl0V2FybmluZyhuZXcgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKCkpXG4gICAgfVxuXG4gICAgc29ja2V0LmNvcmsoKVxuXG4gICAgaWYgKGJ5dGVzV3JpdHRlbiA9PT0gMCkge1xuICAgICAgaWYgKCFleHBlY3RzUGF5bG9hZCkge1xuICAgICAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbnRlbnRMZW5ndGggPT09IG51bGwpIHtcbiAgICAgICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn10cmFuc2Zlci1lbmNvZGluZzogY2h1bmtlZFxcclxcbmAsICdsYXRpbjEnKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn1jb250ZW50LWxlbmd0aDogJHtjb250ZW50TGVuZ3RofVxcclxcblxcclxcbmAsICdsYXRpbjEnKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb250ZW50TGVuZ3RoID09PSBudWxsKSB7XG4gICAgICBzb2NrZXQud3JpdGUoYFxcclxcbiR7bGVuLnRvU3RyaW5nKDE2KX1cXHJcXG5gLCAnbGF0aW4xJylcbiAgICB9XG5cbiAgICB0aGlzLmJ5dGVzV3JpdHRlbiArPSBsZW5cblxuICAgIGNvbnN0IHJldCA9IHNvY2tldC53cml0ZShjaHVuaylcblxuICAgIHNvY2tldC51bmNvcmsoKVxuXG4gICAgcmVxdWVzdC5vbkJvZHlTZW50KGNodW5rKVxuXG4gICAgaWYgKCFyZXQpIHtcbiAgICAgIGlmIChzb2NrZXRba1BhcnNlcl0udGltZW91dCAmJiBzb2NrZXRba1BhcnNlcl0udGltZW91dFR5cGUgPT09IFRJTUVPVVRfSEVBREVSUykge1xuICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogb25seSBmb3IgamVzdFxuICAgICAgICBpZiAoc29ja2V0W2tQYXJzZXJdLnRpbWVvdXQucmVmcmVzaCkge1xuICAgICAgICAgIHNvY2tldFtrUGFyc2VyXS50aW1lb3V0LnJlZnJlc2goKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgZW5kICgpIHtcbiAgICBjb25zdCB7IHNvY2tldCwgY29udGVudExlbmd0aCwgY2xpZW50LCBieXRlc1dyaXR0ZW4sIGV4cGVjdHNQYXlsb2FkLCBoZWFkZXIsIHJlcXVlc3QgfSA9IHRoaXNcbiAgICByZXF1ZXN0Lm9uUmVxdWVzdFNlbnQoKVxuXG4gICAgc29ja2V0W2tXcml0aW5nXSA9IGZhbHNlXG5cbiAgICBpZiAoc29ja2V0W2tFcnJvcl0pIHtcbiAgICAgIHRocm93IHNvY2tldFtrRXJyb3JdXG4gICAgfVxuXG4gICAgaWYgKHNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChieXRlc1dyaXR0ZW4gPT09IDApIHtcbiAgICAgIGlmIChleHBlY3RzUGF5bG9hZCkge1xuICAgICAgICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMCNzZWN0aW9uLTMuMy4yXG4gICAgICAgIC8vIEEgdXNlciBhZ2VudCBTSE9VTEQgc2VuZCBhIENvbnRlbnQtTGVuZ3RoIGluIGEgcmVxdWVzdCBtZXNzYWdlIHdoZW5cbiAgICAgICAgLy8gbm8gVHJhbnNmZXItRW5jb2RpbmcgaXMgc2VudCBhbmQgdGhlIHJlcXVlc3QgbWV0aG9kIGRlZmluZXMgYSBtZWFuaW5nXG4gICAgICAgIC8vIGZvciBhbiBlbmNsb3NlZCBwYXlsb2FkIGJvZHkuXG5cbiAgICAgICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn1jb250ZW50LWxlbmd0aDogMFxcclxcblxcclxcbmAsICdsYXRpbjEnKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn1cXHJcXG5gLCAnbGF0aW4xJylcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNvbnRlbnRMZW5ndGggPT09IG51bGwpIHtcbiAgICAgIHNvY2tldC53cml0ZSgnXFxyXFxuMFxcclxcblxcclxcbicsICdsYXRpbjEnKVxuICAgIH1cblxuICAgIGlmIChjb250ZW50TGVuZ3RoICE9PSBudWxsICYmIGJ5dGVzV3JpdHRlbiAhPT0gY29udGVudExlbmd0aCkge1xuICAgICAgaWYgKGNsaWVudFtrU3RyaWN0Q29udGVudExlbmd0aF0pIHtcbiAgICAgICAgdGhyb3cgbmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9jZXNzLmVtaXRXYXJuaW5nKG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc29ja2V0W2tQYXJzZXJdLnRpbWVvdXQgJiYgc29ja2V0W2tQYXJzZXJdLnRpbWVvdXRUeXBlID09PSBUSU1FT1VUX0hFQURFUlMpIHtcbiAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBvbmx5IGZvciBqZXN0XG4gICAgICBpZiAoc29ja2V0W2tQYXJzZXJdLnRpbWVvdXQucmVmcmVzaCkge1xuICAgICAgICBzb2NrZXRba1BhcnNlcl0udGltZW91dC5yZWZyZXNoKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXN1bWUoY2xpZW50KVxuICB9XG5cbiAgZGVzdHJveSAoZXJyKSB7XG4gICAgY29uc3QgeyBzb2NrZXQsIGNsaWVudCB9ID0gdGhpc1xuXG4gICAgc29ja2V0W2tXcml0aW5nXSA9IGZhbHNlXG5cbiAgICBpZiAoZXJyKSB7XG4gICAgICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA8PSAxLCAncGlwZWxpbmUgc2hvdWxkIG9ubHkgY29udGFpbiB0aGlzIHJlcXVlc3QnKVxuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgZXJyKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBlcnJvclJlcXVlc3QgKGNsaWVudCwgcmVxdWVzdCwgZXJyKSB7XG4gIHRyeSB7XG4gICAgcmVxdWVzdC5vbkVycm9yKGVycilcbiAgICBhc3NlcnQocmVxdWVzdC5hYm9ydGVkKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjbGllbnQuZW1pdCgnZXJyb3InLCBlcnIpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBDbGllbnRcbiIsCiAgICAiLyogZXNsaW50LWRpc2FibGUgKi9cblxuJ3VzZSBzdHJpY3QnXG5cbi8vIEV4dHJhY3RlZCBmcm9tIG5vZGUvbGliL2ludGVybmFsL2ZpeGVkX3F1ZXVlLmpzXG5cbi8vIEN1cnJlbnRseSBvcHRpbWFsIHF1ZXVlIHNpemUsIHRlc3RlZCBvbiBWOCA2LjAgLSA2LjYuIE11c3QgYmUgcG93ZXIgb2YgdHdvLlxuY29uc3Qga1NpemUgPSAyMDQ4O1xuY29uc3Qga01hc2sgPSBrU2l6ZSAtIDE7XG5cbi8vIFRoZSBGaXhlZFF1ZXVlIGlzIGltcGxlbWVudGVkIGFzIGEgc2luZ2x5LWxpbmtlZCBsaXN0IG9mIGZpeGVkLXNpemVcbi8vIGNpcmN1bGFyIGJ1ZmZlcnMuIEl0IGxvb2tzIHNvbWV0aGluZyBsaWtlIHRoaXM6XG4vL1xuLy8gIGhlYWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFpbFxuLy8gICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4vLyAgICB2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZcbi8vICstLS0tLS0tLS0tLSsgPC0tLS0tXFwgICAgICAgKy0tLS0tLS0tLS0tKyA8LS0tLS0tXFwgICAgICAgICArLS0tLS0tLS0tLS0rXG4vLyB8ICBbbnVsbF0gICB8ICAgICAgICBcXC0tLS0tIHwgICBuZXh0ICAgIHwgICAgICAgICBcXC0tLS0tLS0gfCAgIG5leHQgICAgfFxuLy8gKy0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rXG4vLyB8ICAgaXRlbSAgICB8IDwtLSBib3R0b20gICAgfCAgIGl0ZW0gICAgfCA8LS0gYm90dG9tICAgICAgIHwgIFtlbXB0eV0gIHxcbi8vIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgfCAgW2VtcHR5XSAgfFxuLy8gfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICB8ICBbZW1wdHldICB8XG4vLyB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgIHwgIFtlbXB0eV0gIHxcbi8vIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgIGJvdHRvbSAtLT4gfCAgIGl0ZW0gICAgfFxuLy8gfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8XG4vLyB8ICAgIC4uLiAgICB8ICAgICAgICAgICAgICAgfCAgICAuLi4gICAgfCAgICAgICAgICAgICAgICAgIHwgICAgLi4uICAgIHxcbi8vIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfFxuLy8gfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8XG4vLyB8ICBbZW1wdHldICB8IDwtLSB0b3AgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHxcbi8vIHwgIFtlbXB0eV0gIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfFxuLy8gfCAgW2VtcHR5XSAgfCAgICAgICAgICAgICAgIHwgIFtlbXB0eV0gIHwgPC0tIHRvcCAgdG9wIC0tPiB8ICBbZW1wdHldICB8XG4vLyArLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLStcbi8vXG4vLyBPciwgaWYgdGhlcmUgaXMgb25seSBvbmUgY2lyY3VsYXIgYnVmZmVyLCBpdCBsb29rcyBzb21ldGhpbmdcbi8vIGxpa2UgZWl0aGVyIG9mIHRoZXNlOlxuLy9cbi8vICBoZWFkICAgdGFpbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWQgICB0YWlsXG4vLyAgICB8ICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHxcbi8vICAgIHYgICAgIHYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdiAgICAgdlxuLy8gKy0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rXG4vLyB8ICBbbnVsbF0gICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFtudWxsXSAgIHxcbi8vICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tK1xuLy8gfCAgW2VtcHR5XSAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8XG4vLyB8ICBbZW1wdHldICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHxcbi8vIHwgICBpdGVtICAgIHwgPC0tIGJvdHRvbSAgICAgICAgICAgIHRvcCAtLT4gfCAgW2VtcHR5XSAgfFxuLy8gfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBbZW1wdHldICB8XG4vLyB8ICBbZW1wdHldICB8IDwtLSB0b3AgICAgICAgICAgICBib3R0b20gLS0+IHwgICBpdGVtICAgIHxcbi8vIHwgIFtlbXB0eV0gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfFxuLy8gKy0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rXG4vL1xuLy8gQWRkaW5nIGEgdmFsdWUgbWVhbnMgbW92aW5nIGB0b3BgIGZvcndhcmQgYnkgb25lLCByZW1vdmluZyBtZWFuc1xuLy8gbW92aW5nIGBib3R0b21gIGZvcndhcmQgYnkgb25lLiBBZnRlciByZWFjaGluZyB0aGUgZW5kLCB0aGUgcXVldWVcbi8vIHdyYXBzIGFyb3VuZC5cbi8vXG4vLyBXaGVuIGB0b3AgPT09IGJvdHRvbWAgdGhlIGN1cnJlbnQgcXVldWUgaXMgZW1wdHkgYW5kIHdoZW5cbi8vIGB0b3AgKyAxID09PSBib3R0b21gIGl0J3MgZnVsbC4gVGhpcyB3YXN0ZXMgYSBzaW5nbGUgc3BhY2Ugb2Ygc3RvcmFnZVxuLy8gYnV0IGFsbG93cyBtdWNoIHF1aWNrZXIgY2hlY2tzLlxuXG5jbGFzcyBGaXhlZENpcmN1bGFyQnVmZmVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5ib3R0b20gPSAwO1xuICAgIHRoaXMudG9wID0gMDtcbiAgICB0aGlzLmxpc3QgPSBuZXcgQXJyYXkoa1NpemUpO1xuICAgIHRoaXMubmV4dCA9IG51bGw7XG4gIH1cblxuICBpc0VtcHR5KCkge1xuICAgIHJldHVybiB0aGlzLnRvcCA9PT0gdGhpcy5ib3R0b207XG4gIH1cblxuICBpc0Z1bGwoKSB7XG4gICAgcmV0dXJuICgodGhpcy50b3AgKyAxKSAmIGtNYXNrKSA9PT0gdGhpcy5ib3R0b207XG4gIH1cblxuICBwdXNoKGRhdGEpIHtcbiAgICB0aGlzLmxpc3RbdGhpcy50b3BdID0gZGF0YTtcbiAgICB0aGlzLnRvcCA9ICh0aGlzLnRvcCArIDEpICYga01hc2s7XG4gIH1cblxuICBzaGlmdCgpIHtcbiAgICBjb25zdCBuZXh0SXRlbSA9IHRoaXMubGlzdFt0aGlzLmJvdHRvbV07XG4gICAgaWYgKG5leHRJdGVtID09PSB1bmRlZmluZWQpXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB0aGlzLmxpc3RbdGhpcy5ib3R0b21dID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuYm90dG9tID0gKHRoaXMuYm90dG9tICsgMSkgJiBrTWFzaztcbiAgICByZXR1cm4gbmV4dEl0ZW07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBGaXhlZFF1ZXVlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5oZWFkID0gdGhpcy50YWlsID0gbmV3IEZpeGVkQ2lyY3VsYXJCdWZmZXIoKTtcbiAgfVxuXG4gIGlzRW1wdHkoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGVhZC5pc0VtcHR5KCk7XG4gIH1cblxuICBwdXNoKGRhdGEpIHtcbiAgICBpZiAodGhpcy5oZWFkLmlzRnVsbCgpKSB7XG4gICAgICAvLyBIZWFkIGlzIGZ1bGw6IENyZWF0ZXMgYSBuZXcgcXVldWUsIHNldHMgdGhlIG9sZCBxdWV1ZSdzIGAubmV4dGAgdG8gaXQsXG4gICAgICAvLyBhbmQgc2V0cyBpdCBhcyB0aGUgbmV3IG1haW4gcXVldWUuXG4gICAgICB0aGlzLmhlYWQgPSB0aGlzLmhlYWQubmV4dCA9IG5ldyBGaXhlZENpcmN1bGFyQnVmZmVyKCk7XG4gICAgfVxuICAgIHRoaXMuaGVhZC5wdXNoKGRhdGEpO1xuICB9XG5cbiAgc2hpZnQoKSB7XG4gICAgY29uc3QgdGFpbCA9IHRoaXMudGFpbDtcbiAgICBjb25zdCBuZXh0ID0gdGFpbC5zaGlmdCgpO1xuICAgIGlmICh0YWlsLmlzRW1wdHkoKSAmJiB0YWlsLm5leHQgIT09IG51bGwpIHtcbiAgICAgIC8vIElmIHRoZXJlIGlzIGFub3RoZXIgcXVldWUsIGl0IGZvcm1zIHRoZSBuZXcgdGFpbC5cbiAgICAgIHRoaXMudGFpbCA9IHRhaWwubmV4dDtcbiAgICB9XG4gICAgcmV0dXJuIG5leHQ7XG4gIH1cbn07XG4iLAogICAgImNvbnN0IHsga0ZyZWUsIGtDb25uZWN0ZWQsIGtQZW5kaW5nLCBrUXVldWVkLCBrUnVubmluZywga1NpemUgfSA9IHJlcXVpcmUoJy4vY29yZS9zeW1ib2xzJylcbmNvbnN0IGtQb29sID0gU3ltYm9sKCdwb29sJylcblxuY2xhc3MgUG9vbFN0YXRzIHtcbiAgY29uc3RydWN0b3IgKHBvb2wpIHtcbiAgICB0aGlzW2tQb29sXSA9IHBvb2xcbiAgfVxuXG4gIGdldCBjb25uZWN0ZWQgKCkge1xuICAgIHJldHVybiB0aGlzW2tQb29sXVtrQ29ubmVjdGVkXVxuICB9XG5cbiAgZ2V0IGZyZWUgKCkge1xuICAgIHJldHVybiB0aGlzW2tQb29sXVtrRnJlZV1cbiAgfVxuXG4gIGdldCBwZW5kaW5nICgpIHtcbiAgICByZXR1cm4gdGhpc1trUG9vbF1ba1BlbmRpbmddXG4gIH1cblxuICBnZXQgcXVldWVkICgpIHtcbiAgICByZXR1cm4gdGhpc1trUG9vbF1ba1F1ZXVlZF1cbiAgfVxuXG4gIGdldCBydW5uaW5nICgpIHtcbiAgICByZXR1cm4gdGhpc1trUG9vbF1ba1J1bm5pbmddXG4gIH1cblxuICBnZXQgc2l6ZSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1Bvb2xdW2tTaXplXVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUG9vbFN0YXRzXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBEaXNwYXRjaGVyQmFzZSA9IHJlcXVpcmUoJy4vZGlzcGF0Y2hlci1iYXNlJylcbmNvbnN0IEZpeGVkUXVldWUgPSByZXF1aXJlKCcuL25vZGUvZml4ZWQtcXVldWUnKVxuY29uc3QgeyBrQ29ubmVjdGVkLCBrU2l6ZSwga1J1bm5pbmcsIGtQZW5kaW5nLCBrUXVldWVkLCBrQnVzeSwga0ZyZWUsIGtVcmwsIGtDbG9zZSwga0Rlc3Ryb3ksIGtEaXNwYXRjaCB9ID0gcmVxdWlyZSgnLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgUG9vbFN0YXRzID0gcmVxdWlyZSgnLi9wb29sLXN0YXRzJylcblxuY29uc3Qga0NsaWVudHMgPSBTeW1ib2woJ2NsaWVudHMnKVxuY29uc3Qga05lZWREcmFpbiA9IFN5bWJvbCgnbmVlZERyYWluJylcbmNvbnN0IGtRdWV1ZSA9IFN5bWJvbCgncXVldWUnKVxuY29uc3Qga0Nsb3NlZFJlc29sdmUgPSBTeW1ib2woJ2Nsb3NlZCByZXNvbHZlJylcbmNvbnN0IGtPbkRyYWluID0gU3ltYm9sKCdvbkRyYWluJylcbmNvbnN0IGtPbkNvbm5lY3QgPSBTeW1ib2woJ29uQ29ubmVjdCcpXG5jb25zdCBrT25EaXNjb25uZWN0ID0gU3ltYm9sKCdvbkRpc2Nvbm5lY3QnKVxuY29uc3Qga09uQ29ubmVjdGlvbkVycm9yID0gU3ltYm9sKCdvbkNvbm5lY3Rpb25FcnJvcicpXG5jb25zdCBrR2V0RGlzcGF0Y2hlciA9IFN5bWJvbCgnZ2V0IGRpc3BhdGNoZXInKVxuY29uc3Qga0FkZENsaWVudCA9IFN5bWJvbCgnYWRkIGNsaWVudCcpXG5jb25zdCBrUmVtb3ZlQ2xpZW50ID0gU3ltYm9sKCdyZW1vdmUgY2xpZW50JylcbmNvbnN0IGtTdGF0cyA9IFN5bWJvbCgnc3RhdHMnKVxuXG5jbGFzcyBQb29sQmFzZSBleHRlbmRzIERpc3BhdGNoZXJCYXNlIHtcbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXNba1F1ZXVlXSA9IG5ldyBGaXhlZFF1ZXVlKClcbiAgICB0aGlzW2tDbGllbnRzXSA9IFtdXG4gICAgdGhpc1trUXVldWVkXSA9IDBcblxuICAgIGNvbnN0IHBvb2wgPSB0aGlzXG5cbiAgICB0aGlzW2tPbkRyYWluXSA9IGZ1bmN0aW9uIG9uRHJhaW4gKG9yaWdpbiwgdGFyZ2V0cykge1xuICAgICAgY29uc3QgcXVldWUgPSBwb29sW2tRdWV1ZV1cblxuICAgICAgbGV0IG5lZWREcmFpbiA9IGZhbHNlXG5cbiAgICAgIHdoaWxlICghbmVlZERyYWluKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBxdWV1ZS5zaGlmdCgpXG4gICAgICAgIGlmICghaXRlbSkge1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgcG9vbFtrUXVldWVkXS0tXG4gICAgICAgIG5lZWREcmFpbiA9ICF0aGlzLmRpc3BhdGNoKGl0ZW0ub3B0cywgaXRlbS5oYW5kbGVyKVxuICAgICAgfVxuXG4gICAgICB0aGlzW2tOZWVkRHJhaW5dID0gbmVlZERyYWluXG5cbiAgICAgIGlmICghdGhpc1trTmVlZERyYWluXSAmJiBwb29sW2tOZWVkRHJhaW5dKSB7XG4gICAgICAgIHBvb2xba05lZWREcmFpbl0gPSBmYWxzZVxuICAgICAgICBwb29sLmVtaXQoJ2RyYWluJywgb3JpZ2luLCBbcG9vbCwgLi4udGFyZ2V0c10pXG4gICAgICB9XG5cbiAgICAgIGlmIChwb29sW2tDbG9zZWRSZXNvbHZlXSAmJiBxdWV1ZS5pc0VtcHR5KCkpIHtcbiAgICAgICAgUHJvbWlzZVxuICAgICAgICAgIC5hbGwocG9vbFtrQ2xpZW50c10ubWFwKGMgPT4gYy5jbG9zZSgpKSlcbiAgICAgICAgICAudGhlbihwb29sW2tDbG9zZWRSZXNvbHZlXSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzW2tPbkNvbm5lY3RdID0gKG9yaWdpbiwgdGFyZ2V0cykgPT4ge1xuICAgICAgcG9vbC5lbWl0KCdjb25uZWN0Jywgb3JpZ2luLCBbcG9vbCwgLi4udGFyZ2V0c10pXG4gICAgfVxuXG4gICAgdGhpc1trT25EaXNjb25uZWN0XSA9IChvcmlnaW4sIHRhcmdldHMsIGVycikgPT4ge1xuICAgICAgcG9vbC5lbWl0KCdkaXNjb25uZWN0Jywgb3JpZ2luLCBbcG9vbCwgLi4udGFyZ2V0c10sIGVycilcbiAgICB9XG5cbiAgICB0aGlzW2tPbkNvbm5lY3Rpb25FcnJvcl0gPSAob3JpZ2luLCB0YXJnZXRzLCBlcnIpID0+IHtcbiAgICAgIHBvb2wuZW1pdCgnY29ubmVjdGlvbkVycm9yJywgb3JpZ2luLCBbcG9vbCwgLi4udGFyZ2V0c10sIGVycilcbiAgICB9XG5cbiAgICB0aGlzW2tTdGF0c10gPSBuZXcgUG9vbFN0YXRzKHRoaXMpXG4gIH1cblxuICBnZXQgW2tCdXN5XSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba05lZWREcmFpbl1cbiAgfVxuXG4gIGdldCBba0Nvbm5lY3RlZF0gKCkge1xuICAgIHJldHVybiB0aGlzW2tDbGllbnRzXS5maWx0ZXIoY2xpZW50ID0+IGNsaWVudFtrQ29ubmVjdGVkXSkubGVuZ3RoXG4gIH1cblxuICBnZXQgW2tGcmVlXSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0NsaWVudHNdLmZpbHRlcihjbGllbnQgPT4gY2xpZW50W2tDb25uZWN0ZWRdICYmICFjbGllbnRba05lZWREcmFpbl0pLmxlbmd0aFxuICB9XG5cbiAgZ2V0IFtrUGVuZGluZ10gKCkge1xuICAgIGxldCByZXQgPSB0aGlzW2tRdWV1ZWRdXG4gICAgZm9yIChjb25zdCB7IFtrUGVuZGluZ106IHBlbmRpbmcgfSBvZiB0aGlzW2tDbGllbnRzXSkge1xuICAgICAgcmV0ICs9IHBlbmRpbmdcbiAgICB9XG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgZ2V0IFtrUnVubmluZ10gKCkge1xuICAgIGxldCByZXQgPSAwXG4gICAgZm9yIChjb25zdCB7IFtrUnVubmluZ106IHJ1bm5pbmcgfSBvZiB0aGlzW2tDbGllbnRzXSkge1xuICAgICAgcmV0ICs9IHJ1bm5pbmdcbiAgICB9XG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgZ2V0IFtrU2l6ZV0gKCkge1xuICAgIGxldCByZXQgPSB0aGlzW2tRdWV1ZWRdXG4gICAgZm9yIChjb25zdCB7IFtrU2l6ZV06IHNpemUgfSBvZiB0aGlzW2tDbGllbnRzXSkge1xuICAgICAgcmV0ICs9IHNpemVcbiAgICB9XG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgZ2V0IHN0YXRzICgpIHtcbiAgICByZXR1cm4gdGhpc1trU3RhdHNdXG4gIH1cblxuICBhc3luYyBba0Nsb3NlXSAoKSB7XG4gICAgaWYgKHRoaXNba1F1ZXVlXS5pc0VtcHR5KCkpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLmFsbCh0aGlzW2tDbGllbnRzXS5tYXAoYyA9PiBjLmNsb3NlKCkpKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgdGhpc1trQ2xvc2VkUmVzb2x2ZV0gPSByZXNvbHZlXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIFtrRGVzdHJveV0gKGVycikge1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCBpdGVtID0gdGhpc1trUXVldWVdLnNoaWZ0KClcbiAgICAgIGlmICghaXRlbSkge1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgaXRlbS5oYW5kbGVyLm9uRXJyb3IoZXJyKVxuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLmFsbCh0aGlzW2tDbGllbnRzXS5tYXAoYyA9PiBjLmRlc3Ryb3koZXJyKSkpXG4gIH1cblxuICBba0Rpc3BhdGNoXSAob3B0cywgaGFuZGxlcikge1xuICAgIGNvbnN0IGRpc3BhdGNoZXIgPSB0aGlzW2tHZXREaXNwYXRjaGVyXSgpXG5cbiAgICBpZiAoIWRpc3BhdGNoZXIpIHtcbiAgICAgIHRoaXNba05lZWREcmFpbl0gPSB0cnVlXG4gICAgICB0aGlzW2tRdWV1ZV0ucHVzaCh7IG9wdHMsIGhhbmRsZXIgfSlcbiAgICAgIHRoaXNba1F1ZXVlZF0rK1xuICAgIH0gZWxzZSBpZiAoIWRpc3BhdGNoZXIuZGlzcGF0Y2gob3B0cywgaGFuZGxlcikpIHtcbiAgICAgIGRpc3BhdGNoZXJba05lZWREcmFpbl0gPSB0cnVlXG4gICAgICB0aGlzW2tOZWVkRHJhaW5dID0gIXRoaXNba0dldERpc3BhdGNoZXJdKClcbiAgICB9XG5cbiAgICByZXR1cm4gIXRoaXNba05lZWREcmFpbl1cbiAgfVxuXG4gIFtrQWRkQ2xpZW50XSAoY2xpZW50KSB7XG4gICAgY2xpZW50XG4gICAgICAub24oJ2RyYWluJywgdGhpc1trT25EcmFpbl0pXG4gICAgICAub24oJ2Nvbm5lY3QnLCB0aGlzW2tPbkNvbm5lY3RdKVxuICAgICAgLm9uKCdkaXNjb25uZWN0JywgdGhpc1trT25EaXNjb25uZWN0XSlcbiAgICAgIC5vbignY29ubmVjdGlvbkVycm9yJywgdGhpc1trT25Db25uZWN0aW9uRXJyb3JdKVxuXG4gICAgdGhpc1trQ2xpZW50c10ucHVzaChjbGllbnQpXG5cbiAgICBpZiAodGhpc1trTmVlZERyYWluXSkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzW2tOZWVkRHJhaW5dKSB7XG4gICAgICAgICAgdGhpc1trT25EcmFpbl0oY2xpZW50W2tVcmxdLCBbdGhpcywgY2xpZW50XSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgW2tSZW1vdmVDbGllbnRdIChjbGllbnQpIHtcbiAgICBjbGllbnQuY2xvc2UoKCkgPT4ge1xuICAgICAgY29uc3QgaWR4ID0gdGhpc1trQ2xpZW50c10uaW5kZXhPZihjbGllbnQpXG4gICAgICBpZiAoaWR4ICE9PSAtMSkge1xuICAgICAgICB0aGlzW2tDbGllbnRzXS5zcGxpY2UoaWR4LCAxKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICB0aGlzW2tOZWVkRHJhaW5dID0gdGhpc1trQ2xpZW50c10uc29tZShkaXNwYXRjaGVyID0+IChcbiAgICAgICFkaXNwYXRjaGVyW2tOZWVkRHJhaW5dICYmXG4gICAgICBkaXNwYXRjaGVyLmNsb3NlZCAhPT0gdHJ1ZSAmJlxuICAgICAgZGlzcGF0Y2hlci5kZXN0cm95ZWQgIT09IHRydWVcbiAgICApKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBQb29sQmFzZSxcbiAga0NsaWVudHMsXG4gIGtOZWVkRHJhaW4sXG4gIGtBZGRDbGllbnQsXG4gIGtSZW1vdmVDbGllbnQsXG4gIGtHZXREaXNwYXRjaGVyXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIFBvb2xCYXNlLFxuICBrQ2xpZW50cyxcbiAga05lZWREcmFpbixcbiAga0FkZENsaWVudCxcbiAga0dldERpc3BhdGNoZXJcbn0gPSByZXF1aXJlKCcuL3Bvb2wtYmFzZScpXG5jb25zdCBDbGllbnQgPSByZXF1aXJlKCcuL2NsaWVudCcpXG5jb25zdCB7XG4gIEludmFsaWRBcmd1bWVudEVycm9yXG59ID0gcmVxdWlyZSgnLi9jb3JlL2Vycm9ycycpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBrVXJsLCBrSW50ZXJjZXB0b3JzIH0gPSByZXF1aXJlKCcuL2NvcmUvc3ltYm9scycpXG5jb25zdCBidWlsZENvbm5lY3RvciA9IHJlcXVpcmUoJy4vY29yZS9jb25uZWN0JylcblxuY29uc3Qga09wdGlvbnMgPSBTeW1ib2woJ29wdGlvbnMnKVxuY29uc3Qga0Nvbm5lY3Rpb25zID0gU3ltYm9sKCdjb25uZWN0aW9ucycpXG5jb25zdCBrRmFjdG9yeSA9IFN5bWJvbCgnZmFjdG9yeScpXG5cbmZ1bmN0aW9uIGRlZmF1bHRGYWN0b3J5IChvcmlnaW4sIG9wdHMpIHtcbiAgcmV0dXJuIG5ldyBDbGllbnQob3JpZ2luLCBvcHRzKVxufVxuXG5jbGFzcyBQb29sIGV4dGVuZHMgUG9vbEJhc2Uge1xuICBjb25zdHJ1Y3RvciAob3JpZ2luLCB7XG4gICAgY29ubmVjdGlvbnMsXG4gICAgZmFjdG9yeSA9IGRlZmF1bHRGYWN0b3J5LFxuICAgIGNvbm5lY3QsXG4gICAgY29ubmVjdFRpbWVvdXQsXG4gICAgdGxzLFxuICAgIG1heENhY2hlZFNlc3Npb25zLFxuICAgIHNvY2tldFBhdGgsXG4gICAgYXV0b1NlbGVjdEZhbWlseSxcbiAgICBhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQsXG4gICAgYWxsb3dIMixcbiAgICAuLi5vcHRpb25zXG4gIH0gPSB7fSkge1xuICAgIHN1cGVyKClcblxuICAgIGlmIChjb25uZWN0aW9ucyAhPSBudWxsICYmICghTnVtYmVyLmlzRmluaXRlKGNvbm5lY3Rpb25zKSB8fCBjb25uZWN0aW9ucyA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY29ubmVjdGlvbnMnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZmFjdG9yeSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdmYWN0b3J5IG11c3QgYmUgYSBmdW5jdGlvbi4nKVxuICAgIH1cblxuICAgIGlmIChjb25uZWN0ICE9IG51bGwgJiYgdHlwZW9mIGNvbm5lY3QgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGNvbm5lY3QgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2Nvbm5lY3QgbXVzdCBiZSBhIGZ1bmN0aW9uIG9yIGFuIG9iamVjdCcpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjb25uZWN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25uZWN0ID0gYnVpbGRDb25uZWN0b3Ioe1xuICAgICAgICAuLi50bHMsXG4gICAgICAgIG1heENhY2hlZFNlc3Npb25zLFxuICAgICAgICBhbGxvd0gyLFxuICAgICAgICBzb2NrZXRQYXRoLFxuICAgICAgICB0aW1lb3V0OiBjb25uZWN0VGltZW91dCxcbiAgICAgICAgLi4uKHV0aWwubm9kZUhhc0F1dG9TZWxlY3RGYW1pbHkgJiYgYXV0b1NlbGVjdEZhbWlseSA/IHsgYXV0b1NlbGVjdEZhbWlseSwgYXV0b1NlbGVjdEZhbWlseUF0dGVtcHRUaW1lb3V0IH0gOiB1bmRlZmluZWQpLFxuICAgICAgICAuLi5jb25uZWN0XG4gICAgICB9KVxuICAgIH1cblxuICAgIHRoaXNba0ludGVyY2VwdG9yc10gPSBvcHRpb25zLmludGVyY2VwdG9ycyAmJiBvcHRpb25zLmludGVyY2VwdG9ycy5Qb29sICYmIEFycmF5LmlzQXJyYXkob3B0aW9ucy5pbnRlcmNlcHRvcnMuUG9vbClcbiAgICAgID8gb3B0aW9ucy5pbnRlcmNlcHRvcnMuUG9vbFxuICAgICAgOiBbXVxuICAgIHRoaXNba0Nvbm5lY3Rpb25zXSA9IGNvbm5lY3Rpb25zIHx8IG51bGxcbiAgICB0aGlzW2tVcmxdID0gdXRpbC5wYXJzZU9yaWdpbihvcmlnaW4pXG4gICAgdGhpc1trT3B0aW9uc10gPSB7IC4uLnV0aWwuZGVlcENsb25lKG9wdGlvbnMpLCBjb25uZWN0LCBhbGxvd0gyIH1cbiAgICB0aGlzW2tPcHRpb25zXS5pbnRlcmNlcHRvcnMgPSBvcHRpb25zLmludGVyY2VwdG9yc1xuICAgICAgPyB7IC4uLm9wdGlvbnMuaW50ZXJjZXB0b3JzIH1cbiAgICAgIDogdW5kZWZpbmVkXG4gICAgdGhpc1trRmFjdG9yeV0gPSBmYWN0b3J5XG4gIH1cblxuICBba0dldERpc3BhdGNoZXJdICgpIHtcbiAgICBsZXQgZGlzcGF0Y2hlciA9IHRoaXNba0NsaWVudHNdLmZpbmQoZGlzcGF0Y2hlciA9PiAhZGlzcGF0Y2hlcltrTmVlZERyYWluXSlcblxuICAgIGlmIChkaXNwYXRjaGVyKSB7XG4gICAgICByZXR1cm4gZGlzcGF0Y2hlclxuICAgIH1cblxuICAgIGlmICghdGhpc1trQ29ubmVjdGlvbnNdIHx8IHRoaXNba0NsaWVudHNdLmxlbmd0aCA8IHRoaXNba0Nvbm5lY3Rpb25zXSkge1xuICAgICAgZGlzcGF0Y2hlciA9IHRoaXNba0ZhY3RvcnldKHRoaXNba1VybF0sIHRoaXNba09wdGlvbnNdKVxuICAgICAgdGhpc1trQWRkQ2xpZW50XShkaXNwYXRjaGVyKVxuICAgIH1cblxuICAgIHJldHVybiBkaXNwYXRjaGVyXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBQb29sXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIEJhbGFuY2VkUG9vbE1pc3NpbmdVcHN0cmVhbUVycm9yLFxuICBJbnZhbGlkQXJndW1lbnRFcnJvclxufSA9IHJlcXVpcmUoJy4vY29yZS9lcnJvcnMnKVxuY29uc3Qge1xuICBQb29sQmFzZSxcbiAga0NsaWVudHMsXG4gIGtOZWVkRHJhaW4sXG4gIGtBZGRDbGllbnQsXG4gIGtSZW1vdmVDbGllbnQsXG4gIGtHZXREaXNwYXRjaGVyXG59ID0gcmVxdWlyZSgnLi9wb29sLWJhc2UnKVxuY29uc3QgUG9vbCA9IHJlcXVpcmUoJy4vcG9vbCcpXG5jb25zdCB7IGtVcmwsIGtJbnRlcmNlcHRvcnMgfSA9IHJlcXVpcmUoJy4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsgcGFyc2VPcmlnaW4gfSA9IHJlcXVpcmUoJy4vY29yZS91dGlsJylcbmNvbnN0IGtGYWN0b3J5ID0gU3ltYm9sKCdmYWN0b3J5JylcblxuY29uc3Qga09wdGlvbnMgPSBTeW1ib2woJ29wdGlvbnMnKVxuY29uc3Qga0dyZWF0ZXN0Q29tbW9uRGl2aXNvciA9IFN5bWJvbCgna0dyZWF0ZXN0Q29tbW9uRGl2aXNvcicpXG5jb25zdCBrQ3VycmVudFdlaWdodCA9IFN5bWJvbCgna0N1cnJlbnRXZWlnaHQnKVxuY29uc3Qga0luZGV4ID0gU3ltYm9sKCdrSW5kZXgnKVxuY29uc3Qga1dlaWdodCA9IFN5bWJvbCgna1dlaWdodCcpXG5jb25zdCBrTWF4V2VpZ2h0UGVyU2VydmVyID0gU3ltYm9sKCdrTWF4V2VpZ2h0UGVyU2VydmVyJylcbmNvbnN0IGtFcnJvclBlbmFsdHkgPSBTeW1ib2woJ2tFcnJvclBlbmFsdHknKVxuXG5mdW5jdGlvbiBnZXRHcmVhdGVzdENvbW1vbkRpdmlzb3IgKGEsIGIpIHtcbiAgaWYgKGIgPT09IDApIHJldHVybiBhXG4gIHJldHVybiBnZXRHcmVhdGVzdENvbW1vbkRpdmlzb3IoYiwgYSAlIGIpXG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRGYWN0b3J5IChvcmlnaW4sIG9wdHMpIHtcbiAgcmV0dXJuIG5ldyBQb29sKG9yaWdpbiwgb3B0cylcbn1cblxuY2xhc3MgQmFsYW5jZWRQb29sIGV4dGVuZHMgUG9vbEJhc2Uge1xuICBjb25zdHJ1Y3RvciAodXBzdHJlYW1zID0gW10sIHsgZmFjdG9yeSA9IGRlZmF1bHRGYWN0b3J5LCAuLi5vcHRzIH0gPSB7fSkge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXNba09wdGlvbnNdID0gb3B0c1xuICAgIHRoaXNba0luZGV4XSA9IC0xXG4gICAgdGhpc1trQ3VycmVudFdlaWdodF0gPSAwXG5cbiAgICB0aGlzW2tNYXhXZWlnaHRQZXJTZXJ2ZXJdID0gdGhpc1trT3B0aW9uc10ubWF4V2VpZ2h0UGVyU2VydmVyIHx8IDEwMFxuICAgIHRoaXNba0Vycm9yUGVuYWx0eV0gPSB0aGlzW2tPcHRpb25zXS5lcnJvclBlbmFsdHkgfHwgMTVcblxuICAgIGlmICghQXJyYXkuaXNBcnJheSh1cHN0cmVhbXMpKSB7XG4gICAgICB1cHN0cmVhbXMgPSBbdXBzdHJlYW1zXVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZmFjdG9yeSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdmYWN0b3J5IG11c3QgYmUgYSBmdW5jdGlvbi4nKVxuICAgIH1cblxuICAgIHRoaXNba0ludGVyY2VwdG9yc10gPSBvcHRzLmludGVyY2VwdG9ycyAmJiBvcHRzLmludGVyY2VwdG9ycy5CYWxhbmNlZFBvb2wgJiYgQXJyYXkuaXNBcnJheShvcHRzLmludGVyY2VwdG9ycy5CYWxhbmNlZFBvb2wpXG4gICAgICA/IG9wdHMuaW50ZXJjZXB0b3JzLkJhbGFuY2VkUG9vbFxuICAgICAgOiBbXVxuICAgIHRoaXNba0ZhY3RvcnldID0gZmFjdG9yeVxuXG4gICAgZm9yIChjb25zdCB1cHN0cmVhbSBvZiB1cHN0cmVhbXMpIHtcbiAgICAgIHRoaXMuYWRkVXBzdHJlYW0odXBzdHJlYW0pXG4gICAgfVxuICAgIHRoaXMuX3VwZGF0ZUJhbGFuY2VkUG9vbFN0YXRzKClcbiAgfVxuXG4gIGFkZFVwc3RyZWFtICh1cHN0cmVhbSkge1xuICAgIGNvbnN0IHVwc3RyZWFtT3JpZ2luID0gcGFyc2VPcmlnaW4odXBzdHJlYW0pLm9yaWdpblxuXG4gICAgaWYgKHRoaXNba0NsaWVudHNdLmZpbmQoKHBvb2wpID0+IChcbiAgICAgIHBvb2xba1VybF0ub3JpZ2luID09PSB1cHN0cmVhbU9yaWdpbiAmJlxuICAgICAgcG9vbC5jbG9zZWQgIT09IHRydWUgJiZcbiAgICAgIHBvb2wuZGVzdHJveWVkICE9PSB0cnVlXG4gICAgKSkpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuICAgIGNvbnN0IHBvb2wgPSB0aGlzW2tGYWN0b3J5XSh1cHN0cmVhbU9yaWdpbiwgT2JqZWN0LmFzc2lnbih7fSwgdGhpc1trT3B0aW9uc10pKVxuXG4gICAgdGhpc1trQWRkQ2xpZW50XShwb29sKVxuICAgIHBvb2wub24oJ2Nvbm5lY3QnLCAoKSA9PiB7XG4gICAgICBwb29sW2tXZWlnaHRdID0gTWF0aC5taW4odGhpc1trTWF4V2VpZ2h0UGVyU2VydmVyXSwgcG9vbFtrV2VpZ2h0XSArIHRoaXNba0Vycm9yUGVuYWx0eV0pXG4gICAgfSlcblxuICAgIHBvb2wub24oJ2Nvbm5lY3Rpb25FcnJvcicsICgpID0+IHtcbiAgICAgIHBvb2xba1dlaWdodF0gPSBNYXRoLm1heCgxLCBwb29sW2tXZWlnaHRdIC0gdGhpc1trRXJyb3JQZW5hbHR5XSlcbiAgICAgIHRoaXMuX3VwZGF0ZUJhbGFuY2VkUG9vbFN0YXRzKClcbiAgICB9KVxuXG4gICAgcG9vbC5vbignZGlzY29ubmVjdCcsICguLi5hcmdzKSA9PiB7XG4gICAgICBjb25zdCBlcnIgPSBhcmdzWzJdXG4gICAgICBpZiAoZXJyICYmIGVyci5jb2RlID09PSAnVU5EX0VSUl9TT0NLRVQnKSB7XG4gICAgICAgIC8vIGRlY3JlYXNlIHRoZSB3ZWlnaHQgb2YgdGhlIHBvb2wuXG4gICAgICAgIHBvb2xba1dlaWdodF0gPSBNYXRoLm1heCgxLCBwb29sW2tXZWlnaHRdIC0gdGhpc1trRXJyb3JQZW5hbHR5XSlcbiAgICAgICAgdGhpcy5fdXBkYXRlQmFsYW5jZWRQb29sU3RhdHMoKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBmb3IgKGNvbnN0IGNsaWVudCBvZiB0aGlzW2tDbGllbnRzXSkge1xuICAgICAgY2xpZW50W2tXZWlnaHRdID0gdGhpc1trTWF4V2VpZ2h0UGVyU2VydmVyXVxuICAgIH1cblxuICAgIHRoaXMuX3VwZGF0ZUJhbGFuY2VkUG9vbFN0YXRzKClcblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBfdXBkYXRlQmFsYW5jZWRQb29sU3RhdHMgKCkge1xuICAgIHRoaXNba0dyZWF0ZXN0Q29tbW9uRGl2aXNvcl0gPSB0aGlzW2tDbGllbnRzXS5tYXAocCA9PiBwW2tXZWlnaHRdKS5yZWR1Y2UoZ2V0R3JlYXRlc3RDb21tb25EaXZpc29yLCAwKVxuICB9XG5cbiAgcmVtb3ZlVXBzdHJlYW0gKHVwc3RyZWFtKSB7XG4gICAgY29uc3QgdXBzdHJlYW1PcmlnaW4gPSBwYXJzZU9yaWdpbih1cHN0cmVhbSkub3JpZ2luXG5cbiAgICBjb25zdCBwb29sID0gdGhpc1trQ2xpZW50c10uZmluZCgocG9vbCkgPT4gKFxuICAgICAgcG9vbFtrVXJsXS5vcmlnaW4gPT09IHVwc3RyZWFtT3JpZ2luICYmXG4gICAgICBwb29sLmNsb3NlZCAhPT0gdHJ1ZSAmJlxuICAgICAgcG9vbC5kZXN0cm95ZWQgIT09IHRydWVcbiAgICApKVxuXG4gICAgaWYgKHBvb2wpIHtcbiAgICAgIHRoaXNba1JlbW92ZUNsaWVudF0ocG9vbClcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgZ2V0IHVwc3RyZWFtcyAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0NsaWVudHNdXG4gICAgICAuZmlsdGVyKGRpc3BhdGNoZXIgPT4gZGlzcGF0Y2hlci5jbG9zZWQgIT09IHRydWUgJiYgZGlzcGF0Y2hlci5kZXN0cm95ZWQgIT09IHRydWUpXG4gICAgICAubWFwKChwKSA9PiBwW2tVcmxdLm9yaWdpbilcbiAgfVxuXG4gIFtrR2V0RGlzcGF0Y2hlcl0gKCkge1xuICAgIC8vIFdlIHZhbGlkYXRlIHRoYXQgcG9vbHMgaXMgZ3JlYXRlciB0aGFuIDAsXG4gICAgLy8gb3RoZXJ3aXNlIHdlIHdvdWxkIGhhdmUgdG8gd2FpdCB1bnRpbCBhbiB1cHN0cmVhbVxuICAgIC8vIGlzIGFkZGVkLCB3aGljaCBtaWdodCBuZXZlciBoYXBwZW4uXG4gICAgaWYgKHRoaXNba0NsaWVudHNdLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEJhbGFuY2VkUG9vbE1pc3NpbmdVcHN0cmVhbUVycm9yKClcbiAgICB9XG5cbiAgICBjb25zdCBkaXNwYXRjaGVyID0gdGhpc1trQ2xpZW50c10uZmluZChkaXNwYXRjaGVyID0+IChcbiAgICAgICFkaXNwYXRjaGVyW2tOZWVkRHJhaW5dICYmXG4gICAgICBkaXNwYXRjaGVyLmNsb3NlZCAhPT0gdHJ1ZSAmJlxuICAgICAgZGlzcGF0Y2hlci5kZXN0cm95ZWQgIT09IHRydWVcbiAgICApKVxuXG4gICAgaWYgKCFkaXNwYXRjaGVyKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBhbGxDbGllbnRzQnVzeSA9IHRoaXNba0NsaWVudHNdLm1hcChwb29sID0+IHBvb2xba05lZWREcmFpbl0pLnJlZHVjZSgoYSwgYikgPT4gYSAmJiBiLCB0cnVlKVxuXG4gICAgaWYgKGFsbENsaWVudHNCdXN5KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBsZXQgY291bnRlciA9IDBcblxuICAgIGxldCBtYXhXZWlnaHRJbmRleCA9IHRoaXNba0NsaWVudHNdLmZpbmRJbmRleChwb29sID0+ICFwb29sW2tOZWVkRHJhaW5dKVxuXG4gICAgd2hpbGUgKGNvdW50ZXIrKyA8IHRoaXNba0NsaWVudHNdLmxlbmd0aCkge1xuICAgICAgdGhpc1trSW5kZXhdID0gKHRoaXNba0luZGV4XSArIDEpICUgdGhpc1trQ2xpZW50c10ubGVuZ3RoXG4gICAgICBjb25zdCBwb29sID0gdGhpc1trQ2xpZW50c11bdGhpc1trSW5kZXhdXVxuXG4gICAgICAvLyBmaW5kIHBvb2wgaW5kZXggd2l0aCB0aGUgbGFyZ2VzdCB3ZWlnaHRcbiAgICAgIGlmIChwb29sW2tXZWlnaHRdID4gdGhpc1trQ2xpZW50c11bbWF4V2VpZ2h0SW5kZXhdW2tXZWlnaHRdICYmICFwb29sW2tOZWVkRHJhaW5dKSB7XG4gICAgICAgIG1heFdlaWdodEluZGV4ID0gdGhpc1trSW5kZXhdXG4gICAgICB9XG5cbiAgICAgIC8vIGRlY3JlYXNlIHRoZSBjdXJyZW50IHdlaWdodCBldmVyeSBgdGhpc1trQ2xpZW50c10ubGVuZ3RoYC5cbiAgICAgIGlmICh0aGlzW2tJbmRleF0gPT09IDApIHtcbiAgICAgICAgLy8gU2V0IHRoZSBjdXJyZW50IHdlaWdodCB0byB0aGUgbmV4dCBsb3dlciB3ZWlnaHQuXG4gICAgICAgIHRoaXNba0N1cnJlbnRXZWlnaHRdID0gdGhpc1trQ3VycmVudFdlaWdodF0gLSB0aGlzW2tHcmVhdGVzdENvbW1vbkRpdmlzb3JdXG5cbiAgICAgICAgaWYgKHRoaXNba0N1cnJlbnRXZWlnaHRdIDw9IDApIHtcbiAgICAgICAgICB0aGlzW2tDdXJyZW50V2VpZ2h0XSA9IHRoaXNba01heFdlaWdodFBlclNlcnZlcl1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHBvb2xba1dlaWdodF0gPj0gdGhpc1trQ3VycmVudFdlaWdodF0gJiYgKCFwb29sW2tOZWVkRHJhaW5dKSkge1xuICAgICAgICByZXR1cm4gcG9vbFxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXNba0N1cnJlbnRXZWlnaHRdID0gdGhpc1trQ2xpZW50c11bbWF4V2VpZ2h0SW5kZXhdW2tXZWlnaHRdXG4gICAgdGhpc1trSW5kZXhdID0gbWF4V2VpZ2h0SW5kZXhcbiAgICByZXR1cm4gdGhpc1trQ2xpZW50c11bbWF4V2VpZ2h0SW5kZXhdXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBCYWxhbmNlZFBvb2xcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBmaWxlOiBvbmx5IGZvciBOb2RlIDEyICovXG5cbmNvbnN0IHsga0Nvbm5lY3RlZCwga1NpemUgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5cbmNsYXNzIENvbXBhdFdlYWtSZWYge1xuICBjb25zdHJ1Y3RvciAodmFsdWUpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWVcbiAgfVxuXG4gIGRlcmVmICgpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZVtrQ29ubmVjdGVkXSA9PT0gMCAmJiB0aGlzLnZhbHVlW2tTaXplXSA9PT0gMFxuICAgICAgPyB1bmRlZmluZWRcbiAgICAgIDogdGhpcy52YWx1ZVxuICB9XG59XG5cbmNsYXNzIENvbXBhdEZpbmFsaXplciB7XG4gIGNvbnN0cnVjdG9yIChmaW5hbGl6ZXIpIHtcbiAgICB0aGlzLmZpbmFsaXplciA9IGZpbmFsaXplclxuICB9XG5cbiAgcmVnaXN0ZXIgKGRpc3BhdGNoZXIsIGtleSkge1xuICAgIGlmIChkaXNwYXRjaGVyLm9uKSB7XG4gICAgICBkaXNwYXRjaGVyLm9uKCdkaXNjb25uZWN0JywgKCkgPT4ge1xuICAgICAgICBpZiAoZGlzcGF0Y2hlcltrQ29ubmVjdGVkXSA9PT0gMCAmJiBkaXNwYXRjaGVyW2tTaXplXSA9PT0gMCkge1xuICAgICAgICAgIHRoaXMuZmluYWxpemVyKGtleSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIEZJWE1FOiByZW1vdmUgd29ya2Fyb3VuZCB3aGVuIHRoZSBOb2RlIGJ1ZyBpcyBmaXhlZFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvaXNzdWVzLzQ5MzQ0I2lzc3VlY29tbWVudC0xNzQxNzc2MzA4XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX1Y4X0NPVkVSQUdFKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFdlYWtSZWY6IENvbXBhdFdlYWtSZWYsXG4gICAgICBGaW5hbGl6YXRpb25SZWdpc3RyeTogQ29tcGF0RmluYWxpemVyXG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgV2Vha1JlZjogZ2xvYmFsLldlYWtSZWYgfHwgQ29tcGF0V2Vha1JlZixcbiAgICBGaW5hbGl6YXRpb25SZWdpc3RyeTogZ2xvYmFsLkZpbmFsaXphdGlvblJlZ2lzdHJ5IHx8IENvbXBhdEZpbmFsaXplclxuICB9XG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gPSByZXF1aXJlKCcuL2NvcmUvZXJyb3JzJylcbmNvbnN0IHsga0NsaWVudHMsIGtSdW5uaW5nLCBrQ2xvc2UsIGtEZXN0cm95LCBrRGlzcGF0Y2gsIGtJbnRlcmNlcHRvcnMgfSA9IHJlcXVpcmUoJy4vY29yZS9zeW1ib2xzJylcbmNvbnN0IERpc3BhdGNoZXJCYXNlID0gcmVxdWlyZSgnLi9kaXNwYXRjaGVyLWJhc2UnKVxuY29uc3QgUG9vbCA9IHJlcXVpcmUoJy4vcG9vbCcpXG5jb25zdCBDbGllbnQgPSByZXF1aXJlKCcuL2NsaWVudCcpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi9jb3JlL3V0aWwnKVxuY29uc3QgY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvciA9IHJlcXVpcmUoJy4vaW50ZXJjZXB0b3IvcmVkaXJlY3RJbnRlcmNlcHRvcicpXG5jb25zdCB7IFdlYWtSZWYsIEZpbmFsaXphdGlvblJlZ2lzdHJ5IH0gPSByZXF1aXJlKCcuL2NvbXBhdC9kaXNwYXRjaGVyLXdlYWtyZWYnKSgpXG5cbmNvbnN0IGtPbkNvbm5lY3QgPSBTeW1ib2woJ29uQ29ubmVjdCcpXG5jb25zdCBrT25EaXNjb25uZWN0ID0gU3ltYm9sKCdvbkRpc2Nvbm5lY3QnKVxuY29uc3Qga09uQ29ubmVjdGlvbkVycm9yID0gU3ltYm9sKCdvbkNvbm5lY3Rpb25FcnJvcicpXG5jb25zdCBrTWF4UmVkaXJlY3Rpb25zID0gU3ltYm9sKCdtYXhSZWRpcmVjdGlvbnMnKVxuY29uc3Qga09uRHJhaW4gPSBTeW1ib2woJ29uRHJhaW4nKVxuY29uc3Qga0ZhY3RvcnkgPSBTeW1ib2woJ2ZhY3RvcnknKVxuY29uc3Qga0ZpbmFsaXplciA9IFN5bWJvbCgnZmluYWxpemVyJylcbmNvbnN0IGtPcHRpb25zID0gU3ltYm9sKCdvcHRpb25zJylcblxuZnVuY3Rpb24gZGVmYXVsdEZhY3RvcnkgKG9yaWdpbiwgb3B0cykge1xuICByZXR1cm4gb3B0cyAmJiBvcHRzLmNvbm5lY3Rpb25zID09PSAxXG4gICAgPyBuZXcgQ2xpZW50KG9yaWdpbiwgb3B0cylcbiAgICA6IG5ldyBQb29sKG9yaWdpbiwgb3B0cylcbn1cblxuY2xhc3MgQWdlbnQgZXh0ZW5kcyBEaXNwYXRjaGVyQmFzZSB7XG4gIGNvbnN0cnVjdG9yICh7IGZhY3RvcnkgPSBkZWZhdWx0RmFjdG9yeSwgbWF4UmVkaXJlY3Rpb25zID0gMCwgY29ubmVjdCwgLi4ub3B0aW9ucyB9ID0ge30pIHtcbiAgICBzdXBlcigpXG5cbiAgICBpZiAodHlwZW9mIGZhY3RvcnkgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignZmFjdG9yeSBtdXN0IGJlIGEgZnVuY3Rpb24uJylcbiAgICB9XG5cbiAgICBpZiAoY29ubmVjdCAhPSBudWxsICYmIHR5cGVvZiBjb25uZWN0ICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBjb25uZWN0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdjb25uZWN0IG11c3QgYmUgYSBmdW5jdGlvbiBvciBhbiBvYmplY3QnKVxuICAgIH1cblxuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihtYXhSZWRpcmVjdGlvbnMpIHx8IG1heFJlZGlyZWN0aW9ucyA8IDApIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignbWF4UmVkaXJlY3Rpb25zIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKVxuICAgIH1cblxuICAgIGlmIChjb25uZWN0ICYmIHR5cGVvZiBjb25uZWN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25uZWN0ID0geyAuLi5jb25uZWN0IH1cbiAgICB9XG5cbiAgICB0aGlzW2tJbnRlcmNlcHRvcnNdID0gb3B0aW9ucy5pbnRlcmNlcHRvcnMgJiYgb3B0aW9ucy5pbnRlcmNlcHRvcnMuQWdlbnQgJiYgQXJyYXkuaXNBcnJheShvcHRpb25zLmludGVyY2VwdG9ycy5BZ2VudClcbiAgICAgID8gb3B0aW9ucy5pbnRlcmNlcHRvcnMuQWdlbnRcbiAgICAgIDogW2NyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3IoeyBtYXhSZWRpcmVjdGlvbnMgfSldXG5cbiAgICB0aGlzW2tPcHRpb25zXSA9IHsgLi4udXRpbC5kZWVwQ2xvbmUob3B0aW9ucyksIGNvbm5lY3QgfVxuICAgIHRoaXNba09wdGlvbnNdLmludGVyY2VwdG9ycyA9IG9wdGlvbnMuaW50ZXJjZXB0b3JzXG4gICAgICA/IHsgLi4ub3B0aW9ucy5pbnRlcmNlcHRvcnMgfVxuICAgICAgOiB1bmRlZmluZWRcbiAgICB0aGlzW2tNYXhSZWRpcmVjdGlvbnNdID0gbWF4UmVkaXJlY3Rpb25zXG4gICAgdGhpc1trRmFjdG9yeV0gPSBmYWN0b3J5XG4gICAgdGhpc1trQ2xpZW50c10gPSBuZXcgTWFwKClcbiAgICB0aGlzW2tGaW5hbGl6ZXJdID0gbmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBnYyBpcyB1bmRldGVybWluaXN0aWMgKi8ga2V5ID0+IHtcbiAgICAgIGNvbnN0IHJlZiA9IHRoaXNba0NsaWVudHNdLmdldChrZXkpXG4gICAgICBpZiAocmVmICE9PSB1bmRlZmluZWQgJiYgcmVmLmRlcmVmKCkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzW2tDbGllbnRzXS5kZWxldGUoa2V5KVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBjb25zdCBhZ2VudCA9IHRoaXNcblxuICAgIHRoaXNba09uRHJhaW5dID0gKG9yaWdpbiwgdGFyZ2V0cykgPT4ge1xuICAgICAgYWdlbnQuZW1pdCgnZHJhaW4nLCBvcmlnaW4sIFthZ2VudCwgLi4udGFyZ2V0c10pXG4gICAgfVxuXG4gICAgdGhpc1trT25Db25uZWN0XSA9IChvcmlnaW4sIHRhcmdldHMpID0+IHtcbiAgICAgIGFnZW50LmVtaXQoJ2Nvbm5lY3QnLCBvcmlnaW4sIFthZ2VudCwgLi4udGFyZ2V0c10pXG4gICAgfVxuXG4gICAgdGhpc1trT25EaXNjb25uZWN0XSA9IChvcmlnaW4sIHRhcmdldHMsIGVycikgPT4ge1xuICAgICAgYWdlbnQuZW1pdCgnZGlzY29ubmVjdCcsIG9yaWdpbiwgW2FnZW50LCAuLi50YXJnZXRzXSwgZXJyKVxuICAgIH1cblxuICAgIHRoaXNba09uQ29ubmVjdGlvbkVycm9yXSA9IChvcmlnaW4sIHRhcmdldHMsIGVycikgPT4ge1xuICAgICAgYWdlbnQuZW1pdCgnY29ubmVjdGlvbkVycm9yJywgb3JpZ2luLCBbYWdlbnQsIC4uLnRhcmdldHNdLCBlcnIpXG4gICAgfVxuICB9XG5cbiAgZ2V0IFtrUnVubmluZ10gKCkge1xuICAgIGxldCByZXQgPSAwXG4gICAgZm9yIChjb25zdCByZWYgb2YgdGhpc1trQ2xpZW50c10udmFsdWVzKCkpIHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IHJlZi5kZXJlZigpXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogZ2MgaXMgdW5kZXRlcm1pbmlzdGljICovXG4gICAgICBpZiAoY2xpZW50KSB7XG4gICAgICAgIHJldCArPSBjbGllbnRba1J1bm5pbmddXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXRcbiAgfVxuXG4gIFtrRGlzcGF0Y2hdIChvcHRzLCBoYW5kbGVyKSB7XG4gICAgbGV0IGtleVxuICAgIGlmIChvcHRzLm9yaWdpbiAmJiAodHlwZW9mIG9wdHMub3JpZ2luID09PSAnc3RyaW5nJyB8fCBvcHRzLm9yaWdpbiBpbnN0YW5jZW9mIFVSTCkpIHtcbiAgICAgIGtleSA9IFN0cmluZyhvcHRzLm9yaWdpbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdvcHRzLm9yaWdpbiBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyBvciBVUkwuJylcbiAgICB9XG5cbiAgICBjb25zdCByZWYgPSB0aGlzW2tDbGllbnRzXS5nZXQoa2V5KVxuXG4gICAgbGV0IGRpc3BhdGNoZXIgPSByZWYgPyByZWYuZGVyZWYoKSA6IG51bGxcbiAgICBpZiAoIWRpc3BhdGNoZXIpIHtcbiAgICAgIGRpc3BhdGNoZXIgPSB0aGlzW2tGYWN0b3J5XShvcHRzLm9yaWdpbiwgdGhpc1trT3B0aW9uc10pXG4gICAgICAgIC5vbignZHJhaW4nLCB0aGlzW2tPbkRyYWluXSlcbiAgICAgICAgLm9uKCdjb25uZWN0JywgdGhpc1trT25Db25uZWN0XSlcbiAgICAgICAgLm9uKCdkaXNjb25uZWN0JywgdGhpc1trT25EaXNjb25uZWN0XSlcbiAgICAgICAgLm9uKCdjb25uZWN0aW9uRXJyb3InLCB0aGlzW2tPbkNvbm5lY3Rpb25FcnJvcl0pXG5cbiAgICAgIHRoaXNba0NsaWVudHNdLnNldChrZXksIG5ldyBXZWFrUmVmKGRpc3BhdGNoZXIpKVxuICAgICAgdGhpc1trRmluYWxpemVyXS5yZWdpc3RlcihkaXNwYXRjaGVyLCBrZXkpXG4gICAgfVxuXG4gICAgcmV0dXJuIGRpc3BhdGNoZXIuZGlzcGF0Y2gob3B0cywgaGFuZGxlcilcbiAgfVxuXG4gIGFzeW5jIFtrQ2xvc2VdICgpIHtcbiAgICBjb25zdCBjbG9zZVByb21pc2VzID0gW11cbiAgICBmb3IgKGNvbnN0IHJlZiBvZiB0aGlzW2tDbGllbnRzXS52YWx1ZXMoKSkge1xuICAgICAgY29uc3QgY2xpZW50ID0gcmVmLmRlcmVmKClcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBnYyBpcyB1bmRldGVybWluaXN0aWMgKi9cbiAgICAgIGlmIChjbGllbnQpIHtcbiAgICAgICAgY2xvc2VQcm9taXNlcy5wdXNoKGNsaWVudC5jbG9zZSgpKVxuICAgICAgfVxuICAgIH1cblxuICAgIGF3YWl0IFByb21pc2UuYWxsKGNsb3NlUHJvbWlzZXMpXG4gIH1cblxuICBhc3luYyBba0Rlc3Ryb3ldIChlcnIpIHtcbiAgICBjb25zdCBkZXN0cm95UHJvbWlzZXMgPSBbXVxuICAgIGZvciAoY29uc3QgcmVmIG9mIHRoaXNba0NsaWVudHNdLnZhbHVlcygpKSB7XG4gICAgICBjb25zdCBjbGllbnQgPSByZWYuZGVyZWYoKVxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2U6IGdjIGlzIHVuZGV0ZXJtaW5pc3RpYyAqL1xuICAgICAgaWYgKGNsaWVudCkge1xuICAgICAgICBkZXN0cm95UHJvbWlzZXMucHVzaChjbGllbnQuZGVzdHJveShlcnIpKVxuICAgICAgfVxuICAgIH1cblxuICAgIGF3YWl0IFByb21pc2UuYWxsKGRlc3Ryb3lQcm9taXNlcylcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEFnZW50XG4iLAogICAgIi8vIFBvcnRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL3B1bGwvOTA3XG5cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBSZWFkYWJsZSB9ID0gcmVxdWlyZSgnc3RyZWFtJylcbmNvbnN0IHsgUmVxdWVzdEFib3J0ZWRFcnJvciwgTm90U3VwcG9ydGVkRXJyb3IsIEludmFsaWRBcmd1bWVudEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgUmVhZGFibGVTdHJlYW1Gcm9tLCB0b1VTVlN0cmluZyB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcblxubGV0IEJsb2JcblxuY29uc3Qga0NvbnN1bWUgPSBTeW1ib2woJ2tDb25zdW1lJylcbmNvbnN0IGtSZWFkaW5nID0gU3ltYm9sKCdrUmVhZGluZycpXG5jb25zdCBrQm9keSA9IFN5bWJvbCgna0JvZHknKVxuY29uc3Qga0Fib3J0ID0gU3ltYm9sKCdhYm9ydCcpXG5jb25zdCBrQ29udGVudFR5cGUgPSBTeW1ib2woJ2tDb250ZW50VHlwZScpXG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7fVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIEJvZHlSZWFkYWJsZSBleHRlbmRzIFJlYWRhYmxlIHtcbiAgY29uc3RydWN0b3IgKHtcbiAgICByZXN1bWUsXG4gICAgYWJvcnQsXG4gICAgY29udGVudFR5cGUgPSAnJyxcbiAgICBoaWdoV2F0ZXJNYXJrID0gNjQgKiAxMDI0IC8vIFNhbWUgYXMgbm9kZWpzIGZzIHN0cmVhbXMuXG4gIH0pIHtcbiAgICBzdXBlcih7XG4gICAgICBhdXRvRGVzdHJveTogdHJ1ZSxcbiAgICAgIHJlYWQ6IHJlc3VtZSxcbiAgICAgIGhpZ2hXYXRlck1hcmtcbiAgICB9KVxuXG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5kYXRhRW1pdHRlZCA9IGZhbHNlXG5cbiAgICB0aGlzW2tBYm9ydF0gPSBhYm9ydFxuICAgIHRoaXNba0NvbnN1bWVdID0gbnVsbFxuICAgIHRoaXNba0JvZHldID0gbnVsbFxuICAgIHRoaXNba0NvbnRlbnRUeXBlXSA9IGNvbnRlbnRUeXBlXG5cbiAgICAvLyBJcyBzdHJlYW0gYmVpbmcgY29uc3VtZWQgdGhyb3VnaCBSZWFkYWJsZSBBUEk/XG4gICAgLy8gVGhpcyBpcyBhbiBvcHRpbWl6YXRpb24gc28gdGhhdCB3ZSBhdm9pZCBjaGVja2luZ1xuICAgIC8vIGZvciAnZGF0YScgYW5kICdyZWFkYWJsZScgbGlzdGVuZXJzIGluIHRoZSBob3QgcGF0aFxuICAgIC8vIGluc2lkZSBwdXNoKCkuXG4gICAgdGhpc1trUmVhZGluZ10gPSBmYWxzZVxuICB9XG5cbiAgZGVzdHJveSAoZXJyKSB7XG4gICAgaWYgKHRoaXMuZGVzdHJveWVkKSB7XG4gICAgICAvLyBOb2RlIDwgMTZcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuXG4gICAgaWYgKCFlcnIgJiYgIXRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCkge1xuICAgICAgZXJyID0gbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgIH1cblxuICAgIGlmIChlcnIpIHtcbiAgICAgIHRoaXNba0Fib3J0XSgpXG4gICAgfVxuXG4gICAgcmV0dXJuIHN1cGVyLmRlc3Ryb3koZXJyKVxuICB9XG5cbiAgZW1pdCAoZXYsIC4uLmFyZ3MpIHtcbiAgICBpZiAoZXYgPT09ICdkYXRhJykge1xuICAgICAgLy8gTm9kZSA8IDE2LjdcbiAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGF0YUVtaXR0ZWQgPSB0cnVlXG4gICAgfSBlbHNlIGlmIChldiA9PT0gJ2Vycm9yJykge1xuICAgICAgLy8gTm9kZSA8IDE2XG4gICAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmVycm9yRW1pdHRlZCA9IHRydWVcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLmVtaXQoZXYsIC4uLmFyZ3MpXG4gIH1cblxuICBvbiAoZXYsIC4uLmFyZ3MpIHtcbiAgICBpZiAoZXYgPT09ICdkYXRhJyB8fCBldiA9PT0gJ3JlYWRhYmxlJykge1xuICAgICAgdGhpc1trUmVhZGluZ10gPSB0cnVlXG4gICAgfVxuICAgIHJldHVybiBzdXBlci5vbihldiwgLi4uYXJncylcbiAgfVxuXG4gIGFkZExpc3RlbmVyIChldiwgLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLm9uKGV2LCAuLi5hcmdzKVxuICB9XG5cbiAgb2ZmIChldiwgLi4uYXJncykge1xuICAgIGNvbnN0IHJldCA9IHN1cGVyLm9mZihldiwgLi4uYXJncylcbiAgICBpZiAoZXYgPT09ICdkYXRhJyB8fCBldiA9PT0gJ3JlYWRhYmxlJykge1xuICAgICAgdGhpc1trUmVhZGluZ10gPSAoXG4gICAgICAgIHRoaXMubGlzdGVuZXJDb3VudCgnZGF0YScpID4gMCB8fFxuICAgICAgICB0aGlzLmxpc3RlbmVyQ291bnQoJ3JlYWRhYmxlJykgPiAwXG4gICAgICApXG4gICAgfVxuICAgIHJldHVybiByZXRcbiAgfVxuXG4gIHJlbW92ZUxpc3RlbmVyIChldiwgLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLm9mZihldiwgLi4uYXJncylcbiAgfVxuXG4gIHB1c2ggKGNodW5rKSB7XG4gICAgaWYgKHRoaXNba0NvbnN1bWVdICYmIGNodW5rICE9PSBudWxsICYmIHRoaXMucmVhZGFibGVMZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnN1bWVQdXNoKHRoaXNba0NvbnN1bWVdLCBjaHVuaylcbiAgICAgIHJldHVybiB0aGlzW2tSZWFkaW5nXSA/IHN1cGVyLnB1c2goY2h1bmspIDogdHJ1ZVxuICAgIH1cbiAgICByZXR1cm4gc3VwZXIucHVzaChjaHVuaylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS10ZXh0XG4gIGFzeW5jIHRleHQgKCkge1xuICAgIHJldHVybiBjb25zdW1lKHRoaXMsICd0ZXh0JylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS1qc29uXG4gIGFzeW5jIGpzb24gKCkge1xuICAgIHJldHVybiBjb25zdW1lKHRoaXMsICdqc29uJylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS1ibG9iXG4gIGFzeW5jIGJsb2IgKCkge1xuICAgIHJldHVybiBjb25zdW1lKHRoaXMsICdibG9iJylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS1hcnJheWJ1ZmZlclxuICBhc3luYyBhcnJheUJ1ZmZlciAoKSB7XG4gICAgcmV0dXJuIGNvbnN1bWUodGhpcywgJ2FycmF5QnVmZmVyJylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS1mb3JtZGF0YVxuICBhc3luYyBmb3JtRGF0YSAoKSB7XG4gICAgLy8gVE9ETzogSW1wbGVtZW50LlxuICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWRFcnJvcigpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWJvZHktYm9keXVzZWRcbiAgZ2V0IGJvZHlVc2VkICgpIHtcbiAgICByZXR1cm4gdXRpbC5pc0Rpc3R1cmJlZCh0aGlzKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1ib2R5LWJvZHlcbiAgZ2V0IGJvZHkgKCkge1xuICAgIGlmICghdGhpc1trQm9keV0pIHtcbiAgICAgIHRoaXNba0JvZHldID0gUmVhZGFibGVTdHJlYW1Gcm9tKHRoaXMpXG4gICAgICBpZiAodGhpc1trQ29uc3VtZV0pIHtcbiAgICAgICAgLy8gVE9ETzogSXMgdGhpcyB0aGUgYmVzdCB3YXkgdG8gZm9yY2UgYSBsb2NrP1xuICAgICAgICB0aGlzW2tCb2R5XS5nZXRSZWFkZXIoKSAvLyBFbnN1cmUgc3RyZWFtIGlzIGxvY2tlZC5cbiAgICAgICAgYXNzZXJ0KHRoaXNba0JvZHldLmxvY2tlZClcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXNba0JvZHldXG4gIH1cblxuICBkdW1wIChvcHRzKSB7XG4gICAgbGV0IGxpbWl0ID0gb3B0cyAmJiBOdW1iZXIuaXNGaW5pdGUob3B0cy5saW1pdCkgPyBvcHRzLmxpbWl0IDogMjYyMTQ0XG4gICAgY29uc3Qgc2lnbmFsID0gb3B0cyAmJiBvcHRzLnNpZ25hbFxuXG4gICAgaWYgKHNpZ25hbCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBzaWduYWwgIT09ICdvYmplY3QnIHx8ICEoJ2Fib3J0ZWQnIGluIHNpZ25hbCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3NpZ25hbCBtdXN0IGJlIGFuIEFib3J0U2lnbmFsJylcbiAgICAgICAgfVxuICAgICAgICB1dGlsLnRocm93SWZBYm9ydGVkKHNpZ25hbClcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBzaWduYWxMaXN0ZW5lckNsZWFudXAgPSBzaWduYWxcbiAgICAgICAgPyB1dGlsLmFkZEFib3J0TGlzdGVuZXIoc2lnbmFsLCAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5kZXN0cm95KClcbiAgICAgICAgfSlcbiAgICAgICAgOiBub29wXG5cbiAgICAgIHRoaXNcbiAgICAgICAgLm9uKCdjbG9zZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBzaWduYWxMaXN0ZW5lckNsZWFudXAoKVxuICAgICAgICAgIGlmIChzaWduYWwgJiYgc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgICAgIHJlamVjdChzaWduYWwucmVhc29uIHx8IE9iamVjdC5hc3NpZ24obmV3IEVycm9yKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkJyksIHsgbmFtZTogJ0Fib3J0RXJyb3InIH0pKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNvbHZlKG51bGwpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAub24oJ2Vycm9yJywgbm9vcClcbiAgICAgICAgLm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7XG4gICAgICAgICAgbGltaXQgLT0gY2h1bmsubGVuZ3RoXG4gICAgICAgICAgaWYgKGxpbWl0IDw9IDApIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdHJveSgpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAucmVzdW1lKClcbiAgICB9KVxuICB9XG59XG5cbi8vIGh0dHBzOi8vc3RyZWFtcy5zcGVjLndoYXR3Zy5vcmcvI3JlYWRhYmxlc3RyZWFtLWxvY2tlZFxuZnVuY3Rpb24gaXNMb2NrZWQgKHNlbGYpIHtcbiAgLy8gQ29uc3VtZSBpcyBhbiBpbXBsaWNpdCBsb2NrLlxuICByZXR1cm4gKHNlbGZba0JvZHldICYmIHNlbGZba0JvZHldLmxvY2tlZCA9PT0gdHJ1ZSkgfHwgc2VsZltrQ29uc3VtZV1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2JvZHktdW51c2FibGVcbmZ1bmN0aW9uIGlzVW51c2FibGUgKHNlbGYpIHtcbiAgcmV0dXJuIHV0aWwuaXNEaXN0dXJiZWQoc2VsZikgfHwgaXNMb2NrZWQoc2VsZilcbn1cblxuYXN5bmMgZnVuY3Rpb24gY29uc3VtZSAoc3RyZWFtLCB0eXBlKSB7XG4gIGlmIChpc1VudXNhYmxlKHN0cmVhbSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd1bnVzYWJsZScpXG4gIH1cblxuICBhc3NlcnQoIXN0cmVhbVtrQ29uc3VtZV0pXG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBzdHJlYW1ba0NvbnN1bWVdID0ge1xuICAgICAgdHlwZSxcbiAgICAgIHN0cmVhbSxcbiAgICAgIHJlc29sdmUsXG4gICAgICByZWplY3QsXG4gICAgICBsZW5ndGg6IDAsXG4gICAgICBib2R5OiBbXVxuICAgIH1cblxuICAgIHN0cmVhbVxuICAgICAgLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgY29uc3VtZUZpbmlzaCh0aGlzW2tDb25zdW1lXSwgZXJyKVxuICAgICAgfSlcbiAgICAgIC5vbignY2xvc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzW2tDb25zdW1lXS5ib2R5ICE9PSBudWxsKSB7XG4gICAgICAgICAgY29uc3VtZUZpbmlzaCh0aGlzW2tDb25zdW1lXSwgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKSlcbiAgICAgICAgfVxuICAgICAgfSlcblxuICAgIHByb2Nlc3MubmV4dFRpY2soY29uc3VtZVN0YXJ0LCBzdHJlYW1ba0NvbnN1bWVdKVxuICB9KVxufVxuXG5mdW5jdGlvbiBjb25zdW1lU3RhcnQgKGNvbnN1bWUpIHtcbiAgaWYgKGNvbnN1bWUuYm9keSA9PT0gbnVsbCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgY29uc3QgeyBfcmVhZGFibGVTdGF0ZTogc3RhdGUgfSA9IGNvbnN1bWUuc3RyZWFtXG5cbiAgZm9yIChjb25zdCBjaHVuayBvZiBzdGF0ZS5idWZmZXIpIHtcbiAgICBjb25zdW1lUHVzaChjb25zdW1lLCBjaHVuaylcbiAgfVxuXG4gIGlmIChzdGF0ZS5lbmRFbWl0dGVkKSB7XG4gICAgY29uc3VtZUVuZCh0aGlzW2tDb25zdW1lXSlcbiAgfSBlbHNlIHtcbiAgICBjb25zdW1lLnN0cmVhbS5vbignZW5kJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3VtZUVuZCh0aGlzW2tDb25zdW1lXSlcbiAgICB9KVxuICB9XG5cbiAgY29uc3VtZS5zdHJlYW0ucmVzdW1lKClcblxuICB3aGlsZSAoY29uc3VtZS5zdHJlYW0ucmVhZCgpICE9IG51bGwpIHtcbiAgICAvLyBMb29wXG4gIH1cbn1cblxuZnVuY3Rpb24gY29uc3VtZUVuZCAoY29uc3VtZSkge1xuICBjb25zdCB7IHR5cGUsIGJvZHksIHJlc29sdmUsIHN0cmVhbSwgbGVuZ3RoIH0gPSBjb25zdW1lXG5cbiAgdHJ5IHtcbiAgICBpZiAodHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICByZXNvbHZlKHRvVVNWU3RyaW5nKEJ1ZmZlci5jb25jYXQoYm9keSkpKVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2pzb24nKSB7XG4gICAgICByZXNvbHZlKEpTT04ucGFyc2UoQnVmZmVyLmNvbmNhdChib2R5KSkpXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnYXJyYXlCdWZmZXInKSB7XG4gICAgICBjb25zdCBkc3QgPSBuZXcgVWludDhBcnJheShsZW5ndGgpXG5cbiAgICAgIGxldCBwb3MgPSAwXG4gICAgICBmb3IgKGNvbnN0IGJ1ZiBvZiBib2R5KSB7XG4gICAgICAgIGRzdC5zZXQoYnVmLCBwb3MpXG4gICAgICAgIHBvcyArPSBidWYuYnl0ZUxlbmd0aFxuICAgICAgfVxuXG4gICAgICByZXNvbHZlKGRzdC5idWZmZXIpXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnYmxvYicpIHtcbiAgICAgIGlmICghQmxvYikge1xuICAgICAgICBCbG9iID0gcmVxdWlyZSgnYnVmZmVyJykuQmxvYlxuICAgICAgfVxuICAgICAgcmVzb2x2ZShuZXcgQmxvYihib2R5LCB7IHR5cGU6IHN0cmVhbVtrQ29udGVudFR5cGVdIH0pKVxuICAgIH1cblxuICAgIGNvbnN1bWVGaW5pc2goY29uc3VtZSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgc3RyZWFtLmRlc3Ryb3koZXJyKVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbnN1bWVQdXNoIChjb25zdW1lLCBjaHVuaykge1xuICBjb25zdW1lLmxlbmd0aCArPSBjaHVuay5sZW5ndGhcbiAgY29uc3VtZS5ib2R5LnB1c2goY2h1bmspXG59XG5cbmZ1bmN0aW9uIGNvbnN1bWVGaW5pc2ggKGNvbnN1bWUsIGVycikge1xuICBpZiAoY29uc3VtZS5ib2R5ID09PSBudWxsKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoZXJyKSB7XG4gICAgY29uc3VtZS5yZWplY3QoZXJyKVxuICB9IGVsc2Uge1xuICAgIGNvbnN1bWUucmVzb2x2ZSgpXG4gIH1cblxuICBjb25zdW1lLnR5cGUgPSBudWxsXG4gIGNvbnN1bWUuc3RyZWFtID0gbnVsbFxuICBjb25zdW1lLnJlc29sdmUgPSBudWxsXG4gIGNvbnN1bWUucmVqZWN0ID0gbnVsbFxuICBjb25zdW1lLmxlbmd0aCA9IDBcbiAgY29uc3VtZS5ib2R5ID0gbnVsbFxufVxuIiwKICAgICJjb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3Qge1xuICBSZXNwb25zZVN0YXR1c0NvZGVFcnJvclxufSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHsgdG9VU1ZTdHJpbmcgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5cbmFzeW5jIGZ1bmN0aW9uIGdldFJlc29sdmVFcnJvckJvZHlDYWxsYmFjayAoeyBjYWxsYmFjaywgYm9keSwgY29udGVudFR5cGUsIHN0YXR1c0NvZGUsIHN0YXR1c01lc3NhZ2UsIGhlYWRlcnMgfSkge1xuICBhc3NlcnQoYm9keSlcblxuICBsZXQgY2h1bmtzID0gW11cbiAgbGV0IGxpbWl0ID0gMFxuXG4gIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgYm9keSkge1xuICAgIGNodW5rcy5wdXNoKGNodW5rKVxuICAgIGxpbWl0ICs9IGNodW5rLmxlbmd0aFxuICAgIGlmIChsaW1pdCA+IDEyOCAqIDEwMjQpIHtcbiAgICAgIGNodW5rcyA9IG51bGxcbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaWYgKHN0YXR1c0NvZGUgPT09IDIwNCB8fCAhY29udGVudFR5cGUgfHwgIWNodW5rcykge1xuICAgIHByb2Nlc3MubmV4dFRpY2soY2FsbGJhY2ssIG5ldyBSZXNwb25zZVN0YXR1c0NvZGVFcnJvcihgUmVzcG9uc2Ugc3RhdHVzIGNvZGUgJHtzdGF0dXNDb2RlfSR7c3RhdHVzTWVzc2FnZSA/IGA6ICR7c3RhdHVzTWVzc2FnZX1gIDogJyd9YCwgc3RhdHVzQ29kZSwgaGVhZGVycykpXG4gICAgcmV0dXJuXG4gIH1cblxuICB0cnkge1xuICAgIGlmIChjb250ZW50VHlwZS5zdGFydHNXaXRoKCdhcHBsaWNhdGlvbi9qc29uJykpIHtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSBKU09OLnBhcnNlKHRvVVNWU3RyaW5nKEJ1ZmZlci5jb25jYXQoY2h1bmtzKSkpXG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGNhbGxiYWNrLCBuZXcgUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IoYFJlc3BvbnNlIHN0YXR1cyBjb2RlICR7c3RhdHVzQ29kZX0ke3N0YXR1c01lc3NhZ2UgPyBgOiAke3N0YXR1c01lc3NhZ2V9YCA6ICcnfWAsIHN0YXR1c0NvZGUsIGhlYWRlcnMsIHBheWxvYWQpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGNvbnRlbnRUeXBlLnN0YXJ0c1dpdGgoJ3RleHQvJykpIHtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSB0b1VTVlN0cmluZyhCdWZmZXIuY29uY2F0KGNodW5rcykpXG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGNhbGxiYWNrLCBuZXcgUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IoYFJlc3BvbnNlIHN0YXR1cyBjb2RlICR7c3RhdHVzQ29kZX0ke3N0YXR1c01lc3NhZ2UgPyBgOiAke3N0YXR1c01lc3NhZ2V9YCA6ICcnfWAsIHN0YXR1c0NvZGUsIGhlYWRlcnMsIHBheWxvYWQpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBQcm9jZXNzIGluIGEgZmFsbGJhY2sgaWYgZXJyb3JcbiAgfVxuXG4gIHByb2Nlc3MubmV4dFRpY2soY2FsbGJhY2ssIG5ldyBSZXNwb25zZVN0YXR1c0NvZGVFcnJvcihgUmVzcG9uc2Ugc3RhdHVzIGNvZGUgJHtzdGF0dXNDb2RlfSR7c3RhdHVzTWVzc2FnZSA/IGA6ICR7c3RhdHVzTWVzc2FnZX1gIDogJyd9YCwgc3RhdHVzQ29kZSwgaGVhZGVycykpXG59XG5cbm1vZHVsZS5leHBvcnRzID0geyBnZXRSZXNvbHZlRXJyb3JCb2R5Q2FsbGJhY2sgfVxuIiwKICAgICJjb25zdCB7IGFkZEFib3J0TGlzdGVuZXIgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IFJlcXVlc3RBYm9ydGVkRXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcblxuY29uc3Qga0xpc3RlbmVyID0gU3ltYm9sKCdrTGlzdGVuZXInKVxuY29uc3Qga1NpZ25hbCA9IFN5bWJvbCgna1NpZ25hbCcpXG5cbmZ1bmN0aW9uIGFib3J0IChzZWxmKSB7XG4gIGlmIChzZWxmLmFib3J0KSB7XG4gICAgc2VsZi5hYm9ydCgpXG4gIH0gZWxzZSB7XG4gICAgc2VsZi5vbkVycm9yKG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKCkpXG4gIH1cbn1cblxuZnVuY3Rpb24gYWRkU2lnbmFsIChzZWxmLCBzaWduYWwpIHtcbiAgc2VsZltrU2lnbmFsXSA9IG51bGxcbiAgc2VsZltrTGlzdGVuZXJdID0gbnVsbFxuXG4gIGlmICghc2lnbmFsKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcbiAgICBhYm9ydChzZWxmKVxuICAgIHJldHVyblxuICB9XG5cbiAgc2VsZltrU2lnbmFsXSA9IHNpZ25hbFxuICBzZWxmW2tMaXN0ZW5lcl0gPSAoKSA9PiB7XG4gICAgYWJvcnQoc2VsZilcbiAgfVxuXG4gIGFkZEFib3J0TGlzdGVuZXIoc2VsZltrU2lnbmFsXSwgc2VsZltrTGlzdGVuZXJdKVxufVxuXG5mdW5jdGlvbiByZW1vdmVTaWduYWwgKHNlbGYpIHtcbiAgaWYgKCFzZWxmW2tTaWduYWxdKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoJ3JlbW92ZUV2ZW50TGlzdGVuZXInIGluIHNlbGZba1NpZ25hbF0pIHtcbiAgICBzZWxmW2tTaWduYWxdLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgc2VsZltrTGlzdGVuZXJdKVxuICB9IGVsc2Uge1xuICAgIHNlbGZba1NpZ25hbF0ucmVtb3ZlTGlzdGVuZXIoJ2Fib3J0Jywgc2VsZltrTGlzdGVuZXJdKVxuICB9XG5cbiAgc2VsZltrU2lnbmFsXSA9IG51bGxcbiAgc2VsZltrTGlzdGVuZXJdID0gbnVsbFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgYWRkU2lnbmFsLFxuICByZW1vdmVTaWduYWxcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFJlYWRhYmxlID0gcmVxdWlyZSgnLi9yZWFkYWJsZScpXG5jb25zdCB7XG4gIEludmFsaWRBcmd1bWVudEVycm9yLFxuICBSZXF1ZXN0QWJvcnRlZEVycm9yXG59ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGdldFJlc29sdmVFcnJvckJvZHlDYWxsYmFjayB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgQXN5bmNSZXNvdXJjZSB9ID0gcmVxdWlyZSgnYXN5bmNfaG9va3MnKVxuY29uc3QgeyBhZGRTaWduYWwsIHJlbW92ZVNpZ25hbCB9ID0gcmVxdWlyZSgnLi9hYm9ydC1zaWduYWwnKVxuXG5jbGFzcyBSZXF1ZXN0SGFuZGxlciBleHRlbmRzIEFzeW5jUmVzb3VyY2Uge1xuICBjb25zdHJ1Y3RvciAob3B0cywgY2FsbGJhY2spIHtcbiAgICBpZiAoIW9wdHMgfHwgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb3B0cycpXG4gICAgfVxuXG4gICAgY29uc3QgeyBzaWduYWwsIG1ldGhvZCwgb3BhcXVlLCBib2R5LCBvbkluZm8sIHJlc3BvbnNlSGVhZGVycywgdGhyb3dPbkVycm9yLCBoaWdoV2F0ZXJNYXJrIH0gPSBvcHRzXG5cbiAgICB0cnkge1xuICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY2FsbGJhY2snKVxuICAgICAgfVxuXG4gICAgICBpZiAoaGlnaFdhdGVyTWFyayAmJiAodHlwZW9mIGhpZ2hXYXRlck1hcmsgIT09ICdudW1iZXInIHx8IGhpZ2hXYXRlck1hcmsgPCAwKSkge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgaGlnaFdhdGVyTWFyaycpXG4gICAgICB9XG5cbiAgICAgIGlmIChzaWduYWwgJiYgdHlwZW9mIHNpZ25hbC5vbiAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2Ygc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdzaWduYWwgbXVzdCBiZSBhbiBFdmVudEVtaXR0ZXIgb3IgRXZlbnRUYXJnZXQnKVxuICAgICAgfVxuXG4gICAgICBpZiAobWV0aG9kID09PSAnQ09OTkVDVCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG1ldGhvZCcpXG4gICAgICB9XG5cbiAgICAgIGlmIChvbkluZm8gJiYgdHlwZW9mIG9uSW5mbyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25JbmZvIGNhbGxiYWNrJylcbiAgICAgIH1cblxuICAgICAgc3VwZXIoJ1VORElDSV9SRVFVRVNUJylcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICh1dGlsLmlzU3RyZWFtKGJvZHkpKSB7XG4gICAgICAgIHV0aWwuZGVzdHJveShib2R5Lm9uKCdlcnJvcicsIHV0aWwubm9wKSwgZXJyKVxuICAgICAgfVxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuXG4gICAgdGhpcy5yZXNwb25zZUhlYWRlcnMgPSByZXNwb25zZUhlYWRlcnMgfHwgbnVsbFxuICAgIHRoaXMub3BhcXVlID0gb3BhcXVlIHx8IG51bGxcbiAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2tcbiAgICB0aGlzLnJlcyA9IG51bGxcbiAgICB0aGlzLmFib3J0ID0gbnVsbFxuICAgIHRoaXMuYm9keSA9IGJvZHlcbiAgICB0aGlzLnRyYWlsZXJzID0ge31cbiAgICB0aGlzLmNvbnRleHQgPSBudWxsXG4gICAgdGhpcy5vbkluZm8gPSBvbkluZm8gfHwgbnVsbFxuICAgIHRoaXMudGhyb3dPbkVycm9yID0gdGhyb3dPbkVycm9yXG4gICAgdGhpcy5oaWdoV2F0ZXJNYXJrID0gaGlnaFdhdGVyTWFya1xuXG4gICAgaWYgKHV0aWwuaXNTdHJlYW0oYm9keSkpIHtcbiAgICAgIGJvZHkub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgICB0aGlzLm9uRXJyb3IoZXJyKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBhZGRTaWduYWwodGhpcywgc2lnbmFsKVxuICB9XG5cbiAgb25Db25uZWN0IChhYm9ydCwgY29udGV4dCkge1xuICAgIGlmICghdGhpcy5jYWxsYmFjaykge1xuICAgICAgdGhyb3cgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgIH1cblxuICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHRcbiAgfVxuXG4gIG9uSGVhZGVycyAoc3RhdHVzQ29kZSwgcmF3SGVhZGVycywgcmVzdW1lLCBzdGF0dXNNZXNzYWdlKSB7XG4gICAgY29uc3QgeyBjYWxsYmFjaywgb3BhcXVlLCBhYm9ydCwgY29udGV4dCwgcmVzcG9uc2VIZWFkZXJzLCBoaWdoV2F0ZXJNYXJrIH0gPSB0aGlzXG5cbiAgICBjb25zdCBoZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VSYXdIZWFkZXJzKHJhd0hlYWRlcnMpIDogdXRpbC5wYXJzZUhlYWRlcnMocmF3SGVhZGVycylcblxuICAgIGlmIChzdGF0dXNDb2RlIDwgMjAwKSB7XG4gICAgICBpZiAodGhpcy5vbkluZm8pIHtcbiAgICAgICAgdGhpcy5vbkluZm8oeyBzdGF0dXNDb2RlLCBoZWFkZXJzIH0pXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBwYXJzZWRIZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpIDogaGVhZGVyc1xuICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcGFyc2VkSGVhZGVyc1snY29udGVudC10eXBlJ11cbiAgICBjb25zdCBib2R5ID0gbmV3IFJlYWRhYmxlKHsgcmVzdW1lLCBhYm9ydCwgY29udGVudFR5cGUsIGhpZ2hXYXRlck1hcmsgfSlcblxuICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG4gICAgdGhpcy5yZXMgPSBib2R5XG4gICAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICBpZiAodGhpcy50aHJvd09uRXJyb3IgJiYgc3RhdHVzQ29kZSA+PSA0MDApIHtcbiAgICAgICAgdGhpcy5ydW5JbkFzeW5jU2NvcGUoZ2V0UmVzb2x2ZUVycm9yQm9keUNhbGxiYWNrLCBudWxsLFxuICAgICAgICAgIHsgY2FsbGJhY2ssIGJvZHksIGNvbnRlbnRUeXBlLCBzdGF0dXNDb2RlLCBzdGF0dXNNZXNzYWdlLCBoZWFkZXJzIH1cbiAgICAgICAgKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5ydW5JbkFzeW5jU2NvcGUoY2FsbGJhY2ssIG51bGwsIG51bGwsIHtcbiAgICAgICAgICBzdGF0dXNDb2RlLFxuICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgdHJhaWxlcnM6IHRoaXMudHJhaWxlcnMsXG4gICAgICAgICAgb3BhcXVlLFxuICAgICAgICAgIGJvZHksXG4gICAgICAgICAgY29udGV4dFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uRGF0YSAoY2h1bmspIHtcbiAgICBjb25zdCB7IHJlcyB9ID0gdGhpc1xuICAgIHJldHVybiByZXMucHVzaChjaHVuaylcbiAgfVxuXG4gIG9uQ29tcGxldGUgKHRyYWlsZXJzKSB7XG4gICAgY29uc3QgeyByZXMgfSA9IHRoaXNcblxuICAgIHJlbW92ZVNpZ25hbCh0aGlzKVxuXG4gICAgdXRpbC5wYXJzZUhlYWRlcnModHJhaWxlcnMsIHRoaXMudHJhaWxlcnMpXG5cbiAgICByZXMucHVzaChudWxsKVxuICB9XG5cbiAgb25FcnJvciAoZXJyKSB7XG4gICAgY29uc3QgeyByZXMsIGNhbGxiYWNrLCBib2R5LCBvcGFxdWUgfSA9IHRoaXNcblxuICAgIHJlbW92ZVNpZ25hbCh0aGlzKVxuXG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAvLyBUT0RPOiBEb2VzIHRoaXMgbmVlZCBxdWV1ZU1pY3JvdGFzaz9cbiAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGNhbGxiYWNrLCBudWxsLCBlcnIsIHsgb3BhcXVlIH0pXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChyZXMpIHtcbiAgICAgIHRoaXMucmVzID0gbnVsbFxuICAgICAgLy8gRW5zdXJlIGFsbCBxdWV1ZWQgaGFuZGxlcnMgYXJlIGludm9rZWQgYmVmb3JlIGRlc3Ryb3lpbmcgcmVzLlxuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICB1dGlsLmRlc3Ryb3kocmVzLCBlcnIpXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChib2R5KSB7XG4gICAgICB0aGlzLmJvZHkgPSBudWxsXG4gICAgICB1dGlsLmRlc3Ryb3koYm9keSwgZXJyKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiByZXF1ZXN0IChvcHRzLCBjYWxsYmFjaykge1xuICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICByZXF1ZXN0LmNhbGwodGhpcywgb3B0cywgKGVyciwgZGF0YSkgPT4ge1xuICAgICAgICByZXR1cm4gZXJyID8gcmVqZWN0KGVycikgOiByZXNvbHZlKGRhdGEpXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICB0cnkge1xuICAgIHRoaXMuZGlzcGF0Y2gob3B0cywgbmV3IFJlcXVlc3RIYW5kbGVyKG9wdHMsIGNhbGxiYWNrKSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICAgIGNvbnN0IG9wYXF1ZSA9IG9wdHMgJiYgb3B0cy5vcGFxdWVcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhlcnIsIHsgb3BhcXVlIH0pKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWVzdFxubW9kdWxlLmV4cG9ydHMuUmVxdWVzdEhhbmRsZXIgPSBSZXF1ZXN0SGFuZGxlclxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBmaW5pc2hlZCwgUGFzc1Rocm91Z2ggfSA9IHJlcXVpcmUoJ3N0cmVhbScpXG5jb25zdCB7XG4gIEludmFsaWRBcmd1bWVudEVycm9yLFxuICBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcixcbiAgUmVxdWVzdEFib3J0ZWRFcnJvclxufSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBnZXRSZXNvbHZlRXJyb3JCb2R5Q2FsbGJhY2sgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IEFzeW5jUmVzb3VyY2UgfSA9IHJlcXVpcmUoJ2FzeW5jX2hvb2tzJylcbmNvbnN0IHsgYWRkU2lnbmFsLCByZW1vdmVTaWduYWwgfSA9IHJlcXVpcmUoJy4vYWJvcnQtc2lnbmFsJylcblxuY2xhc3MgU3RyZWFtSGFuZGxlciBleHRlbmRzIEFzeW5jUmVzb3VyY2Uge1xuICBjb25zdHJ1Y3RvciAob3B0cywgZmFjdG9yeSwgY2FsbGJhY2spIHtcbiAgICBpZiAoIW9wdHMgfHwgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb3B0cycpXG4gICAgfVxuXG4gICAgY29uc3QgeyBzaWduYWwsIG1ldGhvZCwgb3BhcXVlLCBib2R5LCBvbkluZm8sIHJlc3BvbnNlSGVhZGVycywgdGhyb3dPbkVycm9yIH0gPSBvcHRzXG5cbiAgICB0cnkge1xuICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY2FsbGJhY2snKVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGZhY3RvcnkgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGZhY3RvcnknKVxuICAgICAgfVxuXG4gICAgICBpZiAoc2lnbmFsICYmIHR5cGVvZiBzaWduYWwub24gIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignc2lnbmFsIG11c3QgYmUgYW4gRXZlbnRFbWl0dGVyIG9yIEV2ZW50VGFyZ2V0JylcbiAgICAgIH1cblxuICAgICAgaWYgKG1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBtZXRob2QnKVxuICAgICAgfVxuXG4gICAgICBpZiAob25JbmZvICYmIHR5cGVvZiBvbkluZm8gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uSW5mbyBjYWxsYmFjaycpXG4gICAgICB9XG5cbiAgICAgIHN1cGVyKCdVTkRJQ0lfU1RSRUFNJylcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICh1dGlsLmlzU3RyZWFtKGJvZHkpKSB7XG4gICAgICAgIHV0aWwuZGVzdHJveShib2R5Lm9uKCdlcnJvcicsIHV0aWwubm9wKSwgZXJyKVxuICAgICAgfVxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuXG4gICAgdGhpcy5yZXNwb25zZUhlYWRlcnMgPSByZXNwb25zZUhlYWRlcnMgfHwgbnVsbFxuICAgIHRoaXMub3BhcXVlID0gb3BhcXVlIHx8IG51bGxcbiAgICB0aGlzLmZhY3RvcnkgPSBmYWN0b3J5XG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrXG4gICAgdGhpcy5yZXMgPSBudWxsXG4gICAgdGhpcy5hYm9ydCA9IG51bGxcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsXG4gICAgdGhpcy50cmFpbGVycyA9IG51bGxcbiAgICB0aGlzLmJvZHkgPSBib2R5XG4gICAgdGhpcy5vbkluZm8gPSBvbkluZm8gfHwgbnVsbFxuICAgIHRoaXMudGhyb3dPbkVycm9yID0gdGhyb3dPbkVycm9yIHx8IGZhbHNlXG5cbiAgICBpZiAodXRpbC5pc1N0cmVhbShib2R5KSkge1xuICAgICAgYm9keS5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMub25FcnJvcihlcnIpXG4gICAgICB9KVxuICAgIH1cblxuICAgIGFkZFNpZ25hbCh0aGlzLCBzaWduYWwpXG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0LCBjb250ZXh0KSB7XG4gICAgaWYgKCF0aGlzLmNhbGxiYWNrKSB7XG4gICAgICB0aHJvdyBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gICAgfVxuXG4gICAgdGhpcy5hYm9ydCA9IGFib3J0XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dFxuICB9XG5cbiAgb25IZWFkZXJzIChzdGF0dXNDb2RlLCByYXdIZWFkZXJzLCByZXN1bWUsIHN0YXR1c01lc3NhZ2UpIHtcbiAgICBjb25zdCB7IGZhY3RvcnksIG9wYXF1ZSwgY29udGV4dCwgY2FsbGJhY2ssIHJlc3BvbnNlSGVhZGVycyB9ID0gdGhpc1xuXG4gICAgY29uc3QgaGVhZGVycyA9IHJlc3BvbnNlSGVhZGVycyA9PT0gJ3JhdycgPyB1dGlsLnBhcnNlUmF3SGVhZGVycyhyYXdIZWFkZXJzKSA6IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpXG5cbiAgICBpZiAoc3RhdHVzQ29kZSA8IDIwMCkge1xuICAgICAgaWYgKHRoaXMub25JbmZvKSB7XG4gICAgICAgIHRoaXMub25JbmZvKHsgc3RhdHVzQ29kZSwgaGVhZGVycyB9KVxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5mYWN0b3J5ID0gbnVsbFxuXG4gICAgbGV0IHJlc1xuXG4gICAgaWYgKHRoaXMudGhyb3dPbkVycm9yICYmIHN0YXR1c0NvZGUgPj0gNDAwKSB7XG4gICAgICBjb25zdCBwYXJzZWRIZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpIDogaGVhZGVyc1xuICAgICAgY29uc3QgY29udGVudFR5cGUgPSBwYXJzZWRIZWFkZXJzWydjb250ZW50LXR5cGUnXVxuICAgICAgcmVzID0gbmV3IFBhc3NUaHJvdWdoKClcblxuICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGxcbiAgICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGdldFJlc29sdmVFcnJvckJvZHlDYWxsYmFjaywgbnVsbCxcbiAgICAgICAgeyBjYWxsYmFjaywgYm9keTogcmVzLCBjb250ZW50VHlwZSwgc3RhdHVzQ29kZSwgc3RhdHVzTWVzc2FnZSwgaGVhZGVycyB9XG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChmYWN0b3J5ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICByZXMgPSB0aGlzLnJ1bkluQXN5bmNTY29wZShmYWN0b3J5LCBudWxsLCB7XG4gICAgICAgIHN0YXR1c0NvZGUsXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIG9wYXF1ZSxcbiAgICAgICAgY29udGV4dFxuICAgICAgfSlcblxuICAgICAgaWYgKFxuICAgICAgICAhcmVzIHx8XG4gICAgICAgIHR5cGVvZiByZXMud3JpdGUgIT09ICdmdW5jdGlvbicgfHxcbiAgICAgICAgdHlwZW9mIHJlcy5lbmQgIT09ICdmdW5jdGlvbicgfHxcbiAgICAgICAgdHlwZW9mIHJlcy5vbiAhPT0gJ2Z1bmN0aW9uJ1xuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcignZXhwZWN0ZWQgV3JpdGFibGUnKVxuICAgICAgfVxuXG4gICAgICAvLyBUT0RPOiBBdm9pZCBmaW5pc2hlZC4gSXQgcmVnaXN0ZXJzIGFuIHVubmVjZXNzYXJ5IGFtb3VudCBvZiBsaXN0ZW5lcnMuXG4gICAgICBmaW5pc2hlZChyZXMsIHsgcmVhZGFibGU6IGZhbHNlIH0sIChlcnIpID0+IHtcbiAgICAgICAgY29uc3QgeyBjYWxsYmFjaywgcmVzLCBvcGFxdWUsIHRyYWlsZXJzLCBhYm9ydCB9ID0gdGhpc1xuXG4gICAgICAgIHRoaXMucmVzID0gbnVsbFxuICAgICAgICBpZiAoZXJyIHx8ICFyZXMucmVhZGFibGUpIHtcbiAgICAgICAgICB1dGlsLmRlc3Ryb3kocmVzLCBlcnIpXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNhbGxiYWNrID0gbnVsbFxuICAgICAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgZXJyIHx8IG51bGwsIHsgb3BhcXVlLCB0cmFpbGVycyB9KVxuXG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICBhYm9ydCgpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmVzLm9uKCdkcmFpbicsIHJlc3VtZSlcblxuICAgIHRoaXMucmVzID0gcmVzXG5cbiAgICBjb25zdCBuZWVkRHJhaW4gPSByZXMud3JpdGFibGVOZWVkRHJhaW4gIT09IHVuZGVmaW5lZFxuICAgICAgPyByZXMud3JpdGFibGVOZWVkRHJhaW5cbiAgICAgIDogcmVzLl93cml0YWJsZVN0YXRlICYmIHJlcy5fd3JpdGFibGVTdGF0ZS5uZWVkRHJhaW5cblxuICAgIHJldHVybiBuZWVkRHJhaW4gIT09IHRydWVcbiAgfVxuXG4gIG9uRGF0YSAoY2h1bmspIHtcbiAgICBjb25zdCB7IHJlcyB9ID0gdGhpc1xuXG4gICAgcmV0dXJuIHJlcyA/IHJlcy53cml0ZShjaHVuaykgOiB0cnVlXG4gIH1cblxuICBvbkNvbXBsZXRlICh0cmFpbGVycykge1xuICAgIGNvbnN0IHsgcmVzIH0gPSB0aGlzXG5cbiAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgIGlmICghcmVzKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLnRyYWlsZXJzID0gdXRpbC5wYXJzZUhlYWRlcnModHJhaWxlcnMpXG5cbiAgICByZXMuZW5kKClcbiAgfVxuXG4gIG9uRXJyb3IgKGVycikge1xuICAgIGNvbnN0IHsgcmVzLCBjYWxsYmFjaywgb3BhcXVlLCBib2R5IH0gPSB0aGlzXG5cbiAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgIHRoaXMuZmFjdG9yeSA9IG51bGxcblxuICAgIGlmIChyZXMpIHtcbiAgICAgIHRoaXMucmVzID0gbnVsbFxuICAgICAgdXRpbC5kZXN0cm95KHJlcywgZXJyKVxuICAgIH0gZWxzZSBpZiAoY2FsbGJhY2spIHtcbiAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGNhbGxiYWNrLCBudWxsLCBlcnIsIHsgb3BhcXVlIH0pXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChib2R5KSB7XG4gICAgICB0aGlzLmJvZHkgPSBudWxsXG4gICAgICB1dGlsLmRlc3Ryb3koYm9keSwgZXJyKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzdHJlYW0gKG9wdHMsIGZhY3RvcnksIGNhbGxiYWNrKSB7XG4gIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHN0cmVhbS5jYWxsKHRoaXMsIG9wdHMsIGZhY3RvcnksIChlcnIsIGRhdGEpID0+IHtcbiAgICAgICAgcmV0dXJuIGVyciA/IHJlamVjdChlcnIpIDogcmVzb2x2ZShkYXRhKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgdHJ5IHtcbiAgICB0aGlzLmRpc3BhdGNoKG9wdHMsIG5ldyBTdHJlYW1IYW5kbGVyKG9wdHMsIGZhY3RvcnksIGNhbGxiYWNrKSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICAgIGNvbnN0IG9wYXF1ZSA9IG9wdHMgJiYgb3B0cy5vcGFxdWVcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhlcnIsIHsgb3BhcXVlIH0pKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RyZWFtXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIFJlYWRhYmxlLFxuICBEdXBsZXgsXG4gIFBhc3NUaHJvdWdoXG59ID0gcmVxdWlyZSgnc3RyZWFtJylcbmNvbnN0IHtcbiAgSW52YWxpZEFyZ3VtZW50RXJyb3IsXG4gIEludmFsaWRSZXR1cm5WYWx1ZUVycm9yLFxuICBSZXF1ZXN0QWJvcnRlZEVycm9yXG59ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IEFzeW5jUmVzb3VyY2UgfSA9IHJlcXVpcmUoJ2FzeW5jX2hvb2tzJylcbmNvbnN0IHsgYWRkU2lnbmFsLCByZW1vdmVTaWduYWwgfSA9IHJlcXVpcmUoJy4vYWJvcnQtc2lnbmFsJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5cbmNvbnN0IGtSZXN1bWUgPSBTeW1ib2woJ3Jlc3VtZScpXG5cbmNsYXNzIFBpcGVsaW5lUmVxdWVzdCBleHRlbmRzIFJlYWRhYmxlIHtcbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHN1cGVyKHsgYXV0b0Rlc3Ryb3k6IHRydWUgfSlcblxuICAgIHRoaXNba1Jlc3VtZV0gPSBudWxsXG4gIH1cblxuICBfcmVhZCAoKSB7XG4gICAgY29uc3QgeyBba1Jlc3VtZV06IHJlc3VtZSB9ID0gdGhpc1xuXG4gICAgaWYgKHJlc3VtZSkge1xuICAgICAgdGhpc1trUmVzdW1lXSA9IG51bGxcbiAgICAgIHJlc3VtZSgpXG4gICAgfVxuICB9XG5cbiAgX2Rlc3Ryb3kgKGVyciwgY2FsbGJhY2spIHtcbiAgICB0aGlzLl9yZWFkKClcblxuICAgIGNhbGxiYWNrKGVycilcbiAgfVxufVxuXG5jbGFzcyBQaXBlbGluZVJlc3BvbnNlIGV4dGVuZHMgUmVhZGFibGUge1xuICBjb25zdHJ1Y3RvciAocmVzdW1lKSB7XG4gICAgc3VwZXIoeyBhdXRvRGVzdHJveTogdHJ1ZSB9KVxuICAgIHRoaXNba1Jlc3VtZV0gPSByZXN1bWVcbiAgfVxuXG4gIF9yZWFkICgpIHtcbiAgICB0aGlzW2tSZXN1bWVdKClcbiAgfVxuXG4gIF9kZXN0cm95IChlcnIsIGNhbGxiYWNrKSB7XG4gICAgaWYgKCFlcnIgJiYgIXRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCkge1xuICAgICAgZXJyID0gbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgIH1cblxuICAgIGNhbGxiYWNrKGVycilcbiAgfVxufVxuXG5jbGFzcyBQaXBlbGluZUhhbmRsZXIgZXh0ZW5kcyBBc3luY1Jlc291cmNlIHtcbiAgY29uc3RydWN0b3IgKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBpZiAoIW9wdHMgfHwgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb3B0cycpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBoYW5kbGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgaGFuZGxlcicpXG4gICAgfVxuXG4gICAgY29uc3QgeyBzaWduYWwsIG1ldGhvZCwgb3BhcXVlLCBvbkluZm8sIHJlc3BvbnNlSGVhZGVycyB9ID0gb3B0c1xuXG4gICAgaWYgKHNpZ25hbCAmJiB0eXBlb2Ygc2lnbmFsLm9uICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdzaWduYWwgbXVzdCBiZSBhbiBFdmVudEVtaXR0ZXIgb3IgRXZlbnRUYXJnZXQnKVxuICAgIH1cblxuICAgIGlmIChtZXRob2QgPT09ICdDT05ORUNUJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG1ldGhvZCcpXG4gICAgfVxuXG4gICAgaWYgKG9uSW5mbyAmJiB0eXBlb2Ygb25JbmZvICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25JbmZvIGNhbGxiYWNrJylcbiAgICB9XG5cbiAgICBzdXBlcignVU5ESUNJX1BJUEVMSU5FJylcblxuICAgIHRoaXMub3BhcXVlID0gb3BhcXVlIHx8IG51bGxcbiAgICB0aGlzLnJlc3BvbnNlSGVhZGVycyA9IHJlc3BvbnNlSGVhZGVycyB8fCBudWxsXG4gICAgdGhpcy5oYW5kbGVyID0gaGFuZGxlclxuICAgIHRoaXMuYWJvcnQgPSBudWxsXG4gICAgdGhpcy5jb250ZXh0ID0gbnVsbFxuICAgIHRoaXMub25JbmZvID0gb25JbmZvIHx8IG51bGxcblxuICAgIHRoaXMucmVxID0gbmV3IFBpcGVsaW5lUmVxdWVzdCgpLm9uKCdlcnJvcicsIHV0aWwubm9wKVxuXG4gICAgdGhpcy5yZXQgPSBuZXcgRHVwbGV4KHtcbiAgICAgIHJlYWRhYmxlT2JqZWN0TW9kZTogb3B0cy5vYmplY3RNb2RlLFxuICAgICAgYXV0b0Rlc3Ryb3k6IHRydWUsXG4gICAgICByZWFkOiAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgYm9keSB9ID0gdGhpc1xuXG4gICAgICAgIGlmIChib2R5ICYmIGJvZHkucmVzdW1lKSB7XG4gICAgICAgICAgYm9keS5yZXN1bWUoKVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgd3JpdGU6IChjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcmVxIH0gPSB0aGlzXG5cbiAgICAgICAgaWYgKHJlcS5wdXNoKGNodW5rLCBlbmNvZGluZykgfHwgcmVxLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCkge1xuICAgICAgICAgIGNhbGxiYWNrKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXFba1Jlc3VtZV0gPSBjYWxsYmFja1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZGVzdHJveTogKGVyciwgY2FsbGJhY2spID0+IHtcbiAgICAgICAgY29uc3QgeyBib2R5LCByZXEsIHJlcywgcmV0LCBhYm9ydCB9ID0gdGhpc1xuXG4gICAgICAgIGlmICghZXJyICYmICFyZXQuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCkge1xuICAgICAgICAgIGVyciA9IG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKClcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhYm9ydCAmJiBlcnIpIHtcbiAgICAgICAgICBhYm9ydCgpXG4gICAgICAgIH1cblxuICAgICAgICB1dGlsLmRlc3Ryb3koYm9keSwgZXJyKVxuICAgICAgICB1dGlsLmRlc3Ryb3kocmVxLCBlcnIpXG4gICAgICAgIHV0aWwuZGVzdHJveShyZXMsIGVycilcblxuICAgICAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgICAgICBjYWxsYmFjayhlcnIpXG4gICAgICB9XG4gICAgfSkub24oJ3ByZWZpbmlzaCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgcmVxIH0gPSB0aGlzXG5cbiAgICAgIC8vIE5vZGUgPCAxNSBkb2VzIG5vdCBjYWxsIF9maW5hbCBpbiBzYW1lIHRpY2suXG4gICAgICByZXEucHVzaChudWxsKVxuICAgIH0pXG5cbiAgICB0aGlzLnJlcyA9IG51bGxcblxuICAgIGFkZFNpZ25hbCh0aGlzLCBzaWduYWwpXG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0LCBjb250ZXh0KSB7XG4gICAgY29uc3QgeyByZXQsIHJlcyB9ID0gdGhpc1xuXG4gICAgYXNzZXJ0KCFyZXMsICdwaXBlbGluZSBjYW5ub3QgYmUgcmV0cmllZCcpXG5cbiAgICBpZiAocmV0LmRlc3Ryb3llZCkge1xuICAgICAgdGhyb3cgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgIH1cblxuICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHRcbiAgfVxuXG4gIG9uSGVhZGVycyAoc3RhdHVzQ29kZSwgcmF3SGVhZGVycywgcmVzdW1lKSB7XG4gICAgY29uc3QgeyBvcGFxdWUsIGhhbmRsZXIsIGNvbnRleHQgfSA9IHRoaXNcblxuICAgIGlmIChzdGF0dXNDb2RlIDwgMjAwKSB7XG4gICAgICBpZiAodGhpcy5vbkluZm8pIHtcbiAgICAgICAgY29uc3QgaGVhZGVycyA9IHRoaXMucmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VSYXdIZWFkZXJzKHJhd0hlYWRlcnMpIDogdXRpbC5wYXJzZUhlYWRlcnMocmF3SGVhZGVycylcbiAgICAgICAgdGhpcy5vbkluZm8oeyBzdGF0dXNDb2RlLCBoZWFkZXJzIH0pXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLnJlcyA9IG5ldyBQaXBlbGluZVJlc3BvbnNlKHJlc3VtZSlcblxuICAgIGxldCBib2R5XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuaGFuZGxlciA9IG51bGxcbiAgICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLnJlc3BvbnNlSGVhZGVycyA9PT0gJ3JhdycgPyB1dGlsLnBhcnNlUmF3SGVhZGVycyhyYXdIZWFkZXJzKSA6IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpXG4gICAgICBib2R5ID0gdGhpcy5ydW5JbkFzeW5jU2NvcGUoaGFuZGxlciwgbnVsbCwge1xuICAgICAgICBzdGF0dXNDb2RlLFxuICAgICAgICBoZWFkZXJzLFxuICAgICAgICBvcGFxdWUsXG4gICAgICAgIGJvZHk6IHRoaXMucmVzLFxuICAgICAgICBjb250ZXh0XG4gICAgICB9KVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5yZXMub24oJ2Vycm9yJywgdXRpbC5ub3ApXG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG5cbiAgICBpZiAoIWJvZHkgfHwgdHlwZW9mIGJvZHkub24gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcignZXhwZWN0ZWQgUmVhZGFibGUnKVxuICAgIH1cblxuICAgIGJvZHlcbiAgICAgIC5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgICAgICBjb25zdCB7IHJldCwgYm9keSB9ID0gdGhpc1xuXG4gICAgICAgIGlmICghcmV0LnB1c2goY2h1bmspICYmIGJvZHkucGF1c2UpIHtcbiAgICAgICAgICBib2R5LnBhdXNlKClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcmV0IH0gPSB0aGlzXG5cbiAgICAgICAgdXRpbC5kZXN0cm95KHJldCwgZXJyKVxuICAgICAgfSlcbiAgICAgIC5vbignZW5kJywgKCkgPT4ge1xuICAgICAgICBjb25zdCB7IHJldCB9ID0gdGhpc1xuXG4gICAgICAgIHJldC5wdXNoKG51bGwpXG4gICAgICB9KVxuICAgICAgLm9uKCdjbG9zZScsICgpID0+IHtcbiAgICAgICAgY29uc3QgeyByZXQgfSA9IHRoaXNcblxuICAgICAgICBpZiAoIXJldC5fcmVhZGFibGVTdGF0ZS5lbmRlZCkge1xuICAgICAgICAgIHV0aWwuZGVzdHJveShyZXQsIG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKCkpXG4gICAgICAgIH1cbiAgICAgIH0pXG5cbiAgICB0aGlzLmJvZHkgPSBib2R5XG4gIH1cblxuICBvbkRhdGEgKGNodW5rKSB7XG4gICAgY29uc3QgeyByZXMgfSA9IHRoaXNcbiAgICByZXR1cm4gcmVzLnB1c2goY2h1bmspXG4gIH1cblxuICBvbkNvbXBsZXRlICh0cmFpbGVycykge1xuICAgIGNvbnN0IHsgcmVzIH0gPSB0aGlzXG4gICAgcmVzLnB1c2gobnVsbClcbiAgfVxuXG4gIG9uRXJyb3IgKGVycikge1xuICAgIGNvbnN0IHsgcmV0IH0gPSB0aGlzXG4gICAgdGhpcy5oYW5kbGVyID0gbnVsbFxuICAgIHV0aWwuZGVzdHJveShyZXQsIGVycilcbiAgfVxufVxuXG5mdW5jdGlvbiBwaXBlbGluZSAob3B0cywgaGFuZGxlcikge1xuICB0cnkge1xuICAgIGNvbnN0IHBpcGVsaW5lSGFuZGxlciA9IG5ldyBQaXBlbGluZUhhbmRsZXIob3B0cywgaGFuZGxlcilcbiAgICB0aGlzLmRpc3BhdGNoKHsgLi4ub3B0cywgYm9keTogcGlwZWxpbmVIYW5kbGVyLnJlcSB9LCBwaXBlbGluZUhhbmRsZXIpXG4gICAgcmV0dXJuIHBpcGVsaW5lSGFuZGxlci5yZXRcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIG5ldyBQYXNzVGhyb3VnaCgpLmRlc3Ryb3koZXJyKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGlwZWxpbmVcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IsIFJlcXVlc3RBYm9ydGVkRXJyb3IsIFNvY2tldEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB7IEFzeW5jUmVzb3VyY2UgfSA9IHJlcXVpcmUoJ2FzeW5jX2hvb2tzJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBhZGRTaWduYWwsIHJlbW92ZVNpZ25hbCB9ID0gcmVxdWlyZSgnLi9hYm9ydC1zaWduYWwnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcblxuY2xhc3MgVXBncmFkZUhhbmRsZXIgZXh0ZW5kcyBBc3luY1Jlc291cmNlIHtcbiAgY29uc3RydWN0b3IgKG9wdHMsIGNhbGxiYWNrKSB7XG4gICAgaWYgKCFvcHRzIHx8IHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9wdHMnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjYWxsYmFjaycpXG4gICAgfVxuXG4gICAgY29uc3QgeyBzaWduYWwsIG9wYXF1ZSwgcmVzcG9uc2VIZWFkZXJzIH0gPSBvcHRzXG5cbiAgICBpZiAoc2lnbmFsICYmIHR5cGVvZiBzaWduYWwub24gIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3NpZ25hbCBtdXN0IGJlIGFuIEV2ZW50RW1pdHRlciBvciBFdmVudFRhcmdldCcpXG4gICAgfVxuXG4gICAgc3VwZXIoJ1VORElDSV9VUEdSQURFJylcblxuICAgIHRoaXMucmVzcG9uc2VIZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzIHx8IG51bGxcbiAgICB0aGlzLm9wYXF1ZSA9IG9wYXF1ZSB8fCBudWxsXG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrXG4gICAgdGhpcy5hYm9ydCA9IG51bGxcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsXG5cbiAgICBhZGRTaWduYWwodGhpcywgc2lnbmFsKVxuICB9XG5cbiAgb25Db25uZWN0IChhYm9ydCwgY29udGV4dCkge1xuICAgIGlmICghdGhpcy5jYWxsYmFjaykge1xuICAgICAgdGhyb3cgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgIH1cblxuICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIHRoaXMuY29udGV4dCA9IG51bGxcbiAgfVxuXG4gIG9uSGVhZGVycyAoKSB7XG4gICAgdGhyb3cgbmV3IFNvY2tldEVycm9yKCdiYWQgdXBncmFkZScsIG51bGwpXG4gIH1cblxuICBvblVwZ3JhZGUgKHN0YXR1c0NvZGUsIHJhd0hlYWRlcnMsIHNvY2tldCkge1xuICAgIGNvbnN0IHsgY2FsbGJhY2ssIG9wYXF1ZSwgY29udGV4dCB9ID0gdGhpc1xuXG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHN0YXR1c0NvZGUsIDEwMSlcblxuICAgIHJlbW92ZVNpZ25hbCh0aGlzKVxuXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGxcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5yZXNwb25zZUhlYWRlcnMgPT09ICdyYXcnID8gdXRpbC5wYXJzZVJhd0hlYWRlcnMocmF3SGVhZGVycykgOiB1dGlsLnBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKVxuICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGNhbGxiYWNrLCBudWxsLCBudWxsLCB7XG4gICAgICBoZWFkZXJzLFxuICAgICAgc29ja2V0LFxuICAgICAgb3BhcXVlLFxuICAgICAgY29udGV4dFxuICAgIH0pXG4gIH1cblxuICBvbkVycm9yIChlcnIpIHtcbiAgICBjb25zdCB7IGNhbGxiYWNrLCBvcGFxdWUgfSA9IHRoaXNcblxuICAgIHJlbW92ZVNpZ25hbCh0aGlzKVxuXG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICB0aGlzLmNhbGxiYWNrID0gbnVsbFxuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgZXJyLCB7IG9wYXF1ZSB9KVxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdXBncmFkZSAob3B0cywgY2FsbGJhY2spIHtcbiAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdXBncmFkZS5jYWxsKHRoaXMsIG9wdHMsIChlcnIsIGRhdGEpID0+IHtcbiAgICAgICAgcmV0dXJuIGVyciA/IHJlamVjdChlcnIpIDogcmVzb2x2ZShkYXRhKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB1cGdyYWRlSGFuZGxlciA9IG5ldyBVcGdyYWRlSGFuZGxlcihvcHRzLCBjYWxsYmFjaylcbiAgICB0aGlzLmRpc3BhdGNoKHtcbiAgICAgIC4uLm9wdHMsXG4gICAgICBtZXRob2Q6IG9wdHMubWV0aG9kIHx8ICdHRVQnLFxuICAgICAgdXBncmFkZTogb3B0cy5wcm90b2NvbCB8fCAnV2Vic29ja2V0J1xuICAgIH0sIHVwZ3JhZGVIYW5kbGVyKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gICAgY29uc3Qgb3BhcXVlID0gb3B0cyAmJiBvcHRzLm9wYXF1ZVxuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGNhbGxiYWNrKGVyciwgeyBvcGFxdWUgfSkpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB1cGdyYWRlXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IEFzeW5jUmVzb3VyY2UgfSA9IHJlcXVpcmUoJ2FzeW5jX2hvb2tzJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IsIFJlcXVlc3RBYm9ydGVkRXJyb3IsIFNvY2tldEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgYWRkU2lnbmFsLCByZW1vdmVTaWduYWwgfSA9IHJlcXVpcmUoJy4vYWJvcnQtc2lnbmFsJylcblxuY2xhc3MgQ29ubmVjdEhhbmRsZXIgZXh0ZW5kcyBBc3luY1Jlc291cmNlIHtcbiAgY29uc3RydWN0b3IgKG9wdHMsIGNhbGxiYWNrKSB7XG4gICAgaWYgKCFvcHRzIHx8IHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9wdHMnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjYWxsYmFjaycpXG4gICAgfVxuXG4gICAgY29uc3QgeyBzaWduYWwsIG9wYXF1ZSwgcmVzcG9uc2VIZWFkZXJzIH0gPSBvcHRzXG5cbiAgICBpZiAoc2lnbmFsICYmIHR5cGVvZiBzaWduYWwub24gIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3NpZ25hbCBtdXN0IGJlIGFuIEV2ZW50RW1pdHRlciBvciBFdmVudFRhcmdldCcpXG4gICAgfVxuXG4gICAgc3VwZXIoJ1VORElDSV9DT05ORUNUJylcblxuICAgIHRoaXMub3BhcXVlID0gb3BhcXVlIHx8IG51bGxcbiAgICB0aGlzLnJlc3BvbnNlSGVhZGVycyA9IHJlc3BvbnNlSGVhZGVycyB8fCBudWxsXG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrXG4gICAgdGhpcy5hYm9ydCA9IG51bGxcblxuICAgIGFkZFNpZ25hbCh0aGlzLCBzaWduYWwpXG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0LCBjb250ZXh0KSB7XG4gICAgaWYgKCF0aGlzLmNhbGxiYWNrKSB7XG4gICAgICB0aHJvdyBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gICAgfVxuXG4gICAgdGhpcy5hYm9ydCA9IGFib3J0XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dFxuICB9XG5cbiAgb25IZWFkZXJzICgpIHtcbiAgICB0aHJvdyBuZXcgU29ja2V0RXJyb3IoJ2JhZCBjb25uZWN0JywgbnVsbClcbiAgfVxuXG4gIG9uVXBncmFkZSAoc3RhdHVzQ29kZSwgcmF3SGVhZGVycywgc29ja2V0KSB7XG4gICAgY29uc3QgeyBjYWxsYmFjaywgb3BhcXVlLCBjb250ZXh0IH0gPSB0aGlzXG5cbiAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG5cbiAgICBsZXQgaGVhZGVycyA9IHJhd0hlYWRlcnNcbiAgICAvLyBJbmRpY2F0ZXMgaXMgYW4gSFRUUDJTZXNzaW9uXG4gICAgaWYgKGhlYWRlcnMgIT0gbnVsbCkge1xuICAgICAgaGVhZGVycyA9IHRoaXMucmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VSYXdIZWFkZXJzKHJhd0hlYWRlcnMpIDogdXRpbC5wYXJzZUhlYWRlcnMocmF3SGVhZGVycylcbiAgICB9XG5cbiAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgbnVsbCwge1xuICAgICAgc3RhdHVzQ29kZSxcbiAgICAgIGhlYWRlcnMsXG4gICAgICBzb2NrZXQsXG4gICAgICBvcGFxdWUsXG4gICAgICBjb250ZXh0XG4gICAgfSlcbiAgfVxuXG4gIG9uRXJyb3IgKGVycikge1xuICAgIGNvbnN0IHsgY2FsbGJhY2ssIG9wYXF1ZSB9ID0gdGhpc1xuXG4gICAgcmVtb3ZlU2lnbmFsKHRoaXMpXG5cbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGNhbGxiYWNrLCBudWxsLCBlcnIsIHsgb3BhcXVlIH0pXG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb25uZWN0IChvcHRzLCBjYWxsYmFjaykge1xuICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25uZWN0LmNhbGwodGhpcywgb3B0cywgKGVyciwgZGF0YSkgPT4ge1xuICAgICAgICByZXR1cm4gZXJyID8gcmVqZWN0KGVycikgOiByZXNvbHZlKGRhdGEpXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IGNvbm5lY3RIYW5kbGVyID0gbmV3IENvbm5lY3RIYW5kbGVyKG9wdHMsIGNhbGxiYWNrKVxuICAgIHRoaXMuZGlzcGF0Y2goeyAuLi5vcHRzLCBtZXRob2Q6ICdDT05ORUNUJyB9LCBjb25uZWN0SGFuZGxlcilcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICAgIGNvbnN0IG9wYXF1ZSA9IG9wdHMgJiYgb3B0cy5vcGFxdWVcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhlcnIsIHsgb3BhcXVlIH0pKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29ubmVjdFxuIiwKICAgICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMucmVxdWVzdCA9IHJlcXVpcmUoJy4vYXBpLXJlcXVlc3QnKVxubW9kdWxlLmV4cG9ydHMuc3RyZWFtID0gcmVxdWlyZSgnLi9hcGktc3RyZWFtJylcbm1vZHVsZS5leHBvcnRzLnBpcGVsaW5lID0gcmVxdWlyZSgnLi9hcGktcGlwZWxpbmUnKVxubW9kdWxlLmV4cG9ydHMudXBncmFkZSA9IHJlcXVpcmUoJy4vYXBpLXVwZ3JhZGUnKVxubW9kdWxlLmV4cG9ydHMuY29ubmVjdCA9IHJlcXVpcmUoJy4vYXBpLWNvbm5lY3QnKVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBVbmRpY2lFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuXG5jbGFzcyBNb2NrTm90TWF0Y2hlZEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgTW9ja05vdE1hdGNoZWRFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnTW9ja05vdE1hdGNoZWRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdUaGUgcmVxdWVzdCBkb2VzIG5vdCBtYXRjaCBhbnkgcmVnaXN0ZXJlZCBtb2NrIGRpc3BhdGNoZXMnXG4gICAgdGhpcy5jb2RlID0gJ1VORF9NT0NLX0VSUl9NT0NLX05PVF9NQVRDSEVEJ1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBNb2NrTm90TWF0Y2hlZEVycm9yXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAga0FnZW50OiBTeW1ib2woJ2FnZW50JyksXG4gIGtPcHRpb25zOiBTeW1ib2woJ29wdGlvbnMnKSxcbiAga0ZhY3Rvcnk6IFN5bWJvbCgnZmFjdG9yeScpLFxuICBrRGlzcGF0Y2hlczogU3ltYm9sKCdkaXNwYXRjaGVzJyksXG4gIGtEaXNwYXRjaEtleTogU3ltYm9sKCdkaXNwYXRjaCBrZXknKSxcbiAga0RlZmF1bHRIZWFkZXJzOiBTeW1ib2woJ2RlZmF1bHQgaGVhZGVycycpLFxuICBrRGVmYXVsdFRyYWlsZXJzOiBTeW1ib2woJ2RlZmF1bHQgdHJhaWxlcnMnKSxcbiAga0NvbnRlbnRMZW5ndGg6IFN5bWJvbCgnY29udGVudCBsZW5ndGgnKSxcbiAga01vY2tBZ2VudDogU3ltYm9sKCdtb2NrIGFnZW50JyksXG4gIGtNb2NrQWdlbnRTZXQ6IFN5bWJvbCgnbW9jayBhZ2VudCBzZXQnKSxcbiAga01vY2tBZ2VudEdldDogU3ltYm9sKCdtb2NrIGFnZW50IGdldCcpLFxuICBrTW9ja0Rpc3BhdGNoOiBTeW1ib2woJ21vY2sgZGlzcGF0Y2gnKSxcbiAga0Nsb3NlOiBTeW1ib2woJ2Nsb3NlJyksXG4gIGtPcmlnaW5hbENsb3NlOiBTeW1ib2woJ29yaWdpbmFsIGFnZW50IGNsb3NlJyksXG4gIGtPcmlnaW46IFN5bWJvbCgnb3JpZ2luJyksXG4gIGtJc01vY2tBY3RpdmU6IFN5bWJvbCgnaXMgbW9jayBhY3RpdmUnKSxcbiAga05ldENvbm5lY3Q6IFN5bWJvbCgnbmV0IGNvbm5lY3QnKSxcbiAga0dldE5ldENvbm5lY3Q6IFN5bWJvbCgnZ2V0IG5ldCBjb25uZWN0JyksXG4gIGtDb25uZWN0ZWQ6IFN5bWJvbCgnY29ubmVjdGVkJylcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgTW9ja05vdE1hdGNoZWRFcnJvciB9ID0gcmVxdWlyZSgnLi9tb2NrLWVycm9ycycpXG5jb25zdCB7XG4gIGtEaXNwYXRjaGVzLFxuICBrTW9ja0FnZW50LFxuICBrT3JpZ2luYWxEaXNwYXRjaCxcbiAga09yaWdpbixcbiAga0dldE5ldENvbm5lY3Rcbn0gPSByZXF1aXJlKCcuL21vY2stc3ltYm9scycpXG5jb25zdCB7IGJ1aWxkVVJMLCBub3AgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IFNUQVRVU19DT0RFUyB9ID0gcmVxdWlyZSgnaHR0cCcpXG5jb25zdCB7XG4gIHR5cGVzOiB7XG4gICAgaXNQcm9taXNlXG4gIH1cbn0gPSByZXF1aXJlKCd1dGlsJylcblxuZnVuY3Rpb24gbWF0Y2hWYWx1ZSAobWF0Y2gsIHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgbWF0Y2ggPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIG1hdGNoID09PSB2YWx1ZVxuICB9XG4gIGlmIChtYXRjaCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgIHJldHVybiBtYXRjaC50ZXN0KHZhbHVlKVxuICB9XG4gIGlmICh0eXBlb2YgbWF0Y2ggPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gbWF0Y2godmFsdWUpID09PSB0cnVlXG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmZ1bmN0aW9uIGxvd2VyQ2FzZUVudHJpZXMgKGhlYWRlcnMpIHtcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhoZWFkZXJzKS5tYXAoKFtoZWFkZXJOYW1lLCBoZWFkZXJWYWx1ZV0pID0+IHtcbiAgICAgIHJldHVybiBbaGVhZGVyTmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpLCBoZWFkZXJWYWx1ZV1cbiAgICB9KVxuICApXG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4uLy4uL2luZGV4JykuSGVhZGVyc3xzdHJpbmdbXXxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSBoZWFkZXJzXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKi9cbmZ1bmN0aW9uIGdldEhlYWRlckJ5TmFtZSAoaGVhZGVycywga2V5KSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICBpZiAoaGVhZGVyc1tpXS50b0xvY2FsZUxvd2VyQ2FzZSgpID09PSBrZXkudG9Mb2NhbGVMb3dlckNhc2UoKSkge1xuICAgICAgICByZXR1cm4gaGVhZGVyc1tpICsgMV1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH0gZWxzZSBpZiAodHlwZW9mIGhlYWRlcnMuZ2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGhlYWRlcnMuZ2V0KGtleSlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbG93ZXJDYXNlRW50cmllcyhoZWFkZXJzKVtrZXkudG9Mb2NhbGVMb3dlckNhc2UoKV1cbiAgfVxufVxuXG4vKiogQHBhcmFtIHtzdHJpbmdbXX0gaGVhZGVycyAqL1xuZnVuY3Rpb24gYnVpbGRIZWFkZXJzRnJvbUFycmF5IChoZWFkZXJzKSB7IC8vIGZldGNoIEhlYWRlcnNMaXN0XG4gIGNvbnN0IGNsb25lID0gaGVhZGVycy5zbGljZSgpXG4gIGNvbnN0IGVudHJpZXMgPSBbXVxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgY2xvbmUubGVuZ3RoOyBpbmRleCArPSAyKSB7XG4gICAgZW50cmllcy5wdXNoKFtjbG9uZVtpbmRleF0sIGNsb25lW2luZGV4ICsgMV1dKVxuICB9XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoZW50cmllcylcbn1cblxuZnVuY3Rpb24gbWF0Y2hIZWFkZXJzIChtb2NrRGlzcGF0Y2gsIGhlYWRlcnMpIHtcbiAgaWYgKHR5cGVvZiBtb2NrRGlzcGF0Y2guaGVhZGVycyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7IC8vIGZldGNoIEhlYWRlcnNMaXN0XG4gICAgICBoZWFkZXJzID0gYnVpbGRIZWFkZXJzRnJvbUFycmF5KGhlYWRlcnMpXG4gICAgfVxuICAgIHJldHVybiBtb2NrRGlzcGF0Y2guaGVhZGVycyhoZWFkZXJzID8gbG93ZXJDYXNlRW50cmllcyhoZWFkZXJzKSA6IHt9KVxuICB9XG4gIGlmICh0eXBlb2YgbW9ja0Rpc3BhdGNoLmhlYWRlcnMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICBpZiAodHlwZW9mIGhlYWRlcnMgIT09ICdvYmplY3QnIHx8IHR5cGVvZiBtb2NrRGlzcGF0Y2guaGVhZGVycyAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGZvciAoY29uc3QgW21hdGNoSGVhZGVyTmFtZSwgbWF0Y2hIZWFkZXJWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMobW9ja0Rpc3BhdGNoLmhlYWRlcnMpKSB7XG4gICAgY29uc3QgaGVhZGVyVmFsdWUgPSBnZXRIZWFkZXJCeU5hbWUoaGVhZGVycywgbWF0Y2hIZWFkZXJOYW1lKVxuXG4gICAgaWYgKCFtYXRjaFZhbHVlKG1hdGNoSGVhZGVyVmFsdWUsIGhlYWRlclZhbHVlKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlXG59XG5cbmZ1bmN0aW9uIHNhZmVVcmwgKHBhdGgpIHtcbiAgaWYgKHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBwYXRoXG4gIH1cblxuICBjb25zdCBwYXRoU2VnbWVudHMgPSBwYXRoLnNwbGl0KCc/JylcblxuICBpZiAocGF0aFNlZ21lbnRzLmxlbmd0aCAhPT0gMikge1xuICAgIHJldHVybiBwYXRoXG4gIH1cblxuICBjb25zdCBxcCA9IG5ldyBVUkxTZWFyY2hQYXJhbXMocGF0aFNlZ21lbnRzLnBvcCgpKVxuICBxcC5zb3J0KClcbiAgcmV0dXJuIFsuLi5wYXRoU2VnbWVudHMsIHFwLnRvU3RyaW5nKCldLmpvaW4oJz8nKVxufVxuXG5mdW5jdGlvbiBtYXRjaEtleSAobW9ja0Rpc3BhdGNoLCB7IHBhdGgsIG1ldGhvZCwgYm9keSwgaGVhZGVycyB9KSB7XG4gIGNvbnN0IHBhdGhNYXRjaCA9IG1hdGNoVmFsdWUobW9ja0Rpc3BhdGNoLnBhdGgsIHBhdGgpXG4gIGNvbnN0IG1ldGhvZE1hdGNoID0gbWF0Y2hWYWx1ZShtb2NrRGlzcGF0Y2gubWV0aG9kLCBtZXRob2QpXG4gIGNvbnN0IGJvZHlNYXRjaCA9IHR5cGVvZiBtb2NrRGlzcGF0Y2guYm9keSAhPT0gJ3VuZGVmaW5lZCcgPyBtYXRjaFZhbHVlKG1vY2tEaXNwYXRjaC5ib2R5LCBib2R5KSA6IHRydWVcbiAgY29uc3QgaGVhZGVyc01hdGNoID0gbWF0Y2hIZWFkZXJzKG1vY2tEaXNwYXRjaCwgaGVhZGVycylcbiAgcmV0dXJuIHBhdGhNYXRjaCAmJiBtZXRob2RNYXRjaCAmJiBib2R5TWF0Y2ggJiYgaGVhZGVyc01hdGNoXG59XG5cbmZ1bmN0aW9uIGdldFJlc3BvbnNlRGF0YSAoZGF0YSkge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKGRhdGEpKSB7XG4gICAgcmV0dXJuIGRhdGFcbiAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZGF0YSlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZGF0YS50b1N0cmluZygpXG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0TW9ja0Rpc3BhdGNoIChtb2NrRGlzcGF0Y2hlcywga2V5KSB7XG4gIGNvbnN0IGJhc2VQYXRoID0ga2V5LnF1ZXJ5ID8gYnVpbGRVUkwoa2V5LnBhdGgsIGtleS5xdWVyeSkgOiBrZXkucGF0aFxuICBjb25zdCByZXNvbHZlZFBhdGggPSB0eXBlb2YgYmFzZVBhdGggPT09ICdzdHJpbmcnID8gc2FmZVVybChiYXNlUGF0aCkgOiBiYXNlUGF0aFxuXG4gIC8vIE1hdGNoIHBhdGhcbiAgbGV0IG1hdGNoZWRNb2NrRGlzcGF0Y2hlcyA9IG1vY2tEaXNwYXRjaGVzLmZpbHRlcigoeyBjb25zdW1lZCB9KSA9PiAhY29uc3VtZWQpLmZpbHRlcigoeyBwYXRoIH0pID0+IG1hdGNoVmFsdWUoc2FmZVVybChwYXRoKSwgcmVzb2x2ZWRQYXRoKSlcbiAgaWYgKG1hdGNoZWRNb2NrRGlzcGF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgTW9ja05vdE1hdGNoZWRFcnJvcihgTW9jayBkaXNwYXRjaCBub3QgbWF0Y2hlZCBmb3IgcGF0aCAnJHtyZXNvbHZlZFBhdGh9J2ApXG4gIH1cblxuICAvLyBNYXRjaCBtZXRob2RcbiAgbWF0Y2hlZE1vY2tEaXNwYXRjaGVzID0gbWF0Y2hlZE1vY2tEaXNwYXRjaGVzLmZpbHRlcigoeyBtZXRob2QgfSkgPT4gbWF0Y2hWYWx1ZShtZXRob2QsIGtleS5tZXRob2QpKVxuICBpZiAobWF0Y2hlZE1vY2tEaXNwYXRjaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBNb2NrTm90TWF0Y2hlZEVycm9yKGBNb2NrIGRpc3BhdGNoIG5vdCBtYXRjaGVkIGZvciBtZXRob2QgJyR7a2V5Lm1ldGhvZH0nYClcbiAgfVxuXG4gIC8vIE1hdGNoIGJvZHlcbiAgbWF0Y2hlZE1vY2tEaXNwYXRjaGVzID0gbWF0Y2hlZE1vY2tEaXNwYXRjaGVzLmZpbHRlcigoeyBib2R5IH0pID0+IHR5cGVvZiBib2R5ICE9PSAndW5kZWZpbmVkJyA/IG1hdGNoVmFsdWUoYm9keSwga2V5LmJvZHkpIDogdHJ1ZSlcbiAgaWYgKG1hdGNoZWRNb2NrRGlzcGF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgTW9ja05vdE1hdGNoZWRFcnJvcihgTW9jayBkaXNwYXRjaCBub3QgbWF0Y2hlZCBmb3IgYm9keSAnJHtrZXkuYm9keX0nYClcbiAgfVxuXG4gIC8vIE1hdGNoIGhlYWRlcnNcbiAgbWF0Y2hlZE1vY2tEaXNwYXRjaGVzID0gbWF0Y2hlZE1vY2tEaXNwYXRjaGVzLmZpbHRlcigobW9ja0Rpc3BhdGNoKSA9PiBtYXRjaEhlYWRlcnMobW9ja0Rpc3BhdGNoLCBrZXkuaGVhZGVycykpXG4gIGlmIChtYXRjaGVkTW9ja0Rpc3BhdGNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IE1vY2tOb3RNYXRjaGVkRXJyb3IoYE1vY2sgZGlzcGF0Y2ggbm90IG1hdGNoZWQgZm9yIGhlYWRlcnMgJyR7dHlwZW9mIGtleS5oZWFkZXJzID09PSAnb2JqZWN0JyA/IEpTT04uc3RyaW5naWZ5KGtleS5oZWFkZXJzKSA6IGtleS5oZWFkZXJzfSdgKVxuICB9XG5cbiAgcmV0dXJuIG1hdGNoZWRNb2NrRGlzcGF0Y2hlc1swXVxufVxuXG5mdW5jdGlvbiBhZGRNb2NrRGlzcGF0Y2ggKG1vY2tEaXNwYXRjaGVzLCBrZXksIGRhdGEpIHtcbiAgY29uc3QgYmFzZURhdGEgPSB7IHRpbWVzSW52b2tlZDogMCwgdGltZXM6IDEsIHBlcnNpc3Q6IGZhbHNlLCBjb25zdW1lZDogZmFsc2UgfVxuICBjb25zdCByZXBseURhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ2Z1bmN0aW9uJyA/IHsgY2FsbGJhY2s6IGRhdGEgfSA6IHsgLi4uZGF0YSB9XG4gIGNvbnN0IG5ld01vY2tEaXNwYXRjaCA9IHsgLi4uYmFzZURhdGEsIC4uLmtleSwgcGVuZGluZzogdHJ1ZSwgZGF0YTogeyBlcnJvcjogbnVsbCwgLi4ucmVwbHlEYXRhIH0gfVxuICBtb2NrRGlzcGF0Y2hlcy5wdXNoKG5ld01vY2tEaXNwYXRjaClcbiAgcmV0dXJuIG5ld01vY2tEaXNwYXRjaFxufVxuXG5mdW5jdGlvbiBkZWxldGVNb2NrRGlzcGF0Y2ggKG1vY2tEaXNwYXRjaGVzLCBrZXkpIHtcbiAgY29uc3QgaW5kZXggPSBtb2NrRGlzcGF0Y2hlcy5maW5kSW5kZXgoZGlzcGF0Y2ggPT4ge1xuICAgIGlmICghZGlzcGF0Y2guY29uc3VtZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICByZXR1cm4gbWF0Y2hLZXkoZGlzcGF0Y2gsIGtleSlcbiAgfSlcbiAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgIG1vY2tEaXNwYXRjaGVzLnNwbGljZShpbmRleCwgMSlcbiAgfVxufVxuXG5mdW5jdGlvbiBidWlsZEtleSAob3B0cykge1xuICBjb25zdCB7IHBhdGgsIG1ldGhvZCwgYm9keSwgaGVhZGVycywgcXVlcnkgfSA9IG9wdHNcbiAgcmV0dXJuIHtcbiAgICBwYXRoLFxuICAgIG1ldGhvZCxcbiAgICBib2R5LFxuICAgIGhlYWRlcnMsXG4gICAgcXVlcnlcbiAgfVxufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUtleVZhbHVlcyAoZGF0YSkge1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoZGF0YSkucmVkdWNlKChrZXlWYWx1ZVBhaXJzLCBba2V5LCB2YWx1ZV0pID0+IFtcbiAgICAuLi5rZXlWYWx1ZVBhaXJzLFxuICAgIEJ1ZmZlci5mcm9tKGAke2tleX1gKSxcbiAgICBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLm1hcCh4ID0+IEJ1ZmZlci5mcm9tKGAke3h9YCkpIDogQnVmZmVyLmZyb20oYCR7dmFsdWV9YClcbiAgXSwgW10pXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL1N0YXR1c1xuICogQHBhcmFtIHtudW1iZXJ9IHN0YXR1c0NvZGVcbiAqL1xuZnVuY3Rpb24gZ2V0U3RhdHVzVGV4dCAoc3RhdHVzQ29kZSkge1xuICByZXR1cm4gU1RBVFVTX0NPREVTW3N0YXR1c0NvZGVdIHx8ICd1bmtub3duJ1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRSZXNwb25zZSAoYm9keSkge1xuICBjb25zdCBidWZmZXJzID0gW11cbiAgZm9yIGF3YWl0IChjb25zdCBkYXRhIG9mIGJvZHkpIHtcbiAgICBidWZmZXJzLnB1c2goZGF0YSlcbiAgfVxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChidWZmZXJzKS50b1N0cmluZygndXRmOCcpXG59XG5cbi8qKlxuICogTW9jayBkaXNwYXRjaCBmdW5jdGlvbiB1c2VkIHRvIHNpbXVsYXRlIHVuZGljaSBkaXNwYXRjaGVzXG4gKi9cbmZ1bmN0aW9uIG1vY2tEaXNwYXRjaCAob3B0cywgaGFuZGxlcikge1xuICAvLyBHZXQgbW9jayBkaXNwYXRjaCBmcm9tIGJ1aWx0IGtleVxuICBjb25zdCBrZXkgPSBidWlsZEtleShvcHRzKVxuICBjb25zdCBtb2NrRGlzcGF0Y2ggPSBnZXRNb2NrRGlzcGF0Y2godGhpc1trRGlzcGF0Y2hlc10sIGtleSlcblxuICBtb2NrRGlzcGF0Y2gudGltZXNJbnZva2VkKytcblxuICAvLyBIZXJlJ3Mgd2hlcmUgd2UgcmVzb2x2ZSBhIGNhbGxiYWNrIGlmIGEgY2FsbGJhY2sgaXMgcHJlc2VudCBmb3IgdGhlIGRpc3BhdGNoIGRhdGEuXG4gIGlmIChtb2NrRGlzcGF0Y2guZGF0YS5jYWxsYmFjaykge1xuICAgIG1vY2tEaXNwYXRjaC5kYXRhID0geyAuLi5tb2NrRGlzcGF0Y2guZGF0YSwgLi4ubW9ja0Rpc3BhdGNoLmRhdGEuY2FsbGJhY2sob3B0cykgfVxuICB9XG5cbiAgLy8gUGFyc2UgbW9ja0Rpc3BhdGNoIGRhdGFcbiAgY29uc3QgeyBkYXRhOiB7IHN0YXR1c0NvZGUsIGRhdGEsIGhlYWRlcnMsIHRyYWlsZXJzLCBlcnJvciB9LCBkZWxheSwgcGVyc2lzdCB9ID0gbW9ja0Rpc3BhdGNoXG4gIGNvbnN0IHsgdGltZXNJbnZva2VkLCB0aW1lcyB9ID0gbW9ja0Rpc3BhdGNoXG5cbiAgLy8gSWYgaXQncyB1c2VkIHVwIGFuZCBub3QgcGVyc2lzdGVudCwgbWFyayBhcyBjb25zdW1lZFxuICBtb2NrRGlzcGF0Y2guY29uc3VtZWQgPSAhcGVyc2lzdCAmJiB0aW1lc0ludm9rZWQgPj0gdGltZXNcbiAgbW9ja0Rpc3BhdGNoLnBlbmRpbmcgPSB0aW1lc0ludm9rZWQgPCB0aW1lc1xuXG4gIC8vIElmIHNwZWNpZmllZCwgdHJpZ2dlciBkaXNwYXRjaCBlcnJvclxuICBpZiAoZXJyb3IgIT09IG51bGwpIHtcbiAgICBkZWxldGVNb2NrRGlzcGF0Y2godGhpc1trRGlzcGF0Y2hlc10sIGtleSlcbiAgICBoYW5kbGVyLm9uRXJyb3IoZXJyb3IpXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8vIEhhbmRsZSB0aGUgcmVxdWVzdCB3aXRoIGEgZGVsYXkgaWYgbmVjZXNzYXJ5XG4gIGlmICh0eXBlb2YgZGVsYXkgPT09ICdudW1iZXInICYmIGRlbGF5ID4gMCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaGFuZGxlUmVwbHkodGhpc1trRGlzcGF0Y2hlc10pXG4gICAgfSwgZGVsYXkpXG4gIH0gZWxzZSB7XG4gICAgaGFuZGxlUmVwbHkodGhpc1trRGlzcGF0Y2hlc10pXG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVSZXBseSAobW9ja0Rpc3BhdGNoZXMsIF9kYXRhID0gZGF0YSkge1xuICAgIC8vIGZldGNoJ3MgSGVhZGVyc0xpc3QgaXMgYSAxRCBzdHJpbmcgYXJyYXlcbiAgICBjb25zdCBvcHRzSGVhZGVycyA9IEFycmF5LmlzQXJyYXkob3B0cy5oZWFkZXJzKVxuICAgICAgPyBidWlsZEhlYWRlcnNGcm9tQXJyYXkob3B0cy5oZWFkZXJzKVxuICAgICAgOiBvcHRzLmhlYWRlcnNcbiAgICBjb25zdCBib2R5ID0gdHlwZW9mIF9kYXRhID09PSAnZnVuY3Rpb24nXG4gICAgICA/IF9kYXRhKHsgLi4ub3B0cywgaGVhZGVyczogb3B0c0hlYWRlcnMgfSlcbiAgICAgIDogX2RhdGFcblxuICAgIC8vIHV0aWwudHlwZXMuaXNQcm9taXNlIGlzIGxpa2VseSBuZWVkZWQgZm9yIGplc3QuXG4gICAgaWYgKGlzUHJvbWlzZShib2R5KSkge1xuICAgICAgLy8gSWYgaGFuZGxlUmVwbHkgaXMgYXN5bmNocm9ub3VzLCB0aHJvd2luZyBhbiBlcnJvclxuICAgICAgLy8gaW4gdGhlIGNhbGxiYWNrIHdpbGwgcmVqZWN0IHRoZSBwcm9taXNlLCByYXRoZXIgdGhhblxuICAgICAgLy8gc3luY2hyb25vdXNseSB0aHJvdyB0aGUgZXJyb3IsIHdoaWNoIGJyZWFrcyBzb21lIHRlc3RzLlxuICAgICAgLy8gUmF0aGVyLCB3ZSB3YWl0IGZvciB0aGUgY2FsbGJhY2sgdG8gcmVzb2x2ZSBpZiBpdCBpcyBhXG4gICAgICAvLyBwcm9taXNlLCBhbmQgdGhlbiByZS1ydW4gaGFuZGxlUmVwbHkgd2l0aCB0aGUgbmV3IGJvZHkuXG4gICAgICBib2R5LnRoZW4oKG5ld0RhdGEpID0+IGhhbmRsZVJlcGx5KG1vY2tEaXNwYXRjaGVzLCBuZXdEYXRhKSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9IGdldFJlc3BvbnNlRGF0YShib2R5KVxuICAgIGNvbnN0IHJlc3BvbnNlSGVhZGVycyA9IGdlbmVyYXRlS2V5VmFsdWVzKGhlYWRlcnMpXG4gICAgY29uc3QgcmVzcG9uc2VUcmFpbGVycyA9IGdlbmVyYXRlS2V5VmFsdWVzKHRyYWlsZXJzKVxuXG4gICAgaGFuZGxlci5hYm9ydCA9IG5vcFxuICAgIGhhbmRsZXIub25IZWFkZXJzKHN0YXR1c0NvZGUsIHJlc3BvbnNlSGVhZGVycywgcmVzdW1lLCBnZXRTdGF0dXNUZXh0KHN0YXR1c0NvZGUpKVxuICAgIGhhbmRsZXIub25EYXRhKEJ1ZmZlci5mcm9tKHJlc3BvbnNlRGF0YSkpXG4gICAgaGFuZGxlci5vbkNvbXBsZXRlKHJlc3BvbnNlVHJhaWxlcnMpXG4gICAgZGVsZXRlTW9ja0Rpc3BhdGNoKG1vY2tEaXNwYXRjaGVzLCBrZXkpXG4gIH1cblxuICBmdW5jdGlvbiByZXN1bWUgKCkge31cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiBidWlsZE1vY2tEaXNwYXRjaCAoKSB7XG4gIGNvbnN0IGFnZW50ID0gdGhpc1trTW9ja0FnZW50XVxuICBjb25zdCBvcmlnaW4gPSB0aGlzW2tPcmlnaW5dXG4gIGNvbnN0IG9yaWdpbmFsRGlzcGF0Y2ggPSB0aGlzW2tPcmlnaW5hbERpc3BhdGNoXVxuXG4gIHJldHVybiBmdW5jdGlvbiBkaXNwYXRjaCAob3B0cywgaGFuZGxlcikge1xuICAgIGlmIChhZ2VudC5pc01vY2tBY3RpdmUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG1vY2tEaXNwYXRjaC5jYWxsKHRoaXMsIG9wdHMsIGhhbmRsZXIpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBNb2NrTm90TWF0Y2hlZEVycm9yKSB7XG4gICAgICAgICAgY29uc3QgbmV0Q29ubmVjdCA9IGFnZW50W2tHZXROZXRDb25uZWN0XSgpXG4gICAgICAgICAgaWYgKG5ldENvbm5lY3QgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgTW9ja05vdE1hdGNoZWRFcnJvcihgJHtlcnJvci5tZXNzYWdlfTogc3Vic2VxdWVudCByZXF1ZXN0IHRvIG9yaWdpbiAke29yaWdpbn0gd2FzIG5vdCBhbGxvd2VkIChuZXQuY29ubmVjdCBkaXNhYmxlZClgKVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY2hlY2tOZXRDb25uZWN0KG5ldENvbm5lY3QsIG9yaWdpbikpIHtcbiAgICAgICAgICAgIG9yaWdpbmFsRGlzcGF0Y2guY2FsbCh0aGlzLCBvcHRzLCBoYW5kbGVyKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgTW9ja05vdE1hdGNoZWRFcnJvcihgJHtlcnJvci5tZXNzYWdlfTogc3Vic2VxdWVudCByZXF1ZXN0IHRvIG9yaWdpbiAke29yaWdpbn0gd2FzIG5vdCBhbGxvd2VkIChuZXQuY29ubmVjdCBpcyBub3QgZW5hYmxlZCBmb3IgdGhpcyBvcmlnaW4pYClcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvcmlnaW5hbERpc3BhdGNoLmNhbGwodGhpcywgb3B0cywgaGFuZGxlcilcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tOZXRDb25uZWN0IChuZXRDb25uZWN0LCBvcmlnaW4pIHtcbiAgY29uc3QgdXJsID0gbmV3IFVSTChvcmlnaW4pXG4gIGlmIChuZXRDb25uZWN0ID09PSB0cnVlKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG5ldENvbm5lY3QpICYmIG5ldENvbm5lY3Quc29tZSgobWF0Y2hlcikgPT4gbWF0Y2hWYWx1ZShtYXRjaGVyLCB1cmwuaG9zdCkpKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gYnVpbGRNb2NrT3B0aW9ucyAob3B0cykge1xuICBpZiAob3B0cykge1xuICAgIGNvbnN0IHsgYWdlbnQsIC4uLm1vY2tPcHRpb25zIH0gPSBvcHRzXG4gICAgcmV0dXJuIG1vY2tPcHRpb25zXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldFJlc3BvbnNlRGF0YSxcbiAgZ2V0TW9ja0Rpc3BhdGNoLFxuICBhZGRNb2NrRGlzcGF0Y2gsXG4gIGRlbGV0ZU1vY2tEaXNwYXRjaCxcbiAgYnVpbGRLZXksXG4gIGdlbmVyYXRlS2V5VmFsdWVzLFxuICBtYXRjaFZhbHVlLFxuICBnZXRSZXNwb25zZSxcbiAgZ2V0U3RhdHVzVGV4dCxcbiAgbW9ja0Rpc3BhdGNoLFxuICBidWlsZE1vY2tEaXNwYXRjaCxcbiAgY2hlY2tOZXRDb25uZWN0LFxuICBidWlsZE1vY2tPcHRpb25zLFxuICBnZXRIZWFkZXJCeU5hbWVcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgZ2V0UmVzcG9uc2VEYXRhLCBidWlsZEtleSwgYWRkTW9ja0Rpc3BhdGNoIH0gPSByZXF1aXJlKCcuL21vY2stdXRpbHMnKVxuY29uc3Qge1xuICBrRGlzcGF0Y2hlcyxcbiAga0Rpc3BhdGNoS2V5LFxuICBrRGVmYXVsdEhlYWRlcnMsXG4gIGtEZWZhdWx0VHJhaWxlcnMsXG4gIGtDb250ZW50TGVuZ3RoLFxuICBrTW9ja0Rpc3BhdGNoXG59ID0gcmVxdWlyZSgnLi9tb2NrLXN5bWJvbHMnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgeyBidWlsZFVSTCB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcblxuLyoqXG4gKiBEZWZpbmVzIHRoZSBzY29wZSBBUEkgZm9yIGFuIGludGVyY2VwdG9yIHJlcGx5XG4gKi9cbmNsYXNzIE1vY2tTY29wZSB7XG4gIGNvbnN0cnVjdG9yIChtb2NrRGlzcGF0Y2gpIHtcbiAgICB0aGlzW2tNb2NrRGlzcGF0Y2hdID0gbW9ja0Rpc3BhdGNoXG4gIH1cblxuICAvKipcbiAgICogRGVsYXkgYSByZXBseSBieSBhIHNldCBhbW91bnQgaW4gbXMuXG4gICAqL1xuICBkZWxheSAod2FpdEluTXMpIHtcbiAgICBpZiAodHlwZW9mIHdhaXRJbk1zICE9PSAnbnVtYmVyJyB8fCAhTnVtYmVyLmlzSW50ZWdlcih3YWl0SW5NcykgfHwgd2FpdEluTXMgPD0gMCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCd3YWl0SW5NcyBtdXN0IGJlIGEgdmFsaWQgaW50ZWdlciA+IDAnKVxuICAgIH1cblxuICAgIHRoaXNba01vY2tEaXNwYXRjaF0uZGVsYXkgPSB3YWl0SW5Nc1xuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogRm9yIGEgZGVmaW5lZCByZXBseSwgbmV2ZXIgbWFyayBhcyBjb25zdW1lZC5cbiAgICovXG4gIHBlcnNpc3QgKCkge1xuICAgIHRoaXNba01vY2tEaXNwYXRjaF0ucGVyc2lzdCA9IHRydWVcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93IG9uZSB0byBkZWZpbmUgYSByZXBseSBmb3IgYSBzZXQgYW1vdW50IG9mIG1hdGNoaW5nIHJlcXVlc3RzLlxuICAgKi9cbiAgdGltZXMgKHJlcGVhdFRpbWVzKSB7XG4gICAgaWYgKHR5cGVvZiByZXBlYXRUaW1lcyAhPT0gJ251bWJlcicgfHwgIU51bWJlci5pc0ludGVnZXIocmVwZWF0VGltZXMpIHx8IHJlcGVhdFRpbWVzIDw9IDApIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigncmVwZWF0VGltZXMgbXVzdCBiZSBhIHZhbGlkIGludGVnZXIgPiAwJylcbiAgICB9XG5cbiAgICB0aGlzW2tNb2NrRGlzcGF0Y2hdLnRpbWVzID0gcmVwZWF0VGltZXNcbiAgICByZXR1cm4gdGhpc1xuICB9XG59XG5cbi8qKlxuICogRGVmaW5lcyBhbiBpbnRlcmNlcHRvciBmb3IgYSBNb2NrXG4gKi9cbmNsYXNzIE1vY2tJbnRlcmNlcHRvciB7XG4gIGNvbnN0cnVjdG9yIChvcHRzLCBtb2NrRGlzcGF0Y2hlcykge1xuICAgIGlmICh0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignb3B0cyBtdXN0IGJlIGFuIG9iamVjdCcpXG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3B0cy5wYXRoID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdvcHRzLnBhdGggbXVzdCBiZSBkZWZpbmVkJylcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvcHRzLm1ldGhvZCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIG9wdHMubWV0aG9kID0gJ0dFVCdcbiAgICB9XG4gICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8xMjQ1XG4gICAgLy8gQXMgcGVyIFJGQyAzOTg2LCBjbGllbnRzIGFyZSBub3Qgc3VwcG9zZWQgdG8gc2VuZCBVUklcbiAgICAvLyBmcmFnbWVudHMgdG8gc2VydmVycyB3aGVuIHRoZXkgcmV0cmlldmUgYSBkb2N1bWVudCxcbiAgICBpZiAodHlwZW9mIG9wdHMucGF0aCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmIChvcHRzLnF1ZXJ5KSB7XG4gICAgICAgIG9wdHMucGF0aCA9IGJ1aWxkVVJMKG9wdHMucGF0aCwgb3B0cy5xdWVyeSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE1hdGNoZXMgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvYmxvYi9tYWluL2xpYi9mZXRjaC9pbmRleC5qcyNMMTgxMVxuICAgICAgICBjb25zdCBwYXJzZWRVUkwgPSBuZXcgVVJMKG9wdHMucGF0aCwgJ2RhdGE6Ly8nKVxuICAgICAgICBvcHRzLnBhdGggPSBwYXJzZWRVUkwucGF0aG5hbWUgKyBwYXJzZWRVUkwuc2VhcmNoXG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3B0cy5tZXRob2QgPT09ICdzdHJpbmcnKSB7XG4gICAgICBvcHRzLm1ldGhvZCA9IG9wdHMubWV0aG9kLnRvVXBwZXJDYXNlKClcbiAgICB9XG5cbiAgICB0aGlzW2tEaXNwYXRjaEtleV0gPSBidWlsZEtleShvcHRzKVxuICAgIHRoaXNba0Rpc3BhdGNoZXNdID0gbW9ja0Rpc3BhdGNoZXNcbiAgICB0aGlzW2tEZWZhdWx0SGVhZGVyc10gPSB7fVxuICAgIHRoaXNba0RlZmF1bHRUcmFpbGVyc10gPSB7fVxuICAgIHRoaXNba0NvbnRlbnRMZW5ndGhdID0gZmFsc2VcbiAgfVxuXG4gIGNyZWF0ZU1vY2tTY29wZURpc3BhdGNoRGF0YSAoc3RhdHVzQ29kZSwgZGF0YSwgcmVzcG9uc2VPcHRpb25zID0ge30pIHtcbiAgICBjb25zdCByZXNwb25zZURhdGEgPSBnZXRSZXNwb25zZURhdGEoZGF0YSlcbiAgICBjb25zdCBjb250ZW50TGVuZ3RoID0gdGhpc1trQ29udGVudExlbmd0aF0gPyB7ICdjb250ZW50LWxlbmd0aCc6IHJlc3BvbnNlRGF0YS5sZW5ndGggfSA6IHt9XG4gICAgY29uc3QgaGVhZGVycyA9IHsgLi4udGhpc1trRGVmYXVsdEhlYWRlcnNdLCAuLi5jb250ZW50TGVuZ3RoLCAuLi5yZXNwb25zZU9wdGlvbnMuaGVhZGVycyB9XG4gICAgY29uc3QgdHJhaWxlcnMgPSB7IC4uLnRoaXNba0RlZmF1bHRUcmFpbGVyc10sIC4uLnJlc3BvbnNlT3B0aW9ucy50cmFpbGVycyB9XG5cbiAgICByZXR1cm4geyBzdGF0dXNDb2RlLCBkYXRhLCBoZWFkZXJzLCB0cmFpbGVycyB9XG4gIH1cblxuICB2YWxpZGF0ZVJlcGx5UGFyYW1ldGVycyAoc3RhdHVzQ29kZSwgZGF0YSwgcmVzcG9uc2VPcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBzdGF0dXNDb2RlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdzdGF0dXNDb2RlIG11c3QgYmUgZGVmaW5lZCcpXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignZGF0YSBtdXN0IGJlIGRlZmluZWQnKVxuICAgIH1cbiAgICBpZiAodHlwZW9mIHJlc3BvbnNlT3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigncmVzcG9uc2VPcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0JylcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTW9jayBhbiB1bmRpY2kgcmVxdWVzdCB3aXRoIGEgZGVmaW5lZCByZXBseS5cbiAgICovXG4gIHJlcGx5IChyZXBseURhdGEpIHtcbiAgICAvLyBWYWx1ZXMgb2YgcmVwbHkgYXJlbid0IGF2YWlsYWJsZSByaWdodCBub3cgYXMgdGhleVxuICAgIC8vIGNhbiBvbmx5IGJlIGF2YWlsYWJsZSB3aGVuIHRoZSByZXBseSBjYWxsYmFjayBpcyBpbnZva2VkLlxuICAgIGlmICh0eXBlb2YgcmVwbHlEYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBXZSdsbCBmaXJzdCB3cmFwIHRoZSBwcm92aWRlZCBjYWxsYmFjayBpbiBhbm90aGVyIGZ1bmN0aW9uLFxuICAgICAgLy8gdGhpcyBmdW5jdGlvbiB3aWxsIHByb3Blcmx5IHJlc29sdmUgdGhlIGRhdGEgZnJvbSB0aGUgY2FsbGJhY2tcbiAgICAgIC8vIHdoZW4gaW52b2tlZC5cbiAgICAgIGNvbnN0IHdyYXBwZWREZWZhdWx0c0NhbGxiYWNrID0gKG9wdHMpID0+IHtcbiAgICAgICAgLy8gT3VyIHJlcGx5IG9wdGlvbnMgY2FsbGJhY2sgY29udGFpbnMgdGhlIHBhcmFtZXRlciBmb3Igc3RhdHVzQ29kZSwgZGF0YSBhbmQgb3B0aW9ucy5cbiAgICAgICAgY29uc3QgcmVzb2x2ZWREYXRhID0gcmVwbHlEYXRhKG9wdHMpXG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgaXQgaXMgaW4gdGhlIHJpZ2h0IGZvcm1hdFxuICAgICAgICBpZiAodHlwZW9mIHJlc29sdmVkRGF0YSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3JlcGx5IG9wdGlvbnMgY2FsbGJhY2sgbXVzdCByZXR1cm4gYW4gb2JqZWN0JylcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgc3RhdHVzQ29kZSwgZGF0YSA9ICcnLCByZXNwb25zZU9wdGlvbnMgPSB7fSB9ID0gcmVzb2x2ZWREYXRhXG4gICAgICAgIHRoaXMudmFsaWRhdGVSZXBseVBhcmFtZXRlcnMoc3RhdHVzQ29kZSwgZGF0YSwgcmVzcG9uc2VPcHRpb25zKVxuICAgICAgICAvLyBTaW5jZSB0aGUgdmFsdWVzIGNhbiBiZSBvYnRhaW5lZCBpbW1lZGlhdGVseSB3ZSByZXR1cm4gdGhlbVxuICAgICAgICAvLyBmcm9tIHRoaXMgaGlnaGVyIG9yZGVyIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSByZXNvbHZlZCBsYXRlci5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi50aGlzLmNyZWF0ZU1vY2tTY29wZURpc3BhdGNoRGF0YShzdGF0dXNDb2RlLCBkYXRhLCByZXNwb25zZU9wdGlvbnMpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQWRkIHVzdWFsIGRpc3BhdGNoIGRhdGEsIGJ1dCB0aGlzIHRpbWUgc2V0IHRoZSBkYXRhIHBhcmFtZXRlciB0byBmdW5jdGlvbiB0aGF0IHdpbGwgZXZlbnR1YWxseSBwcm92aWRlIGRhdGEuXG4gICAgICBjb25zdCBuZXdNb2NrRGlzcGF0Y2ggPSBhZGRNb2NrRGlzcGF0Y2godGhpc1trRGlzcGF0Y2hlc10sIHRoaXNba0Rpc3BhdGNoS2V5XSwgd3JhcHBlZERlZmF1bHRzQ2FsbGJhY2spXG4gICAgICByZXR1cm4gbmV3IE1vY2tTY29wZShuZXdNb2NrRGlzcGF0Y2gpXG4gICAgfVxuXG4gICAgLy8gV2UgY2FuIGhhdmUgZWl0aGVyIG9uZSBvciB0aHJlZSBwYXJhbWV0ZXJzLCBpZiB3ZSBnZXQgaGVyZSxcbiAgICAvLyB3ZSBzaG91bGQgaGF2ZSAxLTMgcGFyYW1ldGVycy4gU28gd2Ugc3ByZWFkIHRoZSBhcmd1bWVudHMgb2ZcbiAgICAvLyB0aGlzIGZ1bmN0aW9uIHRvIG9idGFpbiB0aGUgcGFyYW1ldGVycywgc2luY2UgcmVwbHlEYXRhIHdpbGwgYWx3YXlzXG4gICAgLy8ganVzdCBiZSB0aGUgc3RhdHVzQ29kZS5cbiAgICBjb25zdCBbc3RhdHVzQ29kZSwgZGF0YSA9ICcnLCByZXNwb25zZU9wdGlvbnMgPSB7fV0gPSBbLi4uYXJndW1lbnRzXVxuICAgIHRoaXMudmFsaWRhdGVSZXBseVBhcmFtZXRlcnMoc3RhdHVzQ29kZSwgZGF0YSwgcmVzcG9uc2VPcHRpb25zKVxuXG4gICAgLy8gU2VuZCBpbi1hbHJlYWR5IHByb3ZpZGVkIGRhdGEgbGlrZSB1c3VhbFxuICAgIGNvbnN0IGRpc3BhdGNoRGF0YSA9IHRoaXMuY3JlYXRlTW9ja1Njb3BlRGlzcGF0Y2hEYXRhKHN0YXR1c0NvZGUsIGRhdGEsIHJlc3BvbnNlT3B0aW9ucylcbiAgICBjb25zdCBuZXdNb2NrRGlzcGF0Y2ggPSBhZGRNb2NrRGlzcGF0Y2godGhpc1trRGlzcGF0Y2hlc10sIHRoaXNba0Rpc3BhdGNoS2V5XSwgZGlzcGF0Y2hEYXRhKVxuICAgIHJldHVybiBuZXcgTW9ja1Njb3BlKG5ld01vY2tEaXNwYXRjaClcbiAgfVxuXG4gIC8qKlxuICAgKiBNb2NrIGFuIHVuZGljaSByZXF1ZXN0IHdpdGggYSBkZWZpbmVkIGVycm9yLlxuICAgKi9cbiAgcmVwbHlXaXRoRXJyb3IgKGVycm9yKSB7XG4gICAgaWYgKHR5cGVvZiBlcnJvciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignZXJyb3IgbXVzdCBiZSBkZWZpbmVkJylcbiAgICB9XG5cbiAgICBjb25zdCBuZXdNb2NrRGlzcGF0Y2ggPSBhZGRNb2NrRGlzcGF0Y2godGhpc1trRGlzcGF0Y2hlc10sIHRoaXNba0Rpc3BhdGNoS2V5XSwgeyBlcnJvciB9KVxuICAgIHJldHVybiBuZXcgTW9ja1Njb3BlKG5ld01vY2tEaXNwYXRjaClcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgZGVmYXVsdCByZXBseSBoZWFkZXJzIG9uIHRoZSBpbnRlcmNlcHRvciBmb3Igc3Vic2VxdWVudCByZXBsaWVzXG4gICAqL1xuICBkZWZhdWx0UmVwbHlIZWFkZXJzIChoZWFkZXJzKSB7XG4gICAgaWYgKHR5cGVvZiBoZWFkZXJzID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdoZWFkZXJzIG11c3QgYmUgZGVmaW5lZCcpXG4gICAgfVxuXG4gICAgdGhpc1trRGVmYXVsdEhlYWRlcnNdID0gaGVhZGVyc1xuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogU2V0IGRlZmF1bHQgcmVwbHkgdHJhaWxlcnMgb24gdGhlIGludGVyY2VwdG9yIGZvciBzdWJzZXF1ZW50IHJlcGxpZXNcbiAgICovXG4gIGRlZmF1bHRSZXBseVRyYWlsZXJzICh0cmFpbGVycykge1xuICAgIGlmICh0eXBlb2YgdHJhaWxlcnMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3RyYWlsZXJzIG11c3QgYmUgZGVmaW5lZCcpXG4gICAgfVxuXG4gICAgdGhpc1trRGVmYXVsdFRyYWlsZXJzXSA9IHRyYWlsZXJzXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgcmVwbHkgY29udGVudCBsZW5ndGggaGVhZGVyIGZvciByZXBsaWVzIG9uIHRoZSBpbnRlcmNlcHRvclxuICAgKi9cbiAgcmVwbHlDb250ZW50TGVuZ3RoICgpIHtcbiAgICB0aGlzW2tDb250ZW50TGVuZ3RoXSA9IHRydWVcbiAgICByZXR1cm4gdGhpc1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzLk1vY2tJbnRlcmNlcHRvciA9IE1vY2tJbnRlcmNlcHRvclxubW9kdWxlLmV4cG9ydHMuTW9ja1Njb3BlID0gTW9ja1Njb3BlXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHByb21pc2lmeSB9ID0gcmVxdWlyZSgndXRpbCcpXG5jb25zdCBDbGllbnQgPSByZXF1aXJlKCcuLi9jbGllbnQnKVxuY29uc3QgeyBidWlsZE1vY2tEaXNwYXRjaCB9ID0gcmVxdWlyZSgnLi9tb2NrLXV0aWxzJylcbmNvbnN0IHtcbiAga0Rpc3BhdGNoZXMsXG4gIGtNb2NrQWdlbnQsXG4gIGtDbG9zZSxcbiAga09yaWdpbmFsQ2xvc2UsXG4gIGtPcmlnaW4sXG4gIGtPcmlnaW5hbERpc3BhdGNoLFxuICBrQ29ubmVjdGVkXG59ID0gcmVxdWlyZSgnLi9tb2NrLXN5bWJvbHMnKVxuY29uc3QgeyBNb2NrSW50ZXJjZXB0b3IgfSA9IHJlcXVpcmUoJy4vbW9jay1pbnRlcmNlcHRvcicpXG5jb25zdCBTeW1ib2xzID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcblxuLyoqXG4gKiBNb2NrQ2xpZW50IHByb3ZpZGVzIGFuIEFQSSB0aGF0IGV4dGVuZHMgdGhlIENsaWVudCB0byBpbmZsdWVuY2UgdGhlIG1vY2tEaXNwYXRjaGVzLlxuICovXG5jbGFzcyBNb2NrQ2xpZW50IGV4dGVuZHMgQ2xpZW50IHtcbiAgY29uc3RydWN0b3IgKG9yaWdpbiwgb3B0cykge1xuICAgIHN1cGVyKG9yaWdpbiwgb3B0cylcblxuICAgIGlmICghb3B0cyB8fCAhb3B0cy5hZ2VudCB8fCB0eXBlb2Ygb3B0cy5hZ2VudC5kaXNwYXRjaCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdBcmd1bWVudCBvcHRzLmFnZW50IG11c3QgaW1wbGVtZW50IEFnZW50JylcbiAgICB9XG5cbiAgICB0aGlzW2tNb2NrQWdlbnRdID0gb3B0cy5hZ2VudFxuICAgIHRoaXNba09yaWdpbl0gPSBvcmlnaW5cbiAgICB0aGlzW2tEaXNwYXRjaGVzXSA9IFtdXG4gICAgdGhpc1trQ29ubmVjdGVkXSA9IDFcbiAgICB0aGlzW2tPcmlnaW5hbERpc3BhdGNoXSA9IHRoaXMuZGlzcGF0Y2hcbiAgICB0aGlzW2tPcmlnaW5hbENsb3NlXSA9IHRoaXMuY2xvc2UuYmluZCh0aGlzKVxuXG4gICAgdGhpcy5kaXNwYXRjaCA9IGJ1aWxkTW9ja0Rpc3BhdGNoLmNhbGwodGhpcylcbiAgICB0aGlzLmNsb3NlID0gdGhpc1trQ2xvc2VdXG4gIH1cblxuICBnZXQgW1N5bWJvbHMua0Nvbm5lY3RlZF0gKCkge1xuICAgIHJldHVybiB0aGlzW2tDb25uZWN0ZWRdXG4gIH1cblxuICAvKipcbiAgICogU2V0cyB1cCB0aGUgYmFzZSBpbnRlcmNlcHRvciBmb3IgbW9ja2luZyByZXBsaWVzIGZyb20gdW5kaWNpLlxuICAgKi9cbiAgaW50ZXJjZXB0IChvcHRzKSB7XG4gICAgcmV0dXJuIG5ldyBNb2NrSW50ZXJjZXB0b3Iob3B0cywgdGhpc1trRGlzcGF0Y2hlc10pXG4gIH1cblxuICBhc3luYyBba0Nsb3NlXSAoKSB7XG4gICAgYXdhaXQgcHJvbWlzaWZ5KHRoaXNba09yaWdpbmFsQ2xvc2VdKSgpXG4gICAgdGhpc1trQ29ubmVjdGVkXSA9IDBcbiAgICB0aGlzW2tNb2NrQWdlbnRdW1N5bWJvbHMua0NsaWVudHNdLmRlbGV0ZSh0aGlzW2tPcmlnaW5dKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gTW9ja0NsaWVudFxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBwcm9taXNpZnkgfSA9IHJlcXVpcmUoJ3V0aWwnKVxuY29uc3QgUG9vbCA9IHJlcXVpcmUoJy4uL3Bvb2wnKVxuY29uc3QgeyBidWlsZE1vY2tEaXNwYXRjaCB9ID0gcmVxdWlyZSgnLi9tb2NrLXV0aWxzJylcbmNvbnN0IHtcbiAga0Rpc3BhdGNoZXMsXG4gIGtNb2NrQWdlbnQsXG4gIGtDbG9zZSxcbiAga09yaWdpbmFsQ2xvc2UsXG4gIGtPcmlnaW4sXG4gIGtPcmlnaW5hbERpc3BhdGNoLFxuICBrQ29ubmVjdGVkXG59ID0gcmVxdWlyZSgnLi9tb2NrLXN5bWJvbHMnKVxuY29uc3QgeyBNb2NrSW50ZXJjZXB0b3IgfSA9IHJlcXVpcmUoJy4vbW9jay1pbnRlcmNlcHRvcicpXG5jb25zdCBTeW1ib2xzID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcblxuLyoqXG4gKiBNb2NrUG9vbCBwcm92aWRlcyBhbiBBUEkgdGhhdCBleHRlbmRzIHRoZSBQb29sIHRvIGluZmx1ZW5jZSB0aGUgbW9ja0Rpc3BhdGNoZXMuXG4gKi9cbmNsYXNzIE1vY2tQb29sIGV4dGVuZHMgUG9vbCB7XG4gIGNvbnN0cnVjdG9yIChvcmlnaW4sIG9wdHMpIHtcbiAgICBzdXBlcihvcmlnaW4sIG9wdHMpXG5cbiAgICBpZiAoIW9wdHMgfHwgIW9wdHMuYWdlbnQgfHwgdHlwZW9mIG9wdHMuYWdlbnQuZGlzcGF0Y2ggIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignQXJndW1lbnQgb3B0cy5hZ2VudCBtdXN0IGltcGxlbWVudCBBZ2VudCcpXG4gICAgfVxuXG4gICAgdGhpc1trTW9ja0FnZW50XSA9IG9wdHMuYWdlbnRcbiAgICB0aGlzW2tPcmlnaW5dID0gb3JpZ2luXG4gICAgdGhpc1trRGlzcGF0Y2hlc10gPSBbXVxuICAgIHRoaXNba0Nvbm5lY3RlZF0gPSAxXG4gICAgdGhpc1trT3JpZ2luYWxEaXNwYXRjaF0gPSB0aGlzLmRpc3BhdGNoXG4gICAgdGhpc1trT3JpZ2luYWxDbG9zZV0gPSB0aGlzLmNsb3NlLmJpbmQodGhpcylcblxuICAgIHRoaXMuZGlzcGF0Y2ggPSBidWlsZE1vY2tEaXNwYXRjaC5jYWxsKHRoaXMpXG4gICAgdGhpcy5jbG9zZSA9IHRoaXNba0Nsb3NlXVxuICB9XG5cbiAgZ2V0IFtTeW1ib2xzLmtDb25uZWN0ZWRdICgpIHtcbiAgICByZXR1cm4gdGhpc1trQ29ubmVjdGVkXVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdXAgdGhlIGJhc2UgaW50ZXJjZXB0b3IgZm9yIG1vY2tpbmcgcmVwbGllcyBmcm9tIHVuZGljaS5cbiAgICovXG4gIGludGVyY2VwdCAob3B0cykge1xuICAgIHJldHVybiBuZXcgTW9ja0ludGVyY2VwdG9yKG9wdHMsIHRoaXNba0Rpc3BhdGNoZXNdKVxuICB9XG5cbiAgYXN5bmMgW2tDbG9zZV0gKCkge1xuICAgIGF3YWl0IHByb21pc2lmeSh0aGlzW2tPcmlnaW5hbENsb3NlXSkoKVxuICAgIHRoaXNba0Nvbm5lY3RlZF0gPSAwXG4gICAgdGhpc1trTW9ja0FnZW50XVtTeW1ib2xzLmtDbGllbnRzXS5kZWxldGUodGhpc1trT3JpZ2luXSlcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IE1vY2tQb29sXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBzaW5ndWxhcnMgPSB7XG4gIHByb25vdW46ICdpdCcsXG4gIGlzOiAnaXMnLFxuICB3YXM6ICd3YXMnLFxuICB0aGlzOiAndGhpcydcbn1cblxuY29uc3QgcGx1cmFscyA9IHtcbiAgcHJvbm91bjogJ3RoZXknLFxuICBpczogJ2FyZScsXG4gIHdhczogJ3dlcmUnLFxuICB0aGlzOiAndGhlc2UnXG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xhc3MgUGx1cmFsaXplciB7XG4gIGNvbnN0cnVjdG9yIChzaW5ndWxhciwgcGx1cmFsKSB7XG4gICAgdGhpcy5zaW5ndWxhciA9IHNpbmd1bGFyXG4gICAgdGhpcy5wbHVyYWwgPSBwbHVyYWxcbiAgfVxuXG4gIHBsdXJhbGl6ZSAoY291bnQpIHtcbiAgICBjb25zdCBvbmUgPSBjb3VudCA9PT0gMVxuICAgIGNvbnN0IGtleXMgPSBvbmUgPyBzaW5ndWxhcnMgOiBwbHVyYWxzXG4gICAgY29uc3Qgbm91biA9IG9uZSA/IHRoaXMuc2luZ3VsYXIgOiB0aGlzLnBsdXJhbFxuICAgIHJldHVybiB7IC4uLmtleXMsIGNvdW50LCBub3VuIH1cbiAgfVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBUcmFuc2Zvcm0gfSA9IHJlcXVpcmUoJ3N0cmVhbScpXG5jb25zdCB7IENvbnNvbGUgfSA9IHJlcXVpcmUoJ2NvbnNvbGUnKVxuXG4vKipcbiAqIEdldHMgdGhlIG91dHB1dCBvZiBgY29uc29sZS50YWJsZSjigKYpYCBhcyBhIHN0cmluZy5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBQZW5kaW5nSW50ZXJjZXB0b3JzRm9ybWF0dGVyIHtcbiAgY29uc3RydWN0b3IgKHsgZGlzYWJsZUNvbG9ycyB9ID0ge30pIHtcbiAgICB0aGlzLnRyYW5zZm9ybSA9IG5ldyBUcmFuc2Zvcm0oe1xuICAgICAgdHJhbnNmb3JtIChjaHVuaywgX2VuYywgY2IpIHtcbiAgICAgICAgY2IobnVsbCwgY2h1bmspXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXMubG9nZ2VyID0gbmV3IENvbnNvbGUoe1xuICAgICAgc3Rkb3V0OiB0aGlzLnRyYW5zZm9ybSxcbiAgICAgIGluc3BlY3RPcHRpb25zOiB7XG4gICAgICAgIGNvbG9yczogIWRpc2FibGVDb2xvcnMgJiYgIXByb2Nlc3MuZW52LkNJXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGZvcm1hdCAocGVuZGluZ0ludGVyY2VwdG9ycykge1xuICAgIGNvbnN0IHdpdGhQcmV0dHlIZWFkZXJzID0gcGVuZGluZ0ludGVyY2VwdG9ycy5tYXAoXG4gICAgICAoeyBtZXRob2QsIHBhdGgsIGRhdGE6IHsgc3RhdHVzQ29kZSB9LCBwZXJzaXN0LCB0aW1lcywgdGltZXNJbnZva2VkLCBvcmlnaW4gfSkgPT4gKHtcbiAgICAgICAgTWV0aG9kOiBtZXRob2QsXG4gICAgICAgIE9yaWdpbjogb3JpZ2luLFxuICAgICAgICBQYXRoOiBwYXRoLFxuICAgICAgICAnU3RhdHVzIGNvZGUnOiBzdGF0dXNDb2RlLFxuICAgICAgICBQZXJzaXN0ZW50OiBwZXJzaXN0ID8gJ+KchScgOiAn4p2MJyxcbiAgICAgICAgSW52b2NhdGlvbnM6IHRpbWVzSW52b2tlZCxcbiAgICAgICAgUmVtYWluaW5nOiBwZXJzaXN0ID8gSW5maW5pdHkgOiB0aW1lcyAtIHRpbWVzSW52b2tlZFxuICAgICAgfSkpXG5cbiAgICB0aGlzLmxvZ2dlci50YWJsZSh3aXRoUHJldHR5SGVhZGVycylcbiAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm0ucmVhZCgpLnRvU3RyaW5nKClcbiAgfVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBrQ2xpZW50cyB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IEFnZW50ID0gcmVxdWlyZSgnLi4vYWdlbnQnKVxuY29uc3Qge1xuICBrQWdlbnQsXG4gIGtNb2NrQWdlbnRTZXQsXG4gIGtNb2NrQWdlbnRHZXQsXG4gIGtEaXNwYXRjaGVzLFxuICBrSXNNb2NrQWN0aXZlLFxuICBrTmV0Q29ubmVjdCxcbiAga0dldE5ldENvbm5lY3QsXG4gIGtPcHRpb25zLFxuICBrRmFjdG9yeVxufSA9IHJlcXVpcmUoJy4vbW9jay1zeW1ib2xzJylcbmNvbnN0IE1vY2tDbGllbnQgPSByZXF1aXJlKCcuL21vY2stY2xpZW50JylcbmNvbnN0IE1vY2tQb29sID0gcmVxdWlyZSgnLi9tb2NrLXBvb2wnKVxuY29uc3QgeyBtYXRjaFZhbHVlLCBidWlsZE1vY2tPcHRpb25zIH0gPSByZXF1aXJlKCcuL21vY2stdXRpbHMnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciwgVW5kaWNpRXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IERpc3BhdGNoZXIgPSByZXF1aXJlKCcuLi9kaXNwYXRjaGVyJylcbmNvbnN0IFBsdXJhbGl6ZXIgPSByZXF1aXJlKCcuL3BsdXJhbGl6ZXInKVxuY29uc3QgUGVuZGluZ0ludGVyY2VwdG9yc0Zvcm1hdHRlciA9IHJlcXVpcmUoJy4vcGVuZGluZy1pbnRlcmNlcHRvcnMtZm9ybWF0dGVyJylcblxuY2xhc3MgRmFrZVdlYWtSZWYge1xuICBjb25zdHJ1Y3RvciAodmFsdWUpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWVcbiAgfVxuXG4gIGRlcmVmICgpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZVxuICB9XG59XG5cbmNsYXNzIE1vY2tBZ2VudCBleHRlbmRzIERpc3BhdGNoZXIge1xuICBjb25zdHJ1Y3RvciAob3B0cykge1xuICAgIHN1cGVyKG9wdHMpXG5cbiAgICB0aGlzW2tOZXRDb25uZWN0XSA9IHRydWVcbiAgICB0aGlzW2tJc01vY2tBY3RpdmVdID0gdHJ1ZVxuXG4gICAgLy8gSW5zdGFudGlhdGUgQWdlbnQgYW5kIGVuY2Fwc3VsYXRlXG4gICAgaWYgKChvcHRzICYmIG9wdHMuYWdlbnQgJiYgdHlwZW9mIG9wdHMuYWdlbnQuZGlzcGF0Y2ggIT09ICdmdW5jdGlvbicpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0FyZ3VtZW50IG9wdHMuYWdlbnQgbXVzdCBpbXBsZW1lbnQgQWdlbnQnKVxuICAgIH1cbiAgICBjb25zdCBhZ2VudCA9IG9wdHMgJiYgb3B0cy5hZ2VudCA/IG9wdHMuYWdlbnQgOiBuZXcgQWdlbnQob3B0cylcbiAgICB0aGlzW2tBZ2VudF0gPSBhZ2VudFxuXG4gICAgdGhpc1trQ2xpZW50c10gPSBhZ2VudFtrQ2xpZW50c11cbiAgICB0aGlzW2tPcHRpb25zXSA9IGJ1aWxkTW9ja09wdGlvbnMob3B0cylcbiAgfVxuXG4gIGdldCAob3JpZ2luKSB7XG4gICAgbGV0IGRpc3BhdGNoZXIgPSB0aGlzW2tNb2NrQWdlbnRHZXRdKG9yaWdpbilcblxuICAgIGlmICghZGlzcGF0Y2hlcikge1xuICAgICAgZGlzcGF0Y2hlciA9IHRoaXNba0ZhY3RvcnldKG9yaWdpbilcbiAgICAgIHRoaXNba01vY2tBZ2VudFNldF0ob3JpZ2luLCBkaXNwYXRjaGVyKVxuICAgIH1cbiAgICByZXR1cm4gZGlzcGF0Y2hlclxuICB9XG5cbiAgZGlzcGF0Y2ggKG9wdHMsIGhhbmRsZXIpIHtcbiAgICAvLyBDYWxsIE1vY2tBZ2VudC5nZXQgdG8gcGVyZm9ybSBhZGRpdGlvbmFsIHNldHVwIGJlZm9yZSBkaXNwYXRjaGluZyBhcyBub3JtYWxcbiAgICB0aGlzLmdldChvcHRzLm9yaWdpbilcbiAgICByZXR1cm4gdGhpc1trQWdlbnRdLmRpc3BhdGNoKG9wdHMsIGhhbmRsZXIpXG4gIH1cblxuICBhc3luYyBjbG9zZSAoKSB7XG4gICAgYXdhaXQgdGhpc1trQWdlbnRdLmNsb3NlKClcbiAgICB0aGlzW2tDbGllbnRzXS5jbGVhcigpXG4gIH1cblxuICBkZWFjdGl2YXRlICgpIHtcbiAgICB0aGlzW2tJc01vY2tBY3RpdmVdID0gZmFsc2VcbiAgfVxuXG4gIGFjdGl2YXRlICgpIHtcbiAgICB0aGlzW2tJc01vY2tBY3RpdmVdID0gdHJ1ZVxuICB9XG5cbiAgZW5hYmxlTmV0Q29ubmVjdCAobWF0Y2hlcikge1xuICAgIGlmICh0eXBlb2YgbWF0Y2hlciA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG1hdGNoZXIgPT09ICdmdW5jdGlvbicgfHwgbWF0Y2hlciBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpc1trTmV0Q29ubmVjdF0pKSB7XG4gICAgICAgIHRoaXNba05ldENvbm5lY3RdLnB1c2gobWF0Y2hlcilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXNba05ldENvbm5lY3RdID0gW21hdGNoZXJdXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbWF0Y2hlciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRoaXNba05ldENvbm5lY3RdID0gdHJ1ZVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ1Vuc3VwcG9ydGVkIG1hdGNoZXIuIE11c3QgYmUgb25lIG9mIFN0cmluZ3xGdW5jdGlvbnxSZWdFeHAuJylcbiAgICB9XG4gIH1cblxuICBkaXNhYmxlTmV0Q29ubmVjdCAoKSB7XG4gICAgdGhpc1trTmV0Q29ubmVjdF0gPSBmYWxzZVxuICB9XG5cbiAgLy8gVGhpcyBpcyByZXF1aXJlZCB0byBieXBhc3MgaXNzdWVzIGNhdXNlZCBieSB1c2luZyBnbG9iYWwgc3ltYm9scyAtIHNlZTpcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzE0NDdcbiAgZ2V0IGlzTW9ja0FjdGl2ZSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0lzTW9ja0FjdGl2ZV1cbiAgfVxuXG4gIFtrTW9ja0FnZW50U2V0XSAob3JpZ2luLCBkaXNwYXRjaGVyKSB7XG4gICAgdGhpc1trQ2xpZW50c10uc2V0KG9yaWdpbiwgbmV3IEZha2VXZWFrUmVmKGRpc3BhdGNoZXIpKVxuICB9XG5cbiAgW2tGYWN0b3J5XSAob3JpZ2luKSB7XG4gICAgY29uc3QgbW9ja09wdGlvbnMgPSBPYmplY3QuYXNzaWduKHsgYWdlbnQ6IHRoaXMgfSwgdGhpc1trT3B0aW9uc10pXG4gICAgcmV0dXJuIHRoaXNba09wdGlvbnNdICYmIHRoaXNba09wdGlvbnNdLmNvbm5lY3Rpb25zID09PSAxXG4gICAgICA/IG5ldyBNb2NrQ2xpZW50KG9yaWdpbiwgbW9ja09wdGlvbnMpXG4gICAgICA6IG5ldyBNb2NrUG9vbChvcmlnaW4sIG1vY2tPcHRpb25zKVxuICB9XG5cbiAgW2tNb2NrQWdlbnRHZXRdIChvcmlnaW4pIHtcbiAgICAvLyBGaXJzdCBjaGVjayBpZiB3ZSBjYW4gaW1tZWRpYXRlbHkgZmluZCBpdFxuICAgIGNvbnN0IHJlZiA9IHRoaXNba0NsaWVudHNdLmdldChvcmlnaW4pXG4gICAgaWYgKHJlZikge1xuICAgICAgcmV0dXJuIHJlZi5kZXJlZigpXG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIG9yaWdpbiBpcyBub3QgYSBzdHJpbmcgY3JlYXRlIGEgZHVtbXkgcGFyZW50IHBvb2wgYW5kIHJldHVybiB0byB1c2VyXG4gICAgaWYgKHR5cGVvZiBvcmlnaW4gIT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBkaXNwYXRjaGVyID0gdGhpc1trRmFjdG9yeV0oJ2h0dHA6Ly9sb2NhbGhvc3Q6OTk5OScpXG4gICAgICB0aGlzW2tNb2NrQWdlbnRTZXRdKG9yaWdpbiwgZGlzcGF0Y2hlcilcbiAgICAgIHJldHVybiBkaXNwYXRjaGVyXG4gICAgfVxuXG4gICAgLy8gSWYgd2UgbWF0Y2gsIGNyZWF0ZSBhIHBvb2wgYW5kIGFzc2lnbiB0aGUgc2FtZSBkaXNwYXRjaGVzXG4gICAgZm9yIChjb25zdCBba2V5TWF0Y2hlciwgbm9uRXhwbGljaXRSZWZdIG9mIEFycmF5LmZyb20odGhpc1trQ2xpZW50c10pKSB7XG4gICAgICBjb25zdCBub25FeHBsaWNpdERpc3BhdGNoZXIgPSBub25FeHBsaWNpdFJlZi5kZXJlZigpXG4gICAgICBpZiAobm9uRXhwbGljaXREaXNwYXRjaGVyICYmIHR5cGVvZiBrZXlNYXRjaGVyICE9PSAnc3RyaW5nJyAmJiBtYXRjaFZhbHVlKGtleU1hdGNoZXIsIG9yaWdpbikpIHtcbiAgICAgICAgY29uc3QgZGlzcGF0Y2hlciA9IHRoaXNba0ZhY3RvcnldKG9yaWdpbilcbiAgICAgICAgdGhpc1trTW9ja0FnZW50U2V0XShvcmlnaW4sIGRpc3BhdGNoZXIpXG4gICAgICAgIGRpc3BhdGNoZXJba0Rpc3BhdGNoZXNdID0gbm9uRXhwbGljaXREaXNwYXRjaGVyW2tEaXNwYXRjaGVzXVxuICAgICAgICByZXR1cm4gZGlzcGF0Y2hlclxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIFtrR2V0TmV0Q29ubmVjdF0gKCkge1xuICAgIHJldHVybiB0aGlzW2tOZXRDb25uZWN0XVxuICB9XG5cbiAgcGVuZGluZ0ludGVyY2VwdG9ycyAoKSB7XG4gICAgY29uc3QgbW9ja0FnZW50Q2xpZW50cyA9IHRoaXNba0NsaWVudHNdXG5cbiAgICByZXR1cm4gQXJyYXkuZnJvbShtb2NrQWdlbnRDbGllbnRzLmVudHJpZXMoKSlcbiAgICAgIC5mbGF0TWFwKChbb3JpZ2luLCBzY29wZV0pID0+IHNjb3BlLmRlcmVmKClba0Rpc3BhdGNoZXNdLm1hcChkaXNwYXRjaCA9PiAoeyAuLi5kaXNwYXRjaCwgb3JpZ2luIH0pKSlcbiAgICAgIC5maWx0ZXIoKHsgcGVuZGluZyB9KSA9PiBwZW5kaW5nKVxuICB9XG5cbiAgYXNzZXJ0Tm9QZW5kaW5nSW50ZXJjZXB0b3JzICh7IHBlbmRpbmdJbnRlcmNlcHRvcnNGb3JtYXR0ZXIgPSBuZXcgUGVuZGluZ0ludGVyY2VwdG9yc0Zvcm1hdHRlcigpIH0gPSB7fSkge1xuICAgIGNvbnN0IHBlbmRpbmcgPSB0aGlzLnBlbmRpbmdJbnRlcmNlcHRvcnMoKVxuXG4gICAgaWYgKHBlbmRpbmcubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBwbHVyYWxpemVyID0gbmV3IFBsdXJhbGl6ZXIoJ2ludGVyY2VwdG9yJywgJ2ludGVyY2VwdG9ycycpLnBsdXJhbGl6ZShwZW5kaW5nLmxlbmd0aClcblxuICAgIHRocm93IG5ldyBVbmRpY2lFcnJvcihgXG4ke3BsdXJhbGl6ZXIuY291bnR9ICR7cGx1cmFsaXplci5ub3VufSAke3BsdXJhbGl6ZXIuaXN9IHBlbmRpbmc6XG5cbiR7cGVuZGluZ0ludGVyY2VwdG9yc0Zvcm1hdHRlci5mb3JtYXQocGVuZGluZyl9XG5gLnRyaW0oKSlcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IE1vY2tBZ2VudFxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBrUHJveHksIGtDbG9zZSwga0Rlc3Ryb3ksIGtJbnRlcmNlcHRvcnMgfSA9IHJlcXVpcmUoJy4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsgVVJMIH0gPSByZXF1aXJlKCd1cmwnKVxuY29uc3QgQWdlbnQgPSByZXF1aXJlKCcuL2FnZW50JylcbmNvbnN0IFBvb2wgPSByZXF1aXJlKCcuL3Bvb2wnKVxuY29uc3QgRGlzcGF0Y2hlckJhc2UgPSByZXF1aXJlKCcuL2Rpc3BhdGNoZXItYmFzZScpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yLCBSZXF1ZXN0QWJvcnRlZEVycm9yIH0gPSByZXF1aXJlKCcuL2NvcmUvZXJyb3JzJylcbmNvbnN0IGJ1aWxkQ29ubmVjdG9yID0gcmVxdWlyZSgnLi9jb3JlL2Nvbm5lY3QnKVxuXG5jb25zdCBrQWdlbnQgPSBTeW1ib2woJ3Byb3h5IGFnZW50JylcbmNvbnN0IGtDbGllbnQgPSBTeW1ib2woJ3Byb3h5IGNsaWVudCcpXG5jb25zdCBrUHJveHlIZWFkZXJzID0gU3ltYm9sKCdwcm94eSBoZWFkZXJzJylcbmNvbnN0IGtSZXF1ZXN0VGxzID0gU3ltYm9sKCdyZXF1ZXN0IHRscyBzZXR0aW5ncycpXG5jb25zdCBrUHJveHlUbHMgPSBTeW1ib2woJ3Byb3h5IHRscyBzZXR0aW5ncycpXG5jb25zdCBrQ29ubmVjdEVuZHBvaW50ID0gU3ltYm9sKCdjb25uZWN0IGVuZHBvaW50IGZ1bmN0aW9uJylcblxuZnVuY3Rpb24gZGVmYXVsdFByb3RvY29sUG9ydCAocHJvdG9jb2wpIHtcbiAgcmV0dXJuIHByb3RvY29sID09PSAnaHR0cHM6JyA/IDQ0MyA6IDgwXG59XG5cbmZ1bmN0aW9uIGJ1aWxkUHJveHlPcHRpb25zIChvcHRzKSB7XG4gIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ3N0cmluZycpIHtcbiAgICBvcHRzID0geyB1cmk6IG9wdHMgfVxuICB9XG5cbiAgaWYgKCFvcHRzIHx8ICFvcHRzLnVyaSkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignUHJveHkgb3B0cy51cmkgaXMgbWFuZGF0b3J5JylcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdXJpOiBvcHRzLnVyaSxcbiAgICBwcm90b2NvbDogb3B0cy5wcm90b2NvbCB8fCAnaHR0cHMnXG4gIH1cbn1cblxuZnVuY3Rpb24gZGVmYXVsdEZhY3RvcnkgKG9yaWdpbiwgb3B0cykge1xuICByZXR1cm4gbmV3IFBvb2wob3JpZ2luLCBvcHRzKVxufVxuXG5jbGFzcyBQcm94eUFnZW50IGV4dGVuZHMgRGlzcGF0Y2hlckJhc2Uge1xuICBjb25zdHJ1Y3RvciAob3B0cykge1xuICAgIHN1cGVyKG9wdHMpXG4gICAgdGhpc1trUHJveHldID0gYnVpbGRQcm94eU9wdGlvbnMob3B0cylcbiAgICB0aGlzW2tBZ2VudF0gPSBuZXcgQWdlbnQob3B0cylcbiAgICB0aGlzW2tJbnRlcmNlcHRvcnNdID0gb3B0cy5pbnRlcmNlcHRvcnMgJiYgb3B0cy5pbnRlcmNlcHRvcnMuUHJveHlBZ2VudCAmJiBBcnJheS5pc0FycmF5KG9wdHMuaW50ZXJjZXB0b3JzLlByb3h5QWdlbnQpXG4gICAgICA/IG9wdHMuaW50ZXJjZXB0b3JzLlByb3h5QWdlbnRcbiAgICAgIDogW11cblxuICAgIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG9wdHMgPSB7IHVyaTogb3B0cyB9XG4gICAgfVxuXG4gICAgaWYgKCFvcHRzIHx8ICFvcHRzLnVyaSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdQcm94eSBvcHRzLnVyaSBpcyBtYW5kYXRvcnknKVxuICAgIH1cblxuICAgIGNvbnN0IHsgY2xpZW50RmFjdG9yeSA9IGRlZmF1bHRGYWN0b3J5IH0gPSBvcHRzXG5cbiAgICBpZiAodHlwZW9mIGNsaWVudEZhY3RvcnkgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignUHJveHkgb3B0cy5jbGllbnRGYWN0b3J5IG11c3QgYmUgYSBmdW5jdGlvbi4nKVxuICAgIH1cblxuICAgIHRoaXNba1JlcXVlc3RUbHNdID0gb3B0cy5yZXF1ZXN0VGxzXG4gICAgdGhpc1trUHJveHlUbHNdID0gb3B0cy5wcm94eVRsc1xuICAgIHRoaXNba1Byb3h5SGVhZGVyc10gPSBvcHRzLmhlYWRlcnMgfHwge31cblxuICAgIGNvbnN0IHJlc29sdmVkVXJsID0gbmV3IFVSTChvcHRzLnVyaSlcbiAgICBjb25zdCB7IG9yaWdpbiwgcG9ydCwgaG9zdCwgdXNlcm5hbWUsIHBhc3N3b3JkIH0gPSByZXNvbHZlZFVybFxuXG4gICAgaWYgKG9wdHMuYXV0aCAmJiBvcHRzLnRva2VuKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ29wdHMuYXV0aCBjYW5ub3QgYmUgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIG9wdHMudG9rZW4nKVxuICAgIH0gZWxzZSBpZiAob3B0cy5hdXRoKSB7XG4gICAgICAvKiBAZGVwcmVjYXRlZCBpbiBmYXZvdXIgb2Ygb3B0cy50b2tlbiAqL1xuICAgICAgdGhpc1trUHJveHlIZWFkZXJzXVsncHJveHktYXV0aG9yaXphdGlvbiddID0gYEJhc2ljICR7b3B0cy5hdXRofWBcbiAgICB9IGVsc2UgaWYgKG9wdHMudG9rZW4pIHtcbiAgICAgIHRoaXNba1Byb3h5SGVhZGVyc11bJ3Byb3h5LWF1dGhvcml6YXRpb24nXSA9IG9wdHMudG9rZW5cbiAgICB9IGVsc2UgaWYgKHVzZXJuYW1lICYmIHBhc3N3b3JkKSB7XG4gICAgICB0aGlzW2tQcm94eUhlYWRlcnNdWydwcm94eS1hdXRob3JpemF0aW9uJ10gPSBgQmFzaWMgJHtCdWZmZXIuZnJvbShgJHtkZWNvZGVVUklDb21wb25lbnQodXNlcm5hbWUpfToke2RlY29kZVVSSUNvbXBvbmVudChwYXNzd29yZCl9YCkudG9TdHJpbmcoJ2Jhc2U2NCcpfWBcbiAgICB9XG5cbiAgICBjb25zdCBjb25uZWN0ID0gYnVpbGRDb25uZWN0b3IoeyAuLi5vcHRzLnByb3h5VGxzIH0pXG4gICAgdGhpc1trQ29ubmVjdEVuZHBvaW50XSA9IGJ1aWxkQ29ubmVjdG9yKHsgLi4ub3B0cy5yZXF1ZXN0VGxzIH0pXG4gICAgdGhpc1trQ2xpZW50XSA9IGNsaWVudEZhY3RvcnkocmVzb2x2ZWRVcmwsIHsgY29ubmVjdCB9KVxuICAgIHRoaXNba0FnZW50XSA9IG5ldyBBZ2VudCh7XG4gICAgICAuLi5vcHRzLFxuICAgICAgY29ubmVjdDogYXN5bmMgKG9wdHMsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGxldCByZXF1ZXN0ZWRIb3N0ID0gb3B0cy5ob3N0XG4gICAgICAgIGlmICghb3B0cy5wb3J0KSB7XG4gICAgICAgICAgcmVxdWVzdGVkSG9zdCArPSBgOiR7ZGVmYXVsdFByb3RvY29sUG9ydChvcHRzLnByb3RvY29sKX1gXG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB7IHNvY2tldCwgc3RhdHVzQ29kZSB9ID0gYXdhaXQgdGhpc1trQ2xpZW50XS5jb25uZWN0KHtcbiAgICAgICAgICAgIG9yaWdpbixcbiAgICAgICAgICAgIHBvcnQsXG4gICAgICAgICAgICBwYXRoOiByZXF1ZXN0ZWRIb3N0LFxuICAgICAgICAgICAgc2lnbmFsOiBvcHRzLnNpZ25hbCxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgLi4udGhpc1trUHJveHlIZWFkZXJzXSxcbiAgICAgICAgICAgICAgaG9zdFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICAgaWYgKHN0YXR1c0NvZGUgIT09IDIwMCkge1xuICAgICAgICAgICAgc29ja2V0Lm9uKCdlcnJvcicsICgpID0+IHt9KS5kZXN0cm95KClcbiAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKGBQcm94eSByZXNwb25zZSAoJHtzdGF0dXNDb2RlfSkgIT09IDIwMCB3aGVuIEhUVFAgVHVubmVsaW5nYCkpXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChvcHRzLnByb3RvY29sICE9PSAnaHR0cHM6Jykge1xuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgc29ja2V0KVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICAgIGxldCBzZXJ2ZXJuYW1lXG4gICAgICAgICAgaWYgKHRoaXNba1JlcXVlc3RUbHNdKSB7XG4gICAgICAgICAgICBzZXJ2ZXJuYW1lID0gdGhpc1trUmVxdWVzdFRsc10uc2VydmVybmFtZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXJ2ZXJuYW1lID0gb3B0cy5zZXJ2ZXJuYW1lXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXNba0Nvbm5lY3RFbmRwb2ludF0oeyAuLi5vcHRzLCBzZXJ2ZXJuYW1lLCBodHRwU29ja2V0OiBzb2NrZXQgfSwgY2FsbGJhY2spXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNhbGxiYWNrKGVycilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBkaXNwYXRjaCAob3B0cywgaGFuZGxlcikge1xuICAgIGNvbnN0IHsgaG9zdCB9ID0gbmV3IFVSTChvcHRzLm9yaWdpbilcbiAgICBjb25zdCBoZWFkZXJzID0gYnVpbGRIZWFkZXJzKG9wdHMuaGVhZGVycylcbiAgICB0aHJvd0lmUHJveHlBdXRoSXNTZW50KGhlYWRlcnMpXG4gICAgcmV0dXJuIHRoaXNba0FnZW50XS5kaXNwYXRjaChcbiAgICAgIHtcbiAgICAgICAgLi4ub3B0cyxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIC4uLmhlYWRlcnMsXG4gICAgICAgICAgaG9zdFxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgaGFuZGxlclxuICAgIClcbiAgfVxuXG4gIGFzeW5jIFtrQ2xvc2VdICgpIHtcbiAgICBhd2FpdCB0aGlzW2tBZ2VudF0uY2xvc2UoKVxuICAgIGF3YWl0IHRoaXNba0NsaWVudF0uY2xvc2UoKVxuICB9XG5cbiAgYXN5bmMgW2tEZXN0cm95XSAoKSB7XG4gICAgYXdhaXQgdGhpc1trQWdlbnRdLmRlc3Ryb3koKVxuICAgIGF3YWl0IHRoaXNba0NsaWVudF0uZGVzdHJveSgpXG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ1tdIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nPn0gaGVhZGVyc1xuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHN0cmluZz59XG4gKi9cbmZ1bmN0aW9uIGJ1aWxkSGVhZGVycyAoaGVhZGVycykge1xuICAvLyBXaGVuIHVzaW5nIHVuZGljaS5mZXRjaCwgdGhlIGhlYWRlcnMgbGlzdCBpcyBzdG9yZWRcbiAgLy8gYXMgYW4gYXJyYXkuXG4gIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSAqL1xuICAgIGNvbnN0IGhlYWRlcnNQYWlyID0ge31cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGVhZGVycy5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgaGVhZGVyc1BhaXJbaGVhZGVyc1tpXV0gPSBoZWFkZXJzW2kgKyAxXVxuICAgIH1cblxuICAgIHJldHVybiBoZWFkZXJzUGFpclxuICB9XG5cbiAgcmV0dXJuIGhlYWRlcnNcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIHN0cmluZz59IGhlYWRlcnNcbiAqXG4gKiBQcmV2aW91cyB2ZXJzaW9ucyBvZiBQcm94eUFnZW50IHN1Z2dlc3RzIHRoZSBQcm94eS1BdXRob3JpemF0aW9uIGluIHJlcXVlc3QgaGVhZGVyc1xuICogTmV2ZXJ0aGVsZXNzLCBpdCB3YXMgY2hhbmdlZCBhbmQgdG8gYXZvaWQgYSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5IGJ5IGVuZCB1c2Vyc1xuICogdGhpcyBjaGVjayB3YXMgY3JlYXRlZC5cbiAqIEl0IHNob3VsZCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24gZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnNcbiAqL1xuZnVuY3Rpb24gdGhyb3dJZlByb3h5QXV0aElzU2VudCAoaGVhZGVycykge1xuICBjb25zdCBleGlzdFByb3h5QXV0aCA9IGhlYWRlcnMgJiYgT2JqZWN0LmtleXMoaGVhZGVycylcbiAgICAuZmluZCgoa2V5KSA9PiBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3Byb3h5LWF1dGhvcml6YXRpb24nKVxuICBpZiAoZXhpc3RQcm94eUF1dGgpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ1Byb3h5LUF1dGhvcml6YXRpb24gc2hvdWxkIGJlIHNlbnQgaW4gUHJveHlBZ2VudCBjb25zdHJ1Y3RvcicpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBQcm94eUFnZW50XG4iLAogICAgImNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5cbmNvbnN0IHsga1JldHJ5SGFuZGxlckRlZmF1bHRSZXRyeSB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsgUmVxdWVzdFJldHJ5RXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHsgaXNEaXN0dXJiZWQsIHBhcnNlSGVhZGVycywgcGFyc2VSYW5nZUhlYWRlciB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcblxuZnVuY3Rpb24gY2FsY3VsYXRlUmV0cnlBZnRlckhlYWRlciAocmV0cnlBZnRlcikge1xuICBjb25zdCBjdXJyZW50ID0gRGF0ZS5ub3coKVxuICBjb25zdCBkaWZmID0gbmV3IERhdGUocmV0cnlBZnRlcikuZ2V0VGltZSgpIC0gY3VycmVudFxuXG4gIHJldHVybiBkaWZmXG59XG5cbmNsYXNzIFJldHJ5SGFuZGxlciB7XG4gIGNvbnN0cnVjdG9yIChvcHRzLCBoYW5kbGVycykge1xuICAgIGNvbnN0IHsgcmV0cnlPcHRpb25zLCAuLi5kaXNwYXRjaE9wdHMgfSA9IG9wdHNcbiAgICBjb25zdCB7XG4gICAgICAvLyBSZXRyeSBzY29wZWRcbiAgICAgIHJldHJ5OiByZXRyeUZuLFxuICAgICAgbWF4UmV0cmllcyxcbiAgICAgIG1heFRpbWVvdXQsXG4gICAgICBtaW5UaW1lb3V0LFxuICAgICAgdGltZW91dEZhY3RvcixcbiAgICAgIC8vIFJlc3BvbnNlIHNjb3BlZFxuICAgICAgbWV0aG9kcyxcbiAgICAgIGVycm9yQ29kZXMsXG4gICAgICByZXRyeUFmdGVyLFxuICAgICAgc3RhdHVzQ29kZXNcbiAgICB9ID0gcmV0cnlPcHRpb25zID8/IHt9XG5cbiAgICB0aGlzLmRpc3BhdGNoID0gaGFuZGxlcnMuZGlzcGF0Y2hcbiAgICB0aGlzLmhhbmRsZXIgPSBoYW5kbGVycy5oYW5kbGVyXG4gICAgdGhpcy5vcHRzID0gZGlzcGF0Y2hPcHRzXG4gICAgdGhpcy5hYm9ydCA9IG51bGxcbiAgICB0aGlzLmFib3J0ZWQgPSBmYWxzZVxuICAgIHRoaXMucmV0cnlPcHRzID0ge1xuICAgICAgcmV0cnk6IHJldHJ5Rm4gPz8gUmV0cnlIYW5kbGVyW2tSZXRyeUhhbmRsZXJEZWZhdWx0UmV0cnldLFxuICAgICAgcmV0cnlBZnRlcjogcmV0cnlBZnRlciA/PyB0cnVlLFxuICAgICAgbWF4VGltZW91dDogbWF4VGltZW91dCA/PyAzMCAqIDEwMDAsIC8vIDMwcyxcbiAgICAgIHRpbWVvdXQ6IG1pblRpbWVvdXQgPz8gNTAwLCAvLyAuNXNcbiAgICAgIHRpbWVvdXRGYWN0b3I6IHRpbWVvdXRGYWN0b3IgPz8gMixcbiAgICAgIG1heFJldHJpZXM6IG1heFJldHJpZXMgPz8gNSxcbiAgICAgIC8vIFdoYXQgZXJyb3JzIHdlIHNob3VsZCByZXRyeVxuICAgICAgbWV0aG9kczogbWV0aG9kcyA/PyBbJ0dFVCcsICdIRUFEJywgJ09QVElPTlMnLCAnUFVUJywgJ0RFTEVURScsICdUUkFDRSddLFxuICAgICAgLy8gSW5kaWNhdGVzIHdoaWNoIGVycm9ycyB0byByZXRyeVxuICAgICAgc3RhdHVzQ29kZXM6IHN0YXR1c0NvZGVzID8/IFs1MDAsIDUwMiwgNTAzLCA1MDQsIDQyOV0sXG4gICAgICAvLyBMaXN0IG9mIGVycm9ycyB0byByZXRyeVxuICAgICAgZXJyb3JDb2RlczogZXJyb3JDb2RlcyA/PyBbXG4gICAgICAgICdFQ09OTlJFU0VUJyxcbiAgICAgICAgJ0VDT05OUkVGVVNFRCcsXG4gICAgICAgICdFTk9URk9VTkQnLFxuICAgICAgICAnRU5FVERPV04nLFxuICAgICAgICAnRU5FVFVOUkVBQ0gnLFxuICAgICAgICAnRUhPU1RET1dOJyxcbiAgICAgICAgJ0VIT1NUVU5SRUFDSCcsXG4gICAgICAgICdFUElQRSdcbiAgICAgIF1cbiAgICB9XG5cbiAgICB0aGlzLnJldHJ5Q291bnQgPSAwXG4gICAgdGhpcy5zdGFydCA9IDBcbiAgICB0aGlzLmVuZCA9IG51bGxcbiAgICB0aGlzLmV0YWcgPSBudWxsXG4gICAgdGhpcy5yZXN1bWUgPSBudWxsXG5cbiAgICAvLyBIYW5kbGUgcG9zc2libGUgb25Db25uZWN0IGR1cGxpY2F0aW9uXG4gICAgdGhpcy5oYW5kbGVyLm9uQ29ubmVjdChyZWFzb24gPT4ge1xuICAgICAgdGhpcy5hYm9ydGVkID0gdHJ1ZVxuICAgICAgaWYgKHRoaXMuYWJvcnQpIHtcbiAgICAgICAgdGhpcy5hYm9ydChyZWFzb24pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlYXNvbiA9IHJlYXNvblxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBvblJlcXVlc3RTZW50ICgpIHtcbiAgICBpZiAodGhpcy5oYW5kbGVyLm9uUmVxdWVzdFNlbnQpIHtcbiAgICAgIHRoaXMuaGFuZGxlci5vblJlcXVlc3RTZW50KClcbiAgICB9XG4gIH1cblxuICBvblVwZ3JhZGUgKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHNvY2tldCkge1xuICAgIGlmICh0aGlzLmhhbmRsZXIub25VcGdyYWRlKSB7XG4gICAgICB0aGlzLmhhbmRsZXIub25VcGdyYWRlKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHNvY2tldClcbiAgICB9XG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0KSB7XG4gICAgaWYgKHRoaXMuYWJvcnRlZCkge1xuICAgICAgYWJvcnQodGhpcy5yZWFzb24pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIH1cbiAgfVxuXG4gIG9uQm9keVNlbnQgKGNodW5rKSB7XG4gICAgaWYgKHRoaXMuaGFuZGxlci5vbkJvZHlTZW50KSByZXR1cm4gdGhpcy5oYW5kbGVyLm9uQm9keVNlbnQoY2h1bmspXG4gIH1cblxuICBzdGF0aWMgW2tSZXRyeUhhbmRsZXJEZWZhdWx0UmV0cnldIChlcnIsIHsgc3RhdGUsIG9wdHMgfSwgY2IpIHtcbiAgICBjb25zdCB7IHN0YXR1c0NvZGUsIGNvZGUsIGhlYWRlcnMgfSA9IGVyclxuICAgIGNvbnN0IHsgbWV0aG9kLCByZXRyeU9wdGlvbnMgfSA9IG9wdHNcbiAgICBjb25zdCB7XG4gICAgICBtYXhSZXRyaWVzLFxuICAgICAgdGltZW91dCxcbiAgICAgIG1heFRpbWVvdXQsXG4gICAgICB0aW1lb3V0RmFjdG9yLFxuICAgICAgc3RhdHVzQ29kZXMsXG4gICAgICBlcnJvckNvZGVzLFxuICAgICAgbWV0aG9kc1xuICAgIH0gPSByZXRyeU9wdGlvbnNcbiAgICBsZXQgeyBjb3VudGVyLCBjdXJyZW50VGltZW91dCB9ID0gc3RhdGVcblxuICAgIGN1cnJlbnRUaW1lb3V0ID1cbiAgICAgIGN1cnJlbnRUaW1lb3V0ICE9IG51bGwgJiYgY3VycmVudFRpbWVvdXQgPiAwID8gY3VycmVudFRpbWVvdXQgOiB0aW1lb3V0XG5cbiAgICAvLyBBbnkgY29kZSB0aGF0IGlzIG5vdCBhIFVuZGljaSdzIG9yaWdpbmF0ZWQgYW5kIGFsbG93ZWQgdG8gcmV0cnlcbiAgICBpZiAoXG4gICAgICBjb2RlICYmXG4gICAgICBjb2RlICE9PSAnVU5EX0VSUl9SRVFfUkVUUlknICYmXG4gICAgICBjb2RlICE9PSAnVU5EX0VSUl9TT0NLRVQnICYmXG4gICAgICAhZXJyb3JDb2Rlcy5pbmNsdWRlcyhjb2RlKVxuICAgICkge1xuICAgICAgY2IoZXJyKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gSWYgYSBzZXQgb2YgbWV0aG9kIGFyZSBwcm92aWRlZCBhbmQgdGhlIGN1cnJlbnQgbWV0aG9kIGlzIG5vdCBpbiB0aGUgbGlzdFxuICAgIGlmIChBcnJheS5pc0FycmF5KG1ldGhvZHMpICYmICFtZXRob2RzLmluY2x1ZGVzKG1ldGhvZCkpIHtcbiAgICAgIGNiKGVycilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIElmIGEgc2V0IG9mIHN0YXR1cyBjb2RlIGFyZSBwcm92aWRlZCBhbmQgdGhlIGN1cnJlbnQgc3RhdHVzIGNvZGUgaXMgbm90IGluIHRoZSBsaXN0XG4gICAgaWYgKFxuICAgICAgc3RhdHVzQ29kZSAhPSBudWxsICYmXG4gICAgICBBcnJheS5pc0FycmF5KHN0YXR1c0NvZGVzKSAmJlxuICAgICAgIXN0YXR1c0NvZGVzLmluY2x1ZGVzKHN0YXR1c0NvZGUpXG4gICAgKSB7XG4gICAgICBjYihlcnIpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBJZiB3ZSByZWFjaGVkIHRoZSBtYXggbnVtYmVyIG9mIHJldHJpZXNcbiAgICBpZiAoY291bnRlciA+IG1heFJldHJpZXMpIHtcbiAgICAgIGNiKGVycilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGxldCByZXRyeUFmdGVySGVhZGVyID0gaGVhZGVycyAhPSBudWxsICYmIGhlYWRlcnNbJ3JldHJ5LWFmdGVyJ11cbiAgICBpZiAocmV0cnlBZnRlckhlYWRlcikge1xuICAgICAgcmV0cnlBZnRlckhlYWRlciA9IE51bWJlcihyZXRyeUFmdGVySGVhZGVyKVxuICAgICAgcmV0cnlBZnRlckhlYWRlciA9IGlzTmFOKHJldHJ5QWZ0ZXJIZWFkZXIpXG4gICAgICAgID8gY2FsY3VsYXRlUmV0cnlBZnRlckhlYWRlcihyZXRyeUFmdGVySGVhZGVyKVxuICAgICAgICA6IHJldHJ5QWZ0ZXJIZWFkZXIgKiAxZTMgLy8gUmV0cnktQWZ0ZXIgaXMgaW4gc2Vjb25kc1xuICAgIH1cblxuICAgIGNvbnN0IHJldHJ5VGltZW91dCA9XG4gICAgICByZXRyeUFmdGVySGVhZGVyID4gMFxuICAgICAgICA/IE1hdGgubWluKHJldHJ5QWZ0ZXJIZWFkZXIsIG1heFRpbWVvdXQpXG4gICAgICAgIDogTWF0aC5taW4oY3VycmVudFRpbWVvdXQgKiB0aW1lb3V0RmFjdG9yICoqIGNvdW50ZXIsIG1heFRpbWVvdXQpXG5cbiAgICBzdGF0ZS5jdXJyZW50VGltZW91dCA9IHJldHJ5VGltZW91dFxuXG4gICAgc2V0VGltZW91dCgoKSA9PiBjYihudWxsKSwgcmV0cnlUaW1lb3V0KVxuICB9XG5cbiAgb25IZWFkZXJzIChzdGF0dXNDb2RlLCByYXdIZWFkZXJzLCByZXN1bWUsIHN0YXR1c01lc3NhZ2UpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gcGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpXG5cbiAgICB0aGlzLnJldHJ5Q291bnQgKz0gMVxuXG4gICAgaWYgKHN0YXR1c0NvZGUgPj0gMzAwKSB7XG4gICAgICB0aGlzLmFib3J0KFxuICAgICAgICBuZXcgUmVxdWVzdFJldHJ5RXJyb3IoJ1JlcXVlc3QgZmFpbGVkJywgc3RhdHVzQ29kZSwge1xuICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgY291bnQ6IHRoaXMucmV0cnlDb3VudFxuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgLy8gQ2hlY2twb2ludCBmb3IgcmVzdW1lIGZyb20gd2hlcmUgd2UgbGVmdCBpdFxuICAgIGlmICh0aGlzLnJlc3VtZSAhPSBudWxsKSB7XG4gICAgICB0aGlzLnJlc3VtZSA9IG51bGxcblxuICAgICAgaWYgKHN0YXR1c0NvZGUgIT09IDIwNikge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuXG4gICAgICBjb25zdCBjb250ZW50UmFuZ2UgPSBwYXJzZVJhbmdlSGVhZGVyKGhlYWRlcnNbJ2NvbnRlbnQtcmFuZ2UnXSlcbiAgICAgIC8vIElmIG5vIGNvbnRlbnQgcmFuZ2VcbiAgICAgIGlmICghY29udGVudFJhbmdlKSB7XG4gICAgICAgIHRoaXMuYWJvcnQoXG4gICAgICAgICAgbmV3IFJlcXVlc3RSZXRyeUVycm9yKCdDb250ZW50LVJhbmdlIG1pc21hdGNoJywgc3RhdHVzQ29kZSwge1xuICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICAgIGNvdW50OiB0aGlzLnJldHJ5Q291bnRcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuXG4gICAgICAvLyBMZXQncyBzdGFydCB3aXRoIGEgd2VhayBldGFnIGNoZWNrXG4gICAgICBpZiAodGhpcy5ldGFnICE9IG51bGwgJiYgdGhpcy5ldGFnICE9PSBoZWFkZXJzLmV0YWcpIHtcbiAgICAgICAgdGhpcy5hYm9ydChcbiAgICAgICAgICBuZXcgUmVxdWVzdFJldHJ5RXJyb3IoJ0VUYWcgbWlzbWF0Y2gnLCBzdGF0dXNDb2RlLCB7XG4gICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgICAgY291bnQ6IHRoaXMucmV0cnlDb3VudFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgc3RhcnQsIHNpemUsIGVuZCA9IHNpemUgfSA9IGNvbnRlbnRSYW5nZVxuXG4gICAgICBhc3NlcnQodGhpcy5zdGFydCA9PT0gc3RhcnQsICdjb250ZW50LXJhbmdlIG1pc21hdGNoJylcbiAgICAgIGFzc2VydCh0aGlzLmVuZCA9PSBudWxsIHx8IHRoaXMuZW5kID09PSBlbmQsICdjb250ZW50LXJhbmdlIG1pc21hdGNoJylcblxuICAgICAgdGhpcy5yZXN1bWUgPSByZXN1bWVcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZW5kID09IG51bGwpIHtcbiAgICAgIGlmIChzdGF0dXNDb2RlID09PSAyMDYpIHtcbiAgICAgICAgLy8gRmlyc3QgdGltZSB3ZSByZWNlaXZlIDIwNlxuICAgICAgICBjb25zdCByYW5nZSA9IHBhcnNlUmFuZ2VIZWFkZXIoaGVhZGVyc1snY29udGVudC1yYW5nZSddKVxuXG4gICAgICAgIGlmIChyYW5nZSA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkhlYWRlcnMoXG4gICAgICAgICAgICBzdGF0dXNDb2RlLFxuICAgICAgICAgICAgcmF3SGVhZGVycyxcbiAgICAgICAgICAgIHJlc3VtZSxcbiAgICAgICAgICAgIHN0YXR1c01lc3NhZ2VcbiAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IHN0YXJ0LCBzaXplLCBlbmQgPSBzaXplIH0gPSByYW5nZVxuXG4gICAgICAgIGFzc2VydChcbiAgICAgICAgICBzdGFydCAhPSBudWxsICYmIE51bWJlci5pc0Zpbml0ZShzdGFydCkgJiYgdGhpcy5zdGFydCAhPT0gc3RhcnQsXG4gICAgICAgICAgJ2NvbnRlbnQtcmFuZ2UgbWlzbWF0Y2gnXG4gICAgICAgIClcbiAgICAgICAgYXNzZXJ0KE51bWJlci5pc0Zpbml0ZShzdGFydCkpXG4gICAgICAgIGFzc2VydChcbiAgICAgICAgICBlbmQgIT0gbnVsbCAmJiBOdW1iZXIuaXNGaW5pdGUoZW5kKSAmJiB0aGlzLmVuZCAhPT0gZW5kLFxuICAgICAgICAgICdpbnZhbGlkIGNvbnRlbnQtbGVuZ3RoJ1xuICAgICAgICApXG5cbiAgICAgICAgdGhpcy5zdGFydCA9IHN0YXJ0XG4gICAgICAgIHRoaXMuZW5kID0gZW5kXG4gICAgICB9XG5cbiAgICAgIC8vIFdlIG1ha2Ugb3VyIGJlc3QgdG8gY2hlY2twb2ludCB0aGUgYm9keSBmb3IgZnVydGhlciByYW5nZSBoZWFkZXJzXG4gICAgICBpZiAodGhpcy5lbmQgPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBjb250ZW50TGVuZ3RoID0gaGVhZGVyc1snY29udGVudC1sZW5ndGgnXVxuICAgICAgICB0aGlzLmVuZCA9IGNvbnRlbnRMZW5ndGggIT0gbnVsbCA/IE51bWJlcihjb250ZW50TGVuZ3RoKSA6IG51bGxcbiAgICAgIH1cblxuICAgICAgYXNzZXJ0KE51bWJlci5pc0Zpbml0ZSh0aGlzLnN0YXJ0KSlcbiAgICAgIGFzc2VydChcbiAgICAgICAgdGhpcy5lbmQgPT0gbnVsbCB8fCBOdW1iZXIuaXNGaW5pdGUodGhpcy5lbmQpLFxuICAgICAgICAnaW52YWxpZCBjb250ZW50LWxlbmd0aCdcbiAgICAgIClcblxuICAgICAgdGhpcy5yZXN1bWUgPSByZXN1bWVcbiAgICAgIHRoaXMuZXRhZyA9IGhlYWRlcnMuZXRhZyAhPSBudWxsID8gaGVhZGVycy5ldGFnIDogbnVsbFxuXG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uSGVhZGVycyhcbiAgICAgICAgc3RhdHVzQ29kZSxcbiAgICAgICAgcmF3SGVhZGVycyxcbiAgICAgICAgcmVzdW1lLFxuICAgICAgICBzdGF0dXNNZXNzYWdlXG4gICAgICApXG4gICAgfVxuXG4gICAgY29uc3QgZXJyID0gbmV3IFJlcXVlc3RSZXRyeUVycm9yKCdSZXF1ZXN0IGZhaWxlZCcsIHN0YXR1c0NvZGUsIHtcbiAgICAgIGhlYWRlcnMsXG4gICAgICBjb3VudDogdGhpcy5yZXRyeUNvdW50XG4gICAgfSlcblxuICAgIHRoaXMuYWJvcnQoZXJyKVxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBvbkRhdGEgKGNodW5rKSB7XG4gICAgdGhpcy5zdGFydCArPSBjaHVuay5sZW5ndGhcblxuICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25EYXRhKGNodW5rKVxuICB9XG5cbiAgb25Db21wbGV0ZSAocmF3VHJhaWxlcnMpIHtcbiAgICB0aGlzLnJldHJ5Q291bnQgPSAwXG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkNvbXBsZXRlKHJhd1RyYWlsZXJzKVxuICB9XG5cbiAgb25FcnJvciAoZXJyKSB7XG4gICAgaWYgKHRoaXMuYWJvcnRlZCB8fCBpc0Rpc3R1cmJlZCh0aGlzLm9wdHMuYm9keSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25FcnJvcihlcnIpXG4gICAgfVxuXG4gICAgdGhpcy5yZXRyeU9wdHMucmV0cnkoXG4gICAgICBlcnIsXG4gICAgICB7XG4gICAgICAgIHN0YXRlOiB7IGNvdW50ZXI6IHRoaXMucmV0cnlDb3VudCsrLCBjdXJyZW50VGltZW91dDogdGhpcy5yZXRyeUFmdGVyIH0sXG4gICAgICAgIG9wdHM6IHsgcmV0cnlPcHRpb25zOiB0aGlzLnJldHJ5T3B0cywgLi4udGhpcy5vcHRzIH1cbiAgICAgIH0sXG4gICAgICBvblJldHJ5LmJpbmQodGhpcylcbiAgICApXG5cbiAgICBmdW5jdGlvbiBvblJldHJ5IChlcnIpIHtcbiAgICAgIGlmIChlcnIgIT0gbnVsbCB8fCB0aGlzLmFib3J0ZWQgfHwgaXNEaXN0dXJiZWQodGhpcy5vcHRzLmJvZHkpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25FcnJvcihlcnIpXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnN0YXJ0ICE9PSAwKSB7XG4gICAgICAgIHRoaXMub3B0cyA9IHtcbiAgICAgICAgICAuLi50aGlzLm9wdHMsXG4gICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgLi4udGhpcy5vcHRzLmhlYWRlcnMsXG4gICAgICAgICAgICByYW5nZTogYGJ5dGVzPSR7dGhpcy5zdGFydH0tJHt0aGlzLmVuZCA/PyAnJ31gXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2godGhpcy5vcHRzLCB0aGlzKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlci5vbkVycm9yKGVycilcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBSZXRyeUhhbmRsZXJcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbi8vIFdlIGluY2x1ZGUgYSB2ZXJzaW9uIG51bWJlciBmb3IgdGhlIERpc3BhdGNoZXIgQVBJLiBJbiBjYXNlIG9mIGJyZWFraW5nIGNoYW5nZXMsXG4vLyB0aGlzIHZlcnNpb24gbnVtYmVyIG11c3QgYmUgaW5jcmVhc2VkIHRvIGF2b2lkIGNvbmZsaWN0cy5cbmNvbnN0IGdsb2JhbERpc3BhdGNoZXIgPSBTeW1ib2wuZm9yKCd1bmRpY2kuZ2xvYmFsRGlzcGF0Y2hlci4xJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IHJlcXVpcmUoJy4vY29yZS9lcnJvcnMnKVxuY29uc3QgQWdlbnQgPSByZXF1aXJlKCcuL2FnZW50JylcblxuaWYgKGdldEdsb2JhbERpc3BhdGNoZXIoKSA9PT0gdW5kZWZpbmVkKSB7XG4gIHNldEdsb2JhbERpc3BhdGNoZXIobmV3IEFnZW50KCkpXG59XG5cbmZ1bmN0aW9uIHNldEdsb2JhbERpc3BhdGNoZXIgKGFnZW50KSB7XG4gIGlmICghYWdlbnQgfHwgdHlwZW9mIGFnZW50LmRpc3BhdGNoICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdBcmd1bWVudCBhZ2VudCBtdXN0IGltcGxlbWVudCBBZ2VudCcpXG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGdsb2JhbFRoaXMsIGdsb2JhbERpc3BhdGNoZXIsIHtcbiAgICB2YWx1ZTogYWdlbnQsXG4gICAgd3JpdGFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiBmYWxzZVxuICB9KVxufVxuXG5mdW5jdGlvbiBnZXRHbG9iYWxEaXNwYXRjaGVyICgpIHtcbiAgcmV0dXJuIGdsb2JhbFRoaXNbZ2xvYmFsRGlzcGF0Y2hlcl1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldEdsb2JhbERpc3BhdGNoZXIsXG4gIGdldEdsb2JhbERpc3BhdGNoZXJcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0gY2xhc3MgRGVjb3JhdG9ySGFuZGxlciB7XG4gIGNvbnN0cnVjdG9yIChoYW5kbGVyKSB7XG4gICAgdGhpcy5oYW5kbGVyID0gaGFuZGxlclxuICB9XG5cbiAgb25Db25uZWN0ICguLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkNvbm5lY3QoLi4uYXJncylcbiAgfVxuXG4gIG9uRXJyb3IgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uRXJyb3IoLi4uYXJncylcbiAgfVxuXG4gIG9uVXBncmFkZSAoLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25VcGdyYWRlKC4uLmFyZ3MpXG4gIH1cblxuICBvbkhlYWRlcnMgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uSGVhZGVycyguLi5hcmdzKVxuICB9XG5cbiAgb25EYXRhICguLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkRhdGEoLi4uYXJncylcbiAgfVxuXG4gIG9uQ29tcGxldGUgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uQ29tcGxldGUoLi4uYXJncylcbiAgfVxuXG4gIG9uQm9keVNlbnQgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uQm9keVNlbnQoLi4uYXJncylcbiAgfVxufVxuIiwKICAgICIvLyBodHRwczovL2dpdGh1Yi5jb20vRXRoYW4tQXJyb3dvb2QvdW5kaWNpLWZldGNoXG5cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGtIZWFkZXJzTGlzdCwga0NvbnN0cnVjdCB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsga0d1YXJkIH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5IH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3Qge1xuICBtYWtlSXRlcmF0b3IsXG4gIGlzVmFsaWRIZWFkZXJOYW1lLFxuICBpc1ZhbGlkSGVhZGVyVmFsdWVcbn0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4vd2ViaWRsJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5cbmNvbnN0IGtIZWFkZXJzTWFwID0gU3ltYm9sKCdoZWFkZXJzIG1hcCcpXG5jb25zdCBrSGVhZGVyc1NvcnRlZE1hcCA9IFN5bWJvbCgnaGVhZGVycyBtYXAgc29ydGVkJylcblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gY29kZVxuICovXG5mdW5jdGlvbiBpc0hUVFBXaGl0ZVNwYWNlQ2hhckNvZGUgKGNvZGUpIHtcbiAgcmV0dXJuIGNvZGUgPT09IDB4MDBhIHx8IGNvZGUgPT09IDB4MDBkIHx8IGNvZGUgPT09IDB4MDA5IHx8IGNvZGUgPT09IDB4MDIwXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXItdmFsdWUtbm9ybWFsaXplXG4gKiBAcGFyYW0ge3N0cmluZ30gcG90ZW50aWFsVmFsdWVcbiAqL1xuZnVuY3Rpb24gaGVhZGVyVmFsdWVOb3JtYWxpemUgKHBvdGVudGlhbFZhbHVlKSB7XG4gIC8vICBUbyBub3JtYWxpemUgYSBieXRlIHNlcXVlbmNlIHBvdGVudGlhbFZhbHVlLCByZW1vdmVcbiAgLy8gIGFueSBsZWFkaW5nIGFuZCB0cmFpbGluZyBIVFRQIHdoaXRlc3BhY2UgYnl0ZXMgZnJvbVxuICAvLyAgcG90ZW50aWFsVmFsdWUuXG4gIGxldCBpID0gMDsgbGV0IGogPSBwb3RlbnRpYWxWYWx1ZS5sZW5ndGhcblxuICB3aGlsZSAoaiA+IGkgJiYgaXNIVFRQV2hpdGVTcGFjZUNoYXJDb2RlKHBvdGVudGlhbFZhbHVlLmNoYXJDb2RlQXQoaiAtIDEpKSkgLS1qXG4gIHdoaWxlIChqID4gaSAmJiBpc0hUVFBXaGl0ZVNwYWNlQ2hhckNvZGUocG90ZW50aWFsVmFsdWUuY2hhckNvZGVBdChpKSkpICsraVxuXG4gIHJldHVybiBpID09PSAwICYmIGogPT09IHBvdGVudGlhbFZhbHVlLmxlbmd0aCA/IHBvdGVudGlhbFZhbHVlIDogcG90ZW50aWFsVmFsdWUuc3Vic3RyaW5nKGksIGopXG59XG5cbmZ1bmN0aW9uIGZpbGwgKGhlYWRlcnMsIG9iamVjdCkge1xuICAvLyBUbyBmaWxsIGEgSGVhZGVycyBvYmplY3QgaGVhZGVycyB3aXRoIGEgZ2l2ZW4gb2JqZWN0IG9iamVjdCwgcnVuIHRoZXNlIHN0ZXBzOlxuXG4gIC8vIDEuIElmIG9iamVjdCBpcyBhIHNlcXVlbmNlLCB0aGVuIGZvciBlYWNoIGhlYWRlciBpbiBvYmplY3Q6XG4gIC8vIE5vdGU6IHdlYmlkbCBjb252ZXJzaW9uIHRvIGFycmF5IGhhcyBhbHJlYWR5IGJlZW4gZG9uZS5cbiAgaWYgKEFycmF5LmlzQXJyYXkob2JqZWN0KSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2JqZWN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICBjb25zdCBoZWFkZXIgPSBvYmplY3RbaV1cbiAgICAgIC8vIDEuIElmIGhlYWRlciBkb2VzIG5vdCBjb250YWluIGV4YWN0bHkgdHdvIGl0ZW1zLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgaWYgKGhlYWRlci5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgIGhlYWRlcjogJ0hlYWRlcnMgY29uc3RydWN0b3InLFxuICAgICAgICAgIG1lc3NhZ2U6IGBleHBlY3RlZCBuYW1lL3ZhbHVlIHBhaXIgdG8gYmUgbGVuZ3RoIDIsIGZvdW5kICR7aGVhZGVyLmxlbmd0aH0uYFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICAvLyAyLiBBcHBlbmQgKGhlYWRlcuKAmXMgZmlyc3QgaXRlbSwgaGVhZGVy4oCZcyBzZWNvbmQgaXRlbSkgdG8gaGVhZGVycy5cbiAgICAgIGFwcGVuZEhlYWRlcihoZWFkZXJzLCBoZWFkZXJbMF0sIGhlYWRlclsxXSlcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsKSB7XG4gICAgLy8gTm90ZTogbnVsbCBzaG91bGQgdGhyb3dcblxuICAgIC8vIDIuIE90aGVyd2lzZSwgb2JqZWN0IGlzIGEgcmVjb3JkLCB0aGVuIGZvciBlYWNoIGtleSDihpIgdmFsdWUgaW4gb2JqZWN0LFxuICAgIC8vICAgIGFwcGVuZCAoa2V5LCB2YWx1ZSkgdG8gaGVhZGVyc1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICBhcHBlbmRIZWFkZXIoaGVhZGVycywga2V5c1tpXSwgb2JqZWN0W2tleXNbaV1dKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmNvbnZlcnNpb25GYWlsZWQoe1xuICAgICAgcHJlZml4OiAnSGVhZGVycyBjb25zdHJ1Y3RvcicsXG4gICAgICBhcmd1bWVudDogJ0FyZ3VtZW50IDEnLFxuICAgICAgdHlwZXM6IFsnc2VxdWVuY2U8c2VxdWVuY2U8Qnl0ZVN0cmluZz4+JywgJ3JlY29yZDxCeXRlU3RyaW5nLCBCeXRlU3RyaW5nPiddXG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtaGVhZGVycy1hcHBlbmRcbiAqL1xuZnVuY3Rpb24gYXBwZW5kSGVhZGVyIChoZWFkZXJzLCBuYW1lLCB2YWx1ZSkge1xuICAvLyAxLiBOb3JtYWxpemUgdmFsdWUuXG4gIHZhbHVlID0gaGVhZGVyVmFsdWVOb3JtYWxpemUodmFsdWUpXG5cbiAgLy8gMi4gSWYgbmFtZSBpcyBub3QgYSBoZWFkZXIgbmFtZSBvciB2YWx1ZSBpcyBub3QgYVxuICAvLyAgICBoZWFkZXIgdmFsdWUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIGlmICghaXNWYWxpZEhlYWRlck5hbWUobmFtZSkpIHtcbiAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmludmFsaWRBcmd1bWVudCh7XG4gICAgICBwcmVmaXg6ICdIZWFkZXJzLmFwcGVuZCcsXG4gICAgICB2YWx1ZTogbmFtZSxcbiAgICAgIHR5cGU6ICdoZWFkZXIgbmFtZSdcbiAgICB9KVxuICB9IGVsc2UgaWYgKCFpc1ZhbGlkSGVhZGVyVmFsdWUodmFsdWUpKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5pbnZhbGlkQXJndW1lbnQoe1xuICAgICAgcHJlZml4OiAnSGVhZGVycy5hcHBlbmQnLFxuICAgICAgdmFsdWUsXG4gICAgICB0eXBlOiAnaGVhZGVyIHZhbHVlJ1xuICAgIH0pXG4gIH1cblxuICAvLyAzLiBJZiBoZWFkZXJz4oCZcyBndWFyZCBpcyBcImltbXV0YWJsZVwiLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAvLyA0LiBPdGhlcndpc2UsIGlmIGhlYWRlcnPigJlzIGd1YXJkIGlzIFwicmVxdWVzdFwiIGFuZCBuYW1lIGlzIGFcbiAgLy8gICAgZm9yYmlkZGVuIGhlYWRlciBuYW1lLCByZXR1cm4uXG4gIC8vIE5vdGU6IHVuZGljaSBkb2VzIG5vdCBpbXBsZW1lbnQgZm9yYmlkZGVuIGhlYWRlciBuYW1lc1xuICBpZiAoaGVhZGVyc1trR3VhcmRdID09PSAnaW1tdXRhYmxlJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ltbXV0YWJsZScpXG4gIH0gZWxzZSBpZiAoaGVhZGVyc1trR3VhcmRdID09PSAncmVxdWVzdC1uby1jb3JzJykge1xuICAgIC8vIDUuIE90aGVyd2lzZSwgaWYgaGVhZGVyc+KAmXMgZ3VhcmQgaXMgXCJyZXF1ZXN0LW5vLWNvcnNcIjpcbiAgICAvLyBUT0RPXG4gIH1cblxuICAvLyA2LiBPdGhlcndpc2UsIGlmIGhlYWRlcnPigJlzIGd1YXJkIGlzIFwicmVzcG9uc2VcIiBhbmQgbmFtZSBpcyBhXG4gIC8vICAgIGZvcmJpZGRlbiByZXNwb25zZS1oZWFkZXIgbmFtZSwgcmV0dXJuLlxuXG4gIC8vIDcuIEFwcGVuZCAobmFtZSwgdmFsdWUpIHRvIGhlYWRlcnPigJlzIGhlYWRlciBsaXN0LlxuICByZXR1cm4gaGVhZGVyc1trSGVhZGVyc0xpc3RdLmFwcGVuZChuYW1lLCB2YWx1ZSlcblxuICAvLyA4LiBJZiBoZWFkZXJz4oCZcyBndWFyZCBpcyBcInJlcXVlc3Qtbm8tY29yc1wiLCB0aGVuIHJlbW92ZVxuICAvLyAgICBwcml2aWxlZ2VkIG5vLUNPUlMgcmVxdWVzdCBoZWFkZXJzIGZyb20gaGVhZGVyc1xufVxuXG5jbGFzcyBIZWFkZXJzTGlzdCB7XG4gIC8qKiBAdHlwZSB7W3N0cmluZywgc3RyaW5nXVtdfG51bGx9ICovXG4gIGNvb2tpZXMgPSBudWxsXG5cbiAgY29uc3RydWN0b3IgKGluaXQpIHtcbiAgICBpZiAoaW5pdCBpbnN0YW5jZW9mIEhlYWRlcnNMaXN0KSB7XG4gICAgICB0aGlzW2tIZWFkZXJzTWFwXSA9IG5ldyBNYXAoaW5pdFtrSGVhZGVyc01hcF0pXG4gICAgICB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXSA9IGluaXRba0hlYWRlcnNTb3J0ZWRNYXBdXG4gICAgICB0aGlzLmNvb2tpZXMgPSBpbml0LmNvb2tpZXMgPT09IG51bGwgPyBudWxsIDogWy4uLmluaXQuY29va2llc11cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trSGVhZGVyc01hcF0gPSBuZXcgTWFwKGluaXQpXG4gICAgICB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXSA9IG51bGxcbiAgICB9XG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaGVhZGVyLWxpc3QtY29udGFpbnNcbiAgY29udGFpbnMgKG5hbWUpIHtcbiAgICAvLyBBIGhlYWRlciBsaXN0IGxpc3QgY29udGFpbnMgYSBoZWFkZXIgbmFtZSBuYW1lIGlmIGxpc3RcbiAgICAvLyBjb250YWlucyBhIGhlYWRlciB3aG9zZSBuYW1lIGlzIGEgYnl0ZS1jYXNlLWluc2Vuc2l0aXZlXG4gICAgLy8gbWF0Y2ggZm9yIG5hbWUuXG4gICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKVxuXG4gICAgcmV0dXJuIHRoaXNba0hlYWRlcnNNYXBdLmhhcyhuYW1lKVxuICB9XG5cbiAgY2xlYXIgKCkge1xuICAgIHRoaXNba0hlYWRlcnNNYXBdLmNsZWFyKClcbiAgICB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXSA9IG51bGxcbiAgICB0aGlzLmNvb2tpZXMgPSBudWxsXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXItbGlzdC1hcHBlbmRcbiAgYXBwZW5kIChuYW1lLCB2YWx1ZSkge1xuICAgIHRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdID0gbnVsbFxuXG4gICAgLy8gMS4gSWYgbGlzdCBjb250YWlucyBuYW1lLCB0aGVuIHNldCBuYW1lIHRvIHRoZSBmaXJzdCBzdWNoXG4gICAgLy8gICAgaGVhZGVy4oCZcyBuYW1lLlxuICAgIGNvbnN0IGxvd2VyY2FzZU5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKClcbiAgICBjb25zdCBleGlzdHMgPSB0aGlzW2tIZWFkZXJzTWFwXS5nZXQobG93ZXJjYXNlTmFtZSlcblxuICAgIC8vIDIuIEFwcGVuZCAobmFtZSwgdmFsdWUpIHRvIGxpc3QuXG4gICAgaWYgKGV4aXN0cykge1xuICAgICAgY29uc3QgZGVsaW1pdGVyID0gbG93ZXJjYXNlTmFtZSA9PT0gJ2Nvb2tpZScgPyAnOyAnIDogJywgJ1xuICAgICAgdGhpc1trSGVhZGVyc01hcF0uc2V0KGxvd2VyY2FzZU5hbWUsIHtcbiAgICAgICAgbmFtZTogZXhpc3RzLm5hbWUsXG4gICAgICAgIHZhbHVlOiBgJHtleGlzdHMudmFsdWV9JHtkZWxpbWl0ZXJ9JHt2YWx1ZX1gXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tIZWFkZXJzTWFwXS5zZXQobG93ZXJjYXNlTmFtZSwgeyBuYW1lLCB2YWx1ZSB9KVxuICAgIH1cblxuICAgIGlmIChsb3dlcmNhc2VOYW1lID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgIHRoaXMuY29va2llcyA/Pz0gW11cbiAgICAgIHRoaXMuY29va2llcy5wdXNoKHZhbHVlKVxuICAgIH1cbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWhlYWRlci1saXN0LXNldFxuICBzZXQgKG5hbWUsIHZhbHVlKSB7XG4gICAgdGhpc1trSGVhZGVyc1NvcnRlZE1hcF0gPSBudWxsXG4gICAgY29uc3QgbG93ZXJjYXNlTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKVxuXG4gICAgaWYgKGxvd2VyY2FzZU5hbWUgPT09ICdzZXQtY29va2llJykge1xuICAgICAgdGhpcy5jb29raWVzID0gW3ZhbHVlXVxuICAgIH1cblxuICAgIC8vIDEuIElmIGxpc3QgY29udGFpbnMgbmFtZSwgdGhlbiBzZXQgdGhlIHZhbHVlIG9mXG4gICAgLy8gICAgdGhlIGZpcnN0IHN1Y2ggaGVhZGVyIHRvIHZhbHVlIGFuZCByZW1vdmUgdGhlXG4gICAgLy8gICAgb3RoZXJzLlxuICAgIC8vIDIuIE90aGVyd2lzZSwgYXBwZW5kIGhlYWRlciAobmFtZSwgdmFsdWUpIHRvIGxpc3QuXG4gICAgdGhpc1trSGVhZGVyc01hcF0uc2V0KGxvd2VyY2FzZU5hbWUsIHsgbmFtZSwgdmFsdWUgfSlcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWhlYWRlci1saXN0LWRlbGV0ZVxuICBkZWxldGUgKG5hbWUpIHtcbiAgICB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXSA9IG51bGxcblxuICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKClcblxuICAgIGlmIChuYW1lID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgIHRoaXMuY29va2llcyA9IG51bGxcbiAgICB9XG5cbiAgICB0aGlzW2tIZWFkZXJzTWFwXS5kZWxldGUobmFtZSlcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWhlYWRlci1saXN0LWdldFxuICBnZXQgKG5hbWUpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXNba0hlYWRlcnNNYXBdLmdldChuYW1lLnRvTG93ZXJDYXNlKCkpXG5cbiAgICAvLyAxLiBJZiBsaXN0IGRvZXMgbm90IGNvbnRhaW4gbmFtZSwgdGhlbiByZXR1cm4gbnVsbC5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIHZhbHVlcyBvZiBhbGwgaGVhZGVycyBpbiBsaXN0IHdob3NlIG5hbWVcbiAgICAvLyAgICBpcyBhIGJ5dGUtY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBmb3IgbmFtZSxcbiAgICAvLyAgICBzZXBhcmF0ZWQgZnJvbSBlYWNoIG90aGVyIGJ5IDB4MkMgMHgyMCwgaW4gb3JkZXIuXG4gICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyBudWxsIDogdmFsdWUudmFsdWVcbiAgfVxuXG4gICogW1N5bWJvbC5pdGVyYXRvcl0gKCkge1xuICAgIC8vIHVzZSB0aGUgbG93ZXJjYXNlZCBuYW1lXG4gICAgZm9yIChjb25zdCBbbmFtZSwgeyB2YWx1ZSB9XSBvZiB0aGlzW2tIZWFkZXJzTWFwXSkge1xuICAgICAgeWllbGQgW25hbWUsIHZhbHVlXVxuICAgIH1cbiAgfVxuXG4gIGdldCBlbnRyaWVzICgpIHtcbiAgICBjb25zdCBoZWFkZXJzID0ge31cblxuICAgIGlmICh0aGlzW2tIZWFkZXJzTWFwXS5zaXplKSB7XG4gICAgICBmb3IgKGNvbnN0IHsgbmFtZSwgdmFsdWUgfSBvZiB0aGlzW2tIZWFkZXJzTWFwXS52YWx1ZXMoKSkge1xuICAgICAgICBoZWFkZXJzW25hbWVdID0gdmFsdWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaGVhZGVyc1xuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNoZWFkZXJzLWNsYXNzXG5jbGFzcyBIZWFkZXJzIHtcbiAgY29uc3RydWN0b3IgKGluaXQgPSB1bmRlZmluZWQpIHtcbiAgICBpZiAoaW5pdCA9PT0ga0NvbnN0cnVjdCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHRoaXNba0hlYWRlcnNMaXN0XSA9IG5ldyBIZWFkZXJzTGlzdCgpXG5cbiAgICAvLyBUaGUgbmV3IEhlYWRlcnMoaW5pdCkgY29uc3RydWN0b3Igc3RlcHMgYXJlOlxuXG4gICAgLy8gMS4gU2V0IHRoaXPigJlzIGd1YXJkIHRvIFwibm9uZVwiLlxuICAgIHRoaXNba0d1YXJkXSA9ICdub25lJ1xuXG4gICAgLy8gMi4gSWYgaW5pdCBpcyBnaXZlbiwgdGhlbiBmaWxsIHRoaXMgd2l0aCBpbml0LlxuICAgIGlmIChpbml0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGluaXQgPSB3ZWJpZGwuY29udmVydGVycy5IZWFkZXJzSW5pdChpbml0KVxuICAgICAgZmlsbCh0aGlzLCBpbml0KVxuICAgIH1cbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20taGVhZGVycy1hcHBlbmRcbiAgYXBwZW5kIChuYW1lLCB2YWx1ZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnSGVhZGVycy5hcHBlbmQnIH0pXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyhuYW1lKVxuICAgIHZhbHVlID0gd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyh2YWx1ZSlcblxuICAgIHJldHVybiBhcHBlbmRIZWFkZXIodGhpcywgbmFtZSwgdmFsdWUpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWhlYWRlcnMtZGVsZXRlXG4gIGRlbGV0ZSAobmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnSGVhZGVycy5kZWxldGUnIH0pXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyhuYW1lKVxuXG4gICAgLy8gMS4gSWYgbmFtZSBpcyBub3QgYSBoZWFkZXIgbmFtZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoIWlzVmFsaWRIZWFkZXJOYW1lKG5hbWUpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmludmFsaWRBcmd1bWVudCh7XG4gICAgICAgIHByZWZpeDogJ0hlYWRlcnMuZGVsZXRlJyxcbiAgICAgICAgdmFsdWU6IG5hbWUsXG4gICAgICAgIHR5cGU6ICdoZWFkZXIgbmFtZSdcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gSWYgdGhpc+KAmXMgZ3VhcmQgaXMgXCJpbW11dGFibGVcIiwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAvLyAzLiBPdGhlcndpc2UsIGlmIHRoaXPigJlzIGd1YXJkIGlzIFwicmVxdWVzdFwiIGFuZCBuYW1lIGlzIGFcbiAgICAvLyAgICBmb3JiaWRkZW4gaGVhZGVyIG5hbWUsIHJldHVybi5cbiAgICAvLyA0LiBPdGhlcndpc2UsIGlmIHRoaXPigJlzIGd1YXJkIGlzIFwicmVxdWVzdC1uby1jb3JzXCIsIG5hbWVcbiAgICAvLyAgICBpcyBub3QgYSBuby1DT1JTLXNhZmVsaXN0ZWQgcmVxdWVzdC1oZWFkZXIgbmFtZSwgYW5kXG4gICAgLy8gICAgbmFtZSBpcyBub3QgYSBwcml2aWxlZ2VkIG5vLUNPUlMgcmVxdWVzdC1oZWFkZXIgbmFtZSxcbiAgICAvLyAgICByZXR1cm4uXG4gICAgLy8gNS4gT3RoZXJ3aXNlLCBpZiB0aGlz4oCZcyBndWFyZCBpcyBcInJlc3BvbnNlXCIgYW5kIG5hbWUgaXNcbiAgICAvLyAgICBhIGZvcmJpZGRlbiByZXNwb25zZS1oZWFkZXIgbmFtZSwgcmV0dXJuLlxuICAgIC8vIE5vdGU6IHVuZGljaSBkb2VzIG5vdCBpbXBsZW1lbnQgZm9yYmlkZGVuIGhlYWRlciBuYW1lc1xuICAgIGlmICh0aGlzW2tHdWFyZF0gPT09ICdpbW11dGFibGUnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbW11dGFibGUnKVxuICAgIH0gZWxzZSBpZiAodGhpc1trR3VhcmRdID09PSAncmVxdWVzdC1uby1jb3JzJykge1xuICAgICAgLy8gVE9ET1xuICAgIH1cblxuICAgIC8vIDYuIElmIHRoaXPigJlzIGhlYWRlciBsaXN0IGRvZXMgbm90IGNvbnRhaW4gbmFtZSwgdGhlblxuICAgIC8vICAgIHJldHVybi5cbiAgICBpZiAoIXRoaXNba0hlYWRlcnNMaXN0XS5jb250YWlucyhuYW1lKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gNy4gRGVsZXRlIG5hbWUgZnJvbSB0aGlz4oCZcyBoZWFkZXIgbGlzdC5cbiAgICAvLyA4LiBJZiB0aGlz4oCZcyBndWFyZCBpcyBcInJlcXVlc3Qtbm8tY29yc1wiLCB0aGVuIHJlbW92ZVxuICAgIC8vICAgIHByaXZpbGVnZWQgbm8tQ09SUyByZXF1ZXN0IGhlYWRlcnMgZnJvbSB0aGlzLlxuICAgIHRoaXNba0hlYWRlcnNMaXN0XS5kZWxldGUobmFtZSlcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20taGVhZGVycy1nZXRcbiAgZ2V0IChuYW1lKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdIZWFkZXJzLmdldCcgfSlcblxuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nKG5hbWUpXG5cbiAgICAvLyAxLiBJZiBuYW1lIGlzIG5vdCBhIGhlYWRlciBuYW1lLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICghaXNWYWxpZEhlYWRlck5hbWUobmFtZSkpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuaW52YWxpZEFyZ3VtZW50KHtcbiAgICAgICAgcHJlZml4OiAnSGVhZGVycy5nZXQnLFxuICAgICAgICB2YWx1ZTogbmFtZSxcbiAgICAgICAgdHlwZTogJ2hlYWRlciBuYW1lJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBnZXR0aW5nIG5hbWUgZnJvbSB0aGlz4oCZcyBoZWFkZXJcbiAgICAvLyAgICBsaXN0LlxuICAgIHJldHVybiB0aGlzW2tIZWFkZXJzTGlzdF0uZ2V0KG5hbWUpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWhlYWRlcnMtaGFzXG4gIGhhcyAobmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnSGVhZGVycy5oYXMnIH0pXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyhuYW1lKVxuXG4gICAgLy8gMS4gSWYgbmFtZSBpcyBub3QgYSBoZWFkZXIgbmFtZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoIWlzVmFsaWRIZWFkZXJOYW1lKG5hbWUpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmludmFsaWRBcmd1bWVudCh7XG4gICAgICAgIHByZWZpeDogJ0hlYWRlcnMuaGFzJyxcbiAgICAgICAgdmFsdWU6IG5hbWUsXG4gICAgICAgIHR5cGU6ICdoZWFkZXIgbmFtZSdcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gUmV0dXJuIHRydWUgaWYgdGhpc+KAmXMgaGVhZGVyIGxpc3QgY29udGFpbnMgbmFtZTtcbiAgICAvLyAgICBvdGhlcndpc2UgZmFsc2UuXG4gICAgcmV0dXJuIHRoaXNba0hlYWRlcnNMaXN0XS5jb250YWlucyhuYW1lKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1oZWFkZXJzLXNldFxuICBzZXQgKG5hbWUsIHZhbHVlKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMiwgeyBoZWFkZXI6ICdIZWFkZXJzLnNldCcgfSlcblxuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nKG5hbWUpXG4gICAgdmFsdWUgPSB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nKHZhbHVlKVxuXG4gICAgLy8gMS4gTm9ybWFsaXplIHZhbHVlLlxuICAgIHZhbHVlID0gaGVhZGVyVmFsdWVOb3JtYWxpemUodmFsdWUpXG5cbiAgICAvLyAyLiBJZiBuYW1lIGlzIG5vdCBhIGhlYWRlciBuYW1lIG9yIHZhbHVlIGlzIG5vdCBhXG4gICAgLy8gICAgaGVhZGVyIHZhbHVlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICghaXNWYWxpZEhlYWRlck5hbWUobmFtZSkpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuaW52YWxpZEFyZ3VtZW50KHtcbiAgICAgICAgcHJlZml4OiAnSGVhZGVycy5zZXQnLFxuICAgICAgICB2YWx1ZTogbmFtZSxcbiAgICAgICAgdHlwZTogJ2hlYWRlciBuYW1lJ1xuICAgICAgfSlcbiAgICB9IGVsc2UgaWYgKCFpc1ZhbGlkSGVhZGVyVmFsdWUodmFsdWUpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmludmFsaWRBcmd1bWVudCh7XG4gICAgICAgIHByZWZpeDogJ0hlYWRlcnMuc2V0JyxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHR5cGU6ICdoZWFkZXIgdmFsdWUnXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDMuIElmIHRoaXPigJlzIGd1YXJkIGlzIFwiaW1tdXRhYmxlXCIsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgLy8gNC4gT3RoZXJ3aXNlLCBpZiB0aGlz4oCZcyBndWFyZCBpcyBcInJlcXVlc3RcIiBhbmQgbmFtZSBpcyBhXG4gICAgLy8gICAgZm9yYmlkZGVuIGhlYWRlciBuYW1lLCByZXR1cm4uXG4gICAgLy8gNS4gT3RoZXJ3aXNlLCBpZiB0aGlz4oCZcyBndWFyZCBpcyBcInJlcXVlc3Qtbm8tY29yc1wiIGFuZFxuICAgIC8vICAgIG5hbWUvdmFsdWUgaXMgbm90IGEgbm8tQ09SUy1zYWZlbGlzdGVkIHJlcXVlc3QtaGVhZGVyLFxuICAgIC8vICAgIHJldHVybi5cbiAgICAvLyA2LiBPdGhlcndpc2UsIGlmIHRoaXPigJlzIGd1YXJkIGlzIFwicmVzcG9uc2VcIiBhbmQgbmFtZSBpcyBhXG4gICAgLy8gICAgZm9yYmlkZGVuIHJlc3BvbnNlLWhlYWRlciBuYW1lLCByZXR1cm4uXG4gICAgLy8gTm90ZTogdW5kaWNpIGRvZXMgbm90IGltcGxlbWVudCBmb3JiaWRkZW4gaGVhZGVyIG5hbWVzXG4gICAgaWYgKHRoaXNba0d1YXJkXSA9PT0gJ2ltbXV0YWJsZScpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ltbXV0YWJsZScpXG4gICAgfSBlbHNlIGlmICh0aGlzW2tHdWFyZF0gPT09ICdyZXF1ZXN0LW5vLWNvcnMnKSB7XG4gICAgICAvLyBUT0RPXG4gICAgfVxuXG4gICAgLy8gNy4gU2V0IChuYW1lLCB2YWx1ZSkgaW4gdGhpc+KAmXMgaGVhZGVyIGxpc3QuXG4gICAgLy8gOC4gSWYgdGhpc+KAmXMgZ3VhcmQgaXMgXCJyZXF1ZXN0LW5vLWNvcnNcIiwgdGhlbiByZW1vdmVcbiAgICAvLyAgICBwcml2aWxlZ2VkIG5vLUNPUlMgcmVxdWVzdCBoZWFkZXJzIGZyb20gdGhpc1xuICAgIHRoaXNba0hlYWRlcnNMaXN0XS5zZXQobmFtZSwgdmFsdWUpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWhlYWRlcnMtZ2V0c2V0Y29va2llXG4gIGdldFNldENvb2tpZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIC8vIDEuIElmIHRoaXPigJlzIGhlYWRlciBsaXN0IGRvZXMgbm90IGNvbnRhaW4gYFNldC1Db29raWVgLCB0aGVuIHJldHVybiDCqyDCuy5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIHZhbHVlcyBvZiBhbGwgaGVhZGVycyBpbiB0aGlz4oCZcyBoZWFkZXIgbGlzdCB3aG9zZSBuYW1lIGlzXG4gICAgLy8gICAgYSBieXRlLWNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yIGBTZXQtQ29va2llYCwgaW4gb3JkZXIuXG5cbiAgICBjb25zdCBsaXN0ID0gdGhpc1trSGVhZGVyc0xpc3RdLmNvb2tpZXNcblxuICAgIGlmIChsaXN0KSB7XG4gICAgICByZXR1cm4gWy4uLmxpc3RdXG4gICAgfVxuXG4gICAgcmV0dXJuIFtdXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXItbGlzdC1zb3J0LWFuZC1jb21iaW5lXG4gIGdldCBba0hlYWRlcnNTb3J0ZWRNYXBdICgpIHtcbiAgICBpZiAodGhpc1trSGVhZGVyc0xpc3RdW2tIZWFkZXJzU29ydGVkTWFwXSkge1xuICAgICAgcmV0dXJuIHRoaXNba0hlYWRlcnNMaXN0XVtrSGVhZGVyc1NvcnRlZE1hcF1cbiAgICB9XG5cbiAgICAvLyAxLiBMZXQgaGVhZGVycyBiZSBhbiBlbXB0eSBsaXN0IG9mIGhlYWRlcnMgd2l0aCB0aGUga2V5IGJlaW5nIHRoZSBuYW1lXG4gICAgLy8gICAgYW5kIHZhbHVlIHRoZSB2YWx1ZS5cbiAgICBjb25zdCBoZWFkZXJzID0gW11cblxuICAgIC8vIDIuIExldCBuYW1lcyBiZSB0aGUgcmVzdWx0IG9mIGNvbnZlcnQgaGVhZGVyIG5hbWVzIHRvIGEgc29ydGVkLWxvd2VyY2FzZVxuICAgIC8vICAgIHNldCB3aXRoIGFsbCB0aGUgbmFtZXMgb2YgdGhlIGhlYWRlcnMgaW4gbGlzdC5cbiAgICBjb25zdCBuYW1lcyA9IFsuLi50aGlzW2tIZWFkZXJzTGlzdF1dLnNvcnQoKGEsIGIpID0+IGFbMF0gPCBiWzBdID8gLTEgOiAxKVxuICAgIGNvbnN0IGNvb2tpZXMgPSB0aGlzW2tIZWFkZXJzTGlzdF0uY29va2llc1xuXG4gICAgLy8gMy4gRm9yIGVhY2ggbmFtZSBvZiBuYW1lczpcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgKytpKSB7XG4gICAgICBjb25zdCBbbmFtZSwgdmFsdWVdID0gbmFtZXNbaV1cbiAgICAgIC8vIDEuIElmIG5hbWUgaXMgYHNldC1jb29raWVgLCB0aGVuOlxuICAgICAgaWYgKG5hbWUgPT09ICdzZXQtY29va2llJykge1xuICAgICAgICAvLyAxLiBMZXQgdmFsdWVzIGJlIGEgbGlzdCBvZiBhbGwgdmFsdWVzIG9mIGhlYWRlcnMgaW4gbGlzdCB3aG9zZSBuYW1lXG4gICAgICAgIC8vICAgIGlzIGEgYnl0ZS1jYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvciBuYW1lLCBpbiBvcmRlci5cblxuICAgICAgICAvLyAyLiBGb3IgZWFjaCB2YWx1ZSBvZiB2YWx1ZXM6XG4gICAgICAgIC8vIDEuIEFwcGVuZCAobmFtZSwgdmFsdWUpIHRvIGhlYWRlcnMuXG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29va2llcy5sZW5ndGg7ICsraikge1xuICAgICAgICAgIGhlYWRlcnMucHVzaChbbmFtZSwgY29va2llc1tqXV0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIDIuIE90aGVyd2lzZTpcblxuICAgICAgICAvLyAxLiBMZXQgdmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBnZXR0aW5nIG5hbWUgZnJvbSBsaXN0LlxuXG4gICAgICAgIC8vIDIuIEFzc2VydDogdmFsdWUgaXMgbm9uLW51bGwuXG4gICAgICAgIGFzc2VydCh2YWx1ZSAhPT0gbnVsbClcblxuICAgICAgICAvLyAzLiBBcHBlbmQgKG5hbWUsIHZhbHVlKSB0byBoZWFkZXJzLlxuICAgICAgICBoZWFkZXJzLnB1c2goW25hbWUsIHZhbHVlXSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzW2tIZWFkZXJzTGlzdF1ba0hlYWRlcnNTb3J0ZWRNYXBdID0gaGVhZGVyc1xuXG4gICAgLy8gNC4gUmV0dXJuIGhlYWRlcnMuXG4gICAgcmV0dXJuIGhlYWRlcnNcbiAgfVxuXG4gIGtleXMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICBpZiAodGhpc1trR3VhcmRdID09PSAnaW1tdXRhYmxlJykge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXVxuICAgICAgcmV0dXJuIG1ha2VJdGVyYXRvcigoKSA9PiB2YWx1ZSwgJ0hlYWRlcnMnLFxuICAgICAgICAna2V5JylcbiAgICB9XG5cbiAgICByZXR1cm4gbWFrZUl0ZXJhdG9yKFxuICAgICAgKCkgPT4gWy4uLnRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdLnZhbHVlcygpXSxcbiAgICAgICdIZWFkZXJzJyxcbiAgICAgICdrZXknXG4gICAgKVxuICB9XG5cbiAgdmFsdWVzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBIZWFkZXJzKVxuXG4gICAgaWYgKHRoaXNba0d1YXJkXSA9PT0gJ2ltbXV0YWJsZScpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1trSGVhZGVyc1NvcnRlZE1hcF1cbiAgICAgIHJldHVybiBtYWtlSXRlcmF0b3IoKCkgPT4gdmFsdWUsICdIZWFkZXJzJyxcbiAgICAgICAgJ3ZhbHVlJylcbiAgICB9XG5cbiAgICByZXR1cm4gbWFrZUl0ZXJhdG9yKFxuICAgICAgKCkgPT4gWy4uLnRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdLnZhbHVlcygpXSxcbiAgICAgICdIZWFkZXJzJyxcbiAgICAgICd2YWx1ZSdcbiAgICApXG4gIH1cblxuICBlbnRyaWVzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBIZWFkZXJzKVxuXG4gICAgaWYgKHRoaXNba0d1YXJkXSA9PT0gJ2ltbXV0YWJsZScpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1trSGVhZGVyc1NvcnRlZE1hcF1cbiAgICAgIHJldHVybiBtYWtlSXRlcmF0b3IoKCkgPT4gdmFsdWUsICdIZWFkZXJzJyxcbiAgICAgICAgJ2tleSt2YWx1ZScpXG4gICAgfVxuXG4gICAgcmV0dXJuIG1ha2VJdGVyYXRvcihcbiAgICAgICgpID0+IFsuLi50aGlzW2tIZWFkZXJzU29ydGVkTWFwXS52YWx1ZXMoKV0sXG4gICAgICAnSGVhZGVycycsXG4gICAgICAna2V5K3ZhbHVlJ1xuICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0geyh2YWx1ZTogc3RyaW5nLCBrZXk6IHN0cmluZywgc2VsZjogSGVhZGVycykgPT4gdm9pZH0gY2FsbGJhY2tGblxuICAgKiBAcGFyYW0ge3Vua25vd259IHRoaXNBcmdcbiAgICovXG4gIGZvckVhY2ggKGNhbGxiYWNrRm4sIHRoaXNBcmcgPSBnbG9iYWxUaGlzKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdIZWFkZXJzLmZvckVhY2gnIH0pXG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrRm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ2ZvckVhY2gnIG9uICdIZWFkZXJzJzogcGFyYW1ldGVyIDEgaXMgbm90IG9mIHR5cGUgJ0Z1bmN0aW9uJy5cIlxuICAgICAgKVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHRoaXMpIHtcbiAgICAgIGNhbGxiYWNrRm4uYXBwbHkodGhpc0FyZywgW3ZhbHVlLCBrZXksIHRoaXNdKVxuICAgIH1cbiAgfVxuXG4gIFtTeW1ib2wuZm9yKCdub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbScpXSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIHJldHVybiB0aGlzW2tIZWFkZXJzTGlzdF1cbiAgfVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdID0gSGVhZGVycy5wcm90b3R5cGUuZW50cmllc1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhIZWFkZXJzLnByb3RvdHlwZSwge1xuICBhcHBlbmQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGRlbGV0ZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZ2V0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBoYXM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHNldDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZ2V0U2V0Q29va2llOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBrZXlzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICB2YWx1ZXM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGVudHJpZXM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGZvckVhY2g6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIFtTeW1ib2wuaXRlcmF0b3JdOiB7IGVudW1lcmFibGU6IGZhbHNlIH0sXG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdIZWFkZXJzJyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfVxufSlcblxud2ViaWRsLmNvbnZlcnRlcnMuSGVhZGVyc0luaXQgPSBmdW5jdGlvbiAoVikge1xuICBpZiAod2ViaWRsLnV0aWwuVHlwZShWKSA9PT0gJ09iamVjdCcpIHtcbiAgICBpZiAoVltTeW1ib2wuaXRlcmF0b3JdKSB7XG4gICAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPHNlcXVlbmNlPEJ5dGVTdHJpbmc+PiddKFYpXG4gICAgfVxuXG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzWydyZWNvcmQ8Qnl0ZVN0cmluZywgQnl0ZVN0cmluZz4nXShWKVxuICB9XG5cbiAgdGhyb3cgd2ViaWRsLmVycm9ycy5jb252ZXJzaW9uRmFpbGVkKHtcbiAgICBwcmVmaXg6ICdIZWFkZXJzIGNvbnN0cnVjdG9yJyxcbiAgICBhcmd1bWVudDogJ0FyZ3VtZW50IDEnLFxuICAgIHR5cGVzOiBbJ3NlcXVlbmNlPHNlcXVlbmNlPEJ5dGVTdHJpbmc+PicsICdyZWNvcmQ8Qnl0ZVN0cmluZywgQnl0ZVN0cmluZz4nXVxuICB9KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZmlsbCxcbiAgSGVhZGVycyxcbiAgSGVhZGVyc0xpc3Rcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgSGVhZGVycywgSGVhZGVyc0xpc3QsIGZpbGwgfSA9IHJlcXVpcmUoJy4vaGVhZGVycycpXG5jb25zdCB7IGV4dHJhY3RCb2R5LCBjbG9uZUJvZHksIG1peGluQm9keSB9ID0gcmVxdWlyZSgnLi9ib2R5JylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5IH0gPSB1dGlsXG5jb25zdCB7XG4gIGlzVmFsaWRSZWFzb25QaHJhc2UsXG4gIGlzQ2FuY2VsbGVkLFxuICBpc0Fib3J0ZWQsXG4gIGlzQmxvYkxpa2UsXG4gIHNlcmlhbGl6ZUphdmFzY3JpcHRWYWx1ZVRvSlNPTlN0cmluZyxcbiAgaXNFcnJvckxpa2UsXG4gIGlzb21vcnBoaWNFbmNvZGVcbn0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3Qge1xuICByZWRpcmVjdFN0YXR1c1NldCxcbiAgbnVsbEJvZHlTdGF0dXMsXG4gIERPTUV4Y2VwdGlvblxufSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IHsga1N0YXRlLCBrSGVhZGVycywga0d1YXJkLCBrUmVhbG0gfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi93ZWJpZGwnKVxuY29uc3QgeyBGb3JtRGF0YSB9ID0gcmVxdWlyZSgnLi9mb3JtZGF0YScpXG5jb25zdCB7IGdldEdsb2JhbE9yaWdpbiB9ID0gcmVxdWlyZSgnLi9nbG9iYWwnKVxuY29uc3QgeyBVUkxTZXJpYWxpemVyIH0gPSByZXF1aXJlKCcuL2RhdGFVUkwnKVxuY29uc3QgeyBrSGVhZGVyc0xpc3QsIGtDb25zdHJ1Y3QgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyB0eXBlcyB9ID0gcmVxdWlyZSgndXRpbCcpXG5cbmNvbnN0IFJlYWRhYmxlU3RyZWFtID0gZ2xvYmFsVGhpcy5SZWFkYWJsZVN0cmVhbSB8fCByZXF1aXJlKCdzdHJlYW0vd2ViJykuUmVhZGFibGVTdHJlYW1cbmNvbnN0IHRleHRFbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCd1dGYtOCcpXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXNwb25zZS1jbGFzc1xuY2xhc3MgUmVzcG9uc2Uge1xuICAvLyBDcmVhdGVzIG5ldHdvcmsgZXJyb3IgUmVzcG9uc2UuXG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgLy8gVE9ET1xuICAgIGNvbnN0IHJlbGV2YW50UmVhbG0gPSB7IHNldHRpbmdzT2JqZWN0OiB7fSB9XG5cbiAgICAvLyBUaGUgc3RhdGljIGVycm9yKCkgbWV0aG9kIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhXG4gICAgLy8gUmVzcG9uc2Ugb2JqZWN0LCBnaXZlbiBhIG5ldyBuZXR3b3JrIGVycm9yLCBcImltbXV0YWJsZVwiLCBhbmQgdGhpc+KAmXNcbiAgICAvLyByZWxldmFudCBSZWFsbS5cbiAgICBjb25zdCByZXNwb25zZU9iamVjdCA9IG5ldyBSZXNwb25zZSgpXG4gICAgcmVzcG9uc2VPYmplY3Rba1N0YXRlXSA9IG1ha2VOZXR3b3JrRXJyb3IoKVxuICAgIHJlc3BvbnNlT2JqZWN0W2tSZWFsbV0gPSByZWxldmFudFJlYWxtXG4gICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tIZWFkZXJzTGlzdF0gPSByZXNwb25zZU9iamVjdFtrU3RhdGVdLmhlYWRlcnNMaXN0XG4gICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tHdWFyZF0gPSAnaW1tdXRhYmxlJ1xuICAgIHJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrUmVhbG1dID0gcmVsZXZhbnRSZWFsbVxuICAgIHJldHVybiByZXNwb25zZU9iamVjdFxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1yZXNwb25zZS1qc29uXG4gIHN0YXRpYyBqc29uIChkYXRhLCBpbml0ID0ge30pIHtcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnUmVzcG9uc2UuanNvbicgfSlcblxuICAgIGlmIChpbml0ICE9PSBudWxsKSB7XG4gICAgICBpbml0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVzcG9uc2VJbml0KGluaXQpXG4gICAgfVxuXG4gICAgLy8gMS4gTGV0IGJ5dGVzIHRoZSByZXN1bHQgb2YgcnVubmluZyBzZXJpYWxpemUgYSBKYXZhU2NyaXB0IHZhbHVlIHRvIEpTT04gYnl0ZXMgb24gZGF0YS5cbiAgICBjb25zdCBieXRlcyA9IHRleHRFbmNvZGVyLmVuY29kZShcbiAgICAgIHNlcmlhbGl6ZUphdmFzY3JpcHRWYWx1ZVRvSlNPTlN0cmluZyhkYXRhKVxuICAgIClcblxuICAgIC8vIDIuIExldCBib2R5IGJlIHRoZSByZXN1bHQgb2YgZXh0cmFjdGluZyBieXRlcy5cbiAgICBjb25zdCBib2R5ID0gZXh0cmFjdEJvZHkoYnl0ZXMpXG5cbiAgICAvLyAzLiBMZXQgcmVzcG9uc2VPYmplY3QgYmUgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhIFJlc3BvbnNlIG9iamVjdCwgZ2l2ZW4gYSBuZXcgcmVzcG9uc2UsXG4gICAgLy8gICAgXCJyZXNwb25zZVwiLCBhbmQgdGhpc+KAmXMgcmVsZXZhbnQgUmVhbG0uXG4gICAgY29uc3QgcmVsZXZhbnRSZWFsbSA9IHsgc2V0dGluZ3NPYmplY3Q6IHt9IH1cbiAgICBjb25zdCByZXNwb25zZU9iamVjdCA9IG5ldyBSZXNwb25zZSgpXG4gICAgcmVzcG9uc2VPYmplY3Rba1JlYWxtXSA9IHJlbGV2YW50UmVhbG1cbiAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba0d1YXJkXSA9ICdyZXNwb25zZSdcbiAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba1JlYWxtXSA9IHJlbGV2YW50UmVhbG1cblxuICAgIC8vIDQuIFBlcmZvcm0gaW5pdGlhbGl6ZSBhIHJlc3BvbnNlIGdpdmVuIHJlc3BvbnNlT2JqZWN0LCBpbml0LCBhbmQgKGJvZHksIFwiYXBwbGljYXRpb24vanNvblwiKS5cbiAgICBpbml0aWFsaXplUmVzcG9uc2UocmVzcG9uc2VPYmplY3QsIGluaXQsIHsgYm9keTogYm9keVswXSwgdHlwZTogJ2FwcGxpY2F0aW9uL2pzb24nIH0pXG5cbiAgICAvLyA1LiBSZXR1cm4gcmVzcG9uc2VPYmplY3QuXG4gICAgcmV0dXJuIHJlc3BvbnNlT2JqZWN0XG4gIH1cblxuICAvLyBDcmVhdGVzIGEgcmVkaXJlY3QgUmVzcG9uc2UgdGhhdCByZWRpcmVjdHMgdG8gdXJsIHdpdGggc3RhdHVzIHN0YXR1cy5cbiAgc3RhdGljIHJlZGlyZWN0ICh1cmwsIHN0YXR1cyA9IDMwMikge1xuICAgIGNvbnN0IHJlbGV2YW50UmVhbG0gPSB7IHNldHRpbmdzT2JqZWN0OiB7fSB9XG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnUmVzcG9uc2UucmVkaXJlY3QnIH0pXG5cbiAgICB1cmwgPSB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcodXJsKVxuICAgIHN0YXR1cyA9IHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBzaG9ydCddKHN0YXR1cylcblxuICAgIC8vIDEuIExldCBwYXJzZWRVUkwgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIHVybCB3aXRoIGN1cnJlbnQgc2V0dGluZ3NcbiAgICAvLyBvYmplY3TigJlzIEFQSSBiYXNlIFVSTC5cbiAgICAvLyAyLiBJZiBwYXJzZWRVUkwgaXMgZmFpbHVyZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAvLyBUT0RPOiBiYXNlLVVSTD9cbiAgICBsZXQgcGFyc2VkVVJMXG4gICAgdHJ5IHtcbiAgICAgIHBhcnNlZFVSTCA9IG5ldyBVUkwodXJsLCBnZXRHbG9iYWxPcmlnaW4oKSlcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRocm93IE9iamVjdC5hc3NpZ24obmV3IFR5cGVFcnJvcignRmFpbGVkIHRvIHBhcnNlIFVSTCBmcm9tICcgKyB1cmwpLCB7XG4gICAgICAgIGNhdXNlOiBlcnJcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMy4gSWYgc3RhdHVzIGlzIG5vdCBhIHJlZGlyZWN0IHN0YXR1cywgdGhlbiB0aHJvdyBhIFJhbmdlRXJyb3IuXG4gICAgaWYgKCFyZWRpcmVjdFN0YXR1c1NldC5oYXMoc3RhdHVzKSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgc3RhdHVzIGNvZGUgJyArIHN0YXR1cylcbiAgICB9XG5cbiAgICAvLyA0LiBMZXQgcmVzcG9uc2VPYmplY3QgYmUgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhIFJlc3BvbnNlIG9iamVjdCxcbiAgICAvLyBnaXZlbiBhIG5ldyByZXNwb25zZSwgXCJpbW11dGFibGVcIiwgYW5kIHRoaXPigJlzIHJlbGV2YW50IFJlYWxtLlxuICAgIGNvbnN0IHJlc3BvbnNlT2JqZWN0ID0gbmV3IFJlc3BvbnNlKClcbiAgICByZXNwb25zZU9iamVjdFtrUmVhbG1dID0gcmVsZXZhbnRSZWFsbVxuICAgIHJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrR3VhcmRdID0gJ2ltbXV0YWJsZSdcbiAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba1JlYWxtXSA9IHJlbGV2YW50UmVhbG1cblxuICAgIC8vIDUuIFNldCByZXNwb25zZU9iamVjdOKAmXMgcmVzcG9uc2XigJlzIHN0YXR1cyB0byBzdGF0dXMuXG4gICAgcmVzcG9uc2VPYmplY3Rba1N0YXRlXS5zdGF0dXMgPSBzdGF0dXNcblxuICAgIC8vIDYuIExldCB2YWx1ZSBiZSBwYXJzZWRVUkwsIHNlcmlhbGl6ZWQgYW5kIGlzb21vcnBoaWMgZW5jb2RlZC5cbiAgICBjb25zdCB2YWx1ZSA9IGlzb21vcnBoaWNFbmNvZGUoVVJMU2VyaWFsaXplcihwYXJzZWRVUkwpKVxuXG4gICAgLy8gNy4gQXBwZW5kIGBMb2NhdGlvbmAvdmFsdWUgdG8gcmVzcG9uc2VPYmplY3TigJlzIHJlc3BvbnNl4oCZcyBoZWFkZXIgbGlzdC5cbiAgICByZXNwb25zZU9iamVjdFtrU3RhdGVdLmhlYWRlcnNMaXN0LmFwcGVuZCgnbG9jYXRpb24nLCB2YWx1ZSlcblxuICAgIC8vIDguIFJldHVybiByZXNwb25zZU9iamVjdC5cbiAgICByZXR1cm4gcmVzcG9uc2VPYmplY3RcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tcmVzcG9uc2VcbiAgY29uc3RydWN0b3IgKGJvZHkgPSBudWxsLCBpbml0ID0ge30pIHtcbiAgICBpZiAoYm9keSAhPT0gbnVsbCkge1xuICAgICAgYm9keSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkJvZHlJbml0KGJvZHkpXG4gICAgfVxuXG4gICAgaW5pdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlc3BvbnNlSW5pdChpbml0KVxuXG4gICAgLy8gVE9ET1xuICAgIHRoaXNba1JlYWxtXSA9IHsgc2V0dGluZ3NPYmplY3Q6IHt9IH1cblxuICAgIC8vIDEuIFNldCB0aGlz4oCZcyByZXNwb25zZSB0byBhIG5ldyByZXNwb25zZS5cbiAgICB0aGlzW2tTdGF0ZV0gPSBtYWtlUmVzcG9uc2Uoe30pXG5cbiAgICAvLyAyLiBTZXQgdGhpc+KAmXMgaGVhZGVycyB0byBhIG5ldyBIZWFkZXJzIG9iamVjdCB3aXRoIHRoaXPigJlzIHJlbGV2YW50XG4gICAgLy8gUmVhbG0sIHdob3NlIGhlYWRlciBsaXN0IGlzIHRoaXPigJlzIHJlc3BvbnNl4oCZcyBoZWFkZXIgbGlzdCBhbmQgZ3VhcmRcbiAgICAvLyBpcyBcInJlc3BvbnNlXCIuXG4gICAgdGhpc1trSGVhZGVyc10gPSBuZXcgSGVhZGVycyhrQ29uc3RydWN0KVxuICAgIHRoaXNba0hlYWRlcnNdW2tHdWFyZF0gPSAncmVzcG9uc2UnXG4gICAgdGhpc1trSGVhZGVyc11ba0hlYWRlcnNMaXN0XSA9IHRoaXNba1N0YXRlXS5oZWFkZXJzTGlzdFxuICAgIHRoaXNba0hlYWRlcnNdW2tSZWFsbV0gPSB0aGlzW2tSZWFsbV1cblxuICAgIC8vIDMuIExldCBib2R5V2l0aFR5cGUgYmUgbnVsbC5cbiAgICBsZXQgYm9keVdpdGhUeXBlID0gbnVsbFxuXG4gICAgLy8gNC4gSWYgYm9keSBpcyBub24tbnVsbCwgdGhlbiBzZXQgYm9keVdpdGhUeXBlIHRvIHRoZSByZXN1bHQgb2YgZXh0cmFjdGluZyBib2R5LlxuICAgIGlmIChib2R5ICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IFtleHRyYWN0ZWRCb2R5LCB0eXBlXSA9IGV4dHJhY3RCb2R5KGJvZHkpXG4gICAgICBib2R5V2l0aFR5cGUgPSB7IGJvZHk6IGV4dHJhY3RlZEJvZHksIHR5cGUgfVxuICAgIH1cblxuICAgIC8vIDUuIFBlcmZvcm0gaW5pdGlhbGl6ZSBhIHJlc3BvbnNlIGdpdmVuIHRoaXMsIGluaXQsIGFuZCBib2R5V2l0aFR5cGUuXG4gICAgaW5pdGlhbGl6ZVJlc3BvbnNlKHRoaXMsIGluaXQsIGJvZHlXaXRoVHlwZSlcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2XigJlzIHR5cGUsIGUuZy4sIFwiY29yc1wiLlxuICBnZXQgdHlwZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICAvLyBUaGUgdHlwZSBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlz4oCZcyByZXNwb25zZeKAmXMgdHlwZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnR5cGVcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2XigJlzIFVSTCwgaWYgaXQgaGFzIG9uZTsgb3RoZXJ3aXNlIHRoZSBlbXB0eSBzdHJpbmcuXG4gIGdldCB1cmwgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgY29uc3QgdXJsTGlzdCA9IHRoaXNba1N0YXRlXS51cmxMaXN0XG5cbiAgICAvLyBUaGUgdXJsIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoZSBlbXB0eSBzdHJpbmcgaWYgdGhpc+KAmXNcbiAgICAvLyByZXNwb25zZeKAmXMgVVJMIGlzIG51bGw7IG90aGVyd2lzZSB0aGlz4oCZcyByZXNwb25zZeKAmXMgVVJMLFxuICAgIC8vIHNlcmlhbGl6ZWQgd2l0aCBleGNsdWRlIGZyYWdtZW50IHNldCB0byB0cnVlLlxuICAgIGNvbnN0IHVybCA9IHVybExpc3RbdXJsTGlzdC5sZW5ndGggLSAxXSA/PyBudWxsXG5cbiAgICBpZiAodXJsID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG5cbiAgICByZXR1cm4gVVJMU2VyaWFsaXplcih1cmwsIHRydWUpXG4gIH1cblxuICAvLyBSZXR1cm5zIHdoZXRoZXIgcmVzcG9uc2Ugd2FzIG9idGFpbmVkIHRocm91Z2ggYSByZWRpcmVjdC5cbiAgZ2V0IHJlZGlyZWN0ZWQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgLy8gVGhlIHJlZGlyZWN0ZWQgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdHJ1ZSBpZiB0aGlz4oCZcyByZXNwb25zZeKAmXMgVVJMXG4gICAgLy8gbGlzdCBoYXMgbW9yZSB0aGFuIG9uZSBpdGVtOyBvdGhlcndpc2UgZmFsc2UuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS51cmxMaXN0Lmxlbmd0aCA+IDFcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2XigJlzIHN0YXR1cy5cbiAgZ2V0IHN0YXR1cyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICAvLyBUaGUgc3RhdHVzIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXPigJlzIHJlc3BvbnNl4oCZcyBzdGF0dXMuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5zdGF0dXNcbiAgfVxuXG4gIC8vIFJldHVybnMgd2hldGhlciByZXNwb25zZeKAmXMgc3RhdHVzIGlzIGFuIG9rIHN0YXR1cy5cbiAgZ2V0IG9rICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXNwb25zZSlcblxuICAgIC8vIFRoZSBvayBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0cnVlIGlmIHRoaXPigJlzIHJlc3BvbnNl4oCZcyBzdGF0dXMgaXMgYW5cbiAgICAvLyBvayBzdGF0dXM7IG90aGVyd2lzZSBmYWxzZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnN0YXR1cyA+PSAyMDAgJiYgdGhpc1trU3RhdGVdLnN0YXR1cyA8PSAyOTlcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2XigJlzIHN0YXR1cyBtZXNzYWdlLlxuICBnZXQgc3RhdHVzVGV4dCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICAvLyBUaGUgc3RhdHVzVGV4dCBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlz4oCZcyByZXNwb25zZeKAmXMgc3RhdHVzXG4gICAgLy8gbWVzc2FnZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnN0YXR1c1RleHRcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2XigJlzIGhlYWRlcnMgYXMgSGVhZGVycy5cbiAgZ2V0IGhlYWRlcnMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgLy8gVGhlIGhlYWRlcnMgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc+KAmXMgaGVhZGVycy5cbiAgICByZXR1cm4gdGhpc1trSGVhZGVyc11cbiAgfVxuXG4gIGdldCBib2R5ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXNwb25zZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uYm9keSA/IHRoaXNba1N0YXRlXS5ib2R5LnN0cmVhbSA6IG51bGxcbiAgfVxuXG4gIGdldCBib2R5VXNlZCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICByZXR1cm4gISF0aGlzW2tTdGF0ZV0uYm9keSAmJiB1dGlsLmlzRGlzdHVyYmVkKHRoaXNba1N0YXRlXS5ib2R5LnN0cmVhbSlcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBjbG9uZSBvZiByZXNwb25zZS5cbiAgY2xvbmUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgLy8gMS4gSWYgdGhpcyBpcyB1bnVzYWJsZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAodGhpcy5ib2R5VXNlZCB8fCAodGhpcy5ib2R5ICYmIHRoaXMuYm9keS5sb2NrZWQpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ1Jlc3BvbnNlLmNsb25lJyxcbiAgICAgICAgbWVzc2FnZTogJ0JvZHkgaGFzIGFscmVhZHkgYmVlbiBjb25zdW1lZC4nXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDIuIExldCBjbG9uZWRSZXNwb25zZSBiZSB0aGUgcmVzdWx0IG9mIGNsb25pbmcgdGhpc+KAmXMgcmVzcG9uc2UuXG4gICAgY29uc3QgY2xvbmVkUmVzcG9uc2UgPSBjbG9uZVJlc3BvbnNlKHRoaXNba1N0YXRlXSlcblxuICAgIC8vIDMuIFJldHVybiB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEgUmVzcG9uc2Ugb2JqZWN0LCBnaXZlblxuICAgIC8vIGNsb25lZFJlc3BvbnNlLCB0aGlz4oCZcyBoZWFkZXJz4oCZcyBndWFyZCwgYW5kIHRoaXPigJlzIHJlbGV2YW50IFJlYWxtLlxuICAgIGNvbnN0IGNsb25lZFJlc3BvbnNlT2JqZWN0ID0gbmV3IFJlc3BvbnNlKClcbiAgICBjbG9uZWRSZXNwb25zZU9iamVjdFtrU3RhdGVdID0gY2xvbmVkUmVzcG9uc2VcbiAgICBjbG9uZWRSZXNwb25zZU9iamVjdFtrUmVhbG1dID0gdGhpc1trUmVhbG1dXG4gICAgY2xvbmVkUmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tIZWFkZXJzTGlzdF0gPSBjbG9uZWRSZXNwb25zZS5oZWFkZXJzTGlzdFxuICAgIGNsb25lZFJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrR3VhcmRdID0gdGhpc1trSGVhZGVyc11ba0d1YXJkXVxuICAgIGNsb25lZFJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrUmVhbG1dID0gdGhpc1trSGVhZGVyc11ba1JlYWxtXVxuXG4gICAgcmV0dXJuIGNsb25lZFJlc3BvbnNlT2JqZWN0XG4gIH1cbn1cblxubWl4aW5Cb2R5KFJlc3BvbnNlKVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhSZXNwb25zZS5wcm90b3R5cGUsIHtcbiAgdHlwZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgdXJsOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBzdGF0dXM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9rOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWRpcmVjdGVkOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBzdGF0dXNUZXh0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBoZWFkZXJzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBjbG9uZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYm9keToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYm9keVVzZWQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdSZXNwb25zZScsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH1cbn0pXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFJlc3BvbnNlLCB7XG4gIGpzb246IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlZGlyZWN0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBlcnJvcjoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtcmVzcG9uc2UtY2xvbmVcbmZ1bmN0aW9uIGNsb25lUmVzcG9uc2UgKHJlc3BvbnNlKSB7XG4gIC8vIFRvIGNsb25lIGEgcmVzcG9uc2UgcmVzcG9uc2UsIHJ1biB0aGVzZSBzdGVwczpcblxuICAvLyAxLiBJZiByZXNwb25zZSBpcyBhIGZpbHRlcmVkIHJlc3BvbnNlLCB0aGVuIHJldHVybiBhIG5ldyBpZGVudGljYWxcbiAgLy8gZmlsdGVyZWQgcmVzcG9uc2Ugd2hvc2UgaW50ZXJuYWwgcmVzcG9uc2UgaXMgYSBjbG9uZSBvZiByZXNwb25zZeKAmXNcbiAgLy8gaW50ZXJuYWwgcmVzcG9uc2UuXG4gIGlmIChyZXNwb25zZS5pbnRlcm5hbFJlc3BvbnNlKSB7XG4gICAgcmV0dXJuIGZpbHRlclJlc3BvbnNlKFxuICAgICAgY2xvbmVSZXNwb25zZShyZXNwb25zZS5pbnRlcm5hbFJlc3BvbnNlKSxcbiAgICAgIHJlc3BvbnNlLnR5cGVcbiAgICApXG4gIH1cblxuICAvLyAyLiBMZXQgbmV3UmVzcG9uc2UgYmUgYSBjb3B5IG9mIHJlc3BvbnNlLCBleGNlcHQgZm9yIGl0cyBib2R5LlxuICBjb25zdCBuZXdSZXNwb25zZSA9IG1ha2VSZXNwb25zZSh7IC4uLnJlc3BvbnNlLCBib2R5OiBudWxsIH0pXG5cbiAgLy8gMy4gSWYgcmVzcG9uc2XigJlzIGJvZHkgaXMgbm9uLW51bGwsIHRoZW4gc2V0IG5ld1Jlc3BvbnNl4oCZcyBib2R5IHRvIHRoZVxuICAvLyByZXN1bHQgb2YgY2xvbmluZyByZXNwb25zZeKAmXMgYm9keS5cbiAgaWYgKHJlc3BvbnNlLmJvZHkgIT0gbnVsbCkge1xuICAgIG5ld1Jlc3BvbnNlLmJvZHkgPSBjbG9uZUJvZHkocmVzcG9uc2UuYm9keSlcbiAgfVxuXG4gIC8vIDQuIFJldHVybiBuZXdSZXNwb25zZS5cbiAgcmV0dXJuIG5ld1Jlc3BvbnNlXG59XG5cbmZ1bmN0aW9uIG1ha2VSZXNwb25zZSAoaW5pdCkge1xuICByZXR1cm4ge1xuICAgIGFib3J0ZWQ6IGZhbHNlLFxuICAgIHJhbmdlUmVxdWVzdGVkOiBmYWxzZSxcbiAgICB0aW1pbmdBbGxvd1Bhc3NlZDogZmFsc2UsXG4gICAgcmVxdWVzdEluY2x1ZGVzQ3JlZGVudGlhbHM6IGZhbHNlLFxuICAgIHR5cGU6ICdkZWZhdWx0JyxcbiAgICBzdGF0dXM6IDIwMCxcbiAgICB0aW1pbmdJbmZvOiBudWxsLFxuICAgIGNhY2hlU3RhdGU6ICcnLFxuICAgIHN0YXR1c1RleHQ6ICcnLFxuICAgIC4uLmluaXQsXG4gICAgaGVhZGVyc0xpc3Q6IGluaXQuaGVhZGVyc0xpc3RcbiAgICAgID8gbmV3IEhlYWRlcnNMaXN0KGluaXQuaGVhZGVyc0xpc3QpXG4gICAgICA6IG5ldyBIZWFkZXJzTGlzdCgpLFxuICAgIHVybExpc3Q6IGluaXQudXJsTGlzdCA/IFsuLi5pbml0LnVybExpc3RdIDogW11cbiAgfVxufVxuXG5mdW5jdGlvbiBtYWtlTmV0d29ya0Vycm9yIChyZWFzb24pIHtcbiAgY29uc3QgaXNFcnJvciA9IGlzRXJyb3JMaWtlKHJlYXNvbilcbiAgcmV0dXJuIG1ha2VSZXNwb25zZSh7XG4gICAgdHlwZTogJ2Vycm9yJyxcbiAgICBzdGF0dXM6IDAsXG4gICAgZXJyb3I6IGlzRXJyb3JcbiAgICAgID8gcmVhc29uXG4gICAgICA6IG5ldyBFcnJvcihyZWFzb24gPyBTdHJpbmcocmVhc29uKSA6IHJlYXNvbiksXG4gICAgYWJvcnRlZDogcmVhc29uICYmIHJlYXNvbi5uYW1lID09PSAnQWJvcnRFcnJvcidcbiAgfSlcbn1cblxuZnVuY3Rpb24gbWFrZUZpbHRlcmVkUmVzcG9uc2UgKHJlc3BvbnNlLCBzdGF0ZSkge1xuICBzdGF0ZSA9IHtcbiAgICBpbnRlcm5hbFJlc3BvbnNlOiByZXNwb25zZSxcbiAgICAuLi5zdGF0ZVxuICB9XG5cbiAgcmV0dXJuIG5ldyBQcm94eShyZXNwb25zZSwge1xuICAgIGdldCAodGFyZ2V0LCBwKSB7XG4gICAgICByZXR1cm4gcCBpbiBzdGF0ZSA/IHN0YXRlW3BdIDogdGFyZ2V0W3BdXG4gICAgfSxcbiAgICBzZXQgKHRhcmdldCwgcCwgdmFsdWUpIHtcbiAgICAgIGFzc2VydCghKHAgaW4gc3RhdGUpKVxuICAgICAgdGFyZ2V0W3BdID0gdmFsdWVcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICB9KVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1maWx0ZXJlZC1yZXNwb25zZVxuZnVuY3Rpb24gZmlsdGVyUmVzcG9uc2UgKHJlc3BvbnNlLCB0eXBlKSB7XG4gIC8vIFNldCByZXNwb25zZSB0byB0aGUgZm9sbG93aW5nIGZpbHRlcmVkIHJlc3BvbnNlIHdpdGggcmVzcG9uc2UgYXMgaXRzXG4gIC8vIGludGVybmFsIHJlc3BvbnNlLCBkZXBlbmRpbmcgb24gcmVxdWVzdOKAmXMgcmVzcG9uc2UgdGFpbnRpbmc6XG4gIGlmICh0eXBlID09PSAnYmFzaWMnKSB7XG4gICAgLy8gQSBiYXNpYyBmaWx0ZXJlZCByZXNwb25zZSBpcyBhIGZpbHRlcmVkIHJlc3BvbnNlIHdob3NlIHR5cGUgaXMgXCJiYXNpY1wiXG4gICAgLy8gYW5kIGhlYWRlciBsaXN0IGV4Y2x1ZGVzIGFueSBoZWFkZXJzIGluIGludGVybmFsIHJlc3BvbnNl4oCZcyBoZWFkZXIgbGlzdFxuICAgIC8vIHdob3NlIG5hbWUgaXMgYSBmb3JiaWRkZW4gcmVzcG9uc2UtaGVhZGVyIG5hbWUuXG5cbiAgICAvLyBOb3RlOiB1bmRpY2kgZG9lcyBub3QgaW1wbGVtZW50IGZvcmJpZGRlbiByZXNwb25zZS1oZWFkZXIgbmFtZXNcbiAgICByZXR1cm4gbWFrZUZpbHRlcmVkUmVzcG9uc2UocmVzcG9uc2UsIHtcbiAgICAgIHR5cGU6ICdiYXNpYycsXG4gICAgICBoZWFkZXJzTGlzdDogcmVzcG9uc2UuaGVhZGVyc0xpc3RcbiAgICB9KVxuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdjb3JzJykge1xuICAgIC8vIEEgQ09SUyBmaWx0ZXJlZCByZXNwb25zZSBpcyBhIGZpbHRlcmVkIHJlc3BvbnNlIHdob3NlIHR5cGUgaXMgXCJjb3JzXCJcbiAgICAvLyBhbmQgaGVhZGVyIGxpc3QgZXhjbHVkZXMgYW55IGhlYWRlcnMgaW4gaW50ZXJuYWwgcmVzcG9uc2XigJlzIGhlYWRlclxuICAgIC8vIGxpc3Qgd2hvc2UgbmFtZSBpcyBub3QgYSBDT1JTLXNhZmVsaXN0ZWQgcmVzcG9uc2UtaGVhZGVyIG5hbWUsIGdpdmVuXG4gICAgLy8gaW50ZXJuYWwgcmVzcG9uc2XigJlzIENPUlMtZXhwb3NlZCBoZWFkZXItbmFtZSBsaXN0LlxuXG4gICAgLy8gTm90ZTogdW5kaWNpIGRvZXMgbm90IGltcGxlbWVudCBDT1JTLXNhZmVsaXN0ZWQgcmVzcG9uc2UtaGVhZGVyIG5hbWVzXG4gICAgcmV0dXJuIG1ha2VGaWx0ZXJlZFJlc3BvbnNlKHJlc3BvbnNlLCB7XG4gICAgICB0eXBlOiAnY29ycycsXG4gICAgICBoZWFkZXJzTGlzdDogcmVzcG9uc2UuaGVhZGVyc0xpc3RcbiAgICB9KVxuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdvcGFxdWUnKSB7XG4gICAgLy8gQW4gb3BhcXVlIGZpbHRlcmVkIHJlc3BvbnNlIGlzIGEgZmlsdGVyZWQgcmVzcG9uc2Ugd2hvc2UgdHlwZSBpc1xuICAgIC8vIFwib3BhcXVlXCIsIFVSTCBsaXN0IGlzIHRoZSBlbXB0eSBsaXN0LCBzdGF0dXMgaXMgMCwgc3RhdHVzIG1lc3NhZ2VcbiAgICAvLyBpcyB0aGUgZW1wdHkgYnl0ZSBzZXF1ZW5jZSwgaGVhZGVyIGxpc3QgaXMgZW1wdHksIGFuZCBib2R5IGlzIG51bGwuXG5cbiAgICByZXR1cm4gbWFrZUZpbHRlcmVkUmVzcG9uc2UocmVzcG9uc2UsIHtcbiAgICAgIHR5cGU6ICdvcGFxdWUnLFxuICAgICAgdXJsTGlzdDogT2JqZWN0LmZyZWV6ZShbXSksXG4gICAgICBzdGF0dXM6IDAsXG4gICAgICBzdGF0dXNUZXh0OiAnJyxcbiAgICAgIGJvZHk6IG51bGxcbiAgICB9KVxuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdvcGFxdWVyZWRpcmVjdCcpIHtcbiAgICAvLyBBbiBvcGFxdWUtcmVkaXJlY3QgZmlsdGVyZWQgcmVzcG9uc2UgaXMgYSBmaWx0ZXJlZCByZXNwb25zZSB3aG9zZSB0eXBlXG4gICAgLy8gaXMgXCJvcGFxdWVyZWRpcmVjdFwiLCBzdGF0dXMgaXMgMCwgc3RhdHVzIG1lc3NhZ2UgaXMgdGhlIGVtcHR5IGJ5dGVcbiAgICAvLyBzZXF1ZW5jZSwgaGVhZGVyIGxpc3QgaXMgZW1wdHksIGFuZCBib2R5IGlzIG51bGwuXG5cbiAgICByZXR1cm4gbWFrZUZpbHRlcmVkUmVzcG9uc2UocmVzcG9uc2UsIHtcbiAgICAgIHR5cGU6ICdvcGFxdWVyZWRpcmVjdCcsXG4gICAgICBzdGF0dXM6IDAsXG4gICAgICBzdGF0dXNUZXh0OiAnJyxcbiAgICAgIGhlYWRlcnNMaXN0OiBbXSxcbiAgICAgIGJvZHk6IG51bGxcbiAgICB9KVxuICB9IGVsc2Uge1xuICAgIGFzc2VydChmYWxzZSlcbiAgfVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYXBwcm9wcmlhdGUtbmV0d29yay1lcnJvclxuZnVuY3Rpb24gbWFrZUFwcHJvcHJpYXRlTmV0d29ya0Vycm9yIChmZXRjaFBhcmFtcywgZXJyID0gbnVsbCkge1xuICAvLyAxLiBBc3NlcnQ6IGZldGNoUGFyYW1zIGlzIGNhbmNlbGVkLlxuICBhc3NlcnQoaXNDYW5jZWxsZWQoZmV0Y2hQYXJhbXMpKVxuXG4gIC8vIDIuIFJldHVybiBhbiBhYm9ydGVkIG5ldHdvcmsgZXJyb3IgaWYgZmV0Y2hQYXJhbXMgaXMgYWJvcnRlZDtcbiAgLy8gb3RoZXJ3aXNlIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gIHJldHVybiBpc0Fib3J0ZWQoZmV0Y2hQYXJhbXMpXG4gICAgPyBtYWtlTmV0d29ya0Vycm9yKE9iamVjdC5hc3NpZ24obmV3IERPTUV4Y2VwdGlvbignVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC4nLCAnQWJvcnRFcnJvcicpLCB7IGNhdXNlOiBlcnIgfSkpXG4gICAgOiBtYWtlTmV0d29ya0Vycm9yKE9iamVjdC5hc3NpZ24obmV3IERPTUV4Y2VwdGlvbignUmVxdWVzdCB3YXMgY2FuY2VsbGVkLicpLCB7IGNhdXNlOiBlcnIgfSkpXG59XG5cbi8vIGh0dHBzOi8vd2hhdHByLm9yZy9mZXRjaC8xMzkyLmh0bWwjaW5pdGlhbGl6ZS1hLXJlc3BvbnNlXG5mdW5jdGlvbiBpbml0aWFsaXplUmVzcG9uc2UgKHJlc3BvbnNlLCBpbml0LCBib2R5KSB7XG4gIC8vIDEuIElmIGluaXRbXCJzdGF0dXNcIl0gaXMgbm90IGluIHRoZSByYW5nZSAyMDAgdG8gNTk5LCBpbmNsdXNpdmUsIHRoZW5cbiAgLy8gICAgdGhyb3cgYSBSYW5nZUVycm9yLlxuICBpZiAoaW5pdC5zdGF0dXMgIT09IG51bGwgJiYgKGluaXQuc3RhdHVzIDwgMjAwIHx8IGluaXQuc3RhdHVzID4gNTk5KSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdpbml0W1wic3RhdHVzXCJdIG11c3QgYmUgaW4gdGhlIHJhbmdlIG9mIDIwMCB0byA1OTksIGluY2x1c2l2ZS4nKVxuICB9XG5cbiAgLy8gMi4gSWYgaW5pdFtcInN0YXR1c1RleHRcIl0gZG9lcyBub3QgbWF0Y2ggdGhlIHJlYXNvbi1waHJhc2UgdG9rZW4gcHJvZHVjdGlvbixcbiAgLy8gICAgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKCdzdGF0dXNUZXh0JyBpbiBpbml0ICYmIGluaXQuc3RhdHVzVGV4dCAhPSBudWxsKSB7XG4gICAgLy8gU2VlLCBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjEuMjpcbiAgICAvLyAgIHJlYXNvbi1waHJhc2UgID0gKiggSFRBQiAvIFNQIC8gVkNIQVIgLyBvYnMtdGV4dCApXG4gICAgaWYgKCFpc1ZhbGlkUmVhc29uUGhyYXNlKFN0cmluZyhpbml0LnN0YXR1c1RleHQpKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBzdGF0dXNUZXh0JylcbiAgICB9XG4gIH1cblxuICAvLyAzLiBTZXQgcmVzcG9uc2XigJlzIHJlc3BvbnNl4oCZcyBzdGF0dXMgdG8gaW5pdFtcInN0YXR1c1wiXS5cbiAgaWYgKCdzdGF0dXMnIGluIGluaXQgJiYgaW5pdC5zdGF0dXMgIT0gbnVsbCkge1xuICAgIHJlc3BvbnNlW2tTdGF0ZV0uc3RhdHVzID0gaW5pdC5zdGF0dXNcbiAgfVxuXG4gIC8vIDQuIFNldCByZXNwb25zZeKAmXMgcmVzcG9uc2XigJlzIHN0YXR1cyBtZXNzYWdlIHRvIGluaXRbXCJzdGF0dXNUZXh0XCJdLlxuICBpZiAoJ3N0YXR1c1RleHQnIGluIGluaXQgJiYgaW5pdC5zdGF0dXNUZXh0ICE9IG51bGwpIHtcbiAgICByZXNwb25zZVtrU3RhdGVdLnN0YXR1c1RleHQgPSBpbml0LnN0YXR1c1RleHRcbiAgfVxuXG4gIC8vIDUuIElmIGluaXRbXCJoZWFkZXJzXCJdIGV4aXN0cywgdGhlbiBmaWxsIHJlc3BvbnNl4oCZcyBoZWFkZXJzIHdpdGggaW5pdFtcImhlYWRlcnNcIl0uXG4gIGlmICgnaGVhZGVycycgaW4gaW5pdCAmJiBpbml0LmhlYWRlcnMgIT0gbnVsbCkge1xuICAgIGZpbGwocmVzcG9uc2Vba0hlYWRlcnNdLCBpbml0LmhlYWRlcnMpXG4gIH1cblxuICAvLyA2LiBJZiBib2R5IHdhcyBnaXZlbiwgdGhlbjpcbiAgaWYgKGJvZHkpIHtcbiAgICAvLyAxLiBJZiByZXNwb25zZSdzIHN0YXR1cyBpcyBhIG51bGwgYm9keSBzdGF0dXMsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKG51bGxCb2R5U3RhdHVzLmluY2x1ZGVzKHJlc3BvbnNlLnN0YXR1cykpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnUmVzcG9uc2UgY29uc3RydWN0b3InLFxuICAgICAgICBtZXNzYWdlOiAnSW52YWxpZCByZXNwb25zZSBzdGF0dXMgY29kZSAnICsgcmVzcG9uc2Uuc3RhdHVzXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDIuIFNldCByZXNwb25zZSdzIGJvZHkgdG8gYm9keSdzIGJvZHkuXG4gICAgcmVzcG9uc2Vba1N0YXRlXS5ib2R5ID0gYm9keS5ib2R5XG5cbiAgICAvLyAzLiBJZiBib2R5J3MgdHlwZSBpcyBub24tbnVsbCBhbmQgcmVzcG9uc2UncyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluXG4gICAgLy8gICAgYENvbnRlbnQtVHlwZWAsIHRoZW4gYXBwZW5kIChgQ29udGVudC1UeXBlYCwgYm9keSdzIHR5cGUpIHRvIHJlc3BvbnNlJ3MgaGVhZGVyIGxpc3QuXG4gICAgaWYgKGJvZHkudHlwZSAhPSBudWxsICYmICFyZXNwb25zZVtrU3RhdGVdLmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdDb250ZW50LVR5cGUnKSkge1xuICAgICAgcmVzcG9uc2Vba1N0YXRlXS5oZWFkZXJzTGlzdC5hcHBlbmQoJ2NvbnRlbnQtdHlwZScsIGJvZHkudHlwZSlcbiAgICB9XG4gIH1cbn1cblxud2ViaWRsLmNvbnZlcnRlcnMuUmVhZGFibGVTdHJlYW0gPSB3ZWJpZGwuaW50ZXJmYWNlQ29udmVydGVyKFxuICBSZWFkYWJsZVN0cmVhbVxuKVxuXG53ZWJpZGwuY29udmVydGVycy5Gb3JtRGF0YSA9IHdlYmlkbC5pbnRlcmZhY2VDb252ZXJ0ZXIoXG4gIEZvcm1EYXRhXG4pXG5cbndlYmlkbC5jb252ZXJ0ZXJzLlVSTFNlYXJjaFBhcmFtcyA9IHdlYmlkbC5pbnRlcmZhY2VDb252ZXJ0ZXIoXG4gIFVSTFNlYXJjaFBhcmFtc1xuKVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jdHlwZWRlZmRlZi14bWxodHRwcmVxdWVzdGJvZHlpbml0XG53ZWJpZGwuY29udmVydGVycy5YTUxIdHRwUmVxdWVzdEJvZHlJbml0ID0gZnVuY3Rpb24gKFYpIHtcbiAgaWYgKHR5cGVvZiBWID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcoVilcbiAgfVxuXG4gIGlmIChpc0Jsb2JMaWtlKFYpKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkJsb2IoViwgeyBzdHJpY3Q6IGZhbHNlIH0pXG4gIH1cblxuICBpZiAodHlwZXMuaXNBcnJheUJ1ZmZlcihWKSB8fCB0eXBlcy5pc1R5cGVkQXJyYXkoVikgfHwgdHlwZXMuaXNEYXRhVmlldyhWKSkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5CdWZmZXJTb3VyY2UoVilcbiAgfVxuXG4gIGlmICh1dGlsLmlzRm9ybURhdGFMaWtlKFYpKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkZvcm1EYXRhKFYsIHsgc3RyaWN0OiBmYWxzZSB9KVxuICB9XG5cbiAgaWYgKFYgaW5zdGFuY2VvZiBVUkxTZWFyY2hQYXJhbXMpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuVVJMU2VhcmNoUGFyYW1zKFYpXG4gIH1cblxuICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKFYpXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNib2R5aW5pdFxud2ViaWRsLmNvbnZlcnRlcnMuQm9keUluaXQgPSBmdW5jdGlvbiAoVikge1xuICBpZiAoViBpbnN0YW5jZW9mIFJlYWRhYmxlU3RyZWFtKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLlJlYWRhYmxlU3RyZWFtKFYpXG4gIH1cblxuICAvLyBOb3RlOiB0aGUgc3BlYyBkb2Vzbid0IGluY2x1ZGUgYXN5bmMgaXRlcmFibGVzLFxuICAvLyB0aGlzIGlzIGFuIHVuZGljaSBleHRlbnNpb24uXG4gIGlmIChWPy5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdKSB7XG4gICAgcmV0dXJuIFZcbiAgfVxuXG4gIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5YTUxIdHRwUmVxdWVzdEJvZHlJbml0KFYpXG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLlJlc3BvbnNlSW5pdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGtleTogJ3N0YXR1cycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgc2hvcnQnXSxcbiAgICBkZWZhdWx0VmFsdWU6IDIwMFxuICB9LFxuICB7XG4gICAga2V5OiAnc3RhdHVzVGV4dCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZTogJydcbiAgfSxcbiAge1xuICAgIGtleTogJ2hlYWRlcnMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuSGVhZGVyc0luaXRcbiAgfVxuXSlcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1ha2VOZXR3b3JrRXJyb3IsXG4gIG1ha2VSZXNwb25zZSxcbiAgbWFrZUFwcHJvcHJpYXRlTmV0d29ya0Vycm9yLFxuICBmaWx0ZXJSZXNwb25zZSxcbiAgUmVzcG9uc2UsXG4gIGNsb25lUmVzcG9uc2Vcbn1cbiIsCiAgICAiLyogZ2xvYmFscyBBYm9ydENvbnRyb2xsZXIgKi9cblxuJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgZXh0cmFjdEJvZHksIG1peGluQm9keSwgY2xvbmVCb2R5IH0gPSByZXF1aXJlKCcuL2JvZHknKVxuY29uc3QgeyBIZWFkZXJzLCBmaWxsOiBmaWxsSGVhZGVycywgSGVhZGVyc0xpc3QgfSA9IHJlcXVpcmUoJy4vaGVhZGVycycpXG5jb25zdCB7IEZpbmFsaXphdGlvblJlZ2lzdHJ5IH0gPSByZXF1aXJlKCcuLi9jb21wYXQvZGlzcGF0Y2hlci13ZWFrcmVmJykoKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7XG4gIGlzVmFsaWRIVFRQVG9rZW4sXG4gIHNhbWVPcmlnaW4sXG4gIG5vcm1hbGl6ZU1ldGhvZCxcbiAgbWFrZVBvbGljeUNvbnRhaW5lcixcbiAgbm9ybWFsaXplTWV0aG9kUmVjb3JkXG59ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHtcbiAgZm9yYmlkZGVuTWV0aG9kc1NldCxcbiAgY29yc1NhZmVMaXN0ZWRNZXRob2RzU2V0LFxuICByZWZlcnJlclBvbGljeSxcbiAgcmVxdWVzdFJlZGlyZWN0LFxuICByZXF1ZXN0TW9kZSxcbiAgcmVxdWVzdENyZWRlbnRpYWxzLFxuICByZXF1ZXN0Q2FjaGUsXG4gIHJlcXVlc3REdXBsZXhcbn0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7IGtFbnVtZXJhYmxlUHJvcGVydHkgfSA9IHV0aWxcbmNvbnN0IHsga0hlYWRlcnMsIGtTaWduYWwsIGtTdGF0ZSwga0d1YXJkLCBrUmVhbG0gfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi93ZWJpZGwnKVxuY29uc3QgeyBnZXRHbG9iYWxPcmlnaW4gfSA9IHJlcXVpcmUoJy4vZ2xvYmFsJylcbmNvbnN0IHsgVVJMU2VyaWFsaXplciB9ID0gcmVxdWlyZSgnLi9kYXRhVVJMJylcbmNvbnN0IHsga0hlYWRlcnNMaXN0LCBrQ29uc3RydWN0IH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbmNvbnN0IHsgZ2V0TWF4TGlzdGVuZXJzLCBzZXRNYXhMaXN0ZW5lcnMsIGdldEV2ZW50TGlzdGVuZXJzLCBkZWZhdWx0TWF4TGlzdGVuZXJzIH0gPSByZXF1aXJlKCdldmVudHMnKVxuXG5sZXQgVHJhbnNmb3JtU3RyZWFtID0gZ2xvYmFsVGhpcy5UcmFuc2Zvcm1TdHJlYW1cblxuY29uc3Qga0Fib3J0Q29udHJvbGxlciA9IFN5bWJvbCgnYWJvcnRDb250cm9sbGVyJylcblxuY29uc3QgcmVxdWVzdEZpbmFsaXplciA9IG5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeSgoeyBzaWduYWwsIGFib3J0IH0pID0+IHtcbiAgc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnQpXG59KVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdC1jbGFzc1xuY2xhc3MgUmVxdWVzdCB7XG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tcmVxdWVzdFxuICBjb25zdHJ1Y3RvciAoaW5wdXQsIGluaXQgPSB7fSkge1xuICAgIGlmIChpbnB1dCA9PT0ga0NvbnN0cnVjdCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ1JlcXVlc3QgY29uc3RydWN0b3InIH0pXG5cbiAgICBpbnB1dCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKGlucHV0KVxuICAgIGluaXQgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5pdChpbml0KVxuXG4gICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvd2ViYXBwYXBpcy5odG1sI2Vudmlyb25tZW50LXNldHRpbmdzLW9iamVjdFxuICAgIHRoaXNba1JlYWxtXSA9IHtcbiAgICAgIHNldHRpbmdzT2JqZWN0OiB7XG4gICAgICAgIGJhc2VVcmw6IGdldEdsb2JhbE9yaWdpbigpLFxuICAgICAgICBnZXQgb3JpZ2luICgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5iYXNlVXJsPy5vcmlnaW5cbiAgICAgICAgfSxcbiAgICAgICAgcG9saWN5Q29udGFpbmVyOiBtYWtlUG9saWN5Q29udGFpbmVyKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAxLiBMZXQgcmVxdWVzdCBiZSBudWxsLlxuICAgIGxldCByZXF1ZXN0ID0gbnVsbFxuXG4gICAgLy8gMi4gTGV0IGZhbGxiYWNrTW9kZSBiZSBudWxsLlxuICAgIGxldCBmYWxsYmFja01vZGUgPSBudWxsXG5cbiAgICAvLyAzLiBMZXQgYmFzZVVSTCBiZSB0aGlz4oCZcyByZWxldmFudCBzZXR0aW5ncyBvYmplY3TigJlzIEFQSSBiYXNlIFVSTC5cbiAgICBjb25zdCBiYXNlVXJsID0gdGhpc1trUmVhbG1dLnNldHRpbmdzT2JqZWN0LmJhc2VVcmxcblxuICAgIC8vIDQuIExldCBzaWduYWwgYmUgbnVsbC5cbiAgICBsZXQgc2lnbmFsID0gbnVsbFxuXG4gICAgLy8gNS4gSWYgaW5wdXQgaXMgYSBzdHJpbmcsIHRoZW46XG4gICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIDEuIExldCBwYXJzZWRVUkwgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIGlucHV0IHdpdGggYmFzZVVSTC5cbiAgICAgIC8vIDIuIElmIHBhcnNlZFVSTCBpcyBmYWlsdXJlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgbGV0IHBhcnNlZFVSTFxuICAgICAgdHJ5IHtcbiAgICAgICAgcGFyc2VkVVJMID0gbmV3IFVSTChpbnB1dCwgYmFzZVVybClcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGYWlsZWQgdG8gcGFyc2UgVVJMIGZyb20gJyArIGlucHV0LCB7IGNhdXNlOiBlcnIgfSlcbiAgICAgIH1cblxuICAgICAgLy8gMy4gSWYgcGFyc2VkVVJMIGluY2x1ZGVzIGNyZWRlbnRpYWxzLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgaWYgKHBhcnNlZFVSTC51c2VybmFtZSB8fCBwYXJzZWRVUkwucGFzc3dvcmQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAnUmVxdWVzdCBjYW5ub3QgYmUgY29uc3RydWN0ZWQgZnJvbSBhIFVSTCB0aGF0IGluY2x1ZGVzIGNyZWRlbnRpYWxzOiAnICtcbiAgICAgICAgICAgIGlucHV0XG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgLy8gNC4gU2V0IHJlcXVlc3QgdG8gYSBuZXcgcmVxdWVzdCB3aG9zZSBVUkwgaXMgcGFyc2VkVVJMLlxuICAgICAgcmVxdWVzdCA9IG1ha2VSZXF1ZXN0KHsgdXJsTGlzdDogW3BhcnNlZFVSTF0gfSlcblxuICAgICAgLy8gNS4gU2V0IGZhbGxiYWNrTW9kZSB0byBcImNvcnNcIi5cbiAgICAgIGZhbGxiYWNrTW9kZSA9ICdjb3JzJ1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyA2LiBPdGhlcndpc2U6XG5cbiAgICAgIC8vIDcuIEFzc2VydDogaW5wdXQgaXMgYSBSZXF1ZXN0IG9iamVjdC5cbiAgICAgIGFzc2VydChpbnB1dCBpbnN0YW5jZW9mIFJlcXVlc3QpXG5cbiAgICAgIC8vIDguIFNldCByZXF1ZXN0IHRvIGlucHV04oCZcyByZXF1ZXN0LlxuICAgICAgcmVxdWVzdCA9IGlucHV0W2tTdGF0ZV1cblxuICAgICAgLy8gOS4gU2V0IHNpZ25hbCB0byBpbnB1dOKAmXMgc2lnbmFsLlxuICAgICAgc2lnbmFsID0gaW5wdXRba1NpZ25hbF1cbiAgICB9XG5cbiAgICAvLyA3LiBMZXQgb3JpZ2luIGJlIHRoaXPigJlzIHJlbGV2YW50IHNldHRpbmdzIG9iamVjdOKAmXMgb3JpZ2luLlxuICAgIGNvbnN0IG9yaWdpbiA9IHRoaXNba1JlYWxtXS5zZXR0aW5nc09iamVjdC5vcmlnaW5cblxuICAgIC8vIDguIExldCB3aW5kb3cgYmUgXCJjbGllbnRcIi5cbiAgICBsZXQgd2luZG93ID0gJ2NsaWVudCdcblxuICAgIC8vIDkuIElmIHJlcXVlc3TigJlzIHdpbmRvdyBpcyBhbiBlbnZpcm9ubWVudCBzZXR0aW5ncyBvYmplY3QgYW5kIGl0cyBvcmlnaW5cbiAgICAvLyBpcyBzYW1lIG9yaWdpbiB3aXRoIG9yaWdpbiwgdGhlbiBzZXQgd2luZG93IHRvIHJlcXVlc3TigJlzIHdpbmRvdy5cbiAgICBpZiAoXG4gICAgICByZXF1ZXN0LndpbmRvdz8uY29uc3RydWN0b3I/Lm5hbWUgPT09ICdFbnZpcm9ubWVudFNldHRpbmdzT2JqZWN0JyAmJlxuICAgICAgc2FtZU9yaWdpbihyZXF1ZXN0LndpbmRvdywgb3JpZ2luKVxuICAgICkge1xuICAgICAgd2luZG93ID0gcmVxdWVzdC53aW5kb3dcbiAgICB9XG5cbiAgICAvLyAxMC4gSWYgaW5pdFtcIndpbmRvd1wiXSBleGlzdHMgYW5kIGlzIG5vbi1udWxsLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmIChpbml0LndpbmRvdyAhPSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAnd2luZG93JyBvcHRpb24gJyR7d2luZG93fScgbXVzdCBiZSBudWxsYClcbiAgICB9XG5cbiAgICAvLyAxMS4gSWYgaW5pdFtcIndpbmRvd1wiXSBleGlzdHMsIHRoZW4gc2V0IHdpbmRvdyB0byBcIm5vLXdpbmRvd1wiLlxuICAgIGlmICgnd2luZG93JyBpbiBpbml0KSB7XG4gICAgICB3aW5kb3cgPSAnbm8td2luZG93J1xuICAgIH1cblxuICAgIC8vIDEyLiBTZXQgcmVxdWVzdCB0byBhIG5ldyByZXF1ZXN0IHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICAgIHJlcXVlc3QgPSBtYWtlUmVxdWVzdCh7XG4gICAgICAvLyBVUkwgcmVxdWVzdOKAmXMgVVJMLlxuICAgICAgLy8gdW5kaWNpIGltcGxlbWVudGF0aW9uIG5vdGU6IHRoaXMgaXMgc2V0IGFzIHRoZSBmaXJzdCBpdGVtIGluIHJlcXVlc3QncyB1cmxMaXN0IGluIG1ha2VSZXF1ZXN0XG4gICAgICAvLyBtZXRob2QgcmVxdWVzdOKAmXMgbWV0aG9kLlxuICAgICAgbWV0aG9kOiByZXF1ZXN0Lm1ldGhvZCxcbiAgICAgIC8vIGhlYWRlciBsaXN0IEEgY29weSBvZiByZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cbiAgICAgIC8vIHVuZGljaSBpbXBsZW1lbnRhdGlvbiBub3RlOiBoZWFkZXJzTGlzdCBpcyBjbG9uZWQgaW4gbWFrZVJlcXVlc3RcbiAgICAgIGhlYWRlcnNMaXN0OiByZXF1ZXN0LmhlYWRlcnNMaXN0LFxuICAgICAgLy8gdW5zYWZlLXJlcXVlc3QgZmxhZyBTZXQuXG4gICAgICB1bnNhZmVSZXF1ZXN0OiByZXF1ZXN0LnVuc2FmZVJlcXVlc3QsXG4gICAgICAvLyBjbGllbnQgVGhpc+KAmXMgcmVsZXZhbnQgc2V0dGluZ3Mgb2JqZWN0LlxuICAgICAgY2xpZW50OiB0aGlzW2tSZWFsbV0uc2V0dGluZ3NPYmplY3QsXG4gICAgICAvLyB3aW5kb3cgd2luZG93LlxuICAgICAgd2luZG93LFxuICAgICAgLy8gcHJpb3JpdHkgcmVxdWVzdOKAmXMgcHJpb3JpdHkuXG4gICAgICBwcmlvcml0eTogcmVxdWVzdC5wcmlvcml0eSxcbiAgICAgIC8vIG9yaWdpbiByZXF1ZXN04oCZcyBvcmlnaW4uIFRoZSBwcm9wYWdhdGlvbiBvZiB0aGUgb3JpZ2luIGlzIG9ubHkgc2lnbmlmaWNhbnQgZm9yIG5hdmlnYXRpb24gcmVxdWVzdHNcbiAgICAgIC8vIGJlaW5nIGhhbmRsZWQgYnkgYSBzZXJ2aWNlIHdvcmtlci4gSW4gdGhpcyBzY2VuYXJpbyBhIHJlcXVlc3QgY2FuIGhhdmUgYW4gb3JpZ2luIHRoYXQgaXMgZGlmZmVyZW50XG4gICAgICAvLyBmcm9tIHRoZSBjdXJyZW50IGNsaWVudC5cbiAgICAgIG9yaWdpbjogcmVxdWVzdC5vcmlnaW4sXG4gICAgICAvLyByZWZlcnJlciByZXF1ZXN04oCZcyByZWZlcnJlci5cbiAgICAgIHJlZmVycmVyOiByZXF1ZXN0LnJlZmVycmVyLFxuICAgICAgLy8gcmVmZXJyZXIgcG9saWN5IHJlcXVlc3TigJlzIHJlZmVycmVyIHBvbGljeS5cbiAgICAgIHJlZmVycmVyUG9saWN5OiByZXF1ZXN0LnJlZmVycmVyUG9saWN5LFxuICAgICAgLy8gbW9kZSByZXF1ZXN04oCZcyBtb2RlLlxuICAgICAgbW9kZTogcmVxdWVzdC5tb2RlLFxuICAgICAgLy8gY3JlZGVudGlhbHMgbW9kZSByZXF1ZXN04oCZcyBjcmVkZW50aWFscyBtb2RlLlxuICAgICAgY3JlZGVudGlhbHM6IHJlcXVlc3QuY3JlZGVudGlhbHMsXG4gICAgICAvLyBjYWNoZSBtb2RlIHJlcXVlc3TigJlzIGNhY2hlIG1vZGUuXG4gICAgICBjYWNoZTogcmVxdWVzdC5jYWNoZSxcbiAgICAgIC8vIHJlZGlyZWN0IG1vZGUgcmVxdWVzdOKAmXMgcmVkaXJlY3QgbW9kZS5cbiAgICAgIHJlZGlyZWN0OiByZXF1ZXN0LnJlZGlyZWN0LFxuICAgICAgLy8gaW50ZWdyaXR5IG1ldGFkYXRhIHJlcXVlc3TigJlzIGludGVncml0eSBtZXRhZGF0YS5cbiAgICAgIGludGVncml0eTogcmVxdWVzdC5pbnRlZ3JpdHksXG4gICAgICAvLyBrZWVwYWxpdmUgcmVxdWVzdOKAmXMga2VlcGFsaXZlLlxuICAgICAga2VlcGFsaXZlOiByZXF1ZXN0LmtlZXBhbGl2ZSxcbiAgICAgIC8vIHJlbG9hZC1uYXZpZ2F0aW9uIGZsYWcgcmVxdWVzdOKAmXMgcmVsb2FkLW5hdmlnYXRpb24gZmxhZy5cbiAgICAgIHJlbG9hZE5hdmlnYXRpb246IHJlcXVlc3QucmVsb2FkTmF2aWdhdGlvbixcbiAgICAgIC8vIGhpc3RvcnktbmF2aWdhdGlvbiBmbGFnIHJlcXVlc3TigJlzIGhpc3RvcnktbmF2aWdhdGlvbiBmbGFnLlxuICAgICAgaGlzdG9yeU5hdmlnYXRpb246IHJlcXVlc3QuaGlzdG9yeU5hdmlnYXRpb24sXG4gICAgICAvLyBVUkwgbGlzdCBBIGNsb25lIG9mIHJlcXVlc3TigJlzIFVSTCBsaXN0LlxuICAgICAgdXJsTGlzdDogWy4uLnJlcXVlc3QudXJsTGlzdF1cbiAgICB9KVxuXG4gICAgY29uc3QgaW5pdEhhc0tleSA9IE9iamVjdC5rZXlzKGluaXQpLmxlbmd0aCAhPT0gMFxuXG4gICAgLy8gMTMuIElmIGluaXQgaXMgbm90IGVtcHR5LCB0aGVuOlxuICAgIGlmIChpbml0SGFzS2V5KSB7XG4gICAgICAvLyAxLiBJZiByZXF1ZXN04oCZcyBtb2RlIGlzIFwibmF2aWdhdGVcIiwgdGhlbiBzZXQgaXQgdG8gXCJzYW1lLW9yaWdpblwiLlxuICAgICAgaWYgKHJlcXVlc3QubW9kZSA9PT0gJ25hdmlnYXRlJykge1xuICAgICAgICByZXF1ZXN0Lm1vZGUgPSAnc2FtZS1vcmlnaW4nXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIFVuc2V0IHJlcXVlc3TigJlzIHJlbG9hZC1uYXZpZ2F0aW9uIGZsYWcuXG4gICAgICByZXF1ZXN0LnJlbG9hZE5hdmlnYXRpb24gPSBmYWxzZVxuXG4gICAgICAvLyAzLiBVbnNldCByZXF1ZXN04oCZcyBoaXN0b3J5LW5hdmlnYXRpb24gZmxhZy5cbiAgICAgIHJlcXVlc3QuaGlzdG9yeU5hdmlnYXRpb24gPSBmYWxzZVxuXG4gICAgICAvLyA0LiBTZXQgcmVxdWVzdOKAmXMgb3JpZ2luIHRvIFwiY2xpZW50XCIuXG4gICAgICByZXF1ZXN0Lm9yaWdpbiA9ICdjbGllbnQnXG5cbiAgICAgIC8vIDUuIFNldCByZXF1ZXN04oCZcyByZWZlcnJlciB0byBcImNsaWVudFwiXG4gICAgICByZXF1ZXN0LnJlZmVycmVyID0gJ2NsaWVudCdcblxuICAgICAgLy8gNi4gU2V0IHJlcXVlc3TigJlzIHJlZmVycmVyIHBvbGljeSB0byB0aGUgZW1wdHkgc3RyaW5nLlxuICAgICAgcmVxdWVzdC5yZWZlcnJlclBvbGljeSA9ICcnXG5cbiAgICAgIC8vIDcuIFNldCByZXF1ZXN04oCZcyBVUkwgdG8gcmVxdWVzdOKAmXMgY3VycmVudCBVUkwuXG4gICAgICByZXF1ZXN0LnVybCA9IHJlcXVlc3QudXJsTGlzdFtyZXF1ZXN0LnVybExpc3QubGVuZ3RoIC0gMV1cblxuICAgICAgLy8gOC4gU2V0IHJlcXVlc3TigJlzIFVSTCBsaXN0IHRvIMKrIHJlcXVlc3TigJlzIFVSTCDCuy5cbiAgICAgIHJlcXVlc3QudXJsTGlzdCA9IFtyZXF1ZXN0LnVybF1cbiAgICB9XG5cbiAgICAvLyAxNC4gSWYgaW5pdFtcInJlZmVycmVyXCJdIGV4aXN0cywgdGhlbjpcbiAgICBpZiAoaW5pdC5yZWZlcnJlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyAxLiBMZXQgcmVmZXJyZXIgYmUgaW5pdFtcInJlZmVycmVyXCJdLlxuICAgICAgY29uc3QgcmVmZXJyZXIgPSBpbml0LnJlZmVycmVyXG5cbiAgICAgIC8vIDIuIElmIHJlZmVycmVyIGlzIHRoZSBlbXB0eSBzdHJpbmcsIHRoZW4gc2V0IHJlcXVlc3TigJlzIHJlZmVycmVyIHRvIFwibm8tcmVmZXJyZXJcIi5cbiAgICAgIGlmIChyZWZlcnJlciA9PT0gJycpIHtcbiAgICAgICAgcmVxdWVzdC5yZWZlcnJlciA9ICduby1yZWZlcnJlcidcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIDEuIExldCBwYXJzZWRSZWZlcnJlciBiZSB0aGUgcmVzdWx0IG9mIHBhcnNpbmcgcmVmZXJyZXIgd2l0aFxuICAgICAgICAvLyBiYXNlVVJMLlxuICAgICAgICAvLyAyLiBJZiBwYXJzZWRSZWZlcnJlciBpcyBmYWlsdXJlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgICBsZXQgcGFyc2VkUmVmZXJyZXJcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBwYXJzZWRSZWZlcnJlciA9IG5ldyBVUkwocmVmZXJyZXIsIGJhc2VVcmwpXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFJlZmVycmVyIFwiJHtyZWZlcnJlcn1cIiBpcyBub3QgYSB2YWxpZCBVUkwuYCwgeyBjYXVzZTogZXJyIH0pXG4gICAgICAgIH1cblxuICAgICAgICAvLyAzLiBJZiBvbmUgb2YgdGhlIGZvbGxvd2luZyBpcyB0cnVlXG4gICAgICAgIC8vIC0gcGFyc2VkUmVmZXJyZXLigJlzIHNjaGVtZSBpcyBcImFib3V0XCIgYW5kIHBhdGggaXMgdGhlIHN0cmluZyBcImNsaWVudFwiXG4gICAgICAgIC8vIC0gcGFyc2VkUmVmZXJyZXLigJlzIG9yaWdpbiBpcyBub3Qgc2FtZSBvcmlnaW4gd2l0aCBvcmlnaW5cbiAgICAgICAgLy8gdGhlbiBzZXQgcmVxdWVzdOKAmXMgcmVmZXJyZXIgdG8gXCJjbGllbnRcIi5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIChwYXJzZWRSZWZlcnJlci5wcm90b2NvbCA9PT0gJ2Fib3V0OicgJiYgcGFyc2VkUmVmZXJyZXIuaG9zdG5hbWUgPT09ICdjbGllbnQnKSB8fFxuICAgICAgICAgIChvcmlnaW4gJiYgIXNhbWVPcmlnaW4ocGFyc2VkUmVmZXJyZXIsIHRoaXNba1JlYWxtXS5zZXR0aW5nc09iamVjdC5iYXNlVXJsKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmVxdWVzdC5yZWZlcnJlciA9ICdjbGllbnQnXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gNC4gT3RoZXJ3aXNlLCBzZXQgcmVxdWVzdOKAmXMgcmVmZXJyZXIgdG8gcGFyc2VkUmVmZXJyZXIuXG4gICAgICAgICAgcmVxdWVzdC5yZWZlcnJlciA9IHBhcnNlZFJlZmVycmVyXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAxNS4gSWYgaW5pdFtcInJlZmVycmVyUG9saWN5XCJdIGV4aXN0cywgdGhlbiBzZXQgcmVxdWVzdOKAmXMgcmVmZXJyZXIgcG9saWN5XG4gICAgLy8gdG8gaXQuXG4gICAgaWYgKGluaXQucmVmZXJyZXJQb2xpY3kgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVxdWVzdC5yZWZlcnJlclBvbGljeSA9IGluaXQucmVmZXJyZXJQb2xpY3lcbiAgICB9XG5cbiAgICAvLyAxNi4gTGV0IG1vZGUgYmUgaW5pdFtcIm1vZGVcIl0gaWYgaXQgZXhpc3RzLCBhbmQgZmFsbGJhY2tNb2RlIG90aGVyd2lzZS5cbiAgICBsZXQgbW9kZVxuICAgIGlmIChpbml0Lm1vZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbW9kZSA9IGluaXQubW9kZVxuICAgIH0gZWxzZSB7XG4gICAgICBtb2RlID0gZmFsbGJhY2tNb2RlXG4gICAgfVxuXG4gICAgLy8gMTcuIElmIG1vZGUgaXMgXCJuYXZpZ2F0ZVwiLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmIChtb2RlID09PSAnbmF2aWdhdGUnKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ1JlcXVlc3QgY29uc3RydWN0b3InLFxuICAgICAgICBtZXNzYWdlOiAnaW52YWxpZCByZXF1ZXN0IG1vZGUgbmF2aWdhdGUuJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAxOC4gSWYgbW9kZSBpcyBub24tbnVsbCwgc2V0IHJlcXVlc3TigJlzIG1vZGUgdG8gbW9kZS5cbiAgICBpZiAobW9kZSAhPSBudWxsKSB7XG4gICAgICByZXF1ZXN0Lm1vZGUgPSBtb2RlXG4gICAgfVxuXG4gICAgLy8gMTkuIElmIGluaXRbXCJjcmVkZW50aWFsc1wiXSBleGlzdHMsIHRoZW4gc2V0IHJlcXVlc3TigJlzIGNyZWRlbnRpYWxzIG1vZGVcbiAgICAvLyB0byBpdC5cbiAgICBpZiAoaW5pdC5jcmVkZW50aWFscyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXF1ZXN0LmNyZWRlbnRpYWxzID0gaW5pdC5jcmVkZW50aWFsc1xuICAgIH1cblxuICAgIC8vIDE4LiBJZiBpbml0W1wiY2FjaGVcIl0gZXhpc3RzLCB0aGVuIHNldCByZXF1ZXN04oCZcyBjYWNoZSBtb2RlIHRvIGl0LlxuICAgIGlmIChpbml0LmNhY2hlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlcXVlc3QuY2FjaGUgPSBpbml0LmNhY2hlXG4gICAgfVxuXG4gICAgLy8gMjEuIElmIHJlcXVlc3TigJlzIGNhY2hlIG1vZGUgaXMgXCJvbmx5LWlmLWNhY2hlZFwiIGFuZCByZXF1ZXN04oCZcyBtb2RlIGlzXG4gICAgLy8gbm90IFwic2FtZS1vcmlnaW5cIiwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAocmVxdWVzdC5jYWNoZSA9PT0gJ29ubHktaWYtY2FjaGVkJyAmJiByZXF1ZXN0Lm1vZGUgIT09ICdzYW1lLW9yaWdpbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIFwiJ29ubHktaWYtY2FjaGVkJyBjYW4gYmUgc2V0IG9ubHkgd2l0aCAnc2FtZS1vcmlnaW4nIG1vZGVcIlxuICAgICAgKVxuICAgIH1cblxuICAgIC8vIDIyLiBJZiBpbml0W1wicmVkaXJlY3RcIl0gZXhpc3RzLCB0aGVuIHNldCByZXF1ZXN04oCZcyByZWRpcmVjdCBtb2RlIHRvIGl0LlxuICAgIGlmIChpbml0LnJlZGlyZWN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlcXVlc3QucmVkaXJlY3QgPSBpbml0LnJlZGlyZWN0XG4gICAgfVxuXG4gICAgLy8gMjMuIElmIGluaXRbXCJpbnRlZ3JpdHlcIl0gZXhpc3RzLCB0aGVuIHNldCByZXF1ZXN04oCZcyBpbnRlZ3JpdHkgbWV0YWRhdGEgdG8gaXQuXG4gICAgaWYgKGluaXQuaW50ZWdyaXR5ICE9IG51bGwpIHtcbiAgICAgIHJlcXVlc3QuaW50ZWdyaXR5ID0gU3RyaW5nKGluaXQuaW50ZWdyaXR5KVxuICAgIH1cblxuICAgIC8vIDI0LiBJZiBpbml0W1wia2VlcGFsaXZlXCJdIGV4aXN0cywgdGhlbiBzZXQgcmVxdWVzdOKAmXMga2VlcGFsaXZlIHRvIGl0LlxuICAgIGlmIChpbml0LmtlZXBhbGl2ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXF1ZXN0LmtlZXBhbGl2ZSA9IEJvb2xlYW4oaW5pdC5rZWVwYWxpdmUpXG4gICAgfVxuXG4gICAgLy8gMjUuIElmIGluaXRbXCJtZXRob2RcIl0gZXhpc3RzLCB0aGVuOlxuICAgIGlmIChpbml0Lm1ldGhvZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyAxLiBMZXQgbWV0aG9kIGJlIGluaXRbXCJtZXRob2RcIl0uXG4gICAgICBsZXQgbWV0aG9kID0gaW5pdC5tZXRob2RcblxuICAgICAgLy8gMi4gSWYgbWV0aG9kIGlzIG5vdCBhIG1ldGhvZCBvciBtZXRob2QgaXMgYSBmb3JiaWRkZW4gbWV0aG9kLCB0aGVuXG4gICAgICAvLyB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGlmICghaXNWYWxpZEhUVFBUb2tlbihtZXRob2QpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCcke21ldGhvZH0nIGlzIG5vdCBhIHZhbGlkIEhUVFAgbWV0aG9kLmApXG4gICAgICB9XG5cbiAgICAgIGlmIChmb3JiaWRkZW5NZXRob2RzU2V0LmhhcyhtZXRob2QudG9VcHBlckNhc2UoKSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJyR7bWV0aG9kfScgSFRUUCBtZXRob2QgaXMgdW5zdXBwb3J0ZWQuYClcbiAgICAgIH1cblxuICAgICAgLy8gMy4gTm9ybWFsaXplIG1ldGhvZC5cbiAgICAgIG1ldGhvZCA9IG5vcm1hbGl6ZU1ldGhvZFJlY29yZFttZXRob2RdID8/IG5vcm1hbGl6ZU1ldGhvZChtZXRob2QpXG5cbiAgICAgIC8vIDQuIFNldCByZXF1ZXN04oCZcyBtZXRob2QgdG8gbWV0aG9kLlxuICAgICAgcmVxdWVzdC5tZXRob2QgPSBtZXRob2RcbiAgICB9XG5cbiAgICAvLyAyNi4gSWYgaW5pdFtcInNpZ25hbFwiXSBleGlzdHMsIHRoZW4gc2V0IHNpZ25hbCB0byBpdC5cbiAgICBpZiAoaW5pdC5zaWduYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgc2lnbmFsID0gaW5pdC5zaWduYWxcbiAgICB9XG5cbiAgICAvLyAyNy4gU2V0IHRoaXPigJlzIHJlcXVlc3QgdG8gcmVxdWVzdC5cbiAgICB0aGlzW2tTdGF0ZV0gPSByZXF1ZXN0XG5cbiAgICAvLyAyOC4gU2V0IHRoaXPigJlzIHNpZ25hbCB0byBhIG5ldyBBYm9ydFNpZ25hbCBvYmplY3Qgd2l0aCB0aGlz4oCZcyByZWxldmFudFxuICAgIC8vIFJlYWxtLlxuICAgIC8vIFRPRE86IGNvdWxkIHRoaXMgYmUgc2ltcGxpZmllZCB3aXRoIEFib3J0U2lnbmFsLmFueVxuICAgIC8vIChodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2RvbS1hYm9ydHNpZ25hbC1hbnkpXG4gICAgY29uc3QgYWMgPSBuZXcgQWJvcnRDb250cm9sbGVyKClcbiAgICB0aGlzW2tTaWduYWxdID0gYWMuc2lnbmFsXG4gICAgdGhpc1trU2lnbmFsXVtrUmVhbG1dID0gdGhpc1trUmVhbG1dXG5cbiAgICAvLyAyOS4gSWYgc2lnbmFsIGlzIG5vdCBudWxsLCB0aGVuIG1ha2UgdGhpc+KAmXMgc2lnbmFsIGZvbGxvdyBzaWduYWwuXG4gICAgaWYgKHNpZ25hbCAhPSBudWxsKSB7XG4gICAgICBpZiAoXG4gICAgICAgICFzaWduYWwgfHxcbiAgICAgICAgdHlwZW9mIHNpZ25hbC5hYm9ydGVkICE9PSAnYm9vbGVhbicgfHxcbiAgICAgICAgdHlwZW9mIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyICE9PSAnZnVuY3Rpb24nXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICBcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ1JlcXVlc3QnOiBtZW1iZXIgc2lnbmFsIGlzIG5vdCBvZiB0eXBlIEFib3J0U2lnbmFsLlwiXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgIGFjLmFib3J0KHNpZ25hbC5yZWFzb24pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBLZWVwIGEgc3Ryb25nIHJlZiB0byBhYyB3aGlsZSByZXF1ZXN0IG9iamVjdFxuICAgICAgICAvLyBpcyBhbGl2ZS4gVGhpcyBpcyBuZWVkZWQgdG8gcHJldmVudCBBYm9ydENvbnRyb2xsZXJcbiAgICAgICAgLy8gZnJvbSBiZWluZyBwcmVtYXR1cmVseSBnYXJiYWdlIGNvbGxlY3RlZC5cbiAgICAgICAgLy8gU2VlLCBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMTkyNi5cbiAgICAgICAgdGhpc1trQWJvcnRDb250cm9sbGVyXSA9IGFjXG5cbiAgICAgICAgY29uc3QgYWNSZWYgPSBuZXcgV2Vha1JlZihhYylcbiAgICAgICAgY29uc3QgYWJvcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3QgYWMgPSBhY1JlZi5kZXJlZigpXG4gICAgICAgICAgaWYgKGFjICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGFjLmFib3J0KHRoaXMucmVhc29uKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoaXJkLXBhcnR5IEFib3J0Q29udHJvbGxlcnMgbWF5IG5vdCB3b3JrIHdpdGggdGhlc2UuXG4gICAgICAgIC8vIFNlZSwgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvcHVsbC8xOTEwI2lzc3VlY29tbWVudC0xNDY0NDk1NjE5LlxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIElmIHRoZSBtYXggYW1vdW50IG9mIGxpc3RlbmVycyBpcyBlcXVhbCB0byB0aGUgZGVmYXVsdCwgaW5jcmVhc2UgaXRcbiAgICAgICAgICAvLyBUaGlzIGlzIG9ubHkgYXZhaWxhYmxlIGluIG5vZGUgPj0gdjE5LjkuMFxuICAgICAgICAgIGlmICh0eXBlb2YgZ2V0TWF4TGlzdGVuZXJzID09PSAnZnVuY3Rpb24nICYmIGdldE1heExpc3RlbmVycyhzaWduYWwpID09PSBkZWZhdWx0TWF4TGlzdGVuZXJzKSB7XG4gICAgICAgICAgICBzZXRNYXhMaXN0ZW5lcnMoMTAwLCBzaWduYWwpXG4gICAgICAgICAgfSBlbHNlIGlmIChnZXRFdmVudExpc3RlbmVycyhzaWduYWwsICdhYm9ydCcpLmxlbmd0aCA+PSBkZWZhdWx0TWF4TGlzdGVuZXJzKSB7XG4gICAgICAgICAgICBzZXRNYXhMaXN0ZW5lcnMoMTAwLCBzaWduYWwpXG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIHt9XG5cbiAgICAgICAgdXRpbC5hZGRBYm9ydExpc3RlbmVyKHNpZ25hbCwgYWJvcnQpXG4gICAgICAgIHJlcXVlc3RGaW5hbGl6ZXIucmVnaXN0ZXIoYWMsIHsgc2lnbmFsLCBhYm9ydCB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDMwLiBTZXQgdGhpc+KAmXMgaGVhZGVycyB0byBhIG5ldyBIZWFkZXJzIG9iamVjdCB3aXRoIHRoaXPigJlzIHJlbGV2YW50XG4gICAgLy8gUmVhbG0sIHdob3NlIGhlYWRlciBsaXN0IGlzIHJlcXVlc3TigJlzIGhlYWRlciBsaXN0IGFuZCBndWFyZCBpc1xuICAgIC8vIFwicmVxdWVzdFwiLlxuICAgIHRoaXNba0hlYWRlcnNdID0gbmV3IEhlYWRlcnMoa0NvbnN0cnVjdClcbiAgICB0aGlzW2tIZWFkZXJzXVtrSGVhZGVyc0xpc3RdID0gcmVxdWVzdC5oZWFkZXJzTGlzdFxuICAgIHRoaXNba0hlYWRlcnNdW2tHdWFyZF0gPSAncmVxdWVzdCdcbiAgICB0aGlzW2tIZWFkZXJzXVtrUmVhbG1dID0gdGhpc1trUmVhbG1dXG5cbiAgICAvLyAzMS4gSWYgdGhpc+KAmXMgcmVxdWVzdOKAmXMgbW9kZSBpcyBcIm5vLWNvcnNcIiwgdGhlbjpcbiAgICBpZiAobW9kZSA9PT0gJ25vLWNvcnMnKSB7XG4gICAgICAvLyAxLiBJZiB0aGlz4oCZcyByZXF1ZXN04oCZcyBtZXRob2QgaXMgbm90IGEgQ09SUy1zYWZlbGlzdGVkIG1ldGhvZCxcbiAgICAgIC8vIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICBpZiAoIWNvcnNTYWZlTGlzdGVkTWV0aG9kc1NldC5oYXMocmVxdWVzdC5tZXRob2QpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgYCcke3JlcXVlc3QubWV0aG9kfSBpcyB1bnN1cHBvcnRlZCBpbiBuby1jb3JzIG1vZGUuYFxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIFNldCB0aGlz4oCZcyBoZWFkZXJz4oCZcyBndWFyZCB0byBcInJlcXVlc3Qtbm8tY29yc1wiLlxuICAgICAgdGhpc1trSGVhZGVyc11ba0d1YXJkXSA9ICdyZXF1ZXN0LW5vLWNvcnMnXG4gICAgfVxuXG4gICAgLy8gMzIuIElmIGluaXQgaXMgbm90IGVtcHR5LCB0aGVuOlxuICAgIGlmIChpbml0SGFzS2V5KSB7XG4gICAgICAvKiogQHR5cGUge0hlYWRlcnNMaXN0fSAqL1xuICAgICAgY29uc3QgaGVhZGVyc0xpc3QgPSB0aGlzW2tIZWFkZXJzXVtrSGVhZGVyc0xpc3RdXG4gICAgICAvLyAxLiBMZXQgaGVhZGVycyBiZSBhIGNvcHkgb2YgdGhpc+KAmXMgaGVhZGVycyBhbmQgaXRzIGFzc29jaWF0ZWQgaGVhZGVyXG4gICAgICAvLyBsaXN0LlxuICAgICAgLy8gMi4gSWYgaW5pdFtcImhlYWRlcnNcIl0gZXhpc3RzLCB0aGVuIHNldCBoZWFkZXJzIHRvIGluaXRbXCJoZWFkZXJzXCJdLlxuICAgICAgY29uc3QgaGVhZGVycyA9IGluaXQuaGVhZGVycyAhPT0gdW5kZWZpbmVkID8gaW5pdC5oZWFkZXJzIDogbmV3IEhlYWRlcnNMaXN0KGhlYWRlcnNMaXN0KVxuXG4gICAgICAvLyAzLiBFbXB0eSB0aGlz4oCZcyBoZWFkZXJz4oCZcyBoZWFkZXIgbGlzdC5cbiAgICAgIGhlYWRlcnNMaXN0LmNsZWFyKClcblxuICAgICAgLy8gNC4gSWYgaGVhZGVycyBpcyBhIEhlYWRlcnMgb2JqZWN0LCB0aGVuIGZvciBlYWNoIGhlYWRlciBpbiBpdHMgaGVhZGVyXG4gICAgICAvLyBsaXN0LCBhcHBlbmQgaGVhZGVy4oCZcyBuYW1lL2hlYWRlcuKAmXMgdmFsdWUgdG8gdGhpc+KAmXMgaGVhZGVycy5cbiAgICAgIGlmIChoZWFkZXJzIGluc3RhbmNlb2YgSGVhZGVyc0xpc3QpIHtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIGhlYWRlcnMpIHtcbiAgICAgICAgICBoZWFkZXJzTGlzdC5hcHBlbmQoa2V5LCB2YWwpXG4gICAgICAgIH1cbiAgICAgICAgLy8gTm90ZTogQ29weSB0aGUgYHNldC1jb29raWVgIG1ldGEtZGF0YS5cbiAgICAgICAgaGVhZGVyc0xpc3QuY29va2llcyA9IGhlYWRlcnMuY29va2llc1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gNS4gT3RoZXJ3aXNlLCBmaWxsIHRoaXPigJlzIGhlYWRlcnMgd2l0aCBoZWFkZXJzLlxuICAgICAgICBmaWxsSGVhZGVycyh0aGlzW2tIZWFkZXJzXSwgaGVhZGVycylcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAzMy4gTGV0IGlucHV0Qm9keSBiZSBpbnB1dOKAmXMgcmVxdWVzdOKAmXMgYm9keSBpZiBpbnB1dCBpcyBhIFJlcXVlc3RcbiAgICAvLyBvYmplY3Q7IG90aGVyd2lzZSBudWxsLlxuICAgIGNvbnN0IGlucHV0Qm9keSA9IGlucHV0IGluc3RhbmNlb2YgUmVxdWVzdCA/IGlucHV0W2tTdGF0ZV0uYm9keSA6IG51bGxcblxuICAgIC8vIDM0LiBJZiBlaXRoZXIgaW5pdFtcImJvZHlcIl0gZXhpc3RzIGFuZCBpcyBub24tbnVsbCBvciBpbnB1dEJvZHkgaXNcbiAgICAvLyBub24tbnVsbCwgYW5kIHJlcXVlc3TigJlzIG1ldGhvZCBpcyBgR0VUYCBvciBgSEVBRGAsIHRoZW4gdGhyb3cgYVxuICAgIC8vIFR5cGVFcnJvci5cbiAgICBpZiAoXG4gICAgICAoaW5pdC5ib2R5ICE9IG51bGwgfHwgaW5wdXRCb2R5ICE9IG51bGwpICYmXG4gICAgICAocmVxdWVzdC5tZXRob2QgPT09ICdHRVQnIHx8IHJlcXVlc3QubWV0aG9kID09PSAnSEVBRCcpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZXF1ZXN0IHdpdGggR0VUL0hFQUQgbWV0aG9kIGNhbm5vdCBoYXZlIGJvZHkuJylcbiAgICB9XG5cbiAgICAvLyAzNS4gTGV0IGluaXRCb2R5IGJlIG51bGwuXG4gICAgbGV0IGluaXRCb2R5ID0gbnVsbFxuXG4gICAgLy8gMzYuIElmIGluaXRbXCJib2R5XCJdIGV4aXN0cyBhbmQgaXMgbm9uLW51bGwsIHRoZW46XG4gICAgaWYgKGluaXQuYm9keSAhPSBudWxsKSB7XG4gICAgICAvLyAxLiBMZXQgQ29udGVudC1UeXBlIGJlIG51bGwuXG4gICAgICAvLyAyLiBTZXQgaW5pdEJvZHkgYW5kIENvbnRlbnQtVHlwZSB0byB0aGUgcmVzdWx0IG9mIGV4dHJhY3RpbmdcbiAgICAgIC8vIGluaXRbXCJib2R5XCJdLCB3aXRoIGtlZXBhbGl2ZSBzZXQgdG8gcmVxdWVzdOKAmXMga2VlcGFsaXZlLlxuICAgICAgY29uc3QgW2V4dHJhY3RlZEJvZHksIGNvbnRlbnRUeXBlXSA9IGV4dHJhY3RCb2R5KFxuICAgICAgICBpbml0LmJvZHksXG4gICAgICAgIHJlcXVlc3Qua2VlcGFsaXZlXG4gICAgICApXG4gICAgICBpbml0Qm9keSA9IGV4dHJhY3RlZEJvZHlcblxuICAgICAgLy8gMywgSWYgQ29udGVudC1UeXBlIGlzIG5vbi1udWxsIGFuZCB0aGlz4oCZcyBoZWFkZXJz4oCZcyBoZWFkZXIgbGlzdCBkb2VzXG4gICAgICAvLyBub3QgY29udGFpbiBgQ29udGVudC1UeXBlYCwgdGhlbiBhcHBlbmQgYENvbnRlbnQtVHlwZWAvQ29udGVudC1UeXBlIHRvXG4gICAgICAvLyB0aGlz4oCZcyBoZWFkZXJzLlxuICAgICAgaWYgKGNvbnRlbnRUeXBlICYmICF0aGlzW2tIZWFkZXJzXVtrSGVhZGVyc0xpc3RdLmNvbnRhaW5zKCdjb250ZW50LXR5cGUnKSkge1xuICAgICAgICB0aGlzW2tIZWFkZXJzXS5hcHBlbmQoJ2NvbnRlbnQtdHlwZScsIGNvbnRlbnRUeXBlKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDM3LiBMZXQgaW5wdXRPckluaXRCb2R5IGJlIGluaXRCb2R5IGlmIGl0IGlzIG5vbi1udWxsOyBvdGhlcndpc2VcbiAgICAvLyBpbnB1dEJvZHkuXG4gICAgY29uc3QgaW5wdXRPckluaXRCb2R5ID0gaW5pdEJvZHkgPz8gaW5wdXRCb2R5XG5cbiAgICAvLyAzOC4gSWYgaW5wdXRPckluaXRCb2R5IGlzIG5vbi1udWxsIGFuZCBpbnB1dE9ySW5pdEJvZHnigJlzIHNvdXJjZSBpc1xuICAgIC8vIG51bGwsIHRoZW46XG4gICAgaWYgKGlucHV0T3JJbml0Qm9keSAhPSBudWxsICYmIGlucHV0T3JJbml0Qm9keS5zb3VyY2UgPT0gbnVsbCkge1xuICAgICAgLy8gMS4gSWYgaW5pdEJvZHkgaXMgbm9uLW51bGwgYW5kIGluaXRbXCJkdXBsZXhcIl0gZG9lcyBub3QgZXhpc3QsXG4gICAgICAvLyAgICB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgaWYgKGluaXRCb2R5ICE9IG51bGwgJiYgaW5pdC5kdXBsZXggPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZXF1ZXN0SW5pdDogZHVwbGV4IG9wdGlvbiBpcyByZXF1aXJlZCB3aGVuIHNlbmRpbmcgYSBib2R5LicpXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIElmIHRoaXPigJlzIHJlcXVlc3TigJlzIG1vZGUgaXMgbmVpdGhlciBcInNhbWUtb3JpZ2luXCIgbm9yIFwiY29yc1wiLFxuICAgICAgLy8gdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGlmIChyZXF1ZXN0Lm1vZGUgIT09ICdzYW1lLW9yaWdpbicgJiYgcmVxdWVzdC5tb2RlICE9PSAnY29ycycpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAnSWYgcmVxdWVzdCBpcyBtYWRlIGZyb20gUmVhZGFibGVTdHJlYW0sIG1vZGUgc2hvdWxkIGJlIFwic2FtZS1vcmlnaW5cIiBvciBcImNvcnNcIidcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICAvLyAzLiBTZXQgdGhpc+KAmXMgcmVxdWVzdOKAmXMgdXNlLUNPUlMtcHJlZmxpZ2h0IGZsYWcuXG4gICAgICByZXF1ZXN0LnVzZUNPUlNQcmVmbGlnaHRGbGFnID0gdHJ1ZVxuICAgIH1cblxuICAgIC8vIDM5LiBMZXQgZmluYWxCb2R5IGJlIGlucHV0T3JJbml0Qm9keS5cbiAgICBsZXQgZmluYWxCb2R5ID0gaW5wdXRPckluaXRCb2R5XG5cbiAgICAvLyA0MC4gSWYgaW5pdEJvZHkgaXMgbnVsbCBhbmQgaW5wdXRCb2R5IGlzIG5vbi1udWxsLCB0aGVuOlxuICAgIGlmIChpbml0Qm9keSA9PSBudWxsICYmIGlucHV0Qm9keSAhPSBudWxsKSB7XG4gICAgICAvLyAxLiBJZiBpbnB1dCBpcyB1bnVzYWJsZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGlmICh1dGlsLmlzRGlzdHVyYmVkKGlucHV0Qm9keS5zdHJlYW0pIHx8IGlucHV0Qm9keS5zdHJlYW0ubG9ja2VkKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgJ0Nhbm5vdCBjb25zdHJ1Y3QgYSBSZXF1ZXN0IHdpdGggYSBSZXF1ZXN0IG9iamVjdCB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gdXNlZC4nXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgLy8gMi4gU2V0IGZpbmFsQm9keSB0byB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEgcHJveHkgZm9yIGlucHV0Qm9keS5cbiAgICAgIGlmICghVHJhbnNmb3JtU3RyZWFtKSB7XG4gICAgICAgIFRyYW5zZm9ybVN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbS93ZWInKS5UcmFuc2Zvcm1TdHJlYW1cbiAgICAgIH1cblxuICAgICAgLy8gaHR0cHM6Ly9zdHJlYW1zLnNwZWMud2hhdHdnLm9yZy8jcmVhZGFibGVzdHJlYW0tY3JlYXRlLWEtcHJveHlcbiAgICAgIGNvbnN0IGlkZW50aXR5VHJhbnNmb3JtID0gbmV3IFRyYW5zZm9ybVN0cmVhbSgpXG4gICAgICBpbnB1dEJvZHkuc3RyZWFtLnBpcGVUaHJvdWdoKGlkZW50aXR5VHJhbnNmb3JtKVxuICAgICAgZmluYWxCb2R5ID0ge1xuICAgICAgICBzb3VyY2U6IGlucHV0Qm9keS5zb3VyY2UsXG4gICAgICAgIGxlbmd0aDogaW5wdXRCb2R5Lmxlbmd0aCxcbiAgICAgICAgc3RyZWFtOiBpZGVudGl0eVRyYW5zZm9ybS5yZWFkYWJsZVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDQxLiBTZXQgdGhpc+KAmXMgcmVxdWVzdOKAmXMgYm9keSB0byBmaW5hbEJvZHkuXG4gICAgdGhpc1trU3RhdGVdLmJvZHkgPSBmaW5hbEJvZHlcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVxdWVzdOKAmXMgSFRUUCBtZXRob2QsIHdoaWNoIGlzIFwiR0VUXCIgYnkgZGVmYXVsdC5cbiAgZ2V0IG1ldGhvZCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBtZXRob2QgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc+KAmXMgcmVxdWVzdOKAmXMgbWV0aG9kLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ubWV0aG9kXG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSBVUkwgb2YgcmVxdWVzdCBhcyBhIHN0cmluZy5cbiAgZ2V0IHVybCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSB1cmwgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc+KAmXMgcmVxdWVzdOKAmXMgVVJMLCBzZXJpYWxpemVkLlxuICAgIHJldHVybiBVUkxTZXJpYWxpemVyKHRoaXNba1N0YXRlXS51cmwpXG4gIH1cblxuICAvLyBSZXR1cm5zIGEgSGVhZGVycyBvYmplY3QgY29uc2lzdGluZyBvZiB0aGUgaGVhZGVycyBhc3NvY2lhdGVkIHdpdGggcmVxdWVzdC5cbiAgLy8gTm90ZSB0aGF0IGhlYWRlcnMgYWRkZWQgaW4gdGhlIG5ldHdvcmsgbGF5ZXIgYnkgdGhlIHVzZXIgYWdlbnQgd2lsbCBub3RcbiAgLy8gYmUgYWNjb3VudGVkIGZvciBpbiB0aGlzIG9iamVjdCwgZS5nLiwgdGhlIFwiSG9zdFwiIGhlYWRlci5cbiAgZ2V0IGhlYWRlcnMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgaGVhZGVycyBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlz4oCZcyBoZWFkZXJzLlxuICAgIHJldHVybiB0aGlzW2tIZWFkZXJzXVxuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUga2luZCBvZiByZXNvdXJjZSByZXF1ZXN0ZWQgYnkgcmVxdWVzdCwgZS5nLiwgXCJkb2N1bWVudFwiXG4gIC8vIG9yIFwic2NyaXB0XCIuXG4gIGdldCBkZXN0aW5hdGlvbiAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBkZXN0aW5hdGlvbiBnZXR0ZXIgYXJlIHRvIHJldHVybiB0aGlz4oCZcyByZXF1ZXN04oCZcyBkZXN0aW5hdGlvbi5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmRlc3RpbmF0aW9uXG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSByZWZlcnJlciBvZiByZXF1ZXN0LiBJdHMgdmFsdWUgY2FuIGJlIGEgc2FtZS1vcmlnaW4gVVJMIGlmXG4gIC8vIGV4cGxpY2l0bHkgc2V0IGluIGluaXQsIHRoZSBlbXB0eSBzdHJpbmcgdG8gaW5kaWNhdGUgbm8gcmVmZXJyZXIsIGFuZFxuICAvLyBcImFib3V0OmNsaWVudFwiIHdoZW4gZGVmYXVsdGluZyB0byB0aGUgZ2xvYmFs4oCZcyBkZWZhdWx0LiBUaGlzIGlzIHVzZWRcbiAgLy8gZHVyaW5nIGZldGNoaW5nIHRvIGRldGVybWluZSB0aGUgdmFsdWUgb2YgdGhlIGBSZWZlcmVyYCBoZWFkZXIgb2YgdGhlXG4gIC8vIHJlcXVlc3QgYmVpbmcgbWFkZS5cbiAgZ2V0IHJlZmVycmVyICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gMS4gSWYgdGhpc+KAmXMgcmVxdWVzdOKAmXMgcmVmZXJyZXIgaXMgXCJuby1yZWZlcnJlclwiLCB0aGVuIHJldHVybiB0aGVcbiAgICAvLyBlbXB0eSBzdHJpbmcuXG4gICAgaWYgKHRoaXNba1N0YXRlXS5yZWZlcnJlciA9PT0gJ25vLXJlZmVycmVyJykge1xuICAgICAgcmV0dXJuICcnXG4gICAgfVxuXG4gICAgLy8gMi4gSWYgdGhpc+KAmXMgcmVxdWVzdOKAmXMgcmVmZXJyZXIgaXMgXCJjbGllbnRcIiwgdGhlbiByZXR1cm5cbiAgICAvLyBcImFib3V0OmNsaWVudFwiLlxuICAgIGlmICh0aGlzW2tTdGF0ZV0ucmVmZXJyZXIgPT09ICdjbGllbnQnKSB7XG4gICAgICByZXR1cm4gJ2Fib3V0OmNsaWVudCdcbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gdGhpc+KAmXMgcmVxdWVzdOKAmXMgcmVmZXJyZXIsIHNlcmlhbGl6ZWQuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5yZWZlcnJlci50b1N0cmluZygpXG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSByZWZlcnJlciBwb2xpY3kgYXNzb2NpYXRlZCB3aXRoIHJlcXVlc3QuXG4gIC8vIFRoaXMgaXMgdXNlZCBkdXJpbmcgZmV0Y2hpbmcgdG8gY29tcHV0ZSB0aGUgdmFsdWUgb2YgdGhlIHJlcXVlc3TigJlzXG4gIC8vIHJlZmVycmVyLlxuICBnZXQgcmVmZXJyZXJQb2xpY3kgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgcmVmZXJyZXJQb2xpY3kgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc+KAmXMgcmVxdWVzdOKAmXMgcmVmZXJyZXIgcG9saWN5LlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ucmVmZXJyZXJQb2xpY3lcbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIG1vZGUgYXNzb2NpYXRlZCB3aXRoIHJlcXVlc3QsIHdoaWNoIGlzIGEgc3RyaW5nIGluZGljYXRpbmdcbiAgLy8gd2hldGhlciB0aGUgcmVxdWVzdCB3aWxsIHVzZSBDT1JTLCBvciB3aWxsIGJlIHJlc3RyaWN0ZWQgdG8gc2FtZS1vcmlnaW5cbiAgLy8gVVJMcy5cbiAgZ2V0IG1vZGUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgbW9kZSBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlz4oCZcyByZXF1ZXN04oCZcyBtb2RlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ubW9kZVxuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgY3JlZGVudGlhbHMgbW9kZSBhc3NvY2lhdGVkIHdpdGggcmVxdWVzdCxcbiAgLy8gd2hpY2ggaXMgYSBzdHJpbmcgaW5kaWNhdGluZyB3aGV0aGVyIGNyZWRlbnRpYWxzIHdpbGwgYmUgc2VudCB3aXRoIHRoZVxuICAvLyByZXF1ZXN0IGFsd2F5cywgbmV2ZXIsIG9yIG9ubHkgd2hlbiBzZW50IHRvIGEgc2FtZS1vcmlnaW4gVVJMLlxuICBnZXQgY3JlZGVudGlhbHMgKCkge1xuICAgIC8vIFRoZSBjcmVkZW50aWFscyBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlz4oCZcyByZXF1ZXN04oCZcyBjcmVkZW50aWFscyBtb2RlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uY3JlZGVudGlhbHNcbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIGNhY2hlIG1vZGUgYXNzb2NpYXRlZCB3aXRoIHJlcXVlc3QsXG4gIC8vIHdoaWNoIGlzIGEgc3RyaW5nIGluZGljYXRpbmcgaG93IHRoZSByZXF1ZXN0IHdpbGxcbiAgLy8gaW50ZXJhY3Qgd2l0aCB0aGUgYnJvd3NlcuKAmXMgY2FjaGUgd2hlbiBmZXRjaGluZy5cbiAgZ2V0IGNhY2hlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIGNhY2hlIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXPigJlzIHJlcXVlc3TigJlzIGNhY2hlIG1vZGUuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5jYWNoZVxuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgcmVkaXJlY3QgbW9kZSBhc3NvY2lhdGVkIHdpdGggcmVxdWVzdCxcbiAgLy8gd2hpY2ggaXMgYSBzdHJpbmcgaW5kaWNhdGluZyBob3cgcmVkaXJlY3RzIGZvciB0aGVcbiAgLy8gcmVxdWVzdCB3aWxsIGJlIGhhbmRsZWQgZHVyaW5nIGZldGNoaW5nLiBBIHJlcXVlc3RcbiAgLy8gd2lsbCBmb2xsb3cgcmVkaXJlY3RzIGJ5IGRlZmF1bHQuXG4gIGdldCByZWRpcmVjdCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSByZWRpcmVjdCBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlz4oCZcyByZXF1ZXN04oCZcyByZWRpcmVjdCBtb2RlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ucmVkaXJlY3RcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVxdWVzdOKAmXMgc3VicmVzb3VyY2UgaW50ZWdyaXR5IG1ldGFkYXRhLCB3aGljaCBpcyBhXG4gIC8vIGNyeXB0b2dyYXBoaWMgaGFzaCBvZiB0aGUgcmVzb3VyY2UgYmVpbmcgZmV0Y2hlZC4gSXRzIHZhbHVlXG4gIC8vIGNvbnNpc3RzIG9mIG11bHRpcGxlIGhhc2hlcyBzZXBhcmF0ZWQgYnkgd2hpdGVzcGFjZS4gW1NSSV1cbiAgZ2V0IGludGVncml0eSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBpbnRlZ3JpdHkgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc+KAmXMgcmVxdWVzdOKAmXMgaW50ZWdyaXR5XG4gICAgLy8gbWV0YWRhdGEuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5pbnRlZ3JpdHlcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgcmVxdWVzdCBjYW4gb3V0bGl2ZSB0aGVcbiAgLy8gZ2xvYmFsIGluIHdoaWNoIGl0IHdhcyBjcmVhdGVkLlxuICBnZXQga2VlcGFsaXZlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIGtlZXBhbGl2ZSBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlz4oCZcyByZXF1ZXN04oCZcyBrZWVwYWxpdmUuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5rZWVwYWxpdmVcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgcmVxdWVzdCBpcyBmb3IgYSByZWxvYWRcbiAgLy8gbmF2aWdhdGlvbi5cbiAgZ2V0IGlzUmVsb2FkTmF2aWdhdGlvbiAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBpc1JlbG9hZE5hdmlnYXRpb24gZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdHJ1ZSBpZiB0aGlz4oCZc1xuICAgIC8vIHJlcXVlc3TigJlzIHJlbG9hZC1uYXZpZ2F0aW9uIGZsYWcgaXMgc2V0OyBvdGhlcndpc2UgZmFsc2UuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5yZWxvYWROYXZpZ2F0aW9uXG4gIH1cblxuICAvLyBSZXR1cm5zIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90IHJlcXVlc3QgaXMgZm9yIGEgaGlzdG9yeVxuICAvLyBuYXZpZ2F0aW9uIChhLmsuYS4gYmFjay1mb3dhcmQgbmF2aWdhdGlvbikuXG4gIGdldCBpc0hpc3RvcnlOYXZpZ2F0aW9uICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIGlzSGlzdG9yeU5hdmlnYXRpb24gZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdHJ1ZSBpZiB0aGlz4oCZcyByZXF1ZXN04oCZc1xuICAgIC8vIGhpc3RvcnktbmF2aWdhdGlvbiBmbGFnIGlzIHNldDsgb3RoZXJ3aXNlIGZhbHNlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uaGlzdG9yeU5hdmlnYXRpb25cbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIHNpZ25hbCBhc3NvY2lhdGVkIHdpdGggcmVxdWVzdCwgd2hpY2ggaXMgYW4gQWJvcnRTaWduYWxcbiAgLy8gb2JqZWN0IGluZGljYXRpbmcgd2hldGhlciBvciBub3QgcmVxdWVzdCBoYXMgYmVlbiBhYm9ydGVkLCBhbmQgaXRzXG4gIC8vIGFib3J0IGV2ZW50IGhhbmRsZXIuXG4gIGdldCBzaWduYWwgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgc2lnbmFsIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXPigJlzIHNpZ25hbC5cbiAgICByZXR1cm4gdGhpc1trU2lnbmFsXVxuICB9XG5cbiAgZ2V0IGJvZHkgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmJvZHkgPyB0aGlzW2tTdGF0ZV0uYm9keS5zdHJlYW0gOiBudWxsXG4gIH1cblxuICBnZXQgYm9keVVzZWQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICByZXR1cm4gISF0aGlzW2tTdGF0ZV0uYm9keSAmJiB1dGlsLmlzRGlzdHVyYmVkKHRoaXNba1N0YXRlXS5ib2R5LnN0cmVhbSlcbiAgfVxuXG4gIGdldCBkdXBsZXggKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICByZXR1cm4gJ2hhbGYnXG4gIH1cblxuICAvLyBSZXR1cm5zIGEgY2xvbmUgb2YgcmVxdWVzdC5cbiAgY2xvbmUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyAxLiBJZiB0aGlzIGlzIHVudXNhYmxlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICh0aGlzLmJvZHlVc2VkIHx8IHRoaXMuYm9keT8ubG9ja2VkKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd1bnVzYWJsZScpXG4gICAgfVxuXG4gICAgLy8gMi4gTGV0IGNsb25lZFJlcXVlc3QgYmUgdGhlIHJlc3VsdCBvZiBjbG9uaW5nIHRoaXPigJlzIHJlcXVlc3QuXG4gICAgY29uc3QgY2xvbmVkUmVxdWVzdCA9IGNsb25lUmVxdWVzdCh0aGlzW2tTdGF0ZV0pXG5cbiAgICAvLyAzLiBMZXQgY2xvbmVkUmVxdWVzdE9iamVjdCBiZSB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEgUmVxdWVzdCBvYmplY3QsXG4gICAgLy8gZ2l2ZW4gY2xvbmVkUmVxdWVzdCwgdGhpc+KAmXMgaGVhZGVyc+KAmXMgZ3VhcmQsIGFuZCB0aGlz4oCZcyByZWxldmFudCBSZWFsbS5cbiAgICBjb25zdCBjbG9uZWRSZXF1ZXN0T2JqZWN0ID0gbmV3IFJlcXVlc3Qoa0NvbnN0cnVjdClcbiAgICBjbG9uZWRSZXF1ZXN0T2JqZWN0W2tTdGF0ZV0gPSBjbG9uZWRSZXF1ZXN0XG4gICAgY2xvbmVkUmVxdWVzdE9iamVjdFtrUmVhbG1dID0gdGhpc1trUmVhbG1dXG4gICAgY2xvbmVkUmVxdWVzdE9iamVjdFtrSGVhZGVyc10gPSBuZXcgSGVhZGVycyhrQ29uc3RydWN0KVxuICAgIGNsb25lZFJlcXVlc3RPYmplY3Rba0hlYWRlcnNdW2tIZWFkZXJzTGlzdF0gPSBjbG9uZWRSZXF1ZXN0LmhlYWRlcnNMaXN0XG4gICAgY2xvbmVkUmVxdWVzdE9iamVjdFtrSGVhZGVyc11ba0d1YXJkXSA9IHRoaXNba0hlYWRlcnNdW2tHdWFyZF1cbiAgICBjbG9uZWRSZXF1ZXN0T2JqZWN0W2tIZWFkZXJzXVtrUmVhbG1dID0gdGhpc1trSGVhZGVyc11ba1JlYWxtXVxuXG4gICAgLy8gNC4gTWFrZSBjbG9uZWRSZXF1ZXN0T2JqZWN04oCZcyBzaWduYWwgZm9sbG93IHRoaXPigJlzIHNpZ25hbC5cbiAgICBjb25zdCBhYyA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuICAgIGlmICh0aGlzLnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICBhYy5hYm9ydCh0aGlzLnNpZ25hbC5yZWFzb24pXG4gICAgfSBlbHNlIHtcbiAgICAgIHV0aWwuYWRkQWJvcnRMaXN0ZW5lcihcbiAgICAgICAgdGhpcy5zaWduYWwsXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBhYy5hYm9ydCh0aGlzLnNpZ25hbC5yZWFzb24pXG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9XG4gICAgY2xvbmVkUmVxdWVzdE9iamVjdFtrU2lnbmFsXSA9IGFjLnNpZ25hbFxuXG4gICAgLy8gNC4gUmV0dXJuIGNsb25lZFJlcXVlc3RPYmplY3QuXG4gICAgcmV0dXJuIGNsb25lZFJlcXVlc3RPYmplY3RcbiAgfVxufVxuXG5taXhpbkJvZHkoUmVxdWVzdClcblxuZnVuY3Rpb24gbWFrZVJlcXVlc3QgKGluaXQpIHtcbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3RzXG4gIGNvbnN0IHJlcXVlc3QgPSB7XG4gICAgbWV0aG9kOiAnR0VUJyxcbiAgICBsb2NhbFVSTHNPbmx5OiBmYWxzZSxcbiAgICB1bnNhZmVSZXF1ZXN0OiBmYWxzZSxcbiAgICBib2R5OiBudWxsLFxuICAgIGNsaWVudDogbnVsbCxcbiAgICByZXNlcnZlZENsaWVudDogbnVsbCxcbiAgICByZXBsYWNlc0NsaWVudElkOiAnJyxcbiAgICB3aW5kb3c6ICdjbGllbnQnLFxuICAgIGtlZXBhbGl2ZTogZmFsc2UsXG4gICAgc2VydmljZVdvcmtlcnM6ICdhbGwnLFxuICAgIGluaXRpYXRvcjogJycsXG4gICAgZGVzdGluYXRpb246ICcnLFxuICAgIHByaW9yaXR5OiBudWxsLFxuICAgIG9yaWdpbjogJ2NsaWVudCcsXG4gICAgcG9saWN5Q29udGFpbmVyOiAnY2xpZW50JyxcbiAgICByZWZlcnJlcjogJ2NsaWVudCcsXG4gICAgcmVmZXJyZXJQb2xpY3k6ICcnLFxuICAgIG1vZGU6ICduby1jb3JzJyxcbiAgICB1c2VDT1JTUHJlZmxpZ2h0RmxhZzogZmFsc2UsXG4gICAgY3JlZGVudGlhbHM6ICdzYW1lLW9yaWdpbicsXG4gICAgdXNlQ3JlZGVudGlhbHM6IGZhbHNlLFxuICAgIGNhY2hlOiAnZGVmYXVsdCcsXG4gICAgcmVkaXJlY3Q6ICdmb2xsb3cnLFxuICAgIGludGVncml0eTogJycsXG4gICAgY3J5cHRvR3JhcGhpY3NOb25jZU1ldGFkYXRhOiAnJyxcbiAgICBwYXJzZXJNZXRhZGF0YTogJycsXG4gICAgcmVsb2FkTmF2aWdhdGlvbjogZmFsc2UsXG4gICAgaGlzdG9yeU5hdmlnYXRpb246IGZhbHNlLFxuICAgIHVzZXJBY3RpdmF0aW9uOiBmYWxzZSxcbiAgICB0YWludGVkT3JpZ2luOiBmYWxzZSxcbiAgICByZWRpcmVjdENvdW50OiAwLFxuICAgIHJlc3BvbnNlVGFpbnRpbmc6ICdiYXNpYycsXG4gICAgcHJldmVudE5vQ2FjaGVDYWNoZUNvbnRyb2xIZWFkZXJNb2RpZmljYXRpb246IGZhbHNlLFxuICAgIGRvbmU6IGZhbHNlLFxuICAgIHRpbWluZ0FsbG93RmFpbGVkOiBmYWxzZSxcbiAgICAuLi5pbml0LFxuICAgIGhlYWRlcnNMaXN0OiBpbml0LmhlYWRlcnNMaXN0XG4gICAgICA/IG5ldyBIZWFkZXJzTGlzdChpbml0LmhlYWRlcnNMaXN0KVxuICAgICAgOiBuZXcgSGVhZGVyc0xpc3QoKVxuICB9XG4gIHJlcXVlc3QudXJsID0gcmVxdWVzdC51cmxMaXN0WzBdXG4gIHJldHVybiByZXF1ZXN0XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LXJlcXVlc3QtY2xvbmVcbmZ1bmN0aW9uIGNsb25lUmVxdWVzdCAocmVxdWVzdCkge1xuICAvLyBUbyBjbG9uZSBhIHJlcXVlc3QgcmVxdWVzdCwgcnVuIHRoZXNlIHN0ZXBzOlxuXG4gIC8vIDEuIExldCBuZXdSZXF1ZXN0IGJlIGEgY29weSBvZiByZXF1ZXN0LCBleGNlcHQgZm9yIGl0cyBib2R5LlxuICBjb25zdCBuZXdSZXF1ZXN0ID0gbWFrZVJlcXVlc3QoeyAuLi5yZXF1ZXN0LCBib2R5OiBudWxsIH0pXG5cbiAgLy8gMi4gSWYgcmVxdWVzdOKAmXMgYm9keSBpcyBub24tbnVsbCwgc2V0IG5ld1JlcXVlc3TigJlzIGJvZHkgdG8gdGhlXG4gIC8vIHJlc3VsdCBvZiBjbG9uaW5nIHJlcXVlc3TigJlzIGJvZHkuXG4gIGlmIChyZXF1ZXN0LmJvZHkgIT0gbnVsbCkge1xuICAgIG5ld1JlcXVlc3QuYm9keSA9IGNsb25lQm9keShyZXF1ZXN0LmJvZHkpXG4gIH1cblxuICAvLyAzLiBSZXR1cm4gbmV3UmVxdWVzdC5cbiAgcmV0dXJuIG5ld1JlcXVlc3Rcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUmVxdWVzdC5wcm90b3R5cGUsIHtcbiAgbWV0aG9kOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICB1cmw6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGhlYWRlcnM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlZGlyZWN0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBjbG9uZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgc2lnbmFsOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBkdXBsZXg6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGRlc3RpbmF0aW9uOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBib2R5OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBib2R5VXNlZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgaXNIaXN0b3J5TmF2aWdhdGlvbjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgaXNSZWxvYWROYXZpZ2F0aW9uOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBrZWVwYWxpdmU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGludGVncml0eToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgY2FjaGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNyZWRlbnRpYWxzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBhdHRyaWJ1dGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlZmVycmVyUG9saWN5OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWZlcnJlcjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgbW9kZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ1JlcXVlc3QnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9XG59KVxuXG53ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0ID0gd2ViaWRsLmludGVyZmFjZUNvbnZlcnRlcihcbiAgUmVxdWVzdFxuKVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdGluZm9cbndlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvID0gZnVuY3Rpb24gKFYpIHtcbiAgaWYgKHR5cGVvZiBWID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcoVilcbiAgfVxuXG4gIGlmIChWIGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0KFYpXG4gIH1cblxuICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKFYpXG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLkFib3J0U2lnbmFsID0gd2ViaWRsLmludGVyZmFjZUNvbnZlcnRlcihcbiAgQWJvcnRTaWduYWxcbilcblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3Rpbml0XG53ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5pdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGtleTogJ21ldGhvZCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdoZWFkZXJzJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkhlYWRlcnNJbml0XG4gIH0sXG4gIHtcbiAgICBrZXk6ICdib2R5JyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcihcbiAgICAgIHdlYmlkbC5jb252ZXJ0ZXJzLkJvZHlJbml0XG4gICAgKVxuICB9LFxuICB7XG4gICAga2V5OiAncmVmZXJyZXInLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdyZWZlcnJlclBvbGljeScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAgLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1yZWZlcnJlci1wb2xpY3kvI3JlZmVycmVyLXBvbGljeVxuICAgIGFsbG93ZWRWYWx1ZXM6IHJlZmVycmVyUG9saWN5XG4gIH0sXG4gIHtcbiAgICBrZXk6ICdtb2RlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1yZXF1ZXN0LW1vZGVcbiAgICBhbGxvd2VkVmFsdWVzOiByZXF1ZXN0TW9kZVxuICB9LFxuICB7XG4gICAga2V5OiAnY3JlZGVudGlhbHMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXF1ZXN0Y3JlZGVudGlhbHNcbiAgICBhbGxvd2VkVmFsdWVzOiByZXF1ZXN0Q3JlZGVudGlhbHNcbiAgfSxcbiAge1xuICAgIGtleTogJ2NhY2hlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdGNhY2hlXG4gICAgYWxsb3dlZFZhbHVlczogcmVxdWVzdENhY2hlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdyZWRpcmVjdCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3RyZWRpcmVjdFxuICAgIGFsbG93ZWRWYWx1ZXM6IHJlcXVlc3RSZWRpcmVjdFxuICB9LFxuICB7XG4gICAga2V5OiAnaW50ZWdyaXR5JyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZ1xuICB9LFxuICB7XG4gICAga2V5OiAna2VlcGFsaXZlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW5cbiAgfSxcbiAge1xuICAgIGtleTogJ3NpZ25hbCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIoXG4gICAgICAoc2lnbmFsKSA9PiB3ZWJpZGwuY29udmVydGVycy5BYm9ydFNpZ25hbChcbiAgICAgICAgc2lnbmFsLFxuICAgICAgICB7IHN0cmljdDogZmFsc2UgfVxuICAgICAgKVxuICAgIClcbiAgfSxcbiAge1xuICAgIGtleTogJ3dpbmRvdycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5hbnlcbiAgfSxcbiAge1xuICAgIGtleTogJ2R1cGxleCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAgYWxsb3dlZFZhbHVlczogcmVxdWVzdER1cGxleFxuICB9XG5dKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHsgUmVxdWVzdCwgbWFrZVJlcXVlc3QgfVxuIiwKICAgICIvLyBodHRwczovL2dpdGh1Yi5jb20vRXRoYW4tQXJyb3dvb2QvdW5kaWNpLWZldGNoXG5cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIFJlc3BvbnNlLFxuICBtYWtlTmV0d29ya0Vycm9yLFxuICBtYWtlQXBwcm9wcmlhdGVOZXR3b3JrRXJyb3IsXG4gIGZpbHRlclJlc3BvbnNlLFxuICBtYWtlUmVzcG9uc2Vcbn0gPSByZXF1aXJlKCcuL3Jlc3BvbnNlJylcbmNvbnN0IHsgSGVhZGVycyB9ID0gcmVxdWlyZSgnLi9oZWFkZXJzJylcbmNvbnN0IHsgUmVxdWVzdCwgbWFrZVJlcXVlc3QgfSA9IHJlcXVpcmUoJy4vcmVxdWVzdCcpXG5jb25zdCB6bGliID0gcmVxdWlyZSgnemxpYicpXG5jb25zdCB7XG4gIGJ5dGVzTWF0Y2gsXG4gIG1ha2VQb2xpY3lDb250YWluZXIsXG4gIGNsb25lUG9saWN5Q29udGFpbmVyLFxuICByZXF1ZXN0QmFkUG9ydCxcbiAgVEFPQ2hlY2ssXG4gIGFwcGVuZFJlcXVlc3RPcmlnaW5IZWFkZXIsXG4gIHJlc3BvbnNlTG9jYXRpb25VUkwsXG4gIHJlcXVlc3RDdXJyZW50VVJMLFxuICBzZXRSZXF1ZXN0UmVmZXJyZXJQb2xpY3lPblJlZGlyZWN0LFxuICB0cnlVcGdyYWRlUmVxdWVzdFRvQVBvdGVudGlhbGx5VHJ1c3R3b3J0aHlVUkwsXG4gIGNyZWF0ZU9wYXF1ZVRpbWluZ0luZm8sXG4gIGFwcGVuZEZldGNoTWV0YWRhdGEsXG4gIGNvcnNDaGVjayxcbiAgY3Jvc3NPcmlnaW5SZXNvdXJjZVBvbGljeUNoZWNrLFxuICBkZXRlcm1pbmVSZXF1ZXN0c1JlZmVycmVyLFxuICBjb2Fyc2VuZWRTaGFyZWRDdXJyZW50VGltZSxcbiAgY3JlYXRlRGVmZXJyZWRQcm9taXNlLFxuICBpc0Jsb2JMaWtlLFxuICBzYW1lT3JpZ2luLFxuICBpc0NhbmNlbGxlZCxcbiAgaXNBYm9ydGVkLFxuICBpc0Vycm9yTGlrZSxcbiAgZnVsbHlSZWFkQm9keSxcbiAgcmVhZGFibGVTdHJlYW1DbG9zZSxcbiAgaXNvbW9ycGhpY0VuY29kZSxcbiAgdXJsSXNMb2NhbCxcbiAgdXJsSXNIdHRwSHR0cHNTY2hlbWUsXG4gIHVybEhhc0h0dHBzU2NoZW1lXG59ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsga1N0YXRlLCBrSGVhZGVycywga0d1YXJkLCBrUmVhbG0gfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBzYWZlbHlFeHRyYWN0Qm9keSB9ID0gcmVxdWlyZSgnLi9ib2R5JylcbmNvbnN0IHtcbiAgcmVkaXJlY3RTdGF0dXNTZXQsXG4gIG51bGxCb2R5U3RhdHVzLFxuICBzYWZlTWV0aG9kc1NldCxcbiAgcmVxdWVzdEJvZHlIZWFkZXIsXG4gIHN1YnJlc291cmNlU2V0LFxuICBET01FeGNlcHRpb25cbn0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7IGtIZWFkZXJzTGlzdCB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IEVFID0gcmVxdWlyZSgnZXZlbnRzJylcbmNvbnN0IHsgUmVhZGFibGUsIHBpcGVsaW5lIH0gPSByZXF1aXJlKCdzdHJlYW0nKVxuY29uc3QgeyBhZGRBYm9ydExpc3RlbmVyLCBpc0Vycm9yZWQsIGlzUmVhZGFibGUsIG5vZGVNYWpvciwgbm9kZU1pbm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBkYXRhVVJMUHJvY2Vzc29yLCBzZXJpYWxpemVBTWltZVR5cGUgfSA9IHJlcXVpcmUoJy4vZGF0YVVSTCcpXG5jb25zdCB7IFRyYW5zZm9ybVN0cmVhbSB9ID0gcmVxdWlyZSgnc3RyZWFtL3dlYicpXG5jb25zdCB7IGdldEdsb2JhbERpc3BhdGNoZXIgfSA9IHJlcXVpcmUoJy4uL2dsb2JhbCcpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi93ZWJpZGwnKVxuY29uc3QgeyBTVEFUVVNfQ09ERVMgfSA9IHJlcXVpcmUoJ2h0dHAnKVxuY29uc3QgR0VUX09SX0hFQUQgPSBbJ0dFVCcsICdIRUFEJ11cblxuLyoqIEB0eXBlIHtpbXBvcnQoJ2J1ZmZlcicpLnJlc29sdmVPYmplY3RVUkx9ICovXG5sZXQgcmVzb2x2ZU9iamVjdFVSTFxubGV0IFJlYWRhYmxlU3RyZWFtID0gZ2xvYmFsVGhpcy5SZWFkYWJsZVN0cmVhbVxuXG5jbGFzcyBGZXRjaCBleHRlbmRzIEVFIHtcbiAgY29uc3RydWN0b3IgKGRpc3BhdGNoZXIpIHtcbiAgICBzdXBlcigpXG5cbiAgICB0aGlzLmRpc3BhdGNoZXIgPSBkaXNwYXRjaGVyXG4gICAgdGhpcy5jb25uZWN0aW9uID0gbnVsbFxuICAgIHRoaXMuZHVtcCA9IGZhbHNlXG4gICAgdGhpcy5zdGF0ZSA9ICdvbmdvaW5nJ1xuICAgIC8vIDIgdGVybWluYXRlZCBsaXN0ZW5lcnMgZ2V0IGFkZGVkIHBlciByZXF1ZXN0LFxuICAgIC8vIGJ1dCBvbmx5IDEgZ2V0cyByZW1vdmVkLiBJZiB0aGVyZSBhcmUgMjAgcmVkaXJlY3RzLFxuICAgIC8vIDIxIGxpc3RlbmVycyB3aWxsIGJlIGFkZGVkLlxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMTcxMVxuICAgIC8vIFRPRE8gKGZpeCk6IEZpbmQgYW5kIGZpeCByb290IGNhdXNlIGZvciBsZWFrZWQgbGlzdGVuZXIuXG4gICAgdGhpcy5zZXRNYXhMaXN0ZW5lcnMoMjEpXG4gIH1cblxuICB0ZXJtaW5hdGUgKHJlYXNvbikge1xuICAgIGlmICh0aGlzLnN0YXRlICE9PSAnb25nb2luZycpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuc3RhdGUgPSAndGVybWluYXRlZCdcbiAgICB0aGlzLmNvbm5lY3Rpb24/LmRlc3Ryb3kocmVhc29uKVxuICAgIHRoaXMuZW1pdCgndGVybWluYXRlZCcsIHJlYXNvbilcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmZXRjaC1jb250cm9sbGVyLWFib3J0XG4gIGFib3J0IChlcnJvcikge1xuICAgIGlmICh0aGlzLnN0YXRlICE9PSAnb25nb2luZycpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIDEuIFNldCBjb250cm9sbGVy4oCZcyBzdGF0ZSB0byBcImFib3J0ZWRcIi5cbiAgICB0aGlzLnN0YXRlID0gJ2Fib3J0ZWQnXG5cbiAgICAvLyAyLiBMZXQgZmFsbGJhY2tFcnJvciBiZSBhbiBcIkFib3J0RXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgLy8gMy4gU2V0IGVycm9yIHRvIGZhbGxiYWNrRXJyb3IgaWYgaXQgaXMgbm90IGdpdmVuLlxuICAgIGlmICghZXJyb3IpIHtcbiAgICAgIGVycm9yID0gbmV3IERPTUV4Y2VwdGlvbignVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC4nLCAnQWJvcnRFcnJvcicpXG4gICAgfVxuXG4gICAgLy8gNC4gTGV0IHNlcmlhbGl6ZWRFcnJvciBiZSBTdHJ1Y3R1cmVkU2VyaWFsaXplKGVycm9yKS5cbiAgICAvLyAgICBJZiB0aGF0IHRocmV3IGFuIGV4Y2VwdGlvbiwgY2F0Y2ggaXQsIGFuZCBsZXRcbiAgICAvLyAgICBzZXJpYWxpemVkRXJyb3IgYmUgU3RydWN0dXJlZFNlcmlhbGl6ZShmYWxsYmFja0Vycm9yKS5cblxuICAgIC8vIDUuIFNldCBjb250cm9sbGVy4oCZcyBzZXJpYWxpemVkIGFib3J0IHJlYXNvbiB0byBzZXJpYWxpemVkRXJyb3IuXG4gICAgdGhpcy5zZXJpYWxpemVkQWJvcnRSZWFzb24gPSBlcnJvclxuXG4gICAgdGhpcy5jb25uZWN0aW9uPy5kZXN0cm95KGVycm9yKVxuICAgIHRoaXMuZW1pdCgndGVybWluYXRlZCcsIGVycm9yKVxuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmZXRjaC1tZXRob2RcbmZ1bmN0aW9uIGZldGNoIChpbnB1dCwgaW5pdCA9IHt9KSB7XG4gIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdnbG9iYWxUaGlzLmZldGNoJyB9KVxuXG4gIC8vIDEuIExldCBwIGJlIGEgbmV3IHByb21pc2UuXG4gIGNvbnN0IHAgPSBjcmVhdGVEZWZlcnJlZFByb21pc2UoKVxuXG4gIC8vIDIuIExldCByZXF1ZXN0T2JqZWN0IGJlIHRoZSByZXN1bHQgb2YgaW52b2tpbmcgdGhlIGluaXRpYWwgdmFsdWUgb2ZcbiAgLy8gUmVxdWVzdCBhcyBjb25zdHJ1Y3RvciB3aXRoIGlucHV0IGFuZCBpbml0IGFzIGFyZ3VtZW50cy4gSWYgdGhpcyB0aHJvd3NcbiAgLy8gYW4gZXhjZXB0aW9uLCByZWplY3QgcCB3aXRoIGl0IGFuZCByZXR1cm4gcC5cbiAgbGV0IHJlcXVlc3RPYmplY3RcblxuICB0cnkge1xuICAgIHJlcXVlc3RPYmplY3QgPSBuZXcgUmVxdWVzdChpbnB1dCwgaW5pdClcbiAgfSBjYXRjaCAoZSkge1xuICAgIHAucmVqZWN0KGUpXG4gICAgcmV0dXJuIHAucHJvbWlzZVxuICB9XG5cbiAgLy8gMy4gTGV0IHJlcXVlc3QgYmUgcmVxdWVzdE9iamVjdOKAmXMgcmVxdWVzdC5cbiAgY29uc3QgcmVxdWVzdCA9IHJlcXVlc3RPYmplY3Rba1N0YXRlXVxuXG4gIC8vIDQuIElmIHJlcXVlc3RPYmplY3TigJlzIHNpZ25hbOKAmXMgYWJvcnRlZCBmbGFnIGlzIHNldCwgdGhlbjpcbiAgaWYgKHJlcXVlc3RPYmplY3Quc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAvLyAxLiBBYm9ydCB0aGUgZmV0Y2goKSBjYWxsIHdpdGggcCwgcmVxdWVzdCwgbnVsbCwgYW5kXG4gICAgLy8gICAgcmVxdWVzdE9iamVjdOKAmXMgc2lnbmFs4oCZcyBhYm9ydCByZWFzb24uXG4gICAgYWJvcnRGZXRjaChwLCByZXF1ZXN0LCBudWxsLCByZXF1ZXN0T2JqZWN0LnNpZ25hbC5yZWFzb24pXG5cbiAgICAvLyAyLiBSZXR1cm4gcC5cbiAgICByZXR1cm4gcC5wcm9taXNlXG4gIH1cblxuICAvLyA1LiBMZXQgZ2xvYmFsT2JqZWN0IGJlIHJlcXVlc3TigJlzIGNsaWVudOKAmXMgZ2xvYmFsIG9iamVjdC5cbiAgY29uc3QgZ2xvYmFsT2JqZWN0ID0gcmVxdWVzdC5jbGllbnQuZ2xvYmFsT2JqZWN0XG5cbiAgLy8gNi4gSWYgZ2xvYmFsT2JqZWN0IGlzIGEgU2VydmljZVdvcmtlckdsb2JhbFNjb3BlIG9iamVjdCwgdGhlbiBzZXRcbiAgLy8gcmVxdWVzdOKAmXMgc2VydmljZS13b3JrZXJzIG1vZGUgdG8gXCJub25lXCIuXG4gIGlmIChnbG9iYWxPYmplY3Q/LmNvbnN0cnVjdG9yPy5uYW1lID09PSAnU2VydmljZVdvcmtlckdsb2JhbFNjb3BlJykge1xuICAgIHJlcXVlc3Quc2VydmljZVdvcmtlcnMgPSAnbm9uZSdcbiAgfVxuXG4gIC8vIDcuIExldCByZXNwb25zZU9iamVjdCBiZSBudWxsLlxuICBsZXQgcmVzcG9uc2VPYmplY3QgPSBudWxsXG5cbiAgLy8gOC4gTGV0IHJlbGV2YW50UmVhbG0gYmUgdGhpc+KAmXMgcmVsZXZhbnQgUmVhbG0uXG4gIGNvbnN0IHJlbGV2YW50UmVhbG0gPSBudWxsXG5cbiAgLy8gOS4gTGV0IGxvY2FsbHlBYm9ydGVkIGJlIGZhbHNlLlxuICBsZXQgbG9jYWxseUFib3J0ZWQgPSBmYWxzZVxuXG4gIC8vIDEwLiBMZXQgY29udHJvbGxlciBiZSBudWxsLlxuICBsZXQgY29udHJvbGxlciA9IG51bGxcblxuICAvLyAxMS4gQWRkIHRoZSBmb2xsb3dpbmcgYWJvcnQgc3RlcHMgdG8gcmVxdWVzdE9iamVjdOKAmXMgc2lnbmFsOlxuICBhZGRBYm9ydExpc3RlbmVyKFxuICAgIHJlcXVlc3RPYmplY3Quc2lnbmFsLFxuICAgICgpID0+IHtcbiAgICAgIC8vIDEuIFNldCBsb2NhbGx5QWJvcnRlZCB0byB0cnVlLlxuICAgICAgbG9jYWxseUFib3J0ZWQgPSB0cnVlXG5cbiAgICAgIC8vIDIuIEFzc2VydDogY29udHJvbGxlciBpcyBub24tbnVsbC5cbiAgICAgIGFzc2VydChjb250cm9sbGVyICE9IG51bGwpXG5cbiAgICAgIC8vIDMuIEFib3J0IGNvbnRyb2xsZXIgd2l0aCByZXF1ZXN0T2JqZWN04oCZcyBzaWduYWzigJlzIGFib3J0IHJlYXNvbi5cbiAgICAgIGNvbnRyb2xsZXIuYWJvcnQocmVxdWVzdE9iamVjdC5zaWduYWwucmVhc29uKVxuXG4gICAgICAvLyA0LiBBYm9ydCB0aGUgZmV0Y2goKSBjYWxsIHdpdGggcCwgcmVxdWVzdCwgcmVzcG9uc2VPYmplY3QsXG4gICAgICAvLyAgICBhbmQgcmVxdWVzdE9iamVjdOKAmXMgc2lnbmFs4oCZcyBhYm9ydCByZWFzb24uXG4gICAgICBhYm9ydEZldGNoKHAsIHJlcXVlc3QsIHJlc3BvbnNlT2JqZWN0LCByZXF1ZXN0T2JqZWN0LnNpZ25hbC5yZWFzb24pXG4gICAgfVxuICApXG5cbiAgLy8gMTIuIExldCBoYW5kbGVGZXRjaERvbmUgZ2l2ZW4gcmVzcG9uc2UgcmVzcG9uc2UgYmUgdG8gZmluYWxpemUgYW5kXG4gIC8vIHJlcG9ydCB0aW1pbmcgd2l0aCByZXNwb25zZSwgZ2xvYmFsT2JqZWN0LCBhbmQgXCJmZXRjaFwiLlxuICBjb25zdCBoYW5kbGVGZXRjaERvbmUgPSAocmVzcG9uc2UpID0+XG4gICAgZmluYWxpemVBbmRSZXBvcnRUaW1pbmcocmVzcG9uc2UsICdmZXRjaCcpXG5cbiAgLy8gMTMuIFNldCBjb250cm9sbGVyIHRvIHRoZSByZXN1bHQgb2YgY2FsbGluZyBmZXRjaCBnaXZlbiByZXF1ZXN0LFxuICAvLyB3aXRoIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSBzZXQgdG8gaGFuZGxlRmV0Y2hEb25lLCBhbmQgcHJvY2Vzc1Jlc3BvbnNlXG4gIC8vIGdpdmVuIHJlc3BvbnNlIGJlaW5nIHRoZXNlIHN1YnN0ZXBzOlxuXG4gIGNvbnN0IHByb2Nlc3NSZXNwb25zZSA9IChyZXNwb25zZSkgPT4ge1xuICAgIC8vIDEuIElmIGxvY2FsbHlBYm9ydGVkIGlzIHRydWUsIHRlcm1pbmF0ZSB0aGVzZSBzdWJzdGVwcy5cbiAgICBpZiAobG9jYWxseUFib3J0ZWQpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgIH1cblxuICAgIC8vIDIuIElmIHJlc3BvbnNl4oCZcyBhYm9ydGVkIGZsYWcgaXMgc2V0LCB0aGVuOlxuICAgIGlmIChyZXNwb25zZS5hYm9ydGVkKSB7XG4gICAgICAvLyAxLiBMZXQgZGVzZXJpYWxpemVkRXJyb3IgYmUgdGhlIHJlc3VsdCBvZiBkZXNlcmlhbGl6ZSBhIHNlcmlhbGl6ZWRcbiAgICAgIC8vICAgIGFib3J0IHJlYXNvbiBnaXZlbiBjb250cm9sbGVy4oCZcyBzZXJpYWxpemVkIGFib3J0IHJlYXNvbiBhbmRcbiAgICAgIC8vICAgIHJlbGV2YW50UmVhbG0uXG5cbiAgICAgIC8vIDIuIEFib3J0IHRoZSBmZXRjaCgpIGNhbGwgd2l0aCBwLCByZXF1ZXN0LCByZXNwb25zZU9iamVjdCwgYW5kXG4gICAgICAvLyAgICBkZXNlcmlhbGl6ZWRFcnJvci5cblxuICAgICAgYWJvcnRGZXRjaChwLCByZXF1ZXN0LCByZXNwb25zZU9iamVjdCwgY29udHJvbGxlci5zZXJpYWxpemVkQWJvcnRSZWFzb24pXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICB9XG5cbiAgICAvLyAzLiBJZiByZXNwb25zZSBpcyBhIG5ldHdvcmsgZXJyb3IsIHRoZW4gcmVqZWN0IHAgd2l0aCBhIFR5cGVFcnJvclxuICAgIC8vIGFuZCB0ZXJtaW5hdGUgdGhlc2Ugc3Vic3RlcHMuXG4gICAgaWYgKHJlc3BvbnNlLnR5cGUgPT09ICdlcnJvcicpIHtcbiAgICAgIHAucmVqZWN0KFxuICAgICAgICBPYmplY3QuYXNzaWduKG5ldyBUeXBlRXJyb3IoJ2ZldGNoIGZhaWxlZCcpLCB7IGNhdXNlOiByZXNwb25zZS5lcnJvciB9KVxuICAgICAgKVxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgfVxuXG4gICAgLy8gNC4gU2V0IHJlc3BvbnNlT2JqZWN0IHRvIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYSBSZXNwb25zZSBvYmplY3QsXG4gICAgLy8gZ2l2ZW4gcmVzcG9uc2UsIFwiaW1tdXRhYmxlXCIsIGFuZCByZWxldmFudFJlYWxtLlxuICAgIHJlc3BvbnNlT2JqZWN0ID0gbmV3IFJlc3BvbnNlKClcbiAgICByZXNwb25zZU9iamVjdFtrU3RhdGVdID0gcmVzcG9uc2VcbiAgICByZXNwb25zZU9iamVjdFtrUmVhbG1dID0gcmVsZXZhbnRSZWFsbVxuICAgIHJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrSGVhZGVyc0xpc3RdID0gcmVzcG9uc2UuaGVhZGVyc0xpc3RcbiAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba0d1YXJkXSA9ICdpbW11dGFibGUnXG4gICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tSZWFsbV0gPSByZWxldmFudFJlYWxtXG5cbiAgICAvLyA1LiBSZXNvbHZlIHAgd2l0aCByZXNwb25zZU9iamVjdC5cbiAgICBwLnJlc29sdmUocmVzcG9uc2VPYmplY3QpXG4gIH1cblxuICBjb250cm9sbGVyID0gZmV0Y2hpbmcoe1xuICAgIHJlcXVlc3QsXG4gICAgcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5OiBoYW5kbGVGZXRjaERvbmUsXG4gICAgcHJvY2Vzc1Jlc3BvbnNlLFxuICAgIGRpc3BhdGNoZXI6IGluaXQuZGlzcGF0Y2hlciA/PyBnZXRHbG9iYWxEaXNwYXRjaGVyKCkgLy8gdW5kaWNpXG4gIH0pXG5cbiAgLy8gMTQuIFJldHVybiBwLlxuICByZXR1cm4gcC5wcm9taXNlXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmaW5hbGl6ZS1hbmQtcmVwb3J0LXRpbWluZ1xuZnVuY3Rpb24gZmluYWxpemVBbmRSZXBvcnRUaW1pbmcgKHJlc3BvbnNlLCBpbml0aWF0b3JUeXBlID0gJ290aGVyJykge1xuICAvLyAxLiBJZiByZXNwb25zZSBpcyBhbiBhYm9ydGVkIG5ldHdvcmsgZXJyb3IsIHRoZW4gcmV0dXJuLlxuICBpZiAocmVzcG9uc2UudHlwZSA9PT0gJ2Vycm9yJyAmJiByZXNwb25zZS5hYm9ydGVkKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyAyLiBJZiByZXNwb25zZeKAmXMgVVJMIGxpc3QgaXMgbnVsbCBvciBlbXB0eSwgdGhlbiByZXR1cm4uXG4gIGlmICghcmVzcG9uc2UudXJsTGlzdD8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyAzLiBMZXQgb3JpZ2luYWxVUkwgYmUgcmVzcG9uc2XigJlzIFVSTCBsaXN0WzBdLlxuICBjb25zdCBvcmlnaW5hbFVSTCA9IHJlc3BvbnNlLnVybExpc3RbMF1cblxuICAvLyA0LiBMZXQgdGltaW5nSW5mbyBiZSByZXNwb25zZeKAmXMgdGltaW5nIGluZm8uXG4gIGxldCB0aW1pbmdJbmZvID0gcmVzcG9uc2UudGltaW5nSW5mb1xuXG4gIC8vIDUuIExldCBjYWNoZVN0YXRlIGJlIHJlc3BvbnNl4oCZcyBjYWNoZSBzdGF0ZS5cbiAgbGV0IGNhY2hlU3RhdGUgPSByZXNwb25zZS5jYWNoZVN0YXRlXG5cbiAgLy8gNi4gSWYgb3JpZ2luYWxVUkzigJlzIHNjaGVtZSBpcyBub3QgYW4gSFRUUChTKSBzY2hlbWUsIHRoZW4gcmV0dXJuLlxuICBpZiAoIXVybElzSHR0cEh0dHBzU2NoZW1lKG9yaWdpbmFsVVJMKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgLy8gNy4gSWYgdGltaW5nSW5mbyBpcyBudWxsLCB0aGVuIHJldHVybi5cbiAgaWYgKHRpbWluZ0luZm8gPT09IG51bGwpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIDguIElmIHJlc3BvbnNl4oCZcyB0aW1pbmcgYWxsb3cgcGFzc2VkIGZsYWcgaXMgbm90IHNldCwgdGhlbjpcbiAgaWYgKCFyZXNwb25zZS50aW1pbmdBbGxvd1Bhc3NlZCkge1xuICAgIC8vICAxLiBTZXQgdGltaW5nSW5mbyB0byBhIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYW4gb3BhcXVlIHRpbWluZyBpbmZvIGZvciB0aW1pbmdJbmZvLlxuICAgIHRpbWluZ0luZm8gPSBjcmVhdGVPcGFxdWVUaW1pbmdJbmZvKHtcbiAgICAgIHN0YXJ0VGltZTogdGltaW5nSW5mby5zdGFydFRpbWVcbiAgICB9KVxuXG4gICAgLy8gIDIuIFNldCBjYWNoZVN0YXRlIHRvIHRoZSBlbXB0eSBzdHJpbmcuXG4gICAgY2FjaGVTdGF0ZSA9ICcnXG4gIH1cblxuICAvLyA5LiBTZXQgdGltaW5nSW5mb+KAmXMgZW5kIHRpbWUgdG8gdGhlIGNvYXJzZW5lZCBzaGFyZWQgY3VycmVudCB0aW1lXG4gIC8vIGdpdmVuIGdsb2JhbOKAmXMgcmVsZXZhbnQgc2V0dGluZ3Mgb2JqZWN04oCZcyBjcm9zcy1vcmlnaW4gaXNvbGF0ZWRcbiAgLy8gY2FwYWJpbGl0eS5cbiAgLy8gVE9ETzogZ2l2ZW4gZ2xvYmFs4oCZcyByZWxldmFudCBzZXR0aW5ncyBvYmplY3TigJlzIGNyb3NzLW9yaWdpbiBpc29sYXRlZFxuICAvLyBjYXBhYmlsaXR5P1xuICB0aW1pbmdJbmZvLmVuZFRpbWUgPSBjb2Fyc2VuZWRTaGFyZWRDdXJyZW50VGltZSgpXG5cbiAgLy8gMTAuIFNldCByZXNwb25zZeKAmXMgdGltaW5nIGluZm8gdG8gdGltaW5nSW5mby5cbiAgcmVzcG9uc2UudGltaW5nSW5mbyA9IHRpbWluZ0luZm9cblxuICAvLyAxMS4gTWFyayByZXNvdXJjZSB0aW1pbmcgZm9yIHRpbWluZ0luZm8sIG9yaWdpbmFsVVJMLCBpbml0aWF0b3JUeXBlLFxuICAvLyBnbG9iYWwsIGFuZCBjYWNoZVN0YXRlLlxuICBtYXJrUmVzb3VyY2VUaW1pbmcoXG4gICAgdGltaW5nSW5mbyxcbiAgICBvcmlnaW5hbFVSTCxcbiAgICBpbml0aWF0b3JUeXBlLFxuICAgIGdsb2JhbFRoaXMsXG4gICAgY2FjaGVTdGF0ZVxuICApXG59XG5cbi8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9yZXNvdXJjZS10aW1pbmcvI2Rmbi1tYXJrLXJlc291cmNlLXRpbWluZ1xuZnVuY3Rpb24gbWFya1Jlc291cmNlVGltaW5nICh0aW1pbmdJbmZvLCBvcmlnaW5hbFVSTCwgaW5pdGlhdG9yVHlwZSwgZ2xvYmFsVGhpcywgY2FjaGVTdGF0ZSkge1xuICBpZiAobm9kZU1ham9yID4gMTggfHwgKG5vZGVNYWpvciA9PT0gMTggJiYgbm9kZU1pbm9yID49IDIpKSB7XG4gICAgcGVyZm9ybWFuY2UubWFya1Jlc291cmNlVGltaW5nKHRpbWluZ0luZm8sIG9yaWdpbmFsVVJMLmhyZWYsIGluaXRpYXRvclR5cGUsIGdsb2JhbFRoaXMsIGNhY2hlU3RhdGUpXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2Fib3J0LWZldGNoXG5mdW5jdGlvbiBhYm9ydEZldGNoIChwLCByZXF1ZXN0LCByZXNwb25zZU9iamVjdCwgZXJyb3IpIHtcbiAgLy8gTm90ZTogQWJvcnRTaWduYWwucmVhc29uIHdhcyBhZGRlZCBpbiBub2RlIHYxNy4yLjBcbiAgLy8gd2hpY2ggd291bGQgZ2l2ZSB1cyBhbiB1bmRlZmluZWQgZXJyb3IgdG8gcmVqZWN0IHdpdGguXG4gIC8vIFJlbW92ZSB0aGlzIG9uY2Ugbm9kZSB2MTYgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC5cbiAgaWYgKCFlcnJvcikge1xuICAgIGVycm9yID0gbmV3IERPTUV4Y2VwdGlvbignVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC4nLCAnQWJvcnRFcnJvcicpXG4gIH1cblxuICAvLyAxLiBSZWplY3QgcHJvbWlzZSB3aXRoIGVycm9yLlxuICBwLnJlamVjdChlcnJvcilcblxuICAvLyAyLiBJZiByZXF1ZXN04oCZcyBib2R5IGlzIG5vdCBudWxsIGFuZCBpcyByZWFkYWJsZSwgdGhlbiBjYW5jZWwgcmVxdWVzdOKAmXNcbiAgLy8gYm9keSB3aXRoIGVycm9yLlxuICBpZiAocmVxdWVzdC5ib2R5ICE9IG51bGwgJiYgaXNSZWFkYWJsZShyZXF1ZXN0LmJvZHk/LnN0cmVhbSkpIHtcbiAgICByZXF1ZXN0LmJvZHkuc3RyZWFtLmNhbmNlbChlcnJvcikuY2F0Y2goKGVycikgPT4ge1xuICAgICAgaWYgKGVyci5jb2RlID09PSAnRVJSX0lOVkFMSURfU1RBVEUnKSB7XG4gICAgICAgIC8vIE5vZGUgYnVnP1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIHRocm93IGVyclxuICAgIH0pXG4gIH1cblxuICAvLyAzLiBJZiByZXNwb25zZU9iamVjdCBpcyBudWxsLCB0aGVuIHJldHVybi5cbiAgaWYgKHJlc3BvbnNlT2JqZWN0ID09IG51bGwpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIDQuIExldCByZXNwb25zZSBiZSByZXNwb25zZU9iamVjdOKAmXMgcmVzcG9uc2UuXG4gIGNvbnN0IHJlc3BvbnNlID0gcmVzcG9uc2VPYmplY3Rba1N0YXRlXVxuXG4gIC8vIDUuIElmIHJlc3BvbnNl4oCZcyBib2R5IGlzIG5vdCBudWxsIGFuZCBpcyByZWFkYWJsZSwgdGhlbiBlcnJvciByZXNwb25zZeKAmXNcbiAgLy8gYm9keSB3aXRoIGVycm9yLlxuICBpZiAocmVzcG9uc2UuYm9keSAhPSBudWxsICYmIGlzUmVhZGFibGUocmVzcG9uc2UuYm9keT8uc3RyZWFtKSkge1xuICAgIHJlc3BvbnNlLmJvZHkuc3RyZWFtLmNhbmNlbChlcnJvcikuY2F0Y2goKGVycikgPT4ge1xuICAgICAgaWYgKGVyci5jb2RlID09PSAnRVJSX0lOVkFMSURfU1RBVEUnKSB7XG4gICAgICAgIC8vIE5vZGUgYnVnP1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIHRocm93IGVyclxuICAgIH0pXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2ZldGNoaW5nXG5mdW5jdGlvbiBmZXRjaGluZyAoe1xuICByZXF1ZXN0LFxuICBwcm9jZXNzUmVxdWVzdEJvZHlDaHVua0xlbmd0aCxcbiAgcHJvY2Vzc1JlcXVlc3RFbmRPZkJvZHksXG4gIHByb2Nlc3NSZXNwb25zZSxcbiAgcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5LFxuICBwcm9jZXNzUmVzcG9uc2VDb25zdW1lQm9keSxcbiAgdXNlUGFyYWxsZWxRdWV1ZSA9IGZhbHNlLFxuICBkaXNwYXRjaGVyIC8vIHVuZGljaVxufSkge1xuICAvLyAxLiBMZXQgdGFza0Rlc3RpbmF0aW9uIGJlIG51bGwuXG4gIGxldCB0YXNrRGVzdGluYXRpb24gPSBudWxsXG5cbiAgLy8gMi4gTGV0IGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5IGJlIGZhbHNlLlxuICBsZXQgY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkgPSBmYWxzZVxuXG4gIC8vIDMuIElmIHJlcXVlc3TigJlzIGNsaWVudCBpcyBub24tbnVsbCwgdGhlbjpcbiAgaWYgKHJlcXVlc3QuY2xpZW50ICE9IG51bGwpIHtcbiAgICAvLyAxLiBTZXQgdGFza0Rlc3RpbmF0aW9uIHRvIHJlcXVlc3TigJlzIGNsaWVudOKAmXMgZ2xvYmFsIG9iamVjdC5cbiAgICB0YXNrRGVzdGluYXRpb24gPSByZXF1ZXN0LmNsaWVudC5nbG9iYWxPYmplY3RcblxuICAgIC8vIDIuIFNldCBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSB0byByZXF1ZXN04oCZcyBjbGllbnTigJlzIGNyb3NzLW9yaWdpblxuICAgIC8vIGlzb2xhdGVkIGNhcGFiaWxpdHkuXG4gICAgY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkgPVxuICAgICAgcmVxdWVzdC5jbGllbnQuY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHlcbiAgfVxuXG4gIC8vIDQuIElmIHVzZVBhcmFsbGVsUXVldWUgaXMgdHJ1ZSwgdGhlbiBzZXQgdGFza0Rlc3RpbmF0aW9uIHRvIHRoZSByZXN1bHQgb2ZcbiAgLy8gc3RhcnRpbmcgYSBuZXcgcGFyYWxsZWwgcXVldWUuXG4gIC8vIFRPRE9cblxuICAvLyA1LiBMZXQgdGltaW5nSW5mbyBiZSBhIG5ldyBmZXRjaCB0aW1pbmcgaW5mbyB3aG9zZSBzdGFydCB0aW1lIGFuZFxuICAvLyBwb3N0LXJlZGlyZWN0IHN0YXJ0IHRpbWUgYXJlIHRoZSBjb2Fyc2VuZWQgc2hhcmVkIGN1cnJlbnQgdGltZSBnaXZlblxuICAvLyBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eS5cbiAgY29uc3QgY3VycmVuVGltZSA9IGNvYXJzZW5lZFNoYXJlZEN1cnJlbnRUaW1lKGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5KVxuICBjb25zdCB0aW1pbmdJbmZvID0gY3JlYXRlT3BhcXVlVGltaW5nSW5mbyh7XG4gICAgc3RhcnRUaW1lOiBjdXJyZW5UaW1lXG4gIH0pXG5cbiAgLy8gNi4gTGV0IGZldGNoUGFyYW1zIGJlIGEgbmV3IGZldGNoIHBhcmFtcyB3aG9zZVxuICAvLyByZXF1ZXN0IGlzIHJlcXVlc3QsXG4gIC8vIHRpbWluZyBpbmZvIGlzIHRpbWluZ0luZm8sXG4gIC8vIHByb2Nlc3MgcmVxdWVzdCBib2R5IGNodW5rIGxlbmd0aCBpcyBwcm9jZXNzUmVxdWVzdEJvZHlDaHVua0xlbmd0aCxcbiAgLy8gcHJvY2VzcyByZXF1ZXN0IGVuZC1vZi1ib2R5IGlzIHByb2Nlc3NSZXF1ZXN0RW5kT2ZCb2R5LFxuICAvLyBwcm9jZXNzIHJlc3BvbnNlIGlzIHByb2Nlc3NSZXNwb25zZSxcbiAgLy8gcHJvY2VzcyByZXNwb25zZSBjb25zdW1lIGJvZHkgaXMgcHJvY2Vzc1Jlc3BvbnNlQ29uc3VtZUJvZHksXG4gIC8vIHByb2Nlc3MgcmVzcG9uc2UgZW5kLW9mLWJvZHkgaXMgcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5LFxuICAvLyB0YXNrIGRlc3RpbmF0aW9uIGlzIHRhc2tEZXN0aW5hdGlvbixcbiAgLy8gYW5kIGNyb3NzLW9yaWdpbiBpc29sYXRlZCBjYXBhYmlsaXR5IGlzIGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5LlxuICBjb25zdCBmZXRjaFBhcmFtcyA9IHtcbiAgICBjb250cm9sbGVyOiBuZXcgRmV0Y2goZGlzcGF0Y2hlciksXG4gICAgcmVxdWVzdCxcbiAgICB0aW1pbmdJbmZvLFxuICAgIHByb2Nlc3NSZXF1ZXN0Qm9keUNodW5rTGVuZ3RoLFxuICAgIHByb2Nlc3NSZXF1ZXN0RW5kT2ZCb2R5LFxuICAgIHByb2Nlc3NSZXNwb25zZSxcbiAgICBwcm9jZXNzUmVzcG9uc2VDb25zdW1lQm9keSxcbiAgICBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHksXG4gICAgdGFza0Rlc3RpbmF0aW9uLFxuICAgIGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5XG4gIH1cblxuICAvLyA3LiBJZiByZXF1ZXN04oCZcyBib2R5IGlzIGEgYnl0ZSBzZXF1ZW5jZSwgdGhlbiBzZXQgcmVxdWVzdOKAmXMgYm9keSB0b1xuICAvLyAgICByZXF1ZXN04oCZcyBib2R5IGFzIGEgYm9keS5cbiAgLy8gTk9URTogU2luY2UgZmV0Y2hpbmcgaXMgb25seSBjYWxsZWQgZnJvbSBmZXRjaCwgYm9keSBzaG91bGQgYWxyZWFkeSBiZVxuICAvLyBleHRyYWN0ZWQuXG4gIGFzc2VydCghcmVxdWVzdC5ib2R5IHx8IHJlcXVlc3QuYm9keS5zdHJlYW0pXG5cbiAgLy8gOC4gSWYgcmVxdWVzdOKAmXMgd2luZG93IGlzIFwiY2xpZW50XCIsIHRoZW4gc2V0IHJlcXVlc3TigJlzIHdpbmRvdyB0byByZXF1ZXN04oCZc1xuICAvLyBjbGllbnQsIGlmIHJlcXVlc3TigJlzIGNsaWVudOKAmXMgZ2xvYmFsIG9iamVjdCBpcyBhIFdpbmRvdyBvYmplY3Q7IG90aGVyd2lzZVxuICAvLyBcIm5vLXdpbmRvd1wiLlxuICBpZiAocmVxdWVzdC53aW5kb3cgPT09ICdjbGllbnQnKSB7XG4gICAgLy8gVE9ETzogV2hhdCBpZiByZXF1ZXN0LmNsaWVudCBpcyBudWxsP1xuICAgIHJlcXVlc3Qud2luZG93ID1cbiAgICAgIHJlcXVlc3QuY2xpZW50Py5nbG9iYWxPYmplY3Q/LmNvbnN0cnVjdG9yPy5uYW1lID09PSAnV2luZG93J1xuICAgICAgICA/IHJlcXVlc3QuY2xpZW50XG4gICAgICAgIDogJ25vLXdpbmRvdydcbiAgfVxuXG4gIC8vIDkuIElmIHJlcXVlc3TigJlzIG9yaWdpbiBpcyBcImNsaWVudFwiLCB0aGVuIHNldCByZXF1ZXN04oCZcyBvcmlnaW4gdG8gcmVxdWVzdOKAmXNcbiAgLy8gY2xpZW504oCZcyBvcmlnaW4uXG4gIGlmIChyZXF1ZXN0Lm9yaWdpbiA9PT0gJ2NsaWVudCcpIHtcbiAgICAvLyBUT0RPOiBXaGF0IGlmIHJlcXVlc3QuY2xpZW50IGlzIG51bGw/XG4gICAgcmVxdWVzdC5vcmlnaW4gPSByZXF1ZXN0LmNsaWVudD8ub3JpZ2luXG4gIH1cblxuICAvLyAxMC4gSWYgYWxsIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgdHJ1ZTpcbiAgLy8gVE9ET1xuXG4gIC8vIDExLiBJZiByZXF1ZXN04oCZcyBwb2xpY3kgY29udGFpbmVyIGlzIFwiY2xpZW50XCIsIHRoZW46XG4gIGlmIChyZXF1ZXN0LnBvbGljeUNvbnRhaW5lciA9PT0gJ2NsaWVudCcpIHtcbiAgICAvLyAxLiBJZiByZXF1ZXN04oCZcyBjbGllbnQgaXMgbm9uLW51bGwsIHRoZW4gc2V0IHJlcXVlc3TigJlzIHBvbGljeVxuICAgIC8vIGNvbnRhaW5lciB0byBhIGNsb25lIG9mIHJlcXVlc3TigJlzIGNsaWVudOKAmXMgcG9saWN5IGNvbnRhaW5lci4gW0hUTUxdXG4gICAgaWYgKHJlcXVlc3QuY2xpZW50ICE9IG51bGwpIHtcbiAgICAgIHJlcXVlc3QucG9saWN5Q29udGFpbmVyID0gY2xvbmVQb2xpY3lDb250YWluZXIoXG4gICAgICAgIHJlcXVlc3QuY2xpZW50LnBvbGljeUNvbnRhaW5lclxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyAyLiBPdGhlcndpc2UsIHNldCByZXF1ZXN04oCZcyBwb2xpY3kgY29udGFpbmVyIHRvIGEgbmV3IHBvbGljeVxuICAgICAgLy8gY29udGFpbmVyLlxuICAgICAgcmVxdWVzdC5wb2xpY3lDb250YWluZXIgPSBtYWtlUG9saWN5Q29udGFpbmVyKClcbiAgICB9XG4gIH1cblxuICAvLyAxMi4gSWYgcmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgQWNjZXB0YCwgdGhlbjpcbiAgaWYgKCFyZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdhY2NlcHQnKSkge1xuICAgIC8vIDEuIExldCB2YWx1ZSBiZSBgKi8qYC5cbiAgICBjb25zdCB2YWx1ZSA9ICcqLyonXG5cbiAgICAvLyAyLiBBIHVzZXIgYWdlbnQgc2hvdWxkIHNldCB2YWx1ZSB0byB0aGUgZmlyc3QgbWF0Y2hpbmcgc3RhdGVtZW50LCBpZlxuICAgIC8vIGFueSwgc3dpdGNoaW5nIG9uIHJlcXVlc3TigJlzIGRlc3RpbmF0aW9uOlxuICAgIC8vIFwiZG9jdW1lbnRcIlxuICAgIC8vIFwiZnJhbWVcIlxuICAgIC8vIFwiaWZyYW1lXCJcbiAgICAvLyBgdGV4dC9odG1sLGFwcGxpY2F0aW9uL3hodG1sK3htbCxhcHBsaWNhdGlvbi94bWw7cT0wLjksKi8qO3E9MC44YFxuICAgIC8vIFwiaW1hZ2VcIlxuICAgIC8vIGBpbWFnZS9wbmcsaW1hZ2Uvc3ZnK3htbCxpbWFnZS8qO3E9MC44LCovKjtxPTAuNWBcbiAgICAvLyBcInN0eWxlXCJcbiAgICAvLyBgdGV4dC9jc3MsKi8qO3E9MC4xYFxuICAgIC8vIFRPRE9cblxuICAgIC8vIDMuIEFwcGVuZCBgQWNjZXB0YC92YWx1ZSB0byByZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cbiAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnYWNjZXB0JywgdmFsdWUpXG4gIH1cblxuICAvLyAxMy4gSWYgcmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgQWNjZXB0LUxhbmd1YWdlYCwgdGhlblxuICAvLyB1c2VyIGFnZW50cyBzaG91bGQgYXBwZW5kIGBBY2NlcHQtTGFuZ3VhZ2VgL2FuIGFwcHJvcHJpYXRlIHZhbHVlIHRvXG4gIC8vIHJlcXVlc3TigJlzIGhlYWRlciBsaXN0LlxuICBpZiAoIXJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2FjY2VwdC1sYW5ndWFnZScpKSB7XG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ2FjY2VwdC1sYW5ndWFnZScsICcqJylcbiAgfVxuXG4gIC8vIDE0LiBJZiByZXF1ZXN04oCZcyBwcmlvcml0eSBpcyBudWxsLCB0aGVuIHVzZSByZXF1ZXN04oCZcyBpbml0aWF0b3IgYW5kXG4gIC8vIGRlc3RpbmF0aW9uIGFwcHJvcHJpYXRlbHkgaW4gc2V0dGluZyByZXF1ZXN04oCZcyBwcmlvcml0eSB0byBhXG4gIC8vIHVzZXItYWdlbnQtZGVmaW5lZCBvYmplY3QuXG4gIGlmIChyZXF1ZXN0LnByaW9yaXR5ID09PSBudWxsKSB7XG4gICAgLy8gVE9ET1xuICB9XG5cbiAgLy8gMTUuIElmIHJlcXVlc3QgaXMgYSBzdWJyZXNvdXJjZSByZXF1ZXN0LCB0aGVuOlxuICBpZiAoc3VicmVzb3VyY2VTZXQuaGFzKHJlcXVlc3QuZGVzdGluYXRpb24pKSB7XG4gICAgLy8gVE9ET1xuICB9XG5cbiAgLy8gMTYuIFJ1biBtYWluIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLlxuICBtYWluRmV0Y2goZmV0Y2hQYXJhbXMpXG4gICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnRlcm1pbmF0ZShlcnIpXG4gICAgfSlcblxuICAvLyAxNy4gUmV0dXJuIGZldGNoUGFyYW0ncyBjb250cm9sbGVyXG4gIHJldHVybiBmZXRjaFBhcmFtcy5jb250cm9sbGVyXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LW1haW4tZmV0Y2hcbmFzeW5jIGZ1bmN0aW9uIG1haW5GZXRjaCAoZmV0Y2hQYXJhbXMsIHJlY3Vyc2l2ZSA9IGZhbHNlKSB7XG4gIC8vIDEuIExldCByZXF1ZXN0IGJlIGZldGNoUGFyYW1z4oCZcyByZXF1ZXN0LlxuICBjb25zdCByZXF1ZXN0ID0gZmV0Y2hQYXJhbXMucmVxdWVzdFxuXG4gIC8vIDIuIExldCByZXNwb25zZSBiZSBudWxsLlxuICBsZXQgcmVzcG9uc2UgPSBudWxsXG5cbiAgLy8gMy4gSWYgcmVxdWVzdOKAmXMgbG9jYWwtVVJMcy1vbmx5IGZsYWcgaXMgc2V0IGFuZCByZXF1ZXN04oCZcyBjdXJyZW50IFVSTCBpc1xuICAvLyBub3QgbG9jYWwsIHRoZW4gc2V0IHJlc3BvbnNlIHRvIGEgbmV0d29yayBlcnJvci5cbiAgaWYgKHJlcXVlc3QubG9jYWxVUkxzT25seSAmJiAhdXJsSXNMb2NhbChyZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KSkpIHtcbiAgICByZXNwb25zZSA9IG1ha2VOZXR3b3JrRXJyb3IoJ2xvY2FsIFVSTHMgb25seScpXG4gIH1cblxuICAvLyA0LiBSdW4gcmVwb3J0IENvbnRlbnQgU2VjdXJpdHkgUG9saWN5IHZpb2xhdGlvbnMgZm9yIHJlcXVlc3QuXG4gIC8vIFRPRE9cblxuICAvLyA1LiBVcGdyYWRlIHJlcXVlc3QgdG8gYSBwb3RlbnRpYWxseSB0cnVzdHdvcnRoeSBVUkwsIGlmIGFwcHJvcHJpYXRlLlxuICB0cnlVcGdyYWRlUmVxdWVzdFRvQVBvdGVudGlhbGx5VHJ1c3R3b3J0aHlVUkwocmVxdWVzdClcblxuICAvLyA2LiBJZiBzaG91bGQgcmVxdWVzdCBiZSBibG9ja2VkIGR1ZSB0byBhIGJhZCBwb3J0LCBzaG91bGQgZmV0Y2hpbmcgcmVxdWVzdFxuICAvLyBiZSBibG9ja2VkIGFzIG1peGVkIGNvbnRlbnQsIG9yIHNob3VsZCByZXF1ZXN0IGJlIGJsb2NrZWQgYnkgQ29udGVudFxuICAvLyBTZWN1cml0eSBQb2xpY3kgcmV0dXJucyBibG9ja2VkLCB0aGVuIHNldCByZXNwb25zZSB0byBhIG5ldHdvcmsgZXJyb3IuXG4gIGlmIChyZXF1ZXN0QmFkUG9ydChyZXF1ZXN0KSA9PT0gJ2Jsb2NrZWQnKSB7XG4gICAgcmVzcG9uc2UgPSBtYWtlTmV0d29ya0Vycm9yKCdiYWQgcG9ydCcpXG4gIH1cbiAgLy8gVE9ETzogc2hvdWxkIGZldGNoaW5nIHJlcXVlc3QgYmUgYmxvY2tlZCBhcyBtaXhlZCBjb250ZW50P1xuICAvLyBUT0RPOiBzaG91bGQgcmVxdWVzdCBiZSBibG9ja2VkIGJ5IENvbnRlbnQgU2VjdXJpdHkgUG9saWN5P1xuXG4gIC8vIDcuIElmIHJlcXVlc3TigJlzIHJlZmVycmVyIHBvbGljeSBpcyB0aGUgZW1wdHkgc3RyaW5nLCB0aGVuIHNldCByZXF1ZXN04oCZc1xuICAvLyByZWZlcnJlciBwb2xpY3kgdG8gcmVxdWVzdOKAmXMgcG9saWN5IGNvbnRhaW5lcuKAmXMgcmVmZXJyZXIgcG9saWN5LlxuICBpZiAocmVxdWVzdC5yZWZlcnJlclBvbGljeSA9PT0gJycpIHtcbiAgICByZXF1ZXN0LnJlZmVycmVyUG9saWN5ID0gcmVxdWVzdC5wb2xpY3lDb250YWluZXIucmVmZXJyZXJQb2xpY3lcbiAgfVxuXG4gIC8vIDguIElmIHJlcXVlc3TigJlzIHJlZmVycmVyIGlzIG5vdCBcIm5vLXJlZmVycmVyXCIsIHRoZW4gc2V0IHJlcXVlc3TigJlzXG4gIC8vIHJlZmVycmVyIHRvIHRoZSByZXN1bHQgb2YgaW52b2tpbmcgZGV0ZXJtaW5lIHJlcXVlc3TigJlzIHJlZmVycmVyLlxuICBpZiAocmVxdWVzdC5yZWZlcnJlciAhPT0gJ25vLXJlZmVycmVyJykge1xuICAgIHJlcXVlc3QucmVmZXJyZXIgPSBkZXRlcm1pbmVSZXF1ZXN0c1JlZmVycmVyKHJlcXVlc3QpXG4gIH1cblxuICAvLyA5LiBTZXQgcmVxdWVzdOKAmXMgY3VycmVudCBVUkzigJlzIHNjaGVtZSB0byBcImh0dHBzXCIgaWYgYWxsIG9mIHRoZSBmb2xsb3dpbmdcbiAgLy8gY29uZGl0aW9ucyBhcmUgdHJ1ZTpcbiAgLy8gLSByZXF1ZXN04oCZcyBjdXJyZW50IFVSTOKAmXMgc2NoZW1lIGlzIFwiaHR0cFwiXG4gIC8vIC0gcmVxdWVzdOKAmXMgY3VycmVudCBVUkzigJlzIGhvc3QgaXMgYSBkb21haW5cbiAgLy8gLSBNYXRjaGluZyByZXF1ZXN04oCZcyBjdXJyZW50IFVSTOKAmXMgaG9zdCBwZXIgS25vd24gSFNUUyBIb3N0IERvbWFpbiBOYW1lXG4gIC8vICAgTWF0Y2hpbmcgcmVzdWx0cyBpbiBlaXRoZXIgYSBzdXBlcmRvbWFpbiBtYXRjaCB3aXRoIGFuIGFzc2VydGVkXG4gIC8vICAgaW5jbHVkZVN1YkRvbWFpbnMgZGlyZWN0aXZlIG9yIGEgY29uZ3J1ZW50IG1hdGNoICh3aXRoIG9yIHdpdGhvdXQgYW5cbiAgLy8gICBhc3NlcnRlZCBpbmNsdWRlU3ViRG9tYWlucyBkaXJlY3RpdmUpLiBbSFNUU11cbiAgLy8gVE9ET1xuXG4gIC8vIDEwLiBJZiByZWN1cnNpdmUgaXMgZmFsc2UsIHRoZW4gcnVuIHRoZSByZW1haW5pbmcgc3RlcHMgaW4gcGFyYWxsZWwuXG4gIC8vIFRPRE9cblxuICAvLyAxMS4gSWYgcmVzcG9uc2UgaXMgbnVsbCwgdGhlbiBzZXQgcmVzcG9uc2UgdG8gdGhlIHJlc3VsdCBvZiBydW5uaW5nXG4gIC8vIHRoZSBzdGVwcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBmaXJzdCBtYXRjaGluZyBzdGF0ZW1lbnQ6XG4gIGlmIChyZXNwb25zZSA9PT0gbnVsbCkge1xuICAgIHJlc3BvbnNlID0gYXdhaXQgKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRVUkwgPSByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KVxuXG4gICAgICBpZiAoXG4gICAgICAgIC8vIC0gcmVxdWVzdOKAmXMgY3VycmVudCBVUkzigJlzIG9yaWdpbiBpcyBzYW1lIG9yaWdpbiB3aXRoIHJlcXVlc3TigJlzIG9yaWdpbixcbiAgICAgICAgLy8gICBhbmQgcmVxdWVzdOKAmXMgcmVzcG9uc2UgdGFpbnRpbmcgaXMgXCJiYXNpY1wiXG4gICAgICAgIChzYW1lT3JpZ2luKGN1cnJlbnRVUkwsIHJlcXVlc3QudXJsKSAmJiByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdiYXNpYycpIHx8XG4gICAgICAgIC8vIHJlcXVlc3TigJlzIGN1cnJlbnQgVVJM4oCZcyBzY2hlbWUgaXMgXCJkYXRhXCJcbiAgICAgICAgKGN1cnJlbnRVUkwucHJvdG9jb2wgPT09ICdkYXRhOicpIHx8XG4gICAgICAgIC8vIC0gcmVxdWVzdOKAmXMgbW9kZSBpcyBcIm5hdmlnYXRlXCIgb3IgXCJ3ZWJzb2NrZXRcIlxuICAgICAgICAocmVxdWVzdC5tb2RlID09PSAnbmF2aWdhdGUnIHx8IHJlcXVlc3QubW9kZSA9PT0gJ3dlYnNvY2tldCcpXG4gICAgICApIHtcbiAgICAgICAgLy8gMS4gU2V0IHJlcXVlc3TigJlzIHJlc3BvbnNlIHRhaW50aW5nIHRvIFwiYmFzaWNcIi5cbiAgICAgICAgcmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID0gJ2Jhc2ljJ1xuXG4gICAgICAgIC8vIDIuIFJldHVybiB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgc2NoZW1lIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLlxuICAgICAgICByZXR1cm4gYXdhaXQgc2NoZW1lRmV0Y2goZmV0Y2hQYXJhbXMpXG4gICAgICB9XG5cbiAgICAgIC8vIHJlcXVlc3TigJlzIG1vZGUgaXMgXCJzYW1lLW9yaWdpblwiXG4gICAgICBpZiAocmVxdWVzdC5tb2RlID09PSAnc2FtZS1vcmlnaW4nKSB7XG4gICAgICAgIC8vIDEuIFJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdyZXF1ZXN0IG1vZGUgY2Fubm90IGJlIFwic2FtZS1vcmlnaW5cIicpXG4gICAgICB9XG5cbiAgICAgIC8vIHJlcXVlc3TigJlzIG1vZGUgaXMgXCJuby1jb3JzXCJcbiAgICAgIGlmIChyZXF1ZXN0Lm1vZGUgPT09ICduby1jb3JzJykge1xuICAgICAgICAvLyAxLiBJZiByZXF1ZXN04oCZcyByZWRpcmVjdCBtb2RlIGlzIG5vdCBcImZvbGxvd1wiLCB0aGVuIHJldHVybiBhIG5ldHdvcmtcbiAgICAgICAgLy8gZXJyb3IuXG4gICAgICAgIGlmIChyZXF1ZXN0LnJlZGlyZWN0ICE9PSAnZm9sbG93Jykge1xuICAgICAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKFxuICAgICAgICAgICAgJ3JlZGlyZWN0IG1vZGUgY2Fubm90IGJlIFwiZm9sbG93XCIgZm9yIFwibm8tY29yc1wiIHJlcXVlc3QnXG4gICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gMi4gU2V0IHJlcXVlc3TigJlzIHJlc3BvbnNlIHRhaW50aW5nIHRvIFwib3BhcXVlXCIuXG4gICAgICAgIHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9ICdvcGFxdWUnXG5cbiAgICAgICAgLy8gMy4gUmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZyBzY2hlbWUgZmV0Y2ggZ2l2ZW4gZmV0Y2hQYXJhbXMuXG4gICAgICAgIHJldHVybiBhd2FpdCBzY2hlbWVGZXRjaChmZXRjaFBhcmFtcylcbiAgICAgIH1cblxuICAgICAgLy8gcmVxdWVzdOKAmXMgY3VycmVudCBVUkzigJlzIHNjaGVtZSBpcyBub3QgYW4gSFRUUChTKSBzY2hlbWVcbiAgICAgIGlmICghdXJsSXNIdHRwSHR0cHNTY2hlbWUocmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdCkpKSB7XG4gICAgICAgIC8vIFJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdVUkwgc2NoZW1lIG11c3QgYmUgYSBIVFRQKFMpIHNjaGVtZScpXG4gICAgICB9XG5cbiAgICAgIC8vIC0gcmVxdWVzdOKAmXMgdXNlLUNPUlMtcHJlZmxpZ2h0IGZsYWcgaXMgc2V0XG4gICAgICAvLyAtIHJlcXVlc3TigJlzIHVuc2FmZS1yZXF1ZXN0IGZsYWcgaXMgc2V0IGFuZCBlaXRoZXIgcmVxdWVzdOKAmXMgbWV0aG9kIGlzXG4gICAgICAvLyAgIG5vdCBhIENPUlMtc2FmZWxpc3RlZCBtZXRob2Qgb3IgQ09SUy11bnNhZmUgcmVxdWVzdC1oZWFkZXIgbmFtZXMgd2l0aFxuICAgICAgLy8gICByZXF1ZXN04oCZcyBoZWFkZXIgbGlzdCBpcyBub3QgZW1wdHlcbiAgICAgIC8vICAgIDEuIFNldCByZXF1ZXN04oCZcyByZXNwb25zZSB0YWludGluZyB0byBcImNvcnNcIi5cbiAgICAgIC8vICAgIDIuIExldCBjb3JzV2l0aFByZWZsaWdodFJlc3BvbnNlIGJlIHRoZSByZXN1bHQgb2YgcnVubmluZyBIVFRQIGZldGNoXG4gICAgICAvLyAgICBnaXZlbiBmZXRjaFBhcmFtcyBhbmQgdHJ1ZS5cbiAgICAgIC8vICAgIDMuIElmIGNvcnNXaXRoUHJlZmxpZ2h0UmVzcG9uc2UgaXMgYSBuZXR3b3JrIGVycm9yLCB0aGVuIGNsZWFyIGNhY2hlXG4gICAgICAvLyAgICBlbnRyaWVzIHVzaW5nIHJlcXVlc3QuXG4gICAgICAvLyAgICA0LiBSZXR1cm4gY29yc1dpdGhQcmVmbGlnaHRSZXNwb25zZS5cbiAgICAgIC8vIFRPRE9cblxuICAgICAgLy8gT3RoZXJ3aXNlXG4gICAgICAvLyAgICAxLiBTZXQgcmVxdWVzdOKAmXMgcmVzcG9uc2UgdGFpbnRpbmcgdG8gXCJjb3JzXCIuXG4gICAgICByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPSAnY29ycydcblxuICAgICAgLy8gICAgMi4gUmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZyBIVFRQIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLlxuICAgICAgcmV0dXJuIGF3YWl0IGh0dHBGZXRjaChmZXRjaFBhcmFtcylcbiAgICB9KSgpXG4gIH1cblxuICAvLyAxMi4gSWYgcmVjdXJzaXZlIGlzIHRydWUsIHRoZW4gcmV0dXJuIHJlc3BvbnNlLlxuICBpZiAocmVjdXJzaXZlKSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlXG4gIH1cblxuICAvLyAxMy4gSWYgcmVzcG9uc2UgaXMgbm90IGEgbmV0d29yayBlcnJvciBhbmQgcmVzcG9uc2UgaXMgbm90IGEgZmlsdGVyZWRcbiAgLy8gcmVzcG9uc2UsIHRoZW46XG4gIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IDAgJiYgIXJlc3BvbnNlLmludGVybmFsUmVzcG9uc2UpIHtcbiAgICAvLyBJZiByZXF1ZXN04oCZcyByZXNwb25zZSB0YWludGluZyBpcyBcImNvcnNcIiwgdGhlbjpcbiAgICBpZiAocmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnY29ycycpIHtcbiAgICAgIC8vIDEuIExldCBoZWFkZXJOYW1lcyBiZSB0aGUgcmVzdWx0IG9mIGV4dHJhY3RpbmcgaGVhZGVyIGxpc3QgdmFsdWVzXG4gICAgICAvLyBnaXZlbiBgQWNjZXNzLUNvbnRyb2wtRXhwb3NlLUhlYWRlcnNgIGFuZCByZXNwb25zZeKAmXMgaGVhZGVyIGxpc3QuXG4gICAgICAvLyBUT0RPXG4gICAgICAvLyAyLiBJZiByZXF1ZXN04oCZcyBjcmVkZW50aWFscyBtb2RlIGlzIG5vdCBcImluY2x1ZGVcIiBhbmQgaGVhZGVyTmFtZXNcbiAgICAgIC8vIGNvbnRhaW5zIGAqYCwgdGhlbiBzZXQgcmVzcG9uc2XigJlzIENPUlMtZXhwb3NlZCBoZWFkZXItbmFtZSBsaXN0IHRvXG4gICAgICAvLyBhbGwgdW5pcXVlIGhlYWRlciBuYW1lcyBpbiByZXNwb25zZeKAmXMgaGVhZGVyIGxpc3QuXG4gICAgICAvLyBUT0RPXG4gICAgICAvLyAzLiBPdGhlcndpc2UsIGlmIGhlYWRlck5hbWVzIGlzIG5vdCBudWxsIG9yIGZhaWx1cmUsIHRoZW4gc2V0XG4gICAgICAvLyByZXNwb25zZeKAmXMgQ09SUy1leHBvc2VkIGhlYWRlci1uYW1lIGxpc3QgdG8gaGVhZGVyTmFtZXMuXG4gICAgICAvLyBUT0RPXG4gICAgfVxuXG4gICAgLy8gU2V0IHJlc3BvbnNlIHRvIHRoZSBmb2xsb3dpbmcgZmlsdGVyZWQgcmVzcG9uc2Ugd2l0aCByZXNwb25zZSBhcyBpdHNcbiAgICAvLyBpbnRlcm5hbCByZXNwb25zZSwgZGVwZW5kaW5nIG9uIHJlcXVlc3TigJlzIHJlc3BvbnNlIHRhaW50aW5nOlxuICAgIGlmIChyZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdiYXNpYycpIHtcbiAgICAgIHJlc3BvbnNlID0gZmlsdGVyUmVzcG9uc2UocmVzcG9uc2UsICdiYXNpYycpXG4gICAgfSBlbHNlIGlmIChyZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdjb3JzJykge1xuICAgICAgcmVzcG9uc2UgPSBmaWx0ZXJSZXNwb25zZShyZXNwb25zZSwgJ2NvcnMnKVxuICAgIH0gZWxzZSBpZiAocmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnb3BhcXVlJykge1xuICAgICAgcmVzcG9uc2UgPSBmaWx0ZXJSZXNwb25zZShyZXNwb25zZSwgJ29wYXF1ZScpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydChmYWxzZSlcbiAgICB9XG4gIH1cblxuICAvLyAxNC4gTGV0IGludGVybmFsUmVzcG9uc2UgYmUgcmVzcG9uc2UsIGlmIHJlc3BvbnNlIGlzIGEgbmV0d29yayBlcnJvcixcbiAgLy8gYW5kIHJlc3BvbnNl4oCZcyBpbnRlcm5hbCByZXNwb25zZSBvdGhlcndpc2UuXG4gIGxldCBpbnRlcm5hbFJlc3BvbnNlID1cbiAgICByZXNwb25zZS5zdGF0dXMgPT09IDAgPyByZXNwb25zZSA6IHJlc3BvbnNlLmludGVybmFsUmVzcG9uc2VcblxuICAvLyAxNS4gSWYgaW50ZXJuYWxSZXNwb25zZeKAmXMgVVJMIGxpc3QgaXMgZW1wdHksIHRoZW4gc2V0IGl0IHRvIGEgY2xvbmUgb2ZcbiAgLy8gcmVxdWVzdOKAmXMgVVJMIGxpc3QuXG4gIGlmIChpbnRlcm5hbFJlc3BvbnNlLnVybExpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgaW50ZXJuYWxSZXNwb25zZS51cmxMaXN0LnB1c2goLi4ucmVxdWVzdC51cmxMaXN0KVxuICB9XG5cbiAgLy8gMTYuIElmIHJlcXVlc3TigJlzIHRpbWluZyBhbGxvdyBmYWlsZWQgZmxhZyBpcyB1bnNldCwgdGhlbiBzZXRcbiAgLy8gaW50ZXJuYWxSZXNwb25zZeKAmXMgdGltaW5nIGFsbG93IHBhc3NlZCBmbGFnLlxuICBpZiAoIXJlcXVlc3QudGltaW5nQWxsb3dGYWlsZWQpIHtcbiAgICByZXNwb25zZS50aW1pbmdBbGxvd1Bhc3NlZCA9IHRydWVcbiAgfVxuXG4gIC8vIDE3LiBJZiByZXNwb25zZSBpcyBub3QgYSBuZXR3b3JrIGVycm9yIGFuZCBhbnkgb2YgdGhlIGZvbGxvd2luZyByZXR1cm5zXG4gIC8vIGJsb2NrZWRcbiAgLy8gLSBzaG91bGQgaW50ZXJuYWxSZXNwb25zZSB0byByZXF1ZXN0IGJlIGJsb2NrZWQgYXMgbWl4ZWQgY29udGVudFxuICAvLyAtIHNob3VsZCBpbnRlcm5hbFJlc3BvbnNlIHRvIHJlcXVlc3QgYmUgYmxvY2tlZCBieSBDb250ZW50IFNlY3VyaXR5IFBvbGljeVxuICAvLyAtIHNob3VsZCBpbnRlcm5hbFJlc3BvbnNlIHRvIHJlcXVlc3QgYmUgYmxvY2tlZCBkdWUgdG8gaXRzIE1JTUUgdHlwZVxuICAvLyAtIHNob3VsZCBpbnRlcm5hbFJlc3BvbnNlIHRvIHJlcXVlc3QgYmUgYmxvY2tlZCBkdWUgdG8gbm9zbmlmZlxuICAvLyBUT0RPXG5cbiAgLy8gMTguIElmIHJlc3BvbnNl4oCZcyB0eXBlIGlzIFwib3BhcXVlXCIsIGludGVybmFsUmVzcG9uc2XigJlzIHN0YXR1cyBpcyAyMDYsXG4gIC8vIGludGVybmFsUmVzcG9uc2XigJlzIHJhbmdlLXJlcXVlc3RlZCBmbGFnIGlzIHNldCwgYW5kIHJlcXVlc3TigJlzIGhlYWRlclxuICAvLyBsaXN0IGRvZXMgbm90IGNvbnRhaW4gYFJhbmdlYCwgdGhlbiBzZXQgcmVzcG9uc2UgYW5kIGludGVybmFsUmVzcG9uc2VcbiAgLy8gdG8gYSBuZXR3b3JrIGVycm9yLlxuICBpZiAoXG4gICAgcmVzcG9uc2UudHlwZSA9PT0gJ29wYXF1ZScgJiZcbiAgICBpbnRlcm5hbFJlc3BvbnNlLnN0YXR1cyA9PT0gMjA2ICYmXG4gICAgaW50ZXJuYWxSZXNwb25zZS5yYW5nZVJlcXVlc3RlZCAmJlxuICAgICFyZXF1ZXN0LmhlYWRlcnMuY29udGFpbnMoJ3JhbmdlJylcbiAgKSB7XG4gICAgcmVzcG9uc2UgPSBpbnRlcm5hbFJlc3BvbnNlID0gbWFrZU5ldHdvcmtFcnJvcigpXG4gIH1cblxuICAvLyAxOS4gSWYgcmVzcG9uc2UgaXMgbm90IGEgbmV0d29yayBlcnJvciBhbmQgZWl0aGVyIHJlcXVlc3TigJlzIG1ldGhvZCBpc1xuICAvLyBgSEVBRGAgb3IgYENPTk5FQ1RgLCBvciBpbnRlcm5hbFJlc3BvbnNl4oCZcyBzdGF0dXMgaXMgYSBudWxsIGJvZHkgc3RhdHVzLFxuICAvLyBzZXQgaW50ZXJuYWxSZXNwb25zZeKAmXMgYm9keSB0byBudWxsIGFuZCBkaXNyZWdhcmQgYW55IGVucXVldWluZyB0b3dhcmRcbiAgLy8gaXQgKGlmIGFueSkuXG4gIGlmIChcbiAgICByZXNwb25zZS5zdGF0dXMgIT09IDAgJiZcbiAgICAocmVxdWVzdC5tZXRob2QgPT09ICdIRUFEJyB8fFxuICAgICAgcmVxdWVzdC5tZXRob2QgPT09ICdDT05ORUNUJyB8fFxuICAgICAgbnVsbEJvZHlTdGF0dXMuaW5jbHVkZXMoaW50ZXJuYWxSZXNwb25zZS5zdGF0dXMpKVxuICApIHtcbiAgICBpbnRlcm5hbFJlc3BvbnNlLmJvZHkgPSBudWxsXG4gICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5kdW1wID0gdHJ1ZVxuICB9XG5cbiAgLy8gMjAuIElmIHJlcXVlc3TigJlzIGludGVncml0eSBtZXRhZGF0YSBpcyBub3QgdGhlIGVtcHR5IHN0cmluZywgdGhlbjpcbiAgaWYgKHJlcXVlc3QuaW50ZWdyaXR5KSB7XG4gICAgLy8gMS4gTGV0IHByb2Nlc3NCb2R5RXJyb3IgYmUgdGhpcyBzdGVwOiBydW4gZmV0Y2ggZmluYWxlIGdpdmVuIGZldGNoUGFyYW1zXG4gICAgLy8gYW5kIGEgbmV0d29yayBlcnJvci5cbiAgICBjb25zdCBwcm9jZXNzQm9keUVycm9yID0gKHJlYXNvbikgPT5cbiAgICAgIGZldGNoRmluYWxlKGZldGNoUGFyYW1zLCBtYWtlTmV0d29ya0Vycm9yKHJlYXNvbikpXG5cbiAgICAvLyAyLiBJZiByZXF1ZXN04oCZcyByZXNwb25zZSB0YWludGluZyBpcyBcIm9wYXF1ZVwiLCBvciByZXNwb25zZeKAmXMgYm9keSBpcyBudWxsLFxuICAgIC8vIHRoZW4gcnVuIHByb2Nlc3NCb2R5RXJyb3IgYW5kIGFib3J0IHRoZXNlIHN0ZXBzLlxuICAgIGlmIChyZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdvcGFxdWUnIHx8IHJlc3BvbnNlLmJvZHkgPT0gbnVsbCkge1xuICAgICAgcHJvY2Vzc0JvZHlFcnJvcihyZXNwb25zZS5lcnJvcilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIDMuIExldCBwcm9jZXNzQm9keSBnaXZlbiBieXRlcyBiZSB0aGVzZSBzdGVwczpcbiAgICBjb25zdCBwcm9jZXNzQm9keSA9IChieXRlcykgPT4ge1xuICAgICAgLy8gMS4gSWYgYnl0ZXMgZG8gbm90IG1hdGNoIHJlcXVlc3TigJlzIGludGVncml0eSBtZXRhZGF0YSxcbiAgICAgIC8vIHRoZW4gcnVuIHByb2Nlc3NCb2R5RXJyb3IgYW5kIGFib3J0IHRoZXNlIHN0ZXBzLiBbU1JJXVxuICAgICAgaWYgKCFieXRlc01hdGNoKGJ5dGVzLCByZXF1ZXN0LmludGVncml0eSkpIHtcbiAgICAgICAgcHJvY2Vzc0JvZHlFcnJvcignaW50ZWdyaXR5IG1pc21hdGNoJylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIFNldCByZXNwb25zZeKAmXMgYm9keSB0byBieXRlcyBhcyBhIGJvZHkuXG4gICAgICByZXNwb25zZS5ib2R5ID0gc2FmZWx5RXh0cmFjdEJvZHkoYnl0ZXMpWzBdXG5cbiAgICAgIC8vIDMuIFJ1biBmZXRjaCBmaW5hbGUgZ2l2ZW4gZmV0Y2hQYXJhbXMgYW5kIHJlc3BvbnNlLlxuICAgICAgZmV0Y2hGaW5hbGUoZmV0Y2hQYXJhbXMsIHJlc3BvbnNlKVxuICAgIH1cblxuICAgIC8vIDQuIEZ1bGx5IHJlYWQgcmVzcG9uc2XigJlzIGJvZHkgZ2l2ZW4gcHJvY2Vzc0JvZHkgYW5kIHByb2Nlc3NCb2R5RXJyb3IuXG4gICAgYXdhaXQgZnVsbHlSZWFkQm9keShyZXNwb25zZS5ib2R5LCBwcm9jZXNzQm9keSwgcHJvY2Vzc0JvZHlFcnJvcilcbiAgfSBlbHNlIHtcbiAgICAvLyAyMS4gT3RoZXJ3aXNlLCBydW4gZmV0Y2ggZmluYWxlIGdpdmVuIGZldGNoUGFyYW1zIGFuZCByZXNwb25zZS5cbiAgICBmZXRjaEZpbmFsZShmZXRjaFBhcmFtcywgcmVzcG9uc2UpXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtc2NoZW1lLWZldGNoXG4vLyBnaXZlbiBhIGZldGNoIHBhcmFtcyBmZXRjaFBhcmFtc1xuZnVuY3Rpb24gc2NoZW1lRmV0Y2ggKGZldGNoUGFyYW1zKSB7XG4gIC8vIE5vdGU6IHNpbmNlIHRoZSBjb25uZWN0aW9uIGlzIGRlc3Ryb3llZCBvbiByZWRpcmVjdCwgd2hpY2ggc2V0cyBmZXRjaFBhcmFtcyB0byBhXG4gIC8vIGNhbmNlbGxlZCBzdGF0ZSwgd2UgZG8gbm90IHdhbnQgdGhpcyBjb25kaXRpb24gdG8gdHJpZ2dlciAqdW5sZXNzKiB0aGVyZSBoYXZlIGJlZW5cbiAgLy8gbm8gcmVkaXJlY3RzLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzE3NzZcbiAgLy8gMS4gSWYgZmV0Y2hQYXJhbXMgaXMgY2FuY2VsZWQsIHRoZW4gcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSBuZXR3b3JrIGVycm9yIGZvciBmZXRjaFBhcmFtcy5cbiAgaWYgKGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSAmJiBmZXRjaFBhcmFtcy5yZXF1ZXN0LnJlZGlyZWN0Q291bnQgPT09IDApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VBcHByb3ByaWF0ZU5ldHdvcmtFcnJvcihmZXRjaFBhcmFtcykpXG4gIH1cblxuICAvLyAyLiBMZXQgcmVxdWVzdCBiZSBmZXRjaFBhcmFtc+KAmXMgcmVxdWVzdC5cbiAgY29uc3QgeyByZXF1ZXN0IH0gPSBmZXRjaFBhcmFtc1xuXG4gIGNvbnN0IHsgcHJvdG9jb2w6IHNjaGVtZSB9ID0gcmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdClcblxuICAvLyAzLiBTd2l0Y2ggb24gcmVxdWVzdOKAmXMgY3VycmVudCBVUkzigJlzIHNjaGVtZSBhbmQgcnVuIHRoZSBhc3NvY2lhdGVkIHN0ZXBzOlxuICBzd2l0Y2ggKHNjaGVtZSkge1xuICAgIGNhc2UgJ2Fib3V0Oic6IHtcbiAgICAgIC8vIElmIHJlcXVlc3TigJlzIGN1cnJlbnQgVVJM4oCZcyBwYXRoIGlzIHRoZSBzdHJpbmcgXCJibGFua1wiLCB0aGVuIHJldHVybiBhIG5ldyByZXNwb25zZVxuICAgICAgLy8gd2hvc2Ugc3RhdHVzIG1lc3NhZ2UgaXMgYE9LYCwgaGVhZGVyIGxpc3QgaXMgwqsgKGBDb250ZW50LVR5cGVgLCBgdGV4dC9odG1sO2NoYXJzZXQ9dXRmLThgKSDCuyxcbiAgICAgIC8vIGFuZCBib2R5IGlzIHRoZSBlbXB0eSBieXRlIHNlcXVlbmNlIGFzIGEgYm9keS5cblxuICAgICAgLy8gT3RoZXJ3aXNlLCByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKCdhYm91dCBzY2hlbWUgaXMgbm90IHN1cHBvcnRlZCcpKVxuICAgIH1cbiAgICBjYXNlICdibG9iOic6IHtcbiAgICAgIGlmICghcmVzb2x2ZU9iamVjdFVSTCkge1xuICAgICAgICByZXNvbHZlT2JqZWN0VVJMID0gcmVxdWlyZSgnYnVmZmVyJykucmVzb2x2ZU9iamVjdFVSTFxuICAgICAgfVxuXG4gICAgICAvLyAxLiBMZXQgYmxvYlVSTEVudHJ5IGJlIHJlcXVlc3TigJlzIGN1cnJlbnQgVVJM4oCZcyBibG9iIFVSTCBlbnRyeS5cbiAgICAgIGNvbnN0IGJsb2JVUkxFbnRyeSA9IHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpXG5cbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS93ZWItcGxhdGZvcm0tdGVzdHMvd3B0L2Jsb2IvN2IwZWJhY2NjNjJiNTY2YTE5NjUzOTZlNWJlN2JiMmJjMDZmODQxZi9GaWxlQVBJL3VybC9yZXNvdXJjZXMvZmV0Y2gtdGVzdHMuanMjTDUyLUw1NlxuICAgICAgLy8gQnVmZmVyLnJlc29sdmVPYmplY3RVUkwgZG9lcyBub3QgaWdub3JlIFVSTCBxdWVyaWVzLlxuICAgICAgaWYgKGJsb2JVUkxFbnRyeS5zZWFyY2gubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignTmV0d29ya0Vycm9yIHdoZW4gYXR0ZW1wdGluZyB0byBmZXRjaCByZXNvdXJjZS4nKSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgYmxvYlVSTEVudHJ5T2JqZWN0ID0gcmVzb2x2ZU9iamVjdFVSTChibG9iVVJMRW50cnkudG9TdHJpbmcoKSlcblxuICAgICAgLy8gMi4gSWYgcmVxdWVzdOKAmXMgbWV0aG9kIGlzIG5vdCBgR0VUYCwgYmxvYlVSTEVudHJ5IGlzIG51bGwsIG9yIGJsb2JVUkxFbnRyeeKAmXNcbiAgICAgIC8vICAgIG9iamVjdCBpcyBub3QgYSBCbG9iIG9iamVjdCwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICAgICAgaWYgKHJlcXVlc3QubWV0aG9kICE9PSAnR0VUJyB8fCAhaXNCbG9iTGlrZShibG9iVVJMRW50cnlPYmplY3QpKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignaW52YWxpZCBtZXRob2QnKSlcbiAgICAgIH1cblxuICAgICAgLy8gMy4gTGV0IGJvZHlXaXRoVHlwZSBiZSB0aGUgcmVzdWx0IG9mIHNhZmVseSBleHRyYWN0aW5nIGJsb2JVUkxFbnRyeeKAmXMgb2JqZWN0LlxuICAgICAgY29uc3QgYm9keVdpdGhUeXBlID0gc2FmZWx5RXh0cmFjdEJvZHkoYmxvYlVSTEVudHJ5T2JqZWN0KVxuXG4gICAgICAvLyA0LiBMZXQgYm9keSBiZSBib2R5V2l0aFR5cGXigJlzIGJvZHkuXG4gICAgICBjb25zdCBib2R5ID0gYm9keVdpdGhUeXBlWzBdXG5cbiAgICAgIC8vIDUuIExldCBsZW5ndGggYmUgYm9keeKAmXMgbGVuZ3RoLCBzZXJpYWxpemVkIGFuZCBpc29tb3JwaGljIGVuY29kZWQuXG4gICAgICBjb25zdCBsZW5ndGggPSBpc29tb3JwaGljRW5jb2RlKGAke2JvZHkubGVuZ3RofWApXG5cbiAgICAgIC8vIDYuIExldCB0eXBlIGJlIGJvZHlXaXRoVHlwZeKAmXMgdHlwZSBpZiBpdCBpcyBub24tbnVsbDsgb3RoZXJ3aXNlIHRoZSBlbXB0eSBieXRlIHNlcXVlbmNlLlxuICAgICAgY29uc3QgdHlwZSA9IGJvZHlXaXRoVHlwZVsxXSA/PyAnJ1xuXG4gICAgICAvLyA3LiBSZXR1cm4gYSBuZXcgcmVzcG9uc2Ugd2hvc2Ugc3RhdHVzIG1lc3NhZ2UgaXMgYE9LYCwgaGVhZGVyIGxpc3QgaXNcbiAgICAgIC8vICAgIMKrIChgQ29udGVudC1MZW5ndGhgLCBsZW5ndGgpLCAoYENvbnRlbnQtVHlwZWAsIHR5cGUpIMK7LCBhbmQgYm9keSBpcyBib2R5LlxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBtYWtlUmVzcG9uc2Uoe1xuICAgICAgICBzdGF0dXNUZXh0OiAnT0snLFxuICAgICAgICBoZWFkZXJzTGlzdDogW1xuICAgICAgICAgIFsnY29udGVudC1sZW5ndGgnLCB7IG5hbWU6ICdDb250ZW50LUxlbmd0aCcsIHZhbHVlOiBsZW5ndGggfV0sXG4gICAgICAgICAgWydjb250ZW50LXR5cGUnLCB7IG5hbWU6ICdDb250ZW50LVR5cGUnLCB2YWx1ZTogdHlwZSB9XVxuICAgICAgICBdXG4gICAgICB9KVxuXG4gICAgICByZXNwb25zZS5ib2R5ID0gYm9keVxuXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3BvbnNlKVxuICAgIH1cbiAgICBjYXNlICdkYXRhOic6IHtcbiAgICAgIC8vIDEuIExldCBkYXRhVVJMU3RydWN0IGJlIHRoZSByZXN1bHQgb2YgcnVubmluZyB0aGVcbiAgICAgIC8vICAgIGRhdGE6IFVSTCBwcm9jZXNzb3Igb24gcmVxdWVzdOKAmXMgY3VycmVudCBVUkwuXG4gICAgICBjb25zdCBjdXJyZW50VVJMID0gcmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdClcbiAgICAgIGNvbnN0IGRhdGFVUkxTdHJ1Y3QgPSBkYXRhVVJMUHJvY2Vzc29yKGN1cnJlbnRVUkwpXG5cbiAgICAgIC8vIDIuIElmIGRhdGFVUkxTdHJ1Y3QgaXMgZmFpbHVyZSwgdGhlbiByZXR1cm4gYVxuICAgICAgLy8gICAgbmV0d29yayBlcnJvci5cbiAgICAgIGlmIChkYXRhVVJMU3RydWN0ID09PSAnZmFpbHVyZScpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKCdmYWlsZWQgdG8gZmV0Y2ggdGhlIGRhdGEgVVJMJykpXG4gICAgICB9XG5cbiAgICAgIC8vIDMuIExldCBtaW1lVHlwZSBiZSBkYXRhVVJMU3RydWN04oCZcyBNSU1FIHR5cGUsIHNlcmlhbGl6ZWQuXG4gICAgICBjb25zdCBtaW1lVHlwZSA9IHNlcmlhbGl6ZUFNaW1lVHlwZShkYXRhVVJMU3RydWN0Lm1pbWVUeXBlKVxuXG4gICAgICAvLyA0LiBSZXR1cm4gYSByZXNwb25zZSB3aG9zZSBzdGF0dXMgbWVzc2FnZSBpcyBgT0tgLFxuICAgICAgLy8gICAgaGVhZGVyIGxpc3QgaXMgwqsgKGBDb250ZW50LVR5cGVgLCBtaW1lVHlwZSkgwrssXG4gICAgICAvLyAgICBhbmQgYm9keSBpcyBkYXRhVVJMU3RydWN04oCZcyBib2R5IGFzIGEgYm9keS5cbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZVJlc3BvbnNlKHtcbiAgICAgICAgc3RhdHVzVGV4dDogJ09LJyxcbiAgICAgICAgaGVhZGVyc0xpc3Q6IFtcbiAgICAgICAgICBbJ2NvbnRlbnQtdHlwZScsIHsgbmFtZTogJ0NvbnRlbnQtVHlwZScsIHZhbHVlOiBtaW1lVHlwZSB9XVxuICAgICAgICBdLFxuICAgICAgICBib2R5OiBzYWZlbHlFeHRyYWN0Qm9keShkYXRhVVJMU3RydWN0LmJvZHkpWzBdXG4gICAgICB9KSlcbiAgICB9XG4gICAgY2FzZSAnZmlsZTonOiB7XG4gICAgICAvLyBGb3Igbm93LCB1bmZvcnR1bmF0ZSBhcyBpdCBpcywgZmlsZSBVUkxzIGFyZSBsZWZ0IGFzIGFuIGV4ZXJjaXNlIGZvciB0aGUgcmVhZGVyLlxuICAgICAgLy8gV2hlbiBpbiBkb3VidCwgcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignbm90IGltcGxlbWVudGVkLi4uIHlldC4uLicpKVxuICAgIH1cbiAgICBjYXNlICdodHRwOic6XG4gICAgY2FzZSAnaHR0cHM6Jzoge1xuICAgICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZyBIVFRQIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLlxuXG4gICAgICByZXR1cm4gaHR0cEZldGNoKGZldGNoUGFyYW1zKVxuICAgICAgICAuY2F0Y2goKGVycikgPT4gbWFrZU5ldHdvcmtFcnJvcihlcnIpKVxuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoJ3Vua25vd24gc2NoZW1lJykpXG4gICAgfVxuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmaW5hbGl6ZS1yZXNwb25zZVxuZnVuY3Rpb24gZmluYWxpemVSZXNwb25zZSAoZmV0Y2hQYXJhbXMsIHJlc3BvbnNlKSB7XG4gIC8vIDEuIFNldCBmZXRjaFBhcmFtc+KAmXMgcmVxdWVzdOKAmXMgZG9uZSBmbGFnLlxuICBmZXRjaFBhcmFtcy5yZXF1ZXN0LmRvbmUgPSB0cnVlXG5cbiAgLy8gMiwgSWYgZmV0Y2hQYXJhbXPigJlzIHByb2Nlc3MgcmVzcG9uc2UgZG9uZSBpcyBub3QgbnVsbCwgdGhlbiBxdWV1ZSBhIGZldGNoXG4gIC8vIHRhc2sgdG8gcnVuIGZldGNoUGFyYW1z4oCZcyBwcm9jZXNzIHJlc3BvbnNlIGRvbmUgZ2l2ZW4gcmVzcG9uc2UsIHdpdGhcbiAgLy8gZmV0Y2hQYXJhbXPigJlzIHRhc2sgZGVzdGluYXRpb24uXG4gIGlmIChmZXRjaFBhcmFtcy5wcm9jZXNzUmVzcG9uc2VEb25lICE9IG51bGwpIHtcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBmZXRjaFBhcmFtcy5wcm9jZXNzUmVzcG9uc2VEb25lKHJlc3BvbnNlKSlcbiAgfVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZmV0Y2gtZmluYWxlXG5mdW5jdGlvbiBmZXRjaEZpbmFsZSAoZmV0Y2hQYXJhbXMsIHJlc3BvbnNlKSB7XG4gIC8vIDEuIElmIHJlc3BvbnNlIGlzIGEgbmV0d29yayBlcnJvciwgdGhlbjpcbiAgaWYgKHJlc3BvbnNlLnR5cGUgPT09ICdlcnJvcicpIHtcbiAgICAvLyAxLiBTZXQgcmVzcG9uc2XigJlzIFVSTCBsaXN0IHRvIMKrIGZldGNoUGFyYW1z4oCZcyByZXF1ZXN04oCZcyBVUkwgbGlzdFswXSDCuy5cbiAgICByZXNwb25zZS51cmxMaXN0ID0gW2ZldGNoUGFyYW1zLnJlcXVlc3QudXJsTGlzdFswXV1cblxuICAgIC8vIDIuIFNldCByZXNwb25zZeKAmXMgdGltaW5nIGluZm8gdG8gdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhbiBvcGFxdWUgdGltaW5nXG4gICAgLy8gaW5mbyBmb3IgZmV0Y2hQYXJhbXPigJlzIHRpbWluZyBpbmZvLlxuICAgIHJlc3BvbnNlLnRpbWluZ0luZm8gPSBjcmVhdGVPcGFxdWVUaW1pbmdJbmZvKHtcbiAgICAgIHN0YXJ0VGltZTogZmV0Y2hQYXJhbXMudGltaW5nSW5mby5zdGFydFRpbWVcbiAgICB9KVxuICB9XG5cbiAgLy8gMi4gTGV0IHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSBiZSB0aGUgZm9sbG93aW5nIHN0ZXBzOlxuICBjb25zdCBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHkgPSAoKSA9PiB7XG4gICAgLy8gMS4gU2V0IGZldGNoUGFyYW1z4oCZcyByZXF1ZXN04oCZcyBkb25lIGZsYWcuXG4gICAgZmV0Y2hQYXJhbXMucmVxdWVzdC5kb25lID0gdHJ1ZVxuXG4gICAgLy8gSWYgZmV0Y2hQYXJhbXPigJlzIHByb2Nlc3MgcmVzcG9uc2UgZW5kLW9mLWJvZHkgaXMgbm90IG51bGwsXG4gICAgLy8gdGhlbiBxdWV1ZSBhIGZldGNoIHRhc2sgdG8gcnVuIGZldGNoUGFyYW1z4oCZcyBwcm9jZXNzIHJlc3BvbnNlXG4gICAgLy8gZW5kLW9mLWJvZHkgZ2l2ZW4gcmVzcG9uc2Ugd2l0aCBmZXRjaFBhcmFtc+KAmXMgdGFzayBkZXN0aW5hdGlvbi5cbiAgICBpZiAoZmV0Y2hQYXJhbXMucHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5ICE9IG51bGwpIHtcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZUVuZE9mQm9keShyZXNwb25zZSkpXG4gICAgfVxuICB9XG5cbiAgLy8gMy4gSWYgZmV0Y2hQYXJhbXPigJlzIHByb2Nlc3MgcmVzcG9uc2UgaXMgbm9uLW51bGwsIHRoZW4gcXVldWUgYSBmZXRjaCB0YXNrXG4gIC8vIHRvIHJ1biBmZXRjaFBhcmFtc+KAmXMgcHJvY2VzcyByZXNwb25zZSBnaXZlbiByZXNwb25zZSwgd2l0aCBmZXRjaFBhcmFtc+KAmXNcbiAgLy8gdGFzayBkZXN0aW5hdGlvbi5cbiAgaWYgKGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZSAhPSBudWxsKSB7XG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gZmV0Y2hQYXJhbXMucHJvY2Vzc1Jlc3BvbnNlKHJlc3BvbnNlKSlcbiAgfVxuXG4gIC8vIDQuIElmIHJlc3BvbnNl4oCZcyBib2R5IGlzIG51bGwsIHRoZW4gcnVuIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keS5cbiAgaWYgKHJlc3BvbnNlLmJvZHkgPT0gbnVsbCkge1xuICAgIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSgpXG4gIH0gZWxzZSB7XG4gIC8vIDUuIE90aGVyd2lzZTpcblxuICAgIC8vIDEuIExldCB0cmFuc2Zvcm1TdHJlYW0gYmUgYSBuZXcgYSBUcmFuc2Zvcm1TdHJlYW0uXG5cbiAgICAvLyAyLiBMZXQgaWRlbnRpdHlUcmFuc2Zvcm1BbGdvcml0aG0gYmUgYW4gYWxnb3JpdGhtIHdoaWNoLCBnaXZlbiBjaHVuayxcbiAgICAvLyBlbnF1ZXVlcyBjaHVuayBpbiB0cmFuc2Zvcm1TdHJlYW0uXG4gICAgY29uc3QgaWRlbnRpdHlUcmFuc2Zvcm1BbGdvcml0aG0gPSAoY2h1bmssIGNvbnRyb2xsZXIpID0+IHtcbiAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShjaHVuaylcbiAgICB9XG5cbiAgICAvLyAzLiBTZXQgdXAgdHJhbnNmb3JtU3RyZWFtIHdpdGggdHJhbnNmb3JtQWxnb3JpdGhtIHNldCB0byBpZGVudGl0eVRyYW5zZm9ybUFsZ29yaXRobVxuICAgIC8vIGFuZCBmbHVzaEFsZ29yaXRobSBzZXQgdG8gcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5LlxuICAgIGNvbnN0IHRyYW5zZm9ybVN0cmVhbSA9IG5ldyBUcmFuc2Zvcm1TdHJlYW0oe1xuICAgICAgc3RhcnQgKCkge30sXG4gICAgICB0cmFuc2Zvcm06IGlkZW50aXR5VHJhbnNmb3JtQWxnb3JpdGhtLFxuICAgICAgZmx1c2g6IHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keVxuICAgIH0sIHtcbiAgICAgIHNpemUgKCkge1xuICAgICAgICByZXR1cm4gMVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIHNpemUgKCkge1xuICAgICAgICByZXR1cm4gMVxuICAgICAgfVxuICAgIH0pXG5cbiAgICAvLyA0LiBTZXQgcmVzcG9uc2XigJlzIGJvZHkgdG8gdGhlIHJlc3VsdCBvZiBwaXBpbmcgcmVzcG9uc2XigJlzIGJvZHkgdGhyb3VnaCB0cmFuc2Zvcm1TdHJlYW0uXG4gICAgcmVzcG9uc2UuYm9keSA9IHsgc3RyZWFtOiByZXNwb25zZS5ib2R5LnN0cmVhbS5waXBlVGhyb3VnaCh0cmFuc2Zvcm1TdHJlYW0pIH1cbiAgfVxuXG4gIC8vIDYuIElmIGZldGNoUGFyYW1z4oCZcyBwcm9jZXNzIHJlc3BvbnNlIGNvbnN1bWUgYm9keSBpcyBub24tbnVsbCwgdGhlbjpcbiAgaWYgKGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZUNvbnN1bWVCb2R5ICE9IG51bGwpIHtcbiAgICAvLyAxLiBMZXQgcHJvY2Vzc0JvZHkgZ2l2ZW4gbnVsbE9yQnl0ZXMgYmUgdGhpcyBzdGVwOiBydW4gZmV0Y2hQYXJhbXPigJlzXG4gICAgLy8gcHJvY2VzcyByZXNwb25zZSBjb25zdW1lIGJvZHkgZ2l2ZW4gcmVzcG9uc2UgYW5kIG51bGxPckJ5dGVzLlxuICAgIGNvbnN0IHByb2Nlc3NCb2R5ID0gKG51bGxPckJ5dGVzKSA9PiBmZXRjaFBhcmFtcy5wcm9jZXNzUmVzcG9uc2VDb25zdW1lQm9keShyZXNwb25zZSwgbnVsbE9yQnl0ZXMpXG5cbiAgICAvLyAyLiBMZXQgcHJvY2Vzc0JvZHlFcnJvciBiZSB0aGlzIHN0ZXA6IHJ1biBmZXRjaFBhcmFtc+KAmXMgcHJvY2Vzc1xuICAgIC8vIHJlc3BvbnNlIGNvbnN1bWUgYm9keSBnaXZlbiByZXNwb25zZSBhbmQgZmFpbHVyZS5cbiAgICBjb25zdCBwcm9jZXNzQm9keUVycm9yID0gKGZhaWx1cmUpID0+IGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZUNvbnN1bWVCb2R5KHJlc3BvbnNlLCBmYWlsdXJlKVxuXG4gICAgLy8gMy4gSWYgcmVzcG9uc2XigJlzIGJvZHkgaXMgbnVsbCwgdGhlbiBxdWV1ZSBhIGZldGNoIHRhc2sgdG8gcnVuIHByb2Nlc3NCb2R5XG4gICAgLy8gZ2l2ZW4gbnVsbCwgd2l0aCBmZXRjaFBhcmFtc+KAmXMgdGFzayBkZXN0aW5hdGlvbi5cbiAgICBpZiAocmVzcG9uc2UuYm9keSA9PSBudWxsKSB7XG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBwcm9jZXNzQm9keShudWxsKSlcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gNC4gT3RoZXJ3aXNlLCBmdWxseSByZWFkIHJlc3BvbnNl4oCZcyBib2R5IGdpdmVuIHByb2Nlc3NCb2R5LCBwcm9jZXNzQm9keUVycm9yLFxuICAgICAgLy8gYW5kIGZldGNoUGFyYW1z4oCZcyB0YXNrIGRlc3RpbmF0aW9uLlxuICAgICAgcmV0dXJuIGZ1bGx5UmVhZEJvZHkocmVzcG9uc2UuYm9keSwgcHJvY2Vzc0JvZHksIHByb2Nlc3NCb2R5RXJyb3IpXG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNodHRwLWZldGNoXG5hc3luYyBmdW5jdGlvbiBodHRwRmV0Y2ggKGZldGNoUGFyYW1zKSB7XG4gIC8vIDEuIExldCByZXF1ZXN0IGJlIGZldGNoUGFyYW1z4oCZcyByZXF1ZXN0LlxuICBjb25zdCByZXF1ZXN0ID0gZmV0Y2hQYXJhbXMucmVxdWVzdFxuXG4gIC8vIDIuIExldCByZXNwb25zZSBiZSBudWxsLlxuICBsZXQgcmVzcG9uc2UgPSBudWxsXG5cbiAgLy8gMy4gTGV0IGFjdHVhbFJlc3BvbnNlIGJlIG51bGwuXG4gIGxldCBhY3R1YWxSZXNwb25zZSA9IG51bGxcblxuICAvLyA0LiBMZXQgdGltaW5nSW5mbyBiZSBmZXRjaFBhcmFtc+KAmXMgdGltaW5nIGluZm8uXG4gIGNvbnN0IHRpbWluZ0luZm8gPSBmZXRjaFBhcmFtcy50aW1pbmdJbmZvXG5cbiAgLy8gNS4gSWYgcmVxdWVzdOKAmXMgc2VydmljZS13b3JrZXJzIG1vZGUgaXMgXCJhbGxcIiwgdGhlbjpcbiAgaWYgKHJlcXVlc3Quc2VydmljZVdvcmtlcnMgPT09ICdhbGwnKSB7XG4gICAgLy8gVE9ET1xuICB9XG5cbiAgLy8gNi4gSWYgcmVzcG9uc2UgaXMgbnVsbCwgdGhlbjpcbiAgaWYgKHJlc3BvbnNlID09PSBudWxsKSB7XG4gICAgLy8gMS4gSWYgbWFrZUNPUlNQcmVmbGlnaHQgaXMgdHJ1ZSBhbmQgb25lIG9mIHRoZXNlIGNvbmRpdGlvbnMgaXMgdHJ1ZTpcbiAgICAvLyBUT0RPXG5cbiAgICAvLyAyLiBJZiByZXF1ZXN04oCZcyByZWRpcmVjdCBtb2RlIGlzIFwiZm9sbG93XCIsIHRoZW4gc2V0IHJlcXVlc3TigJlzXG4gICAgLy8gc2VydmljZS13b3JrZXJzIG1vZGUgdG8gXCJub25lXCIuXG4gICAgaWYgKHJlcXVlc3QucmVkaXJlY3QgPT09ICdmb2xsb3cnKSB7XG4gICAgICByZXF1ZXN0LnNlcnZpY2VXb3JrZXJzID0gJ25vbmUnXG4gICAgfVxuXG4gICAgLy8gMy4gU2V0IHJlc3BvbnNlIGFuZCBhY3R1YWxSZXNwb25zZSB0byB0aGUgcmVzdWx0IG9mIHJ1bm5pbmdcbiAgICAvLyBIVFRQLW5ldHdvcmstb3ItY2FjaGUgZmV0Y2ggZ2l2ZW4gZmV0Y2hQYXJhbXMuXG4gICAgYWN0dWFsUmVzcG9uc2UgPSByZXNwb25zZSA9IGF3YWl0IGh0dHBOZXR3b3JrT3JDYWNoZUZldGNoKGZldGNoUGFyYW1zKVxuXG4gICAgLy8gNC4gSWYgcmVxdWVzdOKAmXMgcmVzcG9uc2UgdGFpbnRpbmcgaXMgXCJjb3JzXCIgYW5kIGEgQ09SUyBjaGVja1xuICAgIC8vIGZvciByZXF1ZXN0IGFuZCByZXNwb25zZSByZXR1cm5zIGZhaWx1cmUsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgICBpZiAoXG4gICAgICByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdjb3JzJyAmJlxuICAgICAgY29yc0NoZWNrKHJlcXVlc3QsIHJlc3BvbnNlKSA9PT0gJ2ZhaWx1cmUnXG4gICAgKSB7XG4gICAgICByZXR1cm4gbWFrZU5ldHdvcmtFcnJvcignY29ycyBmYWlsdXJlJylcbiAgICB9XG5cbiAgICAvLyA1LiBJZiB0aGUgVEFPIGNoZWNrIGZvciByZXF1ZXN0IGFuZCByZXNwb25zZSByZXR1cm5zIGZhaWx1cmUsIHRoZW4gc2V0XG4gICAgLy8gcmVxdWVzdOKAmXMgdGltaW5nIGFsbG93IGZhaWxlZCBmbGFnLlxuICAgIGlmIChUQU9DaGVjayhyZXF1ZXN0LCByZXNwb25zZSkgPT09ICdmYWlsdXJlJykge1xuICAgICAgcmVxdWVzdC50aW1pbmdBbGxvd0ZhaWxlZCA9IHRydWVcbiAgICB9XG4gIH1cblxuICAvLyA3LiBJZiBlaXRoZXIgcmVxdWVzdOKAmXMgcmVzcG9uc2UgdGFpbnRpbmcgb3IgcmVzcG9uc2XigJlzIHR5cGVcbiAgLy8gaXMgXCJvcGFxdWVcIiwgYW5kIHRoZSBjcm9zcy1vcmlnaW4gcmVzb3VyY2UgcG9saWN5IGNoZWNrIHdpdGhcbiAgLy8gcmVxdWVzdOKAmXMgb3JpZ2luLCByZXF1ZXN04oCZcyBjbGllbnQsIHJlcXVlc3TigJlzIGRlc3RpbmF0aW9uLFxuICAvLyBhbmQgYWN0dWFsUmVzcG9uc2UgcmV0dXJucyBibG9ja2VkLCB0aGVuIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gIGlmIChcbiAgICAocmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnb3BhcXVlJyB8fCByZXNwb25zZS50eXBlID09PSAnb3BhcXVlJykgJiZcbiAgICBjcm9zc09yaWdpblJlc291cmNlUG9saWN5Q2hlY2soXG4gICAgICByZXF1ZXN0Lm9yaWdpbixcbiAgICAgIHJlcXVlc3QuY2xpZW50LFxuICAgICAgcmVxdWVzdC5kZXN0aW5hdGlvbixcbiAgICAgIGFjdHVhbFJlc3BvbnNlXG4gICAgKSA9PT0gJ2Jsb2NrZWQnXG4gICkge1xuICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdibG9ja2VkJylcbiAgfVxuXG4gIC8vIDguIElmIGFjdHVhbFJlc3BvbnNl4oCZcyBzdGF0dXMgaXMgYSByZWRpcmVjdCBzdGF0dXMsIHRoZW46XG4gIGlmIChyZWRpcmVjdFN0YXR1c1NldC5oYXMoYWN0dWFsUmVzcG9uc2Uuc3RhdHVzKSkge1xuICAgIC8vIDEuIElmIGFjdHVhbFJlc3BvbnNl4oCZcyBzdGF0dXMgaXMgbm90IDMwMywgcmVxdWVzdOKAmXMgYm9keSBpcyBub3QgbnVsbCxcbiAgICAvLyBhbmQgdGhlIGNvbm5lY3Rpb24gdXNlcyBIVFRQLzIsIHRoZW4gdXNlciBhZ2VudHMgbWF5LCBhbmQgYXJlIGV2ZW5cbiAgICAvLyBlbmNvdXJhZ2VkIHRvLCB0cmFuc21pdCBhbiBSU1RfU1RSRUFNIGZyYW1lLlxuICAgIC8vIFNlZSwgaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy9mZXRjaC9pc3N1ZXMvMTI4OFxuICAgIGlmIChyZXF1ZXN0LnJlZGlyZWN0ICE9PSAnbWFudWFsJykge1xuICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb25uZWN0aW9uLmRlc3Ryb3koKVxuICAgIH1cblxuICAgIC8vIDIuIFN3aXRjaCBvbiByZXF1ZXN04oCZcyByZWRpcmVjdCBtb2RlOlxuICAgIGlmIChyZXF1ZXN0LnJlZGlyZWN0ID09PSAnZXJyb3InKSB7XG4gICAgICAvLyBTZXQgcmVzcG9uc2UgdG8gYSBuZXR3b3JrIGVycm9yLlxuICAgICAgcmVzcG9uc2UgPSBtYWtlTmV0d29ya0Vycm9yKCd1bmV4cGVjdGVkIHJlZGlyZWN0JylcbiAgICB9IGVsc2UgaWYgKHJlcXVlc3QucmVkaXJlY3QgPT09ICdtYW51YWwnKSB7XG4gICAgICAvLyBTZXQgcmVzcG9uc2UgdG8gYW4gb3BhcXVlLXJlZGlyZWN0IGZpbHRlcmVkIHJlc3BvbnNlIHdob3NlIGludGVybmFsXG4gICAgICAvLyByZXNwb25zZSBpcyBhY3R1YWxSZXNwb25zZS5cbiAgICAgIC8vIE5PVEUoc3BlYyk6IE9uIHRoZSB3ZWIgdGhpcyB3b3VsZCByZXR1cm4gYW4gYG9wYXF1ZXJlZGlyZWN0YCByZXNwb25zZSxcbiAgICAgIC8vIGJ1dCB0aGF0IGRvZXNuJ3QgbWFrZSBzZW5zZSBzZXJ2ZXIgc2lkZS5cbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMTE5My5cbiAgICAgIHJlc3BvbnNlID0gYWN0dWFsUmVzcG9uc2VcbiAgICB9IGVsc2UgaWYgKHJlcXVlc3QucmVkaXJlY3QgPT09ICdmb2xsb3cnKSB7XG4gICAgICAvLyBTZXQgcmVzcG9uc2UgdG8gdGhlIHJlc3VsdCBvZiBydW5uaW5nIEhUVFAtcmVkaXJlY3QgZmV0Y2ggZ2l2ZW5cbiAgICAgIC8vIGZldGNoUGFyYW1zIGFuZCByZXNwb25zZS5cbiAgICAgIHJlc3BvbnNlID0gYXdhaXQgaHR0cFJlZGlyZWN0RmV0Y2goZmV0Y2hQYXJhbXMsIHJlc3BvbnNlKVxuICAgIH0gZWxzZSB7XG4gICAgICBhc3NlcnQoZmFsc2UpXG4gICAgfVxuICB9XG5cbiAgLy8gOS4gU2V0IHJlc3BvbnNl4oCZcyB0aW1pbmcgaW5mbyB0byB0aW1pbmdJbmZvLlxuICByZXNwb25zZS50aW1pbmdJbmZvID0gdGltaW5nSW5mb1xuXG4gIC8vIDEwLiBSZXR1cm4gcmVzcG9uc2UuXG4gIHJldHVybiByZXNwb25zZVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC1yZWRpcmVjdC1mZXRjaFxuZnVuY3Rpb24gaHR0cFJlZGlyZWN0RmV0Y2ggKGZldGNoUGFyYW1zLCByZXNwb25zZSkge1xuICAvLyAxLiBMZXQgcmVxdWVzdCBiZSBmZXRjaFBhcmFtc+KAmXMgcmVxdWVzdC5cbiAgY29uc3QgcmVxdWVzdCA9IGZldGNoUGFyYW1zLnJlcXVlc3RcblxuICAvLyAyLiBMZXQgYWN0dWFsUmVzcG9uc2UgYmUgcmVzcG9uc2UsIGlmIHJlc3BvbnNlIGlzIG5vdCBhIGZpbHRlcmVkIHJlc3BvbnNlLFxuICAvLyBhbmQgcmVzcG9uc2XigJlzIGludGVybmFsIHJlc3BvbnNlIG90aGVyd2lzZS5cbiAgY29uc3QgYWN0dWFsUmVzcG9uc2UgPSByZXNwb25zZS5pbnRlcm5hbFJlc3BvbnNlXG4gICAgPyByZXNwb25zZS5pbnRlcm5hbFJlc3BvbnNlXG4gICAgOiByZXNwb25zZVxuXG4gIC8vIDMuIExldCBsb2NhdGlvblVSTCBiZSBhY3R1YWxSZXNwb25zZeKAmXMgbG9jYXRpb24gVVJMIGdpdmVuIHJlcXVlc3TigJlzIGN1cnJlbnRcbiAgLy8gVVJM4oCZcyBmcmFnbWVudC5cbiAgbGV0IGxvY2F0aW9uVVJMXG5cbiAgdHJ5IHtcbiAgICBsb2NhdGlvblVSTCA9IHJlc3BvbnNlTG9jYXRpb25VUkwoXG4gICAgICBhY3R1YWxSZXNwb25zZSxcbiAgICAgIHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpLmhhc2hcbiAgICApXG5cbiAgICAvLyA0LiBJZiBsb2NhdGlvblVSTCBpcyBudWxsLCB0aGVuIHJldHVybiByZXNwb25zZS5cbiAgICBpZiAobG9jYXRpb25VUkwgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyA1LiBJZiBsb2NhdGlvblVSTCBpcyBmYWlsdXJlLCB0aGVuIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKGVycikpXG4gIH1cblxuICAvLyA2LiBJZiBsb2NhdGlvblVSTOKAmXMgc2NoZW1lIGlzIG5vdCBhbiBIVFRQKFMpIHNjaGVtZSwgdGhlbiByZXR1cm4gYSBuZXR3b3JrXG4gIC8vIGVycm9yLlxuICBpZiAoIXVybElzSHR0cEh0dHBzU2NoZW1lKGxvY2F0aW9uVVJMKSkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignVVJMIHNjaGVtZSBtdXN0IGJlIGEgSFRUUChTKSBzY2hlbWUnKSlcbiAgfVxuXG4gIC8vIDcuIElmIHJlcXVlc3TigJlzIHJlZGlyZWN0IGNvdW50IGlzIDIwLCB0aGVuIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gIGlmIChyZXF1ZXN0LnJlZGlyZWN0Q291bnQgPT09IDIwKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKCdyZWRpcmVjdCBjb3VudCBleGNlZWRlZCcpKVxuICB9XG5cbiAgLy8gOC4gSW5jcmVhc2UgcmVxdWVzdOKAmXMgcmVkaXJlY3QgY291bnQgYnkgMS5cbiAgcmVxdWVzdC5yZWRpcmVjdENvdW50ICs9IDFcblxuICAvLyA5LiBJZiByZXF1ZXN04oCZcyBtb2RlIGlzIFwiY29yc1wiLCBsb2NhdGlvblVSTCBpbmNsdWRlcyBjcmVkZW50aWFscywgYW5kXG4gIC8vIHJlcXVlc3TigJlzIG9yaWdpbiBpcyBub3Qgc2FtZSBvcmlnaW4gd2l0aCBsb2NhdGlvblVSTOKAmXMgb3JpZ2luLCB0aGVuIHJldHVyblxuICAvLyAgYSBuZXR3b3JrIGVycm9yLlxuICBpZiAoXG4gICAgcmVxdWVzdC5tb2RlID09PSAnY29ycycgJiZcbiAgICAobG9jYXRpb25VUkwudXNlcm5hbWUgfHwgbG9jYXRpb25VUkwucGFzc3dvcmQpICYmXG4gICAgIXNhbWVPcmlnaW4ocmVxdWVzdCwgbG9jYXRpb25VUkwpXG4gICkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignY3Jvc3Mgb3JpZ2luIG5vdCBhbGxvd2VkIGZvciByZXF1ZXN0IG1vZGUgXCJjb3JzXCInKSlcbiAgfVxuXG4gIC8vIDEwLiBJZiByZXF1ZXN04oCZcyByZXNwb25zZSB0YWludGluZyBpcyBcImNvcnNcIiBhbmQgbG9jYXRpb25VUkwgaW5jbHVkZXNcbiAgLy8gY3JlZGVudGlhbHMsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgaWYgKFxuICAgIHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ2NvcnMnICYmXG4gICAgKGxvY2F0aW9uVVJMLnVzZXJuYW1lIHx8IGxvY2F0aW9uVVJMLnBhc3N3b3JkKVxuICApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoXG4gICAgICAnVVJMIGNhbm5vdCBjb250YWluIGNyZWRlbnRpYWxzIGZvciByZXF1ZXN0IG1vZGUgXCJjb3JzXCInXG4gICAgKSlcbiAgfVxuXG4gIC8vIDExLiBJZiBhY3R1YWxSZXNwb25zZeKAmXMgc3RhdHVzIGlzIG5vdCAzMDMsIHJlcXVlc3TigJlzIGJvZHkgaXMgbm9uLW51bGwsXG4gIC8vIGFuZCByZXF1ZXN04oCZcyBib2R54oCZcyBzb3VyY2UgaXMgbnVsbCwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICBpZiAoXG4gICAgYWN0dWFsUmVzcG9uc2Uuc3RhdHVzICE9PSAzMDMgJiZcbiAgICByZXF1ZXN0LmJvZHkgIT0gbnVsbCAmJlxuICAgIHJlcXVlc3QuYm9keS5zb3VyY2UgPT0gbnVsbFxuICApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoKSlcbiAgfVxuXG4gIC8vIDEyLiBJZiBvbmUgb2YgdGhlIGZvbGxvd2luZyBpcyB0cnVlXG4gIC8vIC0gYWN0dWFsUmVzcG9uc2XigJlzIHN0YXR1cyBpcyAzMDEgb3IgMzAyIGFuZCByZXF1ZXN04oCZcyBtZXRob2QgaXMgYFBPU1RgXG4gIC8vIC0gYWN0dWFsUmVzcG9uc2XigJlzIHN0YXR1cyBpcyAzMDMgYW5kIHJlcXVlc3TigJlzIG1ldGhvZCBpcyBub3QgYEdFVGAgb3IgYEhFQURgXG4gIGlmIChcbiAgICAoWzMwMSwgMzAyXS5pbmNsdWRlcyhhY3R1YWxSZXNwb25zZS5zdGF0dXMpICYmIHJlcXVlc3QubWV0aG9kID09PSAnUE9TVCcpIHx8XG4gICAgKGFjdHVhbFJlc3BvbnNlLnN0YXR1cyA9PT0gMzAzICYmXG4gICAgICAhR0VUX09SX0hFQUQuaW5jbHVkZXMocmVxdWVzdC5tZXRob2QpKVxuICApIHtcbiAgICAvLyB0aGVuOlxuICAgIC8vIDEuIFNldCByZXF1ZXN04oCZcyBtZXRob2QgdG8gYEdFVGAgYW5kIHJlcXVlc3TigJlzIGJvZHkgdG8gbnVsbC5cbiAgICByZXF1ZXN0Lm1ldGhvZCA9ICdHRVQnXG4gICAgcmVxdWVzdC5ib2R5ID0gbnVsbFxuXG4gICAgLy8gMi4gRm9yIGVhY2ggaGVhZGVyTmFtZSBvZiByZXF1ZXN0LWJvZHktaGVhZGVyIG5hbWUsIGRlbGV0ZSBoZWFkZXJOYW1lIGZyb21cbiAgICAvLyByZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cbiAgICBmb3IgKGNvbnN0IGhlYWRlck5hbWUgb2YgcmVxdWVzdEJvZHlIZWFkZXIpIHtcbiAgICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QuZGVsZXRlKGhlYWRlck5hbWUpXG4gICAgfVxuICB9XG5cbiAgLy8gMTMuIElmIHJlcXVlc3TigJlzIGN1cnJlbnQgVVJM4oCZcyBvcmlnaW4gaXMgbm90IHNhbWUgb3JpZ2luIHdpdGggbG9jYXRpb25VUkzigJlzXG4gIC8vICAgICBvcmlnaW4sIHRoZW4gZm9yIGVhY2ggaGVhZGVyTmFtZSBvZiBDT1JTIG5vbi13aWxkY2FyZCByZXF1ZXN0LWhlYWRlciBuYW1lLFxuICAvLyAgICAgZGVsZXRlIGhlYWRlck5hbWUgZnJvbSByZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cbiAgaWYgKCFzYW1lT3JpZ2luKHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpLCBsb2NhdGlvblVSTCkpIHtcbiAgICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29ycy1ub24td2lsZGNhcmQtcmVxdWVzdC1oZWFkZXItbmFtZVxuICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QuZGVsZXRlKCdhdXRob3JpemF0aW9uJylcblxuICAgIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNhdXRoZW50aWNhdGlvbi1lbnRyaWVzXG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5kZWxldGUoJ3Byb3h5LWF1dGhvcml6YXRpb24nLCB0cnVlKVxuXG4gICAgLy8gXCJDb29raWVcIiBhbmQgXCJIb3N0XCIgYXJlIGZvcmJpZGRlbiByZXF1ZXN0LWhlYWRlcnMsIHdoaWNoIHVuZGljaSBkb2Vzbid0IGltcGxlbWVudC5cbiAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmRlbGV0ZSgnY29va2llJylcbiAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmRlbGV0ZSgnaG9zdCcpXG4gIH1cblxuICAvLyAxNC4gSWYgcmVxdWVzdOKAmXMgYm9keSBpcyBub24tbnVsbCwgdGhlbiBzZXQgcmVxdWVzdOKAmXMgYm9keSB0byB0aGUgZmlyc3QgcmV0dXJuXG4gIC8vIHZhbHVlIG9mIHNhZmVseSBleHRyYWN0aW5nIHJlcXVlc3TigJlzIGJvZHnigJlzIHNvdXJjZS5cbiAgaWYgKHJlcXVlc3QuYm9keSAhPSBudWxsKSB7XG4gICAgYXNzZXJ0KHJlcXVlc3QuYm9keS5zb3VyY2UgIT0gbnVsbClcbiAgICByZXF1ZXN0LmJvZHkgPSBzYWZlbHlFeHRyYWN0Qm9keShyZXF1ZXN0LmJvZHkuc291cmNlKVswXVxuICB9XG5cbiAgLy8gMTUuIExldCB0aW1pbmdJbmZvIGJlIGZldGNoUGFyYW1z4oCZcyB0aW1pbmcgaW5mby5cbiAgY29uc3QgdGltaW5nSW5mbyA9IGZldGNoUGFyYW1zLnRpbWluZ0luZm9cblxuICAvLyAxNi4gU2V0IHRpbWluZ0luZm/igJlzIHJlZGlyZWN0IGVuZCB0aW1lIGFuZCBwb3N0LXJlZGlyZWN0IHN0YXJ0IHRpbWUgdG8gdGhlXG4gIC8vIGNvYXJzZW5lZCBzaGFyZWQgY3VycmVudCB0aW1lIGdpdmVuIGZldGNoUGFyYW1z4oCZcyBjcm9zcy1vcmlnaW4gaXNvbGF0ZWRcbiAgLy8gY2FwYWJpbGl0eS5cbiAgdGltaW5nSW5mby5yZWRpcmVjdEVuZFRpbWUgPSB0aW1pbmdJbmZvLnBvc3RSZWRpcmVjdFN0YXJ0VGltZSA9XG4gICAgY29hcnNlbmVkU2hhcmVkQ3VycmVudFRpbWUoZmV0Y2hQYXJhbXMuY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkpXG5cbiAgLy8gMTcuIElmIHRpbWluZ0luZm/igJlzIHJlZGlyZWN0IHN0YXJ0IHRpbWUgaXMgMCwgdGhlbiBzZXQgdGltaW5nSW5mb+KAmXNcbiAgLy8gIHJlZGlyZWN0IHN0YXJ0IHRpbWUgdG8gdGltaW5nSW5mb+KAmXMgc3RhcnQgdGltZS5cbiAgaWYgKHRpbWluZ0luZm8ucmVkaXJlY3RTdGFydFRpbWUgPT09IDApIHtcbiAgICB0aW1pbmdJbmZvLnJlZGlyZWN0U3RhcnRUaW1lID0gdGltaW5nSW5mby5zdGFydFRpbWVcbiAgfVxuXG4gIC8vIDE4LiBBcHBlbmQgbG9jYXRpb25VUkwgdG8gcmVxdWVzdOKAmXMgVVJMIGxpc3QuXG4gIHJlcXVlc3QudXJsTGlzdC5wdXNoKGxvY2F0aW9uVVJMKVxuXG4gIC8vIDE5LiBJbnZva2Ugc2V0IHJlcXVlc3TigJlzIHJlZmVycmVyIHBvbGljeSBvbiByZWRpcmVjdCBvbiByZXF1ZXN0IGFuZFxuICAvLyBhY3R1YWxSZXNwb25zZS5cbiAgc2V0UmVxdWVzdFJlZmVycmVyUG9saWN5T25SZWRpcmVjdChyZXF1ZXN0LCBhY3R1YWxSZXNwb25zZSlcblxuICAvLyAyMC4gUmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZyBtYWluIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zIGFuZCB0cnVlLlxuICByZXR1cm4gbWFpbkZldGNoKGZldGNoUGFyYW1zLCB0cnVlKVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC1uZXR3b3JrLW9yLWNhY2hlLWZldGNoXG5hc3luYyBmdW5jdGlvbiBodHRwTmV0d29ya09yQ2FjaGVGZXRjaCAoXG4gIGZldGNoUGFyYW1zLFxuICBpc0F1dGhlbnRpY2F0aW9uRmV0Y2ggPSBmYWxzZSxcbiAgaXNOZXdDb25uZWN0aW9uRmV0Y2ggPSBmYWxzZVxuKSB7XG4gIC8vIDEuIExldCByZXF1ZXN0IGJlIGZldGNoUGFyYW1z4oCZcyByZXF1ZXN0LlxuICBjb25zdCByZXF1ZXN0ID0gZmV0Y2hQYXJhbXMucmVxdWVzdFxuXG4gIC8vIDIuIExldCBodHRwRmV0Y2hQYXJhbXMgYmUgbnVsbC5cbiAgbGV0IGh0dHBGZXRjaFBhcmFtcyA9IG51bGxcblxuICAvLyAzLiBMZXQgaHR0cFJlcXVlc3QgYmUgbnVsbC5cbiAgbGV0IGh0dHBSZXF1ZXN0ID0gbnVsbFxuXG4gIC8vIDQuIExldCByZXNwb25zZSBiZSBudWxsLlxuICBsZXQgcmVzcG9uc2UgPSBudWxsXG5cbiAgLy8gNS4gTGV0IHN0b3JlZFJlc3BvbnNlIGJlIG51bGwuXG4gIC8vIFRPRE86IGNhY2hlXG5cbiAgLy8gNi4gTGV0IGh0dHBDYWNoZSBiZSBudWxsLlxuICBjb25zdCBodHRwQ2FjaGUgPSBudWxsXG5cbiAgLy8gNy4gTGV0IHRoZSByZXZhbGlkYXRpbmdGbGFnIGJlIHVuc2V0LlxuICBjb25zdCByZXZhbGlkYXRpbmdGbGFnID0gZmFsc2VcblxuICAvLyA4LiBSdW4gdGhlc2Ugc3RlcHMsIGJ1dCBhYm9ydCB3aGVuIHRoZSBvbmdvaW5nIGZldGNoIGlzIHRlcm1pbmF0ZWQ6XG5cbiAgLy8gICAgMS4gSWYgcmVxdWVzdOKAmXMgd2luZG93IGlzIFwibm8td2luZG93XCIgYW5kIHJlcXVlc3TigJlzIHJlZGlyZWN0IG1vZGUgaXNcbiAgLy8gICAgXCJlcnJvclwiLCB0aGVuIHNldCBodHRwRmV0Y2hQYXJhbXMgdG8gZmV0Y2hQYXJhbXMgYW5kIGh0dHBSZXF1ZXN0IHRvXG4gIC8vICAgIHJlcXVlc3QuXG4gIGlmIChyZXF1ZXN0LndpbmRvdyA9PT0gJ25vLXdpbmRvdycgJiYgcmVxdWVzdC5yZWRpcmVjdCA9PT0gJ2Vycm9yJykge1xuICAgIGh0dHBGZXRjaFBhcmFtcyA9IGZldGNoUGFyYW1zXG4gICAgaHR0cFJlcXVlc3QgPSByZXF1ZXN0XG4gIH0gZWxzZSB7XG4gICAgLy8gT3RoZXJ3aXNlOlxuXG4gICAgLy8gMS4gU2V0IGh0dHBSZXF1ZXN0IHRvIGEgY2xvbmUgb2YgcmVxdWVzdC5cbiAgICBodHRwUmVxdWVzdCA9IG1ha2VSZXF1ZXN0KHJlcXVlc3QpXG5cbiAgICAvLyAyLiBTZXQgaHR0cEZldGNoUGFyYW1zIHRvIGEgY29weSBvZiBmZXRjaFBhcmFtcy5cbiAgICBodHRwRmV0Y2hQYXJhbXMgPSB7IC4uLmZldGNoUGFyYW1zIH1cblxuICAgIC8vIDMuIFNldCBodHRwRmV0Y2hQYXJhbXPigJlzIHJlcXVlc3QgdG8gaHR0cFJlcXVlc3QuXG4gICAgaHR0cEZldGNoUGFyYW1zLnJlcXVlc3QgPSBodHRwUmVxdWVzdFxuICB9XG5cbiAgLy8gICAgMy4gTGV0IGluY2x1ZGVDcmVkZW50aWFscyBiZSB0cnVlIGlmIG9uZSBvZlxuICBjb25zdCBpbmNsdWRlQ3JlZGVudGlhbHMgPVxuICAgIHJlcXVlc3QuY3JlZGVudGlhbHMgPT09ICdpbmNsdWRlJyB8fFxuICAgIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnc2FtZS1vcmlnaW4nICYmXG4gICAgICByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdiYXNpYycpXG5cbiAgLy8gICAgNC4gTGV0IGNvbnRlbnRMZW5ndGggYmUgaHR0cFJlcXVlc3TigJlzIGJvZHnigJlzIGxlbmd0aCwgaWYgaHR0cFJlcXVlc3TigJlzXG4gIC8vICAgIGJvZHkgaXMgbm9uLW51bGw7IG90aGVyd2lzZSBudWxsLlxuICBjb25zdCBjb250ZW50TGVuZ3RoID0gaHR0cFJlcXVlc3QuYm9keSA/IGh0dHBSZXF1ZXN0LmJvZHkubGVuZ3RoIDogbnVsbFxuXG4gIC8vICAgIDUuIExldCBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgYmUgbnVsbC5cbiAgbGV0IGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSA9IG51bGxcblxuICAvLyAgICA2LiBJZiBodHRwUmVxdWVzdOKAmXMgYm9keSBpcyBudWxsIGFuZCBodHRwUmVxdWVzdOKAmXMgbWV0aG9kIGlzIGBQT1NUYCBvclxuICAvLyAgICBgUFVUYCwgdGhlbiBzZXQgY29udGVudExlbmd0aEhlYWRlclZhbHVlIHRvIGAwYC5cbiAgaWYgKFxuICAgIGh0dHBSZXF1ZXN0LmJvZHkgPT0gbnVsbCAmJlxuICAgIFsnUE9TVCcsICdQVVQnXS5pbmNsdWRlcyhodHRwUmVxdWVzdC5tZXRob2QpXG4gICkge1xuICAgIGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSA9ICcwJ1xuICB9XG5cbiAgLy8gICAgNy4gSWYgY29udGVudExlbmd0aCBpcyBub24tbnVsbCwgdGhlbiBzZXQgY29udGVudExlbmd0aEhlYWRlclZhbHVlIHRvXG4gIC8vICAgIGNvbnRlbnRMZW5ndGgsIHNlcmlhbGl6ZWQgYW5kIGlzb21vcnBoaWMgZW5jb2RlZC5cbiAgaWYgKGNvbnRlbnRMZW5ndGggIT0gbnVsbCkge1xuICAgIGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSA9IGlzb21vcnBoaWNFbmNvZGUoYCR7Y29udGVudExlbmd0aH1gKVxuICB9XG5cbiAgLy8gICAgOC4gSWYgY29udGVudExlbmd0aEhlYWRlclZhbHVlIGlzIG5vbi1udWxsLCB0aGVuIGFwcGVuZFxuICAvLyAgICBgQ29udGVudC1MZW5ndGhgL2NvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSB0byBodHRwUmVxdWVzdOKAmXMgaGVhZGVyXG4gIC8vICAgIGxpc3QuXG4gIGlmIChjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgIT0gbnVsbCkge1xuICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnY29udGVudC1sZW5ndGgnLCBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUpXG4gIH1cblxuICAvLyAgICA5LiBJZiBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgaXMgbm9uLW51bGwsIHRoZW4gYXBwZW5kIChgQ29udGVudC1MZW5ndGhgLFxuICAvLyAgICBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUpIHRvIGh0dHBSZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cblxuICAvLyAgICAxMC4gSWYgY29udGVudExlbmd0aCBpcyBub24tbnVsbCBhbmQgaHR0cFJlcXVlc3TigJlzIGtlZXBhbGl2ZSBpcyB0cnVlLFxuICAvLyAgICB0aGVuOlxuICBpZiAoY29udGVudExlbmd0aCAhPSBudWxsICYmIGh0dHBSZXF1ZXN0LmtlZXBhbGl2ZSkge1xuICAgIC8vIE5PVEU6IGtlZXBhbGl2ZSBpcyBhIG5vb3Agb3V0c2lkZSBvZiBicm93c2VyIGNvbnRleHQuXG4gIH1cblxuICAvLyAgICAxMS4gSWYgaHR0cFJlcXVlc3TigJlzIHJlZmVycmVyIGlzIGEgVVJMLCB0aGVuIGFwcGVuZFxuICAvLyAgICBgUmVmZXJlcmAvaHR0cFJlcXVlc3TigJlzIHJlZmVycmVyLCBzZXJpYWxpemVkIGFuZCBpc29tb3JwaGljIGVuY29kZWQsXG4gIC8vICAgICB0byBodHRwUmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QuXG4gIGlmIChodHRwUmVxdWVzdC5yZWZlcnJlciBpbnN0YW5jZW9mIFVSTCkge1xuICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgncmVmZXJlcicsIGlzb21vcnBoaWNFbmNvZGUoaHR0cFJlcXVlc3QucmVmZXJyZXIuaHJlZikpXG4gIH1cblxuICAvLyAgICAxMi4gQXBwZW5kIGEgcmVxdWVzdCBgT3JpZ2luYCBoZWFkZXIgZm9yIGh0dHBSZXF1ZXN0LlxuICBhcHBlbmRSZXF1ZXN0T3JpZ2luSGVhZGVyKGh0dHBSZXF1ZXN0KVxuXG4gIC8vICAgIDEzLiBBcHBlbmQgdGhlIEZldGNoIG1ldGFkYXRhIGhlYWRlcnMgZm9yIGh0dHBSZXF1ZXN0LiBbRkVUQ0gtTUVUQURBVEFdXG4gIGFwcGVuZEZldGNoTWV0YWRhdGEoaHR0cFJlcXVlc3QpXG5cbiAgLy8gICAgMTQuIElmIGh0dHBSZXF1ZXN04oCZcyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluIGBVc2VyLUFnZW50YCwgdGhlblxuICAvLyAgICB1c2VyIGFnZW50cyBzaG91bGQgYXBwZW5kIGBVc2VyLUFnZW50YC9kZWZhdWx0IGBVc2VyLUFnZW50YCB2YWx1ZSB0b1xuICAvLyAgICBodHRwUmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QuXG4gIGlmICghaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ3VzZXItYWdlbnQnKSkge1xuICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgndXNlci1hZ2VudCcsIHR5cGVvZiBlc2J1aWxkRGV0ZWN0aW9uID09PSAndW5kZWZpbmVkJyA/ICd1bmRpY2knIDogJ25vZGUnKVxuICB9XG5cbiAgLy8gICAgMTUuIElmIGh0dHBSZXF1ZXN04oCZcyBjYWNoZSBtb2RlIGlzIFwiZGVmYXVsdFwiIGFuZCBodHRwUmVxdWVzdOKAmXMgaGVhZGVyXG4gIC8vICAgIGxpc3QgY29udGFpbnMgYElmLU1vZGlmaWVkLVNpbmNlYCwgYElmLU5vbmUtTWF0Y2hgLFxuICAvLyAgICBgSWYtVW5tb2RpZmllZC1TaW5jZWAsIGBJZi1NYXRjaGAsIG9yIGBJZi1SYW5nZWAsIHRoZW4gc2V0XG4gIC8vICAgIGh0dHBSZXF1ZXN04oCZcyBjYWNoZSBtb2RlIHRvIFwibm8tc3RvcmVcIi5cbiAgaWYgKFxuICAgIGh0dHBSZXF1ZXN0LmNhY2hlID09PSAnZGVmYXVsdCcgJiZcbiAgICAoaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2lmLW1vZGlmaWVkLXNpbmNlJykgfHxcbiAgICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdpZi1ub25lLW1hdGNoJykgfHxcbiAgICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdpZi11bm1vZGlmaWVkLXNpbmNlJykgfHxcbiAgICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdpZi1tYXRjaCcpIHx8XG4gICAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygnaWYtcmFuZ2UnKSlcbiAgKSB7XG4gICAgaHR0cFJlcXVlc3QuY2FjaGUgPSAnbm8tc3RvcmUnXG4gIH1cblxuICAvLyAgICAxNi4gSWYgaHR0cFJlcXVlc3TigJlzIGNhY2hlIG1vZGUgaXMgXCJuby1jYWNoZVwiLCBodHRwUmVxdWVzdOKAmXMgcHJldmVudFxuICAvLyAgICBuby1jYWNoZSBjYWNoZS1jb250cm9sIGhlYWRlciBtb2RpZmljYXRpb24gZmxhZyBpcyB1bnNldCwgYW5kXG4gIC8vICAgIGh0dHBSZXF1ZXN04oCZcyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluIGBDYWNoZS1Db250cm9sYCwgdGhlbiBhcHBlbmRcbiAgLy8gICAgYENhY2hlLUNvbnRyb2xgL2BtYXgtYWdlPTBgIHRvIGh0dHBSZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cbiAgaWYgKFxuICAgIGh0dHBSZXF1ZXN0LmNhY2hlID09PSAnbm8tY2FjaGUnICYmXG4gICAgIWh0dHBSZXF1ZXN0LnByZXZlbnROb0NhY2hlQ2FjaGVDb250cm9sSGVhZGVyTW9kaWZpY2F0aW9uICYmXG4gICAgIWh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdjYWNoZS1jb250cm9sJylcbiAgKSB7XG4gICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdjYWNoZS1jb250cm9sJywgJ21heC1hZ2U9MCcpXG4gIH1cblxuICAvLyAgICAxNy4gSWYgaHR0cFJlcXVlc3TigJlzIGNhY2hlIG1vZGUgaXMgXCJuby1zdG9yZVwiIG9yIFwicmVsb2FkXCIsIHRoZW46XG4gIGlmIChodHRwUmVxdWVzdC5jYWNoZSA9PT0gJ25vLXN0b3JlJyB8fCBodHRwUmVxdWVzdC5jYWNoZSA9PT0gJ3JlbG9hZCcpIHtcbiAgICAvLyAxLiBJZiBodHRwUmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgUHJhZ21hYCwgdGhlbiBhcHBlbmRcbiAgICAvLyBgUHJhZ21hYC9gbm8tY2FjaGVgIHRvIGh0dHBSZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cbiAgICBpZiAoIWh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdwcmFnbWEnKSkge1xuICAgICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdwcmFnbWEnLCAnbm8tY2FjaGUnKVxuICAgIH1cblxuICAgIC8vIDIuIElmIGh0dHBSZXF1ZXN04oCZcyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluIGBDYWNoZS1Db250cm9sYCxcbiAgICAvLyB0aGVuIGFwcGVuZCBgQ2FjaGUtQ29udHJvbGAvYG5vLWNhY2hlYCB0byBodHRwUmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QuXG4gICAgaWYgKCFodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygnY2FjaGUtY29udHJvbCcpKSB7XG4gICAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ2NhY2hlLWNvbnRyb2wnLCAnbm8tY2FjaGUnKVxuICAgIH1cbiAgfVxuXG4gIC8vICAgIDE4LiBJZiBodHRwUmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QgY29udGFpbnMgYFJhbmdlYCwgdGhlbiBhcHBlbmRcbiAgLy8gICAgYEFjY2VwdC1FbmNvZGluZ2AvYGlkZW50aXR5YCB0byBodHRwUmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QuXG4gIGlmIChodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygncmFuZ2UnKSkge1xuICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnYWNjZXB0LWVuY29kaW5nJywgJ2lkZW50aXR5JylcbiAgfVxuXG4gIC8vICAgIDE5LiBNb2RpZnkgaHR0cFJlcXVlc3TigJlzIGhlYWRlciBsaXN0IHBlciBIVFRQLiBEbyBub3QgYXBwZW5kIGEgZ2l2ZW5cbiAgLy8gICAgaGVhZGVyIGlmIGh0dHBSZXF1ZXN04oCZcyBoZWFkZXIgbGlzdCBjb250YWlucyB0aGF0IGhlYWRlcuKAmXMgbmFtZS5cbiAgLy8gICAgVE9ETzogaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy9mZXRjaC9pc3N1ZXMvMTI4NSNpc3N1ZWNvbW1lbnQtODk2NTYwMTI5XG4gIGlmICghaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2FjY2VwdC1lbmNvZGluZycpKSB7XG4gICAgaWYgKHVybEhhc0h0dHBzU2NoZW1lKHJlcXVlc3RDdXJyZW50VVJMKGh0dHBSZXF1ZXN0KSkpIHtcbiAgICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnYWNjZXB0LWVuY29kaW5nJywgJ2JyLCBnemlwLCBkZWZsYXRlJylcbiAgICB9IGVsc2Uge1xuICAgICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdhY2NlcHQtZW5jb2RpbmcnLCAnZ3ppcCwgZGVmbGF0ZScpXG4gICAgfVxuICB9XG5cbiAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuZGVsZXRlKCdob3N0JylcblxuICAvLyAgICAyMC4gSWYgaW5jbHVkZUNyZWRlbnRpYWxzIGlzIHRydWUsIHRoZW46XG4gIGlmIChpbmNsdWRlQ3JlZGVudGlhbHMpIHtcbiAgICAvLyAxLiBJZiB0aGUgdXNlciBhZ2VudCBpcyBub3QgY29uZmlndXJlZCB0byBibG9jayBjb29raWVzIGZvciBodHRwUmVxdWVzdFxuICAgIC8vIChzZWUgc2VjdGlvbiA3IG9mIFtDT09LSUVTXSksIHRoZW46XG4gICAgLy8gVE9ETzogY3JlZGVudGlhbHNcbiAgICAvLyAyLiBJZiBodHRwUmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgQXV0aG9yaXphdGlvbmAsIHRoZW46XG4gICAgLy8gVE9ETzogY3JlZGVudGlhbHNcbiAgfVxuXG4gIC8vICAgIDIxLiBJZiB0aGVyZeKAmXMgYSBwcm94eS1hdXRoZW50aWNhdGlvbiBlbnRyeSwgdXNlIGl0IGFzIGFwcHJvcHJpYXRlLlxuICAvLyAgICBUT0RPOiBwcm94eS1hdXRoZW50aWNhdGlvblxuXG4gIC8vICAgIDIyLiBTZXQgaHR0cENhY2hlIHRvIHRoZSByZXN1bHQgb2YgZGV0ZXJtaW5pbmcgdGhlIEhUVFAgY2FjaGVcbiAgLy8gICAgcGFydGl0aW9uLCBnaXZlbiBodHRwUmVxdWVzdC5cbiAgLy8gICAgVE9ETzogY2FjaGVcblxuICAvLyAgICAyMy4gSWYgaHR0cENhY2hlIGlzIG51bGwsIHRoZW4gc2V0IGh0dHBSZXF1ZXN04oCZcyBjYWNoZSBtb2RlIHRvXG4gIC8vICAgIFwibm8tc3RvcmVcIi5cbiAgaWYgKGh0dHBDYWNoZSA9PSBudWxsKSB7XG4gICAgaHR0cFJlcXVlc3QuY2FjaGUgPSAnbm8tc3RvcmUnXG4gIH1cblxuICAvLyAgICAyNC4gSWYgaHR0cFJlcXVlc3TigJlzIGNhY2hlIG1vZGUgaXMgbmVpdGhlciBcIm5vLXN0b3JlXCIgbm9yIFwicmVsb2FkXCIsXG4gIC8vICAgIHRoZW46XG4gIGlmIChodHRwUmVxdWVzdC5tb2RlICE9PSAnbm8tc3RvcmUnICYmIGh0dHBSZXF1ZXN0Lm1vZGUgIT09ICdyZWxvYWQnKSB7XG4gICAgLy8gVE9ETzogY2FjaGVcbiAgfVxuXG4gIC8vIDkuIElmIGFib3J0ZWQsIHRoZW4gcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSBuZXR3b3JrIGVycm9yIGZvciBmZXRjaFBhcmFtcy5cbiAgLy8gVE9ET1xuXG4gIC8vIDEwLiBJZiByZXNwb25zZSBpcyBudWxsLCB0aGVuOlxuICBpZiAocmVzcG9uc2UgPT0gbnVsbCkge1xuICAgIC8vIDEuIElmIGh0dHBSZXF1ZXN04oCZcyBjYWNoZSBtb2RlIGlzIFwib25seS1pZi1jYWNoZWRcIiwgdGhlbiByZXR1cm4gYVxuICAgIC8vIG5ldHdvcmsgZXJyb3IuXG4gICAgaWYgKGh0dHBSZXF1ZXN0Lm1vZGUgPT09ICdvbmx5LWlmLWNhY2hlZCcpIHtcbiAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdvbmx5IGlmIGNhY2hlZCcpXG4gICAgfVxuXG4gICAgLy8gMi4gTGV0IGZvcndhcmRSZXNwb25zZSBiZSB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgSFRUUC1uZXR3b3JrIGZldGNoXG4gICAgLy8gZ2l2ZW4gaHR0cEZldGNoUGFyYW1zLCBpbmNsdWRlQ3JlZGVudGlhbHMsIGFuZCBpc05ld0Nvbm5lY3Rpb25GZXRjaC5cbiAgICBjb25zdCBmb3J3YXJkUmVzcG9uc2UgPSBhd2FpdCBodHRwTmV0d29ya0ZldGNoKFxuICAgICAgaHR0cEZldGNoUGFyYW1zLFxuICAgICAgaW5jbHVkZUNyZWRlbnRpYWxzLFxuICAgICAgaXNOZXdDb25uZWN0aW9uRmV0Y2hcbiAgICApXG5cbiAgICAvLyAzLiBJZiBodHRwUmVxdWVzdOKAmXMgbWV0aG9kIGlzIHVuc2FmZSBhbmQgZm9yd2FyZFJlc3BvbnNl4oCZcyBzdGF0dXMgaXNcbiAgICAvLyBpbiB0aGUgcmFuZ2UgMjAwIHRvIDM5OSwgaW5jbHVzaXZlLCBpbnZhbGlkYXRlIGFwcHJvcHJpYXRlIHN0b3JlZFxuICAgIC8vIHJlc3BvbnNlcyBpbiBodHRwQ2FjaGUsIGFzIHBlciB0aGUgXCJJbnZhbGlkYXRpb25cIiBjaGFwdGVyIG9mIEhUVFBcbiAgICAvLyBDYWNoaW5nLCBhbmQgc2V0IHN0b3JlZFJlc3BvbnNlIHRvIG51bGwuIFtIVFRQLUNBQ0hJTkddXG4gICAgaWYgKFxuICAgICAgIXNhZmVNZXRob2RzU2V0LmhhcyhodHRwUmVxdWVzdC5tZXRob2QpICYmXG4gICAgICBmb3J3YXJkUmVzcG9uc2Uuc3RhdHVzID49IDIwMCAmJlxuICAgICAgZm9yd2FyZFJlc3BvbnNlLnN0YXR1cyA8PSAzOTlcbiAgICApIHtcbiAgICAgIC8vIFRPRE86IGNhY2hlXG4gICAgfVxuXG4gICAgLy8gNC4gSWYgdGhlIHJldmFsaWRhdGluZ0ZsYWcgaXMgc2V0IGFuZCBmb3J3YXJkUmVzcG9uc2XigJlzIHN0YXR1cyBpcyAzMDQsXG4gICAgLy8gdGhlbjpcbiAgICBpZiAocmV2YWxpZGF0aW5nRmxhZyAmJiBmb3J3YXJkUmVzcG9uc2Uuc3RhdHVzID09PSAzMDQpIHtcbiAgICAgIC8vIFRPRE86IGNhY2hlXG4gICAgfVxuXG4gICAgLy8gNS4gSWYgcmVzcG9uc2UgaXMgbnVsbCwgdGhlbjpcbiAgICBpZiAocmVzcG9uc2UgPT0gbnVsbCkge1xuICAgICAgLy8gMS4gU2V0IHJlc3BvbnNlIHRvIGZvcndhcmRSZXNwb25zZS5cbiAgICAgIHJlc3BvbnNlID0gZm9yd2FyZFJlc3BvbnNlXG5cbiAgICAgIC8vIDIuIFN0b3JlIGh0dHBSZXF1ZXN0IGFuZCBmb3J3YXJkUmVzcG9uc2UgaW4gaHR0cENhY2hlLCBhcyBwZXIgdGhlXG4gICAgICAvLyBcIlN0b3JpbmcgUmVzcG9uc2VzIGluIENhY2hlc1wiIGNoYXB0ZXIgb2YgSFRUUCBDYWNoaW5nLiBbSFRUUC1DQUNISU5HXVxuICAgICAgLy8gVE9ETzogY2FjaGVcbiAgICB9XG4gIH1cblxuICAvLyAxMS4gU2V0IHJlc3BvbnNl4oCZcyBVUkwgbGlzdCB0byBhIGNsb25lIG9mIGh0dHBSZXF1ZXN04oCZcyBVUkwgbGlzdC5cbiAgcmVzcG9uc2UudXJsTGlzdCA9IFsuLi5odHRwUmVxdWVzdC51cmxMaXN0XVxuXG4gIC8vIDEyLiBJZiBodHRwUmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QgY29udGFpbnMgYFJhbmdlYCwgdGhlbiBzZXQgcmVzcG9uc2XigJlzXG4gIC8vIHJhbmdlLXJlcXVlc3RlZCBmbGFnLlxuICBpZiAoaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ3JhbmdlJykpIHtcbiAgICByZXNwb25zZS5yYW5nZVJlcXVlc3RlZCA9IHRydWVcbiAgfVxuXG4gIC8vIDEzLiBTZXQgcmVzcG9uc2XigJlzIHJlcXVlc3QtaW5jbHVkZXMtY3JlZGVudGlhbHMgdG8gaW5jbHVkZUNyZWRlbnRpYWxzLlxuICByZXNwb25zZS5yZXF1ZXN0SW5jbHVkZXNDcmVkZW50aWFscyA9IGluY2x1ZGVDcmVkZW50aWFsc1xuXG4gIC8vIDE0LiBJZiByZXNwb25zZeKAmXMgc3RhdHVzIGlzIDQwMSwgaHR0cFJlcXVlc3TigJlzIHJlc3BvbnNlIHRhaW50aW5nIGlzIG5vdFxuICAvLyBcImNvcnNcIiwgaW5jbHVkZUNyZWRlbnRpYWxzIGlzIHRydWUsIGFuZCByZXF1ZXN04oCZcyB3aW5kb3cgaXMgYW4gZW52aXJvbm1lbnRcbiAgLy8gc2V0dGluZ3Mgb2JqZWN0LCB0aGVuOlxuICAvLyBUT0RPXG5cbiAgLy8gMTUuIElmIHJlc3BvbnNl4oCZcyBzdGF0dXMgaXMgNDA3LCB0aGVuOlxuICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDcpIHtcbiAgICAvLyAxLiBJZiByZXF1ZXN04oCZcyB3aW5kb3cgaXMgXCJuby13aW5kb3dcIiwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICAgIGlmIChyZXF1ZXN0LndpbmRvdyA9PT0gJ25vLXdpbmRvdycpIHtcbiAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKClcbiAgICB9XG5cbiAgICAvLyAyLiA/Pz9cblxuICAgIC8vIDMuIElmIGZldGNoUGFyYW1zIGlzIGNhbmNlbGVkLCB0aGVuIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgbmV0d29yayBlcnJvciBmb3IgZmV0Y2hQYXJhbXMuXG4gICAgaWYgKGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSkge1xuICAgICAgcmV0dXJuIG1ha2VBcHByb3ByaWF0ZU5ldHdvcmtFcnJvcihmZXRjaFBhcmFtcylcbiAgICB9XG5cbiAgICAvLyA0LiBQcm9tcHQgdGhlIGVuZCB1c2VyIGFzIGFwcHJvcHJpYXRlIGluIHJlcXVlc3TigJlzIHdpbmRvdyBhbmQgc3RvcmVcbiAgICAvLyB0aGUgcmVzdWx0IGFzIGEgcHJveHktYXV0aGVudGljYXRpb24gZW50cnkuIFtIVFRQLUFVVEhdXG4gICAgLy8gVE9ETzogSW52b2tlIHNvbWUga2luZCBvZiBjYWxsYmFjaz9cblxuICAgIC8vIDUuIFNldCByZXNwb25zZSB0byB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgSFRUUC1uZXR3b3JrLW9yLWNhY2hlIGZldGNoIGdpdmVuXG4gICAgLy8gZmV0Y2hQYXJhbXMuXG4gICAgLy8gVE9ET1xuICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdwcm94eSBhdXRoZW50aWNhdGlvbiByZXF1aXJlZCcpXG4gIH1cblxuICAvLyAxNi4gSWYgYWxsIG9mIHRoZSBmb2xsb3dpbmcgYXJlIHRydWVcbiAgaWYgKFxuICAgIC8vIHJlc3BvbnNl4oCZcyBzdGF0dXMgaXMgNDIxXG4gICAgcmVzcG9uc2Uuc3RhdHVzID09PSA0MjEgJiZcbiAgICAvLyBpc05ld0Nvbm5lY3Rpb25GZXRjaCBpcyBmYWxzZVxuICAgICFpc05ld0Nvbm5lY3Rpb25GZXRjaCAmJlxuICAgIC8vIHJlcXVlc3TigJlzIGJvZHkgaXMgbnVsbCwgb3IgcmVxdWVzdOKAmXMgYm9keSBpcyBub24tbnVsbCBhbmQgcmVxdWVzdOKAmXMgYm9keeKAmXMgc291cmNlIGlzIG5vbi1udWxsXG4gICAgKHJlcXVlc3QuYm9keSA9PSBudWxsIHx8IHJlcXVlc3QuYm9keS5zb3VyY2UgIT0gbnVsbClcbiAgKSB7XG4gICAgLy8gdGhlbjpcblxuICAgIC8vIDEuIElmIGZldGNoUGFyYW1zIGlzIGNhbmNlbGVkLCB0aGVuIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgbmV0d29yayBlcnJvciBmb3IgZmV0Y2hQYXJhbXMuXG4gICAgaWYgKGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSkge1xuICAgICAgcmV0dXJuIG1ha2VBcHByb3ByaWF0ZU5ldHdvcmtFcnJvcihmZXRjaFBhcmFtcylcbiAgICB9XG5cbiAgICAvLyAyLiBTZXQgcmVzcG9uc2UgdG8gdGhlIHJlc3VsdCBvZiBydW5uaW5nIEhUVFAtbmV0d29yay1vci1jYWNoZVxuICAgIC8vIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLCBpc0F1dGhlbnRpY2F0aW9uRmV0Y2gsIGFuZCB0cnVlLlxuXG4gICAgLy8gVE9ETyAoc3BlYyk6IFRoZSBzcGVjIGRvZXNuJ3Qgc3BlY2lmeSB0aGlzIGJ1dCB3ZSBuZWVkIHRvIGNhbmNlbFxuICAgIC8vIHRoZSBhY3RpdmUgcmVzcG9uc2UgYmVmb3JlIHdlIGNhbiBzdGFydCBhIG5ldyBvbmUuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy9mZXRjaC9pc3N1ZXMvMTI5M1xuICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29ubmVjdGlvbi5kZXN0cm95KClcblxuICAgIHJlc3BvbnNlID0gYXdhaXQgaHR0cE5ldHdvcmtPckNhY2hlRmV0Y2goXG4gICAgICBmZXRjaFBhcmFtcyxcbiAgICAgIGlzQXV0aGVudGljYXRpb25GZXRjaCxcbiAgICAgIHRydWVcbiAgICApXG4gIH1cblxuICAvLyAxNy4gSWYgaXNBdXRoZW50aWNhdGlvbkZldGNoIGlzIHRydWUsIHRoZW4gY3JlYXRlIGFuIGF1dGhlbnRpY2F0aW9uIGVudHJ5XG4gIGlmIChpc0F1dGhlbnRpY2F0aW9uRmV0Y2gpIHtcbiAgICAvLyBUT0RPXG4gIH1cblxuICAvLyAxOC4gUmV0dXJuIHJlc3BvbnNlLlxuICByZXR1cm4gcmVzcG9uc2Vcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtbmV0d29yay1mZXRjaFxuYXN5bmMgZnVuY3Rpb24gaHR0cE5ldHdvcmtGZXRjaCAoXG4gIGZldGNoUGFyYW1zLFxuICBpbmNsdWRlQ3JlZGVudGlhbHMgPSBmYWxzZSxcbiAgZm9yY2VOZXdDb25uZWN0aW9uID0gZmFsc2Vcbikge1xuICBhc3NlcnQoIWZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29ubmVjdGlvbiB8fCBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbm5lY3Rpb24uZGVzdHJveWVkKVxuXG4gIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29ubmVjdGlvbiA9IHtcbiAgICBhYm9ydDogbnVsbCxcbiAgICBkZXN0cm95ZWQ6IGZhbHNlLFxuICAgIGRlc3Ryb3kgKGVycikge1xuICAgICAgaWYgKCF0aGlzLmRlc3Ryb3llZCkge1xuICAgICAgICB0aGlzLmRlc3Ryb3llZCA9IHRydWVcbiAgICAgICAgdGhpcy5hYm9ydD8uKGVyciA/PyBuZXcgRE9NRXhjZXB0aW9uKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLicsICdBYm9ydEVycm9yJykpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gMS4gTGV0IHJlcXVlc3QgYmUgZmV0Y2hQYXJhbXPigJlzIHJlcXVlc3QuXG4gIGNvbnN0IHJlcXVlc3QgPSBmZXRjaFBhcmFtcy5yZXF1ZXN0XG5cbiAgLy8gMi4gTGV0IHJlc3BvbnNlIGJlIG51bGwuXG4gIGxldCByZXNwb25zZSA9IG51bGxcblxuICAvLyAzLiBMZXQgdGltaW5nSW5mbyBiZSBmZXRjaFBhcmFtc+KAmXMgdGltaW5nIGluZm8uXG4gIGNvbnN0IHRpbWluZ0luZm8gPSBmZXRjaFBhcmFtcy50aW1pbmdJbmZvXG5cbiAgLy8gNC4gTGV0IGh0dHBDYWNoZSBiZSB0aGUgcmVzdWx0IG9mIGRldGVybWluaW5nIHRoZSBIVFRQIGNhY2hlIHBhcnRpdGlvbixcbiAgLy8gZ2l2ZW4gcmVxdWVzdC5cbiAgLy8gVE9ETzogY2FjaGVcbiAgY29uc3QgaHR0cENhY2hlID0gbnVsbFxuXG4gIC8vIDUuIElmIGh0dHBDYWNoZSBpcyBudWxsLCB0aGVuIHNldCByZXF1ZXN04oCZcyBjYWNoZSBtb2RlIHRvIFwibm8tc3RvcmVcIi5cbiAgaWYgKGh0dHBDYWNoZSA9PSBudWxsKSB7XG4gICAgcmVxdWVzdC5jYWNoZSA9ICduby1zdG9yZSdcbiAgfVxuXG4gIC8vIDYuIExldCBuZXR3b3JrUGFydGl0aW9uS2V5IGJlIHRoZSByZXN1bHQgb2YgZGV0ZXJtaW5pbmcgdGhlIG5ldHdvcmtcbiAgLy8gcGFydGl0aW9uIGtleSBnaXZlbiByZXF1ZXN0LlxuICAvLyBUT0RPXG5cbiAgLy8gNy4gTGV0IG5ld0Nvbm5lY3Rpb24gYmUgXCJ5ZXNcIiBpZiBmb3JjZU5ld0Nvbm5lY3Rpb24gaXMgdHJ1ZTsgb3RoZXJ3aXNlXG4gIC8vIFwibm9cIi5cbiAgY29uc3QgbmV3Q29ubmVjdGlvbiA9IGZvcmNlTmV3Q29ubmVjdGlvbiA/ICd5ZXMnIDogJ25vJyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG5cbiAgLy8gOC4gU3dpdGNoIG9uIHJlcXVlc3TigJlzIG1vZGU6XG4gIGlmIChyZXF1ZXN0Lm1vZGUgPT09ICd3ZWJzb2NrZXQnKSB7XG4gICAgLy8gTGV0IGNvbm5lY3Rpb24gYmUgdGhlIHJlc3VsdCBvZiBvYnRhaW5pbmcgYSBXZWJTb2NrZXQgY29ubmVjdGlvbixcbiAgICAvLyBnaXZlbiByZXF1ZXN04oCZcyBjdXJyZW50IFVSTC5cbiAgICAvLyBUT0RPXG4gIH0gZWxzZSB7XG4gICAgLy8gTGV0IGNvbm5lY3Rpb24gYmUgdGhlIHJlc3VsdCBvZiBvYnRhaW5pbmcgYSBjb25uZWN0aW9uLCBnaXZlblxuICAgIC8vIG5ldHdvcmtQYXJ0aXRpb25LZXksIHJlcXVlc3TigJlzIGN1cnJlbnQgVVJM4oCZcyBvcmlnaW4sXG4gICAgLy8gaW5jbHVkZUNyZWRlbnRpYWxzLCBhbmQgZm9yY2VOZXdDb25uZWN0aW9uLlxuICAgIC8vIFRPRE9cbiAgfVxuXG4gIC8vIDkuIFJ1biB0aGVzZSBzdGVwcywgYnV0IGFib3J0IHdoZW4gdGhlIG9uZ29pbmcgZmV0Y2ggaXMgdGVybWluYXRlZDpcblxuICAvLyAgICAxLiBJZiBjb25uZWN0aW9uIGlzIGZhaWx1cmUsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cblxuICAvLyAgICAyLiBTZXQgdGltaW5nSW5mb+KAmXMgZmluYWwgY29ubmVjdGlvbiB0aW1pbmcgaW5mbyB0byB0aGUgcmVzdWx0IG9mXG4gIC8vICAgIGNhbGxpbmcgY2xhbXAgYW5kIGNvYXJzZW4gY29ubmVjdGlvbiB0aW1pbmcgaW5mbyB3aXRoIGNvbm5lY3Rpb27igJlzXG4gIC8vICAgIHRpbWluZyBpbmZvLCB0aW1pbmdJbmZv4oCZcyBwb3N0LXJlZGlyZWN0IHN0YXJ0IHRpbWUsIGFuZCBmZXRjaFBhcmFtc+KAmXNcbiAgLy8gICAgY3Jvc3Mtb3JpZ2luIGlzb2xhdGVkIGNhcGFiaWxpdHkuXG5cbiAgLy8gICAgMy4gSWYgY29ubmVjdGlvbiBpcyBub3QgYW4gSFRUUC8yIGNvbm5lY3Rpb24sIHJlcXVlc3TigJlzIGJvZHkgaXMgbm9uLW51bGwsXG4gIC8vICAgIGFuZCByZXF1ZXN04oCZcyBib2R54oCZcyBzb3VyY2UgaXMgbnVsbCwgdGhlbiBhcHBlbmQgKGBUcmFuc2Zlci1FbmNvZGluZ2AsXG4gIC8vICAgIGBjaHVua2VkYCkgdG8gcmVxdWVzdOKAmXMgaGVhZGVyIGxpc3QuXG5cbiAgLy8gICAgNC4gU2V0IHRpbWluZ0luZm/igJlzIGZpbmFsIG5ldHdvcmstcmVxdWVzdCBzdGFydCB0aW1lIHRvIHRoZSBjb2Fyc2VuZWRcbiAgLy8gICAgc2hhcmVkIGN1cnJlbnQgdGltZSBnaXZlbiBmZXRjaFBhcmFtc+KAmXMgY3Jvc3Mtb3JpZ2luIGlzb2xhdGVkXG4gIC8vICAgIGNhcGFiaWxpdHkuXG5cbiAgLy8gICAgNS4gU2V0IHJlc3BvbnNlIHRvIHRoZSByZXN1bHQgb2YgbWFraW5nIGFuIEhUVFAgcmVxdWVzdCBvdmVyIGNvbm5lY3Rpb25cbiAgLy8gICAgdXNpbmcgcmVxdWVzdCB3aXRoIHRoZSBmb2xsb3dpbmcgY2F2ZWF0czpcblxuICAvLyAgICAgICAgLSBGb2xsb3cgdGhlIHJlbGV2YW50IHJlcXVpcmVtZW50cyBmcm9tIEhUVFAuIFtIVFRQXSBbSFRUUC1TRU1BTlRJQ1NdXG4gIC8vICAgICAgICBbSFRUUC1DT05EXSBbSFRUUC1DQUNISU5HXSBbSFRUUC1BVVRIXVxuXG4gIC8vICAgICAgICAtIElmIHJlcXVlc3TigJlzIGJvZHkgaXMgbm9uLW51bGwsIGFuZCByZXF1ZXN04oCZcyBib2R54oCZcyBzb3VyY2UgaXMgbnVsbCxcbiAgLy8gICAgICAgIHRoZW4gdGhlIHVzZXIgYWdlbnQgbWF5IGhhdmUgYSBidWZmZXIgb2YgdXAgdG8gNjQga2liaWJ5dGVzIGFuZCBzdG9yZVxuICAvLyAgICAgICAgYSBwYXJ0IG9mIHJlcXVlc3TigJlzIGJvZHkgaW4gdGhhdCBidWZmZXIuIElmIHRoZSB1c2VyIGFnZW50IHJlYWRzIGZyb21cbiAgLy8gICAgICAgIHJlcXVlc3TigJlzIGJvZHkgYmV5b25kIHRoYXQgYnVmZmVy4oCZcyBzaXplIGFuZCB0aGUgdXNlciBhZ2VudCBuZWVkcyB0b1xuICAvLyAgICAgICAgcmVzZW5kIHJlcXVlc3QsIHRoZW4gaW5zdGVhZCByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuXG4gIC8vICAgICAgICAtIFNldCB0aW1pbmdJbmZv4oCZcyBmaW5hbCBuZXR3b3JrLXJlc3BvbnNlIHN0YXJ0IHRpbWUgdG8gdGhlIGNvYXJzZW5lZFxuICAvLyAgICAgICAgc2hhcmVkIGN1cnJlbnQgdGltZSBnaXZlbiBmZXRjaFBhcmFtc+KAmXMgY3Jvc3Mtb3JpZ2luIGlzb2xhdGVkIGNhcGFiaWxpdHksXG4gIC8vICAgICAgICBpbW1lZGlhdGVseSBhZnRlciB0aGUgdXNlciBhZ2VudOKAmXMgSFRUUCBwYXJzZXIgcmVjZWl2ZXMgdGhlIGZpcnN0IGJ5dGVcbiAgLy8gICAgICAgIG9mIHRoZSByZXNwb25zZSAoZS5nLiwgZnJhbWUgaGVhZGVyIGJ5dGVzIGZvciBIVFRQLzIgb3IgcmVzcG9uc2Ugc3RhdHVzXG4gIC8vICAgICAgICBsaW5lIGZvciBIVFRQLzEueCkuXG5cbiAgLy8gICAgICAgIC0gV2FpdCB1bnRpbCBhbGwgdGhlIGhlYWRlcnMgYXJlIHRyYW5zbWl0dGVkLlxuXG4gIC8vICAgICAgICAtIEFueSByZXNwb25zZXMgd2hvc2Ugc3RhdHVzIGlzIGluIHRoZSByYW5nZSAxMDAgdG8gMTk5LCBpbmNsdXNpdmUsXG4gIC8vICAgICAgICBhbmQgaXMgbm90IDEwMSwgYXJlIHRvIGJlIGlnbm9yZWQsIGV4Y2VwdCBmb3IgdGhlIHB1cnBvc2VzIG9mIHNldHRpbmdcbiAgLy8gICAgICAgIHRpbWluZ0luZm/igJlzIGZpbmFsIG5ldHdvcmstcmVzcG9uc2Ugc3RhcnQgdGltZSBhYm92ZS5cblxuICAvLyAgICAtIElmIHJlcXVlc3TigJlzIGhlYWRlciBsaXN0IGNvbnRhaW5zIGBUcmFuc2Zlci1FbmNvZGluZ2AvYGNodW5rZWRgIGFuZFxuICAvLyAgICByZXNwb25zZSBpcyB0cmFuc2ZlcnJlZCB2aWEgSFRUUC8xLjAgb3Igb2xkZXIsIHRoZW4gcmV0dXJuIGEgbmV0d29ya1xuICAvLyAgICBlcnJvci5cblxuICAvLyAgICAtIElmIHRoZSBIVFRQIHJlcXVlc3QgcmVzdWx0cyBpbiBhIFRMUyBjbGllbnQgY2VydGlmaWNhdGUgZGlhbG9nLCB0aGVuOlxuXG4gIC8vICAgICAgICAxLiBJZiByZXF1ZXN04oCZcyB3aW5kb3cgaXMgYW4gZW52aXJvbm1lbnQgc2V0dGluZ3Mgb2JqZWN0LCBtYWtlIHRoZVxuICAvLyAgICAgICAgZGlhbG9nIGF2YWlsYWJsZSBpbiByZXF1ZXN04oCZcyB3aW5kb3cuXG5cbiAgLy8gICAgICAgIDIuIE90aGVyd2lzZSwgcmV0dXJuIGEgbmV0d29yayBlcnJvci5cblxuICAvLyBUbyB0cmFuc21pdCByZXF1ZXN04oCZcyBib2R5IGJvZHksIHJ1biB0aGVzZSBzdGVwczpcbiAgbGV0IHJlcXVlc3RCb2R5ID0gbnVsbFxuICAvLyAxLiBJZiBib2R5IGlzIG51bGwgYW5kIGZldGNoUGFyYW1z4oCZcyBwcm9jZXNzIHJlcXVlc3QgZW5kLW9mLWJvZHkgaXNcbiAgLy8gbm9uLW51bGwsIHRoZW4gcXVldWUgYSBmZXRjaCB0YXNrIGdpdmVuIGZldGNoUGFyYW1z4oCZcyBwcm9jZXNzIHJlcXVlc3RcbiAgLy8gZW5kLW9mLWJvZHkgYW5kIGZldGNoUGFyYW1z4oCZcyB0YXNrIGRlc3RpbmF0aW9uLlxuICBpZiAocmVxdWVzdC5ib2R5ID09IG51bGwgJiYgZmV0Y2hQYXJhbXMucHJvY2Vzc1JlcXVlc3RFbmRPZkJvZHkpIHtcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBmZXRjaFBhcmFtcy5wcm9jZXNzUmVxdWVzdEVuZE9mQm9keSgpKVxuICB9IGVsc2UgaWYgKHJlcXVlc3QuYm9keSAhPSBudWxsKSB7XG4gICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiBib2R5IGlzIG5vbi1udWxsOlxuXG4gICAgLy8gICAgMS4gTGV0IHByb2Nlc3NCb2R5Q2h1bmsgZ2l2ZW4gYnl0ZXMgYmUgdGhlc2Ugc3RlcHM6XG4gICAgY29uc3QgcHJvY2Vzc0JvZHlDaHVuayA9IGFzeW5jIGZ1bmN0aW9uICogKGJ5dGVzKSB7XG4gICAgICAvLyAxLiBJZiB0aGUgb25nb2luZyBmZXRjaCBpcyB0ZXJtaW5hdGVkLCB0aGVuIGFib3J0IHRoZXNlIHN0ZXBzLlxuICAgICAgaWYgKGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gMi4gUnVuIHRoaXMgc3RlcCBpbiBwYXJhbGxlbDogdHJhbnNtaXQgYnl0ZXMuXG4gICAgICB5aWVsZCBieXRlc1xuXG4gICAgICAvLyAzLiBJZiBmZXRjaFBhcmFtc+KAmXMgcHJvY2VzcyByZXF1ZXN0IGJvZHkgaXMgbm9uLW51bGwsIHRoZW4gcnVuXG4gICAgICAvLyBmZXRjaFBhcmFtc+KAmXMgcHJvY2VzcyByZXF1ZXN0IGJvZHkgZ2l2ZW4gYnl0ZXPigJlzIGxlbmd0aC5cbiAgICAgIGZldGNoUGFyYW1zLnByb2Nlc3NSZXF1ZXN0Qm9keUNodW5rTGVuZ3RoPy4oYnl0ZXMuYnl0ZUxlbmd0aClcbiAgICB9XG5cbiAgICAvLyAyLiBMZXQgcHJvY2Vzc0VuZE9mQm9keSBiZSB0aGVzZSBzdGVwczpcbiAgICBjb25zdCBwcm9jZXNzRW5kT2ZCb2R5ID0gKCkgPT4ge1xuICAgICAgLy8gMS4gSWYgZmV0Y2hQYXJhbXMgaXMgY2FuY2VsZWQsIHRoZW4gYWJvcnQgdGhlc2Ugc3RlcHMuXG4gICAgICBpZiAoaXNDYW5jZWxsZWQoZmV0Y2hQYXJhbXMpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyAyLiBJZiBmZXRjaFBhcmFtc+KAmXMgcHJvY2VzcyByZXF1ZXN0IGVuZC1vZi1ib2R5IGlzIG5vbi1udWxsLFxuICAgICAgLy8gdGhlbiBydW4gZmV0Y2hQYXJhbXPigJlzIHByb2Nlc3MgcmVxdWVzdCBlbmQtb2YtYm9keS5cbiAgICAgIGlmIChmZXRjaFBhcmFtcy5wcm9jZXNzUmVxdWVzdEVuZE9mQm9keSkge1xuICAgICAgICBmZXRjaFBhcmFtcy5wcm9jZXNzUmVxdWVzdEVuZE9mQm9keSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gMy4gTGV0IHByb2Nlc3NCb2R5RXJyb3IgZ2l2ZW4gZSBiZSB0aGVzZSBzdGVwczpcbiAgICBjb25zdCBwcm9jZXNzQm9keUVycm9yID0gKGUpID0+IHtcbiAgICAgIC8vIDEuIElmIGZldGNoUGFyYW1zIGlzIGNhbmNlbGVkLCB0aGVuIGFib3J0IHRoZXNlIHN0ZXBzLlxuICAgICAgaWYgKGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gMi4gSWYgZSBpcyBhbiBcIkFib3J0RXJyb3JcIiBET01FeGNlcHRpb24sIHRoZW4gYWJvcnQgZmV0Y2hQYXJhbXPigJlzIGNvbnRyb2xsZXIuXG4gICAgICBpZiAoZS5uYW1lID09PSAnQWJvcnRFcnJvcicpIHtcbiAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5hYm9ydCgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnRlcm1pbmF0ZShlKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDQuIEluY3JlbWVudGFsbHkgcmVhZCByZXF1ZXN04oCZcyBib2R5IGdpdmVuIHByb2Nlc3NCb2R5Q2h1bmssIHByb2Nlc3NFbmRPZkJvZHksXG4gICAgLy8gcHJvY2Vzc0JvZHlFcnJvciwgYW5kIGZldGNoUGFyYW1z4oCZcyB0YXNrIGRlc3RpbmF0aW9uLlxuICAgIHJlcXVlc3RCb2R5ID0gKGFzeW5jIGZ1bmN0aW9uICogKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm9yIGF3YWl0IChjb25zdCBieXRlcyBvZiByZXF1ZXN0LmJvZHkuc3RyZWFtKSB7XG4gICAgICAgICAgeWllbGQgKiBwcm9jZXNzQm9keUNodW5rKGJ5dGVzKVxuICAgICAgICB9XG4gICAgICAgIHByb2Nlc3NFbmRPZkJvZHkoKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHByb2Nlc3NCb2R5RXJyb3IoZXJyKVxuICAgICAgfVxuICAgIH0pKClcbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gc29ja2V0IGlzIG9ubHkgcHJvdmlkZWQgZm9yIHdlYnNvY2tldHNcbiAgICBjb25zdCB7IGJvZHksIHN0YXR1cywgc3RhdHVzVGV4dCwgaGVhZGVyc0xpc3QsIHNvY2tldCB9ID0gYXdhaXQgZGlzcGF0Y2goeyBib2R5OiByZXF1ZXN0Qm9keSB9KVxuXG4gICAgaWYgKHNvY2tldCkge1xuICAgICAgcmVzcG9uc2UgPSBtYWtlUmVzcG9uc2UoeyBzdGF0dXMsIHN0YXR1c1RleHQsIGhlYWRlcnNMaXN0LCBzb2NrZXQgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgaXRlcmF0b3IgPSBib2R5W1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpXG4gICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLm5leHQgPSAoKSA9PiBpdGVyYXRvci5uZXh0KClcblxuICAgICAgcmVzcG9uc2UgPSBtYWtlUmVzcG9uc2UoeyBzdGF0dXMsIHN0YXR1c1RleHQsIGhlYWRlcnNMaXN0IH0pXG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyAxMC4gSWYgYWJvcnRlZCwgdGhlbjpcbiAgICBpZiAoZXJyLm5hbWUgPT09ICdBYm9ydEVycm9yJykge1xuICAgICAgLy8gMS4gSWYgY29ubmVjdGlvbiB1c2VzIEhUVFAvMiwgdGhlbiB0cmFuc21pdCBhbiBSU1RfU1RSRUFNIGZyYW1lLlxuICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb25uZWN0aW9uLmRlc3Ryb3koKVxuXG4gICAgICAvLyAyLiBSZXR1cm4gdGhlIGFwcHJvcHJpYXRlIG5ldHdvcmsgZXJyb3IgZm9yIGZldGNoUGFyYW1zLlxuICAgICAgcmV0dXJuIG1ha2VBcHByb3ByaWF0ZU5ldHdvcmtFcnJvcihmZXRjaFBhcmFtcywgZXJyKVxuICAgIH1cblxuICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKGVycilcbiAgfVxuXG4gIC8vIDExLiBMZXQgcHVsbEFsZ29yaXRobSBiZSBhbiBhY3Rpb24gdGhhdCByZXN1bWVzIHRoZSBvbmdvaW5nIGZldGNoXG4gIC8vIGlmIGl0IGlzIHN1c3BlbmRlZC5cbiAgY29uc3QgcHVsbEFsZ29yaXRobSA9ICgpID0+IHtcbiAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnJlc3VtZSgpXG4gIH1cblxuICAvLyAxMi4gTGV0IGNhbmNlbEFsZ29yaXRobSBiZSBhbiBhbGdvcml0aG0gdGhhdCBhYm9ydHMgZmV0Y2hQYXJhbXPigJlzXG4gIC8vIGNvbnRyb2xsZXIgd2l0aCByZWFzb24sIGdpdmVuIHJlYXNvbi5cbiAgY29uc3QgY2FuY2VsQWxnb3JpdGhtID0gKHJlYXNvbikgPT4ge1xuICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuYWJvcnQocmVhc29uKVxuICB9XG5cbiAgLy8gMTMuIExldCBoaWdoV2F0ZXJNYXJrIGJlIGEgbm9uLW5lZ2F0aXZlLCBub24tTmFOIG51bWJlciwgY2hvc2VuIGJ5XG4gIC8vIHRoZSB1c2VyIGFnZW50LlxuICAvLyBUT0RPXG5cbiAgLy8gMTQuIExldCBzaXplQWxnb3JpdGhtIGJlIGFuIGFsZ29yaXRobSB0aGF0IGFjY2VwdHMgYSBjaHVuayBvYmplY3RcbiAgLy8gYW5kIHJldHVybnMgYSBub24tbmVnYXRpdmUsIG5vbi1OYU4sIG5vbi1pbmZpbml0ZSBudW1iZXIsIGNob3NlbiBieSB0aGUgdXNlciBhZ2VudC5cbiAgLy8gVE9ET1xuXG4gIC8vIDE1LiBMZXQgc3RyZWFtIGJlIGEgbmV3IFJlYWRhYmxlU3RyZWFtLlxuICAvLyAxNi4gU2V0IHVwIHN0cmVhbSB3aXRoIHB1bGxBbGdvcml0aG0gc2V0IHRvIHB1bGxBbGdvcml0aG0sXG4gIC8vIGNhbmNlbEFsZ29yaXRobSBzZXQgdG8gY2FuY2VsQWxnb3JpdGhtLCBoaWdoV2F0ZXJNYXJrIHNldCB0b1xuICAvLyBoaWdoV2F0ZXJNYXJrLCBhbmQgc2l6ZUFsZ29yaXRobSBzZXQgdG8gc2l6ZUFsZ29yaXRobS5cbiAgaWYgKCFSZWFkYWJsZVN0cmVhbSkge1xuICAgIFJlYWRhYmxlU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtL3dlYicpLlJlYWRhYmxlU3RyZWFtXG4gIH1cblxuICBjb25zdCBzdHJlYW0gPSBuZXcgUmVhZGFibGVTdHJlYW0oXG4gICAge1xuICAgICAgYXN5bmMgc3RhcnQgKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb250cm9sbGVyID0gY29udHJvbGxlclxuICAgICAgfSxcbiAgICAgIGFzeW5jIHB1bGwgKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgYXdhaXQgcHVsbEFsZ29yaXRobShjb250cm9sbGVyKVxuICAgICAgfSxcbiAgICAgIGFzeW5jIGNhbmNlbCAocmVhc29uKSB7XG4gICAgICAgIGF3YWl0IGNhbmNlbEFsZ29yaXRobShyZWFzb24pXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBoaWdoV2F0ZXJNYXJrOiAwLFxuICAgICAgc2l6ZSAoKSB7XG4gICAgICAgIHJldHVybiAxXG4gICAgICB9XG4gICAgfVxuICApXG5cbiAgLy8gMTcuIFJ1biB0aGVzZSBzdGVwcywgYnV0IGFib3J0IHdoZW4gdGhlIG9uZ29pbmcgZmV0Y2ggaXMgdGVybWluYXRlZDpcblxuICAvLyAgICAxLiBTZXQgcmVzcG9uc2XigJlzIGJvZHkgdG8gYSBuZXcgYm9keSB3aG9zZSBzdHJlYW0gaXMgc3RyZWFtLlxuICByZXNwb25zZS5ib2R5ID0geyBzdHJlYW0gfVxuXG4gIC8vICAgIDIuIElmIHJlc3BvbnNlIGlzIG5vdCBhIG5ldHdvcmsgZXJyb3IgYW5kIHJlcXVlc3TigJlzIGNhY2hlIG1vZGUgaXNcbiAgLy8gICAgbm90IFwibm8tc3RvcmVcIiwgdGhlbiB1cGRhdGUgcmVzcG9uc2UgaW4gaHR0cENhY2hlIGZvciByZXF1ZXN0LlxuICAvLyAgICBUT0RPXG5cbiAgLy8gICAgMy4gSWYgaW5jbHVkZUNyZWRlbnRpYWxzIGlzIHRydWUgYW5kIHRoZSB1c2VyIGFnZW50IGlzIG5vdCBjb25maWd1cmVkXG4gIC8vICAgIHRvIGJsb2NrIGNvb2tpZXMgZm9yIHJlcXVlc3QgKHNlZSBzZWN0aW9uIDcgb2YgW0NPT0tJRVNdKSwgdGhlbiBydW4gdGhlXG4gIC8vICAgIFwic2V0LWNvb2tpZS1zdHJpbmdcIiBwYXJzaW5nIGFsZ29yaXRobSAoc2VlIHNlY3Rpb24gNS4yIG9mIFtDT09LSUVTXSkgb25cbiAgLy8gICAgdGhlIHZhbHVlIG9mIGVhY2ggaGVhZGVyIHdob3NlIG5hbWUgaXMgYSBieXRlLWNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yXG4gIC8vICAgIGBTZXQtQ29va2llYCBpbiByZXNwb25zZeKAmXMgaGVhZGVyIGxpc3QsIGlmIGFueSwgYW5kIHJlcXVlc3TigJlzIGN1cnJlbnQgVVJMLlxuICAvLyAgICBUT0RPXG5cbiAgLy8gMTguIElmIGFib3J0ZWQsIHRoZW46XG4gIC8vIFRPRE9cblxuICAvLyAxOS4gUnVuIHRoZXNlIHN0ZXBzIGluIHBhcmFsbGVsOlxuXG4gIC8vICAgIDEuIFJ1biB0aGVzZSBzdGVwcywgYnV0IGFib3J0IHdoZW4gZmV0Y2hQYXJhbXMgaXMgY2FuY2VsZWQ6XG4gIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIub24oJ3Rlcm1pbmF0ZWQnLCBvbkFib3J0ZWQpXG4gIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIucmVzdW1lID0gYXN5bmMgKCkgPT4ge1xuICAgIC8vIDEuIFdoaWxlIHRydWVcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgLy8gMS0zLiBTZWUgb25EYXRhLi4uXG5cbiAgICAgIC8vIDQuIFNldCBieXRlcyB0byB0aGUgcmVzdWx0IG9mIGhhbmRsaW5nIGNvbnRlbnQgY29kaW5ncyBnaXZlblxuICAgICAgLy8gY29kaW5ncyBhbmQgYnl0ZXMuXG4gICAgICBsZXQgYnl0ZXNcbiAgICAgIGxldCBpc0ZhaWx1cmVcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IGZldGNoUGFyYW1zLmNvbnRyb2xsZXIubmV4dCgpXG5cbiAgICAgICAgaWYgKGlzQWJvcnRlZChmZXRjaFBhcmFtcykpIHtcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG5cbiAgICAgICAgYnl0ZXMgPSBkb25lID8gdW5kZWZpbmVkIDogdmFsdWVcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoZmV0Y2hQYXJhbXMuY29udHJvbGxlci5lbmRlZCAmJiAhdGltaW5nSW5mby5lbmNvZGVkQm9keVNpemUpIHtcbiAgICAgICAgICAvLyB6bGliIGRvZXNuJ3QgbGlrZSBlbXB0eSBzdHJlYW1zLlxuICAgICAgICAgIGJ5dGVzID0gdW5kZWZpbmVkXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnl0ZXMgPSBlcnJcblxuICAgICAgICAgIC8vIGVyciBtYXkgYmUgcHJvcGFnYXRlZCBmcm9tIHRoZSByZXN1bHQgb2YgY2FsbGluZyByZWFkYWJsZXN0cmVhbS5jYW5jZWwsXG4gICAgICAgICAgLy8gd2hpY2ggbWlnaHQgbm90IGJlIGFuIGVycm9yLiBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMjAwOVxuICAgICAgICAgIGlzRmFpbHVyZSA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoYnl0ZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyAyLiBPdGhlcndpc2UsIGlmIHRoZSBieXRlcyB0cmFuc21pc3Npb24gZm9yIHJlc3BvbnNl4oCZcyBtZXNzYWdlXG4gICAgICAgIC8vIGJvZHkgaXMgZG9uZSBub3JtYWxseSBhbmQgc3RyZWFtIGlzIHJlYWRhYmxlLCB0aGVuIGNsb3NlXG4gICAgICAgIC8vIHN0cmVhbSwgZmluYWxpemUgcmVzcG9uc2UgZm9yIGZldGNoUGFyYW1zIGFuZCByZXNwb25zZSwgYW5kXG4gICAgICAgIC8vIGFib3J0IHRoZXNlIGluLXBhcmFsbGVsIHN0ZXBzLlxuICAgICAgICByZWFkYWJsZVN0cmVhbUNsb3NlKGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29udHJvbGxlcilcblxuICAgICAgICBmaW5hbGl6ZVJlc3BvbnNlKGZldGNoUGFyYW1zLCByZXNwb25zZSlcblxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gNS4gSW5jcmVhc2UgdGltaW5nSW5mb+KAmXMgZGVjb2RlZCBib2R5IHNpemUgYnkgYnl0ZXPigJlzIGxlbmd0aC5cbiAgICAgIHRpbWluZ0luZm8uZGVjb2RlZEJvZHlTaXplICs9IGJ5dGVzPy5ieXRlTGVuZ3RoID8/IDBcblxuICAgICAgLy8gNi4gSWYgYnl0ZXMgaXMgZmFpbHVyZSwgdGhlbiB0ZXJtaW5hdGUgZmV0Y2hQYXJhbXPigJlzIGNvbnRyb2xsZXIuXG4gICAgICBpZiAoaXNGYWlsdXJlKSB7XG4gICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIudGVybWluYXRlKGJ5dGVzKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gNy4gRW5xdWV1ZSBhIFVpbnQ4QXJyYXkgd3JhcHBpbmcgYW4gQXJyYXlCdWZmZXIgY29udGFpbmluZyBieXRlc1xuICAgICAgLy8gaW50byBzdHJlYW0uXG4gICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbnRyb2xsZXIuZW5xdWV1ZShuZXcgVWludDhBcnJheShieXRlcykpXG5cbiAgICAgIC8vIDguIElmIHN0cmVhbSBpcyBlcnJvcmVkLCB0aGVuIHRlcm1pbmF0ZSB0aGUgb25nb2luZyBmZXRjaC5cbiAgICAgIGlmIChpc0Vycm9yZWQoc3RyZWFtKSkge1xuICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnRlcm1pbmF0ZSgpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyA5LiBJZiBzdHJlYW0gZG9lc27igJl0IG5lZWQgbW9yZSBkYXRhIGFzayB0aGUgdXNlciBhZ2VudCB0byBzdXNwZW5kXG4gICAgICAvLyB0aGUgb25nb2luZyBmZXRjaC5cbiAgICAgIGlmICghZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb250cm9sbGVyLmRlc2lyZWRTaXplKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vICAgIDIuIElmIGFib3J0ZWQsIHRoZW46XG4gIGZ1bmN0aW9uIG9uQWJvcnRlZCAocmVhc29uKSB7XG4gICAgLy8gMi4gSWYgZmV0Y2hQYXJhbXMgaXMgYWJvcnRlZCwgdGhlbjpcbiAgICBpZiAoaXNBYm9ydGVkKGZldGNoUGFyYW1zKSkge1xuICAgICAgLy8gMS4gU2V0IHJlc3BvbnNl4oCZcyBhYm9ydGVkIGZsYWcuXG4gICAgICByZXNwb25zZS5hYm9ydGVkID0gdHJ1ZVxuXG4gICAgICAvLyAyLiBJZiBzdHJlYW0gaXMgcmVhZGFibGUsIHRoZW4gZXJyb3Igc3RyZWFtIHdpdGggdGhlIHJlc3VsdCBvZlxuICAgICAgLy8gICAgZGVzZXJpYWxpemUgYSBzZXJpYWxpemVkIGFib3J0IHJlYXNvbiBnaXZlbiBmZXRjaFBhcmFtc+KAmXNcbiAgICAgIC8vICAgIGNvbnRyb2xsZXLigJlzIHNlcmlhbGl6ZWQgYWJvcnQgcmVhc29uIGFuZCBhblxuICAgICAgLy8gICAgaW1wbGVtZW50YXRpb24tZGVmaW5lZCByZWFsbS5cbiAgICAgIGlmIChpc1JlYWRhYmxlKHN0cmVhbSkpIHtcbiAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb250cm9sbGVyLmVycm9yKFxuICAgICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuc2VyaWFsaXplZEFib3J0UmVhc29uXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gMy4gT3RoZXJ3aXNlLCBpZiBzdHJlYW0gaXMgcmVhZGFibGUsIGVycm9yIHN0cmVhbSB3aXRoIGEgVHlwZUVycm9yLlxuICAgICAgaWYgKGlzUmVhZGFibGUoc3RyZWFtKSkge1xuICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbnRyb2xsZXIuZXJyb3IobmV3IFR5cGVFcnJvcigndGVybWluYXRlZCcsIHtcbiAgICAgICAgICBjYXVzZTogaXNFcnJvckxpa2UocmVhc29uKSA/IHJlYXNvbiA6IHVuZGVmaW5lZFxuICAgICAgICB9KSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA0LiBJZiBjb25uZWN0aW9uIHVzZXMgSFRUUC8yLCB0aGVuIHRyYW5zbWl0IGFuIFJTVF9TVFJFQU0gZnJhbWUuXG4gICAgLy8gNS4gT3RoZXJ3aXNlLCB0aGUgdXNlciBhZ2VudCBzaG91bGQgY2xvc2UgY29ubmVjdGlvbiB1bmxlc3MgaXQgd291bGQgYmUgYmFkIGZvciBwZXJmb3JtYW5jZSB0byBkbyBzby5cbiAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbm5lY3Rpb24uZGVzdHJveSgpXG4gIH1cblxuICAvLyAyMC4gUmV0dXJuIHJlc3BvbnNlLlxuICByZXR1cm4gcmVzcG9uc2VcblxuICBhc3luYyBmdW5jdGlvbiBkaXNwYXRjaCAoeyBib2R5IH0pIHtcbiAgICBjb25zdCB1cmwgPSByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KVxuICAgIC8qKiBAdHlwZSB7aW1wb3J0KCcuLi8uLicpLkFnZW50fSAqL1xuICAgIGNvbnN0IGFnZW50ID0gZmV0Y2hQYXJhbXMuY29udHJvbGxlci5kaXNwYXRjaGVyXG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gYWdlbnQuZGlzcGF0Y2goXG4gICAgICB7XG4gICAgICAgIHBhdGg6IHVybC5wYXRobmFtZSArIHVybC5zZWFyY2gsXG4gICAgICAgIG9yaWdpbjogdXJsLm9yaWdpbixcbiAgICAgICAgbWV0aG9kOiByZXF1ZXN0Lm1ldGhvZCxcbiAgICAgICAgYm9keTogZmV0Y2hQYXJhbXMuY29udHJvbGxlci5kaXNwYXRjaGVyLmlzTW9ja0FjdGl2ZSA/IHJlcXVlc3QuYm9keSAmJiAocmVxdWVzdC5ib2R5LnNvdXJjZSB8fCByZXF1ZXN0LmJvZHkuc3RyZWFtKSA6IGJvZHksXG4gICAgICAgIGhlYWRlcnM6IHJlcXVlc3QuaGVhZGVyc0xpc3QuZW50cmllcyxcbiAgICAgICAgbWF4UmVkaXJlY3Rpb25zOiAwLFxuICAgICAgICB1cGdyYWRlOiByZXF1ZXN0Lm1vZGUgPT09ICd3ZWJzb2NrZXQnID8gJ3dlYnNvY2tldCcgOiB1bmRlZmluZWRcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJvZHk6IG51bGwsXG4gICAgICAgIGFib3J0OiBudWxsLFxuXG4gICAgICAgIG9uQ29ubmVjdCAoYWJvcnQpIHtcbiAgICAgICAgICAvLyBUT0RPIChmaXgpOiBEbyB3ZSBuZWVkIGNvbm5lY3Rpb24gaGVyZT9cbiAgICAgICAgICBjb25zdCB7IGNvbm5lY3Rpb24gfSA9IGZldGNoUGFyYW1zLmNvbnRyb2xsZXJcblxuICAgICAgICAgIGlmIChjb25uZWN0aW9uLmRlc3Ryb3llZCkge1xuICAgICAgICAgICAgYWJvcnQobmV3IERPTUV4Y2VwdGlvbignVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC4nLCAnQWJvcnRFcnJvcicpKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLm9uKCd0ZXJtaW5hdGVkJywgYWJvcnQpXG4gICAgICAgICAgICB0aGlzLmFib3J0ID0gY29ubmVjdGlvbi5hYm9ydCA9IGFib3J0XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIG9uSGVhZGVycyAoc3RhdHVzLCBoZWFkZXJzTGlzdCwgcmVzdW1lLCBzdGF0dXNUZXh0KSB7XG4gICAgICAgICAgaWYgKHN0YXR1cyA8IDIwMCkge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IGNvZGluZ3MgPSBbXVxuICAgICAgICAgIGxldCBsb2NhdGlvbiA9ICcnXG5cbiAgICAgICAgICBjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKVxuXG4gICAgICAgICAgLy8gRm9yIEgyLCB0aGUgaGVhZGVycyBhcmUgYSBwbGFpbiBKUyBvYmplY3RcbiAgICAgICAgICAvLyBXZSBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZW0gYW5kIGl0ZXJhdGUgYWNjb3JkaW5nbHlcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzTGlzdCkpIHtcbiAgICAgICAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgaGVhZGVyc0xpc3QubGVuZ3RoOyBuICs9IDIpIHtcbiAgICAgICAgICAgICAgY29uc3Qga2V5ID0gaGVhZGVyc0xpc3RbbiArIDBdLnRvU3RyaW5nKCdsYXRpbjEnKVxuICAgICAgICAgICAgICBjb25zdCB2YWwgPSBoZWFkZXJzTGlzdFtuICsgMV0udG9TdHJpbmcoJ2xhdGluMScpXG4gICAgICAgICAgICAgIGlmIChrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtZW5jb2RpbmcnKSB7XG4gICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzcyMzEjc2VjdGlvbi0zLjEuMi4xXG4gICAgICAgICAgICAgICAgLy8gXCJBbGwgY29udGVudC1jb2RpbmcgdmFsdWVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlLi4uXCJcbiAgICAgICAgICAgICAgICBjb2RpbmdzID0gdmFsLnRvTG93ZXJDYXNlKCkuc3BsaXQoJywnKS5tYXAoKHgpID0+IHgudHJpbSgpKVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleS50b0xvd2VyQ2FzZSgpID09PSAnbG9jYXRpb24nKSB7XG4gICAgICAgICAgICAgICAgbG9jYXRpb24gPSB2YWxcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGhlYWRlcnNba0hlYWRlcnNMaXN0XS5hcHBlbmQoa2V5LCB2YWwpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhoZWFkZXJzTGlzdClcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgICAgICAgY29uc3QgdmFsID0gaGVhZGVyc0xpc3Rba2V5XVxuICAgICAgICAgICAgICBpZiAoa2V5LnRvTG93ZXJDYXNlKCkgPT09ICdjb250ZW50LWVuY29kaW5nJykge1xuICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM3MjMxI3NlY3Rpb24tMy4xLjIuMVxuICAgICAgICAgICAgICAgIC8vIFwiQWxsIGNvbnRlbnQtY29kaW5nIHZhbHVlcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZS4uLlwiXG4gICAgICAgICAgICAgICAgY29kaW5ncyA9IHZhbC50b0xvd2VyQ2FzZSgpLnNwbGl0KCcsJykubWFwKCh4KSA9PiB4LnRyaW0oKSkucmV2ZXJzZSgpXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5LnRvTG93ZXJDYXNlKCkgPT09ICdsb2NhdGlvbicpIHtcbiAgICAgICAgICAgICAgICBsb2NhdGlvbiA9IHZhbFxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaGVhZGVyc1trSGVhZGVyc0xpc3RdLmFwcGVuZChrZXksIHZhbClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmJvZHkgPSBuZXcgUmVhZGFibGUoeyByZWFkOiByZXN1bWUgfSlcblxuICAgICAgICAgIGNvbnN0IGRlY29kZXJzID0gW11cblxuICAgICAgICAgIGNvbnN0IHdpbGxGb2xsb3cgPSByZXF1ZXN0LnJlZGlyZWN0ID09PSAnZm9sbG93JyAmJlxuICAgICAgICAgICAgbG9jYXRpb24gJiZcbiAgICAgICAgICAgIHJlZGlyZWN0U3RhdHVzU2V0LmhhcyhzdGF0dXMpXG5cbiAgICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvQ29udGVudC1FbmNvZGluZ1xuICAgICAgICAgIGlmIChyZXF1ZXN0Lm1ldGhvZCAhPT0gJ0hFQUQnICYmIHJlcXVlc3QubWV0aG9kICE9PSAnQ09OTkVDVCcgJiYgIW51bGxCb2R5U3RhdHVzLmluY2x1ZGVzKHN0YXR1cykgJiYgIXdpbGxGb2xsb3cpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29kaW5nIG9mIGNvZGluZ3MpIHtcbiAgICAgICAgICAgICAgLy8gaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzkxMTIuaHRtbCNzZWN0aW9uLTcuMlxuICAgICAgICAgICAgICBpZiAoY29kaW5nID09PSAneC1nemlwJyB8fCBjb2RpbmcgPT09ICdnemlwJykge1xuICAgICAgICAgICAgICAgIGRlY29kZXJzLnB1c2goemxpYi5jcmVhdGVHdW56aXAoe1xuICAgICAgICAgICAgICAgICAgLy8gQmUgbGVzcyBzdHJpY3Qgd2hlbiBkZWNvZGluZyBjb21wcmVzc2VkIHJlc3BvbnNlcywgc2luY2Ugc29tZXRpbWVzXG4gICAgICAgICAgICAgICAgICAvLyBzZXJ2ZXJzIHNlbmQgc2xpZ2h0bHkgaW52YWxpZCByZXNwb25zZXMgdGhhdCBhcmUgc3RpbGwgYWNjZXB0ZWRcbiAgICAgICAgICAgICAgICAgIC8vIGJ5IGNvbW1vbiBicm93c2Vycy5cbiAgICAgICAgICAgICAgICAgIC8vIEFsd2F5cyB1c2luZyBaX1NZTkNfRkxVU0ggaXMgd2hhdCBjVVJMIGRvZXMuXG4gICAgICAgICAgICAgICAgICBmbHVzaDogemxpYi5jb25zdGFudHMuWl9TWU5DX0ZMVVNILFxuICAgICAgICAgICAgICAgICAgZmluaXNoRmx1c2g6IHpsaWIuY29uc3RhbnRzLlpfU1lOQ19GTFVTSFxuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvZGluZyA9PT0gJ2RlZmxhdGUnKSB7XG4gICAgICAgICAgICAgICAgZGVjb2RlcnMucHVzaCh6bGliLmNyZWF0ZUluZmxhdGUoKSlcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb2RpbmcgPT09ICdicicpIHtcbiAgICAgICAgICAgICAgICBkZWNvZGVycy5wdXNoKHpsaWIuY3JlYXRlQnJvdGxpRGVjb21wcmVzcygpKVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRlY29kZXJzLmxlbmd0aCA9IDBcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgICBzdGF0dXNUZXh0LFxuICAgICAgICAgICAgaGVhZGVyc0xpc3Q6IGhlYWRlcnNba0hlYWRlcnNMaXN0XSxcbiAgICAgICAgICAgIGJvZHk6IGRlY29kZXJzLmxlbmd0aFxuICAgICAgICAgICAgICA/IHBpcGVsaW5lKHRoaXMuYm9keSwgLi4uZGVjb2RlcnMsICgpID0+IHsgfSlcbiAgICAgICAgICAgICAgOiB0aGlzLmJvZHkub24oJ2Vycm9yJywgKCkgPT4ge30pXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH0sXG5cbiAgICAgICAgb25EYXRhIChjaHVuaykge1xuICAgICAgICAgIGlmIChmZXRjaFBhcmFtcy5jb250cm9sbGVyLmR1bXApIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDEuIElmIG9uZSBvciBtb3JlIGJ5dGVzIGhhdmUgYmVlbiB0cmFuc21pdHRlZCBmcm9tIHJlc3BvbnNl4oCZc1xuICAgICAgICAgIC8vIG1lc3NhZ2UgYm9keSwgdGhlbjpcblxuICAgICAgICAgIC8vICAxLiBMZXQgYnl0ZXMgYmUgdGhlIHRyYW5zbWl0dGVkIGJ5dGVzLlxuICAgICAgICAgIGNvbnN0IGJ5dGVzID0gY2h1bmtcblxuICAgICAgICAgIC8vICAyLiBMZXQgY29kaW5ncyBiZSB0aGUgcmVzdWx0IG9mIGV4dHJhY3RpbmcgaGVhZGVyIGxpc3QgdmFsdWVzXG4gICAgICAgICAgLy8gIGdpdmVuIGBDb250ZW50LUVuY29kaW5nYCBhbmQgcmVzcG9uc2XigJlzIGhlYWRlciBsaXN0LlxuICAgICAgICAgIC8vICBTZWUgcHVsbEFsZ29yaXRobS5cblxuICAgICAgICAgIC8vICAzLiBJbmNyZWFzZSB0aW1pbmdJbmZv4oCZcyBlbmNvZGVkIGJvZHkgc2l6ZSBieSBieXRlc+KAmXMgbGVuZ3RoLlxuICAgICAgICAgIHRpbWluZ0luZm8uZW5jb2RlZEJvZHlTaXplICs9IGJ5dGVzLmJ5dGVMZW5ndGhcblxuICAgICAgICAgIC8vICA0LiBTZWUgcHVsbEFsZ29yaXRobS4uLlxuXG4gICAgICAgICAgcmV0dXJuIHRoaXMuYm9keS5wdXNoKGJ5dGVzKVxuICAgICAgICB9LFxuXG4gICAgICAgIG9uQ29tcGxldGUgKCkge1xuICAgICAgICAgIGlmICh0aGlzLmFib3J0KSB7XG4gICAgICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLm9mZigndGVybWluYXRlZCcsIHRoaXMuYWJvcnQpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5lbmRlZCA9IHRydWVcblxuICAgICAgICAgIHRoaXMuYm9keS5wdXNoKG51bGwpXG4gICAgICAgIH0sXG5cbiAgICAgICAgb25FcnJvciAoZXJyb3IpIHtcbiAgICAgICAgICBpZiAodGhpcy5hYm9ydCkge1xuICAgICAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5vZmYoJ3Rlcm1pbmF0ZWQnLCB0aGlzLmFib3J0KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuYm9keT8uZGVzdHJveShlcnJvcilcblxuICAgICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIudGVybWluYXRlKGVycm9yKVxuXG4gICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICB9LFxuXG4gICAgICAgIG9uVXBncmFkZSAoc3RhdHVzLCBoZWFkZXJzTGlzdCwgc29ja2V0KSB7XG4gICAgICAgICAgaWYgKHN0YXR1cyAhPT0gMTAxKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKVxuXG4gICAgICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBoZWFkZXJzTGlzdC5sZW5ndGg7IG4gKz0gMikge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gaGVhZGVyc0xpc3RbbiArIDBdLnRvU3RyaW5nKCdsYXRpbjEnKVxuICAgICAgICAgICAgY29uc3QgdmFsID0gaGVhZGVyc0xpc3RbbiArIDFdLnRvU3RyaW5nKCdsYXRpbjEnKVxuXG4gICAgICAgICAgICBoZWFkZXJzW2tIZWFkZXJzTGlzdF0uYXBwZW5kKGtleSwgdmFsKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgICAgc3RhdHVzVGV4dDogU1RBVFVTX0NPREVTW3N0YXR1c10sXG4gICAgICAgICAgICBoZWFkZXJzTGlzdDogaGVhZGVyc1trSGVhZGVyc0xpc3RdLFxuICAgICAgICAgICAgc29ja2V0XG4gICAgICAgICAgfSlcblxuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBmZXRjaCxcbiAgRmV0Y2gsXG4gIGZldGNoaW5nLFxuICBmaW5hbGl6ZUFuZFJlcG9ydFRpbWluZ1xufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGtTdGF0ZTogU3ltYm9sKCdGaWxlUmVhZGVyIHN0YXRlJyksXG4gIGtSZXN1bHQ6IFN5bWJvbCgnRmlsZVJlYWRlciByZXN1bHQnKSxcbiAga0Vycm9yOiBTeW1ib2woJ0ZpbGVSZWFkZXIgZXJyb3InKSxcbiAga0xhc3RQcm9ncmVzc0V2ZW50RmlyZWQ6IFN5bWJvbCgnRmlsZVJlYWRlciBsYXN0IHByb2dyZXNzIGV2ZW50IGZpcmVkIHRpbWVzdGFtcCcpLFxuICBrRXZlbnRzOiBTeW1ib2woJ0ZpbGVSZWFkZXIgZXZlbnRzJyksXG4gIGtBYm9ydGVkOiBTeW1ib2woJ0ZpbGVSZWFkZXIgYWJvcnRlZCcpXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvd2ViaWRsJylcblxuY29uc3Qga1N0YXRlID0gU3ltYm9sKCdQcm9ncmVzc0V2ZW50IHN0YXRlJylcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8veGhyLnNwZWMud2hhdHdnLm9yZy8jcHJvZ3Jlc3NldmVudFxuICovXG5jbGFzcyBQcm9ncmVzc0V2ZW50IGV4dGVuZHMgRXZlbnQge1xuICBjb25zdHJ1Y3RvciAodHlwZSwgZXZlbnRJbml0RGljdCA9IHt9KSB7XG4gICAgdHlwZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyh0eXBlKVxuICAgIGV2ZW50SW5pdERpY3QgPSB3ZWJpZGwuY29udmVydGVycy5Qcm9ncmVzc0V2ZW50SW5pdChldmVudEluaXREaWN0ID8/IHt9KVxuXG4gICAgc3VwZXIodHlwZSwgZXZlbnRJbml0RGljdClcblxuICAgIHRoaXNba1N0YXRlXSA9IHtcbiAgICAgIGxlbmd0aENvbXB1dGFibGU6IGV2ZW50SW5pdERpY3QubGVuZ3RoQ29tcHV0YWJsZSxcbiAgICAgIGxvYWRlZDogZXZlbnRJbml0RGljdC5sb2FkZWQsXG4gICAgICB0b3RhbDogZXZlbnRJbml0RGljdC50b3RhbFxuICAgIH1cbiAgfVxuXG4gIGdldCBsZW5ndGhDb21wdXRhYmxlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBQcm9ncmVzc0V2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5sZW5ndGhDb21wdXRhYmxlXG4gIH1cblxuICBnZXQgbG9hZGVkICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBQcm9ncmVzc0V2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5sb2FkZWRcbiAgfVxuXG4gIGdldCB0b3RhbCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUHJvZ3Jlc3NFdmVudClcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0udG90YWxcbiAgfVxufVxuXG53ZWJpZGwuY29udmVydGVycy5Qcm9ncmVzc0V2ZW50SW5pdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGtleTogJ2xlbmd0aENvbXB1dGFibGUnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdsb2FkZWQnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIGxvbmcgbG9uZyddLFxuICAgIGRlZmF1bHRWYWx1ZTogMFxuICB9LFxuICB7XG4gICAga2V5OiAndG90YWwnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIGxvbmcgbG9uZyddLFxuICAgIGRlZmF1bHRWYWx1ZTogMFxuICB9LFxuICB7XG4gICAga2V5OiAnYnViYmxlcycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2VcbiAgfSxcbiAge1xuICAgIGtleTogJ2NhbmNlbGFibGUnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjb21wb3NlZCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2VcbiAgfVxuXSlcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFByb2dyZXNzRXZlbnRcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbi8qKlxuICogQHNlZSBodHRwczovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1lbmNvZGluZy1nZXRcbiAqIEBwYXJhbSB7c3RyaW5nfHVuZGVmaW5lZH0gbGFiZWxcbiAqL1xuZnVuY3Rpb24gZ2V0RW5jb2RpbmcgKGxhYmVsKSB7XG4gIGlmICghbGFiZWwpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICAvLyAxLiBSZW1vdmUgYW55IGxlYWRpbmcgYW5kIHRyYWlsaW5nIEFTQ0lJIHdoaXRlc3BhY2UgZnJvbSBsYWJlbC5cbiAgLy8gMi4gSWYgbGFiZWwgaXMgYW4gQVNDSUkgY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBmb3IgYW55IG9mIHRoZVxuICAvLyAgICBsYWJlbHMgbGlzdGVkIGluIHRoZSB0YWJsZSBiZWxvdywgdGhlbiByZXR1cm4gdGhlXG4gIC8vICAgIGNvcnJlc3BvbmRpbmcgZW5jb2Rpbmc7IG90aGVyd2lzZSByZXR1cm4gZmFpbHVyZS5cbiAgc3dpdGNoIChsYWJlbC50cmltKCkudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgJ3VuaWNvZGUtMS0xLXV0Zi04JzpcbiAgICBjYXNlICd1bmljb2RlMTF1dGY4JzpcbiAgICBjYXNlICd1bmljb2RlMjB1dGY4JzpcbiAgICBjYXNlICd1dGYtOCc6XG4gICAgY2FzZSAndXRmOCc6XG4gICAgY2FzZSAneC11bmljb2RlMjB1dGY4JzpcbiAgICAgIHJldHVybiAnVVRGLTgnXG4gICAgY2FzZSAnODY2JzpcbiAgICBjYXNlICdjcDg2Nic6XG4gICAgY2FzZSAnY3NpYm04NjYnOlxuICAgIGNhc2UgJ2libTg2Nic6XG4gICAgICByZXR1cm4gJ0lCTTg2NidcbiAgICBjYXNlICdjc2lzb2xhdGluMic6XG4gICAgY2FzZSAnaXNvLTg4NTktMic6XG4gICAgY2FzZSAnaXNvLWlyLTEwMSc6XG4gICAgY2FzZSAnaXNvODg1OS0yJzpcbiAgICBjYXNlICdpc284ODU5Mic6XG4gICAgY2FzZSAnaXNvXzg4NTktMic6XG4gICAgY2FzZSAnaXNvXzg4NTktMjoxOTg3JzpcbiAgICBjYXNlICdsMic6XG4gICAgY2FzZSAnbGF0aW4yJzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktMidcbiAgICBjYXNlICdjc2lzb2xhdGluMyc6XG4gICAgY2FzZSAnaXNvLTg4NTktMyc6XG4gICAgY2FzZSAnaXNvLWlyLTEwOSc6XG4gICAgY2FzZSAnaXNvODg1OS0zJzpcbiAgICBjYXNlICdpc284ODU5Myc6XG4gICAgY2FzZSAnaXNvXzg4NTktMyc6XG4gICAgY2FzZSAnaXNvXzg4NTktMzoxOTg4JzpcbiAgICBjYXNlICdsMyc6XG4gICAgY2FzZSAnbGF0aW4zJzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktMydcbiAgICBjYXNlICdjc2lzb2xhdGluNCc6XG4gICAgY2FzZSAnaXNvLTg4NTktNCc6XG4gICAgY2FzZSAnaXNvLWlyLTExMCc6XG4gICAgY2FzZSAnaXNvODg1OS00JzpcbiAgICBjYXNlICdpc284ODU5NCc6XG4gICAgY2FzZSAnaXNvXzg4NTktNCc6XG4gICAgY2FzZSAnaXNvXzg4NTktNDoxOTg4JzpcbiAgICBjYXNlICdsNCc6XG4gICAgY2FzZSAnbGF0aW40JzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktNCdcbiAgICBjYXNlICdjc2lzb2xhdGluY3lyaWxsaWMnOlxuICAgIGNhc2UgJ2N5cmlsbGljJzpcbiAgICBjYXNlICdpc28tODg1OS01JzpcbiAgICBjYXNlICdpc28taXItMTQ0JzpcbiAgICBjYXNlICdpc284ODU5LTUnOlxuICAgIGNhc2UgJ2lzbzg4NTk1JzpcbiAgICBjYXNlICdpc29fODg1OS01JzpcbiAgICBjYXNlICdpc29fODg1OS01OjE5ODgnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS01J1xuICAgIGNhc2UgJ2FyYWJpYyc6XG4gICAgY2FzZSAnYXNtby03MDgnOlxuICAgIGNhc2UgJ2NzaXNvODg1OTZlJzpcbiAgICBjYXNlICdjc2lzbzg4NTk2aSc6XG4gICAgY2FzZSAnY3Npc29sYXRpbmFyYWJpYyc6XG4gICAgY2FzZSAnZWNtYS0xMTQnOlxuICAgIGNhc2UgJ2lzby04ODU5LTYnOlxuICAgIGNhc2UgJ2lzby04ODU5LTYtZSc6XG4gICAgY2FzZSAnaXNvLTg4NTktNi1pJzpcbiAgICBjYXNlICdpc28taXItMTI3JzpcbiAgICBjYXNlICdpc284ODU5LTYnOlxuICAgIGNhc2UgJ2lzbzg4NTk2JzpcbiAgICBjYXNlICdpc29fODg1OS02JzpcbiAgICBjYXNlICdpc29fODg1OS02OjE5ODcnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS02J1xuICAgIGNhc2UgJ2NzaXNvbGF0aW5ncmVlayc6XG4gICAgY2FzZSAnZWNtYS0xMTgnOlxuICAgIGNhc2UgJ2Vsb3RfOTI4JzpcbiAgICBjYXNlICdncmVlayc6XG4gICAgY2FzZSAnZ3JlZWs4JzpcbiAgICBjYXNlICdpc28tODg1OS03JzpcbiAgICBjYXNlICdpc28taXItMTI2JzpcbiAgICBjYXNlICdpc284ODU5LTcnOlxuICAgIGNhc2UgJ2lzbzg4NTk3JzpcbiAgICBjYXNlICdpc29fODg1OS03JzpcbiAgICBjYXNlICdpc29fODg1OS03OjE5ODcnOlxuICAgIGNhc2UgJ3N1bl9ldV9ncmVlayc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTcnXG4gICAgY2FzZSAnY3Npc284ODU5OGUnOlxuICAgIGNhc2UgJ2NzaXNvbGF0aW5oZWJyZXcnOlxuICAgIGNhc2UgJ2hlYnJldyc6XG4gICAgY2FzZSAnaXNvLTg4NTktOCc6XG4gICAgY2FzZSAnaXNvLTg4NTktOC1lJzpcbiAgICBjYXNlICdpc28taXItMTM4JzpcbiAgICBjYXNlICdpc284ODU5LTgnOlxuICAgIGNhc2UgJ2lzbzg4NTk4JzpcbiAgICBjYXNlICdpc29fODg1OS04JzpcbiAgICBjYXNlICdpc29fODg1OS04OjE5ODgnOlxuICAgIGNhc2UgJ3Zpc3VhbCc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTgnXG4gICAgY2FzZSAnY3Npc284ODU5OGknOlxuICAgIGNhc2UgJ2lzby04ODU5LTgtaSc6XG4gICAgY2FzZSAnbG9naWNhbCc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTgtSSdcbiAgICBjYXNlICdjc2lzb2xhdGluNic6XG4gICAgY2FzZSAnaXNvLTg4NTktMTAnOlxuICAgIGNhc2UgJ2lzby1pci0xNTcnOlxuICAgIGNhc2UgJ2lzbzg4NTktMTAnOlxuICAgIGNhc2UgJ2lzbzg4NTkxMCc6XG4gICAgY2FzZSAnbDYnOlxuICAgIGNhc2UgJ2xhdGluNic6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTEwJ1xuICAgIGNhc2UgJ2lzby04ODU5LTEzJzpcbiAgICBjYXNlICdpc284ODU5LTEzJzpcbiAgICBjYXNlICdpc284ODU5MTMnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS0xMydcbiAgICBjYXNlICdpc28tODg1OS0xNCc6XG4gICAgY2FzZSAnaXNvODg1OS0xNCc6XG4gICAgY2FzZSAnaXNvODg1OTE0JzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktMTQnXG4gICAgY2FzZSAnY3Npc29sYXRpbjknOlxuICAgIGNhc2UgJ2lzby04ODU5LTE1JzpcbiAgICBjYXNlICdpc284ODU5LTE1JzpcbiAgICBjYXNlICdpc284ODU5MTUnOlxuICAgIGNhc2UgJ2lzb184ODU5LTE1JzpcbiAgICBjYXNlICdsOSc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTE1J1xuICAgIGNhc2UgJ2lzby04ODU5LTE2JzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktMTYnXG4gICAgY2FzZSAnY3Nrb2k4cic6XG4gICAgY2FzZSAna29pJzpcbiAgICBjYXNlICdrb2k4JzpcbiAgICBjYXNlICdrb2k4LXInOlxuICAgIGNhc2UgJ2tvaThfcic6XG4gICAgICByZXR1cm4gJ0tPSTgtUidcbiAgICBjYXNlICdrb2k4LXJ1JzpcbiAgICBjYXNlICdrb2k4LXUnOlxuICAgICAgcmV0dXJuICdLT0k4LVUnXG4gICAgY2FzZSAnY3NtYWNpbnRvc2gnOlxuICAgIGNhc2UgJ21hYyc6XG4gICAgY2FzZSAnbWFjaW50b3NoJzpcbiAgICBjYXNlICd4LW1hYy1yb21hbic6XG4gICAgICByZXR1cm4gJ21hY2ludG9zaCdcbiAgICBjYXNlICdpc28tODg1OS0xMSc6XG4gICAgY2FzZSAnaXNvODg1OS0xMSc6XG4gICAgY2FzZSAnaXNvODg1OTExJzpcbiAgICBjYXNlICd0aXMtNjIwJzpcbiAgICBjYXNlICd3aW5kb3dzLTg3NCc6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtODc0J1xuICAgIGNhc2UgJ2NwMTI1MCc6XG4gICAgY2FzZSAnd2luZG93cy0xMjUwJzpcbiAgICBjYXNlICd4LWNwMTI1MCc6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtMTI1MCdcbiAgICBjYXNlICdjcDEyNTEnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMTI1MSc6XG4gICAgY2FzZSAneC1jcDEyNTEnOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTEyNTEnXG4gICAgY2FzZSAnYW5zaV94My40LTE5NjgnOlxuICAgIGNhc2UgJ2FzY2lpJzpcbiAgICBjYXNlICdjcDEyNTInOlxuICAgIGNhc2UgJ2NwODE5JzpcbiAgICBjYXNlICdjc2lzb2xhdGluMSc6XG4gICAgY2FzZSAnaWJtODE5JzpcbiAgICBjYXNlICdpc28tODg1OS0xJzpcbiAgICBjYXNlICdpc28taXItMTAwJzpcbiAgICBjYXNlICdpc284ODU5LTEnOlxuICAgIGNhc2UgJ2lzbzg4NTkxJzpcbiAgICBjYXNlICdpc29fODg1OS0xJzpcbiAgICBjYXNlICdpc29fODg1OS0xOjE5ODcnOlxuICAgIGNhc2UgJ2wxJzpcbiAgICBjYXNlICdsYXRpbjEnOlxuICAgIGNhc2UgJ3VzLWFzY2lpJzpcbiAgICBjYXNlICd3aW5kb3dzLTEyNTInOlxuICAgIGNhc2UgJ3gtY3AxMjUyJzpcbiAgICAgIHJldHVybiAnd2luZG93cy0xMjUyJ1xuICAgIGNhc2UgJ2NwMTI1Myc6XG4gICAgY2FzZSAnd2luZG93cy0xMjUzJzpcbiAgICBjYXNlICd4LWNwMTI1Myc6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtMTI1MydcbiAgICBjYXNlICdjcDEyNTQnOlxuICAgIGNhc2UgJ2NzaXNvbGF0aW41JzpcbiAgICBjYXNlICdpc28tODg1OS05JzpcbiAgICBjYXNlICdpc28taXItMTQ4JzpcbiAgICBjYXNlICdpc284ODU5LTknOlxuICAgIGNhc2UgJ2lzbzg4NTk5JzpcbiAgICBjYXNlICdpc29fODg1OS05JzpcbiAgICBjYXNlICdpc29fODg1OS05OjE5ODknOlxuICAgIGNhc2UgJ2w1JzpcbiAgICBjYXNlICdsYXRpbjUnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMTI1NCc6XG4gICAgY2FzZSAneC1jcDEyNTQnOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTEyNTQnXG4gICAgY2FzZSAnY3AxMjU1JzpcbiAgICBjYXNlICd3aW5kb3dzLTEyNTUnOlxuICAgIGNhc2UgJ3gtY3AxMjU1JzpcbiAgICAgIHJldHVybiAnd2luZG93cy0xMjU1J1xuICAgIGNhc2UgJ2NwMTI1Nic6XG4gICAgY2FzZSAnd2luZG93cy0xMjU2JzpcbiAgICBjYXNlICd4LWNwMTI1Nic6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtMTI1NidcbiAgICBjYXNlICdjcDEyNTcnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMTI1Nyc6XG4gICAgY2FzZSAneC1jcDEyNTcnOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTEyNTcnXG4gICAgY2FzZSAnY3AxMjU4JzpcbiAgICBjYXNlICd3aW5kb3dzLTEyNTgnOlxuICAgIGNhc2UgJ3gtY3AxMjU4JzpcbiAgICAgIHJldHVybiAnd2luZG93cy0xMjU4J1xuICAgIGNhc2UgJ3gtbWFjLWN5cmlsbGljJzpcbiAgICBjYXNlICd4LW1hYy11a3JhaW5pYW4nOlxuICAgICAgcmV0dXJuICd4LW1hYy1jeXJpbGxpYydcbiAgICBjYXNlICdjaGluZXNlJzpcbiAgICBjYXNlICdjc2diMjMxMic6XG4gICAgY2FzZSAnY3Npc281OGdiMjMxMjgwJzpcbiAgICBjYXNlICdnYjIzMTInOlxuICAgIGNhc2UgJ2diXzIzMTInOlxuICAgIGNhc2UgJ2diXzIzMTItODAnOlxuICAgIGNhc2UgJ2diayc6XG4gICAgY2FzZSAnaXNvLWlyLTU4JzpcbiAgICBjYXNlICd4LWdiayc6XG4gICAgICByZXR1cm4gJ0dCSydcbiAgICBjYXNlICdnYjE4MDMwJzpcbiAgICAgIHJldHVybiAnZ2IxODAzMCdcbiAgICBjYXNlICdiaWc1JzpcbiAgICBjYXNlICdiaWc1LWhrc2NzJzpcbiAgICBjYXNlICdjbi1iaWc1JzpcbiAgICBjYXNlICdjc2JpZzUnOlxuICAgIGNhc2UgJ3gteC1iaWc1JzpcbiAgICAgIHJldHVybiAnQmlnNSdcbiAgICBjYXNlICdjc2V1Y3BrZGZtdGphcGFuZXNlJzpcbiAgICBjYXNlICdldWMtanAnOlxuICAgIGNhc2UgJ3gtZXVjLWpwJzpcbiAgICAgIHJldHVybiAnRVVDLUpQJ1xuICAgIGNhc2UgJ2NzaXNvMjAyMmpwJzpcbiAgICBjYXNlICdpc28tMjAyMi1qcCc6XG4gICAgICByZXR1cm4gJ0lTTy0yMDIyLUpQJ1xuICAgIGNhc2UgJ2Nzc2hpZnRqaXMnOlxuICAgIGNhc2UgJ21zOTMyJzpcbiAgICBjYXNlICdtc19rYW5qaSc6XG4gICAgY2FzZSAnc2hpZnQtamlzJzpcbiAgICBjYXNlICdzaGlmdF9qaXMnOlxuICAgIGNhc2UgJ3NqaXMnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMzFqJzpcbiAgICBjYXNlICd4LXNqaXMnOlxuICAgICAgcmV0dXJuICdTaGlmdF9KSVMnXG4gICAgY2FzZSAnY3NldWNrcic6XG4gICAgY2FzZSAnY3Nrc2M1NjAxMTk4Nyc6XG4gICAgY2FzZSAnZXVjLWtyJzpcbiAgICBjYXNlICdpc28taXItMTQ5JzpcbiAgICBjYXNlICdrb3JlYW4nOlxuICAgIGNhc2UgJ2tzX2NfNTYwMS0xOTg3JzpcbiAgICBjYXNlICdrc19jXzU2MDEtMTk4OSc6XG4gICAgY2FzZSAna3NjNTYwMSc6XG4gICAgY2FzZSAna3NjXzU2MDEnOlxuICAgIGNhc2UgJ3dpbmRvd3MtOTQ5JzpcbiAgICAgIHJldHVybiAnRVVDLUtSJ1xuICAgIGNhc2UgJ2NzaXNvMjAyMmtyJzpcbiAgICBjYXNlICdoei1nYi0yMzEyJzpcbiAgICBjYXNlICdpc28tMjAyMi1jbic6XG4gICAgY2FzZSAnaXNvLTIwMjItY24tZXh0JzpcbiAgICBjYXNlICdpc28tMjAyMi1rcic6XG4gICAgY2FzZSAncmVwbGFjZW1lbnQnOlxuICAgICAgcmV0dXJuICdyZXBsYWNlbWVudCdcbiAgICBjYXNlICd1bmljb2RlZmZmZSc6XG4gICAgY2FzZSAndXRmLTE2YmUnOlxuICAgICAgcmV0dXJuICdVVEYtMTZCRSdcbiAgICBjYXNlICdjc3VuaWNvZGUnOlxuICAgIGNhc2UgJ2lzby0xMDY0Ni11Y3MtMic6XG4gICAgY2FzZSAndWNzLTInOlxuICAgIGNhc2UgJ3VuaWNvZGUnOlxuICAgIGNhc2UgJ3VuaWNvZGVmZWZmJzpcbiAgICBjYXNlICd1dGYtMTYnOlxuICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgIHJldHVybiAnVVRGLTE2TEUnXG4gICAgY2FzZSAneC11c2VyLWRlZmluZWQnOlxuICAgICAgcmV0dXJuICd4LXVzZXItZGVmaW5lZCdcbiAgICBkZWZhdWx0OiByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldEVuY29kaW5nXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIGtTdGF0ZSxcbiAga0Vycm9yLFxuICBrUmVzdWx0LFxuICBrQWJvcnRlZCxcbiAga0xhc3RQcm9ncmVzc0V2ZW50RmlyZWRcbn0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBQcm9ncmVzc0V2ZW50IH0gPSByZXF1aXJlKCcuL3Byb2dyZXNzZXZlbnQnKVxuY29uc3QgeyBnZXRFbmNvZGluZyB9ID0gcmVxdWlyZSgnLi9lbmNvZGluZycpXG5jb25zdCB7IERPTUV4Y2VwdGlvbiB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvY29uc3RhbnRzJylcbmNvbnN0IHsgc2VyaWFsaXplQU1pbWVUeXBlLCBwYXJzZU1JTUVUeXBlIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9kYXRhVVJMJylcbmNvbnN0IHsgdHlwZXMgfSA9IHJlcXVpcmUoJ3V0aWwnKVxuY29uc3QgeyBTdHJpbmdEZWNvZGVyIH0gPSByZXF1aXJlKCdzdHJpbmdfZGVjb2RlcicpXG5jb25zdCB7IGJ0b2EgfSA9IHJlcXVpcmUoJ2J1ZmZlcicpXG5cbi8qKiBAdHlwZSB7UHJvcGVydHlEZXNjcmlwdG9yfSAqL1xuY29uc3Qgc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyA9IHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgd3JpdGFibGU6IGZhbHNlLFxuICBjb25maWd1cmFibGU6IGZhbHNlXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jcmVhZE9wZXJhdGlvblxuICogQHBhcmFtIHtpbXBvcnQoJy4vZmlsZXJlYWRlcicpLkZpbGVSZWFkZXJ9IGZyXG4gKiBAcGFyYW0ge2ltcG9ydCgnYnVmZmVyJykuQmxvYn0gYmxvYlxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nP30gZW5jb2RpbmdOYW1lXG4gKi9cbmZ1bmN0aW9uIHJlYWRPcGVyYXRpb24gKGZyLCBibG9iLCB0eXBlLCBlbmNvZGluZ05hbWUpIHtcbiAgLy8gMS4gSWYgZnLigJlzIHN0YXRlIGlzIFwibG9hZGluZ1wiLCB0aHJvdyBhbiBJbnZhbGlkU3RhdGVFcnJvclxuICAvLyAgICBET01FeGNlcHRpb24uXG4gIGlmIChmcltrU3RhdGVdID09PSAnbG9hZGluZycpIHtcbiAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCdJbnZhbGlkIHN0YXRlJywgJ0ludmFsaWRTdGF0ZUVycm9yJylcbiAgfVxuXG4gIC8vIDIuIFNldCBmcuKAmXMgc3RhdGUgdG8gXCJsb2FkaW5nXCIuXG4gIGZyW2tTdGF0ZV0gPSAnbG9hZGluZydcblxuICAvLyAzLiBTZXQgZnLigJlzIHJlc3VsdCB0byBudWxsLlxuICBmcltrUmVzdWx0XSA9IG51bGxcblxuICAvLyA0LiBTZXQgZnLigJlzIGVycm9yIHRvIG51bGwuXG4gIGZyW2tFcnJvcl0gPSBudWxsXG5cbiAgLy8gNS4gTGV0IHN0cmVhbSBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgZ2V0IHN0cmVhbSBvbiBibG9iLlxuICAvKiogQHR5cGUge2ltcG9ydCgnc3RyZWFtL3dlYicpLlJlYWRhYmxlU3RyZWFtfSAqL1xuICBjb25zdCBzdHJlYW0gPSBibG9iLnN0cmVhbSgpXG5cbiAgLy8gNi4gTGV0IHJlYWRlciBiZSB0aGUgcmVzdWx0IG9mIGdldHRpbmcgYSByZWFkZXIgZnJvbSBzdHJlYW0uXG4gIGNvbnN0IHJlYWRlciA9IHN0cmVhbS5nZXRSZWFkZXIoKVxuXG4gIC8vIDcuIExldCBieXRlcyBiZSBhbiBlbXB0eSBieXRlIHNlcXVlbmNlLlxuICAvKiogQHR5cGUge1VpbnQ4QXJyYXlbXX0gKi9cbiAgY29uc3QgYnl0ZXMgPSBbXVxuXG4gIC8vIDguIExldCBjaHVua1Byb21pc2UgYmUgdGhlIHJlc3VsdCBvZiByZWFkaW5nIGEgY2h1bmsgZnJvbVxuICAvLyAgICBzdHJlYW0gd2l0aCByZWFkZXIuXG4gIGxldCBjaHVua1Byb21pc2UgPSByZWFkZXIucmVhZCgpXG5cbiAgLy8gOS4gTGV0IGlzRmlyc3RDaHVuayBiZSB0cnVlLlxuICBsZXQgaXNGaXJzdENodW5rID0gdHJ1ZVxuXG4gIC8vIDEwLiBJbiBwYXJhbGxlbCwgd2hpbGUgdHJ1ZTpcbiAgLy8gTm90ZTogXCJJbiBwYXJhbGxlbFwiIGp1c3QgbWVhbnMgbm9uLWJsb2NraW5nXG4gIC8vIE5vdGUgMjogcmVhZE9wZXJhdGlvbiBpdHNlbGYgY2Fubm90IGJlIGFzeW5jIGFzIGRvdWJsZVxuICAvLyByZWFkaW5nIHRoZSBib2R5IHdvdWxkIHRoZW4gcmVqZWN0IHRoZSBwcm9taXNlLCBpbnN0ZWFkXG4gIC8vIG9mIHRocm93aW5nIGFuIGVycm9yLlxuICA7KGFzeW5jICgpID0+IHtcbiAgICB3aGlsZSAoIWZyW2tBYm9ydGVkXSkge1xuICAgICAgLy8gMS4gV2FpdCBmb3IgY2h1bmtQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZCBvciByZWplY3RlZC5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IGNodW5rUHJvbWlzZVxuXG4gICAgICAgIC8vIDIuIElmIGNodW5rUHJvbWlzZSBpcyBmdWxmaWxsZWQsIGFuZCBpc0ZpcnN0Q2h1bmsgaXNcbiAgICAgICAgLy8gICAgdHJ1ZSwgcXVldWUgYSB0YXNrIHRvIGZpcmUgYSBwcm9ncmVzcyBldmVudCBjYWxsZWRcbiAgICAgICAgLy8gICAgbG9hZHN0YXJ0IGF0IGZyLlxuICAgICAgICBpZiAoaXNGaXJzdENodW5rICYmICFmcltrQWJvcnRlZF0pIHtcbiAgICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgICAgICBmaXJlQVByb2dyZXNzRXZlbnQoJ2xvYWRzdGFydCcsIGZyKVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgICAgICAvLyAzLiBTZXQgaXNGaXJzdENodW5rIHRvIGZhbHNlLlxuICAgICAgICBpc0ZpcnN0Q2h1bmsgPSBmYWxzZVxuXG4gICAgICAgIC8vIDQuIElmIGNodW5rUHJvbWlzZSBpcyBmdWxmaWxsZWQgd2l0aCBhbiBvYmplY3Qgd2hvc2VcbiAgICAgICAgLy8gICAgZG9uZSBwcm9wZXJ0eSBpcyBmYWxzZSBhbmQgd2hvc2UgdmFsdWUgcHJvcGVydHkgaXNcbiAgICAgICAgLy8gICAgYSBVaW50OEFycmF5IG9iamVjdCwgcnVuIHRoZXNlIHN0ZXBzOlxuICAgICAgICBpZiAoIWRvbmUgJiYgdHlwZXMuaXNVaW50OEFycmF5KHZhbHVlKSkge1xuICAgICAgICAgIC8vIDEuIExldCBicyBiZSB0aGUgYnl0ZSBzZXF1ZW5jZSByZXByZXNlbnRlZCBieSB0aGVcbiAgICAgICAgICAvLyAgICBVaW50OEFycmF5IG9iamVjdC5cblxuICAgICAgICAgIC8vIDIuIEFwcGVuZCBicyB0byBieXRlcy5cbiAgICAgICAgICBieXRlcy5wdXNoKHZhbHVlKVxuXG4gICAgICAgICAgLy8gMy4gSWYgcm91Z2hseSA1MG1zIGhhdmUgcGFzc2VkIHNpbmNlIHRoZXNlIHN0ZXBzXG4gICAgICAgICAgLy8gICAgd2VyZSBsYXN0IGludm9rZWQsIHF1ZXVlIGEgdGFzayB0byBmaXJlIGFcbiAgICAgICAgICAvLyAgICBwcm9ncmVzcyBldmVudCBjYWxsZWQgcHJvZ3Jlc3MgYXQgZnIuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgKFxuICAgICAgICAgICAgICBmcltrTGFzdFByb2dyZXNzRXZlbnRGaXJlZF0gPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICBEYXRlLm5vdygpIC0gZnJba0xhc3RQcm9ncmVzc0V2ZW50RmlyZWRdID49IDUwXG4gICAgICAgICAgICApICYmXG4gICAgICAgICAgICAhZnJba0Fib3J0ZWRdXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBmcltrTGFzdFByb2dyZXNzRXZlbnRGaXJlZF0gPSBEYXRlLm5vdygpXG4gICAgICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgICAgICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgncHJvZ3Jlc3MnLCBmcilcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gNC4gU2V0IGNodW5rUHJvbWlzZSB0byB0aGUgcmVzdWx0IG9mIHJlYWRpbmcgYVxuICAgICAgICAgIC8vICAgIGNodW5rIGZyb20gc3RyZWFtIHdpdGggcmVhZGVyLlxuICAgICAgICAgIGNodW5rUHJvbWlzZSA9IHJlYWRlci5yZWFkKClcbiAgICAgICAgfSBlbHNlIGlmIChkb25lKSB7XG4gICAgICAgICAgLy8gNS4gT3RoZXJ3aXNlLCBpZiBjaHVua1Byb21pc2UgaXMgZnVsZmlsbGVkIHdpdGggYW5cbiAgICAgICAgICAvLyAgICBvYmplY3Qgd2hvc2UgZG9uZSBwcm9wZXJ0eSBpcyB0cnVlLCBxdWV1ZSBhIHRhc2tcbiAgICAgICAgICAvLyAgICB0byBydW4gdGhlIGZvbGxvd2luZyBzdGVwcyBhbmQgYWJvcnQgdGhpcyBhbGdvcml0aG06XG4gICAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICAgICAgLy8gMS4gU2V0IGZy4oCZcyBzdGF0ZSB0byBcImRvbmVcIi5cbiAgICAgICAgICAgIGZyW2tTdGF0ZV0gPSAnZG9uZSdcblxuICAgICAgICAgICAgLy8gMi4gTGV0IHJlc3VsdCBiZSB0aGUgcmVzdWx0IG9mIHBhY2thZ2UgZGF0YSBnaXZlblxuICAgICAgICAgICAgLy8gICAgYnl0ZXMsIHR5cGUsIGJsb2LigJlzIHR5cGUsIGFuZCBlbmNvZGluZ05hbWUuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYWNrYWdlRGF0YShieXRlcywgdHlwZSwgYmxvYi50eXBlLCBlbmNvZGluZ05hbWUpXG5cbiAgICAgICAgICAgICAgLy8gNC4gRWxzZTpcblxuICAgICAgICAgICAgICBpZiAoZnJba0Fib3J0ZWRdKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAvLyAxLiBTZXQgZnLigJlzIHJlc3VsdCB0byByZXN1bHQuXG4gICAgICAgICAgICAgIGZyW2tSZXN1bHRdID0gcmVzdWx0XG5cbiAgICAgICAgICAgICAgLy8gMi4gRmlyZSBhIHByb2dyZXNzIGV2ZW50IGNhbGxlZCBsb2FkIGF0IHRoZSBmci5cbiAgICAgICAgICAgICAgZmlyZUFQcm9ncmVzc0V2ZW50KCdsb2FkJywgZnIpXG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAvLyAzLiBJZiBwYWNrYWdlIGRhdGEgdGhyZXcgYW4gZXhjZXB0aW9uIGVycm9yOlxuXG4gICAgICAgICAgICAgIC8vIDEuIFNldCBmcuKAmXMgZXJyb3IgdG8gZXJyb3IuXG4gICAgICAgICAgICAgIGZyW2tFcnJvcl0gPSBlcnJvclxuXG4gICAgICAgICAgICAgIC8vIDIuIEZpcmUgYSBwcm9ncmVzcyBldmVudCBjYWxsZWQgZXJyb3IgYXQgZnIuXG4gICAgICAgICAgICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgnZXJyb3InLCBmcilcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gNS4gSWYgZnLigJlzIHN0YXRlIGlzIG5vdCBcImxvYWRpbmdcIiwgZmlyZSBhIHByb2dyZXNzXG4gICAgICAgICAgICAvLyAgICBldmVudCBjYWxsZWQgbG9hZGVuZCBhdCB0aGUgZnIuXG4gICAgICAgICAgICBpZiAoZnJba1N0YXRlXSAhPT0gJ2xvYWRpbmcnKSB7XG4gICAgICAgICAgICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgnbG9hZGVuZCcsIGZyKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoZnJba0Fib3J0ZWRdKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICAvLyA2LiBPdGhlcndpc2UsIGlmIGNodW5rUHJvbWlzZSBpcyByZWplY3RlZCB3aXRoIGFuXG4gICAgICAgIC8vICAgIGVycm9yIGVycm9yLCBxdWV1ZSBhIHRhc2sgdG8gcnVuIHRoZSBmb2xsb3dpbmdcbiAgICAgICAgLy8gICAgc3RlcHMgYW5kIGFib3J0IHRoaXMgYWxnb3JpdGhtOlxuICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgICAgLy8gMS4gU2V0IGZy4oCZcyBzdGF0ZSB0byBcImRvbmVcIi5cbiAgICAgICAgICBmcltrU3RhdGVdID0gJ2RvbmUnXG5cbiAgICAgICAgICAvLyAyLiBTZXQgZnLigJlzIGVycm9yIHRvIGVycm9yLlxuICAgICAgICAgIGZyW2tFcnJvcl0gPSBlcnJvclxuXG4gICAgICAgICAgLy8gMy4gRmlyZSBhIHByb2dyZXNzIGV2ZW50IGNhbGxlZCBlcnJvciBhdCBmci5cbiAgICAgICAgICBmaXJlQVByb2dyZXNzRXZlbnQoJ2Vycm9yJywgZnIpXG5cbiAgICAgICAgICAvLyA0LiBJZiBmcuKAmXMgc3RhdGUgaXMgbm90IFwibG9hZGluZ1wiLCBmaXJlIGEgcHJvZ3Jlc3NcbiAgICAgICAgICAvLyAgICBldmVudCBjYWxsZWQgbG9hZGVuZCBhdCBmci5cbiAgICAgICAgICBpZiAoZnJba1N0YXRlXSAhPT0gJ2xvYWRpbmcnKSB7XG4gICAgICAgICAgICBmaXJlQVByb2dyZXNzRXZlbnQoJ2xvYWRlbmQnLCBmcilcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG5cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gIH0pKClcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNmaXJlLWEtcHJvZ3Jlc3MtZXZlbnRcbiAqIEBzZWUgaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWV2ZW50LWZpcmVcbiAqIEBwYXJhbSB7c3RyaW5nfSBlIFRoZSBuYW1lIG9mIHRoZSBldmVudFxuICogQHBhcmFtIHtpbXBvcnQoJy4vZmlsZXJlYWRlcicpLkZpbGVSZWFkZXJ9IHJlYWRlclxuICovXG5mdW5jdGlvbiBmaXJlQVByb2dyZXNzRXZlbnQgKGUsIHJlYWRlcikge1xuICAvLyBUaGUgcHJvZ3Jlc3MgZXZlbnQgZSBkb2VzIG5vdCBidWJibGUuIGUuYnViYmxlcyBtdXN0IGJlIGZhbHNlXG4gIC8vIFRoZSBwcm9ncmVzcyBldmVudCBlIGlzIE5PVCBjYW5jZWxhYmxlLiBlLmNhbmNlbGFibGUgbXVzdCBiZSBmYWxzZVxuICBjb25zdCBldmVudCA9IG5ldyBQcm9ncmVzc0V2ZW50KGUsIHtcbiAgICBidWJibGVzOiBmYWxzZSxcbiAgICBjYW5jZWxhYmxlOiBmYWxzZVxuICB9KVxuXG4gIHJlYWRlci5kaXNwYXRjaEV2ZW50KGV2ZW50KVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2Jsb2ItcGFja2FnZS1kYXRhXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXlbXX0gYnl0ZXNcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge3N0cmluZz99IG1pbWVUeXBlXG4gKiBAcGFyYW0ge3N0cmluZz99IGVuY29kaW5nTmFtZVxuICovXG5mdW5jdGlvbiBwYWNrYWdlRGF0YSAoYnl0ZXMsIHR5cGUsIG1pbWVUeXBlLCBlbmNvZGluZ05hbWUpIHtcbiAgLy8gMS4gQSBCbG9iIGhhcyBhbiBhc3NvY2lhdGVkIHBhY2thZ2UgZGF0YSBhbGdvcml0aG0sIGdpdmVuXG4gIC8vICAgIGJ5dGVzLCBhIHR5cGUsIGEgb3B0aW9uYWwgbWltZVR5cGUsIGFuZCBhIG9wdGlvbmFsXG4gIC8vICAgIGVuY29kaW5nTmFtZSwgd2hpY2ggc3dpdGNoZXMgb24gdHlwZSBhbmQgcnVucyB0aGVcbiAgLy8gICAgYXNzb2NpYXRlZCBzdGVwczpcblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdEYXRhVVJMJzoge1xuICAgICAgLy8gMS4gUmV0dXJuIGJ5dGVzIGFzIGEgRGF0YVVSTCBbUkZDMjM5N10gc3ViamVjdCB0b1xuICAgICAgLy8gICAgdGhlIGNvbnNpZGVyYXRpb25zIGJlbG93OlxuICAgICAgLy8gICogVXNlIG1pbWVUeXBlIGFzIHBhcnQgb2YgdGhlIERhdGEgVVJMIGlmIGl0IGlzXG4gICAgICAvLyAgICBhdmFpbGFibGUgaW4ga2VlcGluZyB3aXRoIHRoZSBEYXRhIFVSTFxuICAgICAgLy8gICAgc3BlY2lmaWNhdGlvbiBbUkZDMjM5N10uXG4gICAgICAvLyAgKiBJZiBtaW1lVHlwZSBpcyBub3QgYXZhaWxhYmxlIHJldHVybiBhIERhdGEgVVJMXG4gICAgICAvLyAgICB3aXRob3V0IGEgbWVkaWEtdHlwZS4gW1JGQzIzOTddLlxuXG4gICAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzIzOTcjc2VjdGlvbi0zXG4gICAgICAvLyBkYXRhdXJsICAgIDo9IFwiZGF0YTpcIiBbIG1lZGlhdHlwZSBdIFsgXCI7YmFzZTY0XCIgXSBcIixcIiBkYXRhXG4gICAgICAvLyBtZWRpYXR5cGUgIDo9IFsgdHlwZSBcIi9cIiBzdWJ0eXBlIF0gKiggXCI7XCIgcGFyYW1ldGVyIClcbiAgICAgIC8vIGRhdGEgICAgICAgOj0gKnVybGNoYXJcbiAgICAgIC8vIHBhcmFtZXRlciAgOj0gYXR0cmlidXRlIFwiPVwiIHZhbHVlXG4gICAgICBsZXQgZGF0YVVSTCA9ICdkYXRhOidcblxuICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VNSU1FVHlwZShtaW1lVHlwZSB8fCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJylcblxuICAgICAgaWYgKHBhcnNlZCAhPT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgIGRhdGFVUkwgKz0gc2VyaWFsaXplQU1pbWVUeXBlKHBhcnNlZClcbiAgICAgIH1cblxuICAgICAgZGF0YVVSTCArPSAnO2Jhc2U2NCwnXG5cbiAgICAgIGNvbnN0IGRlY29kZXIgPSBuZXcgU3RyaW5nRGVjb2RlcignbGF0aW4xJylcblxuICAgICAgZm9yIChjb25zdCBjaHVuayBvZiBieXRlcykge1xuICAgICAgICBkYXRhVVJMICs9IGJ0b2EoZGVjb2Rlci53cml0ZShjaHVuaykpXG4gICAgICB9XG5cbiAgICAgIGRhdGFVUkwgKz0gYnRvYShkZWNvZGVyLmVuZCgpKVxuXG4gICAgICByZXR1cm4gZGF0YVVSTFxuICAgIH1cbiAgICBjYXNlICdUZXh0Jzoge1xuICAgICAgLy8gMS4gTGV0IGVuY29kaW5nIGJlIGZhaWx1cmVcbiAgICAgIGxldCBlbmNvZGluZyA9ICdmYWlsdXJlJ1xuXG4gICAgICAvLyAyLiBJZiB0aGUgZW5jb2RpbmdOYW1lIGlzIHByZXNlbnQsIHNldCBlbmNvZGluZyB0byB0aGVcbiAgICAgIC8vICAgIHJlc3VsdCBvZiBnZXR0aW5nIGFuIGVuY29kaW5nIGZyb20gZW5jb2RpbmdOYW1lLlxuICAgICAgaWYgKGVuY29kaW5nTmFtZSkge1xuICAgICAgICBlbmNvZGluZyA9IGdldEVuY29kaW5nKGVuY29kaW5nTmFtZSlcbiAgICAgIH1cblxuICAgICAgLy8gMy4gSWYgZW5jb2RpbmcgaXMgZmFpbHVyZSwgYW5kIG1pbWVUeXBlIGlzIHByZXNlbnQ6XG4gICAgICBpZiAoZW5jb2RpbmcgPT09ICdmYWlsdXJlJyAmJiBtaW1lVHlwZSkge1xuICAgICAgICAvLyAxLiBMZXQgdHlwZSBiZSB0aGUgcmVzdWx0IG9mIHBhcnNlIGEgTUlNRSB0eXBlXG4gICAgICAgIC8vICAgIGdpdmVuIG1pbWVUeXBlLlxuICAgICAgICBjb25zdCB0eXBlID0gcGFyc2VNSU1FVHlwZShtaW1lVHlwZSlcblxuICAgICAgICAvLyAyLiBJZiB0eXBlIGlzIG5vdCBmYWlsdXJlLCBzZXQgZW5jb2RpbmcgdG8gdGhlIHJlc3VsdFxuICAgICAgICAvLyAgICBvZiBnZXR0aW5nIGFuIGVuY29kaW5nIGZyb20gdHlwZeKAmXMgcGFyYW1ldGVyc1tcImNoYXJzZXRcIl0uXG4gICAgICAgIGlmICh0eXBlICE9PSAnZmFpbHVyZScpIHtcbiAgICAgICAgICBlbmNvZGluZyA9IGdldEVuY29kaW5nKHR5cGUucGFyYW1ldGVycy5nZXQoJ2NoYXJzZXQnKSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyA0LiBJZiBlbmNvZGluZyBpcyBmYWlsdXJlLCB0aGVuIHNldCBlbmNvZGluZyB0byBVVEYtOC5cbiAgICAgIGlmIChlbmNvZGluZyA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgIGVuY29kaW5nID0gJ1VURi04J1xuICAgICAgfVxuXG4gICAgICAvLyA1LiBEZWNvZGUgYnl0ZXMgdXNpbmcgZmFsbGJhY2sgZW5jb2RpbmcgZW5jb2RpbmcsIGFuZFxuICAgICAgLy8gICAgcmV0dXJuIHRoZSByZXN1bHQuXG4gICAgICByZXR1cm4gZGVjb2RlKGJ5dGVzLCBlbmNvZGluZylcbiAgICB9XG4gICAgY2FzZSAnQXJyYXlCdWZmZXInOiB7XG4gICAgICAvLyBSZXR1cm4gYSBuZXcgQXJyYXlCdWZmZXIgd2hvc2UgY29udGVudHMgYXJlIGJ5dGVzLlxuICAgICAgY29uc3Qgc2VxdWVuY2UgPSBjb21iaW5lQnl0ZVNlcXVlbmNlcyhieXRlcylcblxuICAgICAgcmV0dXJuIHNlcXVlbmNlLmJ1ZmZlclxuICAgIH1cbiAgICBjYXNlICdCaW5hcnlTdHJpbmcnOiB7XG4gICAgICAvLyBSZXR1cm4gYnl0ZXMgYXMgYSBiaW5hcnkgc3RyaW5nLCBpbiB3aGljaCBldmVyeSBieXRlXG4gICAgICAvLyAgaXMgcmVwcmVzZW50ZWQgYnkgYSBjb2RlIHVuaXQgb2YgZXF1YWwgdmFsdWUgWzAuLjI1NV0uXG4gICAgICBsZXQgYmluYXJ5U3RyaW5nID0gJydcblxuICAgICAgY29uc3QgZGVjb2RlciA9IG5ldyBTdHJpbmdEZWNvZGVyKCdsYXRpbjEnKVxuXG4gICAgICBmb3IgKGNvbnN0IGNodW5rIG9mIGJ5dGVzKSB7XG4gICAgICAgIGJpbmFyeVN0cmluZyArPSBkZWNvZGVyLndyaXRlKGNodW5rKVxuICAgICAgfVxuXG4gICAgICBiaW5hcnlTdHJpbmcgKz0gZGVjb2Rlci5lbmQoKVxuXG4gICAgICByZXR1cm4gYmluYXJ5U3RyaW5nXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy8jZGVjb2RlXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXlbXX0gaW9RdWV1ZVxuICogQHBhcmFtIHtzdHJpbmd9IGVuY29kaW5nXG4gKi9cbmZ1bmN0aW9uIGRlY29kZSAoaW9RdWV1ZSwgZW5jb2RpbmcpIHtcbiAgY29uc3QgYnl0ZXMgPSBjb21iaW5lQnl0ZVNlcXVlbmNlcyhpb1F1ZXVlKVxuXG4gIC8vIDEuIExldCBCT01FbmNvZGluZyBiZSB0aGUgcmVzdWx0IG9mIEJPTSBzbmlmZmluZyBpb1F1ZXVlLlxuICBjb25zdCBCT01FbmNvZGluZyA9IEJPTVNuaWZmaW5nKGJ5dGVzKVxuXG4gIGxldCBzbGljZSA9IDBcblxuICAvLyAyLiBJZiBCT01FbmNvZGluZyBpcyBub24tbnVsbDpcbiAgaWYgKEJPTUVuY29kaW5nICE9PSBudWxsKSB7XG4gICAgLy8gMS4gU2V0IGVuY29kaW5nIHRvIEJPTUVuY29kaW5nLlxuICAgIGVuY29kaW5nID0gQk9NRW5jb2RpbmdcblxuICAgIC8vIDIuIFJlYWQgdGhyZWUgYnl0ZXMgZnJvbSBpb1F1ZXVlLCBpZiBCT01FbmNvZGluZyBpc1xuICAgIC8vICAgIFVURi04OyBvdGhlcndpc2UgcmVhZCB0d28gYnl0ZXMuXG4gICAgLy8gICAgKERvIG5vdGhpbmcgd2l0aCB0aG9zZSBieXRlcy4pXG4gICAgc2xpY2UgPSBCT01FbmNvZGluZyA9PT0gJ1VURi04JyA/IDMgOiAyXG4gIH1cblxuICAvLyAzLiBQcm9jZXNzIGEgcXVldWUgd2l0aCBhbiBpbnN0YW5jZSBvZiBlbmNvZGluZ+KAmXNcbiAgLy8gICAgZGVjb2RlciwgaW9RdWV1ZSwgb3V0cHV0LCBhbmQgXCJyZXBsYWNlbWVudFwiLlxuXG4gIC8vIDQuIFJldHVybiBvdXRwdXQuXG5cbiAgY29uc3Qgc2xpY2VkID0gYnl0ZXMuc2xpY2Uoc2xpY2UpXG4gIHJldHVybiBuZXcgVGV4dERlY29kZXIoZW5jb2RpbmcpLmRlY29kZShzbGljZWQpXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy8jYm9tLXNuaWZmXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGlvUXVldWVcbiAqL1xuZnVuY3Rpb24gQk9NU25pZmZpbmcgKGlvUXVldWUpIHtcbiAgLy8gMS4gTGV0IEJPTSBiZSB0aGUgcmVzdWx0IG9mIHBlZWtpbmcgMyBieXRlcyBmcm9tIGlvUXVldWUsXG4gIC8vICAgIGNvbnZlcnRlZCB0byBhIGJ5dGUgc2VxdWVuY2UuXG4gIGNvbnN0IFthLCBiLCBjXSA9IGlvUXVldWVcblxuICAvLyAyLiBGb3IgZWFjaCBvZiB0aGUgcm93cyBpbiB0aGUgdGFibGUgYmVsb3csIHN0YXJ0aW5nIHdpdGhcbiAgLy8gICAgdGhlIGZpcnN0IG9uZSBhbmQgZ29pbmcgZG93biwgaWYgQk9NIHN0YXJ0cyB3aXRoIHRoZVxuICAvLyAgICBieXRlcyBnaXZlbiBpbiB0aGUgZmlyc3QgY29sdW1uLCB0aGVuIHJldHVybiB0aGVcbiAgLy8gICAgZW5jb2RpbmcgZ2l2ZW4gaW4gdGhlIGNlbGwgaW4gdGhlIHNlY29uZCBjb2x1bW4gb2YgdGhhdFxuICAvLyAgICByb3cuIE90aGVyd2lzZSwgcmV0dXJuIG51bGwuXG4gIGlmIChhID09PSAweEVGICYmIGIgPT09IDB4QkIgJiYgYyA9PT0gMHhCRikge1xuICAgIHJldHVybiAnVVRGLTgnXG4gIH0gZWxzZSBpZiAoYSA9PT0gMHhGRSAmJiBiID09PSAweEZGKSB7XG4gICAgcmV0dXJuICdVVEYtMTZCRSdcbiAgfSBlbHNlIGlmIChhID09PSAweEZGICYmIGIgPT09IDB4RkUpIHtcbiAgICByZXR1cm4gJ1VURi0xNkxFJ1xuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXlbXX0gc2VxdWVuY2VzXG4gKi9cbmZ1bmN0aW9uIGNvbWJpbmVCeXRlU2VxdWVuY2VzIChzZXF1ZW5jZXMpIHtcbiAgY29uc3Qgc2l6ZSA9IHNlcXVlbmNlcy5yZWR1Y2UoKGEsIGIpID0+IHtcbiAgICByZXR1cm4gYSArIGIuYnl0ZUxlbmd0aFxuICB9LCAwKVxuXG4gIGxldCBvZmZzZXQgPSAwXG5cbiAgcmV0dXJuIHNlcXVlbmNlcy5yZWR1Y2UoKGEsIGIpID0+IHtcbiAgICBhLnNldChiLCBvZmZzZXQpXG4gICAgb2Zmc2V0ICs9IGIuYnl0ZUxlbmd0aFxuICAgIHJldHVybiBhXG4gIH0sIG5ldyBVaW50OEFycmF5KHNpemUpKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgcmVhZE9wZXJhdGlvbixcbiAgZmlyZUFQcm9ncmVzc0V2ZW50XG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIHJlYWRPcGVyYXRpb24sXG4gIGZpcmVBUHJvZ3Jlc3NFdmVudFxufSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7XG4gIGtTdGF0ZSxcbiAga0Vycm9yLFxuICBrUmVzdWx0LFxuICBrRXZlbnRzLFxuICBrQWJvcnRlZFxufSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvd2ViaWRsJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcblxuY2xhc3MgRmlsZVJlYWRlciBleHRlbmRzIEV2ZW50VGFyZ2V0IHtcbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXNba1N0YXRlXSA9ICdlbXB0eSdcbiAgICB0aGlzW2tSZXN1bHRdID0gbnVsbFxuICAgIHRoaXNba0Vycm9yXSA9IG51bGxcbiAgICB0aGlzW2tFdmVudHNdID0ge1xuICAgICAgbG9hZGVuZDogbnVsbCxcbiAgICAgIGVycm9yOiBudWxsLFxuICAgICAgYWJvcnQ6IG51bGwsXG4gICAgICBsb2FkOiBudWxsLFxuICAgICAgcHJvZ3Jlc3M6IG51bGwsXG4gICAgICBsb2Fkc3RhcnQ6IG51bGxcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZGZuLXJlYWRBc0FycmF5QnVmZmVyXG4gICAqIEBwYXJhbSB7aW1wb3J0KCdidWZmZXInKS5CbG9ifSBibG9iXG4gICAqL1xuICByZWFkQXNBcnJheUJ1ZmZlciAoYmxvYikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRmlsZVJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcicgfSlcblxuICAgIGJsb2IgPSB3ZWJpZGwuY29udmVydGVycy5CbG9iKGJsb2IsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gICAgLy8gVGhlIHJlYWRBc0FycmF5QnVmZmVyKGJsb2IpIG1ldGhvZCwgd2hlbiBpbnZva2VkLFxuICAgIC8vIG11c3QgaW5pdGlhdGUgYSByZWFkIG9wZXJhdGlvbiBmb3IgYmxvYiB3aXRoIEFycmF5QnVmZmVyLlxuICAgIHJlYWRPcGVyYXRpb24odGhpcywgYmxvYiwgJ0FycmF5QnVmZmVyJylcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNyZWFkQXNCaW5hcnlTdHJpbmdcbiAgICogQHBhcmFtIHtpbXBvcnQoJ2J1ZmZlcicpLkJsb2J9IGJsb2JcbiAgICovXG4gIHJlYWRBc0JpbmFyeVN0cmluZyAoYmxvYikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRmlsZVJlYWRlci5yZWFkQXNCaW5hcnlTdHJpbmcnIH0pXG5cbiAgICBibG9iID0gd2ViaWRsLmNvbnZlcnRlcnMuQmxvYihibG9iLCB7IHN0cmljdDogZmFsc2UgfSlcblxuICAgIC8vIFRoZSByZWFkQXNCaW5hcnlTdHJpbmcoYmxvYikgbWV0aG9kLCB3aGVuIGludm9rZWQsXG4gICAgLy8gbXVzdCBpbml0aWF0ZSBhIHJlYWQgb3BlcmF0aW9uIGZvciBibG9iIHdpdGggQmluYXJ5U3RyaW5nLlxuICAgIHJlYWRPcGVyYXRpb24odGhpcywgYmxvYiwgJ0JpbmFyeVN0cmluZycpXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jcmVhZEFzRGF0YVRleHRcbiAgICogQHBhcmFtIHtpbXBvcnQoJ2J1ZmZlcicpLkJsb2J9IGJsb2JcbiAgICogQHBhcmFtIHtzdHJpbmc/fSBlbmNvZGluZ1xuICAgKi9cbiAgcmVhZEFzVGV4dCAoYmxvYiwgZW5jb2RpbmcgPSB1bmRlZmluZWQpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0ZpbGVSZWFkZXIucmVhZEFzVGV4dCcgfSlcblxuICAgIGJsb2IgPSB3ZWJpZGwuY29udmVydGVycy5CbG9iKGJsb2IsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gICAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGVuY29kaW5nID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKGVuY29kaW5nKVxuICAgIH1cblxuICAgIC8vIFRoZSByZWFkQXNUZXh0KGJsb2IsIGVuY29kaW5nKSBtZXRob2QsIHdoZW4gaW52b2tlZCxcbiAgICAvLyBtdXN0IGluaXRpYXRlIGEgcmVhZCBvcGVyYXRpb24gZm9yIGJsb2Igd2l0aCBUZXh0IGFuZCBlbmNvZGluZy5cbiAgICByZWFkT3BlcmF0aW9uKHRoaXMsIGJsb2IsICdUZXh0JywgZW5jb2RpbmcpXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZGZuLXJlYWRBc0RhdGFVUkxcbiAgICogQHBhcmFtIHtpbXBvcnQoJ2J1ZmZlcicpLkJsb2J9IGJsb2JcbiAgICovXG4gIHJlYWRBc0RhdGFVUkwgKGJsb2IpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0ZpbGVSZWFkZXIucmVhZEFzRGF0YVVSTCcgfSlcblxuICAgIGJsb2IgPSB3ZWJpZGwuY29udmVydGVycy5CbG9iKGJsb2IsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gICAgLy8gVGhlIHJlYWRBc0RhdGFVUkwoYmxvYikgbWV0aG9kLCB3aGVuIGludm9rZWQsIG11c3RcbiAgICAvLyBpbml0aWF0ZSBhIHJlYWQgb3BlcmF0aW9uIGZvciBibG9iIHdpdGggRGF0YVVSTC5cbiAgICByZWFkT3BlcmF0aW9uKHRoaXMsIGJsb2IsICdEYXRhVVJMJylcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNkZm4tYWJvcnRcbiAgICovXG4gIGFib3J0ICgpIHtcbiAgICAvLyAxLiBJZiB0aGlzJ3Mgc3RhdGUgaXMgXCJlbXB0eVwiIG9yIGlmIHRoaXMncyBzdGF0ZSBpc1xuICAgIC8vICAgIFwiZG9uZVwiIHNldCB0aGlzJ3MgcmVzdWx0IHRvIG51bGwgYW5kIHRlcm1pbmF0ZVxuICAgIC8vICAgIHRoaXMgYWxnb3JpdGhtLlxuICAgIGlmICh0aGlzW2tTdGF0ZV0gPT09ICdlbXB0eScgfHwgdGhpc1trU3RhdGVdID09PSAnZG9uZScpIHtcbiAgICAgIHRoaXNba1Jlc3VsdF0gPSBudWxsXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyAyLiBJZiB0aGlzJ3Mgc3RhdGUgaXMgXCJsb2FkaW5nXCIgc2V0IHRoaXMncyBzdGF0ZSB0b1xuICAgIC8vICAgIFwiZG9uZVwiIGFuZCBzZXQgdGhpcydzIHJlc3VsdCB0byBudWxsLlxuICAgIGlmICh0aGlzW2tTdGF0ZV0gPT09ICdsb2FkaW5nJykge1xuICAgICAgdGhpc1trU3RhdGVdID0gJ2RvbmUnXG4gICAgICB0aGlzW2tSZXN1bHRdID0gbnVsbFxuICAgIH1cblxuICAgIC8vIDMuIElmIHRoZXJlIGFyZSBhbnkgdGFza3MgZnJvbSB0aGlzIG9uIHRoZSBmaWxlIHJlYWRpbmdcbiAgICAvLyAgICB0YXNrIHNvdXJjZSBpbiBhbiBhZmZpbGlhdGVkIHRhc2sgcXVldWUsIHRoZW4gcmVtb3ZlXG4gICAgLy8gICAgdGhvc2UgdGFza3MgZnJvbSB0aGF0IHRhc2sgcXVldWUuXG4gICAgdGhpc1trQWJvcnRlZF0gPSB0cnVlXG5cbiAgICAvLyA0LiBUZXJtaW5hdGUgdGhlIGFsZ29yaXRobSBmb3IgdGhlIHJlYWQgbWV0aG9kIGJlaW5nIHByb2Nlc3NlZC5cbiAgICAvLyBUT0RPXG5cbiAgICAvLyA1LiBGaXJlIGEgcHJvZ3Jlc3MgZXZlbnQgY2FsbGVkIGFib3J0IGF0IHRoaXMuXG4gICAgZmlyZUFQcm9ncmVzc0V2ZW50KCdhYm9ydCcsIHRoaXMpXG5cbiAgICAvLyA2LiBJZiB0aGlzJ3Mgc3RhdGUgaXMgbm90IFwibG9hZGluZ1wiLCBmaXJlIGEgcHJvZ3Jlc3NcbiAgICAvLyAgICBldmVudCBjYWxsZWQgbG9hZGVuZCBhdCB0aGlzLlxuICAgIGlmICh0aGlzW2tTdGF0ZV0gIT09ICdsb2FkaW5nJykge1xuICAgICAgZmlyZUFQcm9ncmVzc0V2ZW50KCdsb2FkZW5kJywgdGhpcylcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZG9tLWZpbGVyZWFkZXItcmVhZHlzdGF0ZVxuICAgKi9cbiAgZ2V0IHJlYWR5U3RhdGUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICBzd2l0Y2ggKHRoaXNba1N0YXRlXSkge1xuICAgICAgY2FzZSAnZW1wdHknOiByZXR1cm4gdGhpcy5FTVBUWVxuICAgICAgY2FzZSAnbG9hZGluZyc6IHJldHVybiB0aGlzLkxPQURJTkdcbiAgICAgIGNhc2UgJ2RvbmUnOiByZXR1cm4gdGhpcy5ET05FXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2RvbS1maWxlcmVhZGVyLXJlc3VsdFxuICAgKi9cbiAgZ2V0IHJlc3VsdCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIC8vIFRoZSByZXN1bHQgYXR0cmlidXRl4oCZcyBnZXR0ZXIsIHdoZW4gaW52b2tlZCwgbXVzdCByZXR1cm5cbiAgICAvLyB0aGlzJ3MgcmVzdWx0LlxuICAgIHJldHVybiB0aGlzW2tSZXN1bHRdXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZG9tLWZpbGVyZWFkZXItZXJyb3JcbiAgICovXG4gIGdldCBlcnJvciAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIC8vIFRoZSBlcnJvciBhdHRyaWJ1dGXigJlzIGdldHRlciwgd2hlbiBpbnZva2VkLCBtdXN0IHJldHVyblxuICAgIC8vIHRoaXMncyBlcnJvci5cbiAgICByZXR1cm4gdGhpc1trRXJyb3JdXG4gIH1cblxuICBnZXQgb25sb2FkZW5kICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgcmV0dXJuIHRoaXNba0V2ZW50c10ubG9hZGVuZFxuICB9XG5cbiAgc2V0IG9ubG9hZGVuZCAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgaWYgKHRoaXNba0V2ZW50c10ubG9hZGVuZCkge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkZW5kJywgdGhpc1trRXZlbnRzXS5sb2FkZW5kKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXNba0V2ZW50c10ubG9hZGVuZCA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlbmQnLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trRXZlbnRzXS5sb2FkZW5kID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBvbmVycm9yICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgcmV0dXJuIHRoaXNba0V2ZW50c10uZXJyb3JcbiAgfVxuXG4gIHNldCBvbmVycm9yIChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICBpZiAodGhpc1trRXZlbnRzXS5lcnJvcikge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXNba0V2ZW50c10uZXJyb3IpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpc1trRXZlbnRzXS5lcnJvciA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgZm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNba0V2ZW50c10uZXJyb3IgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgZ2V0IG9ubG9hZHN0YXJ0ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgcmV0dXJuIHRoaXNba0V2ZW50c10ubG9hZHN0YXJ0XG4gIH1cblxuICBzZXQgb25sb2Fkc3RhcnQgKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIGlmICh0aGlzW2tFdmVudHNdLmxvYWRzdGFydCkge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2Fkc3RhcnQnLCB0aGlzW2tFdmVudHNdLmxvYWRzdGFydClcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmxvYWRzdGFydCA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRzdGFydCcsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmxvYWRzdGFydCA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgb25wcm9ncmVzcyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIHJldHVybiB0aGlzW2tFdmVudHNdLnByb2dyZXNzXG4gIH1cblxuICBzZXQgb25wcm9ncmVzcyAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgaWYgKHRoaXNba0V2ZW50c10ucHJvZ3Jlc3MpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzW2tFdmVudHNdLnByb2dyZXNzKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXNba0V2ZW50c10ucHJvZ3Jlc3MgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tFdmVudHNdLnByb2dyZXNzID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBvbmxvYWQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICByZXR1cm4gdGhpc1trRXZlbnRzXS5sb2FkXG4gIH1cblxuICBzZXQgb25sb2FkIChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICBpZiAodGhpc1trRXZlbnRzXS5sb2FkKSB7XG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzW2tFdmVudHNdLmxvYWQpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpc1trRXZlbnRzXS5sb2FkID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmxvYWQgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgZ2V0IG9uYWJvcnQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICByZXR1cm4gdGhpc1trRXZlbnRzXS5hYm9ydFxuICB9XG5cbiAgc2V0IG9uYWJvcnQgKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIGlmICh0aGlzW2tFdmVudHNdLmFib3J0KSB7XG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgdGhpc1trRXZlbnRzXS5hYm9ydClcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmFib3J0ID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trRXZlbnRzXS5hYm9ydCA9IG51bGxcbiAgICB9XG4gIH1cbn1cblxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2RvbS1maWxlcmVhZGVyLWVtcHR5XG5GaWxlUmVhZGVyLkVNUFRZID0gRmlsZVJlYWRlci5wcm90b3R5cGUuRU1QVFkgPSAwXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZG9tLWZpbGVyZWFkZXItbG9hZGluZ1xuRmlsZVJlYWRlci5MT0FESU5HID0gRmlsZVJlYWRlci5wcm90b3R5cGUuTE9BRElORyA9IDFcbi8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNkb20tZmlsZXJlYWRlci1kb25lXG5GaWxlUmVhZGVyLkRPTkUgPSBGaWxlUmVhZGVyLnByb3RvdHlwZS5ET05FID0gMlxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhGaWxlUmVhZGVyLnByb3RvdHlwZSwge1xuICBFTVBUWTogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgTE9BRElORzogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgRE9ORTogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgcmVhZEFzQXJyYXlCdWZmZXI6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlYWRBc0JpbmFyeVN0cmluZzoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcmVhZEFzVGV4dDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcmVhZEFzRGF0YVVSTDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYWJvcnQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlYWR5U3RhdGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlc3VsdDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZXJyb3I6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9ubG9hZHN0YXJ0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbnByb2dyZXNzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbmxvYWQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9uYWJvcnQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9uZXJyb3I6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9ubG9hZGVuZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0ZpbGVSZWFkZXInLFxuICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfVxufSlcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRmlsZVJlYWRlciwge1xuICBFTVBUWTogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgTE9BRElORzogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgRE9ORTogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9yc1xufSlcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEZpbGVSZWFkZXJcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBrQ29uc3RydWN0OiByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKS5rQ29uc3RydWN0XG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBVUkxTZXJpYWxpemVyIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9kYXRhVVJMJylcbmNvbnN0IHsgaXNWYWxpZEhlYWRlck5hbWUgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3V0aWwnKVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LXVybC1lcXVhbHNcbiAqIEBwYXJhbSB7VVJMfSBBXG4gKiBAcGFyYW0ge1VSTH0gQlxuICogQHBhcmFtIHtib29sZWFuIHwgdW5kZWZpbmVkfSBleGNsdWRlRnJhZ21lbnRcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiB1cmxFcXVhbHMgKEEsIEIsIGV4Y2x1ZGVGcmFnbWVudCA9IGZhbHNlKSB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRBID0gVVJMU2VyaWFsaXplcihBLCBleGNsdWRlRnJhZ21lbnQpXG5cbiAgY29uc3Qgc2VyaWFsaXplZEIgPSBVUkxTZXJpYWxpemVyKEIsIGV4Y2x1ZGVGcmFnbWVudClcblxuICByZXR1cm4gc2VyaWFsaXplZEEgPT09IHNlcmlhbGl6ZWRCXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vY2hyb21pdW0vY2hyb21pdW0vYmxvYi82OTRkMjBkMTM0Y2I1NTNkOGQ4OWU1NTAwYjkxNDgwMTJiMWJhMjk5L2NvbnRlbnQvYnJvd3Nlci9jYWNoZV9zdG9yYWdlL2NhY2hlX3N0b3JhZ2VfY2FjaGUuY2MjTDI2MC1MMjYyXG4gKiBAcGFyYW0ge3N0cmluZ30gaGVhZGVyXG4gKi9cbmZ1bmN0aW9uIGZpZWxkVmFsdWVzIChoZWFkZXIpIHtcbiAgYXNzZXJ0KGhlYWRlciAhPT0gbnVsbClcblxuICBjb25zdCB2YWx1ZXMgPSBbXVxuXG4gIGZvciAobGV0IHZhbHVlIG9mIGhlYWRlci5zcGxpdCgnLCcpKSB7XG4gICAgdmFsdWUgPSB2YWx1ZS50cmltKClcblxuICAgIGlmICghdmFsdWUubGVuZ3RoKSB7XG4gICAgICBjb250aW51ZVxuICAgIH0gZWxzZSBpZiAoIWlzVmFsaWRIZWFkZXJOYW1lKHZhbHVlKSkge1xuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICB2YWx1ZXMucHVzaCh2YWx1ZSlcbiAgfVxuXG4gIHJldHVybiB2YWx1ZXNcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHVybEVxdWFscyxcbiAgZmllbGRWYWx1ZXNcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsga0NvbnN0cnVjdCB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgdXJsRXF1YWxzLCBmaWVsZFZhbHVlczogZ2V0RmllbGRWYWx1ZXMgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IGtFbnVtZXJhYmxlUHJvcGVydHksIGlzRGlzdHVyYmVkIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBrSGVhZGVyc0xpc3QgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvd2ViaWRsJylcbmNvbnN0IHsgUmVzcG9uc2UsIGNsb25lUmVzcG9uc2UgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3Jlc3BvbnNlJylcbmNvbnN0IHsgUmVxdWVzdCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvcmVxdWVzdCcpXG5jb25zdCB7IGtTdGF0ZSwga0hlYWRlcnMsIGtHdWFyZCwga1JlYWxtIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9zeW1ib2xzJylcbmNvbnN0IHsgZmV0Y2hpbmcgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2luZGV4JylcbmNvbnN0IHsgdXJsSXNIdHRwSHR0cHNTY2hlbWUsIGNyZWF0ZURlZmVycmVkUHJvbWlzZSwgcmVhZEFsbEJ5dGVzIH0gPSByZXF1aXJlKCcuLi9mZXRjaC91dGlsJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7IGdldEdsb2JhbERpc3BhdGNoZXIgfSA9IHJlcXVpcmUoJy4uL2dsb2JhbCcpXG5cbi8qKlxuICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jZGZuLWNhY2hlLWJhdGNoLW9wZXJhdGlvblxuICogQHR5cGVkZWYge09iamVjdH0gQ2FjaGVCYXRjaE9wZXJhdGlvblxuICogQHByb3BlcnR5IHsnZGVsZXRlJyB8ICdwdXQnfSB0eXBlXG4gKiBAcHJvcGVydHkge2FueX0gcmVxdWVzdFxuICogQHByb3BlcnR5IHthbnl9IHJlc3BvbnNlXG4gKiBAcHJvcGVydHkge2ltcG9ydCgnLi4vLi4vdHlwZXMvY2FjaGUnKS5DYWNoZVF1ZXJ5T3B0aW9uc30gb3B0aW9uc1xuICovXG5cbi8qKlxuICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jZGZuLXJlcXVlc3QtcmVzcG9uc2UtbGlzdFxuICogQHR5cGVkZWYge1thbnksIGFueV1bXX0gcmVxdWVzdFJlc3BvbnNlTGlzdFxuICovXG5cbmNsYXNzIENhY2hlIHtcbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2Rmbi1yZWxldmFudC1yZXF1ZXN0LXJlc3BvbnNlLWxpc3RcbiAgICogQHR5cGUge3JlcXVlc3RSZXNwb25zZUxpc3R9XG4gICAqL1xuICAjcmVsZXZhbnRSZXF1ZXN0UmVzcG9uc2VMaXN0XG5cbiAgY29uc3RydWN0b3IgKCkge1xuICAgIGlmIChhcmd1bWVudHNbMF0gIT09IGtDb25zdHJ1Y3QpIHtcbiAgICAgIHdlYmlkbC5pbGxlZ2FsQ29uc3RydWN0b3IoKVxuICAgIH1cblxuICAgIHRoaXMuI3JlbGV2YW50UmVxdWVzdFJlc3BvbnNlTGlzdCA9IGFyZ3VtZW50c1sxXVxuICB9XG5cbiAgYXN5bmMgbWF0Y2ggKHJlcXVlc3QsIG9wdGlvbnMgPSB7fSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlKVxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdDYWNoZS5tYXRjaCcgfSlcblxuICAgIHJlcXVlc3QgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mbyhyZXF1ZXN0KVxuICAgIG9wdGlvbnMgPSB3ZWJpZGwuY29udmVydGVycy5DYWNoZVF1ZXJ5T3B0aW9ucyhvcHRpb25zKVxuXG4gICAgY29uc3QgcCA9IGF3YWl0IHRoaXMubWF0Y2hBbGwocmVxdWVzdCwgb3B0aW9ucylcblxuICAgIGlmIChwLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgcmV0dXJuIHBbMF1cbiAgfVxuXG4gIGFzeW5jIG1hdGNoQWxsIChyZXF1ZXN0ID0gdW5kZWZpbmVkLCBvcHRpb25zID0ge30pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZSlcblxuICAgIGlmIChyZXF1ZXN0ICE9PSB1bmRlZmluZWQpIHJlcXVlc3QgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mbyhyZXF1ZXN0KVxuICAgIG9wdGlvbnMgPSB3ZWJpZGwuY29udmVydGVycy5DYWNoZVF1ZXJ5T3B0aW9ucyhvcHRpb25zKVxuXG4gICAgLy8gMS5cbiAgICBsZXQgciA9IG51bGxcblxuICAgIC8vIDIuXG4gICAgaWYgKHJlcXVlc3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHJlcXVlc3QgaW5zdGFuY2VvZiBSZXF1ZXN0KSB7XG4gICAgICAgIC8vIDIuMS4xXG4gICAgICAgIHIgPSByZXF1ZXN0W2tTdGF0ZV1cblxuICAgICAgICAvLyAyLjEuMlxuICAgICAgICBpZiAoci5tZXRob2QgIT09ICdHRVQnICYmICFvcHRpb25zLmlnbm9yZU1ldGhvZCkge1xuICAgICAgICAgIHJldHVybiBbXVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiByZXF1ZXN0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAvLyAyLjIuMVxuICAgICAgICByID0gbmV3IFJlcXVlc3QocmVxdWVzdClba1N0YXRlXVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDUuXG4gICAgLy8gNS4xXG4gICAgY29uc3QgcmVzcG9uc2VzID0gW11cblxuICAgIC8vIDUuMlxuICAgIGlmIChyZXF1ZXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIDUuMi4xXG4gICAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiB0aGlzLiNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3QpIHtcbiAgICAgICAgcmVzcG9uc2VzLnB1c2gocmVxdWVzdFJlc3BvbnNlWzFdKVxuICAgICAgfVxuICAgIH0gZWxzZSB7IC8vIDUuM1xuICAgICAgLy8gNS4zLjFcbiAgICAgIGNvbnN0IHJlcXVlc3RSZXNwb25zZXMgPSB0aGlzLiNxdWVyeUNhY2hlKHIsIG9wdGlvbnMpXG5cbiAgICAgIC8vIDUuMy4yXG4gICAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiByZXF1ZXN0UmVzcG9uc2VzKSB7XG4gICAgICAgIHJlc3BvbnNlcy5wdXNoKHJlcXVlc3RSZXNwb25zZVsxXSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA1LjRcbiAgICAvLyBXZSBkb24ndCBpbXBsZW1lbnQgQ09ScyBzbyB3ZSBkb24ndCBuZWVkIHRvIGxvb3Agb3ZlciB0aGUgcmVzcG9uc2VzLCB5YXkhXG5cbiAgICAvLyA1LjUuMVxuICAgIGNvbnN0IHJlc3BvbnNlTGlzdCA9IFtdXG5cbiAgICAvLyA1LjUuMlxuICAgIGZvciAoY29uc3QgcmVzcG9uc2Ugb2YgcmVzcG9uc2VzKSB7XG4gICAgICAvLyA1LjUuMi4xXG4gICAgICBjb25zdCByZXNwb25zZU9iamVjdCA9IG5ldyBSZXNwb25zZShyZXNwb25zZS5ib2R5Py5zb3VyY2UgPz8gbnVsbClcbiAgICAgIGNvbnN0IGJvZHkgPSByZXNwb25zZU9iamVjdFtrU3RhdGVdLmJvZHlcbiAgICAgIHJlc3BvbnNlT2JqZWN0W2tTdGF0ZV0gPSByZXNwb25zZVxuICAgICAgcmVzcG9uc2VPYmplY3Rba1N0YXRlXS5ib2R5ID0gYm9keVxuICAgICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tIZWFkZXJzTGlzdF0gPSByZXNwb25zZS5oZWFkZXJzTGlzdFxuICAgICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tHdWFyZF0gPSAnaW1tdXRhYmxlJ1xuXG4gICAgICByZXNwb25zZUxpc3QucHVzaChyZXNwb25zZU9iamVjdClcbiAgICB9XG5cbiAgICAvLyA2LlxuICAgIHJldHVybiBPYmplY3QuZnJlZXplKHJlc3BvbnNlTGlzdClcbiAgfVxuXG4gIGFzeW5jIGFkZCAocmVxdWVzdCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlKVxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdDYWNoZS5hZGQnIH0pXG5cbiAgICByZXF1ZXN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluZm8ocmVxdWVzdClcblxuICAgIC8vIDEuXG4gICAgY29uc3QgcmVxdWVzdHMgPSBbcmVxdWVzdF1cblxuICAgIC8vIDIuXG4gICAgY29uc3QgcmVzcG9uc2VBcnJheVByb21pc2UgPSB0aGlzLmFkZEFsbChyZXF1ZXN0cylcblxuICAgIC8vIDMuXG4gICAgcmV0dXJuIGF3YWl0IHJlc3BvbnNlQXJyYXlQcm9taXNlXG4gIH1cblxuICBhc3luYyBhZGRBbGwgKHJlcXVlc3RzKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGUpXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0NhY2hlLmFkZEFsbCcgfSlcblxuICAgIHJlcXVlc3RzID0gd2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPFJlcXVlc3RJbmZvPiddKHJlcXVlc3RzKVxuXG4gICAgLy8gMS5cbiAgICBjb25zdCByZXNwb25zZVByb21pc2VzID0gW11cblxuICAgIC8vIDIuXG4gICAgY29uc3QgcmVxdWVzdExpc3QgPSBbXVxuXG4gICAgLy8gMy5cbiAgICBmb3IgKGNvbnN0IHJlcXVlc3Qgb2YgcmVxdWVzdHMpIHtcbiAgICAgIGlmICh0eXBlb2YgcmVxdWVzdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gMy4xXG4gICAgICBjb25zdCByID0gcmVxdWVzdFtrU3RhdGVdXG5cbiAgICAgIC8vIDMuMlxuICAgICAgaWYgKCF1cmxJc0h0dHBIdHRwc1NjaGVtZShyLnVybCkgfHwgci5tZXRob2QgIT09ICdHRVQnKSB7XG4gICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICBoZWFkZXI6ICdDYWNoZS5hZGRBbGwnLFxuICAgICAgICAgIG1lc3NhZ2U6ICdFeHBlY3RlZCBodHRwL3Mgc2NoZW1lIHdoZW4gbWV0aG9kIGlzIG5vdCBHRVQuJ1xuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDQuXG4gICAgLyoqIEB0eXBlIHtSZXR1cm5UeXBlPHR5cGVvZiBmZXRjaGluZz5bXX0gKi9cbiAgICBjb25zdCBmZXRjaENvbnRyb2xsZXJzID0gW11cblxuICAgIC8vIDUuXG4gICAgZm9yIChjb25zdCByZXF1ZXN0IG9mIHJlcXVlc3RzKSB7XG4gICAgICAvLyA1LjFcbiAgICAgIGNvbnN0IHIgPSBuZXcgUmVxdWVzdChyZXF1ZXN0KVtrU3RhdGVdXG5cbiAgICAgIC8vIDUuMlxuICAgICAgaWYgKCF1cmxJc0h0dHBIdHRwc1NjaGVtZShyLnVybCkpIHtcbiAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLmFkZEFsbCcsXG4gICAgICAgICAgbWVzc2FnZTogJ0V4cGVjdGVkIGh0dHAvcyBzY2hlbWUuJ1xuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICAvLyA1LjRcbiAgICAgIHIuaW5pdGlhdG9yID0gJ2ZldGNoJ1xuICAgICAgci5kZXN0aW5hdGlvbiA9ICdzdWJyZXNvdXJjZSdcblxuICAgICAgLy8gNS41XG4gICAgICByZXF1ZXN0TGlzdC5wdXNoKHIpXG5cbiAgICAgIC8vIDUuNlxuICAgICAgY29uc3QgcmVzcG9uc2VQcm9taXNlID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKClcblxuICAgICAgLy8gNS43XG4gICAgICBmZXRjaENvbnRyb2xsZXJzLnB1c2goZmV0Y2hpbmcoe1xuICAgICAgICByZXF1ZXN0OiByLFxuICAgICAgICBkaXNwYXRjaGVyOiBnZXRHbG9iYWxEaXNwYXRjaGVyKCksXG4gICAgICAgIHByb2Nlc3NSZXNwb25zZSAocmVzcG9uc2UpIHtcbiAgICAgICAgICAvLyAxLlxuICAgICAgICAgIGlmIChyZXNwb25zZS50eXBlID09PSAnZXJyb3InIHx8IHJlc3BvbnNlLnN0YXR1cyA9PT0gMjA2IHx8IHJlc3BvbnNlLnN0YXR1cyA8IDIwMCB8fCByZXNwb25zZS5zdGF0dXMgPiAyOTkpIHtcbiAgICAgICAgICAgIHJlc3BvbnNlUHJvbWlzZS5yZWplY3Qod2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgICBoZWFkZXI6ICdDYWNoZS5hZGRBbGwnLFxuICAgICAgICAgICAgICBtZXNzYWdlOiAnUmVjZWl2ZWQgYW4gaW52YWxpZCBzdGF0dXMgY29kZSBvciB0aGUgcmVxdWVzdCBmYWlsZWQuJ1xuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgfSBlbHNlIGlmIChyZXNwb25zZS5oZWFkZXJzTGlzdC5jb250YWlucygndmFyeScpKSB7IC8vIDIuXG4gICAgICAgICAgICAvLyAyLjFcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkVmFsdWVzID0gZ2V0RmllbGRWYWx1ZXMocmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCd2YXJ5JykpXG5cbiAgICAgICAgICAgIC8vIDIuMlxuICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZFZhbHVlIG9mIGZpZWxkVmFsdWVzKSB7XG4gICAgICAgICAgICAgIC8vIDIuMi4xXG4gICAgICAgICAgICAgIGlmIChmaWVsZFZhbHVlID09PSAnKicpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVByb21pc2UucmVqZWN0KHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLmFkZEFsbCcsXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnaW52YWxpZCB2YXJ5IGZpZWxkIHZhbHVlJ1xuICAgICAgICAgICAgICAgIH0pKVxuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBjb250cm9sbGVyIG9mIGZldGNoQ29udHJvbGxlcnMpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuYWJvcnQoKVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHkgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgLy8gMS5cbiAgICAgICAgICBpZiAocmVzcG9uc2UuYWJvcnRlZCkge1xuICAgICAgICAgICAgcmVzcG9uc2VQcm9taXNlLnJlamVjdChuZXcgRE9NRXhjZXB0aW9uKCdhYm9ydGVkJywgJ0Fib3J0RXJyb3InKSlcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDIuXG4gICAgICAgICAgcmVzcG9uc2VQcm9taXNlLnJlc29sdmUocmVzcG9uc2UpXG4gICAgICAgIH1cbiAgICAgIH0pKVxuXG4gICAgICAvLyA1LjhcbiAgICAgIHJlc3BvbnNlUHJvbWlzZXMucHVzaChyZXNwb25zZVByb21pc2UucHJvbWlzZSlcbiAgICB9XG5cbiAgICAvLyA2LlxuICAgIGNvbnN0IHAgPSBQcm9taXNlLmFsbChyZXNwb25zZVByb21pc2VzKVxuXG4gICAgLy8gNy5cbiAgICBjb25zdCByZXNwb25zZXMgPSBhd2FpdCBwXG5cbiAgICAvLyA3LjFcbiAgICBjb25zdCBvcGVyYXRpb25zID0gW11cblxuICAgIC8vIDcuMlxuICAgIGxldCBpbmRleCA9IDBcblxuICAgIC8vIDcuM1xuICAgIGZvciAoY29uc3QgcmVzcG9uc2Ugb2YgcmVzcG9uc2VzKSB7XG4gICAgICAvLyA3LjMuMVxuICAgICAgLyoqIEB0eXBlIHtDYWNoZUJhdGNoT3BlcmF0aW9ufSAqL1xuICAgICAgY29uc3Qgb3BlcmF0aW9uID0ge1xuICAgICAgICB0eXBlOiAncHV0JywgLy8gNy4zLjJcbiAgICAgICAgcmVxdWVzdDogcmVxdWVzdExpc3RbaW5kZXhdLCAvLyA3LjMuM1xuICAgICAgICByZXNwb25zZSAvLyA3LjMuNFxuICAgICAgfVxuXG4gICAgICBvcGVyYXRpb25zLnB1c2gob3BlcmF0aW9uKSAvLyA3LjMuNVxuXG4gICAgICBpbmRleCsrIC8vIDcuMy42XG4gICAgfVxuXG4gICAgLy8gNy41XG4gICAgY29uc3QgY2FjaGVKb2JQcm9taXNlID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKClcblxuICAgIC8vIDcuNi4xXG4gICAgbGV0IGVycm9yRGF0YSA9IG51bGxcblxuICAgIC8vIDcuNi4yXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuI2JhdGNoQ2FjaGVPcGVyYXRpb25zKG9wZXJhdGlvbnMpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZXJyb3JEYXRhID0gZVxuICAgIH1cblxuICAgIC8vIDcuNi4zXG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgLy8gNy42LjMuMVxuICAgICAgaWYgKGVycm9yRGF0YSA9PT0gbnVsbCkge1xuICAgICAgICBjYWNoZUpvYlByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyA3LjYuMy4yXG4gICAgICAgIGNhY2hlSm9iUHJvbWlzZS5yZWplY3QoZXJyb3JEYXRhKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICAvLyA3LjdcbiAgICByZXR1cm4gY2FjaGVKb2JQcm9taXNlLnByb21pc2VcbiAgfVxuXG4gIGFzeW5jIHB1dCAocmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZSlcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnQ2FjaGUucHV0JyB9KVxuXG4gICAgcmVxdWVzdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKHJlcXVlc3QpXG4gICAgcmVzcG9uc2UgPSB3ZWJpZGwuY29udmVydGVycy5SZXNwb25zZShyZXNwb25zZSlcblxuICAgIC8vIDEuXG4gICAgbGV0IGlubmVyUmVxdWVzdCA9IG51bGxcblxuICAgIC8vIDIuXG4gICAgaWYgKHJlcXVlc3QgaW5zdGFuY2VvZiBSZXF1ZXN0KSB7XG4gICAgICBpbm5lclJlcXVlc3QgPSByZXF1ZXN0W2tTdGF0ZV1cbiAgICB9IGVsc2UgeyAvLyAzLlxuICAgICAgaW5uZXJSZXF1ZXN0ID0gbmV3IFJlcXVlc3QocmVxdWVzdClba1N0YXRlXVxuICAgIH1cblxuICAgIC8vIDQuXG4gICAgaWYgKCF1cmxJc0h0dHBIdHRwc1NjaGVtZShpbm5lclJlcXVlc3QudXJsKSB8fCBpbm5lclJlcXVlc3QubWV0aG9kICE9PSAnR0VUJykge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6ICdDYWNoZS5wdXQnLFxuICAgICAgICBtZXNzYWdlOiAnRXhwZWN0ZWQgYW4gaHR0cC9zIHNjaGVtZSB3aGVuIG1ldGhvZCBpcyBub3QgR0VUJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyA1LlxuICAgIGNvbnN0IGlubmVyUmVzcG9uc2UgPSByZXNwb25zZVtrU3RhdGVdXG5cbiAgICAvLyA2LlxuICAgIGlmIChpbm5lclJlc3BvbnNlLnN0YXR1cyA9PT0gMjA2KSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ0NhY2hlLnB1dCcsXG4gICAgICAgIG1lc3NhZ2U6ICdHb3QgMjA2IHN0YXR1cydcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gNy5cbiAgICBpZiAoaW5uZXJSZXNwb25zZS5oZWFkZXJzTGlzdC5jb250YWlucygndmFyeScpKSB7XG4gICAgICAvLyA3LjEuXG4gICAgICBjb25zdCBmaWVsZFZhbHVlcyA9IGdldEZpZWxkVmFsdWVzKGlubmVyUmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCd2YXJ5JykpXG5cbiAgICAgIC8vIDcuMi5cbiAgICAgIGZvciAoY29uc3QgZmllbGRWYWx1ZSBvZiBmaWVsZFZhbHVlcykge1xuICAgICAgICAvLyA3LjIuMVxuICAgICAgICBpZiAoZmllbGRWYWx1ZSA9PT0gJyonKSB7XG4gICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgaGVhZGVyOiAnQ2FjaGUucHV0JyxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdHb3QgKiB2YXJ5IGZpZWxkIHZhbHVlJ1xuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA4LlxuICAgIGlmIChpbm5lclJlc3BvbnNlLmJvZHkgJiYgKGlzRGlzdHVyYmVkKGlubmVyUmVzcG9uc2UuYm9keS5zdHJlYW0pIHx8IGlubmVyUmVzcG9uc2UuYm9keS5zdHJlYW0ubG9ja2VkKSkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6ICdDYWNoZS5wdXQnLFxuICAgICAgICBtZXNzYWdlOiAnUmVzcG9uc2UgYm9keSBpcyBsb2NrZWQgb3IgZGlzdHVyYmVkJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyA5LlxuICAgIGNvbnN0IGNsb25lZFJlc3BvbnNlID0gY2xvbmVSZXNwb25zZShpbm5lclJlc3BvbnNlKVxuXG4gICAgLy8gMTAuXG4gICAgY29uc3QgYm9keVJlYWRQcm9taXNlID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKClcblxuICAgIC8vIDExLlxuICAgIGlmIChpbm5lclJlc3BvbnNlLmJvZHkgIT0gbnVsbCkge1xuICAgICAgLy8gMTEuMVxuICAgICAgY29uc3Qgc3RyZWFtID0gaW5uZXJSZXNwb25zZS5ib2R5LnN0cmVhbVxuXG4gICAgICAvLyAxMS4yXG4gICAgICBjb25zdCByZWFkZXIgPSBzdHJlYW0uZ2V0UmVhZGVyKClcblxuICAgICAgLy8gMTEuM1xuICAgICAgcmVhZEFsbEJ5dGVzKHJlYWRlcikudGhlbihib2R5UmVhZFByb21pc2UucmVzb2x2ZSwgYm9keVJlYWRQcm9taXNlLnJlamVjdClcbiAgICB9IGVsc2Uge1xuICAgICAgYm9keVJlYWRQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKVxuICAgIH1cblxuICAgIC8vIDEyLlxuICAgIC8qKiBAdHlwZSB7Q2FjaGVCYXRjaE9wZXJhdGlvbltdfSAqL1xuICAgIGNvbnN0IG9wZXJhdGlvbnMgPSBbXVxuXG4gICAgLy8gMTMuXG4gICAgLyoqIEB0eXBlIHtDYWNoZUJhdGNoT3BlcmF0aW9ufSAqL1xuICAgIGNvbnN0IG9wZXJhdGlvbiA9IHtcbiAgICAgIHR5cGU6ICdwdXQnLCAvLyAxNC5cbiAgICAgIHJlcXVlc3Q6IGlubmVyUmVxdWVzdCwgLy8gMTUuXG4gICAgICByZXNwb25zZTogY2xvbmVkUmVzcG9uc2UgLy8gMTYuXG4gICAgfVxuXG4gICAgLy8gMTcuXG4gICAgb3BlcmF0aW9ucy5wdXNoKG9wZXJhdGlvbilcblxuICAgIC8vIDE5LlxuICAgIGNvbnN0IGJ5dGVzID0gYXdhaXQgYm9keVJlYWRQcm9taXNlLnByb21pc2VcblxuICAgIGlmIChjbG9uZWRSZXNwb25zZS5ib2R5ICE9IG51bGwpIHtcbiAgICAgIGNsb25lZFJlc3BvbnNlLmJvZHkuc291cmNlID0gYnl0ZXNcbiAgICB9XG5cbiAgICAvLyAxOS4xXG4gICAgY29uc3QgY2FjaGVKb2JQcm9taXNlID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKClcblxuICAgIC8vIDE5LjIuMVxuICAgIGxldCBlcnJvckRhdGEgPSBudWxsXG5cbiAgICAvLyAxOS4yLjJcbiAgICB0cnkge1xuICAgICAgdGhpcy4jYmF0Y2hDYWNoZU9wZXJhdGlvbnMob3BlcmF0aW9ucylcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlcnJvckRhdGEgPSBlXG4gICAgfVxuXG4gICAgLy8gMTkuMi4zXG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgLy8gMTkuMi4zLjFcbiAgICAgIGlmIChlcnJvckRhdGEgPT09IG51bGwpIHtcbiAgICAgICAgY2FjaGVKb2JQcm9taXNlLnJlc29sdmUoKVxuICAgICAgfSBlbHNlIHsgLy8gMTkuMi4zLjJcbiAgICAgICAgY2FjaGVKb2JQcm9taXNlLnJlamVjdChlcnJvckRhdGEpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHJldHVybiBjYWNoZUpvYlByb21pc2UucHJvbWlzZVxuICB9XG5cbiAgYXN5bmMgZGVsZXRlIChyZXF1ZXN0LCBvcHRpb25zID0ge30pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZSlcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnQ2FjaGUuZGVsZXRlJyB9KVxuXG4gICAgcmVxdWVzdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKHJlcXVlc3QpXG4gICAgb3B0aW9ucyA9IHdlYmlkbC5jb252ZXJ0ZXJzLkNhY2hlUXVlcnlPcHRpb25zKG9wdGlvbnMpXG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7UmVxdWVzdH1cbiAgICAgKi9cbiAgICBsZXQgciA9IG51bGxcblxuICAgIGlmIChyZXF1ZXN0IGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgICAgciA9IHJlcXVlc3Rba1N0YXRlXVxuXG4gICAgICBpZiAoci5tZXRob2QgIT09ICdHRVQnICYmICFvcHRpb25zLmlnbm9yZU1ldGhvZCkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYXNzZXJ0KHR5cGVvZiByZXF1ZXN0ID09PSAnc3RyaW5nJylcblxuICAgICAgciA9IG5ldyBSZXF1ZXN0KHJlcXVlc3QpW2tTdGF0ZV1cbiAgICB9XG5cbiAgICAvKiogQHR5cGUge0NhY2hlQmF0Y2hPcGVyYXRpb25bXX0gKi9cbiAgICBjb25zdCBvcGVyYXRpb25zID0gW11cblxuICAgIC8qKiBAdHlwZSB7Q2FjaGVCYXRjaE9wZXJhdGlvbn0gKi9cbiAgICBjb25zdCBvcGVyYXRpb24gPSB7XG4gICAgICB0eXBlOiAnZGVsZXRlJyxcbiAgICAgIHJlcXVlc3Q6IHIsXG4gICAgICBvcHRpb25zXG4gICAgfVxuXG4gICAgb3BlcmF0aW9ucy5wdXNoKG9wZXJhdGlvbilcblxuICAgIGNvbnN0IGNhY2hlSm9iUHJvbWlzZSA9IGNyZWF0ZURlZmVycmVkUHJvbWlzZSgpXG5cbiAgICBsZXQgZXJyb3JEYXRhID0gbnVsbFxuICAgIGxldCByZXF1ZXN0UmVzcG9uc2VzXG5cbiAgICB0cnkge1xuICAgICAgcmVxdWVzdFJlc3BvbnNlcyA9IHRoaXMuI2JhdGNoQ2FjaGVPcGVyYXRpb25zKG9wZXJhdGlvbnMpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZXJyb3JEYXRhID0gZVxuICAgIH1cblxuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgIGlmIChlcnJvckRhdGEgPT09IG51bGwpIHtcbiAgICAgICAgY2FjaGVKb2JQcm9taXNlLnJlc29sdmUoISFyZXF1ZXN0UmVzcG9uc2VzPy5sZW5ndGgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWNoZUpvYlByb21pc2UucmVqZWN0KGVycm9yRGF0YSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIGNhY2hlSm9iUHJvbWlzZS5wcm9taXNlXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jZG9tLWNhY2hlLWtleXNcbiAgICogQHBhcmFtIHthbnl9IHJlcXVlc3RcbiAgICogQHBhcmFtIHtpbXBvcnQoJy4uLy4uL3R5cGVzL2NhY2hlJykuQ2FjaGVRdWVyeU9wdGlvbnN9IG9wdGlvbnNcbiAgICogQHJldHVybnMge3JlYWRvbmx5IFJlcXVlc3RbXX1cbiAgICovXG4gIGFzeW5jIGtleXMgKHJlcXVlc3QgPSB1bmRlZmluZWQsIG9wdGlvbnMgPSB7fSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlKVxuXG4gICAgaWYgKHJlcXVlc3QgIT09IHVuZGVmaW5lZCkgcmVxdWVzdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKHJlcXVlc3QpXG4gICAgb3B0aW9ucyA9IHdlYmlkbC5jb252ZXJ0ZXJzLkNhY2hlUXVlcnlPcHRpb25zKG9wdGlvbnMpXG5cbiAgICAvLyAxLlxuICAgIGxldCByID0gbnVsbFxuXG4gICAgLy8gMi5cbiAgICBpZiAocmVxdWVzdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyAyLjFcbiAgICAgIGlmIChyZXF1ZXN0IGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgICAgICAvLyAyLjEuMVxuICAgICAgICByID0gcmVxdWVzdFtrU3RhdGVdXG5cbiAgICAgICAgLy8gMi4xLjJcbiAgICAgICAgaWYgKHIubWV0aG9kICE9PSAnR0VUJyAmJiAhb3B0aW9ucy5pZ25vcmVNZXRob2QpIHtcbiAgICAgICAgICByZXR1cm4gW11cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcmVxdWVzdCA9PT0gJ3N0cmluZycpIHsgLy8gMi4yXG4gICAgICAgIHIgPSBuZXcgUmVxdWVzdChyZXF1ZXN0KVtrU3RhdGVdXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNC5cbiAgICBjb25zdCBwcm9taXNlID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKClcblxuICAgIC8vIDUuXG4gICAgLy8gNS4xXG4gICAgY29uc3QgcmVxdWVzdHMgPSBbXVxuXG4gICAgLy8gNS4yXG4gICAgaWYgKHJlcXVlc3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gNS4yLjFcbiAgICAgIGZvciAoY29uc3QgcmVxdWVzdFJlc3BvbnNlIG9mIHRoaXMuI3JlbGV2YW50UmVxdWVzdFJlc3BvbnNlTGlzdCkge1xuICAgICAgICAvLyA1LjIuMS4xXG4gICAgICAgIHJlcXVlc3RzLnB1c2gocmVxdWVzdFJlc3BvbnNlWzBdKVxuICAgICAgfVxuICAgIH0gZWxzZSB7IC8vIDUuM1xuICAgICAgLy8gNS4zLjFcbiAgICAgIGNvbnN0IHJlcXVlc3RSZXNwb25zZXMgPSB0aGlzLiNxdWVyeUNhY2hlKHIsIG9wdGlvbnMpXG5cbiAgICAgIC8vIDUuMy4yXG4gICAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiByZXF1ZXN0UmVzcG9uc2VzKSB7XG4gICAgICAgIC8vIDUuMy4yLjFcbiAgICAgICAgcmVxdWVzdHMucHVzaChyZXF1ZXN0UmVzcG9uc2VbMF0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNS40XG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgLy8gNS40LjFcbiAgICAgIGNvbnN0IHJlcXVlc3RMaXN0ID0gW11cblxuICAgICAgLy8gNS40LjJcbiAgICAgIGZvciAoY29uc3QgcmVxdWVzdCBvZiByZXF1ZXN0cykge1xuICAgICAgICBjb25zdCByZXF1ZXN0T2JqZWN0ID0gbmV3IFJlcXVlc3QoJ2h0dHBzOi8vYScpXG4gICAgICAgIHJlcXVlc3RPYmplY3Rba1N0YXRlXSA9IHJlcXVlc3RcbiAgICAgICAgcmVxdWVzdE9iamVjdFtrSGVhZGVyc11ba0hlYWRlcnNMaXN0XSA9IHJlcXVlc3QuaGVhZGVyc0xpc3RcbiAgICAgICAgcmVxdWVzdE9iamVjdFtrSGVhZGVyc11ba0d1YXJkXSA9ICdpbW11dGFibGUnXG4gICAgICAgIHJlcXVlc3RPYmplY3Rba1JlYWxtXSA9IHJlcXVlc3QuY2xpZW50XG5cbiAgICAgICAgLy8gNS40LjIuMVxuICAgICAgICByZXF1ZXN0TGlzdC5wdXNoKHJlcXVlc3RPYmplY3QpXG4gICAgICB9XG5cbiAgICAgIC8vIDUuNC4zXG4gICAgICBwcm9taXNlLnJlc29sdmUoT2JqZWN0LmZyZWV6ZShyZXF1ZXN0TGlzdCkpXG4gICAgfSlcblxuICAgIHJldHVybiBwcm9taXNlLnByb21pc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNiYXRjaC1jYWNoZS1vcGVyYXRpb25zLWFsZ29yaXRobVxuICAgKiBAcGFyYW0ge0NhY2hlQmF0Y2hPcGVyYXRpb25bXX0gb3BlcmF0aW9uc1xuICAgKiBAcmV0dXJucyB7cmVxdWVzdFJlc3BvbnNlTGlzdH1cbiAgICovXG4gICNiYXRjaENhY2hlT3BlcmF0aW9ucyAob3BlcmF0aW9ucykge1xuICAgIC8vIDEuXG4gICAgY29uc3QgY2FjaGUgPSB0aGlzLiNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3RcblxuICAgIC8vIDIuXG4gICAgY29uc3QgYmFja3VwQ2FjaGUgPSBbLi4uY2FjaGVdXG5cbiAgICAvLyAzLlxuICAgIGNvbnN0IGFkZGVkSXRlbXMgPSBbXVxuXG4gICAgLy8gNC4xXG4gICAgY29uc3QgcmVzdWx0TGlzdCA9IFtdXG5cbiAgICB0cnkge1xuICAgICAgLy8gNC4yXG4gICAgICBmb3IgKGNvbnN0IG9wZXJhdGlvbiBvZiBvcGVyYXRpb25zKSB7XG4gICAgICAgIC8vIDQuMi4xXG4gICAgICAgIGlmIChvcGVyYXRpb24udHlwZSAhPT0gJ2RlbGV0ZScgJiYgb3BlcmF0aW9uLnR5cGUgIT09ICdwdXQnKSB7XG4gICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgaGVhZGVyOiAnQ2FjaGUuI2JhdGNoQ2FjaGVPcGVyYXRpb25zJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdvcGVyYXRpb24gdHlwZSBkb2VzIG5vdCBtYXRjaCBcImRlbGV0ZVwiIG9yIFwicHV0XCInXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDQuMi4yXG4gICAgICAgIGlmIChvcGVyYXRpb24udHlwZSA9PT0gJ2RlbGV0ZScgJiYgb3BlcmF0aW9uLnJlc3BvbnNlICE9IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICBoZWFkZXI6ICdDYWNoZS4jYmF0Y2hDYWNoZU9wZXJhdGlvbnMnLFxuICAgICAgICAgICAgbWVzc2FnZTogJ2RlbGV0ZSBvcGVyYXRpb24gc2hvdWxkIG5vdCBoYXZlIGFuIGFzc29jaWF0ZWQgcmVzcG9uc2UnXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDQuMi4zXG4gICAgICAgIGlmICh0aGlzLiNxdWVyeUNhY2hlKG9wZXJhdGlvbi5yZXF1ZXN0LCBvcGVyYXRpb24ub3B0aW9ucywgYWRkZWRJdGVtcykubGVuZ3RoKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignPz8/JywgJ0ludmFsaWRTdGF0ZUVycm9yJylcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDQuMi40XG4gICAgICAgIGxldCByZXF1ZXN0UmVzcG9uc2VzXG5cbiAgICAgICAgLy8gNC4yLjVcbiAgICAgICAgaWYgKG9wZXJhdGlvbi50eXBlID09PSAnZGVsZXRlJykge1xuICAgICAgICAgIC8vIDQuMi41LjFcbiAgICAgICAgICByZXF1ZXN0UmVzcG9uc2VzID0gdGhpcy4jcXVlcnlDYWNoZShvcGVyYXRpb24ucmVxdWVzdCwgb3BlcmF0aW9uLm9wdGlvbnMpXG5cbiAgICAgICAgICAvLyBUT0RPOiB0aGUgc3BlYyBpcyB3cm9uZywgdGhpcyBpcyBuZWVkZWQgdG8gcGFzcyBXUFRzXG4gICAgICAgICAgaWYgKHJlcXVlc3RSZXNwb25zZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gW11cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyA0LjIuNS4yXG4gICAgICAgICAgZm9yIChjb25zdCByZXF1ZXN0UmVzcG9uc2Ugb2YgcmVxdWVzdFJlc3BvbnNlcykge1xuICAgICAgICAgICAgY29uc3QgaWR4ID0gY2FjaGUuaW5kZXhPZihyZXF1ZXN0UmVzcG9uc2UpXG4gICAgICAgICAgICBhc3NlcnQoaWR4ICE9PSAtMSlcblxuICAgICAgICAgICAgLy8gNC4yLjUuMi4xXG4gICAgICAgICAgICBjYWNoZS5zcGxpY2UoaWR4LCAxKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24udHlwZSA9PT0gJ3B1dCcpIHsgLy8gNC4yLjZcbiAgICAgICAgICAvLyA0LjIuNi4xXG4gICAgICAgICAgaWYgKG9wZXJhdGlvbi5yZXNwb25zZSA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLiNiYXRjaENhY2hlT3BlcmF0aW9ucycsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdwdXQgb3BlcmF0aW9uIHNob3VsZCBoYXZlIGFuIGFzc29jaWF0ZWQgcmVzcG9uc2UnXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDQuMi42LjJcbiAgICAgICAgICBjb25zdCByID0gb3BlcmF0aW9uLnJlcXVlc3RcblxuICAgICAgICAgIC8vIDQuMi42LjNcbiAgICAgICAgICBpZiAoIXVybElzSHR0cEh0dHBzU2NoZW1lKHIudXJsKSkge1xuICAgICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgICBoZWFkZXI6ICdDYWNoZS4jYmF0Y2hDYWNoZU9wZXJhdGlvbnMnLFxuICAgICAgICAgICAgICBtZXNzYWdlOiAnZXhwZWN0ZWQgaHR0cCBvciBodHRwcyBzY2hlbWUnXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDQuMi42LjRcbiAgICAgICAgICBpZiAoci5tZXRob2QgIT09ICdHRVQnKSB7XG4gICAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLiNiYXRjaENhY2hlT3BlcmF0aW9ucycsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdub3QgZ2V0IG1ldGhvZCdcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gNC4yLjYuNVxuICAgICAgICAgIGlmIChvcGVyYXRpb24ub3B0aW9ucyAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLiNiYXRjaENhY2hlT3BlcmF0aW9ucycsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdvcHRpb25zIG11c3Qgbm90IGJlIGRlZmluZWQnXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDQuMi42LjZcbiAgICAgICAgICByZXF1ZXN0UmVzcG9uc2VzID0gdGhpcy4jcXVlcnlDYWNoZShvcGVyYXRpb24ucmVxdWVzdClcblxuICAgICAgICAgIC8vIDQuMi42LjdcbiAgICAgICAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiByZXF1ZXN0UmVzcG9uc2VzKSB7XG4gICAgICAgICAgICBjb25zdCBpZHggPSBjYWNoZS5pbmRleE9mKHJlcXVlc3RSZXNwb25zZSlcbiAgICAgICAgICAgIGFzc2VydChpZHggIT09IC0xKVxuXG4gICAgICAgICAgICAvLyA0LjIuNi43LjFcbiAgICAgICAgICAgIGNhY2hlLnNwbGljZShpZHgsIDEpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gNC4yLjYuOFxuICAgICAgICAgIGNhY2hlLnB1c2goW29wZXJhdGlvbi5yZXF1ZXN0LCBvcGVyYXRpb24ucmVzcG9uc2VdKVxuXG4gICAgICAgICAgLy8gNC4yLjYuMTBcbiAgICAgICAgICBhZGRlZEl0ZW1zLnB1c2goW29wZXJhdGlvbi5yZXF1ZXN0LCBvcGVyYXRpb24ucmVzcG9uc2VdKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gNC4yLjdcbiAgICAgICAgcmVzdWx0TGlzdC5wdXNoKFtvcGVyYXRpb24ucmVxdWVzdCwgb3BlcmF0aW9uLnJlc3BvbnNlXSlcbiAgICAgIH1cblxuICAgICAgLy8gNC4zXG4gICAgICByZXR1cm4gcmVzdWx0TGlzdFxuICAgIH0gY2F0Y2ggKGUpIHsgLy8gNS5cbiAgICAgIC8vIDUuMVxuICAgICAgdGhpcy4jcmVsZXZhbnRSZXF1ZXN0UmVzcG9uc2VMaXN0Lmxlbmd0aCA9IDBcblxuICAgICAgLy8gNS4yXG4gICAgICB0aGlzLiNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3QgPSBiYWNrdXBDYWNoZVxuXG4gICAgICAvLyA1LjNcbiAgICAgIHRocm93IGVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jcXVlcnktY2FjaGVcbiAgICogQHBhcmFtIHthbnl9IHJlcXVlc3RRdWVyeVxuICAgKiBAcGFyYW0ge2ltcG9ydCgnLi4vLi4vdHlwZXMvY2FjaGUnKS5DYWNoZVF1ZXJ5T3B0aW9uc30gb3B0aW9uc1xuICAgKiBAcGFyYW0ge3JlcXVlc3RSZXNwb25zZUxpc3R9IHRhcmdldFN0b3JhZ2VcbiAgICogQHJldHVybnMge3JlcXVlc3RSZXNwb25zZUxpc3R9XG4gICAqL1xuICAjcXVlcnlDYWNoZSAocmVxdWVzdFF1ZXJ5LCBvcHRpb25zLCB0YXJnZXRTdG9yYWdlKSB7XG4gICAgLyoqIEB0eXBlIHtyZXF1ZXN0UmVzcG9uc2VMaXN0fSAqL1xuICAgIGNvbnN0IHJlc3VsdExpc3QgPSBbXVxuXG4gICAgY29uc3Qgc3RvcmFnZSA9IHRhcmdldFN0b3JhZ2UgPz8gdGhpcy4jcmVsZXZhbnRSZXF1ZXN0UmVzcG9uc2VMaXN0XG5cbiAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiBzdG9yYWdlKSB7XG4gICAgICBjb25zdCBbY2FjaGVkUmVxdWVzdCwgY2FjaGVkUmVzcG9uc2VdID0gcmVxdWVzdFJlc3BvbnNlXG4gICAgICBpZiAodGhpcy4jcmVxdWVzdE1hdGNoZXNDYWNoZWRJdGVtKHJlcXVlc3RRdWVyeSwgY2FjaGVkUmVxdWVzdCwgY2FjaGVkUmVzcG9uc2UsIG9wdGlvbnMpKSB7XG4gICAgICAgIHJlc3VsdExpc3QucHVzaChyZXF1ZXN0UmVzcG9uc2UpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdExpc3RcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNyZXF1ZXN0LW1hdGNoZXMtY2FjaGVkLWl0ZW0tYWxnb3JpdGhtXG4gICAqIEBwYXJhbSB7YW55fSByZXF1ZXN0UXVlcnlcbiAgICogQHBhcmFtIHthbnl9IHJlcXVlc3RcbiAgICogQHBhcmFtIHthbnkgfCBudWxsfSByZXNwb25zZVxuICAgKiBAcGFyYW0ge2ltcG9ydCgnLi4vLi4vdHlwZXMvY2FjaGUnKS5DYWNoZVF1ZXJ5T3B0aW9ucyB8IHVuZGVmaW5lZH0gb3B0aW9uc1xuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gICNyZXF1ZXN0TWF0Y2hlc0NhY2hlZEl0ZW0gKHJlcXVlc3RRdWVyeSwgcmVxdWVzdCwgcmVzcG9uc2UgPSBudWxsLCBvcHRpb25zKSB7XG4gICAgLy8gaWYgKG9wdGlvbnM/Lmlnbm9yZU1ldGhvZCA9PT0gZmFsc2UgJiYgcmVxdWVzdC5tZXRob2QgPT09ICdHRVQnKSB7XG4gICAgLy8gICByZXR1cm4gZmFsc2VcbiAgICAvLyB9XG5cbiAgICBjb25zdCBxdWVyeVVSTCA9IG5ldyBVUkwocmVxdWVzdFF1ZXJ5LnVybClcblxuICAgIGNvbnN0IGNhY2hlZFVSTCA9IG5ldyBVUkwocmVxdWVzdC51cmwpXG5cbiAgICBpZiAob3B0aW9ucz8uaWdub3JlU2VhcmNoKSB7XG4gICAgICBjYWNoZWRVUkwuc2VhcmNoID0gJydcblxuICAgICAgcXVlcnlVUkwuc2VhcmNoID0gJydcbiAgICB9XG5cbiAgICBpZiAoIXVybEVxdWFscyhxdWVyeVVSTCwgY2FjaGVkVVJMLCB0cnVlKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgcmVzcG9uc2UgPT0gbnVsbCB8fFxuICAgICAgb3B0aW9ucz8uaWdub3JlVmFyeSB8fFxuICAgICAgIXJlc3BvbnNlLmhlYWRlcnNMaXN0LmNvbnRhaW5zKCd2YXJ5JylcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgY29uc3QgZmllbGRWYWx1ZXMgPSBnZXRGaWVsZFZhbHVlcyhyZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ3ZhcnknKSlcblxuICAgIGZvciAoY29uc3QgZmllbGRWYWx1ZSBvZiBmaWVsZFZhbHVlcykge1xuICAgICAgaWYgKGZpZWxkVmFsdWUgPT09ICcqJykge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVxdWVzdFZhbHVlID0gcmVxdWVzdC5oZWFkZXJzTGlzdC5nZXQoZmllbGRWYWx1ZSlcbiAgICAgIGNvbnN0IHF1ZXJ5VmFsdWUgPSByZXF1ZXN0UXVlcnkuaGVhZGVyc0xpc3QuZ2V0KGZpZWxkVmFsdWUpXG5cbiAgICAgIC8vIElmIG9uZSBoYXMgdGhlIGhlYWRlciBhbmQgdGhlIG90aGVyIGRvZXNuJ3QsIG9yIG9uZSBoYXNcbiAgICAgIC8vIGEgZGlmZmVyZW50IHZhbHVlIHRoYW4gdGhlIG90aGVyLCByZXR1cm4gZmFsc2VcbiAgICAgIGlmIChyZXF1ZXN0VmFsdWUgIT09IHF1ZXJ5VmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWVcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDYWNoZS5wcm90b3R5cGUsIHtcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0NhY2hlJyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSxcbiAgbWF0Y2g6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG1hdGNoQWxsOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBhZGQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGFkZEFsbDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcHV0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBkZWxldGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGtleXM6IGtFbnVtZXJhYmxlUHJvcGVydHlcbn0pXG5cbmNvbnN0IGNhY2hlUXVlcnlPcHRpb25Db252ZXJ0ZXJzID0gW1xuICB7XG4gICAga2V5OiAnaWdub3JlU2VhcmNoJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4sXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZVxuICB9LFxuICB7XG4gICAga2V5OiAnaWdub3JlTWV0aG9kJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4sXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZVxuICB9LFxuICB7XG4gICAga2V5OiAnaWdub3JlVmFyeScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2VcbiAgfVxuXVxuXG53ZWJpZGwuY29udmVydGVycy5DYWNoZVF1ZXJ5T3B0aW9ucyA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKGNhY2hlUXVlcnlPcHRpb25Db252ZXJ0ZXJzKVxuXG53ZWJpZGwuY29udmVydGVycy5NdWx0aUNhY2hlUXVlcnlPcHRpb25zID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICAuLi5jYWNoZVF1ZXJ5T3B0aW9uQ29udmVydGVycyxcbiAge1xuICAgIGtleTogJ2NhY2hlTmFtZScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmdcbiAgfVxuXSlcblxud2ViaWRsLmNvbnZlcnRlcnMuUmVzcG9uc2UgPSB3ZWJpZGwuaW50ZXJmYWNlQ29udmVydGVyKFJlc3BvbnNlKVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8UmVxdWVzdEluZm8+J10gPSB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvXG4pXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBDYWNoZVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBrQ29uc3RydWN0IH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBDYWNoZSB9ID0gcmVxdWlyZSgnLi9jYWNoZScpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvd2ViaWRsJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcblxuY2xhc3MgQ2FjaGVTdG9yYWdlIHtcbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2Rmbi1yZWxldmFudC1uYW1lLXRvLWNhY2hlLW1hcFxuICAgKiBAdHlwZSB7TWFwPHN0cmluZywgaW1wb3J0KCcuL2NhY2hlJykucmVxdWVzdFJlc3BvbnNlTGlzdH1cbiAgICovXG4gICNjYWNoZXMgPSBuZXcgTWFwKClcblxuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgaWYgKGFyZ3VtZW50c1swXSAhPT0ga0NvbnN0cnVjdCkge1xuICAgICAgd2ViaWRsLmlsbGVnYWxDb25zdHJ1Y3RvcigpXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbWF0Y2ggKHJlcXVlc3QsIG9wdGlvbnMgPSB7fSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlU3RvcmFnZSlcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnQ2FjaGVTdG9yYWdlLm1hdGNoJyB9KVxuXG4gICAgcmVxdWVzdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKHJlcXVlc3QpXG4gICAgb3B0aW9ucyA9IHdlYmlkbC5jb252ZXJ0ZXJzLk11bHRpQ2FjaGVRdWVyeU9wdGlvbnMob3B0aW9ucylcblxuICAgIC8vIDEuXG4gICAgaWYgKG9wdGlvbnMuY2FjaGVOYW1lICE9IG51bGwpIHtcbiAgICAgIC8vIDEuMS4xLjFcbiAgICAgIGlmICh0aGlzLiNjYWNoZXMuaGFzKG9wdGlvbnMuY2FjaGVOYW1lKSkge1xuICAgICAgICAvLyAxLjEuMS4xLjFcbiAgICAgICAgY29uc3QgY2FjaGVMaXN0ID0gdGhpcy4jY2FjaGVzLmdldChvcHRpb25zLmNhY2hlTmFtZSlcbiAgICAgICAgY29uc3QgY2FjaGUgPSBuZXcgQ2FjaGUoa0NvbnN0cnVjdCwgY2FjaGVMaXN0KVxuXG4gICAgICAgIHJldHVybiBhd2FpdCBjYWNoZS5tYXRjaChyZXF1ZXN0LCBvcHRpb25zKVxuICAgICAgfVxuICAgIH0gZWxzZSB7IC8vIDIuXG4gICAgICAvLyAyLjJcbiAgICAgIGZvciAoY29uc3QgY2FjaGVMaXN0IG9mIHRoaXMuI2NhY2hlcy52YWx1ZXMoKSkge1xuICAgICAgICBjb25zdCBjYWNoZSA9IG5ldyBDYWNoZShrQ29uc3RydWN0LCBjYWNoZUxpc3QpXG5cbiAgICAgICAgLy8gMi4yLjEuMlxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNhY2hlLm1hdGNoKHJlcXVlc3QsIG9wdGlvbnMpXG5cbiAgICAgICAgaWYgKHJlc3BvbnNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNjYWNoZS1zdG9yYWdlLWhhc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fVxuICAgKi9cbiAgYXN5bmMgaGFzIChjYWNoZU5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZVN0b3JhZ2UpXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0NhY2hlU3RvcmFnZS5oYXMnIH0pXG5cbiAgICBjYWNoZU5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcoY2FjaGVOYW1lKVxuXG4gICAgLy8gMi4xLjFcbiAgICAvLyAyLjJcbiAgICByZXR1cm4gdGhpcy4jY2FjaGVzLmhhcyhjYWNoZU5hbWUpXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jZG9tLWNhY2hlc3RvcmFnZS1vcGVuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWVcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2FjaGU+fVxuICAgKi9cbiAgYXN5bmMgb3BlbiAoY2FjaGVOYW1lKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGVTdG9yYWdlKVxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdDYWNoZVN0b3JhZ2Uub3BlbicgfSlcblxuICAgIGNhY2hlTmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyhjYWNoZU5hbWUpXG5cbiAgICAvLyAyLjFcbiAgICBpZiAodGhpcy4jY2FjaGVzLmhhcyhjYWNoZU5hbWUpKSB7XG4gICAgICAvLyBhd2FpdCBjYWNoZXMub3BlbigndjEnKSAhPT0gYXdhaXQgY2FjaGVzLm9wZW4oJ3YxJylcblxuICAgICAgLy8gMi4xLjFcbiAgICAgIGNvbnN0IGNhY2hlID0gdGhpcy4jY2FjaGVzLmdldChjYWNoZU5hbWUpXG5cbiAgICAgIC8vIDIuMS4xLjFcbiAgICAgIHJldHVybiBuZXcgQ2FjaGUoa0NvbnN0cnVjdCwgY2FjaGUpXG4gICAgfVxuXG4gICAgLy8gMi4yXG4gICAgY29uc3QgY2FjaGUgPSBbXVxuXG4gICAgLy8gMi4zXG4gICAgdGhpcy4jY2FjaGVzLnNldChjYWNoZU5hbWUsIGNhY2hlKVxuXG4gICAgLy8gMi40XG4gICAgcmV0dXJuIG5ldyBDYWNoZShrQ29uc3RydWN0LCBjYWNoZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNjYWNoZS1zdG9yYWdlLWRlbGV0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fVxuICAgKi9cbiAgYXN5bmMgZGVsZXRlIChjYWNoZU5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZVN0b3JhZ2UpXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0NhY2hlU3RvcmFnZS5kZWxldGUnIH0pXG5cbiAgICBjYWNoZU5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcoY2FjaGVOYW1lKVxuXG4gICAgcmV0dXJuIHRoaXMuI2NhY2hlcy5kZWxldGUoY2FjaGVOYW1lKVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2NhY2hlLXN0b3JhZ2Uta2V5c1xuICAgKiBAcmV0dXJucyB7c3RyaW5nW119XG4gICAqL1xuICBhc3luYyBrZXlzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZVN0b3JhZ2UpXG5cbiAgICAvLyAyLjFcbiAgICBjb25zdCBrZXlzID0gdGhpcy4jY2FjaGVzLmtleXMoKVxuXG4gICAgLy8gMi4yXG4gICAgcmV0dXJuIFsuLi5rZXlzXVxuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENhY2hlU3RvcmFnZS5wcm90b3R5cGUsIHtcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0NhY2hlU3RvcmFnZScsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0sXG4gIG1hdGNoOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBoYXM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9wZW46IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGRlbGV0ZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAga2V5czoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIENhY2hlU3RvcmFnZVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuLy8gaHR0cHM6Ly93aWNnLmdpdGh1Yi5pby9jb29raWUtc3RvcmUvI2Nvb2tpZS1tYXhpbXVtLWF0dHJpYnV0ZS12YWx1ZS1zaXplXG5jb25zdCBtYXhBdHRyaWJ1dGVWYWx1ZVNpemUgPSAxMDI0XG5cbi8vIGh0dHBzOi8vd2ljZy5naXRodWIuaW8vY29va2llLXN0b3JlLyNjb29raWUtbWF4aW11bS1uYW1lLXZhbHVlLXBhaXItc2l6ZVxuY29uc3QgbWF4TmFtZVZhbHVlUGFpclNpemUgPSA0MDk2XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtYXhBdHRyaWJ1dGVWYWx1ZVNpemUsXG4gIG1heE5hbWVWYWx1ZVBhaXJTaXplXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBrSGVhZGVyc0xpc3QgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5cbmZ1bmN0aW9uIGlzQ1RMRXhjbHVkaW5nSHRhYiAodmFsdWUpIHtcbiAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgZm9yIChjb25zdCBjaGFyIG9mIHZhbHVlKSB7XG4gICAgY29uc3QgY29kZSA9IGNoYXIuY2hhckNvZGVBdCgwKVxuXG4gICAgaWYgKFxuICAgICAgKGNvZGUgPj0gMHgwMCB8fCBjb2RlIDw9IDB4MDgpIHx8XG4gICAgICAoY29kZSA+PSAweDBBIHx8IGNvZGUgPD0gMHgxRikgfHxcbiAgICAgIGNvZGUgPT09IDB4N0ZcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiBDSEFSICAgICAgICAgICA9IDxhbnkgVVMtQVNDSUkgY2hhcmFjdGVyIChvY3RldHMgMCAtIDEyNyk+XG4gdG9rZW4gICAgICAgICAgPSAxKjxhbnkgQ0hBUiBleGNlcHQgQ1RMcyBvciBzZXBhcmF0b3JzPlxuIHNlcGFyYXRvcnMgICAgID0gXCIoXCIgfCBcIilcIiB8IFwiPFwiIHwgXCI+XCIgfCBcIkBcIlxuICAgICAgICAgICAgICAgIHwgXCIsXCIgfCBcIjtcIiB8IFwiOlwiIHwgXCJcXFwiIHwgPFwiPlxuICAgICAgICAgICAgICAgIHwgXCIvXCIgfCBcIltcIiB8IFwiXVwiIHwgXCI/XCIgfCBcIj1cIlxuICAgICAgICAgICAgICAgIHwgXCJ7XCIgfCBcIn1cIiB8IFNQIHwgSFRcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQ29va2llTmFtZSAobmFtZSkge1xuICBmb3IgKGNvbnN0IGNoYXIgb2YgbmFtZSkge1xuICAgIGNvbnN0IGNvZGUgPSBjaGFyLmNoYXJDb2RlQXQoMClcblxuICAgIGlmIChcbiAgICAgIChjb2RlIDw9IDB4MjAgfHwgY29kZSA+IDB4N0YpIHx8XG4gICAgICBjaGFyID09PSAnKCcgfHxcbiAgICAgIGNoYXIgPT09ICcpJyB8fFxuICAgICAgY2hhciA9PT0gJz4nIHx8XG4gICAgICBjaGFyID09PSAnPCcgfHxcbiAgICAgIGNoYXIgPT09ICdAJyB8fFxuICAgICAgY2hhciA9PT0gJywnIHx8XG4gICAgICBjaGFyID09PSAnOycgfHxcbiAgICAgIGNoYXIgPT09ICc6JyB8fFxuICAgICAgY2hhciA9PT0gJ1xcXFwnIHx8XG4gICAgICBjaGFyID09PSAnXCInIHx8XG4gICAgICBjaGFyID09PSAnLycgfHxcbiAgICAgIGNoYXIgPT09ICdbJyB8fFxuICAgICAgY2hhciA9PT0gJ10nIHx8XG4gICAgICBjaGFyID09PSAnPycgfHxcbiAgICAgIGNoYXIgPT09ICc9JyB8fFxuICAgICAgY2hhciA9PT0gJ3snIHx8XG4gICAgICBjaGFyID09PSAnfSdcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb29raWUgbmFtZScpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuIGNvb2tpZS12YWx1ZSAgICAgID0gKmNvb2tpZS1vY3RldCAvICggRFFVT1RFICpjb29raWUtb2N0ZXQgRFFVT1RFIClcbiBjb29raWUtb2N0ZXQgICAgICA9ICV4MjEgLyAleDIzLTJCIC8gJXgyRC0zQSAvICV4M0MtNUIgLyAleDVELTdFXG4gICAgICAgICAgICAgICAgICAgICAgIDsgVVMtQVNDSUkgY2hhcmFjdGVycyBleGNsdWRpbmcgQ1RMcyxcbiAgICAgICAgICAgICAgICAgICAgICAgOyB3aGl0ZXNwYWNlIERRVU9URSwgY29tbWEsIHNlbWljb2xvbixcbiAgICAgICAgICAgICAgICAgICAgICAgOyBhbmQgYmFja3NsYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVDb29raWVWYWx1ZSAodmFsdWUpIHtcbiAgZm9yIChjb25zdCBjaGFyIG9mIHZhbHVlKSB7XG4gICAgY29uc3QgY29kZSA9IGNoYXIuY2hhckNvZGVBdCgwKVxuXG4gICAgaWYgKFxuICAgICAgY29kZSA8IDB4MjEgfHwgLy8gZXhjbHVkZSBDVExzICgwLTMxKVxuICAgICAgY29kZSA9PT0gMHgyMiB8fFxuICAgICAgY29kZSA9PT0gMHgyQyB8fFxuICAgICAgY29kZSA9PT0gMHgzQiB8fFxuICAgICAgY29kZSA9PT0gMHg1QyB8fFxuICAgICAgY29kZSA+IDB4N0UgLy8gbm9uLWFzY2lpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaGVhZGVyIHZhbHVlJylcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBwYXRoLXZhbHVlICAgICAgICA9IDxhbnkgQ0hBUiBleGNlcHQgQ1RMcyBvciBcIjtcIj5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQ29va2llUGF0aCAocGF0aCkge1xuICBmb3IgKGNvbnN0IGNoYXIgb2YgcGF0aCkge1xuICAgIGNvbnN0IGNvZGUgPSBjaGFyLmNoYXJDb2RlQXQoMClcblxuICAgIGlmIChjb2RlIDwgMHgyMSB8fCBjaGFyID09PSAnOycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb29raWUgcGF0aCcpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogSSBoYXZlIG5vIGlkZWEgd2h5IHRoZXNlIHZhbHVlcyBhcmVuJ3QgYWxsb3dlZCB0byBiZSBob25lc3QsXG4gKiBidXQgRGVubyB0ZXN0cyB0aGVzZS4gLSBLaGFmcmFcbiAqIEBwYXJhbSB7c3RyaW5nfSBkb21haW5cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVDb29raWVEb21haW4gKGRvbWFpbikge1xuICBpZiAoXG4gICAgZG9tYWluLnN0YXJ0c1dpdGgoJy0nKSB8fFxuICAgIGRvbWFpbi5lbmRzV2l0aCgnLicpIHx8XG4gICAgZG9tYWluLmVuZHNXaXRoKCctJylcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvb2tpZSBkb21haW4nKVxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNzIzMSNzZWN0aW9uLTcuMS4xLjFcbiAqIEBwYXJhbSB7bnVtYmVyfERhdGV9IGRhdGVcbiAgSU1GLWZpeGRhdGUgID0gZGF5LW5hbWUgXCIsXCIgU1AgZGF0ZTEgU1AgdGltZS1vZi1kYXkgU1AgR01UXG4gIDsgZml4ZWQgbGVuZ3RoL3pvbmUvY2FwaXRhbGl6YXRpb24gc3Vic2V0IG9mIHRoZSBmb3JtYXRcbiAgOyBzZWUgU2VjdGlvbiAzLjMgb2YgW1JGQzUzMjJdXG5cbiAgZGF5LW5hbWUgICAgID0gJXg0RC42Ri42RSA7IFwiTW9uXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg1NC43NS42NSA7IFwiVHVlXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg1Ny42NS42NCA7IFwiV2VkXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg1NC42OC43NSA7IFwiVGh1XCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0Ni43Mi42OSA7IFwiRnJpXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg1My42MS43NCA7IFwiU2F0XCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg1My43NS42RSA7IFwiU3VuXCIsIGNhc2Utc2Vuc2l0aXZlXG4gIGRhdGUxICAgICAgICA9IGRheSBTUCBtb250aCBTUCB5ZWFyXG4gICAgICAgICAgICAgICAgICA7IGUuZy4sIDAyIEp1biAxOTgyXG5cbiAgZGF5ICAgICAgICAgID0gMkRJR0lUXG4gIG1vbnRoICAgICAgICA9ICV4NEEuNjEuNkUgOyBcIkphblwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NDYuNjUuNjIgOyBcIkZlYlwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NEQuNjEuNzIgOyBcIk1hclwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NDEuNzAuNzIgOyBcIkFwclwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NEQuNjEuNzkgOyBcIk1heVwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NEEuNzUuNkUgOyBcIkp1blwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NEEuNzUuNkMgOyBcIkp1bFwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NDEuNzUuNjcgOyBcIkF1Z1wiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NTMuNjUuNzAgOyBcIlNlcFwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NEYuNjMuNzQgOyBcIk9jdFwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NEUuNkYuNzYgOyBcIk5vdlwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NDQuNjUuNjMgOyBcIkRlY1wiLCBjYXNlLXNlbnNpdGl2ZVxuICB5ZWFyICAgICAgICAgPSA0RElHSVRcblxuICBHTVQgICAgICAgICAgPSAleDQ3LjRELjU0IDsgXCJHTVRcIiwgY2FzZS1zZW5zaXRpdmVcblxuICB0aW1lLW9mLWRheSAgPSBob3VyIFwiOlwiIG1pbnV0ZSBcIjpcIiBzZWNvbmRcbiAgICAgICAgICAgICAgOyAwMDowMDowMCAtIDIzOjU5OjYwIChsZWFwIHNlY29uZClcblxuICBob3VyICAgICAgICAgPSAyRElHSVRcbiAgbWludXRlICAgICAgID0gMkRJR0lUXG4gIHNlY29uZCAgICAgICA9IDJESUdJVFxuICovXG5mdW5jdGlvbiB0b0lNRkRhdGUgKGRhdGUpIHtcbiAgaWYgKHR5cGVvZiBkYXRlID09PSAnbnVtYmVyJykge1xuICAgIGRhdGUgPSBuZXcgRGF0ZShkYXRlKVxuICB9XG5cbiAgY29uc3QgZGF5cyA9IFtcbiAgICAnU3VuJywgJ01vbicsICdUdWUnLCAnV2VkJyxcbiAgICAnVGh1JywgJ0ZyaScsICdTYXQnXG4gIF1cblxuICBjb25zdCBtb250aHMgPSBbXG4gICAgJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJyxcbiAgICAnSnVsJywgJ0F1ZycsICdTZXAnLCAnT2N0JywgJ05vdicsICdEZWMnXG4gIF1cblxuICBjb25zdCBkYXlOYW1lID0gZGF5c1tkYXRlLmdldFVUQ0RheSgpXVxuICBjb25zdCBkYXkgPSBkYXRlLmdldFVUQ0RhdGUoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcbiAgY29uc3QgbW9udGggPSBtb250aHNbZGF0ZS5nZXRVVENNb250aCgpXVxuICBjb25zdCB5ZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpXG4gIGNvbnN0IGhvdXIgPSBkYXRlLmdldFVUQ0hvdXJzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpXG4gIGNvbnN0IG1pbnV0ZSA9IGRhdGUuZ2V0VVRDTWludXRlcygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKVxuICBjb25zdCBzZWNvbmQgPSBkYXRlLmdldFVUQ1NlY29uZHMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcblxuICByZXR1cm4gYCR7ZGF5TmFtZX0sICR7ZGF5fSAke21vbnRofSAke3llYXJ9ICR7aG91cn06JHttaW51dGV9OiR7c2Vjb25kfSBHTVRgXG59XG5cbi8qKlxuIG1heC1hZ2UtYXYgICAgICAgID0gXCJNYXgtQWdlPVwiIG5vbi16ZXJvLWRpZ2l0ICpESUdJVFxuICAgICAgICAgICAgICAgICAgICAgICA7IEluIHByYWN0aWNlLCBib3RoIGV4cGlyZXMtYXYgYW5kIG1heC1hZ2UtYXZcbiAgICAgICAgICAgICAgICAgICAgICAgOyBhcmUgbGltaXRlZCB0byBkYXRlcyByZXByZXNlbnRhYmxlIGJ5IHRoZVxuICAgICAgICAgICAgICAgICAgICAgICA7IHVzZXIgYWdlbnQuXG4gKiBAcGFyYW0ge251bWJlcn0gbWF4QWdlXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQ29va2llTWF4QWdlIChtYXhBZ2UpIHtcbiAgaWYgKG1heEFnZSA8IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29va2llIG1heC1hZ2UnKVxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNjI2NSNzZWN0aW9uLTQuMS4xXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbmRleCcpLkNvb2tpZX0gY29va2llXG4gKi9cbmZ1bmN0aW9uIHN0cmluZ2lmeSAoY29va2llKSB7XG4gIGlmIChjb29raWUubmFtZS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgdmFsaWRhdGVDb29raWVOYW1lKGNvb2tpZS5uYW1lKVxuICB2YWxpZGF0ZUNvb2tpZVZhbHVlKGNvb2tpZS52YWx1ZSlcblxuICBjb25zdCBvdXQgPSBbYCR7Y29va2llLm5hbWV9PSR7Y29va2llLnZhbHVlfWBdXG5cbiAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtY29va2llLXByZWZpeGVzLTAwI3NlY3Rpb24tMy4xXG4gIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLWNvb2tpZS1wcmVmaXhlcy0wMCNzZWN0aW9uLTMuMlxuICBpZiAoY29va2llLm5hbWUuc3RhcnRzV2l0aCgnX19TZWN1cmUtJykpIHtcbiAgICBjb29raWUuc2VjdXJlID0gdHJ1ZVxuICB9XG5cbiAgaWYgKGNvb2tpZS5uYW1lLnN0YXJ0c1dpdGgoJ19fSG9zdC0nKSkge1xuICAgIGNvb2tpZS5zZWN1cmUgPSB0cnVlXG4gICAgY29va2llLmRvbWFpbiA9IG51bGxcbiAgICBjb29raWUucGF0aCA9ICcvJ1xuICB9XG5cbiAgaWYgKGNvb2tpZS5zZWN1cmUpIHtcbiAgICBvdXQucHVzaCgnU2VjdXJlJylcbiAgfVxuXG4gIGlmIChjb29raWUuaHR0cE9ubHkpIHtcbiAgICBvdXQucHVzaCgnSHR0cE9ubHknKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBjb29raWUubWF4QWdlID09PSAnbnVtYmVyJykge1xuICAgIHZhbGlkYXRlQ29va2llTWF4QWdlKGNvb2tpZS5tYXhBZ2UpXG4gICAgb3V0LnB1c2goYE1heC1BZ2U9JHtjb29raWUubWF4QWdlfWApXG4gIH1cblxuICBpZiAoY29va2llLmRvbWFpbikge1xuICAgIHZhbGlkYXRlQ29va2llRG9tYWluKGNvb2tpZS5kb21haW4pXG4gICAgb3V0LnB1c2goYERvbWFpbj0ke2Nvb2tpZS5kb21haW59YClcbiAgfVxuXG4gIGlmIChjb29raWUucGF0aCkge1xuICAgIHZhbGlkYXRlQ29va2llUGF0aChjb29raWUucGF0aClcbiAgICBvdXQucHVzaChgUGF0aD0ke2Nvb2tpZS5wYXRofWApXG4gIH1cblxuICBpZiAoY29va2llLmV4cGlyZXMgJiYgY29va2llLmV4cGlyZXMudG9TdHJpbmcoKSAhPT0gJ0ludmFsaWQgRGF0ZScpIHtcbiAgICBvdXQucHVzaChgRXhwaXJlcz0ke3RvSU1GRGF0ZShjb29raWUuZXhwaXJlcyl9YClcbiAgfVxuXG4gIGlmIChjb29raWUuc2FtZVNpdGUpIHtcbiAgICBvdXQucHVzaChgU2FtZVNpdGU9JHtjb29raWUuc2FtZVNpdGV9YClcbiAgfVxuXG4gIGZvciAoY29uc3QgcGFydCBvZiBjb29raWUudW5wYXJzZWQpIHtcbiAgICBpZiAoIXBhcnQuaW5jbHVkZXMoJz0nKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHVucGFyc2VkJylcbiAgICB9XG5cbiAgICBjb25zdCBba2V5LCAuLi52YWx1ZV0gPSBwYXJ0LnNwbGl0KCc9JylcblxuICAgIG91dC5wdXNoKGAke2tleS50cmltKCl9PSR7dmFsdWUuam9pbignPScpfWApXG4gIH1cblxuICByZXR1cm4gb3V0LmpvaW4oJzsgJylcbn1cblxubGV0IGtIZWFkZXJzTGlzdE5vZGVcblxuZnVuY3Rpb24gZ2V0SGVhZGVyc0xpc3QgKGhlYWRlcnMpIHtcbiAgaWYgKGhlYWRlcnNba0hlYWRlcnNMaXN0XSkge1xuICAgIHJldHVybiBoZWFkZXJzW2tIZWFkZXJzTGlzdF1cbiAgfVxuXG4gIGlmICgha0hlYWRlcnNMaXN0Tm9kZSkge1xuICAgIGtIZWFkZXJzTGlzdE5vZGUgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGhlYWRlcnMpLmZpbmQoXG4gICAgICAoc3ltYm9sKSA9PiBzeW1ib2wuZGVzY3JpcHRpb24gPT09ICdoZWFkZXJzIGxpc3QnXG4gICAgKVxuXG4gICAgYXNzZXJ0KGtIZWFkZXJzTGlzdE5vZGUsICdIZWFkZXJzIGNhbm5vdCBiZSBwYXJzZWQnKVxuICB9XG5cbiAgY29uc3QgaGVhZGVyc0xpc3QgPSBoZWFkZXJzW2tIZWFkZXJzTGlzdE5vZGVdXG4gIGFzc2VydChoZWFkZXJzTGlzdClcblxuICByZXR1cm4gaGVhZGVyc0xpc3Rcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGlzQ1RMRXhjbHVkaW5nSHRhYixcbiAgc3RyaW5naWZ5LFxuICBnZXRIZWFkZXJzTGlzdFxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBtYXhOYW1lVmFsdWVQYWlyU2l6ZSwgbWF4QXR0cmlidXRlVmFsdWVTaXplIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7IGlzQ1RMRXhjbHVkaW5nSHRhYiB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2RhdGFVUkwnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUGFyc2VzIHRoZSBmaWVsZC12YWx1ZSBhdHRyaWJ1dGVzIG9mIGEgc2V0LWNvb2tpZSBoZWFkZXIgc3RyaW5nLlxuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1yZmM2MjY1YmlzI3NlY3Rpb24tNS40XG4gKiBAcGFyYW0ge3N0cmluZ30gaGVhZGVyXG4gKiBAcmV0dXJucyBpZiB0aGUgaGVhZGVyIGlzIGludmFsaWQsIG51bGwgd2lsbCBiZSByZXR1cm5lZFxuICovXG5mdW5jdGlvbiBwYXJzZVNldENvb2tpZSAoaGVhZGVyKSB7XG4gIC8vIDEuIElmIHRoZSBzZXQtY29va2llLXN0cmluZyBjb250YWlucyBhICV4MDAtMDggLyAleDBBLTFGIC8gJXg3RlxuICAvLyAgICBjaGFyYWN0ZXIgKENUTCBjaGFyYWN0ZXJzIGV4Y2x1ZGluZyBIVEFCKTogQWJvcnQgdGhlc2Ugc3RlcHMgYW5kXG4gIC8vICAgIGlnbm9yZSB0aGUgc2V0LWNvb2tpZS1zdHJpbmcgZW50aXJlbHkuXG4gIGlmIChpc0NUTEV4Y2x1ZGluZ0h0YWIoaGVhZGVyKSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBsZXQgbmFtZVZhbHVlUGFpciA9ICcnXG4gIGxldCB1bnBhcnNlZEF0dHJpYnV0ZXMgPSAnJ1xuICBsZXQgbmFtZSA9ICcnXG4gIGxldCB2YWx1ZSA9ICcnXG5cbiAgLy8gMi4gSWYgdGhlIHNldC1jb29raWUtc3RyaW5nIGNvbnRhaW5zIGEgJXgzQiAoXCI7XCIpIGNoYXJhY3RlcjpcbiAgaWYgKGhlYWRlci5pbmNsdWRlcygnOycpKSB7XG4gICAgLy8gMS4gVGhlIG5hbWUtdmFsdWUtcGFpciBzdHJpbmcgY29uc2lzdHMgb2YgdGhlIGNoYXJhY3RlcnMgdXAgdG8sXG4gICAgLy8gICAgYnV0IG5vdCBpbmNsdWRpbmcsIHRoZSBmaXJzdCAleDNCIChcIjtcIiksIGFuZCB0aGUgdW5wYXJzZWQtXG4gICAgLy8gICAgYXR0cmlidXRlcyBjb25zaXN0IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHNldC1jb29raWUtc3RyaW5nXG4gICAgLy8gICAgKGluY2x1ZGluZyB0aGUgJXgzQiAoXCI7XCIpIGluIHF1ZXN0aW9uKS5cbiAgICBjb25zdCBwb3NpdGlvbiA9IHsgcG9zaXRpb246IDAgfVxuXG4gICAgbmFtZVZhbHVlUGFpciA9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0KCc7JywgaGVhZGVyLCBwb3NpdGlvbilcbiAgICB1bnBhcnNlZEF0dHJpYnV0ZXMgPSBoZWFkZXIuc2xpY2UocG9zaXRpb24ucG9zaXRpb24pXG4gIH0gZWxzZSB7XG4gICAgLy8gT3RoZXJ3aXNlOlxuXG4gICAgLy8gMS4gVGhlIG5hbWUtdmFsdWUtcGFpciBzdHJpbmcgY29uc2lzdHMgb2YgYWxsIHRoZSBjaGFyYWN0ZXJzXG4gICAgLy8gICAgY29udGFpbmVkIGluIHRoZSBzZXQtY29va2llLXN0cmluZywgYW5kIHRoZSB1bnBhcnNlZC1cbiAgICAvLyAgICBhdHRyaWJ1dGVzIGlzIHRoZSBlbXB0eSBzdHJpbmcuXG4gICAgbmFtZVZhbHVlUGFpciA9IGhlYWRlclxuICB9XG5cbiAgLy8gMy4gSWYgdGhlIG5hbWUtdmFsdWUtcGFpciBzdHJpbmcgbGFja3MgYSAleDNEIChcIj1cIikgY2hhcmFjdGVyLCB0aGVuXG4gIC8vICAgIHRoZSBuYW1lIHN0cmluZyBpcyBlbXB0eSwgYW5kIHRoZSB2YWx1ZSBzdHJpbmcgaXMgdGhlIHZhbHVlIG9mXG4gIC8vICAgIG5hbWUtdmFsdWUtcGFpci5cbiAgaWYgKCFuYW1lVmFsdWVQYWlyLmluY2x1ZGVzKCc9JykpIHtcbiAgICB2YWx1ZSA9IG5hbWVWYWx1ZVBhaXJcbiAgfSBlbHNlIHtcbiAgICAvLyAgICBPdGhlcndpc2UsIHRoZSBuYW1lIHN0cmluZyBjb25zaXN0cyBvZiB0aGUgY2hhcmFjdGVycyB1cCB0bywgYnV0XG4gICAgLy8gICAgbm90IGluY2x1ZGluZywgdGhlIGZpcnN0ICV4M0QgKFwiPVwiKSBjaGFyYWN0ZXIsIGFuZCB0aGUgKHBvc3NpYmx5XG4gICAgLy8gICAgZW1wdHkpIHZhbHVlIHN0cmluZyBjb25zaXN0cyBvZiB0aGUgY2hhcmFjdGVycyBhZnRlciB0aGUgZmlyc3RcbiAgICAvLyAgICAleDNEIChcIj1cIikgY2hhcmFjdGVyLlxuICAgIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogMCB9XG4gICAgbmFtZSA9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0KFxuICAgICAgJz0nLFxuICAgICAgbmFtZVZhbHVlUGFpcixcbiAgICAgIHBvc2l0aW9uXG4gICAgKVxuICAgIHZhbHVlID0gbmFtZVZhbHVlUGFpci5zbGljZShwb3NpdGlvbi5wb3NpdGlvbiArIDEpXG4gIH1cblxuICAvLyA0LiBSZW1vdmUgYW55IGxlYWRpbmcgb3IgdHJhaWxpbmcgV1NQIGNoYXJhY3RlcnMgZnJvbSB0aGUgbmFtZVxuICAvLyAgICBzdHJpbmcgYW5kIHRoZSB2YWx1ZSBzdHJpbmcuXG4gIG5hbWUgPSBuYW1lLnRyaW0oKVxuICB2YWx1ZSA9IHZhbHVlLnRyaW0oKVxuXG4gIC8vIDUuIElmIHRoZSBzdW0gb2YgdGhlIGxlbmd0aHMgb2YgdGhlIG5hbWUgc3RyaW5nIGFuZCB0aGUgdmFsdWUgc3RyaW5nXG4gIC8vICAgIGlzIG1vcmUgdGhhbiA0MDk2IG9jdGV0cywgYWJvcnQgdGhlc2Ugc3RlcHMgYW5kIGlnbm9yZSB0aGUgc2V0LVxuICAvLyAgICBjb29raWUtc3RyaW5nIGVudGlyZWx5LlxuICBpZiAobmFtZS5sZW5ndGggKyB2YWx1ZS5sZW5ndGggPiBtYXhOYW1lVmFsdWVQYWlyU2l6ZSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvLyA2LiBUaGUgY29va2llLW5hbWUgaXMgdGhlIG5hbWUgc3RyaW5nLCBhbmQgdGhlIGNvb2tpZS12YWx1ZSBpcyB0aGVcbiAgLy8gICAgdmFsdWUgc3RyaW5nLlxuICByZXR1cm4ge1xuICAgIG5hbWUsIHZhbHVlLCAuLi5wYXJzZVVucGFyc2VkQXR0cmlidXRlcyh1bnBhcnNlZEF0dHJpYnV0ZXMpXG4gIH1cbn1cblxuLyoqXG4gKiBQYXJzZXMgdGhlIHJlbWFpbmluZyBhdHRyaWJ1dGVzIG9mIGEgc2V0LWNvb2tpZSBoZWFkZXJcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtcmZjNjI2NWJpcyNzZWN0aW9uLTUuNFxuICogQHBhcmFtIHtzdHJpbmd9IHVucGFyc2VkQXR0cmlidXRlc1xuICogQHBhcmFtIHtbT2JqZWN0LjxzdHJpbmcsIHVua25vd24+XT17fX0gY29va2llQXR0cmlidXRlTGlzdFxuICovXG5mdW5jdGlvbiBwYXJzZVVucGFyc2VkQXR0cmlidXRlcyAodW5wYXJzZWRBdHRyaWJ1dGVzLCBjb29raWVBdHRyaWJ1dGVMaXN0ID0ge30pIHtcbiAgLy8gMS4gSWYgdGhlIHVucGFyc2VkLWF0dHJpYnV0ZXMgc3RyaW5nIGlzIGVtcHR5LCBza2lwIHRoZSByZXN0IG9mXG4gIC8vICAgIHRoZXNlIHN0ZXBzLlxuICBpZiAodW5wYXJzZWRBdHRyaWJ1dGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBjb29raWVBdHRyaWJ1dGVMaXN0XG4gIH1cblxuICAvLyAyLiBEaXNjYXJkIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIHVucGFyc2VkLWF0dHJpYnV0ZXMgKHdoaWNoXG4gIC8vICAgIHdpbGwgYmUgYSAleDNCIChcIjtcIikgY2hhcmFjdGVyKS5cbiAgYXNzZXJ0KHVucGFyc2VkQXR0cmlidXRlc1swXSA9PT0gJzsnKVxuICB1bnBhcnNlZEF0dHJpYnV0ZXMgPSB1bnBhcnNlZEF0dHJpYnV0ZXMuc2xpY2UoMSlcblxuICBsZXQgY29va2llQXYgPSAnJ1xuXG4gIC8vIDMuIElmIHRoZSByZW1haW5pbmcgdW5wYXJzZWQtYXR0cmlidXRlcyBjb250YWlucyBhICV4M0IgKFwiO1wiKVxuICAvLyAgICBjaGFyYWN0ZXI6XG4gIGlmICh1bnBhcnNlZEF0dHJpYnV0ZXMuaW5jbHVkZXMoJzsnKSkge1xuICAgIC8vIDEuIENvbnN1bWUgdGhlIGNoYXJhY3RlcnMgb2YgdGhlIHVucGFyc2VkLWF0dHJpYnV0ZXMgdXAgdG8sIGJ1dFxuICAgIC8vICAgIG5vdCBpbmNsdWRpbmcsIHRoZSBmaXJzdCAleDNCIChcIjtcIikgY2hhcmFjdGVyLlxuICAgIGNvb2tpZUF2ID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoXG4gICAgICAnOycsXG4gICAgICB1bnBhcnNlZEF0dHJpYnV0ZXMsXG4gICAgICB7IHBvc2l0aW9uOiAwIH1cbiAgICApXG4gICAgdW5wYXJzZWRBdHRyaWJ1dGVzID0gdW5wYXJzZWRBdHRyaWJ1dGVzLnNsaWNlKGNvb2tpZUF2Lmxlbmd0aClcbiAgfSBlbHNlIHtcbiAgICAvLyBPdGhlcndpc2U6XG5cbiAgICAvLyAxLiBDb25zdW1lIHRoZSByZW1haW5kZXIgb2YgdGhlIHVucGFyc2VkLWF0dHJpYnV0ZXMuXG4gICAgY29va2llQXYgPSB1bnBhcnNlZEF0dHJpYnV0ZXNcbiAgICB1bnBhcnNlZEF0dHJpYnV0ZXMgPSAnJ1xuICB9XG5cbiAgLy8gTGV0IHRoZSBjb29raWUtYXYgc3RyaW5nIGJlIHRoZSBjaGFyYWN0ZXJzIGNvbnN1bWVkIGluIHRoaXMgc3RlcC5cblxuICBsZXQgYXR0cmlidXRlTmFtZSA9ICcnXG4gIGxldCBhdHRyaWJ1dGVWYWx1ZSA9ICcnXG5cbiAgLy8gNC4gSWYgdGhlIGNvb2tpZS1hdiBzdHJpbmcgY29udGFpbnMgYSAleDNEIChcIj1cIikgY2hhcmFjdGVyOlxuICBpZiAoY29va2llQXYuaW5jbHVkZXMoJz0nKSkge1xuICAgIC8vIDEuIFRoZSAocG9zc2libHkgZW1wdHkpIGF0dHJpYnV0ZS1uYW1lIHN0cmluZyBjb25zaXN0cyBvZiB0aGVcbiAgICAvLyAgICBjaGFyYWN0ZXJzIHVwIHRvLCBidXQgbm90IGluY2x1ZGluZywgdGhlIGZpcnN0ICV4M0QgKFwiPVwiKVxuICAgIC8vICAgIGNoYXJhY3RlciwgYW5kIHRoZSAocG9zc2libHkgZW1wdHkpIGF0dHJpYnV0ZS12YWx1ZSBzdHJpbmdcbiAgICAvLyAgICBjb25zaXN0cyBvZiB0aGUgY2hhcmFjdGVycyBhZnRlciB0aGUgZmlyc3QgJXgzRCAoXCI9XCIpXG4gICAgLy8gICAgY2hhcmFjdGVyLlxuICAgIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogMCB9XG5cbiAgICBhdHRyaWJ1dGVOYW1lID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoXG4gICAgICAnPScsXG4gICAgICBjb29raWVBdixcbiAgICAgIHBvc2l0aW9uXG4gICAgKVxuICAgIGF0dHJpYnV0ZVZhbHVlID0gY29va2llQXYuc2xpY2UocG9zaXRpb24ucG9zaXRpb24gKyAxKVxuICB9IGVsc2Uge1xuICAgIC8vIE90aGVyd2lzZTpcblxuICAgIC8vIDEuIFRoZSBhdHRyaWJ1dGUtbmFtZSBzdHJpbmcgY29uc2lzdHMgb2YgdGhlIGVudGlyZSBjb29raWUtYXZcbiAgICAvLyAgICBzdHJpbmcsIGFuZCB0aGUgYXR0cmlidXRlLXZhbHVlIHN0cmluZyBpcyBlbXB0eS5cbiAgICBhdHRyaWJ1dGVOYW1lID0gY29va2llQXZcbiAgfVxuXG4gIC8vIDUuIFJlbW92ZSBhbnkgbGVhZGluZyBvciB0cmFpbGluZyBXU1AgY2hhcmFjdGVycyBmcm9tIHRoZSBhdHRyaWJ1dGUtXG4gIC8vICAgIG5hbWUgc3RyaW5nIGFuZCB0aGUgYXR0cmlidXRlLXZhbHVlIHN0cmluZy5cbiAgYXR0cmlidXRlTmFtZSA9IGF0dHJpYnV0ZU5hbWUudHJpbSgpXG4gIGF0dHJpYnV0ZVZhbHVlID0gYXR0cmlidXRlVmFsdWUudHJpbSgpXG5cbiAgLy8gNi4gSWYgdGhlIGF0dHJpYnV0ZS12YWx1ZSBpcyBsb25nZXIgdGhhbiAxMDI0IG9jdGV0cywgaWdub3JlIHRoZVxuICAvLyAgICBjb29raWUtYXYgc3RyaW5nIGFuZCByZXR1cm4gdG8gU3RlcCAxIG9mIHRoaXMgYWxnb3JpdGhtLlxuICBpZiAoYXR0cmlidXRlVmFsdWUubGVuZ3RoID4gbWF4QXR0cmlidXRlVmFsdWVTaXplKSB7XG4gICAgcmV0dXJuIHBhcnNlVW5wYXJzZWRBdHRyaWJ1dGVzKHVucGFyc2VkQXR0cmlidXRlcywgY29va2llQXR0cmlidXRlTGlzdClcbiAgfVxuXG4gIC8vIDcuIFByb2Nlc3MgdGhlIGF0dHJpYnV0ZS1uYW1lIGFuZCBhdHRyaWJ1dGUtdmFsdWUgYWNjb3JkaW5nIHRvIHRoZVxuICAvLyAgICByZXF1aXJlbWVudHMgaW4gdGhlIGZvbGxvd2luZyBzdWJzZWN0aW9ucy4gIChOb3RpY2UgdGhhdFxuICAvLyAgICBhdHRyaWJ1dGVzIHdpdGggdW5yZWNvZ25pemVkIGF0dHJpYnV0ZS1uYW1lcyBhcmUgaWdub3JlZC4pXG4gIGNvbnN0IGF0dHJpYnV0ZU5hbWVMb3dlcmNhc2UgPSBhdHRyaWJ1dGVOYW1lLnRvTG93ZXJDYXNlKClcblxuICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1yZmM2MjY1YmlzI3NlY3Rpb24tNS40LjFcbiAgLy8gSWYgdGhlIGF0dHJpYnV0ZS1uYW1lIGNhc2UtaW5zZW5zaXRpdmVseSBtYXRjaGVzIHRoZSBzdHJpbmdcbiAgLy8gXCJFeHBpcmVzXCIsIHRoZSB1c2VyIGFnZW50IE1VU1QgcHJvY2VzcyB0aGUgY29va2llLWF2IGFzIGZvbGxvd3MuXG4gIGlmIChhdHRyaWJ1dGVOYW1lTG93ZXJjYXNlID09PSAnZXhwaXJlcycpIHtcbiAgICAvLyAxLiBMZXQgdGhlIGV4cGlyeS10aW1lIGJlIHRoZSByZXN1bHQgb2YgcGFyc2luZyB0aGUgYXR0cmlidXRlLXZhbHVlXG4gICAgLy8gICAgYXMgY29va2llLWRhdGUgKHNlZSBTZWN0aW9uIDUuMS4xKS5cbiAgICBjb25zdCBleHBpcnlUaW1lID0gbmV3IERhdGUoYXR0cmlidXRlVmFsdWUpXG5cbiAgICAvLyAyLiBJZiB0aGUgYXR0cmlidXRlLXZhbHVlIGZhaWxlZCB0byBwYXJzZSBhcyBhIGNvb2tpZSBkYXRlLCBpZ25vcmVcbiAgICAvLyAgICB0aGUgY29va2llLWF2LlxuXG4gICAgY29va2llQXR0cmlidXRlTGlzdC5leHBpcmVzID0gZXhwaXJ5VGltZVxuICB9IGVsc2UgaWYgKGF0dHJpYnV0ZU5hbWVMb3dlcmNhc2UgPT09ICdtYXgtYWdlJykge1xuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjQuMlxuICAgIC8vIElmIHRoZSBhdHRyaWJ1dGUtbmFtZSBjYXNlLWluc2Vuc2l0aXZlbHkgbWF0Y2hlcyB0aGUgc3RyaW5nIFwiTWF4LVxuICAgIC8vIEFnZVwiLCB0aGUgdXNlciBhZ2VudCBNVVNUIHByb2Nlc3MgdGhlIGNvb2tpZS1hdiBhcyBmb2xsb3dzLlxuXG4gICAgLy8gMS4gSWYgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgYXR0cmlidXRlLXZhbHVlIGlzIG5vdCBhIERJR0lUIG9yIGFcbiAgICAvLyAgICBcIi1cIiBjaGFyYWN0ZXIsIGlnbm9yZSB0aGUgY29va2llLWF2LlxuICAgIGNvbnN0IGNoYXJDb2RlID0gYXR0cmlidXRlVmFsdWUuY2hhckNvZGVBdCgwKVxuXG4gICAgaWYgKChjaGFyQ29kZSA8IDQ4IHx8IGNoYXJDb2RlID4gNTcpICYmIGF0dHJpYnV0ZVZhbHVlWzBdICE9PSAnLScpIHtcbiAgICAgIHJldHVybiBwYXJzZVVucGFyc2VkQXR0cmlidXRlcyh1bnBhcnNlZEF0dHJpYnV0ZXMsIGNvb2tpZUF0dHJpYnV0ZUxpc3QpXG4gICAgfVxuXG4gICAgLy8gMi4gSWYgdGhlIHJlbWFpbmRlciBvZiBhdHRyaWJ1dGUtdmFsdWUgY29udGFpbnMgYSBub24tRElHSVRcbiAgICAvLyAgICBjaGFyYWN0ZXIsIGlnbm9yZSB0aGUgY29va2llLWF2LlxuICAgIGlmICghL15cXGQrJC8udGVzdChhdHRyaWJ1dGVWYWx1ZSkpIHtcbiAgICAgIHJldHVybiBwYXJzZVVucGFyc2VkQXR0cmlidXRlcyh1bnBhcnNlZEF0dHJpYnV0ZXMsIGNvb2tpZUF0dHJpYnV0ZUxpc3QpXG4gICAgfVxuXG4gICAgLy8gMy4gTGV0IGRlbHRhLXNlY29uZHMgYmUgdGhlIGF0dHJpYnV0ZS12YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gaW50ZWdlci5cbiAgICBjb25zdCBkZWx0YVNlY29uZHMgPSBOdW1iZXIoYXR0cmlidXRlVmFsdWUpXG5cbiAgICAvLyA0LiBMZXQgY29va2llLWFnZS1saW1pdCBiZSB0aGUgbWF4aW11bSBhZ2Ugb2YgdGhlIGNvb2tpZSAod2hpY2hcbiAgICAvLyAgICBTSE9VTEQgYmUgNDAwIGRheXMgb3IgbGVzcywgc2VlIFNlY3Rpb24gNC4xLjIuMikuXG5cbiAgICAvLyA1LiBTZXQgZGVsdGEtc2Vjb25kcyB0byB0aGUgc21hbGxlciBvZiBpdHMgcHJlc2VudCB2YWx1ZSBhbmQgY29va2llLVxuICAgIC8vICAgIGFnZS1saW1pdC5cbiAgICAvLyBkZWx0YVNlY29uZHMgPSBNYXRoLm1pbihkZWx0YVNlY29uZHMgKiAxMDAwLCBtYXhFeHBpcmVzTXMpXG5cbiAgICAvLyA2LiBJZiBkZWx0YS1zZWNvbmRzIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB6ZXJvICgwKSwgbGV0IGV4cGlyeS1cbiAgICAvLyAgICB0aW1lIGJlIHRoZSBlYXJsaWVzdCByZXByZXNlbnRhYmxlIGRhdGUgYW5kIHRpbWUuICBPdGhlcndpc2UsIGxldFxuICAgIC8vICAgIHRoZSBleHBpcnktdGltZSBiZSB0aGUgY3VycmVudCBkYXRlIGFuZCB0aW1lIHBsdXMgZGVsdGEtc2Vjb25kc1xuICAgIC8vICAgIHNlY29uZHMuXG4gICAgLy8gY29uc3QgZXhwaXJ5VGltZSA9IGRlbHRhU2Vjb25kcyA8PSAwID8gRGF0ZS5ub3coKSA6IERhdGUubm93KCkgKyBkZWx0YVNlY29uZHNcblxuICAgIC8vIDcuIEFwcGVuZCBhbiBhdHRyaWJ1dGUgdG8gdGhlIGNvb2tpZS1hdHRyaWJ1dGUtbGlzdCB3aXRoIGFuXG4gICAgLy8gICAgYXR0cmlidXRlLW5hbWUgb2YgTWF4LUFnZSBhbmQgYW4gYXR0cmlidXRlLXZhbHVlIG9mIGV4cGlyeS10aW1lLlxuICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3QubWF4QWdlID0gZGVsdGFTZWNvbmRzXG4gIH0gZWxzZSBpZiAoYXR0cmlidXRlTmFtZUxvd2VyY2FzZSA9PT0gJ2RvbWFpbicpIHtcbiAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1yZmM2MjY1YmlzI3NlY3Rpb24tNS40LjNcbiAgICAvLyBJZiB0aGUgYXR0cmlidXRlLW5hbWUgY2FzZS1pbnNlbnNpdGl2ZWx5IG1hdGNoZXMgdGhlIHN0cmluZyBcIkRvbWFpblwiLFxuICAgIC8vIHRoZSB1c2VyIGFnZW50IE1VU1QgcHJvY2VzcyB0aGUgY29va2llLWF2IGFzIGZvbGxvd3MuXG5cbiAgICAvLyAxLiBMZXQgY29va2llLWRvbWFpbiBiZSB0aGUgYXR0cmlidXRlLXZhbHVlLlxuICAgIGxldCBjb29raWVEb21haW4gPSBhdHRyaWJ1dGVWYWx1ZVxuXG4gICAgLy8gMi4gSWYgY29va2llLWRvbWFpbiBzdGFydHMgd2l0aCAleDJFIChcIi5cIiksIGxldCBjb29raWUtZG9tYWluIGJlXG4gICAgLy8gICAgY29va2llLWRvbWFpbiB3aXRob3V0IGl0cyBsZWFkaW5nICV4MkUgKFwiLlwiKS5cbiAgICBpZiAoY29va2llRG9tYWluWzBdID09PSAnLicpIHtcbiAgICAgIGNvb2tpZURvbWFpbiA9IGNvb2tpZURvbWFpbi5zbGljZSgxKVxuICAgIH1cblxuICAgIC8vIDMuIENvbnZlcnQgdGhlIGNvb2tpZS1kb21haW4gdG8gbG93ZXIgY2FzZS5cbiAgICBjb29raWVEb21haW4gPSBjb29raWVEb21haW4udG9Mb3dlckNhc2UoKVxuXG4gICAgLy8gNC4gQXBwZW5kIGFuIGF0dHJpYnV0ZSB0byB0aGUgY29va2llLWF0dHJpYnV0ZS1saXN0IHdpdGggYW5cbiAgICAvLyAgICBhdHRyaWJ1dGUtbmFtZSBvZiBEb21haW4gYW5kIGFuIGF0dHJpYnV0ZS12YWx1ZSBvZiBjb29raWUtZG9tYWluLlxuICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3QuZG9tYWluID0gY29va2llRG9tYWluXG4gIH0gZWxzZSBpZiAoYXR0cmlidXRlTmFtZUxvd2VyY2FzZSA9PT0gJ3BhdGgnKSB7XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtcmZjNjI2NWJpcyNzZWN0aW9uLTUuNC40XG4gICAgLy8gSWYgdGhlIGF0dHJpYnV0ZS1uYW1lIGNhc2UtaW5zZW5zaXRpdmVseSBtYXRjaGVzIHRoZSBzdHJpbmcgXCJQYXRoXCIsXG4gICAgLy8gdGhlIHVzZXIgYWdlbnQgTVVTVCBwcm9jZXNzIHRoZSBjb29raWUtYXYgYXMgZm9sbG93cy5cblxuICAgIC8vIDEuIElmIHRoZSBhdHRyaWJ1dGUtdmFsdWUgaXMgZW1wdHkgb3IgaWYgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGVcbiAgICAvLyAgICBhdHRyaWJ1dGUtdmFsdWUgaXMgbm90ICV4MkYgKFwiL1wiKTpcbiAgICBsZXQgY29va2llUGF0aCA9ICcnXG4gICAgaWYgKGF0dHJpYnV0ZVZhbHVlLmxlbmd0aCA9PT0gMCB8fCBhdHRyaWJ1dGVWYWx1ZVswXSAhPT0gJy8nKSB7XG4gICAgICAvLyAxLiBMZXQgY29va2llLXBhdGggYmUgdGhlIGRlZmF1bHQtcGF0aC5cbiAgICAgIGNvb2tpZVBhdGggPSAnLydcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT3RoZXJ3aXNlOlxuXG4gICAgICAvLyAxLiBMZXQgY29va2llLXBhdGggYmUgdGhlIGF0dHJpYnV0ZS12YWx1ZS5cbiAgICAgIGNvb2tpZVBhdGggPSBhdHRyaWJ1dGVWYWx1ZVxuICAgIH1cblxuICAgIC8vIDIuIEFwcGVuZCBhbiBhdHRyaWJ1dGUgdG8gdGhlIGNvb2tpZS1hdHRyaWJ1dGUtbGlzdCB3aXRoIGFuXG4gICAgLy8gICAgYXR0cmlidXRlLW5hbWUgb2YgUGF0aCBhbmQgYW4gYXR0cmlidXRlLXZhbHVlIG9mIGNvb2tpZS1wYXRoLlxuICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3QucGF0aCA9IGNvb2tpZVBhdGhcbiAgfSBlbHNlIGlmIChhdHRyaWJ1dGVOYW1lTG93ZXJjYXNlID09PSAnc2VjdXJlJykge1xuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjQuNVxuICAgIC8vIElmIHRoZSBhdHRyaWJ1dGUtbmFtZSBjYXNlLWluc2Vuc2l0aXZlbHkgbWF0Y2hlcyB0aGUgc3RyaW5nIFwiU2VjdXJlXCIsXG4gICAgLy8gdGhlIHVzZXIgYWdlbnQgTVVTVCBhcHBlbmQgYW4gYXR0cmlidXRlIHRvIHRoZSBjb29raWUtYXR0cmlidXRlLWxpc3RcbiAgICAvLyB3aXRoIGFuIGF0dHJpYnV0ZS1uYW1lIG9mIFNlY3VyZSBhbmQgYW4gZW1wdHkgYXR0cmlidXRlLXZhbHVlLlxuXG4gICAgY29va2llQXR0cmlidXRlTGlzdC5zZWN1cmUgPSB0cnVlXG4gIH0gZWxzZSBpZiAoYXR0cmlidXRlTmFtZUxvd2VyY2FzZSA9PT0gJ2h0dHBvbmx5Jykge1xuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjQuNlxuICAgIC8vIElmIHRoZSBhdHRyaWJ1dGUtbmFtZSBjYXNlLWluc2Vuc2l0aXZlbHkgbWF0Y2hlcyB0aGUgc3RyaW5nXG4gICAgLy8gXCJIdHRwT25seVwiLCB0aGUgdXNlciBhZ2VudCBNVVNUIGFwcGVuZCBhbiBhdHRyaWJ1dGUgdG8gdGhlIGNvb2tpZS1cbiAgICAvLyBhdHRyaWJ1dGUtbGlzdCB3aXRoIGFuIGF0dHJpYnV0ZS1uYW1lIG9mIEh0dHBPbmx5IGFuZCBhbiBlbXB0eVxuICAgIC8vIGF0dHJpYnV0ZS12YWx1ZS5cblxuICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3QuaHR0cE9ubHkgPSB0cnVlXG4gIH0gZWxzZSBpZiAoYXR0cmlidXRlTmFtZUxvd2VyY2FzZSA9PT0gJ3NhbWVzaXRlJykge1xuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjQuN1xuICAgIC8vIElmIHRoZSBhdHRyaWJ1dGUtbmFtZSBjYXNlLWluc2Vuc2l0aXZlbHkgbWF0Y2hlcyB0aGUgc3RyaW5nXG4gICAgLy8gXCJTYW1lU2l0ZVwiLCB0aGUgdXNlciBhZ2VudCBNVVNUIHByb2Nlc3MgdGhlIGNvb2tpZS1hdiBhcyBmb2xsb3dzOlxuXG4gICAgLy8gMS4gTGV0IGVuZm9yY2VtZW50IGJlIFwiRGVmYXVsdFwiLlxuICAgIGxldCBlbmZvcmNlbWVudCA9ICdEZWZhdWx0J1xuXG4gICAgY29uc3QgYXR0cmlidXRlVmFsdWVMb3dlcmNhc2UgPSBhdHRyaWJ1dGVWYWx1ZS50b0xvd2VyQ2FzZSgpXG4gICAgLy8gMi4gSWYgY29va2llLWF2J3MgYXR0cmlidXRlLXZhbHVlIGlzIGEgY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBmb3JcbiAgICAvLyAgICBcIk5vbmVcIiwgc2V0IGVuZm9yY2VtZW50IHRvIFwiTm9uZVwiLlxuICAgIGlmIChhdHRyaWJ1dGVWYWx1ZUxvd2VyY2FzZS5pbmNsdWRlcygnbm9uZScpKSB7XG4gICAgICBlbmZvcmNlbWVudCA9ICdOb25lJ1xuICAgIH1cblxuICAgIC8vIDMuIElmIGNvb2tpZS1hdidzIGF0dHJpYnV0ZS12YWx1ZSBpcyBhIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yXG4gICAgLy8gICAgXCJTdHJpY3RcIiwgc2V0IGVuZm9yY2VtZW50IHRvIFwiU3RyaWN0XCIuXG4gICAgaWYgKGF0dHJpYnV0ZVZhbHVlTG93ZXJjYXNlLmluY2x1ZGVzKCdzdHJpY3QnKSkge1xuICAgICAgZW5mb3JjZW1lbnQgPSAnU3RyaWN0J1xuICAgIH1cblxuICAgIC8vIDQuIElmIGNvb2tpZS1hdidzIGF0dHJpYnV0ZS12YWx1ZSBpcyBhIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yXG4gICAgLy8gICAgXCJMYXhcIiwgc2V0IGVuZm9yY2VtZW50IHRvIFwiTGF4XCIuXG4gICAgaWYgKGF0dHJpYnV0ZVZhbHVlTG93ZXJjYXNlLmluY2x1ZGVzKCdsYXgnKSkge1xuICAgICAgZW5mb3JjZW1lbnQgPSAnTGF4J1xuICAgIH1cblxuICAgIC8vIDUuIEFwcGVuZCBhbiBhdHRyaWJ1dGUgdG8gdGhlIGNvb2tpZS1hdHRyaWJ1dGUtbGlzdCB3aXRoIGFuXG4gICAgLy8gICAgYXR0cmlidXRlLW5hbWUgb2YgXCJTYW1lU2l0ZVwiIGFuZCBhbiBhdHRyaWJ1dGUtdmFsdWUgb2ZcbiAgICAvLyAgICBlbmZvcmNlbWVudC5cbiAgICBjb29raWVBdHRyaWJ1dGVMaXN0LnNhbWVTaXRlID0gZW5mb3JjZW1lbnRcbiAgfSBlbHNlIHtcbiAgICBjb29raWVBdHRyaWJ1dGVMaXN0LnVucGFyc2VkID8/PSBbXVxuXG4gICAgY29va2llQXR0cmlidXRlTGlzdC51bnBhcnNlZC5wdXNoKGAke2F0dHJpYnV0ZU5hbWV9PSR7YXR0cmlidXRlVmFsdWV9YClcbiAgfVxuXG4gIC8vIDguIFJldHVybiB0byBTdGVwIDEgb2YgdGhpcyBhbGdvcml0aG0uXG4gIHJldHVybiBwYXJzZVVucGFyc2VkQXR0cmlidXRlcyh1bnBhcnNlZEF0dHJpYnV0ZXMsIGNvb2tpZUF0dHJpYnV0ZUxpc3QpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBwYXJzZVNldENvb2tpZSxcbiAgcGFyc2VVbnBhcnNlZEF0dHJpYnV0ZXNcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgcGFyc2VTZXRDb29raWUgfSA9IHJlcXVpcmUoJy4vcGFyc2UnKVxuY29uc3QgeyBzdHJpbmdpZnksIGdldEhlYWRlcnNMaXN0IH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3dlYmlkbCcpXG5jb25zdCB7IEhlYWRlcnMgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2hlYWRlcnMnKVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IENvb2tpZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IG5hbWVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2YWx1ZVxuICogQHByb3BlcnR5IHtEYXRlfG51bWJlcnx1bmRlZmluZWR9IGV4cGlyZXNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfHVuZGVmaW5lZH0gbWF4QWdlXG4gKiBAcHJvcGVydHkge3N0cmluZ3x1bmRlZmluZWR9IGRvbWFpblxuICogQHByb3BlcnR5IHtzdHJpbmd8dW5kZWZpbmVkfSBwYXRoXG4gKiBAcHJvcGVydHkge2Jvb2xlYW58dW5kZWZpbmVkfSBzZWN1cmVcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbnx1bmRlZmluZWR9IGh0dHBPbmx5XG4gKiBAcHJvcGVydHkgeydTdHJpY3QnfCdMYXgnfCdOb25lJ30gc2FtZVNpdGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IHVucGFyc2VkXG4gKi9cblxuLyoqXG4gKiBAcGFyYW0ge0hlYWRlcnN9IGhlYWRlcnNcbiAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fVxuICovXG5mdW5jdGlvbiBnZXRDb29raWVzIChoZWFkZXJzKSB7XG4gIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdnZXRDb29raWVzJyB9KVxuXG4gIHdlYmlkbC5icmFuZENoZWNrKGhlYWRlcnMsIEhlYWRlcnMsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gIGNvbnN0IGNvb2tpZSA9IGhlYWRlcnMuZ2V0KCdjb29raWUnKVxuICBjb25zdCBvdXQgPSB7fVxuXG4gIGlmICghY29va2llKSB7XG4gICAgcmV0dXJuIG91dFxuICB9XG5cbiAgZm9yIChjb25zdCBwaWVjZSBvZiBjb29raWUuc3BsaXQoJzsnKSkge1xuICAgIGNvbnN0IFtuYW1lLCAuLi52YWx1ZV0gPSBwaWVjZS5zcGxpdCgnPScpXG5cbiAgICBvdXRbbmFtZS50cmltKCldID0gdmFsdWUuam9pbignPScpXG4gIH1cblxuICByZXR1cm4gb3V0XG59XG5cbi8qKlxuICogQHBhcmFtIHtIZWFkZXJzfSBoZWFkZXJzXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHt7IHBhdGg/OiBzdHJpbmcsIGRvbWFpbj86IHN0cmluZyB9fHVuZGVmaW5lZH0gYXR0cmlidXRlc1xuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIGRlbGV0ZUNvb2tpZSAoaGVhZGVycywgbmFtZSwgYXR0cmlidXRlcykge1xuICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnZGVsZXRlQ29va2llJyB9KVxuXG4gIHdlYmlkbC5icmFuZENoZWNrKGhlYWRlcnMsIEhlYWRlcnMsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcobmFtZSlcbiAgYXR0cmlidXRlcyA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRlbGV0ZUNvb2tpZUF0dHJpYnV0ZXMoYXR0cmlidXRlcylcblxuICAvLyBNYXRjaGVzIGJlaGF2aW9yIG9mXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9kZW5vbGFuZC9kZW5vX3N0ZC9ibG9iLzYzODI3YjE2MzMwYjgyNDg5YTA0NjE0MDI3YzMzYjc5MDRlMDhiZTUvaHR0cC9jb29raWUudHMjTDI3OFxuICBzZXRDb29raWUoaGVhZGVycywge1xuICAgIG5hbWUsXG4gICAgdmFsdWU6ICcnLFxuICAgIGV4cGlyZXM6IG5ldyBEYXRlKDApLFxuICAgIC4uLmF0dHJpYnV0ZXNcbiAgfSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0hlYWRlcnN9IGhlYWRlcnNcbiAqIEByZXR1cm5zIHtDb29raWVbXX1cbiAqL1xuZnVuY3Rpb24gZ2V0U2V0Q29va2llcyAoaGVhZGVycykge1xuICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnZ2V0U2V0Q29va2llcycgfSlcblxuICB3ZWJpZGwuYnJhbmRDaGVjayhoZWFkZXJzLCBIZWFkZXJzLCB7IHN0cmljdDogZmFsc2UgfSlcblxuICBjb25zdCBjb29raWVzID0gZ2V0SGVhZGVyc0xpc3QoaGVhZGVycykuY29va2llc1xuXG4gIGlmICghY29va2llcykge1xuICAgIHJldHVybiBbXVxuICB9XG5cbiAgLy8gSW4gb2xkZXIgdmVyc2lvbnMgb2YgdW5kaWNpLCBjb29raWVzIGlzIGEgbGlzdCBvZiBuYW1lOnZhbHVlLlxuICByZXR1cm4gY29va2llcy5tYXAoKHBhaXIpID0+IHBhcnNlU2V0Q29va2llKEFycmF5LmlzQXJyYXkocGFpcikgPyBwYWlyWzFdIDogcGFpcikpXG59XG5cbi8qKlxuICogQHBhcmFtIHtIZWFkZXJzfSBoZWFkZXJzXG4gKiBAcGFyYW0ge0Nvb2tpZX0gY29va2llXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gc2V0Q29va2llIChoZWFkZXJzLCBjb29raWUpIHtcbiAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAyLCB7IGhlYWRlcjogJ3NldENvb2tpZScgfSlcblxuICB3ZWJpZGwuYnJhbmRDaGVjayhoZWFkZXJzLCBIZWFkZXJzLCB7IHN0cmljdDogZmFsc2UgfSlcblxuICBjb29raWUgPSB3ZWJpZGwuY29udmVydGVycy5Db29raWUoY29va2llKVxuXG4gIGNvbnN0IHN0ciA9IHN0cmluZ2lmeShjb29raWUpXG5cbiAgaWYgKHN0cikge1xuICAgIGhlYWRlcnMuYXBwZW5kKCdTZXQtQ29va2llJywgc3RyaW5naWZ5KGNvb2tpZSkpXG4gIH1cbn1cblxud2ViaWRsLmNvbnZlcnRlcnMuRGVsZXRlQ29va2llQXR0cmlidXRlcyA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyksXG4gICAga2V5OiAncGF0aCcsXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcih3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcpLFxuICAgIGtleTogJ2RvbWFpbicsXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH1cbl0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzLkNvb2tpZSA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIGtleTogJ25hbWUnXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICBrZXk6ICd2YWx1ZSdcbiAgfSxcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKCh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBsb25nIGxvbmcnXSh2YWx1ZSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBEYXRlKHZhbHVlKVxuICAgIH0pLFxuICAgIGtleTogJ2V4cGlyZXMnLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbFxuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnNbJ2xvbmcgbG9uZyddKSxcbiAgICBrZXk6ICdtYXhBZ2UnLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbFxuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKSxcbiAgICBrZXk6ICdkb21haW4nLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbFxuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKSxcbiAgICBrZXk6ICdwYXRoJyxcbiAgICBkZWZhdWx0VmFsdWU6IG51bGxcbiAgfSxcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4pLFxuICAgIGtleTogJ3NlY3VyZScsXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcih3ZWJpZGwuY29udmVydGVycy5ib29sZWFuKSxcbiAgICBrZXk6ICdodHRwT25seScsXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyxcbiAgICBrZXk6ICdzYW1lU2l0ZScsXG4gICAgYWxsb3dlZFZhbHVlczogWydTdHJpY3QnLCAnTGF4JywgJ05vbmUnXVxuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKSxcbiAgICBrZXk6ICd1bnBhcnNlZCcsXG4gICAgZGVmYXVsdFZhbHVlOiBbXVxuICB9XG5dKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0Q29va2llcyxcbiAgZGVsZXRlQ29va2llLFxuICBnZXRTZXRDb29raWVzLFxuICBzZXRDb29raWVcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbi8vIFRoaXMgaXMgYSBHbG9iYWxseSBVbmlxdWUgSWRlbnRpZmllciB1bmlxdWUgdXNlZFxuLy8gdG8gdmFsaWRhdGUgdGhhdCB0aGUgZW5kcG9pbnQgYWNjZXB0cyB3ZWJzb2NrZXRcbi8vIGNvbm5lY3Rpb25zLlxuLy8gU2VlIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM2NDU1Lmh0bWwjc2VjdGlvbi0xLjNcbmNvbnN0IHVpZCA9ICcyNThFQUZBNS1FOTE0LTQ3REEtOTVDQS1DNUFCMERDODVCMTEnXG5cbi8qKiBAdHlwZSB7UHJvcGVydHlEZXNjcmlwdG9yfSAqL1xuY29uc3Qgc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyA9IHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgd3JpdGFibGU6IGZhbHNlLFxuICBjb25maWd1cmFibGU6IGZhbHNlXG59XG5cbmNvbnN0IHN0YXRlcyA9IHtcbiAgQ09OTkVDVElORzogMCxcbiAgT1BFTjogMSxcbiAgQ0xPU0lORzogMixcbiAgQ0xPU0VEOiAzXG59XG5cbmNvbnN0IG9wY29kZXMgPSB7XG4gIENPTlRJTlVBVElPTjogMHgwLFxuICBURVhUOiAweDEsXG4gIEJJTkFSWTogMHgyLFxuICBDTE9TRTogMHg4LFxuICBQSU5HOiAweDksXG4gIFBPTkc6IDB4QVxufVxuXG5jb25zdCBtYXhVbnNpZ25lZDE2Qml0ID0gMiAqKiAxNiAtIDEgLy8gNjU1MzVcblxuY29uc3QgcGFyc2VyU3RhdGVzID0ge1xuICBJTkZPOiAwLFxuICBQQVlMT0FETEVOR1RIXzE2OiAyLFxuICBQQVlMT0FETEVOR1RIXzY0OiAzLFxuICBSRUFEX0RBVEE6IDRcbn1cblxuY29uc3QgZW1wdHlCdWZmZXIgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMClcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHVpZCxcbiAgc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgc3RhdGVzLFxuICBvcGNvZGVzLFxuICBtYXhVbnNpZ25lZDE2Qml0LFxuICBwYXJzZXJTdGF0ZXMsXG4gIGVtcHR5QnVmZmVyXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAga1dlYlNvY2tldFVSTDogU3ltYm9sKCd1cmwnKSxcbiAga1JlYWR5U3RhdGU6IFN5bWJvbCgncmVhZHkgc3RhdGUnKSxcbiAga0NvbnRyb2xsZXI6IFN5bWJvbCgnY29udHJvbGxlcicpLFxuICBrUmVzcG9uc2U6IFN5bWJvbCgncmVzcG9uc2UnKSxcbiAga0JpbmFyeVR5cGU6IFN5bWJvbCgnYmluYXJ5IHR5cGUnKSxcbiAga1NlbnRDbG9zZTogU3ltYm9sKCdzZW50IGNsb3NlJyksXG4gIGtSZWNlaXZlZENsb3NlOiBTeW1ib2woJ3JlY2VpdmVkIGNsb3NlJyksXG4gIGtCeXRlUGFyc2VyOiBTeW1ib2woJ2J5dGUgcGFyc2VyJylcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuLi9mZXRjaC93ZWJpZGwnKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5IH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBNZXNzYWdlUG9ydCB9ID0gcmVxdWlyZSgnd29ya2VyX3RocmVhZHMnKVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvY29tbXMuaHRtbCNtZXNzYWdlZXZlbnRcbiAqL1xuY2xhc3MgTWVzc2FnZUV2ZW50IGV4dGVuZHMgRXZlbnQge1xuICAjZXZlbnRJbml0XG5cbiAgY29uc3RydWN0b3IgKHR5cGUsIGV2ZW50SW5pdERpY3QgPSB7fSkge1xuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdNZXNzYWdlRXZlbnQgY29uc3RydWN0b3InIH0pXG5cbiAgICB0eXBlID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKHR5cGUpXG4gICAgZXZlbnRJbml0RGljdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLk1lc3NhZ2VFdmVudEluaXQoZXZlbnRJbml0RGljdClcblxuICAgIHN1cGVyKHR5cGUsIGV2ZW50SW5pdERpY3QpXG5cbiAgICB0aGlzLiNldmVudEluaXQgPSBldmVudEluaXREaWN0XG4gIH1cblxuICBnZXQgZGF0YSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgTWVzc2FnZUV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5kYXRhXG4gIH1cblxuICBnZXQgb3JpZ2luICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBNZXNzYWdlRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0Lm9yaWdpblxuICB9XG5cbiAgZ2V0IGxhc3RFdmVudElkICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBNZXNzYWdlRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0Lmxhc3RFdmVudElkXG4gIH1cblxuICBnZXQgc291cmNlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBNZXNzYWdlRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LnNvdXJjZVxuICB9XG5cbiAgZ2V0IHBvcnRzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBNZXNzYWdlRXZlbnQpXG5cbiAgICBpZiAoIU9iamVjdC5pc0Zyb3plbih0aGlzLiNldmVudEluaXQucG9ydHMpKSB7XG4gICAgICBPYmplY3QuZnJlZXplKHRoaXMuI2V2ZW50SW5pdC5wb3J0cylcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LnBvcnRzXG4gIH1cblxuICBpbml0TWVzc2FnZUV2ZW50IChcbiAgICB0eXBlLFxuICAgIGJ1YmJsZXMgPSBmYWxzZSxcbiAgICBjYW5jZWxhYmxlID0gZmFsc2UsXG4gICAgZGF0YSA9IG51bGwsXG4gICAgb3JpZ2luID0gJycsXG4gICAgbGFzdEV2ZW50SWQgPSAnJyxcbiAgICBzb3VyY2UgPSBudWxsLFxuICAgIHBvcnRzID0gW11cbiAgKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgTWVzc2FnZUV2ZW50KVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ01lc3NhZ2VFdmVudC5pbml0TWVzc2FnZUV2ZW50JyB9KVxuXG4gICAgcmV0dXJuIG5ldyBNZXNzYWdlRXZlbnQodHlwZSwge1xuICAgICAgYnViYmxlcywgY2FuY2VsYWJsZSwgZGF0YSwgb3JpZ2luLCBsYXN0RXZlbnRJZCwgc291cmNlLCBwb3J0c1xuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI3RoZS1jbG9zZWV2ZW50LWludGVyZmFjZVxuICovXG5jbGFzcyBDbG9zZUV2ZW50IGV4dGVuZHMgRXZlbnQge1xuICAjZXZlbnRJbml0XG5cbiAgY29uc3RydWN0b3IgKHR5cGUsIGV2ZW50SW5pdERpY3QgPSB7fSkge1xuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdDbG9zZUV2ZW50IGNvbnN0cnVjdG9yJyB9KVxuXG4gICAgdHlwZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyh0eXBlKVxuICAgIGV2ZW50SW5pdERpY3QgPSB3ZWJpZGwuY29udmVydGVycy5DbG9zZUV2ZW50SW5pdChldmVudEluaXREaWN0KVxuXG4gICAgc3VwZXIodHlwZSwgZXZlbnRJbml0RGljdClcblxuICAgIHRoaXMuI2V2ZW50SW5pdCA9IGV2ZW50SW5pdERpY3RcbiAgfVxuXG4gIGdldCB3YXNDbGVhbiAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2xvc2VFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQud2FzQ2xlYW5cbiAgfVxuXG4gIGdldCBjb2RlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDbG9zZUV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5jb2RlXG4gIH1cblxuICBnZXQgcmVhc29uICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDbG9zZUV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5yZWFzb25cbiAgfVxufVxuXG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS93ZWJhcHBhcGlzLmh0bWwjdGhlLWVycm9yZXZlbnQtaW50ZXJmYWNlXG5jbGFzcyBFcnJvckV2ZW50IGV4dGVuZHMgRXZlbnQge1xuICAjZXZlbnRJbml0XG5cbiAgY29uc3RydWN0b3IgKHR5cGUsIGV2ZW50SW5pdERpY3QpIHtcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRXJyb3JFdmVudCBjb25zdHJ1Y3RvcicgfSlcblxuICAgIHN1cGVyKHR5cGUsIGV2ZW50SW5pdERpY3QpXG5cbiAgICB0eXBlID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKHR5cGUpXG4gICAgZXZlbnRJbml0RGljdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLkVycm9yRXZlbnRJbml0KGV2ZW50SW5pdERpY3QgPz8ge30pXG5cbiAgICB0aGlzLiNldmVudEluaXQgPSBldmVudEluaXREaWN0XG4gIH1cblxuICBnZXQgbWVzc2FnZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRXJyb3JFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQubWVzc2FnZVxuICB9XG5cbiAgZ2V0IGZpbGVuYW1lICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBFcnJvckV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5maWxlbmFtZVxuICB9XG5cbiAgZ2V0IGxpbmVubyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRXJyb3JFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQubGluZW5vXG4gIH1cblxuICBnZXQgY29sbm8gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEVycm9yRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LmNvbG5vXG4gIH1cblxuICBnZXQgZXJyb3IgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEVycm9yRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LmVycm9yXG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTWVzc2FnZUV2ZW50LnByb3RvdHlwZSwge1xuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnTWVzc2FnZUV2ZW50JyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSxcbiAgZGF0YToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb3JpZ2luOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBsYXN0RXZlbnRJZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgc291cmNlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBwb3J0czoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgaW5pdE1lc3NhZ2VFdmVudDoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2xvc2VFdmVudC5wcm90b3R5cGUsIHtcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0Nsb3NlRXZlbnQnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9LFxuICByZWFzb246IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNvZGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHdhc0NsZWFuOiBrRW51bWVyYWJsZVByb3BlcnR5XG59KVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhFcnJvckV2ZW50LnByb3RvdHlwZSwge1xuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnRXJyb3JFdmVudCcsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0sXG4gIG1lc3NhZ2U6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGZpbGVuYW1lOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBsaW5lbm86IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNvbG5vOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBlcnJvcjoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxud2ViaWRsLmNvbnZlcnRlcnMuTWVzc2FnZVBvcnQgPSB3ZWJpZGwuaW50ZXJmYWNlQ29udmVydGVyKE1lc3NhZ2VQb3J0KVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8TWVzc2FnZVBvcnQ+J10gPSB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLk1lc3NhZ2VQb3J0XG4pXG5cbmNvbnN0IGV2ZW50SW5pdCA9IFtcbiAge1xuICAgIGtleTogJ2J1YmJsZXMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjYW5jZWxhYmxlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4sXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZVxuICB9LFxuICB7XG4gICAga2V5OiAnY29tcG9zZWQnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH1cbl1cblxud2ViaWRsLmNvbnZlcnRlcnMuTWVzc2FnZUV2ZW50SW5pdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAgLi4uZXZlbnRJbml0LFxuICB7XG4gICAga2V5OiAnZGF0YScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5hbnksXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdvcmlnaW4nLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZTogJydcbiAgfSxcbiAge1xuICAgIGtleTogJ2xhc3RFdmVudElkJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6ICcnXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdzb3VyY2UnLFxuICAgIC8vIE5vZGUgZG9lc24ndCBpbXBsZW1lbnQgV2luZG93UHJveHkgb3IgU2VydmljZVdvcmtlciwgc28gdGhlIG9ubHlcbiAgICAvLyB2YWxpZCB2YWx1ZSBmb3Igc291cmNlIGlzIGEgTWVzc2FnZVBvcnQuXG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuTWVzc2FnZVBvcnQpLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbFxuICB9LFxuICB7XG4gICAga2V5OiAncG9ydHMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPE1lc3NhZ2VQb3J0PiddLFxuICAgIGdldCBkZWZhdWx0VmFsdWUgKCkge1xuICAgICAgcmV0dXJuIFtdXG4gICAgfVxuICB9XG5dKVxuXG53ZWJpZGwuY29udmVydGVycy5DbG9zZUV2ZW50SW5pdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAgLi4uZXZlbnRJbml0LFxuICB7XG4gICAga2V5OiAnd2FzQ2xlYW4nLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjb2RlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBzaG9ydCddLFxuICAgIGRlZmF1bHRWYWx1ZTogMFxuICB9LFxuICB7XG4gICAga2V5OiAncmVhc29uJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6ICcnXG4gIH1cbl0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzLkVycm9yRXZlbnRJbml0ID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICAuLi5ldmVudEluaXQsXG4gIHtcbiAgICBrZXk6ICdtZXNzYWdlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6ICcnXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdmaWxlbmFtZScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcsXG4gICAgZGVmYXVsdFZhbHVlOiAnJ1xuICB9LFxuICB7XG4gICAga2V5OiAnbGluZW5vJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBsb25nJ10sXG4gICAgZGVmYXVsdFZhbHVlOiAwXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjb2xubycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgbG9uZyddLFxuICAgIGRlZmF1bHRWYWx1ZTogMFxuICB9LFxuICB7XG4gICAga2V5OiAnZXJyb3InLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYW55XG4gIH1cbl0pXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBNZXNzYWdlRXZlbnQsXG4gIENsb3NlRXZlbnQsXG4gIEVycm9yRXZlbnRcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsga1JlYWR5U3RhdGUsIGtDb250cm9sbGVyLCBrUmVzcG9uc2UsIGtCaW5hcnlUeXBlLCBrV2ViU29ja2V0VVJMIH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBzdGF0ZXMsIG9wY29kZXMgfSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IHsgTWVzc2FnZUV2ZW50LCBFcnJvckV2ZW50IH0gPSByZXF1aXJlKCcuL2V2ZW50cycpXG5cbi8qIGdsb2JhbHMgQmxvYiAqL1xuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL3dlYnNvY2tldCcpLldlYlNvY2tldH0gd3NcbiAqL1xuZnVuY3Rpb24gaXNFc3RhYmxpc2hlZCAod3MpIHtcbiAgLy8gSWYgdGhlIHNlcnZlcidzIHJlc3BvbnNlIGlzIHZhbGlkYXRlZCBhcyBwcm92aWRlZCBmb3IgYWJvdmUsIGl0IGlzXG4gIC8vIHNhaWQgdGhhdCBfVGhlIFdlYlNvY2tldCBDb25uZWN0aW9uIGlzIEVzdGFibGlzaGVkXyBhbmQgdGhhdCB0aGVcbiAgLy8gV2ViU29ja2V0IENvbm5lY3Rpb24gaXMgaW4gdGhlIE9QRU4gc3RhdGUuXG4gIHJldHVybiB3c1trUmVhZHlTdGF0ZV0gPT09IHN0YXRlcy5PUEVOXG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vd2Vic29ja2V0JykuV2ViU29ja2V0fSB3c1xuICovXG5mdW5jdGlvbiBpc0Nsb3NpbmcgKHdzKSB7XG4gIC8vIFVwb24gZWl0aGVyIHNlbmRpbmcgb3IgcmVjZWl2aW5nIGEgQ2xvc2UgY29udHJvbCBmcmFtZSwgaXQgaXMgc2FpZFxuICAvLyB0aGF0IF9UaGUgV2ViU29ja2V0IENsb3NpbmcgSGFuZHNoYWtlIGlzIFN0YXJ0ZWRfIGFuZCB0aGF0IHRoZVxuICAvLyBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBpbiB0aGUgQ0xPU0lORyBzdGF0ZS5cbiAgcmV0dXJuIHdzW2tSZWFkeVN0YXRlXSA9PT0gc3RhdGVzLkNMT1NJTkdcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi93ZWJzb2NrZXQnKS5XZWJTb2NrZXR9IHdzXG4gKi9cbmZ1bmN0aW9uIGlzQ2xvc2VkICh3cykge1xuICByZXR1cm4gd3Nba1JlYWR5U3RhdGVdID09PSBzdGF0ZXMuQ0xPU0VEXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtZXZlbnQtZmlyZVxuICogQHBhcmFtIHtzdHJpbmd9IGVcbiAqIEBwYXJhbSB7RXZlbnRUYXJnZXR9IHRhcmdldFxuICogQHBhcmFtIHtFdmVudEluaXQgfCB1bmRlZmluZWR9IGV2ZW50SW5pdERpY3RcbiAqL1xuZnVuY3Rpb24gZmlyZUV2ZW50IChlLCB0YXJnZXQsIGV2ZW50Q29uc3RydWN0b3IgPSBFdmVudCwgZXZlbnRJbml0RGljdCkge1xuICAvLyAxLiBJZiBldmVudENvbnN0cnVjdG9yIGlzIG5vdCBnaXZlbiwgdGhlbiBsZXQgZXZlbnRDb25zdHJ1Y3RvciBiZSBFdmVudC5cblxuICAvLyAyLiBMZXQgZXZlbnQgYmUgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhbiBldmVudCBnaXZlbiBldmVudENvbnN0cnVjdG9yLFxuICAvLyAgICBpbiB0aGUgcmVsZXZhbnQgcmVhbG0gb2YgdGFyZ2V0LlxuICAvLyAzLiBJbml0aWFsaXplIGV2ZW504oCZcyB0eXBlIGF0dHJpYnV0ZSB0byBlLlxuICBjb25zdCBldmVudCA9IG5ldyBldmVudENvbnN0cnVjdG9yKGUsIGV2ZW50SW5pdERpY3QpIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbmV3LWNhcFxuXG4gIC8vIDQuIEluaXRpYWxpemUgYW55IG90aGVyIElETCBhdHRyaWJ1dGVzIG9mIGV2ZW50IGFzIGRlc2NyaWJlZCBpbiB0aGVcbiAgLy8gICAgaW52b2NhdGlvbiBvZiB0aGlzIGFsZ29yaXRobS5cblxuICAvLyA1LiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBkaXNwYXRjaGluZyBldmVudCBhdCB0YXJnZXQsIHdpdGggbGVnYWN5IHRhcmdldFxuICAvLyAgICBvdmVycmlkZSBmbGFnIHNldCBpZiBzZXQuXG4gIHRhcmdldC5kaXNwYXRjaEV2ZW50KGV2ZW50KVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZmVlZGJhY2stZnJvbS10aGUtcHJvdG9jb2xcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL3dlYnNvY2tldCcpLldlYlNvY2tldH0gd3NcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlIE9wY29kZVxuICogQHBhcmFtIHtCdWZmZXJ9IGRhdGEgYXBwbGljYXRpb24gZGF0YVxuICovXG5mdW5jdGlvbiB3ZWJzb2NrZXRNZXNzYWdlUmVjZWl2ZWQgKHdzLCB0eXBlLCBkYXRhKSB7XG4gIC8vIDEuIElmIHJlYWR5IHN0YXRlIGlzIG5vdCBPUEVOICgxKSwgdGhlbiByZXR1cm4uXG4gIGlmICh3c1trUmVhZHlTdGF0ZV0gIT09IHN0YXRlcy5PUEVOKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyAyLiBMZXQgZGF0YUZvckV2ZW50IGJlIGRldGVybWluZWQgYnkgc3dpdGNoaW5nIG9uIHR5cGUgYW5kIGJpbmFyeSB0eXBlOlxuICBsZXQgZGF0YUZvckV2ZW50XG5cbiAgaWYgKHR5cGUgPT09IG9wY29kZXMuVEVYVCkge1xuICAgIC8vIC0+IHR5cGUgaW5kaWNhdGVzIHRoYXQgdGhlIGRhdGEgaXMgVGV4dFxuICAgIC8vICAgICAgYSBuZXcgRE9NU3RyaW5nIGNvbnRhaW5pbmcgZGF0YVxuICAgIHRyeSB7XG4gICAgICBkYXRhRm9yRXZlbnQgPSBuZXcgVGV4dERlY29kZXIoJ3V0Zi04JywgeyBmYXRhbDogdHJ1ZSB9KS5kZWNvZGUoZGF0YSlcbiAgICB9IGNhdGNoIHtcbiAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnUmVjZWl2ZWQgaW52YWxpZCBVVEYtOCBpbiB0ZXh0IGZyYW1lLicpXG4gICAgICByZXR1cm5cbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gb3Bjb2Rlcy5CSU5BUlkpIHtcbiAgICBpZiAod3Nba0JpbmFyeVR5cGVdID09PSAnYmxvYicpIHtcbiAgICAgIC8vIC0+IHR5cGUgaW5kaWNhdGVzIHRoYXQgdGhlIGRhdGEgaXMgQmluYXJ5IGFuZCBiaW5hcnkgdHlwZSBpcyBcImJsb2JcIlxuICAgICAgLy8gICAgICBhIG5ldyBCbG9iIG9iamVjdCwgY3JlYXRlZCBpbiB0aGUgcmVsZXZhbnQgUmVhbG0gb2YgdGhlIFdlYlNvY2tldFxuICAgICAgLy8gICAgICBvYmplY3QsIHRoYXQgcmVwcmVzZW50cyBkYXRhIGFzIGl0cyByYXcgZGF0YVxuICAgICAgZGF0YUZvckV2ZW50ID0gbmV3IEJsb2IoW2RhdGFdKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyAtPiB0eXBlIGluZGljYXRlcyB0aGF0IHRoZSBkYXRhIGlzIEJpbmFyeSBhbmQgYmluYXJ5IHR5cGUgaXMgXCJhcnJheWJ1ZmZlclwiXG4gICAgICAvLyAgICAgIGEgbmV3IEFycmF5QnVmZmVyIG9iamVjdCwgY3JlYXRlZCBpbiB0aGUgcmVsZXZhbnQgUmVhbG0gb2YgdGhlXG4gICAgICAvLyAgICAgIFdlYlNvY2tldCBvYmplY3QsIHdob3NlIGNvbnRlbnRzIGFyZSBkYXRhXG4gICAgICBkYXRhRm9yRXZlbnQgPSBuZXcgVWludDhBcnJheShkYXRhKS5idWZmZXJcbiAgICB9XG4gIH1cblxuICAvLyAzLiBGaXJlIGFuIGV2ZW50IG5hbWVkIG1lc3NhZ2UgYXQgdGhlIFdlYlNvY2tldCBvYmplY3QsIHVzaW5nIE1lc3NhZ2VFdmVudCxcbiAgLy8gICAgd2l0aCB0aGUgb3JpZ2luIGF0dHJpYnV0ZSBpbml0aWFsaXplZCB0byB0aGUgc2VyaWFsaXphdGlvbiBvZiB0aGUgV2ViU29ja2V0XG4gIC8vICAgIG9iamVjdOKAmXMgdXJsJ3Mgb3JpZ2luLCBhbmQgdGhlIGRhdGEgYXR0cmlidXRlIGluaXRpYWxpemVkIHRvIGRhdGFGb3JFdmVudC5cbiAgZmlyZUV2ZW50KCdtZXNzYWdlJywgd3MsIE1lc3NhZ2VFdmVudCwge1xuICAgIG9yaWdpbjogd3Nba1dlYlNvY2tldFVSTF0ub3JpZ2luLFxuICAgIGRhdGE6IGRhdGFGb3JFdmVudFxuICB9KVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1XG4gKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMjYxNlxuICogQHNlZSBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0zOTg0MDdcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm90b2NvbFxuICovXG5mdW5jdGlvbiBpc1ZhbGlkU3VicHJvdG9jb2wgKHByb3RvY29sKSB7XG4gIC8vIElmIHByZXNlbnQsIHRoaXMgdmFsdWUgaW5kaWNhdGVzIG9uZVxuICAvLyBvciBtb3JlIGNvbW1hLXNlcGFyYXRlZCBzdWJwcm90b2NvbCB0aGUgY2xpZW50IHdpc2hlcyB0byBzcGVhayxcbiAgLy8gb3JkZXJlZCBieSBwcmVmZXJlbmNlLiAgVGhlIGVsZW1lbnRzIHRoYXQgY29tcHJpc2UgdGhpcyB2YWx1ZVxuICAvLyBNVVNUIGJlIG5vbi1lbXB0eSBzdHJpbmdzIHdpdGggY2hhcmFjdGVycyBpbiB0aGUgcmFuZ2UgVSswMDIxIHRvXG4gIC8vIFUrMDA3RSBub3QgaW5jbHVkaW5nIHNlcGFyYXRvciBjaGFyYWN0ZXJzIGFzIGRlZmluZWQgaW5cbiAgLy8gW1JGQzI2MTZdIGFuZCBNVVNUIGFsbCBiZSB1bmlxdWUgc3RyaW5ncy5cbiAgaWYgKHByb3RvY29sLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgZm9yIChjb25zdCBjaGFyIG9mIHByb3RvY29sKSB7XG4gICAgY29uc3QgY29kZSA9IGNoYXIuY2hhckNvZGVBdCgwKVxuXG4gICAgaWYgKFxuICAgICAgY29kZSA8IDB4MjEgfHxcbiAgICAgIGNvZGUgPiAweDdFIHx8XG4gICAgICBjaGFyID09PSAnKCcgfHxcbiAgICAgIGNoYXIgPT09ICcpJyB8fFxuICAgICAgY2hhciA9PT0gJzwnIHx8XG4gICAgICBjaGFyID09PSAnPicgfHxcbiAgICAgIGNoYXIgPT09ICdAJyB8fFxuICAgICAgY2hhciA9PT0gJywnIHx8XG4gICAgICBjaGFyID09PSAnOycgfHxcbiAgICAgIGNoYXIgPT09ICc6JyB8fFxuICAgICAgY2hhciA9PT0gJ1xcXFwnIHx8XG4gICAgICBjaGFyID09PSAnXCInIHx8XG4gICAgICBjaGFyID09PSAnLycgfHxcbiAgICAgIGNoYXIgPT09ICdbJyB8fFxuICAgICAgY2hhciA9PT0gJ10nIHx8XG4gICAgICBjaGFyID09PSAnPycgfHxcbiAgICAgIGNoYXIgPT09ICc9JyB8fFxuICAgICAgY2hhciA9PT0gJ3snIHx8XG4gICAgICBjaGFyID09PSAnfScgfHxcbiAgICAgIGNvZGUgPT09IDMyIHx8IC8vIFNQXG4gICAgICBjb2RlID09PSA5IC8vIEhUXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tNy00XG4gKiBAcGFyYW0ge251bWJlcn0gY29kZVxuICovXG5mdW5jdGlvbiBpc1ZhbGlkU3RhdHVzQ29kZSAoY29kZSkge1xuICBpZiAoY29kZSA+PSAxMDAwICYmIGNvZGUgPCAxMDE1KSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGNvZGUgIT09IDEwMDQgJiYgLy8gcmVzZXJ2ZWRcbiAgICAgIGNvZGUgIT09IDEwMDUgJiYgLy8gXCJNVVNUIE5PVCBiZSBzZXQgYXMgYSBzdGF0dXMgY29kZVwiXG4gICAgICBjb2RlICE9PSAxMDA2IC8vIFwiTVVTVCBOT1QgYmUgc2V0IGFzIGEgc3RhdHVzIGNvZGVcIlxuICAgIClcbiAgfVxuXG4gIHJldHVybiBjb2RlID49IDMwMDAgJiYgY29kZSA8PSA0OTk5XG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vd2Vic29ja2V0JykuV2ViU29ja2V0fSB3c1xuICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSByZWFzb25cbiAqL1xuZnVuY3Rpb24gZmFpbFdlYnNvY2tldENvbm5lY3Rpb24gKHdzLCByZWFzb24pIHtcbiAgY29uc3QgeyBba0NvbnRyb2xsZXJdOiBjb250cm9sbGVyLCBba1Jlc3BvbnNlXTogcmVzcG9uc2UgfSA9IHdzXG5cbiAgY29udHJvbGxlci5hYm9ydCgpXG5cbiAgaWYgKHJlc3BvbnNlPy5zb2NrZXQgJiYgIXJlc3BvbnNlLnNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICByZXNwb25zZS5zb2NrZXQuZGVzdHJveSgpXG4gIH1cblxuICBpZiAocmVhc29uKSB7XG4gICAgZmlyZUV2ZW50KCdlcnJvcicsIHdzLCBFcnJvckV2ZW50LCB7XG4gICAgICBlcnJvcjogbmV3IEVycm9yKHJlYXNvbilcbiAgICB9KVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc0VzdGFibGlzaGVkLFxuICBpc0Nsb3NpbmcsXG4gIGlzQ2xvc2VkLFxuICBmaXJlRXZlbnQsXG4gIGlzVmFsaWRTdWJwcm90b2NvbCxcbiAgaXNWYWxpZFN0YXR1c0NvZGUsXG4gIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uLFxuICB3ZWJzb2NrZXRNZXNzYWdlUmVjZWl2ZWRcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGRpYWdub3N0aWNzQ2hhbm5lbCA9IHJlcXVpcmUoJ2RpYWdub3N0aWNzX2NoYW5uZWwnKVxuY29uc3QgeyB1aWQsIHN0YXRlcyB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3Qge1xuICBrUmVhZHlTdGF0ZSxcbiAga1NlbnRDbG9zZSxcbiAga0J5dGVQYXJzZXIsXG4gIGtSZWNlaXZlZENsb3NlXG59ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgZmlyZUV2ZW50LCBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbiB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgQ2xvc2VFdmVudCB9ID0gcmVxdWlyZSgnLi9ldmVudHMnKVxuY29uc3QgeyBtYWtlUmVxdWVzdCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvcmVxdWVzdCcpXG5jb25zdCB7IGZldGNoaW5nIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9pbmRleCcpXG5jb25zdCB7IEhlYWRlcnMgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2hlYWRlcnMnKVxuY29uc3QgeyBnZXRHbG9iYWxEaXNwYXRjaGVyIH0gPSByZXF1aXJlKCcuLi9nbG9iYWwnKVxuY29uc3QgeyBrSGVhZGVyc0xpc3QgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5cbmNvbnN0IGNoYW5uZWxzID0ge31cbmNoYW5uZWxzLm9wZW4gPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOndlYnNvY2tldDpvcGVuJylcbmNoYW5uZWxzLmNsb3NlID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTp3ZWJzb2NrZXQ6Y2xvc2UnKVxuY2hhbm5lbHMuc29ja2V0RXJyb3IgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOndlYnNvY2tldDpzb2NrZXRfZXJyb3InKVxuXG4vKiogQHR5cGUge2ltcG9ydCgnY3J5cHRvJyl9ICovXG5sZXQgY3J5cHRvXG50cnkge1xuICBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKVxufSBjYXRjaCB7XG5cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtd2Vic29ja2V0LWVzdGFibGlzaFxuICogQHBhcmFtIHtVUkx9IHVybFxuICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IHByb3RvY29sc1xuICogQHBhcmFtIHtpbXBvcnQoJy4vd2Vic29ja2V0JykuV2ViU29ja2V0fSB3c1xuICogQHBhcmFtIHsocmVzcG9uc2U6IGFueSkgPT4gdm9pZH0gb25Fc3RhYmxpc2hcbiAqIEBwYXJhbSB7UGFydGlhbDxpbXBvcnQoJy4uLy4uL3R5cGVzL3dlYnNvY2tldCcpLldlYlNvY2tldEluaXQ+fSBvcHRpb25zXG4gKi9cbmZ1bmN0aW9uIGVzdGFibGlzaFdlYlNvY2tldENvbm5lY3Rpb24gKHVybCwgcHJvdG9jb2xzLCB3cywgb25Fc3RhYmxpc2gsIG9wdGlvbnMpIHtcbiAgLy8gMS4gTGV0IHJlcXVlc3RVUkwgYmUgYSBjb3B5IG9mIHVybCwgd2l0aCBpdHMgc2NoZW1lIHNldCB0byBcImh0dHBcIiwgaWYgdXJs4oCZc1xuICAvLyAgICBzY2hlbWUgaXMgXCJ3c1wiLCBhbmQgdG8gXCJodHRwc1wiIG90aGVyd2lzZS5cbiAgY29uc3QgcmVxdWVzdFVSTCA9IHVybFxuXG4gIHJlcXVlc3RVUkwucHJvdG9jb2wgPSB1cmwucHJvdG9jb2wgPT09ICd3czonID8gJ2h0dHA6JyA6ICdodHRwczonXG5cbiAgLy8gMi4gTGV0IHJlcXVlc3QgYmUgYSBuZXcgcmVxdWVzdCwgd2hvc2UgVVJMIGlzIHJlcXVlc3RVUkwsIGNsaWVudCBpcyBjbGllbnQsXG4gIC8vICAgIHNlcnZpY2Utd29ya2VycyBtb2RlIGlzIFwibm9uZVwiLCByZWZlcnJlciBpcyBcIm5vLXJlZmVycmVyXCIsIG1vZGUgaXNcbiAgLy8gICAgXCJ3ZWJzb2NrZXRcIiwgY3JlZGVudGlhbHMgbW9kZSBpcyBcImluY2x1ZGVcIiwgY2FjaGUgbW9kZSBpcyBcIm5vLXN0b3JlXCIgLFxuICAvLyAgICBhbmQgcmVkaXJlY3QgbW9kZSBpcyBcImVycm9yXCIuXG4gIGNvbnN0IHJlcXVlc3QgPSBtYWtlUmVxdWVzdCh7XG4gICAgdXJsTGlzdDogW3JlcXVlc3RVUkxdLFxuICAgIHNlcnZpY2VXb3JrZXJzOiAnbm9uZScsXG4gICAgcmVmZXJyZXI6ICduby1yZWZlcnJlcicsXG4gICAgbW9kZTogJ3dlYnNvY2tldCcsXG4gICAgY3JlZGVudGlhbHM6ICdpbmNsdWRlJyxcbiAgICBjYWNoZTogJ25vLXN0b3JlJyxcbiAgICByZWRpcmVjdDogJ2Vycm9yJ1xuICB9KVxuXG4gIC8vIE5vdGU6IHVuZGljaSBleHRlbnNpb24sIGFsbG93IHNldHRpbmcgY3VzdG9tIGhlYWRlcnMuXG4gIGlmIChvcHRpb25zLmhlYWRlcnMpIHtcbiAgICBjb25zdCBoZWFkZXJzTGlzdCA9IG5ldyBIZWFkZXJzKG9wdGlvbnMuaGVhZGVycylba0hlYWRlcnNMaXN0XVxuXG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdCA9IGhlYWRlcnNMaXN0XG4gIH1cblxuICAvLyAzLiBBcHBlbmQgKGBVcGdyYWRlYCwgYHdlYnNvY2tldGApIHRvIHJlcXVlc3TigJlzIGhlYWRlciBsaXN0LlxuICAvLyA0LiBBcHBlbmQgKGBDb25uZWN0aW9uYCwgYFVwZ3JhZGVgKSB0byByZXF1ZXN04oCZcyBoZWFkZXIgbGlzdC5cbiAgLy8gTm90ZTogYm90aCBvZiB0aGVzZSBhcmUgaGFuZGxlZCBieSB1bmRpY2kgY3VycmVudGx5LlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9ibG9iLzY4YzI2OWM0MTQ0YzQ0NmYzZjEyMjA5NTEzMzhkYWVmNGE2YjVlYzQvbGliL2NsaWVudC5qcyNMMTM5N1xuXG4gIC8vIDUuIExldCBrZXlWYWx1ZSBiZSBhIG5vbmNlIGNvbnNpc3Rpbmcgb2YgYSByYW5kb21seSBzZWxlY3RlZFxuICAvLyAgICAxNi1ieXRlIHZhbHVlIHRoYXQgaGFzIGJlZW4gZm9yZ2l2aW5nLWJhc2U2NC1lbmNvZGVkIGFuZFxuICAvLyAgICBpc29tb3JwaGljIGVuY29kZWQuXG4gIGNvbnN0IGtleVZhbHVlID0gY3J5cHRvLnJhbmRvbUJ5dGVzKDE2KS50b1N0cmluZygnYmFzZTY0JylcblxuICAvLyA2LiBBcHBlbmQgKGBTZWMtV2ViU29ja2V0LUtleWAsIGtleVZhbHVlKSB0byByZXF1ZXN04oCZc1xuICAvLyAgICBoZWFkZXIgbGlzdC5cbiAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ3NlYy13ZWJzb2NrZXQta2V5Jywga2V5VmFsdWUpXG5cbiAgLy8gNy4gQXBwZW5kIChgU2VjLVdlYlNvY2tldC1WZXJzaW9uYCwgYDEzYCkgdG8gcmVxdWVzdOKAmXNcbiAgLy8gICAgaGVhZGVyIGxpc3QuXG4gIHJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdzZWMtd2Vic29ja2V0LXZlcnNpb24nLCAnMTMnKVxuXG4gIC8vIDguIEZvciBlYWNoIHByb3RvY29sIGluIHByb3RvY29scywgY29tYmluZVxuICAvLyAgICAoYFNlYy1XZWJTb2NrZXQtUHJvdG9jb2xgLCBwcm90b2NvbCkgaW4gcmVxdWVzdOKAmXMgaGVhZGVyXG4gIC8vICAgIGxpc3QuXG4gIGZvciAoY29uc3QgcHJvdG9jb2wgb2YgcHJvdG9jb2xzKSB7XG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ3NlYy13ZWJzb2NrZXQtcHJvdG9jb2wnLCBwcm90b2NvbClcbiAgfVxuXG4gIC8vIDkuIExldCBwZXJtZXNzYWdlRGVmbGF0ZSBiZSBhIHVzZXItYWdlbnQgZGVmaW5lZFxuICAvLyAgICBcInBlcm1lc3NhZ2UtZGVmbGF0ZVwiIGV4dGVuc2lvbiBoZWFkZXIgdmFsdWUuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL2dlY2tvLWRldi9ibG9iL2NlNzgyMzRmNWU2NTNhNWQzOTE2ODEzZmY5OTBmMDUzNTEwMjI3YmMvbmV0d2Vyay9wcm90b2NvbC93ZWJzb2NrZXQvV2ViU29ja2V0Q2hhbm5lbC5jcHAjTDI2NzNcbiAgLy8gVE9ETzogZW5hYmxlIG9uY2UgcGVybWVzc2FnZS1kZWZsYXRlIGlzIHN1cHBvcnRlZFxuICBjb25zdCBwZXJtZXNzYWdlRGVmbGF0ZSA9ICcnIC8vICdwZXJtZXNzYWdlLWRlZmxhdGU7IDE1J1xuXG4gIC8vIDEwLiBBcHBlbmQgKGBTZWMtV2ViU29ja2V0LUV4dGVuc2lvbnNgLCBwZXJtZXNzYWdlRGVmbGF0ZSkgdG9cbiAgLy8gICAgIHJlcXVlc3TigJlzIGhlYWRlciBsaXN0LlxuICAvLyByZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnc2VjLXdlYnNvY2tldC1leHRlbnNpb25zJywgcGVybWVzc2FnZURlZmxhdGUpXG5cbiAgLy8gMTEuIEZldGNoIHJlcXVlc3Qgd2l0aCB1c2VQYXJhbGxlbFF1ZXVlIHNldCB0byB0cnVlLCBhbmRcbiAgLy8gICAgIHByb2Nlc3NSZXNwb25zZSBnaXZlbiByZXNwb25zZSBiZWluZyB0aGVzZSBzdGVwczpcbiAgY29uc3QgY29udHJvbGxlciA9IGZldGNoaW5nKHtcbiAgICByZXF1ZXN0LFxuICAgIHVzZVBhcmFsbGVsUXVldWU6IHRydWUsXG4gICAgZGlzcGF0Y2hlcjogb3B0aW9ucy5kaXNwYXRjaGVyID8/IGdldEdsb2JhbERpc3BhdGNoZXIoKSxcbiAgICBwcm9jZXNzUmVzcG9uc2UgKHJlc3BvbnNlKSB7XG4gICAgICAvLyAxLiBJZiByZXNwb25zZSBpcyBhIG5ldHdvcmsgZXJyb3Igb3IgaXRzIHN0YXR1cyBpcyBub3QgMTAxLFxuICAgICAgLy8gICAgZmFpbCB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24uXG4gICAgICBpZiAocmVzcG9uc2UudHlwZSA9PT0gJ2Vycm9yJyB8fCByZXNwb25zZS5zdGF0dXMgIT09IDEwMSkge1xuICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1JlY2VpdmVkIG5ldHdvcmsgZXJyb3Igb3Igbm9uLTEwMSBzdGF0dXMgY29kZS4nKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gMi4gSWYgcHJvdG9jb2xzIGlzIG5vdCB0aGUgZW1wdHkgbGlzdCBhbmQgZXh0cmFjdGluZyBoZWFkZXJcbiAgICAgIC8vICAgIGxpc3QgdmFsdWVzIGdpdmVuIGBTZWMtV2ViU29ja2V0LVByb3RvY29sYCBhbmQgcmVzcG9uc2XigJlzXG4gICAgICAvLyAgICBoZWFkZXIgbGlzdCByZXN1bHRzIGluIG51bGwsIGZhaWx1cmUsIG9yIHRoZSBlbXB0eSBieXRlXG4gICAgICAvLyAgICBzZXF1ZW5jZSwgdGhlbiBmYWlsIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbi5cbiAgICAgIGlmIChwcm90b2NvbHMubGVuZ3RoICE9PSAwICYmICFyZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ1NlYy1XZWJTb2NrZXQtUHJvdG9jb2wnKSkge1xuICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1NlcnZlciBkaWQgbm90IHJlc3BvbmQgd2l0aCBzZW50IHByb3RvY29scy4nKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gMy4gRm9sbG93IHRoZSByZXF1aXJlbWVudHMgc3RhdGVkIHN0ZXAgMiB0byBzdGVwIDYsIGluY2x1c2l2ZSxcbiAgICAgIC8vICAgIG9mIHRoZSBsYXN0IHNldCBvZiBzdGVwcyBpbiBzZWN0aW9uIDQuMSBvZiBUaGUgV2ViU29ja2V0XG4gICAgICAvLyAgICBQcm90b2NvbCB0byB2YWxpZGF0ZSByZXNwb25zZS4gVGhpcyBlaXRoZXIgcmVzdWx0cyBpbiBmYWlsXG4gICAgICAvLyAgICB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gb3IgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzXG4gICAgICAvLyAgICBlc3RhYmxpc2hlZC5cblxuICAgICAgLy8gMi4gSWYgdGhlIHJlc3BvbnNlIGxhY2tzIGFuIHxVcGdyYWRlfCBoZWFkZXIgZmllbGQgb3IgdGhlIHxVcGdyYWRlfFxuICAgICAgLy8gICAgaGVhZGVyIGZpZWxkIGNvbnRhaW5zIGEgdmFsdWUgdGhhdCBpcyBub3QgYW4gQVNDSUkgY2FzZS1cbiAgICAgIC8vICAgIGluc2Vuc2l0aXZlIG1hdGNoIGZvciB0aGUgdmFsdWUgXCJ3ZWJzb2NrZXRcIiwgdGhlIGNsaWVudCBNVVNUXG4gICAgICAvLyAgICBfRmFpbCB0aGUgV2ViU29ja2V0IENvbm5lY3Rpb25fLlxuICAgICAgaWYgKHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnVXBncmFkZScpPy50b0xvd2VyQ2FzZSgpICE9PSAnd2Vic29ja2V0Jykge1xuICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1NlcnZlciBkaWQgbm90IHNldCBVcGdyYWRlIGhlYWRlciB0byBcIndlYnNvY2tldFwiLicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyAzLiBJZiB0aGUgcmVzcG9uc2UgbGFja3MgYSB8Q29ubmVjdGlvbnwgaGVhZGVyIGZpZWxkIG9yIHRoZVxuICAgICAgLy8gICAgfENvbm5lY3Rpb258IGhlYWRlciBmaWVsZCBkb2Vzbid0IGNvbnRhaW4gYSB0b2tlbiB0aGF0IGlzIGFuXG4gICAgICAvLyAgICBBU0NJSSBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvciB0aGUgdmFsdWUgXCJVcGdyYWRlXCIsIHRoZSBjbGllbnRcbiAgICAgIC8vICAgIE1VU1QgX0ZhaWwgdGhlIFdlYlNvY2tldCBDb25uZWN0aW9uXy5cbiAgICAgIGlmIChyZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ0Nvbm5lY3Rpb24nKT8udG9Mb3dlckNhc2UoKSAhPT0gJ3VwZ3JhZGUnKSB7XG4gICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnU2VydmVyIGRpZCBub3Qgc2V0IENvbm5lY3Rpb24gaGVhZGVyIHRvIFwidXBncmFkZVwiLicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyA0LiBJZiB0aGUgcmVzcG9uc2UgbGFja3MgYSB8U2VjLVdlYlNvY2tldC1BY2NlcHR8IGhlYWRlciBmaWVsZCBvclxuICAgICAgLy8gICAgdGhlIHxTZWMtV2ViU29ja2V0LUFjY2VwdHwgY29udGFpbnMgYSB2YWx1ZSBvdGhlciB0aGFuIHRoZVxuICAgICAgLy8gICAgYmFzZTY0LWVuY29kZWQgU0hBLTEgb2YgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlIHxTZWMtV2ViU29ja2V0LVxuICAgICAgLy8gICAgS2V5fCAoYXMgYSBzdHJpbmcsIG5vdCBiYXNlNjQtZGVjb2RlZCkgd2l0aCB0aGUgc3RyaW5nIFwiMjU4RUFGQTUtXG4gICAgICAvLyAgICBFOTE0LTQ3REEtOTVDQS1DNUFCMERDODVCMTFcIiBidXQgaWdub3JpbmcgYW55IGxlYWRpbmcgYW5kXG4gICAgICAvLyAgICB0cmFpbGluZyB3aGl0ZXNwYWNlLCB0aGUgY2xpZW50IE1VU1QgX0ZhaWwgdGhlIFdlYlNvY2tldFxuICAgICAgLy8gICAgQ29ubmVjdGlvbl8uXG4gICAgICBjb25zdCBzZWNXU0FjY2VwdCA9IHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnU2VjLVdlYlNvY2tldC1BY2NlcHQnKVxuICAgICAgY29uc3QgZGlnZXN0ID0gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTEnKS51cGRhdGUoa2V5VmFsdWUgKyB1aWQpLmRpZ2VzdCgnYmFzZTY0JylcbiAgICAgIGlmIChzZWNXU0FjY2VwdCAhPT0gZGlnZXN0KSB7XG4gICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnSW5jb3JyZWN0IGhhc2ggcmVjZWl2ZWQgaW4gU2VjLVdlYlNvY2tldC1BY2NlcHQgaGVhZGVyLicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyA1LiBJZiB0aGUgcmVzcG9uc2UgaW5jbHVkZXMgYSB8U2VjLVdlYlNvY2tldC1FeHRlbnNpb25zfCBoZWFkZXJcbiAgICAgIC8vICAgIGZpZWxkIGFuZCB0aGlzIGhlYWRlciBmaWVsZCBpbmRpY2F0ZXMgdGhlIHVzZSBvZiBhbiBleHRlbnNpb25cbiAgICAgIC8vICAgIHRoYXQgd2FzIG5vdCBwcmVzZW50IGluIHRoZSBjbGllbnQncyBoYW5kc2hha2UgKHRoZSBzZXJ2ZXIgaGFzXG4gICAgICAvLyAgICBpbmRpY2F0ZWQgYW4gZXh0ZW5zaW9uIG5vdCByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCksIHRoZSBjbGllbnRcbiAgICAgIC8vICAgIE1VU1QgX0ZhaWwgdGhlIFdlYlNvY2tldCBDb25uZWN0aW9uXy4gIChUaGUgcGFyc2luZyBvZiB0aGlzXG4gICAgICAvLyAgICBoZWFkZXIgZmllbGQgdG8gZGV0ZXJtaW5lIHdoaWNoIGV4dGVuc2lvbnMgYXJlIHJlcXVlc3RlZCBpc1xuICAgICAgLy8gICAgZGlzY3Vzc2VkIGluIFNlY3Rpb24gOS4xLilcbiAgICAgIGNvbnN0IHNlY0V4dGVuc2lvbiA9IHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnU2VjLVdlYlNvY2tldC1FeHRlbnNpb25zJylcblxuICAgICAgaWYgKHNlY0V4dGVuc2lvbiAhPT0gbnVsbCAmJiBzZWNFeHRlbnNpb24gIT09IHBlcm1lc3NhZ2VEZWZsYXRlKSB7XG4gICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnUmVjZWl2ZWQgZGlmZmVyZW50IHBlcm1lc3NhZ2UtZGVmbGF0ZSB0aGFuIHRoZSBvbmUgc2V0LicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyA2LiBJZiB0aGUgcmVzcG9uc2UgaW5jbHVkZXMgYSB8U2VjLVdlYlNvY2tldC1Qcm90b2NvbHwgaGVhZGVyIGZpZWxkXG4gICAgICAvLyAgICBhbmQgdGhpcyBoZWFkZXIgZmllbGQgaW5kaWNhdGVzIHRoZSB1c2Ugb2YgYSBzdWJwcm90b2NvbCB0aGF0IHdhc1xuICAgICAgLy8gICAgbm90IHByZXNlbnQgaW4gdGhlIGNsaWVudCdzIGhhbmRzaGFrZSAodGhlIHNlcnZlciBoYXMgaW5kaWNhdGVkIGFcbiAgICAgIC8vICAgIHN1YnByb3RvY29sIG5vdCByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCksIHRoZSBjbGllbnQgTVVTVCBfRmFpbFxuICAgICAgLy8gICAgdGhlIFdlYlNvY2tldCBDb25uZWN0aW9uXy5cbiAgICAgIGNvbnN0IHNlY1Byb3RvY29sID0gcmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdTZWMtV2ViU29ja2V0LVByb3RvY29sJylcblxuICAgICAgaWYgKHNlY1Byb3RvY29sICE9PSBudWxsICYmIHNlY1Byb3RvY29sICE9PSByZXF1ZXN0LmhlYWRlcnNMaXN0LmdldCgnU2VjLVdlYlNvY2tldC1Qcm90b2NvbCcpKSB7XG4gICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnUHJvdG9jb2wgd2FzIG5vdCBzZXQgaW4gdGhlIG9wZW5pbmcgaGFuZHNoYWtlLicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICByZXNwb25zZS5zb2NrZXQub24oJ2RhdGEnLCBvblNvY2tldERhdGEpXG4gICAgICByZXNwb25zZS5zb2NrZXQub24oJ2Nsb3NlJywgb25Tb2NrZXRDbG9zZSlcbiAgICAgIHJlc3BvbnNlLnNvY2tldC5vbignZXJyb3InLCBvblNvY2tldEVycm9yKVxuXG4gICAgICBpZiAoY2hhbm5lbHMub3Blbi5oYXNTdWJzY3JpYmVycykge1xuICAgICAgICBjaGFubmVscy5vcGVuLnB1Ymxpc2goe1xuICAgICAgICAgIGFkZHJlc3M6IHJlc3BvbnNlLnNvY2tldC5hZGRyZXNzKCksXG4gICAgICAgICAgcHJvdG9jb2w6IHNlY1Byb3RvY29sLFxuICAgICAgICAgIGV4dGVuc2lvbnM6IHNlY0V4dGVuc2lvblxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBvbkVzdGFibGlzaChyZXNwb25zZSlcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIGNvbnRyb2xsZXJcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0J1ZmZlcn0gY2h1bmtcbiAqL1xuZnVuY3Rpb24gb25Tb2NrZXREYXRhIChjaHVuaykge1xuICBpZiAoIXRoaXMud3Nba0J5dGVQYXJzZXJdLndyaXRlKGNodW5rKSkge1xuICAgIHRoaXMucGF1c2UoKVxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNmZWVkYmFjay1mcm9tLXRoZS1wcm90b2NvbFxuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzY0NTUjc2VjdGlvbi03LjEuNFxuICovXG5mdW5jdGlvbiBvblNvY2tldENsb3NlICgpIHtcbiAgY29uc3QgeyB3cyB9ID0gdGhpc1xuXG4gIC8vIElmIHRoZSBUQ1AgY29ubmVjdGlvbiB3YXMgY2xvc2VkIGFmdGVyIHRoZVxuICAvLyBXZWJTb2NrZXQgY2xvc2luZyBoYW5kc2hha2Ugd2FzIGNvbXBsZXRlZCwgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uXG4gIC8vIGlzIHNhaWQgdG8gaGF2ZSBiZWVuIGNsb3NlZCBfY2xlYW5seV8uXG4gIGNvbnN0IHdhc0NsZWFuID0gd3Nba1NlbnRDbG9zZV0gJiYgd3Nba1JlY2VpdmVkQ2xvc2VdXG5cbiAgbGV0IGNvZGUgPSAxMDA1XG4gIGxldCByZWFzb24gPSAnJ1xuXG4gIGNvbnN0IHJlc3VsdCA9IHdzW2tCeXRlUGFyc2VyXS5jbG9zaW5nSW5mb1xuXG4gIGlmIChyZXN1bHQpIHtcbiAgICBjb2RlID0gcmVzdWx0LmNvZGUgPz8gMTAwNVxuICAgIHJlYXNvbiA9IHJlc3VsdC5yZWFzb25cbiAgfSBlbHNlIGlmICghd3Nba1NlbnRDbG9zZV0pIHtcbiAgICAvLyBJZiBfVGhlIFdlYlNvY2tldFxuICAgIC8vIENvbm5lY3Rpb24gaXMgQ2xvc2VkXyBhbmQgbm8gQ2xvc2UgY29udHJvbCBmcmFtZSB3YXMgcmVjZWl2ZWQgYnkgdGhlXG4gICAgLy8gZW5kcG9pbnQgKHN1Y2ggYXMgY291bGQgb2NjdXIgaWYgdGhlIHVuZGVybHlpbmcgdHJhbnNwb3J0IGNvbm5lY3Rpb25cbiAgICAvLyBpcyBsb3N0KSwgX1RoZSBXZWJTb2NrZXQgQ29ubmVjdGlvbiBDbG9zZSBDb2RlXyBpcyBjb25zaWRlcmVkIHRvIGJlXG4gICAgLy8gMTAwNi5cbiAgICBjb2RlID0gMTAwNlxuICB9XG5cbiAgLy8gMS4gQ2hhbmdlIHRoZSByZWFkeSBzdGF0ZSB0byBDTE9TRUQgKDMpLlxuICB3c1trUmVhZHlTdGF0ZV0gPSBzdGF0ZXMuQ0xPU0VEXG5cbiAgLy8gMi4gSWYgdGhlIHVzZXIgYWdlbnQgd2FzIHJlcXVpcmVkIHRvIGZhaWwgdGhlIFdlYlNvY2tldFxuICAvLyAgICBjb25uZWN0aW9uLCBvciBpZiB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gd2FzIGNsb3NlZFxuICAvLyAgICBhZnRlciBiZWluZyBmbGFnZ2VkIGFzIGZ1bGwsIGZpcmUgYW4gZXZlbnQgbmFtZWQgZXJyb3JcbiAgLy8gICAgYXQgdGhlIFdlYlNvY2tldCBvYmplY3QuXG4gIC8vIFRPRE9cblxuICAvLyAzLiBGaXJlIGFuIGV2ZW50IG5hbWVkIGNsb3NlIGF0IHRoZSBXZWJTb2NrZXQgb2JqZWN0LFxuICAvLyAgICB1c2luZyBDbG9zZUV2ZW50LCB3aXRoIHRoZSB3YXNDbGVhbiBhdHRyaWJ1dGVcbiAgLy8gICAgaW5pdGlhbGl6ZWQgdG8gdHJ1ZSBpZiB0aGUgY29ubmVjdGlvbiBjbG9zZWQgY2xlYW5seVxuICAvLyAgICBhbmQgZmFsc2Ugb3RoZXJ3aXNlLCB0aGUgY29kZSBhdHRyaWJ1dGUgaW5pdGlhbGl6ZWQgdG9cbiAgLy8gICAgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGNsb3NlIGNvZGUsIGFuZCB0aGUgcmVhc29uXG4gIC8vICAgIGF0dHJpYnV0ZSBpbml0aWFsaXplZCB0byB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIFVURi04XG4gIC8vICAgIGRlY29kZSB3aXRob3V0IEJPTSB0byB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gY2xvc2VcbiAgLy8gICAgcmVhc29uLlxuICBmaXJlRXZlbnQoJ2Nsb3NlJywgd3MsIENsb3NlRXZlbnQsIHtcbiAgICB3YXNDbGVhbiwgY29kZSwgcmVhc29uXG4gIH0pXG5cbiAgaWYgKGNoYW5uZWxzLmNsb3NlLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgY2hhbm5lbHMuY2xvc2UucHVibGlzaCh7XG4gICAgICB3ZWJzb2NrZXQ6IHdzLFxuICAgICAgY29kZSxcbiAgICAgIHJlYXNvblxuICAgIH0pXG4gIH1cbn1cblxuZnVuY3Rpb24gb25Tb2NrZXRFcnJvciAoZXJyb3IpIHtcbiAgY29uc3QgeyB3cyB9ID0gdGhpc1xuXG4gIHdzW2tSZWFkeVN0YXRlXSA9IHN0YXRlcy5DTE9TSU5HXG5cbiAgaWYgKGNoYW5uZWxzLnNvY2tldEVycm9yLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgY2hhbm5lbHMuc29ja2V0RXJyb3IucHVibGlzaChlcnJvcilcbiAgfVxuXG4gIHRoaXMuZGVzdHJveSgpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBlc3RhYmxpc2hXZWJTb2NrZXRDb25uZWN0aW9uXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IG1heFVuc2lnbmVkMTZCaXQgfSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcblxuLyoqIEB0eXBlIHtpbXBvcnQoJ2NyeXB0bycpfSAqL1xubGV0IGNyeXB0b1xudHJ5IHtcbiAgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJylcbn0gY2F0Y2gge1xuXG59XG5cbmNsYXNzIFdlYnNvY2tldEZyYW1lU2VuZCB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge0J1ZmZlcnx1bmRlZmluZWR9IGRhdGFcbiAgICovXG4gIGNvbnN0cnVjdG9yIChkYXRhKSB7XG4gICAgdGhpcy5mcmFtZURhdGEgPSBkYXRhXG4gICAgdGhpcy5tYXNrS2V5ID0gY3J5cHRvLnJhbmRvbUJ5dGVzKDQpXG4gIH1cblxuICBjcmVhdGVGcmFtZSAob3Bjb2RlKSB7XG4gICAgY29uc3QgYm9keUxlbmd0aCA9IHRoaXMuZnJhbWVEYXRhPy5ieXRlTGVuZ3RoID8/IDBcblxuICAgIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICAgIGxldCBwYXlsb2FkTGVuZ3RoID0gYm9keUxlbmd0aCAvLyAwLTEyNVxuICAgIGxldCBvZmZzZXQgPSA2XG5cbiAgICBpZiAoYm9keUxlbmd0aCA+IG1heFVuc2lnbmVkMTZCaXQpIHtcbiAgICAgIG9mZnNldCArPSA4IC8vIHBheWxvYWQgbGVuZ3RoIGlzIG5leHQgOCBieXRlc1xuICAgICAgcGF5bG9hZExlbmd0aCA9IDEyN1xuICAgIH0gZWxzZSBpZiAoYm9keUxlbmd0aCA+IDEyNSkge1xuICAgICAgb2Zmc2V0ICs9IDIgLy8gcGF5bG9hZCBsZW5ndGggaXMgbmV4dCAyIGJ5dGVzXG4gICAgICBwYXlsb2FkTGVuZ3RoID0gMTI2XG4gICAgfVxuXG4gICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKGJvZHlMZW5ndGggKyBvZmZzZXQpXG5cbiAgICAvLyBDbGVhciBmaXJzdCAyIGJ5dGVzLCBldmVyeXRoaW5nIGVsc2UgaXMgb3ZlcndyaXR0ZW5cbiAgICBidWZmZXJbMF0gPSBidWZmZXJbMV0gPSAwXG4gICAgYnVmZmVyWzBdIHw9IDB4ODAgLy8gRklOXG4gICAgYnVmZmVyWzBdID0gKGJ1ZmZlclswXSAmIDB4RjApICsgb3Bjb2RlIC8vIG9wY29kZVxuXG4gICAgLyohIHdzLiBNSVQgTGljZW5zZS4gRWluYXIgT3R0byBTdGFuZ3ZpayA8ZWluYXJvc0BnbWFpbC5jb20+ICovXG4gICAgYnVmZmVyW29mZnNldCAtIDRdID0gdGhpcy5tYXNrS2V5WzBdXG4gICAgYnVmZmVyW29mZnNldCAtIDNdID0gdGhpcy5tYXNrS2V5WzFdXG4gICAgYnVmZmVyW29mZnNldCAtIDJdID0gdGhpcy5tYXNrS2V5WzJdXG4gICAgYnVmZmVyW29mZnNldCAtIDFdID0gdGhpcy5tYXNrS2V5WzNdXG5cbiAgICBidWZmZXJbMV0gPSBwYXlsb2FkTGVuZ3RoXG5cbiAgICBpZiAocGF5bG9hZExlbmd0aCA9PT0gMTI2KSB7XG4gICAgICBidWZmZXIud3JpdGVVSW50MTZCRShib2R5TGVuZ3RoLCAyKVxuICAgIH0gZWxzZSBpZiAocGF5bG9hZExlbmd0aCA9PT0gMTI3KSB7XG4gICAgICAvLyBDbGVhciBleHRlbmRlZCBwYXlsb2FkIGxlbmd0aFxuICAgICAgYnVmZmVyWzJdID0gYnVmZmVyWzNdID0gMFxuICAgICAgYnVmZmVyLndyaXRlVUludEJFKGJvZHlMZW5ndGgsIDQsIDYpXG4gICAgfVxuXG4gICAgYnVmZmVyWzFdIHw9IDB4ODAgLy8gTUFTS1xuXG4gICAgLy8gbWFzayBib2R5XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBib2R5TGVuZ3RoOyBpKyspIHtcbiAgICAgIGJ1ZmZlcltvZmZzZXQgKyBpXSA9IHRoaXMuZnJhbWVEYXRhW2ldIF4gdGhpcy5tYXNrS2V5W2kgJSA0XVxuICAgIH1cblxuICAgIHJldHVybiBidWZmZXJcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgV2Vic29ja2V0RnJhbWVTZW5kXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IFdyaXRhYmxlIH0gPSByZXF1aXJlKCdzdHJlYW0nKVxuY29uc3QgZGlhZ25vc3RpY3NDaGFubmVsID0gcmVxdWlyZSgnZGlhZ25vc3RpY3NfY2hhbm5lbCcpXG5jb25zdCB7IHBhcnNlclN0YXRlcywgb3Bjb2Rlcywgc3RhdGVzLCBlbXB0eUJ1ZmZlciB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3QgeyBrUmVhZHlTdGF0ZSwga1NlbnRDbG9zZSwga1Jlc3BvbnNlLCBrUmVjZWl2ZWRDbG9zZSB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgaXNWYWxpZFN0YXR1c0NvZGUsIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uLCB3ZWJzb2NrZXRNZXNzYWdlUmVjZWl2ZWQgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IFdlYnNvY2tldEZyYW1lU2VuZCB9ID0gcmVxdWlyZSgnLi9mcmFtZScpXG5cbi8vIFRoaXMgY29kZSB3YXMgaW5mbHVlbmNlZCBieSB3cyByZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4vLyBDb3B5cmlnaHQgKGMpIDIwMTEgRWluYXIgT3R0byBTdGFuZ3ZpayA8ZWluYXJvc0BnbWFpbC5jb20+XG4vLyBDb3B5cmlnaHQgKGMpIDIwMTMgQXJub3V0IEthemVtaWVyIGFuZCBjb250cmlidXRvcnNcbi8vIENvcHlyaWdodCAoYykgMjAxNiBMdWlnaSBQaW5jYSBhbmQgY29udHJpYnV0b3JzXG5cbmNvbnN0IGNoYW5uZWxzID0ge31cbmNoYW5uZWxzLnBpbmcgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOndlYnNvY2tldDpwaW5nJylcbmNoYW5uZWxzLnBvbmcgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOndlYnNvY2tldDpwb25nJylcblxuY2xhc3MgQnl0ZVBhcnNlciBleHRlbmRzIFdyaXRhYmxlIHtcbiAgI2J1ZmZlcnMgPSBbXVxuICAjYnl0ZU9mZnNldCA9IDBcblxuICAjc3RhdGUgPSBwYXJzZXJTdGF0ZXMuSU5GT1xuXG4gICNpbmZvID0ge31cbiAgI2ZyYWdtZW50cyA9IFtdXG5cbiAgY29uc3RydWN0b3IgKHdzKSB7XG4gICAgc3VwZXIoKVxuXG4gICAgdGhpcy53cyA9IHdzXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtCdWZmZXJ9IGNodW5rXG4gICAqIEBwYXJhbSB7KCkgPT4gdm9pZH0gY2FsbGJhY2tcbiAgICovXG4gIF93cml0ZSAoY2h1bmssIF8sIGNhbGxiYWNrKSB7XG4gICAgdGhpcy4jYnVmZmVycy5wdXNoKGNodW5rKVxuICAgIHRoaXMuI2J5dGVPZmZzZXQgKz0gY2h1bmsubGVuZ3RoXG5cbiAgICB0aGlzLnJ1bihjYWxsYmFjaylcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHdoZW5ldmVyIGEgbmV3IGNodW5rIGlzIHJlY2VpdmVkLlxuICAgKiBDYWxsYmFjayBpcyBjYWxsZWQgd2hlbmV2ZXIgdGhlcmUgYXJlIG5vIG1vcmUgY2h1bmtzIGJ1ZmZlcmluZyxcbiAgICogb3Igbm90IGVub3VnaCBieXRlcyBhcmUgYnVmZmVyZWQgdG8gcGFyc2UuXG4gICAqL1xuICBydW4gKGNhbGxiYWNrKSB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmICh0aGlzLiNzdGF0ZSA9PT0gcGFyc2VyU3RhdGVzLklORk8pIHtcbiAgICAgICAgLy8gSWYgdGhlcmUgYXJlbid0IGVub3VnaCBieXRlcyB0byBwYXJzZSB0aGUgcGF5bG9hZCBsZW5ndGgsIGV0Yy5cbiAgICAgICAgaWYgKHRoaXMuI2J5dGVPZmZzZXQgPCAyKSB7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IHRoaXMuY29uc3VtZSgyKVxuXG4gICAgICAgIHRoaXMuI2luZm8uZmluID0gKGJ1ZmZlclswXSAmIDB4ODApICE9PSAwXG4gICAgICAgIHRoaXMuI2luZm8ub3Bjb2RlID0gYnVmZmVyWzBdICYgMHgwRlxuXG4gICAgICAgIC8vIElmIHdlIHJlY2VpdmUgYSBmcmFnbWVudGVkIG1lc3NhZ2UsIHdlIHVzZSB0aGUgdHlwZSBvZiB0aGUgZmlyc3RcbiAgICAgICAgLy8gZnJhbWUgdG8gcGFyc2UgdGhlIGZ1bGwgbWVzc2FnZSBhcyBiaW5hcnkvdGV4dCwgd2hlbiBpdCdzIHRlcm1pbmF0ZWRcbiAgICAgICAgdGhpcy4jaW5mby5vcmlnaW5hbE9wY29kZSA/Pz0gdGhpcy4jaW5mby5vcGNvZGVcblxuICAgICAgICB0aGlzLiNpbmZvLmZyYWdtZW50ZWQgPSAhdGhpcy4jaW5mby5maW4gJiYgdGhpcy4jaW5mby5vcGNvZGUgIT09IG9wY29kZXMuQ09OVElOVUFUSU9OXG5cbiAgICAgICAgaWYgKHRoaXMuI2luZm8uZnJhZ21lbnRlZCAmJiB0aGlzLiNpbmZvLm9wY29kZSAhPT0gb3Bjb2Rlcy5CSU5BUlkgJiYgdGhpcy4jaW5mby5vcGNvZGUgIT09IG9wY29kZXMuVEVYVCkge1xuICAgICAgICAgIC8vIE9ubHkgdGV4dCBhbmQgYmluYXJ5IGZyYW1lcyBjYW4gYmUgZnJhZ21lbnRlZFxuICAgICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHRoaXMud3MsICdJbnZhbGlkIGZyYW1lIHR5cGUgd2FzIGZyYWdtZW50ZWQuJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBheWxvYWRMZW5ndGggPSBidWZmZXJbMV0gJiAweDdGXG5cbiAgICAgICAgaWYgKHBheWxvYWRMZW5ndGggPD0gMTI1KSB7XG4gICAgICAgICAgdGhpcy4jaW5mby5wYXlsb2FkTGVuZ3RoID0gcGF5bG9hZExlbmd0aFxuICAgICAgICAgIHRoaXMuI3N0YXRlID0gcGFyc2VyU3RhdGVzLlJFQURfREFUQVxuICAgICAgICB9IGVsc2UgaWYgKHBheWxvYWRMZW5ndGggPT09IDEyNikge1xuICAgICAgICAgIHRoaXMuI3N0YXRlID0gcGFyc2VyU3RhdGVzLlBBWUxPQURMRU5HVEhfMTZcbiAgICAgICAgfSBlbHNlIGlmIChwYXlsb2FkTGVuZ3RoID09PSAxMjcpIHtcbiAgICAgICAgICB0aGlzLiNzdGF0ZSA9IHBhcnNlclN0YXRlcy5QQVlMT0FETEVOR1RIXzY0XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy4jaW5mby5mcmFnbWVudGVkICYmIHBheWxvYWRMZW5ndGggPiAxMjUpIHtcbiAgICAgICAgICAvLyBBIGZyYWdtZW50ZWQgZnJhbWUgY2FuJ3QgYmUgZnJhZ21lbnRlZCBpdHNlbGZcbiAgICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih0aGlzLndzLCAnRnJhZ21lbnRlZCBmcmFtZSBleGNlZWRlZCAxMjUgYnl0ZXMuJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAodGhpcy4jaW5mby5vcGNvZGUgPT09IG9wY29kZXMuUElORyB8fFxuICAgICAgICAgICAgdGhpcy4jaW5mby5vcGNvZGUgPT09IG9wY29kZXMuUE9ORyB8fFxuICAgICAgICAgICAgdGhpcy4jaW5mby5vcGNvZGUgPT09IG9wY29kZXMuQ0xPU0UpICYmXG4gICAgICAgICAgcGF5bG9hZExlbmd0aCA+IDEyNVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBDb250cm9sIGZyYW1lcyBjYW4gaGF2ZSBhIHBheWxvYWQgbGVuZ3RoIG9mIDEyNSBieXRlcyBNQVhcbiAgICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih0aGlzLndzLCAnUGF5bG9hZCBsZW5ndGggZm9yIGNvbnRyb2wgZnJhbWUgZXhjZWVkZWQgMTI1IGJ5dGVzLicpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy4jaW5mby5vcGNvZGUgPT09IG9wY29kZXMuQ0xPU0UpIHtcbiAgICAgICAgICBpZiAocGF5bG9hZExlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24odGhpcy53cywgJ1JlY2VpdmVkIGNsb3NlIGZyYW1lIHdpdGggYSAxLWJ5dGUgYm9keS4nKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgYm9keSA9IHRoaXMuY29uc3VtZShwYXlsb2FkTGVuZ3RoKVxuXG4gICAgICAgICAgdGhpcy4jaW5mby5jbG9zZUluZm8gPSB0aGlzLnBhcnNlQ2xvc2VCb2R5KGZhbHNlLCBib2R5KVxuXG4gICAgICAgICAgaWYgKCF0aGlzLndzW2tTZW50Q2xvc2VdKSB7XG4gICAgICAgICAgICAvLyBJZiBhbiBlbmRwb2ludCByZWNlaXZlcyBhIENsb3NlIGZyYW1lIGFuZCBkaWQgbm90IHByZXZpb3VzbHkgc2VuZCBhXG4gICAgICAgICAgICAvLyBDbG9zZSBmcmFtZSwgdGhlIGVuZHBvaW50IE1VU1Qgc2VuZCBhIENsb3NlIGZyYW1lIGluIHJlc3BvbnNlLiAgKFdoZW5cbiAgICAgICAgICAgIC8vIHNlbmRpbmcgYSBDbG9zZSBmcmFtZSBpbiByZXNwb25zZSwgdGhlIGVuZHBvaW50IHR5cGljYWxseSBlY2hvcyB0aGVcbiAgICAgICAgICAgIC8vIHN0YXR1cyBjb2RlIGl0IHJlY2VpdmVkLilcbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMilcbiAgICAgICAgICAgIGJvZHkud3JpdGVVSW50MTZCRSh0aGlzLiNpbmZvLmNsb3NlSW5mby5jb2RlLCAwKVxuICAgICAgICAgICAgY29uc3QgY2xvc2VGcmFtZSA9IG5ldyBXZWJzb2NrZXRGcmFtZVNlbmQoYm9keSlcblxuICAgICAgICAgICAgdGhpcy53c1trUmVzcG9uc2VdLnNvY2tldC53cml0ZShcbiAgICAgICAgICAgICAgY2xvc2VGcmFtZS5jcmVhdGVGcmFtZShvcGNvZGVzLkNMT1NFKSxcbiAgICAgICAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghZXJyKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLndzW2tTZW50Q2xvc2VdID0gdHJ1ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFVwb24gZWl0aGVyIHNlbmRpbmcgb3IgcmVjZWl2aW5nIGEgQ2xvc2UgY29udHJvbCBmcmFtZSwgaXQgaXMgc2FpZFxuICAgICAgICAgIC8vIHRoYXQgX1RoZSBXZWJTb2NrZXQgQ2xvc2luZyBIYW5kc2hha2UgaXMgU3RhcnRlZF8gYW5kIHRoYXQgdGhlXG4gICAgICAgICAgLy8gV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgaW4gdGhlIENMT1NJTkcgc3RhdGUuXG4gICAgICAgICAgdGhpcy53c1trUmVhZHlTdGF0ZV0gPSBzdGF0ZXMuQ0xPU0lOR1xuICAgICAgICAgIHRoaXMud3Nba1JlY2VpdmVkQ2xvc2VdID0gdHJ1ZVxuXG4gICAgICAgICAgdGhpcy5lbmQoKVxuXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy4jaW5mby5vcGNvZGUgPT09IG9wY29kZXMuUElORykge1xuICAgICAgICAgIC8vIFVwb24gcmVjZWlwdCBvZiBhIFBpbmcgZnJhbWUsIGFuIGVuZHBvaW50IE1VU1Qgc2VuZCBhIFBvbmcgZnJhbWUgaW5cbiAgICAgICAgICAvLyByZXNwb25zZSwgdW5sZXNzIGl0IGFscmVhZHkgcmVjZWl2ZWQgYSBDbG9zZSBmcmFtZS5cbiAgICAgICAgICAvLyBBIFBvbmcgZnJhbWUgc2VudCBpbiByZXNwb25zZSB0byBhIFBpbmcgZnJhbWUgbXVzdCBoYXZlIGlkZW50aWNhbFxuICAgICAgICAgIC8vIFwiQXBwbGljYXRpb24gZGF0YVwiXG5cbiAgICAgICAgICBjb25zdCBib2R5ID0gdGhpcy5jb25zdW1lKHBheWxvYWRMZW5ndGgpXG5cbiAgICAgICAgICBpZiAoIXRoaXMud3Nba1JlY2VpdmVkQ2xvc2VdKSB7XG4gICAgICAgICAgICBjb25zdCBmcmFtZSA9IG5ldyBXZWJzb2NrZXRGcmFtZVNlbmQoYm9keSlcblxuICAgICAgICAgICAgdGhpcy53c1trUmVzcG9uc2VdLnNvY2tldC53cml0ZShmcmFtZS5jcmVhdGVGcmFtZShvcGNvZGVzLlBPTkcpKVxuXG4gICAgICAgICAgICBpZiAoY2hhbm5lbHMucGluZy5oYXNTdWJzY3JpYmVycykge1xuICAgICAgICAgICAgICBjaGFubmVscy5waW5nLnB1Ymxpc2goe1xuICAgICAgICAgICAgICAgIHBheWxvYWQ6IGJvZHlcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLiNzdGF0ZSA9IHBhcnNlclN0YXRlcy5JTkZPXG5cbiAgICAgICAgICBpZiAodGhpcy4jYnl0ZU9mZnNldCA+IDApIHtcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKClcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLiNpbmZvLm9wY29kZSA9PT0gb3Bjb2Rlcy5QT05HKSB7XG4gICAgICAgICAgLy8gQSBQb25nIGZyYW1lIE1BWSBiZSBzZW50IHVuc29saWNpdGVkLiAgVGhpcyBzZXJ2ZXMgYXMgYVxuICAgICAgICAgIC8vIHVuaWRpcmVjdGlvbmFsIGhlYXJ0YmVhdC4gIEEgcmVzcG9uc2UgdG8gYW4gdW5zb2xpY2l0ZWQgUG9uZyBmcmFtZSBpc1xuICAgICAgICAgIC8vIG5vdCBleHBlY3RlZC5cblxuICAgICAgICAgIGNvbnN0IGJvZHkgPSB0aGlzLmNvbnN1bWUocGF5bG9hZExlbmd0aClcblxuICAgICAgICAgIGlmIChjaGFubmVscy5wb25nLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICAgICAgICBjaGFubmVscy5wb25nLnB1Ymxpc2goe1xuICAgICAgICAgICAgICBwYXlsb2FkOiBib2R5XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0aGlzLiNieXRlT2Zmc2V0ID4gMCkge1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2soKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuI3N0YXRlID09PSBwYXJzZXJTdGF0ZXMuUEFZTE9BRExFTkdUSF8xNikge1xuICAgICAgICBpZiAodGhpcy4jYnl0ZU9mZnNldCA8IDIpIHtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYnVmZmVyID0gdGhpcy5jb25zdW1lKDIpXG5cbiAgICAgICAgdGhpcy4jaW5mby5wYXlsb2FkTGVuZ3RoID0gYnVmZmVyLnJlYWRVSW50MTZCRSgwKVxuICAgICAgICB0aGlzLiNzdGF0ZSA9IHBhcnNlclN0YXRlcy5SRUFEX0RBVEFcbiAgICAgIH0gZWxzZSBpZiAodGhpcy4jc3RhdGUgPT09IHBhcnNlclN0YXRlcy5QQVlMT0FETEVOR1RIXzY0KSB7XG4gICAgICAgIGlmICh0aGlzLiNieXRlT2Zmc2V0IDwgOCkge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBidWZmZXIgPSB0aGlzLmNvbnN1bWUoOClcbiAgICAgICAgY29uc3QgdXBwZXIgPSBidWZmZXIucmVhZFVJbnQzMkJFKDApXG5cbiAgICAgICAgLy8gMl4zMSBpcyB0aGUgbWF4aW5pbXVtIGJ5dGVzIGFuIGFycmF5YnVmZmVyIGNhbiBjb250YWluXG4gICAgICAgIC8vIG9uIDMyLWJpdCBzeXN0ZW1zLiBBbHRob3VnaCwgb24gNjQtYml0IHN5c3RlbXMsIHRoaXMgaXNcbiAgICAgICAgLy8gMl41My0xIGJ5dGVzLlxuICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9FcnJvcnMvSW52YWxpZF9hcnJheV9sZW5ndGhcbiAgICAgICAgLy8gaHR0cHM6Ly9zb3VyY2UuY2hyb21pdW0ub3JnL2Nocm9taXVtL2Nocm9taXVtL3NyYy8rL21haW46djgvc3JjL2NvbW1vbi9nbG9iYWxzLmg7ZHJjPTE5NDYyMTJhYzAxMDA2NjhmMTRlYjllMjg0M2JkZDg0NmU1MTBhMWU7YnB2PTE7YnB0PTE7bD0xMjc1XG4gICAgICAgIC8vIGh0dHBzOi8vc291cmNlLmNocm9taXVtLm9yZy9jaHJvbWl1bS9jaHJvbWl1bS9zcmMvKy9tYWluOnY4L3NyYy9vYmplY3RzL2pzLWFycmF5LWJ1ZmZlci5oO2w9MzQ7ZHJjPTE5NDYyMTJhYzAxMDA2NjhmMTRlYjllMjg0M2JkZDg0NmU1MTBhMWVcbiAgICAgICAgaWYgKHVwcGVyID4gMiAqKiAzMSAtIDEpIHtcbiAgICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih0aGlzLndzLCAnUmVjZWl2ZWQgcGF5bG9hZCBsZW5ndGggPiAyXjMxIGJ5dGVzLicpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsb3dlciA9IGJ1ZmZlci5yZWFkVUludDMyQkUoNClcblxuICAgICAgICB0aGlzLiNpbmZvLnBheWxvYWRMZW5ndGggPSAodXBwZXIgPDwgOCkgKyBsb3dlclxuICAgICAgICB0aGlzLiNzdGF0ZSA9IHBhcnNlclN0YXRlcy5SRUFEX0RBVEFcbiAgICAgIH0gZWxzZSBpZiAodGhpcy4jc3RhdGUgPT09IHBhcnNlclN0YXRlcy5SRUFEX0RBVEEpIHtcbiAgICAgICAgaWYgKHRoaXMuI2J5dGVPZmZzZXQgPCB0aGlzLiNpbmZvLnBheWxvYWRMZW5ndGgpIHtcbiAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBzdGlsbCBtb3JlIGRhdGEgaW4gdGhpcyBjaHVuayB0aGF0IG5lZWRzIHRvIGJlIHJlYWRcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuI2J5dGVPZmZzZXQgPj0gdGhpcy4jaW5mby5wYXlsb2FkTGVuZ3RoKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIHNlcnZlciBzZW50IG11bHRpcGxlIGZyYW1lcyBpbiBhIHNpbmdsZSBjaHVua1xuXG4gICAgICAgICAgY29uc3QgYm9keSA9IHRoaXMuY29uc3VtZSh0aGlzLiNpbmZvLnBheWxvYWRMZW5ndGgpXG5cbiAgICAgICAgICB0aGlzLiNmcmFnbWVudHMucHVzaChib2R5KVxuXG4gICAgICAgICAgLy8gSWYgdGhlIGZyYW1lIGlzIHVuZnJhZ21lbnRlZCwgb3IgYSBmcmFnbWVudGVkIGZyYW1lIHdhcyB0ZXJtaW5hdGVkLFxuICAgICAgICAgIC8vIGEgbWVzc2FnZSB3YXMgcmVjZWl2ZWRcbiAgICAgICAgICBpZiAoIXRoaXMuI2luZm8uZnJhZ21lbnRlZCB8fCAodGhpcy4jaW5mby5maW4gJiYgdGhpcy4jaW5mby5vcGNvZGUgPT09IG9wY29kZXMuQ09OVElOVUFUSU9OKSkge1xuICAgICAgICAgICAgY29uc3QgZnVsbE1lc3NhZ2UgPSBCdWZmZXIuY29uY2F0KHRoaXMuI2ZyYWdtZW50cylcblxuICAgICAgICAgICAgd2Vic29ja2V0TWVzc2FnZVJlY2VpdmVkKHRoaXMud3MsIHRoaXMuI2luZm8ub3JpZ2luYWxPcGNvZGUsIGZ1bGxNZXNzYWdlKVxuXG4gICAgICAgICAgICB0aGlzLiNpbmZvID0ge31cbiAgICAgICAgICAgIHRoaXMuI2ZyYWdtZW50cy5sZW5ndGggPSAwXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy4jc3RhdGUgPSBwYXJzZXJTdGF0ZXMuSU5GT1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLiNieXRlT2Zmc2V0ID4gMCkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2soKVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUYWtlIG4gYnl0ZXMgZnJvbSB0aGUgYnVmZmVyZWQgQnVmZmVyc1xuICAgKiBAcGFyYW0ge251bWJlcn0gblxuICAgKiBAcmV0dXJucyB7QnVmZmVyfG51bGx9XG4gICAqL1xuICBjb25zdW1lIChuKSB7XG4gICAgaWYgKG4gPiB0aGlzLiNieXRlT2Zmc2V0KSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0gZWxzZSBpZiAobiA9PT0gMCkge1xuICAgICAgcmV0dXJuIGVtcHR5QnVmZmVyXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuI2J1ZmZlcnNbMF0ubGVuZ3RoID09PSBuKSB7XG4gICAgICB0aGlzLiNieXRlT2Zmc2V0IC09IHRoaXMuI2J1ZmZlcnNbMF0ubGVuZ3RoXG4gICAgICByZXR1cm4gdGhpcy4jYnVmZmVycy5zaGlmdCgpXG4gICAgfVxuXG4gICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKG4pXG4gICAgbGV0IG9mZnNldCA9IDBcblxuICAgIHdoaWxlIChvZmZzZXQgIT09IG4pIHtcbiAgICAgIGNvbnN0IG5leHQgPSB0aGlzLiNidWZmZXJzWzBdXG4gICAgICBjb25zdCB7IGxlbmd0aCB9ID0gbmV4dFxuXG4gICAgICBpZiAobGVuZ3RoICsgb2Zmc2V0ID09PSBuKSB7XG4gICAgICAgIGJ1ZmZlci5zZXQodGhpcy4jYnVmZmVycy5zaGlmdCgpLCBvZmZzZXQpXG4gICAgICAgIGJyZWFrXG4gICAgICB9IGVsc2UgaWYgKGxlbmd0aCArIG9mZnNldCA+IG4pIHtcbiAgICAgICAgYnVmZmVyLnNldChuZXh0LnN1YmFycmF5KDAsIG4gLSBvZmZzZXQpLCBvZmZzZXQpXG4gICAgICAgIHRoaXMuI2J1ZmZlcnNbMF0gPSBuZXh0LnN1YmFycmF5KG4gLSBvZmZzZXQpXG4gICAgICAgIGJyZWFrXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBidWZmZXIuc2V0KHRoaXMuI2J1ZmZlcnMuc2hpZnQoKSwgb2Zmc2V0KVxuICAgICAgICBvZmZzZXQgKz0gbmV4dC5sZW5ndGhcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLiNieXRlT2Zmc2V0IC09IG5cblxuICAgIHJldHVybiBidWZmZXJcbiAgfVxuXG4gIHBhcnNlQ2xvc2VCb2R5IChvbmx5Q29kZSwgZGF0YSkge1xuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NSNzZWN0aW9uLTcuMS41XG4gICAgLyoqIEB0eXBlIHtudW1iZXJ8dW5kZWZpbmVkfSAqL1xuICAgIGxldCBjb2RlXG5cbiAgICBpZiAoZGF0YS5sZW5ndGggPj0gMikge1xuICAgICAgLy8gX1RoZSBXZWJTb2NrZXQgQ29ubmVjdGlvbiBDbG9zZSBDb2RlXyBpc1xuICAgICAgLy8gZGVmaW5lZCBhcyB0aGUgc3RhdHVzIGNvZGUgKFNlY3Rpb24gNy40KSBjb250YWluZWQgaW4gdGhlIGZpcnN0IENsb3NlXG4gICAgICAvLyBjb250cm9sIGZyYW1lIHJlY2VpdmVkIGJ5IHRoZSBhcHBsaWNhdGlvblxuICAgICAgY29kZSA9IGRhdGEucmVhZFVJbnQxNkJFKDApXG4gICAgfVxuXG4gICAgaWYgKG9ubHlDb2RlKSB7XG4gICAgICBpZiAoIWlzVmFsaWRTdGF0dXNDb2RlKGNvZGUpKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7IGNvZGUgfVxuICAgIH1cblxuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NSNzZWN0aW9uLTcuMS42XG4gICAgLyoqIEB0eXBlIHtCdWZmZXJ9ICovXG4gICAgbGV0IHJlYXNvbiA9IGRhdGEuc3ViYXJyYXkoMilcblxuICAgIC8vIFJlbW92ZSBCT01cbiAgICBpZiAocmVhc29uWzBdID09PSAweEVGICYmIHJlYXNvblsxXSA9PT0gMHhCQiAmJiByZWFzb25bMl0gPT09IDB4QkYpIHtcbiAgICAgIHJlYXNvbiA9IHJlYXNvbi5zdWJhcnJheSgzKVxuICAgIH1cblxuICAgIGlmIChjb2RlICE9PSB1bmRlZmluZWQgJiYgIWlzVmFsaWRTdGF0dXNDb2RlKGNvZGUpKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAvLyBUT0RPOiBvcHRpbWl6ZSB0aGlzXG4gICAgICByZWFzb24gPSBuZXcgVGV4dERlY29kZXIoJ3V0Zi04JywgeyBmYXRhbDogdHJ1ZSB9KS5kZWNvZGUocmVhc29uKVxuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICByZXR1cm4geyBjb2RlLCByZWFzb24gfVxuICB9XG5cbiAgZ2V0IGNsb3NpbmdJbmZvICgpIHtcbiAgICByZXR1cm4gdGhpcy4jaW5mby5jbG9zZUluZm9cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQnl0ZVBhcnNlclxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3dlYmlkbCcpXG5jb25zdCB7IERPTUV4Y2VwdGlvbiB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvY29uc3RhbnRzJylcbmNvbnN0IHsgVVJMU2VyaWFsaXplciB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvZGF0YVVSTCcpXG5jb25zdCB7IGdldEdsb2JhbE9yaWdpbiB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvZ2xvYmFsJylcbmNvbnN0IHsgc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycywgc3RhdGVzLCBvcGNvZGVzLCBlbXB0eUJ1ZmZlciB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3Qge1xuICBrV2ViU29ja2V0VVJMLFxuICBrUmVhZHlTdGF0ZSxcbiAga0NvbnRyb2xsZXIsXG4gIGtCaW5hcnlUeXBlLFxuICBrUmVzcG9uc2UsXG4gIGtTZW50Q2xvc2UsXG4gIGtCeXRlUGFyc2VyXG59ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgaXNFc3RhYmxpc2hlZCwgaXNDbG9zaW5nLCBpc1ZhbGlkU3VicHJvdG9jb2wsIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uLCBmaXJlRXZlbnQgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IGVzdGFibGlzaFdlYlNvY2tldENvbm5lY3Rpb24gfSA9IHJlcXVpcmUoJy4vY29ubmVjdGlvbicpXG5jb25zdCB7IFdlYnNvY2tldEZyYW1lU2VuZCB9ID0gcmVxdWlyZSgnLi9mcmFtZScpXG5jb25zdCB7IEJ5dGVQYXJzZXIgfSA9IHJlcXVpcmUoJy4vcmVjZWl2ZXInKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5LCBpc0Jsb2JMaWtlIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBnZXRHbG9iYWxEaXNwYXRjaGVyIH0gPSByZXF1aXJlKCcuLi9nbG9iYWwnKVxuY29uc3QgeyB0eXBlcyB9ID0gcmVxdWlyZSgndXRpbCcpXG5cbmxldCBleHBlcmltZW50YWxXYXJuZWQgPSBmYWxzZVxuXG4vLyBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNpbnRlcmZhY2UtZGVmaW5pdGlvblxuY2xhc3MgV2ViU29ja2V0IGV4dGVuZHMgRXZlbnRUYXJnZXQge1xuICAjZXZlbnRzID0ge1xuICAgIG9wZW46IG51bGwsXG4gICAgZXJyb3I6IG51bGwsXG4gICAgY2xvc2U6IG51bGwsXG4gICAgbWVzc2FnZTogbnVsbFxuICB9XG5cbiAgI2J1ZmZlcmVkQW1vdW50ID0gMFxuICAjcHJvdG9jb2wgPSAnJ1xuICAjZXh0ZW5zaW9ucyA9ICcnXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAgICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IHByb3RvY29sc1xuICAgKi9cbiAgY29uc3RydWN0b3IgKHVybCwgcHJvdG9jb2xzID0gW10pIHtcbiAgICBzdXBlcigpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnV2ViU29ja2V0IGNvbnN0cnVjdG9yJyB9KVxuXG4gICAgaWYgKCFleHBlcmltZW50YWxXYXJuZWQpIHtcbiAgICAgIGV4cGVyaW1lbnRhbFdhcm5lZCA9IHRydWVcbiAgICAgIHByb2Nlc3MuZW1pdFdhcm5pbmcoJ1dlYlNvY2tldHMgYXJlIGV4cGVyaW1lbnRhbCwgZXhwZWN0IHRoZW0gdG8gY2hhbmdlIGF0IGFueSB0aW1lLicsIHtcbiAgICAgICAgY29kZTogJ1VORElDSS1XUydcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgY29uc3Qgb3B0aW9ucyA9IHdlYmlkbC5jb252ZXJ0ZXJzWydET01TdHJpbmcgb3Igc2VxdWVuY2U8RE9NU3RyaW5nPiBvciBXZWJTb2NrZXRJbml0J10ocHJvdG9jb2xzKVxuXG4gICAgdXJsID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKHVybClcbiAgICBwcm90b2NvbHMgPSBvcHRpb25zLnByb3RvY29sc1xuXG4gICAgLy8gMS4gTGV0IGJhc2VVUkwgYmUgdGhpcydzIHJlbGV2YW50IHNldHRpbmdzIG9iamVjdCdzIEFQSSBiYXNlIFVSTC5cbiAgICBjb25zdCBiYXNlVVJMID0gZ2V0R2xvYmFsT3JpZ2luKClcblxuICAgIC8vIDEuIExldCB1cmxSZWNvcmQgYmUgdGhlIHJlc3VsdCBvZiBhcHBseWluZyB0aGUgVVJMIHBhcnNlciB0byB1cmwgd2l0aCBiYXNlVVJMLlxuICAgIGxldCB1cmxSZWNvcmRcblxuICAgIHRyeSB7XG4gICAgICB1cmxSZWNvcmQgPSBuZXcgVVJMKHVybCwgYmFzZVVSTClcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyAzLiBJZiB1cmxSZWNvcmQgaXMgZmFpbHVyZSwgdGhlbiB0aHJvdyBhIFwiU3ludGF4RXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKGUsICdTeW50YXhFcnJvcicpXG4gICAgfVxuXG4gICAgLy8gNC4gSWYgdXJsUmVjb3Jk4oCZcyBzY2hlbWUgaXMgXCJodHRwXCIsIHRoZW4gc2V0IHVybFJlY29yZOKAmXMgc2NoZW1lIHRvIFwid3NcIi5cbiAgICBpZiAodXJsUmVjb3JkLnByb3RvY29sID09PSAnaHR0cDonKSB7XG4gICAgICB1cmxSZWNvcmQucHJvdG9jb2wgPSAnd3M6J1xuICAgIH0gZWxzZSBpZiAodXJsUmVjb3JkLnByb3RvY29sID09PSAnaHR0cHM6Jykge1xuICAgICAgLy8gNS4gT3RoZXJ3aXNlLCBpZiB1cmxSZWNvcmTigJlzIHNjaGVtZSBpcyBcImh0dHBzXCIsIHNldCB1cmxSZWNvcmTigJlzIHNjaGVtZSB0byBcIndzc1wiLlxuICAgICAgdXJsUmVjb3JkLnByb3RvY29sID0gJ3dzczonXG4gICAgfVxuXG4gICAgLy8gNi4gSWYgdXJsUmVjb3Jk4oCZcyBzY2hlbWUgaXMgbm90IFwid3NcIiBvciBcIndzc1wiLCB0aGVuIHRocm93IGEgXCJTeW50YXhFcnJvclwiIERPTUV4Y2VwdGlvbi5cbiAgICBpZiAodXJsUmVjb3JkLnByb3RvY29sICE9PSAnd3M6JyAmJiB1cmxSZWNvcmQucHJvdG9jb2wgIT09ICd3c3M6Jykge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihcbiAgICAgICAgYEV4cGVjdGVkIGEgd3M6IG9yIHdzczogcHJvdG9jb2wsIGdvdCAke3VybFJlY29yZC5wcm90b2NvbH1gLFxuICAgICAgICAnU3ludGF4RXJyb3InXG4gICAgICApXG4gICAgfVxuXG4gICAgLy8gNy4gSWYgdXJsUmVjb3Jk4oCZcyBmcmFnbWVudCBpcyBub24tbnVsbCwgdGhlbiB0aHJvdyBhIFwiU3ludGF4RXJyb3JcIlxuICAgIC8vICAgIERPTUV4Y2VwdGlvbi5cbiAgICBpZiAodXJsUmVjb3JkLmhhc2ggfHwgdXJsUmVjb3JkLmhyZWYuZW5kc1dpdGgoJyMnKSkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignR290IGZyYWdtZW50JywgJ1N5bnRheEVycm9yJylcbiAgICB9XG5cbiAgICAvLyA4LiBJZiBwcm90b2NvbHMgaXMgYSBzdHJpbmcsIHNldCBwcm90b2NvbHMgdG8gYSBzZXF1ZW5jZSBjb25zaXN0aW5nXG4gICAgLy8gICAgb2YganVzdCB0aGF0IHN0cmluZy5cbiAgICBpZiAodHlwZW9mIHByb3RvY29scyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHByb3RvY29scyA9IFtwcm90b2NvbHNdXG4gICAgfVxuXG4gICAgLy8gOS4gSWYgYW55IG9mIHRoZSB2YWx1ZXMgaW4gcHJvdG9jb2xzIG9jY3VyIG1vcmUgdGhhbiBvbmNlIG9yIG90aGVyd2lzZVxuICAgIC8vICAgIGZhaWwgdG8gbWF0Y2ggdGhlIHJlcXVpcmVtZW50cyBmb3IgZWxlbWVudHMgdGhhdCBjb21wcmlzZSB0aGUgdmFsdWVcbiAgICAvLyAgICBvZiBgU2VjLVdlYlNvY2tldC1Qcm90b2NvbGAgZmllbGRzIGFzIGRlZmluZWQgYnkgVGhlIFdlYlNvY2tldFxuICAgIC8vICAgIHByb3RvY29sLCB0aGVuIHRocm93IGEgXCJTeW50YXhFcnJvclwiIERPTUV4Y2VwdGlvbi5cbiAgICBpZiAocHJvdG9jb2xzLmxlbmd0aCAhPT0gbmV3IFNldChwcm90b2NvbHMubWFwKHAgPT4gcC50b0xvd2VyQ2FzZSgpKSkuc2l6ZSkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignSW52YWxpZCBTZWMtV2ViU29ja2V0LVByb3RvY29sIHZhbHVlJywgJ1N5bnRheEVycm9yJylcbiAgICB9XG5cbiAgICBpZiAocHJvdG9jb2xzLmxlbmd0aCA+IDAgJiYgIXByb3RvY29scy5ldmVyeShwID0+IGlzVmFsaWRTdWJwcm90b2NvbChwKSkpIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oJ0ludmFsaWQgU2VjLVdlYlNvY2tldC1Qcm90b2NvbCB2YWx1ZScsICdTeW50YXhFcnJvcicpXG4gICAgfVxuXG4gICAgLy8gMTAuIFNldCB0aGlzJ3MgdXJsIHRvIHVybFJlY29yZC5cbiAgICB0aGlzW2tXZWJTb2NrZXRVUkxdID0gbmV3IFVSTCh1cmxSZWNvcmQuaHJlZilcblxuICAgIC8vIDExLiBMZXQgY2xpZW50IGJlIHRoaXMncyByZWxldmFudCBzZXR0aW5ncyBvYmplY3QuXG5cbiAgICAvLyAxMi4gUnVuIHRoaXMgc3RlcCBpbiBwYXJhbGxlbDpcblxuICAgIC8vICAgIDEuIEVzdGFibGlzaCBhIFdlYlNvY2tldCBjb25uZWN0aW9uIGdpdmVuIHVybFJlY29yZCwgcHJvdG9jb2xzLFxuICAgIC8vICAgICAgIGFuZCBjbGllbnQuXG4gICAgdGhpc1trQ29udHJvbGxlcl0gPSBlc3RhYmxpc2hXZWJTb2NrZXRDb25uZWN0aW9uKFxuICAgICAgdXJsUmVjb3JkLFxuICAgICAgcHJvdG9jb2xzLFxuICAgICAgdGhpcyxcbiAgICAgIChyZXNwb25zZSkgPT4gdGhpcy4jb25Db25uZWN0aW9uRXN0YWJsaXNoZWQocmVzcG9uc2UpLFxuICAgICAgb3B0aW9uc1xuICAgIClcblxuICAgIC8vIEVhY2ggV2ViU29ja2V0IG9iamVjdCBoYXMgYW4gYXNzb2NpYXRlZCByZWFkeSBzdGF0ZSwgd2hpY2ggaXMgYVxuICAgIC8vIG51bWJlciByZXByZXNlbnRpbmcgdGhlIHN0YXRlIG9mIHRoZSBjb25uZWN0aW9uLiBJbml0aWFsbHkgaXQgbXVzdFxuICAgIC8vIGJlIENPTk5FQ1RJTkcgKDApLlxuICAgIHRoaXNba1JlYWR5U3RhdGVdID0gV2ViU29ja2V0LkNPTk5FQ1RJTkdcblxuICAgIC8vIFRoZSBleHRlbnNpb25zIGF0dHJpYnV0ZSBtdXN0IGluaXRpYWxseSByZXR1cm4gdGhlIGVtcHR5IHN0cmluZy5cblxuICAgIC8vIFRoZSBwcm90b2NvbCBhdHRyaWJ1dGUgbXVzdCBpbml0aWFsbHkgcmV0dXJuIHRoZSBlbXB0eSBzdHJpbmcuXG5cbiAgICAvLyBFYWNoIFdlYlNvY2tldCBvYmplY3QgaGFzIGFuIGFzc29jaWF0ZWQgYmluYXJ5IHR5cGUsIHdoaWNoIGlzIGFcbiAgICAvLyBCaW5hcnlUeXBlLiBJbml0aWFsbHkgaXQgbXVzdCBiZSBcImJsb2JcIi5cbiAgICB0aGlzW2tCaW5hcnlUeXBlXSA9ICdibG9iJ1xuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZG9tLXdlYnNvY2tldC1jbG9zZVxuICAgKiBAcGFyYW0ge251bWJlcnx1bmRlZmluZWR9IGNvZGVcbiAgICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSByZWFzb25cbiAgICovXG4gIGNsb3NlIChjb2RlID0gdW5kZWZpbmVkLCByZWFzb24gPSB1bmRlZmluZWQpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICBpZiAoY29kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb2RlID0gd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIHNob3J0J10oY29kZSwgeyBjbGFtcDogdHJ1ZSB9KVxuICAgIH1cblxuICAgIGlmIChyZWFzb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVhc29uID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKHJlYXNvbilcbiAgICB9XG5cbiAgICAvLyAxLiBJZiBjb2RlIGlzIHByZXNlbnQsIGJ1dCBpcyBuZWl0aGVyIGFuIGludGVnZXIgZXF1YWwgdG8gMTAwMCBub3IgYW5cbiAgICAvLyAgICBpbnRlZ2VyIGluIHRoZSByYW5nZSAzMDAwIHRvIDQ5OTksIGluY2x1c2l2ZSwgdGhyb3cgYW5cbiAgICAvLyAgICBcIkludmFsaWRBY2Nlc3NFcnJvclwiIERPTUV4Y2VwdGlvbi5cbiAgICBpZiAoY29kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoY29kZSAhPT0gMTAwMCAmJiAoY29kZSA8IDMwMDAgfHwgY29kZSA+IDQ5OTkpKSB7XG4gICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oJ2ludmFsaWQgY29kZScsICdJbnZhbGlkQWNjZXNzRXJyb3InKVxuICAgICAgfVxuICAgIH1cblxuICAgIGxldCByZWFzb25CeXRlTGVuZ3RoID0gMFxuXG4gICAgLy8gMi4gSWYgcmVhc29uIGlzIHByZXNlbnQsIHRoZW4gcnVuIHRoZXNlIHN1YnN0ZXBzOlxuICAgIGlmIChyZWFzb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gMS4gTGV0IHJlYXNvbkJ5dGVzIGJlIHRoZSByZXN1bHQgb2YgZW5jb2RpbmcgcmVhc29uLlxuICAgICAgLy8gMi4gSWYgcmVhc29uQnl0ZXMgaXMgbG9uZ2VyIHRoYW4gMTIzIGJ5dGVzLCB0aGVuIHRocm93IGFcbiAgICAgIC8vICAgIFwiU3ludGF4RXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgICByZWFzb25CeXRlTGVuZ3RoID0gQnVmZmVyLmJ5dGVMZW5ndGgocmVhc29uKVxuXG4gICAgICBpZiAocmVhc29uQnl0ZUxlbmd0aCA+IDEyMykge1xuICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKFxuICAgICAgICAgIGBSZWFzb24gbXVzdCBiZSBsZXNzIHRoYW4gMTIzIGJ5dGVzOyByZWNlaXZlZCAke3JlYXNvbkJ5dGVMZW5ndGh9YCxcbiAgICAgICAgICAnU3ludGF4RXJyb3InXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAzLiBSdW4gdGhlIGZpcnN0IG1hdGNoaW5nIHN0ZXBzIGZyb20gdGhlIGZvbGxvd2luZyBsaXN0OlxuICAgIGlmICh0aGlzW2tSZWFkeVN0YXRlXSA9PT0gV2ViU29ja2V0LkNMT1NJTkcgfHwgdGhpc1trUmVhZHlTdGF0ZV0gPT09IFdlYlNvY2tldC5DTE9TRUQpIHtcbiAgICAgIC8vIElmIHRoaXMncyByZWFkeSBzdGF0ZSBpcyBDTE9TSU5HICgyKSBvciBDTE9TRUQgKDMpXG4gICAgICAvLyBEbyBub3RoaW5nLlxuICAgIH0gZWxzZSBpZiAoIWlzRXN0YWJsaXNoZWQodGhpcykpIHtcbiAgICAgIC8vIElmIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBub3QgeWV0IGVzdGFibGlzaGVkXG4gICAgICAvLyBGYWlsIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBhbmQgc2V0IHRoaXMncyByZWFkeSBzdGF0ZVxuICAgICAgLy8gdG8gQ0xPU0lORyAoMikuXG4gICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih0aGlzLCAnQ29ubmVjdGlvbiB3YXMgY2xvc2VkIGJlZm9yZSBpdCB3YXMgZXN0YWJsaXNoZWQuJylcbiAgICAgIHRoaXNba1JlYWR5U3RhdGVdID0gV2ViU29ja2V0LkNMT1NJTkdcbiAgICB9IGVsc2UgaWYgKCFpc0Nsb3NpbmcodGhpcykpIHtcbiAgICAgIC8vIElmIHRoZSBXZWJTb2NrZXQgY2xvc2luZyBoYW5kc2hha2UgaGFzIG5vdCB5ZXQgYmVlbiBzdGFydGVkXG4gICAgICAvLyBTdGFydCB0aGUgV2ViU29ja2V0IGNsb3NpbmcgaGFuZHNoYWtlIGFuZCBzZXQgdGhpcydzIHJlYWR5XG4gICAgICAvLyBzdGF0ZSB0byBDTE9TSU5HICgyKS5cbiAgICAgIC8vIC0gSWYgbmVpdGhlciBjb2RlIG5vciByZWFzb24gaXMgcHJlc2VudCwgdGhlIFdlYlNvY2tldCBDbG9zZVxuICAgICAgLy8gICBtZXNzYWdlIG11c3Qgbm90IGhhdmUgYSBib2R5LlxuICAgICAgLy8gLSBJZiBjb2RlIGlzIHByZXNlbnQsIHRoZW4gdGhlIHN0YXR1cyBjb2RlIHRvIHVzZSBpbiB0aGVcbiAgICAgIC8vICAgV2ViU29ja2V0IENsb3NlIG1lc3NhZ2UgbXVzdCBiZSB0aGUgaW50ZWdlciBnaXZlbiBieSBjb2RlLlxuICAgICAgLy8gLSBJZiByZWFzb24gaXMgYWxzbyBwcmVzZW50LCB0aGVuIHJlYXNvbkJ5dGVzIG11c3QgYmVcbiAgICAgIC8vICAgcHJvdmlkZWQgaW4gdGhlIENsb3NlIG1lc3NhZ2UgYWZ0ZXIgdGhlIHN0YXR1cyBjb2RlLlxuXG4gICAgICBjb25zdCBmcmFtZSA9IG5ldyBXZWJzb2NrZXRGcmFtZVNlbmQoKVxuXG4gICAgICAvLyBJZiBuZWl0aGVyIGNvZGUgbm9yIHJlYXNvbiBpcyBwcmVzZW50LCB0aGUgV2ViU29ja2V0IENsb3NlXG4gICAgICAvLyBtZXNzYWdlIG11c3Qgbm90IGhhdmUgYSBib2R5LlxuXG4gICAgICAvLyBJZiBjb2RlIGlzIHByZXNlbnQsIHRoZW4gdGhlIHN0YXR1cyBjb2RlIHRvIHVzZSBpbiB0aGVcbiAgICAgIC8vIFdlYlNvY2tldCBDbG9zZSBtZXNzYWdlIG11c3QgYmUgdGhlIGludGVnZXIgZ2l2ZW4gYnkgY29kZS5cbiAgICAgIGlmIChjb2RlICE9PSB1bmRlZmluZWQgJiYgcmVhc29uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZnJhbWUuZnJhbWVEYXRhID0gQnVmZmVyLmFsbG9jVW5zYWZlKDIpXG4gICAgICAgIGZyYW1lLmZyYW1lRGF0YS53cml0ZVVJbnQxNkJFKGNvZGUsIDApXG4gICAgICB9IGVsc2UgaWYgKGNvZGUgIT09IHVuZGVmaW5lZCAmJiByZWFzb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBJZiByZWFzb24gaXMgYWxzbyBwcmVzZW50LCB0aGVuIHJlYXNvbkJ5dGVzIG11c3QgYmVcbiAgICAgICAgLy8gcHJvdmlkZWQgaW4gdGhlIENsb3NlIG1lc3NhZ2UgYWZ0ZXIgdGhlIHN0YXR1cyBjb2RlLlxuICAgICAgICBmcmFtZS5mcmFtZURhdGEgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMiArIHJlYXNvbkJ5dGVMZW5ndGgpXG4gICAgICAgIGZyYW1lLmZyYW1lRGF0YS53cml0ZVVJbnQxNkJFKGNvZGUsIDApXG4gICAgICAgIC8vIHRoZSBib2R5IE1BWSBjb250YWluIFVURi04LWVuY29kZWQgZGF0YSB3aXRoIHZhbHVlIC9yZWFzb24vXG4gICAgICAgIGZyYW1lLmZyYW1lRGF0YS53cml0ZShyZWFzb24sIDIsICd1dGYtOCcpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmcmFtZS5mcmFtZURhdGEgPSBlbXB0eUJ1ZmZlclxuICAgICAgfVxuXG4gICAgICAvKiogQHR5cGUge2ltcG9ydCgnc3RyZWFtJykuRHVwbGV4fSAqL1xuICAgICAgY29uc3Qgc29ja2V0ID0gdGhpc1trUmVzcG9uc2VdLnNvY2tldFxuXG4gICAgICBzb2NrZXQud3JpdGUoZnJhbWUuY3JlYXRlRnJhbWUob3Bjb2Rlcy5DTE9TRSksIChlcnIpID0+IHtcbiAgICAgICAgaWYgKCFlcnIpIHtcbiAgICAgICAgICB0aGlzW2tTZW50Q2xvc2VdID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgICAvLyBVcG9uIGVpdGhlciBzZW5kaW5nIG9yIHJlY2VpdmluZyBhIENsb3NlIGNvbnRyb2wgZnJhbWUsIGl0IGlzIHNhaWRcbiAgICAgIC8vIHRoYXQgX1RoZSBXZWJTb2NrZXQgQ2xvc2luZyBIYW5kc2hha2UgaXMgU3RhcnRlZF8gYW5kIHRoYXQgdGhlXG4gICAgICAvLyBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBpbiB0aGUgQ0xPU0lORyBzdGF0ZS5cbiAgICAgIHRoaXNba1JlYWR5U3RhdGVdID0gc3RhdGVzLkNMT1NJTkdcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT3RoZXJ3aXNlXG4gICAgICAvLyBTZXQgdGhpcydzIHJlYWR5IHN0YXRlIHRvIENMT1NJTkcgKDIpLlxuICAgICAgdGhpc1trUmVhZHlTdGF0ZV0gPSBXZWJTb2NrZXQuQ0xPU0lOR1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2RvbS13ZWJzb2NrZXQtc2VuZFxuICAgKiBAcGFyYW0ge05vZGVKUy5UeXBlZEFycmF5fEFycmF5QnVmZmVyfEJsb2J8c3RyaW5nfSBkYXRhXG4gICAqL1xuICBzZW5kIChkYXRhKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ1dlYlNvY2tldC5zZW5kJyB9KVxuXG4gICAgZGF0YSA9IHdlYmlkbC5jb252ZXJ0ZXJzLldlYlNvY2tldFNlbmREYXRhKGRhdGEpXG5cbiAgICAvLyAxLiBJZiB0aGlzJ3MgcmVhZHkgc3RhdGUgaXMgQ09OTkVDVElORywgdGhlbiB0aHJvdyBhblxuICAgIC8vICAgIFwiSW52YWxpZFN0YXRlRXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgaWYgKHRoaXNba1JlYWR5U3RhdGVdID09PSBXZWJTb2NrZXQuQ09OTkVDVElORykge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignU2VudCBiZWZvcmUgY29ubmVjdGVkLicsICdJbnZhbGlkU3RhdGVFcnJvcicpXG4gICAgfVxuXG4gICAgLy8gMi4gUnVuIHRoZSBhcHByb3ByaWF0ZSBzZXQgb2Ygc3RlcHMgZnJvbSB0aGUgZm9sbG93aW5nIGxpc3Q6XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tNi4xXG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tNS4yXG5cbiAgICBpZiAoIWlzRXN0YWJsaXNoZWQodGhpcykgfHwgaXNDbG9zaW5nKHRoaXMpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvKiogQHR5cGUge2ltcG9ydCgnc3RyZWFtJykuRHVwbGV4fSAqL1xuICAgIGNvbnN0IHNvY2tldCA9IHRoaXNba1Jlc3BvbnNlXS5zb2NrZXRcblxuICAgIC8vIElmIGRhdGEgaXMgYSBzdHJpbmdcbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBJZiB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQgYW5kIHRoZSBXZWJTb2NrZXRcbiAgICAgIC8vIGNsb3NpbmcgaGFuZHNoYWtlIGhhcyBub3QgeWV0IHN0YXJ0ZWQsIHRoZW4gdGhlIHVzZXIgYWdlbnRcbiAgICAgIC8vIG11c3Qgc2VuZCBhIFdlYlNvY2tldCBNZXNzYWdlIGNvbXByaXNlZCBvZiB0aGUgZGF0YSBhcmd1bWVudFxuICAgICAgLy8gdXNpbmcgYSB0ZXh0IGZyYW1lIG9wY29kZTsgaWYgdGhlIGRhdGEgY2Fubm90IGJlIHNlbnQsIGUuZy5cbiAgICAgIC8vIGJlY2F1c2UgaXQgd291bGQgbmVlZCB0byBiZSBidWZmZXJlZCBidXQgdGhlIGJ1ZmZlciBpcyBmdWxsLFxuICAgICAgLy8gdGhlIHVzZXIgYWdlbnQgbXVzdCBmbGFnIHRoZSBXZWJTb2NrZXQgYXMgZnVsbCBhbmQgdGhlbiBjbG9zZVxuICAgICAgLy8gdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uLiBBbnkgaW52b2NhdGlvbiBvZiB0aGlzIG1ldGhvZCB3aXRoIGFcbiAgICAgIC8vIHN0cmluZyBhcmd1bWVudCB0aGF0IGRvZXMgbm90IHRocm93IGFuIGV4Y2VwdGlvbiBtdXN0IGluY3JlYXNlXG4gICAgICAvLyB0aGUgYnVmZmVyZWRBbW91bnQgYXR0cmlidXRlIGJ5IHRoZSBudW1iZXIgb2YgYnl0ZXMgbmVlZGVkIHRvXG4gICAgICAvLyBleHByZXNzIHRoZSBhcmd1bWVudCBhcyBVVEYtOC5cblxuICAgICAgY29uc3QgdmFsdWUgPSBCdWZmZXIuZnJvbShkYXRhKVxuICAgICAgY29uc3QgZnJhbWUgPSBuZXcgV2Vic29ja2V0RnJhbWVTZW5kKHZhbHVlKVxuICAgICAgY29uc3QgYnVmZmVyID0gZnJhbWUuY3JlYXRlRnJhbWUob3Bjb2Rlcy5URVhUKVxuXG4gICAgICB0aGlzLiNidWZmZXJlZEFtb3VudCArPSB2YWx1ZS5ieXRlTGVuZ3RoXG4gICAgICBzb2NrZXQud3JpdGUoYnVmZmVyLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuI2J1ZmZlcmVkQW1vdW50IC09IHZhbHVlLmJ5dGVMZW5ndGhcbiAgICAgIH0pXG4gICAgfSBlbHNlIGlmICh0eXBlcy5pc0FycmF5QnVmZmVyKGRhdGEpKSB7XG4gICAgICAvLyBJZiB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQsIGFuZCB0aGUgV2ViU29ja2V0XG4gICAgICAvLyBjbG9zaW5nIGhhbmRzaGFrZSBoYXMgbm90IHlldCBzdGFydGVkLCB0aGVuIHRoZSB1c2VyIGFnZW50IG11c3RcbiAgICAgIC8vIHNlbmQgYSBXZWJTb2NrZXQgTWVzc2FnZSBjb21wcmlzZWQgb2YgZGF0YSB1c2luZyBhIGJpbmFyeSBmcmFtZVxuICAgICAgLy8gb3Bjb2RlOyBpZiB0aGUgZGF0YSBjYW5ub3QgYmUgc2VudCwgZS5nLiBiZWNhdXNlIGl0IHdvdWxkIG5lZWRcbiAgICAgIC8vIHRvIGJlIGJ1ZmZlcmVkIGJ1dCB0aGUgYnVmZmVyIGlzIGZ1bGwsIHRoZSB1c2VyIGFnZW50IG11c3QgZmxhZ1xuICAgICAgLy8gdGhlIFdlYlNvY2tldCBhcyBmdWxsIGFuZCB0aGVuIGNsb3NlIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbi5cbiAgICAgIC8vIFRoZSBkYXRhIHRvIGJlIHNlbnQgaXMgdGhlIGRhdGEgc3RvcmVkIGluIHRoZSBidWZmZXIgZGVzY3JpYmVkXG4gICAgICAvLyBieSB0aGUgQXJyYXlCdWZmZXIgb2JqZWN0LiBBbnkgaW52b2NhdGlvbiBvZiB0aGlzIG1ldGhvZCB3aXRoIGFuXG4gICAgICAvLyBBcnJheUJ1ZmZlciBhcmd1bWVudCB0aGF0IGRvZXMgbm90IHRocm93IGFuIGV4Y2VwdGlvbiBtdXN0XG4gICAgICAvLyBpbmNyZWFzZSB0aGUgYnVmZmVyZWRBbW91bnQgYXR0cmlidXRlIGJ5IHRoZSBsZW5ndGggb2YgdGhlXG4gICAgICAvLyBBcnJheUJ1ZmZlciBpbiBieXRlcy5cblxuICAgICAgY29uc3QgdmFsdWUgPSBCdWZmZXIuZnJvbShkYXRhKVxuICAgICAgY29uc3QgZnJhbWUgPSBuZXcgV2Vic29ja2V0RnJhbWVTZW5kKHZhbHVlKVxuICAgICAgY29uc3QgYnVmZmVyID0gZnJhbWUuY3JlYXRlRnJhbWUob3Bjb2Rlcy5CSU5BUlkpXG5cbiAgICAgIHRoaXMuI2J1ZmZlcmVkQW1vdW50ICs9IHZhbHVlLmJ5dGVMZW5ndGhcbiAgICAgIHNvY2tldC53cml0ZShidWZmZXIsICgpID0+IHtcbiAgICAgICAgdGhpcy4jYnVmZmVyZWRBbW91bnQgLT0gdmFsdWUuYnl0ZUxlbmd0aFxuICAgICAgfSlcbiAgICB9IGVsc2UgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhkYXRhKSkge1xuICAgICAgLy8gSWYgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkLCBhbmQgdGhlIFdlYlNvY2tldFxuICAgICAgLy8gY2xvc2luZyBoYW5kc2hha2UgaGFzIG5vdCB5ZXQgc3RhcnRlZCwgdGhlbiB0aGUgdXNlciBhZ2VudCBtdXN0XG4gICAgICAvLyBzZW5kIGEgV2ViU29ja2V0IE1lc3NhZ2UgY29tcHJpc2VkIG9mIGRhdGEgdXNpbmcgYSBiaW5hcnkgZnJhbWVcbiAgICAgIC8vIG9wY29kZTsgaWYgdGhlIGRhdGEgY2Fubm90IGJlIHNlbnQsIGUuZy4gYmVjYXVzZSBpdCB3b3VsZCBuZWVkIHRvXG4gICAgICAvLyBiZSBidWZmZXJlZCBidXQgdGhlIGJ1ZmZlciBpcyBmdWxsLCB0aGUgdXNlciBhZ2VudCBtdXN0IGZsYWcgdGhlXG4gICAgICAvLyBXZWJTb2NrZXQgYXMgZnVsbCBhbmQgdGhlbiBjbG9zZSB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24uIFRoZVxuICAgICAgLy8gZGF0YSB0byBiZSBzZW50IGlzIHRoZSBkYXRhIHN0b3JlZCBpbiB0aGUgc2VjdGlvbiBvZiB0aGUgYnVmZmVyXG4gICAgICAvLyBkZXNjcmliZWQgYnkgdGhlIEFycmF5QnVmZmVyIG9iamVjdCB0aGF0IGRhdGEgcmVmZXJlbmNlcy4gQW55XG4gICAgICAvLyBpbnZvY2F0aW9uIG9mIHRoaXMgbWV0aG9kIHdpdGggdGhpcyBraW5kIG9mIGFyZ3VtZW50IHRoYXQgZG9lc1xuICAgICAgLy8gbm90IHRocm93IGFuIGV4Y2VwdGlvbiBtdXN0IGluY3JlYXNlIHRoZSBidWZmZXJlZEFtb3VudCBhdHRyaWJ1dGVcbiAgICAgIC8vIGJ5IHRoZSBsZW5ndGggb2YgZGF0YeKAmXMgYnVmZmVyIGluIGJ5dGVzLlxuXG4gICAgICBjb25zdCBhYiA9IEJ1ZmZlci5mcm9tKGRhdGEsIGRhdGEuYnl0ZU9mZnNldCwgZGF0YS5ieXRlTGVuZ3RoKVxuXG4gICAgICBjb25zdCBmcmFtZSA9IG5ldyBXZWJzb2NrZXRGcmFtZVNlbmQoYWIpXG4gICAgICBjb25zdCBidWZmZXIgPSBmcmFtZS5jcmVhdGVGcmFtZShvcGNvZGVzLkJJTkFSWSlcblxuICAgICAgdGhpcy4jYnVmZmVyZWRBbW91bnQgKz0gYWIuYnl0ZUxlbmd0aFxuICAgICAgc29ja2V0LndyaXRlKGJ1ZmZlciwgKCkgPT4ge1xuICAgICAgICB0aGlzLiNidWZmZXJlZEFtb3VudCAtPSBhYi5ieXRlTGVuZ3RoXG4gICAgICB9KVxuICAgIH0gZWxzZSBpZiAoaXNCbG9iTGlrZShkYXRhKSkge1xuICAgICAgLy8gSWYgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkLCBhbmQgdGhlIFdlYlNvY2tldFxuICAgICAgLy8gY2xvc2luZyBoYW5kc2hha2UgaGFzIG5vdCB5ZXQgc3RhcnRlZCwgdGhlbiB0aGUgdXNlciBhZ2VudCBtdXN0XG4gICAgICAvLyBzZW5kIGEgV2ViU29ja2V0IE1lc3NhZ2UgY29tcHJpc2VkIG9mIGRhdGEgdXNpbmcgYSBiaW5hcnkgZnJhbWVcbiAgICAgIC8vIG9wY29kZTsgaWYgdGhlIGRhdGEgY2Fubm90IGJlIHNlbnQsIGUuZy4gYmVjYXVzZSBpdCB3b3VsZCBuZWVkIHRvXG4gICAgICAvLyBiZSBidWZmZXJlZCBidXQgdGhlIGJ1ZmZlciBpcyBmdWxsLCB0aGUgdXNlciBhZ2VudCBtdXN0IGZsYWcgdGhlXG4gICAgICAvLyBXZWJTb2NrZXQgYXMgZnVsbCBhbmQgdGhlbiBjbG9zZSB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24uIFRoZSBkYXRhXG4gICAgICAvLyB0byBiZSBzZW50IGlzIHRoZSByYXcgZGF0YSByZXByZXNlbnRlZCBieSB0aGUgQmxvYiBvYmplY3QuIEFueVxuICAgICAgLy8gaW52b2NhdGlvbiBvZiB0aGlzIG1ldGhvZCB3aXRoIGEgQmxvYiBhcmd1bWVudCB0aGF0IGRvZXMgbm90IHRocm93XG4gICAgICAvLyBhbiBleGNlcHRpb24gbXVzdCBpbmNyZWFzZSB0aGUgYnVmZmVyZWRBbW91bnQgYXR0cmlidXRlIGJ5IHRoZSBzaXplXG4gICAgICAvLyBvZiB0aGUgQmxvYiBvYmplY3TigJlzIHJhdyBkYXRhLCBpbiBieXRlcy5cblxuICAgICAgY29uc3QgZnJhbWUgPSBuZXcgV2Vic29ja2V0RnJhbWVTZW5kKClcblxuICAgICAgZGF0YS5hcnJheUJ1ZmZlcigpLnRoZW4oKGFiKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gQnVmZmVyLmZyb20oYWIpXG4gICAgICAgIGZyYW1lLmZyYW1lRGF0YSA9IHZhbHVlXG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IGZyYW1lLmNyZWF0ZUZyYW1lKG9wY29kZXMuQklOQVJZKVxuXG4gICAgICAgIHRoaXMuI2J1ZmZlcmVkQW1vdW50ICs9IHZhbHVlLmJ5dGVMZW5ndGhcbiAgICAgICAgc29ja2V0LndyaXRlKGJ1ZmZlciwgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuI2J1ZmZlcmVkQW1vdW50IC09IHZhbHVlLmJ5dGVMZW5ndGhcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgZ2V0IHJlYWR5U3RhdGUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIC8vIFRoZSByZWFkeVN0YXRlIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXMncyByZWFkeSBzdGF0ZS5cbiAgICByZXR1cm4gdGhpc1trUmVhZHlTdGF0ZV1cbiAgfVxuXG4gIGdldCBidWZmZXJlZEFtb3VudCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgcmV0dXJuIHRoaXMuI2J1ZmZlcmVkQW1vdW50XG4gIH1cblxuICBnZXQgdXJsICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICAvLyBUaGUgdXJsIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXMncyB1cmwsIHNlcmlhbGl6ZWQuXG4gICAgcmV0dXJuIFVSTFNlcmlhbGl6ZXIodGhpc1trV2ViU29ja2V0VVJMXSlcbiAgfVxuXG4gIGdldCBleHRlbnNpb25zICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXh0ZW5zaW9uc1xuICB9XG5cbiAgZ2V0IHByb3RvY29sICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICByZXR1cm4gdGhpcy4jcHJvdG9jb2xcbiAgfVxuXG4gIGdldCBvbm9wZW4gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIHJldHVybiB0aGlzLiNldmVudHMub3BlblxuICB9XG5cbiAgc2V0IG9ub3BlbiAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICBpZiAodGhpcy4jZXZlbnRzLm9wZW4pIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignb3BlbicsIHRoaXMuI2V2ZW50cy5vcGVuKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5vcGVuID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignb3BlbicsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNldmVudHMub3BlbiA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgb25lcnJvciAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50cy5lcnJvclxuICB9XG5cbiAgc2V0IG9uZXJyb3IgKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgaWYgKHRoaXMuI2V2ZW50cy5lcnJvcikge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuI2V2ZW50cy5lcnJvcilcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLiNldmVudHMuZXJyb3IgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNldmVudHMuZXJyb3IgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgZ2V0IG9uY2xvc2UgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIHJldHVybiB0aGlzLiNldmVudHMuY2xvc2VcbiAgfVxuXG4gIHNldCBvbmNsb3NlIChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIGlmICh0aGlzLiNldmVudHMuY2xvc2UpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xvc2UnLCB0aGlzLiNldmVudHMuY2xvc2UpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy4jZXZlbnRzLmNsb3NlID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignY2xvc2UnLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy4jZXZlbnRzLmNsb3NlID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBvbm1lc3NhZ2UgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIHJldHVybiB0aGlzLiNldmVudHMubWVzc2FnZVxuICB9XG5cbiAgc2V0IG9ubWVzc2FnZSAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICBpZiAodGhpcy4jZXZlbnRzLm1lc3NhZ2UpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHRoaXMuI2V2ZW50cy5tZXNzYWdlKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5tZXNzYWdlID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNldmVudHMubWVzc2FnZSA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgYmluYXJ5VHlwZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgcmV0dXJuIHRoaXNba0JpbmFyeVR5cGVdXG4gIH1cblxuICBzZXQgYmluYXJ5VHlwZSAodHlwZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIGlmICh0eXBlICE9PSAnYmxvYicgJiYgdHlwZSAhPT0gJ2FycmF5YnVmZmVyJykge1xuICAgICAgdGhpc1trQmluYXJ5VHlwZV0gPSAnYmxvYidcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trQmluYXJ5VHlwZV0gPSB0eXBlXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZmVlZGJhY2stZnJvbS10aGUtcHJvdG9jb2xcbiAgICovXG4gICNvbkNvbm5lY3Rpb25Fc3RhYmxpc2hlZCAocmVzcG9uc2UpIHtcbiAgICAvLyBwcm9jZXNzUmVzcG9uc2UgaXMgY2FsbGVkIHdoZW4gdGhlIFwicmVzcG9uc2XigJlzIGhlYWRlciBsaXN0IGhhcyBiZWVuIHJlY2VpdmVkIGFuZCBpbml0aWFsaXplZC5cIlxuICAgIC8vIG9uY2UgdGhpcyBoYXBwZW5zLCB0aGUgY29ubmVjdGlvbiBpcyBvcGVuXG4gICAgdGhpc1trUmVzcG9uc2VdID0gcmVzcG9uc2VcblxuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBCeXRlUGFyc2VyKHRoaXMpXG4gICAgcGFyc2VyLm9uKCdkcmFpbicsIGZ1bmN0aW9uIG9uUGFyc2VyRHJhaW4gKCkge1xuICAgICAgdGhpcy53c1trUmVzcG9uc2VdLnNvY2tldC5yZXN1bWUoKVxuICAgIH0pXG5cbiAgICByZXNwb25zZS5zb2NrZXQud3MgPSB0aGlzXG4gICAgdGhpc1trQnl0ZVBhcnNlcl0gPSBwYXJzZXJcblxuICAgIC8vIDEuIENoYW5nZSB0aGUgcmVhZHkgc3RhdGUgdG8gT1BFTiAoMSkuXG4gICAgdGhpc1trUmVhZHlTdGF0ZV0gPSBzdGF0ZXMuT1BFTlxuXG4gICAgLy8gMi4gQ2hhbmdlIHRoZSBleHRlbnNpb25zIGF0dHJpYnV0ZeKAmXMgdmFsdWUgdG8gdGhlIGV4dGVuc2lvbnMgaW4gdXNlLCBpZlxuICAgIC8vICAgIGl0IGlzIG5vdCB0aGUgbnVsbCB2YWx1ZS5cbiAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzY0NTUjc2VjdGlvbi05LjFcbiAgICBjb25zdCBleHRlbnNpb25zID0gcmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdzZWMtd2Vic29ja2V0LWV4dGVuc2lvbnMnKVxuXG4gICAgaWYgKGV4dGVuc2lvbnMgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuI2V4dGVuc2lvbnMgPSBleHRlbnNpb25zXG4gICAgfVxuXG4gICAgLy8gMy4gQ2hhbmdlIHRoZSBwcm90b2NvbCBhdHRyaWJ1dGXigJlzIHZhbHVlIHRvIHRoZSBzdWJwcm90b2NvbCBpbiB1c2UsIGlmXG4gICAgLy8gICAgaXQgaXMgbm90IHRoZSBudWxsIHZhbHVlLlxuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NSNzZWN0aW9uLTEuOVxuICAgIGNvbnN0IHByb3RvY29sID0gcmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdzZWMtd2Vic29ja2V0LXByb3RvY29sJylcblxuICAgIGlmIChwcm90b2NvbCAhPT0gbnVsbCkge1xuICAgICAgdGhpcy4jcHJvdG9jb2wgPSBwcm90b2NvbFxuICAgIH1cblxuICAgIC8vIDQuIEZpcmUgYW4gZXZlbnQgbmFtZWQgb3BlbiBhdCB0aGUgV2ViU29ja2V0IG9iamVjdC5cbiAgICBmaXJlRXZlbnQoJ29wZW4nLCB0aGlzKVxuICB9XG59XG5cbi8vIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2RvbS13ZWJzb2NrZXQtY29ubmVjdGluZ1xuV2ViU29ja2V0LkNPTk5FQ1RJTkcgPSBXZWJTb2NrZXQucHJvdG90eXBlLkNPTk5FQ1RJTkcgPSBzdGF0ZXMuQ09OTkVDVElOR1xuLy8gaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZG9tLXdlYnNvY2tldC1vcGVuXG5XZWJTb2NrZXQuT1BFTiA9IFdlYlNvY2tldC5wcm90b3R5cGUuT1BFTiA9IHN0YXRlcy5PUEVOXG4vLyBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNkb20td2Vic29ja2V0LWNsb3NpbmdcbldlYlNvY2tldC5DTE9TSU5HID0gV2ViU29ja2V0LnByb3RvdHlwZS5DTE9TSU5HID0gc3RhdGVzLkNMT1NJTkdcbi8vIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2RvbS13ZWJzb2NrZXQtY2xvc2VkXG5XZWJTb2NrZXQuQ0xPU0VEID0gV2ViU29ja2V0LnByb3RvdHlwZS5DTE9TRUQgPSBzdGF0ZXMuQ0xPU0VEXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFdlYlNvY2tldC5wcm90b3R5cGUsIHtcbiAgQ09OTkVDVElORzogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgT1BFTjogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgQ0xPU0lORzogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgQ0xPU0VEOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICB1cmw6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlYWR5U3RhdGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGJ1ZmZlcmVkQW1vdW50OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbm9wZW46IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9uZXJyb3I6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9uY2xvc2U6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNsb3NlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbm1lc3NhZ2U6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGJpbmFyeVR5cGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHNlbmQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGV4dGVuc2lvbnM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHByb3RvY29sOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnV2ViU29ja2V0JyxcbiAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH1cbn0pXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFdlYlNvY2tldCwge1xuICBDT05ORUNUSU5HOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBPUEVOOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBDTE9TSU5HOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBDTE9TRUQ6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnNcbn0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxET01TdHJpbmc+J10gPSB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZ1xuKVxuXG53ZWJpZGwuY29udmVydGVyc1snRE9NU3RyaW5nIG9yIHNlcXVlbmNlPERPTVN0cmluZz4nXSA9IGZ1bmN0aW9uIChWKSB7XG4gIGlmICh3ZWJpZGwudXRpbC5UeXBlKFYpID09PSAnT2JqZWN0JyAmJiBTeW1ib2wuaXRlcmF0b3IgaW4gVikge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8RE9NU3RyaW5nPiddKFYpXG4gIH1cblxuICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKFYpXG59XG5cbi8vIFRoaXMgaW1wbGVtZW50cyB0aGUgcHJvcHNhbCBtYWRlIGluIGh0dHBzOi8vZ2l0aHViLmNvbS93aGF0d2cvd2Vic29ja2V0cy9pc3N1ZXMvNDJcbndlYmlkbC5jb252ZXJ0ZXJzLldlYlNvY2tldEluaXQgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIHtcbiAgICBrZXk6ICdwcm90b2NvbHMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ0RPTVN0cmluZyBvciBzZXF1ZW5jZTxET01TdHJpbmc+J10sXG4gICAgZ2V0IGRlZmF1bHRWYWx1ZSAoKSB7XG4gICAgICByZXR1cm4gW11cbiAgICB9XG4gIH0sXG4gIHtcbiAgICBrZXk6ICdkaXNwYXRjaGVyJyxcbiAgICBjb252ZXJ0ZXI6IChWKSA9PiBWLFxuICAgIGdldCBkZWZhdWx0VmFsdWUgKCkge1xuICAgICAgcmV0dXJuIGdldEdsb2JhbERpc3BhdGNoZXIoKVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGtleTogJ2hlYWRlcnMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzLkhlYWRlcnNJbml0KVxuICB9XG5dKVxuXG53ZWJpZGwuY29udmVydGVyc1snRE9NU3RyaW5nIG9yIHNlcXVlbmNlPERPTVN0cmluZz4gb3IgV2ViU29ja2V0SW5pdCddID0gZnVuY3Rpb24gKFYpIHtcbiAgaWYgKHdlYmlkbC51dGlsLlR5cGUoVikgPT09ICdPYmplY3QnICYmICEoU3ltYm9sLml0ZXJhdG9yIGluIFYpKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLldlYlNvY2tldEluaXQoVilcbiAgfVxuXG4gIHJldHVybiB7IHByb3RvY29sczogd2ViaWRsLmNvbnZlcnRlcnNbJ0RPTVN0cmluZyBvciBzZXF1ZW5jZTxET01TdHJpbmc+J10oVikgfVxufVxuXG53ZWJpZGwuY29udmVydGVycy5XZWJTb2NrZXRTZW5kRGF0YSA9IGZ1bmN0aW9uIChWKSB7XG4gIGlmICh3ZWJpZGwudXRpbC5UeXBlKFYpID09PSAnT2JqZWN0Jykge1xuICAgIGlmIChpc0Jsb2JMaWtlKFYpKSB7XG4gICAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuQmxvYihWLCB7IHN0cmljdDogZmFsc2UgfSlcbiAgICB9XG5cbiAgICBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KFYpIHx8IHR5cGVzLmlzQW55QXJyYXlCdWZmZXIoVikpIHtcbiAgICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5CdWZmZXJTb3VyY2UoVilcbiAgICB9XG4gIH1cblxuICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKFYpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBXZWJTb2NrZXRcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IENsaWVudCA9IHJlcXVpcmUoJy4vbGliL2NsaWVudCcpXG5jb25zdCBEaXNwYXRjaGVyID0gcmVxdWlyZSgnLi9saWIvZGlzcGF0Y2hlcicpXG5jb25zdCBlcnJvcnMgPSByZXF1aXJlKCcuL2xpYi9jb3JlL2Vycm9ycycpXG5jb25zdCBQb29sID0gcmVxdWlyZSgnLi9saWIvcG9vbCcpXG5jb25zdCBCYWxhbmNlZFBvb2wgPSByZXF1aXJlKCcuL2xpYi9iYWxhbmNlZC1wb29sJylcbmNvbnN0IEFnZW50ID0gcmVxdWlyZSgnLi9saWIvYWdlbnQnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4vbGliL2NvcmUvdXRpbCcpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gPSBlcnJvcnNcbmNvbnN0IGFwaSA9IHJlcXVpcmUoJy4vbGliL2FwaScpXG5jb25zdCBidWlsZENvbm5lY3RvciA9IHJlcXVpcmUoJy4vbGliL2NvcmUvY29ubmVjdCcpXG5jb25zdCBNb2NrQ2xpZW50ID0gcmVxdWlyZSgnLi9saWIvbW9jay9tb2NrLWNsaWVudCcpXG5jb25zdCBNb2NrQWdlbnQgPSByZXF1aXJlKCcuL2xpYi9tb2NrL21vY2stYWdlbnQnKVxuY29uc3QgTW9ja1Bvb2wgPSByZXF1aXJlKCcuL2xpYi9tb2NrL21vY2stcG9vbCcpXG5jb25zdCBtb2NrRXJyb3JzID0gcmVxdWlyZSgnLi9saWIvbW9jay9tb2NrLWVycm9ycycpXG5jb25zdCBQcm94eUFnZW50ID0gcmVxdWlyZSgnLi9saWIvcHJveHktYWdlbnQnKVxuY29uc3QgUmV0cnlIYW5kbGVyID0gcmVxdWlyZSgnLi9saWIvaGFuZGxlci9SZXRyeUhhbmRsZXInKVxuY29uc3QgeyBnZXRHbG9iYWxEaXNwYXRjaGVyLCBzZXRHbG9iYWxEaXNwYXRjaGVyIH0gPSByZXF1aXJlKCcuL2xpYi9nbG9iYWwnKVxuY29uc3QgRGVjb3JhdG9ySGFuZGxlciA9IHJlcXVpcmUoJy4vbGliL2hhbmRsZXIvRGVjb3JhdG9ySGFuZGxlcicpXG5jb25zdCBSZWRpcmVjdEhhbmRsZXIgPSByZXF1aXJlKCcuL2xpYi9oYW5kbGVyL1JlZGlyZWN0SGFuZGxlcicpXG5jb25zdCBjcmVhdGVSZWRpcmVjdEludGVyY2VwdG9yID0gcmVxdWlyZSgnLi9saWIvaW50ZXJjZXB0b3IvcmVkaXJlY3RJbnRlcmNlcHRvcicpXG5cbmxldCBoYXNDcnlwdG9cbnRyeSB7XG4gIHJlcXVpcmUoJ2NyeXB0bycpXG4gIGhhc0NyeXB0byA9IHRydWVcbn0gY2F0Y2gge1xuICBoYXNDcnlwdG8gPSBmYWxzZVxufVxuXG5PYmplY3QuYXNzaWduKERpc3BhdGNoZXIucHJvdG90eXBlLCBhcGkpXG5cbm1vZHVsZS5leHBvcnRzLkRpc3BhdGNoZXIgPSBEaXNwYXRjaGVyXG5tb2R1bGUuZXhwb3J0cy5DbGllbnQgPSBDbGllbnRcbm1vZHVsZS5leHBvcnRzLlBvb2wgPSBQb29sXG5tb2R1bGUuZXhwb3J0cy5CYWxhbmNlZFBvb2wgPSBCYWxhbmNlZFBvb2xcbm1vZHVsZS5leHBvcnRzLkFnZW50ID0gQWdlbnRcbm1vZHVsZS5leHBvcnRzLlByb3h5QWdlbnQgPSBQcm94eUFnZW50XG5tb2R1bGUuZXhwb3J0cy5SZXRyeUhhbmRsZXIgPSBSZXRyeUhhbmRsZXJcblxubW9kdWxlLmV4cG9ydHMuRGVjb3JhdG9ySGFuZGxlciA9IERlY29yYXRvckhhbmRsZXJcbm1vZHVsZS5leHBvcnRzLlJlZGlyZWN0SGFuZGxlciA9IFJlZGlyZWN0SGFuZGxlclxubW9kdWxlLmV4cG9ydHMuY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvciA9IGNyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3JcblxubW9kdWxlLmV4cG9ydHMuYnVpbGRDb25uZWN0b3IgPSBidWlsZENvbm5lY3RvclxubW9kdWxlLmV4cG9ydHMuZXJyb3JzID0gZXJyb3JzXG5cbmZ1bmN0aW9uIG1ha2VEaXNwYXRjaGVyIChmbikge1xuICByZXR1cm4gKHVybCwgb3B0cywgaGFuZGxlcikgPT4ge1xuICAgIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaGFuZGxlciA9IG9wdHNcbiAgICAgIG9wdHMgPSBudWxsXG4gICAgfVxuXG4gICAgaWYgKCF1cmwgfHwgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnICYmIHR5cGVvZiB1cmwgIT09ICdvYmplY3QnICYmICEodXJsIGluc3RhbmNlb2YgVVJMKSkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCB1cmwnKVxuICAgIH1cblxuICAgIGlmIChvcHRzICE9IG51bGwgJiYgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb3B0cycpXG4gICAgfVxuXG4gICAgaWYgKG9wdHMgJiYgb3B0cy5wYXRoICE9IG51bGwpIHtcbiAgICAgIGlmICh0eXBlb2Ygb3B0cy5wYXRoICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb3B0cy5wYXRoJylcbiAgICAgIH1cblxuICAgICAgbGV0IHBhdGggPSBvcHRzLnBhdGhcbiAgICAgIGlmICghb3B0cy5wYXRoLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgICBwYXRoID0gYC8ke3BhdGh9YFxuICAgICAgfVxuXG4gICAgICB1cmwgPSBuZXcgVVJMKHV0aWwucGFyc2VPcmlnaW4odXJsKS5vcmlnaW4gKyBwYXRoKVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIW9wdHMpIHtcbiAgICAgICAgb3B0cyA9IHR5cGVvZiB1cmwgPT09ICdvYmplY3QnID8gdXJsIDoge31cbiAgICAgIH1cblxuICAgICAgdXJsID0gdXRpbC5wYXJzZVVSTCh1cmwpXG4gICAgfVxuXG4gICAgY29uc3QgeyBhZ2VudCwgZGlzcGF0Y2hlciA9IGdldEdsb2JhbERpc3BhdGNoZXIoKSB9ID0gb3B0c1xuXG4gICAgaWYgKGFnZW50KSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3Vuc3VwcG9ydGVkIG9wdHMuYWdlbnQuIERpZCB5b3UgbWVhbiBvcHRzLmNsaWVudD8nKVxuICAgIH1cblxuICAgIHJldHVybiBmbi5jYWxsKGRpc3BhdGNoZXIsIHtcbiAgICAgIC4uLm9wdHMsXG4gICAgICBvcmlnaW46IHVybC5vcmlnaW4sXG4gICAgICBwYXRoOiB1cmwuc2VhcmNoID8gYCR7dXJsLnBhdGhuYW1lfSR7dXJsLnNlYXJjaH1gIDogdXJsLnBhdGhuYW1lLFxuICAgICAgbWV0aG9kOiBvcHRzLm1ldGhvZCB8fCAob3B0cy5ib2R5ID8gJ1BVVCcgOiAnR0VUJylcbiAgICB9LCBoYW5kbGVyKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzLnNldEdsb2JhbERpc3BhdGNoZXIgPSBzZXRHbG9iYWxEaXNwYXRjaGVyXG5tb2R1bGUuZXhwb3J0cy5nZXRHbG9iYWxEaXNwYXRjaGVyID0gZ2V0R2xvYmFsRGlzcGF0Y2hlclxuXG5pZiAodXRpbC5ub2RlTWFqb3IgPiAxNiB8fCAodXRpbC5ub2RlTWFqb3IgPT09IDE2ICYmIHV0aWwubm9kZU1pbm9yID49IDgpKSB7XG4gIGxldCBmZXRjaEltcGwgPSBudWxsXG4gIG1vZHVsZS5leHBvcnRzLmZldGNoID0gYXN5bmMgZnVuY3Rpb24gZmV0Y2ggKHJlc291cmNlKSB7XG4gICAgaWYgKCFmZXRjaEltcGwpIHtcbiAgICAgIGZldGNoSW1wbCA9IHJlcXVpcmUoJy4vbGliL2ZldGNoJykuZmV0Y2hcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGZldGNoSW1wbCguLi5hcmd1bWVudHMpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAodHlwZW9mIGVyciA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoZXJyLCB0aGlzKVxuICAgICAgfVxuXG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gIH1cbiAgbW9kdWxlLmV4cG9ydHMuSGVhZGVycyA9IHJlcXVpcmUoJy4vbGliL2ZldGNoL2hlYWRlcnMnKS5IZWFkZXJzXG4gIG1vZHVsZS5leHBvcnRzLlJlc3BvbnNlID0gcmVxdWlyZSgnLi9saWIvZmV0Y2gvcmVzcG9uc2UnKS5SZXNwb25zZVxuICBtb2R1bGUuZXhwb3J0cy5SZXF1ZXN0ID0gcmVxdWlyZSgnLi9saWIvZmV0Y2gvcmVxdWVzdCcpLlJlcXVlc3RcbiAgbW9kdWxlLmV4cG9ydHMuRm9ybURhdGEgPSByZXF1aXJlKCcuL2xpYi9mZXRjaC9mb3JtZGF0YScpLkZvcm1EYXRhXG4gIG1vZHVsZS5leHBvcnRzLkZpbGUgPSByZXF1aXJlKCcuL2xpYi9mZXRjaC9maWxlJykuRmlsZVxuICBtb2R1bGUuZXhwb3J0cy5GaWxlUmVhZGVyID0gcmVxdWlyZSgnLi9saWIvZmlsZWFwaS9maWxlcmVhZGVyJykuRmlsZVJlYWRlclxuXG4gIGNvbnN0IHsgc2V0R2xvYmFsT3JpZ2luLCBnZXRHbG9iYWxPcmlnaW4gfSA9IHJlcXVpcmUoJy4vbGliL2ZldGNoL2dsb2JhbCcpXG5cbiAgbW9kdWxlLmV4cG9ydHMuc2V0R2xvYmFsT3JpZ2luID0gc2V0R2xvYmFsT3JpZ2luXG4gIG1vZHVsZS5leHBvcnRzLmdldEdsb2JhbE9yaWdpbiA9IGdldEdsb2JhbE9yaWdpblxuXG4gIGNvbnN0IHsgQ2FjaGVTdG9yYWdlIH0gPSByZXF1aXJlKCcuL2xpYi9jYWNoZS9jYWNoZXN0b3JhZ2UnKVxuICBjb25zdCB7IGtDb25zdHJ1Y3QgfSA9IHJlcXVpcmUoJy4vbGliL2NhY2hlL3N5bWJvbHMnKVxuXG4gIC8vIENhY2hlICYgQ2FjaGVTdG9yYWdlIGFyZSB0aWdodGx5IGNvdXBsZWQgd2l0aCBmZXRjaC4gRXZlbiBpZiBpdCBtYXkgcnVuXG4gIC8vIGluIGFuIG9sZGVyIHZlcnNpb24gb2YgTm9kZSwgaXQgZG9lc24ndCBoYXZlIGFueSB1c2Ugd2l0aG91dCBmZXRjaC5cbiAgbW9kdWxlLmV4cG9ydHMuY2FjaGVzID0gbmV3IENhY2hlU3RvcmFnZShrQ29uc3RydWN0KVxufVxuXG5pZiAodXRpbC5ub2RlTWFqb3IgPj0gMTYpIHtcbiAgY29uc3QgeyBkZWxldGVDb29raWUsIGdldENvb2tpZXMsIGdldFNldENvb2tpZXMsIHNldENvb2tpZSB9ID0gcmVxdWlyZSgnLi9saWIvY29va2llcycpXG5cbiAgbW9kdWxlLmV4cG9ydHMuZGVsZXRlQ29va2llID0gZGVsZXRlQ29va2llXG4gIG1vZHVsZS5leHBvcnRzLmdldENvb2tpZXMgPSBnZXRDb29raWVzXG4gIG1vZHVsZS5leHBvcnRzLmdldFNldENvb2tpZXMgPSBnZXRTZXRDb29raWVzXG4gIG1vZHVsZS5leHBvcnRzLnNldENvb2tpZSA9IHNldENvb2tpZVxuXG4gIGNvbnN0IHsgcGFyc2VNSU1FVHlwZSwgc2VyaWFsaXplQU1pbWVUeXBlIH0gPSByZXF1aXJlKCcuL2xpYi9mZXRjaC9kYXRhVVJMJylcblxuICBtb2R1bGUuZXhwb3J0cy5wYXJzZU1JTUVUeXBlID0gcGFyc2VNSU1FVHlwZVxuICBtb2R1bGUuZXhwb3J0cy5zZXJpYWxpemVBTWltZVR5cGUgPSBzZXJpYWxpemVBTWltZVR5cGVcbn1cblxuaWYgKHV0aWwubm9kZU1ham9yID49IDE4ICYmIGhhc0NyeXB0bykge1xuICBjb25zdCB7IFdlYlNvY2tldCB9ID0gcmVxdWlyZSgnLi9saWIvd2Vic29ja2V0L3dlYnNvY2tldCcpXG5cbiAgbW9kdWxlLmV4cG9ydHMuV2ViU29ja2V0ID0gV2ViU29ja2V0XG59XG5cbm1vZHVsZS5leHBvcnRzLnJlcXVlc3QgPSBtYWtlRGlzcGF0Y2hlcihhcGkucmVxdWVzdClcbm1vZHVsZS5leHBvcnRzLnN0cmVhbSA9IG1ha2VEaXNwYXRjaGVyKGFwaS5zdHJlYW0pXG5tb2R1bGUuZXhwb3J0cy5waXBlbGluZSA9IG1ha2VEaXNwYXRjaGVyKGFwaS5waXBlbGluZSlcbm1vZHVsZS5leHBvcnRzLmNvbm5lY3QgPSBtYWtlRGlzcGF0Y2hlcihhcGkuY29ubmVjdClcbm1vZHVsZS5leHBvcnRzLnVwZ3JhZGUgPSBtYWtlRGlzcGF0Y2hlcihhcGkudXBncmFkZSlcblxubW9kdWxlLmV4cG9ydHMuTW9ja0NsaWVudCA9IE1vY2tDbGllbnRcbm1vZHVsZS5leHBvcnRzLk1vY2tQb29sID0gTW9ja1Bvb2xcbm1vZHVsZS5leHBvcnRzLk1vY2tBZ2VudCA9IE1vY2tBZ2VudFxubW9kdWxlLmV4cG9ydHMubW9ja0Vycm9ycyA9IG1vY2tFcnJvcnNcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5IdHRwQ2xpZW50ID0gZXhwb3J0cy5pc0h0dHBzID0gZXhwb3J0cy5IdHRwQ2xpZW50UmVzcG9uc2UgPSBleHBvcnRzLkh0dHBDbGllbnRFcnJvciA9IGV4cG9ydHMuZ2V0UHJveHlVcmwgPSBleHBvcnRzLk1lZGlhVHlwZXMgPSBleHBvcnRzLkhlYWRlcnMgPSBleHBvcnRzLkh0dHBDb2RlcyA9IHZvaWQgMDtcbmNvbnN0IGh0dHAgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcImh0dHBcIikpO1xuY29uc3QgaHR0cHMgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcImh0dHBzXCIpKTtcbmNvbnN0IHBtID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL3Byb3h5XCIpKTtcbmNvbnN0IHR1bm5lbCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwidHVubmVsXCIpKTtcbmNvbnN0IHVuZGljaV8xID0gcmVxdWlyZShcInVuZGljaVwiKTtcbnZhciBIdHRwQ29kZXM7XG4oZnVuY3Rpb24gKEh0dHBDb2Rlcykge1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJPS1wiXSA9IDIwMF0gPSBcIk9LXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIk11bHRpcGxlQ2hvaWNlc1wiXSA9IDMwMF0gPSBcIk11bHRpcGxlQ2hvaWNlc1wiO1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJNb3ZlZFBlcm1hbmVudGx5XCJdID0gMzAxXSA9IFwiTW92ZWRQZXJtYW5lbnRseVwiO1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJSZXNvdXJjZU1vdmVkXCJdID0gMzAyXSA9IFwiUmVzb3VyY2VNb3ZlZFwiO1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJTZWVPdGhlclwiXSA9IDMwM10gPSBcIlNlZU90aGVyXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIk5vdE1vZGlmaWVkXCJdID0gMzA0XSA9IFwiTm90TW9kaWZpZWRcIjtcbiAgICBIdHRwQ29kZXNbSHR0cENvZGVzW1wiVXNlUHJveHlcIl0gPSAzMDVdID0gXCJVc2VQcm94eVwiO1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJTd2l0Y2hQcm94eVwiXSA9IDMwNl0gPSBcIlN3aXRjaFByb3h5XCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIlRlbXBvcmFyeVJlZGlyZWN0XCJdID0gMzA3XSA9IFwiVGVtcG9yYXJ5UmVkaXJlY3RcIjtcbiAgICBIdHRwQ29kZXNbSHR0cENvZGVzW1wiUGVybWFuZW50UmVkaXJlY3RcIl0gPSAzMDhdID0gXCJQZXJtYW5lbnRSZWRpcmVjdFwiO1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJCYWRSZXF1ZXN0XCJdID0gNDAwXSA9IFwiQmFkUmVxdWVzdFwiO1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJVbmF1dGhvcml6ZWRcIl0gPSA0MDFdID0gXCJVbmF1dGhvcml6ZWRcIjtcbiAgICBIdHRwQ29kZXNbSHR0cENvZGVzW1wiUGF5bWVudFJlcXVpcmVkXCJdID0gNDAyXSA9IFwiUGF5bWVudFJlcXVpcmVkXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIkZvcmJpZGRlblwiXSA9IDQwM10gPSBcIkZvcmJpZGRlblwiO1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJOb3RGb3VuZFwiXSA9IDQwNF0gPSBcIk5vdEZvdW5kXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIk1ldGhvZE5vdEFsbG93ZWRcIl0gPSA0MDVdID0gXCJNZXRob2ROb3RBbGxvd2VkXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIk5vdEFjY2VwdGFibGVcIl0gPSA0MDZdID0gXCJOb3RBY2NlcHRhYmxlXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIlByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZFwiXSA9IDQwN10gPSBcIlByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZFwiO1xuICAgIEh0dHBDb2Rlc1tIdHRwQ29kZXNbXCJSZXF1ZXN0VGltZW91dFwiXSA9IDQwOF0gPSBcIlJlcXVlc3RUaW1lb3V0XCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIkNvbmZsaWN0XCJdID0gNDA5XSA9IFwiQ29uZmxpY3RcIjtcbiAgICBIdHRwQ29kZXNbSHR0cENvZGVzW1wiR29uZVwiXSA9IDQxMF0gPSBcIkdvbmVcIjtcbiAgICBIdHRwQ29kZXNbSHR0cENvZGVzW1wiVG9vTWFueVJlcXVlc3RzXCJdID0gNDI5XSA9IFwiVG9vTWFueVJlcXVlc3RzXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIkludGVybmFsU2VydmVyRXJyb3JcIl0gPSA1MDBdID0gXCJJbnRlcm5hbFNlcnZlckVycm9yXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIk5vdEltcGxlbWVudGVkXCJdID0gNTAxXSA9IFwiTm90SW1wbGVtZW50ZWRcIjtcbiAgICBIdHRwQ29kZXNbSHR0cENvZGVzW1wiQmFkR2F0ZXdheVwiXSA9IDUwMl0gPSBcIkJhZEdhdGV3YXlcIjtcbiAgICBIdHRwQ29kZXNbSHR0cENvZGVzW1wiU2VydmljZVVuYXZhaWxhYmxlXCJdID0gNTAzXSA9IFwiU2VydmljZVVuYXZhaWxhYmxlXCI7XG4gICAgSHR0cENvZGVzW0h0dHBDb2Rlc1tcIkdhdGV3YXlUaW1lb3V0XCJdID0gNTA0XSA9IFwiR2F0ZXdheVRpbWVvdXRcIjtcbn0pKEh0dHBDb2RlcyB8fCAoZXhwb3J0cy5IdHRwQ29kZXMgPSBIdHRwQ29kZXMgPSB7fSkpO1xudmFyIEhlYWRlcnM7XG4oZnVuY3Rpb24gKEhlYWRlcnMpIHtcbiAgICBIZWFkZXJzW1wiQWNjZXB0XCJdID0gXCJhY2NlcHRcIjtcbiAgICBIZWFkZXJzW1wiQ29udGVudFR5cGVcIl0gPSBcImNvbnRlbnQtdHlwZVwiO1xufSkoSGVhZGVycyB8fCAoZXhwb3J0cy5IZWFkZXJzID0gSGVhZGVycyA9IHt9KSk7XG52YXIgTWVkaWFUeXBlcztcbihmdW5jdGlvbiAoTWVkaWFUeXBlcykge1xuICAgIE1lZGlhVHlwZXNbXCJBcHBsaWNhdGlvbkpzb25cIl0gPSBcImFwcGxpY2F0aW9uL2pzb25cIjtcbn0pKE1lZGlhVHlwZXMgfHwgKGV4cG9ydHMuTWVkaWFUeXBlcyA9IE1lZGlhVHlwZXMgPSB7fSkpO1xuLyoqXG4gKiBSZXR1cm5zIHRoZSBwcm94eSBVUkwsIGRlcGVuZGluZyB1cG9uIHRoZSBzdXBwbGllZCB1cmwgYW5kIHByb3h5IGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiAqIEBwYXJhbSBzZXJ2ZXJVcmwgIFRoZSBzZXJ2ZXIgVVJMIHdoZXJlIHRoZSByZXF1ZXN0IHdpbGwgYmUgc2VudC4gRm9yIGV4YW1wbGUsIGh0dHBzOi8vYXBpLmdpdGh1Yi5jb21cbiAqL1xuZnVuY3Rpb24gZ2V0UHJveHlVcmwoc2VydmVyVXJsKSB7XG4gICAgY29uc3QgcHJveHlVcmwgPSBwbS5nZXRQcm94eVVybChuZXcgVVJMKHNlcnZlclVybCkpO1xuICAgIHJldHVybiBwcm94eVVybCA/IHByb3h5VXJsLmhyZWYgOiAnJztcbn1cbmV4cG9ydHMuZ2V0UHJveHlVcmwgPSBnZXRQcm94eVVybDtcbmNvbnN0IEh0dHBSZWRpcmVjdENvZGVzID0gW1xuICAgIEh0dHBDb2Rlcy5Nb3ZlZFBlcm1hbmVudGx5LFxuICAgIEh0dHBDb2Rlcy5SZXNvdXJjZU1vdmVkLFxuICAgIEh0dHBDb2Rlcy5TZWVPdGhlcixcbiAgICBIdHRwQ29kZXMuVGVtcG9yYXJ5UmVkaXJlY3QsXG4gICAgSHR0cENvZGVzLlBlcm1hbmVudFJlZGlyZWN0XG5dO1xuY29uc3QgSHR0cFJlc3BvbnNlUmV0cnlDb2RlcyA9IFtcbiAgICBIdHRwQ29kZXMuQmFkR2F0ZXdheSxcbiAgICBIdHRwQ29kZXMuU2VydmljZVVuYXZhaWxhYmxlLFxuICAgIEh0dHBDb2Rlcy5HYXRld2F5VGltZW91dFxuXTtcbmNvbnN0IFJldHJ5YWJsZUh0dHBWZXJicyA9IFsnT1BUSU9OUycsICdHRVQnLCAnREVMRVRFJywgJ0hFQUQnXTtcbmNvbnN0IEV4cG9uZW50aWFsQmFja29mZkNlaWxpbmcgPSAxMDtcbmNvbnN0IEV4cG9uZW50aWFsQmFja29mZlRpbWVTbGljZSA9IDU7XG5jbGFzcyBIdHRwQ2xpZW50RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZSwgc3RhdHVzQ29kZSkge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5uYW1lID0gJ0h0dHBDbGllbnRFcnJvcic7XG4gICAgICAgIHRoaXMuc3RhdHVzQ29kZSA9IHN0YXR1c0NvZGU7XG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBIdHRwQ2xpZW50RXJyb3IucHJvdG90eXBlKTtcbiAgICB9XG59XG5leHBvcnRzLkh0dHBDbGllbnRFcnJvciA9IEh0dHBDbGllbnRFcnJvcjtcbmNsYXNzIEh0dHBDbGllbnRSZXNwb25zZSB7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZSkge1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIH1cbiAgICByZWFkQm9keSgpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgIGxldCBvdXRwdXQgPSBCdWZmZXIuYWxsb2MoMCk7XG4gICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlLm9uKCdkYXRhJywgKGNodW5rKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IEJ1ZmZlci5jb25jYXQoW291dHB1dCwgY2h1bmtdKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2Uub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShvdXRwdXQudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZWFkQm9keUJ1ZmZlcigpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNodW5rcyA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZS5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjaHVua3MucHVzaChjaHVuayk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoQnVmZmVyLmNvbmNhdChjaHVua3MpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0cy5IdHRwQ2xpZW50UmVzcG9uc2UgPSBIdHRwQ2xpZW50UmVzcG9uc2U7XG5mdW5jdGlvbiBpc0h0dHBzKHJlcXVlc3RVcmwpIHtcbiAgICBjb25zdCBwYXJzZWRVcmwgPSBuZXcgVVJMKHJlcXVlc3RVcmwpO1xuICAgIHJldHVybiBwYXJzZWRVcmwucHJvdG9jb2wgPT09ICdodHRwczonO1xufVxuZXhwb3J0cy5pc0h0dHBzID0gaXNIdHRwcztcbmNsYXNzIEh0dHBDbGllbnQge1xuICAgIGNvbnN0cnVjdG9yKHVzZXJBZ2VudCwgaGFuZGxlcnMsIHJlcXVlc3RPcHRpb25zKSB7XG4gICAgICAgIHRoaXMuX2lnbm9yZVNzbEVycm9yID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2FsbG93UmVkaXJlY3RzID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fYWxsb3dSZWRpcmVjdERvd25ncmFkZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9tYXhSZWRpcmVjdHMgPSA1MDtcbiAgICAgICAgdGhpcy5fYWxsb3dSZXRyaWVzID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX21heFJldHJpZXMgPSAxO1xuICAgICAgICB0aGlzLl9rZWVwQWxpdmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fZGlzcG9zZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy51c2VyQWdlbnQgPSB1c2VyQWdlbnQ7XG4gICAgICAgIHRoaXMuaGFuZGxlcnMgPSBoYW5kbGVycyB8fCBbXTtcbiAgICAgICAgdGhpcy5yZXF1ZXN0T3B0aW9ucyA9IHJlcXVlc3RPcHRpb25zO1xuICAgICAgICBpZiAocmVxdWVzdE9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChyZXF1ZXN0T3B0aW9ucy5pZ25vcmVTc2xFcnJvciAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5faWdub3JlU3NsRXJyb3IgPSByZXF1ZXN0T3B0aW9ucy5pZ25vcmVTc2xFcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3NvY2tldFRpbWVvdXQgPSByZXF1ZXN0T3B0aW9ucy5zb2NrZXRUaW1lb3V0O1xuICAgICAgICAgICAgaWYgKHJlcXVlc3RPcHRpb25zLmFsbG93UmVkaXJlY3RzICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hbGxvd1JlZGlyZWN0cyA9IHJlcXVlc3RPcHRpb25zLmFsbG93UmVkaXJlY3RzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlcXVlc3RPcHRpb25zLmFsbG93UmVkaXJlY3REb3duZ3JhZGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FsbG93UmVkaXJlY3REb3duZ3JhZGUgPSByZXF1ZXN0T3B0aW9ucy5hbGxvd1JlZGlyZWN0RG93bmdyYWRlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlcXVlc3RPcHRpb25zLm1heFJlZGlyZWN0cyAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWF4UmVkaXJlY3RzID0gTWF0aC5tYXgocmVxdWVzdE9wdGlvbnMubWF4UmVkaXJlY3RzLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXF1ZXN0T3B0aW9ucy5rZWVwQWxpdmUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2tlZXBBbGl2ZSA9IHJlcXVlc3RPcHRpb25zLmtlZXBBbGl2ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXF1ZXN0T3B0aW9ucy5hbGxvd1JldHJpZXMgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FsbG93UmV0cmllcyA9IHJlcXVlc3RPcHRpb25zLmFsbG93UmV0cmllcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXF1ZXN0T3B0aW9ucy5tYXhSZXRyaWVzICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXhSZXRyaWVzID0gcmVxdWVzdE9wdGlvbnMubWF4UmV0cmllcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBvcHRpb25zKHJlcXVlc3RVcmwsIGFkZGl0aW9uYWxIZWFkZXJzKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KCdPUFRJT05TJywgcmVxdWVzdFVybCwgbnVsbCwgYWRkaXRpb25hbEhlYWRlcnMgfHwge30pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZ2V0KHJlcXVlc3RVcmwsIGFkZGl0aW9uYWxIZWFkZXJzKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KCdHRVQnLCByZXF1ZXN0VXJsLCBudWxsLCBhZGRpdGlvbmFsSGVhZGVycyB8fCB7fSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBkZWwocmVxdWVzdFVybCwgYWRkaXRpb25hbEhlYWRlcnMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QoJ0RFTEVURScsIHJlcXVlc3RVcmwsIG51bGwsIGFkZGl0aW9uYWxIZWFkZXJzIHx8IHt9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHBvc3QocmVxdWVzdFVybCwgZGF0YSwgYWRkaXRpb25hbEhlYWRlcnMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QoJ1BPU1QnLCByZXF1ZXN0VXJsLCBkYXRhLCBhZGRpdGlvbmFsSGVhZGVycyB8fCB7fSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwYXRjaChyZXF1ZXN0VXJsLCBkYXRhLCBhZGRpdGlvbmFsSGVhZGVycykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdCgnUEFUQ0gnLCByZXF1ZXN0VXJsLCBkYXRhLCBhZGRpdGlvbmFsSGVhZGVycyB8fCB7fSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwdXQocmVxdWVzdFVybCwgZGF0YSwgYWRkaXRpb25hbEhlYWRlcnMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QoJ1BVVCcsIHJlcXVlc3RVcmwsIGRhdGEsIGFkZGl0aW9uYWxIZWFkZXJzIHx8IHt9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGhlYWQocmVxdWVzdFVybCwgYWRkaXRpb25hbEhlYWRlcnMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QoJ0hFQUQnLCByZXF1ZXN0VXJsLCBudWxsLCBhZGRpdGlvbmFsSGVhZGVycyB8fCB7fSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBzZW5kU3RyZWFtKHZlcmIsIHJlcXVlc3RVcmwsIHN0cmVhbSwgYWRkaXRpb25hbEhlYWRlcnMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QodmVyYiwgcmVxdWVzdFVybCwgc3RyZWFtLCBhZGRpdGlvbmFsSGVhZGVycyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXRzIGEgdHlwZWQgb2JqZWN0IGZyb20gYW4gZW5kcG9pbnRcbiAgICAgKiBCZSBhd2FyZSB0aGF0IG5vdCBmb3VuZCByZXR1cm5zIGEgbnVsbC4gIE90aGVyIGVycm9ycyAoNHh4LCA1eHgpIHJlamVjdCB0aGUgcHJvbWlzZVxuICAgICAqL1xuICAgIGdldEpzb24ocmVxdWVzdFVybCwgYWRkaXRpb25hbEhlYWRlcnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgYWRkaXRpb25hbEhlYWRlcnNbSGVhZGVycy5BY2NlcHRdID0gdGhpcy5fZ2V0RXhpc3RpbmdPckRlZmF1bHRIZWFkZXIoYWRkaXRpb25hbEhlYWRlcnMsIEhlYWRlcnMuQWNjZXB0LCBNZWRpYVR5cGVzLkFwcGxpY2F0aW9uSnNvbik7XG4gICAgICAgICAgICBjb25zdCByZXMgPSB5aWVsZCB0aGlzLmdldChyZXF1ZXN0VXJsLCBhZGRpdGlvbmFsSGVhZGVycyk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJvY2Vzc1Jlc3BvbnNlKHJlcywgdGhpcy5yZXF1ZXN0T3B0aW9ucyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwb3N0SnNvbihyZXF1ZXN0VXJsLCBvYmosIGFkZGl0aW9uYWxIZWFkZXJzID0ge30pIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnN0cmluZ2lmeShvYmosIG51bGwsIDIpO1xuICAgICAgICAgICAgYWRkaXRpb25hbEhlYWRlcnNbSGVhZGVycy5BY2NlcHRdID0gdGhpcy5fZ2V0RXhpc3RpbmdPckRlZmF1bHRIZWFkZXIoYWRkaXRpb25hbEhlYWRlcnMsIEhlYWRlcnMuQWNjZXB0LCBNZWRpYVR5cGVzLkFwcGxpY2F0aW9uSnNvbik7XG4gICAgICAgICAgICBhZGRpdGlvbmFsSGVhZGVyc1tIZWFkZXJzLkNvbnRlbnRUeXBlXSA9IHRoaXMuX2dldEV4aXN0aW5nT3JEZWZhdWx0SGVhZGVyKGFkZGl0aW9uYWxIZWFkZXJzLCBIZWFkZXJzLkNvbnRlbnRUeXBlLCBNZWRpYVR5cGVzLkFwcGxpY2F0aW9uSnNvbik7XG4gICAgICAgICAgICBjb25zdCByZXMgPSB5aWVsZCB0aGlzLnBvc3QocmVxdWVzdFVybCwgZGF0YSwgYWRkaXRpb25hbEhlYWRlcnMpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2Nlc3NSZXNwb25zZShyZXMsIHRoaXMucmVxdWVzdE9wdGlvbnMpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcHV0SnNvbihyZXF1ZXN0VXJsLCBvYmosIGFkZGl0aW9uYWxIZWFkZXJzID0ge30pIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnN0cmluZ2lmeShvYmosIG51bGwsIDIpO1xuICAgICAgICAgICAgYWRkaXRpb25hbEhlYWRlcnNbSGVhZGVycy5BY2NlcHRdID0gdGhpcy5fZ2V0RXhpc3RpbmdPckRlZmF1bHRIZWFkZXIoYWRkaXRpb25hbEhlYWRlcnMsIEhlYWRlcnMuQWNjZXB0LCBNZWRpYVR5cGVzLkFwcGxpY2F0aW9uSnNvbik7XG4gICAgICAgICAgICBhZGRpdGlvbmFsSGVhZGVyc1tIZWFkZXJzLkNvbnRlbnRUeXBlXSA9IHRoaXMuX2dldEV4aXN0aW5nT3JEZWZhdWx0SGVhZGVyKGFkZGl0aW9uYWxIZWFkZXJzLCBIZWFkZXJzLkNvbnRlbnRUeXBlLCBNZWRpYVR5cGVzLkFwcGxpY2F0aW9uSnNvbik7XG4gICAgICAgICAgICBjb25zdCByZXMgPSB5aWVsZCB0aGlzLnB1dChyZXF1ZXN0VXJsLCBkYXRhLCBhZGRpdGlvbmFsSGVhZGVycyk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJvY2Vzc1Jlc3BvbnNlKHJlcywgdGhpcy5yZXF1ZXN0T3B0aW9ucyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwYXRjaEpzb24ocmVxdWVzdFVybCwgb2JqLCBhZGRpdGlvbmFsSGVhZGVycyA9IHt9KSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gSlNPTi5zdHJpbmdpZnkob2JqLCBudWxsLCAyKTtcbiAgICAgICAgICAgIGFkZGl0aW9uYWxIZWFkZXJzW0hlYWRlcnMuQWNjZXB0XSA9IHRoaXMuX2dldEV4aXN0aW5nT3JEZWZhdWx0SGVhZGVyKGFkZGl0aW9uYWxIZWFkZXJzLCBIZWFkZXJzLkFjY2VwdCwgTWVkaWFUeXBlcy5BcHBsaWNhdGlvbkpzb24pO1xuICAgICAgICAgICAgYWRkaXRpb25hbEhlYWRlcnNbSGVhZGVycy5Db250ZW50VHlwZV0gPSB0aGlzLl9nZXRFeGlzdGluZ09yRGVmYXVsdEhlYWRlcihhZGRpdGlvbmFsSGVhZGVycywgSGVhZGVycy5Db250ZW50VHlwZSwgTWVkaWFUeXBlcy5BcHBsaWNhdGlvbkpzb24pO1xuICAgICAgICAgICAgY29uc3QgcmVzID0geWllbGQgdGhpcy5wYXRjaChyZXF1ZXN0VXJsLCBkYXRhLCBhZGRpdGlvbmFsSGVhZGVycyk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJvY2Vzc1Jlc3BvbnNlKHJlcywgdGhpcy5yZXF1ZXN0T3B0aW9ucyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBNYWtlcyBhIHJhdyBodHRwIHJlcXVlc3QuXG4gICAgICogQWxsIG90aGVyIG1ldGhvZHMgc3VjaCBhcyBnZXQsIHBvc3QsIHBhdGNoLCBhbmQgcmVxdWVzdCB1bHRpbWF0ZWx5IGNhbGwgdGhpcy5cbiAgICAgKiBQcmVmZXIgZ2V0LCBkZWwsIHBvc3QgYW5kIHBhdGNoXG4gICAgICovXG4gICAgcmVxdWVzdCh2ZXJiLCByZXF1ZXN0VXJsLCBkYXRhLCBoZWFkZXJzKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NsaWVudCBoYXMgYWxyZWFkeSBiZWVuIGRpc3Bvc2VkLicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcGFyc2VkVXJsID0gbmV3IFVSTChyZXF1ZXN0VXJsKTtcbiAgICAgICAgICAgIGxldCBpbmZvID0gdGhpcy5fcHJlcGFyZVJlcXVlc3QodmVyYiwgcGFyc2VkVXJsLCBoZWFkZXJzKTtcbiAgICAgICAgICAgIC8vIE9ubHkgcGVyZm9ybSByZXRyaWVzIG9uIHJlYWRzIHNpbmNlIHdyaXRlcyBtYXkgbm90IGJlIGlkZW1wb3RlbnQuXG4gICAgICAgICAgICBjb25zdCBtYXhUcmllcyA9IHRoaXMuX2FsbG93UmV0cmllcyAmJiBSZXRyeWFibGVIdHRwVmVyYnMuaW5jbHVkZXModmVyYilcbiAgICAgICAgICAgICAgICA/IHRoaXMuX21heFJldHJpZXMgKyAxXG4gICAgICAgICAgICAgICAgOiAxO1xuICAgICAgICAgICAgbGV0IG51bVRyaWVzID0gMDtcbiAgICAgICAgICAgIGxldCByZXNwb25zZTtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZSA9IHlpZWxkIHRoaXMucmVxdWVzdFJhdyhpbmZvLCBkYXRhKTtcbiAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiBpdCdzIGFuIGF1dGhlbnRpY2F0aW9uIGNoYWxsZW5nZVxuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZSAmJlxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5tZXNzYWdlICYmXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLm1lc3NhZ2Uuc3RhdHVzQ29kZSA9PT0gSHR0cENvZGVzLlVuYXV0aG9yaXplZCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgYXV0aGVudGljYXRpb25IYW5kbGVyO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGhhbmRsZXIgb2YgdGhpcy5oYW5kbGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZXIuY2FuSGFuZGxlQXV0aGVudGljYXRpb24ocmVzcG9uc2UpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aGVudGljYXRpb25IYW5kbGVyID0gaGFuZGxlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoYXV0aGVudGljYXRpb25IYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXV0aGVudGljYXRpb25IYW5kbGVyLmhhbmRsZUF1dGhlbnRpY2F0aW9uKHRoaXMsIGluZm8sIGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSByZWNlaXZlZCBhbiB1bmF1dGhvcml6ZWQgcmVzcG9uc2UgYnV0IGhhdmUgbm8gaGFuZGxlcnMgdG8gaGFuZGxlIGl0LlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gTGV0IHRoZSByZXNwb25zZSByZXR1cm4gdG8gdGhlIGNhbGxlci5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgcmVkaXJlY3RzUmVtYWluaW5nID0gdGhpcy5fbWF4UmVkaXJlY3RzO1xuICAgICAgICAgICAgICAgIHdoaWxlIChyZXNwb25zZS5tZXNzYWdlLnN0YXR1c0NvZGUgJiZcbiAgICAgICAgICAgICAgICAgICAgSHR0cFJlZGlyZWN0Q29kZXMuaW5jbHVkZXMocmVzcG9uc2UubWVzc2FnZS5zdGF0dXNDb2RlKSAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hbGxvd1JlZGlyZWN0cyAmJlxuICAgICAgICAgICAgICAgICAgICByZWRpcmVjdHNSZW1haW5pbmcgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZGlyZWN0VXJsID0gcmVzcG9uc2UubWVzc2FnZS5oZWFkZXJzWydsb2NhdGlvbiddO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXJlZGlyZWN0VXJsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGVyZSdzIG5vIGxvY2F0aW9uIHRvIHJlZGlyZWN0IHRvLCB3ZSB3b24ndFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkUmVkaXJlY3RVcmwgPSBuZXcgVVJMKHJlZGlyZWN0VXJsKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlZFVybC5wcm90b2NvbCA9PT0gJ2h0dHBzOicgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZFVybC5wcm90b2NvbCAhPT0gcGFyc2VkUmVkaXJlY3RVcmwucHJvdG9jb2wgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICF0aGlzLl9hbGxvd1JlZGlyZWN0RG93bmdyYWRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlZGlyZWN0IGZyb20gSFRUUFMgdG8gSFRUUCBwcm90b2NvbC4gVGhpcyBkb3duZ3JhZGUgaXMgbm90IGFsbG93ZWQgZm9yIHNlY3VyaXR5IHJlYXNvbnMuIElmIHlvdSB3YW50IHRvIGFsbG93IHRoaXMgYmVoYXZpb3IsIHNldCB0aGUgYWxsb3dSZWRpcmVjdERvd25ncmFkZSBvcHRpb24gdG8gdHJ1ZS4nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIGZpbmlzaCByZWFkaW5nIHRoZSByZXNwb25zZSBiZWZvcmUgcmVhc3NpZ25pbmcgcmVzcG9uc2VcbiAgICAgICAgICAgICAgICAgICAgLy8gd2hpY2ggd2lsbCBsZWFrIHRoZSBvcGVuIHNvY2tldC5cbiAgICAgICAgICAgICAgICAgICAgeWllbGQgcmVzcG9uc2UucmVhZEJvZHkoKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gc3RyaXAgYXV0aG9yaXphdGlvbiBoZWFkZXIgaWYgcmVkaXJlY3RlZCB0byBhIGRpZmZlcmVudCBob3N0bmFtZVxuICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VkUmVkaXJlY3RVcmwuaG9zdG5hbWUgIT09IHBhcnNlZFVybC5ob3N0bmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBoZWFkZXIgaW4gaGVhZGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhlYWRlciBuYW1lcyBhcmUgY2FzZSBpbnNlbnNpdGl2ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoZWFkZXIudG9Mb3dlckNhc2UoKSA9PT0gJ2F1dGhvcml6YXRpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBoZWFkZXJzW2hlYWRlcl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIGxldCdzIG1ha2UgdGhlIHJlcXVlc3Qgd2l0aCB0aGUgbmV3IHJlZGlyZWN0VXJsXG4gICAgICAgICAgICAgICAgICAgIGluZm8gPSB0aGlzLl9wcmVwYXJlUmVxdWVzdCh2ZXJiLCBwYXJzZWRSZWRpcmVjdFVybCwgaGVhZGVycyk7XG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0geWllbGQgdGhpcy5yZXF1ZXN0UmF3KGluZm8sIGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICByZWRpcmVjdHNSZW1haW5pbmctLTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5tZXNzYWdlLnN0YXR1c0NvZGUgfHxcbiAgICAgICAgICAgICAgICAgICAgIUh0dHBSZXNwb25zZVJldHJ5Q29kZXMuaW5jbHVkZXMocmVzcG9uc2UubWVzc2FnZS5zdGF0dXNDb2RlKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBJZiBub3QgYSByZXRyeSBjb2RlLCByZXR1cm4gaW1tZWRpYXRlbHkgaW5zdGVhZCBvZiByZXRyeWluZ1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG51bVRyaWVzICs9IDE7XG4gICAgICAgICAgICAgICAgaWYgKG51bVRyaWVzIDwgbWF4VHJpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgcmVzcG9uc2UucmVhZEJvZHkoKTtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgdGhpcy5fcGVyZm9ybUV4cG9uZW50aWFsQmFja29mZihudW1Ucmllcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSB3aGlsZSAobnVtVHJpZXMgPCBtYXhUcmllcyk7XG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBOZWVkcyB0byBiZSBjYWxsZWQgaWYga2VlcEFsaXZlIGlzIHNldCB0byB0cnVlIGluIHJlcXVlc3Qgb3B0aW9ucy5cbiAgICAgKi9cbiAgICBkaXNwb3NlKCkge1xuICAgICAgICBpZiAodGhpcy5fYWdlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX2FnZW50LmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9kaXNwb3NlZCA9IHRydWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJhdyByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBpbmZvXG4gICAgICogQHBhcmFtIGRhdGFcbiAgICAgKi9cbiAgICByZXF1ZXN0UmF3KGluZm8sIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2tGb3JSZXN1bHQoZXJyLCByZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIXJlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgYGVycmAgaXMgbm90IHBhc3NlZCwgdGhlbiBgcmVzYCBtdXN0IGJlIHBhc3NlZC5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ1Vua25vd24gZXJyb3InKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5yZXF1ZXN0UmF3V2l0aENhbGxiYWNrKGluZm8sIGRhdGEsIGNhbGxiYWNrRm9yUmVzdWx0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmF3IHJlcXVlc3Qgd2l0aCBjYWxsYmFjay5cbiAgICAgKiBAcGFyYW0gaW5mb1xuICAgICAqIEBwYXJhbSBkYXRhXG4gICAgICogQHBhcmFtIG9uUmVzdWx0XG4gICAgICovXG4gICAgcmVxdWVzdFJhd1dpdGhDYWxsYmFjayhpbmZvLCBkYXRhLCBvblJlc3VsdCkge1xuICAgICAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBpZiAoIWluZm8ub3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgICAgICAgICAgICAgaW5mby5vcHRpb25zLmhlYWRlcnMgPSB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGluZm8ub3B0aW9ucy5oZWFkZXJzWydDb250ZW50LUxlbmd0aCddID0gQnVmZmVyLmJ5dGVMZW5ndGgoZGF0YSwgJ3V0ZjgnKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgY2FsbGJhY2tDYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgZnVuY3Rpb24gaGFuZGxlUmVzdWx0KGVyciwgcmVzKSB7XG4gICAgICAgICAgICBpZiAoIWNhbGxiYWNrQ2FsbGVkKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2tDYWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIG9uUmVzdWx0KGVyciwgcmVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXEgPSBpbmZvLmh0dHBNb2R1bGUucmVxdWVzdChpbmZvLm9wdGlvbnMsIChtc2cpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IG5ldyBIdHRwQ2xpZW50UmVzcG9uc2UobXNnKTtcbiAgICAgICAgICAgIGhhbmRsZVJlc3VsdCh1bmRlZmluZWQsIHJlcyk7XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgc29ja2V0O1xuICAgICAgICByZXEub24oJ3NvY2tldCcsIHNvY2sgPT4ge1xuICAgICAgICAgICAgc29ja2V0ID0gc29jaztcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIElmIHdlIGV2ZXIgZ2V0IGRpc2Nvbm5lY3RlZCwgd2Ugd2FudCB0aGUgc29ja2V0IHRvIHRpbWVvdXQgZXZlbnR1YWxseVxuICAgICAgICByZXEuc2V0VGltZW91dCh0aGlzLl9zb2NrZXRUaW1lb3V0IHx8IDMgKiA2MDAwMCwgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHNvY2tldCkge1xuICAgICAgICAgICAgICAgIHNvY2tldC5lbmQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGhhbmRsZVJlc3VsdChuZXcgRXJyb3IoYFJlcXVlc3QgdGltZW91dDogJHtpbmZvLm9wdGlvbnMucGF0aH1gKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXEub24oJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgLy8gZXJyIGhhcyBzdGF0dXNDb2RlIHByb3BlcnR5XG4gICAgICAgICAgICAvLyByZXMgc2hvdWxkIGhhdmUgaGVhZGVyc1xuICAgICAgICAgICAgaGFuZGxlUmVzdWx0KGVycik7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoZGF0YSAmJiB0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJlcS53cml0ZShkYXRhLCAndXRmOCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRhICYmIHR5cGVvZiBkYXRhICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZGF0YS5vbignY2xvc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmVxLmVuZCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBkYXRhLnBpcGUocmVxKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlcS5lbmQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXRzIGFuIGh0dHAgYWdlbnQuIFRoaXMgZnVuY3Rpb24gaXMgdXNlZnVsIHdoZW4geW91IG5lZWQgYW4gaHR0cCBhZ2VudCB0aGF0IGhhbmRsZXNcbiAgICAgKiByb3V0aW5nIHRocm91Z2ggYSBwcm94eSBzZXJ2ZXIgLSBkZXBlbmRpbmcgdXBvbiB0aGUgdXJsIGFuZCBwcm94eSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG4gICAgICogQHBhcmFtIHNlcnZlclVybCAgVGhlIHNlcnZlciBVUkwgd2hlcmUgdGhlIHJlcXVlc3Qgd2lsbCBiZSBzZW50LiBGb3IgZXhhbXBsZSwgaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbVxuICAgICAqL1xuICAgIGdldEFnZW50KHNlcnZlclVybCkge1xuICAgICAgICBjb25zdCBwYXJzZWRVcmwgPSBuZXcgVVJMKHNlcnZlclVybCk7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRBZ2VudChwYXJzZWRVcmwpO1xuICAgIH1cbiAgICBnZXRBZ2VudERpc3BhdGNoZXIoc2VydmVyVXJsKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFVybCA9IG5ldyBVUkwoc2VydmVyVXJsKTtcbiAgICAgICAgY29uc3QgcHJveHlVcmwgPSBwbS5nZXRQcm94eVVybChwYXJzZWRVcmwpO1xuICAgICAgICBjb25zdCB1c2VQcm94eSA9IHByb3h5VXJsICYmIHByb3h5VXJsLmhvc3RuYW1lO1xuICAgICAgICBpZiAoIXVzZVByb3h5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldFByb3h5QWdlbnREaXNwYXRjaGVyKHBhcnNlZFVybCwgcHJveHlVcmwpO1xuICAgIH1cbiAgICBfcHJlcGFyZVJlcXVlc3QobWV0aG9kLCByZXF1ZXN0VXJsLCBoZWFkZXJzKSB7XG4gICAgICAgIGNvbnN0IGluZm8gPSB7fTtcbiAgICAgICAgaW5mby5wYXJzZWRVcmwgPSByZXF1ZXN0VXJsO1xuICAgICAgICBjb25zdCB1c2luZ1NzbCA9IGluZm8ucGFyc2VkVXJsLnByb3RvY29sID09PSAnaHR0cHM6JztcbiAgICAgICAgaW5mby5odHRwTW9kdWxlID0gdXNpbmdTc2wgPyBodHRwcyA6IGh0dHA7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRQb3J0ID0gdXNpbmdTc2wgPyA0NDMgOiA4MDtcbiAgICAgICAgaW5mby5vcHRpb25zID0ge307XG4gICAgICAgIGluZm8ub3B0aW9ucy5ob3N0ID0gaW5mby5wYXJzZWRVcmwuaG9zdG5hbWU7XG4gICAgICAgIGluZm8ub3B0aW9ucy5wb3J0ID0gaW5mby5wYXJzZWRVcmwucG9ydFxuICAgICAgICAgICAgPyBwYXJzZUludChpbmZvLnBhcnNlZFVybC5wb3J0KVxuICAgICAgICAgICAgOiBkZWZhdWx0UG9ydDtcbiAgICAgICAgaW5mby5vcHRpb25zLnBhdGggPVxuICAgICAgICAgICAgKGluZm8ucGFyc2VkVXJsLnBhdGhuYW1lIHx8ICcnKSArIChpbmZvLnBhcnNlZFVybC5zZWFyY2ggfHwgJycpO1xuICAgICAgICBpbmZvLm9wdGlvbnMubWV0aG9kID0gbWV0aG9kO1xuICAgICAgICBpbmZvLm9wdGlvbnMuaGVhZGVycyA9IHRoaXMuX21lcmdlSGVhZGVycyhoZWFkZXJzKTtcbiAgICAgICAgaWYgKHRoaXMudXNlckFnZW50ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGluZm8ub3B0aW9ucy5oZWFkZXJzWyd1c2VyLWFnZW50J10gPSB0aGlzLnVzZXJBZ2VudDtcbiAgICAgICAgfVxuICAgICAgICBpbmZvLm9wdGlvbnMuYWdlbnQgPSB0aGlzLl9nZXRBZ2VudChpbmZvLnBhcnNlZFVybCk7XG4gICAgICAgIC8vIGdpdmVzIGhhbmRsZXJzIGFuIG9wcG9ydHVuaXR5IHRvIHBhcnRpY2lwYXRlXG4gICAgICAgIGlmICh0aGlzLmhhbmRsZXJzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGhhbmRsZXIgb2YgdGhpcy5oYW5kbGVycykge1xuICAgICAgICAgICAgICAgIGhhbmRsZXIucHJlcGFyZVJlcXVlc3QoaW5mby5vcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5mbztcbiAgICB9XG4gICAgX21lcmdlSGVhZGVycyhoZWFkZXJzKSB7XG4gICAgICAgIGlmICh0aGlzLnJlcXVlc3RPcHRpb25zICYmIHRoaXMucmVxdWVzdE9wdGlvbnMuaGVhZGVycykge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGxvd2VyY2FzZUtleXModGhpcy5yZXF1ZXN0T3B0aW9ucy5oZWFkZXJzKSwgbG93ZXJjYXNlS2V5cyhoZWFkZXJzIHx8IHt9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvd2VyY2FzZUtleXMoaGVhZGVycyB8fCB7fSk7XG4gICAgfVxuICAgIF9nZXRFeGlzdGluZ09yRGVmYXVsdEhlYWRlcihhZGRpdGlvbmFsSGVhZGVycywgaGVhZGVyLCBfZGVmYXVsdCkge1xuICAgICAgICBsZXQgY2xpZW50SGVhZGVyO1xuICAgICAgICBpZiAodGhpcy5yZXF1ZXN0T3B0aW9ucyAmJiB0aGlzLnJlcXVlc3RPcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgICAgICAgIGNsaWVudEhlYWRlciA9IGxvd2VyY2FzZUtleXModGhpcy5yZXF1ZXN0T3B0aW9ucy5oZWFkZXJzKVtoZWFkZXJdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhZGRpdGlvbmFsSGVhZGVyc1toZWFkZXJdIHx8IGNsaWVudEhlYWRlciB8fCBfZGVmYXVsdDtcbiAgICB9XG4gICAgX2dldEFnZW50KHBhcnNlZFVybCkge1xuICAgICAgICBsZXQgYWdlbnQ7XG4gICAgICAgIGNvbnN0IHByb3h5VXJsID0gcG0uZ2V0UHJveHlVcmwocGFyc2VkVXJsKTtcbiAgICAgICAgY29uc3QgdXNlUHJveHkgPSBwcm94eVVybCAmJiBwcm94eVVybC5ob3N0bmFtZTtcbiAgICAgICAgaWYgKHRoaXMuX2tlZXBBbGl2ZSAmJiB1c2VQcm94eSkge1xuICAgICAgICAgICAgYWdlbnQgPSB0aGlzLl9wcm94eUFnZW50O1xuICAgICAgICB9XG4gICAgICAgIGlmICghdXNlUHJveHkpIHtcbiAgICAgICAgICAgIGFnZW50ID0gdGhpcy5fYWdlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgYWdlbnQgaXMgYWxyZWFkeSBhc3NpZ25lZCB1c2UgdGhhdCBhZ2VudC5cbiAgICAgICAgaWYgKGFnZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gYWdlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdXNpbmdTc2wgPSBwYXJzZWRVcmwucHJvdG9jb2wgPT09ICdodHRwczonO1xuICAgICAgICBsZXQgbWF4U29ja2V0cyA9IDEwMDtcbiAgICAgICAgaWYgKHRoaXMucmVxdWVzdE9wdGlvbnMpIHtcbiAgICAgICAgICAgIG1heFNvY2tldHMgPSB0aGlzLnJlcXVlc3RPcHRpb25zLm1heFNvY2tldHMgfHwgaHR0cC5nbG9iYWxBZ2VudC5tYXhTb2NrZXRzO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRoaXMgaXMgYHVzZVByb3h5YCBhZ2FpbiwgYnV0IHdlIG5lZWQgdG8gY2hlY2sgYHByb3h5VVJsYCBkaXJlY3RseSBmb3IgVHlwZVNjcmlwdHMncyBmbG93IGFuYWx5c2lzLlxuICAgICAgICBpZiAocHJveHlVcmwgJiYgcHJveHlVcmwuaG9zdG5hbWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGFnZW50T3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICBtYXhTb2NrZXRzLFxuICAgICAgICAgICAgICAgIGtlZXBBbGl2ZTogdGhpcy5fa2VlcEFsaXZlLFxuICAgICAgICAgICAgICAgIHByb3h5OiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sICgocHJveHlVcmwudXNlcm5hbWUgfHwgcHJveHlVcmwucGFzc3dvcmQpICYmIHtcbiAgICAgICAgICAgICAgICAgICAgcHJveHlBdXRoOiBgJHtwcm94eVVybC51c2VybmFtZX06JHtwcm94eVVybC5wYXNzd29yZH1gXG4gICAgICAgICAgICAgICAgfSkpLCB7IGhvc3Q6IHByb3h5VXJsLmhvc3RuYW1lLCBwb3J0OiBwcm94eVVybC5wb3J0IH0pXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgbGV0IHR1bm5lbEFnZW50O1xuICAgICAgICAgICAgY29uc3Qgb3Zlckh0dHBzID0gcHJveHlVcmwucHJvdG9jb2wgPT09ICdodHRwczonO1xuICAgICAgICAgICAgaWYgKHVzaW5nU3NsKSB7XG4gICAgICAgICAgICAgICAgdHVubmVsQWdlbnQgPSBvdmVySHR0cHMgPyB0dW5uZWwuaHR0cHNPdmVySHR0cHMgOiB0dW5uZWwuaHR0cHNPdmVySHR0cDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHR1bm5lbEFnZW50ID0gb3Zlckh0dHBzID8gdHVubmVsLmh0dHBPdmVySHR0cHMgOiB0dW5uZWwuaHR0cE92ZXJIdHRwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWdlbnQgPSB0dW5uZWxBZ2VudChhZ2VudE9wdGlvbnMpO1xuICAgICAgICAgICAgdGhpcy5fcHJveHlBZ2VudCA9IGFnZW50O1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHR1bm5lbGluZyBhZ2VudCBpc24ndCBhc3NpZ25lZCBjcmVhdGUgYSBuZXcgYWdlbnRcbiAgICAgICAgaWYgKCFhZ2VudCkge1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHsga2VlcEFsaXZlOiB0aGlzLl9rZWVwQWxpdmUsIG1heFNvY2tldHMgfTtcbiAgICAgICAgICAgIGFnZW50ID0gdXNpbmdTc2wgPyBuZXcgaHR0cHMuQWdlbnQob3B0aW9ucykgOiBuZXcgaHR0cC5BZ2VudChvcHRpb25zKTtcbiAgICAgICAgICAgIHRoaXMuX2FnZW50ID0gYWdlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVzaW5nU3NsICYmIHRoaXMuX2lnbm9yZVNzbEVycm9yKSB7XG4gICAgICAgICAgICAvLyB3ZSBkb24ndCB3YW50IHRvIHNldCBOT0RFX1RMU19SRUpFQ1RfVU5BVVRIT1JJWkVEPTAgc2luY2UgdGhhdCB3aWxsIGFmZmVjdCByZXF1ZXN0IGZvciBlbnRpcmUgcHJvY2Vzc1xuICAgICAgICAgICAgLy8gaHR0cC5SZXF1ZXN0T3B0aW9ucyBkb2Vzbid0IGV4cG9zZSBhIHdheSB0byBtb2RpZnkgUmVxdWVzdE9wdGlvbnMuYWdlbnQub3B0aW9uc1xuICAgICAgICAgICAgLy8gd2UgaGF2ZSB0byBjYXN0IGl0IHRvIGFueSBhbmQgY2hhbmdlIGl0IGRpcmVjdGx5XG4gICAgICAgICAgICBhZ2VudC5vcHRpb25zID0gT2JqZWN0LmFzc2lnbihhZ2VudC5vcHRpb25zIHx8IHt9LCB7XG4gICAgICAgICAgICAgICAgcmVqZWN0VW5hdXRob3JpemVkOiBmYWxzZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFnZW50O1xuICAgIH1cbiAgICBfZ2V0UHJveHlBZ2VudERpc3BhdGNoZXIocGFyc2VkVXJsLCBwcm94eVVybCkge1xuICAgICAgICBsZXQgcHJveHlBZ2VudDtcbiAgICAgICAgaWYgKHRoaXMuX2tlZXBBbGl2ZSkge1xuICAgICAgICAgICAgcHJveHlBZ2VudCA9IHRoaXMuX3Byb3h5QWdlbnREaXNwYXRjaGVyO1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIGFnZW50IGlzIGFscmVhZHkgYXNzaWduZWQgdXNlIHRoYXQgYWdlbnQuXG4gICAgICAgIGlmIChwcm94eUFnZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gcHJveHlBZ2VudDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1c2luZ1NzbCA9IHBhcnNlZFVybC5wcm90b2NvbCA9PT0gJ2h0dHBzOic7XG4gICAgICAgIHByb3h5QWdlbnQgPSBuZXcgdW5kaWNpXzEuUHJveHlBZ2VudChPYmplY3QuYXNzaWduKHsgdXJpOiBwcm94eVVybC5ocmVmLCBwaXBlbGluaW5nOiAhdGhpcy5fa2VlcEFsaXZlID8gMCA6IDEgfSwgKChwcm94eVVybC51c2VybmFtZSB8fCBwcm94eVVybC5wYXNzd29yZCkgJiYge1xuICAgICAgICAgICAgdG9rZW46IGBCYXNpYyAke0J1ZmZlci5mcm9tKGAke3Byb3h5VXJsLnVzZXJuYW1lfToke3Byb3h5VXJsLnBhc3N3b3JkfWApLnRvU3RyaW5nKCdiYXNlNjQnKX1gXG4gICAgICAgIH0pKSk7XG4gICAgICAgIHRoaXMuX3Byb3h5QWdlbnREaXNwYXRjaGVyID0gcHJveHlBZ2VudDtcbiAgICAgICAgaWYgKHVzaW5nU3NsICYmIHRoaXMuX2lnbm9yZVNzbEVycm9yKSB7XG4gICAgICAgICAgICAvLyB3ZSBkb24ndCB3YW50IHRvIHNldCBOT0RFX1RMU19SRUpFQ1RfVU5BVVRIT1JJWkVEPTAgc2luY2UgdGhhdCB3aWxsIGFmZmVjdCByZXF1ZXN0IGZvciBlbnRpcmUgcHJvY2Vzc1xuICAgICAgICAgICAgLy8gaHR0cC5SZXF1ZXN0T3B0aW9ucyBkb2Vzbid0IGV4cG9zZSBhIHdheSB0byBtb2RpZnkgUmVxdWVzdE9wdGlvbnMuYWdlbnQub3B0aW9uc1xuICAgICAgICAgICAgLy8gd2UgaGF2ZSB0byBjYXN0IGl0IHRvIGFueSBhbmQgY2hhbmdlIGl0IGRpcmVjdGx5XG4gICAgICAgICAgICBwcm94eUFnZW50Lm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHByb3h5QWdlbnQub3B0aW9ucy5yZXF1ZXN0VGxzIHx8IHt9LCB7XG4gICAgICAgICAgICAgICAgcmVqZWN0VW5hdXRob3JpemVkOiBmYWxzZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb3h5QWdlbnQ7XG4gICAgfVxuICAgIF9wZXJmb3JtRXhwb25lbnRpYWxCYWNrb2ZmKHJldHJ5TnVtYmVyKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICByZXRyeU51bWJlciA9IE1hdGgubWluKEV4cG9uZW50aWFsQmFja29mZkNlaWxpbmcsIHJldHJ5TnVtYmVyKTtcbiAgICAgICAgICAgIGNvbnN0IG1zID0gRXhwb25lbnRpYWxCYWNrb2ZmVGltZVNsaWNlICogTWF0aC5wb3coMiwgcmV0cnlOdW1iZXIpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dCgoKSA9PiByZXNvbHZlKCksIG1zKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfcHJvY2Vzc1Jlc3BvbnNlKHJlcywgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGF0dXNDb2RlID0gcmVzLm1lc3NhZ2Uuc3RhdHVzQ29kZSB8fCAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0ge1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXNDb2RlLFxuICAgICAgICAgICAgICAgICAgICByZXN1bHQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHt9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAvLyBub3QgZm91bmQgbGVhZHMgdG8gbnVsbCBvYmogcmV0dXJuZWRcbiAgICAgICAgICAgICAgICBpZiAoc3RhdHVzQ29kZSA9PT0gSHR0cENvZGVzLk5vdEZvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBnZXQgdGhlIHJlc3VsdCBmcm9tIHRoZSBib2R5XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gZGF0ZVRpbWVEZXNlcmlhbGl6ZXIoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYSA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNOYU4oYS52YWx1ZU9mKCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgb2JqO1xuICAgICAgICAgICAgICAgIGxldCBjb250ZW50cztcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb250ZW50cyA9IHlpZWxkIHJlcy5yZWFkQm9keSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudHMgJiYgY29udGVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5kZXNlcmlhbGl6ZURhdGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqID0gSlNPTi5wYXJzZShjb250ZW50cywgZGF0ZVRpbWVEZXNlcmlhbGl6ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqID0gSlNPTi5wYXJzZShjb250ZW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5yZXN1bHQgPSBvYmo7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuaGVhZGVycyA9IHJlcy5tZXNzYWdlLmhlYWRlcnM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSW52YWxpZCByZXNvdXJjZSAoY29udGVudHMgbm90IGpzb24pOyAgbGVhdmluZyByZXN1bHQgb2JqIG51bGxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gbm90ZSB0aGF0IDN4eCByZWRpcmVjdHMgYXJlIGhhbmRsZWQgYnkgdGhlIGh0dHAgbGF5ZXIuXG4gICAgICAgICAgICAgICAgaWYgKHN0YXR1c0NvZGUgPiAyOTkpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG1zZztcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgZXhjZXB0aW9uL2Vycm9yIGluIGJvZHksIGF0dGVtcHQgdG8gZ2V0IGJldHRlciBlcnJvclxuICAgICAgICAgICAgICAgICAgICBpZiAob2JqICYmIG9iai5tZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSBvYmoubWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb250ZW50cyAmJiBjb250ZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpdCBtYXkgYmUgdGhlIGNhc2UgdGhhdCB0aGUgZXhjZXB0aW9uIGlzIGluIHRoZSBib2R5IG1lc3NhZ2UgYXMgc3RyaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSBjb250ZW50cztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9IGBGYWlsZWQgcmVxdWVzdDogKCR7c3RhdHVzQ29kZX0pYDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnIgPSBuZXcgSHR0cENsaWVudEVycm9yKG1zZywgc3RhdHVzQ29kZSk7XG4gICAgICAgICAgICAgICAgICAgIGVyci5yZXN1bHQgPSByZXNwb25zZS5yZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnRzLkh0dHBDbGllbnQgPSBIdHRwQ2xpZW50O1xuY29uc3QgbG93ZXJjYXNlS2V5cyA9IChvYmopID0+IE9iamVjdC5rZXlzKG9iaikucmVkdWNlKChjLCBrKSA9PiAoKGNbay50b0xvd2VyQ2FzZSgpXSA9IG9ialtrXSksIGMpLCB7fSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlBlcnNvbmFsQWNjZXNzVG9rZW5DcmVkZW50aWFsSGFuZGxlciA9IGV4cG9ydHMuQmVhcmVyQ3JlZGVudGlhbEhhbmRsZXIgPSBleHBvcnRzLkJhc2ljQ3JlZGVudGlhbEhhbmRsZXIgPSB2b2lkIDA7XG5jbGFzcyBCYXNpY0NyZWRlbnRpYWxIYW5kbGVyIHtcbiAgICBjb25zdHJ1Y3Rvcih1c2VybmFtZSwgcGFzc3dvcmQpIHtcbiAgICAgICAgdGhpcy51c2VybmFtZSA9IHVzZXJuYW1lO1xuICAgICAgICB0aGlzLnBhc3N3b3JkID0gcGFzc3dvcmQ7XG4gICAgfVxuICAgIHByZXBhcmVSZXF1ZXN0KG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKCFvcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCdUaGUgcmVxdWVzdCBoYXMgbm8gaGVhZGVycycpO1xuICAgICAgICB9XG4gICAgICAgIG9wdGlvbnMuaGVhZGVyc1snQXV0aG9yaXphdGlvbiddID0gYEJhc2ljICR7QnVmZmVyLmZyb20oYCR7dGhpcy51c2VybmFtZX06JHt0aGlzLnBhc3N3b3JkfWApLnRvU3RyaW5nKCdiYXNlNjQnKX1gO1xuICAgIH1cbiAgICAvLyBUaGlzIGhhbmRsZXIgY2Fubm90IGhhbmRsZSA0MDFcbiAgICBjYW5IYW5kbGVBdXRoZW50aWNhdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBoYW5kbGVBdXRoZW50aWNhdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbm90IGltcGxlbWVudGVkJyk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuQmFzaWNDcmVkZW50aWFsSGFuZGxlciA9IEJhc2ljQ3JlZGVudGlhbEhhbmRsZXI7XG5jbGFzcyBCZWFyZXJDcmVkZW50aWFsSGFuZGxlciB7XG4gICAgY29uc3RydWN0b3IodG9rZW4pIHtcbiAgICAgICAgdGhpcy50b2tlbiA9IHRva2VuO1xuICAgIH1cbiAgICAvLyBjdXJyZW50bHkgaW1wbGVtZW50cyBwcmUtYXV0aG9yaXphdGlvblxuICAgIC8vIFRPRE86IHN1cHBvcnQgcHJlQXV0aCA9IGZhbHNlIHdoZXJlIGl0IGhvb2tzIG9uIDQwMVxuICAgIHByZXBhcmVSZXF1ZXN0KG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKCFvcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCdUaGUgcmVxdWVzdCBoYXMgbm8gaGVhZGVycycpO1xuICAgICAgICB9XG4gICAgICAgIG9wdGlvbnMuaGVhZGVyc1snQXV0aG9yaXphdGlvbiddID0gYEJlYXJlciAke3RoaXMudG9rZW59YDtcbiAgICB9XG4gICAgLy8gVGhpcyBoYW5kbGVyIGNhbm5vdCBoYW5kbGUgNDAxXG4gICAgY2FuSGFuZGxlQXV0aGVudGljYXRpb24oKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaGFuZGxlQXV0aGVudGljYXRpb24oKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBpbXBsZW1lbnRlZCcpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnRzLkJlYXJlckNyZWRlbnRpYWxIYW5kbGVyID0gQmVhcmVyQ3JlZGVudGlhbEhhbmRsZXI7XG5jbGFzcyBQZXJzb25hbEFjY2Vzc1Rva2VuQ3JlZGVudGlhbEhhbmRsZXIge1xuICAgIGNvbnN0cnVjdG9yKHRva2VuKSB7XG4gICAgICAgIHRoaXMudG9rZW4gPSB0b2tlbjtcbiAgICB9XG4gICAgLy8gY3VycmVudGx5IGltcGxlbWVudHMgcHJlLWF1dGhvcml6YXRpb25cbiAgICAvLyBUT0RPOiBzdXBwb3J0IHByZUF1dGggPSBmYWxzZSB3aGVyZSBpdCBob29rcyBvbiA0MDFcbiAgICBwcmVwYXJlUmVxdWVzdChvcHRpb25zKSB7XG4gICAgICAgIGlmICghb3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcignVGhlIHJlcXVlc3QgaGFzIG5vIGhlYWRlcnMnKTtcbiAgICAgICAgfVxuICAgICAgICBvcHRpb25zLmhlYWRlcnNbJ0F1dGhvcml6YXRpb24nXSA9IGBCYXNpYyAke0J1ZmZlci5mcm9tKGBQQVQ6JHt0aGlzLnRva2VufWApLnRvU3RyaW5nKCdiYXNlNjQnKX1gO1xuICAgIH1cbiAgICAvLyBUaGlzIGhhbmRsZXIgY2Fubm90IGhhbmRsZSA0MDFcbiAgICBjYW5IYW5kbGVBdXRoZW50aWNhdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBoYW5kbGVBdXRoZW50aWNhdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbm90IGltcGxlbWVudGVkJyk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuUGVyc29uYWxBY2Nlc3NUb2tlbkNyZWRlbnRpYWxIYW5kbGVyID0gUGVyc29uYWxBY2Nlc3NUb2tlbkNyZWRlbnRpYWxIYW5kbGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXV0aC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk9pZGNDbGllbnQgPSB2b2lkIDA7XG5jb25zdCBodHRwX2NsaWVudF8xID0gcmVxdWlyZShcIkBhY3Rpb25zL2h0dHAtY2xpZW50XCIpO1xuY29uc3QgYXV0aF8xID0gcmVxdWlyZShcIkBhY3Rpb25zL2h0dHAtY2xpZW50L2xpYi9hdXRoXCIpO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIi4vY29yZVwiKTtcbmNsYXNzIE9pZGNDbGllbnQge1xuICAgIHN0YXRpYyBjcmVhdGVIdHRwQ2xpZW50KGFsbG93UmV0cnkgPSB0cnVlLCBtYXhSZXRyeSA9IDEwKSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zID0ge1xuICAgICAgICAgICAgYWxsb3dSZXRyaWVzOiBhbGxvd1JldHJ5LFxuICAgICAgICAgICAgbWF4UmV0cmllczogbWF4UmV0cnlcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG5ldyBodHRwX2NsaWVudF8xLkh0dHBDbGllbnQoJ2FjdGlvbnMvb2lkYy1jbGllbnQnLCBbbmV3IGF1dGhfMS5CZWFyZXJDcmVkZW50aWFsSGFuZGxlcihPaWRjQ2xpZW50LmdldFJlcXVlc3RUb2tlbigpKV0sIHJlcXVlc3RPcHRpb25zKTtcbiAgICB9XG4gICAgc3RhdGljIGdldFJlcXVlc3RUb2tlbigpIHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSBwcm9jZXNzLmVudlsnQUNUSU9OU19JRF9UT0tFTl9SRVFVRVNUX1RPS0VOJ107XG4gICAgICAgIGlmICghdG9rZW4pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGdldCBBQ1RJT05TX0lEX1RPS0VOX1JFUVVFU1RfVE9LRU4gZW52IHZhcmlhYmxlJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgIH1cbiAgICBzdGF0aWMgZ2V0SURUb2tlblVybCgpIHtcbiAgICAgICAgY29uc3QgcnVudGltZVVybCA9IHByb2Nlc3MuZW52WydBQ1RJT05TX0lEX1RPS0VOX1JFUVVFU1RfVVJMJ107XG4gICAgICAgIGlmICghcnVudGltZVVybCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gZ2V0IEFDVElPTlNfSURfVE9LRU5fUkVRVUVTVF9VUkwgZW52IHZhcmlhYmxlJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJ1bnRpbWVVcmw7XG4gICAgfVxuICAgIHN0YXRpYyBnZXRDYWxsKGlkX3Rva2VuX3VybCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCBodHRwY2xpZW50ID0gT2lkY0NsaWVudC5jcmVhdGVIdHRwQ2xpZW50KCk7XG4gICAgICAgICAgICBjb25zdCByZXMgPSB5aWVsZCBodHRwY2xpZW50XG4gICAgICAgICAgICAgICAgLmdldEpzb24oaWRfdG9rZW5fdXJsKVxuICAgICAgICAgICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZ2V0IElEIFRva2VuLiBcXG4gXG4gICAgICAgIEVycm9yIENvZGUgOiAke2Vycm9yLnN0YXR1c0NvZGV9XFxuIFxuICAgICAgICBFcnJvciBNZXNzYWdlOiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGlkX3Rva2VuID0gKF9hID0gcmVzLnJlc3VsdCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlO1xuICAgICAgICAgICAgaWYgKCFpZF90b2tlbikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVzcG9uc2UganNvbiBib2R5IGRvIG5vdCBoYXZlIElEIFRva2VuIGZpZWxkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaWRfdG9rZW47XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBzdGF0aWMgZ2V0SURUb2tlbihhdWRpZW5jZSkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAvLyBOZXcgSUQgVG9rZW4gaXMgcmVxdWVzdGVkIGZyb20gYWN0aW9uIHNlcnZpY2VcbiAgICAgICAgICAgICAgICBsZXQgaWRfdG9rZW5fdXJsID0gT2lkY0NsaWVudC5nZXRJRFRva2VuVXJsKCk7XG4gICAgICAgICAgICAgICAgaWYgKGF1ZGllbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuY29kZWRBdWRpZW5jZSA9IGVuY29kZVVSSUNvbXBvbmVudChhdWRpZW5jZSk7XG4gICAgICAgICAgICAgICAgICAgIGlkX3Rva2VuX3VybCA9IGAke2lkX3Rva2VuX3VybH0mYXVkaWVuY2U9JHtlbmNvZGVkQXVkaWVuY2V9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKDAsIGNvcmVfMS5kZWJ1ZykoYElEIHRva2VuIHVybCBpcyAke2lkX3Rva2VuX3VybH1gKTtcbiAgICAgICAgICAgICAgICBjb25zdCBpZF90b2tlbiA9IHlpZWxkIE9pZGNDbGllbnQuZ2V0Q2FsbChpZF90b2tlbl91cmwpO1xuICAgICAgICAgICAgICAgICgwLCBjb3JlXzEuc2V0U2VjcmV0KShpZF90b2tlbik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlkX3Rva2VuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBtZXNzYWdlOiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuT2lkY0NsaWVudCA9IE9pZGNDbGllbnQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1vaWRjLXV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc3VtbWFyeSA9IGV4cG9ydHMubWFya2Rvd25TdW1tYXJ5ID0gZXhwb3J0cy5TVU1NQVJZX0RPQ1NfVVJMID0gZXhwb3J0cy5TVU1NQVJZX0VOVl9WQVIgPSB2b2lkIDA7XG5jb25zdCBvc18xID0gcmVxdWlyZShcIm9zXCIpO1xuY29uc3QgZnNfMSA9IHJlcXVpcmUoXCJmc1wiKTtcbmNvbnN0IHsgYWNjZXNzLCBhcHBlbmRGaWxlLCB3cml0ZUZpbGUgfSA9IGZzXzEucHJvbWlzZXM7XG5leHBvcnRzLlNVTU1BUllfRU5WX1ZBUiA9ICdHSVRIVUJfU1RFUF9TVU1NQVJZJztcbmV4cG9ydHMuU1VNTUFSWV9ET0NTX1VSTCA9ICdodHRwczovL2RvY3MuZ2l0aHViLmNvbS9hY3Rpb25zL3VzaW5nLXdvcmtmbG93cy93b3JrZmxvdy1jb21tYW5kcy1mb3ItZ2l0aHViLWFjdGlvbnMjYWRkaW5nLWEtam9iLXN1bW1hcnknO1xuY2xhc3MgU3VtbWFyeSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuX2J1ZmZlciA9ICcnO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBGaW5kcyB0aGUgc3VtbWFyeSBmaWxlIHBhdGggZnJvbSB0aGUgZW52aXJvbm1lbnQsIHJlamVjdHMgaWYgZW52IHZhciBpcyBub3QgZm91bmQgb3IgZmlsZSBkb2VzIG5vdCBleGlzdFxuICAgICAqIEFsc28gY2hlY2tzIHIvdyBwZXJtaXNzaW9ucy5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHN0ZXAgc3VtbWFyeSBmaWxlIHBhdGhcbiAgICAgKi9cbiAgICBmaWxlUGF0aCgpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9maWxlUGF0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9maWxlUGF0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHBhdGhGcm9tRW52ID0gcHJvY2Vzcy5lbnZbZXhwb3J0cy5TVU1NQVJZX0VOVl9WQVJdO1xuICAgICAgICAgICAgaWYgKCFwYXRoRnJvbUVudikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGZpbmQgZW52aXJvbm1lbnQgdmFyaWFibGUgZm9yICQke2V4cG9ydHMuU1VNTUFSWV9FTlZfVkFSfS4gQ2hlY2sgaWYgeW91ciBydW50aW1lIGVudmlyb25tZW50IHN1cHBvcnRzIGpvYiBzdW1tYXJpZXMuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHlpZWxkIGFjY2VzcyhwYXRoRnJvbUVudiwgZnNfMS5jb25zdGFudHMuUl9PSyB8IGZzXzEuY29uc3RhbnRzLldfT0spO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gYWNjZXNzIHN1bW1hcnkgZmlsZTogJyR7cGF0aEZyb21FbnZ9Jy4gQ2hlY2sgaWYgdGhlIGZpbGUgaGFzIGNvcnJlY3QgcmVhZC93cml0ZSBwZXJtaXNzaW9ucy5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX2ZpbGVQYXRoID0gcGF0aEZyb21FbnY7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZmlsZVBhdGg7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXcmFwcyBjb250ZW50IGluIGFuIEhUTUwgdGFnLCBhZGRpbmcgYW55IEhUTUwgYXR0cmlidXRlc1xuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRhZyBIVE1MIHRhZyB0byB3cmFwXG4gICAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsfSBjb250ZW50IGNvbnRlbnQgd2l0aGluIHRoZSB0YWdcbiAgICAgKiBAcGFyYW0ge1thdHRyaWJ1dGU6IHN0cmluZ106IHN0cmluZ30gYXR0cnMga2V5LXZhbHVlIGxpc3Qgb2YgSFRNTCBhdHRyaWJ1dGVzIHRvIGFkZFxuICAgICAqXG4gICAgICogQHJldHVybnMge3N0cmluZ30gY29udGVudCB3cmFwcGVkIGluIEhUTUwgZWxlbWVudFxuICAgICAqL1xuICAgIHdyYXAodGFnLCBjb250ZW50LCBhdHRycyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IGh0bWxBdHRycyA9IE9iamVjdC5lbnRyaWVzKGF0dHJzKVxuICAgICAgICAgICAgLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBgICR7a2V5fT1cIiR7dmFsdWV9XCJgKVxuICAgICAgICAgICAgLmpvaW4oJycpO1xuICAgICAgICBpZiAoIWNvbnRlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBgPCR7dGFnfSR7aHRtbEF0dHJzfT5gO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgPCR7dGFnfSR7aHRtbEF0dHJzfT4ke2NvbnRlbnR9PC8ke3RhZ30+YDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGVzIHRleHQgaW4gdGhlIGJ1ZmZlciB0byB0aGUgc3VtbWFyeSBidWZmZXIgZmlsZSBhbmQgZW1wdGllcyBidWZmZXIuIFdpbGwgYXBwZW5kIGJ5IGRlZmF1bHQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N1bW1hcnlXcml0ZU9wdGlvbnN9IFtvcHRpb25zXSAob3B0aW9uYWwpIG9wdGlvbnMgZm9yIHdyaXRlIG9wZXJhdGlvblxuICAgICAqXG4gICAgICogQHJldHVybnMge1Byb21pc2U8U3VtbWFyeT59IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICB3cml0ZShvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCBvdmVyd3JpdGUgPSAhIShvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMub3ZlcndyaXRlKTtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVQYXRoID0geWllbGQgdGhpcy5maWxlUGF0aCgpO1xuICAgICAgICAgICAgY29uc3Qgd3JpdGVGdW5jID0gb3ZlcndyaXRlID8gd3JpdGVGaWxlIDogYXBwZW5kRmlsZTtcbiAgICAgICAgICAgIHlpZWxkIHdyaXRlRnVuYyhmaWxlUGF0aCwgdGhpcy5fYnVmZmVyLCB7IGVuY29kaW5nOiAndXRmOCcgfSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lbXB0eUJ1ZmZlcigpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2xlYXJzIHRoZSBzdW1tYXJ5IGJ1ZmZlciBhbmQgd2lwZXMgdGhlIHN1bW1hcnkgZmlsZVxuICAgICAqXG4gICAgICogQHJldHVybnMge1N1bW1hcnl9IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBjbGVhcigpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVtcHR5QnVmZmVyKCkud3JpdGUoeyBvdmVyd3JpdGU6IHRydWUgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHN1bW1hcnkgYnVmZmVyIGFzIGEgc3RyaW5nXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBzdHJpbmcgb2Ygc3VtbWFyeSBidWZmZXJcbiAgICAgKi9cbiAgICBzdHJpbmdpZnkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9idWZmZXI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElmIHRoZSBzdW1tYXJ5IGJ1ZmZlciBpcyBlbXB0eVxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlbn0gdHJ1ZSBpZiB0aGUgYnVmZmVyIGlzIGVtcHR5XG4gICAgICovXG4gICAgaXNFbXB0eUJ1ZmZlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlci5sZW5ndGggPT09IDA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlc2V0cyB0aGUgc3VtbWFyeSBidWZmZXIgd2l0aG91dCB3cml0aW5nIHRvIHN1bW1hcnkgZmlsZVxuICAgICAqXG4gICAgICogQHJldHVybnMge1N1bW1hcnl9IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBlbXB0eUJ1ZmZlcigpIHtcbiAgICAgICAgdGhpcy5fYnVmZmVyID0gJyc7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIHJhdyB0ZXh0IHRvIHRoZSBzdW1tYXJ5IGJ1ZmZlclxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgY29udGVudCB0byBhZGRcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthZGRFT0w9ZmFsc2VdIChvcHRpb25hbCkgYXBwZW5kIGFuIEVPTCB0byB0aGUgcmF3IHRleHQgKGRlZmF1bHQ6IGZhbHNlKVxuICAgICAqXG4gICAgICogQHJldHVybnMge1N1bW1hcnl9IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBhZGRSYXcodGV4dCwgYWRkRU9MID0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5fYnVmZmVyICs9IHRleHQ7XG4gICAgICAgIHJldHVybiBhZGRFT0wgPyB0aGlzLmFkZEVPTCgpIDogdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyB0aGUgb3BlcmF0aW5nIHN5c3RlbS1zcGVjaWZpYyBlbmQtb2YtbGluZSBtYXJrZXIgdG8gdGhlIGJ1ZmZlclxuICAgICAqXG4gICAgICogQHJldHVybnMge1N1bW1hcnl9IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBhZGRFT0woKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZFJhdyhvc18xLkVPTCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYW4gSFRNTCBjb2RlYmxvY2sgdG8gdGhlIHN1bW1hcnkgYnVmZmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY29kZSBjb250ZW50IHRvIHJlbmRlciB3aXRoaW4gZmVuY2VkIGNvZGUgYmxvY2tcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbGFuZyAob3B0aW9uYWwpIGxhbmd1YWdlIHRvIHN5bnRheCBoaWdobGlnaHQgY29kZVxuICAgICAqXG4gICAgICogQHJldHVybnMge1N1bW1hcnl9IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBhZGRDb2RlQmxvY2soY29kZSwgbGFuZykge1xuICAgICAgICBjb25zdCBhdHRycyA9IE9iamVjdC5hc3NpZ24oe30sIChsYW5nICYmIHsgbGFuZyB9KSk7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLndyYXAoJ3ByZScsIHRoaXMud3JhcCgnY29kZScsIGNvZGUpLCBhdHRycyk7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZFJhdyhlbGVtZW50KS5hZGRFT0woKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhbiBIVE1MIGxpc3QgdG8gdGhlIHN1bW1hcnkgYnVmZmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBpdGVtcyBsaXN0IG9mIGl0ZW1zIHRvIHJlbmRlclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29yZGVyZWQ9ZmFsc2VdIChvcHRpb25hbCkgaWYgdGhlIHJlbmRlcmVkIGxpc3Qgc2hvdWxkIGJlIG9yZGVyZWQgb3Igbm90IChkZWZhdWx0OiBmYWxzZSlcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtTdW1tYXJ5fSBzdW1tYXJ5IGluc3RhbmNlXG4gICAgICovXG4gICAgYWRkTGlzdChpdGVtcywgb3JkZXJlZCA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IHRhZyA9IG9yZGVyZWQgPyAnb2wnIDogJ3VsJztcbiAgICAgICAgY29uc3QgbGlzdEl0ZW1zID0gaXRlbXMubWFwKGl0ZW0gPT4gdGhpcy53cmFwKCdsaScsIGl0ZW0pKS5qb2luKCcnKTtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMud3JhcCh0YWcsIGxpc3RJdGVtcyk7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZFJhdyhlbGVtZW50KS5hZGRFT0woKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhbiBIVE1MIHRhYmxlIHRvIHRoZSBzdW1tYXJ5IGJ1ZmZlclxuICAgICAqXG4gICAgICogQHBhcmFtIHtTdW1tYXJ5VGFibGVDZWxsW119IHJvd3MgdGFibGUgcm93c1xuICAgICAqXG4gICAgICogQHJldHVybnMge1N1bW1hcnl9IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBhZGRUYWJsZShyb3dzKSB7XG4gICAgICAgIGNvbnN0IHRhYmxlQm9keSA9IHJvd3NcbiAgICAgICAgICAgIC5tYXAocm93ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNlbGxzID0gcm93XG4gICAgICAgICAgICAgICAgLm1hcChjZWxsID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNlbGwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLndyYXAoJ3RkJywgY2VsbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHsgaGVhZGVyLCBkYXRhLCBjb2xzcGFuLCByb3dzcGFuIH0gPSBjZWxsO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhZyA9IGhlYWRlciA/ICd0aCcgOiAndGQnO1xuICAgICAgICAgICAgICAgIGNvbnN0IGF0dHJzID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCAoY29sc3BhbiAmJiB7IGNvbHNwYW4gfSkpLCAocm93c3BhbiAmJiB7IHJvd3NwYW4gfSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLndyYXAodGFnLCBkYXRhLCBhdHRycyk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5qb2luKCcnKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLndyYXAoJ3RyJywgY2VsbHMpO1xuICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oJycpO1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy53cmFwKCd0YWJsZScsIHRhYmxlQm9keSk7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZFJhdyhlbGVtZW50KS5hZGRFT0woKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhIGNvbGxhcHNhYmxlIEhUTUwgZGV0YWlscyBlbGVtZW50IHRvIHRoZSBzdW1tYXJ5IGJ1ZmZlclxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGxhYmVsIHRleHQgZm9yIHRoZSBjbG9zZWQgc3RhdGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCBjb2xsYXBzYWJsZSBjb250ZW50XG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7U3VtbWFyeX0gc3VtbWFyeSBpbnN0YW5jZVxuICAgICAqL1xuICAgIGFkZERldGFpbHMobGFiZWwsIGNvbnRlbnQpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMud3JhcCgnZGV0YWlscycsIHRoaXMud3JhcCgnc3VtbWFyeScsIGxhYmVsKSArIGNvbnRlbnQpO1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRSYXcoZWxlbWVudCkuYWRkRU9MKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYW4gSFRNTCBpbWFnZSB0YWcgdG8gdGhlIHN1bW1hcnkgYnVmZmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3JjIHBhdGggdG8gdGhlIGltYWdlIHlvdSB0byBlbWJlZFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhbHQgdGV4dCBkZXNjcmlwdGlvbiBvZiB0aGUgaW1hZ2VcbiAgICAgKiBAcGFyYW0ge1N1bW1hcnlJbWFnZU9wdGlvbnN9IG9wdGlvbnMgKG9wdGlvbmFsKSBhZGRpdGlvbiBpbWFnZSBhdHRyaWJ1dGVzXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7U3VtbWFyeX0gc3VtbWFyeSBpbnN0YW5jZVxuICAgICAqL1xuICAgIGFkZEltYWdlKHNyYywgYWx0LCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgY29uc3QgYXR0cnMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sICh3aWR0aCAmJiB7IHdpZHRoIH0pKSwgKGhlaWdodCAmJiB7IGhlaWdodCB9KSk7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLndyYXAoJ2ltZycsIG51bGwsIE9iamVjdC5hc3NpZ24oeyBzcmMsIGFsdCB9LCBhdHRycykpO1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRSYXcoZWxlbWVudCkuYWRkRU9MKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYW4gSFRNTCBzZWN0aW9uIGhlYWRpbmcgZWxlbWVudFxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgaGVhZGluZyB0ZXh0XG4gICAgICogQHBhcmFtIHtudW1iZXIgfCBzdHJpbmd9IFtsZXZlbD0xXSAob3B0aW9uYWwpIHRoZSBoZWFkaW5nIGxldmVsLCBkZWZhdWx0OiAxXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7U3VtbWFyeX0gc3VtbWFyeSBpbnN0YW5jZVxuICAgICAqL1xuICAgIGFkZEhlYWRpbmcodGV4dCwgbGV2ZWwpIHtcbiAgICAgICAgY29uc3QgdGFnID0gYGgke2xldmVsfWA7XG4gICAgICAgIGNvbnN0IGFsbG93ZWRUYWcgPSBbJ2gxJywgJ2gyJywgJ2gzJywgJ2g0JywgJ2g1JywgJ2g2J10uaW5jbHVkZXModGFnKVxuICAgICAgICAgICAgPyB0YWdcbiAgICAgICAgICAgIDogJ2gxJztcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMud3JhcChhbGxvd2VkVGFnLCB0ZXh0KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkUmF3KGVsZW1lbnQpLmFkZEVPTCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGFuIEhUTUwgdGhlbWF0aWMgYnJlYWsgKDxocj4pIHRvIHRoZSBzdW1tYXJ5IGJ1ZmZlclxuICAgICAqXG4gICAgICogQHJldHVybnMge1N1bW1hcnl9IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBhZGRTZXBhcmF0b3IoKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLndyYXAoJ2hyJywgbnVsbCk7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZFJhdyhlbGVtZW50KS5hZGRFT0woKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhbiBIVE1MIGxpbmUgYnJlYWsgKDxicj4pIHRvIHRoZSBzdW1tYXJ5IGJ1ZmZlclxuICAgICAqXG4gICAgICogQHJldHVybnMge1N1bW1hcnl9IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBhZGRCcmVhaygpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMud3JhcCgnYnInLCBudWxsKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkUmF3KGVsZW1lbnQpLmFkZEVPTCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGFuIEhUTUwgYmxvY2txdW90ZSB0byB0aGUgc3VtbWFyeSBidWZmZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IHF1b3RlIHRleHRcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY2l0ZSAob3B0aW9uYWwpIGNpdGF0aW9uIHVybFxuICAgICAqXG4gICAgICogQHJldHVybnMge1N1bW1hcnl9IHN1bW1hcnkgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBhZGRRdW90ZSh0ZXh0LCBjaXRlKSB7XG4gICAgICAgIGNvbnN0IGF0dHJzID0gT2JqZWN0LmFzc2lnbih7fSwgKGNpdGUgJiYgeyBjaXRlIH0pKTtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMud3JhcCgnYmxvY2txdW90ZScsIHRleHQsIGF0dHJzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkUmF3KGVsZW1lbnQpLmFkZEVPTCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGFuIEhUTUwgYW5jaG9yIHRhZyB0byB0aGUgc3VtbWFyeSBidWZmZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IGxpbmsgdGV4dC9jb250ZW50XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGhyZWYgaHlwZXJsaW5rXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7U3VtbWFyeX0gc3VtbWFyeSBpbnN0YW5jZVxuICAgICAqL1xuICAgIGFkZExpbmsodGV4dCwgaHJlZikge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy53cmFwKCdhJywgdGV4dCwgeyBocmVmIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRSYXcoZWxlbWVudCkuYWRkRU9MKCk7XG4gICAgfVxufVxuY29uc3QgX3N1bW1hcnkgPSBuZXcgU3VtbWFyeSgpO1xuLyoqXG4gKiBAZGVwcmVjYXRlZCB1c2UgYGNvcmUuc3VtbWFyeWBcbiAqL1xuZXhwb3J0cy5tYXJrZG93blN1bW1hcnkgPSBfc3VtbWFyeTtcbmV4cG9ydHMuc3VtbWFyeSA9IF9zdW1tYXJ5O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3VtbWFyeS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRvUGxhdGZvcm1QYXRoID0gZXhwb3J0cy50b1dpbjMyUGF0aCA9IGV4cG9ydHMudG9Qb3NpeFBhdGggPSB2b2lkIDA7XG5jb25zdCBwYXRoID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJwYXRoXCIpKTtcbi8qKlxuICogdG9Qb3NpeFBhdGggY29udmVydHMgdGhlIGdpdmVuIHBhdGggdG8gdGhlIHBvc2l4IGZvcm0uIE9uIFdpbmRvd3MsIFxcXFwgd2lsbCBiZVxuICogcmVwbGFjZWQgd2l0aCAvLlxuICpcbiAqIEBwYXJhbSBwdGguIFBhdGggdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiBzdHJpbmcgUG9zaXggcGF0aC5cbiAqL1xuZnVuY3Rpb24gdG9Qb3NpeFBhdGgocHRoKSB7XG4gICAgcmV0dXJuIHB0aC5yZXBsYWNlKC9bXFxcXF0vZywgJy8nKTtcbn1cbmV4cG9ydHMudG9Qb3NpeFBhdGggPSB0b1Bvc2l4UGF0aDtcbi8qKlxuICogdG9XaW4zMlBhdGggY29udmVydHMgdGhlIGdpdmVuIHBhdGggdG8gdGhlIHdpbjMyIGZvcm0uIE9uIExpbnV4LCAvIHdpbGwgYmVcbiAqIHJlcGxhY2VkIHdpdGggXFxcXC5cbiAqXG4gKiBAcGFyYW0gcHRoLiBQYXRoIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4gc3RyaW5nIFdpbjMyIHBhdGguXG4gKi9cbmZ1bmN0aW9uIHRvV2luMzJQYXRoKHB0aCkge1xuICAgIHJldHVybiBwdGgucmVwbGFjZSgvWy9dL2csICdcXFxcJyk7XG59XG5leHBvcnRzLnRvV2luMzJQYXRoID0gdG9XaW4zMlBhdGg7XG4vKipcbiAqIHRvUGxhdGZvcm1QYXRoIGNvbnZlcnRzIHRoZSBnaXZlbiBwYXRoIHRvIGEgcGxhdGZvcm0tc3BlY2lmaWMgcGF0aC4gSXQgZG9lc1xuICogdGhpcyBieSByZXBsYWNpbmcgaW5zdGFuY2VzIG9mIC8gYW5kIFxcIHdpdGggdGhlIHBsYXRmb3JtLXNwZWNpZmljIHBhdGhcbiAqIHNlcGFyYXRvci5cbiAqXG4gKiBAcGFyYW0gcHRoIFRoZSBwYXRoIHRvIHBsYXRmb3JtaXplLlxuICogQHJldHVybiBzdHJpbmcgVGhlIHBsYXRmb3JtLXNwZWNpZmljIHBhdGguXG4gKi9cbmZ1bmN0aW9uIHRvUGxhdGZvcm1QYXRoKHB0aCkge1xuICAgIHJldHVybiBwdGgucmVwbGFjZSgvWy9cXFxcXS9nLCBwYXRoLnNlcCk7XG59XG5leHBvcnRzLnRvUGxhdGZvcm1QYXRoID0gdG9QbGF0Zm9ybVBhdGg7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wYXRoLXV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfSk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG52YXIgX2E7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldENtZFBhdGggPSBleHBvcnRzLnRyeUdldEV4ZWN1dGFibGVQYXRoID0gZXhwb3J0cy5pc1Jvb3RlZCA9IGV4cG9ydHMuaXNEaXJlY3RvcnkgPSBleHBvcnRzLmV4aXN0cyA9IGV4cG9ydHMuUkVBRE9OTFkgPSBleHBvcnRzLlVWX0ZTX09fRVhMT0NLID0gZXhwb3J0cy5JU19XSU5ET1dTID0gZXhwb3J0cy51bmxpbmsgPSBleHBvcnRzLnN5bWxpbmsgPSBleHBvcnRzLnN0YXQgPSBleHBvcnRzLnJtZGlyID0gZXhwb3J0cy5ybSA9IGV4cG9ydHMucmVuYW1lID0gZXhwb3J0cy5yZWFkbGluayA9IGV4cG9ydHMucmVhZGRpciA9IGV4cG9ydHMub3BlbiA9IGV4cG9ydHMubWtkaXIgPSBleHBvcnRzLmxzdGF0ID0gZXhwb3J0cy5jb3B5RmlsZSA9IGV4cG9ydHMuY2htb2QgPSB2b2lkIDA7XG5jb25zdCBmcyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiZnNcIikpO1xuY29uc3QgcGF0aCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwicGF0aFwiKSk7XG5fYSA9IGZzLnByb21pc2VzXG4vLyBleHBvcnQgY29uc3Qge29wZW59ID0gJ2ZzJ1xuLCBleHBvcnRzLmNobW9kID0gX2EuY2htb2QsIGV4cG9ydHMuY29weUZpbGUgPSBfYS5jb3B5RmlsZSwgZXhwb3J0cy5sc3RhdCA9IF9hLmxzdGF0LCBleHBvcnRzLm1rZGlyID0gX2EubWtkaXIsIGV4cG9ydHMub3BlbiA9IF9hLm9wZW4sIGV4cG9ydHMucmVhZGRpciA9IF9hLnJlYWRkaXIsIGV4cG9ydHMucmVhZGxpbmsgPSBfYS5yZWFkbGluaywgZXhwb3J0cy5yZW5hbWUgPSBfYS5yZW5hbWUsIGV4cG9ydHMucm0gPSBfYS5ybSwgZXhwb3J0cy5ybWRpciA9IF9hLnJtZGlyLCBleHBvcnRzLnN0YXQgPSBfYS5zdGF0LCBleHBvcnRzLnN5bWxpbmsgPSBfYS5zeW1saW5rLCBleHBvcnRzLnVubGluayA9IF9hLnVubGluaztcbi8vIGV4cG9ydCBjb25zdCB7b3Blbn0gPSAnZnMnXG5leHBvcnRzLklTX1dJTkRPV1MgPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInO1xuLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL2QwMTUzYWVlMzY3NDIyZDA4NTgxMDVhYmVjMTg2ZGE0ZGZmMGEwYzUvZGVwcy91di9pbmNsdWRlL3V2L3dpbi5oI0w2OTFcbmV4cG9ydHMuVVZfRlNfT19FWExPQ0sgPSAweDEwMDAwMDAwO1xuZXhwb3J0cy5SRUFET05MWSA9IGZzLmNvbnN0YW50cy5PX1JET05MWTtcbmZ1bmN0aW9uIGV4aXN0cyhmc1BhdGgpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgeWllbGQgZXhwb3J0cy5zdGF0KGZzUGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZXhpc3RzID0gZXhpc3RzO1xuZnVuY3Rpb24gaXNEaXJlY3RvcnkoZnNQYXRoLCB1c2VTdGF0ID0gZmFsc2UpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBzdGF0cyA9IHVzZVN0YXQgPyB5aWVsZCBleHBvcnRzLnN0YXQoZnNQYXRoKSA6IHlpZWxkIGV4cG9ydHMubHN0YXQoZnNQYXRoKTtcbiAgICAgICAgcmV0dXJuIHN0YXRzLmlzRGlyZWN0b3J5KCk7XG4gICAgfSk7XG59XG5leHBvcnRzLmlzRGlyZWN0b3J5ID0gaXNEaXJlY3Rvcnk7XG4vKipcbiAqIE9uIE9TWC9MaW51eCwgdHJ1ZSBpZiBwYXRoIHN0YXJ0cyB3aXRoICcvJy4gT24gV2luZG93cywgdHJ1ZSBmb3IgcGF0aHMgbGlrZTpcbiAqIFxcLCBcXGhlbGxvLCBcXFxcaGVsbG9cXHNoYXJlLCBDOiwgYW5kIEM6XFxoZWxsbyAoYW5kIGNvcnJlc3BvbmRpbmcgYWx0ZXJuYXRlIHNlcGFyYXRvciBjYXNlcykuXG4gKi9cbmZ1bmN0aW9uIGlzUm9vdGVkKHApIHtcbiAgICBwID0gbm9ybWFsaXplU2VwYXJhdG9ycyhwKTtcbiAgICBpZiAoIXApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpc1Jvb3RlZCgpIHBhcmFtZXRlciBcInBcIiBjYW5ub3QgYmUgZW1wdHknKTtcbiAgICB9XG4gICAgaWYgKGV4cG9ydHMuSVNfV0lORE9XUykge1xuICAgICAgICByZXR1cm4gKHAuc3RhcnRzV2l0aCgnXFxcXCcpIHx8IC9eW0EtWl06L2kudGVzdChwKSAvLyBlLmcuIFxcIG9yIFxcaGVsbG8gb3IgXFxcXGhlbGxvXG4gICAgICAgICk7IC8vIGUuZy4gQzogb3IgQzpcXGhlbGxvXG4gICAgfVxuICAgIHJldHVybiBwLnN0YXJ0c1dpdGgoJy8nKTtcbn1cbmV4cG9ydHMuaXNSb290ZWQgPSBpc1Jvb3RlZDtcbi8qKlxuICogQmVzdCBlZmZvcnQgYXR0ZW1wdCB0byBkZXRlcm1pbmUgd2hldGhlciBhIGZpbGUgZXhpc3RzIGFuZCBpcyBleGVjdXRhYmxlLlxuICogQHBhcmFtIGZpbGVQYXRoICAgIGZpbGUgcGF0aCB0byBjaGVja1xuICogQHBhcmFtIGV4dGVuc2lvbnMgIGFkZGl0aW9uYWwgZmlsZSBleHRlbnNpb25zIHRvIHRyeVxuICogQHJldHVybiBpZiBmaWxlIGV4aXN0cyBhbmQgaXMgZXhlY3V0YWJsZSwgcmV0dXJucyB0aGUgZmlsZSBwYXRoLiBvdGhlcndpc2UgZW1wdHkgc3RyaW5nLlxuICovXG5mdW5jdGlvbiB0cnlHZXRFeGVjdXRhYmxlUGF0aChmaWxlUGF0aCwgZXh0ZW5zaW9ucykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGxldCBzdGF0cyA9IHVuZGVmaW5lZDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIHRlc3QgZmlsZSBleGlzdHNcbiAgICAgICAgICAgIHN0YXRzID0geWllbGQgZXhwb3J0cy5zdGF0KGZpbGVQYXRoKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyLmNvZGUgIT09ICdFTk9FTlQnKSB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgVW5leHBlY3RlZCBlcnJvciBhdHRlbXB0aW5nIHRvIGRldGVybWluZSBpZiBleGVjdXRhYmxlIGZpbGUgZXhpc3RzICcke2ZpbGVQYXRofSc6ICR7ZXJyfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0cyAmJiBzdGF0cy5pc0ZpbGUoKSkge1xuICAgICAgICAgICAgaWYgKGV4cG9ydHMuSVNfV0lORE9XUykge1xuICAgICAgICAgICAgICAgIC8vIG9uIFdpbmRvd3MsIHRlc3QgZm9yIHZhbGlkIGV4dGVuc2lvblxuICAgICAgICAgICAgICAgIGNvbnN0IHVwcGVyRXh0ID0gcGF0aC5leHRuYW1lKGZpbGVQYXRoKS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIGlmIChleHRlbnNpb25zLnNvbWUodmFsaWRFeHQgPT4gdmFsaWRFeHQudG9VcHBlckNhc2UoKSA9PT0gdXBwZXJFeHQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmaWxlUGF0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNVbml4RXhlY3V0YWJsZShzdGF0cykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpbGVQYXRoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyB0cnkgZWFjaCBleHRlbnNpb25cbiAgICAgICAgY29uc3Qgb3JpZ2luYWxGaWxlUGF0aCA9IGZpbGVQYXRoO1xuICAgICAgICBmb3IgKGNvbnN0IGV4dGVuc2lvbiBvZiBleHRlbnNpb25zKSB7XG4gICAgICAgICAgICBmaWxlUGF0aCA9IG9yaWdpbmFsRmlsZVBhdGggKyBleHRlbnNpb247XG4gICAgICAgICAgICBzdGF0cyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgc3RhdHMgPSB5aWVsZCBleHBvcnRzLnN0YXQoZmlsZVBhdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIuY29kZSAhPT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFVuZXhwZWN0ZWQgZXJyb3IgYXR0ZW1wdGluZyB0byBkZXRlcm1pbmUgaWYgZXhlY3V0YWJsZSBmaWxlIGV4aXN0cyAnJHtmaWxlUGF0aH0nOiAke2Vycn1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3RhdHMgJiYgc3RhdHMuaXNGaWxlKCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXhwb3J0cy5JU19XSU5ET1dTKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHByZXNlcnZlIHRoZSBjYXNlIG9mIHRoZSBhY3R1YWwgZmlsZSAoc2luY2UgYW4gZXh0ZW5zaW9uIHdhcyBhcHBlbmRlZClcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpcmVjdG9yeSA9IHBhdGguZGlybmFtZShmaWxlUGF0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cHBlck5hbWUgPSBwYXRoLmJhc2VuYW1lKGZpbGVQYXRoKS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBhY3R1YWxOYW1lIG9mIHlpZWxkIGV4cG9ydHMucmVhZGRpcihkaXJlY3RvcnkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVwcGVyTmFtZSA9PT0gYWN0dWFsTmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVQYXRoID0gcGF0aC5qb2luKGRpcmVjdG9yeSwgYWN0dWFsTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFVuZXhwZWN0ZWQgZXJyb3IgYXR0ZW1wdGluZyB0byBkZXRlcm1pbmUgdGhlIGFjdHVhbCBjYXNlIG9mIHRoZSBmaWxlICcke2ZpbGVQYXRofSc6ICR7ZXJyfWApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmaWxlUGF0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1VuaXhFeGVjdXRhYmxlKHN0YXRzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpbGVQYXRoO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9KTtcbn1cbmV4cG9ydHMudHJ5R2V0RXhlY3V0YWJsZVBhdGggPSB0cnlHZXRFeGVjdXRhYmxlUGF0aDtcbmZ1bmN0aW9uIG5vcm1hbGl6ZVNlcGFyYXRvcnMocCkge1xuICAgIHAgPSBwIHx8ICcnO1xuICAgIGlmIChleHBvcnRzLklTX1dJTkRPV1MpIHtcbiAgICAgICAgLy8gY29udmVydCBzbGFzaGVzIG9uIFdpbmRvd3NcbiAgICAgICAgcCA9IHAucmVwbGFjZSgvXFwvL2csICdcXFxcJyk7XG4gICAgICAgIC8vIHJlbW92ZSByZWR1bmRhbnQgc2xhc2hlc1xuICAgICAgICByZXR1cm4gcC5yZXBsYWNlKC9cXFxcXFxcXCsvZywgJ1xcXFwnKTtcbiAgICB9XG4gICAgLy8gcmVtb3ZlIHJlZHVuZGFudCBzbGFzaGVzXG4gICAgcmV0dXJuIHAucmVwbGFjZSgvXFwvXFwvKy9nLCAnLycpO1xufVxuLy8gb24gTWFjL0xpbnV4LCB0ZXN0IHRoZSBleGVjdXRlIGJpdFxuLy8gICAgIFIgICBXICBYICBSICBXIFggUiBXIFhcbi8vICAgMjU2IDEyOCA2NCAzMiAxNiA4IDQgMiAxXG5mdW5jdGlvbiBpc1VuaXhFeGVjdXRhYmxlKHN0YXRzKSB7XG4gICAgcmV0dXJuICgoc3RhdHMubW9kZSAmIDEpID4gMCB8fFxuICAgICAgICAoKHN0YXRzLm1vZGUgJiA4KSA+IDAgJiYgc3RhdHMuZ2lkID09PSBwcm9jZXNzLmdldGdpZCgpKSB8fFxuICAgICAgICAoKHN0YXRzLm1vZGUgJiA2NCkgPiAwICYmIHN0YXRzLnVpZCA9PT0gcHJvY2Vzcy5nZXR1aWQoKSkpO1xufVxuLy8gR2V0IHRoZSBwYXRoIG9mIGNtZC5leGUgaW4gd2luZG93c1xuZnVuY3Rpb24gZ2V0Q21kUGF0aCgpIHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuIChfYSA9IHByb2Nlc3MuZW52WydDT01TUEVDJ10pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGBjbWQuZXhlYDtcbn1cbmV4cG9ydHMuZ2V0Q21kUGF0aCA9IGdldENtZFBhdGg7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pby11dGlsLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfSk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmZpbmRJblBhdGggPSBleHBvcnRzLndoaWNoID0gZXhwb3J0cy5ta2RpclAgPSBleHBvcnRzLnJtUkYgPSBleHBvcnRzLm12ID0gZXhwb3J0cy5jcCA9IHZvaWQgMDtcbmNvbnN0IGFzc2VydF8xID0gcmVxdWlyZShcImFzc2VydFwiKTtcbmNvbnN0IHBhdGggPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcInBhdGhcIikpO1xuY29uc3QgaW9VdGlsID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL2lvLXV0aWxcIikpO1xuLyoqXG4gKiBDb3BpZXMgYSBmaWxlIG9yIGZvbGRlci5cbiAqIEJhc2VkIG9mZiBvZiBzaGVsbGpzIC0gaHR0cHM6Ly9naXRodWIuY29tL3NoZWxsanMvc2hlbGxqcy9ibG9iLzkyMzdmNjZjNTJlNWRhYTQwNDU4Zjk0Zjk1NjVlMThlODEzMmY1YTYvc3JjL2NwLmpzXG4gKlxuICogQHBhcmFtICAgICBzb3VyY2UgICAgc291cmNlIHBhdGhcbiAqIEBwYXJhbSAgICAgZGVzdCAgICAgIGRlc3RpbmF0aW9uIHBhdGhcbiAqIEBwYXJhbSAgICAgb3B0aW9ucyAgIG9wdGlvbmFsLiBTZWUgQ29weU9wdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIGNwKHNvdXJjZSwgZGVzdCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgeyBmb3JjZSwgcmVjdXJzaXZlLCBjb3B5U291cmNlRGlyZWN0b3J5IH0gPSByZWFkQ29weU9wdGlvbnMob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGRlc3RTdGF0ID0gKHlpZWxkIGlvVXRpbC5leGlzdHMoZGVzdCkpID8geWllbGQgaW9VdGlsLnN0YXQoZGVzdCkgOiBudWxsO1xuICAgICAgICAvLyBEZXN0IGlzIGFuIGV4aXN0aW5nIGZpbGUsIGJ1dCBub3QgZm9yY2luZ1xuICAgICAgICBpZiAoZGVzdFN0YXQgJiYgZGVzdFN0YXQuaXNGaWxlKCkgJiYgIWZvcmNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgZGVzdCBpcyBhbiBleGlzdGluZyBkaXJlY3RvcnksIHNob3VsZCBjb3B5IGluc2lkZS5cbiAgICAgICAgY29uc3QgbmV3RGVzdCA9IGRlc3RTdGF0ICYmIGRlc3RTdGF0LmlzRGlyZWN0b3J5KCkgJiYgY29weVNvdXJjZURpcmVjdG9yeVxuICAgICAgICAgICAgPyBwYXRoLmpvaW4oZGVzdCwgcGF0aC5iYXNlbmFtZShzb3VyY2UpKVxuICAgICAgICAgICAgOiBkZXN0O1xuICAgICAgICBpZiAoISh5aWVsZCBpb1V0aWwuZXhpc3RzKHNvdXJjZSkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYG5vIHN1Y2ggZmlsZSBvciBkaXJlY3Rvcnk6ICR7c291cmNlfWApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNvdXJjZVN0YXQgPSB5aWVsZCBpb1V0aWwuc3RhdChzb3VyY2UpO1xuICAgICAgICBpZiAoc291cmNlU3RhdC5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgICAgICBpZiAoIXJlY3Vyc2l2ZSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGNvcHkuICR7c291cmNlfSBpcyBhIGRpcmVjdG9yeSwgYnV0IHRyaWVkIHRvIGNvcHkgd2l0aG91dCByZWN1cnNpdmUgZmxhZy5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHlpZWxkIGNwRGlyUmVjdXJzaXZlKHNvdXJjZSwgbmV3RGVzdCwgMCwgZm9yY2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHBhdGgucmVsYXRpdmUoc291cmNlLCBuZXdEZXN0KSA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICAvLyBhIGZpbGUgY2Fubm90IGJlIGNvcGllZCB0byBpdHNlbGZcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCcke25ld0Rlc3R9JyBhbmQgJyR7c291cmNlfScgYXJlIHRoZSBzYW1lIGZpbGVgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHlpZWxkIGNvcHlGaWxlKHNvdXJjZSwgbmV3RGVzdCwgZm9yY2UpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5leHBvcnRzLmNwID0gY3A7XG4vKipcbiAqIE1vdmVzIGEgcGF0aC5cbiAqXG4gKiBAcGFyYW0gICAgIHNvdXJjZSAgICBzb3VyY2UgcGF0aFxuICogQHBhcmFtICAgICBkZXN0ICAgICAgZGVzdGluYXRpb24gcGF0aFxuICogQHBhcmFtICAgICBvcHRpb25zICAgb3B0aW9uYWwuIFNlZSBNb3ZlT3B0aW9ucy5cbiAqL1xuZnVuY3Rpb24gbXYoc291cmNlLCBkZXN0LCBvcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBpZiAoeWllbGQgaW9VdGlsLmV4aXN0cyhkZXN0KSkge1xuICAgICAgICAgICAgbGV0IGRlc3RFeGlzdHMgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKHlpZWxkIGlvVXRpbC5pc0RpcmVjdG9yeShkZXN0KSkge1xuICAgICAgICAgICAgICAgIC8vIElmIGRlc3QgaXMgZGlyZWN0b3J5IGNvcHkgc3JjIGludG8gZGVzdFxuICAgICAgICAgICAgICAgIGRlc3QgPSBwYXRoLmpvaW4oZGVzdCwgcGF0aC5iYXNlbmFtZShzb3VyY2UpKTtcbiAgICAgICAgICAgICAgICBkZXN0RXhpc3RzID0geWllbGQgaW9VdGlsLmV4aXN0cyhkZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkZXN0RXhpc3RzKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZm9yY2UgPT0gbnVsbCB8fCBvcHRpb25zLmZvcmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIHJtUkYoZGVzdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rlc3RpbmF0aW9uIGFscmVhZHkgZXhpc3RzJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHlpZWxkIG1rZGlyUChwYXRoLmRpcm5hbWUoZGVzdCkpO1xuICAgICAgICB5aWVsZCBpb1V0aWwucmVuYW1lKHNvdXJjZSwgZGVzdCk7XG4gICAgfSk7XG59XG5leHBvcnRzLm12ID0gbXY7XG4vKipcbiAqIFJlbW92ZSBhIHBhdGggcmVjdXJzaXZlbHkgd2l0aCBmb3JjZVxuICpcbiAqIEBwYXJhbSBpbnB1dFBhdGggcGF0aCB0byByZW1vdmVcbiAqL1xuZnVuY3Rpb24gcm1SRihpbnB1dFBhdGgpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBpZiAoaW9VdGlsLklTX1dJTkRPV1MpIHtcbiAgICAgICAgICAgIC8vIENoZWNrIGZvciBpbnZhbGlkIGNoYXJhY3RlcnNcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3dpbmRvd3Mvd2luMzIvZmlsZWlvL25hbWluZy1hLWZpbGVcbiAgICAgICAgICAgIGlmICgvWypcIjw+fF0vLnRlc3QoaW5wdXRQYXRoKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRmlsZSBwYXRoIG11c3Qgbm90IGNvbnRhaW4gYCpgLCBgXCJgLCBgPGAsIGA+YCBvciBgfGAgb24gV2luZG93cycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBub3RlIGlmIHBhdGggZG9lcyBub3QgZXhpc3QsIGVycm9yIGlzIHNpbGVudFxuICAgICAgICAgICAgeWllbGQgaW9VdGlsLnJtKGlucHV0UGF0aCwge1xuICAgICAgICAgICAgICAgIGZvcmNlOiB0cnVlLFxuICAgICAgICAgICAgICAgIG1heFJldHJpZXM6IDMsXG4gICAgICAgICAgICAgICAgcmVjdXJzaXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHJldHJ5RGVsYXk6IDMwMFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGaWxlIHdhcyB1bmFibGUgdG8gYmUgcmVtb3ZlZCAke2Vycn1gKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuZXhwb3J0cy5ybVJGID0gcm1SRjtcbi8qKlxuICogTWFrZSBhIGRpcmVjdG9yeS4gIENyZWF0ZXMgdGhlIGZ1bGwgcGF0aCB3aXRoIGZvbGRlcnMgaW4gYmV0d2VlblxuICogV2lsbCB0aHJvdyBpZiBpdCBmYWlsc1xuICpcbiAqIEBwYXJhbSAgIGZzUGF0aCAgICAgICAgcGF0aCB0byBjcmVhdGVcbiAqIEByZXR1cm5zIFByb21pc2U8dm9pZD5cbiAqL1xuZnVuY3Rpb24gbWtkaXJQKGZzUGF0aCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGFzc2VydF8xLm9rKGZzUGF0aCwgJ2EgcGF0aCBhcmd1bWVudCBtdXN0IGJlIHByb3ZpZGVkJyk7XG4gICAgICAgIHlpZWxkIGlvVXRpbC5ta2Rpcihmc1BhdGgsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIH0pO1xufVxuZXhwb3J0cy5ta2RpclAgPSBta2RpclA7XG4vKipcbiAqIFJldHVybnMgcGF0aCBvZiBhIHRvb2wgaGFkIHRoZSB0b29sIGFjdHVhbGx5IGJlZW4gaW52b2tlZC4gIFJlc29sdmVzIHZpYSBwYXRocy5cbiAqIElmIHlvdSBjaGVjayBhbmQgdGhlIHRvb2wgZG9lcyBub3QgZXhpc3QsIGl0IHdpbGwgdGhyb3cuXG4gKlxuICogQHBhcmFtICAgICB0b29sICAgICAgICAgICAgICBuYW1lIG9mIHRoZSB0b29sXG4gKiBAcGFyYW0gICAgIGNoZWNrICAgICAgICAgICAgIHdoZXRoZXIgdG8gY2hlY2sgaWYgdG9vbCBleGlzdHNcbiAqIEByZXR1cm5zICAgUHJvbWlzZTxzdHJpbmc+ICAgcGF0aCB0byB0b29sXG4gKi9cbmZ1bmN0aW9uIHdoaWNoKHRvb2wsIGNoZWNrKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgaWYgKCF0b29sKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJwYXJhbWV0ZXIgJ3Rvb2wnIGlzIHJlcXVpcmVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHJlY3Vyc2l2ZSB3aGVuIGNoZWNrPXRydWVcbiAgICAgICAgaWYgKGNoZWNrKSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB5aWVsZCB3aGljaCh0b29sLCBmYWxzZSk7XG4gICAgICAgICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICAgICAgICAgIGlmIChpb1V0aWwuSVNfV0lORE9XUykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBsb2NhdGUgZXhlY3V0YWJsZSBmaWxlOiAke3Rvb2x9LiBQbGVhc2UgdmVyaWZ5IGVpdGhlciB0aGUgZmlsZSBwYXRoIGV4aXN0cyBvciB0aGUgZmlsZSBjYW4gYmUgZm91bmQgd2l0aGluIGEgZGlyZWN0b3J5IHNwZWNpZmllZCBieSB0aGUgUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZS4gQWxzbyB2ZXJpZnkgdGhlIGZpbGUgaGFzIGEgdmFsaWQgZXh0ZW5zaW9uIGZvciBhbiBleGVjdXRhYmxlIGZpbGUuYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBsb2NhdGUgZXhlY3V0YWJsZSBmaWxlOiAke3Rvb2x9LiBQbGVhc2UgdmVyaWZ5IGVpdGhlciB0aGUgZmlsZSBwYXRoIGV4aXN0cyBvciB0aGUgZmlsZSBjYW4gYmUgZm91bmQgd2l0aGluIGEgZGlyZWN0b3J5IHNwZWNpZmllZCBieSB0aGUgUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZS4gQWxzbyBjaGVjayB0aGUgZmlsZSBtb2RlIHRvIHZlcmlmeSB0aGUgZmlsZSBpcyBleGVjdXRhYmxlLmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWF0Y2hlcyA9IHlpZWxkIGZpbmRJblBhdGgodG9vbCk7XG4gICAgICAgIGlmIChtYXRjaGVzICYmIG1hdGNoZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXNbMF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH0pO1xufVxuZXhwb3J0cy53aGljaCA9IHdoaWNoO1xuLyoqXG4gKiBSZXR1cm5zIGEgbGlzdCBvZiBhbGwgb2NjdXJyZW5jZXMgb2YgdGhlIGdpdmVuIHRvb2wgb24gdGhlIHN5c3RlbSBwYXRoLlxuICpcbiAqIEByZXR1cm5zICAgUHJvbWlzZTxzdHJpbmdbXT4gIHRoZSBwYXRocyBvZiB0aGUgdG9vbFxuICovXG5mdW5jdGlvbiBmaW5kSW5QYXRoKHRvb2wpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBpZiAoIXRvb2wpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInBhcmFtZXRlciAndG9vbCcgaXMgcmVxdWlyZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gYnVpbGQgdGhlIGxpc3Qgb2YgZXh0ZW5zaW9ucyB0byB0cnlcbiAgICAgICAgY29uc3QgZXh0ZW5zaW9ucyA9IFtdO1xuICAgICAgICBpZiAoaW9VdGlsLklTX1dJTkRPV1MgJiYgcHJvY2Vzcy5lbnZbJ1BBVEhFWFQnXSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBleHRlbnNpb24gb2YgcHJvY2Vzcy5lbnZbJ1BBVEhFWFQnXS5zcGxpdChwYXRoLmRlbGltaXRlcikpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXh0ZW5zaW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbnMucHVzaChleHRlbnNpb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBpZiBpdCdzIHJvb3RlZCwgcmV0dXJuIGl0IGlmIGV4aXN0cy4gb3RoZXJ3aXNlIHJldHVybiBlbXB0eS5cbiAgICAgICAgaWYgKGlvVXRpbC5pc1Jvb3RlZCh0b29sKSkge1xuICAgICAgICAgICAgY29uc3QgZmlsZVBhdGggPSB5aWVsZCBpb1V0aWwudHJ5R2V0RXhlY3V0YWJsZVBhdGgodG9vbCwgZXh0ZW5zaW9ucyk7XG4gICAgICAgICAgICBpZiAoZmlsZVBhdGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW2ZpbGVQYXRoXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiBhbnkgcGF0aCBzZXBhcmF0b3JzLCByZXR1cm4gZW1wdHlcbiAgICAgICAgaWYgKHRvb2wuaW5jbHVkZXMocGF0aC5zZXApKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgLy8gYnVpbGQgdGhlIGxpc3Qgb2YgZGlyZWN0b3JpZXNcbiAgICAgICAgLy9cbiAgICAgICAgLy8gTm90ZSwgdGVjaG5pY2FsbHkgXCJ3aGVyZVwiIGNoZWNrcyB0aGUgY3VycmVudCBkaXJlY3Rvcnkgb24gV2luZG93cy4gRnJvbSBhIHRvb2xraXQgcGVyc3BlY3RpdmUsXG4gICAgICAgIC8vIGl0IGZlZWxzIGxpa2Ugd2Ugc2hvdWxkIG5vdCBkbyB0aGlzLiBDaGVja2luZyB0aGUgY3VycmVudCBkaXJlY3Rvcnkgc2VlbXMgbGlrZSBtb3JlIG9mIGEgdXNlXG4gICAgICAgIC8vIGNhc2Ugb2YgYSBzaGVsbCwgYW5kIHRoZSB3aGljaCgpIGZ1bmN0aW9uIGV4cG9zZWQgYnkgdGhlIHRvb2xraXQgc2hvdWxkIHN0cml2ZSBmb3IgY29uc2lzdGVuY3lcbiAgICAgICAgLy8gYWNyb3NzIHBsYXRmb3Jtcy5cbiAgICAgICAgY29uc3QgZGlyZWN0b3JpZXMgPSBbXTtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52LlBBVEgpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcCBvZiBwcm9jZXNzLmVudi5QQVRILnNwbGl0KHBhdGguZGVsaW1pdGVyKSkge1xuICAgICAgICAgICAgICAgIGlmIChwKSB7XG4gICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yaWVzLnB1c2gocCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGZpbmQgYWxsIG1hdGNoZXNcbiAgICAgICAgY29uc3QgbWF0Y2hlcyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGRpcmVjdG9yeSBvZiBkaXJlY3Rvcmllcykge1xuICAgICAgICAgICAgY29uc3QgZmlsZVBhdGggPSB5aWVsZCBpb1V0aWwudHJ5R2V0RXhlY3V0YWJsZVBhdGgocGF0aC5qb2luKGRpcmVjdG9yeSwgdG9vbCksIGV4dGVuc2lvbnMpO1xuICAgICAgICAgICAgaWYgKGZpbGVQYXRoKSB7XG4gICAgICAgICAgICAgICAgbWF0Y2hlcy5wdXNoKGZpbGVQYXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWF0Y2hlcztcbiAgICB9KTtcbn1cbmV4cG9ydHMuZmluZEluUGF0aCA9IGZpbmRJblBhdGg7XG5mdW5jdGlvbiByZWFkQ29weU9wdGlvbnMob3B0aW9ucykge1xuICAgIGNvbnN0IGZvcmNlID0gb3B0aW9ucy5mb3JjZSA9PSBudWxsID8gdHJ1ZSA6IG9wdGlvbnMuZm9yY2U7XG4gICAgY29uc3QgcmVjdXJzaXZlID0gQm9vbGVhbihvcHRpb25zLnJlY3Vyc2l2ZSk7XG4gICAgY29uc3QgY29weVNvdXJjZURpcmVjdG9yeSA9IG9wdGlvbnMuY29weVNvdXJjZURpcmVjdG9yeSA9PSBudWxsXG4gICAgICAgID8gdHJ1ZVxuICAgICAgICA6IEJvb2xlYW4ob3B0aW9ucy5jb3B5U291cmNlRGlyZWN0b3J5KTtcbiAgICByZXR1cm4geyBmb3JjZSwgcmVjdXJzaXZlLCBjb3B5U291cmNlRGlyZWN0b3J5IH07XG59XG5mdW5jdGlvbiBjcERpclJlY3Vyc2l2ZShzb3VyY2VEaXIsIGRlc3REaXIsIGN1cnJlbnREZXB0aCwgZm9yY2UpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAvLyBFbnN1cmUgdGhlcmUgaXMgbm90IGEgcnVuIGF3YXkgcmVjdXJzaXZlIGNvcHlcbiAgICAgICAgaWYgKGN1cnJlbnREZXB0aCA+PSAyNTUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGN1cnJlbnREZXB0aCsrO1xuICAgICAgICB5aWVsZCBta2RpclAoZGVzdERpcik7XG4gICAgICAgIGNvbnN0IGZpbGVzID0geWllbGQgaW9VdGlsLnJlYWRkaXIoc291cmNlRGlyKTtcbiAgICAgICAgZm9yIChjb25zdCBmaWxlTmFtZSBvZiBmaWxlcykge1xuICAgICAgICAgICAgY29uc3Qgc3JjRmlsZSA9IGAke3NvdXJjZURpcn0vJHtmaWxlTmFtZX1gO1xuICAgICAgICAgICAgY29uc3QgZGVzdEZpbGUgPSBgJHtkZXN0RGlyfS8ke2ZpbGVOYW1lfWA7XG4gICAgICAgICAgICBjb25zdCBzcmNGaWxlU3RhdCA9IHlpZWxkIGlvVXRpbC5sc3RhdChzcmNGaWxlKTtcbiAgICAgICAgICAgIGlmIChzcmNGaWxlU3RhdC5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgICAgICAgICAgLy8gUmVjdXJzZVxuICAgICAgICAgICAgICAgIHlpZWxkIGNwRGlyUmVjdXJzaXZlKHNyY0ZpbGUsIGRlc3RGaWxlLCBjdXJyZW50RGVwdGgsIGZvcmNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHlpZWxkIGNvcHlGaWxlKHNyY0ZpbGUsIGRlc3RGaWxlLCBmb3JjZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2hhbmdlIHRoZSBtb2RlIGZvciB0aGUgbmV3bHkgY3JlYXRlZCBkaXJlY3RvcnlcbiAgICAgICAgeWllbGQgaW9VdGlsLmNobW9kKGRlc3REaXIsICh5aWVsZCBpb1V0aWwuc3RhdChzb3VyY2VEaXIpKS5tb2RlKTtcbiAgICB9KTtcbn1cbi8vIEJ1ZmZlcmVkIGZpbGUgY29weVxuZnVuY3Rpb24gY29weUZpbGUoc3JjRmlsZSwgZGVzdEZpbGUsIGZvcmNlKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgaWYgKCh5aWVsZCBpb1V0aWwubHN0YXQoc3JjRmlsZSkpLmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICAgICAgICAgIC8vIHVubGluay9yZS1saW5rIGl0XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHlpZWxkIGlvVXRpbC5sc3RhdChkZXN0RmlsZSk7XG4gICAgICAgICAgICAgICAgeWllbGQgaW9VdGlsLnVubGluayhkZXN0RmlsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIC8vIFRyeSB0byBvdmVycmlkZSBmaWxlIHBlcm1pc3Npb25cbiAgICAgICAgICAgICAgICBpZiAoZS5jb2RlID09PSAnRVBFUk0nKSB7XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIGlvVXRpbC5jaG1vZChkZXN0RmlsZSwgJzA2NjYnKTtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgaW9VdGlsLnVubGluayhkZXN0RmlsZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIG90aGVyIGVycm9ycyA9IGl0IGRvZXNuJ3QgZXhpc3QsIG5vIHdvcmsgdG8gZG9cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIENvcHkgb3ZlciBzeW1saW5rXG4gICAgICAgICAgICBjb25zdCBzeW1saW5rRnVsbCA9IHlpZWxkIGlvVXRpbC5yZWFkbGluayhzcmNGaWxlKTtcbiAgICAgICAgICAgIHlpZWxkIGlvVXRpbC5zeW1saW5rKHN5bWxpbmtGdWxsLCBkZXN0RmlsZSwgaW9VdGlsLklTX1dJTkRPV1MgPyAnanVuY3Rpb24nIDogbnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoISh5aWVsZCBpb1V0aWwuZXhpc3RzKGRlc3RGaWxlKSkgfHwgZm9yY2UpIHtcbiAgICAgICAgICAgIHlpZWxkIGlvVXRpbC5jb3B5RmlsZShzcmNGaWxlLCBkZXN0RmlsZSk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlvLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfSk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmFyZ1N0cmluZ1RvQXJyYXkgPSBleHBvcnRzLlRvb2xSdW5uZXIgPSB2b2lkIDA7XG5jb25zdCBvcyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwib3NcIikpO1xuY29uc3QgZXZlbnRzID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJldmVudHNcIikpO1xuY29uc3QgY2hpbGQgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcImNoaWxkX3Byb2Nlc3NcIikpO1xuY29uc3QgcGF0aCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwicGF0aFwiKSk7XG5jb25zdCBpbyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiQGFjdGlvbnMvaW9cIikpO1xuY29uc3QgaW9VdGlsID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJAYWN0aW9ucy9pby9saWIvaW8tdXRpbFwiKSk7XG5jb25zdCB0aW1lcnNfMSA9IHJlcXVpcmUoXCJ0aW1lcnNcIik7XG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvdW5ib3VuZC1tZXRob2QgKi9cbmNvbnN0IElTX1dJTkRPV1MgPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInO1xuLypcbiAqIENsYXNzIGZvciBydW5uaW5nIGNvbW1hbmQgbGluZSB0b29scy4gSGFuZGxlcyBxdW90aW5nIGFuZCBhcmcgcGFyc2luZyBpbiBhIHBsYXRmb3JtIGFnbm9zdGljIHdheS5cbiAqL1xuY2xhc3MgVG9vbFJ1bm5lciBleHRlbmRzIGV2ZW50cy5FdmVudEVtaXR0ZXIge1xuICAgIGNvbnN0cnVjdG9yKHRvb2xQYXRoLCBhcmdzLCBvcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIGlmICghdG9vbFBhdGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhcmFtZXRlciAndG9vbFBhdGgnIGNhbm5vdCBiZSBudWxsIG9yIGVtcHR5LlwiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRvb2xQYXRoID0gdG9vbFBhdGg7XG4gICAgICAgIHRoaXMuYXJncyA9IGFyZ3MgfHwgW107XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgfVxuICAgIF9kZWJ1ZyhtZXNzYWdlKSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMubGlzdGVuZXJzICYmIHRoaXMub3B0aW9ucy5saXN0ZW5lcnMuZGVidWcpIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5saXN0ZW5lcnMuZGVidWcobWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX2dldENvbW1hbmRTdHJpbmcob3B0aW9ucywgbm9QcmVmaXgpIHtcbiAgICAgICAgY29uc3QgdG9vbFBhdGggPSB0aGlzLl9nZXRTcGF3bkZpbGVOYW1lKCk7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSB0aGlzLl9nZXRTcGF3bkFyZ3Mob3B0aW9ucyk7XG4gICAgICAgIGxldCBjbWQgPSBub1ByZWZpeCA/ICcnIDogJ1tjb21tYW5kXSc7IC8vIG9taXQgcHJlZml4IHdoZW4gcGlwZWQgdG8gYSBzZWNvbmQgdG9vbFxuICAgICAgICBpZiAoSVNfV0lORE9XUykge1xuICAgICAgICAgICAgLy8gV2luZG93cyArIGNtZCBmaWxlXG4gICAgICAgICAgICBpZiAodGhpcy5faXNDbWRGaWxlKCkpIHtcbiAgICAgICAgICAgICAgICBjbWQgKz0gdG9vbFBhdGg7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBhIG9mIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgY21kICs9IGAgJHthfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gV2luZG93cyArIHZlcmJhdGltXG4gICAgICAgICAgICBlbHNlIGlmIChvcHRpb25zLndpbmRvd3NWZXJiYXRpbUFyZ3VtZW50cykge1xuICAgICAgICAgICAgICAgIGNtZCArPSBgXCIke3Rvb2xQYXRofVwiYDtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGEgb2YgYXJncykge1xuICAgICAgICAgICAgICAgICAgICBjbWQgKz0gYCAke2F9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBXaW5kb3dzIChyZWd1bGFyKVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY21kICs9IHRoaXMuX3dpbmRvd3NRdW90ZUNtZEFyZyh0b29sUGF0aCk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBhIG9mIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgY21kICs9IGAgJHt0aGlzLl93aW5kb3dzUXVvdGVDbWRBcmcoYSl9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBPU1gvTGludXggLSB0aGlzIGNhbiBsaWtlbHkgYmUgaW1wcm92ZWQgd2l0aCBzb21lIGZvcm0gb2YgcXVvdGluZy5cbiAgICAgICAgICAgIC8vIGNyZWF0aW5nIHByb2Nlc3NlcyBvbiBVbml4IGlzIGZ1bmRhbWVudGFsbHkgZGlmZmVyZW50IHRoYW4gV2luZG93cy5cbiAgICAgICAgICAgIC8vIG9uIFVuaXgsIGV4ZWN2cCgpIHRha2VzIGFuIGFyZyBhcnJheS5cbiAgICAgICAgICAgIGNtZCArPSB0b29sUGF0aDtcbiAgICAgICAgICAgIGZvciAoY29uc3QgYSBvZiBhcmdzKSB7XG4gICAgICAgICAgICAgICAgY21kICs9IGAgJHthfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNtZDtcbiAgICB9XG4gICAgX3Byb2Nlc3NMaW5lQnVmZmVyKGRhdGEsIHN0ckJ1ZmZlciwgb25MaW5lKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsZXQgcyA9IHN0ckJ1ZmZlciArIGRhdGEudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIGxldCBuID0gcy5pbmRleE9mKG9zLkVPTCk7XG4gICAgICAgICAgICB3aGlsZSAobiA+IC0xKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGluZSA9IHMuc3Vic3RyaW5nKDAsIG4pO1xuICAgICAgICAgICAgICAgIG9uTGluZShsaW5lKTtcbiAgICAgICAgICAgICAgICAvLyB0aGUgcmVzdCBvZiB0aGUgc3RyaW5nIC4uLlxuICAgICAgICAgICAgICAgIHMgPSBzLnN1YnN0cmluZyhuICsgb3MuRU9MLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgbiA9IHMuaW5kZXhPZihvcy5FT0wpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHM7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgLy8gc3RyZWFtaW5nIGxpbmVzIHRvIGNvbnNvbGUgaXMgYmVzdCBlZmZvcnQuICBEb24ndCBmYWlsIGEgYnVpbGQuXG4gICAgICAgICAgICB0aGlzLl9kZWJ1ZyhgZXJyb3IgcHJvY2Vzc2luZyBsaW5lLiBGYWlsZWQgd2l0aCBlcnJvciAke2Vycn1gKTtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgICBfZ2V0U3Bhd25GaWxlTmFtZSgpIHtcbiAgICAgICAgaWYgKElTX1dJTkRPV1MpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9pc0NtZEZpbGUoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcm9jZXNzLmVudlsnQ09NU1BFQyddIHx8ICdjbWQuZXhlJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy50b29sUGF0aDtcbiAgICB9XG4gICAgX2dldFNwYXduQXJncyhvcHRpb25zKSB7XG4gICAgICAgIGlmIChJU19XSU5ET1dTKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5faXNDbWRGaWxlKCkpIHtcbiAgICAgICAgICAgICAgICBsZXQgYXJnbGluZSA9IGAvRCAvUyAvQyBcIiR7dGhpcy5fd2luZG93c1F1b3RlQ21kQXJnKHRoaXMudG9vbFBhdGgpfWA7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBhIG9mIHRoaXMuYXJncykge1xuICAgICAgICAgICAgICAgICAgICBhcmdsaW5lICs9ICcgJztcbiAgICAgICAgICAgICAgICAgICAgYXJnbGluZSArPSBvcHRpb25zLndpbmRvd3NWZXJiYXRpbUFyZ3VtZW50c1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBhXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuX3dpbmRvd3NRdW90ZUNtZEFyZyhhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXJnbGluZSArPSAnXCInO1xuICAgICAgICAgICAgICAgIHJldHVybiBbYXJnbGluZV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuYXJncztcbiAgICB9XG4gICAgX2VuZHNXaXRoKHN0ciwgZW5kKSB7XG4gICAgICAgIHJldHVybiBzdHIuZW5kc1dpdGgoZW5kKTtcbiAgICB9XG4gICAgX2lzQ21kRmlsZSgpIHtcbiAgICAgICAgY29uc3QgdXBwZXJUb29sUGF0aCA9IHRoaXMudG9vbFBhdGgudG9VcHBlckNhc2UoKTtcbiAgICAgICAgcmV0dXJuICh0aGlzLl9lbmRzV2l0aCh1cHBlclRvb2xQYXRoLCAnLkNNRCcpIHx8XG4gICAgICAgICAgICB0aGlzLl9lbmRzV2l0aCh1cHBlclRvb2xQYXRoLCAnLkJBVCcpKTtcbiAgICB9XG4gICAgX3dpbmRvd3NRdW90ZUNtZEFyZyhhcmcpIHtcbiAgICAgICAgLy8gZm9yIC5leGUsIGFwcGx5IHRoZSBub3JtYWwgcXVvdGluZyBydWxlcyB0aGF0IGxpYnV2IGFwcGxpZXNcbiAgICAgICAgaWYgKCF0aGlzLl9pc0NtZEZpbGUoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3V2UXVvdGVDbWRBcmcoYXJnKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBvdGhlcndpc2UgYXBwbHkgcXVvdGluZyBydWxlcyBzcGVjaWZpYyB0byB0aGUgY21kLmV4ZSBjb21tYW5kIGxpbmUgcGFyc2VyLlxuICAgICAgICAvLyB0aGUgbGlidXYgcnVsZXMgYXJlIGdlbmVyaWMgYW5kIGFyZSBub3QgZGVzaWduZWQgc3BlY2lmaWNhbGx5IGZvciBjbWQuZXhlXG4gICAgICAgIC8vIGNvbW1hbmQgbGluZSBwYXJzZXIuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIGZvciBhIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHRoZSBjbWQuZXhlIGNvbW1hbmQgbGluZSBwYXJzZXIsIHJlZmVyIHRvXG4gICAgICAgIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNDA5NDY5OS9ob3ctZG9lcy10aGUtd2luZG93cy1jb21tYW5kLWludGVycHJldGVyLWNtZC1leGUtcGFyc2Utc2NyaXB0cy83OTcwOTEyIzc5NzA5MTJcbiAgICAgICAgLy8gbmVlZCBxdW90ZXMgZm9yIGVtcHR5IGFyZ1xuICAgICAgICBpZiAoIWFyZykge1xuICAgICAgICAgICAgcmV0dXJuICdcIlwiJztcbiAgICAgICAgfVxuICAgICAgICAvLyBkZXRlcm1pbmUgd2hldGhlciB0aGUgYXJnIG5lZWRzIHRvIGJlIHF1b3RlZFxuICAgICAgICBjb25zdCBjbWRTcGVjaWFsQ2hhcnMgPSBbXG4gICAgICAgICAgICAnICcsXG4gICAgICAgICAgICAnXFx0JyxcbiAgICAgICAgICAgICcmJyxcbiAgICAgICAgICAgICcoJyxcbiAgICAgICAgICAgICcpJyxcbiAgICAgICAgICAgICdbJyxcbiAgICAgICAgICAgICddJyxcbiAgICAgICAgICAgICd7JyxcbiAgICAgICAgICAgICd9JyxcbiAgICAgICAgICAgICdeJyxcbiAgICAgICAgICAgICc9JyxcbiAgICAgICAgICAgICc7JyxcbiAgICAgICAgICAgICchJyxcbiAgICAgICAgICAgIFwiJ1wiLFxuICAgICAgICAgICAgJysnLFxuICAgICAgICAgICAgJywnLFxuICAgICAgICAgICAgJ2AnLFxuICAgICAgICAgICAgJ34nLFxuICAgICAgICAgICAgJ3wnLFxuICAgICAgICAgICAgJzwnLFxuICAgICAgICAgICAgJz4nLFxuICAgICAgICAgICAgJ1wiJ1xuICAgICAgICBdO1xuICAgICAgICBsZXQgbmVlZHNRdW90ZXMgPSBmYWxzZTtcbiAgICAgICAgZm9yIChjb25zdCBjaGFyIG9mIGFyZykge1xuICAgICAgICAgICAgaWYgKGNtZFNwZWNpYWxDaGFycy5zb21lKHggPT4geCA9PT0gY2hhcikpIHtcbiAgICAgICAgICAgICAgICBuZWVkc1F1b3RlcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gc2hvcnQtY2lyY3VpdCBpZiBxdW90ZXMgbm90IG5lZWRlZFxuICAgICAgICBpZiAoIW5lZWRzUXVvdGVzKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJnO1xuICAgICAgICB9XG4gICAgICAgIC8vIHRoZSBmb2xsb3dpbmcgcXVvdGluZyBydWxlcyBhcmUgdmVyeSBzaW1pbGFyIHRvIHRoZSBydWxlcyB0aGF0IGJ5IGxpYnV2IGFwcGxpZXMuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIDEpIHdyYXAgdGhlIHN0cmluZyBpbiBxdW90ZXNcbiAgICAgICAgLy9cbiAgICAgICAgLy8gMikgZG91YmxlLXVwIHF1b3RlcyAtIGkuZS4gXCIgPT4gXCJcIlxuICAgICAgICAvL1xuICAgICAgICAvLyAgICB0aGlzIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBsaWJ1diBxdW90aW5nIHJ1bGVzLiBsaWJ1diByZXBsYWNlcyBcIiB3aXRoIFxcXCIsIHdoaWNoIHVuZm9ydHVuYXRlbHlcbiAgICAgICAgLy8gICAgZG9lc24ndCB3b3JrIHdlbGwgd2l0aCBhIGNtZC5leGUgY29tbWFuZCBsaW5lLlxuICAgICAgICAvL1xuICAgICAgICAvLyAgICBub3RlLCByZXBsYWNpbmcgXCIgd2l0aCBcIlwiIGFsc28gd29ya3Mgd2VsbCBpZiB0aGUgYXJnIGlzIHBhc3NlZCB0byBhIGRvd25zdHJlYW0gLk5FVCBjb25zb2xlIGFwcC5cbiAgICAgICAgLy8gICAgZm9yIGV4YW1wbGUsIHRoZSBjb21tYW5kIGxpbmU6XG4gICAgICAgIC8vICAgICAgICAgIGZvby5leGUgXCJteWFyZzpcIlwibXkgdmFsXCJcIlwiXG4gICAgICAgIC8vICAgIGlzIHBhcnNlZCBieSBhIC5ORVQgY29uc29sZSBhcHAgaW50byBhbiBhcmcgYXJyYXk6XG4gICAgICAgIC8vICAgICAgICAgIFsgXCJteWFyZzpcXFwibXkgdmFsXFxcIlwiIF1cbiAgICAgICAgLy8gICAgd2hpY2ggaXMgdGhlIHNhbWUgZW5kIHJlc3VsdCB3aGVuIGFwcGx5aW5nIGxpYnV2IHF1b3RpbmcgcnVsZXMuIGFsdGhvdWdoIHRoZSBhY3R1YWxcbiAgICAgICAgLy8gICAgY29tbWFuZCBsaW5lIGZyb20gbGlidXYgcXVvdGluZyBydWxlcyB3b3VsZCBsb29rIGxpa2U6XG4gICAgICAgIC8vICAgICAgICAgIGZvby5leGUgXCJteWFyZzpcXFwibXkgdmFsXFxcIlwiXG4gICAgICAgIC8vXG4gICAgICAgIC8vIDMpIGRvdWJsZS11cCBzbGFzaGVzIHRoYXQgcHJlY2VkZSBhIHF1b3RlLFxuICAgICAgICAvLyAgICBlLmcuICBoZWxsbyBcXHdvcmxkICAgID0+IFwiaGVsbG8gXFx3b3JsZFwiXG4gICAgICAgIC8vICAgICAgICAgIGhlbGxvXFxcIndvcmxkICAgID0+IFwiaGVsbG9cXFxcXCJcIndvcmxkXCJcbiAgICAgICAgLy8gICAgICAgICAgaGVsbG9cXFxcXCJ3b3JsZCAgID0+IFwiaGVsbG9cXFxcXFxcXFwiXCJ3b3JsZFwiXG4gICAgICAgIC8vICAgICAgICAgIGhlbGxvIHdvcmxkXFwgICAgPT4gXCJoZWxsbyB3b3JsZFxcXFxcIlxuICAgICAgICAvL1xuICAgICAgICAvLyAgICB0ZWNobmljYWxseSB0aGlzIGlzIG5vdCByZXF1aXJlZCBmb3IgYSBjbWQuZXhlIGNvbW1hbmQgbGluZSwgb3IgdGhlIGJhdGNoIGFyZ3VtZW50IHBhcnNlci5cbiAgICAgICAgLy8gICAgdGhlIHJlYXNvbnMgZm9yIGluY2x1ZGluZyB0aGlzIGFzIGEgLmNtZCBxdW90aW5nIHJ1bGUgYXJlOlxuICAgICAgICAvL1xuICAgICAgICAvLyAgICBhKSB0aGlzIGlzIG9wdGltaXplZCBmb3IgdGhlIHNjZW5hcmlvIHdoZXJlIHRoZSBhcmd1bWVudCBpcyBwYXNzZWQgZnJvbSB0aGUgLmNtZCBmaWxlIHRvIGFuXG4gICAgICAgIC8vICAgICAgIGV4dGVybmFsIHByb2dyYW0uIG1hbnkgcHJvZ3JhbXMgKGUuZy4gLk5FVCBjb25zb2xlIGFwcHMpIHJlbHkgb24gdGhlIHNsYXNoLWRvdWJsaW5nIHJ1bGUuXG4gICAgICAgIC8vXG4gICAgICAgIC8vICAgIGIpIGl0J3Mgd2hhdCB3ZSd2ZSBiZWVuIGRvaW5nIHByZXZpb3VzbHkgKGJ5IGRlZmVycmluZyB0byBub2RlIGRlZmF1bHQgYmVoYXZpb3IpIGFuZCB3ZVxuICAgICAgICAvLyAgICAgICBoYXZlbid0IGhlYXJkIGFueSBjb21wbGFpbnRzIGFib3V0IHRoYXQgYXNwZWN0LlxuICAgICAgICAvL1xuICAgICAgICAvLyBub3RlLCBhIHdlYWtuZXNzIG9mIHRoZSBxdW90aW5nIHJ1bGVzIGNob3NlbiBoZXJlLCBpcyB0aGF0ICUgaXMgbm90IGVzY2FwZWQuIGluIGZhY3QsICUgY2Fubm90IGJlXG4gICAgICAgIC8vIGVzY2FwZWQgd2hlbiB1c2VkIG9uIHRoZSBjb21tYW5kIGxpbmUgZGlyZWN0bHkgLSBldmVuIHRob3VnaCB3aXRoaW4gYSAuY21kIGZpbGUgJSBjYW4gYmUgZXNjYXBlZFxuICAgICAgICAvLyBieSB1c2luZyAlJS5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gdGhlIHNhdmluZyBncmFjZSBpcywgb24gdGhlIGNvbW1hbmQgbGluZSwgJXZhciUgaXMgbGVmdCBhcy1pcyBpZiB2YXIgaXMgbm90IGRlZmluZWQuIHRoaXMgY29udHJhc3RzXG4gICAgICAgIC8vIHRoZSBsaW5lIHBhcnNpbmcgcnVsZXMgd2l0aGluIGEgLmNtZCBmaWxlLCB3aGVyZSBpZiB2YXIgaXMgbm90IGRlZmluZWQgaXQgaXMgcmVwbGFjZWQgd2l0aCBub3RoaW5nLlxuICAgICAgICAvL1xuICAgICAgICAvLyBvbmUgb3B0aW9uIHRoYXQgd2FzIGV4cGxvcmVkIHdhcyByZXBsYWNpbmcgJSB3aXRoIF4lIC0gaS5lLiAldmFyJSA9PiBeJXZhcl4lLiB0aGlzIGhhY2sgd291bGRcbiAgICAgICAgLy8gb2Z0ZW4gd29yaywgc2luY2UgaXQgaXMgdW5saWtlbHkgdGhhdCB2YXJeIHdvdWxkIGV4aXN0LCBhbmQgdGhlIF4gY2hhcmFjdGVyIGlzIHJlbW92ZWQgd2hlbiB0aGVcbiAgICAgICAgLy8gdmFyaWFibGUgaXMgdXNlZC4gdGhlIHByb2JsZW0sIGhvd2V2ZXIsIGlzIHRoYXQgXiBpcyBub3QgcmVtb3ZlZCB3aGVuICUqIGlzIHVzZWQgdG8gcGFzcyB0aGUgYXJnc1xuICAgICAgICAvLyB0byBhbiBleHRlcm5hbCBwcm9ncmFtLlxuICAgICAgICAvL1xuICAgICAgICAvLyBhbiB1bmV4cGxvcmVkIHBvdGVudGlhbCBzb2x1dGlvbiBmb3IgdGhlICUgZXNjYXBpbmcgcHJvYmxlbSwgaXMgdG8gY3JlYXRlIGEgd3JhcHBlciAuY21kIGZpbGUuXG4gICAgICAgIC8vICUgY2FuIGJlIGVzY2FwZWQgd2l0aGluIGEgLmNtZCBmaWxlLlxuICAgICAgICBsZXQgcmV2ZXJzZSA9ICdcIic7XG4gICAgICAgIGxldCBxdW90ZUhpdCA9IHRydWU7XG4gICAgICAgIGZvciAobGV0IGkgPSBhcmcubGVuZ3RoOyBpID4gMDsgaS0tKSB7XG4gICAgICAgICAgICAvLyB3YWxrIHRoZSBzdHJpbmcgaW4gcmV2ZXJzZVxuICAgICAgICAgICAgcmV2ZXJzZSArPSBhcmdbaSAtIDFdO1xuICAgICAgICAgICAgaWYgKHF1b3RlSGl0ICYmIGFyZ1tpIC0gMV0gPT09ICdcXFxcJykge1xuICAgICAgICAgICAgICAgIHJldmVyc2UgKz0gJ1xcXFwnOyAvLyBkb3VibGUgdGhlIHNsYXNoXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChhcmdbaSAtIDFdID09PSAnXCInKSB7XG4gICAgICAgICAgICAgICAgcXVvdGVIaXQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldmVyc2UgKz0gJ1wiJzsgLy8gZG91YmxlIHRoZSBxdW90ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcXVvdGVIaXQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXZlcnNlICs9ICdcIic7XG4gICAgICAgIHJldHVybiByZXZlcnNlXG4gICAgICAgICAgICAuc3BsaXQoJycpXG4gICAgICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgICAgICAuam9pbignJyk7XG4gICAgfVxuICAgIF91dlF1b3RlQ21kQXJnKGFyZykge1xuICAgICAgICAvLyBUb29sIHJ1bm5lciB3cmFwcyBjaGlsZF9wcm9jZXNzLnNwYXduKCkgYW5kIG5lZWRzIHRvIGFwcGx5IHRoZSBzYW1lIHF1b3RpbmcgYXNcbiAgICAgICAgLy8gTm9kZSBpbiBjZXJ0YWluIGNhc2VzIHdoZXJlIHRoZSB1bmRvY3VtZW50ZWQgc3Bhd24gb3B0aW9uIHdpbmRvd3NWZXJiYXRpbUFyZ3VtZW50c1xuICAgICAgICAvLyBpcyB1c2VkLlxuICAgICAgICAvL1xuICAgICAgICAvLyBTaW5jZSB0aGlzIGZ1bmN0aW9uIGlzIGEgcG9ydCBvZiBxdW90ZV9jbWRfYXJnIGZyb20gTm9kZSA0LnggKHRlY2huaWNhbGx5LCBsaWIgVVYsXG4gICAgICAgIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvYmxvYi92NC54L2RlcHMvdXYvc3JjL3dpbi9wcm9jZXNzLmMgZm9yIGRldGFpbHMpLFxuICAgICAgICAvLyBwYXN0aW5nIGNvcHlyaWdodCBub3RpY2UgZnJvbSBOb2RlIHdpdGhpbiB0aGlzIGZ1bmN0aW9uOlxuICAgICAgICAvL1xuICAgICAgICAvLyAgICAgIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICAgICAgICAvL1xuICAgICAgICAvLyAgICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiAgICAgICAgLy8gICAgICBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0b1xuICAgICAgICAvLyAgICAgIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlXG4gICAgICAgIC8vICAgICAgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yXG4gICAgICAgIC8vICAgICAgc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiAgICAgICAgLy8gICAgICBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICAgICAgICAvL1xuICAgICAgICAvLyAgICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4gICAgICAgIC8vICAgICAgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gICAgICAgIC8vXG4gICAgICAgIC8vICAgICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICAgICAgICAvLyAgICAgIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICAgICAgICAvLyAgICAgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICAgICAgICAvLyAgICAgIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAgICAgICAgLy8gICAgICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lOR1xuICAgICAgICAvLyAgICAgIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1NcbiAgICAgICAgLy8gICAgICBJTiBUSEUgU09GVFdBUkUuXG4gICAgICAgIGlmICghYXJnKSB7XG4gICAgICAgICAgICAvLyBOZWVkIGRvdWJsZSBxdW90YXRpb24gZm9yIGVtcHR5IGFyZ3VtZW50XG4gICAgICAgICAgICByZXR1cm4gJ1wiXCInO1xuICAgICAgICB9XG4gICAgICAgIGlmICghYXJnLmluY2x1ZGVzKCcgJykgJiYgIWFyZy5pbmNsdWRlcygnXFx0JykgJiYgIWFyZy5pbmNsdWRlcygnXCInKSkge1xuICAgICAgICAgICAgLy8gTm8gcXVvdGF0aW9uIG5lZWRlZFxuICAgICAgICAgICAgcmV0dXJuIGFyZztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWFyZy5pbmNsdWRlcygnXCInKSAmJiAhYXJnLmluY2x1ZGVzKCdcXFxcJykpIHtcbiAgICAgICAgICAgIC8vIE5vIGVtYmVkZGVkIGRvdWJsZSBxdW90ZXMgb3IgYmFja3NsYXNoZXMsIHNvIEkgY2FuIGp1c3Qgd3JhcFxuICAgICAgICAgICAgLy8gcXVvdGUgbWFya3MgYXJvdW5kIHRoZSB3aG9sZSB0aGluZy5cbiAgICAgICAgICAgIHJldHVybiBgXCIke2FyZ31cImA7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRXhwZWN0ZWQgaW5wdXQvb3V0cHV0OlxuICAgICAgICAvLyAgIGlucHV0IDogaGVsbG9cIndvcmxkXG4gICAgICAgIC8vICAgb3V0cHV0OiBcImhlbGxvXFxcIndvcmxkXCJcbiAgICAgICAgLy8gICBpbnB1dCA6IGhlbGxvXCJcIndvcmxkXG4gICAgICAgIC8vICAgb3V0cHV0OiBcImhlbGxvXFxcIlxcXCJ3b3JsZFwiXG4gICAgICAgIC8vICAgaW5wdXQgOiBoZWxsb1xcd29ybGRcbiAgICAgICAgLy8gICBvdXRwdXQ6IGhlbGxvXFx3b3JsZFxuICAgICAgICAvLyAgIGlucHV0IDogaGVsbG9cXFxcd29ybGRcbiAgICAgICAgLy8gICBvdXRwdXQ6IGhlbGxvXFxcXHdvcmxkXG4gICAgICAgIC8vICAgaW5wdXQgOiBoZWxsb1xcXCJ3b3JsZFxuICAgICAgICAvLyAgIG91dHB1dDogXCJoZWxsb1xcXFxcXFwid29ybGRcIlxuICAgICAgICAvLyAgIGlucHV0IDogaGVsbG9cXFxcXCJ3b3JsZFxuICAgICAgICAvLyAgIG91dHB1dDogXCJoZWxsb1xcXFxcXFxcXFxcIndvcmxkXCJcbiAgICAgICAgLy8gICBpbnB1dCA6IGhlbGxvIHdvcmxkXFxcbiAgICAgICAgLy8gICBvdXRwdXQ6IFwiaGVsbG8gd29ybGRcXFxcXCIgLSBub3RlIHRoZSBjb21tZW50IGluIGxpYnV2IGFjdHVhbGx5IHJlYWRzIFwiaGVsbG8gd29ybGRcXFwiXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXQgaXQgYXBwZWFycyB0aGUgY29tbWVudCBpcyB3cm9uZywgaXQgc2hvdWxkIGJlIFwiaGVsbG8gd29ybGRcXFxcXCJcbiAgICAgICAgbGV0IHJldmVyc2UgPSAnXCInO1xuICAgICAgICBsZXQgcXVvdGVIaXQgPSB0cnVlO1xuICAgICAgICBmb3IgKGxldCBpID0gYXJnLmxlbmd0aDsgaSA+IDA7IGktLSkge1xuICAgICAgICAgICAgLy8gd2FsayB0aGUgc3RyaW5nIGluIHJldmVyc2VcbiAgICAgICAgICAgIHJldmVyc2UgKz0gYXJnW2kgLSAxXTtcbiAgICAgICAgICAgIGlmIChxdW90ZUhpdCAmJiBhcmdbaSAtIDFdID09PSAnXFxcXCcpIHtcbiAgICAgICAgICAgICAgICByZXZlcnNlICs9ICdcXFxcJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGFyZ1tpIC0gMV0gPT09ICdcIicpIHtcbiAgICAgICAgICAgICAgICBxdW90ZUhpdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV2ZXJzZSArPSAnXFxcXCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBxdW90ZUhpdCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldmVyc2UgKz0gJ1wiJztcbiAgICAgICAgcmV0dXJuIHJldmVyc2VcbiAgICAgICAgICAgIC5zcGxpdCgnJylcbiAgICAgICAgICAgIC5yZXZlcnNlKClcbiAgICAgICAgICAgIC5qb2luKCcnKTtcbiAgICB9XG4gICAgX2Nsb25lRXhlY09wdGlvbnMob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgICAgICAgY3dkOiBvcHRpb25zLmN3ZCB8fCBwcm9jZXNzLmN3ZCgpLFxuICAgICAgICAgICAgZW52OiBvcHRpb25zLmVudiB8fCBwcm9jZXNzLmVudixcbiAgICAgICAgICAgIHNpbGVudDogb3B0aW9ucy5zaWxlbnQgfHwgZmFsc2UsXG4gICAgICAgICAgICB3aW5kb3dzVmVyYmF0aW1Bcmd1bWVudHM6IG9wdGlvbnMud2luZG93c1ZlcmJhdGltQXJndW1lbnRzIHx8IGZhbHNlLFxuICAgICAgICAgICAgZmFpbE9uU3RkRXJyOiBvcHRpb25zLmZhaWxPblN0ZEVyciB8fCBmYWxzZSxcbiAgICAgICAgICAgIGlnbm9yZVJldHVybkNvZGU6IG9wdGlvbnMuaWdub3JlUmV0dXJuQ29kZSB8fCBmYWxzZSxcbiAgICAgICAgICAgIGRlbGF5OiBvcHRpb25zLmRlbGF5IHx8IDEwMDAwXG4gICAgICAgIH07XG4gICAgICAgIHJlc3VsdC5vdXRTdHJlYW0gPSBvcHRpb25zLm91dFN0cmVhbSB8fCBwcm9jZXNzLnN0ZG91dDtcbiAgICAgICAgcmVzdWx0LmVyclN0cmVhbSA9IG9wdGlvbnMuZXJyU3RyZWFtIHx8IHByb2Nlc3Muc3RkZXJyO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBfZ2V0U3Bhd25PcHRpb25zKG9wdGlvbnMsIHRvb2xQYXRoKSB7XG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgICAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICAgICAgcmVzdWx0LmN3ZCA9IG9wdGlvbnMuY3dkO1xuICAgICAgICByZXN1bHQuZW52ID0gb3B0aW9ucy5lbnY7XG4gICAgICAgIHJlc3VsdFsnd2luZG93c1ZlcmJhdGltQXJndW1lbnRzJ10gPVxuICAgICAgICAgICAgb3B0aW9ucy53aW5kb3dzVmVyYmF0aW1Bcmd1bWVudHMgfHwgdGhpcy5faXNDbWRGaWxlKCk7XG4gICAgICAgIGlmIChvcHRpb25zLndpbmRvd3NWZXJiYXRpbUFyZ3VtZW50cykge1xuICAgICAgICAgICAgcmVzdWx0LmFyZ3YwID0gYFwiJHt0b29sUGF0aH1cImA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRXhlYyBhIHRvb2wuXG4gICAgICogT3V0cHV0IHdpbGwgYmUgc3RyZWFtZWQgdG8gdGhlIGxpdmUgY29uc29sZS5cbiAgICAgKiBSZXR1cm5zIHByb21pc2Ugd2l0aCByZXR1cm4gY29kZVxuICAgICAqXG4gICAgICogQHBhcmFtICAgICB0b29sICAgICBwYXRoIHRvIHRvb2wgdG8gZXhlY1xuICAgICAqIEBwYXJhbSAgICAgb3B0aW9ucyAgb3B0aW9uYWwgZXhlYyBvcHRpb25zLiAgU2VlIEV4ZWNPcHRpb25zXG4gICAgICogQHJldHVybnMgICBudW1iZXJcbiAgICAgKi9cbiAgICBleGVjKCkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgLy8gcm9vdCB0aGUgdG9vbCBwYXRoIGlmIGl0IGlzIHVucm9vdGVkIGFuZCBjb250YWlucyByZWxhdGl2ZSBwYXRoaW5nXG4gICAgICAgICAgICBpZiAoIWlvVXRpbC5pc1Jvb3RlZCh0aGlzLnRvb2xQYXRoKSAmJlxuICAgICAgICAgICAgICAgICh0aGlzLnRvb2xQYXRoLmluY2x1ZGVzKCcvJykgfHxcbiAgICAgICAgICAgICAgICAgICAgKElTX1dJTkRPV1MgJiYgdGhpcy50b29sUGF0aC5pbmNsdWRlcygnXFxcXCcpKSkpIHtcbiAgICAgICAgICAgICAgICAvLyBwcmVmZXIgb3B0aW9ucy5jd2QgaWYgaXQgaXMgc3BlY2lmaWVkLCBob3dldmVyIG9wdGlvbnMuY3dkIG1heSBhbHNvIG5lZWQgdG8gYmUgcm9vdGVkXG4gICAgICAgICAgICAgICAgdGhpcy50b29sUGF0aCA9IHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCB0aGlzLm9wdGlvbnMuY3dkIHx8IHByb2Nlc3MuY3dkKCksIHRoaXMudG9vbFBhdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgdGhlIHRvb2wgaXMgb25seSBhIGZpbGUgbmFtZSwgdGhlbiByZXNvbHZlIGl0IGZyb20gdGhlIFBBVEhcbiAgICAgICAgICAgIC8vIG90aGVyd2lzZSB2ZXJpZnkgaXQgZXhpc3RzIChhZGQgZXh0ZW5zaW9uIG9uIFdpbmRvd3MgaWYgbmVjZXNzYXJ5KVxuICAgICAgICAgICAgdGhpcy50b29sUGF0aCA9IHlpZWxkIGlvLndoaWNoKHRoaXMudG9vbFBhdGgsIHRydWUpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kZWJ1ZyhgZXhlYyB0b29sOiAke3RoaXMudG9vbFBhdGh9YCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGVidWcoJ2FyZ3VtZW50czonKTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGFyZyBvZiB0aGlzLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVidWcoYCAgICR7YXJnfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25zTm9uTnVsbCA9IHRoaXMuX2Nsb25lRXhlY09wdGlvbnModGhpcy5vcHRpb25zKTtcbiAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnNOb25OdWxsLnNpbGVudCAmJiBvcHRpb25zTm9uTnVsbC5vdXRTdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uc05vbk51bGwub3V0U3RyZWFtLndyaXRlKHRoaXMuX2dldENvbW1hbmRTdHJpbmcob3B0aW9uc05vbk51bGwpICsgb3MuRU9MKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhdGUgPSBuZXcgRXhlY1N0YXRlKG9wdGlvbnNOb25OdWxsLCB0aGlzLnRvb2xQYXRoKTtcbiAgICAgICAgICAgICAgICBzdGF0ZS5vbignZGVidWcnLCAobWVzc2FnZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWJ1ZyhtZXNzYWdlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmN3ZCAmJiAhKHlpZWxkIGlvVXRpbC5leGlzdHModGhpcy5vcHRpb25zLmN3ZCkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yKGBUaGUgY3dkOiAke3RoaXMub3B0aW9ucy5jd2R9IGRvZXMgbm90IGV4aXN0IWApKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZU5hbWUgPSB0aGlzLl9nZXRTcGF3bkZpbGVOYW1lKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgY3AgPSBjaGlsZC5zcGF3bihmaWxlTmFtZSwgdGhpcy5fZ2V0U3Bhd25BcmdzKG9wdGlvbnNOb25OdWxsKSwgdGhpcy5fZ2V0U3Bhd25PcHRpb25zKHRoaXMub3B0aW9ucywgZmlsZU5hbWUpKTtcbiAgICAgICAgICAgICAgICBsZXQgc3RkYnVmZmVyID0gJyc7XG4gICAgICAgICAgICAgICAgaWYgKGNwLnN0ZG91dCkge1xuICAgICAgICAgICAgICAgICAgICBjcC5zdGRvdXQub24oJ2RhdGEnLCAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5saXN0ZW5lcnMgJiYgdGhpcy5vcHRpb25zLmxpc3RlbmVycy5zdGRvdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMubGlzdGVuZXJzLnN0ZG91dChkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9uc05vbk51bGwuc2lsZW50ICYmIG9wdGlvbnNOb25OdWxsLm91dFN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNOb25OdWxsLm91dFN0cmVhbS53cml0ZShkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGJ1ZmZlciA9IHRoaXMuX3Byb2Nlc3NMaW5lQnVmZmVyKGRhdGEsIHN0ZGJ1ZmZlciwgKGxpbmUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxpc3RlbmVycyAmJiB0aGlzLm9wdGlvbnMubGlzdGVuZXJzLnN0ZGxpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmxpc3RlbmVycy5zdGRsaW5lKGxpbmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IGVycmJ1ZmZlciA9ICcnO1xuICAgICAgICAgICAgICAgIGlmIChjcC5zdGRlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY3Auc3RkZXJyLm9uKCdkYXRhJywgKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnByb2Nlc3NTdGRlcnIgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5saXN0ZW5lcnMgJiYgdGhpcy5vcHRpb25zLmxpc3RlbmVycy5zdGRlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMubGlzdGVuZXJzLnN0ZGVycihkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9uc05vbk51bGwuc2lsZW50ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uc05vbk51bGwuZXJyU3RyZWFtICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uc05vbk51bGwub3V0U3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcyA9IG9wdGlvbnNOb25OdWxsLmZhaWxPblN0ZEVyclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG9wdGlvbnNOb25OdWxsLmVyclN0cmVhbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG9wdGlvbnNOb25OdWxsLm91dFN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLndyaXRlKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyYnVmZmVyID0gdGhpcy5fcHJvY2Vzc0xpbmVCdWZmZXIoZGF0YSwgZXJyYnVmZmVyLCAobGluZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMubGlzdGVuZXJzICYmIHRoaXMub3B0aW9ucy5saXN0ZW5lcnMuZXJybGluZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMubGlzdGVuZXJzLmVycmxpbmUobGluZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjcC5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLnByb2Nlc3NFcnJvciA9IGVyci5tZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5wcm9jZXNzRXhpdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUucHJvY2Vzc0Nsb3NlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLkNoZWNrQ29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjcC5vbignZXhpdCcsIChjb2RlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLnByb2Nlc3NFeGl0Q29kZSA9IGNvZGU7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLnByb2Nlc3NFeGl0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWJ1ZyhgRXhpdCBjb2RlICR7Y29kZX0gcmVjZWl2ZWQgZnJvbSB0b29sICcke3RoaXMudG9vbFBhdGh9J2ApO1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5DaGVja0NvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY3Aub24oJ2Nsb3NlJywgKGNvZGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUucHJvY2Vzc0V4aXRDb2RlID0gY29kZTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUucHJvY2Vzc0V4aXRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLnByb2Nlc3NDbG9zZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWJ1ZyhgU1RESU8gc3RyZWFtcyBoYXZlIGNsb3NlZCBmb3IgdG9vbCAnJHt0aGlzLnRvb2xQYXRofSdgKTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuQ2hlY2tDb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHN0YXRlLm9uKCdkb25lJywgKGVycm9yLCBleGl0Q29kZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3RkYnVmZmVyLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnc3RkbGluZScsIHN0ZGJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycmJ1ZmZlci5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2VycmxpbmUnLCBlcnJidWZmZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNwLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGV4aXRDb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjcC5zdGRpbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjaGlsZCBwcm9jZXNzIG1pc3Npbmcgc3RkaW4nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjcC5zdGRpbi5lbmQodGhpcy5vcHRpb25zLmlucHV0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuVG9vbFJ1bm5lciA9IFRvb2xSdW5uZXI7XG4vKipcbiAqIENvbnZlcnQgYW4gYXJnIHN0cmluZyB0byBhbiBhcnJheSBvZiBhcmdzLiBIYW5kbGVzIGVzY2FwaW5nXG4gKlxuICogQHBhcmFtICAgIGFyZ1N0cmluZyAgIHN0cmluZyBvZiBhcmd1bWVudHNcbiAqIEByZXR1cm5zICBzdHJpbmdbXSAgICBhcnJheSBvZiBhcmd1bWVudHNcbiAqL1xuZnVuY3Rpb24gYXJnU3RyaW5nVG9BcnJheShhcmdTdHJpbmcpIHtcbiAgICBjb25zdCBhcmdzID0gW107XG4gICAgbGV0IGluUXVvdGVzID0gZmFsc2U7XG4gICAgbGV0IGVzY2FwZWQgPSBmYWxzZTtcbiAgICBsZXQgYXJnID0gJyc7XG4gICAgZnVuY3Rpb24gYXBwZW5kKGMpIHtcbiAgICAgICAgLy8gd2Ugb25seSBlc2NhcGUgZG91YmxlIHF1b3Rlcy5cbiAgICAgICAgaWYgKGVzY2FwZWQgJiYgYyAhPT0gJ1wiJykge1xuICAgICAgICAgICAgYXJnICs9ICdcXFxcJztcbiAgICAgICAgfVxuICAgICAgICBhcmcgKz0gYztcbiAgICAgICAgZXNjYXBlZCA9IGZhbHNlO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ1N0cmluZy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBjID0gYXJnU3RyaW5nLmNoYXJBdChpKTtcbiAgICAgICAgaWYgKGMgPT09ICdcIicpIHtcbiAgICAgICAgICAgIGlmICghZXNjYXBlZCkge1xuICAgICAgICAgICAgICAgIGluUXVvdGVzID0gIWluUXVvdGVzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYXBwZW5kKGMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGMgPT09ICdcXFxcJyAmJiBlc2NhcGVkKSB7XG4gICAgICAgICAgICBhcHBlbmQoYyk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYyA9PT0gJ1xcXFwnICYmIGluUXVvdGVzKSB7XG4gICAgICAgICAgICBlc2NhcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjID09PSAnICcgJiYgIWluUXVvdGVzKSB7XG4gICAgICAgICAgICBpZiAoYXJnLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBhcmdzLnB1c2goYXJnKTtcbiAgICAgICAgICAgICAgICBhcmcgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGFwcGVuZChjKTtcbiAgICB9XG4gICAgaWYgKGFyZy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGFyZ3MucHVzaChhcmcudHJpbSgpKTtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5leHBvcnRzLmFyZ1N0cmluZ1RvQXJyYXkgPSBhcmdTdHJpbmdUb0FycmF5O1xuY2xhc3MgRXhlY1N0YXRlIGV4dGVuZHMgZXZlbnRzLkV2ZW50RW1pdHRlciB7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucywgdG9vbFBhdGgpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5wcm9jZXNzQ2xvc2VkID0gZmFsc2U7IC8vIHRyYWNrcyB3aGV0aGVyIHRoZSBwcm9jZXNzIGhhcyBleGl0ZWQgYW5kIHN0ZGlvIGlzIGNsb3NlZFxuICAgICAgICB0aGlzLnByb2Nlc3NFcnJvciA9ICcnO1xuICAgICAgICB0aGlzLnByb2Nlc3NFeGl0Q29kZSA9IDA7XG4gICAgICAgIHRoaXMucHJvY2Vzc0V4aXRlZCA9IGZhbHNlOyAvLyB0cmFja3Mgd2hldGhlciB0aGUgcHJvY2VzcyBoYXMgZXhpdGVkXG4gICAgICAgIHRoaXMucHJvY2Vzc1N0ZGVyciA9IGZhbHNlOyAvLyB0cmFja3Mgd2hldGhlciBzdGRlcnIgd2FzIHdyaXR0ZW4gdG9cbiAgICAgICAgdGhpcy5kZWxheSA9IDEwMDAwOyAvLyAxMCBzZWNvbmRzXG4gICAgICAgIHRoaXMuZG9uZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnRpbWVvdXQgPSBudWxsO1xuICAgICAgICBpZiAoIXRvb2xQYXRoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Rvb2xQYXRoIG11c3Qgbm90IGJlIGVtcHR5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgdGhpcy50b29sUGF0aCA9IHRvb2xQYXRoO1xuICAgICAgICBpZiAob3B0aW9ucy5kZWxheSkge1xuICAgICAgICAgICAgdGhpcy5kZWxheSA9IG9wdGlvbnMuZGVsYXk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgQ2hlY2tDb21wbGV0ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnByb2Nlc3NDbG9zZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldFJlc3VsdCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMucHJvY2Vzc0V4aXRlZCkge1xuICAgICAgICAgICAgdGhpcy50aW1lb3V0ID0gdGltZXJzXzEuc2V0VGltZW91dChFeGVjU3RhdGUuSGFuZGxlVGltZW91dCwgdGhpcy5kZWxheSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX2RlYnVnKG1lc3NhZ2UpIHtcbiAgICAgICAgdGhpcy5lbWl0KCdkZWJ1ZycsIG1lc3NhZ2UpO1xuICAgIH1cbiAgICBfc2V0UmVzdWx0KCkge1xuICAgICAgICAvLyBkZXRlcm1pbmUgd2hldGhlciB0aGVyZSBpcyBhbiBlcnJvclxuICAgICAgICBsZXQgZXJyb3I7XG4gICAgICAgIGlmICh0aGlzLnByb2Nlc3NFeGl0ZWQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByb2Nlc3NFcnJvcikge1xuICAgICAgICAgICAgICAgIGVycm9yID0gbmV3IEVycm9yKGBUaGVyZSB3YXMgYW4gZXJyb3Igd2hlbiBhdHRlbXB0aW5nIHRvIGV4ZWN1dGUgdGhlIHByb2Nlc3MgJyR7dGhpcy50b29sUGF0aH0nLiBUaGlzIG1heSBpbmRpY2F0ZSB0aGUgcHJvY2VzcyBmYWlsZWQgdG8gc3RhcnQuIEVycm9yOiAke3RoaXMucHJvY2Vzc0Vycm9yfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5wcm9jZXNzRXhpdENvZGUgIT09IDAgJiYgIXRoaXMub3B0aW9ucy5pZ25vcmVSZXR1cm5Db2RlKSB7XG4gICAgICAgICAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoYFRoZSBwcm9jZXNzICcke3RoaXMudG9vbFBhdGh9JyBmYWlsZWQgd2l0aCBleGl0IGNvZGUgJHt0aGlzLnByb2Nlc3NFeGl0Q29kZX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMucHJvY2Vzc1N0ZGVyciAmJiB0aGlzLm9wdGlvbnMuZmFpbE9uU3RkRXJyKSB7XG4gICAgICAgICAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoYFRoZSBwcm9jZXNzICcke3RoaXMudG9vbFBhdGh9JyBmYWlsZWQgYmVjYXVzZSBvbmUgb3IgbW9yZSBsaW5lcyB3ZXJlIHdyaXR0ZW4gdG8gdGhlIFNUREVSUiBzdHJlYW1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBjbGVhciB0aGUgdGltZW91dFxuICAgICAgICBpZiAodGhpcy50aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTtcbiAgICAgICAgICAgIHRoaXMudGltZW91dCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kb25lID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5lbWl0KCdkb25lJywgZXJyb3IsIHRoaXMucHJvY2Vzc0V4aXRDb2RlKTtcbiAgICB9XG4gICAgc3RhdGljIEhhbmRsZVRpbWVvdXQoc3RhdGUpIHtcbiAgICAgICAgaWYgKHN0YXRlLmRvbmUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXN0YXRlLnByb2Nlc3NDbG9zZWQgJiYgc3RhdGUucHJvY2Vzc0V4aXRlZCkge1xuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGBUaGUgU1RESU8gc3RyZWFtcyBkaWQgbm90IGNsb3NlIHdpdGhpbiAke3N0YXRlLmRlbGF5IC9cbiAgICAgICAgICAgICAgICAxMDAwfSBzZWNvbmRzIG9mIHRoZSBleGl0IGV2ZW50IGZyb20gcHJvY2VzcyAnJHtzdGF0ZS50b29sUGF0aH0nLiBUaGlzIG1heSBpbmRpY2F0ZSBhIGNoaWxkIHByb2Nlc3MgaW5oZXJpdGVkIHRoZSBTVERJTyBzdHJlYW1zIGFuZCBoYXMgbm90IHlldCBleGl0ZWQuYDtcbiAgICAgICAgICAgIHN0YXRlLl9kZWJ1ZyhtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZS5fc2V0UmVzdWx0KCk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dG9vbHJ1bm5lci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH0pO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRFeGVjT3V0cHV0ID0gZXhwb3J0cy5leGVjID0gdm9pZCAwO1xuY29uc3Qgc3RyaW5nX2RlY29kZXJfMSA9IHJlcXVpcmUoXCJzdHJpbmdfZGVjb2RlclwiKTtcbmNvbnN0IHRyID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL3Rvb2xydW5uZXJcIikpO1xuLyoqXG4gKiBFeGVjIGEgY29tbWFuZC5cbiAqIE91dHB1dCB3aWxsIGJlIHN0cmVhbWVkIHRvIHRoZSBsaXZlIGNvbnNvbGUuXG4gKiBSZXR1cm5zIHByb21pc2Ugd2l0aCByZXR1cm4gY29kZVxuICpcbiAqIEBwYXJhbSAgICAgY29tbWFuZExpbmUgICAgICAgIGNvbW1hbmQgdG8gZXhlY3V0ZSAoY2FuIGluY2x1ZGUgYWRkaXRpb25hbCBhcmdzKS4gTXVzdCBiZSBjb3JyZWN0bHkgZXNjYXBlZC5cbiAqIEBwYXJhbSAgICAgYXJncyAgICAgICAgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50cyBmb3IgdG9vbC4gRXNjYXBpbmcgaXMgaGFuZGxlZCBieSB0aGUgbGliLlxuICogQHBhcmFtICAgICBvcHRpb25zICAgICAgICAgICAgb3B0aW9uYWwgZXhlYyBvcHRpb25zLiAgU2VlIEV4ZWNPcHRpb25zXG4gKiBAcmV0dXJucyAgIFByb21pc2U8bnVtYmVyPiAgICBleGl0IGNvZGVcbiAqL1xuZnVuY3Rpb24gZXhlYyhjb21tYW5kTGluZSwgYXJncywgb3B0aW9ucykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IGNvbW1hbmRBcmdzID0gdHIuYXJnU3RyaW5nVG9BcnJheShjb21tYW5kTGluZSk7XG4gICAgICAgIGlmIChjb21tYW5kQXJncy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUGFyYW1ldGVyICdjb21tYW5kTGluZScgY2Fubm90IGJlIG51bGwgb3IgZW1wdHkuYCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUGF0aCB0byB0b29sIHRvIGV4ZWN1dGUgc2hvdWxkIGJlIGZpcnN0IGFyZ1xuICAgICAgICBjb25zdCB0b29sUGF0aCA9IGNvbW1hbmRBcmdzWzBdO1xuICAgICAgICBhcmdzID0gY29tbWFuZEFyZ3Muc2xpY2UoMSkuY29uY2F0KGFyZ3MgfHwgW10pO1xuICAgICAgICBjb25zdCBydW5uZXIgPSBuZXcgdHIuVG9vbFJ1bm5lcih0b29sUGF0aCwgYXJncywgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBydW5uZXIuZXhlYygpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5leGVjID0gZXhlYztcbi8qKlxuICogRXhlYyBhIGNvbW1hbmQgYW5kIGdldCB0aGUgb3V0cHV0LlxuICogT3V0cHV0IHdpbGwgYmUgc3RyZWFtZWQgdG8gdGhlIGxpdmUgY29uc29sZS5cbiAqIFJldHVybnMgcHJvbWlzZSB3aXRoIHRoZSBleGl0IGNvZGUgYW5kIGNvbGxlY3RlZCBzdGRvdXQgYW5kIHN0ZGVyclxuICpcbiAqIEBwYXJhbSAgICAgY29tbWFuZExpbmUgICAgICAgICAgIGNvbW1hbmQgdG8gZXhlY3V0ZSAoY2FuIGluY2x1ZGUgYWRkaXRpb25hbCBhcmdzKS4gTXVzdCBiZSBjb3JyZWN0bHkgZXNjYXBlZC5cbiAqIEBwYXJhbSAgICAgYXJncyAgICAgICAgICAgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50cyBmb3IgdG9vbC4gRXNjYXBpbmcgaXMgaGFuZGxlZCBieSB0aGUgbGliLlxuICogQHBhcmFtICAgICBvcHRpb25zICAgICAgICAgICAgICAgb3B0aW9uYWwgZXhlYyBvcHRpb25zLiAgU2VlIEV4ZWNPcHRpb25zXG4gKiBAcmV0dXJucyAgIFByb21pc2U8RXhlY091dHB1dD4gICBleGl0IGNvZGUsIHN0ZG91dCwgYW5kIHN0ZGVyclxuICovXG5mdW5jdGlvbiBnZXRFeGVjT3V0cHV0KGNvbW1hbmRMaW5lLCBhcmdzLCBvcHRpb25zKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBsZXQgc3Rkb3V0ID0gJyc7XG4gICAgICAgIGxldCBzdGRlcnIgPSAnJztcbiAgICAgICAgLy9Vc2luZyBzdHJpbmcgZGVjb2RlciBjb3ZlcnMgdGhlIGNhc2Ugd2hlcmUgYSBtdWx0LWJ5dGUgY2hhcmFjdGVyIGlzIHNwbGl0XG4gICAgICAgIGNvbnN0IHN0ZG91dERlY29kZXIgPSBuZXcgc3RyaW5nX2RlY29kZXJfMS5TdHJpbmdEZWNvZGVyKCd1dGY4Jyk7XG4gICAgICAgIGNvbnN0IHN0ZGVyckRlY29kZXIgPSBuZXcgc3RyaW5nX2RlY29kZXJfMS5TdHJpbmdEZWNvZGVyKCd1dGY4Jyk7XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsU3Rkb3V0TGlzdGVuZXIgPSAoX2EgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMubGlzdGVuZXJzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc3Rkb3V0O1xuICAgICAgICBjb25zdCBvcmlnaW5hbFN0ZEVyckxpc3RlbmVyID0gKF9iID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmxpc3RlbmVycykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnN0ZGVycjtcbiAgICAgICAgY29uc3Qgc3RkRXJyTGlzdGVuZXIgPSAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgc3RkZXJyICs9IHN0ZGVyckRlY29kZXIud3JpdGUoZGF0YSk7XG4gICAgICAgICAgICBpZiAob3JpZ2luYWxTdGRFcnJMaXN0ZW5lcikge1xuICAgICAgICAgICAgICAgIG9yaWdpbmFsU3RkRXJyTGlzdGVuZXIoZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHN0ZE91dExpc3RlbmVyID0gKGRhdGEpID0+IHtcbiAgICAgICAgICAgIHN0ZG91dCArPSBzdGRvdXREZWNvZGVyLndyaXRlKGRhdGEpO1xuICAgICAgICAgICAgaWYgKG9yaWdpbmFsU3Rkb3V0TGlzdGVuZXIpIHtcbiAgICAgICAgICAgICAgICBvcmlnaW5hbFN0ZG91dExpc3RlbmVyKGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5saXN0ZW5lcnMpLCB7IHN0ZG91dDogc3RkT3V0TGlzdGVuZXIsIHN0ZGVycjogc3RkRXJyTGlzdGVuZXIgfSk7XG4gICAgICAgIGNvbnN0IGV4aXRDb2RlID0geWllbGQgZXhlYyhjb21tYW5kTGluZSwgYXJncywgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKSwgeyBsaXN0ZW5lcnMgfSkpO1xuICAgICAgICAvL2ZsdXNoIGFueSByZW1haW5pbmcgY2hhcmFjdGVyc1xuICAgICAgICBzdGRvdXQgKz0gc3Rkb3V0RGVjb2Rlci5lbmQoKTtcbiAgICAgICAgc3RkZXJyICs9IHN0ZGVyckRlY29kZXIuZW5kKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBleGl0Q29kZSxcbiAgICAgICAgICAgIHN0ZG91dCxcbiAgICAgICAgICAgIHN0ZGVyclxuICAgICAgICB9O1xuICAgIH0pO1xufVxuZXhwb3J0cy5nZXRFeGVjT3V0cHV0ID0gZ2V0RXhlY091dHB1dDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWV4ZWMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldERldGFpbHMgPSBleHBvcnRzLmlzTGludXggPSBleHBvcnRzLmlzTWFjT1MgPSBleHBvcnRzLmlzV2luZG93cyA9IGV4cG9ydHMuYXJjaCA9IGV4cG9ydHMucGxhdGZvcm0gPSB2b2lkIDA7XG5jb25zdCBvc18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJvc1wiKSk7XG5jb25zdCBleGVjID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJAYWN0aW9ucy9leGVjXCIpKTtcbmNvbnN0IGdldFdpbmRvd3NJbmZvID0gKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgY29uc3QgeyBzdGRvdXQ6IHZlcnNpb24gfSA9IHlpZWxkIGV4ZWMuZ2V0RXhlY091dHB1dCgncG93ZXJzaGVsbCAtY29tbWFuZCBcIihHZXQtQ2ltSW5zdGFuY2UgLUNsYXNzTmFtZSBXaW4zMl9PcGVyYXRpbmdTeXN0ZW0pLlZlcnNpb25cIicsIHVuZGVmaW5lZCwge1xuICAgICAgICBzaWxlbnQ6IHRydWVcbiAgICB9KTtcbiAgICBjb25zdCB7IHN0ZG91dDogbmFtZSB9ID0geWllbGQgZXhlYy5nZXRFeGVjT3V0cHV0KCdwb3dlcnNoZWxsIC1jb21tYW5kIFwiKEdldC1DaW1JbnN0YW5jZSAtQ2xhc3NOYW1lIFdpbjMyX09wZXJhdGluZ1N5c3RlbSkuQ2FwdGlvblwiJywgdW5kZWZpbmVkLCB7XG4gICAgICAgIHNpbGVudDogdHJ1ZVxuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IG5hbWUudHJpbSgpLFxuICAgICAgICB2ZXJzaW9uOiB2ZXJzaW9uLnRyaW0oKVxuICAgIH07XG59KTtcbmNvbnN0IGdldE1hY09zSW5mbyA9ICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgIHZhciBfYSwgX2IsIF9jLCBfZDtcbiAgICBjb25zdCB7IHN0ZG91dCB9ID0geWllbGQgZXhlYy5nZXRFeGVjT3V0cHV0KCdzd192ZXJzJywgdW5kZWZpbmVkLCB7XG4gICAgICAgIHNpbGVudDogdHJ1ZVxuICAgIH0pO1xuICAgIGNvbnN0IHZlcnNpb24gPSAoX2IgPSAoX2EgPSBzdGRvdXQubWF0Y2goL1Byb2R1Y3RWZXJzaW9uOlxccyooLispLykpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVsxXSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XG4gICAgY29uc3QgbmFtZSA9IChfZCA9IChfYyA9IHN0ZG91dC5tYXRjaCgvUHJvZHVjdE5hbWU6XFxzKiguKykvKSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jWzFdKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiAnJztcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lLFxuICAgICAgICB2ZXJzaW9uXG4gICAgfTtcbn0pO1xuY29uc3QgZ2V0TGludXhJbmZvID0gKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgY29uc3QgeyBzdGRvdXQgfSA9IHlpZWxkIGV4ZWMuZ2V0RXhlY091dHB1dCgnbHNiX3JlbGVhc2UnLCBbJy1pJywgJy1yJywgJy1zJ10sIHtcbiAgICAgICAgc2lsZW50OiB0cnVlXG4gICAgfSk7XG4gICAgY29uc3QgW25hbWUsIHZlcnNpb25dID0gc3Rkb3V0LnRyaW0oKS5zcGxpdCgnXFxuJyk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgdmVyc2lvblxuICAgIH07XG59KTtcbmV4cG9ydHMucGxhdGZvcm0gPSBvc18xLmRlZmF1bHQucGxhdGZvcm0oKTtcbmV4cG9ydHMuYXJjaCA9IG9zXzEuZGVmYXVsdC5hcmNoKCk7XG5leHBvcnRzLmlzV2luZG93cyA9IGV4cG9ydHMucGxhdGZvcm0gPT09ICd3aW4zMic7XG5leHBvcnRzLmlzTWFjT1MgPSBleHBvcnRzLnBsYXRmb3JtID09PSAnZGFyd2luJztcbmV4cG9ydHMuaXNMaW51eCA9IGV4cG9ydHMucGxhdGZvcm0gPT09ICdsaW51eCc7XG5mdW5jdGlvbiBnZXREZXRhaWxzKCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sICh5aWVsZCAoZXhwb3J0cy5pc1dpbmRvd3NcbiAgICAgICAgICAgID8gZ2V0V2luZG93c0luZm8oKVxuICAgICAgICAgICAgOiBleHBvcnRzLmlzTWFjT1NcbiAgICAgICAgICAgICAgICA/IGdldE1hY09zSW5mbygpXG4gICAgICAgICAgICAgICAgOiBnZXRMaW51eEluZm8oKSkpKSwgeyBwbGF0Zm9ybTogZXhwb3J0cy5wbGF0Zm9ybSxcbiAgICAgICAgICAgIGFyY2g6IGV4cG9ydHMuYXJjaCxcbiAgICAgICAgICAgIGlzV2luZG93czogZXhwb3J0cy5pc1dpbmRvd3MsXG4gICAgICAgICAgICBpc01hY09TOiBleHBvcnRzLmlzTWFjT1MsXG4gICAgICAgICAgICBpc0xpbnV4OiBleHBvcnRzLmlzTGludXggfSk7XG4gICAgfSk7XG59XG5leHBvcnRzLmdldERldGFpbHMgPSBnZXREZXRhaWxzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGxhdGZvcm0uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnBsYXRmb3JtID0gZXhwb3J0cy50b1BsYXRmb3JtUGF0aCA9IGV4cG9ydHMudG9XaW4zMlBhdGggPSBleHBvcnRzLnRvUG9zaXhQYXRoID0gZXhwb3J0cy5tYXJrZG93blN1bW1hcnkgPSBleHBvcnRzLnN1bW1hcnkgPSBleHBvcnRzLmdldElEVG9rZW4gPSBleHBvcnRzLmdldFN0YXRlID0gZXhwb3J0cy5zYXZlU3RhdGUgPSBleHBvcnRzLmdyb3VwID0gZXhwb3J0cy5lbmRHcm91cCA9IGV4cG9ydHMuc3RhcnRHcm91cCA9IGV4cG9ydHMuaW5mbyA9IGV4cG9ydHMubm90aWNlID0gZXhwb3J0cy53YXJuaW5nID0gZXhwb3J0cy5lcnJvciA9IGV4cG9ydHMuZGVidWcgPSBleHBvcnRzLmlzRGVidWcgPSBleHBvcnRzLnNldEZhaWxlZCA9IGV4cG9ydHMuc2V0Q29tbWFuZEVjaG8gPSBleHBvcnRzLnNldE91dHB1dCA9IGV4cG9ydHMuZ2V0Qm9vbGVhbklucHV0ID0gZXhwb3J0cy5nZXRNdWx0aWxpbmVJbnB1dCA9IGV4cG9ydHMuZ2V0SW5wdXQgPSBleHBvcnRzLmFkZFBhdGggPSBleHBvcnRzLnNldFNlY3JldCA9IGV4cG9ydHMuZXhwb3J0VmFyaWFibGUgPSBleHBvcnRzLkV4aXRDb2RlID0gdm9pZCAwO1xuY29uc3QgY29tbWFuZF8xID0gcmVxdWlyZShcIi4vY29tbWFuZFwiKTtcbmNvbnN0IGZpbGVfY29tbWFuZF8xID0gcmVxdWlyZShcIi4vZmlsZS1jb21tYW5kXCIpO1xuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoXCIuL3V0aWxzXCIpO1xuY29uc3Qgb3MgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIm9zXCIpKTtcbmNvbnN0IHBhdGggPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcInBhdGhcIikpO1xuY29uc3Qgb2lkY191dGlsc18xID0gcmVxdWlyZShcIi4vb2lkYy11dGlsc1wiKTtcbi8qKlxuICogVGhlIGNvZGUgdG8gZXhpdCBhbiBhY3Rpb25cbiAqL1xudmFyIEV4aXRDb2RlO1xuKGZ1bmN0aW9uIChFeGl0Q29kZSkge1xuICAgIC8qKlxuICAgICAqIEEgY29kZSBpbmRpY2F0aW5nIHRoYXQgdGhlIGFjdGlvbiB3YXMgc3VjY2Vzc2Z1bFxuICAgICAqL1xuICAgIEV4aXRDb2RlW0V4aXRDb2RlW1wiU3VjY2Vzc1wiXSA9IDBdID0gXCJTdWNjZXNzXCI7XG4gICAgLyoqXG4gICAgICogQSBjb2RlIGluZGljYXRpbmcgdGhhdCB0aGUgYWN0aW9uIHdhcyBhIGZhaWx1cmVcbiAgICAgKi9cbiAgICBFeGl0Q29kZVtFeGl0Q29kZVtcIkZhaWx1cmVcIl0gPSAxXSA9IFwiRmFpbHVyZVwiO1xufSkoRXhpdENvZGUgfHwgKGV4cG9ydHMuRXhpdENvZGUgPSBFeGl0Q29kZSA9IHt9KSk7XG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBWYXJpYWJsZXNcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8qKlxuICogU2V0cyBlbnYgdmFyaWFibGUgZm9yIHRoaXMgYWN0aW9uIGFuZCBmdXR1cmUgYWN0aW9ucyBpbiB0aGUgam9iXG4gKiBAcGFyYW0gbmFtZSB0aGUgbmFtZSBvZiB0aGUgdmFyaWFibGUgdG8gc2V0XG4gKiBAcGFyYW0gdmFsIHRoZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUuIE5vbi1zdHJpbmcgdmFsdWVzIHdpbGwgYmUgY29udmVydGVkIHRvIGEgc3RyaW5nIHZpYSBKU09OLnN0cmluZ2lmeVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZnVuY3Rpb24gZXhwb3J0VmFyaWFibGUobmFtZSwgdmFsKSB7XG4gICAgY29uc3QgY29udmVydGVkVmFsID0gKDAsIHV0aWxzXzEudG9Db21tYW5kVmFsdWUpKHZhbCk7XG4gICAgcHJvY2Vzcy5lbnZbbmFtZV0gPSBjb252ZXJ0ZWRWYWw7XG4gICAgY29uc3QgZmlsZVBhdGggPSBwcm9jZXNzLmVudlsnR0lUSFVCX0VOViddIHx8ICcnO1xuICAgIGlmIChmaWxlUGF0aCkge1xuICAgICAgICByZXR1cm4gKDAsIGZpbGVfY29tbWFuZF8xLmlzc3VlRmlsZUNvbW1hbmQpKCdFTlYnLCAoMCwgZmlsZV9jb21tYW5kXzEucHJlcGFyZUtleVZhbHVlTWVzc2FnZSkobmFtZSwgdmFsKSk7XG4gICAgfVxuICAgICgwLCBjb21tYW5kXzEuaXNzdWVDb21tYW5kKSgnc2V0LWVudicsIHsgbmFtZSB9LCBjb252ZXJ0ZWRWYWwpO1xufVxuZXhwb3J0cy5leHBvcnRWYXJpYWJsZSA9IGV4cG9ydFZhcmlhYmxlO1xuLyoqXG4gKiBSZWdpc3RlcnMgYSBzZWNyZXQgd2hpY2ggd2lsbCBnZXQgbWFza2VkIGZyb20gbG9nc1xuICogQHBhcmFtIHNlY3JldCB2YWx1ZSBvZiB0aGUgc2VjcmV0XG4gKi9cbmZ1bmN0aW9uIHNldFNlY3JldChzZWNyZXQpIHtcbiAgICAoMCwgY29tbWFuZF8xLmlzc3VlQ29tbWFuZCkoJ2FkZC1tYXNrJywge30sIHNlY3JldCk7XG59XG5leHBvcnRzLnNldFNlY3JldCA9IHNldFNlY3JldDtcbi8qKlxuICogUHJlcGVuZHMgaW5wdXRQYXRoIHRvIHRoZSBQQVRIIChmb3IgdGhpcyBhY3Rpb24gYW5kIGZ1dHVyZSBhY3Rpb25zKVxuICogQHBhcmFtIGlucHV0UGF0aFxuICovXG5mdW5jdGlvbiBhZGRQYXRoKGlucHV0UGF0aCkge1xuICAgIGNvbnN0IGZpbGVQYXRoID0gcHJvY2Vzcy5lbnZbJ0dJVEhVQl9QQVRIJ10gfHwgJyc7XG4gICAgaWYgKGZpbGVQYXRoKSB7XG4gICAgICAgICgwLCBmaWxlX2NvbW1hbmRfMS5pc3N1ZUZpbGVDb21tYW5kKSgnUEFUSCcsIGlucHV0UGF0aCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICAoMCwgY29tbWFuZF8xLmlzc3VlQ29tbWFuZCkoJ2FkZC1wYXRoJywge30sIGlucHV0UGF0aCk7XG4gICAgfVxuICAgIHByb2Nlc3MuZW52WydQQVRIJ10gPSBgJHtpbnB1dFBhdGh9JHtwYXRoLmRlbGltaXRlcn0ke3Byb2Nlc3MuZW52WydQQVRIJ119YDtcbn1cbmV4cG9ydHMuYWRkUGF0aCA9IGFkZFBhdGg7XG4vKipcbiAqIEdldHMgdGhlIHZhbHVlIG9mIGFuIGlucHV0LlxuICogVW5sZXNzIHRyaW1XaGl0ZXNwYWNlIGlzIHNldCB0byBmYWxzZSBpbiBJbnB1dE9wdGlvbnMsIHRoZSB2YWx1ZSBpcyBhbHNvIHRyaW1tZWQuXG4gKiBSZXR1cm5zIGFuIGVtcHR5IHN0cmluZyBpZiB0aGUgdmFsdWUgaXMgbm90IGRlZmluZWQuXG4gKlxuICogQHBhcmFtICAgICBuYW1lICAgICBuYW1lIG9mIHRoZSBpbnB1dCB0byBnZXRcbiAqIEBwYXJhbSAgICAgb3B0aW9ucyAgb3B0aW9uYWwuIFNlZSBJbnB1dE9wdGlvbnMuXG4gKiBAcmV0dXJucyAgIHN0cmluZ1xuICovXG5mdW5jdGlvbiBnZXRJbnB1dChuYW1lLCBvcHRpb25zKSB7XG4gICAgY29uc3QgdmFsID0gcHJvY2Vzcy5lbnZbYElOUFVUXyR7bmFtZS5yZXBsYWNlKC8gL2csICdfJykudG9VcHBlckNhc2UoKX1gXSB8fCAnJztcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnJlcXVpcmVkICYmICF2YWwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnB1dCByZXF1aXJlZCBhbmQgbm90IHN1cHBsaWVkOiAke25hbWV9YCk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMudHJpbVdoaXRlc3BhY2UgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICAgIHJldHVybiB2YWwudHJpbSgpO1xufVxuZXhwb3J0cy5nZXRJbnB1dCA9IGdldElucHV0O1xuLyoqXG4gKiBHZXRzIHRoZSB2YWx1ZXMgb2YgYW4gbXVsdGlsaW5lIGlucHV0LiAgRWFjaCB2YWx1ZSBpcyBhbHNvIHRyaW1tZWQuXG4gKlxuICogQHBhcmFtICAgICBuYW1lICAgICBuYW1lIG9mIHRoZSBpbnB1dCB0byBnZXRcbiAqIEBwYXJhbSAgICAgb3B0aW9ucyAgb3B0aW9uYWwuIFNlZSBJbnB1dE9wdGlvbnMuXG4gKiBAcmV0dXJucyAgIHN0cmluZ1tdXG4gKlxuICovXG5mdW5jdGlvbiBnZXRNdWx0aWxpbmVJbnB1dChuYW1lLCBvcHRpb25zKSB7XG4gICAgY29uc3QgaW5wdXRzID0gZ2V0SW5wdXQobmFtZSwgb3B0aW9ucylcbiAgICAgICAgLnNwbGl0KCdcXG4nKVxuICAgICAgICAuZmlsdGVyKHggPT4geCAhPT0gJycpO1xuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMudHJpbVdoaXRlc3BhY2UgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBpbnB1dHM7XG4gICAgfVxuICAgIHJldHVybiBpbnB1dHMubWFwKGlucHV0ID0+IGlucHV0LnRyaW0oKSk7XG59XG5leHBvcnRzLmdldE11bHRpbGluZUlucHV0ID0gZ2V0TXVsdGlsaW5lSW5wdXQ7XG4vKipcbiAqIEdldHMgdGhlIGlucHV0IHZhbHVlIG9mIHRoZSBib29sZWFuIHR5cGUgaW4gdGhlIFlBTUwgMS4yIFwiY29yZSBzY2hlbWFcIiBzcGVjaWZpY2F0aW9uLlxuICogU3VwcG9ydCBib29sZWFuIGlucHV0IGxpc3Q6IGB0cnVlIHwgVHJ1ZSB8IFRSVUUgfCBmYWxzZSB8IEZhbHNlIHwgRkFMU0VgIC5cbiAqIFRoZSByZXR1cm4gdmFsdWUgaXMgYWxzbyBpbiBib29sZWFuIHR5cGUuXG4gKiByZWY6IGh0dHBzOi8veWFtbC5vcmcvc3BlYy8xLjIvc3BlYy5odG1sI2lkMjgwNDkyM1xuICpcbiAqIEBwYXJhbSAgICAgbmFtZSAgICAgbmFtZSBvZiB0aGUgaW5wdXQgdG8gZ2V0XG4gKiBAcGFyYW0gICAgIG9wdGlvbnMgIG9wdGlvbmFsLiBTZWUgSW5wdXRPcHRpb25zLlxuICogQHJldHVybnMgICBib29sZWFuXG4gKi9cbmZ1bmN0aW9uIGdldEJvb2xlYW5JbnB1dChuYW1lLCBvcHRpb25zKSB7XG4gICAgY29uc3QgdHJ1ZVZhbHVlID0gWyd0cnVlJywgJ1RydWUnLCAnVFJVRSddO1xuICAgIGNvbnN0IGZhbHNlVmFsdWUgPSBbJ2ZhbHNlJywgJ0ZhbHNlJywgJ0ZBTFNFJ107XG4gICAgY29uc3QgdmFsID0gZ2V0SW5wdXQobmFtZSwgb3B0aW9ucyk7XG4gICAgaWYgKHRydWVWYWx1ZS5pbmNsdWRlcyh2YWwpKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoZmFsc2VWYWx1ZS5pbmNsdWRlcyh2YWwpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgSW5wdXQgZG9lcyBub3QgbWVldCBZQU1MIDEuMiBcIkNvcmUgU2NoZW1hXCIgc3BlY2lmaWNhdGlvbjogJHtuYW1lfVxcbmAgK1xuICAgICAgICBgU3VwcG9ydCBib29sZWFuIGlucHV0IGxpc3Q6IFxcYHRydWUgfCBUcnVlIHwgVFJVRSB8IGZhbHNlIHwgRmFsc2UgfCBGQUxTRVxcYGApO1xufVxuZXhwb3J0cy5nZXRCb29sZWFuSW5wdXQgPSBnZXRCb29sZWFuSW5wdXQ7XG4vKipcbiAqIFNldHMgdGhlIHZhbHVlIG9mIGFuIG91dHB1dC5cbiAqXG4gKiBAcGFyYW0gICAgIG5hbWUgICAgIG5hbWUgb2YgdGhlIG91dHB1dCB0byBzZXRcbiAqIEBwYXJhbSAgICAgdmFsdWUgICAgdmFsdWUgdG8gc3RvcmUuIE5vbi1zdHJpbmcgdmFsdWVzIHdpbGwgYmUgY29udmVydGVkIHRvIGEgc3RyaW5nIHZpYSBKU09OLnN0cmluZ2lmeVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZnVuY3Rpb24gc2V0T3V0cHV0KG5hbWUsIHZhbHVlKSB7XG4gICAgY29uc3QgZmlsZVBhdGggPSBwcm9jZXNzLmVudlsnR0lUSFVCX09VVFBVVCddIHx8ICcnO1xuICAgIGlmIChmaWxlUGF0aCkge1xuICAgICAgICByZXR1cm4gKDAsIGZpbGVfY29tbWFuZF8xLmlzc3VlRmlsZUNvbW1hbmQpKCdPVVRQVVQnLCAoMCwgZmlsZV9jb21tYW5kXzEucHJlcGFyZUtleVZhbHVlTWVzc2FnZSkobmFtZSwgdmFsdWUpKTtcbiAgICB9XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUob3MuRU9MKTtcbiAgICAoMCwgY29tbWFuZF8xLmlzc3VlQ29tbWFuZCkoJ3NldC1vdXRwdXQnLCB7IG5hbWUgfSwgKDAsIHV0aWxzXzEudG9Db21tYW5kVmFsdWUpKHZhbHVlKSk7XG59XG5leHBvcnRzLnNldE91dHB1dCA9IHNldE91dHB1dDtcbi8qKlxuICogRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgZWNob2luZyBvZiBjb21tYW5kcyBpbnRvIHN0ZG91dCBmb3IgdGhlIHJlc3Qgb2YgdGhlIHN0ZXAuXG4gKiBFY2hvaW5nIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQgaWYgQUNUSU9OU19TVEVQX0RFQlVHIGlzIG5vdCBzZXQuXG4gKlxuICovXG5mdW5jdGlvbiBzZXRDb21tYW5kRWNobyhlbmFibGVkKSB7XG4gICAgKDAsIGNvbW1hbmRfMS5pc3N1ZSkoJ2VjaG8nLCBlbmFibGVkID8gJ29uJyA6ICdvZmYnKTtcbn1cbmV4cG9ydHMuc2V0Q29tbWFuZEVjaG8gPSBzZXRDb21tYW5kRWNobztcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJlc3VsdHNcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8qKlxuICogU2V0cyB0aGUgYWN0aW9uIHN0YXR1cyB0byBmYWlsZWQuXG4gKiBXaGVuIHRoZSBhY3Rpb24gZXhpdHMgaXQgd2lsbCBiZSB3aXRoIGFuIGV4aXQgY29kZSBvZiAxXG4gKiBAcGFyYW0gbWVzc2FnZSBhZGQgZXJyb3IgaXNzdWUgbWVzc2FnZVxuICovXG5mdW5jdGlvbiBzZXRGYWlsZWQobWVzc2FnZSkge1xuICAgIHByb2Nlc3MuZXhpdENvZGUgPSBFeGl0Q29kZS5GYWlsdXJlO1xuICAgIGVycm9yKG1lc3NhZ2UpO1xufVxuZXhwb3J0cy5zZXRGYWlsZWQgPSBzZXRGYWlsZWQ7XG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBMb2dnaW5nIENvbW1hbmRzXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vKipcbiAqIEdldHMgd2hldGhlciBBY3Rpb25zIFN0ZXAgRGVidWcgaXMgb24gb3Igbm90XG4gKi9cbmZ1bmN0aW9uIGlzRGVidWcoKSB7XG4gICAgcmV0dXJuIHByb2Nlc3MuZW52WydSVU5ORVJfREVCVUcnXSA9PT0gJzEnO1xufVxuZXhwb3J0cy5pc0RlYnVnID0gaXNEZWJ1Zztcbi8qKlxuICogV3JpdGVzIGRlYnVnIG1lc3NhZ2UgdG8gdXNlciBsb2dcbiAqIEBwYXJhbSBtZXNzYWdlIGRlYnVnIG1lc3NhZ2VcbiAqL1xuZnVuY3Rpb24gZGVidWcobWVzc2FnZSkge1xuICAgICgwLCBjb21tYW5kXzEuaXNzdWVDb21tYW5kKSgnZGVidWcnLCB7fSwgbWVzc2FnZSk7XG59XG5leHBvcnRzLmRlYnVnID0gZGVidWc7XG4vKipcbiAqIEFkZHMgYW4gZXJyb3IgaXNzdWVcbiAqIEBwYXJhbSBtZXNzYWdlIGVycm9yIGlzc3VlIG1lc3NhZ2UuIEVycm9ycyB3aWxsIGJlIGNvbnZlcnRlZCB0byBzdHJpbmcgdmlhIHRvU3RyaW5nKClcbiAqIEBwYXJhbSBwcm9wZXJ0aWVzIG9wdGlvbmFsIHByb3BlcnRpZXMgdG8gYWRkIHRvIHRoZSBhbm5vdGF0aW9uLlxuICovXG5mdW5jdGlvbiBlcnJvcihtZXNzYWdlLCBwcm9wZXJ0aWVzID0ge30pIHtcbiAgICAoMCwgY29tbWFuZF8xLmlzc3VlQ29tbWFuZCkoJ2Vycm9yJywgKDAsIHV0aWxzXzEudG9Db21tYW5kUHJvcGVydGllcykocHJvcGVydGllcyksIG1lc3NhZ2UgaW5zdGFuY2VvZiBFcnJvciA/IG1lc3NhZ2UudG9TdHJpbmcoKSA6IG1lc3NhZ2UpO1xufVxuZXhwb3J0cy5lcnJvciA9IGVycm9yO1xuLyoqXG4gKiBBZGRzIGEgd2FybmluZyBpc3N1ZVxuICogQHBhcmFtIG1lc3NhZ2Ugd2FybmluZyBpc3N1ZSBtZXNzYWdlLiBFcnJvcnMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gc3RyaW5nIHZpYSB0b1N0cmluZygpXG4gKiBAcGFyYW0gcHJvcGVydGllcyBvcHRpb25hbCBwcm9wZXJ0aWVzIHRvIGFkZCB0byB0aGUgYW5ub3RhdGlvbi5cbiAqL1xuZnVuY3Rpb24gd2FybmluZyhtZXNzYWdlLCBwcm9wZXJ0aWVzID0ge30pIHtcbiAgICAoMCwgY29tbWFuZF8xLmlzc3VlQ29tbWFuZCkoJ3dhcm5pbmcnLCAoMCwgdXRpbHNfMS50b0NvbW1hbmRQcm9wZXJ0aWVzKShwcm9wZXJ0aWVzKSwgbWVzc2FnZSBpbnN0YW5jZW9mIEVycm9yID8gbWVzc2FnZS50b1N0cmluZygpIDogbWVzc2FnZSk7XG59XG5leHBvcnRzLndhcm5pbmcgPSB3YXJuaW5nO1xuLyoqXG4gKiBBZGRzIGEgbm90aWNlIGlzc3VlXG4gKiBAcGFyYW0gbWVzc2FnZSBub3RpY2UgaXNzdWUgbWVzc2FnZS4gRXJyb3JzIHdpbGwgYmUgY29udmVydGVkIHRvIHN0cmluZyB2aWEgdG9TdHJpbmcoKVxuICogQHBhcmFtIHByb3BlcnRpZXMgb3B0aW9uYWwgcHJvcGVydGllcyB0byBhZGQgdG8gdGhlIGFubm90YXRpb24uXG4gKi9cbmZ1bmN0aW9uIG5vdGljZShtZXNzYWdlLCBwcm9wZXJ0aWVzID0ge30pIHtcbiAgICAoMCwgY29tbWFuZF8xLmlzc3VlQ29tbWFuZCkoJ25vdGljZScsICgwLCB1dGlsc18xLnRvQ29tbWFuZFByb3BlcnRpZXMpKHByb3BlcnRpZXMpLCBtZXNzYWdlIGluc3RhbmNlb2YgRXJyb3IgPyBtZXNzYWdlLnRvU3RyaW5nKCkgOiBtZXNzYWdlKTtcbn1cbmV4cG9ydHMubm90aWNlID0gbm90aWNlO1xuLyoqXG4gKiBXcml0ZXMgaW5mbyB0byBsb2cgd2l0aCBjb25zb2xlLmxvZy5cbiAqIEBwYXJhbSBtZXNzYWdlIGluZm8gbWVzc2FnZVxuICovXG5mdW5jdGlvbiBpbmZvKG1lc3NhZ2UpIHtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShtZXNzYWdlICsgb3MuRU9MKTtcbn1cbmV4cG9ydHMuaW5mbyA9IGluZm87XG4vKipcbiAqIEJlZ2luIGFuIG91dHB1dCBncm91cC5cbiAqXG4gKiBPdXRwdXQgdW50aWwgdGhlIG5leHQgYGdyb3VwRW5kYCB3aWxsIGJlIGZvbGRhYmxlIGluIHRoaXMgZ3JvdXBcbiAqXG4gKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgb3V0cHV0IGdyb3VwXG4gKi9cbmZ1bmN0aW9uIHN0YXJ0R3JvdXAobmFtZSkge1xuICAgICgwLCBjb21tYW5kXzEuaXNzdWUpKCdncm91cCcsIG5hbWUpO1xufVxuZXhwb3J0cy5zdGFydEdyb3VwID0gc3RhcnRHcm91cDtcbi8qKlxuICogRW5kIGFuIG91dHB1dCBncm91cC5cbiAqL1xuZnVuY3Rpb24gZW5kR3JvdXAoKSB7XG4gICAgKDAsIGNvbW1hbmRfMS5pc3N1ZSkoJ2VuZGdyb3VwJyk7XG59XG5leHBvcnRzLmVuZEdyb3VwID0gZW5kR3JvdXA7XG4vKipcbiAqIFdyYXAgYW4gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIGNhbGwgaW4gYSBncm91cC5cbiAqXG4gKiBSZXR1cm5zIHRoZSBzYW1lIHR5cGUgYXMgdGhlIGZ1bmN0aW9uIGl0c2VsZi5cbiAqXG4gKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgZ3JvdXBcbiAqIEBwYXJhbSBmbiBUaGUgZnVuY3Rpb24gdG8gd3JhcCBpbiB0aGUgZ3JvdXBcbiAqL1xuZnVuY3Rpb24gZ3JvdXAobmFtZSwgZm4pIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBzdGFydEdyb3VwKG5hbWUpO1xuICAgICAgICBsZXQgcmVzdWx0O1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmVzdWx0ID0geWllbGQgZm4oKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIGVuZEdyb3VwKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZ3JvdXAgPSBncm91cDtcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFdyYXBwZXIgYWN0aW9uIHN0YXRlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vKipcbiAqIFNhdmVzIHN0YXRlIGZvciBjdXJyZW50IGFjdGlvbiwgdGhlIHN0YXRlIGNhbiBvbmx5IGJlIHJldHJpZXZlZCBieSB0aGlzIGFjdGlvbidzIHBvc3Qgam9iIGV4ZWN1dGlvbi5cbiAqXG4gKiBAcGFyYW0gICAgIG5hbWUgICAgIG5hbWUgb2YgdGhlIHN0YXRlIHRvIHN0b3JlXG4gKiBAcGFyYW0gICAgIHZhbHVlICAgIHZhbHVlIHRvIHN0b3JlLiBOb24tc3RyaW5nIHZhbHVlcyB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIHN0cmluZyB2aWEgSlNPTi5zdHJpbmdpZnlcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmZ1bmN0aW9uIHNhdmVTdGF0ZShuYW1lLCB2YWx1ZSkge1xuICAgIGNvbnN0IGZpbGVQYXRoID0gcHJvY2Vzcy5lbnZbJ0dJVEhVQl9TVEFURSddIHx8ICcnO1xuICAgIGlmIChmaWxlUGF0aCkge1xuICAgICAgICByZXR1cm4gKDAsIGZpbGVfY29tbWFuZF8xLmlzc3VlRmlsZUNvbW1hbmQpKCdTVEFURScsICgwLCBmaWxlX2NvbW1hbmRfMS5wcmVwYXJlS2V5VmFsdWVNZXNzYWdlKShuYW1lLCB2YWx1ZSkpO1xuICAgIH1cbiAgICAoMCwgY29tbWFuZF8xLmlzc3VlQ29tbWFuZCkoJ3NhdmUtc3RhdGUnLCB7IG5hbWUgfSwgKDAsIHV0aWxzXzEudG9Db21tYW5kVmFsdWUpKHZhbHVlKSk7XG59XG5leHBvcnRzLnNhdmVTdGF0ZSA9IHNhdmVTdGF0ZTtcbi8qKlxuICogR2V0cyB0aGUgdmFsdWUgb2YgYW4gc3RhdGUgc2V0IGJ5IHRoaXMgYWN0aW9uJ3MgbWFpbiBleGVjdXRpb24uXG4gKlxuICogQHBhcmFtICAgICBuYW1lICAgICBuYW1lIG9mIHRoZSBzdGF0ZSB0byBnZXRcbiAqIEByZXR1cm5zICAgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGdldFN0YXRlKG5hbWUpIHtcbiAgICByZXR1cm4gcHJvY2Vzcy5lbnZbYFNUQVRFXyR7bmFtZX1gXSB8fCAnJztcbn1cbmV4cG9ydHMuZ2V0U3RhdGUgPSBnZXRTdGF0ZTtcbmZ1bmN0aW9uIGdldElEVG9rZW4oYXVkKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgcmV0dXJuIHlpZWxkIG9pZGNfdXRpbHNfMS5PaWRjQ2xpZW50LmdldElEVG9rZW4oYXVkKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZ2V0SURUb2tlbiA9IGdldElEVG9rZW47XG4vKipcbiAqIFN1bW1hcnkgZXhwb3J0c1xuICovXG52YXIgc3VtbWFyeV8xID0gcmVxdWlyZShcIi4vc3VtbWFyeVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN1bW1hcnlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN1bW1hcnlfMS5zdW1tYXJ5OyB9IH0pO1xuLyoqXG4gKiBAZGVwcmVjYXRlZCB1c2UgY29yZS5zdW1tYXJ5XG4gKi9cbnZhciBzdW1tYXJ5XzIgPSByZXF1aXJlKFwiLi9zdW1tYXJ5XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibWFya2Rvd25TdW1tYXJ5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzdW1tYXJ5XzIubWFya2Rvd25TdW1tYXJ5OyB9IH0pO1xuLyoqXG4gKiBQYXRoIGV4cG9ydHNcbiAqL1xudmFyIHBhdGhfdXRpbHNfMSA9IHJlcXVpcmUoXCIuL3BhdGgtdXRpbHNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0b1Bvc2l4UGF0aFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcGF0aF91dGlsc18xLnRvUG9zaXhQYXRoOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidG9XaW4zMlBhdGhcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBhdGhfdXRpbHNfMS50b1dpbjMyUGF0aDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRvUGxhdGZvcm1QYXRoXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwYXRoX3V0aWxzXzEudG9QbGF0Zm9ybVBhdGg7IH0gfSk7XG4vKipcbiAqIFBsYXRmb3JtIHV0aWxpdGllcyBleHBvcnRzXG4gKi9cbmV4cG9ydHMucGxhdGZvcm0gPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIi4vcGxhdGZvcm1cIikpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29yZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRVcGxvYWRDaHVua1RpbWVvdXQgPSBleHBvcnRzLmdldENvbmN1cnJlbmN5ID0gZXhwb3J0cy5nZXRHaXRIdWJXb3Jrc3BhY2VEaXIgPSBleHBvcnRzLmlzR2hlcyA9IGV4cG9ydHMuZ2V0UmVzdWx0c1NlcnZpY2VVcmwgPSBleHBvcnRzLmdldFJ1bnRpbWVUb2tlbiA9IGV4cG9ydHMuZ2V0VXBsb2FkQ2h1bmtTaXplID0gdm9pZCAwO1xuY29uc3Qgb3NfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwib3NcIikpO1xuLy8gVXNlZCBmb3IgY29udHJvbGxpbmcgdGhlIGhpZ2hXYXRlck1hcmsgdmFsdWUgb2YgdGhlIHppcCB0aGF0IGlzIGJlaW5nIHN0cmVhbWVkXG4vLyBUaGUgc2FtZSB2YWx1ZSBpcyB1c2VkIGFzIHRoZSBjaHVuayBzaXplIHRoYXQgaXMgdXNlIGR1cmluZyB1cGxvYWQgdG8gYmxvYiBzdG9yYWdlXG5mdW5jdGlvbiBnZXRVcGxvYWRDaHVua1NpemUoKSB7XG4gICAgcmV0dXJuIDggKiAxMDI0ICogMTAyNDsgLy8gOCBNQiBDaHVua3Ncbn1cbmV4cG9ydHMuZ2V0VXBsb2FkQ2h1bmtTaXplID0gZ2V0VXBsb2FkQ2h1bmtTaXplO1xuZnVuY3Rpb24gZ2V0UnVudGltZVRva2VuKCkge1xuICAgIGNvbnN0IHRva2VuID0gcHJvY2Vzcy5lbnZbJ0FDVElPTlNfUlVOVElNRV9UT0tFTiddO1xuICAgIGlmICghdG9rZW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gZ2V0IHRoZSBBQ1RJT05TX1JVTlRJTUVfVE9LRU4gZW52IHZhcmlhYmxlJyk7XG4gICAgfVxuICAgIHJldHVybiB0b2tlbjtcbn1cbmV4cG9ydHMuZ2V0UnVudGltZVRva2VuID0gZ2V0UnVudGltZVRva2VuO1xuZnVuY3Rpb24gZ2V0UmVzdWx0c1NlcnZpY2VVcmwoKSB7XG4gICAgY29uc3QgcmVzdWx0c1VybCA9IHByb2Nlc3MuZW52WydBQ1RJT05TX1JFU1VMVFNfVVJMJ107XG4gICAgaWYgKCFyZXN1bHRzVXJsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGdldCB0aGUgQUNUSU9OU19SRVNVTFRTX1VSTCBlbnYgdmFyaWFibGUnKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBVUkwocmVzdWx0c1VybCkub3JpZ2luO1xufVxuZXhwb3J0cy5nZXRSZXN1bHRzU2VydmljZVVybCA9IGdldFJlc3VsdHNTZXJ2aWNlVXJsO1xuZnVuY3Rpb24gaXNHaGVzKCkge1xuICAgIGNvbnN0IGdoVXJsID0gbmV3IFVSTChwcm9jZXNzLmVudlsnR0lUSFVCX1NFUlZFUl9VUkwnXSB8fCAnaHR0cHM6Ly9naXRodWIuY29tJyk7XG4gICAgY29uc3QgaG9zdG5hbWUgPSBnaFVybC5ob3N0bmFtZS50cmltRW5kKCkudG9VcHBlckNhc2UoKTtcbiAgICBjb25zdCBpc0dpdEh1Ykhvc3QgPSBob3N0bmFtZSA9PT0gJ0dJVEhVQi5DT00nO1xuICAgIGNvbnN0IGlzR2hlSG9zdCA9IGhvc3RuYW1lLmVuZHNXaXRoKCcuR0hFLkNPTScpO1xuICAgIGNvbnN0IGlzTG9jYWxIb3N0ID0gaG9zdG5hbWUuZW5kc1dpdGgoJy5MT0NBTEhPU1QnKTtcbiAgICByZXR1cm4gIWlzR2l0SHViSG9zdCAmJiAhaXNHaGVIb3N0ICYmICFpc0xvY2FsSG9zdDtcbn1cbmV4cG9ydHMuaXNHaGVzID0gaXNHaGVzO1xuZnVuY3Rpb24gZ2V0R2l0SHViV29ya3NwYWNlRGlyKCkge1xuICAgIGNvbnN0IGdoV29ya3NwYWNlRGlyID0gcHJvY2Vzcy5lbnZbJ0dJVEhVQl9XT1JLU1BBQ0UnXTtcbiAgICBpZiAoIWdoV29ya3NwYWNlRGlyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGdldCB0aGUgR0lUSFVCX1dPUktTUEFDRSBlbnYgdmFyaWFibGUnKTtcbiAgICB9XG4gICAgcmV0dXJuIGdoV29ya3NwYWNlRGlyO1xufVxuZXhwb3J0cy5nZXRHaXRIdWJXb3Jrc3BhY2VEaXIgPSBnZXRHaXRIdWJXb3Jrc3BhY2VEaXI7XG4vLyBNaW1pY3MgYmVoYXZpb3Igb2YgYXpjb3B5OiBodHRwczovL2xlYXJuLm1pY3Jvc29mdC5jb20vZW4tdXMvYXp1cmUvc3RvcmFnZS9jb21tb24vc3RvcmFnZS11c2UtYXpjb3B5LW9wdGltaXplXG4vLyBJZiB5b3VyIG1hY2hpbmUgaGFzIGZld2VyIHRoYW4gNSBDUFVzLCB0aGVuIHRoZSB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlIGlzIHNldCB0byAzMi5cbi8vIE90aGVyd2lzZSwgdGhlIGRlZmF1bHQgdmFsdWUgaXMgZXF1YWwgdG8gMTYgbXVsdGlwbGllZCBieSB0aGUgbnVtYmVyIG9mIENQVXMuIFRoZSBtYXhpbXVtIHZhbHVlIG9mIHRoaXMgdmFyaWFibGUgaXMgMzAwLlxuZnVuY3Rpb24gZ2V0Q29uY3VycmVuY3koKSB7XG4gICAgY29uc3QgbnVtQ1BVcyA9IG9zXzEuZGVmYXVsdC5jcHVzKCkubGVuZ3RoO1xuICAgIGlmIChudW1DUFVzIDw9IDQpIHtcbiAgICAgICAgcmV0dXJuIDMyO1xuICAgIH1cbiAgICBjb25zdCBjb25jdXJyZW5jeSA9IDE2ICogbnVtQ1BVcztcbiAgICByZXR1cm4gY29uY3VycmVuY3kgPiAzMDAgPyAzMDAgOiBjb25jdXJyZW5jeTtcbn1cbmV4cG9ydHMuZ2V0Q29uY3VycmVuY3kgPSBnZXRDb25jdXJyZW5jeTtcbmZ1bmN0aW9uIGdldFVwbG9hZENodW5rVGltZW91dCgpIHtcbiAgICByZXR1cm4gMzAwMDAwOyAvLyA1IG1pbnV0ZXNcbn1cbmV4cG9ydHMuZ2V0VXBsb2FkQ2h1bmtUaW1lb3V0ID0gZ2V0VXBsb2FkQ2h1bmtUaW1lb3V0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uZmlnLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlzSnNvbk9iamVjdCA9IGV4cG9ydHMudHlwZW9mSnNvblZhbHVlID0gdm9pZCAwO1xuLyoqXG4gKiBHZXQgdGhlIHR5cGUgb2YgYSBKU09OIHZhbHVlLlxuICogRGlzdGluZ3Vpc2hlcyBiZXR3ZWVuIGFycmF5LCBudWxsIGFuZCBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIHR5cGVvZkpzb25WYWx1ZSh2YWx1ZSkge1xuICAgIGxldCB0ID0gdHlwZW9mIHZhbHVlO1xuICAgIGlmICh0ID09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKVxuICAgICAgICAgICAgcmV0dXJuIFwiYXJyYXlcIjtcbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKVxuICAgICAgICAgICAgcmV0dXJuIFwibnVsbFwiO1xuICAgIH1cbiAgICByZXR1cm4gdDtcbn1cbmV4cG9ydHMudHlwZW9mSnNvblZhbHVlID0gdHlwZW9mSnNvblZhbHVlO1xuLyoqXG4gKiBJcyB0aGlzIGEgSlNPTiBvYmplY3QgKGluc3RlYWQgb2YgYW4gYXJyYXkgb3IgbnVsbCk/XG4gKi9cbmZ1bmN0aW9uIGlzSnNvbk9iamVjdCh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG59XG5leHBvcnRzLmlzSnNvbk9iamVjdCA9IGlzSnNvbk9iamVjdDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmJhc2U2NGVuY29kZSA9IGV4cG9ydHMuYmFzZTY0ZGVjb2RlID0gdm9pZCAwO1xuLy8gbG9va3VwIHRhYmxlIGZyb20gYmFzZTY0IGNoYXJhY3RlciB0byBieXRlXG5sZXQgZW5jVGFibGUgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLycuc3BsaXQoJycpO1xuLy8gbG9va3VwIHRhYmxlIGZyb20gYmFzZTY0IGNoYXJhY3RlciAqY29kZSogdG8gYnl0ZSBiZWNhdXNlIGxvb2t1cCBieSBudW1iZXIgaXMgZmFzdFxubGV0IGRlY1RhYmxlID0gW107XG5mb3IgKGxldCBpID0gMDsgaSA8IGVuY1RhYmxlLmxlbmd0aDsgaSsrKVxuICAgIGRlY1RhYmxlW2VuY1RhYmxlW2ldLmNoYXJDb2RlQXQoMCldID0gaTtcbi8vIHN1cHBvcnQgYmFzZTY0dXJsIHZhcmlhbnRzXG5kZWNUYWJsZVtcIi1cIi5jaGFyQ29kZUF0KDApXSA9IGVuY1RhYmxlLmluZGV4T2YoXCIrXCIpO1xuZGVjVGFibGVbXCJfXCIuY2hhckNvZGVBdCgwKV0gPSBlbmNUYWJsZS5pbmRleE9mKFwiL1wiKTtcbi8qKlxuICogRGVjb2RlcyBhIGJhc2U2NCBzdHJpbmcgdG8gYSBieXRlIGFycmF5LlxuICpcbiAqIC0gaWdub3JlcyB3aGl0ZS1zcGFjZSwgaW5jbHVkaW5nIGxpbmUgYnJlYWtzIGFuZCB0YWJzXG4gKiAtIGFsbG93cyBpbm5lciBwYWRkaW5nIChjYW4gZGVjb2RlIGNvbmNhdGVuYXRlZCBiYXNlNjQgc3RyaW5ncylcbiAqIC0gZG9lcyBub3QgcmVxdWlyZSBwYWRkaW5nXG4gKiAtIHVuZGVyc3RhbmRzIGJhc2U2NHVybCBlbmNvZGluZzpcbiAqICAgXCItXCIgaW5zdGVhZCBvZiBcIitcIixcbiAqICAgXCJfXCIgaW5zdGVhZCBvZiBcIi9cIixcbiAqICAgbm8gcGFkZGluZ1xuICovXG5mdW5jdGlvbiBiYXNlNjRkZWNvZGUoYmFzZTY0U3RyKSB7XG4gICAgLy8gZXN0aW1hdGUgYnl0ZSBzaXplLCBub3QgYWNjb3VudGluZyBmb3IgaW5uZXIgcGFkZGluZyBhbmQgd2hpdGVzcGFjZVxuICAgIGxldCBlcyA9IGJhc2U2NFN0ci5sZW5ndGggKiAzIC8gNDtcbiAgICAvLyBpZiAoZXMgJSAzICE9PSAwKVxuICAgIC8vIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBiYXNlNjQgc3RyaW5nJyk7XG4gICAgaWYgKGJhc2U2NFN0cltiYXNlNjRTdHIubGVuZ3RoIC0gMl0gPT0gJz0nKVxuICAgICAgICBlcyAtPSAyO1xuICAgIGVsc2UgaWYgKGJhc2U2NFN0cltiYXNlNjRTdHIubGVuZ3RoIC0gMV0gPT0gJz0nKVxuICAgICAgICBlcyAtPSAxO1xuICAgIGxldCBieXRlcyA9IG5ldyBVaW50OEFycmF5KGVzKSwgYnl0ZVBvcyA9IDAsIC8vIHBvc2l0aW9uIGluIGJ5dGUgYXJyYXlcbiAgICBncm91cFBvcyA9IDAsIC8vIHBvc2l0aW9uIGluIGJhc2U2NCBncm91cFxuICAgIGIsIC8vIGN1cnJlbnQgYnl0ZVxuICAgIHAgPSAwIC8vIHByZXZpb3VzIGJ5dGVcbiAgICA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiYXNlNjRTdHIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYiA9IGRlY1RhYmxlW2Jhc2U2NFN0ci5jaGFyQ29kZUF0KGkpXTtcbiAgICAgICAgaWYgKGIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gbm9pbnNwZWN0aW9uIEZhbGxUaHJvdWdoSW5Td2l0Y2hTdGF0ZW1lbnRKU1xuICAgICAgICAgICAgc3dpdGNoIChiYXNlNjRTdHJbaV0pIHtcbiAgICAgICAgICAgICAgICBjYXNlICc9JzpcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBQb3MgPSAwOyAvLyByZXNldCBzdGF0ZSB3aGVuIHBhZGRpbmcgZm91bmRcbiAgICAgICAgICAgICAgICBjYXNlICdcXG4nOlxuICAgICAgICAgICAgICAgIGNhc2UgJ1xccic6XG4gICAgICAgICAgICAgICAgY2FzZSAnXFx0JzpcbiAgICAgICAgICAgICAgICBjYXNlICcgJzpcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7IC8vIHNraXAgd2hpdGUtc3BhY2UsIGFuZCBwYWRkaW5nXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoYGludmFsaWQgYmFzZTY0IHN0cmluZy5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKGdyb3VwUG9zKSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgcCA9IGI7XG4gICAgICAgICAgICAgICAgZ3JvdXBQb3MgPSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgIGJ5dGVzW2J5dGVQb3MrK10gPSBwIDw8IDIgfCAoYiAmIDQ4KSA+PiA0O1xuICAgICAgICAgICAgICAgIHAgPSBiO1xuICAgICAgICAgICAgICAgIGdyb3VwUG9zID0gMjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICBieXRlc1tieXRlUG9zKytdID0gKHAgJiAxNSkgPDwgNCB8IChiICYgNjApID4+IDI7XG4gICAgICAgICAgICAgICAgcCA9IGI7XG4gICAgICAgICAgICAgICAgZ3JvdXBQb3MgPSAzO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgIGJ5dGVzW2J5dGVQb3MrK10gPSAocCAmIDMpIDw8IDYgfCBiO1xuICAgICAgICAgICAgICAgIGdyb3VwUG9zID0gMDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoZ3JvdXBQb3MgPT0gMSlcbiAgICAgICAgdGhyb3cgRXJyb3IoYGludmFsaWQgYmFzZTY0IHN0cmluZy5gKTtcbiAgICByZXR1cm4gYnl0ZXMuc3ViYXJyYXkoMCwgYnl0ZVBvcyk7XG59XG5leHBvcnRzLmJhc2U2NGRlY29kZSA9IGJhc2U2NGRlY29kZTtcbi8qKlxuICogRW5jb2RlcyBhIGJ5dGUgYXJyYXkgdG8gYSBiYXNlNjQgc3RyaW5nLlxuICogQWRkcyBwYWRkaW5nIGF0IHRoZSBlbmQuXG4gKiBEb2VzIG5vdCBpbnNlcnQgbmV3bGluZXMuXG4gKi9cbmZ1bmN0aW9uIGJhc2U2NGVuY29kZShieXRlcykge1xuICAgIGxldCBiYXNlNjQgPSAnJywgZ3JvdXBQb3MgPSAwLCAvLyBwb3NpdGlvbiBpbiBiYXNlNjQgZ3JvdXBcbiAgICBiLCAvLyBjdXJyZW50IGJ5dGVcbiAgICBwID0gMDsgLy8gY2Fycnkgb3ZlciBmcm9tIHByZXZpb3VzIGJ5dGVcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGIgPSBieXRlc1tpXTtcbiAgICAgICAgc3dpdGNoIChncm91cFBvcykge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgIGJhc2U2NCArPSBlbmNUYWJsZVtiID4+IDJdO1xuICAgICAgICAgICAgICAgIHAgPSAoYiAmIDMpIDw8IDQ7XG4gICAgICAgICAgICAgICAgZ3JvdXBQb3MgPSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgIGJhc2U2NCArPSBlbmNUYWJsZVtwIHwgYiA+PiA0XTtcbiAgICAgICAgICAgICAgICBwID0gKGIgJiAxNSkgPDwgMjtcbiAgICAgICAgICAgICAgICBncm91cFBvcyA9IDI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgYmFzZTY0ICs9IGVuY1RhYmxlW3AgfCBiID4+IDZdO1xuICAgICAgICAgICAgICAgIGJhc2U2NCArPSBlbmNUYWJsZVtiICYgNjNdO1xuICAgICAgICAgICAgICAgIGdyb3VwUG9zID0gMDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBwYWRkaW5nIHJlcXVpcmVkP1xuICAgIGlmIChncm91cFBvcykge1xuICAgICAgICBiYXNlNjQgKz0gZW5jVGFibGVbcF07XG4gICAgICAgIGJhc2U2NCArPSAnPSc7XG4gICAgICAgIGlmIChncm91cFBvcyA9PSAxKVxuICAgICAgICAgICAgYmFzZTY0ICs9ICc9JztcbiAgICB9XG4gICAgcmV0dXJuIGJhc2U2NDtcbn1cbmV4cG9ydHMuYmFzZTY0ZW5jb2RlID0gYmFzZTY0ZW5jb2RlO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgMjAxNiwgRGFuaWVsIFdpcnR6ICBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy9cbi8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZVxuLy8gbWV0OlxuLy9cbi8vICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbi8vICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuLy8gKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodFxuLy8gICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlXG4vLyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4vLyAqIE5laXRoZXIgdGhlIG5hbWUgb2YgaXRzIGF1dGhvciwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzXG4vLyAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZVxuLy8gICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cbi8vXG4vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTXG4vLyBcIkFTIElTXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UXG4vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Jcbi8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUXG4vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCxcbi8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Rcbi8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLFxuLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZXG4vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Vcbi8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnV0ZjhyZWFkID0gdm9pZCAwO1xuY29uc3QgZnJvbUNoYXJDb2RlcyA9IChjaHVuaykgPT4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsIGNodW5rKTtcbi8qKlxuICogQGRlcHJlY2F0ZWQgVGhpcyBmdW5jdGlvbiB3aWxsIG5vIGxvbmdlciBiZSBleHBvcnRlZCB3aXRoIHRoZSBuZXh0IG1ham9yXG4gKiByZWxlYXNlLCBzaW5jZSBwcm90b2J1Zi10cyBoYXMgc3dpdGNoIHRvIFRleHREZWNvZGVyIEFQSS4gSWYgeW91IG5lZWQgdGhpc1xuICogZnVuY3Rpb24sIHBsZWFzZSBtaWdyYXRlIHRvIEBwcm90b2J1ZmpzL3V0ZjguIEZvciBjb250ZXh0LCBzZWVcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS90aW1vc3RhbW0vcHJvdG9idWYtdHMvaXNzdWVzLzE4NFxuICpcbiAqIFJlYWRzIFVURjggYnl0ZXMgYXMgYSBzdHJpbmcuXG4gKlxuICogU2VlIFtwcm90b2J1ZmpzIC8gdXRmOF0oaHR0cHM6Ly9naXRodWIuY29tL3Byb3RvYnVmanMvcHJvdG9idWYuanMvYmxvYi85ODkzZTM1Yjg1NDYyMWNjZTY0YWY0YmY2YmUyY2ZmNGZiODkyNzk2L2xpYi91dGY4L2luZGV4LmpzI0w0MClcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTYsIERhbmllbCBXaXJ0elxuICovXG5mdW5jdGlvbiB1dGY4cmVhZChieXRlcykge1xuICAgIGlmIChieXRlcy5sZW5ndGggPCAxKVxuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICBsZXQgcG9zID0gMCwgLy8gcG9zaXRpb24gaW4gYnl0ZXNcbiAgICBwYXJ0cyA9IFtdLCBjaHVuayA9IFtdLCBpID0gMCwgLy8gY2hhciBvZmZzZXRcbiAgICB0OyAvLyB0ZW1wb3JhcnlcbiAgICBsZXQgbGVuID0gYnl0ZXMubGVuZ3RoO1xuICAgIHdoaWxlIChwb3MgPCBsZW4pIHtcbiAgICAgICAgdCA9IGJ5dGVzW3BvcysrXTtcbiAgICAgICAgaWYgKHQgPCAxMjgpXG4gICAgICAgICAgICBjaHVua1tpKytdID0gdDtcbiAgICAgICAgZWxzZSBpZiAodCA+IDE5MSAmJiB0IDwgMjI0KVxuICAgICAgICAgICAgY2h1bmtbaSsrXSA9ICh0ICYgMzEpIDw8IDYgfCBieXRlc1twb3MrK10gJiA2MztcbiAgICAgICAgZWxzZSBpZiAodCA+IDIzOSAmJiB0IDwgMzY1KSB7XG4gICAgICAgICAgICB0ID0gKCh0ICYgNykgPDwgMTggfCAoYnl0ZXNbcG9zKytdICYgNjMpIDw8IDEyIHwgKGJ5dGVzW3BvcysrXSAmIDYzKSA8PCA2IHwgYnl0ZXNbcG9zKytdICYgNjMpIC0gMHgxMDAwMDtcbiAgICAgICAgICAgIGNodW5rW2krK10gPSAweEQ4MDAgKyAodCA+PiAxMCk7XG4gICAgICAgICAgICBjaHVua1tpKytdID0gMHhEQzAwICsgKHQgJiAxMDIzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgICBjaHVua1tpKytdID0gKHQgJiAxNSkgPDwgMTIgfCAoYnl0ZXNbcG9zKytdICYgNjMpIDw8IDYgfCBieXRlc1twb3MrK10gJiA2MztcbiAgICAgICAgaWYgKGkgPiA4MTkxKSB7XG4gICAgICAgICAgICBwYXJ0cy5wdXNoKGZyb21DaGFyQ29kZXMoY2h1bmspKTtcbiAgICAgICAgICAgIGkgPSAwO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChwYXJ0cy5sZW5ndGgpIHtcbiAgICAgICAgaWYgKGkpXG4gICAgICAgICAgICBwYXJ0cy5wdXNoKGZyb21DaGFyQ29kZXMoY2h1bmsuc2xpY2UoMCwgaSkpKTtcbiAgICAgICAgcmV0dXJuIHBhcnRzLmpvaW4oXCJcIik7XG4gICAgfVxuICAgIHJldHVybiBmcm9tQ2hhckNvZGVzKGNodW5rLnNsaWNlKDAsIGkpKTtcbn1cbmV4cG9ydHMudXRmOHJlYWQgPSB1dGY4cmVhZDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLldpcmVUeXBlID0gZXhwb3J0cy5tZXJnZUJpbmFyeU9wdGlvbnMgPSBleHBvcnRzLlVua25vd25GaWVsZEhhbmRsZXIgPSB2b2lkIDA7XG4vKipcbiAqIFRoaXMgaGFuZGxlciBpbXBsZW1lbnRzIHRoZSBkZWZhdWx0IGJlaGF2aW91ciBmb3IgdW5rbm93biBmaWVsZHMuXG4gKiBXaGVuIHJlYWRpbmcgZGF0YSwgdW5rbm93biBmaWVsZHMgYXJlIHN0b3JlZCBvbiB0aGUgbWVzc2FnZSwgaW4gYVxuICogc3ltYm9sIHByb3BlcnR5LlxuICogV2hlbiB3cml0aW5nIGRhdGEsIHRoZSBzeW1ib2wgcHJvcGVydHkgaXMgcXVlcmllZCBhbmQgdW5rbm93biBmaWVsZHNcbiAqIGFyZSBzZXJpYWxpemVkIGludG8gdGhlIG91dHB1dCBhZ2Fpbi5cbiAqL1xudmFyIFVua25vd25GaWVsZEhhbmRsZXI7XG4oZnVuY3Rpb24gKFVua25vd25GaWVsZEhhbmRsZXIpIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3ltYm9sIHVzZWQgdG8gc3RvcmUgdW5rbm93biBmaWVsZHMgZm9yIGEgbWVzc2FnZS5cbiAgICAgKiBUaGUgcHJvcGVydHkgbXVzdCBjb25mb3JtIHRvIGBVbmtub3duRmllbGRDb250YWluZXJgLlxuICAgICAqL1xuICAgIFVua25vd25GaWVsZEhhbmRsZXIuc3ltYm9sID0gU3ltYm9sLmZvcihcInByb3RvYnVmLXRzL3Vua25vd25cIik7XG4gICAgLyoqXG4gICAgICogU3RvcmUgYW4gdW5rbm93biBmaWVsZCBkdXJpbmcgYmluYXJ5IHJlYWQgZGlyZWN0bHkgb24gdGhlIG1lc3NhZ2UuXG4gICAgICogVGhpcyBtZXRob2QgaXMgY29tcGF0aWJsZSB3aXRoIGBCaW5hcnlSZWFkT3B0aW9ucy5yZWFkVW5rbm93bkZpZWxkYC5cbiAgICAgKi9cbiAgICBVbmtub3duRmllbGRIYW5kbGVyLm9uUmVhZCA9ICh0eXBlTmFtZSwgbWVzc2FnZSwgZmllbGRObywgd2lyZVR5cGUsIGRhdGEpID0+IHtcbiAgICAgICAgbGV0IGNvbnRhaW5lciA9IGlzKG1lc3NhZ2UpID8gbWVzc2FnZVtVbmtub3duRmllbGRIYW5kbGVyLnN5bWJvbF0gOiBtZXNzYWdlW1Vua25vd25GaWVsZEhhbmRsZXIuc3ltYm9sXSA9IFtdO1xuICAgICAgICBjb250YWluZXIucHVzaCh7IG5vOiBmaWVsZE5vLCB3aXJlVHlwZSwgZGF0YSB9KTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFdyaXRlIHVua25vd24gZmllbGRzIHN0b3JlZCBmb3IgdGhlIG1lc3NhZ2UgdG8gdGhlIHdyaXRlci5cbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBjb21wYXRpYmxlIHdpdGggYEJpbmFyeVdyaXRlT3B0aW9ucy53cml0ZVVua25vd25GaWVsZHNgLlxuICAgICAqL1xuICAgIFVua25vd25GaWVsZEhhbmRsZXIub25Xcml0ZSA9ICh0eXBlTmFtZSwgbWVzc2FnZSwgd3JpdGVyKSA9PiB7XG4gICAgICAgIGZvciAobGV0IHsgbm8sIHdpcmVUeXBlLCBkYXRhIH0gb2YgVW5rbm93bkZpZWxkSGFuZGxlci5saXN0KG1lc3NhZ2UpKVxuICAgICAgICAgICAgd3JpdGVyLnRhZyhubywgd2lyZVR5cGUpLnJhdyhkYXRhKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIExpc3QgdW5rbm93biBmaWVsZHMgc3RvcmVkIGZvciB0aGUgbWVzc2FnZS5cbiAgICAgKiBOb3RlIHRoYXQgdGhlcmUgbWF5IGJlIG11bHRpcGxlcyBmaWVsZHMgd2l0aCB0aGUgc2FtZSBudW1iZXIuXG4gICAgICovXG4gICAgVW5rbm93bkZpZWxkSGFuZGxlci5saXN0ID0gKG1lc3NhZ2UsIGZpZWxkTm8pID0+IHtcbiAgICAgICAgaWYgKGlzKG1lc3NhZ2UpKSB7XG4gICAgICAgICAgICBsZXQgYWxsID0gbWVzc2FnZVtVbmtub3duRmllbGRIYW5kbGVyLnN5bWJvbF07XG4gICAgICAgICAgICByZXR1cm4gZmllbGRObyA/IGFsbC5maWx0ZXIodWYgPT4gdWYubm8gPT0gZmllbGRObykgOiBhbGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgbGFzdCB1bmtub3duIGZpZWxkIGJ5IGZpZWxkIG51bWJlci5cbiAgICAgKi9cbiAgICBVbmtub3duRmllbGRIYW5kbGVyLmxhc3QgPSAobWVzc2FnZSwgZmllbGRObykgPT4gVW5rbm93bkZpZWxkSGFuZGxlci5saXN0KG1lc3NhZ2UsIGZpZWxkTm8pLnNsaWNlKC0xKVswXTtcbiAgICBjb25zdCBpcyA9IChtZXNzYWdlKSA9PiBtZXNzYWdlICYmIEFycmF5LmlzQXJyYXkobWVzc2FnZVtVbmtub3duRmllbGRIYW5kbGVyLnN5bWJvbF0pO1xufSkoVW5rbm93bkZpZWxkSGFuZGxlciA9IGV4cG9ydHMuVW5rbm93bkZpZWxkSGFuZGxlciB8fCAoZXhwb3J0cy5Vbmtub3duRmllbGRIYW5kbGVyID0ge30pKTtcbi8qKlxuICogTWVyZ2VzIGJpbmFyeSB3cml0ZSBvciByZWFkIG9wdGlvbnMuIExhdGVyIHZhbHVlcyBvdmVycmlkZSBlYXJsaWVyIHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VCaW5hcnlPcHRpb25zKGEsIGIpIHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBhKSwgYik7XG59XG5leHBvcnRzLm1lcmdlQmluYXJ5T3B0aW9ucyA9IG1lcmdlQmluYXJ5T3B0aW9ucztcbi8qKlxuICogUHJvdG9idWYgYmluYXJ5IGZvcm1hdCB3aXJlIHR5cGVzLlxuICpcbiAqIEEgd2lyZSB0eXBlIHByb3ZpZGVzIGp1c3QgZW5vdWdoIGluZm9ybWF0aW9uIHRvIGZpbmQgdGhlIGxlbmd0aCBvZiB0aGVcbiAqIGZvbGxvd2luZyB2YWx1ZS5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL2VuY29kaW5nI3N0cnVjdHVyZVxuICovXG52YXIgV2lyZVR5cGU7XG4oZnVuY3Rpb24gKFdpcmVUeXBlKSB7XG4gICAgLyoqXG4gICAgICogVXNlZCBmb3IgaW50MzIsIGludDY0LCB1aW50MzIsIHVpbnQ2NCwgc2ludDMyLCBzaW50NjQsIGJvb2wsIGVudW1cbiAgICAgKi9cbiAgICBXaXJlVHlwZVtXaXJlVHlwZVtcIlZhcmludFwiXSA9IDBdID0gXCJWYXJpbnRcIjtcbiAgICAvKipcbiAgICAgKiBVc2VkIGZvciBmaXhlZDY0LCBzZml4ZWQ2NCwgZG91YmxlLlxuICAgICAqIEFsd2F5cyA4IGJ5dGVzIHdpdGggbGl0dGxlLWVuZGlhbiBieXRlIG9yZGVyLlxuICAgICAqL1xuICAgIFdpcmVUeXBlW1dpcmVUeXBlW1wiQml0NjRcIl0gPSAxXSA9IFwiQml0NjRcIjtcbiAgICAvKipcbiAgICAgKiBVc2VkIGZvciBzdHJpbmcsIGJ5dGVzLCBlbWJlZGRlZCBtZXNzYWdlcywgcGFja2VkIHJlcGVhdGVkIGZpZWxkc1xuICAgICAqXG4gICAgICogT25seSByZXBlYXRlZCBudW1lcmljIHR5cGVzICh0eXBlcyB3aGljaCB1c2UgdGhlIHZhcmludCwgMzItYml0LFxuICAgICAqIG9yIDY0LWJpdCB3aXJlIHR5cGVzKSBjYW4gYmUgcGFja2VkLiBJbiBwcm90bzMsIHN1Y2ggZmllbGRzIGFyZVxuICAgICAqIHBhY2tlZCBieSBkZWZhdWx0LlxuICAgICAqL1xuICAgIFdpcmVUeXBlW1dpcmVUeXBlW1wiTGVuZ3RoRGVsaW1pdGVkXCJdID0gMl0gPSBcIkxlbmd0aERlbGltaXRlZFwiO1xuICAgIC8qKlxuICAgICAqIFVzZWQgZm9yIGdyb3Vwc1xuICAgICAqIEBkZXByZWNhdGVkXG4gICAgICovXG4gICAgV2lyZVR5cGVbV2lyZVR5cGVbXCJTdGFydEdyb3VwXCJdID0gM10gPSBcIlN0YXJ0R3JvdXBcIjtcbiAgICAvKipcbiAgICAgKiBVc2VkIGZvciBncm91cHNcbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqL1xuICAgIFdpcmVUeXBlW1dpcmVUeXBlW1wiRW5kR3JvdXBcIl0gPSA0XSA9IFwiRW5kR3JvdXBcIjtcbiAgICAvKipcbiAgICAgKiBVc2VkIGZvciBmaXhlZDMyLCBzZml4ZWQzMiwgZmxvYXQuXG4gICAgICogQWx3YXlzIDQgYnl0ZXMgd2l0aCBsaXR0bGUtZW5kaWFuIGJ5dGUgb3JkZXIuXG4gICAgICovXG4gICAgV2lyZVR5cGVbV2lyZVR5cGVbXCJCaXQzMlwiXSA9IDVdID0gXCJCaXQzMlwiO1xufSkoV2lyZVR5cGUgPSBleHBvcnRzLldpcmVUeXBlIHx8IChleHBvcnRzLldpcmVUeXBlID0ge30pKTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vXG4vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbi8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmVcbi8vIG1ldDpcbi8vXG4vLyAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4vLyAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmVcbi8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXJcbi8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGVcbi8vIGRpc3RyaWJ1dGlvbi5cbi8vICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0c1xuLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb21cbi8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG4vL1xuLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SU1xuLy8gXCJBUyBJU1wiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVFxuLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SXG4vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVFxuLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsXG4vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UXG4vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSxcbi8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWVxuLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFXG4vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuLy9cbi8vIENvZGUgZ2VuZXJhdGVkIGJ5IHRoZSBQcm90b2NvbCBCdWZmZXIgY29tcGlsZXIgaXMgb3duZWQgYnkgdGhlIG93bmVyXG4vLyBvZiB0aGUgaW5wdXQgZmlsZSB1c2VkIHdoZW4gZ2VuZXJhdGluZyBpdC4gIFRoaXMgY29kZSBpcyBub3Rcbi8vIHN0YW5kYWxvbmUgYW5kIHJlcXVpcmVzIGEgc3VwcG9ydCBsaWJyYXJ5IHRvIGJlIGxpbmtlZCB3aXRoIGl0LiAgVGhpc1xuLy8gc3VwcG9ydCBsaWJyYXJ5IGlzIGl0c2VsZiBjb3ZlcmVkIGJ5IHRoZSBhYm92ZSBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy52YXJpbnQzMnJlYWQgPSBleHBvcnRzLnZhcmludDMyd3JpdGUgPSBleHBvcnRzLmludDY0dG9TdHJpbmcgPSBleHBvcnRzLmludDY0ZnJvbVN0cmluZyA9IGV4cG9ydHMudmFyaW50NjR3cml0ZSA9IGV4cG9ydHMudmFyaW50NjRyZWFkID0gdm9pZCAwO1xuLyoqXG4gKiBSZWFkIGEgNjQgYml0IHZhcmludCBhcyB0d28gSlMgbnVtYmVycy5cbiAqXG4gKiBSZXR1cm5zIHR1cGxlOlxuICogWzBdOiBsb3cgYml0c1xuICogWzBdOiBoaWdoIGJpdHNcbiAqXG4gKiBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3Byb3RvY29sYnVmZmVycy9wcm90b2J1Zi9ibG9iLzhhNzE5MjdkNzRhNGNlMzRlZmUyZDg3NjlmZGExOThmNTJkMjBkMTIvanMvZXhwZXJpbWVudGFsL3J1bnRpbWUva2VybmVsL2J1ZmZlcl9kZWNvZGVyLmpzI0wxNzVcbiAqL1xuZnVuY3Rpb24gdmFyaW50NjRyZWFkKCkge1xuICAgIGxldCBsb3dCaXRzID0gMDtcbiAgICBsZXQgaGlnaEJpdHMgPSAwO1xuICAgIGZvciAobGV0IHNoaWZ0ID0gMDsgc2hpZnQgPCAyODsgc2hpZnQgKz0gNykge1xuICAgICAgICBsZXQgYiA9IHRoaXMuYnVmW3RoaXMucG9zKytdO1xuICAgICAgICBsb3dCaXRzIHw9IChiICYgMHg3RikgPDwgc2hpZnQ7XG4gICAgICAgIGlmICgoYiAmIDB4ODApID09IDApIHtcbiAgICAgICAgICAgIHRoaXMuYXNzZXJ0Qm91bmRzKCk7XG4gICAgICAgICAgICByZXR1cm4gW2xvd0JpdHMsIGhpZ2hCaXRzXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBsZXQgbWlkZGxlQnl0ZSA9IHRoaXMuYnVmW3RoaXMucG9zKytdO1xuICAgIC8vIGxhc3QgZm91ciBiaXRzIG9mIHRoZSBmaXJzdCAzMiBiaXQgbnVtYmVyXG4gICAgbG93Qml0cyB8PSAobWlkZGxlQnl0ZSAmIDB4MEYpIDw8IDI4O1xuICAgIC8vIDMgdXBwZXIgYml0cyBhcmUgcGFydCBvZiB0aGUgbmV4dCAzMiBiaXQgbnVtYmVyXG4gICAgaGlnaEJpdHMgPSAobWlkZGxlQnl0ZSAmIDB4NzApID4+IDQ7XG4gICAgaWYgKChtaWRkbGVCeXRlICYgMHg4MCkgPT0gMCkge1xuICAgICAgICB0aGlzLmFzc2VydEJvdW5kcygpO1xuICAgICAgICByZXR1cm4gW2xvd0JpdHMsIGhpZ2hCaXRzXTtcbiAgICB9XG4gICAgZm9yIChsZXQgc2hpZnQgPSAzOyBzaGlmdCA8PSAzMTsgc2hpZnQgKz0gNykge1xuICAgICAgICBsZXQgYiA9IHRoaXMuYnVmW3RoaXMucG9zKytdO1xuICAgICAgICBoaWdoQml0cyB8PSAoYiAmIDB4N0YpIDw8IHNoaWZ0O1xuICAgICAgICBpZiAoKGIgJiAweDgwKSA9PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmFzc2VydEJvdW5kcygpO1xuICAgICAgICAgICAgcmV0dXJuIFtsb3dCaXRzLCBoaWdoQml0c107XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHZhcmludCcpO1xufVxuZXhwb3J0cy52YXJpbnQ2NHJlYWQgPSB2YXJpbnQ2NHJlYWQ7XG4vKipcbiAqIFdyaXRlIGEgNjQgYml0IHZhcmludCwgZ2l2ZW4gYXMgdHdvIEpTIG51bWJlcnMsIHRvIHRoZSBnaXZlbiBieXRlcyBhcnJheS5cbiAqXG4gKiBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3Byb3RvY29sYnVmZmVycy9wcm90b2J1Zi9ibG9iLzhhNzE5MjdkNzRhNGNlMzRlZmUyZDg3NjlmZGExOThmNTJkMjBkMTIvanMvZXhwZXJpbWVudGFsL3J1bnRpbWUva2VybmVsL3dyaXRlci5qcyNMMzQ0XG4gKi9cbmZ1bmN0aW9uIHZhcmludDY0d3JpdGUobG8sIGhpLCBieXRlcykge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMjg7IGkgPSBpICsgNykge1xuICAgICAgICBjb25zdCBzaGlmdCA9IGxvID4+PiBpO1xuICAgICAgICBjb25zdCBoYXNOZXh0ID0gISgoc2hpZnQgPj4+IDcpID09IDAgJiYgaGkgPT0gMCk7XG4gICAgICAgIGNvbnN0IGJ5dGUgPSAoaGFzTmV4dCA/IHNoaWZ0IHwgMHg4MCA6IHNoaWZ0KSAmIDB4RkY7XG4gICAgICAgIGJ5dGVzLnB1c2goYnl0ZSk7XG4gICAgICAgIGlmICghaGFzTmV4dCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHNwbGl0Qml0cyA9ICgobG8gPj4+IDI4KSAmIDB4MEYpIHwgKChoaSAmIDB4MDcpIDw8IDQpO1xuICAgIGNvbnN0IGhhc01vcmVCaXRzID0gISgoaGkgPj4gMykgPT0gMCk7XG4gICAgYnl0ZXMucHVzaCgoaGFzTW9yZUJpdHMgPyBzcGxpdEJpdHMgfCAweDgwIDogc3BsaXRCaXRzKSAmIDB4RkYpO1xuICAgIGlmICghaGFzTW9yZUJpdHMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMzsgaSA8IDMxOyBpID0gaSArIDcpIHtcbiAgICAgICAgY29uc3Qgc2hpZnQgPSBoaSA+Pj4gaTtcbiAgICAgICAgY29uc3QgaGFzTmV4dCA9ICEoKHNoaWZ0ID4+PiA3KSA9PSAwKTtcbiAgICAgICAgY29uc3QgYnl0ZSA9IChoYXNOZXh0ID8gc2hpZnQgfCAweDgwIDogc2hpZnQpICYgMHhGRjtcbiAgICAgICAgYnl0ZXMucHVzaChieXRlKTtcbiAgICAgICAgaWYgKCFoYXNOZXh0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG4gICAgYnl0ZXMucHVzaCgoaGkgPj4+IDMxKSAmIDB4MDEpO1xufVxuZXhwb3J0cy52YXJpbnQ2NHdyaXRlID0gdmFyaW50NjR3cml0ZTtcbi8vIGNvbnN0YW50cyBmb3IgYmluYXJ5IG1hdGhcbmNvbnN0IFRXT19QV1JfMzJfREJMID0gKDEgPDwgMTYpICogKDEgPDwgMTYpO1xuLyoqXG4gKiBQYXJzZSBkZWNpbWFsIHN0cmluZyBvZiA2NCBiaXQgaW50ZWdlciB2YWx1ZSBhcyB0d28gSlMgbnVtYmVycy5cbiAqXG4gKiBSZXR1cm5zIHR1cGxlOlxuICogWzBdOiBtaW51cyBzaWduP1xuICogWzFdOiBsb3cgYml0c1xuICogWzJdOiBoaWdoIGJpdHNcbiAqXG4gKiBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLlxuICovXG5mdW5jdGlvbiBpbnQ2NGZyb21TdHJpbmcoZGVjKSB7XG4gICAgLy8gQ2hlY2sgZm9yIG1pbnVzIHNpZ24uXG4gICAgbGV0IG1pbnVzID0gZGVjWzBdID09ICctJztcbiAgICBpZiAobWludXMpXG4gICAgICAgIGRlYyA9IGRlYy5zbGljZSgxKTtcbiAgICAvLyBXb3JrIDYgZGVjaW1hbCBkaWdpdHMgYXQgYSB0aW1lLCBhY3RpbmcgbGlrZSB3ZSdyZSBjb252ZXJ0aW5nIGJhc2UgMWU2XG4gICAgLy8gZGlnaXRzIHRvIGJpbmFyeS4gVGhpcyBpcyBzYWZlIHRvIGRvIHdpdGggZmxvYXRpbmcgcG9pbnQgbWF0aCBiZWNhdXNlXG4gICAgLy8gTnVtYmVyLmlzU2FmZUludGVnZXIoQUxMXzMyX0JJVFMgKiAxZTYpID09IHRydWUuXG4gICAgY29uc3QgYmFzZSA9IDFlNjtcbiAgICBsZXQgbG93Qml0cyA9IDA7XG4gICAgbGV0IGhpZ2hCaXRzID0gMDtcbiAgICBmdW5jdGlvbiBhZGQxZTZkaWdpdChiZWdpbiwgZW5kKSB7XG4gICAgICAgIC8vIE5vdGU6IE51bWJlcignJykgaXMgMC5cbiAgICAgICAgY29uc3QgZGlnaXQxZTYgPSBOdW1iZXIoZGVjLnNsaWNlKGJlZ2luLCBlbmQpKTtcbiAgICAgICAgaGlnaEJpdHMgKj0gYmFzZTtcbiAgICAgICAgbG93Qml0cyA9IGxvd0JpdHMgKiBiYXNlICsgZGlnaXQxZTY7XG4gICAgICAgIC8vIENhcnJ5IGJpdHMgZnJvbSBsb3dCaXRzIHRvIGhpZ2hCaXRzXG4gICAgICAgIGlmIChsb3dCaXRzID49IFRXT19QV1JfMzJfREJMKSB7XG4gICAgICAgICAgICBoaWdoQml0cyA9IGhpZ2hCaXRzICsgKChsb3dCaXRzIC8gVFdPX1BXUl8zMl9EQkwpIHwgMCk7XG4gICAgICAgICAgICBsb3dCaXRzID0gbG93Qml0cyAlIFRXT19QV1JfMzJfREJMO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFkZDFlNmRpZ2l0KC0yNCwgLTE4KTtcbiAgICBhZGQxZTZkaWdpdCgtMTgsIC0xMik7XG4gICAgYWRkMWU2ZGlnaXQoLTEyLCAtNik7XG4gICAgYWRkMWU2ZGlnaXQoLTYpO1xuICAgIHJldHVybiBbbWludXMsIGxvd0JpdHMsIGhpZ2hCaXRzXTtcbn1cbmV4cG9ydHMuaW50NjRmcm9tU3RyaW5nID0gaW50NjRmcm9tU3RyaW5nO1xuLyoqXG4gKiBGb3JtYXQgNjQgYml0IGludGVnZXIgdmFsdWUgKGFzIHR3byBKUyBudW1iZXJzKSB0byBkZWNpbWFsIHN0cmluZy5cbiAqXG4gKiBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLlxuICovXG5mdW5jdGlvbiBpbnQ2NHRvU3RyaW5nKGJpdHNMb3csIGJpdHNIaWdoKSB7XG4gICAgLy8gU2tpcCB0aGUgZXhwZW5zaXZlIGNvbnZlcnNpb24gaWYgdGhlIG51bWJlciBpcyBzbWFsbCBlbm91Z2ggdG8gdXNlIHRoZVxuICAgIC8vIGJ1aWx0LWluIGNvbnZlcnNpb25zLlxuICAgIGlmICgoYml0c0hpZ2ggPj4+IDApIDw9IDB4MUZGRkZGKSB7XG4gICAgICAgIHJldHVybiAnJyArIChUV09fUFdSXzMyX0RCTCAqIGJpdHNIaWdoICsgKGJpdHNMb3cgPj4+IDApKTtcbiAgICB9XG4gICAgLy8gV2hhdCB0aGlzIGNvZGUgaXMgZG9pbmcgaXMgZXNzZW50aWFsbHkgY29udmVydGluZyB0aGUgaW5wdXQgbnVtYmVyIGZyb21cbiAgICAvLyBiYXNlLTIgdG8gYmFzZS0xZTcsIHdoaWNoIGFsbG93cyB1cyB0byByZXByZXNlbnQgdGhlIDY0LWJpdCByYW5nZSB3aXRoXG4gICAgLy8gb25seSAzICh2ZXJ5IGxhcmdlKSBkaWdpdHMuIFRob3NlIGRpZ2l0cyBhcmUgdGhlbiB0cml2aWFsIHRvIGNvbnZlcnQgdG9cbiAgICAvLyBhIGJhc2UtMTAgc3RyaW5nLlxuICAgIC8vIFRoZSBtYWdpYyBudW1iZXJzIHVzZWQgaGVyZSBhcmUgLVxuICAgIC8vIDJeMjQgPSAxNjc3NzIxNiA9ICgxLDY3NzcyMTYpIGluIGJhc2UtMWU3LlxuICAgIC8vIDJeNDggPSAyODE0NzQ5NzY3MTA2NTYgPSAoMiw4MTQ3NDk3LDY3MTA2NTYpIGluIGJhc2UtMWU3LlxuICAgIC8vIFNwbGl0IDMyOjMyIHJlcHJlc2VudGF0aW9uIGludG8gMTY6MjQ6MjQgcmVwcmVzZW50YXRpb24gc28gb3VyXG4gICAgLy8gaW50ZXJtZWRpYXRlIGRpZ2l0cyBkb24ndCBvdmVyZmxvdy5cbiAgICBsZXQgbG93ID0gYml0c0xvdyAmIDB4RkZGRkZGO1xuICAgIGxldCBtaWQgPSAoKChiaXRzTG93ID4+PiAyNCkgfCAoYml0c0hpZ2ggPDwgOCkpID4+PiAwKSAmIDB4RkZGRkZGO1xuICAgIGxldCBoaWdoID0gKGJpdHNIaWdoID4+IDE2KSAmIDB4RkZGRjtcbiAgICAvLyBBc3NlbWJsZSBvdXIgdGhyZWUgYmFzZS0xZTcgZGlnaXRzLCBpZ25vcmluZyBjYXJyaWVzLiBUaGUgbWF4aW11bVxuICAgIC8vIHZhbHVlIGluIGEgZGlnaXQgYXQgdGhpcyBzdGVwIGlzIHJlcHJlc2VudGFibGUgYXMgYSA0OC1iaXQgaW50ZWdlciwgd2hpY2hcbiAgICAvLyBjYW4gYmUgc3RvcmVkIGluIGEgNjQtYml0IGZsb2F0aW5nIHBvaW50IG51bWJlci5cbiAgICBsZXQgZGlnaXRBID0gbG93ICsgKG1pZCAqIDY3NzcyMTYpICsgKGhpZ2ggKiA2NzEwNjU2KTtcbiAgICBsZXQgZGlnaXRCID0gbWlkICsgKGhpZ2ggKiA4MTQ3NDk3KTtcbiAgICBsZXQgZGlnaXRDID0gKGhpZ2ggKiAyKTtcbiAgICAvLyBBcHBseSBjYXJyaWVzIGZyb20gQSB0byBCIGFuZCBmcm9tIEIgdG8gQy5cbiAgICBsZXQgYmFzZSA9IDEwMDAwMDAwO1xuICAgIGlmIChkaWdpdEEgPj0gYmFzZSkge1xuICAgICAgICBkaWdpdEIgKz0gTWF0aC5mbG9vcihkaWdpdEEgLyBiYXNlKTtcbiAgICAgICAgZGlnaXRBICU9IGJhc2U7XG4gICAgfVxuICAgIGlmIChkaWdpdEIgPj0gYmFzZSkge1xuICAgICAgICBkaWdpdEMgKz0gTWF0aC5mbG9vcihkaWdpdEIgLyBiYXNlKTtcbiAgICAgICAgZGlnaXRCICU9IGJhc2U7XG4gICAgfVxuICAgIC8vIENvbnZlcnQgYmFzZS0xZTcgZGlnaXRzIHRvIGJhc2UtMTAsIHdpdGggb3B0aW9uYWwgbGVhZGluZyB6ZXJvZXMuXG4gICAgZnVuY3Rpb24gZGVjaW1hbEZyb20xZTcoZGlnaXQxZTcsIG5lZWRMZWFkaW5nWmVyb3MpIHtcbiAgICAgICAgbGV0IHBhcnRpYWwgPSBkaWdpdDFlNyA/IFN0cmluZyhkaWdpdDFlNykgOiAnJztcbiAgICAgICAgaWYgKG5lZWRMZWFkaW5nWmVyb3MpIHtcbiAgICAgICAgICAgIHJldHVybiAnMDAwMDAwMCcuc2xpY2UocGFydGlhbC5sZW5ndGgpICsgcGFydGlhbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFydGlhbDtcbiAgICB9XG4gICAgcmV0dXJuIGRlY2ltYWxGcm9tMWU3KGRpZ2l0QywgLypuZWVkTGVhZGluZ1plcm9zPSovIDApICtcbiAgICAgICAgZGVjaW1hbEZyb20xZTcoZGlnaXRCLCAvKm5lZWRMZWFkaW5nWmVyb3M9Ki8gZGlnaXRDKSArXG4gICAgICAgIC8vIElmIHRoZSBmaW5hbCAxZTcgZGlnaXQgZGlkbid0IG5lZWQgbGVhZGluZyB6ZXJvcywgd2Ugd291bGQgaGF2ZVxuICAgICAgICAvLyByZXR1cm5lZCB2aWEgdGhlIHRyaXZpYWwgY29kZSBwYXRoIGF0IHRoZSB0b3AuXG4gICAgICAgIGRlY2ltYWxGcm9tMWU3KGRpZ2l0QSwgLypuZWVkTGVhZGluZ1plcm9zPSovIDEpO1xufVxuZXhwb3J0cy5pbnQ2NHRvU3RyaW5nID0gaW50NjR0b1N0cmluZztcbi8qKlxuICogV3JpdGUgYSAzMiBiaXQgdmFyaW50LCBzaWduZWQgb3IgdW5zaWduZWQuIFNhbWUgYXMgYHZhcmludDY0d3JpdGUoMCwgdmFsdWUsIGJ5dGVzKWBcbiAqXG4gKiBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3Byb3RvY29sYnVmZmVycy9wcm90b2J1Zi9ibG9iLzFiMTg4MzNmNGYyYTJmNjgxZjRlNGEyNWNkZjNiMGE0MzExNWVjMjYvanMvYmluYXJ5L2VuY29kZXIuanMjTDE0NFxuICovXG5mdW5jdGlvbiB2YXJpbnQzMndyaXRlKHZhbHVlLCBieXRlcykge1xuICAgIGlmICh2YWx1ZSA+PSAwKSB7XG4gICAgICAgIC8vIHdyaXRlIHZhbHVlIGFzIHZhcmludCAzMlxuICAgICAgICB3aGlsZSAodmFsdWUgPiAweDdmKSB7XG4gICAgICAgICAgICBieXRlcy5wdXNoKCh2YWx1ZSAmIDB4N2YpIHwgMHg4MCk7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlID4+PiA3O1xuICAgICAgICB9XG4gICAgICAgIGJ5dGVzLnB1c2godmFsdWUpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA5OyBpKyspIHtcbiAgICAgICAgICAgIGJ5dGVzLnB1c2godmFsdWUgJiAxMjcgfCAxMjgpO1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSA+PiA3O1xuICAgICAgICB9XG4gICAgICAgIGJ5dGVzLnB1c2goMSk7XG4gICAgfVxufVxuZXhwb3J0cy52YXJpbnQzMndyaXRlID0gdmFyaW50MzJ3cml0ZTtcbi8qKlxuICogUmVhZCBhbiB1bnNpZ25lZCAzMiBiaXQgdmFyaW50LlxuICpcbiAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vcHJvdG9jb2xidWZmZXJzL3Byb3RvYnVmL2Jsb2IvOGE3MTkyN2Q3NGE0Y2UzNGVmZTJkODc2OWZkYTE5OGY1MmQyMGQxMi9qcy9leHBlcmltZW50YWwvcnVudGltZS9rZXJuZWwvYnVmZmVyX2RlY29kZXIuanMjTDIyMFxuICovXG5mdW5jdGlvbiB2YXJpbnQzMnJlYWQoKSB7XG4gICAgbGV0IGIgPSB0aGlzLmJ1Zlt0aGlzLnBvcysrXTtcbiAgICBsZXQgcmVzdWx0ID0gYiAmIDB4N0Y7XG4gICAgaWYgKChiICYgMHg4MCkgPT0gMCkge1xuICAgICAgICB0aGlzLmFzc2VydEJvdW5kcygpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBiID0gdGhpcy5idWZbdGhpcy5wb3MrK107XG4gICAgcmVzdWx0IHw9IChiICYgMHg3RikgPDwgNztcbiAgICBpZiAoKGIgJiAweDgwKSA9PSAwKSB7XG4gICAgICAgIHRoaXMuYXNzZXJ0Qm91bmRzKCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGIgPSB0aGlzLmJ1Zlt0aGlzLnBvcysrXTtcbiAgICByZXN1bHQgfD0gKGIgJiAweDdGKSA8PCAxNDtcbiAgICBpZiAoKGIgJiAweDgwKSA9PSAwKSB7XG4gICAgICAgIHRoaXMuYXNzZXJ0Qm91bmRzKCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGIgPSB0aGlzLmJ1Zlt0aGlzLnBvcysrXTtcbiAgICByZXN1bHQgfD0gKGIgJiAweDdGKSA8PCAyMTtcbiAgICBpZiAoKGIgJiAweDgwKSA9PSAwKSB7XG4gICAgICAgIHRoaXMuYXNzZXJ0Qm91bmRzKCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIC8vIEV4dHJhY3Qgb25seSBsYXN0IDQgYml0c1xuICAgIGIgPSB0aGlzLmJ1Zlt0aGlzLnBvcysrXTtcbiAgICByZXN1bHQgfD0gKGIgJiAweDBGKSA8PCAyODtcbiAgICBmb3IgKGxldCByZWFkQnl0ZXMgPSA1OyAoKGIgJiAweDgwKSAhPT0gMCkgJiYgcmVhZEJ5dGVzIDwgMTA7IHJlYWRCeXRlcysrKVxuICAgICAgICBiID0gdGhpcy5idWZbdGhpcy5wb3MrK107XG4gICAgaWYgKChiICYgMHg4MCkgIT0gMClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHZhcmludCcpO1xuICAgIHRoaXMuYXNzZXJ0Qm91bmRzKCk7XG4gICAgLy8gUmVzdWx0IGNhbiBoYXZlIDMyIGJpdHMsIGNvbnZlcnQgaXQgdG8gdW5zaWduZWRcbiAgICByZXR1cm4gcmVzdWx0ID4+PiAwO1xufVxuZXhwb3J0cy52YXJpbnQzMnJlYWQgPSB2YXJpbnQzMnJlYWQ7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5QYkxvbmcgPSBleHBvcnRzLlBiVUxvbmcgPSBleHBvcnRzLmRldGVjdEJpID0gdm9pZCAwO1xuY29uc3QgZ29vZ192YXJpbnRfMSA9IHJlcXVpcmUoXCIuL2dvb2ctdmFyaW50XCIpO1xubGV0IEJJO1xuZnVuY3Rpb24gZGV0ZWN0QmkoKSB7XG4gICAgY29uc3QgZHYgPSBuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDgpKTtcbiAgICBjb25zdCBvayA9IGdsb2JhbFRoaXMuQmlnSW50ICE9PSB1bmRlZmluZWRcbiAgICAgICAgJiYgdHlwZW9mIGR2LmdldEJpZ0ludDY0ID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgJiYgdHlwZW9mIGR2LmdldEJpZ1VpbnQ2NCA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICYmIHR5cGVvZiBkdi5zZXRCaWdJbnQ2NCA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICYmIHR5cGVvZiBkdi5zZXRCaWdVaW50NjQgPT09IFwiZnVuY3Rpb25cIjtcbiAgICBCSSA9IG9rID8ge1xuICAgICAgICBNSU46IEJpZ0ludChcIi05MjIzMzcyMDM2ODU0Nzc1ODA4XCIpLFxuICAgICAgICBNQVg6IEJpZ0ludChcIjkyMjMzNzIwMzY4NTQ3NzU4MDdcIiksXG4gICAgICAgIFVNSU46IEJpZ0ludChcIjBcIiksXG4gICAgICAgIFVNQVg6IEJpZ0ludChcIjE4NDQ2NzQ0MDczNzA5NTUxNjE1XCIpLFxuICAgICAgICBDOiBCaWdJbnQsXG4gICAgICAgIFY6IGR2LFxuICAgIH0gOiB1bmRlZmluZWQ7XG59XG5leHBvcnRzLmRldGVjdEJpID0gZGV0ZWN0Qmk7XG5kZXRlY3RCaSgpO1xuZnVuY3Rpb24gYXNzZXJ0QmkoYmkpIHtcbiAgICBpZiAoIWJpKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCaWdJbnQgdW5hdmFpbGFibGUsIHNlZSBodHRwczovL2dpdGh1Yi5jb20vdGltb3N0YW1tL3Byb3RvYnVmLXRzL2Jsb2IvdjEuMC44L01BTlVBTC5tZCNiaWdpbnQtc3VwcG9ydFwiKTtcbn1cbi8vIHVzZWQgdG8gdmFsaWRhdGUgZnJvbShzdHJpbmcpIGlucHV0ICh3aGVuIGJpZ2ludCBpcyB1bmF2YWlsYWJsZSlcbmNvbnN0IFJFX0RFQ0lNQUxfU1RSID0gL14tP1swLTldKyQvO1xuLy8gY29uc3RhbnRzIGZvciBiaW5hcnkgbWF0aFxuY29uc3QgVFdPX1BXUl8zMl9EQkwgPSAweDEwMDAwMDAwMDtcbmNvbnN0IEhBTEZfMl9QV1JfMzIgPSAweDA4MDAwMDAwMDtcbi8vIGJhc2UgY2xhc3MgZm9yIFBiTG9uZyBhbmQgUGJVTG9uZyBwcm92aWRlcyBzaGFyZWQgY29kZVxuY2xhc3MgU2hhcmVkUGJMb25nIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugd2l0aCB0aGUgZ2l2ZW4gYml0cy5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihsbywgaGkpIHtcbiAgICAgICAgdGhpcy5sbyA9IGxvIHwgMDtcbiAgICAgICAgdGhpcy5oaSA9IGhpIHwgMDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSXMgdGhpcyBpbnN0YW5jZSBlcXVhbCB0byAwP1xuICAgICAqL1xuICAgIGlzWmVybygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG8gPT0gMCAmJiB0aGlzLmhpID09IDA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgdG8gYSBuYXRpdmUgbnVtYmVyLlxuICAgICAqL1xuICAgIHRvTnVtYmVyKCkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gdGhpcy5oaSAqIFRXT19QV1JfMzJfREJMICsgKHRoaXMubG8gPj4+IDApO1xuICAgICAgICBpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKHJlc3VsdCkpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJjYW5ub3QgY29udmVydCB0byBzYWZlIG51bWJlclwiKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vKipcbiAqIDY0LWJpdCB1bnNpZ25lZCBpbnRlZ2VyIGFzIHR3byAzMi1iaXQgdmFsdWVzLlxuICogQ29udmVydHMgYmV0d2VlbiBgc3RyaW5nYCwgYG51bWJlcmAgYW5kIGBiaWdpbnRgIHJlcHJlc2VudGF0aW9ucy5cbiAqL1xuY2xhc3MgUGJVTG9uZyBleHRlbmRzIFNoYXJlZFBiTG9uZyB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGluc3RhbmNlIGZyb20gYSBgc3RyaW5nYCwgYG51bWJlcmAgb3IgYGJpZ2ludGAuXG4gICAgICovXG4gICAgc3RhdGljIGZyb20odmFsdWUpIHtcbiAgICAgICAgaWYgKEJJKVxuICAgICAgICAgICAgLy8gbm9pbnNwZWN0aW9uIEZhbGxUaHJvdWdoSW5Td2l0Y2hTdGF0ZW1lbnRKU1xuICAgICAgICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBcIjBcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLlpFUk87XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBcIlwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzdHJpbmcgaXMgbm8gaW50ZWdlcicpO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IEJJLkModmFsdWUpO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuWkVSTztcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBCSS5DKHZhbHVlKTtcbiAgICAgICAgICAgICAgICBjYXNlIFwiYmlnaW50XCI6XG4gICAgICAgICAgICAgICAgICAgIGlmICghdmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5aRVJPO1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPCBCSS5VTUlOKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzaWduZWQgdmFsdWUgZm9yIHVsb25nJyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA+IEJJLlVNQVgpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vsb25nIHRvbyBsYXJnZScpO1xuICAgICAgICAgICAgICAgICAgICBCSS5WLnNldEJpZ1VpbnQ2NCgwLCB2YWx1ZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUGJVTG9uZyhCSS5WLmdldEludDMyKDAsIHRydWUpLCBCSS5WLmdldEludDMyKDQsIHRydWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBcIjBcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLlpFUk87XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUudHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIVJFX0RFQ0lNQUxfU1RSLnRlc3QodmFsdWUpKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzdHJpbmcgaXMgbm8gaW50ZWdlcicpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgW21pbnVzLCBsbywgaGldID0gZ29vZ192YXJpbnRfMS5pbnQ2NGZyb21TdHJpbmcodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobWludXMpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NpZ25lZCB2YWx1ZSBmb3IgdWxvbmcnKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQYlVMb25nKGxvLCBoaSk7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLlpFUk87XG4gICAgICAgICAgICAgICAgICAgIGlmICghTnVtYmVyLmlzU2FmZUludGVnZXIodmFsdWUpKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdudW1iZXIgaXMgbm8gaW50ZWdlcicpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPCAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzaWduZWQgdmFsdWUgZm9yIHVsb25nJyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUGJVTG9uZyh2YWx1ZSwgdmFsdWUgLyBUV09fUFdSXzMyX0RCTCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biB2YWx1ZSAnICsgdHlwZW9mIHZhbHVlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29udmVydCB0byBkZWNpbWFsIHN0cmluZy5cbiAgICAgKi9cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIEJJID8gdGhpcy50b0JpZ0ludCgpLnRvU3RyaW5nKCkgOiBnb29nX3ZhcmludF8xLmludDY0dG9TdHJpbmcodGhpcy5sbywgdGhpcy5oaSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgdG8gbmF0aXZlIGJpZ2ludC5cbiAgICAgKi9cbiAgICB0b0JpZ0ludCgpIHtcbiAgICAgICAgYXNzZXJ0QmkoQkkpO1xuICAgICAgICBCSS5WLnNldEludDMyKDAsIHRoaXMubG8sIHRydWUpO1xuICAgICAgICBCSS5WLnNldEludDMyKDQsIHRoaXMuaGksIHRydWUpO1xuICAgICAgICByZXR1cm4gQkkuVi5nZXRCaWdVaW50NjQoMCwgdHJ1ZSk7XG4gICAgfVxufVxuZXhwb3J0cy5QYlVMb25nID0gUGJVTG9uZztcbi8qKlxuICogdWxvbmcgMCBzaW5nbGV0b24uXG4gKi9cblBiVUxvbmcuWkVSTyA9IG5ldyBQYlVMb25nKDAsIDApO1xuLyoqXG4gKiA2NC1iaXQgc2lnbmVkIGludGVnZXIgYXMgdHdvIDMyLWJpdCB2YWx1ZXMuXG4gKiBDb252ZXJ0cyBiZXR3ZWVuIGBzdHJpbmdgLCBgbnVtYmVyYCBhbmQgYGJpZ2ludGAgcmVwcmVzZW50YXRpb25zLlxuICovXG5jbGFzcyBQYkxvbmcgZXh0ZW5kcyBTaGFyZWRQYkxvbmcge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZSBpbnN0YW5jZSBmcm9tIGEgYHN0cmluZ2AsIGBudW1iZXJgIG9yIGBiaWdpbnRgLlxuICAgICAqL1xuICAgIHN0YXRpYyBmcm9tKHZhbHVlKSB7XG4gICAgICAgIGlmIChCSSlcbiAgICAgICAgICAgIC8vIG5vaW5zcGVjdGlvbiBGYWxsVGhyb3VnaEluU3dpdGNoU3RhdGVtZW50SlNcbiAgICAgICAgICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gXCIwXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5aRVJPO1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gXCJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc3RyaW5nIGlzIG5vIGludGVnZXInKTtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBCSS5DKHZhbHVlKTtcbiAgICAgICAgICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLlpFUk87XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gQkkuQyh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgY2FzZSBcImJpZ2ludFwiOlxuICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuWkVSTztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlIDwgQkkuTUlOKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzaWduZWQgbG9uZyB0b28gc21hbGwnKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID4gQkkuTUFYKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzaWduZWQgbG9uZyB0b28gbGFyZ2UnKTtcbiAgICAgICAgICAgICAgICAgICAgQkkuVi5zZXRCaWdJbnQ2NCgwLCB2YWx1ZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUGJMb25nKEJJLlYuZ2V0SW50MzIoMCwgdHJ1ZSksIEJJLlYuZ2V0SW50MzIoNCwgdHJ1ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IFwiMFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuWkVSTztcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS50cmltKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghUkVfREVDSU1BTF9TVFIudGVzdCh2YWx1ZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N0cmluZyBpcyBubyBpbnRlZ2VyJyk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBbbWludXMsIGxvLCBoaV0gPSBnb29nX3ZhcmludF8xLmludDY0ZnJvbVN0cmluZyh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtaW51cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhpID4gSEFMRl8yX1BXUl8zMiB8fCAoaGkgPT0gSEFMRl8yX1BXUl8zMiAmJiBsbyAhPSAwKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NpZ25lZCBsb25nIHRvbyBzbWFsbCcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGhpID49IEhBTEZfMl9QV1JfMzIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NpZ25lZCBsb25nIHRvbyBsYXJnZScpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgcGJsID0gbmV3IFBiTG9uZyhsbywgaGkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWludXMgPyBwYmwubmVnYXRlKCkgOiBwYmw7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLlpFUk87XG4gICAgICAgICAgICAgICAgICAgIGlmICghTnVtYmVyLmlzU2FmZUludGVnZXIodmFsdWUpKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdudW1iZXIgaXMgbm8gaW50ZWdlcicpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgPiAwXG4gICAgICAgICAgICAgICAgICAgICAgICA/IG5ldyBQYkxvbmcodmFsdWUsIHZhbHVlIC8gVFdPX1BXUl8zMl9EQkwpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG5ldyBQYkxvbmcoLXZhbHVlLCAtdmFsdWUgLyBUV09fUFdSXzMyX0RCTCkubmVnYXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biB2YWx1ZSAnICsgdHlwZW9mIHZhbHVlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRG8gd2UgaGF2ZSBhIG1pbnVzIHNpZ24/XG4gICAgICovXG4gICAgaXNOZWdhdGl2ZSgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLmhpICYgSEFMRl8yX1BXUl8zMikgIT09IDA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE5lZ2F0ZSB0d28ncyBjb21wbGVtZW50LlxuICAgICAqIEludmVydCBhbGwgdGhlIGJpdHMgYW5kIGFkZCBvbmUgdG8gdGhlIHJlc3VsdC5cbiAgICAgKi9cbiAgICBuZWdhdGUoKSB7XG4gICAgICAgIGxldCBoaSA9IH50aGlzLmhpLCBsbyA9IHRoaXMubG87XG4gICAgICAgIGlmIChsbylcbiAgICAgICAgICAgIGxvID0gfmxvICsgMTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgaGkgKz0gMTtcbiAgICAgICAgcmV0dXJuIG5ldyBQYkxvbmcobG8sIGhpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29udmVydCB0byBkZWNpbWFsIHN0cmluZy5cbiAgICAgKi9cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgaWYgKEJJKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9CaWdJbnQoKS50b1N0cmluZygpO1xuICAgICAgICBpZiAodGhpcy5pc05lZ2F0aXZlKCkpIHtcbiAgICAgICAgICAgIGxldCBuID0gdGhpcy5uZWdhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiAnLScgKyBnb29nX3ZhcmludF8xLmludDY0dG9TdHJpbmcobi5sbywgbi5oaSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdvb2dfdmFyaW50XzEuaW50NjR0b1N0cmluZyh0aGlzLmxvLCB0aGlzLmhpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29udmVydCB0byBuYXRpdmUgYmlnaW50LlxuICAgICAqL1xuICAgIHRvQmlnSW50KCkge1xuICAgICAgICBhc3NlcnRCaShCSSk7XG4gICAgICAgIEJJLlYuc2V0SW50MzIoMCwgdGhpcy5sbywgdHJ1ZSk7XG4gICAgICAgIEJJLlYuc2V0SW50MzIoNCwgdGhpcy5oaSwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiBCSS5WLmdldEJpZ0ludDY0KDAsIHRydWUpO1xuICAgIH1cbn1cbmV4cG9ydHMuUGJMb25nID0gUGJMb25nO1xuLyoqXG4gKiBsb25nIDAgc2luZ2xldG9uLlxuICovXG5QYkxvbmcuWkVSTyA9IG5ldyBQYkxvbmcoMCwgMCk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5CaW5hcnlSZWFkZXIgPSBleHBvcnRzLmJpbmFyeVJlYWRPcHRpb25zID0gdm9pZCAwO1xuY29uc3QgYmluYXJ5X2Zvcm1hdF9jb250cmFjdF8xID0gcmVxdWlyZShcIi4vYmluYXJ5LWZvcm1hdC1jb250cmFjdFwiKTtcbmNvbnN0IHBiX2xvbmdfMSA9IHJlcXVpcmUoXCIuL3BiLWxvbmdcIik7XG5jb25zdCBnb29nX3ZhcmludF8xID0gcmVxdWlyZShcIi4vZ29vZy12YXJpbnRcIik7XG5jb25zdCBkZWZhdWx0c1JlYWQgPSB7XG4gICAgcmVhZFVua25vd25GaWVsZDogdHJ1ZSxcbiAgICByZWFkZXJGYWN0b3J5OiBieXRlcyA9PiBuZXcgQmluYXJ5UmVhZGVyKGJ5dGVzKSxcbn07XG4vKipcbiAqIE1ha2Ugb3B0aW9ucyBmb3IgcmVhZGluZyBiaW5hcnkgZGF0YSBmb3JtIHBhcnRpYWwgb3B0aW9ucy5cbiAqL1xuZnVuY3Rpb24gYmluYXJ5UmVhZE9wdGlvbnMob3B0aW9ucykge1xuICAgIHJldHVybiBvcHRpb25zID8gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0c1JlYWQpLCBvcHRpb25zKSA6IGRlZmF1bHRzUmVhZDtcbn1cbmV4cG9ydHMuYmluYXJ5UmVhZE9wdGlvbnMgPSBiaW5hcnlSZWFkT3B0aW9ucztcbmNsYXNzIEJpbmFyeVJlYWRlciB7XG4gICAgY29uc3RydWN0b3IoYnVmLCB0ZXh0RGVjb2Rlcikge1xuICAgICAgICB0aGlzLnZhcmludDY0ID0gZ29vZ192YXJpbnRfMS52YXJpbnQ2NHJlYWQ7IC8vIGRpcnR5IGNhc3QgZm9yIGB0aGlzYFxuICAgICAgICAvKipcbiAgICAgICAgICogUmVhZCBhIGB1aW50MzJgIGZpZWxkLCBhbiB1bnNpZ25lZCAzMiBiaXQgdmFyaW50LlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy51aW50MzIgPSBnb29nX3ZhcmludF8xLnZhcmludDMycmVhZDsgLy8gZGlydHkgY2FzdCBmb3IgYHRoaXNgIGFuZCBhY2Nlc3MgdG8gcHJvdGVjdGVkIGBidWZgXG4gICAgICAgIHRoaXMuYnVmID0gYnVmO1xuICAgICAgICB0aGlzLmxlbiA9IGJ1Zi5sZW5ndGg7XG4gICAgICAgIHRoaXMucG9zID0gMDtcbiAgICAgICAgdGhpcy52aWV3ID0gbmV3IERhdGFWaWV3KGJ1Zi5idWZmZXIsIGJ1Zi5ieXRlT2Zmc2V0LCBidWYuYnl0ZUxlbmd0aCk7XG4gICAgICAgIHRoaXMudGV4dERlY29kZXIgPSB0ZXh0RGVjb2RlciAhPT0gbnVsbCAmJiB0ZXh0RGVjb2RlciAhPT0gdm9pZCAwID8gdGV4dERlY29kZXIgOiBuZXcgVGV4dERlY29kZXIoXCJ1dGYtOFwiLCB7XG4gICAgICAgICAgICBmYXRhbDogdHJ1ZSxcbiAgICAgICAgICAgIGlnbm9yZUJPTTogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWRzIGEgdGFnIC0gZmllbGQgbnVtYmVyIGFuZCB3aXJlIHR5cGUuXG4gICAgICovXG4gICAgdGFnKCkge1xuICAgICAgICBsZXQgdGFnID0gdGhpcy51aW50MzIoKSwgZmllbGRObyA9IHRhZyA+Pj4gMywgd2lyZVR5cGUgPSB0YWcgJiA3O1xuICAgICAgICBpZiAoZmllbGRObyA8PSAwIHx8IHdpcmVUeXBlIDwgMCB8fCB3aXJlVHlwZSA+IDUpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbGxlZ2FsIHRhZzogZmllbGQgbm8gXCIgKyBmaWVsZE5vICsgXCIgd2lyZSB0eXBlIFwiICsgd2lyZVR5cGUpO1xuICAgICAgICByZXR1cm4gW2ZpZWxkTm8sIHdpcmVUeXBlXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2tpcCBvbmUgZWxlbWVudCBvbiB0aGUgd2lyZSBhbmQgcmV0dXJuIHRoZSBza2lwcGVkIGRhdGEuXG4gICAgICogU3VwcG9ydHMgV2lyZVR5cGUuU3RhcnRHcm91cCBzaW5jZSB2Mi4wLjAtYWxwaGEuMjMuXG4gICAgICovXG4gICAgc2tpcCh3aXJlVHlwZSkge1xuICAgICAgICBsZXQgc3RhcnQgPSB0aGlzLnBvcztcbiAgICAgICAgLy8gbm9pbnNwZWN0aW9uIEZhbGxUaHJvdWdoSW5Td2l0Y2hTdGF0ZW1lbnRKU1xuICAgICAgICBzd2l0Y2ggKHdpcmVUeXBlKSB7XG4gICAgICAgICAgICBjYXNlIGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMS5XaXJlVHlwZS5WYXJpbnQ6XG4gICAgICAgICAgICAgICAgd2hpbGUgKHRoaXMuYnVmW3RoaXMucG9zKytdICYgMHg4MCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMS5XaXJlVHlwZS5CaXQ2NDpcbiAgICAgICAgICAgICAgICB0aGlzLnBvcyArPSA0O1xuICAgICAgICAgICAgY2FzZSBiaW5hcnlfZm9ybWF0X2NvbnRyYWN0XzEuV2lyZVR5cGUuQml0MzI6XG4gICAgICAgICAgICAgICAgdGhpcy5wb3MgKz0gNDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgYmluYXJ5X2Zvcm1hdF9jb250cmFjdF8xLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZDpcbiAgICAgICAgICAgICAgICBsZXQgbGVuID0gdGhpcy51aW50MzIoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBvcyArPSBsZW47XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMS5XaXJlVHlwZS5TdGFydEdyb3VwOlxuICAgICAgICAgICAgICAgIC8vIEZyb20gZGVzY3JpcHRvci5wcm90bzogR3JvdXAgdHlwZSBpcyBkZXByZWNhdGVkLCBub3Qgc3VwcG9ydGVkIGluIHByb3RvMy5cbiAgICAgICAgICAgICAgICAvLyBCdXQgd2UgbXVzdCBzdGlsbCBiZSBhYmxlIHRvIHBhcnNlIGFuZCB0cmVhdCBhcyB1bmtub3duLlxuICAgICAgICAgICAgICAgIGxldCB0O1xuICAgICAgICAgICAgICAgIHdoaWxlICgodCA9IHRoaXMudGFnKClbMV0pICE9PSBiaW5hcnlfZm9ybWF0X2NvbnRyYWN0XzEuV2lyZVR5cGUuRW5kR3JvdXApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5za2lwKHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiY2FudCBza2lwIHdpcmUgdHlwZSBcIiArIHdpcmVUeXBlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFzc2VydEJvdW5kcygpO1xuICAgICAgICByZXR1cm4gdGhpcy5idWYuc3ViYXJyYXkoc3RhcnQsIHRoaXMucG9zKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhyb3dzIGVycm9yIGlmIHBvc2l0aW9uIGluIGJ5dGUgYXJyYXkgaXMgb3V0IG9mIHJhbmdlLlxuICAgICAqL1xuICAgIGFzc2VydEJvdW5kcygpIHtcbiAgICAgICAgaWYgKHRoaXMucG9zID4gdGhpcy5sZW4pXG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcInByZW1hdHVyZSBFT0ZcIik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWQgYSBgaW50MzJgIGZpZWxkLCBhIHNpZ25lZCAzMiBiaXQgdmFyaW50LlxuICAgICAqL1xuICAgIGludDMyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy51aW50MzIoKSB8IDA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWQgYSBgc2ludDMyYCBmaWVsZCwgYSBzaWduZWQsIHppZ3phZy1lbmNvZGVkIDMyLWJpdCB2YXJpbnQuXG4gICAgICovXG4gICAgc2ludDMyKCkge1xuICAgICAgICBsZXQgenplID0gdGhpcy51aW50MzIoKTtcbiAgICAgICAgLy8gZGVjb2RlIHppZ3phZ1xuICAgICAgICByZXR1cm4gKHp6ZSA+Pj4gMSkgXiAtKHp6ZSAmIDEpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWFkIGEgYGludDY0YCBmaWVsZCwgYSBzaWduZWQgNjQtYml0IHZhcmludC5cbiAgICAgKi9cbiAgICBpbnQ2NCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBwYl9sb25nXzEuUGJMb25nKC4uLnRoaXMudmFyaW50NjQoKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWQgYSBgdWludDY0YCBmaWVsZCwgYW4gdW5zaWduZWQgNjQtYml0IHZhcmludC5cbiAgICAgKi9cbiAgICB1aW50NjQoKSB7XG4gICAgICAgIHJldHVybiBuZXcgcGJfbG9uZ18xLlBiVUxvbmcoLi4udGhpcy52YXJpbnQ2NCgpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVhZCBhIGBzaW50NjRgIGZpZWxkLCBhIHNpZ25lZCwgemlnLXphZy1lbmNvZGVkIDY0LWJpdCB2YXJpbnQuXG4gICAgICovXG4gICAgc2ludDY0KCkge1xuICAgICAgICBsZXQgW2xvLCBoaV0gPSB0aGlzLnZhcmludDY0KCk7XG4gICAgICAgIC8vIGRlY29kZSB6aWcgemFnXG4gICAgICAgIGxldCBzID0gLShsbyAmIDEpO1xuICAgICAgICBsbyA9ICgobG8gPj4+IDEgfCAoaGkgJiAxKSA8PCAzMSkgXiBzKTtcbiAgICAgICAgaGkgPSAoaGkgPj4+IDEgXiBzKTtcbiAgICAgICAgcmV0dXJuIG5ldyBwYl9sb25nXzEuUGJMb25nKGxvLCBoaSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWQgYSBgYm9vbGAgZmllbGQsIGEgdmFyaWFudC5cbiAgICAgKi9cbiAgICBib29sKCkge1xuICAgICAgICBsZXQgW2xvLCBoaV0gPSB0aGlzLnZhcmludDY0KCk7XG4gICAgICAgIHJldHVybiBsbyAhPT0gMCB8fCBoaSAhPT0gMDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVhZCBhIGBmaXhlZDMyYCBmaWVsZCwgYW4gdW5zaWduZWQsIGZpeGVkLWxlbmd0aCAzMi1iaXQgaW50ZWdlci5cbiAgICAgKi9cbiAgICBmaXhlZDMyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52aWV3LmdldFVpbnQzMigodGhpcy5wb3MgKz0gNCkgLSA0LCB0cnVlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVhZCBhIGBzZml4ZWQzMmAgZmllbGQsIGEgc2lnbmVkLCBmaXhlZC1sZW5ndGggMzItYml0IGludGVnZXIuXG4gICAgICovXG4gICAgc2ZpeGVkMzIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZXcuZ2V0SW50MzIoKHRoaXMucG9zICs9IDQpIC0gNCwgdHJ1ZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWQgYSBgZml4ZWQ2NGAgZmllbGQsIGFuIHVuc2lnbmVkLCBmaXhlZC1sZW5ndGggNjQgYml0IGludGVnZXIuXG4gICAgICovXG4gICAgZml4ZWQ2NCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBwYl9sb25nXzEuUGJVTG9uZyh0aGlzLnNmaXhlZDMyKCksIHRoaXMuc2ZpeGVkMzIoKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWQgYSBgZml4ZWQ2NGAgZmllbGQsIGEgc2lnbmVkLCBmaXhlZC1sZW5ndGggNjQtYml0IGludGVnZXIuXG4gICAgICovXG4gICAgc2ZpeGVkNjQoKSB7XG4gICAgICAgIHJldHVybiBuZXcgcGJfbG9uZ18xLlBiTG9uZyh0aGlzLnNmaXhlZDMyKCksIHRoaXMuc2ZpeGVkMzIoKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWQgYSBgZmxvYXRgIGZpZWxkLCAzMi1iaXQgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLlxuICAgICAqL1xuICAgIGZsb2F0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy52aWV3LmdldEZsb2F0MzIoKHRoaXMucG9zICs9IDQpIC0gNCwgdHJ1ZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWQgYSBgZG91YmxlYCBmaWVsZCwgYSA2NC1iaXQgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLlxuICAgICAqL1xuICAgIGRvdWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlldy5nZXRGbG9hdDY0KCh0aGlzLnBvcyArPSA4KSAtIDgsIHRydWUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWFkIGEgYGJ5dGVzYCBmaWVsZCwgbGVuZ3RoLWRlbGltaXRlZCBhcmJpdHJhcnkgZGF0YS5cbiAgICAgKi9cbiAgICBieXRlcygpIHtcbiAgICAgICAgbGV0IGxlbiA9IHRoaXMudWludDMyKCk7XG4gICAgICAgIGxldCBzdGFydCA9IHRoaXMucG9zO1xuICAgICAgICB0aGlzLnBvcyArPSBsZW47XG4gICAgICAgIHRoaXMuYXNzZXJ0Qm91bmRzKCk7XG4gICAgICAgIHJldHVybiB0aGlzLmJ1Zi5zdWJhcnJheShzdGFydCwgc3RhcnQgKyBsZW4pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWFkIGEgYHN0cmluZ2AgZmllbGQsIGxlbmd0aC1kZWxpbWl0ZWQgZGF0YSBjb252ZXJ0ZWQgdG8gVVRGLTggdGV4dC5cbiAgICAgKi9cbiAgICBzdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHREZWNvZGVyLmRlY29kZSh0aGlzLmJ5dGVzKCkpO1xuICAgIH1cbn1cbmV4cG9ydHMuQmluYXJ5UmVhZGVyID0gQmluYXJ5UmVhZGVyO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYXNzZXJ0RmxvYXQzMiA9IGV4cG9ydHMuYXNzZXJ0VUludDMyID0gZXhwb3J0cy5hc3NlcnRJbnQzMiA9IGV4cG9ydHMuYXNzZXJ0TmV2ZXIgPSBleHBvcnRzLmFzc2VydCA9IHZvaWQgMDtcbi8qKlxuICogYXNzZXJ0IHRoYXQgY29uZGl0aW9uIGlzIHRydWUgb3IgdGhyb3cgZXJyb3IgKHdpdGggbWVzc2FnZSlcbiAqL1xuZnVuY3Rpb24gYXNzZXJ0KGNvbmRpdGlvbiwgbXNnKSB7XG4gICAgaWYgKCFjb25kaXRpb24pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgfVxufVxuZXhwb3J0cy5hc3NlcnQgPSBhc3NlcnQ7XG4vKipcbiAqIGFzc2VydCB0aGF0IHZhbHVlIGNhbm5vdCBleGlzdCA9IHR5cGUgYG5ldmVyYC4gdGhyb3cgcnVudGltZSBlcnJvciBpZiBpdCBkb2VzLlxuICovXG5mdW5jdGlvbiBhc3NlcnROZXZlcih2YWx1ZSwgbXNnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKG1zZyAhPT0gbnVsbCAmJiBtc2cgIT09IHZvaWQgMCA/IG1zZyA6ICdVbmV4cGVjdGVkIG9iamVjdDogJyArIHZhbHVlKTtcbn1cbmV4cG9ydHMuYXNzZXJ0TmV2ZXIgPSBhc3NlcnROZXZlcjtcbmNvbnN0IEZMT0FUMzJfTUFYID0gMy40MDI4MjM0NjYzODUyODg2ZSszOCwgRkxPQVQzMl9NSU4gPSAtMy40MDI4MjM0NjYzODUyODg2ZSszOCwgVUlOVDMyX01BWCA9IDB4RkZGRkZGRkYsIElOVDMyX01BWCA9IDBYN0ZGRkZGRkYsIElOVDMyX01JTiA9IC0wWDgwMDAwMDAwO1xuZnVuY3Rpb24gYXNzZXJ0SW50MzIoYXJnKSB7XG4gICAgaWYgKHR5cGVvZiBhcmcgIT09IFwibnVtYmVyXCIpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBpbnQgMzI6ICcgKyB0eXBlb2YgYXJnKTtcbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoYXJnKSB8fCBhcmcgPiBJTlQzMl9NQVggfHwgYXJnIDwgSU5UMzJfTUlOKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgaW50IDMyOiAnICsgYXJnKTtcbn1cbmV4cG9ydHMuYXNzZXJ0SW50MzIgPSBhc3NlcnRJbnQzMjtcbmZ1bmN0aW9uIGFzc2VydFVJbnQzMihhcmcpIHtcbiAgICBpZiAodHlwZW9mIGFyZyAhPT0gXCJudW1iZXJcIilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHVpbnQgMzI6ICcgKyB0eXBlb2YgYXJnKTtcbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoYXJnKSB8fCBhcmcgPiBVSU5UMzJfTUFYIHx8IGFyZyA8IDApXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCB1aW50IDMyOiAnICsgYXJnKTtcbn1cbmV4cG9ydHMuYXNzZXJ0VUludDMyID0gYXNzZXJ0VUludDMyO1xuZnVuY3Rpb24gYXNzZXJ0RmxvYXQzMihhcmcpIHtcbiAgICBpZiAodHlwZW9mIGFyZyAhPT0gXCJudW1iZXJcIilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGZsb2F0IDMyOiAnICsgdHlwZW9mIGFyZyk7XG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoYXJnKSlcbiAgICAgICAgcmV0dXJuO1xuICAgIGlmIChhcmcgPiBGTE9BVDMyX01BWCB8fCBhcmcgPCBGTE9BVDMyX01JTilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGZsb2F0IDMyOiAnICsgYXJnKTtcbn1cbmV4cG9ydHMuYXNzZXJ0RmxvYXQzMiA9IGFzc2VydEZsb2F0MzI7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5CaW5hcnlXcml0ZXIgPSBleHBvcnRzLmJpbmFyeVdyaXRlT3B0aW9ucyA9IHZvaWQgMDtcbmNvbnN0IHBiX2xvbmdfMSA9IHJlcXVpcmUoXCIuL3BiLWxvbmdcIik7XG5jb25zdCBnb29nX3ZhcmludF8xID0gcmVxdWlyZShcIi4vZ29vZy12YXJpbnRcIik7XG5jb25zdCBhc3NlcnRfMSA9IHJlcXVpcmUoXCIuL2Fzc2VydFwiKTtcbmNvbnN0IGRlZmF1bHRzV3JpdGUgPSB7XG4gICAgd3JpdGVVbmtub3duRmllbGRzOiB0cnVlLFxuICAgIHdyaXRlckZhY3Rvcnk6ICgpID0+IG5ldyBCaW5hcnlXcml0ZXIoKSxcbn07XG4vKipcbiAqIE1ha2Ugb3B0aW9ucyBmb3Igd3JpdGluZyBiaW5hcnkgZGF0YSBmb3JtIHBhcnRpYWwgb3B0aW9ucy5cbiAqL1xuZnVuY3Rpb24gYmluYXJ5V3JpdGVPcHRpb25zKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gb3B0aW9ucyA/IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdHNXcml0ZSksIG9wdGlvbnMpIDogZGVmYXVsdHNXcml0ZTtcbn1cbmV4cG9ydHMuYmluYXJ5V3JpdGVPcHRpb25zID0gYmluYXJ5V3JpdGVPcHRpb25zO1xuY2xhc3MgQmluYXJ5V3JpdGVyIHtcbiAgICBjb25zdHJ1Y3Rvcih0ZXh0RW5jb2Rlcikge1xuICAgICAgICAvKipcbiAgICAgICAgICogUHJldmlvdXMgZm9yayBzdGF0ZXMuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnN0YWNrID0gW107XG4gICAgICAgIHRoaXMudGV4dEVuY29kZXIgPSB0ZXh0RW5jb2RlciAhPT0gbnVsbCAmJiB0ZXh0RW5jb2RlciAhPT0gdm9pZCAwID8gdGV4dEVuY29kZXIgOiBuZXcgVGV4dEVuY29kZXIoKTtcbiAgICAgICAgdGhpcy5jaHVua3MgPSBbXTtcbiAgICAgICAgdGhpcy5idWYgPSBbXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIGFsbCBieXRlcyB3cml0dGVuIGFuZCByZXNldCB0aGlzIHdyaXRlci5cbiAgICAgKi9cbiAgICBmaW5pc2goKSB7XG4gICAgICAgIHRoaXMuY2h1bmtzLnB1c2gobmV3IFVpbnQ4QXJyYXkodGhpcy5idWYpKTsgLy8gZmx1c2ggdGhlIGJ1ZmZlclxuICAgICAgICBsZXQgbGVuID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNodW5rcy5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIGxlbiArPSB0aGlzLmNodW5rc1tpXS5sZW5ndGg7XG4gICAgICAgIGxldCBieXRlcyA9IG5ldyBVaW50OEFycmF5KGxlbik7XG4gICAgICAgIGxldCBvZmZzZXQgPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY2h1bmtzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBieXRlcy5zZXQodGhpcy5jaHVua3NbaV0sIG9mZnNldCk7XG4gICAgICAgICAgICBvZmZzZXQgKz0gdGhpcy5jaHVua3NbaV0ubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2h1bmtzID0gW107XG4gICAgICAgIHJldHVybiBieXRlcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3RhcnQgYSBuZXcgZm9yayBmb3IgbGVuZ3RoLWRlbGltaXRlZCBkYXRhIGxpa2UgYSBtZXNzYWdlXG4gICAgICogb3IgYSBwYWNrZWQgcmVwZWF0ZWQgZmllbGQuXG4gICAgICpcbiAgICAgKiBNdXN0IGJlIGpvaW5lZCBsYXRlciB3aXRoIGBqb2luKClgLlxuICAgICAqL1xuICAgIGZvcmsoKSB7XG4gICAgICAgIHRoaXMuc3RhY2sucHVzaCh7IGNodW5rczogdGhpcy5jaHVua3MsIGJ1ZjogdGhpcy5idWYgfSk7XG4gICAgICAgIHRoaXMuY2h1bmtzID0gW107XG4gICAgICAgIHRoaXMuYnVmID0gW107XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBKb2luIHRoZSBsYXN0IGZvcmsuIFdyaXRlIGl0cyBsZW5ndGggYW5kIGJ5dGVzLCB0aGVuXG4gICAgICogcmV0dXJuIHRvIHRoZSBwcmV2aW91cyBzdGF0ZS5cbiAgICAgKi9cbiAgICBqb2luKCkge1xuICAgICAgICAvLyBnZXQgY2h1bmsgb2YgZm9ya1xuICAgICAgICBsZXQgY2h1bmsgPSB0aGlzLmZpbmlzaCgpO1xuICAgICAgICAvLyByZXN0b3JlIHByZXZpb3VzIHN0YXRlXG4gICAgICAgIGxldCBwcmV2ID0gdGhpcy5zdGFjay5wb3AoKTtcbiAgICAgICAgaWYgKCFwcmV2KVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHN0YXRlLCBmb3JrIHN0YWNrIGVtcHR5Jyk7XG4gICAgICAgIHRoaXMuY2h1bmtzID0gcHJldi5jaHVua3M7XG4gICAgICAgIHRoaXMuYnVmID0gcHJldi5idWY7XG4gICAgICAgIC8vIHdyaXRlIGxlbmd0aCBvZiBjaHVuayBhcyB2YXJpbnRcbiAgICAgICAgdGhpcy51aW50MzIoY2h1bmsuYnl0ZUxlbmd0aCk7XG4gICAgICAgIHJldHVybiB0aGlzLnJhdyhjaHVuayk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyaXRlcyBhIHRhZyAoZmllbGQgbnVtYmVyIGFuZCB3aXJlIHR5cGUpLlxuICAgICAqXG4gICAgICogRXF1aXZhbGVudCB0byBgdWludDMyKCAoZmllbGRObyA8PCAzIHwgdHlwZSkgPj4+IDAgKWAuXG4gICAgICpcbiAgICAgKiBHZW5lcmF0ZWQgY29kZSBzaG91bGQgY29tcHV0ZSB0aGUgdGFnIGFoZWFkIG9mIHRpbWUgYW5kIGNhbGwgYHVpbnQzMigpYC5cbiAgICAgKi9cbiAgICB0YWcoZmllbGRObywgdHlwZSkge1xuICAgICAgICByZXR1cm4gdGhpcy51aW50MzIoKGZpZWxkTm8gPDwgMyB8IHR5cGUpID4+PiAwKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGUgYSBjaHVuayBvZiByYXcgYnl0ZXMuXG4gICAgICovXG4gICAgcmF3KGNodW5rKSB7XG4gICAgICAgIGlmICh0aGlzLmJ1Zi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuY2h1bmtzLnB1c2gobmV3IFVpbnQ4QXJyYXkodGhpcy5idWYpKTtcbiAgICAgICAgICAgIHRoaXMuYnVmID0gW107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaHVua3MucHVzaChjaHVuayk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXcml0ZSBhIGB1aW50MzJgIHZhbHVlLCBhbiB1bnNpZ25lZCAzMiBiaXQgdmFyaW50LlxuICAgICAqL1xuICAgIHVpbnQzMih2YWx1ZSkge1xuICAgICAgICBhc3NlcnRfMS5hc3NlcnRVSW50MzIodmFsdWUpO1xuICAgICAgICAvLyB3cml0ZSB2YWx1ZSBhcyB2YXJpbnQgMzIsIGlubGluZWQgZm9yIHNwZWVkXG4gICAgICAgIHdoaWxlICh2YWx1ZSA+IDB4N2YpIHtcbiAgICAgICAgICAgIHRoaXMuYnVmLnB1c2goKHZhbHVlICYgMHg3ZikgfCAweDgwKTtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgPj4+IDc7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5idWYucHVzaCh2YWx1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXcml0ZSBhIGBpbnQzMmAgdmFsdWUsIGEgc2lnbmVkIDMyIGJpdCB2YXJpbnQuXG4gICAgICovXG4gICAgaW50MzIodmFsdWUpIHtcbiAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0SW50MzIodmFsdWUpO1xuICAgICAgICBnb29nX3ZhcmludF8xLnZhcmludDMyd3JpdGUodmFsdWUsIHRoaXMuYnVmKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyaXRlIGEgYGJvb2xgIHZhbHVlLCBhIHZhcmlhbnQuXG4gICAgICovXG4gICAgYm9vbCh2YWx1ZSkge1xuICAgICAgICB0aGlzLmJ1Zi5wdXNoKHZhbHVlID8gMSA6IDApO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGUgYSBgYnl0ZXNgIHZhbHVlLCBsZW5ndGgtZGVsaW1pdGVkIGFyYml0cmFyeSBkYXRhLlxuICAgICAqL1xuICAgIGJ5dGVzKHZhbHVlKSB7XG4gICAgICAgIHRoaXMudWludDMyKHZhbHVlLmJ5dGVMZW5ndGgpOyAvLyB3cml0ZSBsZW5ndGggb2YgY2h1bmsgYXMgdmFyaW50XG4gICAgICAgIHJldHVybiB0aGlzLnJhdyh2YWx1ZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyaXRlIGEgYHN0cmluZ2AgdmFsdWUsIGxlbmd0aC1kZWxpbWl0ZWQgZGF0YSBjb252ZXJ0ZWQgdG8gVVRGLTggdGV4dC5cbiAgICAgKi9cbiAgICBzdHJpbmcodmFsdWUpIHtcbiAgICAgICAgbGV0IGNodW5rID0gdGhpcy50ZXh0RW5jb2Rlci5lbmNvZGUodmFsdWUpO1xuICAgICAgICB0aGlzLnVpbnQzMihjaHVuay5ieXRlTGVuZ3RoKTsgLy8gd3JpdGUgbGVuZ3RoIG9mIGNodW5rIGFzIHZhcmludFxuICAgICAgICByZXR1cm4gdGhpcy5yYXcoY2h1bmspO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXcml0ZSBhIGBmbG9hdGAgdmFsdWUsIDMyLWJpdCBmbG9hdGluZyBwb2ludCBudW1iZXIuXG4gICAgICovXG4gICAgZmxvYXQodmFsdWUpIHtcbiAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0RmxvYXQzMih2YWx1ZSk7XG4gICAgICAgIGxldCBjaHVuayA9IG5ldyBVaW50OEFycmF5KDQpO1xuICAgICAgICBuZXcgRGF0YVZpZXcoY2h1bmsuYnVmZmVyKS5zZXRGbG9hdDMyKDAsIHZhbHVlLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucmF3KGNodW5rKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGUgYSBgZG91YmxlYCB2YWx1ZSwgYSA2NC1iaXQgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLlxuICAgICAqL1xuICAgIGRvdWJsZSh2YWx1ZSkge1xuICAgICAgICBsZXQgY2h1bmsgPSBuZXcgVWludDhBcnJheSg4KTtcbiAgICAgICAgbmV3IERhdGFWaWV3KGNodW5rLmJ1ZmZlcikuc2V0RmxvYXQ2NCgwLCB2YWx1ZSwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzLnJhdyhjaHVuayk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyaXRlIGEgYGZpeGVkMzJgIHZhbHVlLCBhbiB1bnNpZ25lZCwgZml4ZWQtbGVuZ3RoIDMyLWJpdCBpbnRlZ2VyLlxuICAgICAqL1xuICAgIGZpeGVkMzIodmFsdWUpIHtcbiAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0VUludDMyKHZhbHVlKTtcbiAgICAgICAgbGV0IGNodW5rID0gbmV3IFVpbnQ4QXJyYXkoNCk7XG4gICAgICAgIG5ldyBEYXRhVmlldyhjaHVuay5idWZmZXIpLnNldFVpbnQzMigwLCB2YWx1ZSwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzLnJhdyhjaHVuayk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyaXRlIGEgYHNmaXhlZDMyYCB2YWx1ZSwgYSBzaWduZWQsIGZpeGVkLWxlbmd0aCAzMi1iaXQgaW50ZWdlci5cbiAgICAgKi9cbiAgICBzZml4ZWQzMih2YWx1ZSkge1xuICAgICAgICBhc3NlcnRfMS5hc3NlcnRJbnQzMih2YWx1ZSk7XG4gICAgICAgIGxldCBjaHVuayA9IG5ldyBVaW50OEFycmF5KDQpO1xuICAgICAgICBuZXcgRGF0YVZpZXcoY2h1bmsuYnVmZmVyKS5zZXRJbnQzMigwLCB2YWx1ZSwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzLnJhdyhjaHVuayk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyaXRlIGEgYHNpbnQzMmAgdmFsdWUsIGEgc2lnbmVkLCB6aWd6YWctZW5jb2RlZCAzMi1iaXQgdmFyaW50LlxuICAgICAqL1xuICAgIHNpbnQzMih2YWx1ZSkge1xuICAgICAgICBhc3NlcnRfMS5hc3NlcnRJbnQzMih2YWx1ZSk7XG4gICAgICAgIC8vIHppZ3phZyBlbmNvZGVcbiAgICAgICAgdmFsdWUgPSAoKHZhbHVlIDw8IDEpIF4gKHZhbHVlID4+IDMxKSkgPj4+IDA7XG4gICAgICAgIGdvb2dfdmFyaW50XzEudmFyaW50MzJ3cml0ZSh2YWx1ZSwgdGhpcy5idWYpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGUgYSBgZml4ZWQ2NGAgdmFsdWUsIGEgc2lnbmVkLCBmaXhlZC1sZW5ndGggNjQtYml0IGludGVnZXIuXG4gICAgICovXG4gICAgc2ZpeGVkNjQodmFsdWUpIHtcbiAgICAgICAgbGV0IGNodW5rID0gbmV3IFVpbnQ4QXJyYXkoOCk7XG4gICAgICAgIGxldCB2aWV3ID0gbmV3IERhdGFWaWV3KGNodW5rLmJ1ZmZlcik7XG4gICAgICAgIGxldCBsb25nID0gcGJfbG9uZ18xLlBiTG9uZy5mcm9tKHZhbHVlKTtcbiAgICAgICAgdmlldy5zZXRJbnQzMigwLCBsb25nLmxvLCB0cnVlKTtcbiAgICAgICAgdmlldy5zZXRJbnQzMig0LCBsb25nLmhpLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucmF3KGNodW5rKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGUgYSBgZml4ZWQ2NGAgdmFsdWUsIGFuIHVuc2lnbmVkLCBmaXhlZC1sZW5ndGggNjQgYml0IGludGVnZXIuXG4gICAgICovXG4gICAgZml4ZWQ2NCh2YWx1ZSkge1xuICAgICAgICBsZXQgY2h1bmsgPSBuZXcgVWludDhBcnJheSg4KTtcbiAgICAgICAgbGV0IHZpZXcgPSBuZXcgRGF0YVZpZXcoY2h1bmsuYnVmZmVyKTtcbiAgICAgICAgbGV0IGxvbmcgPSBwYl9sb25nXzEuUGJVTG9uZy5mcm9tKHZhbHVlKTtcbiAgICAgICAgdmlldy5zZXRJbnQzMigwLCBsb25nLmxvLCB0cnVlKTtcbiAgICAgICAgdmlldy5zZXRJbnQzMig0LCBsb25nLmhpLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucmF3KGNodW5rKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGUgYSBgaW50NjRgIHZhbHVlLCBhIHNpZ25lZCA2NC1iaXQgdmFyaW50LlxuICAgICAqL1xuICAgIGludDY0KHZhbHVlKSB7XG4gICAgICAgIGxldCBsb25nID0gcGJfbG9uZ18xLlBiTG9uZy5mcm9tKHZhbHVlKTtcbiAgICAgICAgZ29vZ192YXJpbnRfMS52YXJpbnQ2NHdyaXRlKGxvbmcubG8sIGxvbmcuaGksIHRoaXMuYnVmKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyaXRlIGEgYHNpbnQ2NGAgdmFsdWUsIGEgc2lnbmVkLCB6aWctemFnLWVuY29kZWQgNjQtYml0IHZhcmludC5cbiAgICAgKi9cbiAgICBzaW50NjQodmFsdWUpIHtcbiAgICAgICAgbGV0IGxvbmcgPSBwYl9sb25nXzEuUGJMb25nLmZyb20odmFsdWUpLCBcbiAgICAgICAgLy8gemlnemFnIGVuY29kZVxuICAgICAgICBzaWduID0gbG9uZy5oaSA+PiAzMSwgbG8gPSAobG9uZy5sbyA8PCAxKSBeIHNpZ24sIGhpID0gKChsb25nLmhpIDw8IDEpIHwgKGxvbmcubG8gPj4+IDMxKSkgXiBzaWduO1xuICAgICAgICBnb29nX3ZhcmludF8xLnZhcmludDY0d3JpdGUobG8sIGhpLCB0aGlzLmJ1Zik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXcml0ZSBhIGB1aW50NjRgIHZhbHVlLCBhbiB1bnNpZ25lZCA2NC1iaXQgdmFyaW50LlxuICAgICAqL1xuICAgIHVpbnQ2NCh2YWx1ZSkge1xuICAgICAgICBsZXQgbG9uZyA9IHBiX2xvbmdfMS5QYlVMb25nLmZyb20odmFsdWUpO1xuICAgICAgICBnb29nX3ZhcmludF8xLnZhcmludDY0d3JpdGUobG9uZy5sbywgbG9uZy5oaSwgdGhpcy5idWYpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59XG5leHBvcnRzLkJpbmFyeVdyaXRlciA9IEJpbmFyeVdyaXRlcjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLm1lcmdlSnNvbk9wdGlvbnMgPSBleHBvcnRzLmpzb25Xcml0ZU9wdGlvbnMgPSBleHBvcnRzLmpzb25SZWFkT3B0aW9ucyA9IHZvaWQgMDtcbmNvbnN0IGRlZmF1bHRzV3JpdGUgPSB7XG4gICAgZW1pdERlZmF1bHRWYWx1ZXM6IGZhbHNlLFxuICAgIGVudW1Bc0ludGVnZXI6IGZhbHNlLFxuICAgIHVzZVByb3RvRmllbGROYW1lOiBmYWxzZSxcbiAgICBwcmV0dHlTcGFjZXM6IDAsXG59LCBkZWZhdWx0c1JlYWQgPSB7XG4gICAgaWdub3JlVW5rbm93bkZpZWxkczogZmFsc2UsXG59O1xuLyoqXG4gKiBNYWtlIG9wdGlvbnMgZm9yIHJlYWRpbmcgSlNPTiBkYXRhIGZyb20gcGFydGlhbCBvcHRpb25zLlxuICovXG5mdW5jdGlvbiBqc29uUmVhZE9wdGlvbnMob3B0aW9ucykge1xuICAgIHJldHVybiBvcHRpb25zID8gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0c1JlYWQpLCBvcHRpb25zKSA6IGRlZmF1bHRzUmVhZDtcbn1cbmV4cG9ydHMuanNvblJlYWRPcHRpb25zID0ganNvblJlYWRPcHRpb25zO1xuLyoqXG4gKiBNYWtlIG9wdGlvbnMgZm9yIHdyaXRpbmcgSlNPTiBkYXRhIGZyb20gcGFydGlhbCBvcHRpb25zLlxuICovXG5mdW5jdGlvbiBqc29uV3JpdGVPcHRpb25zKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gb3B0aW9ucyA/IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdHNXcml0ZSksIG9wdGlvbnMpIDogZGVmYXVsdHNXcml0ZTtcbn1cbmV4cG9ydHMuanNvbldyaXRlT3B0aW9ucyA9IGpzb25Xcml0ZU9wdGlvbnM7XG4vKipcbiAqIE1lcmdlcyBKU09OIHdyaXRlIG9yIHJlYWQgb3B0aW9ucy4gTGF0ZXIgdmFsdWVzIG92ZXJyaWRlIGVhcmxpZXIgdmFsdWVzLiBUeXBlIHJlZ2lzdHJpZXMgYXJlIG1lcmdlZC5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VKc29uT3B0aW9ucyhhLCBiKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICBsZXQgYyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYSksIGIpO1xuICAgIGMudHlwZVJlZ2lzdHJ5ID0gWy4uLigoX2EgPSBhID09PSBudWxsIHx8IGEgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGEudHlwZVJlZ2lzdHJ5KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBbXSksIC4uLigoX2IgPSBiID09PSBudWxsIHx8IGIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGIudHlwZVJlZ2lzdHJ5KSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBbXSldO1xuICAgIHJldHVybiBjO1xufVxuZXhwb3J0cy5tZXJnZUpzb25PcHRpb25zID0gbWVyZ2VKc29uT3B0aW9ucztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk1FU1NBR0VfVFlQRSA9IHZvaWQgMDtcbi8qKlxuICogVGhlIHN5bWJvbCB1c2VkIGFzIGEga2V5IG9uIG1lc3NhZ2Ugb2JqZWN0cyB0byBzdG9yZSB0aGUgbWVzc2FnZSB0eXBlLlxuICpcbiAqIE5vdGUgdGhhdCB0aGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBmZWF0dXJlIC0gaXQgaXMgaGVyZSB0byBzdGF5LCBidXRcbiAqIGltcGxlbWVudGF0aW9uIGRldGFpbHMgbWF5IGNoYW5nZSB3aXRob3V0IG5vdGljZS5cbiAqL1xuZXhwb3J0cy5NRVNTQUdFX1RZUEUgPSBTeW1ib2wuZm9yKFwicHJvdG9idWYtdHMvbWVzc2FnZS10eXBlXCIpO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubG93ZXJDYW1lbENhc2UgPSB2b2lkIDA7XG4vKipcbiAqIENvbnZlcnRzIHNuYWtlX2Nhc2UgdG8gbG93ZXJDYW1lbENhc2UuXG4gKlxuICogU2hvdWxkIGJlaGF2ZSBsaWtlIHByb3RvYzpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9wcm90b2NvbGJ1ZmZlcnMvcHJvdG9idWYvYmxvYi9lOGFlMTM3Yzk2NDQ0ZWEzMTM0ODVlZDExMThjNWU0M2IyMDk5Y2YxL3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2hlbHBlcnMuY2MjTDExOFxuICovXG5mdW5jdGlvbiBsb3dlckNhbWVsQ2FzZShzbmFrZUNhc2UpIHtcbiAgICBsZXQgY2FwTmV4dCA9IGZhbHNlO1xuICAgIGNvbnN0IHNiID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzbmFrZUNhc2UubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGV0IG5leHQgPSBzbmFrZUNhc2UuY2hhckF0KGkpO1xuICAgICAgICBpZiAobmV4dCA9PSAnXycpIHtcbiAgICAgICAgICAgIGNhcE5leHQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKC9cXGQvLnRlc3QobmV4dCkpIHtcbiAgICAgICAgICAgIHNiLnB1c2gobmV4dCk7XG4gICAgICAgICAgICBjYXBOZXh0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjYXBOZXh0KSB7XG4gICAgICAgICAgICBzYi5wdXNoKG5leHQudG9VcHBlckNhc2UoKSk7XG4gICAgICAgICAgICBjYXBOZXh0ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaSA9PSAwKSB7XG4gICAgICAgICAgICBzYi5wdXNoKG5leHQudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzYi5wdXNoKG5leHQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzYi5qb2luKCcnKTtcbn1cbmV4cG9ydHMubG93ZXJDYW1lbENhc2UgPSBsb3dlckNhbWVsQ2FzZTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlYWRNZXNzYWdlT3B0aW9uID0gZXhwb3J0cy5yZWFkRmllbGRPcHRpb24gPSBleHBvcnRzLnJlYWRGaWVsZE9wdGlvbnMgPSBleHBvcnRzLm5vcm1hbGl6ZUZpZWxkSW5mbyA9IGV4cG9ydHMuUmVwZWF0VHlwZSA9IGV4cG9ydHMuTG9uZ1R5cGUgPSBleHBvcnRzLlNjYWxhclR5cGUgPSB2b2lkIDA7XG5jb25zdCBsb3dlcl9jYW1lbF9jYXNlXzEgPSByZXF1aXJlKFwiLi9sb3dlci1jYW1lbC1jYXNlXCIpO1xuLyoqXG4gKiBTY2FsYXIgdmFsdWUgdHlwZXMuIFRoaXMgaXMgYSBzdWJzZXQgb2YgZmllbGQgdHlwZXMgZGVjbGFyZWQgYnkgcHJvdG9idWZcbiAqIGVudW0gZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLlR5cGUgVGhlIHR5cGVzIEdST1VQIGFuZCBNRVNTQUdFXG4gKiBhcmUgb21pdHRlZCwgYnV0IHRoZSBudW1lcmljYWwgdmFsdWVzIGFyZSBpZGVudGljYWwuXG4gKi9cbnZhciBTY2FsYXJUeXBlO1xuKGZ1bmN0aW9uIChTY2FsYXJUeXBlKSB7XG4gICAgLy8gMCBpcyByZXNlcnZlZCBmb3IgZXJyb3JzLlxuICAgIC8vIE9yZGVyIGlzIHdlaXJkIGZvciBoaXN0b3JpY2FsIHJlYXNvbnMuXG4gICAgU2NhbGFyVHlwZVtTY2FsYXJUeXBlW1wiRE9VQkxFXCJdID0gMV0gPSBcIkRPVUJMRVwiO1xuICAgIFNjYWxhclR5cGVbU2NhbGFyVHlwZVtcIkZMT0FUXCJdID0gMl0gPSBcIkZMT0FUXCI7XG4gICAgLy8gTm90IFppZ1phZyBlbmNvZGVkLiAgTmVnYXRpdmUgbnVtYmVycyB0YWtlIDEwIGJ5dGVzLiAgVXNlIFRZUEVfU0lOVDY0IGlmXG4gICAgLy8gbmVnYXRpdmUgdmFsdWVzIGFyZSBsaWtlbHkuXG4gICAgU2NhbGFyVHlwZVtTY2FsYXJUeXBlW1wiSU5UNjRcIl0gPSAzXSA9IFwiSU5UNjRcIjtcbiAgICBTY2FsYXJUeXBlW1NjYWxhclR5cGVbXCJVSU5UNjRcIl0gPSA0XSA9IFwiVUlOVDY0XCI7XG4gICAgLy8gTm90IFppZ1phZyBlbmNvZGVkLiAgTmVnYXRpdmUgbnVtYmVycyB0YWtlIDEwIGJ5dGVzLiAgVXNlIFRZUEVfU0lOVDMyIGlmXG4gICAgLy8gbmVnYXRpdmUgdmFsdWVzIGFyZSBsaWtlbHkuXG4gICAgU2NhbGFyVHlwZVtTY2FsYXJUeXBlW1wiSU5UMzJcIl0gPSA1XSA9IFwiSU5UMzJcIjtcbiAgICBTY2FsYXJUeXBlW1NjYWxhclR5cGVbXCJGSVhFRDY0XCJdID0gNl0gPSBcIkZJWEVENjRcIjtcbiAgICBTY2FsYXJUeXBlW1NjYWxhclR5cGVbXCJGSVhFRDMyXCJdID0gN10gPSBcIkZJWEVEMzJcIjtcbiAgICBTY2FsYXJUeXBlW1NjYWxhclR5cGVbXCJCT09MXCJdID0gOF0gPSBcIkJPT0xcIjtcbiAgICBTY2FsYXJUeXBlW1NjYWxhclR5cGVbXCJTVFJJTkdcIl0gPSA5XSA9IFwiU1RSSU5HXCI7XG4gICAgLy8gVGFnLWRlbGltaXRlZCBhZ2dyZWdhdGUuXG4gICAgLy8gR3JvdXAgdHlwZSBpcyBkZXByZWNhdGVkIGFuZCBub3Qgc3VwcG9ydGVkIGluIHByb3RvMy4gSG93ZXZlciwgUHJvdG8zXG4gICAgLy8gaW1wbGVtZW50YXRpb25zIHNob3VsZCBzdGlsbCBiZSBhYmxlIHRvIHBhcnNlIHRoZSBncm91cCB3aXJlIGZvcm1hdCBhbmRcbiAgICAvLyB0cmVhdCBncm91cCBmaWVsZHMgYXMgdW5rbm93biBmaWVsZHMuXG4gICAgLy8gVFlQRV9HUk9VUCA9IDEwLFxuICAgIC8vIFRZUEVfTUVTU0FHRSA9IDExLCAgLy8gTGVuZ3RoLWRlbGltaXRlZCBhZ2dyZWdhdGUuXG4gICAgLy8gTmV3IGluIHZlcnNpb24gMi5cbiAgICBTY2FsYXJUeXBlW1NjYWxhclR5cGVbXCJCWVRFU1wiXSA9IDEyXSA9IFwiQllURVNcIjtcbiAgICBTY2FsYXJUeXBlW1NjYWxhclR5cGVbXCJVSU5UMzJcIl0gPSAxM10gPSBcIlVJTlQzMlwiO1xuICAgIC8vIFRZUEVfRU5VTSA9IDE0LFxuICAgIFNjYWxhclR5cGVbU2NhbGFyVHlwZVtcIlNGSVhFRDMyXCJdID0gMTVdID0gXCJTRklYRUQzMlwiO1xuICAgIFNjYWxhclR5cGVbU2NhbGFyVHlwZVtcIlNGSVhFRDY0XCJdID0gMTZdID0gXCJTRklYRUQ2NFwiO1xuICAgIFNjYWxhclR5cGVbU2NhbGFyVHlwZVtcIlNJTlQzMlwiXSA9IDE3XSA9IFwiU0lOVDMyXCI7XG4gICAgU2NhbGFyVHlwZVtTY2FsYXJUeXBlW1wiU0lOVDY0XCJdID0gMThdID0gXCJTSU5UNjRcIjtcbn0pKFNjYWxhclR5cGUgPSBleHBvcnRzLlNjYWxhclR5cGUgfHwgKGV4cG9ydHMuU2NhbGFyVHlwZSA9IHt9KSk7XG4vKipcbiAqIEphdmFTY3JpcHQgcmVwcmVzZW50YXRpb24gb2YgNjQgYml0IGludGVncmFsIHR5cGVzLiBFcXVpdmFsZW50IHRvIHRoZVxuICogZmllbGQgb3B0aW9uIFwianN0eXBlXCIuXG4gKlxuICogQnkgZGVmYXVsdCwgcHJvdG9idWYtdHMgcmVwcmVzZW50cyA2NCBiaXQgdHlwZXMgYXMgYGJpZ2ludGAuXG4gKlxuICogWW91IGNhbiBjaGFuZ2UgdGhlIGRlZmF1bHQgYmVoYXZpb3VyIGJ5IGVuYWJsaW5nIHRoZSBwbHVnaW4gcGFyYW1ldGVyXG4gKiBgbG9uZ190eXBlX3N0cmluZ2AsIHdoaWNoIHdpbGwgcmVwcmVzZW50IDY0IGJpdCB0eXBlcyBhcyBgc3RyaW5nYC5cbiAqXG4gKiBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGNoYW5nZSB0aGUgYmVoYXZpb3VyIGZvciBpbmRpdmlkdWFsIGZpZWxkc1xuICogd2l0aCB0aGUgZmllbGQgb3B0aW9uIFwianN0eXBlXCI6XG4gKlxuICogYGBgcHJvdG9idWZcbiAqIHVpbnQ2NCBteV9maWVsZCA9IDEgW2pzdHlwZSA9IEpTX1NUUklOR107XG4gKiB1aW50NjQgb3RoZXJfZmllbGQgPSAyIFtqc3R5cGUgPSBKU19OVU1CRVJdO1xuICogYGBgXG4gKi9cbnZhciBMb25nVHlwZTtcbihmdW5jdGlvbiAoTG9uZ1R5cGUpIHtcbiAgICAvKipcbiAgICAgKiBVc2UgSmF2YVNjcmlwdCBgYmlnaW50YC5cbiAgICAgKlxuICAgICAqIEZpZWxkIG9wdGlvbiBgW2pzdHlwZSA9IEpTX05PUk1BTF1gLlxuICAgICAqL1xuICAgIExvbmdUeXBlW0xvbmdUeXBlW1wiQklHSU5UXCJdID0gMF0gPSBcIkJJR0lOVFwiO1xuICAgIC8qKlxuICAgICAqIFVzZSBKYXZhU2NyaXB0IGBzdHJpbmdgLlxuICAgICAqXG4gICAgICogRmllbGQgb3B0aW9uIGBbanN0eXBlID0gSlNfU1RSSU5HXWAuXG4gICAgICovXG4gICAgTG9uZ1R5cGVbTG9uZ1R5cGVbXCJTVFJJTkdcIl0gPSAxXSA9IFwiU1RSSU5HXCI7XG4gICAgLyoqXG4gICAgICogVXNlIEphdmFTY3JpcHQgYG51bWJlcmAuXG4gICAgICpcbiAgICAgKiBMYXJnZSB2YWx1ZXMgd2lsbCBsb29zZSBwcmVjaXNpb24uXG4gICAgICpcbiAgICAgKiBGaWVsZCBvcHRpb24gYFtqc3R5cGUgPSBKU19OVU1CRVJdYC5cbiAgICAgKi9cbiAgICBMb25nVHlwZVtMb25nVHlwZVtcIk5VTUJFUlwiXSA9IDJdID0gXCJOVU1CRVJcIjtcbn0pKExvbmdUeXBlID0gZXhwb3J0cy5Mb25nVHlwZSB8fCAoZXhwb3J0cy5Mb25nVHlwZSA9IHt9KSk7XG4vKipcbiAqIFByb3RvYnVmIDIuMS4wIGludHJvZHVjZWQgcGFja2VkIHJlcGVhdGVkIGZpZWxkcy5cbiAqIFNldHRpbmcgdGhlIGZpZWxkIG9wdGlvbiBgW3BhY2tlZCA9IHRydWVdYCBlbmFibGVzIHBhY2tpbmcuXG4gKlxuICogSW4gcHJvdG8zLCBhbGwgcmVwZWF0ZWQgZmllbGRzIGFyZSBwYWNrZWQgYnkgZGVmYXVsdC5cbiAqIFNldHRpbmcgdGhlIGZpZWxkIG9wdGlvbiBgW3BhY2tlZCA9IGZhbHNlXWAgZGlzYWJsZXMgcGFja2luZy5cbiAqXG4gKiBQYWNrZWQgcmVwZWF0ZWQgZmllbGRzIGFyZSBlbmNvZGVkIHdpdGggYSBzaW5nbGUgdGFnLFxuICogdGhlbiBhIGxlbmd0aC1kZWxpbWl0ZXIsIHRoZW4gdGhlIGVsZW1lbnQgdmFsdWVzLlxuICpcbiAqIFVucGFja2VkIHJlcGVhdGVkIGZpZWxkcyBhcmUgZW5jb2RlZCB3aXRoIGEgdGFnIGFuZFxuICogdmFsdWUgZm9yIGVhY2ggZWxlbWVudC5cbiAqXG4gKiBgYnl0ZXNgIGFuZCBgc3RyaW5nYCBjYW5ub3QgYmUgcGFja2VkLlxuICovXG52YXIgUmVwZWF0VHlwZTtcbihmdW5jdGlvbiAoUmVwZWF0VHlwZSkge1xuICAgIC8qKlxuICAgICAqIFRoZSBmaWVsZCBpcyBub3QgcmVwZWF0ZWQuXG4gICAgICovXG4gICAgUmVwZWF0VHlwZVtSZXBlYXRUeXBlW1wiTk9cIl0gPSAwXSA9IFwiTk9cIjtcbiAgICAvKipcbiAgICAgKiBUaGUgZmllbGQgaXMgcmVwZWF0ZWQgYW5kIHNob3VsZCBiZSBwYWNrZWQuXG4gICAgICogSW52YWxpZCBmb3IgYGJ5dGVzYCBhbmQgYHN0cmluZ2AsIHRoZXkgY2Fubm90IGJlIHBhY2tlZC5cbiAgICAgKi9cbiAgICBSZXBlYXRUeXBlW1JlcGVhdFR5cGVbXCJQQUNLRURcIl0gPSAxXSA9IFwiUEFDS0VEXCI7XG4gICAgLyoqXG4gICAgICogVGhlIGZpZWxkIGlzIHJlcGVhdGVkIGJ1dCBzaG91bGQgbm90IGJlIHBhY2tlZC5cbiAgICAgKiBUaGUgb25seSB2YWxpZCByZXBlYXQgdHlwZSBmb3IgcmVwZWF0ZWQgYGJ5dGVzYCBhbmQgYHN0cmluZ2AuXG4gICAgICovXG4gICAgUmVwZWF0VHlwZVtSZXBlYXRUeXBlW1wiVU5QQUNLRURcIl0gPSAyXSA9IFwiVU5QQUNLRURcIjtcbn0pKFJlcGVhdFR5cGUgPSBleHBvcnRzLlJlcGVhdFR5cGUgfHwgKGV4cG9ydHMuUmVwZWF0VHlwZSA9IHt9KSk7XG4vKipcbiAqIFR1cm5zIFBhcnRpYWxGaWVsZEluZm8gaW50byBGaWVsZEluZm8uXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZUZpZWxkSW5mbyhmaWVsZCkge1xuICAgIHZhciBfYSwgX2IsIF9jLCBfZDtcbiAgICBmaWVsZC5sb2NhbE5hbWUgPSAoX2EgPSBmaWVsZC5sb2NhbE5hbWUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGxvd2VyX2NhbWVsX2Nhc2VfMS5sb3dlckNhbWVsQ2FzZShmaWVsZC5uYW1lKTtcbiAgICBmaWVsZC5qc29uTmFtZSA9IChfYiA9IGZpZWxkLmpzb25OYW1lKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBsb3dlcl9jYW1lbF9jYXNlXzEubG93ZXJDYW1lbENhc2UoZmllbGQubmFtZSk7XG4gICAgZmllbGQucmVwZWF0ID0gKF9jID0gZmllbGQucmVwZWF0KSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiBSZXBlYXRUeXBlLk5PO1xuICAgIGZpZWxkLm9wdCA9IChfZCA9IGZpZWxkLm9wdCkgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDogKGZpZWxkLnJlcGVhdCA/IGZhbHNlIDogZmllbGQub25lb2YgPyBmYWxzZSA6IGZpZWxkLmtpbmQgPT0gXCJtZXNzYWdlXCIpO1xuICAgIHJldHVybiBmaWVsZDtcbn1cbmV4cG9ydHMubm9ybWFsaXplRmllbGRJbmZvID0gbm9ybWFsaXplRmllbGRJbmZvO1xuLyoqXG4gKiBSZWFkIGN1c3RvbSBmaWVsZCBvcHRpb25zIGZyb20gYSBnZW5lcmF0ZWQgbWVzc2FnZSB0eXBlLlxuICpcbiAqIEBkZXByZWNhdGVkIHVzZSByZWFkRmllbGRPcHRpb24oKVxuICovXG5mdW5jdGlvbiByZWFkRmllbGRPcHRpb25zKG1lc3NhZ2VUeXBlLCBmaWVsZE5hbWUsIGV4dGVuc2lvbk5hbWUsIGV4dGVuc2lvblR5cGUpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3Qgb3B0aW9ucyA9IChfYSA9IG1lc3NhZ2VUeXBlLmZpZWxkcy5maW5kKChtLCBpKSA9PiBtLmxvY2FsTmFtZSA9PSBmaWVsZE5hbWUgfHwgaSA9PSBmaWVsZE5hbWUpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub3B0aW9ucztcbiAgICByZXR1cm4gb3B0aW9ucyAmJiBvcHRpb25zW2V4dGVuc2lvbk5hbWVdID8gZXh0ZW5zaW9uVHlwZS5mcm9tSnNvbihvcHRpb25zW2V4dGVuc2lvbk5hbWVdKSA6IHVuZGVmaW5lZDtcbn1cbmV4cG9ydHMucmVhZEZpZWxkT3B0aW9ucyA9IHJlYWRGaWVsZE9wdGlvbnM7XG5mdW5jdGlvbiByZWFkRmllbGRPcHRpb24obWVzc2FnZVR5cGUsIGZpZWxkTmFtZSwgZXh0ZW5zaW9uTmFtZSwgZXh0ZW5zaW9uVHlwZSkge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCBvcHRpb25zID0gKF9hID0gbWVzc2FnZVR5cGUuZmllbGRzLmZpbmQoKG0sIGkpID0+IG0ubG9jYWxOYW1lID09IGZpZWxkTmFtZSB8fCBpID09IGZpZWxkTmFtZSkpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5vcHRpb25zO1xuICAgIGlmICghb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBvcHRpb25WYWwgPSBvcHRpb25zW2V4dGVuc2lvbk5hbWVdO1xuICAgIGlmIChvcHRpb25WYWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gb3B0aW9uVmFsO1xuICAgIH1cbiAgICByZXR1cm4gZXh0ZW5zaW9uVHlwZSA/IGV4dGVuc2lvblR5cGUuZnJvbUpzb24ob3B0aW9uVmFsKSA6IG9wdGlvblZhbDtcbn1cbmV4cG9ydHMucmVhZEZpZWxkT3B0aW9uID0gcmVhZEZpZWxkT3B0aW9uO1xuZnVuY3Rpb24gcmVhZE1lc3NhZ2VPcHRpb24obWVzc2FnZVR5cGUsIGV4dGVuc2lvbk5hbWUsIGV4dGVuc2lvblR5cGUpIHtcbiAgICBjb25zdCBvcHRpb25zID0gbWVzc2FnZVR5cGUub3B0aW9ucztcbiAgICBjb25zdCBvcHRpb25WYWwgPSBvcHRpb25zW2V4dGVuc2lvbk5hbWVdO1xuICAgIGlmIChvcHRpb25WYWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gb3B0aW9uVmFsO1xuICAgIH1cbiAgICByZXR1cm4gZXh0ZW5zaW9uVHlwZSA/IGV4dGVuc2lvblR5cGUuZnJvbUpzb24ob3B0aW9uVmFsKSA6IG9wdGlvblZhbDtcbn1cbmV4cG9ydHMucmVhZE1lc3NhZ2VPcHRpb24gPSByZWFkTWVzc2FnZU9wdGlvbjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldFNlbGVjdGVkT25lb2ZWYWx1ZSA9IGV4cG9ydHMuY2xlYXJPbmVvZlZhbHVlID0gZXhwb3J0cy5zZXRVbmtub3duT25lb2ZWYWx1ZSA9IGV4cG9ydHMuc2V0T25lb2ZWYWx1ZSA9IGV4cG9ydHMuZ2V0T25lb2ZWYWx1ZSA9IGV4cG9ydHMuaXNPbmVvZkdyb3VwID0gdm9pZCAwO1xuLyoqXG4gKiBJcyB0aGUgZ2l2ZW4gdmFsdWUgYSB2YWxpZCBvbmVvZiBncm91cD9cbiAqXG4gKiBXZSByZXByZXNlbnQgcHJvdG9idWYgYG9uZW9mYCBhcyBhbGdlYnJhaWMgZGF0YSB0eXBlcyAoQURUKSBpbiBnZW5lcmF0ZWRcbiAqIGNvZGUuIEJ1dCB3aGVuIHdvcmtpbmcgd2l0aCBtZXNzYWdlcyBvZiB1bmtub3duIHR5cGUsIHRoZSBBRFQgZG9lcyBub3RcbiAqIGhlbHAgdXMuXG4gKlxuICogVGhpcyB0eXBlIGd1YXJkIGNoZWNrcyBpZiB0aGUgZ2l2ZW4gb2JqZWN0IGFkaGVyZXMgdG8gdGhlIEFEVCBydWxlcywgd2hpY2hcbiAqIGFyZSBhcyBmb2xsb3dzOlxuICpcbiAqIDEpIE11c3QgYmUgYW4gb2JqZWN0LlxuICpcbiAqIDIpIE11c3QgaGF2ZSBhIFwib25lb2ZLaW5kXCIgZGlzY3JpbWluYXRvciBwcm9wZXJ0eS5cbiAqXG4gKiAzKSBJZiBcIm9uZW9mS2luZFwiIGlzIGB1bmRlZmluZWRgLCBubyBtZW1iZXIgZmllbGQgaXMgc2VsZWN0ZWQuIFRoZSBvYmplY3RcbiAqIG11c3Qgbm90IGhhdmUgYW55IG90aGVyIHByb3BlcnRpZXMuXG4gKlxuICogNCkgSWYgXCJvbmVvZktpbmRcIiBpcyBhIGBzdHJpbmdgLCB0aGUgbWVtYmVyIGZpZWxkIHdpdGggdGhpcyBuYW1lIGlzXG4gKiBzZWxlY3RlZC5cbiAqXG4gKiA1KSBJZiBhIG1lbWJlciBmaWVsZCBpcyBzZWxlY3RlZCwgdGhlIG9iamVjdCBtdXN0IGhhdmUgYSBzZWNvbmQgcHJvcGVydHlcbiAqIHdpdGggdGhpcyBuYW1lLiBUaGUgcHJvcGVydHkgbXVzdCBub3QgYmUgYHVuZGVmaW5lZGAuXG4gKlxuICogNikgTm8gZXh0cmEgcHJvcGVydGllcyBhcmUgYWxsb3dlZC4gVGhlIG9iamVjdCBoYXMgZWl0aGVyIG9uZSBwcm9wZXJ0eVxuICogKG5vIHNlbGVjdGlvbikgb3IgdHdvIHByb3BlcnRpZXMgKHNlbGVjdGlvbikuXG4gKlxuICovXG5mdW5jdGlvbiBpc09uZW9mR3JvdXAoYW55KSB7XG4gICAgaWYgKHR5cGVvZiBhbnkgIT0gJ29iamVjdCcgfHwgYW55ID09PSBudWxsIHx8ICFhbnkuaGFzT3duUHJvcGVydHkoJ29uZW9mS2luZCcpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgc3dpdGNoICh0eXBlb2YgYW55Lm9uZW9mS2luZCkge1xuICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgICAgICBpZiAoYW55W2FueS5vbmVvZktpbmRdID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGFueSkubGVuZ3RoID09IDI7XG4gICAgICAgIGNhc2UgXCJ1bmRlZmluZWRcIjpcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhhbnkpLmxlbmd0aCA9PSAxO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbmV4cG9ydHMuaXNPbmVvZkdyb3VwID0gaXNPbmVvZkdyb3VwO1xuLyoqXG4gKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgZ2l2ZW4gZmllbGQgaW4gYSBvbmVvZiBncm91cC5cbiAqL1xuZnVuY3Rpb24gZ2V0T25lb2ZWYWx1ZShvbmVvZiwga2luZCkge1xuICAgIHJldHVybiBvbmVvZltraW5kXTtcbn1cbmV4cG9ydHMuZ2V0T25lb2ZWYWx1ZSA9IGdldE9uZW9mVmFsdWU7XG5mdW5jdGlvbiBzZXRPbmVvZlZhbHVlKG9uZW9mLCBraW5kLCB2YWx1ZSkge1xuICAgIGlmIChvbmVvZi5vbmVvZktpbmQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBkZWxldGUgb25lb2Zbb25lb2Yub25lb2ZLaW5kXTtcbiAgICB9XG4gICAgb25lb2Yub25lb2ZLaW5kID0ga2luZDtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBvbmVvZltraW5kXSA9IHZhbHVlO1xuICAgIH1cbn1cbmV4cG9ydHMuc2V0T25lb2ZWYWx1ZSA9IHNldE9uZW9mVmFsdWU7XG5mdW5jdGlvbiBzZXRVbmtub3duT25lb2ZWYWx1ZShvbmVvZiwga2luZCwgdmFsdWUpIHtcbiAgICBpZiAob25lb2Yub25lb2ZLaW5kICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZGVsZXRlIG9uZW9mW29uZW9mLm9uZW9mS2luZF07XG4gICAgfVxuICAgIG9uZW9mLm9uZW9mS2luZCA9IGtpbmQ7XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYga2luZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG9uZW9mW2tpbmRdID0gdmFsdWU7XG4gICAgfVxufVxuZXhwb3J0cy5zZXRVbmtub3duT25lb2ZWYWx1ZSA9IHNldFVua25vd25PbmVvZlZhbHVlO1xuLyoqXG4gKiBSZW1vdmVzIHRoZSBzZWxlY3RlZCBmaWVsZCBpbiBhIG9uZW9mIGdyb3VwLlxuICpcbiAqIE5vdGUgdGhhdCB0aGUgcmVjb21tZW5kZWQgd2F5IHRvIG1vZGlmeSBhIG9uZW9mIGdyb3VwIGlzIHRvIHNldFxuICogYSBuZXcgb2JqZWN0OlxuICpcbiAqIGBgYHRzXG4gKiBtZXNzYWdlLnJlc3VsdCA9IHsgb25lb2ZLaW5kOiB1bmRlZmluZWQgfTtcbiAqIGBgYFxuICovXG5mdW5jdGlvbiBjbGVhck9uZW9mVmFsdWUob25lb2YpIHtcbiAgICBpZiAob25lb2Yub25lb2ZLaW5kICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZGVsZXRlIG9uZW9mW29uZW9mLm9uZW9mS2luZF07XG4gICAgfVxuICAgIG9uZW9mLm9uZW9mS2luZCA9IHVuZGVmaW5lZDtcbn1cbmV4cG9ydHMuY2xlYXJPbmVvZlZhbHVlID0gY2xlYXJPbmVvZlZhbHVlO1xuLyoqXG4gKiBSZXR1cm5zIHRoZSBzZWxlY3RlZCB2YWx1ZSBvZiB0aGUgZ2l2ZW4gb25lb2YgZ3JvdXAuXG4gKlxuICogTm90IHRoYXQgdGhlIHJlY29tbWVuZGVkIHdheSB0byBhY2Nlc3MgYSBvbmVvZiBncm91cCBpcyB0byBjaGVja1xuICogdGhlIFwib25lb2ZLaW5kXCIgcHJvcGVydHkgYW5kIGxldCBUeXBlU2NyaXB0IG5hcnJvdyBkb3duIHRoZSB1bmlvblxuICogdHlwZSBmb3IgeW91OlxuICpcbiAqIGBgYHRzXG4gKiBpZiAobWVzc2FnZS5yZXN1bHQub25lb2ZLaW5kID09PSBcImVycm9yXCIpIHtcbiAqICAgbWVzc2FnZS5yZXN1bHQuZXJyb3I7IC8vIHN0cmluZ1xuICogfVxuICogYGBgXG4gKlxuICogSW4gdGhlIHJhcmUgY2FzZSB5b3UganVzdCBuZWVkIHRoZSB2YWx1ZSwgYW5kIGRvIG5vdCBjYXJlIGFib3V0XG4gKiB3aGljaCBwcm90b2J1ZiBmaWVsZCBpcyBzZWxlY3RlZCwgeW91IGNhbiB1c2UgdGhpcyBmdW5jdGlvblxuICogZm9yIGNvbnZlbmllbmNlLlxuICovXG5mdW5jdGlvbiBnZXRTZWxlY3RlZE9uZW9mVmFsdWUob25lb2YpIHtcbiAgICBpZiAob25lb2Yub25lb2ZLaW5kID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIG9uZW9mW29uZW9mLm9uZW9mS2luZF07XG59XG5leHBvcnRzLmdldFNlbGVjdGVkT25lb2ZWYWx1ZSA9IGdldFNlbGVjdGVkT25lb2ZWYWx1ZTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlJlZmxlY3Rpb25UeXBlQ2hlY2sgPSB2b2lkIDA7XG5jb25zdCByZWZsZWN0aW9uX2luZm9fMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24taW5mb1wiKTtcbmNvbnN0IG9uZW9mXzEgPSByZXF1aXJlKFwiLi9vbmVvZlwiKTtcbi8vIG5vaW5zcGVjdGlvbiBKU01ldGhvZENhbkJlU3RhdGljXG5jbGFzcyBSZWZsZWN0aW9uVHlwZUNoZWNrIHtcbiAgICBjb25zdHJ1Y3RvcihpbmZvKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdGhpcy5maWVsZHMgPSAoX2EgPSBpbmZvLmZpZWxkcykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogW107XG4gICAgfVxuICAgIHByZXBhcmUoKSB7XG4gICAgICAgIGlmICh0aGlzLmRhdGEpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHJlcSA9IFtdLCBrbm93biA9IFtdLCBvbmVvZnMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgZmllbGQgb2YgdGhpcy5maWVsZHMpIHtcbiAgICAgICAgICAgIGlmIChmaWVsZC5vbmVvZikge1xuICAgICAgICAgICAgICAgIGlmICghb25lb2ZzLmluY2x1ZGVzKGZpZWxkLm9uZW9mKSkge1xuICAgICAgICAgICAgICAgICAgICBvbmVvZnMucHVzaChmaWVsZC5vbmVvZik7XG4gICAgICAgICAgICAgICAgICAgIHJlcS5wdXNoKGZpZWxkLm9uZW9mKTtcbiAgICAgICAgICAgICAgICAgICAga25vd24ucHVzaChmaWVsZC5vbmVvZik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAga25vd24ucHVzaChmaWVsZC5sb2NhbE5hbWUpO1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoZmllbGQua2luZCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwic2NhbGFyXCI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJlbnVtXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZpZWxkLm9wdCB8fCBmaWVsZC5yZXBlYXQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxLnB1c2goZmllbGQubG9jYWxOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwibWVzc2FnZVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLnJlcGVhdClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXEucHVzaChmaWVsZC5sb2NhbE5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJtYXBcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcS5wdXNoKGZpZWxkLmxvY2FsTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kYXRhID0geyByZXEsIGtub3duLCBvbmVvZnM6IE9iamVjdC52YWx1ZXMob25lb2ZzKSB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJcyB0aGUgYXJndW1lbnQgYSB2YWxpZCBtZXNzYWdlIGFzIHNwZWNpZmllZCBieSB0aGVcbiAgICAgKiByZWZsZWN0aW9uIGluZm9ybWF0aW9uP1xuICAgICAqXG4gICAgICogQ2hlY2tzIGFsbCBmaWVsZCB0eXBlcyByZWN1cnNpdmVseS4gVGhlIGBkZXB0aGBcbiAgICAgKiBzcGVjaWZpZXMgaG93IGRlZXAgaW50byB0aGUgc3RydWN0dXJlIHRoZSBjaGVjayB3aWxsIGJlLlxuICAgICAqXG4gICAgICogV2l0aCBhIGRlcHRoIG9mIDAsIG9ubHkgdGhlIHByZXNlbmNlIG9mIGZpZWxkc1xuICAgICAqIGlzIGNoZWNrZWQuXG4gICAgICpcbiAgICAgKiBXaXRoIGEgZGVwdGggb2YgMSBvciBtb3JlLCB0aGUgZmllbGQgdHlwZXMgYXJlIGNoZWNrZWQuXG4gICAgICpcbiAgICAgKiBXaXRoIGEgZGVwdGggb2YgMiBvciBtb3JlLCB0aGUgbWVtYmVycyBvZiBtYXAsIHJlcGVhdGVkXG4gICAgICogYW5kIG1lc3NhZ2UgZmllbGRzIGFyZSBjaGVja2VkLlxuICAgICAqXG4gICAgICogTWVzc2FnZSBmaWVsZHMgd2lsbCBiZSBjaGVja2VkIHJlY3Vyc2l2ZWx5IHdpdGggZGVwdGggLSAxLlxuICAgICAqXG4gICAgICogVGhlIG51bWJlciBvZiBtYXAgZW50cmllcyAvIHJlcGVhdGVkIHZhbHVlcyBiZWluZyBjaGVja2VkXG4gICAgICogaXMgPCBkZXB0aC5cbiAgICAgKi9cbiAgICBpcyhtZXNzYWdlLCBkZXB0aCwgYWxsb3dFeGNlc3NQcm9wZXJ0aWVzID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKGRlcHRoIDwgMClcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAobWVzc2FnZSA9PT0gbnVsbCB8fCBtZXNzYWdlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIG1lc3NhZ2UgIT0gJ29iamVjdCcpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHRoaXMucHJlcGFyZSgpO1xuICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzKG1lc3NhZ2UpLCBkYXRhID0gdGhpcy5kYXRhO1xuICAgICAgICAvLyBpZiBhIHJlcXVpcmVkIGZpZWxkIGlzIG1pc3NpbmcgaW4gYXJnLCB0aGlzIGNhbm5vdCBiZSBhIFRcbiAgICAgICAgaWYgKGtleXMubGVuZ3RoIDwgZGF0YS5yZXEubGVuZ3RoIHx8IGRhdGEucmVxLnNvbWUobiA9PiAha2V5cy5pbmNsdWRlcyhuKSkpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmICghYWxsb3dFeGNlc3NQcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAvLyBpZiB0aGUgYXJnIGNvbnRhaW5zIGEga2V5IHdlIGRvbnQga25vdywgdGhpcyBpcyBub3QgYSBsaXRlcmFsIFRcbiAgICAgICAgICAgIGlmIChrZXlzLnNvbWUoayA9PiAhZGF0YS5rbm93bi5pbmNsdWRlcyhrKSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIFwiV2l0aCBhIGRlcHRoIG9mIDAsIG9ubHkgdGhlIHByZXNlbmNlIGFuZCBhYnNlbmNlIG9mIGZpZWxkcyBpcyBjaGVja2VkLlwiXG4gICAgICAgIC8vIFwiV2l0aCBhIGRlcHRoIG9mIDEgb3IgbW9yZSwgdGhlIGZpZWxkIHR5cGVzIGFyZSBjaGVja2VkLlwiXG4gICAgICAgIGlmIChkZXB0aCA8IDEpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNoZWNrIG9uZW9mIGdyb3VwXG4gICAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBkYXRhLm9uZW9mcykge1xuICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSBtZXNzYWdlW25hbWVdO1xuICAgICAgICAgICAgaWYgKCFvbmVvZl8xLmlzT25lb2ZHcm91cChncm91cCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgaWYgKGdyb3VwLm9uZW9mS2luZCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLmZpZWxkcy5maW5kKGYgPT4gZi5sb2NhbE5hbWUgPT09IGdyb3VwLm9uZW9mS2luZCk7XG4gICAgICAgICAgICBpZiAoIWZpZWxkKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gd2UgZm91bmQgbm8gZmllbGQsIGJ1dCBoYXZlIGEga2luZCwgc29tZXRoaW5nIGlzIHdyb25nXG4gICAgICAgICAgICBpZiAoIXRoaXMuZmllbGQoZ3JvdXBbZ3JvdXAub25lb2ZLaW5kXSwgZmllbGQsIGFsbG93RXhjZXNzUHJvcGVydGllcywgZGVwdGgpKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjaGVjayB0eXBlc1xuICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIHRoaXMuZmllbGRzKSB7XG4gICAgICAgICAgICBpZiAoZmllbGQub25lb2YgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGlmICghdGhpcy5maWVsZChtZXNzYWdlW2ZpZWxkLmxvY2FsTmFtZV0sIGZpZWxkLCBhbGxvd0V4Y2Vzc1Byb3BlcnRpZXMsIGRlcHRoKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGZpZWxkKGFyZywgZmllbGQsIGFsbG93RXhjZXNzUHJvcGVydGllcywgZGVwdGgpIHtcbiAgICAgICAgbGV0IHJlcGVhdGVkID0gZmllbGQucmVwZWF0O1xuICAgICAgICBzd2l0Y2ggKGZpZWxkLmtpbmQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJzY2FsYXJcIjpcbiAgICAgICAgICAgICAgICBpZiAoYXJnID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmaWVsZC5vcHQ7XG4gICAgICAgICAgICAgICAgaWYgKHJlcGVhdGVkKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsYXJzKGFyZywgZmllbGQuVCwgZGVwdGgsIGZpZWxkLkwpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxhcihhcmcsIGZpZWxkLlQsIGZpZWxkLkwpO1xuICAgICAgICAgICAgY2FzZSBcImVudW1cIjpcbiAgICAgICAgICAgICAgICBpZiAoYXJnID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmaWVsZC5vcHQ7XG4gICAgICAgICAgICAgICAgaWYgKHJlcGVhdGVkKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsYXJzKGFyZywgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5JTlQzMiwgZGVwdGgpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxhcihhcmcsIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuSU5UMzIpO1xuICAgICAgICAgICAgY2FzZSBcIm1lc3NhZ2VcIjpcbiAgICAgICAgICAgICAgICBpZiAoYXJnID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIGlmIChyZXBlYXRlZClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWVzc2FnZXMoYXJnLCBmaWVsZC5UKCksIGFsbG93RXhjZXNzUHJvcGVydGllcywgZGVwdGgpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2UoYXJnLCBmaWVsZC5UKCksIGFsbG93RXhjZXNzUHJvcGVydGllcywgZGVwdGgpO1xuICAgICAgICAgICAgY2FzZSBcIm1hcFwiOlxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYXJnICE9ICdvYmplY3QnIHx8IGFyZyA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmIChkZXB0aCA8IDIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5tYXBLZXlzKGFyZywgZmllbGQuSywgZGVwdGgpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChmaWVsZC5WLmtpbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcInNjYWxhclwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGFycyhPYmplY3QudmFsdWVzKGFyZyksIGZpZWxkLlYuVCwgZGVwdGgsIGZpZWxkLlYuTCk7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJlbnVtXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsYXJzKE9iamVjdC52YWx1ZXMoYXJnKSwgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5JTlQzMiwgZGVwdGgpO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwibWVzc2FnZVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWVzc2FnZXMoT2JqZWN0LnZhbHVlcyhhcmcpLCBmaWVsZC5WLlQoKSwgYWxsb3dFeGNlc3NQcm9wZXJ0aWVzLCBkZXB0aCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBtZXNzYWdlKGFyZywgdHlwZSwgYWxsb3dFeGNlc3NQcm9wZXJ0aWVzLCBkZXB0aCkge1xuICAgICAgICBpZiAoYWxsb3dFeGNlc3NQcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICByZXR1cm4gdHlwZS5pc0Fzc2lnbmFibGUoYXJnLCBkZXB0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHR5cGUuaXMoYXJnLCBkZXB0aCk7XG4gICAgfVxuICAgIG1lc3NhZ2VzKGFyZywgdHlwZSwgYWxsb3dFeGNlc3NQcm9wZXJ0aWVzLCBkZXB0aCkge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJnKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKGRlcHRoIDwgMilcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAoYWxsb3dFeGNlc3NQcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZy5sZW5ndGggJiYgaSA8IGRlcHRoOyBpKyspXG4gICAgICAgICAgICAgICAgaWYgKCF0eXBlLmlzQXNzaWduYWJsZShhcmdbaV0sIGRlcHRoIC0gMSkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJnLmxlbmd0aCAmJiBpIDwgZGVwdGg7IGkrKylcbiAgICAgICAgICAgICAgICBpZiAoIXR5cGUuaXMoYXJnW2ldLCBkZXB0aCAtIDEpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHNjYWxhcihhcmcsIHR5cGUsIGxvbmdUeXBlKSB7XG4gICAgICAgIGxldCBhcmdUeXBlID0gdHlwZW9mIGFyZztcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuVUlOVDY0OlxuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkZJWEVENjQ6XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuSU5UNjQ6XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuU0ZJWEVENjQ6XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuU0lOVDY0OlxuICAgICAgICAgICAgICAgIHN3aXRjaCAobG9uZ1R5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5Mb25nVHlwZS5CSUdJTlQ6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJnVHlwZSA9PSBcImJpZ2ludFwiO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLkxvbmdUeXBlLk5VTUJFUjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhcmdUeXBlID09IFwibnVtYmVyXCIgJiYgIWlzTmFOKGFyZyk7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJnVHlwZSA9PSBcInN0cmluZ1wiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5CT09MOlxuICAgICAgICAgICAgICAgIHJldHVybiBhcmdUeXBlID09ICdib29sZWFuJztcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TVFJJTkc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFyZ1R5cGUgPT0gJ3N0cmluZyc7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuQllURVM6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFyZyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXk7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuRE9VQkxFOlxuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkZMT0FUOlxuICAgICAgICAgICAgICAgIHJldHVybiBhcmdUeXBlID09ICdudW1iZXInICYmICFpc05hTihhcmcpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAvLyBjYXNlIFNjYWxhclR5cGUuVUlOVDMyOlxuICAgICAgICAgICAgICAgIC8vIGNhc2UgU2NhbGFyVHlwZS5GSVhFRDMyOlxuICAgICAgICAgICAgICAgIC8vIGNhc2UgU2NhbGFyVHlwZS5JTlQzMjpcbiAgICAgICAgICAgICAgICAvLyBjYXNlIFNjYWxhclR5cGUuU0lOVDMyOlxuICAgICAgICAgICAgICAgIC8vIGNhc2UgU2NhbGFyVHlwZS5TRklYRUQzMjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJnVHlwZSA9PSAnbnVtYmVyJyAmJiBOdW1iZXIuaXNJbnRlZ2VyKGFyZyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2NhbGFycyhhcmcsIHR5cGUsIGRlcHRoLCBsb25nVHlwZSkge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJnKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKGRlcHRoIDwgMilcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhcmcpKVxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmcubGVuZ3RoICYmIGkgPCBkZXB0aDsgaSsrKVxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5zY2FsYXIoYXJnW2ldLCB0eXBlLCBsb25nVHlwZSkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIG1hcEtleXMobWFwLCB0eXBlLCBkZXB0aCkge1xuICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzKG1hcCk7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLklOVDMyOlxuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkZJWEVEMzI6XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuU0ZJWEVEMzI6XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuU0lOVDMyOlxuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlVJTlQzMjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsYXJzKGtleXMuc2xpY2UoMCwgZGVwdGgpLm1hcChrID0+IHBhcnNlSW50KGspKSwgdHlwZSwgZGVwdGgpO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkJPT0w6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGFycyhrZXlzLnNsaWNlKDAsIGRlcHRoKS5tYXAoayA9PiBrID09ICd0cnVlJyA/IHRydWUgOiBrID09ICdmYWxzZScgPyBmYWxzZSA6IGspLCB0eXBlLCBkZXB0aCk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxhcnMoa2V5cywgdHlwZSwgZGVwdGgsIHJlZmxlY3Rpb25faW5mb18xLkxvbmdUeXBlLlNUUklORyk7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLlJlZmxlY3Rpb25UeXBlQ2hlY2sgPSBSZWZsZWN0aW9uVHlwZUNoZWNrO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVmbGVjdGlvbkxvbmdDb252ZXJ0ID0gdm9pZCAwO1xuY29uc3QgcmVmbGVjdGlvbl9pbmZvXzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLWluZm9cIik7XG4vKipcbiAqIFV0aWxpdHkgbWV0aG9kIHRvIGNvbnZlcnQgYSBQYkxvbmcgb3IgUGJVbG9uZyB0byBhIEphdmFTY3JpcHRcbiAqIHJlcHJlc2VudGF0aW9uIGR1cmluZyBydW50aW1lLlxuICpcbiAqIFdvcmtzIHdpdGggZ2VuZXJhdGVkIGZpZWxkIGluZm9ybWF0aW9uLCBgdW5kZWZpbmVkYCBpcyBlcXVpdmFsZW50XG4gKiB0byBgU1RSSU5HYC5cbiAqL1xuZnVuY3Rpb24gcmVmbGVjdGlvbkxvbmdDb252ZXJ0KGxvbmcsIHR5cGUpIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5Mb25nVHlwZS5CSUdJTlQ6XG4gICAgICAgICAgICByZXR1cm4gbG9uZy50b0JpZ0ludCgpO1xuICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLkxvbmdUeXBlLk5VTUJFUjpcbiAgICAgICAgICAgIHJldHVybiBsb25nLnRvTnVtYmVyKCk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAvLyBjYXNlIHVuZGVmaW5lZDpcbiAgICAgICAgICAgIC8vIGNhc2UgTG9uZ1R5cGUuU1RSSU5HOlxuICAgICAgICAgICAgcmV0dXJuIGxvbmcudG9TdHJpbmcoKTtcbiAgICB9XG59XG5leHBvcnRzLnJlZmxlY3Rpb25Mb25nQ29udmVydCA9IHJlZmxlY3Rpb25Mb25nQ29udmVydDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlJlZmxlY3Rpb25Kc29uUmVhZGVyID0gdm9pZCAwO1xuY29uc3QganNvbl90eXBpbmdzXzEgPSByZXF1aXJlKFwiLi9qc29uLXR5cGluZ3NcIik7XG5jb25zdCBiYXNlNjRfMSA9IHJlcXVpcmUoXCIuL2Jhc2U2NFwiKTtcbmNvbnN0IHJlZmxlY3Rpb25faW5mb18xID0gcmVxdWlyZShcIi4vcmVmbGVjdGlvbi1pbmZvXCIpO1xuY29uc3QgcGJfbG9uZ18xID0gcmVxdWlyZShcIi4vcGItbG9uZ1wiKTtcbmNvbnN0IGFzc2VydF8xID0gcmVxdWlyZShcIi4vYXNzZXJ0XCIpO1xuY29uc3QgcmVmbGVjdGlvbl9sb25nX2NvbnZlcnRfMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24tbG9uZy1jb252ZXJ0XCIpO1xuLyoqXG4gKiBSZWFkcyBwcm90bzMgbWVzc2FnZXMgaW4gY2Fub25pY2FsIEpTT04gZm9ybWF0IHVzaW5nIHJlZmxlY3Rpb24gaW5mb3JtYXRpb24uXG4gKlxuICogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL3Byb3RvMyNqc29uXG4gKi9cbmNsYXNzIFJlZmxlY3Rpb25Kc29uUmVhZGVyIHtcbiAgICBjb25zdHJ1Y3RvcihpbmZvKSB7XG4gICAgICAgIHRoaXMuaW5mbyA9IGluZm87XG4gICAgfVxuICAgIHByZXBhcmUoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKHRoaXMuZk1hcCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmZNYXAgPSB7fTtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkc0lucHV0ID0gKF9hID0gdGhpcy5pbmZvLmZpZWxkcykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkc0lucHV0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mTWFwW2ZpZWxkLm5hbWVdID0gZmllbGQ7XG4gICAgICAgICAgICAgICAgdGhpcy5mTWFwW2ZpZWxkLmpzb25OYW1lXSA9IGZpZWxkO1xuICAgICAgICAgICAgICAgIHRoaXMuZk1hcFtmaWVsZC5sb2NhbE5hbWVdID0gZmllbGQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gQ2Fubm90IHBhcnNlIEpTT04gPHR5cGUgb2YganNvblZhbHVlPiBmb3IgPHR5cGUgbmFtZT4jPGZpZWxkTmFtZT4uXG4gICAgYXNzZXJ0KGNvbmRpdGlvbiwgZmllbGROYW1lLCBqc29uVmFsdWUpIHtcbiAgICAgICAgaWYgKCFjb25kaXRpb24pIHtcbiAgICAgICAgICAgIGxldCB3aGF0ID0ganNvbl90eXBpbmdzXzEudHlwZW9mSnNvblZhbHVlKGpzb25WYWx1ZSk7XG4gICAgICAgICAgICBpZiAod2hhdCA9PSBcIm51bWJlclwiIHx8IHdoYXQgPT0gXCJib29sZWFuXCIpXG4gICAgICAgICAgICAgICAgd2hhdCA9IGpzb25WYWx1ZS50b1N0cmluZygpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcGFyc2UgSlNPTiAke3doYXR9IGZvciAke3RoaXMuaW5mby50eXBlTmFtZX0jJHtmaWVsZE5hbWV9YCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVhZHMgYSBtZXNzYWdlIGZyb20gY2Fub25pY2FsIEpTT04gZm9ybWF0IGludG8gdGhlIHRhcmdldCBtZXNzYWdlLlxuICAgICAqXG4gICAgICogUmVwZWF0ZWQgZmllbGRzIGFyZSBhcHBlbmRlZC4gTWFwIGVudHJpZXMgYXJlIGFkZGVkLCBvdmVyd3JpdGluZ1xuICAgICAqIGV4aXN0aW5nIGtleXMuXG4gICAgICpcbiAgICAgKiBJZiBhIG1lc3NhZ2UgZmllbGQgaXMgYWxyZWFkeSBwcmVzZW50LCBpdCB3aWxsIGJlIG1lcmdlZCB3aXRoIHRoZVxuICAgICAqIG5ldyBkYXRhLlxuICAgICAqL1xuICAgIHJlYWQoaW5wdXQsIG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5wcmVwYXJlKCk7XG4gICAgICAgIGNvbnN0IG9uZW9mc0hhbmRsZWQgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBbanNvbktleSwganNvblZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5mTWFwW2pzb25LZXldO1xuICAgICAgICAgICAgaWYgKCFmaWVsZCkge1xuICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucy5pZ25vcmVVbmtub3duRmllbGRzKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZvdW5kIHVua25vd24gZmllbGQgd2hpbGUgcmVhZGluZyAke3RoaXMuaW5mby50eXBlTmFtZX0gZnJvbSBKU09OIGZvcm1hdC4gSlNPTiBrZXk6ICR7anNvbktleX1gKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGxvY2FsTmFtZSA9IGZpZWxkLmxvY2FsTmFtZTtcbiAgICAgICAgICAgIC8vIGhhbmRsZSBvbmVvZiBBRFRcbiAgICAgICAgICAgIGxldCB0YXJnZXQ7IC8vIHRoaXMgd2lsbCBiZSB0aGUgdGFyZ2V0IGZvciB0aGUgZmllbGQgdmFsdWUsIHdoZXRoZXIgaXQgaXMgbWVtYmVyIG9mIGEgb25lb2Ygb3Igbm90XG4gICAgICAgICAgICBpZiAoZmllbGQub25lb2YpIHtcbiAgICAgICAgICAgICAgICBpZiAoanNvblZhbHVlID09PSBudWxsICYmIChmaWVsZC5raW5kICE9PSAnZW51bScgfHwgZmllbGQuVCgpWzBdICE9PSAnZ29vZ2xlLnByb3RvYnVmLk51bGxWYWx1ZScpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBzaW5jZSBqc29uIG9iamVjdHMgYXJlIHVub3JkZXJlZCBieSBzcGVjaWZpY2F0aW9uLCBpdCBpcyBub3QgcG9zc2libGUgdG8gdGFrZSB0aGUgbGFzdCBvZiBtdWx0aXBsZSBvbmVvZnNcbiAgICAgICAgICAgICAgICBpZiAob25lb2ZzSGFuZGxlZC5pbmNsdWRlcyhmaWVsZC5vbmVvZikpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTXVsdGlwbGUgbWVtYmVycyBvZiB0aGUgb25lb2YgZ3JvdXAgXCIke2ZpZWxkLm9uZW9mfVwiIG9mICR7dGhpcy5pbmZvLnR5cGVOYW1lfSBhcmUgcHJlc2VudCBpbiBKU09OLmApO1xuICAgICAgICAgICAgICAgIG9uZW9mc0hhbmRsZWQucHVzaChmaWVsZC5vbmVvZik7XG4gICAgICAgICAgICAgICAgdGFyZ2V0ID0gbWVzc2FnZVtmaWVsZC5vbmVvZl0gPSB7XG4gICAgICAgICAgICAgICAgICAgIG9uZW9mS2luZDogbG9jYWxOYW1lXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRhcmdldCA9IG1lc3NhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB3ZSBoYXZlIGhhbmRsZWQgb25lb2YgYWJvdmUuIHdlIGp1c3QgaGF2ZSByZWFkIHRoZSB2YWx1ZSBpbnRvIGB0YXJnZXRgLlxuICAgICAgICAgICAgaWYgKGZpZWxkLmtpbmQgPT0gJ21hcCcpIHtcbiAgICAgICAgICAgICAgICBpZiAoanNvblZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBjaGVjayBpbnB1dFxuICAgICAgICAgICAgICAgIHRoaXMuYXNzZXJ0KGpzb25fdHlwaW5nc18xLmlzSnNvbk9iamVjdChqc29uVmFsdWUpLCBmaWVsZC5uYW1lLCBqc29uVmFsdWUpO1xuICAgICAgICAgICAgICAgIC8vIG91ciB0YXJnZXQgdG8gcHV0IG1hcCBlbnRyaWVzIGludG9cbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZE9iaiA9IHRhcmdldFtsb2NhbE5hbWVdO1xuICAgICAgICAgICAgICAgIC8vIHJlYWQgZW50cmllc1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2pzb25PYmpLZXksIGpzb25PYmpWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoanNvblZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFzc2VydChqc29uT2JqVmFsdWUgIT09IG51bGwsIGZpZWxkLm5hbWUgKyBcIiBtYXAgdmFsdWVcIiwgbnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHJlYWQgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgbGV0IHZhbDtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChmaWVsZC5WLmtpbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJtZXNzYWdlXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gZmllbGQuVi5UKCkuaW50ZXJuYWxKc29uUmVhZChqc29uT2JqVmFsdWUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImVudW1cIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSB0aGlzLmVudW0oZmllbGQuVi5UKCksIGpzb25PYmpWYWx1ZSwgZmllbGQubmFtZSwgb3B0aW9ucy5pZ25vcmVVbmtub3duRmllbGRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwic2NhbGFyXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gdGhpcy5zY2FsYXIoanNvbk9ialZhbHVlLCBmaWVsZC5WLlQsIGZpZWxkLlYuTCwgZmllbGQubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hc3NlcnQodmFsICE9PSB1bmRlZmluZWQsIGZpZWxkLm5hbWUgKyBcIiBtYXAgdmFsdWVcIiwganNvbk9ialZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVhZCBrZXlcbiAgICAgICAgICAgICAgICAgICAgbGV0IGtleSA9IGpzb25PYmpLZXk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZC5LID09IHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuQk9PTClcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IGtleSA9PSBcInRydWVcIiA/IHRydWUgOiBrZXkgPT0gXCJmYWxzZVwiID8gZmFsc2UgOiBrZXk7XG4gICAgICAgICAgICAgICAgICAgIGtleSA9IHRoaXMuc2NhbGFyKGtleSwgZmllbGQuSywgcmVmbGVjdGlvbl9pbmZvXzEuTG9uZ1R5cGUuU1RSSU5HLCBmaWVsZC5uYW1lKS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBmaWVsZE9ialtrZXldID0gdmFsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGZpZWxkLnJlcGVhdCkge1xuICAgICAgICAgICAgICAgIGlmIChqc29uVmFsdWUgPT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIC8vIGNoZWNrIGlucHV0XG4gICAgICAgICAgICAgICAgdGhpcy5hc3NlcnQoQXJyYXkuaXNBcnJheShqc29uVmFsdWUpLCBmaWVsZC5uYW1lLCBqc29uVmFsdWUpO1xuICAgICAgICAgICAgICAgIC8vIG91ciB0YXJnZXQgdG8gcHV0IGFycmF5IGVudHJpZXMgaW50b1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkQXJyID0gdGFyZ2V0W2xvY2FsTmFtZV07XG4gICAgICAgICAgICAgICAgLy8gcmVhZCBhcnJheSBlbnRyaWVzXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBqc29uSXRlbSBvZiBqc29uVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hc3NlcnQoanNvbkl0ZW0gIT09IG51bGwsIGZpZWxkLm5hbWUsIG51bGwpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgdmFsO1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGZpZWxkLmtpbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJtZXNzYWdlXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gZmllbGQuVCgpLmludGVybmFsSnNvblJlYWQoanNvbkl0ZW0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImVudW1cIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSB0aGlzLmVudW0oZmllbGQuVCgpLCBqc29uSXRlbSwgZmllbGQubmFtZSwgb3B0aW9ucy5pZ25vcmVVbmtub3duRmllbGRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwic2NhbGFyXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gdGhpcy5zY2FsYXIoanNvbkl0ZW0sIGZpZWxkLlQsIGZpZWxkLkwsIGZpZWxkLm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXNzZXJ0KHZhbCAhPT0gdW5kZWZpbmVkLCBmaWVsZC5uYW1lLCBqc29uVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBmaWVsZEFyci5wdXNoKHZhbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChmaWVsZC5raW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJtZXNzYWdlXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoanNvblZhbHVlID09PSBudWxsICYmIGZpZWxkLlQoKS50eXBlTmFtZSAhPSAnZ29vZ2xlLnByb3RvYnVmLlZhbHVlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXNzZXJ0KGZpZWxkLm9uZW9mID09PSB1bmRlZmluZWQsIGZpZWxkLm5hbWUgKyBcIiAob25lb2YgbWVtYmVyKVwiLCBudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFtsb2NhbE5hbWVdID0gZmllbGQuVCgpLmludGVybmFsSnNvblJlYWQoanNvblZhbHVlLCBvcHRpb25zLCB0YXJnZXRbbG9jYWxOYW1lXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImVudW1cIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWwgPSB0aGlzLmVudW0oZmllbGQuVCgpLCBqc29uVmFsdWUsIGZpZWxkLm5hbWUsIG9wdGlvbnMuaWdub3JlVW5rbm93bkZpZWxkcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFtsb2NhbE5hbWVdID0gdmFsO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJzY2FsYXJcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFtsb2NhbE5hbWVdID0gdGhpcy5zY2FsYXIoanNvblZhbHVlLCBmaWVsZC5ULCBmaWVsZC5MLCBmaWVsZC5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGBmYWxzZWAgZm9yIHVucmVjb2duaXplZCBzdHJpbmcgcmVwcmVzZW50YXRpb25zLlxuICAgICAqXG4gICAgICogZ29vZ2xlLnByb3RvYnVmLk51bGxWYWx1ZSBhY2NlcHRzIG9ubHkgSlNPTiBgbnVsbGAgKG9yIHRoZSBvbGQgYFwiTlVMTF9WQUxVRVwiYCkuXG4gICAgICovXG4gICAgZW51bSh0eXBlLCBqc29uLCBmaWVsZE5hbWUsIGlnbm9yZVVua25vd25GaWVsZHMpIHtcbiAgICAgICAgaWYgKHR5cGVbMF0gPT0gJ2dvb2dsZS5wcm90b2J1Zi5OdWxsVmFsdWUnKVxuICAgICAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KGpzb24gPT09IG51bGwgfHwganNvbiA9PT0gXCJOVUxMX1ZBTFVFXCIsIGBVbmFibGUgdG8gcGFyc2UgZmllbGQgJHt0aGlzLmluZm8udHlwZU5hbWV9IyR7ZmllbGROYW1lfSwgZW51bSAke3R5cGVbMF19IG9ubHkgYWNjZXB0cyBudWxsLmApO1xuICAgICAgICBpZiAoanNvbiA9PT0gbnVsbClcbiAgICAgICAgICAgIC8vIHdlIHJlcXVpcmUgMCB0byBiZSBkZWZhdWx0IHZhbHVlIGZvciBhbGwgZW51bXNcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICBzd2l0Y2ggKHR5cGVvZiBqc29uKSB7XG4gICAgICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KE51bWJlci5pc0ludGVnZXIoanNvbiksIGBVbmFibGUgdG8gcGFyc2UgZmllbGQgJHt0aGlzLmluZm8udHlwZU5hbWV9IyR7ZmllbGROYW1lfSwgZW51bSBjYW4gb25seSBiZSBpbnRlZ3JhbCBudW1iZXIsIGdvdCAke2pzb259LmApO1xuICAgICAgICAgICAgICAgIHJldHVybiBqc29uO1xuICAgICAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgICAgICAgIGxldCBsb2NhbEVudW1OYW1lID0ganNvbjtcbiAgICAgICAgICAgICAgICBpZiAodHlwZVsyXSAmJiBqc29uLnN1YnN0cmluZygwLCB0eXBlWzJdLmxlbmd0aCkgPT09IHR5cGVbMl0pXG4gICAgICAgICAgICAgICAgICAgIC8vIGxvb2t1cCB3aXRob3V0IHRoZSBzaGFyZWQgcHJlZml4XG4gICAgICAgICAgICAgICAgICAgIGxvY2FsRW51bU5hbWUgPSBqc29uLnN1YnN0cmluZyh0eXBlWzJdLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgbGV0IGVudW1OdW1iZXIgPSB0eXBlWzFdW2xvY2FsRW51bU5hbWVdO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZW51bU51bWJlciA9PT0gJ3VuZGVmaW5lZCcgJiYgaWdub3JlVW5rbm93bkZpZWxkcykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydCh0eXBlb2YgZW51bU51bWJlciA9PSBcIm51bWJlclwiLCBgVW5hYmxlIHRvIHBhcnNlIGZpZWxkICR7dGhpcy5pbmZvLnR5cGVOYW1lfSMke2ZpZWxkTmFtZX0sIGVudW0gJHt0eXBlWzBdfSBoYXMgbm8gdmFsdWUgZm9yIFwiJHtqc29ufVwiLmApO1xuICAgICAgICAgICAgICAgIHJldHVybiBlbnVtTnVtYmVyO1xuICAgICAgICB9XG4gICAgICAgIGFzc2VydF8xLmFzc2VydChmYWxzZSwgYFVuYWJsZSB0byBwYXJzZSBmaWVsZCAke3RoaXMuaW5mby50eXBlTmFtZX0jJHtmaWVsZE5hbWV9LCBjYW5ub3QgcGFyc2UgZW51bSB2YWx1ZSBmcm9tICR7dHlwZW9mIGpzb259XCIuYCk7XG4gICAgfVxuICAgIHNjYWxhcihqc29uLCB0eXBlLCBsb25nVHlwZSwgZmllbGROYW1lKSB7XG4gICAgICAgIGxldCBlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICAgICAgLy8gZmxvYXQsIGRvdWJsZTogSlNPTiB2YWx1ZSB3aWxsIGJlIGEgbnVtYmVyIG9yIG9uZSBvZiB0aGUgc3BlY2lhbCBzdHJpbmcgdmFsdWVzIFwiTmFOXCIsIFwiSW5maW5pdHlcIiwgYW5kIFwiLUluZmluaXR5XCIuXG4gICAgICAgICAgICAgICAgLy8gRWl0aGVyIG51bWJlcnMgb3Igc3RyaW5ncyBhcmUgYWNjZXB0ZWQuIEV4cG9uZW50IG5vdGF0aW9uIGlzIGFsc28gYWNjZXB0ZWQuXG4gICAgICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkRPVUJMRTpcbiAgICAgICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuRkxPQVQ6XG4gICAgICAgICAgICAgICAgICAgIGlmIChqc29uID09PSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC4wO1xuICAgICAgICAgICAgICAgICAgICBpZiAoanNvbiA9PT0gXCJOYU5cIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOdW1iZXIuTmFOO1xuICAgICAgICAgICAgICAgICAgICBpZiAoanNvbiA9PT0gXCJJbmZpbml0eVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24gPT09IFwiLUluZmluaXR5XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO1xuICAgICAgICAgICAgICAgICAgICBpZiAoanNvbiA9PT0gXCJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZSA9IFwiZW1wdHkgc3RyaW5nXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGpzb24gPT0gXCJzdHJpbmdcIiAmJiBqc29uLnRyaW0oKS5sZW5ndGggIT09IGpzb24ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlID0gXCJleHRyYSB3aGl0ZXNwYWNlXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGpzb24gIT0gXCJzdHJpbmdcIiAmJiB0eXBlb2YganNvbiAhPSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBsZXQgZmxvYXQgPSBOdW1iZXIoanNvbik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChOdW1iZXIuaXNOYU4oZmxvYXQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlID0gXCJub3QgYSBudW1iZXJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghTnVtYmVyLmlzRmluaXRlKGZsb2F0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5maW5pdHkgYW5kIC1pbmZpbml0eSBhcmUgaGFuZGxlZCBieSBzdHJpbmcgcmVwcmVzZW50YXRpb24gYWJvdmUsIHNvIHRoaXMgaXMgYW4gZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgIGUgPSBcInRvbyBsYXJnZSBvciBzbWFsbFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5GTE9BVClcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydEZsb2F0MzIoZmxvYXQpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmxvYXQ7XG4gICAgICAgICAgICAgICAgLy8gaW50MzIsIGZpeGVkMzIsIHVpbnQzMjogSlNPTiB2YWx1ZSB3aWxsIGJlIGEgZGVjaW1hbCBudW1iZXIuIEVpdGhlciBudW1iZXJzIG9yIHN0cmluZ3MgYXJlIGFjY2VwdGVkLlxuICAgICAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5JTlQzMjpcbiAgICAgICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuRklYRUQzMjpcbiAgICAgICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuU0ZJWEVEMzI6XG4gICAgICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNJTlQzMjpcbiAgICAgICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuVUlOVDMyOlxuICAgICAgICAgICAgICAgICAgICBpZiAoanNvbiA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgICAgICAgICBsZXQgaW50MzI7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YganNvbiA9PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgaW50MzIgPSBqc29uO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChqc29uID09PSBcIlwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgZSA9IFwiZW1wdHkgc3RyaW5nXCI7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBqc29uID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqc29uLnRyaW0oKS5sZW5ndGggIT09IGpzb24ubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgPSBcImV4dHJhIHdoaXRlc3BhY2VcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMiA9IE51bWJlcihqc29uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoaW50MzIgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlVJTlQzMilcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydFVJbnQzMihpbnQzMik7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydEludDMyKGludDMyKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGludDMyO1xuICAgICAgICAgICAgICAgIC8vIGludDY0LCBmaXhlZDY0LCB1aW50NjQ6IEpTT04gdmFsdWUgd2lsbCBiZSBhIGRlY2ltYWwgc3RyaW5nLiBFaXRoZXIgbnVtYmVycyBvciBzdHJpbmdzIGFyZSBhY2NlcHRlZC5cbiAgICAgICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuSU5UNjQ6XG4gICAgICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNGSVhFRDY0OlxuICAgICAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TSU5UNjQ6XG4gICAgICAgICAgICAgICAgICAgIGlmIChqc29uID09PSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlZmxlY3Rpb25fbG9uZ19jb252ZXJ0XzEucmVmbGVjdGlvbkxvbmdDb252ZXJ0KHBiX2xvbmdfMS5QYkxvbmcuWkVSTywgbG9uZ1R5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGpzb24gIT0gXCJudW1iZXJcIiAmJiB0eXBlb2YganNvbiAhPSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWZsZWN0aW9uX2xvbmdfY29udmVydF8xLnJlZmxlY3Rpb25Mb25nQ29udmVydChwYl9sb25nXzEuUGJMb25nLmZyb20oanNvbiksIGxvbmdUeXBlKTtcbiAgICAgICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuRklYRUQ2NDpcbiAgICAgICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuVUlOVDY0OlxuICAgICAgICAgICAgICAgICAgICBpZiAoanNvbiA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWZsZWN0aW9uX2xvbmdfY29udmVydF8xLnJlZmxlY3Rpb25Mb25nQ29udmVydChwYl9sb25nXzEuUGJVTG9uZy5aRVJPLCBsb25nVHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YganNvbiAhPSBcIm51bWJlclwiICYmIHR5cGVvZiBqc29uICE9IFwic3RyaW5nXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlZmxlY3Rpb25fbG9uZ19jb252ZXJ0XzEucmVmbGVjdGlvbkxvbmdDb252ZXJ0KHBiX2xvbmdfMS5QYlVMb25nLmZyb20oanNvbiksIGxvbmdUeXBlKTtcbiAgICAgICAgICAgICAgICAvLyBib29sOlxuICAgICAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5CT09MOlxuICAgICAgICAgICAgICAgICAgICBpZiAoanNvbiA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBqc29uICE9PSBcImJvb2xlYW5cIilcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ganNvbjtcbiAgICAgICAgICAgICAgICAvLyBzdHJpbmc6XG4gICAgICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNUUklORzpcbiAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24gPT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBqc29uICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlID0gXCJleHRyYSB3aGl0ZXNwYWNlXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KGpzb24pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlID0gXCJpbnZhbGlkIFVURjhcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBqc29uO1xuICAgICAgICAgICAgICAgIC8vIGJ5dGVzOiBKU09OIHZhbHVlIHdpbGwgYmUgdGhlIGRhdGEgZW5jb2RlZCBhcyBhIHN0cmluZyB1c2luZyBzdGFuZGFyZCBiYXNlNjQgZW5jb2Rpbmcgd2l0aCBwYWRkaW5ncy5cbiAgICAgICAgICAgICAgICAvLyBFaXRoZXIgc3RhbmRhcmQgb3IgVVJMLXNhZmUgYmFzZTY0IGVuY29kaW5nIHdpdGgvd2l0aG91dCBwYWRkaW5ncyBhcmUgYWNjZXB0ZWQuXG4gICAgICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkJZVEVTOlxuICAgICAgICAgICAgICAgICAgICBpZiAoanNvbiA9PT0gbnVsbCB8fCBqc29uID09PSBcIlwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KDApO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGpzb24gIT09ICdzdHJpbmcnKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBiYXNlNjRfMS5iYXNlNjRkZWNvZGUoanNvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBlID0gZXJyb3IubWVzc2FnZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFzc2VydChmYWxzZSwgZmllbGROYW1lICsgKGUgPyBcIiAtIFwiICsgZSA6IFwiXCIpLCBqc29uKTtcbiAgICB9XG59XG5leHBvcnRzLlJlZmxlY3Rpb25Kc29uUmVhZGVyID0gUmVmbGVjdGlvbkpzb25SZWFkZXI7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5SZWZsZWN0aW9uSnNvbldyaXRlciA9IHZvaWQgMDtcbmNvbnN0IGJhc2U2NF8xID0gcmVxdWlyZShcIi4vYmFzZTY0XCIpO1xuY29uc3QgcGJfbG9uZ18xID0gcmVxdWlyZShcIi4vcGItbG9uZ1wiKTtcbmNvbnN0IHJlZmxlY3Rpb25faW5mb18xID0gcmVxdWlyZShcIi4vcmVmbGVjdGlvbi1pbmZvXCIpO1xuY29uc3QgYXNzZXJ0XzEgPSByZXF1aXJlKFwiLi9hc3NlcnRcIik7XG4vKipcbiAqIFdyaXRlcyBwcm90bzMgbWVzc2FnZXMgaW4gY2Fub25pY2FsIEpTT04gZm9ybWF0IHVzaW5nIHJlZmxlY3Rpb25cbiAqIGluZm9ybWF0aW9uLlxuICpcbiAqIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvZG9jcy9wcm90bzMjanNvblxuICovXG5jbGFzcyBSZWZsZWN0aW9uSnNvbldyaXRlciB7XG4gICAgY29uc3RydWN0b3IoaW5mbykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHRoaXMuZmllbGRzID0gKF9hID0gaW5mby5maWVsZHMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFtdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyB0aGUgbWVzc2FnZSB0byBhIEpTT04gb2JqZWN0LCBiYXNlZCBvbiB0aGUgZmllbGQgZGVzY3JpcHRvcnMuXG4gICAgICovXG4gICAgd3JpdGUobWVzc2FnZSwgb3B0aW9ucykge1xuICAgICAgICBjb25zdCBqc29uID0ge30sIHNvdXJjZSA9IG1lc3NhZ2U7XG4gICAgICAgIGZvciAoY29uc3QgZmllbGQgb2YgdGhpcy5maWVsZHMpIHtcbiAgICAgICAgICAgIC8vIGZpZWxkIGlzIG5vdCBwYXJ0IG9mIGEgb25lb2YsIHNpbXBseSB3cml0ZSBhcyBpc1xuICAgICAgICAgICAgaWYgKCFmaWVsZC5vbmVvZikge1xuICAgICAgICAgICAgICAgIGxldCBqc29uVmFsdWUgPSB0aGlzLmZpZWxkKGZpZWxkLCBzb3VyY2VbZmllbGQubG9jYWxOYW1lXSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgaWYgKGpzb25WYWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICBqc29uW29wdGlvbnMudXNlUHJvdG9GaWVsZE5hbWUgPyBmaWVsZC5uYW1lIDogZmllbGQuanNvbk5hbWVdID0ganNvblZhbHVlO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZmllbGQgaXMgcGFydCBvZiBhIG9uZW9mXG4gICAgICAgICAgICBjb25zdCBncm91cCA9IHNvdXJjZVtmaWVsZC5vbmVvZl07XG4gICAgICAgICAgICBpZiAoZ3JvdXAub25lb2ZLaW5kICE9PSBmaWVsZC5sb2NhbE5hbWUpXG4gICAgICAgICAgICAgICAgY29udGludWU7IC8vIG5vdCBzZWxlY3RlZCwgc2tpcFxuICAgICAgICAgICAgY29uc3Qgb3B0ID0gZmllbGQua2luZCA9PSAnc2NhbGFyJyB8fCBmaWVsZC5raW5kID09ICdlbnVtJ1xuICAgICAgICAgICAgICAgID8gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKSwgeyBlbWl0RGVmYXVsdFZhbHVlczogdHJ1ZSB9KSA6IG9wdGlvbnM7XG4gICAgICAgICAgICBsZXQganNvblZhbHVlID0gdGhpcy5maWVsZChmaWVsZCwgZ3JvdXBbZmllbGQubG9jYWxOYW1lXSwgb3B0KTtcbiAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydChqc29uVmFsdWUgIT09IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICBqc29uW29wdGlvbnMudXNlUHJvdG9GaWVsZE5hbWUgPyBmaWVsZC5uYW1lIDogZmllbGQuanNvbk5hbWVdID0ganNvblZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBqc29uO1xuICAgIH1cbiAgICBmaWVsZChmaWVsZCwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgICAgICAgbGV0IGpzb25WYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKGZpZWxkLmtpbmQgPT0gJ21hcCcpIHtcbiAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydCh0eXBlb2YgdmFsdWUgPT0gXCJvYmplY3RcIiAmJiB2YWx1ZSAhPT0gbnVsbCk7XG4gICAgICAgICAgICBjb25zdCBqc29uT2JqID0ge307XG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkLlYua2luZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzY2FsYXJcIjpcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBbZW50cnlLZXksIGVudHJ5VmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsID0gdGhpcy5zY2FsYXIoZmllbGQuVi5ULCBlbnRyeVZhbHVlLCBmaWVsZC5uYW1lLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnQodmFsICE9PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAganNvbk9ialtlbnRyeUtleS50b1N0cmluZygpXSA9IHZhbDsgLy8gSlNPTiBzdGFuZGFyZCBhbGxvd3Mgb25seSAoZG91YmxlIHF1b3RlZCkgc3RyaW5nIGFzIHByb3BlcnR5IGtleVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJtZXNzYWdlXCI6XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2VUeXBlID0gZmllbGQuVi5UKCk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2VudHJ5S2V5LCBlbnRyeVZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbCA9IHRoaXMubWVzc2FnZShtZXNzYWdlVHlwZSwgZW50cnlWYWx1ZSwgZmllbGQubmFtZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnQodmFsICE9PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAganNvbk9ialtlbnRyeUtleS50b1N0cmluZygpXSA9IHZhbDsgLy8gSlNPTiBzdGFuZGFyZCBhbGxvd3Mgb25seSAoZG91YmxlIHF1b3RlZCkgc3RyaW5nIGFzIHByb3BlcnR5IGtleVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJlbnVtXCI6XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVudW1JbmZvID0gZmllbGQuVi5UKCk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2VudHJ5S2V5LCBlbnRyeVZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydChlbnRyeVZhbHVlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIGVudHJ5VmFsdWUgPT0gJ251bWJlcicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsID0gdGhpcy5lbnVtKGVudW1JbmZvLCBlbnRyeVZhbHVlLCBmaWVsZC5uYW1lLCBmYWxzZSwgdHJ1ZSwgb3B0aW9ucy5lbnVtQXNJbnRlZ2VyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydCh2YWwgIT09IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBqc29uT2JqW2VudHJ5S2V5LnRvU3RyaW5nKCldID0gdmFsOyAvLyBKU09OIHN0YW5kYXJkIGFsbG93cyBvbmx5IChkb3VibGUgcXVvdGVkKSBzdHJpbmcgYXMgcHJvcGVydHkga2V5XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5lbWl0RGVmYXVsdFZhbHVlcyB8fCBPYmplY3Qua2V5cyhqc29uT2JqKS5sZW5ndGggPiAwKVxuICAgICAgICAgICAgICAgIGpzb25WYWx1ZSA9IGpzb25PYmo7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZmllbGQucmVwZWF0KSB7XG4gICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnQoQXJyYXkuaXNBcnJheSh2YWx1ZSkpO1xuICAgICAgICAgICAgY29uc3QganNvbkFyciA9IFtdO1xuICAgICAgICAgICAgc3dpdGNoIChmaWVsZC5raW5kKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNjYWxhclwiOlxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWwgPSB0aGlzLnNjYWxhcihmaWVsZC5ULCB2YWx1ZVtpXSwgZmllbGQubmFtZSwgZmllbGQub3B0LCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydCh2YWwgIT09IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBqc29uQXJyLnB1c2godmFsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiZW51bVwiOlxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbnVtSW5mbyA9IGZpZWxkLlQoKTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KHZhbHVlW2ldID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHZhbHVlW2ldID09ICdudW1iZXInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbCA9IHRoaXMuZW51bShlbnVtSW5mbywgdmFsdWVbaV0sIGZpZWxkLm5hbWUsIGZpZWxkLm9wdCwgdHJ1ZSwgb3B0aW9ucy5lbnVtQXNJbnRlZ2VyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydCh2YWwgIT09IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBqc29uQXJyLnB1c2godmFsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwibWVzc2FnZVwiOlxuICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlVHlwZSA9IGZpZWxkLlQoKTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsID0gdGhpcy5tZXNzYWdlKG1lc3NhZ2VUeXBlLCB2YWx1ZVtpXSwgZmllbGQubmFtZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnQodmFsICE9PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAganNvbkFyci5wdXNoKHZhbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBhZGQgY29udmVydGVkIGFycmF5IHRvIGpzb24gb3V0cHV0XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5lbWl0RGVmYXVsdFZhbHVlcyB8fCBqc29uQXJyLmxlbmd0aCA+IDAgfHwgb3B0aW9ucy5lbWl0RGVmYXVsdFZhbHVlcylcbiAgICAgICAgICAgICAgICBqc29uVmFsdWUgPSBqc29uQXJyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc3dpdGNoIChmaWVsZC5raW5kKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNjYWxhclwiOlxuICAgICAgICAgICAgICAgICAgICBqc29uVmFsdWUgPSB0aGlzLnNjYWxhcihmaWVsZC5ULCB2YWx1ZSwgZmllbGQubmFtZSwgZmllbGQub3B0LCBvcHRpb25zLmVtaXREZWZhdWx0VmFsdWVzKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImVudW1cIjpcbiAgICAgICAgICAgICAgICAgICAganNvblZhbHVlID0gdGhpcy5lbnVtKGZpZWxkLlQoKSwgdmFsdWUsIGZpZWxkLm5hbWUsIGZpZWxkLm9wdCwgb3B0aW9ucy5lbWl0RGVmYXVsdFZhbHVlcywgb3B0aW9ucy5lbnVtQXNJbnRlZ2VyKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm1lc3NhZ2VcIjpcbiAgICAgICAgICAgICAgICAgICAganNvblZhbHVlID0gdGhpcy5tZXNzYWdlKGZpZWxkLlQoKSwgdmFsdWUsIGZpZWxkLm5hbWUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ganNvblZhbHVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGBudWxsYCBhcyB0aGUgZGVmYXVsdCBmb3IgZ29vZ2xlLnByb3RvYnVmLk51bGxWYWx1ZS5cbiAgICAgKi9cbiAgICBlbnVtKHR5cGUsIHZhbHVlLCBmaWVsZE5hbWUsIG9wdGlvbmFsLCBlbWl0RGVmYXVsdFZhbHVlcywgZW51bUFzSW50ZWdlcikge1xuICAgICAgICBpZiAodHlwZVswXSA9PSAnZ29vZ2xlLnByb3RvYnVmLk51bGxWYWx1ZScpXG4gICAgICAgICAgICByZXR1cm4gIWVtaXREZWZhdWx0VmFsdWVzICYmICFvcHRpb25hbCA/IHVuZGVmaW5lZCA6IG51bGw7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnQob3B0aW9uYWwpO1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgPT09IDAgJiYgIWVtaXREZWZhdWx0VmFsdWVzICYmICFvcHRpb25hbClcbiAgICAgICAgICAgIC8vIHdlIHJlcXVpcmUgMCB0byBiZSBkZWZhdWx0IHZhbHVlIGZvciBhbGwgZW51bXNcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIGFzc2VydF8xLmFzc2VydCh0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicpO1xuICAgICAgICBhc3NlcnRfMS5hc3NlcnQoTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkpO1xuICAgICAgICBpZiAoZW51bUFzSW50ZWdlciB8fCAhdHlwZVsxXS5oYXNPd25Qcm9wZXJ0eSh2YWx1ZSkpXG4gICAgICAgICAgICAvLyBpZiB3ZSBkb24ndCBub3cgdGhlIGVudW0gdmFsdWUsIGp1c3QgcmV0dXJuIHRoZSBudW1iZXJcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgaWYgKHR5cGVbMl0pXG4gICAgICAgICAgICAvLyByZXN0b3JlIHRoZSBkcm9wcGVkIHByZWZpeFxuICAgICAgICAgICAgcmV0dXJuIHR5cGVbMl0gKyB0eXBlWzFdW3ZhbHVlXTtcbiAgICAgICAgcmV0dXJuIHR5cGVbMV1bdmFsdWVdO1xuICAgIH1cbiAgICBtZXNzYWdlKHR5cGUsIHZhbHVlLCBmaWVsZE5hbWUsIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5lbWl0RGVmYXVsdFZhbHVlcyA/IG51bGwgOiB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiB0eXBlLmludGVybmFsSnNvbldyaXRlKHZhbHVlLCBvcHRpb25zKTtcbiAgICB9XG4gICAgc2NhbGFyKHR5cGUsIHZhbHVlLCBmaWVsZE5hbWUsIG9wdGlvbmFsLCBlbWl0RGVmYXVsdFZhbHVlcykge1xuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KG9wdGlvbmFsKTtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZWQgPSBlbWl0RGVmYXVsdFZhbHVlcyB8fCBvcHRpb25hbDtcbiAgICAgICAgLy8gbm9pbnNwZWN0aW9uIEZhbGxUaHJvdWdoSW5Td2l0Y2hTdGF0ZW1lbnRKU1xuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgIC8vIGludDMyLCBmaXhlZDMyLCB1aW50MzI6IEpTT04gdmFsdWUgd2lsbCBiZSBhIGRlY2ltYWwgbnVtYmVyLiBFaXRoZXIgbnVtYmVycyBvciBzdHJpbmdzIGFyZSBhY2NlcHRlZC5cbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5JTlQzMjpcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TRklYRUQzMjpcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TSU5UMzI6XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSAwKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWQgPyAwIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydEludDMyKHZhbHVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuRklYRUQzMjpcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5VSU5UMzI6XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSAwKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWQgPyAwIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydFVJbnQzMih2YWx1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgLy8gZmxvYXQsIGRvdWJsZTogSlNPTiB2YWx1ZSB3aWxsIGJlIGEgbnVtYmVyIG9yIG9uZSBvZiB0aGUgc3BlY2lhbCBzdHJpbmcgdmFsdWVzIFwiTmFOXCIsIFwiSW5maW5pdHlcIiwgYW5kIFwiLUluZmluaXR5XCIuXG4gICAgICAgICAgICAvLyBFaXRoZXIgbnVtYmVycyBvciBzdHJpbmdzIGFyZSBhY2NlcHRlZC4gRXhwb25lbnQgbm90YXRpb24gaXMgYWxzbyBhY2NlcHRlZC5cbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5GTE9BVDpcbiAgICAgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnRGbG9hdDMyKHZhbHVlKTtcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5ET1VCTEU6XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSAwKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWQgPyAwIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydCh0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicpO1xuICAgICAgICAgICAgICAgIGlmIChOdW1iZXIuaXNOYU4odmFsdWUpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ05hTic7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnSW5maW5pdHknO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJy1JbmZpbml0eSc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgLy8gc3RyaW5nOlxuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNUUklORzpcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IFwiXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlZCA/ICcnIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydCh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycpO1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIC8vIGJvb2w6XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuQk9PTDpcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWQgPyBmYWxzZSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnQodHlwZW9mIHZhbHVlID09ICdib29sZWFuJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgLy8gSlNPTiB2YWx1ZSB3aWxsIGJlIGEgZGVjaW1hbCBzdHJpbmcuIEVpdGhlciBudW1iZXJzIG9yIHN0cmluZ3MgYXJlIGFjY2VwdGVkLlxuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlVJTlQ2NDpcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5GSVhFRDY0OlxuICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydCh0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgfHwgdHlwZW9mIHZhbHVlID09ICdzdHJpbmcnIHx8IHR5cGVvZiB2YWx1ZSA9PSAnYmlnaW50Jyk7XG4gICAgICAgICAgICAgICAgbGV0IHVsb25nID0gcGJfbG9uZ18xLlBiVUxvbmcuZnJvbSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHVsb25nLmlzWmVybygpICYmICFlZClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdWxvbmcudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIC8vIEpTT04gdmFsdWUgd2lsbCBiZSBhIGRlY2ltYWwgc3RyaW5nLiBFaXRoZXIgbnVtYmVycyBvciBzdHJpbmdzIGFyZSBhY2NlcHRlZC5cbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5JTlQ2NDpcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TRklYRUQ2NDpcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TSU5UNjQ6XG4gICAgICAgICAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyB8fCB0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHwgdHlwZW9mIHZhbHVlID09ICdiaWdpbnQnKTtcbiAgICAgICAgICAgICAgICBsZXQgbG9uZyA9IHBiX2xvbmdfMS5QYkxvbmcuZnJvbSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKGxvbmcuaXNaZXJvKCkgJiYgIWVkKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHJldHVybiBsb25nLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAvLyBieXRlczogSlNPTiB2YWx1ZSB3aWxsIGJlIHRoZSBkYXRhIGVuY29kZWQgYXMgYSBzdHJpbmcgdXNpbmcgc3RhbmRhcmQgYmFzZTY0IGVuY29kaW5nIHdpdGggcGFkZGluZ3MuXG4gICAgICAgICAgICAvLyBFaXRoZXIgc3RhbmRhcmQgb3IgVVJMLXNhZmUgYmFzZTY0IGVuY29kaW5nIHdpdGgvd2l0aG91dCBwYWRkaW5ncyBhcmUgYWNjZXB0ZWQuXG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuQllURVM6XG4gICAgICAgICAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KHZhbHVlIGluc3RhbmNlb2YgVWludDhBcnJheSk7XG4gICAgICAgICAgICAgICAgaWYgKCF2YWx1ZS5ieXRlTGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWQgPyBcIlwiIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHJldHVybiBiYXNlNjRfMS5iYXNlNjRlbmNvZGUodmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5SZWZsZWN0aW9uSnNvbldyaXRlciA9IFJlZmxlY3Rpb25Kc29uV3JpdGVyO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVmbGVjdGlvblNjYWxhckRlZmF1bHQgPSB2b2lkIDA7XG5jb25zdCByZWZsZWN0aW9uX2luZm9fMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24taW5mb1wiKTtcbmNvbnN0IHJlZmxlY3Rpb25fbG9uZ19jb252ZXJ0XzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLWxvbmctY29udmVydFwiKTtcbmNvbnN0IHBiX2xvbmdfMSA9IHJlcXVpcmUoXCIuL3BiLWxvbmdcIik7XG4vKipcbiAqIENyZWF0ZXMgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIGEgc2NhbGFyIHR5cGUuXG4gKi9cbmZ1bmN0aW9uIHJlZmxlY3Rpb25TY2FsYXJEZWZhdWx0KHR5cGUsIGxvbmdUeXBlID0gcmVmbGVjdGlvbl9pbmZvXzEuTG9uZ1R5cGUuU1RSSU5HKSB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5CT09MOlxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuVUlOVDY0OlxuICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuRklYRUQ2NDpcbiAgICAgICAgICAgIHJldHVybiByZWZsZWN0aW9uX2xvbmdfY29udmVydF8xLnJlZmxlY3Rpb25Mb25nQ29udmVydChwYl9sb25nXzEuUGJVTG9uZy5aRVJPLCBsb25nVHlwZSk7XG4gICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5JTlQ2NDpcbiAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNGSVhFRDY0OlxuICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuU0lOVDY0OlxuICAgICAgICAgICAgcmV0dXJuIHJlZmxlY3Rpb25fbG9uZ19jb252ZXJ0XzEucmVmbGVjdGlvbkxvbmdDb252ZXJ0KHBiX2xvbmdfMS5QYkxvbmcuWkVSTywgbG9uZ1R5cGUpO1xuICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuRE9VQkxFOlxuICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuRkxPQVQ6XG4gICAgICAgICAgICByZXR1cm4gMC4wO1xuICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuQllURVM6XG4gICAgICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7XG4gICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TVFJJTkc6XG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIC8vIGNhc2UgU2NhbGFyVHlwZS5JTlQzMjpcbiAgICAgICAgICAgIC8vIGNhc2UgU2NhbGFyVHlwZS5VSU5UMzI6XG4gICAgICAgICAgICAvLyBjYXNlIFNjYWxhclR5cGUuU0lOVDMyOlxuICAgICAgICAgICAgLy8gY2FzZSBTY2FsYXJUeXBlLkZJWEVEMzI6XG4gICAgICAgICAgICAvLyBjYXNlIFNjYWxhclR5cGUuU0ZJWEVEMzI6XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICB9XG59XG5leHBvcnRzLnJlZmxlY3Rpb25TY2FsYXJEZWZhdWx0ID0gcmVmbGVjdGlvblNjYWxhckRlZmF1bHQ7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5SZWZsZWN0aW9uQmluYXJ5UmVhZGVyID0gdm9pZCAwO1xuY29uc3QgYmluYXJ5X2Zvcm1hdF9jb250cmFjdF8xID0gcmVxdWlyZShcIi4vYmluYXJ5LWZvcm1hdC1jb250cmFjdFwiKTtcbmNvbnN0IHJlZmxlY3Rpb25faW5mb18xID0gcmVxdWlyZShcIi4vcmVmbGVjdGlvbi1pbmZvXCIpO1xuY29uc3QgcmVmbGVjdGlvbl9sb25nX2NvbnZlcnRfMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24tbG9uZy1jb252ZXJ0XCIpO1xuY29uc3QgcmVmbGVjdGlvbl9zY2FsYXJfZGVmYXVsdF8xID0gcmVxdWlyZShcIi4vcmVmbGVjdGlvbi1zY2FsYXItZGVmYXVsdFwiKTtcbi8qKlxuICogUmVhZHMgcHJvdG8zIG1lc3NhZ2VzIGluIGJpbmFyeSBmb3JtYXQgdXNpbmcgcmVmbGVjdGlvbiBpbmZvcm1hdGlvbi5cbiAqXG4gKiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzL2RvY3MvZW5jb2RpbmdcbiAqL1xuY2xhc3MgUmVmbGVjdGlvbkJpbmFyeVJlYWRlciB7XG4gICAgY29uc3RydWN0b3IoaW5mbykge1xuICAgICAgICB0aGlzLmluZm8gPSBpbmZvO1xuICAgIH1cbiAgICBwcmVwYXJlKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICghdGhpcy5maWVsZE5vVG9GaWVsZCkge1xuICAgICAgICAgICAgY29uc3QgZmllbGRzSW5wdXQgPSAoX2EgPSB0aGlzLmluZm8uZmllbGRzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBbXTtcbiAgICAgICAgICAgIHRoaXMuZmllbGROb1RvRmllbGQgPSBuZXcgTWFwKGZpZWxkc0lucHV0Lm1hcChmaWVsZCA9PiBbZmllbGQubm8sIGZpZWxkXSkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWRzIGEgbWVzc2FnZSBmcm9tIGJpbmFyeSBmb3JtYXQgaW50byB0aGUgdGFyZ2V0IG1lc3NhZ2UuXG4gICAgICpcbiAgICAgKiBSZXBlYXRlZCBmaWVsZHMgYXJlIGFwcGVuZGVkLiBNYXAgZW50cmllcyBhcmUgYWRkZWQsIG92ZXJ3cml0aW5nXG4gICAgICogZXhpc3Rpbmcga2V5cy5cbiAgICAgKlxuICAgICAqIElmIGEgbWVzc2FnZSBmaWVsZCBpcyBhbHJlYWR5IHByZXNlbnQsIGl0IHdpbGwgYmUgbWVyZ2VkIHdpdGggdGhlXG4gICAgICogbmV3IGRhdGEuXG4gICAgICovXG4gICAgcmVhZChyZWFkZXIsIG1lc3NhZ2UsIG9wdGlvbnMsIGxlbmd0aCkge1xuICAgICAgICB0aGlzLnByZXBhcmUoKTtcbiAgICAgICAgY29uc3QgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgIC8vIHJlYWQgdGhlIHRhZyBhbmQgZmluZCB0aGUgZmllbGRcbiAgICAgICAgICAgIGNvbnN0IFtmaWVsZE5vLCB3aXJlVHlwZV0gPSByZWFkZXIudGFnKCksIGZpZWxkID0gdGhpcy5maWVsZE5vVG9GaWVsZC5nZXQoZmllbGRObyk7XG4gICAgICAgICAgICBpZiAoIWZpZWxkKSB7XG4gICAgICAgICAgICAgICAgbGV0IHUgPSBvcHRpb25zLnJlYWRVbmtub3duRmllbGQ7XG4gICAgICAgICAgICAgICAgaWYgKHUgPT0gXCJ0aHJvd1wiKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZmllbGQgJHtmaWVsZE5vfSAod2lyZSB0eXBlICR7d2lyZVR5cGV9KSBmb3IgJHt0aGlzLmluZm8udHlwZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgbGV0IGQgPSByZWFkZXIuc2tpcCh3aXJlVHlwZSk7XG4gICAgICAgICAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAodSA9PT0gdHJ1ZSA/IGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMS5Vbmtub3duRmllbGRIYW5kbGVyLm9uUmVhZCA6IHUpKHRoaXMuaW5mby50eXBlTmFtZSwgbWVzc2FnZSwgZmllbGRObywgd2lyZVR5cGUsIGQpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gdGFyZ2V0IG9iamVjdCBmb3IgdGhlIGZpZWxkIHdlIGFyZSByZWFkaW5nXG4gICAgICAgICAgICBsZXQgdGFyZ2V0ID0gbWVzc2FnZSwgcmVwZWF0ZWQgPSBmaWVsZC5yZXBlYXQsIGxvY2FsTmFtZSA9IGZpZWxkLmxvY2FsTmFtZTtcbiAgICAgICAgICAgIC8vIGlmIGZpZWxkIGlzIG1lbWJlciBvZiBvbmVvZiBBRFQsIHVzZSBBRFQgYXMgdGFyZ2V0XG4gICAgICAgICAgICBpZiAoZmllbGQub25lb2YpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXQgPSB0YXJnZXRbZmllbGQub25lb2ZdO1xuICAgICAgICAgICAgICAgIC8vIGlmIG90aGVyIG9uZW9mIG1lbWJlciBzZWxlY3RlZCwgc2V0IG5ldyBBRFRcbiAgICAgICAgICAgICAgICBpZiAodGFyZ2V0Lm9uZW9mS2luZCAhPT0gbG9jYWxOYW1lKVxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPSBtZXNzYWdlW2ZpZWxkLm9uZW9mXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uZW9mS2luZDogbG9jYWxOYW1lXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB3ZSBoYXZlIGhhbmRsZWQgb25lb2YgYWJvdmUsIHdlIGp1c3QgaGF2ZSByZWFkIHRoZSB2YWx1ZSBpbnRvIGB0YXJnZXRbbG9jYWxOYW1lXWBcbiAgICAgICAgICAgIHN3aXRjaCAoZmllbGQua2luZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzY2FsYXJcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwiZW51bVwiOlxuICAgICAgICAgICAgICAgICAgICBsZXQgVCA9IGZpZWxkLmtpbmQgPT0gXCJlbnVtXCIgPyByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLklOVDMyIDogZmllbGQuVDtcbiAgICAgICAgICAgICAgICAgICAgbGV0IEwgPSBmaWVsZC5raW5kID09IFwic2NhbGFyXCIgPyBmaWVsZC5MIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVwZWF0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhcnIgPSB0YXJnZXRbbG9jYWxOYW1lXTsgLy8gc2FmZSB0byBhc3N1bWUgcHJlc2VuY2Ugb2YgYXJyYXksIG9uZW9mIGNhbm5vdCBjb250YWluIHJlcGVhdGVkIHZhbHVlc1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdpcmVUeXBlID09IGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQgJiYgVCAhPSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNUUklORyAmJiBUICE9IHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuQllURVMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZSA9IHJlYWRlci51aW50MzIoKSArIHJlYWRlci5wb3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnIucHVzaCh0aGlzLnNjYWxhcihyZWFkZXIsIFQsIEwpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnIucHVzaCh0aGlzLnNjYWxhcihyZWFkZXIsIFQsIEwpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRbbG9jYWxOYW1lXSA9IHRoaXMuc2NhbGFyKHJlYWRlciwgVCwgTCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJtZXNzYWdlXCI6XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXBlYXRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFyciA9IHRhcmdldFtsb2NhbE5hbWVdOyAvLyBzYWZlIHRvIGFzc3VtZSBwcmVzZW5jZSBvZiBhcnJheSwgb25lb2YgY2Fubm90IGNvbnRhaW4gcmVwZWF0ZWQgdmFsdWVzXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbXNnID0gZmllbGQuVCgpLmludGVybmFsQmluYXJ5UmVhZChyZWFkZXIsIHJlYWRlci51aW50MzIoKSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcnIucHVzaChtc2cpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFtsb2NhbE5hbWVdID0gZmllbGQuVCgpLmludGVybmFsQmluYXJ5UmVhZChyZWFkZXIsIHJlYWRlci51aW50MzIoKSwgb3B0aW9ucywgdGFyZ2V0W2xvY2FsTmFtZV0pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwibWFwXCI6XG4gICAgICAgICAgICAgICAgICAgIGxldCBbbWFwS2V5LCBtYXBWYWxdID0gdGhpcy5tYXBFbnRyeShmaWVsZCwgcmVhZGVyLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gc2FmZSB0byBhc3N1bWUgcHJlc2VuY2Ugb2YgbWFwIG9iamVjdCwgb25lb2YgY2Fubm90IGNvbnRhaW4gcmVwZWF0ZWQgdmFsdWVzXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldFtsb2NhbE5hbWVdW21hcEtleV0gPSBtYXBWYWw7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWQgYSBtYXAgZmllbGQsIGV4cGVjdGluZyBrZXkgZmllbGQgPSAxLCB2YWx1ZSBmaWVsZCA9IDJcbiAgICAgKi9cbiAgICBtYXBFbnRyeShmaWVsZCwgcmVhZGVyLCBvcHRpb25zKSB7XG4gICAgICAgIGxldCBsZW5ndGggPSByZWFkZXIudWludDMyKCk7XG4gICAgICAgIGxldCBlbmQgPSByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgICAgICBsZXQga2V5ID0gdW5kZWZpbmVkOyAvLyBqYXZhc2NyaXB0IG9ubHkgYWxsb3dzIG51bWJlciBvciBzdHJpbmcgZm9yIG9iamVjdCBwcm9wZXJ0aWVzXG4gICAgICAgIGxldCB2YWwgPSB1bmRlZmluZWQ7XG4gICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICBsZXQgW2ZpZWxkTm8sIHdpcmVUeXBlXSA9IHJlYWRlci50YWcoKTtcbiAgICAgICAgICAgIHN3aXRjaCAoZmllbGRObykge1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLksgPT0gcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5CT09MKVxuICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gcmVhZGVyLmJvb2woKS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBsb25nIHR5cGVzIGFyZSByZWFkIGFzIHN0cmluZywgbnVtYmVyIHR5cGVzIGFyZSBva2F5IGFzIG51bWJlclxuICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gdGhpcy5zY2FsYXIocmVhZGVyLCBmaWVsZC5LLCByZWZsZWN0aW9uX2luZm9fMS5Mb25nVHlwZS5TVFJJTkcpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZmllbGQuVi5raW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwic2NhbGFyXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gdGhpcy5zY2FsYXIocmVhZGVyLCBmaWVsZC5WLlQsIGZpZWxkLlYuTCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZW51bVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IHJlYWRlci5pbnQzMigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIm1lc3NhZ2VcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSBmaWVsZC5WLlQoKS5pbnRlcm5hbEJpbmFyeVJlYWQocmVhZGVyLCByZWFkZXIudWludDMyKCksIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBmaWVsZCAke2ZpZWxkTm99ICh3aXJlIHR5cGUgJHt3aXJlVHlwZX0pIGluIG1hcCBlbnRyeSBmb3IgJHt0aGlzLmluZm8udHlwZU5hbWV9IyR7ZmllbGQubmFtZX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxldCBrZXlSYXcgPSByZWZsZWN0aW9uX3NjYWxhcl9kZWZhdWx0XzEucmVmbGVjdGlvblNjYWxhckRlZmF1bHQoZmllbGQuSyk7XG4gICAgICAgICAgICBrZXkgPSBmaWVsZC5LID09IHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuQk9PTCA/IGtleVJhdy50b1N0cmluZygpIDoga2V5UmF3O1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWwgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHN3aXRjaCAoZmllbGQuVi5raW5kKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNjYWxhclwiOlxuICAgICAgICAgICAgICAgICAgICB2YWwgPSByZWZsZWN0aW9uX3NjYWxhcl9kZWZhdWx0XzEucmVmbGVjdGlvblNjYWxhckRlZmF1bHQoZmllbGQuVi5ULCBmaWVsZC5WLkwpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiZW51bVwiOlxuICAgICAgICAgICAgICAgICAgICB2YWwgPSAwO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwibWVzc2FnZVwiOlxuICAgICAgICAgICAgICAgICAgICB2YWwgPSBmaWVsZC5WLlQoKS5jcmVhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIHJldHVybiBba2V5LCB2YWxdO1xuICAgIH1cbiAgICBzY2FsYXIocmVhZGVyLCB0eXBlLCBsb25nVHlwZSkge1xuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5JTlQzMjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVhZGVyLmludDMyKCk7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuU1RSSU5HOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuQk9PTDpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVhZGVyLmJvb2woKTtcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5ET1VCTEU6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlYWRlci5kb3VibGUoKTtcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5GTE9BVDpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVhZGVyLmZsb2F0KCk7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuSU5UNjQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmxlY3Rpb25fbG9uZ19jb252ZXJ0XzEucmVmbGVjdGlvbkxvbmdDb252ZXJ0KHJlYWRlci5pbnQ2NCgpLCBsb25nVHlwZSk7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuVUlOVDY0OlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZsZWN0aW9uX2xvbmdfY29udmVydF8xLnJlZmxlY3Rpb25Mb25nQ29udmVydChyZWFkZXIudWludDY0KCksIGxvbmdUeXBlKTtcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5GSVhFRDY0OlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZsZWN0aW9uX2xvbmdfY29udmVydF8xLnJlZmxlY3Rpb25Mb25nQ29udmVydChyZWFkZXIuZml4ZWQ2NCgpLCBsb25nVHlwZSk7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuRklYRUQzMjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVhZGVyLmZpeGVkMzIoKTtcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5CWVRFUzpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVhZGVyLmJ5dGVzKCk7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuVUlOVDMyOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWFkZXIudWludDMyKCk7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuU0ZJWEVEMzI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlYWRlci5zZml4ZWQzMigpO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNGSVhFRDY0OlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZsZWN0aW9uX2xvbmdfY29udmVydF8xLnJlZmxlY3Rpb25Mb25nQ29udmVydChyZWFkZXIuc2ZpeGVkNjQoKSwgbG9uZ1R5cGUpO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNJTlQzMjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVhZGVyLnNpbnQzMigpO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNJTlQ2NDpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmbGVjdGlvbl9sb25nX2NvbnZlcnRfMS5yZWZsZWN0aW9uTG9uZ0NvbnZlcnQocmVhZGVyLnNpbnQ2NCgpLCBsb25nVHlwZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLlJlZmxlY3Rpb25CaW5hcnlSZWFkZXIgPSBSZWZsZWN0aW9uQmluYXJ5UmVhZGVyO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUmVmbGVjdGlvbkJpbmFyeVdyaXRlciA9IHZvaWQgMDtcbmNvbnN0IGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMSA9IHJlcXVpcmUoXCIuL2JpbmFyeS1mb3JtYXQtY29udHJhY3RcIik7XG5jb25zdCByZWZsZWN0aW9uX2luZm9fMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24taW5mb1wiKTtcbmNvbnN0IGFzc2VydF8xID0gcmVxdWlyZShcIi4vYXNzZXJ0XCIpO1xuY29uc3QgcGJfbG9uZ18xID0gcmVxdWlyZShcIi4vcGItbG9uZ1wiKTtcbi8qKlxuICogV3JpdGVzIHByb3RvMyBtZXNzYWdlcyBpbiBiaW5hcnkgZm9ybWF0IHVzaW5nIHJlZmxlY3Rpb24gaW5mb3JtYXRpb24uXG4gKlxuICogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL2VuY29kaW5nXG4gKi9cbmNsYXNzIFJlZmxlY3Rpb25CaW5hcnlXcml0ZXIge1xuICAgIGNvbnN0cnVjdG9yKGluZm8pIHtcbiAgICAgICAgdGhpcy5pbmZvID0gaW5mbztcbiAgICB9XG4gICAgcHJlcGFyZSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmZpZWxkcykge1xuICAgICAgICAgICAgY29uc3QgZmllbGRzSW5wdXQgPSB0aGlzLmluZm8uZmllbGRzID8gdGhpcy5pbmZvLmZpZWxkcy5jb25jYXQoKSA6IFtdO1xuICAgICAgICAgICAgdGhpcy5maWVsZHMgPSBmaWVsZHNJbnB1dC5zb3J0KChhLCBiKSA9PiBhLm5vIC0gYi5ubyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGVzIHRoZSBtZXNzYWdlIHRvIGJpbmFyeSBmb3JtYXQuXG4gICAgICovXG4gICAgd3JpdGUobWVzc2FnZSwgd3JpdGVyLCBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMucHJlcGFyZSgpO1xuICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIHRoaXMuZmllbGRzKSB7XG4gICAgICAgICAgICBsZXQgdmFsdWUsIC8vIHRoaXMgd2lsbCBiZSBvdXIgZmllbGQgdmFsdWUsIHdoZXRoZXIgaXQgaXMgbWVtYmVyIG9mIGEgb25lb2Ygb3Igbm90XG4gICAgICAgICAgICBlbWl0RGVmYXVsdCwgLy8gd2hldGhlciB3ZSBlbWl0IHRoZSBkZWZhdWx0IHZhbHVlIChvbmx5IHRydWUgZm9yIG9uZW9mIG1lbWJlcnMpXG4gICAgICAgICAgICByZXBlYXRlZCA9IGZpZWxkLnJlcGVhdCwgbG9jYWxOYW1lID0gZmllbGQubG9jYWxOYW1lO1xuICAgICAgICAgICAgLy8gaGFuZGxlIG9uZW9mIEFEVFxuICAgICAgICAgICAgaWYgKGZpZWxkLm9uZW9mKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSBtZXNzYWdlW2ZpZWxkLm9uZW9mXTtcbiAgICAgICAgICAgICAgICBpZiAoZ3JvdXAub25lb2ZLaW5kICE9PSBsb2NhbE5hbWUpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBpZiBmaWVsZCBpcyBub3Qgc2VsZWN0ZWQsIHNraXBcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGdyb3VwW2xvY2FsTmFtZV07XG4gICAgICAgICAgICAgICAgZW1pdERlZmF1bHQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBtZXNzYWdlW2xvY2FsTmFtZV07XG4gICAgICAgICAgICAgICAgZW1pdERlZmF1bHQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHdlIGhhdmUgaGFuZGxlZCBvbmVvZiBhYm92ZS4gd2UganVzdCBoYXZlIHRvIGhvbm9yIGBlbWl0RGVmYXVsdGAuXG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkLmtpbmQpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwic2NhbGFyXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcImVudW1cIjpcbiAgICAgICAgICAgICAgICAgICAgbGV0IFQgPSBmaWVsZC5raW5kID09IFwiZW51bVwiID8gcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5JTlQzMiA6IGZpZWxkLlQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXBlYXRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KEFycmF5LmlzQXJyYXkodmFsdWUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXBlYXRlZCA9PSByZWZsZWN0aW9uX2luZm9fMS5SZXBlYXRUeXBlLlBBQ0tFRClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhY2tlZCh3cml0ZXIsIFQsIGZpZWxkLm5vLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjYWxhcih3cml0ZXIsIFQsIGZpZWxkLm5vLCBpdGVtLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KGZpZWxkLm9wdCk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2NhbGFyKHdyaXRlciwgVCwgZmllbGQubm8sIHZhbHVlLCBlbWl0RGVmYXVsdCB8fCBmaWVsZC5vcHQpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwibWVzc2FnZVwiOlxuICAgICAgICAgICAgICAgICAgICBpZiAocmVwZWF0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydChBcnJheS5pc0FycmF5KHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlKHdyaXRlciwgb3B0aW9ucywgZmllbGQuVCgpLCBmaWVsZC5ubywgaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2Uod3JpdGVyLCBvcHRpb25zLCBmaWVsZC5UKCksIGZpZWxkLm5vLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm1hcFwiOlxuICAgICAgICAgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnQodHlwZW9mIHZhbHVlID09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIE9iamVjdC5lbnRyaWVzKHZhbHVlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWFwRW50cnkod3JpdGVyLCBvcHRpb25zLCBmaWVsZCwga2V5LCB2YWwpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgdSA9IG9wdGlvbnMud3JpdGVVbmtub3duRmllbGRzO1xuICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAodSA9PT0gdHJ1ZSA/IGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMS5Vbmtub3duRmllbGRIYW5kbGVyLm9uV3JpdGUgOiB1KSh0aGlzLmluZm8udHlwZU5hbWUsIG1lc3NhZ2UsIHdyaXRlcik7XG4gICAgfVxuICAgIG1hcEVudHJ5KHdyaXRlciwgb3B0aW9ucywgZmllbGQsIGtleSwgdmFsdWUpIHtcbiAgICAgICAgd3JpdGVyLnRhZyhmaWVsZC5ubywgYmluYXJ5X2Zvcm1hdF9jb250cmFjdF8xLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCk7XG4gICAgICAgIHdyaXRlci5mb3JrKCk7XG4gICAgICAgIC8vIGphdmFzY3JpcHQgb25seSBhbGxvd3MgbnVtYmVyIG9yIHN0cmluZyBmb3Igb2JqZWN0IHByb3BlcnRpZXNcbiAgICAgICAgLy8gd2UgY29udmVydCBmcm9tIG91ciByZXByZXNlbnRhdGlvbiB0byB0aGUgcHJvdG9idWYgdHlwZVxuICAgICAgICBsZXQga2V5VmFsdWUgPSBrZXk7XG4gICAgICAgIHN3aXRjaCAoZmllbGQuSykge1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLklOVDMyOlxuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkZJWEVEMzI6XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuVUlOVDMyOlxuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNGSVhFRDMyOlxuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNJTlQzMjpcbiAgICAgICAgICAgICAgICBrZXlWYWx1ZSA9IE51bWJlci5wYXJzZUludChrZXkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkJPT0w6XG4gICAgICAgICAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KGtleSA9PSAndHJ1ZScgfHwga2V5ID09ICdmYWxzZScpO1xuICAgICAgICAgICAgICAgIGtleVZhbHVlID0ga2V5ID09ICd0cnVlJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICAvLyB3cml0ZSBrZXksIGV4cGVjdGluZyBrZXkgZmllbGQgbnVtYmVyID0gMVxuICAgICAgICB0aGlzLnNjYWxhcih3cml0ZXIsIGZpZWxkLkssIDEsIGtleVZhbHVlLCB0cnVlKTtcbiAgICAgICAgLy8gd3JpdGUgdmFsdWUsIGV4cGVjdGluZyB2YWx1ZSBmaWVsZCBudW1iZXIgPSAyXG4gICAgICAgIHN3aXRjaCAoZmllbGQuVi5raW5kKSB7XG4gICAgICAgICAgICBjYXNlICdzY2FsYXInOlxuICAgICAgICAgICAgICAgIHRoaXMuc2NhbGFyKHdyaXRlciwgZmllbGQuVi5ULCAyLCB2YWx1ZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdlbnVtJzpcbiAgICAgICAgICAgICAgICB0aGlzLnNjYWxhcih3cml0ZXIsIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuSU5UMzIsIDIsIHZhbHVlLCB0cnVlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21lc3NhZ2UnOlxuICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSh3cml0ZXIsIG9wdGlvbnMsIGZpZWxkLlYuVCgpLCAyLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgd3JpdGVyLmpvaW4oKTtcbiAgICB9XG4gICAgbWVzc2FnZSh3cml0ZXIsIG9wdGlvbnMsIGhhbmRsZXIsIGZpZWxkTm8sIHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBoYW5kbGVyLmludGVybmFsQmluYXJ5V3JpdGUodmFsdWUsIHdyaXRlci50YWcoZmllbGRObywgYmluYXJ5X2Zvcm1hdF9jb250cmFjdF8xLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCkuZm9yaygpLCBvcHRpb25zKTtcbiAgICAgICAgd3JpdGVyLmpvaW4oKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGUgYSBzaW5nbGUgc2NhbGFyIHZhbHVlLlxuICAgICAqL1xuICAgIHNjYWxhcih3cml0ZXIsIHR5cGUsIGZpZWxkTm8sIHZhbHVlLCBlbWl0RGVmYXVsdCkge1xuICAgICAgICBsZXQgW3dpcmVUeXBlLCBtZXRob2QsIGlzRGVmYXVsdF0gPSB0aGlzLnNjYWxhckluZm8odHlwZSwgdmFsdWUpO1xuICAgICAgICBpZiAoIWlzRGVmYXVsdCB8fCBlbWl0RGVmYXVsdCkge1xuICAgICAgICAgICAgd3JpdGVyLnRhZyhmaWVsZE5vLCB3aXJlVHlwZSk7XG4gICAgICAgICAgICB3cml0ZXJbbWV0aG9kXSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGUgYW4gYXJyYXkgb2Ygc2NhbGFyIHZhbHVlcyBpbiBwYWNrZWQgZm9ybWF0LlxuICAgICAqL1xuICAgIHBhY2tlZCh3cml0ZXIsIHR5cGUsIGZpZWxkTm8sIHZhbHVlKSB7XG4gICAgICAgIGlmICghdmFsdWUubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBhc3NlcnRfMS5hc3NlcnQodHlwZSAhPT0gcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5CWVRFUyAmJiB0eXBlICE9PSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNUUklORyk7XG4gICAgICAgIC8vIHdyaXRlIHRhZ1xuICAgICAgICB3cml0ZXIudGFnKGZpZWxkTm8sIGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpO1xuICAgICAgICAvLyBiZWdpbiBsZW5ndGgtZGVsaW1pdGVkXG4gICAgICAgIHdyaXRlci5mb3JrKCk7XG4gICAgICAgIC8vIHdyaXRlIHZhbHVlcyB3aXRob3V0IHRhZ3NcbiAgICAgICAgbGV0IFssIG1ldGhvZCxdID0gdGhpcy5zY2FsYXJJbmZvKHR5cGUpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgd3JpdGVyW21ldGhvZF0odmFsdWVbaV0pO1xuICAgICAgICAvLyBlbmQgbGVuZ3RoIGRlbGltaXRlZFxuICAgICAgICB3cml0ZXIuam9pbigpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgaW5mb3JtYXRpb24gZm9yIHdyaXRpbmcgYSBzY2FsYXIgdmFsdWUuXG4gICAgICpcbiAgICAgKiBSZXR1cm5zIHR1cGxlOlxuICAgICAqIFswXTogYXBwcm9wcmlhdGUgV2lyZVR5cGVcbiAgICAgKiBbMV06IG5hbWUgb2YgdGhlIGFwcHJvcHJpYXRlIG1ldGhvZCBvZiBJQmluYXJ5V3JpdGVyXG4gICAgICogWzJdOiB3aGV0aGVyIHRoZSBnaXZlbiB2YWx1ZSBpcyBhIGRlZmF1bHQgdmFsdWVcbiAgICAgKlxuICAgICAqIElmIGFyZ3VtZW50IGB2YWx1ZWAgaXMgb21pdHRlZCwgWzJdIGlzIGFsd2F5cyBmYWxzZS5cbiAgICAgKi9cbiAgICBzY2FsYXJJbmZvKHR5cGUsIHZhbHVlKSB7XG4gICAgICAgIGxldCB0ID0gYmluYXJ5X2Zvcm1hdF9jb250cmFjdF8xLldpcmVUeXBlLlZhcmludDtcbiAgICAgICAgbGV0IG07XG4gICAgICAgIGxldCBpID0gdmFsdWUgPT09IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IGQgPSB2YWx1ZSA9PT0gMDtcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuSU5UMzI6XG4gICAgICAgICAgICAgICAgbSA9IFwiaW50MzJcIjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TVFJJTkc6XG4gICAgICAgICAgICAgICAgZCA9IGkgfHwgIXZhbHVlLmxlbmd0aDtcbiAgICAgICAgICAgICAgICB0ID0gYmluYXJ5X2Zvcm1hdF9jb250cmFjdF8xLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZDtcbiAgICAgICAgICAgICAgICBtID0gXCJzdHJpbmdcIjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5CT09MOlxuICAgICAgICAgICAgICAgIGQgPSB2YWx1ZSA9PT0gZmFsc2U7XG4gICAgICAgICAgICAgICAgbSA9IFwiYm9vbFwiO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlVJTlQzMjpcbiAgICAgICAgICAgICAgICBtID0gXCJ1aW50MzJcIjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5ET1VCTEU6XG4gICAgICAgICAgICAgICAgdCA9IGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMS5XaXJlVHlwZS5CaXQ2NDtcbiAgICAgICAgICAgICAgICBtID0gXCJkb3VibGVcIjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5GTE9BVDpcbiAgICAgICAgICAgICAgICB0ID0gYmluYXJ5X2Zvcm1hdF9jb250cmFjdF8xLldpcmVUeXBlLkJpdDMyO1xuICAgICAgICAgICAgICAgIG0gPSBcImZsb2F0XCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuSU5UNjQ6XG4gICAgICAgICAgICAgICAgZCA9IGkgfHwgcGJfbG9uZ18xLlBiTG9uZy5mcm9tKHZhbHVlKS5pc1plcm8oKTtcbiAgICAgICAgICAgICAgICBtID0gXCJpbnQ2NFwiO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlVJTlQ2NDpcbiAgICAgICAgICAgICAgICBkID0gaSB8fCBwYl9sb25nXzEuUGJVTG9uZy5mcm9tKHZhbHVlKS5pc1plcm8oKTtcbiAgICAgICAgICAgICAgICBtID0gXCJ1aW50NjRcIjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5GSVhFRDY0OlxuICAgICAgICAgICAgICAgIGQgPSBpIHx8IHBiX2xvbmdfMS5QYlVMb25nLmZyb20odmFsdWUpLmlzWmVybygpO1xuICAgICAgICAgICAgICAgIHQgPSBiaW5hcnlfZm9ybWF0X2NvbnRyYWN0XzEuV2lyZVR5cGUuQml0NjQ7XG4gICAgICAgICAgICAgICAgbSA9IFwiZml4ZWQ2NFwiO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLkJZVEVTOlxuICAgICAgICAgICAgICAgIGQgPSBpIHx8ICF2YWx1ZS5ieXRlTGVuZ3RoO1xuICAgICAgICAgICAgICAgIHQgPSBiaW5hcnlfZm9ybWF0X2NvbnRyYWN0XzEuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkO1xuICAgICAgICAgICAgICAgIG0gPSBcImJ5dGVzXCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuRklYRUQzMjpcbiAgICAgICAgICAgICAgICB0ID0gYmluYXJ5X2Zvcm1hdF9jb250cmFjdF8xLldpcmVUeXBlLkJpdDMyO1xuICAgICAgICAgICAgICAgIG0gPSBcImZpeGVkMzJcIjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5TRklYRUQzMjpcbiAgICAgICAgICAgICAgICB0ID0gYmluYXJ5X2Zvcm1hdF9jb250cmFjdF8xLldpcmVUeXBlLkJpdDMyO1xuICAgICAgICAgICAgICAgIG0gPSBcInNmaXhlZDMyXCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuU0ZJWEVENjQ6XG4gICAgICAgICAgICAgICAgZCA9IGkgfHwgcGJfbG9uZ18xLlBiTG9uZy5mcm9tKHZhbHVlKS5pc1plcm8oKTtcbiAgICAgICAgICAgICAgICB0ID0gYmluYXJ5X2Zvcm1hdF9jb250cmFjdF8xLldpcmVUeXBlLkJpdDY0O1xuICAgICAgICAgICAgICAgIG0gPSBcInNmaXhlZDY0XCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuU0lOVDMyOlxuICAgICAgICAgICAgICAgIG0gPSBcInNpbnQzMlwiO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSByZWZsZWN0aW9uX2luZm9fMS5TY2FsYXJUeXBlLlNJTlQ2NDpcbiAgICAgICAgICAgICAgICBkID0gaSB8fCBwYl9sb25nXzEuUGJMb25nLmZyb20odmFsdWUpLmlzWmVybygpO1xuICAgICAgICAgICAgICAgIG0gPSBcInNpbnQ2NFwiO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbdCwgbSwgaSB8fCBkXTtcbiAgICB9XG59XG5leHBvcnRzLlJlZmxlY3Rpb25CaW5hcnlXcml0ZXIgPSBSZWZsZWN0aW9uQmluYXJ5V3JpdGVyO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVmbGVjdGlvbkNyZWF0ZSA9IHZvaWQgMDtcbmNvbnN0IHJlZmxlY3Rpb25fc2NhbGFyX2RlZmF1bHRfMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24tc2NhbGFyLWRlZmF1bHRcIik7XG5jb25zdCBtZXNzYWdlX3R5cGVfY29udHJhY3RfMSA9IHJlcXVpcmUoXCIuL21lc3NhZ2UtdHlwZS1jb250cmFjdFwiKTtcbi8qKlxuICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgZ2VuZXJpYyBtZXNzYWdlLCB1c2luZyB0aGUgZmllbGRcbiAqIGluZm9ybWF0aW9uLlxuICovXG5mdW5jdGlvbiByZWZsZWN0aW9uQ3JlYXRlKHR5cGUpIHtcbiAgICAvKipcbiAgICAgKiBUaGlzIHRlcm5hcnkgY2FuIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbi5cbiAgICAgKiBUaGUgYE9iamVjdC5jcmVhdGUoKWAgY29kZSBwYXRoIHV0aWxpemVzIGEgbmV3IGBtZXNzYWdlUHJvdG90eXBlYFxuICAgICAqIHByb3BlcnR5IG9uIHRoZSBgSU1lc3NhZ2VUeXBlYCB3aGljaCBoYXMgdGhpcyBzYW1lIGBNRVNTQUdFX1RZUEVgXG4gICAgICogbm9uLWVudW1lcmFibGUgcHJvcGVydHkgb24gaXQuIERvaW5nIGl0IHRoaXMgd2F5IG1lYW5zIHRoYXQgd2Ugb25seVxuICAgICAqIHBheSB0aGUgY29zdCBvZiBgT2JqZWN0LmRlZmluZVByb3BlcnR5KClgIG9uY2UgcGVyIGBJTWVzc2FnZVR5cGVgXG4gICAgICogY2xhc3Mgb2Ygb25jZSBwZXIgXCJpbnN0YW5jZVwiLiBUaGUgZmFsc3kgY29kZSBwYXRoIGlzIG9ubHkgcHJvdmlkZWRcbiAgICAgKiBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgaW4gY2FzZXMgd2hlcmUgdGhlIHJ1bnRpbWUgbGlicmFyeSBpc1xuICAgICAqIHVwZGF0ZWQgd2l0aG91dCBhbHNvIHVwZGF0aW5nIHRoZSBnZW5lcmF0ZWQgY29kZS5cbiAgICAgKi9cbiAgICBjb25zdCBtc2cgPSB0eXBlLm1lc3NhZ2VQcm90b3R5cGVcbiAgICAgICAgPyBPYmplY3QuY3JlYXRlKHR5cGUubWVzc2FnZVByb3RvdHlwZSlcbiAgICAgICAgOiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIG1lc3NhZ2VfdHlwZV9jb250cmFjdF8xLk1FU1NBR0VfVFlQRSwgeyB2YWx1ZTogdHlwZSB9KTtcbiAgICBmb3IgKGxldCBmaWVsZCBvZiB0eXBlLmZpZWxkcykge1xuICAgICAgICBsZXQgbmFtZSA9IGZpZWxkLmxvY2FsTmFtZTtcbiAgICAgICAgaWYgKGZpZWxkLm9wdClcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBpZiAoZmllbGQub25lb2YpXG4gICAgICAgICAgICBtc2dbZmllbGQub25lb2ZdID0geyBvbmVvZktpbmQ6IHVuZGVmaW5lZCB9O1xuICAgICAgICBlbHNlIGlmIChmaWVsZC5yZXBlYXQpXG4gICAgICAgICAgICBtc2dbbmFtZV0gPSBbXTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgc3dpdGNoIChmaWVsZC5raW5kKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNjYWxhclwiOlxuICAgICAgICAgICAgICAgICAgICBtc2dbbmFtZV0gPSByZWZsZWN0aW9uX3NjYWxhcl9kZWZhdWx0XzEucmVmbGVjdGlvblNjYWxhckRlZmF1bHQoZmllbGQuVCwgZmllbGQuTCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJlbnVtXCI6XG4gICAgICAgICAgICAgICAgICAgIC8vIHdlIHJlcXVpcmUgMCB0byBiZSBkZWZhdWx0IHZhbHVlIGZvciBhbGwgZW51bXNcbiAgICAgICAgICAgICAgICAgICAgbXNnW25hbWVdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm1hcFwiOlxuICAgICAgICAgICAgICAgICAgICBtc2dbbmFtZV0gPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtc2c7XG59XG5leHBvcnRzLnJlZmxlY3Rpb25DcmVhdGUgPSByZWZsZWN0aW9uQ3JlYXRlO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVmbGVjdGlvbk1lcmdlUGFydGlhbCA9IHZvaWQgMDtcbi8qKlxuICogQ29weSBwYXJ0aWFsIGRhdGEgaW50byB0aGUgdGFyZ2V0IG1lc3NhZ2UuXG4gKlxuICogSWYgYSBzaW5ndWxhciBzY2FsYXIgb3IgZW51bSBmaWVsZCBpcyBwcmVzZW50IGluIHRoZSBzb3VyY2UsIGl0XG4gKiByZXBsYWNlcyB0aGUgZmllbGQgaW4gdGhlIHRhcmdldC5cbiAqXG4gKiBJZiBhIHNpbmd1bGFyIG1lc3NhZ2UgZmllbGQgaXMgcHJlc2VudCBpbiB0aGUgc291cmNlLCBpdCBpcyBtZXJnZWRcbiAqIHdpdGggdGhlIHRhcmdldCBmaWVsZCBieSBjYWxsaW5nIG1lcmdlUGFydGlhbCgpIG9mIHRoZSByZXNwb25zaWJsZVxuICogbWVzc2FnZSB0eXBlLlxuICpcbiAqIElmIGEgcmVwZWF0ZWQgZmllbGQgaXMgcHJlc2VudCBpbiB0aGUgc291cmNlLCBpdHMgdmFsdWVzIHJlcGxhY2VcbiAqIGFsbCB2YWx1ZXMgaW4gdGhlIHRhcmdldCBhcnJheSwgcmVtb3ZpbmcgZXh0cmFuZW91cyB2YWx1ZXMuXG4gKiBSZXBlYXRlZCBtZXNzYWdlIGZpZWxkcyBhcmUgY29waWVkLCBub3QgbWVyZ2VkLlxuICpcbiAqIElmIGEgbWFwIGZpZWxkIGlzIHByZXNlbnQgaW4gdGhlIHNvdXJjZSwgZW50cmllcyBhcmUgYWRkZWQgdG8gdGhlXG4gKiB0YXJnZXQgbWFwLCByZXBsYWNpbmcgZW50cmllcyB3aXRoIHRoZSBzYW1lIGtleS4gRW50cmllcyB0aGF0IG9ubHlcbiAqIGV4aXN0IGluIHRoZSB0YXJnZXQgcmVtYWluLiBFbnRyaWVzIHdpdGggbWVzc2FnZSB2YWx1ZXMgYXJlIGNvcGllZCxcbiAqIG5vdCBtZXJnZWQuXG4gKlxuICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gZGlmZmVycyBmcm9tIHByb3RvYnVmIG1lcmdlIHNlbWFudGljcyxcbiAqIHdoaWNoIGFwcGVuZHMgcmVwZWF0ZWQgZmllbGRzLlxuICovXG5mdW5jdGlvbiByZWZsZWN0aW9uTWVyZ2VQYXJ0aWFsKGluZm8sIHRhcmdldCwgc291cmNlKSB7XG4gICAgbGV0IGZpZWxkVmFsdWUsIC8vIHRoZSBmaWVsZCB2YWx1ZSB3ZSBhcmUgd29ya2luZyB3aXRoXG4gICAgaW5wdXQgPSBzb3VyY2UsIG91dHB1dDsgLy8gd2hlcmUgd2Ugd2FudCBvdXIgZmllbGQgdmFsdWUgdG8gZ29cbiAgICBmb3IgKGxldCBmaWVsZCBvZiBpbmZvLmZpZWxkcykge1xuICAgICAgICBsZXQgbmFtZSA9IGZpZWxkLmxvY2FsTmFtZTtcbiAgICAgICAgaWYgKGZpZWxkLm9uZW9mKSB7XG4gICAgICAgICAgICBjb25zdCBncm91cCA9IGlucHV0W2ZpZWxkLm9uZW9mXTsgLy8gdGhpcyBpcyB0aGUgb25lb2ZgcyBncm91cCBpbiB0aGUgc291cmNlXG4gICAgICAgICAgICBpZiAoKGdyb3VwID09PSBudWxsIHx8IGdyb3VwID09PSB2b2lkIDAgPyB2b2lkIDAgOiBncm91cC5vbmVvZktpbmQpID09IHVuZGVmaW5lZCkgeyAvLyB0aGUgdXNlciBpcyBmcmVlIHRvIG9taXRcbiAgICAgICAgICAgICAgICBjb250aW51ZTsgLy8gd2Ugc2tpcCB0aGlzIGZpZWxkLCBhbmQgYWxsIG90aGVyIG1lbWJlcnMgdG9vXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaWVsZFZhbHVlID0gZ3JvdXBbbmFtZV07IC8vIG91ciB2YWx1ZSBjb21lcyBmcm9tIHRoZSB0aGUgb25lb2YgZ3JvdXAgb2YgdGhlIHNvdXJjZVxuICAgICAgICAgICAgb3V0cHV0ID0gdGFyZ2V0W2ZpZWxkLm9uZW9mXTsgLy8gYW5kIG91ciBvdXRwdXQgaXMgdGhlIG9uZW9mIGdyb3VwIG9mIHRoZSB0YXJnZXRcbiAgICAgICAgICAgIG91dHB1dC5vbmVvZktpbmQgPSBncm91cC5vbmVvZktpbmQ7IC8vIGFsd2F5cyB1cGRhdGUgZGlzY3JpbWluYXRvclxuICAgICAgICAgICAgaWYgKGZpZWxkVmFsdWUgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIG91dHB1dFtuYW1lXTsgLy8gcmVtb3ZlIGFueSBleGlzdGluZyB2YWx1ZVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBza2lwIGZ1cnRoZXIgd29yayBvbiBmaWVsZFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZmllbGRWYWx1ZSA9IGlucHV0W25hbWVdOyAvLyB3ZSBhcmUgdXNpbmcgdGhlIHNvdXJjZSBkaXJlY3RseVxuICAgICAgICAgICAgb3V0cHV0ID0gdGFyZ2V0OyAvLyB3ZSB3YW50IG91ciBmaWVsZCB2YWx1ZSB0byBnbyBkaXJlY3RseSBpbnRvIHRoZSB0YXJnZXRcbiAgICAgICAgICAgIGlmIChmaWVsZFZhbHVlID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBza2lwIGZ1cnRoZXIgd29yayBvbiBmaWVsZCwgZXhpc3RpbmcgdmFsdWUgaXMgdXNlZCBhcyBpc1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChmaWVsZC5yZXBlYXQpXG4gICAgICAgICAgICBvdXRwdXRbbmFtZV0ubGVuZ3RoID0gZmllbGRWYWx1ZS5sZW5ndGg7IC8vIHJlc2l6ZSB0YXJnZXQgYXJyYXkgdG8gbWF0Y2ggc291cmNlIGFycmF5XG4gICAgICAgIC8vIG5vdyB3ZSBqdXN0IHdvcmsgd2l0aCBgZmllbGRWYWx1ZWAgYW5kIGBvdXRwdXRgIHRvIG1lcmdlIHRoZSB2YWx1ZVxuICAgICAgICBzd2l0Y2ggKGZpZWxkLmtpbmQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJzY2FsYXJcIjpcbiAgICAgICAgICAgIGNhc2UgXCJlbnVtXCI6XG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkLnJlcGVhdClcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWVsZFZhbHVlLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0W25hbWVdW2ldID0gZmllbGRWYWx1ZVtpXTsgLy8gbm90IGEgcmVmZXJlbmNlIHR5cGVcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIG91dHB1dFtuYW1lXSA9IGZpZWxkVmFsdWU7IC8vIG5vdCBhIHJlZmVyZW5jZSB0eXBlXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWVzc2FnZVwiOlxuICAgICAgICAgICAgICAgIGxldCBUID0gZmllbGQuVCgpO1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZC5yZXBlYXQpXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmllbGRWYWx1ZS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFtuYW1lXVtpXSA9IFQuY3JlYXRlKGZpZWxkVmFsdWVbaV0pO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKG91dHB1dFtuYW1lXSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICBvdXRwdXRbbmFtZV0gPSBULmNyZWF0ZShmaWVsZFZhbHVlKTsgLy8gbm90aGluZyB0byBtZXJnZSB3aXRoXG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBULm1lcmdlUGFydGlhbChvdXRwdXRbbmFtZV0sIGZpZWxkVmFsdWUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm1hcFwiOlxuICAgICAgICAgICAgICAgIC8vIE1hcCBhbmQgcmVwZWF0ZWQgZmllbGRzIGFyZSBzaW1wbHkgb3ZlcndyaXR0ZW4sIG5vdCBhcHBlbmRlZCBvciBtZXJnZWRcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGZpZWxkLlYua2luZCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwic2NhbGFyXCI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJlbnVtXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKG91dHB1dFtuYW1lXSwgZmllbGRWYWx1ZSk7IC8vIGVsZW1lbnRzIGFyZSBub3QgcmVmZXJlbmNlIHR5cGVzXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcIm1lc3NhZ2VcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBUID0gZmllbGQuVi5UKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBrIG9mIE9iamVjdC5rZXlzKGZpZWxkVmFsdWUpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFtuYW1lXVtrXSA9IFQuY3JlYXRlKGZpZWxkVmFsdWVba10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5yZWZsZWN0aW9uTWVyZ2VQYXJ0aWFsID0gcmVmbGVjdGlvbk1lcmdlUGFydGlhbDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlZmxlY3Rpb25FcXVhbHMgPSB2b2lkIDA7XG5jb25zdCByZWZsZWN0aW9uX2luZm9fMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24taW5mb1wiKTtcbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHR3byBtZXNzYWdlIG9mIHRoZSBzYW1lIHR5cGUgaGF2ZSB0aGUgc2FtZSBmaWVsZCB2YWx1ZXMuXG4gKiBDaGVja3MgZm9yIGRlZXAgZXF1YWxpdHksIHRyYXZlcnNpbmcgcmVwZWF0ZWQgZmllbGRzLCBvbmVvZiBncm91cHMsIG1hcHNcbiAqIGFuZCBtZXNzYWdlcyByZWN1cnNpdmVseS5cbiAqIFdpbGwgYWxzbyByZXR1cm4gdHJ1ZSBpZiBib3RoIG1lc3NhZ2VzIGFyZSBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gcmVmbGVjdGlvbkVxdWFscyhpbmZvLCBhLCBiKSB7XG4gICAgaWYgKGEgPT09IGIpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIGlmICghYSB8fCAhYilcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGZvciAobGV0IGZpZWxkIG9mIGluZm8uZmllbGRzKSB7XG4gICAgICAgIGxldCBsb2NhbE5hbWUgPSBmaWVsZC5sb2NhbE5hbWU7XG4gICAgICAgIGxldCB2YWxfYSA9IGZpZWxkLm9uZW9mID8gYVtmaWVsZC5vbmVvZl1bbG9jYWxOYW1lXSA6IGFbbG9jYWxOYW1lXTtcbiAgICAgICAgbGV0IHZhbF9iID0gZmllbGQub25lb2YgPyBiW2ZpZWxkLm9uZW9mXVtsb2NhbE5hbWVdIDogYltsb2NhbE5hbWVdO1xuICAgICAgICBzd2l0Y2ggKGZpZWxkLmtpbmQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJlbnVtXCI6XG4gICAgICAgICAgICBjYXNlIFwic2NhbGFyXCI6XG4gICAgICAgICAgICAgICAgbGV0IHQgPSBmaWVsZC5raW5kID09IFwiZW51bVwiID8gcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5JTlQzMiA6IGZpZWxkLlQ7XG4gICAgICAgICAgICAgICAgaWYgKCEoZmllbGQucmVwZWF0XG4gICAgICAgICAgICAgICAgICAgID8gcmVwZWF0ZWRQcmltaXRpdmVFcSh0LCB2YWxfYSwgdmFsX2IpXG4gICAgICAgICAgICAgICAgICAgIDogcHJpbWl0aXZlRXEodCwgdmFsX2EsIHZhbF9iKSkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJtYXBcIjpcbiAgICAgICAgICAgICAgICBpZiAoIShmaWVsZC5WLmtpbmQgPT0gXCJtZXNzYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgPyByZXBlYXRlZE1zZ0VxKGZpZWxkLlYuVCgpLCBvYmplY3RWYWx1ZXModmFsX2EpLCBvYmplY3RWYWx1ZXModmFsX2IpKVxuICAgICAgICAgICAgICAgICAgICA6IHJlcGVhdGVkUHJpbWl0aXZlRXEoZmllbGQuVi5raW5kID09IFwiZW51bVwiID8gcmVmbGVjdGlvbl9pbmZvXzEuU2NhbGFyVHlwZS5JTlQzMiA6IGZpZWxkLlYuVCwgb2JqZWN0VmFsdWVzKHZhbF9hKSwgb2JqZWN0VmFsdWVzKHZhbF9iKSkpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWVzc2FnZVwiOlxuICAgICAgICAgICAgICAgIGxldCBUID0gZmllbGQuVCgpO1xuICAgICAgICAgICAgICAgIGlmICghKGZpZWxkLnJlcGVhdFxuICAgICAgICAgICAgICAgICAgICA/IHJlcGVhdGVkTXNnRXEoVCwgdmFsX2EsIHZhbF9iKVxuICAgICAgICAgICAgICAgICAgICA6IFQuZXF1YWxzKHZhbF9hLCB2YWxfYikpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5leHBvcnRzLnJlZmxlY3Rpb25FcXVhbHMgPSByZWZsZWN0aW9uRXF1YWxzO1xuY29uc3Qgb2JqZWN0VmFsdWVzID0gT2JqZWN0LnZhbHVlcztcbmZ1bmN0aW9uIHByaW1pdGl2ZUVxKHR5cGUsIGEsIGIpIHtcbiAgICBpZiAoYSA9PT0gYilcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgaWYgKHR5cGUgIT09IHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGUuQllURVMpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBsZXQgYmEgPSBhO1xuICAgIGxldCBiYiA9IGI7XG4gICAgaWYgKGJhLmxlbmd0aCAhPT0gYmIubGVuZ3RoKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiYS5sZW5ndGg7IGkrKylcbiAgICAgICAgaWYgKGJhW2ldICE9IGJiW2ldKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gcmVwZWF0ZWRQcmltaXRpdmVFcSh0eXBlLCBhLCBiKSB7XG4gICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKylcbiAgICAgICAgaWYgKCFwcmltaXRpdmVFcSh0eXBlLCBhW2ldLCBiW2ldKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIHJlcGVhdGVkTXNnRXEodHlwZSwgYSwgYikge1xuICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspXG4gICAgICAgIGlmICghdHlwZS5lcXVhbHMoYVtpXSwgYltpXSkpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG59XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5NZXNzYWdlVHlwZSA9IHZvaWQgMDtcbmNvbnN0IG1lc3NhZ2VfdHlwZV9jb250cmFjdF8xID0gcmVxdWlyZShcIi4vbWVzc2FnZS10eXBlLWNvbnRyYWN0XCIpO1xuY29uc3QgcmVmbGVjdGlvbl9pbmZvXzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLWluZm9cIik7XG5jb25zdCByZWZsZWN0aW9uX3R5cGVfY2hlY2tfMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24tdHlwZS1jaGVja1wiKTtcbmNvbnN0IHJlZmxlY3Rpb25fanNvbl9yZWFkZXJfMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24tanNvbi1yZWFkZXJcIik7XG5jb25zdCByZWZsZWN0aW9uX2pzb25fd3JpdGVyXzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLWpzb24td3JpdGVyXCIpO1xuY29uc3QgcmVmbGVjdGlvbl9iaW5hcnlfcmVhZGVyXzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLWJpbmFyeS1yZWFkZXJcIik7XG5jb25zdCByZWZsZWN0aW9uX2JpbmFyeV93cml0ZXJfMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24tYmluYXJ5LXdyaXRlclwiKTtcbmNvbnN0IHJlZmxlY3Rpb25fY3JlYXRlXzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLWNyZWF0ZVwiKTtcbmNvbnN0IHJlZmxlY3Rpb25fbWVyZ2VfcGFydGlhbF8xID0gcmVxdWlyZShcIi4vcmVmbGVjdGlvbi1tZXJnZS1wYXJ0aWFsXCIpO1xuY29uc3QganNvbl90eXBpbmdzXzEgPSByZXF1aXJlKFwiLi9qc29uLXR5cGluZ3NcIik7XG5jb25zdCBqc29uX2Zvcm1hdF9jb250cmFjdF8xID0gcmVxdWlyZShcIi4vanNvbi1mb3JtYXQtY29udHJhY3RcIik7XG5jb25zdCByZWZsZWN0aW9uX2VxdWFsc18xID0gcmVxdWlyZShcIi4vcmVmbGVjdGlvbi1lcXVhbHNcIik7XG5jb25zdCBiaW5hcnlfd3JpdGVyXzEgPSByZXF1aXJlKFwiLi9iaW5hcnktd3JpdGVyXCIpO1xuY29uc3QgYmluYXJ5X3JlYWRlcl8xID0gcmVxdWlyZShcIi4vYmluYXJ5LXJlYWRlclwiKTtcbmNvbnN0IGJhc2VEZXNjcmlwdG9ycyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdC5nZXRQcm90b3R5cGVPZih7fSkpO1xuLyoqXG4gKiBUaGlzIHN0YW5kYXJkIG1lc3NhZ2UgdHlwZSBwcm92aWRlcyByZWZsZWN0aW9uLWJhc2VkXG4gKiBvcGVyYXRpb25zIHRvIHdvcmsgd2l0aCBhIG1lc3NhZ2UuXG4gKi9cbmNsYXNzIE1lc3NhZ2VUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcihuYW1lLCBmaWVsZHMsIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5kZWZhdWx0Q2hlY2tEZXB0aCA9IDE2O1xuICAgICAgICB0aGlzLnR5cGVOYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5maWVsZHMgPSBmaWVsZHMubWFwKHJlZmxlY3Rpb25faW5mb18xLm5vcm1hbGl6ZUZpZWxkSW5mbyk7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwID8gb3B0aW9ucyA6IHt9O1xuICAgICAgICB0aGlzLm1lc3NhZ2VQcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKG51bGwsIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYmFzZURlc2NyaXB0b3JzKSwgeyBbbWVzc2FnZV90eXBlX2NvbnRyYWN0XzEuTUVTU0FHRV9UWVBFXTogeyB2YWx1ZTogdGhpcyB9IH0pKTtcbiAgICAgICAgdGhpcy5yZWZUeXBlQ2hlY2sgPSBuZXcgcmVmbGVjdGlvbl90eXBlX2NoZWNrXzEuUmVmbGVjdGlvblR5cGVDaGVjayh0aGlzKTtcbiAgICAgICAgdGhpcy5yZWZKc29uUmVhZGVyID0gbmV3IHJlZmxlY3Rpb25fanNvbl9yZWFkZXJfMS5SZWZsZWN0aW9uSnNvblJlYWRlcih0aGlzKTtcbiAgICAgICAgdGhpcy5yZWZKc29uV3JpdGVyID0gbmV3IHJlZmxlY3Rpb25fanNvbl93cml0ZXJfMS5SZWZsZWN0aW9uSnNvbldyaXRlcih0aGlzKTtcbiAgICAgICAgdGhpcy5yZWZCaW5SZWFkZXIgPSBuZXcgcmVmbGVjdGlvbl9iaW5hcnlfcmVhZGVyXzEuUmVmbGVjdGlvbkJpbmFyeVJlYWRlcih0aGlzKTtcbiAgICAgICAgdGhpcy5yZWZCaW5Xcml0ZXIgPSBuZXcgcmVmbGVjdGlvbl9iaW5hcnlfd3JpdGVyXzEuUmVmbGVjdGlvbkJpbmFyeVdyaXRlcih0aGlzKTtcbiAgICB9XG4gICAgY3JlYXRlKHZhbHVlKSB7XG4gICAgICAgIGxldCBtZXNzYWdlID0gcmVmbGVjdGlvbl9jcmVhdGVfMS5yZWZsZWN0aW9uQ3JlYXRlKHRoaXMpO1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmVmbGVjdGlvbl9tZXJnZV9wYXJ0aWFsXzEucmVmbGVjdGlvbk1lcmdlUGFydGlhbCh0aGlzLCBtZXNzYWdlLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENsb25lIHRoZSBtZXNzYWdlLlxuICAgICAqXG4gICAgICogVW5rbm93biBmaWVsZHMgYXJlIGRpc2NhcmRlZC5cbiAgICAgKi9cbiAgICBjbG9uZShtZXNzYWdlKSB7XG4gICAgICAgIGxldCBjb3B5ID0gdGhpcy5jcmVhdGUoKTtcbiAgICAgICAgcmVmbGVjdGlvbl9tZXJnZV9wYXJ0aWFsXzEucmVmbGVjdGlvbk1lcmdlUGFydGlhbCh0aGlzLCBjb3B5LCBtZXNzYWdlKTtcbiAgICAgICAgcmV0dXJuIGNvcHk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERldGVybWluZXMgd2hldGhlciB0d28gbWVzc2FnZSBvZiB0aGUgc2FtZSB0eXBlIGhhdmUgdGhlIHNhbWUgZmllbGQgdmFsdWVzLlxuICAgICAqIENoZWNrcyBmb3IgZGVlcCBlcXVhbGl0eSwgdHJhdmVyc2luZyByZXBlYXRlZCBmaWVsZHMsIG9uZW9mIGdyb3VwcywgbWFwc1xuICAgICAqIGFuZCBtZXNzYWdlcyByZWN1cnNpdmVseS5cbiAgICAgKiBXaWxsIGFsc28gcmV0dXJuIHRydWUgaWYgYm90aCBtZXNzYWdlcyBhcmUgYHVuZGVmaW5lZGAuXG4gICAgICovXG4gICAgZXF1YWxzKGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIHJlZmxlY3Rpb25fZXF1YWxzXzEucmVmbGVjdGlvbkVxdWFscyh0aGlzLCBhLCBiKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSXMgdGhlIGdpdmVuIHZhbHVlIGFzc2lnbmFibGUgdG8gb3VyIG1lc3NhZ2UgdHlwZVxuICAgICAqIGFuZCBjb250YWlucyBubyBbZXhjZXNzIHByb3BlcnRpZXNdKGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rL2ludGVyZmFjZXMuaHRtbCNleGNlc3MtcHJvcGVydHktY2hlY2tzKT9cbiAgICAgKi9cbiAgICBpcyhhcmcsIGRlcHRoID0gdGhpcy5kZWZhdWx0Q2hlY2tEZXB0aCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWZUeXBlQ2hlY2suaXMoYXJnLCBkZXB0aCwgZmFsc2UpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJcyB0aGUgZ2l2ZW4gdmFsdWUgYXNzaWduYWJsZSB0byBvdXIgbWVzc2FnZSB0eXBlLFxuICAgICAqIHJlZ2FyZGxlc3Mgb2YgW2V4Y2VzcyBwcm9wZXJ0aWVzXShodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay9pbnRlcmZhY2VzLmh0bWwjZXhjZXNzLXByb3BlcnR5LWNoZWNrcyk/XG4gICAgICovXG4gICAgaXNBc3NpZ25hYmxlKGFyZywgZGVwdGggPSB0aGlzLmRlZmF1bHRDaGVja0RlcHRoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZlR5cGVDaGVjay5pcyhhcmcsIGRlcHRoLCB0cnVlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29weSBwYXJ0aWFsIGRhdGEgaW50byB0aGUgdGFyZ2V0IG1lc3NhZ2UuXG4gICAgICovXG4gICAgbWVyZ2VQYXJ0aWFsKHRhcmdldCwgc291cmNlKSB7XG4gICAgICAgIHJlZmxlY3Rpb25fbWVyZ2VfcGFydGlhbF8xLnJlZmxlY3Rpb25NZXJnZVBhcnRpYWwodGhpcywgdGFyZ2V0LCBzb3VyY2UpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBuZXcgbWVzc2FnZSBmcm9tIGJpbmFyeSBmb3JtYXQuXG4gICAgICovXG4gICAgZnJvbUJpbmFyeShkYXRhLCBvcHRpb25zKSB7XG4gICAgICAgIGxldCBvcHQgPSBiaW5hcnlfcmVhZGVyXzEuYmluYXJ5UmVhZE9wdGlvbnMob3B0aW9ucyk7XG4gICAgICAgIHJldHVybiB0aGlzLmludGVybmFsQmluYXJ5UmVhZChvcHQucmVhZGVyRmFjdG9yeShkYXRhKSwgZGF0YS5ieXRlTGVuZ3RoLCBvcHQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWFkIGEgbmV3IG1lc3NhZ2UgZnJvbSBhIEpTT04gdmFsdWUuXG4gICAgICovXG4gICAgZnJvbUpzb24oanNvbiwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbEpzb25SZWFkKGpzb24sIGpzb25fZm9ybWF0X2NvbnRyYWN0XzEuanNvblJlYWRPcHRpb25zKG9wdGlvbnMpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVhZCBhIG5ldyBtZXNzYWdlIGZyb20gYSBKU09OIHN0cmluZy5cbiAgICAgKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gYFQuZnJvbUpzb24oSlNPTi5wYXJzZShqc29uKSlgLlxuICAgICAqL1xuICAgIGZyb21Kc29uU3RyaW5nKGpzb24sIG9wdGlvbnMpIHtcbiAgICAgICAgbGV0IHZhbHVlID0gSlNPTi5wYXJzZShqc29uKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZnJvbUpzb24odmFsdWUsIG9wdGlvbnMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXcml0ZSB0aGUgbWVzc2FnZSB0byBjYW5vbmljYWwgSlNPTiB2YWx1ZS5cbiAgICAgKi9cbiAgICB0b0pzb24obWVzc2FnZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbEpzb25Xcml0ZShtZXNzYWdlLCBqc29uX2Zvcm1hdF9jb250cmFjdF8xLmpzb25Xcml0ZU9wdGlvbnMob3B0aW9ucykpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IHRoZSBtZXNzYWdlIHRvIGNhbm9uaWNhbCBKU09OIHN0cmluZy5cbiAgICAgKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gYEpTT04uc3RyaW5naWZ5KFQudG9Kc29uKHQpKWBcbiAgICAgKi9cbiAgICB0b0pzb25TdHJpbmcobWVzc2FnZSwgb3B0aW9ucykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGxldCB2YWx1ZSA9IHRoaXMudG9Kc29uKG1lc3NhZ2UsIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUsIG51bGwsIChfYSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5wcmV0dHlTcGFjZXMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IDApO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXcml0ZSB0aGUgbWVzc2FnZSB0byBiaW5hcnkgZm9ybWF0LlxuICAgICAqL1xuICAgIHRvQmluYXJ5KG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgbGV0IG9wdCA9IGJpbmFyeV93cml0ZXJfMS5iaW5hcnlXcml0ZU9wdGlvbnMob3B0aW9ucyk7XG4gICAgICAgIHJldHVybiB0aGlzLmludGVybmFsQmluYXJ5V3JpdGUobWVzc2FnZSwgb3B0LndyaXRlckZhY3RvcnkoKSwgb3B0KS5maW5pc2goKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhpcyBpcyBhbiBpbnRlcm5hbCBtZXRob2QuIElmIHlvdSBqdXN0IHdhbnQgdG8gcmVhZCBhIG1lc3NhZ2UgZnJvbVxuICAgICAqIEpTT04sIHVzZSBgZnJvbUpzb24oKWAgb3IgYGZyb21Kc29uU3RyaW5nKClgLlxuICAgICAqXG4gICAgICogUmVhZHMgSlNPTiB2YWx1ZSBhbmQgbWVyZ2VzIHRoZSBmaWVsZHMgaW50byB0aGUgdGFyZ2V0XG4gICAgICogYWNjb3JkaW5nIHRvIHByb3RvYnVmIHJ1bGVzLiBJZiB0aGUgdGFyZ2V0IGlzIG9taXR0ZWQsXG4gICAgICogYSBuZXcgaW5zdGFuY2UgaXMgY3JlYXRlZCBmaXJzdC5cbiAgICAgKi9cbiAgICBpbnRlcm5hbEpzb25SZWFkKGpzb24sIG9wdGlvbnMsIHRhcmdldCkge1xuICAgICAgICBpZiAoanNvbiAhPT0gbnVsbCAmJiB0eXBlb2YganNvbiA9PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KGpzb24pKSB7XG4gICAgICAgICAgICBsZXQgbWVzc2FnZSA9IHRhcmdldCAhPT0gbnVsbCAmJiB0YXJnZXQgIT09IHZvaWQgMCA/IHRhcmdldCA6IHRoaXMuY3JlYXRlKCk7XG4gICAgICAgICAgICB0aGlzLnJlZkpzb25SZWFkZXIucmVhZChqc29uLCBtZXNzYWdlLCBvcHRpb25zKTtcbiAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIHBhcnNlIG1lc3NhZ2UgJHt0aGlzLnR5cGVOYW1lfSBmcm9tIEpTT04gJHtqc29uX3R5cGluZ3NfMS50eXBlb2ZKc29uVmFsdWUoanNvbil9LmApO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIGFuIGludGVybmFsIG1ldGhvZC4gSWYgeW91IGp1c3Qgd2FudCB0byB3cml0ZSBhIG1lc3NhZ2VcbiAgICAgKiB0byBKU09OLCB1c2UgYHRvSnNvbigpYCBvciBgdG9Kc29uU3RyaW5nKCkuXG4gICAgICpcbiAgICAgKiBXcml0ZXMgSlNPTiB2YWx1ZSBhbmQgcmV0dXJucyBpdC5cbiAgICAgKi9cbiAgICBpbnRlcm5hbEpzb25Xcml0ZShtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZkpzb25Xcml0ZXIud3JpdGUobWVzc2FnZSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgYW4gaW50ZXJuYWwgbWV0aG9kLiBJZiB5b3UganVzdCB3YW50IHRvIHdyaXRlIGEgbWVzc2FnZVxuICAgICAqIGluIGJpbmFyeSBmb3JtYXQsIHVzZSBgdG9CaW5hcnkoKWAuXG4gICAgICpcbiAgICAgKiBTZXJpYWxpemVzIHRoZSBtZXNzYWdlIGluIGJpbmFyeSBmb3JtYXQgYW5kIGFwcGVuZHMgaXQgdG8gdGhlIGdpdmVuXG4gICAgICogd3JpdGVyLiBSZXR1cm5zIHBhc3NlZCB3cml0ZXIuXG4gICAgICovXG4gICAgaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLCB3cml0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5yZWZCaW5Xcml0ZXIud3JpdGUobWVzc2FnZSwgd3JpdGVyLCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhpcyBpcyBhbiBpbnRlcm5hbCBtZXRob2QuIElmIHlvdSBqdXN0IHdhbnQgdG8gcmVhZCBhIG1lc3NhZ2UgZnJvbVxuICAgICAqIGJpbmFyeSBkYXRhLCB1c2UgYGZyb21CaW5hcnkoKWAuXG4gICAgICpcbiAgICAgKiBSZWFkcyBkYXRhIGZyb20gYmluYXJ5IGZvcm1hdCBhbmQgbWVyZ2VzIHRoZSBmaWVsZHMgaW50b1xuICAgICAqIHRoZSB0YXJnZXQgYWNjb3JkaW5nIHRvIHByb3RvYnVmIHJ1bGVzLiBJZiB0aGUgdGFyZ2V0IGlzXG4gICAgICogb21pdHRlZCwgYSBuZXcgaW5zdGFuY2UgaXMgY3JlYXRlZCBmaXJzdC5cbiAgICAgKi9cbiAgICBpbnRlcm5hbEJpbmFyeVJlYWQocmVhZGVyLCBsZW5ndGgsIG9wdGlvbnMsIHRhcmdldCkge1xuICAgICAgICBsZXQgbWVzc2FnZSA9IHRhcmdldCAhPT0gbnVsbCAmJiB0YXJnZXQgIT09IHZvaWQgMCA/IHRhcmdldCA6IHRoaXMuY3JlYXRlKCk7XG4gICAgICAgIHRoaXMucmVmQmluUmVhZGVyLnJlYWQocmVhZGVyLCBtZXNzYWdlLCBvcHRpb25zLCBsZW5ndGgpO1xuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG59XG5leHBvcnRzLk1lc3NhZ2VUeXBlID0gTWVzc2FnZVR5cGU7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jb250YWluc01lc3NhZ2VUeXBlID0gdm9pZCAwO1xuY29uc3QgbWVzc2FnZV90eXBlX2NvbnRyYWN0XzEgPSByZXF1aXJlKFwiLi9tZXNzYWdlLXR5cGUtY29udHJhY3RcIik7XG4vKipcbiAqIENoZWNrIGlmIHRoZSBwcm92aWRlZCBvYmplY3QgaXMgYSBwcm90byBtZXNzYWdlLlxuICpcbiAqIE5vdGUgdGhhdCB0aGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBmZWF0dXJlIC0gaXQgaXMgaGVyZSB0byBzdGF5LCBidXRcbiAqIGltcGxlbWVudGF0aW9uIGRldGFpbHMgbWF5IGNoYW5nZSB3aXRob3V0IG5vdGljZS5cbiAqL1xuZnVuY3Rpb24gY29udGFpbnNNZXNzYWdlVHlwZShtc2cpIHtcbiAgICByZXR1cm4gbXNnW21lc3NhZ2VfdHlwZV9jb250cmFjdF8xLk1FU1NBR0VfVFlQRV0gIT0gbnVsbDtcbn1cbmV4cG9ydHMuY29udGFpbnNNZXNzYWdlVHlwZSA9IGNvbnRhaW5zTWVzc2FnZVR5cGU7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5saXN0RW51bU51bWJlcnMgPSBleHBvcnRzLmxpc3RFbnVtTmFtZXMgPSBleHBvcnRzLmxpc3RFbnVtVmFsdWVzID0gZXhwb3J0cy5pc0VudW1PYmplY3QgPSB2b2lkIDA7XG4vKipcbiAqIElzIHRoaXMgYSBsb29rdXAgb2JqZWN0IGdlbmVyYXRlZCBieSBUeXBlc2NyaXB0LCBmb3IgYSBUeXBlc2NyaXB0IGVudW1cbiAqIGdlbmVyYXRlZCBieSBwcm90b2J1Zi10cz9cbiAqXG4gKiAtIE5vIGBjb25zdCBlbnVtYCAoZW51bSBtdXN0IG5vdCBiZSBpbmxpbmVkLCB3ZSBuZWVkIHJldmVyc2UgbWFwcGluZykuXG4gKiAtIE5vIHN0cmluZyBlbnVtICh3ZSBuZWVkIGludDMyIGZvciBwcm90b2J1ZikuXG4gKiAtIE11c3QgaGF2ZSBhIHZhbHVlIGZvciAwIChvdGhlcndpc2UsIHdlIHdvdWxkIG5lZWQgdG8gc3VwcG9ydCBjdXN0b20gZGVmYXVsdCB2YWx1ZXMpLlxuICovXG5mdW5jdGlvbiBpc0VudW1PYmplY3QoYXJnKSB7XG4gICAgaWYgKHR5cGVvZiBhcmcgIT0gJ29iamVjdCcgfHwgYXJnID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCFhcmcuaGFzT3duUHJvcGVydHkoMCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBmb3IgKGxldCBrIG9mIE9iamVjdC5rZXlzKGFyZykpIHtcbiAgICAgICAgbGV0IG51bSA9IHBhcnNlSW50KGspO1xuICAgICAgICBpZiAoIU51bWJlci5pc05hTihudW0pKSB7XG4gICAgICAgICAgICAvLyBpcyB0aGVyZSBhIG5hbWUgZm9yIHRoZSBudW1iZXI/XG4gICAgICAgICAgICBsZXQgbmFtID0gYXJnW251bV07XG4gICAgICAgICAgICBpZiAobmFtID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgLy8gZG9lcyB0aGUgbmFtZSByZXNvbHZlIGJhY2sgdG8gdGhlIG51bWJlcj9cbiAgICAgICAgICAgIGlmIChhcmdbbmFtXSAhPT0gbnVtKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIGlzIHRoZXJlIGEgbnVtYmVyIGZvciB0aGUgbmFtZT9cbiAgICAgICAgICAgIGxldCBudW0gPSBhcmdba107XG4gICAgICAgICAgICBpZiAobnVtID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgLy8gaXMgaXQgYSBzdHJpbmcgZW51bT9cbiAgICAgICAgICAgIGlmICh0eXBlb2YgbnVtICE9PSAnbnVtYmVyJylcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAvLyBkbyB3ZSBrbm93IHRoZSBudW1iZXI/XG4gICAgICAgICAgICBpZiAoYXJnW251bV0gPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5leHBvcnRzLmlzRW51bU9iamVjdCA9IGlzRW51bU9iamVjdDtcbi8qKlxuICogTGlzdHMgYWxsIHZhbHVlcyBvZiBhIFR5cGVzY3JpcHQgZW51bSwgYXMgYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIGEgXCJuYW1lXCJcbiAqIHByb3BlcnR5IGFuZCBhIFwibnVtYmVyXCIgcHJvcGVydHkuXG4gKlxuICogTm90ZSB0aGF0IGl0IGlzIHBvc3NpYmxlIHRoYXQgYSBudW1iZXIgYXBwZWFycyBtb3JlIHRoYW4gb25jZSwgYmVjYXVzZSBpdCBpc1xuICogcG9zc2libGUgdG8gaGF2ZSBhbGlhc2VzIGluIGFuIGVudW0uXG4gKlxuICogVGhyb3dzIGlmIHRoZSBlbnVtIGRvZXMgbm90IGFkaGVyZSB0byB0aGUgcnVsZXMgb2YgZW51bXMgZ2VuZXJhdGVkIGJ5XG4gKiBwcm90b2J1Zi10cy4gU2VlIGBpc0VudW1PYmplY3QoKWAuXG4gKi9cbmZ1bmN0aW9uIGxpc3RFbnVtVmFsdWVzKGVudW1PYmplY3QpIHtcbiAgICBpZiAoIWlzRW51bU9iamVjdChlbnVtT2JqZWN0KSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibm90IGEgdHlwZXNjcmlwdCBlbnVtIG9iamVjdFwiKTtcbiAgICBsZXQgdmFsdWVzID0gW107XG4gICAgZm9yIChsZXQgW25hbWUsIG51bWJlcl0gb2YgT2JqZWN0LmVudHJpZXMoZW51bU9iamVjdCkpXG4gICAgICAgIGlmICh0eXBlb2YgbnVtYmVyID09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICB2YWx1ZXMucHVzaCh7IG5hbWUsIG51bWJlciB9KTtcbiAgICByZXR1cm4gdmFsdWVzO1xufVxuZXhwb3J0cy5saXN0RW51bVZhbHVlcyA9IGxpc3RFbnVtVmFsdWVzO1xuLyoqXG4gKiBMaXN0cyB0aGUgbmFtZXMgb2YgYSBUeXBlc2NyaXB0IGVudW0uXG4gKlxuICogVGhyb3dzIGlmIHRoZSBlbnVtIGRvZXMgbm90IGFkaGVyZSB0byB0aGUgcnVsZXMgb2YgZW51bXMgZ2VuZXJhdGVkIGJ5XG4gKiBwcm90b2J1Zi10cy4gU2VlIGBpc0VudW1PYmplY3QoKWAuXG4gKi9cbmZ1bmN0aW9uIGxpc3RFbnVtTmFtZXMoZW51bU9iamVjdCkge1xuICAgIHJldHVybiBsaXN0RW51bVZhbHVlcyhlbnVtT2JqZWN0KS5tYXAodmFsID0+IHZhbC5uYW1lKTtcbn1cbmV4cG9ydHMubGlzdEVudW1OYW1lcyA9IGxpc3RFbnVtTmFtZXM7XG4vKipcbiAqIExpc3RzIHRoZSBudW1iZXJzIG9mIGEgVHlwZXNjcmlwdCBlbnVtLlxuICpcbiAqIFRocm93cyBpZiB0aGUgZW51bSBkb2VzIG5vdCBhZGhlcmUgdG8gdGhlIHJ1bGVzIG9mIGVudW1zIGdlbmVyYXRlZCBieVxuICogcHJvdG9idWYtdHMuIFNlZSBgaXNFbnVtT2JqZWN0KClgLlxuICovXG5mdW5jdGlvbiBsaXN0RW51bU51bWJlcnMoZW51bU9iamVjdCkge1xuICAgIHJldHVybiBsaXN0RW51bVZhbHVlcyhlbnVtT2JqZWN0KVxuICAgICAgICAubWFwKHZhbCA9PiB2YWwubnVtYmVyKVxuICAgICAgICAuZmlsdGVyKChudW0sIGluZGV4LCBhcnIpID0+IGFyci5pbmRleE9mKG51bSkgPT0gaW5kZXgpO1xufVxuZXhwb3J0cy5saXN0RW51bU51bWJlcnMgPSBsaXN0RW51bU51bWJlcnM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gUHVibGljIEFQSSBvZiB0aGUgcHJvdG9idWYtdHMgcnVudGltZS5cbi8vIE5vdGU6IHdlIGRvIG5vdCB1c2UgYGV4cG9ydCAqIGZyb20gLi4uYCB0byBoZWxwIHRyZWUgc2hha2Vycyxcbi8vIHdlYnBhY2sgdmVyYm9zZSBvdXRwdXQgaGludHMgdGhhdCB0aGlzIHNob3VsZCBiZSB1c2VmdWxcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8vIENvbnZlbmllbmNlIEpTT04gdHlwaW5ncyBhbmQgY29ycmVzcG9uZGluZyB0eXBlIGd1YXJkc1xudmFyIGpzb25fdHlwaW5nc18xID0gcmVxdWlyZShcIi4vanNvbi10eXBpbmdzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidHlwZW9mSnNvblZhbHVlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBqc29uX3R5cGluZ3NfMS50eXBlb2ZKc29uVmFsdWU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0pzb25PYmplY3RcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGpzb25fdHlwaW5nc18xLmlzSnNvbk9iamVjdDsgfSB9KTtcbi8vIEJhc2UgNjQgZW5jb2RpbmdcbnZhciBiYXNlNjRfMSA9IHJlcXVpcmUoXCIuL2Jhc2U2NFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImJhc2U2NGRlY29kZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYmFzZTY0XzEuYmFzZTY0ZGVjb2RlOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYmFzZTY0ZW5jb2RlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBiYXNlNjRfMS5iYXNlNjRlbmNvZGU7IH0gfSk7XG4vLyBVVEY4IGVuY29kaW5nXG52YXIgcHJvdG9idWZqc191dGY4XzEgPSByZXF1aXJlKFwiLi9wcm90b2J1ZmpzLXV0ZjhcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ1dGY4cmVhZFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcHJvdG9idWZqc191dGY4XzEudXRmOHJlYWQ7IH0gfSk7XG4vLyBCaW5hcnkgZm9ybWF0IGNvbnRyYWN0cywgb3B0aW9ucyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZywgZm9yIGV4YW1wbGVcbnZhciBiaW5hcnlfZm9ybWF0X2NvbnRyYWN0XzEgPSByZXF1aXJlKFwiLi9iaW5hcnktZm9ybWF0LWNvbnRyYWN0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiV2lyZVR5cGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMS5XaXJlVHlwZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm1lcmdlQmluYXJ5T3B0aW9uc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYmluYXJ5X2Zvcm1hdF9jb250cmFjdF8xLm1lcmdlQmluYXJ5T3B0aW9uczsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlVua25vd25GaWVsZEhhbmRsZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGJpbmFyeV9mb3JtYXRfY29udHJhY3RfMS5Vbmtub3duRmllbGRIYW5kbGVyOyB9IH0pO1xuLy8gU3RhbmRhcmQgSUJpbmFyeVJlYWRlciBpbXBsZW1lbnRhdGlvblxudmFyIGJpbmFyeV9yZWFkZXJfMSA9IHJlcXVpcmUoXCIuL2JpbmFyeS1yZWFkZXJcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJCaW5hcnlSZWFkZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGJpbmFyeV9yZWFkZXJfMS5CaW5hcnlSZWFkZXI7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJiaW5hcnlSZWFkT3B0aW9uc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYmluYXJ5X3JlYWRlcl8xLmJpbmFyeVJlYWRPcHRpb25zOyB9IH0pO1xuLy8gU3RhbmRhcmQgSUJpbmFyeVdyaXRlciBpbXBsZW1lbnRhdGlvblxudmFyIGJpbmFyeV93cml0ZXJfMSA9IHJlcXVpcmUoXCIuL2JpbmFyeS13cml0ZXJcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJCaW5hcnlXcml0ZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGJpbmFyeV93cml0ZXJfMS5CaW5hcnlXcml0ZXI7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJiaW5hcnlXcml0ZU9wdGlvbnNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGJpbmFyeV93cml0ZXJfMS5iaW5hcnlXcml0ZU9wdGlvbnM7IH0gfSk7XG4vLyBJbnQ2NCBhbmQgVUludDY0IGltcGxlbWVudGF0aW9ucyByZXF1aXJlZCBmb3IgdGhlIGJpbmFyeSBmb3JtYXRcbnZhciBwYl9sb25nXzEgPSByZXF1aXJlKFwiLi9wYi1sb25nXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUGJMb25nXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwYl9sb25nXzEuUGJMb25nOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUGJVTG9uZ1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcGJfbG9uZ18xLlBiVUxvbmc7IH0gfSk7XG4vLyBKU09OIGZvcm1hdCBjb250cmFjdHMsIG9wdGlvbnMgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcsIGZvciBleGFtcGxlXG52YXIganNvbl9mb3JtYXRfY29udHJhY3RfMSA9IHJlcXVpcmUoXCIuL2pzb24tZm9ybWF0LWNvbnRyYWN0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwianNvblJlYWRPcHRpb25zXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBqc29uX2Zvcm1hdF9jb250cmFjdF8xLmpzb25SZWFkT3B0aW9uczsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImpzb25Xcml0ZU9wdGlvbnNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGpzb25fZm9ybWF0X2NvbnRyYWN0XzEuanNvbldyaXRlT3B0aW9uczsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm1lcmdlSnNvbk9wdGlvbnNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGpzb25fZm9ybWF0X2NvbnRyYWN0XzEubWVyZ2VKc29uT3B0aW9uczsgfSB9KTtcbi8vIE1lc3NhZ2UgdHlwZSBjb250cmFjdFxudmFyIG1lc3NhZ2VfdHlwZV9jb250cmFjdF8xID0gcmVxdWlyZShcIi4vbWVzc2FnZS10eXBlLWNvbnRyYWN0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTUVTU0FHRV9UWVBFXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBtZXNzYWdlX3R5cGVfY29udHJhY3RfMS5NRVNTQUdFX1RZUEU7IH0gfSk7XG4vLyBNZXNzYWdlIHR5cGUgaW1wbGVtZW50YXRpb24gdmlhIHJlZmxlY3Rpb25cbnZhciBtZXNzYWdlX3R5cGVfMSA9IHJlcXVpcmUoXCIuL21lc3NhZ2UtdHlwZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk1lc3NhZ2VUeXBlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBtZXNzYWdlX3R5cGVfMS5NZXNzYWdlVHlwZTsgfSB9KTtcbi8vIFJlZmxlY3Rpb24gaW5mbywgZ2VuZXJhdGVkIGJ5IHRoZSBwbHVnaW4sIGV4cG9zZWQgdG8gdGhlIHVzZXIsIHVzZWQgYnkgcmVmbGVjdGlvbiBvcHNcbnZhciByZWZsZWN0aW9uX2luZm9fMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24taW5mb1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlNjYWxhclR5cGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlZmxlY3Rpb25faW5mb18xLlNjYWxhclR5cGU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJMb25nVHlwZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVmbGVjdGlvbl9pbmZvXzEuTG9uZ1R5cGU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJSZXBlYXRUeXBlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZWZsZWN0aW9uX2luZm9fMS5SZXBlYXRUeXBlOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibm9ybWFsaXplRmllbGRJbmZvXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZWZsZWN0aW9uX2luZm9fMS5ub3JtYWxpemVGaWVsZEluZm87IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyZWFkRmllbGRPcHRpb25zXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZWZsZWN0aW9uX2luZm9fMS5yZWFkRmllbGRPcHRpb25zOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmVhZEZpZWxkT3B0aW9uXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZWZsZWN0aW9uX2luZm9fMS5yZWFkRmllbGRPcHRpb247IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyZWFkTWVzc2FnZU9wdGlvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVmbGVjdGlvbl9pbmZvXzEucmVhZE1lc3NhZ2VPcHRpb247IH0gfSk7XG4vLyBNZXNzYWdlIG9wZXJhdGlvbnMgdmlhIHJlZmxlY3Rpb25cbnZhciByZWZsZWN0aW9uX3R5cGVfY2hlY2tfMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24tdHlwZS1jaGVja1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlJlZmxlY3Rpb25UeXBlQ2hlY2tcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlZmxlY3Rpb25fdHlwZV9jaGVja18xLlJlZmxlY3Rpb25UeXBlQ2hlY2s7IH0gfSk7XG52YXIgcmVmbGVjdGlvbl9jcmVhdGVfMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24tY3JlYXRlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmVmbGVjdGlvbkNyZWF0ZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVmbGVjdGlvbl9jcmVhdGVfMS5yZWZsZWN0aW9uQ3JlYXRlOyB9IH0pO1xudmFyIHJlZmxlY3Rpb25fc2NhbGFyX2RlZmF1bHRfMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24tc2NhbGFyLWRlZmF1bHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyZWZsZWN0aW9uU2NhbGFyRGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVmbGVjdGlvbl9zY2FsYXJfZGVmYXVsdF8xLnJlZmxlY3Rpb25TY2FsYXJEZWZhdWx0OyB9IH0pO1xudmFyIHJlZmxlY3Rpb25fbWVyZ2VfcGFydGlhbF8xID0gcmVxdWlyZShcIi4vcmVmbGVjdGlvbi1tZXJnZS1wYXJ0aWFsXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmVmbGVjdGlvbk1lcmdlUGFydGlhbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVmbGVjdGlvbl9tZXJnZV9wYXJ0aWFsXzEucmVmbGVjdGlvbk1lcmdlUGFydGlhbDsgfSB9KTtcbnZhciByZWZsZWN0aW9uX2VxdWFsc18xID0gcmVxdWlyZShcIi4vcmVmbGVjdGlvbi1lcXVhbHNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyZWZsZWN0aW9uRXF1YWxzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZWZsZWN0aW9uX2VxdWFsc18xLnJlZmxlY3Rpb25FcXVhbHM7IH0gfSk7XG52YXIgcmVmbGVjdGlvbl9iaW5hcnlfcmVhZGVyXzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLWJpbmFyeS1yZWFkZXJcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJSZWZsZWN0aW9uQmluYXJ5UmVhZGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZWZsZWN0aW9uX2JpbmFyeV9yZWFkZXJfMS5SZWZsZWN0aW9uQmluYXJ5UmVhZGVyOyB9IH0pO1xudmFyIHJlZmxlY3Rpb25fYmluYXJ5X3dyaXRlcl8xID0gcmVxdWlyZShcIi4vcmVmbGVjdGlvbi1iaW5hcnktd3JpdGVyXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUmVmbGVjdGlvbkJpbmFyeVdyaXRlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVmbGVjdGlvbl9iaW5hcnlfd3JpdGVyXzEuUmVmbGVjdGlvbkJpbmFyeVdyaXRlcjsgfSB9KTtcbnZhciByZWZsZWN0aW9uX2pzb25fcmVhZGVyXzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLWpzb24tcmVhZGVyXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUmVmbGVjdGlvbkpzb25SZWFkZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlZmxlY3Rpb25fanNvbl9yZWFkZXJfMS5SZWZsZWN0aW9uSnNvblJlYWRlcjsgfSB9KTtcbnZhciByZWZsZWN0aW9uX2pzb25fd3JpdGVyXzEgPSByZXF1aXJlKFwiLi9yZWZsZWN0aW9uLWpzb24td3JpdGVyXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUmVmbGVjdGlvbkpzb25Xcml0ZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlZmxlY3Rpb25fanNvbl93cml0ZXJfMS5SZWZsZWN0aW9uSnNvbldyaXRlcjsgfSB9KTtcbnZhciByZWZsZWN0aW9uX2NvbnRhaW5zX21lc3NhZ2VfdHlwZV8xID0gcmVxdWlyZShcIi4vcmVmbGVjdGlvbi1jb250YWlucy1tZXNzYWdlLXR5cGVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb250YWluc01lc3NhZ2VUeXBlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZWZsZWN0aW9uX2NvbnRhaW5zX21lc3NhZ2VfdHlwZV8xLmNvbnRhaW5zTWVzc2FnZVR5cGU7IH0gfSk7XG4vLyBPbmVvZiBoZWxwZXJzXG52YXIgb25lb2ZfMSA9IHJlcXVpcmUoXCIuL29uZW9mXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNPbmVvZkdyb3VwXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBvbmVvZl8xLmlzT25lb2ZHcm91cDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNldE9uZW9mVmFsdWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9uZW9mXzEuc2V0T25lb2ZWYWx1ZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImdldE9uZW9mVmFsdWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9uZW9mXzEuZ2V0T25lb2ZWYWx1ZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNsZWFyT25lb2ZWYWx1ZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gb25lb2ZfMS5jbGVhck9uZW9mVmFsdWU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnZXRTZWxlY3RlZE9uZW9mVmFsdWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9uZW9mXzEuZ2V0U2VsZWN0ZWRPbmVvZlZhbHVlOyB9IH0pO1xuLy8gRW51bSBvYmplY3QgdHlwZSBndWFyZCBhbmQgcmVmbGVjdGlvbiB1dGlsLCBtYXkgYmUgaW50ZXJlc3RpbmcgdG8gdGhlIHVzZXIuXG52YXIgZW51bV9vYmplY3RfMSA9IHJlcXVpcmUoXCIuL2VudW0tb2JqZWN0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibGlzdEVudW1WYWx1ZXNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGVudW1fb2JqZWN0XzEubGlzdEVudW1WYWx1ZXM7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJsaXN0RW51bU5hbWVzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBlbnVtX29iamVjdF8xLmxpc3RFbnVtTmFtZXM7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJsaXN0RW51bU51bWJlcnNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGVudW1fb2JqZWN0XzEubGlzdEVudW1OdW1iZXJzOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNFbnVtT2JqZWN0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBlbnVtX29iamVjdF8xLmlzRW51bU9iamVjdDsgfSB9KTtcbi8vIGxvd2VyQ2FtZWxDYXNlKCkgaXMgZXhwb3J0ZWQgZm9yIHBsdWdpbiwgcnBjLXJ1bnRpbWUgYW5kIG90aGVyIHJwYyBwYWNrYWdlc1xudmFyIGxvd2VyX2NhbWVsX2Nhc2VfMSA9IHJlcXVpcmUoXCIuL2xvd2VyLWNhbWVsLWNhc2VcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJsb3dlckNhbWVsQ2FzZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbG93ZXJfY2FtZWxfY2FzZV8xLmxvd2VyQ2FtZWxDYXNlOyB9IH0pO1xuLy8gYXNzZXJ0aW9uIGZ1bmN0aW9ucyBhcmUgZXhwb3J0ZWQgZm9yIHBsdWdpbiwgbWF5IGFsc28gYmUgdXNlZnVsIHRvIHVzZXJcbnZhciBhc3NlcnRfMSA9IHJlcXVpcmUoXCIuL2Fzc2VydFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImFzc2VydFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYXNzZXJ0XzEuYXNzZXJ0OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYXNzZXJ0TmV2ZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFzc2VydF8xLmFzc2VydE5ldmVyOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYXNzZXJ0SW50MzJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFzc2VydF8xLmFzc2VydEludDMyOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYXNzZXJ0VUludDMyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBhc3NlcnRfMS5hc3NlcnRVSW50MzI7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhc3NlcnRGbG9hdDMyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBhc3NlcnRfMS5hc3NlcnRGbG9hdDMyOyB9IH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVGltZXN0YW1wID0gdm9pZCAwO1xuY29uc3QgcnVudGltZV8xID0gcmVxdWlyZShcIkBwcm90b2J1Zi10cy9ydW50aW1lXCIpO1xuY29uc3QgcnVudGltZV8yID0gcmVxdWlyZShcIkBwcm90b2J1Zi10cy9ydW50aW1lXCIpO1xuY29uc3QgcnVudGltZV8zID0gcmVxdWlyZShcIkBwcm90b2J1Zi10cy9ydW50aW1lXCIpO1xuY29uc3QgcnVudGltZV80ID0gcmVxdWlyZShcIkBwcm90b2J1Zi10cy9ydW50aW1lXCIpO1xuY29uc3QgcnVudGltZV81ID0gcmVxdWlyZShcIkBwcm90b2J1Zi10cy9ydW50aW1lXCIpO1xuY29uc3QgcnVudGltZV82ID0gcmVxdWlyZShcIkBwcm90b2J1Zi10cy9ydW50aW1lXCIpO1xuY29uc3QgcnVudGltZV83ID0gcmVxdWlyZShcIkBwcm90b2J1Zi10cy9ydW50aW1lXCIpO1xuLy8gQGdlbmVyYXRlZCBtZXNzYWdlIHR5cGUgd2l0aCByZWZsZWN0aW9uIGluZm9ybWF0aW9uLCBtYXkgcHJvdmlkZSBzcGVlZCBvcHRpbWl6ZWQgbWV0aG9kc1xuY2xhc3MgVGltZXN0YW1wJFR5cGUgZXh0ZW5kcyBydW50aW1lXzcuTWVzc2FnZVR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcImdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBcIiwgW1xuICAgICAgICAgICAgeyBubzogMSwgbmFtZTogXCJzZWNvbmRzXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDMgLypTY2FsYXJUeXBlLklOVDY0Ki8gfSxcbiAgICAgICAgICAgIHsgbm86IDIsIG5hbWU6IFwibmFub3NcIiwga2luZDogXCJzY2FsYXJcIiwgVDogNSAvKlNjYWxhclR5cGUuSU5UMzIqLyB9XG4gICAgICAgIF0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IGBUaW1lc3RhbXBgIGZvciB0aGUgY3VycmVudCB0aW1lLlxuICAgICAqL1xuICAgIG5vdygpIHtcbiAgICAgICAgY29uc3QgbXNnID0gdGhpcy5jcmVhdGUoKTtcbiAgICAgICAgY29uc3QgbXMgPSBEYXRlLm5vdygpO1xuICAgICAgICBtc2cuc2Vjb25kcyA9IHJ1bnRpbWVfNi5QYkxvbmcuZnJvbShNYXRoLmZsb29yKG1zIC8gMTAwMCkpLnRvU3RyaW5nKCk7XG4gICAgICAgIG1zZy5uYW5vcyA9IChtcyAlIDEwMDApICogMTAwMDAwMDtcbiAgICAgICAgcmV0dXJuIG1zZztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYSBgVGltZXN0YW1wYCB0byBhIEphdmFTY3JpcHQgRGF0ZS5cbiAgICAgKi9cbiAgICB0b0RhdGUobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUocnVudGltZV82LlBiTG9uZy5mcm9tKG1lc3NhZ2Uuc2Vjb25kcykudG9OdW1iZXIoKSAqIDEwMDAgKyBNYXRoLmNlaWwobWVzc2FnZS5uYW5vcyAvIDEwMDAwMDApKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYSBKYXZhU2NyaXB0IERhdGUgdG8gYSBgVGltZXN0YW1wYC5cbiAgICAgKi9cbiAgICBmcm9tRGF0ZShkYXRlKSB7XG4gICAgICAgIGNvbnN0IG1zZyA9IHRoaXMuY3JlYXRlKCk7XG4gICAgICAgIGNvbnN0IG1zID0gZGF0ZS5nZXRUaW1lKCk7XG4gICAgICAgIG1zZy5zZWNvbmRzID0gcnVudGltZV82LlBiTG9uZy5mcm9tKE1hdGguZmxvb3IobXMgLyAxMDAwKSkudG9TdHJpbmcoKTtcbiAgICAgICAgbXNnLm5hbm9zID0gKG1zICUgMTAwMCkgKiAxMDAwMDAwO1xuICAgICAgICByZXR1cm4gbXNnO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbiBKU09OIGZvcm1hdCwgdGhlIGBUaW1lc3RhbXBgIHR5cGUgaXMgZW5jb2RlZCBhcyBhIHN0cmluZ1xuICAgICAqIGluIHRoZSBSRkMgMzMzOSBmb3JtYXQuXG4gICAgICovXG4gICAgaW50ZXJuYWxKc29uV3JpdGUobWVzc2FnZSwgb3B0aW9ucykge1xuICAgICAgICBsZXQgbXMgPSBydW50aW1lXzYuUGJMb25nLmZyb20obWVzc2FnZS5zZWNvbmRzKS50b051bWJlcigpICogMTAwMDtcbiAgICAgICAgaWYgKG1zIDwgRGF0ZS5wYXJzZShcIjAwMDEtMDEtMDFUMDA6MDA6MDBaXCIpIHx8IG1zID4gRGF0ZS5wYXJzZShcIjk5OTktMTItMzFUMjM6NTk6NTlaXCIpKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIGVuY29kZSBUaW1lc3RhbXAgdG8gSlNPTi4gTXVzdCBiZSBmcm9tIDAwMDEtMDEtMDFUMDA6MDA6MDBaIHRvIDk5OTktMTItMzFUMjM6NTk6NTlaIGluY2x1c2l2ZS5cIik7XG4gICAgICAgIGlmIChtZXNzYWdlLm5hbm9zIDwgMClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBlbmNvZGUgaW52YWxpZCBUaW1lc3RhbXAgdG8gSlNPTi4gTmFub3MgbXVzdCBub3QgYmUgbmVnYXRpdmUuXCIpO1xuICAgICAgICBsZXQgeiA9IFwiWlwiO1xuICAgICAgICBpZiAobWVzc2FnZS5uYW5vcyA+IDApIHtcbiAgICAgICAgICAgIGxldCBuYW5vc1N0ciA9IChtZXNzYWdlLm5hbm9zICsgMTAwMDAwMDAwMCkudG9TdHJpbmcoKS5zdWJzdHJpbmcoMSk7XG4gICAgICAgICAgICBpZiAobmFub3NTdHIuc3Vic3RyaW5nKDMpID09PSBcIjAwMDAwMFwiKVxuICAgICAgICAgICAgICAgIHogPSBcIi5cIiArIG5hbm9zU3RyLnN1YnN0cmluZygwLCAzKSArIFwiWlwiO1xuICAgICAgICAgICAgZWxzZSBpZiAobmFub3NTdHIuc3Vic3RyaW5nKDYpID09PSBcIjAwMFwiKVxuICAgICAgICAgICAgICAgIHogPSBcIi5cIiArIG5hbm9zU3RyLnN1YnN0cmluZygwLCA2KSArIFwiWlwiO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHogPSBcIi5cIiArIG5hbm9zU3RyICsgXCJaXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKG1zKS50b0lTT1N0cmluZygpLnJlcGxhY2UoXCIuMDAwWlwiLCB6KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSW4gSlNPTiBmb3JtYXQsIHRoZSBgVGltZXN0YW1wYCB0eXBlIGlzIGVuY29kZWQgYXMgYSBzdHJpbmdcbiAgICAgKiBpbiB0aGUgUkZDIDMzMzkgZm9ybWF0LlxuICAgICAqL1xuICAgIGludGVybmFsSnNvblJlYWQoanNvbiwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGlmICh0eXBlb2YganNvbiAhPT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBwYXJzZSBUaW1lc3RhbXAgZnJvbSBKU09OIFwiICsgKDAsIHJ1bnRpbWVfNS50eXBlb2ZKc29uVmFsdWUpKGpzb24pICsgXCIuXCIpO1xuICAgICAgICBsZXQgbWF0Y2hlcyA9IGpzb24ubWF0Y2goL14oWzAtOV17NH0pLShbMC05XXsyfSktKFswLTldezJ9KVQoWzAtOV17Mn0pOihbMC05XXsyfSk6KFswLTldezJ9KSg/Olp8XFwuKFswLTldezMsOX0pWnwoWystXVswLTldWzAtOV06WzAtOV1bMC05XSkpJC8pO1xuICAgICAgICBpZiAoIW1hdGNoZXMpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gcGFyc2UgVGltZXN0YW1wIGZyb20gSlNPTi4gSW52YWxpZCBmb3JtYXQuXCIpO1xuICAgICAgICBsZXQgbXMgPSBEYXRlLnBhcnNlKG1hdGNoZXNbMV0gKyBcIi1cIiArIG1hdGNoZXNbMl0gKyBcIi1cIiArIG1hdGNoZXNbM10gKyBcIlRcIiArIG1hdGNoZXNbNF0gKyBcIjpcIiArIG1hdGNoZXNbNV0gKyBcIjpcIiArIG1hdGNoZXNbNl0gKyAobWF0Y2hlc1s4XSA/IG1hdGNoZXNbOF0gOiBcIlpcIikpO1xuICAgICAgICBpZiAoTnVtYmVyLmlzTmFOKG1zKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBwYXJzZSBUaW1lc3RhbXAgZnJvbSBKU09OLiBJbnZhbGlkIHZhbHVlLlwiKTtcbiAgICAgICAgaWYgKG1zIDwgRGF0ZS5wYXJzZShcIjAwMDEtMDEtMDFUMDA6MDA6MDBaXCIpIHx8IG1zID4gRGF0ZS5wYXJzZShcIjk5OTktMTItMzFUMjM6NTk6NTlaXCIpKVxuICAgICAgICAgICAgdGhyb3cgbmV3IGdsb2JhbFRoaXMuRXJyb3IoXCJVbmFibGUgdG8gcGFyc2UgVGltZXN0YW1wIGZyb20gSlNPTi4gTXVzdCBiZSBmcm9tIDAwMDEtMDEtMDFUMDA6MDA6MDBaIHRvIDk5OTktMTItMzFUMjM6NTk6NTlaIGluY2x1c2l2ZS5cIik7XG4gICAgICAgIGlmICghdGFyZ2V0KVxuICAgICAgICAgICAgdGFyZ2V0ID0gdGhpcy5jcmVhdGUoKTtcbiAgICAgICAgdGFyZ2V0LnNlY29uZHMgPSBydW50aW1lXzYuUGJMb25nLmZyb20obXMgLyAxMDAwKS50b1N0cmluZygpO1xuICAgICAgICB0YXJnZXQubmFub3MgPSAwO1xuICAgICAgICBpZiAobWF0Y2hlc1s3XSlcbiAgICAgICAgICAgIHRhcmdldC5uYW5vcyA9IChwYXJzZUludChcIjFcIiArIG1hdGNoZXNbN10gKyBcIjBcIi5yZXBlYXQoOSAtIG1hdGNoZXNbN10ubGVuZ3RoKSkgLSAxMDAwMDAwMDAwKTtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG4gICAgY3JlYXRlKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7IHNlY29uZHM6IFwiMFwiLCBuYW5vczogMCB9O1xuICAgICAgICBnbG9iYWxUaGlzLk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZXNzYWdlLCBydW50aW1lXzQuTUVTU0FHRV9UWVBFLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdGhpcyB9KTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAoMCwgcnVudGltZV8zLnJlZmxlY3Rpb25NZXJnZVBhcnRpYWwpKHRoaXMsIG1lc3NhZ2UsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5UmVhZChyZWFkZXIsIGxlbmd0aCwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGxldCBtZXNzYWdlID0gdGFyZ2V0ICE9PSBudWxsICYmIHRhcmdldCAhPT0gdm9pZCAwID8gdGFyZ2V0IDogdGhpcy5jcmVhdGUoKSwgZW5kID0gcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgIGxldCBbZmllbGRObywgd2lyZVR5cGVdID0gcmVhZGVyLnRhZygpO1xuICAgICAgICAgICAgc3dpdGNoIChmaWVsZE5vKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBpbnQ2NCBzZWNvbmRzICovIDE6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2Vjb25kcyA9IHJlYWRlci5pbnQ2NCgpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgLyogaW50MzIgbmFub3MgKi8gMjpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5uYW5vcyA9IHJlYWRlci5pbnQzMigpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBsZXQgdSA9IG9wdGlvbnMucmVhZFVua25vd25GaWVsZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgPT09IFwidGhyb3dcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBnbG9iYWxUaGlzLkVycm9yKGBVbmtub3duIGZpZWxkICR7ZmllbGROb30gKHdpcmUgdHlwZSAke3dpcmVUeXBlfSkgZm9yICR7dGhpcy50eXBlTmFtZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGQgPSByZWFkZXIuc2tpcCh3aXJlVHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICh1ID09PSB0cnVlID8gcnVudGltZV8yLlVua25vd25GaWVsZEhhbmRsZXIub25SZWFkIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgZmllbGRObywgd2lyZVR5cGUsIGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVdyaXRlKG1lc3NhZ2UsIHdyaXRlciwgb3B0aW9ucykge1xuICAgICAgICAvKiBpbnQ2NCBzZWNvbmRzID0gMTsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2Uuc2Vjb25kcyAhPT0gXCIwXCIpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDEsIHJ1bnRpbWVfMS5XaXJlVHlwZS5WYXJpbnQpLmludDY0KG1lc3NhZ2Uuc2Vjb25kcyk7XG4gICAgICAgIC8qIGludDMyIG5hbm9zID0gMjsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2UubmFub3MgIT09IDApXG4gICAgICAgICAgICB3cml0ZXIudGFnKDIsIHJ1bnRpbWVfMS5XaXJlVHlwZS5WYXJpbnQpLmludDMyKG1lc3NhZ2UubmFub3MpO1xuICAgICAgICBsZXQgdSA9IG9wdGlvbnMud3JpdGVVbmtub3duRmllbGRzO1xuICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAodSA9PSB0cnVlID8gcnVudGltZV8yLlVua25vd25GaWVsZEhhbmRsZXIub25Xcml0ZSA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIHdyaXRlcik7XG4gICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgfVxufVxuLyoqXG4gKiBAZ2VuZXJhdGVkIE1lc3NhZ2VUeXBlIGZvciBwcm90b2J1ZiBtZXNzYWdlIGdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBcbiAqL1xuZXhwb3J0cy5UaW1lc3RhbXAgPSBuZXcgVGltZXN0YW1wJFR5cGUoKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRpbWVzdGFtcC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5CeXRlc1ZhbHVlID0gZXhwb3J0cy5TdHJpbmdWYWx1ZSA9IGV4cG9ydHMuQm9vbFZhbHVlID0gZXhwb3J0cy5VSW50MzJWYWx1ZSA9IGV4cG9ydHMuSW50MzJWYWx1ZSA9IGV4cG9ydHMuVUludDY0VmFsdWUgPSBleHBvcnRzLkludDY0VmFsdWUgPSBleHBvcnRzLkZsb2F0VmFsdWUgPSBleHBvcnRzLkRvdWJsZVZhbHVlID0gdm9pZCAwO1xuLy8gQGdlbmVyYXRlZCBieSBwcm90b2J1Zi10cyAyLjkuMSB3aXRoIHBhcmFtZXRlciBsb25nX3R5cGVfc3RyaW5nLGNsaWVudF9ub25lLGdlbmVyYXRlX2RlcGVuZGVuY2llc1xuLy8gQGdlbmVyYXRlZCBmcm9tIHByb3RvYnVmIGZpbGUgXCJnb29nbGUvcHJvdG9idWYvd3JhcHBlcnMucHJvdG9cIiAocGFja2FnZSBcImdvb2dsZS5wcm90b2J1ZlwiLCBzeW50YXggcHJvdG8zKVxuLy8gdHNsaW50OmRpc2FibGVcbi8vXG4vLyBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXRcbi8vIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9cbi8vXG4vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbi8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmVcbi8vIG1ldDpcbi8vXG4vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZVxuLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lclxuLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZVxuLy8gZGlzdHJpYnV0aW9uLlxuLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0c1xuLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb21cbi8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG4vL1xuLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SU1xuLy8gXCJBUyBJU1wiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVFxuLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SXG4vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVFxuLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsXG4vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UXG4vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSxcbi8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWVxuLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFXG4vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuLy9cbi8vXG4vLyBXcmFwcGVycyBmb3IgcHJpbWl0aXZlIChub24tbWVzc2FnZSkgdHlwZXMuIFRoZXNlIHR5cGVzIGFyZSB1c2VmdWxcbi8vIGZvciBlbWJlZGRpbmcgcHJpbWl0aXZlcyBpbiB0aGUgYGdvb2dsZS5wcm90b2J1Zi5BbnlgIHR5cGUgYW5kIGZvciBwbGFjZXNcbi8vIHdoZXJlIHdlIG5lZWQgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGUgYWJzZW5jZSBvZiBhIHByaW1pdGl2ZVxuLy8gdHlwZWQgZmllbGQgYW5kIGl0cyBkZWZhdWx0IHZhbHVlLlxuLy9cbmNvbnN0IHJ1bnRpbWVfMSA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbmNvbnN0IHJ1bnRpbWVfMiA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbmNvbnN0IHJ1bnRpbWVfMyA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbmNvbnN0IHJ1bnRpbWVfNCA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbmNvbnN0IHJ1bnRpbWVfNSA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbmNvbnN0IHJ1bnRpbWVfNiA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbmNvbnN0IHJ1bnRpbWVfNyA9IHJlcXVpcmUoXCJAcHJvdG9idWYtdHMvcnVudGltZVwiKTtcbi8vIEBnZW5lcmF0ZWQgbWVzc2FnZSB0eXBlIHdpdGggcmVmbGVjdGlvbiBpbmZvcm1hdGlvbiwgbWF5IHByb3ZpZGUgc3BlZWQgb3B0aW1pemVkIG1ldGhvZHNcbmNsYXNzIERvdWJsZVZhbHVlJFR5cGUgZXh0ZW5kcyBydW50aW1lXzcuTWVzc2FnZVR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcImdvb2dsZS5wcm90b2J1Zi5Eb3VibGVWYWx1ZVwiLCBbXG4gICAgICAgICAgICB7IG5vOiAxLCBuYW1lOiBcInZhbHVlXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDEgLypTY2FsYXJUeXBlLkRPVUJMRSovIH1cbiAgICAgICAgXSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEVuY29kZSBgRG91YmxlVmFsdWVgIHRvIEpTT04gbnVtYmVyLlxuICAgICAqL1xuICAgIGludGVybmFsSnNvbldyaXRlKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmSnNvbldyaXRlci5zY2FsYXIoMiwgbWVzc2FnZS52YWx1ZSwgXCJ2YWx1ZVwiLCBmYWxzZSwgdHJ1ZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlY29kZSBgRG91YmxlVmFsdWVgIGZyb20gSlNPTiBudW1iZXIuXG4gICAgICovXG4gICAgaW50ZXJuYWxKc29uUmVhZChqc29uLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgaWYgKCF0YXJnZXQpXG4gICAgICAgICAgICB0YXJnZXQgPSB0aGlzLmNyZWF0ZSgpO1xuICAgICAgICB0YXJnZXQudmFsdWUgPSB0aGlzLnJlZkpzb25SZWFkZXIuc2NhbGFyKGpzb24sIDEsIHVuZGVmaW5lZCwgXCJ2YWx1ZVwiKTtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG4gICAgY3JlYXRlKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7IHZhbHVlOiAwIH07XG4gICAgICAgIGdsb2JhbFRoaXMuT2JqZWN0LmRlZmluZVByb3BlcnR5KG1lc3NhZ2UsIHJ1bnRpbWVfNi5NRVNTQUdFX1RZUEUsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0aGlzIH0pO1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICgwLCBydW50aW1lXzUucmVmbGVjdGlvbk1lcmdlUGFydGlhbCkodGhpcywgbWVzc2FnZSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlSZWFkKHJlYWRlciwgbGVuZ3RoLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSB0YXJnZXQgIT09IG51bGwgJiYgdGFyZ2V0ICE9PSB2b2lkIDAgPyB0YXJnZXQgOiB0aGlzLmNyZWF0ZSgpLCBlbmQgPSByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgbGV0IFtmaWVsZE5vLCB3aXJlVHlwZV0gPSByZWFkZXIudGFnKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkTm8pIHtcbiAgICAgICAgICAgICAgICBjYXNlIC8qIGRvdWJsZSB2YWx1ZSAqLyAxOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnZhbHVlID0gcmVhZGVyLmRvdWJsZSgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBsZXQgdSA9IG9wdGlvbnMucmVhZFVua25vd25GaWVsZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgPT09IFwidGhyb3dcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBnbG9iYWxUaGlzLkVycm9yKGBVbmtub3duIGZpZWxkICR7ZmllbGROb30gKHdpcmUgdHlwZSAke3dpcmVUeXBlfSkgZm9yICR7dGhpcy50eXBlTmFtZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGQgPSByZWFkZXIuc2tpcCh3aXJlVHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICh1ID09PSB0cnVlID8gcnVudGltZV80LlVua25vd25GaWVsZEhhbmRsZXIub25SZWFkIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgZmllbGRObywgd2lyZVR5cGUsIGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVdyaXRlKG1lc3NhZ2UsIHdyaXRlciwgb3B0aW9ucykge1xuICAgICAgICAvKiBkb3VibGUgdmFsdWUgPSAxOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS52YWx1ZSAhPT0gMClcbiAgICAgICAgICAgIHdyaXRlci50YWcoMSwgcnVudGltZV8zLldpcmVUeXBlLkJpdDY0KS5kb3VibGUobWVzc2FnZS52YWx1ZSk7XG4gICAgICAgIGxldCB1ID0gb3B0aW9ucy53cml0ZVVua25vd25GaWVsZHM7XG4gICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICh1ID09IHRydWUgPyBydW50aW1lXzQuVW5rbm93bkZpZWxkSGFuZGxlci5vbldyaXRlIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgd3JpdGVyKTtcbiAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICB9XG59XG4vKipcbiAqIEBnZW5lcmF0ZWQgTWVzc2FnZVR5cGUgZm9yIHByb3RvYnVmIG1lc3NhZ2UgZ29vZ2xlLnByb3RvYnVmLkRvdWJsZVZhbHVlXG4gKi9cbmV4cG9ydHMuRG91YmxlVmFsdWUgPSBuZXcgRG91YmxlVmFsdWUkVHlwZSgpO1xuLy8gQGdlbmVyYXRlZCBtZXNzYWdlIHR5cGUgd2l0aCByZWZsZWN0aW9uIGluZm9ybWF0aW9uLCBtYXkgcHJvdmlkZSBzcGVlZCBvcHRpbWl6ZWQgbWV0aG9kc1xuY2xhc3MgRmxvYXRWYWx1ZSRUeXBlIGV4dGVuZHMgcnVudGltZV83Lk1lc3NhZ2VUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoXCJnb29nbGUucHJvdG9idWYuRmxvYXRWYWx1ZVwiLCBbXG4gICAgICAgICAgICB7IG5vOiAxLCBuYW1lOiBcInZhbHVlXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDIgLypTY2FsYXJUeXBlLkZMT0FUKi8gfVxuICAgICAgICBdKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRW5jb2RlIGBGbG9hdFZhbHVlYCB0byBKU09OIG51bWJlci5cbiAgICAgKi9cbiAgICBpbnRlcm5hbEpzb25Xcml0ZShtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZkpzb25Xcml0ZXIuc2NhbGFyKDEsIG1lc3NhZ2UudmFsdWUsIFwidmFsdWVcIiwgZmFsc2UsIHRydWUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWNvZGUgYEZsb2F0VmFsdWVgIGZyb20gSlNPTiBudW1iZXIuXG4gICAgICovXG4gICAgaW50ZXJuYWxKc29uUmVhZChqc29uLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgaWYgKCF0YXJnZXQpXG4gICAgICAgICAgICB0YXJnZXQgPSB0aGlzLmNyZWF0ZSgpO1xuICAgICAgICB0YXJnZXQudmFsdWUgPSB0aGlzLnJlZkpzb25SZWFkZXIuc2NhbGFyKGpzb24sIDEsIHVuZGVmaW5lZCwgXCJ2YWx1ZVwiKTtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG4gICAgY3JlYXRlKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7IHZhbHVlOiAwIH07XG4gICAgICAgIGdsb2JhbFRoaXMuT2JqZWN0LmRlZmluZVByb3BlcnR5KG1lc3NhZ2UsIHJ1bnRpbWVfNi5NRVNTQUdFX1RZUEUsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0aGlzIH0pO1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICgwLCBydW50aW1lXzUucmVmbGVjdGlvbk1lcmdlUGFydGlhbCkodGhpcywgbWVzc2FnZSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlSZWFkKHJlYWRlciwgbGVuZ3RoLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSB0YXJnZXQgIT09IG51bGwgJiYgdGFyZ2V0ICE9PSB2b2lkIDAgPyB0YXJnZXQgOiB0aGlzLmNyZWF0ZSgpLCBlbmQgPSByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgbGV0IFtmaWVsZE5vLCB3aXJlVHlwZV0gPSByZWFkZXIudGFnKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkTm8pIHtcbiAgICAgICAgICAgICAgICBjYXNlIC8qIGZsb2F0IHZhbHVlICovIDE6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudmFsdWUgPSByZWFkZXIuZmxvYXQoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBvcHRpb25zLnJlYWRVbmtub3duRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ID09PSBcInRocm93XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZ2xvYmFsVGhpcy5FcnJvcihgVW5rbm93biBmaWVsZCAke2ZpZWxkTm99ICh3aXJlIHR5cGUgJHt3aXJlVHlwZX0pIGZvciAke3RoaXMudHlwZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkID0gcmVhZGVyLnNraXAod2lyZVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAodSA9PT0gdHJ1ZSA/IHJ1bnRpbWVfNC5Vbmtub3duRmllbGRIYW5kbGVyLm9uUmVhZCA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIGZpZWxkTm8sIHdpcmVUeXBlLCBkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLCB3cml0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgLyogZmxvYXQgdmFsdWUgPSAxOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS52YWx1ZSAhPT0gMClcbiAgICAgICAgICAgIHdyaXRlci50YWcoMSwgcnVudGltZV8zLldpcmVUeXBlLkJpdDMyKS5mbG9hdChtZXNzYWdlLnZhbHVlKTtcbiAgICAgICAgbGV0IHUgPSBvcHRpb25zLndyaXRlVW5rbm93bkZpZWxkcztcbiAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgKHUgPT0gdHJ1ZSA/IHJ1bnRpbWVfNC5Vbmtub3duRmllbGRIYW5kbGVyLm9uV3JpdGUgOiB1KSh0aGlzLnR5cGVOYW1lLCBtZXNzYWdlLCB3cml0ZXIpO1xuICAgICAgICByZXR1cm4gd3JpdGVyO1xuICAgIH1cbn1cbi8qKlxuICogQGdlbmVyYXRlZCBNZXNzYWdlVHlwZSBmb3IgcHJvdG9idWYgbWVzc2FnZSBnb29nbGUucHJvdG9idWYuRmxvYXRWYWx1ZVxuICovXG5leHBvcnRzLkZsb2F0VmFsdWUgPSBuZXcgRmxvYXRWYWx1ZSRUeXBlKCk7XG4vLyBAZ2VuZXJhdGVkIG1lc3NhZ2UgdHlwZSB3aXRoIHJlZmxlY3Rpb24gaW5mb3JtYXRpb24sIG1heSBwcm92aWRlIHNwZWVkIG9wdGltaXplZCBtZXRob2RzXG5jbGFzcyBJbnQ2NFZhbHVlJFR5cGUgZXh0ZW5kcyBydW50aW1lXzcuTWVzc2FnZVR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcImdvb2dsZS5wcm90b2J1Zi5JbnQ2NFZhbHVlXCIsIFtcbiAgICAgICAgICAgIHsgbm86IDEsIG5hbWU6IFwidmFsdWVcIiwga2luZDogXCJzY2FsYXJcIiwgVDogMyAvKlNjYWxhclR5cGUuSU5UNjQqLyB9XG4gICAgICAgIF0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFbmNvZGUgYEludDY0VmFsdWVgIHRvIEpTT04gc3RyaW5nLlxuICAgICAqL1xuICAgIGludGVybmFsSnNvbldyaXRlKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmSnNvbldyaXRlci5zY2FsYXIocnVudGltZV8xLlNjYWxhclR5cGUuSU5UNjQsIG1lc3NhZ2UudmFsdWUsIFwidmFsdWVcIiwgZmFsc2UsIHRydWUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWNvZGUgYEludDY0VmFsdWVgIGZyb20gSlNPTiBzdHJpbmcuXG4gICAgICovXG4gICAgaW50ZXJuYWxKc29uUmVhZChqc29uLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgaWYgKCF0YXJnZXQpXG4gICAgICAgICAgICB0YXJnZXQgPSB0aGlzLmNyZWF0ZSgpO1xuICAgICAgICB0YXJnZXQudmFsdWUgPSB0aGlzLnJlZkpzb25SZWFkZXIuc2NhbGFyKGpzb24sIHJ1bnRpbWVfMS5TY2FsYXJUeXBlLklOVDY0LCBydW50aW1lXzIuTG9uZ1R5cGUuU1RSSU5HLCBcInZhbHVlXCIpO1xuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cbiAgICBjcmVhdGUodmFsdWUpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IHsgdmFsdWU6IFwiMFwiIH07XG4gICAgICAgIGdsb2JhbFRoaXMuT2JqZWN0LmRlZmluZVByb3BlcnR5KG1lc3NhZ2UsIHJ1bnRpbWVfNi5NRVNTQUdFX1RZUEUsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0aGlzIH0pO1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICgwLCBydW50aW1lXzUucmVmbGVjdGlvbk1lcmdlUGFydGlhbCkodGhpcywgbWVzc2FnZSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlSZWFkKHJlYWRlciwgbGVuZ3RoLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSB0YXJnZXQgIT09IG51bGwgJiYgdGFyZ2V0ICE9PSB2b2lkIDAgPyB0YXJnZXQgOiB0aGlzLmNyZWF0ZSgpLCBlbmQgPSByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgbGV0IFtmaWVsZE5vLCB3aXJlVHlwZV0gPSByZWFkZXIudGFnKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkTm8pIHtcbiAgICAgICAgICAgICAgICBjYXNlIC8qIGludDY0IHZhbHVlICovIDE6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudmFsdWUgPSByZWFkZXIuaW50NjQoKS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBsZXQgdSA9IG9wdGlvbnMucmVhZFVua25vd25GaWVsZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgPT09IFwidGhyb3dcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBnbG9iYWxUaGlzLkVycm9yKGBVbmtub3duIGZpZWxkICR7ZmllbGROb30gKHdpcmUgdHlwZSAke3dpcmVUeXBlfSkgZm9yICR7dGhpcy50eXBlTmFtZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGQgPSByZWFkZXIuc2tpcCh3aXJlVHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICh1ID09PSB0cnVlID8gcnVudGltZV80LlVua25vd25GaWVsZEhhbmRsZXIub25SZWFkIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgZmllbGRObywgd2lyZVR5cGUsIGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVdyaXRlKG1lc3NhZ2UsIHdyaXRlciwgb3B0aW9ucykge1xuICAgICAgICAvKiBpbnQ2NCB2YWx1ZSA9IDE7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLnZhbHVlICE9PSBcIjBcIilcbiAgICAgICAgICAgIHdyaXRlci50YWcoMSwgcnVudGltZV8zLldpcmVUeXBlLlZhcmludCkuaW50NjQobWVzc2FnZS52YWx1ZSk7XG4gICAgICAgIGxldCB1ID0gb3B0aW9ucy53cml0ZVVua25vd25GaWVsZHM7XG4gICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICh1ID09IHRydWUgPyBydW50aW1lXzQuVW5rbm93bkZpZWxkSGFuZGxlci5vbldyaXRlIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgd3JpdGVyKTtcbiAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICB9XG59XG4vKipcbiAqIEBnZW5lcmF0ZWQgTWVzc2FnZVR5cGUgZm9yIHByb3RvYnVmIG1lc3NhZ2UgZ29vZ2xlLnByb3RvYnVmLkludDY0VmFsdWVcbiAqL1xuZXhwb3J0cy5JbnQ2NFZhbHVlID0gbmV3IEludDY0VmFsdWUkVHlwZSgpO1xuLy8gQGdlbmVyYXRlZCBtZXNzYWdlIHR5cGUgd2l0aCByZWZsZWN0aW9uIGluZm9ybWF0aW9uLCBtYXkgcHJvdmlkZSBzcGVlZCBvcHRpbWl6ZWQgbWV0aG9kc1xuY2xhc3MgVUludDY0VmFsdWUkVHlwZSBleHRlbmRzIHJ1bnRpbWVfNy5NZXNzYWdlVHlwZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiZ29vZ2xlLnByb3RvYnVmLlVJbnQ2NFZhbHVlXCIsIFtcbiAgICAgICAgICAgIHsgbm86IDEsIG5hbWU6IFwidmFsdWVcIiwga2luZDogXCJzY2FsYXJcIiwgVDogNCAvKlNjYWxhclR5cGUuVUlOVDY0Ki8gfVxuICAgICAgICBdKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRW5jb2RlIGBVSW50NjRWYWx1ZWAgdG8gSlNPTiBzdHJpbmcuXG4gICAgICovXG4gICAgaW50ZXJuYWxKc29uV3JpdGUobWVzc2FnZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWZKc29uV3JpdGVyLnNjYWxhcihydW50aW1lXzEuU2NhbGFyVHlwZS5VSU5UNjQsIG1lc3NhZ2UudmFsdWUsIFwidmFsdWVcIiwgZmFsc2UsIHRydWUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWNvZGUgYFVJbnQ2NFZhbHVlYCBmcm9tIEpTT04gc3RyaW5nLlxuICAgICAqL1xuICAgIGludGVybmFsSnNvblJlYWQoanNvbiwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGlmICghdGFyZ2V0KVxuICAgICAgICAgICAgdGFyZ2V0ID0gdGhpcy5jcmVhdGUoKTtcbiAgICAgICAgdGFyZ2V0LnZhbHVlID0gdGhpcy5yZWZKc29uUmVhZGVyLnNjYWxhcihqc29uLCBydW50aW1lXzEuU2NhbGFyVHlwZS5VSU5UNjQsIHJ1bnRpbWVfMi5Mb25nVHlwZS5TVFJJTkcsIFwidmFsdWVcIik7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuICAgIGNyZWF0ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0geyB2YWx1ZTogXCIwXCIgfTtcbiAgICAgICAgZ2xvYmFsVGhpcy5PYmplY3QuZGVmaW5lUHJvcGVydHkobWVzc2FnZSwgcnVudGltZV82Lk1FU1NBR0VfVFlQRSwgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRoaXMgfSk7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgKDAsIHJ1bnRpbWVfNS5yZWZsZWN0aW9uTWVyZ2VQYXJ0aWFsKSh0aGlzLCBtZXNzYWdlLCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVJlYWQocmVhZGVyLCBsZW5ndGgsIG9wdGlvbnMsIHRhcmdldCkge1xuICAgICAgICBsZXQgbWVzc2FnZSA9IHRhcmdldCAhPT0gbnVsbCAmJiB0YXJnZXQgIT09IHZvaWQgMCA/IHRhcmdldCA6IHRoaXMuY3JlYXRlKCksIGVuZCA9IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICBsZXQgW2ZpZWxkTm8sIHdpcmVUeXBlXSA9IHJlYWRlci50YWcoKTtcbiAgICAgICAgICAgIHN3aXRjaCAoZmllbGRObykge1xuICAgICAgICAgICAgICAgIGNhc2UgLyogdWludDY0IHZhbHVlICovIDE6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudmFsdWUgPSByZWFkZXIudWludDY0KCkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBvcHRpb25zLnJlYWRVbmtub3duRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ID09PSBcInRocm93XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZ2xvYmFsVGhpcy5FcnJvcihgVW5rbm93biBmaWVsZCAke2ZpZWxkTm99ICh3aXJlIHR5cGUgJHt3aXJlVHlwZX0pIGZvciAke3RoaXMudHlwZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkID0gcmVhZGVyLnNraXAod2lyZVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAodSA9PT0gdHJ1ZSA/IHJ1bnRpbWVfNC5Vbmtub3duRmllbGRIYW5kbGVyLm9uUmVhZCA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIGZpZWxkTm8sIHdpcmVUeXBlLCBkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLCB3cml0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgLyogdWludDY0IHZhbHVlID0gMTsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2UudmFsdWUgIT09IFwiMFwiKVxuICAgICAgICAgICAgd3JpdGVyLnRhZygxLCBydW50aW1lXzMuV2lyZVR5cGUuVmFyaW50KS51aW50NjQobWVzc2FnZS52YWx1ZSk7XG4gICAgICAgIGxldCB1ID0gb3B0aW9ucy53cml0ZVVua25vd25GaWVsZHM7XG4gICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICh1ID09IHRydWUgPyBydW50aW1lXzQuVW5rbm93bkZpZWxkSGFuZGxlci5vbldyaXRlIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgd3JpdGVyKTtcbiAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICB9XG59XG4vKipcbiAqIEBnZW5lcmF0ZWQgTWVzc2FnZVR5cGUgZm9yIHByb3RvYnVmIG1lc3NhZ2UgZ29vZ2xlLnByb3RvYnVmLlVJbnQ2NFZhbHVlXG4gKi9cbmV4cG9ydHMuVUludDY0VmFsdWUgPSBuZXcgVUludDY0VmFsdWUkVHlwZSgpO1xuLy8gQGdlbmVyYXRlZCBtZXNzYWdlIHR5cGUgd2l0aCByZWZsZWN0aW9uIGluZm9ybWF0aW9uLCBtYXkgcHJvdmlkZSBzcGVlZCBvcHRpbWl6ZWQgbWV0aG9kc1xuY2xhc3MgSW50MzJWYWx1ZSRUeXBlIGV4dGVuZHMgcnVudGltZV83Lk1lc3NhZ2VUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoXCJnb29nbGUucHJvdG9idWYuSW50MzJWYWx1ZVwiLCBbXG4gICAgICAgICAgICB7IG5vOiAxLCBuYW1lOiBcInZhbHVlXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDUgLypTY2FsYXJUeXBlLklOVDMyKi8gfVxuICAgICAgICBdKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRW5jb2RlIGBJbnQzMlZhbHVlYCB0byBKU09OIHN0cmluZy5cbiAgICAgKi9cbiAgICBpbnRlcm5hbEpzb25Xcml0ZShtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZkpzb25Xcml0ZXIuc2NhbGFyKDUsIG1lc3NhZ2UudmFsdWUsIFwidmFsdWVcIiwgZmFsc2UsIHRydWUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWNvZGUgYEludDMyVmFsdWVgIGZyb20gSlNPTiBzdHJpbmcuXG4gICAgICovXG4gICAgaW50ZXJuYWxKc29uUmVhZChqc29uLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgaWYgKCF0YXJnZXQpXG4gICAgICAgICAgICB0YXJnZXQgPSB0aGlzLmNyZWF0ZSgpO1xuICAgICAgICB0YXJnZXQudmFsdWUgPSB0aGlzLnJlZkpzb25SZWFkZXIuc2NhbGFyKGpzb24sIDUsIHVuZGVmaW5lZCwgXCJ2YWx1ZVwiKTtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG4gICAgY3JlYXRlKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7IHZhbHVlOiAwIH07XG4gICAgICAgIGdsb2JhbFRoaXMuT2JqZWN0LmRlZmluZVByb3BlcnR5KG1lc3NhZ2UsIHJ1bnRpbWVfNi5NRVNTQUdFX1RZUEUsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0aGlzIH0pO1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICgwLCBydW50aW1lXzUucmVmbGVjdGlvbk1lcmdlUGFydGlhbCkodGhpcywgbWVzc2FnZSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlSZWFkKHJlYWRlciwgbGVuZ3RoLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSB0YXJnZXQgIT09IG51bGwgJiYgdGFyZ2V0ICE9PSB2b2lkIDAgPyB0YXJnZXQgOiB0aGlzLmNyZWF0ZSgpLCBlbmQgPSByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgbGV0IFtmaWVsZE5vLCB3aXJlVHlwZV0gPSByZWFkZXIudGFnKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkTm8pIHtcbiAgICAgICAgICAgICAgICBjYXNlIC8qIGludDMyIHZhbHVlICovIDE6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudmFsdWUgPSByZWFkZXIuaW50MzIoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBvcHRpb25zLnJlYWRVbmtub3duRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ID09PSBcInRocm93XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZ2xvYmFsVGhpcy5FcnJvcihgVW5rbm93biBmaWVsZCAke2ZpZWxkTm99ICh3aXJlIHR5cGUgJHt3aXJlVHlwZX0pIGZvciAke3RoaXMudHlwZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkID0gcmVhZGVyLnNraXAod2lyZVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAodSA9PT0gdHJ1ZSA/IHJ1bnRpbWVfNC5Vbmtub3duRmllbGRIYW5kbGVyLm9uUmVhZCA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIGZpZWxkTm8sIHdpcmVUeXBlLCBkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLCB3cml0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgLyogaW50MzIgdmFsdWUgPSAxOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS52YWx1ZSAhPT0gMClcbiAgICAgICAgICAgIHdyaXRlci50YWcoMSwgcnVudGltZV8zLldpcmVUeXBlLlZhcmludCkuaW50MzIobWVzc2FnZS52YWx1ZSk7XG4gICAgICAgIGxldCB1ID0gb3B0aW9ucy53cml0ZVVua25vd25GaWVsZHM7XG4gICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICh1ID09IHRydWUgPyBydW50aW1lXzQuVW5rbm93bkZpZWxkSGFuZGxlci5vbldyaXRlIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgd3JpdGVyKTtcbiAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICB9XG59XG4vKipcbiAqIEBnZW5lcmF0ZWQgTWVzc2FnZVR5cGUgZm9yIHByb3RvYnVmIG1lc3NhZ2UgZ29vZ2xlLnByb3RvYnVmLkludDMyVmFsdWVcbiAqL1xuZXhwb3J0cy5JbnQzMlZhbHVlID0gbmV3IEludDMyVmFsdWUkVHlwZSgpO1xuLy8gQGdlbmVyYXRlZCBtZXNzYWdlIHR5cGUgd2l0aCByZWZsZWN0aW9uIGluZm9ybWF0aW9uLCBtYXkgcHJvdmlkZSBzcGVlZCBvcHRpbWl6ZWQgbWV0aG9kc1xuY2xhc3MgVUludDMyVmFsdWUkVHlwZSBleHRlbmRzIHJ1bnRpbWVfNy5NZXNzYWdlVHlwZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiZ29vZ2xlLnByb3RvYnVmLlVJbnQzMlZhbHVlXCIsIFtcbiAgICAgICAgICAgIHsgbm86IDEsIG5hbWU6IFwidmFsdWVcIiwga2luZDogXCJzY2FsYXJcIiwgVDogMTMgLypTY2FsYXJUeXBlLlVJTlQzMiovIH1cbiAgICAgICAgXSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEVuY29kZSBgVUludDMyVmFsdWVgIHRvIEpTT04gc3RyaW5nLlxuICAgICAqL1xuICAgIGludGVybmFsSnNvbldyaXRlKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmSnNvbldyaXRlci5zY2FsYXIoMTMsIG1lc3NhZ2UudmFsdWUsIFwidmFsdWVcIiwgZmFsc2UsIHRydWUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWNvZGUgYFVJbnQzMlZhbHVlYCBmcm9tIEpTT04gc3RyaW5nLlxuICAgICAqL1xuICAgIGludGVybmFsSnNvblJlYWQoanNvbiwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGlmICghdGFyZ2V0KVxuICAgICAgICAgICAgdGFyZ2V0ID0gdGhpcy5jcmVhdGUoKTtcbiAgICAgICAgdGFyZ2V0LnZhbHVlID0gdGhpcy5yZWZKc29uUmVhZGVyLnNjYWxhcihqc29uLCAxMywgdW5kZWZpbmVkLCBcInZhbHVlXCIpO1xuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cbiAgICBjcmVhdGUodmFsdWUpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IHsgdmFsdWU6IDAgfTtcbiAgICAgICAgZ2xvYmFsVGhpcy5PYmplY3QuZGVmaW5lUHJvcGVydHkobWVzc2FnZSwgcnVudGltZV82Lk1FU1NBR0VfVFlQRSwgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRoaXMgfSk7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgKDAsIHJ1bnRpbWVfNS5yZWZsZWN0aW9uTWVyZ2VQYXJ0aWFsKSh0aGlzLCBtZXNzYWdlLCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVJlYWQocmVhZGVyLCBsZW5ndGgsIG9wdGlvbnMsIHRhcmdldCkge1xuICAgICAgICBsZXQgbWVzc2FnZSA9IHRhcmdldCAhPT0gbnVsbCAmJiB0YXJnZXQgIT09IHZvaWQgMCA/IHRhcmdldCA6IHRoaXMuY3JlYXRlKCksIGVuZCA9IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICBsZXQgW2ZpZWxkTm8sIHdpcmVUeXBlXSA9IHJlYWRlci50YWcoKTtcbiAgICAgICAgICAgIHN3aXRjaCAoZmllbGRObykge1xuICAgICAgICAgICAgICAgIGNhc2UgLyogdWludDMyIHZhbHVlICovIDE6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudmFsdWUgPSByZWFkZXIudWludDMyKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGxldCB1ID0gb3B0aW9ucy5yZWFkVW5rbm93bkZpZWxkO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSA9PT0gXCJ0aHJvd1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGdsb2JhbFRoaXMuRXJyb3IoYFVua25vd24gZmllbGQgJHtmaWVsZE5vfSAod2lyZSB0eXBlICR7d2lyZVR5cGV9KSBmb3IgJHt0aGlzLnR5cGVOYW1lfWApO1xuICAgICAgICAgICAgICAgICAgICBsZXQgZCA9IHJlYWRlci5za2lwKHdpcmVUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgKHUgPT09IHRydWUgPyBydW50aW1lXzQuVW5rbm93bkZpZWxkSGFuZGxlci5vblJlYWQgOiB1KSh0aGlzLnR5cGVOYW1lLCBtZXNzYWdlLCBmaWVsZE5vLCB3aXJlVHlwZSwgZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5V3JpdGUobWVzc2FnZSwgd3JpdGVyLCBvcHRpb25zKSB7XG4gICAgICAgIC8qIHVpbnQzMiB2YWx1ZSA9IDE7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLnZhbHVlICE9PSAwKVxuICAgICAgICAgICAgd3JpdGVyLnRhZygxLCBydW50aW1lXzMuV2lyZVR5cGUuVmFyaW50KS51aW50MzIobWVzc2FnZS52YWx1ZSk7XG4gICAgICAgIGxldCB1ID0gb3B0aW9ucy53cml0ZVVua25vd25GaWVsZHM7XG4gICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICh1ID09IHRydWUgPyBydW50aW1lXzQuVW5rbm93bkZpZWxkSGFuZGxlci5vbldyaXRlIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgd3JpdGVyKTtcbiAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICB9XG59XG4vKipcbiAqIEBnZW5lcmF0ZWQgTWVzc2FnZVR5cGUgZm9yIHByb3RvYnVmIG1lc3NhZ2UgZ29vZ2xlLnByb3RvYnVmLlVJbnQzMlZhbHVlXG4gKi9cbmV4cG9ydHMuVUludDMyVmFsdWUgPSBuZXcgVUludDMyVmFsdWUkVHlwZSgpO1xuLy8gQGdlbmVyYXRlZCBtZXNzYWdlIHR5cGUgd2l0aCByZWZsZWN0aW9uIGluZm9ybWF0aW9uLCBtYXkgcHJvdmlkZSBzcGVlZCBvcHRpbWl6ZWQgbWV0aG9kc1xuY2xhc3MgQm9vbFZhbHVlJFR5cGUgZXh0ZW5kcyBydW50aW1lXzcuTWVzc2FnZVR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcImdvb2dsZS5wcm90b2J1Zi5Cb29sVmFsdWVcIiwgW1xuICAgICAgICAgICAgeyBubzogMSwgbmFtZTogXCJ2YWx1ZVwiLCBraW5kOiBcInNjYWxhclwiLCBUOiA4IC8qU2NhbGFyVHlwZS5CT09MKi8gfVxuICAgICAgICBdKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRW5jb2RlIGBCb29sVmFsdWVgIHRvIEpTT04gYm9vbC5cbiAgICAgKi9cbiAgICBpbnRlcm5hbEpzb25Xcml0ZShtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBtZXNzYWdlLnZhbHVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWNvZGUgYEJvb2xWYWx1ZWAgZnJvbSBKU09OIGJvb2wuXG4gICAgICovXG4gICAgaW50ZXJuYWxKc29uUmVhZChqc29uLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgaWYgKCF0YXJnZXQpXG4gICAgICAgICAgICB0YXJnZXQgPSB0aGlzLmNyZWF0ZSgpO1xuICAgICAgICB0YXJnZXQudmFsdWUgPSB0aGlzLnJlZkpzb25SZWFkZXIuc2NhbGFyKGpzb24sIDgsIHVuZGVmaW5lZCwgXCJ2YWx1ZVwiKTtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG4gICAgY3JlYXRlKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7IHZhbHVlOiBmYWxzZSB9O1xuICAgICAgICBnbG9iYWxUaGlzLk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZXNzYWdlLCBydW50aW1lXzYuTUVTU0FHRV9UWVBFLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdGhpcyB9KTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAoMCwgcnVudGltZV81LnJlZmxlY3Rpb25NZXJnZVBhcnRpYWwpKHRoaXMsIG1lc3NhZ2UsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5UmVhZChyZWFkZXIsIGxlbmd0aCwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGxldCBtZXNzYWdlID0gdGFyZ2V0ICE9PSBudWxsICYmIHRhcmdldCAhPT0gdm9pZCAwID8gdGFyZ2V0IDogdGhpcy5jcmVhdGUoKSwgZW5kID0gcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgIGxldCBbZmllbGRObywgd2lyZVR5cGVdID0gcmVhZGVyLnRhZygpO1xuICAgICAgICAgICAgc3dpdGNoIChmaWVsZE5vKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBib29sIHZhbHVlICovIDE6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudmFsdWUgPSByZWFkZXIuYm9vbCgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBsZXQgdSA9IG9wdGlvbnMucmVhZFVua25vd25GaWVsZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgPT09IFwidGhyb3dcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBnbG9iYWxUaGlzLkVycm9yKGBVbmtub3duIGZpZWxkICR7ZmllbGROb30gKHdpcmUgdHlwZSAke3dpcmVUeXBlfSkgZm9yICR7dGhpcy50eXBlTmFtZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGQgPSByZWFkZXIuc2tpcCh3aXJlVHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICh1ID09PSB0cnVlID8gcnVudGltZV80LlVua25vd25GaWVsZEhhbmRsZXIub25SZWFkIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgZmllbGRObywgd2lyZVR5cGUsIGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVdyaXRlKG1lc3NhZ2UsIHdyaXRlciwgb3B0aW9ucykge1xuICAgICAgICAvKiBib29sIHZhbHVlID0gMTsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2UudmFsdWUgIT09IGZhbHNlKVxuICAgICAgICAgICAgd3JpdGVyLnRhZygxLCBydW50aW1lXzMuV2lyZVR5cGUuVmFyaW50KS5ib29sKG1lc3NhZ2UudmFsdWUpO1xuICAgICAgICBsZXQgdSA9IG9wdGlvbnMud3JpdGVVbmtub3duRmllbGRzO1xuICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAodSA9PSB0cnVlID8gcnVudGltZV80LlVua25vd25GaWVsZEhhbmRsZXIub25Xcml0ZSA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIHdyaXRlcik7XG4gICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgfVxufVxuLyoqXG4gKiBAZ2VuZXJhdGVkIE1lc3NhZ2VUeXBlIGZvciBwcm90b2J1ZiBtZXNzYWdlIGdvb2dsZS5wcm90b2J1Zi5Cb29sVmFsdWVcbiAqL1xuZXhwb3J0cy5Cb29sVmFsdWUgPSBuZXcgQm9vbFZhbHVlJFR5cGUoKTtcbi8vIEBnZW5lcmF0ZWQgbWVzc2FnZSB0eXBlIHdpdGggcmVmbGVjdGlvbiBpbmZvcm1hdGlvbiwgbWF5IHByb3ZpZGUgc3BlZWQgb3B0aW1pemVkIG1ldGhvZHNcbmNsYXNzIFN0cmluZ1ZhbHVlJFR5cGUgZXh0ZW5kcyBydW50aW1lXzcuTWVzc2FnZVR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcImdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZVwiLCBbXG4gICAgICAgICAgICB7IG5vOiAxLCBuYW1lOiBcInZhbHVlXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDkgLypTY2FsYXJUeXBlLlNUUklORyovIH1cbiAgICAgICAgXSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEVuY29kZSBgU3RyaW5nVmFsdWVgIHRvIEpTT04gc3RyaW5nLlxuICAgICAqL1xuICAgIGludGVybmFsSnNvbldyaXRlKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2UudmFsdWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlY29kZSBgU3RyaW5nVmFsdWVgIGZyb20gSlNPTiBzdHJpbmcuXG4gICAgICovXG4gICAgaW50ZXJuYWxKc29uUmVhZChqc29uLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgaWYgKCF0YXJnZXQpXG4gICAgICAgICAgICB0YXJnZXQgPSB0aGlzLmNyZWF0ZSgpO1xuICAgICAgICB0YXJnZXQudmFsdWUgPSB0aGlzLnJlZkpzb25SZWFkZXIuc2NhbGFyKGpzb24sIDksIHVuZGVmaW5lZCwgXCJ2YWx1ZVwiKTtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG4gICAgY3JlYXRlKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7IHZhbHVlOiBcIlwiIH07XG4gICAgICAgIGdsb2JhbFRoaXMuT2JqZWN0LmRlZmluZVByb3BlcnR5KG1lc3NhZ2UsIHJ1bnRpbWVfNi5NRVNTQUdFX1RZUEUsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0aGlzIH0pO1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICgwLCBydW50aW1lXzUucmVmbGVjdGlvbk1lcmdlUGFydGlhbCkodGhpcywgbWVzc2FnZSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlSZWFkKHJlYWRlciwgbGVuZ3RoLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSB0YXJnZXQgIT09IG51bGwgJiYgdGFyZ2V0ICE9PSB2b2lkIDAgPyB0YXJnZXQgOiB0aGlzLmNyZWF0ZSgpLCBlbmQgPSByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgbGV0IFtmaWVsZE5vLCB3aXJlVHlwZV0gPSByZWFkZXIudGFnKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkTm8pIHtcbiAgICAgICAgICAgICAgICBjYXNlIC8qIHN0cmluZyB2YWx1ZSAqLyAxOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnZhbHVlID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBsZXQgdSA9IG9wdGlvbnMucmVhZFVua25vd25GaWVsZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgPT09IFwidGhyb3dcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBnbG9iYWxUaGlzLkVycm9yKGBVbmtub3duIGZpZWxkICR7ZmllbGROb30gKHdpcmUgdHlwZSAke3dpcmVUeXBlfSkgZm9yICR7dGhpcy50eXBlTmFtZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGQgPSByZWFkZXIuc2tpcCh3aXJlVHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICh1ID09PSB0cnVlID8gcnVudGltZV80LlVua25vd25GaWVsZEhhbmRsZXIub25SZWFkIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgZmllbGRObywgd2lyZVR5cGUsIGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVdyaXRlKG1lc3NhZ2UsIHdyaXRlciwgb3B0aW9ucykge1xuICAgICAgICAvKiBzdHJpbmcgdmFsdWUgPSAxOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS52YWx1ZSAhPT0gXCJcIilcbiAgICAgICAgICAgIHdyaXRlci50YWcoMSwgcnVudGltZV8zLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCkuc3RyaW5nKG1lc3NhZ2UudmFsdWUpO1xuICAgICAgICBsZXQgdSA9IG9wdGlvbnMud3JpdGVVbmtub3duRmllbGRzO1xuICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAodSA9PSB0cnVlID8gcnVudGltZV80LlVua25vd25GaWVsZEhhbmRsZXIub25Xcml0ZSA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIHdyaXRlcik7XG4gICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgfVxufVxuLyoqXG4gKiBAZ2VuZXJhdGVkIE1lc3NhZ2VUeXBlIGZvciBwcm90b2J1ZiBtZXNzYWdlIGdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZVxuICovXG5leHBvcnRzLlN0cmluZ1ZhbHVlID0gbmV3IFN0cmluZ1ZhbHVlJFR5cGUoKTtcbi8vIEBnZW5lcmF0ZWQgbWVzc2FnZSB0eXBlIHdpdGggcmVmbGVjdGlvbiBpbmZvcm1hdGlvbiwgbWF5IHByb3ZpZGUgc3BlZWQgb3B0aW1pemVkIG1ldGhvZHNcbmNsYXNzIEJ5dGVzVmFsdWUkVHlwZSBleHRlbmRzIHJ1bnRpbWVfNy5NZXNzYWdlVHlwZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiZ29vZ2xlLnByb3RvYnVmLkJ5dGVzVmFsdWVcIiwgW1xuICAgICAgICAgICAgeyBubzogMSwgbmFtZTogXCJ2YWx1ZVwiLCBraW5kOiBcInNjYWxhclwiLCBUOiAxMiAvKlNjYWxhclR5cGUuQllURVMqLyB9XG4gICAgICAgIF0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFbmNvZGUgYEJ5dGVzVmFsdWVgIHRvIEpTT04gc3RyaW5nLlxuICAgICAqL1xuICAgIGludGVybmFsSnNvbldyaXRlKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmSnNvbldyaXRlci5zY2FsYXIoMTIsIG1lc3NhZ2UudmFsdWUsIFwidmFsdWVcIiwgZmFsc2UsIHRydWUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWNvZGUgYEJ5dGVzVmFsdWVgIGZyb20gSlNPTiBzdHJpbmcuXG4gICAgICovXG4gICAgaW50ZXJuYWxKc29uUmVhZChqc29uLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgaWYgKCF0YXJnZXQpXG4gICAgICAgICAgICB0YXJnZXQgPSB0aGlzLmNyZWF0ZSgpO1xuICAgICAgICB0YXJnZXQudmFsdWUgPSB0aGlzLnJlZkpzb25SZWFkZXIuc2NhbGFyKGpzb24sIDEyLCB1bmRlZmluZWQsIFwidmFsdWVcIik7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuICAgIGNyZWF0ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0geyB2YWx1ZTogbmV3IFVpbnQ4QXJyYXkoMCkgfTtcbiAgICAgICAgZ2xvYmFsVGhpcy5PYmplY3QuZGVmaW5lUHJvcGVydHkobWVzc2FnZSwgcnVudGltZV82Lk1FU1NBR0VfVFlQRSwgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRoaXMgfSk7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgKDAsIHJ1bnRpbWVfNS5yZWZsZWN0aW9uTWVyZ2VQYXJ0aWFsKSh0aGlzLCBtZXNzYWdlLCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVJlYWQocmVhZGVyLCBsZW5ndGgsIG9wdGlvbnMsIHRhcmdldCkge1xuICAgICAgICBsZXQgbWVzc2FnZSA9IHRhcmdldCAhPT0gbnVsbCAmJiB0YXJnZXQgIT09IHZvaWQgMCA/IHRhcmdldCA6IHRoaXMuY3JlYXRlKCksIGVuZCA9IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICBsZXQgW2ZpZWxkTm8sIHdpcmVUeXBlXSA9IHJlYWRlci50YWcoKTtcbiAgICAgICAgICAgIHN3aXRjaCAoZmllbGRObykge1xuICAgICAgICAgICAgICAgIGNhc2UgLyogYnl0ZXMgdmFsdWUgKi8gMTpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS52YWx1ZSA9IHJlYWRlci5ieXRlcygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBsZXQgdSA9IG9wdGlvbnMucmVhZFVua25vd25GaWVsZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgPT09IFwidGhyb3dcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBnbG9iYWxUaGlzLkVycm9yKGBVbmtub3duIGZpZWxkICR7ZmllbGROb30gKHdpcmUgdHlwZSAke3dpcmVUeXBlfSkgZm9yICR7dGhpcy50eXBlTmFtZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGQgPSByZWFkZXIuc2tpcCh3aXJlVHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICh1ID09PSB0cnVlID8gcnVudGltZV80LlVua25vd25GaWVsZEhhbmRsZXIub25SZWFkIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgZmllbGRObywgd2lyZVR5cGUsIGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVdyaXRlKG1lc3NhZ2UsIHdyaXRlciwgb3B0aW9ucykge1xuICAgICAgICAvKiBieXRlcyB2YWx1ZSA9IDE7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLnZhbHVlLmxlbmd0aClcbiAgICAgICAgICAgIHdyaXRlci50YWcoMSwgcnVudGltZV8zLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCkuYnl0ZXMobWVzc2FnZS52YWx1ZSk7XG4gICAgICAgIGxldCB1ID0gb3B0aW9ucy53cml0ZVVua25vd25GaWVsZHM7XG4gICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICh1ID09IHRydWUgPyBydW50aW1lXzQuVW5rbm93bkZpZWxkSGFuZGxlci5vbldyaXRlIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgd3JpdGVyKTtcbiAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICB9XG59XG4vKipcbiAqIEBnZW5lcmF0ZWQgTWVzc2FnZVR5cGUgZm9yIHByb3RvYnVmIG1lc3NhZ2UgZ29vZ2xlLnByb3RvYnVmLkJ5dGVzVmFsdWVcbiAqL1xuZXhwb3J0cy5CeXRlc1ZhbHVlID0gbmV3IEJ5dGVzVmFsdWUkVHlwZSgpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9d3JhcHBlcnMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVhZFNlcnZpY2VPcHRpb24gPSBleHBvcnRzLnJlYWRNZXRob2RPcHRpb24gPSBleHBvcnRzLnJlYWRNZXRob2RPcHRpb25zID0gZXhwb3J0cy5ub3JtYWxpemVNZXRob2RJbmZvID0gdm9pZCAwO1xuY29uc3QgcnVudGltZV8xID0gcmVxdWlyZShcIkBwcm90b2J1Zi10cy9ydW50aW1lXCIpO1xuLyoqXG4gKiBUdXJucyBQYXJ0aWFsTWV0aG9kSW5mbyBpbnRvIE1ldGhvZEluZm8uXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZU1ldGhvZEluZm8obWV0aG9kLCBzZXJ2aWNlKSB7XG4gICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgbGV0IG0gPSBtZXRob2Q7XG4gICAgbS5zZXJ2aWNlID0gc2VydmljZTtcbiAgICBtLmxvY2FsTmFtZSA9IChfYSA9IG0ubG9jYWxOYW1lKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBydW50aW1lXzEubG93ZXJDYW1lbENhc2UobS5uYW1lKTtcbiAgICAvLyBub2luc3BlY3Rpb24gUG9pbnRsZXNzQm9vbGVhbkV4cHJlc3Npb25KU1xuICAgIG0uc2VydmVyU3RyZWFtaW5nID0gISFtLnNlcnZlclN0cmVhbWluZztcbiAgICAvLyBub2luc3BlY3Rpb24gUG9pbnRsZXNzQm9vbGVhbkV4cHJlc3Npb25KU1xuICAgIG0uY2xpZW50U3RyZWFtaW5nID0gISFtLmNsaWVudFN0cmVhbWluZztcbiAgICBtLm9wdGlvbnMgPSAoX2IgPSBtLm9wdGlvbnMpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IHt9O1xuICAgIG0uaWRlbXBvdGVuY3kgPSAoX2MgPSBtLmlkZW1wb3RlbmN5KSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIG07XG59XG5leHBvcnRzLm5vcm1hbGl6ZU1ldGhvZEluZm8gPSBub3JtYWxpemVNZXRob2RJbmZvO1xuLyoqXG4gKiBSZWFkIGN1c3RvbSBtZXRob2Qgb3B0aW9ucyBmcm9tIGEgZ2VuZXJhdGVkIHNlcnZpY2UgY2xpZW50LlxuICpcbiAqIEBkZXByZWNhdGVkIHVzZSByZWFkTWV0aG9kT3B0aW9uKClcbiAqL1xuZnVuY3Rpb24gcmVhZE1ldGhvZE9wdGlvbnMoc2VydmljZSwgbWV0aG9kTmFtZSwgZXh0ZW5zaW9uTmFtZSwgZXh0ZW5zaW9uVHlwZSkge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCBvcHRpb25zID0gKF9hID0gc2VydmljZS5tZXRob2RzLmZpbmQoKG0sIGkpID0+IG0ubG9jYWxOYW1lID09PSBtZXRob2ROYW1lIHx8IGkgPT09IG1ldGhvZE5hbWUpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub3B0aW9ucztcbiAgICByZXR1cm4gb3B0aW9ucyAmJiBvcHRpb25zW2V4dGVuc2lvbk5hbWVdID8gZXh0ZW5zaW9uVHlwZS5mcm9tSnNvbihvcHRpb25zW2V4dGVuc2lvbk5hbWVdKSA6IHVuZGVmaW5lZDtcbn1cbmV4cG9ydHMucmVhZE1ldGhvZE9wdGlvbnMgPSByZWFkTWV0aG9kT3B0aW9ucztcbmZ1bmN0aW9uIHJlYWRNZXRob2RPcHRpb24oc2VydmljZSwgbWV0aG9kTmFtZSwgZXh0ZW5zaW9uTmFtZSwgZXh0ZW5zaW9uVHlwZSkge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCBvcHRpb25zID0gKF9hID0gc2VydmljZS5tZXRob2RzLmZpbmQoKG0sIGkpID0+IG0ubG9jYWxOYW1lID09PSBtZXRob2ROYW1lIHx8IGkgPT09IG1ldGhvZE5hbWUpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub3B0aW9ucztcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3Qgb3B0aW9uVmFsID0gb3B0aW9uc1tleHRlbnNpb25OYW1lXTtcbiAgICBpZiAob3B0aW9uVmFsID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvblZhbDtcbiAgICB9XG4gICAgcmV0dXJuIGV4dGVuc2lvblR5cGUgPyBleHRlbnNpb25UeXBlLmZyb21Kc29uKG9wdGlvblZhbCkgOiBvcHRpb25WYWw7XG59XG5leHBvcnRzLnJlYWRNZXRob2RPcHRpb24gPSByZWFkTWV0aG9kT3B0aW9uO1xuZnVuY3Rpb24gcmVhZFNlcnZpY2VPcHRpb24oc2VydmljZSwgZXh0ZW5zaW9uTmFtZSwgZXh0ZW5zaW9uVHlwZSkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBzZXJ2aWNlLm9wdGlvbnM7XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IG9wdGlvblZhbCA9IG9wdGlvbnNbZXh0ZW5zaW9uTmFtZV07XG4gICAgaWYgKG9wdGlvblZhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBvcHRpb25WYWw7XG4gICAgfVxuICAgIHJldHVybiBleHRlbnNpb25UeXBlID8gZXh0ZW5zaW9uVHlwZS5mcm9tSnNvbihvcHRpb25WYWwpIDogb3B0aW9uVmFsO1xufVxuZXhwb3J0cy5yZWFkU2VydmljZU9wdGlvbiA9IHJlYWRTZXJ2aWNlT3B0aW9uO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU2VydmljZVR5cGUgPSB2b2lkIDA7XG5jb25zdCByZWZsZWN0aW9uX2luZm9fMSA9IHJlcXVpcmUoXCIuL3JlZmxlY3Rpb24taW5mb1wiKTtcbmNsYXNzIFNlcnZpY2VUeXBlIHtcbiAgICBjb25zdHJ1Y3Rvcih0eXBlTmFtZSwgbWV0aG9kcywgb3B0aW9ucykge1xuICAgICAgICB0aGlzLnR5cGVOYW1lID0gdHlwZU5hbWU7XG4gICAgICAgIHRoaXMubWV0aG9kcyA9IG1ldGhvZHMubWFwKGkgPT4gcmVmbGVjdGlvbl9pbmZvXzEubm9ybWFsaXplTWV0aG9kSW5mbyhpLCB0aGlzKSk7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwID8gb3B0aW9ucyA6IHt9O1xuICAgIH1cbn1cbmV4cG9ydHMuU2VydmljZVR5cGUgPSBTZXJ2aWNlVHlwZTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlJwY0Vycm9yID0gdm9pZCAwO1xuLyoqXG4gKiBBbiBlcnJvciB0aGF0IG9jY3VycmVkIHdoaWxlIGNhbGxpbmcgYSBSUEMgbWV0aG9kLlxuICovXG5jbGFzcyBScGNFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlLCBjb2RlID0gJ1VOS05PV04nLCBtZXRhKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLm5hbWUgPSAnUnBjRXJyb3InO1xuICAgICAgICAvLyBzZWUgaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svcmVsZWFzZS1ub3Rlcy90eXBlc2NyaXB0LTItMi5odG1sI2V4YW1wbGVcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIG5ldy50YXJnZXQucHJvdG90eXBlKTtcbiAgICAgICAgdGhpcy5jb2RlID0gY29kZTtcbiAgICAgICAgdGhpcy5tZXRhID0gbWV0YSAhPT0gbnVsbCAmJiBtZXRhICE9PSB2b2lkIDAgPyBtZXRhIDoge307XG4gICAgfVxuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICBjb25zdCBsID0gW3RoaXMubmFtZSArICc6ICcgKyB0aGlzLm1lc3NhZ2VdO1xuICAgICAgICBpZiAodGhpcy5jb2RlKSB7XG4gICAgICAgICAgICBsLnB1c2goJycpO1xuICAgICAgICAgICAgbC5wdXNoKCdDb2RlOiAnICsgdGhpcy5jb2RlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zZXJ2aWNlTmFtZSAmJiB0aGlzLm1ldGhvZE5hbWUpIHtcbiAgICAgICAgICAgIGwucHVzaCgnTWV0aG9kOiAnICsgdGhpcy5zZXJ2aWNlTmFtZSArICcvJyArIHRoaXMubWV0aG9kTmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG0gPSBPYmplY3QuZW50cmllcyh0aGlzLm1ldGEpO1xuICAgICAgICBpZiAobS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGwucHVzaCgnJyk7XG4gICAgICAgICAgICBsLnB1c2goJ01ldGE6Jyk7XG4gICAgICAgICAgICBmb3IgKGxldCBbaywgdl0gb2YgbSkge1xuICAgICAgICAgICAgICAgIGwucHVzaChgICAke2t9OiAke3Z9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGwuam9pbignXFxuJyk7XG4gICAgfVxufVxuZXhwb3J0cy5ScGNFcnJvciA9IFJwY0Vycm9yO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubWVyZ2VScGNPcHRpb25zID0gdm9pZCAwO1xuY29uc3QgcnVudGltZV8xID0gcmVxdWlyZShcIkBwcm90b2J1Zi10cy9ydW50aW1lXCIpO1xuLyoqXG4gKiBNZXJnZXMgY3VzdG9tIFJQQyBvcHRpb25zIHdpdGggZGVmYXVsdHMuIFJldHVybnMgYSBuZXcgaW5zdGFuY2UgYW5kIGtlZXBzXG4gKiB0aGUgXCJkZWZhdWx0c1wiIGFuZCB0aGUgXCJvcHRpb25zXCIgdW5tb2RpZmllZC5cbiAqXG4gKiBNZXJnZXMgYFJwY01ldGFkYXRhYCBcIm1ldGFcIiwgb3ZlcndyaXRpbmcgdmFsdWVzIGZyb20gXCJkZWZhdWx0c1wiIHdpdGhcbiAqIHZhbHVlcyBmcm9tIFwib3B0aW9uc1wiLiBEb2VzIG5vdCBhcHBlbmQgdmFsdWVzIHRvIGV4aXN0aW5nIGVudHJpZXMuXG4gKlxuICogTWVyZ2VzIFwianNvbk9wdGlvbnNcIiwgaW5jbHVkaW5nIFwianNvbk9wdGlvbnMudHlwZVJlZ2lzdHJ5XCIsIGJ5IGNyZWF0aW5nXG4gKiBhIG5ldyBhcnJheSB0aGF0IGNvbnRhaW5zIHR5cGVzIGZyb20gXCJvcHRpb25zLmpzb25PcHRpb25zLnR5cGVSZWdpc3RyeVwiXG4gKiBmaXJzdCwgdGhlbiB0eXBlcyBmcm9tIFwiZGVmYXVsdHMuanNvbk9wdGlvbnMudHlwZVJlZ2lzdHJ5XCIuXG4gKlxuICogTWVyZ2VzIFwiYmluYXJ5T3B0aW9uc1wiLlxuICpcbiAqIE1lcmdlcyBcImludGVyY2VwdG9yc1wiIGJ5IGNyZWF0aW5nIGEgbmV3IGFycmF5IHRoYXQgY29udGFpbnMgaW50ZXJjZXB0b3JzXG4gKiBmcm9tIFwiZGVmYXVsdHNcIiBmaXJzdCwgdGhlbiBpbnRlcmNlcHRvcnMgZnJvbSBcIm9wdGlvbnNcIi5cbiAqXG4gKiBXb3JrcyB3aXRoIG9iamVjdHMgdGhhdCBleHRlbmQgYFJwY09wdGlvbnNgLCBidXQgb25seSBpZiB0aGUgYWRkZWRcbiAqIHByb3BlcnRpZXMgYXJlIG9mIHR5cGUgRGF0ZSwgcHJpbWl0aXZlIGxpa2Ugc3RyaW5nLCBib29sZWFuLCBvciBBcnJheVxuICogb2YgcHJpbWl0aXZlcy4gSWYgeW91IGhhdmUgb3RoZXIgcHJvcGVydHkgdHlwZXMsIHlvdSBoYXZlIHRvIG1lcmdlIHRoZW1cbiAqIHlvdXJzZWxmLlxuICovXG5mdW5jdGlvbiBtZXJnZVJwY09wdGlvbnMoZGVmYXVsdHMsIG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMpXG4gICAgICAgIHJldHVybiBkZWZhdWx0cztcbiAgICBsZXQgbyA9IHt9O1xuICAgIGNvcHkoZGVmYXVsdHMsIG8pO1xuICAgIGNvcHkob3B0aW9ucywgbyk7XG4gICAgZm9yIChsZXQga2V5IG9mIE9iamVjdC5rZXlzKG9wdGlvbnMpKSB7XG4gICAgICAgIGxldCB2YWwgPSBvcHRpb25zW2tleV07XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlIFwianNvbk9wdGlvbnNcIjpcbiAgICAgICAgICAgICAgICBvLmpzb25PcHRpb25zID0gcnVudGltZV8xLm1lcmdlSnNvbk9wdGlvbnMoZGVmYXVsdHMuanNvbk9wdGlvbnMsIG8uanNvbk9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImJpbmFyeU9wdGlvbnNcIjpcbiAgICAgICAgICAgICAgICBvLmJpbmFyeU9wdGlvbnMgPSBydW50aW1lXzEubWVyZ2VCaW5hcnlPcHRpb25zKGRlZmF1bHRzLmJpbmFyeU9wdGlvbnMsIG8uYmluYXJ5T3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWV0YVwiOlxuICAgICAgICAgICAgICAgIG8ubWV0YSA9IHt9O1xuICAgICAgICAgICAgICAgIGNvcHkoZGVmYXVsdHMubWV0YSwgby5tZXRhKTtcbiAgICAgICAgICAgICAgICBjb3B5KG9wdGlvbnMubWV0YSwgby5tZXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJpbnRlcmNlcHRvcnNcIjpcbiAgICAgICAgICAgICAgICBvLmludGVyY2VwdG9ycyA9IGRlZmF1bHRzLmludGVyY2VwdG9ycyA/IGRlZmF1bHRzLmludGVyY2VwdG9ycy5jb25jYXQodmFsKSA6IHZhbC5jb25jYXQoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbztcbn1cbmV4cG9ydHMubWVyZ2VScGNPcHRpb25zID0gbWVyZ2VScGNPcHRpb25zO1xuZnVuY3Rpb24gY29weShhLCBpbnRvKSB7XG4gICAgaWYgKCFhKVxuICAgICAgICByZXR1cm47XG4gICAgbGV0IGMgPSBpbnRvO1xuICAgIGZvciAobGV0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhhKSkge1xuICAgICAgICBpZiAodiBpbnN0YW5jZW9mIERhdGUpXG4gICAgICAgICAgICBjW2tdID0gbmV3IERhdGUodi5nZXRUaW1lKCkpO1xuICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHYpKVxuICAgICAgICAgICAgY1trXSA9IHYuY29uY2F0KCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIGNba10gPSB2O1xuICAgIH1cbn1cbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkRlZmVycmVkID0gZXhwb3J0cy5EZWZlcnJlZFN0YXRlID0gdm9pZCAwO1xudmFyIERlZmVycmVkU3RhdGU7XG4oZnVuY3Rpb24gKERlZmVycmVkU3RhdGUpIHtcbiAgICBEZWZlcnJlZFN0YXRlW0RlZmVycmVkU3RhdGVbXCJQRU5ESU5HXCJdID0gMF0gPSBcIlBFTkRJTkdcIjtcbiAgICBEZWZlcnJlZFN0YXRlW0RlZmVycmVkU3RhdGVbXCJSRUpFQ1RFRFwiXSA9IDFdID0gXCJSRUpFQ1RFRFwiO1xuICAgIERlZmVycmVkU3RhdGVbRGVmZXJyZWRTdGF0ZVtcIlJFU09MVkVEXCJdID0gMl0gPSBcIlJFU09MVkVEXCI7XG59KShEZWZlcnJlZFN0YXRlID0gZXhwb3J0cy5EZWZlcnJlZFN0YXRlIHx8IChleHBvcnRzLkRlZmVycmVkU3RhdGUgPSB7fSkpO1xuLyoqXG4gKiBBIGRlZmVycmVkIHByb21pc2UuIFRoaXMgaXMgYSBcImNvbnRyb2xsZXJcIiBmb3IgYSBwcm9taXNlLCB3aGljaCBsZXRzIHlvdVxuICogcGFzcyBhIHByb21pc2UgYXJvdW5kIGFuZCByZWplY3Qgb3IgcmVzb2x2ZSBpdCBmcm9tIHRoZSBvdXRzaWRlLlxuICpcbiAqIFdhcm5pbmc6IFRoaXMgY2xhc3MgaXMgdG8gYmUgdXNlZCB3aXRoIGNhcmUuIFVzaW5nIGl0IGNhbiBtYWtlIGNvZGUgdmVyeVxuICogZGlmZmljdWx0IHRvIHJlYWQuIEl0IGlzIGludGVuZGVkIGZvciB1c2UgaW4gbGlicmFyeSBjb2RlIHRoYXQgZXhwb3Nlc1xuICogcHJvbWlzZXMsIG5vdCBmb3IgcmVndWxhciBidXNpbmVzcyBsb2dpYy5cbiAqL1xuY2xhc3MgRGVmZXJyZWQge1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSBwcmV2ZW50VW5oYW5kbGVkUmVqZWN0aW9uV2FybmluZyAtIHByZXZlbnRzIHRoZSB3YXJuaW5nXG4gICAgICogXCJVbmhhbmRsZWQgUHJvbWlzZSByZWplY3Rpb25cIiBieSBhZGRpbmcgYSBub29wIHJlamVjdGlvbiBoYW5kbGVyLlxuICAgICAqIFdvcmtpbmcgd2l0aCBjYWxscyByZXR1cm5lZCBmcm9tIHRoZSBydW50aW1lLXJwYyBwYWNrYWdlIGluIGFuXG4gICAgICogYXN5bmMgZnVuY3Rpb24gdXN1YWxseSBtZWFucyBhd2FpdGluZyBvbmUgY2FsbCBwcm9wZXJ0eSBhZnRlclxuICAgICAqIHRoZSBvdGhlci4gVGhpcyBtZWFucyB0aGF0IHRoZSBcInN0YXR1c1wiIGlzIG5vdCBiZWluZyBhd2FpdGVkIHdoZW5cbiAgICAgKiBhbiBlYXJsaWVyIGF3YWl0IGZvciB0aGUgXCJoZWFkZXJzXCIgaXMgcmVqZWN0ZWQuIFRoaXMgY2F1c2VzIHRoZVxuICAgICAqIFwidW5oYW5kbGVkIHByb21pc2UgcmVqZWN0XCIgd2FybmluZy4gQSBtb3JlIGNvcnJlY3QgYmVoYXZpb3VyIGZvclxuICAgICAqIGNhbGxzIG1pZ2h0IGJlIHRvIGJlY29tZSBhd2FyZSB3aGV0aGVyIGF0IGxlYXN0IG9uZSBvZiB0aGVcbiAgICAgKiBwcm9taXNlcyBpcyBoYW5kbGVkIGFuZCBzd2FsbG93IHRoZSByZWplY3Rpb24gd2FybmluZyBmb3IgdGhlXG4gICAgICogb3RoZXJzLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHByZXZlbnRVbmhhbmRsZWRSZWplY3Rpb25XYXJuaW5nID0gdHJ1ZSkge1xuICAgICAgICB0aGlzLl9zdGF0ZSA9IERlZmVycmVkU3RhdGUuUEVORElORztcbiAgICAgICAgdGhpcy5fcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgICAgICAgICAgdGhpcy5fcmVqZWN0ID0gcmVqZWN0O1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHByZXZlbnRVbmhhbmRsZWRSZWplY3Rpb25XYXJuaW5nKSB7XG4gICAgICAgICAgICB0aGlzLl9wcm9taXNlLmNhdGNoKF8gPT4geyB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHByb21pc2UuXG4gICAgICovXG4gICAgZ2V0IHN0YXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgZGVmZXJyZWQgcHJvbWlzZS5cbiAgICAgKi9cbiAgICBnZXQgcHJvbWlzZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb21pc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlc29sdmUgdGhlIHByb21pc2UuIFRocm93cyBpZiB0aGUgcHJvbWlzZSBpcyBhbHJlYWR5IHJlc29sdmVkIG9yIHJlamVjdGVkLlxuICAgICAqL1xuICAgIHJlc29sdmUodmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgIT09IERlZmVycmVkU3RhdGUuUEVORElORylcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgY2Fubm90IHJlc29sdmUgJHtEZWZlcnJlZFN0YXRlW3RoaXMuc3RhdGVdLnRvTG93ZXJDYXNlKCl9YCk7XG4gICAgICAgIHRoaXMuX3Jlc29sdmUodmFsdWUpO1xuICAgICAgICB0aGlzLl9zdGF0ZSA9IERlZmVycmVkU3RhdGUuUkVTT0xWRUQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlamVjdCB0aGUgcHJvbWlzZS4gVGhyb3dzIGlmIHRoZSBwcm9taXNlIGlzIGFscmVhZHkgcmVzb2x2ZWQgb3IgcmVqZWN0ZWQuXG4gICAgICovXG4gICAgcmVqZWN0KHJlYXNvbikge1xuICAgICAgICBpZiAodGhpcy5zdGF0ZSAhPT0gRGVmZXJyZWRTdGF0ZS5QRU5ESU5HKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBjYW5ub3QgcmVqZWN0ICR7RGVmZXJyZWRTdGF0ZVt0aGlzLnN0YXRlXS50b0xvd2VyQ2FzZSgpfWApO1xuICAgICAgICB0aGlzLl9yZWplY3QocmVhc29uKTtcbiAgICAgICAgdGhpcy5fc3RhdGUgPSBEZWZlcnJlZFN0YXRlLlJFSkVDVEVEO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXNvbHZlIHRoZSBwcm9taXNlLiBJZ25vcmUgaWYgbm90IHBlbmRpbmcuXG4gICAgICovXG4gICAgcmVzb2x2ZVBlbmRpbmcodmFsKSB7XG4gICAgICAgIGlmICh0aGlzLl9zdGF0ZSA9PT0gRGVmZXJyZWRTdGF0ZS5QRU5ESU5HKVxuICAgICAgICAgICAgdGhpcy5yZXNvbHZlKHZhbCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlamVjdCB0aGUgcHJvbWlzZS4gSWdub3JlIGlmIG5vdCBwZW5kaW5nLlxuICAgICAqL1xuICAgIHJlamVjdFBlbmRpbmcocmVhc29uKSB7XG4gICAgICAgIGlmICh0aGlzLl9zdGF0ZSA9PT0gRGVmZXJyZWRTdGF0ZS5QRU5ESU5HKVxuICAgICAgICAgICAgdGhpcy5yZWplY3QocmVhc29uKTtcbiAgICB9XG59XG5leHBvcnRzLkRlZmVycmVkID0gRGVmZXJyZWQ7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5ScGNPdXRwdXRTdHJlYW1Db250cm9sbGVyID0gdm9pZCAwO1xuY29uc3QgZGVmZXJyZWRfMSA9IHJlcXVpcmUoXCIuL2RlZmVycmVkXCIpO1xuY29uc3QgcnVudGltZV8xID0gcmVxdWlyZShcIkBwcm90b2J1Zi10cy9ydW50aW1lXCIpO1xuLyoqXG4gKiBBIGBScGNPdXRwdXRTdHJlYW1gIHRoYXQgeW91IGNvbnRyb2wuXG4gKi9cbmNsYXNzIFJwY091dHB1dFN0cmVhbUNvbnRyb2xsZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLl9saXMgPSB7XG4gICAgICAgICAgICBueHQ6IFtdLFxuICAgICAgICAgICAgbXNnOiBbXSxcbiAgICAgICAgICAgIGVycjogW10sXG4gICAgICAgICAgICBjbXA6IFtdLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLl9jbG9zZWQgPSBmYWxzZTtcbiAgICB9XG4gICAgLy8gLS0tIFJwY091dHB1dFN0cmVhbSBjYWxsYmFjayBBUElcbiAgICBvbk5leHQoY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkTGlzKGNhbGxiYWNrLCB0aGlzLl9saXMubnh0KTtcbiAgICB9XG4gICAgb25NZXNzYWdlKGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZExpcyhjYWxsYmFjaywgdGhpcy5fbGlzLm1zZyk7XG4gICAgfVxuICAgIG9uRXJyb3IoY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkTGlzKGNhbGxiYWNrLCB0aGlzLl9saXMuZXJyKTtcbiAgICB9XG4gICAgb25Db21wbGV0ZShjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRMaXMoY2FsbGJhY2ssIHRoaXMuX2xpcy5jbXApO1xuICAgIH1cbiAgICBhZGRMaXMoY2FsbGJhY2ssIGxpc3QpIHtcbiAgICAgICAgbGlzdC5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGxldCBpID0gbGlzdC5pbmRleE9mKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIGlmIChpID49IDApXG4gICAgICAgICAgICAgICAgbGlzdC5zcGxpY2UoaSwgMSk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8vIHJlbW92ZSBhbGwgbGlzdGVuZXJzXG4gICAgY2xlYXJMaXMoKSB7XG4gICAgICAgIGZvciAobGV0IGwgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLl9saXMpKVxuICAgICAgICAgICAgbC5zcGxpY2UoMCwgbC5sZW5ndGgpO1xuICAgIH1cbiAgICAvLyAtLS0gQ29udHJvbGxlciBBUElcbiAgICAvKipcbiAgICAgKiBJcyB0aGlzIHN0cmVhbSBhbHJlYWR5IGNsb3NlZCBieSBhIGNvbXBsZXRpb24gb3IgZXJyb3I/XG4gICAgICovXG4gICAgZ2V0IGNsb3NlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Nsb3NlZCAhPT0gZmFsc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEVtaXQgbWVzc2FnZSwgY2xvc2Ugd2l0aCBlcnJvciwgb3IgY2xvc2Ugc3VjY2Vzc2Z1bGx5LCBidXQgb25seSBvbmVcbiAgICAgKiBhdCBhIHRpbWUuXG4gICAgICogQ2FuIGJlIHVzZWQgdG8gd3JhcCBhIHN0cmVhbSBieSB1c2luZyB0aGUgb3RoZXIgc3RyZWFtJ3MgYG9uTmV4dGAuXG4gICAgICovXG4gICAgbm90aWZ5TmV4dChtZXNzYWdlLCBlcnJvciwgY29tcGxldGUpIHtcbiAgICAgICAgcnVudGltZV8xLmFzc2VydCgobWVzc2FnZSA/IDEgOiAwKSArIChlcnJvciA/IDEgOiAwKSArIChjb21wbGV0ZSA/IDEgOiAwKSA8PSAxLCAnb25seSBvbmUgZW1pc3Npb24gYXQgYSB0aW1lJyk7XG4gICAgICAgIGlmIChtZXNzYWdlKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnlNZXNzYWdlKG1lc3NhZ2UpO1xuICAgICAgICBpZiAoZXJyb3IpXG4gICAgICAgICAgICB0aGlzLm5vdGlmeUVycm9yKGVycm9yKTtcbiAgICAgICAgaWYgKGNvbXBsZXRlKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnlDb21wbGV0ZSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFbWl0cyBhIG5ldyBtZXNzYWdlLiBUaHJvd3MgaWYgc3RyZWFtIGlzIGNsb3NlZC5cbiAgICAgKlxuICAgICAqIFRyaWdnZXJzIG9uTmV4dCBhbmQgb25NZXNzYWdlIGNhbGxiYWNrcy5cbiAgICAgKi9cbiAgICBub3RpZnlNZXNzYWdlKG1lc3NhZ2UpIHtcbiAgICAgICAgcnVudGltZV8xLmFzc2VydCghdGhpcy5jbG9zZWQsICdzdHJlYW0gaXMgY2xvc2VkJyk7XG4gICAgICAgIHRoaXMucHVzaEl0KHsgdmFsdWU6IG1lc3NhZ2UsIGRvbmU6IGZhbHNlIH0pO1xuICAgICAgICB0aGlzLl9saXMubXNnLmZvckVhY2gobCA9PiBsKG1lc3NhZ2UpKTtcbiAgICAgICAgdGhpcy5fbGlzLm54dC5mb3JFYWNoKGwgPT4gbChtZXNzYWdlLCB1bmRlZmluZWQsIGZhbHNlKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENsb3NlcyB0aGUgc3RyZWFtIHdpdGggYW4gZXJyb3IuIFRocm93cyBpZiBzdHJlYW0gaXMgY2xvc2VkLlxuICAgICAqXG4gICAgICogVHJpZ2dlcnMgb25OZXh0IGFuZCBvbkVycm9yIGNhbGxiYWNrcy5cbiAgICAgKi9cbiAgICBub3RpZnlFcnJvcihlcnJvcikge1xuICAgICAgICBydW50aW1lXzEuYXNzZXJ0KCF0aGlzLmNsb3NlZCwgJ3N0cmVhbSBpcyBjbG9zZWQnKTtcbiAgICAgICAgdGhpcy5fY2xvc2VkID0gZXJyb3I7XG4gICAgICAgIHRoaXMucHVzaEl0KGVycm9yKTtcbiAgICAgICAgdGhpcy5fbGlzLmVyci5mb3JFYWNoKGwgPT4gbChlcnJvcikpO1xuICAgICAgICB0aGlzLl9saXMubnh0LmZvckVhY2gobCA9PiBsKHVuZGVmaW5lZCwgZXJyb3IsIGZhbHNlKSk7XG4gICAgICAgIHRoaXMuY2xlYXJMaXMoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2xvc2VzIHRoZSBzdHJlYW0gc3VjY2Vzc2Z1bGx5LiBUaHJvd3MgaWYgc3RyZWFtIGlzIGNsb3NlZC5cbiAgICAgKlxuICAgICAqIFRyaWdnZXJzIG9uTmV4dCBhbmQgb25Db21wbGV0ZSBjYWxsYmFja3MuXG4gICAgICovXG4gICAgbm90aWZ5Q29tcGxldGUoKSB7XG4gICAgICAgIHJ1bnRpbWVfMS5hc3NlcnQoIXRoaXMuY2xvc2VkLCAnc3RyZWFtIGlzIGNsb3NlZCcpO1xuICAgICAgICB0aGlzLl9jbG9zZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnB1c2hJdCh7IHZhbHVlOiBudWxsLCBkb25lOiB0cnVlIH0pO1xuICAgICAgICB0aGlzLl9saXMuY21wLmZvckVhY2gobCA9PiBsKCkpO1xuICAgICAgICB0aGlzLl9saXMubnh0LmZvckVhY2gobCA9PiBsKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB0cnVlKSk7XG4gICAgICAgIHRoaXMuY2xlYXJMaXMoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhc3luYyBpdGVyYXRvciAodGhhdCBjYW4gYmUgdXNlZCB3aXRoIGBmb3IgYXdhaXQgey4uLn1gKVxuICAgICAqIHRvIGNvbnN1bWUgdGhlIHN0cmVhbS5cbiAgICAgKlxuICAgICAqIFNvbWUgdGhpbmdzIHRvIG5vdGU6XG4gICAgICogLSBJZiBhbiBlcnJvciBvY2N1cnMsIHRoZSBgZm9yIGF3YWl0YCB3aWxsIHRocm93IGl0LlxuICAgICAqIC0gSWYgYW4gZXJyb3Igb2NjdXJyZWQgYmVmb3JlIHRoZSBgZm9yIGF3YWl0YCB3YXMgc3RhcnRlZCwgYGZvciBhd2FpdGBcbiAgICAgKiAgIHdpbGwgcmUtdGhyb3cgaXQuXG4gICAgICogLSBJZiB0aGUgc3RyZWFtIGlzIGFscmVhZHkgY29tcGxldGUsIHRoZSBgZm9yIGF3YWl0YCB3aWxsIGJlIGVtcHR5LlxuICAgICAqIC0gSWYgeW91ciBgZm9yIGF3YWl0YCBjb25zdW1lcyBzbG93ZXIgdGhhbiB0aGUgc3RyZWFtIHByb2R1Y2VzLFxuICAgICAqICAgZm9yIGV4YW1wbGUgYmVjYXVzZSB5b3UgYXJlIHJlbGF5aW5nIG1lc3NhZ2VzIGluIGEgc2xvdyBvcGVyYXRpb24sXG4gICAgICogICBtZXNzYWdlcyBhcmUgcXVldWVkLlxuICAgICAqL1xuICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSB7XG4gICAgICAgIC8vIGluaXQgdGhlIGl0ZXJhdG9yIHN0YXRlLCBlbmFibGluZyBwdXNoSXQoKVxuICAgICAgICBpZiAoIXRoaXMuX2l0U3RhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuX2l0U3RhdGUgPSB7IHE6IFtdIH07XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgd2UgYXJlIGNsb3NlZCwgd2UgYXJlIGRlZmluaXRlbHkgbm90IHJlY2VpdmluZyBhbnkgbW9yZSBtZXNzYWdlcy5cbiAgICAgICAgLy8gYnV0IHdlIGNhbid0IGxldCB0aGUgaXRlcmF0b3IgZ2V0IHN0dWNrLiB3ZSB3YW50IHRvIGVpdGhlcjpcbiAgICAgICAgLy8gYSkgZmluaXNoIHRoZSBuZXcgaXRlcmF0b3IgaW1tZWRpYXRlbHksIGJlY2F1c2Ugd2UgYXJlIGNvbXBsZXRlZFxuICAgICAgICAvLyBiKSByZWplY3QgdGhlIG5ldyBpdGVyYXRvciwgYmVjYXVzZSB3ZSBlcnJvcmVkXG4gICAgICAgIGlmICh0aGlzLl9jbG9zZWQgPT09IHRydWUpXG4gICAgICAgICAgICB0aGlzLnB1c2hJdCh7IHZhbHVlOiBudWxsLCBkb25lOiB0cnVlIH0pO1xuICAgICAgICBlbHNlIGlmICh0aGlzLl9jbG9zZWQgIT09IGZhbHNlKVxuICAgICAgICAgICAgdGhpcy5wdXNoSXQodGhpcy5fY2xvc2VkKTtcbiAgICAgICAgLy8gdGhlIGFzeW5jIGl0ZXJhdG9yXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IHN0YXRlID0gdGhpcy5faXRTdGF0ZTtcbiAgICAgICAgICAgICAgICBydW50aW1lXzEuYXNzZXJ0KHN0YXRlLCBcImJhZCBzdGF0ZVwiKTsgLy8gaWYgd2UgZG9uJ3QgaGF2ZSBhIHN0YXRlIGhlcmUsIGNvZGUgaXMgYnJva2VuXG4gICAgICAgICAgICAgICAgLy8gdGhlcmUgc2hvdWxkIGJlIG5vIHBlbmRpbmcgcmVzdWx0LlxuICAgICAgICAgICAgICAgIC8vIGRpZCB0aGUgY29uc3VtZXIgY2FsbCBuZXh0KCkgYmVmb3JlIHdlIHJlc29sdmVkIG91ciBwcmV2aW91cyByZXN1bHQgcHJvbWlzZT9cbiAgICAgICAgICAgICAgICBydW50aW1lXzEuYXNzZXJ0KCFzdGF0ZS5wLCBcIml0ZXJhdG9yIGNvbnRyYWN0IGJyb2tlblwiKTtcbiAgICAgICAgICAgICAgICAvLyBkaWQgd2UgcHJvZHVjZSBmYXN0ZXIgdGhhbiB0aGUgaXRlcmF0b3IgY29uc3VtZWQ/XG4gICAgICAgICAgICAgICAgLy8gcmV0dXJuIHRoZSBvbGRlc3QgcmVzdWx0IGZyb20gdGhlIHF1ZXVlLlxuICAgICAgICAgICAgICAgIGxldCBmaXJzdCA9IHN0YXRlLnEuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICBpZiAoZmlyc3QpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoXCJ2YWx1ZVwiIGluIGZpcnN0KSA/IFByb21pc2UucmVzb2x2ZShmaXJzdCkgOiBQcm9taXNlLnJlamVjdChmaXJzdCk7XG4gICAgICAgICAgICAgICAgLy8gd2UgaGF2ZSBubyByZXN1bHQgQVRNLCBidXQgd2UgcHJvbWlzZSBvbmUuXG4gICAgICAgICAgICAgICAgLy8gYXMgc29vbiBhcyB3ZSBoYXZlIGEgcmVzdWx0LCB3ZSBtdXN0IHJlc29sdmUgcHJvbWlzZS5cbiAgICAgICAgICAgICAgICBzdGF0ZS5wID0gbmV3IGRlZmVycmVkXzEuRGVmZXJyZWQoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGUucC5wcm9taXNlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLy8gXCJwdXNoXCIgYSBuZXcgaXRlcmF0b3IgcmVzdWx0LlxuICAgIC8vIHRoaXMgZWl0aGVyIHJlc29sdmVzIGEgcGVuZGluZyBwcm9taXNlLCBvciBlbnF1ZXVlcyB0aGUgcmVzdWx0LlxuICAgIHB1c2hJdChyZXN1bHQpIHtcbiAgICAgICAgbGV0IHN0YXRlID0gdGhpcy5faXRTdGF0ZTtcbiAgICAgICAgaWYgKCFzdGF0ZSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgLy8gaXMgdGhlIGNvbnN1bWVyIHdhaXRpbmcgZm9yIHVzP1xuICAgICAgICBpZiAoc3RhdGUucCkge1xuICAgICAgICAgICAgLy8geWVzLCBjb25zdW1lciBpcyB3YWl0aW5nIGZvciB0aGlzIHByb21pc2UuXG4gICAgICAgICAgICBjb25zdCBwID0gc3RhdGUucDtcbiAgICAgICAgICAgIHJ1bnRpbWVfMS5hc3NlcnQocC5zdGF0ZSA9PSBkZWZlcnJlZF8xLkRlZmVycmVkU3RhdGUuUEVORElORywgXCJpdGVyYXRvciBjb250cmFjdCBicm9rZW5cIik7XG4gICAgICAgICAgICAvLyByZXNvbHZlIHRoZSBwcm9taXNlXG4gICAgICAgICAgICAoXCJ2YWx1ZVwiIGluIHJlc3VsdCkgPyBwLnJlc29sdmUocmVzdWx0KSA6IHAucmVqZWN0KHJlc3VsdCk7XG4gICAgICAgICAgICAvLyBtdXN0IGNsZWFudXAsIG90aGVyd2lzZSBpdGVyYXRvci5uZXh0KCkgd291bGQgcGljayBpdCB1cCBhZ2Fpbi5cbiAgICAgICAgICAgIGRlbGV0ZSBzdGF0ZS5wO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gd2UgYXJlIHByb2R1Y2luZyBmYXN0ZXIgdGhhbiB0aGUgaXRlcmF0b3IgY29uc3VtZXMuXG4gICAgICAgICAgICAvLyBwdXNoIHJlc3VsdCBvbnRvIHF1ZXVlLlxuICAgICAgICAgICAgc3RhdGUucS5wdXNoKHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLlJwY091dHB1dFN0cmVhbUNvbnRyb2xsZXIgPSBScGNPdXRwdXRTdHJlYW1Db250cm9sbGVyO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5VbmFyeUNhbGwgPSB2b2lkIDA7XG4vKipcbiAqIEEgdW5hcnkgUlBDIGNhbGwuIFVuYXJ5IG1lYW5zIHRoZXJlIGlzIGV4YWN0bHkgb25lIGlucHV0IG1lc3NhZ2UgYW5kXG4gKiBleGFjdGx5IG9uZSBvdXRwdXQgbWVzc2FnZSB1bmxlc3MgYW4gZXJyb3Igb2NjdXJyZWQuXG4gKi9cbmNsYXNzIFVuYXJ5Q2FsbCB7XG4gICAgY29uc3RydWN0b3IobWV0aG9kLCByZXF1ZXN0SGVhZGVycywgcmVxdWVzdCwgaGVhZGVycywgcmVzcG9uc2UsIHN0YXR1cywgdHJhaWxlcnMpIHtcbiAgICAgICAgdGhpcy5tZXRob2QgPSBtZXRob2Q7XG4gICAgICAgIHRoaXMucmVxdWVzdEhlYWRlcnMgPSByZXF1ZXN0SGVhZGVycztcbiAgICAgICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICAgICAgdGhpcy5oZWFkZXJzID0gaGVhZGVycztcbiAgICAgICAgdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnN0YXR1cyA9IHN0YXR1cztcbiAgICAgICAgdGhpcy50cmFpbGVycyA9IHRyYWlsZXJzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJZiB5b3UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiB0aGUgZmluYWwgb3V0Y29tZSBvZiB0aGlzIGNhbGwsXG4gICAgICogeW91IGNhbiBhd2FpdCBpdCB0byByZWNlaXZlIGEgYEZpbmlzaGVkVW5hcnlDYWxsYC5cbiAgICAgKi9cbiAgICB0aGVuKG9uZnVsZmlsbGVkLCBvbnJlamVjdGVkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb21pc2VGaW5pc2hlZCgpLnRoZW4odmFsdWUgPT4gb25mdWxmaWxsZWQgPyBQcm9taXNlLnJlc29sdmUob25mdWxmaWxsZWQodmFsdWUpKSA6IHZhbHVlLCByZWFzb24gPT4gb25yZWplY3RlZCA/IFByb21pc2UucmVzb2x2ZShvbnJlamVjdGVkKHJlYXNvbikpIDogUHJvbWlzZS5yZWplY3QocmVhc29uKSk7XG4gICAgfVxuICAgIHByb21pc2VGaW5pc2hlZCgpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGxldCBbaGVhZGVycywgcmVzcG9uc2UsIHN0YXR1cywgdHJhaWxlcnNdID0geWllbGQgUHJvbWlzZS5hbGwoW3RoaXMuaGVhZGVycywgdGhpcy5yZXNwb25zZSwgdGhpcy5zdGF0dXMsIHRoaXMudHJhaWxlcnNdKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiB0aGlzLm1ldGhvZCxcbiAgICAgICAgICAgICAgICByZXF1ZXN0SGVhZGVyczogdGhpcy5yZXF1ZXN0SGVhZGVycyxcbiAgICAgICAgICAgICAgICByZXF1ZXN0OiB0aGlzLnJlcXVlc3QsXG4gICAgICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICAgICAgICByZXNwb25zZSxcbiAgICAgICAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgICAgICAgdHJhaWxlcnNcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuVW5hcnlDYWxsID0gVW5hcnlDYWxsO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TZXJ2ZXJTdHJlYW1pbmdDYWxsID0gdm9pZCAwO1xuLyoqXG4gKiBBIHNlcnZlciBzdHJlYW1pbmcgUlBDIGNhbGwuIFRoZSBjbGllbnQgcHJvdmlkZXMgZXhhY3RseSBvbmUgaW5wdXQgbWVzc2FnZVxuICogYnV0IHRoZSBzZXJ2ZXIgbWF5IHJlc3BvbmQgd2l0aCAwLCAxLCBvciBtb3JlIG1lc3NhZ2VzLlxuICovXG5jbGFzcyBTZXJ2ZXJTdHJlYW1pbmdDYWxsIHtcbiAgICBjb25zdHJ1Y3RvcihtZXRob2QsIHJlcXVlc3RIZWFkZXJzLCByZXF1ZXN0LCBoZWFkZXJzLCByZXNwb25zZSwgc3RhdHVzLCB0cmFpbGVycykge1xuICAgICAgICB0aGlzLm1ldGhvZCA9IG1ldGhvZDtcbiAgICAgICAgdGhpcy5yZXF1ZXN0SGVhZGVycyA9IHJlcXVlc3RIZWFkZXJzO1xuICAgICAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgICAgICB0aGlzLmhlYWRlcnMgPSBoZWFkZXJzO1xuICAgICAgICB0aGlzLnJlc3BvbnNlcyA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnN0YXR1cyA9IHN0YXR1cztcbiAgICAgICAgdGhpcy50cmFpbGVycyA9IHRyYWlsZXJzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbnN0ZWFkIG9mIGF3YWl0aW5nIHRoZSByZXNwb25zZSBzdGF0dXMgYW5kIHRyYWlsZXJzLCB5b3UgY2FuXG4gICAgICoganVzdCBhcyB3ZWxsIGF3YWl0IHRoaXMgY2FsbCBpdHNlbGYgdG8gcmVjZWl2ZSB0aGUgc2VydmVyIG91dGNvbWUuXG4gICAgICogWW91IHNob3VsZCBmaXJzdCBzZXR1cCBzb21lIGxpc3RlbmVycyB0byB0aGUgYHJlcXVlc3RgIHRvXG4gICAgICogc2VlIHRoZSBhY3R1YWwgbWVzc2FnZXMgdGhlIHNlcnZlciByZXBsaWVkIHdpdGguXG4gICAgICovXG4gICAgdGhlbihvbmZ1bGZpbGxlZCwgb25yZWplY3RlZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9taXNlRmluaXNoZWQoKS50aGVuKHZhbHVlID0+IG9uZnVsZmlsbGVkID8gUHJvbWlzZS5yZXNvbHZlKG9uZnVsZmlsbGVkKHZhbHVlKSkgOiB2YWx1ZSwgcmVhc29uID0+IG9ucmVqZWN0ZWQgPyBQcm9taXNlLnJlc29sdmUob25yZWplY3RlZChyZWFzb24pKSA6IFByb21pc2UucmVqZWN0KHJlYXNvbikpO1xuICAgIH1cbiAgICBwcm9taXNlRmluaXNoZWQoKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBsZXQgW2hlYWRlcnMsIHN0YXR1cywgdHJhaWxlcnNdID0geWllbGQgUHJvbWlzZS5hbGwoW3RoaXMuaGVhZGVycywgdGhpcy5zdGF0dXMsIHRoaXMudHJhaWxlcnNdKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiB0aGlzLm1ldGhvZCxcbiAgICAgICAgICAgICAgICByZXF1ZXN0SGVhZGVyczogdGhpcy5yZXF1ZXN0SGVhZGVycyxcbiAgICAgICAgICAgICAgICByZXF1ZXN0OiB0aGlzLnJlcXVlc3QsXG4gICAgICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgICAgICAgdHJhaWxlcnMsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnRzLlNlcnZlclN0cmVhbWluZ0NhbGwgPSBTZXJ2ZXJTdHJlYW1pbmdDYWxsO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5DbGllbnRTdHJlYW1pbmdDYWxsID0gdm9pZCAwO1xuLyoqXG4gKiBBIGNsaWVudCBzdHJlYW1pbmcgUlBDIGNhbGwuIFRoaXMgbWVhbnMgdGhhdCB0aGUgY2xpZW50cyBzZW5kcyAwLCAxLCBvclxuICogbW9yZSBtZXNzYWdlcyB0byB0aGUgc2VydmVyLCBhbmQgdGhlIHNlcnZlciByZXBsaWVzIHdpdGggZXhhY3RseSBvbmVcbiAqIG1lc3NhZ2UuXG4gKi9cbmNsYXNzIENsaWVudFN0cmVhbWluZ0NhbGwge1xuICAgIGNvbnN0cnVjdG9yKG1ldGhvZCwgcmVxdWVzdEhlYWRlcnMsIHJlcXVlc3QsIGhlYWRlcnMsIHJlc3BvbnNlLCBzdGF0dXMsIHRyYWlsZXJzKSB7XG4gICAgICAgIHRoaXMubWV0aG9kID0gbWV0aG9kO1xuICAgICAgICB0aGlzLnJlcXVlc3RIZWFkZXJzID0gcmVxdWVzdEhlYWRlcnM7XG4gICAgICAgIHRoaXMucmVxdWVzdHMgPSByZXF1ZXN0O1xuICAgICAgICB0aGlzLmhlYWRlcnMgPSBoZWFkZXJzO1xuICAgICAgICB0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzO1xuICAgICAgICB0aGlzLnRyYWlsZXJzID0gdHJhaWxlcnM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEluc3RlYWQgb2YgYXdhaXRpbmcgdGhlIHJlc3BvbnNlIHN0YXR1cyBhbmQgdHJhaWxlcnMsIHlvdSBjYW5cbiAgICAgKiBqdXN0IGFzIHdlbGwgYXdhaXQgdGhpcyBjYWxsIGl0c2VsZiB0byByZWNlaXZlIHRoZSBzZXJ2ZXIgb3V0Y29tZS5cbiAgICAgKiBOb3RlIHRoYXQgaXQgbWF5IHN0aWxsIGJlIHZhbGlkIHRvIHNlbmQgbW9yZSByZXF1ZXN0IG1lc3NhZ2VzLlxuICAgICAqL1xuICAgIHRoZW4ob25mdWxmaWxsZWQsIG9ucmVqZWN0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvbWlzZUZpbmlzaGVkKCkudGhlbih2YWx1ZSA9PiBvbmZ1bGZpbGxlZCA/IFByb21pc2UucmVzb2x2ZShvbmZ1bGZpbGxlZCh2YWx1ZSkpIDogdmFsdWUsIHJlYXNvbiA9PiBvbnJlamVjdGVkID8gUHJvbWlzZS5yZXNvbHZlKG9ucmVqZWN0ZWQocmVhc29uKSkgOiBQcm9taXNlLnJlamVjdChyZWFzb24pKTtcbiAgICB9XG4gICAgcHJvbWlzZUZpbmlzaGVkKCkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgbGV0IFtoZWFkZXJzLCByZXNwb25zZSwgc3RhdHVzLCB0cmFpbGVyc10gPSB5aWVsZCBQcm9taXNlLmFsbChbdGhpcy5oZWFkZXJzLCB0aGlzLnJlc3BvbnNlLCB0aGlzLnN0YXR1cywgdGhpcy50cmFpbGVyc10pO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6IHRoaXMubWV0aG9kLFxuICAgICAgICAgICAgICAgIHJlcXVlc3RIZWFkZXJzOiB0aGlzLnJlcXVlc3RIZWFkZXJzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgICAgICAgIHRyYWlsZXJzXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnRzLkNsaWVudFN0cmVhbWluZ0NhbGwgPSBDbGllbnRTdHJlYW1pbmdDYWxsO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5EdXBsZXhTdHJlYW1pbmdDYWxsID0gdm9pZCAwO1xuLyoqXG4gKiBBIGR1cGxleCBzdHJlYW1pbmcgUlBDIGNhbGwuIFRoaXMgbWVhbnMgdGhhdCB0aGUgY2xpZW50cyBzZW5kcyBhblxuICogYXJiaXRyYXJ5IGFtb3VudCBvZiBtZXNzYWdlcyB0byB0aGUgc2VydmVyLCB3aGlsZSBhdCB0aGUgc2FtZSB0aW1lLFxuICogdGhlIHNlcnZlciBzZW5kcyBhbiBhcmJpdHJhcnkgYW1vdW50IG9mIG1lc3NhZ2VzIHRvIHRoZSBjbGllbnQuXG4gKi9cbmNsYXNzIER1cGxleFN0cmVhbWluZ0NhbGwge1xuICAgIGNvbnN0cnVjdG9yKG1ldGhvZCwgcmVxdWVzdEhlYWRlcnMsIHJlcXVlc3QsIGhlYWRlcnMsIHJlc3BvbnNlLCBzdGF0dXMsIHRyYWlsZXJzKSB7XG4gICAgICAgIHRoaXMubWV0aG9kID0gbWV0aG9kO1xuICAgICAgICB0aGlzLnJlcXVlc3RIZWFkZXJzID0gcmVxdWVzdEhlYWRlcnM7XG4gICAgICAgIHRoaXMucmVxdWVzdHMgPSByZXF1ZXN0O1xuICAgICAgICB0aGlzLmhlYWRlcnMgPSBoZWFkZXJzO1xuICAgICAgICB0aGlzLnJlc3BvbnNlcyA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnN0YXR1cyA9IHN0YXR1cztcbiAgICAgICAgdGhpcy50cmFpbGVycyA9IHRyYWlsZXJzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbnN0ZWFkIG9mIGF3YWl0aW5nIHRoZSByZXNwb25zZSBzdGF0dXMgYW5kIHRyYWlsZXJzLCB5b3UgY2FuXG4gICAgICoganVzdCBhcyB3ZWxsIGF3YWl0IHRoaXMgY2FsbCBpdHNlbGYgdG8gcmVjZWl2ZSB0aGUgc2VydmVyIG91dGNvbWUuXG4gICAgICogTm90ZSB0aGF0IGl0IG1heSBzdGlsbCBiZSB2YWxpZCB0byBzZW5kIG1vcmUgcmVxdWVzdCBtZXNzYWdlcy5cbiAgICAgKi9cbiAgICB0aGVuKG9uZnVsZmlsbGVkLCBvbnJlamVjdGVkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb21pc2VGaW5pc2hlZCgpLnRoZW4odmFsdWUgPT4gb25mdWxmaWxsZWQgPyBQcm9taXNlLnJlc29sdmUob25mdWxmaWxsZWQodmFsdWUpKSA6IHZhbHVlLCByZWFzb24gPT4gb25yZWplY3RlZCA/IFByb21pc2UucmVzb2x2ZShvbnJlamVjdGVkKHJlYXNvbikpIDogUHJvbWlzZS5yZWplY3QocmVhc29uKSk7XG4gICAgfVxuICAgIHByb21pc2VGaW5pc2hlZCgpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGxldCBbaGVhZGVycywgc3RhdHVzLCB0cmFpbGVyc10gPSB5aWVsZCBQcm9taXNlLmFsbChbdGhpcy5oZWFkZXJzLCB0aGlzLnN0YXR1cywgdGhpcy50cmFpbGVyc10pO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6IHRoaXMubWV0aG9kLFxuICAgICAgICAgICAgICAgIHJlcXVlc3RIZWFkZXJzOiB0aGlzLnJlcXVlc3RIZWFkZXJzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgICAgICAgIHRyYWlsZXJzLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0cy5EdXBsZXhTdHJlYW1pbmdDYWxsID0gRHVwbGV4U3RyZWFtaW5nQ2FsbDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVGVzdFRyYW5zcG9ydCA9IHZvaWQgMDtcbmNvbnN0IHJwY19lcnJvcl8xID0gcmVxdWlyZShcIi4vcnBjLWVycm9yXCIpO1xuY29uc3QgcnVudGltZV8xID0gcmVxdWlyZShcIkBwcm90b2J1Zi10cy9ydW50aW1lXCIpO1xuY29uc3QgcnBjX291dHB1dF9zdHJlYW1fMSA9IHJlcXVpcmUoXCIuL3JwYy1vdXRwdXQtc3RyZWFtXCIpO1xuY29uc3QgcnBjX29wdGlvbnNfMSA9IHJlcXVpcmUoXCIuL3JwYy1vcHRpb25zXCIpO1xuY29uc3QgdW5hcnlfY2FsbF8xID0gcmVxdWlyZShcIi4vdW5hcnktY2FsbFwiKTtcbmNvbnN0IHNlcnZlcl9zdHJlYW1pbmdfY2FsbF8xID0gcmVxdWlyZShcIi4vc2VydmVyLXN0cmVhbWluZy1jYWxsXCIpO1xuY29uc3QgY2xpZW50X3N0cmVhbWluZ19jYWxsXzEgPSByZXF1aXJlKFwiLi9jbGllbnQtc3RyZWFtaW5nLWNhbGxcIik7XG5jb25zdCBkdXBsZXhfc3RyZWFtaW5nX2NhbGxfMSA9IHJlcXVpcmUoXCIuL2R1cGxleC1zdHJlYW1pbmctY2FsbFwiKTtcbi8qKlxuICogVHJhbnNwb3J0IGZvciB0ZXN0aW5nLlxuICovXG5jbGFzcyBUZXN0VHJhbnNwb3J0IHtcbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplIHdpdGggbW9jayBkYXRhLiBPbWl0dGVkIGZpZWxkcyBoYXZlIGRlZmF1bHQgdmFsdWUuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoZGF0YSkge1xuICAgICAgICAvKipcbiAgICAgICAgICogU3VwcHJlc3Mgd2FybmluZyAvIGVycm9yIGFib3V0IHVuY2F1Z2h0IHJlamVjdGlvbnMgb2ZcbiAgICAgICAgICogXCJzdGF0dXNcIiBhbmQgXCJ0cmFpbGVyc1wiLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5zdXBwcmVzc1VuY2F1Z2h0UmVqZWN0aW9ucyA9IHRydWU7XG4gICAgICAgIHRoaXMuaGVhZGVyRGVsYXkgPSAxMDtcbiAgICAgICAgdGhpcy5yZXNwb25zZURlbGF5ID0gNTA7XG4gICAgICAgIHRoaXMuYmV0d2VlblJlc3BvbnNlRGVsYXkgPSAxMDtcbiAgICAgICAgdGhpcy5hZnRlclJlc3BvbnNlRGVsYXkgPSAxMDtcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YSAhPT0gbnVsbCAmJiBkYXRhICE9PSB2b2lkIDAgPyBkYXRhIDoge307XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNlbnQgbWVzc2FnZShzKSBkdXJpbmcgdGhlIGxhc3Qgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGdldCBzZW50TWVzc2FnZXMoKSB7XG4gICAgICAgIGlmICh0aGlzLmxhc3RJbnB1dCBpbnN0YW5jZW9mIFRlc3RJbnB1dFN0cmVhbSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubGFzdElucHV0LnNlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHRoaXMubGFzdElucHV0ID09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIHJldHVybiBbdGhpcy5sYXN0SW5wdXQuc2luZ2xlXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNlbmRpbmcgbWVzc2FnZShzKSBjb21wbGV0ZWQ/XG4gICAgICovXG4gICAgZ2V0IHNlbmRDb21wbGV0ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMubGFzdElucHV0IGluc3RhbmNlb2YgVGVzdElucHV0U3RyZWFtKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sYXN0SW5wdXQuY29tcGxldGVkO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiB0aGlzLmxhc3RJbnB1dCA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8vIENyZWF0ZXMgYSBwcm9taXNlIGZvciByZXNwb25zZSBoZWFkZXJzIGZyb20gdGhlIG1vY2sgZGF0YS5cbiAgICBwcm9taXNlSGVhZGVycygpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBoZWFkZXJzID0gKF9hID0gdGhpcy5kYXRhLmhlYWRlcnMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFRlc3RUcmFuc3BvcnQuZGVmYXVsdEhlYWRlcnM7XG4gICAgICAgIHJldHVybiBoZWFkZXJzIGluc3RhbmNlb2YgcnBjX2Vycm9yXzEuUnBjRXJyb3JcbiAgICAgICAgICAgID8gUHJvbWlzZS5yZWplY3QoaGVhZGVycylcbiAgICAgICAgICAgIDogUHJvbWlzZS5yZXNvbHZlKGhlYWRlcnMpO1xuICAgIH1cbiAgICAvLyBDcmVhdGVzIGEgcHJvbWlzZSBmb3IgYSBzaW5nbGUsIHZhbGlkLCBtZXNzYWdlIGZyb20gdGhlIG1vY2sgZGF0YS5cbiAgICBwcm9taXNlU2luZ2xlUmVzcG9uc2UobWV0aG9kKSB7XG4gICAgICAgIGlmICh0aGlzLmRhdGEucmVzcG9uc2UgaW5zdGFuY2VvZiBycGNfZXJyb3JfMS5ScGNFcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHRoaXMuZGF0YS5yZXNwb25zZSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHI7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZGF0YS5yZXNwb25zZSkpIHtcbiAgICAgICAgICAgIHJ1bnRpbWVfMS5hc3NlcnQodGhpcy5kYXRhLnJlc3BvbnNlLmxlbmd0aCA+IDApO1xuICAgICAgICAgICAgciA9IHRoaXMuZGF0YS5yZXNwb25zZVswXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmRhdGEucmVzcG9uc2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgciA9IHRoaXMuZGF0YS5yZXNwb25zZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHIgPSBtZXRob2QuTy5jcmVhdGUoKTtcbiAgICAgICAgfVxuICAgICAgICBydW50aW1lXzEuYXNzZXJ0KG1ldGhvZC5PLmlzKHIpKTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUHVzaGVzIHJlc3BvbnNlIG1lc3NhZ2VzIGZyb20gdGhlIG1vY2sgZGF0YSB0byB0aGUgb3V0cHV0IHN0cmVhbS5cbiAgICAgKiBJZiBhbiBlcnJvciByZXNwb25zZSwgc3RhdHVzIG9yIHRyYWlsZXJzIGFyZSBtb2NrZWQsIHRoZSBzdHJlYW0gaXNcbiAgICAgKiBjbG9zZWQgd2l0aCB0aGUgcmVzcGVjdGl2ZSBlcnJvci5cbiAgICAgKiBPdGhlcndpc2UsIHN0cmVhbSBpcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlxuICAgICAqXG4gICAgICogVGhlIHJldHVybmVkIHByb21pc2UgcmVzb2x2ZXMgd2hlbiB0aGUgc3RyZWFtIGlzIGNsb3NlZC4gSXQgc2hvdWxkXG4gICAgICogbm90IHJlamVjdC4gSWYgaXQgZG9lcywgY29kZSBpcyBicm9rZW4uXG4gICAgICovXG4gICAgc3RyZWFtUmVzcG9uc2VzKG1ldGhvZCwgc3RyZWFtLCBhYm9ydCkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgLy8gbm9ybWFsaXplIFwiZGF0YS5yZXNwb25zZVwiIGludG8gYW4gYXJyYXkgb2YgdmFsaWQgb3V0cHV0IG1lc3NhZ2VzXG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlcyA9IFtdO1xuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YS5yZXNwb25zZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZXMucHVzaChtZXRob2QuTy5jcmVhdGUoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZGF0YS5yZXNwb25zZSkpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBtc2cgb2YgdGhpcy5kYXRhLnJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bnRpbWVfMS5hc3NlcnQobWV0aG9kLk8uaXMobXNnKSk7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VzLnB1c2gobXNnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICghKHRoaXMuZGF0YS5yZXNwb25zZSBpbnN0YW5jZW9mIHJwY19lcnJvcl8xLlJwY0Vycm9yKSkge1xuICAgICAgICAgICAgICAgIHJ1bnRpbWVfMS5hc3NlcnQobWV0aG9kLk8uaXModGhpcy5kYXRhLnJlc3BvbnNlKSk7XG4gICAgICAgICAgICAgICAgbWVzc2FnZXMucHVzaCh0aGlzLmRhdGEucmVzcG9uc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gc3RhcnQgdGhlIHN0cmVhbSB3aXRoIGFuIGluaXRpYWwgZGVsYXkuXG4gICAgICAgICAgICAvLyBpZiB0aGUgcmVxdWVzdCBpcyBjYW5jZWxsZWQsIG5vdGlmeSgpIGVycm9yIGFuZCBleGl0LlxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB5aWVsZCBkZWxheSh0aGlzLnJlc3BvbnNlRGVsYXksIGFib3J0KSh1bmRlZmluZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgc3RyZWFtLm5vdGlmeUVycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBpZiBlcnJvciByZXNwb25zZSB3YXMgbW9ja2VkLCBub3RpZnkoKSBlcnJvciAoc3RyZWFtIGlzIG5vdyBjbG9zZWQgd2l0aCBlcnJvcikgYW5kIGV4aXQuXG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhLnJlc3BvbnNlIGluc3RhbmNlb2YgcnBjX2Vycm9yXzEuUnBjRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBzdHJlYW0ubm90aWZ5RXJyb3IodGhpcy5kYXRhLnJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyByZWd1bGFyIHJlc3BvbnNlIG1lc3NhZ2VzIHdlcmUgbW9ja2VkLiBub3RpZnkoKSB0aGVtLlxuICAgICAgICAgICAgZm9yIChsZXQgbXNnIG9mIG1lc3NhZ2VzKSB7XG4gICAgICAgICAgICAgICAgc3RyZWFtLm5vdGlmeU1lc3NhZ2UobXNnKTtcbiAgICAgICAgICAgICAgICAvLyBhZGQgYSBzaG9ydCBkZWxheSBiZXR3ZWVuIHJlc3BvbnNlc1xuICAgICAgICAgICAgICAgIC8vIGlmIHRoZSByZXF1ZXN0IGlzIGNhbmNlbGxlZCwgbm90aWZ5KCkgZXJyb3IgYW5kIGV4aXQuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgZGVsYXkodGhpcy5iZXR3ZWVuUmVzcG9uc2VEZWxheSwgYWJvcnQpKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBzdHJlYW0ubm90aWZ5RXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZXJyb3Igc3RhdHVzIHdhcyBtb2NrZWQsIG5vdGlmeSgpIGVycm9yIChzdHJlYW0gaXMgbm93IGNsb3NlZCB3aXRoIGVycm9yKSBhbmQgZXhpdC5cbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGEuc3RhdHVzIGluc3RhbmNlb2YgcnBjX2Vycm9yXzEuUnBjRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBzdHJlYW0ubm90aWZ5RXJyb3IodGhpcy5kYXRhLnN0YXR1cyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZXJyb3IgdHJhaWxlcnMgd2VyZSBtb2NrZWQsIG5vdGlmeSgpIGVycm9yIChzdHJlYW0gaXMgbm93IGNsb3NlZCB3aXRoIGVycm9yKSBhbmQgZXhpdC5cbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGEudHJhaWxlcnMgaW5zdGFuY2VvZiBycGNfZXJyb3JfMS5ScGNFcnJvcikge1xuICAgICAgICAgICAgICAgIHN0cmVhbS5ub3RpZnlFcnJvcih0aGlzLmRhdGEudHJhaWxlcnMpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHN0cmVhbSBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XG4gICAgICAgICAgICBzdHJlYW0ubm90aWZ5Q29tcGxldGUoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIENyZWF0ZXMgYSBwcm9taXNlIGZvciByZXNwb25zZSBzdGF0dXMgZnJvbSB0aGUgbW9jayBkYXRhLlxuICAgIHByb21pc2VTdGF0dXMoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gKF9hID0gdGhpcy5kYXRhLnN0YXR1cykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogVGVzdFRyYW5zcG9ydC5kZWZhdWx0U3RhdHVzO1xuICAgICAgICByZXR1cm4gc3RhdHVzIGluc3RhbmNlb2YgcnBjX2Vycm9yXzEuUnBjRXJyb3JcbiAgICAgICAgICAgID8gUHJvbWlzZS5yZWplY3Qoc3RhdHVzKVxuICAgICAgICAgICAgOiBQcm9taXNlLnJlc29sdmUoc3RhdHVzKTtcbiAgICB9XG4gICAgLy8gQ3JlYXRlcyBhIHByb21pc2UgZm9yIHJlc3BvbnNlIHRyYWlsZXJzIGZyb20gdGhlIG1vY2sgZGF0YS5cbiAgICBwcm9taXNlVHJhaWxlcnMoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgdHJhaWxlcnMgPSAoX2EgPSB0aGlzLmRhdGEudHJhaWxlcnMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFRlc3RUcmFuc3BvcnQuZGVmYXVsdFRyYWlsZXJzO1xuICAgICAgICByZXR1cm4gdHJhaWxlcnMgaW5zdGFuY2VvZiBycGNfZXJyb3JfMS5ScGNFcnJvclxuICAgICAgICAgICAgPyBQcm9taXNlLnJlamVjdCh0cmFpbGVycylcbiAgICAgICAgICAgIDogUHJvbWlzZS5yZXNvbHZlKHRyYWlsZXJzKTtcbiAgICB9XG4gICAgbWF5YmVTdXBwcmVzc1VuY2F1Z2h0KC4uLnByb21pc2UpIHtcbiAgICAgICAgaWYgKHRoaXMuc3VwcHJlc3NVbmNhdWdodFJlamVjdGlvbnMpIHtcbiAgICAgICAgICAgIGZvciAobGV0IHAgb2YgcHJvbWlzZSkge1xuICAgICAgICAgICAgICAgIHAuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIG1lcmdlT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBycGNfb3B0aW9uc18xLm1lcmdlUnBjT3B0aW9ucyh7fSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIHVuYXJ5KG1ldGhvZCwgaW5wdXQsIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCByZXF1ZXN0SGVhZGVycyA9IChfYSA9IG9wdGlvbnMubWV0YSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoge30sIGhlYWRlcnNQcm9taXNlID0gdGhpcy5wcm9taXNlSGVhZGVycygpXG4gICAgICAgICAgICAudGhlbihkZWxheSh0aGlzLmhlYWRlckRlbGF5LCBvcHRpb25zLmFib3J0KSksIHJlc3BvbnNlUHJvbWlzZSA9IGhlYWRlcnNQcm9taXNlXG4gICAgICAgICAgICAuY2F0Y2goXyA9PiB7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbihkZWxheSh0aGlzLnJlc3BvbnNlRGVsYXksIG9wdGlvbnMuYWJvcnQpKVxuICAgICAgICAgICAgLnRoZW4oXyA9PiB0aGlzLnByb21pc2VTaW5nbGVSZXNwb25zZShtZXRob2QpKSwgc3RhdHVzUHJvbWlzZSA9IHJlc3BvbnNlUHJvbWlzZVxuICAgICAgICAgICAgLmNhdGNoKF8gPT4ge1xuICAgICAgICB9KVxuICAgICAgICAgICAgLnRoZW4oZGVsYXkodGhpcy5hZnRlclJlc3BvbnNlRGVsYXksIG9wdGlvbnMuYWJvcnQpKVxuICAgICAgICAgICAgLnRoZW4oXyA9PiB0aGlzLnByb21pc2VTdGF0dXMoKSksIHRyYWlsZXJzUHJvbWlzZSA9IHJlc3BvbnNlUHJvbWlzZVxuICAgICAgICAgICAgLmNhdGNoKF8gPT4ge1xuICAgICAgICB9KVxuICAgICAgICAgICAgLnRoZW4oZGVsYXkodGhpcy5hZnRlclJlc3BvbnNlRGVsYXksIG9wdGlvbnMuYWJvcnQpKVxuICAgICAgICAgICAgLnRoZW4oXyA9PiB0aGlzLnByb21pc2VUcmFpbGVycygpKTtcbiAgICAgICAgdGhpcy5tYXliZVN1cHByZXNzVW5jYXVnaHQoc3RhdHVzUHJvbWlzZSwgdHJhaWxlcnNQcm9taXNlKTtcbiAgICAgICAgdGhpcy5sYXN0SW5wdXQgPSB7IHNpbmdsZTogaW5wdXQgfTtcbiAgICAgICAgcmV0dXJuIG5ldyB1bmFyeV9jYWxsXzEuVW5hcnlDYWxsKG1ldGhvZCwgcmVxdWVzdEhlYWRlcnMsIGlucHV0LCBoZWFkZXJzUHJvbWlzZSwgcmVzcG9uc2VQcm9taXNlLCBzdGF0dXNQcm9taXNlLCB0cmFpbGVyc1Byb21pc2UpO1xuICAgIH1cbiAgICBzZXJ2ZXJTdHJlYW1pbmcobWV0aG9kLCBpbnB1dCwgb3B0aW9ucykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzID0gKF9hID0gb3B0aW9ucy5tZXRhKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB7fSwgaGVhZGVyc1Byb21pc2UgPSB0aGlzLnByb21pc2VIZWFkZXJzKClcbiAgICAgICAgICAgIC50aGVuKGRlbGF5KHRoaXMuaGVhZGVyRGVsYXksIG9wdGlvbnMuYWJvcnQpKSwgb3V0cHV0U3RyZWFtID0gbmV3IHJwY19vdXRwdXRfc3RyZWFtXzEuUnBjT3V0cHV0U3RyZWFtQ29udHJvbGxlcigpLCByZXNwb25zZVN0cmVhbUNsb3NlZFByb21pc2UgPSBoZWFkZXJzUHJvbWlzZVxuICAgICAgICAgICAgLnRoZW4oZGVsYXkodGhpcy5yZXNwb25zZURlbGF5LCBvcHRpb25zLmFib3J0KSlcbiAgICAgICAgICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbigoKSA9PiB0aGlzLnN0cmVhbVJlc3BvbnNlcyhtZXRob2QsIG91dHB1dFN0cmVhbSwgb3B0aW9ucy5hYm9ydCkpXG4gICAgICAgICAgICAudGhlbihkZWxheSh0aGlzLmFmdGVyUmVzcG9uc2VEZWxheSwgb3B0aW9ucy5hYm9ydCkpLCBzdGF0dXNQcm9taXNlID0gcmVzcG9uc2VTdHJlYW1DbG9zZWRQcm9taXNlXG4gICAgICAgICAgICAudGhlbigoKSA9PiB0aGlzLnByb21pc2VTdGF0dXMoKSksIHRyYWlsZXJzUHJvbWlzZSA9IHJlc3BvbnNlU3RyZWFtQ2xvc2VkUHJvbWlzZVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5wcm9taXNlVHJhaWxlcnMoKSk7XG4gICAgICAgIHRoaXMubWF5YmVTdXBwcmVzc1VuY2F1Z2h0KHN0YXR1c1Byb21pc2UsIHRyYWlsZXJzUHJvbWlzZSk7XG4gICAgICAgIHRoaXMubGFzdElucHV0ID0geyBzaW5nbGU6IGlucHV0IH07XG4gICAgICAgIHJldHVybiBuZXcgc2VydmVyX3N0cmVhbWluZ19jYWxsXzEuU2VydmVyU3RyZWFtaW5nQ2FsbChtZXRob2QsIHJlcXVlc3RIZWFkZXJzLCBpbnB1dCwgaGVhZGVyc1Byb21pc2UsIG91dHB1dFN0cmVhbSwgc3RhdHVzUHJvbWlzZSwgdHJhaWxlcnNQcm9taXNlKTtcbiAgICB9XG4gICAgY2xpZW50U3RyZWFtaW5nKG1ldGhvZCwgb3B0aW9ucykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzID0gKF9hID0gb3B0aW9ucy5tZXRhKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB7fSwgaGVhZGVyc1Byb21pc2UgPSB0aGlzLnByb21pc2VIZWFkZXJzKClcbiAgICAgICAgICAgIC50aGVuKGRlbGF5KHRoaXMuaGVhZGVyRGVsYXksIG9wdGlvbnMuYWJvcnQpKSwgcmVzcG9uc2VQcm9taXNlID0gaGVhZGVyc1Byb21pc2VcbiAgICAgICAgICAgIC5jYXRjaChfID0+IHtcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuKGRlbGF5KHRoaXMucmVzcG9uc2VEZWxheSwgb3B0aW9ucy5hYm9ydCkpXG4gICAgICAgICAgICAudGhlbihfID0+IHRoaXMucHJvbWlzZVNpbmdsZVJlc3BvbnNlKG1ldGhvZCkpLCBzdGF0dXNQcm9taXNlID0gcmVzcG9uc2VQcm9taXNlXG4gICAgICAgICAgICAuY2F0Y2goXyA9PiB7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbihkZWxheSh0aGlzLmFmdGVyUmVzcG9uc2VEZWxheSwgb3B0aW9ucy5hYm9ydCkpXG4gICAgICAgICAgICAudGhlbihfID0+IHRoaXMucHJvbWlzZVN0YXR1cygpKSwgdHJhaWxlcnNQcm9taXNlID0gcmVzcG9uc2VQcm9taXNlXG4gICAgICAgICAgICAuY2F0Y2goXyA9PiB7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbihkZWxheSh0aGlzLmFmdGVyUmVzcG9uc2VEZWxheSwgb3B0aW9ucy5hYm9ydCkpXG4gICAgICAgICAgICAudGhlbihfID0+IHRoaXMucHJvbWlzZVRyYWlsZXJzKCkpO1xuICAgICAgICB0aGlzLm1heWJlU3VwcHJlc3NVbmNhdWdodChzdGF0dXNQcm9taXNlLCB0cmFpbGVyc1Byb21pc2UpO1xuICAgICAgICB0aGlzLmxhc3RJbnB1dCA9IG5ldyBUZXN0SW5wdXRTdHJlYW0odGhpcy5kYXRhLCBvcHRpb25zLmFib3J0KTtcbiAgICAgICAgcmV0dXJuIG5ldyBjbGllbnRfc3RyZWFtaW5nX2NhbGxfMS5DbGllbnRTdHJlYW1pbmdDYWxsKG1ldGhvZCwgcmVxdWVzdEhlYWRlcnMsIHRoaXMubGFzdElucHV0LCBoZWFkZXJzUHJvbWlzZSwgcmVzcG9uc2VQcm9taXNlLCBzdGF0dXNQcm9taXNlLCB0cmFpbGVyc1Byb21pc2UpO1xuICAgIH1cbiAgICBkdXBsZXgobWV0aG9kLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgcmVxdWVzdEhlYWRlcnMgPSAoX2EgPSBvcHRpb25zLm1ldGEpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHt9LCBoZWFkZXJzUHJvbWlzZSA9IHRoaXMucHJvbWlzZUhlYWRlcnMoKVxuICAgICAgICAgICAgLnRoZW4oZGVsYXkodGhpcy5oZWFkZXJEZWxheSwgb3B0aW9ucy5hYm9ydCkpLCBvdXRwdXRTdHJlYW0gPSBuZXcgcnBjX291dHB1dF9zdHJlYW1fMS5ScGNPdXRwdXRTdHJlYW1Db250cm9sbGVyKCksIHJlc3BvbnNlU3RyZWFtQ2xvc2VkUHJvbWlzZSA9IGhlYWRlcnNQcm9taXNlXG4gICAgICAgICAgICAudGhlbihkZWxheSh0aGlzLnJlc3BvbnNlRGVsYXksIG9wdGlvbnMuYWJvcnQpKVxuICAgICAgICAgICAgLmNhdGNoKCgpID0+IHtcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHRoaXMuc3RyZWFtUmVzcG9uc2VzKG1ldGhvZCwgb3V0cHV0U3RyZWFtLCBvcHRpb25zLmFib3J0KSlcbiAgICAgICAgICAgIC50aGVuKGRlbGF5KHRoaXMuYWZ0ZXJSZXNwb25zZURlbGF5LCBvcHRpb25zLmFib3J0KSksIHN0YXR1c1Byb21pc2UgPSByZXNwb25zZVN0cmVhbUNsb3NlZFByb21pc2VcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHRoaXMucHJvbWlzZVN0YXR1cygpKSwgdHJhaWxlcnNQcm9taXNlID0gcmVzcG9uc2VTdHJlYW1DbG9zZWRQcm9taXNlXG4gICAgICAgICAgICAudGhlbigoKSA9PiB0aGlzLnByb21pc2VUcmFpbGVycygpKTtcbiAgICAgICAgdGhpcy5tYXliZVN1cHByZXNzVW5jYXVnaHQoc3RhdHVzUHJvbWlzZSwgdHJhaWxlcnNQcm9taXNlKTtcbiAgICAgICAgdGhpcy5sYXN0SW5wdXQgPSBuZXcgVGVzdElucHV0U3RyZWFtKHRoaXMuZGF0YSwgb3B0aW9ucy5hYm9ydCk7XG4gICAgICAgIHJldHVybiBuZXcgZHVwbGV4X3N0cmVhbWluZ19jYWxsXzEuRHVwbGV4U3RyZWFtaW5nQ2FsbChtZXRob2QsIHJlcXVlc3RIZWFkZXJzLCB0aGlzLmxhc3RJbnB1dCwgaGVhZGVyc1Byb21pc2UsIG91dHB1dFN0cmVhbSwgc3RhdHVzUHJvbWlzZSwgdHJhaWxlcnNQcm9taXNlKTtcbiAgICB9XG59XG5leHBvcnRzLlRlc3RUcmFuc3BvcnQgPSBUZXN0VHJhbnNwb3J0O1xuVGVzdFRyYW5zcG9ydC5kZWZhdWx0SGVhZGVycyA9IHtcbiAgICByZXNwb25zZUhlYWRlcjogXCJ0ZXN0XCJcbn07XG5UZXN0VHJhbnNwb3J0LmRlZmF1bHRTdGF0dXMgPSB7XG4gICAgY29kZTogXCJPS1wiLCBkZXRhaWw6IFwiYWxsIGdvb2RcIlxufTtcblRlc3RUcmFuc3BvcnQuZGVmYXVsdFRyYWlsZXJzID0ge1xuICAgIHJlc3BvbnNlVHJhaWxlcjogXCJ0ZXN0XCJcbn07XG5mdW5jdGlvbiBkZWxheShtcywgYWJvcnQpIHtcbiAgICByZXR1cm4gKHYpID0+IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgaWYgKGFib3J0ID09PSBudWxsIHx8IGFib3J0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBhYm9ydC5hYm9ydGVkKSB7XG4gICAgICAgICAgICByZWplY3QobmV3IHJwY19lcnJvcl8xLlJwY0Vycm9yKFwidXNlciBjYW5jZWxcIiwgXCJDQU5DRUxMRURcIikpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgaWQgPSBzZXRUaW1lb3V0KCgpID0+IHJlc29sdmUodiksIG1zKTtcbiAgICAgICAgICAgIGlmIChhYm9ydCkge1xuICAgICAgICAgICAgICAgIGFib3J0LmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBldiA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChpZCk7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgcnBjX2Vycm9yXzEuUnBjRXJyb3IoXCJ1c2VyIGNhbmNlbFwiLCBcIkNBTkNFTExFRFwiKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbmNsYXNzIFRlc3RJbnB1dFN0cmVhbSB7XG4gICAgY29uc3RydWN0b3IoZGF0YSwgYWJvcnQpIHtcbiAgICAgICAgdGhpcy5fY29tcGxldGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3NlbnQgPSBbXTtcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICAgICAgdGhpcy5hYm9ydCA9IGFib3J0O1xuICAgIH1cbiAgICBnZXQgc2VudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbnQ7XG4gICAgfVxuICAgIGdldCBjb21wbGV0ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb21wbGV0ZWQ7XG4gICAgfVxuICAgIHNlbmQobWVzc2FnZSkge1xuICAgICAgICBpZiAodGhpcy5kYXRhLmlucHV0TWVzc2FnZSBpbnN0YW5jZW9mIHJwY19lcnJvcl8xLlJwY0Vycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QodGhpcy5kYXRhLmlucHV0TWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGVsYXlNcyA9IHRoaXMuZGF0YS5pbnB1dE1lc3NhZ2UgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyAxMFxuICAgICAgICAgICAgOiB0aGlzLmRhdGEuaW5wdXRNZXNzYWdlO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZClcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3NlbnQucHVzaChtZXNzYWdlKTtcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuKGRlbGF5KGRlbGF5TXMsIHRoaXMuYWJvcnQpKTtcbiAgICB9XG4gICAgY29tcGxldGUoKSB7XG4gICAgICAgIGlmICh0aGlzLmRhdGEuaW5wdXRDb21wbGV0ZSBpbnN0YW5jZW9mIHJwY19lcnJvcl8xLlJwY0Vycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QodGhpcy5kYXRhLmlucHV0Q29tcGxldGUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRlbGF5TXMgPSB0aGlzLmRhdGEuaW5wdXRDb21wbGV0ZSA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IDEwXG4gICAgICAgICAgICA6IHRoaXMuZGF0YS5pbnB1dENvbXBsZXRlO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZClcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2NvbXBsZXRlZCA9IHRydWU7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbihkZWxheShkZWxheU1zLCB0aGlzLmFib3J0KSk7XG4gICAgfVxufVxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc3RhY2tEdXBsZXhTdHJlYW1pbmdJbnRlcmNlcHRvcnMgPSBleHBvcnRzLnN0YWNrQ2xpZW50U3RyZWFtaW5nSW50ZXJjZXB0b3JzID0gZXhwb3J0cy5zdGFja1NlcnZlclN0cmVhbWluZ0ludGVyY2VwdG9ycyA9IGV4cG9ydHMuc3RhY2tVbmFyeUludGVyY2VwdG9ycyA9IGV4cG9ydHMuc3RhY2tJbnRlcmNlcHQgPSB2b2lkIDA7XG5jb25zdCBydW50aW1lXzEgPSByZXF1aXJlKFwiQHByb3RvYnVmLXRzL3J1bnRpbWVcIik7XG4vKipcbiAqIENyZWF0ZXMgYSBcInN0YWNrXCIgb2Ygb2YgYWxsIGludGVyY2VwdG9ycyBzcGVjaWZpZWQgaW4gdGhlIGdpdmVuIGBScGNPcHRpb25zYC5cbiAqIFVzZWQgYnkgZ2VuZXJhdGVkIGNsaWVudCBpbXBsZW1lbnRhdGlvbnMuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gc3RhY2tJbnRlcmNlcHQoa2luZCwgdHJhbnNwb3J0LCBtZXRob2QsIG9wdGlvbnMsIGlucHV0KSB7XG4gICAgdmFyIF9hLCBfYiwgX2MsIF9kO1xuICAgIGlmIChraW5kID09IFwidW5hcnlcIikge1xuICAgICAgICBsZXQgdGFpbCA9IChtdGQsIGlucCwgb3B0KSA9PiB0cmFuc3BvcnQudW5hcnkobXRkLCBpbnAsIG9wdCk7XG4gICAgICAgIGZvciAoY29uc3QgY3VyciBvZiAoKF9hID0gb3B0aW9ucy5pbnRlcmNlcHRvcnMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFtdKS5maWx0ZXIoaSA9PiBpLmludGVyY2VwdFVuYXJ5KS5yZXZlcnNlKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IG5leHQgPSB0YWlsO1xuICAgICAgICAgICAgdGFpbCA9IChtdGQsIGlucCwgb3B0KSA9PiBjdXJyLmludGVyY2VwdFVuYXJ5KG5leHQsIG10ZCwgaW5wLCBvcHQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0YWlsKG1ldGhvZCwgaW5wdXQsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBpZiAoa2luZCA9PSBcInNlcnZlclN0cmVhbWluZ1wiKSB7XG4gICAgICAgIGxldCB0YWlsID0gKG10ZCwgaW5wLCBvcHQpID0+IHRyYW5zcG9ydC5zZXJ2ZXJTdHJlYW1pbmcobXRkLCBpbnAsIG9wdCk7XG4gICAgICAgIGZvciAoY29uc3QgY3VyciBvZiAoKF9iID0gb3B0aW9ucy5pbnRlcmNlcHRvcnMpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IFtdKS5maWx0ZXIoaSA9PiBpLmludGVyY2VwdFNlcnZlclN0cmVhbWluZykucmV2ZXJzZSgpKSB7XG4gICAgICAgICAgICBjb25zdCBuZXh0ID0gdGFpbDtcbiAgICAgICAgICAgIHRhaWwgPSAobXRkLCBpbnAsIG9wdCkgPT4gY3Vyci5pbnRlcmNlcHRTZXJ2ZXJTdHJlYW1pbmcobmV4dCwgbXRkLCBpbnAsIG9wdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRhaWwobWV0aG9kLCBpbnB1dCwgb3B0aW9ucyk7XG4gICAgfVxuICAgIGlmIChraW5kID09IFwiY2xpZW50U3RyZWFtaW5nXCIpIHtcbiAgICAgICAgbGV0IHRhaWwgPSAobXRkLCBvcHQpID0+IHRyYW5zcG9ydC5jbGllbnRTdHJlYW1pbmcobXRkLCBvcHQpO1xuICAgICAgICBmb3IgKGNvbnN0IGN1cnIgb2YgKChfYyA9IG9wdGlvbnMuaW50ZXJjZXB0b3JzKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiBbXSkuZmlsdGVyKGkgPT4gaS5pbnRlcmNlcHRDbGllbnRTdHJlYW1pbmcpLnJldmVyc2UoKSkge1xuICAgICAgICAgICAgY29uc3QgbmV4dCA9IHRhaWw7XG4gICAgICAgICAgICB0YWlsID0gKG10ZCwgb3B0KSA9PiBjdXJyLmludGVyY2VwdENsaWVudFN0cmVhbWluZyhuZXh0LCBtdGQsIG9wdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRhaWwobWV0aG9kLCBvcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKGtpbmQgPT0gXCJkdXBsZXhcIikge1xuICAgICAgICBsZXQgdGFpbCA9IChtdGQsIG9wdCkgPT4gdHJhbnNwb3J0LmR1cGxleChtdGQsIG9wdCk7XG4gICAgICAgIGZvciAoY29uc3QgY3VyciBvZiAoKF9kID0gb3B0aW9ucy5pbnRlcmNlcHRvcnMpICE9PSBudWxsICYmIF9kICE9PSB2b2lkIDAgPyBfZCA6IFtdKS5maWx0ZXIoaSA9PiBpLmludGVyY2VwdER1cGxleCkucmV2ZXJzZSgpKSB7XG4gICAgICAgICAgICBjb25zdCBuZXh0ID0gdGFpbDtcbiAgICAgICAgICAgIHRhaWwgPSAobXRkLCBvcHQpID0+IGN1cnIuaW50ZXJjZXB0RHVwbGV4KG5leHQsIG10ZCwgb3B0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFpbChtZXRob2QsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBydW50aW1lXzEuYXNzZXJ0TmV2ZXIoa2luZCk7XG59XG5leHBvcnRzLnN0YWNrSW50ZXJjZXB0ID0gc3RhY2tJbnRlcmNlcHQ7XG4vKipcbiAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIGJ5IGBzdGFja0ludGVyY2VwdCgpYCwgc3RpbGwgaGVyZSB0byBzdXBwb3J0IG9sZGVyIGdlbmVyYXRlZCBjb2RlXG4gKi9cbmZ1bmN0aW9uIHN0YWNrVW5hcnlJbnRlcmNlcHRvcnModHJhbnNwb3J0LCBtZXRob2QsIGlucHV0LCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIHN0YWNrSW50ZXJjZXB0KFwidW5hcnlcIiwgdHJhbnNwb3J0LCBtZXRob2QsIG9wdGlvbnMsIGlucHV0KTtcbn1cbmV4cG9ydHMuc3RhY2tVbmFyeUludGVyY2VwdG9ycyA9IHN0YWNrVW5hcnlJbnRlcmNlcHRvcnM7XG4vKipcbiAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIGJ5IGBzdGFja0ludGVyY2VwdCgpYCwgc3RpbGwgaGVyZSB0byBzdXBwb3J0IG9sZGVyIGdlbmVyYXRlZCBjb2RlXG4gKi9cbmZ1bmN0aW9uIHN0YWNrU2VydmVyU3RyZWFtaW5nSW50ZXJjZXB0b3JzKHRyYW5zcG9ydCwgbWV0aG9kLCBpbnB1dCwgb3B0aW9ucykge1xuICAgIHJldHVybiBzdGFja0ludGVyY2VwdChcInNlcnZlclN0cmVhbWluZ1wiLCB0cmFuc3BvcnQsIG1ldGhvZCwgb3B0aW9ucywgaW5wdXQpO1xufVxuZXhwb3J0cy5zdGFja1NlcnZlclN0cmVhbWluZ0ludGVyY2VwdG9ycyA9IHN0YWNrU2VydmVyU3RyZWFtaW5nSW50ZXJjZXB0b3JzO1xuLyoqXG4gKiBAZGVwcmVjYXRlZCByZXBsYWNlZCBieSBgc3RhY2tJbnRlcmNlcHQoKWAsIHN0aWxsIGhlcmUgdG8gc3VwcG9ydCBvbGRlciBnZW5lcmF0ZWQgY29kZVxuICovXG5mdW5jdGlvbiBzdGFja0NsaWVudFN0cmVhbWluZ0ludGVyY2VwdG9ycyh0cmFuc3BvcnQsIG1ldGhvZCwgb3B0aW9ucykge1xuICAgIHJldHVybiBzdGFja0ludGVyY2VwdChcImNsaWVudFN0cmVhbWluZ1wiLCB0cmFuc3BvcnQsIG1ldGhvZCwgb3B0aW9ucyk7XG59XG5leHBvcnRzLnN0YWNrQ2xpZW50U3RyZWFtaW5nSW50ZXJjZXB0b3JzID0gc3RhY2tDbGllbnRTdHJlYW1pbmdJbnRlcmNlcHRvcnM7XG4vKipcbiAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIGJ5IGBzdGFja0ludGVyY2VwdCgpYCwgc3RpbGwgaGVyZSB0byBzdXBwb3J0IG9sZGVyIGdlbmVyYXRlZCBjb2RlXG4gKi9cbmZ1bmN0aW9uIHN0YWNrRHVwbGV4U3RyZWFtaW5nSW50ZXJjZXB0b3JzKHRyYW5zcG9ydCwgbWV0aG9kLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIHN0YWNrSW50ZXJjZXB0KFwiZHVwbGV4XCIsIHRyYW5zcG9ydCwgbWV0aG9kLCBvcHRpb25zKTtcbn1cbmV4cG9ydHMuc3RhY2tEdXBsZXhTdHJlYW1pbmdJbnRlcmNlcHRvcnMgPSBzdGFja0R1cGxleFN0cmVhbWluZ0ludGVyY2VwdG9ycztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlNlcnZlckNhbGxDb250ZXh0Q29udHJvbGxlciA9IHZvaWQgMDtcbmNsYXNzIFNlcnZlckNhbGxDb250ZXh0Q29udHJvbGxlciB7XG4gICAgY29uc3RydWN0b3IobWV0aG9kLCBoZWFkZXJzLCBkZWFkbGluZSwgc2VuZFJlc3BvbnNlSGVhZGVyc0ZuLCBkZWZhdWx0U3RhdHVzID0geyBjb2RlOiAnT0snLCBkZXRhaWw6ICcnIH0pIHtcbiAgICAgICAgdGhpcy5fY2FuY2VsbGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2xpc3RlbmVycyA9IFtdO1xuICAgICAgICB0aGlzLm1ldGhvZCA9IG1ldGhvZDtcbiAgICAgICAgdGhpcy5oZWFkZXJzID0gaGVhZGVycztcbiAgICAgICAgdGhpcy5kZWFkbGluZSA9IGRlYWRsaW5lO1xuICAgICAgICB0aGlzLnRyYWlsZXJzID0ge307XG4gICAgICAgIHRoaXMuX3NlbmRSSCA9IHNlbmRSZXNwb25zZUhlYWRlcnNGbjtcbiAgICAgICAgdGhpcy5zdGF0dXMgPSBkZWZhdWx0U3RhdHVzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIGNhbGwgY2FuY2VsbGVkLlxuICAgICAqXG4gICAgICogSW52b2tlcyBhbGwgY2FsbGJhY2tzIHJlZ2lzdGVyZWQgd2l0aCBvbkNhbmNlbCgpIGFuZFxuICAgICAqIHNldHMgYGNhbmNlbGxlZCA9IHRydWVgLlxuICAgICAqL1xuICAgIG5vdGlmeUNhbmNlbGxlZCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9jYW5jZWxsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2NhbmNlbGxlZCA9IHRydWU7XG4gICAgICAgICAgICBmb3IgKGxldCBsIG9mIHRoaXMuX2xpc3RlbmVycykge1xuICAgICAgICAgICAgICAgIGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZW5kIHJlc3BvbnNlIGhlYWRlcnMuXG4gICAgICovXG4gICAgc2VuZFJlc3BvbnNlSGVhZGVycyhkYXRhKSB7XG4gICAgICAgIHRoaXMuX3NlbmRSSChkYXRhKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSXMgdGhlIGNhbGwgY2FuY2VsbGVkP1xuICAgICAqXG4gICAgICogV2hlbiB0aGUgY2xpZW50IGNsb3NlcyB0aGUgY29ubmVjdGlvbiBiZWZvcmUgdGhlIHNlcnZlclxuICAgICAqIGlzIGRvbmUsIHRoZSBjYWxsIGlzIGNhbmNlbGxlZC5cbiAgICAgKlxuICAgICAqIElmIHlvdSB3YW50IHRvIGNhbmNlbCBhIHJlcXVlc3Qgb24gdGhlIHNlcnZlciwgdGhyb3cgYVxuICAgICAqIFJwY0Vycm9yIHdpdGggdGhlIENBTkNFTExFRCBzdGF0dXMgY29kZS5cbiAgICAgKi9cbiAgICBnZXQgY2FuY2VsbGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2FuY2VsbGVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGQgYSBjYWxsYmFjayBmb3IgY2FuY2VsbGF0aW9uLlxuICAgICAqL1xuICAgIG9uQ2FuY2VsKGNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IGwgPSB0aGlzLl9saXN0ZW5lcnM7XG4gICAgICAgIGwucHVzaChjYWxsYmFjayk7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBsZXQgaSA9IGwuaW5kZXhPZihjYWxsYmFjayk7XG4gICAgICAgICAgICBpZiAoaSA+PSAwKVxuICAgICAgICAgICAgICAgIGwuc3BsaWNlKGksIDEpO1xuICAgICAgICB9O1xuICAgIH1cbn1cbmV4cG9ydHMuU2VydmVyQ2FsbENvbnRleHRDb250cm9sbGVyID0gU2VydmVyQ2FsbENvbnRleHRDb250cm9sbGVyO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIFB1YmxpYyBBUEkgb2YgdGhlIHJwYyBydW50aW1lLlxuLy8gTm90ZTogd2UgZG8gbm90IHVzZSBgZXhwb3J0ICogZnJvbSAuLi5gIHRvIGhlbHAgdHJlZSBzaGFrZXJzLFxuLy8gd2VicGFjayB2ZXJib3NlIG91dHB1dCBoaW50cyB0aGF0IHRoaXMgc2hvdWxkIGJlIHVzZWZ1bFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHNlcnZpY2VfdHlwZV8xID0gcmVxdWlyZShcIi4vc2VydmljZS10eXBlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiU2VydmljZVR5cGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNlcnZpY2VfdHlwZV8xLlNlcnZpY2VUeXBlOyB9IH0pO1xudmFyIHJlZmxlY3Rpb25faW5mb18xID0gcmVxdWlyZShcIi4vcmVmbGVjdGlvbi1pbmZvXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmVhZE1ldGhvZE9wdGlvbnNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlZmxlY3Rpb25faW5mb18xLnJlYWRNZXRob2RPcHRpb25zOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmVhZE1ldGhvZE9wdGlvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVmbGVjdGlvbl9pbmZvXzEucmVhZE1ldGhvZE9wdGlvbjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlYWRTZXJ2aWNlT3B0aW9uXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZWZsZWN0aW9uX2luZm9fMS5yZWFkU2VydmljZU9wdGlvbjsgfSB9KTtcbnZhciBycGNfZXJyb3JfMSA9IHJlcXVpcmUoXCIuL3JwYy1lcnJvclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlJwY0Vycm9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBycGNfZXJyb3JfMS5ScGNFcnJvcjsgfSB9KTtcbnZhciBycGNfb3B0aW9uc18xID0gcmVxdWlyZShcIi4vcnBjLW9wdGlvbnNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtZXJnZVJwY09wdGlvbnNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJwY19vcHRpb25zXzEubWVyZ2VScGNPcHRpb25zOyB9IH0pO1xudmFyIHJwY19vdXRwdXRfc3RyZWFtXzEgPSByZXF1aXJlKFwiLi9ycGMtb3V0cHV0LXN0cmVhbVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlJwY091dHB1dFN0cmVhbUNvbnRyb2xsZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJwY19vdXRwdXRfc3RyZWFtXzEuUnBjT3V0cHV0U3RyZWFtQ29udHJvbGxlcjsgfSB9KTtcbnZhciB0ZXN0X3RyYW5zcG9ydF8xID0gcmVxdWlyZShcIi4vdGVzdC10cmFuc3BvcnRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJUZXN0VHJhbnNwb3J0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0ZXN0X3RyYW5zcG9ydF8xLlRlc3RUcmFuc3BvcnQ7IH0gfSk7XG52YXIgZGVmZXJyZWRfMSA9IHJlcXVpcmUoXCIuL2RlZmVycmVkXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRGVmZXJyZWRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRlZmVycmVkXzEuRGVmZXJyZWQ7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJEZWZlcnJlZFN0YXRlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkZWZlcnJlZF8xLkRlZmVycmVkU3RhdGU7IH0gfSk7XG52YXIgZHVwbGV4X3N0cmVhbWluZ19jYWxsXzEgPSByZXF1aXJlKFwiLi9kdXBsZXgtc3RyZWFtaW5nLWNhbGxcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJEdXBsZXhTdHJlYW1pbmdDYWxsXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkdXBsZXhfc3RyZWFtaW5nX2NhbGxfMS5EdXBsZXhTdHJlYW1pbmdDYWxsOyB9IH0pO1xudmFyIGNsaWVudF9zdHJlYW1pbmdfY2FsbF8xID0gcmVxdWlyZShcIi4vY2xpZW50LXN0cmVhbWluZy1jYWxsXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQ2xpZW50U3RyZWFtaW5nQ2FsbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY2xpZW50X3N0cmVhbWluZ19jYWxsXzEuQ2xpZW50U3RyZWFtaW5nQ2FsbDsgfSB9KTtcbnZhciBzZXJ2ZXJfc3RyZWFtaW5nX2NhbGxfMSA9IHJlcXVpcmUoXCIuL3NlcnZlci1zdHJlYW1pbmctY2FsbFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlNlcnZlclN0cmVhbWluZ0NhbGxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNlcnZlcl9zdHJlYW1pbmdfY2FsbF8xLlNlcnZlclN0cmVhbWluZ0NhbGw7IH0gfSk7XG52YXIgdW5hcnlfY2FsbF8xID0gcmVxdWlyZShcIi4vdW5hcnktY2FsbFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlVuYXJ5Q2FsbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdW5hcnlfY2FsbF8xLlVuYXJ5Q2FsbDsgfSB9KTtcbnZhciBycGNfaW50ZXJjZXB0b3JfMSA9IHJlcXVpcmUoXCIuL3JwYy1pbnRlcmNlcHRvclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0YWNrSW50ZXJjZXB0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBycGNfaW50ZXJjZXB0b3JfMS5zdGFja0ludGVyY2VwdDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0YWNrRHVwbGV4U3RyZWFtaW5nSW50ZXJjZXB0b3JzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBycGNfaW50ZXJjZXB0b3JfMS5zdGFja0R1cGxleFN0cmVhbWluZ0ludGVyY2VwdG9yczsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0YWNrQ2xpZW50U3RyZWFtaW5nSW50ZXJjZXB0b3JzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBycGNfaW50ZXJjZXB0b3JfMS5zdGFja0NsaWVudFN0cmVhbWluZ0ludGVyY2VwdG9yczsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0YWNrU2VydmVyU3RyZWFtaW5nSW50ZXJjZXB0b3JzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBycGNfaW50ZXJjZXB0b3JfMS5zdGFja1NlcnZlclN0cmVhbWluZ0ludGVyY2VwdG9yczsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0YWNrVW5hcnlJbnRlcmNlcHRvcnNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJwY19pbnRlcmNlcHRvcl8xLnN0YWNrVW5hcnlJbnRlcmNlcHRvcnM7IH0gfSk7XG52YXIgc2VydmVyX2NhbGxfY29udGV4dF8xID0gcmVxdWlyZShcIi4vc2VydmVyLWNhbGwtY29udGV4dFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlNlcnZlckNhbGxDb250ZXh0Q29udHJvbGxlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2VydmVyX2NhbGxfY29udGV4dF8xLlNlcnZlckNhbGxDb250ZXh0Q29udHJvbGxlcjsgfSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkFydGlmYWN0U2VydmljZSA9IGV4cG9ydHMuRGVsZXRlQXJ0aWZhY3RSZXNwb25zZSA9IGV4cG9ydHMuRGVsZXRlQXJ0aWZhY3RSZXF1ZXN0ID0gZXhwb3J0cy5HZXRTaWduZWRBcnRpZmFjdFVSTFJlc3BvbnNlID0gZXhwb3J0cy5HZXRTaWduZWRBcnRpZmFjdFVSTFJlcXVlc3QgPSBleHBvcnRzLkxpc3RBcnRpZmFjdHNSZXNwb25zZV9Nb25vbGl0aEFydGlmYWN0ID0gZXhwb3J0cy5MaXN0QXJ0aWZhY3RzUmVzcG9uc2UgPSBleHBvcnRzLkxpc3RBcnRpZmFjdHNSZXF1ZXN0ID0gZXhwb3J0cy5GaW5hbGl6ZUFydGlmYWN0UmVzcG9uc2UgPSBleHBvcnRzLkZpbmFsaXplQXJ0aWZhY3RSZXF1ZXN0ID0gZXhwb3J0cy5DcmVhdGVBcnRpZmFjdFJlc3BvbnNlID0gZXhwb3J0cy5DcmVhdGVBcnRpZmFjdFJlcXVlc3QgPSB2b2lkIDA7XG4vLyBAZ2VuZXJhdGVkIGJ5IHByb3RvYnVmLXRzIDIuOS4xIHdpdGggcGFyYW1ldGVyIGxvbmdfdHlwZV9zdHJpbmcsY2xpZW50X25vbmUsZ2VuZXJhdGVfZGVwZW5kZW5jaWVzXG4vLyBAZ2VuZXJhdGVkIGZyb20gcHJvdG9idWYgZmlsZSBcInJlc3VsdHMvYXBpL3YxL2FydGlmYWN0LnByb3RvXCIgKHBhY2thZ2UgXCJnaXRodWIuYWN0aW9ucy5yZXN1bHRzLmFwaS52MVwiLCBzeW50YXggcHJvdG8zKVxuLy8gdHNsaW50OmRpc2FibGVcbmNvbnN0IHJ1bnRpbWVfcnBjXzEgPSByZXF1aXJlKFwiQHByb3RvYnVmLXRzL3J1bnRpbWUtcnBjXCIpO1xuY29uc3QgcnVudGltZV8xID0gcmVxdWlyZShcIkBwcm90b2J1Zi10cy9ydW50aW1lXCIpO1xuY29uc3QgcnVudGltZV8yID0gcmVxdWlyZShcIkBwcm90b2J1Zi10cy9ydW50aW1lXCIpO1xuY29uc3QgcnVudGltZV8zID0gcmVxdWlyZShcIkBwcm90b2J1Zi10cy9ydW50aW1lXCIpO1xuY29uc3QgcnVudGltZV80ID0gcmVxdWlyZShcIkBwcm90b2J1Zi10cy9ydW50aW1lXCIpO1xuY29uc3QgcnVudGltZV81ID0gcmVxdWlyZShcIkBwcm90b2J1Zi10cy9ydW50aW1lXCIpO1xuY29uc3Qgd3JhcHBlcnNfMSA9IHJlcXVpcmUoXCIuLi8uLi8uLi9nb29nbGUvcHJvdG9idWYvd3JhcHBlcnNcIik7XG5jb25zdCB3cmFwcGVyc18yID0gcmVxdWlyZShcIi4uLy4uLy4uL2dvb2dsZS9wcm90b2J1Zi93cmFwcGVyc1wiKTtcbmNvbnN0IHRpbWVzdGFtcF8xID0gcmVxdWlyZShcIi4uLy4uLy4uL2dvb2dsZS9wcm90b2J1Zi90aW1lc3RhbXBcIik7XG4vLyBAZ2VuZXJhdGVkIG1lc3NhZ2UgdHlwZSB3aXRoIHJlZmxlY3Rpb24gaW5mb3JtYXRpb24sIG1heSBwcm92aWRlIHNwZWVkIG9wdGltaXplZCBtZXRob2RzXG5jbGFzcyBDcmVhdGVBcnRpZmFjdFJlcXVlc3QkVHlwZSBleHRlbmRzIHJ1bnRpbWVfNS5NZXNzYWdlVHlwZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuQ3JlYXRlQXJ0aWZhY3RSZXF1ZXN0XCIsIFtcbiAgICAgICAgICAgIHsgbm86IDEsIG5hbWU6IFwid29ya2Zsb3dfcnVuX2JhY2tlbmRfaWRcIiwga2luZDogXCJzY2FsYXJcIiwgVDogOSAvKlNjYWxhclR5cGUuU1RSSU5HKi8gfSxcbiAgICAgICAgICAgIHsgbm86IDIsIG5hbWU6IFwid29ya2Zsb3dfam9iX3J1bl9iYWNrZW5kX2lkXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDkgLypTY2FsYXJUeXBlLlNUUklORyovIH0sXG4gICAgICAgICAgICB7IG5vOiAzLCBuYW1lOiBcIm5hbWVcIiwga2luZDogXCJzY2FsYXJcIiwgVDogOSAvKlNjYWxhclR5cGUuU1RSSU5HKi8gfSxcbiAgICAgICAgICAgIHsgbm86IDQsIG5hbWU6IFwiZXhwaXJlc19hdFwiLCBraW5kOiBcIm1lc3NhZ2VcIiwgVDogKCkgPT4gdGltZXN0YW1wXzEuVGltZXN0YW1wIH0sXG4gICAgICAgICAgICB7IG5vOiA1LCBuYW1lOiBcInZlcnNpb25cIiwga2luZDogXCJzY2FsYXJcIiwgVDogNSAvKlNjYWxhclR5cGUuSU5UMzIqLyB9XG4gICAgICAgIF0pO1xuICAgIH1cbiAgICBjcmVhdGUodmFsdWUpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IHsgd29ya2Zsb3dSdW5CYWNrZW5kSWQ6IFwiXCIsIHdvcmtmbG93Sm9iUnVuQmFja2VuZElkOiBcIlwiLCBuYW1lOiBcIlwiLCB2ZXJzaW9uOiAwIH07XG4gICAgICAgIGdsb2JhbFRoaXMuT2JqZWN0LmRlZmluZVByb3BlcnR5KG1lc3NhZ2UsIHJ1bnRpbWVfNC5NRVNTQUdFX1RZUEUsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0aGlzIH0pO1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICgwLCBydW50aW1lXzMucmVmbGVjdGlvbk1lcmdlUGFydGlhbCkodGhpcywgbWVzc2FnZSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlSZWFkKHJlYWRlciwgbGVuZ3RoLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSB0YXJnZXQgIT09IG51bGwgJiYgdGFyZ2V0ICE9PSB2b2lkIDAgPyB0YXJnZXQgOiB0aGlzLmNyZWF0ZSgpLCBlbmQgPSByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgbGV0IFtmaWVsZE5vLCB3aXJlVHlwZV0gPSByZWFkZXIudGFnKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkTm8pIHtcbiAgICAgICAgICAgICAgICBjYXNlIC8qIHN0cmluZyB3b3JrZmxvd19ydW5fYmFja2VuZF9pZCAqLyAxOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLndvcmtmbG93UnVuQmFja2VuZElkID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIC8qIHN0cmluZyB3b3JrZmxvd19qb2JfcnVuX2JhY2tlbmRfaWQgKi8gMjpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS53b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZCA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBzdHJpbmcgbmFtZSAqLyAzOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLm5hbWUgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgLyogZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCBleHBpcmVzX2F0ICovIDQ6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZXhwaXJlc0F0ID0gdGltZXN0YW1wXzEuVGltZXN0YW1wLmludGVybmFsQmluYXJ5UmVhZChyZWFkZXIsIHJlYWRlci51aW50MzIoKSwgb3B0aW9ucywgbWVzc2FnZS5leHBpcmVzQXQpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIC8qIGludDMyIHZlcnNpb24gKi8gNTpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS52ZXJzaW9uID0gcmVhZGVyLmludDMyKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGxldCB1ID0gb3B0aW9ucy5yZWFkVW5rbm93bkZpZWxkO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSA9PT0gXCJ0aHJvd1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGdsb2JhbFRoaXMuRXJyb3IoYFVua25vd24gZmllbGQgJHtmaWVsZE5vfSAod2lyZSB0eXBlICR7d2lyZVR5cGV9KSBmb3IgJHt0aGlzLnR5cGVOYW1lfWApO1xuICAgICAgICAgICAgICAgICAgICBsZXQgZCA9IHJlYWRlci5za2lwKHdpcmVUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgKHUgPT09IHRydWUgPyBydW50aW1lXzIuVW5rbm93bkZpZWxkSGFuZGxlci5vblJlYWQgOiB1KSh0aGlzLnR5cGVOYW1lLCBtZXNzYWdlLCBmaWVsZE5vLCB3aXJlVHlwZSwgZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5V3JpdGUobWVzc2FnZSwgd3JpdGVyLCBvcHRpb25zKSB7XG4gICAgICAgIC8qIHN0cmluZyB3b3JrZmxvd19ydW5fYmFja2VuZF9pZCA9IDE7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLndvcmtmbG93UnVuQmFja2VuZElkICE9PSBcIlwiKVxuICAgICAgICAgICAgd3JpdGVyLnRhZygxLCBydW50aW1lXzEuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKS5zdHJpbmcobWVzc2FnZS53b3JrZmxvd1J1bkJhY2tlbmRJZCk7XG4gICAgICAgIC8qIHN0cmluZyB3b3JrZmxvd19qb2JfcnVuX2JhY2tlbmRfaWQgPSAyOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS53b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZCAhPT0gXCJcIilcbiAgICAgICAgICAgIHdyaXRlci50YWcoMiwgcnVudGltZV8xLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCkuc3RyaW5nKG1lc3NhZ2Uud29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQpO1xuICAgICAgICAvKiBzdHJpbmcgbmFtZSA9IDM7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLm5hbWUgIT09IFwiXCIpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDMsIHJ1bnRpbWVfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLnN0cmluZyhtZXNzYWdlLm5hbWUpO1xuICAgICAgICAvKiBnb29nbGUucHJvdG9idWYuVGltZXN0YW1wIGV4cGlyZXNfYXQgPSA0OyAqL1xuICAgICAgICBpZiAobWVzc2FnZS5leHBpcmVzQXQpXG4gICAgICAgICAgICB0aW1lc3RhbXBfMS5UaW1lc3RhbXAuaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLmV4cGlyZXNBdCwgd3JpdGVyLnRhZyg0LCBydW50aW1lXzEuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKS5mb3JrKCksIG9wdGlvbnMpLmpvaW4oKTtcbiAgICAgICAgLyogaW50MzIgdmVyc2lvbiA9IDU7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLnZlcnNpb24gIT09IDApXG4gICAgICAgICAgICB3cml0ZXIudGFnKDUsIHJ1bnRpbWVfMS5XaXJlVHlwZS5WYXJpbnQpLmludDMyKG1lc3NhZ2UudmVyc2lvbik7XG4gICAgICAgIGxldCB1ID0gb3B0aW9ucy53cml0ZVVua25vd25GaWVsZHM7XG4gICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICh1ID09IHRydWUgPyBydW50aW1lXzIuVW5rbm93bkZpZWxkSGFuZGxlci5vbldyaXRlIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgd3JpdGVyKTtcbiAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICB9XG59XG4vKipcbiAqIEBnZW5lcmF0ZWQgTWVzc2FnZVR5cGUgZm9yIHByb3RvYnVmIG1lc3NhZ2UgZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuQ3JlYXRlQXJ0aWZhY3RSZXF1ZXN0XG4gKi9cbmV4cG9ydHMuQ3JlYXRlQXJ0aWZhY3RSZXF1ZXN0ID0gbmV3IENyZWF0ZUFydGlmYWN0UmVxdWVzdCRUeXBlKCk7XG4vLyBAZ2VuZXJhdGVkIG1lc3NhZ2UgdHlwZSB3aXRoIHJlZmxlY3Rpb24gaW5mb3JtYXRpb24sIG1heSBwcm92aWRlIHNwZWVkIG9wdGltaXplZCBtZXRob2RzXG5jbGFzcyBDcmVhdGVBcnRpZmFjdFJlc3BvbnNlJFR5cGUgZXh0ZW5kcyBydW50aW1lXzUuTWVzc2FnZVR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcImdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkNyZWF0ZUFydGlmYWN0UmVzcG9uc2VcIiwgW1xuICAgICAgICAgICAgeyBubzogMSwgbmFtZTogXCJva1wiLCBraW5kOiBcInNjYWxhclwiLCBUOiA4IC8qU2NhbGFyVHlwZS5CT09MKi8gfSxcbiAgICAgICAgICAgIHsgbm86IDIsIG5hbWU6IFwic2lnbmVkX3VwbG9hZF91cmxcIiwga2luZDogXCJzY2FsYXJcIiwgVDogOSAvKlNjYWxhclR5cGUuU1RSSU5HKi8gfVxuICAgICAgICBdKTtcbiAgICB9XG4gICAgY3JlYXRlKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7IG9rOiBmYWxzZSwgc2lnbmVkVXBsb2FkVXJsOiBcIlwiIH07XG4gICAgICAgIGdsb2JhbFRoaXMuT2JqZWN0LmRlZmluZVByb3BlcnR5KG1lc3NhZ2UsIHJ1bnRpbWVfNC5NRVNTQUdFX1RZUEUsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0aGlzIH0pO1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICgwLCBydW50aW1lXzMucmVmbGVjdGlvbk1lcmdlUGFydGlhbCkodGhpcywgbWVzc2FnZSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlSZWFkKHJlYWRlciwgbGVuZ3RoLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSB0YXJnZXQgIT09IG51bGwgJiYgdGFyZ2V0ICE9PSB2b2lkIDAgPyB0YXJnZXQgOiB0aGlzLmNyZWF0ZSgpLCBlbmQgPSByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgbGV0IFtmaWVsZE5vLCB3aXJlVHlwZV0gPSByZWFkZXIudGFnKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkTm8pIHtcbiAgICAgICAgICAgICAgICBjYXNlIC8qIGJvb2wgb2sgKi8gMTpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5vayA9IHJlYWRlci5ib29sKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgLyogc3RyaW5nIHNpZ25lZF91cGxvYWRfdXJsICovIDI6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2lnbmVkVXBsb2FkVXJsID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBsZXQgdSA9IG9wdGlvbnMucmVhZFVua25vd25GaWVsZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgPT09IFwidGhyb3dcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBnbG9iYWxUaGlzLkVycm9yKGBVbmtub3duIGZpZWxkICR7ZmllbGROb30gKHdpcmUgdHlwZSAke3dpcmVUeXBlfSkgZm9yICR7dGhpcy50eXBlTmFtZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGQgPSByZWFkZXIuc2tpcCh3aXJlVHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICh1ID09PSB0cnVlID8gcnVudGltZV8yLlVua25vd25GaWVsZEhhbmRsZXIub25SZWFkIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgZmllbGRObywgd2lyZVR5cGUsIGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVdyaXRlKG1lc3NhZ2UsIHdyaXRlciwgb3B0aW9ucykge1xuICAgICAgICAvKiBib29sIG9rID0gMTsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2Uub2sgIT09IGZhbHNlKVxuICAgICAgICAgICAgd3JpdGVyLnRhZygxLCBydW50aW1lXzEuV2lyZVR5cGUuVmFyaW50KS5ib29sKG1lc3NhZ2Uub2spO1xuICAgICAgICAvKiBzdHJpbmcgc2lnbmVkX3VwbG9hZF91cmwgPSAyOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS5zaWduZWRVcGxvYWRVcmwgIT09IFwiXCIpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDIsIHJ1bnRpbWVfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLnN0cmluZyhtZXNzYWdlLnNpZ25lZFVwbG9hZFVybCk7XG4gICAgICAgIGxldCB1ID0gb3B0aW9ucy53cml0ZVVua25vd25GaWVsZHM7XG4gICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICh1ID09IHRydWUgPyBydW50aW1lXzIuVW5rbm93bkZpZWxkSGFuZGxlci5vbldyaXRlIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgd3JpdGVyKTtcbiAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICB9XG59XG4vKipcbiAqIEBnZW5lcmF0ZWQgTWVzc2FnZVR5cGUgZm9yIHByb3RvYnVmIG1lc3NhZ2UgZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuQ3JlYXRlQXJ0aWZhY3RSZXNwb25zZVxuICovXG5leHBvcnRzLkNyZWF0ZUFydGlmYWN0UmVzcG9uc2UgPSBuZXcgQ3JlYXRlQXJ0aWZhY3RSZXNwb25zZSRUeXBlKCk7XG4vLyBAZ2VuZXJhdGVkIG1lc3NhZ2UgdHlwZSB3aXRoIHJlZmxlY3Rpb24gaW5mb3JtYXRpb24sIG1heSBwcm92aWRlIHNwZWVkIG9wdGltaXplZCBtZXRob2RzXG5jbGFzcyBGaW5hbGl6ZUFydGlmYWN0UmVxdWVzdCRUeXBlIGV4dGVuZHMgcnVudGltZV81Lk1lc3NhZ2VUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoXCJnaXRodWIuYWN0aW9ucy5yZXN1bHRzLmFwaS52MS5GaW5hbGl6ZUFydGlmYWN0UmVxdWVzdFwiLCBbXG4gICAgICAgICAgICB7IG5vOiAxLCBuYW1lOiBcIndvcmtmbG93X3J1bl9iYWNrZW5kX2lkXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDkgLypTY2FsYXJUeXBlLlNUUklORyovIH0sXG4gICAgICAgICAgICB7IG5vOiAyLCBuYW1lOiBcIndvcmtmbG93X2pvYl9ydW5fYmFja2VuZF9pZFwiLCBraW5kOiBcInNjYWxhclwiLCBUOiA5IC8qU2NhbGFyVHlwZS5TVFJJTkcqLyB9LFxuICAgICAgICAgICAgeyBubzogMywgbmFtZTogXCJuYW1lXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDkgLypTY2FsYXJUeXBlLlNUUklORyovIH0sXG4gICAgICAgICAgICB7IG5vOiA0LCBuYW1lOiBcInNpemVcIiwga2luZDogXCJzY2FsYXJcIiwgVDogMyAvKlNjYWxhclR5cGUuSU5UNjQqLyB9LFxuICAgICAgICAgICAgeyBubzogNSwgbmFtZTogXCJoYXNoXCIsIGtpbmQ6IFwibWVzc2FnZVwiLCBUOiAoKSA9PiB3cmFwcGVyc18yLlN0cmluZ1ZhbHVlIH1cbiAgICAgICAgXSk7XG4gICAgfVxuICAgIGNyZWF0ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0geyB3b3JrZmxvd1J1bkJhY2tlbmRJZDogXCJcIiwgd29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQ6IFwiXCIsIG5hbWU6IFwiXCIsIHNpemU6IFwiMFwiIH07XG4gICAgICAgIGdsb2JhbFRoaXMuT2JqZWN0LmRlZmluZVByb3BlcnR5KG1lc3NhZ2UsIHJ1bnRpbWVfNC5NRVNTQUdFX1RZUEUsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0aGlzIH0pO1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICgwLCBydW50aW1lXzMucmVmbGVjdGlvbk1lcmdlUGFydGlhbCkodGhpcywgbWVzc2FnZSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlSZWFkKHJlYWRlciwgbGVuZ3RoLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSB0YXJnZXQgIT09IG51bGwgJiYgdGFyZ2V0ICE9PSB2b2lkIDAgPyB0YXJnZXQgOiB0aGlzLmNyZWF0ZSgpLCBlbmQgPSByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgbGV0IFtmaWVsZE5vLCB3aXJlVHlwZV0gPSByZWFkZXIudGFnKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkTm8pIHtcbiAgICAgICAgICAgICAgICBjYXNlIC8qIHN0cmluZyB3b3JrZmxvd19ydW5fYmFja2VuZF9pZCAqLyAxOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLndvcmtmbG93UnVuQmFja2VuZElkID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIC8qIHN0cmluZyB3b3JrZmxvd19qb2JfcnVuX2JhY2tlbmRfaWQgKi8gMjpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS53b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZCA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBzdHJpbmcgbmFtZSAqLyAzOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLm5hbWUgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgLyogaW50NjQgc2l6ZSAqLyA0OlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnNpemUgPSByZWFkZXIuaW50NjQoKS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIC8qIGdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZSBoYXNoICovIDU6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuaGFzaCA9IHdyYXBwZXJzXzIuU3RyaW5nVmFsdWUuaW50ZXJuYWxCaW5hcnlSZWFkKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpLCBvcHRpb25zLCBtZXNzYWdlLmhhc2gpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBsZXQgdSA9IG9wdGlvbnMucmVhZFVua25vd25GaWVsZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgPT09IFwidGhyb3dcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBnbG9iYWxUaGlzLkVycm9yKGBVbmtub3duIGZpZWxkICR7ZmllbGROb30gKHdpcmUgdHlwZSAke3dpcmVUeXBlfSkgZm9yICR7dGhpcy50eXBlTmFtZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGQgPSByZWFkZXIuc2tpcCh3aXJlVHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICh1ID09PSB0cnVlID8gcnVudGltZV8yLlVua25vd25GaWVsZEhhbmRsZXIub25SZWFkIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgZmllbGRObywgd2lyZVR5cGUsIGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVdyaXRlKG1lc3NhZ2UsIHdyaXRlciwgb3B0aW9ucykge1xuICAgICAgICAvKiBzdHJpbmcgd29ya2Zsb3dfcnVuX2JhY2tlbmRfaWQgPSAxOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS53b3JrZmxvd1J1bkJhY2tlbmRJZCAhPT0gXCJcIilcbiAgICAgICAgICAgIHdyaXRlci50YWcoMSwgcnVudGltZV8xLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCkuc3RyaW5nKG1lc3NhZ2Uud29ya2Zsb3dSdW5CYWNrZW5kSWQpO1xuICAgICAgICAvKiBzdHJpbmcgd29ya2Zsb3dfam9iX3J1bl9iYWNrZW5kX2lkID0gMjsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2Uud29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQgIT09IFwiXCIpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDIsIHJ1bnRpbWVfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLnN0cmluZyhtZXNzYWdlLndvcmtmbG93Sm9iUnVuQmFja2VuZElkKTtcbiAgICAgICAgLyogc3RyaW5nIG5hbWUgPSAzOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS5uYW1lICE9PSBcIlwiKVxuICAgICAgICAgICAgd3JpdGVyLnRhZygzLCBydW50aW1lXzEuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKS5zdHJpbmcobWVzc2FnZS5uYW1lKTtcbiAgICAgICAgLyogaW50NjQgc2l6ZSA9IDQ7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLnNpemUgIT09IFwiMFwiKVxuICAgICAgICAgICAgd3JpdGVyLnRhZyg0LCBydW50aW1lXzEuV2lyZVR5cGUuVmFyaW50KS5pbnQ2NChtZXNzYWdlLnNpemUpO1xuICAgICAgICAvKiBnb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUgaGFzaCA9IDU7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLmhhc2gpXG4gICAgICAgICAgICB3cmFwcGVyc18yLlN0cmluZ1ZhbHVlLmludGVybmFsQmluYXJ5V3JpdGUobWVzc2FnZS5oYXNoLCB3cml0ZXIudGFnKDUsIHJ1bnRpbWVfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLmZvcmsoKSwgb3B0aW9ucykuam9pbigpO1xuICAgICAgICBsZXQgdSA9IG9wdGlvbnMud3JpdGVVbmtub3duRmllbGRzO1xuICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAodSA9PSB0cnVlID8gcnVudGltZV8yLlVua25vd25GaWVsZEhhbmRsZXIub25Xcml0ZSA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIHdyaXRlcik7XG4gICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgfVxufVxuLyoqXG4gKiBAZ2VuZXJhdGVkIE1lc3NhZ2VUeXBlIGZvciBwcm90b2J1ZiBtZXNzYWdlIGdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkZpbmFsaXplQXJ0aWZhY3RSZXF1ZXN0XG4gKi9cbmV4cG9ydHMuRmluYWxpemVBcnRpZmFjdFJlcXVlc3QgPSBuZXcgRmluYWxpemVBcnRpZmFjdFJlcXVlc3QkVHlwZSgpO1xuLy8gQGdlbmVyYXRlZCBtZXNzYWdlIHR5cGUgd2l0aCByZWZsZWN0aW9uIGluZm9ybWF0aW9uLCBtYXkgcHJvdmlkZSBzcGVlZCBvcHRpbWl6ZWQgbWV0aG9kc1xuY2xhc3MgRmluYWxpemVBcnRpZmFjdFJlc3BvbnNlJFR5cGUgZXh0ZW5kcyBydW50aW1lXzUuTWVzc2FnZVR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcImdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkZpbmFsaXplQXJ0aWZhY3RSZXNwb25zZVwiLCBbXG4gICAgICAgICAgICB7IG5vOiAxLCBuYW1lOiBcIm9rXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDggLypTY2FsYXJUeXBlLkJPT0wqLyB9LFxuICAgICAgICAgICAgeyBubzogMiwgbmFtZTogXCJhcnRpZmFjdF9pZFwiLCBraW5kOiBcInNjYWxhclwiLCBUOiAzIC8qU2NhbGFyVHlwZS5JTlQ2NCovIH1cbiAgICAgICAgXSk7XG4gICAgfVxuICAgIGNyZWF0ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0geyBvazogZmFsc2UsIGFydGlmYWN0SWQ6IFwiMFwiIH07XG4gICAgICAgIGdsb2JhbFRoaXMuT2JqZWN0LmRlZmluZVByb3BlcnR5KG1lc3NhZ2UsIHJ1bnRpbWVfNC5NRVNTQUdFX1RZUEUsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0aGlzIH0pO1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICgwLCBydW50aW1lXzMucmVmbGVjdGlvbk1lcmdlUGFydGlhbCkodGhpcywgbWVzc2FnZSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlSZWFkKHJlYWRlciwgbGVuZ3RoLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSB0YXJnZXQgIT09IG51bGwgJiYgdGFyZ2V0ICE9PSB2b2lkIDAgPyB0YXJnZXQgOiB0aGlzLmNyZWF0ZSgpLCBlbmQgPSByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgbGV0IFtmaWVsZE5vLCB3aXJlVHlwZV0gPSByZWFkZXIudGFnKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkTm8pIHtcbiAgICAgICAgICAgICAgICBjYXNlIC8qIGJvb2wgb2sgKi8gMTpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5vayA9IHJlYWRlci5ib29sKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgLyogaW50NjQgYXJ0aWZhY3RfaWQgKi8gMjpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5hcnRpZmFjdElkID0gcmVhZGVyLmludDY0KCkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBvcHRpb25zLnJlYWRVbmtub3duRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ID09PSBcInRocm93XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZ2xvYmFsVGhpcy5FcnJvcihgVW5rbm93biBmaWVsZCAke2ZpZWxkTm99ICh3aXJlIHR5cGUgJHt3aXJlVHlwZX0pIGZvciAke3RoaXMudHlwZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkID0gcmVhZGVyLnNraXAod2lyZVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAodSA9PT0gdHJ1ZSA/IHJ1bnRpbWVfMi5Vbmtub3duRmllbGRIYW5kbGVyLm9uUmVhZCA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIGZpZWxkTm8sIHdpcmVUeXBlLCBkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLCB3cml0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgLyogYm9vbCBvayA9IDE7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLm9rICE9PSBmYWxzZSlcbiAgICAgICAgICAgIHdyaXRlci50YWcoMSwgcnVudGltZV8xLldpcmVUeXBlLlZhcmludCkuYm9vbChtZXNzYWdlLm9rKTtcbiAgICAgICAgLyogaW50NjQgYXJ0aWZhY3RfaWQgPSAyOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS5hcnRpZmFjdElkICE9PSBcIjBcIilcbiAgICAgICAgICAgIHdyaXRlci50YWcoMiwgcnVudGltZV8xLldpcmVUeXBlLlZhcmludCkuaW50NjQobWVzc2FnZS5hcnRpZmFjdElkKTtcbiAgICAgICAgbGV0IHUgPSBvcHRpb25zLndyaXRlVW5rbm93bkZpZWxkcztcbiAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgKHUgPT0gdHJ1ZSA/IHJ1bnRpbWVfMi5Vbmtub3duRmllbGRIYW5kbGVyLm9uV3JpdGUgOiB1KSh0aGlzLnR5cGVOYW1lLCBtZXNzYWdlLCB3cml0ZXIpO1xuICAgICAgICByZXR1cm4gd3JpdGVyO1xuICAgIH1cbn1cbi8qKlxuICogQGdlbmVyYXRlZCBNZXNzYWdlVHlwZSBmb3IgcHJvdG9idWYgbWVzc2FnZSBnaXRodWIuYWN0aW9ucy5yZXN1bHRzLmFwaS52MS5GaW5hbGl6ZUFydGlmYWN0UmVzcG9uc2VcbiAqL1xuZXhwb3J0cy5GaW5hbGl6ZUFydGlmYWN0UmVzcG9uc2UgPSBuZXcgRmluYWxpemVBcnRpZmFjdFJlc3BvbnNlJFR5cGUoKTtcbi8vIEBnZW5lcmF0ZWQgbWVzc2FnZSB0eXBlIHdpdGggcmVmbGVjdGlvbiBpbmZvcm1hdGlvbiwgbWF5IHByb3ZpZGUgc3BlZWQgb3B0aW1pemVkIG1ldGhvZHNcbmNsYXNzIExpc3RBcnRpZmFjdHNSZXF1ZXN0JFR5cGUgZXh0ZW5kcyBydW50aW1lXzUuTWVzc2FnZVR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcImdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkxpc3RBcnRpZmFjdHNSZXF1ZXN0XCIsIFtcbiAgICAgICAgICAgIHsgbm86IDEsIG5hbWU6IFwid29ya2Zsb3dfcnVuX2JhY2tlbmRfaWRcIiwga2luZDogXCJzY2FsYXJcIiwgVDogOSAvKlNjYWxhclR5cGUuU1RSSU5HKi8gfSxcbiAgICAgICAgICAgIHsgbm86IDIsIG5hbWU6IFwid29ya2Zsb3dfam9iX3J1bl9iYWNrZW5kX2lkXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDkgLypTY2FsYXJUeXBlLlNUUklORyovIH0sXG4gICAgICAgICAgICB7IG5vOiAzLCBuYW1lOiBcIm5hbWVfZmlsdGVyXCIsIGtpbmQ6IFwibWVzc2FnZVwiLCBUOiAoKSA9PiB3cmFwcGVyc18yLlN0cmluZ1ZhbHVlIH0sXG4gICAgICAgICAgICB7IG5vOiA0LCBuYW1lOiBcImlkX2ZpbHRlclwiLCBraW5kOiBcIm1lc3NhZ2VcIiwgVDogKCkgPT4gd3JhcHBlcnNfMS5JbnQ2NFZhbHVlIH1cbiAgICAgICAgXSk7XG4gICAgfVxuICAgIGNyZWF0ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0geyB3b3JrZmxvd1J1bkJhY2tlbmRJZDogXCJcIiwgd29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQ6IFwiXCIgfTtcbiAgICAgICAgZ2xvYmFsVGhpcy5PYmplY3QuZGVmaW5lUHJvcGVydHkobWVzc2FnZSwgcnVudGltZV80Lk1FU1NBR0VfVFlQRSwgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRoaXMgfSk7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgKDAsIHJ1bnRpbWVfMy5yZWZsZWN0aW9uTWVyZ2VQYXJ0aWFsKSh0aGlzLCBtZXNzYWdlLCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVJlYWQocmVhZGVyLCBsZW5ndGgsIG9wdGlvbnMsIHRhcmdldCkge1xuICAgICAgICBsZXQgbWVzc2FnZSA9IHRhcmdldCAhPT0gbnVsbCAmJiB0YXJnZXQgIT09IHZvaWQgMCA/IHRhcmdldCA6IHRoaXMuY3JlYXRlKCksIGVuZCA9IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICBsZXQgW2ZpZWxkTm8sIHdpcmVUeXBlXSA9IHJlYWRlci50YWcoKTtcbiAgICAgICAgICAgIHN3aXRjaCAoZmllbGRObykge1xuICAgICAgICAgICAgICAgIGNhc2UgLyogc3RyaW5nIHdvcmtmbG93X3J1bl9iYWNrZW5kX2lkICovIDE6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uud29ya2Zsb3dSdW5CYWNrZW5kSWQgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgLyogc3RyaW5nIHdvcmtmbG93X2pvYl9ydW5fYmFja2VuZF9pZCAqLyAyOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLndvcmtmbG93Sm9iUnVuQmFja2VuZElkID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIC8qIGdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZSBuYW1lX2ZpbHRlciAqLyAzOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLm5hbWVGaWx0ZXIgPSB3cmFwcGVyc18yLlN0cmluZ1ZhbHVlLmludGVybmFsQmluYXJ5UmVhZChyZWFkZXIsIHJlYWRlci51aW50MzIoKSwgb3B0aW9ucywgbWVzc2FnZS5uYW1lRmlsdGVyKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBnb29nbGUucHJvdG9idWYuSW50NjRWYWx1ZSBpZF9maWx0ZXIgKi8gNDpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5pZEZpbHRlciA9IHdyYXBwZXJzXzEuSW50NjRWYWx1ZS5pbnRlcm5hbEJpbmFyeVJlYWQocmVhZGVyLCByZWFkZXIudWludDMyKCksIG9wdGlvbnMsIG1lc3NhZ2UuaWRGaWx0ZXIpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBsZXQgdSA9IG9wdGlvbnMucmVhZFVua25vd25GaWVsZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgPT09IFwidGhyb3dcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBnbG9iYWxUaGlzLkVycm9yKGBVbmtub3duIGZpZWxkICR7ZmllbGROb30gKHdpcmUgdHlwZSAke3dpcmVUeXBlfSkgZm9yICR7dGhpcy50eXBlTmFtZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGQgPSByZWFkZXIuc2tpcCh3aXJlVHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICh1ID09PSB0cnVlID8gcnVudGltZV8yLlVua25vd25GaWVsZEhhbmRsZXIub25SZWFkIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgZmllbGRObywgd2lyZVR5cGUsIGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVdyaXRlKG1lc3NhZ2UsIHdyaXRlciwgb3B0aW9ucykge1xuICAgICAgICAvKiBzdHJpbmcgd29ya2Zsb3dfcnVuX2JhY2tlbmRfaWQgPSAxOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS53b3JrZmxvd1J1bkJhY2tlbmRJZCAhPT0gXCJcIilcbiAgICAgICAgICAgIHdyaXRlci50YWcoMSwgcnVudGltZV8xLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCkuc3RyaW5nKG1lc3NhZ2Uud29ya2Zsb3dSdW5CYWNrZW5kSWQpO1xuICAgICAgICAvKiBzdHJpbmcgd29ya2Zsb3dfam9iX3J1bl9iYWNrZW5kX2lkID0gMjsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2Uud29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQgIT09IFwiXCIpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDIsIHJ1bnRpbWVfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLnN0cmluZyhtZXNzYWdlLndvcmtmbG93Sm9iUnVuQmFja2VuZElkKTtcbiAgICAgICAgLyogZ29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlIG5hbWVfZmlsdGVyID0gMzsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2UubmFtZUZpbHRlcilcbiAgICAgICAgICAgIHdyYXBwZXJzXzIuU3RyaW5nVmFsdWUuaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLm5hbWVGaWx0ZXIsIHdyaXRlci50YWcoMywgcnVudGltZV8xLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCkuZm9yaygpLCBvcHRpb25zKS5qb2luKCk7XG4gICAgICAgIC8qIGdvb2dsZS5wcm90b2J1Zi5JbnQ2NFZhbHVlIGlkX2ZpbHRlciA9IDQ7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLmlkRmlsdGVyKVxuICAgICAgICAgICAgd3JhcHBlcnNfMS5JbnQ2NFZhbHVlLmludGVybmFsQmluYXJ5V3JpdGUobWVzc2FnZS5pZEZpbHRlciwgd3JpdGVyLnRhZyg0LCBydW50aW1lXzEuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKS5mb3JrKCksIG9wdGlvbnMpLmpvaW4oKTtcbiAgICAgICAgbGV0IHUgPSBvcHRpb25zLndyaXRlVW5rbm93bkZpZWxkcztcbiAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgKHUgPT0gdHJ1ZSA/IHJ1bnRpbWVfMi5Vbmtub3duRmllbGRIYW5kbGVyLm9uV3JpdGUgOiB1KSh0aGlzLnR5cGVOYW1lLCBtZXNzYWdlLCB3cml0ZXIpO1xuICAgICAgICByZXR1cm4gd3JpdGVyO1xuICAgIH1cbn1cbi8qKlxuICogQGdlbmVyYXRlZCBNZXNzYWdlVHlwZSBmb3IgcHJvdG9idWYgbWVzc2FnZSBnaXRodWIuYWN0aW9ucy5yZXN1bHRzLmFwaS52MS5MaXN0QXJ0aWZhY3RzUmVxdWVzdFxuICovXG5leHBvcnRzLkxpc3RBcnRpZmFjdHNSZXF1ZXN0ID0gbmV3IExpc3RBcnRpZmFjdHNSZXF1ZXN0JFR5cGUoKTtcbi8vIEBnZW5lcmF0ZWQgbWVzc2FnZSB0eXBlIHdpdGggcmVmbGVjdGlvbiBpbmZvcm1hdGlvbiwgbWF5IHByb3ZpZGUgc3BlZWQgb3B0aW1pemVkIG1ldGhvZHNcbmNsYXNzIExpc3RBcnRpZmFjdHNSZXNwb25zZSRUeXBlIGV4dGVuZHMgcnVudGltZV81Lk1lc3NhZ2VUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoXCJnaXRodWIuYWN0aW9ucy5yZXN1bHRzLmFwaS52MS5MaXN0QXJ0aWZhY3RzUmVzcG9uc2VcIiwgW1xuICAgICAgICAgICAgeyBubzogMSwgbmFtZTogXCJhcnRpZmFjdHNcIiwga2luZDogXCJtZXNzYWdlXCIsIHJlcGVhdDogMSAvKlJlcGVhdFR5cGUuUEFDS0VEKi8sIFQ6ICgpID0+IGV4cG9ydHMuTGlzdEFydGlmYWN0c1Jlc3BvbnNlX01vbm9saXRoQXJ0aWZhY3QgfVxuICAgICAgICBdKTtcbiAgICB9XG4gICAgY3JlYXRlKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7IGFydGlmYWN0czogW10gfTtcbiAgICAgICAgZ2xvYmFsVGhpcy5PYmplY3QuZGVmaW5lUHJvcGVydHkobWVzc2FnZSwgcnVudGltZV80Lk1FU1NBR0VfVFlQRSwgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRoaXMgfSk7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgKDAsIHJ1bnRpbWVfMy5yZWZsZWN0aW9uTWVyZ2VQYXJ0aWFsKSh0aGlzLCBtZXNzYWdlLCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVJlYWQocmVhZGVyLCBsZW5ndGgsIG9wdGlvbnMsIHRhcmdldCkge1xuICAgICAgICBsZXQgbWVzc2FnZSA9IHRhcmdldCAhPT0gbnVsbCAmJiB0YXJnZXQgIT09IHZvaWQgMCA/IHRhcmdldCA6IHRoaXMuY3JlYXRlKCksIGVuZCA9IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICBsZXQgW2ZpZWxkTm8sIHdpcmVUeXBlXSA9IHJlYWRlci50YWcoKTtcbiAgICAgICAgICAgIHN3aXRjaCAoZmllbGRObykge1xuICAgICAgICAgICAgICAgIGNhc2UgLyogcmVwZWF0ZWQgZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuTGlzdEFydGlmYWN0c1Jlc3BvbnNlLk1vbm9saXRoQXJ0aWZhY3QgYXJ0aWZhY3RzICovIDE6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYXJ0aWZhY3RzLnB1c2goZXhwb3J0cy5MaXN0QXJ0aWZhY3RzUmVzcG9uc2VfTW9ub2xpdGhBcnRpZmFjdC5pbnRlcm5hbEJpbmFyeVJlYWQocmVhZGVyLCByZWFkZXIudWludDMyKCksIG9wdGlvbnMpKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBvcHRpb25zLnJlYWRVbmtub3duRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ID09PSBcInRocm93XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZ2xvYmFsVGhpcy5FcnJvcihgVW5rbm93biBmaWVsZCAke2ZpZWxkTm99ICh3aXJlIHR5cGUgJHt3aXJlVHlwZX0pIGZvciAke3RoaXMudHlwZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkID0gcmVhZGVyLnNraXAod2lyZVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAodSA9PT0gdHJ1ZSA/IHJ1bnRpbWVfMi5Vbmtub3duRmllbGRIYW5kbGVyLm9uUmVhZCA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIGZpZWxkTm8sIHdpcmVUeXBlLCBkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLCB3cml0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgLyogcmVwZWF0ZWQgZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuTGlzdEFydGlmYWN0c1Jlc3BvbnNlLk1vbm9saXRoQXJ0aWZhY3QgYXJ0aWZhY3RzID0gMTsgKi9cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtZXNzYWdlLmFydGlmYWN0cy5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIGV4cG9ydHMuTGlzdEFydGlmYWN0c1Jlc3BvbnNlX01vbm9saXRoQXJ0aWZhY3QuaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLmFydGlmYWN0c1tpXSwgd3JpdGVyLnRhZygxLCBydW50aW1lXzEuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKS5mb3JrKCksIG9wdGlvbnMpLmpvaW4oKTtcbiAgICAgICAgbGV0IHUgPSBvcHRpb25zLndyaXRlVW5rbm93bkZpZWxkcztcbiAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgKHUgPT0gdHJ1ZSA/IHJ1bnRpbWVfMi5Vbmtub3duRmllbGRIYW5kbGVyLm9uV3JpdGUgOiB1KSh0aGlzLnR5cGVOYW1lLCBtZXNzYWdlLCB3cml0ZXIpO1xuICAgICAgICByZXR1cm4gd3JpdGVyO1xuICAgIH1cbn1cbi8qKlxuICogQGdlbmVyYXRlZCBNZXNzYWdlVHlwZSBmb3IgcHJvdG9idWYgbWVzc2FnZSBnaXRodWIuYWN0aW9ucy5yZXN1bHRzLmFwaS52MS5MaXN0QXJ0aWZhY3RzUmVzcG9uc2VcbiAqL1xuZXhwb3J0cy5MaXN0QXJ0aWZhY3RzUmVzcG9uc2UgPSBuZXcgTGlzdEFydGlmYWN0c1Jlc3BvbnNlJFR5cGUoKTtcbi8vIEBnZW5lcmF0ZWQgbWVzc2FnZSB0eXBlIHdpdGggcmVmbGVjdGlvbiBpbmZvcm1hdGlvbiwgbWF5IHByb3ZpZGUgc3BlZWQgb3B0aW1pemVkIG1ldGhvZHNcbmNsYXNzIExpc3RBcnRpZmFjdHNSZXNwb25zZV9Nb25vbGl0aEFydGlmYWN0JFR5cGUgZXh0ZW5kcyBydW50aW1lXzUuTWVzc2FnZVR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcImdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkxpc3RBcnRpZmFjdHNSZXNwb25zZS5Nb25vbGl0aEFydGlmYWN0XCIsIFtcbiAgICAgICAgICAgIHsgbm86IDEsIG5hbWU6IFwid29ya2Zsb3dfcnVuX2JhY2tlbmRfaWRcIiwga2luZDogXCJzY2FsYXJcIiwgVDogOSAvKlNjYWxhclR5cGUuU1RSSU5HKi8gfSxcbiAgICAgICAgICAgIHsgbm86IDIsIG5hbWU6IFwid29ya2Zsb3dfam9iX3J1bl9iYWNrZW5kX2lkXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDkgLypTY2FsYXJUeXBlLlNUUklORyovIH0sXG4gICAgICAgICAgICB7IG5vOiAzLCBuYW1lOiBcImRhdGFiYXNlX2lkXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDMgLypTY2FsYXJUeXBlLklOVDY0Ki8gfSxcbiAgICAgICAgICAgIHsgbm86IDQsIG5hbWU6IFwibmFtZVwiLCBraW5kOiBcInNjYWxhclwiLCBUOiA5IC8qU2NhbGFyVHlwZS5TVFJJTkcqLyB9LFxuICAgICAgICAgICAgeyBubzogNSwgbmFtZTogXCJzaXplXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDMgLypTY2FsYXJUeXBlLklOVDY0Ki8gfSxcbiAgICAgICAgICAgIHsgbm86IDYsIG5hbWU6IFwiY3JlYXRlZF9hdFwiLCBraW5kOiBcIm1lc3NhZ2VcIiwgVDogKCkgPT4gdGltZXN0YW1wXzEuVGltZXN0YW1wIH1cbiAgICAgICAgXSk7XG4gICAgfVxuICAgIGNyZWF0ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0geyB3b3JrZmxvd1J1bkJhY2tlbmRJZDogXCJcIiwgd29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQ6IFwiXCIsIGRhdGFiYXNlSWQ6IFwiMFwiLCBuYW1lOiBcIlwiLCBzaXplOiBcIjBcIiB9O1xuICAgICAgICBnbG9iYWxUaGlzLk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZXNzYWdlLCBydW50aW1lXzQuTUVTU0FHRV9UWVBFLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdGhpcyB9KTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAoMCwgcnVudGltZV8zLnJlZmxlY3Rpb25NZXJnZVBhcnRpYWwpKHRoaXMsIG1lc3NhZ2UsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5UmVhZChyZWFkZXIsIGxlbmd0aCwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGxldCBtZXNzYWdlID0gdGFyZ2V0ICE9PSBudWxsICYmIHRhcmdldCAhPT0gdm9pZCAwID8gdGFyZ2V0IDogdGhpcy5jcmVhdGUoKSwgZW5kID0gcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgIGxldCBbZmllbGRObywgd2lyZVR5cGVdID0gcmVhZGVyLnRhZygpO1xuICAgICAgICAgICAgc3dpdGNoIChmaWVsZE5vKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBzdHJpbmcgd29ya2Zsb3dfcnVuX2JhY2tlbmRfaWQgKi8gMTpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS53b3JrZmxvd1J1bkJhY2tlbmRJZCA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBzdHJpbmcgd29ya2Zsb3dfam9iX3J1bl9iYWNrZW5kX2lkICovIDI6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uud29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgLyogaW50NjQgZGF0YWJhc2VfaWQgKi8gMzpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5kYXRhYmFzZUlkID0gcmVhZGVyLmludDY0KCkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBzdHJpbmcgbmFtZSAqLyA0OlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLm5hbWUgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgLyogaW50NjQgc2l6ZSAqLyA1OlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnNpemUgPSByZWFkZXIuaW50NjQoKS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIC8qIGdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAgY3JlYXRlZF9hdCAqLyA2OlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmNyZWF0ZWRBdCA9IHRpbWVzdGFtcF8xLlRpbWVzdGFtcC5pbnRlcm5hbEJpbmFyeVJlYWQocmVhZGVyLCByZWFkZXIudWludDMyKCksIG9wdGlvbnMsIG1lc3NhZ2UuY3JlYXRlZEF0KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBvcHRpb25zLnJlYWRVbmtub3duRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ID09PSBcInRocm93XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZ2xvYmFsVGhpcy5FcnJvcihgVW5rbm93biBmaWVsZCAke2ZpZWxkTm99ICh3aXJlIHR5cGUgJHt3aXJlVHlwZX0pIGZvciAke3RoaXMudHlwZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkID0gcmVhZGVyLnNraXAod2lyZVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAodSA9PT0gdHJ1ZSA/IHJ1bnRpbWVfMi5Vbmtub3duRmllbGRIYW5kbGVyLm9uUmVhZCA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIGZpZWxkTm8sIHdpcmVUeXBlLCBkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLCB3cml0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgLyogc3RyaW5nIHdvcmtmbG93X3J1bl9iYWNrZW5kX2lkID0gMTsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2Uud29ya2Zsb3dSdW5CYWNrZW5kSWQgIT09IFwiXCIpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDEsIHJ1bnRpbWVfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLnN0cmluZyhtZXNzYWdlLndvcmtmbG93UnVuQmFja2VuZElkKTtcbiAgICAgICAgLyogc3RyaW5nIHdvcmtmbG93X2pvYl9ydW5fYmFja2VuZF9pZCA9IDI7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLndvcmtmbG93Sm9iUnVuQmFja2VuZElkICE9PSBcIlwiKVxuICAgICAgICAgICAgd3JpdGVyLnRhZygyLCBydW50aW1lXzEuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKS5zdHJpbmcobWVzc2FnZS53b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZCk7XG4gICAgICAgIC8qIGludDY0IGRhdGFiYXNlX2lkID0gMzsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2UuZGF0YWJhc2VJZCAhPT0gXCIwXCIpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDMsIHJ1bnRpbWVfMS5XaXJlVHlwZS5WYXJpbnQpLmludDY0KG1lc3NhZ2UuZGF0YWJhc2VJZCk7XG4gICAgICAgIC8qIHN0cmluZyBuYW1lID0gNDsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2UubmFtZSAhPT0gXCJcIilcbiAgICAgICAgICAgIHdyaXRlci50YWcoNCwgcnVudGltZV8xLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCkuc3RyaW5nKG1lc3NhZ2UubmFtZSk7XG4gICAgICAgIC8qIGludDY0IHNpemUgPSA1OyAqL1xuICAgICAgICBpZiAobWVzc2FnZS5zaXplICE9PSBcIjBcIilcbiAgICAgICAgICAgIHdyaXRlci50YWcoNSwgcnVudGltZV8xLldpcmVUeXBlLlZhcmludCkuaW50NjQobWVzc2FnZS5zaXplKTtcbiAgICAgICAgLyogZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCBjcmVhdGVkX2F0ID0gNjsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2UuY3JlYXRlZEF0KVxuICAgICAgICAgICAgdGltZXN0YW1wXzEuVGltZXN0YW1wLmludGVybmFsQmluYXJ5V3JpdGUobWVzc2FnZS5jcmVhdGVkQXQsIHdyaXRlci50YWcoNiwgcnVudGltZV8xLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCkuZm9yaygpLCBvcHRpb25zKS5qb2luKCk7XG4gICAgICAgIGxldCB1ID0gb3B0aW9ucy53cml0ZVVua25vd25GaWVsZHM7XG4gICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICh1ID09IHRydWUgPyBydW50aW1lXzIuVW5rbm93bkZpZWxkSGFuZGxlci5vbldyaXRlIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgd3JpdGVyKTtcbiAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICB9XG59XG4vKipcbiAqIEBnZW5lcmF0ZWQgTWVzc2FnZVR5cGUgZm9yIHByb3RvYnVmIG1lc3NhZ2UgZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuTGlzdEFydGlmYWN0c1Jlc3BvbnNlLk1vbm9saXRoQXJ0aWZhY3RcbiAqL1xuZXhwb3J0cy5MaXN0QXJ0aWZhY3RzUmVzcG9uc2VfTW9ub2xpdGhBcnRpZmFjdCA9IG5ldyBMaXN0QXJ0aWZhY3RzUmVzcG9uc2VfTW9ub2xpdGhBcnRpZmFjdCRUeXBlKCk7XG4vLyBAZ2VuZXJhdGVkIG1lc3NhZ2UgdHlwZSB3aXRoIHJlZmxlY3Rpb24gaW5mb3JtYXRpb24sIG1heSBwcm92aWRlIHNwZWVkIG9wdGltaXplZCBtZXRob2RzXG5jbGFzcyBHZXRTaWduZWRBcnRpZmFjdFVSTFJlcXVlc3QkVHlwZSBleHRlbmRzIHJ1bnRpbWVfNS5NZXNzYWdlVHlwZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuR2V0U2lnbmVkQXJ0aWZhY3RVUkxSZXF1ZXN0XCIsIFtcbiAgICAgICAgICAgIHsgbm86IDEsIG5hbWU6IFwid29ya2Zsb3dfcnVuX2JhY2tlbmRfaWRcIiwga2luZDogXCJzY2FsYXJcIiwgVDogOSAvKlNjYWxhclR5cGUuU1RSSU5HKi8gfSxcbiAgICAgICAgICAgIHsgbm86IDIsIG5hbWU6IFwid29ya2Zsb3dfam9iX3J1bl9iYWNrZW5kX2lkXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDkgLypTY2FsYXJUeXBlLlNUUklORyovIH0sXG4gICAgICAgICAgICB7IG5vOiAzLCBuYW1lOiBcIm5hbWVcIiwga2luZDogXCJzY2FsYXJcIiwgVDogOSAvKlNjYWxhclR5cGUuU1RSSU5HKi8gfVxuICAgICAgICBdKTtcbiAgICB9XG4gICAgY3JlYXRlKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7IHdvcmtmbG93UnVuQmFja2VuZElkOiBcIlwiLCB3b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZDogXCJcIiwgbmFtZTogXCJcIiB9O1xuICAgICAgICBnbG9iYWxUaGlzLk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZXNzYWdlLCBydW50aW1lXzQuTUVTU0FHRV9UWVBFLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdGhpcyB9KTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAoMCwgcnVudGltZV8zLnJlZmxlY3Rpb25NZXJnZVBhcnRpYWwpKHRoaXMsIG1lc3NhZ2UsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5UmVhZChyZWFkZXIsIGxlbmd0aCwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGxldCBtZXNzYWdlID0gdGFyZ2V0ICE9PSBudWxsICYmIHRhcmdldCAhPT0gdm9pZCAwID8gdGFyZ2V0IDogdGhpcy5jcmVhdGUoKSwgZW5kID0gcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgIGxldCBbZmllbGRObywgd2lyZVR5cGVdID0gcmVhZGVyLnRhZygpO1xuICAgICAgICAgICAgc3dpdGNoIChmaWVsZE5vKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBzdHJpbmcgd29ya2Zsb3dfcnVuX2JhY2tlbmRfaWQgKi8gMTpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS53b3JrZmxvd1J1bkJhY2tlbmRJZCA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBzdHJpbmcgd29ya2Zsb3dfam9iX3J1bl9iYWNrZW5kX2lkICovIDI6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uud29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgLyogc3RyaW5nIG5hbWUgKi8gMzpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5uYW1lID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBsZXQgdSA9IG9wdGlvbnMucmVhZFVua25vd25GaWVsZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgPT09IFwidGhyb3dcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBnbG9iYWxUaGlzLkVycm9yKGBVbmtub3duIGZpZWxkICR7ZmllbGROb30gKHdpcmUgdHlwZSAke3dpcmVUeXBlfSkgZm9yICR7dGhpcy50eXBlTmFtZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGQgPSByZWFkZXIuc2tpcCh3aXJlVHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICh1ID09PSB0cnVlID8gcnVudGltZV8yLlVua25vd25GaWVsZEhhbmRsZXIub25SZWFkIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgZmllbGRObywgd2lyZVR5cGUsIGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVdyaXRlKG1lc3NhZ2UsIHdyaXRlciwgb3B0aW9ucykge1xuICAgICAgICAvKiBzdHJpbmcgd29ya2Zsb3dfcnVuX2JhY2tlbmRfaWQgPSAxOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS53b3JrZmxvd1J1bkJhY2tlbmRJZCAhPT0gXCJcIilcbiAgICAgICAgICAgIHdyaXRlci50YWcoMSwgcnVudGltZV8xLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCkuc3RyaW5nKG1lc3NhZ2Uud29ya2Zsb3dSdW5CYWNrZW5kSWQpO1xuICAgICAgICAvKiBzdHJpbmcgd29ya2Zsb3dfam9iX3J1bl9iYWNrZW5kX2lkID0gMjsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2Uud29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQgIT09IFwiXCIpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDIsIHJ1bnRpbWVfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLnN0cmluZyhtZXNzYWdlLndvcmtmbG93Sm9iUnVuQmFja2VuZElkKTtcbiAgICAgICAgLyogc3RyaW5nIG5hbWUgPSAzOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS5uYW1lICE9PSBcIlwiKVxuICAgICAgICAgICAgd3JpdGVyLnRhZygzLCBydW50aW1lXzEuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKS5zdHJpbmcobWVzc2FnZS5uYW1lKTtcbiAgICAgICAgbGV0IHUgPSBvcHRpb25zLndyaXRlVW5rbm93bkZpZWxkcztcbiAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgKHUgPT0gdHJ1ZSA/IHJ1bnRpbWVfMi5Vbmtub3duRmllbGRIYW5kbGVyLm9uV3JpdGUgOiB1KSh0aGlzLnR5cGVOYW1lLCBtZXNzYWdlLCB3cml0ZXIpO1xuICAgICAgICByZXR1cm4gd3JpdGVyO1xuICAgIH1cbn1cbi8qKlxuICogQGdlbmVyYXRlZCBNZXNzYWdlVHlwZSBmb3IgcHJvdG9idWYgbWVzc2FnZSBnaXRodWIuYWN0aW9ucy5yZXN1bHRzLmFwaS52MS5HZXRTaWduZWRBcnRpZmFjdFVSTFJlcXVlc3RcbiAqL1xuZXhwb3J0cy5HZXRTaWduZWRBcnRpZmFjdFVSTFJlcXVlc3QgPSBuZXcgR2V0U2lnbmVkQXJ0aWZhY3RVUkxSZXF1ZXN0JFR5cGUoKTtcbi8vIEBnZW5lcmF0ZWQgbWVzc2FnZSB0eXBlIHdpdGggcmVmbGVjdGlvbiBpbmZvcm1hdGlvbiwgbWF5IHByb3ZpZGUgc3BlZWQgb3B0aW1pemVkIG1ldGhvZHNcbmNsYXNzIEdldFNpZ25lZEFydGlmYWN0VVJMUmVzcG9uc2UkVHlwZSBleHRlbmRzIHJ1bnRpbWVfNS5NZXNzYWdlVHlwZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuR2V0U2lnbmVkQXJ0aWZhY3RVUkxSZXNwb25zZVwiLCBbXG4gICAgICAgICAgICB7IG5vOiAxLCBuYW1lOiBcInNpZ25lZF91cmxcIiwga2luZDogXCJzY2FsYXJcIiwgVDogOSAvKlNjYWxhclR5cGUuU1RSSU5HKi8gfVxuICAgICAgICBdKTtcbiAgICB9XG4gICAgY3JlYXRlKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7IHNpZ25lZFVybDogXCJcIiB9O1xuICAgICAgICBnbG9iYWxUaGlzLk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZXNzYWdlLCBydW50aW1lXzQuTUVTU0FHRV9UWVBFLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdGhpcyB9KTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAoMCwgcnVudGltZV8zLnJlZmxlY3Rpb25NZXJnZVBhcnRpYWwpKHRoaXMsIG1lc3NhZ2UsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5UmVhZChyZWFkZXIsIGxlbmd0aCwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGxldCBtZXNzYWdlID0gdGFyZ2V0ICE9PSBudWxsICYmIHRhcmdldCAhPT0gdm9pZCAwID8gdGFyZ2V0IDogdGhpcy5jcmVhdGUoKSwgZW5kID0gcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgIGxldCBbZmllbGRObywgd2lyZVR5cGVdID0gcmVhZGVyLnRhZygpO1xuICAgICAgICAgICAgc3dpdGNoIChmaWVsZE5vKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBzdHJpbmcgc2lnbmVkX3VybCAqLyAxOlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnNpZ25lZFVybCA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBvcHRpb25zLnJlYWRVbmtub3duRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ID09PSBcInRocm93XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZ2xvYmFsVGhpcy5FcnJvcihgVW5rbm93biBmaWVsZCAke2ZpZWxkTm99ICh3aXJlIHR5cGUgJHt3aXJlVHlwZX0pIGZvciAke3RoaXMudHlwZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkID0gcmVhZGVyLnNraXAod2lyZVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAodSA9PT0gdHJ1ZSA/IHJ1bnRpbWVfMi5Vbmtub3duRmllbGRIYW5kbGVyLm9uUmVhZCA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIGZpZWxkTm8sIHdpcmVUeXBlLCBkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLCB3cml0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgLyogc3RyaW5nIHNpZ25lZF91cmwgPSAxOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS5zaWduZWRVcmwgIT09IFwiXCIpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDEsIHJ1bnRpbWVfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLnN0cmluZyhtZXNzYWdlLnNpZ25lZFVybCk7XG4gICAgICAgIGxldCB1ID0gb3B0aW9ucy53cml0ZVVua25vd25GaWVsZHM7XG4gICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICh1ID09IHRydWUgPyBydW50aW1lXzIuVW5rbm93bkZpZWxkSGFuZGxlci5vbldyaXRlIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgd3JpdGVyKTtcbiAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICB9XG59XG4vKipcbiAqIEBnZW5lcmF0ZWQgTWVzc2FnZVR5cGUgZm9yIHByb3RvYnVmIG1lc3NhZ2UgZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuR2V0U2lnbmVkQXJ0aWZhY3RVUkxSZXNwb25zZVxuICovXG5leHBvcnRzLkdldFNpZ25lZEFydGlmYWN0VVJMUmVzcG9uc2UgPSBuZXcgR2V0U2lnbmVkQXJ0aWZhY3RVUkxSZXNwb25zZSRUeXBlKCk7XG4vLyBAZ2VuZXJhdGVkIG1lc3NhZ2UgdHlwZSB3aXRoIHJlZmxlY3Rpb24gaW5mb3JtYXRpb24sIG1heSBwcm92aWRlIHNwZWVkIG9wdGltaXplZCBtZXRob2RzXG5jbGFzcyBEZWxldGVBcnRpZmFjdFJlcXVlc3QkVHlwZSBleHRlbmRzIHJ1bnRpbWVfNS5NZXNzYWdlVHlwZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuRGVsZXRlQXJ0aWZhY3RSZXF1ZXN0XCIsIFtcbiAgICAgICAgICAgIHsgbm86IDEsIG5hbWU6IFwid29ya2Zsb3dfcnVuX2JhY2tlbmRfaWRcIiwga2luZDogXCJzY2FsYXJcIiwgVDogOSAvKlNjYWxhclR5cGUuU1RSSU5HKi8gfSxcbiAgICAgICAgICAgIHsgbm86IDIsIG5hbWU6IFwid29ya2Zsb3dfam9iX3J1bl9iYWNrZW5kX2lkXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDkgLypTY2FsYXJUeXBlLlNUUklORyovIH0sXG4gICAgICAgICAgICB7IG5vOiAzLCBuYW1lOiBcIm5hbWVcIiwga2luZDogXCJzY2FsYXJcIiwgVDogOSAvKlNjYWxhclR5cGUuU1RSSU5HKi8gfVxuICAgICAgICBdKTtcbiAgICB9XG4gICAgY3JlYXRlKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7IHdvcmtmbG93UnVuQmFja2VuZElkOiBcIlwiLCB3b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZDogXCJcIiwgbmFtZTogXCJcIiB9O1xuICAgICAgICBnbG9iYWxUaGlzLk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZXNzYWdlLCBydW50aW1lXzQuTUVTU0FHRV9UWVBFLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdGhpcyB9KTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAoMCwgcnVudGltZV8zLnJlZmxlY3Rpb25NZXJnZVBhcnRpYWwpKHRoaXMsIG1lc3NhZ2UsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIGludGVybmFsQmluYXJ5UmVhZChyZWFkZXIsIGxlbmd0aCwgb3B0aW9ucywgdGFyZ2V0KSB7XG4gICAgICAgIGxldCBtZXNzYWdlID0gdGFyZ2V0ICE9PSBudWxsICYmIHRhcmdldCAhPT0gdm9pZCAwID8gdGFyZ2V0IDogdGhpcy5jcmVhdGUoKSwgZW5kID0gcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgIGxldCBbZmllbGRObywgd2lyZVR5cGVdID0gcmVhZGVyLnRhZygpO1xuICAgICAgICAgICAgc3dpdGNoIChmaWVsZE5vKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBzdHJpbmcgd29ya2Zsb3dfcnVuX2JhY2tlbmRfaWQgKi8gMTpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS53b3JrZmxvd1J1bkJhY2tlbmRJZCA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAvKiBzdHJpbmcgd29ya2Zsb3dfam9iX3J1bl9iYWNrZW5kX2lkICovIDI6XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uud29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgLyogc3RyaW5nIG5hbWUgKi8gMzpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5uYW1lID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBsZXQgdSA9IG9wdGlvbnMucmVhZFVua25vd25GaWVsZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgPT09IFwidGhyb3dcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBnbG9iYWxUaGlzLkVycm9yKGBVbmtub3duIGZpZWxkICR7ZmllbGROb30gKHdpcmUgdHlwZSAke3dpcmVUeXBlfSkgZm9yICR7dGhpcy50eXBlTmFtZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGQgPSByZWFkZXIuc2tpcCh3aXJlVHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ICE9PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICh1ID09PSB0cnVlID8gcnVudGltZV8yLlVua25vd25GaWVsZEhhbmRsZXIub25SZWFkIDogdSkodGhpcy50eXBlTmFtZSwgbWVzc2FnZSwgZmllbGRObywgd2lyZVR5cGUsIGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBpbnRlcm5hbEJpbmFyeVdyaXRlKG1lc3NhZ2UsIHdyaXRlciwgb3B0aW9ucykge1xuICAgICAgICAvKiBzdHJpbmcgd29ya2Zsb3dfcnVuX2JhY2tlbmRfaWQgPSAxOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS53b3JrZmxvd1J1bkJhY2tlbmRJZCAhPT0gXCJcIilcbiAgICAgICAgICAgIHdyaXRlci50YWcoMSwgcnVudGltZV8xLldpcmVUeXBlLkxlbmd0aERlbGltaXRlZCkuc3RyaW5nKG1lc3NhZ2Uud29ya2Zsb3dSdW5CYWNrZW5kSWQpO1xuICAgICAgICAvKiBzdHJpbmcgd29ya2Zsb3dfam9iX3J1bl9iYWNrZW5kX2lkID0gMjsgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2Uud29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQgIT09IFwiXCIpXG4gICAgICAgICAgICB3cml0ZXIudGFnKDIsIHJ1bnRpbWVfMS5XaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLnN0cmluZyhtZXNzYWdlLndvcmtmbG93Sm9iUnVuQmFja2VuZElkKTtcbiAgICAgICAgLyogc3RyaW5nIG5hbWUgPSAzOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS5uYW1lICE9PSBcIlwiKVxuICAgICAgICAgICAgd3JpdGVyLnRhZygzLCBydW50aW1lXzEuV2lyZVR5cGUuTGVuZ3RoRGVsaW1pdGVkKS5zdHJpbmcobWVzc2FnZS5uYW1lKTtcbiAgICAgICAgbGV0IHUgPSBvcHRpb25zLndyaXRlVW5rbm93bkZpZWxkcztcbiAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgKHUgPT0gdHJ1ZSA/IHJ1bnRpbWVfMi5Vbmtub3duRmllbGRIYW5kbGVyLm9uV3JpdGUgOiB1KSh0aGlzLnR5cGVOYW1lLCBtZXNzYWdlLCB3cml0ZXIpO1xuICAgICAgICByZXR1cm4gd3JpdGVyO1xuICAgIH1cbn1cbi8qKlxuICogQGdlbmVyYXRlZCBNZXNzYWdlVHlwZSBmb3IgcHJvdG9idWYgbWVzc2FnZSBnaXRodWIuYWN0aW9ucy5yZXN1bHRzLmFwaS52MS5EZWxldGVBcnRpZmFjdFJlcXVlc3RcbiAqL1xuZXhwb3J0cy5EZWxldGVBcnRpZmFjdFJlcXVlc3QgPSBuZXcgRGVsZXRlQXJ0aWZhY3RSZXF1ZXN0JFR5cGUoKTtcbi8vIEBnZW5lcmF0ZWQgbWVzc2FnZSB0eXBlIHdpdGggcmVmbGVjdGlvbiBpbmZvcm1hdGlvbiwgbWF5IHByb3ZpZGUgc3BlZWQgb3B0aW1pemVkIG1ldGhvZHNcbmNsYXNzIERlbGV0ZUFydGlmYWN0UmVzcG9uc2UkVHlwZSBleHRlbmRzIHJ1bnRpbWVfNS5NZXNzYWdlVHlwZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuRGVsZXRlQXJ0aWZhY3RSZXNwb25zZVwiLCBbXG4gICAgICAgICAgICB7IG5vOiAxLCBuYW1lOiBcIm9rXCIsIGtpbmQ6IFwic2NhbGFyXCIsIFQ6IDggLypTY2FsYXJUeXBlLkJPT0wqLyB9LFxuICAgICAgICAgICAgeyBubzogMiwgbmFtZTogXCJhcnRpZmFjdF9pZFwiLCBraW5kOiBcInNjYWxhclwiLCBUOiAzIC8qU2NhbGFyVHlwZS5JTlQ2NCovIH1cbiAgICAgICAgXSk7XG4gICAgfVxuICAgIGNyZWF0ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0geyBvazogZmFsc2UsIGFydGlmYWN0SWQ6IFwiMFwiIH07XG4gICAgICAgIGdsb2JhbFRoaXMuT2JqZWN0LmRlZmluZVByb3BlcnR5KG1lc3NhZ2UsIHJ1bnRpbWVfNC5NRVNTQUdFX1RZUEUsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0aGlzIH0pO1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICgwLCBydW50aW1lXzMucmVmbGVjdGlvbk1lcmdlUGFydGlhbCkodGhpcywgbWVzc2FnZSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlSZWFkKHJlYWRlciwgbGVuZ3RoLCBvcHRpb25zLCB0YXJnZXQpIHtcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSB0YXJnZXQgIT09IG51bGwgJiYgdGFyZ2V0ICE9PSB2b2lkIDAgPyB0YXJnZXQgOiB0aGlzLmNyZWF0ZSgpLCBlbmQgPSByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgbGV0IFtmaWVsZE5vLCB3aXJlVHlwZV0gPSByZWFkZXIudGFnKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkTm8pIHtcbiAgICAgICAgICAgICAgICBjYXNlIC8qIGJvb2wgb2sgKi8gMTpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5vayA9IHJlYWRlci5ib29sKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgLyogaW50NjQgYXJ0aWZhY3RfaWQgKi8gMjpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5hcnRpZmFjdElkID0gcmVhZGVyLmludDY0KCkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBvcHRpb25zLnJlYWRVbmtub3duRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1ID09PSBcInRocm93XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZ2xvYmFsVGhpcy5FcnJvcihgVW5rbm93biBmaWVsZCAke2ZpZWxkTm99ICh3aXJlIHR5cGUgJHt3aXJlVHlwZX0pIGZvciAke3RoaXMudHlwZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkID0gcmVhZGVyLnNraXAod2lyZVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAodSA9PT0gdHJ1ZSA/IHJ1bnRpbWVfMi5Vbmtub3duRmllbGRIYW5kbGVyLm9uUmVhZCA6IHUpKHRoaXMudHlwZU5hbWUsIG1lc3NhZ2UsIGZpZWxkTm8sIHdpcmVUeXBlLCBkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgaW50ZXJuYWxCaW5hcnlXcml0ZShtZXNzYWdlLCB3cml0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgLyogYm9vbCBvayA9IDE7ICovXG4gICAgICAgIGlmIChtZXNzYWdlLm9rICE9PSBmYWxzZSlcbiAgICAgICAgICAgIHdyaXRlci50YWcoMSwgcnVudGltZV8xLldpcmVUeXBlLlZhcmludCkuYm9vbChtZXNzYWdlLm9rKTtcbiAgICAgICAgLyogaW50NjQgYXJ0aWZhY3RfaWQgPSAyOyAqL1xuICAgICAgICBpZiAobWVzc2FnZS5hcnRpZmFjdElkICE9PSBcIjBcIilcbiAgICAgICAgICAgIHdyaXRlci50YWcoMiwgcnVudGltZV8xLldpcmVUeXBlLlZhcmludCkuaW50NjQobWVzc2FnZS5hcnRpZmFjdElkKTtcbiAgICAgICAgbGV0IHUgPSBvcHRpb25zLndyaXRlVW5rbm93bkZpZWxkcztcbiAgICAgICAgaWYgKHUgIT09IGZhbHNlKVxuICAgICAgICAgICAgKHUgPT0gdHJ1ZSA/IHJ1bnRpbWVfMi5Vbmtub3duRmllbGRIYW5kbGVyLm9uV3JpdGUgOiB1KSh0aGlzLnR5cGVOYW1lLCBtZXNzYWdlLCB3cml0ZXIpO1xuICAgICAgICByZXR1cm4gd3JpdGVyO1xuICAgIH1cbn1cbi8qKlxuICogQGdlbmVyYXRlZCBNZXNzYWdlVHlwZSBmb3IgcHJvdG9idWYgbWVzc2FnZSBnaXRodWIuYWN0aW9ucy5yZXN1bHRzLmFwaS52MS5EZWxldGVBcnRpZmFjdFJlc3BvbnNlXG4gKi9cbmV4cG9ydHMuRGVsZXRlQXJ0aWZhY3RSZXNwb25zZSA9IG5ldyBEZWxldGVBcnRpZmFjdFJlc3BvbnNlJFR5cGUoKTtcbi8qKlxuICogQGdlbmVyYXRlZCBTZXJ2aWNlVHlwZSBmb3IgcHJvdG9idWYgc2VydmljZSBnaXRodWIuYWN0aW9ucy5yZXN1bHRzLmFwaS52MS5BcnRpZmFjdFNlcnZpY2VcbiAqL1xuZXhwb3J0cy5BcnRpZmFjdFNlcnZpY2UgPSBuZXcgcnVudGltZV9ycGNfMS5TZXJ2aWNlVHlwZShcImdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkFydGlmYWN0U2VydmljZVwiLCBbXG4gICAgeyBuYW1lOiBcIkNyZWF0ZUFydGlmYWN0XCIsIG9wdGlvbnM6IHt9LCBJOiBleHBvcnRzLkNyZWF0ZUFydGlmYWN0UmVxdWVzdCwgTzogZXhwb3J0cy5DcmVhdGVBcnRpZmFjdFJlc3BvbnNlIH0sXG4gICAgeyBuYW1lOiBcIkZpbmFsaXplQXJ0aWZhY3RcIiwgb3B0aW9uczoge30sIEk6IGV4cG9ydHMuRmluYWxpemVBcnRpZmFjdFJlcXVlc3QsIE86IGV4cG9ydHMuRmluYWxpemVBcnRpZmFjdFJlc3BvbnNlIH0sXG4gICAgeyBuYW1lOiBcIkxpc3RBcnRpZmFjdHNcIiwgb3B0aW9uczoge30sIEk6IGV4cG9ydHMuTGlzdEFydGlmYWN0c1JlcXVlc3QsIE86IGV4cG9ydHMuTGlzdEFydGlmYWN0c1Jlc3BvbnNlIH0sXG4gICAgeyBuYW1lOiBcIkdldFNpZ25lZEFydGlmYWN0VVJMXCIsIG9wdGlvbnM6IHt9LCBJOiBleHBvcnRzLkdldFNpZ25lZEFydGlmYWN0VVJMUmVxdWVzdCwgTzogZXhwb3J0cy5HZXRTaWduZWRBcnRpZmFjdFVSTFJlc3BvbnNlIH0sXG4gICAgeyBuYW1lOiBcIkRlbGV0ZUFydGlmYWN0XCIsIG9wdGlvbnM6IHt9LCBJOiBleHBvcnRzLkRlbGV0ZUFydGlmYWN0UmVxdWVzdCwgTzogZXhwb3J0cy5EZWxldGVBcnRpZmFjdFJlc3BvbnNlIH1cbl0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXJ0aWZhY3QuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNIb29rID0gZXhwb3J0cy5jaGFpbkhvb2tzID0gdm9pZCAwO1xuLy8gQ2hhaW5Ib29rcyBjcmVhdGVzIGEgbmV3IFNlcnZlckhvb2sgd2hpY2ggY2hhaW5zIHRoZSBjYWxsYmFja3MgaW5cbi8vIGVhY2ggb2YgdGhlIGNvbnN0aXR1ZW50IGhvb2tzIHBhc3NlZCBpbi4gRWFjaCBob29rIGZ1bmN0aW9uIHdpbGwgYmVcbi8vIGNhbGxlZCBpbiB0aGUgb3JkZXIgb2YgdGhlIFNlcnZlckhvb2tzIHZhbHVlcyBwYXNzZWQgaW4uXG4vL1xuLy8gRm9yIHRoZSBlcnJvcmluZyBob29rcywgUmVxdWVzdFJlY2VpdmVkIGFuZCBSZXF1ZXN0Um91dGVkLCBhbnkgcmV0dXJuZWRcbi8vIGVycm9ycyBwcmV2ZW50IHByb2Nlc3NpbmcgYnkgbGF0ZXIgaG9va3MuXG5mdW5jdGlvbiBjaGFpbkhvb2tzKC4uLmhvb2tzKSB7XG4gICAgaWYgKGhvb2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKGhvb2tzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gaG9va3NbMF07XG4gICAgfVxuICAgIGNvbnN0IHNlcnZlckhvb2sgPSB7XG4gICAgICAgIHJlcXVlc3RSZWNlaXZlZChjdHgpIHtcbiAgICAgICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBob29rIG9mIGhvb2tzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaG9vay5yZXF1ZXN0UmVjZWl2ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIGhvb2sucmVxdWVzdFJlY2VpdmVkKGN0eCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlcXVlc3RQcmVwYXJlZChjdHgpIHtcbiAgICAgICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBob29rIG9mIGhvb2tzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaG9vay5yZXF1ZXN0UHJlcGFyZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcImhvb2sgcmVxdWVzdFByZXBhcmVkIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCByZWxlYXNlLiBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlBsZWFzZSB1c2UgcmVzcG9uc2VQcmVwYXJlZCBpbnN0ZWFkLlwiKTtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgaG9vay5yZXF1ZXN0UHJlcGFyZWQoY3R4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVzcG9uc2VQcmVwYXJlZChjdHgpIHtcbiAgICAgICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBob29rIG9mIGhvb2tzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaG9vay5yZXNwb25zZVByZXBhcmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB5aWVsZCBob29rLnJlc3BvbnNlUHJlcGFyZWQoY3R4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVxdWVzdFNlbnQoY3R4KSB7XG4gICAgICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaG9vayBvZiBob29rcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWhvb2sucmVxdWVzdFNlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcImhvb2sgcmVxdWVzdFNlbnQgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IHJlbGVhc2UuIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiUGxlYXNlIHVzZSByZXNwb25zZVNlbnQgaW5zdGVhZC5cIik7XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIGhvb2sucmVxdWVzdFNlbnQoY3R4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVzcG9uc2VTZW50KGN0eCkge1xuICAgICAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGhvb2sgb2YgaG9va3MpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFob29rLnJlc3BvbnNlU2VudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgeWllbGQgaG9vay5yZXNwb25zZVNlbnQoY3R4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVxdWVzdFJvdXRlZChjdHgpIHtcbiAgICAgICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBob29rIG9mIGhvb2tzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaG9vay5yZXF1ZXN0Um91dGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB5aWVsZCBob29rLnJlcXVlc3RSb3V0ZWQoY3R4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3IoY3R4LCBlcnIpIHtcbiAgICAgICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBob29rIG9mIGhvb2tzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaG9vay5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgeWllbGQgaG9vay5lcnJvcihjdHgsIGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgfTtcbiAgICByZXR1cm4gc2VydmVySG9vaztcbn1cbmV4cG9ydHMuY2hhaW5Ib29rcyA9IGNoYWluSG9va3M7XG5mdW5jdGlvbiBpc0hvb2sob2JqZWN0KSB7XG4gICAgcmV0dXJuIChcInJlcXVlc3RSZWNlaXZlZFwiIGluIG9iamVjdCB8fFxuICAgICAgICBcInJlcXVlc3RQcmVwYXJlZFwiIGluIG9iamVjdCB8fFxuICAgICAgICBcInJlcXVlc3RTZW50XCIgaW4gb2JqZWN0IHx8XG4gICAgICAgIFwicmVxdWVzdFJvdXRlZFwiIGluIG9iamVjdCB8fFxuICAgICAgICBcInJlc3BvbnNlUHJlcGFyZWRcIiBpbiBvYmplY3QgfHxcbiAgICAgICAgXCJyZXNwb25zZVNlbnRcIiBpbiBvYmplY3QgfHxcbiAgICAgICAgXCJlcnJvclwiIGluIG9iamVjdCk7XG59XG5leHBvcnRzLmlzSG9vayA9IGlzSG9vaztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlzVmFsaWRFcnJvckNvZGUgPSBleHBvcnRzLmh0dHBTdGF0dXNGcm9tRXJyb3JDb2RlID0gZXhwb3J0cy5Ud2lycEVycm9yQ29kZSA9IGV4cG9ydHMuQmFkUm91dGVFcnJvciA9IGV4cG9ydHMuSW50ZXJuYWxTZXJ2ZXJFcnJvcldpdGggPSBleHBvcnRzLkludGVybmFsU2VydmVyRXJyb3IgPSBleHBvcnRzLlJlcXVpcmVkQXJndW1lbnRFcnJvciA9IGV4cG9ydHMuSW52YWxpZEFyZ3VtZW50RXJyb3IgPSBleHBvcnRzLk5vdEZvdW5kRXJyb3IgPSBleHBvcnRzLlR3aXJwRXJyb3IgPSB2b2lkIDA7XG4vKipcbiAqIFJlcHJlc2VudHMgYSB0d2lycCBlcnJvclxuICovXG5jbGFzcyBUd2lycEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKGNvZGUsIG1zZykge1xuICAgICAgICBzdXBlcihtc2cpO1xuICAgICAgICB0aGlzLmNvZGUgPSBUd2lycEVycm9yQ29kZS5JbnRlcm5hbDtcbiAgICAgICAgdGhpcy5tZXRhID0ge307XG4gICAgICAgIHRoaXMuY29kZSA9IGNvZGU7XG4gICAgICAgIHRoaXMubXNnID0gbXNnO1xuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgVHdpcnBFcnJvci5wcm90b3R5cGUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgbWV0YWRhdGEga3YgdG8gdGhlIGVycm9yXG4gICAgICogQHBhcmFtIGtleVxuICAgICAqIEBwYXJhbSB2YWx1ZVxuICAgICAqL1xuICAgIHdpdGhNZXRhKGtleSwgdmFsdWUpIHtcbiAgICAgICAgdGhpcy5tZXRhW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBzaW5nbGUgbWV0YWRhdGEgdmFsdWVcbiAgICAgKiByZXR1cm4gXCJcIiBpZiBub3QgZm91bmRcbiAgICAgKiBAcGFyYW0ga2V5XG4gICAgICovXG4gICAgZ2V0TWV0YShrZXkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWV0YVtrZXldIHx8IFwiXCI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZCB0aGUgb3JpZ2luYWwgZXJyb3IgY2F1c2VcbiAgICAgKiBAcGFyYW0gZXJyXG4gICAgICogQHBhcmFtIGFkZE1ldGFcbiAgICAgKi9cbiAgICB3aXRoQ2F1c2UoZXJyLCBhZGRNZXRhID0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5fb3JpZ2luYWxDYXVzZSA9IGVycjtcbiAgICAgICAgaWYgKGFkZE1ldGEpIHtcbiAgICAgICAgICAgIHRoaXMud2l0aE1ldGEoXCJjYXVzZVwiLCBlcnIubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGNhdXNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fb3JpZ2luYWxDYXVzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZXJyb3IgcmVwcmVzZW50YXRpb24gdG8gSlNPTlxuICAgICAqL1xuICAgIHRvSlNPTigpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgY29kZTogdGhpcy5jb2RlLFxuICAgICAgICAgICAgICAgIG1zZzogdGhpcy5tc2csXG4gICAgICAgICAgICAgICAgbWV0YTogdGhpcy5tZXRhLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBge1wiY29kZVwiOiBcImludGVybmFsXCIsIFwibXNnXCI6IFwiVGhlcmUgd2FzIGFuIGVycm9yIGJ1dCBpdCBjb3VsZCBub3QgYmUgc2VyaWFsaXplZCBpbnRvIEpTT05cIn1gO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIHR3aXJwIGVycm9yIGZyb20gYW4gb2JqZWN0XG4gICAgICogQHBhcmFtIG9ialxuICAgICAqL1xuICAgIHN0YXRpYyBmcm9tT2JqZWN0KG9iaikge1xuICAgICAgICBjb25zdCBjb2RlID0gb2JqW1wiY29kZVwiXSB8fCBUd2lycEVycm9yQ29kZS5Vbmtub3duO1xuICAgICAgICBjb25zdCBtc2cgPSBvYmpbXCJtc2dcIl0gfHwgXCJ1bmtub3duXCI7XG4gICAgICAgIGNvbnN0IGVycm9yID0gbmV3IFR3aXJwRXJyb3IoY29kZSwgbXNnKTtcbiAgICAgICAgaWYgKG9ialtcIm1ldGFcIl0pIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKG9ialtcIm1ldGFcIl0pLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIGVycm9yLndpdGhNZXRhKGtleSwgb2JqW1wibWV0YVwiXVtrZXldKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlcnJvcjtcbiAgICB9XG59XG5leHBvcnRzLlR3aXJwRXJyb3IgPSBUd2lycEVycm9yO1xuLyoqXG4gKiBOb3RGb3VuZEVycm9yIGNvbnN0cnVjdG9yIGZvciB0aGUgY29tbW9uIE5vdEZvdW5kIGVycm9yLlxuICovXG5jbGFzcyBOb3RGb3VuZEVycm9yIGV4dGVuZHMgVHdpcnBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobXNnKSB7XG4gICAgICAgIHN1cGVyKFR3aXJwRXJyb3JDb2RlLk5vdEZvdW5kLCBtc2cpO1xuICAgIH1cbn1cbmV4cG9ydHMuTm90Rm91bmRFcnJvciA9IE5vdEZvdW5kRXJyb3I7XG4vKipcbiAqIEludmFsaWRBcmd1bWVudEVycm9yIGNvbnN0cnVjdG9yIGZvciB0aGUgY29tbW9uIEludmFsaWRBcmd1bWVudCBlcnJvci4gQ2FuIGJlXG4gKiB1c2VkIHdoZW4gYW4gYXJndW1lbnQgaGFzIGludmFsaWQgZm9ybWF0LCBpcyBhIG51bWJlciBvdXQgb2YgcmFuZ2UsIGlzIGEgYmFkXG4gKiBvcHRpb24sIGV0YykuXG4gKi9cbmNsYXNzIEludmFsaWRBcmd1bWVudEVycm9yIGV4dGVuZHMgVHdpcnBFcnJvciB7XG4gICAgY29uc3RydWN0b3IoYXJndW1lbnQsIHZhbGlkYXRpb25Nc2cpIHtcbiAgICAgICAgc3VwZXIoVHdpcnBFcnJvckNvZGUuSW52YWxpZEFyZ3VtZW50LCBhcmd1bWVudCArIFwiIFwiICsgdmFsaWRhdGlvbk1zZyk7XG4gICAgICAgIHRoaXMud2l0aE1ldGEoXCJhcmd1bWVudFwiLCBhcmd1bWVudCk7XG4gICAgfVxufVxuZXhwb3J0cy5JbnZhbGlkQXJndW1lbnRFcnJvciA9IEludmFsaWRBcmd1bWVudEVycm9yO1xuLyoqXG4gKiBSZXF1aXJlZEFyZ3VtZW50RXJyb3IgaXMgYSBtb3JlIHNwZWNpZmljIGNvbnN0cnVjdG9yIGZvciBJbnZhbGlkQXJndW1lbnRcbiAqIGVycm9yLiBTaG91bGQgYmUgdXNlZCB3aGVuIHRoZSBhcmd1bWVudCBpcyByZXF1aXJlZCAoZXhwZWN0ZWQgdG8gaGF2ZSBhXG4gKiBub24temVybyB2YWx1ZSkuXG4gKi9cbmNsYXNzIFJlcXVpcmVkQXJndW1lbnRFcnJvciBleHRlbmRzIEludmFsaWRBcmd1bWVudEVycm9yIHtcbiAgICBjb25zdHJ1Y3Rvcihhcmd1bWVudCkge1xuICAgICAgICBzdXBlcihhcmd1bWVudCwgXCJpcyByZXF1aXJlZFwiKTtcbiAgICB9XG59XG5leHBvcnRzLlJlcXVpcmVkQXJndW1lbnRFcnJvciA9IFJlcXVpcmVkQXJndW1lbnRFcnJvcjtcbi8qKlxuICogSW50ZXJuYWxFcnJvciBjb25zdHJ1Y3RvciBmb3IgdGhlIGNvbW1vbiBJbnRlcm5hbCBlcnJvci4gU2hvdWxkIGJlIHVzZWQgdG9cbiAqIHNwZWNpZnkgdGhhdCBzb21ldGhpbmcgYmFkIG9yIHVuZXhwZWN0ZWQgaGFwcGVuZWQuXG4gKi9cbmNsYXNzIEludGVybmFsU2VydmVyRXJyb3IgZXh0ZW5kcyBUd2lycEVycm9yIHtcbiAgICBjb25zdHJ1Y3Rvcihtc2cpIHtcbiAgICAgICAgc3VwZXIoVHdpcnBFcnJvckNvZGUuSW50ZXJuYWwsIG1zZyk7XG4gICAgfVxufVxuZXhwb3J0cy5JbnRlcm5hbFNlcnZlckVycm9yID0gSW50ZXJuYWxTZXJ2ZXJFcnJvcjtcbi8qKlxuICogSW50ZXJuYWxFcnJvcldpdGggbWFrZXMgYW4gaW50ZXJuYWwgZXJyb3IsIHdyYXBwaW5nIHRoZSBvcmlnaW5hbCBlcnJvciBhbmQgdXNpbmcgaXRcbiAqIGZvciB0aGUgZXJyb3IgbWVzc2FnZSwgYW5kIHdpdGggbWV0YWRhdGEgXCJjYXVzZVwiIHdpdGggdGhlIG9yaWdpbmFsIGVycm9yIHR5cGUuXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYnkgVHdpcnAgc2VydmljZXMgdG8gd3JhcCBub24tVHdpcnAgZXJyb3JzIGFzIGludGVybmFsIGVycm9ycy5cbiAqIFRoZSB3cmFwcGVkIGVycm9yIGNhbiBiZSBleHRyYWN0ZWQgbGF0ZXIgd2l0aCBlcnIuY2F1c2UoKVxuICovXG5jbGFzcyBJbnRlcm5hbFNlcnZlckVycm9yV2l0aCBleHRlbmRzIEludGVybmFsU2VydmVyRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKGVycikge1xuICAgICAgICBzdXBlcihlcnIubWVzc2FnZSk7XG4gICAgICAgIHRoaXMud2l0aE1ldGEoXCJjYXVzZVwiLCBlcnIubmFtZSk7XG4gICAgICAgIHRoaXMud2l0aENhdXNlKGVycik7XG4gICAgfVxufVxuZXhwb3J0cy5JbnRlcm5hbFNlcnZlckVycm9yV2l0aCA9IEludGVybmFsU2VydmVyRXJyb3JXaXRoO1xuLyoqXG4gKiBBIHN0YW5kYXJkIEJhZFJvdXRlIEVycm9yXG4gKi9cbmNsYXNzIEJhZFJvdXRlRXJyb3IgZXh0ZW5kcyBUd2lycEVycm9yIHtcbiAgICBjb25zdHJ1Y3Rvcihtc2csIG1ldGhvZCwgdXJsKSB7XG4gICAgICAgIHN1cGVyKFR3aXJwRXJyb3JDb2RlLkJhZFJvdXRlLCBtc2cpO1xuICAgICAgICB0aGlzLndpdGhNZXRhKFwidHdpcnBfaW52YWxpZF9yb3V0ZVwiLCBtZXRob2QgKyBcIiBcIiArIHVybCk7XG4gICAgfVxufVxuZXhwb3J0cy5CYWRSb3V0ZUVycm9yID0gQmFkUm91dGVFcnJvcjtcbnZhciBUd2lycEVycm9yQ29kZTtcbihmdW5jdGlvbiAoVHdpcnBFcnJvckNvZGUpIHtcbiAgICAvLyBDYW5jZWxlZCBpbmRpY2F0ZXMgdGhlIG9wZXJhdGlvbiB3YXMgY2FuY2VsbGVkICh0eXBpY2FsbHkgYnkgdGhlIGNhbGxlcikuXG4gICAgVHdpcnBFcnJvckNvZGVbXCJDYW5jZWxlZFwiXSA9IFwiY2FuY2VsZWRcIjtcbiAgICAvLyBVbmtub3duIGVycm9yLiBGb3IgZXhhbXBsZSB3aGVuIGhhbmRsaW5nIGVycm9ycyByYWlzZWQgYnkgQVBJcyB0aGF0IGRvIG5vdFxuICAgIC8vIHJldHVybiBlbm91Z2ggZXJyb3IgaW5mb3JtYXRpb24uXG4gICAgVHdpcnBFcnJvckNvZGVbXCJVbmtub3duXCJdID0gXCJ1bmtub3duXCI7XG4gICAgLy8gSW52YWxpZEFyZ3VtZW50IGluZGljYXRlcyBjbGllbnQgc3BlY2lmaWVkIGFuIGludmFsaWQgYXJndW1lbnQuIEl0XG4gICAgLy8gaW5kaWNhdGVzIGFyZ3VtZW50cyB0aGF0IGFyZSBwcm9ibGVtYXRpYyByZWdhcmRsZXNzIG9mIHRoZSBzdGF0ZSBvZiB0aGVcbiAgICAvLyBzeXN0ZW0gKGkuZS4gYSBtYWxmb3JtZWQgZmlsZSBuYW1lLCByZXF1aXJlZCBhcmd1bWVudCwgbnVtYmVyIG91dCBvZiByYW5nZSxcbiAgICAvLyBldGMuKS5cbiAgICBUd2lycEVycm9yQ29kZVtcIkludmFsaWRBcmd1bWVudFwiXSA9IFwiaW52YWxpZF9hcmd1bWVudFwiO1xuICAgIC8vIE1hbGZvcm1lZCBpbmRpY2F0ZXMgYW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgZGVjb2RpbmcgdGhlIGNsaWVudCdzIHJlcXVlc3QuXG4gICAgLy8gVGhpcyBtYXkgbWVhbiB0aGF0IHRoZSBtZXNzYWdlIHdhcyBlbmNvZGVkIGltcHJvcGVybHksIG9yIHRoYXQgdGhlcmUgaXMgYVxuICAgIC8vIGRpc2FncmVlbWVudCBpbiBtZXNzYWdlIGZvcm1hdCBiZXR3ZWVuIHRoZSBjbGllbnQgYW5kIHNlcnZlci5cbiAgICBUd2lycEVycm9yQ29kZVtcIk1hbGZvcm1lZFwiXSA9IFwibWFsZm9ybWVkXCI7XG4gICAgLy8gRGVhZGxpbmVFeGNlZWRlZCBtZWFucyBvcGVyYXRpb24gZXhwaXJlZCBiZWZvcmUgY29tcGxldGlvbi4gRm9yIG9wZXJhdGlvbnNcbiAgICAvLyB0aGF0IGNoYW5nZSB0aGUgc3RhdGUgb2YgdGhlIHN5c3RlbSwgdGhpcyBlcnJvciBtYXkgYmUgcmV0dXJuZWQgZXZlbiBpZiB0aGVcbiAgICAvLyBvcGVyYXRpb24gaGFzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgKHRpbWVvdXQpLlxuICAgIFR3aXJwRXJyb3JDb2RlW1wiRGVhZGxpbmVFeGNlZWRlZFwiXSA9IFwiZGVhZGxpbmVfZXhjZWVkZWRcIjtcbiAgICAvLyBOb3RGb3VuZCBtZWFucyBzb21lIHJlcXVlc3RlZCBlbnRpdHkgd2FzIG5vdCBmb3VuZC5cbiAgICBUd2lycEVycm9yQ29kZVtcIk5vdEZvdW5kXCJdID0gXCJub3RfZm91bmRcIjtcbiAgICAvLyBCYWRSb3V0ZSBtZWFucyB0aGF0IHRoZSByZXF1ZXN0ZWQgVVJMIHBhdGggd2Fzbid0IHJvdXRhYmxlIHRvIGEgVHdpcnBcbiAgICAvLyBzZXJ2aWNlIGFuZCBtZXRob2QuIFRoaXMgaXMgcmV0dXJuZWQgYnkgdGhlIGdlbmVyYXRlZCBzZXJ2ZXIsIGFuZCB1c3VhbGx5XG4gICAgLy8gc2hvdWxkbid0IGJlIHJldHVybmVkIGJ5IGFwcGxpY2F0aW9ucy4gSW5zdGVhZCwgYXBwbGljYXRpb25zIHNob3VsZCB1c2VcbiAgICAvLyBOb3RGb3VuZCBvciBVbmltcGxlbWVudGVkLlxuICAgIFR3aXJwRXJyb3JDb2RlW1wiQmFkUm91dGVcIl0gPSBcImJhZF9yb3V0ZVwiO1xuICAgIC8vIEFscmVhZHlFeGlzdHMgbWVhbnMgYW4gYXR0ZW1wdCB0byBjcmVhdGUgYW4gZW50aXR5IGZhaWxlZCBiZWNhdXNlIG9uZVxuICAgIC8vIGFscmVhZHkgZXhpc3RzLlxuICAgIFR3aXJwRXJyb3JDb2RlW1wiQWxyZWFkeUV4aXN0c1wiXSA9IFwiYWxyZWFkeV9leGlzdHNcIjtcbiAgICAvLyBQZXJtaXNzaW9uRGVuaWVkIGluZGljYXRlcyB0aGUgY2FsbGVyIGRvZXMgbm90IGhhdmUgcGVybWlzc2lvbiB0byBleGVjdXRlXG4gICAgLy8gdGhlIHNwZWNpZmllZCBvcGVyYXRpb24uIEl0IG11c3Qgbm90IGJlIHVzZWQgaWYgdGhlIGNhbGxlciBjYW5ub3QgYmVcbiAgICAvLyBpZGVudGlmaWVkIChVbmF1dGhlbnRpY2F0ZWQpLlxuICAgIFR3aXJwRXJyb3JDb2RlW1wiUGVybWlzc2lvbkRlbmllZFwiXSA9IFwicGVybWlzc2lvbl9kZW5pZWRcIjtcbiAgICAvLyBVbmF1dGhlbnRpY2F0ZWQgaW5kaWNhdGVzIHRoZSByZXF1ZXN0IGRvZXMgbm90IGhhdmUgdmFsaWQgYXV0aGVudGljYXRpb25cbiAgICAvLyBjcmVkZW50aWFscyBmb3IgdGhlIG9wZXJhdGlvbi5cbiAgICBUd2lycEVycm9yQ29kZVtcIlVuYXV0aGVudGljYXRlZFwiXSA9IFwidW5hdXRoZW50aWNhdGVkXCI7XG4gICAgLy8gUmVzb3VyY2VFeGhhdXN0ZWQgaW5kaWNhdGVzIHNvbWUgcmVzb3VyY2UgaGFzIGJlZW4gZXhoYXVzdGVkLCBwZXJoYXBzIGFcbiAgICAvLyBwZXItdXNlciBxdW90YSwgb3IgcGVyaGFwcyB0aGUgZW50aXJlIGZpbGUgc3lzdGVtIGlzIG91dCBvZiBzcGFjZS5cbiAgICBUd2lycEVycm9yQ29kZVtcIlJlc291cmNlRXhoYXVzdGVkXCJdID0gXCJyZXNvdXJjZV9leGhhdXN0ZWRcIjtcbiAgICAvLyBGYWlsZWRQcmVjb25kaXRpb24gaW5kaWNhdGVzIG9wZXJhdGlvbiB3YXMgcmVqZWN0ZWQgYmVjYXVzZSB0aGUgc3lzdGVtIGlzXG4gICAgLy8gbm90IGluIGEgc3RhdGUgcmVxdWlyZWQgZm9yIHRoZSBvcGVyYXRpb24ncyBleGVjdXRpb24uIEZvciBleGFtcGxlLCBkb2luZ1xuICAgIC8vIGFuIHJtZGlyIG9wZXJhdGlvbiBvbiBhIGRpcmVjdG9yeSB0aGF0IGlzIG5vbi1lbXB0eSwgb3Igb24gYSBub24tZGlyZWN0b3J5XG4gICAgLy8gb2JqZWN0LCBvciB3aGVuIGhhdmluZyBjb25mbGljdGluZyByZWFkLW1vZGlmeS13cml0ZSBvbiB0aGUgc2FtZSByZXNvdXJjZS5cbiAgICBUd2lycEVycm9yQ29kZVtcIkZhaWxlZFByZWNvbmRpdGlvblwiXSA9IFwiZmFpbGVkX3ByZWNvbmRpdGlvblwiO1xuICAgIC8vIEFib3J0ZWQgaW5kaWNhdGVzIHRoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQsIHR5cGljYWxseSBkdWUgdG8gYSBjb25jdXJyZW5jeVxuICAgIC8vIGlzc3VlIGxpa2Ugc2VxdWVuY2VyIGNoZWNrIGZhaWx1cmVzLCB0cmFuc2FjdGlvbiBhYm9ydHMsIGV0Yy5cbiAgICBUd2lycEVycm9yQ29kZVtcIkFib3J0ZWRcIl0gPSBcImFib3J0ZWRcIjtcbiAgICAvLyBPdXRPZlJhbmdlIG1lYW5zIG9wZXJhdGlvbiB3YXMgYXR0ZW1wdGVkIHBhc3QgdGhlIHZhbGlkIHJhbmdlLiBGb3IgZXhhbXBsZSxcbiAgICAvLyBzZWVraW5nIG9yIHJlYWRpbmcgcGFzdCBlbmQgb2YgYSBwYWdpbmF0ZWQgY29sbGVjdGlvbi5cbiAgICAvL1xuICAgIC8vIFVubGlrZSBJbnZhbGlkQXJndW1lbnQsIHRoaXMgZXJyb3IgaW5kaWNhdGVzIGEgcHJvYmxlbSB0aGF0IG1heSBiZSBmaXhlZCBpZlxuICAgIC8vIHRoZSBzeXN0ZW0gc3RhdGUgY2hhbmdlcyAoaS5lLiBhZGRpbmcgbW9yZSBpdGVtcyB0byB0aGUgY29sbGVjdGlvbikuXG4gICAgLy9cbiAgICAvLyBUaGVyZSBpcyBhIGZhaXIgYml0IG9mIG92ZXJsYXAgYmV0d2VlbiBGYWlsZWRQcmVjb25kaXRpb24gYW5kIE91dE9mUmFuZ2UuXG4gICAgLy8gV2UgcmVjb21tZW5kIHVzaW5nIE91dE9mUmFuZ2UgKHRoZSBtb3JlIHNwZWNpZmljIGVycm9yKSB3aGVuIGl0IGFwcGxpZXMgc29cbiAgICAvLyB0aGF0IGNhbGxlcnMgd2hvIGFyZSBpdGVyYXRpbmcgdGhyb3VnaCBhIHNwYWNlIGNhbiBlYXNpbHkgbG9vayBmb3IgYW5cbiAgICAvLyBPdXRPZlJhbmdlIGVycm9yIHRvIGRldGVjdCB3aGVuIHRoZXkgYXJlIGRvbmUuXG4gICAgVHdpcnBFcnJvckNvZGVbXCJPdXRPZlJhbmdlXCJdID0gXCJvdXRfb2ZfcmFuZ2VcIjtcbiAgICAvLyBVbmltcGxlbWVudGVkIGluZGljYXRlcyBvcGVyYXRpb24gaXMgbm90IGltcGxlbWVudGVkIG9yIG5vdFxuICAgIC8vIHN1cHBvcnRlZC9lbmFibGVkIGluIHRoaXMgc2VydmljZS5cbiAgICBUd2lycEVycm9yQ29kZVtcIlVuaW1wbGVtZW50ZWRcIl0gPSBcInVuaW1wbGVtZW50ZWRcIjtcbiAgICAvLyBJbnRlcm5hbCBlcnJvcnMuIFdoZW4gc29tZSBpbnZhcmlhbnRzIGV4cGVjdGVkIGJ5IHRoZSB1bmRlcmx5aW5nIHN5c3RlbVxuICAgIC8vIGhhdmUgYmVlbiBicm9rZW4uIEluIG90aGVyIHdvcmRzLCBzb21ldGhpbmcgYmFkIGhhcHBlbmVkIGluIHRoZSBsaWJyYXJ5IG9yXG4gICAgLy8gYmFja2VuZCBzZXJ2aWNlLiBEbyBub3QgY29uZnVzZSB3aXRoIEhUVFAgSW50ZXJuYWwgU2VydmVyIEVycm9yOyBhblxuICAgIC8vIEludGVybmFsIGVycm9yIGNvdWxkIGFsc28gaGFwcGVuIG9uIHRoZSBjbGllbnQgY29kZSwgaS5lLiB3aGVuIHBhcnNpbmcgYVxuICAgIC8vIHNlcnZlciByZXNwb25zZS5cbiAgICBUd2lycEVycm9yQ29kZVtcIkludGVybmFsXCJdID0gXCJpbnRlcm5hbFwiO1xuICAgIC8vIFVuYXZhaWxhYmxlIGluZGljYXRlcyB0aGUgc2VydmljZSBpcyBjdXJyZW50bHkgdW5hdmFpbGFibGUuIFRoaXMgaXMgYSBtb3N0XG4gICAgLy8gbGlrZWx5IGEgdHJhbnNpZW50IGNvbmRpdGlvbiBhbmQgbWF5IGJlIGNvcnJlY3RlZCBieSByZXRyeWluZyB3aXRoIGFcbiAgICAvLyBiYWNrb2ZmLlxuICAgIFR3aXJwRXJyb3JDb2RlW1wiVW5hdmFpbGFibGVcIl0gPSBcInVuYXZhaWxhYmxlXCI7XG4gICAgLy8gRGF0YUxvc3MgaW5kaWNhdGVzIHVucmVjb3ZlcmFibGUgZGF0YSBsb3NzIG9yIGNvcnJ1cHRpb24uXG4gICAgVHdpcnBFcnJvckNvZGVbXCJEYXRhTG9zc1wiXSA9IFwiZGF0YV9sb3NzXCI7XG59KShUd2lycEVycm9yQ29kZSA9IGV4cG9ydHMuVHdpcnBFcnJvckNvZGUgfHwgKGV4cG9ydHMuVHdpcnBFcnJvckNvZGUgPSB7fSkpO1xuLy8gU2VydmVySFRUUFN0YXR1c0Zyb21FcnJvckNvZGUgbWFwcyBhIFR3aXJwIGVycm9yIHR5cGUgaW50byBhIHNpbWlsYXIgSFRUUFxuLy8gcmVzcG9uc2Ugc3RhdHVzLiBJdCBpcyB1c2VkIGJ5IHRoZSBUd2lycCBzZXJ2ZXIgaGFuZGxlciB0byBzZXQgdGhlIEhUVFBcbi8vIHJlc3BvbnNlIHN0YXR1cyBjb2RlLiBSZXR1cm5zIDAgaWYgdGhlIEVycm9yQ29kZSBpcyBpbnZhbGlkLlxuZnVuY3Rpb24gaHR0cFN0YXR1c0Zyb21FcnJvckNvZGUoY29kZSkge1xuICAgIHN3aXRjaCAoY29kZSkge1xuICAgICAgICBjYXNlIFR3aXJwRXJyb3JDb2RlLkNhbmNlbGVkOlxuICAgICAgICAgICAgcmV0dXJuIDQwODsgLy8gUmVxdWVzdFRpbWVvdXRcbiAgICAgICAgY2FzZSBUd2lycEVycm9yQ29kZS5Vbmtub3duOlxuICAgICAgICAgICAgcmV0dXJuIDUwMDsgLy8gSW50ZXJuYWwgU2VydmVyIEVycm9yXG4gICAgICAgIGNhc2UgVHdpcnBFcnJvckNvZGUuSW52YWxpZEFyZ3VtZW50OlxuICAgICAgICAgICAgcmV0dXJuIDQwMDsgLy8gQmFkUmVxdWVzdFxuICAgICAgICBjYXNlIFR3aXJwRXJyb3JDb2RlLk1hbGZvcm1lZDpcbiAgICAgICAgICAgIHJldHVybiA0MDA7IC8vIEJhZFJlcXVlc3RcbiAgICAgICAgY2FzZSBUd2lycEVycm9yQ29kZS5EZWFkbGluZUV4Y2VlZGVkOlxuICAgICAgICAgICAgcmV0dXJuIDQwODsgLy8gUmVxdWVzdFRpbWVvdXRcbiAgICAgICAgY2FzZSBUd2lycEVycm9yQ29kZS5Ob3RGb3VuZDpcbiAgICAgICAgICAgIHJldHVybiA0MDQ7IC8vIE5vdCBGb3VuZFxuICAgICAgICBjYXNlIFR3aXJwRXJyb3JDb2RlLkJhZFJvdXRlOlxuICAgICAgICAgICAgcmV0dXJuIDQwNDsgLy8gTm90IEZvdW5kXG4gICAgICAgIGNhc2UgVHdpcnBFcnJvckNvZGUuQWxyZWFkeUV4aXN0czpcbiAgICAgICAgICAgIHJldHVybiA0MDk7IC8vIENvbmZsaWN0XG4gICAgICAgIGNhc2UgVHdpcnBFcnJvckNvZGUuUGVybWlzc2lvbkRlbmllZDpcbiAgICAgICAgICAgIHJldHVybiA0MDM7IC8vIEZvcmJpZGRlblxuICAgICAgICBjYXNlIFR3aXJwRXJyb3JDb2RlLlVuYXV0aGVudGljYXRlZDpcbiAgICAgICAgICAgIHJldHVybiA0MDE7IC8vIFVuYXV0aG9yaXplZFxuICAgICAgICBjYXNlIFR3aXJwRXJyb3JDb2RlLlJlc291cmNlRXhoYXVzdGVkOlxuICAgICAgICAgICAgcmV0dXJuIDQyOTsgLy8gVG9vIE1hbnkgUmVxdWVzdHNcbiAgICAgICAgY2FzZSBUd2lycEVycm9yQ29kZS5GYWlsZWRQcmVjb25kaXRpb246XG4gICAgICAgICAgICByZXR1cm4gNDEyOyAvLyBQcmVjb25kaXRpb24gRmFpbGVkXG4gICAgICAgIGNhc2UgVHdpcnBFcnJvckNvZGUuQWJvcnRlZDpcbiAgICAgICAgICAgIHJldHVybiA0MDk7IC8vIENvbmZsaWN0XG4gICAgICAgIGNhc2UgVHdpcnBFcnJvckNvZGUuT3V0T2ZSYW5nZTpcbiAgICAgICAgICAgIHJldHVybiA0MDA7IC8vIEJhZCBSZXF1ZXN0XG4gICAgICAgIGNhc2UgVHdpcnBFcnJvckNvZGUuVW5pbXBsZW1lbnRlZDpcbiAgICAgICAgICAgIHJldHVybiA1MDE7IC8vIE5vdCBJbXBsZW1lbnRlZFxuICAgICAgICBjYXNlIFR3aXJwRXJyb3JDb2RlLkludGVybmFsOlxuICAgICAgICAgICAgcmV0dXJuIDUwMDsgLy8gSW50ZXJuYWwgU2VydmVyIEVycm9yXG4gICAgICAgIGNhc2UgVHdpcnBFcnJvckNvZGUuVW5hdmFpbGFibGU6XG4gICAgICAgICAgICByZXR1cm4gNTAzOyAvLyBTZXJ2aWNlIFVuYXZhaWxhYmxlXG4gICAgICAgIGNhc2UgVHdpcnBFcnJvckNvZGUuRGF0YUxvc3M6XG4gICAgICAgICAgICByZXR1cm4gNTAwOyAvLyBJbnRlcm5hbCBTZXJ2ZXIgRXJyb3JcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiAwOyAvLyBJbnZhbGlkIVxuICAgIH1cbn1cbmV4cG9ydHMuaHR0cFN0YXR1c0Zyb21FcnJvckNvZGUgPSBodHRwU3RhdHVzRnJvbUVycm9yQ29kZTtcbi8vIElzVmFsaWRFcnJvckNvZGUgcmV0dXJucyB0cnVlIGlmIGlzIG9uZSBvZiB0aGUgdmFsaWQgcHJlZGVmaW5lZCBjb25zdGFudHMuXG5mdW5jdGlvbiBpc1ZhbGlkRXJyb3JDb2RlKGNvZGUpIHtcbiAgICByZXR1cm4gaHR0cFN0YXR1c0Zyb21FcnJvckNvZGUoY29kZSkgIT0gMDtcbn1cbmV4cG9ydHMuaXNWYWxpZEVycm9yQ29kZSA9IGlzVmFsaWRFcnJvckNvZGU7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnBhcnNlVHdpcnBQYXRoID0gZXhwb3J0cy5nZXRSZXF1ZXN0RGF0YSA9IGV4cG9ydHMudmFsaWRhdGVSZXF1ZXN0ID0gZXhwb3J0cy5nZXRDb250ZW50VHlwZSA9IGV4cG9ydHMuVHdpcnBDb250ZW50VHlwZSA9IHZvaWQgMDtcbmNvbnN0IGVycm9yc18xID0gcmVxdWlyZShcIi4vZXJyb3JzXCIpO1xuLyoqXG4gKiBTdXBwb3J0ZWQgVHdpcnAgQ29udGVudC1UeXBlXG4gKi9cbnZhciBUd2lycENvbnRlbnRUeXBlO1xuKGZ1bmN0aW9uIChUd2lycENvbnRlbnRUeXBlKSB7XG4gICAgVHdpcnBDb250ZW50VHlwZVtUd2lycENvbnRlbnRUeXBlW1wiUHJvdG9idWZcIl0gPSAwXSA9IFwiUHJvdG9idWZcIjtcbiAgICBUd2lycENvbnRlbnRUeXBlW1R3aXJwQ29udGVudFR5cGVbXCJKU09OXCJdID0gMV0gPSBcIkpTT05cIjtcbiAgICBUd2lycENvbnRlbnRUeXBlW1R3aXJwQ29udGVudFR5cGVbXCJVbmtub3duXCJdID0gMl0gPSBcIlVua25vd25cIjtcbn0pKFR3aXJwQ29udGVudFR5cGUgPSBleHBvcnRzLlR3aXJwQ29udGVudFR5cGUgfHwgKGV4cG9ydHMuVHdpcnBDb250ZW50VHlwZSA9IHt9KSk7XG4vKipcbiAqIEdldCBzdXBwb3J0ZWQgY29udGVudC10eXBlXG4gKiBAcGFyYW0gbWltZVR5cGVcbiAqL1xuZnVuY3Rpb24gZ2V0Q29udGVudFR5cGUobWltZVR5cGUpIHtcbiAgICBzd2l0Y2ggKG1pbWVUeXBlKSB7XG4gICAgICAgIGNhc2UgXCJhcHBsaWNhdGlvbi9wcm90b2J1ZlwiOlxuICAgICAgICAgICAgcmV0dXJuIFR3aXJwQ29udGVudFR5cGUuUHJvdG9idWY7XG4gICAgICAgIGNhc2UgXCJhcHBsaWNhdGlvbi9qc29uXCI6XG4gICAgICAgICAgICByZXR1cm4gVHdpcnBDb250ZW50VHlwZS5KU09OO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIFR3aXJwQ29udGVudFR5cGUuVW5rbm93bjtcbiAgICB9XG59XG5leHBvcnRzLmdldENvbnRlbnRUeXBlID0gZ2V0Q29udGVudFR5cGU7XG4vKipcbiAqIFZhbGlkYXRlIGEgdHdpcnAgcmVxdWVzdFxuICogQHBhcmFtIGN0eFxuICogQHBhcmFtIHJlcXVlc3RcbiAqIEBwYXJhbSBwYXRoUHJlZml4XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlUmVxdWVzdChjdHgsIHJlcXVlc3QsIHBhdGhQcmVmaXgpIHtcbiAgICBpZiAocmVxdWVzdC5tZXRob2QgIT09IFwiUE9TVFwiKSB7XG4gICAgICAgIGNvbnN0IG1zZyA9IGB1bnN1cHBvcnRlZCBtZXRob2QgJHtyZXF1ZXN0Lm1ldGhvZH0gKG9ubHkgUE9TVCBpcyBhbGxvd2VkKWA7XG4gICAgICAgIHRocm93IG5ldyBlcnJvcnNfMS5CYWRSb3V0ZUVycm9yKG1zZywgcmVxdWVzdC5tZXRob2QgfHwgXCJcIiwgcmVxdWVzdC51cmwgfHwgXCJcIik7XG4gICAgfVxuICAgIGNvbnN0IHBhdGggPSBwYXJzZVR3aXJwUGF0aChyZXF1ZXN0LnVybCB8fCBcIlwiKTtcbiAgICBpZiAocGF0aC5wa2dTZXJ2aWNlICE9PVxuICAgICAgICAoY3R4LnBhY2thZ2VOYW1lID8gY3R4LnBhY2thZ2VOYW1lICsgXCIuXCIgOiBcIlwiKSArIGN0eC5zZXJ2aWNlTmFtZSkge1xuICAgICAgICBjb25zdCBtc2cgPSBgbm8gaGFuZGxlciBmb3IgcGF0aCAke3JlcXVlc3QudXJsfWA7XG4gICAgICAgIHRocm93IG5ldyBlcnJvcnNfMS5CYWRSb3V0ZUVycm9yKG1zZywgcmVxdWVzdC5tZXRob2QgfHwgXCJcIiwgcmVxdWVzdC51cmwgfHwgXCJcIik7XG4gICAgfVxuICAgIGlmIChwYXRoLnByZWZpeCAhPT0gcGF0aFByZWZpeCkge1xuICAgICAgICBjb25zdCBtc2cgPSBgaW52YWxpZCBwYXRoIHByZWZpeCAke3BhdGgucHJlZml4fSwgZXhwZWN0ZWQgJHtwYXRoUHJlZml4fSwgb24gcGF0aCAke3JlcXVlc3QudXJsfWA7XG4gICAgICAgIHRocm93IG5ldyBlcnJvcnNfMS5CYWRSb3V0ZUVycm9yKG1zZywgcmVxdWVzdC5tZXRob2QgfHwgXCJcIiwgcmVxdWVzdC51cmwgfHwgXCJcIik7XG4gICAgfVxuICAgIGNvbnN0IG1pbWVDb250ZW50VHlwZSA9IHJlcXVlc3QuaGVhZGVyc1tcImNvbnRlbnQtdHlwZVwiXSB8fCBcIlwiO1xuICAgIGlmIChjdHguY29udGVudFR5cGUgPT09IFR3aXJwQ29udGVudFR5cGUuVW5rbm93bikge1xuICAgICAgICBjb25zdCBtc2cgPSBgdW5leHBlY3RlZCBDb250ZW50LVR5cGU6ICR7cmVxdWVzdC5oZWFkZXJzW1wiY29udGVudC10eXBlXCJdfWA7XG4gICAgICAgIHRocm93IG5ldyBlcnJvcnNfMS5CYWRSb3V0ZUVycm9yKG1zZywgcmVxdWVzdC5tZXRob2QgfHwgXCJcIiwgcmVxdWVzdC51cmwgfHwgXCJcIik7XG4gICAgfVxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHBhdGgpLCB7IG1pbWVDb250ZW50VHlwZSwgY29udGVudFR5cGU6IGN0eC5jb250ZW50VHlwZSB9KTtcbn1cbmV4cG9ydHMudmFsaWRhdGVSZXF1ZXN0ID0gdmFsaWRhdGVSZXF1ZXN0O1xuLyoqXG4gKiBHZXQgcmVxdWVzdCBkYXRhIGZyb20gdGhlIGJvZHlcbiAqIEBwYXJhbSByZXFcbiAqL1xuZnVuY3Rpb24gZ2V0UmVxdWVzdERhdGEocmVxKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgcmVxV2l0aFJhd0JvZHkgPSByZXE7XG4gICAgICAgIGlmIChyZXFXaXRoUmF3Qm9keS5yYXdCb2R5IGluc3RhbmNlb2YgQnVmZmVyKSB7XG4gICAgICAgICAgICByZXNvbHZlKHJlcVdpdGhSYXdCb2R5LnJhd0JvZHkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNodW5rcyA9IFtdO1xuICAgICAgICByZXEub24oXCJkYXRhXCIsIChjaHVuaykgPT4gY2h1bmtzLnB1c2goY2h1bmspKTtcbiAgICAgICAgcmVxLm9uKFwiZW5kXCIsICgpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBCdWZmZXIuY29uY2F0KGNodW5rcyk7XG4gICAgICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgICB9KSk7XG4gICAgICAgIHJlcS5vbihcImVycm9yXCIsIChlcnIpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXEuYWJvcnRlZCkge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgZXJyb3JzXzEuVHdpcnBFcnJvcihlcnJvcnNfMS5Ud2lycEVycm9yQ29kZS5EZWFkbGluZUV4Y2VlZGVkLCBcImZhaWxlZCB0byByZWFkIHJlcXVlc3Q6IGRlYWRsaW5lIGV4Y2VlZGVkXCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgZXJyb3JzXzEuVHdpcnBFcnJvcihlcnJvcnNfMS5Ud2lycEVycm9yQ29kZS5NYWxmb3JtZWQsIGVyci5tZXNzYWdlKS53aXRoQ2F1c2UoZXJyKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXEub24oXCJjbG9zZVwiLCAoKSA9PiB7XG4gICAgICAgICAgICByZWplY3QobmV3IGVycm9yc18xLlR3aXJwRXJyb3IoZXJyb3JzXzEuVHdpcnBFcnJvckNvZGUuQ2FuY2VsZWQsIFwiZmFpbGVkIHRvIHJlYWQgcmVxdWVzdDogY29udGV4dCBjYW5jZWxlZFwiKSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZXhwb3J0cy5nZXRSZXF1ZXN0RGF0YSA9IGdldFJlcXVlc3REYXRhO1xuLyoqXG4gKiBQYXJzZXMgdHdpcnAgdXJsIHBhdGhcbiAqIEBwYXJhbSBwYXRoXG4gKi9cbmZ1bmN0aW9uIHBhcnNlVHdpcnBQYXRoKHBhdGgpIHtcbiAgICBjb25zdCBwYXJ0cyA9IHBhdGguc3BsaXQoXCIvXCIpO1xuICAgIGlmIChwYXJ0cy5sZW5ndGggPCAyKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwa2dTZXJ2aWNlOiBcIlwiLFxuICAgICAgICAgICAgbWV0aG9kOiBcIlwiLFxuICAgICAgICAgICAgcHJlZml4OiBcIlwiLFxuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBtZXRob2Q6IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdLFxuICAgICAgICBwa2dTZXJ2aWNlOiBwYXJ0c1twYXJ0cy5sZW5ndGggLSAyXSxcbiAgICAgICAgcHJlZml4OiBwYXJ0cy5zbGljZSgwLCBwYXJ0cy5sZW5ndGggLSAyKS5qb2luKFwiL1wiKSxcbiAgICB9O1xufVxuZXhwb3J0cy5wYXJzZVR3aXJwUGF0aCA9IHBhcnNlVHdpcnBQYXRoO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy53cml0ZUVycm9yID0gZXhwb3J0cy5Ud2lycFNlcnZlciA9IHZvaWQgMDtcbmNvbnN0IGhvb2tzXzEgPSByZXF1aXJlKFwiLi9ob29rc1wiKTtcbmNvbnN0IHJlcXVlc3RfMSA9IHJlcXVpcmUoXCIuL3JlcXVlc3RcIik7XG5jb25zdCBlcnJvcnNfMSA9IHJlcXVpcmUoXCIuL2Vycm9yc1wiKTtcbi8qKlxuICogUnVudGltZSBzZXJ2ZXIgaW1wbGVtZW50YXRpb24gb2YgYSBUd2lycFNlcnZlclxuICovXG5jbGFzcyBUd2lycFNlcnZlciB7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICB0aGlzLnBhdGhQcmVmaXggPSBcIi90d2lycFwiO1xuICAgICAgICB0aGlzLmhvb2tzID0gW107XG4gICAgICAgIHRoaXMuaW50ZXJjZXB0b3JzID0gW107XG4gICAgICAgIHRoaXMucGFja2FnZU5hbWUgPSBvcHRpb25zLnBhY2thZ2VOYW1lO1xuICAgICAgICB0aGlzLnNlcnZpY2VOYW1lID0gb3B0aW9ucy5zZXJ2aWNlTmFtZTtcbiAgICAgICAgdGhpcy5tZXRob2RMaXN0ID0gb3B0aW9ucy5tZXRob2RMaXN0O1xuICAgICAgICB0aGlzLm1hdGNoUm91dGUgPSBvcHRpb25zLm1hdGNoUm91dGU7XG4gICAgICAgIHRoaXMuc2VydmljZSA9IG9wdGlvbnMuc2VydmljZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgcHJlZml4IGZvciB0aGlzIHNlcnZlclxuICAgICAqL1xuICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhdGhQcmVmaXg7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBodHRwIGhhbmRsZXIgZm9yIHR3aXJwIGNvbXBsYWludCBlbmRwb2ludHNcbiAgICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgICAqL1xuICAgIGh0dHBIYW5kbGVyKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIChyZXEsIHJlc3ApID0+IHtcbiAgICAgICAgICAgIC8vIHNldHVwIHByZWZpeFxuICAgICAgICAgICAgaWYgKChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMucHJlZml4KSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy53aXRoUHJlZml4KG9wdGlvbnMucHJlZml4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9odHRwSGFuZGxlcihyZXEsIHJlc3ApO1xuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGludGVyY2VwdG9ycyBvciBob29rcyB0byB0aGUgcmVxdWVzdCBzdGFja1xuICAgICAqIEBwYXJhbSBtaWRkbGV3YXJlc1xuICAgICAqL1xuICAgIHVzZSguLi5taWRkbGV3YXJlcykge1xuICAgICAgICBtaWRkbGV3YXJlcy5mb3JFYWNoKChtaWRkbGV3YXJlKSA9PiB7XG4gICAgICAgICAgICBpZiAoaG9va3NfMS5pc0hvb2sobWlkZGxld2FyZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhvb2tzLnB1c2gobWlkZGxld2FyZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmludGVyY2VwdG9ycy5wdXNoKG1pZGRsZXdhcmUpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBwcmVmaXggdG8gdGhlIHNlcnZpY2UgdXJsIHBhdGhcbiAgICAgKiBAcGFyYW0gcHJlZml4XG4gICAgICovXG4gICAgd2l0aFByZWZpeChwcmVmaXgpIHtcbiAgICAgICAgaWYgKHByZWZpeCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHRoaXMucGF0aFByZWZpeCA9IFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnBhdGhQcmVmaXggPSBwcmVmaXg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHJlZ2V4IG1hdGNoaW5nIHBhdGggZm9yIHRoaXMgdHdpcnAgc2VydmVyXG4gICAgICovXG4gICAgbWF0Y2hpbmdQYXRoKCkge1xuICAgICAgICBjb25zdCBiYXNlUmVnZXggPSB0aGlzLmJhc2VVUkkoKS5yZXBsYWNlKC9cXC4vZywgXCJcXFxcLlwiKTtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoYCR7YmFzZVJlZ2V4fVxcLygke3RoaXMubWV0aG9kTGlzdC5qb2luKFwifFwiKX0pYCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGJhc2UgVVJJIGZvciB0aGlzIHR3aXJwIHNlcnZlclxuICAgICAqL1xuICAgIGJhc2VVUkkoKSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLnBhdGhQcmVmaXh9LyR7dGhpcy5wYWNrYWdlTmFtZSA/IHRoaXMucGFja2FnZU5hbWUgKyBcIi5cIiA6IFwiXCJ9JHt0aGlzLnNlcnZpY2VOYW1lfWA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIHR3aXJwIGNvbnRleHRcbiAgICAgKiBAcGFyYW0gcmVxXG4gICAgICogQHBhcmFtIHJlc1xuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgY3JlYXRlQ29udGV4dChyZXEsIHJlcykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcGFja2FnZU5hbWU6IHRoaXMucGFja2FnZU5hbWUsXG4gICAgICAgICAgICBzZXJ2aWNlTmFtZTogdGhpcy5zZXJ2aWNlTmFtZSxcbiAgICAgICAgICAgIG1ldGhvZE5hbWU6IFwiXCIsXG4gICAgICAgICAgICBjb250ZW50VHlwZTogcmVxdWVzdF8xLmdldENvbnRlbnRUeXBlKHJlcS5oZWFkZXJzW1wiY29udGVudC10eXBlXCJdKSxcbiAgICAgICAgICAgIHJlcTogcmVxLFxuICAgICAgICAgICAgcmVzOiByZXMsXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFR3cmlwIHNlcnZlciBodHRwIGhhbmRsZXIgaW1wbGVtZW50YXRpb25cbiAgICAgKiBAcGFyYW0gcmVxXG4gICAgICogQHBhcmFtIHJlc3BcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF9odHRwSGFuZGxlcihyZXEsIHJlc3ApIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuY3JlYXRlQ29udGV4dChyZXEsIHJlc3ApO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB5aWVsZCB0aGlzLmludm9rZUhvb2soXCJyZXF1ZXN0UmVjZWl2ZWRcIiwgY3R4KTtcbiAgICAgICAgICAgICAgICBjb25zdCB7IG1ldGhvZCwgbWltZUNvbnRlbnRUeXBlIH0gPSByZXF1ZXN0XzEudmFsaWRhdGVSZXF1ZXN0KGN0eCwgcmVxLCB0aGlzLnBhdGhQcmVmaXggfHwgXCJcIik7XG4gICAgICAgICAgICAgICAgY29uc3QgaGFuZGxlciA9IHRoaXMubWF0Y2hSb3V0ZShtZXRob2QsIHtcbiAgICAgICAgICAgICAgICAgICAgb25NYXRjaDogKGN0eCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW52b2tlSG9vayhcInJlcXVlc3RSb3V0ZWRcIiwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgb25Ob3RGb3VuZDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXNnID0gYG5vIGhhbmRsZXIgZm9yIHBhdGggJHtyZXEudXJsfWA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuQmFkUm91dGVFcnJvcihtc2csIHJlcS5tZXRob2QgfHwgXCJcIiwgcmVxLnVybCB8fCBcIlwiKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCBib2R5ID0geWllbGQgcmVxdWVzdF8xLmdldFJlcXVlc3REYXRhKHJlcSk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSB5aWVsZCBoYW5kbGVyKGN0eCwgdGhpcy5zZXJ2aWNlLCBib2R5LCB0aGlzLmludGVyY2VwdG9ycyk7XG4gICAgICAgICAgICAgICAgeWllbGQgUHJvbWlzZS5hbGwoW1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludm9rZUhvb2soXCJyZXNwb25zZVByZXBhcmVkXCIsIGN0eCksXG4gICAgICAgICAgICAgICAgICAgIC8vIGtlZXAgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgdGlsbCBuZXh0IHJlbGVhc2VcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZva2VIb29rKFwicmVxdWVzdFByZXBhcmVkXCIsIGN0eCksXG4gICAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICAgICAgcmVzcC5zdGF0dXNDb2RlID0gMjAwO1xuICAgICAgICAgICAgICAgIHJlc3Auc2V0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIG1pbWVDb250ZW50VHlwZSk7XG4gICAgICAgICAgICAgICAgcmVzcC5lbmQocmVzcG9uc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICB5aWVsZCB0aGlzLmludm9rZUhvb2soXCJlcnJvclwiLCBjdHgsIG11c3RCZVR3aXJwRXJyb3IoZSkpO1xuICAgICAgICAgICAgICAgIGlmICghcmVzcC5oZWFkZXJzU2VudCkge1xuICAgICAgICAgICAgICAgICAgICB3cml0ZUVycm9yKHJlc3AsIGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHlpZWxkIFByb21pc2UuYWxsKFtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZva2VIb29rKFwicmVzcG9uc2VTZW50XCIsIGN0eCksXG4gICAgICAgICAgICAgICAgICAgIC8vIGtlZXAgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgdGlsbCBuZXh0IHJlbGVhc2VcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZva2VIb29rKFwicmVxdWVzdFNlbnRcIiwgY3R4KSxcbiAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEludm9rZSBhIGhvb2tcbiAgICAgKiBAcGFyYW0gaG9va05hbWVcbiAgICAgKiBAcGFyYW0gY3R4XG4gICAgICogQHBhcmFtIGVyclxuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbiAgICBpbnZva2VIb29rKGhvb2tOYW1lLCBjdHgsIGVycikge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaG9va3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY2hhaW5lZEhvb2tzID0gaG9va3NfMS5jaGFpbkhvb2tzKC4uLnRoaXMuaG9va3MpO1xuICAgICAgICAgICAgY29uc3QgaG9vayA9IGNoYWluZWRIb29rcyA9PT0gbnVsbCB8fCBjaGFpbmVkSG9va3MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNoYWluZWRIb29rc1tob29rTmFtZV07XG4gICAgICAgICAgICBpZiAoaG9vaykge1xuICAgICAgICAgICAgICAgIHlpZWxkIGhvb2soY3R4LCBlcnIgfHwgbmV3IGVycm9yc18xLkludGVybmFsU2VydmVyRXJyb3IoXCJpbnRlcm5hbCBzZXJ2ZXIgZXJyb3JcIikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnRzLlR3aXJwU2VydmVyID0gVHdpcnBTZXJ2ZXI7XG4vKipcbiAqIFdyaXRlIGh0dHAgZXJyb3IgcmVzcG9uc2VcbiAqIEBwYXJhbSByZXNcbiAqIEBwYXJhbSBlcnJvclxuICovXG5mdW5jdGlvbiB3cml0ZUVycm9yKHJlcywgZXJyb3IpIHtcbiAgICBjb25zdCB0d2lycEVycm9yID0gbXVzdEJlVHdpcnBFcnJvcihlcnJvcik7XG4gICAgcmVzLnNldEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb25cIik7XG4gICAgcmVzLnN0YXR1c0NvZGUgPSBlcnJvcnNfMS5odHRwU3RhdHVzRnJvbUVycm9yQ29kZSh0d2lycEVycm9yLmNvZGUpO1xuICAgIHJlcy5lbmQodHdpcnBFcnJvci50b0pTT04oKSk7XG59XG5leHBvcnRzLndyaXRlRXJyb3IgPSB3cml0ZUVycm9yO1xuLyoqXG4gKiBNYWtlIHN1cmUgdGhhdCB0aGUgZXJyb3IgcGFzc2VkIGlzIGEgVHdpcnBFcnJvclxuICogb3RoZXJ3aXNlIGl0IHdpbGwgd3JhcCBpdCBpbnRvIGFuIEludGVybmFsRXJyb3JcbiAqIEBwYXJhbSBlcnJcbiAqL1xuZnVuY3Rpb24gbXVzdEJlVHdpcnBFcnJvcihlcnIpIHtcbiAgICBpZiAoZXJyIGluc3RhbmNlb2YgZXJyb3JzXzEuVHdpcnBFcnJvcikge1xuICAgICAgICByZXR1cm4gZXJyO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IGVycm9yc18xLkludGVybmFsU2VydmVyRXJyb3JXaXRoKGVycik7XG59XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNoYWluSW50ZXJjZXB0b3JzID0gdm9pZCAwO1xuLy8gY2hhaW5zIG11bHRpcGxlIEludGVyY2VwdG9ycyBpbnRvIGEgc2luZ2xlIEludGVyY2VwdG9yLlxuLy8gVGhlIGZpcnN0IGludGVyY2VwdG9yIHdyYXBzIHRoZSBzZWNvbmQgb25lLCBhbmQgc28gb24uXG4vLyBSZXR1cm5zIG51bGwgaWYgaW50ZXJjZXB0b3JzIGlzIGVtcHR5LlxuZnVuY3Rpb24gY2hhaW5JbnRlcmNlcHRvcnMoLi4uaW50ZXJjZXB0b3JzKSB7XG4gICAgaWYgKGludGVyY2VwdG9ycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaW50ZXJjZXB0b3JzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gaW50ZXJjZXB0b3JzWzBdO1xuICAgIH1cbiAgICBjb25zdCBmaXJzdCA9IGludGVyY2VwdG9yc1swXTtcbiAgICByZXR1cm4gKGN0eCwgcmVxdWVzdCwgaGFuZGxlcikgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBsZXQgbmV4dCA9IGhhbmRsZXI7XG4gICAgICAgIGZvciAobGV0IGkgPSBpbnRlcmNlcHRvcnMubGVuZ3RoIC0gMTsgaSA+IDA7IGktLSkge1xuICAgICAgICAgICAgbmV4dCA9ICgobmV4dCkgPT4gKGN0eCwgdHlwZWRSZXF1ZXN0KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGludGVyY2VwdG9yc1tpXShjdHgsIHR5cGVkUmVxdWVzdCwgbmV4dCk7XG4gICAgICAgICAgICB9KShuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlyc3QoY3R4LCByZXF1ZXN0LCBuZXh0KTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuY2hhaW5JbnRlcmNlcHRvcnMgPSBjaGFpbkludGVyY2VwdG9ycztcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmZ1bmN0aW9uIF9wcm9jZXNzICh2LCBtb2QpIHtcbiAgdmFyIGlcbiAgdmFyIHJcblxuICBpZiAodHlwZW9mIG1vZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHIgPSBtb2QodilcbiAgICBpZiAociAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2ID0gclxuICAgIH1cbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG1vZCkpIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbW9kLmxlbmd0aDsgaSsrKSB7XG4gICAgICByID0gbW9kW2ldKHYpXG4gICAgICBpZiAociAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHYgPSByXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZcbn1cblxuZnVuY3Rpb24gcGFyc2VLZXkgKGtleSwgdmFsKSB7XG4gIC8vIGRldGVjdCBuZWdhdGl2ZSBpbmRleCBub3RhdGlvblxuICBpZiAoa2V5WzBdID09PSAnLScgJiYgQXJyYXkuaXNBcnJheSh2YWwpICYmIC9eLVxcZCskLy50ZXN0KGtleSkpIHtcbiAgICByZXR1cm4gdmFsLmxlbmd0aCArIHBhcnNlSW50KGtleSwgMTApXG4gIH1cbiAgcmV0dXJuIGtleVxufVxuXG5mdW5jdGlvbiBpc0luZGV4IChrKSB7XG4gIHJldHVybiAvXlxcZCskLy50ZXN0KGspXG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0ICh2YWwpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBPYmplY3RdJ1xufVxuXG5mdW5jdGlvbiBpc0FycmF5T3JPYmplY3QgKHZhbCkge1xuICByZXR1cm4gT2JqZWN0KHZhbCkgPT09IHZhbFxufVxuXG5mdW5jdGlvbiBpc0VtcHR5T2JqZWN0ICh2YWwpIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKHZhbCkubGVuZ3RoID09PSAwXG59XG5cbnZhciBibGFja2xpc3QgPSBbJ19fcHJvdG9fXycsICdwcm90b3R5cGUnLCAnY29uc3RydWN0b3InXVxudmFyIGJsYWNrbGlzdEZpbHRlciA9IGZ1bmN0aW9uIChwYXJ0KSB7IHJldHVybiBibGFja2xpc3QuaW5kZXhPZihwYXJ0KSA9PT0gLTEgfVxuXG5mdW5jdGlvbiBwYXJzZVBhdGggKHBhdGgsIHNlcCkge1xuICBpZiAocGF0aC5pbmRleE9mKCdbJykgPj0gMCkge1xuICAgIHBhdGggPSBwYXRoLnJlcGxhY2UoL1xcWy9nLCBzZXApLnJlcGxhY2UoL10vZywgJycpXG4gIH1cblxuICB2YXIgcGFydHMgPSBwYXRoLnNwbGl0KHNlcClcblxuICB2YXIgY2hlY2sgPSBwYXJ0cy5maWx0ZXIoYmxhY2tsaXN0RmlsdGVyKVxuXG4gIGlmIChjaGVjay5sZW5ndGggIT09IHBhcnRzLmxlbmd0aCkge1xuICAgIHRocm93IEVycm9yKCdSZWZ1c2luZyB0byB1cGRhdGUgYmxhY2tsaXN0ZWQgcHJvcGVydHkgJyArIHBhdGgpXG4gIH1cblxuICByZXR1cm4gcGFydHNcbn1cblxudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eVxuXG5mdW5jdGlvbiBEb3RPYmplY3QgKHNlcGFyYXRvciwgb3ZlcnJpZGUsIHVzZUFycmF5LCB1c2VCcmFja2V0cykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRG90T2JqZWN0KSkge1xuICAgIHJldHVybiBuZXcgRG90T2JqZWN0KHNlcGFyYXRvciwgb3ZlcnJpZGUsIHVzZUFycmF5LCB1c2VCcmFja2V0cylcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb3ZlcnJpZGUgPT09ICd1bmRlZmluZWQnKSBvdmVycmlkZSA9IGZhbHNlXG4gIGlmICh0eXBlb2YgdXNlQXJyYXkgPT09ICd1bmRlZmluZWQnKSB1c2VBcnJheSA9IHRydWVcbiAgaWYgKHR5cGVvZiB1c2VCcmFja2V0cyA9PT0gJ3VuZGVmaW5lZCcpIHVzZUJyYWNrZXRzID0gdHJ1ZVxuICB0aGlzLnNlcGFyYXRvciA9IHNlcGFyYXRvciB8fCAnLidcbiAgdGhpcy5vdmVycmlkZSA9IG92ZXJyaWRlXG4gIHRoaXMudXNlQXJyYXkgPSB1c2VBcnJheVxuICB0aGlzLnVzZUJyYWNrZXRzID0gdXNlQnJhY2tldHNcbiAgdGhpcy5rZWVwQXJyYXkgPSBmYWxzZVxuXG4gIC8vIGNvbnRhaW5zIHRvdWNoZWQgYXJyYXlzXG4gIHRoaXMuY2xlYW51cCA9IFtdXG59XG5cbnZhciBkb3REZWZhdWx0ID0gbmV3IERvdE9iamVjdCgnLicsIGZhbHNlLCB0cnVlLCB0cnVlKVxuZnVuY3Rpb24gd3JhcCAobWV0aG9kKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGRvdERlZmF1bHRbbWV0aG9kXS5hcHBseShkb3REZWZhdWx0LCBhcmd1bWVudHMpXG4gIH1cbn1cblxuRG90T2JqZWN0LnByb3RvdHlwZS5fZmlsbCA9IGZ1bmN0aW9uIChhLCBvYmosIHYsIG1vZCkge1xuICB2YXIgayA9IGEuc2hpZnQoKVxuXG4gIGlmIChhLmxlbmd0aCA+IDApIHtcbiAgICBvYmpba10gPSBvYmpba10gfHwgKHRoaXMudXNlQXJyYXkgJiYgaXNJbmRleChhWzBdKSA/IFtdIDoge30pXG5cbiAgICBpZiAoIWlzQXJyYXlPck9iamVjdChvYmpba10pKSB7XG4gICAgICBpZiAodGhpcy5vdmVycmlkZSkge1xuICAgICAgICBvYmpba10gPSB7fVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCEoaXNBcnJheU9yT2JqZWN0KHYpICYmIGlzRW1wdHlPYmplY3QodikpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgJ1RyeWluZyB0byByZWRlZmluZSBgJyArIGsgKyAnYCB3aGljaCBpcyBhICcgKyB0eXBlb2Ygb2JqW2tdXG4gICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fZmlsbChhLCBvYmpba10sIHYsIG1vZClcbiAgfSBlbHNlIHtcbiAgICBpZiAoIXRoaXMub3ZlcnJpZGUgJiYgaXNBcnJheU9yT2JqZWN0KG9ialtrXSkgJiYgIWlzRW1wdHlPYmplY3Qob2JqW2tdKSkge1xuICAgICAgaWYgKCEoaXNBcnJheU9yT2JqZWN0KHYpICYmIGlzRW1wdHlPYmplY3QodikpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRyeWluZyB0byByZWRlZmluZSBub24tZW1wdHkgb2JqWydcIiArIGsgKyBcIiddXCIpXG4gICAgICB9XG5cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIG9ialtrXSA9IF9wcm9jZXNzKHYsIG1vZClcbiAgfVxufVxuXG4vKipcbiAqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgd2l0aCBkb3R0ZWQta2V5L3ZhbHVlIHBhaXJzIHRvIGl0J3MgZXhwYW5kZWQgdmVyc2lvblxuICpcbiAqIE9wdGlvbmFsbHkgdHJhbnNmb3JtZWQgYnkgYSBzZXQgb2YgbW9kaWZpZXJzLlxuICpcbiAqIFVzYWdlOlxuICpcbiAqICAgdmFyIHJvdyA9IHtcbiAqICAgICAnbnInOiAyMDAsXG4gKiAgICAgJ2RvYy5uYW1lJzogJyAgTXkgRG9jdW1lbnQgICdcbiAqICAgfVxuICpcbiAqICAgdmFyIG1vZHMgPSB7XG4gKiAgICAgJ2RvYy5uYW1lJzogW19zLnRyaW0sIF9zLnVuZGVyc2NvcmVkXVxuICogICB9XG4gKlxuICogICBkb3Qub2JqZWN0KHJvdywgbW9kcylcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcGFyYW0ge09iamVjdH0gbW9kc1xuICovXG5Eb3RPYmplY3QucHJvdG90eXBlLm9iamVjdCA9IGZ1bmN0aW9uIChvYmosIG1vZHMpIHtcbiAgdmFyIHNlbGYgPSB0aGlzXG5cbiAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgdmFyIG1vZCA9IG1vZHMgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBtb2RzW2tdXG4gICAgLy8gbm9ybWFsaXplIGFycmF5IG5vdGF0aW9uLlxuICAgIHZhciBvayA9IHBhcnNlUGF0aChrLCBzZWxmLnNlcGFyYXRvcikuam9pbihzZWxmLnNlcGFyYXRvcilcblxuICAgIGlmIChvay5pbmRleE9mKHNlbGYuc2VwYXJhdG9yKSAhPT0gLTEpIHtcbiAgICAgIHNlbGYuX2ZpbGwob2suc3BsaXQoc2VsZi5zZXBhcmF0b3IpLCBvYmosIG9ialtrXSwgbW9kKVxuICAgICAgZGVsZXRlIG9ialtrXVxuICAgIH0gZWxzZSB7XG4gICAgICBvYmpba10gPSBfcHJvY2VzcyhvYmpba10sIG1vZClcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIG9ialxufVxuXG4vKipcbiAqIEBwYXJhbSB7U3RyaW5nfSBwYXRoIGRvdHRlZCBwYXRoXG4gKiBAcGFyYW0ge1N0cmluZ30gdiB2YWx1ZSB0byBiZSBzZXRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogb2JqZWN0IHRvIGJlIG1vZGlmaWVkXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufEFycmF5fSBtb2Qgb3B0aW9uYWwgbW9kaWZpZXJcbiAqL1xuRG90T2JqZWN0LnByb3RvdHlwZS5zdHIgPSBmdW5jdGlvbiAocGF0aCwgdiwgb2JqLCBtb2QpIHtcbiAgdmFyIG9rID0gcGFyc2VQYXRoKHBhdGgsIHRoaXMuc2VwYXJhdG9yKS5qb2luKHRoaXMuc2VwYXJhdG9yKVxuXG4gIGlmIChwYXRoLmluZGV4T2YodGhpcy5zZXBhcmF0b3IpICE9PSAtMSkge1xuICAgIHRoaXMuX2ZpbGwob2suc3BsaXQodGhpcy5zZXBhcmF0b3IpLCBvYmosIHYsIG1vZClcbiAgfSBlbHNlIHtcbiAgICBvYmpbcGF0aF0gPSBfcHJvY2Vzcyh2LCBtb2QpXG4gIH1cblxuICByZXR1cm4gb2JqXG59XG5cbi8qKlxuICpcbiAqIFBpY2sgYSB2YWx1ZSBmcm9tIGFuIG9iamVjdCB1c2luZyBkb3Qgbm90YXRpb24uXG4gKlxuICogT3B0aW9uYWxseSByZW1vdmUgdGhlIHZhbHVlXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHBhdGhcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gcmVtb3ZlXG4gKi9cbkRvdE9iamVjdC5wcm90b3R5cGUucGljayA9IGZ1bmN0aW9uIChwYXRoLCBvYmosIHJlbW92ZSwgcmVpbmRleEFycmF5KSB7XG4gIHZhciBpXG4gIHZhciBrZXlzXG4gIHZhciB2YWxcbiAgdmFyIGtleVxuICB2YXIgY3BcblxuICBrZXlzID0gcGFyc2VQYXRoKHBhdGgsIHRoaXMuc2VwYXJhdG9yKVxuICBmb3IgKGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGtleSA9IHBhcnNlS2V5KGtleXNbaV0sIG9iailcbiAgICBpZiAob2JqICYmIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIGtleSBpbiBvYmopIHtcbiAgICAgIGlmIChpID09PSBrZXlzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgaWYgKHJlbW92ZSkge1xuICAgICAgICAgIHZhbCA9IG9ialtrZXldXG4gICAgICAgICAgaWYgKHJlaW5kZXhBcnJheSAmJiBBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgICAgICAgIG9iai5zcGxpY2Uoa2V5LCAxKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZWxldGUgb2JqW2tleV1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgICAgICAgY3AgPSBrZXlzLnNsaWNlKDAsIC0xKS5qb2luKCcuJylcbiAgICAgICAgICAgIGlmICh0aGlzLmNsZWFudXAuaW5kZXhPZihjcCkgPT09IC0xKSB7XG4gICAgICAgICAgICAgIHRoaXMuY2xlYW51cC5wdXNoKGNwKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdmFsXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG9ialtrZXldXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9iaiA9IG9ialtrZXldXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG4gIH1cbiAgaWYgKHJlbW92ZSAmJiBBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICBvYmogPSBvYmouZmlsdGVyKGZ1bmN0aW9uIChuKSB7XG4gICAgICByZXR1cm4gbiAhPT0gdW5kZWZpbmVkXG4gICAgfSlcbiAgfVxuICByZXR1cm4gb2JqXG59XG4vKipcbiAqXG4gKiBEZWxldGUgdmFsdWUgZnJvbSBhbiBvYmplY3QgdXNpbmcgZG90IG5vdGF0aW9uLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBwYXRoXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcmV0dXJuIHthbnl9IFRoZSByZW1vdmVkIHZhbHVlXG4gKi9cbkRvdE9iamVjdC5wcm90b3R5cGUuZGVsZXRlID0gZnVuY3Rpb24gKHBhdGgsIG9iaikge1xuICByZXR1cm4gdGhpcy5yZW1vdmUocGF0aCwgb2JqLCB0cnVlKVxufVxuXG4vKipcbiAqXG4gKiBSZW1vdmUgdmFsdWUgZnJvbSBhbiBvYmplY3QgdXNpbmcgZG90IG5vdGF0aW9uLlxuICpcbiAqIFdpbGwgcmVtb3ZlIG11bHRpcGxlIGl0ZW1zIGlmIHBhdGggaXMgYW4gYXJyYXkuXG4gKiBJbiB0aGlzIGNhc2UgYXJyYXkgaW5kZXhlcyB3aWxsIGJlIHJldGFpbmVkIHVudGlsIGFsbFxuICogcmVtb3ZhbHMgaGF2ZSBiZWVuIHByb2Nlc3NlZC5cbiAqXG4gKiBVc2UgZG90LmRlbGV0ZSgpIHRvIGF1dG9tYXRpY2FsbHkgIHJlLWluZGV4IGFycmF5cy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ3xBcnJheTxTdHJpbmc+fSBwYXRoXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcGFyYW0ge0Jvb2xlYW59IHJlaW5kZXhBcnJheVxuICogQHJldHVybiB7YW55fSBUaGUgcmVtb3ZlZCB2YWx1ZVxuICovXG5Eb3RPYmplY3QucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uIChwYXRoLCBvYmosIHJlaW5kZXhBcnJheSkge1xuICB2YXIgaVxuXG4gIHRoaXMuY2xlYW51cCA9IFtdXG4gIGlmIChBcnJheS5pc0FycmF5KHBhdGgpKSB7XG4gICAgZm9yIChpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMucGljayhwYXRoW2ldLCBvYmosIHRydWUsIHJlaW5kZXhBcnJheSlcbiAgICB9XG4gICAgaWYgKCFyZWluZGV4QXJyYXkpIHtcbiAgICAgIHRoaXMuX2NsZWFudXAob2JqKVxuICAgIH1cbiAgICByZXR1cm4gb2JqXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHRoaXMucGljayhwYXRoLCBvYmosIHRydWUsIHJlaW5kZXhBcnJheSlcbiAgfVxufVxuXG5Eb3RPYmplY3QucHJvdG90eXBlLl9jbGVhbnVwID0gZnVuY3Rpb24gKG9iaikge1xuICB2YXIgcmV0XG4gIHZhciBpXG4gIHZhciBrZXlzXG4gIHZhciByb290XG4gIGlmICh0aGlzLmNsZWFudXAubGVuZ3RoKSB7XG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuY2xlYW51cC5sZW5ndGg7IGkrKykge1xuICAgICAga2V5cyA9IHRoaXMuY2xlYW51cFtpXS5zcGxpdCgnLicpXG4gICAgICByb290ID0ga2V5cy5zcGxpY2UoMCwgLTEpLmpvaW4oJy4nKVxuICAgICAgcmV0ID0gcm9vdCA/IHRoaXMucGljayhyb290LCBvYmopIDogb2JqXG4gICAgICByZXQgPSByZXRba2V5c1swXV0uZmlsdGVyKGZ1bmN0aW9uICh2KSB7XG4gICAgICAgIHJldHVybiB2ICE9PSB1bmRlZmluZWRcbiAgICAgIH0pXG4gICAgICB0aGlzLnNldCh0aGlzLmNsZWFudXBbaV0sIHJldCwgb2JqKVxuICAgIH1cbiAgICB0aGlzLmNsZWFudXAgPSBbXVxuICB9XG59XG5cbi8qKlxuICogQWxpYXMgbWV0aG9kICBmb3IgYGRvdC5yZW1vdmVgXG4gKlxuICogTm90ZTogdGhpcyBpcyBub3QgYW4gYWxpYXMgZm9yIGRvdC5kZWxldGUoKVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfEFycmF5PFN0cmluZz59IHBhdGhcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gcmVpbmRleEFycmF5XG4gKiBAcmV0dXJuIHthbnl9IFRoZSByZW1vdmVkIHZhbHVlXG4gKi9cbkRvdE9iamVjdC5wcm90b3R5cGUuZGVsID0gRG90T2JqZWN0LnByb3RvdHlwZS5yZW1vdmVcblxuLyoqXG4gKlxuICogTW92ZSBhIHByb3BlcnR5IGZyb20gb25lIHBsYWNlIHRvIHRoZSBvdGhlci5cbiAqXG4gKiBJZiB0aGUgc291cmNlIHBhdGggZG9lcyBub3QgZXhpc3QgKHVuZGVmaW5lZClcbiAqIHRoZSB0YXJnZXQgcHJvcGVydHkgd2lsbCBub3QgYmUgc2V0LlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzb3VyY2VcbiAqIEBwYXJhbSB7U3RyaW5nfSB0YXJnZXRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEBwYXJhbSB7RnVuY3Rpb258QXJyYXl9IG1vZHNcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gbWVyZ2VcbiAqL1xuRG90T2JqZWN0LnByb3RvdHlwZS5tb3ZlID0gZnVuY3Rpb24gKHNvdXJjZSwgdGFyZ2V0LCBvYmosIG1vZHMsIG1lcmdlKSB7XG4gIGlmICh0eXBlb2YgbW9kcyA9PT0gJ2Z1bmN0aW9uJyB8fCBBcnJheS5pc0FycmF5KG1vZHMpKSB7XG4gICAgdGhpcy5zZXQodGFyZ2V0LCBfcHJvY2Vzcyh0aGlzLnBpY2soc291cmNlLCBvYmosIHRydWUpLCBtb2RzKSwgb2JqLCBtZXJnZSlcbiAgfSBlbHNlIHtcbiAgICBtZXJnZSA9IG1vZHNcbiAgICB0aGlzLnNldCh0YXJnZXQsIHRoaXMucGljayhzb3VyY2UsIG9iaiwgdHJ1ZSksIG9iaiwgbWVyZ2UpXG4gIH1cblxuICByZXR1cm4gb2JqXG59XG5cbi8qKlxuICpcbiAqIFRyYW5zZmVyIGEgcHJvcGVydHkgZnJvbSBvbmUgb2JqZWN0IHRvIGFub3RoZXIgb2JqZWN0LlxuICpcbiAqIElmIHRoZSBzb3VyY2UgcGF0aCBkb2VzIG5vdCBleGlzdCAodW5kZWZpbmVkKVxuICogdGhlIHByb3BlcnR5IG9uIHRoZSBvdGhlciBvYmplY3Qgd2lsbCBub3QgYmUgc2V0LlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzb3VyY2VcbiAqIEBwYXJhbSB7U3RyaW5nfSB0YXJnZXRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmoxXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqMlxuICogQHBhcmFtIHtGdW5jdGlvbnxBcnJheX0gbW9kc1xuICogQHBhcmFtIHtCb29sZWFufSBtZXJnZVxuICovXG5Eb3RPYmplY3QucHJvdG90eXBlLnRyYW5zZmVyID0gZnVuY3Rpb24gKFxuICBzb3VyY2UsXG4gIHRhcmdldCxcbiAgb2JqMSxcbiAgb2JqMixcbiAgbW9kcyxcbiAgbWVyZ2Vcbikge1xuICBpZiAodHlwZW9mIG1vZHMgPT09ICdmdW5jdGlvbicgfHwgQXJyYXkuaXNBcnJheShtb2RzKSkge1xuICAgIHRoaXMuc2V0KFxuICAgICAgdGFyZ2V0LFxuICAgICAgX3Byb2Nlc3ModGhpcy5waWNrKHNvdXJjZSwgb2JqMSwgdHJ1ZSksIG1vZHMpLFxuICAgICAgb2JqMixcbiAgICAgIG1lcmdlXG4gICAgKVxuICB9IGVsc2Uge1xuICAgIG1lcmdlID0gbW9kc1xuICAgIHRoaXMuc2V0KHRhcmdldCwgdGhpcy5waWNrKHNvdXJjZSwgb2JqMSwgdHJ1ZSksIG9iajIsIG1lcmdlKVxuICB9XG5cbiAgcmV0dXJuIG9iajJcbn1cblxuLyoqXG4gKlxuICogQ29weSBhIHByb3BlcnR5IGZyb20gb25lIG9iamVjdCB0byBhbm90aGVyIG9iamVjdC5cbiAqXG4gKiBJZiB0aGUgc291cmNlIHBhdGggZG9lcyBub3QgZXhpc3QgKHVuZGVmaW5lZClcbiAqIHRoZSBwcm9wZXJ0eSBvbiB0aGUgb3RoZXIgb2JqZWN0IHdpbGwgbm90IGJlIHNldC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc291cmNlXG4gKiBAcGFyYW0ge1N0cmluZ30gdGFyZ2V0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqMVxuICogQHBhcmFtIHtPYmplY3R9IG9iajJcbiAqIEBwYXJhbSB7RnVuY3Rpb258QXJyYXl9IG1vZHNcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gbWVyZ2VcbiAqL1xuRG90T2JqZWN0LnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gKHNvdXJjZSwgdGFyZ2V0LCBvYmoxLCBvYmoyLCBtb2RzLCBtZXJnZSkge1xuICBpZiAodHlwZW9mIG1vZHMgPT09ICdmdW5jdGlvbicgfHwgQXJyYXkuaXNBcnJheShtb2RzKSkge1xuICAgIHRoaXMuc2V0KFxuICAgICAgdGFyZ2V0LFxuICAgICAgX3Byb2Nlc3MoXG4gICAgICAgIC8vIGNsb25lIHdoYXQgaXMgcGlja2VkXG4gICAgICAgIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5waWNrKHNvdXJjZSwgb2JqMSwgZmFsc2UpKSksXG4gICAgICAgIG1vZHNcbiAgICAgICksXG4gICAgICBvYmoyLFxuICAgICAgbWVyZ2VcbiAgICApXG4gIH0gZWxzZSB7XG4gICAgbWVyZ2UgPSBtb2RzXG4gICAgdGhpcy5zZXQodGFyZ2V0LCB0aGlzLnBpY2soc291cmNlLCBvYmoxLCBmYWxzZSksIG9iajIsIG1lcmdlKVxuICB9XG5cbiAgcmV0dXJuIG9iajJcbn1cblxuLyoqXG4gKlxuICogU2V0IGEgcHJvcGVydHkgb24gYW4gb2JqZWN0IHVzaW5nIGRvdCBub3RhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gcGF0aFxuICogQHBhcmFtIHthbnl9IHZhbFxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHBhcmFtIHtCb29sZWFufSBtZXJnZVxuICovXG5Eb3RPYmplY3QucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChwYXRoLCB2YWwsIG9iaiwgbWVyZ2UpIHtcbiAgdmFyIGlcbiAgdmFyIGtcbiAgdmFyIGtleXNcbiAgdmFyIGtleVxuXG4gIC8vIERvIG5vdCBvcGVyYXRlIGlmIHRoZSB2YWx1ZSBpcyB1bmRlZmluZWQuXG4gIGlmICh0eXBlb2YgdmFsID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBvYmpcbiAgfVxuICBrZXlzID0gcGFyc2VQYXRoKHBhdGgsIHRoaXMuc2VwYXJhdG9yKVxuXG4gIGZvciAoaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAga2V5ID0ga2V5c1tpXVxuICAgIGlmIChpID09PSBrZXlzLmxlbmd0aCAtIDEpIHtcbiAgICAgIGlmIChtZXJnZSAmJiBpc09iamVjdCh2YWwpICYmIGlzT2JqZWN0KG9ialtrZXldKSkge1xuICAgICAgICBmb3IgKGsgaW4gdmFsKSB7XG4gICAgICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwodmFsLCBrKSkge1xuICAgICAgICAgICAgb2JqW2tleV1ba10gPSB2YWxba11cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAobWVyZ2UgJiYgQXJyYXkuaXNBcnJheShvYmpba2V5XSkgJiYgQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdmFsLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgb2JqW2tleXNbaV1dLnB1c2godmFsW2pdKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvYmpba2V5XSA9IHZhbFxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICAvLyBmb3JjZSB0aGUgdmFsdWUgdG8gYmUgYW4gb2JqZWN0XG4gICAgICAhaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkgfHxcbiAgICAgICghaXNPYmplY3Qob2JqW2tleV0pICYmICFBcnJheS5pc0FycmF5KG9ialtrZXldKSlcbiAgICApIHtcbiAgICAgIC8vIGluaXRpYWxpemUgYXMgYXJyYXkgaWYgbmV4dCBrZXkgaXMgbnVtZXJpY1xuICAgICAgaWYgKC9eXFxkKyQvLnRlc3Qoa2V5c1tpICsgMV0pKSB7XG4gICAgICAgIG9ialtrZXldID0gW11cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9ialtrZXldID0ge31cbiAgICAgIH1cbiAgICB9XG4gICAgb2JqID0gb2JqW2tleV1cbiAgfVxuICByZXR1cm4gb2JqXG59XG5cbi8qKlxuICpcbiAqIFRyYW5zZm9ybSBhbiBvYmplY3RcbiAqXG4gKiBVc2FnZTpcbiAqXG4gKiAgIHZhciBvYmogPSB7XG4gKiAgICAgXCJpZFwiOiAxLFxuICogICAgXCJzb21lXCI6IHtcbiAqICAgICAgXCJ0aGluZ1wiOiBcImVsc2VcIlxuICogICAgfVxuICogICB9XG4gKlxuICogICB2YXIgdHJhbnNmb3JtID0ge1xuICogICAgIFwiaWRcIjogXCJuclwiLFxuICogICAgXCJzb21lLnRoaW5nXCI6IFwibmFtZVwiXG4gKiAgIH1cbiAqXG4gKiAgIHZhciB0Z3QgPSBkb3QudHJhbnNmb3JtKHRyYW5zZm9ybSwgb2JqKVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSByZWNpcGUgVHJhbnNmb3JtIHJlY2lwZVxuICogQHBhcmFtIHtPYmplY3R9IG9iaiBPYmplY3QgdG8gYmUgdHJhbnNmb3JtZWRcbiAqIEBwYXJhbSB7QXJyYXl9IG1vZHMgbW9kaWZpZXJzIGZvciB0aGUgdGFyZ2V0XG4gKi9cbkRvdE9iamVjdC5wcm90b3R5cGUudHJhbnNmb3JtID0gZnVuY3Rpb24gKHJlY2lwZSwgb2JqLCB0Z3QpIHtcbiAgb2JqID0gb2JqIHx8IHt9XG4gIHRndCA9IHRndCB8fCB7fVxuICBPYmplY3Qua2V5cyhyZWNpcGUpLmZvckVhY2goXG4gICAgZnVuY3Rpb24gKGtleSkge1xuICAgICAgdGhpcy5zZXQocmVjaXBlW2tleV0sIHRoaXMucGljayhrZXksIG9iaiksIHRndClcbiAgICB9LmJpbmQodGhpcylcbiAgKVxuICByZXR1cm4gdGd0XG59XG5cbi8qKlxuICpcbiAqIENvbnZlcnQgb2JqZWN0IHRvIGRvdHRlZC1rZXkvdmFsdWUgcGFpclxuICpcbiAqIFVzYWdlOlxuICpcbiAqICAgdmFyIHRndCA9IGRvdC5kb3Qob2JqKVxuICpcbiAqICAgb3JcbiAqXG4gKiAgIHZhciB0Z3QgPSB7fVxuICogICBkb3QuZG90KG9iaiwgdGd0KVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogc291cmNlIG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IHRndCB0YXJnZXQgb2JqZWN0XG4gKiBAcGFyYW0ge0FycmF5fSBwYXRoIHBhdGggYXJyYXkgKGludGVybmFsKVxuICovXG5Eb3RPYmplY3QucHJvdG90eXBlLmRvdCA9IGZ1bmN0aW9uIChvYmosIHRndCwgcGF0aCkge1xuICB0Z3QgPSB0Z3QgfHwge31cbiAgcGF0aCA9IHBhdGggfHwgW11cbiAgdmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5KG9iailcblxuICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goXG4gICAgZnVuY3Rpb24gKGtleSkge1xuICAgICAgdmFyIGluZGV4ID0gaXNBcnJheSAmJiB0aGlzLnVzZUJyYWNrZXRzID8gJ1snICsga2V5ICsgJ10nIDoga2V5XG4gICAgICBpZiAoXG4gICAgICAgIGlzQXJyYXlPck9iamVjdChvYmpba2V5XSkgJiZcbiAgICAgICAgKChpc09iamVjdChvYmpba2V5XSkgJiYgIWlzRW1wdHlPYmplY3Qob2JqW2tleV0pKSB8fFxuICAgICAgICAgIChBcnJheS5pc0FycmF5KG9ialtrZXldKSAmJiAhdGhpcy5rZWVwQXJyYXkgJiYgb2JqW2tleV0ubGVuZ3RoICE9PSAwKSlcbiAgICAgICkge1xuICAgICAgICBpZiAoaXNBcnJheSAmJiB0aGlzLnVzZUJyYWNrZXRzKSB7XG4gICAgICAgICAgdmFyIHByZXZpb3VzS2V5ID0gcGF0aFtwYXRoLmxlbmd0aCAtIDFdIHx8ICcnXG4gICAgICAgICAgcmV0dXJuIHRoaXMuZG90KFxuICAgICAgICAgICAgb2JqW2tleV0sXG4gICAgICAgICAgICB0Z3QsXG4gICAgICAgICAgICBwYXRoLnNsaWNlKDAsIC0xKS5jb25jYXQocHJldmlvdXNLZXkgKyBpbmRleClcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZG90KG9ialtrZXldLCB0Z3QsIHBhdGguY29uY2F0KGluZGV4KSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGlzQXJyYXkgJiYgdGhpcy51c2VCcmFja2V0cykge1xuICAgICAgICAgIHRndFtwYXRoLmpvaW4odGhpcy5zZXBhcmF0b3IpLmNvbmNhdCgnWycgKyBrZXkgKyAnXScpXSA9IG9ialtrZXldXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGd0W3BhdGguY29uY2F0KGluZGV4KS5qb2luKHRoaXMuc2VwYXJhdG9yKV0gPSBvYmpba2V5XVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfS5iaW5kKHRoaXMpXG4gIClcbiAgcmV0dXJuIHRndFxufVxuXG5Eb3RPYmplY3QucGljayA9IHdyYXAoJ3BpY2snKVxuRG90T2JqZWN0Lm1vdmUgPSB3cmFwKCdtb3ZlJylcbkRvdE9iamVjdC50cmFuc2ZlciA9IHdyYXAoJ3RyYW5zZmVyJylcbkRvdE9iamVjdC50cmFuc2Zvcm0gPSB3cmFwKCd0cmFuc2Zvcm0nKVxuRG90T2JqZWN0LmNvcHkgPSB3cmFwKCdjb3B5JylcbkRvdE9iamVjdC5vYmplY3QgPSB3cmFwKCdvYmplY3QnKVxuRG90T2JqZWN0LnN0ciA9IHdyYXAoJ3N0cicpXG5Eb3RPYmplY3Quc2V0ID0gd3JhcCgnc2V0JylcbkRvdE9iamVjdC5kZWxldGUgPSB3cmFwKCdkZWxldGUnKVxuRG90T2JqZWN0LmRlbCA9IERvdE9iamVjdC5yZW1vdmUgPSB3cmFwKCdyZW1vdmUnKVxuRG90T2JqZWN0LmRvdCA9IHdyYXAoJ2RvdCcpO1xuWydvdmVycmlkZScsICdvdmVyd3JpdGUnXS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEb3RPYmplY3QsIHByb3AsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBkb3REZWZhdWx0Lm92ZXJyaWRlXG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIGRvdERlZmF1bHQub3ZlcnJpZGUgPSAhIXZhbFxuICAgIH1cbiAgfSlcbn0pO1xuWyd1c2VBcnJheScsICdrZWVwQXJyYXknLCAndXNlQnJhY2tldHMnXS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEb3RPYmplY3QsIHByb3AsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBkb3REZWZhdWx0W3Byb3BdXG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIGRvdERlZmF1bHRbcHJvcF0gPSB2YWxcbiAgICB9XG4gIH0pXG59KVxuXG5Eb3RPYmplY3QuX3Byb2Nlc3MgPSBfcHJvY2Vzc1xuXG5tb2R1bGUuZXhwb3J0cyA9IERvdE9iamVjdFxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9KTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkZldGNoUlBDID0gZXhwb3J0cy53cmFwRXJyb3JSZXNwb25zZVRvVHdpcnBFcnJvciA9IGV4cG9ydHMuTm9kZUh0dHBSUEMgPSB2b2lkIDA7XG5jb25zdCBodHRwID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJodHRwXCIpKTtcbmNvbnN0IGh0dHBzID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJodHRwc1wiKSk7XG5jb25zdCB1cmxfMSA9IHJlcXVpcmUoXCJ1cmxcIik7XG5jb25zdCBlcnJvcnNfMSA9IHJlcXVpcmUoXCIuL2Vycm9yc1wiKTtcbi8qKlxuICogYSBub2RlIEhUVFAgUlBDIGltcGxlbWVudGF0aW9uXG4gKiBAcGFyYW0gb3B0aW9uc1xuICogQGNvbnN0cnVjdG9yXG4gKi9cbmNvbnN0IE5vZGVIdHRwUlBDID0gKG9wdGlvbnMpID0+ICh7XG4gICAgcmVxdWVzdChzZXJ2aWNlLCBtZXRob2QsIGNvbnRlbnRUeXBlLCBkYXRhKSB7XG4gICAgICAgIGxldCBjbGllbnQ7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0ZWQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlQ2h1bmtzID0gW107XG4gICAgICAgICAgICBjb25zdCByZXF1ZXN0RGF0YSA9IGNvbnRlbnRUeXBlID09PSBcImFwcGxpY2F0aW9uL3Byb3RvYnVmXCJcbiAgICAgICAgICAgICAgICA/IEJ1ZmZlci5mcm9tKGRhdGEpXG4gICAgICAgICAgICAgICAgOiBKU09OLnN0cmluZ2lmeShkYXRhKTtcbiAgICAgICAgICAgIGNvbnN0IHVybCA9IG5ldyB1cmxfMS5VUkwob3B0aW9ucy5iYXNlVXJsKTtcbiAgICAgICAgICAgIGNvbnN0IGlzSHR0cHMgPSB1cmwucHJvdG9jb2wgPT09IFwiaHR0cHM6XCI7XG4gICAgICAgICAgICBpZiAoaXNIdHRwcykge1xuICAgICAgICAgICAgICAgIGNsaWVudCA9IGh0dHBzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY2xpZW50ID0gaHR0cDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHByZWZpeCA9IHVybC5wYXRobmFtZSAhPT0gXCIvXCIgPyB1cmwucGF0aG5hbWUgOiBcIlwiO1xuICAgICAgICAgICAgY29uc3QgcmVxID0gY2xpZW50XG4gICAgICAgICAgICAgICAgLnJlcXVlc3QoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCAob3B0aW9ucyA/IG9wdGlvbnMgOiB7fSkpLCB7IG1ldGhvZDogXCJQT1NUXCIsIHByb3RvY29sOiB1cmwucHJvdG9jb2wsIGhvc3Q6IHVybC5ob3N0bmFtZSwgcG9ydDogdXJsLnBvcnQgPyB1cmwucG9ydCA6IGlzSHR0cHMgPyA0NDMgOiA4MCwgcGF0aDogYCR7cHJlZml4fS8ke3NlcnZpY2V9LyR7bWV0aG9kfWAsIGhlYWRlcnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgKG9wdGlvbnMuaGVhZGVycyA/IG9wdGlvbnMuaGVhZGVycyA6IHt9KSksIHsgXCJDb250ZW50LVR5cGVcIjogY29udGVudFR5cGUsIFwiQ29udGVudC1MZW5ndGhcIjogY29udGVudFR5cGUgPT09IFwiYXBwbGljYXRpb24vcHJvdG9idWZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPyBCdWZmZXIuYnl0ZUxlbmd0aChyZXF1ZXN0RGF0YSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogQnVmZmVyLmZyb20ocmVxdWVzdERhdGEpLmJ5dGVMZW5ndGggfSkgfSksIChyZXMpID0+IHtcbiAgICAgICAgICAgICAgICByZXMub24oXCJkYXRhXCIsIChjaHVuaykgPT4gcmVzcG9uc2VDaHVua3MucHVzaChjaHVuaykpO1xuICAgICAgICAgICAgICAgIHJlcy5vbihcImVuZFwiLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBCdWZmZXIuY29uY2F0KHJlc3BvbnNlQ2h1bmtzKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcy5zdGF0dXNDb2RlICE9IDIwMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0ZWQod3JhcEVycm9yUmVzcG9uc2VUb1R3aXJwRXJyb3IoZGF0YS50b1N0cmluZygpKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudFR5cGUgPT09IFwiYXBwbGljYXRpb24vanNvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShKU09OLnBhcnNlKGRhdGEudG9TdHJpbmcoKSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJlcy5vbihcImVycm9yXCIsIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0ZWQoZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLm9uKFwiZXJyb3JcIiwgKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIHJlamVjdGVkKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJlcS5lbmQocmVxdWVzdERhdGEpO1xuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG5leHBvcnRzLk5vZGVIdHRwUlBDID0gTm9kZUh0dHBSUEM7XG5mdW5jdGlvbiB3cmFwRXJyb3JSZXNwb25zZVRvVHdpcnBFcnJvcihlcnJvclJlc3BvbnNlKSB7XG4gICAgcmV0dXJuIGVycm9yc18xLlR3aXJwRXJyb3IuZnJvbU9iamVjdChKU09OLnBhcnNlKGVycm9yUmVzcG9uc2UpKTtcbn1cbmV4cG9ydHMud3JhcEVycm9yUmVzcG9uc2VUb1R3aXJwRXJyb3IgPSB3cmFwRXJyb3JSZXNwb25zZVRvVHdpcnBFcnJvcjtcbi8qKlxuICogYSBicm93c2VyIGZldGNoIFJQQyBpbXBsZW1lbnRhdGlvblxuICovXG5jb25zdCBGZXRjaFJQQyA9IChvcHRpb25zKSA9PiAoe1xuICAgIHJlcXVlc3Qoc2VydmljZSwgbWV0aG9kLCBjb250ZW50VHlwZSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgY29uc3QgaGVhZGVycyA9IG5ldyBIZWFkZXJzKG9wdGlvbnMuaGVhZGVycyk7XG4gICAgICAgICAgICBoZWFkZXJzLnNldChcImNvbnRlbnQtdHlwZVwiLCBjb250ZW50VHlwZSk7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IHlpZWxkIGZldGNoKGAke29wdGlvbnMuYmFzZVVybH0vJHtzZXJ2aWNlfS8ke21ldGhvZH1gLCBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMpLCB7IG1ldGhvZDogXCJQT1NUXCIsIGhlYWRlcnMsIGJvZHk6IGRhdGEgaW5zdGFuY2VvZiBVaW50OEFycmF5ID8gZGF0YSA6IEpTT04uc3RyaW5naWZ5KGRhdGEpIH0pKTtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgICAgIGlmIChjb250ZW50VHlwZSA9PT0gXCJhcHBsaWNhdGlvbi9qc29uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHlpZWxkIHJlc3BvbnNlLmpzb24oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHlpZWxkIHJlc3BvbnNlLmFycmF5QnVmZmVyKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3JzXzEuVHdpcnBFcnJvci5mcm9tT2JqZWN0KHlpZWxkIHJlc3BvbnNlLmpzb24oKSk7XG4gICAgICAgIH0pO1xuICAgIH0sXG59KTtcbmV4cG9ydHMuRmV0Y2hSUEMgPSBGZXRjaFJQQztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfSk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9fcmVzdCA9ICh0aGlzICYmIHRoaXMuX19yZXN0KSB8fCBmdW5jdGlvbiAocywgZSkge1xuICAgIHZhciB0ID0ge307XG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXG4gICAgICAgIHRbcF0gPSBzW3BdO1xuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xuICAgICAgICB9XG4gICAgcmV0dXJuIHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5HYXRld2F5ID0gZXhwb3J0cy5QYXR0ZXJuID0gdm9pZCAwO1xuY29uc3QgcXVlcnlzdHJpbmdfMSA9IHJlcXVpcmUoXCJxdWVyeXN0cmluZ1wiKTtcbmNvbnN0IGRvdE9iamVjdCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiZG90LW9iamVjdFwiKSk7XG5jb25zdCByZXF1ZXN0XzEgPSByZXF1aXJlKFwiLi9yZXF1ZXN0XCIpO1xuY29uc3QgZXJyb3JzXzEgPSByZXF1aXJlKFwiLi9lcnJvcnNcIik7XG5jb25zdCBodHRwX2NsaWVudF8xID0gcmVxdWlyZShcIi4vaHR0cC5jbGllbnRcIik7XG5jb25zdCBzZXJ2ZXJfMSA9IHJlcXVpcmUoXCIuL3NlcnZlclwiKTtcbnZhciBQYXR0ZXJuO1xuKGZ1bmN0aW9uIChQYXR0ZXJuKSB7XG4gICAgUGF0dGVybltcIlBPU1RcIl0gPSBcInBvc3RcIjtcbiAgICBQYXR0ZXJuW1wiR0VUXCJdID0gXCJnZXRcIjtcbiAgICBQYXR0ZXJuW1wiUEFUQ0hcIl0gPSBcInBhdGNoXCI7XG4gICAgUGF0dGVybltcIlBVVFwiXSA9IFwicHV0XCI7XG4gICAgUGF0dGVybltcIkRFTEVURVwiXSA9IFwiZGVsZXRlXCI7XG59KShQYXR0ZXJuID0gZXhwb3J0cy5QYXR0ZXJuIHx8IChleHBvcnRzLlBhdHRlcm4gPSB7fSkpO1xuLyoqXG4gKiBUaGUgR2F0ZXdheSBwcm94aWVzIGh0dHAgcmVxdWVzdHMgdG8gVHdpcnAgQ29tcGxpYW50XG4gKiBoYW5kbGVyc1xuICovXG5jbGFzcyBHYXRld2F5IHtcbiAgICBjb25zdHJ1Y3Rvcihyb3V0ZXMpIHtcbiAgICAgICAgdGhpcy5yb3V0ZXMgPSByb3V0ZXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1pZGRsZXdhcmUgdGhhdCByZXdyaXRlIHRoZSBjdXJyZW50IHJlcXVlc3RcbiAgICAgKiB0byBhIFR3aXJwIGNvbXBsaWFudCByZXF1ZXN0XG4gICAgICovXG4gICAgdHdpcnBSZXdyaXRlKHByZWZpeCA9IFwiL3R3aXJwXCIpIHtcbiAgICAgICAgcmV0dXJuIChyZXEsIHJlc3AsIG5leHQpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmV3cml0ZShyZXEsIHJlc3AsIHByZWZpeClcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiBuZXh0KCkpXG4gICAgICAgICAgICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBlcnJvcnNfMS5Ud2lycEVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlLmNvZGUgIT09IGVycm9yc18xLlR3aXJwRXJyb3JDb2RlLk5vdEZvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfMS53cml0ZUVycm9yKHJlc3AsIGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJld3JpdGUgYW4gaW5jb21pbmcgcmVxdWVzdCB0byBhIFR3aXJwIGNvbXBsaWFudCByZXF1ZXN0XG4gICAgICogQHBhcmFtIHJlcVxuICAgICAqIEBwYXJhbSByZXNwXG4gICAgICogQHBhcmFtIHByZWZpeFxuICAgICAqL1xuICAgIHJld3JpdGUocmVxLCByZXNwLCBwcmVmaXggPSBcIi90d2lycFwiKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCBbbWF0Y2gsIHJvdXRlXSA9IHRoaXMubWF0Y2hSb3V0ZShyZXEpO1xuICAgICAgICAgICAgY29uc3QgYm9keSA9IHlpZWxkIHRoaXMucHJlcGFyZVR3aXJwQm9keShyZXEsIG1hdGNoLCByb3V0ZSk7XG4gICAgICAgICAgICBjb25zdCB0d2lycFVybCA9IGAke3ByZWZpeH0vJHtyb3V0ZS5wYWNrYWdlTmFtZX0uJHtyb3V0ZS5zZXJ2aWNlTmFtZX0vJHtyb3V0ZS5tZXRob2ROYW1lfWA7XG4gICAgICAgICAgICByZXEudXJsID0gdHdpcnBVcmw7XG4gICAgICAgICAgICByZXEub3JpZ2luYWxVcmwgPSB0d2lycFVybDtcbiAgICAgICAgICAgIHJlcS5tZXRob2QgPSBcIlBPU1RcIjtcbiAgICAgICAgICAgIHJlcS5oZWFkZXJzW1wiY29udGVudC10eXBlXCJdID0gXCJhcHBsaWNhdGlvbi9qc29uXCI7XG4gICAgICAgICAgICByZXEucmF3Qm9keSA9IEJ1ZmZlci5mcm9tKEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcbiAgICAgICAgICAgIGlmIChyb3V0ZS5yZXNwb25zZUJvZHlLZXkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmRGbiA9IHJlc3AuZW5kLmJpbmQocmVzcCk7XG4gICAgICAgICAgICAgICAgcmVzcC5lbmQgPSBmdW5jdGlvbiAoY2h1bmspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3Auc3RhdHVzQ29kZSA9PT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRGbihgeyBcIiR7cm91dGUucmVzcG9uc2VCb2R5S2V5fVwiOiAke2NodW5rfSB9YCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRGbihjaHVuayk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgcmV2ZXJzZSBwcm94eSBoYW5kbGVyIHRvXG4gICAgICogcHJveHkgaHR0cCByZXF1ZXN0cyB0byBUd2lycCBDb21wbGlhbnQgaGFuZGxlcnNcbiAgICAgKiBAcGFyYW0gaHR0cENsaWVudE9wdGlvblxuICAgICAqL1xuICAgIHJldmVyc2VQcm94eShodHRwQ2xpZW50T3B0aW9uKSB7XG4gICAgICAgIGNvbnN0IGNsaWVudCA9IGh0dHBfY2xpZW50XzEuTm9kZUh0dHBSUEMoaHR0cENsaWVudE9wdGlvbik7XG4gICAgICAgIHJldHVybiAocmVxLCByZXMpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgW21hdGNoLCByb3V0ZV0gPSB0aGlzLm1hdGNoUm91dGUocmVxKTtcbiAgICAgICAgICAgICAgICBjb25zdCBib2R5ID0geWllbGQgdGhpcy5wcmVwYXJlVHdpcnBCb2R5KHJlcSwgbWF0Y2gsIHJvdXRlKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IHlpZWxkIGNsaWVudC5yZXF1ZXN0KGAke3JvdXRlLnBhY2thZ2VOYW1lfS4ke3JvdXRlLnNlcnZpY2VOYW1lfWAsIHJvdXRlLm1ldGhvZE5hbWUsIFwiYXBwbGljYXRpb24vanNvblwiLCBib2R5KTtcbiAgICAgICAgICAgICAgICByZXMuc3RhdHVzQ29kZSA9IDIwMDtcbiAgICAgICAgICAgICAgICByZXMuc2V0SGVhZGVyKFwiY29udGVudC10eXBlXCIsIFwiYXBwbGljYXRpb24vanNvblwiKTtcbiAgICAgICAgICAgICAgICBsZXQganNvblJlc3BvbnNlO1xuICAgICAgICAgICAgICAgIGlmIChyb3V0ZS5yZXNwb25zZUJvZHlLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAganNvblJlc3BvbnNlID0gSlNPTi5zdHJpbmdpZnkoeyBbcm91dGUucmVzcG9uc2VCb2R5S2V5XTogcmVzcG9uc2UgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBqc29uUmVzcG9uc2UgPSBKU09OLnN0cmluZ2lmeShyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlcy5lbmQoanNvblJlc3BvbnNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgc2VydmVyXzEud3JpdGVFcnJvcihyZXMsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUHJlcGFyZXMgdHdpcnAgYm9keSByZXF1ZXN0cyB1c2luZyBodHRwLmdvb2dsZS5hbm5vdGlvbnNcbiAgICAgKiBjb21wbGlhbnQgc3BlY1xuICAgICAqXG4gICAgICogQHBhcmFtIHJlcVxuICAgICAqIEBwYXJhbSBtYXRjaFxuICAgICAqIEBwYXJhbSByb3V0ZVxuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbiAgICBwcmVwYXJlVHdpcnBCb2R5KHJlcSwgbWF0Y2gsIHJvdXRlKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCBfYSA9IG1hdGNoLnBhcmFtcywgeyBxdWVyeV9zdHJpbmcgfSA9IF9hLCBwYXJhbXMgPSBfX3Jlc3QoX2EsIFtcInF1ZXJ5X3N0cmluZ1wiXSk7XG4gICAgICAgICAgICBsZXQgcmVxdWVzdEJvZHkgPSBPYmplY3QuYXNzaWduKHt9LCBwYXJhbXMpO1xuICAgICAgICAgICAgaWYgKHF1ZXJ5X3N0cmluZyAmJiByb3V0ZS5ib2R5S2V5ICE9PSBcIipcIikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gdGhpcy5wYXJzZVF1ZXJ5U3RyaW5nKHF1ZXJ5X3N0cmluZyk7XG4gICAgICAgICAgICAgICAgcmVxdWVzdEJvZHkgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHF1ZXJ5UGFyYW1zKSwgcmVxdWVzdEJvZHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGJvZHkgPSB7fTtcbiAgICAgICAgICAgIGlmIChyb3V0ZS5ib2R5S2V5KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IHlpZWxkIHJlcXVlc3RfMS5nZXRSZXF1ZXN0RGF0YShyZXEpO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGpzb25Cb2R5ID0gSlNPTi5wYXJzZShkYXRhLnRvU3RyaW5nKCkgfHwgXCJ7fVwiKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJvdXRlLmJvZHlLZXkgPT09IFwiKlwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5ID0ganNvbkJvZHk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5W3JvdXRlLmJvZHlLZXldID0ganNvbkJvZHk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbXNnID0gXCJ0aGUganNvbiByZXF1ZXN0IGNvdWxkIG5vdCBiZSBkZWNvZGVkXCI7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBlcnJvcnNfMS5Ud2lycEVycm9yKGVycm9yc18xLlR3aXJwRXJyb3JDb2RlLk1hbGZvcm1lZCwgbXNnKS53aXRoQ2F1c2UoZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYm9keSksIHJlcXVlc3RCb2R5KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1hdGNoZXMgYSByb3V0ZVxuICAgICAqIEBwYXJhbSByZXFcbiAgICAgKi9cbiAgICBtYXRjaFJvdXRlKHJlcSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IGh0dHBNZXRob2QgPSAoX2EgPSByZXEubWV0aG9kKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKCFodHRwTWV0aG9kKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuQmFkUm91dGVFcnJvcihgbWV0aG9kIG5vdCBhbGxvd2VkYCwgcmVxLm1ldGhvZCB8fCBcIlwiLCByZXEudXJsIHx8IFwiXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJvdXRlcyA9IHRoaXMucm91dGVzW2h0dHBNZXRob2RdO1xuICAgICAgICBmb3IgKGNvbnN0IHJvdXRlIG9mIHJvdXRlcykge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSByb3V0ZS5tYXRjaGVyKHJlcS51cmwgfHwgXCIvXCIpO1xuICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFttYXRjaCwgcm91dGVdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBlcnJvcnNfMS5Ob3RGb3VuZEVycm9yKGB1cmwgJHtyZXEudXJsfSBub3QgZm91bmRgKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUGFyc2UgcXVlcnkgc3RyaW5nXG4gICAgICogQHBhcmFtIHF1ZXJ5U3RyaW5nXG4gICAgICovXG4gICAgcGFyc2VRdWVyeVN0cmluZyhxdWVyeVN0cmluZykge1xuICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHF1ZXJ5c3RyaW5nXzEucGFyc2UocXVlcnlTdHJpbmcucmVwbGFjZShcIj9cIiwgXCJcIikpO1xuICAgICAgICByZXR1cm4gZG90T2JqZWN0Lm9iamVjdChxdWVyeVBhcmFtcyk7XG4gICAgfVxufVxuZXhwb3J0cy5HYXRld2F5ID0gR2F0ZXdheTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfSk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fZXhwb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19leHBvcnRTdGFyKSB8fCBmdW5jdGlvbihtLCBleHBvcnRzKSB7XG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChleHBvcnRzLCBwKSkgX19jcmVhdGVCaW5kaW5nKGV4cG9ydHMsIG0sIHApO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVHdpcnBDb250ZW50VHlwZSA9IHZvaWQgMDtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9jb250ZXh0XCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9zZXJ2ZXJcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2ludGVyY2VwdG9yc1wiKSwgZXhwb3J0cyk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vaG9va3NcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2Vycm9yc1wiKSwgZXhwb3J0cyk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vZ2F0ZXdheVwiKSwgZXhwb3J0cyk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vaHR0cC5jbGllbnRcIiksIGV4cG9ydHMpO1xudmFyIHJlcXVlc3RfMSA9IHJlcXVpcmUoXCIuL3JlcXVlc3RcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJUd2lycENvbnRlbnRUeXBlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZXF1ZXN0XzEuVHdpcnBDb250ZW50VHlwZTsgfSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlQXJ0aWZhY3RTZXJ2aWNlU2VydmVyID0gZXhwb3J0cy5BcnRpZmFjdFNlcnZpY2VNZXRob2RMaXN0ID0gZXhwb3J0cy5BcnRpZmFjdFNlcnZpY2VNZXRob2QgPSBleHBvcnRzLkFydGlmYWN0U2VydmljZUNsaWVudFByb3RvYnVmID0gZXhwb3J0cy5BcnRpZmFjdFNlcnZpY2VDbGllbnRKU09OID0gdm9pZCAwO1xuY29uc3QgdHdpcnBfdHNfMSA9IHJlcXVpcmUoXCJ0d2lycC10c1wiKTtcbmNvbnN0IGFydGlmYWN0XzEgPSByZXF1aXJlKFwiLi9hcnRpZmFjdFwiKTtcbmNsYXNzIEFydGlmYWN0U2VydmljZUNsaWVudEpTT04ge1xuICAgIGNvbnN0cnVjdG9yKHJwYykge1xuICAgICAgICB0aGlzLnJwYyA9IHJwYztcbiAgICAgICAgdGhpcy5DcmVhdGVBcnRpZmFjdC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLkZpbmFsaXplQXJ0aWZhY3QuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5MaXN0QXJ0aWZhY3RzLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuR2V0U2lnbmVkQXJ0aWZhY3RVUkwuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5EZWxldGVBcnRpZmFjdC5iaW5kKHRoaXMpO1xuICAgIH1cbiAgICBDcmVhdGVBcnRpZmFjdChyZXF1ZXN0KSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhcnRpZmFjdF8xLkNyZWF0ZUFydGlmYWN0UmVxdWVzdC50b0pzb24ocmVxdWVzdCwge1xuICAgICAgICAgICAgdXNlUHJvdG9GaWVsZE5hbWU6IHRydWUsXG4gICAgICAgICAgICBlbWl0RGVmYXVsdFZhbHVlczogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBwcm9taXNlID0gdGhpcy5ycGMucmVxdWVzdChcImdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkFydGlmYWN0U2VydmljZVwiLCBcIkNyZWF0ZUFydGlmYWN0XCIsIFwiYXBwbGljYXRpb24vanNvblwiLCBkYXRhKTtcbiAgICAgICAgcmV0dXJuIHByb21pc2UudGhlbigoZGF0YSkgPT4gYXJ0aWZhY3RfMS5DcmVhdGVBcnRpZmFjdFJlc3BvbnNlLmZyb21Kc29uKGRhdGEsIHtcbiAgICAgICAgICAgIGlnbm9yZVVua25vd25GaWVsZHM6IHRydWUsXG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgRmluYWxpemVBcnRpZmFjdChyZXF1ZXN0KSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhcnRpZmFjdF8xLkZpbmFsaXplQXJ0aWZhY3RSZXF1ZXN0LnRvSnNvbihyZXF1ZXN0LCB7XG4gICAgICAgICAgICB1c2VQcm90b0ZpZWxkTmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGVtaXREZWZhdWx0VmFsdWVzOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLnJwYy5yZXF1ZXN0KFwiZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuQXJ0aWZhY3RTZXJ2aWNlXCIsIFwiRmluYWxpemVBcnRpZmFjdFwiLCBcImFwcGxpY2F0aW9uL2pzb25cIiwgZGF0YSk7XG4gICAgICAgIHJldHVybiBwcm9taXNlLnRoZW4oKGRhdGEpID0+IGFydGlmYWN0XzEuRmluYWxpemVBcnRpZmFjdFJlc3BvbnNlLmZyb21Kc29uKGRhdGEsIHtcbiAgICAgICAgICAgIGlnbm9yZVVua25vd25GaWVsZHM6IHRydWUsXG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgTGlzdEFydGlmYWN0cyhyZXF1ZXN0KSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhcnRpZmFjdF8xLkxpc3RBcnRpZmFjdHNSZXF1ZXN0LnRvSnNvbihyZXF1ZXN0LCB7XG4gICAgICAgICAgICB1c2VQcm90b0ZpZWxkTmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGVtaXREZWZhdWx0VmFsdWVzOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLnJwYy5yZXF1ZXN0KFwiZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuQXJ0aWZhY3RTZXJ2aWNlXCIsIFwiTGlzdEFydGlmYWN0c1wiLCBcImFwcGxpY2F0aW9uL2pzb25cIiwgZGF0YSk7XG4gICAgICAgIHJldHVybiBwcm9taXNlLnRoZW4oKGRhdGEpID0+IGFydGlmYWN0XzEuTGlzdEFydGlmYWN0c1Jlc3BvbnNlLmZyb21Kc29uKGRhdGEsIHsgaWdub3JlVW5rbm93bkZpZWxkczogdHJ1ZSB9KSk7XG4gICAgfVxuICAgIEdldFNpZ25lZEFydGlmYWN0VVJMKHJlcXVlc3QpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGFydGlmYWN0XzEuR2V0U2lnbmVkQXJ0aWZhY3RVUkxSZXF1ZXN0LnRvSnNvbihyZXF1ZXN0LCB7XG4gICAgICAgICAgICB1c2VQcm90b0ZpZWxkTmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGVtaXREZWZhdWx0VmFsdWVzOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLnJwYy5yZXF1ZXN0KFwiZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuQXJ0aWZhY3RTZXJ2aWNlXCIsIFwiR2V0U2lnbmVkQXJ0aWZhY3RVUkxcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIsIGRhdGEpO1xuICAgICAgICByZXR1cm4gcHJvbWlzZS50aGVuKChkYXRhKSA9PiBhcnRpZmFjdF8xLkdldFNpZ25lZEFydGlmYWN0VVJMUmVzcG9uc2UuZnJvbUpzb24oZGF0YSwge1xuICAgICAgICAgICAgaWdub3JlVW5rbm93bkZpZWxkczogdHJ1ZSxcbiAgICAgICAgfSkpO1xuICAgIH1cbiAgICBEZWxldGVBcnRpZmFjdChyZXF1ZXN0KSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhcnRpZmFjdF8xLkRlbGV0ZUFydGlmYWN0UmVxdWVzdC50b0pzb24ocmVxdWVzdCwge1xuICAgICAgICAgICAgdXNlUHJvdG9GaWVsZE5hbWU6IHRydWUsXG4gICAgICAgICAgICBlbWl0RGVmYXVsdFZhbHVlczogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBwcm9taXNlID0gdGhpcy5ycGMucmVxdWVzdChcImdpdGh1Yi5hY3Rpb25zLnJlc3VsdHMuYXBpLnYxLkFydGlmYWN0U2VydmljZVwiLCBcIkRlbGV0ZUFydGlmYWN0XCIsIFwiYXBwbGljYXRpb24vanNvblwiLCBkYXRhKTtcbiAgICAgICAgcmV0dXJuIHByb21pc2UudGhlbigoZGF0YSkgPT4gYXJ0aWZhY3RfMS5EZWxldGVBcnRpZmFjdFJlc3BvbnNlLmZyb21Kc29uKGRhdGEsIHtcbiAgICAgICAgICAgIGlnbm9yZVVua25vd25GaWVsZHM6IHRydWUsXG4gICAgICAgIH0pKTtcbiAgICB9XG59XG5leHBvcnRzLkFydGlmYWN0U2VydmljZUNsaWVudEpTT04gPSBBcnRpZmFjdFNlcnZpY2VDbGllbnRKU09OO1xuY2xhc3MgQXJ0aWZhY3RTZXJ2aWNlQ2xpZW50UHJvdG9idWYge1xuICAgIGNvbnN0cnVjdG9yKHJwYykge1xuICAgICAgICB0aGlzLnJwYyA9IHJwYztcbiAgICAgICAgdGhpcy5DcmVhdGVBcnRpZmFjdC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLkZpbmFsaXplQXJ0aWZhY3QuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5MaXN0QXJ0aWZhY3RzLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuR2V0U2lnbmVkQXJ0aWZhY3RVUkwuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5EZWxldGVBcnRpZmFjdC5iaW5kKHRoaXMpO1xuICAgIH1cbiAgICBDcmVhdGVBcnRpZmFjdChyZXF1ZXN0KSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhcnRpZmFjdF8xLkNyZWF0ZUFydGlmYWN0UmVxdWVzdC50b0JpbmFyeShyZXF1ZXN0KTtcbiAgICAgICAgY29uc3QgcHJvbWlzZSA9IHRoaXMucnBjLnJlcXVlc3QoXCJnaXRodWIuYWN0aW9ucy5yZXN1bHRzLmFwaS52MS5BcnRpZmFjdFNlcnZpY2VcIiwgXCJDcmVhdGVBcnRpZmFjdFwiLCBcImFwcGxpY2F0aW9uL3Byb3RvYnVmXCIsIGRhdGEpO1xuICAgICAgICByZXR1cm4gcHJvbWlzZS50aGVuKChkYXRhKSA9PiBhcnRpZmFjdF8xLkNyZWF0ZUFydGlmYWN0UmVzcG9uc2UuZnJvbUJpbmFyeShkYXRhKSk7XG4gICAgfVxuICAgIEZpbmFsaXplQXJ0aWZhY3QocmVxdWVzdCkge1xuICAgICAgICBjb25zdCBkYXRhID0gYXJ0aWZhY3RfMS5GaW5hbGl6ZUFydGlmYWN0UmVxdWVzdC50b0JpbmFyeShyZXF1ZXN0KTtcbiAgICAgICAgY29uc3QgcHJvbWlzZSA9IHRoaXMucnBjLnJlcXVlc3QoXCJnaXRodWIuYWN0aW9ucy5yZXN1bHRzLmFwaS52MS5BcnRpZmFjdFNlcnZpY2VcIiwgXCJGaW5hbGl6ZUFydGlmYWN0XCIsIFwiYXBwbGljYXRpb24vcHJvdG9idWZcIiwgZGF0YSk7XG4gICAgICAgIHJldHVybiBwcm9taXNlLnRoZW4oKGRhdGEpID0+IGFydGlmYWN0XzEuRmluYWxpemVBcnRpZmFjdFJlc3BvbnNlLmZyb21CaW5hcnkoZGF0YSkpO1xuICAgIH1cbiAgICBMaXN0QXJ0aWZhY3RzKHJlcXVlc3QpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGFydGlmYWN0XzEuTGlzdEFydGlmYWN0c1JlcXVlc3QudG9CaW5hcnkocmVxdWVzdCk7XG4gICAgICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLnJwYy5yZXF1ZXN0KFwiZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuQXJ0aWZhY3RTZXJ2aWNlXCIsIFwiTGlzdEFydGlmYWN0c1wiLCBcImFwcGxpY2F0aW9uL3Byb3RvYnVmXCIsIGRhdGEpO1xuICAgICAgICByZXR1cm4gcHJvbWlzZS50aGVuKChkYXRhKSA9PiBhcnRpZmFjdF8xLkxpc3RBcnRpZmFjdHNSZXNwb25zZS5mcm9tQmluYXJ5KGRhdGEpKTtcbiAgICB9XG4gICAgR2V0U2lnbmVkQXJ0aWZhY3RVUkwocmVxdWVzdCkge1xuICAgICAgICBjb25zdCBkYXRhID0gYXJ0aWZhY3RfMS5HZXRTaWduZWRBcnRpZmFjdFVSTFJlcXVlc3QudG9CaW5hcnkocmVxdWVzdCk7XG4gICAgICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLnJwYy5yZXF1ZXN0KFwiZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjEuQXJ0aWZhY3RTZXJ2aWNlXCIsIFwiR2V0U2lnbmVkQXJ0aWZhY3RVUkxcIiwgXCJhcHBsaWNhdGlvbi9wcm90b2J1ZlwiLCBkYXRhKTtcbiAgICAgICAgcmV0dXJuIHByb21pc2UudGhlbigoZGF0YSkgPT4gYXJ0aWZhY3RfMS5HZXRTaWduZWRBcnRpZmFjdFVSTFJlc3BvbnNlLmZyb21CaW5hcnkoZGF0YSkpO1xuICAgIH1cbiAgICBEZWxldGVBcnRpZmFjdChyZXF1ZXN0KSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhcnRpZmFjdF8xLkRlbGV0ZUFydGlmYWN0UmVxdWVzdC50b0JpbmFyeShyZXF1ZXN0KTtcbiAgICAgICAgY29uc3QgcHJvbWlzZSA9IHRoaXMucnBjLnJlcXVlc3QoXCJnaXRodWIuYWN0aW9ucy5yZXN1bHRzLmFwaS52MS5BcnRpZmFjdFNlcnZpY2VcIiwgXCJEZWxldGVBcnRpZmFjdFwiLCBcImFwcGxpY2F0aW9uL3Byb3RvYnVmXCIsIGRhdGEpO1xuICAgICAgICByZXR1cm4gcHJvbWlzZS50aGVuKChkYXRhKSA9PiBhcnRpZmFjdF8xLkRlbGV0ZUFydGlmYWN0UmVzcG9uc2UuZnJvbUJpbmFyeShkYXRhKSk7XG4gICAgfVxufVxuZXhwb3J0cy5BcnRpZmFjdFNlcnZpY2VDbGllbnRQcm90b2J1ZiA9IEFydGlmYWN0U2VydmljZUNsaWVudFByb3RvYnVmO1xudmFyIEFydGlmYWN0U2VydmljZU1ldGhvZDtcbihmdW5jdGlvbiAoQXJ0aWZhY3RTZXJ2aWNlTWV0aG9kKSB7XG4gICAgQXJ0aWZhY3RTZXJ2aWNlTWV0aG9kW1wiQ3JlYXRlQXJ0aWZhY3RcIl0gPSBcIkNyZWF0ZUFydGlmYWN0XCI7XG4gICAgQXJ0aWZhY3RTZXJ2aWNlTWV0aG9kW1wiRmluYWxpemVBcnRpZmFjdFwiXSA9IFwiRmluYWxpemVBcnRpZmFjdFwiO1xuICAgIEFydGlmYWN0U2VydmljZU1ldGhvZFtcIkxpc3RBcnRpZmFjdHNcIl0gPSBcIkxpc3RBcnRpZmFjdHNcIjtcbiAgICBBcnRpZmFjdFNlcnZpY2VNZXRob2RbXCJHZXRTaWduZWRBcnRpZmFjdFVSTFwiXSA9IFwiR2V0U2lnbmVkQXJ0aWZhY3RVUkxcIjtcbiAgICBBcnRpZmFjdFNlcnZpY2VNZXRob2RbXCJEZWxldGVBcnRpZmFjdFwiXSA9IFwiRGVsZXRlQXJ0aWZhY3RcIjtcbn0pKEFydGlmYWN0U2VydmljZU1ldGhvZCB8fCAoZXhwb3J0cy5BcnRpZmFjdFNlcnZpY2VNZXRob2QgPSBBcnRpZmFjdFNlcnZpY2VNZXRob2QgPSB7fSkpO1xuZXhwb3J0cy5BcnRpZmFjdFNlcnZpY2VNZXRob2RMaXN0ID0gW1xuICAgIEFydGlmYWN0U2VydmljZU1ldGhvZC5DcmVhdGVBcnRpZmFjdCxcbiAgICBBcnRpZmFjdFNlcnZpY2VNZXRob2QuRmluYWxpemVBcnRpZmFjdCxcbiAgICBBcnRpZmFjdFNlcnZpY2VNZXRob2QuTGlzdEFydGlmYWN0cyxcbiAgICBBcnRpZmFjdFNlcnZpY2VNZXRob2QuR2V0U2lnbmVkQXJ0aWZhY3RVUkwsXG4gICAgQXJ0aWZhY3RTZXJ2aWNlTWV0aG9kLkRlbGV0ZUFydGlmYWN0LFxuXTtcbmZ1bmN0aW9uIGNyZWF0ZUFydGlmYWN0U2VydmljZVNlcnZlcihzZXJ2aWNlKSB7XG4gICAgcmV0dXJuIG5ldyB0d2lycF90c18xLlR3aXJwU2VydmVyKHtcbiAgICAgICAgc2VydmljZSxcbiAgICAgICAgcGFja2FnZU5hbWU6IFwiZ2l0aHViLmFjdGlvbnMucmVzdWx0cy5hcGkudjFcIixcbiAgICAgICAgc2VydmljZU5hbWU6IFwiQXJ0aWZhY3RTZXJ2aWNlXCIsXG4gICAgICAgIG1ldGhvZExpc3Q6IGV4cG9ydHMuQXJ0aWZhY3RTZXJ2aWNlTWV0aG9kTGlzdCxcbiAgICAgICAgbWF0Y2hSb3V0ZTogbWF0Y2hBcnRpZmFjdFNlcnZpY2VSb3V0ZSxcbiAgICB9KTtcbn1cbmV4cG9ydHMuY3JlYXRlQXJ0aWZhY3RTZXJ2aWNlU2VydmVyID0gY3JlYXRlQXJ0aWZhY3RTZXJ2aWNlU2VydmVyO1xuZnVuY3Rpb24gbWF0Y2hBcnRpZmFjdFNlcnZpY2VSb3V0ZShtZXRob2QsIGV2ZW50cykge1xuICAgIHN3aXRjaCAobWV0aG9kKSB7XG4gICAgICAgIGNhc2UgXCJDcmVhdGVBcnRpZmFjdFwiOlxuICAgICAgICAgICAgcmV0dXJuIChjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycykgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgIGN0eCA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgY3R4KSwgeyBtZXRob2ROYW1lOiBcIkNyZWF0ZUFydGlmYWN0XCIgfSk7XG4gICAgICAgICAgICAgICAgeWllbGQgZXZlbnRzLm9uTWF0Y2goY3R4KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlQ3JlYXRlQXJ0aWZhY3RSZXF1ZXN0KGN0eCwgc2VydmljZSwgZGF0YSwgaW50ZXJjZXB0b3JzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICBjYXNlIFwiRmluYWxpemVBcnRpZmFjdFwiOlxuICAgICAgICAgICAgcmV0dXJuIChjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycykgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgIGN0eCA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgY3R4KSwgeyBtZXRob2ROYW1lOiBcIkZpbmFsaXplQXJ0aWZhY3RcIiB9KTtcbiAgICAgICAgICAgICAgICB5aWVsZCBldmVudHMub25NYXRjaChjdHgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGVBcnRpZmFjdFNlcnZpY2VGaW5hbGl6ZUFydGlmYWN0UmVxdWVzdChjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgY2FzZSBcIkxpc3RBcnRpZmFjdHNcIjpcbiAgICAgICAgICAgIHJldHVybiAoY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICBjdHggPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGN0eCksIHsgbWV0aG9kTmFtZTogXCJMaXN0QXJ0aWZhY3RzXCIgfSk7XG4gICAgICAgICAgICAgICAgeWllbGQgZXZlbnRzLm9uTWF0Y2goY3R4KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlTGlzdEFydGlmYWN0c1JlcXVlc3QoY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIGNhc2UgXCJHZXRTaWduZWRBcnRpZmFjdFVSTFwiOlxuICAgICAgICAgICAgcmV0dXJuIChjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycykgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgIGN0eCA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgY3R4KSwgeyBtZXRob2ROYW1lOiBcIkdldFNpZ25lZEFydGlmYWN0VVJMXCIgfSk7XG4gICAgICAgICAgICAgICAgeWllbGQgZXZlbnRzLm9uTWF0Y2goY3R4KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlR2V0U2lnbmVkQXJ0aWZhY3RVUkxSZXF1ZXN0KGN0eCwgc2VydmljZSwgZGF0YSwgaW50ZXJjZXB0b3JzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICBjYXNlIFwiRGVsZXRlQXJ0aWZhY3RcIjpcbiAgICAgICAgICAgIHJldHVybiAoY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICBjdHggPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGN0eCksIHsgbWV0aG9kTmFtZTogXCJEZWxldGVBcnRpZmFjdFwiIH0pO1xuICAgICAgICAgICAgICAgIHlpZWxkIGV2ZW50cy5vbk1hdGNoKGN0eCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUFydGlmYWN0U2VydmljZURlbGV0ZUFydGlmYWN0UmVxdWVzdChjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGV2ZW50cy5vbk5vdEZvdW5kKCk7XG4gICAgICAgICAgICBjb25zdCBtc2cgPSBgbm8gaGFuZGxlciBmb3VuZGA7XG4gICAgICAgICAgICB0aHJvdyBuZXcgdHdpcnBfdHNfMS5Ud2lycEVycm9yKHR3aXJwX3RzXzEuVHdpcnBFcnJvckNvZGUuQmFkUm91dGUsIG1zZyk7XG4gICAgfVxufVxuZnVuY3Rpb24gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlQ3JlYXRlQXJ0aWZhY3RSZXF1ZXN0KGN0eCwgc2VydmljZSwgZGF0YSwgaW50ZXJjZXB0b3JzKSB7XG4gICAgc3dpdGNoIChjdHguY29udGVudFR5cGUpIHtcbiAgICAgICAgY2FzZSB0d2lycF90c18xLlR3aXJwQ29udGVudFR5cGUuSlNPTjpcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVBcnRpZmFjdFNlcnZpY2VDcmVhdGVBcnRpZmFjdEpTT04oY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpO1xuICAgICAgICBjYXNlIHR3aXJwX3RzXzEuVHdpcnBDb250ZW50VHlwZS5Qcm90b2J1ZjpcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVBcnRpZmFjdFNlcnZpY2VDcmVhdGVBcnRpZmFjdFByb3RvYnVmKGN0eCwgc2VydmljZSwgZGF0YSwgaW50ZXJjZXB0b3JzKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNvbnN0IG1zZyA9IFwidW5leHBlY3RlZCBDb250ZW50LVR5cGVcIjtcbiAgICAgICAgICAgIHRocm93IG5ldyB0d2lycF90c18xLlR3aXJwRXJyb3IodHdpcnBfdHNfMS5Ud2lycEVycm9yQ29kZS5CYWRSb3V0ZSwgbXNnKTtcbiAgICB9XG59XG5mdW5jdGlvbiBoYW5kbGVBcnRpZmFjdFNlcnZpY2VGaW5hbGl6ZUFydGlmYWN0UmVxdWVzdChjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycykge1xuICAgIHN3aXRjaCAoY3R4LmNvbnRlbnRUeXBlKSB7XG4gICAgICAgIGNhc2UgdHdpcnBfdHNfMS5Ud2lycENvbnRlbnRUeXBlLkpTT046XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlRmluYWxpemVBcnRpZmFjdEpTT04oY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpO1xuICAgICAgICBjYXNlIHR3aXJwX3RzXzEuVHdpcnBDb250ZW50VHlwZS5Qcm90b2J1ZjpcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVBcnRpZmFjdFNlcnZpY2VGaW5hbGl6ZUFydGlmYWN0UHJvdG9idWYoY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgY29uc3QgbXNnID0gXCJ1bmV4cGVjdGVkIENvbnRlbnQtVHlwZVwiO1xuICAgICAgICAgICAgdGhyb3cgbmV3IHR3aXJwX3RzXzEuVHdpcnBFcnJvcih0d2lycF90c18xLlR3aXJwRXJyb3JDb2RlLkJhZFJvdXRlLCBtc2cpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGhhbmRsZUFydGlmYWN0U2VydmljZUxpc3RBcnRpZmFjdHNSZXF1ZXN0KGN0eCwgc2VydmljZSwgZGF0YSwgaW50ZXJjZXB0b3JzKSB7XG4gICAgc3dpdGNoIChjdHguY29udGVudFR5cGUpIHtcbiAgICAgICAgY2FzZSB0d2lycF90c18xLlR3aXJwQ29udGVudFR5cGUuSlNPTjpcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVBcnRpZmFjdFNlcnZpY2VMaXN0QXJ0aWZhY3RzSlNPTihjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycyk7XG4gICAgICAgIGNhc2UgdHdpcnBfdHNfMS5Ud2lycENvbnRlbnRUeXBlLlByb3RvYnVmOlxuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUFydGlmYWN0U2VydmljZUxpc3RBcnRpZmFjdHNQcm90b2J1ZihjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycyk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zdCBtc2cgPSBcInVuZXhwZWN0ZWQgQ29udGVudC1UeXBlXCI7XG4gICAgICAgICAgICB0aHJvdyBuZXcgdHdpcnBfdHNfMS5Ud2lycEVycm9yKHR3aXJwX3RzXzEuVHdpcnBFcnJvckNvZGUuQmFkUm91dGUsIG1zZyk7XG4gICAgfVxufVxuZnVuY3Rpb24gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlR2V0U2lnbmVkQXJ0aWZhY3RVUkxSZXF1ZXN0KGN0eCwgc2VydmljZSwgZGF0YSwgaW50ZXJjZXB0b3JzKSB7XG4gICAgc3dpdGNoIChjdHguY29udGVudFR5cGUpIHtcbiAgICAgICAgY2FzZSB0d2lycF90c18xLlR3aXJwQ29udGVudFR5cGUuSlNPTjpcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVBcnRpZmFjdFNlcnZpY2VHZXRTaWduZWRBcnRpZmFjdFVSTEpTT04oY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpO1xuICAgICAgICBjYXNlIHR3aXJwX3RzXzEuVHdpcnBDb250ZW50VHlwZS5Qcm90b2J1ZjpcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVBcnRpZmFjdFNlcnZpY2VHZXRTaWduZWRBcnRpZmFjdFVSTFByb3RvYnVmKGN0eCwgc2VydmljZSwgZGF0YSwgaW50ZXJjZXB0b3JzKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNvbnN0IG1zZyA9IFwidW5leHBlY3RlZCBDb250ZW50LVR5cGVcIjtcbiAgICAgICAgICAgIHRocm93IG5ldyB0d2lycF90c18xLlR3aXJwRXJyb3IodHdpcnBfdHNfMS5Ud2lycEVycm9yQ29kZS5CYWRSb3V0ZSwgbXNnKTtcbiAgICB9XG59XG5mdW5jdGlvbiBoYW5kbGVBcnRpZmFjdFNlcnZpY2VEZWxldGVBcnRpZmFjdFJlcXVlc3QoY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpIHtcbiAgICBzd2l0Y2ggKGN0eC5jb250ZW50VHlwZSkge1xuICAgICAgICBjYXNlIHR3aXJwX3RzXzEuVHdpcnBDb250ZW50VHlwZS5KU09OOlxuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUFydGlmYWN0U2VydmljZURlbGV0ZUFydGlmYWN0SlNPTihjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycyk7XG4gICAgICAgIGNhc2UgdHdpcnBfdHNfMS5Ud2lycENvbnRlbnRUeXBlLlByb3RvYnVmOlxuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUFydGlmYWN0U2VydmljZURlbGV0ZUFydGlmYWN0UHJvdG9idWYoY3R4LCBzZXJ2aWNlLCBkYXRhLCBpbnRlcmNlcHRvcnMpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgY29uc3QgbXNnID0gXCJ1bmV4cGVjdGVkIENvbnRlbnQtVHlwZVwiO1xuICAgICAgICAgICAgdGhyb3cgbmV3IHR3aXJwX3RzXzEuVHdpcnBFcnJvcih0d2lycF90c18xLlR3aXJwRXJyb3JDb2RlLkJhZFJvdXRlLCBtc2cpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGhhbmRsZUFydGlmYWN0U2VydmljZUNyZWF0ZUFydGlmYWN0SlNPTihjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGxldCByZXF1ZXN0O1xuICAgICAgICBsZXQgcmVzcG9uc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5wYXJzZShkYXRhLnRvU3RyaW5nKCkgfHwgXCJ7fVwiKTtcbiAgICAgICAgICAgIHJlcXVlc3QgPSBhcnRpZmFjdF8xLkNyZWF0ZUFydGlmYWN0UmVxdWVzdC5mcm9tSnNvbihib2R5LCB7XG4gICAgICAgICAgICAgICAgaWdub3JlVW5rbm93bkZpZWxkczogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbXNnID0gXCJ0aGUganNvbiByZXF1ZXN0IGNvdWxkIG5vdCBiZSBkZWNvZGVkXCI7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IHR3aXJwX3RzXzEuVHdpcnBFcnJvcih0d2lycF90c18xLlR3aXJwRXJyb3JDb2RlLk1hbGZvcm1lZCwgbXNnKS53aXRoQ2F1c2UoZSwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGludGVyY2VwdG9ycyAmJiBpbnRlcmNlcHRvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgaW50ZXJjZXB0b3IgPSAoMCwgdHdpcnBfdHNfMS5jaGFpbkludGVyY2VwdG9ycykoLi4uaW50ZXJjZXB0b3JzKTtcbiAgICAgICAgICAgIHJlc3BvbnNlID0geWllbGQgaW50ZXJjZXB0b3IoY3R4LCByZXF1ZXN0LCAoY3R4LCBpbnB1dFJlcSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBzZXJ2aWNlLkNyZWF0ZUFydGlmYWN0KGN0eCwgaW5wdXRSZXEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXNwb25zZSA9IHlpZWxkIHNlcnZpY2UuQ3JlYXRlQXJ0aWZhY3QoY3R4LCByZXF1ZXN0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoYXJ0aWZhY3RfMS5DcmVhdGVBcnRpZmFjdFJlc3BvbnNlLnRvSnNvbihyZXNwb25zZSwge1xuICAgICAgICAgICAgdXNlUHJvdG9GaWVsZE5hbWU6IHRydWUsXG4gICAgICAgICAgICBlbWl0RGVmYXVsdFZhbHVlczogZmFsc2UsXG4gICAgICAgIH0pKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGhhbmRsZUFydGlmYWN0U2VydmljZUZpbmFsaXplQXJ0aWZhY3RKU09OKGN0eCwgc2VydmljZSwgZGF0YSwgaW50ZXJjZXB0b3JzKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgbGV0IHJlcXVlc3Q7XG4gICAgICAgIGxldCByZXNwb25zZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBKU09OLnBhcnNlKGRhdGEudG9TdHJpbmcoKSB8fCBcInt9XCIpO1xuICAgICAgICAgICAgcmVxdWVzdCA9IGFydGlmYWN0XzEuRmluYWxpemVBcnRpZmFjdFJlcXVlc3QuZnJvbUpzb24oYm9keSwge1xuICAgICAgICAgICAgICAgIGlnbm9yZVVua25vd25GaWVsZHM6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1zZyA9IFwidGhlIGpzb24gcmVxdWVzdCBjb3VsZCBub3QgYmUgZGVjb2RlZFwiO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyB0d2lycF90c18xLlR3aXJwRXJyb3IodHdpcnBfdHNfMS5Ud2lycEVycm9yQ29kZS5NYWxmb3JtZWQsIG1zZykud2l0aENhdXNlKGUsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpbnRlcmNlcHRvcnMgJiYgaW50ZXJjZXB0b3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGludGVyY2VwdG9yID0gKDAsIHR3aXJwX3RzXzEuY2hhaW5JbnRlcmNlcHRvcnMpKC4uLmludGVyY2VwdG9ycyk7XG4gICAgICAgICAgICByZXNwb25zZSA9IHlpZWxkIGludGVyY2VwdG9yKGN0eCwgcmVxdWVzdCwgKGN0eCwgaW5wdXRSZXEpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VydmljZS5GaW5hbGl6ZUFydGlmYWN0KGN0eCwgaW5wdXRSZXEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXNwb25zZSA9IHlpZWxkIHNlcnZpY2UuRmluYWxpemVBcnRpZmFjdChjdHgsIHJlcXVlc3QpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShhcnRpZmFjdF8xLkZpbmFsaXplQXJ0aWZhY3RSZXNwb25zZS50b0pzb24ocmVzcG9uc2UsIHtcbiAgICAgICAgICAgIHVzZVByb3RvRmllbGROYW1lOiB0cnVlLFxuICAgICAgICAgICAgZW1pdERlZmF1bHRWYWx1ZXM6IGZhbHNlLFxuICAgICAgICB9KSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBoYW5kbGVBcnRpZmFjdFNlcnZpY2VMaXN0QXJ0aWZhY3RzSlNPTihjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGxldCByZXF1ZXN0O1xuICAgICAgICBsZXQgcmVzcG9uc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5wYXJzZShkYXRhLnRvU3RyaW5nKCkgfHwgXCJ7fVwiKTtcbiAgICAgICAgICAgIHJlcXVlc3QgPSBhcnRpZmFjdF8xLkxpc3RBcnRpZmFjdHNSZXF1ZXN0LmZyb21Kc29uKGJvZHksIHtcbiAgICAgICAgICAgICAgICBpZ25vcmVVbmtub3duRmllbGRzOiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtc2cgPSBcInRoZSBqc29uIHJlcXVlc3QgY291bGQgbm90IGJlIGRlY29kZWRcIjtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgdHdpcnBfdHNfMS5Ud2lycEVycm9yKHR3aXJwX3RzXzEuVHdpcnBFcnJvckNvZGUuTWFsZm9ybWVkLCBtc2cpLndpdGhDYXVzZShlLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaW50ZXJjZXB0b3JzICYmIGludGVyY2VwdG9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBpbnRlcmNlcHRvciA9ICgwLCB0d2lycF90c18xLmNoYWluSW50ZXJjZXB0b3JzKSguLi5pbnRlcmNlcHRvcnMpO1xuICAgICAgICAgICAgcmVzcG9uc2UgPSB5aWVsZCBpbnRlcmNlcHRvcihjdHgsIHJlcXVlc3QsIChjdHgsIGlucHV0UmVxKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlcnZpY2UuTGlzdEFydGlmYWN0cyhjdHgsIGlucHV0UmVxKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzcG9uc2UgPSB5aWVsZCBzZXJ2aWNlLkxpc3RBcnRpZmFjdHMoY3R4LCByZXF1ZXN0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoYXJ0aWZhY3RfMS5MaXN0QXJ0aWZhY3RzUmVzcG9uc2UudG9Kc29uKHJlc3BvbnNlLCB7XG4gICAgICAgICAgICB1c2VQcm90b0ZpZWxkTmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGVtaXREZWZhdWx0VmFsdWVzOiBmYWxzZSxcbiAgICAgICAgfSkpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlR2V0U2lnbmVkQXJ0aWZhY3RVUkxKU09OKGN0eCwgc2VydmljZSwgZGF0YSwgaW50ZXJjZXB0b3JzKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgbGV0IHJlcXVlc3Q7XG4gICAgICAgIGxldCByZXNwb25zZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBKU09OLnBhcnNlKGRhdGEudG9TdHJpbmcoKSB8fCBcInt9XCIpO1xuICAgICAgICAgICAgcmVxdWVzdCA9IGFydGlmYWN0XzEuR2V0U2lnbmVkQXJ0aWZhY3RVUkxSZXF1ZXN0LmZyb21Kc29uKGJvZHksIHtcbiAgICAgICAgICAgICAgICBpZ25vcmVVbmtub3duRmllbGRzOiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtc2cgPSBcInRoZSBqc29uIHJlcXVlc3QgY291bGQgbm90IGJlIGRlY29kZWRcIjtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgdHdpcnBfdHNfMS5Ud2lycEVycm9yKHR3aXJwX3RzXzEuVHdpcnBFcnJvckNvZGUuTWFsZm9ybWVkLCBtc2cpLndpdGhDYXVzZShlLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaW50ZXJjZXB0b3JzICYmIGludGVyY2VwdG9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBpbnRlcmNlcHRvciA9ICgwLCB0d2lycF90c18xLmNoYWluSW50ZXJjZXB0b3JzKSguLi5pbnRlcmNlcHRvcnMpO1xuICAgICAgICAgICAgcmVzcG9uc2UgPSB5aWVsZCBpbnRlcmNlcHRvcihjdHgsIHJlcXVlc3QsIChjdHgsIGlucHV0UmVxKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlcnZpY2UuR2V0U2lnbmVkQXJ0aWZhY3RVUkwoY3R4LCBpbnB1dFJlcSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3BvbnNlID0geWllbGQgc2VydmljZS5HZXRTaWduZWRBcnRpZmFjdFVSTChjdHgsIHJlcXVlc3QpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShhcnRpZmFjdF8xLkdldFNpZ25lZEFydGlmYWN0VVJMUmVzcG9uc2UudG9Kc29uKHJlc3BvbnNlLCB7XG4gICAgICAgICAgICB1c2VQcm90b0ZpZWxkTmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGVtaXREZWZhdWx0VmFsdWVzOiBmYWxzZSxcbiAgICAgICAgfSkpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlRGVsZXRlQXJ0aWZhY3RKU09OKGN0eCwgc2VydmljZSwgZGF0YSwgaW50ZXJjZXB0b3JzKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgbGV0IHJlcXVlc3Q7XG4gICAgICAgIGxldCByZXNwb25zZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBKU09OLnBhcnNlKGRhdGEudG9TdHJpbmcoKSB8fCBcInt9XCIpO1xuICAgICAgICAgICAgcmVxdWVzdCA9IGFydGlmYWN0XzEuRGVsZXRlQXJ0aWZhY3RSZXF1ZXN0LmZyb21Kc29uKGJvZHksIHtcbiAgICAgICAgICAgICAgICBpZ25vcmVVbmtub3duRmllbGRzOiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtc2cgPSBcInRoZSBqc29uIHJlcXVlc3QgY291bGQgbm90IGJlIGRlY29kZWRcIjtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgdHdpcnBfdHNfMS5Ud2lycEVycm9yKHR3aXJwX3RzXzEuVHdpcnBFcnJvckNvZGUuTWFsZm9ybWVkLCBtc2cpLndpdGhDYXVzZShlLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaW50ZXJjZXB0b3JzICYmIGludGVyY2VwdG9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBpbnRlcmNlcHRvciA9ICgwLCB0d2lycF90c18xLmNoYWluSW50ZXJjZXB0b3JzKSguLi5pbnRlcmNlcHRvcnMpO1xuICAgICAgICAgICAgcmVzcG9uc2UgPSB5aWVsZCBpbnRlcmNlcHRvcihjdHgsIHJlcXVlc3QsIChjdHgsIGlucHV0UmVxKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlcnZpY2UuRGVsZXRlQXJ0aWZhY3QoY3R4LCBpbnB1dFJlcSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3BvbnNlID0geWllbGQgc2VydmljZS5EZWxldGVBcnRpZmFjdChjdHgsIHJlcXVlc3QpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShhcnRpZmFjdF8xLkRlbGV0ZUFydGlmYWN0UmVzcG9uc2UudG9Kc29uKHJlc3BvbnNlLCB7XG4gICAgICAgICAgICB1c2VQcm90b0ZpZWxkTmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGVtaXREZWZhdWx0VmFsdWVzOiBmYWxzZSxcbiAgICAgICAgfSkpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlQ3JlYXRlQXJ0aWZhY3RQcm90b2J1ZihjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGxldCByZXF1ZXN0O1xuICAgICAgICBsZXQgcmVzcG9uc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXF1ZXN0ID0gYXJ0aWZhY3RfMS5DcmVhdGVBcnRpZmFjdFJlcXVlc3QuZnJvbUJpbmFyeShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1zZyA9IFwidGhlIHByb3RvYnVmIHJlcXVlc3QgY291bGQgbm90IGJlIGRlY29kZWRcIjtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgdHdpcnBfdHNfMS5Ud2lycEVycm9yKHR3aXJwX3RzXzEuVHdpcnBFcnJvckNvZGUuTWFsZm9ybWVkLCBtc2cpLndpdGhDYXVzZShlLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaW50ZXJjZXB0b3JzICYmIGludGVyY2VwdG9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBpbnRlcmNlcHRvciA9ICgwLCB0d2lycF90c18xLmNoYWluSW50ZXJjZXB0b3JzKSguLi5pbnRlcmNlcHRvcnMpO1xuICAgICAgICAgICAgcmVzcG9uc2UgPSB5aWVsZCBpbnRlcmNlcHRvcihjdHgsIHJlcXVlc3QsIChjdHgsIGlucHV0UmVxKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlcnZpY2UuQ3JlYXRlQXJ0aWZhY3QoY3R4LCBpbnB1dFJlcSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3BvbnNlID0geWllbGQgc2VydmljZS5DcmVhdGVBcnRpZmFjdChjdHgsIHJlcXVlc3QpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShhcnRpZmFjdF8xLkNyZWF0ZUFydGlmYWN0UmVzcG9uc2UudG9CaW5hcnkocmVzcG9uc2UpKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGhhbmRsZUFydGlmYWN0U2VydmljZUZpbmFsaXplQXJ0aWZhY3RQcm90b2J1ZihjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGxldCByZXF1ZXN0O1xuICAgICAgICBsZXQgcmVzcG9uc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXF1ZXN0ID0gYXJ0aWZhY3RfMS5GaW5hbGl6ZUFydGlmYWN0UmVxdWVzdC5mcm9tQmluYXJ5KGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbXNnID0gXCJ0aGUgcHJvdG9idWYgcmVxdWVzdCBjb3VsZCBub3QgYmUgZGVjb2RlZFwiO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyB0d2lycF90c18xLlR3aXJwRXJyb3IodHdpcnBfdHNfMS5Ud2lycEVycm9yQ29kZS5NYWxmb3JtZWQsIG1zZykud2l0aENhdXNlKGUsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpbnRlcmNlcHRvcnMgJiYgaW50ZXJjZXB0b3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGludGVyY2VwdG9yID0gKDAsIHR3aXJwX3RzXzEuY2hhaW5JbnRlcmNlcHRvcnMpKC4uLmludGVyY2VwdG9ycyk7XG4gICAgICAgICAgICByZXNwb25zZSA9IHlpZWxkIGludGVyY2VwdG9yKGN0eCwgcmVxdWVzdCwgKGN0eCwgaW5wdXRSZXEpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VydmljZS5GaW5hbGl6ZUFydGlmYWN0KGN0eCwgaW5wdXRSZXEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXNwb25zZSA9IHlpZWxkIHNlcnZpY2UuRmluYWxpemVBcnRpZmFjdChjdHgsIHJlcXVlc3QpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShhcnRpZmFjdF8xLkZpbmFsaXplQXJ0aWZhY3RSZXNwb25zZS50b0JpbmFyeShyZXNwb25zZSkpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlTGlzdEFydGlmYWN0c1Byb3RvYnVmKGN0eCwgc2VydmljZSwgZGF0YSwgaW50ZXJjZXB0b3JzKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgbGV0IHJlcXVlc3Q7XG4gICAgICAgIGxldCByZXNwb25zZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlcXVlc3QgPSBhcnRpZmFjdF8xLkxpc3RBcnRpZmFjdHNSZXF1ZXN0LmZyb21CaW5hcnkoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtc2cgPSBcInRoZSBwcm90b2J1ZiByZXF1ZXN0IGNvdWxkIG5vdCBiZSBkZWNvZGVkXCI7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IHR3aXJwX3RzXzEuVHdpcnBFcnJvcih0d2lycF90c18xLlR3aXJwRXJyb3JDb2RlLk1hbGZvcm1lZCwgbXNnKS53aXRoQ2F1c2UoZSwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGludGVyY2VwdG9ycyAmJiBpbnRlcmNlcHRvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgaW50ZXJjZXB0b3IgPSAoMCwgdHdpcnBfdHNfMS5jaGFpbkludGVyY2VwdG9ycykoLi4uaW50ZXJjZXB0b3JzKTtcbiAgICAgICAgICAgIHJlc3BvbnNlID0geWllbGQgaW50ZXJjZXB0b3IoY3R4LCByZXF1ZXN0LCAoY3R4LCBpbnB1dFJlcSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBzZXJ2aWNlLkxpc3RBcnRpZmFjdHMoY3R4LCBpbnB1dFJlcSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3BvbnNlID0geWllbGQgc2VydmljZS5MaXN0QXJ0aWZhY3RzKGN0eCwgcmVxdWVzdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGFydGlmYWN0XzEuTGlzdEFydGlmYWN0c1Jlc3BvbnNlLnRvQmluYXJ5KHJlc3BvbnNlKSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBoYW5kbGVBcnRpZmFjdFNlcnZpY2VHZXRTaWduZWRBcnRpZmFjdFVSTFByb3RvYnVmKGN0eCwgc2VydmljZSwgZGF0YSwgaW50ZXJjZXB0b3JzKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgbGV0IHJlcXVlc3Q7XG4gICAgICAgIGxldCByZXNwb25zZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlcXVlc3QgPSBhcnRpZmFjdF8xLkdldFNpZ25lZEFydGlmYWN0VVJMUmVxdWVzdC5mcm9tQmluYXJ5KGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbXNnID0gXCJ0aGUgcHJvdG9idWYgcmVxdWVzdCBjb3VsZCBub3QgYmUgZGVjb2RlZFwiO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyB0d2lycF90c18xLlR3aXJwRXJyb3IodHdpcnBfdHNfMS5Ud2lycEVycm9yQ29kZS5NYWxmb3JtZWQsIG1zZykud2l0aENhdXNlKGUsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpbnRlcmNlcHRvcnMgJiYgaW50ZXJjZXB0b3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGludGVyY2VwdG9yID0gKDAsIHR3aXJwX3RzXzEuY2hhaW5JbnRlcmNlcHRvcnMpKC4uLmludGVyY2VwdG9ycyk7XG4gICAgICAgICAgICByZXNwb25zZSA9IHlpZWxkIGludGVyY2VwdG9yKGN0eCwgcmVxdWVzdCwgKGN0eCwgaW5wdXRSZXEpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VydmljZS5HZXRTaWduZWRBcnRpZmFjdFVSTChjdHgsIGlucHV0UmVxKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzcG9uc2UgPSB5aWVsZCBzZXJ2aWNlLkdldFNpZ25lZEFydGlmYWN0VVJMKGN0eCwgcmVxdWVzdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGFydGlmYWN0XzEuR2V0U2lnbmVkQXJ0aWZhY3RVUkxSZXNwb25zZS50b0JpbmFyeShyZXNwb25zZSkpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gaGFuZGxlQXJ0aWZhY3RTZXJ2aWNlRGVsZXRlQXJ0aWZhY3RQcm90b2J1ZihjdHgsIHNlcnZpY2UsIGRhdGEsIGludGVyY2VwdG9ycykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGxldCByZXF1ZXN0O1xuICAgICAgICBsZXQgcmVzcG9uc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXF1ZXN0ID0gYXJ0aWZhY3RfMS5EZWxldGVBcnRpZmFjdFJlcXVlc3QuZnJvbUJpbmFyeShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1zZyA9IFwidGhlIHByb3RvYnVmIHJlcXVlc3QgY291bGQgbm90IGJlIGRlY29kZWRcIjtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgdHdpcnBfdHNfMS5Ud2lycEVycm9yKHR3aXJwX3RzXzEuVHdpcnBFcnJvckNvZGUuTWFsZm9ybWVkLCBtc2cpLndpdGhDYXVzZShlLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaW50ZXJjZXB0b3JzICYmIGludGVyY2VwdG9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBpbnRlcmNlcHRvciA9ICgwLCB0d2lycF90c18xLmNoYWluSW50ZXJjZXB0b3JzKSguLi5pbnRlcmNlcHRvcnMpO1xuICAgICAgICAgICAgcmVzcG9uc2UgPSB5aWVsZCBpbnRlcmNlcHRvcihjdHgsIHJlcXVlc3QsIChjdHgsIGlucHV0UmVxKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlcnZpY2UuRGVsZXRlQXJ0aWZhY3QoY3R4LCBpbnB1dFJlcSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3BvbnNlID0geWllbGQgc2VydmljZS5EZWxldGVBcnRpZmFjdChjdHgsIHJlcXVlc3QpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShhcnRpZmFjdF8xLkRlbGV0ZUFydGlmYWN0UmVzcG9uc2UudG9CaW5hcnkocmVzcG9uc2UpKTtcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFydGlmYWN0LnR3aXJwLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fZXhwb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19leHBvcnRTdGFyKSB8fCBmdW5jdGlvbihtLCBleHBvcnRzKSB7XG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChleHBvcnRzLCBwKSkgX19jcmVhdGVCaW5kaW5nKGV4cG9ydHMsIG0sIHApO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9nb29nbGUvcHJvdG9idWYvdGltZXN0YW1wXCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9nb29nbGUvcHJvdG9idWYvd3JhcHBlcnNcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3Jlc3VsdHMvYXBpL3YxL2FydGlmYWN0XCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9yZXN1bHRzL2FwaS92MS9hcnRpZmFjdC50d2lycFwiKSwgZXhwb3J0cyk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldEV4cGlyYXRpb24gPSB2b2lkIDA7XG5jb25zdCBnZW5lcmF0ZWRfMSA9IHJlcXVpcmUoXCIuLi8uLi9nZW5lcmF0ZWRcIik7XG5jb25zdCBjb3JlID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJAYWN0aW9ucy9jb3JlXCIpKTtcbmZ1bmN0aW9uIGdldEV4cGlyYXRpb24ocmV0ZW50aW9uRGF5cykge1xuICAgIGlmICghcmV0ZW50aW9uRGF5cykge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBtYXhSZXRlbnRpb25EYXlzID0gZ2V0UmV0ZW50aW9uRGF5cygpO1xuICAgIGlmIChtYXhSZXRlbnRpb25EYXlzICYmIG1heFJldGVudGlvbkRheXMgPCByZXRlbnRpb25EYXlzKSB7XG4gICAgICAgIGNvcmUud2FybmluZyhgUmV0ZW50aW9uIGRheXMgY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiB0aGUgbWF4aW11bSBhbGxvd2VkIHJldGVudGlvbiBzZXQgd2l0aGluIHRoZSByZXBvc2l0b3J5LiBVc2luZyAke21heFJldGVudGlvbkRheXN9IGluc3RlYWQuYCk7XG4gICAgICAgIHJldGVudGlvbkRheXMgPSBtYXhSZXRlbnRpb25EYXlzO1xuICAgIH1cbiAgICBjb25zdCBleHBpcmF0aW9uRGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgZXhwaXJhdGlvbkRhdGUuc2V0RGF0ZShleHBpcmF0aW9uRGF0ZS5nZXREYXRlKCkgKyByZXRlbnRpb25EYXlzKTtcbiAgICByZXR1cm4gZ2VuZXJhdGVkXzEuVGltZXN0YW1wLmZyb21EYXRlKGV4cGlyYXRpb25EYXRlKTtcbn1cbmV4cG9ydHMuZ2V0RXhwaXJhdGlvbiA9IGdldEV4cGlyYXRpb247XG5mdW5jdGlvbiBnZXRSZXRlbnRpb25EYXlzKCkge1xuICAgIGNvbnN0IHJldGVudGlvbkRheXMgPSBwcm9jZXNzLmVudlsnR0lUSFVCX1JFVEVOVElPTl9EQVlTJ107XG4gICAgaWYgKCFyZXRlbnRpb25EYXlzKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IGRheXMgPSBwYXJzZUludChyZXRlbnRpb25EYXlzKTtcbiAgICBpZiAoaXNOYU4oZGF5cykpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIGRheXM7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZXRlbnRpb24uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudmFsaWRhdGVGaWxlUGF0aCA9IGV4cG9ydHMudmFsaWRhdGVBcnRpZmFjdE5hbWUgPSB2b2lkIDA7XG5jb25zdCBjb3JlXzEgPSByZXF1aXJlKFwiQGFjdGlvbnMvY29yZVwiKTtcbi8qKlxuICogSW52YWxpZCBjaGFyYWN0ZXJzIHRoYXQgY2Fubm90IGJlIGluIHRoZSBhcnRpZmFjdCBuYW1lIG9yIGFuIHVwbG9hZGVkIGZpbGUuIFdpbGwgYmUgcmVqZWN0ZWRcbiAqIGZyb20gdGhlIHNlcnZlciBpZiBhdHRlbXB0ZWQgdG8gYmUgc2VudCBvdmVyLiBUaGVzZSBjaGFyYWN0ZXJzIGFyZSBub3QgYWxsb3dlZCBkdWUgdG8gbGltaXRhdGlvbnMgd2l0aCBjZXJ0YWluXG4gKiBmaWxlIHN5c3RlbXMgc3VjaCBhcyBOVEZTLiBUbyBtYWludGFpbiBwbGF0Zm9ybS1hZ25vc3RpYyBiZWhhdmlvciwgYWxsIGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90IHN1cHBvcnRlZCBieSBhblxuICogaW5kaXZpZHVhbCBmaWxlc3lzdGVtL3BsYXRmb3JtIHdpbGwgbm90IGJlIHN1cHBvcnRlZCBvbiBhbGwgZmlsZVN5c3RlbXMvcGxhdGZvcm1zXG4gKlxuICogRmlsZVBhdGhzIGNhbiBpbmNsdWRlIGNoYXJhY3RlcnMgc3VjaCBhcyBcXCBhbmQgLyB3aGljaCBhcmUgbm90IHBlcm1pdHRlZCBpbiB0aGUgYXJ0aWZhY3QgbmFtZSBhbG9uZVxuICovXG5jb25zdCBpbnZhbGlkQXJ0aWZhY3RGaWxlUGF0aENoYXJhY3RlcnMgPSBuZXcgTWFwKFtcbiAgICBbJ1wiJywgJyBEb3VibGUgcXVvdGUgXCInXSxcbiAgICBbJzonLCAnIENvbG9uIDonXSxcbiAgICBbJzwnLCAnIExlc3MgdGhhbiA8J10sXG4gICAgWyc+JywgJyBHcmVhdGVyIHRoYW4gPiddLFxuICAgIFsnfCcsICcgVmVydGljYWwgYmFyIHwnXSxcbiAgICBbJyonLCAnIEFzdGVyaXNrIConXSxcbiAgICBbJz8nLCAnIFF1ZXN0aW9uIG1hcmsgPyddLFxuICAgIFsnXFxyJywgJyBDYXJyaWFnZSByZXR1cm4gXFxcXHInXSxcbiAgICBbJ1xcbicsICcgTGluZSBmZWVkIFxcXFxuJ11cbl0pO1xuY29uc3QgaW52YWxpZEFydGlmYWN0TmFtZUNoYXJhY3RlcnMgPSBuZXcgTWFwKFtcbiAgICAuLi5pbnZhbGlkQXJ0aWZhY3RGaWxlUGF0aENoYXJhY3RlcnMsXG4gICAgWydcXFxcJywgJyBCYWNrc2xhc2ggXFxcXCddLFxuICAgIFsnLycsICcgRm9yd2FyZCBzbGFzaCAvJ11cbl0pO1xuLyoqXG4gKiBWYWxpZGF0ZXMgdGhlIG5hbWUgb2YgdGhlIGFydGlmYWN0IHRvIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gaWxsZWdhbCBjaGFyYWN0ZXJzXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQXJ0aWZhY3ROYW1lKG5hbWUpIHtcbiAgICBpZiAoIW5hbWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQcm92aWRlZCBhcnRpZmFjdCBuYW1lIGlucHV0IGR1cmluZyB2YWxpZGF0aW9uIGlzIGVtcHR5YCk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgW2ludmFsaWRDaGFyYWN0ZXJLZXksIGVycm9yTWVzc2FnZUZvckNoYXJhY3Rlcl0gb2YgaW52YWxpZEFydGlmYWN0TmFtZUNoYXJhY3RlcnMpIHtcbiAgICAgICAgaWYgKG5hbWUuaW5jbHVkZXMoaW52YWxpZENoYXJhY3RlcktleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGFydGlmYWN0IG5hbWUgaXMgbm90IHZhbGlkOiAke25hbWV9LiBDb250YWlucyB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcjogJHtlcnJvck1lc3NhZ2VGb3JDaGFyYWN0ZXJ9XG4gICAgICAgICAgXG5JbnZhbGlkIGNoYXJhY3RlcnMgaW5jbHVkZTogJHtBcnJheS5mcm9tKGludmFsaWRBcnRpZmFjdE5hbWVDaGFyYWN0ZXJzLnZhbHVlcygpKS50b1N0cmluZygpfVxuICAgICAgICAgIFxuVGhlc2UgY2hhcmFjdGVycyBhcmUgbm90IGFsbG93ZWQgaW4gdGhlIGFydGlmYWN0IG5hbWUgZHVlIHRvIGxpbWl0YXRpb25zIHdpdGggY2VydGFpbiBmaWxlIHN5c3RlbXMgc3VjaCBhcyBOVEZTLiBUbyBtYWludGFpbiBmaWxlIHN5c3RlbSBhZ25vc3RpYyBiZWhhdmlvciwgdGhlc2UgY2hhcmFjdGVycyBhcmUgaW50ZW50aW9uYWxseSBub3QgYWxsb3dlZCB0byBwcmV2ZW50IHBvdGVudGlhbCBwcm9ibGVtcyB3aXRoIGRvd25sb2FkcyBvbiBkaWZmZXJlbnQgZmlsZSBzeXN0ZW1zLmApO1xuICAgICAgICB9XG4gICAgfVxuICAgICgwLCBjb3JlXzEuaW5mbykoYEFydGlmYWN0IG5hbWUgaXMgdmFsaWQhYCk7XG59XG5leHBvcnRzLnZhbGlkYXRlQXJ0aWZhY3ROYW1lID0gdmFsaWRhdGVBcnRpZmFjdE5hbWU7XG4vKipcbiAqIFZhbGlkYXRlcyBmaWxlIHBhdGhzIHRvIGNoZWNrIGZvciBhbnkgaWxsZWdhbCBjaGFyYWN0ZXJzIHRoYXQgY2FuIGNhdXNlIHByb2JsZW1zIG9uIGRpZmZlcmVudCBmaWxlIHN5c3RlbXNcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVGaWxlUGF0aChwYXRoKSB7XG4gICAgaWYgKCFwYXRoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgUHJvdmlkZWQgZmlsZSBwYXRoIGlucHV0IGR1cmluZyB2YWxpZGF0aW9uIGlzIGVtcHR5YCk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgW2ludmFsaWRDaGFyYWN0ZXJLZXksIGVycm9yTWVzc2FnZUZvckNoYXJhY3Rlcl0gb2YgaW52YWxpZEFydGlmYWN0RmlsZVBhdGhDaGFyYWN0ZXJzKSB7XG4gICAgICAgIGlmIChwYXRoLmluY2x1ZGVzKGludmFsaWRDaGFyYWN0ZXJLZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBwYXRoIGZvciBvbmUgb2YgdGhlIGZpbGVzIGluIGFydGlmYWN0IGlzIG5vdCB2YWxpZDogJHtwYXRofS4gQ29udGFpbnMgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXI6ICR7ZXJyb3JNZXNzYWdlRm9yQ2hhcmFjdGVyfVxuICAgICAgICAgIFxuSW52YWxpZCBjaGFyYWN0ZXJzIGluY2x1ZGU6ICR7QXJyYXkuZnJvbShpbnZhbGlkQXJ0aWZhY3RGaWxlUGF0aENoYXJhY3RlcnMudmFsdWVzKCkpLnRvU3RyaW5nKCl9XG4gICAgICAgICAgXG5UaGUgZm9sbG93aW5nIGNoYXJhY3RlcnMgYXJlIG5vdCBhbGxvd2VkIGluIGZpbGVzIHRoYXQgYXJlIHVwbG9hZGVkIGR1ZSB0byBsaW1pdGF0aW9ucyB3aXRoIGNlcnRhaW4gZmlsZSBzeXN0ZW1zIHN1Y2ggYXMgTlRGUy4gVG8gbWFpbnRhaW4gZmlsZSBzeXN0ZW0gYWdub3N0aWMgYmVoYXZpb3IsIHRoZXNlIGNoYXJhY3RlcnMgYXJlIGludGVudGlvbmFsbHkgbm90IGFsbG93ZWQgdG8gcHJldmVudCBwb3RlbnRpYWwgcHJvYmxlbXMgd2l0aCBkb3dubG9hZHMgb24gZGlmZmVyZW50IGZpbGUgc3lzdGVtcy5cbiAgICAgICAgICBgKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMudmFsaWRhdGVGaWxlUGF0aCA9IHZhbGlkYXRlRmlsZVBhdGg7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wYXRoLWFuZC1hcnRpZmFjdC1uYW1lLXZhbGlkYXRpb24uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0VXNlckFnZW50U3RyaW5nID0gdm9pZCAwO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby12YXItcmVxdWlyZXMsIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbmNvbnN0IHBhY2thZ2VKc29uID0gcmVxdWlyZSgnLi4vLi4vLi4vcGFja2FnZS5qc29uJyk7XG4vKipcbiAqIEVuc3VyZSB0aGF0IHRoaXMgVXNlciBBZ2VudCBTdHJpbmcgaXMgdXNlZCBpbiBhbGwgSFRUUCBjYWxscyBzbyB0aGF0IHdlIGNhbiBtb25pdG9yIHRlbGVtZXRyeSBiZXR3ZWVuIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiB0aGlzIHBhY2thZ2VcbiAqL1xuZnVuY3Rpb24gZ2V0VXNlckFnZW50U3RyaW5nKCkge1xuICAgIHJldHVybiBgQGFjdGlvbnMvYXJ0aWZhY3QtJHtwYWNrYWdlSnNvbi52ZXJzaW9ufWA7XG59XG5leHBvcnRzLmdldFVzZXJBZ2VudFN0cmluZyA9IGdldFVzZXJBZ2VudFN0cmluZztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzZXItYWdlbnQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVXNhZ2VFcnJvciA9IGV4cG9ydHMuTmV0d29ya0Vycm9yID0gZXhwb3J0cy5HSEVTTm90U3VwcG9ydGVkRXJyb3IgPSBleHBvcnRzLkFydGlmYWN0Tm90Rm91bmRFcnJvciA9IGV4cG9ydHMuSW52YWxpZFJlc3BvbnNlRXJyb3IgPSBleHBvcnRzLkZpbGVzTm90Rm91bmRFcnJvciA9IHZvaWQgMDtcbmNsYXNzIEZpbGVzTm90Rm91bmRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihmaWxlcyA9IFtdKSB7XG4gICAgICAgIGxldCBtZXNzYWdlID0gJ05vIGZpbGVzIHdlcmUgZm91bmQgdG8gdXBsb2FkJztcbiAgICAgICAgaWYgKGZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIG1lc3NhZ2UgKz0gYDogJHtmaWxlcy5qb2luKCcsICcpfWA7XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XG4gICAgICAgIHRoaXMuZmlsZXMgPSBmaWxlcztcbiAgICAgICAgdGhpcy5uYW1lID0gJ0ZpbGVzTm90Rm91bmRFcnJvcic7XG4gICAgfVxufVxuZXhwb3J0cy5GaWxlc05vdEZvdW5kRXJyb3IgPSBGaWxlc05vdEZvdW5kRXJyb3I7XG5jbGFzcyBJbnZhbGlkUmVzcG9uc2VFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLm5hbWUgPSAnSW52YWxpZFJlc3BvbnNlRXJyb3InO1xuICAgIH1cbn1cbmV4cG9ydHMuSW52YWxpZFJlc3BvbnNlRXJyb3IgPSBJbnZhbGlkUmVzcG9uc2VFcnJvcjtcbmNsYXNzIEFydGlmYWN0Tm90Rm91bmRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlID0gJ0FydGlmYWN0IG5vdCBmb3VuZCcpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XG4gICAgICAgIHRoaXMubmFtZSA9ICdBcnRpZmFjdE5vdEZvdW5kRXJyb3InO1xuICAgIH1cbn1cbmV4cG9ydHMuQXJ0aWZhY3ROb3RGb3VuZEVycm9yID0gQXJ0aWZhY3ROb3RGb3VuZEVycm9yO1xuY2xhc3MgR0hFU05vdFN1cHBvcnRlZEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2UgPSAnQGFjdGlvbnMvYXJ0aWZhY3QgdjIuMC4wKywgdXBsb2FkLWFydGlmYWN0QHY0KyBhbmQgZG93bmxvYWQtYXJ0aWZhY3RAdjQrIGFyZSBub3QgY3VycmVudGx5IHN1cHBvcnRlZCBvbiBHSEVTLicpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XG4gICAgICAgIHRoaXMubmFtZSA9ICdHSEVTTm90U3VwcG9ydGVkRXJyb3InO1xuICAgIH1cbn1cbmV4cG9ydHMuR0hFU05vdFN1cHBvcnRlZEVycm9yID0gR0hFU05vdFN1cHBvcnRlZEVycm9yO1xuY2xhc3MgTmV0d29ya0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKGNvZGUpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGBVbmFibGUgdG8gbWFrZSByZXF1ZXN0OiAke2NvZGV9XFxuSWYgeW91IGFyZSB1c2luZyBzZWxmLWhvc3RlZCBydW5uZXJzLCBwbGVhc2UgbWFrZSBzdXJlIHlvdXIgcnVubmVyIGhhcyBhY2Nlc3MgdG8gYWxsIEdpdEh1YiBlbmRwb2ludHM6IGh0dHBzOi8vZG9jcy5naXRodWIuY29tL2VuL2FjdGlvbnMvaG9zdGluZy15b3VyLW93bi1ydW5uZXJzL21hbmFnaW5nLXNlbGYtaG9zdGVkLXJ1bm5lcnMvYWJvdXQtc2VsZi1ob3N0ZWQtcnVubmVycyNjb21tdW5pY2F0aW9uLWJldHdlZW4tc2VsZi1ob3N0ZWQtcnVubmVycy1hbmQtZ2l0aHViYDtcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XG4gICAgICAgIHRoaXMuY29kZSA9IGNvZGU7XG4gICAgICAgIHRoaXMubmFtZSA9ICdOZXR3b3JrRXJyb3InO1xuICAgIH1cbn1cbmV4cG9ydHMuTmV0d29ya0Vycm9yID0gTmV0d29ya0Vycm9yO1xuTmV0d29ya0Vycm9yLmlzTmV0d29ya0Vycm9yQ29kZSA9IChjb2RlKSA9PiB7XG4gICAgaWYgKCFjb2RlKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgJ0VDT05OUkVTRVQnLFxuICAgICAgICAnRU5PVEZPVU5EJyxcbiAgICAgICAgJ0VUSU1FRE9VVCcsXG4gICAgICAgICdFQ09OTlJFRlVTRUQnLFxuICAgICAgICAnRUhPU1RVTlJFQUNIJ1xuICAgIF0uaW5jbHVkZXMoY29kZSk7XG59O1xuY2xhc3MgVXNhZ2VFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGBBcnRpZmFjdCBzdG9yYWdlIHF1b3RhIGhhcyBiZWVuIGhpdC4gVW5hYmxlIHRvIHVwbG9hZCBhbnkgbmV3IGFydGlmYWN0cy4gVXNhZ2UgaXMgcmVjYWxjdWxhdGVkIGV2ZXJ5IDYtMTIgaG91cnMuXFxuTW9yZSBpbmZvIG9uIHN0b3JhZ2UgbGltaXRzOiBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9lbi9iaWxsaW5nL21hbmFnaW5nLWJpbGxpbmctZm9yLWdpdGh1Yi1hY3Rpb25zL2Fib3V0LWJpbGxpbmctZm9yLWdpdGh1Yi1hY3Rpb25zI2NhbGN1bGF0aW5nLW1pbnV0ZS1hbmQtc3RvcmFnZS1zcGVuZGluZ2A7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLm5hbWUgPSAnVXNhZ2VFcnJvcic7XG4gICAgfVxufVxuZXhwb3J0cy5Vc2FnZUVycm9yID0gVXNhZ2VFcnJvcjtcblVzYWdlRXJyb3IuaXNVc2FnZUVycm9yTWVzc2FnZSA9IChtc2cpID0+IHtcbiAgICBpZiAoIW1zZylcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBtc2cuaW5jbHVkZXMoJ2luc3VmZmljaWVudCB1c2FnZScpO1xufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVycm9ycy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmludGVybmFsQXJ0aWZhY3RUd2lycENsaWVudCA9IHZvaWQgMDtcbmNvbnN0IGh0dHBfY2xpZW50XzEgPSByZXF1aXJlKFwiQGFjdGlvbnMvaHR0cC1jbGllbnRcIik7XG5jb25zdCBhdXRoXzEgPSByZXF1aXJlKFwiQGFjdGlvbnMvaHR0cC1jbGllbnQvbGliL2F1dGhcIik7XG5jb25zdCBjb3JlXzEgPSByZXF1aXJlKFwiQGFjdGlvbnMvY29yZVwiKTtcbmNvbnN0IGdlbmVyYXRlZF8xID0gcmVxdWlyZShcIi4uLy4uL2dlbmVyYXRlZFwiKTtcbmNvbnN0IGNvbmZpZ18xID0gcmVxdWlyZShcIi4vY29uZmlnXCIpO1xuY29uc3QgdXNlcl9hZ2VudF8xID0gcmVxdWlyZShcIi4vdXNlci1hZ2VudFwiKTtcbmNvbnN0IGVycm9yc18xID0gcmVxdWlyZShcIi4vZXJyb3JzXCIpO1xuY2xhc3MgQXJ0aWZhY3RIdHRwQ2xpZW50IHtcbiAgICBjb25zdHJ1Y3Rvcih1c2VyQWdlbnQsIG1heEF0dGVtcHRzLCBiYXNlUmV0cnlJbnRlcnZhbE1pbGxpc2Vjb25kcywgcmV0cnlNdWx0aXBsaWVyKSB7XG4gICAgICAgIHRoaXMubWF4QXR0ZW1wdHMgPSA1O1xuICAgICAgICB0aGlzLmJhc2VSZXRyeUludGVydmFsTWlsbGlzZWNvbmRzID0gMzAwMDtcbiAgICAgICAgdGhpcy5yZXRyeU11bHRpcGxpZXIgPSAxLjU7XG4gICAgICAgIGNvbnN0IHRva2VuID0gKDAsIGNvbmZpZ18xLmdldFJ1bnRpbWVUb2tlbikoKTtcbiAgICAgICAgdGhpcy5iYXNlVXJsID0gKDAsIGNvbmZpZ18xLmdldFJlc3VsdHNTZXJ2aWNlVXJsKSgpO1xuICAgICAgICBpZiAobWF4QXR0ZW1wdHMpIHtcbiAgICAgICAgICAgIHRoaXMubWF4QXR0ZW1wdHMgPSBtYXhBdHRlbXB0cztcbiAgICAgICAgfVxuICAgICAgICBpZiAoYmFzZVJldHJ5SW50ZXJ2YWxNaWxsaXNlY29uZHMpIHtcbiAgICAgICAgICAgIHRoaXMuYmFzZVJldHJ5SW50ZXJ2YWxNaWxsaXNlY29uZHMgPSBiYXNlUmV0cnlJbnRlcnZhbE1pbGxpc2Vjb25kcztcbiAgICAgICAgfVxuICAgICAgICBpZiAocmV0cnlNdWx0aXBsaWVyKSB7XG4gICAgICAgICAgICB0aGlzLnJldHJ5TXVsdGlwbGllciA9IHJldHJ5TXVsdGlwbGllcjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmh0dHBDbGllbnQgPSBuZXcgaHR0cF9jbGllbnRfMS5IdHRwQ2xpZW50KHVzZXJBZ2VudCwgW1xuICAgICAgICAgICAgbmV3IGF1dGhfMS5CZWFyZXJDcmVkZW50aWFsSGFuZGxlcih0b2tlbilcbiAgICAgICAgXSk7XG4gICAgfVxuICAgIC8vIFRoaXMgZnVuY3Rpb24gc2F0aXNmaWVzIHRoZSBScGMgaW50ZXJmYWNlLiBJdCBpcyBjb21wYXRpYmxlIHdpdGggdGhlIEpTT05cbiAgICAvLyBKU09OIGdlbmVyYXRlZCBjbGllbnQuXG4gICAgcmVxdWVzdChzZXJ2aWNlLCBtZXRob2QsIGNvbnRlbnRUeXBlLCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKGAvdHdpcnAvJHtzZXJ2aWNlfS8ke21ldGhvZH1gLCB0aGlzLmJhc2VVcmwpLmhyZWY7XG4gICAgICAgICAgICAoMCwgY29yZV8xLmRlYnVnKShgW1JlcXVlc3RdICR7bWV0aG9kfSAke3VybH1gKTtcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6IGNvbnRlbnRUeXBlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGJvZHkgfSA9IHlpZWxkIHRoaXMucmV0cnlhYmxlUmVxdWVzdCgoKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7IHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdCh1cmwsIEpTT04uc3RyaW5naWZ5KGRhdGEpLCBoZWFkZXJzKTsgfSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiBib2R5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gJHttZXRob2R9OiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXRyeWFibGVSZXF1ZXN0KG9wZXJhdGlvbikge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgbGV0IGF0dGVtcHQgPSAwO1xuICAgICAgICAgICAgbGV0IGVycm9yTWVzc2FnZSA9ICcnO1xuICAgICAgICAgICAgbGV0IHJhd0JvZHkgPSAnJztcbiAgICAgICAgICAgIHdoaWxlIChhdHRlbXB0IDwgdGhpcy5tYXhBdHRlbXB0cykge1xuICAgICAgICAgICAgICAgIGxldCBpc1JldHJ5YWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0geWllbGQgb3BlcmF0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXR1c0NvZGUgPSByZXNwb25zZS5tZXNzYWdlLnN0YXR1c0NvZGU7XG4gICAgICAgICAgICAgICAgICAgIHJhd0JvZHkgPSB5aWVsZCByZXNwb25zZS5yZWFkQm9keSgpO1xuICAgICAgICAgICAgICAgICAgICAoMCwgY29yZV8xLmRlYnVnKShgW1Jlc3BvbnNlXSAtICR7cmVzcG9uc2UubWVzc2FnZS5zdGF0dXNDb2RlfWApO1xuICAgICAgICAgICAgICAgICAgICAoMCwgY29yZV8xLmRlYnVnKShgSGVhZGVyczogJHtKU09OLnN0cmluZ2lmeShyZXNwb25zZS5tZXNzYWdlLmhlYWRlcnMsIG51bGwsIDIpfWApO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5wYXJzZShyYXdCb2R5KTtcbiAgICAgICAgICAgICAgICAgICAgKDAsIGNvcmVfMS5kZWJ1ZykoYEJvZHk6ICR7SlNPTi5zdHJpbmdpZnkoYm9keSwgbnVsbCwgMil9YCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzU3VjY2Vzc1N0YXR1c0NvZGUoc3RhdHVzQ29kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHJlc3BvbnNlLCBib2R5IH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaXNSZXRyeWFibGUgPSB0aGlzLmlzUmV0cnlhYmxlSHR0cFN0YXR1c0NvZGUoc3RhdHVzQ29kZSk7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGBGYWlsZWQgcmVxdWVzdDogKCR7c3RhdHVzQ29kZX0pICR7cmVzcG9uc2UubWVzc2FnZS5zdGF0dXNNZXNzYWdlfWA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChib2R5Lm1zZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yc18xLlVzYWdlRXJyb3IuaXNVc2FnZUVycm9yTWVzc2FnZShib2R5Lm1zZykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuVXNhZ2VFcnJvcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gYCR7ZXJyb3JNZXNzYWdlfTogJHtib2R5Lm1zZ31gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgKDAsIGNvcmVfMS5kZWJ1ZykoYFJhdyBCb2R5OiAke3Jhd0JvZHl9YCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgZXJyb3JzXzEuVXNhZ2VFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yc18xLk5ldHdvcmtFcnJvci5pc05ldHdvcmtFcnJvckNvZGUoZXJyb3IgPT09IG51bGwgfHwgZXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGVycm9yLmNvZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuTmV0d29ya0Vycm9yKGVycm9yID09PSBudWxsIHx8IGVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlcnJvci5jb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpc1JldHJ5YWJsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGVycm9yLm1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghaXNSZXRyeWFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBSZWNlaXZlZCBub24tcmV0cnlhYmxlIGVycm9yOiAke2Vycm9yTWVzc2FnZX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGF0dGVtcHQgKyAxID09PSB0aGlzLm1heEF0dGVtcHRzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIG1ha2UgcmVxdWVzdCBhZnRlciAke3RoaXMubWF4QXR0ZW1wdHN9IGF0dGVtcHRzOiAke2Vycm9yTWVzc2FnZX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcmV0cnlUaW1lTWlsbGlzZWNvbmRzID0gdGhpcy5nZXRFeHBvbmVudGlhbFJldHJ5VGltZU1pbGxpc2Vjb25kcyhhdHRlbXB0KTtcbiAgICAgICAgICAgICAgICAoMCwgY29yZV8xLmluZm8pKGBBdHRlbXB0ICR7YXR0ZW1wdCArIDF9IG9mICR7dGhpcy5tYXhBdHRlbXB0c30gZmFpbGVkIHdpdGggZXJyb3I6ICR7ZXJyb3JNZXNzYWdlfS4gUmV0cnlpbmcgcmVxdWVzdCBpbiAke3JldHJ5VGltZU1pbGxpc2Vjb25kc30gbXMuLi5gKTtcbiAgICAgICAgICAgICAgICB5aWVsZCB0aGlzLnNsZWVwKHJldHJ5VGltZU1pbGxpc2Vjb25kcyk7XG4gICAgICAgICAgICAgICAgYXR0ZW1wdCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBSZXF1ZXN0IGZhaWxlZGApO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgaXNTdWNjZXNzU3RhdHVzQ29kZShzdGF0dXNDb2RlKSB7XG4gICAgICAgIGlmICghc3RhdHVzQ29kZSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHN0YXR1c0NvZGUgPj0gMjAwICYmIHN0YXR1c0NvZGUgPCAzMDA7XG4gICAgfVxuICAgIGlzUmV0cnlhYmxlSHR0cFN0YXR1c0NvZGUoc3RhdHVzQ29kZSkge1xuICAgICAgICBpZiAoIXN0YXR1c0NvZGUpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNvbnN0IHJldHJ5YWJsZVN0YXR1c0NvZGVzID0gW1xuICAgICAgICAgICAgaHR0cF9jbGllbnRfMS5IdHRwQ29kZXMuQmFkR2F0ZXdheSxcbiAgICAgICAgICAgIGh0dHBfY2xpZW50XzEuSHR0cENvZGVzLkdhdGV3YXlUaW1lb3V0LFxuICAgICAgICAgICAgaHR0cF9jbGllbnRfMS5IdHRwQ29kZXMuSW50ZXJuYWxTZXJ2ZXJFcnJvcixcbiAgICAgICAgICAgIGh0dHBfY2xpZW50XzEuSHR0cENvZGVzLlNlcnZpY2VVbmF2YWlsYWJsZSxcbiAgICAgICAgICAgIGh0dHBfY2xpZW50XzEuSHR0cENvZGVzLlRvb01hbnlSZXF1ZXN0c1xuICAgICAgICBdO1xuICAgICAgICByZXR1cm4gcmV0cnlhYmxlU3RhdHVzQ29kZXMuaW5jbHVkZXMoc3RhdHVzQ29kZSk7XG4gICAgfVxuICAgIHNsZWVwKG1pbGxpc2Vjb25kcykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtaWxsaXNlY29uZHMpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGdldEV4cG9uZW50aWFsUmV0cnlUaW1lTWlsbGlzZWNvbmRzKGF0dGVtcHQpIHtcbiAgICAgICAgaWYgKGF0dGVtcHQgPCAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2F0dGVtcHQgc2hvdWxkIGJlIGEgcG9zaXRpdmUgaW50ZWdlcicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhdHRlbXB0ID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5iYXNlUmV0cnlJbnRlcnZhbE1pbGxpc2Vjb25kcztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtaW5UaW1lID0gdGhpcy5iYXNlUmV0cnlJbnRlcnZhbE1pbGxpc2Vjb25kcyAqIE1hdGgucG93KHRoaXMucmV0cnlNdWx0aXBsaWVyLCBhdHRlbXB0KTtcbiAgICAgICAgY29uc3QgbWF4VGltZSA9IG1pblRpbWUgKiB0aGlzLnJldHJ5TXVsdGlwbGllcjtcbiAgICAgICAgLy8gcmV0dXJucyBhIHJhbmRvbSBudW1iZXIgYmV0d2VlbiBtaW5UaW1lIGFuZCBtYXhUaW1lIChleGNsdXNpdmUpXG4gICAgICAgIHJldHVybiBNYXRoLnRydW5jKE1hdGgucmFuZG9tKCkgKiAobWF4VGltZSAtIG1pblRpbWUpICsgbWluVGltZSk7XG4gICAgfVxufVxuZnVuY3Rpb24gaW50ZXJuYWxBcnRpZmFjdFR3aXJwQ2xpZW50KG9wdGlvbnMpIHtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgQXJ0aWZhY3RIdHRwQ2xpZW50KCgwLCB1c2VyX2FnZW50XzEuZ2V0VXNlckFnZW50U3RyaW5nKSgpLCBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMubWF4QXR0ZW1wdHMsIG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5yZXRyeUludGVydmFsTXMsIG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5yZXRyeU11bHRpcGxpZXIpO1xuICAgIHJldHVybiBuZXcgZ2VuZXJhdGVkXzEuQXJ0aWZhY3RTZXJ2aWNlQ2xpZW50SlNPTihjbGllbnQpO1xufVxuZXhwb3J0cy5pbnRlcm5hbEFydGlmYWN0VHdpcnBDbGllbnQgPSBpbnRlcm5hbEFydGlmYWN0VHdpcnBDbGllbnQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hcnRpZmFjdC10d2lycC1jbGllbnQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRVcGxvYWRaaXBTcGVjaWZpY2F0aW9uID0gZXhwb3J0cy52YWxpZGF0ZVJvb3REaXJlY3RvcnkgPSB2b2lkIDA7XG5jb25zdCBmcyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiZnNcIikpO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIkBhY3Rpb25zL2NvcmVcIik7XG5jb25zdCBwYXRoXzEgPSByZXF1aXJlKFwicGF0aFwiKTtcbmNvbnN0IHBhdGhfYW5kX2FydGlmYWN0X25hbWVfdmFsaWRhdGlvbl8xID0gcmVxdWlyZShcIi4vcGF0aC1hbmQtYXJ0aWZhY3QtbmFtZS12YWxpZGF0aW9uXCIpO1xuLyoqXG4gKiBDaGVja3MgaWYgYSByb290IGRpcmVjdG9yeSBleGlzdHMgYW5kIGlzIHZhbGlkXG4gKiBAcGFyYW0gcm9vdERpcmVjdG9yeSBhbiBhYnNvbHV0ZSByb290IGRpcmVjdG9yeSBwYXRoIGNvbW1vbiB0byBhbGwgaW5wdXQgZmlsZXMgdGhhdCB0aGF0IHdpbGwgYmUgdHJpbW1lZCBmcm9tIHRoZSBmaW5hbCB6aXAgc3RydWN0dXJlXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlUm9vdERpcmVjdG9yeShyb290RGlyZWN0b3J5KSB7XG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKHJvb3REaXJlY3RvcnkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIHByb3ZpZGVkIHJvb3REaXJlY3RvcnkgJHtyb290RGlyZWN0b3J5fSBkb2VzIG5vdCBleGlzdGApO1xuICAgIH1cbiAgICBpZiAoIWZzLnN0YXRTeW5jKHJvb3REaXJlY3RvcnkpLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgcHJvdmlkZWQgcm9vdERpcmVjdG9yeSAke3Jvb3REaXJlY3Rvcnl9IGlzIG5vdCBhIHZhbGlkIGRpcmVjdG9yeWApO1xuICAgIH1cbiAgICAoMCwgY29yZV8xLmluZm8pKGBSb290IGRpcmVjdG9yeSBpbnB1dCBpcyB2YWxpZCFgKTtcbn1cbmV4cG9ydHMudmFsaWRhdGVSb290RGlyZWN0b3J5ID0gdmFsaWRhdGVSb290RGlyZWN0b3J5O1xuLyoqXG4gKiBDcmVhdGVzIGEgc3BlY2lmaWNhdGlvbiB0aGF0IGRlc2NyaWJlcyBob3cgYSB6aXAgZmlsZSB3aWxsIGJlIGNyZWF0ZWQgZm9yIGEgc2V0IG9mIGlucHV0IGZpbGVzXG4gKiBAcGFyYW0gZmlsZXNUb1ppcCBhIGxpc3Qgb2YgZmlsZSB0aGF0IHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgemlwXG4gKiBAcGFyYW0gcm9vdERpcmVjdG9yeSBhbiBhYnNvbHV0ZSByb290IGRpcmVjdG9yeSBwYXRoIGNvbW1vbiB0byBhbGwgaW5wdXQgZmlsZXMgdGhhdCB0aGF0IHdpbGwgYmUgdHJpbW1lZCBmcm9tIHRoZSBmaW5hbCB6aXAgc3RydWN0dXJlXG4gKi9cbmZ1bmN0aW9uIGdldFVwbG9hZFppcFNwZWNpZmljYXRpb24oZmlsZXNUb1ppcCwgcm9vdERpcmVjdG9yeSkge1xuICAgIGNvbnN0IHNwZWNpZmljYXRpb24gPSBbXTtcbiAgICAvLyBOb3JtYWxpemUgYW5kIHJlc29sdmUsIHRoaXMgYWxsb3dzIGZvciBlaXRoZXIgYWJzb2x1dGUgb3IgcmVsYXRpdmUgcGF0aHMgdG8gYmUgdXNlZFxuICAgIHJvb3REaXJlY3RvcnkgPSAoMCwgcGF0aF8xLm5vcm1hbGl6ZSkocm9vdERpcmVjdG9yeSk7XG4gICAgcm9vdERpcmVjdG9yeSA9ICgwLCBwYXRoXzEucmVzb2x2ZSkocm9vdERpcmVjdG9yeSk7XG4gICAgLypcbiAgICAgICBFeGFtcGxlXG4gICAgICAgXG4gICAgICAgSW5wdXQ6XG4gICAgICAgICByb290RGlyZWN0b3J5OiAnL2hvbWUvdXNlci9maWxlcy9wbHotdXBsb2FkJ1xuICAgICAgICAgYXJ0aWZhY3RGaWxlczogW1xuICAgICAgICAgICAnL2hvbWUvdXNlci9maWxlcy9wbHotdXBsb2FkL2ZpbGUxLnR4dCcsXG4gICAgICAgICAgICcvaG9tZS91c2VyL2ZpbGVzL3Bsei11cGxvYWQvZmlsZTIudHh0JyxcbiAgICAgICAgICAgJy9ob21lL3VzZXIvZmlsZXMvcGx6LXVwbG9hZC9kaXIvZmlsZTMudHh0J1xuICAgICAgICAgXVxuICAgICAgIFxuICAgICAgIE91dHB1dDpcbiAgICAgICAgIHNwZWNpZmljYXRpb25zOiBbXG4gICAgICAgICAgIFsnL2hvbWUvdXNlci9maWxlcy9wbHotdXBsb2FkL2ZpbGUxLnR4dCcsICcvZmlsZTEudHh0J10sXG4gICAgICAgICAgIFsnL2hvbWUvdXNlci9maWxlcy9wbHotdXBsb2FkL2ZpbGUxLnR4dCcsICcvZmlsZTIudHh0J10sXG4gICAgICAgICAgIFsnL2hvbWUvdXNlci9maWxlcy9wbHotdXBsb2FkL2ZpbGUxLnR4dCcsICcvZGlyL2ZpbGUzLnR4dCddXG4gICAgICAgICBdXG4gIFxuICAgICAgICBUaGUgZmluYWwgemlwIHRoYXQgaXMgbGF0ZXIgdXBsb2FkZWQgd2lsbCBsb29rIGxpa2UgdGhpczpcbiAgXG4gICAgICAgIG15LWFydGlmYWN0LnppcFxuICAgICAgICAgIC0gZmlsZS50eHRcbiAgICAgICAgICAtIGZpbGUyLnR4dFxuICAgICAgICAgIC0gZGlyL1xuICAgICAgICAgICAgLSBmaWxlMy50eHRcbiAgICAqL1xuICAgIGZvciAobGV0IGZpbGUgb2YgZmlsZXNUb1ppcCkge1xuICAgICAgICBjb25zdCBzdGF0cyA9IGZzLmxzdGF0U3luYyhmaWxlLCB7IHRocm93SWZOb0VudHJ5OiBmYWxzZSB9KTtcbiAgICAgICAgaWYgKCFzdGF0cykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGaWxlICR7ZmlsZX0gZG9lcyBub3QgZXhpc3RgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgICAgIC8vIE5vcm1hbGl6ZSBhbmQgcmVzb2x2ZSwgdGhpcyBhbGxvd3MgZm9yIGVpdGhlciBhYnNvbHV0ZSBvciByZWxhdGl2ZSBwYXRocyB0byBiZSB1c2VkXG4gICAgICAgICAgICBmaWxlID0gKDAsIHBhdGhfMS5ub3JtYWxpemUpKGZpbGUpO1xuICAgICAgICAgICAgZmlsZSA9ICgwLCBwYXRoXzEucmVzb2x2ZSkoZmlsZSk7XG4gICAgICAgICAgICBpZiAoIWZpbGUuc3RhcnRzV2l0aChyb290RGlyZWN0b3J5KSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIHJvb3REaXJlY3Rvcnk6ICR7cm9vdERpcmVjdG9yeX0gaXMgbm90IGEgcGFyZW50IGRpcmVjdG9yeSBvZiB0aGUgZmlsZTogJHtmaWxlfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIGZvcmJpZGRlbiBjaGFyYWN0ZXJzIGluIGZpbGUgcGF0aHMgdGhhdCBtYXkgY2F1c2UgYW1iaWd1b3VzIGJlaGF2aW9yIGlmIGRvd25sb2FkZWQgb24gZGlmZmVyZW50IGZpbGUgc3lzdGVtc1xuICAgICAgICAgICAgY29uc3QgdXBsb2FkUGF0aCA9IGZpbGUucmVwbGFjZShyb290RGlyZWN0b3J5LCAnJyk7XG4gICAgICAgICAgICAoMCwgcGF0aF9hbmRfYXJ0aWZhY3RfbmFtZV92YWxpZGF0aW9uXzEudmFsaWRhdGVGaWxlUGF0aCkodXBsb2FkUGF0aCk7XG4gICAgICAgICAgICBzcGVjaWZpY2F0aW9uLnB1c2goe1xuICAgICAgICAgICAgICAgIHNvdXJjZVBhdGg6IGZpbGUsXG4gICAgICAgICAgICAgICAgZGVzdGluYXRpb25QYXRoOiB1cGxvYWRQYXRoLFxuICAgICAgICAgICAgICAgIHN0YXRzXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIEVtcHR5IGRpcmVjdG9yeVxuICAgICAgICAgICAgY29uc3QgZGlyZWN0b3J5UGF0aCA9IGZpbGUucmVwbGFjZShyb290RGlyZWN0b3J5LCAnJyk7XG4gICAgICAgICAgICAoMCwgcGF0aF9hbmRfYXJ0aWZhY3RfbmFtZV92YWxpZGF0aW9uXzEudmFsaWRhdGVGaWxlUGF0aCkoZGlyZWN0b3J5UGF0aCk7XG4gICAgICAgICAgICBzcGVjaWZpY2F0aW9uLnB1c2goe1xuICAgICAgICAgICAgICAgIHNvdXJjZVBhdGg6IG51bGwsXG4gICAgICAgICAgICAgICAgZGVzdGluYXRpb25QYXRoOiBkaXJlY3RvcnlQYXRoLFxuICAgICAgICAgICAgICAgIHN0YXRzXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3BlY2lmaWNhdGlvbjtcbn1cbmV4cG9ydHMuZ2V0VXBsb2FkWmlwU3BlY2lmaWNhdGlvbiA9IGdldFVwbG9hZFppcFNwZWNpZmljYXRpb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD11cGxvYWQtemlwLXNwZWNpZmljYXRpb24uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBlKGUpe3RoaXMubWVzc2FnZT1lfWUucHJvdG90eXBlPW5ldyBFcnJvcixlLnByb3RvdHlwZS5uYW1lPVwiSW52YWxpZENoYXJhY3RlckVycm9yXCI7dmFyIHI9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93LmF0b2ImJndpbmRvdy5hdG9iLmJpbmQod2luZG93KXx8ZnVuY3Rpb24ocil7dmFyIHQ9U3RyaW5nKHIpLnJlcGxhY2UoLz0rJC8sXCJcIik7aWYodC5sZW5ndGglND09MSl0aHJvdyBuZXcgZShcIidhdG9iJyBmYWlsZWQ6IFRoZSBzdHJpbmcgdG8gYmUgZGVjb2RlZCBpcyBub3QgY29ycmVjdGx5IGVuY29kZWQuXCIpO2Zvcih2YXIgbixvLGE9MCxpPTAsYz1cIlwiO289dC5jaGFyQXQoaSsrKTt+byYmKG49YSU0PzY0Km4rbzpvLGErKyU0KT9jKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDI1NSZuPj4oLTIqYSY2KSk6MClvPVwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz1cIi5pbmRleE9mKG8pO3JldHVybiBjfTtmdW5jdGlvbiB0KGUpe3ZhciB0PWUucmVwbGFjZSgvLS9nLFwiK1wiKS5yZXBsYWNlKC9fL2csXCIvXCIpO3N3aXRjaCh0Lmxlbmd0aCU0KXtjYXNlIDA6YnJlYWs7Y2FzZSAyOnQrPVwiPT1cIjticmVhaztjYXNlIDM6dCs9XCI9XCI7YnJlYWs7ZGVmYXVsdDp0aHJvd1wiSWxsZWdhbCBiYXNlNjR1cmwgc3RyaW5nIVwifXRyeXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChyKGUpLnJlcGxhY2UoLyguKS9nLChmdW5jdGlvbihlLHIpe3ZhciB0PXIuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtyZXR1cm4gdC5sZW5ndGg8MiYmKHQ9XCIwXCIrdCksXCIlXCIrdH0pKSl9KHQpfWNhdGNoKGUpe3JldHVybiByKHQpfX1mdW5jdGlvbiBuKGUpe3RoaXMubWVzc2FnZT1lfWZ1bmN0aW9uIG8oZSxyKXtpZihcInN0cmluZ1wiIT10eXBlb2YgZSl0aHJvdyBuZXcgbihcIkludmFsaWQgdG9rZW4gc3BlY2lmaWVkXCIpO3ZhciBvPSEwPT09KHI9cnx8e30pLmhlYWRlcj8wOjE7dHJ5e3JldHVybiBKU09OLnBhcnNlKHQoZS5zcGxpdChcIi5cIilbb10pKX1jYXRjaChlKXt0aHJvdyBuZXcgbihcIkludmFsaWQgdG9rZW4gc3BlY2lmaWVkOiBcIitlLm1lc3NhZ2UpfX1uLnByb3RvdHlwZT1uZXcgRXJyb3Isbi5wcm90b3R5cGUubmFtZT1cIkludmFsaWRUb2tlbkVycm9yXCI7Y29uc3QgYT1vO2EuZGVmYXVsdD1vLGEuSW52YWxpZFRva2VuRXJyb3I9bixtb2R1bGUuZXhwb3J0cz1hO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9and0LWRlY29kZS5janMuanMubWFwXG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldEJhY2tlbmRJZHNGcm9tVG9rZW4gPSB2b2lkIDA7XG5jb25zdCBjb3JlID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJAYWN0aW9ucy9jb3JlXCIpKTtcbmNvbnN0IGNvbmZpZ18xID0gcmVxdWlyZShcIi4vY29uZmlnXCIpO1xuY29uc3Qgand0X2RlY29kZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJqd3QtZGVjb2RlXCIpKTtcbmNvbnN0IEludmFsaWRKd3RFcnJvciA9IG5ldyBFcnJvcignRmFpbGVkIHRvIGdldCBiYWNrZW5kIElEczogVGhlIHByb3ZpZGVkIEpXVCB0b2tlbiBpcyBpbnZhbGlkIGFuZC9vciBtaXNzaW5nIGNsYWltcycpO1xuLy8gdXNlcyB0aGUgSldUIHRva2VuIGNsYWltcyB0byBnZXQgdGhlXG4vLyB3b3JrZmxvdyBydW4gYW5kIHdvcmtmbG93IGpvYiBydW4gYmFja2VuZCBpZHNcbmZ1bmN0aW9uIGdldEJhY2tlbmRJZHNGcm9tVG9rZW4oKSB7XG4gICAgY29uc3QgdG9rZW4gPSAoMCwgY29uZmlnXzEuZ2V0UnVudGltZVRva2VuKSgpO1xuICAgIGNvbnN0IGRlY29kZWQgPSAoMCwgand0X2RlY29kZV8xLmRlZmF1bHQpKHRva2VuKTtcbiAgICBpZiAoIWRlY29kZWQuc2NwKSB7XG4gICAgICAgIHRocm93IEludmFsaWRKd3RFcnJvcjtcbiAgICB9XG4gICAgLypcbiAgICAgKiBleGFtcGxlIGRlY29kZWQ6XG4gICAgICoge1xuICAgICAqICAgc2NwOiBcIkFjdGlvbnMuRXhhbXBsZVNjb3BlIEFjdGlvbnMuUmVzdWx0czpjZTdmNTRjNy02MWM3LTRhYWUtODg3Zi0zMGRhNDc1ZjVmMWE6Y2EzOTUwODUtMDQwYS01MjZiLTJjZTgtYmRjODVmNjkyNzc0XCJcbiAgICAgKiB9XG4gICAgICovXG4gICAgY29uc3Qgc2NwUGFydHMgPSBkZWNvZGVkLnNjcC5zcGxpdCgnICcpO1xuICAgIGlmIChzY3BQYXJ0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhyb3cgSW52YWxpZEp3dEVycm9yO1xuICAgIH1cbiAgICAvKlxuICAgICAqIGV4YW1wbGUgc2NwUGFydHM6XG4gICAgICogW1wiQWN0aW9ucy5FeGFtcGxlU2NvcGVcIiwgXCJBY3Rpb25zLlJlc3VsdHM6Y2U3ZjU0YzctNjFjNy00YWFlLTg4N2YtMzBkYTQ3NWY1ZjFhOmNhMzk1MDg1LTA0MGEtNTI2Yi0yY2U4LWJkYzg1ZjY5Mjc3NFwiXVxuICAgICAqL1xuICAgIGZvciAoY29uc3Qgc2NvcGVzIG9mIHNjcFBhcnRzKSB7XG4gICAgICAgIGNvbnN0IHNjb3BlUGFydHMgPSBzY29wZXMuc3BsaXQoJzonKTtcbiAgICAgICAgaWYgKChzY29wZVBhcnRzID09PSBudWxsIHx8IHNjb3BlUGFydHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNjb3BlUGFydHNbMF0pICE9PSAnQWN0aW9ucy5SZXN1bHRzJykge1xuICAgICAgICAgICAgLy8gbm90IHRoZSBBY3Rpb25zLlJlc3VsdHMgc2NvcGVcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIC8qXG4gICAgICAgICAqIGV4YW1wbGUgc2NvcGVQYXJ0czpcbiAgICAgICAgICogW1wiQWN0aW9ucy5SZXN1bHRzXCIsIFwiY2U3ZjU0YzctNjFjNy00YWFlLTg4N2YtMzBkYTQ3NWY1ZjFhXCIsIFwiY2EzOTUwODUtMDQwYS01MjZiLTJjZTgtYmRjODVmNjkyNzc0XCJdXG4gICAgICAgICAqL1xuICAgICAgICBpZiAoc2NvcGVQYXJ0cy5sZW5ndGggIT09IDMpIHtcbiAgICAgICAgICAgIC8vIG1pc3NpbmcgZXhwZWN0ZWQgbnVtYmVyIG9mIGNsYWltc1xuICAgICAgICAgICAgdGhyb3cgSW52YWxpZEp3dEVycm9yO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlkcyA9IHtcbiAgICAgICAgICAgIHdvcmtmbG93UnVuQmFja2VuZElkOiBzY29wZVBhcnRzWzFdLFxuICAgICAgICAgICAgd29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQ6IHNjb3BlUGFydHNbMl1cbiAgICAgICAgfTtcbiAgICAgICAgY29yZS5kZWJ1ZyhgV29ya2Zsb3cgUnVuIEJhY2tlbmQgSUQ6ICR7aWRzLndvcmtmbG93UnVuQmFja2VuZElkfWApO1xuICAgICAgICBjb3JlLmRlYnVnKGBXb3JrZmxvdyBKb2IgUnVuIEJhY2tlbmQgSUQ6ICR7aWRzLndvcmtmbG93Sm9iUnVuQmFja2VuZElkfWApO1xuICAgICAgICByZXR1cm4gaWRzO1xuICAgIH1cbiAgICB0aHJvdyBJbnZhbGlkSnd0RXJyb3I7XG59XG5leHBvcnRzLmdldEJhY2tlbmRJZHNGcm9tVG9rZW4gPSBnZXRCYWNrZW5kSWRzRnJvbVRva2VuO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNyZWF0ZUVtcHR5UGlwZWxpbmUgPSBjcmVhdGVFbXB0eVBpcGVsaW5lO1xuY29uc3QgVmFsaWRQaGFzZU5hbWVzID0gbmV3IFNldChbXCJEZXNlcmlhbGl6ZVwiLCBcIlNlcmlhbGl6ZVwiLCBcIlJldHJ5XCIsIFwiU2lnblwiXSk7XG4vKipcbiAqIEEgcHJpdmF0ZSBpbXBsZW1lbnRhdGlvbiBvZiBQaXBlbGluZS5cbiAqIERvIG5vdCBleHBvcnQgdGhpcyBjbGFzcyBmcm9tIHRoZSBwYWNrYWdlLlxuICogQGludGVybmFsXG4gKi9cbmNsYXNzIEh0dHBQaXBlbGluZSB7XG4gICAgY29uc3RydWN0b3IocG9saWNpZXMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB0aGlzLl9wb2xpY2llcyA9IFtdO1xuICAgICAgICB0aGlzLl9wb2xpY2llcyA9IChfYSA9IHBvbGljaWVzID09PSBudWxsIHx8IHBvbGljaWVzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwb2xpY2llcy5zbGljZSgwKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogW107XG4gICAgICAgIHRoaXMuX29yZGVyZWRQb2xpY2llcyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgYWRkUG9saWN5KHBvbGljeSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGlmIChvcHRpb25zLnBoYXNlICYmIG9wdGlvbnMuYWZ0ZXJQaGFzZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUG9saWNpZXMgaW5zaWRlIGEgcGhhc2UgY2Fubm90IHNwZWNpZnkgYWZ0ZXJQaGFzZS5cIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMucGhhc2UgJiYgIVZhbGlkUGhhc2VOYW1lcy5oYXMob3B0aW9ucy5waGFzZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwaGFzZSBuYW1lOiAke29wdGlvbnMucGhhc2V9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuYWZ0ZXJQaGFzZSAmJiAhVmFsaWRQaGFzZU5hbWVzLmhhcyhvcHRpb25zLmFmdGVyUGhhc2UpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgYWZ0ZXJQaGFzZSBuYW1lOiAke29wdGlvbnMuYWZ0ZXJQaGFzZX1gKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9wb2xpY2llcy5wdXNoKHtcbiAgICAgICAgICAgIHBvbGljeSxcbiAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9vcmRlcmVkUG9saWNpZXMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJlbW92ZVBvbGljeShvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHJlbW92ZWRQb2xpY2llcyA9IFtdO1xuICAgICAgICB0aGlzLl9wb2xpY2llcyA9IHRoaXMuX3BvbGljaWVzLmZpbHRlcigocG9saWN5RGVzY3JpcHRvcikgPT4ge1xuICAgICAgICAgICAgaWYgKChvcHRpb25zLm5hbWUgJiYgcG9saWN5RGVzY3JpcHRvci5wb2xpY3kubmFtZSA9PT0gb3B0aW9ucy5uYW1lKSB8fFxuICAgICAgICAgICAgICAgIChvcHRpb25zLnBoYXNlICYmIHBvbGljeURlc2NyaXB0b3Iub3B0aW9ucy5waGFzZSA9PT0gb3B0aW9ucy5waGFzZSkpIHtcbiAgICAgICAgICAgICAgICByZW1vdmVkUG9saWNpZXMucHVzaChwb2xpY3lEZXNjcmlwdG9yLnBvbGljeSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9vcmRlcmVkUG9saWNpZXMgPSB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiByZW1vdmVkUG9saWNpZXM7XG4gICAgfVxuICAgIHNlbmRSZXF1ZXN0KGh0dHBDbGllbnQsIHJlcXVlc3QpIHtcbiAgICAgICAgY29uc3QgcG9saWNpZXMgPSB0aGlzLmdldE9yZGVyZWRQb2xpY2llcygpO1xuICAgICAgICBjb25zdCBwaXBlbGluZSA9IHBvbGljaWVzLnJlZHVjZVJpZ2h0KChuZXh0LCBwb2xpY3kpID0+IHtcbiAgICAgICAgICAgIHJldHVybiAocmVxKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBvbGljeS5zZW5kUmVxdWVzdChyZXEsIG5leHQpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSwgKHJlcSkgPT4gaHR0cENsaWVudC5zZW5kUmVxdWVzdChyZXEpKTtcbiAgICAgICAgcmV0dXJuIHBpcGVsaW5lKHJlcXVlc3QpO1xuICAgIH1cbiAgICBnZXRPcmRlcmVkUG9saWNpZXMoKSB7XG4gICAgICAgIGlmICghdGhpcy5fb3JkZXJlZFBvbGljaWVzKSB7XG4gICAgICAgICAgICB0aGlzLl9vcmRlcmVkUG9saWNpZXMgPSB0aGlzLm9yZGVyUG9saWNpZXMoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fb3JkZXJlZFBvbGljaWVzO1xuICAgIH1cbiAgICBjbG9uZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBIdHRwUGlwZWxpbmUodGhpcy5fcG9saWNpZXMpO1xuICAgIH1cbiAgICBzdGF0aWMgY3JlYXRlKCkge1xuICAgICAgICByZXR1cm4gbmV3IEh0dHBQaXBlbGluZSgpO1xuICAgIH1cbiAgICBvcmRlclBvbGljaWVzKCkge1xuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIGdvYWwgb2YgdGhpcyBtZXRob2QgaXMgdG8gcmVsaWFibHkgb3JkZXIgcGlwZWxpbmUgcG9saWNpZXNcbiAgICAgICAgICogYmFzZWQgb24gdGhlaXIgZGVjbGFyZWQgcmVxdWlyZW1lbnRzIHdoZW4gdGhleSB3ZXJlIGFkZGVkLlxuICAgICAgICAgKlxuICAgICAgICAgKiBPcmRlciBpcyBmaXJzdCBkZXRlcm1pbmVkIGJ5IHBoYXNlOlxuICAgICAgICAgKlxuICAgICAgICAgKiAxLiBTZXJpYWxpemUgUGhhc2VcbiAgICAgICAgICogMi4gUG9saWNpZXMgbm90IGluIGEgcGhhc2VcbiAgICAgICAgICogMy4gRGVzZXJpYWxpemUgUGhhc2VcbiAgICAgICAgICogNC4gUmV0cnkgUGhhc2VcbiAgICAgICAgICogNS4gU2lnbiBQaGFzZVxuICAgICAgICAgKlxuICAgICAgICAgKiBXaXRoaW4gZWFjaCBwaGFzZSwgcG9saWNpZXMgYXJlIGV4ZWN1dGVkIGluIHRoZSBvcmRlclxuICAgICAgICAgKiB0aGV5IHdlcmUgYWRkZWQgdW5sZXNzIHRoZXkgd2VyZSBzcGVjaWZpZWQgdG8gZXhlY3V0ZVxuICAgICAgICAgKiBiZWZvcmUvYWZ0ZXIgb3RoZXIgcG9saWNpZXMgb3IgYWZ0ZXIgYSBwYXJ0aWN1bGFyIHBoYXNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBUbyBkZXRlcm1pbmUgdGhlIGZpbmFsIG9yZGVyLCB3ZSB3aWxsIHdhbGsgdGhlIHBvbGljeSBsaXN0XG4gICAgICAgICAqIGluIHBoYXNlIG9yZGVyIG11bHRpcGxlIHRpbWVzIHVudGlsIGFsbCBkZXBlbmRlbmNpZXMgYXJlXG4gICAgICAgICAqIHNhdGlzZmllZC5cbiAgICAgICAgICpcbiAgICAgICAgICogYGFmdGVyUG9saWNpZXNgIGFyZSB0aGUgc2V0IG9mIHBvbGljaWVzIHRoYXQgbXVzdCBiZVxuICAgICAgICAgKiBleGVjdXRlZCBiZWZvcmUgYSBnaXZlbiBwb2xpY3kuIFRoaXMgcmVxdWlyZW1lbnQgaXNcbiAgICAgICAgICogY29uc2lkZXJlZCBzYXRpc2ZpZWQgd2hlbiBlYWNoIG9mIHRoZSBsaXN0ZWQgcG9saWNpZXNcbiAgICAgICAgICogaGF2ZSBiZWVuIHNjaGVkdWxlZC5cbiAgICAgICAgICpcbiAgICAgICAgICogYGJlZm9yZVBvbGljaWVzYCBhcmUgdGhlIHNldCBvZiBwb2xpY2llcyB0aGF0IG11c3QgYmVcbiAgICAgICAgICogZXhlY3V0ZWQgYWZ0ZXIgYSBnaXZlbiBwb2xpY3kuIFNpbmNlIHRoaXMgZGVwZW5kZW5jeVxuICAgICAgICAgKiBjYW4gYmUgZXhwcmVzc2VkIGJ5IGNvbnZlcnRpbmcgaXQgaW50byBhIGVxdWl2YWxlbnRcbiAgICAgICAgICogYGFmdGVyUG9saWNpZXNgIGRlY2xhcmF0aW9ucywgdGhleSBhcmUgbm9ybWFsaXplZFxuICAgICAgICAgKiBpbnRvIHRoYXQgZm9ybSBmb3Igc2ltcGxpY2l0eS5cbiAgICAgICAgICpcbiAgICAgICAgICogQW4gYGFmdGVyUGhhc2VgIGRlcGVuZGVuY3kgaXMgY29uc2lkZXJlZCBzYXRpc2ZpZWQgd2hlbiBhbGxcbiAgICAgICAgICogcG9saWNpZXMgaW4gdGhhdCBwaGFzZSBoYXZlIHNjaGVkdWxlZC5cbiAgICAgICAgICpcbiAgICAgICAgICovXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgICAvLyBUcmFjayBhbGwgcG9saWNpZXMgd2Uga25vdyBhYm91dC5cbiAgICAgICAgY29uc3QgcG9saWN5TWFwID0gbmV3IE1hcCgpO1xuICAgICAgICBmdW5jdGlvbiBjcmVhdGVQaGFzZShuYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgcG9saWNpZXM6IG5ldyBTZXQoKSxcbiAgICAgICAgICAgICAgICBoYXNSdW46IGZhbHNlLFxuICAgICAgICAgICAgICAgIGhhc0FmdGVyUG9saWNpZXM6IGZhbHNlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUcmFjayBwb2xpY2llcyBmb3IgZWFjaCBwaGFzZS5cbiAgICAgICAgY29uc3Qgc2VyaWFsaXplUGhhc2UgPSBjcmVhdGVQaGFzZShcIlNlcmlhbGl6ZVwiKTtcbiAgICAgICAgY29uc3Qgbm9QaGFzZSA9IGNyZWF0ZVBoYXNlKFwiTm9uZVwiKTtcbiAgICAgICAgY29uc3QgZGVzZXJpYWxpemVQaGFzZSA9IGNyZWF0ZVBoYXNlKFwiRGVzZXJpYWxpemVcIik7XG4gICAgICAgIGNvbnN0IHJldHJ5UGhhc2UgPSBjcmVhdGVQaGFzZShcIlJldHJ5XCIpO1xuICAgICAgICBjb25zdCBzaWduUGhhc2UgPSBjcmVhdGVQaGFzZShcIlNpZ25cIik7XG4gICAgICAgIC8vIGEgbGlzdCBvZiBwaGFzZXMgaW4gb3JkZXJcbiAgICAgICAgY29uc3Qgb3JkZXJlZFBoYXNlcyA9IFtzZXJpYWxpemVQaGFzZSwgbm9QaGFzZSwgZGVzZXJpYWxpemVQaGFzZSwgcmV0cnlQaGFzZSwgc2lnblBoYXNlXTtcbiAgICAgICAgLy8gU21hbGwgaGVscGVyIGZ1bmN0aW9uIHRvIG1hcCBwaGFzZSBuYW1lIHRvIGVhY2ggUGhhc2VcbiAgICAgICAgZnVuY3Rpb24gZ2V0UGhhc2UocGhhc2UpIHtcbiAgICAgICAgICAgIGlmIChwaGFzZSA9PT0gXCJSZXRyeVwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldHJ5UGhhc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChwaGFzZSA9PT0gXCJTZXJpYWxpemVcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemVQaGFzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHBoYXNlID09PSBcIkRlc2VyaWFsaXplXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGVzZXJpYWxpemVQaGFzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHBoYXNlID09PSBcIlNpZ25cIikge1xuICAgICAgICAgICAgICAgIHJldHVybiBzaWduUGhhc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbm9QaGFzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBGaXJzdCB3YWxrIGVhY2ggcG9saWN5IGFuZCBjcmVhdGUgYSBub2RlIHRvIHRyYWNrIG1ldGFkYXRhLlxuICAgICAgICBmb3IgKGNvbnN0IGRlc2NyaXB0b3Igb2YgdGhpcy5fcG9saWNpZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHBvbGljeSA9IGRlc2NyaXB0b3IucG9saWN5O1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGRlc2NyaXB0b3Iub3B0aW9ucztcbiAgICAgICAgICAgIGNvbnN0IHBvbGljeU5hbWUgPSBwb2xpY3kubmFtZTtcbiAgICAgICAgICAgIGlmIChwb2xpY3lNYXAuaGFzKHBvbGljeU5hbWUpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRHVwbGljYXRlIHBvbGljeSBuYW1lcyBub3QgYWxsb3dlZCBpbiBwaXBlbGluZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB7XG4gICAgICAgICAgICAgICAgcG9saWN5LFxuICAgICAgICAgICAgICAgIGRlcGVuZHNPbjogbmV3IFNldCgpLFxuICAgICAgICAgICAgICAgIGRlcGVuZGFudHM6IG5ldyBTZXQoKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5hZnRlclBoYXNlKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5hZnRlclBoYXNlID0gZ2V0UGhhc2Uob3B0aW9ucy5hZnRlclBoYXNlKTtcbiAgICAgICAgICAgICAgICBub2RlLmFmdGVyUGhhc2UuaGFzQWZ0ZXJQb2xpY2llcyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwb2xpY3lNYXAuc2V0KHBvbGljeU5hbWUsIG5vZGUpO1xuICAgICAgICAgICAgY29uc3QgcGhhc2UgPSBnZXRQaGFzZShvcHRpb25zLnBoYXNlKTtcbiAgICAgICAgICAgIHBoYXNlLnBvbGljaWVzLmFkZChub2RlKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBOb3cgdGhhdCBlYWNoIHBvbGljeSBoYXMgYSBub2RlLCBjb25uZWN0IGRlcGVuZGVuY3kgcmVmZXJlbmNlcy5cbiAgICAgICAgZm9yIChjb25zdCBkZXNjcmlwdG9yIG9mIHRoaXMuX3BvbGljaWVzKSB7XG4gICAgICAgICAgICBjb25zdCB7IHBvbGljeSwgb3B0aW9ucyB9ID0gZGVzY3JpcHRvcjtcbiAgICAgICAgICAgIGNvbnN0IHBvbGljeU5hbWUgPSBwb2xpY3kubmFtZTtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBwb2xpY3lNYXAuZ2V0KHBvbGljeU5hbWUpO1xuICAgICAgICAgICAgaWYgKCFub2RlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIG5vZGUgZm9yIHBvbGljeSAke3BvbGljeU5hbWV9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5hZnRlclBvbGljaWVzKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBhZnRlclBvbGljeU5hbWUgb2Ygb3B0aW9ucy5hZnRlclBvbGljaWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFmdGVyTm9kZSA9IHBvbGljeU1hcC5nZXQoYWZ0ZXJQb2xpY3lOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFmdGVyTm9kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gTGlua2luZyBpbiBib3RoIGRpcmVjdGlvbnMgaGVscHMgbGF0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdoZW4gd2Ugd2FudCB0byBub3RpZnkgZGVwZW5kYW50cy5cbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuZGVwZW5kc09uLmFkZChhZnRlck5vZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJOb2RlLmRlcGVuZGFudHMuYWRkKG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuYmVmb3JlUG9saWNpZXMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGJlZm9yZVBvbGljeU5hbWUgb2Ygb3B0aW9ucy5iZWZvcmVQb2xpY2llcykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBiZWZvcmVOb2RlID0gcG9saWN5TWFwLmdldChiZWZvcmVQb2xpY3lOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJlZm9yZU5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRvIGV4ZWN1dGUgYmVmb3JlIGFub3RoZXIgbm9kZSwgbWFrZSBpdFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVwZW5kIG9uIHRoZSBjdXJyZW50IG5vZGUuXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmVOb2RlLmRlcGVuZHNPbi5hZGQobm9kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLmRlcGVuZGFudHMuYWRkKGJlZm9yZU5vZGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHdhbGtQaGFzZShwaGFzZSkge1xuICAgICAgICAgICAgcGhhc2UuaGFzUnVuID0gdHJ1ZTtcbiAgICAgICAgICAgIC8vIFNldHMgaXRlcmF0ZSBpbiBpbnNlcnRpb24gb3JkZXJcbiAgICAgICAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBwaGFzZS5wb2xpY2llcykge1xuICAgICAgICAgICAgICAgIGlmIChub2RlLmFmdGVyUGhhc2UgJiYgKCFub2RlLmFmdGVyUGhhc2UuaGFzUnVuIHx8IG5vZGUuYWZ0ZXJQaGFzZS5wb2xpY2llcy5zaXplKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIG5vZGUgaXMgd2FpdGluZyBvbiBhIHBoYXNlIHRvIGNvbXBsZXRlLFxuICAgICAgICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIHNraXAgaXQgZm9yIG5vdy5cbiAgICAgICAgICAgICAgICAgICAgLy8gRXZlbiBpZiB0aGUgcGhhc2UgaXMgZW1wdHksIHdlIHNob3VsZCB3YWl0IGZvciBpdFxuICAgICAgICAgICAgICAgICAgICAvLyB0byBiZSB3YWxrZWQgdG8gYXZvaWQgcmUtb3JkZXJpbmcgcG9saWNpZXMuXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobm9kZS5kZXBlbmRzT24uc2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSdzIG5vdGhpbmcgZWxzZSB3ZSdyZSB3YWl0aW5nIGZvciwgd2UgY2FuXG4gICAgICAgICAgICAgICAgICAgIC8vIGFkZCB0aGlzIHBvbGljeSB0byB0aGUgcmVzdWx0IGxpc3QuXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5vZGUucG9saWN5KTtcbiAgICAgICAgICAgICAgICAgICAgLy8gTm90aWZ5IGFueXRoaW5nIHRoYXQgZGVwZW5kcyBvbiB0aGlzIHBvbGljeSB0aGF0XG4gICAgICAgICAgICAgICAgICAgIC8vIHRoZSBwb2xpY3kgaGFzIGJlZW4gc2NoZWR1bGVkLlxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGRlcGVuZGFudCBvZiBub2RlLmRlcGVuZGFudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZGFudC5kZXBlbmRzT24uZGVsZXRlKG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHBvbGljeU1hcC5kZWxldGUobm9kZS5wb2xpY3kubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIHBoYXNlLnBvbGljaWVzLmRlbGV0ZShub2RlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gd2Fsa1BoYXNlcygpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcGhhc2Ugb2Ygb3JkZXJlZFBoYXNlcykge1xuICAgICAgICAgICAgICAgIHdhbGtQaGFzZShwaGFzZSk7XG4gICAgICAgICAgICAgICAgLy8gaWYgdGhlIHBoYXNlIGlzbid0IGNvbXBsZXRlXG4gICAgICAgICAgICAgICAgaWYgKHBoYXNlLnBvbGljaWVzLnNpemUgPiAwICYmIHBoYXNlICE9PSBub1BoYXNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghbm9QaGFzZS5oYXNSdW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRyeSBydW5uaW5nIG5vUGhhc2UgdG8gc2VlIGlmIHRoYXQgdW5ibG9ja3MgdGhpcyBwaGFzZSBuZXh0IHRpY2suXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gaWYgYSBwaGFzZSB0aGF0IGhhcHBlbnMgYmVmb3JlIG5vUGhhc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlzIHdhaXRpbmcgb24gYSBub1BoYXNlIHBvbGljeSB0byBjb21wbGV0ZS5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdhbGtQaGFzZShub1BoYXNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCBwcm9jZWVkIHRvIHRoZSBuZXh0IHBoYXNlIHVudGlsIHRoaXMgcGhhc2UgZmluaXNoZXMuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHBoYXNlLmhhc0FmdGVyUG9saWNpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gUnVuIGFueSBwb2xpY2llcyB1bmJsb2NrZWQgYnkgdGhpcyBwaGFzZVxuICAgICAgICAgICAgICAgICAgICB3YWxrUGhhc2Uobm9QaGFzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIEl0ZXJhdGUgdW50aWwgd2UndmUgcHV0IGV2ZXJ5IG5vZGUgaW4gdGhlIHJlc3VsdCBsaXN0LlxuICAgICAgICBsZXQgaXRlcmF0aW9uID0gMDtcbiAgICAgICAgd2hpbGUgKHBvbGljeU1hcC5zaXplID4gMCkge1xuICAgICAgICAgICAgaXRlcmF0aW9uKys7XG4gICAgICAgICAgICBjb25zdCBpbml0aWFsUmVzdWx0TGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcbiAgICAgICAgICAgIC8vIEtlZXAgd2Fsa2luZyBlYWNoIHBoYXNlIGluIG9yZGVyIHVudGlsIHdlIGNhbiBvcmRlciBldmVyeSBub2RlLlxuICAgICAgICAgICAgd2Fsa1BoYXNlcygpO1xuICAgICAgICAgICAgLy8gVGhlIHJlc3VsdCBsaXN0ICpzaG91bGQqIGdldCBhdCBsZWFzdCBvbmUgbGFyZ2VyIGVhY2ggdGltZVxuICAgICAgICAgICAgLy8gYWZ0ZXIgdGhlIGZpcnN0IGZ1bGwgcGFzcy5cbiAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgd2UncmUgZ29pbmcgdG8gbG9vcCBmb3JldmVyLlxuICAgICAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPD0gaW5pdGlhbFJlc3VsdExlbmd0aCAmJiBpdGVyYXRpb24gPiAxKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IHNhdGlzZnkgcG9saWN5IGRlcGVuZGVuY2llcyBkdWUgdG8gcmVxdWlyZW1lbnRzIGN5Y2xlLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8qKlxuICogQ3JlYXRlcyBhIHRvdGFsbHkgZW1wdHkgcGlwZWxpbmUuXG4gKiBVc2VmdWwgZm9yIHRlc3Rpbmcgb3IgY3JlYXRpbmcgYSBjdXN0b20gb25lLlxuICovXG5mdW5jdGlvbiBjcmVhdGVFbXB0eVBpcGVsaW5lKCkge1xuICAgIHJldHVybiBIdHRwUGlwZWxpbmUuY3JlYXRlKCk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1waXBlbGluZS5qcy5tYXAiLAogICAgIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXHJcblxyXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcclxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxyXG5cclxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxyXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcclxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxyXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cclxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1JcclxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxyXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG4vKiBnbG9iYWwgZ2xvYmFsLCBkZWZpbmUsIFN5bWJvbCwgUmVmbGVjdCwgUHJvbWlzZSwgU3VwcHJlc3NlZEVycm9yLCBJdGVyYXRvciAqL1xyXG52YXIgX19leHRlbmRzO1xyXG52YXIgX19hc3NpZ247XHJcbnZhciBfX3Jlc3Q7XHJcbnZhciBfX2RlY29yYXRlO1xyXG52YXIgX19wYXJhbTtcclxudmFyIF9fZXNEZWNvcmF0ZTtcclxudmFyIF9fcnVuSW5pdGlhbGl6ZXJzO1xyXG52YXIgX19wcm9wS2V5O1xyXG52YXIgX19zZXRGdW5jdGlvbk5hbWU7XHJcbnZhciBfX21ldGFkYXRhO1xyXG52YXIgX19hd2FpdGVyO1xyXG52YXIgX19nZW5lcmF0b3I7XHJcbnZhciBfX2V4cG9ydFN0YXI7XHJcbnZhciBfX3ZhbHVlcztcclxudmFyIF9fcmVhZDtcclxudmFyIF9fc3ByZWFkO1xyXG52YXIgX19zcHJlYWRBcnJheXM7XHJcbnZhciBfX3NwcmVhZEFycmF5O1xyXG52YXIgX19hd2FpdDtcclxudmFyIF9fYXN5bmNHZW5lcmF0b3I7XHJcbnZhciBfX2FzeW5jRGVsZWdhdG9yO1xyXG52YXIgX19hc3luY1ZhbHVlcztcclxudmFyIF9fbWFrZVRlbXBsYXRlT2JqZWN0O1xyXG52YXIgX19pbXBvcnRTdGFyO1xyXG52YXIgX19pbXBvcnREZWZhdWx0O1xyXG52YXIgX19jbGFzc1ByaXZhdGVGaWVsZEdldDtcclxudmFyIF9fY2xhc3NQcml2YXRlRmllbGRTZXQ7XHJcbnZhciBfX2NsYXNzUHJpdmF0ZUZpZWxkSW47XHJcbnZhciBfX2NyZWF0ZUJpbmRpbmc7XHJcbnZhciBfX2FkZERpc3Bvc2FibGVSZXNvdXJjZTtcclxudmFyIF9fZGlzcG9zZVJlc291cmNlcztcclxudmFyIF9fcmV3cml0ZVJlbGF0aXZlSW1wb3J0RXh0ZW5zaW9uO1xyXG4oZnVuY3Rpb24gKGZhY3RvcnkpIHtcclxuICAgIHZhciByb290ID0gdHlwZW9mIGdsb2JhbCA9PT0gXCJvYmplY3RcIiA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmID09PSBcIm9iamVjdFwiID8gc2VsZiA6IHR5cGVvZiB0aGlzID09PSBcIm9iamVjdFwiID8gdGhpcyA6IHt9O1xyXG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XHJcbiAgICAgICAgZGVmaW5lKFwidHNsaWJcIiwgW1wiZXhwb3J0c1wiXSwgZnVuY3Rpb24gKGV4cG9ydHMpIHsgZmFjdG9yeShjcmVhdGVFeHBvcnRlcihyb290LCBjcmVhdGVFeHBvcnRlcihleHBvcnRzKSkpOyB9KTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZS5leHBvcnRzID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgZmFjdG9yeShjcmVhdGVFeHBvcnRlcihyb290LCBjcmVhdGVFeHBvcnRlcihtb2R1bGUuZXhwb3J0cykpKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGZhY3RvcnkoY3JlYXRlRXhwb3J0ZXIocm9vdCkpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gY3JlYXRlRXhwb3J0ZXIoZXhwb3J0cywgcHJldmlvdXMpIHtcclxuICAgICAgICBpZiAoZXhwb3J0cyAhPT0gcm9vdCkge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIE9iamVjdC5jcmVhdGUgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGlkLCB2KSB7IHJldHVybiBleHBvcnRzW2lkXSA9IHByZXZpb3VzID8gcHJldmlvdXMoaWQsIHYpIDogdjsgfTtcclxuICAgIH1cclxufSlcclxuKGZ1bmN0aW9uIChleHBvcnRlcikge1xyXG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcclxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XHJcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcclxuXHJcbiAgICBfX2V4dGVuZHMgPSBmdW5jdGlvbiAoZCwgYikge1xyXG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcclxuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcclxuICAgIH07XHJcblxyXG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0KSB7XHJcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XHJcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgfTtcclxuXHJcbiAgICBfX3Jlc3QgPSBmdW5jdGlvbiAocywgZSkge1xyXG4gICAgICAgIHZhciB0ID0ge307XHJcbiAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXHJcbiAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxyXG4gICAgICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHQ7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fZGVjb3JhdGUgPSBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgICAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xyXG4gICAgICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICAgICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgICAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX3BhcmFtID0gZnVuY3Rpb24gKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHsgZGVjb3JhdG9yKHRhcmdldCwga2V5LCBwYXJhbUluZGV4KTsgfVxyXG4gICAgfTtcclxuXHJcbiAgICBfX2VzRGVjb3JhdGUgPSBmdW5jdGlvbiAoY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHtcclxuICAgICAgICBmdW5jdGlvbiBhY2NlcHQoZikgeyBpZiAoZiAhPT0gdm9pZCAwICYmIHR5cGVvZiBmICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGdW5jdGlvbiBleHBlY3RlZFwiKTsgcmV0dXJuIGY7IH1cclxuICAgICAgICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkgPSBraW5kID09PSBcImdldHRlclwiID8gXCJnZXRcIiA6IGtpbmQgPT09IFwic2V0dGVyXCIgPyBcInNldFwiIDogXCJ2YWx1ZVwiO1xyXG4gICAgICAgIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bXCJzdGF0aWNcIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsO1xyXG4gICAgICAgIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pO1xyXG4gICAgICAgIHZhciBfLCBkb25lID0gZmFsc2U7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICAgICAgdmFyIGNvbnRleHQgPSB7fTtcclxuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBjb250ZXh0SW4pIGNvbnRleHRbcF0gPSBwID09PSBcImFjY2Vzc1wiID8ge30gOiBjb250ZXh0SW5bcF07XHJcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dC5hY2Nlc3NbcF0gPSBjb250ZXh0SW4uYWNjZXNzW3BdO1xyXG4gICAgICAgICAgICBjb250ZXh0LmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24gKGYpIHsgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWRcIik7IGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGYgfHwgbnVsbCkpOyB9O1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaV0pKGtpbmQgPT09IFwiYWNjZXNzb3JcIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXldLCBjb250ZXh0KTtcclxuICAgICAgICAgICAgaWYgKGtpbmQgPT09IFwiYWNjZXNzb3JcIikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gXCJvYmplY3RcIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBleHBlY3RlZFwiKTtcclxuICAgICAgICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF87XHJcbiAgICAgICAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfO1xyXG4gICAgICAgICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChfID0gYWNjZXB0KHJlc3VsdCkpIHtcclxuICAgICAgICAgICAgICAgIGlmIChraW5kID09PSBcImZpZWxkXCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF8pO1xyXG4gICAgICAgICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleV0gPSBfO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTtcclxuICAgICAgICBkb25lID0gdHJ1ZTtcclxuICAgIH07XHJcblxyXG4gICAgX19ydW5Jbml0aWFsaXplcnMgPSBmdW5jdGlvbiAodGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZSkge1xyXG4gICAgICAgIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnLCB2YWx1ZSkgOiBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUgOiB2b2lkIDA7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fcHJvcEtleSA9IGZ1bmN0aW9uICh4KSB7XHJcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB4ID09PSBcInN5bWJvbFwiID8geCA6IFwiXCIuY29uY2F0KHgpO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX3NldEZ1bmN0aW9uTmFtZSA9IGZ1bmN0aW9uIChmLCBuYW1lLCBwcmVmaXgpIHtcclxuICAgICAgICBpZiAodHlwZW9mIG5hbWUgPT09IFwic3ltYm9sXCIpIG5hbWUgPSBuYW1lLmRlc2NyaXB0aW9uID8gXCJbXCIuY29uY2F0KG5hbWUuZGVzY3JpcHRpb24sIFwiXVwiKSA6IFwiXCI7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLCBcIm5hbWVcIiwgeyBjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiBwcmVmaXggPyBcIlwiLmNvbmNhdChwcmVmaXgsIFwiIFwiLCBuYW1lKSA6IG5hbWUgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fbWV0YWRhdGEgPSBmdW5jdGlvbiAobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2F3YWl0ZXIgPSBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XHJcbiAgICAgICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XHJcbiAgICAgICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcblxyXG4gICAgX19nZW5lcmF0b3IgPSBmdW5jdGlvbiAodGhpc0FyZywgYm9keSkge1xyXG4gICAgICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGcgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgSXRlcmF0b3IgPT09IFwiZnVuY3Rpb25cIiA/IEl0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpO1xyXG4gICAgICAgIHJldHVybiBnLm5leHQgPSB2ZXJiKDApLCBnW1widGhyb3dcIl0gPSB2ZXJiKDEpLCBnW1wicmV0dXJuXCJdID0gdmVyYigyKSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xyXG4gICAgICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcclxuICAgICAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xyXG4gICAgICAgICAgICB3aGlsZSAoZyAmJiAoZyA9IDAsIG9wWzBdICYmIChfID0gMCkpLCBfKSB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xyXG4gICAgICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cclxuICAgICAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBfX2V4cG9ydFN0YXIgPSBmdW5jdGlvbihtLCBvKSB7XHJcbiAgICAgICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBwKSkgX19jcmVhdGVCaW5kaW5nKG8sIG0sIHApO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2NyZWF0ZUJpbmRpbmcgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XHJcbiAgICAgICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgICAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XHJcbiAgICAgICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcclxuICAgICAgICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcclxuICAgIH0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XHJcbiAgICAgICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgICAgICBvW2syXSA9IG1ba107XHJcbiAgICB9KTtcclxuXHJcbiAgICBfX3ZhbHVlcyA9IGZ1bmN0aW9uIChvKSB7XHJcbiAgICAgICAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcclxuICAgICAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcclxuICAgICAgICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XHJcbiAgICAgICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIH07XHJcblxyXG4gICAgX19yZWFkID0gZnVuY3Rpb24gKG8sIG4pIHtcclxuICAgICAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XHJcbiAgICAgICAgaWYgKCFtKSByZXR1cm4gbztcclxuICAgICAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XHJcbiAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGFyO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKiogQGRlcHJlY2F0ZWQgKi9cclxuICAgIF9fc3ByZWFkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICBhciA9IGFyLmNvbmNhdChfX3JlYWQoYXJndW1lbnRzW2ldKSk7XHJcbiAgICAgICAgcmV0dXJuIGFyO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKiogQGRlcHJlY2F0ZWQgKi9cclxuICAgIF9fc3ByZWFkQXJyYXlzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGZvciAodmFyIHMgPSAwLCBpID0gMCwgaWwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWw7IGkrKykgcyArPSBhcmd1bWVudHNbaV0ubGVuZ3RoO1xyXG4gICAgICAgIGZvciAodmFyIHIgPSBBcnJheShzKSwgayA9IDAsIGkgPSAwOyBpIDwgaWw7IGkrKylcclxuICAgICAgICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXHJcbiAgICAgICAgICAgICAgICByW2tdID0gYVtqXTtcclxuICAgICAgICByZXR1cm4gcjtcclxuICAgIH07XHJcblxyXG4gICAgX19zcHJlYWRBcnJheSA9IGZ1bmN0aW9uICh0bywgZnJvbSwgcGFjaykge1xyXG4gICAgICAgIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcclxuICAgICAgICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XHJcbiAgICAgICAgICAgICAgICBhcltpXSA9IGZyb21baV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fYXdhaXQgPSBmdW5jdGlvbiAodikge1xyXG4gICAgICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2FzeW5jR2VuZXJhdG9yID0gZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xyXG4gICAgICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICAgICAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcclxuICAgICAgICByZXR1cm4gaSA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBBc3luY0l0ZXJhdG9yID09PSBcImZ1bmN0aW9uXCIgPyBBc3luY0l0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpLCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIsIGF3YWl0UmV0dXJuKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgICAgIGZ1bmN0aW9uIGF3YWl0UmV0dXJuKGYpIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBQcm9taXNlLnJlc29sdmUodikudGhlbihmLCByZWplY3QpOyB9OyB9XHJcbiAgICAgICAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlmIChnW25dKSB7IGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IGlmIChmKSBpW25dID0gZihpW25dKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgfVxyXG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cclxuICAgICAgICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XHJcbiAgICAgICAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxyXG4gICAgfTtcclxuXHJcbiAgICBfX2FzeW5jRGVsZWdhdG9yID0gZnVuY3Rpb24gKG8pIHtcclxuICAgICAgICB2YXIgaSwgcDtcclxuICAgICAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIsIGZ1bmN0aW9uIChlKSB7IHRocm93IGU7IH0pLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IGZhbHNlIH0gOiBmID8gZih2KSA6IHY7IH0gOiBmOyB9XHJcbiAgICB9O1xyXG5cclxuICAgIF9fYXN5bmNWYWx1ZXMgPSBmdW5jdGlvbiAobykge1xyXG4gICAgICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICAgICAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcclxuICAgICAgICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XHJcbiAgICAgICAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxyXG4gICAgICAgIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cclxuICAgIH07XHJcblxyXG4gICAgX19tYWtlVGVtcGxhdGVPYmplY3QgPSBmdW5jdGlvbiAoY29va2VkLCByYXcpIHtcclxuICAgICAgICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb29rZWQsIFwicmF3XCIsIHsgdmFsdWU6IHJhdyB9KTsgfSBlbHNlIHsgY29va2VkLnJhdyA9IHJhdzsgfVxyXG4gICAgICAgIHJldHVybiBjb29rZWQ7XHJcbiAgICB9O1xyXG5cclxuICAgIHZhciBfX3NldE1vZHVsZURlZmF1bHQgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XHJcbiAgICB9KSA6IGZ1bmN0aW9uKG8sIHYpIHtcclxuICAgICAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XHJcbiAgICB9O1xyXG5cclxuICAgIF9faW1wb3J0U3RhciA9IGZ1bmN0aW9uIChtb2QpIHtcclxuICAgICAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xyXG4gICAgICAgIHZhciByZXN1bHQgPSB7fTtcclxuICAgICAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XHJcbiAgICAgICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2ltcG9ydERlZmF1bHQgPSBmdW5jdGlvbiAobW9kKSB7XHJcbiAgICAgICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XHJcbiAgICB9O1xyXG5cclxuICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQgPSBmdW5jdGlvbiAocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XHJcbiAgICAgICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO1xyXG4gICAgICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xyXG4gICAgICAgIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQgPSBmdW5jdGlvbiAocmVjZWl2ZXIsIHN0YXRlLCB2YWx1ZSwga2luZCwgZikge1xyXG4gICAgICAgIGlmIChraW5kID09PSBcIm1cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZVwiKTtcclxuICAgICAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXJcIik7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcclxuICAgICAgICByZXR1cm4gKGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyLCB2YWx1ZSkgOiBmID8gZi52YWx1ZSA9IHZhbHVlIDogc3RhdGUuc2V0KHJlY2VpdmVyLCB2YWx1ZSkpLCB2YWx1ZTtcclxuICAgIH07XHJcblxyXG4gICAgX19jbGFzc1ByaXZhdGVGaWVsZEluID0gZnVuY3Rpb24gKHN0YXRlLCByZWNlaXZlcikge1xyXG4gICAgICAgIGlmIChyZWNlaXZlciA9PT0gbnVsbCB8fCAodHlwZW9mIHJlY2VpdmVyICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiByZWNlaXZlciAhPT0gXCJmdW5jdGlvblwiKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB1c2UgJ2luJyBvcGVyYXRvciBvbiBub24tb2JqZWN0XCIpO1xyXG4gICAgICAgIHJldHVybiB0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyID09PSBzdGF0ZSA6IHN0YXRlLmhhcyhyZWNlaXZlcik7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fYWRkRGlzcG9zYWJsZVJlc291cmNlID0gZnVuY3Rpb24gKGVudiwgdmFsdWUsIGFzeW5jKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB2b2lkIDApIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBleHBlY3RlZC5cIik7XHJcbiAgICAgICAgICAgIHZhciBkaXNwb3NlLCBpbm5lcjtcclxuICAgICAgICAgICAgaWYgKGFzeW5jKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIVN5bWJvbC5hc3luY0Rpc3Bvc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNEaXNwb3NlIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgICAgICAgICAgICAgIGRpc3Bvc2UgPSB2YWx1ZVtTeW1ib2wuYXN5bmNEaXNwb3NlXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZGlzcG9zZSA9PT0gdm9pZCAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIVN5bWJvbC5kaXNwb3NlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmRpc3Bvc2UgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgICAgICAgICAgICAgZGlzcG9zZSA9IHZhbHVlW1N5bWJvbC5kaXNwb3NlXTtcclxuICAgICAgICAgICAgICAgIGlmIChhc3luYykgaW5uZXIgPSBkaXNwb3NlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZGlzcG9zZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiT2JqZWN0IG5vdCBkaXNwb3NhYmxlLlwiKTtcclxuICAgICAgICAgICAgaWYgKGlubmVyKSBkaXNwb3NlID0gZnVuY3Rpb24oKSB7IHRyeSB7IGlubmVyLmNhbGwodGhpcyk7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIFByb21pc2UucmVqZWN0KGUpOyB9IH07XHJcbiAgICAgICAgICAgIGVudi5zdGFjay5wdXNoKHsgdmFsdWU6IHZhbHVlLCBkaXNwb3NlOiBkaXNwb3NlLCBhc3luYzogYXN5bmMgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGFzeW5jKSB7XHJcbiAgICAgICAgICAgIGVudi5zdGFjay5wdXNoKHsgYXN5bmM6IHRydWUgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH07XHJcblxyXG4gICAgdmFyIF9TdXBwcmVzc2VkRXJyb3IgPSB0eXBlb2YgU3VwcHJlc3NlZEVycm9yID09PSBcImZ1bmN0aW9uXCIgPyBTdXBwcmVzc2VkRXJyb3IgOiBmdW5jdGlvbiAoZXJyb3IsIHN1cHByZXNzZWQsIG1lc3NhZ2UpIHtcclxuICAgICAgICB2YXIgZSA9IG5ldyBFcnJvcihtZXNzYWdlKTtcclxuICAgICAgICByZXR1cm4gZS5uYW1lID0gXCJTdXBwcmVzc2VkRXJyb3JcIiwgZS5lcnJvciA9IGVycm9yLCBlLnN1cHByZXNzZWQgPSBzdXBwcmVzc2VkLCBlO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2Rpc3Bvc2VSZXNvdXJjZXMgPSBmdW5jdGlvbiAoZW52KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZmFpbChlKSB7XHJcbiAgICAgICAgICAgIGVudi5lcnJvciA9IGVudi5oYXNFcnJvciA/IG5ldyBfU3VwcHJlc3NlZEVycm9yKGUsIGVudi5lcnJvciwgXCJBbiBlcnJvciB3YXMgc3VwcHJlc3NlZCBkdXJpbmcgZGlzcG9zYWwuXCIpIDogZTtcclxuICAgICAgICAgICAgZW52Lmhhc0Vycm9yID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHIsIHMgPSAwO1xyXG4gICAgICAgIGZ1bmN0aW9uIG5leHQoKSB7XHJcbiAgICAgICAgICAgIHdoaWxlIChyID0gZW52LnN0YWNrLnBvcCgpKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghci5hc3luYyAmJiBzID09PSAxKSByZXR1cm4gcyA9IDAsIGVudi5zdGFjay5wdXNoKHIpLCBQcm9taXNlLnJlc29sdmUoKS50aGVuKG5leHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyLmRpc3Bvc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHIuZGlzcG9zZS5jYWxsKHIudmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoci5hc3luYykgcmV0dXJuIHMgfD0gMiwgUHJvbWlzZS5yZXNvbHZlKHJlc3VsdCkudGhlbihuZXh0LCBmdW5jdGlvbihlKSB7IGZhaWwoZSk7IHJldHVybiBuZXh0KCk7IH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHMgfD0gMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmFpbChlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocyA9PT0gMSkgcmV0dXJuIGVudi5oYXNFcnJvciA/IFByb21pc2UucmVqZWN0KGVudi5lcnJvcikgOiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgICAgICAgICAgaWYgKGVudi5oYXNFcnJvcikgdGhyb3cgZW52LmVycm9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV4dCgpO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX3Jld3JpdGVSZWxhdGl2ZUltcG9ydEV4dGVuc2lvbiA9IGZ1bmN0aW9uIChwYXRoLCBwcmVzZXJ2ZUpzeCkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgcGF0aCA9PT0gXCJzdHJpbmdcIiAmJiAvXlxcLlxcLj9cXC8vLnRlc3QocGF0aCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHBhdGgucmVwbGFjZSgvXFwuKHRzeCkkfCgoPzpcXC5kKT8pKCg/OlxcLlteLi9dKz8pPylcXC4oW2NtXT8pdHMkL2ksIGZ1bmN0aW9uIChtLCB0c3gsIGQsIGV4dCwgY20pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0c3ggPyBwcmVzZXJ2ZUpzeCA/IFwiLmpzeFwiIDogXCIuanNcIiA6IGQgJiYgKCFleHQgfHwgIWNtKSA/IG0gOiAoZCArIGV4dCArIFwiLlwiICsgY20udG9Mb3dlckNhc2UoKSArIFwianNcIik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcGF0aDtcclxuICAgIH07XHJcblxyXG4gICAgZXhwb3J0ZXIoXCJfX2V4dGVuZHNcIiwgX19leHRlbmRzKTtcclxuICAgIGV4cG9ydGVyKFwiX19hc3NpZ25cIiwgX19hc3NpZ24pO1xyXG4gICAgZXhwb3J0ZXIoXCJfX3Jlc3RcIiwgX19yZXN0KTtcclxuICAgIGV4cG9ydGVyKFwiX19kZWNvcmF0ZVwiLCBfX2RlY29yYXRlKTtcclxuICAgIGV4cG9ydGVyKFwiX19wYXJhbVwiLCBfX3BhcmFtKTtcclxuICAgIGV4cG9ydGVyKFwiX19lc0RlY29yYXRlXCIsIF9fZXNEZWNvcmF0ZSk7XHJcbiAgICBleHBvcnRlcihcIl9fcnVuSW5pdGlhbGl6ZXJzXCIsIF9fcnVuSW5pdGlhbGl6ZXJzKTtcclxuICAgIGV4cG9ydGVyKFwiX19wcm9wS2V5XCIsIF9fcHJvcEtleSk7XHJcbiAgICBleHBvcnRlcihcIl9fc2V0RnVuY3Rpb25OYW1lXCIsIF9fc2V0RnVuY3Rpb25OYW1lKTtcclxuICAgIGV4cG9ydGVyKFwiX19tZXRhZGF0YVwiLCBfX21ldGFkYXRhKTtcclxuICAgIGV4cG9ydGVyKFwiX19hd2FpdGVyXCIsIF9fYXdhaXRlcik7XHJcbiAgICBleHBvcnRlcihcIl9fZ2VuZXJhdG9yXCIsIF9fZ2VuZXJhdG9yKTtcclxuICAgIGV4cG9ydGVyKFwiX19leHBvcnRTdGFyXCIsIF9fZXhwb3J0U3Rhcik7XHJcbiAgICBleHBvcnRlcihcIl9fY3JlYXRlQmluZGluZ1wiLCBfX2NyZWF0ZUJpbmRpbmcpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX3ZhbHVlc1wiLCBfX3ZhbHVlcyk7XHJcbiAgICBleHBvcnRlcihcIl9fcmVhZFwiLCBfX3JlYWQpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX3NwcmVhZFwiLCBfX3NwcmVhZCk7XHJcbiAgICBleHBvcnRlcihcIl9fc3ByZWFkQXJyYXlzXCIsIF9fc3ByZWFkQXJyYXlzKTtcclxuICAgIGV4cG9ydGVyKFwiX19zcHJlYWRBcnJheVwiLCBfX3NwcmVhZEFycmF5KTtcclxuICAgIGV4cG9ydGVyKFwiX19hd2FpdFwiLCBfX2F3YWl0KTtcclxuICAgIGV4cG9ydGVyKFwiX19hc3luY0dlbmVyYXRvclwiLCBfX2FzeW5jR2VuZXJhdG9yKTtcclxuICAgIGV4cG9ydGVyKFwiX19hc3luY0RlbGVnYXRvclwiLCBfX2FzeW5jRGVsZWdhdG9yKTtcclxuICAgIGV4cG9ydGVyKFwiX19hc3luY1ZhbHVlc1wiLCBfX2FzeW5jVmFsdWVzKTtcclxuICAgIGV4cG9ydGVyKFwiX19tYWtlVGVtcGxhdGVPYmplY3RcIiwgX19tYWtlVGVtcGxhdGVPYmplY3QpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2ltcG9ydFN0YXJcIiwgX19pbXBvcnRTdGFyKTtcclxuICAgIGV4cG9ydGVyKFwiX19pbXBvcnREZWZhdWx0XCIsIF9faW1wb3J0RGVmYXVsdCk7XHJcbiAgICBleHBvcnRlcihcIl9fY2xhc3NQcml2YXRlRmllbGRHZXRcIiwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCk7XHJcbiAgICBleHBvcnRlcihcIl9fY2xhc3NQcml2YXRlRmllbGRTZXRcIiwgX19jbGFzc1ByaXZhdGVGaWVsZFNldCk7XHJcbiAgICBleHBvcnRlcihcIl9fY2xhc3NQcml2YXRlRmllbGRJblwiLCBfX2NsYXNzUHJpdmF0ZUZpZWxkSW4pO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2FkZERpc3Bvc2FibGVSZXNvdXJjZVwiLCBfX2FkZERpc3Bvc2FibGVSZXNvdXJjZSk7XHJcbiAgICBleHBvcnRlcihcIl9fZGlzcG9zZVJlc291cmNlc1wiLCBfX2Rpc3Bvc2VSZXNvdXJjZXMpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX3Jld3JpdGVSZWxhdGl2ZUltcG9ydEV4dGVuc2lvblwiLCBfX3Jld3JpdGVSZWxhdGl2ZUltcG9ydEV4dGVuc2lvbik7XHJcbn0pO1xyXG5cclxuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XHJcbiAgICBfX2V4dGVuZHMsXHJcbiAgICBfX2Fzc2lnbixcclxuICAgIF9fcmVzdCxcclxuICAgIF9fZGVjb3JhdGUsXHJcbiAgICBfX3BhcmFtLFxyXG4gICAgX19lc0RlY29yYXRlLFxyXG4gICAgX19ydW5Jbml0aWFsaXplcnMsXHJcbiAgICBfX3Byb3BLZXksXHJcbiAgICBfX3NldEZ1bmN0aW9uTmFtZSxcclxuICAgIF9fbWV0YWRhdGEsXHJcbiAgICBfX2F3YWl0ZXIsXHJcbiAgICBfX2dlbmVyYXRvcixcclxuICAgIF9fZXhwb3J0U3RhcixcclxuICAgIF9fY3JlYXRlQmluZGluZyxcclxuICAgIF9fdmFsdWVzLFxyXG4gICAgX19yZWFkLFxyXG4gICAgX19zcHJlYWQsXHJcbiAgICBfX3NwcmVhZEFycmF5cyxcclxuICAgIF9fc3ByZWFkQXJyYXksXHJcbiAgICBfX2F3YWl0LFxyXG4gICAgX19hc3luY0dlbmVyYXRvcixcclxuICAgIF9fYXN5bmNEZWxlZ2F0b3IsXHJcbiAgICBfX2FzeW5jVmFsdWVzLFxyXG4gICAgX19tYWtlVGVtcGxhdGVPYmplY3QsXHJcbiAgICBfX2ltcG9ydFN0YXIsXHJcbiAgICBfX2ltcG9ydERlZmF1bHQsXHJcbiAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0LFxyXG4gICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCxcclxuICAgIF9fY2xhc3NQcml2YXRlRmllbGRJbixcclxuICAgIF9fYWRkRGlzcG9zYWJsZVJlc291cmNlLFxyXG4gICAgX19kaXNwb3NlUmVzb3VyY2VzLFxyXG4gICAgX19yZXdyaXRlUmVsYXRpdmVJbXBvcnRFeHRlbnNpb24sXHJcbn0pO1xyXG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmxvZyA9IGxvZztcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG5jb25zdCBub2RlX29zXzEgPSByZXF1aXJlKFwibm9kZTpvc1wiKTtcbmNvbnN0IG5vZGVfdXRpbF8xID0gdHNsaWJfMS5fX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIm5vZGU6dXRpbFwiKSk7XG5jb25zdCBwcm9jZXNzID0gdHNsaWJfMS5fX2ltcG9ydFN0YXIocmVxdWlyZShcIm5vZGU6cHJvY2Vzc1wiKSk7XG5mdW5jdGlvbiBsb2cobWVzc2FnZSwgLi4uYXJncykge1xuICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKGAke25vZGVfdXRpbF8xLmRlZmF1bHQuZm9ybWF0KG1lc3NhZ2UsIC4uLmFyZ3MpfSR7bm9kZV9vc18xLkVPTH1gKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxvZy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBsb2dfanNfMSA9IHJlcXVpcmUoXCIuL2xvZy5qc1wiKTtcbmNvbnN0IGRlYnVnRW52VmFyaWFibGUgPSAodHlwZW9mIHByb2Nlc3MgIT09IFwidW5kZWZpbmVkXCIgJiYgcHJvY2Vzcy5lbnYgJiYgcHJvY2Vzcy5lbnYuREVCVUcpIHx8IHVuZGVmaW5lZDtcbmxldCBlbmFibGVkU3RyaW5nO1xubGV0IGVuYWJsZWROYW1lc3BhY2VzID0gW107XG5sZXQgc2tpcHBlZE5hbWVzcGFjZXMgPSBbXTtcbmNvbnN0IGRlYnVnZ2VycyA9IFtdO1xuaWYgKGRlYnVnRW52VmFyaWFibGUpIHtcbiAgICBlbmFibGUoZGVidWdFbnZWYXJpYWJsZSk7XG59XG5jb25zdCBkZWJ1Z09iaiA9IE9iamVjdC5hc3NpZ24oKG5hbWVzcGFjZSkgPT4ge1xuICAgIHJldHVybiBjcmVhdGVEZWJ1Z2dlcihuYW1lc3BhY2UpO1xufSwge1xuICAgIGVuYWJsZSxcbiAgICBlbmFibGVkLFxuICAgIGRpc2FibGUsXG4gICAgbG9nOiBsb2dfanNfMS5sb2csXG59KTtcbmZ1bmN0aW9uIGVuYWJsZShuYW1lc3BhY2VzKSB7XG4gICAgZW5hYmxlZFN0cmluZyA9IG5hbWVzcGFjZXM7XG4gICAgZW5hYmxlZE5hbWVzcGFjZXMgPSBbXTtcbiAgICBza2lwcGVkTmFtZXNwYWNlcyA9IFtdO1xuICAgIGNvbnN0IHdpbGRjYXJkID0gL1xcKi9nO1xuICAgIGNvbnN0IG5hbWVzcGFjZUxpc3QgPSBuYW1lc3BhY2VzLnNwbGl0KFwiLFwiKS5tYXAoKG5zKSA9PiBucy50cmltKCkucmVwbGFjZSh3aWxkY2FyZCwgXCIuKj9cIikpO1xuICAgIGZvciAoY29uc3QgbnMgb2YgbmFtZXNwYWNlTGlzdCkge1xuICAgICAgICBpZiAobnMuc3RhcnRzV2l0aChcIi1cIikpIHtcbiAgICAgICAgICAgIHNraXBwZWROYW1lc3BhY2VzLnB1c2gobmV3IFJlZ0V4cChgXiR7bnMuc3Vic3RyKDEpfSRgKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBlbmFibGVkTmFtZXNwYWNlcy5wdXNoKG5ldyBSZWdFeHAoYF4ke25zfSRgKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBpbnN0YW5jZSBvZiBkZWJ1Z2dlcnMpIHtcbiAgICAgICAgaW5zdGFuY2UuZW5hYmxlZCA9IGVuYWJsZWQoaW5zdGFuY2UubmFtZXNwYWNlKTtcbiAgICB9XG59XG5mdW5jdGlvbiBlbmFibGVkKG5hbWVzcGFjZSkge1xuICAgIGlmIChuYW1lc3BhY2UuZW5kc1dpdGgoXCIqXCIpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHNraXBwZWQgb2Ygc2tpcHBlZE5hbWVzcGFjZXMpIHtcbiAgICAgICAgaWYgKHNraXBwZWQudGVzdChuYW1lc3BhY2UpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBlbmFibGVkTmFtZXNwYWNlIG9mIGVuYWJsZWROYW1lc3BhY2VzKSB7XG4gICAgICAgIGlmIChlbmFibGVkTmFtZXNwYWNlLnRlc3QobmFtZXNwYWNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gZGlzYWJsZSgpIHtcbiAgICBjb25zdCByZXN1bHQgPSBlbmFibGVkU3RyaW5nIHx8IFwiXCI7XG4gICAgZW5hYmxlKFwiXCIpO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBjcmVhdGVEZWJ1Z2dlcihuYW1lc3BhY2UpIHtcbiAgICBjb25zdCBuZXdEZWJ1Z2dlciA9IE9iamVjdC5hc3NpZ24oZGVidWcsIHtcbiAgICAgICAgZW5hYmxlZDogZW5hYmxlZChuYW1lc3BhY2UpLFxuICAgICAgICBkZXN0cm95LFxuICAgICAgICBsb2c6IGRlYnVnT2JqLmxvZyxcbiAgICAgICAgbmFtZXNwYWNlLFxuICAgICAgICBleHRlbmQsXG4gICAgfSk7XG4gICAgZnVuY3Rpb24gZGVidWcoLi4uYXJncykge1xuICAgICAgICBpZiAoIW5ld0RlYnVnZ2VyLmVuYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXJncy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBhcmdzWzBdID0gYCR7bmFtZXNwYWNlfSAke2FyZ3NbMF19YDtcbiAgICAgICAgfVxuICAgICAgICBuZXdEZWJ1Z2dlci5sb2coLi4uYXJncyk7XG4gICAgfVxuICAgIGRlYnVnZ2Vycy5wdXNoKG5ld0RlYnVnZ2VyKTtcbiAgICByZXR1cm4gbmV3RGVidWdnZXI7XG59XG5mdW5jdGlvbiBkZXN0cm95KCkge1xuICAgIGNvbnN0IGluZGV4ID0gZGVidWdnZXJzLmluZGV4T2YodGhpcyk7XG4gICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgZGVidWdnZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBleHRlbmQobmFtZXNwYWNlKSB7XG4gICAgY29uc3QgbmV3RGVidWdnZXIgPSBjcmVhdGVEZWJ1Z2dlcihgJHt0aGlzLm5hbWVzcGFjZX06JHtuYW1lc3BhY2V9YCk7XG4gICAgbmV3RGVidWdnZXIubG9nID0gdGhpcy5sb2c7XG4gICAgcmV0dXJuIG5ld0RlYnVnZ2VyO1xufVxuZXhwb3J0cy5kZWZhdWx0ID0gZGVidWdPYmo7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZWJ1Zy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkF6dXJlTG9nZ2VyID0gdm9pZCAwO1xuZXhwb3J0cy5zZXRMb2dMZXZlbCA9IHNldExvZ0xldmVsO1xuZXhwb3J0cy5nZXRMb2dMZXZlbCA9IGdldExvZ0xldmVsO1xuZXhwb3J0cy5jcmVhdGVDbGllbnRMb2dnZXIgPSBjcmVhdGVDbGllbnRMb2dnZXI7XG5jb25zdCB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xuY29uc3QgZGVidWdfanNfMSA9IHRzbGliXzEuX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL2RlYnVnLmpzXCIpKTtcbmNvbnN0IHJlZ2lzdGVyZWRMb2dnZXJzID0gbmV3IFNldCgpO1xuY29uc3QgbG9nTGV2ZWxGcm9tRW52ID0gKHR5cGVvZiBwcm9jZXNzICE9PSBcInVuZGVmaW5lZFwiICYmIHByb2Nlc3MuZW52ICYmIHByb2Nlc3MuZW52LkFaVVJFX0xPR19MRVZFTCkgfHwgdW5kZWZpbmVkO1xubGV0IGF6dXJlTG9nTGV2ZWw7XG4vKipcbiAqIFRoZSBBenVyZUxvZ2dlciBwcm92aWRlcyBhIG1lY2hhbmlzbSBmb3Igb3ZlcnJpZGluZyB3aGVyZSBsb2dzIGFyZSBvdXRwdXQgdG8uXG4gKiBCeSBkZWZhdWx0LCBsb2dzIGFyZSBzZW50IHRvIHN0ZGVyci5cbiAqIE92ZXJyaWRlIHRoZSBgbG9nYCBtZXRob2QgdG8gcmVkaXJlY3QgbG9ncyB0byBhbm90aGVyIGxvY2F0aW9uLlxuICovXG5leHBvcnRzLkF6dXJlTG9nZ2VyID0gKDAsIGRlYnVnX2pzXzEuZGVmYXVsdCkoXCJhenVyZVwiKTtcbmV4cG9ydHMuQXp1cmVMb2dnZXIubG9nID0gKC4uLmFyZ3MpID0+IHtcbiAgICBkZWJ1Z19qc18xLmRlZmF1bHQubG9nKC4uLmFyZ3MpO1xufTtcbmNvbnN0IEFaVVJFX0xPR19MRVZFTFMgPSBbXCJ2ZXJib3NlXCIsIFwiaW5mb1wiLCBcIndhcm5pbmdcIiwgXCJlcnJvclwiXTtcbmlmIChsb2dMZXZlbEZyb21FbnYpIHtcbiAgICAvLyBhdm9pZCBjYWxsaW5nIHNldExvZ0xldmVsIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCBhIG1pcy1zZXQgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gY3Jhc2hcbiAgICBpZiAoaXNBenVyZUxvZ0xldmVsKGxvZ0xldmVsRnJvbUVudikpIHtcbiAgICAgICAgc2V0TG9nTGV2ZWwobG9nTGV2ZWxGcm9tRW52KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYEFaVVJFX0xPR19MRVZFTCBzZXQgdG8gdW5rbm93biBsb2cgbGV2ZWwgJyR7bG9nTGV2ZWxGcm9tRW52fSc7IGxvZ2dpbmcgaXMgbm90IGVuYWJsZWQuIEFjY2VwdGFibGUgdmFsdWVzOiAke0FaVVJFX0xPR19MRVZFTFMuam9pbihcIiwgXCIpfS5gKTtcbiAgICB9XG59XG4vKipcbiAqIEltbWVkaWF0ZWx5IGVuYWJsZXMgbG9nZ2luZyBhdCB0aGUgc3BlY2lmaWVkIGxvZyBsZXZlbC4gSWYgbm8gbGV2ZWwgaXMgc3BlY2lmaWVkLCBsb2dnaW5nIGlzIGRpc2FibGVkLlxuICogQHBhcmFtIGxldmVsIC0gVGhlIGxvZyBsZXZlbCB0byBlbmFibGUgZm9yIGxvZ2dpbmcuXG4gKiBPcHRpb25zIGZyb20gbW9zdCB2ZXJib3NlIHRvIGxlYXN0IHZlcmJvc2UgYXJlOlxuICogLSB2ZXJib3NlXG4gKiAtIGluZm9cbiAqIC0gd2FybmluZ1xuICogLSBlcnJvclxuICovXG5mdW5jdGlvbiBzZXRMb2dMZXZlbChsZXZlbCkge1xuICAgIGlmIChsZXZlbCAmJiAhaXNBenVyZUxvZ0xldmVsKGxldmVsKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gbG9nIGxldmVsICcke2xldmVsfScuIEFjY2VwdGFibGUgdmFsdWVzOiAke0FaVVJFX0xPR19MRVZFTFMuam9pbihcIixcIil9YCk7XG4gICAgfVxuICAgIGF6dXJlTG9nTGV2ZWwgPSBsZXZlbDtcbiAgICBjb25zdCBlbmFibGVkTmFtZXNwYWNlcyA9IFtdO1xuICAgIGZvciAoY29uc3QgbG9nZ2VyIG9mIHJlZ2lzdGVyZWRMb2dnZXJzKSB7XG4gICAgICAgIGlmIChzaG91bGRFbmFibGUobG9nZ2VyKSkge1xuICAgICAgICAgICAgZW5hYmxlZE5hbWVzcGFjZXMucHVzaChsb2dnZXIubmFtZXNwYWNlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBkZWJ1Z19qc18xLmRlZmF1bHQuZW5hYmxlKGVuYWJsZWROYW1lc3BhY2VzLmpvaW4oXCIsXCIpKTtcbn1cbi8qKlxuICogUmV0cmlldmVzIHRoZSBjdXJyZW50bHkgc3BlY2lmaWVkIGxvZyBsZXZlbC5cbiAqL1xuZnVuY3Rpb24gZ2V0TG9nTGV2ZWwoKSB7XG4gICAgcmV0dXJuIGF6dXJlTG9nTGV2ZWw7XG59XG5jb25zdCBsZXZlbE1hcCA9IHtcbiAgICB2ZXJib3NlOiA0MDAsXG4gICAgaW5mbzogMzAwLFxuICAgIHdhcm5pbmc6IDIwMCxcbiAgICBlcnJvcjogMTAwLFxufTtcbi8qKlxuICogQ3JlYXRlcyBhIGxvZ2dlciBmb3IgdXNlIGJ5IHRoZSBBenVyZSBTREtzIHRoYXQgaW5oZXJpdHMgZnJvbSBgQXp1cmVMb2dnZXJgLlxuICogQHBhcmFtIG5hbWVzcGFjZSAtIFRoZSBuYW1lIG9mIHRoZSBTREsgcGFja2FnZS5cbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQ2xpZW50TG9nZ2VyKG5hbWVzcGFjZSkge1xuICAgIGNvbnN0IGNsaWVudFJvb3RMb2dnZXIgPSBleHBvcnRzLkF6dXJlTG9nZ2VyLmV4dGVuZChuYW1lc3BhY2UpO1xuICAgIHBhdGNoTG9nTWV0aG9kKGV4cG9ydHMuQXp1cmVMb2dnZXIsIGNsaWVudFJvb3RMb2dnZXIpO1xuICAgIHJldHVybiB7XG4gICAgICAgIGVycm9yOiBjcmVhdGVMb2dnZXIoY2xpZW50Um9vdExvZ2dlciwgXCJlcnJvclwiKSxcbiAgICAgICAgd2FybmluZzogY3JlYXRlTG9nZ2VyKGNsaWVudFJvb3RMb2dnZXIsIFwid2FybmluZ1wiKSxcbiAgICAgICAgaW5mbzogY3JlYXRlTG9nZ2VyKGNsaWVudFJvb3RMb2dnZXIsIFwiaW5mb1wiKSxcbiAgICAgICAgdmVyYm9zZTogY3JlYXRlTG9nZ2VyKGNsaWVudFJvb3RMb2dnZXIsIFwidmVyYm9zZVwiKSxcbiAgICB9O1xufVxuZnVuY3Rpb24gcGF0Y2hMb2dNZXRob2QocGFyZW50LCBjaGlsZCkge1xuICAgIGNoaWxkLmxvZyA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIHBhcmVudC5sb2coLi4uYXJncyk7XG4gICAgfTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUxvZ2dlcihwYXJlbnQsIGxldmVsKSB7XG4gICAgY29uc3QgbG9nZ2VyID0gT2JqZWN0LmFzc2lnbihwYXJlbnQuZXh0ZW5kKGxldmVsKSwge1xuICAgICAgICBsZXZlbCxcbiAgICB9KTtcbiAgICBwYXRjaExvZ01ldGhvZChwYXJlbnQsIGxvZ2dlcik7XG4gICAgaWYgKHNob3VsZEVuYWJsZShsb2dnZXIpKSB7XG4gICAgICAgIGNvbnN0IGVuYWJsZWROYW1lc3BhY2VzID0gZGVidWdfanNfMS5kZWZhdWx0LmRpc2FibGUoKTtcbiAgICAgICAgZGVidWdfanNfMS5kZWZhdWx0LmVuYWJsZShlbmFibGVkTmFtZXNwYWNlcyArIFwiLFwiICsgbG9nZ2VyLm5hbWVzcGFjZSk7XG4gICAgfVxuICAgIHJlZ2lzdGVyZWRMb2dnZXJzLmFkZChsb2dnZXIpO1xuICAgIHJldHVybiBsb2dnZXI7XG59XG5mdW5jdGlvbiBzaG91bGRFbmFibGUobG9nZ2VyKSB7XG4gICAgcmV0dXJuIEJvb2xlYW4oYXp1cmVMb2dMZXZlbCAmJiBsZXZlbE1hcFtsb2dnZXIubGV2ZWxdIDw9IGxldmVsTWFwW2F6dXJlTG9nTGV2ZWxdKTtcbn1cbmZ1bmN0aW9uIGlzQXp1cmVMb2dMZXZlbChsb2dMZXZlbCkge1xuICAgIHJldHVybiBBWlVSRV9MT0dfTEVWRUxTLmluY2x1ZGVzKGxvZ0xldmVsKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubG9nZ2VyID0gdm9pZCAwO1xuY29uc3QgbG9nZ2VyXzEgPSByZXF1aXJlKFwiQGF6dXJlL2xvZ2dlclwiKTtcbmV4cG9ydHMubG9nZ2VyID0gKDAsIGxvZ2dlcl8xLmNyZWF0ZUNsaWVudExvZ2dlcikoXCJjb3JlLXJlc3QtcGlwZWxpbmVcIik7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1sb2cuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5BYm9ydEVycm9yID0gdm9pZCAwO1xuLyoqXG4gKiBUaGlzIGVycm9yIGlzIHRocm93biB3aGVuIGFuIGFzeW5jaHJvbm91cyBvcGVyYXRpb24gaGFzIGJlZW4gYWJvcnRlZC5cbiAqIENoZWNrIGZvciB0aGlzIGVycm9yIGJ5IHRlc3RpbmcgdGhlIGBuYW1lYCB0aGF0IHRoZSBuYW1lIHByb3BlcnR5IG9mIHRoZVxuICogZXJyb3IgbWF0Y2hlcyBgXCJBYm9ydEVycm9yXCJgLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAqIGNvbnRyb2xsZXIuYWJvcnQoKTtcbiAqIHRyeSB7XG4gKiAgIGRvQXN5bmNXb3JrKGNvbnRyb2xsZXIuc2lnbmFsKVxuICogfSBjYXRjaCAoZSkge1xuICogICBpZiAoZS5uYW1lID09PSAnQWJvcnRFcnJvcicpIHtcbiAqICAgICAvLyBoYW5kbGUgYWJvcnQgZXJyb3IgaGVyZS5cbiAqICAgfVxuICogfVxuICogYGBgXG4gKi9cbmNsYXNzIEFib3J0RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZSkge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJBYm9ydEVycm9yXCI7XG4gICAgfVxufVxuZXhwb3J0cy5BYm9ydEVycm9yID0gQWJvcnRFcnJvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFib3J0RXJyb3IuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5BYm9ydEVycm9yID0gdm9pZCAwO1xudmFyIEFib3J0RXJyb3JfanNfMSA9IHJlcXVpcmUoXCIuL0Fib3J0RXJyb3IuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJBYm9ydEVycm9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBBYm9ydEVycm9yX2pzXzEuQWJvcnRFcnJvcjsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlQWJvcnRhYmxlUHJvbWlzZSA9IGNyZWF0ZUFib3J0YWJsZVByb21pc2U7XG5jb25zdCBhYm9ydF9jb250cm9sbGVyXzEgPSByZXF1aXJlKFwiQGF6dXJlL2Fib3J0LWNvbnRyb2xsZXJcIik7XG4vKipcbiAqIENyZWF0ZXMgYW4gYWJvcnRhYmxlIHByb21pc2UuXG4gKiBAcGFyYW0gYnVpbGRQcm9taXNlIC0gQSBmdW5jdGlvbiB0aGF0IHRha2VzIHRoZSByZXNvbHZlIGFuZCByZWplY3QgZnVuY3Rpb25zIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciB0aGUgYWJvcnRhYmxlIHByb21pc2UuXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCBjYW4gYmUgYWJvcnRlZC5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQWJvcnRhYmxlUHJvbWlzZShidWlsZFByb21pc2UsIG9wdGlvbnMpIHtcbiAgICBjb25zdCB7IGNsZWFudXBCZWZvcmVBYm9ydCwgYWJvcnRTaWduYWwsIGFib3J0RXJyb3JNc2cgfSA9IG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwID8gb3B0aW9ucyA6IHt9O1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdE9uQWJvcnQoKSB7XG4gICAgICAgICAgICByZWplY3QobmV3IGFib3J0X2NvbnRyb2xsZXJfMS5BYm9ydEVycm9yKGFib3J0RXJyb3JNc2cgIT09IG51bGwgJiYgYWJvcnRFcnJvck1zZyAhPT0gdm9pZCAwID8gYWJvcnRFcnJvck1zZyA6IFwiVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC5cIikpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVycygpIHtcbiAgICAgICAgICAgIGFib3J0U2lnbmFsID09PSBudWxsIHx8IGFib3J0U2lnbmFsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBhYm9ydFNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgb25BYm9ydCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gb25BYm9ydCgpIHtcbiAgICAgICAgICAgIGNsZWFudXBCZWZvcmVBYm9ydCA9PT0gbnVsbCB8fCBjbGVhbnVwQmVmb3JlQWJvcnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNsZWFudXBCZWZvcmVBYm9ydCgpO1xuICAgICAgICAgICAgcmVtb3ZlTGlzdGVuZXJzKCk7XG4gICAgICAgICAgICByZWplY3RPbkFib3J0KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFib3J0U2lnbmFsID09PSBudWxsIHx8IGFib3J0U2lnbmFsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBhYm9ydFNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0T25BYm9ydCgpO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBidWlsZFByb21pc2UoKHgpID0+IHtcbiAgICAgICAgICAgICAgICByZW1vdmVMaXN0ZW5lcnMoKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHgpO1xuICAgICAgICAgICAgfSwgKHgpID0+IHtcbiAgICAgICAgICAgICAgICByZW1vdmVMaXN0ZW5lcnMoKTtcbiAgICAgICAgICAgICAgICByZWplY3QoeCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgICBhYm9ydFNpZ25hbCA9PT0gbnVsbCB8fCBhYm9ydFNpZ25hbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogYWJvcnRTaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uQWJvcnQpO1xuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y3JlYXRlQWJvcnRhYmxlUHJvbWlzZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldFJhbmRvbUludGVnZXJJbmNsdXNpdmUgPSBnZXRSYW5kb21JbnRlZ2VySW5jbHVzaXZlO1xuLyoqXG4gKiBSZXR1cm5zIGEgcmFuZG9tIGludGVnZXIgdmFsdWUgYmV0d2VlbiBhIGxvd2VyIGFuZCB1cHBlciBib3VuZCxcbiAqIGluY2x1c2l2ZSBvZiBib3RoIGJvdW5kcy5cbiAqIE5vdGUgdGhhdCB0aGlzIHVzZXMgTWF0aC5yYW5kb20gYW5kIGlzbid0IHNlY3VyZS4gSWYgeW91IG5lZWQgdG8gdXNlXG4gKiB0aGlzIGZvciBhbnkga2luZCBvZiBzZWN1cml0eSBwdXJwb3NlLCBmaW5kIGEgYmV0dGVyIHNvdXJjZSBvZiByYW5kb20uXG4gKiBAcGFyYW0gbWluIC0gVGhlIHNtYWxsZXN0IGludGVnZXIgdmFsdWUgYWxsb3dlZC5cbiAqIEBwYXJhbSBtYXggLSBUaGUgbGFyZ2VzdCBpbnRlZ2VyIHZhbHVlIGFsbG93ZWQuXG4gKi9cbmZ1bmN0aW9uIGdldFJhbmRvbUludGVnZXJJbmNsdXNpdmUobWluLCBtYXgpIHtcbiAgICAvLyBNYWtlIHN1cmUgaW5wdXRzIGFyZSBpbnRlZ2Vycy5cbiAgICBtaW4gPSBNYXRoLmNlaWwobWluKTtcbiAgICBtYXggPSBNYXRoLmZsb29yKG1heCk7XG4gICAgLy8gUGljayBhIHJhbmRvbSBvZmZzZXQgZnJvbSB6ZXJvIHRvIHRoZSBzaXplIG9mIHRoZSByYW5nZS5cbiAgICAvLyBTaW5jZSBNYXRoLnJhbmRvbSgpIGNhbiBuZXZlciByZXR1cm4gMSwgd2UgaGF2ZSB0byBtYWtlIHRoZSByYW5nZSBvbmUgbGFyZ2VyXG4gICAgLy8gaW4gb3JkZXIgdG8gYmUgaW5jbHVzaXZlIG9mIHRoZSBtYXhpbXVtIHZhbHVlIGFmdGVyIHdlIHRha2UgdGhlIGZsb29yLlxuICAgIGNvbnN0IG9mZnNldCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4gKyAxKSk7XG4gICAgcmV0dXJuIG9mZnNldCArIG1pbjtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJhbmRvbS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlbGF5ID0gZGVsYXk7XG5leHBvcnRzLmNhbGN1bGF0ZVJldHJ5RGVsYXkgPSBjYWxjdWxhdGVSZXRyeURlbGF5O1xuY29uc3QgY3JlYXRlQWJvcnRhYmxlUHJvbWlzZV9qc18xID0gcmVxdWlyZShcIi4vY3JlYXRlQWJvcnRhYmxlUHJvbWlzZS5qc1wiKTtcbmNvbnN0IHJhbmRvbV9qc18xID0gcmVxdWlyZShcIi4vcmFuZG9tLmpzXCIpO1xuY29uc3QgU3RhbmRhcmRBYm9ydE1lc3NhZ2UgPSBcIlRoZSBkZWxheSB3YXMgYWJvcnRlZC5cIjtcbi8qKlxuICogQSB3cmFwcGVyIGZvciBzZXRUaW1lb3V0IHRoYXQgcmVzb2x2ZXMgYSBwcm9taXNlIGFmdGVyIHRpbWVJbk1zIG1pbGxpc2Vjb25kcy5cbiAqIEBwYXJhbSB0aW1lSW5NcyAtIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIGJlIGRlbGF5ZWQuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciBkZWxheSAtIGN1cnJlbnRseSBhYm9ydCBvcHRpb25zXG4gKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgYWZ0ZXIgdGltZUluTXNcbiAqL1xuZnVuY3Rpb24gZGVsYXkodGltZUluTXMsIG9wdGlvbnMpIHtcbiAgICBsZXQgdG9rZW47XG4gICAgY29uc3QgeyBhYm9ydFNpZ25hbCwgYWJvcnRFcnJvck1zZyB9ID0gb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgPyBvcHRpb25zIDoge307XG4gICAgcmV0dXJuICgwLCBjcmVhdGVBYm9ydGFibGVQcm9taXNlX2pzXzEuY3JlYXRlQWJvcnRhYmxlUHJvbWlzZSkoKHJlc29sdmUpID0+IHtcbiAgICAgICAgdG9rZW4gPSBzZXRUaW1lb3V0KHJlc29sdmUsIHRpbWVJbk1zKTtcbiAgICB9LCB7XG4gICAgICAgIGNsZWFudXBCZWZvcmVBYm9ydDogKCkgPT4gY2xlYXJUaW1lb3V0KHRva2VuKSxcbiAgICAgICAgYWJvcnRTaWduYWwsXG4gICAgICAgIGFib3J0RXJyb3JNc2c6IGFib3J0RXJyb3JNc2cgIT09IG51bGwgJiYgYWJvcnRFcnJvck1zZyAhPT0gdm9pZCAwID8gYWJvcnRFcnJvck1zZyA6IFN0YW5kYXJkQWJvcnRNZXNzYWdlLFxuICAgIH0pO1xufVxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBkZWxheSBpbnRlcnZhbCBmb3IgcmV0cnkgYXR0ZW1wdHMgdXNpbmcgZXhwb25lbnRpYWwgZGVsYXkgd2l0aCBqaXR0ZXIuXG4gKiBAcGFyYW0gcmV0cnlBdHRlbXB0IC0gVGhlIGN1cnJlbnQgcmV0cnkgYXR0ZW1wdCBudW1iZXIuXG4gKiBAcGFyYW0gY29uZmlnIC0gVGhlIGV4cG9uZW50aWFsIHJldHJ5IGNvbmZpZ3VyYXRpb24uXG4gKiBAcmV0dXJucyBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgY2FsY3VsYXRlZCByZXRyeSBkZWxheS5cbiAqL1xuZnVuY3Rpb24gY2FsY3VsYXRlUmV0cnlEZWxheShyZXRyeUF0dGVtcHQsIGNvbmZpZykge1xuICAgIC8vIEV4cG9uZW50aWFsbHkgaW5jcmVhc2UgdGhlIGRlbGF5IGVhY2ggdGltZVxuICAgIGNvbnN0IGV4cG9uZW50aWFsRGVsYXkgPSBjb25maWcucmV0cnlEZWxheUluTXMgKiBNYXRoLnBvdygyLCByZXRyeUF0dGVtcHQpO1xuICAgIC8vIERvbid0IGxldCB0aGUgZGVsYXkgZXhjZWVkIHRoZSBtYXhpbXVtXG4gICAgY29uc3QgY2xhbXBlZERlbGF5ID0gTWF0aC5taW4oY29uZmlnLm1heFJldHJ5RGVsYXlJbk1zLCBleHBvbmVudGlhbERlbGF5KTtcbiAgICAvLyBBbGxvdyB0aGUgZmluYWwgdmFsdWUgdG8gaGF2ZSBzb21lIFwiaml0dGVyXCIgKHdpdGhpbiA1MCUgb2YgdGhlIGRlbGF5IHNpemUpIHNvXG4gICAgLy8gdGhhdCByZXRyaWVzIGFjcm9zcyBtdWx0aXBsZSBjbGllbnRzIGRvbid0IG9jY3VyIHNpbXVsdGFuZW91c2x5LlxuICAgIGNvbnN0IHJldHJ5QWZ0ZXJJbk1zID0gY2xhbXBlZERlbGF5IC8gMiArICgwLCByYW5kb21fanNfMS5nZXRSYW5kb21JbnRlZ2VySW5jbHVzaXZlKSgwLCBjbGFtcGVkRGVsYXkgLyAyKTtcbiAgICByZXR1cm4geyByZXRyeUFmdGVySW5NcyB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGVsYXkuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jYW5jZWxhYmxlUHJvbWlzZVJhY2UgPSBjYW5jZWxhYmxlUHJvbWlzZVJhY2U7XG4vKipcbiAqIHByb21pc2UucmFjZSgpIHdyYXBwZXIgdGhhdCBhYm9ydHMgcmVzdCBvZiBwcm9taXNlcyBhcyBzb29uIGFzIHRoZSBmaXJzdCBwcm9taXNlIHNldHRsZXMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNhbmNlbGFibGVQcm9taXNlUmFjZShhYm9ydGFibGVQcm9taXNlQnVpbGRlcnMsIG9wdGlvbnMpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGNvbnN0IGFib3J0ZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgZnVuY3Rpb24gYWJvcnRIYW5kbGVyKCkge1xuICAgICAgICBhYm9ydGVyLmFib3J0KCk7XG4gICAgfVxuICAgIChfYSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5hYm9ydFNpZ25hbCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBhYm9ydEhhbmRsZXIpO1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBQcm9taXNlLnJhY2UoYWJvcnRhYmxlUHJvbWlzZUJ1aWxkZXJzLm1hcCgocCkgPT4gcCh7IGFib3J0U2lnbmFsOiBhYm9ydGVyLnNpZ25hbCB9KSkpO1xuICAgIH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgYWJvcnRlci5hYm9ydCgpO1xuICAgICAgICAoX2IgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuYWJvcnRTaWduYWwpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgYWJvcnRIYW5kbGVyKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hYm9ydGVyVXRpbHMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc09iamVjdCA9IGlzT2JqZWN0O1xuLyoqXG4gKiBIZWxwZXIgdG8gZGV0ZXJtaW5lIHdoZW4gYW4gaW5wdXQgaXMgYSBnZW5lcmljIEpTIG9iamVjdC5cbiAqIEByZXR1cm5zIHRydWUgd2hlbiBpbnB1dCBpcyBhbiBvYmplY3QgdHlwZSB0aGF0IGlzIG5vdCBudWxsLCBBcnJheSwgUmVnRXhwLCBvciBEYXRlLlxuICovXG5mdW5jdGlvbiBpc09iamVjdChpbnB1dCkge1xuICAgIHJldHVybiAodHlwZW9mIGlucHV0ID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgIGlucHV0ICE9PSBudWxsICYmXG4gICAgICAgICFBcnJheS5pc0FycmF5KGlucHV0KSAmJlxuICAgICAgICAhKGlucHV0IGluc3RhbmNlb2YgUmVnRXhwKSAmJlxuICAgICAgICAhKGlucHV0IGluc3RhbmNlb2YgRGF0ZSkpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9b2JqZWN0LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNFcnJvciA9IGlzRXJyb3I7XG5leHBvcnRzLmdldEVycm9yTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZTtcbmNvbnN0IG9iamVjdF9qc18xID0gcmVxdWlyZShcIi4vb2JqZWN0LmpzXCIpO1xuLyoqXG4gKiBUeXBlZ3VhcmQgZm9yIGFuIGVycm9yIG9iamVjdCBzaGFwZSAoaGFzIG5hbWUgYW5kIG1lc3NhZ2UpXG4gKiBAcGFyYW0gZSAtIFNvbWV0aGluZyBjYXVnaHQgYnkgYSBjYXRjaCBjbGF1c2UuXG4gKi9cbmZ1bmN0aW9uIGlzRXJyb3IoZSkge1xuICAgIGlmICgoMCwgb2JqZWN0X2pzXzEuaXNPYmplY3QpKGUpKSB7XG4gICAgICAgIGNvbnN0IGhhc05hbWUgPSB0eXBlb2YgZS5uYW1lID09PSBcInN0cmluZ1wiO1xuICAgICAgICBjb25zdCBoYXNNZXNzYWdlID0gdHlwZW9mIGUubWVzc2FnZSA9PT0gXCJzdHJpbmdcIjtcbiAgICAgICAgcmV0dXJuIGhhc05hbWUgJiYgaGFzTWVzc2FnZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuLyoqXG4gKiBHaXZlbiB3aGF0IGlzIHRob3VnaHQgdG8gYmUgYW4gZXJyb3Igb2JqZWN0LCByZXR1cm4gdGhlIG1lc3NhZ2UgaWYgcG9zc2libGUuXG4gKiBJZiB0aGUgbWVzc2FnZSBpcyBtaXNzaW5nLCByZXR1cm5zIGEgc3RyaW5naWZpZWQgdmVyc2lvbiBvZiB0aGUgaW5wdXQuXG4gKiBAcGFyYW0gZSAtIFNvbWV0aGluZyB0aHJvd24gZnJvbSBhIHRyeSBibG9ja1xuICogQHJldHVybnMgVGhlIGVycm9yIG1lc3NhZ2Ugb3IgYSBzdHJpbmcgb2YgdGhlIGlucHV0XG4gKi9cbmZ1bmN0aW9uIGdldEVycm9yTWVzc2FnZShlKSB7XG4gICAgaWYgKGlzRXJyb3IoZSkpIHtcbiAgICAgICAgcmV0dXJuIGUubWVzc2FnZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGxldCBzdHJpbmdpZmllZDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZSA9PT0gXCJvYmplY3RcIiAmJiBlKSB7XG4gICAgICAgICAgICAgICAgc3RyaW5naWZpZWQgPSBKU09OLnN0cmluZ2lmeShlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0cmluZ2lmaWVkID0gU3RyaW5nKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHN0cmluZ2lmaWVkID0gXCJbdW5hYmxlIHRvIHN0cmluZ2lmeSBpbnB1dF1cIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYFVua25vd24gZXJyb3IgJHtzdHJpbmdpZmllZH1gO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVycm9yLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY29tcHV0ZVNoYTI1NkhtYWMgPSBjb21wdXRlU2hhMjU2SG1hYztcbmV4cG9ydHMuY29tcHV0ZVNoYTI1Nkhhc2ggPSBjb21wdXRlU2hhMjU2SGFzaDtcbmNvbnN0IGNyeXB0b18xID0gcmVxdWlyZShcImNyeXB0b1wiKTtcbi8qKlxuICogR2VuZXJhdGVzIGEgU0hBLTI1NiBITUFDIHNpZ25hdHVyZS5cbiAqIEBwYXJhbSBrZXkgLSBUaGUgSE1BQyBrZXkgcmVwcmVzZW50ZWQgYXMgYSBiYXNlNjQgc3RyaW5nLCB1c2VkIHRvIGdlbmVyYXRlIHRoZSBjcnlwdG9ncmFwaGljIEhNQUMgaGFzaC5cbiAqIEBwYXJhbSBzdHJpbmdUb1NpZ24gLSBUaGUgZGF0YSB0byBiZSBzaWduZWQuXG4gKiBAcGFyYW0gZW5jb2RpbmcgLSBUaGUgdGV4dHVhbCBlbmNvZGluZyB0byB1c2UgZm9yIHRoZSByZXR1cm5lZCBITUFDIGRpZ2VzdC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gY29tcHV0ZVNoYTI1NkhtYWMoa2V5LCBzdHJpbmdUb1NpZ24sIGVuY29kaW5nKSB7XG4gICAgY29uc3QgZGVjb2RlZEtleSA9IEJ1ZmZlci5mcm9tKGtleSwgXCJiYXNlNjRcIik7XG4gICAgcmV0dXJuICgwLCBjcnlwdG9fMS5jcmVhdGVIbWFjKShcInNoYTI1NlwiLCBkZWNvZGVkS2V5KS51cGRhdGUoc3RyaW5nVG9TaWduKS5kaWdlc3QoZW5jb2RpbmcpO1xufVxuLyoqXG4gKiBHZW5lcmF0ZXMgYSBTSEEtMjU2IGhhc2guXG4gKiBAcGFyYW0gY29udGVudCAtIFRoZSBkYXRhIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBoYXNoLlxuICogQHBhcmFtIGVuY29kaW5nIC0gVGhlIHRleHR1YWwgZW5jb2RpbmcgdG8gdXNlIGZvciB0aGUgcmV0dXJuZWQgaGFzaC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gY29tcHV0ZVNoYTI1Nkhhc2goY29udGVudCwgZW5jb2RpbmcpIHtcbiAgICByZXR1cm4gKDAsIGNyeXB0b18xLmNyZWF0ZUhhc2gpKFwic2hhMjU2XCIpLnVwZGF0ZShjb250ZW50KS5kaWdlc3QoZW5jb2RpbmcpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2hhMjU2LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNEZWZpbmVkID0gaXNEZWZpbmVkO1xuZXhwb3J0cy5pc09iamVjdFdpdGhQcm9wZXJ0aWVzID0gaXNPYmplY3RXaXRoUHJvcGVydGllcztcbmV4cG9ydHMub2JqZWN0SGFzUHJvcGVydHkgPSBvYmplY3RIYXNQcm9wZXJ0eTtcbi8qKlxuICogSGVscGVyIFR5cGVHdWFyZCB0aGF0IGNoZWNrcyBpZiBzb21ldGhpbmcgaXMgZGVmaW5lZCBvciBub3QuXG4gKiBAcGFyYW0gdGhpbmcgLSBBbnl0aGluZ1xuICovXG5mdW5jdGlvbiBpc0RlZmluZWQodGhpbmcpIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaW5nICE9PSBcInVuZGVmaW5lZFwiICYmIHRoaW5nICE9PSBudWxsO1xufVxuLyoqXG4gKiBIZWxwZXIgVHlwZUd1YXJkIHRoYXQgY2hlY2tzIGlmIHRoZSBpbnB1dCBpcyBhbiBvYmplY3Qgd2l0aCB0aGUgc3BlY2lmaWVkIHByb3BlcnRpZXMuXG4gKiBAcGFyYW0gdGhpbmcgLSBBbnl0aGluZy5cbiAqIEBwYXJhbSBwcm9wZXJ0aWVzIC0gVGhlIG5hbWUgb2YgdGhlIHByb3BlcnRpZXMgdGhhdCBzaG91bGQgYXBwZWFyIGluIHRoZSBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0V2l0aFByb3BlcnRpZXModGhpbmcsIHByb3BlcnRpZXMpIHtcbiAgICBpZiAoIWlzRGVmaW5lZCh0aGluZykgfHwgdHlwZW9mIHRoaW5nICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBwcm9wZXJ0aWVzKSB7XG4gICAgICAgIGlmICghb2JqZWN0SGFzUHJvcGVydHkodGhpbmcsIHByb3BlcnR5KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuLyoqXG4gKiBIZWxwZXIgVHlwZUd1YXJkIHRoYXQgY2hlY2tzIGlmIHRoZSBpbnB1dCBpcyBhbiBvYmplY3Qgd2l0aCB0aGUgc3BlY2lmaWVkIHByb3BlcnR5LlxuICogQHBhcmFtIHRoaW5nIC0gQW55IG9iamVjdC5cbiAqIEBwYXJhbSBwcm9wZXJ0eSAtIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IHNob3VsZCBhcHBlYXIgaW4gdGhlIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gb2JqZWN0SGFzUHJvcGVydHkodGhpbmcsIHByb3BlcnR5KSB7XG4gICAgcmV0dXJuIChpc0RlZmluZWQodGhpbmcpICYmIHR5cGVvZiB0aGluZyA9PT0gXCJvYmplY3RcIiAmJiBwcm9wZXJ0eSBpbiB0aGluZyk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD10eXBlR3VhcmRzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbnZhciBfYTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmFuZG9tVVVJRCA9IHJhbmRvbVVVSUQ7XG5jb25zdCBjcnlwdG9fMSA9IHJlcXVpcmUoXCJjcnlwdG9cIik7XG4vLyBOT1RFOiBUaGlzIGlzIGEgd29ya2Fyb3VuZCB1bnRpbCB3ZSBjYW4gdXNlIGBnbG9iYWxUaGlzLmNyeXB0by5yYW5kb21VVUlEYCBpbiBOb2RlLmpzIDE5Ky5cbmNvbnN0IHV1aWRGdW5jdGlvbiA9IHR5cGVvZiAoKF9hID0gZ2xvYmFsVGhpcyA9PT0gbnVsbCB8fCBnbG9iYWxUaGlzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBnbG9iYWxUaGlzLmNyeXB0bykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnJhbmRvbVVVSUQpID09PSBcImZ1bmN0aW9uXCJcbiAgICA/IGdsb2JhbFRoaXMuY3J5cHRvLnJhbmRvbVVVSUQuYmluZChnbG9iYWxUaGlzLmNyeXB0bylcbiAgICA6IGNyeXB0b18xLnJhbmRvbVVVSUQ7XG4vKipcbiAqIEdlbmVyYXRlZCBVbml2ZXJzYWxseSBVbmlxdWUgSWRlbnRpZmllclxuICpcbiAqIEByZXR1cm5zIFJGQzQxMjIgdjQgVVVJRC5cbiAqL1xuZnVuY3Rpb24gcmFuZG9tVVVJRCgpIHtcbiAgICByZXR1cm4gdXVpZEZ1bmN0aW9uKCk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD11dWlkVXRpbHMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxudmFyIF9hLCBfYiwgX2MsIF9kO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc1JlYWN0TmF0aXZlID0gZXhwb3J0cy5pc05vZGVSdW50aW1lID0gZXhwb3J0cy5pc05vZGUgPSBleHBvcnRzLmlzTm9kZUxpa2UgPSBleHBvcnRzLmlzQnVuID0gZXhwb3J0cy5pc0Rlbm8gPSBleHBvcnRzLmlzV2ViV29ya2VyID0gZXhwb3J0cy5pc0Jyb3dzZXIgPSB2b2lkIDA7XG4vKipcbiAqIEEgY29uc3RhbnQgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgZW52aXJvbm1lbnQgdGhlIGNvZGUgaXMgcnVubmluZyBpcyBhIFdlYiBCcm93c2VyLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGF6dXJlL2F6dXJlLXNkay90cy1uby13aW5kb3dcbmV4cG9ydHMuaXNCcm93c2VyID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiO1xuLyoqXG4gKiBBIGNvbnN0YW50IHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGVudmlyb25tZW50IHRoZSBjb2RlIGlzIHJ1bm5pbmcgaXMgYSBXZWIgV29ya2VyLlxuICovXG5leHBvcnRzLmlzV2ViV29ya2VyID0gdHlwZW9mIHNlbGYgPT09IFwib2JqZWN0XCIgJiZcbiAgICB0eXBlb2YgKHNlbGYgPT09IG51bGwgfHwgc2VsZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsZi5pbXBvcnRTY3JpcHRzKSA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgKCgoX2EgPSBzZWxmLmNvbnN0cnVjdG9yKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubmFtZSkgPT09IFwiRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGVcIiB8fFxuICAgICAgICAoKF9iID0gc2VsZi5jb25zdHJ1Y3RvcikgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLm5hbWUpID09PSBcIlNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZVwiIHx8XG4gICAgICAgICgoX2MgPSBzZWxmLmNvbnN0cnVjdG9yKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MubmFtZSkgPT09IFwiU2hhcmVkV29ya2VyR2xvYmFsU2NvcGVcIik7XG4vKipcbiAqIEEgY29uc3RhbnQgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgZW52aXJvbm1lbnQgdGhlIGNvZGUgaXMgcnVubmluZyBpcyBEZW5vLlxuICovXG5leHBvcnRzLmlzRGVubyA9IHR5cGVvZiBEZW5vICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgdHlwZW9mIERlbm8udmVyc2lvbiAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgIHR5cGVvZiBEZW5vLnZlcnNpb24uZGVubyAhPT0gXCJ1bmRlZmluZWRcIjtcbi8qKlxuICogQSBjb25zdGFudCB0aGF0IGluZGljYXRlcyB3aGV0aGVyIHRoZSBlbnZpcm9ubWVudCB0aGUgY29kZSBpcyBydW5uaW5nIGlzIEJ1bi5zaC5cbiAqL1xuZXhwb3J0cy5pc0J1biA9IHR5cGVvZiBCdW4gIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIEJ1bi52ZXJzaW9uICE9PSBcInVuZGVmaW5lZFwiO1xuLyoqXG4gKiBBIGNvbnN0YW50IHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGVudmlyb25tZW50IHRoZSBjb2RlIGlzIHJ1bm5pbmcgaXMgYSBOb2RlLmpzIGNvbXBhdGlibGUgZW52aXJvbm1lbnQuXG4gKi9cbmV4cG9ydHMuaXNOb2RlTGlrZSA9IHR5cGVvZiBnbG9iYWxUaGlzLnByb2Nlc3MgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICBCb29sZWFuKGdsb2JhbFRoaXMucHJvY2Vzcy52ZXJzaW9uKSAmJlxuICAgIEJvb2xlYW4oKF9kID0gZ2xvYmFsVGhpcy5wcm9jZXNzLnZlcnNpb25zKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Qubm9kZSk7XG4vKipcbiAqIEEgY29uc3RhbnQgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgZW52aXJvbm1lbnQgdGhlIGNvZGUgaXMgcnVubmluZyBpcyBhIE5vZGUuanMgY29tcGF0aWJsZSBlbnZpcm9ubWVudC5cbiAqIEBkZXByZWNhdGVkIFVzZSBgaXNOb2RlTGlrZWAgaW5zdGVhZC5cbiAqL1xuZXhwb3J0cy5pc05vZGUgPSBleHBvcnRzLmlzTm9kZUxpa2U7XG4vKipcbiAqIEEgY29uc3RhbnQgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgZW52aXJvbm1lbnQgdGhlIGNvZGUgaXMgcnVubmluZyBpcyBOb2RlLkpTLlxuICovXG5leHBvcnRzLmlzTm9kZVJ1bnRpbWUgPSBleHBvcnRzLmlzTm9kZUxpa2UgJiYgIWV4cG9ydHMuaXNCdW4gJiYgIWV4cG9ydHMuaXNEZW5vO1xuLyoqXG4gKiBBIGNvbnN0YW50IHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGVudmlyb25tZW50IHRoZSBjb2RlIGlzIHJ1bm5pbmcgaXMgaW4gUmVhY3QtTmF0aXZlLlxuICovXG4vLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QtbmF0aXZlL2Jsb2IvbWFpbi9wYWNrYWdlcy9yZWFjdC1uYXRpdmUvTGlicmFyaWVzL0NvcmUvc2V0VXBOYXZpZ2F0b3IuanNcbmV4cG9ydHMuaXNSZWFjdE5hdGl2ZSA9IHR5cGVvZiBuYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCIgJiYgKG5hdmlnYXRvciA9PT0gbnVsbCB8fCBuYXZpZ2F0b3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG5hdmlnYXRvci5wcm9kdWN0KSA9PT0gXCJSZWFjdE5hdGl2ZVwiO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y2hlY2tFbnZpcm9ubWVudC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnVpbnQ4QXJyYXlUb1N0cmluZyA9IHVpbnQ4QXJyYXlUb1N0cmluZztcbmV4cG9ydHMuc3RyaW5nVG9VaW50OEFycmF5ID0gc3RyaW5nVG9VaW50OEFycmF5O1xuLyoqXG4gKiBUaGUgaGVscGVyIHRoYXQgdHJhbnNmb3JtcyBieXRlcyB3aXRoIHNwZWNpZmljIGNoYXJhY3RlciBlbmNvZGluZyBpbnRvIHN0cmluZ1xuICogQHBhcmFtIGJ5dGVzIC0gdGhlIHVpbnQ4YXJyYXkgYnl0ZXNcbiAqIEBwYXJhbSBmb3JtYXQgLSB0aGUgZm9ybWF0IHdlIHVzZSB0byBlbmNvZGUgdGhlIGJ5dGVcbiAqIEByZXR1cm5zIGEgc3RyaW5nIG9mIHRoZSBlbmNvZGVkIHN0cmluZ1xuICovXG5mdW5jdGlvbiB1aW50OEFycmF5VG9TdHJpbmcoYnl0ZXMsIGZvcm1hdCkge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShieXRlcykudG9TdHJpbmcoZm9ybWF0KTtcbn1cbi8qKlxuICogVGhlIGhlbHBlciB0aGF0IHRyYW5zZm9ybXMgc3RyaW5nIHRvIHNwZWNpZmljIGNoYXJhY3RlciBlbmNvZGVkIGJ5dGVzIGFycmF5LlxuICogQHBhcmFtIHZhbHVlIC0gdGhlIHN0cmluZyB0byBiZSBjb252ZXJ0ZWRcbiAqIEBwYXJhbSBmb3JtYXQgLSB0aGUgZm9ybWF0IHdlIHVzZSB0byBkZWNvZGUgdGhlIHZhbHVlXG4gKiBAcmV0dXJucyBhIHVpbnQ4YXJyYXlcbiAqL1xuZnVuY3Rpb24gc3RyaW5nVG9VaW50OEFycmF5KHZhbHVlLCBmb3JtYXQpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20odmFsdWUsIGZvcm1hdCk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ieXRlc0VuY29kaW5nLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc3RyaW5nVG9VaW50OEFycmF5ID0gZXhwb3J0cy51aW50OEFycmF5VG9TdHJpbmcgPSBleHBvcnRzLmlzV2ViV29ya2VyID0gZXhwb3J0cy5pc1JlYWN0TmF0aXZlID0gZXhwb3J0cy5pc0Rlbm8gPSBleHBvcnRzLmlzTm9kZVJ1bnRpbWUgPSBleHBvcnRzLmlzTm9kZUxpa2UgPSBleHBvcnRzLmlzTm9kZSA9IGV4cG9ydHMuaXNCdW4gPSBleHBvcnRzLmlzQnJvd3NlciA9IGV4cG9ydHMucmFuZG9tVVVJRCA9IGV4cG9ydHMub2JqZWN0SGFzUHJvcGVydHkgPSBleHBvcnRzLmlzT2JqZWN0V2l0aFByb3BlcnRpZXMgPSBleHBvcnRzLmlzRGVmaW5lZCA9IGV4cG9ydHMuY29tcHV0ZVNoYTI1NkhtYWMgPSBleHBvcnRzLmNvbXB1dGVTaGEyNTZIYXNoID0gZXhwb3J0cy5nZXRFcnJvck1lc3NhZ2UgPSBleHBvcnRzLmlzRXJyb3IgPSBleHBvcnRzLmlzT2JqZWN0ID0gZXhwb3J0cy5nZXRSYW5kb21JbnRlZ2VySW5jbHVzaXZlID0gZXhwb3J0cy5jcmVhdGVBYm9ydGFibGVQcm9taXNlID0gZXhwb3J0cy5jYW5jZWxhYmxlUHJvbWlzZVJhY2UgPSBleHBvcnRzLmNhbGN1bGF0ZVJldHJ5RGVsYXkgPSBleHBvcnRzLmRlbGF5ID0gdm9pZCAwO1xudmFyIGRlbGF5X2pzXzEgPSByZXF1aXJlKFwiLi9kZWxheS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlbGF5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkZWxheV9qc18xLmRlbGF5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY2FsY3VsYXRlUmV0cnlEZWxheVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZGVsYXlfanNfMS5jYWxjdWxhdGVSZXRyeURlbGF5OyB9IH0pO1xudmFyIGFib3J0ZXJVdGlsc19qc18xID0gcmVxdWlyZShcIi4vYWJvcnRlclV0aWxzLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY2FuY2VsYWJsZVByb21pc2VSYWNlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBhYm9ydGVyVXRpbHNfanNfMS5jYW5jZWxhYmxlUHJvbWlzZVJhY2U7IH0gfSk7XG52YXIgY3JlYXRlQWJvcnRhYmxlUHJvbWlzZV9qc18xID0gcmVxdWlyZShcIi4vY3JlYXRlQWJvcnRhYmxlUHJvbWlzZS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUFib3J0YWJsZVByb21pc2VcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNyZWF0ZUFib3J0YWJsZVByb21pc2VfanNfMS5jcmVhdGVBYm9ydGFibGVQcm9taXNlOyB9IH0pO1xudmFyIHJhbmRvbV9qc18xID0gcmVxdWlyZShcIi4vcmFuZG9tLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZ2V0UmFuZG9tSW50ZWdlckluY2x1c2l2ZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmFuZG9tX2pzXzEuZ2V0UmFuZG9tSW50ZWdlckluY2x1c2l2ZTsgfSB9KTtcbnZhciBvYmplY3RfanNfMSA9IHJlcXVpcmUoXCIuL29iamVjdC5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzT2JqZWN0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBvYmplY3RfanNfMS5pc09iamVjdDsgfSB9KTtcbnZhciBlcnJvcl9qc18xID0gcmVxdWlyZShcIi4vZXJyb3IuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0Vycm9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBlcnJvcl9qc18xLmlzRXJyb3I7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnZXRFcnJvck1lc3NhZ2VcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGVycm9yX2pzXzEuZ2V0RXJyb3JNZXNzYWdlOyB9IH0pO1xudmFyIHNoYTI1Nl9qc18xID0gcmVxdWlyZShcIi4vc2hhMjU2LmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29tcHV0ZVNoYTI1Nkhhc2hcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNoYTI1Nl9qc18xLmNvbXB1dGVTaGEyNTZIYXNoOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29tcHV0ZVNoYTI1NkhtYWNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNoYTI1Nl9qc18xLmNvbXB1dGVTaGEyNTZIbWFjOyB9IH0pO1xudmFyIHR5cGVHdWFyZHNfanNfMSA9IHJlcXVpcmUoXCIuL3R5cGVHdWFyZHMuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0RlZmluZWRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHR5cGVHdWFyZHNfanNfMS5pc0RlZmluZWQ7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc09iamVjdFdpdGhQcm9wZXJ0aWVzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0eXBlR3VhcmRzX2pzXzEuaXNPYmplY3RXaXRoUHJvcGVydGllczsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm9iamVjdEhhc1Byb3BlcnR5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0eXBlR3VhcmRzX2pzXzEub2JqZWN0SGFzUHJvcGVydHk7IH0gfSk7XG52YXIgdXVpZFV0aWxzX2pzXzEgPSByZXF1aXJlKFwiLi91dWlkVXRpbHMuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyYW5kb21VVUlEXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB1dWlkVXRpbHNfanNfMS5yYW5kb21VVUlEOyB9IH0pO1xudmFyIGNoZWNrRW52aXJvbm1lbnRfanNfMSA9IHJlcXVpcmUoXCIuL2NoZWNrRW52aXJvbm1lbnQuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0Jyb3dzZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNoZWNrRW52aXJvbm1lbnRfanNfMS5pc0Jyb3dzZXI7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0J1blwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY2hlY2tFbnZpcm9ubWVudF9qc18xLmlzQnVuOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNOb2RlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjaGVja0Vudmlyb25tZW50X2pzXzEuaXNOb2RlOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNOb2RlTGlrZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY2hlY2tFbnZpcm9ubWVudF9qc18xLmlzTm9kZUxpa2U7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc05vZGVSdW50aW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjaGVja0Vudmlyb25tZW50X2pzXzEuaXNOb2RlUnVudGltZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzRGVub1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY2hlY2tFbnZpcm9ubWVudF9qc18xLmlzRGVubzsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzUmVhY3ROYXRpdmVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNoZWNrRW52aXJvbm1lbnRfanNfMS5pc1JlYWN0TmF0aXZlOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNXZWJXb3JrZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNoZWNrRW52aXJvbm1lbnRfanNfMS5pc1dlYldvcmtlcjsgfSB9KTtcbnZhciBieXRlc0VuY29kaW5nX2pzXzEgPSByZXF1aXJlKFwiLi9ieXRlc0VuY29kaW5nLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidWludDhBcnJheVRvU3RyaW5nXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBieXRlc0VuY29kaW5nX2pzXzEudWludDhBcnJheVRvU3RyaW5nOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3RyaW5nVG9VaW50OEFycmF5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBieXRlc0VuY29kaW5nX2pzXzEuc3RyaW5nVG9VaW50OEFycmF5OyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TYW5pdGl6ZXIgPSB2b2lkIDA7XG5jb25zdCBjb3JlX3V0aWxfMSA9IHJlcXVpcmUoXCJAYXp1cmUvY29yZS11dGlsXCIpO1xuY29uc3QgUmVkYWN0ZWRTdHJpbmcgPSBcIlJFREFDVEVEXCI7XG4vLyBNYWtlIHN1cmUgdGhpcyBsaXN0IGlzIHVwLXRvLWRhdGUgd2l0aCB0aGUgb25lIHVuZGVyIGNvcmUvbG9nZ2VyL1JlYWRtZSNLZXljb25jZXB0c1xuY29uc3QgZGVmYXVsdEFsbG93ZWRIZWFkZXJOYW1lcyA9IFtcbiAgICBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICBcIngtbXMtcmV0dXJuLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgXCJ4LW1zLXVzZXJhZ2VudFwiLFxuICAgIFwieC1tcy1jb3JyZWxhdGlvbi1yZXF1ZXN0LWlkXCIsXG4gICAgXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICBcImNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgXCJtcy1jdlwiLFxuICAgIFwicmV0dXJuLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgXCJ0cmFjZXBhcmVudFwiLFxuICAgIFwiQWNjZXNzLUNvbnRyb2wtQWxsb3ctQ3JlZGVudGlhbHNcIixcbiAgICBcIkFjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnNcIixcbiAgICBcIkFjY2Vzcy1Db250cm9sLUFsbG93LU1ldGhvZHNcIixcbiAgICBcIkFjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpblwiLFxuICAgIFwiQWNjZXNzLUNvbnRyb2wtRXhwb3NlLUhlYWRlcnNcIixcbiAgICBcIkFjY2Vzcy1Db250cm9sLU1heC1BZ2VcIixcbiAgICBcIkFjY2Vzcy1Db250cm9sLVJlcXVlc3QtSGVhZGVyc1wiLFxuICAgIFwiQWNjZXNzLUNvbnRyb2wtUmVxdWVzdC1NZXRob2RcIixcbiAgICBcIk9yaWdpblwiLFxuICAgIFwiQWNjZXB0XCIsXG4gICAgXCJBY2NlcHQtRW5jb2RpbmdcIixcbiAgICBcIkNhY2hlLUNvbnRyb2xcIixcbiAgICBcIkNvbm5lY3Rpb25cIixcbiAgICBcIkNvbnRlbnQtTGVuZ3RoXCIsXG4gICAgXCJDb250ZW50LVR5cGVcIixcbiAgICBcIkRhdGVcIixcbiAgICBcIkVUYWdcIixcbiAgICBcIkV4cGlyZXNcIixcbiAgICBcIklmLU1hdGNoXCIsXG4gICAgXCJJZi1Nb2RpZmllZC1TaW5jZVwiLFxuICAgIFwiSWYtTm9uZS1NYXRjaFwiLFxuICAgIFwiSWYtVW5tb2RpZmllZC1TaW5jZVwiLFxuICAgIFwiTGFzdC1Nb2RpZmllZFwiLFxuICAgIFwiUHJhZ21hXCIsXG4gICAgXCJSZXF1ZXN0LUlkXCIsXG4gICAgXCJSZXRyeS1BZnRlclwiLFxuICAgIFwiU2VydmVyXCIsXG4gICAgXCJUcmFuc2Zlci1FbmNvZGluZ1wiLFxuICAgIFwiVXNlci1BZ2VudFwiLFxuICAgIFwiV1dXLUF1dGhlbnRpY2F0ZVwiLFxuXTtcbmNvbnN0IGRlZmF1bHRBbGxvd2VkUXVlcnlQYXJhbWV0ZXJzID0gW1wiYXBpLXZlcnNpb25cIl07XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5jbGFzcyBTYW5pdGl6ZXIge1xuICAgIGNvbnN0cnVjdG9yKHsgYWRkaXRpb25hbEFsbG93ZWRIZWFkZXJOYW1lczogYWxsb3dlZEhlYWRlck5hbWVzID0gW10sIGFkZGl0aW9uYWxBbGxvd2VkUXVlcnlQYXJhbWV0ZXJzOiBhbGxvd2VkUXVlcnlQYXJhbWV0ZXJzID0gW10sIH0gPSB7fSkge1xuICAgICAgICBhbGxvd2VkSGVhZGVyTmFtZXMgPSBkZWZhdWx0QWxsb3dlZEhlYWRlck5hbWVzLmNvbmNhdChhbGxvd2VkSGVhZGVyTmFtZXMpO1xuICAgICAgICBhbGxvd2VkUXVlcnlQYXJhbWV0ZXJzID0gZGVmYXVsdEFsbG93ZWRRdWVyeVBhcmFtZXRlcnMuY29uY2F0KGFsbG93ZWRRdWVyeVBhcmFtZXRlcnMpO1xuICAgICAgICB0aGlzLmFsbG93ZWRIZWFkZXJOYW1lcyA9IG5ldyBTZXQoYWxsb3dlZEhlYWRlck5hbWVzLm1hcCgobikgPT4gbi50b0xvd2VyQ2FzZSgpKSk7XG4gICAgICAgIHRoaXMuYWxsb3dlZFF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBTZXQoYWxsb3dlZFF1ZXJ5UGFyYW1ldGVycy5tYXAoKHApID0+IHAudG9Mb3dlckNhc2UoKSkpO1xuICAgIH1cbiAgICBzYW5pdGl6ZShvYmopIHtcbiAgICAgICAgY29uc3Qgc2VlbiA9IG5ldyBTZXQoKTtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iaiwgKGtleSwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgIC8vIEVuc3VyZSBFcnJvcnMgaW5jbHVkZSB0aGVpciBpbnRlcmVzdGluZyBub24tZW51bWVyYWJsZSBtZW1iZXJzXG4gICAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHZhbHVlKSwgeyBuYW1lOiB2YWx1ZS5uYW1lLCBtZXNzYWdlOiB2YWx1ZS5tZXNzYWdlIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGtleSA9PT0gXCJoZWFkZXJzXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZUhlYWRlcnModmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoa2V5ID09PSBcInVybFwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2FuaXRpemVVcmwodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoa2V5ID09PSBcInF1ZXJ5XCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZVF1ZXJ5KHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSA9PT0gXCJib2R5XCIpIHtcbiAgICAgICAgICAgICAgICAvLyBEb24ndCBsb2cgdGhlIHJlcXVlc3QgYm9keVxuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChrZXkgPT09IFwicmVzcG9uc2VcIikge1xuICAgICAgICAgICAgICAgIC8vIERvbid0IGxvZyByZXNwb25zZSBhZ2FpblxuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChrZXkgPT09IFwib3BlcmF0aW9uU3BlY1wiKSB7XG4gICAgICAgICAgICAgICAgLy8gV2hlbiB1c2luZyBzZW5kT3BlcmF0aW9uUmVxdWVzdCwgdGhlIHJlcXVlc3QgY2FycmllcyBhIG1hc3NpdmVcbiAgICAgICAgICAgICAgICAvLyBmaWVsZCB3aXRoIHRoZSBhdXRvcmVzdCBzcGVjLiBObyBuZWVkIHRvIGxvZyBpdC5cbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgfHwgKDAsIGNvcmVfdXRpbF8xLmlzT2JqZWN0KSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2Vlbi5oYXModmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcIltDaXJjdWxhcl1cIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2Vlbi5hZGQodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9LCAyKTtcbiAgICB9XG4gICAgc2FuaXRpemVVcmwodmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJzdHJpbmdcIiB8fCB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gXCJcIikge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwodmFsdWUpO1xuICAgICAgICBpZiAoIXVybC5zZWFyY2gpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IFtrZXldIG9mIHVybC5zZWFyY2hQYXJhbXMpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5hbGxvd2VkUXVlcnlQYXJhbWV0ZXJzLmhhcyhrZXkudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgICAgICB1cmwuc2VhcmNoUGFyYW1zLnNldChrZXksIFJlZGFjdGVkU3RyaW5nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdXJsLnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIHNhbml0aXplSGVhZGVycyhvYmopIHtcbiAgICAgICAgY29uc3Qgc2FuaXRpemVkID0ge307XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG9iaikpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmFsbG93ZWRIZWFkZXJOYW1lcy5oYXMoa2V5LnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICAgICAgc2FuaXRpemVkW2tleV0gPSBvYmpba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHNhbml0aXplZFtrZXldID0gUmVkYWN0ZWRTdHJpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNhbml0aXplZDtcbiAgICB9XG4gICAgc2FuaXRpemVRdWVyeSh2YWx1ZSkge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2FuaXRpemVkID0ge307XG4gICAgICAgIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmFsbG93ZWRRdWVyeVBhcmFtZXRlcnMuaGFzKGsudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgICAgICBzYW5pdGl6ZWRba10gPSB2YWx1ZVtrXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHNhbml0aXplZFtrXSA9IFJlZGFjdGVkU3RyaW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzYW5pdGl6ZWQ7XG4gICAgfVxufVxuZXhwb3J0cy5TYW5pdGl6ZXIgPSBTYW5pdGl6ZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zYW5pdGl6ZXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5sb2dQb2xpY3lOYW1lID0gdm9pZCAwO1xuZXhwb3J0cy5sb2dQb2xpY3kgPSBsb2dQb2xpY3k7XG5jb25zdCBsb2dfanNfMSA9IHJlcXVpcmUoXCIuLi9sb2cuanNcIik7XG5jb25zdCBzYW5pdGl6ZXJfanNfMSA9IHJlcXVpcmUoXCIuLi91dGlsL3Nhbml0aXplci5qc1wiKTtcbi8qKlxuICogVGhlIHByb2dyYW1tYXRpYyBpZGVudGlmaWVyIG9mIHRoZSBsb2dQb2xpY3kuXG4gKi9cbmV4cG9ydHMubG9nUG9saWN5TmFtZSA9IFwibG9nUG9saWN5XCI7XG4vKipcbiAqIEEgcG9saWN5IHRoYXQgbG9ncyBhbGwgcmVxdWVzdHMgYW5kIHJlc3BvbnNlcy5cbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBjb25maWd1cmUgbG9nUG9saWN5LlxuICovXG5mdW5jdGlvbiBsb2dQb2xpY3kob3B0aW9ucyA9IHt9KSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IGxvZ2dlciA9IChfYSA9IG9wdGlvbnMubG9nZ2VyKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBsb2dfanNfMS5sb2dnZXIuaW5mbztcbiAgICBjb25zdCBzYW5pdGl6ZXIgPSBuZXcgc2FuaXRpemVyX2pzXzEuU2FuaXRpemVyKHtcbiAgICAgICAgYWRkaXRpb25hbEFsbG93ZWRIZWFkZXJOYW1lczogb3B0aW9ucy5hZGRpdGlvbmFsQWxsb3dlZEhlYWRlck5hbWVzLFxuICAgICAgICBhZGRpdGlvbmFsQWxsb3dlZFF1ZXJ5UGFyYW1ldGVyczogb3B0aW9ucy5hZGRpdGlvbmFsQWxsb3dlZFF1ZXJ5UGFyYW1ldGVycyxcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBleHBvcnRzLmxvZ1BvbGljeU5hbWUsXG4gICAgICAgIGFzeW5jIHNlbmRSZXF1ZXN0KHJlcXVlc3QsIG5leHQpIHtcbiAgICAgICAgICAgIGlmICghbG9nZ2VyLmVuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dChyZXF1ZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxvZ2dlcihgUmVxdWVzdDogJHtzYW5pdGl6ZXIuc2FuaXRpemUocmVxdWVzdCl9YCk7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG5leHQocmVxdWVzdCk7XG4gICAgICAgICAgICBsb2dnZXIoYFJlc3BvbnNlIHN0YXR1cyBjb2RlOiAke3Jlc3BvbnNlLnN0YXR1c31gKTtcbiAgICAgICAgICAgIGxvZ2dlcihgSGVhZGVyczogJHtzYW5pdGl6ZXIuc2FuaXRpemUocmVzcG9uc2UuaGVhZGVycyl9YCk7XG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxvZ1BvbGljeS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlZGlyZWN0UG9saWN5TmFtZSA9IHZvaWQgMDtcbmV4cG9ydHMucmVkaXJlY3RQb2xpY3kgPSByZWRpcmVjdFBvbGljeTtcbi8qKlxuICogVGhlIHByb2dyYW1tYXRpYyBpZGVudGlmaWVyIG9mIHRoZSByZWRpcmVjdFBvbGljeS5cbiAqL1xuZXhwb3J0cy5yZWRpcmVjdFBvbGljeU5hbWUgPSBcInJlZGlyZWN0UG9saWN5XCI7XG4vKipcbiAqIE1ldGhvZHMgdGhhdCBhcmUgYWxsb3dlZCB0byBmb2xsb3cgcmVkaXJlY3RzIDMwMSBhbmQgMzAyXG4gKi9cbmNvbnN0IGFsbG93ZWRSZWRpcmVjdCA9IFtcIkdFVFwiLCBcIkhFQURcIl07XG4vKipcbiAqIEEgcG9saWN5IHRvIGZvbGxvdyBMb2NhdGlvbiBoZWFkZXJzIGZyb20gdGhlIHNlcnZlciBpbiBvcmRlclxuICogdG8gc3VwcG9ydCBzZXJ2ZXItc2lkZSByZWRpcmVjdGlvbi5cbiAqIEluIHRoZSBicm93c2VyLCB0aGlzIHBvbGljeSBpcyBub3QgdXNlZC5cbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBjb250cm9sIHBvbGljeSBiZWhhdmlvci5cbiAqL1xuZnVuY3Rpb24gcmVkaXJlY3RQb2xpY3kob3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgeyBtYXhSZXRyaWVzID0gMjAgfSA9IG9wdGlvbnM7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogZXhwb3J0cy5yZWRpcmVjdFBvbGljeU5hbWUsXG4gICAgICAgIGFzeW5jIHNlbmRSZXF1ZXN0KHJlcXVlc3QsIG5leHQpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgbmV4dChyZXF1ZXN0KTtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVSZWRpcmVjdChuZXh0LCByZXNwb25zZSwgbWF4UmV0cmllcyk7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZVJlZGlyZWN0KG5leHQsIHJlc3BvbnNlLCBtYXhSZXRyaWVzLCBjdXJyZW50UmV0cmllcyA9IDApIHtcbiAgICBjb25zdCB7IHJlcXVlc3QsIHN0YXR1cywgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgY29uc3QgbG9jYXRpb25IZWFkZXIgPSBoZWFkZXJzLmdldChcImxvY2F0aW9uXCIpO1xuICAgIGlmIChsb2NhdGlvbkhlYWRlciAmJlxuICAgICAgICAoc3RhdHVzID09PSAzMDAgfHxcbiAgICAgICAgICAgIChzdGF0dXMgPT09IDMwMSAmJiBhbGxvd2VkUmVkaXJlY3QuaW5jbHVkZXMocmVxdWVzdC5tZXRob2QpKSB8fFxuICAgICAgICAgICAgKHN0YXR1cyA9PT0gMzAyICYmIGFsbG93ZWRSZWRpcmVjdC5pbmNsdWRlcyhyZXF1ZXN0Lm1ldGhvZCkpIHx8XG4gICAgICAgICAgICAoc3RhdHVzID09PSAzMDMgJiYgcmVxdWVzdC5tZXRob2QgPT09IFwiUE9TVFwiKSB8fFxuICAgICAgICAgICAgc3RhdHVzID09PSAzMDcpICYmXG4gICAgICAgIGN1cnJlbnRSZXRyaWVzIDwgbWF4UmV0cmllcykge1xuICAgICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKGxvY2F0aW9uSGVhZGVyLCByZXF1ZXN0LnVybCk7XG4gICAgICAgIHJlcXVlc3QudXJsID0gdXJsLnRvU3RyaW5nKCk7XG4gICAgICAgIC8vIFBPU1QgcmVxdWVzdCB3aXRoIFN0YXR1cyBjb2RlIDMwMyBzaG91bGQgYmUgY29udmVydGVkIGludG8gYVxuICAgICAgICAvLyByZWRpcmVjdGVkIEdFVCByZXF1ZXN0IGlmIHRoZSByZWRpcmVjdCB1cmwgaXMgcHJlc2VudCBpbiB0aGUgbG9jYXRpb24gaGVhZGVyXG4gICAgICAgIGlmIChzdGF0dXMgPT09IDMwMykge1xuICAgICAgICAgICAgcmVxdWVzdC5tZXRob2QgPSBcIkdFVFwiO1xuICAgICAgICAgICAgcmVxdWVzdC5oZWFkZXJzLmRlbGV0ZShcIkNvbnRlbnQtTGVuZ3RoXCIpO1xuICAgICAgICAgICAgZGVsZXRlIHJlcXVlc3QuYm9keTtcbiAgICAgICAgfVxuICAgICAgICByZXF1ZXN0LmhlYWRlcnMuZGVsZXRlKFwiQXV0aG9yaXphdGlvblwiKTtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgbmV4dChyZXF1ZXN0KTtcbiAgICAgICAgcmV0dXJuIGhhbmRsZVJlZGlyZWN0KG5leHQsIHJlcywgbWF4UmV0cmllcywgY3VycmVudFJldHJpZXMgKyAxKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3BvbnNlO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVkaXJlY3RQb2xpY3kuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRIZWFkZXJOYW1lID0gZ2V0SGVhZGVyTmFtZTtcbmV4cG9ydHMuc2V0UGxhdGZvcm1TcGVjaWZpY0RhdGEgPSBzZXRQbGF0Zm9ybVNwZWNpZmljRGF0YTtcbmNvbnN0IHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XG5jb25zdCBvcyA9IHRzbGliXzEuX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJub2RlOm9zXCIpKTtcbmNvbnN0IHByb2Nlc3MgPSB0c2xpYl8xLl9faW1wb3J0U3RhcihyZXF1aXJlKFwibm9kZTpwcm9jZXNzXCIpKTtcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIGdldEhlYWRlck5hbWUoKSB7XG4gICAgcmV0dXJuIFwiVXNlci1BZ2VudFwiO1xufVxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuYXN5bmMgZnVuY3Rpb24gc2V0UGxhdGZvcm1TcGVjaWZpY0RhdGEobWFwKSB7XG4gICAgaWYgKHByb2Nlc3MgJiYgcHJvY2Vzcy52ZXJzaW9ucykge1xuICAgICAgICBjb25zdCB2ZXJzaW9ucyA9IHByb2Nlc3MudmVyc2lvbnM7XG4gICAgICAgIGlmICh2ZXJzaW9ucy5idW4pIHtcbiAgICAgICAgICAgIG1hcC5zZXQoXCJCdW5cIiwgdmVyc2lvbnMuYnVuKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2ZXJzaW9ucy5kZW5vKSB7XG4gICAgICAgICAgICBtYXAuc2V0KFwiRGVub1wiLCB2ZXJzaW9ucy5kZW5vKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2ZXJzaW9ucy5ub2RlKSB7XG4gICAgICAgICAgICBtYXAuc2V0KFwiTm9kZVwiLCB2ZXJzaW9ucy5ub2RlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBtYXAuc2V0KFwiT1NcIiwgYCgke29zLmFyY2goKX0tJHtvcy50eXBlKCl9LSR7b3MucmVsZWFzZSgpfSlgKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzZXJBZ2VudFBsYXRmb3JtLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuREVGQVVMVF9SRVRSWV9QT0xJQ1lfQ09VTlQgPSBleHBvcnRzLlNES19WRVJTSU9OID0gdm9pZCAwO1xuZXhwb3J0cy5TREtfVkVSU0lPTiA9IFwiMS4xNy4wXCI7XG5leHBvcnRzLkRFRkFVTFRfUkVUUllfUE9MSUNZX0NPVU5UID0gMztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0YW50cy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldFVzZXJBZ2VudEhlYWRlck5hbWUgPSBnZXRVc2VyQWdlbnRIZWFkZXJOYW1lO1xuZXhwb3J0cy5nZXRVc2VyQWdlbnRWYWx1ZSA9IGdldFVzZXJBZ2VudFZhbHVlO1xuY29uc3QgdXNlckFnZW50UGxhdGZvcm1fanNfMSA9IHJlcXVpcmUoXCIuL3VzZXJBZ2VudFBsYXRmb3JtLmpzXCIpO1xuY29uc3QgY29uc3RhbnRzX2pzXzEgPSByZXF1aXJlKFwiLi4vY29uc3RhbnRzLmpzXCIpO1xuZnVuY3Rpb24gZ2V0VXNlckFnZW50U3RyaW5nKHRlbGVtZXRyeUluZm8pIHtcbiAgICBjb25zdCBwYXJ0cyA9IFtdO1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHRlbGVtZXRyeUluZm8pIHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSB2YWx1ZSA/IGAke2tleX0vJHt2YWx1ZX1gIDoga2V5O1xuICAgICAgICBwYXJ0cy5wdXNoKHRva2VuKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnRzLmpvaW4oXCIgXCIpO1xufVxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gZ2V0VXNlckFnZW50SGVhZGVyTmFtZSgpIHtcbiAgICByZXR1cm4gKDAsIHVzZXJBZ2VudFBsYXRmb3JtX2pzXzEuZ2V0SGVhZGVyTmFtZSkoKTtcbn1cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFVzZXJBZ2VudFZhbHVlKHByZWZpeCkge1xuICAgIGNvbnN0IHJ1bnRpbWVJbmZvID0gbmV3IE1hcCgpO1xuICAgIHJ1bnRpbWVJbmZvLnNldChcImNvcmUtcmVzdC1waXBlbGluZVwiLCBjb25zdGFudHNfanNfMS5TREtfVkVSU0lPTik7XG4gICAgYXdhaXQgKDAsIHVzZXJBZ2VudFBsYXRmb3JtX2pzXzEuc2V0UGxhdGZvcm1TcGVjaWZpY0RhdGEpKHJ1bnRpbWVJbmZvKTtcbiAgICBjb25zdCBkZWZhdWx0QWdlbnQgPSBnZXRVc2VyQWdlbnRTdHJpbmcocnVudGltZUluZm8pO1xuICAgIGNvbnN0IHVzZXJBZ2VudFZhbHVlID0gcHJlZml4ID8gYCR7cHJlZml4fSAke2RlZmF1bHRBZ2VudH1gIDogZGVmYXVsdEFnZW50O1xuICAgIHJldHVybiB1c2VyQWdlbnRWYWx1ZTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzZXJBZ2VudC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnVzZXJBZ2VudFBvbGljeU5hbWUgPSB2b2lkIDA7XG5leHBvcnRzLnVzZXJBZ2VudFBvbGljeSA9IHVzZXJBZ2VudFBvbGljeTtcbmNvbnN0IHVzZXJBZ2VudF9qc18xID0gcmVxdWlyZShcIi4uL3V0aWwvdXNlckFnZW50LmpzXCIpO1xuY29uc3QgVXNlckFnZW50SGVhZGVyTmFtZSA9ICgwLCB1c2VyQWdlbnRfanNfMS5nZXRVc2VyQWdlbnRIZWFkZXJOYW1lKSgpO1xuLyoqXG4gKiBUaGUgcHJvZ3JhbW1hdGljIGlkZW50aWZpZXIgb2YgdGhlIHVzZXJBZ2VudFBvbGljeS5cbiAqL1xuZXhwb3J0cy51c2VyQWdlbnRQb2xpY3lOYW1lID0gXCJ1c2VyQWdlbnRQb2xpY3lcIjtcbi8qKlxuICogQSBwb2xpY3kgdGhhdCBzZXRzIHRoZSBVc2VyLUFnZW50IGhlYWRlciAob3IgZXF1aXZhbGVudCkgdG8gcmVmbGVjdFxuICogdGhlIGxpYnJhcnkgdmVyc2lvbi5cbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBjdXN0b21pemUgdGhlIHVzZXIgYWdlbnQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHVzZXJBZ2VudFBvbGljeShvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCB1c2VyQWdlbnRWYWx1ZSA9ICgwLCB1c2VyQWdlbnRfanNfMS5nZXRVc2VyQWdlbnRWYWx1ZSkob3B0aW9ucy51c2VyQWdlbnRQcmVmaXgpO1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGV4cG9ydHMudXNlckFnZW50UG9saWN5TmFtZSxcbiAgICAgICAgYXN5bmMgc2VuZFJlcXVlc3QocmVxdWVzdCwgbmV4dCkge1xuICAgICAgICAgICAgaWYgKCFyZXF1ZXN0LmhlYWRlcnMuaGFzKFVzZXJBZ2VudEhlYWRlck5hbWUpKSB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdC5oZWFkZXJzLnNldChVc2VyQWdlbnRIZWFkZXJOYW1lLCBhd2FpdCB1c2VyQWdlbnRWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV4dChyZXF1ZXN0KTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXNlckFnZW50UG9saWN5LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNOb2RlUmVhZGFibGVTdHJlYW0gPSBpc05vZGVSZWFkYWJsZVN0cmVhbTtcbmV4cG9ydHMuaXNXZWJSZWFkYWJsZVN0cmVhbSA9IGlzV2ViUmVhZGFibGVTdHJlYW07XG5leHBvcnRzLmlzUmVhZGFibGVTdHJlYW0gPSBpc1JlYWRhYmxlU3RyZWFtO1xuZXhwb3J0cy5pc0Jsb2IgPSBpc0Jsb2I7XG5mdW5jdGlvbiBpc05vZGVSZWFkYWJsZVN0cmVhbSh4KSB7XG4gICAgcmV0dXJuIEJvb2xlYW4oeCAmJiB0eXBlb2YgeFtcInBpcGVcIl0gPT09IFwiZnVuY3Rpb25cIik7XG59XG5mdW5jdGlvbiBpc1dlYlJlYWRhYmxlU3RyZWFtKHgpIHtcbiAgICByZXR1cm4gQm9vbGVhbih4ICYmXG4gICAgICAgIHR5cGVvZiB4LmdldFJlYWRlciA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgICAgIHR5cGVvZiB4LnRlZSA9PT0gXCJmdW5jdGlvblwiKTtcbn1cbmZ1bmN0aW9uIGlzUmVhZGFibGVTdHJlYW0oeCkge1xuICAgIHJldHVybiBpc05vZGVSZWFkYWJsZVN0cmVhbSh4KSB8fCBpc1dlYlJlYWRhYmxlU3RyZWFtKHgpO1xufVxuZnVuY3Rpb24gaXNCbG9iKHgpIHtcbiAgICByZXR1cm4gdHlwZW9mIHguc3RyZWFtID09PSBcImZ1bmN0aW9uXCI7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD10eXBlR3VhcmRzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0UmF3Q29udGVudCA9IGdldFJhd0NvbnRlbnQ7XG5leHBvcnRzLmNyZWF0ZUZpbGVGcm9tU3RyZWFtID0gY3JlYXRlRmlsZUZyb21TdHJlYW07XG5leHBvcnRzLmNyZWF0ZUZpbGUgPSBjcmVhdGVGaWxlO1xuY29uc3QgY29yZV91dGlsXzEgPSByZXF1aXJlKFwiQGF6dXJlL2NvcmUtdXRpbFwiKTtcbmNvbnN0IHR5cGVHdWFyZHNfanNfMSA9IHJlcXVpcmUoXCIuL3R5cGVHdWFyZHMuanNcIik7XG5jb25zdCB1bmltcGxlbWVudGVkTWV0aG9kcyA9IHtcbiAgICBhcnJheUJ1ZmZlcjogKCkgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJOb3QgaW1wbGVtZW50ZWRcIik7XG4gICAgfSxcbiAgICBzbGljZTogKCkgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJOb3QgaW1wbGVtZW50ZWRcIik7XG4gICAgfSxcbiAgICB0ZXh0OiAoKSA9PiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgICB9LFxufTtcbi8qKlxuICogUHJpdmF0ZSBzeW1ib2wgdXNlZCBhcyBrZXkgb24gb2JqZWN0cyBjcmVhdGVkIHVzaW5nIGNyZWF0ZUZpbGUgY29udGFpbmluZyB0aGVcbiAqIG9yaWdpbmFsIHNvdXJjZSBvZiB0aGUgZmlsZSBvYmplY3QuXG4gKlxuICogVGhpcyBpcyB1c2VkIGluIE5vZGUgdG8gYWNjZXNzIHRoZSBvcmlnaW5hbCBOb2RlIHN0cmVhbSB3aXRob3V0IHVzaW5nIEJsb2Ijc3RyZWFtLCB3aGljaFxuICogcmV0dXJucyBhIHdlYiBzdHJlYW0uIFRoaXMgaXMgZG9uZSB0byBhdm9pZCBhIGNvdXBsZSBvZiBidWdzIHRvIGRvIHdpdGggQmxvYiNzdHJlYW0gYW5kXG4gKiBSZWFkYWJsZSN0by9mcm9tV2ViIGluIE5vZGUgdmVyc2lvbnMgd2Ugc3VwcG9ydDpcbiAqIC0gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2lzc3Vlcy80MjY5NCAoZml4ZWQgaW4gTm9kZSAxOC4xNClcbiAqIC0gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2lzc3Vlcy80ODkxNiAoZml4ZWQgaW4gTm9kZSAyMC42KVxuICpcbiAqIE9uY2UgdGhlc2UgdmVyc2lvbnMgYXJlIG5vIGxvbmdlciBzdXBwb3J0ZWQsIHdlIG1heSBiZSBhYmxlIHRvIHN0b3AgZG9pbmcgdGhpcy5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuY29uc3QgcmF3Q29udGVudCA9IFN5bWJvbChcInJhd0NvbnRlbnRcIik7XG5mdW5jdGlvbiBoYXNSYXdDb250ZW50KHgpIHtcbiAgICByZXR1cm4gdHlwZW9mIHhbcmF3Q29udGVudF0gPT09IFwiZnVuY3Rpb25cIjtcbn1cbi8qKlxuICogRXh0cmFjdCB0aGUgcmF3IGNvbnRlbnQgZnJvbSBhIGdpdmVuIGJsb2ItbGlrZSBvYmplY3QuIElmIHRoZSBpbnB1dCB3YXMgY3JlYXRlZCB1c2luZyBjcmVhdGVGaWxlXG4gKiBvciBjcmVhdGVGaWxlRnJvbVN0cmVhbSwgdGhlIGV4YWN0IGNvbnRlbnQgcGFzc2VkIGludG8gY3JlYXRlRmlsZS9jcmVhdGVGaWxlRnJvbVN0cmVhbSB3aWxsIGJlIHVzZWQuXG4gKiBGb3IgdHJ1ZSBpbnN0YW5jZXMgb2YgQmxvYiBhbmQgRmlsZSwgcmV0dXJucyB0aGUgYmxvYidzIGNvbnRlbnQgYXMgYSBXZWIgUmVhZGFibGVTdHJlYW08VWludDhBcnJheT4uXG4gKlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIGdldFJhd0NvbnRlbnQoYmxvYikge1xuICAgIGlmIChoYXNSYXdDb250ZW50KGJsb2IpKSB7XG4gICAgICAgIHJldHVybiBibG9iW3Jhd0NvbnRlbnRdKCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gYmxvYi5zdHJlYW0oKTtcbiAgICB9XG59XG4vKipcbiAqIENyZWF0ZSBhbiBvYmplY3QgdGhhdCBpbXBsZW1lbnRzIHRoZSBGaWxlIGludGVyZmFjZS4gVGhpcyBvYmplY3QgaXMgaW50ZW5kZWQgdG8gYmVcbiAqIHBhc3NlZCBpbnRvIFJlcXVlc3RCb2R5VHlwZS5mb3JtRGF0YSwgYW5kIGlzIG5vdCBndWFyYW50ZWVkIHRvIHdvcmsgYXMgZXhwZWN0ZWQgaW5cbiAqIG90aGVyIHNpdHVhdGlvbnMuXG4gKlxuICogVXNlIHRoaXMgZnVuY3Rpb24gdG86XG4gKiAtIENyZWF0ZSBhIEZpbGUgb2JqZWN0IGZvciB1c2UgaW4gUmVxdWVzdEJvZHlUeXBlLmZvcm1EYXRhIGluIGVudmlyb25tZW50cyB3aGVyZSB0aGVcbiAqICAgZ2xvYmFsIEZpbGUgb2JqZWN0IGlzIHVuYXZhaWxhYmxlLlxuICogLSBDcmVhdGUgYSBGaWxlLWxpa2Ugb2JqZWN0IGZyb20gYSByZWFkYWJsZSBzdHJlYW0gd2l0aG91dCByZWFkaW5nIHRoZSBzdHJlYW0gaW50byBtZW1vcnkuXG4gKlxuICogQHBhcmFtIHN0cmVhbSAtIHRoZSBjb250ZW50IG9mIHRoZSBmaWxlIGFzIGEgY2FsbGJhY2sgcmV0dXJuaW5nIGEgc3RyZWFtLiBXaGVuIGEgRmlsZSBvYmplY3QgbWFkZSB1c2luZyBjcmVhdGVGaWxlIGlzXG4gKiAgICAgICAgICAgICAgICAgIHBhc3NlZCBpbiBhIHJlcXVlc3QncyBmb3JtIGRhdGEgbWFwLCB0aGUgc3RyZWFtIHdpbGwgbm90IGJlIHJlYWQgaW50byBtZW1vcnlcbiAqICAgICAgICAgICAgICAgICAgYW5kIGluc3RlYWQgd2lsbCBiZSBzdHJlYW1lZCB3aGVuIHRoZSByZXF1ZXN0IGlzIG1hZGUuIEluIHRoZSBldmVudCBvZiBhIHJldHJ5LCB0aGVcbiAqICAgICAgICAgICAgICAgICAgc3RyZWFtIG5lZWRzIHRvIGJlIHJlYWQgYWdhaW4sIHNvIHRoaXMgY2FsbGJhY2sgU0hPVUxEIHJldHVybiBhIGZyZXNoIHN0cmVhbSBpZiBwb3NzaWJsZS5cbiAqIEBwYXJhbSBuYW1lIC0gdGhlIG5hbWUgb2YgdGhlIGZpbGUuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIG9wdGlvbmFsIG1ldGFkYXRhIGFib3V0IHRoZSBmaWxlLCBlLmcuIGZpbGUgbmFtZSwgZmlsZSBzaXplLCBNSU1FIHR5cGUuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUZpbGVGcm9tU3RyZWFtKHN0cmVhbSwgbmFtZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgdmFyIF9hLCBfYiwgX2MsIF9kO1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHVuaW1wbGVtZW50ZWRNZXRob2RzKSwgeyB0eXBlOiAoX2EgPSBvcHRpb25zLnR5cGUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFwiXCIsIGxhc3RNb2RpZmllZDogKF9iID0gb3B0aW9ucy5sYXN0TW9kaWZpZWQpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IG5ldyBEYXRlKCkuZ2V0VGltZSgpLCB3ZWJraXRSZWxhdGl2ZVBhdGg6IChfYyA9IG9wdGlvbnMud2Via2l0UmVsYXRpdmVQYXRoKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiBcIlwiLCBzaXplOiAoX2QgPSBvcHRpb25zLnNpemUpICE9PSBudWxsICYmIF9kICE9PSB2b2lkIDAgPyBfZCA6IC0xLCBuYW1lLCBzdHJlYW06ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHMgPSBzdHJlYW0oKTtcbiAgICAgICAgICAgIGlmICgoMCwgdHlwZUd1YXJkc19qc18xLmlzTm9kZVJlYWRhYmxlU3RyZWFtKShzKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vdCBzdXBwb3J0ZWQ6IGEgTm9kZSBzdHJlYW0gd2FzIHByb3ZpZGVkIGFzIGlucHV0IHRvIGNyZWF0ZUZpbGVGcm9tU3RyZWFtLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzO1xuICAgICAgICB9LCBbcmF3Q29udGVudF06IHN0cmVhbSB9KTtcbn1cbi8qKlxuICogQ3JlYXRlIGFuIG9iamVjdCB0aGF0IGltcGxlbWVudHMgdGhlIEZpbGUgaW50ZXJmYWNlLiBUaGlzIG9iamVjdCBpcyBpbnRlbmRlZCB0byBiZVxuICogcGFzc2VkIGludG8gUmVxdWVzdEJvZHlUeXBlLmZvcm1EYXRhLCBhbmQgaXMgbm90IGd1YXJhbnRlZWQgdG8gd29yayBhcyBleHBlY3RlZCBpblxuICogb3RoZXIgc2l0dWF0aW9ucy5cbiAqXG4gKiBVc2UgdGhpcyBmdW5jdGlvbiBjcmVhdGUgYSBGaWxlIG9iamVjdCBmb3IgdXNlIGluIFJlcXVlc3RCb2R5VHlwZS5mb3JtRGF0YSBpbiBlbnZpcm9ubWVudHMgd2hlcmUgdGhlIGdsb2JhbCBGaWxlIG9iamVjdCBpcyB1bmF2YWlsYWJsZS5cbiAqXG4gKiBAcGFyYW0gY29udGVudCAtIHRoZSBjb250ZW50IG9mIHRoZSBmaWxlIGFzIGEgVWludDhBcnJheSBpbiBtZW1vcnkuXG4gKiBAcGFyYW0gbmFtZSAtIHRoZSBuYW1lIG9mIHRoZSBmaWxlLlxuICogQHBhcmFtIG9wdGlvbnMgLSBvcHRpb25hbCBtZXRhZGF0YSBhYm91dCB0aGUgZmlsZSwgZS5nLiBmaWxlIG5hbWUsIGZpbGUgc2l6ZSwgTUlNRSB0eXBlLlxuICovXG5mdW5jdGlvbiBjcmVhdGVGaWxlKGNvbnRlbnQsIG5hbWUsIG9wdGlvbnMgPSB7fSkge1xuICAgIHZhciBfYSwgX2IsIF9jO1xuICAgIGlmIChjb3JlX3V0aWxfMS5pc05vZGVMaWtlKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHVuaW1wbGVtZW50ZWRNZXRob2RzKSwgeyB0eXBlOiAoX2EgPSBvcHRpb25zLnR5cGUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFwiXCIsIGxhc3RNb2RpZmllZDogKF9iID0gb3B0aW9ucy5sYXN0TW9kaWZpZWQpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IG5ldyBEYXRlKCkuZ2V0VGltZSgpLCB3ZWJraXRSZWxhdGl2ZVBhdGg6IChfYyA9IG9wdGlvbnMud2Via2l0UmVsYXRpdmVQYXRoKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiBcIlwiLCBzaXplOiBjb250ZW50LmJ5dGVMZW5ndGgsIG5hbWUsIGFycmF5QnVmZmVyOiBhc3luYyAoKSA9PiBjb250ZW50LmJ1ZmZlciwgc3RyZWFtOiAoKSA9PiBuZXcgQmxvYihbY29udGVudF0pLnN0cmVhbSgpLCBbcmF3Q29udGVudF06ICgpID0+IGNvbnRlbnQgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gbmV3IEZpbGUoW2NvbnRlbnRdLCBuYW1lLCBvcHRpb25zKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1maWxlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY29uY2F0ID0gY29uY2F0O1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbmNvbnN0IG5vZGVfc3RyZWFtXzEgPSByZXF1aXJlKFwibm9kZTpzdHJlYW1cIik7XG5jb25zdCB0eXBlR3VhcmRzX2pzXzEgPSByZXF1aXJlKFwiLi90eXBlR3VhcmRzLmpzXCIpO1xuY29uc3QgZmlsZV9qc18xID0gcmVxdWlyZShcIi4vZmlsZS5qc1wiKTtcbmZ1bmN0aW9uIHN0cmVhbUFzeW5jSXRlcmF0b3IoKSB7XG4gICAgcmV0dXJuIHRzbGliXzEuX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKiBzdHJlYW1Bc3luY0l0ZXJhdG9yXzEoKSB7XG4gICAgICAgIGNvbnN0IHJlYWRlciA9IHRoaXMuZ2V0UmVhZGVyKCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IHlpZWxkIHRzbGliXzEuX19hd2FpdChyZWFkZXIucmVhZCgpKTtcbiAgICAgICAgICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geWllbGQgdHNsaWJfMS5fX2F3YWl0KHZvaWQgMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHlpZWxkIHlpZWxkIHRzbGliXzEuX19hd2FpdCh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICByZWFkZXIucmVsZWFzZUxvY2soKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuZnVuY3Rpb24gbWFrZUFzeW5jSXRlcmFibGUod2ViU3RyZWFtKSB7XG4gICAgaWYgKCF3ZWJTdHJlYW1bU3ltYm9sLmFzeW5jSXRlcmF0b3JdKSB7XG4gICAgICAgIHdlYlN0cmVhbVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBzdHJlYW1Bc3luY0l0ZXJhdG9yLmJpbmQod2ViU3RyZWFtKTtcbiAgICB9XG4gICAgaWYgKCF3ZWJTdHJlYW0udmFsdWVzKSB7XG4gICAgICAgIHdlYlN0cmVhbS52YWx1ZXMgPSBzdHJlYW1Bc3luY0l0ZXJhdG9yLmJpbmQod2ViU3RyZWFtKTtcbiAgICB9XG59XG5mdW5jdGlvbiBlbnN1cmVOb2RlU3RyZWFtKHN0cmVhbSkge1xuICAgIGlmIChzdHJlYW0gaW5zdGFuY2VvZiBSZWFkYWJsZVN0cmVhbSkge1xuICAgICAgICBtYWtlQXN5bmNJdGVyYWJsZShzdHJlYW0pO1xuICAgICAgICByZXR1cm4gbm9kZV9zdHJlYW1fMS5SZWFkYWJsZS5mcm9tV2ViKHN0cmVhbSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gc3RyZWFtO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHRvU3RyZWFtKHNvdXJjZSkge1xuICAgIGlmIChzb3VyY2UgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XG4gICAgICAgIHJldHVybiBub2RlX3N0cmVhbV8xLlJlYWRhYmxlLmZyb20oQnVmZmVyLmZyb20oc291cmNlKSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKCgwLCB0eXBlR3VhcmRzX2pzXzEuaXNCbG9iKShzb3VyY2UpKSB7XG4gICAgICAgIHJldHVybiB0b1N0cmVhbSgoMCwgZmlsZV9qc18xLmdldFJhd0NvbnRlbnQpKHNvdXJjZSkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGVuc3VyZU5vZGVTdHJlYW0oc291cmNlKTtcbiAgICB9XG59XG4vKipcbiAqIFV0aWxpdHkgZnVuY3Rpb24gdGhhdCBjb25jYXRlbmF0ZXMgYSBzZXQgb2YgYmluYXJ5IGlucHV0cyBpbnRvIG9uZSBjb21iaW5lZCBvdXRwdXQuXG4gKlxuICogQHBhcmFtIHNvdXJjZXMgLSBhcnJheSBvZiBzb3VyY2VzIGZvciB0aGUgY29uY2F0ZW5hdGlvblxuICogQHJldHVybnMgLSBpbiBOb2RlLCBhICgoKSA9XFw+IE5vZGVKUy5SZWFkYWJsZVN0cmVhbSkgd2hpY2gsIHdoZW4gcmVhZCwgcHJvZHVjZXMgYSBjb25jYXRlbmF0aW9uIG9mIGFsbCB0aGUgaW5wdXRzLlxuICogICAgICAgICAgIEluIGJyb3dzZXIsIHJldHVybnMgYSBgQmxvYmAgcmVwcmVzZW50aW5nIGFsbCB0aGUgY29uY2F0ZW5hdGVkIGlucHV0cy5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuYXN5bmMgZnVuY3Rpb24gY29uY2F0KHNvdXJjZXMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBzdHJlYW1zID0gc291cmNlcy5tYXAoKHgpID0+ICh0eXBlb2YgeCA9PT0gXCJmdW5jdGlvblwiID8geCgpIDogeCkpLm1hcCh0b1N0cmVhbSk7XG4gICAgICAgIHJldHVybiBub2RlX3N0cmVhbV8xLlJlYWRhYmxlLmZyb20oKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0c2xpYl8xLl9fYXN5bmNHZW5lcmF0b3IodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgIHZhciBfYSwgZV8xLCBfYiwgX2M7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBzdHJlYW0gb2Ygc3RyZWFtcykge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2QgPSB0cnVlLCBzdHJlYW1fMSA9IChlXzEgPSB2b2lkIDAsIHRzbGliXzEuX19hc3luY1ZhbHVlcyhzdHJlYW0pKSwgc3RyZWFtXzFfMTsgc3RyZWFtXzFfMSA9IHlpZWxkIHRzbGliXzEuX19hd2FpdChzdHJlYW1fMS5uZXh0KCkpLCBfYSA9IHN0cmVhbV8xXzEuZG9uZSwgIV9hOyBfZCA9IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyA9IHN0cmVhbV8xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaHVuayA9IF9jO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIHlpZWxkIHRzbGliXzEuX19hd2FpdChjaHVuayk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghX2QgJiYgIV9hICYmIChfYiA9IHN0cmVhbV8xLnJldHVybikpIHlpZWxkIHRzbGliXzEuX19hd2FpdChfYi5jYWxsKHN0cmVhbV8xKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSkoKSk7XG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbmNhdC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLm11bHRpcGFydFBvbGljeU5hbWUgPSB2b2lkIDA7XG5leHBvcnRzLm11bHRpcGFydFBvbGljeSA9IG11bHRpcGFydFBvbGljeTtcbmNvbnN0IGNvcmVfdXRpbF8xID0gcmVxdWlyZShcIkBhenVyZS9jb3JlLXV0aWxcIik7XG5jb25zdCBjb25jYXRfanNfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2NvbmNhdC5qc1wiKTtcbmNvbnN0IHR5cGVHdWFyZHNfanNfMSA9IHJlcXVpcmUoXCIuLi91dGlsL3R5cGVHdWFyZHMuanNcIik7XG5mdW5jdGlvbiBnZW5lcmF0ZUJvdW5kYXJ5KCkge1xuICAgIHJldHVybiBgLS0tLUF6U0RLRm9ybUJvdW5kYXJ5JHsoMCwgY29yZV91dGlsXzEucmFuZG9tVVVJRCkoKX1gO1xufVxuZnVuY3Rpb24gZW5jb2RlSGVhZGVycyhoZWFkZXJzKSB7XG4gICAgbGV0IHJlc3VsdCA9IFwiXCI7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgaGVhZGVycykge1xuICAgICAgICByZXN1bHQgKz0gYCR7a2V5fTogJHt2YWx1ZX1cXHJcXG5gO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gZ2V0TGVuZ3RoKHNvdXJjZSkge1xuICAgIGlmIChzb3VyY2UgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XG4gICAgICAgIHJldHVybiBzb3VyY2UuYnl0ZUxlbmd0aDtcbiAgICB9XG4gICAgZWxzZSBpZiAoKDAsIHR5cGVHdWFyZHNfanNfMS5pc0Jsb2IpKHNvdXJjZSkpIHtcbiAgICAgICAgLy8gaWYgd2FzIGNyZWF0ZWQgdXNpbmcgY3JlYXRlRmlsZSB0aGVuIC0xIG1lYW5zIHdlIGhhdmUgYW4gdW5rbm93biBzaXplXG4gICAgICAgIHJldHVybiBzb3VyY2Uuc2l6ZSA9PT0gLTEgPyB1bmRlZmluZWQgOiBzb3VyY2Uuc2l6ZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0VG90YWxMZW5ndGgoc291cmNlcykge1xuICAgIGxldCB0b3RhbCA9IDA7XG4gICAgZm9yIChjb25zdCBzb3VyY2Ugb2Ygc291cmNlcykge1xuICAgICAgICBjb25zdCBwYXJ0TGVuZ3RoID0gZ2V0TGVuZ3RoKHNvdXJjZSk7XG4gICAgICAgIGlmIChwYXJ0TGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0b3RhbCArPSBwYXJ0TGVuZ3RoO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0b3RhbDtcbn1cbmFzeW5jIGZ1bmN0aW9uIGJ1aWxkUmVxdWVzdEJvZHkocmVxdWVzdCwgcGFydHMsIGJvdW5kYXJ5KSB7XG4gICAgY29uc3Qgc291cmNlcyA9IFtcbiAgICAgICAgKDAsIGNvcmVfdXRpbF8xLnN0cmluZ1RvVWludDhBcnJheSkoYC0tJHtib3VuZGFyeX1gLCBcInV0Zi04XCIpLFxuICAgICAgICAuLi5wYXJ0cy5mbGF0TWFwKChwYXJ0KSA9PiBbXG4gICAgICAgICAgICAoMCwgY29yZV91dGlsXzEuc3RyaW5nVG9VaW50OEFycmF5KShcIlxcclxcblwiLCBcInV0Zi04XCIpLFxuICAgICAgICAgICAgKDAsIGNvcmVfdXRpbF8xLnN0cmluZ1RvVWludDhBcnJheSkoZW5jb2RlSGVhZGVycyhwYXJ0LmhlYWRlcnMpLCBcInV0Zi04XCIpLFxuICAgICAgICAgICAgKDAsIGNvcmVfdXRpbF8xLnN0cmluZ1RvVWludDhBcnJheSkoXCJcXHJcXG5cIiwgXCJ1dGYtOFwiKSxcbiAgICAgICAgICAgIHBhcnQuYm9keSxcbiAgICAgICAgICAgICgwLCBjb3JlX3V0aWxfMS5zdHJpbmdUb1VpbnQ4QXJyYXkpKGBcXHJcXG4tLSR7Ym91bmRhcnl9YCwgXCJ1dGYtOFwiKSxcbiAgICAgICAgXSksXG4gICAgICAgICgwLCBjb3JlX3V0aWxfMS5zdHJpbmdUb1VpbnQ4QXJyYXkpKFwiLS1cXHJcXG5cXHJcXG5cIiwgXCJ1dGYtOFwiKSxcbiAgICBdO1xuICAgIGNvbnN0IGNvbnRlbnRMZW5ndGggPSBnZXRUb3RhbExlbmd0aChzb3VyY2VzKTtcbiAgICBpZiAoY29udGVudExlbmd0aCkge1xuICAgICAgICByZXF1ZXN0LmhlYWRlcnMuc2V0KFwiQ29udGVudC1MZW5ndGhcIiwgY29udGVudExlbmd0aCk7XG4gICAgfVxuICAgIHJlcXVlc3QuYm9keSA9IGF3YWl0ICgwLCBjb25jYXRfanNfMS5jb25jYXQpKHNvdXJjZXMpO1xufVxuLyoqXG4gKiBOYW1lIG9mIG11bHRpcGFydCBwb2xpY3lcbiAqL1xuZXhwb3J0cy5tdWx0aXBhcnRQb2xpY3lOYW1lID0gXCJtdWx0aXBhcnRQb2xpY3lcIjtcbmNvbnN0IG1heEJvdW5kYXJ5TGVuZ3RoID0gNzA7XG5jb25zdCB2YWxpZEJvdW5kYXJ5Q2hhcmFjdGVycyA9IG5ldyBTZXQoYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVowMTIzNDU2Nzg5JygpKywtLi86PT9gKTtcbmZ1bmN0aW9uIGFzc2VydFZhbGlkQm91bmRhcnkoYm91bmRhcnkpIHtcbiAgICBpZiAoYm91bmRhcnkubGVuZ3RoID4gbWF4Qm91bmRhcnlMZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNdWx0aXBhcnQgYm91bmRhcnkgXCIke2JvdW5kYXJ5fVwiIGV4Y2VlZHMgbWF4aW11bSBsZW5ndGggb2YgNzAgY2hhcmFjdGVyc2ApO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuZnJvbShib3VuZGFyeSkuc29tZSgoeCkgPT4gIXZhbGlkQm91bmRhcnlDaGFyYWN0ZXJzLmhhcyh4KSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNdWx0aXBhcnQgYm91bmRhcnkgXCIke2JvdW5kYXJ5fVwiIGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVyc2ApO1xuICAgIH1cbn1cbi8qKlxuICogUGlwZWxpbmUgcG9saWN5IGZvciBtdWx0aXBhcnQgcmVxdWVzdHNcbiAqL1xuZnVuY3Rpb24gbXVsdGlwYXJ0UG9saWN5KCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGV4cG9ydHMubXVsdGlwYXJ0UG9saWN5TmFtZSxcbiAgICAgICAgYXN5bmMgc2VuZFJlcXVlc3QocmVxdWVzdCwgbmV4dCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgaWYgKCFyZXF1ZXN0Lm11bHRpcGFydEJvZHkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dChyZXF1ZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXF1ZXN0LmJvZHkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJtdWx0aXBhcnRCb2R5IGFuZCByZWd1bGFyIGJvZHkgY2Fubm90IGJlIHNldCBhdCB0aGUgc2FtZSB0aW1lXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGJvdW5kYXJ5ID0gcmVxdWVzdC5tdWx0aXBhcnRCb2R5LmJvdW5kYXJ5O1xuICAgICAgICAgICAgY29uc3QgY29udGVudFR5cGVIZWFkZXIgPSAoX2EgPSByZXF1ZXN0LmhlYWRlcnMuZ2V0KFwiQ29udGVudC1UeXBlXCIpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBcIm11bHRpcGFydC9taXhlZFwiO1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkSGVhZGVyID0gY29udGVudFR5cGVIZWFkZXIubWF0Y2goL14obXVsdGlwYXJ0XFwvW14gO10rKSg/OjsgKmJvdW5kYXJ5PSguKykpPyQvKTtcbiAgICAgICAgICAgIGlmICghcGFyc2VkSGVhZGVyKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBHb3QgbXVsdGlwYXJ0IHJlcXVlc3QgYm9keSwgYnV0IGNvbnRlbnQtdHlwZSBoZWFkZXIgd2FzIG5vdCBtdWx0aXBhcnQ6ICR7Y29udGVudFR5cGVIZWFkZXJ9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBbLCBjb250ZW50VHlwZSwgcGFyc2VkQm91bmRhcnldID0gcGFyc2VkSGVhZGVyO1xuICAgICAgICAgICAgaWYgKHBhcnNlZEJvdW5kYXJ5ICYmIGJvdW5kYXJ5ICYmIHBhcnNlZEJvdW5kYXJ5ICE9PSBib3VuZGFyeSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTXVsdGlwYXJ0IGJvdW5kYXJ5IHdhcyBzcGVjaWZpZWQgYXMgJHtwYXJzZWRCb3VuZGFyeX0gaW4gdGhlIGhlYWRlciwgYnV0IGdvdCAke2JvdW5kYXJ5fSBpbiB0aGUgcmVxdWVzdCBib2R5YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBib3VuZGFyeSAhPT0gbnVsbCAmJiBib3VuZGFyeSAhPT0gdm9pZCAwID8gYm91bmRhcnkgOiAoYm91bmRhcnkgPSBwYXJzZWRCb3VuZGFyeSk7XG4gICAgICAgICAgICBpZiAoYm91bmRhcnkpIHtcbiAgICAgICAgICAgICAgICBhc3NlcnRWYWxpZEJvdW5kYXJ5KGJvdW5kYXJ5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGJvdW5kYXJ5ID0gZ2VuZXJhdGVCb3VuZGFyeSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVxdWVzdC5oZWFkZXJzLnNldChcIkNvbnRlbnQtVHlwZVwiLCBgJHtjb250ZW50VHlwZX07IGJvdW5kYXJ5PSR7Ym91bmRhcnl9YCk7XG4gICAgICAgICAgICBhd2FpdCBidWlsZFJlcXVlc3RCb2R5KHJlcXVlc3QsIHJlcXVlc3QubXVsdGlwYXJ0Qm9keS5wYXJ0cywgYm91bmRhcnkpO1xuICAgICAgICAgICAgcmVxdWVzdC5tdWx0aXBhcnRCb2R5ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgcmV0dXJuIG5leHQocmVxdWVzdCk7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW11bHRpcGFydFBvbGljeS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlY29tcHJlc3NSZXNwb25zZVBvbGljeU5hbWUgPSB2b2lkIDA7XG5leHBvcnRzLmRlY29tcHJlc3NSZXNwb25zZVBvbGljeSA9IGRlY29tcHJlc3NSZXNwb25zZVBvbGljeTtcbi8qKlxuICogVGhlIHByb2dyYW1tYXRpYyBpZGVudGlmaWVyIG9mIHRoZSBkZWNvbXByZXNzUmVzcG9uc2VQb2xpY3kuXG4gKi9cbmV4cG9ydHMuZGVjb21wcmVzc1Jlc3BvbnNlUG9saWN5TmFtZSA9IFwiZGVjb21wcmVzc1Jlc3BvbnNlUG9saWN5XCI7XG4vKipcbiAqIEEgcG9saWN5IHRvIGVuYWJsZSByZXNwb25zZSBkZWNvbXByZXNzaW9uIGFjY29yZGluZyB0byBBY2NlcHQtRW5jb2RpbmcgaGVhZGVyXG4gKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvQWNjZXB0LUVuY29kaW5nXG4gKi9cbmZ1bmN0aW9uIGRlY29tcHJlc3NSZXNwb25zZVBvbGljeSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBleHBvcnRzLmRlY29tcHJlc3NSZXNwb25zZVBvbGljeU5hbWUsXG4gICAgICAgIGFzeW5jIHNlbmRSZXF1ZXN0KHJlcXVlc3QsIG5leHQpIHtcbiAgICAgICAgICAgIC8vIEhFQUQgcmVxdWVzdHMgaGF2ZSBubyBib2R5XG4gICAgICAgICAgICBpZiAocmVxdWVzdC5tZXRob2QgIT09IFwiSEVBRFwiKSB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdC5oZWFkZXJzLnNldChcIkFjY2VwdC1FbmNvZGluZ1wiLCBcImd6aXAsZGVmbGF0ZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXh0KHJlcXVlc3QpO1xuICAgICAgICB9LFxuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZWNvbXByZXNzUmVzcG9uc2VQb2xpY3kuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZWxheSA9IGRlbGF5O1xuZXhwb3J0cy5wYXJzZUhlYWRlclZhbHVlQXNOdW1iZXIgPSBwYXJzZUhlYWRlclZhbHVlQXNOdW1iZXI7XG5jb25zdCBhYm9ydF9jb250cm9sbGVyXzEgPSByZXF1aXJlKFwiQGF6dXJlL2Fib3J0LWNvbnRyb2xsZXJcIik7XG5jb25zdCBTdGFuZGFyZEFib3J0TWVzc2FnZSA9IFwiVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC5cIjtcbi8qKlxuICogQSB3cmFwcGVyIGZvciBzZXRUaW1lb3V0IHRoYXQgcmVzb2x2ZXMgYSBwcm9taXNlIGFmdGVyIGRlbGF5SW5NcyBtaWxsaXNlY29uZHMuXG4gKiBAcGFyYW0gZGVsYXlJbk1zIC0gVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gYmUgZGVsYXllZC5cbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBiZSByZXNvbHZlZCB3aXRoIGFmdGVyIGEgdGltZW91dCBvZiB0IG1pbGxpc2Vjb25kcy5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIGRlbGF5IC0gY3VycmVudGx5IGFib3J0IG9wdGlvbnNcbiAqICAgICAgICAgICAgICAgICAgLSBhYm9ydFNpZ25hbCAtIFRoZSBhYm9ydFNpZ25hbCBhc3NvY2lhdGVkIHdpdGggY29udGFpbmluZyBvcGVyYXRpb24uXG4gKiAgICAgICAgICAgICAgICAgIC0gYWJvcnRFcnJvck1zZyAtIFRoZSBhYm9ydCBlcnJvciBtZXNzYWdlIGFzc29jaWF0ZWQgd2l0aCBjb250YWluaW5nIG9wZXJhdGlvbi5cbiAqIEByZXR1cm5zIFJlc29sdmVkIHByb21pc2VcbiAqL1xuZnVuY3Rpb24gZGVsYXkoZGVsYXlJbk1zLCB2YWx1ZSwgb3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGxldCB0aW1lciA9IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IG9uQWJvcnRlZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgcmVqZWN0T25BYm9ydCA9ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QobmV3IGFib3J0X2NvbnRyb2xsZXJfMS5BYm9ydEVycm9yKChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuYWJvcnRFcnJvck1zZykgPyBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuYWJvcnRFcnJvck1zZyA6IFN0YW5kYXJkQWJvcnRNZXNzYWdlKSk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHJlbW92ZUxpc3RlbmVycyA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmICgob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmFib3J0U2lnbmFsKSAmJiBvbkFib3J0ZWQpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLmFib3J0U2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0ZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBvbkFib3J0ZWQgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGltZXIpIHtcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVtb3ZlTGlzdGVuZXJzKCk7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0T25BYm9ydCgpO1xuICAgICAgICB9O1xuICAgICAgICBpZiAoKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5hYm9ydFNpZ25hbCkgJiYgb3B0aW9ucy5hYm9ydFNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0T25BYm9ydCgpO1xuICAgICAgICB9XG4gICAgICAgIHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICByZW1vdmVMaXN0ZW5lcnMoKTtcbiAgICAgICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICB9LCBkZWxheUluTXMpO1xuICAgICAgICBpZiAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmFib3J0U2lnbmFsKSB7XG4gICAgICAgICAgICBvcHRpb25zLmFib3J0U2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0ZWQpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG4vKipcbiAqIEBpbnRlcm5hbFxuICogQHJldHVybnMgdGhlIHBhcnNlZCB2YWx1ZSBvciB1bmRlZmluZWQgaWYgdGhlIHBhcnNlZCB2YWx1ZSBpcyBpbnZhbGlkLlxuICovXG5mdW5jdGlvbiBwYXJzZUhlYWRlclZhbHVlQXNOdW1iZXIocmVzcG9uc2UsIGhlYWRlck5hbWUpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KGhlYWRlck5hbWUpO1xuICAgIGlmICghdmFsdWUpXG4gICAgICAgIHJldHVybjtcbiAgICBjb25zdCB2YWx1ZUFzTnVtID0gTnVtYmVyKHZhbHVlKTtcbiAgICBpZiAoTnVtYmVyLmlzTmFOKHZhbHVlQXNOdW0pKVxuICAgICAgICByZXR1cm47XG4gICAgcmV0dXJuIHZhbHVlQXNOdW07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1oZWxwZXJzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNUaHJvdHRsaW5nUmV0cnlSZXNwb25zZSA9IGlzVGhyb3R0bGluZ1JldHJ5UmVzcG9uc2U7XG5leHBvcnRzLnRocm90dGxpbmdSZXRyeVN0cmF0ZWd5ID0gdGhyb3R0bGluZ1JldHJ5U3RyYXRlZ3k7XG5jb25zdCBoZWxwZXJzX2pzXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9oZWxwZXJzLmpzXCIpO1xuLyoqXG4gKiBUaGUgaGVhZGVyIHRoYXQgY29tZXMgYmFjayBmcm9tIEF6dXJlIHNlcnZpY2VzIHJlcHJlc2VudGluZ1xuICogdGhlIGFtb3VudCBvZiB0aW1lIChtaW5pbXVtKSB0byB3YWl0IHRvIHJldHJ5IChpbiBzZWNvbmRzIG9yIHRpbWVzdGFtcCBhZnRlciB3aGljaCB3ZSBjYW4gcmV0cnkpLlxuICovXG5jb25zdCBSZXRyeUFmdGVySGVhZGVyID0gXCJSZXRyeS1BZnRlclwiO1xuLyoqXG4gKiBUaGUgaGVhZGVycyB0aGF0IGNvbWUgYmFjayBmcm9tIEF6dXJlIHNlcnZpY2VzIHJlcHJlc2VudGluZ1xuICogdGhlIGFtb3VudCBvZiB0aW1lIChtaW5pbXVtKSB0byB3YWl0IHRvIHJldHJ5LlxuICpcbiAqIFwicmV0cnktYWZ0ZXItbXNcIiwgXCJ4LW1zLXJldHJ5LWFmdGVyLW1zXCIgOiBtaWxsaXNlY29uZHNcbiAqIFwiUmV0cnktQWZ0ZXJcIiA6IHNlY29uZHMgb3IgdGltZXN0YW1wXG4gKi9cbmNvbnN0IEFsbFJldHJ5QWZ0ZXJIZWFkZXJzID0gW1wicmV0cnktYWZ0ZXItbXNcIiwgXCJ4LW1zLXJldHJ5LWFmdGVyLW1zXCIsIFJldHJ5QWZ0ZXJIZWFkZXJdO1xuLyoqXG4gKiBBIHJlc3BvbnNlIGlzIGEgdGhyb3R0bGluZyByZXRyeSByZXNwb25zZSBpZiBpdCBoYXMgYSB0aHJvdHRsaW5nIHN0YXR1cyBjb2RlICg0Mjkgb3IgNTAzKSxcbiAqIGFzIGxvbmcgYXMgb25lIG9mIHRoZSBbIFwiUmV0cnktQWZ0ZXJcIiBvciBcInJldHJ5LWFmdGVyLW1zXCIgb3IgXCJ4LW1zLXJldHJ5LWFmdGVyLW1zXCIgXSBoZWFkZXJzIGhhcyBhIHZhbGlkIHZhbHVlLlxuICpcbiAqIFJldHVybnMgdGhlIGByZXRyeUFmdGVySW5Nc2AgdmFsdWUgaWYgdGhlIHJlc3BvbnNlIGlzIGEgdGhyb3R0bGluZyByZXRyeSByZXNwb25zZS5cbiAqIElmIG5vdCB0aHJvdHRsaW5nIHJldHJ5IHJlc3BvbnNlLCByZXR1cm5zIGB1bmRlZmluZWRgLlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBnZXRSZXRyeUFmdGVySW5NcyhyZXNwb25zZSkge1xuICAgIGlmICghKHJlc3BvbnNlICYmIFs0MjksIDUwM10uaW5jbHVkZXMocmVzcG9uc2Uuc3RhdHVzKSkpXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gSGVhZGVyczogXCJyZXRyeS1hZnRlci1tc1wiLCBcIngtbXMtcmV0cnktYWZ0ZXItbXNcIiwgXCJSZXRyeS1BZnRlclwiXG4gICAgICAgIGZvciAoY29uc3QgaGVhZGVyIG9mIEFsbFJldHJ5QWZ0ZXJIZWFkZXJzKSB7XG4gICAgICAgICAgICBjb25zdCByZXRyeUFmdGVyVmFsdWUgPSAoMCwgaGVscGVyc19qc18xLnBhcnNlSGVhZGVyVmFsdWVBc051bWJlcikocmVzcG9uc2UsIGhlYWRlcik7XG4gICAgICAgICAgICBpZiAocmV0cnlBZnRlclZhbHVlID09PSAwIHx8IHJldHJ5QWZ0ZXJWYWx1ZSkge1xuICAgICAgICAgICAgICAgIC8vIFwiUmV0cnktQWZ0ZXJcIiBoZWFkZXIgPT0+IHNlY29uZHNcbiAgICAgICAgICAgICAgICAvLyBcInJldHJ5LWFmdGVyLW1zXCIsIFwieC1tcy1yZXRyeS1hZnRlci1tc1wiIGhlYWRlcnMgPT0+IG1pbGxpLXNlY29uZHNcbiAgICAgICAgICAgICAgICBjb25zdCBtdWx0aXBseWluZ0ZhY3RvciA9IGhlYWRlciA9PT0gUmV0cnlBZnRlckhlYWRlciA/IDEwMDAgOiAxO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXRyeUFmdGVyVmFsdWUgKiBtdWx0aXBseWluZ0ZhY3RvcjsgLy8gaW4gbWlsbGktc2Vjb25kc1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFJldHJ5QWZ0ZXJIZWFkZXIgKFwiUmV0cnktQWZ0ZXJcIikgaGFzIGEgc3BlY2lhbCBjYXNlIHdoZXJlIGl0IG1pZ2h0IGJlIGZvcm1hdHRlZCBhcyBhIGRhdGUgaW5zdGVhZCBvZiBhIG51bWJlciBvZiBzZWNvbmRzXG4gICAgICAgIGNvbnN0IHJldHJ5QWZ0ZXJIZWFkZXIgPSByZXNwb25zZS5oZWFkZXJzLmdldChSZXRyeUFmdGVySGVhZGVyKTtcbiAgICAgICAgaWYgKCFyZXRyeUFmdGVySGVhZGVyKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBkYXRlID0gRGF0ZS5wYXJzZShyZXRyeUFmdGVySGVhZGVyKTtcbiAgICAgICAgY29uc3QgZGlmZiA9IGRhdGUgLSBEYXRlLm5vdygpO1xuICAgICAgICAvLyBuZWdhdGl2ZSBkaWZmIHdvdWxkIG1lYW4gYSBkYXRlIGluIHRoZSBwYXN0LCBzbyByZXRyeSBhc2FwIHdpdGggMCBtaWxsaXNlY29uZHNcbiAgICAgICAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShkaWZmKSA/IE1hdGgubWF4KDAsIGRpZmYpIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjYXRjaCAoX2EpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59XG4vKipcbiAqIEEgcmVzcG9uc2UgaXMgYSByZXRyeSByZXNwb25zZSBpZiBpdCBoYXMgYSB0aHJvdHRsaW5nIHN0YXR1cyBjb2RlICg0Mjkgb3IgNTAzKSxcbiAqIGFzIGxvbmcgYXMgb25lIG9mIHRoZSBbIFwiUmV0cnktQWZ0ZXJcIiBvciBcInJldHJ5LWFmdGVyLW1zXCIgb3IgXCJ4LW1zLXJldHJ5LWFmdGVyLW1zXCIgXSBoZWFkZXJzIGhhcyBhIHZhbGlkIHZhbHVlLlxuICovXG5mdW5jdGlvbiBpc1Rocm90dGxpbmdSZXRyeVJlc3BvbnNlKHJlc3BvbnNlKSB7XG4gICAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShnZXRSZXRyeUFmdGVySW5NcyhyZXNwb25zZSkpO1xufVxuZnVuY3Rpb24gdGhyb3R0bGluZ1JldHJ5U3RyYXRlZ3koKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogXCJ0aHJvdHRsaW5nUmV0cnlTdHJhdGVneVwiLFxuICAgICAgICByZXRyeSh7IHJlc3BvbnNlIH0pIHtcbiAgICAgICAgICAgIGNvbnN0IHJldHJ5QWZ0ZXJJbk1zID0gZ2V0UmV0cnlBZnRlckluTXMocmVzcG9uc2UpO1xuICAgICAgICAgICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUocmV0cnlBZnRlckluTXMpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgc2tpcFN0cmF0ZWd5OiB0cnVlIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHJldHJ5QWZ0ZXJJbk1zLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGhyb3R0bGluZ1JldHJ5U3RyYXRlZ3kuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5leHBvbmVudGlhbFJldHJ5U3RyYXRlZ3kgPSBleHBvbmVudGlhbFJldHJ5U3RyYXRlZ3k7XG5leHBvcnRzLmlzRXhwb25lbnRpYWxSZXRyeVJlc3BvbnNlID0gaXNFeHBvbmVudGlhbFJldHJ5UmVzcG9uc2U7XG5leHBvcnRzLmlzU3lzdGVtRXJyb3IgPSBpc1N5c3RlbUVycm9yO1xuY29uc3QgY29yZV91dGlsXzEgPSByZXF1aXJlKFwiQGF6dXJlL2NvcmUtdXRpbFwiKTtcbmNvbnN0IHRocm90dGxpbmdSZXRyeVN0cmF0ZWd5X2pzXzEgPSByZXF1aXJlKFwiLi90aHJvdHRsaW5nUmV0cnlTdHJhdGVneS5qc1wiKTtcbi8vIGludGVydmFscyBhcmUgaW4gbWlsbGlzZWNvbmRzXG5jb25zdCBERUZBVUxUX0NMSUVOVF9SRVRSWV9JTlRFUlZBTCA9IDEwMDA7XG5jb25zdCBERUZBVUxUX0NMSUVOVF9NQVhfUkVUUllfSU5URVJWQUwgPSAxMDAwICogNjQ7XG4vKipcbiAqIEEgcmV0cnkgc3RyYXRlZ3kgdGhhdCByZXRyaWVzIHdpdGggYW4gZXhwb25lbnRpYWxseSBpbmNyZWFzaW5nIGRlbGF5IGluIHRoZXNlIHR3byBjYXNlczpcbiAqIC0gV2hlbiB0aGVyZSBhcmUgZXJyb3JzIGluIHRoZSB1bmRlcmx5aW5nIHRyYW5zcG9ydCBsYXllciAoZS5nLiBETlMgbG9va3VwIGZhaWx1cmVzKS5cbiAqIC0gT3Igb3RoZXJ3aXNlIGlmIHRoZSBvdXRnb2luZyByZXF1ZXN0IGZhaWxzICg0MDgsIGdyZWF0ZXIgb3IgZXF1YWwgdGhhbiA1MDAsIGV4Y2VwdCBmb3IgNTAxIGFuZCA1MDUpLlxuICovXG5mdW5jdGlvbiBleHBvbmVudGlhbFJldHJ5U3RyYXRlZ3kob3B0aW9ucyA9IHt9KSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICBjb25zdCByZXRyeUludGVydmFsID0gKF9hID0gb3B0aW9ucy5yZXRyeURlbGF5SW5NcykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogREVGQVVMVF9DTElFTlRfUkVUUllfSU5URVJWQUw7XG4gICAgY29uc3QgbWF4UmV0cnlJbnRlcnZhbCA9IChfYiA9IG9wdGlvbnMubWF4UmV0cnlEZWxheUluTXMpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IERFRkFVTFRfQ0xJRU5UX01BWF9SRVRSWV9JTlRFUlZBTDtcbiAgICBsZXQgcmV0cnlBZnRlckluTXMgPSByZXRyeUludGVydmFsO1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IFwiZXhwb25lbnRpYWxSZXRyeVN0cmF0ZWd5XCIsXG4gICAgICAgIHJldHJ5KHsgcmV0cnlDb3VudCwgcmVzcG9uc2UsIHJlc3BvbnNlRXJyb3IgfSkge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2hlZFN5c3RlbUVycm9yID0gaXNTeXN0ZW1FcnJvcihyZXNwb25zZUVycm9yKTtcbiAgICAgICAgICAgIGNvbnN0IGlnbm9yZVN5c3RlbUVycm9ycyA9IG1hdGNoZWRTeXN0ZW1FcnJvciAmJiBvcHRpb25zLmlnbm9yZVN5c3RlbUVycm9ycztcbiAgICAgICAgICAgIGNvbnN0IGlzRXhwb25lbnRpYWwgPSBpc0V4cG9uZW50aWFsUmV0cnlSZXNwb25zZShyZXNwb25zZSk7XG4gICAgICAgICAgICBjb25zdCBpZ25vcmVFeHBvbmVudGlhbFJlc3BvbnNlID0gaXNFeHBvbmVudGlhbCAmJiBvcHRpb25zLmlnbm9yZUh0dHBTdGF0dXNDb2RlcztcbiAgICAgICAgICAgIGNvbnN0IHVua25vd25SZXNwb25zZSA9IHJlc3BvbnNlICYmICgoMCwgdGhyb3R0bGluZ1JldHJ5U3RyYXRlZ3lfanNfMS5pc1Rocm90dGxpbmdSZXRyeVJlc3BvbnNlKShyZXNwb25zZSkgfHwgIWlzRXhwb25lbnRpYWwpO1xuICAgICAgICAgICAgaWYgKHVua25vd25SZXNwb25zZSB8fCBpZ25vcmVFeHBvbmVudGlhbFJlc3BvbnNlIHx8IGlnbm9yZVN5c3RlbUVycm9ycykge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHNraXBTdHJhdGVneTogdHJ1ZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlRXJyb3IgJiYgIW1hdGNoZWRTeXN0ZW1FcnJvciAmJiAhaXNFeHBvbmVudGlhbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGVycm9yVG9UaHJvdzogcmVzcG9uc2VFcnJvciB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gRXhwb25lbnRpYWxseSBpbmNyZWFzZSB0aGUgZGVsYXkgZWFjaCB0aW1lXG4gICAgICAgICAgICBjb25zdCBleHBvbmVudGlhbERlbGF5ID0gcmV0cnlBZnRlckluTXMgKiBNYXRoLnBvdygyLCByZXRyeUNvdW50KTtcbiAgICAgICAgICAgIC8vIERvbid0IGxldCB0aGUgZGVsYXkgZXhjZWVkIHRoZSBtYXhpbXVtXG4gICAgICAgICAgICBjb25zdCBjbGFtcGVkRXhwb25lbnRpYWxEZWxheSA9IE1hdGgubWluKG1heFJldHJ5SW50ZXJ2YWwsIGV4cG9uZW50aWFsRGVsYXkpO1xuICAgICAgICAgICAgLy8gQWxsb3cgdGhlIGZpbmFsIHZhbHVlIHRvIGhhdmUgc29tZSBcImppdHRlclwiICh3aXRoaW4gNTAlIG9mIHRoZSBkZWxheSBzaXplKSBzb1xuICAgICAgICAgICAgLy8gdGhhdCByZXRyaWVzIGFjcm9zcyBtdWx0aXBsZSBjbGllbnRzIGRvbid0IG9jY3VyIHNpbXVsdGFuZW91c2x5LlxuICAgICAgICAgICAgcmV0cnlBZnRlckluTXMgPVxuICAgICAgICAgICAgICAgIGNsYW1wZWRFeHBvbmVudGlhbERlbGF5IC8gMiArICgwLCBjb3JlX3V0aWxfMS5nZXRSYW5kb21JbnRlZ2VySW5jbHVzaXZlKSgwLCBjbGFtcGVkRXhwb25lbnRpYWxEZWxheSAvIDIpO1xuICAgICAgICAgICAgcmV0dXJuIHsgcmV0cnlBZnRlckluTXMgfTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuLyoqXG4gKiBBIHJlc3BvbnNlIGlzIGEgcmV0cnkgcmVzcG9uc2UgaWYgaXQgaGFzIHN0YXR1cyBjb2RlczpcbiAqIC0gNDA4LCBvclxuICogLSBHcmVhdGVyIG9yIGVxdWFsIHRoYW4gNTAwLCBleGNlcHQgZm9yIDUwMSBhbmQgNTA1LlxuICovXG5mdW5jdGlvbiBpc0V4cG9uZW50aWFsUmV0cnlSZXNwb25zZShyZXNwb25zZSkge1xuICAgIHJldHVybiBCb29sZWFuKHJlc3BvbnNlICYmXG4gICAgICAgIHJlc3BvbnNlLnN0YXR1cyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIChyZXNwb25zZS5zdGF0dXMgPj0gNTAwIHx8IHJlc3BvbnNlLnN0YXR1cyA9PT0gNDA4KSAmJlxuICAgICAgICByZXNwb25zZS5zdGF0dXMgIT09IDUwMSAmJlxuICAgICAgICByZXNwb25zZS5zdGF0dXMgIT09IDUwNSk7XG59XG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciBhbiBlcnJvciBmcm9tIGEgcGlwZWxpbmUgcmVzcG9uc2Ugd2FzIHRyaWdnZXJlZCBpbiB0aGUgbmV0d29yayBsYXllci5cbiAqL1xuZnVuY3Rpb24gaXNTeXN0ZW1FcnJvcihlcnIpIHtcbiAgICBpZiAoIWVycikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiAoZXJyLmNvZGUgPT09IFwiRVRJTUVET1VUXCIgfHxcbiAgICAgICAgZXJyLmNvZGUgPT09IFwiRVNPQ0tFVFRJTUVET1VUXCIgfHxcbiAgICAgICAgZXJyLmNvZGUgPT09IFwiRUNPTk5SRUZVU0VEXCIgfHxcbiAgICAgICAgZXJyLmNvZGUgPT09IFwiRUNPTk5SRVNFVFwiIHx8XG4gICAgICAgIGVyci5jb2RlID09PSBcIkVOT0VOVFwiIHx8XG4gICAgICAgIGVyci5jb2RlID09PSBcIkVOT1RGT1VORFwiKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWV4cG9uZW50aWFsUmV0cnlTdHJhdGVneS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJldHJ5UG9saWN5ID0gcmV0cnlQb2xpY3k7XG5jb25zdCBoZWxwZXJzX2pzXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9oZWxwZXJzLmpzXCIpO1xuY29uc3QgbG9nZ2VyXzEgPSByZXF1aXJlKFwiQGF6dXJlL2xvZ2dlclwiKTtcbmNvbnN0IGFib3J0X2NvbnRyb2xsZXJfMSA9IHJlcXVpcmUoXCJAYXp1cmUvYWJvcnQtY29udHJvbGxlclwiKTtcbmNvbnN0IGNvbnN0YW50c19qc18xID0gcmVxdWlyZShcIi4uL2NvbnN0YW50cy5qc1wiKTtcbmNvbnN0IHJldHJ5UG9saWN5TG9nZ2VyID0gKDAsIGxvZ2dlcl8xLmNyZWF0ZUNsaWVudExvZ2dlcikoXCJjb3JlLXJlc3QtcGlwZWxpbmUgcmV0cnlQb2xpY3lcIik7XG4vKipcbiAqIFRoZSBwcm9ncmFtbWF0aWMgaWRlbnRpZmllciBvZiB0aGUgcmV0cnlQb2xpY3kuXG4gKi9cbmNvbnN0IHJldHJ5UG9saWN5TmFtZSA9IFwicmV0cnlQb2xpY3lcIjtcbi8qKlxuICogcmV0cnlQb2xpY3kgaXMgYSBnZW5lcmljIHBvbGljeSB0byBlbmFibGUgcmV0cnlpbmcgcmVxdWVzdHMgd2hlbiBjZXJ0YWluIGNvbmRpdGlvbnMgYXJlIG1ldFxuICovXG5mdW5jdGlvbiByZXRyeVBvbGljeShzdHJhdGVnaWVzLCBvcHRpb25zID0geyBtYXhSZXRyaWVzOiBjb25zdGFudHNfanNfMS5ERUZBVUxUX1JFVFJZX1BPTElDWV9DT1VOVCB9KSB7XG4gICAgY29uc3QgbG9nZ2VyID0gb3B0aW9ucy5sb2dnZXIgfHwgcmV0cnlQb2xpY3lMb2dnZXI7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogcmV0cnlQb2xpY3lOYW1lLFxuICAgICAgICBhc3luYyBzZW5kUmVxdWVzdChyZXF1ZXN0LCBuZXh0KSB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgICAgbGV0IHJlc3BvbnNlO1xuICAgICAgICAgICAgbGV0IHJlc3BvbnNlRXJyb3I7XG4gICAgICAgICAgICBsZXQgcmV0cnlDb3VudCA9IC0xO1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnN0YW50LWNvbmRpdGlvblxuICAgICAgICAgICAgcmV0cnlSZXF1ZXN0OiB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgICAgIHJldHJ5Q291bnQgKz0gMTtcbiAgICAgICAgICAgICAgICByZXNwb25zZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICByZXNwb25zZUVycm9yID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBSZXRyeSAke3JldHJ5Q291bnR9OiBBdHRlbXB0aW5nIHRvIHNlbmQgcmVxdWVzdGAsIHJlcXVlc3QucmVxdWVzdElkKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCBuZXh0KHJlcXVlc3QpO1xuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhgUmV0cnkgJHtyZXRyeUNvdW50fTogUmVjZWl2ZWQgYSByZXNwb25zZSBmcm9tIHJlcXVlc3RgLCByZXF1ZXN0LnJlcXVlc3RJZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihgUmV0cnkgJHtyZXRyeUNvdW50fTogUmVjZWl2ZWQgYW4gZXJyb3IgZnJvbSByZXF1ZXN0YCwgcmVxdWVzdC5yZXF1ZXN0SWQpO1xuICAgICAgICAgICAgICAgICAgICAvLyBSZXN0RXJyb3JzIGFyZSB2YWxpZCB0YXJnZXRzIGZvciB0aGUgcmV0cnkgc3RyYXRlZ2llcy5cbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgbm9uZSBvZiB0aGUgcmV0cnkgc3RyYXRlZ2llcyBjYW4gd29yayB3aXRoIHRoZW0sIHRoZXkgd2lsbCBiZSB0aHJvd24gbGF0ZXIgaW4gdGhpcyBwb2xpY3kuXG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSByZWNlaXZlZCBlcnJvciBpcyBub3QgYSBSZXN0RXJyb3IsIGl0IGlzIGltbWVkaWF0ZWx5IHRocm93bi5cbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VFcnJvciA9IGU7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZSB8fCByZXNwb25zZUVycm9yLm5hbWUgIT09IFwiUmVzdEVycm9yXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSByZXNwb25zZUVycm9yLnJlc3BvbnNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoKF9hID0gcmVxdWVzdC5hYm9ydFNpZ25hbCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmFib3J0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGBSZXRyeSAke3JldHJ5Q291bnR9OiBSZXF1ZXN0IGFib3J0ZWQuYCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFib3J0RXJyb3IgPSBuZXcgYWJvcnRfY29udHJvbGxlcl8xLkFib3J0RXJyb3IoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgYWJvcnRFcnJvcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJldHJ5Q291bnQgPj0gKChfYiA9IG9wdGlvbnMubWF4UmV0cmllcykgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogY29uc3RhbnRzX2pzXzEuREVGQVVMVF9SRVRSWV9QT0xJQ1lfQ09VTlQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBSZXRyeSAke3JldHJ5Q291bnR9OiBNYXhpbXVtIHJldHJpZXMgcmVhY2hlZC4gUmV0dXJuaW5nIHRoZSBsYXN0IHJlY2VpdmVkIHJlc3BvbnNlLCBvciB0aHJvd2luZyB0aGUgbGFzdCByZWNlaXZlZCBlcnJvci5gKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IHJlc3BvbnNlRXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1heGltdW0gcmV0cmllcyByZWFjaGVkIHdpdGggbm8gcmVzcG9uc2Ugb3IgZXJyb3IgdG8gdGhyb3dcIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYFJldHJ5ICR7cmV0cnlDb3VudH06IFByb2Nlc3NpbmcgJHtzdHJhdGVnaWVzLmxlbmd0aH0gcmV0cnkgc3RyYXRlZ2llcy5gKTtcbiAgICAgICAgICAgICAgICBzdHJhdGVnaWVzTG9vcDogZm9yIChjb25zdCBzdHJhdGVneSBvZiBzdHJhdGVnaWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmF0ZWd5TG9nZ2VyID0gc3RyYXRlZ3kubG9nZ2VyIHx8IHJldHJ5UG9saWN5TG9nZ2VyO1xuICAgICAgICAgICAgICAgICAgICBzdHJhdGVneUxvZ2dlci5pbmZvKGBSZXRyeSAke3JldHJ5Q291bnR9OiBQcm9jZXNzaW5nIHJldHJ5IHN0cmF0ZWd5ICR7c3RyYXRlZ3kubmFtZX0uYCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1vZGlmaWVycyA9IHN0cmF0ZWd5LnJldHJ5KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHJ5Q291bnQsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlRXJyb3IsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAobW9kaWZpZXJzLnNraXBTdHJhdGVneSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyYXRlZ3lMb2dnZXIuaW5mbyhgUmV0cnkgJHtyZXRyeUNvdW50fTogU2tpcHBlZC5gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIHN0cmF0ZWdpZXNMb29wO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgZXJyb3JUb1Rocm93LCByZXRyeUFmdGVySW5NcywgcmVkaXJlY3RUbyB9ID0gbW9kaWZpZXJzO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3JUb1Rocm93KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJhdGVneUxvZ2dlci5lcnJvcihgUmV0cnkgJHtyZXRyeUNvdW50fTogUmV0cnkgc3RyYXRlZ3kgJHtzdHJhdGVneS5uYW1lfSB0aHJvd3MgZXJyb3I6YCwgZXJyb3JUb1Rocm93KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9yVG9UaHJvdztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAocmV0cnlBZnRlckluTXMgfHwgcmV0cnlBZnRlckluTXMgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmF0ZWd5TG9nZ2VyLmluZm8oYFJldHJ5ICR7cmV0cnlDb3VudH06IFJldHJ5IHN0cmF0ZWd5ICR7c3RyYXRlZ3kubmFtZX0gcmV0cmllcyBhZnRlciAke3JldHJ5QWZ0ZXJJbk1zfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgKDAsIGhlbHBlcnNfanNfMS5kZWxheSkocmV0cnlBZnRlckluTXMsIHVuZGVmaW5lZCwgeyBhYm9ydFNpZ25hbDogcmVxdWVzdC5hYm9ydFNpZ25hbCB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIHJldHJ5UmVxdWVzdDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAocmVkaXJlY3RUbykge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyYXRlZ3lMb2dnZXIuaW5mbyhgUmV0cnkgJHtyZXRyeUNvdW50fTogUmV0cnkgc3RyYXRlZ3kgJHtzdHJhdGVneS5uYW1lfSByZWRpcmVjdHMgdG8gJHtyZWRpcmVjdFRvfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC51cmwgPSByZWRpcmVjdFRvO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUgcmV0cnlSZXF1ZXN0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZUVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBOb25lIG9mIHRoZSByZXRyeSBzdHJhdGVnaWVzIGNvdWxkIHdvcmsgd2l0aCB0aGUgcmVjZWl2ZWQgZXJyb3IuIFRocm93aW5nIGl0LmApO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyByZXNwb25zZUVycm9yO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYE5vbmUgb2YgdGhlIHJldHJ5IHN0cmF0ZWdpZXMgY291bGQgd29yayB3aXRoIHRoZSByZWNlaXZlZCByZXNwb25zZS4gUmV0dXJuaW5nIGl0LmApO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIElmIGFsbCB0aGUgcmV0cmllcyBza2lwIGFuZCB0aGVyZSdzIG5vIHJlc3BvbnNlLFxuICAgICAgICAgICAgICAgIC8vIHdlJ3JlIHN0aWxsIGluIHRoZSByZXRyeSBsb29wLCBzbyBhIG5ldyByZXF1ZXN0IHdpbGwgYmUgc2VudFxuICAgICAgICAgICAgICAgIC8vIHVudGlsIGBtYXhSZXRyaWVzYCBpcyByZWFjaGVkLlxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZXRyeVBvbGljeS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlZmF1bHRSZXRyeVBvbGljeU5hbWUgPSB2b2lkIDA7XG5leHBvcnRzLmRlZmF1bHRSZXRyeVBvbGljeSA9IGRlZmF1bHRSZXRyeVBvbGljeTtcbmNvbnN0IGV4cG9uZW50aWFsUmV0cnlTdHJhdGVneV9qc18xID0gcmVxdWlyZShcIi4uL3JldHJ5U3RyYXRlZ2llcy9leHBvbmVudGlhbFJldHJ5U3RyYXRlZ3kuanNcIik7XG5jb25zdCB0aHJvdHRsaW5nUmV0cnlTdHJhdGVneV9qc18xID0gcmVxdWlyZShcIi4uL3JldHJ5U3RyYXRlZ2llcy90aHJvdHRsaW5nUmV0cnlTdHJhdGVneS5qc1wiKTtcbmNvbnN0IHJldHJ5UG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9yZXRyeVBvbGljeS5qc1wiKTtcbmNvbnN0IGNvbnN0YW50c19qc18xID0gcmVxdWlyZShcIi4uL2NvbnN0YW50cy5qc1wiKTtcbi8qKlxuICogTmFtZSBvZiB0aGUge0BsaW5rIGRlZmF1bHRSZXRyeVBvbGljeX1cbiAqL1xuZXhwb3J0cy5kZWZhdWx0UmV0cnlQb2xpY3lOYW1lID0gXCJkZWZhdWx0UmV0cnlQb2xpY3lcIjtcbi8qKlxuICogQSBwb2xpY3kgdGhhdCByZXRyaWVzIGFjY29yZGluZyB0byB0aHJlZSBzdHJhdGVnaWVzOlxuICogLSBXaGVuIHRoZSBzZXJ2ZXIgc2VuZHMgYSA0MjkgcmVzcG9uc2Ugd2l0aCBhIFJldHJ5LUFmdGVyIGhlYWRlci5cbiAqIC0gV2hlbiB0aGVyZSBhcmUgZXJyb3JzIGluIHRoZSB1bmRlcmx5aW5nIHRyYW5zcG9ydCBsYXllciAoZS5nLiBETlMgbG9va3VwIGZhaWx1cmVzKS5cbiAqIC0gT3Igb3RoZXJ3aXNlIGlmIHRoZSBvdXRnb2luZyByZXF1ZXN0IGZhaWxzLCBpdCB3aWxsIHJldHJ5IHdpdGggYW4gZXhwb25lbnRpYWxseSBpbmNyZWFzaW5nIGRlbGF5LlxuICovXG5mdW5jdGlvbiBkZWZhdWx0UmV0cnlQb2xpY3kob3B0aW9ucyA9IHt9KSB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGV4cG9ydHMuZGVmYXVsdFJldHJ5UG9saWN5TmFtZSxcbiAgICAgICAgc2VuZFJlcXVlc3Q6ICgwLCByZXRyeVBvbGljeV9qc18xLnJldHJ5UG9saWN5KShbKDAsIHRocm90dGxpbmdSZXRyeVN0cmF0ZWd5X2pzXzEudGhyb3R0bGluZ1JldHJ5U3RyYXRlZ3kpKCksICgwLCBleHBvbmVudGlhbFJldHJ5U3RyYXRlZ3lfanNfMS5leHBvbmVudGlhbFJldHJ5U3RyYXRlZ3kpKG9wdGlvbnMpXSwge1xuICAgICAgICAgICAgbWF4UmV0cmllczogKF9hID0gb3B0aW9ucy5tYXhSZXRyaWVzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBjb25zdGFudHNfanNfMS5ERUZBVUxUX1JFVFJZX1BPTElDWV9DT1VOVCxcbiAgICAgICAgfSkuc2VuZFJlcXVlc3QsXG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlZmF1bHRSZXRyeVBvbGljeS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNyZWF0ZUh0dHBIZWFkZXJzID0gY3JlYXRlSHR0cEhlYWRlcnM7XG5mdW5jdGlvbiBub3JtYWxpemVOYW1lKG5hbWUpIHtcbiAgICByZXR1cm4gbmFtZS50b0xvd2VyQ2FzZSgpO1xufVxuZnVuY3Rpb24qIGhlYWRlckl0ZXJhdG9yKG1hcCkge1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgbWFwLnZhbHVlcygpKSB7XG4gICAgICAgIHlpZWxkIFtlbnRyeS5uYW1lLCBlbnRyeS52YWx1ZV07XG4gICAgfVxufVxuY2xhc3MgSHR0cEhlYWRlcnNJbXBsIHtcbiAgICBjb25zdHJ1Y3RvcihyYXdIZWFkZXJzKSB7XG4gICAgICAgIHRoaXMuX2hlYWRlcnNNYXAgPSBuZXcgTWFwKCk7XG4gICAgICAgIGlmIChyYXdIZWFkZXJzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGhlYWRlck5hbWUgb2YgT2JqZWN0LmtleXMocmF3SGVhZGVycykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldChoZWFkZXJOYW1lLCByYXdIZWFkZXJzW2hlYWRlck5hbWVdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXQgYSBoZWFkZXIgaW4gdGhpcyBjb2xsZWN0aW9uIHdpdGggdGhlIHByb3ZpZGVkIG5hbWUgYW5kIHZhbHVlLiBUaGUgbmFtZSBpc1xuICAgICAqIGNhc2UtaW5zZW5zaXRpdmUuXG4gICAgICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgaGVhZGVyIHRvIHNldC4gVGhpcyB2YWx1ZSBpcyBjYXNlLWluc2Vuc2l0aXZlLlxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSBvZiB0aGUgaGVhZGVyIHRvIHNldC5cbiAgICAgKi9cbiAgICBzZXQobmFtZSwgdmFsdWUpIHtcbiAgICAgICAgdGhpcy5faGVhZGVyc01hcC5zZXQobm9ybWFsaXplTmFtZShuYW1lKSwgeyBuYW1lLCB2YWx1ZTogU3RyaW5nKHZhbHVlKS50cmltKCkgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgaGVhZGVyIHZhbHVlIGZvciB0aGUgcHJvdmlkZWQgaGVhZGVyIG5hbWUsIG9yIHVuZGVmaW5lZCBpZiBubyBoZWFkZXIgZXhpc3RzIGluIHRoaXNcbiAgICAgKiBjb2xsZWN0aW9uIHdpdGggdGhlIHByb3ZpZGVkIG5hbWUuXG4gICAgICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgaGVhZGVyLiBUaGlzIHZhbHVlIGlzIGNhc2UtaW5zZW5zaXRpdmUuXG4gICAgICovXG4gICAgZ2V0KG5hbWUpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gKF9hID0gdGhpcy5faGVhZGVyc01hcC5nZXQobm9ybWFsaXplTmFtZShuYW1lKSkpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IHdoZXRoZXIgb3Igbm90IHRoaXMgaGVhZGVyIGNvbGxlY3Rpb24gY29udGFpbnMgYSBoZWFkZXIgZW50cnkgZm9yIHRoZSBwcm92aWRlZCBoZWFkZXIgbmFtZS5cbiAgICAgKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBoZWFkZXIgdG8gc2V0LiBUaGlzIHZhbHVlIGlzIGNhc2UtaW5zZW5zaXRpdmUuXG4gICAgICovXG4gICAgaGFzKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hlYWRlcnNNYXAuaGFzKG5vcm1hbGl6ZU5hbWUobmFtZSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZW1vdmUgdGhlIGhlYWRlciB3aXRoIHRoZSBwcm92aWRlZCBoZWFkZXJOYW1lLlxuICAgICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGhlYWRlciB0byByZW1vdmUuXG4gICAgICovXG4gICAgZGVsZXRlKG5hbWUpIHtcbiAgICAgICAgdGhpcy5faGVhZGVyc01hcC5kZWxldGUobm9ybWFsaXplTmFtZShuYW1lKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgSlNPTiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBIVFRQIGhlYWRlciBjb2xsZWN0aW9uLlxuICAgICAqL1xuICAgIHRvSlNPTihvcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgICAgIGlmIChvcHRpb25zLnByZXNlcnZlQ2FzZSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLl9oZWFkZXJzTWFwLnZhbHVlcygpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0W2VudHJ5Lm5hbWVdID0gZW50cnkudmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtub3JtYWxpemVkTmFtZSwgZW50cnldIG9mIHRoaXMuX2hlYWRlcnNNYXApIHtcbiAgICAgICAgICAgICAgICByZXN1bHRbbm9ybWFsaXplZE5hbWVdID0gZW50cnkudmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBIVFRQIGhlYWRlciBjb2xsZWN0aW9uLlxuICAgICAqL1xuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy50b0pTT04oeyBwcmVzZXJ2ZUNhc2U6IHRydWUgfSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJdGVyYXRlIG92ZXIgdHVwbGVzIG9mIGhlYWRlciBbbmFtZSwgdmFsdWVdIHBhaXJzLlxuICAgICAqL1xuICAgIFtTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgICAgICByZXR1cm4gaGVhZGVySXRlcmF0b3IodGhpcy5faGVhZGVyc01hcCk7XG4gICAgfVxufVxuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCB0aGF0IHNhdGlzZmllcyB0aGUgYEh0dHBIZWFkZXJzYCBpbnRlcmZhY2UuXG4gKiBAcGFyYW0gcmF3SGVhZGVycyAtIEEgc2ltcGxlIG9iamVjdCByZXByZXNlbnRpbmcgaW5pdGlhbCBoZWFkZXJzXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUh0dHBIZWFkZXJzKHJhd0hlYWRlcnMpIHtcbiAgICByZXR1cm4gbmV3IEh0dHBIZWFkZXJzSW1wbChyYXdIZWFkZXJzKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWh0dHBIZWFkZXJzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZm9ybURhdGFQb2xpY3lOYW1lID0gdm9pZCAwO1xuZXhwb3J0cy5mb3JtRGF0YVBvbGljeSA9IGZvcm1EYXRhUG9saWN5O1xuY29uc3QgY29yZV91dGlsXzEgPSByZXF1aXJlKFwiQGF6dXJlL2NvcmUtdXRpbFwiKTtcbmNvbnN0IGh0dHBIZWFkZXJzX2pzXzEgPSByZXF1aXJlKFwiLi4vaHR0cEhlYWRlcnMuanNcIik7XG4vKipcbiAqIFRoZSBwcm9ncmFtbWF0aWMgaWRlbnRpZmllciBvZiB0aGUgZm9ybURhdGFQb2xpY3kuXG4gKi9cbmV4cG9ydHMuZm9ybURhdGFQb2xpY3lOYW1lID0gXCJmb3JtRGF0YVBvbGljeVwiO1xuZnVuY3Rpb24gZm9ybURhdGFUb0Zvcm1EYXRhTWFwKGZvcm1EYXRhKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IGZvcm1EYXRhTWFwID0ge307XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgZm9ybURhdGEuZW50cmllcygpKSB7XG4gICAgICAgIChfYSA9IGZvcm1EYXRhTWFwW2tleV0pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IChmb3JtRGF0YU1hcFtrZXldID0gW10pO1xuICAgICAgICBmb3JtRGF0YU1hcFtrZXldLnB1c2godmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gZm9ybURhdGFNYXA7XG59XG4vKipcbiAqIEEgcG9saWN5IHRoYXQgZW5jb2RlcyBGb3JtRGF0YSBvbiB0aGUgcmVxdWVzdCBpbnRvIHRoZSBib2R5LlxuICovXG5mdW5jdGlvbiBmb3JtRGF0YVBvbGljeSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBleHBvcnRzLmZvcm1EYXRhUG9saWN5TmFtZSxcbiAgICAgICAgYXN5bmMgc2VuZFJlcXVlc3QocmVxdWVzdCwgbmV4dCkge1xuICAgICAgICAgICAgaWYgKGNvcmVfdXRpbF8xLmlzTm9kZUxpa2UgJiYgdHlwZW9mIEZvcm1EYXRhICE9PSBcInVuZGVmaW5lZFwiICYmIHJlcXVlc3QuYm9keSBpbnN0YW5jZW9mIEZvcm1EYXRhKSB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdC5mb3JtRGF0YSA9IGZvcm1EYXRhVG9Gb3JtRGF0YU1hcChyZXF1ZXN0LmJvZHkpO1xuICAgICAgICAgICAgICAgIHJlcXVlc3QuYm9keSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXF1ZXN0LmZvcm1EYXRhKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29udGVudFR5cGUgPSByZXF1ZXN0LmhlYWRlcnMuZ2V0KFwiQ29udGVudC1UeXBlXCIpO1xuICAgICAgICAgICAgICAgIGlmIChjb250ZW50VHlwZSAmJiBjb250ZW50VHlwZS5pbmRleE9mKFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmJvZHkgPSB3d3dGb3JtVXJsRW5jb2RlKHJlcXVlc3QuZm9ybURhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgcHJlcGFyZUZvcm1EYXRhKHJlcXVlc3QuZm9ybURhdGEsIHJlcXVlc3QpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXF1ZXN0LmZvcm1EYXRhID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5leHQocmVxdWVzdCk7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbmZ1bmN0aW9uIHd3d0Zvcm1VcmxFbmNvZGUoZm9ybURhdGEpIHtcbiAgICBjb25zdCB1cmxTZWFyY2hQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZm9ybURhdGEpKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBzdWJWYWx1ZSBvZiB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHVybFNlYXJjaFBhcmFtcy5hcHBlbmQoa2V5LCBzdWJWYWx1ZS50b1N0cmluZygpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHVybFNlYXJjaFBhcmFtcy5hcHBlbmQoa2V5LCB2YWx1ZS50b1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdXJsU2VhcmNoUGFyYW1zLnRvU3RyaW5nKCk7XG59XG5hc3luYyBmdW5jdGlvbiBwcmVwYXJlRm9ybURhdGEoZm9ybURhdGEsIHJlcXVlc3QpIHtcbiAgICAvLyB2YWxpZGF0ZSBjb250ZW50IHR5cGUgKG11bHRpcGFydC9mb3JtLWRhdGEpXG4gICAgY29uc3QgY29udGVudFR5cGUgPSByZXF1ZXN0LmhlYWRlcnMuZ2V0KFwiQ29udGVudC1UeXBlXCIpO1xuICAgIGlmIChjb250ZW50VHlwZSAmJiAhY29udGVudFR5cGUuc3RhcnRzV2l0aChcIm11bHRpcGFydC9mb3JtLWRhdGFcIikpIHtcbiAgICAgICAgLy8gY29udGVudCB0eXBlIGlzIHNwZWNpZmllZCBhbmQgaXMgbm90IG11bHRpcGFydC9mb3JtLWRhdGEuIEV4aXQuXG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmVxdWVzdC5oZWFkZXJzLnNldChcIkNvbnRlbnQtVHlwZVwiLCBjb250ZW50VHlwZSAhPT0gbnVsbCAmJiBjb250ZW50VHlwZSAhPT0gdm9pZCAwID8gY29udGVudFR5cGUgOiBcIm11bHRpcGFydC9mb3JtLWRhdGFcIik7XG4gICAgLy8gc2V0IGJvZHkgdG8gTXVsdGlwYXJ0UmVxdWVzdEJvZHkgdXNpbmcgY29udGVudCBmcm9tIEZvcm1EYXRhTWFwXG4gICAgY29uc3QgcGFydHMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IFtmaWVsZE5hbWUsIHZhbHVlc10gb2YgT2JqZWN0LmVudHJpZXMoZm9ybURhdGEpKSB7XG4gICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgQXJyYXkuaXNBcnJheSh2YWx1ZXMpID8gdmFsdWVzIDogW3ZhbHVlc10pIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBwYXJ0cy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogKDAsIGh0dHBIZWFkZXJzX2pzXzEuY3JlYXRlSHR0cEhlYWRlcnMpKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiQ29udGVudC1EaXNwb3NpdGlvblwiOiBgZm9ybS1kYXRhOyBuYW1lPVwiJHtmaWVsZE5hbWV9XCJgLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgYm9keTogKDAsIGNvcmVfdXRpbF8xLnN0cmluZ1RvVWludDhBcnJheSkodmFsdWUsIFwidXRmLThcIiksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCB2YWx1ZSBmb3Iga2V5ICR7ZmllbGROYW1lfTogJHt2YWx1ZX0uIFZhbHVlIHNob3VsZCBiZSBzZXJpYWxpemVkIHRvIHN0cmluZyBmaXJzdC5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIHVzaW5nIHx8IGluc3RlYWQgb2YgPz8gaGVyZSBzaW5jZSBpZiB2YWx1ZS5uYW1lIGlzIGVtcHR5IHdlIHNob3VsZCBjcmVhdGUgYSBmaWxlIG5hbWVcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlTmFtZSA9IHZhbHVlLm5hbWUgfHwgXCJibG9iXCI7XG4gICAgICAgICAgICAgICAgY29uc3QgaGVhZGVycyA9ICgwLCBodHRwSGVhZGVyc19qc18xLmNyZWF0ZUh0dHBIZWFkZXJzKSgpO1xuICAgICAgICAgICAgICAgIGhlYWRlcnMuc2V0KFwiQ29udGVudC1EaXNwb3NpdGlvblwiLCBgZm9ybS1kYXRhOyBuYW1lPVwiJHtmaWVsZE5hbWV9XCI7IGZpbGVuYW1lPVwiJHtmaWxlTmFtZX1cImApO1xuICAgICAgICAgICAgICAgIC8vIGFnYWluLCB8fCBpcyB1c2VkIHNpbmNlIGFuIGVtcHR5IHZhbHVlLnR5cGUgbWVhbnMgdGhlIGNvbnRlbnQgdHlwZSBpcyB1bnNldFxuICAgICAgICAgICAgICAgIGhlYWRlcnMuc2V0KFwiQ29udGVudC1UeXBlXCIsIHZhbHVlLnR5cGUgfHwgXCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIik7XG4gICAgICAgICAgICAgICAgcGFydHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgIGJvZHk6IHZhbHVlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJlcXVlc3QubXVsdGlwYXJ0Qm9keSA9IHsgcGFydHMgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZvcm1EYXRhUG9saWN5LmpzLm1hcCIsCiAgICAiLyoqXG4gKiBIZWxwZXJzLlxuICovXG5cbnZhciBzID0gMTAwMDtcbnZhciBtID0gcyAqIDYwO1xudmFyIGggPSBtICogNjA7XG52YXIgZCA9IGggKiAyNDtcbnZhciB3ID0gZCAqIDc7XG52YXIgeSA9IGQgKiAzNjUuMjU7XG5cbi8qKlxuICogUGFyc2Ugb3IgZm9ybWF0IHRoZSBnaXZlbiBgdmFsYC5cbiAqXG4gKiBPcHRpb25zOlxuICpcbiAqICAtIGBsb25nYCB2ZXJib3NlIGZvcm1hdHRpbmcgW2ZhbHNlXVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfE51bWJlcn0gdmFsXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhyb3cgYW4gZXJyb3IgaWYgdmFsIGlzIG5vdCBhIG5vbi1lbXB0eSBzdHJpbmcgb3IgYSBudW1iZXJcbiAqIEByZXR1cm4ge1N0cmluZ3xOdW1iZXJ9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHZhbCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsO1xuICBpZiAodHlwZSA9PT0gJ3N0cmluZycgJiYgdmFsLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gcGFyc2UodmFsKTtcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZSh2YWwpKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMubG9uZyA/IGZtdExvbmcodmFsKSA6IGZtdFNob3J0KHZhbCk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgICd2YWwgaXMgbm90IGEgbm9uLWVtcHR5IHN0cmluZyBvciBhIHZhbGlkIG51bWJlci4gdmFsPScgK1xuICAgICAgSlNPTi5zdHJpbmdpZnkodmFsKVxuICApO1xufTtcblxuLyoqXG4gKiBQYXJzZSB0aGUgZ2l2ZW4gYHN0cmAgYW5kIHJldHVybiBtaWxsaXNlY29uZHMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHJldHVybiB7TnVtYmVyfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gcGFyc2Uoc3RyKSB7XG4gIHN0ciA9IFN0cmluZyhzdHIpO1xuICBpZiAoc3RyLmxlbmd0aCA+IDEwMCkge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgbWF0Y2ggPSAvXigtPyg/OlxcZCspP1xcLj9cXGQrKSAqKG1pbGxpc2Vjb25kcz98bXNlY3M/fG1zfHNlY29uZHM/fHNlY3M/fHN8bWludXRlcz98bWlucz98bXxob3Vycz98aHJzP3xofGRheXM/fGR8d2Vla3M/fHd8eWVhcnM/fHlycz98eSk/JC9pLmV4ZWMoXG4gICAgc3RyXG4gICk7XG4gIGlmICghbWF0Y2gpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIG4gPSBwYXJzZUZsb2F0KG1hdGNoWzFdKTtcbiAgdmFyIHR5cGUgPSAobWF0Y2hbMl0gfHwgJ21zJykudG9Mb3dlckNhc2UoKTtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAneWVhcnMnOlxuICAgIGNhc2UgJ3llYXInOlxuICAgIGNhc2UgJ3lycyc6XG4gICAgY2FzZSAneXInOlxuICAgIGNhc2UgJ3knOlxuICAgICAgcmV0dXJuIG4gKiB5O1xuICAgIGNhc2UgJ3dlZWtzJzpcbiAgICBjYXNlICd3ZWVrJzpcbiAgICBjYXNlICd3JzpcbiAgICAgIHJldHVybiBuICogdztcbiAgICBjYXNlICdkYXlzJzpcbiAgICBjYXNlICdkYXknOlxuICAgIGNhc2UgJ2QnOlxuICAgICAgcmV0dXJuIG4gKiBkO1xuICAgIGNhc2UgJ2hvdXJzJzpcbiAgICBjYXNlICdob3VyJzpcbiAgICBjYXNlICdocnMnOlxuICAgIGNhc2UgJ2hyJzpcbiAgICBjYXNlICdoJzpcbiAgICAgIHJldHVybiBuICogaDtcbiAgICBjYXNlICdtaW51dGVzJzpcbiAgICBjYXNlICdtaW51dGUnOlxuICAgIGNhc2UgJ21pbnMnOlxuICAgIGNhc2UgJ21pbic6XG4gICAgY2FzZSAnbSc6XG4gICAgICByZXR1cm4gbiAqIG07XG4gICAgY2FzZSAnc2Vjb25kcyc6XG4gICAgY2FzZSAnc2Vjb25kJzpcbiAgICBjYXNlICdzZWNzJzpcbiAgICBjYXNlICdzZWMnOlxuICAgIGNhc2UgJ3MnOlxuICAgICAgcmV0dXJuIG4gKiBzO1xuICAgIGNhc2UgJ21pbGxpc2Vjb25kcyc6XG4gICAgY2FzZSAnbWlsbGlzZWNvbmQnOlxuICAgIGNhc2UgJ21zZWNzJzpcbiAgICBjYXNlICdtc2VjJzpcbiAgICBjYXNlICdtcyc6XG4gICAgICByZXR1cm4gbjtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIFNob3J0IGZvcm1hdCBmb3IgYG1zYC5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gbXNcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGZtdFNob3J0KG1zKSB7XG4gIHZhciBtc0FicyA9IE1hdGguYWJzKG1zKTtcbiAgaWYgKG1zQWJzID49IGQpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIGQpICsgJ2QnO1xuICB9XG4gIGlmIChtc0FicyA+PSBoKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBoKSArICdoJztcbiAgfVxuICBpZiAobXNBYnMgPj0gbSkge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gbSkgKyAnbSc7XG4gIH1cbiAgaWYgKG1zQWJzID49IHMpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIHMpICsgJ3MnO1xuICB9XG4gIHJldHVybiBtcyArICdtcyc7XG59XG5cbi8qKlxuICogTG9uZyBmb3JtYXQgZm9yIGBtc2AuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IG1zXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBmbXRMb25nKG1zKSB7XG4gIHZhciBtc0FicyA9IE1hdGguYWJzKG1zKTtcbiAgaWYgKG1zQWJzID49IGQpIHtcbiAgICByZXR1cm4gcGx1cmFsKG1zLCBtc0FicywgZCwgJ2RheScpO1xuICB9XG4gIGlmIChtc0FicyA+PSBoKSB7XG4gICAgcmV0dXJuIHBsdXJhbChtcywgbXNBYnMsIGgsICdob3VyJyk7XG4gIH1cbiAgaWYgKG1zQWJzID49IG0pIHtcbiAgICByZXR1cm4gcGx1cmFsKG1zLCBtc0FicywgbSwgJ21pbnV0ZScpO1xuICB9XG4gIGlmIChtc0FicyA+PSBzKSB7XG4gICAgcmV0dXJuIHBsdXJhbChtcywgbXNBYnMsIHMsICdzZWNvbmQnKTtcbiAgfVxuICByZXR1cm4gbXMgKyAnIG1zJztcbn1cblxuLyoqXG4gKiBQbHVyYWxpemF0aW9uIGhlbHBlci5cbiAqL1xuXG5mdW5jdGlvbiBwbHVyYWwobXMsIG1zQWJzLCBuLCBuYW1lKSB7XG4gIHZhciBpc1BsdXJhbCA9IG1zQWJzID49IG4gKiAxLjU7XG4gIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gbikgKyAnICcgKyBuYW1lICsgKGlzUGx1cmFsID8gJ3MnIDogJycpO1xufVxuIiwKICAgICJcbi8qKlxuICogVGhpcyBpcyB0aGUgY29tbW9uIGxvZ2ljIGZvciBib3RoIHRoZSBOb2RlLmpzIGFuZCB3ZWIgYnJvd3NlclxuICogaW1wbGVtZW50YXRpb25zIG9mIGBkZWJ1ZygpYC5cbiAqL1xuXG5mdW5jdGlvbiBzZXR1cChlbnYpIHtcblx0Y3JlYXRlRGVidWcuZGVidWcgPSBjcmVhdGVEZWJ1Zztcblx0Y3JlYXRlRGVidWcuZGVmYXVsdCA9IGNyZWF0ZURlYnVnO1xuXHRjcmVhdGVEZWJ1Zy5jb2VyY2UgPSBjb2VyY2U7XG5cdGNyZWF0ZURlYnVnLmRpc2FibGUgPSBkaXNhYmxlO1xuXHRjcmVhdGVEZWJ1Zy5lbmFibGUgPSBlbmFibGU7XG5cdGNyZWF0ZURlYnVnLmVuYWJsZWQgPSBlbmFibGVkO1xuXHRjcmVhdGVEZWJ1Zy5odW1hbml6ZSA9IHJlcXVpcmUoJ21zJyk7XG5cdGNyZWF0ZURlYnVnLmRlc3Ryb3kgPSBkZXN0cm95O1xuXG5cdE9iamVjdC5rZXlzKGVudikuZm9yRWFjaChrZXkgPT4ge1xuXHRcdGNyZWF0ZURlYnVnW2tleV0gPSBlbnZba2V5XTtcblx0fSk7XG5cblx0LyoqXG5cdCogVGhlIGN1cnJlbnRseSBhY3RpdmUgZGVidWcgbW9kZSBuYW1lcywgYW5kIG5hbWVzIHRvIHNraXAuXG5cdCovXG5cblx0Y3JlYXRlRGVidWcubmFtZXMgPSBbXTtcblx0Y3JlYXRlRGVidWcuc2tpcHMgPSBbXTtcblxuXHQvKipcblx0KiBNYXAgb2Ygc3BlY2lhbCBcIiVuXCIgaGFuZGxpbmcgZnVuY3Rpb25zLCBmb3IgdGhlIGRlYnVnIFwiZm9ybWF0XCIgYXJndW1lbnQuXG5cdCpcblx0KiBWYWxpZCBrZXkgbmFtZXMgYXJlIGEgc2luZ2xlLCBsb3dlciBvciB1cHBlci1jYXNlIGxldHRlciwgaS5lLiBcIm5cIiBhbmQgXCJOXCIuXG5cdCovXG5cdGNyZWF0ZURlYnVnLmZvcm1hdHRlcnMgPSB7fTtcblxuXHQvKipcblx0KiBTZWxlY3RzIGEgY29sb3IgZm9yIGEgZGVidWcgbmFtZXNwYWNlXG5cdCogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZSBUaGUgbmFtZXNwYWNlIHN0cmluZyBmb3IgdGhlIGRlYnVnIGluc3RhbmNlIHRvIGJlIGNvbG9yZWRcblx0KiBAcmV0dXJuIHtOdW1iZXJ8U3RyaW5nfSBBbiBBTlNJIGNvbG9yIGNvZGUgZm9yIHRoZSBnaXZlbiBuYW1lc3BhY2Vcblx0KiBAYXBpIHByaXZhdGVcblx0Ki9cblx0ZnVuY3Rpb24gc2VsZWN0Q29sb3IobmFtZXNwYWNlKSB7XG5cdFx0bGV0IGhhc2ggPSAwO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBuYW1lc3BhY2UubGVuZ3RoOyBpKyspIHtcblx0XHRcdGhhc2ggPSAoKGhhc2ggPDwgNSkgLSBoYXNoKSArIG5hbWVzcGFjZS5jaGFyQ29kZUF0KGkpO1xuXHRcdFx0aGFzaCB8PSAwOyAvLyBDb252ZXJ0IHRvIDMyYml0IGludGVnZXJcblx0XHR9XG5cblx0XHRyZXR1cm4gY3JlYXRlRGVidWcuY29sb3JzW01hdGguYWJzKGhhc2gpICUgY3JlYXRlRGVidWcuY29sb3JzLmxlbmd0aF07XG5cdH1cblx0Y3JlYXRlRGVidWcuc2VsZWN0Q29sb3IgPSBzZWxlY3RDb2xvcjtcblxuXHQvKipcblx0KiBDcmVhdGUgYSBkZWJ1Z2dlciB3aXRoIHRoZSBnaXZlbiBgbmFtZXNwYWNlYC5cblx0KlxuXHQqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2Vcblx0KiBAcmV0dXJuIHtGdW5jdGlvbn1cblx0KiBAYXBpIHB1YmxpY1xuXHQqL1xuXHRmdW5jdGlvbiBjcmVhdGVEZWJ1ZyhuYW1lc3BhY2UpIHtcblx0XHRsZXQgcHJldlRpbWU7XG5cdFx0bGV0IGVuYWJsZU92ZXJyaWRlID0gbnVsbDtcblx0XHRsZXQgbmFtZXNwYWNlc0NhY2hlO1xuXHRcdGxldCBlbmFibGVkQ2FjaGU7XG5cblx0XHRmdW5jdGlvbiBkZWJ1ZyguLi5hcmdzKSB7XG5cdFx0XHQvLyBEaXNhYmxlZD9cblx0XHRcdGlmICghZGVidWcuZW5hYmxlZCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHNlbGYgPSBkZWJ1ZztcblxuXHRcdFx0Ly8gU2V0IGBkaWZmYCB0aW1lc3RhbXBcblx0XHRcdGNvbnN0IGN1cnIgPSBOdW1iZXIobmV3IERhdGUoKSk7XG5cdFx0XHRjb25zdCBtcyA9IGN1cnIgLSAocHJldlRpbWUgfHwgY3Vycik7XG5cdFx0XHRzZWxmLmRpZmYgPSBtcztcblx0XHRcdHNlbGYucHJldiA9IHByZXZUaW1lO1xuXHRcdFx0c2VsZi5jdXJyID0gY3Vycjtcblx0XHRcdHByZXZUaW1lID0gY3VycjtcblxuXHRcdFx0YXJnc1swXSA9IGNyZWF0ZURlYnVnLmNvZXJjZShhcmdzWzBdKTtcblxuXHRcdFx0aWYgKHR5cGVvZiBhcmdzWzBdICE9PSAnc3RyaW5nJykge1xuXHRcdFx0XHQvLyBBbnl0aGluZyBlbHNlIGxldCdzIGluc3BlY3Qgd2l0aCAlT1xuXHRcdFx0XHRhcmdzLnVuc2hpZnQoJyVPJyk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFwcGx5IGFueSBgZm9ybWF0dGVyc2AgdHJhbnNmb3JtYXRpb25zXG5cdFx0XHRsZXQgaW5kZXggPSAwO1xuXHRcdFx0YXJnc1swXSA9IGFyZ3NbMF0ucmVwbGFjZSgvJShbYS16QS1aJV0pL2csIChtYXRjaCwgZm9ybWF0KSA9PiB7XG5cdFx0XHRcdC8vIElmIHdlIGVuY291bnRlciBhbiBlc2NhcGVkICUgdGhlbiBkb24ndCBpbmNyZWFzZSB0aGUgYXJyYXkgaW5kZXhcblx0XHRcdFx0aWYgKG1hdGNoID09PSAnJSUnKSB7XG5cdFx0XHRcdFx0cmV0dXJuICclJztcblx0XHRcdFx0fVxuXHRcdFx0XHRpbmRleCsrO1xuXHRcdFx0XHRjb25zdCBmb3JtYXR0ZXIgPSBjcmVhdGVEZWJ1Zy5mb3JtYXR0ZXJzW2Zvcm1hdF07XG5cdFx0XHRcdGlmICh0eXBlb2YgZm9ybWF0dGVyID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0Y29uc3QgdmFsID0gYXJnc1tpbmRleF07XG5cdFx0XHRcdFx0bWF0Y2ggPSBmb3JtYXR0ZXIuY2FsbChzZWxmLCB2YWwpO1xuXG5cdFx0XHRcdFx0Ly8gTm93IHdlIG5lZWQgdG8gcmVtb3ZlIGBhcmdzW2luZGV4XWAgc2luY2UgaXQncyBpbmxpbmVkIGluIHRoZSBgZm9ybWF0YFxuXHRcdFx0XHRcdGFyZ3Muc3BsaWNlKGluZGV4LCAxKTtcblx0XHRcdFx0XHRpbmRleC0tO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBtYXRjaDtcblx0XHRcdH0pO1xuXG5cdFx0XHQvLyBBcHBseSBlbnYtc3BlY2lmaWMgZm9ybWF0dGluZyAoY29sb3JzLCBldGMuKVxuXHRcdFx0Y3JlYXRlRGVidWcuZm9ybWF0QXJncy5jYWxsKHNlbGYsIGFyZ3MpO1xuXG5cdFx0XHRjb25zdCBsb2dGbiA9IHNlbGYubG9nIHx8IGNyZWF0ZURlYnVnLmxvZztcblx0XHRcdGxvZ0ZuLmFwcGx5KHNlbGYsIGFyZ3MpO1xuXHRcdH1cblxuXHRcdGRlYnVnLm5hbWVzcGFjZSA9IG5hbWVzcGFjZTtcblx0XHRkZWJ1Zy51c2VDb2xvcnMgPSBjcmVhdGVEZWJ1Zy51c2VDb2xvcnMoKTtcblx0XHRkZWJ1Zy5jb2xvciA9IGNyZWF0ZURlYnVnLnNlbGVjdENvbG9yKG5hbWVzcGFjZSk7XG5cdFx0ZGVidWcuZXh0ZW5kID0gZXh0ZW5kO1xuXHRcdGRlYnVnLmRlc3Ryb3kgPSBjcmVhdGVEZWJ1Zy5kZXN0cm95OyAvLyBYWFggVGVtcG9yYXJ5LiBXaWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZS5cblxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkZWJ1ZywgJ2VuYWJsZWQnLCB7XG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcblx0XHRcdGdldDogKCkgPT4ge1xuXHRcdFx0XHRpZiAoZW5hYmxlT3ZlcnJpZGUgIT09IG51bGwpIHtcblx0XHRcdFx0XHRyZXR1cm4gZW5hYmxlT3ZlcnJpZGU7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG5hbWVzcGFjZXNDYWNoZSAhPT0gY3JlYXRlRGVidWcubmFtZXNwYWNlcykge1xuXHRcdFx0XHRcdG5hbWVzcGFjZXNDYWNoZSA9IGNyZWF0ZURlYnVnLm5hbWVzcGFjZXM7XG5cdFx0XHRcdFx0ZW5hYmxlZENhY2hlID0gY3JlYXRlRGVidWcuZW5hYmxlZChuYW1lc3BhY2UpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGVuYWJsZWRDYWNoZTtcblx0XHRcdH0sXG5cdFx0XHRzZXQ6IHYgPT4ge1xuXHRcdFx0XHRlbmFibGVPdmVycmlkZSA9IHY7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHQvLyBFbnYtc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gbG9naWMgZm9yIGRlYnVnIGluc3RhbmNlc1xuXHRcdGlmICh0eXBlb2YgY3JlYXRlRGVidWcuaW5pdCA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0Y3JlYXRlRGVidWcuaW5pdChkZWJ1Zyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGRlYnVnO1xuXHR9XG5cblx0ZnVuY3Rpb24gZXh0ZW5kKG5hbWVzcGFjZSwgZGVsaW1pdGVyKSB7XG5cdFx0Y29uc3QgbmV3RGVidWcgPSBjcmVhdGVEZWJ1Zyh0aGlzLm5hbWVzcGFjZSArICh0eXBlb2YgZGVsaW1pdGVyID09PSAndW5kZWZpbmVkJyA/ICc6JyA6IGRlbGltaXRlcikgKyBuYW1lc3BhY2UpO1xuXHRcdG5ld0RlYnVnLmxvZyA9IHRoaXMubG9nO1xuXHRcdHJldHVybiBuZXdEZWJ1Zztcblx0fVxuXG5cdC8qKlxuXHQqIEVuYWJsZXMgYSBkZWJ1ZyBtb2RlIGJ5IG5hbWVzcGFjZXMuIFRoaXMgY2FuIGluY2x1ZGUgbW9kZXNcblx0KiBzZXBhcmF0ZWQgYnkgYSBjb2xvbiBhbmQgd2lsZGNhcmRzLlxuXHQqXG5cdCogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZXNcblx0KiBAYXBpIHB1YmxpY1xuXHQqL1xuXHRmdW5jdGlvbiBlbmFibGUobmFtZXNwYWNlcykge1xuXHRcdGNyZWF0ZURlYnVnLnNhdmUobmFtZXNwYWNlcyk7XG5cdFx0Y3JlYXRlRGVidWcubmFtZXNwYWNlcyA9IG5hbWVzcGFjZXM7XG5cblx0XHRjcmVhdGVEZWJ1Zy5uYW1lcyA9IFtdO1xuXHRcdGNyZWF0ZURlYnVnLnNraXBzID0gW107XG5cblx0XHRsZXQgaTtcblx0XHRjb25zdCBzcGxpdCA9ICh0eXBlb2YgbmFtZXNwYWNlcyA9PT0gJ3N0cmluZycgPyBuYW1lc3BhY2VzIDogJycpLnNwbGl0KC9bXFxzLF0rLyk7XG5cdFx0Y29uc3QgbGVuID0gc3BsaXQubGVuZ3RoO1xuXG5cdFx0Zm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0XHRpZiAoIXNwbGl0W2ldKSB7XG5cdFx0XHRcdC8vIGlnbm9yZSBlbXB0eSBzdHJpbmdzXG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRuYW1lc3BhY2VzID0gc3BsaXRbaV0ucmVwbGFjZSgvXFwqL2csICcuKj8nKTtcblxuXHRcdFx0aWYgKG5hbWVzcGFjZXNbMF0gPT09ICctJykge1xuXHRcdFx0XHRjcmVhdGVEZWJ1Zy5za2lwcy5wdXNoKG5ldyBSZWdFeHAoJ14nICsgbmFtZXNwYWNlcy5zbGljZSgxKSArICckJykpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y3JlYXRlRGVidWcubmFtZXMucHVzaChuZXcgUmVnRXhwKCdeJyArIG5hbWVzcGFjZXMgKyAnJCcpKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0KiBEaXNhYmxlIGRlYnVnIG91dHB1dC5cblx0KlxuXHQqIEByZXR1cm4ge1N0cmluZ30gbmFtZXNwYWNlc1xuXHQqIEBhcGkgcHVibGljXG5cdCovXG5cdGZ1bmN0aW9uIGRpc2FibGUoKSB7XG5cdFx0Y29uc3QgbmFtZXNwYWNlcyA9IFtcblx0XHRcdC4uLmNyZWF0ZURlYnVnLm5hbWVzLm1hcCh0b05hbWVzcGFjZSksXG5cdFx0XHQuLi5jcmVhdGVEZWJ1Zy5za2lwcy5tYXAodG9OYW1lc3BhY2UpLm1hcChuYW1lc3BhY2UgPT4gJy0nICsgbmFtZXNwYWNlKVxuXHRcdF0uam9pbignLCcpO1xuXHRcdGNyZWF0ZURlYnVnLmVuYWJsZSgnJyk7XG5cdFx0cmV0dXJuIG5hbWVzcGFjZXM7XG5cdH1cblxuXHQvKipcblx0KiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIG1vZGUgbmFtZSBpcyBlbmFibGVkLCBmYWxzZSBvdGhlcndpc2UuXG5cdCpcblx0KiBAcGFyYW0ge1N0cmluZ30gbmFtZVxuXHQqIEByZXR1cm4ge0Jvb2xlYW59XG5cdCogQGFwaSBwdWJsaWNcblx0Ki9cblx0ZnVuY3Rpb24gZW5hYmxlZChuYW1lKSB7XG5cdFx0aWYgKG5hbWVbbmFtZS5sZW5ndGggLSAxXSA9PT0gJyonKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRsZXQgaTtcblx0XHRsZXQgbGVuO1xuXG5cdFx0Zm9yIChpID0gMCwgbGVuID0gY3JlYXRlRGVidWcuc2tpcHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcblx0XHRcdGlmIChjcmVhdGVEZWJ1Zy5za2lwc1tpXS50ZXN0KG5hbWUpKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmb3IgKGkgPSAwLCBsZW4gPSBjcmVhdGVEZWJ1Zy5uYW1lcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuXHRcdFx0aWYgKGNyZWF0ZURlYnVnLm5hbWVzW2ldLnRlc3QobmFtZSkpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCogQ29udmVydCByZWdleHAgdG8gbmFtZXNwYWNlXG5cdCpcblx0KiBAcGFyYW0ge1JlZ0V4cH0gcmVneGVwXG5cdCogQHJldHVybiB7U3RyaW5nfSBuYW1lc3BhY2Vcblx0KiBAYXBpIHByaXZhdGVcblx0Ki9cblx0ZnVuY3Rpb24gdG9OYW1lc3BhY2UocmVnZXhwKSB7XG5cdFx0cmV0dXJuIHJlZ2V4cC50b1N0cmluZygpXG5cdFx0XHQuc3Vic3RyaW5nKDIsIHJlZ2V4cC50b1N0cmluZygpLmxlbmd0aCAtIDIpXG5cdFx0XHQucmVwbGFjZSgvXFwuXFwqXFw/JC8sICcqJyk7XG5cdH1cblxuXHQvKipcblx0KiBDb2VyY2UgYHZhbGAuXG5cdCpcblx0KiBAcGFyYW0ge01peGVkfSB2YWxcblx0KiBAcmV0dXJuIHtNaXhlZH1cblx0KiBAYXBpIHByaXZhdGVcblx0Ki9cblx0ZnVuY3Rpb24gY29lcmNlKHZhbCkge1xuXHRcdGlmICh2YWwgaW5zdGFuY2VvZiBFcnJvcikge1xuXHRcdFx0cmV0dXJuIHZhbC5zdGFjayB8fCB2YWwubWVzc2FnZTtcblx0XHR9XG5cdFx0cmV0dXJuIHZhbDtcblx0fVxuXG5cdC8qKlxuXHQqIFhYWCBETyBOT1QgVVNFLiBUaGlzIGlzIGEgdGVtcG9yYXJ5IHN0dWIgZnVuY3Rpb24uXG5cdCogWFhYIEl0IFdJTEwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlLlxuXHQqL1xuXHRmdW5jdGlvbiBkZXN0cm95KCkge1xuXHRcdGNvbnNvbGUud2FybignSW5zdGFuY2UgbWV0aG9kIGBkZWJ1Zy5kZXN0cm95KClgIGlzIGRlcHJlY2F0ZWQgYW5kIG5vIGxvbmdlciBkb2VzIGFueXRoaW5nLiBJdCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbiBvZiBgZGVidWdgLicpO1xuXHR9XG5cblx0Y3JlYXRlRGVidWcuZW5hYmxlKGNyZWF0ZURlYnVnLmxvYWQoKSk7XG5cblx0cmV0dXJuIGNyZWF0ZURlYnVnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldHVwO1xuIiwKICAgICIvKiBlc2xpbnQtZW52IGJyb3dzZXIgKi9cblxuLyoqXG4gKiBUaGlzIGlzIHRoZSB3ZWIgYnJvd3NlciBpbXBsZW1lbnRhdGlvbiBvZiBgZGVidWcoKWAuXG4gKi9cblxuZXhwb3J0cy5mb3JtYXRBcmdzID0gZm9ybWF0QXJncztcbmV4cG9ydHMuc2F2ZSA9IHNhdmU7XG5leHBvcnRzLmxvYWQgPSBsb2FkO1xuZXhwb3J0cy51c2VDb2xvcnMgPSB1c2VDb2xvcnM7XG5leHBvcnRzLnN0b3JhZ2UgPSBsb2NhbHN0b3JhZ2UoKTtcbmV4cG9ydHMuZGVzdHJveSA9ICgoKSA9PiB7XG5cdGxldCB3YXJuZWQgPSBmYWxzZTtcblxuXHRyZXR1cm4gKCkgPT4ge1xuXHRcdGlmICghd2FybmVkKSB7XG5cdFx0XHR3YXJuZWQgPSB0cnVlO1xuXHRcdFx0Y29uc29sZS53YXJuKCdJbnN0YW5jZSBtZXRob2QgYGRlYnVnLmRlc3Ryb3koKWAgaXMgZGVwcmVjYXRlZCBhbmQgbm8gbG9uZ2VyIGRvZXMgYW55dGhpbmcuIEl0IHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIGBkZWJ1Z2AuJyk7XG5cdFx0fVxuXHR9O1xufSkoKTtcblxuLyoqXG4gKiBDb2xvcnMuXG4gKi9cblxuZXhwb3J0cy5jb2xvcnMgPSBbXG5cdCcjMDAwMENDJyxcblx0JyMwMDAwRkYnLFxuXHQnIzAwMzNDQycsXG5cdCcjMDAzM0ZGJyxcblx0JyMwMDY2Q0MnLFxuXHQnIzAwNjZGRicsXG5cdCcjMDA5OUNDJyxcblx0JyMwMDk5RkYnLFxuXHQnIzAwQ0MwMCcsXG5cdCcjMDBDQzMzJyxcblx0JyMwMENDNjYnLFxuXHQnIzAwQ0M5OScsXG5cdCcjMDBDQ0NDJyxcblx0JyMwMENDRkYnLFxuXHQnIzMzMDBDQycsXG5cdCcjMzMwMEZGJyxcblx0JyMzMzMzQ0MnLFxuXHQnIzMzMzNGRicsXG5cdCcjMzM2NkNDJyxcblx0JyMzMzY2RkYnLFxuXHQnIzMzOTlDQycsXG5cdCcjMzM5OUZGJyxcblx0JyMzM0NDMDAnLFxuXHQnIzMzQ0MzMycsXG5cdCcjMzNDQzY2Jyxcblx0JyMzM0NDOTknLFxuXHQnIzMzQ0NDQycsXG5cdCcjMzNDQ0ZGJyxcblx0JyM2NjAwQ0MnLFxuXHQnIzY2MDBGRicsXG5cdCcjNjYzM0NDJyxcblx0JyM2NjMzRkYnLFxuXHQnIzY2Q0MwMCcsXG5cdCcjNjZDQzMzJyxcblx0JyM5OTAwQ0MnLFxuXHQnIzk5MDBGRicsXG5cdCcjOTkzM0NDJyxcblx0JyM5OTMzRkYnLFxuXHQnIzk5Q0MwMCcsXG5cdCcjOTlDQzMzJyxcblx0JyNDQzAwMDAnLFxuXHQnI0NDMDAzMycsXG5cdCcjQ0MwMDY2Jyxcblx0JyNDQzAwOTknLFxuXHQnI0NDMDBDQycsXG5cdCcjQ0MwMEZGJyxcblx0JyNDQzMzMDAnLFxuXHQnI0NDMzMzMycsXG5cdCcjQ0MzMzY2Jyxcblx0JyNDQzMzOTknLFxuXHQnI0NDMzNDQycsXG5cdCcjQ0MzM0ZGJyxcblx0JyNDQzY2MDAnLFxuXHQnI0NDNjYzMycsXG5cdCcjQ0M5OTAwJyxcblx0JyNDQzk5MzMnLFxuXHQnI0NDQ0MwMCcsXG5cdCcjQ0NDQzMzJyxcblx0JyNGRjAwMDAnLFxuXHQnI0ZGMDAzMycsXG5cdCcjRkYwMDY2Jyxcblx0JyNGRjAwOTknLFxuXHQnI0ZGMDBDQycsXG5cdCcjRkYwMEZGJyxcblx0JyNGRjMzMDAnLFxuXHQnI0ZGMzMzMycsXG5cdCcjRkYzMzY2Jyxcblx0JyNGRjMzOTknLFxuXHQnI0ZGMzNDQycsXG5cdCcjRkYzM0ZGJyxcblx0JyNGRjY2MDAnLFxuXHQnI0ZGNjYzMycsXG5cdCcjRkY5OTAwJyxcblx0JyNGRjk5MzMnLFxuXHQnI0ZGQ0MwMCcsXG5cdCcjRkZDQzMzJ1xuXTtcblxuLyoqXG4gKiBDdXJyZW50bHkgb25seSBXZWJLaXQtYmFzZWQgV2ViIEluc3BlY3RvcnMsIEZpcmVmb3ggPj0gdjMxLFxuICogYW5kIHRoZSBGaXJlYnVnIGV4dGVuc2lvbiAoYW55IEZpcmVmb3ggdmVyc2lvbikgYXJlIGtub3duXG4gKiB0byBzdXBwb3J0IFwiJWNcIiBDU1MgY3VzdG9taXphdGlvbnMuXG4gKlxuICogVE9ETzogYWRkIGEgYGxvY2FsU3RvcmFnZWAgdmFyaWFibGUgdG8gZXhwbGljaXRseSBlbmFibGUvZGlzYWJsZSBjb2xvcnNcbiAqL1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZnVuY3Rpb24gdXNlQ29sb3JzKCkge1xuXHQvLyBOQjogSW4gYW4gRWxlY3Ryb24gcHJlbG9hZCBzY3JpcHQsIGRvY3VtZW50IHdpbGwgYmUgZGVmaW5lZCBidXQgbm90IGZ1bGx5XG5cdC8vIGluaXRpYWxpemVkLiBTaW5jZSB3ZSBrbm93IHdlJ3JlIGluIENocm9tZSwgd2UnbGwganVzdCBkZXRlY3QgdGhpcyBjYXNlXG5cdC8vIGV4cGxpY2l0bHlcblx0aWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5wcm9jZXNzICYmICh3aW5kb3cucHJvY2Vzcy50eXBlID09PSAncmVuZGVyZXInIHx8IHdpbmRvdy5wcm9jZXNzLl9fbndqcykpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8vIEludGVybmV0IEV4cGxvcmVyIGFuZCBFZGdlIGRvIG5vdCBzdXBwb3J0IGNvbG9ycy5cblx0aWYgKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci51c2VyQWdlbnQgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC8oZWRnZXx0cmlkZW50KVxcLyhcXGQrKS8pKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0bGV0IG07XG5cblx0Ly8gSXMgd2Via2l0PyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8xNjQ1OTYwNi8zNzY3NzNcblx0Ly8gZG9jdW1lbnQgaXMgdW5kZWZpbmVkIGluIHJlYWN0LW5hdGl2ZTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0LW5hdGl2ZS9wdWxsLzE2MzJcblx0cmV0dXJuICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLldlYmtpdEFwcGVhcmFuY2UpIHx8XG5cdFx0Ly8gSXMgZmlyZWJ1Zz8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzk4MTIwLzM3Njc3M1xuXHRcdCh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuY29uc29sZSAmJiAod2luZG93LmNvbnNvbGUuZmlyZWJ1ZyB8fCAod2luZG93LmNvbnNvbGUuZXhjZXB0aW9uICYmIHdpbmRvdy5jb25zb2xlLnRhYmxlKSkpIHx8XG5cdFx0Ly8gSXMgZmlyZWZveCA+PSB2MzE/XG5cdFx0Ly8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9Ub29scy9XZWJfQ29uc29sZSNTdHlsaW5nX21lc3NhZ2VzXG5cdFx0KHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci51c2VyQWdlbnQgJiYgKG0gPSBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goL2ZpcmVmb3hcXC8oXFxkKykvKSkgJiYgcGFyc2VJbnQobVsxXSwgMTApID49IDMxKSB8fFxuXHRcdC8vIERvdWJsZSBjaGVjayB3ZWJraXQgaW4gdXNlckFnZW50IGp1c3QgaW4gY2FzZSB3ZSBhcmUgaW4gYSB3b3JrZXJcblx0XHQodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCAmJiBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goL2FwcGxld2Via2l0XFwvKFxcZCspLykpO1xufVxuXG4vKipcbiAqIENvbG9yaXplIGxvZyBhcmd1bWVudHMgaWYgZW5hYmxlZC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGZvcm1hdEFyZ3MoYXJncykge1xuXHRhcmdzWzBdID0gKHRoaXMudXNlQ29sb3JzID8gJyVjJyA6ICcnKSArXG5cdFx0dGhpcy5uYW1lc3BhY2UgK1xuXHRcdCh0aGlzLnVzZUNvbG9ycyA/ICcgJWMnIDogJyAnKSArXG5cdFx0YXJnc1swXSArXG5cdFx0KHRoaXMudXNlQ29sb3JzID8gJyVjICcgOiAnICcpICtcblx0XHQnKycgKyBtb2R1bGUuZXhwb3J0cy5odW1hbml6ZSh0aGlzLmRpZmYpO1xuXG5cdGlmICghdGhpcy51c2VDb2xvcnMpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRjb25zdCBjID0gJ2NvbG9yOiAnICsgdGhpcy5jb2xvcjtcblx0YXJncy5zcGxpY2UoMSwgMCwgYywgJ2NvbG9yOiBpbmhlcml0Jyk7XG5cblx0Ly8gVGhlIGZpbmFsIFwiJWNcIiBpcyBzb21ld2hhdCB0cmlja3ksIGJlY2F1c2UgdGhlcmUgY291bGQgYmUgb3RoZXJcblx0Ly8gYXJndW1lbnRzIHBhc3NlZCBlaXRoZXIgYmVmb3JlIG9yIGFmdGVyIHRoZSAlYywgc28gd2UgbmVlZCB0b1xuXHQvLyBmaWd1cmUgb3V0IHRoZSBjb3JyZWN0IGluZGV4IHRvIGluc2VydCB0aGUgQ1NTIGludG9cblx0bGV0IGluZGV4ID0gMDtcblx0bGV0IGxhc3RDID0gMDtcblx0YXJnc1swXS5yZXBsYWNlKC8lW2EtekEtWiVdL2csIG1hdGNoID0+IHtcblx0XHRpZiAobWF0Y2ggPT09ICclJScpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aW5kZXgrKztcblx0XHRpZiAobWF0Y2ggPT09ICclYycpIHtcblx0XHRcdC8vIFdlIG9ubHkgYXJlIGludGVyZXN0ZWQgaW4gdGhlICpsYXN0KiAlY1xuXHRcdFx0Ly8gKHRoZSB1c2VyIG1heSBoYXZlIHByb3ZpZGVkIHRoZWlyIG93bilcblx0XHRcdGxhc3RDID0gaW5kZXg7XG5cdFx0fVxuXHR9KTtcblxuXHRhcmdzLnNwbGljZShsYXN0QywgMCwgYyk7XG59XG5cbi8qKlxuICogSW52b2tlcyBgY29uc29sZS5kZWJ1ZygpYCB3aGVuIGF2YWlsYWJsZS5cbiAqIE5vLW9wIHdoZW4gYGNvbnNvbGUuZGVidWdgIGlzIG5vdCBhIFwiZnVuY3Rpb25cIi5cbiAqIElmIGBjb25zb2xlLmRlYnVnYCBpcyBub3QgYXZhaWxhYmxlLCBmYWxscyBiYWNrXG4gKiB0byBgY29uc29sZS5sb2dgLlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cbmV4cG9ydHMubG9nID0gY29uc29sZS5kZWJ1ZyB8fCBjb25zb2xlLmxvZyB8fCAoKCkgPT4ge30pO1xuXG4vKipcbiAqIFNhdmUgYG5hbWVzcGFjZXNgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2VzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gc2F2ZShuYW1lc3BhY2VzKSB7XG5cdHRyeSB7XG5cdFx0aWYgKG5hbWVzcGFjZXMpIHtcblx0XHRcdGV4cG9ydHMuc3RvcmFnZS5zZXRJdGVtKCdkZWJ1ZycsIG5hbWVzcGFjZXMpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRleHBvcnRzLnN0b3JhZ2UucmVtb3ZlSXRlbSgnZGVidWcnKTtcblx0XHR9XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0Ly8gU3dhbGxvd1xuXHRcdC8vIFhYWCAoQFFpeC0pIHNob3VsZCB3ZSBiZSBsb2dnaW5nIHRoZXNlP1xuXHR9XG59XG5cbi8qKlxuICogTG9hZCBgbmFtZXNwYWNlc2AuXG4gKlxuICogQHJldHVybiB7U3RyaW5nfSByZXR1cm5zIHRoZSBwcmV2aW91c2x5IHBlcnNpc3RlZCBkZWJ1ZyBtb2Rlc1xuICogQGFwaSBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGxvYWQoKSB7XG5cdGxldCByO1xuXHR0cnkge1xuXHRcdHIgPSBleHBvcnRzLnN0b3JhZ2UuZ2V0SXRlbSgnZGVidWcnKTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHQvLyBTd2FsbG93XG5cdFx0Ly8gWFhYIChAUWl4LSkgc2hvdWxkIHdlIGJlIGxvZ2dpbmcgdGhlc2U/XG5cdH1cblxuXHQvLyBJZiBkZWJ1ZyBpc24ndCBzZXQgaW4gTFMsIGFuZCB3ZSdyZSBpbiBFbGVjdHJvbiwgdHJ5IHRvIGxvYWQgJERFQlVHXG5cdGlmICghciAmJiB0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgJ2VudicgaW4gcHJvY2Vzcykge1xuXHRcdHIgPSBwcm9jZXNzLmVudi5ERUJVRztcblx0fVxuXG5cdHJldHVybiByO1xufVxuXG4vKipcbiAqIExvY2Fsc3RvcmFnZSBhdHRlbXB0cyB0byByZXR1cm4gdGhlIGxvY2Fsc3RvcmFnZS5cbiAqXG4gKiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHNhZmFyaSB0aHJvd3NcbiAqIHdoZW4gYSB1c2VyIGRpc2FibGVzIGNvb2tpZXMvbG9jYWxzdG9yYWdlXG4gKiBhbmQgeW91IGF0dGVtcHQgdG8gYWNjZXNzIGl0LlxuICpcbiAqIEByZXR1cm4ge0xvY2FsU3RvcmFnZX1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGxvY2Fsc3RvcmFnZSgpIHtcblx0dHJ5IHtcblx0XHQvLyBUVk1MS2l0IChBcHBsZSBUViBKUyBSdW50aW1lKSBkb2VzIG5vdCBoYXZlIGEgd2luZG93IG9iamVjdCwganVzdCBsb2NhbFN0b3JhZ2UgaW4gdGhlIGdsb2JhbCBjb250ZXh0XG5cdFx0Ly8gVGhlIEJyb3dzZXIgYWxzbyBoYXMgbG9jYWxTdG9yYWdlIGluIHRoZSBnbG9iYWwgY29udGV4dC5cblx0XHRyZXR1cm4gbG9jYWxTdG9yYWdlO1xuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdC8vIFN3YWxsb3dcblx0XHQvLyBYWFggKEBRaXgtKSBzaG91bGQgd2UgYmUgbG9nZ2luZyB0aGVzZT9cblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY29tbW9uJykoZXhwb3J0cyk7XG5cbmNvbnN0IHtmb3JtYXR0ZXJzfSA9IG1vZHVsZS5leHBvcnRzO1xuXG4vKipcbiAqIE1hcCAlaiB0byBgSlNPTi5zdHJpbmdpZnkoKWAsIHNpbmNlIG5vIFdlYiBJbnNwZWN0b3JzIGRvIHRoYXQgYnkgZGVmYXVsdC5cbiAqL1xuXG5mb3JtYXR0ZXJzLmogPSBmdW5jdGlvbiAodikge1xuXHR0cnkge1xuXHRcdHJldHVybiBKU09OLnN0cmluZ2lmeSh2KTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRyZXR1cm4gJ1tVbmV4cGVjdGVkSlNPTlBhcnNlRXJyb3JdOiAnICsgZXJyb3IubWVzc2FnZTtcblx0fVxufTtcbiIsCiAgICAiLyoqXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzLlxuICovXG5cbmNvbnN0IHR0eSA9IHJlcXVpcmUoJ3R0eScpO1xuY29uc3QgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcblxuLyoqXG4gKiBUaGlzIGlzIHRoZSBOb2RlLmpzIGltcGxlbWVudGF0aW9uIG9mIGBkZWJ1ZygpYC5cbiAqL1xuXG5leHBvcnRzLmluaXQgPSBpbml0O1xuZXhwb3J0cy5sb2cgPSBsb2c7XG5leHBvcnRzLmZvcm1hdEFyZ3MgPSBmb3JtYXRBcmdzO1xuZXhwb3J0cy5zYXZlID0gc2F2ZTtcbmV4cG9ydHMubG9hZCA9IGxvYWQ7XG5leHBvcnRzLnVzZUNvbG9ycyA9IHVzZUNvbG9ycztcbmV4cG9ydHMuZGVzdHJveSA9IHV0aWwuZGVwcmVjYXRlKFxuXHQoKSA9PiB7fSxcblx0J0luc3RhbmNlIG1ldGhvZCBgZGVidWcuZGVzdHJveSgpYCBpcyBkZXByZWNhdGVkIGFuZCBubyBsb25nZXIgZG9lcyBhbnl0aGluZy4gSXQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24gb2YgYGRlYnVnYC4nXG4pO1xuXG4vKipcbiAqIENvbG9ycy5cbiAqL1xuXG5leHBvcnRzLmNvbG9ycyA9IFs2LCAyLCAzLCA0LCA1LCAxXTtcblxudHJ5IHtcblx0Ly8gT3B0aW9uYWwgZGVwZW5kZW5jeSAoYXMgaW4sIGRvZXNuJ3QgbmVlZCB0byBiZSBpbnN0YWxsZWQsIE5PVCBsaWtlIG9wdGlvbmFsRGVwZW5kZW5jaWVzIGluIHBhY2thZ2UuanNvbilcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llc1xuXHRjb25zdCBzdXBwb3J0c0NvbG9yID0gcmVxdWlyZSgnc3VwcG9ydHMtY29sb3InKTtcblxuXHRpZiAoc3VwcG9ydHNDb2xvciAmJiAoc3VwcG9ydHNDb2xvci5zdGRlcnIgfHwgc3VwcG9ydHNDb2xvcikubGV2ZWwgPj0gMikge1xuXHRcdGV4cG9ydHMuY29sb3JzID0gW1xuXHRcdFx0MjAsXG5cdFx0XHQyMSxcblx0XHRcdDI2LFxuXHRcdFx0MjcsXG5cdFx0XHQzMixcblx0XHRcdDMzLFxuXHRcdFx0MzgsXG5cdFx0XHQzOSxcblx0XHRcdDQwLFxuXHRcdFx0NDEsXG5cdFx0XHQ0Mixcblx0XHRcdDQzLFxuXHRcdFx0NDQsXG5cdFx0XHQ0NSxcblx0XHRcdDU2LFxuXHRcdFx0NTcsXG5cdFx0XHQ2Mixcblx0XHRcdDYzLFxuXHRcdFx0NjgsXG5cdFx0XHQ2OSxcblx0XHRcdDc0LFxuXHRcdFx0NzUsXG5cdFx0XHQ3Nixcblx0XHRcdDc3LFxuXHRcdFx0NzgsXG5cdFx0XHQ3OSxcblx0XHRcdDgwLFxuXHRcdFx0ODEsXG5cdFx0XHQ5Mixcblx0XHRcdDkzLFxuXHRcdFx0OTgsXG5cdFx0XHQ5OSxcblx0XHRcdDExMixcblx0XHRcdDExMyxcblx0XHRcdDEyOCxcblx0XHRcdDEyOSxcblx0XHRcdDEzNCxcblx0XHRcdDEzNSxcblx0XHRcdDE0OCxcblx0XHRcdDE0OSxcblx0XHRcdDE2MCxcblx0XHRcdDE2MSxcblx0XHRcdDE2Mixcblx0XHRcdDE2Myxcblx0XHRcdDE2NCxcblx0XHRcdDE2NSxcblx0XHRcdDE2Nixcblx0XHRcdDE2Nyxcblx0XHRcdDE2OCxcblx0XHRcdDE2OSxcblx0XHRcdDE3MCxcblx0XHRcdDE3MSxcblx0XHRcdDE3Mixcblx0XHRcdDE3Myxcblx0XHRcdDE3OCxcblx0XHRcdDE3OSxcblx0XHRcdDE4NCxcblx0XHRcdDE4NSxcblx0XHRcdDE5Nixcblx0XHRcdDE5Nyxcblx0XHRcdDE5OCxcblx0XHRcdDE5OSxcblx0XHRcdDIwMCxcblx0XHRcdDIwMSxcblx0XHRcdDIwMixcblx0XHRcdDIwMyxcblx0XHRcdDIwNCxcblx0XHRcdDIwNSxcblx0XHRcdDIwNixcblx0XHRcdDIwNyxcblx0XHRcdDIwOCxcblx0XHRcdDIwOSxcblx0XHRcdDIxNCxcblx0XHRcdDIxNSxcblx0XHRcdDIyMCxcblx0XHRcdDIyMVxuXHRcdF07XG5cdH1cbn0gY2F0Y2ggKGVycm9yKSB7XG5cdC8vIFN3YWxsb3cgLSB3ZSBvbmx5IGNhcmUgaWYgYHN1cHBvcnRzLWNvbG9yYCBpcyBhdmFpbGFibGU7IGl0IGRvZXNuJ3QgaGF2ZSB0byBiZS5cbn1cblxuLyoqXG4gKiBCdWlsZCB1cCB0aGUgZGVmYXVsdCBgaW5zcGVjdE9wdHNgIG9iamVjdCBmcm9tIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG4gKlxuICogICAkIERFQlVHX0NPTE9SUz1ubyBERUJVR19ERVBUSD0xMCBERUJVR19TSE9XX0hJRERFTj1lbmFibGVkIG5vZGUgc2NyaXB0LmpzXG4gKi9cblxuZXhwb3J0cy5pbnNwZWN0T3B0cyA9IE9iamVjdC5rZXlzKHByb2Nlc3MuZW52KS5maWx0ZXIoa2V5ID0+IHtcblx0cmV0dXJuIC9eZGVidWdfL2kudGVzdChrZXkpO1xufSkucmVkdWNlKChvYmosIGtleSkgPT4ge1xuXHQvLyBDYW1lbC1jYXNlXG5cdGNvbnN0IHByb3AgPSBrZXlcblx0XHQuc3Vic3RyaW5nKDYpXG5cdFx0LnRvTG93ZXJDYXNlKClcblx0XHQucmVwbGFjZSgvXyhbYS16XSkvZywgKF8sIGspID0+IHtcblx0XHRcdHJldHVybiBrLnRvVXBwZXJDYXNlKCk7XG5cdFx0fSk7XG5cblx0Ly8gQ29lcmNlIHN0cmluZyB2YWx1ZSBpbnRvIEpTIHZhbHVlXG5cdGxldCB2YWwgPSBwcm9jZXNzLmVudltrZXldO1xuXHRpZiAoL14oeWVzfG9ufHRydWV8ZW5hYmxlZCkkL2kudGVzdCh2YWwpKSB7XG5cdFx0dmFsID0gdHJ1ZTtcblx0fSBlbHNlIGlmICgvXihub3xvZmZ8ZmFsc2V8ZGlzYWJsZWQpJC9pLnRlc3QodmFsKSkge1xuXHRcdHZhbCA9IGZhbHNlO1xuXHR9IGVsc2UgaWYgKHZhbCA9PT0gJ251bGwnKSB7XG5cdFx0dmFsID0gbnVsbDtcblx0fSBlbHNlIHtcblx0XHR2YWwgPSBOdW1iZXIodmFsKTtcblx0fVxuXG5cdG9ialtwcm9wXSA9IHZhbDtcblx0cmV0dXJuIG9iajtcbn0sIHt9KTtcblxuLyoqXG4gKiBJcyBzdGRvdXQgYSBUVFk/IENvbG9yZWQgb3V0cHV0IGlzIGVuYWJsZWQgd2hlbiBgdHJ1ZWAuXG4gKi9cblxuZnVuY3Rpb24gdXNlQ29sb3JzKCkge1xuXHRyZXR1cm4gJ2NvbG9ycycgaW4gZXhwb3J0cy5pbnNwZWN0T3B0cyA/XG5cdFx0Qm9vbGVhbihleHBvcnRzLmluc3BlY3RPcHRzLmNvbG9ycykgOlxuXHRcdHR0eS5pc2F0dHkocHJvY2Vzcy5zdGRlcnIuZmQpO1xufVxuXG4vKipcbiAqIEFkZHMgQU5TSSBjb2xvciBlc2NhcGUgY29kZXMgaWYgZW5hYmxlZC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGZvcm1hdEFyZ3MoYXJncykge1xuXHRjb25zdCB7bmFtZXNwYWNlOiBuYW1lLCB1c2VDb2xvcnN9ID0gdGhpcztcblxuXHRpZiAodXNlQ29sb3JzKSB7XG5cdFx0Y29uc3QgYyA9IHRoaXMuY29sb3I7XG5cdFx0Y29uc3QgY29sb3JDb2RlID0gJ1xcdTAwMUJbMycgKyAoYyA8IDggPyBjIDogJzg7NTsnICsgYyk7XG5cdFx0Y29uc3QgcHJlZml4ID0gYCAgJHtjb2xvckNvZGV9OzFtJHtuYW1lfSBcXHUwMDFCWzBtYDtcblxuXHRcdGFyZ3NbMF0gPSBwcmVmaXggKyBhcmdzWzBdLnNwbGl0KCdcXG4nKS5qb2luKCdcXG4nICsgcHJlZml4KTtcblx0XHRhcmdzLnB1c2goY29sb3JDb2RlICsgJ20rJyArIG1vZHVsZS5leHBvcnRzLmh1bWFuaXplKHRoaXMuZGlmZikgKyAnXFx1MDAxQlswbScpO1xuXHR9IGVsc2Uge1xuXHRcdGFyZ3NbMF0gPSBnZXREYXRlKCkgKyBuYW1lICsgJyAnICsgYXJnc1swXTtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXREYXRlKCkge1xuXHRpZiAoZXhwb3J0cy5pbnNwZWN0T3B0cy5oaWRlRGF0ZSkge1xuXHRcdHJldHVybiAnJztcblx0fVxuXHRyZXR1cm4gbmV3IERhdGUoKS50b0lTT1N0cmluZygpICsgJyAnO1xufVxuXG4vKipcbiAqIEludm9rZXMgYHV0aWwuZm9ybWF0V2l0aE9wdGlvbnMoKWAgd2l0aCB0aGUgc3BlY2lmaWVkIGFyZ3VtZW50cyBhbmQgd3JpdGVzIHRvIHN0ZGVyci5cbiAqL1xuXG5mdW5jdGlvbiBsb2coLi4uYXJncykge1xuXHRyZXR1cm4gcHJvY2Vzcy5zdGRlcnIud3JpdGUodXRpbC5mb3JtYXRXaXRoT3B0aW9ucyhleHBvcnRzLmluc3BlY3RPcHRzLCAuLi5hcmdzKSArICdcXG4nKTtcbn1cblxuLyoqXG4gKiBTYXZlIGBuYW1lc3BhY2VzYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlc1xuICogQGFwaSBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNhdmUobmFtZXNwYWNlcykge1xuXHRpZiAobmFtZXNwYWNlcykge1xuXHRcdHByb2Nlc3MuZW52LkRFQlVHID0gbmFtZXNwYWNlcztcblx0fSBlbHNlIHtcblx0XHQvLyBJZiB5b3Ugc2V0IGEgcHJvY2Vzcy5lbnYgZmllbGQgdG8gbnVsbCBvciB1bmRlZmluZWQsIGl0IGdldHMgY2FzdCB0byB0aGVcblx0XHQvLyBzdHJpbmcgJ251bGwnIG9yICd1bmRlZmluZWQnLiBKdXN0IGRlbGV0ZSBpbnN0ZWFkLlxuXHRcdGRlbGV0ZSBwcm9jZXNzLmVudi5ERUJVRztcblx0fVxufVxuXG4vKipcbiAqIExvYWQgYG5hbWVzcGFjZXNgLlxuICpcbiAqIEByZXR1cm4ge1N0cmluZ30gcmV0dXJucyB0aGUgcHJldmlvdXNseSBwZXJzaXN0ZWQgZGVidWcgbW9kZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGxvYWQoKSB7XG5cdHJldHVybiBwcm9jZXNzLmVudi5ERUJVRztcbn1cblxuLyoqXG4gKiBJbml0IGxvZ2ljIGZvciBgZGVidWdgIGluc3RhbmNlcy5cbiAqXG4gKiBDcmVhdGUgYSBuZXcgYGluc3BlY3RPcHRzYCBvYmplY3QgaW4gY2FzZSBgdXNlQ29sb3JzYCBpcyBzZXRcbiAqIGRpZmZlcmVudGx5IGZvciBhIHBhcnRpY3VsYXIgYGRlYnVnYCBpbnN0YW5jZS5cbiAqL1xuXG5mdW5jdGlvbiBpbml0KGRlYnVnKSB7XG5cdGRlYnVnLmluc3BlY3RPcHRzID0ge307XG5cblx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGV4cG9ydHMuaW5zcGVjdE9wdHMpO1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcblx0XHRkZWJ1Zy5pbnNwZWN0T3B0c1trZXlzW2ldXSA9IGV4cG9ydHMuaW5zcGVjdE9wdHNba2V5c1tpXV07XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2NvbW1vbicpKGV4cG9ydHMpO1xuXG5jb25zdCB7Zm9ybWF0dGVyc30gPSBtb2R1bGUuZXhwb3J0cztcblxuLyoqXG4gKiBNYXAgJW8gdG8gYHV0aWwuaW5zcGVjdCgpYCwgYWxsIG9uIGEgc2luZ2xlIGxpbmUuXG4gKi9cblxuZm9ybWF0dGVycy5vID0gZnVuY3Rpb24gKHYpIHtcblx0dGhpcy5pbnNwZWN0T3B0cy5jb2xvcnMgPSB0aGlzLnVzZUNvbG9ycztcblx0cmV0dXJuIHV0aWwuaW5zcGVjdCh2LCB0aGlzLmluc3BlY3RPcHRzKVxuXHRcdC5zcGxpdCgnXFxuJylcblx0XHQubWFwKHN0ciA9PiBzdHIudHJpbSgpKVxuXHRcdC5qb2luKCcgJyk7XG59O1xuXG4vKipcbiAqIE1hcCAlTyB0byBgdXRpbC5pbnNwZWN0KClgLCBhbGxvd2luZyBtdWx0aXBsZSBsaW5lcyBpZiBuZWVkZWQuXG4gKi9cblxuZm9ybWF0dGVycy5PID0gZnVuY3Rpb24gKHYpIHtcblx0dGhpcy5pbnNwZWN0T3B0cy5jb2xvcnMgPSB0aGlzLnVzZUNvbG9ycztcblx0cmV0dXJuIHV0aWwuaW5zcGVjdCh2LCB0aGlzLmluc3BlY3RPcHRzKTtcbn07XG4iLAogICAgIi8qKlxuICogRGV0ZWN0IEVsZWN0cm9uIHJlbmRlcmVyIC8gbndqcyBwcm9jZXNzLCB3aGljaCBpcyBub2RlLCBidXQgd2Ugc2hvdWxkXG4gKiB0cmVhdCBhcyBhIGJyb3dzZXIuXG4gKi9cblxuaWYgKHR5cGVvZiBwcm9jZXNzID09PSAndW5kZWZpbmVkJyB8fCBwcm9jZXNzLnR5cGUgPT09ICdyZW5kZXJlcicgfHwgcHJvY2Vzcy5icm93c2VyID09PSB0cnVlIHx8IHByb2Nlc3MuX19ud2pzKSB7XG5cdG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9icm93c2VyLmpzJyk7XG59IGVsc2Uge1xuXHRtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbm9kZS5qcycpO1xufVxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yZXEgPSBleHBvcnRzLmpzb24gPSBleHBvcnRzLnRvQnVmZmVyID0gdm9pZCAwO1xuY29uc3QgaHR0cCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiaHR0cFwiKSk7XG5jb25zdCBodHRwcyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiaHR0cHNcIikpO1xuYXN5bmMgZnVuY3Rpb24gdG9CdWZmZXIoc3RyZWFtKSB7XG4gICAgbGV0IGxlbmd0aCA9IDA7XG4gICAgY29uc3QgY2h1bmtzID0gW107XG4gICAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBzdHJlYW0pIHtcbiAgICAgICAgbGVuZ3RoICs9IGNodW5rLmxlbmd0aDtcbiAgICAgICAgY2h1bmtzLnB1c2goY2h1bmspO1xuICAgIH1cbiAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChjaHVua3MsIGxlbmd0aCk7XG59XG5leHBvcnRzLnRvQnVmZmVyID0gdG9CdWZmZXI7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuYXN5bmMgZnVuY3Rpb24ganNvbihzdHJlYW0pIHtcbiAgICBjb25zdCBidWYgPSBhd2FpdCB0b0J1ZmZlcihzdHJlYW0pO1xuICAgIGNvbnN0IHN0ciA9IGJ1Zi50b1N0cmluZygndXRmOCcpO1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKHN0cik7XG4gICAgfVxuICAgIGNhdGNoIChfZXJyKSB7XG4gICAgICAgIGNvbnN0IGVyciA9IF9lcnI7XG4gICAgICAgIGVyci5tZXNzYWdlICs9IGAgKGlucHV0OiAke3N0cn0pYDtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbn1cbmV4cG9ydHMuanNvbiA9IGpzb247XG5mdW5jdGlvbiByZXEodXJsLCBvcHRzID0ge30pIHtcbiAgICBjb25zdCBocmVmID0gdHlwZW9mIHVybCA9PT0gJ3N0cmluZycgPyB1cmwgOiB1cmwuaHJlZjtcbiAgICBjb25zdCByZXEgPSAoaHJlZi5zdGFydHNXaXRoKCdodHRwczonKSA/IGh0dHBzIDogaHR0cCkucmVxdWVzdCh1cmwsIG9wdHMpO1xuICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHJlcVxuICAgICAgICAgICAgLm9uY2UoJ3Jlc3BvbnNlJywgcmVzb2x2ZSlcbiAgICAgICAgICAgIC5vbmNlKCdlcnJvcicsIHJlamVjdClcbiAgICAgICAgICAgIC5lbmQoKTtcbiAgICB9KTtcbiAgICByZXEudGhlbiA9IHByb21pc2UudGhlbi5iaW5kKHByb21pc2UpO1xuICAgIHJldHVybiByZXE7XG59XG5leHBvcnRzLnJlcSA9IHJlcTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWhlbHBlcnMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9fZXhwb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19leHBvcnRTdGFyKSB8fCBmdW5jdGlvbihtLCBleHBvcnRzKSB7XG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChleHBvcnRzLCBwKSkgX19jcmVhdGVCaW5kaW5nKGV4cG9ydHMsIG0sIHApO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQWdlbnQgPSB2b2lkIDA7XG5jb25zdCBuZXQgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIm5ldFwiKSk7XG5jb25zdCBodHRwID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJodHRwXCIpKTtcbmNvbnN0IGh0dHBzXzEgPSByZXF1aXJlKFwiaHR0cHNcIik7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vaGVscGVyc1wiKSwgZXhwb3J0cyk7XG5jb25zdCBJTlRFUk5BTCA9IFN5bWJvbCgnQWdlbnRCYXNlSW50ZXJuYWxTdGF0ZScpO1xuY2xhc3MgQWdlbnQgZXh0ZW5kcyBodHRwLkFnZW50IHtcbiAgICBjb25zdHJ1Y3RvcihvcHRzKSB7XG4gICAgICAgIHN1cGVyKG9wdHMpO1xuICAgICAgICB0aGlzW0lOVEVSTkFMXSA9IHt9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmUgd2hldGhlciB0aGlzIGlzIGFuIGBodHRwYCBvciBgaHR0cHNgIHJlcXVlc3QuXG4gICAgICovXG4gICAgaXNTZWN1cmVFbmRwb2ludChvcHRpb25zKSB7XG4gICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICAvLyBGaXJzdCBjaGVjayB0aGUgYHNlY3VyZUVuZHBvaW50YCBwcm9wZXJ0eSBleHBsaWNpdGx5LCBzaW5jZSB0aGlzXG4gICAgICAgICAgICAvLyBtZWFucyB0aGF0IGEgcGFyZW50IGBBZ2VudGAgaXMgXCJwYXNzaW5nIHRocm91Z2hcIiB0byB0aGlzIGluc3RhbmNlLlxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5zZWN1cmVFbmRwb2ludCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMuc2VjdXJlRW5kcG9pbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBJZiBubyBleHBsaWNpdCBgc2VjdXJlYCBlbmRwb2ludCwgY2hlY2sgaWYgYHByb3RvY29sYCBwcm9wZXJ0eSBpc1xuICAgICAgICAgICAgLy8gc2V0LiBUaGlzIHdpbGwgdXN1YWxseSBiZSB0aGUgY2FzZSBzaW5jZSB1c2luZyBhIGZ1bGwgc3RyaW5nIFVSTFxuICAgICAgICAgICAgLy8gb3IgYFVSTGAgaW5zdGFuY2Ugc2hvdWxkIGJlIHRoZSBtb3N0IGNvbW1vbiB1c2FnZS5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5wcm90b2NvbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5wcm90b2NvbCA9PT0gJ2h0dHBzOic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gRmluYWxseSwgaWYgbm8gYHByb3RvY29sYCBwcm9wZXJ0eSB3YXMgc2V0LCB0aGVuIGZhbGwgYmFjayB0b1xuICAgICAgICAvLyBjaGVja2luZyB0aGUgc3RhY2sgdHJhY2Ugb2YgdGhlIGN1cnJlbnQgY2FsbCBzdGFjaywgYW5kIHRyeSB0b1xuICAgICAgICAvLyBkZXRlY3QgdGhlIFwiaHR0cHNcIiBtb2R1bGUuXG4gICAgICAgIGNvbnN0IHsgc3RhY2sgfSA9IG5ldyBFcnJvcigpO1xuICAgICAgICBpZiAodHlwZW9mIHN0YWNrICE9PSAnc3RyaW5nJylcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHN0YWNrXG4gICAgICAgICAgICAuc3BsaXQoJ1xcbicpXG4gICAgICAgICAgICAuc29tZSgobCkgPT4gbC5pbmRleE9mKCcoaHR0cHMuanM6JykgIT09IC0xIHx8XG4gICAgICAgICAgICBsLmluZGV4T2YoJ25vZGU6aHR0cHM6JykgIT09IC0xKTtcbiAgICB9XG4gICAgLy8gSW4gb3JkZXIgdG8gc3VwcG9ydCBhc3luYyBzaWduYXR1cmVzIGluIGBjb25uZWN0KClgIGFuZCBOb2RlJ3MgbmF0aXZlXG4gICAgLy8gY29ubmVjdGlvbiBwb29saW5nIGluIGBodHRwLkFnZW50YCwgdGhlIGFycmF5IG9mIHNvY2tldHMgZm9yIGVhY2ggb3JpZ2luXG4gICAgLy8gaGFzIHRvIGJlIHVwZGF0ZWQgc3luY2hyb25vdXNseS4gVGhpcyBpcyBzbyB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheSBpc1xuICAgIC8vIGFjY3VyYXRlIHdoZW4gYGFkZFJlcXVlc3QoKWAgaXMgbmV4dCBjYWxsZWQuIFdlIGFjaGlldmUgdGhpcyBieSBjcmVhdGluZyBhXG4gICAgLy8gZmFrZSBzb2NrZXQgYW5kIGFkZGluZyBpdCB0byBgc29ja2V0c1tvcmlnaW5dYCBhbmQgaW5jcmVtZW50aW5nXG4gICAgLy8gYHRvdGFsU29ja2V0Q291bnRgLlxuICAgIGluY3JlbWVudFNvY2tldHMobmFtZSkge1xuICAgICAgICAvLyBJZiBgbWF4U29ja2V0c2AgYW5kIGBtYXhUb3RhbFNvY2tldHNgIGFyZSBib3RoIEluZmluaXR5IHRoZW4gdGhlcmUgaXMgbm9cbiAgICAgICAgLy8gbmVlZCB0byBjcmVhdGUgYSBmYWtlIHNvY2tldCBiZWNhdXNlIE5vZGUuanMgbmF0aXZlIGNvbm5lY3Rpb24gcG9vbGluZ1xuICAgICAgICAvLyB3aWxsIG5ldmVyIGJlIGludm9rZWQuXG4gICAgICAgIGlmICh0aGlzLm1heFNvY2tldHMgPT09IEluZmluaXR5ICYmIHRoaXMubWF4VG90YWxTb2NrZXRzID09PSBJbmZpbml0eSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQWxsIGluc3RhbmNlcyBvZiBgc29ja2V0c2AgYXJlIGV4cGVjdGVkIFR5cGVTY3JpcHQgZXJyb3JzLiBUaGVcbiAgICAgICAgLy8gYWx0ZXJuYXRpdmUgaXMgdG8gYWRkIGl0IGFzIGEgcHJpdmF0ZSBwcm9wZXJ0eSBvZiB0aGlzIGNsYXNzIGJ1dCB0aGF0XG4gICAgICAgIC8vIHdpbGwgYnJlYWsgVHlwZVNjcmlwdCBzdWJjbGFzc2luZy5cbiAgICAgICAgaWYgKCF0aGlzLnNvY2tldHNbbmFtZV0pIHtcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgYHNvY2tldHNgIGlzIHJlYWRvbmx5IGluIGBAdHlwZXMvbm9kZWBcbiAgICAgICAgICAgIHRoaXMuc29ja2V0c1tuYW1lXSA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZha2VTb2NrZXQgPSBuZXcgbmV0LlNvY2tldCh7IHdyaXRhYmxlOiBmYWxzZSB9KTtcbiAgICAgICAgdGhpcy5zb2NrZXRzW25hbWVdLnB1c2goZmFrZVNvY2tldCk7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgYHRvdGFsU29ja2V0Q291bnRgIGlzbid0IGRlZmluZWQgaW4gYEB0eXBlcy9ub2RlYFxuICAgICAgICB0aGlzLnRvdGFsU29ja2V0Q291bnQrKztcbiAgICAgICAgcmV0dXJuIGZha2VTb2NrZXQ7XG4gICAgfVxuICAgIGRlY3JlbWVudFNvY2tldHMobmFtZSwgc29ja2V0KSB7XG4gICAgICAgIGlmICghdGhpcy5zb2NrZXRzW25hbWVdIHx8IHNvY2tldCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNvY2tldHMgPSB0aGlzLnNvY2tldHNbbmFtZV07XG4gICAgICAgIGNvbnN0IGluZGV4ID0gc29ja2V0cy5pbmRleE9mKHNvY2tldCk7XG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIHNvY2tldHMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgIGB0b3RhbFNvY2tldENvdW50YCBpc24ndCBkZWZpbmVkIGluIGBAdHlwZXMvbm9kZWBcbiAgICAgICAgICAgIHRoaXMudG90YWxTb2NrZXRDb3VudC0tO1xuICAgICAgICAgICAgaWYgKHNvY2tldHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBgc29ja2V0c2AgaXMgcmVhZG9ubHkgaW4gYEB0eXBlcy9ub2RlYFxuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnNvY2tldHNbbmFtZV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gSW4gb3JkZXIgdG8gcHJvcGVybHkgdXBkYXRlIHRoZSBzb2NrZXQgcG9vbCwgd2UgbmVlZCB0byBjYWxsIGBnZXROYW1lKClgIG9uXG4gICAgLy8gdGhlIGNvcmUgYGh0dHBzLkFnZW50YCBpZiBpdCBpcyBhIHNlY3VyZUVuZHBvaW50LlxuICAgIGdldE5hbWUob3B0aW9ucykge1xuICAgICAgICBjb25zdCBzZWN1cmVFbmRwb2ludCA9IHR5cGVvZiBvcHRpb25zLnNlY3VyZUVuZHBvaW50ID09PSAnYm9vbGVhbidcbiAgICAgICAgICAgID8gb3B0aW9ucy5zZWN1cmVFbmRwb2ludFxuICAgICAgICAgICAgOiB0aGlzLmlzU2VjdXJlRW5kcG9pbnQob3B0aW9ucyk7XG4gICAgICAgIGlmIChzZWN1cmVFbmRwb2ludCkge1xuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBgZ2V0TmFtZSgpYCBpc24ndCBkZWZpbmVkIGluIGBAdHlwZXMvbm9kZWBcbiAgICAgICAgICAgIHJldHVybiBodHRwc18xLkFnZW50LnByb3RvdHlwZS5nZXROYW1lLmNhbGwodGhpcywgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBgZ2V0TmFtZSgpYCBpc24ndCBkZWZpbmVkIGluIGBAdHlwZXMvbm9kZWBcbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldE5hbWUob3B0aW9ucyk7XG4gICAgfVxuICAgIGNyZWF0ZVNvY2tldChyZXEsIG9wdGlvbnMsIGNiKSB7XG4gICAgICAgIGNvbnN0IGNvbm5lY3RPcHRzID0ge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIHNlY3VyZUVuZHBvaW50OiB0aGlzLmlzU2VjdXJlRW5kcG9pbnQob3B0aW9ucyksXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLmdldE5hbWUoY29ubmVjdE9wdHMpO1xuICAgICAgICBjb25zdCBmYWtlU29ja2V0ID0gdGhpcy5pbmNyZW1lbnRTb2NrZXRzKG5hbWUpO1xuICAgICAgICBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5jb25uZWN0KHJlcSwgY29ubmVjdE9wdHMpKVxuICAgICAgICAgICAgLnRoZW4oKHNvY2tldCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5kZWNyZW1lbnRTb2NrZXRzKG5hbWUsIGZha2VTb2NrZXQpO1xuICAgICAgICAgICAgaWYgKHNvY2tldCBpbnN0YW5jZW9mIGh0dHAuQWdlbnQpIHtcbiAgICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGBhZGRSZXF1ZXN0KClgIGlzbid0IGRlZmluZWQgaW4gYEB0eXBlcy9ub2RlYFxuICAgICAgICAgICAgICAgIHJldHVybiBzb2NrZXQuYWRkUmVxdWVzdChyZXEsIGNvbm5lY3RPcHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXNbSU5URVJOQUxdLmN1cnJlbnRTb2NrZXQgPSBzb2NrZXQ7XG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGBjcmVhdGVTb2NrZXQoKWAgaXNuJ3QgZGVmaW5lZCBpbiBgQHR5cGVzL25vZGVgXG4gICAgICAgICAgICBzdXBlci5jcmVhdGVTb2NrZXQocmVxLCBvcHRpb25zLCBjYik7XG4gICAgICAgIH0sIChlcnIpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZGVjcmVtZW50U29ja2V0cyhuYW1lLCBmYWtlU29ja2V0KTtcbiAgICAgICAgICAgIGNiKGVycik7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjcmVhdGVDb25uZWN0aW9uKCkge1xuICAgICAgICBjb25zdCBzb2NrZXQgPSB0aGlzW0lOVEVSTkFMXS5jdXJyZW50U29ja2V0O1xuICAgICAgICB0aGlzW0lOVEVSTkFMXS5jdXJyZW50U29ja2V0ID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoIXNvY2tldCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBzb2NrZXQgd2FzIHJldHVybmVkIGluIHRoZSBgY29ubmVjdCgpYCBmdW5jdGlvbicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzb2NrZXQ7XG4gICAgfVxuICAgIGdldCBkZWZhdWx0UG9ydCgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzW0lOVEVSTkFMXS5kZWZhdWx0UG9ydCA/P1xuICAgICAgICAgICAgKHRoaXMucHJvdG9jb2wgPT09ICdodHRwczonID8gNDQzIDogODApKTtcbiAgICB9XG4gICAgc2V0IGRlZmF1bHRQb3J0KHYpIHtcbiAgICAgICAgaWYgKHRoaXNbSU5URVJOQUxdKSB7XG4gICAgICAgICAgICB0aGlzW0lOVEVSTkFMXS5kZWZhdWx0UG9ydCA9IHY7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IHByb3RvY29sKCkge1xuICAgICAgICByZXR1cm4gKHRoaXNbSU5URVJOQUxdLnByb3RvY29sID8/XG4gICAgICAgICAgICAodGhpcy5pc1NlY3VyZUVuZHBvaW50KCkgPyAnaHR0cHM6JyA6ICdodHRwOicpKTtcbiAgICB9XG4gICAgc2V0IHByb3RvY29sKHYpIHtcbiAgICAgICAgaWYgKHRoaXNbSU5URVJOQUxdKSB7XG4gICAgICAgICAgICB0aGlzW0lOVEVSTkFMXS5wcm90b2NvbCA9IHY7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLkFnZW50ID0gQWdlbnQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5wYXJzZVByb3h5UmVzcG9uc2UgPSB2b2lkIDA7XG5jb25zdCBkZWJ1Z18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJkZWJ1Z1wiKSk7XG5jb25zdCBkZWJ1ZyA9ICgwLCBkZWJ1Z18xLmRlZmF1bHQpKCdodHRwcy1wcm94eS1hZ2VudDpwYXJzZS1wcm94eS1yZXNwb25zZScpO1xuZnVuY3Rpb24gcGFyc2VQcm94eVJlc3BvbnNlKHNvY2tldCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIC8vIHdlIG5lZWQgdG8gYnVmZmVyIGFueSBIVFRQIHRyYWZmaWMgdGhhdCBoYXBwZW5zIHdpdGggdGhlIHByb3h5IGJlZm9yZSB3ZSBnZXRcbiAgICAgICAgLy8gdGhlIENPTk5FQ1QgcmVzcG9uc2UsIHNvIHRoYXQgaWYgdGhlIHJlc3BvbnNlIGlzIGFueXRoaW5nIG90aGVyIHRoYW4gYW4gXCIyMDBcIlxuICAgICAgICAvLyByZXNwb25zZSBjb2RlLCB0aGVuIHdlIGNhbiByZS1wbGF5IHRoZSBcImRhdGFcIiBldmVudHMgb24gdGhlIHNvY2tldCBvbmNlIHRoZVxuICAgICAgICAvLyBIVFRQIHBhcnNlciBpcyBob29rZWQgdXAuLi5cbiAgICAgICAgbGV0IGJ1ZmZlcnNMZW5ndGggPSAwO1xuICAgICAgICBjb25zdCBidWZmZXJzID0gW107XG4gICAgICAgIGZ1bmN0aW9uIHJlYWQoKSB7XG4gICAgICAgICAgICBjb25zdCBiID0gc29ja2V0LnJlYWQoKTtcbiAgICAgICAgICAgIGlmIChiKVxuICAgICAgICAgICAgICAgIG9uZGF0YShiKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBzb2NrZXQub25jZSgncmVhZGFibGUnLCByZWFkKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBjbGVhbnVwKCkge1xuICAgICAgICAgICAgc29ja2V0LnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBvbmVuZCk7XG4gICAgICAgICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgb25lcnJvcik7XG4gICAgICAgICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ3JlYWRhYmxlJywgcmVhZCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gb25lbmQoKSB7XG4gICAgICAgICAgICBjbGVhbnVwKCk7XG4gICAgICAgICAgICBkZWJ1Zygnb25lbmQnKTtcbiAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ1Byb3h5IGNvbm5lY3Rpb24gZW5kZWQgYmVmb3JlIHJlY2VpdmluZyBDT05ORUNUIHJlc3BvbnNlJykpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIG9uZXJyb3IoZXJyKSB7XG4gICAgICAgICAgICBjbGVhbnVwKCk7XG4gICAgICAgICAgICBkZWJ1Zygnb25lcnJvciAlbycsIGVycik7XG4gICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBvbmRhdGEoYikge1xuICAgICAgICAgICAgYnVmZmVycy5wdXNoKGIpO1xuICAgICAgICAgICAgYnVmZmVyc0xlbmd0aCArPSBiLmxlbmd0aDtcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZlcmVkID0gQnVmZmVyLmNvbmNhdChidWZmZXJzLCBidWZmZXJzTGVuZ3RoKTtcbiAgICAgICAgICAgIGNvbnN0IGVuZE9mSGVhZGVycyA9IGJ1ZmZlcmVkLmluZGV4T2YoJ1xcclxcblxcclxcbicpO1xuICAgICAgICAgICAgaWYgKGVuZE9mSGVhZGVycyA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAvLyBrZWVwIGJ1ZmZlcmluZ1xuICAgICAgICAgICAgICAgIGRlYnVnKCdoYXZlIG5vdCByZWNlaXZlZCBlbmQgb2YgSFRUUCBoZWFkZXJzIHlldC4uLicpO1xuICAgICAgICAgICAgICAgIHJlYWQoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBoZWFkZXJQYXJ0cyA9IGJ1ZmZlcmVkXG4gICAgICAgICAgICAgICAgLnNsaWNlKDAsIGVuZE9mSGVhZGVycylcbiAgICAgICAgICAgICAgICAudG9TdHJpbmcoJ2FzY2lpJylcbiAgICAgICAgICAgICAgICAuc3BsaXQoJ1xcclxcbicpO1xuICAgICAgICAgICAgY29uc3QgZmlyc3RMaW5lID0gaGVhZGVyUGFydHMuc2hpZnQoKTtcbiAgICAgICAgICAgIGlmICghZmlyc3RMaW5lKSB7XG4gICAgICAgICAgICAgICAgc29ja2V0LmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcignTm8gaGVhZGVyIHJlY2VpdmVkIGZyb20gcHJveHkgQ09OTkVDVCByZXNwb25zZScpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGZpcnN0TGluZVBhcnRzID0gZmlyc3RMaW5lLnNwbGl0KCcgJyk7XG4gICAgICAgICAgICBjb25zdCBzdGF0dXNDb2RlID0gK2ZpcnN0TGluZVBhcnRzWzFdO1xuICAgICAgICAgICAgY29uc3Qgc3RhdHVzVGV4dCA9IGZpcnN0TGluZVBhcnRzLnNsaWNlKDIpLmpvaW4oJyAnKTtcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7fTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaGVhZGVyIG9mIGhlYWRlclBhcnRzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFoZWFkZXIpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0Q29sb24gPSBoZWFkZXIuaW5kZXhPZignOicpO1xuICAgICAgICAgICAgICAgIGlmIChmaXJzdENvbG9uID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBzb2NrZXQuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcihgSW52YWxpZCBoZWFkZXIgZnJvbSBwcm94eSBDT05ORUNUIHJlc3BvbnNlOiBcIiR7aGVhZGVyfVwiYCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBoZWFkZXIuc2xpY2UoMCwgZmlyc3RDb2xvbikudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGhlYWRlci5zbGljZShmaXJzdENvbG9uICsgMSkudHJpbVN0YXJ0KCk7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudCA9IGhlYWRlcnNba2V5XTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnNba2V5XSA9IFtjdXJyZW50LCB2YWx1ZV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoY3VycmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudC5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnNba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlYnVnKCdnb3QgcHJveHkgc2VydmVyIHJlc3BvbnNlOiAlbyAlbycsIGZpcnN0TGluZSwgaGVhZGVycyk7XG4gICAgICAgICAgICBjbGVhbnVwKCk7XG4gICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICBjb25uZWN0OiB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1c0NvZGUsXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1c1RleHQsXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBidWZmZXJlZCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHNvY2tldC5vbignZXJyb3InLCBvbmVycm9yKTtcbiAgICAgICAgc29ja2V0Lm9uKCdlbmQnLCBvbmVuZCk7XG4gICAgICAgIHJlYWQoKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMucGFyc2VQcm94eVJlc3BvbnNlID0gcGFyc2VQcm94eVJlc3BvbnNlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGFyc2UtcHJveHktcmVzcG9uc2UuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5IdHRwc1Byb3h5QWdlbnQgPSB2b2lkIDA7XG5jb25zdCBuZXQgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIm5ldFwiKSk7XG5jb25zdCB0bHMgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcInRsc1wiKSk7XG5jb25zdCBhc3NlcnRfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiYXNzZXJ0XCIpKTtcbmNvbnN0IGRlYnVnXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImRlYnVnXCIpKTtcbmNvbnN0IGFnZW50X2Jhc2VfMSA9IHJlcXVpcmUoXCJhZ2VudC1iYXNlXCIpO1xuY29uc3QgdXJsXzEgPSByZXF1aXJlKFwidXJsXCIpO1xuY29uc3QgcGFyc2VfcHJveHlfcmVzcG9uc2VfMSA9IHJlcXVpcmUoXCIuL3BhcnNlLXByb3h5LXJlc3BvbnNlXCIpO1xuY29uc3QgZGVidWcgPSAoMCwgZGVidWdfMS5kZWZhdWx0KSgnaHR0cHMtcHJveHktYWdlbnQnKTtcbi8qKlxuICogVGhlIGBIdHRwc1Byb3h5QWdlbnRgIGltcGxlbWVudHMgYW4gSFRUUCBBZ2VudCBzdWJjbGFzcyB0aGF0IGNvbm5lY3RzIHRvXG4gKiB0aGUgc3BlY2lmaWVkIFwiSFRUUChzKSBwcm94eSBzZXJ2ZXJcIiBpbiBvcmRlciB0byBwcm94eSBIVFRQUyByZXF1ZXN0cy5cbiAqXG4gKiBPdXRnb2luZyBIVFRQIHJlcXVlc3RzIGFyZSBmaXJzdCB0dW5uZWxlZCB0aHJvdWdoIHRoZSBwcm94eSBzZXJ2ZXIgdXNpbmcgdGhlXG4gKiBgQ09OTkVDVGAgSFRUUCByZXF1ZXN0IG1ldGhvZCB0byBlc3RhYmxpc2ggYSBjb25uZWN0aW9uIHRvIHRoZSBwcm94eSBzZXJ2ZXIsXG4gKiBhbmQgdGhlbiB0aGUgcHJveHkgc2VydmVyIGNvbm5lY3RzIHRvIHRoZSBkZXN0aW5hdGlvbiB0YXJnZXQgYW5kIGlzc3VlcyB0aGVcbiAqIEhUVFAgcmVxdWVzdCBmcm9tIHRoZSBwcm94eSBzZXJ2ZXIuXG4gKlxuICogYGh0dHBzOmAgcmVxdWVzdHMgaGF2ZSB0aGVpciBzb2NrZXQgY29ubmVjdGlvbiB1cGdyYWRlZCB0byBUTFMgb25jZVxuICogdGhlIGNvbm5lY3Rpb24gdG8gdGhlIHByb3h5IHNlcnZlciBoYXMgYmVlbiBlc3RhYmxpc2hlZC5cbiAqL1xuY2xhc3MgSHR0cHNQcm94eUFnZW50IGV4dGVuZHMgYWdlbnRfYmFzZV8xLkFnZW50IHtcbiAgICBjb25zdHJ1Y3Rvcihwcm94eSwgb3B0cykge1xuICAgICAgICBzdXBlcihvcHRzKTtcbiAgICAgICAgdGhpcy5vcHRpb25zID0geyBwYXRoOiB1bmRlZmluZWQgfTtcbiAgICAgICAgdGhpcy5wcm94eSA9IHR5cGVvZiBwcm94eSA9PT0gJ3N0cmluZycgPyBuZXcgdXJsXzEuVVJMKHByb3h5KSA6IHByb3h5O1xuICAgICAgICB0aGlzLnByb3h5SGVhZGVycyA9IG9wdHM/LmhlYWRlcnMgPz8ge307XG4gICAgICAgIGRlYnVnKCdDcmVhdGluZyBuZXcgSHR0cHNQcm94eUFnZW50IGluc3RhbmNlOiAlbycsIHRoaXMucHJveHkuaHJlZik7XG4gICAgICAgIC8vIFRyaW0gb2ZmIHRoZSBicmFja2V0cyBmcm9tIElQdjYgYWRkcmVzc2VzXG4gICAgICAgIGNvbnN0IGhvc3QgPSAodGhpcy5wcm94eS5ob3N0bmFtZSB8fCB0aGlzLnByb3h5Lmhvc3QpLnJlcGxhY2UoL15cXFt8XFxdJC9nLCAnJyk7XG4gICAgICAgIGNvbnN0IHBvcnQgPSB0aGlzLnByb3h5LnBvcnRcbiAgICAgICAgICAgID8gcGFyc2VJbnQodGhpcy5wcm94eS5wb3J0LCAxMClcbiAgICAgICAgICAgIDogdGhpcy5wcm94eS5wcm90b2NvbCA9PT0gJ2h0dHBzOidcbiAgICAgICAgICAgICAgICA/IDQ0M1xuICAgICAgICAgICAgICAgIDogODA7XG4gICAgICAgIHRoaXMuY29ubmVjdE9wdHMgPSB7XG4gICAgICAgICAgICAvLyBBdHRlbXB0IHRvIG5lZ290aWF0ZSBodHRwLzEuMSBmb3IgcHJveHkgc2VydmVycyB0aGF0IHN1cHBvcnQgaHR0cC8yXG4gICAgICAgICAgICBBTFBOUHJvdG9jb2xzOiBbJ2h0dHAvMS4xJ10sXG4gICAgICAgICAgICAuLi4ob3B0cyA/IG9taXQob3B0cywgJ2hlYWRlcnMnKSA6IG51bGwpLFxuICAgICAgICAgICAgaG9zdCxcbiAgICAgICAgICAgIHBvcnQsXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENhbGxlZCB3aGVuIHRoZSBub2RlLWNvcmUgSFRUUCBjbGllbnQgbGlicmFyeSBpcyBjcmVhdGluZyBhXG4gICAgICogbmV3IEhUVFAgcmVxdWVzdC5cbiAgICAgKi9cbiAgICBhc3luYyBjb25uZWN0KHJlcSwgb3B0cykge1xuICAgICAgICBjb25zdCB7IHByb3h5IH0gPSB0aGlzO1xuICAgICAgICBpZiAoIW9wdHMuaG9zdCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gXCJob3N0XCIgcHJvdmlkZWQnKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBDcmVhdGUgYSBzb2NrZXQgY29ubmVjdGlvbiB0byB0aGUgcHJveHkgc2VydmVyLlxuICAgICAgICBsZXQgc29ja2V0O1xuICAgICAgICBpZiAocHJveHkucHJvdG9jb2wgPT09ICdodHRwczonKSB7XG4gICAgICAgICAgICBkZWJ1ZygnQ3JlYXRpbmcgYHRscy5Tb2NrZXRgOiAlbycsIHRoaXMuY29ubmVjdE9wdHMpO1xuICAgICAgICAgICAgY29uc3Qgc2VydmVybmFtZSA9IHRoaXMuY29ubmVjdE9wdHMuc2VydmVybmFtZSB8fCB0aGlzLmNvbm5lY3RPcHRzLmhvc3Q7XG4gICAgICAgICAgICBzb2NrZXQgPSB0bHMuY29ubmVjdCh7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5jb25uZWN0T3B0cyxcbiAgICAgICAgICAgICAgICBzZXJ2ZXJuYW1lLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkZWJ1ZygnQ3JlYXRpbmcgYG5ldC5Tb2NrZXRgOiAlbycsIHRoaXMuY29ubmVjdE9wdHMpO1xuICAgICAgICAgICAgc29ja2V0ID0gbmV0LmNvbm5lY3QodGhpcy5jb25uZWN0T3B0cyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaGVhZGVycyA9IHR5cGVvZiB0aGlzLnByb3h5SGVhZGVycyA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgPyB0aGlzLnByb3h5SGVhZGVycygpXG4gICAgICAgICAgICA6IHsgLi4udGhpcy5wcm94eUhlYWRlcnMgfTtcbiAgICAgICAgY29uc3QgaG9zdCA9IG5ldC5pc0lQdjYob3B0cy5ob3N0KSA/IGBbJHtvcHRzLmhvc3R9XWAgOiBvcHRzLmhvc3Q7XG4gICAgICAgIGxldCBwYXlsb2FkID0gYENPTk5FQ1QgJHtob3N0fToke29wdHMucG9ydH0gSFRUUC8xLjFcXHJcXG5gO1xuICAgICAgICAvLyBJbmplY3QgdGhlIGBQcm94eS1BdXRob3JpemF0aW9uYCBoZWFkZXIgaWYgbmVjZXNzYXJ5LlxuICAgICAgICBpZiAocHJveHkudXNlcm5hbWUgfHwgcHJveHkucGFzc3dvcmQpIHtcbiAgICAgICAgICAgIGNvbnN0IGF1dGggPSBgJHtkZWNvZGVVUklDb21wb25lbnQocHJveHkudXNlcm5hbWUpfToke2RlY29kZVVSSUNvbXBvbmVudChwcm94eS5wYXNzd29yZCl9YDtcbiAgICAgICAgICAgIGhlYWRlcnNbJ1Byb3h5LUF1dGhvcml6YXRpb24nXSA9IGBCYXNpYyAke0J1ZmZlci5mcm9tKGF1dGgpLnRvU3RyaW5nKCdiYXNlNjQnKX1gO1xuICAgICAgICB9XG4gICAgICAgIGhlYWRlcnMuSG9zdCA9IGAke2hvc3R9OiR7b3B0cy5wb3J0fWA7XG4gICAgICAgIGlmICghaGVhZGVyc1snUHJveHktQ29ubmVjdGlvbiddKSB7XG4gICAgICAgICAgICBoZWFkZXJzWydQcm94eS1Db25uZWN0aW9uJ10gPSB0aGlzLmtlZXBBbGl2ZVxuICAgICAgICAgICAgICAgID8gJ0tlZXAtQWxpdmUnXG4gICAgICAgICAgICAgICAgOiAnY2xvc2UnO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3Qua2V5cyhoZWFkZXJzKSkge1xuICAgICAgICAgICAgcGF5bG9hZCArPSBgJHtuYW1lfTogJHtoZWFkZXJzW25hbWVdfVxcclxcbmA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJveHlSZXNwb25zZVByb21pc2UgPSAoMCwgcGFyc2VfcHJveHlfcmVzcG9uc2VfMS5wYXJzZVByb3h5UmVzcG9uc2UpKHNvY2tldCk7XG4gICAgICAgIHNvY2tldC53cml0ZShgJHtwYXlsb2FkfVxcclxcbmApO1xuICAgICAgICBjb25zdCB7IGNvbm5lY3QsIGJ1ZmZlcmVkIH0gPSBhd2FpdCBwcm94eVJlc3BvbnNlUHJvbWlzZTtcbiAgICAgICAgcmVxLmVtaXQoJ3Byb3h5Q29ubmVjdCcsIGNvbm5lY3QpO1xuICAgICAgICB0aGlzLmVtaXQoJ3Byb3h5Q29ubmVjdCcsIGNvbm5lY3QsIHJlcSk7XG4gICAgICAgIGlmIChjb25uZWN0LnN0YXR1c0NvZGUgPT09IDIwMCkge1xuICAgICAgICAgICAgcmVxLm9uY2UoJ3NvY2tldCcsIHJlc3VtZSk7XG4gICAgICAgICAgICBpZiAob3B0cy5zZWN1cmVFbmRwb2ludCkge1xuICAgICAgICAgICAgICAgIC8vIFRoZSBwcm94eSBpcyBjb25uZWN0aW5nIHRvIGEgVExTIHNlcnZlciwgc28gdXBncmFkZVxuICAgICAgICAgICAgICAgIC8vIHRoaXMgc29ja2V0IGNvbm5lY3Rpb24gdG8gYSBUTFMgY29ubmVjdGlvbi5cbiAgICAgICAgICAgICAgICBkZWJ1ZygnVXBncmFkaW5nIHNvY2tldCBjb25uZWN0aW9uIHRvIFRMUycpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlcnZlcm5hbWUgPSBvcHRzLnNlcnZlcm5hbWUgfHwgb3B0cy5ob3N0O1xuICAgICAgICAgICAgICAgIHJldHVybiB0bHMuY29ubmVjdCh7XG4gICAgICAgICAgICAgICAgICAgIC4uLm9taXQob3B0cywgJ2hvc3QnLCAncGF0aCcsICdwb3J0JyksXG4gICAgICAgICAgICAgICAgICAgIHNvY2tldCxcbiAgICAgICAgICAgICAgICAgICAgc2VydmVybmFtZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzb2NrZXQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU29tZSBvdGhlciBzdGF0dXMgY29kZSB0aGF0J3Mgbm90IDIwMC4uLiBuZWVkIHRvIHJlLXBsYXkgdGhlIEhUVFBcbiAgICAgICAgLy8gaGVhZGVyIFwiZGF0YVwiIGV2ZW50cyBvbnRvIHRoZSBzb2NrZXQgb25jZSB0aGUgSFRUUCBtYWNoaW5lcnkgaXNcbiAgICAgICAgLy8gYXR0YWNoZWQgc28gdGhhdCB0aGUgbm9kZSBjb3JlIGBodHRwYCBjYW4gcGFyc2UgYW5kIGhhbmRsZSB0aGVcbiAgICAgICAgLy8gZXJyb3Igc3RhdHVzIGNvZGUuXG4gICAgICAgIC8vIENsb3NlIHRoZSBvcmlnaW5hbCBzb2NrZXQsIGFuZCBhIG5ldyBcImZha2VcIiBzb2NrZXQgaXMgcmV0dXJuZWRcbiAgICAgICAgLy8gaW5zdGVhZCwgc28gdGhhdCB0aGUgcHJveHkgZG9lc24ndCBnZXQgdGhlIEhUVFAgcmVxdWVzdFxuICAgICAgICAvLyB3cml0dGVuIHRvIGl0ICh3aGljaCBtYXkgY29udGFpbiBgQXV0aG9yaXphdGlvbmAgaGVhZGVycyBvciBvdGhlclxuICAgICAgICAvLyBzZW5zaXRpdmUgZGF0YSkuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFNlZTogaHR0cHM6Ly9oYWNrZXJvbmUuY29tL3JlcG9ydHMvNTQxNTAyXG4gICAgICAgIHNvY2tldC5kZXN0cm95KCk7XG4gICAgICAgIGNvbnN0IGZha2VTb2NrZXQgPSBuZXcgbmV0LlNvY2tldCh7IHdyaXRhYmxlOiBmYWxzZSB9KTtcbiAgICAgICAgZmFrZVNvY2tldC5yZWFkYWJsZSA9IHRydWU7XG4gICAgICAgIC8vIE5lZWQgdG8gd2FpdCBmb3IgdGhlIFwic29ja2V0XCIgZXZlbnQgdG8gcmUtcGxheSB0aGUgXCJkYXRhXCIgZXZlbnRzLlxuICAgICAgICByZXEub25jZSgnc29ja2V0JywgKHMpID0+IHtcbiAgICAgICAgICAgIGRlYnVnKCdSZXBsYXlpbmcgcHJveHkgYnVmZmVyIGZvciBmYWlsZWQgcmVxdWVzdCcpO1xuICAgICAgICAgICAgKDAsIGFzc2VydF8xLmRlZmF1bHQpKHMubGlzdGVuZXJDb3VudCgnZGF0YScpID4gMCk7XG4gICAgICAgICAgICAvLyBSZXBsYXkgdGhlIFwiYnVmZmVyZWRcIiBCdWZmZXIgb250byB0aGUgZmFrZSBgc29ja2V0YCwgc2luY2UgYXRcbiAgICAgICAgICAgIC8vIHRoaXMgcG9pbnQgdGhlIEhUVFAgbW9kdWxlIG1hY2hpbmVyeSBoYXMgYmVlbiBob29rZWQgdXAgZm9yXG4gICAgICAgICAgICAvLyB0aGUgdXNlci5cbiAgICAgICAgICAgIHMucHVzaChidWZmZXJlZCk7XG4gICAgICAgICAgICBzLnB1c2gobnVsbCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZmFrZVNvY2tldDtcbiAgICB9XG59XG5IdHRwc1Byb3h5QWdlbnQucHJvdG9jb2xzID0gWydodHRwJywgJ2h0dHBzJ107XG5leHBvcnRzLkh0dHBzUHJveHlBZ2VudCA9IEh0dHBzUHJveHlBZ2VudDtcbmZ1bmN0aW9uIHJlc3VtZShzb2NrZXQpIHtcbiAgICBzb2NrZXQucmVzdW1lKCk7XG59XG5mdW5jdGlvbiBvbWl0KG9iaiwgLi4ua2V5cykge1xuICAgIGNvbnN0IHJldCA9IHt9O1xuICAgIGxldCBrZXk7XG4gICAgZm9yIChrZXkgaW4gb2JqKSB7XG4gICAgICAgIGlmICgha2V5cy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgICAgICByZXRba2V5XSA9IG9ialtrZXldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkh0dHBQcm94eUFnZW50ID0gdm9pZCAwO1xuY29uc3QgbmV0ID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJuZXRcIikpO1xuY29uc3QgdGxzID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJ0bHNcIikpO1xuY29uc3QgZGVidWdfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiZGVidWdcIikpO1xuY29uc3QgZXZlbnRzXzEgPSByZXF1aXJlKFwiZXZlbnRzXCIpO1xuY29uc3QgYWdlbnRfYmFzZV8xID0gcmVxdWlyZShcImFnZW50LWJhc2VcIik7XG5jb25zdCB1cmxfMSA9IHJlcXVpcmUoXCJ1cmxcIik7XG5jb25zdCBkZWJ1ZyA9ICgwLCBkZWJ1Z18xLmRlZmF1bHQpKCdodHRwLXByb3h5LWFnZW50Jyk7XG4vKipcbiAqIFRoZSBgSHR0cFByb3h5QWdlbnRgIGltcGxlbWVudHMgYW4gSFRUUCBBZ2VudCBzdWJjbGFzcyB0aGF0IGNvbm5lY3RzXG4gKiB0byB0aGUgc3BlY2lmaWVkIFwiSFRUUCBwcm94eSBzZXJ2ZXJcIiBpbiBvcmRlciB0byBwcm94eSBIVFRQIHJlcXVlc3RzLlxuICovXG5jbGFzcyBIdHRwUHJveHlBZ2VudCBleHRlbmRzIGFnZW50X2Jhc2VfMS5BZ2VudCB7XG4gICAgY29uc3RydWN0b3IocHJveHksIG9wdHMpIHtcbiAgICAgICAgc3VwZXIob3B0cyk7XG4gICAgICAgIHRoaXMucHJveHkgPSB0eXBlb2YgcHJveHkgPT09ICdzdHJpbmcnID8gbmV3IHVybF8xLlVSTChwcm94eSkgOiBwcm94eTtcbiAgICAgICAgdGhpcy5wcm94eUhlYWRlcnMgPSBvcHRzPy5oZWFkZXJzID8/IHt9O1xuICAgICAgICBkZWJ1ZygnQ3JlYXRpbmcgbmV3IEh0dHBQcm94eUFnZW50IGluc3RhbmNlOiAlbycsIHRoaXMucHJveHkuaHJlZik7XG4gICAgICAgIC8vIFRyaW0gb2ZmIHRoZSBicmFja2V0cyBmcm9tIElQdjYgYWRkcmVzc2VzXG4gICAgICAgIGNvbnN0IGhvc3QgPSAodGhpcy5wcm94eS5ob3N0bmFtZSB8fCB0aGlzLnByb3h5Lmhvc3QpLnJlcGxhY2UoL15cXFt8XFxdJC9nLCAnJyk7XG4gICAgICAgIGNvbnN0IHBvcnQgPSB0aGlzLnByb3h5LnBvcnRcbiAgICAgICAgICAgID8gcGFyc2VJbnQodGhpcy5wcm94eS5wb3J0LCAxMClcbiAgICAgICAgICAgIDogdGhpcy5wcm94eS5wcm90b2NvbCA9PT0gJ2h0dHBzOidcbiAgICAgICAgICAgICAgICA/IDQ0M1xuICAgICAgICAgICAgICAgIDogODA7XG4gICAgICAgIHRoaXMuY29ubmVjdE9wdHMgPSB7XG4gICAgICAgICAgICAuLi4ob3B0cyA/IG9taXQob3B0cywgJ2hlYWRlcnMnKSA6IG51bGwpLFxuICAgICAgICAgICAgaG9zdCxcbiAgICAgICAgICAgIHBvcnQsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGFkZFJlcXVlc3QocmVxLCBvcHRzKSB7XG4gICAgICAgIHJlcS5faGVhZGVyID0gbnVsbDtcbiAgICAgICAgdGhpcy5zZXRSZXF1ZXN0UHJvcHMocmVxLCBvcHRzKTtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBgYWRkUmVxdWVzdCgpYCBpc24ndCBkZWZpbmVkIGluIGBAdHlwZXMvbm9kZWBcbiAgICAgICAgc3VwZXIuYWRkUmVxdWVzdChyZXEsIG9wdHMpO1xuICAgIH1cbiAgICBzZXRSZXF1ZXN0UHJvcHMocmVxLCBvcHRzKSB7XG4gICAgICAgIGNvbnN0IHsgcHJveHkgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IHByb3RvY29sID0gb3B0cy5zZWN1cmVFbmRwb2ludCA/ICdodHRwczonIDogJ2h0dHA6JztcbiAgICAgICAgY29uc3QgaG9zdG5hbWUgPSByZXEuZ2V0SGVhZGVyKCdob3N0JykgfHwgJ2xvY2FsaG9zdCc7XG4gICAgICAgIGNvbnN0IGJhc2UgPSBgJHtwcm90b2NvbH0vLyR7aG9zdG5hbWV9YDtcbiAgICAgICAgY29uc3QgdXJsID0gbmV3IHVybF8xLlVSTChyZXEucGF0aCwgYmFzZSk7XG4gICAgICAgIGlmIChvcHRzLnBvcnQgIT09IDgwKSB7XG4gICAgICAgICAgICB1cmwucG9ydCA9IFN0cmluZyhvcHRzLnBvcnQpO1xuICAgICAgICB9XG4gICAgICAgIC8vIENoYW5nZSB0aGUgYGh0dHAuQ2xpZW50UmVxdWVzdGAgaW5zdGFuY2UncyBcInBhdGhcIiBmaWVsZFxuICAgICAgICAvLyB0byB0aGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgVVJMIHRoYXQgd2lsbCBiZSByZXF1ZXN0ZWQuXG4gICAgICAgIHJlcS5wYXRoID0gU3RyaW5nKHVybCk7XG4gICAgICAgIC8vIEluamVjdCB0aGUgYFByb3h5LUF1dGhvcml6YXRpb25gIGhlYWRlciBpZiBuZWNlc3NhcnkuXG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB0eXBlb2YgdGhpcy5wcm94eUhlYWRlcnMgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICAgID8gdGhpcy5wcm94eUhlYWRlcnMoKVxuICAgICAgICAgICAgOiB7IC4uLnRoaXMucHJveHlIZWFkZXJzIH07XG4gICAgICAgIGlmIChwcm94eS51c2VybmFtZSB8fCBwcm94eS5wYXNzd29yZCkge1xuICAgICAgICAgICAgY29uc3QgYXV0aCA9IGAke2RlY29kZVVSSUNvbXBvbmVudChwcm94eS51c2VybmFtZSl9OiR7ZGVjb2RlVVJJQ29tcG9uZW50KHByb3h5LnBhc3N3b3JkKX1gO1xuICAgICAgICAgICAgaGVhZGVyc1snUHJveHktQXV0aG9yaXphdGlvbiddID0gYEJhc2ljICR7QnVmZmVyLmZyb20oYXV0aCkudG9TdHJpbmcoJ2Jhc2U2NCcpfWA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFoZWFkZXJzWydQcm94eS1Db25uZWN0aW9uJ10pIHtcbiAgICAgICAgICAgIGhlYWRlcnNbJ1Byb3h5LUNvbm5lY3Rpb24nXSA9IHRoaXMua2VlcEFsaXZlXG4gICAgICAgICAgICAgICAgPyAnS2VlcC1BbGl2ZSdcbiAgICAgICAgICAgICAgICA6ICdjbG9zZSc7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBuYW1lIG9mIE9iamVjdC5rZXlzKGhlYWRlcnMpKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGhlYWRlcnNbbmFtZV07XG4gICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXEuc2V0SGVhZGVyKG5hbWUsIHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBjb25uZWN0KHJlcSwgb3B0cykge1xuICAgICAgICByZXEuX2hlYWRlciA9IG51bGw7XG4gICAgICAgIGlmICghcmVxLnBhdGguaW5jbHVkZXMoJzovLycpKSB7XG4gICAgICAgICAgICB0aGlzLnNldFJlcXVlc3RQcm9wcyhyZXEsIG9wdHMpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEF0IHRoaXMgcG9pbnQsIHRoZSBodHRwIENsaWVudFJlcXVlc3QncyBpbnRlcm5hbCBgX2hlYWRlcmAgZmllbGRcbiAgICAgICAgLy8gbWlnaHQgaGF2ZSBhbHJlYWR5IGJlZW4gc2V0LiBJZiB0aGlzIGlzIHRoZSBjYXNlIHRoZW4gd2UnbGwgbmVlZFxuICAgICAgICAvLyB0byByZS1nZW5lcmF0ZSB0aGUgc3RyaW5nIHNpbmNlIHdlIGp1c3QgY2hhbmdlZCB0aGUgYHJlcS5wYXRoYC5cbiAgICAgICAgbGV0IGZpcnN0O1xuICAgICAgICBsZXQgZW5kT2ZIZWFkZXJzO1xuICAgICAgICBkZWJ1ZygnUmVnZW5lcmF0aW5nIHN0b3JlZCBIVFRQIGhlYWRlciBzdHJpbmcgZm9yIHJlcXVlc3QnKTtcbiAgICAgICAgcmVxLl9pbXBsaWNpdEhlYWRlcigpO1xuICAgICAgICBpZiAocmVxLm91dHB1dERhdGEgJiYgcmVxLm91dHB1dERhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZGVidWcoJ1BhdGNoaW5nIGNvbm5lY3Rpb24gd3JpdGUoKSBvdXRwdXQgYnVmZmVyIHdpdGggdXBkYXRlZCBoZWFkZXInKTtcbiAgICAgICAgICAgIGZpcnN0ID0gcmVxLm91dHB1dERhdGFbMF0uZGF0YTtcbiAgICAgICAgICAgIGVuZE9mSGVhZGVycyA9IGZpcnN0LmluZGV4T2YoJ1xcclxcblxcclxcbicpICsgNDtcbiAgICAgICAgICAgIHJlcS5vdXRwdXREYXRhWzBdLmRhdGEgPVxuICAgICAgICAgICAgICAgIHJlcS5faGVhZGVyICsgZmlyc3Quc3Vic3RyaW5nKGVuZE9mSGVhZGVycyk7XG4gICAgICAgICAgICBkZWJ1ZygnT3V0cHV0IGJ1ZmZlcjogJW8nLCByZXEub3V0cHV0RGF0YVswXS5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBDcmVhdGUgYSBzb2NrZXQgY29ubmVjdGlvbiB0byB0aGUgcHJveHkgc2VydmVyLlxuICAgICAgICBsZXQgc29ja2V0O1xuICAgICAgICBpZiAodGhpcy5wcm94eS5wcm90b2NvbCA9PT0gJ2h0dHBzOicpIHtcbiAgICAgICAgICAgIGRlYnVnKCdDcmVhdGluZyBgdGxzLlNvY2tldGA6ICVvJywgdGhpcy5jb25uZWN0T3B0cyk7XG4gICAgICAgICAgICBzb2NrZXQgPSB0bHMuY29ubmVjdCh0aGlzLmNvbm5lY3RPcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGRlYnVnKCdDcmVhdGluZyBgbmV0LlNvY2tldGA6ICVvJywgdGhpcy5jb25uZWN0T3B0cyk7XG4gICAgICAgICAgICBzb2NrZXQgPSBuZXQuY29ubmVjdCh0aGlzLmNvbm5lY3RPcHRzKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBXYWl0IGZvciB0aGUgc29ja2V0J3MgYGNvbm5lY3RgIGV2ZW50LCBzbyB0aGF0IHRoaXMgYGNhbGxiYWNrKClgXG4gICAgICAgIC8vIGZ1bmN0aW9uIHRocm93cyBpbnN0ZWFkIG9mIHRoZSBgaHR0cGAgcmVxdWVzdCBtYWNoaW5lcnkuIFRoaXMgaXNcbiAgICAgICAgLy8gaW1wb3J0YW50IGZvciBpLmUuIGBQYWNQcm94eUFnZW50YCB3aGljaCBkZXRlcm1pbmVzIGEgZmFpbGVkIHByb3h5XG4gICAgICAgIC8vIGNvbm5lY3Rpb24gdmlhIHRoZSBgY2FsbGJhY2soKWAgZnVuY3Rpb24gdGhyb3dpbmcuXG4gICAgICAgIGF3YWl0ICgwLCBldmVudHNfMS5vbmNlKShzb2NrZXQsICdjb25uZWN0Jyk7XG4gICAgICAgIHJldHVybiBzb2NrZXQ7XG4gICAgfVxufVxuSHR0cFByb3h5QWdlbnQucHJvdG9jb2xzID0gWydodHRwJywgJ2h0dHBzJ107XG5leHBvcnRzLkh0dHBQcm94eUFnZW50ID0gSHR0cFByb3h5QWdlbnQ7XG5mdW5jdGlvbiBvbWl0KG9iaiwgLi4ua2V5cykge1xuICAgIGNvbnN0IHJldCA9IHt9O1xuICAgIGxldCBrZXk7XG4gICAgZm9yIChrZXkgaW4gb2JqKSB7XG4gICAgICAgIGlmICgha2V5cy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgICAgICByZXRba2V5XSA9IG9ialtrZXldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdsb2JhbE5vUHJveHlMaXN0ID0gZXhwb3J0cy5wcm94eVBvbGljeU5hbWUgPSB2b2lkIDA7XG5leHBvcnRzLmxvYWROb1Byb3h5ID0gbG9hZE5vUHJveHk7XG5leHBvcnRzLmdldERlZmF1bHRQcm94eVNldHRpbmdzID0gZ2V0RGVmYXVsdFByb3h5U2V0dGluZ3M7XG5leHBvcnRzLnByb3h5UG9saWN5ID0gcHJveHlQb2xpY3k7XG5jb25zdCBodHRwc19wcm94eV9hZ2VudF8xID0gcmVxdWlyZShcImh0dHBzLXByb3h5LWFnZW50XCIpO1xuY29uc3QgaHR0cF9wcm94eV9hZ2VudF8xID0gcmVxdWlyZShcImh0dHAtcHJveHktYWdlbnRcIik7XG5jb25zdCBsb2dfanNfMSA9IHJlcXVpcmUoXCIuLi9sb2cuanNcIik7XG5jb25zdCBIVFRQU19QUk9YWSA9IFwiSFRUUFNfUFJPWFlcIjtcbmNvbnN0IEhUVFBfUFJPWFkgPSBcIkhUVFBfUFJPWFlcIjtcbmNvbnN0IEFMTF9QUk9YWSA9IFwiQUxMX1BST1hZXCI7XG5jb25zdCBOT19QUk9YWSA9IFwiTk9fUFJPWFlcIjtcbi8qKlxuICogVGhlIHByb2dyYW1tYXRpYyBpZGVudGlmaWVyIG9mIHRoZSBwcm94eVBvbGljeS5cbiAqL1xuZXhwb3J0cy5wcm94eVBvbGljeU5hbWUgPSBcInByb3h5UG9saWN5XCI7XG4vKipcbiAqIFN0b3JlcyB0aGUgcGF0dGVybnMgc3BlY2lmaWVkIGluIE5PX1BST1hZIGVudmlyb25tZW50IHZhcmlhYmxlLlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydHMuZ2xvYmFsTm9Qcm94eUxpc3QgPSBbXTtcbmxldCBub1Byb3h5TGlzdExvYWRlZCA9IGZhbHNlO1xuLyoqIEEgY2FjaGUgb2Ygd2hldGhlciBhIGhvc3Qgc2hvdWxkIGJ5cGFzcyB0aGUgcHJveHkuICovXG5jb25zdCBnbG9iYWxCeXBhc3NlZE1hcCA9IG5ldyBNYXAoKTtcbmZ1bmN0aW9uIGdldEVudmlyb25tZW50VmFsdWUobmFtZSkge1xuICAgIGlmIChwcm9jZXNzLmVudltuYW1lXSkge1xuICAgICAgICByZXR1cm4gcHJvY2Vzcy5lbnZbbmFtZV07XG4gICAgfVxuICAgIGVsc2UgaWYgKHByb2Nlc3MuZW52W25hbWUudG9Mb3dlckNhc2UoKV0pIHtcbiAgICAgICAgcmV0dXJuIHByb2Nlc3MuZW52W25hbWUudG9Mb3dlckNhc2UoKV07XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBsb2FkRW52aXJvbm1lbnRQcm94eVZhbHVlKCkge1xuICAgIGlmICghcHJvY2Vzcykge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBodHRwc1Byb3h5ID0gZ2V0RW52aXJvbm1lbnRWYWx1ZShIVFRQU19QUk9YWSk7XG4gICAgY29uc3QgYWxsUHJveHkgPSBnZXRFbnZpcm9ubWVudFZhbHVlKEFMTF9QUk9YWSk7XG4gICAgY29uc3QgaHR0cFByb3h5ID0gZ2V0RW52aXJvbm1lbnRWYWx1ZShIVFRQX1BST1hZKTtcbiAgICByZXR1cm4gaHR0cHNQcm94eSB8fCBhbGxQcm94eSB8fCBodHRwUHJveHk7XG59XG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdGhlIGhvc3Qgb2YgYSBnaXZlbiBgdXJpYCBtYXRjaGVzIGFueSBwYXR0ZXJuIGluIHRoZSBubyBwcm94eSBsaXN0LlxuICogSWYgdGhlcmUncyBhIG1hdGNoLCBhbnkgcmVxdWVzdCBzZW50IHRvIHRoZSBzYW1lIGhvc3Qgc2hvdWxkbid0IGhhdmUgdGhlIHByb3h5IHNldHRpbmdzIHNldC5cbiAqIFRoaXMgaW1wbGVtZW50YXRpb24gaXMgYSBwb3J0IG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9BenVyZS9henVyZS1zZGstZm9yLW5ldC9ibG9iLzhjY2E4MTEzNzExNTllNTI3MTU5YzdlYjY1NjAyNDc3ODk4NjgzZTIvc2RrL2NvcmUvQXp1cmUuQ29yZS9zcmMvUGlwZWxpbmUvSW50ZXJuYWwvSHR0cEVudmlyb25tZW50UHJveHkuY3MjTDIxMFxuICovXG5mdW5jdGlvbiBpc0J5cGFzc2VkKHVyaSwgbm9Qcm94eUxpc3QsIGJ5cGFzc2VkTWFwKSB7XG4gICAgaWYgKG5vUHJveHlMaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGhvc3QgPSBuZXcgVVJMKHVyaSkuaG9zdG5hbWU7XG4gICAgaWYgKGJ5cGFzc2VkTWFwID09PSBudWxsIHx8IGJ5cGFzc2VkTWFwID09PSB2b2lkIDAgPyB2b2lkIDAgOiBieXBhc3NlZE1hcC5oYXMoaG9zdCkpIHtcbiAgICAgICAgcmV0dXJuIGJ5cGFzc2VkTWFwLmdldChob3N0KTtcbiAgICB9XG4gICAgbGV0IGlzQnlwYXNzZWRGbGFnID0gZmFsc2U7XG4gICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIG5vUHJveHlMaXN0KSB7XG4gICAgICAgIGlmIChwYXR0ZXJuWzBdID09PSBcIi5cIikge1xuICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgbWF0Y2ggZWl0aGVyIGRvbWFpbiBpdCBzZWxmIG9yIGFueSBzdWJkb21haW4gb3IgaG9zdFxuICAgICAgICAgICAgLy8gLmZvby5jb20gd2lsbCBtYXRjaCBmb28uY29tIGl0IHNlbGYgb3IgKi5mb28uY29tXG4gICAgICAgICAgICBpZiAoaG9zdC5lbmRzV2l0aChwYXR0ZXJuKSkge1xuICAgICAgICAgICAgICAgIGlzQnlwYXNzZWRGbGFnID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChob3N0Lmxlbmd0aCA9PT0gcGF0dGVybi5sZW5ndGggLSAxICYmIGhvc3QgPT09IHBhdHRlcm4uc2xpY2UoMSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaXNCeXBhc3NlZEZsYWcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChob3N0ID09PSBwYXR0ZXJuKSB7XG4gICAgICAgICAgICAgICAgaXNCeXBhc3NlZEZsYWcgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGJ5cGFzc2VkTWFwID09PSBudWxsIHx8IGJ5cGFzc2VkTWFwID09PSB2b2lkIDAgPyB2b2lkIDAgOiBieXBhc3NlZE1hcC5zZXQoaG9zdCwgaXNCeXBhc3NlZEZsYWcpO1xuICAgIHJldHVybiBpc0J5cGFzc2VkRmxhZztcbn1cbmZ1bmN0aW9uIGxvYWROb1Byb3h5KCkge1xuICAgIGNvbnN0IG5vUHJveHkgPSBnZXRFbnZpcm9ubWVudFZhbHVlKE5PX1BST1hZKTtcbiAgICBub1Byb3h5TGlzdExvYWRlZCA9IHRydWU7XG4gICAgaWYgKG5vUHJveHkpIHtcbiAgICAgICAgcmV0dXJuIG5vUHJveHlcbiAgICAgICAgICAgIC5zcGxpdChcIixcIilcbiAgICAgICAgICAgIC5tYXAoKGl0ZW0pID0+IGl0ZW0udHJpbSgpKVxuICAgICAgICAgICAgLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5sZW5ndGgpO1xuICAgIH1cbiAgICByZXR1cm4gW107XG59XG4vKipcbiAqIFRoaXMgbWV0aG9kIGNvbnZlcnRzIGEgcHJveHkgdXJsIGludG8gYFByb3h5U2V0dGluZ3NgIGZvciB1c2Ugd2l0aCBQcm94eVBvbGljeS5cbiAqIElmIG5vIGFyZ3VtZW50IGlzIGdpdmVuLCBpdCBhdHRlbXB0cyB0byBwYXJzZSBhIHByb3h5IFVSTCBmcm9tIHRoZSBlbnZpcm9ubWVudFxuICogdmFyaWFibGVzIGBIVFRQU19QUk9YWWAgb3IgYEhUVFBfUFJPWFlgLlxuICogQHBhcmFtIHByb3h5VXJsIC0gVGhlIHVybCBvZiB0aGUgcHJveHkgdG8gdXNlLiBNYXkgY29udGFpbiBhdXRoZW50aWNhdGlvbiBpbmZvcm1hdGlvbi5cbiAqIEBkZXByZWNhdGVkIC0gSW50ZXJuYWxseSB0aGlzIG1ldGhvZCBpcyBubyBsb25nZXIgbmVjZXNzYXJ5IHdoZW4gc2V0dGluZyBwcm94eSBpbmZvcm1hdGlvbi5cbiAqL1xuZnVuY3Rpb24gZ2V0RGVmYXVsdFByb3h5U2V0dGluZ3MocHJveHlVcmwpIHtcbiAgICBpZiAoIXByb3h5VXJsKSB7XG4gICAgICAgIHByb3h5VXJsID0gbG9hZEVudmlyb25tZW50UHJveHlWYWx1ZSgpO1xuICAgICAgICBpZiAoIXByb3h5VXJsKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHBhcnNlZFVybCA9IG5ldyBVUkwocHJveHlVcmwpO1xuICAgIGNvbnN0IHNjaGVtYSA9IHBhcnNlZFVybC5wcm90b2NvbCA/IHBhcnNlZFVybC5wcm90b2NvbCArIFwiLy9cIiA6IFwiXCI7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgaG9zdDogc2NoZW1hICsgcGFyc2VkVXJsLmhvc3RuYW1lLFxuICAgICAgICBwb3J0OiBOdW1iZXIucGFyc2VJbnQocGFyc2VkVXJsLnBvcnQgfHwgXCI4MFwiKSxcbiAgICAgICAgdXNlcm5hbWU6IHBhcnNlZFVybC51c2VybmFtZSxcbiAgICAgICAgcGFzc3dvcmQ6IHBhcnNlZFVybC5wYXNzd29yZCxcbiAgICB9O1xufVxuLyoqXG4gKiBUaGlzIG1ldGhvZCBhdHRlbXB0cyB0byBwYXJzZSBhIHByb3h5IFVSTCBmcm9tIHRoZSBlbnZpcm9ubWVudFxuICogdmFyaWFibGVzIGBIVFRQU19QUk9YWWAgb3IgYEhUVFBfUFJPWFlgLlxuICovXG5mdW5jdGlvbiBnZXREZWZhdWx0UHJveHlTZXR0aW5nc0ludGVybmFsKCkge1xuICAgIGNvbnN0IGVudlByb3h5ID0gbG9hZEVudmlyb25tZW50UHJveHlWYWx1ZSgpO1xuICAgIHJldHVybiBlbnZQcm94eSA/IG5ldyBVUkwoZW52UHJveHkpIDogdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gZ2V0VXJsRnJvbVByb3h5U2V0dGluZ3Moc2V0dGluZ3MpIHtcbiAgICBsZXQgcGFyc2VkUHJveHlVcmw7XG4gICAgdHJ5IHtcbiAgICAgICAgcGFyc2VkUHJveHlVcmwgPSBuZXcgVVJMKHNldHRpbmdzLmhvc3QpO1xuICAgIH1cbiAgICBjYXRjaCAoX2EpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RpbmcgYSB2YWxpZCBob3N0IHN0cmluZyBpbiBwcm94eSBzZXR0aW5ncywgYnV0IGZvdW5kIFwiJHtzZXR0aW5ncy5ob3N0fVwiLmApO1xuICAgIH1cbiAgICBwYXJzZWRQcm94eVVybC5wb3J0ID0gU3RyaW5nKHNldHRpbmdzLnBvcnQpO1xuICAgIGlmIChzZXR0aW5ncy51c2VybmFtZSkge1xuICAgICAgICBwYXJzZWRQcm94eVVybC51c2VybmFtZSA9IHNldHRpbmdzLnVzZXJuYW1lO1xuICAgIH1cbiAgICBpZiAoc2V0dGluZ3MucGFzc3dvcmQpIHtcbiAgICAgICAgcGFyc2VkUHJveHlVcmwucGFzc3dvcmQgPSBzZXR0aW5ncy5wYXNzd29yZDtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlZFByb3h5VXJsO1xufVxuZnVuY3Rpb24gc2V0UHJveHlBZ2VudE9uUmVxdWVzdChyZXF1ZXN0LCBjYWNoZWRBZ2VudHMsIHByb3h5VXJsKSB7XG4gICAgLy8gQ3VzdG9tIEFnZW50IHNob3VsZCB0YWtlIHByZWNlZGVuY2Ugc28gaWYgb25lIGlzIHByZXNlbnRcbiAgICAvLyB3ZSBzaG91bGQgc2tpcCB0byBhdm9pZCBvdmVyd3JpdGluZyBpdC5cbiAgICBpZiAocmVxdWVzdC5hZ2VudCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwocmVxdWVzdC51cmwpO1xuICAgIGNvbnN0IGlzSW5zZWN1cmUgPSB1cmwucHJvdG9jb2wgIT09IFwiaHR0cHM6XCI7XG4gICAgaWYgKHJlcXVlc3QudGxzU2V0dGluZ3MpIHtcbiAgICAgICAgbG9nX2pzXzEubG9nZ2VyLndhcm5pbmcoXCJUTFMgc2V0dGluZ3MgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gY29tYmluYXRpb24gd2l0aCBjdXN0b20gUHJveHksIGNlcnRpZmljYXRlcyBwcm92aWRlZCB0byB0aGUgY2xpZW50IHdpbGwgYmUgaWdub3JlZC5cIik7XG4gICAgfVxuICAgIGNvbnN0IGhlYWRlcnMgPSByZXF1ZXN0LmhlYWRlcnMudG9KU09OKCk7XG4gICAgaWYgKGlzSW5zZWN1cmUpIHtcbiAgICAgICAgaWYgKCFjYWNoZWRBZ2VudHMuaHR0cFByb3h5QWdlbnQpIHtcbiAgICAgICAgICAgIGNhY2hlZEFnZW50cy5odHRwUHJveHlBZ2VudCA9IG5ldyBodHRwX3Byb3h5X2FnZW50XzEuSHR0cFByb3h5QWdlbnQocHJveHlVcmwsIHsgaGVhZGVycyB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXF1ZXN0LmFnZW50ID0gY2FjaGVkQWdlbnRzLmh0dHBQcm94eUFnZW50O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKCFjYWNoZWRBZ2VudHMuaHR0cHNQcm94eUFnZW50KSB7XG4gICAgICAgICAgICBjYWNoZWRBZ2VudHMuaHR0cHNQcm94eUFnZW50ID0gbmV3IGh0dHBzX3Byb3h5X2FnZW50XzEuSHR0cHNQcm94eUFnZW50KHByb3h5VXJsLCB7IGhlYWRlcnMgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVxdWVzdC5hZ2VudCA9IGNhY2hlZEFnZW50cy5odHRwc1Byb3h5QWdlbnQ7XG4gICAgfVxufVxuLyoqXG4gKiBBIHBvbGljeSB0aGF0IGFsbG93cyBvbmUgdG8gYXBwbHkgcHJveHkgc2V0dGluZ3MgdG8gYWxsIHJlcXVlc3RzLlxuICogSWYgbm90IHBhc3NlZCBzdGF0aWMgc2V0dGluZ3MsIHRoZXkgd2lsbCBiZSByZXRyaWV2ZWQgZnJvbSB0aGUgSFRUUFNfUFJPWFlcbiAqIG9yIEhUVFBfUFJPWFkgZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuICogQHBhcmFtIHByb3h5U2V0dGluZ3MgLSBQcm94eVNldHRpbmdzIHRvIHVzZSBvbiBlYWNoIHJlcXVlc3QuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIGFkZGl0aW9uYWwgc2V0dGluZ3MsIGZvciBleGFtcGxlLCBjdXN0b20gTk9fUFJPWFkgcGF0dGVybnNcbiAqL1xuZnVuY3Rpb24gcHJveHlQb2xpY3kocHJveHlTZXR0aW5ncywgb3B0aW9ucykge1xuICAgIGlmICghbm9Qcm94eUxpc3RMb2FkZWQpIHtcbiAgICAgICAgZXhwb3J0cy5nbG9iYWxOb1Byb3h5TGlzdC5wdXNoKC4uLmxvYWROb1Byb3h5KCkpO1xuICAgIH1cbiAgICBjb25zdCBkZWZhdWx0UHJveHkgPSBwcm94eVNldHRpbmdzXG4gICAgICAgID8gZ2V0VXJsRnJvbVByb3h5U2V0dGluZ3MocHJveHlTZXR0aW5ncylcbiAgICAgICAgOiBnZXREZWZhdWx0UHJveHlTZXR0aW5nc0ludGVybmFsKCk7XG4gICAgY29uc3QgY2FjaGVkQWdlbnRzID0ge307XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogZXhwb3J0cy5wcm94eVBvbGljeU5hbWUsXG4gICAgICAgIGFzeW5jIHNlbmRSZXF1ZXN0KHJlcXVlc3QsIG5leHQpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGlmICghcmVxdWVzdC5wcm94eVNldHRpbmdzICYmXG4gICAgICAgICAgICAgICAgZGVmYXVsdFByb3h5ICYmXG4gICAgICAgICAgICAgICAgIWlzQnlwYXNzZWQocmVxdWVzdC51cmwsIChfYSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5jdXN0b21Ob1Byb3h5TGlzdCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZXhwb3J0cy5nbG9iYWxOb1Byb3h5TGlzdCwgKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5jdXN0b21Ob1Byb3h5TGlzdCkgPyB1bmRlZmluZWQgOiBnbG9iYWxCeXBhc3NlZE1hcCkpIHtcbiAgICAgICAgICAgICAgICBzZXRQcm94eUFnZW50T25SZXF1ZXN0KHJlcXVlc3QsIGNhY2hlZEFnZW50cywgZGVmYXVsdFByb3h5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHJlcXVlc3QucHJveHlTZXR0aW5ncykge1xuICAgICAgICAgICAgICAgIHNldFByb3h5QWdlbnRPblJlcXVlc3QocmVxdWVzdCwgY2FjaGVkQWdlbnRzLCBnZXRVcmxGcm9tUHJveHlTZXR0aW5ncyhyZXF1ZXN0LnByb3h5U2V0dGluZ3MpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXh0KHJlcXVlc3QpO1xuICAgICAgICB9LFxuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wcm94eVBvbGljeS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnNldENsaWVudFJlcXVlc3RJZFBvbGljeU5hbWUgPSB2b2lkIDA7XG5leHBvcnRzLnNldENsaWVudFJlcXVlc3RJZFBvbGljeSA9IHNldENsaWVudFJlcXVlc3RJZFBvbGljeTtcbi8qKlxuICogVGhlIHByb2dyYW1tYXRpYyBpZGVudGlmaWVyIG9mIHRoZSBzZXRDbGllbnRSZXF1ZXN0SWRQb2xpY3kuXG4gKi9cbmV4cG9ydHMuc2V0Q2xpZW50UmVxdWVzdElkUG9saWN5TmFtZSA9IFwic2V0Q2xpZW50UmVxdWVzdElkUG9saWN5XCI7XG4vKipcbiAqIEVhY2ggUGlwZWxpbmVSZXF1ZXN0IGdldHMgYSB1bmlxdWUgaWQgdXBvbiBjcmVhdGlvbi5cbiAqIFRoaXMgcG9saWN5IHBhc3NlcyB0aGF0IHVuaXF1ZSBpZCBhbG9uZyB2aWEgYW4gSFRUUCBoZWFkZXIgdG8gZW5hYmxlIGJldHRlclxuICogdGVsZW1ldHJ5IGFuZCB0cmFjaW5nLlxuICogQHBhcmFtIHJlcXVlc3RJZEhlYWRlck5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgaGVhZGVyIHRvIHBhc3MgdGhlIHJlcXVlc3QgSUQgdG8uXG4gKi9cbmZ1bmN0aW9uIHNldENsaWVudFJlcXVlc3RJZFBvbGljeShyZXF1ZXN0SWRIZWFkZXJOYW1lID0gXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBleHBvcnRzLnNldENsaWVudFJlcXVlc3RJZFBvbGljeU5hbWUsXG4gICAgICAgIGFzeW5jIHNlbmRSZXF1ZXN0KHJlcXVlc3QsIG5leHQpIHtcbiAgICAgICAgICAgIGlmICghcmVxdWVzdC5oZWFkZXJzLmhhcyhyZXF1ZXN0SWRIZWFkZXJOYW1lKSkge1xuICAgICAgICAgICAgICAgIHJlcXVlc3QuaGVhZGVycy5zZXQocmVxdWVzdElkSGVhZGVyTmFtZSwgcmVxdWVzdC5yZXF1ZXN0SWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5leHQocmVxdWVzdCk7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNldENsaWVudFJlcXVlc3RJZFBvbGljeS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRsc1BvbGljeU5hbWUgPSB2b2lkIDA7XG5leHBvcnRzLnRsc1BvbGljeSA9IHRsc1BvbGljeTtcbi8qKlxuICogTmFtZSBvZiB0aGUgVExTIFBvbGljeVxuICovXG5leHBvcnRzLnRsc1BvbGljeU5hbWUgPSBcInRsc1BvbGljeVwiO1xuLyoqXG4gKiBHZXRzIGEgcGlwZWxpbmUgcG9saWN5IHRoYXQgYWRkcyB0aGUgY2xpZW50IGNlcnRpZmljYXRlIHRvIHRoZSBIdHRwQ2xpZW50IGFnZW50IGZvciBhdXRoZW50aWNhdGlvbi5cbiAqL1xuZnVuY3Rpb24gdGxzUG9saWN5KHRsc1NldHRpbmdzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogZXhwb3J0cy50bHNQb2xpY3lOYW1lLFxuICAgICAgICBzZW5kUmVxdWVzdDogYXN5bmMgKHJlcSwgbmV4dCkgPT4ge1xuICAgICAgICAgICAgLy8gVXNlcnMgbWF5IGRlZmluZSBhIHJlcXVlc3QgdGxzU2V0dGluZ3MsIGhvbm9yIHRob3NlIG92ZXIgdGhlIGNsaWVudCBsZXZlbCBvbmVcbiAgICAgICAgICAgIGlmICghcmVxLnRsc1NldHRpbmdzKSB7XG4gICAgICAgICAgICAgICAgcmVxLnRsc1NldHRpbmdzID0gdGxzU2V0dGluZ3M7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV4dChyZXEpO1xuICAgICAgICB9LFxuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD10bHNQb2xpY3kuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5UcmFjaW5nQ29udGV4dEltcGwgPSBleHBvcnRzLmtub3duQ29udGV4dEtleXMgPSB2b2lkIDA7XG5leHBvcnRzLmNyZWF0ZVRyYWNpbmdDb250ZXh0ID0gY3JlYXRlVHJhY2luZ0NvbnRleHQ7XG4vKiogQGludGVybmFsICovXG5leHBvcnRzLmtub3duQ29udGV4dEtleXMgPSB7XG4gICAgc3BhbjogU3ltYm9sLmZvcihcIkBhenVyZS9jb3JlLXRyYWNpbmcgc3BhblwiKSxcbiAgICBuYW1lc3BhY2U6IFN5bWJvbC5mb3IoXCJAYXp1cmUvY29yZS10cmFjaW5nIG5hbWVzcGFjZVwiKSxcbn07XG4vKipcbiAqIENyZWF0ZXMgYSBuZXcge0BsaW5rIFRyYWNpbmdDb250ZXh0fSB3aXRoIHRoZSBnaXZlbiBvcHRpb25zLlxuICogQHBhcmFtIG9wdGlvbnMgLSBBIHNldCBvZiBrbm93biBrZXlzIHRoYXQgbWF5IGJlIHNldCBvbiB0aGUgY29udGV4dC5cbiAqIEByZXR1cm5zIEEgbmV3IHtAbGluayBUcmFjaW5nQ29udGV4dH0gd2l0aCB0aGUgZ2l2ZW4gb3B0aW9ucy5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gY3JlYXRlVHJhY2luZ0NvbnRleHQob3B0aW9ucyA9IHt9KSB7XG4gICAgbGV0IGNvbnRleHQgPSBuZXcgVHJhY2luZ0NvbnRleHRJbXBsKG9wdGlvbnMucGFyZW50Q29udGV4dCk7XG4gICAgaWYgKG9wdGlvbnMuc3Bhbikge1xuICAgICAgICBjb250ZXh0ID0gY29udGV4dC5zZXRWYWx1ZShleHBvcnRzLmtub3duQ29udGV4dEtleXMuc3Bhbiwgb3B0aW9ucy5zcGFuKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMubmFtZXNwYWNlKSB7XG4gICAgICAgIGNvbnRleHQgPSBjb250ZXh0LnNldFZhbHVlKGV4cG9ydHMua25vd25Db250ZXh0S2V5cy5uYW1lc3BhY2UsIG9wdGlvbnMubmFtZXNwYWNlKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRleHQ7XG59XG4vKiogQGludGVybmFsICovXG5jbGFzcyBUcmFjaW5nQ29udGV4dEltcGwge1xuICAgIGNvbnN0cnVjdG9yKGluaXRpYWxDb250ZXh0KSB7XG4gICAgICAgIHRoaXMuX2NvbnRleHRNYXAgPVxuICAgICAgICAgICAgaW5pdGlhbENvbnRleHQgaW5zdGFuY2VvZiBUcmFjaW5nQ29udGV4dEltcGxcbiAgICAgICAgICAgICAgICA/IG5ldyBNYXAoaW5pdGlhbENvbnRleHQuX2NvbnRleHRNYXApXG4gICAgICAgICAgICAgICAgOiBuZXcgTWFwKCk7XG4gICAgfVxuICAgIHNldFZhbHVlKGtleSwgdmFsdWUpIHtcbiAgICAgICAgY29uc3QgbmV3Q29udGV4dCA9IG5ldyBUcmFjaW5nQ29udGV4dEltcGwodGhpcyk7XG4gICAgICAgIG5ld0NvbnRleHQuX2NvbnRleHRNYXAuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gbmV3Q29udGV4dDtcbiAgICB9XG4gICAgZ2V0VmFsdWUoa2V5KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb250ZXh0TWFwLmdldChrZXkpO1xuICAgIH1cbiAgICBkZWxldGVWYWx1ZShrZXkpIHtcbiAgICAgICAgY29uc3QgbmV3Q29udGV4dCA9IG5ldyBUcmFjaW5nQ29udGV4dEltcGwodGhpcyk7XG4gICAgICAgIG5ld0NvbnRleHQuX2NvbnRleHRNYXAuZGVsZXRlKGtleSk7XG4gICAgICAgIHJldHVybiBuZXdDb250ZXh0O1xuICAgIH1cbn1cbmV4cG9ydHMuVHJhY2luZ0NvbnRleHRJbXBsID0gVHJhY2luZ0NvbnRleHRJbXBsO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dHJhY2luZ0NvbnRleHQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5zdGF0ZSA9IHZvaWQgMDtcbi8qKlxuICogQGludGVybmFsXG4gKlxuICogSG9sZHMgdGhlIHNpbmdsZXRvbiBpbnN0cnVtZW50ZXIsIHRvIGJlIHNoYXJlZCBhY3Jvc3MgQ0pTIGFuZCBFU00gaW1wb3J0cy5cbiAqL1xuZXhwb3J0cy5zdGF0ZSA9IHtcbiAgICBpbnN0cnVtZW50ZXJJbXBsZW1lbnRhdGlvbjogdW5kZWZpbmVkLFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN0YXRlLWNqcy5janMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jcmVhdGVEZWZhdWx0VHJhY2luZ1NwYW4gPSBjcmVhdGVEZWZhdWx0VHJhY2luZ1NwYW47XG5leHBvcnRzLmNyZWF0ZURlZmF1bHRJbnN0cnVtZW50ZXIgPSBjcmVhdGVEZWZhdWx0SW5zdHJ1bWVudGVyO1xuZXhwb3J0cy51c2VJbnN0cnVtZW50ZXIgPSB1c2VJbnN0cnVtZW50ZXI7XG5leHBvcnRzLmdldEluc3RydW1lbnRlciA9IGdldEluc3RydW1lbnRlcjtcbmNvbnN0IHRyYWNpbmdDb250ZXh0X2pzXzEgPSByZXF1aXJlKFwiLi90cmFjaW5nQ29udGV4dC5qc1wiKTtcbmNvbnN0IHN0YXRlX2pzXzEgPSByZXF1aXJlKFwiLi9zdGF0ZS5qc1wiKTtcbmZ1bmN0aW9uIGNyZWF0ZURlZmF1bHRUcmFjaW5nU3BhbigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBlbmQ6ICgpID0+IHtcbiAgICAgICAgICAgIC8vIG5vb3BcbiAgICAgICAgfSxcbiAgICAgICAgaXNSZWNvcmRpbmc6ICgpID0+IGZhbHNlLFxuICAgICAgICByZWNvcmRFeGNlcHRpb246ICgpID0+IHtcbiAgICAgICAgICAgIC8vIG5vb3BcbiAgICAgICAgfSxcbiAgICAgICAgc2V0QXR0cmlidXRlOiAoKSA9PiB7XG4gICAgICAgICAgICAvLyBub29wXG4gICAgICAgIH0sXG4gICAgICAgIHNldFN0YXR1czogKCkgPT4ge1xuICAgICAgICAgICAgLy8gbm9vcFxuICAgICAgICB9LFxuICAgICAgICBhZGRFdmVudDogKCkgPT4ge1xuICAgICAgICAgICAgLy8gbm9vcFxuICAgICAgICB9LFxuICAgIH07XG59XG5mdW5jdGlvbiBjcmVhdGVEZWZhdWx0SW5zdHJ1bWVudGVyKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGNyZWF0ZVJlcXVlc3RIZWFkZXJzOiAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH0sXG4gICAgICAgIHBhcnNlVHJhY2VwYXJlbnRIZWFkZXI6ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH0sXG4gICAgICAgIHN0YXJ0U3BhbjogKF9uYW1lLCBzcGFuT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBzcGFuOiBjcmVhdGVEZWZhdWx0VHJhY2luZ1NwYW4oKSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nQ29udGV4dDogKDAsIHRyYWNpbmdDb250ZXh0X2pzXzEuY3JlYXRlVHJhY2luZ0NvbnRleHQpKHsgcGFyZW50Q29udGV4dDogc3Bhbk9wdGlvbnMudHJhY2luZ0NvbnRleHQgfSksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgICB3aXRoQ29udGV4dChfY29udGV4dCwgY2FsbGJhY2ssIC4uLmNhbGxiYWNrQXJncykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKC4uLmNhbGxiYWNrQXJncyk7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbi8qKlxuICogRXh0ZW5kcyB0aGUgQXp1cmUgU0RLIHdpdGggc3VwcG9ydCBmb3IgYSBnaXZlbiBpbnN0cnVtZW50ZXIgaW1wbGVtZW50YXRpb24uXG4gKlxuICogQHBhcmFtIGluc3RydW1lbnRlciAtIFRoZSBpbnN0cnVtZW50ZXIgaW1wbGVtZW50YXRpb24gdG8gdXNlLlxuICovXG5mdW5jdGlvbiB1c2VJbnN0cnVtZW50ZXIoaW5zdHJ1bWVudGVyKSB7XG4gICAgc3RhdGVfanNfMS5zdGF0ZS5pbnN0cnVtZW50ZXJJbXBsZW1lbnRhdGlvbiA9IGluc3RydW1lbnRlcjtcbn1cbi8qKlxuICogR2V0cyB0aGUgY3VycmVudGx5IHNldCBpbnN0cnVtZW50ZXIsIGEgTm8tT3AgaW5zdHJ1bWVudGVyIGJ5IGRlZmF1bHQuXG4gKlxuICogQHJldHVybnMgVGhlIGN1cnJlbnRseSBzZXQgaW5zdHJ1bWVudGVyXG4gKi9cbmZ1bmN0aW9uIGdldEluc3RydW1lbnRlcigpIHtcbiAgICBpZiAoIXN0YXRlX2pzXzEuc3RhdGUuaW5zdHJ1bWVudGVySW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgc3RhdGVfanNfMS5zdGF0ZS5pbnN0cnVtZW50ZXJJbXBsZW1lbnRhdGlvbiA9IGNyZWF0ZURlZmF1bHRJbnN0cnVtZW50ZXIoKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0YXRlX2pzXzEuc3RhdGUuaW5zdHJ1bWVudGVySW1wbGVtZW50YXRpb247XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbnN0cnVtZW50ZXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jcmVhdGVUcmFjaW5nQ2xpZW50ID0gY3JlYXRlVHJhY2luZ0NsaWVudDtcbmNvbnN0IGluc3RydW1lbnRlcl9qc18xID0gcmVxdWlyZShcIi4vaW5zdHJ1bWVudGVyLmpzXCIpO1xuY29uc3QgdHJhY2luZ0NvbnRleHRfanNfMSA9IHJlcXVpcmUoXCIuL3RyYWNpbmdDb250ZXh0LmpzXCIpO1xuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHRyYWNpbmcgY2xpZW50LlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgdHJhY2luZyBjbGllbnQuXG4gKiBAcmV0dXJucyAtIEFuIGluc3RhbmNlIG9mIHtAbGluayBUcmFjaW5nQ2xpZW50fS5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlVHJhY2luZ0NsaWVudChvcHRpb25zKSB7XG4gICAgY29uc3QgeyBuYW1lc3BhY2UsIHBhY2thZ2VOYW1lLCBwYWNrYWdlVmVyc2lvbiB9ID0gb3B0aW9ucztcbiAgICBmdW5jdGlvbiBzdGFydFNwYW4obmFtZSwgb3BlcmF0aW9uT3B0aW9ucywgc3Bhbk9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBzdGFydFNwYW5SZXN1bHQgPSAoMCwgaW5zdHJ1bWVudGVyX2pzXzEuZ2V0SW5zdHJ1bWVudGVyKSgpLnN0YXJ0U3BhbihuYW1lLCBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHNwYW5PcHRpb25zKSwgeyBwYWNrYWdlTmFtZTogcGFja2FnZU5hbWUsIHBhY2thZ2VWZXJzaW9uOiBwYWNrYWdlVmVyc2lvbiwgdHJhY2luZ0NvbnRleHQ6IChfYSA9IG9wZXJhdGlvbk9wdGlvbnMgPT09IG51bGwgfHwgb3BlcmF0aW9uT3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3BlcmF0aW9uT3B0aW9ucy50cmFjaW5nT3B0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRyYWNpbmdDb250ZXh0IH0pKTtcbiAgICAgICAgbGV0IHRyYWNpbmdDb250ZXh0ID0gc3RhcnRTcGFuUmVzdWx0LnRyYWNpbmdDb250ZXh0O1xuICAgICAgICBjb25zdCBzcGFuID0gc3RhcnRTcGFuUmVzdWx0LnNwYW47XG4gICAgICAgIGlmICghdHJhY2luZ0NvbnRleHQuZ2V0VmFsdWUodHJhY2luZ0NvbnRleHRfanNfMS5rbm93bkNvbnRleHRLZXlzLm5hbWVzcGFjZSkpIHtcbiAgICAgICAgICAgIHRyYWNpbmdDb250ZXh0ID0gdHJhY2luZ0NvbnRleHQuc2V0VmFsdWUodHJhY2luZ0NvbnRleHRfanNfMS5rbm93bkNvbnRleHRLZXlzLm5hbWVzcGFjZSwgbmFtZXNwYWNlKTtcbiAgICAgICAgfVxuICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShcImF6Lm5hbWVzcGFjZVwiLCB0cmFjaW5nQ29udGV4dC5nZXRWYWx1ZSh0cmFjaW5nQ29udGV4dF9qc18xLmtub3duQ29udGV4dEtleXMubmFtZXNwYWNlKSk7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRPcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgb3BlcmF0aW9uT3B0aW9ucywge1xuICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3BlcmF0aW9uT3B0aW9ucyA9PT0gbnVsbCB8fCBvcGVyYXRpb25PcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcGVyYXRpb25PcHRpb25zLnRyYWNpbmdPcHRpb25zKSwgeyB0cmFjaW5nQ29udGV4dCB9KSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzcGFuLFxuICAgICAgICAgICAgdXBkYXRlZE9wdGlvbnMsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGFzeW5jIGZ1bmN0aW9uIHdpdGhTcGFuKG5hbWUsIG9wZXJhdGlvbk9wdGlvbnMsIGNhbGxiYWNrLCBzcGFuT3B0aW9ucykge1xuICAgICAgICBjb25zdCB7IHNwYW4sIHVwZGF0ZWRPcHRpb25zIH0gPSBzdGFydFNwYW4obmFtZSwgb3BlcmF0aW9uT3B0aW9ucywgc3Bhbk9wdGlvbnMpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgd2l0aENvbnRleHQodXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMudHJhY2luZ0NvbnRleHQsICgpID0+IFByb21pc2UucmVzb2x2ZShjYWxsYmFjayh1cGRhdGVkT3B0aW9ucywgc3BhbikpKTtcbiAgICAgICAgICAgIHNwYW4uc2V0U3RhdHVzKHsgc3RhdHVzOiBcInN1Y2Nlc3NcIiB9KTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgc3Bhbi5zZXRTdGF0dXMoeyBzdGF0dXM6IFwiZXJyb3JcIiwgZXJyb3I6IGVyciB9KTtcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gd2l0aENvbnRleHQoY29udGV4dCwgY2FsbGJhY2ssIC4uLmNhbGxiYWNrQXJncykge1xuICAgICAgICByZXR1cm4gKDAsIGluc3RydW1lbnRlcl9qc18xLmdldEluc3RydW1lbnRlcikoKS53aXRoQ29udGV4dChjb250ZXh0LCBjYWxsYmFjaywgLi4uY2FsbGJhY2tBcmdzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUGFyc2VzIGEgdHJhY2VwYXJlbnQgaGVhZGVyIHZhbHVlIGludG8gYSBzcGFuIGlkZW50aWZpZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdHJhY2VwYXJlbnRIZWFkZXIgLSBUaGUgdHJhY2VwYXJlbnQgaGVhZGVyIHRvIHBhcnNlLlxuICAgICAqIEByZXR1cm5zIEFuIGltcGxlbWVudGF0aW9uLXNwZWNpZmljIGlkZW50aWZpZXIgZm9yIHRoZSBzcGFuLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHBhcnNlVHJhY2VwYXJlbnRIZWFkZXIodHJhY2VwYXJlbnRIZWFkZXIpIHtcbiAgICAgICAgcmV0dXJuICgwLCBpbnN0cnVtZW50ZXJfanNfMS5nZXRJbnN0cnVtZW50ZXIpKCkucGFyc2VUcmFjZXBhcmVudEhlYWRlcih0cmFjZXBhcmVudEhlYWRlcik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBzZXQgb2YgcmVxdWVzdCBoZWFkZXJzIHRvIHByb3BhZ2F0ZSB0cmFjaW5nIGluZm9ybWF0aW9uIHRvIGEgYmFja2VuZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0cmFjaW5nQ29udGV4dCAtIFRoZSBjb250ZXh0IGNvbnRhaW5pbmcgdGhlIHNwYW4gdG8gc2VyaWFsaXplLlxuICAgICAqIEByZXR1cm5zIFRoZSBzZXQgb2YgaGVhZGVycyB0byBhZGQgdG8gYSByZXF1ZXN0LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZVJlcXVlc3RIZWFkZXJzKHRyYWNpbmdDb250ZXh0KSB7XG4gICAgICAgIHJldHVybiAoMCwgaW5zdHJ1bWVudGVyX2pzXzEuZ2V0SW5zdHJ1bWVudGVyKSgpLmNyZWF0ZVJlcXVlc3RIZWFkZXJzKHRyYWNpbmdDb250ZXh0KTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc3RhcnRTcGFuLFxuICAgICAgICB3aXRoU3BhbixcbiAgICAgICAgd2l0aENvbnRleHQsXG4gICAgICAgIHBhcnNlVHJhY2VwYXJlbnRIZWFkZXIsXG4gICAgICAgIGNyZWF0ZVJlcXVlc3RIZWFkZXJzLFxuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD10cmFjaW5nQ2xpZW50LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlVHJhY2luZ0NsaWVudCA9IGV4cG9ydHMudXNlSW5zdHJ1bWVudGVyID0gdm9pZCAwO1xudmFyIGluc3RydW1lbnRlcl9qc18xID0gcmVxdWlyZShcIi4vaW5zdHJ1bWVudGVyLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidXNlSW5zdHJ1bWVudGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBpbnN0cnVtZW50ZXJfanNfMS51c2VJbnN0cnVtZW50ZXI7IH0gfSk7XG52YXIgdHJhY2luZ0NsaWVudF9qc18xID0gcmVxdWlyZShcIi4vdHJhY2luZ0NsaWVudC5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVRyYWNpbmdDbGllbnRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRyYWNpbmdDbGllbnRfanNfMS5jcmVhdGVUcmFjaW5nQ2xpZW50OyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jdXN0b20gPSB2b2lkIDA7XG5jb25zdCBub2RlX3V0aWxfMSA9IHJlcXVpcmUoXCJub2RlOnV0aWxcIik7XG5leHBvcnRzLmN1c3RvbSA9IG5vZGVfdXRpbF8xLmluc3BlY3QuY3VzdG9tO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5zcGVjdC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlJlc3RFcnJvciA9IHZvaWQgMDtcbmV4cG9ydHMuaXNSZXN0RXJyb3IgPSBpc1Jlc3RFcnJvcjtcbmNvbnN0IGNvcmVfdXRpbF8xID0gcmVxdWlyZShcIkBhenVyZS9jb3JlLXV0aWxcIik7XG5jb25zdCBpbnNwZWN0X2pzXzEgPSByZXF1aXJlKFwiLi91dGlsL2luc3BlY3QuanNcIik7XG5jb25zdCBzYW5pdGl6ZXJfanNfMSA9IHJlcXVpcmUoXCIuL3V0aWwvc2FuaXRpemVyLmpzXCIpO1xuY29uc3QgZXJyb3JTYW5pdGl6ZXIgPSBuZXcgc2FuaXRpemVyX2pzXzEuU2FuaXRpemVyKCk7XG4vKipcbiAqIEEgY3VzdG9tIGVycm9yIHR5cGUgZm9yIGZhaWxlZCBwaXBlbGluZSByZXF1ZXN0cy5cbiAqL1xuY2xhc3MgUmVzdEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2UsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJSZXN0RXJyb3JcIjtcbiAgICAgICAgdGhpcy5jb2RlID0gb3B0aW9ucy5jb2RlO1xuICAgICAgICB0aGlzLnN0YXR1c0NvZGUgPSBvcHRpb25zLnN0YXR1c0NvZGU7XG4gICAgICAgIC8vIFRoZSByZXF1ZXN0IGFuZCByZXNwb25zZSBtYXkgY29udGFpbiBzZW5zaXRpdmUgaW5mb3JtYXRpb24gaW4gdGhlIGhlYWRlcnMgb3IgYm9keS5cbiAgICAgICAgLy8gVG8gaGVscCBwcmV2ZW50IHRoaXMgc2Vuc2l0aXZlIGluZm9ybWF0aW9uIGJlaW5nIGFjY2lkZW50YWxseSBsb2dnZWQsIHRoZSByZXF1ZXN0IGFuZCByZXNwb25zZVxuICAgICAgICAvLyBwcm9wZXJ0aWVzIGFyZSBtYXJrZWQgYXMgbm9uLWVudW1lcmFibGUgaGVyZS4gVGhpcyBwcmV2ZW50cyB0aGVtIHNob3dpbmcgdXAgaW4gdGhlIG91dHB1dCBvZlxuICAgICAgICAvLyBKU09OLnN0cmluZ2lmeSBhbmQgY29uc29sZS5sb2cuXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInJlcXVlc3RcIiwgeyB2YWx1ZTogb3B0aW9ucy5yZXF1ZXN0LCBlbnVtZXJhYmxlOiBmYWxzZSB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwicmVzcG9uc2VcIiwgeyB2YWx1ZTogb3B0aW9ucy5yZXNwb25zZSwgZW51bWVyYWJsZTogZmFsc2UgfSk7XG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBSZXN0RXJyb3IucHJvdG90eXBlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTG9nZ2luZyBtZXRob2QgZm9yIHV0aWwuaW5zcGVjdCBpbiBOb2RlXG4gICAgICovXG4gICAgW2luc3BlY3RfanNfMS5jdXN0b21dKCkge1xuICAgICAgICAvLyBFeHRyYWN0IG5vbi1lbnVtZXJhYmxlIHByb3BlcnRpZXMgYW5kIGFkZCB0aGVtIGJhY2suIFRoaXMgaXMgT0sgc2luY2UgaW4gdGhpcyBvdXRwdXQgdGhlIHJlcXVlc3QgYW5kXG4gICAgICAgIC8vIHJlc3BvbnNlIGdldCBzYW5pdGl6ZWQuXG4gICAgICAgIHJldHVybiBgUmVzdEVycm9yOiAke3RoaXMubWVzc2FnZX0gXFxuICR7ZXJyb3JTYW5pdGl6ZXIuc2FuaXRpemUoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCB0aGlzKSwgeyByZXF1ZXN0OiB0aGlzLnJlcXVlc3QsIHJlc3BvbnNlOiB0aGlzLnJlc3BvbnNlIH0pKX1gO1xuICAgIH1cbn1cbmV4cG9ydHMuUmVzdEVycm9yID0gUmVzdEVycm9yO1xuLyoqXG4gKiBTb21ldGhpbmcgd2VudCB3cm9uZyB3aGVuIG1ha2luZyB0aGUgcmVxdWVzdC5cbiAqIFRoaXMgbWVhbnMgdGhlIGFjdHVhbCByZXF1ZXN0IGZhaWxlZCBmb3Igc29tZSByZWFzb24sXG4gKiBzdWNoIGFzIGEgRE5TIGlzc3VlIG9yIHRoZSBjb25uZWN0aW9uIGJlaW5nIGxvc3QuXG4gKi9cblJlc3RFcnJvci5SRVFVRVNUX1NFTkRfRVJST1IgPSBcIlJFUVVFU1RfU0VORF9FUlJPUlwiO1xuLyoqXG4gKiBUaGlzIG1lYW5zIHRoYXQgcGFyc2luZyB0aGUgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyIGZhaWxlZC5cbiAqIEl0IG1heSBoYXZlIGJlZW4gbWFsZm9ybWVkLlxuICovXG5SZXN0RXJyb3IuUEFSU0VfRVJST1IgPSBcIlBBUlNFX0VSUk9SXCI7XG4vKipcbiAqIFR5cGVndWFyZCBmb3IgUmVzdEVycm9yXG4gKiBAcGFyYW0gZSAtIFNvbWV0aGluZyBjYXVnaHQgYnkgYSBjYXRjaCBjbGF1c2UuXG4gKi9cbmZ1bmN0aW9uIGlzUmVzdEVycm9yKGUpIHtcbiAgICBpZiAoZSBpbnN0YW5jZW9mIFJlc3RFcnJvcikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuICgwLCBjb3JlX3V0aWxfMS5pc0Vycm9yKShlKSAmJiBlLm5hbWUgPT09IFwiUmVzdEVycm9yXCI7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZXN0RXJyb3IuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFjaW5nUG9saWN5TmFtZSA9IHZvaWQgMDtcbmV4cG9ydHMudHJhY2luZ1BvbGljeSA9IHRyYWNpbmdQb2xpY3k7XG5jb25zdCBjb3JlX3RyYWNpbmdfMSA9IHJlcXVpcmUoXCJAYXp1cmUvY29yZS10cmFjaW5nXCIpO1xuY29uc3QgY29uc3RhbnRzX2pzXzEgPSByZXF1aXJlKFwiLi4vY29uc3RhbnRzLmpzXCIpO1xuY29uc3QgdXNlckFnZW50X2pzXzEgPSByZXF1aXJlKFwiLi4vdXRpbC91c2VyQWdlbnQuanNcIik7XG5jb25zdCBsb2dfanNfMSA9IHJlcXVpcmUoXCIuLi9sb2cuanNcIik7XG5jb25zdCBjb3JlX3V0aWxfMSA9IHJlcXVpcmUoXCJAYXp1cmUvY29yZS11dGlsXCIpO1xuY29uc3QgcmVzdEVycm9yX2pzXzEgPSByZXF1aXJlKFwiLi4vcmVzdEVycm9yLmpzXCIpO1xuY29uc3Qgc2FuaXRpemVyX2pzXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9zYW5pdGl6ZXIuanNcIik7XG4vKipcbiAqIFRoZSBwcm9ncmFtbWF0aWMgaWRlbnRpZmllciBvZiB0aGUgdHJhY2luZ1BvbGljeS5cbiAqL1xuZXhwb3J0cy50cmFjaW5nUG9saWN5TmFtZSA9IFwidHJhY2luZ1BvbGljeVwiO1xuLyoqXG4gKiBBIHNpbXBsZSBwb2xpY3kgdG8gY3JlYXRlIE9wZW5UZWxlbWV0cnkgU3BhbnMgZm9yIGVhY2ggcmVxdWVzdCBtYWRlIGJ5IHRoZSBwaXBlbGluZVxuICogdGhhdCBoYXMgU3Bhbk9wdGlvbnMgd2l0aCBhIHBhcmVudC5cbiAqIFJlcXVlc3RzIG1hZGUgd2l0aG91dCBhIHBhcmVudCBTcGFuIHdpbGwgbm90IGJlIHJlY29yZGVkLlxuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIGNvbmZpZ3VyZSB0aGUgdGVsZW1ldHJ5IGxvZ2dlZCBieSB0aGUgdHJhY2luZyBwb2xpY3kuXG4gKi9cbmZ1bmN0aW9uIHRyYWNpbmdQb2xpY3kob3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgdXNlckFnZW50UHJvbWlzZSA9ICgwLCB1c2VyQWdlbnRfanNfMS5nZXRVc2VyQWdlbnRWYWx1ZSkob3B0aW9ucy51c2VyQWdlbnRQcmVmaXgpO1xuICAgIGNvbnN0IHNhbml0aXplciA9IG5ldyBzYW5pdGl6ZXJfanNfMS5TYW5pdGl6ZXIoe1xuICAgICAgICBhZGRpdGlvbmFsQWxsb3dlZFF1ZXJ5UGFyYW1ldGVyczogb3B0aW9ucy5hZGRpdGlvbmFsQWxsb3dlZFF1ZXJ5UGFyYW1ldGVycyxcbiAgICB9KTtcbiAgICBjb25zdCB0cmFjaW5nQ2xpZW50ID0gdHJ5Q3JlYXRlVHJhY2luZ0NsaWVudCgpO1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGV4cG9ydHMudHJhY2luZ1BvbGljeU5hbWUsXG4gICAgICAgIGFzeW5jIHNlbmRSZXF1ZXN0KHJlcXVlc3QsIG5leHQpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGlmICghdHJhY2luZ0NsaWVudCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0KHJlcXVlc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdXNlckFnZW50ID0gYXdhaXQgdXNlckFnZW50UHJvbWlzZTtcbiAgICAgICAgICAgIGNvbnN0IHNwYW5BdHRyaWJ1dGVzID0ge1xuICAgICAgICAgICAgICAgIFwiaHR0cC51cmxcIjogc2FuaXRpemVyLnNhbml0aXplVXJsKHJlcXVlc3QudXJsKSxcbiAgICAgICAgICAgICAgICBcImh0dHAubWV0aG9kXCI6IHJlcXVlc3QubWV0aG9kLFxuICAgICAgICAgICAgICAgIFwiaHR0cC51c2VyX2FnZW50XCI6IHVzZXJBZ2VudCxcbiAgICAgICAgICAgICAgICByZXF1ZXN0SWQ6IHJlcXVlc3QucmVxdWVzdElkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmICh1c2VyQWdlbnQpIHtcbiAgICAgICAgICAgICAgICBzcGFuQXR0cmlidXRlc1tcImh0dHAudXNlcl9hZ2VudFwiXSA9IHVzZXJBZ2VudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHsgc3BhbiwgdHJhY2luZ0NvbnRleHQgfSA9IChfYSA9IHRyeUNyZWF0ZVNwYW4odHJhY2luZ0NsaWVudCwgcmVxdWVzdCwgc3BhbkF0dHJpYnV0ZXMpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB7fTtcbiAgICAgICAgICAgIGlmICghc3BhbiB8fCAhdHJhY2luZ0NvbnRleHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dChyZXF1ZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0cmFjaW5nQ2xpZW50LndpdGhDb250ZXh0KHRyYWNpbmdDb250ZXh0LCBuZXh0LCByZXF1ZXN0KTtcbiAgICAgICAgICAgICAgICB0cnlQcm9jZXNzUmVzcG9uc2Uoc3BhbiwgcmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICB0cnlQcm9jZXNzRXJyb3Ioc3BhbiwgZXJyKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbmZ1bmN0aW9uIHRyeUNyZWF0ZVRyYWNpbmdDbGllbnQoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuICgwLCBjb3JlX3RyYWNpbmdfMS5jcmVhdGVUcmFjaW5nQ2xpZW50KSh7XG4gICAgICAgICAgICBuYW1lc3BhY2U6IFwiXCIsXG4gICAgICAgICAgICBwYWNrYWdlTmFtZTogXCJAYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lXCIsXG4gICAgICAgICAgICBwYWNrYWdlVmVyc2lvbjogY29uc3RhbnRzX2pzXzEuU0RLX1ZFUlNJT04sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBsb2dfanNfMS5sb2dnZXIud2FybmluZyhgRXJyb3Igd2hlbiBjcmVhdGluZyB0aGUgVHJhY2luZ0NsaWVudDogJHsoMCwgY29yZV91dGlsXzEuZ2V0RXJyb3JNZXNzYWdlKShlKX1gKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59XG5mdW5jdGlvbiB0cnlDcmVhdGVTcGFuKHRyYWNpbmdDbGllbnQsIHJlcXVlc3QsIHNwYW5BdHRyaWJ1dGVzKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gQXMgcGVyIHNwZWMsIHdlIGRvIG5vdCBuZWVkIHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBIVFRQIGFuZCBIVFRQUyBpbiBzcGFuIG5hbWUuXG4gICAgICAgIGNvbnN0IHsgc3BhbiwgdXBkYXRlZE9wdGlvbnMgfSA9IHRyYWNpbmdDbGllbnQuc3RhcnRTcGFuKGBIVFRQICR7cmVxdWVzdC5tZXRob2R9YCwgeyB0cmFjaW5nT3B0aW9uczogcmVxdWVzdC50cmFjaW5nT3B0aW9ucyB9LCB7XG4gICAgICAgICAgICBzcGFuS2luZDogXCJjbGllbnRcIixcbiAgICAgICAgICAgIHNwYW5BdHRyaWJ1dGVzLFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gSWYgdGhlIHNwYW4gaXMgbm90IHJlY29yZGluZywgZG9uJ3QgZG8gYW55IG1vcmUgd29yay5cbiAgICAgICAgaWYgKCFzcGFuLmlzUmVjb3JkaW5nKCkpIHtcbiAgICAgICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIC8vIHNldCBoZWFkZXJzXG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB0cmFjaW5nQ2xpZW50LmNyZWF0ZVJlcXVlc3RIZWFkZXJzKHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLnRyYWNpbmdDb250ZXh0KTtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoaGVhZGVycykpIHtcbiAgICAgICAgICAgIHJlcXVlc3QuaGVhZGVycy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgc3BhbiwgdHJhY2luZ0NvbnRleHQ6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLnRyYWNpbmdDb250ZXh0IH07XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIGxvZ19qc18xLmxvZ2dlci53YXJuaW5nKGBTa2lwcGluZyBjcmVhdGluZyBhIHRyYWNpbmcgc3BhbiBkdWUgdG8gYW4gZXJyb3I6ICR7KDAsIGNvcmVfdXRpbF8xLmdldEVycm9yTWVzc2FnZSkoZSl9YCk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufVxuZnVuY3Rpb24gdHJ5UHJvY2Vzc0Vycm9yKHNwYW4sIGVycm9yKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgc3Bhbi5zZXRTdGF0dXMoe1xuICAgICAgICAgICAgc3RhdHVzOiBcImVycm9yXCIsXG4gICAgICAgICAgICBlcnJvcjogKDAsIGNvcmVfdXRpbF8xLmlzRXJyb3IpKGVycm9yKSA/IGVycm9yIDogdW5kZWZpbmVkLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCgwLCByZXN0RXJyb3JfanNfMS5pc1Jlc3RFcnJvcikoZXJyb3IpICYmIGVycm9yLnN0YXR1c0NvZGUpIHtcbiAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKFwiaHR0cC5zdGF0dXNfY29kZVwiLCBlcnJvci5zdGF0dXNDb2RlKTtcbiAgICAgICAgfVxuICAgICAgICBzcGFuLmVuZCgpO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBsb2dfanNfMS5sb2dnZXIud2FybmluZyhgU2tpcHBpbmcgdHJhY2luZyBzcGFuIHByb2Nlc3NpbmcgZHVlIHRvIGFuIGVycm9yOiAkeygwLCBjb3JlX3V0aWxfMS5nZXRFcnJvck1lc3NhZ2UpKGUpfWApO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHRyeVByb2Nlc3NSZXNwb25zZShzcGFuLCByZXNwb25zZSkge1xuICAgIHRyeSB7XG4gICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKFwiaHR0cC5zdGF0dXNfY29kZVwiLCByZXNwb25zZS5zdGF0dXMpO1xuICAgICAgICBjb25zdCBzZXJ2aWNlUmVxdWVzdElkID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoXCJ4LW1zLXJlcXVlc3QtaWRcIik7XG4gICAgICAgIGlmIChzZXJ2aWNlUmVxdWVzdElkKSB7XG4gICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShcInNlcnZpY2VSZXF1ZXN0SWRcIiwgc2VydmljZVJlcXVlc3RJZCk7XG4gICAgICAgIH1cbiAgICAgICAgc3Bhbi5zZXRTdGF0dXMoe1xuICAgICAgICAgICAgc3RhdHVzOiBcInN1Y2Nlc3NcIixcbiAgICAgICAgfSk7XG4gICAgICAgIHNwYW4uZW5kKCk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIGxvZ19qc18xLmxvZ2dlci53YXJuaW5nKGBTa2lwcGluZyB0cmFjaW5nIHNwYW4gcHJvY2Vzc2luZyBkdWUgdG8gYW4gZXJyb3I6ICR7KDAsIGNvcmVfdXRpbF8xLmdldEVycm9yTWVzc2FnZSkoZSl9YCk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dHJhY2luZ1BvbGljeS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNyZWF0ZVBpcGVsaW5lRnJvbU9wdGlvbnMgPSBjcmVhdGVQaXBlbGluZUZyb21PcHRpb25zO1xuY29uc3QgbG9nUG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9wb2xpY2llcy9sb2dQb2xpY3kuanNcIik7XG5jb25zdCBwaXBlbGluZV9qc18xID0gcmVxdWlyZShcIi4vcGlwZWxpbmUuanNcIik7XG5jb25zdCByZWRpcmVjdFBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvcmVkaXJlY3RQb2xpY3kuanNcIik7XG5jb25zdCB1c2VyQWdlbnRQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL3VzZXJBZ2VudFBvbGljeS5qc1wiKTtcbmNvbnN0IG11bHRpcGFydFBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvbXVsdGlwYXJ0UG9saWN5LmpzXCIpO1xuY29uc3QgZGVjb21wcmVzc1Jlc3BvbnNlUG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9wb2xpY2llcy9kZWNvbXByZXNzUmVzcG9uc2VQb2xpY3kuanNcIik7XG5jb25zdCBkZWZhdWx0UmV0cnlQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL2RlZmF1bHRSZXRyeVBvbGljeS5qc1wiKTtcbmNvbnN0IGZvcm1EYXRhUG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9wb2xpY2llcy9mb3JtRGF0YVBvbGljeS5qc1wiKTtcbmNvbnN0IGNvcmVfdXRpbF8xID0gcmVxdWlyZShcIkBhenVyZS9jb3JlLXV0aWxcIik7XG5jb25zdCBwcm94eVBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvcHJveHlQb2xpY3kuanNcIik7XG5jb25zdCBzZXRDbGllbnRSZXF1ZXN0SWRQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL3NldENsaWVudFJlcXVlc3RJZFBvbGljeS5qc1wiKTtcbmNvbnN0IHRsc1BvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvdGxzUG9saWN5LmpzXCIpO1xuY29uc3QgdHJhY2luZ1BvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvdHJhY2luZ1BvbGljeS5qc1wiKTtcbi8qKlxuICogQ3JlYXRlIGEgbmV3IHBpcGVsaW5lIHdpdGggYSBkZWZhdWx0IHNldCBvZiBjdXN0b21pemFibGUgcG9saWNpZXMuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gY29uZmlndXJlIGEgY3VzdG9tIHBpcGVsaW5lLlxuICovXG5mdW5jdGlvbiBjcmVhdGVQaXBlbGluZUZyb21PcHRpb25zKG9wdGlvbnMpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3QgcGlwZWxpbmUgPSAoMCwgcGlwZWxpbmVfanNfMS5jcmVhdGVFbXB0eVBpcGVsaW5lKSgpO1xuICAgIGlmIChjb3JlX3V0aWxfMS5pc05vZGVMaWtlKSB7XG4gICAgICAgIGlmIChvcHRpb25zLnRsc09wdGlvbnMpIHtcbiAgICAgICAgICAgIHBpcGVsaW5lLmFkZFBvbGljeSgoMCwgdGxzUG9saWN5X2pzXzEudGxzUG9saWN5KShvcHRpb25zLnRsc09wdGlvbnMpKTtcbiAgICAgICAgfVxuICAgICAgICBwaXBlbGluZS5hZGRQb2xpY3koKDAsIHByb3h5UG9saWN5X2pzXzEucHJveHlQb2xpY3kpKG9wdGlvbnMucHJveHlPcHRpb25zKSk7XG4gICAgICAgIHBpcGVsaW5lLmFkZFBvbGljeSgoMCwgZGVjb21wcmVzc1Jlc3BvbnNlUG9saWN5X2pzXzEuZGVjb21wcmVzc1Jlc3BvbnNlUG9saWN5KSgpKTtcbiAgICB9XG4gICAgcGlwZWxpbmUuYWRkUG9saWN5KCgwLCBmb3JtRGF0YVBvbGljeV9qc18xLmZvcm1EYXRhUG9saWN5KSgpLCB7IGJlZm9yZVBvbGljaWVzOiBbbXVsdGlwYXJ0UG9saWN5X2pzXzEubXVsdGlwYXJ0UG9saWN5TmFtZV0gfSk7XG4gICAgcGlwZWxpbmUuYWRkUG9saWN5KCgwLCB1c2VyQWdlbnRQb2xpY3lfanNfMS51c2VyQWdlbnRQb2xpY3kpKG9wdGlvbnMudXNlckFnZW50T3B0aW9ucykpO1xuICAgIHBpcGVsaW5lLmFkZFBvbGljeSgoMCwgc2V0Q2xpZW50UmVxdWVzdElkUG9saWN5X2pzXzEuc2V0Q2xpZW50UmVxdWVzdElkUG9saWN5KSgoX2EgPSBvcHRpb25zLnRlbGVtZXRyeU9wdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jbGllbnRSZXF1ZXN0SWRIZWFkZXJOYW1lKSk7XG4gICAgLy8gVGhlIG11bHRpcGFydCBwb2xpY3kgaXMgYWRkZWQgYWZ0ZXIgcG9saWNpZXMgd2l0aCBubyBwaGFzZSwgc28gdGhhdFxuICAgIC8vIHBvbGljaWVzIGNhbiBiZSBhZGRlZCBiZXR3ZWVuIGl0IGFuZCBmb3JtRGF0YVBvbGljeSB0byBtb2RpZnlcbiAgICAvLyBwcm9wZXJ0aWVzIChlLmcuLCBtYWtpbmcgdGhlIGJvdW5kYXJ5IGNvbnN0YW50IGluIHJlY29yZGVkIHRlc3RzKS5cbiAgICBwaXBlbGluZS5hZGRQb2xpY3koKDAsIG11bHRpcGFydFBvbGljeV9qc18xLm11bHRpcGFydFBvbGljeSkoKSwgeyBhZnRlclBoYXNlOiBcIkRlc2VyaWFsaXplXCIgfSk7XG4gICAgcGlwZWxpbmUuYWRkUG9saWN5KCgwLCBkZWZhdWx0UmV0cnlQb2xpY3lfanNfMS5kZWZhdWx0UmV0cnlQb2xpY3kpKG9wdGlvbnMucmV0cnlPcHRpb25zKSwgeyBwaGFzZTogXCJSZXRyeVwiIH0pO1xuICAgIHBpcGVsaW5lLmFkZFBvbGljeSgoMCwgdHJhY2luZ1BvbGljeV9qc18xLnRyYWNpbmdQb2xpY3kpKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy51c2VyQWdlbnRPcHRpb25zKSwgb3B0aW9ucy5sb2dnaW5nT3B0aW9ucykpLCB7XG4gICAgICAgIGFmdGVyUGhhc2U6IFwiUmV0cnlcIixcbiAgICB9KTtcbiAgICBpZiAoY29yZV91dGlsXzEuaXNOb2RlTGlrZSkge1xuICAgICAgICAvLyBCb3RoIFhIUiBhbmQgRmV0Y2ggZXhwZWN0IHRvIGhhbmRsZSByZWRpcmVjdHMgYXV0b21hdGljYWxseSxcbiAgICAgICAgLy8gc28gb25seSBpbmNsdWRlIHRoaXMgcG9saWN5IHdoZW4gd2UncmUgaW4gTm9kZS5cbiAgICAgICAgcGlwZWxpbmUuYWRkUG9saWN5KCgwLCByZWRpcmVjdFBvbGljeV9qc18xLnJlZGlyZWN0UG9saWN5KShvcHRpb25zLnJlZGlyZWN0T3B0aW9ucyksIHsgYWZ0ZXJQaGFzZTogXCJSZXRyeVwiIH0pO1xuICAgIH1cbiAgICBwaXBlbGluZS5hZGRQb2xpY3koKDAsIGxvZ1BvbGljeV9qc18xLmxvZ1BvbGljeSkob3B0aW9ucy5sb2dnaW5nT3B0aW9ucyksIHsgYWZ0ZXJQaGFzZTogXCJTaWduXCIgfSk7XG4gICAgcmV0dXJuIHBpcGVsaW5lO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y3JlYXRlUGlwZWxpbmVGcm9tT3B0aW9ucy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldEJvZHlMZW5ndGggPSBnZXRCb2R5TGVuZ3RoO1xuZXhwb3J0cy5jcmVhdGVOb2RlSHR0cENsaWVudCA9IGNyZWF0ZU5vZGVIdHRwQ2xpZW50O1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbmNvbnN0IGh0dHAgPSB0c2xpYl8xLl9faW1wb3J0U3RhcihyZXF1aXJlKFwibm9kZTpodHRwXCIpKTtcbmNvbnN0IGh0dHBzID0gdHNsaWJfMS5fX2ltcG9ydFN0YXIocmVxdWlyZShcIm5vZGU6aHR0cHNcIikpO1xuY29uc3QgemxpYiA9IHRzbGliXzEuX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJub2RlOnpsaWJcIikpO1xuY29uc3Qgbm9kZV9zdHJlYW1fMSA9IHJlcXVpcmUoXCJub2RlOnN0cmVhbVwiKTtcbmNvbnN0IGFib3J0X2NvbnRyb2xsZXJfMSA9IHJlcXVpcmUoXCJAYXp1cmUvYWJvcnQtY29udHJvbGxlclwiKTtcbmNvbnN0IGh0dHBIZWFkZXJzX2pzXzEgPSByZXF1aXJlKFwiLi9odHRwSGVhZGVycy5qc1wiKTtcbmNvbnN0IHJlc3RFcnJvcl9qc18xID0gcmVxdWlyZShcIi4vcmVzdEVycm9yLmpzXCIpO1xuY29uc3QgbG9nX2pzXzEgPSByZXF1aXJlKFwiLi9sb2cuanNcIik7XG5jb25zdCBERUZBVUxUX1RMU19TRVRUSU5HUyA9IHt9O1xuZnVuY3Rpb24gaXNSZWFkYWJsZVN0cmVhbShib2R5KSB7XG4gICAgcmV0dXJuIGJvZHkgJiYgdHlwZW9mIGJvZHkucGlwZSA9PT0gXCJmdW5jdGlvblwiO1xufVxuZnVuY3Rpb24gaXNTdHJlYW1Db21wbGV0ZShzdHJlYW0pIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgY29uc3QgaGFuZGxlciA9ICgpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcihcImNsb3NlXCIsIGhhbmRsZXIpO1xuICAgICAgICAgICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKFwiZW5kXCIsIGhhbmRsZXIpO1xuICAgICAgICAgICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKFwiZXJyb3JcIiwgaGFuZGxlcik7XG4gICAgICAgIH07XG4gICAgICAgIHN0cmVhbS5vbihcImNsb3NlXCIsIGhhbmRsZXIpO1xuICAgICAgICBzdHJlYW0ub24oXCJlbmRcIiwgaGFuZGxlcik7XG4gICAgICAgIHN0cmVhbS5vbihcImVycm9yXCIsIGhhbmRsZXIpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gaXNBcnJheUJ1ZmZlcihib2R5KSB7XG4gICAgcmV0dXJuIGJvZHkgJiYgdHlwZW9mIGJvZHkuYnl0ZUxlbmd0aCA9PT0gXCJudW1iZXJcIjtcbn1cbmNsYXNzIFJlcG9ydFRyYW5zZm9ybSBleHRlbmRzIG5vZGVfc3RyZWFtXzEuVHJhbnNmb3JtIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1mdW5jdGlvbi10eXBlXG4gICAgX3RyYW5zZm9ybShjaHVuaywgX2VuY29kaW5nLCBjYWxsYmFjaykge1xuICAgICAgICB0aGlzLnB1c2goY2h1bmspO1xuICAgICAgICB0aGlzLmxvYWRlZEJ5dGVzICs9IGNodW5rLmxlbmd0aDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3NDYWxsYmFjayh7IGxvYWRlZEJ5dGVzOiB0aGlzLmxvYWRlZEJ5dGVzIH0pO1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY2FsbGJhY2soZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3RydWN0b3IocHJvZ3Jlc3NDYWxsYmFjaykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmxvYWRlZEJ5dGVzID0gMDtcbiAgICAgICAgdGhpcy5wcm9ncmVzc0NhbGxiYWNrID0gcHJvZ3Jlc3NDYWxsYmFjaztcbiAgICB9XG59XG4vKipcbiAqIEEgSHR0cENsaWVudCBpbXBsZW1lbnRhdGlvbiB0aGF0IHVzZXMgTm9kZSdzIFwiaHR0cHNcIiBtb2R1bGUgdG8gc2VuZCBIVFRQUyByZXF1ZXN0cy5cbiAqIEBpbnRlcm5hbFxuICovXG5jbGFzcyBOb2RlSHR0cENsaWVudCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuY2FjaGVkSHR0cHNBZ2VudHMgPSBuZXcgV2Vha01hcCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBNYWtlcyBhIHJlcXVlc3Qgb3ZlciBhbiB1bmRlcmx5aW5nIHRyYW5zcG9ydCBsYXllciBhbmQgcmV0dXJucyB0aGUgcmVzcG9uc2UuXG4gICAgICogQHBhcmFtIHJlcXVlc3QgLSBUaGUgcmVxdWVzdCB0byBiZSBtYWRlLlxuICAgICAqL1xuICAgIGFzeW5jIHNlbmRSZXF1ZXN0KHJlcXVlc3QpIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgIGNvbnN0IGFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICAgICAgbGV0IGFib3J0TGlzdGVuZXI7XG4gICAgICAgIGlmIChyZXF1ZXN0LmFib3J0U2lnbmFsKSB7XG4gICAgICAgICAgICBpZiAocmVxdWVzdC5hYm9ydFNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGFib3J0X2NvbnRyb2xsZXJfMS5BYm9ydEVycm9yKFwiVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhYm9ydExpc3RlbmVyID0gKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiYWJvcnRcIikge1xuICAgICAgICAgICAgICAgICAgICBhYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVxdWVzdC5hYm9ydFNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgYWJvcnRMaXN0ZW5lcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlcXVlc3QudGltZW91dCA+IDApIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGFib3J0Q29udHJvbGxlci5hYm9ydCgpO1xuICAgICAgICAgICAgfSwgcmVxdWVzdC50aW1lb3V0KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhY2NlcHRFbmNvZGluZyA9IHJlcXVlc3QuaGVhZGVycy5nZXQoXCJBY2NlcHQtRW5jb2RpbmdcIik7XG4gICAgICAgIGNvbnN0IHNob3VsZERlY29tcHJlc3MgPSAoYWNjZXB0RW5jb2RpbmcgPT09IG51bGwgfHwgYWNjZXB0RW5jb2RpbmcgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGFjY2VwdEVuY29kaW5nLmluY2x1ZGVzKFwiZ3ppcFwiKSkgfHwgKGFjY2VwdEVuY29kaW5nID09PSBudWxsIHx8IGFjY2VwdEVuY29kaW5nID09PSB2b2lkIDAgPyB2b2lkIDAgOiBhY2NlcHRFbmNvZGluZy5pbmNsdWRlcyhcImRlZmxhdGVcIikpO1xuICAgICAgICBsZXQgYm9keSA9IHR5cGVvZiByZXF1ZXN0LmJvZHkgPT09IFwiZnVuY3Rpb25cIiA/IHJlcXVlc3QuYm9keSgpIDogcmVxdWVzdC5ib2R5O1xuICAgICAgICBpZiAoYm9keSAmJiAhcmVxdWVzdC5oZWFkZXJzLmhhcyhcIkNvbnRlbnQtTGVuZ3RoXCIpKSB7XG4gICAgICAgICAgICBjb25zdCBib2R5TGVuZ3RoID0gZ2V0Qm9keUxlbmd0aChib2R5KTtcbiAgICAgICAgICAgIGlmIChib2R5TGVuZ3RoICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdC5oZWFkZXJzLnNldChcIkNvbnRlbnQtTGVuZ3RoXCIsIGJvZHlMZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZVN0cmVhbTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChib2R5ICYmIHJlcXVlc3Qub25VcGxvYWRQcm9ncmVzcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9uVXBsb2FkUHJvZ3Jlc3MgPSByZXF1ZXN0Lm9uVXBsb2FkUHJvZ3Jlc3M7XG4gICAgICAgICAgICAgICAgY29uc3QgdXBsb2FkUmVwb3J0U3RyZWFtID0gbmV3IFJlcG9ydFRyYW5zZm9ybShvblVwbG9hZFByb2dyZXNzKTtcbiAgICAgICAgICAgICAgICB1cGxvYWRSZXBvcnRTdHJlYW0ub24oXCJlcnJvclwiLCAoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsb2dfanNfMS5sb2dnZXIuZXJyb3IoXCJFcnJvciBpbiB1cGxvYWQgcHJvZ3Jlc3NcIiwgZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKGlzUmVhZGFibGVTdHJlYW0oYm9keSkpIHtcbiAgICAgICAgICAgICAgICAgICAgYm9keS5waXBlKHVwbG9hZFJlcG9ydFN0cmVhbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB1cGxvYWRSZXBvcnRTdHJlYW0uZW5kKGJvZHkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBib2R5ID0gdXBsb2FkUmVwb3J0U3RyZWFtO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5tYWtlUmVxdWVzdChyZXF1ZXN0LCBhYm9ydENvbnRyb2xsZXIsIGJvZHkpO1xuICAgICAgICAgICAgY29uc3QgaGVhZGVycyA9IGdldFJlc3BvbnNlSGVhZGVycyhyZXMpO1xuICAgICAgICAgICAgY29uc3Qgc3RhdHVzID0gKF9hID0gcmVzLnN0YXR1c0NvZGUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IDA7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IHtcbiAgICAgICAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICAgICAgICByZXF1ZXN0LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vIFJlc3BvbnNlcyB0byBIRUFEIG11c3Qgbm90IGhhdmUgYSBib2R5LlxuICAgICAgICAgICAgLy8gSWYgdGhleSBkbyByZXR1cm4gYSBib2R5LCB0aGF0IGJvZHkgbXVzdCBiZSBpZ25vcmVkLlxuICAgICAgICAgICAgaWYgKHJlcXVlc3QubWV0aG9kID09PSBcIkhFQURcIikge1xuICAgICAgICAgICAgICAgIC8vIGNhbGwgcmVzdW1lKCkgYW5kIG5vdCBkZXN0cm95KCkgdG8gYXZvaWQgY2xvc2luZyB0aGUgc29ja2V0XG4gICAgICAgICAgICAgICAgLy8gYW5kIGxvc2luZyBrZWVwIGFsaXZlXG4gICAgICAgICAgICAgICAgcmVzLnJlc3VtZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3BvbnNlU3RyZWFtID0gc2hvdWxkRGVjb21wcmVzcyA/IGdldERlY29kZWRSZXNwb25zZVN0cmVhbShyZXMsIGhlYWRlcnMpIDogcmVzO1xuICAgICAgICAgICAgY29uc3Qgb25Eb3dubG9hZFByb2dyZXNzID0gcmVxdWVzdC5vbkRvd25sb2FkUHJvZ3Jlc3M7XG4gICAgICAgICAgICBpZiAob25Eb3dubG9hZFByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZG93bmxvYWRSZXBvcnRTdHJlYW0gPSBuZXcgUmVwb3J0VHJhbnNmb3JtKG9uRG93bmxvYWRQcm9ncmVzcyk7XG4gICAgICAgICAgICAgICAgZG93bmxvYWRSZXBvcnRTdHJlYW0ub24oXCJlcnJvclwiLCAoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsb2dfanNfMS5sb2dnZXIuZXJyb3IoXCJFcnJvciBpbiBkb3dubG9hZCBwcm9ncmVzc1wiLCBlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXNwb25zZVN0cmVhbS5waXBlKGRvd25sb2FkUmVwb3J0U3RyZWFtKTtcbiAgICAgICAgICAgICAgICByZXNwb25zZVN0cmVhbSA9IGRvd25sb2FkUmVwb3J0U3RyZWFtO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgLy8gVmFsdWUgb2YgUE9TSVRJVkVfSU5GSU5JVFkgaW4gc3RyZWFtUmVzcG9uc2VTdGF0dXNDb2RlcyBpcyBjb25zaWRlcmVkIGFzIGFueSBzdGF0dXMgY29kZVxuICAgICAgICAgICAgKChfYiA9IHJlcXVlc3Quc3RyZWFtUmVzcG9uc2VTdGF0dXNDb2RlcykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmhhcyhOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpKSB8fFxuICAgICAgICAgICAgICAgICgoX2MgPSByZXF1ZXN0LnN0cmVhbVJlc3BvbnNlU3RhdHVzQ29kZXMpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5oYXMocmVzcG9uc2Uuc3RhdHVzKSkpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZS5yZWFkYWJsZVN0cmVhbUJvZHkgPSByZXNwb25zZVN0cmVhbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlLmJvZHlBc1RleHQgPSBhd2FpdCBzdHJlYW1Ub1RleHQocmVzcG9uc2VTdHJlYW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgLy8gY2xlYW4gdXAgZXZlbnQgbGlzdGVuZXJcbiAgICAgICAgICAgIGlmIChyZXF1ZXN0LmFib3J0U2lnbmFsICYmIGFib3J0TGlzdGVuZXIpIHtcbiAgICAgICAgICAgICAgICBsZXQgdXBsb2FkU3RyZWFtRG9uZSA9IFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIGlmIChpc1JlYWRhYmxlU3RyZWFtKGJvZHkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHVwbG9hZFN0cmVhbURvbmUgPSBpc1N0cmVhbUNvbXBsZXRlKGJvZHkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgZG93bmxvYWRTdHJlYW1Eb25lID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgaWYgKGlzUmVhZGFibGVTdHJlYW0ocmVzcG9uc2VTdHJlYW0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvd25sb2FkU3RyZWFtRG9uZSA9IGlzU3RyZWFtQ29tcGxldGUocmVzcG9uc2VTdHJlYW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBQcm9taXNlLmFsbChbdXBsb2FkU3RyZWFtRG9uZSwgZG93bmxvYWRTdHJlYW1Eb25lXSlcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcm9taXNlL2Fsd2F5cy1yZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGFib3J0TGlzdGVuZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIChfYSA9IHJlcXVlc3QuYWJvcnRTaWduYWwpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgYWJvcnRMaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbG9nX2pzXzEubG9nZ2VyLndhcm5pbmcoXCJFcnJvciB3aGVuIGNsZWFuaW5nIHVwIGFib3J0TGlzdGVuZXIgb24gaHR0cFJlcXVlc3RcIiwgZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgbWFrZVJlcXVlc3QocmVxdWVzdCwgYWJvcnRDb250cm9sbGVyLCBib2R5KSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgdXJsID0gbmV3IFVSTChyZXF1ZXN0LnVybCk7XG4gICAgICAgIGNvbnN0IGlzSW5zZWN1cmUgPSB1cmwucHJvdG9jb2wgIT09IFwiaHR0cHM6XCI7XG4gICAgICAgIGlmIChpc0luc2VjdXJlICYmICFyZXF1ZXN0LmFsbG93SW5zZWN1cmVDb25uZWN0aW9uKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjb25uZWN0IHRvICR7cmVxdWVzdC51cmx9IHdoaWxlIGFsbG93SW5zZWN1cmVDb25uZWN0aW9uIGlzIGZhbHNlLmApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFnZW50ID0gKF9hID0gcmVxdWVzdC5hZ2VudCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdGhpcy5nZXRPckNyZWF0ZUFnZW50KHJlcXVlc3QsIGlzSW5zZWN1cmUpO1xuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgYWdlbnQsXG4gICAgICAgICAgICBob3N0bmFtZTogdXJsLmhvc3RuYW1lLFxuICAgICAgICAgICAgcGF0aDogYCR7dXJsLnBhdGhuYW1lfSR7dXJsLnNlYXJjaH1gLFxuICAgICAgICAgICAgcG9ydDogdXJsLnBvcnQsXG4gICAgICAgICAgICBtZXRob2Q6IHJlcXVlc3QubWV0aG9kLFxuICAgICAgICAgICAgaGVhZGVyczogcmVxdWVzdC5oZWFkZXJzLnRvSlNPTih7IHByZXNlcnZlQ2FzZTogdHJ1ZSB9KSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlcSA9IGlzSW5zZWN1cmUgPyBodHRwLnJlcXVlc3Qob3B0aW9ucywgcmVzb2x2ZSkgOiBodHRwcy5yZXF1ZXN0KG9wdGlvbnMsIHJlc29sdmUpO1xuICAgICAgICAgICAgcmVxLm9uY2UoXCJlcnJvclwiLCAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgcmVzdEVycm9yX2pzXzEuUmVzdEVycm9yKGVyci5tZXNzYWdlLCB7IGNvZGU6IChfYSA9IGVyci5jb2RlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiByZXN0RXJyb3JfanNfMS5SZXN0RXJyb3IuUkVRVUVTVF9TRU5EX0VSUk9SLCByZXF1ZXN0IH0pKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYWJvcnRDb250cm9sbGVyLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFib3J0RXJyb3IgPSBuZXcgYWJvcnRfY29udHJvbGxlcl8xLkFib3J0RXJyb3IoXCJUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLlwiKTtcbiAgICAgICAgICAgICAgICByZXEuZGVzdHJveShhYm9ydEVycm9yKTtcbiAgICAgICAgICAgICAgICByZWplY3QoYWJvcnRFcnJvcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChib2R5ICYmIGlzUmVhZGFibGVTdHJlYW0oYm9keSkpIHtcbiAgICAgICAgICAgICAgICBib2R5LnBpcGUocmVxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGJvZHkpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGJvZHkgPT09IFwic3RyaW5nXCIgfHwgQnVmZmVyLmlzQnVmZmVyKGJvZHkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcS5lbmQoYm9keSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzQXJyYXlCdWZmZXIoYm9keSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVxLmVuZChBcnJheUJ1ZmZlci5pc1ZpZXcoYm9keSkgPyBCdWZmZXIuZnJvbShib2R5LmJ1ZmZlcikgOiBCdWZmZXIuZnJvbShib2R5KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsb2dfanNfMS5sb2dnZXIuZXJyb3IoXCJVbnJlY29nbml6ZWQgYm9keSB0eXBlXCIsIGJvZHkpO1xuICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IHJlc3RFcnJvcl9qc18xLlJlc3RFcnJvcihcIlVucmVjb2duaXplZCBib2R5IHR5cGVcIikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIHN0cmVhbXMgZG9uJ3QgbGlrZSBcInVuZGVmaW5lZFwiIGJlaW5nIHBhc3NlZCBhcyBkYXRhXG4gICAgICAgICAgICAgICAgcmVxLmVuZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZ2V0T3JDcmVhdGVBZ2VudChyZXF1ZXN0LCBpc0luc2VjdXJlKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgZGlzYWJsZUtlZXBBbGl2ZSA9IHJlcXVlc3QuZGlzYWJsZUtlZXBBbGl2ZTtcbiAgICAgICAgLy8gSGFuZGxlIEluc2VjdXJlIHJlcXVlc3RzIGZpcnN0XG4gICAgICAgIGlmIChpc0luc2VjdXJlKSB7XG4gICAgICAgICAgICBpZiAoZGlzYWJsZUtlZXBBbGl2ZSkge1xuICAgICAgICAgICAgICAgIC8vIGtlZXBBbGl2ZTpmYWxzZSBpcyB0aGUgZGVmYXVsdCBzbyB3ZSBkb24ndCBuZWVkIGEgY3VzdG9tIEFnZW50XG4gICAgICAgICAgICAgICAgcmV0dXJuIGh0dHAuZ2xvYmFsQWdlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuY2FjaGVkSHR0cEFnZW50KSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gY2FjaGVkIGFnZW50IGNyZWF0ZSBhIG5ldyBvbmUgYW5kIGNhY2hlIGl0LlxuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVkSHR0cEFnZW50ID0gbmV3IGh0dHAuQWdlbnQoeyBrZWVwQWxpdmU6IHRydWUgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYWNoZWRIdHRwQWdlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoZGlzYWJsZUtlZXBBbGl2ZSAmJiAhcmVxdWVzdC50bHNTZXR0aW5ncykge1xuICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhlcmUgYXJlIG5vIHRsc1NldHRpbmdzIGFuZCBrZWVwQWxpdmUgaXMgZmFsc2VcbiAgICAgICAgICAgICAgICAvLyB3ZSBkb24ndCBuZWVkIGEgY3VzdG9tIGFnZW50XG4gICAgICAgICAgICAgICAgcmV0dXJuIGh0dHBzLmdsb2JhbEFnZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gV2UgdXNlIHRoZSB0bHNTZXR0aW5ncyB0byBpbmRleCBjYWNoZWQgY2xpZW50c1xuICAgICAgICAgICAgY29uc3QgdGxzU2V0dGluZ3MgPSAoX2EgPSByZXF1ZXN0LnRsc1NldHRpbmdzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBERUZBVUxUX1RMU19TRVRUSU5HUztcbiAgICAgICAgICAgIC8vIEdldCB0aGUgY2FjaGVkIGFnZW50IG9yIGNyZWF0ZSBhIG5ldyBvbmUgd2l0aCB0aGVcbiAgICAgICAgICAgIC8vIHByb3ZpZGVkIHZhbHVlcyBmb3Iga2VlcEFsaXZlIGFuZCB0bHNTZXR0aW5nc1xuICAgICAgICAgICAgbGV0IGFnZW50ID0gdGhpcy5jYWNoZWRIdHRwc0FnZW50cy5nZXQodGxzU2V0dGluZ3MpO1xuICAgICAgICAgICAgaWYgKGFnZW50ICYmIGFnZW50Lm9wdGlvbnMua2VlcEFsaXZlID09PSAhZGlzYWJsZUtlZXBBbGl2ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhZ2VudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxvZ19qc18xLmxvZ2dlci5pbmZvKFwiTm8gY2FjaGVkIFRMUyBBZ2VudCBleGlzdCwgY3JlYXRpbmcgYSBuZXcgQWdlbnRcIik7XG4gICAgICAgICAgICBhZ2VudCA9IG5ldyBodHRwcy5BZ2VudChPYmplY3QuYXNzaWduKHsgXG4gICAgICAgICAgICAgICAgLy8ga2VlcEFsaXZlIGlzIHRydWUgaWYgZGlzYWJsZUtlZXBBbGl2ZSBpcyBmYWxzZS5cbiAgICAgICAgICAgICAgICBrZWVwQWxpdmU6ICFkaXNhYmxlS2VlcEFsaXZlIH0sIHRsc1NldHRpbmdzKSk7XG4gICAgICAgICAgICB0aGlzLmNhY2hlZEh0dHBzQWdlbnRzLnNldCh0bHNTZXR0aW5ncywgYWdlbnQpO1xuICAgICAgICAgICAgcmV0dXJuIGFnZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0UmVzcG9uc2VIZWFkZXJzKHJlcykge1xuICAgIGNvbnN0IGhlYWRlcnMgPSAoMCwgaHR0cEhlYWRlcnNfanNfMS5jcmVhdGVIdHRwSGVhZGVycykoKTtcbiAgICBmb3IgKGNvbnN0IGhlYWRlciBvZiBPYmplY3Qua2V5cyhyZXMuaGVhZGVycykpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSByZXMuaGVhZGVyc1toZWFkZXJdO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgaGVhZGVycy5zZXQoaGVhZGVyLCB2YWx1ZVswXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIGhlYWRlcnMuc2V0KGhlYWRlciwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBoZWFkZXJzO1xufVxuZnVuY3Rpb24gZ2V0RGVjb2RlZFJlc3BvbnNlU3RyZWFtKHN0cmVhbSwgaGVhZGVycykge1xuICAgIGNvbnN0IGNvbnRlbnRFbmNvZGluZyA9IGhlYWRlcnMuZ2V0KFwiQ29udGVudC1FbmNvZGluZ1wiKTtcbiAgICBpZiAoY29udGVudEVuY29kaW5nID09PSBcImd6aXBcIikge1xuICAgICAgICBjb25zdCB1bnppcCA9IHpsaWIuY3JlYXRlR3VuemlwKCk7XG4gICAgICAgIHN0cmVhbS5waXBlKHVuemlwKTtcbiAgICAgICAgcmV0dXJuIHVuemlwO1xuICAgIH1cbiAgICBlbHNlIGlmIChjb250ZW50RW5jb2RpbmcgPT09IFwiZGVmbGF0ZVwiKSB7XG4gICAgICAgIGNvbnN0IGluZmxhdGUgPSB6bGliLmNyZWF0ZUluZmxhdGUoKTtcbiAgICAgICAgc3RyZWFtLnBpcGUoaW5mbGF0ZSk7XG4gICAgICAgIHJldHVybiBpbmZsYXRlO1xuICAgIH1cbiAgICByZXR1cm4gc3RyZWFtO1xufVxuZnVuY3Rpb24gc3RyZWFtVG9UZXh0KHN0cmVhbSkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IFtdO1xuICAgICAgICBzdHJlYW0ub24oXCJkYXRhXCIsIChjaHVuaykgPT4ge1xuICAgICAgICAgICAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihjaHVuaykpIHtcbiAgICAgICAgICAgICAgICBidWZmZXIucHVzaChjaHVuayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBidWZmZXIucHVzaChCdWZmZXIuZnJvbShjaHVuaykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgc3RyZWFtLm9uKFwiZW5kXCIsICgpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUoQnVmZmVyLmNvbmNhdChidWZmZXIpLnRvU3RyaW5nKFwidXRmOFwiKSk7XG4gICAgICAgIH0pO1xuICAgICAgICBzdHJlYW0ub24oXCJlcnJvclwiLCAoZSkgPT4ge1xuICAgICAgICAgICAgaWYgKGUgJiYgKGUgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZS5uYW1lKSA9PT0gXCJBYm9ydEVycm9yXCIpIHtcbiAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IHJlc3RFcnJvcl9qc18xLlJlc3RFcnJvcihgRXJyb3IgcmVhZGluZyByZXNwb25zZSBhcyB0ZXh0OiAke2UubWVzc2FnZX1gLCB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IHJlc3RFcnJvcl9qc18xLlJlc3RFcnJvci5QQVJTRV9FUlJPUixcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gZ2V0Qm9keUxlbmd0aChib2R5KSB7XG4gICAgaWYgKCFib2R5KSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICBlbHNlIGlmIChCdWZmZXIuaXNCdWZmZXIoYm9keSkpIHtcbiAgICAgICAgcmV0dXJuIGJvZHkubGVuZ3RoO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc1JlYWRhYmxlU3RyZWFtKGJvZHkpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc0FycmF5QnVmZmVyKGJvZHkpKSB7XG4gICAgICAgIHJldHVybiBib2R5LmJ5dGVMZW5ndGg7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBib2R5ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShib2R5KS5sZW5ndGg7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59XG4vKipcbiAqIENyZWF0ZSBhIG5ldyBIdHRwQ2xpZW50IGluc3RhbmNlIGZvciB0aGUgTm9kZUpTIGVudmlyb25tZW50LlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZU5vZGVIdHRwQ2xpZW50KCkge1xuICAgIHJldHVybiBuZXcgTm9kZUh0dHBDbGllbnQoKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW5vZGVIdHRwQ2xpZW50LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlRGVmYXVsdEh0dHBDbGllbnQgPSBjcmVhdGVEZWZhdWx0SHR0cENsaWVudDtcbmNvbnN0IG5vZGVIdHRwQ2xpZW50X2pzXzEgPSByZXF1aXJlKFwiLi9ub2RlSHR0cENsaWVudC5qc1wiKTtcbi8qKlxuICogQ3JlYXRlIHRoZSBjb3JyZWN0IEh0dHBDbGllbnQgZm9yIHRoZSBjdXJyZW50IGVudmlyb25tZW50LlxuICovXG5mdW5jdGlvbiBjcmVhdGVEZWZhdWx0SHR0cENsaWVudCgpIHtcbiAgICByZXR1cm4gKDAsIG5vZGVIdHRwQ2xpZW50X2pzXzEuY3JlYXRlTm9kZUh0dHBDbGllbnQpKCk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZWZhdWx0SHR0cENsaWVudC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNyZWF0ZVBpcGVsaW5lUmVxdWVzdCA9IGNyZWF0ZVBpcGVsaW5lUmVxdWVzdDtcbmNvbnN0IGh0dHBIZWFkZXJzX2pzXzEgPSByZXF1aXJlKFwiLi9odHRwSGVhZGVycy5qc1wiKTtcbmNvbnN0IGNvcmVfdXRpbF8xID0gcmVxdWlyZShcIkBhenVyZS9jb3JlLXV0aWxcIik7XG5jbGFzcyBQaXBlbGluZVJlcXVlc3RJbXBsIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2UsIF9mLCBfZztcbiAgICAgICAgdGhpcy51cmwgPSBvcHRpb25zLnVybDtcbiAgICAgICAgdGhpcy5ib2R5ID0gb3B0aW9ucy5ib2R5O1xuICAgICAgICB0aGlzLmhlYWRlcnMgPSAoX2EgPSBvcHRpb25zLmhlYWRlcnMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICgwLCBodHRwSGVhZGVyc19qc18xLmNyZWF0ZUh0dHBIZWFkZXJzKSgpO1xuICAgICAgICB0aGlzLm1ldGhvZCA9IChfYiA9IG9wdGlvbnMubWV0aG9kKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBcIkdFVFwiO1xuICAgICAgICB0aGlzLnRpbWVvdXQgPSAoX2MgPSBvcHRpb25zLnRpbWVvdXQpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IDA7XG4gICAgICAgIHRoaXMubXVsdGlwYXJ0Qm9keSA9IG9wdGlvbnMubXVsdGlwYXJ0Qm9keTtcbiAgICAgICAgdGhpcy5mb3JtRGF0YSA9IG9wdGlvbnMuZm9ybURhdGE7XG4gICAgICAgIHRoaXMuZGlzYWJsZUtlZXBBbGl2ZSA9IChfZCA9IG9wdGlvbnMuZGlzYWJsZUtlZXBBbGl2ZSkgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDogZmFsc2U7XG4gICAgICAgIHRoaXMucHJveHlTZXR0aW5ncyA9IG9wdGlvbnMucHJveHlTZXR0aW5ncztcbiAgICAgICAgdGhpcy5zdHJlYW1SZXNwb25zZVN0YXR1c0NvZGVzID0gb3B0aW9ucy5zdHJlYW1SZXNwb25zZVN0YXR1c0NvZGVzO1xuICAgICAgICB0aGlzLndpdGhDcmVkZW50aWFscyA9IChfZSA9IG9wdGlvbnMud2l0aENyZWRlbnRpYWxzKSAhPT0gbnVsbCAmJiBfZSAhPT0gdm9pZCAwID8gX2UgOiBmYWxzZTtcbiAgICAgICAgdGhpcy5hYm9ydFNpZ25hbCA9IG9wdGlvbnMuYWJvcnRTaWduYWw7XG4gICAgICAgIHRoaXMudHJhY2luZ09wdGlvbnMgPSBvcHRpb25zLnRyYWNpbmdPcHRpb25zO1xuICAgICAgICB0aGlzLm9uVXBsb2FkUHJvZ3Jlc3MgPSBvcHRpb25zLm9uVXBsb2FkUHJvZ3Jlc3M7XG4gICAgICAgIHRoaXMub25Eb3dubG9hZFByb2dyZXNzID0gb3B0aW9ucy5vbkRvd25sb2FkUHJvZ3Jlc3M7XG4gICAgICAgIHRoaXMucmVxdWVzdElkID0gb3B0aW9ucy5yZXF1ZXN0SWQgfHwgKDAsIGNvcmVfdXRpbF8xLnJhbmRvbVVVSUQpKCk7XG4gICAgICAgIHRoaXMuYWxsb3dJbnNlY3VyZUNvbm5lY3Rpb24gPSAoX2YgPSBvcHRpb25zLmFsbG93SW5zZWN1cmVDb25uZWN0aW9uKSAhPT0gbnVsbCAmJiBfZiAhPT0gdm9pZCAwID8gX2YgOiBmYWxzZTtcbiAgICAgICAgdGhpcy5lbmFibGVCcm93c2VyU3RyZWFtcyA9IChfZyA9IG9wdGlvbnMuZW5hYmxlQnJvd3NlclN0cmVhbXMpICE9PSBudWxsICYmIF9nICE9PSB2b2lkIDAgPyBfZyA6IGZhbHNlO1xuICAgIH1cbn1cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBwaXBlbGluZSByZXF1ZXN0IHdpdGggdGhlIGdpdmVuIG9wdGlvbnMuXG4gKiBUaGlzIG1ldGhvZCBpcyB0byBhbGxvdyBmb3IgdGhlIGVhc3kgc2V0dGluZyBvZiBkZWZhdWx0IHZhbHVlcyBhbmQgbm90IHJlcXVpcmVkLlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyB0byBjcmVhdGUgdGhlIHJlcXVlc3Qgd2l0aC5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlUGlwZWxpbmVSZXF1ZXN0KG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IFBpcGVsaW5lUmVxdWVzdEltcGwob3B0aW9ucyk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1waXBlbGluZVJlcXVlc3QuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5leHBvbmVudGlhbFJldHJ5UG9saWN5TmFtZSA9IHZvaWQgMDtcbmV4cG9ydHMuZXhwb25lbnRpYWxSZXRyeVBvbGljeSA9IGV4cG9uZW50aWFsUmV0cnlQb2xpY3k7XG5jb25zdCBleHBvbmVudGlhbFJldHJ5U3RyYXRlZ3lfanNfMSA9IHJlcXVpcmUoXCIuLi9yZXRyeVN0cmF0ZWdpZXMvZXhwb25lbnRpYWxSZXRyeVN0cmF0ZWd5LmpzXCIpO1xuY29uc3QgcmV0cnlQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3JldHJ5UG9saWN5LmpzXCIpO1xuY29uc3QgY29uc3RhbnRzX2pzXzEgPSByZXF1aXJlKFwiLi4vY29uc3RhbnRzLmpzXCIpO1xuLyoqXG4gKiBUaGUgcHJvZ3JhbW1hdGljIGlkZW50aWZpZXIgb2YgdGhlIGV4cG9uZW50aWFsUmV0cnlQb2xpY3kuXG4gKi9cbmV4cG9ydHMuZXhwb25lbnRpYWxSZXRyeVBvbGljeU5hbWUgPSBcImV4cG9uZW50aWFsUmV0cnlQb2xpY3lcIjtcbi8qKlxuICogQSBwb2xpY3kgdGhhdCBhdHRlbXB0cyB0byByZXRyeSByZXF1ZXN0cyB3aGlsZSBpbnRyb2R1Y2luZyBhbiBleHBvbmVudGlhbGx5IGluY3JlYXNpbmcgZGVsYXkuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdGhhdCBjb25maWd1cmUgcmV0cnkgbG9naWMuXG4gKi9cbmZ1bmN0aW9uIGV4cG9uZW50aWFsUmV0cnlQb2xpY3kob3B0aW9ucyA9IHt9KSB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiAoMCwgcmV0cnlQb2xpY3lfanNfMS5yZXRyeVBvbGljeSkoW1xuICAgICAgICAoMCwgZXhwb25lbnRpYWxSZXRyeVN0cmF0ZWd5X2pzXzEuZXhwb25lbnRpYWxSZXRyeVN0cmF0ZWd5KShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMpLCB7IGlnbm9yZVN5c3RlbUVycm9yczogdHJ1ZSB9KSksXG4gICAgXSwge1xuICAgICAgICBtYXhSZXRyaWVzOiAoX2EgPSBvcHRpb25zLm1heFJldHJpZXMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGNvbnN0YW50c19qc18xLkRFRkFVTFRfUkVUUllfUE9MSUNZX0NPVU5ULFxuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXhwb25lbnRpYWxSZXRyeVBvbGljeS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnN5c3RlbUVycm9yUmV0cnlQb2xpY3lOYW1lID0gdm9pZCAwO1xuZXhwb3J0cy5zeXN0ZW1FcnJvclJldHJ5UG9saWN5ID0gc3lzdGVtRXJyb3JSZXRyeVBvbGljeTtcbmNvbnN0IGV4cG9uZW50aWFsUmV0cnlTdHJhdGVneV9qc18xID0gcmVxdWlyZShcIi4uL3JldHJ5U3RyYXRlZ2llcy9leHBvbmVudGlhbFJldHJ5U3RyYXRlZ3kuanNcIik7XG5jb25zdCByZXRyeVBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcmV0cnlQb2xpY3kuanNcIik7XG5jb25zdCBjb25zdGFudHNfanNfMSA9IHJlcXVpcmUoXCIuLi9jb25zdGFudHMuanNcIik7XG4vKipcbiAqIE5hbWUgb2YgdGhlIHtAbGluayBzeXN0ZW1FcnJvclJldHJ5UG9saWN5fVxuICovXG5leHBvcnRzLnN5c3RlbUVycm9yUmV0cnlQb2xpY3lOYW1lID0gXCJzeXN0ZW1FcnJvclJldHJ5UG9saWN5XCI7XG4vKipcbiAqIEEgcmV0cnkgcG9saWN5IHRoYXQgc3BlY2lmaWNhbGx5IHNlZWtzIHRvIGhhbmRsZSBlcnJvcnMgaW4gdGhlXG4gKiB1bmRlcmx5aW5nIHRyYW5zcG9ydCBsYXllciAoZS5nLiBETlMgbG9va3VwIGZhaWx1cmVzKSByYXRoZXIgdGhhblxuICogcmV0cnlhYmxlIGVycm9yIGNvZGVzIGZyb20gdGhlIHNlcnZlciBpdHNlbGYuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdGhhdCBjdXN0b21pemUgdGhlIHBvbGljeS5cbiAqL1xuZnVuY3Rpb24gc3lzdGVtRXJyb3JSZXRyeVBvbGljeShvcHRpb25zID0ge30pIHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogZXhwb3J0cy5zeXN0ZW1FcnJvclJldHJ5UG9saWN5TmFtZSxcbiAgICAgICAgc2VuZFJlcXVlc3Q6ICgwLCByZXRyeVBvbGljeV9qc18xLnJldHJ5UG9saWN5KShbXG4gICAgICAgICAgICAoMCwgZXhwb25lbnRpYWxSZXRyeVN0cmF0ZWd5X2pzXzEuZXhwb25lbnRpYWxSZXRyeVN0cmF0ZWd5KShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMpLCB7IGlnbm9yZUh0dHBTdGF0dXNDb2RlczogdHJ1ZSB9KSksXG4gICAgICAgIF0sIHtcbiAgICAgICAgICAgIG1heFJldHJpZXM6IChfYSA9IG9wdGlvbnMubWF4UmV0cmllcykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogY29uc3RhbnRzX2pzXzEuREVGQVVMVF9SRVRSWV9QT0xJQ1lfQ09VTlQsXG4gICAgICAgIH0pLnNlbmRSZXF1ZXN0LFxuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zeXN0ZW1FcnJvclJldHJ5UG9saWN5LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudGhyb3R0bGluZ1JldHJ5UG9saWN5TmFtZSA9IHZvaWQgMDtcbmV4cG9ydHMudGhyb3R0bGluZ1JldHJ5UG9saWN5ID0gdGhyb3R0bGluZ1JldHJ5UG9saWN5O1xuY29uc3QgdGhyb3R0bGluZ1JldHJ5U3RyYXRlZ3lfanNfMSA9IHJlcXVpcmUoXCIuLi9yZXRyeVN0cmF0ZWdpZXMvdGhyb3R0bGluZ1JldHJ5U3RyYXRlZ3kuanNcIik7XG5jb25zdCByZXRyeVBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcmV0cnlQb2xpY3kuanNcIik7XG5jb25zdCBjb25zdGFudHNfanNfMSA9IHJlcXVpcmUoXCIuLi9jb25zdGFudHMuanNcIik7XG4vKipcbiAqIE5hbWUgb2YgdGhlIHtAbGluayB0aHJvdHRsaW5nUmV0cnlQb2xpY3l9XG4gKi9cbmV4cG9ydHMudGhyb3R0bGluZ1JldHJ5UG9saWN5TmFtZSA9IFwidGhyb3R0bGluZ1JldHJ5UG9saWN5XCI7XG4vKipcbiAqIEEgcG9saWN5IHRoYXQgcmV0cmllcyB3aGVuIHRoZSBzZXJ2ZXIgc2VuZHMgYSA0MjkgcmVzcG9uc2Ugd2l0aCBhIFJldHJ5LUFmdGVyIGhlYWRlci5cbiAqXG4gKiBUbyBsZWFybiBtb3JlLCBwbGVhc2UgcmVmZXIgdG9cbiAqIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL2F6dXJlL2F6dXJlLXJlc291cmNlLW1hbmFnZXIvcmVzb3VyY2UtbWFuYWdlci1yZXF1ZXN0LWxpbWl0cyxcbiAqIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL2F6dXJlL2F6dXJlLXN1YnNjcmlwdGlvbi1zZXJ2aWNlLWxpbWl0cyBhbmRcbiAqIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL2F6dXJlL3ZpcnR1YWwtbWFjaGluZXMvdHJvdWJsZXNob290aW5nL3Ryb3VibGVzaG9vdGluZy10aHJvdHRsaW5nLWVycm9yc1xuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0aGF0IGNvbmZpZ3VyZSByZXRyeSBsb2dpYy5cbiAqL1xuZnVuY3Rpb24gdGhyb3R0bGluZ1JldHJ5UG9saWN5KG9wdGlvbnMgPSB7fSkge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBleHBvcnRzLnRocm90dGxpbmdSZXRyeVBvbGljeU5hbWUsXG4gICAgICAgIHNlbmRSZXF1ZXN0OiAoMCwgcmV0cnlQb2xpY3lfanNfMS5yZXRyeVBvbGljeSkoWygwLCB0aHJvdHRsaW5nUmV0cnlTdHJhdGVneV9qc18xLnRocm90dGxpbmdSZXRyeVN0cmF0ZWd5KSgpXSwge1xuICAgICAgICAgICAgbWF4UmV0cmllczogKF9hID0gb3B0aW9ucy5tYXhSZXRyaWVzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBjb25zdGFudHNfanNfMS5ERUZBVUxUX1JFVFJZX1BPTElDWV9DT1VOVCxcbiAgICAgICAgfSkuc2VuZFJlcXVlc3QsXG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRocm90dGxpbmdSZXRyeVBvbGljeS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkRFRkFVTFRfQ1lDTEVSX09QVElPTlMgPSB2b2lkIDA7XG5leHBvcnRzLmNyZWF0ZVRva2VuQ3ljbGVyID0gY3JlYXRlVG9rZW5DeWNsZXI7XG5jb25zdCBoZWxwZXJzX2pzXzEgPSByZXF1aXJlKFwiLi9oZWxwZXJzLmpzXCIpO1xuLy8gRGVmYXVsdCBvcHRpb25zIGZvciB0aGUgY3ljbGVyIGlmIG5vbmUgYXJlIHByb3ZpZGVkXG5leHBvcnRzLkRFRkFVTFRfQ1lDTEVSX09QVElPTlMgPSB7XG4gICAgZm9yY2VkUmVmcmVzaFdpbmRvd0luTXM6IDEwMDAsIC8vIEZvcmNlIHdhaXRpbmcgZm9yIGEgcmVmcmVzaCAxcyBiZWZvcmUgdGhlIHRva2VuIGV4cGlyZXNcbiAgICByZXRyeUludGVydmFsSW5NczogMzAwMCwgLy8gQWxsb3cgcmVmcmVzaCBhdHRlbXB0cyBldmVyeSAzc1xuICAgIHJlZnJlc2hXaW5kb3dJbk1zOiAxMDAwICogNjAgKiAyLCAvLyBTdGFydCByZWZyZXNoaW5nIDJtIGJlZm9yZSBleHBpcnlcbn07XG4vKipcbiAqIENvbnZlcnRzIGFuIGFuIHVucmVsaWFibGUgYWNjZXNzIHRva2VuIGdldHRlciAod2hpY2ggbWF5IHJlc29sdmUgd2l0aCBudWxsKVxuICogaW50byBhbiBBY2Nlc3NUb2tlbkdldHRlciBieSByZXRyeWluZyB0aGUgdW5yZWxpYWJsZSBnZXR0ZXIgaW4gYSByZWd1bGFyXG4gKiBpbnRlcnZhbC5cbiAqXG4gKiBAcGFyYW0gZ2V0QWNjZXNzVG9rZW4gLSBBIGZ1bmN0aW9uIHRoYXQgcHJvZHVjZXMgYSBwcm9taXNlIG9mIGFuIGFjY2VzcyB0b2tlbiB0aGF0IG1heSBmYWlsIGJ5IHJldHVybmluZyBudWxsLlxuICogQHBhcmFtIHJldHJ5SW50ZXJ2YWxJbk1zIC0gVGhlIHRpbWUgKGluIG1pbGxpc2Vjb25kcykgdG8gd2FpdCBiZXR3ZWVuIHJldHJ5IGF0dGVtcHRzLlxuICogQHBhcmFtIHJlZnJlc2hUaW1lb3V0IC0gVGhlIHRpbWVzdGFtcCBhZnRlciB3aGljaCB0aGUgcmVmcmVzaCBhdHRlbXB0IHdpbGwgZmFpbCwgdGhyb3dpbmcgYW4gZXhjZXB0aW9uLlxuICogQHJldHVybnMgLSBBIHByb21pc2UgdGhhdCwgaWYgaXQgcmVzb2x2ZXMsIHdpbGwgcmVzb2x2ZSB3aXRoIGFuIGFjY2VzcyB0b2tlbi5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gYmVnaW5SZWZyZXNoKGdldEFjY2Vzc1Rva2VuLCByZXRyeUludGVydmFsSW5NcywgcmVmcmVzaFRpbWVvdXQpIHtcbiAgICAvLyBUaGlzIHdyYXBwZXIgaGFuZGxlcyBleGNlcHRpb25zIGdyYWNlZnVsbHkgYXMgbG9uZyBhcyB3ZSBoYXZlbid0IGV4Y2VlZGVkXG4gICAgLy8gdGhlIHRpbWVvdXQuXG4gICAgYXN5bmMgZnVuY3Rpb24gdHJ5R2V0QWNjZXNzVG9rZW4oKSB7XG4gICAgICAgIGlmIChEYXRlLm5vdygpIDwgcmVmcmVzaFRpbWVvdXQpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGdldEFjY2Vzc1Rva2VuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoX2EpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbmFsVG9rZW4gPSBhd2FpdCBnZXRBY2Nlc3NUb2tlbigpO1xuICAgICAgICAgICAgLy8gVGltZW91dCBpcyB1cCwgc28gdGhyb3cgaWYgaXQncyBzdGlsbCBudWxsXG4gICAgICAgICAgICBpZiAoZmluYWxUb2tlbiA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byByZWZyZXNoIGFjY2VzcyB0b2tlbi5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmluYWxUb2tlbjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBsZXQgdG9rZW4gPSBhd2FpdCB0cnlHZXRBY2Nlc3NUb2tlbigpO1xuICAgIHdoaWxlICh0b2tlbiA9PT0gbnVsbCkge1xuICAgICAgICBhd2FpdCAoMCwgaGVscGVyc19qc18xLmRlbGF5KShyZXRyeUludGVydmFsSW5Ncyk7XG4gICAgICAgIHRva2VuID0gYXdhaXQgdHJ5R2V0QWNjZXNzVG9rZW4oKTtcbiAgICB9XG4gICAgcmV0dXJuIHRva2VuO1xufVxuLyoqXG4gKiBDcmVhdGVzIGEgdG9rZW4gY3ljbGVyIGZyb20gYSBjcmVkZW50aWFsLCBzY29wZXMsIGFuZCBvcHRpb25hbCBzZXR0aW5ncy5cbiAqXG4gKiBBIHRva2VuIGN5Y2xlciByZXByZXNlbnRzIGEgd2F5IHRvIHJlbGlhYmx5IHJldHJpZXZlIGEgdmFsaWQgYWNjZXNzIHRva2VuXG4gKiBmcm9tIGEgVG9rZW5DcmVkZW50aWFsLiBJdCB3aWxsIGhhbmRsZSBpbml0aWFsaXppbmcgdGhlIHRva2VuLCByZWZyZXNoaW5nIGl0XG4gKiB3aGVuIGl0IG5lYXJzIGV4cGlyYXRpb24sIGFuZCBzeW5jaHJvbml6ZXMgcmVmcmVzaCBhdHRlbXB0cyB0byBhdm9pZFxuICogY29uY3VycmVuY3kgaGF6YXJkcy5cbiAqXG4gKiBAcGFyYW0gY3JlZGVudGlhbCAtIHRoZSB1bmRlcmx5aW5nIFRva2VuQ3JlZGVudGlhbCB0aGF0IHByb3ZpZGVzIHRoZSBhY2Nlc3NcbiAqIHRva2VuXG4gKiBAcGFyYW0gdG9rZW5DeWNsZXJPcHRpb25zIC0gb3B0aW9uYWxseSBvdmVycmlkZSBkZWZhdWx0IHNldHRpbmdzIGZvciB0aGUgY3ljbGVyXG4gKlxuICogQHJldHVybnMgLSBhIGZ1bmN0aW9uIHRoYXQgcmVsaWFibHkgcHJvZHVjZXMgYSB2YWxpZCBhY2Nlc3MgdG9rZW5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlVG9rZW5DeWNsZXIoY3JlZGVudGlhbCwgdG9rZW5DeWNsZXJPcHRpb25zKSB7XG4gICAgbGV0IHJlZnJlc2hXb3JrZXIgPSBudWxsO1xuICAgIGxldCB0b2tlbiA9IG51bGw7XG4gICAgbGV0IHRlbmFudElkO1xuICAgIGNvbnN0IG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGV4cG9ydHMuREVGQVVMVF9DWUNMRVJfT1BUSU9OUyksIHRva2VuQ3ljbGVyT3B0aW9ucyk7XG4gICAgLyoqXG4gICAgICogVGhpcyBsaXR0bGUgaG9sZGVyIGRlZmluZXMgc2V2ZXJhbCBwcmVkaWNhdGVzIHRoYXQgd2UgdXNlIHRvIGNvbnN0cnVjdFxuICAgICAqIHRoZSBydWxlcyBvZiByZWZyZXNoaW5nIHRoZSB0b2tlbi5cbiAgICAgKi9cbiAgICBjb25zdCBjeWNsZXIgPSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQcm9kdWNlcyB0cnVlIGlmIGEgcmVmcmVzaCBqb2IgaXMgY3VycmVudGx5IGluIHByb2dyZXNzLlxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0IGlzUmVmcmVzaGluZygpIHtcbiAgICAgICAgICAgIHJldHVybiByZWZyZXNoV29ya2VyICE9PSBudWxsO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogUHJvZHVjZXMgdHJ1ZSBpZiB0aGUgY3ljbGVyIFNIT1VMRCByZWZyZXNoICh3ZSBhcmUgd2l0aGluIHRoZSByZWZyZXNoXG4gICAgICAgICAqIHdpbmRvdyBhbmQgbm90IGFscmVhZHkgcmVmcmVzaGluZylcbiAgICAgICAgICovXG4gICAgICAgIGdldCBzaG91bGRSZWZyZXNoKCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgaWYgKGN5Y2xlci5pc1JlZnJlc2hpbmcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoKHRva2VuID09PSBudWxsIHx8IHRva2VuID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0b2tlbi5yZWZyZXNoQWZ0ZXJUaW1lc3RhbXApICYmIHRva2VuLnJlZnJlc2hBZnRlclRpbWVzdGFtcCA8IERhdGUubm93KCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAoKF9hID0gdG9rZW4gPT09IG51bGwgfHwgdG9rZW4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRva2VuLmV4cGlyZXNPblRpbWVzdGFtcCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogMCkgLSBvcHRpb25zLnJlZnJlc2hXaW5kb3dJbk1zIDwgRGF0ZS5ub3coKTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFByb2R1Y2VzIHRydWUgaWYgdGhlIGN5Y2xlciBNVVNUIHJlZnJlc2ggKG51bGwgb3IgbmVhcmx5LWV4cGlyZWRcbiAgICAgICAgICogdG9rZW4pLlxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0IG11c3RSZWZyZXNoKCkge1xuICAgICAgICAgICAgcmV0dXJuICh0b2tlbiA9PT0gbnVsbCB8fCB0b2tlbi5leHBpcmVzT25UaW1lc3RhbXAgLSBvcHRpb25zLmZvcmNlZFJlZnJlc2hXaW5kb3dJbk1zIDwgRGF0ZS5ub3coKSk7XG4gICAgICAgIH0sXG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBTdGFydHMgYSByZWZyZXNoIGpvYiBvciByZXR1cm5zIHRoZSBleGlzdGluZyBqb2IgaWYgb25lIGlzIGFscmVhZHlcbiAgICAgKiBydW5uaW5nLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJlZnJlc2goc2NvcGVzLCBnZXRUb2tlbk9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoIWN5Y2xlci5pc1JlZnJlc2hpbmcpIHtcbiAgICAgICAgICAgIC8vIFdlIGJpbmQgYHNjb3Blc2AgaGVyZSB0byBhdm9pZCBwYXNzaW5nIGl0IGFyb3VuZCBhIGxvdFxuICAgICAgICAgICAgY29uc3QgdHJ5R2V0QWNjZXNzVG9rZW4gPSAoKSA9PiBjcmVkZW50aWFsLmdldFRva2VuKHNjb3BlcywgZ2V0VG9rZW5PcHRpb25zKTtcbiAgICAgICAgICAgIC8vIFRha2UgYWR2YW50YWdlIG9mIHByb21pc2UgY2hhaW5pbmcgdG8gaW5zZXJ0IGFuIGFzc2lnbm1lbnQgdG8gYHRva2VuYFxuICAgICAgICAgICAgLy8gYmVmb3JlIHRoZSByZWZyZXNoIGNhbiBiZSBjb25zaWRlcmVkIGRvbmUuXG4gICAgICAgICAgICByZWZyZXNoV29ya2VyID0gYmVnaW5SZWZyZXNoKHRyeUdldEFjY2Vzc1Rva2VuLCBvcHRpb25zLnJldHJ5SW50ZXJ2YWxJbk1zLCBcbiAgICAgICAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYSB0b2tlbiwgdGhlbiB3ZSBzaG91bGQgdGltZW91dCBpbW1lZGlhdGVseVxuICAgICAgICAgICAgKF9hID0gdG9rZW4gPT09IG51bGwgfHwgdG9rZW4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRva2VuLmV4cGlyZXNPblRpbWVzdGFtcCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogRGF0ZS5ub3coKSlcbiAgICAgICAgICAgICAgICAudGhlbigoX3Rva2VuKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVmcmVzaFdvcmtlciA9IG51bGw7XG4gICAgICAgICAgICAgICAgdG9rZW4gPSBfdG9rZW47XG4gICAgICAgICAgICAgICAgdGVuYW50SWQgPSBnZXRUb2tlbk9wdGlvbnMudGVuYW50SWQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuY2F0Y2goKHJlYXNvbikgPT4ge1xuICAgICAgICAgICAgICAgIC8vIFdlIGFsc28gc2hvdWxkIHJlc2V0IHRoZSByZWZyZXNoZXIgaWYgd2UgZW50ZXIgYSBmYWlsZWQgc3RhdGUuICBBbGxcbiAgICAgICAgICAgICAgICAvLyBleGlzdGluZyBhd2FpdGVycyB3aWxsIHRocm93LCBidXQgc3Vic2VxdWVudCByZXF1ZXN0cyB3aWxsIHN0YXJ0IGFcbiAgICAgICAgICAgICAgICAvLyBuZXcgcmV0cnkgY2hhaW4uXG4gICAgICAgICAgICAgICAgcmVmcmVzaFdvcmtlciA9IG51bGw7XG4gICAgICAgICAgICAgICAgdG9rZW4gPSBudWxsO1xuICAgICAgICAgICAgICAgIHRlbmFudElkID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHRocm93IHJlYXNvbjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZWZyZXNoV29ya2VyO1xuICAgIH1cbiAgICByZXR1cm4gYXN5bmMgKHNjb3BlcywgdG9rZW5PcHRpb25zKSA9PiB7XG4gICAgICAgIC8vXG4gICAgICAgIC8vIFNpbXBsZSBydWxlczpcbiAgICAgICAgLy8gLSBJZiB3ZSBNVVNUIHJlZnJlc2gsIHRoZW4gcmV0dXJuIHRoZSByZWZyZXNoIHRhc2ssIGJsb2NraW5nXG4gICAgICAgIC8vICAgdGhlIHBpcGVsaW5lIHVudGlsIGEgdG9rZW4gaXMgYXZhaWxhYmxlLlxuICAgICAgICAvLyAtIElmIHdlIFNIT1VMRCByZWZyZXNoLCB0aGVuIHJ1biByZWZyZXNoIGJ1dCBkb24ndCByZXR1cm4gaXRcbiAgICAgICAgLy8gICAod2UgY2FuIHN0aWxsIHVzZSB0aGUgY2FjaGVkIHRva2VuKS5cbiAgICAgICAgLy8gLSBSZXR1cm4gdGhlIHRva2VuLCBzaW5jZSBpdCdzIGZpbmUgaWYgd2UgZGlkbid0IHJldHVybiBpblxuICAgICAgICAvLyAgIHN0ZXAgMS5cbiAgICAgICAgLy9cbiAgICAgICAgY29uc3QgaGFzQ2xhaW1DaGFsbGVuZ2UgPSBCb29sZWFuKHRva2VuT3B0aW9ucy5jbGFpbXMpO1xuICAgICAgICBjb25zdCB0ZW5hbnRJZENoYW5nZWQgPSB0ZW5hbnRJZCAhPT0gdG9rZW5PcHRpb25zLnRlbmFudElkO1xuICAgICAgICBpZiAoaGFzQ2xhaW1DaGFsbGVuZ2UpIHtcbiAgICAgICAgICAgIC8vIElmIHdlJ3ZlIHJlY2VpdmVkIGEgY2xhaW0sIHdlIGtub3cgdGhlIGV4aXN0aW5nIHRva2VuIGlzbid0IHZhbGlkXG4gICAgICAgICAgICAvLyBXZSB3YW50IHRvIGNsZWFyIGl0IHNvIHRoYXQgdGhhdCByZWZyZXNoIHdvcmtlciB3b24ndCB1c2UgdGhlIG9sZCBleHBpcmF0aW9uIHRpbWUgYXMgYSB0aW1lb3V0XG4gICAgICAgICAgICB0b2tlbiA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgdGhlIHRlbmFudElkIHBhc3NlZCBpbiB0b2tlbiBvcHRpb25zIGlzIGRpZmZlcmVudCB0byB0aGUgb25lIHdlIGhhdmVcbiAgICAgICAgLy8gT3IgaWYgd2UgYXJlIGluIGNsYWltIGNoYWxsZW5nZSBhbmQgdGhlIHRva2VuIHdhcyByZWplY3RlZCBhbmQgYSBuZXcgYWNjZXNzIHRva2VuIG5lZWQgdG8gYmUgaXNzdWVkLCB3ZSBuZWVkIHRvXG4gICAgICAgIC8vIHJlZnJlc2ggdGhlIHRva2VuIHdpdGggdGhlIG5ldyB0ZW5hbnRJZCBvciB0b2tlbi5cbiAgICAgICAgY29uc3QgbXVzdFJlZnJlc2ggPSB0ZW5hbnRJZENoYW5nZWQgfHwgaGFzQ2xhaW1DaGFsbGVuZ2UgfHwgY3ljbGVyLm11c3RSZWZyZXNoO1xuICAgICAgICBpZiAobXVzdFJlZnJlc2gpIHtcbiAgICAgICAgICAgIHJldHVybiByZWZyZXNoKHNjb3BlcywgdG9rZW5PcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY3ljbGVyLnNob3VsZFJlZnJlc2gpIHtcbiAgICAgICAgICAgIHJlZnJlc2goc2NvcGVzLCB0b2tlbk9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0b2tlbjtcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dG9rZW5DeWNsZXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5iZWFyZXJUb2tlbkF1dGhlbnRpY2F0aW9uUG9saWN5TmFtZSA9IHZvaWQgMDtcbmV4cG9ydHMuYmVhcmVyVG9rZW5BdXRoZW50aWNhdGlvblBvbGljeSA9IGJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3k7XG5jb25zdCB0b2tlbkN5Y2xlcl9qc18xID0gcmVxdWlyZShcIi4uL3V0aWwvdG9rZW5DeWNsZXIuanNcIik7XG5jb25zdCBsb2dfanNfMSA9IHJlcXVpcmUoXCIuLi9sb2cuanNcIik7XG4vKipcbiAqIFRoZSBwcm9ncmFtbWF0aWMgaWRlbnRpZmllciBvZiB0aGUgYmVhcmVyVG9rZW5BdXRoZW50aWNhdGlvblBvbGljeS5cbiAqL1xuZXhwb3J0cy5iZWFyZXJUb2tlbkF1dGhlbnRpY2F0aW9uUG9saWN5TmFtZSA9IFwiYmVhcmVyVG9rZW5BdXRoZW50aWNhdGlvblBvbGljeVwiO1xuLyoqXG4gKiBEZWZhdWx0IGF1dGhvcml6ZSByZXF1ZXN0IGhhbmRsZXJcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZGVmYXVsdEF1dGhvcml6ZVJlcXVlc3Qob3B0aW9ucykge1xuICAgIGNvbnN0IHsgc2NvcGVzLCBnZXRBY2Nlc3NUb2tlbiwgcmVxdWVzdCB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBnZXRUb2tlbk9wdGlvbnMgPSB7XG4gICAgICAgIGFib3J0U2lnbmFsOiByZXF1ZXN0LmFib3J0U2lnbmFsLFxuICAgICAgICB0cmFjaW5nT3B0aW9uczogcmVxdWVzdC50cmFjaW5nT3B0aW9ucyxcbiAgICB9O1xuICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gYXdhaXQgZ2V0QWNjZXNzVG9rZW4oc2NvcGVzLCBnZXRUb2tlbk9wdGlvbnMpO1xuICAgIGlmIChhY2Nlc3NUb2tlbikge1xuICAgICAgICBvcHRpb25zLnJlcXVlc3QuaGVhZGVycy5zZXQoXCJBdXRob3JpemF0aW9uXCIsIGBCZWFyZXIgJHthY2Nlc3NUb2tlbi50b2tlbn1gKTtcbiAgICB9XG59XG4vKipcbiAqIFdlIHdpbGwgcmV0cmlldmUgdGhlIGNoYWxsZW5nZSBvbmx5IGlmIHRoZSByZXNwb25zZSBzdGF0dXMgY29kZSB3YXMgNDAxLFxuICogYW5kIGlmIHRoZSByZXNwb25zZSBjb250YWluZWQgdGhlIGhlYWRlciBcIldXVy1BdXRoZW50aWNhdGVcIiB3aXRoIGEgbm9uLWVtcHR5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBnZXRDaGFsbGVuZ2UocmVzcG9uc2UpIHtcbiAgICBjb25zdCBjaGFsbGVuZ2UgPSByZXNwb25zZS5oZWFkZXJzLmdldChcIldXVy1BdXRoZW50aWNhdGVcIik7XG4gICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAxICYmIGNoYWxsZW5nZSkge1xuICAgICAgICByZXR1cm4gY2hhbGxlbmdlO1xuICAgIH1cbiAgICByZXR1cm47XG59XG4vKipcbiAqIEEgcG9saWN5IHRoYXQgY2FuIHJlcXVlc3QgYSB0b2tlbiBmcm9tIGEgVG9rZW5DcmVkZW50aWFsIGltcGxlbWVudGF0aW9uIGFuZFxuICogdGhlbiBhcHBseSBpdCB0byB0aGUgQXV0aG9yaXphdGlvbiBoZWFkZXIgb2YgYSByZXF1ZXN0IGFzIGEgQmVhcmVyIHRva2VuLlxuICovXG5mdW5jdGlvbiBiZWFyZXJUb2tlbkF1dGhlbnRpY2F0aW9uUG9saWN5KG9wdGlvbnMpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3QgeyBjcmVkZW50aWFsLCBzY29wZXMsIGNoYWxsZW5nZUNhbGxiYWNrcyB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBsb2dnZXIgPSBvcHRpb25zLmxvZ2dlciB8fCBsb2dfanNfMS5sb2dnZXI7XG4gICAgY29uc3QgY2FsbGJhY2tzID0gT2JqZWN0LmFzc2lnbih7IGF1dGhvcml6ZVJlcXVlc3Q6IChfYSA9IGNoYWxsZW5nZUNhbGxiYWNrcyA9PT0gbnVsbCB8fCBjaGFsbGVuZ2VDYWxsYmFja3MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNoYWxsZW5nZUNhbGxiYWNrcy5hdXRob3JpemVSZXF1ZXN0KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBkZWZhdWx0QXV0aG9yaXplUmVxdWVzdCwgYXV0aG9yaXplUmVxdWVzdE9uQ2hhbGxlbmdlOiBjaGFsbGVuZ2VDYWxsYmFja3MgPT09IG51bGwgfHwgY2hhbGxlbmdlQ2FsbGJhY2tzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjaGFsbGVuZ2VDYWxsYmFja3MuYXV0aG9yaXplUmVxdWVzdE9uQ2hhbGxlbmdlIH0sIGNoYWxsZW5nZUNhbGxiYWNrcyk7XG4gICAgLy8gVGhpcyBmdW5jdGlvbiBlbmNhcHN1bGF0ZXMgdGhlIGVudGlyZSBwcm9jZXNzIG9mIHJlbGlhYmx5IHJldHJpZXZpbmcgdGhlIHRva2VuXG4gICAgLy8gVGhlIG9wdGlvbnMgYXJlIGxlZnQgb3V0IG9mIHRoZSBwdWJsaWMgQVBJIHVudGlsIHRoZXJlJ3MgZGVtYW5kIHRvIGNvbmZpZ3VyZSB0aGlzLlxuICAgIC8vIFJlbWVtYmVyIHRvIGV4dGVuZCBgQmVhcmVyVG9rZW5BdXRoZW50aWNhdGlvblBvbGljeU9wdGlvbnNgIHdpdGggYFRva2VuQ3ljbGVyT3B0aW9uc2BcbiAgICAvLyBpbiBvcmRlciB0byBwYXNzIHRocm91Z2ggdGhlIGBvcHRpb25zYCBvYmplY3QuXG4gICAgY29uc3QgZ2V0QWNjZXNzVG9rZW4gPSBjcmVkZW50aWFsXG4gICAgICAgID8gKDAsIHRva2VuQ3ljbGVyX2pzXzEuY3JlYXRlVG9rZW5DeWNsZXIpKGNyZWRlbnRpYWwgLyogLCBvcHRpb25zICovKVxuICAgICAgICA6ICgpID0+IFByb21pc2UucmVzb2x2ZShudWxsKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBleHBvcnRzLmJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3lOYW1lLFxuICAgICAgICAvKipcbiAgICAgICAgICogSWYgdGhlcmUncyBubyBjaGFsbGVuZ2UgcGFyYW1ldGVyOlxuICAgICAgICAgKiAtIEl0IHdpbGwgdHJ5IHRvIHJldHJpZXZlIHRoZSB0b2tlbiB1c2luZyB0aGUgY2FjaGUsIG9yIHRoZSBjcmVkZW50aWFsJ3MgZ2V0VG9rZW4uXG4gICAgICAgICAqIC0gVGhlbiBpdCB3aWxsIHRyeSB0aGUgbmV4dCBwb2xpY3kgd2l0aCBvciB3aXRob3V0IHRoZSByZXRyaWV2ZWQgdG9rZW4uXG4gICAgICAgICAqXG4gICAgICAgICAqIEl0IHVzZXMgdGhlIGNoYWxsZW5nZSBwYXJhbWV0ZXJzIHRvOlxuICAgICAgICAgKiAtIFNraXAgYSBmaXJzdCBhdHRlbXB0IHRvIGdldCB0aGUgdG9rZW4gZnJvbSB0aGUgY3JlZGVudGlhbCBpZiB0aGVyZSdzIG5vIGNhY2hlZCB0b2tlbixcbiAgICAgICAgICogICBzaW5jZSBpdCBleHBlY3RzIHRoZSB0b2tlbiB0byBiZSByZXRyaWV2YWJsZSBvbmx5IGFmdGVyIHRoZSBjaGFsbGVuZ2UuXG4gICAgICAgICAqIC0gUHJlcGFyZSB0aGUgb3V0Z29pbmcgcmVxdWVzdCBpZiB0aGUgYHByZXBhcmVSZXF1ZXN0YCBtZXRob2QgaGFzIGJlZW4gcHJvdmlkZWQuXG4gICAgICAgICAqIC0gU2VuZCBhbiBpbml0aWFsIHJlcXVlc3QgdG8gcmVjZWl2ZSB0aGUgY2hhbGxlbmdlIGlmIGl0IGZhaWxzLlxuICAgICAgICAgKiAtIFByb2Nlc3MgYSBjaGFsbGVuZ2UgaWYgdGhlIHJlc3BvbnNlIGNvbnRhaW5zIGl0LlxuICAgICAgICAgKiAtIFJldHJpZXZlIGEgdG9rZW4gd2l0aCB0aGUgY2hhbGxlbmdlIGluZm9ybWF0aW9uLCB0aGVuIHJlLXNlbmQgdGhlIHJlcXVlc3QuXG4gICAgICAgICAqL1xuICAgICAgICBhc3luYyBzZW5kUmVxdWVzdChyZXF1ZXN0LCBuZXh0KSB7XG4gICAgICAgICAgICBpZiAoIXJlcXVlc3QudXJsLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChcImh0dHBzOi8vXCIpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmVhcmVyIHRva2VuIGF1dGhlbnRpY2F0aW9uIGlzIG5vdCBwZXJtaXR0ZWQgZm9yIG5vbi1UTFMgcHJvdGVjdGVkIChub24taHR0cHMpIFVSTHMuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXdhaXQgY2FsbGJhY2tzLmF1dGhvcml6ZVJlcXVlc3Qoe1xuICAgICAgICAgICAgICAgIHNjb3BlczogQXJyYXkuaXNBcnJheShzY29wZXMpID8gc2NvcGVzIDogW3Njb3Blc10sXG4gICAgICAgICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgICAgICAgICBnZXRBY2Nlc3NUb2tlbixcbiAgICAgICAgICAgICAgICBsb2dnZXIsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxldCByZXNwb25zZTtcbiAgICAgICAgICAgIGxldCBlcnJvcjtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCBuZXh0KHJlcXVlc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIGVycm9yID0gZXJyO1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gZXJyLnJlc3BvbnNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNhbGxiYWNrcy5hdXRob3JpemVSZXF1ZXN0T25DaGFsbGVuZ2UgJiZcbiAgICAgICAgICAgICAgICAocmVzcG9uc2UgPT09IG51bGwgfHwgcmVzcG9uc2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlc3BvbnNlLnN0YXR1cykgPT09IDQwMSAmJlxuICAgICAgICAgICAgICAgIGdldENoYWxsZW5nZShyZXNwb25zZSkpIHtcbiAgICAgICAgICAgICAgICAvLyBwcm9jZXNzZXMgY2hhbGxlbmdlXG4gICAgICAgICAgICAgICAgY29uc3Qgc2hvdWxkU2VuZFJlcXVlc3QgPSBhd2FpdCBjYWxsYmFja3MuYXV0aG9yaXplUmVxdWVzdE9uQ2hhbGxlbmdlKHtcbiAgICAgICAgICAgICAgICAgICAgc2NvcGVzOiBBcnJheS5pc0FycmF5KHNjb3BlcykgPyBzY29wZXMgOiBbc2NvcGVzXSxcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgICAgIGdldEFjY2Vzc1Rva2VuLFxuICAgICAgICAgICAgICAgICAgICBsb2dnZXIsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKHNob3VsZFNlbmRSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXh0KHJlcXVlc3QpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1iZWFyZXJUb2tlbkF1dGhlbnRpY2F0aW9uUG9saWN5LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubmRKc29uUG9saWN5TmFtZSA9IHZvaWQgMDtcbmV4cG9ydHMubmRKc29uUG9saWN5ID0gbmRKc29uUG9saWN5O1xuLyoqXG4gKiBUaGUgcHJvZ3JhbW1hdGljIGlkZW50aWZpZXIgb2YgdGhlIG5kSnNvblBvbGljeS5cbiAqL1xuZXhwb3J0cy5uZEpzb25Qb2xpY3lOYW1lID0gXCJuZEpzb25Qb2xpY3lcIjtcbi8qKlxuICogbmRKc29uUG9saWN5IGlzIGEgcG9saWN5IHVzZWQgdG8gY29udHJvbCBrZWVwIGFsaXZlIHNldHRpbmdzIGZvciBldmVyeSByZXF1ZXN0LlxuICovXG5mdW5jdGlvbiBuZEpzb25Qb2xpY3koKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogZXhwb3J0cy5uZEpzb25Qb2xpY3lOYW1lLFxuICAgICAgICBhc3luYyBzZW5kUmVxdWVzdChyZXF1ZXN0LCBuZXh0KSB7XG4gICAgICAgICAgICAvLyBUaGVyZSBjdXJyZW50bHkgaXNuJ3QgYSBnb29kIHdheSB0byBieXBhc3MgdGhlIHNlcmlhbGl6ZXJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmVxdWVzdC5ib2R5ID09PSBcInN0cmluZ1wiICYmIHJlcXVlc3QuYm9keS5zdGFydHNXaXRoKFwiW1wiKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBKU09OLnBhcnNlKHJlcXVlc3QuYm9keSk7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYm9keSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5ib2R5ID0gYm9keS5tYXAoKGl0ZW0pID0+IEpTT04uc3RyaW5naWZ5KGl0ZW0pICsgXCJcXG5cIikuam9pbihcIlwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV4dChyZXF1ZXN0KTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bmRKc29uUG9saWN5LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYXV4aWxpYXJ5QXV0aGVudGljYXRpb25IZWFkZXJQb2xpY3lOYW1lID0gdm9pZCAwO1xuZXhwb3J0cy5hdXhpbGlhcnlBdXRoZW50aWNhdGlvbkhlYWRlclBvbGljeSA9IGF1eGlsaWFyeUF1dGhlbnRpY2F0aW9uSGVhZGVyUG9saWN5O1xuY29uc3QgdG9rZW5DeWNsZXJfanNfMSA9IHJlcXVpcmUoXCIuLi91dGlsL3Rva2VuQ3ljbGVyLmpzXCIpO1xuY29uc3QgbG9nX2pzXzEgPSByZXF1aXJlKFwiLi4vbG9nLmpzXCIpO1xuLyoqXG4gKiBUaGUgcHJvZ3JhbW1hdGljIGlkZW50aWZpZXIgb2YgdGhlIGF1eGlsaWFyeUF1dGhlbnRpY2F0aW9uSGVhZGVyUG9saWN5LlxuICovXG5leHBvcnRzLmF1eGlsaWFyeUF1dGhlbnRpY2F0aW9uSGVhZGVyUG9saWN5TmFtZSA9IFwiYXV4aWxpYXJ5QXV0aGVudGljYXRpb25IZWFkZXJQb2xpY3lcIjtcbmNvbnN0IEFVVEhPUklaQVRJT05fQVVYSUxJQVJZX0hFQURFUiA9IFwieC1tcy1hdXRob3JpemF0aW9uLWF1eGlsaWFyeVwiO1xuYXN5bmMgZnVuY3Rpb24gc2VuZEF1dGhvcml6ZVJlcXVlc3Qob3B0aW9ucykge1xuICAgIHZhciBfYSwgX2I7XG4gICAgY29uc3QgeyBzY29wZXMsIGdldEFjY2Vzc1Rva2VuLCByZXF1ZXN0IH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IGdldFRva2VuT3B0aW9ucyA9IHtcbiAgICAgICAgYWJvcnRTaWduYWw6IHJlcXVlc3QuYWJvcnRTaWduYWwsXG4gICAgICAgIHRyYWNpbmdPcHRpb25zOiByZXF1ZXN0LnRyYWNpbmdPcHRpb25zLFxuICAgIH07XG4gICAgcmV0dXJuIChfYiA9IChfYSA9IChhd2FpdCBnZXRBY2Nlc3NUb2tlbihzY29wZXMsIGdldFRva2VuT3B0aW9ucykpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudG9rZW4pICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IFwiXCI7XG59XG4vKipcbiAqIEEgcG9saWN5IGZvciBleHRlcm5hbCB0b2tlbnMgdG8gYHgtbXMtYXV0aG9yaXphdGlvbi1hdXhpbGlhcnlgIGhlYWRlci5cbiAqIFRoaXMgaGVhZGVyIHdpbGwgYmUgdXNlZCB3aGVuIGNyZWF0aW5nIGEgY3Jvc3MtdGVuYW50IGFwcGxpY2F0aW9uIHdlIG1heSBuZWVkIHRvIGhhbmRsZSBhdXRoZW50aWNhdGlvbiByZXF1ZXN0c1xuICogZm9yIHJlc291cmNlcyB0aGF0IGFyZSBpbiBkaWZmZXJlbnQgdGVuYW50cy5cbiAqIFlvdSBjb3VsZCBzZWUgW0FSTSBkb2NzXShodHRwczovL2xlYXJuLm1pY3Jvc29mdC5jb20vZW4tdXMvYXp1cmUvYXp1cmUtcmVzb3VyY2UtbWFuYWdlci9tYW5hZ2VtZW50L2F1dGhlbnRpY2F0ZS1tdWx0aS10ZW5hbnQpIGZvciBhIHJ1bmRvd24gb2YgaG93IHRoaXMgZmVhdHVyZSB3b3Jrc1xuICovXG5mdW5jdGlvbiBhdXhpbGlhcnlBdXRoZW50aWNhdGlvbkhlYWRlclBvbGljeShvcHRpb25zKSB7XG4gICAgY29uc3QgeyBjcmVkZW50aWFscywgc2NvcGVzIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IGxvZ2dlciA9IG9wdGlvbnMubG9nZ2VyIHx8IGxvZ19qc18xLmxvZ2dlcjtcbiAgICBjb25zdCB0b2tlbkN5Y2xlck1hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogZXhwb3J0cy5hdXhpbGlhcnlBdXRoZW50aWNhdGlvbkhlYWRlclBvbGljeU5hbWUsXG4gICAgICAgIGFzeW5jIHNlbmRSZXF1ZXN0KHJlcXVlc3QsIG5leHQpIHtcbiAgICAgICAgICAgIGlmICghcmVxdWVzdC51cmwudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKFwiaHR0cHM6Ly9cIikpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCZWFyZXIgdG9rZW4gYXV0aGVudGljYXRpb24gZm9yIGF1eGlsaWFyeSBoZWFkZXIgaXMgbm90IHBlcm1pdHRlZCBmb3Igbm9uLVRMUyBwcm90ZWN0ZWQgKG5vbi1odHRwcykgVVJMcy5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWNyZWRlbnRpYWxzIHx8IGNyZWRlbnRpYWxzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGAke2V4cG9ydHMuYXV4aWxpYXJ5QXV0aGVudGljYXRpb25IZWFkZXJQb2xpY3lOYW1lfSBoZWFkZXIgd2lsbCBub3QgYmUgc2V0IGR1ZSB0byBlbXB0eSBjcmVkZW50aWFscy5gKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dChyZXF1ZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHRva2VuUHJvbWlzZXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY3JlZGVudGlhbCBvZiBjcmVkZW50aWFscykge1xuICAgICAgICAgICAgICAgIGxldCBnZXRBY2Nlc3NUb2tlbiA9IHRva2VuQ3ljbGVyTWFwLmdldChjcmVkZW50aWFsKTtcbiAgICAgICAgICAgICAgICBpZiAoIWdldEFjY2Vzc1Rva2VuKSB7XG4gICAgICAgICAgICAgICAgICAgIGdldEFjY2Vzc1Rva2VuID0gKDAsIHRva2VuQ3ljbGVyX2pzXzEuY3JlYXRlVG9rZW5DeWNsZXIpKGNyZWRlbnRpYWwpO1xuICAgICAgICAgICAgICAgICAgICB0b2tlbkN5Y2xlck1hcC5zZXQoY3JlZGVudGlhbCwgZ2V0QWNjZXNzVG9rZW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0b2tlblByb21pc2VzLnB1c2goc2VuZEF1dGhvcml6ZVJlcXVlc3Qoe1xuICAgICAgICAgICAgICAgICAgICBzY29wZXM6IEFycmF5LmlzQXJyYXkoc2NvcGVzKSA/IHNjb3BlcyA6IFtzY29wZXNdLFxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LFxuICAgICAgICAgICAgICAgICAgICBnZXRBY2Nlc3NUb2tlbixcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLFxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGF1eGlsaWFyeVRva2VucyA9IChhd2FpdCBQcm9taXNlLmFsbCh0b2tlblByb21pc2VzKSkuZmlsdGVyKCh0b2tlbikgPT4gQm9vbGVhbih0b2tlbikpO1xuICAgICAgICAgICAgaWYgKGF1eGlsaWFyeVRva2Vucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBsb2dnZXIud2FybmluZyhgTm9uZSBvZiB0aGUgYXV4aWxpYXJ5IHRva2VucyBhcmUgdmFsaWQuICR7QVVUSE9SSVpBVElPTl9BVVhJTElBUllfSEVBREVSfSBoZWFkZXIgd2lsbCBub3QgYmUgc2V0LmApO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0KHJlcXVlc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVxdWVzdC5oZWFkZXJzLnNldChBVVRIT1JJWkFUSU9OX0FVWElMSUFSWV9IRUFERVIsIGF1eGlsaWFyeVRva2Vucy5tYXAoKHRva2VuKSA9PiBgQmVhcmVyICR7dG9rZW59YCkuam9pbihcIiwgXCIpKTtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KHJlcXVlc3QpO1xuICAgICAgICB9LFxuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hdXhpbGlhcnlBdXRoZW50aWNhdGlvbkhlYWRlclBvbGljeS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNyZWF0ZUZpbGVGcm9tU3RyZWFtID0gZXhwb3J0cy5jcmVhdGVGaWxlID0gZXhwb3J0cy5hdXhpbGlhcnlBdXRoZW50aWNhdGlvbkhlYWRlclBvbGljeU5hbWUgPSBleHBvcnRzLmF1eGlsaWFyeUF1dGhlbnRpY2F0aW9uSGVhZGVyUG9saWN5ID0gZXhwb3J0cy5uZEpzb25Qb2xpY3lOYW1lID0gZXhwb3J0cy5uZEpzb25Qb2xpY3kgPSBleHBvcnRzLmJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3lOYW1lID0gZXhwb3J0cy5iZWFyZXJUb2tlbkF1dGhlbnRpY2F0aW9uUG9saWN5ID0gZXhwb3J0cy5mb3JtRGF0YVBvbGljeU5hbWUgPSBleHBvcnRzLmZvcm1EYXRhUG9saWN5ID0gZXhwb3J0cy50bHNQb2xpY3lOYW1lID0gZXhwb3J0cy50bHNQb2xpY3kgPSBleHBvcnRzLnVzZXJBZ2VudFBvbGljeU5hbWUgPSBleHBvcnRzLnVzZXJBZ2VudFBvbGljeSA9IGV4cG9ydHMuZGVmYXVsdFJldHJ5UG9saWN5ID0gZXhwb3J0cy50cmFjaW5nUG9saWN5TmFtZSA9IGV4cG9ydHMudHJhY2luZ1BvbGljeSA9IGV4cG9ydHMucmV0cnlQb2xpY3kgPSBleHBvcnRzLnRocm90dGxpbmdSZXRyeVBvbGljeU5hbWUgPSBleHBvcnRzLnRocm90dGxpbmdSZXRyeVBvbGljeSA9IGV4cG9ydHMuc3lzdGVtRXJyb3JSZXRyeVBvbGljeU5hbWUgPSBleHBvcnRzLnN5c3RlbUVycm9yUmV0cnlQb2xpY3kgPSBleHBvcnRzLnJlZGlyZWN0UG9saWN5TmFtZSA9IGV4cG9ydHMucmVkaXJlY3RQb2xpY3kgPSBleHBvcnRzLmdldERlZmF1bHRQcm94eVNldHRpbmdzID0gZXhwb3J0cy5wcm94eVBvbGljeU5hbWUgPSBleHBvcnRzLnByb3h5UG9saWN5ID0gZXhwb3J0cy5tdWx0aXBhcnRQb2xpY3lOYW1lID0gZXhwb3J0cy5tdWx0aXBhcnRQb2xpY3kgPSBleHBvcnRzLmxvZ1BvbGljeU5hbWUgPSBleHBvcnRzLmxvZ1BvbGljeSA9IGV4cG9ydHMuc2V0Q2xpZW50UmVxdWVzdElkUG9saWN5TmFtZSA9IGV4cG9ydHMuc2V0Q2xpZW50UmVxdWVzdElkUG9saWN5ID0gZXhwb3J0cy5leHBvbmVudGlhbFJldHJ5UG9saWN5TmFtZSA9IGV4cG9ydHMuZXhwb25lbnRpYWxSZXRyeVBvbGljeSA9IGV4cG9ydHMuZGVjb21wcmVzc1Jlc3BvbnNlUG9saWN5TmFtZSA9IGV4cG9ydHMuZGVjb21wcmVzc1Jlc3BvbnNlUG9saWN5ID0gZXhwb3J0cy5pc1Jlc3RFcnJvciA9IGV4cG9ydHMuUmVzdEVycm9yID0gZXhwb3J0cy5jcmVhdGVQaXBlbGluZVJlcXVlc3QgPSBleHBvcnRzLmNyZWF0ZUh0dHBIZWFkZXJzID0gZXhwb3J0cy5jcmVhdGVEZWZhdWx0SHR0cENsaWVudCA9IGV4cG9ydHMuY3JlYXRlUGlwZWxpbmVGcm9tT3B0aW9ucyA9IGV4cG9ydHMuY3JlYXRlRW1wdHlQaXBlbGluZSA9IHZvaWQgMDtcbnZhciBwaXBlbGluZV9qc18xID0gcmVxdWlyZShcIi4vcGlwZWxpbmUuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVFbXB0eVBpcGVsaW5lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwaXBlbGluZV9qc18xLmNyZWF0ZUVtcHR5UGlwZWxpbmU7IH0gfSk7XG52YXIgY3JlYXRlUGlwZWxpbmVGcm9tT3B0aW9uc19qc18xID0gcmVxdWlyZShcIi4vY3JlYXRlUGlwZWxpbmVGcm9tT3B0aW9ucy5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVBpcGVsaW5lRnJvbU9wdGlvbnNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNyZWF0ZVBpcGVsaW5lRnJvbU9wdGlvbnNfanNfMS5jcmVhdGVQaXBlbGluZUZyb21PcHRpb25zOyB9IH0pO1xudmFyIGRlZmF1bHRIdHRwQ2xpZW50X2pzXzEgPSByZXF1aXJlKFwiLi9kZWZhdWx0SHR0cENsaWVudC5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZURlZmF1bHRIdHRwQ2xpZW50XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkZWZhdWx0SHR0cENsaWVudF9qc18xLmNyZWF0ZURlZmF1bHRIdHRwQ2xpZW50OyB9IH0pO1xudmFyIGh0dHBIZWFkZXJzX2pzXzEgPSByZXF1aXJlKFwiLi9odHRwSGVhZGVycy5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUh0dHBIZWFkZXJzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBodHRwSGVhZGVyc19qc18xLmNyZWF0ZUh0dHBIZWFkZXJzOyB9IH0pO1xudmFyIHBpcGVsaW5lUmVxdWVzdF9qc18xID0gcmVxdWlyZShcIi4vcGlwZWxpbmVSZXF1ZXN0LmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUGlwZWxpbmVSZXF1ZXN0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwaXBlbGluZVJlcXVlc3RfanNfMS5jcmVhdGVQaXBlbGluZVJlcXVlc3Q7IH0gfSk7XG52YXIgcmVzdEVycm9yX2pzXzEgPSByZXF1aXJlKFwiLi9yZXN0RXJyb3IuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJSZXN0RXJyb3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlc3RFcnJvcl9qc18xLlJlc3RFcnJvcjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzUmVzdEVycm9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZXN0RXJyb3JfanNfMS5pc1Jlc3RFcnJvcjsgfSB9KTtcbnZhciBkZWNvbXByZXNzUmVzcG9uc2VQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL2RlY29tcHJlc3NSZXNwb25zZVBvbGljeS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlY29tcHJlc3NSZXNwb25zZVBvbGljeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZGVjb21wcmVzc1Jlc3BvbnNlUG9saWN5X2pzXzEuZGVjb21wcmVzc1Jlc3BvbnNlUG9saWN5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVjb21wcmVzc1Jlc3BvbnNlUG9saWN5TmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZGVjb21wcmVzc1Jlc3BvbnNlUG9saWN5X2pzXzEuZGVjb21wcmVzc1Jlc3BvbnNlUG9saWN5TmFtZTsgfSB9KTtcbnZhciBleHBvbmVudGlhbFJldHJ5UG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9wb2xpY2llcy9leHBvbmVudGlhbFJldHJ5UG9saWN5LmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZXhwb25lbnRpYWxSZXRyeVBvbGljeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZXhwb25lbnRpYWxSZXRyeVBvbGljeV9qc18xLmV4cG9uZW50aWFsUmV0cnlQb2xpY3k7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJleHBvbmVudGlhbFJldHJ5UG9saWN5TmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZXhwb25lbnRpYWxSZXRyeVBvbGljeV9qc18xLmV4cG9uZW50aWFsUmV0cnlQb2xpY3lOYW1lOyB9IH0pO1xudmFyIHNldENsaWVudFJlcXVlc3RJZFBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvc2V0Q2xpZW50UmVxdWVzdElkUG9saWN5LmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2V0Q2xpZW50UmVxdWVzdElkUG9saWN5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZXRDbGllbnRSZXF1ZXN0SWRQb2xpY3lfanNfMS5zZXRDbGllbnRSZXF1ZXN0SWRQb2xpY3k7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzZXRDbGllbnRSZXF1ZXN0SWRQb2xpY3lOYW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZXRDbGllbnRSZXF1ZXN0SWRQb2xpY3lfanNfMS5zZXRDbGllbnRSZXF1ZXN0SWRQb2xpY3lOYW1lOyB9IH0pO1xudmFyIGxvZ1BvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvbG9nUG9saWN5LmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibG9nUG9saWN5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBsb2dQb2xpY3lfanNfMS5sb2dQb2xpY3k7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJsb2dQb2xpY3lOYW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBsb2dQb2xpY3lfanNfMS5sb2dQb2xpY3lOYW1lOyB9IH0pO1xudmFyIG11bHRpcGFydFBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvbXVsdGlwYXJ0UG9saWN5LmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibXVsdGlwYXJ0UG9saWN5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBtdWx0aXBhcnRQb2xpY3lfanNfMS5tdWx0aXBhcnRQb2xpY3k7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtdWx0aXBhcnRQb2xpY3lOYW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBtdWx0aXBhcnRQb2xpY3lfanNfMS5tdWx0aXBhcnRQb2xpY3lOYW1lOyB9IH0pO1xudmFyIHByb3h5UG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9wb2xpY2llcy9wcm94eVBvbGljeS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInByb3h5UG9saWN5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwcm94eVBvbGljeV9qc18xLnByb3h5UG9saWN5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicHJveHlQb2xpY3lOYW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwcm94eVBvbGljeV9qc18xLnByb3h5UG9saWN5TmFtZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImdldERlZmF1bHRQcm94eVNldHRpbmdzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwcm94eVBvbGljeV9qc18xLmdldERlZmF1bHRQcm94eVNldHRpbmdzOyB9IH0pO1xudmFyIHJlZGlyZWN0UG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9wb2xpY2llcy9yZWRpcmVjdFBvbGljeS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlZGlyZWN0UG9saWN5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZWRpcmVjdFBvbGljeV9qc18xLnJlZGlyZWN0UG9saWN5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmVkaXJlY3RQb2xpY3lOYW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZWRpcmVjdFBvbGljeV9qc18xLnJlZGlyZWN0UG9saWN5TmFtZTsgfSB9KTtcbnZhciBzeXN0ZW1FcnJvclJldHJ5UG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9wb2xpY2llcy9zeXN0ZW1FcnJvclJldHJ5UG9saWN5LmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3lzdGVtRXJyb3JSZXRyeVBvbGljeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc3lzdGVtRXJyb3JSZXRyeVBvbGljeV9qc18xLnN5c3RlbUVycm9yUmV0cnlQb2xpY3k7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzeXN0ZW1FcnJvclJldHJ5UG9saWN5TmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc3lzdGVtRXJyb3JSZXRyeVBvbGljeV9qc18xLnN5c3RlbUVycm9yUmV0cnlQb2xpY3lOYW1lOyB9IH0pO1xudmFyIHRocm90dGxpbmdSZXRyeVBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvdGhyb3R0bGluZ1JldHJ5UG9saWN5LmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidGhyb3R0bGluZ1JldHJ5UG9saWN5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aHJvdHRsaW5nUmV0cnlQb2xpY3lfanNfMS50aHJvdHRsaW5nUmV0cnlQb2xpY3k7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0aHJvdHRsaW5nUmV0cnlQb2xpY3lOYW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aHJvdHRsaW5nUmV0cnlQb2xpY3lfanNfMS50aHJvdHRsaW5nUmV0cnlQb2xpY3lOYW1lOyB9IH0pO1xudmFyIHJldHJ5UG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9wb2xpY2llcy9yZXRyeVBvbGljeS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJldHJ5UG9saWN5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZXRyeVBvbGljeV9qc18xLnJldHJ5UG9saWN5OyB9IH0pO1xudmFyIHRyYWNpbmdQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL3RyYWNpbmdQb2xpY3kuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0cmFjaW5nUG9saWN5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0cmFjaW5nUG9saWN5X2pzXzEudHJhY2luZ1BvbGljeTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRyYWNpbmdQb2xpY3lOYW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0cmFjaW5nUG9saWN5X2pzXzEudHJhY2luZ1BvbGljeU5hbWU7IH0gfSk7XG52YXIgZGVmYXVsdFJldHJ5UG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9wb2xpY2llcy9kZWZhdWx0UmV0cnlQb2xpY3kuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZWZhdWx0UmV0cnlQb2xpY3lcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRlZmF1bHRSZXRyeVBvbGljeV9qc18xLmRlZmF1bHRSZXRyeVBvbGljeTsgfSB9KTtcbnZhciB1c2VyQWdlbnRQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL3VzZXJBZ2VudFBvbGljeS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInVzZXJBZ2VudFBvbGljeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdXNlckFnZW50UG9saWN5X2pzXzEudXNlckFnZW50UG9saWN5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidXNlckFnZW50UG9saWN5TmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdXNlckFnZW50UG9saWN5X2pzXzEudXNlckFnZW50UG9saWN5TmFtZTsgfSB9KTtcbnZhciB0bHNQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL3Rsc1BvbGljeS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRsc1BvbGljeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGxzUG9saWN5X2pzXzEudGxzUG9saWN5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidGxzUG9saWN5TmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGxzUG9saWN5X2pzXzEudGxzUG9saWN5TmFtZTsgfSB9KTtcbnZhciBmb3JtRGF0YVBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvZm9ybURhdGFQb2xpY3kuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJmb3JtRGF0YVBvbGljeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZm9ybURhdGFQb2xpY3lfanNfMS5mb3JtRGF0YVBvbGljeTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZvcm1EYXRhUG9saWN5TmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZm9ybURhdGFQb2xpY3lfanNfMS5mb3JtRGF0YVBvbGljeU5hbWU7IH0gfSk7XG52YXIgYmVhcmVyVG9rZW5BdXRoZW50aWNhdGlvblBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvYmVhcmVyVG9rZW5BdXRoZW50aWNhdGlvblBvbGljeS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3lcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3lfanNfMS5iZWFyZXJUb2tlbkF1dGhlbnRpY2F0aW9uUG9saWN5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYmVhcmVyVG9rZW5BdXRoZW50aWNhdGlvblBvbGljeU5hbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3lfanNfMS5iZWFyZXJUb2tlbkF1dGhlbnRpY2F0aW9uUG9saWN5TmFtZTsgfSB9KTtcbnZhciBuZEpzb25Qb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL25kSnNvblBvbGljeS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm5kSnNvblBvbGljeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbmRKc29uUG9saWN5X2pzXzEubmRKc29uUG9saWN5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibmRKc29uUG9saWN5TmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbmRKc29uUG9saWN5X2pzXzEubmRKc29uUG9saWN5TmFtZTsgfSB9KTtcbnZhciBhdXhpbGlhcnlBdXRoZW50aWNhdGlvbkhlYWRlclBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvYXV4aWxpYXJ5QXV0aGVudGljYXRpb25IZWFkZXJQb2xpY3kuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhdXhpbGlhcnlBdXRoZW50aWNhdGlvbkhlYWRlclBvbGljeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYXV4aWxpYXJ5QXV0aGVudGljYXRpb25IZWFkZXJQb2xpY3lfanNfMS5hdXhpbGlhcnlBdXRoZW50aWNhdGlvbkhlYWRlclBvbGljeTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImF1eGlsaWFyeUF1dGhlbnRpY2F0aW9uSGVhZGVyUG9saWN5TmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYXV4aWxpYXJ5QXV0aGVudGljYXRpb25IZWFkZXJQb2xpY3lfanNfMS5hdXhpbGlhcnlBdXRoZW50aWNhdGlvbkhlYWRlclBvbGljeU5hbWU7IH0gfSk7XG52YXIgZmlsZV9qc18xID0gcmVxdWlyZShcIi4vdXRpbC9maWxlLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRmlsZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZmlsZV9qc18xLmNyZWF0ZUZpbGU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVGaWxlRnJvbVN0cmVhbVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZmlsZV9qc18xLmNyZWF0ZUZpbGVGcm9tU3RyZWFtOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5BenVyZUtleUNyZWRlbnRpYWwgPSB2b2lkIDA7XG4vKipcbiAqIEEgc3RhdGljLWtleS1iYXNlZCBjcmVkZW50aWFsIHRoYXQgc3VwcG9ydHMgdXBkYXRpbmdcbiAqIHRoZSB1bmRlcmx5aW5nIGtleSB2YWx1ZS5cbiAqL1xuY2xhc3MgQXp1cmVLZXlDcmVkZW50aWFsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdmFsdWUgb2YgdGhlIGtleSB0byBiZSB1c2VkIGluIGF1dGhlbnRpY2F0aW9uXG4gICAgICovXG4gICAgZ2V0IGtleSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2tleTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIGFuIEF6dXJlS2V5Q3JlZGVudGlhbCBmb3IgdXNlXG4gICAgICogd2l0aCBhIHNlcnZpY2UgY2xpZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGtleSAtIFRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSBrZXkgdG8gdXNlIGluIGF1dGhlbnRpY2F0aW9uXG4gICAgICovXG4gICAgY29uc3RydWN0b3Ioa2V5KSB7XG4gICAgICAgIGlmICgha2V5KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJrZXkgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmdcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fa2V5ID0ga2V5O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDaGFuZ2UgdGhlIHZhbHVlIG9mIHRoZSBrZXkuXG4gICAgICpcbiAgICAgKiBVcGRhdGVzIHdpbGwgdGFrZSBlZmZlY3QgdXBvbiB0aGUgbmV4dCByZXF1ZXN0IGFmdGVyXG4gICAgICogdXBkYXRpbmcgdGhlIGtleSB2YWx1ZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBuZXdLZXkgLSBUaGUgbmV3IGtleSB2YWx1ZSB0byBiZSB1c2VkXG4gICAgICovXG4gICAgdXBkYXRlKG5ld0tleSkge1xuICAgICAgICB0aGlzLl9rZXkgPSBuZXdLZXk7XG4gICAgfVxufVxuZXhwb3J0cy5BenVyZUtleUNyZWRlbnRpYWwgPSBBenVyZUtleUNyZWRlbnRpYWw7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1henVyZUtleUNyZWRlbnRpYWwuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc0tleUNyZWRlbnRpYWwgPSBpc0tleUNyZWRlbnRpYWw7XG5jb25zdCBjb3JlX3V0aWxfMSA9IHJlcXVpcmUoXCJAYXp1cmUvY29yZS11dGlsXCIpO1xuLyoqXG4gKiBUZXN0cyBhbiBvYmplY3QgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgaXQgaW1wbGVtZW50cyBLZXlDcmVkZW50aWFsLlxuICpcbiAqIEBwYXJhbSBjcmVkZW50aWFsIC0gVGhlIGFzc3VtZWQgS2V5Q3JlZGVudGlhbCB0byBiZSB0ZXN0ZWQuXG4gKi9cbmZ1bmN0aW9uIGlzS2V5Q3JlZGVudGlhbChjcmVkZW50aWFsKSB7XG4gICAgcmV0dXJuICgwLCBjb3JlX3V0aWxfMS5pc09iamVjdFdpdGhQcm9wZXJ0aWVzKShjcmVkZW50aWFsLCBbXCJrZXlcIl0pICYmIHR5cGVvZiBjcmVkZW50aWFsLmtleSA9PT0gXCJzdHJpbmdcIjtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWtleUNyZWRlbnRpYWwuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5BenVyZU5hbWVkS2V5Q3JlZGVudGlhbCA9IHZvaWQgMDtcbmV4cG9ydHMuaXNOYW1lZEtleUNyZWRlbnRpYWwgPSBpc05hbWVkS2V5Q3JlZGVudGlhbDtcbmNvbnN0IGNvcmVfdXRpbF8xID0gcmVxdWlyZShcIkBhenVyZS9jb3JlLXV0aWxcIik7XG4vKipcbiAqIEEgc3RhdGljIG5hbWUva2V5LWJhc2VkIGNyZWRlbnRpYWwgdGhhdCBzdXBwb3J0cyB1cGRhdGluZ1xuICogdGhlIHVuZGVybHlpbmcgbmFtZSBhbmQga2V5IHZhbHVlcy5cbiAqL1xuY2xhc3MgQXp1cmVOYW1lZEtleUNyZWRlbnRpYWwge1xuICAgIC8qKlxuICAgICAqIFRoZSB2YWx1ZSBvZiB0aGUga2V5IHRvIGJlIHVzZWQgaW4gYXV0aGVudGljYXRpb24uXG4gICAgICovXG4gICAgZ2V0IGtleSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2tleTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIHZhbHVlIG9mIHRoZSBuYW1lIHRvIGJlIHVzZWQgaW4gYXV0aGVudGljYXRpb24uXG4gICAgICovXG4gICAgZ2V0IG5hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9uYW1lO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgYW4gQXp1cmVOYW1lZEtleUNyZWRlbnRpYWwgZm9yIHVzZVxuICAgICAqIHdpdGggYSBzZXJ2aWNlIGNsaWVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBuYW1lIC0gVGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIG5hbWUgdG8gdXNlIGluIGF1dGhlbnRpY2F0aW9uLlxuICAgICAqIEBwYXJhbSBrZXkgLSBUaGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUga2V5IHRvIHVzZSBpbiBhdXRoZW50aWNhdGlvbi5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihuYW1lLCBrZXkpIHtcbiAgICAgICAgaWYgKCFuYW1lIHx8ICFrZXkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJuYW1lIGFuZCBrZXkgbXVzdCBiZSBub24tZW1wdHkgc3RyaW5nc1wiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5fa2V5ID0ga2V5O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDaGFuZ2UgdGhlIHZhbHVlIG9mIHRoZSBrZXkuXG4gICAgICpcbiAgICAgKiBVcGRhdGVzIHdpbGwgdGFrZSBlZmZlY3QgdXBvbiB0aGUgbmV4dCByZXF1ZXN0IGFmdGVyXG4gICAgICogdXBkYXRpbmcgdGhlIGtleSB2YWx1ZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBuZXdOYW1lIC0gVGhlIG5ldyBuYW1lIHZhbHVlIHRvIGJlIHVzZWQuXG4gICAgICogQHBhcmFtIG5ld0tleSAtIFRoZSBuZXcga2V5IHZhbHVlIHRvIGJlIHVzZWQuXG4gICAgICovXG4gICAgdXBkYXRlKG5ld05hbWUsIG5ld0tleSkge1xuICAgICAgICBpZiAoIW5ld05hbWUgfHwgIW5ld0tleSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIm5ld05hbWUgYW5kIG5ld0tleSBtdXN0IGJlIG5vbi1lbXB0eSBzdHJpbmdzXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX25hbWUgPSBuZXdOYW1lO1xuICAgICAgICB0aGlzLl9rZXkgPSBuZXdLZXk7XG4gICAgfVxufVxuZXhwb3J0cy5BenVyZU5hbWVkS2V5Q3JlZGVudGlhbCA9IEF6dXJlTmFtZWRLZXlDcmVkZW50aWFsO1xuLyoqXG4gKiBUZXN0cyBhbiBvYmplY3QgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgaXQgaW1wbGVtZW50cyBOYW1lZEtleUNyZWRlbnRpYWwuXG4gKlxuICogQHBhcmFtIGNyZWRlbnRpYWwgLSBUaGUgYXNzdW1lZCBOYW1lZEtleUNyZWRlbnRpYWwgdG8gYmUgdGVzdGVkLlxuICovXG5mdW5jdGlvbiBpc05hbWVkS2V5Q3JlZGVudGlhbChjcmVkZW50aWFsKSB7XG4gICAgcmV0dXJuICgoMCwgY29yZV91dGlsXzEuaXNPYmplY3RXaXRoUHJvcGVydGllcykoY3JlZGVudGlhbCwgW1wibmFtZVwiLCBcImtleVwiXSkgJiZcbiAgICAgICAgdHlwZW9mIGNyZWRlbnRpYWwua2V5ID09PSBcInN0cmluZ1wiICYmXG4gICAgICAgIHR5cGVvZiBjcmVkZW50aWFsLm5hbWUgPT09IFwic3RyaW5nXCIpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXp1cmVOYW1lZEtleUNyZWRlbnRpYWwuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5BenVyZVNBU0NyZWRlbnRpYWwgPSB2b2lkIDA7XG5leHBvcnRzLmlzU0FTQ3JlZGVudGlhbCA9IGlzU0FTQ3JlZGVudGlhbDtcbmNvbnN0IGNvcmVfdXRpbF8xID0gcmVxdWlyZShcIkBhenVyZS9jb3JlLXV0aWxcIik7XG4vKipcbiAqIEEgc3RhdGljLXNpZ25hdHVyZS1iYXNlZCBjcmVkZW50aWFsIHRoYXQgc3VwcG9ydHMgdXBkYXRpbmdcbiAqIHRoZSB1bmRlcmx5aW5nIHNpZ25hdHVyZSB2YWx1ZS5cbiAqL1xuY2xhc3MgQXp1cmVTQVNDcmVkZW50aWFsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdmFsdWUgb2YgdGhlIHNoYXJlZCBhY2Nlc3Mgc2lnbmF0dXJlIHRvIGJlIHVzZWQgaW4gYXV0aGVudGljYXRpb25cbiAgICAgKi9cbiAgICBnZXQgc2lnbmF0dXJlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2lnbmF0dXJlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgYW4gQXp1cmVTQVNDcmVkZW50aWFsIGZvciB1c2VcbiAgICAgKiB3aXRoIGEgc2VydmljZSBjbGllbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc2lnbmF0dXJlIC0gVGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIHNoYXJlZCBhY2Nlc3Mgc2lnbmF0dXJlIHRvIHVzZSBpbiBhdXRoZW50aWNhdGlvblxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHNpZ25hdHVyZSkge1xuICAgICAgICBpZiAoIXNpZ25hdHVyZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwic2hhcmVkIGFjY2VzcyBzaWduYXR1cmUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmdcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2lnbmF0dXJlID0gc2lnbmF0dXJlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDaGFuZ2UgdGhlIHZhbHVlIG9mIHRoZSBzaWduYXR1cmUuXG4gICAgICpcbiAgICAgKiBVcGRhdGVzIHdpbGwgdGFrZSBlZmZlY3QgdXBvbiB0aGUgbmV4dCByZXF1ZXN0IGFmdGVyXG4gICAgICogdXBkYXRpbmcgdGhlIHNpZ25hdHVyZSB2YWx1ZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBuZXdTaWduYXR1cmUgLSBUaGUgbmV3IHNoYXJlZCBhY2Nlc3Mgc2lnbmF0dXJlIHZhbHVlIHRvIGJlIHVzZWRcbiAgICAgKi9cbiAgICB1cGRhdGUobmV3U2lnbmF0dXJlKSB7XG4gICAgICAgIGlmICghbmV3U2lnbmF0dXJlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzaGFyZWQgYWNjZXNzIHNpZ25hdHVyZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZ1wiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zaWduYXR1cmUgPSBuZXdTaWduYXR1cmU7XG4gICAgfVxufVxuZXhwb3J0cy5BenVyZVNBU0NyZWRlbnRpYWwgPSBBenVyZVNBU0NyZWRlbnRpYWw7XG4vKipcbiAqIFRlc3RzIGFuIG9iamVjdCB0byBkZXRlcm1pbmUgd2hldGhlciBpdCBpbXBsZW1lbnRzIFNBU0NyZWRlbnRpYWwuXG4gKlxuICogQHBhcmFtIGNyZWRlbnRpYWwgLSBUaGUgYXNzdW1lZCBTQVNDcmVkZW50aWFsIHRvIGJlIHRlc3RlZC5cbiAqL1xuZnVuY3Rpb24gaXNTQVNDcmVkZW50aWFsKGNyZWRlbnRpYWwpIHtcbiAgICByZXR1cm4gKCgwLCBjb3JlX3V0aWxfMS5pc09iamVjdFdpdGhQcm9wZXJ0aWVzKShjcmVkZW50aWFsLCBbXCJzaWduYXR1cmVcIl0pICYmIHR5cGVvZiBjcmVkZW50aWFsLnNpZ25hdHVyZSA9PT0gXCJzdHJpbmdcIik7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1henVyZVNBU0NyZWRlbnRpYWwuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc0JlYXJlclRva2VuID0gaXNCZWFyZXJUb2tlbjtcbmV4cG9ydHMuaXNQb3BUb2tlbiA9IGlzUG9wVG9rZW47XG5leHBvcnRzLmlzVG9rZW5DcmVkZW50aWFsID0gaXNUb2tlbkNyZWRlbnRpYWw7XG4vKipcbiAqIEBpbnRlcm5hbFxuICogQHBhcmFtIGFjY2Vzc1Rva2VuIC0gQWNjZXNzIHRva2VuXG4gKiBAcmV0dXJucyBXaGV0aGVyIGEgdG9rZW4gaXMgYmVhcmVyIHR5cGUgb3Igbm90XG4gKi9cbmZ1bmN0aW9uIGlzQmVhcmVyVG9rZW4oYWNjZXNzVG9rZW4pIHtcbiAgICByZXR1cm4gIWFjY2Vzc1Rva2VuLnRva2VuVHlwZSB8fCBhY2Nlc3NUb2tlbi50b2tlblR5cGUgPT09IFwiQmVhcmVyXCI7XG59XG4vKipcbiAqIEBpbnRlcm5hbFxuICogQHBhcmFtIGFjY2Vzc1Rva2VuIC0gQWNjZXNzIHRva2VuXG4gKiBAcmV0dXJucyBXaGV0aGVyIGEgdG9rZW4gaXMgUG9wIHRva2VuIG9yIG5vdFxuICovXG5mdW5jdGlvbiBpc1BvcFRva2VuKGFjY2Vzc1Rva2VuKSB7XG4gICAgcmV0dXJuIGFjY2Vzc1Rva2VuLnRva2VuVHlwZSA9PT0gXCJwb3BcIjtcbn1cbi8qKlxuICogVGVzdHMgYW4gb2JqZWN0IHRvIGRldGVybWluZSB3aGV0aGVyIGl0IGltcGxlbWVudHMgVG9rZW5DcmVkZW50aWFsLlxuICpcbiAqIEBwYXJhbSBjcmVkZW50aWFsIC0gVGhlIGFzc3VtZWQgVG9rZW5DcmVkZW50aWFsIHRvIGJlIHRlc3RlZC5cbiAqL1xuZnVuY3Rpb24gaXNUb2tlbkNyZWRlbnRpYWwoY3JlZGVudGlhbCkge1xuICAgIC8vIENoZWNrIGZvciBhbiBvYmplY3Qgd2l0aCBhICdnZXRUb2tlbicgZnVuY3Rpb24gYW5kIHBvc3NpYmx5IHdpdGhcbiAgICAvLyBhICdzaWduUmVxdWVzdCcgZnVuY3Rpb24uICBXZSBkbyB0aGlzIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGF0XG4gICAgLy8gYSBTZXJ2aWNlQ2xpZW50Q3JlZGVudGlhbHMgaW1wbGVtZW50b3IgKGxpa2UgVG9rZW5DbGllbnRDcmVkZW50aWFsc1xuICAgIC8vIGluIG1zLXJlc3Qtbm9kZWF1dGgpIGRvZXNuJ3QgZ2V0IG1pc3Rha2VuIGZvciBhIFRva2VuQ3JlZGVudGlhbCBpZlxuICAgIC8vIGl0IGRvZXNuJ3QgYWN0dWFsbHkgaW1wbGVtZW50IFRva2VuQ3JlZGVudGlhbCBhbHNvLlxuICAgIGNvbnN0IGNhc3RDcmVkZW50aWFsID0gY3JlZGVudGlhbDtcbiAgICByZXR1cm4gKGNhc3RDcmVkZW50aWFsICYmXG4gICAgICAgIHR5cGVvZiBjYXN0Q3JlZGVudGlhbC5nZXRUb2tlbiA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgICAgIChjYXN0Q3JlZGVudGlhbC5zaWduUmVxdWVzdCA9PT0gdW5kZWZpbmVkIHx8IGNhc3RDcmVkZW50aWFsLmdldFRva2VuLmxlbmd0aCA+IDApKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRva2VuQ3JlZGVudGlhbC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc1Rva2VuQ3JlZGVudGlhbCA9IGV4cG9ydHMuaXNTQVNDcmVkZW50aWFsID0gZXhwb3J0cy5BenVyZVNBU0NyZWRlbnRpYWwgPSBleHBvcnRzLmlzTmFtZWRLZXlDcmVkZW50aWFsID0gZXhwb3J0cy5BenVyZU5hbWVkS2V5Q3JlZGVudGlhbCA9IGV4cG9ydHMuaXNLZXlDcmVkZW50aWFsID0gZXhwb3J0cy5BenVyZUtleUNyZWRlbnRpYWwgPSB2b2lkIDA7XG52YXIgYXp1cmVLZXlDcmVkZW50aWFsX2pzXzEgPSByZXF1aXJlKFwiLi9henVyZUtleUNyZWRlbnRpYWwuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJBenVyZUtleUNyZWRlbnRpYWxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGF6dXJlS2V5Q3JlZGVudGlhbF9qc18xLkF6dXJlS2V5Q3JlZGVudGlhbDsgfSB9KTtcbnZhciBrZXlDcmVkZW50aWFsX2pzXzEgPSByZXF1aXJlKFwiLi9rZXlDcmVkZW50aWFsLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNLZXlDcmVkZW50aWFsXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBrZXlDcmVkZW50aWFsX2pzXzEuaXNLZXlDcmVkZW50aWFsOyB9IH0pO1xudmFyIGF6dXJlTmFtZWRLZXlDcmVkZW50aWFsX2pzXzEgPSByZXF1aXJlKFwiLi9henVyZU5hbWVkS2V5Q3JlZGVudGlhbC5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkF6dXJlTmFtZWRLZXlDcmVkZW50aWFsXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBhenVyZU5hbWVkS2V5Q3JlZGVudGlhbF9qc18xLkF6dXJlTmFtZWRLZXlDcmVkZW50aWFsOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNOYW1lZEtleUNyZWRlbnRpYWxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGF6dXJlTmFtZWRLZXlDcmVkZW50aWFsX2pzXzEuaXNOYW1lZEtleUNyZWRlbnRpYWw7IH0gfSk7XG52YXIgYXp1cmVTQVNDcmVkZW50aWFsX2pzXzEgPSByZXF1aXJlKFwiLi9henVyZVNBU0NyZWRlbnRpYWwuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJBenVyZVNBU0NyZWRlbnRpYWxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGF6dXJlU0FTQ3JlZGVudGlhbF9qc18xLkF6dXJlU0FTQ3JlZGVudGlhbDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzU0FTQ3JlZGVudGlhbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYXp1cmVTQVNDcmVkZW50aWFsX2pzXzEuaXNTQVNDcmVkZW50aWFsOyB9IH0pO1xudmFyIHRva2VuQ3JlZGVudGlhbF9qc18xID0gcmVxdWlyZShcIi4vdG9rZW5DcmVkZW50aWFsLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNUb2tlbkNyZWRlbnRpYWxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRva2VuQ3JlZGVudGlhbF9qc18xLmlzVG9rZW5DcmVkZW50aWFsOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5waXBlbGluZUNvbnRhaW5zRGlzYWJsZUtlZXBBbGl2ZVBvbGljeSA9IGV4cG9ydHMuY3JlYXRlRGlzYWJsZUtlZXBBbGl2ZVBvbGljeSA9IGV4cG9ydHMuZGlzYWJsZUtlZXBBbGl2ZVBvbGljeU5hbWUgPSB2b2lkIDA7XG5leHBvcnRzLmRpc2FibGVLZWVwQWxpdmVQb2xpY3lOYW1lID0gXCJEaXNhYmxlS2VlcEFsaXZlUG9saWN5XCI7XG5mdW5jdGlvbiBjcmVhdGVEaXNhYmxlS2VlcEFsaXZlUG9saWN5KCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGV4cG9ydHMuZGlzYWJsZUtlZXBBbGl2ZVBvbGljeU5hbWUsXG4gICAgICAgIGFzeW5jIHNlbmRSZXF1ZXN0KHJlcXVlc3QsIG5leHQpIHtcbiAgICAgICAgICAgIHJlcXVlc3QuZGlzYWJsZUtlZXBBbGl2ZSA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gbmV4dChyZXF1ZXN0KTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuZXhwb3J0cy5jcmVhdGVEaXNhYmxlS2VlcEFsaXZlUG9saWN5ID0gY3JlYXRlRGlzYWJsZUtlZXBBbGl2ZVBvbGljeTtcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIHBpcGVsaW5lQ29udGFpbnNEaXNhYmxlS2VlcEFsaXZlUG9saWN5KHBpcGVsaW5lKSB7XG4gICAgcmV0dXJuIHBpcGVsaW5lLmdldE9yZGVyZWRQb2xpY2llcygpLnNvbWUoKHBvbGljeSkgPT4gcG9saWN5Lm5hbWUgPT09IGV4cG9ydHMuZGlzYWJsZUtlZXBBbGl2ZVBvbGljeU5hbWUpO1xufVxuZXhwb3J0cy5waXBlbGluZUNvbnRhaW5zRGlzYWJsZUtlZXBBbGl2ZVBvbGljeSA9IHBpcGVsaW5lQ29udGFpbnNEaXNhYmxlS2VlcEFsaXZlUG9saWN5O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGlzYWJsZUtlZXBBbGl2ZVBvbGljeS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlY29kZVN0cmluZ1RvU3RyaW5nID0gZXhwb3J0cy5kZWNvZGVTdHJpbmcgPSBleHBvcnRzLmVuY29kZUJ5dGVBcnJheSA9IGV4cG9ydHMuZW5jb2RlU3RyaW5nID0gdm9pZCAwO1xuLyoqXG4gKiBFbmNvZGVzIGEgc3RyaW5nIGluIGJhc2U2NCBmb3JtYXQuXG4gKiBAcGFyYW0gdmFsdWUgLSB0aGUgc3RyaW5nIHRvIGVuY29kZVxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIGVuY29kZVN0cmluZyh2YWx1ZSkge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbSh2YWx1ZSkudG9TdHJpbmcoXCJiYXNlNjRcIik7XG59XG5leHBvcnRzLmVuY29kZVN0cmluZyA9IGVuY29kZVN0cmluZztcbi8qKlxuICogRW5jb2RlcyBhIGJ5dGUgYXJyYXkgaW4gYmFzZTY0IGZvcm1hdC5cbiAqIEBwYXJhbSB2YWx1ZSAtIHRoZSBVaW50OEFyYXkgdG8gZW5jb2RlXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gZW5jb2RlQnl0ZUFycmF5KHZhbHVlKSB7XG4gICAgY29uc3QgYnVmZmVyVmFsdWUgPSB2YWx1ZSBpbnN0YW5jZW9mIEJ1ZmZlciA/IHZhbHVlIDogQnVmZmVyLmZyb20odmFsdWUuYnVmZmVyKTtcbiAgICByZXR1cm4gYnVmZmVyVmFsdWUudG9TdHJpbmcoXCJiYXNlNjRcIik7XG59XG5leHBvcnRzLmVuY29kZUJ5dGVBcnJheSA9IGVuY29kZUJ5dGVBcnJheTtcbi8qKlxuICogRGVjb2RlcyBhIGJhc2U2NCBzdHJpbmcgaW50byBhIGJ5dGUgYXJyYXkuXG4gKiBAcGFyYW0gdmFsdWUgLSB0aGUgYmFzZTY0IHN0cmluZyB0byBkZWNvZGVcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBkZWNvZGVTdHJpbmcodmFsdWUpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20odmFsdWUsIFwiYmFzZTY0XCIpO1xufVxuZXhwb3J0cy5kZWNvZGVTdHJpbmcgPSBkZWNvZGVTdHJpbmc7XG4vKipcbiAqIERlY29kZXMgYSBiYXNlNjQgc3RyaW5nIGludG8gYSBzdHJpbmcuXG4gKiBAcGFyYW0gdmFsdWUgLSB0aGUgYmFzZTY0IHN0cmluZyB0byBkZWNvZGVcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBkZWNvZGVTdHJpbmdUb1N0cmluZyh2YWx1ZSkge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbSh2YWx1ZSwgXCJiYXNlNjRcIikudG9TdHJpbmcoKTtcbn1cbmV4cG9ydHMuZGVjb2RlU3RyaW5nVG9TdHJpbmcgPSBkZWNvZGVTdHJpbmdUb1N0cmluZztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJhc2U2NC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlhNTF9DSEFSS0VZID0gZXhwb3J0cy5YTUxfQVRUUktFWSA9IHZvaWQgMDtcbi8qKlxuICogRGVmYXVsdCBrZXkgdXNlZCB0byBhY2Nlc3MgdGhlIFhNTCBhdHRyaWJ1dGVzLlxuICovXG5leHBvcnRzLlhNTF9BVFRSS0VZID0gXCIkXCI7XG4vKipcbiAqIERlZmF1bHQga2V5IHVzZWQgdG8gYWNjZXNzIHRoZSBYTUwgdmFsdWUgY29udGVudC5cbiAqL1xuZXhwb3J0cy5YTUxfQ0hBUktFWSA9IFwiX1wiO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW50ZXJmYWNlcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmZsYXR0ZW5SZXNwb25zZSA9IGV4cG9ydHMuaXNWYWxpZFV1aWQgPSBleHBvcnRzLmlzRHVyYXRpb24gPSBleHBvcnRzLmlzUHJpbWl0aXZlQm9keSA9IHZvaWQgMDtcbi8qKlxuICogQSB0eXBlIGd1YXJkIGZvciBhIHByaW1pdGl2ZSByZXNwb25zZSBib2R5LlxuICogQHBhcmFtIHZhbHVlIC0gVmFsdWUgdG8gdGVzdFxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBpc1ByaW1pdGl2ZUJvZHkodmFsdWUsIG1hcHBlclR5cGVOYW1lKSB7XG4gICAgcmV0dXJuIChtYXBwZXJUeXBlTmFtZSAhPT0gXCJDb21wb3NpdGVcIiAmJlxuICAgICAgICBtYXBwZXJUeXBlTmFtZSAhPT0gXCJEaWN0aW9uYXJ5XCIgJiZcbiAgICAgICAgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fFxuICAgICAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiIHx8XG4gICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwiYm9vbGVhblwiIHx8XG4gICAgICAgICAgICAobWFwcGVyVHlwZU5hbWUgPT09IG51bGwgfHwgbWFwcGVyVHlwZU5hbWUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG1hcHBlclR5cGVOYW1lLm1hdGNoKC9eKERhdGV8RGF0ZVRpbWV8RGF0ZVRpbWVSZmMxMTIzfFVuaXhUaW1lfEJ5dGVBcnJheXxCYXNlNjRVcmwpJC9pKSkgIT09XG4gICAgICAgICAgICAgICAgbnVsbCB8fFxuICAgICAgICAgICAgdmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgdmFsdWUgPT09IG51bGwpKTtcbn1cbmV4cG9ydHMuaXNQcmltaXRpdmVCb2R5ID0gaXNQcmltaXRpdmVCb2R5O1xuY29uc3QgdmFsaWRhdGVJU09EdXJhdGlvbiA9IC9eKC18XFwrKT9QKD86KFstK10/WzAtOSwuXSopWSk/KD86KFstK10/WzAtOSwuXSopTSk/KD86KFstK10/WzAtOSwuXSopVyk/KD86KFstK10/WzAtOSwuXSopRCk/KD86VCg/OihbLStdP1swLTksLl0qKUgpPyg/OihbLStdP1swLTksLl0qKU0pPyg/OihbLStdP1swLTksLl0qKVMpPyk/JC87XG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gc3RyaW5nIGlzIGluIElTTyA4NjAxIGZvcm1hdC5cbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBiZSB2YWxpZGF0ZWQgZm9yIElTTyA4NjAxIGR1cmF0aW9uIGZvcm1hdC5cbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBpc0R1cmF0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbGlkYXRlSVNPRHVyYXRpb24udGVzdCh2YWx1ZSk7XG59XG5leHBvcnRzLmlzRHVyYXRpb24gPSBpc0R1cmF0aW9uO1xuY29uc3QgdmFsaWRVdWlkUmVnZXggPSAvXlswLTlhLWZBLUZdezh9LVswLTlhLWZBLUZdezR9LVswLTlhLWZBLUZdezR9LVswLTlhLWZBLUZdezR9LVswLTlhLWZBLUZdezEyfSQvaTtcbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBwcm92aWRlZCB1dWlkIGlzIHZhbGlkLlxuICpcbiAqIEBwYXJhbSB1dWlkIC0gVGhlIHV1aWQgdGhhdCBuZWVkcyB0byBiZSB2YWxpZGF0ZWQuXG4gKlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRVdWlkKHV1aWQpIHtcbiAgICByZXR1cm4gdmFsaWRVdWlkUmVnZXgudGVzdCh1dWlkKTtcbn1cbmV4cG9ydHMuaXNWYWxpZFV1aWQgPSBpc1ZhbGlkVXVpZDtcbi8qKlxuICogTWFwcyB0aGUgcmVzcG9uc2UgYXMgZm9sbG93czpcbiAqIC0gd3JhcHMgdGhlIHJlc3BvbnNlIGJvZHkgaWYgbmVlZGVkICh0eXBpY2FsbHkgaWYgaXRzIHR5cGUgaXMgcHJpbWl0aXZlKS5cbiAqIC0gcmV0dXJucyBudWxsIGlmIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgaGVhZGVycyBhbmQgdGhlIGJvZHkgaXMgZW1wdHkuXG4gKiAtIG90aGVyd2lzZSwgcmV0dXJucyB0aGUgY29tYmluYXRpb24gb2YgdGhlIGhlYWRlcnMgYW5kIHRoZSBib2R5LlxuICpcbiAqIEBwYXJhbSByZXNwb25zZU9iamVjdCAtIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHBhcnNlZCByZXNwb25zZVxuICogQHJldHVybnMgdGhlIHJlc3BvbnNlIHRoYXQgd2lsbCBiZSByZXR1cm5lZCB0byB0aGUgdXNlciB3aGljaCBjYW4gYmUgbnVsbCBhbmQvb3Igd3JhcHBlZFxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBoYW5kbGVOdWxsYWJsZVJlc3BvbnNlQW5kV3JhcHBhYmxlQm9keShyZXNwb25zZU9iamVjdCkge1xuICAgIGNvbnN0IGNvbWJpbmVkSGVhZGVyc0FuZEJvZHkgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHJlc3BvbnNlT2JqZWN0LmhlYWRlcnMpLCByZXNwb25zZU9iamVjdC5ib2R5KTtcbiAgICBpZiAocmVzcG9uc2VPYmplY3QuaGFzTnVsbGFibGVUeXBlICYmXG4gICAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGNvbWJpbmVkSGVhZGVyc0FuZEJvZHkpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VPYmplY3Quc2hvdWxkV3JhcEJvZHkgPyB7IGJvZHk6IG51bGwgfSA6IG51bGw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VPYmplY3Quc2hvdWxkV3JhcEJvZHlcbiAgICAgICAgICAgID8gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCByZXNwb25zZU9iamVjdC5oZWFkZXJzKSwgeyBib2R5OiByZXNwb25zZU9iamVjdC5ib2R5IH0pIDogY29tYmluZWRIZWFkZXJzQW5kQm9keTtcbiAgICB9XG59XG4vKipcbiAqIFRha2UgYSBgRnVsbE9wZXJhdGlvblJlc3BvbnNlYCBhbmQgdHVybiBpdCBpbnRvIGEgZmxhdFxuICogcmVzcG9uc2Ugb2JqZWN0IHRvIGhhbmQgYmFjayB0byB0aGUgY29uc3VtZXIuXG4gKiBAcGFyYW0gZnVsbFJlc3BvbnNlIC0gVGhlIHByb2Nlc3NlZCByZXNwb25zZSBmcm9tIHRoZSBvcGVyYXRpb24gcmVxdWVzdFxuICogQHBhcmFtIHJlc3BvbnNlU3BlYyAtIFRoZSByZXNwb25zZSBtYXAgZnJvbSB0aGUgT3BlcmF0aW9uU3BlY1xuICpcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBmbGF0dGVuUmVzcG9uc2UoZnVsbFJlc3BvbnNlLCByZXNwb25zZVNwZWMpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGNvbnN0IHBhcnNlZEhlYWRlcnMgPSBmdWxsUmVzcG9uc2UucGFyc2VkSGVhZGVycztcbiAgICAvLyBoZWFkIG1ldGhvZHMgbmV2ZXIgaGF2ZSBhIGJvZHksIGJ1dCB3ZSByZXR1cm4gYSBib29sZWFuIHNldCB0byBib2R5IHByb3BlcnR5XG4gICAgLy8gdG8gaW5kaWNhdGUgcHJlc2VuY2UvYWJzZW5jZSBvZiB0aGUgcmVzb3VyY2VcbiAgICBpZiAoZnVsbFJlc3BvbnNlLnJlcXVlc3QubWV0aG9kID09PSBcIkhFQURcIikge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwYXJzZWRIZWFkZXJzKSwgeyBib2R5OiBmdWxsUmVzcG9uc2UucGFyc2VkQm9keSB9KTtcbiAgICB9XG4gICAgY29uc3QgYm9keU1hcHBlciA9IHJlc3BvbnNlU3BlYyAmJiByZXNwb25zZVNwZWMuYm9keU1hcHBlcjtcbiAgICBjb25zdCBpc051bGxhYmxlID0gQm9vbGVhbihib2R5TWFwcGVyID09PSBudWxsIHx8IGJvZHlNYXBwZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGJvZHlNYXBwZXIubnVsbGFibGUpO1xuICAgIGNvbnN0IGV4cGVjdGVkQm9keVR5cGVOYW1lID0gYm9keU1hcHBlciA9PT0gbnVsbCB8fCBib2R5TWFwcGVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBib2R5TWFwcGVyLnR5cGUubmFtZTtcbiAgICAvKiogSWYgdGhlIGJvZHkgaXMgYXNrZWQgZm9yLCB3ZSBsb29rIGF0IHRoZSBleHBlY3RlZCBib2R5IHR5cGUgdG8gaGFuZGxlIGl0ICovXG4gICAgaWYgKGV4cGVjdGVkQm9keVR5cGVOYW1lID09PSBcIlN0cmVhbVwiKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHBhcnNlZEhlYWRlcnMpLCB7IGJsb2JCb2R5OiBmdWxsUmVzcG9uc2UuYmxvYkJvZHksIHJlYWRhYmxlU3RyZWFtQm9keTogZnVsbFJlc3BvbnNlLnJlYWRhYmxlU3RyZWFtQm9keSB9KTtcbiAgICB9XG4gICAgY29uc3QgbW9kZWxQcm9wZXJ0aWVzID0gKGV4cGVjdGVkQm9keVR5cGVOYW1lID09PSBcIkNvbXBvc2l0ZVwiICYmXG4gICAgICAgIGJvZHlNYXBwZXIudHlwZS5tb2RlbFByb3BlcnRpZXMpIHx8XG4gICAgICAgIHt9O1xuICAgIGNvbnN0IGlzUGFnZWFibGVSZXNwb25zZSA9IE9iamVjdC5rZXlzKG1vZGVsUHJvcGVydGllcykuc29tZSgoaykgPT4gbW9kZWxQcm9wZXJ0aWVzW2tdLnNlcmlhbGl6ZWROYW1lID09PSBcIlwiKTtcbiAgICBpZiAoZXhwZWN0ZWRCb2R5VHlwZU5hbWUgPT09IFwiU2VxdWVuY2VcIiB8fCBpc1BhZ2VhYmxlUmVzcG9uc2UpIHtcbiAgICAgICAgY29uc3QgYXJyYXlSZXNwb25zZSA9IChfYSA9IGZ1bGxSZXNwb25zZS5wYXJzZWRCb2R5KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBbXTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMobW9kZWxQcm9wZXJ0aWVzKSkge1xuICAgICAgICAgICAgaWYgKG1vZGVsUHJvcGVydGllc1trZXldLnNlcmlhbGl6ZWROYW1lKSB7XG4gICAgICAgICAgICAgICAgYXJyYXlSZXNwb25zZVtrZXldID0gKF9iID0gZnVsbFJlc3BvbnNlLnBhcnNlZEJvZHkpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYltrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJzZWRIZWFkZXJzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhwYXJzZWRIZWFkZXJzKSkge1xuICAgICAgICAgICAgICAgIGFycmF5UmVzcG9uc2Vba2V5XSA9IHBhcnNlZEhlYWRlcnNba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNOdWxsYWJsZSAmJlxuICAgICAgICAgICAgIWZ1bGxSZXNwb25zZS5wYXJzZWRCb2R5ICYmXG4gICAgICAgICAgICAhcGFyc2VkSGVhZGVycyAmJlxuICAgICAgICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobW9kZWxQcm9wZXJ0aWVzKS5sZW5ndGggPT09IDBcbiAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgOiBhcnJheVJlc3BvbnNlO1xuICAgIH1cbiAgICByZXR1cm4gaGFuZGxlTnVsbGFibGVSZXNwb25zZUFuZFdyYXBwYWJsZUJvZHkoe1xuICAgICAgICBib2R5OiBmdWxsUmVzcG9uc2UucGFyc2VkQm9keSxcbiAgICAgICAgaGVhZGVyczogcGFyc2VkSGVhZGVycyxcbiAgICAgICAgaGFzTnVsbGFibGVUeXBlOiBpc051bGxhYmxlLFxuICAgICAgICBzaG91bGRXcmFwQm9keTogaXNQcmltaXRpdmVCb2R5KGZ1bGxSZXNwb25zZS5wYXJzZWRCb2R5LCBleHBlY3RlZEJvZHlUeXBlTmFtZSksXG4gICAgfSk7XG59XG5leHBvcnRzLmZsYXR0ZW5SZXNwb25zZSA9IGZsYXR0ZW5SZXNwb25zZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTWFwcGVyVHlwZU5hbWVzID0gZXhwb3J0cy5jcmVhdGVTZXJpYWxpemVyID0gdm9pZCAwO1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbmNvbnN0IGJhc2U2NCA9IHRzbGliXzEuX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL2Jhc2U2NC5qc1wiKSk7XG5jb25zdCBpbnRlcmZhY2VzX2pzXzEgPSByZXF1aXJlKFwiLi9pbnRlcmZhY2VzLmpzXCIpO1xuY29uc3QgdXRpbHNfanNfMSA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY2xhc3MgU2VyaWFsaXplckltcGwge1xuICAgIGNvbnN0cnVjdG9yKG1vZGVsTWFwcGVycyA9IHt9LCBpc1hNTCA9IGZhbHNlKSB7XG4gICAgICAgIHRoaXMubW9kZWxNYXBwZXJzID0gbW9kZWxNYXBwZXJzO1xuICAgICAgICB0aGlzLmlzWE1MID0gaXNYTUw7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIFJlbW92aW5nIHRoZSBjb25zdHJhaW50cyB2YWxpZGF0aW9uIG9uIGNsaWVudCBzaWRlLlxuICAgICAqL1xuICAgIHZhbGlkYXRlQ29uc3RyYWludHMobWFwcGVyLCB2YWx1ZSwgb2JqZWN0TmFtZSkge1xuICAgICAgICBjb25zdCBmYWlsVmFsaWRhdGlvbiA9IChjb25zdHJhaW50TmFtZSwgY29uc3RyYWludFZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFwiJHtvYmplY3ROYW1lfVwiIHdpdGggdmFsdWUgXCIke3ZhbHVlfVwiIHNob3VsZCBzYXRpc2Z5IHRoZSBjb25zdHJhaW50IFwiJHtjb25zdHJhaW50TmFtZX1cIjogJHtjb25zdHJhaW50VmFsdWV9LmApO1xuICAgICAgICB9O1xuICAgICAgICBpZiAobWFwcGVyLmNvbnN0cmFpbnRzICYmIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgRXhjbHVzaXZlTWF4aW11bSwgRXhjbHVzaXZlTWluaW11bSwgSW5jbHVzaXZlTWF4aW11bSwgSW5jbHVzaXZlTWluaW11bSwgTWF4SXRlbXMsIE1heExlbmd0aCwgTWluSXRlbXMsIE1pbkxlbmd0aCwgTXVsdGlwbGVPZiwgUGF0dGVybiwgVW5pcXVlSXRlbXMsIH0gPSBtYXBwZXIuY29uc3RyYWludHM7XG4gICAgICAgICAgICBpZiAoRXhjbHVzaXZlTWF4aW11bSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlID49IEV4Y2x1c2l2ZU1heGltdW0pIHtcbiAgICAgICAgICAgICAgICBmYWlsVmFsaWRhdGlvbihcIkV4Y2x1c2l2ZU1heGltdW1cIiwgRXhjbHVzaXZlTWF4aW11bSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoRXhjbHVzaXZlTWluaW11bSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlIDw9IEV4Y2x1c2l2ZU1pbmltdW0pIHtcbiAgICAgICAgICAgICAgICBmYWlsVmFsaWRhdGlvbihcIkV4Y2x1c2l2ZU1pbmltdW1cIiwgRXhjbHVzaXZlTWluaW11bSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoSW5jbHVzaXZlTWF4aW11bSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlID4gSW5jbHVzaXZlTWF4aW11bSkge1xuICAgICAgICAgICAgICAgIGZhaWxWYWxpZGF0aW9uKFwiSW5jbHVzaXZlTWF4aW11bVwiLCBJbmNsdXNpdmVNYXhpbXVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChJbmNsdXNpdmVNaW5pbXVtICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgPCBJbmNsdXNpdmVNaW5pbXVtKSB7XG4gICAgICAgICAgICAgICAgZmFpbFZhbGlkYXRpb24oXCJJbmNsdXNpdmVNaW5pbXVtXCIsIEluY2x1c2l2ZU1pbmltdW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKE1heEl0ZW1zICE9PSB1bmRlZmluZWQgJiYgdmFsdWUubGVuZ3RoID4gTWF4SXRlbXMpIHtcbiAgICAgICAgICAgICAgICBmYWlsVmFsaWRhdGlvbihcIk1heEl0ZW1zXCIsIE1heEl0ZW1zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChNYXhMZW5ndGggIT09IHVuZGVmaW5lZCAmJiB2YWx1ZS5sZW5ndGggPiBNYXhMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBmYWlsVmFsaWRhdGlvbihcIk1heExlbmd0aFwiLCBNYXhMZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKE1pbkl0ZW1zICE9PSB1bmRlZmluZWQgJiYgdmFsdWUubGVuZ3RoIDwgTWluSXRlbXMpIHtcbiAgICAgICAgICAgICAgICBmYWlsVmFsaWRhdGlvbihcIk1pbkl0ZW1zXCIsIE1pbkl0ZW1zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChNaW5MZW5ndGggIT09IHVuZGVmaW5lZCAmJiB2YWx1ZS5sZW5ndGggPCBNaW5MZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBmYWlsVmFsaWRhdGlvbihcIk1pbkxlbmd0aFwiLCBNaW5MZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKE11bHRpcGxlT2YgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAlIE11bHRpcGxlT2YgIT09IDApIHtcbiAgICAgICAgICAgICAgICBmYWlsVmFsaWRhdGlvbihcIk11bHRpcGxlT2ZcIiwgTXVsdGlwbGVPZik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoUGF0dGVybikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhdHRlcm4gPSB0eXBlb2YgUGF0dGVybiA9PT0gXCJzdHJpbmdcIiA/IG5ldyBSZWdFeHAoUGF0dGVybikgOiBQYXR0ZXJuO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIgfHwgdmFsdWUubWF0Y2gocGF0dGVybikgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgZmFpbFZhbGlkYXRpb24oXCJQYXR0ZXJuXCIsIFBhdHRlcm4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChVbmlxdWVJdGVtcyAmJlxuICAgICAgICAgICAgICAgIHZhbHVlLnNvbWUoKGl0ZW0sIGksIGFyKSA9PiBhci5pbmRleE9mKGl0ZW0pICE9PSBpKSkge1xuICAgICAgICAgICAgICAgIGZhaWxWYWxpZGF0aW9uKFwiVW5pcXVlSXRlbXNcIiwgVW5pcXVlSXRlbXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNlcmlhbGl6ZSB0aGUgZ2l2ZW4gb2JqZWN0IGJhc2VkIG9uIGl0cyBtZXRhZGF0YSBkZWZpbmVkIGluIHRoZSBtYXBwZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSBtYXBwZXIgLSBUaGUgbWFwcGVyIHdoaWNoIGRlZmluZXMgdGhlIG1ldGFkYXRhIG9mIHRoZSBzZXJpYWxpemFibGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gb2JqZWN0IC0gQSB2YWxpZCBKYXZhc2NyaXB0IG9iamVjdCB0byBiZSBzZXJpYWxpemVkXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb2JqZWN0TmFtZSAtIE5hbWUgb2YgdGhlIHNlcmlhbGl6ZWQgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIGFkZGl0aW9uYWwgb3B0aW9ucyB0byBzZXJpYWxpemF0aW9uXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBBIHZhbGlkIHNlcmlhbGl6ZWQgSmF2YXNjcmlwdCBvYmplY3RcbiAgICAgKi9cbiAgICBzZXJpYWxpemUobWFwcGVyLCBvYmplY3QsIG9iamVjdE5hbWUsIG9wdGlvbnMgPSB7IHhtbDoge30gfSkge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYztcbiAgICAgICAgY29uc3QgdXBkYXRlZE9wdGlvbnMgPSB7XG4gICAgICAgICAgICB4bWw6IHtcbiAgICAgICAgICAgICAgICByb290TmFtZTogKF9hID0gb3B0aW9ucy54bWwucm9vdE5hbWUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFwiXCIsXG4gICAgICAgICAgICAgICAgaW5jbHVkZVJvb3Q6IChfYiA9IG9wdGlvbnMueG1sLmluY2x1ZGVSb290KSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB4bWxDaGFyS2V5OiAoX2MgPSBvcHRpb25zLnhtbC54bWxDaGFyS2V5KSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiBpbnRlcmZhY2VzX2pzXzEuWE1MX0NIQVJLRVksXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBsZXQgcGF5bG9hZCA9IHt9O1xuICAgICAgICBjb25zdCBtYXBwZXJUeXBlID0gbWFwcGVyLnR5cGUubmFtZTtcbiAgICAgICAgaWYgKCFvYmplY3ROYW1lKSB7XG4gICAgICAgICAgICBvYmplY3ROYW1lID0gbWFwcGVyLnNlcmlhbGl6ZWROYW1lO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXBwZXJUeXBlLm1hdGNoKC9eU2VxdWVuY2UkL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICBwYXlsb2FkID0gW107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hcHBlci5pc0NvbnN0YW50KSB7XG4gICAgICAgICAgICBvYmplY3QgPSBtYXBwZXIuZGVmYXVsdFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRoaXMgdGFibGUgb2YgYWxsb3dlZCB2YWx1ZXMgc2hvdWxkIGhlbHAgZXhwbGFpblxuICAgICAgICAvLyB0aGUgbWFwcGVyLnJlcXVpcmVkIGFuZCBtYXBwZXIubnVsbGFibGUgcHJvcGVydGllcy5cbiAgICAgICAgLy8gWCBtZWFucyBcIm5laXRoZXIgdW5kZWZpbmVkIG9yIG51bGwgYXJlIGFsbG93ZWRcIi5cbiAgICAgICAgLy8gICAgICAgICAgIHx8IHJlcXVpcmVkXG4gICAgICAgIC8vICAgICAgICAgICB8fCB0cnVlICAgICAgfCBmYWxzZVxuICAgICAgICAvLyAgbnVsbGFibGUgfHwgPT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgICAgLy8gICAgICB0cnVlIHx8IG51bGwgICAgICB8IHVuZGVmaW5lZC9udWxsXG4gICAgICAgIC8vICAgICBmYWxzZSB8fCBYICAgICAgICAgfCB1bmRlZmluZWRcbiAgICAgICAgLy8gdW5kZWZpbmVkIHx8IFggICAgICAgICB8IHVuZGVmaW5lZC9udWxsXG4gICAgICAgIGNvbnN0IHsgcmVxdWlyZWQsIG51bGxhYmxlIH0gPSBtYXBwZXI7XG4gICAgICAgIGlmIChyZXF1aXJlZCAmJiBudWxsYWJsZSAmJiBvYmplY3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke29iamVjdE5hbWV9IGNhbm5vdCBiZSB1bmRlZmluZWQuYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlcXVpcmVkICYmICFudWxsYWJsZSAmJiAob2JqZWN0ID09PSB1bmRlZmluZWQgfHwgb2JqZWN0ID09PSBudWxsKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke29iamVjdE5hbWV9IGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC5gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXJlcXVpcmVkICYmIG51bGxhYmxlID09PSBmYWxzZSAmJiBvYmplY3QgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtvYmplY3ROYW1lfSBjYW5ub3QgYmUgbnVsbC5gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob2JqZWN0ID09PSB1bmRlZmluZWQgfHwgb2JqZWN0ID09PSBudWxsKSB7XG4gICAgICAgICAgICBwYXlsb2FkID0gb2JqZWN0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKG1hcHBlclR5cGUubWF0Y2goL15hbnkkL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZCA9IG9iamVjdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1hcHBlclR5cGUubWF0Y2goL14oTnVtYmVyfFN0cmluZ3xCb29sZWFufE9iamVjdHxTdHJlYW18VXVpZCkkL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZCA9IHNlcmlhbGl6ZUJhc2ljVHlwZXMobWFwcGVyVHlwZSwgb2JqZWN0TmFtZSwgb2JqZWN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1hcHBlclR5cGUubWF0Y2goL15FbnVtJC9pKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVudW1NYXBwZXIgPSBtYXBwZXI7XG4gICAgICAgICAgICAgICAgcGF5bG9hZCA9IHNlcmlhbGl6ZUVudW1UeXBlKG9iamVjdE5hbWUsIGVudW1NYXBwZXIudHlwZS5hbGxvd2VkVmFsdWVzLCBvYmplY3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobWFwcGVyVHlwZS5tYXRjaCgvXihEYXRlfERhdGVUaW1lfFRpbWVTcGFufERhdGVUaW1lUmZjMTEyM3xVbml4VGltZSkkL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZCA9IHNlcmlhbGl6ZURhdGVUeXBlcyhtYXBwZXJUeXBlLCBvYmplY3QsIG9iamVjdE5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobWFwcGVyVHlwZS5tYXRjaCgvXkJ5dGVBcnJheSQvaSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBwYXlsb2FkID0gc2VyaWFsaXplQnl0ZUFycmF5VHlwZShvYmplY3ROYW1lLCBvYmplY3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobWFwcGVyVHlwZS5tYXRjaCgvXkJhc2U2NFVybCQvaSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBwYXlsb2FkID0gc2VyaWFsaXplQmFzZTY0VXJsVHlwZShvYmplY3ROYW1lLCBvYmplY3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobWFwcGVyVHlwZS5tYXRjaCgvXlNlcXVlbmNlJC9pKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHBheWxvYWQgPSBzZXJpYWxpemVTZXF1ZW5jZVR5cGUodGhpcywgbWFwcGVyLCBvYmplY3QsIG9iamVjdE5hbWUsIEJvb2xlYW4odGhpcy5pc1hNTCksIHVwZGF0ZWRPcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1hcHBlclR5cGUubWF0Y2goL15EaWN0aW9uYXJ5JC9pKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHBheWxvYWQgPSBzZXJpYWxpemVEaWN0aW9uYXJ5VHlwZSh0aGlzLCBtYXBwZXIsIG9iamVjdCwgb2JqZWN0TmFtZSwgQm9vbGVhbih0aGlzLmlzWE1MKSwgdXBkYXRlZE9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobWFwcGVyVHlwZS5tYXRjaCgvXkNvbXBvc2l0ZSQvaSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBwYXlsb2FkID0gc2VyaWFsaXplQ29tcG9zaXRlVHlwZSh0aGlzLCBtYXBwZXIsIG9iamVjdCwgb2JqZWN0TmFtZSwgQm9vbGVhbih0aGlzLmlzWE1MKSwgdXBkYXRlZE9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZXNlcmlhbGl6ZSB0aGUgZ2l2ZW4gb2JqZWN0IGJhc2VkIG9uIGl0cyBtZXRhZGF0YSBkZWZpbmVkIGluIHRoZSBtYXBwZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSBtYXBwZXIgLSBUaGUgbWFwcGVyIHdoaWNoIGRlZmluZXMgdGhlIG1ldGFkYXRhIG9mIHRoZSBzZXJpYWxpemFibGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVzcG9uc2VCb2R5IC0gQSB2YWxpZCBKYXZhc2NyaXB0IGVudGl0eSB0byBiZSBkZXNlcmlhbGl6ZWRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvYmplY3ROYW1lIC0gTmFtZSBvZiB0aGUgZGVzZXJpYWxpemVkIG9iamVjdFxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBDb250cm9scyBiZWhhdmlvciBvZiBYTUwgcGFyc2VyIGFuZCBidWlsZGVyLlxuICAgICAqXG4gICAgICogQHJldHVybnMgQSB2YWxpZCBkZXNlcmlhbGl6ZWQgSmF2YXNjcmlwdCBvYmplY3RcbiAgICAgKi9cbiAgICBkZXNlcmlhbGl6ZShtYXBwZXIsIHJlc3BvbnNlQm9keSwgb2JqZWN0TmFtZSwgb3B0aW9ucyA9IHsgeG1sOiB7fSB9KSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZDtcbiAgICAgICAgY29uc3QgdXBkYXRlZE9wdGlvbnMgPSB7XG4gICAgICAgICAgICB4bWw6IHtcbiAgICAgICAgICAgICAgICByb290TmFtZTogKF9hID0gb3B0aW9ucy54bWwucm9vdE5hbWUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFwiXCIsXG4gICAgICAgICAgICAgICAgaW5jbHVkZVJvb3Q6IChfYiA9IG9wdGlvbnMueG1sLmluY2x1ZGVSb290KSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB4bWxDaGFyS2V5OiAoX2MgPSBvcHRpb25zLnhtbC54bWxDaGFyS2V5KSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiBpbnRlcmZhY2VzX2pzXzEuWE1MX0NIQVJLRVksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaWdub3JlVW5rbm93blByb3BlcnRpZXM6IChfZCA9IG9wdGlvbnMuaWdub3JlVW5rbm93blByb3BlcnRpZXMpICE9PSBudWxsICYmIF9kICE9PSB2b2lkIDAgPyBfZCA6IGZhbHNlLFxuICAgICAgICB9O1xuICAgICAgICBpZiAocmVzcG9uc2VCb2R5ID09PSB1bmRlZmluZWQgfHwgcmVzcG9uc2VCb2R5ID09PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1hNTCAmJiBtYXBwZXIudHlwZS5uYW1lID09PSBcIlNlcXVlbmNlXCIgJiYgIW1hcHBlci54bWxJc1dyYXBwZWQpIHtcbiAgICAgICAgICAgICAgICAvLyBFZGdlIGNhc2UgZm9yIGVtcHR5IFhNTCBub24td3JhcHBlZCBsaXN0cy4geG1sMmpzIGNhbid0IGRpc3Rpbmd1aXNoXG4gICAgICAgICAgICAgICAgLy8gYmV0d2VlbiB0aGUgbGlzdCBiZWluZyBlbXB0eSB2ZXJzdXMgYmVpbmcgbWlzc2luZyxcbiAgICAgICAgICAgICAgICAvLyBzbyBsZXQncyBkbyB0aGUgbW9yZSB1c2VyLWZyaWVuZGx5IHRoaW5nIGFuZCByZXR1cm4gYW4gZW1wdHkgbGlzdC5cbiAgICAgICAgICAgICAgICByZXNwb25zZUJvZHkgPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHNwZWNpZmljYWxseSBjaGVjayBmb3IgdW5kZWZpbmVkIGFzIGRlZmF1bHQgdmFsdWUgY2FuIGJlIGEgZmFsc2V5IHZhbHVlIGAwLCBcIlwiLCBmYWxzZSwgbnVsbGBcbiAgICAgICAgICAgIGlmIChtYXBwZXIuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZUJvZHkgPSBtYXBwZXIuZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlQm9keTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcGF5bG9hZDtcbiAgICAgICAgY29uc3QgbWFwcGVyVHlwZSA9IG1hcHBlci50eXBlLm5hbWU7XG4gICAgICAgIGlmICghb2JqZWN0TmFtZSkge1xuICAgICAgICAgICAgb2JqZWN0TmFtZSA9IG1hcHBlci5zZXJpYWxpemVkTmFtZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWFwcGVyVHlwZS5tYXRjaCgvXkNvbXBvc2l0ZSQvaSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHBheWxvYWQgPSBkZXNlcmlhbGl6ZUNvbXBvc2l0ZVR5cGUodGhpcywgbWFwcGVyLCByZXNwb25zZUJvZHksIG9iamVjdE5hbWUsIHVwZGF0ZWRPcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzWE1MKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeG1sQ2hhcktleSA9IHVwZGF0ZWRPcHRpb25zLnhtbC54bWxDaGFyS2V5O1xuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAqIElmIHRoZSBtYXBwZXIgc3BlY2lmaWVzIHRoaXMgYXMgYSBub24tY29tcG9zaXRlIHR5cGUgdmFsdWUgYnV0IHRoZSByZXNwb25zZUJvZHkgY29udGFpbnNcbiAgICAgICAgICAgICAgICAgKiBib3RoIGhlYWRlciAoXCIkXCIgaS5lLiwgWE1MX0FUVFJLRVkpIGFuZCBib2R5IChcIiNcIiBpLmUuLCBYTUxfQ0hBUktFWSkgcHJvcGVydGllcyxcbiAgICAgICAgICAgICAgICAgKiB0aGVuIGp1c3QgcmVkdWNlIHRoZSByZXNwb25zZUJvZHkgdmFsdWUgdG8gdGhlIGJvZHkgKFwiI1wiIGkuZS4sIFhNTF9DSEFSS0VZKSBwcm9wZXJ0eS5cbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2VCb2R5W2ludGVyZmFjZXNfanNfMS5YTUxfQVRUUktFWV0gIT09IHVuZGVmaW5lZCAmJiByZXNwb25zZUJvZHlbeG1sQ2hhcktleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICByZXNwb25zZUJvZHkgPSByZXNwb25zZUJvZHlbeG1sQ2hhcktleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1hcHBlclR5cGUubWF0Y2goL15OdW1iZXIkL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZCA9IHBhcnNlRmxvYXQocmVzcG9uc2VCb2R5KTtcbiAgICAgICAgICAgICAgICBpZiAoaXNOYU4ocGF5bG9hZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZCA9IHJlc3BvbnNlQm9keTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtYXBwZXJUeXBlLm1hdGNoKC9eQm9vbGVhbiQvaSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2VCb2R5ID09PSBcInRydWVcIikge1xuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAocmVzcG9uc2VCb2R5ID09PSBcImZhbHNlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZCA9IHJlc3BvbnNlQm9keTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtYXBwZXJUeXBlLm1hdGNoKC9eKFN0cmluZ3xFbnVtfE9iamVjdHxTdHJlYW18VXVpZHxUaW1lU3BhbnxhbnkpJC9pKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHBheWxvYWQgPSByZXNwb25zZUJvZHk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtYXBwZXJUeXBlLm1hdGNoKC9eKERhdGV8RGF0ZVRpbWV8RGF0ZVRpbWVSZmMxMTIzKSQvaSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBwYXlsb2FkID0gbmV3IERhdGUocmVzcG9uc2VCb2R5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1hcHBlclR5cGUubWF0Y2goL15Vbml4VGltZSQvaSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBwYXlsb2FkID0gdW5peFRpbWVUb0RhdGUocmVzcG9uc2VCb2R5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1hcHBlclR5cGUubWF0Y2goL15CeXRlQXJyYXkkL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZCA9IGJhc2U2NC5kZWNvZGVTdHJpbmcocmVzcG9uc2VCb2R5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1hcHBlclR5cGUubWF0Y2goL15CYXNlNjRVcmwkL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZCA9IGJhc2U2NFVybFRvQnl0ZUFycmF5KHJlc3BvbnNlQm9keSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtYXBwZXJUeXBlLm1hdGNoKC9eU2VxdWVuY2UkL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZCA9IGRlc2VyaWFsaXplU2VxdWVuY2VUeXBlKHRoaXMsIG1hcHBlciwgcmVzcG9uc2VCb2R5LCBvYmplY3ROYW1lLCB1cGRhdGVkT3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtYXBwZXJUeXBlLm1hdGNoKC9eRGljdGlvbmFyeSQvaSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBwYXlsb2FkID0gZGVzZXJpYWxpemVEaWN0aW9uYXJ5VHlwZSh0aGlzLCBtYXBwZXIsIHJlc3BvbnNlQm9keSwgb2JqZWN0TmFtZSwgdXBkYXRlZE9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtYXBwZXIuaXNDb25zdGFudCkge1xuICAgICAgICAgICAgcGF5bG9hZCA9IG1hcHBlci5kZWZhdWx0VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgfVxufVxuLyoqXG4gKiBNZXRob2QgdGhhdCBjcmVhdGVzIGFuZCByZXR1cm5zIGEgU2VyaWFsaXplci5cbiAqIEBwYXJhbSBtb2RlbE1hcHBlcnMgLSBLbm93biBtb2RlbHMgdG8gbWFwXG4gKiBAcGFyYW0gaXNYTUwgLSBJZiBYTUwgc2hvdWxkIGJlIHN1cHBvcnRlZFxuICovXG5mdW5jdGlvbiBjcmVhdGVTZXJpYWxpemVyKG1vZGVsTWFwcGVycyA9IHt9LCBpc1hNTCA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIG5ldyBTZXJpYWxpemVySW1wbChtb2RlbE1hcHBlcnMsIGlzWE1MKTtcbn1cbmV4cG9ydHMuY3JlYXRlU2VyaWFsaXplciA9IGNyZWF0ZVNlcmlhbGl6ZXI7XG5mdW5jdGlvbiB0cmltRW5kKHN0ciwgY2gpIHtcbiAgICBsZXQgbGVuID0gc3RyLmxlbmd0aDtcbiAgICB3aGlsZSAobGVuIC0gMSA+PSAwICYmIHN0cltsZW4gLSAxXSA9PT0gY2gpIHtcbiAgICAgICAgLS1sZW47XG4gICAgfVxuICAgIHJldHVybiBzdHIuc3Vic3RyKDAsIGxlbik7XG59XG5mdW5jdGlvbiBidWZmZXJUb0Jhc2U2NFVybChidWZmZXIpIHtcbiAgICBpZiAoIWJ1ZmZlcikge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAoIShidWZmZXIgaW5zdGFuY2VvZiBVaW50OEFycmF5KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFBsZWFzZSBwcm92aWRlIGFuIGlucHV0IG9mIHR5cGUgVWludDhBcnJheSBmb3IgY29udmVydGluZyB0byBCYXNlNjRVcmwuYCk7XG4gICAgfVxuICAgIC8vIFVpbnQ4QXJyYXkgdG8gQmFzZTY0LlxuICAgIGNvbnN0IHN0ciA9IGJhc2U2NC5lbmNvZGVCeXRlQXJyYXkoYnVmZmVyKTtcbiAgICAvLyBCYXNlNjQgdG8gQmFzZTY0VXJsLlxuICAgIHJldHVybiB0cmltRW5kKHN0ciwgXCI9XCIpLnJlcGxhY2UoL1xcKy9nLCBcIi1cIikucmVwbGFjZSgvXFwvL2csIFwiX1wiKTtcbn1cbmZ1bmN0aW9uIGJhc2U2NFVybFRvQnl0ZUFycmF5KHN0cikge1xuICAgIGlmICghc3RyKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmIChzdHIgJiYgdHlwZW9mIHN0ci52YWx1ZU9mKCkgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGxlYXNlIHByb3ZpZGUgYW4gaW5wdXQgb2YgdHlwZSBzdHJpbmcgZm9yIGNvbnZlcnRpbmcgdG8gVWludDhBcnJheVwiKTtcbiAgICB9XG4gICAgLy8gQmFzZTY0VXJsIHRvIEJhc2U2NC5cbiAgICBzdHIgPSBzdHIucmVwbGFjZSgvLS9nLCBcIitcIikucmVwbGFjZSgvXy9nLCBcIi9cIik7XG4gICAgLy8gQmFzZTY0IHRvIFVpbnQ4QXJyYXkuXG4gICAgcmV0dXJuIGJhc2U2NC5kZWNvZGVTdHJpbmcoc3RyKTtcbn1cbmZ1bmN0aW9uIHNwbGl0U2VyaWFsaXplTmFtZShwcm9wKSB7XG4gICAgY29uc3QgY2xhc3NlcyA9IFtdO1xuICAgIGxldCBwYXJ0aWFsY2xhc3MgPSBcIlwiO1xuICAgIGlmIChwcm9wKSB7XG4gICAgICAgIGNvbnN0IHN1YndvcmRzID0gcHJvcC5zcGxpdChcIi5cIik7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBzdWJ3b3Jkcykge1xuICAgICAgICAgICAgaWYgKGl0ZW0uY2hhckF0KGl0ZW0ubGVuZ3RoIC0gMSkgPT09IFwiXFxcXFwiKSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbGNsYXNzICs9IGl0ZW0uc3Vic3RyKDAsIGl0ZW0ubGVuZ3RoIC0gMSkgKyBcIi5cIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHBhcnRpYWxjbGFzcyArPSBpdGVtO1xuICAgICAgICAgICAgICAgIGNsYXNzZXMucHVzaChwYXJ0aWFsY2xhc3MpO1xuICAgICAgICAgICAgICAgIHBhcnRpYWxjbGFzcyA9IFwiXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNsYXNzZXM7XG59XG5mdW5jdGlvbiBkYXRlVG9Vbml4VGltZShkKSB7XG4gICAgaWYgKCFkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZC52YWx1ZU9mKCkgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgZCA9IG5ldyBEYXRlKGQpO1xuICAgIH1cbiAgICByZXR1cm4gTWF0aC5mbG9vcihkLmdldFRpbWUoKSAvIDEwMDApO1xufVxuZnVuY3Rpb24gdW5peFRpbWVUb0RhdGUobikge1xuICAgIGlmICghbikge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IERhdGUobiAqIDEwMDApO1xufVxuZnVuY3Rpb24gc2VyaWFsaXplQmFzaWNUeXBlcyh0eXBlTmFtZSwgb2JqZWN0TmFtZSwgdmFsdWUpIHtcbiAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZU5hbWUubWF0Y2goL15OdW1iZXIkL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke29iamVjdE5hbWV9IHdpdGggdmFsdWUgJHt2YWx1ZX0gbXVzdCBiZSBvZiB0eXBlIG51bWJlci5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlTmFtZS5tYXRjaCgvXlN0cmluZyQvaSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUudmFsdWVPZigpICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke29iamVjdE5hbWV9IHdpdGggdmFsdWUgXCIke3ZhbHVlfVwiIG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZU5hbWUubWF0Y2goL15VdWlkJC9pKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKCEodHlwZW9mIHZhbHVlLnZhbHVlT2YoKSA9PT0gXCJzdHJpbmdcIiAmJiAoMCwgdXRpbHNfanNfMS5pc1ZhbGlkVXVpZCkodmFsdWUpKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtvYmplY3ROYW1lfSB3aXRoIHZhbHVlIFwiJHt2YWx1ZX1cIiBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nIGFuZCBhIHZhbGlkIHV1aWQuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZU5hbWUubWF0Y2goL15Cb29sZWFuJC9pKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7b2JqZWN0TmFtZX0gd2l0aCB2YWx1ZSAke3ZhbHVlfSBtdXN0IGJlIG9mIHR5cGUgYm9vbGVhbi5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlTmFtZS5tYXRjaCgvXlN0cmVhbSQvaSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IG9iamVjdFR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gICAgICAgICAgICBpZiAob2JqZWN0VHlwZSAhPT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiB2YWx1ZS5waXBlICE9PSBcImZ1bmN0aW9uXCIgJiYgLy8gTm9kZUpTLlJlYWRhYmxlU3RyZWFtXG4gICAgICAgICAgICAgICAgdHlwZW9mIHZhbHVlLnRlZSAhPT0gXCJmdW5jdGlvblwiICYmIC8vIGJyb3dzZXIgUmVhZGFibGVTdHJlYW1cbiAgICAgICAgICAgICAgICAhKHZhbHVlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpICYmXG4gICAgICAgICAgICAgICAgIUFycmF5QnVmZmVyLmlzVmlldyh2YWx1ZSkgJiZcbiAgICAgICAgICAgICAgICAvLyBGaWxlIG9iamVjdHMgY291bnQgYXMgYSB0eXBlIG9mIEJsb2IsIHNvIHdlIHdhbnQgdG8gdXNlIGluc3RhbmNlb2YgZXhwbGljaXRseVxuICAgICAgICAgICAgICAgICEoKHR5cGVvZiBCbG9iID09PSBcImZ1bmN0aW9uXCIgfHwgdHlwZW9mIEJsb2IgPT09IFwib2JqZWN0XCIpICYmIHZhbHVlIGluc3RhbmNlb2YgQmxvYikgJiZcbiAgICAgICAgICAgICAgICBvYmplY3RUeXBlICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7b2JqZWN0TmFtZX0gbXVzdCBiZSBhIHN0cmluZywgQmxvYiwgQXJyYXlCdWZmZXIsIEFycmF5QnVmZmVyVmlldywgUmVhZGFibGVTdHJlYW0sIG9yICgpID0+IFJlYWRhYmxlU3RyZWFtLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbn1cbmZ1bmN0aW9uIHNlcmlhbGl6ZUVudW1UeXBlKG9iamVjdE5hbWUsIGFsbG93ZWRWYWx1ZXMsIHZhbHVlKSB7XG4gICAgaWYgKCFhbGxvd2VkVmFsdWVzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgUGxlYXNlIHByb3ZpZGUgYSBzZXQgb2YgYWxsb3dlZFZhbHVlcyB0byB2YWxpZGF0ZSAke29iamVjdE5hbWV9IGFzIGFuIEVudW0gVHlwZS5gKTtcbiAgICB9XG4gICAgY29uc3QgaXNQcmVzZW50ID0gYWxsb3dlZFZhbHVlcy5zb21lKChpdGVtKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgaXRlbS52YWx1ZU9mKCkgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtLnRvTG93ZXJDYXNlKCkgPT09IHZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW0gPT09IHZhbHVlO1xuICAgIH0pO1xuICAgIGlmICghaXNQcmVzZW50KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt2YWx1ZX0gaXMgbm90IGEgdmFsaWQgdmFsdWUgZm9yICR7b2JqZWN0TmFtZX0uIFRoZSB2YWxpZCB2YWx1ZXMgYXJlOiAke0pTT04uc3RyaW5naWZ5KGFsbG93ZWRWYWx1ZXMpfS5gKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuZnVuY3Rpb24gc2VyaWFsaXplQnl0ZUFycmF5VHlwZShvYmplY3ROYW1lLCB2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIGlmICghKHZhbHVlIGluc3RhbmNlb2YgVWludDhBcnJheSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtvYmplY3ROYW1lfSBtdXN0IGJlIG9mIHR5cGUgVWludDhBcnJheS5gKTtcbiAgICAgICAgfVxuICAgICAgICB2YWx1ZSA9IGJhc2U2NC5lbmNvZGVCeXRlQXJyYXkodmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59XG5mdW5jdGlvbiBzZXJpYWxpemVCYXNlNjRVcmxUeXBlKG9iamVjdE5hbWUsIHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKCEodmFsdWUgaW5zdGFuY2VvZiBVaW50OEFycmF5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke29iamVjdE5hbWV9IG11c3QgYmUgb2YgdHlwZSBVaW50OEFycmF5LmApO1xuICAgICAgICB9XG4gICAgICAgIHZhbHVlID0gYnVmZmVyVG9CYXNlNjRVcmwodmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59XG5mdW5jdGlvbiBzZXJpYWxpemVEYXRlVHlwZXModHlwZU5hbWUsIHZhbHVlLCBvYmplY3ROYW1lKSB7XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKHR5cGVOYW1lLm1hdGNoKC9eRGF0ZSQvaSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmICghKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSB8fFxuICAgICAgICAgICAgICAgICh0eXBlb2YgdmFsdWUudmFsdWVPZigpID09PSBcInN0cmluZ1wiICYmICFpc05hTihEYXRlLnBhcnNlKHZhbHVlKSkpKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtvYmplY3ROYW1lfSBtdXN0IGJlIGFuIGluc3RhbmNlb2YgRGF0ZSBvciBhIHN0cmluZyBpbiBJU084NjAxIGZvcm1hdC5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhbHVlID1cbiAgICAgICAgICAgICAgICB2YWx1ZSBpbnN0YW5jZW9mIERhdGVcbiAgICAgICAgICAgICAgICAgICAgPyB2YWx1ZS50b0lTT1N0cmluZygpLnN1YnN0cmluZygwLCAxMClcbiAgICAgICAgICAgICAgICAgICAgOiBuZXcgRGF0ZSh2YWx1ZSkudG9JU09TdHJpbmcoKS5zdWJzdHJpbmcoMCwgMTApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVOYW1lLm1hdGNoKC9eRGF0ZVRpbWUkL2kpICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoISh2YWx1ZSBpbnN0YW5jZW9mIERhdGUgfHxcbiAgICAgICAgICAgICAgICAodHlwZW9mIHZhbHVlLnZhbHVlT2YoKSA9PT0gXCJzdHJpbmdcIiAmJiAhaXNOYU4oRGF0ZS5wYXJzZSh2YWx1ZSkpKSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7b2JqZWN0TmFtZX0gbXVzdCBiZSBhbiBpbnN0YW5jZW9mIERhdGUgb3IgYSBzdHJpbmcgaW4gSVNPODYwMSBmb3JtYXQuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlIGluc3RhbmNlb2YgRGF0ZSA/IHZhbHVlLnRvSVNPU3RyaW5nKCkgOiBuZXcgRGF0ZSh2YWx1ZSkudG9JU09TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlTmFtZS5tYXRjaCgvXkRhdGVUaW1lUmZjMTEyMyQvaSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmICghKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSB8fFxuICAgICAgICAgICAgICAgICh0eXBlb2YgdmFsdWUudmFsdWVPZigpID09PSBcInN0cmluZ1wiICYmICFpc05hTihEYXRlLnBhcnNlKHZhbHVlKSkpKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtvYmplY3ROYW1lfSBtdXN0IGJlIGFuIGluc3RhbmNlb2YgRGF0ZSBvciBhIHN0cmluZyBpbiBSRkMtMTEyMyBmb3JtYXQuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlIGluc3RhbmNlb2YgRGF0ZSA/IHZhbHVlLnRvVVRDU3RyaW5nKCkgOiBuZXcgRGF0ZSh2YWx1ZSkudG9VVENTdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlTmFtZS5tYXRjaCgvXlVuaXhUaW1lJC9pKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKCEodmFsdWUgaW5zdGFuY2VvZiBEYXRlIHx8XG4gICAgICAgICAgICAgICAgKHR5cGVvZiB2YWx1ZS52YWx1ZU9mKCkgPT09IFwic3RyaW5nXCIgJiYgIWlzTmFOKERhdGUucGFyc2UodmFsdWUpKSkpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke29iamVjdE5hbWV9IG11c3QgYmUgYW4gaW5zdGFuY2VvZiBEYXRlIG9yIGEgc3RyaW5nIGluIFJGQy0xMTIzL0lTTzg2MDEgZm9ybWF0IGAgK1xuICAgICAgICAgICAgICAgICAgICBgZm9yIGl0IHRvIGJlIHNlcmlhbGl6ZWQgaW4gVW5peFRpbWUvRXBvY2ggZm9ybWF0LmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFsdWUgPSBkYXRlVG9Vbml4VGltZSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZU5hbWUubWF0Y2goL15UaW1lU3BhbiQvaSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmICghKDAsIHV0aWxzX2pzXzEuaXNEdXJhdGlvbikodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke29iamVjdE5hbWV9IG11c3QgYmUgYSBzdHJpbmcgaW4gSVNPIDg2MDEgZm9ybWF0LiBJbnN0ZWFkIHdhcyBcIiR7dmFsdWV9XCIuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuZnVuY3Rpb24gc2VyaWFsaXplU2VxdWVuY2VUeXBlKHNlcmlhbGl6ZXIsIG1hcHBlciwgb2JqZWN0LCBvYmplY3ROYW1lLCBpc1htbCwgb3B0aW9ucykge1xuICAgIHZhciBfYTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkob2JqZWN0KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7b2JqZWN0TmFtZX0gbXVzdCBiZSBvZiB0eXBlIEFycmF5LmApO1xuICAgIH1cbiAgICBsZXQgZWxlbWVudFR5cGUgPSBtYXBwZXIudHlwZS5lbGVtZW50O1xuICAgIGlmICghZWxlbWVudFR5cGUgfHwgdHlwZW9mIGVsZW1lbnRUeXBlICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgZWxlbWVudFwiIG1ldGFkYXRhIGZvciBhbiBBcnJheSBtdXN0IGJlIGRlZmluZWQgaW4gdGhlIGAgK1xuICAgICAgICAgICAgYG1hcHBlciBhbmQgaXQgbXVzdCBvZiB0eXBlIFwib2JqZWN0XCIgaW4gJHtvYmplY3ROYW1lfS5gKTtcbiAgICB9XG4gICAgLy8gUXVpcms6IENvbXBvc2l0ZSBtYXBwZXJzIHJlZmVyZW5jZWQgYnkgYGVsZW1lbnRgIG1pZ2h0XG4gICAgLy8gbm90IGhhdmUgKmFsbCogcHJvcGVydGllcyBkZWNsYXJlZCAobGlrZSB1YmVyUGFyZW50KSxcbiAgICAvLyBzbyBsZXQncyB0cnkgdG8gbG9vayB1cCB0aGUgZnVsbCBkZWZpbml0aW9uIGJ5IG5hbWUuXG4gICAgaWYgKGVsZW1lbnRUeXBlLnR5cGUubmFtZSA9PT0gXCJDb21wb3NpdGVcIiAmJiBlbGVtZW50VHlwZS50eXBlLmNsYXNzTmFtZSkge1xuICAgICAgICBlbGVtZW50VHlwZSA9IChfYSA9IHNlcmlhbGl6ZXIubW9kZWxNYXBwZXJzW2VsZW1lbnRUeXBlLnR5cGUuY2xhc3NOYW1lXSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZWxlbWVudFR5cGU7XG4gICAgfVxuICAgIGNvbnN0IHRlbXBBcnJheSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2JqZWN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZWRWYWx1ZSA9IHNlcmlhbGl6ZXIuc2VyaWFsaXplKGVsZW1lbnRUeXBlLCBvYmplY3RbaV0sIG9iamVjdE5hbWUsIG9wdGlvbnMpO1xuICAgICAgICBpZiAoaXNYbWwgJiYgZWxlbWVudFR5cGUueG1sTmFtZXNwYWNlKSB7XG4gICAgICAgICAgICBjb25zdCB4bWxuc0tleSA9IGVsZW1lbnRUeXBlLnhtbE5hbWVzcGFjZVByZWZpeFxuICAgICAgICAgICAgICAgID8gYHhtbG5zOiR7ZWxlbWVudFR5cGUueG1sTmFtZXNwYWNlUHJlZml4fWBcbiAgICAgICAgICAgICAgICA6IFwieG1sbnNcIjtcbiAgICAgICAgICAgIGlmIChlbGVtZW50VHlwZS50eXBlLm5hbWUgPT09IFwiQ29tcG9zaXRlXCIpIHtcbiAgICAgICAgICAgICAgICB0ZW1wQXJyYXlbaV0gPSBPYmplY3QuYXNzaWduKHt9LCBzZXJpYWxpemVkVmFsdWUpO1xuICAgICAgICAgICAgICAgIHRlbXBBcnJheVtpXVtpbnRlcmZhY2VzX2pzXzEuWE1MX0FUVFJLRVldID0geyBbeG1sbnNLZXldOiBlbGVtZW50VHlwZS54bWxOYW1lc3BhY2UgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRlbXBBcnJheVtpXSA9IHt9O1xuICAgICAgICAgICAgICAgIHRlbXBBcnJheVtpXVtvcHRpb25zLnhtbC54bWxDaGFyS2V5XSA9IHNlcmlhbGl6ZWRWYWx1ZTtcbiAgICAgICAgICAgICAgICB0ZW1wQXJyYXlbaV1baW50ZXJmYWNlc19qc18xLlhNTF9BVFRSS0VZXSA9IHsgW3htbG5zS2V5XTogZWxlbWVudFR5cGUueG1sTmFtZXNwYWNlIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0ZW1wQXJyYXlbaV0gPSBzZXJpYWxpemVkVmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRlbXBBcnJheTtcbn1cbmZ1bmN0aW9uIHNlcmlhbGl6ZURpY3Rpb25hcnlUeXBlKHNlcmlhbGl6ZXIsIG1hcHBlciwgb2JqZWN0LCBvYmplY3ROYW1lLCBpc1htbCwgb3B0aW9ucykge1xuICAgIGlmICh0eXBlb2Ygb2JqZWN0ICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtvYmplY3ROYW1lfSBtdXN0IGJlIG9mIHR5cGUgb2JqZWN0LmApO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZVR5cGUgPSBtYXBwZXIudHlwZS52YWx1ZTtcbiAgICBpZiAoIXZhbHVlVHlwZSB8fCB0eXBlb2YgdmFsdWVUeXBlICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgXCJ2YWx1ZVwiIG1ldGFkYXRhIGZvciBhIERpY3Rpb25hcnkgbXVzdCBiZSBkZWZpbmVkIGluIHRoZSBgICtcbiAgICAgICAgICAgIGBtYXBwZXIgYW5kIGl0IG11c3Qgb2YgdHlwZSBcIm9iamVjdFwiIGluICR7b2JqZWN0TmFtZX0uYCk7XG4gICAgfVxuICAgIGNvbnN0IHRlbXBEaWN0aW9uYXJ5ID0ge307XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMob2JqZWN0KSkge1xuICAgICAgICBjb25zdCBzZXJpYWxpemVkVmFsdWUgPSBzZXJpYWxpemVyLnNlcmlhbGl6ZSh2YWx1ZVR5cGUsIG9iamVjdFtrZXldLCBvYmplY3ROYW1lLCBvcHRpb25zKTtcbiAgICAgICAgLy8gSWYgdGhlIGVsZW1lbnQgbmVlZHMgYW4gWE1MIG5hbWVzcGFjZSB3ZSBuZWVkIHRvIGFkZCBpdCB3aXRoaW4gdGhlICQgcHJvcGVydHlcbiAgICAgICAgdGVtcERpY3Rpb25hcnlba2V5XSA9IGdldFhtbE9iamVjdFZhbHVlKHZhbHVlVHlwZSwgc2VyaWFsaXplZFZhbHVlLCBpc1htbCwgb3B0aW9ucyk7XG4gICAgfVxuICAgIC8vIEFkZCB0aGUgbmFtZXNwYWNlIHRvIHRoZSByb290IGVsZW1lbnQgaWYgbmVlZGVkXG4gICAgaWYgKGlzWG1sICYmIG1hcHBlci54bWxOYW1lc3BhY2UpIHtcbiAgICAgICAgY29uc3QgeG1sbnNLZXkgPSBtYXBwZXIueG1sTmFtZXNwYWNlUHJlZml4ID8gYHhtbG5zOiR7bWFwcGVyLnhtbE5hbWVzcGFjZVByZWZpeH1gIDogXCJ4bWxuc1wiO1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0ZW1wRGljdGlvbmFyeTtcbiAgICAgICAgcmVzdWx0W2ludGVyZmFjZXNfanNfMS5YTUxfQVRUUktFWV0gPSB7IFt4bWxuc0tleV06IG1hcHBlci54bWxOYW1lc3BhY2UgfTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgcmV0dXJuIHRlbXBEaWN0aW9uYXJ5O1xufVxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgYWRkaXRpb25hbFByb3BlcnRpZXMgcHJvcGVydHkgZnJvbSBhIHJlZmVyZW5jZWQgbWFwcGVyXG4gKiBAcGFyYW0gc2VyaWFsaXplciAtIHRoZSBzZXJpYWxpemVyIGNvbnRhaW5pbmcgdGhlIGVudGlyZSBzZXQgb2YgbWFwcGVyc1xuICogQHBhcmFtIG1hcHBlciAtIHRoZSBjb21wb3NpdGUgbWFwcGVyIHRvIHJlc29sdmVcbiAqIEBwYXJhbSBvYmplY3ROYW1lIC0gbmFtZSBvZiB0aGUgb2JqZWN0IGJlaW5nIHNlcmlhbGl6ZWRcbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZUFkZGl0aW9uYWxQcm9wZXJ0aWVzKHNlcmlhbGl6ZXIsIG1hcHBlciwgb2JqZWN0TmFtZSkge1xuICAgIGNvbnN0IGFkZGl0aW9uYWxQcm9wZXJ0aWVzID0gbWFwcGVyLnR5cGUuYWRkaXRpb25hbFByb3BlcnRpZXM7XG4gICAgaWYgKCFhZGRpdGlvbmFsUHJvcGVydGllcyAmJiBtYXBwZXIudHlwZS5jbGFzc05hbWUpIHtcbiAgICAgICAgY29uc3QgbW9kZWxNYXBwZXIgPSByZXNvbHZlUmVmZXJlbmNlZE1hcHBlcihzZXJpYWxpemVyLCBtYXBwZXIsIG9iamVjdE5hbWUpO1xuICAgICAgICByZXR1cm4gbW9kZWxNYXBwZXIgPT09IG51bGwgfHwgbW9kZWxNYXBwZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG1vZGVsTWFwcGVyLnR5cGUuYWRkaXRpb25hbFByb3BlcnRpZXM7XG4gICAgfVxuICAgIHJldHVybiBhZGRpdGlvbmFsUHJvcGVydGllcztcbn1cbi8qKlxuICogRmluZHMgdGhlIG1hcHBlciByZWZlcmVuY2VkIGJ5IGNsYXNzTmFtZVxuICogQHBhcmFtIHNlcmlhbGl6ZXIgLSB0aGUgc2VyaWFsaXplciBjb250YWluaW5nIHRoZSBlbnRpcmUgc2V0IG9mIG1hcHBlcnNcbiAqIEBwYXJhbSBtYXBwZXIgLSB0aGUgY29tcG9zaXRlIG1hcHBlciB0byByZXNvbHZlXG4gKiBAcGFyYW0gb2JqZWN0TmFtZSAtIG5hbWUgb2YgdGhlIG9iamVjdCBiZWluZyBzZXJpYWxpemVkXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVSZWZlcmVuY2VkTWFwcGVyKHNlcmlhbGl6ZXIsIG1hcHBlciwgb2JqZWN0TmFtZSkge1xuICAgIGNvbnN0IGNsYXNzTmFtZSA9IG1hcHBlci50eXBlLmNsYXNzTmFtZTtcbiAgICBpZiAoIWNsYXNzTmFtZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENsYXNzIG5hbWUgZm9yIG1vZGVsIFwiJHtvYmplY3ROYW1lfVwiIGlzIG5vdCBwcm92aWRlZCBpbiB0aGUgbWFwcGVyIFwiJHtKU09OLnN0cmluZ2lmeShtYXBwZXIsIHVuZGVmaW5lZCwgMil9XCIuYCk7XG4gICAgfVxuICAgIHJldHVybiBzZXJpYWxpemVyLm1vZGVsTWFwcGVyc1tjbGFzc05hbWVdO1xufVxuLyoqXG4gKiBSZXNvbHZlcyBhIGNvbXBvc2l0ZSBtYXBwZXIncyBtb2RlbFByb3BlcnRpZXMuXG4gKiBAcGFyYW0gc2VyaWFsaXplciAtIHRoZSBzZXJpYWxpemVyIGNvbnRhaW5pbmcgdGhlIGVudGlyZSBzZXQgb2YgbWFwcGVyc1xuICogQHBhcmFtIG1hcHBlciAtIHRoZSBjb21wb3NpdGUgbWFwcGVyIHRvIHJlc29sdmVcbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZU1vZGVsUHJvcGVydGllcyhzZXJpYWxpemVyLCBtYXBwZXIsIG9iamVjdE5hbWUpIHtcbiAgICBsZXQgbW9kZWxQcm9wcyA9IG1hcHBlci50eXBlLm1vZGVsUHJvcGVydGllcztcbiAgICBpZiAoIW1vZGVsUHJvcHMpIHtcbiAgICAgICAgY29uc3QgbW9kZWxNYXBwZXIgPSByZXNvbHZlUmVmZXJlbmNlZE1hcHBlcihzZXJpYWxpemVyLCBtYXBwZXIsIG9iamVjdE5hbWUpO1xuICAgICAgICBpZiAoIW1vZGVsTWFwcGVyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYG1hcHBlcigpIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZCBmb3IgbW9kZWwgXCIke21hcHBlci50eXBlLmNsYXNzTmFtZX1cIi5gKTtcbiAgICAgICAgfVxuICAgICAgICBtb2RlbFByb3BzID0gbW9kZWxNYXBwZXIgPT09IG51bGwgfHwgbW9kZWxNYXBwZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG1vZGVsTWFwcGVyLnR5cGUubW9kZWxQcm9wZXJ0aWVzO1xuICAgICAgICBpZiAoIW1vZGVsUHJvcHMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgbW9kZWxQcm9wZXJ0aWVzIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZCBpbiB0aGUgYCArXG4gICAgICAgICAgICAgICAgYG1hcHBlciBcIiR7SlNPTi5zdHJpbmdpZnkobW9kZWxNYXBwZXIpfVwiIG9mIHR5cGUgXCIke21hcHBlci50eXBlLmNsYXNzTmFtZX1cIiBmb3Igb2JqZWN0IFwiJHtvYmplY3ROYW1lfVwiLmApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtb2RlbFByb3BzO1xufVxuZnVuY3Rpb24gc2VyaWFsaXplQ29tcG9zaXRlVHlwZShzZXJpYWxpemVyLCBtYXBwZXIsIG9iamVjdCwgb2JqZWN0TmFtZSwgaXNYbWwsIG9wdGlvbnMpIHtcbiAgICBpZiAoZ2V0UG9seW1vcnBoaWNEaXNjcmltaW5hdG9yUmVjdXJzaXZlbHkoc2VyaWFsaXplciwgbWFwcGVyKSkge1xuICAgICAgICBtYXBwZXIgPSBnZXRQb2x5bW9ycGhpY01hcHBlcihzZXJpYWxpemVyLCBtYXBwZXIsIG9iamVjdCwgXCJjbGllbnROYW1lXCIpO1xuICAgIH1cbiAgICBpZiAob2JqZWN0ICE9PSB1bmRlZmluZWQgJiYgb2JqZWN0ICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSB7fTtcbiAgICAgICAgY29uc3QgbW9kZWxQcm9wcyA9IHJlc29sdmVNb2RlbFByb3BlcnRpZXMoc2VyaWFsaXplciwgbWFwcGVyLCBvYmplY3ROYW1lKTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMobW9kZWxQcm9wcykpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5TWFwcGVyID0gbW9kZWxQcm9wc1trZXldO1xuICAgICAgICAgICAgaWYgKHByb3BlcnR5TWFwcGVyLnJlYWRPbmx5KSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgcHJvcE5hbWU7XG4gICAgICAgICAgICBsZXQgcGFyZW50T2JqZWN0ID0gcGF5bG9hZDtcbiAgICAgICAgICAgIGlmIChzZXJpYWxpemVyLmlzWE1MKSB7XG4gICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5TWFwcGVyLnhtbElzV3JhcHBlZCkge1xuICAgICAgICAgICAgICAgICAgICBwcm9wTmFtZSA9IHByb3BlcnR5TWFwcGVyLnhtbE5hbWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwcm9wTmFtZSA9IHByb3BlcnR5TWFwcGVyLnhtbEVsZW1lbnROYW1lIHx8IHByb3BlcnR5TWFwcGVyLnhtbE5hbWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGF0aHMgPSBzcGxpdFNlcmlhbGl6ZU5hbWUocHJvcGVydHlNYXBwZXIuc2VyaWFsaXplZE5hbWUpO1xuICAgICAgICAgICAgICAgIHByb3BOYW1lID0gcGF0aHMucG9wKCk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBwYXRoTmFtZSBvZiBwYXRocykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZE9iamVjdCA9IHBhcmVudE9iamVjdFtwYXRoTmFtZV07XG4gICAgICAgICAgICAgICAgICAgIGlmICgoY2hpbGRPYmplY3QgPT09IHVuZGVmaW5lZCB8fCBjaGlsZE9iamVjdCA9PT0gbnVsbCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICgob2JqZWN0W2tleV0gIT09IHVuZGVmaW5lZCAmJiBvYmplY3Rba2V5XSAhPT0gbnVsbCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU1hcHBlci5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE9iamVjdFtwYXRoTmFtZV0gPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRPYmplY3QgPSBwYXJlbnRPYmplY3RbcGF0aE5hbWVdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwYXJlbnRPYmplY3QgIT09IHVuZGVmaW5lZCAmJiBwYXJlbnRPYmplY3QgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNYbWwgJiYgbWFwcGVyLnhtbE5hbWVzcGFjZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB4bWxuc0tleSA9IG1hcHBlci54bWxOYW1lc3BhY2VQcmVmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgID8gYHhtbG5zOiR7bWFwcGVyLnhtbE5hbWVzcGFjZVByZWZpeH1gXG4gICAgICAgICAgICAgICAgICAgICAgICA6IFwieG1sbnNcIjtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50T2JqZWN0W2ludGVyZmFjZXNfanNfMS5YTUxfQVRUUktFWV0gPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHBhcmVudE9iamVjdFtpbnRlcmZhY2VzX2pzXzEuWE1MX0FUVFJLRVldKSwgeyBbeG1sbnNLZXldOiBtYXBwZXIueG1sTmFtZXNwYWNlIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wZXJ0eU9iamVjdE5hbWUgPSBwcm9wZXJ0eU1hcHBlci5zZXJpYWxpemVkTmFtZSAhPT0gXCJcIlxuICAgICAgICAgICAgICAgICAgICA/IG9iamVjdE5hbWUgKyBcIi5cIiArIHByb3BlcnR5TWFwcGVyLnNlcmlhbGl6ZWROYW1lXG4gICAgICAgICAgICAgICAgICAgIDogb2JqZWN0TmFtZTtcbiAgICAgICAgICAgICAgICBsZXQgdG9TZXJpYWxpemUgPSBvYmplY3Rba2V5XTtcbiAgICAgICAgICAgICAgICBjb25zdCBwb2x5bW9ycGhpY0Rpc2NyaW1pbmF0b3IgPSBnZXRQb2x5bW9ycGhpY0Rpc2NyaW1pbmF0b3JSZWN1cnNpdmVseShzZXJpYWxpemVyLCBtYXBwZXIpO1xuICAgICAgICAgICAgICAgIGlmIChwb2x5bW9ycGhpY0Rpc2NyaW1pbmF0b3IgJiZcbiAgICAgICAgICAgICAgICAgICAgcG9seW1vcnBoaWNEaXNjcmltaW5hdG9yLmNsaWVudE5hbWUgPT09IGtleSAmJlxuICAgICAgICAgICAgICAgICAgICAodG9TZXJpYWxpemUgPT09IHVuZGVmaW5lZCB8fCB0b1NlcmlhbGl6ZSA9PT0gbnVsbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9TZXJpYWxpemUgPSBtYXBwZXIuc2VyaWFsaXplZE5hbWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHNlcmlhbGl6ZWRWYWx1ZSA9IHNlcmlhbGl6ZXIuc2VyaWFsaXplKHByb3BlcnR5TWFwcGVyLCB0b1NlcmlhbGl6ZSwgcHJvcGVydHlPYmplY3ROYW1lLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICBpZiAoc2VyaWFsaXplZFZhbHVlICE9PSB1bmRlZmluZWQgJiYgcHJvcE5hbWUgIT09IHVuZGVmaW5lZCAmJiBwcm9wTmFtZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGdldFhtbE9iamVjdFZhbHVlKHByb3BlcnR5TWFwcGVyLCBzZXJpYWxpemVkVmFsdWUsIGlzWG1sLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzWG1sICYmIHByb3BlcnR5TWFwcGVyLnhtbElzQXR0cmlidXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBYTUxfQVRUUktFWSwgaS5lLiwgJCBpcyB0aGUga2V5IGF0dHJpYnV0ZXMgYXJlIGtlcHQgdW5kZXIgaW4geG1sMmpzLlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBrZWVwcyB0aGluZ3Mgc2ltcGxlIHdoaWxlIHByZXZlbnRpbmcgbmFtZSBjb2xsaXNpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpdGggbmFtZXMgaW4gdXNlciBkb2N1bWVudHMuXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRPYmplY3RbaW50ZXJmYWNlc19qc18xLlhNTF9BVFRSS0VZXSA9IHBhcmVudE9iamVjdFtpbnRlcmZhY2VzX2pzXzEuWE1MX0FUVFJLRVldIHx8IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50T2JqZWN0W2ludGVyZmFjZXNfanNfMS5YTUxfQVRUUktFWV1bcHJvcE5hbWVdID0gc2VyaWFsaXplZFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzWG1sICYmIHByb3BlcnR5TWFwcGVyLnhtbElzV3JhcHBlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50T2JqZWN0W3Byb3BOYW1lXSA9IHsgW3Byb3BlcnR5TWFwcGVyLnhtbEVsZW1lbnROYW1lXTogdmFsdWUgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE9iamVjdFtwcm9wTmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhZGRpdGlvbmFsUHJvcGVydGllc01hcHBlciA9IHJlc29sdmVBZGRpdGlvbmFsUHJvcGVydGllcyhzZXJpYWxpemVyLCBtYXBwZXIsIG9iamVjdE5hbWUpO1xuICAgICAgICBpZiAoYWRkaXRpb25hbFByb3BlcnRpZXNNYXBwZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BOYW1lcyA9IE9iamVjdC5rZXlzKG1vZGVsUHJvcHMpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBjbGllbnRQcm9wTmFtZSBpbiBvYmplY3QpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0FkZGl0aW9uYWxQcm9wZXJ0eSA9IHByb3BOYW1lcy5ldmVyeSgocG4pID0+IHBuICE9PSBjbGllbnRQcm9wTmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKGlzQWRkaXRpb25hbFByb3BlcnR5KSB7XG4gICAgICAgICAgICAgICAgICAgIHBheWxvYWRbY2xpZW50UHJvcE5hbWVdID0gc2VyaWFsaXplci5zZXJpYWxpemUoYWRkaXRpb25hbFByb3BlcnRpZXNNYXBwZXIsIG9iamVjdFtjbGllbnRQcm9wTmFtZV0sIG9iamVjdE5hbWUgKyAnW1wiJyArIGNsaWVudFByb3BOYW1lICsgJ1wiXScsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdDtcbn1cbmZ1bmN0aW9uIGdldFhtbE9iamVjdFZhbHVlKHByb3BlcnR5TWFwcGVyLCBzZXJpYWxpemVkVmFsdWUsIGlzWG1sLCBvcHRpb25zKSB7XG4gICAgaWYgKCFpc1htbCB8fCAhcHJvcGVydHlNYXBwZXIueG1sTmFtZXNwYWNlKSB7XG4gICAgICAgIHJldHVybiBzZXJpYWxpemVkVmFsdWU7XG4gICAgfVxuICAgIGNvbnN0IHhtbG5zS2V5ID0gcHJvcGVydHlNYXBwZXIueG1sTmFtZXNwYWNlUHJlZml4XG4gICAgICAgID8gYHhtbG5zOiR7cHJvcGVydHlNYXBwZXIueG1sTmFtZXNwYWNlUHJlZml4fWBcbiAgICAgICAgOiBcInhtbG5zXCI7XG4gICAgY29uc3QgeG1sTmFtZXNwYWNlID0geyBbeG1sbnNLZXldOiBwcm9wZXJ0eU1hcHBlci54bWxOYW1lc3BhY2UgfTtcbiAgICBpZiAoW1wiQ29tcG9zaXRlXCJdLmluY2x1ZGVzKHByb3BlcnR5TWFwcGVyLnR5cGUubmFtZSkpIHtcbiAgICAgICAgaWYgKHNlcmlhbGl6ZWRWYWx1ZVtpbnRlcmZhY2VzX2pzXzEuWE1MX0FUVFJLRVldKSB7XG4gICAgICAgICAgICByZXR1cm4gc2VyaWFsaXplZFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gT2JqZWN0LmFzc2lnbih7fSwgc2VyaWFsaXplZFZhbHVlKTtcbiAgICAgICAgICAgIHJlc3VsdFtpbnRlcmZhY2VzX2pzXzEuWE1MX0FUVFJLRVldID0geG1sTmFtZXNwYWNlO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICByZXN1bHRbb3B0aW9ucy54bWwueG1sQ2hhcktleV0gPSBzZXJpYWxpemVkVmFsdWU7XG4gICAgcmVzdWx0W2ludGVyZmFjZXNfanNfMS5YTUxfQVRUUktFWV0gPSB4bWxOYW1lc3BhY2U7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIGlzU3BlY2lhbFhtbFByb3BlcnR5KHByb3BlcnR5TmFtZSwgb3B0aW9ucykge1xuICAgIHJldHVybiBbaW50ZXJmYWNlc19qc18xLlhNTF9BVFRSS0VZLCBvcHRpb25zLnhtbC54bWxDaGFyS2V5XS5pbmNsdWRlcyhwcm9wZXJ0eU5hbWUpO1xufVxuZnVuY3Rpb24gZGVzZXJpYWxpemVDb21wb3NpdGVUeXBlKHNlcmlhbGl6ZXIsIG1hcHBlciwgcmVzcG9uc2VCb2R5LCBvYmplY3ROYW1lLCBvcHRpb25zKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICBjb25zdCB4bWxDaGFyS2V5ID0gKF9hID0gb3B0aW9ucy54bWwueG1sQ2hhcktleSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogaW50ZXJmYWNlc19qc18xLlhNTF9DSEFSS0VZO1xuICAgIGlmIChnZXRQb2x5bW9ycGhpY0Rpc2NyaW1pbmF0b3JSZWN1cnNpdmVseShzZXJpYWxpemVyLCBtYXBwZXIpKSB7XG4gICAgICAgIG1hcHBlciA9IGdldFBvbHltb3JwaGljTWFwcGVyKHNlcmlhbGl6ZXIsIG1hcHBlciwgcmVzcG9uc2VCb2R5LCBcInNlcmlhbGl6ZWROYW1lXCIpO1xuICAgIH1cbiAgICBjb25zdCBtb2RlbFByb3BzID0gcmVzb2x2ZU1vZGVsUHJvcGVydGllcyhzZXJpYWxpemVyLCBtYXBwZXIsIG9iamVjdE5hbWUpO1xuICAgIGxldCBpbnN0YW5jZSA9IHt9O1xuICAgIGNvbnN0IGhhbmRsZWRQcm9wZXJ0eU5hbWVzID0gW107XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMobW9kZWxQcm9wcykpIHtcbiAgICAgICAgY29uc3QgcHJvcGVydHlNYXBwZXIgPSBtb2RlbFByb3BzW2tleV07XG4gICAgICAgIGNvbnN0IHBhdGhzID0gc3BsaXRTZXJpYWxpemVOYW1lKG1vZGVsUHJvcHNba2V5XS5zZXJpYWxpemVkTmFtZSk7XG4gICAgICAgIGhhbmRsZWRQcm9wZXJ0eU5hbWVzLnB1c2gocGF0aHNbMF0pO1xuICAgICAgICBjb25zdCB7IHNlcmlhbGl6ZWROYW1lLCB4bWxOYW1lLCB4bWxFbGVtZW50TmFtZSB9ID0gcHJvcGVydHlNYXBwZXI7XG4gICAgICAgIGxldCBwcm9wZXJ0eU9iamVjdE5hbWUgPSBvYmplY3ROYW1lO1xuICAgICAgICBpZiAoc2VyaWFsaXplZE5hbWUgIT09IFwiXCIgJiYgc2VyaWFsaXplZE5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcHJvcGVydHlPYmplY3ROYW1lID0gb2JqZWN0TmFtZSArIFwiLlwiICsgc2VyaWFsaXplZE5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaGVhZGVyQ29sbGVjdGlvblByZWZpeCA9IHByb3BlcnR5TWFwcGVyLmhlYWRlckNvbGxlY3Rpb25QcmVmaXg7XG4gICAgICAgIGlmIChoZWFkZXJDb2xsZWN0aW9uUHJlZml4KSB7XG4gICAgICAgICAgICBjb25zdCBkaWN0aW9uYXJ5ID0ge307XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGhlYWRlcktleSBvZiBPYmplY3Qua2V5cyhyZXNwb25zZUJvZHkpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhlYWRlcktleS5zdGFydHNXaXRoKGhlYWRlckNvbGxlY3Rpb25QcmVmaXgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRpY3Rpb25hcnlbaGVhZGVyS2V5LnN1YnN0cmluZyhoZWFkZXJDb2xsZWN0aW9uUHJlZml4Lmxlbmd0aCldID0gc2VyaWFsaXplci5kZXNlcmlhbGl6ZShwcm9wZXJ0eU1hcHBlci50eXBlLnZhbHVlLCByZXNwb25zZUJvZHlbaGVhZGVyS2V5XSwgcHJvcGVydHlPYmplY3ROYW1lLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaGFuZGxlZFByb3BlcnR5TmFtZXMucHVzaChoZWFkZXJLZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW5zdGFuY2Vba2V5XSA9IGRpY3Rpb25hcnk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc2VyaWFsaXplci5pc1hNTCkge1xuICAgICAgICAgICAgaWYgKHByb3BlcnR5TWFwcGVyLnhtbElzQXR0cmlidXRlICYmIHJlc3BvbnNlQm9keVtpbnRlcmZhY2VzX2pzXzEuWE1MX0FUVFJLRVldKSB7XG4gICAgICAgICAgICAgICAgaW5zdGFuY2Vba2V5XSA9IHNlcmlhbGl6ZXIuZGVzZXJpYWxpemUocHJvcGVydHlNYXBwZXIsIHJlc3BvbnNlQm9keVtpbnRlcmZhY2VzX2pzXzEuWE1MX0FUVFJLRVldW3htbE5hbWVdLCBwcm9wZXJ0eU9iamVjdE5hbWUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAocHJvcGVydHlNYXBwZXIueG1sSXNNc1RleHQpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2VCb2R5W3htbENoYXJLZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2Vba2V5XSA9IHJlc3BvbnNlQm9keVt4bWxDaGFyS2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIHJlc3BvbnNlQm9keSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICAvLyBUaGUgc3BlY2lhbCBjYXNlIHdoZXJlIHhtbCBwYXJzZXIgcGFyc2VzIFwiPE5hbWU+Y29udGVudDwvTmFtZT5cIiBpbnRvIEpTT04gb2ZcbiAgICAgICAgICAgICAgICAgICAgLy8gICBgeyBuYW1lOiBcImNvbnRlbnRcIn1gIGluc3RlYWQgb2YgYHsgbmFtZTogeyBcIl9cIjogXCJjb250ZW50XCIgfX1gXG4gICAgICAgICAgICAgICAgICAgIGluc3RhbmNlW2tleV0gPSByZXNwb25zZUJvZHk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvcGVydHlOYW1lID0geG1sRWxlbWVudE5hbWUgfHwgeG1sTmFtZSB8fCBzZXJpYWxpemVkTmFtZTtcbiAgICAgICAgICAgICAgICBpZiAocHJvcGVydHlNYXBwZXIueG1sSXNXcmFwcGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIC8qIGEgbGlzdCBvZiA8eG1sRWxlbWVudE5hbWU+IHdyYXBwZWQgYnkgPHhtbE5hbWU+XG4gICAgICAgICAgICAgICAgICAgICAgRm9yIHRoZSB4bWwgZXhhbXBsZSBiZWxvd1xuICAgICAgICAgICAgICAgICAgICAgICAgPENvcnM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxDb3JzUnVsZT4uLi48L0NvcnNSdWxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8Q29yc1J1bGU+Li4uPC9Db3JzUnVsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQ29ycz5cbiAgICAgICAgICAgICAgICAgICAgICB0aGUgcmVzcG9uc2VCb2R5IGhhc1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBDb3JzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29yc1J1bGU6IFt7Li4ufSwgey4uLn1dXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB4bWxOYW1lIGlzIFwiQ29yc1wiIGFuZCB4bWxFbGVtZW50TmFtZSBpc1wiQ29yc1J1bGVcIi5cbiAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgd3JhcHBlZCA9IHJlc3BvbnNlQm9keVt4bWxOYW1lXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudExpc3QgPSAoX2IgPSB3cmFwcGVkID09PSBudWxsIHx8IHdyYXBwZWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHdyYXBwZWRbeG1sRWxlbWVudE5hbWVdKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBbXTtcbiAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2Vba2V5XSA9IHNlcmlhbGl6ZXIuZGVzZXJpYWxpemUocHJvcGVydHlNYXBwZXIsIGVsZW1lbnRMaXN0LCBwcm9wZXJ0eU9iamVjdE5hbWUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBoYW5kbGVkUHJvcGVydHlOYW1lcy5wdXNoKHhtbE5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvcGVydHkgPSByZXNwb25zZUJvZHlbcHJvcGVydHlOYW1lXTtcbiAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2Vba2V5XSA9IHNlcmlhbGl6ZXIuZGVzZXJpYWxpemUocHJvcGVydHlNYXBwZXIsIHByb3BlcnR5LCBwcm9wZXJ0eU9iamVjdE5hbWUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBoYW5kbGVkUHJvcGVydHlOYW1lcy5wdXNoKHByb3BlcnR5TmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gZGVzZXJpYWxpemUgdGhlIHByb3BlcnR5IGlmIGl0IGlzIHByZXNlbnQgaW4gdGhlIHByb3ZpZGVkIHJlc3BvbnNlQm9keSBpbnN0YW5jZVxuICAgICAgICAgICAgbGV0IHByb3BlcnR5SW5zdGFuY2U7XG4gICAgICAgICAgICBsZXQgcmVzID0gcmVzcG9uc2VCb2R5O1xuICAgICAgICAgICAgLy8gdHJhdmVyc2luZyB0aGUgb2JqZWN0IHN0ZXAgYnkgc3RlcC5cbiAgICAgICAgICAgIGxldCBzdGVwcyA9IDA7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgcGF0aHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXJlcylcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgc3RlcHMrKztcbiAgICAgICAgICAgICAgICByZXMgPSByZXNbaXRlbV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBvbmx5IGFjY2VwdCBudWxsIHdoZW4gcmVhY2hpbmcgdGhlIGxhc3QgcG9zaXRpb24gb2Ygb2JqZWN0IG90aGVyd2lzZSBpdCB3b3VsZCBiZSB1bmRlZmluZWRcbiAgICAgICAgICAgIGlmIChyZXMgPT09IG51bGwgJiYgc3RlcHMgPCBwYXRocy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXMgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcm9wZXJ0eUluc3RhbmNlID0gcmVzO1xuICAgICAgICAgICAgY29uc3QgcG9seW1vcnBoaWNEaXNjcmltaW5hdG9yID0gbWFwcGVyLnR5cGUucG9seW1vcnBoaWNEaXNjcmltaW5hdG9yO1xuICAgICAgICAgICAgLy8gY2hlY2tpbmcgdGhhdCB0aGUgbW9kZWwgcHJvcGVydHkgbmFtZSAoa2V5KShleDogXCJmaXNodHlwZVwiKSBhbmQgdGhlXG4gICAgICAgICAgICAvLyBjbGllbnROYW1lIG9mIHRoZSBwb2x5bW9ycGhpY0Rpc2NyaW1pbmF0b3Ige21ldGFkYXRhfSAoZXg6IFwiZmlzaHR5cGVcIilcbiAgICAgICAgICAgIC8vIGluc3RlYWQgb2YgdGhlIHNlcmlhbGl6ZWROYW1lIG9mIHRoZSBwb2x5bW9ycGhpY0Rpc2NyaW1pbmF0b3IgKGV4OiBcImZpc2gudHlwZVwiKVxuICAgICAgICAgICAgLy8gaXMgYSBiZXR0ZXIgYXBwcm9hY2guIFRoZSBnZW5lcmF0b3IgaXMgbm90IGNvbnNpc3RlbnQgd2l0aCBlc2NhcGluZyAnXFwuJyBpbiB0aGVcbiAgICAgICAgICAgIC8vIHNlcmlhbGl6ZWROYW1lIG9mIHRoZSBwcm9wZXJ0eSAoZXg6IFwiZmlzaFxcLnR5cGVcIikgdGhhdCBpcyBtYXJrZWQgYXMgcG9seW1vcnBoaWMgZGlzY3JpbWluYXRvclxuICAgICAgICAgICAgLy8gYW5kIHRoZSBzZXJpYWxpemVkTmFtZSBvZiB0aGUgbWV0YWRhdGEgcG9seW1vcnBoaWNEaXNjcmltaW5hdG9yIChleDogXCJmaXNoLnR5cGVcIikuIEhvd2V2ZXIsXG4gICAgICAgICAgICAvLyB0aGUgY2xpZW50TmFtZSB0cmFuc2Zvcm1hdGlvbiBvZiB0aGUgcG9seW1vcnBoaWNEaXNjcmltaW5hdG9yIChleDogXCJmaXNodHlwZVwiKSBhbmRcbiAgICAgICAgICAgIC8vIHRoZSB0cmFuc2Zvcm1hdGlvbiBvZiBtb2RlbCBwcm9wZXJ0eSBuYW1lIChleDogXCJmaXNodHlwZVwiKSBpcyBkb25lIGNvbnNpc3RlbnRseS5cbiAgICAgICAgICAgIC8vIEhlbmNlLCBpdCBpcyBhIHNhZmVyIGJldCB0byByZWx5IG9uIHRoZSBjbGllbnROYW1lIG9mIHRoZSBwb2x5bW9ycGhpY0Rpc2NyaW1pbmF0b3IuXG4gICAgICAgICAgICBpZiAocG9seW1vcnBoaWNEaXNjcmltaW5hdG9yICYmXG4gICAgICAgICAgICAgICAga2V5ID09PSBwb2x5bW9ycGhpY0Rpc2NyaW1pbmF0b3IuY2xpZW50TmFtZSAmJlxuICAgICAgICAgICAgICAgIChwcm9wZXJ0eUluc3RhbmNlID09PSB1bmRlZmluZWQgfHwgcHJvcGVydHlJbnN0YW5jZSA9PT0gbnVsbCkpIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eUluc3RhbmNlID0gbWFwcGVyLnNlcmlhbGl6ZWROYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHNlcmlhbGl6ZWRWYWx1ZTtcbiAgICAgICAgICAgIC8vIHBhZ2luZ1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzcG9uc2VCb2R5W2tleV0pICYmIG1vZGVsUHJvcHNba2V5XS5zZXJpYWxpemVkTmFtZSA9PT0gXCJcIikge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5SW5zdGFuY2UgPSByZXNwb25zZUJvZHlba2V5XTtcbiAgICAgICAgICAgICAgICBjb25zdCBhcnJheUluc3RhbmNlID0gc2VyaWFsaXplci5kZXNlcmlhbGl6ZShwcm9wZXJ0eU1hcHBlciwgcHJvcGVydHlJbnN0YW5jZSwgcHJvcGVydHlPYmplY3ROYW1lLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAvLyBDb3B5IG92ZXIgYW55IHByb3BlcnRpZXMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBhZGRlZCBpbnRvIHRoZSBpbnN0YW5jZSwgd2hlcmUgdGhleSBkb1xuICAgICAgICAgICAgICAgIC8vIG5vdCBleGlzdCBvbiB0aGUgbmV3bHkgZGUtc2VyaWFsaXplZCBhcnJheVxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKGluc3RhbmNlKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhcnJheUluc3RhbmNlLCBrKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlJbnN0YW5jZVtrXSA9IHY7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaW5zdGFuY2UgPSBhcnJheUluc3RhbmNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAocHJvcGVydHlJbnN0YW5jZSAhPT0gdW5kZWZpbmVkIHx8IHByb3BlcnR5TWFwcGVyLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZFZhbHVlID0gc2VyaWFsaXplci5kZXNlcmlhbGl6ZShwcm9wZXJ0eU1hcHBlciwgcHJvcGVydHlJbnN0YW5jZSwgcHJvcGVydHlPYmplY3ROYW1lLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICBpbnN0YW5jZVtrZXldID0gc2VyaWFsaXplZFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGFkZGl0aW9uYWxQcm9wZXJ0aWVzTWFwcGVyID0gbWFwcGVyLnR5cGUuYWRkaXRpb25hbFByb3BlcnRpZXM7XG4gICAgaWYgKGFkZGl0aW9uYWxQcm9wZXJ0aWVzTWFwcGVyKSB7XG4gICAgICAgIGNvbnN0IGlzQWRkaXRpb25hbFByb3BlcnR5ID0gKHJlc3BvbnNlUHJvcE5hbWUpID0+IHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY2xpZW50UHJvcE5hbWUgaW4gbW9kZWxQcm9wcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGhzID0gc3BsaXRTZXJpYWxpemVOYW1lKG1vZGVsUHJvcHNbY2xpZW50UHJvcE5hbWVdLnNlcmlhbGl6ZWROYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAocGF0aHNbMF0gPT09IHJlc3BvbnNlUHJvcE5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9O1xuICAgICAgICBmb3IgKGNvbnN0IHJlc3BvbnNlUHJvcE5hbWUgaW4gcmVzcG9uc2VCb2R5KSB7XG4gICAgICAgICAgICBpZiAoaXNBZGRpdGlvbmFsUHJvcGVydHkocmVzcG9uc2VQcm9wTmFtZSkpIHtcbiAgICAgICAgICAgICAgICBpbnN0YW5jZVtyZXNwb25zZVByb3BOYW1lXSA9IHNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoYWRkaXRpb25hbFByb3BlcnRpZXNNYXBwZXIsIHJlc3BvbnNlQm9keVtyZXNwb25zZVByb3BOYW1lXSwgb2JqZWN0TmFtZSArICdbXCInICsgcmVzcG9uc2VQcm9wTmFtZSArICdcIl0nLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChyZXNwb25zZUJvZHkgJiYgIW9wdGlvbnMuaWdub3JlVW5rbm93blByb3BlcnRpZXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocmVzcG9uc2VCb2R5KSkge1xuICAgICAgICAgICAgaWYgKGluc3RhbmNlW2tleV0gPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICFoYW5kbGVkUHJvcGVydHlOYW1lcy5pbmNsdWRlcyhrZXkpICYmXG4gICAgICAgICAgICAgICAgIWlzU3BlY2lhbFhtbFByb3BlcnR5KGtleSwgb3B0aW9ucykpIHtcbiAgICAgICAgICAgICAgICBpbnN0YW5jZVtrZXldID0gcmVzcG9uc2VCb2R5W2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGluc3RhbmNlO1xufVxuZnVuY3Rpb24gZGVzZXJpYWxpemVEaWN0aW9uYXJ5VHlwZShzZXJpYWxpemVyLCBtYXBwZXIsIHJlc3BvbnNlQm9keSwgb2JqZWN0TmFtZSwgb3B0aW9ucykge1xuICAgIC8qIGpzaGludCB2YWxpZHRoaXM6IHRydWUgKi9cbiAgICBjb25zdCB2YWx1ZSA9IG1hcHBlci50eXBlLnZhbHVlO1xuICAgIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgXCJ2YWx1ZVwiIG1ldGFkYXRhIGZvciBhIERpY3Rpb25hcnkgbXVzdCBiZSBkZWZpbmVkIGluIHRoZSBgICtcbiAgICAgICAgICAgIGBtYXBwZXIgYW5kIGl0IG11c3Qgb2YgdHlwZSBcIm9iamVjdFwiIGluICR7b2JqZWN0TmFtZX1gKTtcbiAgICB9XG4gICAgaWYgKHJlc3BvbnNlQm9keSkge1xuICAgICAgICBjb25zdCB0ZW1wRGljdGlvbmFyeSA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhyZXNwb25zZUJvZHkpKSB7XG4gICAgICAgICAgICB0ZW1wRGljdGlvbmFyeVtrZXldID0gc2VyaWFsaXplci5kZXNlcmlhbGl6ZSh2YWx1ZSwgcmVzcG9uc2VCb2R5W2tleV0sIG9iamVjdE5hbWUsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0ZW1wRGljdGlvbmFyeTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3BvbnNlQm9keTtcbn1cbmZ1bmN0aW9uIGRlc2VyaWFsaXplU2VxdWVuY2VUeXBlKHNlcmlhbGl6ZXIsIG1hcHBlciwgcmVzcG9uc2VCb2R5LCBvYmplY3ROYW1lLCBvcHRpb25zKSB7XG4gICAgdmFyIF9hO1xuICAgIGxldCBlbGVtZW50ID0gbWFwcGVyLnR5cGUuZWxlbWVudDtcbiAgICBpZiAoIWVsZW1lbnQgfHwgdHlwZW9mIGVsZW1lbnQgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBlbGVtZW50XCIgbWV0YWRhdGEgZm9yIGFuIEFycmF5IG11c3QgYmUgZGVmaW5lZCBpbiB0aGUgYCArXG4gICAgICAgICAgICBgbWFwcGVyIGFuZCBpdCBtdXN0IG9mIHR5cGUgXCJvYmplY3RcIiBpbiAke29iamVjdE5hbWV9YCk7XG4gICAgfVxuICAgIGlmIChyZXNwb25zZUJvZHkpIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJlc3BvbnNlQm9keSkpIHtcbiAgICAgICAgICAgIC8vIHhtbDJqcyB3aWxsIGludGVycHJldCBhIHNpbmdsZSBlbGVtZW50IGFycmF5IGFzIGp1c3QgdGhlIGVsZW1lbnQsIHNvIGZvcmNlIGl0IHRvIGJlIGFuIGFycmF5XG4gICAgICAgICAgICByZXNwb25zZUJvZHkgPSBbcmVzcG9uc2VCb2R5XTtcbiAgICAgICAgfVxuICAgICAgICAvLyBRdWlyazogQ29tcG9zaXRlIG1hcHBlcnMgcmVmZXJlbmNlZCBieSBgZWxlbWVudGAgbWlnaHRcbiAgICAgICAgLy8gbm90IGhhdmUgKmFsbCogcHJvcGVydGllcyBkZWNsYXJlZCAobGlrZSB1YmVyUGFyZW50KSxcbiAgICAgICAgLy8gc28gbGV0J3MgdHJ5IHRvIGxvb2sgdXAgdGhlIGZ1bGwgZGVmaW5pdGlvbiBieSBuYW1lLlxuICAgICAgICBpZiAoZWxlbWVudC50eXBlLm5hbWUgPT09IFwiQ29tcG9zaXRlXCIgJiYgZWxlbWVudC50eXBlLmNsYXNzTmFtZSkge1xuICAgICAgICAgICAgZWxlbWVudCA9IChfYSA9IHNlcmlhbGl6ZXIubW9kZWxNYXBwZXJzW2VsZW1lbnQudHlwZS5jbGFzc05hbWVdKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBlbGVtZW50O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRlbXBBcnJheSA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc3BvbnNlQm9keS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGVtcEFycmF5W2ldID0gc2VyaWFsaXplci5kZXNlcmlhbGl6ZShlbGVtZW50LCByZXNwb25zZUJvZHlbaV0sIGAke29iamVjdE5hbWV9WyR7aX1dYCwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRlbXBBcnJheTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3BvbnNlQm9keTtcbn1cbmZ1bmN0aW9uIGdldEluZGV4RGlzY3JpbWluYXRvcihkaXNjcmltaW5hdG9ycywgZGlzY3JpbWluYXRvclZhbHVlLCB0eXBlTmFtZSkge1xuICAgIGNvbnN0IHR5cGVOYW1lc1RvQ2hlY2sgPSBbdHlwZU5hbWVdO1xuICAgIHdoaWxlICh0eXBlTmFtZXNUb0NoZWNrLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBjdXJyZW50TmFtZSA9IHR5cGVOYW1lc1RvQ2hlY2suc2hpZnQoKTtcbiAgICAgICAgY29uc3QgaW5kZXhEaXNjcmltaW5hdG9yID0gZGlzY3JpbWluYXRvclZhbHVlID09PSBjdXJyZW50TmFtZVxuICAgICAgICAgICAgPyBkaXNjcmltaW5hdG9yVmFsdWVcbiAgICAgICAgICAgIDogY3VycmVudE5hbWUgKyBcIi5cIiArIGRpc2NyaW1pbmF0b3JWYWx1ZTtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkaXNjcmltaW5hdG9ycywgaW5kZXhEaXNjcmltaW5hdG9yKSkge1xuICAgICAgICAgICAgcmV0dXJuIGRpc2NyaW1pbmF0b3JzW2luZGV4RGlzY3JpbWluYXRvcl07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtuYW1lLCBtYXBwZXJdIG9mIE9iamVjdC5lbnRyaWVzKGRpc2NyaW1pbmF0b3JzKSkge1xuICAgICAgICAgICAgICAgIGlmIChuYW1lLnN0YXJ0c1dpdGgoY3VycmVudE5hbWUgKyBcIi5cIikgJiZcbiAgICAgICAgICAgICAgICAgICAgbWFwcGVyLnR5cGUudWJlclBhcmVudCA9PT0gY3VycmVudE5hbWUgJiZcbiAgICAgICAgICAgICAgICAgICAgbWFwcGVyLnR5cGUuY2xhc3NOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGVOYW1lc1RvQ2hlY2sucHVzaChtYXBwZXIudHlwZS5jbGFzc05hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gZ2V0UG9seW1vcnBoaWNNYXBwZXIoc2VyaWFsaXplciwgbWFwcGVyLCBvYmplY3QsIHBvbHltb3JwaGljUHJvcGVydHlOYW1lKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IHBvbHltb3JwaGljRGlzY3JpbWluYXRvciA9IGdldFBvbHltb3JwaGljRGlzY3JpbWluYXRvclJlY3Vyc2l2ZWx5KHNlcmlhbGl6ZXIsIG1hcHBlcik7XG4gICAgaWYgKHBvbHltb3JwaGljRGlzY3JpbWluYXRvcikge1xuICAgICAgICBsZXQgZGlzY3JpbWluYXRvck5hbWUgPSBwb2x5bW9ycGhpY0Rpc2NyaW1pbmF0b3JbcG9seW1vcnBoaWNQcm9wZXJ0eU5hbWVdO1xuICAgICAgICBpZiAoZGlzY3JpbWluYXRvck5hbWUpIHtcbiAgICAgICAgICAgIC8vIFRoZSBzZXJpYWxpemVkTmFtZSBtaWdodCBoYXZlIFxcXFwsIHdoaWNoIHdlIGp1c3Qgd2FudCB0byBpZ25vcmVcbiAgICAgICAgICAgIGlmIChwb2x5bW9ycGhpY1Byb3BlcnR5TmFtZSA9PT0gXCJzZXJpYWxpemVkTmFtZVwiKSB7XG4gICAgICAgICAgICAgICAgZGlzY3JpbWluYXRvck5hbWUgPSBkaXNjcmltaW5hdG9yTmFtZS5yZXBsYWNlKC9cXFxcL2dpLCBcIlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRpc2NyaW1pbmF0b3JWYWx1ZSA9IG9iamVjdFtkaXNjcmltaW5hdG9yTmFtZV07XG4gICAgICAgICAgICBjb25zdCB0eXBlTmFtZSA9IChfYSA9IG1hcHBlci50eXBlLnViZXJQYXJlbnQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IG1hcHBlci50eXBlLmNsYXNzTmFtZTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZGlzY3JpbWluYXRvclZhbHVlID09PSBcInN0cmluZ1wiICYmIHR5cGVOYW1lKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcG9seW1vcnBoaWNNYXBwZXIgPSBnZXRJbmRleERpc2NyaW1pbmF0b3Ioc2VyaWFsaXplci5tb2RlbE1hcHBlcnMuZGlzY3JpbWluYXRvcnMsIGRpc2NyaW1pbmF0b3JWYWx1ZSwgdHlwZU5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChwb2x5bW9ycGhpY01hcHBlcikge1xuICAgICAgICAgICAgICAgICAgICBtYXBwZXIgPSBwb2x5bW9ycGhpY01hcHBlcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hcHBlcjtcbn1cbmZ1bmN0aW9uIGdldFBvbHltb3JwaGljRGlzY3JpbWluYXRvclJlY3Vyc2l2ZWx5KHNlcmlhbGl6ZXIsIG1hcHBlcikge1xuICAgIHJldHVybiAobWFwcGVyLnR5cGUucG9seW1vcnBoaWNEaXNjcmltaW5hdG9yIHx8XG4gICAgICAgIGdldFBvbHltb3JwaGljRGlzY3JpbWluYXRvclNhZmVseShzZXJpYWxpemVyLCBtYXBwZXIudHlwZS51YmVyUGFyZW50KSB8fFxuICAgICAgICBnZXRQb2x5bW9ycGhpY0Rpc2NyaW1pbmF0b3JTYWZlbHkoc2VyaWFsaXplciwgbWFwcGVyLnR5cGUuY2xhc3NOYW1lKSk7XG59XG5mdW5jdGlvbiBnZXRQb2x5bW9ycGhpY0Rpc2NyaW1pbmF0b3JTYWZlbHkoc2VyaWFsaXplciwgdHlwZU5hbWUpIHtcbiAgICByZXR1cm4gKHR5cGVOYW1lICYmXG4gICAgICAgIHNlcmlhbGl6ZXIubW9kZWxNYXBwZXJzW3R5cGVOYW1lXSAmJlxuICAgICAgICBzZXJpYWxpemVyLm1vZGVsTWFwcGVyc1t0eXBlTmFtZV0udHlwZS5wb2x5bW9ycGhpY0Rpc2NyaW1pbmF0b3IpO1xufVxuLyoqXG4gKiBLbm93biB0eXBlcyBvZiBNYXBwZXJzXG4gKi9cbmV4cG9ydHMuTWFwcGVyVHlwZU5hbWVzID0ge1xuICAgIEJhc2U2NFVybDogXCJCYXNlNjRVcmxcIixcbiAgICBCb29sZWFuOiBcIkJvb2xlYW5cIixcbiAgICBCeXRlQXJyYXk6IFwiQnl0ZUFycmF5XCIsXG4gICAgQ29tcG9zaXRlOiBcIkNvbXBvc2l0ZVwiLFxuICAgIERhdGU6IFwiRGF0ZVwiLFxuICAgIERhdGVUaW1lOiBcIkRhdGVUaW1lXCIsXG4gICAgRGF0ZVRpbWVSZmMxMTIzOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgIERpY3Rpb25hcnk6IFwiRGljdGlvbmFyeVwiLFxuICAgIEVudW06IFwiRW51bVwiLFxuICAgIE51bWJlcjogXCJOdW1iZXJcIixcbiAgICBPYmplY3Q6IFwiT2JqZWN0XCIsXG4gICAgU2VxdWVuY2U6IFwiU2VxdWVuY2VcIixcbiAgICBTdHJpbmc6IFwiU3RyaW5nXCIsXG4gICAgU3RyZWFtOiBcIlN0cmVhbVwiLFxuICAgIFRpbWVTcGFuOiBcIlRpbWVTcGFuXCIsXG4gICAgVW5peFRpbWU6IFwiVW5peFRpbWVcIixcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zZXJpYWxpemVyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc3RhdGUgPSB2b2lkIDA7XG4vKipcbiAqIEhvbGRzIHRoZSBzaW5nbGV0b24gb3BlcmF0aW9uUmVxdWVzdE1hcCwgdG8gYmUgc2hhcmVkIGFjcm9zcyBDSlMgYW5kIEVTTSBpbXBvcnRzLlxuICovXG5leHBvcnRzLnN0YXRlID0ge1xuICAgIG9wZXJhdGlvblJlcXVlc3RNYXA6IG5ldyBXZWFrTWFwKCksXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3RhdGUtY2pzLmNqcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldE9wZXJhdGlvblJlcXVlc3RJbmZvID0gZXhwb3J0cy5nZXRPcGVyYXRpb25Bcmd1bWVudFZhbHVlRnJvbVBhcmFtZXRlciA9IHZvaWQgMDtcbmNvbnN0IHN0YXRlX2pzXzEgPSByZXF1aXJlKFwiLi9zdGF0ZS5qc1wiKTtcbi8qKlxuICogQGludGVybmFsXG4gKiBSZXRyaWV2ZXMgdGhlIHZhbHVlIHRvIHVzZSBmb3IgYSBnaXZlbiBvcGVyYXRpb24gYXJndW1lbnRcbiAqIEBwYXJhbSBvcGVyYXRpb25Bcmd1bWVudHMgLSBUaGUgYXJndW1lbnRzIHBhc3NlZCBmcm9tIHRoZSBnZW5lcmF0ZWQgY2xpZW50XG4gKiBAcGFyYW0gcGFyYW1ldGVyIC0gVGhlIHBhcmFtZXRlciBkZXNjcmlwdGlvblxuICogQHBhcmFtIGZhbGxiYWNrT2JqZWN0IC0gSWYgc29tZXRoaW5nIGlzbid0IGZvdW5kIGluIHRoZSBhcmd1bWVudHMgYmFnLCBsb29rIGhlcmUuXG4gKiAgR2VuZXJhbGx5IHVzZWQgdG8gbG9vayBhdCB0aGUgc2VydmljZSBjbGllbnQgcHJvcGVydGllcy5cbiAqL1xuZnVuY3Rpb24gZ2V0T3BlcmF0aW9uQXJndW1lbnRWYWx1ZUZyb21QYXJhbWV0ZXIob3BlcmF0aW9uQXJndW1lbnRzLCBwYXJhbWV0ZXIsIGZhbGxiYWNrT2JqZWN0KSB7XG4gICAgbGV0IHBhcmFtZXRlclBhdGggPSBwYXJhbWV0ZXIucGFyYW1ldGVyUGF0aDtcbiAgICBjb25zdCBwYXJhbWV0ZXJNYXBwZXIgPSBwYXJhbWV0ZXIubWFwcGVyO1xuICAgIGxldCB2YWx1ZTtcbiAgICBpZiAodHlwZW9mIHBhcmFtZXRlclBhdGggPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcGFyYW1ldGVyUGF0aCA9IFtwYXJhbWV0ZXJQYXRoXTtcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocGFyYW1ldGVyUGF0aCkpIHtcbiAgICAgICAgaWYgKHBhcmFtZXRlclBhdGgubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgaWYgKHBhcmFtZXRlck1hcHBlci5pc0NvbnN0YW50KSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJhbWV0ZXJNYXBwZXIuZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbGV0IHByb3BlcnR5U2VhcmNoUmVzdWx0ID0gZ2V0UHJvcGVydHlGcm9tUGFyYW1ldGVyUGF0aChvcGVyYXRpb25Bcmd1bWVudHMsIHBhcmFtZXRlclBhdGgpO1xuICAgICAgICAgICAgICAgIGlmICghcHJvcGVydHlTZWFyY2hSZXN1bHQucHJvcGVydHlGb3VuZCAmJiBmYWxsYmFja09iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVNlYXJjaFJlc3VsdCA9IGdldFByb3BlcnR5RnJvbVBhcmFtZXRlclBhdGgoZmFsbGJhY2tPYmplY3QsIHBhcmFtZXRlclBhdGgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgdXNlRGVmYXVsdFZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKCFwcm9wZXJ0eVNlYXJjaFJlc3VsdC5wcm9wZXJ0eUZvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIHVzZURlZmF1bHRWYWx1ZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJNYXBwZXIucmVxdWlyZWQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGFyYW1ldGVyUGF0aFswXSA9PT0gXCJvcHRpb25zXCIgJiYgcGFyYW1ldGVyUGF0aC5sZW5ndGggPT09IDIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHVzZURlZmF1bHRWYWx1ZSA/IHBhcmFtZXRlck1hcHBlci5kZWZhdWx0VmFsdWUgOiBwcm9wZXJ0eVNlYXJjaFJlc3VsdC5wcm9wZXJ0eVZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAocGFyYW1ldGVyTWFwcGVyLnJlcXVpcmVkKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgcHJvcGVydHlOYW1lIGluIHBhcmFtZXRlclBhdGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5TWFwcGVyID0gcGFyYW1ldGVyTWFwcGVyLnR5cGUubW9kZWxQcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV07XG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0eVBhdGggPSBwYXJhbWV0ZXJQYXRoW3Byb3BlcnR5TmFtZV07XG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0eVZhbHVlID0gZ2V0T3BlcmF0aW9uQXJndW1lbnRWYWx1ZUZyb21QYXJhbWV0ZXIob3BlcmF0aW9uQXJndW1lbnRzLCB7XG4gICAgICAgICAgICAgICAgcGFyYW1ldGVyUGF0aDogcHJvcGVydHlQYXRoLFxuICAgICAgICAgICAgICAgIG1hcHBlcjogcHJvcGVydHlNYXBwZXIsXG4gICAgICAgICAgICB9LCBmYWxsYmFja09iamVjdCk7XG4gICAgICAgICAgICBpZiAocHJvcGVydHlWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YWx1ZVtwcm9wZXJ0eU5hbWVdID0gcHJvcGVydHlWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59XG5leHBvcnRzLmdldE9wZXJhdGlvbkFyZ3VtZW50VmFsdWVGcm9tUGFyYW1ldGVyID0gZ2V0T3BlcmF0aW9uQXJndW1lbnRWYWx1ZUZyb21QYXJhbWV0ZXI7XG5mdW5jdGlvbiBnZXRQcm9wZXJ0eUZyb21QYXJhbWV0ZXJQYXRoKHBhcmVudCwgcGFyYW1ldGVyUGF0aCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHsgcHJvcGVydHlGb3VuZDogZmFsc2UgfTtcbiAgICBsZXQgaSA9IDA7XG4gICAgZm9yICg7IGkgPCBwYXJhbWV0ZXJQYXRoLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGNvbnN0IHBhcmFtZXRlclBhdGhQYXJ0ID0gcGFyYW1ldGVyUGF0aFtpXTtcbiAgICAgICAgLy8gTWFrZSBzdXJlIHRvIGNoZWNrIGluaGVyaXRlZCBwcm9wZXJ0aWVzIHRvbywgc28gZG9uJ3QgdXNlIGhhc093blByb3BlcnR5KCkuXG4gICAgICAgIGlmIChwYXJlbnQgJiYgcGFyYW1ldGVyUGF0aFBhcnQgaW4gcGFyZW50KSB7XG4gICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnRbcGFyYW1ldGVyUGF0aFBhcnRdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGkgPT09IHBhcmFtZXRlclBhdGgubGVuZ3RoKSB7XG4gICAgICAgIHJlc3VsdC5wcm9wZXJ0eVZhbHVlID0gcGFyZW50O1xuICAgICAgICByZXN1bHQucHJvcGVydHlGb3VuZCA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5jb25zdCBvcmlnaW5hbFJlcXVlc3RTeW1ib2wgPSBTeW1ib2wuZm9yKFwiQGF6dXJlL2NvcmUtY2xpZW50IG9yaWdpbmFsIHJlcXVlc3RcIik7XG5mdW5jdGlvbiBoYXNPcmlnaW5hbFJlcXVlc3QocmVxdWVzdCkge1xuICAgIHJldHVybiBvcmlnaW5hbFJlcXVlc3RTeW1ib2wgaW4gcmVxdWVzdDtcbn1cbmZ1bmN0aW9uIGdldE9wZXJhdGlvblJlcXVlc3RJbmZvKHJlcXVlc3QpIHtcbiAgICBpZiAoaGFzT3JpZ2luYWxSZXF1ZXN0KHJlcXVlc3QpKSB7XG4gICAgICAgIHJldHVybiBnZXRPcGVyYXRpb25SZXF1ZXN0SW5mbyhyZXF1ZXN0W29yaWdpbmFsUmVxdWVzdFN5bWJvbF0pO1xuICAgIH1cbiAgICBsZXQgaW5mbyA9IHN0YXRlX2pzXzEuc3RhdGUub3BlcmF0aW9uUmVxdWVzdE1hcC5nZXQocmVxdWVzdCk7XG4gICAgaWYgKCFpbmZvKSB7XG4gICAgICAgIGluZm8gPSB7fTtcbiAgICAgICAgc3RhdGVfanNfMS5zdGF0ZS5vcGVyYXRpb25SZXF1ZXN0TWFwLnNldChyZXF1ZXN0LCBpbmZvKTtcbiAgICB9XG4gICAgcmV0dXJuIGluZm87XG59XG5leHBvcnRzLmdldE9wZXJhdGlvblJlcXVlc3RJbmZvID0gZ2V0T3BlcmF0aW9uUmVxdWVzdEluZm87XG4vLyMgc291cmNlTWFwcGluZ1VSTD1vcGVyYXRpb25IZWxwZXJzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZGVzZXJpYWxpemF0aW9uUG9saWN5ID0gZXhwb3J0cy5kZXNlcmlhbGl6YXRpb25Qb2xpY3lOYW1lID0gdm9pZCAwO1xuY29uc3QgaW50ZXJmYWNlc19qc18xID0gcmVxdWlyZShcIi4vaW50ZXJmYWNlcy5qc1wiKTtcbmNvbnN0IGNvcmVfcmVzdF9waXBlbGluZV8xID0gcmVxdWlyZShcIkBhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmVcIik7XG5jb25zdCBzZXJpYWxpemVyX2pzXzEgPSByZXF1aXJlKFwiLi9zZXJpYWxpemVyLmpzXCIpO1xuY29uc3Qgb3BlcmF0aW9uSGVscGVyc19qc18xID0gcmVxdWlyZShcIi4vb3BlcmF0aW9uSGVscGVycy5qc1wiKTtcbmNvbnN0IGRlZmF1bHRKc29uQ29udGVudFR5cGVzID0gW1wiYXBwbGljYXRpb24vanNvblwiLCBcInRleHQvanNvblwiXTtcbmNvbnN0IGRlZmF1bHRYbWxDb250ZW50VHlwZXMgPSBbXCJhcHBsaWNhdGlvbi94bWxcIiwgXCJhcHBsaWNhdGlvbi9hdG9tK3htbFwiXTtcbi8qKlxuICogVGhlIHByb2dyYW1tYXRpYyBpZGVudGlmaWVyIG9mIHRoZSBkZXNlcmlhbGl6YXRpb25Qb2xpY3kuXG4gKi9cbmV4cG9ydHMuZGVzZXJpYWxpemF0aW9uUG9saWN5TmFtZSA9IFwiZGVzZXJpYWxpemF0aW9uUG9saWN5XCI7XG4vKipcbiAqIFRoaXMgcG9saWN5IGhhbmRsZXMgcGFyc2luZyBvdXQgcmVzcG9uc2VzIGFjY29yZGluZyB0byBPcGVyYXRpb25TcGVjcyBvbiB0aGUgcmVxdWVzdC5cbiAqL1xuZnVuY3Rpb24gZGVzZXJpYWxpemF0aW9uUG9saWN5KG9wdGlvbnMgPSB7fSkge1xuICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2UsIF9mLCBfZztcbiAgICBjb25zdCBqc29uQ29udGVudFR5cGVzID0gKF9iID0gKF9hID0gb3B0aW9ucy5leHBlY3RlZENvbnRlbnRUeXBlcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmpzb24pICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IGRlZmF1bHRKc29uQ29udGVudFR5cGVzO1xuICAgIGNvbnN0IHhtbENvbnRlbnRUeXBlcyA9IChfZCA9IChfYyA9IG9wdGlvbnMuZXhwZWN0ZWRDb250ZW50VHlwZXMpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy54bWwpICE9PSBudWxsICYmIF9kICE9PSB2b2lkIDAgPyBfZCA6IGRlZmF1bHRYbWxDb250ZW50VHlwZXM7XG4gICAgY29uc3QgcGFyc2VYTUwgPSBvcHRpb25zLnBhcnNlWE1MO1xuICAgIGNvbnN0IHNlcmlhbGl6ZXJPcHRpb25zID0gb3B0aW9ucy5zZXJpYWxpemVyT3B0aW9ucztcbiAgICBjb25zdCB1cGRhdGVkT3B0aW9ucyA9IHtcbiAgICAgICAgeG1sOiB7XG4gICAgICAgICAgICByb290TmFtZTogKF9lID0gc2VyaWFsaXplck9wdGlvbnMgPT09IG51bGwgfHwgc2VyaWFsaXplck9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlcmlhbGl6ZXJPcHRpb25zLnhtbC5yb290TmFtZSkgIT09IG51bGwgJiYgX2UgIT09IHZvaWQgMCA/IF9lIDogXCJcIixcbiAgICAgICAgICAgIGluY2x1ZGVSb290OiAoX2YgPSBzZXJpYWxpemVyT3B0aW9ucyA9PT0gbnVsbCB8fCBzZXJpYWxpemVyT3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VyaWFsaXplck9wdGlvbnMueG1sLmluY2x1ZGVSb290KSAhPT0gbnVsbCAmJiBfZiAhPT0gdm9pZCAwID8gX2YgOiBmYWxzZSxcbiAgICAgICAgICAgIHhtbENoYXJLZXk6IChfZyA9IHNlcmlhbGl6ZXJPcHRpb25zID09PSBudWxsIHx8IHNlcmlhbGl6ZXJPcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZXJpYWxpemVyT3B0aW9ucy54bWwueG1sQ2hhcktleSkgIT09IG51bGwgJiYgX2cgIT09IHZvaWQgMCA/IF9nIDogaW50ZXJmYWNlc19qc18xLlhNTF9DSEFSS0VZLFxuICAgICAgICB9LFxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogZXhwb3J0cy5kZXNlcmlhbGl6YXRpb25Qb2xpY3lOYW1lLFxuICAgICAgICBhc3luYyBzZW5kUmVxdWVzdChyZXF1ZXN0LCBuZXh0KSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG5leHQocmVxdWVzdCk7XG4gICAgICAgICAgICByZXR1cm4gZGVzZXJpYWxpemVSZXNwb25zZUJvZHkoanNvbkNvbnRlbnRUeXBlcywgeG1sQ29udGVudFR5cGVzLCByZXNwb25zZSwgdXBkYXRlZE9wdGlvbnMsIHBhcnNlWE1MKTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuZXhwb3J0cy5kZXNlcmlhbGl6YXRpb25Qb2xpY3kgPSBkZXNlcmlhbGl6YXRpb25Qb2xpY3k7XG5mdW5jdGlvbiBnZXRPcGVyYXRpb25SZXNwb25zZU1hcChwYXJzZWRSZXNwb25zZSkge1xuICAgIGxldCByZXN1bHQ7XG4gICAgY29uc3QgcmVxdWVzdCA9IHBhcnNlZFJlc3BvbnNlLnJlcXVlc3Q7XG4gICAgY29uc3Qgb3BlcmF0aW9uSW5mbyA9ICgwLCBvcGVyYXRpb25IZWxwZXJzX2pzXzEuZ2V0T3BlcmF0aW9uUmVxdWVzdEluZm8pKHJlcXVlc3QpO1xuICAgIGNvbnN0IG9wZXJhdGlvblNwZWMgPSBvcGVyYXRpb25JbmZvID09PSBudWxsIHx8IG9wZXJhdGlvbkluZm8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wZXJhdGlvbkluZm8ub3BlcmF0aW9uU3BlYztcbiAgICBpZiAob3BlcmF0aW9uU3BlYykge1xuICAgICAgICBpZiAoIShvcGVyYXRpb25JbmZvID09PSBudWxsIHx8IG9wZXJhdGlvbkluZm8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wZXJhdGlvbkluZm8ub3BlcmF0aW9uUmVzcG9uc2VHZXR0ZXIpKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBvcGVyYXRpb25TcGVjLnJlc3BvbnNlc1twYXJzZWRSZXNwb25zZS5zdGF0dXNdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0ID0gb3BlcmF0aW9uSW5mbyA9PT0gbnVsbCB8fCBvcGVyYXRpb25JbmZvID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcGVyYXRpb25JbmZvLm9wZXJhdGlvblJlc3BvbnNlR2V0dGVyKG9wZXJhdGlvblNwZWMsIHBhcnNlZFJlc3BvbnNlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gc2hvdWxkRGVzZXJpYWxpemVSZXNwb25zZShwYXJzZWRSZXNwb25zZSkge1xuICAgIGNvbnN0IHJlcXVlc3QgPSBwYXJzZWRSZXNwb25zZS5yZXF1ZXN0O1xuICAgIGNvbnN0IG9wZXJhdGlvbkluZm8gPSAoMCwgb3BlcmF0aW9uSGVscGVyc19qc18xLmdldE9wZXJhdGlvblJlcXVlc3RJbmZvKShyZXF1ZXN0KTtcbiAgICBjb25zdCBzaG91bGREZXNlcmlhbGl6ZSA9IG9wZXJhdGlvbkluZm8gPT09IG51bGwgfHwgb3BlcmF0aW9uSW5mbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3BlcmF0aW9uSW5mby5zaG91bGREZXNlcmlhbGl6ZTtcbiAgICBsZXQgcmVzdWx0O1xuICAgIGlmIChzaG91bGREZXNlcmlhbGl6ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlc3VsdCA9IHRydWU7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBzaG91bGREZXNlcmlhbGl6ZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgcmVzdWx0ID0gc2hvdWxkRGVzZXJpYWxpemU7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXN1bHQgPSBzaG91bGREZXNlcmlhbGl6ZShwYXJzZWRSZXNwb25zZSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5hc3luYyBmdW5jdGlvbiBkZXNlcmlhbGl6ZVJlc3BvbnNlQm9keShqc29uQ29udGVudFR5cGVzLCB4bWxDb250ZW50VHlwZXMsIHJlc3BvbnNlLCBvcHRpb25zLCBwYXJzZVhNTCkge1xuICAgIGNvbnN0IHBhcnNlZFJlc3BvbnNlID0gYXdhaXQgcGFyc2UoanNvbkNvbnRlbnRUeXBlcywgeG1sQ29udGVudFR5cGVzLCByZXNwb25zZSwgb3B0aW9ucywgcGFyc2VYTUwpO1xuICAgIGlmICghc2hvdWxkRGVzZXJpYWxpemVSZXNwb25zZShwYXJzZWRSZXNwb25zZSkpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlZFJlc3BvbnNlO1xuICAgIH1cbiAgICBjb25zdCBvcGVyYXRpb25JbmZvID0gKDAsIG9wZXJhdGlvbkhlbHBlcnNfanNfMS5nZXRPcGVyYXRpb25SZXF1ZXN0SW5mbykocGFyc2VkUmVzcG9uc2UucmVxdWVzdCk7XG4gICAgY29uc3Qgb3BlcmF0aW9uU3BlYyA9IG9wZXJhdGlvbkluZm8gPT09IG51bGwgfHwgb3BlcmF0aW9uSW5mbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3BlcmF0aW9uSW5mby5vcGVyYXRpb25TcGVjO1xuICAgIGlmICghb3BlcmF0aW9uU3BlYyB8fCAhb3BlcmF0aW9uU3BlYy5yZXNwb25zZXMpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlZFJlc3BvbnNlO1xuICAgIH1cbiAgICBjb25zdCByZXNwb25zZVNwZWMgPSBnZXRPcGVyYXRpb25SZXNwb25zZU1hcChwYXJzZWRSZXNwb25zZSk7XG4gICAgY29uc3QgeyBlcnJvciwgc2hvdWxkUmV0dXJuUmVzcG9uc2UgfSA9IGhhbmRsZUVycm9yUmVzcG9uc2UocGFyc2VkUmVzcG9uc2UsIG9wZXJhdGlvblNwZWMsIHJlc3BvbnNlU3BlYywgb3B0aW9ucyk7XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgICBlbHNlIGlmIChzaG91bGRSZXR1cm5SZXNwb25zZSkge1xuICAgICAgICByZXR1cm4gcGFyc2VkUmVzcG9uc2U7XG4gICAgfVxuICAgIC8vIEFuIG9wZXJhdGlvbiByZXNwb25zZSBzcGVjIGRvZXMgZXhpc3QgZm9yIGN1cnJlbnQgc3RhdHVzIGNvZGUsIHNvXG4gICAgLy8gdXNlIGl0IHRvIGRlc2VyaWFsaXplIHRoZSByZXNwb25zZS5cbiAgICBpZiAocmVzcG9uc2VTcGVjKSB7XG4gICAgICAgIGlmIChyZXNwb25zZVNwZWMuYm9keU1hcHBlcikge1xuICAgICAgICAgICAgbGV0IHZhbHVlVG9EZXNlcmlhbGl6ZSA9IHBhcnNlZFJlc3BvbnNlLnBhcnNlZEJvZHk7XG4gICAgICAgICAgICBpZiAob3BlcmF0aW9uU3BlYy5pc1hNTCAmJiByZXNwb25zZVNwZWMuYm9keU1hcHBlci50eXBlLm5hbWUgPT09IHNlcmlhbGl6ZXJfanNfMS5NYXBwZXJUeXBlTmFtZXMuU2VxdWVuY2UpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZVRvRGVzZXJpYWxpemUgPVxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgdmFsdWVUb0Rlc2VyaWFsaXplID09PSBcIm9iamVjdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHZhbHVlVG9EZXNlcmlhbGl6ZVtyZXNwb25zZVNwZWMuYm9keU1hcHBlci54bWxFbGVtZW50TmFtZV1cbiAgICAgICAgICAgICAgICAgICAgICAgIDogW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBhcnNlZFJlc3BvbnNlLnBhcnNlZEJvZHkgPSBvcGVyYXRpb25TcGVjLnNlcmlhbGl6ZXIuZGVzZXJpYWxpemUocmVzcG9uc2VTcGVjLmJvZHlNYXBwZXIsIHZhbHVlVG9EZXNlcmlhbGl6ZSwgXCJvcGVyYXRpb25SZXMucGFyc2VkQm9keVwiLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChkZXNlcmlhbGl6ZUVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdEVycm9yID0gbmV3IGNvcmVfcmVzdF9waXBlbGluZV8xLlJlc3RFcnJvcihgRXJyb3IgJHtkZXNlcmlhbGl6ZUVycm9yfSBvY2N1cnJlZCBpbiBkZXNlcmlhbGl6aW5nIHRoZSByZXNwb25zZUJvZHkgLSAke3BhcnNlZFJlc3BvbnNlLmJvZHlBc1RleHR9YCwge1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXNDb2RlOiBwYXJzZWRSZXNwb25zZS5zdGF0dXMsXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3Q6IHBhcnNlZFJlc3BvbnNlLnJlcXVlc3QsXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlOiBwYXJzZWRSZXNwb25zZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aHJvdyByZXN0RXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAob3BlcmF0aW9uU3BlYy5odHRwTWV0aG9kID09PSBcIkhFQURcIikge1xuICAgICAgICAgICAgLy8gaGVhZCBtZXRob2RzIG5ldmVyIGhhdmUgYSBib2R5LCBidXQgd2UgcmV0dXJuIGEgYm9vbGVhbiB0byBpbmRpY2F0ZSBwcmVzZW5jZS9hYnNlbmNlIG9mIHRoZSByZXNvdXJjZVxuICAgICAgICAgICAgcGFyc2VkUmVzcG9uc2UucGFyc2VkQm9keSA9IHJlc3BvbnNlLnN0YXR1cyA+PSAyMDAgJiYgcmVzcG9uc2Uuc3RhdHVzIDwgMzAwO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXNwb25zZVNwZWMuaGVhZGVyc01hcHBlcikge1xuICAgICAgICAgICAgcGFyc2VkUmVzcG9uc2UucGFyc2VkSGVhZGVycyA9IG9wZXJhdGlvblNwZWMuc2VyaWFsaXplci5kZXNlcmlhbGl6ZShyZXNwb25zZVNwZWMuaGVhZGVyc01hcHBlciwgcGFyc2VkUmVzcG9uc2UuaGVhZGVycy50b0pTT04oKSwgXCJvcGVyYXRpb25SZXMucGFyc2VkSGVhZGVyc1wiLCB7IHhtbDoge30sIGlnbm9yZVVua25vd25Qcm9wZXJ0aWVzOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwYXJzZWRSZXNwb25zZTtcbn1cbmZ1bmN0aW9uIGlzT3BlcmF0aW9uU3BlY0VtcHR5KG9wZXJhdGlvblNwZWMpIHtcbiAgICBjb25zdCBleHBlY3RlZFN0YXR1c0NvZGVzID0gT2JqZWN0LmtleXMob3BlcmF0aW9uU3BlYy5yZXNwb25zZXMpO1xuICAgIHJldHVybiAoZXhwZWN0ZWRTdGF0dXNDb2Rlcy5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgKGV4cGVjdGVkU3RhdHVzQ29kZXMubGVuZ3RoID09PSAxICYmIGV4cGVjdGVkU3RhdHVzQ29kZXNbMF0gPT09IFwiZGVmYXVsdFwiKSk7XG59XG5mdW5jdGlvbiBoYW5kbGVFcnJvclJlc3BvbnNlKHBhcnNlZFJlc3BvbnNlLCBvcGVyYXRpb25TcGVjLCByZXNwb25zZVNwZWMsIG9wdGlvbnMpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3QgaXNTdWNjZXNzQnlTdGF0dXMgPSAyMDAgPD0gcGFyc2VkUmVzcG9uc2Uuc3RhdHVzICYmIHBhcnNlZFJlc3BvbnNlLnN0YXR1cyA8IDMwMDtcbiAgICBjb25zdCBpc0V4cGVjdGVkU3RhdHVzQ29kZSA9IGlzT3BlcmF0aW9uU3BlY0VtcHR5KG9wZXJhdGlvblNwZWMpXG4gICAgICAgID8gaXNTdWNjZXNzQnlTdGF0dXNcbiAgICAgICAgOiAhIXJlc3BvbnNlU3BlYztcbiAgICBpZiAoaXNFeHBlY3RlZFN0YXR1c0NvZGUpIHtcbiAgICAgICAgaWYgKHJlc3BvbnNlU3BlYykge1xuICAgICAgICAgICAgaWYgKCFyZXNwb25zZVNwZWMuaXNFcnJvcikge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGVycm9yOiBudWxsLCBzaG91bGRSZXR1cm5SZXNwb25zZTogZmFsc2UgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB7IGVycm9yOiBudWxsLCBzaG91bGRSZXR1cm5SZXNwb25zZTogZmFsc2UgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBlcnJvclJlc3BvbnNlU3BlYyA9IHJlc3BvbnNlU3BlYyAhPT0gbnVsbCAmJiByZXNwb25zZVNwZWMgIT09IHZvaWQgMCA/IHJlc3BvbnNlU3BlYyA6IG9wZXJhdGlvblNwZWMucmVzcG9uc2VzLmRlZmF1bHQ7XG4gICAgY29uc3QgaW5pdGlhbEVycm9yTWVzc2FnZSA9ICgoX2EgPSBwYXJzZWRSZXNwb25zZS5yZXF1ZXN0LnN0cmVhbVJlc3BvbnNlU3RhdHVzQ29kZXMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5oYXMocGFyc2VkUmVzcG9uc2Uuc3RhdHVzKSlcbiAgICAgICAgPyBgVW5leHBlY3RlZCBzdGF0dXMgY29kZTogJHtwYXJzZWRSZXNwb25zZS5zdGF0dXN9YFxuICAgICAgICA6IHBhcnNlZFJlc3BvbnNlLmJvZHlBc1RleHQ7XG4gICAgY29uc3QgZXJyb3IgPSBuZXcgY29yZV9yZXN0X3BpcGVsaW5lXzEuUmVzdEVycm9yKGluaXRpYWxFcnJvck1lc3NhZ2UsIHtcbiAgICAgICAgc3RhdHVzQ29kZTogcGFyc2VkUmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgICByZXF1ZXN0OiBwYXJzZWRSZXNwb25zZS5yZXF1ZXN0LFxuICAgICAgICByZXNwb25zZTogcGFyc2VkUmVzcG9uc2UsXG4gICAgfSk7XG4gICAgLy8gSWYgdGhlIGl0ZW0gZmFpbGVkIGJ1dCB0aGVyZSdzIG5vIGVycm9yIHNwZWMgb3IgZGVmYXVsdCBzcGVjIHRvIGRlc2VyaWFsaXplIHRoZSBlcnJvcixcbiAgICAvLyB3ZSBzaG91bGQgZmFpbCBzbyB3ZSBqdXN0IHRocm93IHRoZSBwYXJzZWQgcmVzcG9uc2VcbiAgICBpZiAoIWVycm9yUmVzcG9uc2VTcGVjKSB7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgICBjb25zdCBkZWZhdWx0Qm9keU1hcHBlciA9IGVycm9yUmVzcG9uc2VTcGVjLmJvZHlNYXBwZXI7XG4gICAgY29uc3QgZGVmYXVsdEhlYWRlcnNNYXBwZXIgPSBlcnJvclJlc3BvbnNlU3BlYy5oZWFkZXJzTWFwcGVyO1xuICAgIHRyeSB7XG4gICAgICAgIC8vIElmIGVycm9yIHJlc3BvbnNlIGhhcyBhIGJvZHksIHRyeSB0byBkZXNlcmlhbGl6ZSBpdCB1c2luZyBkZWZhdWx0IGJvZHkgbWFwcGVyLlxuICAgICAgICAvLyBUaGVuIHRyeSB0byBleHRyYWN0IGVycm9yIGNvZGUgJiBtZXNzYWdlIGZyb20gaXRcbiAgICAgICAgaWYgKHBhcnNlZFJlc3BvbnNlLnBhcnNlZEJvZHkpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZEJvZHkgPSBwYXJzZWRSZXNwb25zZS5wYXJzZWRCb2R5O1xuICAgICAgICAgICAgbGV0IGRlc2VyaWFsaXplZEVycm9yO1xuICAgICAgICAgICAgaWYgKGRlZmF1bHRCb2R5TWFwcGVyKSB7XG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlVG9EZXNlcmlhbGl6ZSA9IHBhcnNlZEJvZHk7XG4gICAgICAgICAgICAgICAgaWYgKG9wZXJhdGlvblNwZWMuaXNYTUwgJiYgZGVmYXVsdEJvZHlNYXBwZXIudHlwZS5uYW1lID09PSBzZXJpYWxpemVyX2pzXzEuTWFwcGVyVHlwZU5hbWVzLlNlcXVlbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlVG9EZXNlcmlhbGl6ZSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50TmFtZSA9IGRlZmF1bHRCb2R5TWFwcGVyLnhtbEVsZW1lbnROYW1lO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHBhcnNlZEJvZHkgPT09IFwib2JqZWN0XCIgJiYgZWxlbWVudE5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlVG9EZXNlcmlhbGl6ZSA9IHBhcnNlZEJvZHlbZWxlbWVudE5hbWVdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlc2VyaWFsaXplZEVycm9yID0gb3BlcmF0aW9uU3BlYy5zZXJpYWxpemVyLmRlc2VyaWFsaXplKGRlZmF1bHRCb2R5TWFwcGVyLCB2YWx1ZVRvRGVzZXJpYWxpemUsIFwiZXJyb3IucmVzcG9uc2UucGFyc2VkQm9keVwiLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGludGVybmFsRXJyb3IgPSBwYXJzZWRCb2R5LmVycm9yIHx8IGRlc2VyaWFsaXplZEVycm9yIHx8IHBhcnNlZEJvZHk7XG4gICAgICAgICAgICBlcnJvci5jb2RlID0gaW50ZXJuYWxFcnJvci5jb2RlO1xuICAgICAgICAgICAgaWYgKGludGVybmFsRXJyb3IubWVzc2FnZSkge1xuICAgICAgICAgICAgICAgIGVycm9yLm1lc3NhZ2UgPSBpbnRlcm5hbEVycm9yLm1lc3NhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGVmYXVsdEJvZHlNYXBwZXIpIHtcbiAgICAgICAgICAgICAgICBlcnJvci5yZXNwb25zZS5wYXJzZWRCb2R5ID0gZGVzZXJpYWxpemVkRXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgZXJyb3IgcmVzcG9uc2UgaGFzIGhlYWRlcnMsIHRyeSB0byBkZXNlcmlhbGl6ZSBpdCB1c2luZyBkZWZhdWx0IGhlYWRlciBtYXBwZXJcbiAgICAgICAgaWYgKHBhcnNlZFJlc3BvbnNlLmhlYWRlcnMgJiYgZGVmYXVsdEhlYWRlcnNNYXBwZXIpIHtcbiAgICAgICAgICAgIGVycm9yLnJlc3BvbnNlLnBhcnNlZEhlYWRlcnMgPVxuICAgICAgICAgICAgICAgIG9wZXJhdGlvblNwZWMuc2VyaWFsaXplci5kZXNlcmlhbGl6ZShkZWZhdWx0SGVhZGVyc01hcHBlciwgcGFyc2VkUmVzcG9uc2UuaGVhZGVycy50b0pTT04oKSwgXCJvcGVyYXRpb25SZXMucGFyc2VkSGVhZGVyc1wiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXRjaCAoZGVmYXVsdEVycm9yKSB7XG4gICAgICAgIGVycm9yLm1lc3NhZ2UgPSBgRXJyb3IgXCIke2RlZmF1bHRFcnJvci5tZXNzYWdlfVwiIG9jY3VycmVkIGluIGRlc2VyaWFsaXppbmcgdGhlIHJlc3BvbnNlQm9keSAtIFwiJHtwYXJzZWRSZXNwb25zZS5ib2R5QXNUZXh0fVwiIGZvciB0aGUgZGVmYXVsdCByZXNwb25zZS5gO1xuICAgIH1cbiAgICByZXR1cm4geyBlcnJvciwgc2hvdWxkUmV0dXJuUmVzcG9uc2U6IGZhbHNlIH07XG59XG5hc3luYyBmdW5jdGlvbiBwYXJzZShqc29uQ29udGVudFR5cGVzLCB4bWxDb250ZW50VHlwZXMsIG9wZXJhdGlvblJlc3BvbnNlLCBvcHRzLCBwYXJzZVhNTCkge1xuICAgIHZhciBfYTtcbiAgICBpZiAoISgoX2EgPSBvcGVyYXRpb25SZXNwb25zZS5yZXF1ZXN0LnN0cmVhbVJlc3BvbnNlU3RhdHVzQ29kZXMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5oYXMob3BlcmF0aW9uUmVzcG9uc2Uuc3RhdHVzKSkgJiZcbiAgICAgICAgb3BlcmF0aW9uUmVzcG9uc2UuYm9keUFzVGV4dCkge1xuICAgICAgICBjb25zdCB0ZXh0ID0gb3BlcmF0aW9uUmVzcG9uc2UuYm9keUFzVGV4dDtcbiAgICAgICAgY29uc3QgY29udGVudFR5cGUgPSBvcGVyYXRpb25SZXNwb25zZS5oZWFkZXJzLmdldChcIkNvbnRlbnQtVHlwZVwiKSB8fCBcIlwiO1xuICAgICAgICBjb25zdCBjb250ZW50Q29tcG9uZW50cyA9ICFjb250ZW50VHlwZVxuICAgICAgICAgICAgPyBbXVxuICAgICAgICAgICAgOiBjb250ZW50VHlwZS5zcGxpdChcIjtcIikubWFwKChjb21wb25lbnQpID0+IGNvbXBvbmVudC50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChjb250ZW50Q29tcG9uZW50cy5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAgICAgICBjb250ZW50Q29tcG9uZW50cy5zb21lKChjb21wb25lbnQpID0+IGpzb25Db250ZW50VHlwZXMuaW5kZXhPZihjb21wb25lbnQpICE9PSAtMSkpIHtcbiAgICAgICAgICAgICAgICBvcGVyYXRpb25SZXNwb25zZS5wYXJzZWRCb2R5ID0gSlNPTi5wYXJzZSh0ZXh0KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUmVzcG9uc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjb250ZW50Q29tcG9uZW50cy5zb21lKChjb21wb25lbnQpID0+IHhtbENvbnRlbnRUeXBlcy5pbmRleE9mKGNvbXBvbmVudCkgIT09IC0xKSkge1xuICAgICAgICAgICAgICAgIGlmICghcGFyc2VYTUwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFyc2luZyBYTUwgbm90IHN1cHBvcnRlZC5cIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBhd2FpdCBwYXJzZVhNTCh0ZXh0LCBvcHRzLnhtbCk7XG4gICAgICAgICAgICAgICAgb3BlcmF0aW9uUmVzcG9uc2UucGFyc2VkQm9keSA9IGJvZHk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblJlc3BvbnNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGNvbnN0IG1zZyA9IGBFcnJvciBcIiR7ZXJyfVwiIG9jY3VycmVkIHdoaWxlIHBhcnNpbmcgdGhlIHJlc3BvbnNlIGJvZHkgLSAke29wZXJhdGlvblJlc3BvbnNlLmJvZHlBc1RleHR9LmA7XG4gICAgICAgICAgICBjb25zdCBlcnJDb2RlID0gZXJyLmNvZGUgfHwgY29yZV9yZXN0X3BpcGVsaW5lXzEuUmVzdEVycm9yLlBBUlNFX0VSUk9SO1xuICAgICAgICAgICAgY29uc3QgZSA9IG5ldyBjb3JlX3Jlc3RfcGlwZWxpbmVfMS5SZXN0RXJyb3IobXNnLCB7XG4gICAgICAgICAgICAgICAgY29kZTogZXJyQ29kZSxcbiAgICAgICAgICAgICAgICBzdGF0dXNDb2RlOiBvcGVyYXRpb25SZXNwb25zZS5zdGF0dXMsXG4gICAgICAgICAgICAgICAgcmVxdWVzdDogb3BlcmF0aW9uUmVzcG9uc2UucmVxdWVzdCxcbiAgICAgICAgICAgICAgICByZXNwb25zZTogb3BlcmF0aW9uUmVzcG9uc2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9wZXJhdGlvblJlc3BvbnNlO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGVzZXJpYWxpemF0aW9uUG9saWN5LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0UGF0aFN0cmluZ0Zyb21QYXJhbWV0ZXIgPSBleHBvcnRzLmdldFN0cmVhbWluZ1Jlc3BvbnNlU3RhdHVzQ29kZXMgPSB2b2lkIDA7XG5jb25zdCBzZXJpYWxpemVyX2pzXzEgPSByZXF1aXJlKFwiLi9zZXJpYWxpemVyLmpzXCIpO1xuLyoqXG4gKiBHZXRzIHRoZSBsaXN0IG9mIHN0YXR1cyBjb2RlcyBmb3Igc3RyZWFtaW5nIHJlc3BvbnNlcy5cbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBnZXRTdHJlYW1pbmdSZXNwb25zZVN0YXR1c0NvZGVzKG9wZXJhdGlvblNwZWMpIHtcbiAgICBjb25zdCByZXN1bHQgPSBuZXcgU2V0KCk7XG4gICAgZm9yIChjb25zdCBzdGF0dXNDb2RlIGluIG9wZXJhdGlvblNwZWMucmVzcG9uc2VzKSB7XG4gICAgICAgIGNvbnN0IG9wZXJhdGlvblJlc3BvbnNlID0gb3BlcmF0aW9uU3BlYy5yZXNwb25zZXNbc3RhdHVzQ29kZV07XG4gICAgICAgIGlmIChvcGVyYXRpb25SZXNwb25zZS5ib2R5TWFwcGVyICYmXG4gICAgICAgICAgICBvcGVyYXRpb25SZXNwb25zZS5ib2R5TWFwcGVyLnR5cGUubmFtZSA9PT0gc2VyaWFsaXplcl9qc18xLk1hcHBlclR5cGVOYW1lcy5TdHJlYW0pIHtcbiAgICAgICAgICAgIHJlc3VsdC5hZGQoTnVtYmVyKHN0YXR1c0NvZGUpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZXhwb3J0cy5nZXRTdHJlYW1pbmdSZXNwb25zZVN0YXR1c0NvZGVzID0gZ2V0U3RyZWFtaW5nUmVzcG9uc2VTdGF0dXNDb2Rlcztcbi8qKlxuICogR2V0IHRoZSBwYXRoIHRvIHRoaXMgcGFyYW1ldGVyJ3MgdmFsdWUgYXMgYSBkb3R0ZWQgc3RyaW5nIChhLmIuYykuXG4gKiBAcGFyYW0gcGFyYW1ldGVyIC0gVGhlIHBhcmFtZXRlciB0byBnZXQgdGhlIHBhdGggc3RyaW5nIGZvci5cbiAqIEByZXR1cm5zIFRoZSBwYXRoIHRvIHRoaXMgcGFyYW1ldGVyJ3MgdmFsdWUgYXMgYSBkb3R0ZWQgc3RyaW5nLlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIGdldFBhdGhTdHJpbmdGcm9tUGFyYW1ldGVyKHBhcmFtZXRlcikge1xuICAgIGNvbnN0IHsgcGFyYW1ldGVyUGF0aCwgbWFwcGVyIH0gPSBwYXJhbWV0ZXI7XG4gICAgbGV0IHJlc3VsdDtcbiAgICBpZiAodHlwZW9mIHBhcmFtZXRlclBhdGggPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmVzdWx0ID0gcGFyYW1ldGVyUGF0aDtcbiAgICB9XG4gICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShwYXJhbWV0ZXJQYXRoKSkge1xuICAgICAgICByZXN1bHQgPSBwYXJhbWV0ZXJQYXRoLmpvaW4oXCIuXCIpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gbWFwcGVyLnNlcmlhbGl6ZWROYW1lO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZXhwb3J0cy5nZXRQYXRoU3RyaW5nRnJvbVBhcmFtZXRlciA9IGdldFBhdGhTdHJpbmdGcm9tUGFyYW1ldGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW50ZXJmYWNlSGVscGVycy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnNlcmlhbGl6ZVJlcXVlc3RCb2R5ID0gZXhwb3J0cy5zZXJpYWxpemVIZWFkZXJzID0gZXhwb3J0cy5zZXJpYWxpemF0aW9uUG9saWN5ID0gZXhwb3J0cy5zZXJpYWxpemF0aW9uUG9saWN5TmFtZSA9IHZvaWQgMDtcbmNvbnN0IGludGVyZmFjZXNfanNfMSA9IHJlcXVpcmUoXCIuL2ludGVyZmFjZXMuanNcIik7XG5jb25zdCBvcGVyYXRpb25IZWxwZXJzX2pzXzEgPSByZXF1aXJlKFwiLi9vcGVyYXRpb25IZWxwZXJzLmpzXCIpO1xuY29uc3Qgc2VyaWFsaXplcl9qc18xID0gcmVxdWlyZShcIi4vc2VyaWFsaXplci5qc1wiKTtcbmNvbnN0IGludGVyZmFjZUhlbHBlcnNfanNfMSA9IHJlcXVpcmUoXCIuL2ludGVyZmFjZUhlbHBlcnMuanNcIik7XG4vKipcbiAqIFRoZSBwcm9ncmFtbWF0aWMgaWRlbnRpZmllciBvZiB0aGUgc2VyaWFsaXphdGlvblBvbGljeS5cbiAqL1xuZXhwb3J0cy5zZXJpYWxpemF0aW9uUG9saWN5TmFtZSA9IFwic2VyaWFsaXphdGlvblBvbGljeVwiO1xuLyoqXG4gKiBUaGlzIHBvbGljeSBoYW5kbGVzIGFzc2VtYmxpbmcgdGhlIHJlcXVlc3QgYm9keSBhbmQgaGVhZGVycyB1c2luZ1xuICogYW4gT3BlcmF0aW9uU3BlYyBhbmQgT3BlcmF0aW9uQXJndW1lbnRzIG9uIHRoZSByZXF1ZXN0LlxuICovXG5mdW5jdGlvbiBzZXJpYWxpemF0aW9uUG9saWN5KG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHN0cmluZ2lmeVhNTCA9IG9wdGlvbnMuc3RyaW5naWZ5WE1MO1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGV4cG9ydHMuc2VyaWFsaXphdGlvblBvbGljeU5hbWUsXG4gICAgICAgIGFzeW5jIHNlbmRSZXF1ZXN0KHJlcXVlc3QsIG5leHQpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wZXJhdGlvbkluZm8gPSAoMCwgb3BlcmF0aW9uSGVscGVyc19qc18xLmdldE9wZXJhdGlvblJlcXVlc3RJbmZvKShyZXF1ZXN0KTtcbiAgICAgICAgICAgIGNvbnN0IG9wZXJhdGlvblNwZWMgPSBvcGVyYXRpb25JbmZvID09PSBudWxsIHx8IG9wZXJhdGlvbkluZm8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wZXJhdGlvbkluZm8ub3BlcmF0aW9uU3BlYztcbiAgICAgICAgICAgIGNvbnN0IG9wZXJhdGlvbkFyZ3VtZW50cyA9IG9wZXJhdGlvbkluZm8gPT09IG51bGwgfHwgb3BlcmF0aW9uSW5mbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3BlcmF0aW9uSW5mby5vcGVyYXRpb25Bcmd1bWVudHM7XG4gICAgICAgICAgICBpZiAob3BlcmF0aW9uU3BlYyAmJiBvcGVyYXRpb25Bcmd1bWVudHMpIHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVIZWFkZXJzKHJlcXVlc3QsIG9wZXJhdGlvbkFyZ3VtZW50cywgb3BlcmF0aW9uU3BlYyk7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplUmVxdWVzdEJvZHkocmVxdWVzdCwgb3BlcmF0aW9uQXJndW1lbnRzLCBvcGVyYXRpb25TcGVjLCBzdHJpbmdpZnlYTUwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5leHQocmVxdWVzdCk7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbmV4cG9ydHMuc2VyaWFsaXphdGlvblBvbGljeSA9IHNlcmlhbGl6YXRpb25Qb2xpY3k7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBzZXJpYWxpemVIZWFkZXJzKHJlcXVlc3QsIG9wZXJhdGlvbkFyZ3VtZW50cywgb3BlcmF0aW9uU3BlYykge1xuICAgIHZhciBfYSwgX2I7XG4gICAgaWYgKG9wZXJhdGlvblNwZWMuaGVhZGVyUGFyYW1ldGVycykge1xuICAgICAgICBmb3IgKGNvbnN0IGhlYWRlclBhcmFtZXRlciBvZiBvcGVyYXRpb25TcGVjLmhlYWRlclBhcmFtZXRlcnMpIHtcbiAgICAgICAgICAgIGxldCBoZWFkZXJWYWx1ZSA9ICgwLCBvcGVyYXRpb25IZWxwZXJzX2pzXzEuZ2V0T3BlcmF0aW9uQXJndW1lbnRWYWx1ZUZyb21QYXJhbWV0ZXIpKG9wZXJhdGlvbkFyZ3VtZW50cywgaGVhZGVyUGFyYW1ldGVyKTtcbiAgICAgICAgICAgIGlmICgoaGVhZGVyVmFsdWUgIT09IG51bGwgJiYgaGVhZGVyVmFsdWUgIT09IHVuZGVmaW5lZCkgfHwgaGVhZGVyUGFyYW1ldGVyLm1hcHBlci5yZXF1aXJlZCkge1xuICAgICAgICAgICAgICAgIGhlYWRlclZhbHVlID0gb3BlcmF0aW9uU3BlYy5zZXJpYWxpemVyLnNlcmlhbGl6ZShoZWFkZXJQYXJhbWV0ZXIubWFwcGVyLCBoZWFkZXJWYWx1ZSwgKDAsIGludGVyZmFjZUhlbHBlcnNfanNfMS5nZXRQYXRoU3RyaW5nRnJvbVBhcmFtZXRlcikoaGVhZGVyUGFyYW1ldGVyKSk7XG4gICAgICAgICAgICAgICAgY29uc3QgaGVhZGVyQ29sbGVjdGlvblByZWZpeCA9IGhlYWRlclBhcmFtZXRlci5tYXBwZXJcbiAgICAgICAgICAgICAgICAgICAgLmhlYWRlckNvbGxlY3Rpb25QcmVmaXg7XG4gICAgICAgICAgICAgICAgaWYgKGhlYWRlckNvbGxlY3Rpb25QcmVmaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoaGVhZGVyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmhlYWRlcnMuc2V0KGhlYWRlckNvbGxlY3Rpb25QcmVmaXggKyBrZXksIGhlYWRlclZhbHVlW2tleV0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmhlYWRlcnMuc2V0KGhlYWRlclBhcmFtZXRlci5tYXBwZXIuc2VyaWFsaXplZE5hbWUgfHwgKDAsIGludGVyZmFjZUhlbHBlcnNfanNfMS5nZXRQYXRoU3RyaW5nRnJvbVBhcmFtZXRlcikoaGVhZGVyUGFyYW1ldGVyKSwgaGVhZGVyVmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBjdXN0b21IZWFkZXJzID0gKF9iID0gKF9hID0gb3BlcmF0aW9uQXJndW1lbnRzLm9wdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5yZXF1ZXN0T3B0aW9ucykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmN1c3RvbUhlYWRlcnM7XG4gICAgaWYgKGN1c3RvbUhlYWRlcnMpIHtcbiAgICAgICAgZm9yIChjb25zdCBjdXN0b21IZWFkZXJOYW1lIG9mIE9iamVjdC5rZXlzKGN1c3RvbUhlYWRlcnMpKSB7XG4gICAgICAgICAgICByZXF1ZXN0LmhlYWRlcnMuc2V0KGN1c3RvbUhlYWRlck5hbWUsIGN1c3RvbUhlYWRlcnNbY3VzdG9tSGVhZGVyTmFtZV0pO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5zZXJpYWxpemVIZWFkZXJzID0gc2VyaWFsaXplSGVhZGVycztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIHNlcmlhbGl6ZVJlcXVlc3RCb2R5KHJlcXVlc3QsIG9wZXJhdGlvbkFyZ3VtZW50cywgb3BlcmF0aW9uU3BlYywgc3RyaW5naWZ5WE1MID0gZnVuY3Rpb24gKCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlhNTCBzZXJpYWxpemF0aW9uIHVuc3VwcG9ydGVkIVwiKTtcbn0pIHtcbiAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lO1xuICAgIGNvbnN0IHNlcmlhbGl6ZXJPcHRpb25zID0gKF9hID0gb3BlcmF0aW9uQXJndW1lbnRzLm9wdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zZXJpYWxpemVyT3B0aW9ucztcbiAgICBjb25zdCB1cGRhdGVkT3B0aW9ucyA9IHtcbiAgICAgICAgeG1sOiB7XG4gICAgICAgICAgICByb290TmFtZTogKF9iID0gc2VyaWFsaXplck9wdGlvbnMgPT09IG51bGwgfHwgc2VyaWFsaXplck9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlcmlhbGl6ZXJPcHRpb25zLnhtbC5yb290TmFtZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogXCJcIixcbiAgICAgICAgICAgIGluY2x1ZGVSb290OiAoX2MgPSBzZXJpYWxpemVyT3B0aW9ucyA9PT0gbnVsbCB8fCBzZXJpYWxpemVyT3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VyaWFsaXplck9wdGlvbnMueG1sLmluY2x1ZGVSb290KSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiBmYWxzZSxcbiAgICAgICAgICAgIHhtbENoYXJLZXk6IChfZCA9IHNlcmlhbGl6ZXJPcHRpb25zID09PSBudWxsIHx8IHNlcmlhbGl6ZXJPcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZXJpYWxpemVyT3B0aW9ucy54bWwueG1sQ2hhcktleSkgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDogaW50ZXJmYWNlc19qc18xLlhNTF9DSEFSS0VZLFxuICAgICAgICB9LFxuICAgIH07XG4gICAgY29uc3QgeG1sQ2hhcktleSA9IHVwZGF0ZWRPcHRpb25zLnhtbC54bWxDaGFyS2V5O1xuICAgIGlmIChvcGVyYXRpb25TcGVjLnJlcXVlc3RCb2R5ICYmIG9wZXJhdGlvblNwZWMucmVxdWVzdEJvZHkubWFwcGVyKSB7XG4gICAgICAgIHJlcXVlc3QuYm9keSA9ICgwLCBvcGVyYXRpb25IZWxwZXJzX2pzXzEuZ2V0T3BlcmF0aW9uQXJndW1lbnRWYWx1ZUZyb21QYXJhbWV0ZXIpKG9wZXJhdGlvbkFyZ3VtZW50cywgb3BlcmF0aW9uU3BlYy5yZXF1ZXN0Qm9keSk7XG4gICAgICAgIGNvbnN0IGJvZHlNYXBwZXIgPSBvcGVyYXRpb25TcGVjLnJlcXVlc3RCb2R5Lm1hcHBlcjtcbiAgICAgICAgY29uc3QgeyByZXF1aXJlZCwgc2VyaWFsaXplZE5hbWUsIHhtbE5hbWUsIHhtbEVsZW1lbnROYW1lLCB4bWxOYW1lc3BhY2UsIHhtbE5hbWVzcGFjZVByZWZpeCwgbnVsbGFibGUsIH0gPSBib2R5TWFwcGVyO1xuICAgICAgICBjb25zdCB0eXBlTmFtZSA9IGJvZHlNYXBwZXIudHlwZS5uYW1lO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKChyZXF1ZXN0LmJvZHkgIT09IHVuZGVmaW5lZCAmJiByZXF1ZXN0LmJvZHkgIT09IG51bGwpIHx8XG4gICAgICAgICAgICAgICAgKG51bGxhYmxlICYmIHJlcXVlc3QuYm9keSA9PT0gbnVsbCkgfHxcbiAgICAgICAgICAgICAgICByZXF1aXJlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RCb2R5UGFyYW1ldGVyUGF0aFN0cmluZyA9ICgwLCBpbnRlcmZhY2VIZWxwZXJzX2pzXzEuZ2V0UGF0aFN0cmluZ0Zyb21QYXJhbWV0ZXIpKG9wZXJhdGlvblNwZWMucmVxdWVzdEJvZHkpO1xuICAgICAgICAgICAgICAgIHJlcXVlc3QuYm9keSA9IG9wZXJhdGlvblNwZWMuc2VyaWFsaXplci5zZXJpYWxpemUoYm9keU1hcHBlciwgcmVxdWVzdC5ib2R5LCByZXF1ZXN0Qm9keVBhcmFtZXRlclBhdGhTdHJpbmcsIHVwZGF0ZWRPcHRpb25zKTtcbiAgICAgICAgICAgICAgICBjb25zdCBpc1N0cmVhbSA9IHR5cGVOYW1lID09PSBzZXJpYWxpemVyX2pzXzEuTWFwcGVyVHlwZU5hbWVzLlN0cmVhbTtcbiAgICAgICAgICAgICAgICBpZiAob3BlcmF0aW9uU3BlYy5pc1hNTCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB4bWxuc0tleSA9IHhtbE5hbWVzcGFjZVByZWZpeCA/IGB4bWxuczoke3htbE5hbWVzcGFjZVByZWZpeH1gIDogXCJ4bWxuc1wiO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGdldFhtbFZhbHVlV2l0aE5hbWVzcGFjZSh4bWxOYW1lc3BhY2UsIHhtbG5zS2V5LCB0eXBlTmFtZSwgcmVxdWVzdC5ib2R5LCB1cGRhdGVkT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlTmFtZSA9PT0gc2VyaWFsaXplcl9qc18xLk1hcHBlclR5cGVOYW1lcy5TZXF1ZW5jZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5ib2R5ID0gc3RyaW5naWZ5WE1MKHByZXBhcmVYTUxSb290TGlzdCh2YWx1ZSwgeG1sRWxlbWVudE5hbWUgfHwgeG1sTmFtZSB8fCBzZXJpYWxpemVkTmFtZSwgeG1sbnNLZXksIHhtbE5hbWVzcGFjZSksIHsgcm9vdE5hbWU6IHhtbE5hbWUgfHwgc2VyaWFsaXplZE5hbWUsIHhtbENoYXJLZXkgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIWlzU3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmJvZHkgPSBzdHJpbmdpZnlYTUwodmFsdWUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290TmFtZTogeG1sTmFtZSB8fCBzZXJpYWxpemVkTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxDaGFyS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZU5hbWUgPT09IHNlcmlhbGl6ZXJfanNfMS5NYXBwZXJUeXBlTmFtZXMuU3RyaW5nICYmXG4gICAgICAgICAgICAgICAgICAgICgoKF9lID0gb3BlcmF0aW9uU3BlYy5jb250ZW50VHlwZSkgPT09IG51bGwgfHwgX2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9lLm1hdGNoKFwidGV4dC9wbGFpblwiKSkgfHwgb3BlcmF0aW9uU3BlYy5tZWRpYVR5cGUgPT09IFwidGV4dFwiKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyB0aGUgU3RyaW5nIHNlcmlhbGl6ZXIgaGFzIHZhbGlkYXRlZCB0aGF0IHJlcXVlc3QgYm9keSBpcyBhIHN0cmluZ1xuICAgICAgICAgICAgICAgICAgICAvLyBzbyBqdXN0IHNlbmQgdGhlIHN0cmluZy5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICghaXNTdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5ib2R5ID0gSlNPTi5zdHJpbmdpZnkocmVxdWVzdC5ib2R5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIFwiJHtlcnJvci5tZXNzYWdlfVwiIG9jY3VycmVkIGluIHNlcmlhbGl6aW5nIHRoZSBwYXlsb2FkIC0gJHtKU09OLnN0cmluZ2lmeShzZXJpYWxpemVkTmFtZSwgdW5kZWZpbmVkLCBcIiAgXCIpfS5gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChvcGVyYXRpb25TcGVjLmZvcm1EYXRhUGFyYW1ldGVycyAmJiBvcGVyYXRpb25TcGVjLmZvcm1EYXRhUGFyYW1ldGVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJlcXVlc3QuZm9ybURhdGEgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBmb3JtRGF0YVBhcmFtZXRlciBvZiBvcGVyYXRpb25TcGVjLmZvcm1EYXRhUGFyYW1ldGVycykge1xuICAgICAgICAgICAgY29uc3QgZm9ybURhdGFQYXJhbWV0ZXJWYWx1ZSA9ICgwLCBvcGVyYXRpb25IZWxwZXJzX2pzXzEuZ2V0T3BlcmF0aW9uQXJndW1lbnRWYWx1ZUZyb21QYXJhbWV0ZXIpKG9wZXJhdGlvbkFyZ3VtZW50cywgZm9ybURhdGFQYXJhbWV0ZXIpO1xuICAgICAgICAgICAgaWYgKGZvcm1EYXRhUGFyYW1ldGVyVmFsdWUgIT09IHVuZGVmaW5lZCAmJiBmb3JtRGF0YVBhcmFtZXRlclZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZm9ybURhdGFQYXJhbWV0ZXJQcm9wZXJ0eU5hbWUgPSBmb3JtRGF0YVBhcmFtZXRlci5tYXBwZXIuc2VyaWFsaXplZE5hbWUgfHwgKDAsIGludGVyZmFjZUhlbHBlcnNfanNfMS5nZXRQYXRoU3RyaW5nRnJvbVBhcmFtZXRlcikoZm9ybURhdGFQYXJhbWV0ZXIpO1xuICAgICAgICAgICAgICAgIHJlcXVlc3QuZm9ybURhdGFbZm9ybURhdGFQYXJhbWV0ZXJQcm9wZXJ0eU5hbWVdID0gb3BlcmF0aW9uU3BlYy5zZXJpYWxpemVyLnNlcmlhbGl6ZShmb3JtRGF0YVBhcmFtZXRlci5tYXBwZXIsIGZvcm1EYXRhUGFyYW1ldGVyVmFsdWUsICgwLCBpbnRlcmZhY2VIZWxwZXJzX2pzXzEuZ2V0UGF0aFN0cmluZ0Zyb21QYXJhbWV0ZXIpKGZvcm1EYXRhUGFyYW1ldGVyKSwgdXBkYXRlZE9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5zZXJpYWxpemVSZXF1ZXN0Qm9keSA9IHNlcmlhbGl6ZVJlcXVlc3RCb2R5O1xuLyoqXG4gKiBBZGRzIGFuIHhtbCBuYW1lc3BhY2UgdG8gdGhlIHhtbCBzZXJpYWxpemVkIG9iamVjdCBpZiBuZWVkZWQsIG90aGVyd2lzZSBpdCBqdXN0IHJldHVybnMgdGhlIHZhbHVlIGl0c2VsZlxuICovXG5mdW5jdGlvbiBnZXRYbWxWYWx1ZVdpdGhOYW1lc3BhY2UoeG1sTmFtZXNwYWNlLCB4bWxuc0tleSwgdHlwZU5hbWUsIHNlcmlhbGl6ZWRWYWx1ZSwgb3B0aW9ucykge1xuICAgIC8vIENvbXBvc2l0ZSBhbmQgU2VxdWVuY2Ugc2NoZW1hcyBhbHJlYWR5IGdvdCB0aGVpciByb290IG5hbWVzcGFjZSBzZXQgZHVyaW5nIHNlcmlhbGl6YXRpb25cbiAgICAvLyBXZSBqdXN0IG5lZWQgdG8gYWRkIHhtbG5zIHRvIHRoZSBvdGhlciBzY2hlbWEgdHlwZXNcbiAgICBpZiAoeG1sTmFtZXNwYWNlICYmICFbXCJDb21wb3NpdGVcIiwgXCJTZXF1ZW5jZVwiLCBcIkRpY3Rpb25hcnlcIl0uaW5jbHVkZXModHlwZU5hbWUpKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgICAgICByZXN1bHRbb3B0aW9ucy54bWwueG1sQ2hhcktleV0gPSBzZXJpYWxpemVkVmFsdWU7XG4gICAgICAgIHJlc3VsdFtpbnRlcmZhY2VzX2pzXzEuWE1MX0FUVFJLRVldID0geyBbeG1sbnNLZXldOiB4bWxOYW1lc3BhY2UgfTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgcmV0dXJuIHNlcmlhbGl6ZWRWYWx1ZTtcbn1cbmZ1bmN0aW9uIHByZXBhcmVYTUxSb290TGlzdChvYmosIGVsZW1lbnROYW1lLCB4bWxOYW1lc3BhY2VLZXksIHhtbE5hbWVzcGFjZSkge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgICAgIG9iaiA9IFtvYmpdO1xuICAgIH1cbiAgICBpZiAoIXhtbE5hbWVzcGFjZUtleSB8fCAheG1sTmFtZXNwYWNlKSB7XG4gICAgICAgIHJldHVybiB7IFtlbGVtZW50TmFtZV06IG9iaiB9O1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSB7IFtlbGVtZW50TmFtZV06IG9iaiB9O1xuICAgIHJlc3VsdFtpbnRlcmZhY2VzX2pzXzEuWE1MX0FUVFJLRVldID0geyBbeG1sTmFtZXNwYWNlS2V5XTogeG1sTmFtZXNwYWNlIH07XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNlcmlhbGl6YXRpb25Qb2xpY3kuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jcmVhdGVDbGllbnRQaXBlbGluZSA9IHZvaWQgMDtcbmNvbnN0IGRlc2VyaWFsaXphdGlvblBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vZGVzZXJpYWxpemF0aW9uUG9saWN5LmpzXCIpO1xuY29uc3QgY29yZV9yZXN0X3BpcGVsaW5lXzEgPSByZXF1aXJlKFwiQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZVwiKTtcbmNvbnN0IHNlcmlhbGl6YXRpb25Qb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3NlcmlhbGl6YXRpb25Qb2xpY3kuanNcIik7XG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgUGlwZWxpbmUgZm9yIHVzZSB3aXRoIGEgU2VydmljZSBDbGllbnQuXG4gKiBBZGRzIGluIGRlc2VyaWFsaXphdGlvblBvbGljeSBieSBkZWZhdWx0LlxuICogQWxzbyBhZGRzIGluIGJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3kgaWYgcGFzc2VkIGEgVG9rZW5DcmVkZW50aWFsLlxuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIGN1c3RvbWl6ZSB0aGUgY3JlYXRlZCBwaXBlbGluZS5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQ2xpZW50UGlwZWxpbmUob3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgcGlwZWxpbmUgPSAoMCwgY29yZV9yZXN0X3BpcGVsaW5lXzEuY3JlYXRlUGlwZWxpbmVGcm9tT3B0aW9ucykob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgPyBvcHRpb25zIDoge30pO1xuICAgIGlmIChvcHRpb25zLmNyZWRlbnRpYWxPcHRpb25zKSB7XG4gICAgICAgIHBpcGVsaW5lLmFkZFBvbGljeSgoMCwgY29yZV9yZXN0X3BpcGVsaW5lXzEuYmVhcmVyVG9rZW5BdXRoZW50aWNhdGlvblBvbGljeSkoe1xuICAgICAgICAgICAgY3JlZGVudGlhbDogb3B0aW9ucy5jcmVkZW50aWFsT3B0aW9ucy5jcmVkZW50aWFsLFxuICAgICAgICAgICAgc2NvcGVzOiBvcHRpb25zLmNyZWRlbnRpYWxPcHRpb25zLmNyZWRlbnRpYWxTY29wZXMsXG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgcGlwZWxpbmUuYWRkUG9saWN5KCgwLCBzZXJpYWxpemF0aW9uUG9saWN5X2pzXzEuc2VyaWFsaXphdGlvblBvbGljeSkob3B0aW9ucy5zZXJpYWxpemF0aW9uT3B0aW9ucyksIHsgcGhhc2U6IFwiU2VyaWFsaXplXCIgfSk7XG4gICAgcGlwZWxpbmUuYWRkUG9saWN5KCgwLCBkZXNlcmlhbGl6YXRpb25Qb2xpY3lfanNfMS5kZXNlcmlhbGl6YXRpb25Qb2xpY3kpKG9wdGlvbnMuZGVzZXJpYWxpemF0aW9uT3B0aW9ucyksIHtcbiAgICAgICAgcGhhc2U6IFwiRGVzZXJpYWxpemVcIixcbiAgICB9KTtcbiAgICByZXR1cm4gcGlwZWxpbmU7XG59XG5leHBvcnRzLmNyZWF0ZUNsaWVudFBpcGVsaW5lID0gY3JlYXRlQ2xpZW50UGlwZWxpbmU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1waXBlbGluZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldENhY2hlZERlZmF1bHRIdHRwQ2xpZW50ID0gdm9pZCAwO1xuY29uc3QgY29yZV9yZXN0X3BpcGVsaW5lXzEgPSByZXF1aXJlKFwiQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZVwiKTtcbmxldCBjYWNoZWRIdHRwQ2xpZW50O1xuZnVuY3Rpb24gZ2V0Q2FjaGVkRGVmYXVsdEh0dHBDbGllbnQoKSB7XG4gICAgaWYgKCFjYWNoZWRIdHRwQ2xpZW50KSB7XG4gICAgICAgIGNhY2hlZEh0dHBDbGllbnQgPSAoMCwgY29yZV9yZXN0X3BpcGVsaW5lXzEuY3JlYXRlRGVmYXVsdEh0dHBDbGllbnQpKCk7XG4gICAgfVxuICAgIHJldHVybiBjYWNoZWRIdHRwQ2xpZW50O1xufVxuZXhwb3J0cy5nZXRDYWNoZWREZWZhdWx0SHR0cENsaWVudCA9IGdldENhY2hlZERlZmF1bHRIdHRwQ2xpZW50O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aHR0cENsaWVudENhY2hlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYXBwZW5kUXVlcnlQYXJhbXMgPSBleHBvcnRzLmdldFJlcXVlc3RVcmwgPSB2b2lkIDA7XG5jb25zdCBvcGVyYXRpb25IZWxwZXJzX2pzXzEgPSByZXF1aXJlKFwiLi9vcGVyYXRpb25IZWxwZXJzLmpzXCIpO1xuY29uc3QgaW50ZXJmYWNlSGVscGVyc19qc18xID0gcmVxdWlyZShcIi4vaW50ZXJmYWNlSGVscGVycy5qc1wiKTtcbmNvbnN0IENvbGxlY3Rpb25Gb3JtYXRUb0RlbGltaXRlck1hcCA9IHtcbiAgICBDU1Y6IFwiLFwiLFxuICAgIFNTVjogXCIgXCIsXG4gICAgTXVsdGk6IFwiTXVsdGlcIixcbiAgICBUU1Y6IFwiXFx0XCIsXG4gICAgUGlwZXM6IFwifFwiLFxufTtcbmZ1bmN0aW9uIGdldFJlcXVlc3RVcmwoYmFzZVVyaSwgb3BlcmF0aW9uU3BlYywgb3BlcmF0aW9uQXJndW1lbnRzLCBmYWxsYmFja09iamVjdCkge1xuICAgIGNvbnN0IHVybFJlcGxhY2VtZW50cyA9IGNhbGN1bGF0ZVVybFJlcGxhY2VtZW50cyhvcGVyYXRpb25TcGVjLCBvcGVyYXRpb25Bcmd1bWVudHMsIGZhbGxiYWNrT2JqZWN0KTtcbiAgICBsZXQgaXNBYnNvbHV0ZVBhdGggPSBmYWxzZTtcbiAgICBsZXQgcmVxdWVzdFVybCA9IHJlcGxhY2VBbGwoYmFzZVVyaSwgdXJsUmVwbGFjZW1lbnRzKTtcbiAgICBpZiAob3BlcmF0aW9uU3BlYy5wYXRoKSB7XG4gICAgICAgIGxldCBwYXRoID0gcmVwbGFjZUFsbChvcGVyYXRpb25TcGVjLnBhdGgsIHVybFJlcGxhY2VtZW50cyk7XG4gICAgICAgIC8vIFFVSVJLOiBzb21ldGltZXMgd2UgZ2V0IGEgcGF0aCBjb21wb25lbnQgbGlrZSAve25leHRMaW5rfVxuICAgICAgICAvLyB3aGljaCBtYXkgYmUgYSBmdWxseSBmb3JtZWQgVVJMIHdpdGggYSBsZWFkaW5nIC8uIEluIHRoYXQgY2FzZSwgd2Ugc2hvdWxkXG4gICAgICAgIC8vIHJlbW92ZSB0aGUgbGVhZGluZyAvXG4gICAgICAgIGlmIChvcGVyYXRpb25TcGVjLnBhdGggPT09IFwiL3tuZXh0TGlua31cIiAmJiBwYXRoLnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG4gICAgICAgICAgICBwYXRoID0gcGF0aC5zdWJzdHJpbmcoMSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUVVJUks6IHNvbWV0aW1lcyB3ZSBnZXQgYSBwYXRoIGNvbXBvbmVudCBsaWtlIHtuZXh0TGlua31cbiAgICAgICAgLy8gd2hpY2ggbWF5IGJlIGEgZnVsbHkgZm9ybWVkIFVSTC4gSW4gdGhhdCBjYXNlLCB3ZSBzaG91bGRcbiAgICAgICAgLy8gaWdub3JlIHRoZSBiYXNlVXJpLlxuICAgICAgICBpZiAoaXNBYnNvbHV0ZVVybChwYXRoKSkge1xuICAgICAgICAgICAgcmVxdWVzdFVybCA9IHBhdGg7XG4gICAgICAgICAgICBpc0Fic29sdXRlUGF0aCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXF1ZXN0VXJsID0gYXBwZW5kUGF0aChyZXF1ZXN0VXJsLCBwYXRoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCB7IHF1ZXJ5UGFyYW1zLCBzZXF1ZW5jZVBhcmFtcyB9ID0gY2FsY3VsYXRlUXVlcnlQYXJhbWV0ZXJzKG9wZXJhdGlvblNwZWMsIG9wZXJhdGlvbkFyZ3VtZW50cywgZmFsbGJhY2tPYmplY3QpO1xuICAgIC8qKlxuICAgICAqIE5vdGljZSB0aGF0IHRoaXMgY2FsbCBzZXRzIHRoZSBgbm9PdmVyd3JpdGVgIHBhcmFtZXRlciB0byB0cnVlIGlmIHRoZSBgcmVxdWVzdFVybGBcbiAgICAgKiBpcyBhbiBhYnNvbHV0ZSBwYXRoLiBUaGlzIGVuc3VyZXMgdGhhdCBleGlzdGluZyBxdWVyeSBwYXJhbWV0ZXIgdmFsdWVzIGluIGByZXF1ZXN0VXJsYFxuICAgICAqIGRvIG5vdCBnZXQgb3ZlcndyaXR0ZW4uIE9uIHRoZSBvdGhlciBoYW5kIHdoZW4gYHJlcXVlc3RVcmxgIGlzIG5vdCBhYnNvbHV0ZSBwYXRoLCBpdFxuICAgICAqIGlzIHN0aWxsIGJlaW5nIGJ1aWx0IHNvIHRoZXJlIGlzIG5vdGhpbmcgdG8gb3ZlcndyaXRlLlxuICAgICAqL1xuICAgIHJlcXVlc3RVcmwgPSBhcHBlbmRRdWVyeVBhcmFtcyhyZXF1ZXN0VXJsLCBxdWVyeVBhcmFtcywgc2VxdWVuY2VQYXJhbXMsIGlzQWJzb2x1dGVQYXRoKTtcbiAgICByZXR1cm4gcmVxdWVzdFVybDtcbn1cbmV4cG9ydHMuZ2V0UmVxdWVzdFVybCA9IGdldFJlcXVlc3RVcmw7XG5mdW5jdGlvbiByZXBsYWNlQWxsKGlucHV0LCByZXBsYWNlbWVudHMpIHtcbiAgICBsZXQgcmVzdWx0ID0gaW5wdXQ7XG4gICAgZm9yIChjb25zdCBbc2VhcmNoVmFsdWUsIHJlcGxhY2VWYWx1ZV0gb2YgcmVwbGFjZW1lbnRzKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdC5zcGxpdChzZWFyY2hWYWx1ZSkuam9pbihyZXBsYWNlVmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gY2FsY3VsYXRlVXJsUmVwbGFjZW1lbnRzKG9wZXJhdGlvblNwZWMsIG9wZXJhdGlvbkFyZ3VtZW50cywgZmFsbGJhY2tPYmplY3QpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IE1hcCgpO1xuICAgIGlmICgoX2EgPSBvcGVyYXRpb25TcGVjLnVybFBhcmFtZXRlcnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5sZW5ndGgpIHtcbiAgICAgICAgZm9yIChjb25zdCB1cmxQYXJhbWV0ZXIgb2Ygb3BlcmF0aW9uU3BlYy51cmxQYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgICBsZXQgdXJsUGFyYW1ldGVyVmFsdWUgPSAoMCwgb3BlcmF0aW9uSGVscGVyc19qc18xLmdldE9wZXJhdGlvbkFyZ3VtZW50VmFsdWVGcm9tUGFyYW1ldGVyKShvcGVyYXRpb25Bcmd1bWVudHMsIHVybFBhcmFtZXRlciwgZmFsbGJhY2tPYmplY3QpO1xuICAgICAgICAgICAgY29uc3QgcGFyYW1ldGVyUGF0aFN0cmluZyA9ICgwLCBpbnRlcmZhY2VIZWxwZXJzX2pzXzEuZ2V0UGF0aFN0cmluZ0Zyb21QYXJhbWV0ZXIpKHVybFBhcmFtZXRlcik7XG4gICAgICAgICAgICB1cmxQYXJhbWV0ZXJWYWx1ZSA9IG9wZXJhdGlvblNwZWMuc2VyaWFsaXplci5zZXJpYWxpemUodXJsUGFyYW1ldGVyLm1hcHBlciwgdXJsUGFyYW1ldGVyVmFsdWUsIHBhcmFtZXRlclBhdGhTdHJpbmcpO1xuICAgICAgICAgICAgaWYgKCF1cmxQYXJhbWV0ZXIuc2tpcEVuY29kaW5nKSB7XG4gICAgICAgICAgICAgICAgdXJsUGFyYW1ldGVyVmFsdWUgPSBlbmNvZGVVUklDb21wb25lbnQodXJsUGFyYW1ldGVyVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0LnNldChgeyR7dXJsUGFyYW1ldGVyLm1hcHBlci5zZXJpYWxpemVkTmFtZSB8fCBwYXJhbWV0ZXJQYXRoU3RyaW5nfX1gLCB1cmxQYXJhbWV0ZXJWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIGlzQWJzb2x1dGVVcmwodXJsKSB7XG4gICAgcmV0dXJuIHVybC5pbmNsdWRlcyhcIjovL1wiKTtcbn1cbmZ1bmN0aW9uIGFwcGVuZFBhdGgodXJsLCBwYXRoVG9BcHBlbmQpIHtcbiAgICBpZiAoIXBhdGhUb0FwcGVuZCkge1xuICAgICAgICByZXR1cm4gdXJsO1xuICAgIH1cbiAgICBjb25zdCBwYXJzZWRVcmwgPSBuZXcgVVJMKHVybCk7XG4gICAgbGV0IG5ld1BhdGggPSBwYXJzZWRVcmwucGF0aG5hbWU7XG4gICAgaWYgKCFuZXdQYXRoLmVuZHNXaXRoKFwiL1wiKSkge1xuICAgICAgICBuZXdQYXRoID0gYCR7bmV3UGF0aH0vYDtcbiAgICB9XG4gICAgaWYgKHBhdGhUb0FwcGVuZC5zdGFydHNXaXRoKFwiL1wiKSkge1xuICAgICAgICBwYXRoVG9BcHBlbmQgPSBwYXRoVG9BcHBlbmQuc3Vic3RyaW5nKDEpO1xuICAgIH1cbiAgICBjb25zdCBzZWFyY2hTdGFydCA9IHBhdGhUb0FwcGVuZC5pbmRleE9mKFwiP1wiKTtcbiAgICBpZiAoc2VhcmNoU3RhcnQgIT09IC0xKSB7XG4gICAgICAgIGNvbnN0IHBhdGggPSBwYXRoVG9BcHBlbmQuc3Vic3RyaW5nKDAsIHNlYXJjaFN0YXJ0KTtcbiAgICAgICAgY29uc3Qgc2VhcmNoID0gcGF0aFRvQXBwZW5kLnN1YnN0cmluZyhzZWFyY2hTdGFydCArIDEpO1xuICAgICAgICBuZXdQYXRoID0gbmV3UGF0aCArIHBhdGg7XG4gICAgICAgIGlmIChzZWFyY2gpIHtcbiAgICAgICAgICAgIHBhcnNlZFVybC5zZWFyY2ggPSBwYXJzZWRVcmwuc2VhcmNoID8gYCR7cGFyc2VkVXJsLnNlYXJjaH0mJHtzZWFyY2h9YCA6IHNlYXJjaDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgbmV3UGF0aCA9IG5ld1BhdGggKyBwYXRoVG9BcHBlbmQ7XG4gICAgfVxuICAgIHBhcnNlZFVybC5wYXRobmFtZSA9IG5ld1BhdGg7XG4gICAgcmV0dXJuIHBhcnNlZFVybC50b1N0cmluZygpO1xufVxuZnVuY3Rpb24gY2FsY3VsYXRlUXVlcnlQYXJhbWV0ZXJzKG9wZXJhdGlvblNwZWMsIG9wZXJhdGlvbkFyZ3VtZW50cywgZmFsbGJhY2tPYmplY3QpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0IHNlcXVlbmNlUGFyYW1zID0gbmV3IFNldCgpO1xuICAgIGlmICgoX2EgPSBvcGVyYXRpb25TcGVjLnF1ZXJ5UGFyYW1ldGVycykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmxlbmd0aCkge1xuICAgICAgICBmb3IgKGNvbnN0IHF1ZXJ5UGFyYW1ldGVyIG9mIG9wZXJhdGlvblNwZWMucXVlcnlQYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgICBpZiAocXVlcnlQYXJhbWV0ZXIubWFwcGVyLnR5cGUubmFtZSA9PT0gXCJTZXF1ZW5jZVwiICYmIHF1ZXJ5UGFyYW1ldGVyLm1hcHBlci5zZXJpYWxpemVkTmFtZSkge1xuICAgICAgICAgICAgICAgIHNlcXVlbmNlUGFyYW1zLmFkZChxdWVyeVBhcmFtZXRlci5tYXBwZXIuc2VyaWFsaXplZE5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHF1ZXJ5UGFyYW1ldGVyVmFsdWUgPSAoMCwgb3BlcmF0aW9uSGVscGVyc19qc18xLmdldE9wZXJhdGlvbkFyZ3VtZW50VmFsdWVGcm9tUGFyYW1ldGVyKShvcGVyYXRpb25Bcmd1bWVudHMsIHF1ZXJ5UGFyYW1ldGVyLCBmYWxsYmFja09iamVjdCk7XG4gICAgICAgICAgICBpZiAoKHF1ZXJ5UGFyYW1ldGVyVmFsdWUgIT09IHVuZGVmaW5lZCAmJiBxdWVyeVBhcmFtZXRlclZhbHVlICE9PSBudWxsKSB8fFxuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVyLm1hcHBlci5yZXF1aXJlZCkge1xuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVyVmFsdWUgPSBvcGVyYXRpb25TcGVjLnNlcmlhbGl6ZXIuc2VyaWFsaXplKHF1ZXJ5UGFyYW1ldGVyLm1hcHBlciwgcXVlcnlQYXJhbWV0ZXJWYWx1ZSwgKDAsIGludGVyZmFjZUhlbHBlcnNfanNfMS5nZXRQYXRoU3RyaW5nRnJvbVBhcmFtZXRlcikocXVlcnlQYXJhbWV0ZXIpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkZWxpbWl0ZXIgPSBxdWVyeVBhcmFtZXRlci5jb2xsZWN0aW9uRm9ybWF0XG4gICAgICAgICAgICAgICAgICAgID8gQ29sbGVjdGlvbkZvcm1hdFRvRGVsaW1pdGVyTWFwW3F1ZXJ5UGFyYW1ldGVyLmNvbGxlY3Rpb25Gb3JtYXRdXG4gICAgICAgICAgICAgICAgICAgIDogXCJcIjtcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShxdWVyeVBhcmFtZXRlclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyByZXBsYWNlIG51bGwgYW5kIHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtZXRlclZhbHVlID0gcXVlcnlQYXJhbWV0ZXJWYWx1ZS5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtID09PSBudWxsIHx8IGl0ZW0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocXVlcnlQYXJhbWV0ZXIuY29sbGVjdGlvbkZvcm1hdCA9PT0gXCJNdWx0aVwiICYmIHF1ZXJ5UGFyYW1ldGVyVmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHF1ZXJ5UGFyYW1ldGVyVmFsdWUpICYmXG4gICAgICAgICAgICAgICAgICAgIChxdWVyeVBhcmFtZXRlci5jb2xsZWN0aW9uRm9ybWF0ID09PSBcIlNTVlwiIHx8IHF1ZXJ5UGFyYW1ldGVyLmNvbGxlY3Rpb25Gb3JtYXQgPT09IFwiVFNWXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVyVmFsdWUgPSBxdWVyeVBhcmFtZXRlclZhbHVlLmpvaW4oZGVsaW1pdGVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFxdWVyeVBhcmFtZXRlci5za2lwRW5jb2RpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocXVlcnlQYXJhbWV0ZXJWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVyVmFsdWUgPSBxdWVyeVBhcmFtZXRlclZhbHVlLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVyVmFsdWUgPSBlbmNvZGVVUklDb21wb25lbnQocXVlcnlQYXJhbWV0ZXJWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gSm9pbiBwaXBlcyBhbmQgQ1NWICphZnRlciogZW5jb2RpbmcsIG9yIHRoZSBzZXJ2ZXIgd2lsbCBiZSB1cHNldC5cbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShxdWVyeVBhcmFtZXRlclZhbHVlKSAmJlxuICAgICAgICAgICAgICAgICAgICAocXVlcnlQYXJhbWV0ZXIuY29sbGVjdGlvbkZvcm1hdCA9PT0gXCJDU1ZcIiB8fCBxdWVyeVBhcmFtZXRlci5jb2xsZWN0aW9uRm9ybWF0ID09PSBcIlBpcGVzXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVyVmFsdWUgPSBxdWVyeVBhcmFtZXRlclZhbHVlLmpvaW4oZGVsaW1pdGVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzdWx0LnNldChxdWVyeVBhcmFtZXRlci5tYXBwZXIuc2VyaWFsaXplZE5hbWUgfHwgKDAsIGludGVyZmFjZUhlbHBlcnNfanNfMS5nZXRQYXRoU3RyaW5nRnJvbVBhcmFtZXRlcikocXVlcnlQYXJhbWV0ZXIpLCBxdWVyeVBhcmFtZXRlclZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBxdWVyeVBhcmFtczogcmVzdWx0LFxuICAgICAgICBzZXF1ZW5jZVBhcmFtcyxcbiAgICB9O1xufVxuZnVuY3Rpb24gc2ltcGxlUGFyc2VRdWVyeVBhcmFtcyhxdWVyeVN0cmluZykge1xuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBNYXAoKTtcbiAgICBpZiAoIXF1ZXJ5U3RyaW5nIHx8IHF1ZXJ5U3RyaW5nWzBdICE9PSBcIj9cIikge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICAvLyByZW1vdmUgdGhlIGxlYWRpbmcgP1xuICAgIHF1ZXJ5U3RyaW5nID0gcXVlcnlTdHJpbmcuc2xpY2UoMSk7XG4gICAgY29uc3QgcGFpcnMgPSBxdWVyeVN0cmluZy5zcGxpdChcIiZcIik7XG4gICAgZm9yIChjb25zdCBwYWlyIG9mIHBhaXJzKSB7XG4gICAgICAgIGNvbnN0IFtuYW1lLCB2YWx1ZV0gPSBwYWlyLnNwbGl0KFwiPVwiLCAyKTtcbiAgICAgICAgY29uc3QgZXhpc3RpbmdWYWx1ZSA9IHJlc3VsdC5nZXQobmFtZSk7XG4gICAgICAgIGlmIChleGlzdGluZ1ZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShleGlzdGluZ1ZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGV4aXN0aW5nVmFsdWUucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuc2V0KG5hbWUsIFtleGlzdGluZ1ZhbHVlLCB2YWx1ZV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0LnNldChuYW1lLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIGFwcGVuZFF1ZXJ5UGFyYW1zKHVybCwgcXVlcnlQYXJhbXMsIHNlcXVlbmNlUGFyYW1zLCBub092ZXJ3cml0ZSA9IGZhbHNlKSB7XG4gICAgaWYgKHF1ZXJ5UGFyYW1zLnNpemUgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG4gICAgY29uc3QgcGFyc2VkVXJsID0gbmV3IFVSTCh1cmwpO1xuICAgIC8vIFFVSVJLOiBwYXJzZWRVcmwuc2VhcmNoUGFyYW1zIHdpbGwgaGF2ZSB0aGVpciBuYW1lL3ZhbHVlIHBhaXJzIGRlY29kZWQsIHdoaWNoXG4gICAgLy8gY2FuIGNoYW5nZSB0aGVpciBtZWFuaW5nIHRvIHRoZSBzZXJ2ZXIsIHN1Y2ggYXMgaW4gdGhlIGNhc2Ugb2YgYSBTQVMgc2lnbmF0dXJlLlxuICAgIC8vIFRvIGF2b2lkIGFjY2lkZW50YWxseSB1bi1lbmNvZGluZyBhIHF1ZXJ5IHBhcmFtLCB3ZSBwYXJzZSB0aGUga2V5L3ZhbHVlcyBvdXJzZWx2ZXNcbiAgICBjb25zdCBjb21iaW5lZFBhcmFtcyA9IHNpbXBsZVBhcnNlUXVlcnlQYXJhbXMocGFyc2VkVXJsLnNlYXJjaCk7XG4gICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIHF1ZXJ5UGFyYW1zKSB7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nVmFsdWUgPSBjb21iaW5lZFBhcmFtcy5nZXQobmFtZSk7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGV4aXN0aW5nVmFsdWUpKSB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBleGlzdGluZ1ZhbHVlLnB1c2goLi4udmFsdWUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlU2V0ID0gbmV3IFNldChleGlzdGluZ1ZhbHVlKTtcbiAgICAgICAgICAgICAgICBjb21iaW5lZFBhcmFtcy5zZXQobmFtZSwgQXJyYXkuZnJvbSh2YWx1ZVNldCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZXhpc3RpbmdWYWx1ZS5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChleGlzdGluZ1ZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZS51bnNoaWZ0KGV4aXN0aW5nVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoc2VxdWVuY2VQYXJhbXMuaGFzKG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgY29tYmluZWRQYXJhbXMuc2V0KG5hbWUsIFtleGlzdGluZ1ZhbHVlLCB2YWx1ZV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFub092ZXJ3cml0ZSkge1xuICAgICAgICAgICAgICAgIGNvbWJpbmVkUGFyYW1zLnNldChuYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb21iaW5lZFBhcmFtcy5zZXQobmFtZSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHNlYXJjaFBpZWNlcyA9IFtdO1xuICAgIGZvciAoY29uc3QgW25hbWUsIHZhbHVlXSBvZiBjb21iaW5lZFBhcmFtcykge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBzZWFyY2hQaWVjZXMucHVzaChgJHtuYW1lfT0ke3ZhbHVlfWApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAvLyBRVUlSSzogSWYgd2UgZ2V0IGFuIGFycmF5IG9mIHZhbHVlcywgaW5jbHVkZSBtdWx0aXBsZSBrZXkvdmFsdWUgcGFpcnNcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc3ViVmFsdWUgb2YgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICBzZWFyY2hQaWVjZXMucHVzaChgJHtuYW1lfT0ke3N1YlZhbHVlfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc2VhcmNoUGllY2VzLnB1c2goYCR7bmFtZX09JHt2YWx1ZX1gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBRVUlSSzogd2UgaGF2ZSB0byBzZXQgc2VhcmNoIG1hbnVhbGx5IGFzIHNlYXJjaFBhcmFtcyB3aWxsIGVuY29kZSBjb21tYSB3aGVuIGl0IHNob3VsZG4ndC5cbiAgICBwYXJzZWRVcmwuc2VhcmNoID0gc2VhcmNoUGllY2VzLmxlbmd0aCA/IGA/JHtzZWFyY2hQaWVjZXMuam9pbihcIiZcIil9YCA6IFwiXCI7XG4gICAgcmV0dXJuIHBhcnNlZFVybC50b1N0cmluZygpO1xufVxuZXhwb3J0cy5hcHBlbmRRdWVyeVBhcmFtcyA9IGFwcGVuZFF1ZXJ5UGFyYW1zO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXJsSGVscGVycy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmxvZ2dlciA9IHZvaWQgMDtcbmNvbnN0IGxvZ2dlcl8xID0gcmVxdWlyZShcIkBhenVyZS9sb2dnZXJcIik7XG5leHBvcnRzLmxvZ2dlciA9ICgwLCBsb2dnZXJfMS5jcmVhdGVDbGllbnRMb2dnZXIpKFwiY29yZS1jbGllbnRcIik7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1sb2cuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TZXJ2aWNlQ2xpZW50ID0gdm9pZCAwO1xuY29uc3QgY29yZV9yZXN0X3BpcGVsaW5lXzEgPSByZXF1aXJlKFwiQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZVwiKTtcbmNvbnN0IHBpcGVsaW5lX2pzXzEgPSByZXF1aXJlKFwiLi9waXBlbGluZS5qc1wiKTtcbmNvbnN0IHV0aWxzX2pzXzEgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IGh0dHBDbGllbnRDYWNoZV9qc18xID0gcmVxdWlyZShcIi4vaHR0cENsaWVudENhY2hlLmpzXCIpO1xuY29uc3Qgb3BlcmF0aW9uSGVscGVyc19qc18xID0gcmVxdWlyZShcIi4vb3BlcmF0aW9uSGVscGVycy5qc1wiKTtcbmNvbnN0IHVybEhlbHBlcnNfanNfMSA9IHJlcXVpcmUoXCIuL3VybEhlbHBlcnMuanNcIik7XG5jb25zdCBpbnRlcmZhY2VIZWxwZXJzX2pzXzEgPSByZXF1aXJlKFwiLi9pbnRlcmZhY2VIZWxwZXJzLmpzXCIpO1xuY29uc3QgbG9nX2pzXzEgPSByZXF1aXJlKFwiLi9sb2cuanNcIik7XG4vKipcbiAqIEluaXRpYWxpemVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBTZXJ2aWNlQ2xpZW50LlxuICovXG5jbGFzcyBTZXJ2aWNlQ2xpZW50IHtcbiAgICAvKipcbiAgICAgKiBUaGUgU2VydmljZUNsaWVudCBjb25zdHJ1Y3RvclxuICAgICAqIEBwYXJhbSBjcmVkZW50aWFsIC0gVGhlIGNyZWRlbnRpYWxzIHVzZWQgZm9yIGF1dGhlbnRpY2F0aW9uIHdpdGggdGhlIHNlcnZpY2UuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgc2VydmljZSBjbGllbnQgb3B0aW9ucyB0aGF0IGdvdmVybiB0aGUgYmVoYXZpb3Igb2YgdGhlIGNsaWVudC5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgdGhpcy5fcmVxdWVzdENvbnRlbnRUeXBlID0gb3B0aW9ucy5yZXF1ZXN0Q29udGVudFR5cGU7XG4gICAgICAgIHRoaXMuX2VuZHBvaW50ID0gKF9hID0gb3B0aW9ucy5lbmRwb2ludCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogb3B0aW9ucy5iYXNlVXJpO1xuICAgICAgICBpZiAob3B0aW9ucy5iYXNlVXJpKSB7XG4gICAgICAgICAgICBsb2dfanNfMS5sb2dnZXIud2FybmluZyhcIlRoZSBiYXNlVXJpIG9wdGlvbiBmb3IgU0RLIENsaWVudHMgaGFzIGJlZW4gZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSBlbmRwb2ludCBpbnN0ZWFkLlwiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9hbGxvd0luc2VjdXJlQ29ubmVjdGlvbiA9IG9wdGlvbnMuYWxsb3dJbnNlY3VyZUNvbm5lY3Rpb247XG4gICAgICAgIHRoaXMuX2h0dHBDbGllbnQgPSBvcHRpb25zLmh0dHBDbGllbnQgfHwgKDAsIGh0dHBDbGllbnRDYWNoZV9qc18xLmdldENhY2hlZERlZmF1bHRIdHRwQ2xpZW50KSgpO1xuICAgICAgICB0aGlzLnBpcGVsaW5lID0gb3B0aW9ucy5waXBlbGluZSB8fCBjcmVhdGVEZWZhdWx0UGlwZWxpbmUob3B0aW9ucyk7XG4gICAgICAgIGlmICgoX2IgPSBvcHRpb25zLmFkZGl0aW9uYWxQb2xpY2llcykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmxlbmd0aCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCB7IHBvbGljeSwgcG9zaXRpb24gfSBvZiBvcHRpb25zLmFkZGl0aW9uYWxQb2xpY2llcykge1xuICAgICAgICAgICAgICAgIC8vIFNpZ24gaGFwcGVucyBhZnRlciBSZXRyeSBhbmQgaXMgY29tbW9ubHkgbmVlZGVkIHRvIG9jY3VyXG4gICAgICAgICAgICAgICAgLy8gYmVmb3JlIHBvbGljaWVzIHRoYXQgaW50ZXJjZXB0IHBvc3QtcmV0cnkuXG4gICAgICAgICAgICAgICAgY29uc3QgYWZ0ZXJQaGFzZSA9IHBvc2l0aW9uID09PSBcInBlclJldHJ5XCIgPyBcIlNpZ25cIiA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB0aGlzLnBpcGVsaW5lLmFkZFBvbGljeShwb2xpY3ksIHtcbiAgICAgICAgICAgICAgICAgICAgYWZ0ZXJQaGFzZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZW5kIHRoZSBwcm92aWRlZCBodHRwUmVxdWVzdC5cbiAgICAgKi9cbiAgICBhc3luYyBzZW5kUmVxdWVzdChyZXF1ZXN0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBpcGVsaW5lLnNlbmRSZXF1ZXN0KHRoaXMuX2h0dHBDbGllbnQsIHJlcXVlc3QpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZW5kIGFuIEhUVFAgcmVxdWVzdCB0aGF0IGlzIHBvcHVsYXRlZCB1c2luZyB0aGUgcHJvdmlkZWQgT3BlcmF0aW9uU3BlYy5cbiAgICAgKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZWQgcmVzdWx0IG9mIHRoZSByZXF1ZXN0LCBiYXNlZCBvbiB0aGUgT3BlcmF0aW9uU3BlYy5cbiAgICAgKiBAcGFyYW0gb3BlcmF0aW9uQXJndW1lbnRzIC0gVGhlIGFyZ3VtZW50cyB0aGF0IHRoZSBIVFRQIHJlcXVlc3QncyB0ZW1wbGF0ZWQgdmFsdWVzIHdpbGwgYmUgcG9wdWxhdGVkIGZyb20uXG4gICAgICogQHBhcmFtIG9wZXJhdGlvblNwZWMgLSBUaGUgT3BlcmF0aW9uU3BlYyB0byB1c2UgdG8gcG9wdWxhdGUgdGhlIGh0dHBSZXF1ZXN0LlxuICAgICAqL1xuICAgIGFzeW5jIHNlbmRPcGVyYXRpb25SZXF1ZXN0KG9wZXJhdGlvbkFyZ3VtZW50cywgb3BlcmF0aW9uU3BlYykge1xuICAgICAgICBjb25zdCBlbmRwb2ludCA9IG9wZXJhdGlvblNwZWMuYmFzZVVybCB8fCB0aGlzLl9lbmRwb2ludDtcbiAgICAgICAgaWYgKCFlbmRwb2ludCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSWYgb3BlcmF0aW9uU3BlYy5iYXNlVXJsIGlzIG5vdCBzcGVjaWZpZWQsIHRoZW4gdGhlIFNlcnZpY2VDbGllbnQgbXVzdCBoYXZlIGEgZW5kcG9pbnQgc3RyaW5nIHByb3BlcnR5IHRoYXQgY29udGFpbnMgdGhlIGJhc2UgVVJMIHRvIHVzZS5cIik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVGVtcGxhdGl6ZWQgVVJMcyBzb21ldGltZXMgcmVmZXJlbmNlIHByb3BlcnRpZXMgb24gdGhlIFNlcnZpY2VDbGllbnQgY2hpbGQgY2xhc3MsXG4gICAgICAgIC8vIHNvIHdlIGhhdmUgdG8gcGFzcyBgdGhpc2AgYmVsb3cgaW4gb3JkZXIgdG8gc2VhcmNoIHRoZXNlIHByb3BlcnRpZXMgaWYgdGhleSdyZVxuICAgICAgICAvLyBub3QgcGFydCBvZiBPcGVyYXRpb25Bcmd1bWVudHNcbiAgICAgICAgY29uc3QgdXJsID0gKDAsIHVybEhlbHBlcnNfanNfMS5nZXRSZXF1ZXN0VXJsKShlbmRwb2ludCwgb3BlcmF0aW9uU3BlYywgb3BlcmF0aW9uQXJndW1lbnRzLCB0aGlzKTtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9ICgwLCBjb3JlX3Jlc3RfcGlwZWxpbmVfMS5jcmVhdGVQaXBlbGluZVJlcXVlc3QpKHtcbiAgICAgICAgICAgIHVybCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJlcXVlc3QubWV0aG9kID0gb3BlcmF0aW9uU3BlYy5odHRwTWV0aG9kO1xuICAgICAgICBjb25zdCBvcGVyYXRpb25JbmZvID0gKDAsIG9wZXJhdGlvbkhlbHBlcnNfanNfMS5nZXRPcGVyYXRpb25SZXF1ZXN0SW5mbykocmVxdWVzdCk7XG4gICAgICAgIG9wZXJhdGlvbkluZm8ub3BlcmF0aW9uU3BlYyA9IG9wZXJhdGlvblNwZWM7XG4gICAgICAgIG9wZXJhdGlvbkluZm8ub3BlcmF0aW9uQXJndW1lbnRzID0gb3BlcmF0aW9uQXJndW1lbnRzO1xuICAgICAgICBjb25zdCBjb250ZW50VHlwZSA9IG9wZXJhdGlvblNwZWMuY29udGVudFR5cGUgfHwgdGhpcy5fcmVxdWVzdENvbnRlbnRUeXBlO1xuICAgICAgICBpZiAoY29udGVudFR5cGUgJiYgb3BlcmF0aW9uU3BlYy5yZXF1ZXN0Qm9keSkge1xuICAgICAgICAgICAgcmVxdWVzdC5oZWFkZXJzLnNldChcIkNvbnRlbnQtVHlwZVwiLCBjb250ZW50VHlwZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IG9wZXJhdGlvbkFyZ3VtZW50cy5vcHRpb25zO1xuICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgY29uc3QgcmVxdWVzdE9wdGlvbnMgPSBvcHRpb25zLnJlcXVlc3RPcHRpb25zO1xuICAgICAgICAgICAgaWYgKHJlcXVlc3RPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcXVlc3RPcHRpb25zLnRpbWVvdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC50aW1lb3V0ID0gcmVxdWVzdE9wdGlvbnMudGltZW91dDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlcXVlc3RPcHRpb25zLm9uVXBsb2FkUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5vblVwbG9hZFByb2dyZXNzID0gcmVxdWVzdE9wdGlvbnMub25VcGxvYWRQcm9ncmVzcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlcXVlc3RPcHRpb25zLm9uRG93bmxvYWRQcm9ncmVzcykge1xuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Lm9uRG93bmxvYWRQcm9ncmVzcyA9IHJlcXVlc3RPcHRpb25zLm9uRG93bmxvYWRQcm9ncmVzcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlcXVlc3RPcHRpb25zLnNob3VsZERlc2VyaWFsaXplICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uSW5mby5zaG91bGREZXNlcmlhbGl6ZSA9IHJlcXVlc3RPcHRpb25zLnNob3VsZERlc2VyaWFsaXplO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocmVxdWVzdE9wdGlvbnMuYWxsb3dJbnNlY3VyZUNvbm5lY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5hbGxvd0luc2VjdXJlQ29ubmVjdGlvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuYWJvcnRTaWduYWwpIHtcbiAgICAgICAgICAgICAgICByZXF1ZXN0LmFib3J0U2lnbmFsID0gb3B0aW9ucy5hYm9ydFNpZ25hbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHRpb25zLnRyYWNpbmdPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdC50cmFjaW5nT3B0aW9ucyA9IG9wdGlvbnMudHJhY2luZ09wdGlvbnM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2FsbG93SW5zZWN1cmVDb25uZWN0aW9uKSB7XG4gICAgICAgICAgICByZXF1ZXN0LmFsbG93SW5zZWN1cmVDb25uZWN0aW9uID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVxdWVzdC5zdHJlYW1SZXNwb25zZVN0YXR1c0NvZGVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJlcXVlc3Quc3RyZWFtUmVzcG9uc2VTdGF0dXNDb2RlcyA9ICgwLCBpbnRlcmZhY2VIZWxwZXJzX2pzXzEuZ2V0U3RyZWFtaW5nUmVzcG9uc2VTdGF0dXNDb2Rlcykob3BlcmF0aW9uU3BlYyk7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJhd1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdChyZXF1ZXN0KTtcbiAgICAgICAgICAgIGNvbnN0IGZsYXRSZXNwb25zZSA9ICgwLCB1dGlsc19qc18xLmZsYXR0ZW5SZXNwb25zZSkocmF3UmVzcG9uc2UsIG9wZXJhdGlvblNwZWMucmVzcG9uc2VzW3Jhd1Jlc3BvbnNlLnN0YXR1c10pO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5vblJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5vblJlc3BvbnNlKHJhd1Jlc3BvbnNlLCBmbGF0UmVzcG9uc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZsYXRSZXNwb25zZTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZXJyb3IgPT09IFwib2JqZWN0XCIgJiYgKGVycm9yID09PSBudWxsIHx8IGVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlcnJvci5yZXNwb25zZSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByYXdSZXNwb25zZSA9IGVycm9yLnJlc3BvbnNlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZsYXRSZXNwb25zZSA9ICgwLCB1dGlsc19qc18xLmZsYXR0ZW5SZXNwb25zZSkocmF3UmVzcG9uc2UsIG9wZXJhdGlvblNwZWMucmVzcG9uc2VzW2Vycm9yLnN0YXR1c0NvZGVdIHx8IG9wZXJhdGlvblNwZWMucmVzcG9uc2VzW1wiZGVmYXVsdFwiXSk7XG4gICAgICAgICAgICAgICAgZXJyb3IuZGV0YWlscyA9IGZsYXRSZXNwb25zZTtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLm9uUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5vblJlc3BvbnNlKHJhd1Jlc3BvbnNlLCBmbGF0UmVzcG9uc2UsIGVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuU2VydmljZUNsaWVudCA9IFNlcnZpY2VDbGllbnQ7XG5mdW5jdGlvbiBjcmVhdGVEZWZhdWx0UGlwZWxpbmUob3B0aW9ucykge1xuICAgIGNvbnN0IGNyZWRlbnRpYWxTY29wZXMgPSBnZXRDcmVkZW50aWFsU2NvcGVzKG9wdGlvbnMpO1xuICAgIGNvbnN0IGNyZWRlbnRpYWxPcHRpb25zID0gb3B0aW9ucy5jcmVkZW50aWFsICYmIGNyZWRlbnRpYWxTY29wZXNcbiAgICAgICAgPyB7IGNyZWRlbnRpYWxTY29wZXMsIGNyZWRlbnRpYWw6IG9wdGlvbnMuY3JlZGVudGlhbCB9XG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiAoMCwgcGlwZWxpbmVfanNfMS5jcmVhdGVDbGllbnRQaXBlbGluZSkoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKSwgeyBjcmVkZW50aWFsT3B0aW9ucyB9KSk7XG59XG5mdW5jdGlvbiBnZXRDcmVkZW50aWFsU2NvcGVzKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucy5jcmVkZW50aWFsU2NvcGVzKSB7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmNyZWRlbnRpYWxTY29wZXM7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmVuZHBvaW50KSB7XG4gICAgICAgIHJldHVybiBgJHtvcHRpb25zLmVuZHBvaW50fS8uZGVmYXVsdGA7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmJhc2VVcmkpIHtcbiAgICAgICAgcmV0dXJuIGAke29wdGlvbnMuYmFzZVVyaX0vLmRlZmF1bHRgO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5jcmVkZW50aWFsICYmICFvcHRpb25zLmNyZWRlbnRpYWxTY29wZXMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBXaGVuIHVzaW5nIGNyZWRlbnRpYWxzLCB0aGUgU2VydmljZUNsaWVudE9wdGlvbnMgbXVzdCBjb250YWluIGVpdGhlciBhIGVuZHBvaW50IG9yIGEgY3JlZGVudGlhbFNjb3Blcy4gVW5hYmxlIHRvIGNyZWF0ZSBhIGJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3lgKTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNlcnZpY2VDbGllbnQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5hdXRob3JpemVSZXF1ZXN0T25DbGFpbUNoYWxsZW5nZSA9IGV4cG9ydHMucGFyc2VDQUVDaGFsbGVuZ2UgPSB2b2lkIDA7XG5jb25zdCBsb2dfanNfMSA9IHJlcXVpcmUoXCIuL2xvZy5qc1wiKTtcbmNvbnN0IGJhc2U2NF9qc18xID0gcmVxdWlyZShcIi4vYmFzZTY0LmpzXCIpO1xuLyoqXG4gKiBDb252ZXJ0czogYEJlYXJlciBhPVwiYlwiLCBjPVwiZFwiLCBCZWFyZXIgZD1cImVcIiwgZj1cImdcImAuXG4gKiBJbnRvOiBgWyB7IGE6ICdiJywgYzogJ2QnIH0sIHsgZDogJ2UnLCBmOiAnZycgfSBdYC5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gcGFyc2VDQUVDaGFsbGVuZ2UoY2hhbGxlbmdlcykge1xuICAgIGNvbnN0IGJlYXJlckNoYWxsZW5nZXMgPSBgLCAke2NoYWxsZW5nZXMudHJpbSgpfWAuc3BsaXQoXCIsIEJlYXJlciBcIikuZmlsdGVyKCh4KSA9PiB4KTtcbiAgICByZXR1cm4gYmVhcmVyQ2hhbGxlbmdlcy5tYXAoKGNoYWxsZW5nZSkgPT4ge1xuICAgICAgICBjb25zdCBjaGFsbGVuZ2VQYXJ0cyA9IGAke2NoYWxsZW5nZS50cmltKCl9LCBgLnNwbGl0KCdcIiwgJykuZmlsdGVyKCh4KSA9PiB4KTtcbiAgICAgICAgY29uc3Qga2V5VmFsdWVQYWlycyA9IGNoYWxsZW5nZVBhcnRzLm1hcCgoa2V5VmFsdWUpID0+ICgoW2tleSwgdmFsdWVdKSA9PiAoeyBba2V5XTogdmFsdWUgfSkpKGtleVZhbHVlLnRyaW0oKS5zcGxpdCgnPVwiJykpKTtcbiAgICAgICAgLy8gS2V5LXZhbHVlIHBhaXJzIHRvIHBsYWluIG9iamVjdDpcbiAgICAgICAgcmV0dXJuIGtleVZhbHVlUGFpcnMucmVkdWNlKChhLCBiKSA9PiAoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBhKSwgYikpLCB7fSk7XG4gICAgfSk7XG59XG5leHBvcnRzLnBhcnNlQ0FFQ2hhbGxlbmdlID0gcGFyc2VDQUVDaGFsbGVuZ2U7XG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgYXMgYSBjYWxsYmFjayBmb3IgdGhlIGBiZWFyZXJUb2tlbkF1dGhlbnRpY2F0aW9uUG9saWN5YCBvZiBgQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZWAsIHRvIHN1cHBvcnQgQ0FFIGNoYWxsZW5nZXM6XG4gKiBbQ29udGludW91cyBBY2Nlc3MgRXZhbHVhdGlvbl0oaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vYXp1cmUvYWN0aXZlLWRpcmVjdG9yeS9jb25kaXRpb25hbC1hY2Nlc3MvY29uY2VwdC1jb250aW51b3VzLWFjY2Vzcy1ldmFsdWF0aW9uKS5cbiAqXG4gKiBDYWxsIHRoZSBgYmVhcmVyVG9rZW5BdXRoZW50aWNhdGlvblBvbGljeWAgd2l0aCB0aGUgZm9sbG93aW5nIG9wdGlvbnM6XG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3kgfSBmcm9tIFwiQGF6dXJlL2NvcmUtcmVzdC1waXBlbGluZVwiO1xuICogaW1wb3J0IHsgYXV0aG9yaXplUmVxdWVzdE9uQ2xhaW1DaGFsbGVuZ2UgfSBmcm9tIFwiQGF6dXJlL2NvcmUtY2xpZW50XCI7XG4gKlxuICogY29uc3QgYmVhcmVyVG9rZW5BdXRoZW50aWNhdGlvblBvbGljeSA9IGJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3koe1xuICogICBhdXRob3JpemVSZXF1ZXN0T25DaGFsbGVuZ2U6IGF1dGhvcml6ZVJlcXVlc3RPbkNsYWltQ2hhbGxlbmdlXG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIE9uY2UgcHJvdmlkZWQsIHRoZSBgYmVhcmVyVG9rZW5BdXRoZW50aWNhdGlvblBvbGljeWAgcG9saWN5IHdpbGwgaW50ZXJuYWxseSBoYW5kbGUgQ29udGludW91cyBBY2Nlc3MgRXZhbHVhdGlvbiAoQ0FFKSBjaGFsbGVuZ2VzLlxuICogV2hlbiBpdCBjYW4ndCBjb21wbGV0ZSBhIGNoYWxsZW5nZSBpdCB3aWxsIHJldHVybiB0aGUgNDAxICh1bmF1dGhvcml6ZWQpIHJlc3BvbnNlIGZyb20gQVJNLlxuICpcbiAqIEV4YW1wbGUgY2hhbGxlbmdlIHdpdGggY2xhaW1zOlxuICpcbiAqIGBgYFxuICogQmVhcmVyIGF1dGhvcml6YXRpb25fdXJpPVwiaHR0cHM6Ly9sb2dpbi53aW5kb3dzLXBwZS5uZXQvXCIsIGVycm9yPVwiaW52YWxpZF90b2tlblwiLFxuICogZXJyb3JfZGVzY3JpcHRpb249XCJVc2VyIHNlc3Npb24gaGFzIGJlZW4gcmV2b2tlZFwiLFxuICogY2xhaW1zPVwiZXlKaFkyTmxjM05mZEc5clpXNGlPbnNpYm1KbUlqcDdJbVZ6YzJWdWRHbGhiQ0k2ZEhKMVpTd2dJblpoYkhWbElqb2lNVFl3TXpjME1qZ3dNQ0o5ZlgwPVwiXG4gKiBgYGBcbiAqL1xuYXN5bmMgZnVuY3Rpb24gYXV0aG9yaXplUmVxdWVzdE9uQ2xhaW1DaGFsbGVuZ2Uob25DaGFsbGVuZ2VPcHRpb25zKSB7XG4gICAgY29uc3QgeyBzY29wZXMsIHJlc3BvbnNlIH0gPSBvbkNoYWxsZW5nZU9wdGlvbnM7XG4gICAgY29uc3QgbG9nZ2VyID0gb25DaGFsbGVuZ2VPcHRpb25zLmxvZ2dlciB8fCBsb2dfanNfMS5sb2dnZXI7XG4gICAgY29uc3QgY2hhbGxlbmdlID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoXCJXV1ctQXV0aGVudGljYXRlXCIpO1xuICAgIGlmICghY2hhbGxlbmdlKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKGBUaGUgV1dXLUF1dGhlbnRpY2F0ZSBoZWFkZXIgd2FzIG1pc3NpbmcuIEZhaWxlZCB0byBwZXJmb3JtIHRoZSBDb250aW51b3VzIEFjY2VzcyBFdmFsdWF0aW9uIGF1dGhlbnRpY2F0aW9uIGZsb3cuYCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgY2hhbGxlbmdlcyA9IHBhcnNlQ0FFQ2hhbGxlbmdlKGNoYWxsZW5nZSkgfHwgW107XG4gICAgY29uc3QgcGFyc2VkQ2hhbGxlbmdlID0gY2hhbGxlbmdlcy5maW5kKCh4KSA9PiB4LmNsYWltcyk7XG4gICAgaWYgKCFwYXJzZWRDaGFsbGVuZ2UpIHtcbiAgICAgICAgbG9nZ2VyLmluZm8oYFRoZSBXV1ctQXV0aGVudGljYXRlIGhlYWRlciB3YXMgbWlzc2luZyB0aGUgbmVjZXNzYXJ5IFwiY2xhaW1zXCIgdG8gcGVyZm9ybSB0aGUgQ29udGludW91cyBBY2Nlc3MgRXZhbHVhdGlvbiBhdXRoZW50aWNhdGlvbiBmbG93LmApO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gYXdhaXQgb25DaGFsbGVuZ2VPcHRpb25zLmdldEFjY2Vzc1Rva2VuKHBhcnNlZENoYWxsZW5nZS5zY29wZSA/IFtwYXJzZWRDaGFsbGVuZ2Uuc2NvcGVdIDogc2NvcGVzLCB7XG4gICAgICAgIGNsYWltczogKDAsIGJhc2U2NF9qc18xLmRlY29kZVN0cmluZ1RvU3RyaW5nKShwYXJzZWRDaGFsbGVuZ2UuY2xhaW1zKSxcbiAgICB9KTtcbiAgICBpZiAoIWFjY2Vzc1Rva2VuKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgb25DaGFsbGVuZ2VPcHRpb25zLnJlcXVlc3QuaGVhZGVycy5zZXQoXCJBdXRob3JpemF0aW9uXCIsIGBCZWFyZXIgJHthY2Nlc3NUb2tlbi50b2tlbn1gKTtcbiAgICByZXR1cm4gdHJ1ZTtcbn1cbmV4cG9ydHMuYXV0aG9yaXplUmVxdWVzdE9uQ2xhaW1DaGFsbGVuZ2UgPSBhdXRob3JpemVSZXF1ZXN0T25DbGFpbUNoYWxsZW5nZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWF1dGhvcml6ZVJlcXVlc3RPbkNsYWltQ2hhbGxlbmdlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYXV0aG9yaXplUmVxdWVzdE9uVGVuYW50Q2hhbGxlbmdlID0gdm9pZCAwO1xuLyoqXG4gKiBBIHNldCBvZiBjb25zdGFudHMgdXNlZCBpbnRlcm5hbGx5IHdoZW4gcHJvY2Vzc2luZyByZXF1ZXN0cy5cbiAqL1xuY29uc3QgQ29uc3RhbnRzID0ge1xuICAgIERlZmF1bHRTY29wZTogXCIvLmRlZmF1bHRcIixcbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIGNvbnN0YW50cyBmb3IgdXNlIHdpdGggSFRUUCBoZWFkZXJzLlxuICAgICAqL1xuICAgIEhlYWRlckNvbnN0YW50czoge1xuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIEF1dGhvcml6YXRpb24gaGVhZGVyLlxuICAgICAgICAgKi9cbiAgICAgICAgQVVUSE9SSVpBVElPTjogXCJhdXRob3JpemF0aW9uXCIsXG4gICAgfSxcbn07XG5mdW5jdGlvbiBpc1V1aWQodGV4dCkge1xuICAgIHJldHVybiAvXlswLTlhLWZBLUZdezh9XFxiLVswLTlhLWZBLUZdezR9XFxiLVswLTlhLWZBLUZdezR9XFxiLVswLTlhLWZBLUZdezR9XFxiLVswLTlhLWZBLUZdezEyfSQvLnRlc3QodGV4dCk7XG59XG4vKipcbiAqIERlZmluZXMgYSBjYWxsYmFjayB0byBoYW5kbGUgYXV0aCBjaGFsbGVuZ2UgZm9yIFN0b3JhZ2UgQVBJcy5cbiAqIFRoaXMgaW1wbGVtZW50cyB0aGUgYmVhcmVyIGNoYWxsZW5nZSBwcm9jZXNzIGRlc2NyaWJlZCBoZXJlOiBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvYXV0aG9yaXplLXdpdGgtYXp1cmUtYWN0aXZlLWRpcmVjdG9yeSNiZWFyZXItY2hhbGxlbmdlXG4gKiBIYW5kbGluZyBoYXMgc3BlY2lmaWMgZmVhdHVyZXMgZm9yIHN0b3JhZ2UgdGhhdCBkZXBhcnRzIHRvIHRoZSBnZW5lcmFsIEFBRCBjaGFsbGVuZ2UgZG9jcy5cbiAqKi9cbmNvbnN0IGF1dGhvcml6ZVJlcXVlc3RPblRlbmFudENoYWxsZW5nZSA9IGFzeW5jIChjaGFsbGVuZ2VPcHRpb25zKSA9PiB7XG4gICAgY29uc3QgcmVxdWVzdE9wdGlvbnMgPSByZXF1ZXN0VG9PcHRpb25zKGNoYWxsZW5nZU9wdGlvbnMucmVxdWVzdCk7XG4gICAgY29uc3QgY2hhbGxlbmdlID0gZ2V0Q2hhbGxlbmdlKGNoYWxsZW5nZU9wdGlvbnMucmVzcG9uc2UpO1xuICAgIGlmIChjaGFsbGVuZ2UpIHtcbiAgICAgICAgY29uc3QgY2hhbGxlbmdlSW5mbyA9IHBhcnNlQ2hhbGxlbmdlKGNoYWxsZW5nZSk7XG4gICAgICAgIGNvbnN0IGNoYWxsZW5nZVNjb3BlcyA9IGJ1aWxkU2NvcGVzKGNoYWxsZW5nZU9wdGlvbnMsIGNoYWxsZW5nZUluZm8pO1xuICAgICAgICBjb25zdCB0ZW5hbnRJZCA9IGV4dHJhY3RUZW5hbnRJZChjaGFsbGVuZ2VJbmZvKTtcbiAgICAgICAgaWYgKCF0ZW5hbnRJZCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gYXdhaXQgY2hhbGxlbmdlT3B0aW9ucy5nZXRBY2Nlc3NUb2tlbihjaGFsbGVuZ2VTY29wZXMsIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcmVxdWVzdE9wdGlvbnMpLCB7IHRlbmFudElkIH0pKTtcbiAgICAgICAgaWYgKCFhY2Nlc3NUb2tlbikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNoYWxsZW5nZU9wdGlvbnMucmVxdWVzdC5oZWFkZXJzLnNldChDb25zdGFudHMuSGVhZGVyQ29uc3RhbnRzLkFVVEhPUklaQVRJT04sIGBCZWFyZXIgJHthY2Nlc3NUb2tlbi50b2tlbn1gKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5leHBvcnRzLmF1dGhvcml6ZVJlcXVlc3RPblRlbmFudENoYWxsZW5nZSA9IGF1dGhvcml6ZVJlcXVlc3RPblRlbmFudENoYWxsZW5nZTtcbi8qKlxuICogRXh0cmFjdHMgdGhlIHRlbmFudCBpZCBmcm9tIHRoZSBjaGFsbGVuZ2UgaW5mb3JtYXRpb25cbiAqIFRoZSB0ZW5hbnQgaWQgaXMgY29udGFpbmVkIGluIHRoZSBhdXRob3JpemF0aW9uX3VyaSBhcyB0aGUgZmlyc3RcbiAqIHBhdGggcGFydC5cbiAqL1xuZnVuY3Rpb24gZXh0cmFjdFRlbmFudElkKGNoYWxsZW5nZUluZm8pIHtcbiAgICBjb25zdCBwYXJzZWRBdXRoVXJpID0gbmV3IFVSTChjaGFsbGVuZ2VJbmZvLmF1dGhvcml6YXRpb25fdXJpKTtcbiAgICBjb25zdCBwYXRoU2VnbWVudHMgPSBwYXJzZWRBdXRoVXJpLnBhdGhuYW1lLnNwbGl0KFwiL1wiKTtcbiAgICBjb25zdCB0ZW5hbnRJZCA9IHBhdGhTZWdtZW50c1sxXTtcbiAgICBpZiAodGVuYW50SWQgJiYgaXNVdWlkKHRlbmFudElkKSkge1xuICAgICAgICByZXR1cm4gdGVuYW50SWQ7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG4vKipcbiAqIEJ1aWxkcyB0aGUgYXV0aGVudGljYXRpb24gc2NvcGVzIGJhc2VkIG9uIHRoZSBpbmZvcm1hdGlvbiB0aGF0IGNvbWVzIGluIHRoZVxuICogY2hhbGxlbmdlIGluZm9ybWF0aW9uLiBTY29wZXMgdXJsIGlzIHByZXNlbnQgaW4gdGhlIHJlc291cmNlX2lkLCBpZiBpdCBpcyBlbXB0eVxuICogd2Uga2VlcCB1c2luZyB0aGUgb3JpZ2luYWwgc2NvcGVzLlxuICovXG5mdW5jdGlvbiBidWlsZFNjb3BlcyhjaGFsbGVuZ2VPcHRpb25zLCBjaGFsbGVuZ2VJbmZvKSB7XG4gICAgaWYgKCFjaGFsbGVuZ2VJbmZvLnJlc291cmNlX2lkKSB7XG4gICAgICAgIHJldHVybiBjaGFsbGVuZ2VPcHRpb25zLnNjb3BlcztcbiAgICB9XG4gICAgY29uc3QgY2hhbGxlbmdlU2NvcGVzID0gbmV3IFVSTChjaGFsbGVuZ2VJbmZvLnJlc291cmNlX2lkKTtcbiAgICBjaGFsbGVuZ2VTY29wZXMucGF0aG5hbWUgPSBDb25zdGFudHMuRGVmYXVsdFNjb3BlO1xuICAgIGxldCBzY29wZSA9IGNoYWxsZW5nZVNjb3Blcy50b1N0cmluZygpO1xuICAgIGlmIChzY29wZSA9PT0gXCJodHRwczovL2Rpc2suYXp1cmUuY29tLy5kZWZhdWx0XCIpIHtcbiAgICAgICAgLy8gdGhlIGV4dHJhIHNsYXNoIGlzIHJlcXVpcmVkIGJ5IHRoZSBzZXJ2aWNlXG4gICAgICAgIHNjb3BlID0gXCJodHRwczovL2Rpc2suYXp1cmUuY29tLy8uZGVmYXVsdFwiO1xuICAgIH1cbiAgICByZXR1cm4gW3Njb3BlXTtcbn1cbi8qKlxuICogV2Ugd2lsbCByZXRyaWV2ZSB0aGUgY2hhbGxlbmdlIG9ubHkgaWYgdGhlIHJlc3BvbnNlIHN0YXR1cyBjb2RlIHdhcyA0MDEsXG4gKiBhbmQgaWYgdGhlIHJlc3BvbnNlIGNvbnRhaW5lZCB0aGUgaGVhZGVyIFwiV1dXLUF1dGhlbnRpY2F0ZVwiIHdpdGggYSBub24tZW1wdHkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGdldENoYWxsZW5nZShyZXNwb25zZSkge1xuICAgIGNvbnN0IGNoYWxsZW5nZSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFwiV1dXLUF1dGhlbnRpY2F0ZVwiKTtcbiAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDEgJiYgY2hhbGxlbmdlKSB7XG4gICAgICAgIHJldHVybiBjaGFsbGVuZ2U7XG4gICAgfVxuICAgIHJldHVybjtcbn1cbi8qKlxuICogQ29udmVydHM6IGBCZWFyZXIgYT1cImJcIiBjPVwiZFwiYC5cbiAqIEludG86IGBbIHsgYTogJ2InLCBjOiAnZCcgfV1gLlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBwYXJzZUNoYWxsZW5nZShjaGFsbGVuZ2UpIHtcbiAgICBjb25zdCBiZWFyZXJDaGFsbGVuZ2UgPSBjaGFsbGVuZ2Uuc2xpY2UoXCJCZWFyZXIgXCIubGVuZ3RoKTtcbiAgICBjb25zdCBjaGFsbGVuZ2VQYXJ0cyA9IGAke2JlYXJlckNoYWxsZW5nZS50cmltKCl9IGAuc3BsaXQoXCIgXCIpLmZpbHRlcigoeCkgPT4geCk7XG4gICAgY29uc3Qga2V5VmFsdWVQYWlycyA9IGNoYWxsZW5nZVBhcnRzLm1hcCgoa2V5VmFsdWUpID0+ICgoW2tleSwgdmFsdWVdKSA9PiAoeyBba2V5XTogdmFsdWUgfSkpKGtleVZhbHVlLnRyaW0oKS5zcGxpdChcIj1cIikpKTtcbiAgICAvLyBLZXktdmFsdWUgcGFpcnMgdG8gcGxhaW4gb2JqZWN0OlxuICAgIHJldHVybiBrZXlWYWx1ZVBhaXJzLnJlZHVjZSgoYSwgYikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYSksIGIpKSwge30pO1xufVxuLyoqXG4gKiBFeHRyYWN0cyB0aGUgb3B0aW9ucyBmb3JtIGEgUGlwZWxpbmUgUmVxdWVzdCBmb3IgbGF0ZXIgcmUtdXNlXG4gKi9cbmZ1bmN0aW9uIHJlcXVlc3RUb09wdGlvbnMocmVxdWVzdCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGFib3J0U2lnbmFsOiByZXF1ZXN0LmFib3J0U2lnbmFsLFxuICAgICAgICByZXF1ZXN0T3B0aW9uczoge1xuICAgICAgICAgICAgdGltZW91dDogcmVxdWVzdC50aW1lb3V0LFxuICAgICAgICB9LFxuICAgICAgICB0cmFjaW5nT3B0aW9uczogcmVxdWVzdC50cmFjaW5nT3B0aW9ucyxcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXV0aG9yaXplUmVxdWVzdE9uVGVuYW50Q2hhbGxlbmdlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYXV0aG9yaXplUmVxdWVzdE9uVGVuYW50Q2hhbGxlbmdlID0gZXhwb3J0cy5hdXRob3JpemVSZXF1ZXN0T25DbGFpbUNoYWxsZW5nZSA9IGV4cG9ydHMuc2VyaWFsaXphdGlvblBvbGljeU5hbWUgPSBleHBvcnRzLnNlcmlhbGl6YXRpb25Qb2xpY3kgPSBleHBvcnRzLmRlc2VyaWFsaXphdGlvblBvbGljeU5hbWUgPSBleHBvcnRzLmRlc2VyaWFsaXphdGlvblBvbGljeSA9IGV4cG9ydHMuWE1MX0NIQVJLRVkgPSBleHBvcnRzLlhNTF9BVFRSS0VZID0gZXhwb3J0cy5jcmVhdGVDbGllbnRQaXBlbGluZSA9IGV4cG9ydHMuU2VydmljZUNsaWVudCA9IGV4cG9ydHMuTWFwcGVyVHlwZU5hbWVzID0gZXhwb3J0cy5jcmVhdGVTZXJpYWxpemVyID0gdm9pZCAwO1xudmFyIHNlcmlhbGl6ZXJfanNfMSA9IHJlcXVpcmUoXCIuL3NlcmlhbGl6ZXIuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTZXJpYWxpemVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZXJpYWxpemVyX2pzXzEuY3JlYXRlU2VyaWFsaXplcjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk1hcHBlclR5cGVOYW1lc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2VyaWFsaXplcl9qc18xLk1hcHBlclR5cGVOYW1lczsgfSB9KTtcbnZhciBzZXJ2aWNlQ2xpZW50X2pzXzEgPSByZXF1aXJlKFwiLi9zZXJ2aWNlQ2xpZW50LmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiU2VydmljZUNsaWVudFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2VydmljZUNsaWVudF9qc18xLlNlcnZpY2VDbGllbnQ7IH0gfSk7XG52YXIgcGlwZWxpbmVfanNfMSA9IHJlcXVpcmUoXCIuL3BpcGVsaW5lLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ2xpZW50UGlwZWxpbmVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBpcGVsaW5lX2pzXzEuY3JlYXRlQ2xpZW50UGlwZWxpbmU7IH0gfSk7XG52YXIgaW50ZXJmYWNlc19qc18xID0gcmVxdWlyZShcIi4vaW50ZXJmYWNlcy5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlhNTF9BVFRSS0VZXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBpbnRlcmZhY2VzX2pzXzEuWE1MX0FUVFJLRVk7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJYTUxfQ0hBUktFWVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gaW50ZXJmYWNlc19qc18xLlhNTF9DSEFSS0VZOyB9IH0pO1xudmFyIGRlc2VyaWFsaXphdGlvblBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vZGVzZXJpYWxpemF0aW9uUG9saWN5LmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVzZXJpYWxpemF0aW9uUG9saWN5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkZXNlcmlhbGl6YXRpb25Qb2xpY3lfanNfMS5kZXNlcmlhbGl6YXRpb25Qb2xpY3k7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZXNlcmlhbGl6YXRpb25Qb2xpY3lOYW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkZXNlcmlhbGl6YXRpb25Qb2xpY3lfanNfMS5kZXNlcmlhbGl6YXRpb25Qb2xpY3lOYW1lOyB9IH0pO1xudmFyIHNlcmlhbGl6YXRpb25Qb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3NlcmlhbGl6YXRpb25Qb2xpY3kuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzZXJpYWxpemF0aW9uUG9saWN5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZXJpYWxpemF0aW9uUG9saWN5X2pzXzEuc2VyaWFsaXphdGlvblBvbGljeTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNlcmlhbGl6YXRpb25Qb2xpY3lOYW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZXJpYWxpemF0aW9uUG9saWN5X2pzXzEuc2VyaWFsaXphdGlvblBvbGljeU5hbWU7IH0gfSk7XG52YXIgYXV0aG9yaXplUmVxdWVzdE9uQ2xhaW1DaGFsbGVuZ2VfanNfMSA9IHJlcXVpcmUoXCIuL2F1dGhvcml6ZVJlcXVlc3RPbkNsYWltQ2hhbGxlbmdlLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYXV0aG9yaXplUmVxdWVzdE9uQ2xhaW1DaGFsbGVuZ2VcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGF1dGhvcml6ZVJlcXVlc3RPbkNsYWltQ2hhbGxlbmdlX2pzXzEuYXV0aG9yaXplUmVxdWVzdE9uQ2xhaW1DaGFsbGVuZ2U7IH0gfSk7XG52YXIgYXV0aG9yaXplUmVxdWVzdE9uVGVuYW50Q2hhbGxlbmdlX2pzXzEgPSByZXF1aXJlKFwiLi9hdXRob3JpemVSZXF1ZXN0T25UZW5hbnRDaGFsbGVuZ2UuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhdXRob3JpemVSZXF1ZXN0T25UZW5hbnRDaGFsbGVuZ2VcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGF1dGhvcml6ZVJlcXVlc3RPblRlbmFudENoYWxsZW5nZV9qc18xLmF1dGhvcml6ZVJlcXVlc3RPblRlbmFudENoYWxsZW5nZTsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuSHR0cEhlYWRlcnMgPSBleHBvcnRzLnRvSHR0cEhlYWRlcnNMaWtlID0gZXhwb3J0cy50b1dlYlJlc291cmNlTGlrZSA9IGV4cG9ydHMudG9QaXBlbGluZVJlcXVlc3QgPSB2b2lkIDA7XG5jb25zdCBjb3JlX3Jlc3RfcGlwZWxpbmVfMSA9IHJlcXVpcmUoXCJAYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lXCIpO1xuLy8gV2UgdXNlIGEgY3VzdG9tIHN5bWJvbCB0byBjYWNoZSBhIHJlZmVyZW5jZSB0byB0aGUgb3JpZ2luYWwgcmVxdWVzdCB3aXRob3V0XG4vLyBleHBvc2luZyBpdCBvbiB0aGUgcHVibGljIGludGVyZmFjZS5cbmNvbnN0IG9yaWdpbmFsUmVxdWVzdFN5bWJvbCA9IFN5bWJvbChcIk9yaWdpbmFsIFBpcGVsaW5lUmVxdWVzdFwiKTtcbi8vIFN5bWJvbC5mb3IoKSB3aWxsIHJldHVybiB0aGUgc2FtZSBzeW1ib2wgaWYgaXQncyBhbHJlYWR5IGJlZW4gY3JlYXRlZFxuLy8gVGhpcyBwYXJ0aWN1bGFyIG9uZSBpcyB1c2VkIGluIGNvcmUtY2xpZW50IHRvIGhhbmRsZSB0aGUgY2FzZSBvZiB3aGVuIGEgcmVxdWVzdCBpc1xuLy8gY2xvbmVkIGJ1dCB3ZSBuZWVkIHRvIHJldHJpZXZlIHRoZSBPcGVyYXRpb25TcGVjIGFuZCBPcGVyYXRpb25Bcmd1bWVudHMgZnJvbSB0aGVcbi8vIG9yaWdpbmFsIHJlcXVlc3QuXG5jb25zdCBvcmlnaW5hbENsaWVudFJlcXVlc3RTeW1ib2wgPSBTeW1ib2wuZm9yKFwiQGF6dXJlL2NvcmUtY2xpZW50IG9yaWdpbmFsIHJlcXVlc3RcIik7XG5mdW5jdGlvbiB0b1BpcGVsaW5lUmVxdWVzdCh3ZWJSZXNvdXJjZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgY29tcGF0V2ViUmVzb3VyY2UgPSB3ZWJSZXNvdXJjZTtcbiAgICBjb25zdCByZXF1ZXN0ID0gY29tcGF0V2ViUmVzb3VyY2Vbb3JpZ2luYWxSZXF1ZXN0U3ltYm9sXTtcbiAgICBjb25zdCBoZWFkZXJzID0gKDAsIGNvcmVfcmVzdF9waXBlbGluZV8xLmNyZWF0ZUh0dHBIZWFkZXJzKSh3ZWJSZXNvdXJjZS5oZWFkZXJzLnRvSnNvbih7IHByZXNlcnZlQ2FzZTogdHJ1ZSB9KSk7XG4gICAgaWYgKHJlcXVlc3QpIHtcbiAgICAgICAgcmVxdWVzdC5oZWFkZXJzID0gaGVhZGVycztcbiAgICAgICAgcmV0dXJuIHJlcXVlc3Q7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjb25zdCBuZXdSZXF1ZXN0ID0gKDAsIGNvcmVfcmVzdF9waXBlbGluZV8xLmNyZWF0ZVBpcGVsaW5lUmVxdWVzdCkoe1xuICAgICAgICAgICAgdXJsOiB3ZWJSZXNvdXJjZS51cmwsXG4gICAgICAgICAgICBtZXRob2Q6IHdlYlJlc291cmNlLm1ldGhvZCxcbiAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHdlYlJlc291cmNlLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgICAgIHRpbWVvdXQ6IHdlYlJlc291cmNlLnRpbWVvdXQsXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHdlYlJlc291cmNlLnJlcXVlc3RJZCxcbiAgICAgICAgICAgIGFib3J0U2lnbmFsOiB3ZWJSZXNvdXJjZS5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgIGJvZHk6IHdlYlJlc291cmNlLmJvZHksXG4gICAgICAgICAgICBmb3JtRGF0YTogd2ViUmVzb3VyY2UuZm9ybURhdGEsXG4gICAgICAgICAgICBkaXNhYmxlS2VlcEFsaXZlOiAhIXdlYlJlc291cmNlLmtlZXBBbGl2ZSxcbiAgICAgICAgICAgIG9uRG93bmxvYWRQcm9ncmVzczogd2ViUmVzb3VyY2Uub25Eb3dubG9hZFByb2dyZXNzLFxuICAgICAgICAgICAgb25VcGxvYWRQcm9ncmVzczogd2ViUmVzb3VyY2Uub25VcGxvYWRQcm9ncmVzcyxcbiAgICAgICAgICAgIHByb3h5U2V0dGluZ3M6IHdlYlJlc291cmNlLnByb3h5U2V0dGluZ3MsXG4gICAgICAgICAgICBzdHJlYW1SZXNwb25zZVN0YXR1c0NvZGVzOiB3ZWJSZXNvdXJjZS5zdHJlYW1SZXNwb25zZVN0YXR1c0NvZGVzLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKG9wdGlvbnMub3JpZ2luYWxSZXF1ZXN0KSB7XG4gICAgICAgICAgICBuZXdSZXF1ZXN0W29yaWdpbmFsQ2xpZW50UmVxdWVzdFN5bWJvbF0gPVxuICAgICAgICAgICAgICAgIG9wdGlvbnMub3JpZ2luYWxSZXF1ZXN0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXdSZXF1ZXN0O1xuICAgIH1cbn1cbmV4cG9ydHMudG9QaXBlbGluZVJlcXVlc3QgPSB0b1BpcGVsaW5lUmVxdWVzdDtcbmZ1bmN0aW9uIHRvV2ViUmVzb3VyY2VMaWtlKHJlcXVlc3QsIG9wdGlvbnMpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3Qgb3JpZ2luYWxSZXF1ZXN0ID0gKF9hID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLm9yaWdpbmFsUmVxdWVzdCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogcmVxdWVzdDtcbiAgICBjb25zdCB3ZWJSZXNvdXJjZSA9IHtcbiAgICAgICAgdXJsOiByZXF1ZXN0LnVybCxcbiAgICAgICAgbWV0aG9kOiByZXF1ZXN0Lm1ldGhvZCxcbiAgICAgICAgaGVhZGVyczogdG9IdHRwSGVhZGVyc0xpa2UocmVxdWVzdC5oZWFkZXJzKSxcbiAgICAgICAgd2l0aENyZWRlbnRpYWxzOiByZXF1ZXN0LndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgdGltZW91dDogcmVxdWVzdC50aW1lb3V0LFxuICAgICAgICByZXF1ZXN0SWQ6IHJlcXVlc3QuaGVhZGVycy5nZXQoXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIpIHx8IHJlcXVlc3QucmVxdWVzdElkLFxuICAgICAgICBhYm9ydFNpZ25hbDogcmVxdWVzdC5hYm9ydFNpZ25hbCxcbiAgICAgICAgYm9keTogcmVxdWVzdC5ib2R5LFxuICAgICAgICBmb3JtRGF0YTogcmVxdWVzdC5mb3JtRGF0YSxcbiAgICAgICAga2VlcEFsaXZlOiAhIXJlcXVlc3QuZGlzYWJsZUtlZXBBbGl2ZSxcbiAgICAgICAgb25Eb3dubG9hZFByb2dyZXNzOiByZXF1ZXN0Lm9uRG93bmxvYWRQcm9ncmVzcyxcbiAgICAgICAgb25VcGxvYWRQcm9ncmVzczogcmVxdWVzdC5vblVwbG9hZFByb2dyZXNzLFxuICAgICAgICBwcm94eVNldHRpbmdzOiByZXF1ZXN0LnByb3h5U2V0dGluZ3MsXG4gICAgICAgIHN0cmVhbVJlc3BvbnNlU3RhdHVzQ29kZXM6IHJlcXVlc3Quc3RyZWFtUmVzcG9uc2VTdGF0dXNDb2RlcyxcbiAgICAgICAgY2xvbmUoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgY2xvbmUgYSBub24tcHJveGllZCBXZWJSZXNvdXJjZUxpa2VcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHByZXBhcmUoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJXZWJSZXNvdXJjZUxpa2UucHJlcGFyZSgpIGlzIG5vdCBzdXBwb3J0ZWQgYnkgQGF6dXJlL2NvcmUtaHR0cC1jb21wYXRcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHZhbGlkYXRlUmVxdWVzdFByb3BlcnRpZXMoKSB7XG4gICAgICAgICAgICAvKiogZG8gbm90aGluZyAqL1xuICAgICAgICB9LFxuICAgIH07XG4gICAgaWYgKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5jcmVhdGVQcm94eSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb3h5KHdlYlJlc291cmNlLCB7XG4gICAgICAgICAgICBnZXQodGFyZ2V0LCBwcm9wLCByZWNlaXZlcikge1xuICAgICAgICAgICAgICAgIGlmIChwcm9wID09PSBvcmlnaW5hbFJlcXVlc3RTeW1ib2wpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3Q7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHByb3AgPT09IFwiY2xvbmVcIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRvV2ViUmVzb3VyY2VMaWtlKHRvUGlwZWxpbmVSZXF1ZXN0KHdlYlJlc291cmNlLCB7IG9yaWdpbmFsUmVxdWVzdCB9KSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZVByb3h5OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsUmVxdWVzdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5nZXQodGFyZ2V0LCBwcm9wLCByZWNlaXZlcik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0KHRhcmdldCwgcHJvcCwgdmFsdWUsIHJlY2VpdmVyKSB7XG4gICAgICAgICAgICAgICAgaWYgKHByb3AgPT09IFwia2VlcEFsaXZlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5kaXNhYmxlS2VlcEFsaXZlID0gIXZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBwYXNzVGhyb3VnaFByb3BzID0gW1xuICAgICAgICAgICAgICAgICAgICBcInVybFwiLFxuICAgICAgICAgICAgICAgICAgICBcIm1ldGhvZFwiLFxuICAgICAgICAgICAgICAgICAgICBcIndpdGhDcmVkZW50aWFsc1wiLFxuICAgICAgICAgICAgICAgICAgICBcInRpbWVvdXRcIixcbiAgICAgICAgICAgICAgICAgICAgXCJyZXF1ZXN0SWRcIixcbiAgICAgICAgICAgICAgICAgICAgXCJhYm9ydFNpZ25hbFwiLFxuICAgICAgICAgICAgICAgICAgICBcImJvZHlcIixcbiAgICAgICAgICAgICAgICAgICAgXCJmb3JtRGF0YVwiLFxuICAgICAgICAgICAgICAgICAgICBcIm9uRG93bmxvYWRQcm9ncmVzc1wiLFxuICAgICAgICAgICAgICAgICAgICBcIm9uVXBsb2FkUHJvZ3Jlc3NcIixcbiAgICAgICAgICAgICAgICAgICAgXCJwcm94eVNldHRpbmdzXCIsXG4gICAgICAgICAgICAgICAgICAgIFwic3RyZWFtUmVzcG9uc2VTdGF0dXNDb2Rlc1wiLFxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwcm9wID09PSBcInN0cmluZ1wiICYmIHBhc3NUaHJvdWdoUHJvcHMuaW5jbHVkZXMocHJvcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFtwcm9wXSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5zZXQodGFyZ2V0LCBwcm9wLCB2YWx1ZSwgcmVjZWl2ZXIpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gd2ViUmVzb3VyY2U7XG4gICAgfVxufVxuZXhwb3J0cy50b1dlYlJlc291cmNlTGlrZSA9IHRvV2ViUmVzb3VyY2VMaWtlO1xuLyoqXG4gKiBDb252ZXJ0cyBIdHRwSGVhZGVycyBmcm9tIGNvcmUtcmVzdC1waXBlbGluZSB0byBsb29rIGxpa2VcbiAqIEh0dHBIZWFkZXJzIGZyb20gY29yZS1odHRwLlxuICogQHBhcmFtIGhlYWRlcnMgLSBIdHRwSGVhZGVycyBmcm9tIGNvcmUtcmVzdC1waXBlbGluZVxuICogQHJldHVybnMgSHR0cEhlYWRlcnMgYXMgdGhleSBsb29rZWQgaW4gY29yZS1odHRwXG4gKi9cbmZ1bmN0aW9uIHRvSHR0cEhlYWRlcnNMaWtlKGhlYWRlcnMpIHtcbiAgICByZXR1cm4gbmV3IEh0dHBIZWFkZXJzKGhlYWRlcnMudG9KU09OKHsgcHJlc2VydmVDYXNlOiB0cnVlIH0pKTtcbn1cbmV4cG9ydHMudG9IdHRwSGVhZGVyc0xpa2UgPSB0b0h0dHBIZWFkZXJzTGlrZTtcbi8qKlxuICogQSBjb2xsZWN0aW9uIG9mIEh0dHBIZWFkZXJzIHRoYXQgY2FuIGJlIHNlbnQgd2l0aCBhIEhUVFAgcmVxdWVzdC5cbiAqL1xuZnVuY3Rpb24gZ2V0SGVhZGVyS2V5KGhlYWRlck5hbWUpIHtcbiAgICByZXR1cm4gaGVhZGVyTmFtZS50b0xvd2VyQ2FzZSgpO1xufVxuLyoqXG4gKiBBIGNvbGxlY3Rpb24gb2YgSFRUUCBoZWFkZXIga2V5L3ZhbHVlIHBhaXJzLlxuICovXG5jbGFzcyBIdHRwSGVhZGVycyB7XG4gICAgY29uc3RydWN0b3IocmF3SGVhZGVycykge1xuICAgICAgICB0aGlzLl9oZWFkZXJzTWFwID0ge307XG4gICAgICAgIGlmIChyYXdIZWFkZXJzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGhlYWRlck5hbWUgaW4gcmF3SGVhZGVycykge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0KGhlYWRlck5hbWUsIHJhd0hlYWRlcnNbaGVhZGVyTmFtZV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldCBhIGhlYWRlciBpbiB0aGlzIGNvbGxlY3Rpb24gd2l0aCB0aGUgcHJvdmlkZWQgbmFtZSBhbmQgdmFsdWUuIFRoZSBuYW1lIGlzXG4gICAgICogY2FzZS1pbnNlbnNpdGl2ZS5cbiAgICAgKiBAcGFyYW0gaGVhZGVyTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBoZWFkZXIgdG8gc2V0LiBUaGlzIHZhbHVlIGlzIGNhc2UtaW5zZW5zaXRpdmUuXG4gICAgICogQHBhcmFtIGhlYWRlclZhbHVlIC0gVGhlIHZhbHVlIG9mIHRoZSBoZWFkZXIgdG8gc2V0LlxuICAgICAqL1xuICAgIHNldChoZWFkZXJOYW1lLCBoZWFkZXJWYWx1ZSkge1xuICAgICAgICB0aGlzLl9oZWFkZXJzTWFwW2dldEhlYWRlcktleShoZWFkZXJOYW1lKV0gPSB7XG4gICAgICAgICAgICBuYW1lOiBoZWFkZXJOYW1lLFxuICAgICAgICAgICAgdmFsdWU6IGhlYWRlclZhbHVlLnRvU3RyaW5nKCksXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgaGVhZGVyIHZhbHVlIGZvciB0aGUgcHJvdmlkZWQgaGVhZGVyIG5hbWUsIG9yIHVuZGVmaW5lZCBpZiBubyBoZWFkZXIgZXhpc3RzIGluIHRoaXNcbiAgICAgKiBjb2xsZWN0aW9uIHdpdGggdGhlIHByb3ZpZGVkIG5hbWUuXG4gICAgICogQHBhcmFtIGhlYWRlck5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgaGVhZGVyLlxuICAgICAqL1xuICAgIGdldChoZWFkZXJOYW1lKSB7XG4gICAgICAgIGNvbnN0IGhlYWRlciA9IHRoaXMuX2hlYWRlcnNNYXBbZ2V0SGVhZGVyS2V5KGhlYWRlck5hbWUpXTtcbiAgICAgICAgcmV0dXJuICFoZWFkZXIgPyB1bmRlZmluZWQgOiBoZWFkZXIudmFsdWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCB3aGV0aGVyIG9yIG5vdCB0aGlzIGhlYWRlciBjb2xsZWN0aW9uIGNvbnRhaW5zIGEgaGVhZGVyIGVudHJ5IGZvciB0aGUgcHJvdmlkZWQgaGVhZGVyIG5hbWUuXG4gICAgICovXG4gICAgY29udGFpbnMoaGVhZGVyTmFtZSkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9oZWFkZXJzTWFwW2dldEhlYWRlcktleShoZWFkZXJOYW1lKV07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlbW92ZSB0aGUgaGVhZGVyIHdpdGggdGhlIHByb3ZpZGVkIGhlYWRlck5hbWUuIFJldHVybiB3aGV0aGVyIG9yIG5vdCB0aGUgaGVhZGVyIGV4aXN0ZWQgYW5kXG4gICAgICogd2FzIHJlbW92ZWQuXG4gICAgICogQHBhcmFtIGhlYWRlck5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgaGVhZGVyIHRvIHJlbW92ZS5cbiAgICAgKi9cbiAgICByZW1vdmUoaGVhZGVyTmFtZSkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmNvbnRhaW5zKGhlYWRlck5hbWUpO1xuICAgICAgICBkZWxldGUgdGhpcy5faGVhZGVyc01hcFtnZXRIZWFkZXJLZXkoaGVhZGVyTmFtZSldO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGhlYWRlcnMgdGhhdCBhcmUgY29udGFpbmVkIHRoaXMgY29sbGVjdGlvbiBhcyBhbiBvYmplY3QuXG4gICAgICovXG4gICAgcmF3SGVhZGVycygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9Kc29uKHsgcHJlc2VydmVDYXNlOiB0cnVlIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGhlYWRlcnMgdGhhdCBhcmUgY29udGFpbmVkIGluIHRoaXMgY29sbGVjdGlvbiBhcyBhbiBhcnJheS5cbiAgICAgKi9cbiAgICBoZWFkZXJzQXJyYXkoKSB7XG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBoZWFkZXJLZXkgaW4gdGhpcy5faGVhZGVyc01hcCkge1xuICAgICAgICAgICAgaGVhZGVycy5wdXNoKHRoaXMuX2hlYWRlcnNNYXBbaGVhZGVyS2V5XSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGhlYWRlcnM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgaGVhZGVyIG5hbWVzIHRoYXQgYXJlIGNvbnRhaW5lZCBpbiB0aGlzIGNvbGxlY3Rpb24uXG4gICAgICovXG4gICAgaGVhZGVyTmFtZXMoKSB7XG4gICAgICAgIGNvbnN0IGhlYWRlck5hbWVzID0gW107XG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNBcnJheSgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGhlYWRlck5hbWVzLnB1c2goaGVhZGVyc1tpXS5uYW1lKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGVhZGVyTmFtZXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgaGVhZGVyIHZhbHVlcyB0aGF0IGFyZSBjb250YWluZWQgaW4gdGhpcyBjb2xsZWN0aW9uLlxuICAgICAqL1xuICAgIGhlYWRlclZhbHVlcygpIHtcbiAgICAgICAgY29uc3QgaGVhZGVyVmFsdWVzID0gW107XG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNBcnJheSgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGhlYWRlclZhbHVlcy5wdXNoKGhlYWRlcnNbaV0udmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoZWFkZXJWYWx1ZXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgSlNPTiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBIVFRQIGhlYWRlciBjb2xsZWN0aW9uLlxuICAgICAqL1xuICAgIHRvSnNvbihvcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgICAgIGlmIChvcHRpb25zLnByZXNlcnZlQ2FzZSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBoZWFkZXJLZXkgaW4gdGhpcy5faGVhZGVyc01hcCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRlciA9IHRoaXMuX2hlYWRlcnNNYXBbaGVhZGVyS2V5XTtcbiAgICAgICAgICAgICAgICByZXN1bHRbaGVhZGVyLm5hbWVdID0gaGVhZGVyLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZm9yIChjb25zdCBoZWFkZXJLZXkgaW4gdGhpcy5faGVhZGVyc01hcCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRlciA9IHRoaXMuX2hlYWRlcnNNYXBbaGVhZGVyS2V5XTtcbiAgICAgICAgICAgICAgICByZXN1bHRbZ2V0SGVhZGVyS2V5KGhlYWRlci5uYW1lKV0gPSBoZWFkZXIudmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBIVFRQIGhlYWRlciBjb2xsZWN0aW9uLlxuICAgICAqL1xuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy50b0pzb24oeyBwcmVzZXJ2ZUNhc2U6IHRydWUgfSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBkZWVwIGNsb25lL2NvcHkgb2YgdGhpcyBIdHRwSGVhZGVycyBjb2xsZWN0aW9uLlxuICAgICAqL1xuICAgIGNsb25lKCkge1xuICAgICAgICBjb25zdCByZXN1bHRQcmVzZXJ2aW5nQ2FzaW5nID0ge307XG4gICAgICAgIGZvciAoY29uc3QgaGVhZGVyS2V5IGluIHRoaXMuX2hlYWRlcnNNYXApIHtcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlciA9IHRoaXMuX2hlYWRlcnNNYXBbaGVhZGVyS2V5XTtcbiAgICAgICAgICAgIHJlc3VsdFByZXNlcnZpbmdDYXNpbmdbaGVhZGVyLm5hbWVdID0gaGVhZGVyLnZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgSHR0cEhlYWRlcnMocmVzdWx0UHJlc2VydmluZ0Nhc2luZyk7XG4gICAgfVxufVxuZXhwb3J0cy5IdHRwSGVhZGVycyA9IEh0dHBIZWFkZXJzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRvUGlwZWxpbmVSZXNwb25zZSA9IGV4cG9ydHMudG9Db21wYXRSZXNwb25zZSA9IHZvaWQgMDtcbmNvbnN0IGNvcmVfcmVzdF9waXBlbGluZV8xID0gcmVxdWlyZShcIkBhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmVcIik7XG5jb25zdCB1dGlsX2pzXzEgPSByZXF1aXJlKFwiLi91dGlsLmpzXCIpO1xuY29uc3Qgb3JpZ2luYWxSZXNwb25zZSA9IFN5bWJvbChcIk9yaWdpbmFsIEZ1bGxPcGVyYXRpb25SZXNwb25zZVwiKTtcbi8qKlxuICogQSBoZWxwZXIgdG8gY29udmVydCByZXNwb25zZSBvYmplY3RzIGZyb20gdGhlIG5ldyBwaXBlbGluZSBiYWNrIHRvIHRoZSBvbGQgb25lLlxuICogQHBhcmFtIHJlc3BvbnNlIC0gQSByZXNwb25zZSBvYmplY3QgZnJvbSBjb3JlLWNsaWVudC5cbiAqIEByZXR1cm5zIEEgcmVzcG9uc2UgY29tcGF0aWJsZSB3aXRoIGBIdHRwT3BlcmF0aW9uUmVzcG9uc2VgIGZyb20gY29yZS1odHRwLlxuICovXG5mdW5jdGlvbiB0b0NvbXBhdFJlc3BvbnNlKHJlc3BvbnNlLCBvcHRpb25zKSB7XG4gICAgbGV0IHJlcXVlc3QgPSAoMCwgdXRpbF9qc18xLnRvV2ViUmVzb3VyY2VMaWtlKShyZXNwb25zZS5yZXF1ZXN0KTtcbiAgICBsZXQgaGVhZGVycyA9ICgwLCB1dGlsX2pzXzEudG9IdHRwSGVhZGVyc0xpa2UpKHJlc3BvbnNlLmhlYWRlcnMpO1xuICAgIGlmIChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY3JlYXRlUHJveHkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm94eShyZXNwb25zZSwge1xuICAgICAgICAgICAgZ2V0KHRhcmdldCwgcHJvcCwgcmVjZWl2ZXIpIHtcbiAgICAgICAgICAgICAgICBpZiAocHJvcCA9PT0gXCJoZWFkZXJzXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhlYWRlcnM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHByb3AgPT09IFwicmVxdWVzdFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXF1ZXN0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChwcm9wID09PSBvcmlnaW5hbFJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0KHRhcmdldCwgcHJvcCwgcmVjZWl2ZXIpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldCh0YXJnZXQsIHByb3AsIHZhbHVlLCByZWNlaXZlcikge1xuICAgICAgICAgICAgICAgIGlmIChwcm9wID09PSBcImhlYWRlcnNcIikge1xuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHByb3AgPT09IFwicmVxdWVzdFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3QgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3Quc2V0KHRhcmdldCwgcHJvcCwgdmFsdWUsIHJlY2VpdmVyKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcmVzcG9uc2UpLCB7IHJlcXVlc3QsXG4gICAgICAgICAgICBoZWFkZXJzIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMudG9Db21wYXRSZXNwb25zZSA9IHRvQ29tcGF0UmVzcG9uc2U7XG4vKipcbiAqIEEgaGVscGVyIHRvIGNvbnZlcnQgYmFjayB0byBhIFBpcGVsaW5lUmVzcG9uc2VcbiAqIEBwYXJhbSBjb21wYXRSZXNwb25zZSAtIEEgcmVzcG9uc2UgY29tcGF0aWJsZSB3aXRoIGBIdHRwT3BlcmF0aW9uUmVzcG9uc2VgIGZyb20gY29yZS1odHRwLlxuICovXG5mdW5jdGlvbiB0b1BpcGVsaW5lUmVzcG9uc2UoY29tcGF0UmVzcG9uc2UpIHtcbiAgICBjb25zdCBleHRlbmRlZENvbXBhdFJlc3BvbnNlID0gY29tcGF0UmVzcG9uc2U7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBleHRlbmRlZENvbXBhdFJlc3BvbnNlW29yaWdpbmFsUmVzcG9uc2VdO1xuICAgIGNvbnN0IGhlYWRlcnMgPSAoMCwgY29yZV9yZXN0X3BpcGVsaW5lXzEuY3JlYXRlSHR0cEhlYWRlcnMpKGNvbXBhdFJlc3BvbnNlLmhlYWRlcnMudG9Kc29uKHsgcHJlc2VydmVDYXNlOiB0cnVlIH0pKTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgcmVzcG9uc2UuaGVhZGVycyA9IGhlYWRlcnM7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGNvbXBhdFJlc3BvbnNlKSwgeyBoZWFkZXJzLCByZXF1ZXN0OiAoMCwgdXRpbF9qc18xLnRvUGlwZWxpbmVSZXF1ZXN0KShjb21wYXRSZXNwb25zZS5yZXF1ZXN0KSB9KTtcbiAgICB9XG59XG5leHBvcnRzLnRvUGlwZWxpbmVSZXNwb25zZSA9IHRvUGlwZWxpbmVSZXNwb25zZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlc3BvbnNlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuRXh0ZW5kZWRTZXJ2aWNlQ2xpZW50ID0gdm9pZCAwO1xuY29uc3QgZGlzYWJsZUtlZXBBbGl2ZVBvbGljeV9qc18xID0gcmVxdWlyZShcIi4vcG9saWNpZXMvZGlzYWJsZUtlZXBBbGl2ZVBvbGljeS5qc1wiKTtcbmNvbnN0IGNvcmVfcmVzdF9waXBlbGluZV8xID0gcmVxdWlyZShcIkBhenVyZS9jb3JlLXJlc3QtcGlwZWxpbmVcIik7XG5jb25zdCBjb3JlX2NsaWVudF8xID0gcmVxdWlyZShcIkBhenVyZS9jb3JlLWNsaWVudFwiKTtcbmNvbnN0IHJlc3BvbnNlX2pzXzEgPSByZXF1aXJlKFwiLi9yZXNwb25zZS5qc1wiKTtcbi8qKlxuICogQ2xpZW50IHRvIHByb3ZpZGUgY29tcGF0YWJpbGl0eSBiZXR3ZWVuIGNvcmUgVjEgJiBWMi5cbiAqL1xuY2xhc3MgRXh0ZW5kZWRTZXJ2aWNlQ2xpZW50IGV4dGVuZHMgY29yZV9jbGllbnRfMS5TZXJ2aWNlQ2xpZW50IHtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHN1cGVyKG9wdGlvbnMpO1xuICAgICAgICBpZiAoKChfYSA9IG9wdGlvbnMua2VlcEFsaXZlT3B0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmVuYWJsZSkgPT09IGZhbHNlICYmXG4gICAgICAgICAgICAhKDAsIGRpc2FibGVLZWVwQWxpdmVQb2xpY3lfanNfMS5waXBlbGluZUNvbnRhaW5zRGlzYWJsZUtlZXBBbGl2ZVBvbGljeSkodGhpcy5waXBlbGluZSkpIHtcbiAgICAgICAgICAgIHRoaXMucGlwZWxpbmUuYWRkUG9saWN5KCgwLCBkaXNhYmxlS2VlcEFsaXZlUG9saWN5X2pzXzEuY3JlYXRlRGlzYWJsZUtlZXBBbGl2ZVBvbGljeSkoKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCgoX2IgPSBvcHRpb25zLnJlZGlyZWN0T3B0aW9ucykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmhhbmRsZVJlZGlyZWN0cykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICB0aGlzLnBpcGVsaW5lLnJlbW92ZVBvbGljeSh7XG4gICAgICAgICAgICAgICAgbmFtZTogY29yZV9yZXN0X3BpcGVsaW5lXzEucmVkaXJlY3RQb2xpY3lOYW1lLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29tcGF0aWJsZSBzZW5kIG9wZXJhdGlvbiByZXF1ZXN0IGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wZXJhdGlvbkFyZ3VtZW50cyAtIE9wZXJhdGlvbiBhcmd1bWVudHNcbiAgICAgKiBAcGFyYW0gb3BlcmF0aW9uU3BlYyAtIE9wZXJhdGlvbiBTcGVjXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBhc3luYyBzZW5kT3BlcmF0aW9uUmVxdWVzdChvcGVyYXRpb25Bcmd1bWVudHMsIG9wZXJhdGlvblNwZWMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCB1c2VyUHJvdmlkZWRDYWxsQmFjayA9IChfYSA9IG9wZXJhdGlvbkFyZ3VtZW50cyA9PT0gbnVsbCB8fCBvcGVyYXRpb25Bcmd1bWVudHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wZXJhdGlvbkFyZ3VtZW50cy5vcHRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub25SZXNwb25zZTtcbiAgICAgICAgbGV0IGxhc3RSZXNwb25zZTtcbiAgICAgICAgZnVuY3Rpb24gb25SZXNwb25zZShyYXdSZXNwb25zZSwgZmxhdFJlc3BvbnNlLCBlcnJvcikge1xuICAgICAgICAgICAgbGFzdFJlc3BvbnNlID0gcmF3UmVzcG9uc2U7XG4gICAgICAgICAgICBpZiAodXNlclByb3ZpZGVkQ2FsbEJhY2spIHtcbiAgICAgICAgICAgICAgICB1c2VyUHJvdmlkZWRDYWxsQmFjayhyYXdSZXNwb25zZSwgZmxhdFJlc3BvbnNlLCBlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgb3BlcmF0aW9uQXJndW1lbnRzLm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wZXJhdGlvbkFyZ3VtZW50cy5vcHRpb25zKSwgeyBvblJlc3BvbnNlIH0pO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzdXBlci5zZW5kT3BlcmF0aW9uUmVxdWVzdChvcGVyYXRpb25Bcmd1bWVudHMsIG9wZXJhdGlvblNwZWMpO1xuICAgICAgICBpZiAobGFzdFJlc3BvbnNlKSB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVzdWx0LCBcIl9yZXNwb25zZVwiLCB7XG4gICAgICAgICAgICAgICAgdmFsdWU6ICgwLCByZXNwb25zZV9qc18xLnRvQ29tcGF0UmVzcG9uc2UpKGxhc3RSZXNwb25zZSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbmV4cG9ydHMuRXh0ZW5kZWRTZXJ2aWNlQ2xpZW50ID0gRXh0ZW5kZWRTZXJ2aWNlQ2xpZW50O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXh0ZW5kZWRDbGllbnQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jcmVhdGVSZXF1ZXN0UG9saWN5RmFjdG9yeVBvbGljeSA9IGV4cG9ydHMucmVxdWVzdFBvbGljeUZhY3RvcnlQb2xpY3lOYW1lID0gZXhwb3J0cy5IdHRwUGlwZWxpbmVMb2dMZXZlbCA9IHZvaWQgMDtcbmNvbnN0IHV0aWxfanNfMSA9IHJlcXVpcmUoXCIuLi91dGlsLmpzXCIpO1xuY29uc3QgcmVzcG9uc2VfanNfMSA9IHJlcXVpcmUoXCIuLi9yZXNwb25zZS5qc1wiKTtcbi8qKlxuICogQW4gZW51bSBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFJlcXVlc3RQb2xpY3lcbiAqL1xudmFyIEh0dHBQaXBlbGluZUxvZ0xldmVsO1xuKGZ1bmN0aW9uIChIdHRwUGlwZWxpbmVMb2dMZXZlbCkge1xuICAgIEh0dHBQaXBlbGluZUxvZ0xldmVsW0h0dHBQaXBlbGluZUxvZ0xldmVsW1wiRVJST1JcIl0gPSAxXSA9IFwiRVJST1JcIjtcbiAgICBIdHRwUGlwZWxpbmVMb2dMZXZlbFtIdHRwUGlwZWxpbmVMb2dMZXZlbFtcIklORk9cIl0gPSAzXSA9IFwiSU5GT1wiO1xuICAgIEh0dHBQaXBlbGluZUxvZ0xldmVsW0h0dHBQaXBlbGluZUxvZ0xldmVsW1wiT0ZGXCJdID0gMF0gPSBcIk9GRlwiO1xuICAgIEh0dHBQaXBlbGluZUxvZ0xldmVsW0h0dHBQaXBlbGluZUxvZ0xldmVsW1wiV0FSTklOR1wiXSA9IDJdID0gXCJXQVJOSU5HXCI7XG59KShIdHRwUGlwZWxpbmVMb2dMZXZlbCB8fCAoZXhwb3J0cy5IdHRwUGlwZWxpbmVMb2dMZXZlbCA9IEh0dHBQaXBlbGluZUxvZ0xldmVsID0ge30pKTtcbmNvbnN0IG1vY2tSZXF1ZXN0UG9saWN5T3B0aW9ucyA9IHtcbiAgICBsb2coX2xvZ0xldmVsLCBfbWVzc2FnZSkge1xuICAgICAgICAvKiBkbyBub3RoaW5nICovXG4gICAgfSxcbiAgICBzaG91bGRMb2coX2xvZ0xldmVsKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxufTtcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIFJlcXVlc3RQb2xpY3lGYWN0b3J5UG9saWN5XG4gKi9cbmV4cG9ydHMucmVxdWVzdFBvbGljeUZhY3RvcnlQb2xpY3lOYW1lID0gXCJSZXF1ZXN0UG9saWN5RmFjdG9yeVBvbGljeVwiO1xuLyoqXG4gKiBBIHBvbGljeSB0aGF0IHdyYXBzIHBvbGljaWVzIHdyaXR0ZW4gZm9yIGNvcmUtaHR0cC5cbiAqIEBwYXJhbSBmYWN0b3JpZXMgLSBBbiBhcnJheSBvZiBgUmVxdWVzdFBvbGljeUZhY3RvcnlgIG9iamVjdHMgZnJvbSBhIGNvcmUtaHR0cCBwaXBlbGluZVxuICovXG5mdW5jdGlvbiBjcmVhdGVSZXF1ZXN0UG9saWN5RmFjdG9yeVBvbGljeShmYWN0b3JpZXMpIHtcbiAgICBjb25zdCBvcmRlcmVkRmFjdG9yaWVzID0gZmFjdG9yaWVzLnNsaWNlKCkucmV2ZXJzZSgpO1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGV4cG9ydHMucmVxdWVzdFBvbGljeUZhY3RvcnlQb2xpY3lOYW1lLFxuICAgICAgICBhc3luYyBzZW5kUmVxdWVzdChyZXF1ZXN0LCBuZXh0KSB7XG4gICAgICAgICAgICBsZXQgaHR0cFBpcGVsaW5lID0ge1xuICAgICAgICAgICAgICAgIGFzeW5jIHNlbmRSZXF1ZXN0KGh0dHBSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgbmV4dCgoMCwgdXRpbF9qc18xLnRvUGlwZWxpbmVSZXF1ZXN0KShodHRwUmVxdWVzdCkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIHJlc3BvbnNlX2pzXzEudG9Db21wYXRSZXNwb25zZSkocmVzcG9uc2UsIHsgY3JlYXRlUHJveHk6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZhY3Rvcnkgb2Ygb3JkZXJlZEZhY3Rvcmllcykge1xuICAgICAgICAgICAgICAgIGh0dHBQaXBlbGluZSA9IGZhY3RvcnkuY3JlYXRlKGh0dHBQaXBlbGluZSwgbW9ja1JlcXVlc3RQb2xpY3lPcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHdlYlJlc291cmNlTGlrZSA9ICgwLCB1dGlsX2pzXzEudG9XZWJSZXNvdXJjZUxpa2UpKHJlcXVlc3QsIHsgY3JlYXRlUHJveHk6IHRydWUgfSk7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGh0dHBQaXBlbGluZS5zZW5kUmVxdWVzdCh3ZWJSZXNvdXJjZUxpa2UpO1xuICAgICAgICAgICAgcmV0dXJuICgwLCByZXNwb25zZV9qc18xLnRvUGlwZWxpbmVSZXNwb25zZSkocmVzcG9uc2UpO1xuICAgICAgICB9LFxuICAgIH07XG59XG5leHBvcnRzLmNyZWF0ZVJlcXVlc3RQb2xpY3lGYWN0b3J5UG9saWN5ID0gY3JlYXRlUmVxdWVzdFBvbGljeUZhY3RvcnlQb2xpY3k7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZXF1ZXN0UG9saWN5RmFjdG9yeVBvbGljeS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNvbnZlcnRIdHRwQ2xpZW50ID0gdm9pZCAwO1xuY29uc3QgcmVzcG9uc2VfanNfMSA9IHJlcXVpcmUoXCIuL3Jlc3BvbnNlLmpzXCIpO1xuY29uc3QgdXRpbF9qc18xID0gcmVxdWlyZShcIi4vdXRpbC5qc1wiKTtcbi8qKlxuICogQ29udmVydHMgYSBSZXF1ZXN0UG9saWN5IGJhc2VkIEh0dHBDbGllbnQgdG8gYSBQaXBlbGluZVJlcXVlc3QgYmFzZWQgSHR0cENsaWVudC5cbiAqIEBwYXJhbSByZXF1ZXN0UG9saWN5Q2xpZW50IC0gQSBIdHRwQ2xpZW50IGNvbXBhdGlibGUgd2l0aCBjb3JlLWh0dHBcbiAqIEByZXR1cm5zIEEgSHR0cENsaWVudCBjb21wYXRpYmxlIHdpdGggY29yZS1yZXN0LXBpcGVsaW5lXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRIdHRwQ2xpZW50KHJlcXVlc3RQb2xpY3lDbGllbnQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBzZW5kUmVxdWVzdDogYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdFBvbGljeUNsaWVudC5zZW5kUmVxdWVzdCgoMCwgdXRpbF9qc18xLnRvV2ViUmVzb3VyY2VMaWtlKShyZXF1ZXN0LCB7IGNyZWF0ZVByb3h5OiB0cnVlIH0pKTtcbiAgICAgICAgICAgIHJldHVybiAoMCwgcmVzcG9uc2VfanNfMS50b1BpcGVsaW5lUmVzcG9uc2UpKHJlc3BvbnNlKTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuZXhwb3J0cy5jb252ZXJ0SHR0cENsaWVudCA9IGNvbnZlcnRIdHRwQ2xpZW50O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aHR0cENsaWVudEFkYXB0ZXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50b0h0dHBIZWFkZXJzTGlrZSA9IGV4cG9ydHMuY29udmVydEh0dHBDbGllbnQgPSBleHBvcnRzLmRpc2FibGVLZWVwQWxpdmVQb2xpY3lOYW1lID0gZXhwb3J0cy5IdHRwUGlwZWxpbmVMb2dMZXZlbCA9IGV4cG9ydHMuY3JlYXRlUmVxdWVzdFBvbGljeUZhY3RvcnlQb2xpY3kgPSBleHBvcnRzLnJlcXVlc3RQb2xpY3lGYWN0b3J5UG9saWN5TmFtZSA9IGV4cG9ydHMuRXh0ZW5kZWRTZXJ2aWNlQ2xpZW50ID0gdm9pZCAwO1xuLyoqXG4gKiBBIFNoaW0gTGlicmFyeSB0aGF0IHByb3ZpZGVzIGNvbXBhdGliaWxpdHkgYmV0d2VlbiBDb3JlIFYxICYgVjIgUGFja2FnZXMuXG4gKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uXG4gKi9cbnZhciBleHRlbmRlZENsaWVudF9qc18xID0gcmVxdWlyZShcIi4vZXh0ZW5kZWRDbGllbnQuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJFeHRlbmRlZFNlcnZpY2VDbGllbnRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGV4dGVuZGVkQ2xpZW50X2pzXzEuRXh0ZW5kZWRTZXJ2aWNlQ2xpZW50OyB9IH0pO1xudmFyIHJlcXVlc3RQb2xpY3lGYWN0b3J5UG9saWN5X2pzXzEgPSByZXF1aXJlKFwiLi9wb2xpY2llcy9yZXF1ZXN0UG9saWN5RmFjdG9yeVBvbGljeS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlcXVlc3RQb2xpY3lGYWN0b3J5UG9saWN5TmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVxdWVzdFBvbGljeUZhY3RvcnlQb2xpY3lfanNfMS5yZXF1ZXN0UG9saWN5RmFjdG9yeVBvbGljeU5hbWU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVSZXF1ZXN0UG9saWN5RmFjdG9yeVBvbGljeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVxdWVzdFBvbGljeUZhY3RvcnlQb2xpY3lfanNfMS5jcmVhdGVSZXF1ZXN0UG9saWN5RmFjdG9yeVBvbGljeTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkh0dHBQaXBlbGluZUxvZ0xldmVsXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZXF1ZXN0UG9saWN5RmFjdG9yeVBvbGljeV9qc18xLkh0dHBQaXBlbGluZUxvZ0xldmVsOyB9IH0pO1xudmFyIGRpc2FibGVLZWVwQWxpdmVQb2xpY3lfanNfMSA9IHJlcXVpcmUoXCIuL3BvbGljaWVzL2Rpc2FibGVLZWVwQWxpdmVQb2xpY3kuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkaXNhYmxlS2VlcEFsaXZlUG9saWN5TmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZGlzYWJsZUtlZXBBbGl2ZVBvbGljeV9qc18xLmRpc2FibGVLZWVwQWxpdmVQb2xpY3lOYW1lOyB9IH0pO1xudmFyIGh0dHBDbGllbnRBZGFwdGVyX2pzXzEgPSByZXF1aXJlKFwiLi9odHRwQ2xpZW50QWRhcHRlci5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNvbnZlcnRIdHRwQ2xpZW50XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBodHRwQ2xpZW50QWRhcHRlcl9qc18xLmNvbnZlcnRIdHRwQ2xpZW50OyB9IH0pO1xudmFyIHV0aWxfanNfMSA9IHJlcXVpcmUoXCIuL3V0aWwuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0b0h0dHBIZWFkZXJzTGlrZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdXRpbF9qc18xLnRvSHR0cEhlYWRlcnNMaWtlOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICIndXNlIHN0cmljdCc7XG5cbmNvbnN0IG5hbWVTdGFydENoYXIgPSAnOkEtWmEtel9cXFxcdTAwQzAtXFxcXHUwMEQ2XFxcXHUwMEQ4LVxcXFx1MDBGNlxcXFx1MDBGOC1cXFxcdTAyRkZcXFxcdTAzNzAtXFxcXHUwMzdEXFxcXHUwMzdGLVxcXFx1MUZGRlxcXFx1MjAwQy1cXFxcdTIwMERcXFxcdTIwNzAtXFxcXHUyMThGXFxcXHUyQzAwLVxcXFx1MkZFRlxcXFx1MzAwMS1cXFxcdUQ3RkZcXFxcdUY5MDAtXFxcXHVGRENGXFxcXHVGREYwLVxcXFx1RkZGRCc7XG5jb25zdCBuYW1lQ2hhciA9IG5hbWVTdGFydENoYXIgKyAnXFxcXC0uXFxcXGRcXFxcdTAwQjdcXFxcdTAzMDAtXFxcXHUwMzZGXFxcXHUyMDNGLVxcXFx1MjA0MCc7XG5jb25zdCBuYW1lUmVnZXhwID0gJ1snICsgbmFtZVN0YXJ0Q2hhciArICddWycgKyBuYW1lQ2hhciArICddKidcbmNvbnN0IHJlZ2V4TmFtZSA9IG5ldyBSZWdFeHAoJ14nICsgbmFtZVJlZ2V4cCArICckJyk7XG5cbmNvbnN0IGdldEFsbE1hdGNoZXMgPSBmdW5jdGlvbihzdHJpbmcsIHJlZ2V4KSB7XG4gIGNvbnN0IG1hdGNoZXMgPSBbXTtcbiAgbGV0IG1hdGNoID0gcmVnZXguZXhlYyhzdHJpbmcpO1xuICB3aGlsZSAobWF0Y2gpIHtcbiAgICBjb25zdCBhbGxtYXRjaGVzID0gW107XG4gICAgYWxsbWF0Y2hlcy5zdGFydEluZGV4ID0gcmVnZXgubGFzdEluZGV4IC0gbWF0Y2hbMF0ubGVuZ3RoO1xuICAgIGNvbnN0IGxlbiA9IG1hdGNoLmxlbmd0aDtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbGVuOyBpbmRleCsrKSB7XG4gICAgICBhbGxtYXRjaGVzLnB1c2gobWF0Y2hbaW5kZXhdKTtcbiAgICB9XG4gICAgbWF0Y2hlcy5wdXNoKGFsbG1hdGNoZXMpO1xuICAgIG1hdGNoID0gcmVnZXguZXhlYyhzdHJpbmcpO1xuICB9XG4gIHJldHVybiBtYXRjaGVzO1xufTtcblxuY29uc3QgaXNOYW1lID0gZnVuY3Rpb24oc3RyaW5nKSB7XG4gIGNvbnN0IG1hdGNoID0gcmVnZXhOYW1lLmV4ZWMoc3RyaW5nKTtcbiAgcmV0dXJuICEobWF0Y2ggPT09IG51bGwgfHwgdHlwZW9mIG1hdGNoID09PSAndW5kZWZpbmVkJyk7XG59O1xuXG5leHBvcnRzLmlzRXhpc3QgPSBmdW5jdGlvbih2KSB7XG4gIHJldHVybiB0eXBlb2YgdiAhPT0gJ3VuZGVmaW5lZCc7XG59O1xuXG5leHBvcnRzLmlzRW1wdHlPYmplY3QgPSBmdW5jdGlvbihvYmopIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikubGVuZ3RoID09PSAwO1xufTtcblxuLyoqXG4gKiBDb3B5IGFsbCB0aGUgcHJvcGVydGllcyBvZiBhIGludG8gYi5cbiAqIEBwYXJhbSB7Kn0gdGFyZ2V0XG4gKiBAcGFyYW0geyp9IGFcbiAqL1xuZXhwb3J0cy5tZXJnZSA9IGZ1bmN0aW9uKHRhcmdldCwgYSwgYXJyYXlNb2RlKSB7XG4gIGlmIChhKSB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGEpOyAvLyB3aWxsIHJldHVybiBhbiBhcnJheSBvZiBvd24gcHJvcGVydGllc1xuICAgIGNvbnN0IGxlbiA9IGtleXMubGVuZ3RoOyAvL2Rvbid0IG1ha2UgaXQgaW5saW5lXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgaWYgKGFycmF5TW9kZSA9PT0gJ3N0cmljdCcpIHtcbiAgICAgICAgdGFyZ2V0W2tleXNbaV1dID0gWyBhW2tleXNbaV1dIF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXRba2V5c1tpXV0gPSBhW2tleXNbaV1dO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcbi8qIGV4cG9ydHMubWVyZ2UgPWZ1bmN0aW9uIChiLGEpe1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihiLGEpO1xufSAqL1xuXG5leHBvcnRzLmdldFZhbHVlID0gZnVuY3Rpb24odikge1xuICBpZiAoZXhwb3J0cy5pc0V4aXN0KHYpKSB7XG4gICAgcmV0dXJuIHY7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG59O1xuXG4vLyBjb25zdCBmYWtlQ2FsbCA9IGZ1bmN0aW9uKGEpIHtyZXR1cm4gYTt9O1xuLy8gY29uc3QgZmFrZUNhbGxOb1JldHVybiA9IGZ1bmN0aW9uKCkge307XG5cbmV4cG9ydHMuaXNOYW1lID0gaXNOYW1lO1xuZXhwb3J0cy5nZXRBbGxNYXRjaGVzID0gZ2V0QWxsTWF0Y2hlcztcbmV4cG9ydHMubmFtZVJlZ2V4cCA9IG5hbWVSZWdleHA7XG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xuXG5jb25zdCBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgYWxsb3dCb29sZWFuQXR0cmlidXRlczogZmFsc2UsIC8vQSB0YWcgY2FuIGhhdmUgYXR0cmlidXRlcyB3aXRob3V0IGFueSB2YWx1ZVxuICB1bnBhaXJlZFRhZ3M6IFtdXG59O1xuXG4vL2NvbnN0IHRhZ3NQYXR0ZXJuID0gbmV3IFJlZ0V4cChcIjxcXFxcLz8oW1xcXFx3OlxcXFwtX1xcLl0rKVxcXFxzKlxcLz8+XCIsXCJnXCIpO1xuZXhwb3J0cy52YWxpZGF0ZSA9IGZ1bmN0aW9uICh4bWxEYXRhLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0T3B0aW9ucywgb3B0aW9ucyk7XG5cbiAgLy94bWxEYXRhID0geG1sRGF0YS5yZXBsYWNlKC8oXFxyXFxufFxcbnxcXHIpL2dtLFwiXCIpOy8vbWFrZSBpdCBzaW5nbGUgbGluZVxuICAvL3htbERhdGEgPSB4bWxEYXRhLnJlcGxhY2UoLyheXFxzKjxcXD94bWwuKj9cXD8+KS9nLFwiXCIpOy8vUmVtb3ZlIFhNTCBzdGFydGluZyB0YWdcbiAgLy94bWxEYXRhID0geG1sRGF0YS5yZXBsYWNlKC8oPCFET0NUWVBFW1xcc1xcd1xcXCJcXC5cXC9cXC1cXDpdKyhcXFsuKlxcXSkqXFxzKj4pL2csXCJcIik7Ly9SZW1vdmUgRE9DVFlQRVxuICBjb25zdCB0YWdzID0gW107XG4gIGxldCB0YWdGb3VuZCA9IGZhbHNlO1xuXG4gIC8vaW5kaWNhdGVzIHRoYXQgdGhlIHJvb3QgdGFnIGhhcyBiZWVuIGNsb3NlZCAoYWthLiBkZXB0aCAwIGhhcyBiZWVuIHJlYWNoZWQpXG4gIGxldCByZWFjaGVkUm9vdCA9IGZhbHNlO1xuXG4gIGlmICh4bWxEYXRhWzBdID09PSAnXFx1ZmVmZicpIHtcbiAgICAvLyBjaGVjayBmb3IgYnl0ZSBvcmRlciBtYXJrIChCT00pXG4gICAgeG1sRGF0YSA9IHhtbERhdGEuc3Vic3RyKDEpO1xuICB9XG4gIFxuICBmb3IgKGxldCBpID0gMDsgaSA8IHhtbERhdGEubGVuZ3RoOyBpKyspIHtcblxuICAgIGlmICh4bWxEYXRhW2ldID09PSAnPCcgJiYgeG1sRGF0YVtpKzFdID09PSAnPycpIHtcbiAgICAgIGkrPTI7XG4gICAgICBpID0gcmVhZFBJKHhtbERhdGEsaSk7XG4gICAgICBpZiAoaS5lcnIpIHJldHVybiBpO1xuICAgIH1lbHNlIGlmICh4bWxEYXRhW2ldID09PSAnPCcpIHtcbiAgICAgIC8vc3RhcnRpbmcgb2YgdGFnXG4gICAgICAvL3JlYWQgdW50aWwgeW91IHJlYWNoIHRvICc+JyBhdm9pZGluZyBhbnkgJz4nIGluIGF0dHJpYnV0ZSB2YWx1ZVxuICAgICAgbGV0IHRhZ1N0YXJ0UG9zID0gaTtcbiAgICAgIGkrKztcbiAgICAgIFxuICAgICAgaWYgKHhtbERhdGFbaV0gPT09ICchJykge1xuICAgICAgICBpID0gcmVhZENvbW1lbnRBbmRDREFUQSh4bWxEYXRhLCBpKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgY2xvc2luZ1RhZyA9IGZhbHNlO1xuICAgICAgICBpZiAoeG1sRGF0YVtpXSA9PT0gJy8nKSB7XG4gICAgICAgICAgLy9jbG9zaW5nIHRhZ1xuICAgICAgICAgIGNsb3NpbmdUYWcgPSB0cnVlO1xuICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgICAvL3JlYWQgdGFnbmFtZVxuICAgICAgICBsZXQgdGFnTmFtZSA9ICcnO1xuICAgICAgICBmb3IgKDsgaSA8IHhtbERhdGEubGVuZ3RoICYmXG4gICAgICAgICAgeG1sRGF0YVtpXSAhPT0gJz4nICYmXG4gICAgICAgICAgeG1sRGF0YVtpXSAhPT0gJyAnICYmXG4gICAgICAgICAgeG1sRGF0YVtpXSAhPT0gJ1xcdCcgJiZcbiAgICAgICAgICB4bWxEYXRhW2ldICE9PSAnXFxuJyAmJlxuICAgICAgICAgIHhtbERhdGFbaV0gIT09ICdcXHInOyBpKytcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGFnTmFtZSArPSB4bWxEYXRhW2ldO1xuICAgICAgICB9XG4gICAgICAgIHRhZ05hbWUgPSB0YWdOYW1lLnRyaW0oKTtcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0YWdOYW1lKTtcblxuICAgICAgICBpZiAodGFnTmFtZVt0YWdOYW1lLmxlbmd0aCAtIDFdID09PSAnLycpIHtcbiAgICAgICAgICAvL3NlbGYgY2xvc2luZyB0YWcgd2l0aG91dCBhdHRyaWJ1dGVzXG4gICAgICAgICAgdGFnTmFtZSA9IHRhZ05hbWUuc3Vic3RyaW5nKDAsIHRhZ05hbWUubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgLy9jb250aW51ZTtcbiAgICAgICAgICBpLS07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF2YWxpZGF0ZVRhZ05hbWUodGFnTmFtZSkpIHtcbiAgICAgICAgICBsZXQgbXNnO1xuICAgICAgICAgIGlmICh0YWdOYW1lLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIG1zZyA9IFwiSW52YWxpZCBzcGFjZSBhZnRlciAnPCcuXCI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1zZyA9IFwiVGFnICdcIit0YWdOYW1lK1wiJyBpcyBhbiBpbnZhbGlkIG5hbWUuXCI7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBnZXRFcnJvck9iamVjdCgnSW52YWxpZFRhZycsIG1zZywgZ2V0TGluZU51bWJlckZvclBvc2l0aW9uKHhtbERhdGEsIGkpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHJlYWRBdHRyaWJ1dGVTdHIoeG1sRGF0YSwgaSk7XG4gICAgICAgIGlmIChyZXN1bHQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KCdJbnZhbGlkQXR0cicsIFwiQXR0cmlidXRlcyBmb3IgJ1wiK3RhZ05hbWUrXCInIGhhdmUgb3BlbiBxdW90ZS5cIiwgZ2V0TGluZU51bWJlckZvclBvc2l0aW9uKHhtbERhdGEsIGkpKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgYXR0clN0ciA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgaSA9IHJlc3VsdC5pbmRleDtcblxuICAgICAgICBpZiAoYXR0clN0clthdHRyU3RyLmxlbmd0aCAtIDFdID09PSAnLycpIHtcbiAgICAgICAgICAvL3NlbGYgY2xvc2luZyB0YWdcbiAgICAgICAgICBjb25zdCBhdHRyU3RyU3RhcnQgPSBpIC0gYXR0clN0ci5sZW5ndGg7XG4gICAgICAgICAgYXR0clN0ciA9IGF0dHJTdHIuc3Vic3RyaW5nKDAsIGF0dHJTdHIubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgY29uc3QgaXNWYWxpZCA9IHZhbGlkYXRlQXR0cmlidXRlU3RyaW5nKGF0dHJTdHIsIG9wdGlvbnMpO1xuICAgICAgICAgIGlmIChpc1ZhbGlkID09PSB0cnVlKSB7XG4gICAgICAgICAgICB0YWdGb3VuZCA9IHRydWU7XG4gICAgICAgICAgICAvL2NvbnRpbnVlOyAvL3RleHQgbWF5IHByZXNlbnRzIGFmdGVyIHNlbGYgY2xvc2luZyB0YWdcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy90aGUgcmVzdWx0IGZyb20gdGhlIG5lc3RlZCBmdW5jdGlvbiByZXR1cm5zIHRoZSBwb3NpdGlvbiBvZiB0aGUgZXJyb3Igd2l0aGluIHRoZSBhdHRyaWJ1dGVcbiAgICAgICAgICAgIC8vaW4gb3JkZXIgdG8gZ2V0IHRoZSAndHJ1ZScgZXJyb3IgbGluZSwgd2UgbmVlZCB0byBjYWxjdWxhdGUgdGhlIHBvc2l0aW9uIHdoZXJlIHRoZSBhdHRyaWJ1dGUgYmVnaW5zIChpIC0gYXR0clN0ci5sZW5ndGgpIGFuZCB0aGVuIGFkZCB0aGUgcG9zaXRpb24gd2l0aGluIHRoZSBhdHRyaWJ1dGVcbiAgICAgICAgICAgIC8vdGhpcyBnaXZlcyB1cyB0aGUgYWJzb2x1dGUgaW5kZXggaW4gdGhlIGVudGlyZSB4bWwsIHdoaWNoIHdlIGNhbiB1c2UgdG8gZmluZCB0aGUgbGluZSBhdCBsYXN0XG4gICAgICAgICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoaXNWYWxpZC5lcnIuY29kZSwgaXNWYWxpZC5lcnIubXNnLCBnZXRMaW5lTnVtYmVyRm9yUG9zaXRpb24oeG1sRGF0YSwgYXR0clN0clN0YXJ0ICsgaXNWYWxpZC5lcnIubGluZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChjbG9zaW5nVGFnKSB7XG4gICAgICAgICAgaWYgKCFyZXN1bHQudGFnQ2xvc2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRUYWcnLCBcIkNsb3NpbmcgdGFnICdcIit0YWdOYW1lK1wiJyBkb2Vzbid0IGhhdmUgcHJvcGVyIGNsb3NpbmcuXCIsIGdldExpbmVOdW1iZXJGb3JQb3NpdGlvbih4bWxEYXRhLCBpKSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChhdHRyU3RyLnRyaW0oKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRUYWcnLCBcIkNsb3NpbmcgdGFnICdcIit0YWdOYW1lK1wiJyBjYW4ndCBoYXZlIGF0dHJpYnV0ZXMgb3IgaW52YWxpZCBzdGFydGluZy5cIiwgZ2V0TGluZU51bWJlckZvclBvc2l0aW9uKHhtbERhdGEsIHRhZ1N0YXJ0UG9zKSk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0YWdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KCdJbnZhbGlkVGFnJywgXCJDbG9zaW5nIHRhZyAnXCIrdGFnTmFtZStcIicgaGFzIG5vdCBiZWVuIG9wZW5lZC5cIiwgZ2V0TGluZU51bWJlckZvclBvc2l0aW9uKHhtbERhdGEsIHRhZ1N0YXJ0UG9zKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG90ZyA9IHRhZ3MucG9wKCk7XG4gICAgICAgICAgICBpZiAodGFnTmFtZSAhPT0gb3RnLnRhZ05hbWUpIHtcbiAgICAgICAgICAgICAgbGV0IG9wZW5Qb3MgPSBnZXRMaW5lTnVtYmVyRm9yUG9zaXRpb24oeG1sRGF0YSwgb3RnLnRhZ1N0YXJ0UG9zKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KCdJbnZhbGlkVGFnJyxcbiAgICAgICAgICAgICAgICBcIkV4cGVjdGVkIGNsb3NpbmcgdGFnICdcIitvdGcudGFnTmFtZStcIicgKG9wZW5lZCBpbiBsaW5lIFwiK29wZW5Qb3MubGluZStcIiwgY29sIFwiK29wZW5Qb3MuY29sK1wiKSBpbnN0ZWFkIG9mIGNsb3NpbmcgdGFnICdcIit0YWdOYW1lK1wiJy5cIixcbiAgICAgICAgICAgICAgICBnZXRMaW5lTnVtYmVyRm9yUG9zaXRpb24oeG1sRGF0YSwgdGFnU3RhcnRQb3MpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy93aGVuIHRoZXJlIGFyZSBubyBtb3JlIHRhZ3MsIHdlIHJlYWNoZWQgdGhlIHJvb3QgbGV2ZWwuXG4gICAgICAgICAgICBpZiAodGFncy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICByZWFjaGVkUm9vdCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGlzVmFsaWQgPSB2YWxpZGF0ZUF0dHJpYnV0ZVN0cmluZyhhdHRyU3RyLCBvcHRpb25zKTtcbiAgICAgICAgICBpZiAoaXNWYWxpZCAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgLy90aGUgcmVzdWx0IGZyb20gdGhlIG5lc3RlZCBmdW5jdGlvbiByZXR1cm5zIHRoZSBwb3NpdGlvbiBvZiB0aGUgZXJyb3Igd2l0aGluIHRoZSBhdHRyaWJ1dGVcbiAgICAgICAgICAgIC8vaW4gb3JkZXIgdG8gZ2V0IHRoZSAndHJ1ZScgZXJyb3IgbGluZSwgd2UgbmVlZCB0byBjYWxjdWxhdGUgdGhlIHBvc2l0aW9uIHdoZXJlIHRoZSBhdHRyaWJ1dGUgYmVnaW5zIChpIC0gYXR0clN0ci5sZW5ndGgpIGFuZCB0aGVuIGFkZCB0aGUgcG9zaXRpb24gd2l0aGluIHRoZSBhdHRyaWJ1dGVcbiAgICAgICAgICAgIC8vdGhpcyBnaXZlcyB1cyB0aGUgYWJzb2x1dGUgaW5kZXggaW4gdGhlIGVudGlyZSB4bWwsIHdoaWNoIHdlIGNhbiB1c2UgdG8gZmluZCB0aGUgbGluZSBhdCBsYXN0XG4gICAgICAgICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoaXNWYWxpZC5lcnIuY29kZSwgaXNWYWxpZC5lcnIubXNnLCBnZXRMaW5lTnVtYmVyRm9yUG9zaXRpb24oeG1sRGF0YSwgaSAtIGF0dHJTdHIubGVuZ3RoICsgaXNWYWxpZC5lcnIubGluZSkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vaWYgdGhlIHJvb3QgbGV2ZWwgaGFzIGJlZW4gcmVhY2hlZCBiZWZvcmUgLi4uXG4gICAgICAgICAgaWYgKHJlYWNoZWRSb290ID09PSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRYbWwnLCAnTXVsdGlwbGUgcG9zc2libGUgcm9vdCBub2RlcyBmb3VuZC4nLCBnZXRMaW5lTnVtYmVyRm9yUG9zaXRpb24oeG1sRGF0YSwgaSkpO1xuICAgICAgICAgIH0gZWxzZSBpZihvcHRpb25zLnVucGFpcmVkVGFncy5pbmRleE9mKHRhZ05hbWUpICE9PSAtMSl7XG4gICAgICAgICAgICAvL2Rvbid0IHB1c2ggaW50byBzdGFja1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0YWdzLnB1c2goe3RhZ05hbWUsIHRhZ1N0YXJ0UG9zfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRhZ0ZvdW5kID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vc2tpcCB0YWcgdGV4dCB2YWx1ZVxuICAgICAgICAvL0l0IG1heSBpbmNsdWRlIGNvbW1lbnRzIGFuZCBDREFUQSB2YWx1ZVxuICAgICAgICBmb3IgKGkrKzsgaSA8IHhtbERhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoeG1sRGF0YVtpXSA9PT0gJzwnKSB7XG4gICAgICAgICAgICBpZiAoeG1sRGF0YVtpICsgMV0gPT09ICchJykge1xuICAgICAgICAgICAgICAvL2NvbW1lbnQgb3IgQ0FEQVRBXG4gICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgaSA9IHJlYWRDb21tZW50QW5kQ0RBVEEoeG1sRGF0YSwgaSk7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh4bWxEYXRhW2krMV0gPT09ICc/Jykge1xuICAgICAgICAgICAgICBpID0gcmVhZFBJKHhtbERhdGEsICsraSk7XG4gICAgICAgICAgICAgIGlmIChpLmVycikgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2V7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoeG1sRGF0YVtpXSA9PT0gJyYnKSB7XG4gICAgICAgICAgICBjb25zdCBhZnRlckFtcCA9IHZhbGlkYXRlQW1wZXJzYW5kKHhtbERhdGEsIGkpO1xuICAgICAgICAgICAgaWYgKGFmdGVyQW1wID09IC0xKVxuICAgICAgICAgICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRDaGFyJywgXCJjaGFyICcmJyBpcyBub3QgZXhwZWN0ZWQuXCIsIGdldExpbmVOdW1iZXJGb3JQb3NpdGlvbih4bWxEYXRhLCBpKSk7XG4gICAgICAgICAgICBpID0gYWZ0ZXJBbXA7XG4gICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBpZiAocmVhY2hlZFJvb3QgPT09IHRydWUgJiYgIWlzV2hpdGVTcGFjZSh4bWxEYXRhW2ldKSkge1xuICAgICAgICAgICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRYbWwnLCBcIkV4dHJhIHRleHQgYXQgdGhlIGVuZFwiLCBnZXRMaW5lTnVtYmVyRm9yUG9zaXRpb24oeG1sRGF0YSwgaSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSAvL2VuZCBvZiByZWFkaW5nIHRhZyB0ZXh0IHZhbHVlXG4gICAgICAgIGlmICh4bWxEYXRhW2ldID09PSAnPCcpIHtcbiAgICAgICAgICBpLS07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCBpc1doaXRlU3BhY2UoeG1sRGF0YVtpXSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRDaGFyJywgXCJjaGFyICdcIit4bWxEYXRhW2ldK1wiJyBpcyBub3QgZXhwZWN0ZWQuXCIsIGdldExpbmVOdW1iZXJGb3JQb3NpdGlvbih4bWxEYXRhLCBpKSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKCF0YWdGb3VuZCkge1xuICAgIHJldHVybiBnZXRFcnJvck9iamVjdCgnSW52YWxpZFhtbCcsICdTdGFydCB0YWcgZXhwZWN0ZWQuJywgMSk7XG4gIH1lbHNlIGlmICh0YWdzLmxlbmd0aCA9PSAxKSB7XG4gICAgICByZXR1cm4gZ2V0RXJyb3JPYmplY3QoJ0ludmFsaWRUYWcnLCBcIlVuY2xvc2VkIHRhZyAnXCIrdGFnc1swXS50YWdOYW1lK1wiJy5cIiwgZ2V0TGluZU51bWJlckZvclBvc2l0aW9uKHhtbERhdGEsIHRhZ3NbMF0udGFnU3RhcnRQb3MpKTtcbiAgfWVsc2UgaWYgKHRhZ3MubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KCdJbnZhbGlkWG1sJywgXCJJbnZhbGlkICdcIitcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeSh0YWdzLm1hcCh0ID0+IHQudGFnTmFtZSksIG51bGwsIDQpLnJlcGxhY2UoL1xccj9cXG4vZywgJycpK1xuICAgICAgICAgIFwiJyBmb3VuZC5cIiwge2xpbmU6IDEsIGNvbDogMX0pO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5mdW5jdGlvbiBpc1doaXRlU3BhY2UoY2hhcil7XG4gIHJldHVybiBjaGFyID09PSAnICcgfHwgY2hhciA9PT0gJ1xcdCcgfHwgY2hhciA9PT0gJ1xcbicgIHx8IGNoYXIgPT09ICdcXHInO1xufVxuLyoqXG4gKiBSZWFkIFByb2Nlc3NpbmcgaW5zc3RydWN0aW9ucyBhbmQgc2tpcFxuICogQHBhcmFtIHsqfSB4bWxEYXRhXG4gKiBAcGFyYW0geyp9IGlcbiAqL1xuZnVuY3Rpb24gcmVhZFBJKHhtbERhdGEsIGkpIHtcbiAgY29uc3Qgc3RhcnQgPSBpO1xuICBmb3IgKDsgaSA8IHhtbERhdGEubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoeG1sRGF0YVtpXSA9PSAnPycgfHwgeG1sRGF0YVtpXSA9PSAnICcpIHtcbiAgICAgIC8vdGFnbmFtZVxuICAgICAgY29uc3QgdGFnbmFtZSA9IHhtbERhdGEuc3Vic3RyKHN0YXJ0LCBpIC0gc3RhcnQpO1xuICAgICAgaWYgKGkgPiA1ICYmIHRhZ25hbWUgPT09ICd4bWwnKSB7XG4gICAgICAgIHJldHVybiBnZXRFcnJvck9iamVjdCgnSW52YWxpZFhtbCcsICdYTUwgZGVjbGFyYXRpb24gYWxsb3dlZCBvbmx5IGF0IHRoZSBzdGFydCBvZiB0aGUgZG9jdW1lbnQuJywgZ2V0TGluZU51bWJlckZvclBvc2l0aW9uKHhtbERhdGEsIGkpKTtcbiAgICAgIH0gZWxzZSBpZiAoeG1sRGF0YVtpXSA9PSAnPycgJiYgeG1sRGF0YVtpICsgMV0gPT0gJz4nKSB7XG4gICAgICAgIC8vY2hlY2sgaWYgdmFsaWQgYXR0cmlidXQgc3RyaW5nXG4gICAgICAgIGkrKztcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGk7XG59XG5cbmZ1bmN0aW9uIHJlYWRDb21tZW50QW5kQ0RBVEEoeG1sRGF0YSwgaSkge1xuICBpZiAoeG1sRGF0YS5sZW5ndGggPiBpICsgNSAmJiB4bWxEYXRhW2kgKyAxXSA9PT0gJy0nICYmIHhtbERhdGFbaSArIDJdID09PSAnLScpIHtcbiAgICAvL2NvbW1lbnRcbiAgICBmb3IgKGkgKz0gMzsgaSA8IHhtbERhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh4bWxEYXRhW2ldID09PSAnLScgJiYgeG1sRGF0YVtpICsgMV0gPT09ICctJyAmJiB4bWxEYXRhW2kgKyAyXSA9PT0gJz4nKSB7XG4gICAgICAgIGkgKz0gMjtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKFxuICAgIHhtbERhdGEubGVuZ3RoID4gaSArIDggJiZcbiAgICB4bWxEYXRhW2kgKyAxXSA9PT0gJ0QnICYmXG4gICAgeG1sRGF0YVtpICsgMl0gPT09ICdPJyAmJlxuICAgIHhtbERhdGFbaSArIDNdID09PSAnQycgJiZcbiAgICB4bWxEYXRhW2kgKyA0XSA9PT0gJ1QnICYmXG4gICAgeG1sRGF0YVtpICsgNV0gPT09ICdZJyAmJlxuICAgIHhtbERhdGFbaSArIDZdID09PSAnUCcgJiZcbiAgICB4bWxEYXRhW2kgKyA3XSA9PT0gJ0UnXG4gICkge1xuICAgIGxldCBhbmdsZUJyYWNrZXRzQ291bnQgPSAxO1xuICAgIGZvciAoaSArPSA4OyBpIDwgeG1sRGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHhtbERhdGFbaV0gPT09ICc8Jykge1xuICAgICAgICBhbmdsZUJyYWNrZXRzQ291bnQrKztcbiAgICAgIH0gZWxzZSBpZiAoeG1sRGF0YVtpXSA9PT0gJz4nKSB7XG4gICAgICAgIGFuZ2xlQnJhY2tldHNDb3VudC0tO1xuICAgICAgICBpZiAoYW5nbGVCcmFja2V0c0NvdW50ID09PSAwKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAoXG4gICAgeG1sRGF0YS5sZW5ndGggPiBpICsgOSAmJlxuICAgIHhtbERhdGFbaSArIDFdID09PSAnWycgJiZcbiAgICB4bWxEYXRhW2kgKyAyXSA9PT0gJ0MnICYmXG4gICAgeG1sRGF0YVtpICsgM10gPT09ICdEJyAmJlxuICAgIHhtbERhdGFbaSArIDRdID09PSAnQScgJiZcbiAgICB4bWxEYXRhW2kgKyA1XSA9PT0gJ1QnICYmXG4gICAgeG1sRGF0YVtpICsgNl0gPT09ICdBJyAmJlxuICAgIHhtbERhdGFbaSArIDddID09PSAnWydcbiAgKSB7XG4gICAgZm9yIChpICs9IDg7IGkgPCB4bWxEYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoeG1sRGF0YVtpXSA9PT0gJ10nICYmIHhtbERhdGFbaSArIDFdID09PSAnXScgJiYgeG1sRGF0YVtpICsgMl0gPT09ICc+Jykge1xuICAgICAgICBpICs9IDI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpO1xufVxuXG5jb25zdCBkb3VibGVRdW90ZSA9ICdcIic7XG5jb25zdCBzaW5nbGVRdW90ZSA9IFwiJ1wiO1xuXG4vKipcbiAqIEtlZXAgcmVhZGluZyB4bWxEYXRhIHVudGlsICc8JyBpcyBmb3VuZCBvdXRzaWRlIHRoZSBhdHRyaWJ1dGUgdmFsdWUuXG4gKiBAcGFyYW0ge3N0cmluZ30geG1sRGF0YVxuICogQHBhcmFtIHtudW1iZXJ9IGlcbiAqL1xuZnVuY3Rpb24gcmVhZEF0dHJpYnV0ZVN0cih4bWxEYXRhLCBpKSB7XG4gIGxldCBhdHRyU3RyID0gJyc7XG4gIGxldCBzdGFydENoYXIgPSAnJztcbiAgbGV0IHRhZ0Nsb3NlZCA9IGZhbHNlO1xuICBmb3IgKDsgaSA8IHhtbERhdGEubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoeG1sRGF0YVtpXSA9PT0gZG91YmxlUXVvdGUgfHwgeG1sRGF0YVtpXSA9PT0gc2luZ2xlUXVvdGUpIHtcbiAgICAgIGlmIChzdGFydENoYXIgPT09ICcnKSB7XG4gICAgICAgIHN0YXJ0Q2hhciA9IHhtbERhdGFbaV07XG4gICAgICB9IGVsc2UgaWYgKHN0YXJ0Q2hhciAhPT0geG1sRGF0YVtpXSkge1xuICAgICAgICAvL2lmIHZhdWUgaXMgZW5jbG9zZWQgd2l0aCBkb3VibGUgcXVvdGUgdGhlbiBzaW5nbGUgcXVvdGVzIGFyZSBhbGxvd2VkIGluc2lkZSB0aGUgdmFsdWUgYW5kIHZpY2UgdmVyc2FcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXJ0Q2hhciA9ICcnO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoeG1sRGF0YVtpXSA9PT0gJz4nKSB7XG4gICAgICBpZiAoc3RhcnRDaGFyID09PSAnJykge1xuICAgICAgICB0YWdDbG9zZWQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgYXR0clN0ciArPSB4bWxEYXRhW2ldO1xuICB9XG4gIGlmIChzdGFydENoYXIgIT09ICcnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB2YWx1ZTogYXR0clN0cixcbiAgICBpbmRleDogaSxcbiAgICB0YWdDbG9zZWQ6IHRhZ0Nsb3NlZFxuICB9O1xufVxuXG4vKipcbiAqIFNlbGVjdCBhbGwgdGhlIGF0dHJpYnV0ZXMgd2hldGhlciB2YWxpZCBvciBpbnZhbGlkLlxuICovXG5jb25zdCB2YWxpZEF0dHJTdHJSZWd4cCA9IG5ldyBSZWdFeHAoJyhcXFxccyopKFteXFxcXHM9XSspKFxcXFxzKj0pPyhcXFxccyooW1xcJ1wiXSkoKFtcXFxcc1xcXFxTXSkqPylcXFxcNSk/JywgJ2cnKTtcblxuLy9hdHRyLCA9XCJzZFwiLCBhPVwiYW1pdCdzXCIsIGE9XCJzZFwiYj1cInNhZlwiLCBhYiAgY2Q9XCJcIlxuXG5mdW5jdGlvbiB2YWxpZGF0ZUF0dHJpYnV0ZVN0cmluZyhhdHRyU3RyLCBvcHRpb25zKSB7XG4gIC8vY29uc29sZS5sb2coXCJzdGFydDpcIithdHRyU3RyK1wiOmVuZFwiKTtcblxuICAvL2lmKGF0dHJTdHIudHJpbSgpLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRydWU7IC8vZW1wdHkgc3RyaW5nXG5cbiAgY29uc3QgbWF0Y2hlcyA9IHV0aWwuZ2V0QWxsTWF0Y2hlcyhhdHRyU3RyLCB2YWxpZEF0dHJTdHJSZWd4cCk7XG4gIGNvbnN0IGF0dHJOYW1lcyA9IHt9O1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWF0Y2hlcy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChtYXRjaGVzW2ldWzFdLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy9ub3NwYWNlIGJlZm9yZSBhdHRyaWJ1dGUgbmFtZTogYT1cInNkXCJiPVwic2FmXCJcbiAgICAgIHJldHVybiBnZXRFcnJvck9iamVjdCgnSW52YWxpZEF0dHInLCBcIkF0dHJpYnV0ZSAnXCIrbWF0Y2hlc1tpXVsyXStcIicgaGFzIG5vIHNwYWNlIGluIHN0YXJ0aW5nLlwiLCBnZXRQb3NpdGlvbkZyb21NYXRjaChtYXRjaGVzW2ldKSlcbiAgICB9IGVsc2UgaWYgKG1hdGNoZXNbaV1bM10gIT09IHVuZGVmaW5lZCAmJiBtYXRjaGVzW2ldWzRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBnZXRFcnJvck9iamVjdCgnSW52YWxpZEF0dHInLCBcIkF0dHJpYnV0ZSAnXCIrbWF0Y2hlc1tpXVsyXStcIicgaXMgd2l0aG91dCB2YWx1ZS5cIiwgZ2V0UG9zaXRpb25Gcm9tTWF0Y2gobWF0Y2hlc1tpXSkpO1xuICAgIH0gZWxzZSBpZiAobWF0Y2hlc1tpXVszXSA9PT0gdW5kZWZpbmVkICYmICFvcHRpb25zLmFsbG93Qm9vbGVhbkF0dHJpYnV0ZXMpIHtcbiAgICAgIC8vaW5kZXBlbmRlbnQgYXR0cmlidXRlOiBhYlxuICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KCdJbnZhbGlkQXR0cicsIFwiYm9vbGVhbiBhdHRyaWJ1dGUgJ1wiK21hdGNoZXNbaV1bMl0rXCInIGlzIG5vdCBhbGxvd2VkLlwiLCBnZXRQb3NpdGlvbkZyb21NYXRjaChtYXRjaGVzW2ldKSk7XG4gICAgfVxuICAgIC8qIGVsc2UgaWYobWF0Y2hlc1tpXVs2XSA9PT0gdW5kZWZpbmVkKXsvL2F0dHJpYnV0ZSB3aXRob3V0IHZhbHVlOiBhYj1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZXJyOiB7IGNvZGU6XCJJbnZhbGlkQXR0clwiLG1zZzpcImF0dHJpYnV0ZSBcIiArIG1hdGNoZXNbaV1bMl0gKyBcIiBoYXMgbm8gdmFsdWUgYXNzaWduZWQuXCJ9fTtcbiAgICAgICAgICAgICAgICB9ICovXG4gICAgY29uc3QgYXR0ck5hbWUgPSBtYXRjaGVzW2ldWzJdO1xuICAgIGlmICghdmFsaWRhdGVBdHRyTmFtZShhdHRyTmFtZSkpIHtcbiAgICAgIHJldHVybiBnZXRFcnJvck9iamVjdCgnSW52YWxpZEF0dHInLCBcIkF0dHJpYnV0ZSAnXCIrYXR0ck5hbWUrXCInIGlzIGFuIGludmFsaWQgbmFtZS5cIiwgZ2V0UG9zaXRpb25Gcm9tTWF0Y2gobWF0Y2hlc1tpXSkpO1xuICAgIH1cbiAgICBpZiAoIWF0dHJOYW1lcy5oYXNPd25Qcm9wZXJ0eShhdHRyTmFtZSkpIHtcbiAgICAgIC8vY2hlY2sgZm9yIGR1cGxpY2F0ZSBhdHRyaWJ1dGUuXG4gICAgICBhdHRyTmFtZXNbYXR0ck5hbWVdID0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGdldEVycm9yT2JqZWN0KCdJbnZhbGlkQXR0cicsIFwiQXR0cmlidXRlICdcIithdHRyTmFtZStcIicgaXMgcmVwZWF0ZWQuXCIsIGdldFBvc2l0aW9uRnJvbU1hdGNoKG1hdGNoZXNbaV0pKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVOdW1iZXJBbXBlcnNhbmQoeG1sRGF0YSwgaSkge1xuICBsZXQgcmUgPSAvXFxkLztcbiAgaWYgKHhtbERhdGFbaV0gPT09ICd4Jykge1xuICAgIGkrKztcbiAgICByZSA9IC9bXFxkYS1mQS1GXS87XG4gIH1cbiAgZm9yICg7IGkgPCB4bWxEYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHhtbERhdGFbaV0gPT09ICc7JylcbiAgICAgIHJldHVybiBpO1xuICAgIGlmICgheG1sRGF0YVtpXS5tYXRjaChyZSkpXG4gICAgICBicmVhaztcbiAgfVxuICByZXR1cm4gLTE7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlQW1wZXJzYW5kKHhtbERhdGEsIGkpIHtcbiAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL3htbC8jZHQtY2hhcnJlZlxuICBpKys7XG4gIGlmICh4bWxEYXRhW2ldID09PSAnOycpXG4gICAgcmV0dXJuIC0xO1xuICBpZiAoeG1sRGF0YVtpXSA9PT0gJyMnKSB7XG4gICAgaSsrO1xuICAgIHJldHVybiB2YWxpZGF0ZU51bWJlckFtcGVyc2FuZCh4bWxEYXRhLCBpKTtcbiAgfVxuICBsZXQgY291bnQgPSAwO1xuICBmb3IgKDsgaSA8IHhtbERhdGEubGVuZ3RoOyBpKyssIGNvdW50KyspIHtcbiAgICBpZiAoeG1sRGF0YVtpXS5tYXRjaCgvXFx3LykgJiYgY291bnQgPCAyMClcbiAgICAgIGNvbnRpbnVlO1xuICAgIGlmICh4bWxEYXRhW2ldID09PSAnOycpXG4gICAgICBicmVhaztcbiAgICByZXR1cm4gLTE7XG4gIH1cbiAgcmV0dXJuIGk7XG59XG5cbmZ1bmN0aW9uIGdldEVycm9yT2JqZWN0KGNvZGUsIG1lc3NhZ2UsIGxpbmVOdW1iZXIpIHtcbiAgcmV0dXJuIHtcbiAgICBlcnI6IHtcbiAgICAgIGNvZGU6IGNvZGUsXG4gICAgICBtc2c6IG1lc3NhZ2UsXG4gICAgICBsaW5lOiBsaW5lTnVtYmVyLmxpbmUgfHwgbGluZU51bWJlcixcbiAgICAgIGNvbDogbGluZU51bWJlci5jb2wsXG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVBdHRyTmFtZShhdHRyTmFtZSkge1xuICByZXR1cm4gdXRpbC5pc05hbWUoYXR0ck5hbWUpO1xufVxuXG4vLyBjb25zdCBzdGFydHNXaXRoWE1MID0gL154bWwvaTtcblxuZnVuY3Rpb24gdmFsaWRhdGVUYWdOYW1lKHRhZ25hbWUpIHtcbiAgcmV0dXJuIHV0aWwuaXNOYW1lKHRhZ25hbWUpIC8qICYmICF0YWduYW1lLm1hdGNoKHN0YXJ0c1dpdGhYTUwpICovO1xufVxuXG4vL3RoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbGluZSBudW1iZXIgZm9yIHRoZSBjaGFyYWN0ZXIgYXQgdGhlIGdpdmVuIGluZGV4XG5mdW5jdGlvbiBnZXRMaW5lTnVtYmVyRm9yUG9zaXRpb24oeG1sRGF0YSwgaW5kZXgpIHtcbiAgY29uc3QgbGluZXMgPSB4bWxEYXRhLnN1YnN0cmluZygwLCBpbmRleCkuc3BsaXQoL1xccj9cXG4vKTtcbiAgcmV0dXJuIHtcbiAgICBsaW5lOiBsaW5lcy5sZW5ndGgsXG5cbiAgICAvLyBjb2x1bW4gbnVtYmVyIGlzIGxhc3QgbGluZSdzIGxlbmd0aCArIDEsIGJlY2F1c2UgY29sdW1uIG51bWJlcmluZyBzdGFydHMgYXQgMTpcbiAgICBjb2w6IGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLmxlbmd0aCArIDFcbiAgfTtcbn1cblxuLy90aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHBvc2l0aW9uIG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgbWF0Y2ggd2l0aGluIGF0dHJTdHJcbmZ1bmN0aW9uIGdldFBvc2l0aW9uRnJvbU1hdGNoKG1hdGNoKSB7XG4gIHJldHVybiBtYXRjaC5zdGFydEluZGV4ICsgbWF0Y2hbMV0ubGVuZ3RoO1xufVxuIiwKICAgICJcbmNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xuICAgIHByZXNlcnZlT3JkZXI6IGZhbHNlLFxuICAgIGF0dHJpYnV0ZU5hbWVQcmVmaXg6ICdAXycsXG4gICAgYXR0cmlidXRlc0dyb3VwTmFtZTogZmFsc2UsXG4gICAgdGV4dE5vZGVOYW1lOiAnI3RleHQnLFxuICAgIGlnbm9yZUF0dHJpYnV0ZXM6IHRydWUsXG4gICAgcmVtb3ZlTlNQcmVmaXg6IGZhbHNlLCAvLyByZW1vdmUgTlMgZnJvbSB0YWcgbmFtZSBvciBhdHRyaWJ1dGUgbmFtZSBpZiB0cnVlXG4gICAgYWxsb3dCb29sZWFuQXR0cmlidXRlczogZmFsc2UsIC8vYSB0YWcgY2FuIGhhdmUgYXR0cmlidXRlcyB3aXRob3V0IGFueSB2YWx1ZVxuICAgIC8vaWdub3JlUm9vdEVsZW1lbnQgOiBmYWxzZSxcbiAgICBwYXJzZVRhZ1ZhbHVlOiB0cnVlLFxuICAgIHBhcnNlQXR0cmlidXRlVmFsdWU6IGZhbHNlLFxuICAgIHRyaW1WYWx1ZXM6IHRydWUsIC8vVHJpbSBzdHJpbmcgdmFsdWVzIG9mIHRhZyBhbmQgYXR0cmlidXRlc1xuICAgIGNkYXRhUHJvcE5hbWU6IGZhbHNlLFxuICAgIG51bWJlclBhcnNlT3B0aW9uczoge1xuICAgICAgaGV4OiB0cnVlLFxuICAgICAgbGVhZGluZ1plcm9zOiB0cnVlLFxuICAgICAgZU5vdGF0aW9uOiB0cnVlXG4gICAgfSxcbiAgICB0YWdWYWx1ZVByb2Nlc3NvcjogZnVuY3Rpb24odGFnTmFtZSwgdmFsKSB7XG4gICAgICByZXR1cm4gdmFsO1xuICAgIH0sXG4gICAgYXR0cmlidXRlVmFsdWVQcm9jZXNzb3I6IGZ1bmN0aW9uKGF0dHJOYW1lLCB2YWwpIHtcbiAgICAgIHJldHVybiB2YWw7XG4gICAgfSxcbiAgICBzdG9wTm9kZXM6IFtdLCAvL25lc3RlZCB0YWdzIHdpbGwgbm90IGJlIHBhcnNlZCBldmVuIGZvciBlcnJvcnNcbiAgICBhbHdheXNDcmVhdGVUZXh0Tm9kZTogZmFsc2UsXG4gICAgaXNBcnJheTogKCkgPT4gZmFsc2UsXG4gICAgY29tbWVudFByb3BOYW1lOiBmYWxzZSxcbiAgICB1bnBhaXJlZFRhZ3M6IFtdLFxuICAgIHByb2Nlc3NFbnRpdGllczogdHJ1ZSxcbiAgICBodG1sRW50aXRpZXM6IGZhbHNlLFxuICAgIGlnbm9yZURlY2xhcmF0aW9uOiBmYWxzZSxcbiAgICBpZ25vcmVQaVRhZ3M6IGZhbHNlLFxuICAgIHRyYW5zZm9ybVRhZ05hbWU6IGZhbHNlLFxuICAgIHRyYW5zZm9ybUF0dHJpYnV0ZU5hbWU6IGZhbHNlLFxuICAgIHVwZGF0ZVRhZzogZnVuY3Rpb24odGFnTmFtZSwgalBhdGgsIGF0dHJzKXtcbiAgICAgIHJldHVybiB0YWdOYW1lXG4gICAgfSxcbiAgICAvLyBza2lwRW1wdHlMaXN0SXRlbTogZmFsc2Vcbn07XG4gICBcbmNvbnN0IGJ1aWxkT3B0aW9ucyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdE9wdGlvbnMsIG9wdGlvbnMpO1xufTtcblxuZXhwb3J0cy5idWlsZE9wdGlvbnMgPSBidWlsZE9wdGlvbnM7XG5leHBvcnRzLmRlZmF1bHRPcHRpb25zID0gZGVmYXVsdE9wdGlvbnM7IiwKICAgICIndXNlIHN0cmljdCc7XG5cbmNsYXNzIFhtbE5vZGV7XG4gIGNvbnN0cnVjdG9yKHRhZ25hbWUpIHtcbiAgICB0aGlzLnRhZ25hbWUgPSB0YWduYW1lO1xuICAgIHRoaXMuY2hpbGQgPSBbXTsgLy9uZXN0ZWQgdGFncywgdGV4dCwgY2RhdGEsIGNvbW1lbnRzIGluIG9yZGVyXG4gICAgdGhpc1tcIjpAXCJdID0ge307IC8vYXR0cmlidXRlcyBtYXBcbiAgfVxuICBhZGQoa2V5LHZhbCl7XG4gICAgLy8gdGhpcy5jaGlsZC5wdXNoKCB7bmFtZSA6IGtleSwgdmFsOiB2YWwsIGlzQ2RhdGE6IGlzQ2RhdGEgfSk7XG4gICAgaWYoa2V5ID09PSBcIl9fcHJvdG9fX1wiKSBrZXkgPSBcIiNfX3Byb3RvX19cIjtcbiAgICB0aGlzLmNoaWxkLnB1c2goIHtba2V5XTogdmFsIH0pO1xuICB9XG4gIGFkZENoaWxkKG5vZGUpIHtcbiAgICBpZihub2RlLnRhZ25hbWUgPT09IFwiX19wcm90b19fXCIpIG5vZGUudGFnbmFtZSA9IFwiI19fcHJvdG9fX1wiO1xuICAgIGlmKG5vZGVbXCI6QFwiXSAmJiBPYmplY3Qua2V5cyhub2RlW1wiOkBcIl0pLmxlbmd0aCA+IDApe1xuICAgICAgdGhpcy5jaGlsZC5wdXNoKCB7IFtub2RlLnRhZ25hbWVdOiBub2RlLmNoaWxkLCBbXCI6QFwiXTogbm9kZVtcIjpAXCJdIH0pO1xuICAgIH1lbHNle1xuICAgICAgdGhpcy5jaGlsZC5wdXNoKCB7IFtub2RlLnRhZ25hbWVdOiBub2RlLmNoaWxkIH0pO1xuICAgIH1cbiAgfTtcbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBYbWxOb2RlOyIsCiAgICAiY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL3V0aWwnKTtcblxuLy9UT0RPOiBoYW5kbGUgY29tbWVudHNcbmZ1bmN0aW9uIHJlYWREb2NUeXBlKHhtbERhdGEsIGkpe1xuICAgIFxuICAgIGNvbnN0IGVudGl0aWVzID0ge307XG4gICAgaWYoIHhtbERhdGFbaSArIDNdID09PSAnTycgJiZcbiAgICAgICAgIHhtbERhdGFbaSArIDRdID09PSAnQycgJiZcbiAgICAgICAgIHhtbERhdGFbaSArIDVdID09PSAnVCcgJiZcbiAgICAgICAgIHhtbERhdGFbaSArIDZdID09PSAnWScgJiZcbiAgICAgICAgIHhtbERhdGFbaSArIDddID09PSAnUCcgJiZcbiAgICAgICAgIHhtbERhdGFbaSArIDhdID09PSAnRScpXG4gICAgeyAgICBcbiAgICAgICAgaSA9IGkrOTtcbiAgICAgICAgbGV0IGFuZ2xlQnJhY2tldHNDb3VudCA9IDE7XG4gICAgICAgIGxldCBoYXNCb2R5ID0gZmFsc2UsIGNvbW1lbnQgPSBmYWxzZTtcbiAgICAgICAgbGV0IGV4cCA9IFwiXCI7XG4gICAgICAgIGZvcig7aTx4bWxEYXRhLmxlbmd0aDtpKyspe1xuICAgICAgICAgICAgaWYgKHhtbERhdGFbaV0gPT09ICc8JyAmJiAhY29tbWVudCkgeyAvL0RldGVybWluZSB0aGUgdGFnIHR5cGVcbiAgICAgICAgICAgICAgICBpZiggaGFzQm9keSAmJiBpc0VudGl0eSh4bWxEYXRhLCBpKSl7XG4gICAgICAgICAgICAgICAgICAgIGkgKz0gNzsgXG4gICAgICAgICAgICAgICAgICAgIFtlbnRpdHlOYW1lLCB2YWwsaV0gPSByZWFkRW50aXR5RXhwKHhtbERhdGEsaSsxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYodmFsLmluZGV4T2YoXCImXCIpID09PSAtMSkgLy9QYXJhbWV0ZXIgZW50aXRpZXMgYXJlIG5vdCBzdXBwb3J0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0aWVzWyB2YWxpZGF0ZUVudGl0eU5hbWUoZW50aXR5TmFtZSkgXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWd4IDogUmVnRXhwKCBgJiR7ZW50aXR5TmFtZX07YCxcImdcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsOiB2YWxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYoIGhhc0JvZHkgJiYgaXNFbGVtZW50KHhtbERhdGEsIGkpKSAgaSArPSA4Oy8vTm90IHN1cHBvcnRlZFxuICAgICAgICAgICAgICAgIGVsc2UgaWYoIGhhc0JvZHkgJiYgaXNBdHRsaXN0KHhtbERhdGEsIGkpKSAgaSArPSA4Oy8vTm90IHN1cHBvcnRlZFxuICAgICAgICAgICAgICAgIGVsc2UgaWYoIGhhc0JvZHkgJiYgaXNOb3RhdGlvbih4bWxEYXRhLCBpKSkgaSArPSA5Oy8vTm90IHN1cHBvcnRlZFxuICAgICAgICAgICAgICAgIGVsc2UgaWYoIGlzQ29tbWVudCkgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudCA9IHRydWU7XG4gICAgICAgICAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIERPQ1RZUEVcIik7XG5cbiAgICAgICAgICAgICAgICBhbmdsZUJyYWNrZXRzQ291bnQrKztcbiAgICAgICAgICAgICAgICBleHAgPSBcIlwiO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh4bWxEYXRhW2ldID09PSAnPicpIHsgLy9SZWFkIHRhZyBjb250ZW50XG4gICAgICAgICAgICAgICAgaWYoY29tbWVudCl7XG4gICAgICAgICAgICAgICAgICAgIGlmKCB4bWxEYXRhW2kgLSAxXSA9PT0gXCItXCIgJiYgeG1sRGF0YVtpIC0gMl0gPT09IFwiLVwiKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuZ2xlQnJhY2tldHNDb3VudC0tO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgIGFuZ2xlQnJhY2tldHNDb3VudC0tO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoYW5nbGVCcmFja2V0c0NvdW50ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9ZWxzZSBpZiggeG1sRGF0YVtpXSA9PT0gJ1snKXtcbiAgICAgICAgICAgICAgICBoYXNCb2R5ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIGV4cCArPSB4bWxEYXRhW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmKGFuZ2xlQnJhY2tldHNDb3VudCAhPT0gMCl7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuY2xvc2VkIERPQ1RZUEVgKTtcbiAgICAgICAgfVxuICAgIH1lbHNle1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgVGFnIGluc3RlYWQgb2YgRE9DVFlQRWApO1xuICAgIH1cbiAgICByZXR1cm4ge2VudGl0aWVzLCBpfTtcbn1cblxuZnVuY3Rpb24gcmVhZEVudGl0eUV4cCh4bWxEYXRhLGkpe1xuICAgIC8vRXh0ZXJuYWwgZW50aXRpZXMgYXJlIG5vdCBzdXBwb3J0ZWRcbiAgICAvLyAgICA8IUVOVElUWSBleHQgU1lTVEVNIFwiaHR0cDovL25vcm1hbC13ZWJzaXRlLmNvbVwiID5cblxuICAgIC8vUGFyYW1ldGVyIGVudGl0aWVzIGFyZSBub3Qgc3VwcG9ydGVkXG4gICAgLy8gICAgPCFFTlRJVFkgZW50aXR5bmFtZSBcIiZhbm90aGVyRWxlbWVudDtcIj5cblxuICAgIC8vSW50ZXJuYWwgZW50aXRpZXMgYXJlIHN1cHBvcnRlZFxuICAgIC8vICAgIDwhRU5USVRZIGVudGl0eW5hbWUgXCJyZXBsYWNlbWVudCB0ZXh0XCI+XG4gICAgXG4gICAgLy9yZWFkIEVudGl0eU5hbWVcbiAgICBsZXQgZW50aXR5TmFtZSA9IFwiXCI7XG4gICAgZm9yICg7IGkgPCB4bWxEYXRhLmxlbmd0aCAmJiAoeG1sRGF0YVtpXSAhPT0gXCInXCIgJiYgeG1sRGF0YVtpXSAhPT0gJ1wiJyApOyBpKyspIHtcbiAgICAgICAgLy8gaWYoeG1sRGF0YVtpXSA9PT0gXCIgXCIpIGNvbnRpbnVlO1xuICAgICAgICAvLyBlbHNlIFxuICAgICAgICBlbnRpdHlOYW1lICs9IHhtbERhdGFbaV07XG4gICAgfVxuICAgIGVudGl0eU5hbWUgPSBlbnRpdHlOYW1lLnRyaW0oKTtcbiAgICBpZihlbnRpdHlOYW1lLmluZGV4T2YoXCIgXCIpICE9PSAtMSkgdGhyb3cgbmV3IEVycm9yKFwiRXh0ZXJuYWwgZW50aXRlcyBhcmUgbm90IHN1cHBvcnRlZFwiKTtcblxuICAgIC8vcmVhZCBFbnRpdHkgVmFsdWVcbiAgICBjb25zdCBzdGFydENoYXIgPSB4bWxEYXRhW2krK107XG4gICAgbGV0IHZhbCA9IFwiXCJcbiAgICBmb3IgKDsgaSA8IHhtbERhdGEubGVuZ3RoICYmIHhtbERhdGFbaV0gIT09IHN0YXJ0Q2hhciA7IGkrKykge1xuICAgICAgICB2YWwgKz0geG1sRGF0YVtpXTtcbiAgICB9XG4gICAgcmV0dXJuIFtlbnRpdHlOYW1lLCB2YWwsIGldO1xufVxuXG5mdW5jdGlvbiBpc0NvbW1lbnQoeG1sRGF0YSwgaSl7XG4gICAgaWYoeG1sRGF0YVtpKzFdID09PSAnIScgJiZcbiAgICB4bWxEYXRhW2krMl0gPT09ICctJyAmJlxuICAgIHhtbERhdGFbaSszXSA9PT0gJy0nKSByZXR1cm4gdHJ1ZVxuICAgIHJldHVybiBmYWxzZVxufVxuZnVuY3Rpb24gaXNFbnRpdHkoeG1sRGF0YSwgaSl7XG4gICAgaWYoeG1sRGF0YVtpKzFdID09PSAnIScgJiZcbiAgICB4bWxEYXRhW2krMl0gPT09ICdFJyAmJlxuICAgIHhtbERhdGFbaSszXSA9PT0gJ04nICYmXG4gICAgeG1sRGF0YVtpKzRdID09PSAnVCcgJiZcbiAgICB4bWxEYXRhW2krNV0gPT09ICdJJyAmJlxuICAgIHhtbERhdGFbaSs2XSA9PT0gJ1QnICYmXG4gICAgeG1sRGF0YVtpKzddID09PSAnWScpIHJldHVybiB0cnVlXG4gICAgcmV0dXJuIGZhbHNlXG59XG5mdW5jdGlvbiBpc0VsZW1lbnQoeG1sRGF0YSwgaSl7XG4gICAgaWYoeG1sRGF0YVtpKzFdID09PSAnIScgJiZcbiAgICB4bWxEYXRhW2krMl0gPT09ICdFJyAmJlxuICAgIHhtbERhdGFbaSszXSA9PT0gJ0wnICYmXG4gICAgeG1sRGF0YVtpKzRdID09PSAnRScgJiZcbiAgICB4bWxEYXRhW2krNV0gPT09ICdNJyAmJlxuICAgIHhtbERhdGFbaSs2XSA9PT0gJ0UnICYmXG4gICAgeG1sRGF0YVtpKzddID09PSAnTicgJiZcbiAgICB4bWxEYXRhW2krOF0gPT09ICdUJykgcmV0dXJuIHRydWVcbiAgICByZXR1cm4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gaXNBdHRsaXN0KHhtbERhdGEsIGkpe1xuICAgIGlmKHhtbERhdGFbaSsxXSA9PT0gJyEnICYmXG4gICAgeG1sRGF0YVtpKzJdID09PSAnQScgJiZcbiAgICB4bWxEYXRhW2krM10gPT09ICdUJyAmJlxuICAgIHhtbERhdGFbaSs0XSA9PT0gJ1QnICYmXG4gICAgeG1sRGF0YVtpKzVdID09PSAnTCcgJiZcbiAgICB4bWxEYXRhW2krNl0gPT09ICdJJyAmJlxuICAgIHhtbERhdGFbaSs3XSA9PT0gJ1MnICYmXG4gICAgeG1sRGF0YVtpKzhdID09PSAnVCcpIHJldHVybiB0cnVlXG4gICAgcmV0dXJuIGZhbHNlXG59XG5mdW5jdGlvbiBpc05vdGF0aW9uKHhtbERhdGEsIGkpe1xuICAgIGlmKHhtbERhdGFbaSsxXSA9PT0gJyEnICYmXG4gICAgeG1sRGF0YVtpKzJdID09PSAnTicgJiZcbiAgICB4bWxEYXRhW2krM10gPT09ICdPJyAmJlxuICAgIHhtbERhdGFbaSs0XSA9PT0gJ1QnICYmXG4gICAgeG1sRGF0YVtpKzVdID09PSAnQScgJiZcbiAgICB4bWxEYXRhW2krNl0gPT09ICdUJyAmJlxuICAgIHhtbERhdGFbaSs3XSA9PT0gJ0knICYmXG4gICAgeG1sRGF0YVtpKzhdID09PSAnTycgJiZcbiAgICB4bWxEYXRhW2krOV0gPT09ICdOJykgcmV0dXJuIHRydWVcbiAgICByZXR1cm4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVFbnRpdHlOYW1lKG5hbWUpe1xuICAgIGlmICh1dGlsLmlzTmFtZShuYW1lKSlcblx0cmV0dXJuIG5hbWU7XG4gICAgZWxzZVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZW50aXR5IG5hbWUgJHtuYW1lfWApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHJlYWREb2NUeXBlO1xuIiwKICAgICJjb25zdCBoZXhSZWdleCA9IC9eWy0rXT8weFthLWZBLUYwLTldKyQvO1xuY29uc3QgbnVtUmVnZXggPSAvXihbXFwtXFwrXSk/KDAqKShcXC5bMC05XSsoW2VFXVxcLT9bMC05XSspP3xbMC05XSsoXFwuWzAtOV0rKFtlRV1cXC0/WzAtOV0rKT8pPykkLztcbi8vIGNvbnN0IG9jdFJlZ2V4ID0gLzB4W2EtejAtOV0rLztcbi8vIGNvbnN0IGJpblJlZ2V4ID0gLzB4W2EtejAtOV0rLztcblxuXG4vL3BvbHlmaWxsXG5pZiAoIU51bWJlci5wYXJzZUludCAmJiB3aW5kb3cucGFyc2VJbnQpIHtcbiAgICBOdW1iZXIucGFyc2VJbnQgPSB3aW5kb3cucGFyc2VJbnQ7XG59XG5pZiAoIU51bWJlci5wYXJzZUZsb2F0ICYmIHdpbmRvdy5wYXJzZUZsb2F0KSB7XG4gICAgTnVtYmVyLnBhcnNlRmxvYXQgPSB3aW5kb3cucGFyc2VGbG9hdDtcbn1cblxuICBcbmNvbnN0IGNvbnNpZGVyID0ge1xuICAgIGhleCA6ICB0cnVlLFxuICAgIGxlYWRpbmdaZXJvczogdHJ1ZSxcbiAgICBkZWNpbWFsUG9pbnQ6IFwiXFwuXCIsXG4gICAgZU5vdGF0aW9uOiB0cnVlXG4gICAgLy9za2lwTGlrZTogL3JlZ2V4L1xufTtcblxuZnVuY3Rpb24gdG9OdW1iZXIoc3RyLCBvcHRpb25zID0ge30pe1xuICAgIC8vIGNvbnN0IG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBjb25zaWRlcik7XG4gICAgLy8gaWYob3B0LmxlYWRpbmdaZXJvcyA9PT0gZmFsc2Upe1xuICAgIC8vICAgICBvcHRpb25zLmxlYWRpbmdaZXJvcyA9IGZhbHNlO1xuICAgIC8vIH1lbHNlIGlmKG9wdC5oZXggPT09IGZhbHNlKXtcbiAgICAvLyAgICAgb3B0aW9ucy5oZXggPSBmYWxzZTtcbiAgICAvLyB9XG5cbiAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgY29uc2lkZXIsIG9wdGlvbnMgKTtcbiAgICBpZighc3RyIHx8IHR5cGVvZiBzdHIgIT09IFwic3RyaW5nXCIgKSByZXR1cm4gc3RyO1xuICAgIFxuICAgIGxldCB0cmltbWVkU3RyICA9IHN0ci50cmltKCk7XG4gICAgLy8gaWYodHJpbW1lZFN0ciA9PT0gXCIwLjBcIikgcmV0dXJuIDA7XG4gICAgLy8gZWxzZSBpZih0cmltbWVkU3RyID09PSBcIiswLjBcIikgcmV0dXJuIDA7XG4gICAgLy8gZWxzZSBpZih0cmltbWVkU3RyID09PSBcIi0wLjBcIikgcmV0dXJuIC0wO1xuXG4gICAgaWYob3B0aW9ucy5za2lwTGlrZSAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbnMuc2tpcExpa2UudGVzdCh0cmltbWVkU3RyKSkgcmV0dXJuIHN0cjtcbiAgICBlbHNlIGlmIChvcHRpb25zLmhleCAmJiBoZXhSZWdleC50ZXN0KHRyaW1tZWRTdHIpKSB7XG4gICAgICAgIHJldHVybiBOdW1iZXIucGFyc2VJbnQodHJpbW1lZFN0ciwgMTYpO1xuICAgIC8vIH0gZWxzZSBpZiAob3B0aW9ucy5wYXJzZU9jdCAmJiBvY3RSZWdleC50ZXN0KHN0cikpIHtcbiAgICAvLyAgICAgcmV0dXJuIE51bWJlci5wYXJzZUludCh2YWwsIDgpO1xuICAgIC8vIH1lbHNlIGlmIChvcHRpb25zLnBhcnNlQmluICYmIGJpblJlZ2V4LnRlc3Qoc3RyKSkge1xuICAgIC8vICAgICByZXR1cm4gTnVtYmVyLnBhcnNlSW50KHZhbCwgMik7XG4gICAgfWVsc2V7XG4gICAgICAgIC8vc2VwYXJhdGUgbmVnYXRpdmUgc2lnbiwgbGVhZGluZyB6ZXJvcywgYW5kIHJlc3QgbnVtYmVyXG4gICAgICAgIGNvbnN0IG1hdGNoID0gbnVtUmVnZXguZXhlYyh0cmltbWVkU3RyKTtcbiAgICAgICAgaWYobWF0Y2gpe1xuICAgICAgICAgICAgY29uc3Qgc2lnbiA9IG1hdGNoWzFdO1xuICAgICAgICAgICAgY29uc3QgbGVhZGluZ1plcm9zID0gbWF0Y2hbMl07XG4gICAgICAgICAgICBsZXQgbnVtVHJpbW1lZEJ5WmVyb3MgPSB0cmltWmVyb3MobWF0Y2hbM10pOyAvL2NvbXBsZXRlIG51bSB3aXRob3V0IGxlYWRpbmcgemVyb3NcbiAgICAgICAgICAgIC8vdHJpbSBlbmRpbmcgemVyb3MgZm9yIGZsb2F0aW5nIG51bWJlclxuICAgICAgICAgICAgXG4gICAgICAgICAgICBjb25zdCBlTm90YXRpb24gPSBtYXRjaFs0XSB8fCBtYXRjaFs2XTtcbiAgICAgICAgICAgIGlmKCFvcHRpb25zLmxlYWRpbmdaZXJvcyAmJiBsZWFkaW5nWmVyb3MubGVuZ3RoID4gMCAmJiBzaWduICYmIHRyaW1tZWRTdHJbMl0gIT09IFwiLlwiKSByZXR1cm4gc3RyOyAvLy0wMTIzXG4gICAgICAgICAgICBlbHNlIGlmKCFvcHRpb25zLmxlYWRpbmdaZXJvcyAmJiBsZWFkaW5nWmVyb3MubGVuZ3RoID4gMCAmJiAhc2lnbiAmJiB0cmltbWVkU3RyWzFdICE9PSBcIi5cIikgcmV0dXJuIHN0cjsgLy8wMTIzXG4gICAgICAgICAgICBlbHNley8vbm8gbGVhZGluZyB6ZXJvcyBvciBsZWFkaW5nIHplcm9zIGFyZSBhbGxvd2VkXG4gICAgICAgICAgICAgICAgY29uc3QgbnVtID0gTnVtYmVyKHRyaW1tZWRTdHIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG51bVN0ciA9IFwiXCIgKyBudW07XG4gICAgICAgICAgICAgICAgaWYobnVtU3RyLnNlYXJjaCgvW2VFXS8pICE9PSAtMSl7IC8vZ2l2ZW4gbnVtYmVyIGlzIGxvbmcgYW5kIHBhcnNlZCB0byBlTm90YXRpb25cbiAgICAgICAgICAgICAgICAgICAgaWYob3B0aW9ucy5lTm90YXRpb24pIHJldHVybiBudW07XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgcmV0dXJuIHN0cjtcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZihlTm90YXRpb24peyAvL2dpdmVuIG51bWJlciBoYXMgZW5vdGF0aW9uXG4gICAgICAgICAgICAgICAgICAgIGlmKG9wdGlvbnMuZU5vdGF0aW9uKSByZXR1cm4gbnVtO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIHJldHVybiBzdHI7XG4gICAgICAgICAgICAgICAgfWVsc2UgaWYodHJpbW1lZFN0ci5pbmRleE9mKFwiLlwiKSAhPT0gLTEpeyAvL2Zsb2F0aW5nIG51bWJlclxuICAgICAgICAgICAgICAgICAgICAvLyBjb25zdCBkZWNpbWFsUGFydCA9IG1hdGNoWzVdLnN1YnN0cigxKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc3QgaW50UGFydCA9IHRyaW1tZWRTdHIuc3Vic3RyKDAsdHJpbW1lZFN0ci5pbmRleE9mKFwiLlwiKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnN0IHAgPSBudW1TdHIuaW5kZXhPZihcIi5cIik7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnN0IGdpdmVuSW50UGFydCA9IG51bVN0ci5zdWJzdHIoMCxwKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc3QgZ2l2ZW5EZWNQYXJ0ID0gbnVtU3RyLnN1YnN0cihwKzEpO1xuICAgICAgICAgICAgICAgICAgICBpZihudW1TdHIgPT09IFwiMFwiICYmIChudW1UcmltbWVkQnlaZXJvcyA9PT0gXCJcIikgKSByZXR1cm4gbnVtOyAvLzAuMFxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKG51bVN0ciA9PT0gbnVtVHJpbW1lZEJ5WmVyb3MpIHJldHVybiBudW07IC8vMC40NTYuIDAuNzkwMDBcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiggc2lnbiAmJiBudW1TdHIgPT09IFwiLVwiK251bVRyaW1tZWRCeVplcm9zKSByZXR1cm4gbnVtO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIHJldHVybiBzdHI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGlmKGxlYWRpbmdaZXJvcyl7XG4gICAgICAgICAgICAgICAgICAgIC8vIGlmKG51bVRyaW1tZWRCeVplcm9zID09PSBudW1TdHIpe1xuICAgICAgICAgICAgICAgICAgICAvLyAgICAgaWYob3B0aW9ucy5sZWFkaW5nWmVyb3MpIHJldHVybiBudW07XG4gICAgICAgICAgICAgICAgICAgIC8vICAgICBlbHNlIHJldHVybiBzdHI7XG4gICAgICAgICAgICAgICAgICAgIC8vIH1lbHNlIHJldHVybiBzdHI7XG4gICAgICAgICAgICAgICAgICAgIGlmKG51bVRyaW1tZWRCeVplcm9zID09PSBudW1TdHIpIHJldHVybiBudW07XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYoc2lnbitudW1UcmltbWVkQnlaZXJvcyA9PT0gbnVtU3RyKSByZXR1cm4gbnVtO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIHJldHVybiBzdHI7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYodHJpbW1lZFN0ciA9PT0gbnVtU3RyKSByZXR1cm4gbnVtO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYodHJpbW1lZFN0ciA9PT0gc2lnbitudW1TdHIpIHJldHVybiBudW07XG4gICAgICAgICAgICAgICAgLy8gZWxzZXtcbiAgICAgICAgICAgICAgICAvLyAgICAgLy9udW1iZXIgd2l0aCArLy0gc2lnblxuICAgICAgICAgICAgICAgIC8vICAgICB0cmltbWVkU3RyLnRlc3QoL1stK11bMC05XSk7XG5cbiAgICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0cjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGVsc2UgaWYoIWVOb3RhdGlvbiAmJiB0cmltbWVkU3RyICYmIHRyaW1tZWRTdHIgIT09IE51bWJlcih0cmltbWVkU3RyKSApIHJldHVybiBzdHI7XG4gICAgICAgICAgICBcbiAgICAgICAgfWVsc2V7IC8vbm9uLW51bWVyaWMgc3RyaW5nXG4gICAgICAgICAgICByZXR1cm4gc3RyO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vKipcbiAqIFxuICogQHBhcmFtIHtzdHJpbmd9IG51bVN0ciB3aXRob3V0IGxlYWRpbmcgemVyb3NcbiAqIEByZXR1cm5zIFxuICovXG5mdW5jdGlvbiB0cmltWmVyb3MobnVtU3RyKXtcbiAgICBpZihudW1TdHIgJiYgbnVtU3RyLmluZGV4T2YoXCIuXCIpICE9PSAtMSl7Ly9mbG9hdFxuICAgICAgICBudW1TdHIgPSBudW1TdHIucmVwbGFjZSgvMCskLywgXCJcIik7IC8vcmVtb3ZlIGVuZGluZyB6ZXJvc1xuICAgICAgICBpZihudW1TdHIgPT09IFwiLlwiKSAgbnVtU3RyID0gXCIwXCI7XG4gICAgICAgIGVsc2UgaWYobnVtU3RyWzBdID09PSBcIi5cIikgIG51bVN0ciA9IFwiMFwiK251bVN0cjtcbiAgICAgICAgZWxzZSBpZihudW1TdHJbbnVtU3RyLmxlbmd0aC0xXSA9PT0gXCIuXCIpICBudW1TdHIgPSBudW1TdHIuc3Vic3RyKDAsbnVtU3RyLmxlbmd0aC0xKTtcbiAgICAgICAgcmV0dXJuIG51bVN0cjtcbiAgICB9XG4gICAgcmV0dXJuIG51bVN0cjtcbn1cbm1vZHVsZS5leHBvcnRzID0gdG9OdW1iZXJcbiIsCiAgICAiZnVuY3Rpb24gZ2V0SWdub3JlQXR0cmlidXRlc0ZuKGlnbm9yZUF0dHJpYnV0ZXMpIHtcbiAgICBpZiAodHlwZW9mIGlnbm9yZUF0dHJpYnV0ZXMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIGlnbm9yZUF0dHJpYnV0ZXNcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaWdub3JlQXR0cmlidXRlcykpIHtcbiAgICAgICAgcmV0dXJuIChhdHRyTmFtZSkgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIGlnbm9yZUF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHBhdHRlcm4gPT09ICdzdHJpbmcnICYmIGF0dHJOYW1lID09PSBwYXR0ZXJuKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwYXR0ZXJuIGluc3RhbmNlb2YgUmVnRXhwICYmIHBhdHRlcm4udGVzdChhdHRyTmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuICgpID0+IGZhbHNlXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0SWdub3JlQXR0cmlidXRlc0ZuIiwKICAgICIndXNlIHN0cmljdCc7XG4vLy9AdHMtY2hlY2tcblxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL3V0aWwnKTtcbmNvbnN0IHhtbE5vZGUgPSByZXF1aXJlKCcuL3htbE5vZGUnKTtcbmNvbnN0IHJlYWREb2NUeXBlID0gcmVxdWlyZShcIi4vRG9jVHlwZVJlYWRlclwiKTtcbmNvbnN0IHRvTnVtYmVyID0gcmVxdWlyZShcInN0cm51bVwiKTtcbmNvbnN0IGdldElnbm9yZUF0dHJpYnV0ZXNGbiA9IHJlcXVpcmUoJy4uL2lnbm9yZUF0dHJpYnV0ZXMnKVxuXG4vLyBjb25zdCByZWd4ID1cbi8vICAgJzwoKCFcXFxcW0NEQVRBXFxcXFsoW1xcXFxzXFxcXFNdKj8pKF1dPikpfCgoTkFNRTopPyhOQU1FKSkoW14+XSopPnwoKFxcXFwvKShOQU1FKVxcXFxzKj4pKShbXjxdKiknXG4vLyAgIC5yZXBsYWNlKC9OQU1FL2csIHV0aWwubmFtZVJlZ2V4cCk7XG5cbi8vY29uc3QgdGFnc1JlZ3ggPSBuZXcgUmVnRXhwKFwiPChcXFxcLz9bXFxcXHc6XFxcXC1cXC5fXSspKFtePl0qKT4oXFxcXHMqXCIrY2RhdGFSZWd4K1wiKSooW148XSspP1wiLFwiZ1wiKTtcbi8vY29uc3QgdGFnc1JlZ3ggPSBuZXcgUmVnRXhwKFwiPChcXFxcLz8pKChcXFxcdyo6KT8oW1xcXFx3OlxcXFwtXFwuX10rKSkoW14+XSopPihbXjxdKikoXCIrY2RhdGFSZWd4K1wiKFtePF0qKSkqKFtePF0rKT9cIixcImdcIik7XG5cbmNsYXNzIE9yZGVyZWRPYmpQYXJzZXJ7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMpe1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy5jdXJyZW50Tm9kZSA9IG51bGw7XG4gICAgdGhpcy50YWdzTm9kZVN0YWNrID0gW107XG4gICAgdGhpcy5kb2NUeXBlRW50aXRpZXMgPSB7fTtcbiAgICB0aGlzLmxhc3RFbnRpdGllcyA9IHtcbiAgICAgIFwiYXBvc1wiIDogeyByZWdleDogLyYoYXBvc3wjMzl8I3gyNyk7L2csIHZhbCA6IFwiJ1wifSxcbiAgICAgIFwiZ3RcIiA6IHsgcmVnZXg6IC8mKGd0fCM2MnwjeDNFKTsvZywgdmFsIDogXCI+XCJ9LFxuICAgICAgXCJsdFwiIDogeyByZWdleDogLyYobHR8IzYwfCN4M0MpOy9nLCB2YWwgOiBcIjxcIn0sXG4gICAgICBcInF1b3RcIiA6IHsgcmVnZXg6IC8mKHF1b3R8IzM0fCN4MjIpOy9nLCB2YWwgOiBcIlxcXCJcIn0sXG4gICAgfTtcbiAgICB0aGlzLmFtcEVudGl0eSA9IHsgcmVnZXg6IC8mKGFtcHwjMzh8I3gyNik7L2csIHZhbCA6IFwiJlwifTtcbiAgICB0aGlzLmh0bWxFbnRpdGllcyA9IHtcbiAgICAgIFwic3BhY2VcIjogeyByZWdleDogLyYobmJzcHwjMTYwKTsvZywgdmFsOiBcIiBcIiB9LFxuICAgICAgLy8gXCJsdFwiIDogeyByZWdleDogLyYobHR8IzYwKTsvZywgdmFsOiBcIjxcIiB9LFxuICAgICAgLy8gXCJndFwiIDogeyByZWdleDogLyYoZ3R8IzYyKTsvZywgdmFsOiBcIj5cIiB9LFxuICAgICAgLy8gXCJhbXBcIiA6IHsgcmVnZXg6IC8mKGFtcHwjMzgpOy9nLCB2YWw6IFwiJlwiIH0sXG4gICAgICAvLyBcInF1b3RcIiA6IHsgcmVnZXg6IC8mKHF1b3R8IzM0KTsvZywgdmFsOiBcIlxcXCJcIiB9LFxuICAgICAgLy8gXCJhcG9zXCIgOiB7IHJlZ2V4OiAvJihhcG9zfCMzOSk7L2csIHZhbDogXCInXCIgfSxcbiAgICAgIFwiY2VudFwiIDogeyByZWdleDogLyYoY2VudHwjMTYyKTsvZywgdmFsOiBcIsKiXCIgfSxcbiAgICAgIFwicG91bmRcIiA6IHsgcmVnZXg6IC8mKHBvdW5kfCMxNjMpOy9nLCB2YWw6IFwiwqNcIiB9LFxuICAgICAgXCJ5ZW5cIiA6IHsgcmVnZXg6IC8mKHllbnwjMTY1KTsvZywgdmFsOiBcIsKlXCIgfSxcbiAgICAgIFwiZXVyb1wiIDogeyByZWdleDogLyYoZXVyb3wjODM2NCk7L2csIHZhbDogXCLigqxcIiB9LFxuICAgICAgXCJjb3B5cmlnaHRcIiA6IHsgcmVnZXg6IC8mKGNvcHl8IzE2OSk7L2csIHZhbDogXCLCqVwiIH0sXG4gICAgICBcInJlZ1wiIDogeyByZWdleDogLyYocmVnfCMxNzQpOy9nLCB2YWw6IFwiwq5cIiB9LFxuICAgICAgXCJpbnJcIiA6IHsgcmVnZXg6IC8mKGlucnwjODM3Nyk7L2csIHZhbDogXCLigrlcIiB9LFxuICAgICAgXCJudW1fZGVjXCI6IHsgcmVnZXg6IC8mIyhbMC05XXsxLDd9KTsvZywgdmFsIDogKF8sIHN0cikgPT4gU3RyaW5nLmZyb21DaGFyQ29kZShOdW1iZXIucGFyc2VJbnQoc3RyLCAxMCkpIH0sXG4gICAgICBcIm51bV9oZXhcIjogeyByZWdleDogLyYjeChbMC05YS1mQS1GXXsxLDZ9KTsvZywgdmFsIDogKF8sIHN0cikgPT4gU3RyaW5nLmZyb21DaGFyQ29kZShOdW1iZXIucGFyc2VJbnQoc3RyLCAxNikpIH0sXG4gICAgfTtcbiAgICB0aGlzLmFkZEV4dGVybmFsRW50aXRpZXMgPSBhZGRFeHRlcm5hbEVudGl0aWVzO1xuICAgIHRoaXMucGFyc2VYbWwgPSBwYXJzZVhtbDtcbiAgICB0aGlzLnBhcnNlVGV4dERhdGEgPSBwYXJzZVRleHREYXRhO1xuICAgIHRoaXMucmVzb2x2ZU5hbWVTcGFjZSA9IHJlc29sdmVOYW1lU3BhY2U7XG4gICAgdGhpcy5idWlsZEF0dHJpYnV0ZXNNYXAgPSBidWlsZEF0dHJpYnV0ZXNNYXA7XG4gICAgdGhpcy5pc0l0U3RvcE5vZGUgPSBpc0l0U3RvcE5vZGU7XG4gICAgdGhpcy5yZXBsYWNlRW50aXRpZXNWYWx1ZSA9IHJlcGxhY2VFbnRpdGllc1ZhbHVlO1xuICAgIHRoaXMucmVhZFN0b3BOb2RlRGF0YSA9IHJlYWRTdG9wTm9kZURhdGE7XG4gICAgdGhpcy5zYXZlVGV4dFRvUGFyZW50VGFnID0gc2F2ZVRleHRUb1BhcmVudFRhZztcbiAgICB0aGlzLmFkZENoaWxkID0gYWRkQ2hpbGQ7XG4gICAgdGhpcy5pZ25vcmVBdHRyaWJ1dGVzRm4gPSBnZXRJZ25vcmVBdHRyaWJ1dGVzRm4odGhpcy5vcHRpb25zLmlnbm9yZUF0dHJpYnV0ZXMpXG4gIH1cblxufVxuXG5mdW5jdGlvbiBhZGRFeHRlcm5hbEVudGl0aWVzKGV4dGVybmFsRW50aXRpZXMpe1xuICBjb25zdCBlbnRLZXlzID0gT2JqZWN0LmtleXMoZXh0ZXJuYWxFbnRpdGllcyk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZW50S2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGVudCA9IGVudEtleXNbaV07XG4gICAgdGhpcy5sYXN0RW50aXRpZXNbZW50XSA9IHtcbiAgICAgICByZWdleDogbmV3IFJlZ0V4cChcIiZcIitlbnQrXCI7XCIsXCJnXCIpLFxuICAgICAgIHZhbCA6IGV4dGVybmFsRW50aXRpZXNbZW50XVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWxcbiAqIEBwYXJhbSB7c3RyaW5nfSB0YWdOYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30galBhdGhcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gZG9udFRyaW1cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaGFzQXR0cmlidXRlc1xuICogQHBhcmFtIHtib29sZWFufSBpc0xlYWZOb2RlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGVzY2FwZUVudGl0aWVzXG4gKi9cbmZ1bmN0aW9uIHBhcnNlVGV4dERhdGEodmFsLCB0YWdOYW1lLCBqUGF0aCwgZG9udFRyaW0sIGhhc0F0dHJpYnV0ZXMsIGlzTGVhZk5vZGUsIGVzY2FwZUVudGl0aWVzKSB7XG4gIGlmICh2YWwgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMudHJpbVZhbHVlcyAmJiAhZG9udFRyaW0pIHtcbiAgICAgIHZhbCA9IHZhbC50cmltKCk7XG4gICAgfVxuICAgIGlmKHZhbC5sZW5ndGggPiAwKXtcbiAgICAgIGlmKCFlc2NhcGVFbnRpdGllcykgdmFsID0gdGhpcy5yZXBsYWNlRW50aXRpZXNWYWx1ZSh2YWwpO1xuICAgICAgXG4gICAgICBjb25zdCBuZXd2YWwgPSB0aGlzLm9wdGlvbnMudGFnVmFsdWVQcm9jZXNzb3IodGFnTmFtZSwgdmFsLCBqUGF0aCwgaGFzQXR0cmlidXRlcywgaXNMZWFmTm9kZSk7XG4gICAgICBpZihuZXd2YWwgPT09IG51bGwgfHwgbmV3dmFsID09PSB1bmRlZmluZWQpe1xuICAgICAgICAvL2Rvbid0IHBhcnNlXG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgICB9ZWxzZSBpZih0eXBlb2YgbmV3dmFsICE9PSB0eXBlb2YgdmFsIHx8IG5ld3ZhbCAhPT0gdmFsKXtcbiAgICAgICAgLy9vdmVyd3JpdGVcbiAgICAgICAgcmV0dXJuIG5ld3ZhbDtcbiAgICAgIH1lbHNlIGlmKHRoaXMub3B0aW9ucy50cmltVmFsdWVzKXtcbiAgICAgICAgcmV0dXJuIHBhcnNlVmFsdWUodmFsLCB0aGlzLm9wdGlvbnMucGFyc2VUYWdWYWx1ZSwgdGhpcy5vcHRpb25zLm51bWJlclBhcnNlT3B0aW9ucyk7XG4gICAgICB9ZWxzZXtcbiAgICAgICAgY29uc3QgdHJpbW1lZFZhbCA9IHZhbC50cmltKCk7XG4gICAgICAgIGlmKHRyaW1tZWRWYWwgPT09IHZhbCl7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlVmFsdWUodmFsLCB0aGlzLm9wdGlvbnMucGFyc2VUYWdWYWx1ZSwgdGhpcy5vcHRpb25zLm51bWJlclBhcnNlT3B0aW9ucyk7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgIHJldHVybiB2YWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzb2x2ZU5hbWVTcGFjZSh0YWduYW1lKSB7XG4gIGlmICh0aGlzLm9wdGlvbnMucmVtb3ZlTlNQcmVmaXgpIHtcbiAgICBjb25zdCB0YWdzID0gdGFnbmFtZS5zcGxpdCgnOicpO1xuICAgIGNvbnN0IHByZWZpeCA9IHRhZ25hbWUuY2hhckF0KDApID09PSAnLycgPyAnLycgOiAnJztcbiAgICBpZiAodGFnc1swXSA9PT0gJ3htbG5zJykge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBpZiAodGFncy5sZW5ndGggPT09IDIpIHtcbiAgICAgIHRhZ25hbWUgPSBwcmVmaXggKyB0YWdzWzFdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdGFnbmFtZTtcbn1cblxuLy9UT0RPOiBjaGFuZ2UgcmVnZXggdG8gY2FwdHVyZSBOU1xuLy9jb25zdCBhdHRyc1JlZ3ggPSBuZXcgUmVnRXhwKFwiKFtcXFxcd1xcXFwtXFxcXC5cXFxcOl0rKVxcXFxzKj1cXFxccyooWydcXFwiXSkoKC58XFxuKSo/KVxcXFwyXCIsXCJnbVwiKTtcbmNvbnN0IGF0dHJzUmVneCA9IG5ldyBSZWdFeHAoJyhbXlxcXFxzPV0rKVxcXFxzKig9XFxcXHMqKFtcXCdcIl0pKFtcXFxcc1xcXFxTXSo/KVxcXFwzKT8nLCAnZ20nKTtcblxuZnVuY3Rpb24gYnVpbGRBdHRyaWJ1dGVzTWFwKGF0dHJTdHIsIGpQYXRoLCB0YWdOYW1lKSB7XG4gIGlmICh0aGlzLm9wdGlvbnMuaWdub3JlQXR0cmlidXRlcyAhPT0gdHJ1ZSAmJiB0eXBlb2YgYXR0clN0ciA9PT0gJ3N0cmluZycpIHtcbiAgICAvLyBhdHRyU3RyID0gYXR0clN0ci5yZXBsYWNlKC9cXHI/XFxuL2csICcgJyk7XG4gICAgLy9hdHRyU3RyID0gYXR0clN0ciB8fCBhdHRyU3RyLnRyaW0oKTtcblxuICAgIGNvbnN0IG1hdGNoZXMgPSB1dGlsLmdldEFsbE1hdGNoZXMoYXR0clN0ciwgYXR0cnNSZWd4KTtcbiAgICBjb25zdCBsZW4gPSBtYXRjaGVzLmxlbmd0aDsgLy9kb24ndCBtYWtlIGl0IGlubGluZVxuICAgIGNvbnN0IGF0dHJzID0ge307XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgY29uc3QgYXR0ck5hbWUgPSB0aGlzLnJlc29sdmVOYW1lU3BhY2UobWF0Y2hlc1tpXVsxXSk7XG4gICAgICBpZiAodGhpcy5pZ25vcmVBdHRyaWJ1dGVzRm4oYXR0ck5hbWUsIGpQYXRoKSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgbGV0IG9sZFZhbCA9IG1hdGNoZXNbaV1bNF07XG4gICAgICBsZXQgYU5hbWUgPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlTmFtZVByZWZpeCArIGF0dHJOYW1lO1xuICAgICAgaWYgKGF0dHJOYW1lLmxlbmd0aCkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnRyYW5zZm9ybUF0dHJpYnV0ZU5hbWUpIHtcbiAgICAgICAgICBhTmFtZSA9IHRoaXMub3B0aW9ucy50cmFuc2Zvcm1BdHRyaWJ1dGVOYW1lKGFOYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBpZihhTmFtZSA9PT0gXCJfX3Byb3RvX19cIikgYU5hbWUgID0gXCIjX19wcm90b19fXCI7XG4gICAgICAgIGlmIChvbGRWYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMudHJpbVZhbHVlcykge1xuICAgICAgICAgICAgb2xkVmFsID0gb2xkVmFsLnRyaW0oKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb2xkVmFsID0gdGhpcy5yZXBsYWNlRW50aXRpZXNWYWx1ZShvbGRWYWwpO1xuICAgICAgICAgIGNvbnN0IG5ld1ZhbCA9IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVWYWx1ZVByb2Nlc3NvcihhdHRyTmFtZSwgb2xkVmFsLCBqUGF0aCk7XG4gICAgICAgICAgaWYobmV3VmFsID09PSBudWxsIHx8IG5ld1ZhbCA9PT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgIC8vZG9uJ3QgcGFyc2VcbiAgICAgICAgICAgIGF0dHJzW2FOYW1lXSA9IG9sZFZhbDtcbiAgICAgICAgICB9ZWxzZSBpZih0eXBlb2YgbmV3VmFsICE9PSB0eXBlb2Ygb2xkVmFsIHx8IG5ld1ZhbCAhPT0gb2xkVmFsKXtcbiAgICAgICAgICAgIC8vb3ZlcndyaXRlXG4gICAgICAgICAgICBhdHRyc1thTmFtZV0gPSBuZXdWYWw7XG4gICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAvL3BhcnNlXG4gICAgICAgICAgICBhdHRyc1thTmFtZV0gPSBwYXJzZVZhbHVlKFxuICAgICAgICAgICAgICBvbGRWYWwsXG4gICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5wYXJzZUF0dHJpYnV0ZVZhbHVlLFxuICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMubnVtYmVyUGFyc2VPcHRpb25zXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMuYWxsb3dCb29sZWFuQXR0cmlidXRlcykge1xuICAgICAgICAgIGF0dHJzW2FOYW1lXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFPYmplY3Qua2V5cyhhdHRycykubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdGlvbnMuYXR0cmlidXRlc0dyb3VwTmFtZSkge1xuICAgICAgY29uc3QgYXR0ckNvbGxlY3Rpb24gPSB7fTtcbiAgICAgIGF0dHJDb2xsZWN0aW9uW3RoaXMub3B0aW9ucy5hdHRyaWJ1dGVzR3JvdXBOYW1lXSA9IGF0dHJzO1xuICAgICAgcmV0dXJuIGF0dHJDb2xsZWN0aW9uO1xuICAgIH1cbiAgICByZXR1cm4gYXR0cnNcbiAgfVxufVxuXG5jb25zdCBwYXJzZVhtbCA9IGZ1bmN0aW9uKHhtbERhdGEpIHtcbiAgeG1sRGF0YSA9IHhtbERhdGEucmVwbGFjZSgvXFxyXFxuPy9nLCBcIlxcblwiKTsgLy9UT0RPOiByZW1vdmUgdGhpcyBsaW5lXG4gIGNvbnN0IHhtbE9iaiA9IG5ldyB4bWxOb2RlKCcheG1sJyk7XG4gIGxldCBjdXJyZW50Tm9kZSA9IHhtbE9iajtcbiAgbGV0IHRleHREYXRhID0gXCJcIjtcbiAgbGV0IGpQYXRoID0gXCJcIjtcbiAgZm9yKGxldCBpPTA7IGk8IHhtbERhdGEubGVuZ3RoOyBpKyspey8vZm9yIGVhY2ggY2hhciBpbiBYTUwgZGF0YVxuICAgIGNvbnN0IGNoID0geG1sRGF0YVtpXTtcbiAgICBpZihjaCA9PT0gJzwnKXtcbiAgICAgIC8vIGNvbnN0IG5leHRJbmRleCA9IGkrMTtcbiAgICAgIC8vIGNvbnN0IF8ybmRDaGFyID0geG1sRGF0YVtuZXh0SW5kZXhdO1xuICAgICAgaWYoIHhtbERhdGFbaSsxXSA9PT0gJy8nKSB7Ly9DbG9zaW5nIFRhZ1xuICAgICAgICBjb25zdCBjbG9zZUluZGV4ID0gZmluZENsb3NpbmdJbmRleCh4bWxEYXRhLCBcIj5cIiwgaSwgXCJDbG9zaW5nIFRhZyBpcyBub3QgY2xvc2VkLlwiKVxuICAgICAgICBsZXQgdGFnTmFtZSA9IHhtbERhdGEuc3Vic3RyaW5nKGkrMixjbG9zZUluZGV4KS50cmltKCk7XG5cbiAgICAgICAgaWYodGhpcy5vcHRpb25zLnJlbW92ZU5TUHJlZml4KXtcbiAgICAgICAgICBjb25zdCBjb2xvbkluZGV4ID0gdGFnTmFtZS5pbmRleE9mKFwiOlwiKTtcbiAgICAgICAgICBpZihjb2xvbkluZGV4ICE9PSAtMSl7XG4gICAgICAgICAgICB0YWdOYW1lID0gdGFnTmFtZS5zdWJzdHIoY29sb25JbmRleCsxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZih0aGlzLm9wdGlvbnMudHJhbnNmb3JtVGFnTmFtZSkge1xuICAgICAgICAgIHRhZ05hbWUgPSB0aGlzLm9wdGlvbnMudHJhbnNmb3JtVGFnTmFtZSh0YWdOYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKGN1cnJlbnROb2RlKXtcbiAgICAgICAgICB0ZXh0RGF0YSA9IHRoaXMuc2F2ZVRleHRUb1BhcmVudFRhZyh0ZXh0RGF0YSwgY3VycmVudE5vZGUsIGpQYXRoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vY2hlY2sgaWYgbGFzdCB0YWcgb2YgbmVzdGVkIHRhZyB3YXMgdW5wYWlyZWQgdGFnXG4gICAgICAgIGNvbnN0IGxhc3RUYWdOYW1lID0galBhdGguc3Vic3RyaW5nKGpQYXRoLmxhc3RJbmRleE9mKFwiLlwiKSsxKTtcbiAgICAgICAgaWYodGFnTmFtZSAmJiB0aGlzLm9wdGlvbnMudW5wYWlyZWRUYWdzLmluZGV4T2YodGFnTmFtZSkgIT09IC0xICl7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnBhaXJlZCB0YWcgY2FuIG5vdCBiZSB1c2VkIGFzIGNsb3NpbmcgdGFnOiA8LyR7dGFnTmFtZX0+YCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHByb3BJbmRleCA9IDBcbiAgICAgICAgaWYobGFzdFRhZ05hbWUgJiYgdGhpcy5vcHRpb25zLnVucGFpcmVkVGFncy5pbmRleE9mKGxhc3RUYWdOYW1lKSAhPT0gLTEgKXtcbiAgICAgICAgICBwcm9wSW5kZXggPSBqUGF0aC5sYXN0SW5kZXhPZignLicsIGpQYXRoLmxhc3RJbmRleE9mKCcuJyktMSlcbiAgICAgICAgICB0aGlzLnRhZ3NOb2RlU3RhY2sucG9wKCk7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgIHByb3BJbmRleCA9IGpQYXRoLmxhc3RJbmRleE9mKFwiLlwiKTtcbiAgICAgICAgfVxuICAgICAgICBqUGF0aCA9IGpQYXRoLnN1YnN0cmluZygwLCBwcm9wSW5kZXgpO1xuXG4gICAgICAgIGN1cnJlbnROb2RlID0gdGhpcy50YWdzTm9kZVN0YWNrLnBvcCgpOy8vYXZvaWQgcmVjdXJzaW9uLCBzZXQgdGhlIHBhcmVudCB0YWcgc2NvcGVcbiAgICAgICAgdGV4dERhdGEgPSBcIlwiO1xuICAgICAgICBpID0gY2xvc2VJbmRleDtcbiAgICAgIH0gZWxzZSBpZiggeG1sRGF0YVtpKzFdID09PSAnPycpIHtcblxuICAgICAgICBsZXQgdGFnRGF0YSA9IHJlYWRUYWdFeHAoeG1sRGF0YSxpLCBmYWxzZSwgXCI/PlwiKTtcbiAgICAgICAgaWYoIXRhZ0RhdGEpIHRocm93IG5ldyBFcnJvcihcIlBpIFRhZyBpcyBub3QgY2xvc2VkLlwiKTtcblxuICAgICAgICB0ZXh0RGF0YSA9IHRoaXMuc2F2ZVRleHRUb1BhcmVudFRhZyh0ZXh0RGF0YSwgY3VycmVudE5vZGUsIGpQYXRoKTtcbiAgICAgICAgaWYoICh0aGlzLm9wdGlvbnMuaWdub3JlRGVjbGFyYXRpb24gJiYgdGFnRGF0YS50YWdOYW1lID09PSBcIj94bWxcIikgfHwgdGhpcy5vcHRpb25zLmlnbm9yZVBpVGFncyl7XG5cbiAgICAgICAgfWVsc2V7XG4gIFxuICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IG5ldyB4bWxOb2RlKHRhZ0RhdGEudGFnTmFtZSk7XG4gICAgICAgICAgY2hpbGROb2RlLmFkZCh0aGlzLm9wdGlvbnMudGV4dE5vZGVOYW1lLCBcIlwiKTtcbiAgICAgICAgICBcbiAgICAgICAgICBpZih0YWdEYXRhLnRhZ05hbWUgIT09IHRhZ0RhdGEudGFnRXhwICYmIHRhZ0RhdGEuYXR0ckV4cFByZXNlbnQpe1xuICAgICAgICAgICAgY2hpbGROb2RlW1wiOkBcIl0gPSB0aGlzLmJ1aWxkQXR0cmlidXRlc01hcCh0YWdEYXRhLnRhZ0V4cCwgalBhdGgsIHRhZ0RhdGEudGFnTmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuYWRkQ2hpbGQoY3VycmVudE5vZGUsIGNoaWxkTm9kZSwgalBhdGgpXG5cbiAgICAgICAgfVxuXG5cbiAgICAgICAgaSA9IHRhZ0RhdGEuY2xvc2VJbmRleCArIDE7XG4gICAgICB9IGVsc2UgaWYoeG1sRGF0YS5zdWJzdHIoaSArIDEsIDMpID09PSAnIS0tJykge1xuICAgICAgICBjb25zdCBlbmRJbmRleCA9IGZpbmRDbG9zaW5nSW5kZXgoeG1sRGF0YSwgXCItLT5cIiwgaSs0LCBcIkNvbW1lbnQgaXMgbm90IGNsb3NlZC5cIilcbiAgICAgICAgaWYodGhpcy5vcHRpb25zLmNvbW1lbnRQcm9wTmFtZSl7XG4gICAgICAgICAgY29uc3QgY29tbWVudCA9IHhtbERhdGEuc3Vic3RyaW5nKGkgKyA0LCBlbmRJbmRleCAtIDIpO1xuXG4gICAgICAgICAgdGV4dERhdGEgPSB0aGlzLnNhdmVUZXh0VG9QYXJlbnRUYWcodGV4dERhdGEsIGN1cnJlbnROb2RlLCBqUGF0aCk7XG5cbiAgICAgICAgICBjdXJyZW50Tm9kZS5hZGQodGhpcy5vcHRpb25zLmNvbW1lbnRQcm9wTmFtZSwgWyB7IFt0aGlzLm9wdGlvbnMudGV4dE5vZGVOYW1lXSA6IGNvbW1lbnQgfSBdKTtcbiAgICAgICAgfVxuICAgICAgICBpID0gZW5kSW5kZXg7XG4gICAgICB9IGVsc2UgaWYoIHhtbERhdGEuc3Vic3RyKGkgKyAxLCAyKSA9PT0gJyFEJykge1xuICAgICAgICBjb25zdCByZXN1bHQgPSByZWFkRG9jVHlwZSh4bWxEYXRhLCBpKTtcbiAgICAgICAgdGhpcy5kb2NUeXBlRW50aXRpZXMgPSByZXN1bHQuZW50aXRpZXM7XG4gICAgICAgIGkgPSByZXN1bHQuaTtcbiAgICAgIH1lbHNlIGlmKHhtbERhdGEuc3Vic3RyKGkgKyAxLCAyKSA9PT0gJyFbJykge1xuICAgICAgICBjb25zdCBjbG9zZUluZGV4ID0gZmluZENsb3NpbmdJbmRleCh4bWxEYXRhLCBcIl1dPlwiLCBpLCBcIkNEQVRBIGlzIG5vdCBjbG9zZWQuXCIpIC0gMjtcbiAgICAgICAgY29uc3QgdGFnRXhwID0geG1sRGF0YS5zdWJzdHJpbmcoaSArIDksY2xvc2VJbmRleCk7XG5cbiAgICAgICAgdGV4dERhdGEgPSB0aGlzLnNhdmVUZXh0VG9QYXJlbnRUYWcodGV4dERhdGEsIGN1cnJlbnROb2RlLCBqUGF0aCk7XG5cbiAgICAgICAgbGV0IHZhbCA9IHRoaXMucGFyc2VUZXh0RGF0YSh0YWdFeHAsIGN1cnJlbnROb2RlLnRhZ25hbWUsIGpQYXRoLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgIGlmKHZhbCA9PSB1bmRlZmluZWQpIHZhbCA9IFwiXCI7XG5cbiAgICAgICAgLy9jZGF0YSBzaG91bGQgYmUgc2V0IGV2ZW4gaWYgaXQgaXMgMCBsZW5ndGggc3RyaW5nXG4gICAgICAgIGlmKHRoaXMub3B0aW9ucy5jZGF0YVByb3BOYW1lKXtcbiAgICAgICAgICBjdXJyZW50Tm9kZS5hZGQodGhpcy5vcHRpb25zLmNkYXRhUHJvcE5hbWUsIFsgeyBbdGhpcy5vcHRpb25zLnRleHROb2RlTmFtZV0gOiB0YWdFeHAgfSBdKTtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgY3VycmVudE5vZGUuYWRkKHRoaXMub3B0aW9ucy50ZXh0Tm9kZU5hbWUsIHZhbCk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGkgPSBjbG9zZUluZGV4ICsgMjtcbiAgICAgIH1lbHNlIHsvL09wZW5pbmcgdGFnXG4gICAgICAgIGxldCByZXN1bHQgPSByZWFkVGFnRXhwKHhtbERhdGEsaSwgdGhpcy5vcHRpb25zLnJlbW92ZU5TUHJlZml4KTtcbiAgICAgICAgbGV0IHRhZ05hbWU9IHJlc3VsdC50YWdOYW1lO1xuICAgICAgICBjb25zdCByYXdUYWdOYW1lID0gcmVzdWx0LnJhd1RhZ05hbWU7XG4gICAgICAgIGxldCB0YWdFeHAgPSByZXN1bHQudGFnRXhwO1xuICAgICAgICBsZXQgYXR0ckV4cFByZXNlbnQgPSByZXN1bHQuYXR0ckV4cFByZXNlbnQ7XG4gICAgICAgIGxldCBjbG9zZUluZGV4ID0gcmVzdWx0LmNsb3NlSW5kZXg7XG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy50cmFuc2Zvcm1UYWdOYW1lKSB7XG4gICAgICAgICAgdGFnTmFtZSA9IHRoaXMub3B0aW9ucy50cmFuc2Zvcm1UYWdOYW1lKHRhZ05hbWUpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvL3NhdmUgdGV4dCBhcyBjaGlsZCBub2RlXG4gICAgICAgIGlmIChjdXJyZW50Tm9kZSAmJiB0ZXh0RGF0YSkge1xuICAgICAgICAgIGlmKGN1cnJlbnROb2RlLnRhZ25hbWUgIT09ICcheG1sJyl7XG4gICAgICAgICAgICAvL3doZW4gbmVzdGVkIHRhZyBpcyBmb3VuZFxuICAgICAgICAgICAgdGV4dERhdGEgPSB0aGlzLnNhdmVUZXh0VG9QYXJlbnRUYWcodGV4dERhdGEsIGN1cnJlbnROb2RlLCBqUGF0aCwgZmFsc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vY2hlY2sgaWYgbGFzdCB0YWcgd2FzIHVucGFpcmVkIHRhZ1xuICAgICAgICBjb25zdCBsYXN0VGFnID0gY3VycmVudE5vZGU7XG4gICAgICAgIGlmKGxhc3RUYWcgJiYgdGhpcy5vcHRpb25zLnVucGFpcmVkVGFncy5pbmRleE9mKGxhc3RUYWcudGFnbmFtZSkgIT09IC0xICl7XG4gICAgICAgICAgY3VycmVudE5vZGUgPSB0aGlzLnRhZ3NOb2RlU3RhY2sucG9wKCk7XG4gICAgICAgICAgalBhdGggPSBqUGF0aC5zdWJzdHJpbmcoMCwgalBhdGgubGFzdEluZGV4T2YoXCIuXCIpKTtcbiAgICAgICAgfVxuICAgICAgICBpZih0YWdOYW1lICE9PSB4bWxPYmoudGFnbmFtZSl7XG4gICAgICAgICAgalBhdGggKz0galBhdGggPyBcIi5cIiArIHRhZ05hbWUgOiB0YWdOYW1lO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzSXRTdG9wTm9kZSh0aGlzLm9wdGlvbnMuc3RvcE5vZGVzLCBqUGF0aCwgdGFnTmFtZSkpIHtcbiAgICAgICAgICBsZXQgdGFnQ29udGVudCA9IFwiXCI7XG4gICAgICAgICAgLy9zZWxmLWNsb3NpbmcgdGFnXG4gICAgICAgICAgaWYodGFnRXhwLmxlbmd0aCA+IDAgJiYgdGFnRXhwLmxhc3RJbmRleE9mKFwiL1wiKSA9PT0gdGFnRXhwLmxlbmd0aCAtIDEpe1xuICAgICAgICAgICAgaWYodGFnTmFtZVt0YWdOYW1lLmxlbmd0aCAtIDFdID09PSBcIi9cIil7IC8vcmVtb3ZlIHRyYWlsaW5nICcvJ1xuICAgICAgICAgICAgICB0YWdOYW1lID0gdGFnTmFtZS5zdWJzdHIoMCwgdGFnTmFtZS5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgICAgalBhdGggPSBqUGF0aC5zdWJzdHIoMCwgalBhdGgubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAgIHRhZ0V4cCA9IHRhZ05hbWU7XG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgdGFnRXhwID0gdGFnRXhwLnN1YnN0cigwLCB0YWdFeHAubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpID0gcmVzdWx0LmNsb3NlSW5kZXg7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vdW5wYWlyZWQgdGFnXG4gICAgICAgICAgZWxzZSBpZih0aGlzLm9wdGlvbnMudW5wYWlyZWRUYWdzLmluZGV4T2YodGFnTmFtZSkgIT09IC0xKXtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaSA9IHJlc3VsdC5jbG9zZUluZGV4O1xuICAgICAgICAgIH1cbiAgICAgICAgICAvL25vcm1hbCB0YWdcbiAgICAgICAgICBlbHNle1xuICAgICAgICAgICAgLy9yZWFkIHVudGlsIGNsb3NpbmcgdGFnIGlzIGZvdW5kXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLnJlYWRTdG9wTm9kZURhdGEoeG1sRGF0YSwgcmF3VGFnTmFtZSwgY2xvc2VJbmRleCArIDEpO1xuICAgICAgICAgICAgaWYoIXJlc3VsdCkgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIGVuZCBvZiAke3Jhd1RhZ05hbWV9YCk7XG4gICAgICAgICAgICBpID0gcmVzdWx0Lmk7XG4gICAgICAgICAgICB0YWdDb250ZW50ID0gcmVzdWx0LnRhZ0NvbnRlbnQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgY2hpbGROb2RlID0gbmV3IHhtbE5vZGUodGFnTmFtZSk7XG4gICAgICAgICAgaWYodGFnTmFtZSAhPT0gdGFnRXhwICYmIGF0dHJFeHBQcmVzZW50KXtcbiAgICAgICAgICAgIGNoaWxkTm9kZVtcIjpAXCJdID0gdGhpcy5idWlsZEF0dHJpYnV0ZXNNYXAodGFnRXhwLCBqUGF0aCwgdGFnTmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmKHRhZ0NvbnRlbnQpIHtcbiAgICAgICAgICAgIHRhZ0NvbnRlbnQgPSB0aGlzLnBhcnNlVGV4dERhdGEodGFnQ29udGVudCwgdGFnTmFtZSwgalBhdGgsIHRydWUsIGF0dHJFeHBQcmVzZW50LCB0cnVlLCB0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgalBhdGggPSBqUGF0aC5zdWJzdHIoMCwgalBhdGgubGFzdEluZGV4T2YoXCIuXCIpKTtcbiAgICAgICAgICBjaGlsZE5vZGUuYWRkKHRoaXMub3B0aW9ucy50ZXh0Tm9kZU5hbWUsIHRhZ0NvbnRlbnQpO1xuICAgICAgICAgIFxuICAgICAgICAgIHRoaXMuYWRkQ2hpbGQoY3VycmVudE5vZGUsIGNoaWxkTm9kZSwgalBhdGgpXG4gICAgICAgIH1lbHNle1xuICAvL3NlbGZDbG9zaW5nIHRhZ1xuICAgICAgICAgIGlmKHRhZ0V4cC5sZW5ndGggPiAwICYmIHRhZ0V4cC5sYXN0SW5kZXhPZihcIi9cIikgPT09IHRhZ0V4cC5sZW5ndGggLSAxKXtcbiAgICAgICAgICAgIGlmKHRhZ05hbWVbdGFnTmFtZS5sZW5ndGggLSAxXSA9PT0gXCIvXCIpeyAvL3JlbW92ZSB0cmFpbGluZyAnLydcbiAgICAgICAgICAgICAgdGFnTmFtZSA9IHRhZ05hbWUuc3Vic3RyKDAsIHRhZ05hbWUubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAgIGpQYXRoID0galBhdGguc3Vic3RyKDAsIGpQYXRoLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgICB0YWdFeHAgPSB0YWdOYW1lO1xuICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgIHRhZ0V4cCA9IHRhZ0V4cC5zdWJzdHIoMCwgdGFnRXhwLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZih0aGlzLm9wdGlvbnMudHJhbnNmb3JtVGFnTmFtZSkge1xuICAgICAgICAgICAgICB0YWdOYW1lID0gdGhpcy5vcHRpb25zLnRyYW5zZm9ybVRhZ05hbWUodGFnTmFtZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IG5ldyB4bWxOb2RlKHRhZ05hbWUpO1xuICAgICAgICAgICAgaWYodGFnTmFtZSAhPT0gdGFnRXhwICYmIGF0dHJFeHBQcmVzZW50KXtcbiAgICAgICAgICAgICAgY2hpbGROb2RlW1wiOkBcIl0gPSB0aGlzLmJ1aWxkQXR0cmlidXRlc01hcCh0YWdFeHAsIGpQYXRoLCB0YWdOYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYWRkQ2hpbGQoY3VycmVudE5vZGUsIGNoaWxkTm9kZSwgalBhdGgpXG4gICAgICAgICAgICBqUGF0aCA9IGpQYXRoLnN1YnN0cigwLCBqUGF0aC5sYXN0SW5kZXhPZihcIi5cIikpO1xuICAgICAgICAgIH1cbiAgICAvL29wZW5pbmcgdGFnXG4gICAgICAgICAgZWxzZXtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IG5ldyB4bWxOb2RlKCB0YWdOYW1lKTtcbiAgICAgICAgICAgIHRoaXMudGFnc05vZGVTdGFjay5wdXNoKGN1cnJlbnROb2RlKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYodGFnTmFtZSAhPT0gdGFnRXhwICYmIGF0dHJFeHBQcmVzZW50KXtcbiAgICAgICAgICAgICAgY2hpbGROb2RlW1wiOkBcIl0gPSB0aGlzLmJ1aWxkQXR0cmlidXRlc01hcCh0YWdFeHAsIGpQYXRoLCB0YWdOYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYWRkQ2hpbGQoY3VycmVudE5vZGUsIGNoaWxkTm9kZSwgalBhdGgpXG4gICAgICAgICAgICBjdXJyZW50Tm9kZSA9IGNoaWxkTm9kZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGV4dERhdGEgPSBcIlwiO1xuICAgICAgICAgIGkgPSBjbG9zZUluZGV4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfWVsc2V7XG4gICAgICB0ZXh0RGF0YSArPSB4bWxEYXRhW2ldO1xuICAgIH1cbiAgfVxuICByZXR1cm4geG1sT2JqLmNoaWxkO1xufVxuXG5mdW5jdGlvbiBhZGRDaGlsZChjdXJyZW50Tm9kZSwgY2hpbGROb2RlLCBqUGF0aCl7XG4gIGNvbnN0IHJlc3VsdCA9IHRoaXMub3B0aW9ucy51cGRhdGVUYWcoY2hpbGROb2RlLnRhZ25hbWUsIGpQYXRoLCBjaGlsZE5vZGVbXCI6QFwiXSlcbiAgaWYocmVzdWx0ID09PSBmYWxzZSl7XG4gIH1lbHNlIGlmKHR5cGVvZiByZXN1bHQgPT09IFwic3RyaW5nXCIpe1xuICAgIGNoaWxkTm9kZS50YWduYW1lID0gcmVzdWx0XG4gICAgY3VycmVudE5vZGUuYWRkQ2hpbGQoY2hpbGROb2RlKTtcbiAgfWVsc2V7XG4gICAgY3VycmVudE5vZGUuYWRkQ2hpbGQoY2hpbGROb2RlKTtcbiAgfVxufVxuXG5jb25zdCByZXBsYWNlRW50aXRpZXNWYWx1ZSA9IGZ1bmN0aW9uKHZhbCl7XG5cbiAgaWYodGhpcy5vcHRpb25zLnByb2Nlc3NFbnRpdGllcyl7XG4gICAgZm9yKGxldCBlbnRpdHlOYW1lIGluIHRoaXMuZG9jVHlwZUVudGl0aWVzKXtcbiAgICAgIGNvbnN0IGVudGl0eSA9IHRoaXMuZG9jVHlwZUVudGl0aWVzW2VudGl0eU5hbWVdO1xuICAgICAgdmFsID0gdmFsLnJlcGxhY2UoIGVudGl0eS5yZWd4LCBlbnRpdHkudmFsKTtcbiAgICB9XG4gICAgZm9yKGxldCBlbnRpdHlOYW1lIGluIHRoaXMubGFzdEVudGl0aWVzKXtcbiAgICAgIGNvbnN0IGVudGl0eSA9IHRoaXMubGFzdEVudGl0aWVzW2VudGl0eU5hbWVdO1xuICAgICAgdmFsID0gdmFsLnJlcGxhY2UoIGVudGl0eS5yZWdleCwgZW50aXR5LnZhbCk7XG4gICAgfVxuICAgIGlmKHRoaXMub3B0aW9ucy5odG1sRW50aXRpZXMpe1xuICAgICAgZm9yKGxldCBlbnRpdHlOYW1lIGluIHRoaXMuaHRtbEVudGl0aWVzKXtcbiAgICAgICAgY29uc3QgZW50aXR5ID0gdGhpcy5odG1sRW50aXRpZXNbZW50aXR5TmFtZV07XG4gICAgICAgIHZhbCA9IHZhbC5yZXBsYWNlKCBlbnRpdHkucmVnZXgsIGVudGl0eS52YWwpO1xuICAgICAgfVxuICAgIH1cbiAgICB2YWwgPSB2YWwucmVwbGFjZSggdGhpcy5hbXBFbnRpdHkucmVnZXgsIHRoaXMuYW1wRW50aXR5LnZhbCk7XG4gIH1cbiAgcmV0dXJuIHZhbDtcbn1cbmZ1bmN0aW9uIHNhdmVUZXh0VG9QYXJlbnRUYWcodGV4dERhdGEsIGN1cnJlbnROb2RlLCBqUGF0aCwgaXNMZWFmTm9kZSkge1xuICBpZiAodGV4dERhdGEpIHsgLy9zdG9yZSBwcmV2aW91c2x5IGNvbGxlY3RlZCBkYXRhIGFzIHRleHROb2RlXG4gICAgaWYoaXNMZWFmTm9kZSA9PT0gdW5kZWZpbmVkKSBpc0xlYWZOb2RlID0gT2JqZWN0LmtleXMoY3VycmVudE5vZGUuY2hpbGQpLmxlbmd0aCA9PT0gMFxuICAgIFxuICAgIHRleHREYXRhID0gdGhpcy5wYXJzZVRleHREYXRhKHRleHREYXRhLFxuICAgICAgY3VycmVudE5vZGUudGFnbmFtZSxcbiAgICAgIGpQYXRoLFxuICAgICAgZmFsc2UsXG4gICAgICBjdXJyZW50Tm9kZVtcIjpAXCJdID8gT2JqZWN0LmtleXMoY3VycmVudE5vZGVbXCI6QFwiXSkubGVuZ3RoICE9PSAwIDogZmFsc2UsXG4gICAgICBpc0xlYWZOb2RlKTtcblxuICAgIGlmICh0ZXh0RGF0YSAhPT0gdW5kZWZpbmVkICYmIHRleHREYXRhICE9PSBcIlwiKVxuICAgICAgY3VycmVudE5vZGUuYWRkKHRoaXMub3B0aW9ucy50ZXh0Tm9kZU5hbWUsIHRleHREYXRhKTtcbiAgICB0ZXh0RGF0YSA9IFwiXCI7XG4gIH1cbiAgcmV0dXJuIHRleHREYXRhO1xufVxuXG4vL1RPRE86IHVzZSBqUGF0aCB0byBzaW1wbGlmeSB0aGUgbG9naWNcbi8qKlxuICogXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBzdG9wTm9kZXMgXG4gKiBAcGFyYW0ge3N0cmluZ30galBhdGhcbiAqIEBwYXJhbSB7c3RyaW5nfSBjdXJyZW50VGFnTmFtZSBcbiAqL1xuZnVuY3Rpb24gaXNJdFN0b3BOb2RlKHN0b3BOb2RlcywgalBhdGgsIGN1cnJlbnRUYWdOYW1lKXtcbiAgY29uc3QgYWxsTm9kZXNFeHAgPSBcIiouXCIgKyBjdXJyZW50VGFnTmFtZTtcbiAgZm9yIChjb25zdCBzdG9wTm9kZVBhdGggaW4gc3RvcE5vZGVzKSB7XG4gICAgY29uc3Qgc3RvcE5vZGVFeHAgPSBzdG9wTm9kZXNbc3RvcE5vZGVQYXRoXTtcbiAgICBpZiggYWxsTm9kZXNFeHAgPT09IHN0b3BOb2RlRXhwIHx8IGpQYXRoID09PSBzdG9wTm9kZUV4cCAgKSByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgdGFnIEV4cHJlc3Npb24gYW5kIHdoZXJlIGl0IGlzIGVuZGluZyBoYW5kbGluZyBzaW5nbGUtZG91YmxlIHF1b3RlcyBzaXR1YXRpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSB4bWxEYXRhIFxuICogQHBhcmFtIHtudW1iZXJ9IGkgc3RhcnRpbmcgaW5kZXhcbiAqIEByZXR1cm5zIFxuICovXG5mdW5jdGlvbiB0YWdFeHBXaXRoQ2xvc2luZ0luZGV4KHhtbERhdGEsIGksIGNsb3NpbmdDaGFyID0gXCI+XCIpe1xuICBsZXQgYXR0ckJvdW5kYXJ5O1xuICBsZXQgdGFnRXhwID0gXCJcIjtcbiAgZm9yIChsZXQgaW5kZXggPSBpOyBpbmRleCA8IHhtbERhdGEubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgbGV0IGNoID0geG1sRGF0YVtpbmRleF07XG4gICAgaWYgKGF0dHJCb3VuZGFyeSkge1xuICAgICAgICBpZiAoY2ggPT09IGF0dHJCb3VuZGFyeSkgYXR0ckJvdW5kYXJ5ID0gXCJcIjsvL3Jlc2V0XG4gICAgfSBlbHNlIGlmIChjaCA9PT0gJ1wiJyB8fCBjaCA9PT0gXCInXCIpIHtcbiAgICAgICAgYXR0ckJvdW5kYXJ5ID0gY2g7XG4gICAgfSBlbHNlIGlmIChjaCA9PT0gY2xvc2luZ0NoYXJbMF0pIHtcbiAgICAgIGlmKGNsb3NpbmdDaGFyWzFdKXtcbiAgICAgICAgaWYoeG1sRGF0YVtpbmRleCArIDFdID09PSBjbG9zaW5nQ2hhclsxXSl7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRhdGE6IHRhZ0V4cCxcbiAgICAgICAgICAgIGluZGV4OiBpbmRleFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfWVsc2V7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGF0YTogdGFnRXhwLFxuICAgICAgICAgIGluZGV4OiBpbmRleFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjaCA9PT0gJ1xcdCcpIHtcbiAgICAgIGNoID0gXCIgXCJcbiAgICB9XG4gICAgdGFnRXhwICs9IGNoO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmRDbG9zaW5nSW5kZXgoeG1sRGF0YSwgc3RyLCBpLCBlcnJNc2cpe1xuICBjb25zdCBjbG9zaW5nSW5kZXggPSB4bWxEYXRhLmluZGV4T2Yoc3RyLCBpKTtcbiAgaWYoY2xvc2luZ0luZGV4ID09PSAtMSl7XG4gICAgdGhyb3cgbmV3IEVycm9yKGVyck1zZylcbiAgfWVsc2V7XG4gICAgcmV0dXJuIGNsb3NpbmdJbmRleCArIHN0ci5sZW5ndGggLSAxO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlYWRUYWdFeHAoeG1sRGF0YSxpLCByZW1vdmVOU1ByZWZpeCwgY2xvc2luZ0NoYXIgPSBcIj5cIil7XG4gIGNvbnN0IHJlc3VsdCA9IHRhZ0V4cFdpdGhDbG9zaW5nSW5kZXgoeG1sRGF0YSwgaSsxLCBjbG9zaW5nQ2hhcik7XG4gIGlmKCFyZXN1bHQpIHJldHVybjtcbiAgbGV0IHRhZ0V4cCA9IHJlc3VsdC5kYXRhO1xuICBjb25zdCBjbG9zZUluZGV4ID0gcmVzdWx0LmluZGV4O1xuICBjb25zdCBzZXBhcmF0b3JJbmRleCA9IHRhZ0V4cC5zZWFyY2goL1xccy8pO1xuICBsZXQgdGFnTmFtZSA9IHRhZ0V4cDtcbiAgbGV0IGF0dHJFeHBQcmVzZW50ID0gdHJ1ZTtcbiAgaWYoc2VwYXJhdG9ySW5kZXggIT09IC0xKXsvL3NlcGFyYXRlIHRhZyBuYW1lIGFuZCBhdHRyaWJ1dGVzIGV4cHJlc3Npb25cbiAgICB0YWdOYW1lID0gdGFnRXhwLnN1YnN0cmluZygwLCBzZXBhcmF0b3JJbmRleCk7XG4gICAgdGFnRXhwID0gdGFnRXhwLnN1YnN0cmluZyhzZXBhcmF0b3JJbmRleCArIDEpLnRyaW1TdGFydCgpO1xuICB9XG5cbiAgY29uc3QgcmF3VGFnTmFtZSA9IHRhZ05hbWU7XG4gIGlmKHJlbW92ZU5TUHJlZml4KXtcbiAgICBjb25zdCBjb2xvbkluZGV4ID0gdGFnTmFtZS5pbmRleE9mKFwiOlwiKTtcbiAgICBpZihjb2xvbkluZGV4ICE9PSAtMSl7XG4gICAgICB0YWdOYW1lID0gdGFnTmFtZS5zdWJzdHIoY29sb25JbmRleCsxKTtcbiAgICAgIGF0dHJFeHBQcmVzZW50ID0gdGFnTmFtZSAhPT0gcmVzdWx0LmRhdGEuc3Vic3RyKGNvbG9uSW5kZXggKyAxKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHRhZ05hbWU6IHRhZ05hbWUsXG4gICAgdGFnRXhwOiB0YWdFeHAsXG4gICAgY2xvc2VJbmRleDogY2xvc2VJbmRleCxcbiAgICBhdHRyRXhwUHJlc2VudDogYXR0ckV4cFByZXNlbnQsXG4gICAgcmF3VGFnTmFtZTogcmF3VGFnTmFtZSxcbiAgfVxufVxuLyoqXG4gKiBmaW5kIHBhaXJlZCB0YWcgZm9yIGEgc3RvcCBub2RlXG4gKiBAcGFyYW0ge3N0cmluZ30geG1sRGF0YSBcbiAqIEBwYXJhbSB7c3RyaW5nfSB0YWdOYW1lIFxuICogQHBhcmFtIHtudW1iZXJ9IGkgXG4gKi9cbmZ1bmN0aW9uIHJlYWRTdG9wTm9kZURhdGEoeG1sRGF0YSwgdGFnTmFtZSwgaSl7XG4gIGNvbnN0IHN0YXJ0SW5kZXggPSBpO1xuICAvLyBTdGFydGluZyBhdCAxIHNpbmNlIHdlIGFscmVhZHkgaGF2ZSBhbiBvcGVuIHRhZ1xuICBsZXQgb3BlblRhZ0NvdW50ID0gMTtcblxuICBmb3IgKDsgaSA8IHhtbERhdGEubGVuZ3RoOyBpKyspIHtcbiAgICBpZiggeG1sRGF0YVtpXSA9PT0gXCI8XCIpeyBcbiAgICAgIGlmICh4bWxEYXRhW2krMV0gPT09IFwiL1wiKSB7Ly9jbG9zZSB0YWdcbiAgICAgICAgICBjb25zdCBjbG9zZUluZGV4ID0gZmluZENsb3NpbmdJbmRleCh4bWxEYXRhLCBcIj5cIiwgaSwgYCR7dGFnTmFtZX0gaXMgbm90IGNsb3NlZGApO1xuICAgICAgICAgIGxldCBjbG9zZVRhZ05hbWUgPSB4bWxEYXRhLnN1YnN0cmluZyhpKzIsY2xvc2VJbmRleCkudHJpbSgpO1xuICAgICAgICAgIGlmKGNsb3NlVGFnTmFtZSA9PT0gdGFnTmFtZSl7XG4gICAgICAgICAgICBvcGVuVGFnQ291bnQtLTtcbiAgICAgICAgICAgIGlmIChvcGVuVGFnQ291bnQgPT09IDApIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0YWdDb250ZW50OiB4bWxEYXRhLnN1YnN0cmluZyhzdGFydEluZGV4LCBpKSxcbiAgICAgICAgICAgICAgICBpIDogY2xvc2VJbmRleFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGk9Y2xvc2VJbmRleDtcbiAgICAgICAgfSBlbHNlIGlmKHhtbERhdGFbaSsxXSA9PT0gJz8nKSB7IFxuICAgICAgICAgIGNvbnN0IGNsb3NlSW5kZXggPSBmaW5kQ2xvc2luZ0luZGV4KHhtbERhdGEsIFwiPz5cIiwgaSsxLCBcIlN0b3BOb2RlIGlzIG5vdCBjbG9zZWQuXCIpXG4gICAgICAgICAgaT1jbG9zZUluZGV4O1xuICAgICAgICB9IGVsc2UgaWYoeG1sRGF0YS5zdWJzdHIoaSArIDEsIDMpID09PSAnIS0tJykgeyBcbiAgICAgICAgICBjb25zdCBjbG9zZUluZGV4ID0gZmluZENsb3NpbmdJbmRleCh4bWxEYXRhLCBcIi0tPlwiLCBpKzMsIFwiU3RvcE5vZGUgaXMgbm90IGNsb3NlZC5cIilcbiAgICAgICAgICBpPWNsb3NlSW5kZXg7XG4gICAgICAgIH0gZWxzZSBpZih4bWxEYXRhLnN1YnN0cihpICsgMSwgMikgPT09ICchWycpIHsgXG4gICAgICAgICAgY29uc3QgY2xvc2VJbmRleCA9IGZpbmRDbG9zaW5nSW5kZXgoeG1sRGF0YSwgXCJdXT5cIiwgaSwgXCJTdG9wTm9kZSBpcyBub3QgY2xvc2VkLlwiKSAtIDI7XG4gICAgICAgICAgaT1jbG9zZUluZGV4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHRhZ0RhdGEgPSByZWFkVGFnRXhwKHhtbERhdGEsIGksICc+JylcblxuICAgICAgICAgIGlmICh0YWdEYXRhKSB7XG4gICAgICAgICAgICBjb25zdCBvcGVuVGFnTmFtZSA9IHRhZ0RhdGEgJiYgdGFnRGF0YS50YWdOYW1lO1xuICAgICAgICAgICAgaWYgKG9wZW5UYWdOYW1lID09PSB0YWdOYW1lICYmIHRhZ0RhdGEudGFnRXhwW3RhZ0RhdGEudGFnRXhwLmxlbmd0aC0xXSAhPT0gXCIvXCIpIHtcbiAgICAgICAgICAgICAgb3BlblRhZ0NvdW50Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpPXRhZ0RhdGEuY2xvc2VJbmRleDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgfS8vZW5kIGZvciBsb29wXG59XG5cbmZ1bmN0aW9uIHBhcnNlVmFsdWUodmFsLCBzaG91bGRQYXJzZSwgb3B0aW9ucykge1xuICBpZiAoc2hvdWxkUGFyc2UgJiYgdHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICAvL2NvbnNvbGUubG9nKG9wdGlvbnMpXG4gICAgY29uc3QgbmV3dmFsID0gdmFsLnRyaW0oKTtcbiAgICBpZihuZXd2YWwgPT09ICd0cnVlJyApIHJldHVybiB0cnVlO1xuICAgIGVsc2UgaWYobmV3dmFsID09PSAnZmFsc2UnICkgcmV0dXJuIGZhbHNlO1xuICAgIGVsc2UgcmV0dXJuIHRvTnVtYmVyKHZhbCwgb3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHV0aWwuaXNFeGlzdCh2YWwpKSB7XG4gICAgICByZXR1cm4gdmFsO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG59XG5cblxubW9kdWxlLmV4cG9ydHMgPSBPcmRlcmVkT2JqUGFyc2VyO1xuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogXG4gKiBAcGFyYW0ge2FycmF5fSBub2RlIFxuICogQHBhcmFtIHthbnl9IG9wdGlvbnMgXG4gKiBAcmV0dXJucyBcbiAqL1xuZnVuY3Rpb24gcHJldHRpZnkobm9kZSwgb3B0aW9ucyl7XG4gIHJldHVybiBjb21wcmVzcyggbm9kZSwgb3B0aW9ucyk7XG59XG5cbi8qKlxuICogXG4gKiBAcGFyYW0ge2FycmF5fSBhcnIgXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyBcbiAqIEBwYXJhbSB7c3RyaW5nfSBqUGF0aCBcbiAqIEByZXR1cm5zIG9iamVjdFxuICovXG5mdW5jdGlvbiBjb21wcmVzcyhhcnIsIG9wdGlvbnMsIGpQYXRoKXtcbiAgbGV0IHRleHQ7XG4gIGNvbnN0IGNvbXByZXNzZWRPYmogPSB7fTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCB0YWdPYmogPSBhcnJbaV07XG4gICAgY29uc3QgcHJvcGVydHkgPSBwcm9wTmFtZSh0YWdPYmopO1xuICAgIGxldCBuZXdKcGF0aCA9IFwiXCI7XG4gICAgaWYoalBhdGggPT09IHVuZGVmaW5lZCkgbmV3SnBhdGggPSBwcm9wZXJ0eTtcbiAgICBlbHNlIG5ld0pwYXRoID0galBhdGggKyBcIi5cIiArIHByb3BlcnR5O1xuXG4gICAgaWYocHJvcGVydHkgPT09IG9wdGlvbnMudGV4dE5vZGVOYW1lKXtcbiAgICAgIGlmKHRleHQgPT09IHVuZGVmaW5lZCkgdGV4dCA9IHRhZ09ialtwcm9wZXJ0eV07XG4gICAgICBlbHNlIHRleHQgKz0gXCJcIiArIHRhZ09ialtwcm9wZXJ0eV07XG4gICAgfWVsc2UgaWYocHJvcGVydHkgPT09IHVuZGVmaW5lZCl7XG4gICAgICBjb250aW51ZTtcbiAgICB9ZWxzZSBpZih0YWdPYmpbcHJvcGVydHldKXtcbiAgICAgIFxuICAgICAgbGV0IHZhbCA9IGNvbXByZXNzKHRhZ09ialtwcm9wZXJ0eV0sIG9wdGlvbnMsIG5ld0pwYXRoKTtcbiAgICAgIGNvbnN0IGlzTGVhZiA9IGlzTGVhZlRhZyh2YWwsIG9wdGlvbnMpO1xuXG4gICAgICBpZih0YWdPYmpbXCI6QFwiXSl7XG4gICAgICAgIGFzc2lnbkF0dHJpYnV0ZXMoIHZhbCwgdGFnT2JqW1wiOkBcIl0sIG5ld0pwYXRoLCBvcHRpb25zKTtcbiAgICAgIH1lbHNlIGlmKE9iamVjdC5rZXlzKHZhbCkubGVuZ3RoID09PSAxICYmIHZhbFtvcHRpb25zLnRleHROb2RlTmFtZV0gIT09IHVuZGVmaW5lZCAmJiAhb3B0aW9ucy5hbHdheXNDcmVhdGVUZXh0Tm9kZSl7XG4gICAgICAgIHZhbCA9IHZhbFtvcHRpb25zLnRleHROb2RlTmFtZV07XG4gICAgICB9ZWxzZSBpZihPYmplY3Qua2V5cyh2YWwpLmxlbmd0aCA9PT0gMCl7XG4gICAgICAgIGlmKG9wdGlvbnMuYWx3YXlzQ3JlYXRlVGV4dE5vZGUpIHZhbFtvcHRpb25zLnRleHROb2RlTmFtZV0gPSBcIlwiO1xuICAgICAgICBlbHNlIHZhbCA9IFwiXCI7XG4gICAgICB9XG5cbiAgICAgIGlmKGNvbXByZXNzZWRPYmpbcHJvcGVydHldICE9PSB1bmRlZmluZWQgJiYgY29tcHJlc3NlZE9iai5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpIHtcbiAgICAgICAgaWYoIUFycmF5LmlzQXJyYXkoY29tcHJlc3NlZE9ialtwcm9wZXJ0eV0pKSB7XG4gICAgICAgICAgICBjb21wcmVzc2VkT2JqW3Byb3BlcnR5XSA9IFsgY29tcHJlc3NlZE9ialtwcm9wZXJ0eV0gXTtcbiAgICAgICAgfVxuICAgICAgICBjb21wcmVzc2VkT2JqW3Byb3BlcnR5XS5wdXNoKHZhbCk7XG4gICAgICB9ZWxzZXtcbiAgICAgICAgLy9UT0RPOiBpZiBhIG5vZGUgaXMgbm90IGFuIGFycmF5LCB0aGVuIGNoZWNrIGlmIGl0IHNob3VsZCBiZSBhbiBhcnJheVxuICAgICAgICAvL2Fsc28gZGV0ZXJtaW5lIGlmIGl0IGlzIGEgbGVhZiBub2RlXG4gICAgICAgIGlmIChvcHRpb25zLmlzQXJyYXkocHJvcGVydHksIG5ld0pwYXRoLCBpc0xlYWYgKSkge1xuICAgICAgICAgIGNvbXByZXNzZWRPYmpbcHJvcGVydHldID0gW3ZhbF07XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgIGNvbXByZXNzZWRPYmpbcHJvcGVydHldID0gdmFsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIFxuICB9XG4gIC8vIGlmKHRleHQgJiYgdGV4dC5sZW5ndGggPiAwKSBjb21wcmVzc2VkT2JqW29wdGlvbnMudGV4dE5vZGVOYW1lXSA9IHRleHQ7XG4gIGlmKHR5cGVvZiB0ZXh0ID09PSBcInN0cmluZ1wiKXtcbiAgICBpZih0ZXh0Lmxlbmd0aCA+IDApIGNvbXByZXNzZWRPYmpbb3B0aW9ucy50ZXh0Tm9kZU5hbWVdID0gdGV4dDtcbiAgfWVsc2UgaWYodGV4dCAhPT0gdW5kZWZpbmVkKSBjb21wcmVzc2VkT2JqW29wdGlvbnMudGV4dE5vZGVOYW1lXSA9IHRleHQ7XG4gIHJldHVybiBjb21wcmVzc2VkT2JqO1xufVxuXG5mdW5jdGlvbiBwcm9wTmFtZShvYmope1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICBpZihrZXkgIT09IFwiOkBcIikgcmV0dXJuIGtleTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhc3NpZ25BdHRyaWJ1dGVzKG9iaiwgYXR0ck1hcCwganBhdGgsIG9wdGlvbnMpe1xuICBpZiAoYXR0ck1hcCkge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhhdHRyTWFwKTtcbiAgICBjb25zdCBsZW4gPSBrZXlzLmxlbmd0aDsgLy9kb24ndCBtYWtlIGl0IGlubGluZVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNvbnN0IGF0cnJOYW1lID0ga2V5c1tpXTtcbiAgICAgIGlmIChvcHRpb25zLmlzQXJyYXkoYXRyck5hbWUsIGpwYXRoICsgXCIuXCIgKyBhdHJyTmFtZSwgdHJ1ZSwgdHJ1ZSkpIHtcbiAgICAgICAgb2JqW2F0cnJOYW1lXSA9IFsgYXR0ck1hcFthdHJyTmFtZV0gXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9ialthdHJyTmFtZV0gPSBhdHRyTWFwW2F0cnJOYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNMZWFmVGFnKG9iaiwgb3B0aW9ucyl7XG4gIGNvbnN0IHsgdGV4dE5vZGVOYW1lIH0gPSBvcHRpb25zO1xuICBjb25zdCBwcm9wQ291bnQgPSBPYmplY3Qua2V5cyhvYmopLmxlbmd0aDtcbiAgXG4gIGlmIChwcm9wQ291bnQgPT09IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChcbiAgICBwcm9wQ291bnQgPT09IDEgJiZcbiAgICAob2JqW3RleHROb2RlTmFtZV0gfHwgdHlwZW9mIG9ialt0ZXh0Tm9kZU5hbWVdID09PSBcImJvb2xlYW5cIiB8fCBvYmpbdGV4dE5vZGVOYW1lXSA9PT0gMClcbiAgKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5leHBvcnRzLnByZXR0aWZ5ID0gcHJldHRpZnk7XG4iLAogICAgImNvbnN0IHsgYnVpbGRPcHRpb25zfSA9IHJlcXVpcmUoXCIuL09wdGlvbnNCdWlsZGVyXCIpO1xuY29uc3QgT3JkZXJlZE9ialBhcnNlciA9IHJlcXVpcmUoXCIuL09yZGVyZWRPYmpQYXJzZXJcIik7XG5jb25zdCB7IHByZXR0aWZ5fSA9IHJlcXVpcmUoXCIuL25vZGUyanNvblwiKTtcbmNvbnN0IHZhbGlkYXRvciA9IHJlcXVpcmUoJy4uL3ZhbGlkYXRvcicpO1xuXG5jbGFzcyBYTUxQYXJzZXJ7XG4gICAgXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucyl7XG4gICAgICAgIHRoaXMuZXh0ZXJuYWxFbnRpdGllcyA9IHt9O1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBidWlsZE9wdGlvbnMob3B0aW9ucyk7XG4gICAgICAgIFxuICAgIH1cbiAgICAvKipcbiAgICAgKiBQYXJzZSBYTUwgZGF0cyB0byBKUyBvYmplY3QgXG4gICAgICogQHBhcmFtIHtzdHJpbmd8QnVmZmVyfSB4bWxEYXRhIFxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbnxPYmplY3R9IHZhbGlkYXRpb25PcHRpb24gXG4gICAgICovXG4gICAgcGFyc2UoeG1sRGF0YSx2YWxpZGF0aW9uT3B0aW9uKXtcbiAgICAgICAgaWYodHlwZW9mIHhtbERhdGEgPT09IFwic3RyaW5nXCIpe1xuICAgICAgICB9ZWxzZSBpZiggeG1sRGF0YS50b1N0cmluZyl7XG4gICAgICAgICAgICB4bWxEYXRhID0geG1sRGF0YS50b1N0cmluZygpO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlhNTCBkYXRhIGlzIGFjY2VwdGVkIGluIFN0cmluZyBvciBCeXRlc1tdIGZvcm0uXCIpXG4gICAgICAgIH1cbiAgICAgICAgaWYoIHZhbGlkYXRpb25PcHRpb24pe1xuICAgICAgICAgICAgaWYodmFsaWRhdGlvbk9wdGlvbiA9PT0gdHJ1ZSkgdmFsaWRhdGlvbk9wdGlvbiA9IHt9OyAvL3ZhbGlkYXRlIHdpdGggZGVmYXVsdCBvcHRpb25zXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHZhbGlkYXRvci52YWxpZGF0ZSh4bWxEYXRhLCB2YWxpZGF0aW9uT3B0aW9uKTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgIT09IHRydWUpIHtcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoIGAke3Jlc3VsdC5lcnIubXNnfToke3Jlc3VsdC5lcnIubGluZX06JHtyZXN1bHQuZXJyLmNvbH1gIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9yZGVyZWRPYmpQYXJzZXIgPSBuZXcgT3JkZXJlZE9ialBhcnNlcih0aGlzLm9wdGlvbnMpO1xuICAgICAgICBvcmRlcmVkT2JqUGFyc2VyLmFkZEV4dGVybmFsRW50aXRpZXModGhpcy5leHRlcm5hbEVudGl0aWVzKTtcbiAgICAgICAgY29uc3Qgb3JkZXJlZFJlc3VsdCA9IG9yZGVyZWRPYmpQYXJzZXIucGFyc2VYbWwoeG1sRGF0YSk7XG4gICAgICAgIGlmKHRoaXMub3B0aW9ucy5wcmVzZXJ2ZU9yZGVyIHx8IG9yZGVyZWRSZXN1bHQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIG9yZGVyZWRSZXN1bHQ7XG4gICAgICAgIGVsc2UgcmV0dXJuIHByZXR0aWZ5KG9yZGVyZWRSZXN1bHQsIHRoaXMub3B0aW9ucyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkIEVudGl0eSB3aGljaCBpcyBub3QgYnkgZGVmYXVsdCBzdXBwb3J0ZWQgYnkgdGhpcyBsaWJyYXJ5XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUgXG4gICAgICovXG4gICAgYWRkRW50aXR5KGtleSwgdmFsdWUpe1xuICAgICAgICBpZih2YWx1ZS5pbmRleE9mKFwiJlwiKSAhPT0gLTEpe1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRW50aXR5IHZhbHVlIGNhbid0IGhhdmUgJyYnXCIpXG4gICAgICAgIH1lbHNlIGlmKGtleS5pbmRleE9mKFwiJlwiKSAhPT0gLTEgfHwga2V5LmluZGV4T2YoXCI7XCIpICE9PSAtMSl7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBbiBlbnRpdHkgbXVzdCBiZSBzZXQgd2l0aG91dCAnJicgYW5kICc7Jy4gRWcuIHVzZSAnI3hEJyBmb3IgJyYjeEQ7J1wiKVxuICAgICAgICB9ZWxzZSBpZih2YWx1ZSA9PT0gXCImXCIpe1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQW4gZW50aXR5IHdpdGggdmFsdWUgJyYnIGlzIG5vdCBwZXJtaXR0ZWRcIik7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgdGhpcy5leHRlcm5hbEVudGl0aWVzW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBYTUxQYXJzZXI7IiwKICAgICJjb25zdCBFT0wgPSBcIlxcblwiO1xuXG4vKipcbiAqIFxuICogQHBhcmFtIHthcnJheX0gakFycmF5IFxuICogQHBhcmFtIHthbnl9IG9wdGlvbnMgXG4gKiBAcmV0dXJucyBcbiAqL1xuZnVuY3Rpb24gdG9YbWwoakFycmF5LCBvcHRpb25zKSB7XG4gICAgbGV0IGluZGVudGF0aW9uID0gXCJcIjtcbiAgICBpZiAob3B0aW9ucy5mb3JtYXQgJiYgb3B0aW9ucy5pbmRlbnRCeS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGluZGVudGF0aW9uID0gRU9MO1xuICAgIH1cbiAgICByZXR1cm4gYXJyVG9TdHIoakFycmF5LCBvcHRpb25zLCBcIlwiLCBpbmRlbnRhdGlvbik7XG59XG5cbmZ1bmN0aW9uIGFyclRvU3RyKGFyciwgb3B0aW9ucywgalBhdGgsIGluZGVudGF0aW9uKSB7XG4gICAgbGV0IHhtbFN0ciA9IFwiXCI7XG4gICAgbGV0IGlzUHJldmlvdXNFbGVtZW50VGFnID0gZmFsc2U7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCB0YWdPYmogPSBhcnJbaV07XG4gICAgICAgIGNvbnN0IHRhZ05hbWUgPSBwcm9wTmFtZSh0YWdPYmopO1xuICAgICAgICBpZih0YWdOYW1lID09PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xuXG4gICAgICAgIGxldCBuZXdKUGF0aCA9IFwiXCI7XG4gICAgICAgIGlmIChqUGF0aC5sZW5ndGggPT09IDApIG5ld0pQYXRoID0gdGFnTmFtZVxuICAgICAgICBlbHNlIG5ld0pQYXRoID0gYCR7alBhdGh9LiR7dGFnTmFtZX1gO1xuXG4gICAgICAgIGlmICh0YWdOYW1lID09PSBvcHRpb25zLnRleHROb2RlTmFtZSkge1xuICAgICAgICAgICAgbGV0IHRhZ1RleHQgPSB0YWdPYmpbdGFnTmFtZV07XG4gICAgICAgICAgICBpZiAoIWlzU3RvcE5vZGUobmV3SlBhdGgsIG9wdGlvbnMpKSB7XG4gICAgICAgICAgICAgICAgdGFnVGV4dCA9IG9wdGlvbnMudGFnVmFsdWVQcm9jZXNzb3IodGFnTmFtZSwgdGFnVGV4dCk7XG4gICAgICAgICAgICAgICAgdGFnVGV4dCA9IHJlcGxhY2VFbnRpdGllc1ZhbHVlKHRhZ1RleHQsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzUHJldmlvdXNFbGVtZW50VGFnKSB7XG4gICAgICAgICAgICAgICAgeG1sU3RyICs9IGluZGVudGF0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgeG1sU3RyICs9IHRhZ1RleHQ7XG4gICAgICAgICAgICBpc1ByZXZpb3VzRWxlbWVudFRhZyA9IGZhbHNlO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gZWxzZSBpZiAodGFnTmFtZSA9PT0gb3B0aW9ucy5jZGF0YVByb3BOYW1lKSB7XG4gICAgICAgICAgICBpZiAoaXNQcmV2aW91c0VsZW1lbnRUYWcpIHtcbiAgICAgICAgICAgICAgICB4bWxTdHIgKz0gaW5kZW50YXRpb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB4bWxTdHIgKz0gYDwhW0NEQVRBWyR7dGFnT2JqW3RhZ05hbWVdWzBdW29wdGlvbnMudGV4dE5vZGVOYW1lXX1dXT5gO1xuICAgICAgICAgICAgaXNQcmV2aW91c0VsZW1lbnRUYWcgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHRhZ05hbWUgPT09IG9wdGlvbnMuY29tbWVudFByb3BOYW1lKSB7XG4gICAgICAgICAgICB4bWxTdHIgKz0gaW5kZW50YXRpb24gKyBgPCEtLSR7dGFnT2JqW3RhZ05hbWVdWzBdW29wdGlvbnMudGV4dE5vZGVOYW1lXX0tLT5gO1xuICAgICAgICAgICAgaXNQcmV2aW91c0VsZW1lbnRUYWcgPSB0cnVlO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gZWxzZSBpZiAodGFnTmFtZVswXSA9PT0gXCI/XCIpIHtcbiAgICAgICAgICAgIGNvbnN0IGF0dFN0ciA9IGF0dHJfdG9fc3RyKHRhZ09ialtcIjpAXCJdLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGNvbnN0IHRlbXBJbmQgPSB0YWdOYW1lID09PSBcIj94bWxcIiA/IFwiXCIgOiBpbmRlbnRhdGlvbjtcbiAgICAgICAgICAgIGxldCBwaVRleHROb2RlTmFtZSA9IHRhZ09ialt0YWdOYW1lXVswXVtvcHRpb25zLnRleHROb2RlTmFtZV07XG4gICAgICAgICAgICBwaVRleHROb2RlTmFtZSA9IHBpVGV4dE5vZGVOYW1lLmxlbmd0aCAhPT0gMCA/IFwiIFwiICsgcGlUZXh0Tm9kZU5hbWUgOiBcIlwiOyAvL3JlbW92ZSBleHRyYSBzcGFjaW5nXG4gICAgICAgICAgICB4bWxTdHIgKz0gdGVtcEluZCArIGA8JHt0YWdOYW1lfSR7cGlUZXh0Tm9kZU5hbWV9JHthdHRTdHJ9Pz5gO1xuICAgICAgICAgICAgaXNQcmV2aW91c0VsZW1lbnRUYWcgPSB0cnVlO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG5ld0lkZW50YXRpb24gPSBpbmRlbnRhdGlvbjtcbiAgICAgICAgaWYgKG5ld0lkZW50YXRpb24gIT09IFwiXCIpIHtcbiAgICAgICAgICAgIG5ld0lkZW50YXRpb24gKz0gb3B0aW9ucy5pbmRlbnRCeTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhdHRTdHIgPSBhdHRyX3RvX3N0cih0YWdPYmpbXCI6QFwiXSwgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHRhZ1N0YXJ0ID0gaW5kZW50YXRpb24gKyBgPCR7dGFnTmFtZX0ke2F0dFN0cn1gO1xuICAgICAgICBjb25zdCB0YWdWYWx1ZSA9IGFyclRvU3RyKHRhZ09ialt0YWdOYW1lXSwgb3B0aW9ucywgbmV3SlBhdGgsIG5ld0lkZW50YXRpb24pO1xuICAgICAgICBpZiAob3B0aW9ucy51bnBhaXJlZFRhZ3MuaW5kZXhPZih0YWdOYW1lKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnN1cHByZXNzVW5wYWlyZWROb2RlKSB4bWxTdHIgKz0gdGFnU3RhcnQgKyBcIj5cIjtcbiAgICAgICAgICAgIGVsc2UgeG1sU3RyICs9IHRhZ1N0YXJ0ICsgXCIvPlwiO1xuICAgICAgICB9IGVsc2UgaWYgKCghdGFnVmFsdWUgfHwgdGFnVmFsdWUubGVuZ3RoID09PSAwKSAmJiBvcHRpb25zLnN1cHByZXNzRW1wdHlOb2RlKSB7XG4gICAgICAgICAgICB4bWxTdHIgKz0gdGFnU3RhcnQgKyBcIi8+XCI7XG4gICAgICAgIH0gZWxzZSBpZiAodGFnVmFsdWUgJiYgdGFnVmFsdWUuZW5kc1dpdGgoXCI+XCIpKSB7XG4gICAgICAgICAgICB4bWxTdHIgKz0gdGFnU3RhcnQgKyBgPiR7dGFnVmFsdWV9JHtpbmRlbnRhdGlvbn08LyR7dGFnTmFtZX0+YDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHhtbFN0ciArPSB0YWdTdGFydCArIFwiPlwiO1xuICAgICAgICAgICAgaWYgKHRhZ1ZhbHVlICYmIGluZGVudGF0aW9uICE9PSBcIlwiICYmICh0YWdWYWx1ZS5pbmNsdWRlcyhcIi8+XCIpIHx8IHRhZ1ZhbHVlLmluY2x1ZGVzKFwiPC9cIikpKSB7XG4gICAgICAgICAgICAgICAgeG1sU3RyICs9IGluZGVudGF0aW9uICsgb3B0aW9ucy5pbmRlbnRCeSArIHRhZ1ZhbHVlICsgaW5kZW50YXRpb247XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHhtbFN0ciArPSB0YWdWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHhtbFN0ciArPSBgPC8ke3RhZ05hbWV9PmA7XG4gICAgICAgIH1cbiAgICAgICAgaXNQcmV2aW91c0VsZW1lbnRUYWcgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB4bWxTdHI7XG59XG5cbmZ1bmN0aW9uIHByb3BOYW1lKG9iaikge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xuICAgICAgICBpZighb2JqLmhhc093blByb3BlcnR5KGtleSkpIGNvbnRpbnVlO1xuICAgICAgICBpZiAoa2V5ICE9PSBcIjpAXCIpIHJldHVybiBrZXk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBhdHRyX3RvX3N0cihhdHRyTWFwLCBvcHRpb25zKSB7XG4gICAgbGV0IGF0dHJTdHIgPSBcIlwiO1xuICAgIGlmIChhdHRyTWFwICYmICFvcHRpb25zLmlnbm9yZUF0dHJpYnV0ZXMpIHtcbiAgICAgICAgZm9yIChsZXQgYXR0ciBpbiBhdHRyTWFwKSB7XG4gICAgICAgICAgICBpZighYXR0ck1hcC5oYXNPd25Qcm9wZXJ0eShhdHRyKSkgY29udGludWU7XG4gICAgICAgICAgICBsZXQgYXR0clZhbCA9IG9wdGlvbnMuYXR0cmlidXRlVmFsdWVQcm9jZXNzb3IoYXR0ciwgYXR0ck1hcFthdHRyXSk7XG4gICAgICAgICAgICBhdHRyVmFsID0gcmVwbGFjZUVudGl0aWVzVmFsdWUoYXR0clZhbCwgb3B0aW9ucyk7XG4gICAgICAgICAgICBpZiAoYXR0clZhbCA9PT0gdHJ1ZSAmJiBvcHRpb25zLnN1cHByZXNzQm9vbGVhbkF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgICAgICBhdHRyU3RyICs9IGAgJHthdHRyLnN1YnN0cihvcHRpb25zLmF0dHJpYnV0ZU5hbWVQcmVmaXgubGVuZ3RoKX1gO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhdHRyU3RyICs9IGAgJHthdHRyLnN1YnN0cihvcHRpb25zLmF0dHJpYnV0ZU5hbWVQcmVmaXgubGVuZ3RoKX09XCIke2F0dHJWYWx9XCJgO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhdHRyU3RyO1xufVxuXG5mdW5jdGlvbiBpc1N0b3BOb2RlKGpQYXRoLCBvcHRpb25zKSB7XG4gICAgalBhdGggPSBqUGF0aC5zdWJzdHIoMCwgalBhdGgubGVuZ3RoIC0gb3B0aW9ucy50ZXh0Tm9kZU5hbWUubGVuZ3RoIC0gMSk7XG4gICAgbGV0IHRhZ05hbWUgPSBqUGF0aC5zdWJzdHIoalBhdGgubGFzdEluZGV4T2YoXCIuXCIpICsgMSk7XG4gICAgZm9yIChsZXQgaW5kZXggaW4gb3B0aW9ucy5zdG9wTm9kZXMpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuc3RvcE5vZGVzW2luZGV4XSA9PT0galBhdGggfHwgb3B0aW9ucy5zdG9wTm9kZXNbaW5kZXhdID09PSBcIiouXCIgKyB0YWdOYW1lKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiByZXBsYWNlRW50aXRpZXNWYWx1ZSh0ZXh0VmFsdWUsIG9wdGlvbnMpIHtcbiAgICBpZiAodGV4dFZhbHVlICYmIHRleHRWYWx1ZS5sZW5ndGggPiAwICYmIG9wdGlvbnMucHJvY2Vzc0VudGl0aWVzKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3B0aW9ucy5lbnRpdGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgZW50aXR5ID0gb3B0aW9ucy5lbnRpdGllc1tpXTtcbiAgICAgICAgICAgIHRleHRWYWx1ZSA9IHRleHRWYWx1ZS5yZXBsYWNlKGVudGl0eS5yZWdleCwgZW50aXR5LnZhbCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRleHRWYWx1ZTtcbn1cbm1vZHVsZS5leHBvcnRzID0gdG9YbWw7XG4iLAogICAgIid1c2Ugc3RyaWN0Jztcbi8vcGFyc2UgRW1wdHkgTm9kZSBhcyBzZWxmIGNsb3Npbmcgbm9kZVxuY29uc3QgYnVpbGRGcm9tT3JkZXJlZEpzID0gcmVxdWlyZSgnLi9vcmRlcmVkSnMyWG1sJyk7XG5jb25zdCBnZXRJZ25vcmVBdHRyaWJ1dGVzRm4gPSByZXF1aXJlKCcuLi9pZ25vcmVBdHRyaWJ1dGVzJylcblxuY29uc3QgZGVmYXVsdE9wdGlvbnMgPSB7XG4gIGF0dHJpYnV0ZU5hbWVQcmVmaXg6ICdAXycsXG4gIGF0dHJpYnV0ZXNHcm91cE5hbWU6IGZhbHNlLFxuICB0ZXh0Tm9kZU5hbWU6ICcjdGV4dCcsXG4gIGlnbm9yZUF0dHJpYnV0ZXM6IHRydWUsXG4gIGNkYXRhUHJvcE5hbWU6IGZhbHNlLFxuICBmb3JtYXQ6IGZhbHNlLFxuICBpbmRlbnRCeTogJyAgJyxcbiAgc3VwcHJlc3NFbXB0eU5vZGU6IGZhbHNlLFxuICBzdXBwcmVzc1VucGFpcmVkTm9kZTogdHJ1ZSxcbiAgc3VwcHJlc3NCb29sZWFuQXR0cmlidXRlczogdHJ1ZSxcbiAgdGFnVmFsdWVQcm9jZXNzb3I6IGZ1bmN0aW9uKGtleSwgYSkge1xuICAgIHJldHVybiBhO1xuICB9LFxuICBhdHRyaWJ1dGVWYWx1ZVByb2Nlc3NvcjogZnVuY3Rpb24oYXR0ck5hbWUsIGEpIHtcbiAgICByZXR1cm4gYTtcbiAgfSxcbiAgcHJlc2VydmVPcmRlcjogZmFsc2UsXG4gIGNvbW1lbnRQcm9wTmFtZTogZmFsc2UsXG4gIHVucGFpcmVkVGFnczogW10sXG4gIGVudGl0aWVzOiBbXG4gICAgeyByZWdleDogbmV3IFJlZ0V4cChcIiZcIiwgXCJnXCIpLCB2YWw6IFwiJmFtcDtcIiB9LC8vaXQgbXVzdCBiZSBvbiB0b3BcbiAgICB7IHJlZ2V4OiBuZXcgUmVnRXhwKFwiPlwiLCBcImdcIiksIHZhbDogXCImZ3Q7XCIgfSxcbiAgICB7IHJlZ2V4OiBuZXcgUmVnRXhwKFwiPFwiLCBcImdcIiksIHZhbDogXCImbHQ7XCIgfSxcbiAgICB7IHJlZ2V4OiBuZXcgUmVnRXhwKFwiXFwnXCIsIFwiZ1wiKSwgdmFsOiBcIiZhcG9zO1wiIH0sXG4gICAgeyByZWdleDogbmV3IFJlZ0V4cChcIlxcXCJcIiwgXCJnXCIpLCB2YWw6IFwiJnF1b3Q7XCIgfVxuICBdLFxuICBwcm9jZXNzRW50aXRpZXM6IHRydWUsXG4gIHN0b3BOb2RlczogW10sXG4gIC8vIHRyYW5zZm9ybVRhZ05hbWU6IGZhbHNlLFxuICAvLyB0cmFuc2Zvcm1BdHRyaWJ1dGVOYW1lOiBmYWxzZSxcbiAgb25lTGlzdEdyb3VwOiBmYWxzZVxufTtcblxuZnVuY3Rpb24gQnVpbGRlcihvcHRpb25zKSB7XG4gIHRoaXMub3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRPcHRpb25zLCBvcHRpb25zKTtcbiAgaWYgKHRoaXMub3B0aW9ucy5pZ25vcmVBdHRyaWJ1dGVzID09PSB0cnVlIHx8IHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVzR3JvdXBOYW1lKSB7XG4gICAgdGhpcy5pc0F0dHJpYnV0ZSA9IGZ1bmN0aW9uKC8qYSovKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmlnbm9yZUF0dHJpYnV0ZXNGbiA9IGdldElnbm9yZUF0dHJpYnV0ZXNGbih0aGlzLm9wdGlvbnMuaWdub3JlQXR0cmlidXRlcylcbiAgICB0aGlzLmF0dHJQcmVmaXhMZW4gPSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlTmFtZVByZWZpeC5sZW5ndGg7XG4gICAgdGhpcy5pc0F0dHJpYnV0ZSA9IGlzQXR0cmlidXRlO1xuICB9XG5cbiAgdGhpcy5wcm9jZXNzVGV4dE9yT2JqTm9kZSA9IHByb2Nlc3NUZXh0T3JPYmpOb2RlXG5cbiAgaWYgKHRoaXMub3B0aW9ucy5mb3JtYXQpIHtcbiAgICB0aGlzLmluZGVudGF0ZSA9IGluZGVudGF0ZTtcbiAgICB0aGlzLnRhZ0VuZENoYXIgPSAnPlxcbic7XG4gICAgdGhpcy5uZXdMaW5lID0gJ1xcbic7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5pbmRlbnRhdGUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9O1xuICAgIHRoaXMudGFnRW5kQ2hhciA9ICc+JztcbiAgICB0aGlzLm5ld0xpbmUgPSAnJztcbiAgfVxufVxuXG5CdWlsZGVyLnByb3RvdHlwZS5idWlsZCA9IGZ1bmN0aW9uKGpPYmopIHtcbiAgaWYodGhpcy5vcHRpb25zLnByZXNlcnZlT3JkZXIpe1xuICAgIHJldHVybiBidWlsZEZyb21PcmRlcmVkSnMoak9iaiwgdGhpcy5vcHRpb25zKTtcbiAgfWVsc2Uge1xuICAgIGlmKEFycmF5LmlzQXJyYXkoak9iaikgJiYgdGhpcy5vcHRpb25zLmFycmF5Tm9kZU5hbWUgJiYgdGhpcy5vcHRpb25zLmFycmF5Tm9kZU5hbWUubGVuZ3RoID4gMSl7XG4gICAgICBqT2JqID0ge1xuICAgICAgICBbdGhpcy5vcHRpb25zLmFycmF5Tm9kZU5hbWVdIDogak9ialxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5qMngoak9iaiwgMCwgW10pLnZhbDtcbiAgfVxufTtcblxuQnVpbGRlci5wcm90b3R5cGUuajJ4ID0gZnVuY3Rpb24oak9iaiwgbGV2ZWwsIGFqUGF0aCkge1xuICBsZXQgYXR0clN0ciA9ICcnO1xuICBsZXQgdmFsID0gJyc7XG4gIGNvbnN0IGpQYXRoID0gYWpQYXRoLmpvaW4oJy4nKVxuICBmb3IgKGxldCBrZXkgaW4gak9iaikge1xuICAgIGlmKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoak9iaiwga2V5KSkgY29udGludWU7XG4gICAgaWYgKHR5cGVvZiBqT2JqW2tleV0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyBzdXByZXNzIHVuZGVmaW5lZCBub2RlIG9ubHkgaWYgaXQgaXMgbm90IGFuIGF0dHJpYnV0ZVxuICAgICAgaWYgKHRoaXMuaXNBdHRyaWJ1dGUoa2V5KSkge1xuICAgICAgICB2YWwgKz0gJyc7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChqT2JqW2tleV0gPT09IG51bGwpIHtcbiAgICAgIC8vIG51bGwgYXR0cmlidXRlIHNob3VsZCBiZSBpZ25vcmVkIGJ5IHRoZSBhdHRyaWJ1dGUgbGlzdCwgYnV0IHNob3VsZCBub3QgY2F1c2UgdGhlIHRhZyBjbG9zaW5nXG4gICAgICBpZiAodGhpcy5pc0F0dHJpYnV0ZShrZXkpKSB7XG4gICAgICAgIHZhbCArPSAnJztcbiAgICAgIH0gZWxzZSBpZiAoa2V5WzBdID09PSAnPycpIHtcbiAgICAgICAgdmFsICs9IHRoaXMuaW5kZW50YXRlKGxldmVsKSArICc8JyArIGtleSArICc/JyArIHRoaXMudGFnRW5kQ2hhcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbCArPSB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyAnPCcgKyBrZXkgKyAnLycgKyB0aGlzLnRhZ0VuZENoYXI7XG4gICAgICB9XG4gICAgICAvLyB2YWwgKz0gdGhpcy5pbmRlbnRhdGUobGV2ZWwpICsgJzwnICsga2V5ICsgJy8nICsgdGhpcy50YWdFbmRDaGFyO1xuICAgIH0gZWxzZSBpZiAoak9ialtrZXldIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgdmFsICs9IHRoaXMuYnVpbGRUZXh0VmFsTm9kZShqT2JqW2tleV0sIGtleSwgJycsIGxldmVsKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBqT2JqW2tleV0gIT09ICdvYmplY3QnKSB7XG4gICAgICAvL3ByZW1pdGl2ZSB0eXBlXG4gICAgICBjb25zdCBhdHRyID0gdGhpcy5pc0F0dHJpYnV0ZShrZXkpO1xuICAgICAgaWYgKGF0dHIgJiYgIXRoaXMuaWdub3JlQXR0cmlidXRlc0ZuKGF0dHIsIGpQYXRoKSkge1xuICAgICAgICBhdHRyU3RyICs9IHRoaXMuYnVpbGRBdHRyUGFpclN0cihhdHRyLCAnJyArIGpPYmpba2V5XSk7XG4gICAgICB9IGVsc2UgaWYgKCFhdHRyKSB7XG4gICAgICAgIC8vdGFnIHZhbHVlXG4gICAgICAgIGlmIChrZXkgPT09IHRoaXMub3B0aW9ucy50ZXh0Tm9kZU5hbWUpIHtcbiAgICAgICAgICBsZXQgbmV3dmFsID0gdGhpcy5vcHRpb25zLnRhZ1ZhbHVlUHJvY2Vzc29yKGtleSwgJycgKyBqT2JqW2tleV0pO1xuICAgICAgICAgIHZhbCArPSB0aGlzLnJlcGxhY2VFbnRpdGllc1ZhbHVlKG5ld3ZhbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsICs9IHRoaXMuYnVpbGRUZXh0VmFsTm9kZShqT2JqW2tleV0sIGtleSwgJycsIGxldmVsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShqT2JqW2tleV0pKSB7XG4gICAgICAvL3JlcGVhdGVkIG5vZGVzXG4gICAgICBjb25zdCBhcnJMZW4gPSBqT2JqW2tleV0ubGVuZ3RoO1xuICAgICAgbGV0IGxpc3RUYWdWYWwgPSBcIlwiO1xuICAgICAgbGV0IGxpc3RUYWdBdHRyID0gXCJcIjtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgYXJyTGVuOyBqKyspIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IGpPYmpba2V5XVtqXTtcbiAgICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIC8vIHN1cHJlc3MgdW5kZWZpbmVkIG5vZGVcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtID09PSBudWxsKSB7XG4gICAgICAgICAgaWYoa2V5WzBdID09PSBcIj9cIikgdmFsICs9IHRoaXMuaW5kZW50YXRlKGxldmVsKSArICc8JyArIGtleSArICc/JyArIHRoaXMudGFnRW5kQ2hhcjtcbiAgICAgICAgICBlbHNlIHZhbCArPSB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyAnPCcgKyBrZXkgKyAnLycgKyB0aGlzLnRhZ0VuZENoYXI7XG4gICAgICAgICAgLy8gdmFsICs9IHRoaXMuaW5kZW50YXRlKGxldmVsKSArICc8JyArIGtleSArICcvJyArIHRoaXMudGFnRW5kQ2hhcjtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBpZih0aGlzLm9wdGlvbnMub25lTGlzdEdyb3VwKXtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuajJ4KGl0ZW0sIGxldmVsICsgMSwgYWpQYXRoLmNvbmNhdChrZXkpKTtcbiAgICAgICAgICAgIGxpc3RUYWdWYWwgKz0gcmVzdWx0LnZhbDtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYXR0cmlidXRlc0dyb3VwTmFtZSAmJiBpdGVtLmhhc093blByb3BlcnR5KHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVzR3JvdXBOYW1lKSkge1xuICAgICAgICAgICAgICBsaXN0VGFnQXR0ciArPSByZXN1bHQuYXR0clN0clxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgbGlzdFRhZ1ZhbCArPSB0aGlzLnByb2Nlc3NUZXh0T3JPYmpOb2RlKGl0ZW0sIGtleSwgbGV2ZWwsIGFqUGF0aClcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5vbmVMaXN0R3JvdXApIHtcbiAgICAgICAgICAgIGxldCB0ZXh0VmFsdWUgPSB0aGlzLm9wdGlvbnMudGFnVmFsdWVQcm9jZXNzb3Ioa2V5LCBpdGVtKTtcbiAgICAgICAgICAgIHRleHRWYWx1ZSA9IHRoaXMucmVwbGFjZUVudGl0aWVzVmFsdWUodGV4dFZhbHVlKTtcbiAgICAgICAgICAgIGxpc3RUYWdWYWwgKz0gdGV4dFZhbHVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsaXN0VGFnVmFsICs9IHRoaXMuYnVpbGRUZXh0VmFsTm9kZShpdGVtLCBrZXksICcnLCBsZXZlbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZih0aGlzLm9wdGlvbnMub25lTGlzdEdyb3VwKXtcbiAgICAgICAgbGlzdFRhZ1ZhbCA9IHRoaXMuYnVpbGRPYmplY3ROb2RlKGxpc3RUYWdWYWwsIGtleSwgbGlzdFRhZ0F0dHIsIGxldmVsKTtcbiAgICAgIH1cbiAgICAgIHZhbCArPSBsaXN0VGFnVmFsO1xuICAgIH0gZWxzZSB7XG4gICAgICAvL25lc3RlZCBub2RlXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmF0dHJpYnV0ZXNHcm91cE5hbWUgJiYga2V5ID09PSB0aGlzLm9wdGlvbnMuYXR0cmlidXRlc0dyb3VwTmFtZSkge1xuICAgICAgICBjb25zdCBLcyA9IE9iamVjdC5rZXlzKGpPYmpba2V5XSk7XG4gICAgICAgIGNvbnN0IEwgPSBLcy5sZW5ndGg7XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgTDsgaisrKSB7XG4gICAgICAgICAgYXR0clN0ciArPSB0aGlzLmJ1aWxkQXR0clBhaXJTdHIoS3Nbal0sICcnICsgak9ialtrZXldW0tzW2pdXSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbCArPSB0aGlzLnByb2Nlc3NUZXh0T3JPYmpOb2RlKGpPYmpba2V5XSwga2V5LCBsZXZlbCwgYWpQYXRoKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4ge2F0dHJTdHI6IGF0dHJTdHIsIHZhbDogdmFsfTtcbn07XG5cbkJ1aWxkZXIucHJvdG90eXBlLmJ1aWxkQXR0clBhaXJTdHIgPSBmdW5jdGlvbihhdHRyTmFtZSwgdmFsKXtcbiAgdmFsID0gdGhpcy5vcHRpb25zLmF0dHJpYnV0ZVZhbHVlUHJvY2Vzc29yKGF0dHJOYW1lLCAnJyArIHZhbCk7XG4gIHZhbCA9IHRoaXMucmVwbGFjZUVudGl0aWVzVmFsdWUodmFsKTtcbiAgaWYgKHRoaXMub3B0aW9ucy5zdXBwcmVzc0Jvb2xlYW5BdHRyaWJ1dGVzICYmIHZhbCA9PT0gXCJ0cnVlXCIpIHtcbiAgICByZXR1cm4gJyAnICsgYXR0ck5hbWU7XG4gIH0gZWxzZSByZXR1cm4gJyAnICsgYXR0ck5hbWUgKyAnPVwiJyArIHZhbCArICdcIic7XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NUZXh0T3JPYmpOb2RlIChvYmplY3QsIGtleSwgbGV2ZWwsIGFqUGF0aCkge1xuICBjb25zdCByZXN1bHQgPSB0aGlzLmoyeChvYmplY3QsIGxldmVsICsgMSwgYWpQYXRoLmNvbmNhdChrZXkpKTtcbiAgaWYgKG9iamVjdFt0aGlzLm9wdGlvbnMudGV4dE5vZGVOYW1lXSAhPT0gdW5kZWZpbmVkICYmIE9iamVjdC5rZXlzKG9iamVjdCkubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIHRoaXMuYnVpbGRUZXh0VmFsTm9kZShvYmplY3RbdGhpcy5vcHRpb25zLnRleHROb2RlTmFtZV0sIGtleSwgcmVzdWx0LmF0dHJTdHIsIGxldmVsKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdGhpcy5idWlsZE9iamVjdE5vZGUocmVzdWx0LnZhbCwga2V5LCByZXN1bHQuYXR0clN0ciwgbGV2ZWwpO1xuICB9XG59XG5cbkJ1aWxkZXIucHJvdG90eXBlLmJ1aWxkT2JqZWN0Tm9kZSA9IGZ1bmN0aW9uKHZhbCwga2V5LCBhdHRyU3RyLCBsZXZlbCkge1xuICBpZih2YWwgPT09IFwiXCIpe1xuICAgIGlmKGtleVswXSA9PT0gXCI/XCIpIHJldHVybiAgdGhpcy5pbmRlbnRhdGUobGV2ZWwpICsgJzwnICsga2V5ICsgYXR0clN0cisgJz8nICsgdGhpcy50YWdFbmRDaGFyO1xuICAgIGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuaW5kZW50YXRlKGxldmVsKSArICc8JyArIGtleSArIGF0dHJTdHIgKyB0aGlzLmNsb3NlVGFnKGtleSkgKyB0aGlzLnRhZ0VuZENoYXI7XG4gICAgfVxuICB9ZWxzZXtcblxuICAgIGxldCB0YWdFbmRFeHAgPSAnPC8nICsga2V5ICsgdGhpcy50YWdFbmRDaGFyO1xuICAgIGxldCBwaUNsb3NpbmdDaGFyID0gXCJcIjtcbiAgICBcbiAgICBpZihrZXlbMF0gPT09IFwiP1wiKSB7XG4gICAgICBwaUNsb3NpbmdDaGFyID0gXCI/XCI7XG4gICAgICB0YWdFbmRFeHAgPSBcIlwiO1xuICAgIH1cbiAgXG4gICAgLy8gYXR0clN0ciBpcyBhbiBlbXB0eSBzdHJpbmcgaW4gY2FzZSB0aGUgYXR0cmlidXRlIGNhbWUgYXMgdW5kZWZpbmVkIG9yIG51bGxcbiAgICBpZiAoKGF0dHJTdHIgfHwgYXR0clN0ciA9PT0gJycpICYmIHZhbC5pbmRleE9mKCc8JykgPT09IC0xKSB7XG4gICAgICByZXR1cm4gKCB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyAnPCcgKyAga2V5ICsgYXR0clN0ciArIHBpQ2xvc2luZ0NoYXIgKyAnPicgKyB2YWwgKyB0YWdFbmRFeHAgKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5jb21tZW50UHJvcE5hbWUgIT09IGZhbHNlICYmIGtleSA9PT0gdGhpcy5vcHRpb25zLmNvbW1lbnRQcm9wTmFtZSAmJiBwaUNsb3NpbmdDaGFyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5kZW50YXRlKGxldmVsKSArIGA8IS0tJHt2YWx9LS0+YCArIHRoaXMubmV3TGluZTtcbiAgICB9ZWxzZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyAnPCcgKyBrZXkgKyBhdHRyU3RyICsgcGlDbG9zaW5nQ2hhciArIHRoaXMudGFnRW5kQ2hhciArXG4gICAgICAgIHZhbCArXG4gICAgICAgIHRoaXMuaW5kZW50YXRlKGxldmVsKSArIHRhZ0VuZEV4cCAgICApO1xuICAgIH1cbiAgfVxufVxuXG5CdWlsZGVyLnByb3RvdHlwZS5jbG9zZVRhZyA9IGZ1bmN0aW9uKGtleSl7XG4gIGxldCBjbG9zZVRhZyA9IFwiXCI7XG4gIGlmKHRoaXMub3B0aW9ucy51bnBhaXJlZFRhZ3MuaW5kZXhPZihrZXkpICE9PSAtMSl7IC8vdW5wYWlyZWRcbiAgICBpZighdGhpcy5vcHRpb25zLnN1cHByZXNzVW5wYWlyZWROb2RlKSBjbG9zZVRhZyA9IFwiL1wiXG4gIH1lbHNlIGlmKHRoaXMub3B0aW9ucy5zdXBwcmVzc0VtcHR5Tm9kZSl7IC8vZW1wdHlcbiAgICBjbG9zZVRhZyA9IFwiL1wiO1xuICB9ZWxzZXtcbiAgICBjbG9zZVRhZyA9IGA+PC8ke2tleX1gXG4gIH1cbiAgcmV0dXJuIGNsb3NlVGFnO1xufVxuXG5mdW5jdGlvbiBidWlsZEVtcHR5T2JqTm9kZSh2YWwsIGtleSwgYXR0clN0ciwgbGV2ZWwpIHtcbiAgaWYgKHZhbCAhPT0gJycpIHtcbiAgICByZXR1cm4gdGhpcy5idWlsZE9iamVjdE5vZGUodmFsLCBrZXksIGF0dHJTdHIsIGxldmVsKTtcbiAgfSBlbHNlIHtcbiAgICBpZihrZXlbMF0gPT09IFwiP1wiKSByZXR1cm4gIHRoaXMuaW5kZW50YXRlKGxldmVsKSArICc8JyArIGtleSArIGF0dHJTdHIrICc/JyArIHRoaXMudGFnRW5kQ2hhcjtcbiAgICBlbHNlIHtcbiAgICAgIHJldHVybiAgdGhpcy5pbmRlbnRhdGUobGV2ZWwpICsgJzwnICsga2V5ICsgYXR0clN0ciArICcvJyArIHRoaXMudGFnRW5kQ2hhcjtcbiAgICAgIC8vIHJldHVybiB0aGlzLmJ1aWxkVGFnU3RyKGxldmVsLGtleSwgYXR0clN0cik7XG4gICAgfVxuICB9XG59XG5cbkJ1aWxkZXIucHJvdG90eXBlLmJ1aWxkVGV4dFZhbE5vZGUgPSBmdW5jdGlvbih2YWwsIGtleSwgYXR0clN0ciwgbGV2ZWwpIHtcbiAgaWYgKHRoaXMub3B0aW9ucy5jZGF0YVByb3BOYW1lICE9PSBmYWxzZSAmJiBrZXkgPT09IHRoaXMub3B0aW9ucy5jZGF0YVByb3BOYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuaW5kZW50YXRlKGxldmVsKSArIGA8IVtDREFUQVske3ZhbH1dXT5gICsgIHRoaXMubmV3TGluZTtcbiAgfWVsc2UgaWYgKHRoaXMub3B0aW9ucy5jb21tZW50UHJvcE5hbWUgIT09IGZhbHNlICYmIGtleSA9PT0gdGhpcy5vcHRpb25zLmNvbW1lbnRQcm9wTmFtZSkge1xuICAgIHJldHVybiB0aGlzLmluZGVudGF0ZShsZXZlbCkgKyBgPCEtLSR7dmFsfS0tPmAgKyAgdGhpcy5uZXdMaW5lO1xuICB9ZWxzZSBpZihrZXlbMF0gPT09IFwiP1wiKSB7Ly9QSSB0YWdcbiAgICByZXR1cm4gIHRoaXMuaW5kZW50YXRlKGxldmVsKSArICc8JyArIGtleSArIGF0dHJTdHIrICc/JyArIHRoaXMudGFnRW5kQ2hhcjsgXG4gIH1lbHNle1xuICAgIGxldCB0ZXh0VmFsdWUgPSB0aGlzLm9wdGlvbnMudGFnVmFsdWVQcm9jZXNzb3Ioa2V5LCB2YWwpO1xuICAgIHRleHRWYWx1ZSA9IHRoaXMucmVwbGFjZUVudGl0aWVzVmFsdWUodGV4dFZhbHVlKTtcbiAgXG4gICAgaWYoIHRleHRWYWx1ZSA9PT0gJycpe1xuICAgICAgcmV0dXJuIHRoaXMuaW5kZW50YXRlKGxldmVsKSArICc8JyArIGtleSArIGF0dHJTdHIgKyB0aGlzLmNsb3NlVGFnKGtleSkgKyB0aGlzLnRhZ0VuZENoYXI7XG4gICAgfWVsc2V7XG4gICAgICByZXR1cm4gdGhpcy5pbmRlbnRhdGUobGV2ZWwpICsgJzwnICsga2V5ICsgYXR0clN0ciArICc+JyArXG4gICAgICAgICB0ZXh0VmFsdWUgK1xuICAgICAgICAnPC8nICsga2V5ICsgdGhpcy50YWdFbmRDaGFyO1xuICAgIH1cbiAgfVxufVxuXG5CdWlsZGVyLnByb3RvdHlwZS5yZXBsYWNlRW50aXRpZXNWYWx1ZSA9IGZ1bmN0aW9uKHRleHRWYWx1ZSl7XG4gIGlmKHRleHRWYWx1ZSAmJiB0ZXh0VmFsdWUubGVuZ3RoID4gMCAmJiB0aGlzLm9wdGlvbnMucHJvY2Vzc0VudGl0aWVzKXtcbiAgICBmb3IgKGxldCBpPTA7IGk8dGhpcy5vcHRpb25zLmVudGl0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBlbnRpdHkgPSB0aGlzLm9wdGlvbnMuZW50aXRpZXNbaV07XG4gICAgICB0ZXh0VmFsdWUgPSB0ZXh0VmFsdWUucmVwbGFjZShlbnRpdHkucmVnZXgsIGVudGl0eS52YWwpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdGV4dFZhbHVlO1xufVxuXG5mdW5jdGlvbiBpbmRlbnRhdGUobGV2ZWwpIHtcbiAgcmV0dXJuIHRoaXMub3B0aW9ucy5pbmRlbnRCeS5yZXBlYXQobGV2ZWwpO1xufVxuXG5mdW5jdGlvbiBpc0F0dHJpYnV0ZShuYW1lIC8qLCBvcHRpb25zKi8pIHtcbiAgaWYgKG5hbWUuc3RhcnRzV2l0aCh0aGlzLm9wdGlvbnMuYXR0cmlidXRlTmFtZVByZWZpeCkgJiYgbmFtZSAhPT0gdGhpcy5vcHRpb25zLnRleHROb2RlTmFtZSkge1xuICAgIHJldHVybiBuYW1lLnN1YnN0cih0aGlzLmF0dHJQcmVmaXhMZW4pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEJ1aWxkZXI7XG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxuY29uc3QgdmFsaWRhdG9yID0gcmVxdWlyZSgnLi92YWxpZGF0b3InKTtcbmNvbnN0IFhNTFBhcnNlciA9IHJlcXVpcmUoJy4veG1scGFyc2VyL1hNTFBhcnNlcicpO1xuY29uc3QgWE1MQnVpbGRlciA9IHJlcXVpcmUoJy4veG1sYnVpbGRlci9qc29uMnhtbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgWE1MUGFyc2VyOiBYTUxQYXJzZXIsXG4gIFhNTFZhbGlkYXRvcjogdmFsaWRhdG9yLFxuICBYTUxCdWlsZGVyOiBYTUxCdWlsZGVyXG59IiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5YTUxfQ0hBUktFWSA9IGV4cG9ydHMuWE1MX0FUVFJLRVkgPSB2b2lkIDA7XG4vKipcbiAqIERlZmF1bHQga2V5IHVzZWQgdG8gYWNjZXNzIHRoZSBYTUwgYXR0cmlidXRlcy5cbiAqL1xuZXhwb3J0cy5YTUxfQVRUUktFWSA9IFwiJFwiO1xuLyoqXG4gKiBEZWZhdWx0IGtleSB1c2VkIHRvIGFjY2VzcyB0aGUgWE1MIHZhbHVlIGNvbnRlbnQuXG4gKi9cbmV4cG9ydHMuWE1MX0NIQVJLRVkgPSBcIl9cIjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXhtbC5jb21tb24uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5zdHJpbmdpZnlYTUwgPSBzdHJpbmdpZnlYTUw7XG5leHBvcnRzLnBhcnNlWE1MID0gcGFyc2VYTUw7XG5jb25zdCBmYXN0X3htbF9wYXJzZXJfMSA9IHJlcXVpcmUoXCJmYXN0LXhtbC1wYXJzZXJcIik7XG5jb25zdCB4bWxfY29tbW9uX2pzXzEgPSByZXF1aXJlKFwiLi94bWwuY29tbW9uLmpzXCIpO1xuZnVuY3Rpb24gZ2V0Q29tbW9uT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiB7XG4gICAgICAgIGF0dHJpYnV0ZXNHcm91cE5hbWU6IHhtbF9jb21tb25fanNfMS5YTUxfQVRUUktFWSxcbiAgICAgICAgdGV4dE5vZGVOYW1lOiAoX2EgPSBvcHRpb25zLnhtbENoYXJLZXkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHhtbF9jb21tb25fanNfMS5YTUxfQ0hBUktFWSxcbiAgICAgICAgaWdub3JlQXR0cmlidXRlczogZmFsc2UsXG4gICAgICAgIHN1cHByZXNzQm9vbGVhbkF0dHJpYnV0ZXM6IGZhbHNlLFxuICAgIH07XG59XG5mdW5jdGlvbiBnZXRTZXJpYWxpemVyT3B0aW9ucyhvcHRpb25zID0ge30pIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGdldENvbW1vbk9wdGlvbnMob3B0aW9ucykpLCB7IGF0dHJpYnV0ZU5hbWVQcmVmaXg6IFwiQF9cIiwgZm9ybWF0OiB0cnVlLCBzdXBwcmVzc0VtcHR5Tm9kZTogdHJ1ZSwgaW5kZW50Qnk6IFwiXCIsIHJvb3ROb2RlTmFtZTogKF9hID0gb3B0aW9ucy5yb290TmFtZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogXCJyb290XCIsIGNkYXRhUHJvcE5hbWU6IChfYiA9IG9wdGlvbnMuY2RhdGFQcm9wTmFtZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogXCJfX2NkYXRhXCIgfSk7XG59XG5mdW5jdGlvbiBnZXRQYXJzZXJPcHRpb25zKG9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGdldENvbW1vbk9wdGlvbnMob3B0aW9ucykpLCB7IHBhcnNlQXR0cmlidXRlVmFsdWU6IGZhbHNlLCBwYXJzZVRhZ1ZhbHVlOiBmYWxzZSwgYXR0cmlidXRlTmFtZVByZWZpeDogXCJcIiwgc3RvcE5vZGVzOiBvcHRpb25zLnN0b3BOb2RlcywgcHJvY2Vzc0VudGl0aWVzOiB0cnVlIH0pO1xufVxuLyoqXG4gKiBDb252ZXJ0cyBnaXZlbiBKU09OIG9iamVjdCB0byBYTUwgc3RyaW5nXG4gKiBAcGFyYW0gb2JqIC0gSlNPTiBvYmplY3QgdG8gYmUgY29udmVydGVkIGludG8gWE1MIHN0cmluZ1xuICogQHBhcmFtIG9wdHMgLSBPcHRpb25zIHRoYXQgZ292ZXJuIHRoZSBYTUwgYnVpbGRpbmcgb2YgZ2l2ZW4gSlNPTiBvYmplY3RcbiAqIGByb290TmFtZWAgaW5kaWNhdGVzIHRoZSBuYW1lIG9mIHRoZSByb290IGVsZW1lbnQgaW4gdGhlIHJlc3VsdGluZyBYTUxcbiAqL1xuZnVuY3Rpb24gc3RyaW5naWZ5WE1MKG9iaiwgb3B0cyA9IHt9KSB7XG4gICAgY29uc3QgcGFyc2VyT3B0aW9ucyA9IGdldFNlcmlhbGl6ZXJPcHRpb25zKG9wdHMpO1xuICAgIGNvbnN0IGoyeCA9IG5ldyBmYXN0X3htbF9wYXJzZXJfMS5YTUxCdWlsZGVyKHBhcnNlck9wdGlvbnMpO1xuICAgIGNvbnN0IG5vZGUgPSB7IFtwYXJzZXJPcHRpb25zLnJvb3ROb2RlTmFtZV06IG9iaiB9O1xuICAgIGNvbnN0IHhtbERhdGEgPSBqMnguYnVpbGQobm9kZSk7XG4gICAgcmV0dXJuIGA8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJVVEYtOFwiIHN0YW5kYWxvbmU9XCJ5ZXNcIj8+JHt4bWxEYXRhfWAucmVwbGFjZSgvXFxuL2csIFwiXCIpO1xufVxuLyoqXG4gKiBDb252ZXJ0cyBnaXZlbiBYTUwgc3RyaW5nIGludG8gSlNPTlxuICogQHBhcmFtIHN0ciAtIFN0cmluZyBjb250YWluaW5nIHRoZSBYTUwgY29udGVudCB0byBiZSBwYXJzZWQgaW50byBKU09OXG4gKiBAcGFyYW0gb3B0cyAtIE9wdGlvbnMgdGhhdCBnb3Zlcm4gdGhlIHBhcnNpbmcgb2YgZ2l2ZW4geG1sIHN0cmluZ1xuICogYGluY2x1ZGVSb290YCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgcm9vdCBlbGVtZW50IGlzIHRvIGJlIGluY2x1ZGVkIG9yIG5vdCBpbiB0aGUgb3V0cHV0XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHBhcnNlWE1MKHN0ciwgb3B0cyA9IHt9KSB7XG4gICAgaWYgKCFzdHIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRG9jdW1lbnQgaXMgZW1wdHlcIik7XG4gICAgfVxuICAgIGNvbnN0IHZhbGlkYXRpb24gPSBmYXN0X3htbF9wYXJzZXJfMS5YTUxWYWxpZGF0b3IudmFsaWRhdGUoc3RyKTtcbiAgICBpZiAodmFsaWRhdGlvbiAhPT0gdHJ1ZSkge1xuICAgICAgICB0aHJvdyB2YWxpZGF0aW9uO1xuICAgIH1cbiAgICBjb25zdCBwYXJzZXIgPSBuZXcgZmFzdF94bWxfcGFyc2VyXzEuWE1MUGFyc2VyKGdldFBhcnNlck9wdGlvbnMob3B0cykpO1xuICAgIGNvbnN0IHBhcnNlZFhtbCA9IHBhcnNlci5wYXJzZShzdHIpO1xuICAgIC8vIFJlbW92ZSB0aGUgPD94bWwgdmVyc2lvbj1cIi4uLlwiID8+IG5vZGUuXG4gICAgLy8gVGhpcyBpcyBhIGNoYW5nZSBpbiBiZWhhdmlvciBvbiBmeHAgdjQuIElzc3VlICM0MjRcbiAgICBpZiAocGFyc2VkWG1sW1wiP3htbFwiXSkge1xuICAgICAgICBkZWxldGUgcGFyc2VkWG1sW1wiP3htbFwiXTtcbiAgICB9XG4gICAgaWYgKCFvcHRzLmluY2x1ZGVSb290KSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHBhcnNlZFhtbCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcGFyc2VkWG1sW2tleV07XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiID8gT2JqZWN0LmFzc2lnbih7fSwgdmFsdWUpIDogdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlZFhtbDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXhtbC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlhNTF9DSEFSS0VZID0gZXhwb3J0cy5YTUxfQVRUUktFWSA9IGV4cG9ydHMucGFyc2VYTUwgPSBleHBvcnRzLnN0cmluZ2lmeVhNTCA9IHZvaWQgMDtcbnZhciB4bWxfanNfMSA9IHJlcXVpcmUoXCIuL3htbC5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0cmluZ2lmeVhNTFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4geG1sX2pzXzEuc3RyaW5naWZ5WE1MOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicGFyc2VYTUxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHhtbF9qc18xLnBhcnNlWE1MOyB9IH0pO1xudmFyIHhtbF9jb21tb25fanNfMSA9IHJlcXVpcmUoXCIuL3htbC5jb21tb24uanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJYTUxfQVRUUktFWVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4geG1sX2NvbW1vbl9qc18xLlhNTF9BVFRSS0VZOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiWE1MX0NIQVJLRVlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHhtbF9jb21tb25fanNfMS5YTUxfQ0hBUktFWTsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubG9nZ2VyID0gdm9pZCAwO1xuY29uc3QgbG9nZ2VyXzEgPSByZXF1aXJlKFwiQGF6dXJlL2xvZ2dlclwiKTtcbi8qKlxuICogVGhlIGBAYXp1cmUvbG9nZ2VyYCBjb25maWd1cmF0aW9uIGZvciB0aGlzIHBhY2thZ2UuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0cy5sb2dnZXIgPSAoMCwgbG9nZ2VyXzEuY3JlYXRlQ2xpZW50TG9nZ2VyKShcImNvcmUtbHJvXCIpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bG9nZ2VyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudGVybWluYWxTdGF0ZXMgPSBleHBvcnRzLlBPTExfSU5URVJWQUxfSU5fTVMgPSB2b2lkIDA7XG4vKipcbiAqIFRoZSBkZWZhdWx0IHRpbWUgaW50ZXJ2YWwgdG8gd2FpdCBiZWZvcmUgc2VuZGluZyB0aGUgbmV4dCBwb2xsaW5nIHJlcXVlc3QuXG4gKi9cbmV4cG9ydHMuUE9MTF9JTlRFUlZBTF9JTl9NUyA9IDIwMDA7XG4vKipcbiAqIFRoZSBjbG9zZWQgc2V0IG9mIHRlcm1pbmFsIHN0YXRlcy5cbiAqL1xuZXhwb3J0cy50ZXJtaW5hbFN0YXRlcyA9IFtcInN1Y2NlZWRlZFwiLCBcImNhbmNlbGVkXCIsIFwiZmFpbGVkXCJdO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3RhbnRzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucG9sbE9wZXJhdGlvbiA9IGV4cG9ydHMuaW5pdE9wZXJhdGlvbiA9IGV4cG9ydHMuZGVzZXJpYWxpemVTdGF0ZSA9IHZvaWQgMDtcbmNvbnN0IGxvZ2dlcl9qc18xID0gcmVxdWlyZShcIi4uL2xvZ2dlci5qc1wiKTtcbmNvbnN0IGNvbnN0YW50c19qc18xID0gcmVxdWlyZShcIi4vY29uc3RhbnRzLmpzXCIpO1xuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgdGhlIHN0YXRlXG4gKi9cbmZ1bmN0aW9uIGRlc2VyaWFsaXplU3RhdGUoc2VyaWFsaXplZFN0YXRlKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2Uoc2VyaWFsaXplZFN0YXRlKS5zdGF0ZTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gZGVzZXJpYWxpemUgaW5wdXQgc3RhdGU6ICR7c2VyaWFsaXplZFN0YXRlfWApO1xuICAgIH1cbn1cbmV4cG9ydHMuZGVzZXJpYWxpemVTdGF0ZSA9IGRlc2VyaWFsaXplU3RhdGU7XG5mdW5jdGlvbiBzZXRTdGF0ZUVycm9yKGlucHV0cykge1xuICAgIGNvbnN0IHsgc3RhdGUsIHN0YXRlUHJveHksIGlzT3BlcmF0aW9uRXJyb3IgfSA9IGlucHV0cztcbiAgICByZXR1cm4gKGVycm9yKSA9PiB7XG4gICAgICAgIGlmIChpc09wZXJhdGlvbkVycm9yKGVycm9yKSkge1xuICAgICAgICAgICAgc3RhdGVQcm94eS5zZXRFcnJvcihzdGF0ZSwgZXJyb3IpO1xuICAgICAgICAgICAgc3RhdGVQcm94eS5zZXRGYWlsZWQoc3RhdGUpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgIH07XG59XG5mdW5jdGlvbiBhcHBlbmRSZWFkYWJsZUVycm9yTWVzc2FnZShjdXJyZW50TWVzc2FnZSwgaW5uZXJNZXNzYWdlKSB7XG4gICAgbGV0IG1lc3NhZ2UgPSBjdXJyZW50TWVzc2FnZTtcbiAgICBpZiAobWVzc2FnZS5zbGljZSgtMSkgIT09IFwiLlwiKSB7XG4gICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlICsgXCIuXCI7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlICsgXCIgXCIgKyBpbm5lck1lc3NhZ2U7XG59XG5mdW5jdGlvbiBzaW1wbGlmeUVycm9yKGVycikge1xuICAgIGxldCBtZXNzYWdlID0gZXJyLm1lc3NhZ2U7XG4gICAgbGV0IGNvZGUgPSBlcnIuY29kZTtcbiAgICBsZXQgY3VyRXJyID0gZXJyO1xuICAgIHdoaWxlIChjdXJFcnIuaW5uZXJlcnJvcikge1xuICAgICAgICBjdXJFcnIgPSBjdXJFcnIuaW5uZXJlcnJvcjtcbiAgICAgICAgY29kZSA9IGN1ckVyci5jb2RlO1xuICAgICAgICBtZXNzYWdlID0gYXBwZW5kUmVhZGFibGVFcnJvck1lc3NhZ2UobWVzc2FnZSwgY3VyRXJyLm1lc3NhZ2UpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBjb2RlLFxuICAgICAgICBtZXNzYWdlLFxuICAgIH07XG59XG5mdW5jdGlvbiBwcm9jZXNzT3BlcmF0aW9uU3RhdHVzKHJlc3VsdCkge1xuICAgIGNvbnN0IHsgc3RhdGUsIHN0YXRlUHJveHksIHN0YXR1cywgaXNEb25lLCBwcm9jZXNzUmVzdWx0LCBnZXRFcnJvciwgcmVzcG9uc2UsIHNldEVycm9yQXNSZXN1bHQgfSA9IHJlc3VsdDtcbiAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgICBjYXNlIFwic3VjY2VlZGVkXCI6IHtcbiAgICAgICAgICAgIHN0YXRlUHJveHkuc2V0U3VjY2VlZGVkKHN0YXRlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJmYWlsZWRcIjoge1xuICAgICAgICAgICAgY29uc3QgZXJyID0gZ2V0RXJyb3IgPT09IG51bGwgfHwgZ2V0RXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGdldEVycm9yKHJlc3BvbnNlKTtcbiAgICAgICAgICAgIGxldCBwb3N0Zml4ID0gXCJcIjtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGNvZGUsIG1lc3NhZ2UgfSA9IHNpbXBsaWZ5RXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICBwb3N0Zml4ID0gYC4gJHtjb2RlfS4gJHttZXNzYWdlfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBlcnJTdHIgPSBgVGhlIGxvbmctcnVubmluZyBvcGVyYXRpb24gaGFzIGZhaWxlZCR7cG9zdGZpeH1gO1xuICAgICAgICAgICAgc3RhdGVQcm94eS5zZXRFcnJvcihzdGF0ZSwgbmV3IEVycm9yKGVyclN0cikpO1xuICAgICAgICAgICAgc3RhdGVQcm94eS5zZXRGYWlsZWQoc3RhdGUpO1xuICAgICAgICAgICAgbG9nZ2VyX2pzXzEubG9nZ2VyLndhcm5pbmcoZXJyU3RyKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJjYW5jZWxlZFwiOiB7XG4gICAgICAgICAgICBzdGF0ZVByb3h5LnNldENhbmNlbGVkKHN0YXRlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICgoaXNEb25lID09PSBudWxsIHx8IGlzRG9uZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogaXNEb25lKHJlc3BvbnNlLCBzdGF0ZSkpIHx8XG4gICAgICAgIChpc0RvbmUgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgW1wic3VjY2VlZGVkXCIsIFwiY2FuY2VsZWRcIl0uY29uY2F0KHNldEVycm9yQXNSZXN1bHQgPyBbXSA6IFtcImZhaWxlZFwiXSkuaW5jbHVkZXMoc3RhdHVzKSkpIHtcbiAgICAgICAgc3RhdGVQcm94eS5zZXRSZXN1bHQoc3RhdGUsIGJ1aWxkUmVzdWx0KHtcbiAgICAgICAgICAgIHJlc3BvbnNlLFxuICAgICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgICBwcm9jZXNzUmVzdWx0LFxuICAgICAgICB9KSk7XG4gICAgfVxufVxuZnVuY3Rpb24gYnVpbGRSZXN1bHQoaW5wdXRzKSB7XG4gICAgY29uc3QgeyBwcm9jZXNzUmVzdWx0LCByZXNwb25zZSwgc3RhdGUgfSA9IGlucHV0cztcbiAgICByZXR1cm4gcHJvY2Vzc1Jlc3VsdCA/IHByb2Nlc3NSZXN1bHQocmVzcG9uc2UsIHN0YXRlKSA6IHJlc3BvbnNlO1xufVxuLyoqXG4gKiBJbml0aWF0ZXMgdGhlIGxvbmctcnVubmluZyBvcGVyYXRpb24uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGluaXRPcGVyYXRpb24oaW5wdXRzKSB7XG4gICAgY29uc3QgeyBpbml0LCBzdGF0ZVByb3h5LCBwcm9jZXNzUmVzdWx0LCBnZXRPcGVyYXRpb25TdGF0dXMsIHdpdGhPcGVyYXRpb25Mb2NhdGlvbiwgc2V0RXJyb3JBc1Jlc3VsdCwgfSA9IGlucHV0cztcbiAgICBjb25zdCB7IG9wZXJhdGlvbkxvY2F0aW9uLCByZXNvdXJjZUxvY2F0aW9uLCBtZXRhZGF0YSwgcmVzcG9uc2UgfSA9IGF3YWl0IGluaXQoKTtcbiAgICBpZiAob3BlcmF0aW9uTG9jYXRpb24pXG4gICAgICAgIHdpdGhPcGVyYXRpb25Mb2NhdGlvbiA9PT0gbnVsbCB8fCB3aXRoT3BlcmF0aW9uTG9jYXRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHdpdGhPcGVyYXRpb25Mb2NhdGlvbihvcGVyYXRpb25Mb2NhdGlvbiwgZmFsc2UpO1xuICAgIGNvbnN0IGNvbmZpZyA9IHtcbiAgICAgICAgbWV0YWRhdGEsXG4gICAgICAgIG9wZXJhdGlvbkxvY2F0aW9uLFxuICAgICAgICByZXNvdXJjZUxvY2F0aW9uLFxuICAgIH07XG4gICAgbG9nZ2VyX2pzXzEubG9nZ2VyLnZlcmJvc2UoYExSTzogT3BlcmF0aW9uIGRlc2NyaXB0aW9uOmAsIGNvbmZpZyk7XG4gICAgY29uc3Qgc3RhdGUgPSBzdGF0ZVByb3h5LmluaXRTdGF0ZShjb25maWcpO1xuICAgIGNvbnN0IHN0YXR1cyA9IGdldE9wZXJhdGlvblN0YXR1cyh7IHJlc3BvbnNlLCBzdGF0ZSwgb3BlcmF0aW9uTG9jYXRpb24gfSk7XG4gICAgcHJvY2Vzc09wZXJhdGlvblN0YXR1cyh7IHN0YXRlLCBzdGF0dXMsIHN0YXRlUHJveHksIHJlc3BvbnNlLCBzZXRFcnJvckFzUmVzdWx0LCBwcm9jZXNzUmVzdWx0IH0pO1xuICAgIHJldHVybiBzdGF0ZTtcbn1cbmV4cG9ydHMuaW5pdE9wZXJhdGlvbiA9IGluaXRPcGVyYXRpb247XG5hc3luYyBmdW5jdGlvbiBwb2xsT3BlcmF0aW9uSGVscGVyKGlucHV0cykge1xuICAgIGNvbnN0IHsgcG9sbCwgc3RhdGUsIHN0YXRlUHJveHksIG9wZXJhdGlvbkxvY2F0aW9uLCBnZXRPcGVyYXRpb25TdGF0dXMsIGdldFJlc291cmNlTG9jYXRpb24sIGlzT3BlcmF0aW9uRXJyb3IsIG9wdGlvbnMsIH0gPSBpbnB1dHM7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBwb2xsKG9wZXJhdGlvbkxvY2F0aW9uLCBvcHRpb25zKS5jYXRjaChzZXRTdGF0ZUVycm9yKHtcbiAgICAgICAgc3RhdGUsXG4gICAgICAgIHN0YXRlUHJveHksXG4gICAgICAgIGlzT3BlcmF0aW9uRXJyb3IsXG4gICAgfSkpO1xuICAgIGNvbnN0IHN0YXR1cyA9IGdldE9wZXJhdGlvblN0YXR1cyhyZXNwb25zZSwgc3RhdGUpO1xuICAgIGxvZ2dlcl9qc18xLmxvZ2dlci52ZXJib3NlKGBMUk86IFN0YXR1czpcXG5cXHRQb2xsaW5nIGZyb206ICR7c3RhdGUuY29uZmlnLm9wZXJhdGlvbkxvY2F0aW9ufVxcblxcdE9wZXJhdGlvbiBzdGF0dXM6ICR7c3RhdHVzfVxcblxcdFBvbGxpbmcgc3RhdHVzOiAke2NvbnN0YW50c19qc18xLnRlcm1pbmFsU3RhdGVzLmluY2x1ZGVzKHN0YXR1cykgPyBcIlN0b3BwZWRcIiA6IFwiUnVubmluZ1wifWApO1xuICAgIGlmIChzdGF0dXMgPT09IFwic3VjY2VlZGVkXCIpIHtcbiAgICAgICAgY29uc3QgcmVzb3VyY2VMb2NhdGlvbiA9IGdldFJlc291cmNlTG9jYXRpb24ocmVzcG9uc2UsIHN0YXRlKTtcbiAgICAgICAgaWYgKHJlc291cmNlTG9jYXRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZTogYXdhaXQgcG9sbChyZXNvdXJjZUxvY2F0aW9uKS5jYXRjaChzZXRTdGF0ZUVycm9yKHsgc3RhdGUsIHN0YXRlUHJveHksIGlzT3BlcmF0aW9uRXJyb3IgfSkpLFxuICAgICAgICAgICAgICAgIHN0YXR1cyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHsgcmVzcG9uc2UsIHN0YXR1cyB9O1xufVxuLyoqIFBvbGxzIHRoZSBsb25nLXJ1bm5pbmcgb3BlcmF0aW9uLiAqL1xuYXN5bmMgZnVuY3Rpb24gcG9sbE9wZXJhdGlvbihpbnB1dHMpIHtcbiAgICBjb25zdCB7IHBvbGwsIHN0YXRlLCBzdGF0ZVByb3h5LCBvcHRpb25zLCBnZXRPcGVyYXRpb25TdGF0dXMsIGdldFJlc291cmNlTG9jYXRpb24sIGdldE9wZXJhdGlvbkxvY2F0aW9uLCBpc09wZXJhdGlvbkVycm9yLCB3aXRoT3BlcmF0aW9uTG9jYXRpb24sIGdldFBvbGxpbmdJbnRlcnZhbCwgcHJvY2Vzc1Jlc3VsdCwgZ2V0RXJyb3IsIHVwZGF0ZVN0YXRlLCBzZXREZWxheSwgaXNEb25lLCBzZXRFcnJvckFzUmVzdWx0LCB9ID0gaW5wdXRzO1xuICAgIGNvbnN0IHsgb3BlcmF0aW9uTG9jYXRpb24gfSA9IHN0YXRlLmNvbmZpZztcbiAgICBpZiAob3BlcmF0aW9uTG9jYXRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCB7IHJlc3BvbnNlLCBzdGF0dXMgfSA9IGF3YWl0IHBvbGxPcGVyYXRpb25IZWxwZXIoe1xuICAgICAgICAgICAgcG9sbCxcbiAgICAgICAgICAgIGdldE9wZXJhdGlvblN0YXR1cyxcbiAgICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgICAgc3RhdGVQcm94eSxcbiAgICAgICAgICAgIG9wZXJhdGlvbkxvY2F0aW9uLFxuICAgICAgICAgICAgZ2V0UmVzb3VyY2VMb2NhdGlvbixcbiAgICAgICAgICAgIGlzT3BlcmF0aW9uRXJyb3IsXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICB9KTtcbiAgICAgICAgcHJvY2Vzc09wZXJhdGlvblN0YXR1cyh7XG4gICAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgICByZXNwb25zZSxcbiAgICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgICAgc3RhdGVQcm94eSxcbiAgICAgICAgICAgIGlzRG9uZSxcbiAgICAgICAgICAgIHByb2Nlc3NSZXN1bHQsXG4gICAgICAgICAgICBnZXRFcnJvcixcbiAgICAgICAgICAgIHNldEVycm9yQXNSZXN1bHQsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIWNvbnN0YW50c19qc18xLnRlcm1pbmFsU3RhdGVzLmluY2x1ZGVzKHN0YXR1cykpIHtcbiAgICAgICAgICAgIGNvbnN0IGludGVydmFsSW5NcyA9IGdldFBvbGxpbmdJbnRlcnZhbCA9PT0gbnVsbCB8fCBnZXRQb2xsaW5nSW50ZXJ2YWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGdldFBvbGxpbmdJbnRlcnZhbChyZXNwb25zZSk7XG4gICAgICAgICAgICBpZiAoaW50ZXJ2YWxJbk1zKVxuICAgICAgICAgICAgICAgIHNldERlbGF5KGludGVydmFsSW5Ncyk7XG4gICAgICAgICAgICBjb25zdCBsb2NhdGlvbiA9IGdldE9wZXJhdGlvbkxvY2F0aW9uID09PSBudWxsIHx8IGdldE9wZXJhdGlvbkxvY2F0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiBnZXRPcGVyYXRpb25Mb2NhdGlvbihyZXNwb25zZSwgc3RhdGUpO1xuICAgICAgICAgICAgaWYgKGxvY2F0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc1VwZGF0ZWQgPSBvcGVyYXRpb25Mb2NhdGlvbiAhPT0gbG9jYXRpb247XG4gICAgICAgICAgICAgICAgc3RhdGUuY29uZmlnLm9wZXJhdGlvbkxvY2F0aW9uID0gbG9jYXRpb247XG4gICAgICAgICAgICAgICAgd2l0aE9wZXJhdGlvbkxvY2F0aW9uID09PSBudWxsIHx8IHdpdGhPcGVyYXRpb25Mb2NhdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogd2l0aE9wZXJhdGlvbkxvY2F0aW9uKGxvY2F0aW9uLCBpc1VwZGF0ZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHdpdGhPcGVyYXRpb25Mb2NhdGlvbiA9PT0gbnVsbCB8fCB3aXRoT3BlcmF0aW9uTG9jYXRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHdpdGhPcGVyYXRpb25Mb2NhdGlvbihvcGVyYXRpb25Mb2NhdGlvbiwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZVN0YXRlID09PSBudWxsIHx8IHVwZGF0ZVN0YXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiB1cGRhdGVTdGF0ZShzdGF0ZSwgcmVzcG9uc2UpO1xuICAgIH1cbn1cbmV4cG9ydHMucG9sbE9wZXJhdGlvbiA9IHBvbGxPcGVyYXRpb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1vcGVyYXRpb24uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5wb2xsSHR0cE9wZXJhdGlvbiA9IGV4cG9ydHMuaXNPcGVyYXRpb25FcnJvciA9IGV4cG9ydHMuZ2V0UmVzb3VyY2VMb2NhdGlvbiA9IGV4cG9ydHMuZ2V0T3BlcmF0aW9uU3RhdHVzID0gZXhwb3J0cy5nZXRPcGVyYXRpb25Mb2NhdGlvbiA9IGV4cG9ydHMuaW5pdEh0dHBPcGVyYXRpb24gPSBleHBvcnRzLmdldFN0YXR1c0Zyb21Jbml0aWFsUmVzcG9uc2UgPSBleHBvcnRzLmdldEVycm9yRnJvbVJlc3BvbnNlID0gZXhwb3J0cy5wYXJzZVJldHJ5QWZ0ZXIgPSBleHBvcnRzLmluZmVyTHJvTW9kZSA9IHZvaWQgMDtcbmNvbnN0IG9wZXJhdGlvbl9qc18xID0gcmVxdWlyZShcIi4uL3BvbGxlci9vcGVyYXRpb24uanNcIik7XG5jb25zdCBsb2dnZXJfanNfMSA9IHJlcXVpcmUoXCIuLi9sb2dnZXIuanNcIik7XG5mdW5jdGlvbiBnZXRPcGVyYXRpb25Mb2NhdGlvblBvbGxpbmdVcmwoaW5wdXRzKSB7XG4gICAgY29uc3QgeyBhenVyZUFzeW5jT3BlcmF0aW9uLCBvcGVyYXRpb25Mb2NhdGlvbiB9ID0gaW5wdXRzO1xuICAgIHJldHVybiBvcGVyYXRpb25Mb2NhdGlvbiAhPT0gbnVsbCAmJiBvcGVyYXRpb25Mb2NhdGlvbiAhPT0gdm9pZCAwID8gb3BlcmF0aW9uTG9jYXRpb24gOiBhenVyZUFzeW5jT3BlcmF0aW9uO1xufVxuZnVuY3Rpb24gZ2V0TG9jYXRpb25IZWFkZXIocmF3UmVzcG9uc2UpIHtcbiAgICByZXR1cm4gcmF3UmVzcG9uc2UuaGVhZGVyc1tcImxvY2F0aW9uXCJdO1xufVxuZnVuY3Rpb24gZ2V0T3BlcmF0aW9uTG9jYXRpb25IZWFkZXIocmF3UmVzcG9uc2UpIHtcbiAgICByZXR1cm4gcmF3UmVzcG9uc2UuaGVhZGVyc1tcIm9wZXJhdGlvbi1sb2NhdGlvblwiXTtcbn1cbmZ1bmN0aW9uIGdldEF6dXJlQXN5bmNPcGVyYXRpb25IZWFkZXIocmF3UmVzcG9uc2UpIHtcbiAgICByZXR1cm4gcmF3UmVzcG9uc2UuaGVhZGVyc1tcImF6dXJlLWFzeW5jb3BlcmF0aW9uXCJdO1xufVxuZnVuY3Rpb24gZmluZFJlc291cmNlTG9jYXRpb24oaW5wdXRzKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IHsgbG9jYXRpb24sIHJlcXVlc3RNZXRob2QsIHJlcXVlc3RQYXRoLCByZXNvdXJjZUxvY2F0aW9uQ29uZmlnIH0gPSBpbnB1dHM7XG4gICAgc3dpdGNoIChyZXF1ZXN0TWV0aG9kKSB7XG4gICAgICAgIGNhc2UgXCJQVVRcIjoge1xuICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3RQYXRoO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJERUxFVEVcIjoge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwiUEFUQ0hcIjoge1xuICAgICAgICAgICAgcmV0dXJuIChfYSA9IGdldERlZmF1bHQoKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogcmVxdWVzdFBhdGg7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgcmV0dXJuIGdldERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBnZXREZWZhdWx0KCkge1xuICAgICAgICBzd2l0Y2ggKHJlc291cmNlTG9jYXRpb25Db25maWcpIHtcbiAgICAgICAgICAgIGNhc2UgXCJhenVyZS1hc3luYy1vcGVyYXRpb25cIjoge1xuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwib3JpZ2luYWwtdXJpXCI6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVxdWVzdFBhdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwibG9jYXRpb25cIjpcbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbG9jYXRpb247XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBpbmZlckxyb01vZGUoaW5wdXRzKSB7XG4gICAgY29uc3QgeyByYXdSZXNwb25zZSwgcmVxdWVzdE1ldGhvZCwgcmVxdWVzdFBhdGgsIHJlc291cmNlTG9jYXRpb25Db25maWcgfSA9IGlucHV0cztcbiAgICBjb25zdCBvcGVyYXRpb25Mb2NhdGlvbiA9IGdldE9wZXJhdGlvbkxvY2F0aW9uSGVhZGVyKHJhd1Jlc3BvbnNlKTtcbiAgICBjb25zdCBhenVyZUFzeW5jT3BlcmF0aW9uID0gZ2V0QXp1cmVBc3luY09wZXJhdGlvbkhlYWRlcihyYXdSZXNwb25zZSk7XG4gICAgY29uc3QgcG9sbGluZ1VybCA9IGdldE9wZXJhdGlvbkxvY2F0aW9uUG9sbGluZ1VybCh7IG9wZXJhdGlvbkxvY2F0aW9uLCBhenVyZUFzeW5jT3BlcmF0aW9uIH0pO1xuICAgIGNvbnN0IGxvY2F0aW9uID0gZ2V0TG9jYXRpb25IZWFkZXIocmF3UmVzcG9uc2UpO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRSZXF1ZXN0TWV0aG9kID0gcmVxdWVzdE1ldGhvZCA9PT0gbnVsbCB8fCByZXF1ZXN0TWV0aG9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZXF1ZXN0TWV0aG9kLnRvTG9jYWxlVXBwZXJDYXNlKCk7XG4gICAgaWYgKHBvbGxpbmdVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbW9kZTogXCJPcGVyYXRpb25Mb2NhdGlvblwiLFxuICAgICAgICAgICAgb3BlcmF0aW9uTG9jYXRpb246IHBvbGxpbmdVcmwsXG4gICAgICAgICAgICByZXNvdXJjZUxvY2F0aW9uOiBmaW5kUmVzb3VyY2VMb2NhdGlvbih7XG4gICAgICAgICAgICAgICAgcmVxdWVzdE1ldGhvZDogbm9ybWFsaXplZFJlcXVlc3RNZXRob2QsXG4gICAgICAgICAgICAgICAgbG9jYXRpb24sXG4gICAgICAgICAgICAgICAgcmVxdWVzdFBhdGgsXG4gICAgICAgICAgICAgICAgcmVzb3VyY2VMb2NhdGlvbkNvbmZpZyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBlbHNlIGlmIChsb2NhdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBtb2RlOiBcIlJlc291cmNlTG9jYXRpb25cIixcbiAgICAgICAgICAgIG9wZXJhdGlvbkxvY2F0aW9uOiBsb2NhdGlvbixcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZWxzZSBpZiAobm9ybWFsaXplZFJlcXVlc3RNZXRob2QgPT09IFwiUFVUXCIgJiYgcmVxdWVzdFBhdGgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1vZGU6IFwiQm9keVwiLFxuICAgICAgICAgICAgb3BlcmF0aW9uTG9jYXRpb246IHJlcXVlc3RQYXRoLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59XG5leHBvcnRzLmluZmVyTHJvTW9kZSA9IGluZmVyTHJvTW9kZTtcbmZ1bmN0aW9uIHRyYW5zZm9ybVN0YXR1cyhpbnB1dHMpIHtcbiAgICBjb25zdCB7IHN0YXR1cywgc3RhdHVzQ29kZSB9ID0gaW5wdXRzO1xuICAgIGlmICh0eXBlb2Ygc3RhdHVzICE9PSBcInN0cmluZ1wiICYmIHN0YXR1cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgUG9sbGluZyB3YXMgdW5zdWNjZXNzZnVsLiBFeHBlY3RlZCBzdGF0dXMgdG8gaGF2ZSBhIHN0cmluZyB2YWx1ZSBvciBubyB2YWx1ZSBidXQgaXQgaGFzIGluc3RlYWQ6ICR7c3RhdHVzfS4gVGhpcyBkb2Vzbid0IG5lY2Vzc2FyaWx5IGluZGljYXRlIHRoZSBvcGVyYXRpb24gaGFzIGZhaWxlZC4gQ2hlY2sgeW91ciBBenVyZSBzdWJzY3JpcHRpb24gb3IgcmVzb3VyY2Ugc3RhdHVzIGZvciBtb3JlIGluZm9ybWF0aW9uLmApO1xuICAgIH1cbiAgICBzd2l0Y2ggKHN0YXR1cyA9PT0gbnVsbCB8fCBzdGF0dXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHN0YXR1cy50b0xvY2FsZUxvd2VyQ2FzZSgpKSB7XG4gICAgICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgICAgICAgcmV0dXJuIHRvT3BlcmF0aW9uU3RhdHVzKHN0YXR1c0NvZGUpO1xuICAgICAgICBjYXNlIFwic3VjY2VlZGVkXCI6XG4gICAgICAgICAgICByZXR1cm4gXCJzdWNjZWVkZWRcIjtcbiAgICAgICAgY2FzZSBcImZhaWxlZFwiOlxuICAgICAgICAgICAgcmV0dXJuIFwiZmFpbGVkXCI7XG4gICAgICAgIGNhc2UgXCJydW5uaW5nXCI6XG4gICAgICAgIGNhc2UgXCJhY2NlcHRlZFwiOlxuICAgICAgICBjYXNlIFwic3RhcnRlZFwiOlxuICAgICAgICBjYXNlIFwiY2FuY2VsaW5nXCI6XG4gICAgICAgIGNhc2UgXCJjYW5jZWxsaW5nXCI6XG4gICAgICAgICAgICByZXR1cm4gXCJydW5uaW5nXCI7XG4gICAgICAgIGNhc2UgXCJjYW5jZWxlZFwiOlxuICAgICAgICBjYXNlIFwiY2FuY2VsbGVkXCI6XG4gICAgICAgICAgICByZXR1cm4gXCJjYW5jZWxlZFwiO1xuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBsb2dnZXJfanNfMS5sb2dnZXIudmVyYm9zZShgTFJPOiB1bnJlY29nbml6ZWQgb3BlcmF0aW9uIHN0YXR1czogJHtzdGF0dXN9YCk7XG4gICAgICAgICAgICByZXR1cm4gc3RhdHVzO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0U3RhdHVzKHJhd1Jlc3BvbnNlKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IHsgc3RhdHVzIH0gPSAoX2EgPSByYXdSZXNwb25zZS5ib2R5KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB7fTtcbiAgICByZXR1cm4gdHJhbnNmb3JtU3RhdHVzKHsgc3RhdHVzLCBzdGF0dXNDb2RlOiByYXdSZXNwb25zZS5zdGF0dXNDb2RlIH0pO1xufVxuZnVuY3Rpb24gZ2V0UHJvdmlzaW9uaW5nU3RhdGUocmF3UmVzcG9uc2UpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGNvbnN0IHsgcHJvcGVydGllcywgcHJvdmlzaW9uaW5nU3RhdGUgfSA9IChfYSA9IHJhd1Jlc3BvbnNlLmJvZHkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHt9O1xuICAgIGNvbnN0IHN0YXR1cyA9IChfYiA9IHByb3BlcnRpZXMgPT09IG51bGwgfHwgcHJvcGVydGllcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcHJvcGVydGllcy5wcm92aXNpb25pbmdTdGF0ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogcHJvdmlzaW9uaW5nU3RhdGU7XG4gICAgcmV0dXJuIHRyYW5zZm9ybVN0YXR1cyh7IHN0YXR1cywgc3RhdHVzQ29kZTogcmF3UmVzcG9uc2Uuc3RhdHVzQ29kZSB9KTtcbn1cbmZ1bmN0aW9uIHRvT3BlcmF0aW9uU3RhdHVzKHN0YXR1c0NvZGUpIHtcbiAgICBpZiAoc3RhdHVzQ29kZSA9PT0gMjAyKSB7XG4gICAgICAgIHJldHVybiBcInJ1bm5pbmdcIjtcbiAgICB9XG4gICAgZWxzZSBpZiAoc3RhdHVzQ29kZSA8IDMwMCkge1xuICAgICAgICByZXR1cm4gXCJzdWNjZWVkZWRcIjtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBcImZhaWxlZFwiO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHBhcnNlUmV0cnlBZnRlcih7IHJhd1Jlc3BvbnNlIH0pIHtcbiAgICBjb25zdCByZXRyeUFmdGVyID0gcmF3UmVzcG9uc2UuaGVhZGVyc1tcInJldHJ5LWFmdGVyXCJdO1xuICAgIGlmIChyZXRyeUFmdGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gUmV0cnktQWZ0ZXIgaGVhZGVyIHZhbHVlIGlzIGVpdGhlciBpbiBIVFRQIGRhdGUgZm9ybWF0LCBvciBpbiBzZWNvbmRzXG4gICAgICAgIGNvbnN0IHJldHJ5QWZ0ZXJJblNlY29uZHMgPSBwYXJzZUludChyZXRyeUFmdGVyKTtcbiAgICAgICAgcmV0dXJuIGlzTmFOKHJldHJ5QWZ0ZXJJblNlY29uZHMpXG4gICAgICAgICAgICA/IGNhbGN1bGF0ZVBvbGxpbmdJbnRlcnZhbEZyb21EYXRlKG5ldyBEYXRlKHJldHJ5QWZ0ZXIpKVxuICAgICAgICAgICAgOiByZXRyeUFmdGVySW5TZWNvbmRzICogMTAwMDtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmV4cG9ydHMucGFyc2VSZXRyeUFmdGVyID0gcGFyc2VSZXRyeUFmdGVyO1xuZnVuY3Rpb24gZ2V0RXJyb3JGcm9tUmVzcG9uc2UocmVzcG9uc2UpIHtcbiAgICBjb25zdCBlcnJvciA9IGFjY2Vzc0JvZHlQcm9wZXJ0eShyZXNwb25zZSwgXCJlcnJvclwiKTtcbiAgICBpZiAoIWVycm9yKSB7XG4gICAgICAgIGxvZ2dlcl9qc18xLmxvZ2dlci53YXJuaW5nKGBUaGUgbG9uZy1ydW5uaW5nIG9wZXJhdGlvbiBmYWlsZWQgYnV0IHRoZXJlIGlzIG5vIGVycm9yIHByb3BlcnR5IGluIHRoZSByZXNwb25zZSdzIGJvZHlgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWVycm9yLmNvZGUgfHwgIWVycm9yLm1lc3NhZ2UpIHtcbiAgICAgICAgbG9nZ2VyX2pzXzEubG9nZ2VyLndhcm5pbmcoYFRoZSBsb25nLXJ1bm5pbmcgb3BlcmF0aW9uIGZhaWxlZCBidXQgdGhlIGVycm9yIHByb3BlcnR5IGluIHRoZSByZXNwb25zZSdzIGJvZHkgZG9lc24ndCBjb250YWluIGNvZGUgb3IgbWVzc2FnZWApO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHJldHVybiBlcnJvcjtcbn1cbmV4cG9ydHMuZ2V0RXJyb3JGcm9tUmVzcG9uc2UgPSBnZXRFcnJvckZyb21SZXNwb25zZTtcbmZ1bmN0aW9uIGNhbGN1bGF0ZVBvbGxpbmdJbnRlcnZhbEZyb21EYXRlKHJldHJ5QWZ0ZXJEYXRlKSB7XG4gICAgY29uc3QgdGltZU5vdyA9IE1hdGguZmxvb3IobmV3IERhdGUoKS5nZXRUaW1lKCkpO1xuICAgIGNvbnN0IHJldHJ5QWZ0ZXJUaW1lID0gcmV0cnlBZnRlckRhdGUuZ2V0VGltZSgpO1xuICAgIGlmICh0aW1lTm93IDwgcmV0cnlBZnRlclRpbWUpIHtcbiAgICAgICAgcmV0dXJuIHJldHJ5QWZ0ZXJUaW1lIC0gdGltZU5vdztcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGdldFN0YXR1c0Zyb21Jbml0aWFsUmVzcG9uc2UoaW5wdXRzKSB7XG4gICAgY29uc3QgeyByZXNwb25zZSwgc3RhdGUsIG9wZXJhdGlvbkxvY2F0aW9uIH0gPSBpbnB1dHM7XG4gICAgZnVuY3Rpb24gaGVscGVyKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IG1vZGUgPSAoX2EgPSBzdGF0ZS5jb25maWcubWV0YWRhdGEpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVtcIm1vZGVcIl07XG4gICAgICAgIHN3aXRjaCAobW9kZSkge1xuICAgICAgICAgICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRvT3BlcmF0aW9uU3RhdHVzKHJlc3BvbnNlLnJhd1Jlc3BvbnNlLnN0YXR1c0NvZGUpO1xuICAgICAgICAgICAgY2FzZSBcIkJvZHlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0T3BlcmF0aW9uU3RhdHVzKHJlc3BvbnNlLCBzdGF0ZSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBcInJ1bm5pbmdcIjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBzdGF0dXMgPSBoZWxwZXIoKTtcbiAgICByZXR1cm4gc3RhdHVzID09PSBcInJ1bm5pbmdcIiAmJiBvcGVyYXRpb25Mb2NhdGlvbiA9PT0gdW5kZWZpbmVkID8gXCJzdWNjZWVkZWRcIiA6IHN0YXR1cztcbn1cbmV4cG9ydHMuZ2V0U3RhdHVzRnJvbUluaXRpYWxSZXNwb25zZSA9IGdldFN0YXR1c0Zyb21Jbml0aWFsUmVzcG9uc2U7XG4vKipcbiAqIEluaXRpYXRlcyB0aGUgbG9uZy1ydW5uaW5nIG9wZXJhdGlvbi5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gaW5pdEh0dHBPcGVyYXRpb24oaW5wdXRzKSB7XG4gICAgY29uc3QgeyBzdGF0ZVByb3h5LCByZXNvdXJjZUxvY2F0aW9uQ29uZmlnLCBwcm9jZXNzUmVzdWx0LCBscm8sIHNldEVycm9yQXNSZXN1bHQgfSA9IGlucHV0cztcbiAgICByZXR1cm4gKDAsIG9wZXJhdGlvbl9qc18xLmluaXRPcGVyYXRpb24pKHtcbiAgICAgICAgaW5pdDogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBscm8uc2VuZEluaXRpYWxSZXF1ZXN0KCk7XG4gICAgICAgICAgICBjb25zdCBjb25maWcgPSBpbmZlckxyb01vZGUoe1xuICAgICAgICAgICAgICAgIHJhd1Jlc3BvbnNlOiByZXNwb25zZS5yYXdSZXNwb25zZSxcbiAgICAgICAgICAgICAgICByZXF1ZXN0UGF0aDogbHJvLnJlcXVlc3RQYXRoLFxuICAgICAgICAgICAgICAgIHJlcXVlc3RNZXRob2Q6IGxyby5yZXF1ZXN0TWV0aG9kLFxuICAgICAgICAgICAgICAgIHJlc291cmNlTG9jYXRpb25Db25maWcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHsgcmVzcG9uc2UsIG9wZXJhdGlvbkxvY2F0aW9uOiBjb25maWcgPT09IG51bGwgfHwgY29uZmlnID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb25maWcub3BlcmF0aW9uTG9jYXRpb24sIHJlc291cmNlTG9jYXRpb246IGNvbmZpZyA9PT0gbnVsbCB8fCBjb25maWcgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbmZpZy5yZXNvdXJjZUxvY2F0aW9uIH0sICgoY29uZmlnID09PSBudWxsIHx8IGNvbmZpZyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29uZmlnLm1vZGUpID8geyBtZXRhZGF0YTogeyBtb2RlOiBjb25maWcubW9kZSB9IH0gOiB7fSkpO1xuICAgICAgICB9LFxuICAgICAgICBzdGF0ZVByb3h5LFxuICAgICAgICBwcm9jZXNzUmVzdWx0OiBwcm9jZXNzUmVzdWx0XG4gICAgICAgICAgICA/ICh7IGZsYXRSZXNwb25zZSB9LCBzdGF0ZSkgPT4gcHJvY2Vzc1Jlc3VsdChmbGF0UmVzcG9uc2UsIHN0YXRlKVxuICAgICAgICAgICAgOiAoeyBmbGF0UmVzcG9uc2UgfSkgPT4gZmxhdFJlc3BvbnNlLFxuICAgICAgICBnZXRPcGVyYXRpb25TdGF0dXM6IGdldFN0YXR1c0Zyb21Jbml0aWFsUmVzcG9uc2UsXG4gICAgICAgIHNldEVycm9yQXNSZXN1bHQsXG4gICAgfSk7XG59XG5leHBvcnRzLmluaXRIdHRwT3BlcmF0aW9uID0gaW5pdEh0dHBPcGVyYXRpb247XG5mdW5jdGlvbiBnZXRPcGVyYXRpb25Mb2NhdGlvbih7IHJhd1Jlc3BvbnNlIH0sIHN0YXRlKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IG1vZGUgPSAoX2EgPSBzdGF0ZS5jb25maWcubWV0YWRhdGEpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVtcIm1vZGVcIl07XG4gICAgc3dpdGNoIChtb2RlKSB7XG4gICAgICAgIGNhc2UgXCJPcGVyYXRpb25Mb2NhdGlvblwiOiB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0T3BlcmF0aW9uTG9jYXRpb25Qb2xsaW5nVXJsKHtcbiAgICAgICAgICAgICAgICBvcGVyYXRpb25Mb2NhdGlvbjogZ2V0T3BlcmF0aW9uTG9jYXRpb25IZWFkZXIocmF3UmVzcG9uc2UpLFxuICAgICAgICAgICAgICAgIGF6dXJlQXN5bmNPcGVyYXRpb246IGdldEF6dXJlQXN5bmNPcGVyYXRpb25IZWFkZXIocmF3UmVzcG9uc2UpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcIlJlc291cmNlTG9jYXRpb25cIjoge1xuICAgICAgICAgICAgcmV0dXJuIGdldExvY2F0aW9uSGVhZGVyKHJhd1Jlc3BvbnNlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwiQm9keVwiOlxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5nZXRPcGVyYXRpb25Mb2NhdGlvbiA9IGdldE9wZXJhdGlvbkxvY2F0aW9uO1xuZnVuY3Rpb24gZ2V0T3BlcmF0aW9uU3RhdHVzKHsgcmF3UmVzcG9uc2UgfSwgc3RhdGUpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3QgbW9kZSA9IChfYSA9IHN0YXRlLmNvbmZpZy5tZXRhZGF0YSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hW1wibW9kZVwiXTtcbiAgICBzd2l0Y2ggKG1vZGUpIHtcbiAgICAgICAgY2FzZSBcIk9wZXJhdGlvbkxvY2F0aW9uXCI6IHtcbiAgICAgICAgICAgIHJldHVybiBnZXRTdGF0dXMocmF3UmVzcG9uc2UpO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJSZXNvdXJjZUxvY2F0aW9uXCI6IHtcbiAgICAgICAgICAgIHJldHVybiB0b09wZXJhdGlvblN0YXR1cyhyYXdSZXNwb25zZS5zdGF0dXNDb2RlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwiQm9keVwiOiB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0UHJvdmlzaW9uaW5nU3RhdGUocmF3UmVzcG9uc2UpO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludGVybmFsIGVycm9yOiBVbmV4cGVjdGVkIG9wZXJhdGlvbiBtb2RlOiAke21vZGV9YCk7XG4gICAgfVxufVxuZXhwb3J0cy5nZXRPcGVyYXRpb25TdGF0dXMgPSBnZXRPcGVyYXRpb25TdGF0dXM7XG5mdW5jdGlvbiBhY2Nlc3NCb2R5UHJvcGVydHkoeyBmbGF0UmVzcG9uc2UsIHJhd1Jlc3BvbnNlIH0sIHByb3ApIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIHJldHVybiAoX2EgPSBmbGF0UmVzcG9uc2UgPT09IG51bGwgfHwgZmxhdFJlc3BvbnNlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBmbGF0UmVzcG9uc2VbcHJvcF0pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IChfYiA9IHJhd1Jlc3BvbnNlLmJvZHkpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYltwcm9wXTtcbn1cbmZ1bmN0aW9uIGdldFJlc291cmNlTG9jYXRpb24ocmVzLCBzdGF0ZSkge1xuICAgIGNvbnN0IGxvYyA9IGFjY2Vzc0JvZHlQcm9wZXJ0eShyZXMsIFwicmVzb3VyY2VMb2NhdGlvblwiKTtcbiAgICBpZiAobG9jICYmIHR5cGVvZiBsb2MgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgc3RhdGUuY29uZmlnLnJlc291cmNlTG9jYXRpb24gPSBsb2M7XG4gICAgfVxuICAgIHJldHVybiBzdGF0ZS5jb25maWcucmVzb3VyY2VMb2NhdGlvbjtcbn1cbmV4cG9ydHMuZ2V0UmVzb3VyY2VMb2NhdGlvbiA9IGdldFJlc291cmNlTG9jYXRpb247XG5mdW5jdGlvbiBpc09wZXJhdGlvbkVycm9yKGUpIHtcbiAgICByZXR1cm4gZS5uYW1lID09PSBcIlJlc3RFcnJvclwiO1xufVxuZXhwb3J0cy5pc09wZXJhdGlvbkVycm9yID0gaXNPcGVyYXRpb25FcnJvcjtcbi8qKiBQb2xscyB0aGUgbG9uZy1ydW5uaW5nIG9wZXJhdGlvbi4gKi9cbmFzeW5jIGZ1bmN0aW9uIHBvbGxIdHRwT3BlcmF0aW9uKGlucHV0cykge1xuICAgIGNvbnN0IHsgbHJvLCBzdGF0ZVByb3h5LCBvcHRpb25zLCBwcm9jZXNzUmVzdWx0LCB1cGRhdGVTdGF0ZSwgc2V0RGVsYXksIHN0YXRlLCBzZXRFcnJvckFzUmVzdWx0LCB9ID0gaW5wdXRzO1xuICAgIHJldHVybiAoMCwgb3BlcmF0aW9uX2pzXzEucG9sbE9wZXJhdGlvbikoe1xuICAgICAgICBzdGF0ZSxcbiAgICAgICAgc3RhdGVQcm94eSxcbiAgICAgICAgc2V0RGVsYXksXG4gICAgICAgIHByb2Nlc3NSZXN1bHQ6IHByb2Nlc3NSZXN1bHRcbiAgICAgICAgICAgID8gKHsgZmxhdFJlc3BvbnNlIH0sIGlucHV0U3RhdGUpID0+IHByb2Nlc3NSZXN1bHQoZmxhdFJlc3BvbnNlLCBpbnB1dFN0YXRlKVxuICAgICAgICAgICAgOiAoeyBmbGF0UmVzcG9uc2UgfSkgPT4gZmxhdFJlc3BvbnNlLFxuICAgICAgICBnZXRFcnJvcjogZ2V0RXJyb3JGcm9tUmVzcG9uc2UsXG4gICAgICAgIHVwZGF0ZVN0YXRlLFxuICAgICAgICBnZXRQb2xsaW5nSW50ZXJ2YWw6IHBhcnNlUmV0cnlBZnRlcixcbiAgICAgICAgZ2V0T3BlcmF0aW9uTG9jYXRpb24sXG4gICAgICAgIGdldE9wZXJhdGlvblN0YXR1cyxcbiAgICAgICAgaXNPcGVyYXRpb25FcnJvcixcbiAgICAgICAgZ2V0UmVzb3VyY2VMb2NhdGlvbixcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBleHBhbnNpb24gaGVyZSBpcyBpbnRlbnRpb25hbCBiZWNhdXNlIGBscm9gIGNvdWxkIGJlIGFuIG9iamVjdCB0aGF0XG4gICAgICAgICAqIHJlZmVyZW5jZXMgYW4gaW5uZXIgdGhpcywgc28gd2UgbmVlZCB0byBwcmVzZXJ2ZSBhIHJlZmVyZW5jZSB0byBpdC5cbiAgICAgICAgICovXG4gICAgICAgIHBvbGw6IGFzeW5jIChsb2NhdGlvbiwgaW5wdXRPcHRpb25zKSA9PiBscm8uc2VuZFBvbGxSZXF1ZXN0KGxvY2F0aW9uLCBpbnB1dE9wdGlvbnMpLFxuICAgICAgICBzZXRFcnJvckFzUmVzdWx0LFxuICAgIH0pO1xufVxuZXhwb3J0cy5wb2xsSHR0cE9wZXJhdGlvbiA9IHBvbGxIdHRwT3BlcmF0aW9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9b3BlcmF0aW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYnVpbGRDcmVhdGVQb2xsZXIgPSB2b2lkIDA7XG5jb25zdCBvcGVyYXRpb25fanNfMSA9IHJlcXVpcmUoXCIuL29wZXJhdGlvbi5qc1wiKTtcbmNvbnN0IGNvbnN0YW50c19qc18xID0gcmVxdWlyZShcIi4vY29uc3RhbnRzLmpzXCIpO1xuY29uc3QgY29yZV91dGlsXzEgPSByZXF1aXJlKFwiQGF6dXJlL2NvcmUtdXRpbFwiKTtcbmNvbnN0IGNyZWF0ZVN0YXRlUHJveHkgPSAoKSA9PiAoe1xuICAgIC8qKlxuICAgICAqIFRoZSBzdGF0ZSBhdCB0aGlzIHBvaW50IGlzIGNyZWF0ZWQgdG8gYmUgb2YgdHlwZSBPcGVyYXRpb25TdGF0ZTxUUmVzdWx0Pi5cbiAgICAgKiBJdCB3aWxsIGJlIHVwZGF0ZWQgbGF0ZXIgdG8gYmUgb2YgdHlwZSBUU3RhdGUgd2hlbiB0aGVcbiAgICAgKiBjdXN0b21lci1wcm92aWRlZCBjYWxsYmFjaywgYHVwZGF0ZVN0YXRlYCwgaXMgY2FsbGVkIGR1cmluZyBwb2xsaW5nLlxuICAgICAqL1xuICAgIGluaXRTdGF0ZTogKGNvbmZpZykgPT4gKHsgc3RhdHVzOiBcInJ1bm5pbmdcIiwgY29uZmlnIH0pLFxuICAgIHNldENhbmNlbGVkOiAoc3RhdGUpID0+IChzdGF0ZS5zdGF0dXMgPSBcImNhbmNlbGVkXCIpLFxuICAgIHNldEVycm9yOiAoc3RhdGUsIGVycm9yKSA9PiAoc3RhdGUuZXJyb3IgPSBlcnJvciksXG4gICAgc2V0UmVzdWx0OiAoc3RhdGUsIHJlc3VsdCkgPT4gKHN0YXRlLnJlc3VsdCA9IHJlc3VsdCksXG4gICAgc2V0UnVubmluZzogKHN0YXRlKSA9PiAoc3RhdGUuc3RhdHVzID0gXCJydW5uaW5nXCIpLFxuICAgIHNldFN1Y2NlZWRlZDogKHN0YXRlKSA9PiAoc3RhdGUuc3RhdHVzID0gXCJzdWNjZWVkZWRcIiksXG4gICAgc2V0RmFpbGVkOiAoc3RhdGUpID0+IChzdGF0ZS5zdGF0dXMgPSBcImZhaWxlZFwiKSxcbiAgICBnZXRFcnJvcjogKHN0YXRlKSA9PiBzdGF0ZS5lcnJvcixcbiAgICBnZXRSZXN1bHQ6IChzdGF0ZSkgPT4gc3RhdGUucmVzdWx0LFxuICAgIGlzQ2FuY2VsZWQ6IChzdGF0ZSkgPT4gc3RhdGUuc3RhdHVzID09PSBcImNhbmNlbGVkXCIsXG4gICAgaXNGYWlsZWQ6IChzdGF0ZSkgPT4gc3RhdGUuc3RhdHVzID09PSBcImZhaWxlZFwiLFxuICAgIGlzUnVubmluZzogKHN0YXRlKSA9PiBzdGF0ZS5zdGF0dXMgPT09IFwicnVubmluZ1wiLFxuICAgIGlzU3VjY2VlZGVkOiAoc3RhdGUpID0+IHN0YXRlLnN0YXR1cyA9PT0gXCJzdWNjZWVkZWRcIixcbn0pO1xuLyoqXG4gKiBSZXR1cm5zIGEgcG9sbGVyIGZhY3RvcnkuXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkQ3JlYXRlUG9sbGVyKGlucHV0cykge1xuICAgIGNvbnN0IHsgZ2V0T3BlcmF0aW9uTG9jYXRpb24sIGdldFN0YXR1c0Zyb21Jbml0aWFsUmVzcG9uc2UsIGdldFN0YXR1c0Zyb21Qb2xsUmVzcG9uc2UsIGlzT3BlcmF0aW9uRXJyb3IsIGdldFJlc291cmNlTG9jYXRpb24sIGdldFBvbGxpbmdJbnRlcnZhbCwgZ2V0RXJyb3IsIHJlc29sdmVPblVuc3VjY2Vzc2Z1bCwgfSA9IGlucHV0cztcbiAgICByZXR1cm4gYXN5bmMgKHsgaW5pdCwgcG9sbCB9LCBvcHRpb25zKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcHJvY2Vzc1Jlc3VsdCwgdXBkYXRlU3RhdGUsIHdpdGhPcGVyYXRpb25Mb2NhdGlvbjogd2l0aE9wZXJhdGlvbkxvY2F0aW9uQ2FsbGJhY2ssIGludGVydmFsSW5NcyA9IGNvbnN0YW50c19qc18xLlBPTExfSU5URVJWQUxfSU5fTVMsIHJlc3RvcmVGcm9tLCB9ID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgY29uc3Qgc3RhdGVQcm94eSA9IGNyZWF0ZVN0YXRlUHJveHkoKTtcbiAgICAgICAgY29uc3Qgd2l0aE9wZXJhdGlvbkxvY2F0aW9uID0gd2l0aE9wZXJhdGlvbkxvY2F0aW9uQ2FsbGJhY2tcbiAgICAgICAgICAgID8gKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgY2FsbGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChvcGVyYXRpb25Mb2NhdGlvbiwgaXNVcGRhdGVkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1VwZGF0ZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICB3aXRoT3BlcmF0aW9uTG9jYXRpb25DYWxsYmFjayhvcGVyYXRpb25Mb2NhdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFjYWxsZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICB3aXRoT3BlcmF0aW9uTG9jYXRpb25DYWxsYmFjayhvcGVyYXRpb25Mb2NhdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pKClcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBzdGF0ZSA9IHJlc3RvcmVGcm9tXG4gICAgICAgICAgICA/ICgwLCBvcGVyYXRpb25fanNfMS5kZXNlcmlhbGl6ZVN0YXRlKShyZXN0b3JlRnJvbSlcbiAgICAgICAgICAgIDogYXdhaXQgKDAsIG9wZXJhdGlvbl9qc18xLmluaXRPcGVyYXRpb24pKHtcbiAgICAgICAgICAgICAgICBpbml0LFxuICAgICAgICAgICAgICAgIHN0YXRlUHJveHksXG4gICAgICAgICAgICAgICAgcHJvY2Vzc1Jlc3VsdCxcbiAgICAgICAgICAgICAgICBnZXRPcGVyYXRpb25TdGF0dXM6IGdldFN0YXR1c0Zyb21Jbml0aWFsUmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgd2l0aE9wZXJhdGlvbkxvY2F0aW9uLFxuICAgICAgICAgICAgICAgIHNldEVycm9yQXNSZXN1bHQ6ICFyZXNvbHZlT25VbnN1Y2Nlc3NmdWwsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgbGV0IHJlc3VsdFByb21pc2U7XG4gICAgICAgIGNvbnN0IGFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICAgICAgY29uc3QgaGFuZGxlcnMgPSBuZXcgTWFwKCk7XG4gICAgICAgIGNvbnN0IGhhbmRsZVByb2dyZXNzRXZlbnRzID0gYXN5bmMgKCkgPT4gaGFuZGxlcnMuZm9yRWFjaCgoaCkgPT4gaChzdGF0ZSkpO1xuICAgICAgICBjb25zdCBjYW5jZWxFcnJNc2cgPSBcIk9wZXJhdGlvbiB3YXMgY2FuY2VsZWRcIjtcbiAgICAgICAgbGV0IGN1cnJlbnRQb2xsSW50ZXJ2YWxJbk1zID0gaW50ZXJ2YWxJbk1zO1xuICAgICAgICBjb25zdCBwb2xsZXIgPSB7XG4gICAgICAgICAgICBnZXRPcGVyYXRpb25TdGF0ZTogKCkgPT4gc3RhdGUsXG4gICAgICAgICAgICBnZXRSZXN1bHQ6ICgpID0+IHN0YXRlLnJlc3VsdCxcbiAgICAgICAgICAgIGlzRG9uZTogKCkgPT4gW1wic3VjY2VlZGVkXCIsIFwiZmFpbGVkXCIsIFwiY2FuY2VsZWRcIl0uaW5jbHVkZXMoc3RhdGUuc3RhdHVzKSxcbiAgICAgICAgICAgIGlzU3RvcHBlZDogKCkgPT4gcmVzdWx0UHJvbWlzZSA9PT0gdW5kZWZpbmVkLFxuICAgICAgICAgICAgc3RvcFBvbGxpbmc6ICgpID0+IHtcbiAgICAgICAgICAgICAgICBhYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0b1N0cmluZzogKCkgPT4gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBvblByb2dyZXNzOiAoY2FsbGJhY2spID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzID0gU3ltYm9sKCk7XG4gICAgICAgICAgICAgICAgaGFuZGxlcnMuc2V0KHMsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gKCkgPT4gaGFuZGxlcnMuZGVsZXRlKHMpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBvbGxVbnRpbERvbmU6IChwb2xsT3B0aW9ucykgPT4gKHJlc3VsdFByb21pc2UgIT09IG51bGwgJiYgcmVzdWx0UHJvbWlzZSAhPT0gdm9pZCAwID8gcmVzdWx0UHJvbWlzZSA6IChyZXN1bHRQcm9taXNlID0gKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGFib3J0U2lnbmFsOiBpbnB1dEFib3J0U2lnbmFsIH0gPSBwb2xsT3B0aW9ucyB8fCB7fTtcbiAgICAgICAgICAgICAgICAvLyBJbiB0aGUgZnV0dXJlIHdlIGNhbiB1c2UgQWJvcnRTaWduYWwuYW55KCkgaW5zdGVhZFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGFib3J0TGlzdGVuZXIoKSB7XG4gICAgICAgICAgICAgICAgICAgIGFib3J0Q29udHJvbGxlci5hYm9ydCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBhYm9ydFNpZ25hbCA9IGFib3J0Q29udHJvbGxlci5zaWduYWw7XG4gICAgICAgICAgICAgICAgaWYgKGlucHV0QWJvcnRTaWduYWwgPT09IG51bGwgfHwgaW5wdXRBYm9ydFNpZ25hbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogaW5wdXRBYm9ydFNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGFib3J0Q29udHJvbGxlci5hYm9ydCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICghYWJvcnRTaWduYWwuYWJvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICBpbnB1dEFib3J0U2lnbmFsID09PSBudWxsIHx8IGlucHV0QWJvcnRTaWduYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGlucHV0QWJvcnRTaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIGFib3J0TGlzdGVuZXIsIHsgb25jZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwb2xsZXIuaXNEb25lKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHBvbGxlci5wb2xsKHsgYWJvcnRTaWduYWwgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIXBvbGxlci5pc0RvbmUoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0ICgwLCBjb3JlX3V0aWxfMS5kZWxheSkoY3VycmVudFBvbGxJbnRlcnZhbEluTXMsIHsgYWJvcnRTaWduYWwgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgcG9sbGVyLnBvbGwoeyBhYm9ydFNpZ25hbCB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRBYm9ydFNpZ25hbCA9PT0gbnVsbCB8fCBpbnB1dEFib3J0U2lnbmFsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBpbnB1dEFib3J0U2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBhYm9ydExpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlc29sdmVPblVuc3VjY2Vzc2Z1bCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcG9sbGVyLmdldFJlc3VsdCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChzdGF0ZS5zdGF0dXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJzdWNjZWVkZWRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcG9sbGVyLmdldFJlc3VsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImNhbmNlbGVkXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGNhbmNlbEVyck1zZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZmFpbGVkXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgc3RhdGUuZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwibm90U3RhcnRlZFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcInJ1bm5pbmdcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFBvbGxpbmcgY29tcGxldGVkIHdpdGhvdXQgc3VjY2VlZGluZyBvciBmYWlsaW5nYCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSgpLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc3VsdFByb21pc2UgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9KSkpLFxuICAgICAgICAgICAgYXN5bmMgcG9sbChwb2xsT3B0aW9ucykge1xuICAgICAgICAgICAgICAgIGlmIChyZXNvbHZlT25VbnN1Y2Nlc3NmdWwpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBvbGxlci5pc0RvbmUoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoc3RhdGUuc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwic3VjY2VlZGVkXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImNhbmNlbGVkXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGNhbmNlbEVyck1zZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZmFpbGVkXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgc3RhdGUuZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXdhaXQgKDAsIG9wZXJhdGlvbl9qc18xLnBvbGxPcGVyYXRpb24pKHtcbiAgICAgICAgICAgICAgICAgICAgcG9sbCxcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlUHJveHksXG4gICAgICAgICAgICAgICAgICAgIGdldE9wZXJhdGlvbkxvY2F0aW9uLFxuICAgICAgICAgICAgICAgICAgICBpc09wZXJhdGlvbkVycm9yLFxuICAgICAgICAgICAgICAgICAgICB3aXRoT3BlcmF0aW9uTG9jYXRpb24sXG4gICAgICAgICAgICAgICAgICAgIGdldFBvbGxpbmdJbnRlcnZhbCxcbiAgICAgICAgICAgICAgICAgICAgZ2V0T3BlcmF0aW9uU3RhdHVzOiBnZXRTdGF0dXNGcm9tUG9sbFJlc3BvbnNlLFxuICAgICAgICAgICAgICAgICAgICBnZXRSZXNvdXJjZUxvY2F0aW9uLFxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzUmVzdWx0LFxuICAgICAgICAgICAgICAgICAgICBnZXRFcnJvcixcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IHBvbGxPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICBzZXREZWxheTogKHBvbGxJbnRlcnZhbEluTXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQb2xsSW50ZXJ2YWxJbk1zID0gcG9sbEludGVydmFsSW5NcztcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgc2V0RXJyb3JBc1Jlc3VsdDogIXJlc29sdmVPblVuc3VjY2Vzc2Z1bCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVQcm9ncmVzc0V2ZW50cygpO1xuICAgICAgICAgICAgICAgIGlmICghcmVzb2x2ZU9uVW5zdWNjZXNzZnVsKSB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoc3RhdGUuc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiY2FuY2VsZWRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoY2FuY2VsRXJyTXNnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJmYWlsZWRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBzdGF0ZS5lcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBwb2xsZXI7XG4gICAgfTtcbn1cbmV4cG9ydHMuYnVpbGRDcmVhdGVQb2xsZXIgPSBidWlsZENyZWF0ZVBvbGxlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBvbGxlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNyZWF0ZUh0dHBQb2xsZXIgPSB2b2lkIDA7XG5jb25zdCBvcGVyYXRpb25fanNfMSA9IHJlcXVpcmUoXCIuL29wZXJhdGlvbi5qc1wiKTtcbmNvbnN0IHBvbGxlcl9qc18xID0gcmVxdWlyZShcIi4uL3BvbGxlci9wb2xsZXIuanNcIik7XG4vKipcbiAqIENyZWF0ZXMgYSBwb2xsZXIgdGhhdCBjYW4gYmUgdXNlZCB0byBwb2xsIGEgbG9uZy1ydW5uaW5nIG9wZXJhdGlvbi5cbiAqIEBwYXJhbSBscm8gLSBEZXNjcmlwdGlvbiBvZiB0aGUgbG9uZy1ydW5uaW5nIG9wZXJhdGlvblxuICogQHBhcmFtIG9wdGlvbnMgLSBvcHRpb25zIHRvIGNvbmZpZ3VyZSB0aGUgcG9sbGVyXG4gKiBAcmV0dXJucyBhbiBpbml0aWFsaXplZCBwb2xsZXJcbiAqL1xuYXN5bmMgZnVuY3Rpb24gY3JlYXRlSHR0cFBvbGxlcihscm8sIG9wdGlvbnMpIHtcbiAgICBjb25zdCB7IHJlc291cmNlTG9jYXRpb25Db25maWcsIGludGVydmFsSW5NcywgcHJvY2Vzc1Jlc3VsdCwgcmVzdG9yZUZyb20sIHVwZGF0ZVN0YXRlLCB3aXRoT3BlcmF0aW9uTG9jYXRpb24sIHJlc29sdmVPblVuc3VjY2Vzc2Z1bCA9IGZhbHNlLCB9ID0gb3B0aW9ucyB8fCB7fTtcbiAgICByZXR1cm4gKDAsIHBvbGxlcl9qc18xLmJ1aWxkQ3JlYXRlUG9sbGVyKSh7XG4gICAgICAgIGdldFN0YXR1c0Zyb21Jbml0aWFsUmVzcG9uc2U6IG9wZXJhdGlvbl9qc18xLmdldFN0YXR1c0Zyb21Jbml0aWFsUmVzcG9uc2UsXG4gICAgICAgIGdldFN0YXR1c0Zyb21Qb2xsUmVzcG9uc2U6IG9wZXJhdGlvbl9qc18xLmdldE9wZXJhdGlvblN0YXR1cyxcbiAgICAgICAgaXNPcGVyYXRpb25FcnJvcjogb3BlcmF0aW9uX2pzXzEuaXNPcGVyYXRpb25FcnJvcixcbiAgICAgICAgZ2V0T3BlcmF0aW9uTG9jYXRpb246IG9wZXJhdGlvbl9qc18xLmdldE9wZXJhdGlvbkxvY2F0aW9uLFxuICAgICAgICBnZXRSZXNvdXJjZUxvY2F0aW9uOiBvcGVyYXRpb25fanNfMS5nZXRSZXNvdXJjZUxvY2F0aW9uLFxuICAgICAgICBnZXRQb2xsaW5nSW50ZXJ2YWw6IG9wZXJhdGlvbl9qc18xLnBhcnNlUmV0cnlBZnRlcixcbiAgICAgICAgZ2V0RXJyb3I6IG9wZXJhdGlvbl9qc18xLmdldEVycm9yRnJvbVJlc3BvbnNlLFxuICAgICAgICByZXNvbHZlT25VbnN1Y2Nlc3NmdWwsXG4gICAgfSkoe1xuICAgICAgICBpbml0OiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGxyby5zZW5kSW5pdGlhbFJlcXVlc3QoKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbmZpZyA9ICgwLCBvcGVyYXRpb25fanNfMS5pbmZlckxyb01vZGUpKHtcbiAgICAgICAgICAgICAgICByYXdSZXNwb25zZTogcmVzcG9uc2UucmF3UmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgcmVxdWVzdFBhdGg6IGxyby5yZXF1ZXN0UGF0aCxcbiAgICAgICAgICAgICAgICByZXF1ZXN0TWV0aG9kOiBscm8ucmVxdWVzdE1ldGhvZCxcbiAgICAgICAgICAgICAgICByZXNvdXJjZUxvY2F0aW9uQ29uZmlnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7IHJlc3BvbnNlLCBvcGVyYXRpb25Mb2NhdGlvbjogY29uZmlnID09PSBudWxsIHx8IGNvbmZpZyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29uZmlnLm9wZXJhdGlvbkxvY2F0aW9uLCByZXNvdXJjZUxvY2F0aW9uOiBjb25maWcgPT09IG51bGwgfHwgY29uZmlnID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb25maWcucmVzb3VyY2VMb2NhdGlvbiB9LCAoKGNvbmZpZyA9PT0gbnVsbCB8fCBjb25maWcgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbmZpZy5tb2RlKSA/IHsgbWV0YWRhdGE6IHsgbW9kZTogY29uZmlnLm1vZGUgfSB9IDoge30pKTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9sbDogbHJvLnNlbmRQb2xsUmVxdWVzdCxcbiAgICB9LCB7XG4gICAgICAgIGludGVydmFsSW5NcyxcbiAgICAgICAgd2l0aE9wZXJhdGlvbkxvY2F0aW9uLFxuICAgICAgICByZXN0b3JlRnJvbSxcbiAgICAgICAgdXBkYXRlU3RhdGUsXG4gICAgICAgIHByb2Nlc3NSZXN1bHQ6IHByb2Nlc3NSZXN1bHRcbiAgICAgICAgICAgID8gKHsgZmxhdFJlc3BvbnNlIH0sIHN0YXRlKSA9PiBwcm9jZXNzUmVzdWx0KGZsYXRSZXNwb25zZSwgc3RhdGUpXG4gICAgICAgICAgICA6ICh7IGZsYXRSZXNwb25zZSB9KSA9PiBmbGF0UmVzcG9uc2UsXG4gICAgfSk7XG59XG5leHBvcnRzLmNyZWF0ZUh0dHBQb2xsZXIgPSBjcmVhdGVIdHRwUG9sbGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cG9sbGVyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuR2VuZXJpY1BvbGxPcGVyYXRpb24gPSB2b2lkIDA7XG5jb25zdCBvcGVyYXRpb25fanNfMSA9IHJlcXVpcmUoXCIuLi8uLi9odHRwL29wZXJhdGlvbi5qc1wiKTtcbmNvbnN0IGxvZ2dlcl9qc18xID0gcmVxdWlyZShcIi4uLy4uL2xvZ2dlci5qc1wiKTtcbmNvbnN0IGNyZWF0ZVN0YXRlUHJveHkgPSAoKSA9PiAoe1xuICAgIGluaXRTdGF0ZTogKGNvbmZpZykgPT4gKHsgY29uZmlnLCBpc1N0YXJ0ZWQ6IHRydWUgfSksXG4gICAgc2V0Q2FuY2VsZWQ6IChzdGF0ZSkgPT4gKHN0YXRlLmlzQ2FuY2VsbGVkID0gdHJ1ZSksXG4gICAgc2V0RXJyb3I6IChzdGF0ZSwgZXJyb3IpID0+IChzdGF0ZS5lcnJvciA9IGVycm9yKSxcbiAgICBzZXRSZXN1bHQ6IChzdGF0ZSwgcmVzdWx0KSA9PiAoc3RhdGUucmVzdWx0ID0gcmVzdWx0KSxcbiAgICBzZXRSdW5uaW5nOiAoc3RhdGUpID0+IChzdGF0ZS5pc1N0YXJ0ZWQgPSB0cnVlKSxcbiAgICBzZXRTdWNjZWVkZWQ6IChzdGF0ZSkgPT4gKHN0YXRlLmlzQ29tcGxldGVkID0gdHJ1ZSksXG4gICAgc2V0RmFpbGVkOiAoKSA9PiB7XG4gICAgICAgIC8qKiBlbXB0eSBib2R5ICovXG4gICAgfSxcbiAgICBnZXRFcnJvcjogKHN0YXRlKSA9PiBzdGF0ZS5lcnJvcixcbiAgICBnZXRSZXN1bHQ6IChzdGF0ZSkgPT4gc3RhdGUucmVzdWx0LFxuICAgIGlzQ2FuY2VsZWQ6IChzdGF0ZSkgPT4gISFzdGF0ZS5pc0NhbmNlbGxlZCxcbiAgICBpc0ZhaWxlZDogKHN0YXRlKSA9PiAhIXN0YXRlLmVycm9yLFxuICAgIGlzUnVubmluZzogKHN0YXRlKSA9PiAhIXN0YXRlLmlzU3RhcnRlZCxcbiAgICBpc1N1Y2NlZWRlZDogKHN0YXRlKSA9PiBCb29sZWFuKHN0YXRlLmlzQ29tcGxldGVkICYmICFzdGF0ZS5pc0NhbmNlbGxlZCAmJiAhc3RhdGUuZXJyb3IpLFxufSk7XG5jbGFzcyBHZW5lcmljUG9sbE9wZXJhdGlvbiB7XG4gICAgY29uc3RydWN0b3Ioc3RhdGUsIGxybywgc2V0RXJyb3JBc1Jlc3VsdCwgbHJvUmVzb3VyY2VMb2NhdGlvbkNvbmZpZywgcHJvY2Vzc1Jlc3VsdCwgdXBkYXRlU3RhdGUsIGlzRG9uZSkge1xuICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGU7XG4gICAgICAgIHRoaXMubHJvID0gbHJvO1xuICAgICAgICB0aGlzLnNldEVycm9yQXNSZXN1bHQgPSBzZXRFcnJvckFzUmVzdWx0O1xuICAgICAgICB0aGlzLmxyb1Jlc291cmNlTG9jYXRpb25Db25maWcgPSBscm9SZXNvdXJjZUxvY2F0aW9uQ29uZmlnO1xuICAgICAgICB0aGlzLnByb2Nlc3NSZXN1bHQgPSBwcm9jZXNzUmVzdWx0O1xuICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlID0gdXBkYXRlU3RhdGU7XG4gICAgICAgIHRoaXMuaXNEb25lID0gaXNEb25lO1xuICAgIH1cbiAgICBzZXRQb2xsZXJDb25maWcocG9sbGVyQ29uZmlnKSB7XG4gICAgICAgIHRoaXMucG9sbGVyQ29uZmlnID0gcG9sbGVyQ29uZmlnO1xuICAgIH1cbiAgICBhc3luYyB1cGRhdGUob3B0aW9ucykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IHN0YXRlUHJveHkgPSBjcmVhdGVTdGF0ZVByb3h5KCk7XG4gICAgICAgIGlmICghdGhpcy5zdGF0ZS5pc1N0YXJ0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHRoaXMuc3RhdGUpLCAoYXdhaXQgKDAsIG9wZXJhdGlvbl9qc18xLmluaXRIdHRwT3BlcmF0aW9uKSh7XG4gICAgICAgICAgICAgICAgbHJvOiB0aGlzLmxybyxcbiAgICAgICAgICAgICAgICBzdGF0ZVByb3h5LFxuICAgICAgICAgICAgICAgIHJlc291cmNlTG9jYXRpb25Db25maWc6IHRoaXMubHJvUmVzb3VyY2VMb2NhdGlvbkNvbmZpZyxcbiAgICAgICAgICAgICAgICBwcm9jZXNzUmVzdWx0OiB0aGlzLnByb2Nlc3NSZXN1bHQsXG4gICAgICAgICAgICAgICAgc2V0RXJyb3JBc1Jlc3VsdDogdGhpcy5zZXRFcnJvckFzUmVzdWx0LFxuICAgICAgICAgICAgfSkpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1cGRhdGVTdGF0ZSA9IHRoaXMudXBkYXRlU3RhdGU7XG4gICAgICAgIGNvbnN0IGlzRG9uZSA9IHRoaXMuaXNEb25lO1xuICAgICAgICBpZiAoIXRoaXMuc3RhdGUuaXNDb21wbGV0ZWQgJiYgdGhpcy5zdGF0ZS5lcnJvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhd2FpdCAoMCwgb3BlcmF0aW9uX2pzXzEucG9sbEh0dHBPcGVyYXRpb24pKHtcbiAgICAgICAgICAgICAgICBscm86IHRoaXMubHJvLFxuICAgICAgICAgICAgICAgIHN0YXRlOiB0aGlzLnN0YXRlLFxuICAgICAgICAgICAgICAgIHN0YXRlUHJveHksXG4gICAgICAgICAgICAgICAgcHJvY2Vzc1Jlc3VsdDogdGhpcy5wcm9jZXNzUmVzdWx0LFxuICAgICAgICAgICAgICAgIHVwZGF0ZVN0YXRlOiB1cGRhdGVTdGF0ZVxuICAgICAgICAgICAgICAgICAgICA/IChzdGF0ZSwgeyByYXdSZXNwb25zZSB9KSA9PiB1cGRhdGVTdGF0ZShzdGF0ZSwgcmF3UmVzcG9uc2UpXG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIGlzRG9uZTogaXNEb25lXG4gICAgICAgICAgICAgICAgICAgID8gKHsgZmxhdFJlc3BvbnNlIH0sIHN0YXRlKSA9PiBpc0RvbmUoZmxhdFJlc3BvbnNlLCBzdGF0ZSlcbiAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgICAgICBzZXREZWxheTogKGludGVydmFsSW5NcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBvbGxlckNvbmZpZy5pbnRlcnZhbEluTXMgPSBpbnRlcnZhbEluTXM7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZXRFcnJvckFzUmVzdWx0OiB0aGlzLnNldEVycm9yQXNSZXN1bHQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAoX2EgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuZmlyZVByb2dyZXNzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbChvcHRpb25zLCB0aGlzLnN0YXRlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGFzeW5jIGNhbmNlbCgpIHtcbiAgICAgICAgbG9nZ2VyX2pzXzEubG9nZ2VyLmVycm9yKFwiYGNhbmNlbE9wZXJhdGlvbmAgaXMgZGVwcmVjYXRlZCBiZWNhdXNlIGl0IHdhc24ndCBpbXBsZW1lbnRlZFwiKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNlcmlhbGl6ZXMgdGhlIFBvbGxlciBvcGVyYXRpb24uXG4gICAgICovXG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBzdGF0ZTogdGhpcy5zdGF0ZSxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0cy5HZW5lcmljUG9sbE9wZXJhdGlvbiA9IEdlbmVyaWNQb2xsT3BlcmF0aW9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9b3BlcmF0aW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUG9sbGVyID0gZXhwb3J0cy5Qb2xsZXJDYW5jZWxsZWRFcnJvciA9IGV4cG9ydHMuUG9sbGVyU3RvcHBlZEVycm9yID0gdm9pZCAwO1xuLyoqXG4gKiBXaGVuIGEgcG9sbGVyIGlzIG1hbnVhbGx5IHN0b3BwZWQgdGhyb3VnaCB0aGUgYHN0b3BQb2xsaW5nYCBtZXRob2QsXG4gKiB0aGUgcG9sbGVyIHdpbGwgYmUgcmVqZWN0ZWQgd2l0aCBhbiBpbnN0YW5jZSBvZiB0aGUgUG9sbGVyU3RvcHBlZEVycm9yLlxuICovXG5jbGFzcyBQb2xsZXJTdG9wcGVkRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZSkge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJQb2xsZXJTdG9wcGVkRXJyb3JcIjtcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIFBvbGxlclN0b3BwZWRFcnJvci5wcm90b3R5cGUpO1xuICAgIH1cbn1cbmV4cG9ydHMuUG9sbGVyU3RvcHBlZEVycm9yID0gUG9sbGVyU3RvcHBlZEVycm9yO1xuLyoqXG4gKiBXaGVuIHRoZSBvcGVyYXRpb24gaXMgY2FuY2VsbGVkLCB0aGUgcG9sbGVyIHdpbGwgYmUgcmVqZWN0ZWQgd2l0aCBhbiBpbnN0YW5jZVxuICogb2YgdGhlIFBvbGxlckNhbmNlbGxlZEVycm9yLlxuICovXG5jbGFzcyBQb2xsZXJDYW5jZWxsZWRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlBvbGxlckNhbmNlbGxlZEVycm9yXCI7XG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBQb2xsZXJDYW5jZWxsZWRFcnJvci5wcm90b3R5cGUpO1xuICAgIH1cbn1cbmV4cG9ydHMuUG9sbGVyQ2FuY2VsbGVkRXJyb3IgPSBQb2xsZXJDYW5jZWxsZWRFcnJvcjtcbi8qKlxuICogQSBjbGFzcyB0aGF0IHJlcHJlc2VudHMgdGhlIGRlZmluaXRpb24gb2YgYSBwcm9ncmFtIHRoYXQgcG9sbHMgdGhyb3VnaCBjb25zZWN1dGl2ZSByZXF1ZXN0c1xuICogdW50aWwgaXQgcmVhY2hlcyBhIHN0YXRlIG9mIGNvbXBsZXRpb24uXG4gKlxuICogQSBwb2xsZXIgY2FuIGJlIGV4ZWN1dGVkIG1hbnVhbGx5LCBieSBwb2xsaW5nIHJlcXVlc3QgYnkgcmVxdWVzdCBieSBjYWxsaW5nIHRvIHRoZSBgcG9sbCgpYCBtZXRob2QgcmVwZWF0ZWRseSwgdW50aWwgaXRzIG9wZXJhdGlvbiBpcyBjb21wbGV0ZWQuXG4gKiBJdCBhbHNvIHByb3ZpZGVzIGEgd2F5IHRvIHdhaXQgdW50aWwgdGhlIG9wZXJhdGlvbiBjb21wbGV0ZXMsIGJ5IGNhbGxpbmcgYHBvbGxVbnRpbERvbmUoKWAgYW5kIHdhaXRpbmcgdW50aWwgdGhlIG9wZXJhdGlvbiBmaW5pc2hlcy5cbiAqIFBvbGxlcnMgY2FuIGFsc28gcmVxdWVzdCB0aGUgY2FuY2VsbGF0aW9uIG9mIHRoZSBvbmdvaW5nIHByb2Nlc3MgdG8gd2hvbSBpcyBwcm92aWRpbmcgdGhlIHVuZGVybHlpbmcgbG9uZyBydW5uaW5nIG9wZXJhdGlvbi5cbiAqXG4gKiBgYGB0c1xuICogY29uc3QgcG9sbGVyID0gbmV3IE15UG9sbGVyKCk7XG4gKlxuICogLy8gUG9sbGluZyBqdXN0IG9uY2U6XG4gKiBhd2FpdCBwb2xsZXIucG9sbCgpO1xuICpcbiAqIC8vIFdlIGNhbiB0cnkgdG8gY2FuY2VsIHRoZSByZXF1ZXN0IGhlcmUsIGJ5IGNhbGxpbmc6XG4gKiAvL1xuICogLy8gICAgIGF3YWl0IHBvbGxlci5jYW5jZWxPcGVyYXRpb24oKTtcbiAqIC8vXG4gKlxuICogLy8gR2V0dGluZyB0aGUgZmluYWwgcmVzdWx0OlxuICogY29uc3QgcmVzdWx0ID0gYXdhaXQgcG9sbGVyLnBvbGxVbnRpbERvbmUoKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBQb2xsZXIgaXMgZGVmaW5lZCBieSB0d28gdHlwZXMsIGEgdHlwZSByZXByZXNlbnRpbmcgdGhlIHN0YXRlIG9mIHRoZSBwb2xsZXIsIHdoaWNoXG4gKiBtdXN0IGluY2x1ZGUgYSBiYXNpYyBzZXQgb2YgcHJvcGVydGllcyBmcm9tIGBQb2xsT3BlcmF0aW9uU3RhdGU8VFJlc3VsdD5gLFxuICogYW5kIGEgcmV0dXJuIHR5cGUgZGVmaW5lZCBieSBgVFJlc3VsdGAsIHdoaWNoIGNhbiBiZSBhbnl0aGluZy5cbiAqXG4gKiBUaGUgUG9sbGVyIGNsYXNzIGltcGxlbWVudHMgdGhlIGBQb2xsZXJMaWtlYCBpbnRlcmZhY2UsIHdoaWNoIGFsbG93cyBwb2xsZXIgaW1wbGVtZW50YXRpb25zIHRvIGF2b2lkIGhhdmluZ1xuICogdG8gZXhwb3J0IHRoZSBQb2xsZXIncyBjbGFzcyBkaXJlY3RseSwgYW5kIGluc3RlYWQgb25seSBleHBvcnQgdGhlIGFscmVhZHkgaW5zdGFudGlhdGVkIHBvbGxlciB3aXRoIHRoZSBQb2xsZXJMaWtlIHR5cGUuXG4gKlxuICogYGBgdHNcbiAqIGNsYXNzIENsaWVudCB7XG4gKiAgIHB1YmxpYyBhc3luYyBtYWtlUG9sbGVyOiBQb2xsZXJMaWtlPE15T3BlcmF0aW9uU3RhdGUsIE15UmVzdWx0PiB7XG4gKiAgICAgY29uc3QgcG9sbGVyID0gbmV3IE15UG9sbGVyKHt9KTtcbiAqICAgICAvLyBJdCBtaWdodCBiZSBwcmVmZXJyZWQgdG8gcmV0dXJuIHRoZSBwb2xsZXIgYWZ0ZXIgdGhlIGZpcnN0IHJlcXVlc3QgaXMgbWFkZSxcbiAqICAgICAvLyBzbyB0aGF0IHNvbWUgaW5mb3JtYXRpb24gY2FuIGJlIG9idGFpbmVkIHJpZ2h0IGF3YXkuXG4gKiAgICAgYXdhaXQgcG9sbGVyLnBvbGwoKTtcbiAqICAgICByZXR1cm4gcG9sbGVyO1xuICogICB9XG4gKiB9XG4gKlxuICogY29uc3QgcG9sbGVyOiBQb2xsZXJMaWtlPE15T3BlcmF0aW9uU3RhdGUsIE15UmVzdWx0PiA9IG15Q2xpZW50Lm1ha2VQb2xsZXIoKTtcbiAqIGBgYFxuICpcbiAqIEEgcG9sbGVyIGNhbiBiZSBjcmVhdGVkIHRocm91Z2ggaXRzIGNvbnN0cnVjdG9yLCB0aGVuIGl0IGNhbiBiZSBwb2xsZWQgdW50aWwgaXQncyBjb21wbGV0ZWQuXG4gKiBBdCBhbnkgcG9pbnQgaW4gdGltZSwgdGhlIHN0YXRlIG9mIHRoZSBwb2xsZXIgY2FuIGJlIG9idGFpbmVkIHdpdGhvdXQgZGVsYXkgdGhyb3VnaCB0aGUgZ2V0T3BlcmF0aW9uU3RhdGUgbWV0aG9kLlxuICogQXQgYW55IHBvaW50IGluIHRpbWUsIHRoZSBpbnRlcm1lZGlhdGUgZm9ybXMgb2YgdGhlIHJlc3VsdCB0eXBlIGNhbiBiZSByZXF1ZXN0ZWQgd2l0aG91dCBkZWxheS5cbiAqIE9uY2UgdGhlIHVuZGVybHlpbmcgb3BlcmF0aW9uIGlzIG1hcmtlZCBhcyBjb21wbGV0ZWQsIHRoZSBwb2xsZXIgd2lsbCBzdG9wIGFuZCB0aGUgZmluYWwgdmFsdWUgd2lsbCBiZSByZXR1cm5lZC5cbiAqXG4gKiBgYGB0c1xuICogY29uc3QgcG9sbGVyID0gbXlDbGllbnQubWFrZVBvbGxlcigpO1xuICogY29uc3Qgc3RhdGU6IE15T3BlcmF0aW9uU3RhdGUgPSBwb2xsZXIuZ2V0T3BlcmF0aW9uU3RhdGUoKTtcbiAqXG4gKiAvLyBUaGUgaW50ZXJtZWRpYXRlIHJlc3VsdCBjYW4gYmUgb2J0YWluZWQgYXQgYW55IHRpbWUuXG4gKiBjb25zdCByZXN1bHQ6IE15UmVzdWx0IHwgdW5kZWZpbmVkID0gcG9sbGVyLmdldFJlc3VsdCgpO1xuICpcbiAqIC8vIFRoZSBmaW5hbCByZXN1bHQgY2FuIG9ubHkgYmUgb2J0YWluZWQgYWZ0ZXIgdGhlIHBvbGxlciBmaW5pc2hlcy5cbiAqIGNvbnN0IHJlc3VsdDogTXlSZXN1bHQgPSBhd2FpdCBwb2xsZXIucG9sbFVudGlsRG9uZSgpO1xuICogYGBgXG4gKlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbmNsYXNzIFBvbGxlciB7XG4gICAgLyoqXG4gICAgICogQSBwb2xsZXIgbmVlZHMgdG8gYmUgaW5pdGlhbGl6ZWQgYnkgcGFzc2luZyBpbiBhdCBsZWFzdCB0aGUgYmFzaWMgcHJvcGVydGllcyBvZiB0aGUgYFBvbGxPcGVyYXRpb248VFN0YXRlLCBUUmVzdWx0PmAuXG4gICAgICpcbiAgICAgKiBXaGVuIHdyaXRpbmcgYW4gaW1wbGVtZW50YXRpb24gb2YgYSBQb2xsZXIsIHRoaXMgaW1wbGVtZW50YXRpb24gbmVlZHMgdG8gZGVhbCB3aXRoIHRoZSBpbml0aWFsaXphdGlvblxuICAgICAqIG9mIGFueSBjdXN0b20gc3RhdGUgYmV5b25kIHRoZSBiYXNpYyBkZWZpbml0aW9uIG9mIHRoZSBwb2xsZXIuIFRoZSBiYXNpYyBwb2xsZXIgYXNzdW1lcyB0aGF0IHRoZSBwb2xsZXInc1xuICAgICAqIG9wZXJhdGlvbiBoYXMgYWxyZWFkeSBiZWVuIGRlZmluZWQsIGF0IGxlYXN0IGl0cyBiYXNpYyBwcm9wZXJ0aWVzLiBUaGUgY29kZSBiZWxvdyBzaG93cyBob3cgdG8gYXBwcm9hY2hcbiAgICAgKiB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgY29uc3RydWN0b3Igb2YgYSBuZXcgY3VzdG9tIHBvbGxlci5cbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogZXhwb3J0IGNsYXNzIE15UG9sbGVyIGV4dGVuZHMgUG9sbGVyPE15T3BlcmF0aW9uU3RhdGUsIHN0cmluZz4ge1xuICAgICAqICAgY29uc3RydWN0b3Ioe1xuICAgICAqICAgICAvLyBBbnl0aGluZyB5b3UgbWlnaHQgbmVlZCBvdXRzaWRlIG9mIHRoZSBiYXNpY3NcbiAgICAgKiAgIH0pIHtcbiAgICAgKiAgICAgbGV0IHN0YXRlOiBNeU9wZXJhdGlvblN0YXRlID0ge1xuICAgICAqICAgICAgIHByaXZhdGVQcm9wZXJ0eTogcHJpdmF0ZSxcbiAgICAgKiAgICAgICBwdWJsaWNQcm9wZXJ0eTogcHVibGljLFxuICAgICAqICAgICB9O1xuICAgICAqXG4gICAgICogICAgIGNvbnN0IG9wZXJhdGlvbiA9IHtcbiAgICAgKiAgICAgICBzdGF0ZSxcbiAgICAgKiAgICAgICB1cGRhdGUsXG4gICAgICogICAgICAgY2FuY2VsLFxuICAgICAqICAgICAgIHRvU3RyaW5nXG4gICAgICogICAgIH1cbiAgICAgKlxuICAgICAqICAgICAvLyBTZW5kaW5nIHRoZSBvcGVyYXRpb24gdG8gdGhlIHBhcmVudCdzIGNvbnN0cnVjdG9yLlxuICAgICAqICAgICBzdXBlcihvcGVyYXRpb24pO1xuICAgICAqXG4gICAgICogICAgIC8vIFlvdSBjYW4gYXNzaWduIG1vcmUgbG9jYWwgcHJvcGVydGllcyBoZXJlLlxuICAgICAqICAgfVxuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEluc2lkZSBvZiB0aGlzIGNvbnN0cnVjdG9yLCBhIG5ldyBwcm9taXNlIGlzIGNyZWF0ZWQuIFRoaXMgd2lsbCBiZSB1c2VkIHRvXG4gICAgICogdGVsbCB0aGUgdXNlciB3aGVuIHRoZSBwb2xsZXIgZmluaXNoZXMgKHNlZSBgcG9sbFVudGlsRG9uZSgpYCkuIFRoZSBwcm9taXNlJ3NcbiAgICAgKiByZXNvbHZlIGFuZCByZWplY3QgbWV0aG9kcyBhcmUgYWxzbyB1c2VkIGludGVybmFsbHkgdG8gY29udHJvbCB3aGVuIHRvIHJlc29sdmVcbiAgICAgKiBvciByZWplY3QgYW55b25lIHdhaXRpbmcgZm9yIHRoZSBwb2xsZXIgdG8gZmluaXNoLlxuICAgICAqXG4gICAgICogVGhlIGNvbnN0cnVjdG9yIG9mIGEgY3VzdG9tIGltcGxlbWVudGF0aW9uIG9mIGEgcG9sbGVyIGlzIHdoZXJlIGFueSBzZXJpYWxpemVkIHZlcnNpb24gb2ZcbiAgICAgKiBhIHByZXZpb3VzIHBvbGxlcidzIG9wZXJhdGlvbiBzaG91bGQgYmUgZGVzZXJpYWxpemVkIGludG8gdGhlIG9wZXJhdGlvbiBzZW50IHRvIHRoZVxuICAgICAqIGJhc2UgY29uc3RydWN0b3IuIEZvciBleGFtcGxlOlxuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBleHBvcnQgY2xhc3MgTXlQb2xsZXIgZXh0ZW5kcyBQb2xsZXI8TXlPcGVyYXRpb25TdGF0ZSwgc3RyaW5nPiB7XG4gICAgICogICBjb25zdHJ1Y3RvcihcbiAgICAgKiAgICAgYmFzZU9wZXJhdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkXG4gICAgICogICApIHtcbiAgICAgKiAgICAgbGV0IHN0YXRlOiBNeU9wZXJhdGlvblN0YXRlID0ge307XG4gICAgICogICAgIGlmIChiYXNlT3BlcmF0aW9uKSB7XG4gICAgICogICAgICAgc3RhdGUgPSB7XG4gICAgICogICAgICAgICAuLi5KU09OLnBhcnNlKGJhc2VPcGVyYXRpb24pLnN0YXRlLFxuICAgICAqICAgICAgICAgLi4uc3RhdGVcbiAgICAgKiAgICAgICB9O1xuICAgICAqICAgICB9XG4gICAgICogICAgIGNvbnN0IG9wZXJhdGlvbiA9IHtcbiAgICAgKiAgICAgICBzdGF0ZSxcbiAgICAgKiAgICAgICAvLyAuLi5cbiAgICAgKiAgICAgfVxuICAgICAqICAgICBzdXBlcihvcGVyYXRpb24pO1xuICAgICAqICAgfVxuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcGVyYXRpb24gLSBNdXN0IGNvbnRhaW4gdGhlIGJhc2ljIHByb3BlcnRpZXMgb2YgYFBvbGxPcGVyYXRpb248U3RhdGUsIFRSZXN1bHQ+YC5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihvcGVyYXRpb24pIHtcbiAgICAgICAgLyoqIGNvbnRyb2xzIHdoZXRoZXIgdG8gdGhyb3cgYW4gZXJyb3IgaWYgdGhlIG9wZXJhdGlvbiBmYWlsZWQgb3Igd2FzIGNhbmNlbGVkLiAqL1xuICAgICAgICB0aGlzLnJlc29sdmVPblVuc3VjY2Vzc2Z1bCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0b3BwZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnBvbGxQcm9ncmVzc0NhbGxiYWNrcyA9IFtdO1xuICAgICAgICB0aGlzLm9wZXJhdGlvbiA9IG9wZXJhdGlvbjtcbiAgICAgICAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgICAgICAgIHRoaXMucmVqZWN0ID0gcmVqZWN0O1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gVGhpcyBwcmV2ZW50cyB0aGUgVW5oYW5kbGVkUHJvbWlzZVJlamVjdGlvbldhcm5pbmcgaW4gbm9kZS5qcyBmcm9tIGJlaW5nIHRocm93bi5cbiAgICAgICAgLy8gVGhlIGFib3ZlIHdhcm5pbmcgd291bGQgZ2V0IHRocm93biBpZiBgcG9sbGVyLnBvbGxgIGlzIGNhbGxlZCwgaXQgcmV0dXJucyBhbiBlcnJvcixcbiAgICAgICAgLy8gYW5kIHB1bGxVbnRpbERvbmUgZGlkIG5vdCBoYXZlIGEgLmNhdGNoIG9yIGF3YWl0IHRyeS9jYXRjaCBvbiBpdCdzIHJldHVybiB2YWx1ZS5cbiAgICAgICAgdGhpcy5wcm9taXNlLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICAgIC8qIGludGVudGlvbmFsbHkgYmxhbmsgKi9cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN0YXJ0cyBhIGxvb3AgdGhhdCB3aWxsIGJyZWFrIG9ubHkgaWYgdGhlIHBvbGxlciBpcyBkb25lXG4gICAgICogb3IgaWYgdGhlIHBvbGxlciBpcyBzdG9wcGVkLlxuICAgICAqL1xuICAgIGFzeW5jIHN0YXJ0UG9sbGluZyhwb2xsT3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGlmICh0aGlzLnN0b3BwZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcHBlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlICghdGhpcy5pc1N0b3BwZWQoKSAmJiAhdGhpcy5pc0RvbmUoKSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5wb2xsKHBvbGxPcHRpb25zKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZGVsYXkoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBwb2xsT25jZSBkb2VzIG9uZSBwb2xsaW5nLCBieSBjYWxsaW5nIHRvIHRoZSB1cGRhdGUgbWV0aG9kIG9mIHRoZSB1bmRlcmx5aW5nXG4gICAgICogcG9sbCBvcGVyYXRpb24gdG8gbWFrZSBhbnkgcmVsZXZhbnQgY2hhbmdlIGVmZmVjdGl2ZS5cbiAgICAgKlxuICAgICAqIEl0IG9ubHkgb3B0aW9uYWxseSByZWNlaXZlcyBhbiBvYmplY3Qgd2l0aCBhbiBhYm9ydFNpZ25hbCBwcm9wZXJ0eSwgZnJvbSBcXEBhenVyZS9hYm9ydC1jb250cm9sbGVyJ3MgQWJvcnRTaWduYWxMaWtlLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBwcm9wZXJ0aWVzIHBhc3NlZCB0byB0aGUgb3BlcmF0aW9uJ3MgdXBkYXRlIG1ldGhvZC5cbiAgICAgKi9cbiAgICBhc3luYyBwb2xsT25jZShvcHRpb25zID0ge30pIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzRG9uZSgpKSB7XG4gICAgICAgICAgICB0aGlzLm9wZXJhdGlvbiA9IGF3YWl0IHRoaXMub3BlcmF0aW9uLnVwZGF0ZSh7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgZmlyZVByb2dyZXNzOiB0aGlzLmZpcmVQcm9ncmVzcy5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcm9jZXNzVXBkYXRlZFN0YXRlKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIGZpcmVQcm9ncmVzcyBjYWxscyB0aGUgZnVuY3Rpb25zIHBhc3NlZCBpbiB2aWEgb25Qcm9ncmVzcyB0aGUgbWV0aG9kIG9mIHRoZSBwb2xsZXIuXG4gICAgICpcbiAgICAgKiBJdCBsb29wcyBvdmVyIGFsbCBvZiB0aGUgY2FsbGJhY2tzIHJlY2VpdmVkIGZyb20gb25Qcm9ncmVzcywgYW5kIGV4ZWN1dGVzIHRoZW0sIHNlbmRpbmcgdGhlbVxuICAgICAqIHRoZSBjdXJyZW50IG9wZXJhdGlvbiBzdGF0ZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzdGF0ZSAtIFRoZSBjdXJyZW50IG9wZXJhdGlvbiBzdGF0ZS5cbiAgICAgKi9cbiAgICBmaXJlUHJvZ3Jlc3Moc3RhdGUpIHtcbiAgICAgICAgZm9yIChjb25zdCBjYWxsYmFjayBvZiB0aGlzLnBvbGxQcm9ncmVzc0NhbGxiYWNrcykge1xuICAgICAgICAgICAgY2FsbGJhY2soc3RhdGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEludm9rZXMgdGhlIHVuZGVybHlpbmcgb3BlcmF0aW9uJ3MgY2FuY2VsIG1ldGhvZC5cbiAgICAgKi9cbiAgICBhc3luYyBjYW5jZWxPbmNlKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICB0aGlzLm9wZXJhdGlvbiA9IGF3YWl0IHRoaXMub3BlcmF0aW9uLmNhbmNlbChvcHRpb25zKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHByb21pc2UgdGhhdCB3aWxsIHJlc29sdmUgb25jZSBhIHNpbmdsZSBwb2xsaW5nIHJlcXVlc3QgZmluaXNoZXMuXG4gICAgICogSXQgZG9lcyB0aGlzIGJ5IGNhbGxpbmcgdGhlIHVwZGF0ZSBtZXRob2Qgb2YgdGhlIFBvbGxlcidzIG9wZXJhdGlvbi5cbiAgICAgKlxuICAgICAqIEl0IG9ubHkgb3B0aW9uYWxseSByZWNlaXZlcyBhbiBvYmplY3Qgd2l0aCBhbiBhYm9ydFNpZ25hbCBwcm9wZXJ0eSwgZnJvbSBcXEBhenVyZS9hYm9ydC1jb250cm9sbGVyJ3MgQWJvcnRTaWduYWxMaWtlLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBwcm9wZXJ0aWVzIHBhc3NlZCB0byB0aGUgb3BlcmF0aW9uJ3MgdXBkYXRlIG1ldGhvZC5cbiAgICAgKi9cbiAgICBwb2xsKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBpZiAoIXRoaXMucG9sbE9uY2VQcm9taXNlKSB7XG4gICAgICAgICAgICB0aGlzLnBvbGxPbmNlUHJvbWlzZSA9IHRoaXMucG9sbE9uY2Uob3B0aW9ucyk7XG4gICAgICAgICAgICBjb25zdCBjbGVhclBvbGxPbmNlUHJvbWlzZSA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnBvbGxPbmNlUHJvbWlzZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLnBvbGxPbmNlUHJvbWlzZS50aGVuKGNsZWFyUG9sbE9uY2VQcm9taXNlLCBjbGVhclBvbGxPbmNlUHJvbWlzZSkuY2F0Y2godGhpcy5yZWplY3QpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnBvbGxPbmNlUHJvbWlzZTtcbiAgICB9XG4gICAgcHJvY2Vzc1VwZGF0ZWRTdGF0ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMub3BlcmF0aW9uLnN0YXRlLmVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCF0aGlzLnJlc29sdmVPblVuc3VjY2Vzc2Z1bCkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVqZWN0KHRoaXMub3BlcmF0aW9uLnN0YXRlLmVycm9yKTtcbiAgICAgICAgICAgICAgICB0aHJvdyB0aGlzLm9wZXJhdGlvbi5zdGF0ZS5lcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcGVyYXRpb24uc3RhdGUuaXNDYW5jZWxsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICBpZiAoIXRoaXMucmVzb2x2ZU9uVW5zdWNjZXNzZnVsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgUG9sbGVyQ2FuY2VsbGVkRXJyb3IoXCJPcGVyYXRpb24gd2FzIGNhbmNlbGVkXCIpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc0RvbmUoKSAmJiB0aGlzLnJlc29sdmUpIHtcbiAgICAgICAgICAgIC8vIElmIHRoZSBwb2xsZXIgaGFzIGZpbmlzaGVkIHBvbGxpbmcsIHRoaXMgbWVhbnMgd2Ugbm93IGhhdmUgYSByZXN1bHQuXG4gICAgICAgICAgICAvLyBIb3dldmVyLCBpdCBjYW4gYmUgdGhlIGNhc2UgdGhhdCBUUmVzdWx0IGlzIGluc3RhbnRpYXRlZCB0byB2b2lkLCBzb1xuICAgICAgICAgICAgLy8gd2UgYXJlIG5vdCBleHBlY3RpbmcgYSByZXN1bHQgYW55d2F5LiBUbyBhc3NlcnQgdGhhdCB3ZSBtaWdodCBub3RcbiAgICAgICAgICAgIC8vIGhhdmUgYSByZXN1bHQgZXZlbnR1YWxseSBhZnRlciBmaW5pc2hpbmcgcG9sbGluZywgd2UgY2FzdCB0aGUgcmVzdWx0XG4gICAgICAgICAgICAvLyB0byBUUmVzdWx0LlxuICAgICAgICAgICAgdGhpcy5yZXNvbHZlKHRoaXMuZ2V0UmVzdWx0KCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBwcm9taXNlIHRoYXQgd2lsbCByZXNvbHZlIG9uY2UgdGhlIHVuZGVybHlpbmcgb3BlcmF0aW9uIGlzIGNvbXBsZXRlZC5cbiAgICAgKi9cbiAgICBhc3luYyBwb2xsVW50aWxEb25lKHBvbGxPcHRpb25zID0ge30pIHtcbiAgICAgICAgaWYgKHRoaXMuc3RvcHBlZCkge1xuICAgICAgICAgICAgdGhpcy5zdGFydFBvbGxpbmcocG9sbE9wdGlvbnMpLmNhdGNoKHRoaXMucmVqZWN0KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIHRoZSBzdGF0ZSBjb3VsZCBoYXZlIGJlZW4gdXBkYXRlZCBieVxuICAgICAgICAvLyBgY2FuY2VsT3BlcmF0aW9uYCwgZS5nLiB0aGUgb3BlcmF0aW9uIGlzIGNhbmNlbGVkIG9yIGFuIGVycm9yIG9jY3VycmVkLlxuICAgICAgICB0aGlzLnByb2Nlc3NVcGRhdGVkU3RhdGUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvbWlzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSW52b2tlcyB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgYWZ0ZXIgZWFjaCBwb2xsaW5nIGlzIGNvbXBsZXRlZCxcbiAgICAgKiBzZW5kaW5nIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBwb2xsZXIncyBvcGVyYXRpb24uXG4gICAgICpcbiAgICAgKiBJdCByZXR1cm5zIGEgbWV0aG9kIHRoYXQgY2FuIGJlIHVzZWQgdG8gc3RvcCByZWNlaXZpbmcgdXBkYXRlcyBvbiB0aGUgZ2l2ZW4gY2FsbGJhY2sgZnVuY3Rpb24uXG4gICAgICovXG4gICAgb25Qcm9ncmVzcyhjYWxsYmFjaykge1xuICAgICAgICB0aGlzLnBvbGxQcm9ncmVzc0NhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucG9sbFByb2dyZXNzQ2FsbGJhY2tzID0gdGhpcy5wb2xsUHJvZ3Jlc3NDYWxsYmFja3MuZmlsdGVyKChjKSA9PiBjICE9PSBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcG9sbGVyIGhhcyBmaW5pc2hlZCBwb2xsaW5nLlxuICAgICAqL1xuICAgIGlzRG9uZSgpIHtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLm9wZXJhdGlvbi5zdGF0ZTtcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4oc3RhdGUuaXNDb21wbGV0ZWQgfHwgc3RhdGUuaXNDYW5jZWxsZWQgfHwgc3RhdGUuZXJyb3IpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTdG9wcyB0aGUgcG9sbGVyIGZyb20gY29udGludWluZyB0byBwb2xsLlxuICAgICAqL1xuICAgIHN0b3BQb2xsaW5nKCkge1xuICAgICAgICBpZiAoIXRoaXMuc3RvcHBlZCkge1xuICAgICAgICAgICAgdGhpcy5zdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlamVjdCkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVqZWN0KG5ldyBQb2xsZXJTdG9wcGVkRXJyb3IoXCJUaGlzIHBvbGxlciBpcyBhbHJlYWR5IHN0b3BwZWRcIikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcG9sbGVyIGlzIHN0b3BwZWQuXG4gICAgICovXG4gICAgaXNTdG9wcGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdG9wcGVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBdHRlbXB0cyB0byBjYW5jZWwgdGhlIHVuZGVybHlpbmcgb3BlcmF0aW9uLlxuICAgICAqXG4gICAgICogSXQgb25seSBvcHRpb25hbGx5IHJlY2VpdmVzIGFuIG9iamVjdCB3aXRoIGFuIGFib3J0U2lnbmFsIHByb3BlcnR5LCBmcm9tIFxcQGF6dXJlL2Fib3J0LWNvbnRyb2xsZXIncyBBYm9ydFNpZ25hbExpa2UuXG4gICAgICpcbiAgICAgKiBJZiBpdCdzIGNhbGxlZCBhZ2FpbiBiZWZvcmUgaXQgZmluaXNoZXMsIGl0IHdpbGwgdGhyb3cgYW4gZXJyb3IuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIHByb3BlcnRpZXMgcGFzc2VkIHRvIHRoZSBvcGVyYXRpb24ncyB1cGRhdGUgbWV0aG9kLlxuICAgICAqL1xuICAgIGNhbmNlbE9wZXJhdGlvbihvcHRpb25zID0ge30pIHtcbiAgICAgICAgaWYgKCF0aGlzLmNhbmNlbFByb21pc2UpIHtcbiAgICAgICAgICAgIHRoaXMuY2FuY2VsUHJvbWlzZSA9IHRoaXMuY2FuY2VsT25jZShvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChvcHRpb25zLmFib3J0U2lnbmFsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBIGNhbmNlbCByZXF1ZXN0IGlzIGN1cnJlbnRseSBwZW5kaW5nXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmNhbmNlbFByb21pc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHN0YXRlIG9mIHRoZSBvcGVyYXRpb24uXG4gICAgICpcbiAgICAgKiBFdmVuIHRob3VnaCBUU3RhdGUgd2lsbCBiZSB0aGUgc2FtZSB0eXBlIGluc2lkZSBhbnkgb2YgdGhlIG1ldGhvZHMgb2YgYW55IGV4dGVuc2lvbiBvZiB0aGUgUG9sbGVyIGNsYXNzLFxuICAgICAqIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgcG9sbGVycyBjYW4gY3VzdG9taXplIHdoYXQncyBzaGFyZWQgd2l0aCB0aGUgcHVibGljIGJ5IHdyaXRpbmcgdGhlaXIgb3duXG4gICAgICogdmVyc2lvbiBvZiB0aGUgYGdldE9wZXJhdGlvblN0YXRlYCBtZXRob2QsIGFuZCBieSBkZWZpbmluZyB0d28gdHlwZXMsIG9uZSByZXByZXNlbnRpbmcgdGhlIGludGVybmFsIHN0YXRlIG9mIHRoZSBwb2xsZXJcbiAgICAgKiBhbmQgYSBwdWJsaWMgdHlwZSByZXByZXNlbnRpbmcgYSBzYWZlIHRvIHNoYXJlIHN1YnNldCBvZiB0aGUgcHJvcGVydGllcyBvZiB0aGUgaW50ZXJuYWwgc3RhdGUuXG4gICAgICogVGhlaXIgZGVmaW5pdGlvbiBvZiBnZXRPcGVyYXRpb25TdGF0ZSBjYW4gdGhlbiByZXR1cm4gdGhlaXIgcHVibGljIHR5cGUuXG4gICAgICpcbiAgICAgKiBFeGFtcGxlOlxuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiAvLyBMZXQncyBzYXkgd2UgaGF2ZSBvdXIgcG9sbGVyJ3Mgb3BlcmF0aW9uIHN0YXRlIGRlZmluZWQgYXM6XG4gICAgICogaW50ZXJmYWNlIE15T3BlcmF0aW9uU3RhdGUgZXh0ZW5kcyBQb2xsT3BlcmF0aW9uU3RhdGU8UmVzdWx0VHlwZT4ge1xuICAgICAqICAgcHJpdmF0ZVByb3BlcnR5Pzogc3RyaW5nO1xuICAgICAqICAgcHVibGljUHJvcGVydHk/OiBzdHJpbmc7XG4gICAgICogfVxuICAgICAqXG4gICAgICogLy8gVG8gYWxsb3cgdXMgdG8gaGF2ZSBhIHRydWUgc2VwYXJhdGlvbiBvZiBwdWJsaWMgYW5kIHByaXZhdGUgc3RhdGUsIHdlIGhhdmUgdG8gZGVmaW5lIGFub3RoZXIgaW50ZXJmYWNlOlxuICAgICAqIGludGVyZmFjZSBQdWJsaWNTdGF0ZSBleHRlbmRzIFBvbGxPcGVyYXRpb25TdGF0ZTxSZXN1bHRUeXBlPiB7XG4gICAgICogICBwdWJsaWNQcm9wZXJ0eT86IHN0cmluZztcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBUaGVuLCB3ZSBkZWZpbmUgb3VyIFBvbGxlciBhcyBmb2xsb3dzOlxuICAgICAqIGV4cG9ydCBjbGFzcyBNeVBvbGxlciBleHRlbmRzIFBvbGxlcjxNeU9wZXJhdGlvblN0YXRlLCBSZXN1bHRUeXBlPiB7XG4gICAgICogICAvLyAuLi4gTW9yZSBjb250ZW50IGlzIG5lZWRlZCBoZXJlIC4uLlxuICAgICAqXG4gICAgICogICBwdWJsaWMgZ2V0T3BlcmF0aW9uU3RhdGUoKTogUHVibGljU3RhdGUge1xuICAgICAqICAgICBjb25zdCBzdGF0ZTogUHVibGljU3RhdGUgPSB0aGlzLm9wZXJhdGlvbi5zdGF0ZTtcbiAgICAgKiAgICAgcmV0dXJuIHtcbiAgICAgKiAgICAgICAvLyBQcm9wZXJ0aWVzIGZyb20gUG9sbE9wZXJhdGlvblN0YXRlPFRSZXN1bHQ+XG4gICAgICogICAgICAgaXNTdGFydGVkOiBzdGF0ZS5pc1N0YXJ0ZWQsXG4gICAgICogICAgICAgaXNDb21wbGV0ZWQ6IHN0YXRlLmlzQ29tcGxldGVkLFxuICAgICAqICAgICAgIGlzQ2FuY2VsbGVkOiBzdGF0ZS5pc0NhbmNlbGxlZCxcbiAgICAgKiAgICAgICBlcnJvcjogc3RhdGUuZXJyb3IsXG4gICAgICogICAgICAgcmVzdWx0OiBzdGF0ZS5yZXN1bHQsXG4gICAgICpcbiAgICAgKiAgICAgICAvLyBUaGUgb25seSBvdGhlciBwcm9wZXJ0eSBuZWVkZWQgYnkgUHVibGljU3RhdGUuXG4gICAgICogICAgICAgcHVibGljUHJvcGVydHk6IHN0YXRlLnB1YmxpY1Byb3BlcnR5XG4gICAgICogICAgIH1cbiAgICAgKiAgIH1cbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBZb3UgY2FuIHNlZSB0aGlzIGluIHRoZSB0ZXN0cyBvZiB0aGlzIHJlcG9zaXRvcnksIGdvIHRvIHRoZSBmaWxlOlxuICAgICAqIGAuLi90ZXN0L3V0aWxzL3Rlc3RQb2xsZXIudHNgXG4gICAgICogYW5kIGxvb2sgZm9yIHRoZSBnZXRPcGVyYXRpb25TdGF0ZSBpbXBsZW1lbnRhdGlvbi5cbiAgICAgKi9cbiAgICBnZXRPcGVyYXRpb25TdGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3BlcmF0aW9uLnN0YXRlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgdmFsdWUgb2YgdGhlIG9wZXJhdGlvbixcbiAgICAgKiByZWdhcmRsZXNzIG9mIHRoZSBzdGF0ZSBvZiB0aGUgcG9sbGVyLlxuICAgICAqIEl0IGNhbiByZXR1cm4gdW5kZWZpbmVkIG9yIGFuIGluY29tcGxldGUgZm9ybSBvZiB0aGUgZmluYWwgVFJlc3VsdCB2YWx1ZVxuICAgICAqIGRlcGVuZGluZyBvbiB0aGUgaW1wbGVtZW50YXRpb24uXG4gICAgICovXG4gICAgZ2V0UmVzdWx0KCkge1xuICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMub3BlcmF0aW9uLnN0YXRlO1xuICAgICAgICByZXR1cm4gc3RhdGUucmVzdWx0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgc2VyaWFsaXplZCB2ZXJzaW9uIG9mIHRoZSBwb2xsZXIncyBvcGVyYXRpb25cbiAgICAgKiBieSBpbnZva2luZyB0aGUgb3BlcmF0aW9uJ3MgdG9TdHJpbmcgbWV0aG9kLlxuICAgICAqL1xuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcGVyYXRpb24udG9TdHJpbmcoKTtcbiAgICB9XG59XG5leHBvcnRzLlBvbGxlciA9IFBvbGxlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBvbGxlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkxyb0VuZ2luZSA9IHZvaWQgMDtcbmNvbnN0IG9wZXJhdGlvbl9qc18xID0gcmVxdWlyZShcIi4vb3BlcmF0aW9uLmpzXCIpO1xuY29uc3QgY29uc3RhbnRzX2pzXzEgPSByZXF1aXJlKFwiLi4vLi4vcG9sbGVyL2NvbnN0YW50cy5qc1wiKTtcbmNvbnN0IHBvbGxlcl9qc18xID0gcmVxdWlyZShcIi4uL3BvbGxlci5qc1wiKTtcbmNvbnN0IG9wZXJhdGlvbl9qc18yID0gcmVxdWlyZShcIi4uLy4uL3BvbGxlci9vcGVyYXRpb24uanNcIik7XG4vKipcbiAqIFRoZSBMUk8gRW5naW5lLCBhIGNsYXNzIHRoYXQgcGVyZm9ybXMgcG9sbGluZy5cbiAqL1xuY2xhc3MgTHJvRW5naW5lIGV4dGVuZHMgcG9sbGVyX2pzXzEuUG9sbGVyIHtcbiAgICBjb25zdHJ1Y3Rvcihscm8sIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgeyBpbnRlcnZhbEluTXMgPSBjb25zdGFudHNfanNfMS5QT0xMX0lOVEVSVkFMX0lOX01TLCByZXN1bWVGcm9tLCByZXNvbHZlT25VbnN1Y2Nlc3NmdWwgPSBmYWxzZSwgaXNEb25lLCBscm9SZXNvdXJjZUxvY2F0aW9uQ29uZmlnLCBwcm9jZXNzUmVzdWx0LCB1cGRhdGVTdGF0ZSwgfSA9IG9wdGlvbnMgfHwge307XG4gICAgICAgIGNvbnN0IHN0YXRlID0gcmVzdW1lRnJvbVxuICAgICAgICAgICAgPyAoMCwgb3BlcmF0aW9uX2pzXzIuZGVzZXJpYWxpemVTdGF0ZSkocmVzdW1lRnJvbSlcbiAgICAgICAgICAgIDoge307XG4gICAgICAgIGNvbnN0IG9wZXJhdGlvbiA9IG5ldyBvcGVyYXRpb25fanNfMS5HZW5lcmljUG9sbE9wZXJhdGlvbihzdGF0ZSwgbHJvLCAhcmVzb2x2ZU9uVW5zdWNjZXNzZnVsLCBscm9SZXNvdXJjZUxvY2F0aW9uQ29uZmlnLCBwcm9jZXNzUmVzdWx0LCB1cGRhdGVTdGF0ZSwgaXNEb25lKTtcbiAgICAgICAgc3VwZXIob3BlcmF0aW9uKTtcbiAgICAgICAgdGhpcy5yZXNvbHZlT25VbnN1Y2Nlc3NmdWwgPSByZXNvbHZlT25VbnN1Y2Nlc3NmdWw7XG4gICAgICAgIHRoaXMuY29uZmlnID0geyBpbnRlcnZhbEluTXM6IGludGVydmFsSW5NcyB9O1xuICAgICAgICBvcGVyYXRpb24uc2V0UG9sbGVyQ29uZmlnKHRoaXMuY29uZmlnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIG1ldGhvZCB1c2VkIGJ5IHRoZSBwb2xsZXIgdG8gd2FpdCBiZWZvcmUgYXR0ZW1wdGluZyB0byB1cGRhdGUgaXRzIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBkZWxheSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KCgpID0+IHJlc29sdmUoKSwgdGhpcy5jb25maWcuaW50ZXJ2YWxJbk1zKSk7XG4gICAgfVxufVxuZXhwb3J0cy5Mcm9FbmdpbmUgPSBMcm9FbmdpbmU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1scm9FbmdpbmUuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Mcm9FbmdpbmUgPSB2b2lkIDA7XG52YXIgbHJvRW5naW5lX2pzXzEgPSByZXF1aXJlKFwiLi9scm9FbmdpbmUuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJMcm9FbmdpbmVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGxyb0VuZ2luZV9qc18xLkxyb0VuZ2luZTsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBvbGxPcGVyYXRpb24uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jcmVhdGVIdHRwUG9sbGVyID0gdm9pZCAwO1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbnZhciBwb2xsZXJfanNfMSA9IHJlcXVpcmUoXCIuL2h0dHAvcG9sbGVyLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlSHR0cFBvbGxlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcG9sbGVyX2pzXzEuY3JlYXRlSHR0cFBvbGxlcjsgfSB9KTtcbi8qKlxuICogVGhpcyBjYW4gYmUgdW5jb21tZW50ZWQgdG8gZXhwb3NlIHRoZSBwcm90b2NvbC1hZ25vc3RpYyBwb2xsZXJcbiAqL1xuLy8gZXhwb3J0IHtcbi8vICAgQnVpbGRDcmVhdGVQb2xsZXJPcHRpb25zLFxuLy8gICBPcGVyYXRpb24sXG4vLyAgIENyZWF0ZVBvbGxlck9wdGlvbnMsXG4vLyAgIE9wZXJhdGlvbkNvbmZpZyxcbi8vICAgUmVzdG9yYWJsZU9wZXJhdGlvblN0YXRlLFxuLy8gfSBmcm9tIFwiLi9wb2xsZXIvbW9kZWxzXCI7XG4vLyBleHBvcnQgeyBidWlsZENyZWF0ZVBvbGxlciB9IGZyb20gXCIuL3BvbGxlci9wb2xsZXJcIjtcbi8qKiBsZWdhY3kgKi9cbnRzbGliXzEuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2xlZ2FjeS9scm9FbmdpbmUvaW5kZXguanNcIiksIGV4cG9ydHMpO1xudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vbGVnYWN5L3BvbGxlci5qc1wiKSwgZXhwb3J0cyk7XG50c2xpYl8xLl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9sZWdhY3kvcG9sbE9wZXJhdGlvbi5qc1wiKSwgZXhwb3J0cyk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxudmFyIGNvcmVSZXN0UGlwZWxpbmUgPSByZXF1aXJlKCdAYXp1cmUvY29yZS1yZXN0LXBpcGVsaW5lJyk7XG52YXIgdHNsaWIgPSByZXF1aXJlKCd0c2xpYicpO1xudmFyIGNvcmVBdXRoID0gcmVxdWlyZSgnQGF6dXJlL2NvcmUtYXV0aCcpO1xudmFyIGNvcmVVdGlsID0gcmVxdWlyZSgnQGF6dXJlL2NvcmUtdXRpbCcpO1xudmFyIGNvcmVIdHRwQ29tcGF0ID0gcmVxdWlyZSgnQGF6dXJlL2NvcmUtaHR0cC1jb21wYXQnKTtcbnZhciBjb3JlQ2xpZW50ID0gcmVxdWlyZSgnQGF6dXJlL2NvcmUtY2xpZW50Jyk7XG52YXIgY29yZVhtbCA9IHJlcXVpcmUoJ0BhenVyZS9jb3JlLXhtbCcpO1xudmFyIGxvZ2dlciQxID0gcmVxdWlyZSgnQGF6dXJlL2xvZ2dlcicpO1xudmFyIGFib3J0Q29udHJvbGxlciA9IHJlcXVpcmUoJ0BhenVyZS9hYm9ydC1jb250cm9sbGVyJyk7XG52YXIgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJyk7XG52YXIgY29yZVRyYWNpbmcgPSByZXF1aXJlKCdAYXp1cmUvY29yZS10cmFjaW5nJyk7XG52YXIgc3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJyk7XG52YXIgY29yZUxybyA9IHJlcXVpcmUoJ0BhenVyZS9jb3JlLWxybycpO1xudmFyIGV2ZW50cyA9IHJlcXVpcmUoJ2V2ZW50cycpO1xudmFyIGZzID0gcmVxdWlyZSgnZnMnKTtcbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xudmFyIGJ1ZmZlciA9IHJlcXVpcmUoJ2J1ZmZlcicpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcE5hbWVzcGFjZURlZmF1bHQoZSkge1xuICAgIHZhciBuID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICBpZiAoZSkge1xuICAgICAgICBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICBpZiAoayAhPT0gJ2RlZmF1bHQnKSB7XG4gICAgICAgICAgICAgICAgdmFyIGQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIGspO1xuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCBrLCBkLmdldCA/IGQgOiB7XG4gICAgICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZVtrXTsgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgbi5kZWZhdWx0ID0gZTtcbiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZShuKTtcbn1cblxudmFyIGNvcmVIdHRwQ29tcGF0X19uYW1lc3BhY2UgPSAvKiNfX1BVUkVfXyovX2ludGVyb3BOYW1lc3BhY2VEZWZhdWx0KGNvcmVIdHRwQ29tcGF0KTtcbnZhciBjb3JlQ2xpZW50X19uYW1lc3BhY2UgPSAvKiNfX1BVUkVfXyovX2ludGVyb3BOYW1lc3BhY2VEZWZhdWx0KGNvcmVDbGllbnQpO1xudmFyIGZzX19uYW1lc3BhY2UgPSAvKiNfX1BVUkVfXyovX2ludGVyb3BOYW1lc3BhY2VEZWZhdWx0KGZzKTtcbnZhciB1dGlsX19uYW1lc3BhY2UgPSAvKiNfX1BVUkVfXyovX2ludGVyb3BOYW1lc3BhY2VEZWZhdWx0KHV0aWwpO1xuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogVGhlIGBAYXp1cmUvbG9nZ2VyYCBjb25maWd1cmF0aW9uIGZvciB0aGlzIHBhY2thZ2UuXG4gKi9cbmNvbnN0IGxvZ2dlciA9IGxvZ2dlciQxLmNyZWF0ZUNsaWVudExvZ2dlcihcInN0b3JhZ2UtYmxvYlwiKTtcblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIFRoZSBiYXNlIGNsYXNzIGZyb20gd2hpY2ggYWxsIHJlcXVlc3QgcG9saWNpZXMgZGVyaXZlLlxuICovXG5jbGFzcyBCYXNlUmVxdWVzdFBvbGljeSB7XG4gICAgLyoqXG4gICAgICogVGhlIG1haW4gbWV0aG9kIHRvIGltcGxlbWVudCB0aGF0IG1hbmlwdWxhdGVzIGEgcmVxdWVzdC9yZXNwb25zZS5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAvKipcbiAgICAgKiBUaGUgbmV4dCBwb2xpY3kgaW4gdGhlIHBpcGVsaW5lLiBFYWNoIHBvbGljeSBpcyByZXNwb25zaWJsZSBmb3IgZXhlY3V0aW5nIHRoZSBuZXh0IG9uZSBpZiB0aGUgcmVxdWVzdCBpcyB0byBjb250aW51ZSB0aHJvdWdoIHRoZSBwaXBlbGluZS5cbiAgICAgKi9cbiAgICBfbmV4dFBvbGljeSwgXG4gICAgLyoqXG4gICAgICogVGhlIG9wdGlvbnMgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIGEgZ2l2ZW4gcmVxdWVzdCBwb2xpY3kuXG4gICAgICovXG4gICAgX29wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5fbmV4dFBvbGljeSA9IF9uZXh0UG9saWN5O1xuICAgICAgICB0aGlzLl9vcHRpb25zID0gX29wdGlvbnM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCB3aGV0aGVyIG9yIG5vdCBhIGxvZyB3aXRoIHRoZSBwcm92aWRlZCBsb2cgbGV2ZWwgc2hvdWxkIGJlIGxvZ2dlZC5cbiAgICAgKiBAcGFyYW0gbG9nTGV2ZWwgLSBUaGUgbG9nIGxldmVsIG9mIHRoZSBsb2cgdGhhdCB3aWxsIGJlIGxvZ2dlZC5cbiAgICAgKiBAcmV0dXJucyBXaGV0aGVyIG9yIG5vdCBhIGxvZyB3aXRoIHRoZSBwcm92aWRlZCBsb2cgbGV2ZWwgc2hvdWxkIGJlIGxvZ2dlZC5cbiAgICAgKi9cbiAgICBzaG91bGRMb2cobG9nTGV2ZWwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29wdGlvbnMuc2hvdWxkTG9nKGxvZ0xldmVsKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQXR0ZW1wdCB0byBsb2cgdGhlIHByb3ZpZGVkIG1lc3NhZ2UgdG8gdGhlIHByb3ZpZGVkIGxvZ2dlci4gSWYgbm8gbG9nZ2VyIHdhcyBwcm92aWRlZCBvciBpZlxuICAgICAqIHRoZSBsb2cgbGV2ZWwgZG9lcyBub3QgbWVhdCB0aGUgbG9nZ2VyJ3MgdGhyZXNob2xkLCB0aGVuIG5vdGhpbmcgd2lsbCBiZSBsb2dnZWQuXG4gICAgICogQHBhcmFtIGxvZ0xldmVsIC0gVGhlIGxvZyBsZXZlbCBvZiB0aGlzIGxvZy5cbiAgICAgKiBAcGFyYW0gbWVzc2FnZSAtIFRoZSBtZXNzYWdlIG9mIHRoaXMgbG9nLlxuICAgICAqL1xuICAgIGxvZyhsb2dMZXZlbCwgbWVzc2FnZSkge1xuICAgICAgICB0aGlzLl9vcHRpb25zLmxvZyhsb2dMZXZlbCwgbWVzc2FnZSk7XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbmNvbnN0IFNES19WRVJTSU9OID0gXCIxMi4yNS4wXCI7XG5jb25zdCBTRVJWSUNFX1ZFUlNJT04gPSBcIjIwMjQtMTEtMDRcIjtcbmNvbnN0IEJMT0NLX0JMT0JfTUFYX1VQTE9BRF9CTE9CX0JZVEVTID0gMjU2ICogMTAyNCAqIDEwMjQ7IC8vIDI1Nk1CXG5jb25zdCBCTE9DS19CTE9CX01BWF9TVEFHRV9CTE9DS19CWVRFUyA9IDQwMDAgKiAxMDI0ICogMTAyNDsgLy8gNDAwME1CXG5jb25zdCBCTE9DS19CTE9CX01BWF9CTE9DS1MgPSA1MDAwMDtcbmNvbnN0IERFRkFVTFRfQkxPQ0tfQlVGRkVSX1NJWkVfQllURVMgPSA4ICogMTAyNCAqIDEwMjQ7IC8vIDhNQlxuY29uc3QgREVGQVVMVF9CTE9CX0RPV05MT0FEX0JMT0NLX0JZVEVTID0gNCAqIDEwMjQgKiAxMDI0OyAvLyA0TUJcbmNvbnN0IERFRkFVTFRfTUFYX0RPV05MT0FEX1JFVFJZX1JFUVVFU1RTID0gNTtcbmNvbnN0IFJFUVVFU1RfVElNRU9VVCA9IDEwMCAqIDEwMDA7IC8vIEluIG1zXG4vKipcbiAqIFRoZSBPQXV0aCBzY29wZSB0byB1c2Ugd2l0aCBBenVyZSBTdG9yYWdlLlxuICovXG5jb25zdCBTdG9yYWdlT0F1dGhTY29wZXMgPSBcImh0dHBzOi8vc3RvcmFnZS5henVyZS5jb20vLmRlZmF1bHRcIjtcbmNvbnN0IFVSTENvbnN0YW50cyA9IHtcbiAgICBQYXJhbWV0ZXJzOiB7XG4gICAgICAgIEZPUkNFX0JST1dTRVJfTk9fQ0FDSEU6IFwiX1wiLFxuICAgICAgICBTSUdOQVRVUkU6IFwic2lnXCIsXG4gICAgICAgIFNOQVBTSE9UOiBcInNuYXBzaG90XCIsXG4gICAgICAgIFZFUlNJT05JRDogXCJ2ZXJzaW9uaWRcIixcbiAgICAgICAgVElNRU9VVDogXCJ0aW1lb3V0XCIsXG4gICAgfSxcbn07XG5jb25zdCBIVFRQVVJMQ29ubmVjdGlvbiA9IHtcbiAgICBIVFRQX0FDQ0VQVEVEOiAyMDIsXG4gICAgSFRUUF9DT05GTElDVDogNDA5LFxuICAgIEhUVFBfTk9UX0ZPVU5EOiA0MDQsXG4gICAgSFRUUF9QUkVDT05fRkFJTEVEOiA0MTIsXG4gICAgSFRUUF9SQU5HRV9OT1RfU0FUSVNGSUFCTEU6IDQxNixcbn07XG5jb25zdCBIZWFkZXJDb25zdGFudHMgPSB7XG4gICAgQVVUSE9SSVpBVElPTjogXCJBdXRob3JpemF0aW9uXCIsXG4gICAgQVVUSE9SSVpBVElPTl9TQ0hFTUU6IFwiQmVhcmVyXCIsXG4gICAgQ09OVEVOVF9FTkNPRElORzogXCJDb250ZW50LUVuY29kaW5nXCIsXG4gICAgQ09OVEVOVF9JRDogXCJDb250ZW50LUlEXCIsXG4gICAgQ09OVEVOVF9MQU5HVUFHRTogXCJDb250ZW50LUxhbmd1YWdlXCIsXG4gICAgQ09OVEVOVF9MRU5HVEg6IFwiQ29udGVudC1MZW5ndGhcIixcbiAgICBDT05URU5UX01ENTogXCJDb250ZW50LU1kNVwiLFxuICAgIENPTlRFTlRfVFJBTlNGRVJfRU5DT0RJTkc6IFwiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZ1wiLFxuICAgIENPTlRFTlRfVFlQRTogXCJDb250ZW50LVR5cGVcIixcbiAgICBDT09LSUU6IFwiQ29va2llXCIsXG4gICAgREFURTogXCJkYXRlXCIsXG4gICAgSUZfTUFUQ0g6IFwiaWYtbWF0Y2hcIixcbiAgICBJRl9NT0RJRklFRF9TSU5DRTogXCJpZi1tb2RpZmllZC1zaW5jZVwiLFxuICAgIElGX05PTkVfTUFUQ0g6IFwiaWYtbm9uZS1tYXRjaFwiLFxuICAgIElGX1VOTU9ESUZJRURfU0lOQ0U6IFwiaWYtdW5tb2RpZmllZC1zaW5jZVwiLFxuICAgIFBSRUZJWF9GT1JfU1RPUkFHRTogXCJ4LW1zLVwiLFxuICAgIFJBTkdFOiBcIlJhbmdlXCIsXG4gICAgVVNFUl9BR0VOVDogXCJVc2VyLUFnZW50XCIsXG4gICAgWF9NU19DTElFTlRfUkVRVUVTVF9JRDogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgWF9NU19DT1BZX1NPVVJDRTogXCJ4LW1zLWNvcHktc291cmNlXCIsXG4gICAgWF9NU19EQVRFOiBcIngtbXMtZGF0ZVwiLFxuICAgIFhfTVNfRVJST1JfQ09ERTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICBYX01TX1ZFUlNJT046IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgWF9NU19Db3B5U291cmNlRXJyb3JDb2RlOiBcIngtbXMtY29weS1zb3VyY2UtZXJyb3ItY29kZVwiLFxufTtcbmNvbnN0IEVUYWdOb25lID0gXCJcIjtcbmNvbnN0IEVUYWdBbnkgPSBcIipcIjtcbmNvbnN0IFNJWkVfMV9NQiA9IDEgKiAxMDI0ICogMTAyNDtcbmNvbnN0IEJBVENIX01BWF9SRVFVRVNUID0gMjU2O1xuY29uc3QgQkFUQ0hfTUFYX1BBWUxPQURfSU5fQllURVMgPSA0ICogU0laRV8xX01CO1xuY29uc3QgSFRUUF9MSU5FX0VORElORyA9IFwiXFxyXFxuXCI7XG5jb25zdCBIVFRQX1ZFUlNJT05fMV8xID0gXCJIVFRQLzEuMVwiO1xuY29uc3QgRW5jcnlwdGlvbkFsZ29yaXRobUFFUzI1ID0gXCJBRVMyNTZcIjtcbmNvbnN0IERldmVsb3BtZW50Q29ubmVjdGlvblN0cmluZyA9IGBEZWZhdWx0RW5kcG9pbnRzUHJvdG9jb2w9aHR0cDtBY2NvdW50TmFtZT1kZXZzdG9yZWFjY291bnQxO0FjY291bnRLZXk9RWJ5OHZkTTAyeE5PY3FGbHFVd0pQTGxtRXRsQ0RYSjFPVXpGVDUwdVNSWjZJRnN1RnEyVVZFckN6NEk2dHEvSzFTWkZQVE90ci9LQkhCZWtzb0dNR3c9PTtCbG9iRW5kcG9pbnQ9aHR0cDovLzEyNy4wLjAuMToxMDAwMC9kZXZzdG9yZWFjY291bnQxO2A7XG5jb25zdCBTdG9yYWdlQmxvYkxvZ2dpbmdBbGxvd2VkSGVhZGVyTmFtZXMgPSBbXG4gICAgXCJBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW5cIixcbiAgICBcIkNhY2hlLUNvbnRyb2xcIixcbiAgICBcIkNvbnRlbnQtTGVuZ3RoXCIsXG4gICAgXCJDb250ZW50LVR5cGVcIixcbiAgICBcIkRhdGVcIixcbiAgICBcIlJlcXVlc3QtSWRcIixcbiAgICBcInRyYWNlcGFyZW50XCIsXG4gICAgXCJUcmFuc2Zlci1FbmNvZGluZ1wiLFxuICAgIFwiVXNlci1BZ2VudFwiLFxuICAgIFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgIFwieC1tcy1kYXRlXCIsXG4gICAgXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgIFwieC1tcy1yZXR1cm4tY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICBcIngtbXMtdmVyc2lvblwiLFxuICAgIFwiQWNjZXB0LVJhbmdlc1wiLFxuICAgIFwiQ29udGVudC1EaXNwb3NpdGlvblwiLFxuICAgIFwiQ29udGVudC1FbmNvZGluZ1wiLFxuICAgIFwiQ29udGVudC1MYW5ndWFnZVwiLFxuICAgIFwiQ29udGVudC1NRDVcIixcbiAgICBcIkNvbnRlbnQtUmFuZ2VcIixcbiAgICBcIkVUYWdcIixcbiAgICBcIkxhc3QtTW9kaWZpZWRcIixcbiAgICBcIlNlcnZlclwiLFxuICAgIFwiVmFyeVwiLFxuICAgIFwieC1tcy1jb250ZW50LWNyYzY0XCIsXG4gICAgXCJ4LW1zLWNvcHktYWN0aW9uXCIsXG4gICAgXCJ4LW1zLWNvcHktY29tcGxldGlvbi10aW1lXCIsXG4gICAgXCJ4LW1zLWNvcHktaWRcIixcbiAgICBcIngtbXMtY29weS1wcm9ncmVzc1wiLFxuICAgIFwieC1tcy1jb3B5LXN0YXR1c1wiLFxuICAgIFwieC1tcy1oYXMtaW1tdXRhYmlsaXR5LXBvbGljeVwiLFxuICAgIFwieC1tcy1oYXMtbGVnYWwtaG9sZFwiLFxuICAgIFwieC1tcy1sZWFzZS1zdGF0ZVwiLFxuICAgIFwieC1tcy1sZWFzZS1zdGF0dXNcIixcbiAgICBcIngtbXMtcmFuZ2VcIixcbiAgICBcIngtbXMtcmVxdWVzdC1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgXCJ4LW1zLXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICBcIngtbXMtc25hcHNob3RcIixcbiAgICBcIngtbXMtc291cmNlLXJhbmdlXCIsXG4gICAgXCJJZi1NYXRjaFwiLFxuICAgIFwiSWYtTW9kaWZpZWQtU2luY2VcIixcbiAgICBcIklmLU5vbmUtTWF0Y2hcIixcbiAgICBcIklmLVVubW9kaWZpZWQtU2luY2VcIixcbiAgICBcIngtbXMtYWNjZXNzLXRpZXJcIixcbiAgICBcIngtbXMtYWNjZXNzLXRpZXItY2hhbmdlLXRpbWVcIixcbiAgICBcIngtbXMtYWNjZXNzLXRpZXItaW5mZXJyZWRcIixcbiAgICBcIngtbXMtYWNjb3VudC1raW5kXCIsXG4gICAgXCJ4LW1zLWFyY2hpdmUtc3RhdHVzXCIsXG4gICAgXCJ4LW1zLWJsb2ItYXBwZW5kLW9mZnNldFwiLFxuICAgIFwieC1tcy1ibG9iLWNhY2hlLWNvbnRyb2xcIixcbiAgICBcIngtbXMtYmxvYi1jb21taXR0ZWQtYmxvY2stY291bnRcIixcbiAgICBcIngtbXMtYmxvYi1jb25kaXRpb24tYXBwZW5kcG9zXCIsXG4gICAgXCJ4LW1zLWJsb2ItY29uZGl0aW9uLW1heHNpemVcIixcbiAgICBcIngtbXMtYmxvYi1jb250ZW50LWRpc3Bvc2l0aW9uXCIsXG4gICAgXCJ4LW1zLWJsb2ItY29udGVudC1lbmNvZGluZ1wiLFxuICAgIFwieC1tcy1ibG9iLWNvbnRlbnQtbGFuZ3VhZ2VcIixcbiAgICBcIngtbXMtYmxvYi1jb250ZW50LWxlbmd0aFwiLFxuICAgIFwieC1tcy1ibG9iLWNvbnRlbnQtbWQ1XCIsXG4gICAgXCJ4LW1zLWJsb2ItY29udGVudC10eXBlXCIsXG4gICAgXCJ4LW1zLWJsb2ItcHVibGljLWFjY2Vzc1wiLFxuICAgIFwieC1tcy1ibG9iLXNlcXVlbmNlLW51bWJlclwiLFxuICAgIFwieC1tcy1ibG9iLXR5cGVcIixcbiAgICBcIngtbXMtY29weS1kZXN0aW5hdGlvbi1zbmFwc2hvdFwiLFxuICAgIFwieC1tcy1jcmVhdGlvbi10aW1lXCIsXG4gICAgXCJ4LW1zLWRlZmF1bHQtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgIFwieC1tcy1kZWxldGUtc25hcHNob3RzXCIsXG4gICAgXCJ4LW1zLWRlbGV0ZS10eXBlLXBlcm1hbmVudFwiLFxuICAgIFwieC1tcy1kZW55LWVuY3J5cHRpb24tc2NvcGUtb3ZlcnJpZGVcIixcbiAgICBcIngtbXMtZW5jcnlwdGlvbi1hbGdvcml0aG1cIixcbiAgICBcIngtbXMtaWYtc2VxdWVuY2UtbnVtYmVyLWVxXCIsXG4gICAgXCJ4LW1zLWlmLXNlcXVlbmNlLW51bWJlci1sZVwiLFxuICAgIFwieC1tcy1pZi1zZXF1ZW5jZS1udW1iZXItbHRcIixcbiAgICBcIngtbXMtaW5jcmVtZW50YWwtY29weVwiLFxuICAgIFwieC1tcy1sZWFzZS1hY3Rpb25cIixcbiAgICBcIngtbXMtbGVhc2UtYnJlYWstcGVyaW9kXCIsXG4gICAgXCJ4LW1zLWxlYXNlLWR1cmF0aW9uXCIsXG4gICAgXCJ4LW1zLWxlYXNlLWlkXCIsXG4gICAgXCJ4LW1zLWxlYXNlLXRpbWVcIixcbiAgICBcIngtbXMtcGFnZS13cml0ZVwiLFxuICAgIFwieC1tcy1wcm9wb3NlZC1sZWFzZS1pZFwiLFxuICAgIFwieC1tcy1yYW5nZS1nZXQtY29udGVudC1tZDVcIixcbiAgICBcIngtbXMtcmVoeWRyYXRlLXByaW9yaXR5XCIsXG4gICAgXCJ4LW1zLXNlcXVlbmNlLW51bWJlci1hY3Rpb25cIixcbiAgICBcIngtbXMtc2t1LW5hbWVcIixcbiAgICBcIngtbXMtc291cmNlLWNvbnRlbnQtbWQ1XCIsXG4gICAgXCJ4LW1zLXNvdXJjZS1pZi1tYXRjaFwiLFxuICAgIFwieC1tcy1zb3VyY2UtaWYtbW9kaWZpZWQtc2luY2VcIixcbiAgICBcIngtbXMtc291cmNlLWlmLW5vbmUtbWF0Y2hcIixcbiAgICBcIngtbXMtc291cmNlLWlmLXVubW9kaWZpZWQtc2luY2VcIixcbiAgICBcIngtbXMtdGFnLWNvdW50XCIsXG4gICAgXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgIFwieC1tcy1jb3B5LXNvdXJjZS1lcnJvci1jb2RlXCIsXG4gICAgXCJ4LW1zLWNvcHktc291cmNlLXN0YXR1cy1jb2RlXCIsXG4gICAgXCJ4LW1zLWlmLXRhZ3NcIixcbiAgICBcIngtbXMtc291cmNlLWlmLXRhZ3NcIixcbl07XG5jb25zdCBTdG9yYWdlQmxvYkxvZ2dpbmdBbGxvd2VkUXVlcnlQYXJhbWV0ZXJzID0gW1xuICAgIFwiY29tcFwiLFxuICAgIFwibWF4cmVzdWx0c1wiLFxuICAgIFwicnNjY1wiLFxuICAgIFwicnNjZFwiLFxuICAgIFwicnNjZVwiLFxuICAgIFwicnNjbFwiLFxuICAgIFwicnNjdFwiLFxuICAgIFwic2VcIixcbiAgICBcInNpXCIsXG4gICAgXCJzaXBcIixcbiAgICBcInNwXCIsXG4gICAgXCJzcHJcIixcbiAgICBcInNyXCIsXG4gICAgXCJzcnRcIixcbiAgICBcInNzXCIsXG4gICAgXCJzdFwiLFxuICAgIFwic3ZcIixcbiAgICBcImluY2x1ZGVcIixcbiAgICBcIm1hcmtlclwiLFxuICAgIFwicHJlZml4XCIsXG4gICAgXCJjb3B5aWRcIixcbiAgICBcInJlc3R5cGVcIixcbiAgICBcImJsb2NraWRcIixcbiAgICBcImJsb2NrbGlzdHR5cGVcIixcbiAgICBcImRlbGltaXRlclwiLFxuICAgIFwicHJldnNuYXBzaG90XCIsXG4gICAgXCJza2VcIixcbiAgICBcInNrb2lkXCIsXG4gICAgXCJza3NcIixcbiAgICBcInNrdFwiLFxuICAgIFwic2t0aWRcIixcbiAgICBcInNrdlwiLFxuICAgIFwic25hcHNob3RcIixcbl07XG5jb25zdCBCbG9iVXNlc0N1c3RvbWVyU3BlY2lmaWVkRW5jcnlwdGlvbk1zZyA9IFwiQmxvYlVzZXNDdXN0b21lclNwZWNpZmllZEVuY3J5cHRpb25cIjtcbmNvbnN0IEJsb2JEb2VzTm90VXNlQ3VzdG9tZXJTcGVjaWZpZWRFbmNyeXB0aW9uID0gXCJCbG9iRG9lc05vdFVzZUN1c3RvbWVyU3BlY2lmaWVkRW5jcnlwdGlvblwiO1xuLy8vIExpc3Qgb2YgcG9ydHMgdXNlZCBmb3IgcGF0aCBzdHlsZSBhZGRyZXNzaW5nLlxuLy8vIFBhdGggc3R5bGUgYWRkcmVzc2luZyBtZWFucyB0aGF0IHN0b3JhZ2UgYWNjb3VudCBpcyBwdXQgaW4gVVJJJ3MgUGF0aCBzZWdtZW50IGluIGluc3RlYWQgb2YgaW4gaG9zdC5cbmNvbnN0IFBhdGhTdHlsZVBvcnRzID0gW1xuICAgIFwiMTAwMDBcIixcbiAgICBcIjEwMDAxXCIsXG4gICAgXCIxMDAwMlwiLFxuICAgIFwiMTAwMDNcIixcbiAgICBcIjEwMDA0XCIsXG4gICAgXCIxMDEwMFwiLFxuICAgIFwiMTAxMDFcIixcbiAgICBcIjEwMTAyXCIsXG4gICAgXCIxMDEwM1wiLFxuICAgIFwiMTAxMDRcIixcbiAgICBcIjExMDAwXCIsXG4gICAgXCIxMTAwMVwiLFxuICAgIFwiMTEwMDJcIixcbiAgICBcIjExMDAzXCIsXG4gICAgXCIxMTAwNFwiLFxuICAgIFwiMTExMDBcIixcbiAgICBcIjExMTAxXCIsXG4gICAgXCIxMTEwMlwiLFxuICAgIFwiMTExMDNcIixcbiAgICBcIjExMTA0XCIsXG5dO1xuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogUmVzZXJ2ZWQgVVJMIGNoYXJhY3RlcnMgbXVzdCBiZSBwcm9wZXJseSBlc2NhcGVkIGZvciBTdG9yYWdlIHNlcnZpY2VzIGxpa2UgQmxvYiBvciBGaWxlLlxuICpcbiAqICMjIFVSTCBlbmNvZGUgYW5kIGVzY2FwZSBzdHJhdGVneSBmb3IgSlMgU0RLc1xuICpcbiAqIFdoZW4gY3VzdG9tZXJzIHBhc3MgYSBVUkwgc3RyaW5nIGludG8gWHh4Q2xpZW50IGNsYXNzZXMgY29uc3RydWN0b3IsIHRoZSBVUkwgc3RyaW5nIG1heSBhbHJlYWR5IGJlIFVSTCBlbmNvZGVkIG9yIG5vdC5cbiAqIEJ1dCBiZWZvcmUgc2VuZGluZyB0byBBenVyZSBTdG9yYWdlIHNlcnZlciwgdGhlIFVSTCBtdXN0IGJlIGVuY29kZWQuIEhvd2V2ZXIsIGl0J3MgaGFyZCBmb3IgYSBTREsgdG8gZ3Vlc3Mgd2hldGhlciB0aGUgVVJMXG4gKiBzdHJpbmcgaGFzIGJlZW4gZW5jb2RlZCBvciBub3QuIFdlIGhhdmUgMiBwb3RlbnRpYWwgc3RyYXRlZ2llcywgYW5kIGNob3NlIHN0cmF0ZWd5IHR3byBmb3IgdGhlIFh4eENsaWVudCBjb25zdHJ1Y3RvcnMuXG4gKlxuICogIyMjIFN0cmF0ZWd5IE9uZTogQXNzdW1lIHRoZSBjdXN0b21lciBVUkwgc3RyaW5nIGlzIG5vdCBlbmNvZGVkLCBhbmQgYWx3YXlzIGVuY29kZSBVUkwgc3RyaW5nIGluIFNESy5cbiAqXG4gKiBUaGlzIGlzIHdoYXQgbGVnYWN5IFYyIFNESyBkb2VzLCBzaW1wbGUgYW5kIHdvcmtzIGZvciBtb3N0IG9mIHRoZSBjYXNlcy5cbiAqIC0gV2hlbiBjdXN0b21lciBVUkwgc3RyaW5nIGlzIFwiaHR0cDovL2FjY291bnQuYmxvYi5jb3JlLndpbmRvd3MubmV0L2Nvbi9iOlwiLFxuICogICBTREsgd2lsbCBlbmNvZGUgaXQgdG8gXCJodHRwOi8vYWNjb3VudC5ibG9iLmNvcmUud2luZG93cy5uZXQvY29uL2IlM0FcIiBhbmQgc2VuZCB0byBzZXJ2ZXIuIEEgYmxvYiBuYW1lZCBcImI6XCIgd2lsbCBiZSBjcmVhdGVkLlxuICogLSBXaGVuIGN1c3RvbWVyIFVSTCBzdHJpbmcgaXMgXCJodHRwOi8vYWNjb3VudC5ibG9iLmNvcmUud2luZG93cy5uZXQvY29uL2IlM0FcIixcbiAqICAgU0RLIHdpbGwgZW5jb2RlIGl0IHRvIFwiaHR0cDovL2FjY291bnQuYmxvYi5jb3JlLndpbmRvd3MubmV0L2Nvbi9iJTI1M0FcIiBhbmQgc2VuZCB0byBzZXJ2ZXIuIEEgYmxvYiBuYW1lZCBcImIlM0FcIiB3aWxsIGJlIGNyZWF0ZWQuXG4gKlxuICogQnV0IHRoaXMgc3RyYXRlZ3kgd2lsbCBtYWtlIGl0IG5vdCBwb3NzaWJsZSB0byBjcmVhdGUgYSBibG9iIHdpdGggXCI/XCIgaW4gaXQncyBuYW1lLiBCZWNhdXNlIHdoZW4gY3VzdG9tZXIgVVJMIHN0cmluZyBpc1xuICogXCJodHRwOi8vYWNjb3VudC5ibG9iLmNvcmUud2luZG93cy5uZXQvY29uL2Jsb2I/bmFtZVwiLCB0aGUgXCI/bmFtZVwiIHdpbGwgYmUgdHJlYXRlZCBhcyBVUkwgcGFyYW10ZXIgaW5zdGVhZCBvZiBibG9iIG5hbWUuXG4gKiBJZiBjdXN0b21lciBVUkwgc3RyaW5nIGlzIFwiaHR0cDovL2FjY291bnQuYmxvYi5jb3JlLndpbmRvd3MubmV0L2Nvbi9ibG9iJTNGbmFtZVwiLCBhIGJsb2IgbmFtZWQgXCJibG9iJTNGbmFtZVwiIHdpbGwgYmUgY3JlYXRlZC5cbiAqIFYyIFNESyBkb2Vzbid0IGhhdmUgdGhpcyBpc3N1ZSBiZWNhdXNlIGl0IGRvZXNuJ3QgYWxsb3cgY3VzdG9tZXIgcGFzcyBpbiBhIGZ1bGwgVVJMLCBpdCBhY2NlcHRzIGEgc2VwYXJhdGUgYmxvYiBuYW1lIGFuZCBlbmNvZGVVUklDb21wb25lbnQgZm9yIGl0LlxuICogV2UgY2Fubm90IGFjY2VwdCBhIFNESyBjYW5ub3QgY3JlYXRlIGEgYmxvYiBuYW1lIHdpdGggXCI/XCIuIFNvIHdlIGltcGxlbWVudCBzdHJhdGVneSB0d286XG4gKlxuICogIyMjIFN0cmF0ZWd5IFR3bzogU0RLIGRvZXNuJ3QgYXNzdW1lIHRoZSBVUkwgaGFzIGJlZW4gZW5jb2RlZCBvciBub3QuIEl0IHdpbGwganVzdCBlc2NhcGUgdGhlIHNwZWNpYWwgY2hhcmFjdGVycy5cbiAqXG4gKiBUaGlzIGlzIHdoYXQgVjEwIEJsb2IgR28gU0RLIGRvZXMuIEl0IGFjY2VwdHMgYSBVUkwgdHlwZSBpbiBHbywgYW5kIGNhbGwgdXJsLkVzY2FwZWRQYXRoKCkgdG8gZXNjYXBlIHRoZSBzcGVjaWFsIGNoYXJzIHVuZXNjYXBlZC5cbiAqIC0gV2hlbiBjdXN0b21lciBVUkwgc3RyaW5nIGlzIFwiaHR0cDovL2FjY291bnQuYmxvYi5jb3JlLndpbmRvd3MubmV0L2Nvbi9iOlwiLFxuICogICBTREsgd2lsbCBlc2NhcGUgXCI6XCIgbGlrZSBcImh0dHA6Ly9hY2NvdW50LmJsb2IuY29yZS53aW5kb3dzLm5ldC9jb24vYiUzQVwiIGFuZCBzZW5kIHRvIHNlcnZlci4gQSBibG9iIG5hbWVkIFwiYjpcIiB3aWxsIGJlIGNyZWF0ZWQuXG4gKiAtIFdoZW4gY3VzdG9tZXIgVVJMIHN0cmluZyBpcyBcImh0dHA6Ly9hY2NvdW50LmJsb2IuY29yZS53aW5kb3dzLm5ldC9jb24vYiUzQVwiLFxuICogICBUaGVyZSBpcyBubyBzcGVjaWFsIGNoYXJhY3RlcnMsIHNvIHNlbmQgXCJodHRwOi8vYWNjb3VudC5ibG9iLmNvcmUud2luZG93cy5uZXQvY29uL2IlM0FcIiB0byBzZXJ2ZXIuIEEgYmxvYiBuYW1lZCBcImI6XCIgd2lsbCBiZSBjcmVhdGVkLlxuICogLSBXaGVuIGN1c3RvbWVyIFVSTCBzdHJpbmcgaXMgXCJodHRwOi8vYWNjb3VudC5ibG9iLmNvcmUud2luZG93cy5uZXQvY29uL2IlMjUzQVwiLFxuICogICBUaGVyZSBpcyBubyBzcGVjaWFsIGNoYXJhY3RlcnMsIHNvIHNlbmQgXCJodHRwOi8vYWNjb3VudC5ibG9iLmNvcmUud2luZG93cy5uZXQvY29uL2IlMjUzQVwiIHRvIHNlcnZlci4gQSBibG9iIG5hbWVkIFwiYiUzQVwiIHdpbGwgYmUgY3JlYXRlZC5cbiAqXG4gKiBUaGlzIHN0cmF0ZWd5IGdpdmVzIHVzIGZsZXhpYmlsaXR5IHRvIGNyZWF0ZSB3aXRoIGFueSBzcGVjaWFsIGNoYXJhY3RlcnMuIEJ1dCBcIiVcIiB3aWxsIGJlIHRyZWF0ZWQgYXMgYSBzcGVjaWFsIGNoYXJhY3RlcnMsIGlmIHRoZSBVUkwgc3RyaW5nXG4gKiBpcyBub3QgZW5jb2RlZCwgdGhlcmUgc2hvdWxkbid0IGEgXCIlXCIgaW4gdGhlIFVSTCBzdHJpbmcsIG90aGVyd2lzZSB0aGUgVVJMIGlzIG5vdCBhIHZhbGlkIFVSTC5cbiAqIElmIGN1c3RvbWVyIG5lZWRzIHRvIGNyZWF0ZSBhIGJsb2Igd2l0aCBcIiVcIiBpbiBpdCdzIGJsb2IgbmFtZSwgdXNlIFwiJTI1XCIgaW5zdGVhZCBvZiBcIiVcIi4gSnVzdCBsaWtlIGFib3ZlIDNyZCBzYW1wbGUuXG4gKiBBbmQgZm9sbG93aW5nIFVSTCBzdHJpbmdzIGFyZSBpbnZhbGlkOlxuICogLSBcImh0dHA6Ly9hY2NvdW50LmJsb2IuY29yZS53aW5kb3dzLm5ldC9jb24vYiVcIlxuICogLSBcImh0dHA6Ly9hY2NvdW50LmJsb2IuY29yZS53aW5kb3dzLm5ldC9jb24vYiUyXCJcbiAqIC0gXCJodHRwOi8vYWNjb3VudC5ibG9iLmNvcmUud2luZG93cy5uZXQvY29uL2IlR1wiXG4gKlxuICogQW5vdGhlciBzcGVjaWFsIGNoYXJhY3RlciBpcyBcIj9cIiwgdXNlIFwiJTJGXCIgdG8gcmVwcmVzZW50IGEgYmxvYiBuYW1lIHdpdGggXCI/XCIgaW4gYSBVUkwgc3RyaW5nLlxuICpcbiAqICMjIyBTdHJhdGVneSBmb3IgY29udGFpbmVyTmFtZSwgYmxvYk5hbWUgb3Igb3RoZXIgc3BlY2lmaWMgWFhYTmFtZSBwYXJhbWV0ZXJzIGluIG1ldGhvZHMgc3VjaCBhcyBgY29udGFpbmVyQ2xpZW50LmdldEJsb2JDbGllbnQoYmxvYk5hbWUpYFxuICpcbiAqIFdlIHdpbGwgYXBwbHkgc3RyYXRlZ3kgb25lLCBhbmQgY2FsbCBlbmNvZGVVUklDb21wb25lbnQgZm9yIHRoZXNlIHBhcmFtZXRlcnMgbGlrZSBibG9iTmFtZS4gQmVjYXVzZSB3aGF0IGN1c3RvbWVycyBwYXNzZXMgaW4gaXMgYSBwbGFpbiBuYW1lIGluc3RlYWQgb2YgYSBVUkwuXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvbmFtaW5nLWFuZC1yZWZlcmVuY2luZy1jb250YWluZXJzLS1ibG9icy0tYW5kLW1ldGFkYXRhXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9uYW1pbmctYW5kLXJlZmVyZW5jaW5nLXNoYXJlcy0tZGlyZWN0b3JpZXMtLWZpbGVzLS1hbmQtbWV0YWRhdGFcbiAqXG4gKiBAcGFyYW0gdXJsIC1cbiAqL1xuZnVuY3Rpb24gZXNjYXBlVVJMUGF0aCh1cmwpIHtcbiAgICBjb25zdCB1cmxQYXJzZWQgPSBuZXcgVVJMKHVybCk7XG4gICAgbGV0IHBhdGggPSB1cmxQYXJzZWQucGF0aG5hbWU7XG4gICAgcGF0aCA9IHBhdGggfHwgXCIvXCI7XG4gICAgcGF0aCA9IGVzY2FwZShwYXRoKTtcbiAgICB1cmxQYXJzZWQucGF0aG5hbWUgPSBwYXRoO1xuICAgIHJldHVybiB1cmxQYXJzZWQudG9TdHJpbmcoKTtcbn1cbmZ1bmN0aW9uIGdldFByb3h5VXJpRnJvbURldkNvbm5TdHJpbmcoY29ubmVjdGlvblN0cmluZykge1xuICAgIC8vIERldmVsb3BtZW50IENvbm5lY3Rpb24gU3RyaW5nXG4gICAgLy8gaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvYXp1cmUvc3RvcmFnZS9jb21tb24vc3RvcmFnZS1jb25maWd1cmUtY29ubmVjdGlvbi1zdHJpbmcjY29ubmVjdC10by10aGUtZW11bGF0b3ItYWNjb3VudC11c2luZy10aGUtd2VsbC1rbm93bi1hY2NvdW50LW5hbWUtYW5kLWtleVxuICAgIGxldCBwcm94eVVyaSA9IFwiXCI7XG4gICAgaWYgKGNvbm5lY3Rpb25TdHJpbmcuc2VhcmNoKFwiRGV2ZWxvcG1lbnRTdG9yYWdlUHJveHlVcmk9XCIpICE9PSAtMSkge1xuICAgICAgICAvLyBDT05ORUNUSU9OX1NUUklORz1Vc2VEZXZlbG9wbWVudFN0b3JhZ2U9dHJ1ZTtEZXZlbG9wbWVudFN0b3JhZ2VQcm94eVVyaT1odHRwOi8vbXlQcm94eVVyaVxuICAgICAgICBjb25zdCBtYXRjaENyZWRlbnRpYWxzID0gY29ubmVjdGlvblN0cmluZy5zcGxpdChcIjtcIik7XG4gICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBtYXRjaENyZWRlbnRpYWxzKSB7XG4gICAgICAgICAgICBpZiAoZWxlbWVudC50cmltKCkuc3RhcnRzV2l0aChcIkRldmVsb3BtZW50U3RvcmFnZVByb3h5VXJpPVwiKSkge1xuICAgICAgICAgICAgICAgIHByb3h5VXJpID0gZWxlbWVudC50cmltKCkubWF0Y2goXCJEZXZlbG9wbWVudFN0b3JhZ2VQcm94eVVyaT0oLiopXCIpWzFdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwcm94eVVyaTtcbn1cbmZ1bmN0aW9uIGdldFZhbHVlSW5Db25uU3RyaW5nKGNvbm5lY3Rpb25TdHJpbmcsIGFyZ3VtZW50KSB7XG4gICAgY29uc3QgZWxlbWVudHMgPSBjb25uZWN0aW9uU3RyaW5nLnNwbGl0KFwiO1wiKTtcbiAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgZWxlbWVudHMpIHtcbiAgICAgICAgaWYgKGVsZW1lbnQudHJpbSgpLnN0YXJ0c1dpdGgoYXJndW1lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudC50cmltKCkubWF0Y2goYXJndW1lbnQgKyBcIj0oLiopXCIpWzFdO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBcIlwiO1xufVxuLyoqXG4gKiBFeHRyYWN0cyB0aGUgcGFydHMgb2YgYW4gQXp1cmUgU3RvcmFnZSBhY2NvdW50IGNvbm5lY3Rpb24gc3RyaW5nLlxuICpcbiAqIEBwYXJhbSBjb25uZWN0aW9uU3RyaW5nIC0gQ29ubmVjdGlvbiBzdHJpbmcuXG4gKiBAcmV0dXJucyBTdHJpbmcga2V5IHZhbHVlIHBhaXJzIG9mIHRoZSBzdG9yYWdlIGFjY291bnQncyB1cmwgYW5kIGNyZWRlbnRpYWxzLlxuICovXG5mdW5jdGlvbiBleHRyYWN0Q29ubmVjdGlvblN0cmluZ1BhcnRzKGNvbm5lY3Rpb25TdHJpbmcpIHtcbiAgICBsZXQgcHJveHlVcmkgPSBcIlwiO1xuICAgIGlmIChjb25uZWN0aW9uU3RyaW5nLnN0YXJ0c1dpdGgoXCJVc2VEZXZlbG9wbWVudFN0b3JhZ2U9dHJ1ZVwiKSkge1xuICAgICAgICAvLyBEZXZlbG9wbWVudCBjb25uZWN0aW9uIHN0cmluZ1xuICAgICAgICBwcm94eVVyaSA9IGdldFByb3h5VXJpRnJvbURldkNvbm5TdHJpbmcoY29ubmVjdGlvblN0cmluZyk7XG4gICAgICAgIGNvbm5lY3Rpb25TdHJpbmcgPSBEZXZlbG9wbWVudENvbm5lY3Rpb25TdHJpbmc7XG4gICAgfVxuICAgIC8vIE1hdGNoaW5nIEJsb2JFbmRwb2ludCBpbiB0aGUgQWNjb3VudCBjb25uZWN0aW9uIHN0cmluZ1xuICAgIGxldCBibG9iRW5kcG9pbnQgPSBnZXRWYWx1ZUluQ29ublN0cmluZyhjb25uZWN0aW9uU3RyaW5nLCBcIkJsb2JFbmRwb2ludFwiKTtcbiAgICAvLyBTbGljaW5nIG9mZiAnLycgYXQgdGhlIGVuZCBpZiBleGlzdHNcbiAgICAvLyAoVGhlIG1ldGhvZHMgdGhhdCB1c2UgYGV4dHJhY3RDb25uZWN0aW9uU3RyaW5nUGFydHNgIGV4cGVjdCB0aGUgdXJsIHRvIG5vdCBoYXZlIGAvYCBhdCB0aGUgZW5kKVxuICAgIGJsb2JFbmRwb2ludCA9IGJsb2JFbmRwb2ludC5lbmRzV2l0aChcIi9cIikgPyBibG9iRW5kcG9pbnQuc2xpY2UoMCwgLTEpIDogYmxvYkVuZHBvaW50O1xuICAgIGlmIChjb25uZWN0aW9uU3RyaW5nLnNlYXJjaChcIkRlZmF1bHRFbmRwb2ludHNQcm90b2NvbD1cIikgIT09IC0xICYmXG4gICAgICAgIGNvbm5lY3Rpb25TdHJpbmcuc2VhcmNoKFwiQWNjb3VudEtleT1cIikgIT09IC0xKSB7XG4gICAgICAgIC8vIEFjY291bnQgY29ubmVjdGlvbiBzdHJpbmdcbiAgICAgICAgbGV0IGRlZmF1bHRFbmRwb2ludHNQcm90b2NvbCA9IFwiXCI7XG4gICAgICAgIGxldCBhY2NvdW50TmFtZSA9IFwiXCI7XG4gICAgICAgIGxldCBhY2NvdW50S2V5ID0gQnVmZmVyLmZyb20oXCJhY2NvdW50S2V5XCIsIFwiYmFzZTY0XCIpO1xuICAgICAgICBsZXQgZW5kcG9pbnRTdWZmaXggPSBcIlwiO1xuICAgICAgICAvLyBHZXQgYWNjb3VudCBuYW1lIGFuZCBrZXlcbiAgICAgICAgYWNjb3VudE5hbWUgPSBnZXRWYWx1ZUluQ29ublN0cmluZyhjb25uZWN0aW9uU3RyaW5nLCBcIkFjY291bnROYW1lXCIpO1xuICAgICAgICBhY2NvdW50S2V5ID0gQnVmZmVyLmZyb20oZ2V0VmFsdWVJbkNvbm5TdHJpbmcoY29ubmVjdGlvblN0cmluZywgXCJBY2NvdW50S2V5XCIpLCBcImJhc2U2NFwiKTtcbiAgICAgICAgaWYgKCFibG9iRW5kcG9pbnQpIHtcbiAgICAgICAgICAgIC8vIEJsb2JFbmRwb2ludCBpcyBub3QgcHJlc2VudCBpbiB0aGUgQWNjb3VudCBjb25uZWN0aW9uIHN0cmluZ1xuICAgICAgICAgICAgLy8gQ2FuIGJlIG9idGFpbmVkIGZyb20gYCR7ZGVmYXVsdEVuZHBvaW50c1Byb3RvY29sfTovLyR7YWNjb3VudE5hbWV9LmJsb2IuJHtlbmRwb2ludFN1ZmZpeH1gXG4gICAgICAgICAgICBkZWZhdWx0RW5kcG9pbnRzUHJvdG9jb2wgPSBnZXRWYWx1ZUluQ29ublN0cmluZyhjb25uZWN0aW9uU3RyaW5nLCBcIkRlZmF1bHRFbmRwb2ludHNQcm90b2NvbFwiKTtcbiAgICAgICAgICAgIGNvbnN0IHByb3RvY29sID0gZGVmYXVsdEVuZHBvaW50c1Byb3RvY29sLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICBpZiAocHJvdG9jb2wgIT09IFwiaHR0cHNcIiAmJiBwcm90b2NvbCAhPT0gXCJodHRwXCIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIERlZmF1bHRFbmRwb2ludHNQcm90b2NvbCBpbiB0aGUgcHJvdmlkZWQgQ29ubmVjdGlvbiBTdHJpbmcuIEV4cGVjdGluZyAnaHR0cHMnIG9yICdodHRwJ1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVuZHBvaW50U3VmZml4ID0gZ2V0VmFsdWVJbkNvbm5TdHJpbmcoY29ubmVjdGlvblN0cmluZywgXCJFbmRwb2ludFN1ZmZpeFwiKTtcbiAgICAgICAgICAgIGlmICghZW5kcG9pbnRTdWZmaXgpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIEVuZHBvaW50U3VmZml4IGluIHRoZSBwcm92aWRlZCBDb25uZWN0aW9uIFN0cmluZ1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJsb2JFbmRwb2ludCA9IGAke2RlZmF1bHRFbmRwb2ludHNQcm90b2NvbH06Ly8ke2FjY291bnROYW1lfS5ibG9iLiR7ZW5kcG9pbnRTdWZmaXh9YDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWFjY291bnROYW1lKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIEFjY291bnROYW1lIGluIHRoZSBwcm92aWRlZCBDb25uZWN0aW9uIFN0cmluZ1wiKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChhY2NvdW50S2V5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBBY2NvdW50S2V5IGluIHRoZSBwcm92aWRlZCBDb25uZWN0aW9uIFN0cmluZ1wiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2luZDogXCJBY2NvdW50Q29ublN0cmluZ1wiLFxuICAgICAgICAgICAgdXJsOiBibG9iRW5kcG9pbnQsXG4gICAgICAgICAgICBhY2NvdW50TmFtZSxcbiAgICAgICAgICAgIGFjY291bnRLZXksXG4gICAgICAgICAgICBwcm94eVVyaSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIC8vIFNBUyBjb25uZWN0aW9uIHN0cmluZ1xuICAgICAgICBsZXQgYWNjb3VudFNhcyA9IGdldFZhbHVlSW5Db25uU3RyaW5nKGNvbm5lY3Rpb25TdHJpbmcsIFwiU2hhcmVkQWNjZXNzU2lnbmF0dXJlXCIpO1xuICAgICAgICBsZXQgYWNjb3VudE5hbWUgPSBnZXRWYWx1ZUluQ29ublN0cmluZyhjb25uZWN0aW9uU3RyaW5nLCBcIkFjY291bnROYW1lXCIpO1xuICAgICAgICAvLyBpZiBhY2NvdW50TmFtZSBpcyBlbXB0eSwgdHJ5IHRvIHJlYWQgaXQgZnJvbSBCbG9iRW5kcG9pbnRcbiAgICAgICAgaWYgKCFhY2NvdW50TmFtZSkge1xuICAgICAgICAgICAgYWNjb3VudE5hbWUgPSBnZXRBY2NvdW50TmFtZUZyb21VcmwoYmxvYkVuZHBvaW50KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWJsb2JFbmRwb2ludCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBCbG9iRW5kcG9pbnQgaW4gdGhlIHByb3ZpZGVkIFNBUyBDb25uZWN0aW9uIFN0cmluZ1wiKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghYWNjb3VudFNhcykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBTaGFyZWRBY2Nlc3NTaWduYXR1cmUgaW4gdGhlIHByb3ZpZGVkIFNBUyBDb25uZWN0aW9uIFN0cmluZ1wiKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjbGllbnQgY29uc3RydWN0b3JzIGFzc3VtZSBhY2NvdW50U2FzIGRvZXMgKm5vdCogc3RhcnQgd2l0aCA/XG4gICAgICAgIGlmIChhY2NvdW50U2FzLnN0YXJ0c1dpdGgoXCI/XCIpKSB7XG4gICAgICAgICAgICBhY2NvdW50U2FzID0gYWNjb3VudFNhcy5zdWJzdHJpbmcoMSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsga2luZDogXCJTQVNDb25uU3RyaW5nXCIsIHVybDogYmxvYkVuZHBvaW50LCBhY2NvdW50TmFtZSwgYWNjb3VudFNhcyB9O1xuICAgIH1cbn1cbi8qKlxuICogSW50ZXJuYWwgZXNjYXBlIG1ldGhvZCBpbXBsZW1lbnRlZCBTdHJhdGVneSBUd28gbWVudGlvbmVkIGluIGVzY2FwZVVSTCgpIGRlc2NyaXB0aW9uLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC1cbiAqL1xuZnVuY3Rpb24gZXNjYXBlKHRleHQpIHtcbiAgICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHRleHQpXG4gICAgICAgIC5yZXBsYWNlKC8lMkYvZywgXCIvXCIpIC8vIERvbid0IGVzY2FwZSBmb3IgXCIvXCJcbiAgICAgICAgLnJlcGxhY2UoLycvZywgXCIlMjdcIikgLy8gRXNjYXBlIGZvciBcIidcIlxuICAgICAgICAucmVwbGFjZSgvXFwrL2csIFwiJTIwXCIpXG4gICAgICAgIC5yZXBsYWNlKC8lMjUvZywgXCIlXCIpOyAvLyBSZXZlcnQgZW5jb2RlZCBcIiVcIlxufVxuLyoqXG4gKiBBcHBlbmQgYSBzdHJpbmcgdG8gVVJMIHBhdGguIFdpbGwgcmVtb3ZlIGR1cGxpY2F0ZWQgXCIvXCIgaW4gZnJvbnQgb2YgdGhlIHN0cmluZ1xuICogd2hlbiBVUkwgcGF0aCBlbmRzIHdpdGggYSBcIi9cIi5cbiAqXG4gKiBAcGFyYW0gdXJsIC0gU291cmNlIFVSTCBzdHJpbmdcbiAqIEBwYXJhbSBuYW1lIC0gU3RyaW5nIHRvIGJlIGFwcGVuZGVkIHRvIFVSTFxuICogQHJldHVybnMgQW4gdXBkYXRlZCBVUkwgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGFwcGVuZFRvVVJMUGF0aCh1cmwsIG5hbWUpIHtcbiAgICBjb25zdCB1cmxQYXJzZWQgPSBuZXcgVVJMKHVybCk7XG4gICAgbGV0IHBhdGggPSB1cmxQYXJzZWQucGF0aG5hbWU7XG4gICAgcGF0aCA9IHBhdGggPyAocGF0aC5lbmRzV2l0aChcIi9cIikgPyBgJHtwYXRofSR7bmFtZX1gIDogYCR7cGF0aH0vJHtuYW1lfWApIDogbmFtZTtcbiAgICB1cmxQYXJzZWQucGF0aG5hbWUgPSBwYXRoO1xuICAgIHJldHVybiB1cmxQYXJzZWQudG9TdHJpbmcoKTtcbn1cbi8qKlxuICogU2V0IFVSTCBwYXJhbWV0ZXIgbmFtZSBhbmQgdmFsdWUuIElmIG5hbWUgZXhpc3RzIGluIFVSTCBwYXJhbWV0ZXJzLCBvbGQgdmFsdWVcbiAqIHdpbGwgYmUgcmVwbGFjZWQgYnkgbmFtZSBrZXkuIElmIG5vdCBwcm92aWRlIHZhbHVlLCB0aGUgcGFyYW1ldGVyIHdpbGwgYmUgZGVsZXRlZC5cbiAqXG4gKiBAcGFyYW0gdXJsIC0gU291cmNlIFVSTCBzdHJpbmdcbiAqIEBwYXJhbSBuYW1lIC0gUGFyYW1ldGVyIG5hbWVcbiAqIEBwYXJhbSB2YWx1ZSAtIFBhcmFtZXRlciB2YWx1ZVxuICogQHJldHVybnMgQW4gdXBkYXRlZCBVUkwgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIHNldFVSTFBhcmFtZXRlcih1cmwsIG5hbWUsIHZhbHVlKSB7XG4gICAgY29uc3QgdXJsUGFyc2VkID0gbmV3IFVSTCh1cmwpO1xuICAgIGNvbnN0IGVuY29kZWROYW1lID0gZW5jb2RlVVJJQ29tcG9uZW50KG5hbWUpO1xuICAgIGNvbnN0IGVuY29kZWRWYWx1ZSA9IHZhbHVlID8gZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKSA6IHVuZGVmaW5lZDtcbiAgICAvLyBtdXRhdGluZyBzZWFyY2hQYXJhbXMgd2lsbCBjaGFuZ2UgdGhlIGVuY29kaW5nLCBzbyB3ZSBoYXZlIHRvIGRvIHRoaXMgb3Vyc2VsdmVzXG4gICAgY29uc3Qgc2VhcmNoU3RyaW5nID0gdXJsUGFyc2VkLnNlYXJjaCA9PT0gXCJcIiA/IFwiP1wiIDogdXJsUGFyc2VkLnNlYXJjaDtcbiAgICBjb25zdCBzZWFyY2hQaWVjZXMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IHBhaXIgb2Ygc2VhcmNoU3RyaW5nLnNsaWNlKDEpLnNwbGl0KFwiJlwiKSkge1xuICAgICAgICBpZiAocGFpcikge1xuICAgICAgICAgICAgY29uc3QgW2tleV0gPSBwYWlyLnNwbGl0KFwiPVwiLCAyKTtcbiAgICAgICAgICAgIGlmIChrZXkgIT09IGVuY29kZWROYW1lKSB7XG4gICAgICAgICAgICAgICAgc2VhcmNoUGllY2VzLnB1c2gocGFpcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGVuY29kZWRWYWx1ZSkge1xuICAgICAgICBzZWFyY2hQaWVjZXMucHVzaChgJHtlbmNvZGVkTmFtZX09JHtlbmNvZGVkVmFsdWV9YCk7XG4gICAgfVxuICAgIHVybFBhcnNlZC5zZWFyY2ggPSBzZWFyY2hQaWVjZXMubGVuZ3RoID8gYD8ke3NlYXJjaFBpZWNlcy5qb2luKFwiJlwiKX1gIDogXCJcIjtcbiAgICByZXR1cm4gdXJsUGFyc2VkLnRvU3RyaW5nKCk7XG59XG4vKipcbiAqIEdldCBVUkwgcGFyYW1ldGVyIGJ5IG5hbWUuXG4gKlxuICogQHBhcmFtIHVybCAtXG4gKiBAcGFyYW0gbmFtZSAtXG4gKi9cbmZ1bmN0aW9uIGdldFVSTFBhcmFtZXRlcih1cmwsIG5hbWUpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3QgdXJsUGFyc2VkID0gbmV3IFVSTCh1cmwpO1xuICAgIHJldHVybiAoX2EgPSB1cmxQYXJzZWQuc2VhcmNoUGFyYW1zLmdldChuYW1lKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdW5kZWZpbmVkO1xufVxuLyoqXG4gKiBTZXQgVVJMIGhvc3QuXG4gKlxuICogQHBhcmFtIHVybCAtIFNvdXJjZSBVUkwgc3RyaW5nXG4gKiBAcGFyYW0gaG9zdCAtIE5ldyBob3N0IHN0cmluZ1xuICogQHJldHVybnMgQW4gdXBkYXRlZCBVUkwgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIHNldFVSTEhvc3QodXJsLCBob3N0KSB7XG4gICAgY29uc3QgdXJsUGFyc2VkID0gbmV3IFVSTCh1cmwpO1xuICAgIHVybFBhcnNlZC5ob3N0bmFtZSA9IGhvc3Q7XG4gICAgcmV0dXJuIHVybFBhcnNlZC50b1N0cmluZygpO1xufVxuLyoqXG4gKiBHZXQgVVJMIHBhdGggZnJvbSBhbiBVUkwgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB1cmwgLSBTb3VyY2UgVVJMIHN0cmluZ1xuICovXG5mdW5jdGlvbiBnZXRVUkxQYXRoKHVybCkge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHVybFBhcnNlZCA9IG5ldyBVUkwodXJsKTtcbiAgICAgICAgcmV0dXJuIHVybFBhcnNlZC5wYXRobmFtZTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59XG4vKipcbiAqIEdldCBVUkwgc2NoZW1lIGZyb20gYW4gVVJMIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gdXJsIC0gU291cmNlIFVSTCBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gZ2V0VVJMU2NoZW1lKHVybCkge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHVybFBhcnNlZCA9IG5ldyBVUkwodXJsKTtcbiAgICAgICAgcmV0dXJuIHVybFBhcnNlZC5wcm90b2NvbC5lbmRzV2l0aChcIjpcIikgPyB1cmxQYXJzZWQucHJvdG9jb2wuc2xpY2UoMCwgLTEpIDogdXJsUGFyc2VkLnByb3RvY29sO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbn1cbi8qKlxuICogR2V0IFVSTCBwYXRoIGFuZCBxdWVyeSBmcm9tIGFuIFVSTCBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHVybCAtIFNvdXJjZSBVUkwgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGdldFVSTFBhdGhBbmRRdWVyeSh1cmwpIHtcbiAgICBjb25zdCB1cmxQYXJzZWQgPSBuZXcgVVJMKHVybCk7XG4gICAgY29uc3QgcGF0aFN0cmluZyA9IHVybFBhcnNlZC5wYXRobmFtZTtcbiAgICBpZiAoIXBhdGhTdHJpbmcpIHtcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbnZhbGlkIHVybCB3aXRob3V0IHZhbGlkIHBhdGguXCIpO1xuICAgIH1cbiAgICBsZXQgcXVlcnlTdHJpbmcgPSB1cmxQYXJzZWQuc2VhcmNoIHx8IFwiXCI7XG4gICAgcXVlcnlTdHJpbmcgPSBxdWVyeVN0cmluZy50cmltKCk7XG4gICAgaWYgKHF1ZXJ5U3RyaW5nICE9PSBcIlwiKSB7XG4gICAgICAgIHF1ZXJ5U3RyaW5nID0gcXVlcnlTdHJpbmcuc3RhcnRzV2l0aChcIj9cIikgPyBxdWVyeVN0cmluZyA6IGA/JHtxdWVyeVN0cmluZ31gOyAvLyBFbnN1cmUgcXVlcnkgc3RyaW5nIHN0YXJ0IHdpdGggJz8nXG4gICAgfVxuICAgIHJldHVybiBgJHtwYXRoU3RyaW5nfSR7cXVlcnlTdHJpbmd9YDtcbn1cbi8qKlxuICogR2V0IFVSTCBxdWVyeSBrZXkgdmFsdWUgcGFpcnMgZnJvbSBhbiBVUkwgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB1cmwgLVxuICovXG5mdW5jdGlvbiBnZXRVUkxRdWVyaWVzKHVybCkge1xuICAgIGxldCBxdWVyeVN0cmluZyA9IG5ldyBVUkwodXJsKS5zZWFyY2g7XG4gICAgaWYgKCFxdWVyeVN0cmluZykge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIHF1ZXJ5U3RyaW5nID0gcXVlcnlTdHJpbmcudHJpbSgpO1xuICAgIHF1ZXJ5U3RyaW5nID0gcXVlcnlTdHJpbmcuc3RhcnRzV2l0aChcIj9cIikgPyBxdWVyeVN0cmluZy5zdWJzdHJpbmcoMSkgOiBxdWVyeVN0cmluZztcbiAgICBsZXQgcXVlcnlTdWJTdHJpbmdzID0gcXVlcnlTdHJpbmcuc3BsaXQoXCImXCIpO1xuICAgIHF1ZXJ5U3ViU3RyaW5ncyA9IHF1ZXJ5U3ViU3RyaW5ncy5maWx0ZXIoKHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IGluZGV4T2ZFcXVhbCA9IHZhbHVlLmluZGV4T2YoXCI9XCIpO1xuICAgICAgICBjb25zdCBsYXN0SW5kZXhPZkVxdWFsID0gdmFsdWUubGFzdEluZGV4T2YoXCI9XCIpO1xuICAgICAgICByZXR1cm4gKGluZGV4T2ZFcXVhbCA+IDAgJiYgaW5kZXhPZkVxdWFsID09PSBsYXN0SW5kZXhPZkVxdWFsICYmIGxhc3RJbmRleE9mRXF1YWwgPCB2YWx1ZS5sZW5ndGggLSAxKTtcbiAgICB9KTtcbiAgICBjb25zdCBxdWVyaWVzID0ge307XG4gICAgZm9yIChjb25zdCBxdWVyeVN1YlN0cmluZyBvZiBxdWVyeVN1YlN0cmluZ3MpIHtcbiAgICAgICAgY29uc3Qgc3BsaXRSZXN1bHRzID0gcXVlcnlTdWJTdHJpbmcuc3BsaXQoXCI9XCIpO1xuICAgICAgICBjb25zdCBrZXkgPSBzcGxpdFJlc3VsdHNbMF07XG4gICAgICAgIGNvbnN0IHZhbHVlID0gc3BsaXRSZXN1bHRzWzFdO1xuICAgICAgICBxdWVyaWVzW2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHF1ZXJpZXM7XG59XG4vKipcbiAqIEFwcGVuZCBhIHN0cmluZyB0byBVUkwgcXVlcnkuXG4gKlxuICogQHBhcmFtIHVybCAtIFNvdXJjZSBVUkwgc3RyaW5nLlxuICogQHBhcmFtIHF1ZXJ5UGFydHMgLSBTdHJpbmcgdG8gYmUgYXBwZW5kZWQgdG8gdGhlIFVSTCBxdWVyeS5cbiAqIEByZXR1cm5zIEFuIHVwZGF0ZWQgVVJMIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gYXBwZW5kVG9VUkxRdWVyeSh1cmwsIHF1ZXJ5UGFydHMpIHtcbiAgICBjb25zdCB1cmxQYXJzZWQgPSBuZXcgVVJMKHVybCk7XG4gICAgbGV0IHF1ZXJ5ID0gdXJsUGFyc2VkLnNlYXJjaDtcbiAgICBpZiAocXVlcnkpIHtcbiAgICAgICAgcXVlcnkgKz0gXCImXCIgKyBxdWVyeVBhcnRzO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcXVlcnkgPSBxdWVyeVBhcnRzO1xuICAgIH1cbiAgICB1cmxQYXJzZWQuc2VhcmNoID0gcXVlcnk7XG4gICAgcmV0dXJuIHVybFBhcnNlZC50b1N0cmluZygpO1xufVxuLyoqXG4gKiBSb3VuZHMgYSBkYXRlIG9mZiB0byBzZWNvbmRzLlxuICpcbiAqIEBwYXJhbSBkYXRlIC1cbiAqIEBwYXJhbSB3aXRoTWlsbGlzZWNvbmRzIC0gSWYgdHJ1ZSwgWVlZWS1NTS1ERFRoaDptbTpzcy5mZmZmZmZmWiB3aWxsIGJlIHJldHVybmVkO1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBmYWxzZSwgWVlZWS1NTS1ERFRoaDptbTpzc1ogd2lsbCBiZSByZXR1cm5lZC5cbiAqIEByZXR1cm5zIERhdGUgc3RyaW5nIGluIElTTzgwNjEgZm9ybWF0LCB3aXRoIG9yIHdpdGhvdXQgNyBtaWxsaXNlY29uZHMgY29tcG9uZW50XG4gKi9cbmZ1bmN0aW9uIHRydW5jYXRlZElTTzgwNjFEYXRlKGRhdGUsIHdpdGhNaWxsaXNlY29uZHMgPSB0cnVlKSB7XG4gICAgLy8gRGF0ZS50b0lTT1N0cmluZygpIHdpbGwgcmV0dXJuIGxpa2UgXCIyMDE4LTEwLTI5VDA2OjM0OjM2LjEzOVpcIlxuICAgIGNvbnN0IGRhdGVTdHJpbmcgPSBkYXRlLnRvSVNPU3RyaW5nKCk7XG4gICAgcmV0dXJuIHdpdGhNaWxsaXNlY29uZHNcbiAgICAgICAgPyBkYXRlU3RyaW5nLnN1YnN0cmluZygwLCBkYXRlU3RyaW5nLmxlbmd0aCAtIDEpICsgXCIwMDAwXCIgKyBcIlpcIlxuICAgICAgICA6IGRhdGVTdHJpbmcuc3Vic3RyaW5nKDAsIGRhdGVTdHJpbmcubGVuZ3RoIC0gNSkgKyBcIlpcIjtcbn1cbi8qKlxuICogQmFzZTY0IGVuY29kZS5cbiAqXG4gKiBAcGFyYW0gY29udGVudCAtXG4gKi9cbmZ1bmN0aW9uIGJhc2U2NGVuY29kZShjb250ZW50KSB7XG4gICAgcmV0dXJuICFjb3JlVXRpbC5pc05vZGUgPyBidG9hKGNvbnRlbnQpIDogQnVmZmVyLmZyb20oY29udGVudCkudG9TdHJpbmcoXCJiYXNlNjRcIik7XG59XG4vKipcbiAqIEdlbmVyYXRlIGEgNjQgYnl0ZXMgYmFzZTY0IGJsb2NrIElEIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gYmxvY2tJbmRleCAtXG4gKi9cbmZ1bmN0aW9uIGdlbmVyYXRlQmxvY2tJRChibG9ja0lEUHJlZml4LCBibG9ja0luZGV4KSB7XG4gICAgLy8gVG8gZ2VuZXJhdGUgYSA2NCBieXRlcyBiYXNlNjQgc3RyaW5nLCBzb3VyY2Ugc3RyaW5nIHNob3VsZCBiZSA0OFxuICAgIGNvbnN0IG1heFNvdXJjZVN0cmluZ0xlbmd0aCA9IDQ4O1xuICAgIC8vIEEgYmxvYiBjYW4gaGF2ZSBhIG1heGltdW0gb2YgMTAwLDAwMCB1bmNvbW1pdHRlZCBibG9ja3MgYXQgYW55IGdpdmVuIHRpbWVcbiAgICBjb25zdCBtYXhCbG9ja0luZGV4TGVuZ3RoID0gNjtcbiAgICBjb25zdCBtYXhBbGxvd2VkQmxvY2tJRFByZWZpeExlbmd0aCA9IG1heFNvdXJjZVN0cmluZ0xlbmd0aCAtIG1heEJsb2NrSW5kZXhMZW5ndGg7XG4gICAgaWYgKGJsb2NrSURQcmVmaXgubGVuZ3RoID4gbWF4QWxsb3dlZEJsb2NrSURQcmVmaXhMZW5ndGgpIHtcbiAgICAgICAgYmxvY2tJRFByZWZpeCA9IGJsb2NrSURQcmVmaXguc2xpY2UoMCwgbWF4QWxsb3dlZEJsb2NrSURQcmVmaXhMZW5ndGgpO1xuICAgIH1cbiAgICBjb25zdCByZXMgPSBibG9ja0lEUHJlZml4ICtcbiAgICAgICAgcGFkU3RhcnQoYmxvY2tJbmRleC50b1N0cmluZygpLCBtYXhTb3VyY2VTdHJpbmdMZW5ndGggLSBibG9ja0lEUHJlZml4Lmxlbmd0aCwgXCIwXCIpO1xuICAgIHJldHVybiBiYXNlNjRlbmNvZGUocmVzKTtcbn1cbi8qKlxuICogRGVsYXkgc3BlY2lmaWVkIHRpbWUgaW50ZXJ2YWwuXG4gKlxuICogQHBhcmFtIHRpbWVJbk1zIC1cbiAqIEBwYXJhbSBhYm9ydGVyIC1cbiAqIEBwYXJhbSBhYm9ydEVycm9yIC1cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZGVsYXkodGltZUluTXMsIGFib3J0ZXIsIGFib3J0RXJyb3IpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0ICovXG4gICAgICAgIGxldCB0aW1lb3V0O1xuICAgICAgICBjb25zdCBhYm9ydEhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVqZWN0KGFib3J0RXJyb3IpO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZXNvbHZlSGFuZGxlciA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChhYm9ydGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBhYm9ydGVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBhYm9ydEhhbmRsZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9O1xuICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChyZXNvbHZlSGFuZGxlciwgdGltZUluTXMpO1xuICAgICAgICBpZiAoYWJvcnRlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhYm9ydGVyLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBhYm9ydEhhbmRsZXIpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG4vKipcbiAqIFN0cmluZy5wcm90b3R5cGUucGFkU3RhcnQoKVxuICpcbiAqIEBwYXJhbSBjdXJyZW50U3RyaW5nIC1cbiAqIEBwYXJhbSB0YXJnZXRMZW5ndGggLVxuICogQHBhcmFtIHBhZFN0cmluZyAtXG4gKi9cbmZ1bmN0aW9uIHBhZFN0YXJ0KGN1cnJlbnRTdHJpbmcsIHRhcmdldExlbmd0aCwgcGFkU3RyaW5nID0gXCIgXCIpIHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBUUyBkb2Vzbid0IGtub3cgdGhpcyBjb2RlIG5lZWRzIHRvIHJ1biBkb3dubGV2ZWwgc29tZXRpbWVzXG4gICAgaWYgKFN0cmluZy5wcm90b3R5cGUucGFkU3RhcnQpIHtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRTdHJpbmcucGFkU3RhcnQodGFyZ2V0TGVuZ3RoLCBwYWRTdHJpbmcpO1xuICAgIH1cbiAgICBwYWRTdHJpbmcgPSBwYWRTdHJpbmcgfHwgXCIgXCI7XG4gICAgaWYgKGN1cnJlbnRTdHJpbmcubGVuZ3RoID4gdGFyZ2V0TGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBjdXJyZW50U3RyaW5nO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGFyZ2V0TGVuZ3RoID0gdGFyZ2V0TGVuZ3RoIC0gY3VycmVudFN0cmluZy5sZW5ndGg7XG4gICAgICAgIGlmICh0YXJnZXRMZW5ndGggPiBwYWRTdHJpbmcubGVuZ3RoKSB7XG4gICAgICAgICAgICBwYWRTdHJpbmcgKz0gcGFkU3RyaW5nLnJlcGVhdCh0YXJnZXRMZW5ndGggLyBwYWRTdHJpbmcubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFkU3RyaW5nLnNsaWNlKDAsIHRhcmdldExlbmd0aCkgKyBjdXJyZW50U3RyaW5nO1xuICAgIH1cbn1cbi8qKlxuICogSWYgdHdvIHN0cmluZ3MgYXJlIGVxdWFsIHdoZW4gY29tcGFyZWQgY2FzZSBpbnNlbnNpdGl2ZS5cbiAqXG4gKiBAcGFyYW0gc3RyMSAtXG4gKiBAcGFyYW0gc3RyMiAtXG4gKi9cbmZ1bmN0aW9uIGlFcXVhbChzdHIxLCBzdHIyKSB7XG4gICAgcmV0dXJuIHN0cjEudG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gc3RyMi50b0xvY2FsZUxvd2VyQ2FzZSgpO1xufVxuLyoqXG4gKiBFeHRyYWN0cyBhY2NvdW50IG5hbWUgZnJvbSB0aGUgdXJsXG4gKiBAcGFyYW0gdXJsIC0gdXJsIHRvIGV4dHJhY3QgdGhlIGFjY291bnQgbmFtZSBmcm9tXG4gKiBAcmV0dXJucyB3aXRoIHRoZSBhY2NvdW50IG5hbWVcbiAqL1xuZnVuY3Rpb24gZ2V0QWNjb3VudE5hbWVGcm9tVXJsKHVybCkge1xuICAgIGNvbnN0IHBhcnNlZFVybCA9IG5ldyBVUkwodXJsKTtcbiAgICBsZXQgYWNjb3VudE5hbWU7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHBhcnNlZFVybC5ob3N0bmFtZS5zcGxpdChcIi5cIilbMV0gPT09IFwiYmxvYlwiKSB7XG4gICAgICAgICAgICAvLyBgJHtkZWZhdWx0RW5kcG9pbnRzUHJvdG9jb2x9Oi8vJHthY2NvdW50TmFtZX0uYmxvYi4ke2VuZHBvaW50U3VmZml4fWA7XG4gICAgICAgICAgICBhY2NvdW50TmFtZSA9IHBhcnNlZFVybC5ob3N0bmFtZS5zcGxpdChcIi5cIilbMF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNJcEVuZHBvaW50U3R5bGUocGFyc2VkVXJsKSkge1xuICAgICAgICAgICAgLy8gSVB2NC9JUHY2IGFkZHJlc3MgaG9zdHMuLi4gRXhhbXBsZSAtIGh0dHA6Ly8xOTIuMC4wLjEwOjEwMDAxL2RldnN0b3JlYWNjb3VudDEvXG4gICAgICAgICAgICAvLyBTaW5nbGUgd29yZCBkb21haW4gd2l0aG91dCBhIFtkb3RdIGluIHRoZSBlbmRwb2ludC4uLiBFeGFtcGxlIC0gaHR0cDovL2xvY2FsaG9zdDoxMDAwMS9kZXZzdG9yZWFjY291bnQxL1xuICAgICAgICAgICAgLy8gLmdldFBhdGgoKSAtPiAvZGV2c3RvcmVhY2NvdW50MS9cbiAgICAgICAgICAgIGFjY291bnROYW1lID0gcGFyc2VkVXJsLnBhdGhuYW1lLnNwbGl0KFwiL1wiKVsxXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIEN1c3RvbSBkb21haW4gY2FzZTogXCJodHRwczovL2N1c3RvbWRvbWFpbi5jb20vY29udGFpbmVybmFtZS9ibG9iXCIuXG4gICAgICAgICAgICBhY2NvdW50TmFtZSA9IFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjY291bnROYW1lO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIGV4dHJhY3QgYWNjb3VudE5hbWUgd2l0aCBwcm92aWRlZCBpbmZvcm1hdGlvbi5cIik7XG4gICAgfVxufVxuZnVuY3Rpb24gaXNJcEVuZHBvaW50U3R5bGUocGFyc2VkVXJsKSB7XG4gICAgY29uc3QgaG9zdCA9IHBhcnNlZFVybC5ob3N0O1xuICAgIC8vIENhc2UgMTogSXB2NiwgdXNlIGEgYnJvYWQgcmVnZXggdG8gZmluZCBvdXQgY2FuZGlkYXRlcyB3aG9zZSBob3N0IGNvbnRhaW5zIHR3byAnOicuXG4gICAgLy8gQ2FzZSAyOiBsb2NhbGhvc3QoOnBvcnQpIG9yIGhvc3QuZG9ja2VyLmludGVybmFsLCB1c2UgYnJvYWQgcmVnZXggdG8gbWF0Y2ggcG9ydCBwYXJ0LlxuICAgIC8vIENhc2UgMzogSXB2NCwgdXNlIGJyb2FkIHJlZ2V4IHdoaWNoIGp1c3QgY2hlY2sgaWYgaG9zdCBjb250YWlucyBJcHY0LlxuICAgIC8vIEZvciB2YWxpZCBob3N0IHBsZWFzZSByZWZlciB0byBodHRwczovL21hbjcub3JnL2xpbnV4L21hbi1wYWdlcy9tYW43L2hvc3RuYW1lLjcuaHRtbC5cbiAgICByZXR1cm4gKC9eLio6Lio6LiokfF4obG9jYWxob3N0fGhvc3QuZG9ja2VyLmludGVybmFsKSg6WzAtOV0rKT8kfF4oXFxkfFsxLTldXFxkfDFcXGRcXGR8MlswLTRdXFxkfDI1WzAtNV0pKFxcLihcXGR8WzEtOV1cXGR8MVxcZFxcZHwyWzAtNF1cXGR8MjVbMC01XSkpezN9KDpbMC05XSspPyQvLnRlc3QoaG9zdCkgfHxcbiAgICAgICAgKEJvb2xlYW4ocGFyc2VkVXJsLnBvcnQpICYmIFBhdGhTdHlsZVBvcnRzLmluY2x1ZGVzKHBhcnNlZFVybC5wb3J0KSkpO1xufVxuLyoqXG4gKiBDb252ZXJ0IFRhZ3MgdG8gZW5jb2RlZCBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHRhZ3MgLVxuICovXG5mdW5jdGlvbiB0b0Jsb2JUYWdzU3RyaW5nKHRhZ3MpIHtcbiAgICBpZiAodGFncyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IHRhZ1BhaXJzID0gW107XG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGFncykge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRhZ3MsIGtleSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGFnc1trZXldO1xuICAgICAgICAgICAgdGFnUGFpcnMucHVzaChgJHtlbmNvZGVVUklDb21wb25lbnQoa2V5KX09JHtlbmNvZGVVUklDb21wb25lbnQodmFsdWUpfWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0YWdQYWlycy5qb2luKFwiJlwiKTtcbn1cbi8qKlxuICogQ29udmVydCBUYWdzIHR5cGUgdG8gQmxvYlRhZ3MuXG4gKlxuICogQHBhcmFtIHRhZ3MgLVxuICovXG5mdW5jdGlvbiB0b0Jsb2JUYWdzKHRhZ3MpIHtcbiAgICBpZiAodGFncyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IHJlcyA9IHtcbiAgICAgICAgYmxvYlRhZ1NldDogW10sXG4gICAgfTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0YWdzKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGFncywga2V5KSkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0YWdzW2tleV07XG4gICAgICAgICAgICByZXMuYmxvYlRhZ1NldC5wdXNoKHtcbiAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuLyoqXG4gKiBDb3ZlcnQgQmxvYlRhZ3MgdG8gVGFncyB0eXBlLlxuICpcbiAqIEBwYXJhbSB0YWdzIC1cbiAqL1xuZnVuY3Rpb24gdG9UYWdzKHRhZ3MpIHtcbiAgICBpZiAodGFncyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IHJlcyA9IHt9O1xuICAgIGZvciAoY29uc3QgYmxvYlRhZyBvZiB0YWdzLmJsb2JUYWdTZXQpIHtcbiAgICAgICAgcmVzW2Jsb2JUYWcua2V5XSA9IGJsb2JUYWcudmFsdWU7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG4vKipcbiAqIENvbnZlcnQgQmxvYlF1ZXJ5VGV4dENvbmZpZ3VyYXRpb24gdG8gUXVlcnlTZXJpYWxpemF0aW9uIHR5cGUuXG4gKlxuICogQHBhcmFtIHRleHRDb25maWd1cmF0aW9uIC1cbiAqL1xuZnVuY3Rpb24gdG9RdWVyeVNlcmlhbGl6YXRpb24odGV4dENvbmZpZ3VyYXRpb24pIHtcbiAgICBpZiAodGV4dENvbmZpZ3VyYXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBzd2l0Y2ggKHRleHRDb25maWd1cmF0aW9uLmtpbmQpIHtcbiAgICAgICAgY2FzZSBcImNzdlwiOlxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJkZWxpbWl0ZWRcIixcbiAgICAgICAgICAgICAgICAgICAgZGVsaW1pdGVkVGV4dENvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtblNlcGFyYXRvcjogdGV4dENvbmZpZ3VyYXRpb24uY29sdW1uU2VwYXJhdG9yIHx8IFwiLFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRRdW90ZTogdGV4dENvbmZpZ3VyYXRpb24uZmllbGRRdW90ZSB8fCBcIlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkU2VwYXJhdG9yOiB0ZXh0Q29uZmlndXJhdGlvbi5yZWNvcmRTZXBhcmF0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgICBlc2NhcGVDaGFyOiB0ZXh0Q29uZmlndXJhdGlvbi5lc2NhcGVDaGFyYWN0ZXIgfHwgXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnNQcmVzZW50OiB0ZXh0Q29uZmlndXJhdGlvbi5oYXNIZWFkZXJzIHx8IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICBjYXNlIFwianNvblwiOlxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJqc29uXCIsXG4gICAgICAgICAgICAgICAgICAgIGpzb25UZXh0Q29uZmlndXJhdGlvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkU2VwYXJhdG9yOiB0ZXh0Q29uZmlndXJhdGlvbi5yZWNvcmRTZXBhcmF0b3IsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIGNhc2UgXCJhcnJvd1wiOlxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJhcnJvd1wiLFxuICAgICAgICAgICAgICAgICAgICBhcnJvd0NvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYTogdGV4dENvbmZpZ3VyYXRpb24uc2NoZW1hLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICBjYXNlIFwicGFycXVldFwiOlxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJwYXJxdWV0XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcIkludmFsaWQgQmxvYlF1ZXJ5VGV4dENvbmZpZ3VyYXRpb24uXCIpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHBhcnNlT2JqZWN0UmVwbGljYXRpb25SZWNvcmQob2JqZWN0UmVwbGljYXRpb25SZWNvcmQpIHtcbiAgICBpZiAoIW9iamVjdFJlcGxpY2F0aW9uUmVjb3JkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmIChcInBvbGljeS1pZFwiIGluIG9iamVjdFJlcGxpY2F0aW9uUmVjb3JkKSB7XG4gICAgICAgIC8vIElmIHRoZSBkaWN0aW9uYXJ5IGNvbnRhaW5zIGEga2V5IHdpdGggcG9saWN5IGlkLCB3ZSBhcmUgbm90IHJlcXVpcmVkIHRvIGRvIGFueSBwYXJzaW5nIHNpbmNlXG4gICAgICAgIC8vIHRoZSBwb2xpY3kgaWQgc2hvdWxkIGFscmVhZHkgYmUgc3RvcmVkIGluIHRoZSBPYmplY3RSZXBsaWNhdGlvbkRlc3RpbmF0aW9uUG9saWN5SWQuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IG9yUHJvcGVydGllcyA9IFtdO1xuICAgIGZvciAoY29uc3Qga2V5IGluIG9iamVjdFJlcGxpY2F0aW9uUmVjb3JkKSB7XG4gICAgICAgIGNvbnN0IGlkcyA9IGtleS5zcGxpdChcIl9cIik7XG4gICAgICAgIGNvbnN0IHBvbGljeVByZWZpeCA9IFwib3ItXCI7XG4gICAgICAgIGlmIChpZHNbMF0uc3RhcnRzV2l0aChwb2xpY3lQcmVmaXgpKSB7XG4gICAgICAgICAgICBpZHNbMF0gPSBpZHNbMF0uc3Vic3RyaW5nKHBvbGljeVByZWZpeC5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJ1bGUgPSB7XG4gICAgICAgICAgICBydWxlSWQ6IGlkc1sxXSxcbiAgICAgICAgICAgIHJlcGxpY2F0aW9uU3RhdHVzOiBvYmplY3RSZXBsaWNhdGlvblJlY29yZFtrZXldLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBwb2xpY3lJbmRleCA9IG9yUHJvcGVydGllcy5maW5kSW5kZXgoKHBvbGljeSkgPT4gcG9saWN5LnBvbGljeUlkID09PSBpZHNbMF0pO1xuICAgICAgICBpZiAocG9saWN5SW5kZXggPiAtMSkge1xuICAgICAgICAgICAgb3JQcm9wZXJ0aWVzW3BvbGljeUluZGV4XS5ydWxlcy5wdXNoKHJ1bGUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgb3JQcm9wZXJ0aWVzLnB1c2goe1xuICAgICAgICAgICAgICAgIHBvbGljeUlkOiBpZHNbMF0sXG4gICAgICAgICAgICAgICAgcnVsZXM6IFtydWxlXSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvclByb3BlcnRpZXM7XG59XG5mdW5jdGlvbiBodHRwQXV0aG9yaXphdGlvblRvU3RyaW5nKGh0dHBBdXRob3JpemF0aW9uKSB7XG4gICAgcmV0dXJuIGh0dHBBdXRob3JpemF0aW9uID8gaHR0cEF1dGhvcml6YXRpb24uc2NoZW1lICsgXCIgXCIgKyBodHRwQXV0aG9yaXphdGlvbi52YWx1ZSA6IHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIEJsb2JOYW1lVG9TdHJpbmcobmFtZSkge1xuICAgIGlmIChuYW1lLmVuY29kZWQpIHtcbiAgICAgICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChuYW1lLmNvbnRlbnQpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5hbWUuY29udGVudDtcbiAgICB9XG59XG5mdW5jdGlvbiBDb252ZXJ0SW50ZXJuYWxSZXNwb25zZU9mTGlzdEJsb2JGbGF0KGludGVybmFsUmVzcG9uc2UpIHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBpbnRlcm5hbFJlc3BvbnNlKSwgeyBzZWdtZW50OiB7XG4gICAgICAgICAgICBibG9iSXRlbXM6IGludGVybmFsUmVzcG9uc2Uuc2VnbWVudC5ibG9iSXRlbXMubWFwKChibG9iSXRlbUludGVyYWwpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBibG9iSXRlbSA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYmxvYkl0ZW1JbnRlcmFsKSwgeyBuYW1lOiBCbG9iTmFtZVRvU3RyaW5nKGJsb2JJdGVtSW50ZXJhbC5uYW1lKSB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYmxvYkl0ZW07XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSB9KTtcbn1cbmZ1bmN0aW9uIENvbnZlcnRJbnRlcm5hbFJlc3BvbnNlT2ZMaXN0QmxvYkhpZXJhcmNoeShpbnRlcm5hbFJlc3BvbnNlKSB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGludGVybmFsUmVzcG9uc2UpLCB7IHNlZ21lbnQ6IHtcbiAgICAgICAgICAgIGJsb2JQcmVmaXhlczogKF9hID0gaW50ZXJuYWxSZXNwb25zZS5zZWdtZW50LmJsb2JQcmVmaXhlcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm1hcCgoYmxvYlByZWZpeEludGVybmFsKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmxvYlByZWZpeCA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYmxvYlByZWZpeEludGVybmFsKSwgeyBuYW1lOiBCbG9iTmFtZVRvU3RyaW5nKGJsb2JQcmVmaXhJbnRlcm5hbC5uYW1lKSB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYmxvYlByZWZpeDtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgYmxvYkl0ZW1zOiBpbnRlcm5hbFJlc3BvbnNlLnNlZ21lbnQuYmxvYkl0ZW1zLm1hcCgoYmxvYkl0ZW1JbnRlcmFsKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmxvYkl0ZW0gPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGJsb2JJdGVtSW50ZXJhbCksIHsgbmFtZTogQmxvYk5hbWVUb1N0cmluZyhibG9iSXRlbUludGVyYWwubmFtZSkgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJsb2JJdGVtO1xuICAgICAgICAgICAgfSksXG4gICAgICAgIH0gfSk7XG59XG5mdW5jdGlvbiogRXh0cmFjdFBhZ2VSYW5nZUluZm9JdGVtcyhnZXRQYWdlUmFuZ2VzU2VnbWVudCkge1xuICAgIGxldCBwYWdlUmFuZ2UgPSBbXTtcbiAgICBsZXQgY2xlYXJSYW5nZSA9IFtdO1xuICAgIGlmIChnZXRQYWdlUmFuZ2VzU2VnbWVudC5wYWdlUmFuZ2UpXG4gICAgICAgIHBhZ2VSYW5nZSA9IGdldFBhZ2VSYW5nZXNTZWdtZW50LnBhZ2VSYW5nZTtcbiAgICBpZiAoZ2V0UGFnZVJhbmdlc1NlZ21lbnQuY2xlYXJSYW5nZSlcbiAgICAgICAgY2xlYXJSYW5nZSA9IGdldFBhZ2VSYW5nZXNTZWdtZW50LmNsZWFyUmFuZ2U7XG4gICAgbGV0IHBhZ2VSYW5nZUluZGV4ID0gMDtcbiAgICBsZXQgY2xlYXJSYW5nZUluZGV4ID0gMDtcbiAgICB3aGlsZSAocGFnZVJhbmdlSW5kZXggPCBwYWdlUmFuZ2UubGVuZ3RoICYmIGNsZWFyUmFuZ2VJbmRleCA8IGNsZWFyUmFuZ2UubGVuZ3RoKSB7XG4gICAgICAgIGlmIChwYWdlUmFuZ2VbcGFnZVJhbmdlSW5kZXhdLnN0YXJ0IDwgY2xlYXJSYW5nZVtjbGVhclJhbmdlSW5kZXhdLnN0YXJ0KSB7XG4gICAgICAgICAgICB5aWVsZCB7XG4gICAgICAgICAgICAgICAgc3RhcnQ6IHBhZ2VSYW5nZVtwYWdlUmFuZ2VJbmRleF0uc3RhcnQsXG4gICAgICAgICAgICAgICAgZW5kOiBwYWdlUmFuZ2VbcGFnZVJhbmdlSW5kZXhdLmVuZCxcbiAgICAgICAgICAgICAgICBpc0NsZWFyOiBmYWxzZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICArK3BhZ2VSYW5nZUluZGV4O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgeWllbGQge1xuICAgICAgICAgICAgICAgIHN0YXJ0OiBjbGVhclJhbmdlW2NsZWFyUmFuZ2VJbmRleF0uc3RhcnQsXG4gICAgICAgICAgICAgICAgZW5kOiBjbGVhclJhbmdlW2NsZWFyUmFuZ2VJbmRleF0uZW5kLFxuICAgICAgICAgICAgICAgIGlzQ2xlYXI6IHRydWUsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgKytjbGVhclJhbmdlSW5kZXg7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZm9yICg7IHBhZ2VSYW5nZUluZGV4IDwgcGFnZVJhbmdlLmxlbmd0aDsgKytwYWdlUmFuZ2VJbmRleCkge1xuICAgICAgICB5aWVsZCB7XG4gICAgICAgICAgICBzdGFydDogcGFnZVJhbmdlW3BhZ2VSYW5nZUluZGV4XS5zdGFydCxcbiAgICAgICAgICAgIGVuZDogcGFnZVJhbmdlW3BhZ2VSYW5nZUluZGV4XS5lbmQsXG4gICAgICAgICAgICBpc0NsZWFyOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZm9yICg7IGNsZWFyUmFuZ2VJbmRleCA8IGNsZWFyUmFuZ2UubGVuZ3RoOyArK2NsZWFyUmFuZ2VJbmRleCkge1xuICAgICAgICB5aWVsZCB7XG4gICAgICAgICAgICBzdGFydDogY2xlYXJSYW5nZVtjbGVhclJhbmdlSW5kZXhdLnN0YXJ0LFxuICAgICAgICAgICAgZW5kOiBjbGVhclJhbmdlW2NsZWFyUmFuZ2VJbmRleF0uZW5kLFxuICAgICAgICAgICAgaXNDbGVhcjogdHJ1ZSxcbiAgICAgICAgfTtcbiAgICB9XG59XG4vKipcbiAqIEVzY2FwZSB0aGUgYmxvYk5hbWUgYnV0IGtlZXAgcGF0aCBzZXBhcmF0b3IgKCcvJykuXG4gKi9cbmZ1bmN0aW9uIEVzY2FwZVBhdGgoYmxvYk5hbWUpIHtcbiAgICBjb25zdCBzcGxpdCA9IGJsb2JOYW1lLnNwbGl0KFwiL1wiKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNwbGl0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHNwbGl0W2ldID0gZW5jb2RlVVJJQ29tcG9uZW50KHNwbGl0W2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIHNwbGl0LmpvaW4oXCIvXCIpO1xufVxuLyoqXG4gKiBBIHR5cGVzYWZlIGhlbHBlciBmb3IgZW5zdXJpbmcgdGhhdCBhIGdpdmVuIHJlc3BvbnNlIG9iamVjdCBoYXNcbiAqIHRoZSBvcmlnaW5hbCBfcmVzcG9uc2UgYXR0YWNoZWQuXG4gKiBAcGFyYW0gcmVzcG9uc2UgLSBBIHJlc3BvbnNlIG9iamVjdCBmcm9tIGNhbGxpbmcgYSBjbGllbnQgb3BlcmF0aW9uXG4gKiBAcmV0dXJucyBUaGUgc2FtZSBvYmplY3QsIGJ1dCB3aXRoIGtub3duIF9yZXNwb25zZSBwcm9wZXJ0eVxuICovXG5mdW5jdGlvbiBhc3NlcnRSZXNwb25zZShyZXNwb25zZSkge1xuICAgIGlmIChgX3Jlc3BvbnNlYCBpbiByZXNwb25zZSkge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFVuZXhwZWN0ZWQgcmVzcG9uc2Ugb2JqZWN0ICR7cmVzcG9uc2V9YCk7XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBSZXRyeVBvbGljeSB0eXBlcy5cbiAqL1xuZXhwb3J0cy5TdG9yYWdlUmV0cnlQb2xpY3lUeXBlID0gdm9pZCAwO1xuKGZ1bmN0aW9uIChTdG9yYWdlUmV0cnlQb2xpY3lUeXBlKSB7XG4gICAgLyoqXG4gICAgICogRXhwb25lbnRpYWwgcmV0cnkuIFJldHJ5IHRpbWUgZGVsYXkgZ3Jvd3MgZXhwb25lbnRpYWxseS5cbiAgICAgKi9cbiAgICBTdG9yYWdlUmV0cnlQb2xpY3lUeXBlW1N0b3JhZ2VSZXRyeVBvbGljeVR5cGVbXCJFWFBPTkVOVElBTFwiXSA9IDBdID0gXCJFWFBPTkVOVElBTFwiO1xuICAgIC8qKlxuICAgICAqIExpbmVhciByZXRyeS4gUmV0cnkgdGltZSBkZWxheSBncm93cyBsaW5lYXJseS5cbiAgICAgKi9cbiAgICBTdG9yYWdlUmV0cnlQb2xpY3lUeXBlW1N0b3JhZ2VSZXRyeVBvbGljeVR5cGVbXCJGSVhFRFwiXSA9IDFdID0gXCJGSVhFRFwiO1xufSkoZXhwb3J0cy5TdG9yYWdlUmV0cnlQb2xpY3lUeXBlIHx8IChleHBvcnRzLlN0b3JhZ2VSZXRyeVBvbGljeVR5cGUgPSB7fSkpO1xuLy8gRGVmYXVsdCB2YWx1ZXMgb2YgU3RvcmFnZVJldHJ5T3B0aW9uc1xuY29uc3QgREVGQVVMVF9SRVRSWV9PUFRJT05TJDEgPSB7XG4gICAgbWF4UmV0cnlEZWxheUluTXM6IDEyMCAqIDEwMDAsXG4gICAgbWF4VHJpZXM6IDQsXG4gICAgcmV0cnlEZWxheUluTXM6IDQgKiAxMDAwLFxuICAgIHJldHJ5UG9saWN5VHlwZTogZXhwb3J0cy5TdG9yYWdlUmV0cnlQb2xpY3lUeXBlLkVYUE9ORU5USUFMLFxuICAgIHNlY29uZGFyeUhvc3Q6IFwiXCIsXG4gICAgdHJ5VGltZW91dEluTXM6IHVuZGVmaW5lZCwgLy8gVXNlIHNlcnZlciBzaWRlIGRlZmF1bHQgdGltZW91dCBzdHJhdGVneVxufTtcbmNvbnN0IFJFVFJZX0FCT1JUX0VSUk9SJDEgPSBuZXcgYWJvcnRDb250cm9sbGVyLkFib3J0RXJyb3IoXCJUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLlwiKTtcbi8qKlxuICogUmV0cnkgcG9saWN5IHdpdGggZXhwb25lbnRpYWwgcmV0cnkgYW5kIGxpbmVhciByZXRyeSBpbXBsZW1lbnRlZC5cbiAqL1xuY2xhc3MgU3RvcmFnZVJldHJ5UG9saWN5IGV4dGVuZHMgQmFzZVJlcXVlc3RQb2xpY3kge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgUmV0cnlQb2xpY3kuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmV4dFBvbGljeSAtXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLVxuICAgICAqIEBwYXJhbSByZXRyeU9wdGlvbnMgLVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG5leHRQb2xpY3ksIG9wdGlvbnMsIHJldHJ5T3B0aW9ucyA9IERFRkFVTFRfUkVUUllfT1BUSU9OUyQxKSB7XG4gICAgICAgIHN1cGVyKG5leHRQb2xpY3ksIG9wdGlvbnMpO1xuICAgICAgICAvLyBJbml0aWFsaXplIHJldHJ5IG9wdGlvbnNcbiAgICAgICAgdGhpcy5yZXRyeU9wdGlvbnMgPSB7XG4gICAgICAgICAgICByZXRyeVBvbGljeVR5cGU6IHJldHJ5T3B0aW9ucy5yZXRyeVBvbGljeVR5cGVcbiAgICAgICAgICAgICAgICA/IHJldHJ5T3B0aW9ucy5yZXRyeVBvbGljeVR5cGVcbiAgICAgICAgICAgICAgICA6IERFRkFVTFRfUkVUUllfT1BUSU9OUyQxLnJldHJ5UG9saWN5VHlwZSxcbiAgICAgICAgICAgIG1heFRyaWVzOiByZXRyeU9wdGlvbnMubWF4VHJpZXMgJiYgcmV0cnlPcHRpb25zLm1heFRyaWVzID49IDFcbiAgICAgICAgICAgICAgICA/IE1hdGguZmxvb3IocmV0cnlPcHRpb25zLm1heFRyaWVzKVxuICAgICAgICAgICAgICAgIDogREVGQVVMVF9SRVRSWV9PUFRJT05TJDEubWF4VHJpZXMsXG4gICAgICAgICAgICB0cnlUaW1lb3V0SW5NczogcmV0cnlPcHRpb25zLnRyeVRpbWVvdXRJbk1zICYmIHJldHJ5T3B0aW9ucy50cnlUaW1lb3V0SW5NcyA+PSAwXG4gICAgICAgICAgICAgICAgPyByZXRyeU9wdGlvbnMudHJ5VGltZW91dEluTXNcbiAgICAgICAgICAgICAgICA6IERFRkFVTFRfUkVUUllfT1BUSU9OUyQxLnRyeVRpbWVvdXRJbk1zLFxuICAgICAgICAgICAgcmV0cnlEZWxheUluTXM6IHJldHJ5T3B0aW9ucy5yZXRyeURlbGF5SW5NcyAmJiByZXRyeU9wdGlvbnMucmV0cnlEZWxheUluTXMgPj0gMFxuICAgICAgICAgICAgICAgID8gTWF0aC5taW4ocmV0cnlPcHRpb25zLnJldHJ5RGVsYXlJbk1zLCByZXRyeU9wdGlvbnMubWF4UmV0cnlEZWxheUluTXNcbiAgICAgICAgICAgICAgICAgICAgPyByZXRyeU9wdGlvbnMubWF4UmV0cnlEZWxheUluTXNcbiAgICAgICAgICAgICAgICAgICAgOiBERUZBVUxUX1JFVFJZX09QVElPTlMkMS5tYXhSZXRyeURlbGF5SW5NcylcbiAgICAgICAgICAgICAgICA6IERFRkFVTFRfUkVUUllfT1BUSU9OUyQxLnJldHJ5RGVsYXlJbk1zLFxuICAgICAgICAgICAgbWF4UmV0cnlEZWxheUluTXM6IHJldHJ5T3B0aW9ucy5tYXhSZXRyeURlbGF5SW5NcyAmJiByZXRyeU9wdGlvbnMubWF4UmV0cnlEZWxheUluTXMgPj0gMFxuICAgICAgICAgICAgICAgID8gcmV0cnlPcHRpb25zLm1heFJldHJ5RGVsYXlJbk1zXG4gICAgICAgICAgICAgICAgOiBERUZBVUxUX1JFVFJZX09QVElPTlMkMS5tYXhSZXRyeURlbGF5SW5NcyxcbiAgICAgICAgICAgIHNlY29uZGFyeUhvc3Q6IHJldHJ5T3B0aW9ucy5zZWNvbmRhcnlIb3N0XG4gICAgICAgICAgICAgICAgPyByZXRyeU9wdGlvbnMuc2Vjb25kYXJ5SG9zdFxuICAgICAgICAgICAgICAgIDogREVGQVVMVF9SRVRSWV9PUFRJT05TJDEuc2Vjb25kYXJ5SG9zdCxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2VuZHMgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByZXF1ZXN0IC1cbiAgICAgKi9cbiAgICBhc3luYyBzZW5kUmVxdWVzdChyZXF1ZXN0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmF0dGVtcHRTZW5kUmVxdWVzdChyZXF1ZXN0LCBmYWxzZSwgMSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlY2lkZSBhbmQgcGVyZm9ybSBuZXh0IHJldHJ5LiBXb24ndCBtdXRhdGUgcmVxdWVzdCBwYXJhbWV0ZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVxdWVzdCAtXG4gICAgICogQHBhcmFtIHNlY29uZGFyeUhhczQwNCAtICBJZiBhdHRlbXB0IHdhcyBhZ2FpbnN0IHRoZSBzZWNvbmRhcnkgJiBpdCByZXR1cm5lZCBhIFN0YXR1c05vdEZvdW5kICg0MDQpLCB0aGVuXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSByZXNvdXJjZSB3YXMgbm90IGZvdW5kLiBUaGlzIG1heSBiZSBkdWUgdG8gcmVwbGljYXRpb24gZGVsYXkuIFNvLCBpbiB0aGlzXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UsIHdlJ2xsIG5ldmVyIHRyeSB0aGUgc2Vjb25kYXJ5IGFnYWluIGZvciB0aGlzIG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0gYXR0ZW1wdCAtICAgICAgICAgICBIb3cgbWFueSByZXRyaWVzIGhhcyBiZWVuIGF0dGVtcHRlZCB0byBwZXJmb3JtZWQsIHN0YXJ0aW5nIGZyb20gMSwgd2hpY2ggaW5jbHVkZXNcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGF0dGVtcHQgd2lsbCBiZSBwZXJmb3JtZWQgYnkgdGhpcyBtZXRob2QgY2FsbC5cbiAgICAgKi9cbiAgICBhc3luYyBhdHRlbXB0U2VuZFJlcXVlc3QocmVxdWVzdCwgc2Vjb25kYXJ5SGFzNDA0LCBhdHRlbXB0KSB7XG4gICAgICAgIGNvbnN0IG5ld1JlcXVlc3QgPSByZXF1ZXN0LmNsb25lKCk7XG4gICAgICAgIGNvbnN0IGlzUHJpbWFyeVJldHJ5ID0gc2Vjb25kYXJ5SGFzNDA0IHx8XG4gICAgICAgICAgICAhdGhpcy5yZXRyeU9wdGlvbnMuc2Vjb25kYXJ5SG9zdCB8fFxuICAgICAgICAgICAgIShyZXF1ZXN0Lm1ldGhvZCA9PT0gXCJHRVRcIiB8fCByZXF1ZXN0Lm1ldGhvZCA9PT0gXCJIRUFEXCIgfHwgcmVxdWVzdC5tZXRob2QgPT09IFwiT1BUSU9OU1wiKSB8fFxuICAgICAgICAgICAgYXR0ZW1wdCAlIDIgPT09IDE7XG4gICAgICAgIGlmICghaXNQcmltYXJ5UmV0cnkpIHtcbiAgICAgICAgICAgIG5ld1JlcXVlc3QudXJsID0gc2V0VVJMSG9zdChuZXdSZXF1ZXN0LnVybCwgdGhpcy5yZXRyeU9wdGlvbnMuc2Vjb25kYXJ5SG9zdCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU2V0IHRoZSBzZXJ2ZXItc2lkZSB0aW1lb3V0IHF1ZXJ5IHBhcmFtZXRlciBcInRpbWVvdXQ9W3NlY29uZHNdXCJcbiAgICAgICAgaWYgKHRoaXMucmV0cnlPcHRpb25zLnRyeVRpbWVvdXRJbk1zKSB7XG4gICAgICAgICAgICBuZXdSZXF1ZXN0LnVybCA9IHNldFVSTFBhcmFtZXRlcihuZXdSZXF1ZXN0LnVybCwgVVJMQ29uc3RhbnRzLlBhcmFtZXRlcnMuVElNRU9VVCwgTWF0aC5mbG9vcih0aGlzLnJldHJ5T3B0aW9ucy50cnlUaW1lb3V0SW5NcyAvIDEwMDApLnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBSZXRyeVBvbGljeTogPT09PT0+IFRyeT0ke2F0dGVtcHR9ICR7aXNQcmltYXJ5UmV0cnkgPyBcIlByaW1hcnlcIiA6IFwiU2Vjb25kYXJ5XCJ9YCk7XG4gICAgICAgICAgICByZXNwb25zZSA9IGF3YWl0IHRoaXMuX25leHRQb2xpY3kuc2VuZFJlcXVlc3QobmV3UmVxdWVzdCk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuc2hvdWxkUmV0cnkoaXNQcmltYXJ5UmV0cnksIGF0dGVtcHQsIHJlc3BvbnNlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlY29uZGFyeUhhczQwNCA9IHNlY29uZGFyeUhhczQwNCB8fCAoIWlzUHJpbWFyeVJldHJ5ICYmIHJlc3BvbnNlLnN0YXR1cyA9PT0gNDA0KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBsb2dnZXIuZXJyb3IoYFJldHJ5UG9saWN5OiBDYXVnaHQgZXJyb3IsIG1lc3NhZ2U6ICR7ZXJyLm1lc3NhZ2V9LCBjb2RlOiAke2Vyci5jb2RlfWApO1xuICAgICAgICAgICAgaWYgKCF0aGlzLnNob3VsZFJldHJ5KGlzUHJpbWFyeVJldHJ5LCBhdHRlbXB0LCByZXNwb25zZSwgZXJyKSkge1xuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLmRlbGF5KGlzUHJpbWFyeVJldHJ5LCBhdHRlbXB0LCByZXF1ZXN0LmFib3J0U2lnbmFsKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXR0ZW1wdFNlbmRSZXF1ZXN0KHJlcXVlc3QsIHNlY29uZGFyeUhhczQwNCwgKythdHRlbXB0KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVjaWRlIHdoZXRoZXIgdG8gcmV0cnkgYWNjb3JkaW5nIHRvIGxhc3QgSFRUUCByZXNwb25zZSBhbmQgcmV0cnkgY291bnRlcnMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaXNQcmltYXJ5UmV0cnkgLVxuICAgICAqIEBwYXJhbSBhdHRlbXB0IC1cbiAgICAgKiBAcGFyYW0gcmVzcG9uc2UgLVxuICAgICAqIEBwYXJhbSBlcnIgLVxuICAgICAqL1xuICAgIHNob3VsZFJldHJ5KGlzUHJpbWFyeVJldHJ5LCBhdHRlbXB0LCByZXNwb25zZSwgZXJyKSB7XG4gICAgICAgIGlmIChhdHRlbXB0ID49IHRoaXMucmV0cnlPcHRpb25zLm1heFRyaWVzKSB7XG4gICAgICAgICAgICBsb2dnZXIuaW5mbyhgUmV0cnlQb2xpY3k6IEF0dGVtcHQocykgJHthdHRlbXB0fSA+PSBtYXhUcmllcyAke3RoaXMucmV0cnlPcHRpb25zXG4gICAgICAgICAgICAgICAgLm1heFRyaWVzfSwgbm8gZnVydGhlciB0cnkuYCk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSGFuZGxlIG5ldHdvcmsgZmFpbHVyZXMsIHlvdSBtYXkgbmVlZCB0byBjdXN0b21pemUgdGhlIGxpc3Qgd2hlbiB5b3UgaW1wbGVtZW50XG4gICAgICAgIC8vIHlvdXIgb3duIGh0dHAgY2xpZW50XG4gICAgICAgIGNvbnN0IHJldHJpYWJsZUVycm9ycyA9IFtcbiAgICAgICAgICAgIFwiRVRJTUVET1VUXCIsXG4gICAgICAgICAgICBcIkVTT0NLRVRUSU1FRE9VVFwiLFxuICAgICAgICAgICAgXCJFQ09OTlJFRlVTRURcIixcbiAgICAgICAgICAgIFwiRUNPTk5SRVNFVFwiLFxuICAgICAgICAgICAgXCJFTk9FTlRcIixcbiAgICAgICAgICAgIFwiRU5PVEZPVU5EXCIsXG4gICAgICAgICAgICBcIlRJTUVPVVRcIixcbiAgICAgICAgICAgIFwiRVBJUEVcIixcbiAgICAgICAgICAgIFwiUkVRVUVTVF9TRU5EX0VSUk9SXCIsIC8vIEZvciBkZWZhdWx0IHhociBiYXNlZCBodHRwIGNsaWVudCBwcm92aWRlZCBpbiBtcy1yZXN0LWpzXG4gICAgICAgIF07XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcmV0cmlhYmxlRXJyb3Igb2YgcmV0cmlhYmxlRXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVyci5uYW1lLnRvVXBwZXJDYXNlKCkuaW5jbHVkZXMocmV0cmlhYmxlRXJyb3IpIHx8XG4gICAgICAgICAgICAgICAgICAgIGVyci5tZXNzYWdlLnRvVXBwZXJDYXNlKCkuaW5jbHVkZXMocmV0cmlhYmxlRXJyb3IpIHx8XG4gICAgICAgICAgICAgICAgICAgIChlcnIuY29kZSAmJiBlcnIuY29kZS50b1N0cmluZygpLnRvVXBwZXJDYXNlKCkgPT09IHJldHJpYWJsZUVycm9yKSkge1xuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhgUmV0cnlQb2xpY3k6IE5ldHdvcmsgZXJyb3IgJHtyZXRyaWFibGVFcnJvcn0gZm91bmQsIHdpbGwgcmV0cnkuYCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBJZiBhdHRlbXB0IHdhcyBhZ2FpbnN0IHRoZSBzZWNvbmRhcnkgJiBpdCByZXR1cm5lZCBhIFN0YXR1c05vdEZvdW5kICg0MDQpLCB0aGVuXG4gICAgICAgIC8vIHRoZSByZXNvdXJjZSB3YXMgbm90IGZvdW5kLiBUaGlzIG1heSBiZSBkdWUgdG8gcmVwbGljYXRpb24gZGVsYXkuIFNvLCBpbiB0aGlzXG4gICAgICAgIC8vIGNhc2UsIHdlJ2xsIG5ldmVyIHRyeSB0aGUgc2Vjb25kYXJ5IGFnYWluIGZvciB0aGlzIG9wZXJhdGlvbi5cbiAgICAgICAgaWYgKHJlc3BvbnNlIHx8IGVycikge1xuICAgICAgICAgICAgY29uc3Qgc3RhdHVzQ29kZSA9IHJlc3BvbnNlID8gcmVzcG9uc2Uuc3RhdHVzIDogZXJyID8gZXJyLnN0YXR1c0NvZGUgOiAwO1xuICAgICAgICAgICAgaWYgKCFpc1ByaW1hcnlSZXRyeSAmJiBzdGF0dXNDb2RlID09PSA0MDQpIHtcbiAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhgUmV0cnlQb2xpY3k6IFNlY29uZGFyeSBhY2Nlc3Mgd2l0aCA0MDQsIHdpbGwgcmV0cnkuYCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBTZXJ2ZXIgaW50ZXJuYWwgZXJyb3Igb3Igc2VydmVyIHRpbWVvdXRcbiAgICAgICAgICAgIGlmIChzdGF0dXNDb2RlID09PSA1MDMgfHwgc3RhdHVzQ29kZSA9PT0gNTAwKSB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYFJldHJ5UG9saWN5OiBXaWxsIHJldHJ5IGZvciBzdGF0dXMgY29kZSAke3N0YXR1c0NvZGV9LmApO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFtDb3B5IHNvdXJjZSBlcnJvciBjb2RlXSBGZWF0dXJlIGlzIHBlbmRpbmcgb24gc2VydmljZSBzaWRlLCBza2lwIHJldHJ5IG9uIGNvcHkgc291cmNlIGVycm9yIGZvciBub3cuXG4gICAgICAgIC8vIGlmIChyZXNwb25zZSkge1xuICAgICAgICAvLyAgIC8vIFJldHJ5IHNlbGVjdCBDb3B5IFNvdXJjZSBFcnJvciBDb2Rlcy5cbiAgICAgICAgLy8gICBpZiAocmVzcG9uc2U/LnN0YXR1cyA+PSA0MDApIHtcbiAgICAgICAgLy8gICAgIGNvbnN0IGNvcHlTb3VyY2VFcnJvciA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KEhlYWRlckNvbnN0YW50cy5YX01TX0NvcHlTb3VyY2VFcnJvckNvZGUpO1xuICAgICAgICAvLyAgICAgaWYgKGNvcHlTb3VyY2VFcnJvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vICAgICAgIHN3aXRjaCAoY29weVNvdXJjZUVycm9yKSB7XG4gICAgICAgIC8vICAgICAgICAgY2FzZSBcIkludGVybmFsRXJyb3JcIjpcbiAgICAgICAgLy8gICAgICAgICBjYXNlIFwiT3BlcmF0aW9uVGltZWRPdXRcIjpcbiAgICAgICAgLy8gICAgICAgICBjYXNlIFwiU2VydmVyQnVzeVwiOlxuICAgICAgICAvLyAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIC8vICAgICAgIH1cbiAgICAgICAgLy8gICAgIH1cbiAgICAgICAgLy8gICB9XG4gICAgICAgIC8vIH1cbiAgICAgICAgaWYgKChlcnIgPT09IG51bGwgfHwgZXJyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlcnIuY29kZSkgPT09IFwiUEFSU0VfRVJST1JcIiAmJiAoZXJyID09PSBudWxsIHx8IGVyciA9PT0gdm9pZCAwID8gdm9pZCAwIDogZXJyLm1lc3NhZ2Uuc3RhcnRzV2l0aChgRXJyb3IgXCJFcnJvcjogVW5jbG9zZWQgcm9vdCB0YWdgKSkpIHtcbiAgICAgICAgICAgIGxvZ2dlci5pbmZvKFwiUmV0cnlQb2xpY3k6IEluY29tcGxldGUgWE1MIHJlc3BvbnNlIGxpa2VseSBkdWUgdG8gc2VydmljZSB0aW1lb3V0LCB3aWxsIHJldHJ5LlwiKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVsYXkgYSBjYWxjdWxhdGVkIHRpbWUgYmV0d2VlbiByZXRyaWVzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGlzUHJpbWFyeVJldHJ5IC1cbiAgICAgKiBAcGFyYW0gYXR0ZW1wdCAtXG4gICAgICogQHBhcmFtIGFib3J0U2lnbmFsIC1cbiAgICAgKi9cbiAgICBhc3luYyBkZWxheShpc1ByaW1hcnlSZXRyeSwgYXR0ZW1wdCwgYWJvcnRTaWduYWwpIHtcbiAgICAgICAgbGV0IGRlbGF5VGltZUluTXMgPSAwO1xuICAgICAgICBpZiAoaXNQcmltYXJ5UmV0cnkpIHtcbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy5yZXRyeU9wdGlvbnMucmV0cnlQb2xpY3lUeXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBleHBvcnRzLlN0b3JhZ2VSZXRyeVBvbGljeVR5cGUuRVhQT05FTlRJQUw6XG4gICAgICAgICAgICAgICAgICAgIGRlbGF5VGltZUluTXMgPSBNYXRoLm1pbigoTWF0aC5wb3coMiwgYXR0ZW1wdCAtIDEpIC0gMSkgKiB0aGlzLnJldHJ5T3B0aW9ucy5yZXRyeURlbGF5SW5NcywgdGhpcy5yZXRyeU9wdGlvbnMubWF4UmV0cnlEZWxheUluTXMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIGV4cG9ydHMuU3RvcmFnZVJldHJ5UG9saWN5VHlwZS5GSVhFRDpcbiAgICAgICAgICAgICAgICAgICAgZGVsYXlUaW1lSW5NcyA9IHRoaXMucmV0cnlPcHRpb25zLnJldHJ5RGVsYXlJbk1zO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGRlbGF5VGltZUluTXMgPSBNYXRoLnJhbmRvbSgpICogMTAwMDtcbiAgICAgICAgfVxuICAgICAgICBsb2dnZXIuaW5mbyhgUmV0cnlQb2xpY3k6IERlbGF5IGZvciAke2RlbGF5VGltZUluTXN9bXNgKTtcbiAgICAgICAgcmV0dXJuIGRlbGF5KGRlbGF5VGltZUluTXMsIGFib3J0U2lnbmFsLCBSRVRSWV9BQk9SVF9FUlJPUiQxKTtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBTdG9yYWdlUmV0cnlQb2xpY3lGYWN0b3J5IGlzIGEgZmFjdG9yeSBjbGFzcyBoZWxwaW5nIGdlbmVyYXRpbmcge0BsaW5rIFN0b3JhZ2VSZXRyeVBvbGljeX0gb2JqZWN0cy5cbiAqL1xuY2xhc3MgU3RvcmFnZVJldHJ5UG9saWN5RmFjdG9yeSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBTdG9yYWdlUmV0cnlQb2xpY3lGYWN0b3J5LlxuICAgICAqIEBwYXJhbSByZXRyeU9wdGlvbnMgLVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHJldHJ5T3B0aW9ucykge1xuICAgICAgICB0aGlzLnJldHJ5T3B0aW9ucyA9IHJldHJ5T3B0aW9ucztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIFN0b3JhZ2VSZXRyeVBvbGljeSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmV4dFBvbGljeSAtXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLVxuICAgICAqL1xuICAgIGNyZWF0ZShuZXh0UG9saWN5LCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBuZXcgU3RvcmFnZVJldHJ5UG9saWN5KG5leHRQb2xpY3ksIG9wdGlvbnMsIHRoaXMucmV0cnlPcHRpb25zKTtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBDcmVkZW50aWFsIHBvbGljeSB1c2VkIHRvIHNpZ24gSFRUUChTKSByZXF1ZXN0cyBiZWZvcmUgc2VuZGluZy4gVGhpcyBpcyBhblxuICogYWJzdHJhY3QgY2xhc3MuXG4gKi9cbmNsYXNzIENyZWRlbnRpYWxQb2xpY3kgZXh0ZW5kcyBCYXNlUmVxdWVzdFBvbGljeSB7XG4gICAgLyoqXG4gICAgICogU2VuZHMgb3V0IHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVxdWVzdCAtXG4gICAgICovXG4gICAgc2VuZFJlcXVlc3QocmVxdWVzdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbmV4dFBvbGljeS5zZW5kUmVxdWVzdCh0aGlzLnNpZ25SZXF1ZXN0KHJlcXVlc3QpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2hpbGQgY2xhc3NlcyBtdXN0IGltcGxlbWVudCB0aGlzIG1ldGhvZCB3aXRoIHJlcXVlc3Qgc2lnbmluZy4gVGhpcyBtZXRob2RcbiAgICAgKiB3aWxsIGJlIGV4ZWN1dGVkIGluIHtAbGluayBzZW5kUmVxdWVzdH0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVxdWVzdCAtXG4gICAgICovXG4gICAgc2lnblJlcXVlc3QocmVxdWVzdCkge1xuICAgICAgICAvLyBDaGlsZCBjbGFzc2VzIG11c3Qgb3ZlcnJpZGUgdGhpcyBtZXRob2Qgd2l0aCByZXF1ZXN0IHNpZ25pbmcuIFRoaXMgbWV0aG9kXG4gICAgICAgIC8vIHdpbGwgYmUgZXhlY3V0ZWQgaW4gc2VuZFJlcXVlc3QoKS5cbiAgICAgICAgcmV0dXJuIHJlcXVlc3Q7XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qXG4gKiBXZSBuZWVkIHRvIGltaXRhdGUgLk5ldCBjdWx0dXJlLWF3YXJlIHNvcnRpbmcsIHdoaWNoIGlzIHVzZWQgaW4gc3RvcmFnZSBzZXJ2aWNlLlxuICogQmVsb3cgdGFibGVzIGNvbnRhaW4gc29ydC1rZXlzIGZvciBlbi1VUyBjdWx0dXJlLlxuICovXG5jb25zdCB0YWJsZV9sdjAgPSBuZXcgVWludDMyQXJyYXkoW1xuICAgIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCxcbiAgICAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHg3MWMsIDB4MCwgMHg3MWYsIDB4NzIxLFxuICAgIDB4NzIzLCAweDcyNSwgMHgwLCAweDAsIDB4MCwgMHg3MmQsIDB4ODAzLCAweDAsIDB4MCwgMHg3MzMsIDB4MCwgMHhkMDMsIDB4ZDFhLCAweGQxYywgMHhkMWUsXG4gICAgMHhkMjAsIDB4ZDIyLCAweGQyNCwgMHhkMjYsIDB4ZDI4LCAweGQyYSwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweGUwMiwgMHhlMDksIDB4ZTBhLFxuICAgIDB4ZTFhLCAweGUyMSwgMHhlMjMsIDB4ZTI1LCAweGUyYywgMHhlMzIsIDB4ZTM1LCAweGUzNiwgMHhlNDgsIDB4ZTUxLCAweGU3MCwgMHhlN2MsIDB4ZTdlLCAweGU4OSxcbiAgICAweGU4YSwgMHhlOTEsIDB4ZTk5LCAweGU5ZiwgMHhlYTIsIDB4ZWE0LCAweGVhNiwgMHhlYTcsIDB4ZWE5LCAweDAsIDB4MCwgMHgwLCAweDc0MywgMHg3NDQsIDB4NzQ4LFxuICAgIDB4ZTAyLCAweGUwOSwgMHhlMGEsIDB4ZTFhLCAweGUyMSwgMHhlMjMsIDB4ZTI1LCAweGUyYywgMHhlMzIsIDB4ZTM1LCAweGUzNiwgMHhlNDgsIDB4ZTUxLCAweGU3MCxcbiAgICAweGU3YywgMHhlN2UsIDB4ZTg5LCAweGU4YSwgMHhlOTEsIDB4ZTk5LCAweGU5ZiwgMHhlYTIsIDB4ZWE0LCAweGVhNiwgMHhlYTcsIDB4ZWE5LCAweDAsIDB4NzRjLFxuICAgIDB4MCwgMHg3NTAsIDB4MCxcbl0pO1xuY29uc3QgdGFibGVfbHYyID0gbmV3IFVpbnQzMkFycmF5KFtcbiAgICAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsXG4gICAgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLFxuICAgIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCxcbiAgICAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgxMiwgMHgxMiwgMHgxMiwgMHgxMiwgMHgxMiwgMHgxMiwgMHgxMiwgMHgxMiwgMHgxMixcbiAgICAweDEyLCAweDEyLCAweDEyLCAweDEyLCAweDEyLCAweDEyLCAweDEyLCAweDEyLCAweDEyLCAweDEyLCAweDEyLCAweDEyLCAweDEyLCAweDEyLCAweDEyLCAweDEyLFxuICAgIDB4MTIsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsXG4gICAgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLFxuXSk7XG5jb25zdCB0YWJsZV9sdjQgPSBuZXcgVWludDMyQXJyYXkoW1xuICAgIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCxcbiAgICAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsXG4gICAgMHgwLCAweDgwMTIsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDgyMTIsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCxcbiAgICAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsXG4gICAgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLFxuICAgIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCxcbiAgICAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLFxuXSk7XG5mdW5jdGlvbiBjb21wYXJlSGVhZGVyKGxocywgcmhzKSB7XG4gICAgaWYgKGlzTGVzc1RoYW4obGhzLCByaHMpKVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgcmV0dXJuIDE7XG59XG5mdW5jdGlvbiBpc0xlc3NUaGFuKGxocywgcmhzKSB7XG4gICAgY29uc3QgdGFibGVzID0gW3RhYmxlX2x2MCwgdGFibGVfbHYyLCB0YWJsZV9sdjRdO1xuICAgIGxldCBjdXJyX2xldmVsID0gMDtcbiAgICBsZXQgaSA9IDA7XG4gICAgbGV0IGogPSAwO1xuICAgIHdoaWxlIChjdXJyX2xldmVsIDwgdGFibGVzLmxlbmd0aCkge1xuICAgICAgICBpZiAoY3Vycl9sZXZlbCA9PT0gdGFibGVzLmxlbmd0aCAtIDEgJiYgaSAhPT0gaikge1xuICAgICAgICAgICAgcmV0dXJuIGkgPiBqO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHdlaWdodDEgPSBpIDwgbGhzLmxlbmd0aCA/IHRhYmxlc1tjdXJyX2xldmVsXVtsaHNbaV0uY2hhckNvZGVBdCgwKV0gOiAweDE7XG4gICAgICAgIGNvbnN0IHdlaWdodDIgPSBqIDwgcmhzLmxlbmd0aCA/IHRhYmxlc1tjdXJyX2xldmVsXVtyaHNbal0uY2hhckNvZGVBdCgwKV0gOiAweDE7XG4gICAgICAgIGlmICh3ZWlnaHQxID09PSAweDEgJiYgd2VpZ2h0MiA9PT0gMHgxKSB7XG4gICAgICAgICAgICBpID0gMDtcbiAgICAgICAgICAgIGogPSAwO1xuICAgICAgICAgICAgKytjdXJyX2xldmVsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHdlaWdodDEgPT09IHdlaWdodDIpIHtcbiAgICAgICAgICAgICsraTtcbiAgICAgICAgICAgICsrajtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh3ZWlnaHQxID09PSAwKSB7XG4gICAgICAgICAgICArK2k7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAod2VpZ2h0MiA9PT0gMCkge1xuICAgICAgICAgICAgKytqO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHdlaWdodDEgPCB3ZWlnaHQyO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsUG9saWN5IGlzIGEgcG9saWN5IHVzZWQgdG8gc2lnbiBIVFRQIHJlcXVlc3Qgd2l0aCBhIHNoYXJlZCBrZXkuXG4gKi9cbmNsYXNzIFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsUG9saWN5IGV4dGVuZHMgQ3JlZGVudGlhbFBvbGljeSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbFBvbGljeS5cbiAgICAgKiBAcGFyYW0gbmV4dFBvbGljeSAtXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLVxuICAgICAqIEBwYXJhbSBmYWN0b3J5IC1cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihuZXh0UG9saWN5LCBvcHRpb25zLCBmYWN0b3J5KSB7XG4gICAgICAgIHN1cGVyKG5leHRQb2xpY3ksIG9wdGlvbnMpO1xuICAgICAgICB0aGlzLmZhY3RvcnkgPSBmYWN0b3J5O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTaWducyByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlcXVlc3QgLVxuICAgICAqL1xuICAgIHNpZ25SZXF1ZXN0KHJlcXVlc3QpIHtcbiAgICAgICAgcmVxdWVzdC5oZWFkZXJzLnNldChIZWFkZXJDb25zdGFudHMuWF9NU19EQVRFLCBuZXcgRGF0ZSgpLnRvVVRDU3RyaW5nKCkpO1xuICAgICAgICBpZiAocmVxdWVzdC5ib2R5ICYmXG4gICAgICAgICAgICAodHlwZW9mIHJlcXVlc3QuYm9keSA9PT0gXCJzdHJpbmdcIiB8fCByZXF1ZXN0LmJvZHkgIT09IHVuZGVmaW5lZCkgJiZcbiAgICAgICAgICAgIHJlcXVlc3QuYm9keS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXF1ZXN0LmhlYWRlcnMuc2V0KEhlYWRlckNvbnN0YW50cy5DT05URU5UX0xFTkdUSCwgQnVmZmVyLmJ5dGVMZW5ndGgocmVxdWVzdC5ib2R5KSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RyaW5nVG9TaWduID0gW1xuICAgICAgICAgICAgcmVxdWVzdC5tZXRob2QudG9VcHBlckNhc2UoKSxcbiAgICAgICAgICAgIHRoaXMuZ2V0SGVhZGVyVmFsdWVUb1NpZ24ocmVxdWVzdCwgSGVhZGVyQ29uc3RhbnRzLkNPTlRFTlRfTEFOR1VBR0UpLFxuICAgICAgICAgICAgdGhpcy5nZXRIZWFkZXJWYWx1ZVRvU2lnbihyZXF1ZXN0LCBIZWFkZXJDb25zdGFudHMuQ09OVEVOVF9FTkNPRElORyksXG4gICAgICAgICAgICB0aGlzLmdldEhlYWRlclZhbHVlVG9TaWduKHJlcXVlc3QsIEhlYWRlckNvbnN0YW50cy5DT05URU5UX0xFTkdUSCksXG4gICAgICAgICAgICB0aGlzLmdldEhlYWRlclZhbHVlVG9TaWduKHJlcXVlc3QsIEhlYWRlckNvbnN0YW50cy5DT05URU5UX01ENSksXG4gICAgICAgICAgICB0aGlzLmdldEhlYWRlclZhbHVlVG9TaWduKHJlcXVlc3QsIEhlYWRlckNvbnN0YW50cy5DT05URU5UX1RZUEUpLFxuICAgICAgICAgICAgdGhpcy5nZXRIZWFkZXJWYWx1ZVRvU2lnbihyZXF1ZXN0LCBIZWFkZXJDb25zdGFudHMuREFURSksXG4gICAgICAgICAgICB0aGlzLmdldEhlYWRlclZhbHVlVG9TaWduKHJlcXVlc3QsIEhlYWRlckNvbnN0YW50cy5JRl9NT0RJRklFRF9TSU5DRSksXG4gICAgICAgICAgICB0aGlzLmdldEhlYWRlclZhbHVlVG9TaWduKHJlcXVlc3QsIEhlYWRlckNvbnN0YW50cy5JRl9NQVRDSCksXG4gICAgICAgICAgICB0aGlzLmdldEhlYWRlclZhbHVlVG9TaWduKHJlcXVlc3QsIEhlYWRlckNvbnN0YW50cy5JRl9OT05FX01BVENIKSxcbiAgICAgICAgICAgIHRoaXMuZ2V0SGVhZGVyVmFsdWVUb1NpZ24ocmVxdWVzdCwgSGVhZGVyQ29uc3RhbnRzLklGX1VOTU9ESUZJRURfU0lOQ0UpLFxuICAgICAgICAgICAgdGhpcy5nZXRIZWFkZXJWYWx1ZVRvU2lnbihyZXF1ZXN0LCBIZWFkZXJDb25zdGFudHMuUkFOR0UpLFxuICAgICAgICBdLmpvaW4oXCJcXG5cIikgK1xuICAgICAgICAgICAgXCJcXG5cIiArXG4gICAgICAgICAgICB0aGlzLmdldENhbm9uaWNhbGl6ZWRIZWFkZXJzU3RyaW5nKHJlcXVlc3QpICtcbiAgICAgICAgICAgIHRoaXMuZ2V0Q2Fub25pY2FsaXplZFJlc291cmNlU3RyaW5nKHJlcXVlc3QpO1xuICAgICAgICBjb25zdCBzaWduYXR1cmUgPSB0aGlzLmZhY3RvcnkuY29tcHV0ZUhNQUNTSEEyNTYoc3RyaW5nVG9TaWduKTtcbiAgICAgICAgcmVxdWVzdC5oZWFkZXJzLnNldChIZWFkZXJDb25zdGFudHMuQVVUSE9SSVpBVElPTiwgYFNoYXJlZEtleSAke3RoaXMuZmFjdG9yeS5hY2NvdW50TmFtZX06JHtzaWduYXR1cmV9YCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGBbVVJMXToke3JlcXVlc3QudXJsfWApO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhgW0hFQURFUlNdOiR7cmVxdWVzdC5oZWFkZXJzLnRvU3RyaW5nKCl9YCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGBbU1RSSU5HIFRPIFNJR05dOiR7SlNPTi5zdHJpbmdpZnkoc3RyaW5nVG9TaWduKX1gKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYFtLRVldOiAke3JlcXVlc3QuaGVhZGVycy5nZXQoSGVhZGVyQ29uc3RhbnRzLkFVVEhPUklaQVRJT04pfWApO1xuICAgICAgICByZXR1cm4gcmVxdWVzdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0cmlldmUgaGVhZGVyIHZhbHVlIGFjY29yZGluZyB0byBzaGFyZWQga2V5IHNpZ24gcnVsZXMuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvYXV0aGVudGljYXRlLXdpdGgtc2hhcmVkLWtleVxuICAgICAqXG4gICAgICogQHBhcmFtIHJlcXVlc3QgLVxuICAgICAqIEBwYXJhbSBoZWFkZXJOYW1lIC1cbiAgICAgKi9cbiAgICBnZXRIZWFkZXJWYWx1ZVRvU2lnbihyZXF1ZXN0LCBoZWFkZXJOYW1lKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gcmVxdWVzdC5oZWFkZXJzLmdldChoZWFkZXJOYW1lKTtcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgLy8gV2hlbiB1c2luZyB2ZXJzaW9uIDIwMTUtMDItMjEgb3IgbGF0ZXIsIGlmIENvbnRlbnQtTGVuZ3RoIGlzIHplcm8sIHRoZW5cbiAgICAgICAgLy8gc2V0IHRoZSBDb250ZW50LUxlbmd0aCBwYXJ0IG9mIHRoZSBTdHJpbmdUb1NpZ24gdG8gYW4gZW1wdHkgc3RyaW5nLlxuICAgICAgICAvLyBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvYXV0aGVudGljYXRlLXdpdGgtc2hhcmVkLWtleVxuICAgICAgICBpZiAoaGVhZGVyTmFtZSA9PT0gSGVhZGVyQ29uc3RhbnRzLkNPTlRFTlRfTEVOR1RIICYmIHZhbHVlID09PSBcIjBcIikge1xuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUbyBjb25zdHJ1Y3QgdGhlIENhbm9uaWNhbGl6ZWRIZWFkZXJzIHBvcnRpb24gb2YgdGhlIHNpZ25hdHVyZSBzdHJpbmcsIGZvbGxvdyB0aGVzZSBzdGVwczpcbiAgICAgKiAxLiBSZXRyaWV2ZSBhbGwgaGVhZGVycyBmb3IgdGhlIHJlc291cmNlIHRoYXQgYmVnaW4gd2l0aCB4LW1zLSwgaW5jbHVkaW5nIHRoZSB4LW1zLWRhdGUgaGVhZGVyLlxuICAgICAqIDIuIENvbnZlcnQgZWFjaCBIVFRQIGhlYWRlciBuYW1lIHRvIGxvd2VyY2FzZS5cbiAgICAgKiAzLiBTb3J0IHRoZSBoZWFkZXJzIGxleGljb2dyYXBoaWNhbGx5IGJ5IGhlYWRlciBuYW1lLCBpbiBhc2NlbmRpbmcgb3JkZXIuXG4gICAgICogICAgRWFjaCBoZWFkZXIgbWF5IGFwcGVhciBvbmx5IG9uY2UgaW4gdGhlIHN0cmluZy5cbiAgICAgKiA0LiBSZXBsYWNlIGFueSBsaW5lYXIgd2hpdGVzcGFjZSBpbiB0aGUgaGVhZGVyIHZhbHVlIHdpdGggYSBzaW5nbGUgc3BhY2UuXG4gICAgICogNS4gVHJpbSBhbnkgd2hpdGVzcGFjZSBhcm91bmQgdGhlIGNvbG9uIGluIHRoZSBoZWFkZXIuXG4gICAgICogNi4gRmluYWxseSwgYXBwZW5kIGEgbmV3LWxpbmUgY2hhcmFjdGVyIHRvIGVhY2ggY2Fub25pY2FsaXplZCBoZWFkZXIgaW4gdGhlIHJlc3VsdGluZyBsaXN0LlxuICAgICAqICAgIENvbnN0cnVjdCB0aGUgQ2Fub25pY2FsaXplZEhlYWRlcnMgc3RyaW5nIGJ5IGNvbmNhdGVuYXRpbmcgYWxsIGhlYWRlcnMgaW4gdGhpcyBsaXN0IGludG8gYSBzaW5nbGUgc3RyaW5nLlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlcXVlc3QgLVxuICAgICAqL1xuICAgIGdldENhbm9uaWNhbGl6ZWRIZWFkZXJzU3RyaW5nKHJlcXVlc3QpIHtcbiAgICAgICAgbGV0IGhlYWRlcnNBcnJheSA9IHJlcXVlc3QuaGVhZGVycy5oZWFkZXJzQXJyYXkoKS5maWx0ZXIoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUubmFtZS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoSGVhZGVyQ29uc3RhbnRzLlBSRUZJWF9GT1JfU1RPUkFHRSk7XG4gICAgICAgIH0pO1xuICAgICAgICBoZWFkZXJzQXJyYXkuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmVIZWFkZXIoYS5uYW1lLnRvTG93ZXJDYXNlKCksIGIubmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIFJlbW92ZSBkdXBsaWNhdGUgaGVhZGVyc1xuICAgICAgICBoZWFkZXJzQXJyYXkgPSBoZWFkZXJzQXJyYXkuZmlsdGVyKCh2YWx1ZSwgaW5kZXgsIGFycmF5KSA9PiB7XG4gICAgICAgICAgICBpZiAoaW5kZXggPiAwICYmIHZhbHVlLm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gYXJyYXlbaW5kZXggLSAxXS5uYW1lLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCBjYW5vbmljYWxpemVkSGVhZGVyc1N0cmluZ1RvU2lnbiA9IFwiXCI7XG4gICAgICAgIGhlYWRlcnNBcnJheS5mb3JFYWNoKChoZWFkZXIpID0+IHtcbiAgICAgICAgICAgIGNhbm9uaWNhbGl6ZWRIZWFkZXJzU3RyaW5nVG9TaWduICs9IGAke2hlYWRlci5uYW1lXG4gICAgICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgICAudHJpbVJpZ2h0KCl9OiR7aGVhZGVyLnZhbHVlLnRyaW1MZWZ0KCl9XFxuYDtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBjYW5vbmljYWxpemVkSGVhZGVyc1N0cmluZ1RvU2lnbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHRoZSB3ZWJSZXNvdXJjZSBjYW5vbmljYWxpemVkIHJlc291cmNlIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByZXF1ZXN0IC1cbiAgICAgKi9cbiAgICBnZXRDYW5vbmljYWxpemVkUmVzb3VyY2VTdHJpbmcocmVxdWVzdCkge1xuICAgICAgICBjb25zdCBwYXRoID0gZ2V0VVJMUGF0aChyZXF1ZXN0LnVybCkgfHwgXCIvXCI7XG4gICAgICAgIGxldCBjYW5vbmljYWxpemVkUmVzb3VyY2VTdHJpbmcgPSBcIlwiO1xuICAgICAgICBjYW5vbmljYWxpemVkUmVzb3VyY2VTdHJpbmcgKz0gYC8ke3RoaXMuZmFjdG9yeS5hY2NvdW50TmFtZX0ke3BhdGh9YDtcbiAgICAgICAgY29uc3QgcXVlcmllcyA9IGdldFVSTFF1ZXJpZXMocmVxdWVzdC51cmwpO1xuICAgICAgICBjb25zdCBsb3dlcmNhc2VRdWVyaWVzID0ge307XG4gICAgICAgIGlmIChxdWVyaWVzKSB7XG4gICAgICAgICAgICBjb25zdCBxdWVyeUtleXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHF1ZXJpZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHF1ZXJpZXMsIGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbG93ZXJjYXNlS2V5ID0ga2V5LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgICAgIGxvd2VyY2FzZVF1ZXJpZXNbbG93ZXJjYXNlS2V5XSA9IHF1ZXJpZXNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgcXVlcnlLZXlzLnB1c2gobG93ZXJjYXNlS2V5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxdWVyeUtleXMuc29ydCgpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgcXVlcnlLZXlzKSB7XG4gICAgICAgICAgICAgICAgY2Fub25pY2FsaXplZFJlc291cmNlU3RyaW5nICs9IGBcXG4ke2tleX06JHtkZWNvZGVVUklDb21wb25lbnQobG93ZXJjYXNlUXVlcmllc1trZXldKX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYW5vbmljYWxpemVkUmVzb3VyY2VTdHJpbmc7XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogQ3JlZGVudGlhbCBpcyBhbiBhYnN0cmFjdCBjbGFzcyBmb3IgQXp1cmUgU3RvcmFnZSBIVFRQIHJlcXVlc3RzIHNpZ25pbmcuIFRoaXNcbiAqIGNsYXNzIHdpbGwgaG9zdCBhbiBjcmVkZW50aWFsUG9saWN5Q3JlYXRvciBmYWN0b3J5IHdoaWNoIGdlbmVyYXRlcyBDcmVkZW50aWFsUG9saWN5LlxuICovXG5jbGFzcyBDcmVkZW50aWFsIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgUmVxdWVzdFBvbGljeSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gX25leHRQb2xpY3kgLVxuICAgICAqIEBwYXJhbSBfb3B0aW9ucyAtXG4gICAgICovXG4gICAgY3JlYXRlKF9uZXh0UG9saWN5LCBfb3B0aW9ucykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgc2hvdWxkIGJlIGltcGxlbWVudGVkIGluIGNoaWxkcmVuIGNsYXNzZXMuXCIpO1xuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIE9OTFkgQVZBSUxBQkxFIElOIE5PREUuSlMgUlVOVElNRS5cbiAqXG4gKiBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbCBmb3IgYWNjb3VudCBrZXkgYXV0aG9yaXphdGlvbiBvZiBBenVyZSBTdG9yYWdlIHNlcnZpY2UuXG4gKi9cbmNsYXNzIFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsIGV4dGVuZHMgQ3JlZGVudGlhbCB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbC5cbiAgICAgKiBAcGFyYW0gYWNjb3VudE5hbWUgLVxuICAgICAqIEBwYXJhbSBhY2NvdW50S2V5IC1cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihhY2NvdW50TmFtZSwgYWNjb3VudEtleSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmFjY291bnROYW1lID0gYWNjb3VudE5hbWU7XG4gICAgICAgIHRoaXMuYWNjb3VudEtleSA9IEJ1ZmZlci5mcm9tKGFjY291bnRLZXksIFwiYmFzZTY0XCIpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWxQb2xpY3kgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIG5leHRQb2xpY3kgLVxuICAgICAqIEBwYXJhbSBvcHRpb25zIC1cbiAgICAgKi9cbiAgICBjcmVhdGUobmV4dFBvbGljeSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gbmV3IFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsUG9saWN5KG5leHRQb2xpY3ksIG9wdGlvbnMsIHRoaXMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZW5lcmF0ZXMgYSBoYXNoIHNpZ25hdHVyZSBmb3IgYW4gSFRUUCByZXF1ZXN0IG9yIGZvciBhIFNBUy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzdHJpbmdUb1NpZ24gLVxuICAgICAqL1xuICAgIGNvbXB1dGVITUFDU0hBMjU2KHN0cmluZ1RvU2lnbikge1xuICAgICAgICByZXR1cm4gY3J5cHRvLmNyZWF0ZUhtYWMoXCJzaGEyNTZcIiwgdGhpcy5hY2NvdW50S2V5KS51cGRhdGUoc3RyaW5nVG9TaWduLCBcInV0ZjhcIikuZGlnZXN0KFwiYmFzZTY0XCIpO1xuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIEFub255bW91c0NyZWRlbnRpYWxQb2xpY3kgaXMgdXNlZCB3aXRoIEhUVFAoUykgcmVxdWVzdHMgdGhhdCByZWFkIHB1YmxpYyByZXNvdXJjZXNcbiAqIG9yIGZvciB1c2Ugd2l0aCBTaGFyZWQgQWNjZXNzIFNpZ25hdHVyZXMgKFNBUykuXG4gKi9cbmNsYXNzIEFub255bW91c0NyZWRlbnRpYWxQb2xpY3kgZXh0ZW5kcyBDcmVkZW50aWFsUG9saWN5IHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIEFub255bW91c0NyZWRlbnRpYWxQb2xpY3kuXG4gICAgICogQHBhcmFtIG5leHRQb2xpY3kgLVxuICAgICAqIEBwYXJhbSBvcHRpb25zIC1cbiAgICAgKi9cbiAgICAvLyBUaGUgYmFzZSBjbGFzcyBoYXMgYSBwcm90ZWN0ZWQgY29uc3RydWN0b3IuIEFkZGluZyBhIHB1YmxpYyBvbmUgdG8gZW5hYmxlIGNvbnN0cnVjdGluZyBvZiB0aGlzIGNsYXNzLlxuICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlbGVzcy1jb25zdHJ1Y3RvciovXG4gICAgY29uc3RydWN0b3IobmV4dFBvbGljeSwgb3B0aW9ucykge1xuICAgICAgICBzdXBlcihuZXh0UG9saWN5LCBvcHRpb25zKTtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBBbm9ueW1vdXNDcmVkZW50aWFsIHByb3ZpZGVzIGEgY3JlZGVudGlhbFBvbGljeUNyZWF0b3IgbWVtYmVyIHVzZWQgdG8gY3JlYXRlXG4gKiBBbm9ueW1vdXNDcmVkZW50aWFsUG9saWN5IG9iamVjdHMuIEFub255bW91c0NyZWRlbnRpYWxQb2xpY3kgaXMgdXNlZCB3aXRoXG4gKiBIVFRQKFMpIHJlcXVlc3RzIHRoYXQgcmVhZCBwdWJsaWMgcmVzb3VyY2VzIG9yIGZvciB1c2Ugd2l0aCBTaGFyZWQgQWNjZXNzXG4gKiBTaWduYXR1cmVzIChTQVMpLlxuICovXG5jbGFzcyBBbm9ueW1vdXNDcmVkZW50aWFsIGV4dGVuZHMgQ3JlZGVudGlhbCB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiB7QGxpbmsgQW5vbnltb3VzQ3JlZGVudGlhbFBvbGljeX0gb2JqZWN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIG5leHRQb2xpY3kgLVxuICAgICAqIEBwYXJhbSBvcHRpb25zIC1cbiAgICAgKi9cbiAgICBjcmVhdGUobmV4dFBvbGljeSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gbmV3IEFub255bW91c0NyZWRlbnRpYWxQb2xpY3kobmV4dFBvbGljeSwgb3B0aW9ucyk7XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbmxldCBfZGVmYXVsdEh0dHBDbGllbnQ7XG5mdW5jdGlvbiBnZXRDYWNoZWREZWZhdWx0SHR0cENsaWVudCgpIHtcbiAgICBpZiAoIV9kZWZhdWx0SHR0cENsaWVudCkge1xuICAgICAgICBfZGVmYXVsdEh0dHBDbGllbnQgPSBjb3JlUmVzdFBpcGVsaW5lLmNyZWF0ZURlZmF1bHRIdHRwQ2xpZW50KCk7XG4gICAgfVxuICAgIHJldHVybiBfZGVmYXVsdEh0dHBDbGllbnQ7XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBUaGUgcHJvZ3JhbW1hdGljIGlkZW50aWZpZXIgb2YgdGhlIFN0b3JhZ2VCcm93c2VyUG9saWN5LlxuICovXG5jb25zdCBzdG9yYWdlQnJvd3NlclBvbGljeU5hbWUgPSBcInN0b3JhZ2VCcm93c2VyUG9saWN5XCI7XG4vKipcbiAqIHN0b3JhZ2VCcm93c2VyUG9saWN5IGlzIGEgcG9saWN5IHVzZWQgdG8gcHJldmVudCBicm93c2VycyBmcm9tIGNhY2hpbmcgcmVxdWVzdHNcbiAqIGFuZCB0byByZW1vdmUgY29va2llcyBhbmQgZXhwbGljaXQgY29udGVudC1sZW5ndGggaGVhZGVycy5cbiAqL1xuZnVuY3Rpb24gc3RvcmFnZUJyb3dzZXJQb2xpY3koKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogc3RvcmFnZUJyb3dzZXJQb2xpY3lOYW1lLFxuICAgICAgICBhc3luYyBzZW5kUmVxdWVzdChyZXF1ZXN0LCBuZXh0KSB7XG4gICAgICAgICAgICBpZiAoY29yZVV0aWwuaXNOb2RlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5leHQocmVxdWVzdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVxdWVzdC5tZXRob2QgPT09IFwiR0VUXCIgfHwgcmVxdWVzdC5tZXRob2QgPT09IFwiSEVBRFwiKSB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdC51cmwgPSBzZXRVUkxQYXJhbWV0ZXIocmVxdWVzdC51cmwsIFVSTENvbnN0YW50cy5QYXJhbWV0ZXJzLkZPUkNFX0JST1dTRVJfTk9fQ0FDSEUsIG5ldyBEYXRlKCkuZ2V0VGltZSgpLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVxdWVzdC5oZWFkZXJzLmRlbGV0ZShIZWFkZXJDb25zdGFudHMuQ09PS0lFKTtcbiAgICAgICAgICAgIC8vIEFjY29yZGluZyB0byBYSFIgc3RhbmRhcmRzLCBjb250ZW50LWxlbmd0aCBzaG91bGQgYmUgZnVsbHkgY29udHJvbGxlZCBieSBicm93c2Vyc1xuICAgICAgICAgICAgcmVxdWVzdC5oZWFkZXJzLmRlbGV0ZShIZWFkZXJDb25zdGFudHMuQ09OVEVOVF9MRU5HVEgpO1xuICAgICAgICAgICAgcmV0dXJuIG5leHQocmVxdWVzdCk7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIE5hbWUgb2YgdGhlIHtAbGluayBzdG9yYWdlUmV0cnlQb2xpY3l9XG4gKi9cbmNvbnN0IHN0b3JhZ2VSZXRyeVBvbGljeU5hbWUgPSBcInN0b3JhZ2VSZXRyeVBvbGljeVwiO1xuLyoqXG4gKiBSZXRyeVBvbGljeSB0eXBlcy5cbiAqL1xudmFyIFN0b3JhZ2VSZXRyeVBvbGljeVR5cGU7XG4oZnVuY3Rpb24gKFN0b3JhZ2VSZXRyeVBvbGljeVR5cGUpIHtcbiAgICAvKipcbiAgICAgKiBFeHBvbmVudGlhbCByZXRyeS4gUmV0cnkgdGltZSBkZWxheSBncm93cyBleHBvbmVudGlhbGx5LlxuICAgICAqL1xuICAgIFN0b3JhZ2VSZXRyeVBvbGljeVR5cGVbU3RvcmFnZVJldHJ5UG9saWN5VHlwZVtcIkVYUE9ORU5USUFMXCJdID0gMF0gPSBcIkVYUE9ORU5USUFMXCI7XG4gICAgLyoqXG4gICAgICogTGluZWFyIHJldHJ5LiBSZXRyeSB0aW1lIGRlbGF5IGdyb3dzIGxpbmVhcmx5LlxuICAgICAqL1xuICAgIFN0b3JhZ2VSZXRyeVBvbGljeVR5cGVbU3RvcmFnZVJldHJ5UG9saWN5VHlwZVtcIkZJWEVEXCJdID0gMV0gPSBcIkZJWEVEXCI7XG59KShTdG9yYWdlUmV0cnlQb2xpY3lUeXBlIHx8IChTdG9yYWdlUmV0cnlQb2xpY3lUeXBlID0ge30pKTtcbi8vIERlZmF1bHQgdmFsdWVzIG9mIFN0b3JhZ2VSZXRyeU9wdGlvbnNcbmNvbnN0IERFRkFVTFRfUkVUUllfT1BUSU9OUyA9IHtcbiAgICBtYXhSZXRyeURlbGF5SW5NczogMTIwICogMTAwMCxcbiAgICBtYXhUcmllczogNCxcbiAgICByZXRyeURlbGF5SW5NczogNCAqIDEwMDAsXG4gICAgcmV0cnlQb2xpY3lUeXBlOiBTdG9yYWdlUmV0cnlQb2xpY3lUeXBlLkVYUE9ORU5USUFMLFxuICAgIHNlY29uZGFyeUhvc3Q6IFwiXCIsXG4gICAgdHJ5VGltZW91dEluTXM6IHVuZGVmaW5lZCwgLy8gVXNlIHNlcnZlciBzaWRlIGRlZmF1bHQgdGltZW91dCBzdHJhdGVneVxufTtcbmNvbnN0IHJldHJpYWJsZUVycm9ycyA9IFtcbiAgICBcIkVUSU1FRE9VVFwiLFxuICAgIFwiRVNPQ0tFVFRJTUVET1VUXCIsXG4gICAgXCJFQ09OTlJFRlVTRURcIixcbiAgICBcIkVDT05OUkVTRVRcIixcbiAgICBcIkVOT0VOVFwiLFxuICAgIFwiRU5PVEZPVU5EXCIsXG4gICAgXCJUSU1FT1VUXCIsXG4gICAgXCJFUElQRVwiLFxuICAgIFwiUkVRVUVTVF9TRU5EX0VSUk9SXCIsXG5dO1xuY29uc3QgUkVUUllfQUJPUlRfRVJST1IgPSBuZXcgYWJvcnRDb250cm9sbGVyLkFib3J0RXJyb3IoXCJUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLlwiKTtcbi8qKlxuICogUmV0cnkgcG9saWN5IHdpdGggZXhwb25lbnRpYWwgcmV0cnkgYW5kIGxpbmVhciByZXRyeSBpbXBsZW1lbnRlZC5cbiAqL1xuZnVuY3Rpb24gc3RvcmFnZVJldHJ5UG9saWN5KG9wdGlvbnMgPSB7fSkge1xuICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2UsIF9mO1xuICAgIGNvbnN0IHJldHJ5UG9saWN5VHlwZSA9IChfYSA9IG9wdGlvbnMucmV0cnlQb2xpY3lUeXBlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBERUZBVUxUX1JFVFJZX09QVElPTlMucmV0cnlQb2xpY3lUeXBlO1xuICAgIGNvbnN0IG1heFRyaWVzID0gKF9iID0gb3B0aW9ucy5tYXhUcmllcykgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogREVGQVVMVF9SRVRSWV9PUFRJT05TLm1heFRyaWVzO1xuICAgIGNvbnN0IHJldHJ5RGVsYXlJbk1zID0gKF9jID0gb3B0aW9ucy5yZXRyeURlbGF5SW5NcykgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogREVGQVVMVF9SRVRSWV9PUFRJT05TLnJldHJ5RGVsYXlJbk1zO1xuICAgIGNvbnN0IG1heFJldHJ5RGVsYXlJbk1zID0gKF9kID0gb3B0aW9ucy5tYXhSZXRyeURlbGF5SW5NcykgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDogREVGQVVMVF9SRVRSWV9PUFRJT05TLm1heFJldHJ5RGVsYXlJbk1zO1xuICAgIGNvbnN0IHNlY29uZGFyeUhvc3QgPSAoX2UgPSBvcHRpb25zLnNlY29uZGFyeUhvc3QpICE9PSBudWxsICYmIF9lICE9PSB2b2lkIDAgPyBfZSA6IERFRkFVTFRfUkVUUllfT1BUSU9OUy5zZWNvbmRhcnlIb3N0O1xuICAgIGNvbnN0IHRyeVRpbWVvdXRJbk1zID0gKF9mID0gb3B0aW9ucy50cnlUaW1lb3V0SW5NcykgIT09IG51bGwgJiYgX2YgIT09IHZvaWQgMCA/IF9mIDogREVGQVVMVF9SRVRSWV9PUFRJT05TLnRyeVRpbWVvdXRJbk1zO1xuICAgIGZ1bmN0aW9uIHNob3VsZFJldHJ5KHsgaXNQcmltYXJ5UmV0cnksIGF0dGVtcHQsIHJlc3BvbnNlLCBlcnJvciwgfSkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBpZiAoYXR0ZW1wdCA+PSBtYXhUcmllcykge1xuICAgICAgICAgICAgbG9nZ2VyLmluZm8oYFJldHJ5UG9saWN5OiBBdHRlbXB0KHMpICR7YXR0ZW1wdH0gPj0gbWF4VHJpZXMgJHttYXhUcmllc30sIG5vIGZ1cnRoZXIgdHJ5LmApO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgZm9yIChjb25zdCByZXRyaWFibGVFcnJvciBvZiByZXRyaWFibGVFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IubmFtZS50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKHJldHJpYWJsZUVycm9yKSB8fFxuICAgICAgICAgICAgICAgICAgICBlcnJvci5tZXNzYWdlLnRvVXBwZXJDYXNlKCkuaW5jbHVkZXMocmV0cmlhYmxlRXJyb3IpIHx8XG4gICAgICAgICAgICAgICAgICAgIChlcnJvci5jb2RlICYmIGVycm9yLmNvZGUudG9TdHJpbmcoKS50b1VwcGVyQ2FzZSgpID09PSByZXRyaWFibGVFcnJvcikpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYFJldHJ5UG9saWN5OiBOZXR3b3JrIGVycm9yICR7cmV0cmlhYmxlRXJyb3J9IGZvdW5kLCB3aWxsIHJldHJ5LmApO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoKGVycm9yID09PSBudWxsIHx8IGVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlcnJvci5jb2RlKSA9PT0gXCJQQVJTRV9FUlJPUlwiICYmXG4gICAgICAgICAgICAgICAgKGVycm9yID09PSBudWxsIHx8IGVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlcnJvci5tZXNzYWdlLnN0YXJ0c1dpdGgoYEVycm9yIFwiRXJyb3I6IFVuY2xvc2VkIHJvb3QgdGFnYCkpKSB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oXCJSZXRyeVBvbGljeTogSW5jb21wbGV0ZSBYTUwgcmVzcG9uc2UgbGlrZWx5IGR1ZSB0byBzZXJ2aWNlIHRpbWVvdXQsIHdpbGwgcmV0cnkuXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIElmIGF0dGVtcHQgd2FzIGFnYWluc3QgdGhlIHNlY29uZGFyeSAmIGl0IHJldHVybmVkIGEgU3RhdHVzTm90Rm91bmQgKDQwNCksIHRoZW5cbiAgICAgICAgLy8gdGhlIHJlc291cmNlIHdhcyBub3QgZm91bmQuIFRoaXMgbWF5IGJlIGR1ZSB0byByZXBsaWNhdGlvbiBkZWxheS4gU28sIGluIHRoaXNcbiAgICAgICAgLy8gY2FzZSwgd2UnbGwgbmV2ZXIgdHJ5IHRoZSBzZWNvbmRhcnkgYWdhaW4gZm9yIHRoaXMgb3BlcmF0aW9uLlxuICAgICAgICBpZiAocmVzcG9uc2UgfHwgZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXR1c0NvZGUgPSAoX2IgPSAoX2EgPSByZXNwb25zZSA9PT0gbnVsbCB8fCByZXNwb25zZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogcmVzcG9uc2Uuc3RhdHVzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBlcnJvciA9PT0gbnVsbCB8fCBlcnJvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogZXJyb3Iuc3RhdHVzQ29kZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogMDtcbiAgICAgICAgICAgIGlmICghaXNQcmltYXJ5UmV0cnkgJiYgc3RhdHVzQ29kZSA9PT0gNDA0KSB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYFJldHJ5UG9saWN5OiBTZWNvbmRhcnkgYWNjZXNzIHdpdGggNDA0LCB3aWxsIHJldHJ5LmApO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU2VydmVyIGludGVybmFsIGVycm9yIG9yIHNlcnZlciB0aW1lb3V0XG4gICAgICAgICAgICBpZiAoc3RhdHVzQ29kZSA9PT0gNTAzIHx8IHN0YXR1c0NvZGUgPT09IDUwMCkge1xuICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBSZXRyeVBvbGljeTogV2lsbCByZXRyeSBmb3Igc3RhdHVzIGNvZGUgJHtzdGF0dXNDb2RlfS5gKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBbQ29weSBzb3VyY2UgZXJyb3IgY29kZV0gRmVhdHVyZSBpcyBwZW5kaW5nIG9uIHNlcnZpY2Ugc2lkZSwgc2tpcCByZXRyeSBvbiBjb3B5IHNvdXJjZSBlcnJvciBmb3Igbm93LlxuICAgICAgICAvLyBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgLy8gICAvLyBSZXRyeSBzZWxlY3QgQ29weSBTb3VyY2UgRXJyb3IgQ29kZXMuXG4gICAgICAgIC8vICAgaWYgKHJlc3BvbnNlPy5zdGF0dXMgPj0gNDAwKSB7XG4gICAgICAgIC8vICAgICBjb25zdCBjb3B5U291cmNlRXJyb3IgPSByZXNwb25zZS5oZWFkZXJzLmdldChIZWFkZXJDb25zdGFudHMuWF9NU19Db3B5U291cmNlRXJyb3JDb2RlKTtcbiAgICAgICAgLy8gICAgIGlmIChjb3B5U291cmNlRXJyb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyAgICAgICBzd2l0Y2ggKGNvcHlTb3VyY2VFcnJvcikge1xuICAgICAgICAvLyAgICAgICAgIGNhc2UgXCJJbnRlcm5hbEVycm9yXCI6XG4gICAgICAgIC8vICAgICAgICAgY2FzZSBcIk9wZXJhdGlvblRpbWVkT3V0XCI6XG4gICAgICAgIC8vICAgICAgICAgY2FzZSBcIlNlcnZlckJ1c3lcIjpcbiAgICAgICAgLy8gICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAvLyAgICAgICB9XG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vICAgfVxuICAgICAgICAvLyB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2FsY3VsYXRlRGVsYXkoaXNQcmltYXJ5UmV0cnksIGF0dGVtcHQpIHtcbiAgICAgICAgbGV0IGRlbGF5VGltZUluTXMgPSAwO1xuICAgICAgICBpZiAoaXNQcmltYXJ5UmV0cnkpIHtcbiAgICAgICAgICAgIHN3aXRjaCAocmV0cnlQb2xpY3lUeXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBTdG9yYWdlUmV0cnlQb2xpY3lUeXBlLkVYUE9ORU5USUFMOlxuICAgICAgICAgICAgICAgICAgICBkZWxheVRpbWVJbk1zID0gTWF0aC5taW4oKE1hdGgucG93KDIsIGF0dGVtcHQgLSAxKSAtIDEpICogcmV0cnlEZWxheUluTXMsIG1heFJldHJ5RGVsYXlJbk1zKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBTdG9yYWdlUmV0cnlQb2xpY3lUeXBlLkZJWEVEOlxuICAgICAgICAgICAgICAgICAgICBkZWxheVRpbWVJbk1zID0gcmV0cnlEZWxheUluTXM7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZGVsYXlUaW1lSW5NcyA9IE1hdGgucmFuZG9tKCkgKiAxMDAwO1xuICAgICAgICB9XG4gICAgICAgIGxvZ2dlci5pbmZvKGBSZXRyeVBvbGljeTogRGVsYXkgZm9yICR7ZGVsYXlUaW1lSW5Nc31tc2ApO1xuICAgICAgICByZXR1cm4gZGVsYXlUaW1lSW5NcztcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogc3RvcmFnZVJldHJ5UG9saWN5TmFtZSxcbiAgICAgICAgYXN5bmMgc2VuZFJlcXVlc3QocmVxdWVzdCwgbmV4dCkge1xuICAgICAgICAgICAgLy8gU2V0IHRoZSBzZXJ2ZXItc2lkZSB0aW1lb3V0IHF1ZXJ5IHBhcmFtZXRlciBcInRpbWVvdXQ9W3NlY29uZHNdXCJcbiAgICAgICAgICAgIGlmICh0cnlUaW1lb3V0SW5Ncykge1xuICAgICAgICAgICAgICAgIHJlcXVlc3QudXJsID0gc2V0VVJMUGFyYW1ldGVyKHJlcXVlc3QudXJsLCBVUkxDb25zdGFudHMuUGFyYW1ldGVycy5USU1FT1VULCBTdHJpbmcoTWF0aC5mbG9vcih0cnlUaW1lb3V0SW5NcyAvIDEwMDApKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwcmltYXJ5VXJsID0gcmVxdWVzdC51cmw7XG4gICAgICAgICAgICBjb25zdCBzZWNvbmRhcnlVcmwgPSBzZWNvbmRhcnlIb3N0ID8gc2V0VVJMSG9zdChyZXF1ZXN0LnVybCwgc2Vjb25kYXJ5SG9zdCkgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBsZXQgc2Vjb25kYXJ5SGFzNDA0ID0gZmFsc2U7XG4gICAgICAgICAgICBsZXQgYXR0ZW1wdCA9IDE7XG4gICAgICAgICAgICBsZXQgcmV0cnlBZ2FpbiA9IHRydWU7XG4gICAgICAgICAgICBsZXQgcmVzcG9uc2U7XG4gICAgICAgICAgICBsZXQgZXJyb3I7XG4gICAgICAgICAgICB3aGlsZSAocmV0cnlBZ2Fpbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzUHJpbWFyeVJldHJ5ID0gc2Vjb25kYXJ5SGFzNDA0IHx8XG4gICAgICAgICAgICAgICAgICAgICFzZWNvbmRhcnlVcmwgfHxcbiAgICAgICAgICAgICAgICAgICAgIVtcIkdFVFwiLCBcIkhFQURcIiwgXCJPUFRJT05TXCJdLmluY2x1ZGVzKHJlcXVlc3QubWV0aG9kKSB8fFxuICAgICAgICAgICAgICAgICAgICBhdHRlbXB0ICUgMiA9PT0gMTtcbiAgICAgICAgICAgICAgICByZXF1ZXN0LnVybCA9IGlzUHJpbWFyeVJldHJ5ID8gcHJpbWFyeVVybCA6IHNlY29uZGFyeVVybDtcbiAgICAgICAgICAgICAgICByZXNwb25zZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBlcnJvciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhgUmV0cnlQb2xpY3k6ID09PT09PiBUcnk9JHthdHRlbXB0fSAke2lzUHJpbWFyeVJldHJ5ID8gXCJQcmltYXJ5XCIgOiBcIlNlY29uZGFyeVwifWApO1xuICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IGF3YWl0IG5leHQocmVxdWVzdCk7XG4gICAgICAgICAgICAgICAgICAgIHNlY29uZGFyeUhhczQwNCA9IHNlY29uZGFyeUhhczQwNCB8fCAoIWlzUHJpbWFyeVJldHJ5ICYmIHJlc3BvbnNlLnN0YXR1cyA9PT0gNDA0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvcmVSZXN0UGlwZWxpbmUuaXNSZXN0RXJyb3IoZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihgUmV0cnlQb2xpY3k6IENhdWdodCBlcnJvciwgbWVzc2FnZTogJHtlLm1lc3NhZ2V9LCBjb2RlOiAke2UuY29kZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihgUmV0cnlQb2xpY3k6IENhdWdodCBlcnJvciwgbWVzc2FnZTogJHtjb3JlVXRpbC5nZXRFcnJvck1lc3NhZ2UoZSl9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHJ5QWdhaW4gPSBzaG91bGRSZXRyeSh7IGlzUHJpbWFyeVJldHJ5LCBhdHRlbXB0LCByZXNwb25zZSwgZXJyb3IgfSk7XG4gICAgICAgICAgICAgICAgaWYgKHJldHJ5QWdhaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZGVsYXkoY2FsY3VsYXRlRGVsYXkoaXNQcmltYXJ5UmV0cnksIGF0dGVtcHQpLCByZXF1ZXN0LmFib3J0U2lnbmFsLCBSRVRSWV9BQk9SVF9FUlJPUik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGF0dGVtcHQrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yICE9PSBudWxsICYmIGVycm9yICE9PSB2b2lkIDAgPyBlcnJvciA6IG5ldyBjb3JlUmVzdFBpcGVsaW5lLlJlc3RFcnJvcihcIlJldHJ5UG9saWN5IGZhaWxlZCB3aXRob3V0IGtub3duIGVycm9yLlwiKTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogVGhlIHByb2dyYW1tYXRpYyBpZGVudGlmaWVyIG9mIHRoZSBzdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbFBvbGljeS5cbiAqL1xuY29uc3Qgc3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWxQb2xpY3lOYW1lID0gXCJzdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbFBvbGljeVwiO1xuLyoqXG4gKiBzdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbFBvbGljeSBoYW5kbGVzIHNpZ25pbmcgcmVxdWVzdHMgdXNpbmcgc3RvcmFnZSBhY2NvdW50IGtleXMuXG4gKi9cbmZ1bmN0aW9uIHN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsUG9saWN5KG9wdGlvbnMpIHtcbiAgICBmdW5jdGlvbiBzaWduUmVxdWVzdChyZXF1ZXN0KSB7XG4gICAgICAgIHJlcXVlc3QuaGVhZGVycy5zZXQoSGVhZGVyQ29uc3RhbnRzLlhfTVNfREFURSwgbmV3IERhdGUoKS50b1VUQ1N0cmluZygpKTtcbiAgICAgICAgaWYgKHJlcXVlc3QuYm9keSAmJlxuICAgICAgICAgICAgKHR5cGVvZiByZXF1ZXN0LmJvZHkgPT09IFwic3RyaW5nXCIgfHwgQnVmZmVyLmlzQnVmZmVyKHJlcXVlc3QuYm9keSkpICYmXG4gICAgICAgICAgICByZXF1ZXN0LmJvZHkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmVxdWVzdC5oZWFkZXJzLnNldChIZWFkZXJDb25zdGFudHMuQ09OVEVOVF9MRU5HVEgsIEJ1ZmZlci5ieXRlTGVuZ3RoKHJlcXVlc3QuYm9keSkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0cmluZ1RvU2lnbiA9IFtcbiAgICAgICAgICAgIHJlcXVlc3QubWV0aG9kLnRvVXBwZXJDYXNlKCksXG4gICAgICAgICAgICBnZXRIZWFkZXJWYWx1ZVRvU2lnbihyZXF1ZXN0LCBIZWFkZXJDb25zdGFudHMuQ09OVEVOVF9MQU5HVUFHRSksXG4gICAgICAgICAgICBnZXRIZWFkZXJWYWx1ZVRvU2lnbihyZXF1ZXN0LCBIZWFkZXJDb25zdGFudHMuQ09OVEVOVF9FTkNPRElORyksXG4gICAgICAgICAgICBnZXRIZWFkZXJWYWx1ZVRvU2lnbihyZXF1ZXN0LCBIZWFkZXJDb25zdGFudHMuQ09OVEVOVF9MRU5HVEgpLFxuICAgICAgICAgICAgZ2V0SGVhZGVyVmFsdWVUb1NpZ24ocmVxdWVzdCwgSGVhZGVyQ29uc3RhbnRzLkNPTlRFTlRfTUQ1KSxcbiAgICAgICAgICAgIGdldEhlYWRlclZhbHVlVG9TaWduKHJlcXVlc3QsIEhlYWRlckNvbnN0YW50cy5DT05URU5UX1RZUEUpLFxuICAgICAgICAgICAgZ2V0SGVhZGVyVmFsdWVUb1NpZ24ocmVxdWVzdCwgSGVhZGVyQ29uc3RhbnRzLkRBVEUpLFxuICAgICAgICAgICAgZ2V0SGVhZGVyVmFsdWVUb1NpZ24ocmVxdWVzdCwgSGVhZGVyQ29uc3RhbnRzLklGX01PRElGSUVEX1NJTkNFKSxcbiAgICAgICAgICAgIGdldEhlYWRlclZhbHVlVG9TaWduKHJlcXVlc3QsIEhlYWRlckNvbnN0YW50cy5JRl9NQVRDSCksXG4gICAgICAgICAgICBnZXRIZWFkZXJWYWx1ZVRvU2lnbihyZXF1ZXN0LCBIZWFkZXJDb25zdGFudHMuSUZfTk9ORV9NQVRDSCksXG4gICAgICAgICAgICBnZXRIZWFkZXJWYWx1ZVRvU2lnbihyZXF1ZXN0LCBIZWFkZXJDb25zdGFudHMuSUZfVU5NT0RJRklFRF9TSU5DRSksXG4gICAgICAgICAgICBnZXRIZWFkZXJWYWx1ZVRvU2lnbihyZXF1ZXN0LCBIZWFkZXJDb25zdGFudHMuUkFOR0UpLFxuICAgICAgICBdLmpvaW4oXCJcXG5cIikgK1xuICAgICAgICAgICAgXCJcXG5cIiArXG4gICAgICAgICAgICBnZXRDYW5vbmljYWxpemVkSGVhZGVyc1N0cmluZyhyZXF1ZXN0KSArXG4gICAgICAgICAgICBnZXRDYW5vbmljYWxpemVkUmVzb3VyY2VTdHJpbmcocmVxdWVzdCk7XG4gICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IGNyeXB0by5jcmVhdGVIbWFjKFwic2hhMjU2XCIsIG9wdGlvbnMuYWNjb3VudEtleSlcbiAgICAgICAgICAgIC51cGRhdGUoc3RyaW5nVG9TaWduLCBcInV0ZjhcIilcbiAgICAgICAgICAgIC5kaWdlc3QoXCJiYXNlNjRcIik7XG4gICAgICAgIHJlcXVlc3QuaGVhZGVycy5zZXQoSGVhZGVyQ29uc3RhbnRzLkFVVEhPUklaQVRJT04sIGBTaGFyZWRLZXkgJHtvcHRpb25zLmFjY291bnROYW1lfToke3NpZ25hdHVyZX1gKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYFtVUkxdOiR7cmVxdWVzdC51cmx9YCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGBbSEVBREVSU106JHtyZXF1ZXN0LmhlYWRlcnMudG9TdHJpbmcoKX1gKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYFtTVFJJTkcgVE8gU0lHTl06JHtKU09OLnN0cmluZ2lmeShzdHJpbmdUb1NpZ24pfWApO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhgW0tFWV06ICR7cmVxdWVzdC5oZWFkZXJzLmdldChIZWFkZXJDb25zdGFudHMuQVVUSE9SSVpBVElPTil9YCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlIGhlYWRlciB2YWx1ZSBhY2NvcmRpbmcgdG8gc2hhcmVkIGtleSBzaWduIHJ1bGVzLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2F1dGhlbnRpY2F0ZS13aXRoLXNoYXJlZC1rZXlcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRIZWFkZXJWYWx1ZVRvU2lnbihyZXF1ZXN0LCBoZWFkZXJOYW1lKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gcmVxdWVzdC5oZWFkZXJzLmdldChoZWFkZXJOYW1lKTtcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgLy8gV2hlbiB1c2luZyB2ZXJzaW9uIDIwMTUtMDItMjEgb3IgbGF0ZXIsIGlmIENvbnRlbnQtTGVuZ3RoIGlzIHplcm8sIHRoZW5cbiAgICAgICAgLy8gc2V0IHRoZSBDb250ZW50LUxlbmd0aCBwYXJ0IG9mIHRoZSBTdHJpbmdUb1NpZ24gdG8gYW4gZW1wdHkgc3RyaW5nLlxuICAgICAgICAvLyBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvYXV0aGVudGljYXRlLXdpdGgtc2hhcmVkLWtleVxuICAgICAgICBpZiAoaGVhZGVyTmFtZSA9PT0gSGVhZGVyQ29uc3RhbnRzLkNPTlRFTlRfTEVOR1RIICYmIHZhbHVlID09PSBcIjBcIikge1xuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUbyBjb25zdHJ1Y3QgdGhlIENhbm9uaWNhbGl6ZWRIZWFkZXJzIHBvcnRpb24gb2YgdGhlIHNpZ25hdHVyZSBzdHJpbmcsIGZvbGxvdyB0aGVzZSBzdGVwczpcbiAgICAgKiAxLiBSZXRyaWV2ZSBhbGwgaGVhZGVycyBmb3IgdGhlIHJlc291cmNlIHRoYXQgYmVnaW4gd2l0aCB4LW1zLSwgaW5jbHVkaW5nIHRoZSB4LW1zLWRhdGUgaGVhZGVyLlxuICAgICAqIDIuIENvbnZlcnQgZWFjaCBIVFRQIGhlYWRlciBuYW1lIHRvIGxvd2VyY2FzZS5cbiAgICAgKiAzLiBTb3J0IHRoZSBoZWFkZXJzIGxleGljb2dyYXBoaWNhbGx5IGJ5IGhlYWRlciBuYW1lLCBpbiBhc2NlbmRpbmcgb3JkZXIuXG4gICAgICogICAgRWFjaCBoZWFkZXIgbWF5IGFwcGVhciBvbmx5IG9uY2UgaW4gdGhlIHN0cmluZy5cbiAgICAgKiA0LiBSZXBsYWNlIGFueSBsaW5lYXIgd2hpdGVzcGFjZSBpbiB0aGUgaGVhZGVyIHZhbHVlIHdpdGggYSBzaW5nbGUgc3BhY2UuXG4gICAgICogNS4gVHJpbSBhbnkgd2hpdGVzcGFjZSBhcm91bmQgdGhlIGNvbG9uIGluIHRoZSBoZWFkZXIuXG4gICAgICogNi4gRmluYWxseSwgYXBwZW5kIGEgbmV3LWxpbmUgY2hhcmFjdGVyIHRvIGVhY2ggY2Fub25pY2FsaXplZCBoZWFkZXIgaW4gdGhlIHJlc3VsdGluZyBsaXN0LlxuICAgICAqICAgIENvbnN0cnVjdCB0aGUgQ2Fub25pY2FsaXplZEhlYWRlcnMgc3RyaW5nIGJ5IGNvbmNhdGVuYXRpbmcgYWxsIGhlYWRlcnMgaW4gdGhpcyBsaXN0IGludG8gYSBzaW5nbGUgc3RyaW5nLlxuICAgICAqXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0Q2Fub25pY2FsaXplZEhlYWRlcnNTdHJpbmcocmVxdWVzdCkge1xuICAgICAgICBsZXQgaGVhZGVyc0FycmF5ID0gW107XG4gICAgICAgIGZvciAoY29uc3QgW25hbWUsIHZhbHVlXSBvZiByZXF1ZXN0LmhlYWRlcnMpIHtcbiAgICAgICAgICAgIGlmIChuYW1lLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChIZWFkZXJDb25zdGFudHMuUFJFRklYX0ZPUl9TVE9SQUdFKSkge1xuICAgICAgICAgICAgICAgIGhlYWRlcnNBcnJheS5wdXNoKHsgbmFtZSwgdmFsdWUgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaGVhZGVyc0FycmF5LnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBjb21wYXJlSGVhZGVyKGEubmFtZS50b0xvd2VyQ2FzZSgpLCBiLm5hbWUudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBSZW1vdmUgZHVwbGljYXRlIGhlYWRlcnNcbiAgICAgICAgaGVhZGVyc0FycmF5ID0gaGVhZGVyc0FycmF5LmZpbHRlcigodmFsdWUsIGluZGV4LCBhcnJheSkgPT4ge1xuICAgICAgICAgICAgaWYgKGluZGV4ID4gMCAmJiB2YWx1ZS5uYW1lLnRvTG93ZXJDYXNlKCkgPT09IGFycmF5W2luZGV4IC0gMV0ubmFtZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgY2Fub25pY2FsaXplZEhlYWRlcnNTdHJpbmdUb1NpZ24gPSBcIlwiO1xuICAgICAgICBoZWFkZXJzQXJyYXkuZm9yRWFjaCgoaGVhZGVyKSA9PiB7XG4gICAgICAgICAgICBjYW5vbmljYWxpemVkSGVhZGVyc1N0cmluZ1RvU2lnbiArPSBgJHtoZWFkZXIubmFtZVxuICAgICAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgICAgLnRyaW1SaWdodCgpfToke2hlYWRlci52YWx1ZS50cmltTGVmdCgpfVxcbmA7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gY2Fub25pY2FsaXplZEhlYWRlcnNTdHJpbmdUb1NpZ247XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldENhbm9uaWNhbGl6ZWRSZXNvdXJjZVN0cmluZyhyZXF1ZXN0KSB7XG4gICAgICAgIGNvbnN0IHBhdGggPSBnZXRVUkxQYXRoKHJlcXVlc3QudXJsKSB8fCBcIi9cIjtcbiAgICAgICAgbGV0IGNhbm9uaWNhbGl6ZWRSZXNvdXJjZVN0cmluZyA9IFwiXCI7XG4gICAgICAgIGNhbm9uaWNhbGl6ZWRSZXNvdXJjZVN0cmluZyArPSBgLyR7b3B0aW9ucy5hY2NvdW50TmFtZX0ke3BhdGh9YDtcbiAgICAgICAgY29uc3QgcXVlcmllcyA9IGdldFVSTFF1ZXJpZXMocmVxdWVzdC51cmwpO1xuICAgICAgICBjb25zdCBsb3dlcmNhc2VRdWVyaWVzID0ge307XG4gICAgICAgIGlmIChxdWVyaWVzKSB7XG4gICAgICAgICAgICBjb25zdCBxdWVyeUtleXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHF1ZXJpZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHF1ZXJpZXMsIGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbG93ZXJjYXNlS2V5ID0ga2V5LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgICAgIGxvd2VyY2FzZVF1ZXJpZXNbbG93ZXJjYXNlS2V5XSA9IHF1ZXJpZXNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgcXVlcnlLZXlzLnB1c2gobG93ZXJjYXNlS2V5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxdWVyeUtleXMuc29ydCgpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgcXVlcnlLZXlzKSB7XG4gICAgICAgICAgICAgICAgY2Fub25pY2FsaXplZFJlc291cmNlU3RyaW5nICs9IGBcXG4ke2tleX06JHtkZWNvZGVVUklDb21wb25lbnQobG93ZXJjYXNlUXVlcmllc1trZXldKX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYW5vbmljYWxpemVkUmVzb3VyY2VTdHJpbmc7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IHN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsUG9saWN5TmFtZSxcbiAgICAgICAgYXN5bmMgc2VuZFJlcXVlc3QocmVxdWVzdCwgbmV4dCkge1xuICAgICAgICAgICAgc2lnblJlcXVlc3QocmVxdWVzdCk7XG4gICAgICAgICAgICByZXR1cm4gbmV4dChyZXF1ZXN0KTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogU3RvcmFnZUJyb3dzZXJQb2xpY3kgd2lsbCBoYW5kbGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBOb2RlLmpzIGFuZCBicm93c2VyIHJ1bnRpbWUsIGluY2x1ZGluZzpcbiAqXG4gKiAxLiBCcm93c2VycyBjYWNoZSBHRVQvSEVBRCByZXF1ZXN0cyBieSBhZGRpbmcgY29uZGl0aW9uYWwgaGVhZGVycyBzdWNoIGFzICdJRl9NT0RJRklFRF9TSU5DRScuXG4gKiBTdG9yYWdlQnJvd3NlclBvbGljeSBpcyBhIHBvbGljeSB1c2VkIHRvIGFkZCBhIHRpbWVzdGFtcCBxdWVyeSB0byBHRVQvSEVBRCByZXF1ZXN0IFVSTFxuICogdGh1cyBhdm9pZCB0aGUgYnJvd3NlciBjYWNoZS5cbiAqXG4gKiAyLiBSZW1vdmUgY29va2llIGhlYWRlciBmb3Igc2VjdXJpdHlcbiAqXG4gKiAzLiBSZW1vdmUgY29udGVudC1sZW5ndGggaGVhZGVyIHRvIGF2b2lkIGJyb3dzZXJzIHdhcm5pbmdcbiAqL1xuY2xhc3MgU3RvcmFnZUJyb3dzZXJQb2xpY3kgZXh0ZW5kcyBCYXNlUmVxdWVzdFBvbGljeSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBTdG9yYWdlQnJvd3NlclBvbGljeS5cbiAgICAgKiBAcGFyYW0gbmV4dFBvbGljeSAtXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLVxuICAgICAqL1xuICAgIC8vIFRoZSBiYXNlIGNsYXNzIGhhcyBhIHByb3RlY3RlZCBjb25zdHJ1Y3Rvci4gQWRkaW5nIGEgcHVibGljIG9uZSB0byBlbmFibGUgY29uc3RydWN0aW5nIG9mIHRoaXMgY2xhc3MuXG4gICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11c2VsZXNzLWNvbnN0cnVjdG9yKi9cbiAgICBjb25zdHJ1Y3RvcihuZXh0UG9saWN5LCBvcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKG5leHRQb2xpY3ksIG9wdGlvbnMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZW5kcyBvdXQgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByZXF1ZXN0IC1cbiAgICAgKi9cbiAgICBhc3luYyBzZW5kUmVxdWVzdChyZXF1ZXN0KSB7XG4gICAgICAgIGlmIChjb3JlVXRpbC5pc05vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9uZXh0UG9saWN5LnNlbmRSZXF1ZXN0KHJlcXVlc3QpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXF1ZXN0Lm1ldGhvZC50b1VwcGVyQ2FzZSgpID09PSBcIkdFVFwiIHx8IHJlcXVlc3QubWV0aG9kLnRvVXBwZXJDYXNlKCkgPT09IFwiSEVBRFwiKSB7XG4gICAgICAgICAgICByZXF1ZXN0LnVybCA9IHNldFVSTFBhcmFtZXRlcihyZXF1ZXN0LnVybCwgVVJMQ29uc3RhbnRzLlBhcmFtZXRlcnMuRk9SQ0VfQlJPV1NFUl9OT19DQUNIRSwgbmV3IERhdGUoKS5nZXRUaW1lKCkudG9TdHJpbmcoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVxdWVzdC5oZWFkZXJzLnJlbW92ZShIZWFkZXJDb25zdGFudHMuQ09PS0lFKTtcbiAgICAgICAgLy8gQWNjb3JkaW5nIHRvIFhIUiBzdGFuZGFyZHMsIGNvbnRlbnQtbGVuZ3RoIHNob3VsZCBiZSBmdWxseSBjb250cm9sbGVkIGJ5IGJyb3dzZXJzXG4gICAgICAgIHJlcXVlc3QuaGVhZGVycy5yZW1vdmUoSGVhZGVyQ29uc3RhbnRzLkNPTlRFTlRfTEVOR1RIKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX25leHRQb2xpY3kuc2VuZFJlcXVlc3QocmVxdWVzdCk7XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogU3RvcmFnZUJyb3dzZXJQb2xpY3lGYWN0b3J5IGlzIGEgZmFjdG9yeSBjbGFzcyBoZWxwaW5nIGdlbmVyYXRpbmcgU3RvcmFnZUJyb3dzZXJQb2xpY3kgb2JqZWN0cy5cbiAqL1xuY2xhc3MgU3RvcmFnZUJyb3dzZXJQb2xpY3lGYWN0b3J5IHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgU3RvcmFnZUJyb3dzZXJQb2xpY3lGYWN0b3J5IG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBuZXh0UG9saWN5IC1cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtXG4gICAgICovXG4gICAgY3JlYXRlKG5leHRQb2xpY3ksIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTdG9yYWdlQnJvd3NlclBvbGljeShuZXh0UG9saWN5LCBvcHRpb25zKTtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBUaGUgcHJvZ3JhbW1hdGljIGlkZW50aWZpZXIgb2YgdGhlIHN0b3JhZ2VDb3JyZWN0Q29udGVudExlbmd0aFBvbGljeS5cbiAqL1xuY29uc3Qgc3RvcmFnZUNvcnJlY3RDb250ZW50TGVuZ3RoUG9saWN5TmFtZSA9IFwiU3RvcmFnZUNvcnJlY3RDb250ZW50TGVuZ3RoUG9saWN5XCI7XG4vKipcbiAqIHN0b3JhZ2VDb3JyZWN0Q29udGVudExlbmd0aFBvbGljeSB0byBjb3JyZWN0bHkgc2V0IENvbnRlbnQtTGVuZ3RoIGhlYWRlciB3aXRoIHJlcXVlc3QgYm9keSBsZW5ndGguXG4gKi9cbmZ1bmN0aW9uIHN0b3JhZ2VDb3JyZWN0Q29udGVudExlbmd0aFBvbGljeSgpIHtcbiAgICBmdW5jdGlvbiBjb3JyZWN0Q29udGVudExlbmd0aChyZXF1ZXN0KSB7XG4gICAgICAgIGlmIChyZXF1ZXN0LmJvZHkgJiZcbiAgICAgICAgICAgICh0eXBlb2YgcmVxdWVzdC5ib2R5ID09PSBcInN0cmluZ1wiIHx8IEJ1ZmZlci5pc0J1ZmZlcihyZXF1ZXN0LmJvZHkpKSAmJlxuICAgICAgICAgICAgcmVxdWVzdC5ib2R5Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJlcXVlc3QuaGVhZGVycy5zZXQoSGVhZGVyQ29uc3RhbnRzLkNPTlRFTlRfTEVOR1RILCBCdWZmZXIuYnl0ZUxlbmd0aChyZXF1ZXN0LmJvZHkpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBzdG9yYWdlQ29ycmVjdENvbnRlbnRMZW5ndGhQb2xpY3lOYW1lLFxuICAgICAgICBhc3luYyBzZW5kUmVxdWVzdChyZXF1ZXN0LCBuZXh0KSB7XG4gICAgICAgICAgICBjb3JyZWN0Q29udGVudExlbmd0aChyZXF1ZXN0KTtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KHJlcXVlc3QpO1xuICAgICAgICB9LFxuICAgIH07XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBBIGhlbHBlciB0byBkZWNpZGUgaWYgYSBnaXZlbiBhcmd1bWVudCBzYXRpc2ZpZXMgdGhlIFBpcGVsaW5lIGNvbnRyYWN0XG4gKiBAcGFyYW0gcGlwZWxpbmUgLSBBbiBhcmd1bWVudCB0aGF0IG1heSBiZSBhIFBpcGVsaW5lXG4gKiBAcmV0dXJucyB0cnVlIHdoZW4gdGhlIGFyZ3VtZW50IHNhdGlzZmllcyB0aGUgUGlwZWxpbmUgY29udHJhY3RcbiAqL1xuZnVuY3Rpb24gaXNQaXBlbGluZUxpa2UocGlwZWxpbmUpIHtcbiAgICBpZiAoIXBpcGVsaW5lIHx8IHR5cGVvZiBwaXBlbGluZSAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGNhc3RQaXBlbGluZSA9IHBpcGVsaW5lO1xuICAgIHJldHVybiAoQXJyYXkuaXNBcnJheShjYXN0UGlwZWxpbmUuZmFjdG9yaWVzKSAmJlxuICAgICAgICB0eXBlb2YgY2FzdFBpcGVsaW5lLm9wdGlvbnMgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgdHlwZW9mIGNhc3RQaXBlbGluZS50b1NlcnZpY2VDbGllbnRPcHRpb25zID09PSBcImZ1bmN0aW9uXCIpO1xufVxuLyoqXG4gKiBBIFBpcGVsaW5lIGNsYXNzIGNvbnRhaW5pbmcgSFRUUCByZXF1ZXN0IHBvbGljaWVzLlxuICogWW91IGNhbiBjcmVhdGUgYSBkZWZhdWx0IFBpcGVsaW5lIGJ5IGNhbGxpbmcge0BsaW5rIG5ld1BpcGVsaW5lfS5cbiAqIE9yIHlvdSBjYW4gY3JlYXRlIGEgUGlwZWxpbmUgd2l0aCB5b3VyIG93biBwb2xpY2llcyBieSB0aGUgY29uc3RydWN0b3Igb2YgUGlwZWxpbmUuXG4gKlxuICogUmVmZXIgdG8ge0BsaW5rIG5ld1BpcGVsaW5lfSBhbmQgcHJvdmlkZWQgcG9saWNpZXMgYmVmb3JlIGltcGxlbWVudGluZyB5b3VyXG4gKiBjdXN0b21pemVkIFBpcGVsaW5lLlxuICovXG5jbGFzcyBQaXBlbGluZSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBQaXBlbGluZS4gQ3VzdG9taXplIEhUVFBDbGllbnQgYnkgaW1wbGVtZW50aW5nIElIdHRwQ2xpZW50IGludGVyZmFjZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBmYWN0b3JpZXMgLVxuICAgICAqIEBwYXJhbSBvcHRpb25zIC1cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihmYWN0b3JpZXMsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICB0aGlzLmZhY3RvcmllcyA9IGZhY3RvcmllcztcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB9XG4gICAgLyoqXG4gICAgICogVHJhbnNmZXIgUGlwZWxpbmUgb2JqZWN0IHRvIFNlcnZpY2VDbGllbnRPcHRpb25zIG9iamVjdCB3aGljaCBpcyByZXF1aXJlZCBieVxuICAgICAqIFNlcnZpY2VDbGllbnQgY29uc3RydWN0b3IuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBUaGUgU2VydmljZUNsaWVudE9wdGlvbnMgb2JqZWN0IGZyb20gdGhpcyBQaXBlbGluZS5cbiAgICAgKi9cbiAgICB0b1NlcnZpY2VDbGllbnRPcHRpb25zKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaHR0cENsaWVudDogdGhpcy5vcHRpb25zLmh0dHBDbGllbnQsXG4gICAgICAgICAgICByZXF1ZXN0UG9saWN5RmFjdG9yaWVzOiB0aGlzLmZhY3RvcmllcyxcbiAgICAgICAgfTtcbiAgICB9XG59XG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgUGlwZWxpbmUgb2JqZWN0IHdpdGggQ3JlZGVudGlhbCBwcm92aWRlZC5cbiAqXG4gKiBAcGFyYW0gY3JlZGVudGlhbCAtICBTdWNoIGFzIEFub255bW91c0NyZWRlbnRpYWwsIFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsIG9yIGFueSBjcmVkZW50aWFsIGZyb20gdGhlIGBAYXp1cmUvaWRlbnRpdHlgIHBhY2thZ2UgdG8gYXV0aGVudGljYXRlIHJlcXVlc3RzIHRvIHRoZSBzZXJ2aWNlLiBZb3UgY2FuIGFsc28gcHJvdmlkZSBhbiBvYmplY3QgdGhhdCBpbXBsZW1lbnRzIHRoZSBUb2tlbkNyZWRlbnRpYWwgaW50ZXJmYWNlLiBJZiBub3Qgc3BlY2lmaWVkLCBBbm9ueW1vdXNDcmVkZW50aWFsIGlzIHVzZWQuXG4gKiBAcGFyYW0gcGlwZWxpbmVPcHRpb25zIC0gT3B0aW9uYWwuIE9wdGlvbnMuXG4gKiBAcmV0dXJucyBBIG5ldyBQaXBlbGluZSBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIG5ld1BpcGVsaW5lKGNyZWRlbnRpYWwsIHBpcGVsaW5lT3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKCFjcmVkZW50aWFsKSB7XG4gICAgICAgIGNyZWRlbnRpYWwgPSBuZXcgQW5vbnltb3VzQ3JlZGVudGlhbCgpO1xuICAgIH1cbiAgICBjb25zdCBwaXBlbGluZSA9IG5ldyBQaXBlbGluZShbXSwgcGlwZWxpbmVPcHRpb25zKTtcbiAgICBwaXBlbGluZS5fY3JlZGVudGlhbCA9IGNyZWRlbnRpYWw7XG4gICAgcmV0dXJuIHBpcGVsaW5lO1xufVxuZnVuY3Rpb24gcHJvY2Vzc0Rvd25sZXZlbFBpcGVsaW5lKHBpcGVsaW5lKSB7XG4gICAgY29uc3Qga25vd25GYWN0b3J5RnVuY3Rpb25zID0gW1xuICAgICAgICBpc0Fub255bW91c0NyZWRlbnRpYWwsXG4gICAgICAgIGlzU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwsXG4gICAgICAgIGlzQ29yZUh0dHBCZWFyZXJUb2tlbkZhY3RvcnksXG4gICAgICAgIGlzU3RvcmFnZUJyb3dzZXJQb2xpY3lGYWN0b3J5LFxuICAgICAgICBpc1N0b3JhZ2VSZXRyeVBvbGljeUZhY3RvcnksXG4gICAgICAgIGlzU3RvcmFnZVRlbGVtZXRyeVBvbGljeUZhY3RvcnksXG4gICAgICAgIGlzQ29yZUh0dHBQb2xpY3lGYWN0b3J5LFxuICAgIF07XG4gICAgaWYgKHBpcGVsaW5lLmZhY3Rvcmllcy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3Qgbm92ZWxGYWN0b3JpZXMgPSBwaXBlbGluZS5mYWN0b3JpZXMuZmlsdGVyKChmYWN0b3J5KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gIWtub3duRmFjdG9yeUZ1bmN0aW9ucy5zb21lKChrbm93bkZhY3RvcnkpID0+IGtub3duRmFjdG9yeShmYWN0b3J5KSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAobm92ZWxGYWN0b3JpZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBoYXNJbmplY3RvciA9IG5vdmVsRmFjdG9yaWVzLnNvbWUoKGZhY3RvcnkpID0+IGlzSW5qZWN0b3JQb2xpY3lGYWN0b3J5KGZhY3RvcnkpKTtcbiAgICAgICAgICAgIC8vIGlmIHRoZXJlIGFyZSBhbnkgbGVmdCBvdmVyLCB3cmFwIGluIGEgcmVxdWVzdFBvbGljeUZhY3RvcnlQb2xpY3lcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgd3JhcHBlZFBvbGljaWVzOiBjb3JlSHR0cENvbXBhdC5jcmVhdGVSZXF1ZXN0UG9saWN5RmFjdG9yeVBvbGljeShub3ZlbEZhY3RvcmllcyksXG4gICAgICAgICAgICAgICAgYWZ0ZXJSZXRyeTogaGFzSW5qZWN0b3IsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBnZXRDb3JlQ2xpZW50T3B0aW9ucyhwaXBlbGluZSkge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCBfYiA9IHBpcGVsaW5lLm9wdGlvbnMsIHsgaHR0cENsaWVudDogdjFDbGllbnQgfSA9IF9iLCByZXN0T3B0aW9ucyA9IHRzbGliLl9fcmVzdChfYiwgW1wiaHR0cENsaWVudFwiXSk7XG4gICAgbGV0IGh0dHBDbGllbnQgPSBwaXBlbGluZS5fY29yZUh0dHBDbGllbnQ7XG4gICAgaWYgKCFodHRwQ2xpZW50KSB7XG4gICAgICAgIGh0dHBDbGllbnQgPSB2MUNsaWVudCA/IGNvcmVIdHRwQ29tcGF0LmNvbnZlcnRIdHRwQ2xpZW50KHYxQ2xpZW50KSA6IGdldENhY2hlZERlZmF1bHRIdHRwQ2xpZW50KCk7XG4gICAgICAgIHBpcGVsaW5lLl9jb3JlSHR0cENsaWVudCA9IGh0dHBDbGllbnQ7XG4gICAgfVxuICAgIGxldCBjb3JlUGlwZWxpbmUgPSBwaXBlbGluZS5fY29yZVBpcGVsaW5lO1xuICAgIGlmICghY29yZVBpcGVsaW5lKSB7XG4gICAgICAgIGNvbnN0IHBhY2thZ2VEZXRhaWxzID0gYGF6c2RrLWpzLWF6dXJlLXN0b3JhZ2UtYmxvYi8ke1NES19WRVJTSU9OfWA7XG4gICAgICAgIGNvbnN0IHVzZXJBZ2VudFByZWZpeCA9IHJlc3RPcHRpb25zLnVzZXJBZ2VudE9wdGlvbnMgJiYgcmVzdE9wdGlvbnMudXNlckFnZW50T3B0aW9ucy51c2VyQWdlbnRQcmVmaXhcbiAgICAgICAgICAgID8gYCR7cmVzdE9wdGlvbnMudXNlckFnZW50T3B0aW9ucy51c2VyQWdlbnRQcmVmaXh9ICR7cGFja2FnZURldGFpbHN9YFxuICAgICAgICAgICAgOiBgJHtwYWNrYWdlRGV0YWlsc31gO1xuICAgICAgICBjb3JlUGlwZWxpbmUgPSBjb3JlQ2xpZW50LmNyZWF0ZUNsaWVudFBpcGVsaW5lKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcmVzdE9wdGlvbnMpLCB7IGxvZ2dpbmdPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgYWRkaXRpb25hbEFsbG93ZWRIZWFkZXJOYW1lczogU3RvcmFnZUJsb2JMb2dnaW5nQWxsb3dlZEhlYWRlck5hbWVzLFxuICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxBbGxvd2VkUXVlcnlQYXJhbWV0ZXJzOiBTdG9yYWdlQmxvYkxvZ2dpbmdBbGxvd2VkUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgICAgIGxvZ2dlcjogbG9nZ2VyLmluZm8sXG4gICAgICAgICAgICB9LCB1c2VyQWdlbnRPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgdXNlckFnZW50UHJlZml4LFxuICAgICAgICAgICAgfSwgc2VyaWFsaXphdGlvbk9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICBzdHJpbmdpZnlYTUw6IGNvcmVYbWwuc3RyaW5naWZ5WE1MLFxuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZXJPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgIHhtbDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXNlIGN1c3RvbWl6ZWQgWE1MIGNoYXIga2V5IG9mIFwiI1wiIHNvIHdlIGNhbiBkZXNlcmlhbGl6ZSBtZXRhZGF0YVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2l0aCBcIl9cIiBrZXlcbiAgICAgICAgICAgICAgICAgICAgICAgIHhtbENoYXJLZXk6IFwiI1wiLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LCBkZXNlcmlhbGl6YXRpb25PcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgcGFyc2VYTUw6IGNvcmVYbWwucGFyc2VYTUwsXG4gICAgICAgICAgICAgICAgc2VyaWFsaXplck9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgeG1sOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBVc2UgY3VzdG9taXplZCBYTUwgY2hhciBrZXkgb2YgXCIjXCIgc28gd2UgY2FuIGRlc2VyaWFsaXplIG1ldGFkYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB3aXRoIFwiX1wiIGtleVxuICAgICAgICAgICAgICAgICAgICAgICAgeG1sQ2hhcktleTogXCIjXCIsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0gfSkpO1xuICAgICAgICBjb3JlUGlwZWxpbmUucmVtb3ZlUG9saWN5KHsgcGhhc2U6IFwiUmV0cnlcIiB9KTtcbiAgICAgICAgY29yZVBpcGVsaW5lLnJlbW92ZVBvbGljeSh7IG5hbWU6IGNvcmVSZXN0UGlwZWxpbmUuZGVjb21wcmVzc1Jlc3BvbnNlUG9saWN5TmFtZSB9KTtcbiAgICAgICAgY29yZVBpcGVsaW5lLmFkZFBvbGljeShzdG9yYWdlQ29ycmVjdENvbnRlbnRMZW5ndGhQb2xpY3koKSk7XG4gICAgICAgIGNvcmVQaXBlbGluZS5hZGRQb2xpY3koc3RvcmFnZVJldHJ5UG9saWN5KHJlc3RPcHRpb25zLnJldHJ5T3B0aW9ucyksIHsgcGhhc2U6IFwiUmV0cnlcIiB9KTtcbiAgICAgICAgY29yZVBpcGVsaW5lLmFkZFBvbGljeShzdG9yYWdlQnJvd3NlclBvbGljeSgpKTtcbiAgICAgICAgY29uc3QgZG93bmxldmVsUmVzdWx0cyA9IHByb2Nlc3NEb3dubGV2ZWxQaXBlbGluZShwaXBlbGluZSk7XG4gICAgICAgIGlmIChkb3dubGV2ZWxSZXN1bHRzKSB7XG4gICAgICAgICAgICBjb3JlUGlwZWxpbmUuYWRkUG9saWN5KGRvd25sZXZlbFJlc3VsdHMud3JhcHBlZFBvbGljaWVzLCBkb3dubGV2ZWxSZXN1bHRzLmFmdGVyUmV0cnkgPyB7IGFmdGVyUGhhc2U6IFwiUmV0cnlcIiB9IDogdW5kZWZpbmVkKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjcmVkZW50aWFsID0gZ2V0Q3JlZGVudGlhbEZyb21QaXBlbGluZShwaXBlbGluZSk7XG4gICAgICAgIGlmIChjb3JlQXV0aC5pc1Rva2VuQ3JlZGVudGlhbChjcmVkZW50aWFsKSkge1xuICAgICAgICAgICAgY29yZVBpcGVsaW5lLmFkZFBvbGljeShjb3JlUmVzdFBpcGVsaW5lLmJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3koe1xuICAgICAgICAgICAgICAgIGNyZWRlbnRpYWwsXG4gICAgICAgICAgICAgICAgc2NvcGVzOiAoX2EgPSByZXN0T3B0aW9ucy5hdWRpZW5jZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogU3RvcmFnZU9BdXRoU2NvcGVzLFxuICAgICAgICAgICAgICAgIGNoYWxsZW5nZUNhbGxiYWNrczogeyBhdXRob3JpemVSZXF1ZXN0T25DaGFsbGVuZ2U6IGNvcmVDbGllbnQuYXV0aG9yaXplUmVxdWVzdE9uVGVuYW50Q2hhbGxlbmdlIH0sXG4gICAgICAgICAgICB9KSwgeyBwaGFzZTogXCJTaWduXCIgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY3JlZGVudGlhbCBpbnN0YW5jZW9mIFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsKSB7XG4gICAgICAgICAgICBjb3JlUGlwZWxpbmUuYWRkUG9saWN5KHN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsUG9saWN5KHtcbiAgICAgICAgICAgICAgICBhY2NvdW50TmFtZTogY3JlZGVudGlhbC5hY2NvdW50TmFtZSxcbiAgICAgICAgICAgICAgICBhY2NvdW50S2V5OiBjcmVkZW50aWFsLmFjY291bnRLZXksXG4gICAgICAgICAgICB9KSwgeyBwaGFzZTogXCJTaWduXCIgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcGlwZWxpbmUuX2NvcmVQaXBlbGluZSA9IGNvcmVQaXBlbGluZTtcbiAgICB9XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcmVzdE9wdGlvbnMpLCB7IGFsbG93SW5zZWN1cmVDb25uZWN0aW9uOiB0cnVlLCBodHRwQ2xpZW50LCBwaXBlbGluZTogY29yZVBpcGVsaW5lIH0pO1xufVxuZnVuY3Rpb24gZ2V0Q3JlZGVudGlhbEZyb21QaXBlbGluZShwaXBlbGluZSkge1xuICAgIC8vIHNlZSBpZiB3ZSBzcXVpcnJlbGVkIG9uZSBhd2F5IG9uIHRoZSB0eXBlIGl0c2VsZlxuICAgIGlmIChwaXBlbGluZS5fY3JlZGVudGlhbCkge1xuICAgICAgICByZXR1cm4gcGlwZWxpbmUuX2NyZWRlbnRpYWw7XG4gICAgfVxuICAgIC8vIGlmIGl0IGNhbWUgZnJvbSBhbm90aGVyIHBhY2thZ2UsIGxvb3Agb3ZlciB0aGUgZmFjdG9yaWVzIGFuZCBsb29rIGZvciBvbmUgbGlrZSBiZWZvcmVcbiAgICBsZXQgY3JlZGVudGlhbCA9IG5ldyBBbm9ueW1vdXNDcmVkZW50aWFsKCk7XG4gICAgZm9yIChjb25zdCBmYWN0b3J5IG9mIHBpcGVsaW5lLmZhY3Rvcmllcykge1xuICAgICAgICBpZiAoY29yZUF1dGguaXNUb2tlbkNyZWRlbnRpYWwoZmFjdG9yeS5jcmVkZW50aWFsKSkge1xuICAgICAgICAgICAgLy8gT25seSB3b3JrcyBpZiB0aGUgZmFjdG9yeSBoYXMgYmVlbiBhdHRhY2hlZCBhIFwiY3JlZGVudGlhbFwiIHByb3BlcnR5LlxuICAgICAgICAgICAgLy8gV2UgZG8gdGhhdCBpbiBuZXdQaXBlbGluZSgpIHdoZW4gdXNpbmcgVG9rZW5DcmVkZW50aWFsLlxuICAgICAgICAgICAgY3JlZGVudGlhbCA9IGZhY3RvcnkuY3JlZGVudGlhbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc1N0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsKGZhY3RvcnkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFjdG9yeTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY3JlZGVudGlhbDtcbn1cbmZ1bmN0aW9uIGlzU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwoZmFjdG9yeSkge1xuICAgIGlmIChmYWN0b3J5IGluc3RhbmNlb2YgU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWN0b3J5LmNvbnN0cnVjdG9yLm5hbWUgPT09IFwiU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWxcIjtcbn1cbmZ1bmN0aW9uIGlzQW5vbnltb3VzQ3JlZGVudGlhbChmYWN0b3J5KSB7XG4gICAgaWYgKGZhY3RvcnkgaW5zdGFuY2VvZiBBbm9ueW1vdXNDcmVkZW50aWFsKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFjdG9yeS5jb25zdHJ1Y3Rvci5uYW1lID09PSBcIkFub255bW91c0NyZWRlbnRpYWxcIjtcbn1cbmZ1bmN0aW9uIGlzQ29yZUh0dHBCZWFyZXJUb2tlbkZhY3RvcnkoZmFjdG9yeSkge1xuICAgIHJldHVybiBjb3JlQXV0aC5pc1Rva2VuQ3JlZGVudGlhbChmYWN0b3J5LmNyZWRlbnRpYWwpO1xufVxuZnVuY3Rpb24gaXNTdG9yYWdlQnJvd3NlclBvbGljeUZhY3RvcnkoZmFjdG9yeSkge1xuICAgIGlmIChmYWN0b3J5IGluc3RhbmNlb2YgU3RvcmFnZUJyb3dzZXJQb2xpY3lGYWN0b3J5KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFjdG9yeS5jb25zdHJ1Y3Rvci5uYW1lID09PSBcIlN0b3JhZ2VCcm93c2VyUG9saWN5RmFjdG9yeVwiO1xufVxuZnVuY3Rpb24gaXNTdG9yYWdlUmV0cnlQb2xpY3lGYWN0b3J5KGZhY3RvcnkpIHtcbiAgICBpZiAoZmFjdG9yeSBpbnN0YW5jZW9mIFN0b3JhZ2VSZXRyeVBvbGljeUZhY3RvcnkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWN0b3J5LmNvbnN0cnVjdG9yLm5hbWUgPT09IFwiU3RvcmFnZVJldHJ5UG9saWN5RmFjdG9yeVwiO1xufVxuZnVuY3Rpb24gaXNTdG9yYWdlVGVsZW1ldHJ5UG9saWN5RmFjdG9yeShmYWN0b3J5KSB7XG4gICAgcmV0dXJuIGZhY3RvcnkuY29uc3RydWN0b3IubmFtZSA9PT0gXCJUZWxlbWV0cnlQb2xpY3lGYWN0b3J5XCI7XG59XG5mdW5jdGlvbiBpc0luamVjdG9yUG9saWN5RmFjdG9yeShmYWN0b3J5KSB7XG4gICAgcmV0dXJuIGZhY3RvcnkuY29uc3RydWN0b3IubmFtZSA9PT0gXCJJbmplY3RvclBvbGljeUZhY3RvcnlcIjtcbn1cbmZ1bmN0aW9uIGlzQ29yZUh0dHBQb2xpY3lGYWN0b3J5KGZhY3RvcnkpIHtcbiAgICBjb25zdCBrbm93blBvbGljaWVzID0gW1xuICAgICAgICBcIkdlbmVyYXRlQ2xpZW50UmVxdWVzdElkUG9saWN5XCIsXG4gICAgICAgIFwiVHJhY2luZ1BvbGljeVwiLFxuICAgICAgICBcIkxvZ1BvbGljeVwiLFxuICAgICAgICBcIlByb3h5UG9saWN5XCIsXG4gICAgICAgIFwiRGlzYWJsZVJlc3BvbnNlRGVjb21wcmVzc2lvblBvbGljeVwiLFxuICAgICAgICBcIktlZXBBbGl2ZVBvbGljeVwiLFxuICAgICAgICBcIkRlc2VyaWFsaXphdGlvblBvbGljeVwiLFxuICAgIF07XG4gICAgY29uc3QgbW9ja0h0dHBDbGllbnQgPSB7XG4gICAgICAgIHNlbmRSZXF1ZXN0OiBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICByZXF1ZXN0LFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHJlcXVlc3QuaGVhZGVycy5jbG9uZSgpLFxuICAgICAgICAgICAgICAgIHN0YXR1czogNTAwLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICB9O1xuICAgIGNvbnN0IG1vY2tSZXF1ZXN0UG9saWN5T3B0aW9ucyA9IHtcbiAgICAgICAgbG9nKF9sb2dMZXZlbCwgX21lc3NhZ2UpIHtcbiAgICAgICAgICAgIC8qIGRvIG5vdGhpbmcgKi9cbiAgICAgICAgfSxcbiAgICAgICAgc2hvdWxkTG9nKF9sb2dMZXZlbCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9LFxuICAgIH07XG4gICAgY29uc3QgcG9saWN5SW5zdGFuY2UgPSBmYWN0b3J5LmNyZWF0ZShtb2NrSHR0cENsaWVudCwgbW9ja1JlcXVlc3RQb2xpY3lPcHRpb25zKTtcbiAgICBjb25zdCBwb2xpY3lOYW1lID0gcG9saWN5SW5zdGFuY2UuY29uc3RydWN0b3IubmFtZTtcbiAgICAvLyBidW5kbGVycyBzb21ldGltZXMgYWRkIGEgY3VzdG9tIHN1ZmZpeCB0byB0aGUgY2xhc3MgbmFtZSB0byBtYWtlIGl0IHVuaXF1ZVxuICAgIHJldHVybiBrbm93blBvbGljaWVzLnNvbWUoKGtub3duUG9saWN5TmFtZSkgPT4ge1xuICAgICAgICByZXR1cm4gcG9saWN5TmFtZS5zdGFydHNXaXRoKGtub3duUG9saWN5TmFtZSk7XG4gICAgfSk7XG59XG5cbi8qXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAqXG4gKiBDb2RlIGdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEF1dG9SZXN0IENvZGUgR2VuZXJhdG9yLlxuICogQ2hhbmdlcyBtYXkgY2F1c2UgaW5jb3JyZWN0IGJlaGF2aW9yIGFuZCB3aWxsIGJlIGxvc3QgaWYgdGhlIGNvZGUgaXMgcmVnZW5lcmF0ZWQuXG4gKi9cbmNvbnN0IEJsb2JTZXJ2aWNlUHJvcGVydGllcyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iU2VydmljZVByb3BlcnRpZXNcIixcbiAgICB4bWxOYW1lOiBcIlN0b3JhZ2VTZXJ2aWNlUHJvcGVydGllc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JTZXJ2aWNlUHJvcGVydGllc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGJsb2JBbmFseXRpY3NMb2dnaW5nOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTG9nZ2luZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTG9nZ2luZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIkxvZ2dpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhvdXJNZXRyaWNzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiSG91ck1ldHJpY3NcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkhvdXJNZXRyaWNzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiTWV0cmljc1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbWludXRlTWV0cmljczoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIk1pbnV0ZU1ldHJpY3NcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIk1pbnV0ZU1ldHJpY3NcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJNZXRyaWNzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3JzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ29yc1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQ29yc1wiLFxuICAgICAgICAgICAgICAgIHhtbElzV3JhcHBlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxFbGVtZW50TmFtZTogXCJDb3JzUnVsZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTZXF1ZW5jZVwiLFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiQ29yc1J1bGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZWZhdWx0U2VydmljZVZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJEZWZhdWx0U2VydmljZVZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkRlZmF1bHRTZXJ2aWNlVmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlbGV0ZVJldGVudGlvblBvbGljeToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkRlbGV0ZVJldGVudGlvblBvbGljeVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiRGVsZXRlUmV0ZW50aW9uUG9saWN5XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiUmV0ZW50aW9uUG9saWN5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdGF0aWNXZWJzaXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiU3RhdGljV2Vic2l0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiU3RhdGljV2Vic2l0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIlN0YXRpY1dlYnNpdGVcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IExvZ2dpbmcgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiTG9nZ2luZ1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkxvZ2dpbmdcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiVmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiVmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlbGV0ZVByb3BlcnR5OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRGVsZXRlXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJEZWxldGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVhZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlJlYWRcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlJlYWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgd3JpdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJXcml0ZVwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiV3JpdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmV0ZW50aW9uUG9saWN5OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiUmV0ZW50aW9uUG9saWN5XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJSZXRlbnRpb25Qb2xpY3lcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJSZXRlbnRpb25Qb2xpY3lcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFJldGVudGlvblBvbGljeSA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJSZXRlbnRpb25Qb2xpY3lcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJSZXRlbnRpb25Qb2xpY3lcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlbmFibGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRW5hYmxlZFwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiRW5hYmxlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXlzOiB7XG4gICAgICAgICAgICAgICAgY29uc3RyYWludHM6IHtcbiAgICAgICAgICAgICAgICAgICAgSW5jbHVzaXZlTWluaW11bTogMSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkRheXNcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkRheXNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBNZXRyaWNzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIk1ldHJpY3NcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJNZXRyaWNzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmFibGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRW5hYmxlZFwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiRW5hYmxlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpbmNsdWRlQVBJczoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkluY2x1ZGVBUElzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJJbmNsdWRlQVBJc1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXRlbnRpb25Qb2xpY3k6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJSZXRlbnRpb25Qb2xpY3lcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlJldGVudGlvblBvbGljeVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIlJldGVudGlvblBvbGljeVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29yc1J1bGUgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29yc1J1bGVcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb3JzUnVsZVwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGFsbG93ZWRPcmlnaW5zOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQWxsb3dlZE9yaWdpbnNcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkFsbG93ZWRPcmlnaW5zXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWxsb3dlZE1ldGhvZHM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJBbGxvd2VkTWV0aG9kc1wiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQWxsb3dlZE1ldGhvZHNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhbGxvd2VkSGVhZGVyczoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkFsbG93ZWRIZWFkZXJzXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJBbGxvd2VkSGVhZGVyc1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGV4cG9zZWRIZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRXhwb3NlZEhlYWRlcnNcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkV4cG9zZWRIZWFkZXJzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbWF4QWdlSW5TZWNvbmRzOiB7XG4gICAgICAgICAgICAgICAgY29uc3RyYWludHM6IHtcbiAgICAgICAgICAgICAgICAgICAgSW5jbHVzaXZlTWluaW11bTogMCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIk1heEFnZUluU2Vjb25kc1wiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTWF4QWdlSW5TZWNvbmRzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgU3RhdGljV2Vic2l0ZSA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJTdGF0aWNXZWJzaXRlXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiU3RhdGljV2Vic2l0ZVwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVuYWJsZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJFbmFibGVkXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJFbmFibGVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGluZGV4RG9jdW1lbnQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJJbmRleERvY3VtZW50XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJJbmRleERvY3VtZW50XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JEb2N1bWVudDQwNFBhdGg6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJFcnJvckRvY3VtZW50NDA0UGF0aFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiRXJyb3JEb2N1bWVudDQwNFBhdGhcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZWZhdWx0SW5kZXhEb2N1bWVudFBhdGg6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJEZWZhdWx0SW5kZXhEb2N1bWVudFBhdGhcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkRlZmF1bHRJbmRleERvY3VtZW50UGF0aFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFN0b3JhZ2VFcnJvciA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJTdG9yYWdlRXJyb3JcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJTdG9yYWdlRXJyb3JcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBtZXNzYWdlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTWVzc2FnZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTWVzc2FnZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJDb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJDb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYXV0aGVudGljYXRpb25FcnJvckRldGFpbDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkF1dGhlbnRpY2F0aW9uRXJyb3JEZXRhaWxcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkF1dGhlbnRpY2F0aW9uRXJyb3JEZXRhaWxcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iU2VydmljZVN0YXRpc3RpY3MgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYlNlcnZpY2VTdGF0aXN0aWNzXCIsXG4gICAgeG1sTmFtZTogXCJTdG9yYWdlU2VydmljZVN0YXRzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYlNlcnZpY2VTdGF0aXN0aWNzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZ2VvUmVwbGljYXRpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJHZW9SZXBsaWNhdGlvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiR2VvUmVwbGljYXRpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJHZW9SZXBsaWNhdGlvblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgR2VvUmVwbGljYXRpb24gPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiR2VvUmVwbGljYXRpb25cIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJHZW9SZXBsaWNhdGlvblwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHN0YXR1czoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiU3RhdHVzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wibGl2ZVwiLCBcImJvb3RzdHJhcFwiLCBcInVuYXZhaWxhYmxlXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdFN5bmNPbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkxhc3RTeW5jVGltZVwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTGFzdFN5bmNUaW1lXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgTGlzdENvbnRhaW5lcnNTZWdtZW50UmVzcG9uc2UgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiTGlzdENvbnRhaW5lcnNTZWdtZW50UmVzcG9uc2VcIixcbiAgICB4bWxOYW1lOiBcIkVudW1lcmF0aW9uUmVzdWx0c1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkxpc3RDb250YWluZXJzU2VnbWVudFJlc3BvbnNlXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgc2VydmljZUVuZHBvaW50OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiU2VydmljZUVuZHBvaW50XCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJTZXJ2aWNlRW5kcG9pbnRcIixcbiAgICAgICAgICAgICAgICB4bWxJc0F0dHJpYnV0ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcmVmaXg6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJQcmVmaXhcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlByZWZpeFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1hcmtlcjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIk1hcmtlclwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTWFya2VyXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbWF4UGFnZVNpemU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJNYXhSZXN1bHRzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJNYXhSZXN1bHRzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGFpbmVySXRlbXM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJJdGVtc1wiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQ29udGFpbmVyc1wiLFxuICAgICAgICAgICAgICAgIHhtbElzV3JhcHBlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxFbGVtZW50TmFtZTogXCJDb250YWluZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU2VxdWVuY2VcIixcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lckl0ZW1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250aW51YXRpb25Ub2tlbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIk5leHRNYXJrZXJcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIk5leHRNYXJrZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJJdGVtID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lckl0ZW1cIixcbiAgICB4bWxOYW1lOiBcIkNvbnRhaW5lclwiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lckl0ZW1cIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBuYW1lOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTmFtZVwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTmFtZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlbGV0ZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJEZWxldGVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJEZWxldGVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJWZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJWZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlByb3BlcnRpZXNcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlByb3BlcnRpZXNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJQcm9wZXJ0aWVzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIk1ldGFkYXRhXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJNZXRhZGF0YVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEaWN0aW9uYXJ5XCIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB7IHR5cGU6IHsgbmFtZTogXCJTdHJpbmdcIiB9IH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJQcm9wZXJ0aWVzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lclByb3BlcnRpZXNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJQcm9wZXJ0aWVzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTGFzdC1Nb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTGFzdC1Nb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJFdGFnXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJFdGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVhc2VTdGF0dXM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJMZWFzZVN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTGVhc2VTdGF0dXNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJsb2NrZWRcIiwgXCJ1bmxvY2tlZFwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlYXNlU3RhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJMZWFzZVN0YXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJMZWFzZVN0YXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJhdmFpbGFibGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibGVhc2VkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImV4cGlyZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYnJlYWtpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYnJva2VuXCIsXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZWFzZUR1cmF0aW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTGVhc2VEdXJhdGlvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTGVhc2VEdXJhdGlvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcImluZmluaXRlXCIsIFwiZml4ZWRcIl0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwdWJsaWNBY2Nlc3M6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJQdWJsaWNBY2Nlc3NcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlB1YmxpY0FjY2Vzc1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcImNvbnRhaW5lclwiLCBcImJsb2JcIl0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBoYXNJbW11dGFiaWxpdHlQb2xpY3k6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJIYXNJbW11dGFiaWxpdHlQb2xpY3lcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkhhc0ltbXV0YWJpbGl0eVBvbGljeVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBoYXNMZWdhbEhvbGQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJIYXNMZWdhbEhvbGRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkhhc0xlZ2FsSG9sZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZWZhdWx0RW5jcnlwdGlvblNjb3BlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRGVmYXVsdEVuY3J5cHRpb25TY29wZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiRGVmYXVsdEVuY3J5cHRpb25TY29wZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByZXZlbnRFbmNyeXB0aW9uU2NvcGVPdmVycmlkZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkRlbnlFbmNyeXB0aW9uU2NvcGVPdmVycmlkZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiRGVueUVuY3J5cHRpb25TY29wZU92ZXJyaWRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlbGV0ZWRPbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkRlbGV0ZWRUaW1lXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJEZWxldGVkVGltZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlbWFpbmluZ1JldGVudGlvbkRheXM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJSZW1haW5pbmdSZXRlbnRpb25EYXlzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJSZW1haW5pbmdSZXRlbnRpb25EYXlzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNJbW11dGFibGVTdG9yYWdlV2l0aFZlcnNpb25pbmdFbmFibGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiSW1tdXRhYmxlU3RvcmFnZVdpdGhWZXJzaW9uaW5nRW5hYmxlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiSW1tdXRhYmxlU3RvcmFnZVdpdGhWZXJzaW9uaW5nRW5hYmxlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBLZXlJbmZvID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIktleUluZm9cIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJLZXlJbmZvXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgc3RhcnRzT246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJTdGFydFwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiU3RhcnRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBleHBpcmVzT246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJFeHBpcnlcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkV4cGlyeVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFVzZXJEZWxlZ2F0aW9uS2V5ID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlVzZXJEZWxlZ2F0aW9uS2V5XCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiVXNlckRlbGVnYXRpb25LZXlcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBzaWduZWRPYmplY3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNpZ25lZE9pZFwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiU2lnbmVkT2lkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2lnbmVkVGVuYW50SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJTaWduZWRUaWRcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlNpZ25lZFRpZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNpZ25lZFN0YXJ0c09uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiU2lnbmVkU3RhcnRcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlNpZ25lZFN0YXJ0XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2lnbmVkRXhwaXJlc09uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiU2lnbmVkRXhwaXJ5XCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJTaWduZWRFeHBpcnlcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzaWduZWRTZXJ2aWNlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiU2lnbmVkU2VydmljZVwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiU2lnbmVkU2VydmljZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNpZ25lZFZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJTaWduZWRWZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJTaWduZWRWZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJWYWx1ZVwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiVmFsdWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBGaWx0ZXJCbG9iU2VnbWVudCA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJGaWx0ZXJCbG9iU2VnbWVudFwiLFxuICAgIHhtbE5hbWU6IFwiRW51bWVyYXRpb25SZXN1bHRzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiRmlsdGVyQmxvYlNlZ21lbnRcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBzZXJ2aWNlRW5kcG9pbnQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJTZXJ2aWNlRW5kcG9pbnRcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlNlcnZpY2VFbmRwb2ludFwiLFxuICAgICAgICAgICAgICAgIHhtbElzQXR0cmlidXRlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHdoZXJlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiV2hlcmVcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIldoZXJlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmxvYnM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9ic1wiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQmxvYnNcIixcbiAgICAgICAgICAgICAgICB4bWxJc1dyYXBwZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sRWxlbWVudE5hbWU6IFwiQmxvYlwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTZXF1ZW5jZVwiLFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiRmlsdGVyQmxvYkl0ZW1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250aW51YXRpb25Ub2tlbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIk5leHRNYXJrZXJcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIk5leHRNYXJrZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBGaWx0ZXJCbG9iSXRlbSA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJGaWx0ZXJCbG9iSXRlbVwiLFxuICAgIHhtbE5hbWU6IFwiQmxvYlwiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkZpbHRlckJsb2JJdGVtXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgbmFtZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIk5hbWVcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIk5hbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250YWluZXJOYW1lOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyTmFtZVwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQ29udGFpbmVyTmFtZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRhZ3M6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJUYWdzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJUYWdzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiQmxvYlRhZ3NcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JUYWdzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JUYWdzXCIsXG4gICAgeG1sTmFtZTogXCJUYWdzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYlRhZ3NcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBibG9iVGFnU2V0OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYlRhZ1NldFwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiVGFnU2V0XCIsXG4gICAgICAgICAgICAgICAgeG1sSXNXcmFwcGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbEVsZW1lbnROYW1lOiBcIlRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTZXF1ZW5jZVwiLFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiQmxvYlRhZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JUYWcgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYlRhZ1wiLFxuICAgIHhtbE5hbWU6IFwiVGFnXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYlRhZ1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGtleToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIktleVwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiS2V5XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJWYWx1ZVwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiVmFsdWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBTaWduZWRJZGVudGlmaWVyID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNpZ25lZElkZW50aWZpZXJcIixcbiAgICB4bWxOYW1lOiBcIlNpZ25lZElkZW50aWZpZXJcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJTaWduZWRJZGVudGlmaWVyXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgaWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJJZFwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiSWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhY2Nlc3NQb2xpY3k6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJBY2Nlc3NQb2xpY3lcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkFjY2Vzc1BvbGljeVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIkFjY2Vzc1BvbGljeVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQWNjZXNzUG9saWN5ID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkFjY2Vzc1BvbGljeVwiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkFjY2Vzc1BvbGljeVwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHN0YXJ0c09uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiU3RhcnRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlN0YXJ0XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXhwaXJlc09uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRXhwaXJ5XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJFeHBpcnlcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwZXJtaXNzaW9uczoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlBlcm1pc3Npb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlBlcm1pc3Npb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBMaXN0QmxvYnNGbGF0U2VnbWVudFJlc3BvbnNlID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkxpc3RCbG9ic0ZsYXRTZWdtZW50UmVzcG9uc2VcIixcbiAgICB4bWxOYW1lOiBcIkVudW1lcmF0aW9uUmVzdWx0c1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkxpc3RCbG9ic0ZsYXRTZWdtZW50UmVzcG9uc2VcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBzZXJ2aWNlRW5kcG9pbnQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJTZXJ2aWNlRW5kcG9pbnRcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlNlcnZpY2VFbmRwb2ludFwiLFxuICAgICAgICAgICAgICAgIHhtbElzQXR0cmlidXRlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRhaW5lck5hbWU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJOYW1lXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJDb250YWluZXJOYW1lXCIsXG4gICAgICAgICAgICAgICAgeG1sSXNBdHRyaWJ1dGU6IHRydWUsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJlZml4OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiUHJlZml4XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJQcmVmaXhcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtYXJrZXI6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJNYXJrZXJcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIk1hcmtlclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1heFBhZ2VTaXplOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTWF4UmVzdWx0c1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTWF4UmVzdWx0c1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNlZ21lbnQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJTZWdtZW50XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJCbG9ic1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JGbGF0TGlzdFNlZ21lbnRcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRpbnVhdGlvblRva2VuOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTmV4dE1hcmtlclwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTmV4dE1hcmtlclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JGbGF0TGlzdFNlZ21lbnQgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYkZsYXRMaXN0U2VnbWVudFwiLFxuICAgIHhtbE5hbWU6IFwiQmxvYnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iRmxhdExpc3RTZWdtZW50XCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgYmxvYkl0ZW1zOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYkl0ZW1zXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJCbG9iSXRlbXNcIixcbiAgICAgICAgICAgICAgICB4bWxFbGVtZW50TmFtZTogXCJCbG9iXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlNlcXVlbmNlXCIsXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJCbG9iSXRlbUludGVybmFsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYkl0ZW1JbnRlcm5hbCA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iSXRlbUludGVybmFsXCIsXG4gICAgeG1sTmFtZTogXCJCbG9iXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYkl0ZW1JbnRlcm5hbFwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIG5hbWU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJOYW1lXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJOYW1lXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiQmxvYk5hbWVcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlbGV0ZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJEZWxldGVkXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJEZWxldGVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNuYXBzaG90OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiU25hcHNob3RcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlNuYXBzaG90XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbklkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiVmVyc2lvbklkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJWZXJzaW9uSWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc0N1cnJlbnRWZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiSXNDdXJyZW50VmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiSXNDdXJyZW50VmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiUHJvcGVydGllc1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiUHJvcGVydGllc1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JQcm9wZXJ0aWVzSW50ZXJuYWxcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTWV0YWRhdGFcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIk1ldGFkYXRhXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRpY3Rpb25hcnlcIixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHsgdHlwZTogeyBuYW1lOiBcIlN0cmluZ1wiIH0gfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JUYWdzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYlRhZ3NcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlRhZ3NcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJCbG9iVGFnc1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb2JqZWN0UmVwbGljYXRpb25NZXRhZGF0YToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIk9iamVjdFJlcGxpY2F0aW9uTWV0YWRhdGFcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIk9yTWV0YWRhdGFcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGljdGlvbmFyeVwiLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogeyB0eXBlOiB7IG5hbWU6IFwiU3RyaW5nXCIgfSB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaGFzVmVyc2lvbnNPbmx5OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiSGFzVmVyc2lvbnNPbmx5XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJIYXNWZXJzaW9uc09ubHlcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYk5hbWUgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYk5hbWVcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iTmFtZVwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVuY29kZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJFbmNvZGVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJFbmNvZGVkXCIsXG4gICAgICAgICAgICAgICAgeG1sSXNBdHRyaWJ1dGU6IHRydWUsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50XCIsXG4gICAgICAgICAgICAgICAgeG1sSXNNc1RleHQ6IHRydWUsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlByb3BlcnRpZXNJbnRlcm5hbCA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iUHJvcGVydGllc0ludGVybmFsXCIsXG4gICAgeG1sTmFtZTogXCJQcm9wZXJ0aWVzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYlByb3BlcnRpZXNJbnRlcm5hbFwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNyZWF0ZWRPbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNyZWF0aW9uLVRpbWVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkNyZWF0aW9uLVRpbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJMYXN0LU1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJMYXN0LU1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkV0YWdcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50TGVuZ3RoOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGVudC1MZW5ndGhcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkNvbnRlbnQtTGVuZ3RoXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudFR5cGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJDb250ZW50LVR5cGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkNvbnRlbnQtVHlwZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnRFbmNvZGluZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRlbnQtRW5jb2RpbmdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkNvbnRlbnQtRW5jb2RpbmdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50TGFuZ3VhZ2U6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJDb250ZW50LUxhbmd1YWdlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJDb250ZW50LUxhbmd1YWdlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudE1ENToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRlbnQtTUQ1XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJDb250ZW50LU1ENVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnREaXNwb3NpdGlvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRlbnQtRGlzcG9zaXRpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkNvbnRlbnQtRGlzcG9zaXRpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjYWNoZUNvbnRyb2w6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJDYWNoZS1Db250cm9sXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJDYWNoZS1Db250cm9sXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmxvYlNlcXVlbmNlTnVtYmVyOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLXNlcXVlbmNlLW51bWJlclwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLXNlcXVlbmNlLW51bWJlclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JUeXBlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYlR5cGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkJsb2JUeXBlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wiQmxvY2tCbG9iXCIsIFwiUGFnZUJsb2JcIiwgXCJBcHBlbmRCbG9iXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVhc2VTdGF0dXM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJMZWFzZVN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTGVhc2VTdGF0dXNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJsb2NrZWRcIiwgXCJ1bmxvY2tlZFwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlYXNlU3RhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJMZWFzZVN0YXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJMZWFzZVN0YXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJhdmFpbGFibGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibGVhc2VkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImV4cGlyZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYnJlYWtpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYnJva2VuXCIsXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZWFzZUR1cmF0aW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTGVhc2VEdXJhdGlvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTGVhc2VEdXJhdGlvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcImluZmluaXRlXCIsIFwiZml4ZWRcIl0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3B5SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJDb3B5SWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkNvcHlJZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvcHlTdGF0dXM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJDb3B5U3RhdHVzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJDb3B5U3RhdHVzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wicGVuZGluZ1wiLCBcInN1Y2Nlc3NcIiwgXCJhYm9ydGVkXCIsIFwiZmFpbGVkXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29weVNvdXJjZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvcHlTb3VyY2VcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkNvcHlTb3VyY2VcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3B5UHJvZ3Jlc3M6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJDb3B5UHJvZ3Jlc3NcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkNvcHlQcm9ncmVzc1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvcHlDb21wbGV0ZWRPbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvcHlDb21wbGV0aW9uVGltZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQ29weUNvbXBsZXRpb25UaW1lXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29weVN0YXR1c0Rlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ29weVN0YXR1c0Rlc2NyaXB0aW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJDb3B5U3RhdHVzRGVzY3JpcHRpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXJ2ZXJFbmNyeXB0ZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJTZXJ2ZXJFbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlNlcnZlckVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpbmNyZW1lbnRhbENvcHk6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJJbmNyZW1lbnRhbENvcHlcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkluY3JlbWVudGFsQ29weVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZXN0aW5hdGlvblNuYXBzaG90OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRGVzdGluYXRpb25TbmFwc2hvdFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiRGVzdGluYXRpb25TbmFwc2hvdFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlbGV0ZWRPbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkRlbGV0ZWRUaW1lXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJEZWxldGVkVGltZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlbWFpbmluZ1JldGVudGlvbkRheXM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJSZW1haW5pbmdSZXRlbnRpb25EYXlzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJSZW1haW5pbmdSZXRlbnRpb25EYXlzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWNjZXNzVGllcjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkFjY2Vzc1RpZXJcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkFjY2Vzc1RpZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlA0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlA2XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlAxMFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJQMTVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiUDIwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlAzMFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJQNDBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiUDUwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlA2MFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJQNzBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiUDgwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkhvdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJDb29sXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkFyY2hpdmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiQ29sZFwiLFxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWNjZXNzVGllckluZmVycmVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQWNjZXNzVGllckluZmVycmVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJBY2Nlc3NUaWVySW5mZXJyZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYXJjaGl2ZVN0YXR1czoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkFyY2hpdmVTdGF0dXNcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkFyY2hpdmVTdGF0dXNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICBcInJlaHlkcmF0ZS1wZW5kaW5nLXRvLWhvdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJyZWh5ZHJhdGUtcGVuZGluZy10by1jb29sXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInJlaHlkcmF0ZS1wZW5kaW5nLXRvLWNvbGRcIixcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGN1c3RvbWVyUHJvdmlkZWRLZXlTaGEyNTY6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJDdXN0b21lclByb3ZpZGVkS2V5U2hhMjU2XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJDdXN0b21lclByb3ZpZGVkS2V5U2hhMjU2XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRW5jcnlwdGlvblNjb3BlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJFbmNyeXB0aW9uU2NvcGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhY2Nlc3NUaWVyQ2hhbmdlZE9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQWNjZXNzVGllckNoYW5nZVRpbWVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkFjY2Vzc1RpZXJDaGFuZ2VUaW1lXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGFnQ291bnQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJUYWdDb3VudFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiVGFnQ291bnRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBleHBpcmVzT246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJFeHBpcnktVGltZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiRXhwaXJ5LVRpbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc1NlYWxlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNlYWxlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiU2VhbGVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlaHlkcmF0ZVByaW9yaXR5OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiUmVoeWRyYXRlUHJpb3JpdHlcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlJlaHlkcmF0ZVByaW9yaXR5XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wiSGlnaFwiLCBcIlN0YW5kYXJkXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdEFjY2Vzc2VkT246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJMYXN0QWNjZXNzVGltZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTGFzdEFjY2Vzc1RpbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpbW11dGFiaWxpdHlQb2xpY3lFeHBpcmVzT246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJJbW11dGFiaWxpdHlQb2xpY3lVbnRpbERhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkltbXV0YWJpbGl0eVBvbGljeVVudGlsRGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGltbXV0YWJpbGl0eVBvbGljeU1vZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJJbW11dGFiaWxpdHlQb2xpY3lNb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJJbW11dGFiaWxpdHlQb2xpY3lNb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wiTXV0YWJsZVwiLCBcIlVubG9ja2VkXCIsIFwiTG9ja2VkXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVnYWxIb2xkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTGVnYWxIb2xkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJMZWdhbEhvbGRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgTGlzdEJsb2JzSGllcmFyY2h5U2VnbWVudFJlc3BvbnNlID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkxpc3RCbG9ic0hpZXJhcmNoeVNlZ21lbnRSZXNwb25zZVwiLFxuICAgIHhtbE5hbWU6IFwiRW51bWVyYXRpb25SZXN1bHRzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiTGlzdEJsb2JzSGllcmFyY2h5U2VnbWVudFJlc3BvbnNlXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgc2VydmljZUVuZHBvaW50OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiU2VydmljZUVuZHBvaW50XCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJTZXJ2aWNlRW5kcG9pbnRcIixcbiAgICAgICAgICAgICAgICB4bWxJc0F0dHJpYnV0ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250YWluZXJOYW1lOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyTmFtZVwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQ29udGFpbmVyTmFtZVwiLFxuICAgICAgICAgICAgICAgIHhtbElzQXR0cmlidXRlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByZWZpeDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlByZWZpeFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiUHJlZml4XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbWFya2VyOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTWFya2VyXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJNYXJrZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtYXhQYWdlU2l6ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIk1heFJlc3VsdHNcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIk1heFJlc3VsdHNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZWxpbWl0ZXI6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJEZWxpbWl0ZXJcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkRlbGltaXRlclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNlZ21lbnQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJTZWdtZW50XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJCbG9ic1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JIaWVyYXJjaHlMaXN0U2VnbWVudFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGludWF0aW9uVG9rZW46IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJOZXh0TWFya2VyXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJOZXh0TWFya2VyXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYkhpZXJhcmNoeUxpc3RTZWdtZW50ID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JIaWVyYXJjaHlMaXN0U2VnbWVudFwiLFxuICAgIHhtbE5hbWU6IFwiQmxvYnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iSGllcmFyY2h5TGlzdFNlZ21lbnRcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBibG9iUHJlZml4ZXM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iUHJlZml4ZXNcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkJsb2JQcmVmaXhlc1wiLFxuICAgICAgICAgICAgICAgIHhtbEVsZW1lbnROYW1lOiBcIkJsb2JQcmVmaXhcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU2VxdWVuY2VcIixcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JQcmVmaXhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBibG9iSXRlbXM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iSXRlbXNcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkJsb2JJdGVtc1wiLFxuICAgICAgICAgICAgICAgIHhtbEVsZW1lbnROYW1lOiBcIkJsb2JcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU2VxdWVuY2VcIixcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JJdGVtSW50ZXJuYWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iUHJlZml4ID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JQcmVmaXhcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iUHJlZml4XCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgbmFtZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIk5hbWVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIk5hbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJCbG9iTmFtZVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvY2tMb29rdXBMaXN0ID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2NrTG9va3VwTGlzdFwiLFxuICAgIHhtbE5hbWU6IFwiQmxvY2tMaXN0XCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvY2tMb29rdXBMaXN0XCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgY29tbWl0dGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ29tbWl0dGVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJDb21taXR0ZWRcIixcbiAgICAgICAgICAgICAgICB4bWxFbGVtZW50TmFtZTogXCJDb21taXR0ZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU2VxdWVuY2VcIixcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdW5jb21taXR0ZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJVbmNvbW1pdHRlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiVW5jb21taXR0ZWRcIixcbiAgICAgICAgICAgICAgICB4bWxFbGVtZW50TmFtZTogXCJVbmNvbW1pdHRlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTZXF1ZW5jZVwiLFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXRlc3Q6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJMYXRlc3RcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkxhdGVzdFwiLFxuICAgICAgICAgICAgICAgIHhtbEVsZW1lbnROYW1lOiBcIkxhdGVzdFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTZXF1ZW5jZVwiLFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9ja0xpc3QgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvY2tMaXN0XCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvY2tMaXN0XCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgY29tbWl0dGVkQmxvY2tzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ29tbWl0dGVkQmxvY2tzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJDb21taXR0ZWRCbG9ja3NcIixcbiAgICAgICAgICAgICAgICB4bWxJc1dyYXBwZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sRWxlbWVudE5hbWU6IFwiQmxvY2tcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU2VxdWVuY2VcIixcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2NrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdW5jb21taXR0ZWRCbG9ja3M6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJVbmNvbW1pdHRlZEJsb2Nrc1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiVW5jb21taXR0ZWRCbG9ja3NcIixcbiAgICAgICAgICAgICAgICB4bWxJc1dyYXBwZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sRWxlbWVudE5hbWU6IFwiQmxvY2tcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU2VxdWVuY2VcIixcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2NrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvY2sgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvY2tcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9ja1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIG5hbWU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJOYW1lXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJOYW1lXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2l6ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNpemVcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlNpemVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBQYWdlTGlzdCA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJQYWdlTGlzdFwiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlBhZ2VMaXN0XCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgcGFnZVJhbmdlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiUGFnZVJhbmdlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJQYWdlUmFuZ2VcIixcbiAgICAgICAgICAgICAgICB4bWxFbGVtZW50TmFtZTogXCJQYWdlUmFuZ2VcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU2VxdWVuY2VcIixcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIlBhZ2VSYW5nZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsZWFyUmFuZ2U6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJDbGVhclJhbmdlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJDbGVhclJhbmdlXCIsXG4gICAgICAgICAgICAgICAgeG1sRWxlbWVudE5hbWU6IFwiQ2xlYXJSYW5nZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTZXF1ZW5jZVwiLFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiQ2xlYXJSYW5nZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRpbnVhdGlvblRva2VuOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiTmV4dE1hcmtlclwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiTmV4dE1hcmtlclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFBhZ2VSYW5nZSA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJQYWdlUmFuZ2VcIixcbiAgICB4bWxOYW1lOiBcIlBhZ2VSYW5nZVwiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlBhZ2VSYW5nZVwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHN0YXJ0OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiU3RhcnRcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlN0YXJ0XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5kOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiRW5kXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJFbmRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDbGVhclJhbmdlID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNsZWFyUmFuZ2VcIixcbiAgICB4bWxOYW1lOiBcIkNsZWFyUmFuZ2VcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDbGVhclJhbmdlXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgc3RhcnQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJTdGFydFwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiU3RhcnRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJFbmRcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkVuZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFF1ZXJ5UmVxdWVzdCA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJRdWVyeVJlcXVlc3RcIixcbiAgICB4bWxOYW1lOiBcIlF1ZXJ5UmVxdWVzdFwiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlF1ZXJ5UmVxdWVzdFwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHF1ZXJ5VHlwZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlF1ZXJ5VHlwZVwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiUXVlcnlUeXBlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXhwcmVzc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkV4cHJlc3Npb25cIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkV4cHJlc3Npb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpbnB1dFNlcmlhbGl6YXRpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJJbnB1dFNlcmlhbGl6YXRpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIklucHV0U2VyaWFsaXphdGlvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIlF1ZXJ5U2VyaWFsaXphdGlvblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb3V0cHV0U2VyaWFsaXphdGlvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIk91dHB1dFNlcmlhbGl6YXRpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIk91dHB1dFNlcmlhbGl6YXRpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJRdWVyeVNlcmlhbGl6YXRpb25cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFF1ZXJ5U2VyaWFsaXphdGlvbiA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJRdWVyeVNlcmlhbGl6YXRpb25cIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJRdWVyeVNlcmlhbGl6YXRpb25cIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBmb3JtYXQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJGb3JtYXRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkZvcm1hdFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIlF1ZXJ5Rm9ybWF0XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBRdWVyeUZvcm1hdCA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJRdWVyeUZvcm1hdFwiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlF1ZXJ5Rm9ybWF0XCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlR5cGVcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlR5cGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJkZWxpbWl0ZWRcIiwgXCJqc29uXCIsIFwiYXJyb3dcIiwgXCJwYXJxdWV0XCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVsaW1pdGVkVGV4dENvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJEZWxpbWl0ZWRUZXh0Q29uZmlndXJhdGlvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiRGVsaW1pdGVkVGV4dENvbmZpZ3VyYXRpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJEZWxpbWl0ZWRUZXh0Q29uZmlndXJhdGlvblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAganNvblRleHRDb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiSnNvblRleHRDb25maWd1cmF0aW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJKc29uVGV4dENvbmZpZ3VyYXRpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJKc29uVGV4dENvbmZpZ3VyYXRpb25cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFycm93Q29uZmlndXJhdGlvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkFycm93Q29uZmlndXJhdGlvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQXJyb3dDb25maWd1cmF0aW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiQXJyb3dDb25maWd1cmF0aW9uXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwYXJxdWV0VGV4dENvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJQYXJxdWV0VGV4dENvbmZpZ3VyYXRpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlBhcnF1ZXRUZXh0Q29uZmlndXJhdGlvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEaWN0aW9uYXJ5XCIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB7IHR5cGU6IHsgbmFtZTogXCJhbnlcIiB9IH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBEZWxpbWl0ZWRUZXh0Q29uZmlndXJhdGlvbiA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJEZWxpbWl0ZWRUZXh0Q29uZmlndXJhdGlvblwiLFxuICAgIHhtbE5hbWU6IFwiRGVsaW1pdGVkVGV4dENvbmZpZ3VyYXRpb25cIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJEZWxpbWl0ZWRUZXh0Q29uZmlndXJhdGlvblwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNvbHVtblNlcGFyYXRvcjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbHVtblNlcGFyYXRvclwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiQ29sdW1uU2VwYXJhdG9yXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZmllbGRRdW90ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkZpZWxkUXVvdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIkZpZWxkUXVvdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZWNvcmRTZXBhcmF0b3I6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJSZWNvcmRTZXBhcmF0b3JcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlJlY29yZFNlcGFyYXRvclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVzY2FwZUNoYXI6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJFc2NhcGVDaGFyXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJFc2NhcGVDaGFyXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaGVhZGVyc1ByZXNlbnQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJIZWFkZXJzUHJlc2VudFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiSGFzSGVhZGVyc1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBKc29uVGV4dENvbmZpZ3VyYXRpb24gPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiSnNvblRleHRDb25maWd1cmF0aW9uXCIsXG4gICAgeG1sTmFtZTogXCJKc29uVGV4dENvbmZpZ3VyYXRpb25cIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJKc29uVGV4dENvbmZpZ3VyYXRpb25cIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICByZWNvcmRTZXBhcmF0b3I6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJSZWNvcmRTZXBhcmF0b3JcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIlJlY29yZFNlcGFyYXRvclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEFycm93Q29uZmlndXJhdGlvbiA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJBcnJvd0NvbmZpZ3VyYXRpb25cIixcbiAgICB4bWxOYW1lOiBcIkFycm93Q29uZmlndXJhdGlvblwiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkFycm93Q29uZmlndXJhdGlvblwiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHNjaGVtYToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNjaGVtYVwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiU2NoZW1hXCIsXG4gICAgICAgICAgICAgICAgeG1sSXNXcmFwcGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbEVsZW1lbnROYW1lOiBcIkZpZWxkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlNlcXVlbmNlXCIsXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJBcnJvd0ZpZWxkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQXJyb3dGaWVsZCA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJBcnJvd0ZpZWxkXCIsXG4gICAgeG1sTmFtZTogXCJGaWVsZFwiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkFycm93RmllbGRcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiVHlwZVwiLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiVHlwZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5hbWU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJOYW1lXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJOYW1lXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJlY2lzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiUHJlY2lzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJQcmVjaXNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzY2FsZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNjYWxlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJTY2FsZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFNlcnZpY2VTZXRQcm9wZXJ0aWVzSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJTZXJ2aWNlX3NldFByb3BlcnRpZXNIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiU2VydmljZVNldFByb3BlcnRpZXNIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBTZXJ2aWNlU2V0UHJvcGVydGllc0V4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiU2VydmljZV9zZXRQcm9wZXJ0aWVzRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlNlcnZpY2VTZXRQcm9wZXJ0aWVzRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgU2VydmljZUdldFByb3BlcnRpZXNIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNlcnZpY2VfZ2V0UHJvcGVydGllc0hlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJTZXJ2aWNlR2V0UHJvcGVydGllc0hlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFNlcnZpY2VHZXRQcm9wZXJ0aWVzRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJTZXJ2aWNlX2dldFByb3BlcnRpZXNFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiU2VydmljZUdldFByb3BlcnRpZXNFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBTZXJ2aWNlR2V0U3RhdGlzdGljc0hlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiU2VydmljZV9nZXRTdGF0aXN0aWNzSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlNlcnZpY2VHZXRTdGF0aXN0aWNzSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBTZXJ2aWNlR2V0U3RhdGlzdGljc0V4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiU2VydmljZV9nZXRTdGF0aXN0aWNzRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlNlcnZpY2VHZXRTdGF0aXN0aWNzRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgU2VydmljZUxpc3RDb250YWluZXJzU2VnbWVudEhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiU2VydmljZV9saXN0Q29udGFpbmVyc1NlZ21lbnRIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiU2VydmljZUxpc3RDb250YWluZXJzU2VnbWVudEhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFNlcnZpY2VMaXN0Q29udGFpbmVyc1NlZ21lbnRFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNlcnZpY2VfbGlzdENvbnRhaW5lcnNTZWdtZW50RXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlNlcnZpY2VMaXN0Q29udGFpbmVyc1NlZ21lbnRFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBTZXJ2aWNlR2V0VXNlckRlbGVnYXRpb25LZXlIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNlcnZpY2VfZ2V0VXNlckRlbGVnYXRpb25LZXlIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiU2VydmljZUdldFVzZXJEZWxlZ2F0aW9uS2V5SGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBTZXJ2aWNlR2V0VXNlckRlbGVnYXRpb25LZXlFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNlcnZpY2VfZ2V0VXNlckRlbGVnYXRpb25LZXlFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiU2VydmljZUdldFVzZXJEZWxlZ2F0aW9uS2V5RXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgU2VydmljZUdldEFjY291bnRJbmZvSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJTZXJ2aWNlX2dldEFjY291bnRJbmZvSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlNlcnZpY2VHZXRBY2NvdW50SW5mb0hlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNrdU5hbWU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXNrdS1uYW1lXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXNrdS1uYW1lXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJTdGFuZGFyZF9MUlNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiU3RhbmRhcmRfR1JTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlN0YW5kYXJkX1JBR1JTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlN0YW5kYXJkX1pSU1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJQcmVtaXVtX0xSU1wiLFxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWNjb3VudEtpbmQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWFjY291bnQta2luZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1hY2NvdW50LWtpbmRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlN0b3JhZ2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiQmxvYlN0b3JhZ2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiU3RvcmFnZVYyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkZpbGVTdG9yYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkJsb2NrQmxvYlN0b3JhZ2VcIixcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzSGllcmFyY2hpY2FsTmFtZXNwYWNlRW5hYmxlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtaXMtaG5zLWVuYWJsZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtaXMtaG5zLWVuYWJsZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBTZXJ2aWNlR2V0QWNjb3VudEluZm9FeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNlcnZpY2VfZ2V0QWNjb3VudEluZm9FeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiU2VydmljZUdldEFjY291bnRJbmZvRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgU2VydmljZVN1Ym1pdEJhdGNoSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJTZXJ2aWNlX3N1Ym1pdEJhdGNoSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlNlcnZpY2VTdWJtaXRCYXRjaEhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBjb250ZW50VHlwZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtdHlwZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC10eXBlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBTZXJ2aWNlU3VibWl0QmF0Y2hFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNlcnZpY2Vfc3VibWl0QmF0Y2hFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiU2VydmljZVN1Ym1pdEJhdGNoRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgU2VydmljZUZpbHRlckJsb2JzSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJTZXJ2aWNlX2ZpbHRlckJsb2JzSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlNlcnZpY2VGaWx0ZXJCbG9ic0hlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgU2VydmljZUZpbHRlckJsb2JzRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJTZXJ2aWNlX2ZpbHRlckJsb2JzRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlNlcnZpY2VGaWx0ZXJCbG9ic0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lckNyZWF0ZUhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX2NyZWF0ZUhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJDcmVhdGVIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lckNyZWF0ZUV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX2NyZWF0ZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJDcmVhdGVFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJHZXRQcm9wZXJ0aWVzSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfZ2V0UHJvcGVydGllc0hlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJHZXRQcm9wZXJ0aWVzSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1tZXRhXCIsXG4gICAgICAgICAgICAgICAgaGVhZGVyQ29sbGVjdGlvblByZWZpeDogXCJ4LW1zLW1ldGEtXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLW1ldGFcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGljdGlvbmFyeVwiLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogeyB0eXBlOiB7IG5hbWU6IFwiU3RyaW5nXCIgfSB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVhc2VEdXJhdGlvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVhc2UtZHVyYXRpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGVhc2UtZHVyYXRpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJpbmZpbml0ZVwiLCBcImZpeGVkXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVhc2VTdGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVhc2Utc3RhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGVhc2Utc3RhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICBcImF2YWlsYWJsZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJsZWFzZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZXhwaXJlZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJicmVha2luZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJicm9rZW5cIixcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlYXNlU3RhdHVzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWFzZS1zdGF0dXNcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGVhc2Utc3RhdHVzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wibG9ja2VkXCIsIFwidW5sb2NrZWRcIl0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JQdWJsaWNBY2Nlc3M6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2ItcHVibGljLWFjY2Vzc1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLXB1YmxpYy1hY2Nlc3NcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJjb250YWluZXJcIiwgXCJibG9iXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaGFzSW1tdXRhYmlsaXR5UG9saWN5OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1oYXMtaW1tdXRhYmlsaXR5LXBvbGljeVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1oYXMtaW1tdXRhYmlsaXR5LXBvbGljeVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBoYXNMZWdhbEhvbGQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWhhcy1sZWdhbC1ob2xkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWhhcy1sZWdhbC1ob2xkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlZmF1bHRFbmNyeXB0aW9uU2NvcGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWRlZmF1bHQtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1kZWZhdWx0LWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZW55RW5jcnlwdGlvblNjb3BlT3ZlcnJpZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWRlbnktZW5jcnlwdGlvbi1zY29wZS1vdmVycmlkZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1kZW55LWVuY3J5cHRpb24tc2NvcGUtb3ZlcnJpZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNJbW11dGFibGVTdG9yYWdlV2l0aFZlcnNpb25pbmdFbmFibGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1pbW11dGFibGUtc3RvcmFnZS13aXRoLXZlcnNpb25pbmctZW5hYmxlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1pbW11dGFibGUtc3RvcmFnZS13aXRoLXZlcnNpb25pbmctZW5hYmxlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lckdldFByb3BlcnRpZXNFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9nZXRQcm9wZXJ0aWVzRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lckdldFByb3BlcnRpZXNFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJEZWxldGVIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9kZWxldGVIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyRGVsZXRlSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJEZWxldGVFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9kZWxldGVFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyRGVsZXRlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyU2V0TWV0YWRhdGFIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9zZXRNZXRhZGF0YUhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJTZXRNZXRhZGF0YUhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyU2V0TWV0YWRhdGFFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9zZXRNZXRhZGF0YUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJTZXRNZXRhZGF0YUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lckdldEFjY2Vzc1BvbGljeUhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX2dldEFjY2Vzc1BvbGljeUhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJHZXRBY2Nlc3NQb2xpY3lIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgYmxvYlB1YmxpY0FjY2Vzczoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1wdWJsaWMtYWNjZXNzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2ItcHVibGljLWFjY2Vzc1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcImNvbnRhaW5lclwiLCBcImJsb2JcIl0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyR2V0QWNjZXNzUG9saWN5RXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfZ2V0QWNjZXNzUG9saWN5RXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lckdldEFjY2Vzc1BvbGljeUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lclNldEFjY2Vzc1BvbGljeUhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX3NldEFjY2Vzc1BvbGljeUhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJTZXRBY2Nlc3NQb2xpY3lIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lclNldEFjY2Vzc1BvbGljeUV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX3NldEFjY2Vzc1BvbGljeUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJTZXRBY2Nlc3NQb2xpY3lFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJSZXN0b3JlSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfcmVzdG9yZUhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJSZXN0b3JlSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJSZXN0b3JlRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfcmVzdG9yZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJSZXN0b3JlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyUmVuYW1lSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfcmVuYW1lSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lclJlbmFtZUhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyUmVuYW1lRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfcmVuYW1lRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lclJlbmFtZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lclN1Ym1pdEJhdGNoSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfc3VibWl0QmF0Y2hIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyU3VibWl0QmF0Y2hIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgY29udGVudFR5cGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LXR5cGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtdHlwZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyU3VibWl0QmF0Y2hFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9zdWJtaXRCYXRjaEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJTdWJtaXRCYXRjaEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lckZpbHRlckJsb2JzSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfZmlsdGVyQmxvYnNIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyRmlsdGVyQmxvYnNIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJGaWx0ZXJCbG9ic0V4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX2ZpbHRlckJsb2JzRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lckZpbHRlckJsb2JzRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyQWNxdWlyZUxlYXNlSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfYWNxdWlyZUxlYXNlSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lckFjcXVpcmVMZWFzZUhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZWFzZUlkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWFzZS1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1sZWFzZS1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyQWNxdWlyZUxlYXNlRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfYWNxdWlyZUxlYXNlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lckFjcXVpcmVMZWFzZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lclJlbGVhc2VMZWFzZUhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX3JlbGVhc2VMZWFzZUhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb250YWluZXJSZWxlYXNlTGVhc2VIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJSZWxlYXNlTGVhc2VFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9yZWxlYXNlTGVhc2VFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyUmVsZWFzZUxlYXNlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyUmVuZXdMZWFzZUhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX3JlbmV3TGVhc2VIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyUmVuZXdMZWFzZUhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZWFzZUlkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWFzZS1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1sZWFzZS1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyUmVuZXdMZWFzZUV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX3JlbmV3TGVhc2VFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyUmVuZXdMZWFzZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lckJyZWFrTGVhc2VIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9icmVha0xlYXNlSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lckJyZWFrTGVhc2VIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVhc2VUaW1lOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWFzZS10aW1lXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWxlYXNlLXRpbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lckJyZWFrTGVhc2VFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9icmVha0xlYXNlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lckJyZWFrTGVhc2VFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJDaGFuZ2VMZWFzZUhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX2NoYW5nZUxlYXNlSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lckNoYW5nZUxlYXNlSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlYXNlSWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxlYXNlLWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWxlYXNlLWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJDaGFuZ2VMZWFzZUV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX2NoYW5nZUxlYXNlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lckNoYW5nZUxlYXNlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyTGlzdEJsb2JGbGF0U2VnbWVudEhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGFpbmVyX2xpc3RCbG9iRmxhdFNlZ21lbnRIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyTGlzdEJsb2JGbGF0U2VnbWVudEhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBjb250ZW50VHlwZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtdHlwZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC10eXBlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lckxpc3RCbG9iRmxhdFNlZ21lbnRFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9saXN0QmxvYkZsYXRTZWdtZW50RXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lckxpc3RCbG9iRmxhdFNlZ21lbnRFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBDb250YWluZXJMaXN0QmxvYkhpZXJhcmNoeVNlZ21lbnRIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRhaW5lcl9saXN0QmxvYkhpZXJhcmNoeVNlZ21lbnRIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyTGlzdEJsb2JIaWVyYXJjaHlTZWdtZW50SGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNvbnRlbnRUeXBlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC10eXBlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LXR5cGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQ29udGFpbmVyTGlzdEJsb2JIaWVyYXJjaHlTZWdtZW50RXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfbGlzdEJsb2JIaWVyYXJjaHlTZWdtZW50RXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNvbnRhaW5lckxpc3RCbG9iSGllcmFyY2h5U2VnbWVudEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lckdldEFjY291bnRJbmZvSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfZ2V0QWNjb3VudEluZm9IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyR2V0QWNjb3VudEluZm9IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBza3VOYW1lOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1za3UtbmFtZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1za3UtbmFtZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiU3RhbmRhcmRfTFJTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlN0YW5kYXJkX0dSU1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJTdGFuZGFyZF9SQUdSU1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJTdGFuZGFyZF9aUlNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiUHJlbWl1bV9MUlNcIixcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFjY291bnRLaW5kOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1hY2NvdW50LWtpbmRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYWNjb3VudC1raW5kXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJTdG9yYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkJsb2JTdG9yYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlN0b3JhZ2VWMlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJGaWxlU3RvcmFnZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJCbG9ja0Jsb2JTdG9yYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc0hpZXJhcmNoaWNhbE5hbWVzcGFjZUVuYWJsZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWlzLWhucy1lbmFibGVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWlzLWhucy1lbmFibGVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IENvbnRhaW5lckdldEFjY291bnRJbmZvRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJDb250YWluZXJfZ2V0QWNjb3VudEluZm9FeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQ29udGFpbmVyR2V0QWNjb3VudEluZm9FeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iRG93bmxvYWRIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JfZG93bmxvYWRIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYkRvd25sb2FkSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjcmVhdGVkT246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNyZWF0aW9uLXRpbWVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY3JlYXRpb24tdGltZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1tZXRhXCIsXG4gICAgICAgICAgICAgICAgaGVhZGVyQ29sbGVjdGlvblByZWZpeDogXCJ4LW1zLW1ldGEtXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLW1ldGFcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGljdGlvbmFyeVwiLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogeyB0eXBlOiB7IG5hbWU6IFwiU3RyaW5nXCIgfSB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb2JqZWN0UmVwbGljYXRpb25Qb2xpY3lJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtb3ItcG9saWN5LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLW9yLXBvbGljeS1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9iamVjdFJlcGxpY2F0aW9uUnVsZXM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLW9yXCIsXG4gICAgICAgICAgICAgICAgaGVhZGVyQ29sbGVjdGlvblByZWZpeDogXCJ4LW1zLW9yLVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1vclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEaWN0aW9uYXJ5XCIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB7IHR5cGU6IHsgbmFtZTogXCJTdHJpbmdcIiB9IH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50TGVuZ3RoOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC1sZW5ndGhcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtbGVuZ3RoXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudFR5cGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LXR5cGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtdHlwZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnRSYW5nZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtcmFuZ2VcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtcmFuZ2VcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnRNRDU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50RW5jb2Rpbmc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LWVuY29kaW5nXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LWVuY29kaW5nXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2FjaGVDb250cm9sOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY2FjaGUtY29udHJvbFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY2FjaGUtY29udHJvbFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnREaXNwb3NpdGlvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtZGlzcG9zaXRpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtZGlzcG9zaXRpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50TGFuZ3VhZ2U6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LWxhbmd1YWdlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LWxhbmd1YWdlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmxvYlNlcXVlbmNlTnVtYmVyOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLXNlcXVlbmNlLW51bWJlclwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLXNlcXVlbmNlLW51bWJlclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JUeXBlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLXR5cGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi10eXBlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wiQmxvY2tCbG9iXCIsIFwiUGFnZUJsb2JcIiwgXCJBcHBlbmRCbG9iXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29weUNvbXBsZXRlZE9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LWNvbXBsZXRpb24tdGltZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LWNvbXBsZXRpb24tdGltZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvcHlTdGF0dXNEZXNjcmlwdGlvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1zdGF0dXMtZGVzY3JpcHRpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29weS1zdGF0dXMtZGVzY3JpcHRpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3B5SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvcHktaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29weS1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvcHlQcm9ncmVzczoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1wcm9ncmVzc1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LXByb2dyZXNzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29weVNvdXJjZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1zb3VyY2VcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29weS1zb3VyY2VcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3B5U3RhdHVzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LXN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LXN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcInBlbmRpbmdcIiwgXCJzdWNjZXNzXCIsIFwiYWJvcnRlZFwiLCBcImZhaWxlZFwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlYXNlRHVyYXRpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxlYXNlLWR1cmF0aW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWxlYXNlLWR1cmF0aW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wiaW5maW5pdGVcIiwgXCJmaXhlZFwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlYXNlU3RhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxlYXNlLXN0YXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWxlYXNlLXN0YXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJhdmFpbGFibGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibGVhc2VkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImV4cGlyZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYnJlYWtpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYnJva2VuXCIsXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZWFzZVN0YXR1czoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVhc2Utc3RhdHVzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWxlYXNlLXN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcImxvY2tlZFwiLCBcInVubG9ja2VkXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbklkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uLWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb24taWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc0N1cnJlbnRWZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1pcy1jdXJyZW50LXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtaXMtY3VycmVudC12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFjY2VwdFJhbmdlczoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImFjY2VwdC1yYW5nZXNcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImFjY2VwdC1yYW5nZXNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JDb21taXR0ZWRCbG9ja0NvdW50OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLWNvbW1pdHRlZC1ibG9jay1jb3VudFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLWNvbW1pdHRlZC1ibG9jay1jb3VudFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzU2VydmVyRW5jcnlwdGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1Njoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1rZXktc2hhMjU2XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25TY29wZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmxvYkNvbnRlbnRNRDU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2ItY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1jb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRhZ0NvdW50OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy10YWctY291bnRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdGFnLWNvdW50XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNTZWFsZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2Itc2VhbGVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2Itc2VhbGVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RBY2Nlc3NlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGFzdC1hY2Nlc3MtdGltZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1sYXN0LWFjY2Vzcy10aW1lXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5RXhwaXJlc09uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1pbW11dGFiaWxpdHktcG9saWN5LXVudGlsLWRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtaW1tdXRhYmlsaXR5LXBvbGljeS11bnRpbC1kYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5TW9kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtaW1tdXRhYmlsaXR5LXBvbGljeS1tb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWltbXV0YWJpbGl0eS1wb2xpY3ktbW9kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcIk11dGFibGVcIiwgXCJVbmxvY2tlZFwiLCBcIkxvY2tlZFwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlZ2FsSG9sZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVnYWwtaG9sZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1sZWdhbC1ob2xkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudENyYzY0OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb250ZW50LWNyYzY0XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvbnRlbnQtY3JjNjRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iRG93bmxvYWRFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JfZG93bmxvYWRFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYkRvd25sb2FkRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYkdldFByb3BlcnRpZXNIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JfZ2V0UHJvcGVydGllc0hlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iR2V0UHJvcGVydGllc0hlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY3JlYXRlZE9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jcmVhdGlvbi10aW1lXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNyZWF0aW9uLXRpbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbWV0YVwiLFxuICAgICAgICAgICAgICAgIGhlYWRlckNvbGxlY3Rpb25QcmVmaXg6IFwieC1tcy1tZXRhLVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1tZXRhXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRpY3Rpb25hcnlcIixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHsgdHlwZTogeyBuYW1lOiBcIlN0cmluZ1wiIH0gfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9iamVjdFJlcGxpY2F0aW9uUG9saWN5SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLW9yLXBvbGljeS1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1vci1wb2xpY3ktaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvYmplY3RSZXBsaWNhdGlvblJ1bGVzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1vclwiLFxuICAgICAgICAgICAgICAgIGhlYWRlckNvbGxlY3Rpb25QcmVmaXg6IFwieC1tcy1vci1cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtb3JcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGljdGlvbmFyeVwiLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogeyB0eXBlOiB7IG5hbWU6IFwiU3RyaW5nXCIgfSB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmxvYlR5cGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2ItdHlwZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLXR5cGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJCbG9ja0Jsb2JcIiwgXCJQYWdlQmxvYlwiLCBcIkFwcGVuZEJsb2JcIl0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3B5Q29tcGxldGVkT246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvcHktY29tcGxldGlvbi10aW1lXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvcHktY29tcGxldGlvbi10aW1lXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29weVN0YXR1c0Rlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LXN0YXR1cy1kZXNjcmlwdGlvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LXN0YXR1cy1kZXNjcmlwdGlvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvcHlJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29weVByb2dyZXNzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LXByb2dyZXNzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvcHktcHJvZ3Jlc3NcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3B5U291cmNlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LXNvdXJjZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LXNvdXJjZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvcHlTdGF0dXM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvcHktc3RhdHVzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvcHktc3RhdHVzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wicGVuZGluZ1wiLCBcInN1Y2Nlc3NcIiwgXCJhYm9ydGVkXCIsIFwiZmFpbGVkXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNJbmNyZW1lbnRhbENvcHk6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWluY3JlbWVudGFsLWNvcHlcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtaW5jcmVtZW50YWwtY29weVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZXN0aW5hdGlvblNuYXBzaG90OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LWRlc3RpbmF0aW9uLXNuYXBzaG90XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvcHktZGVzdGluYXRpb24tc25hcHNob3RcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZWFzZUR1cmF0aW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWFzZS1kdXJhdGlvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1sZWFzZS1kdXJhdGlvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcImluZmluaXRlXCIsIFwiZml4ZWRcIl0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZWFzZVN0YXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWFzZS1zdGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1sZWFzZS1zdGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYXZhaWxhYmxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImxlYXNlZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJleHBpcmVkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImJyZWFraW5nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImJyb2tlblwiLFxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVhc2VTdGF0dXM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxlYXNlLXN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1sZWFzZS1zdGF0dXNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJsb2NrZWRcIiwgXCJ1bmxvY2tlZFwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnRMZW5ndGg6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LWxlbmd0aFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC1sZW5ndGhcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50VHlwZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtdHlwZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC10eXBlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50TUQ1OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudEVuY29kaW5nOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC1lbmNvZGluZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC1lbmNvZGluZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnREaXNwb3NpdGlvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtZGlzcG9zaXRpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtZGlzcG9zaXRpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50TGFuZ3VhZ2U6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LWxhbmd1YWdlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LWxhbmd1YWdlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2FjaGVDb250cm9sOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY2FjaGUtY29udHJvbFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY2FjaGUtY29udHJvbFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JTZXF1ZW5jZU51bWJlcjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1zZXF1ZW5jZS1udW1iZXJcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1zZXF1ZW5jZS1udW1iZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFjY2VwdFJhbmdlczoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImFjY2VwdC1yYW5nZXNcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImFjY2VwdC1yYW5nZXNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBibG9iQ29tbWl0dGVkQmxvY2tDb3VudDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1jb21taXR0ZWQtYmxvY2stY291bnRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1jb21taXR0ZWQtYmxvY2stY291bnRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc1NlcnZlckVuY3J5cHRlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25LZXlTaGEyNTY6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uU2NvcGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFjY2Vzc1RpZXI6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWFjY2Vzcy10aWVyXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWFjY2Vzcy10aWVyXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWNjZXNzVGllckluZmVycmVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1hY2Nlc3MtdGllci1pbmZlcnJlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1hY2Nlc3MtdGllci1pbmZlcnJlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhcmNoaXZlU3RhdHVzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1hcmNoaXZlLXN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1hcmNoaXZlLXN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFjY2Vzc1RpZXJDaGFuZ2VkT246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWFjY2Vzcy10aWVyLWNoYW5nZS10aW1lXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWFjY2Vzcy10aWVyLWNoYW5nZS10aW1lXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbklkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uLWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb24taWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc0N1cnJlbnRWZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1pcy1jdXJyZW50LXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtaXMtY3VycmVudC12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRhZ0NvdW50OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy10YWctY291bnRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdGFnLWNvdW50XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXhwaXJlc09uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1leHBpcnktdGltZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1leHBpcnktdGltZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzU2VhbGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLXNlYWxlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLXNlYWxlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZWh5ZHJhdGVQcmlvcml0eToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVoeWRyYXRlLXByaW9yaXR5XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlaHlkcmF0ZS1wcmlvcml0eVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcIkhpZ2hcIiwgXCJTdGFuZGFyZFwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RBY2Nlc3NlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGFzdC1hY2Nlc3MtdGltZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1sYXN0LWFjY2Vzcy10aW1lXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5RXhwaXJlc09uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1pbW11dGFiaWxpdHktcG9saWN5LXVudGlsLWRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtaW1tdXRhYmlsaXR5LXBvbGljeS11bnRpbC1kYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5TW9kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtaW1tdXRhYmlsaXR5LXBvbGljeS1tb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWltbXV0YWJpbGl0eS1wb2xpY3ktbW9kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcIk11dGFibGVcIiwgXCJVbmxvY2tlZFwiLCBcIkxvY2tlZFwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlZ2FsSG9sZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVnYWwtaG9sZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1sZWdhbC1ob2xkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYkdldFByb3BlcnRpZXNFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JfZ2V0UHJvcGVydGllc0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iR2V0UHJvcGVydGllc0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JEZWxldGVIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JfZGVsZXRlSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JEZWxldGVIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JEZWxldGVFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JfZGVsZXRlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JEZWxldGVFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iVW5kZWxldGVIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JfdW5kZWxldGVIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYlVuZGVsZXRlSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iVW5kZWxldGVFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JfdW5kZWxldGVFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYlVuZGVsZXRlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlNldEV4cGlyeUhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9zZXRFeHBpcnlIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYlNldEV4cGlyeUhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JTZXRFeHBpcnlFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2Jfc2V0RXhwaXJ5RXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JTZXRFeHBpcnlFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iU2V0SHR0cEhlYWRlcnNIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2Jfc2V0SHR0cEhlYWRlcnNIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYlNldEh0dHBIZWFkZXJzSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JTZXF1ZW5jZU51bWJlcjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1zZXF1ZW5jZS1udW1iZXJcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1zZXF1ZW5jZS1udW1iZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlNldEh0dHBIZWFkZXJzRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX3NldEh0dHBIZWFkZXJzRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JTZXRIdHRwSGVhZGVyc0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JTZXRJbW11dGFiaWxpdHlQb2xpY3lIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2Jfc2V0SW1tdXRhYmlsaXR5UG9saWN5SGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JTZXRJbW11dGFiaWxpdHlQb2xpY3lIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpbW11dGFiaWxpdHlQb2xpY3lFeHBpcnk6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWltbXV0YWJpbGl0eS1wb2xpY3ktdW50aWwtZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1pbW11dGFiaWxpdHktcG9saWN5LXVudGlsLWRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpbW11dGFiaWxpdHlQb2xpY3lNb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1pbW11dGFiaWxpdHktcG9saWN5LW1vZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtaW1tdXRhYmlsaXR5LXBvbGljeS1tb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wiTXV0YWJsZVwiLCBcIlVubG9ja2VkXCIsIFwiTG9ja2VkXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlNldEltbXV0YWJpbGl0eVBvbGljeUV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9zZXRJbW11dGFiaWxpdHlQb2xpY3lFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYlNldEltbXV0YWJpbGl0eVBvbGljeUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JEZWxldGVJbW11dGFiaWxpdHlQb2xpY3lIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JfZGVsZXRlSW1tdXRhYmlsaXR5UG9saWN5SGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JEZWxldGVJbW11dGFiaWxpdHlQb2xpY3lIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iRGVsZXRlSW1tdXRhYmlsaXR5UG9saWN5RXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX2RlbGV0ZUltbXV0YWJpbGl0eVBvbGljeUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iRGVsZXRlSW1tdXRhYmlsaXR5UG9saWN5RXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlNldExlZ2FsSG9sZEhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9zZXRMZWdhbEhvbGRIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYlNldExlZ2FsSG9sZEhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlZ2FsSG9sZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVnYWwtaG9sZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1sZWdhbC1ob2xkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JTZXRMZWdhbEhvbGRFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2Jfc2V0TGVnYWxIb2xkRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JTZXRMZWdhbEhvbGRFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iU2V0TWV0YWRhdGFIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2Jfc2V0TWV0YWRhdGFIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYlNldE1ldGFkYXRhSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb25JZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvbi1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uLWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc1NlcnZlckVuY3J5cHRlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3Qtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uS2V5U2hhMjU2OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1rZXktc2hhMjU2XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JTZXRNZXRhZGF0YUV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9zZXRNZXRhZGF0YUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iU2V0TWV0YWRhdGFFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iQWNxdWlyZUxlYXNlSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX2FjcXVpcmVMZWFzZUhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iQWNxdWlyZUxlYXNlSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlYXNlSWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxlYXNlLWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWxlYXNlLWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iQWNxdWlyZUxlYXNlRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX2FjcXVpcmVMZWFzZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iQWNxdWlyZUxlYXNlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlJlbGVhc2VMZWFzZUhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9yZWxlYXNlTGVhc2VIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYlJlbGVhc2VMZWFzZUhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JSZWxlYXNlTGVhc2VFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JfcmVsZWFzZUxlYXNlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JSZWxlYXNlTGVhc2VFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iUmVuZXdMZWFzZUhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9yZW5ld0xlYXNlSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JSZW5ld0xlYXNlSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlYXNlSWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxlYXNlLWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWxlYXNlLWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iUmVuZXdMZWFzZUV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9yZW5ld0xlYXNlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JSZW5ld0xlYXNlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYkNoYW5nZUxlYXNlSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX2NoYW5nZUxlYXNlSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JDaGFuZ2VMZWFzZUhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZWFzZUlkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWFzZS1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1sZWFzZS1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYkNoYW5nZUxlYXNlRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX2NoYW5nZUxlYXNlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JDaGFuZ2VMZWFzZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JCcmVha0xlYXNlSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX2JyZWFrTGVhc2VIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYkJyZWFrTGVhc2VIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVhc2VUaW1lOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWFzZS10aW1lXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWxlYXNlLXRpbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JCcmVha0xlYXNlRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX2JyZWFrTGVhc2VFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYkJyZWFrTGVhc2VFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iQ3JlYXRlU25hcHNob3RIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JfY3JlYXRlU25hcHNob3RIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYkNyZWF0ZVNuYXBzaG90SGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHNuYXBzaG90OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1zbmFwc2hvdFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1zbmFwc2hvdFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb25JZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvbi1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uLWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc1NlcnZlckVuY3J5cHRlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3Qtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JDcmVhdGVTbmFwc2hvdEV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9jcmVhdGVTbmFwc2hvdEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iQ3JlYXRlU25hcHNob3RFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iU3RhcnRDb3B5RnJvbVVSTEhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9zdGFydENvcHlGcm9tVVJMSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JTdGFydENvcHlGcm9tVVJMSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb25JZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvbi1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uLWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3B5SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvcHktaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29weS1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvcHlTdGF0dXM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvcHktc3RhdHVzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvcHktc3RhdHVzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wicGVuZGluZ1wiLCBcInN1Y2Nlc3NcIiwgXCJhYm9ydGVkXCIsIFwiZmFpbGVkXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iU3RhcnRDb3B5RnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9zdGFydENvcHlGcm9tVVJMRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JTdGFydENvcHlGcm9tVVJMRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYkNvcHlGcm9tVVJMSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX2NvcHlGcm9tVVJMSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JDb3B5RnJvbVVSTEhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uSWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb24taWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvbi1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29weUlkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvcHktaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3B5U3RhdHVzOiB7XG4gICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBcInN1Y2Nlc3NcIixcbiAgICAgICAgICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1zdGF0dXNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50TUQ1OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeE1zQ29udGVudENyYzY0OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb250ZW50LWNyYzY0XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvbnRlbnQtY3JjNjRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uU2NvcGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYkNvcHlGcm9tVVJMRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX2NvcHlGcm9tVVJMRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JDb3B5RnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JBYm9ydENvcHlGcm9tVVJMSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX2Fib3J0Q29weUZyb21VUkxIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYkFib3J0Q29weUZyb21VUkxIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JBYm9ydENvcHlGcm9tVVJMRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX2Fib3J0Q29weUZyb21VUkxFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYkFib3J0Q29weUZyb21VUkxFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iU2V0VGllckhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9zZXRUaWVySGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JTZXRUaWVySGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlNldFRpZXJFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2Jfc2V0VGllckV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iU2V0VGllckV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JHZXRBY2NvdW50SW5mb0hlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9nZXRBY2NvdW50SW5mb0hlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iR2V0QWNjb3VudEluZm9IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBza3VOYW1lOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1za3UtbmFtZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1za3UtbmFtZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiU3RhbmRhcmRfTFJTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlN0YW5kYXJkX0dSU1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJTdGFuZGFyZF9SQUdSU1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJTdGFuZGFyZF9aUlNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiUHJlbWl1bV9MUlNcIixcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFjY291bnRLaW5kOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1hY2NvdW50LWtpbmRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYWNjb3VudC1raW5kXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJTdG9yYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkJsb2JTdG9yYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlN0b3JhZ2VWMlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJGaWxlU3RvcmFnZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJCbG9ja0Jsb2JTdG9yYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc0hpZXJhcmNoaWNhbE5hbWVzcGFjZUVuYWJsZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWlzLWhucy1lbmFibGVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWlzLWhucy1lbmFibGVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JHZXRBY2NvdW50SW5mb0V4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9nZXRBY2NvdW50SW5mb0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9iR2V0QWNjb3VudEluZm9FeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iUXVlcnlIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2JfcXVlcnlIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYlF1ZXJ5SGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbWV0YVwiLFxuICAgICAgICAgICAgICAgIGhlYWRlckNvbGxlY3Rpb25QcmVmaXg6IFwieC1tcy1tZXRhLVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1tZXRhXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRpY3Rpb25hcnlcIixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHsgdHlwZTogeyBuYW1lOiBcIlN0cmluZ1wiIH0gfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnRMZW5ndGg6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LWxlbmd0aFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC1sZW5ndGhcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50VHlwZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtdHlwZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC10eXBlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudFJhbmdlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC1yYW5nZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC1yYW5nZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudE1ENToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnRFbmNvZGluZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtZW5jb2RpbmdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtZW5jb2RpbmdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjYWNoZUNvbnRyb2w6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjYWNoZS1jb250cm9sXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjYWNoZS1jb250cm9sXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudERpc3Bvc2l0aW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC1kaXNwb3NpdGlvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC1kaXNwb3NpdGlvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnRMYW5ndWFnZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtbGFuZ3VhZ2VcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtbGFuZ3VhZ2VcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBibG9iU2VxdWVuY2VOdW1iZXI6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2Itc2VxdWVuY2UtbnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2Itc2VxdWVuY2UtbnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmxvYlR5cGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2ItdHlwZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLXR5cGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJCbG9ja0Jsb2JcIiwgXCJQYWdlQmxvYlwiLCBcIkFwcGVuZEJsb2JcIl0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3B5Q29tcGxldGlvblRpbWU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvcHktY29tcGxldGlvbi10aW1lXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvcHktY29tcGxldGlvbi10aW1lXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29weVN0YXR1c0Rlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LXN0YXR1cy1kZXNjcmlwdGlvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LXN0YXR1cy1kZXNjcmlwdGlvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvcHlJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29weVByb2dyZXNzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LXByb2dyZXNzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvcHktcHJvZ3Jlc3NcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3B5U291cmNlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LXNvdXJjZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LXNvdXJjZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvcHlTdGF0dXM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvcHktc3RhdHVzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvcHktc3RhdHVzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wicGVuZGluZ1wiLCBcInN1Y2Nlc3NcIiwgXCJhYm9ydGVkXCIsIFwiZmFpbGVkXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVhc2VEdXJhdGlvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVhc2UtZHVyYXRpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGVhc2UtZHVyYXRpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJpbmZpbml0ZVwiLCBcImZpeGVkXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVhc2VTdGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVhc2Utc3RhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGVhc2Utc3RhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICBcImF2YWlsYWJsZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJsZWFzZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZXhwaXJlZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJicmVha2luZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJicm9rZW5cIixcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlYXNlU3RhdHVzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWFzZS1zdGF0dXNcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGVhc2Utc3RhdHVzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wibG9ja2VkXCIsIFwidW5sb2NrZWRcIl0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhY2NlcHRSYW5nZXM6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJhY2NlcHQtcmFuZ2VzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJhY2NlcHQtcmFuZ2VzXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBibG9iQ29tbWl0dGVkQmxvY2tDb3VudDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1jb21taXR0ZWQtYmxvY2stY291bnRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1jb21taXR0ZWQtYmxvY2stY291bnRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc1NlcnZlckVuY3J5cHRlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25LZXlTaGEyNTY6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uU2NvcGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JDb250ZW50TUQ1OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLWNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2ItY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnRDcmM2NDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29udGVudC1jcmM2NFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb250ZW50LWNyYzY0XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvYlF1ZXJ5RXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX3F1ZXJ5RXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JRdWVyeUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JHZXRUYWdzSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX2dldFRhZ3NIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYkdldFRhZ3NIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2JHZXRUYWdzRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9iX2dldFRhZ3NFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvYkdldFRhZ3NFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iU2V0VGFnc0hlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9zZXRUYWdzSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JTZXRUYWdzSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9iU2V0VGFnc0V4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvYl9zZXRUYWdzRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2JTZXRUYWdzRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgUGFnZUJsb2JDcmVhdGVIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlBhZ2VCbG9iX2NyZWF0ZUhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJQYWdlQmxvYkNyZWF0ZUhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50TUQ1OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbklkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uLWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb24taWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzU2VydmVyRW5jcnlwdGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25LZXlTaGEyNTY6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uU2NvcGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgUGFnZUJsb2JDcmVhdGVFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlBhZ2VCbG9iX2NyZWF0ZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJQYWdlQmxvYkNyZWF0ZUV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFBhZ2VCbG9iVXBsb2FkUGFnZXNIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlBhZ2VCbG9iX3VwbG9hZFBhZ2VzSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlBhZ2VCbG9iVXBsb2FkUGFnZXNIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudE1ENToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHhNc0NvbnRlbnRDcmM2NDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29udGVudC1jcmM2NFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb250ZW50LWNyYzY0XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmxvYlNlcXVlbmNlTnVtYmVyOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLXNlcXVlbmNlLW51bWJlclwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLXNlcXVlbmNlLW51bWJlclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNTZXJ2ZXJFbmNyeXB0ZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3Qtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1Njoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1rZXktc2hhMjU2XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25TY29wZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBQYWdlQmxvYlVwbG9hZFBhZ2VzRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJQYWdlQmxvYl91cGxvYWRQYWdlc0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJQYWdlQmxvYlVwbG9hZFBhZ2VzRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgUGFnZUJsb2JDbGVhclBhZ2VzSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJQYWdlQmxvYl9jbGVhclBhZ2VzSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlBhZ2VCbG9iQ2xlYXJQYWdlc0hlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50TUQ1OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeE1zQ29udGVudENyYzY0OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb250ZW50LWNyYzY0XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvbnRlbnQtY3JjNjRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBibG9iU2VxdWVuY2VOdW1iZXI6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2Itc2VxdWVuY2UtbnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2Itc2VxdWVuY2UtbnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFBhZ2VCbG9iQ2xlYXJQYWdlc0V4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiUGFnZUJsb2JfY2xlYXJQYWdlc0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJQYWdlQmxvYkNsZWFyUGFnZXNFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBQYWdlQmxvYlVwbG9hZFBhZ2VzRnJvbVVSTEhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiUGFnZUJsb2JfdXBsb2FkUGFnZXNGcm9tVVJMSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlBhZ2VCbG9iVXBsb2FkUGFnZXNGcm9tVVJMSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnRNRDU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB4TXNDb250ZW50Q3JjNjQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvbnRlbnQtY3JjNjRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29udGVudC1jcmM2NFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JTZXF1ZW5jZU51bWJlcjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1zZXF1ZW5jZS1udW1iZXJcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1zZXF1ZW5jZS1udW1iZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNTZXJ2ZXJFbmNyeXB0ZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3Qtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1Njoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1rZXktc2hhMjU2XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25TY29wZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBQYWdlQmxvYlVwbG9hZFBhZ2VzRnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiUGFnZUJsb2JfdXBsb2FkUGFnZXNGcm9tVVJMRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlBhZ2VCbG9iVXBsb2FkUGFnZXNGcm9tVVJMRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgUGFnZUJsb2JHZXRQYWdlUmFuZ2VzSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJQYWdlQmxvYl9nZXRQYWdlUmFuZ2VzSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlBhZ2VCbG9iR2V0UGFnZVJhbmdlc0hlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBibG9iQ29udGVudExlbmd0aDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1jb250ZW50LWxlbmd0aFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLWNvbnRlbnQtbGVuZ3RoXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFBhZ2VCbG9iR2V0UGFnZVJhbmdlc0V4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiUGFnZUJsb2JfZ2V0UGFnZVJhbmdlc0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJQYWdlQmxvYkdldFBhZ2VSYW5nZXNFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBQYWdlQmxvYkdldFBhZ2VSYW5nZXNEaWZmSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJQYWdlQmxvYl9nZXRQYWdlUmFuZ2VzRGlmZkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJQYWdlQmxvYkdldFBhZ2VSYW5nZXNEaWZmSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JDb250ZW50TGVuZ3RoOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLWNvbnRlbnQtbGVuZ3RoXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2ItY29udGVudC1sZW5ndGhcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgUGFnZUJsb2JHZXRQYWdlUmFuZ2VzRGlmZkV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiUGFnZUJsb2JfZ2V0UGFnZVJhbmdlc0RpZmZFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiUGFnZUJsb2JHZXRQYWdlUmFuZ2VzRGlmZkV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFBhZ2VCbG9iUmVzaXplSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJQYWdlQmxvYl9yZXNpemVIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiUGFnZUJsb2JSZXNpemVIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmxvYlNlcXVlbmNlTnVtYmVyOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLXNlcXVlbmNlLW51bWJlclwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLXNlcXVlbmNlLW51bWJlclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBQYWdlQmxvYlJlc2l6ZUV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiUGFnZUJsb2JfcmVzaXplRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlBhZ2VCbG9iUmVzaXplRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgUGFnZUJsb2JVcGRhdGVTZXF1ZW5jZU51bWJlckhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiUGFnZUJsb2JfdXBkYXRlU2VxdWVuY2VOdW1iZXJIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiUGFnZUJsb2JVcGRhdGVTZXF1ZW5jZU51bWJlckhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBibG9iU2VxdWVuY2VOdW1iZXI6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2Itc2VxdWVuY2UtbnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2Itc2VxdWVuY2UtbnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IFBhZ2VCbG9iVXBkYXRlU2VxdWVuY2VOdW1iZXJFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlBhZ2VCbG9iX3VwZGF0ZVNlcXVlbmNlTnVtYmVyRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlBhZ2VCbG9iVXBkYXRlU2VxdWVuY2VOdW1iZXJFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBQYWdlQmxvYkNvcHlJbmNyZW1lbnRhbEhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiUGFnZUJsb2JfY29weUluY3JlbWVudGFsSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIlBhZ2VCbG9iQ29weUluY3JlbWVudGFsSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29weUlkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvcHktaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3B5U3RhdHVzOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LXN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LXN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcInBlbmRpbmdcIiwgXCJzdWNjZXNzXCIsIFwiYWJvcnRlZFwiLCBcImZhaWxlZFwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgUGFnZUJsb2JDb3B5SW5jcmVtZW50YWxFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIlBhZ2VCbG9iX2NvcHlJbmNyZW1lbnRhbEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJQYWdlQmxvYkNvcHlJbmNyZW1lbnRhbEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEFwcGVuZEJsb2JDcmVhdGVIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkFwcGVuZEJsb2JfY3JlYXRlSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkFwcGVuZEJsb2JDcmVhdGVIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudE1ENToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb25JZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvbi1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uLWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc1NlcnZlckVuY3J5cHRlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3Qtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uS2V5U2hhMjU2OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1rZXktc2hhMjU2XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEFwcGVuZEJsb2JDcmVhdGVFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkFwcGVuZEJsb2JfY3JlYXRlRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkFwcGVuZEJsb2JDcmVhdGVFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBBcHBlbmRCbG9iQXBwZW5kQmxvY2tIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkFwcGVuZEJsb2JfYXBwZW5kQmxvY2tIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQXBwZW5kQmxvYkFwcGVuZEJsb2NrSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnRNRDU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB4TXNDb250ZW50Q3JjNjQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvbnRlbnQtY3JjNjRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29udGVudC1jcmM2NFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmxvYkFwcGVuZE9mZnNldDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1hcHBlbmQtb2Zmc2V0XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2ItYXBwZW5kLW9mZnNldFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JDb21taXR0ZWRCbG9ja0NvdW50OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLWNvbW1pdHRlZC1ibG9jay1jb3VudFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLWNvbW1pdHRlZC1ibG9jay1jb3VudFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzU2VydmVyRW5jcnlwdGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25LZXlTaGEyNTY6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uU2NvcGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQXBwZW5kQmxvYkFwcGVuZEJsb2NrRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJBcHBlbmRCbG9iX2FwcGVuZEJsb2NrRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkFwcGVuZEJsb2JBcHBlbmRCbG9ja0V4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEFwcGVuZEJsb2JBcHBlbmRCbG9ja0Zyb21VcmxIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkFwcGVuZEJsb2JfYXBwZW5kQmxvY2tGcm9tVXJsSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkFwcGVuZEJsb2JBcHBlbmRCbG9ja0Zyb21VcmxIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudE1ENToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHhNc0NvbnRlbnRDcmM2NDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29udGVudC1jcmM2NFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb250ZW50LWNyYzY0XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2JBcHBlbmRPZmZzZXQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2ItYXBwZW5kLW9mZnNldFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLWFwcGVuZC1vZmZzZXRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBibG9iQ29tbWl0dGVkQmxvY2tDb3VudDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1jb21taXR0ZWQtYmxvY2stY291bnRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1jb21taXR0ZWQtYmxvY2stY291bnRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uS2V5U2hhMjU2OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1rZXktc2hhMjU2XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc1NlcnZlckVuY3J5cHRlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3Qtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEFwcGVuZEJsb2JBcHBlbmRCbG9ja0Zyb21VcmxFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkFwcGVuZEJsb2JfYXBwZW5kQmxvY2tGcm9tVXJsRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkFwcGVuZEJsb2JBcHBlbmRCbG9ja0Zyb21VcmxFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBBcHBlbmRCbG9iU2VhbEhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQXBwZW5kQmxvYl9zZWFsSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkFwcGVuZEJsb2JTZWFsSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNTZWFsZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2Itc2VhbGVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2Itc2VhbGVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEFwcGVuZEJsb2JTZWFsRXhjZXB0aW9uSGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJBcHBlbmRCbG9iX3NlYWxFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQXBwZW5kQmxvYlNlYWxFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9ja0Jsb2JVcGxvYWRIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2NrQmxvYl91cGxvYWRIZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvY2tCbG9iVXBsb2FkSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV0YWc6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJldGFnXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwibGFzdC1tb2RpZmllZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnRNRDU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uSWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb24taWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvbi1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNTZXJ2ZXJFbmNyeXB0ZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3Qtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1Njoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1rZXktc2hhMjU2XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25TY29wZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9ja0Jsb2JVcGxvYWRFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2NrQmxvYl91cGxvYWRFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvY2tCbG9iVXBsb2FkRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvY2tCbG9iUHV0QmxvYkZyb21VcmxIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2NrQmxvYl9wdXRCbG9iRnJvbVVybEhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9ja0Jsb2JQdXRCbG9iRnJvbVVybEhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50TUQ1OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1jbGllbnQtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbklkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uLWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb24taWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzU2VydmVyRW5jcnlwdGVkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25LZXlTaGEyNTY6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uU2NvcGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvY2tCbG9iUHV0QmxvYkZyb21VcmxFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2NrQmxvYl9wdXRCbG9iRnJvbVVybEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICB0eXBlOiB7XG4gICAgICAgIG5hbWU6IFwiQ29tcG9zaXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJCbG9ja0Jsb2JQdXRCbG9iRnJvbVVybEV4Y2VwdGlvbkhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2NrQmxvYlN0YWdlQmxvY2tIZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2NrQmxvYl9zdGFnZUJsb2NrSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2NrQmxvYlN0YWdlQmxvY2tIZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgY29udGVudE1ENToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJjb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeE1zQ29udGVudENyYzY0OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb250ZW50LWNyYzY0XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvbnRlbnQtY3JjNjRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc1NlcnZlckVuY3J5cHRlZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVxdWVzdC1zZXJ2ZXItZW5jcnlwdGVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3Qtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uS2V5U2hhMjU2OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1rZXktc2hhMjU2XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvckNvZGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IEJsb2NrQmxvYlN0YWdlQmxvY2tFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2NrQmxvYl9zdGFnZUJsb2NrRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2NrQmxvYlN0YWdlQmxvY2tFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgICAgIG1vZGVsUHJvcGVydGllczoge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9ja0Jsb2JTdGFnZUJsb2NrRnJvbVVSTEhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvY2tCbG9iX3N0YWdlQmxvY2tGcm9tVVJMSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2NrQmxvYlN0YWdlQmxvY2tGcm9tVVJMSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNvbnRlbnRNRDU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb250ZW50LW1kNVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB4TXNDb250ZW50Q3JjNjQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvbnRlbnQtY3JjNjRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29udGVudC1jcmM2NFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNTZXJ2ZXJFbmNyeXB0ZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3Qtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1Njoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1rZXktc2hhMjU2XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25TY29wZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9ja0Jsb2JTdGFnZUJsb2NrRnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnMgPSB7XG4gICAgc2VyaWFsaXplZE5hbWU6IFwiQmxvY2tCbG9iX3N0YWdlQmxvY2tGcm9tVVJMRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2NrQmxvYlN0YWdlQmxvY2tGcm9tVVJMRXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvY2tCbG9iQ29tbWl0QmxvY2tMaXN0SGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9ja0Jsb2JfY29tbWl0QmxvY2tMaXN0SGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2NrQmxvYkNvbW1pdEJsb2NrTGlzdEhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBldGFnOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiZXRhZ1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImxhc3QtbW9kaWZpZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50TUQ1OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29udGVudC1tZDVcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImNvbnRlbnQtbWQ1XCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeE1zQ29udGVudENyYzY0OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb250ZW50LWNyYzY0XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNvbnRlbnQtY3JjNjRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdElkOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1yZXF1ZXN0LWlkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uSWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb24taWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvbi1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNTZXJ2ZXJFbmNyeXB0ZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3Qtc2VydmVyLWVuY3J5cHRlZFwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZXF1ZXN0LXNlcnZlci1lbmNyeXB0ZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1Njoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1rZXktc2hhMjU2XCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25TY29wZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1zY29wZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9ja0Jsb2JDb21taXRCbG9ja0xpc3RFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2NrQmxvYl9jb21taXRCbG9ja0xpc3RFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvY2tCbG9iQ29tbWl0QmxvY2tMaXN0RXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgQmxvY2tCbG9iR2V0QmxvY2tMaXN0SGVhZGVycyA9IHtcbiAgICBzZXJpYWxpemVkTmFtZTogXCJCbG9ja0Jsb2JfZ2V0QmxvY2tMaXN0SGVhZGVyc1wiLFxuICAgIHR5cGU6IHtcbiAgICAgICAgbmFtZTogXCJDb21wb3NpdGVcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkJsb2NrQmxvYkdldEJsb2NrTGlzdEhlYWRlcnNcIixcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJsYXN0LW1vZGlmaWVkXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXRhZzoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcImV0YWdcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50VHlwZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRlbnQtdHlwZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwiY29udGVudC10eXBlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmxvYkNvbnRlbnRMZW5ndGg6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2ItY29udGVudC1sZW5ndGhcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1jb250ZW50LWxlbmd0aFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudFJlcXVlc3RJZDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVlc3QtaWRcIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICB4bWxOYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JDb2RlOiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVycm9yLWNvZGVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBCbG9ja0Jsb2JHZXRCbG9ja0xpc3RFeGNlcHRpb25IZWFkZXJzID0ge1xuICAgIHNlcmlhbGl6ZWROYW1lOiBcIkJsb2NrQmxvYl9nZXRCbG9ja0xpc3RFeGNlcHRpb25IZWFkZXJzXCIsXG4gICAgdHlwZToge1xuICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiQmxvY2tCbG9iR2V0QmxvY2tMaXN0RXhjZXB0aW9uSGVhZGVyc1wiLFxuICAgICAgICBtb2RlbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZToge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXJyb3ItY29kZVwiLFxuICAgICAgICAgICAgICAgIHhtbE5hbWU6IFwieC1tcy1lcnJvci1jb2RlXCIsXG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuXG52YXIgTWFwcGVycyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgQWNjZXNzUG9saWN5OiBBY2Nlc3NQb2xpY3ksXG4gICAgQXBwZW5kQmxvYkFwcGVuZEJsb2NrRXhjZXB0aW9uSGVhZGVyczogQXBwZW5kQmxvYkFwcGVuZEJsb2NrRXhjZXB0aW9uSGVhZGVycyxcbiAgICBBcHBlbmRCbG9iQXBwZW5kQmxvY2tGcm9tVXJsRXhjZXB0aW9uSGVhZGVyczogQXBwZW5kQmxvYkFwcGVuZEJsb2NrRnJvbVVybEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQXBwZW5kQmxvYkFwcGVuZEJsb2NrRnJvbVVybEhlYWRlcnM6IEFwcGVuZEJsb2JBcHBlbmRCbG9ja0Zyb21VcmxIZWFkZXJzLFxuICAgIEFwcGVuZEJsb2JBcHBlbmRCbG9ja0hlYWRlcnM6IEFwcGVuZEJsb2JBcHBlbmRCbG9ja0hlYWRlcnMsXG4gICAgQXBwZW5kQmxvYkNyZWF0ZUV4Y2VwdGlvbkhlYWRlcnM6IEFwcGVuZEJsb2JDcmVhdGVFeGNlcHRpb25IZWFkZXJzLFxuICAgIEFwcGVuZEJsb2JDcmVhdGVIZWFkZXJzOiBBcHBlbmRCbG9iQ3JlYXRlSGVhZGVycyxcbiAgICBBcHBlbmRCbG9iU2VhbEV4Y2VwdGlvbkhlYWRlcnM6IEFwcGVuZEJsb2JTZWFsRXhjZXB0aW9uSGVhZGVycyxcbiAgICBBcHBlbmRCbG9iU2VhbEhlYWRlcnM6IEFwcGVuZEJsb2JTZWFsSGVhZGVycyxcbiAgICBBcnJvd0NvbmZpZ3VyYXRpb246IEFycm93Q29uZmlndXJhdGlvbixcbiAgICBBcnJvd0ZpZWxkOiBBcnJvd0ZpZWxkLFxuICAgIEJsb2JBYm9ydENvcHlGcm9tVVJMRXhjZXB0aW9uSGVhZGVyczogQmxvYkFib3J0Q29weUZyb21VUkxFeGNlcHRpb25IZWFkZXJzLFxuICAgIEJsb2JBYm9ydENvcHlGcm9tVVJMSGVhZGVyczogQmxvYkFib3J0Q29weUZyb21VUkxIZWFkZXJzLFxuICAgIEJsb2JBY3F1aXJlTGVhc2VFeGNlcHRpb25IZWFkZXJzOiBCbG9iQWNxdWlyZUxlYXNlRXhjZXB0aW9uSGVhZGVycyxcbiAgICBCbG9iQWNxdWlyZUxlYXNlSGVhZGVyczogQmxvYkFjcXVpcmVMZWFzZUhlYWRlcnMsXG4gICAgQmxvYkJyZWFrTGVhc2VFeGNlcHRpb25IZWFkZXJzOiBCbG9iQnJlYWtMZWFzZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQmxvYkJyZWFrTGVhc2VIZWFkZXJzOiBCbG9iQnJlYWtMZWFzZUhlYWRlcnMsXG4gICAgQmxvYkNoYW5nZUxlYXNlRXhjZXB0aW9uSGVhZGVyczogQmxvYkNoYW5nZUxlYXNlRXhjZXB0aW9uSGVhZGVycyxcbiAgICBCbG9iQ2hhbmdlTGVhc2VIZWFkZXJzOiBCbG9iQ2hhbmdlTGVhc2VIZWFkZXJzLFxuICAgIEJsb2JDb3B5RnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnM6IEJsb2JDb3B5RnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQmxvYkNvcHlGcm9tVVJMSGVhZGVyczogQmxvYkNvcHlGcm9tVVJMSGVhZGVycyxcbiAgICBCbG9iQ3JlYXRlU25hcHNob3RFeGNlcHRpb25IZWFkZXJzOiBCbG9iQ3JlYXRlU25hcHNob3RFeGNlcHRpb25IZWFkZXJzLFxuICAgIEJsb2JDcmVhdGVTbmFwc2hvdEhlYWRlcnM6IEJsb2JDcmVhdGVTbmFwc2hvdEhlYWRlcnMsXG4gICAgQmxvYkRlbGV0ZUV4Y2VwdGlvbkhlYWRlcnM6IEJsb2JEZWxldGVFeGNlcHRpb25IZWFkZXJzLFxuICAgIEJsb2JEZWxldGVIZWFkZXJzOiBCbG9iRGVsZXRlSGVhZGVycyxcbiAgICBCbG9iRGVsZXRlSW1tdXRhYmlsaXR5UG9saWN5RXhjZXB0aW9uSGVhZGVyczogQmxvYkRlbGV0ZUltbXV0YWJpbGl0eVBvbGljeUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQmxvYkRlbGV0ZUltbXV0YWJpbGl0eVBvbGljeUhlYWRlcnM6IEJsb2JEZWxldGVJbW11dGFiaWxpdHlQb2xpY3lIZWFkZXJzLFxuICAgIEJsb2JEb3dubG9hZEV4Y2VwdGlvbkhlYWRlcnM6IEJsb2JEb3dubG9hZEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQmxvYkRvd25sb2FkSGVhZGVyczogQmxvYkRvd25sb2FkSGVhZGVycyxcbiAgICBCbG9iRmxhdExpc3RTZWdtZW50OiBCbG9iRmxhdExpc3RTZWdtZW50LFxuICAgIEJsb2JHZXRBY2NvdW50SW5mb0V4Y2VwdGlvbkhlYWRlcnM6IEJsb2JHZXRBY2NvdW50SW5mb0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQmxvYkdldEFjY291bnRJbmZvSGVhZGVyczogQmxvYkdldEFjY291bnRJbmZvSGVhZGVycyxcbiAgICBCbG9iR2V0UHJvcGVydGllc0V4Y2VwdGlvbkhlYWRlcnM6IEJsb2JHZXRQcm9wZXJ0aWVzRXhjZXB0aW9uSGVhZGVycyxcbiAgICBCbG9iR2V0UHJvcGVydGllc0hlYWRlcnM6IEJsb2JHZXRQcm9wZXJ0aWVzSGVhZGVycyxcbiAgICBCbG9iR2V0VGFnc0V4Y2VwdGlvbkhlYWRlcnM6IEJsb2JHZXRUYWdzRXhjZXB0aW9uSGVhZGVycyxcbiAgICBCbG9iR2V0VGFnc0hlYWRlcnM6IEJsb2JHZXRUYWdzSGVhZGVycyxcbiAgICBCbG9iSGllcmFyY2h5TGlzdFNlZ21lbnQ6IEJsb2JIaWVyYXJjaHlMaXN0U2VnbWVudCxcbiAgICBCbG9iSXRlbUludGVybmFsOiBCbG9iSXRlbUludGVybmFsLFxuICAgIEJsb2JOYW1lOiBCbG9iTmFtZSxcbiAgICBCbG9iUHJlZml4OiBCbG9iUHJlZml4LFxuICAgIEJsb2JQcm9wZXJ0aWVzSW50ZXJuYWw6IEJsb2JQcm9wZXJ0aWVzSW50ZXJuYWwsXG4gICAgQmxvYlF1ZXJ5RXhjZXB0aW9uSGVhZGVyczogQmxvYlF1ZXJ5RXhjZXB0aW9uSGVhZGVycyxcbiAgICBCbG9iUXVlcnlIZWFkZXJzOiBCbG9iUXVlcnlIZWFkZXJzLFxuICAgIEJsb2JSZWxlYXNlTGVhc2VFeGNlcHRpb25IZWFkZXJzOiBCbG9iUmVsZWFzZUxlYXNlRXhjZXB0aW9uSGVhZGVycyxcbiAgICBCbG9iUmVsZWFzZUxlYXNlSGVhZGVyczogQmxvYlJlbGVhc2VMZWFzZUhlYWRlcnMsXG4gICAgQmxvYlJlbmV3TGVhc2VFeGNlcHRpb25IZWFkZXJzOiBCbG9iUmVuZXdMZWFzZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQmxvYlJlbmV3TGVhc2VIZWFkZXJzOiBCbG9iUmVuZXdMZWFzZUhlYWRlcnMsXG4gICAgQmxvYlNlcnZpY2VQcm9wZXJ0aWVzOiBCbG9iU2VydmljZVByb3BlcnRpZXMsXG4gICAgQmxvYlNlcnZpY2VTdGF0aXN0aWNzOiBCbG9iU2VydmljZVN0YXRpc3RpY3MsXG4gICAgQmxvYlNldEV4cGlyeUV4Y2VwdGlvbkhlYWRlcnM6IEJsb2JTZXRFeHBpcnlFeGNlcHRpb25IZWFkZXJzLFxuICAgIEJsb2JTZXRFeHBpcnlIZWFkZXJzOiBCbG9iU2V0RXhwaXJ5SGVhZGVycyxcbiAgICBCbG9iU2V0SHR0cEhlYWRlcnNFeGNlcHRpb25IZWFkZXJzOiBCbG9iU2V0SHR0cEhlYWRlcnNFeGNlcHRpb25IZWFkZXJzLFxuICAgIEJsb2JTZXRIdHRwSGVhZGVyc0hlYWRlcnM6IEJsb2JTZXRIdHRwSGVhZGVyc0hlYWRlcnMsXG4gICAgQmxvYlNldEltbXV0YWJpbGl0eVBvbGljeUV4Y2VwdGlvbkhlYWRlcnM6IEJsb2JTZXRJbW11dGFiaWxpdHlQb2xpY3lFeGNlcHRpb25IZWFkZXJzLFxuICAgIEJsb2JTZXRJbW11dGFiaWxpdHlQb2xpY3lIZWFkZXJzOiBCbG9iU2V0SW1tdXRhYmlsaXR5UG9saWN5SGVhZGVycyxcbiAgICBCbG9iU2V0TGVnYWxIb2xkRXhjZXB0aW9uSGVhZGVyczogQmxvYlNldExlZ2FsSG9sZEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQmxvYlNldExlZ2FsSG9sZEhlYWRlcnM6IEJsb2JTZXRMZWdhbEhvbGRIZWFkZXJzLFxuICAgIEJsb2JTZXRNZXRhZGF0YUV4Y2VwdGlvbkhlYWRlcnM6IEJsb2JTZXRNZXRhZGF0YUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQmxvYlNldE1ldGFkYXRhSGVhZGVyczogQmxvYlNldE1ldGFkYXRhSGVhZGVycyxcbiAgICBCbG9iU2V0VGFnc0V4Y2VwdGlvbkhlYWRlcnM6IEJsb2JTZXRUYWdzRXhjZXB0aW9uSGVhZGVycyxcbiAgICBCbG9iU2V0VGFnc0hlYWRlcnM6IEJsb2JTZXRUYWdzSGVhZGVycyxcbiAgICBCbG9iU2V0VGllckV4Y2VwdGlvbkhlYWRlcnM6IEJsb2JTZXRUaWVyRXhjZXB0aW9uSGVhZGVycyxcbiAgICBCbG9iU2V0VGllckhlYWRlcnM6IEJsb2JTZXRUaWVySGVhZGVycyxcbiAgICBCbG9iU3RhcnRDb3B5RnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnM6IEJsb2JTdGFydENvcHlGcm9tVVJMRXhjZXB0aW9uSGVhZGVycyxcbiAgICBCbG9iU3RhcnRDb3B5RnJvbVVSTEhlYWRlcnM6IEJsb2JTdGFydENvcHlGcm9tVVJMSGVhZGVycyxcbiAgICBCbG9iVGFnOiBCbG9iVGFnLFxuICAgIEJsb2JUYWdzOiBCbG9iVGFncyxcbiAgICBCbG9iVW5kZWxldGVFeGNlcHRpb25IZWFkZXJzOiBCbG9iVW5kZWxldGVFeGNlcHRpb25IZWFkZXJzLFxuICAgIEJsb2JVbmRlbGV0ZUhlYWRlcnM6IEJsb2JVbmRlbGV0ZUhlYWRlcnMsXG4gICAgQmxvY2s6IEJsb2NrLFxuICAgIEJsb2NrQmxvYkNvbW1pdEJsb2NrTGlzdEV4Y2VwdGlvbkhlYWRlcnM6IEJsb2NrQmxvYkNvbW1pdEJsb2NrTGlzdEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQmxvY2tCbG9iQ29tbWl0QmxvY2tMaXN0SGVhZGVyczogQmxvY2tCbG9iQ29tbWl0QmxvY2tMaXN0SGVhZGVycyxcbiAgICBCbG9ja0Jsb2JHZXRCbG9ja0xpc3RFeGNlcHRpb25IZWFkZXJzOiBCbG9ja0Jsb2JHZXRCbG9ja0xpc3RFeGNlcHRpb25IZWFkZXJzLFxuICAgIEJsb2NrQmxvYkdldEJsb2NrTGlzdEhlYWRlcnM6IEJsb2NrQmxvYkdldEJsb2NrTGlzdEhlYWRlcnMsXG4gICAgQmxvY2tCbG9iUHV0QmxvYkZyb21VcmxFeGNlcHRpb25IZWFkZXJzOiBCbG9ja0Jsb2JQdXRCbG9iRnJvbVVybEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQmxvY2tCbG9iUHV0QmxvYkZyb21VcmxIZWFkZXJzOiBCbG9ja0Jsb2JQdXRCbG9iRnJvbVVybEhlYWRlcnMsXG4gICAgQmxvY2tCbG9iU3RhZ2VCbG9ja0V4Y2VwdGlvbkhlYWRlcnM6IEJsb2NrQmxvYlN0YWdlQmxvY2tFeGNlcHRpb25IZWFkZXJzLFxuICAgIEJsb2NrQmxvYlN0YWdlQmxvY2tGcm9tVVJMRXhjZXB0aW9uSGVhZGVyczogQmxvY2tCbG9iU3RhZ2VCbG9ja0Zyb21VUkxFeGNlcHRpb25IZWFkZXJzLFxuICAgIEJsb2NrQmxvYlN0YWdlQmxvY2tGcm9tVVJMSGVhZGVyczogQmxvY2tCbG9iU3RhZ2VCbG9ja0Zyb21VUkxIZWFkZXJzLFxuICAgIEJsb2NrQmxvYlN0YWdlQmxvY2tIZWFkZXJzOiBCbG9ja0Jsb2JTdGFnZUJsb2NrSGVhZGVycyxcbiAgICBCbG9ja0Jsb2JVcGxvYWRFeGNlcHRpb25IZWFkZXJzOiBCbG9ja0Jsb2JVcGxvYWRFeGNlcHRpb25IZWFkZXJzLFxuICAgIEJsb2NrQmxvYlVwbG9hZEhlYWRlcnM6IEJsb2NrQmxvYlVwbG9hZEhlYWRlcnMsXG4gICAgQmxvY2tMaXN0OiBCbG9ja0xpc3QsXG4gICAgQmxvY2tMb29rdXBMaXN0OiBCbG9ja0xvb2t1cExpc3QsXG4gICAgQ2xlYXJSYW5nZTogQ2xlYXJSYW5nZSxcbiAgICBDb250YWluZXJBY3F1aXJlTGVhc2VFeGNlcHRpb25IZWFkZXJzOiBDb250YWluZXJBY3F1aXJlTGVhc2VFeGNlcHRpb25IZWFkZXJzLFxuICAgIENvbnRhaW5lckFjcXVpcmVMZWFzZUhlYWRlcnM6IENvbnRhaW5lckFjcXVpcmVMZWFzZUhlYWRlcnMsXG4gICAgQ29udGFpbmVyQnJlYWtMZWFzZUV4Y2VwdGlvbkhlYWRlcnM6IENvbnRhaW5lckJyZWFrTGVhc2VFeGNlcHRpb25IZWFkZXJzLFxuICAgIENvbnRhaW5lckJyZWFrTGVhc2VIZWFkZXJzOiBDb250YWluZXJCcmVha0xlYXNlSGVhZGVycyxcbiAgICBDb250YWluZXJDaGFuZ2VMZWFzZUV4Y2VwdGlvbkhlYWRlcnM6IENvbnRhaW5lckNoYW5nZUxlYXNlRXhjZXB0aW9uSGVhZGVycyxcbiAgICBDb250YWluZXJDaGFuZ2VMZWFzZUhlYWRlcnM6IENvbnRhaW5lckNoYW5nZUxlYXNlSGVhZGVycyxcbiAgICBDb250YWluZXJDcmVhdGVFeGNlcHRpb25IZWFkZXJzOiBDb250YWluZXJDcmVhdGVFeGNlcHRpb25IZWFkZXJzLFxuICAgIENvbnRhaW5lckNyZWF0ZUhlYWRlcnM6IENvbnRhaW5lckNyZWF0ZUhlYWRlcnMsXG4gICAgQ29udGFpbmVyRGVsZXRlRXhjZXB0aW9uSGVhZGVyczogQ29udGFpbmVyRGVsZXRlRXhjZXB0aW9uSGVhZGVycyxcbiAgICBDb250YWluZXJEZWxldGVIZWFkZXJzOiBDb250YWluZXJEZWxldGVIZWFkZXJzLFxuICAgIENvbnRhaW5lckZpbHRlckJsb2JzRXhjZXB0aW9uSGVhZGVyczogQ29udGFpbmVyRmlsdGVyQmxvYnNFeGNlcHRpb25IZWFkZXJzLFxuICAgIENvbnRhaW5lckZpbHRlckJsb2JzSGVhZGVyczogQ29udGFpbmVyRmlsdGVyQmxvYnNIZWFkZXJzLFxuICAgIENvbnRhaW5lckdldEFjY2Vzc1BvbGljeUV4Y2VwdGlvbkhlYWRlcnM6IENvbnRhaW5lckdldEFjY2Vzc1BvbGljeUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQ29udGFpbmVyR2V0QWNjZXNzUG9saWN5SGVhZGVyczogQ29udGFpbmVyR2V0QWNjZXNzUG9saWN5SGVhZGVycyxcbiAgICBDb250YWluZXJHZXRBY2NvdW50SW5mb0V4Y2VwdGlvbkhlYWRlcnM6IENvbnRhaW5lckdldEFjY291bnRJbmZvRXhjZXB0aW9uSGVhZGVycyxcbiAgICBDb250YWluZXJHZXRBY2NvdW50SW5mb0hlYWRlcnM6IENvbnRhaW5lckdldEFjY291bnRJbmZvSGVhZGVycyxcbiAgICBDb250YWluZXJHZXRQcm9wZXJ0aWVzRXhjZXB0aW9uSGVhZGVyczogQ29udGFpbmVyR2V0UHJvcGVydGllc0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQ29udGFpbmVyR2V0UHJvcGVydGllc0hlYWRlcnM6IENvbnRhaW5lckdldFByb3BlcnRpZXNIZWFkZXJzLFxuICAgIENvbnRhaW5lckl0ZW06IENvbnRhaW5lckl0ZW0sXG4gICAgQ29udGFpbmVyTGlzdEJsb2JGbGF0U2VnbWVudEV4Y2VwdGlvbkhlYWRlcnM6IENvbnRhaW5lckxpc3RCbG9iRmxhdFNlZ21lbnRFeGNlcHRpb25IZWFkZXJzLFxuICAgIENvbnRhaW5lckxpc3RCbG9iRmxhdFNlZ21lbnRIZWFkZXJzOiBDb250YWluZXJMaXN0QmxvYkZsYXRTZWdtZW50SGVhZGVycyxcbiAgICBDb250YWluZXJMaXN0QmxvYkhpZXJhcmNoeVNlZ21lbnRFeGNlcHRpb25IZWFkZXJzOiBDb250YWluZXJMaXN0QmxvYkhpZXJhcmNoeVNlZ21lbnRFeGNlcHRpb25IZWFkZXJzLFxuICAgIENvbnRhaW5lckxpc3RCbG9iSGllcmFyY2h5U2VnbWVudEhlYWRlcnM6IENvbnRhaW5lckxpc3RCbG9iSGllcmFyY2h5U2VnbWVudEhlYWRlcnMsXG4gICAgQ29udGFpbmVyUHJvcGVydGllczogQ29udGFpbmVyUHJvcGVydGllcyxcbiAgICBDb250YWluZXJSZWxlYXNlTGVhc2VFeGNlcHRpb25IZWFkZXJzOiBDb250YWluZXJSZWxlYXNlTGVhc2VFeGNlcHRpb25IZWFkZXJzLFxuICAgIENvbnRhaW5lclJlbGVhc2VMZWFzZUhlYWRlcnM6IENvbnRhaW5lclJlbGVhc2VMZWFzZUhlYWRlcnMsXG4gICAgQ29udGFpbmVyUmVuYW1lRXhjZXB0aW9uSGVhZGVyczogQ29udGFpbmVyUmVuYW1lRXhjZXB0aW9uSGVhZGVycyxcbiAgICBDb250YWluZXJSZW5hbWVIZWFkZXJzOiBDb250YWluZXJSZW5hbWVIZWFkZXJzLFxuICAgIENvbnRhaW5lclJlbmV3TGVhc2VFeGNlcHRpb25IZWFkZXJzOiBDb250YWluZXJSZW5ld0xlYXNlRXhjZXB0aW9uSGVhZGVycyxcbiAgICBDb250YWluZXJSZW5ld0xlYXNlSGVhZGVyczogQ29udGFpbmVyUmVuZXdMZWFzZUhlYWRlcnMsXG4gICAgQ29udGFpbmVyUmVzdG9yZUV4Y2VwdGlvbkhlYWRlcnM6IENvbnRhaW5lclJlc3RvcmVFeGNlcHRpb25IZWFkZXJzLFxuICAgIENvbnRhaW5lclJlc3RvcmVIZWFkZXJzOiBDb250YWluZXJSZXN0b3JlSGVhZGVycyxcbiAgICBDb250YWluZXJTZXRBY2Nlc3NQb2xpY3lFeGNlcHRpb25IZWFkZXJzOiBDb250YWluZXJTZXRBY2Nlc3NQb2xpY3lFeGNlcHRpb25IZWFkZXJzLFxuICAgIENvbnRhaW5lclNldEFjY2Vzc1BvbGljeUhlYWRlcnM6IENvbnRhaW5lclNldEFjY2Vzc1BvbGljeUhlYWRlcnMsXG4gICAgQ29udGFpbmVyU2V0TWV0YWRhdGFFeGNlcHRpb25IZWFkZXJzOiBDb250YWluZXJTZXRNZXRhZGF0YUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQ29udGFpbmVyU2V0TWV0YWRhdGFIZWFkZXJzOiBDb250YWluZXJTZXRNZXRhZGF0YUhlYWRlcnMsXG4gICAgQ29udGFpbmVyU3VibWl0QmF0Y2hFeGNlcHRpb25IZWFkZXJzOiBDb250YWluZXJTdWJtaXRCYXRjaEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgQ29udGFpbmVyU3VibWl0QmF0Y2hIZWFkZXJzOiBDb250YWluZXJTdWJtaXRCYXRjaEhlYWRlcnMsXG4gICAgQ29yc1J1bGU6IENvcnNSdWxlLFxuICAgIERlbGltaXRlZFRleHRDb25maWd1cmF0aW9uOiBEZWxpbWl0ZWRUZXh0Q29uZmlndXJhdGlvbixcbiAgICBGaWx0ZXJCbG9iSXRlbTogRmlsdGVyQmxvYkl0ZW0sXG4gICAgRmlsdGVyQmxvYlNlZ21lbnQ6IEZpbHRlckJsb2JTZWdtZW50LFxuICAgIEdlb1JlcGxpY2F0aW9uOiBHZW9SZXBsaWNhdGlvbixcbiAgICBKc29uVGV4dENvbmZpZ3VyYXRpb246IEpzb25UZXh0Q29uZmlndXJhdGlvbixcbiAgICBLZXlJbmZvOiBLZXlJbmZvLFxuICAgIExpc3RCbG9ic0ZsYXRTZWdtZW50UmVzcG9uc2U6IExpc3RCbG9ic0ZsYXRTZWdtZW50UmVzcG9uc2UsXG4gICAgTGlzdEJsb2JzSGllcmFyY2h5U2VnbWVudFJlc3BvbnNlOiBMaXN0QmxvYnNIaWVyYXJjaHlTZWdtZW50UmVzcG9uc2UsXG4gICAgTGlzdENvbnRhaW5lcnNTZWdtZW50UmVzcG9uc2U6IExpc3RDb250YWluZXJzU2VnbWVudFJlc3BvbnNlLFxuICAgIExvZ2dpbmc6IExvZ2dpbmcsXG4gICAgTWV0cmljczogTWV0cmljcyxcbiAgICBQYWdlQmxvYkNsZWFyUGFnZXNFeGNlcHRpb25IZWFkZXJzOiBQYWdlQmxvYkNsZWFyUGFnZXNFeGNlcHRpb25IZWFkZXJzLFxuICAgIFBhZ2VCbG9iQ2xlYXJQYWdlc0hlYWRlcnM6IFBhZ2VCbG9iQ2xlYXJQYWdlc0hlYWRlcnMsXG4gICAgUGFnZUJsb2JDb3B5SW5jcmVtZW50YWxFeGNlcHRpb25IZWFkZXJzOiBQYWdlQmxvYkNvcHlJbmNyZW1lbnRhbEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgUGFnZUJsb2JDb3B5SW5jcmVtZW50YWxIZWFkZXJzOiBQYWdlQmxvYkNvcHlJbmNyZW1lbnRhbEhlYWRlcnMsXG4gICAgUGFnZUJsb2JDcmVhdGVFeGNlcHRpb25IZWFkZXJzOiBQYWdlQmxvYkNyZWF0ZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgUGFnZUJsb2JDcmVhdGVIZWFkZXJzOiBQYWdlQmxvYkNyZWF0ZUhlYWRlcnMsXG4gICAgUGFnZUJsb2JHZXRQYWdlUmFuZ2VzRGlmZkV4Y2VwdGlvbkhlYWRlcnM6IFBhZ2VCbG9iR2V0UGFnZVJhbmdlc0RpZmZFeGNlcHRpb25IZWFkZXJzLFxuICAgIFBhZ2VCbG9iR2V0UGFnZVJhbmdlc0RpZmZIZWFkZXJzOiBQYWdlQmxvYkdldFBhZ2VSYW5nZXNEaWZmSGVhZGVycyxcbiAgICBQYWdlQmxvYkdldFBhZ2VSYW5nZXNFeGNlcHRpb25IZWFkZXJzOiBQYWdlQmxvYkdldFBhZ2VSYW5nZXNFeGNlcHRpb25IZWFkZXJzLFxuICAgIFBhZ2VCbG9iR2V0UGFnZVJhbmdlc0hlYWRlcnM6IFBhZ2VCbG9iR2V0UGFnZVJhbmdlc0hlYWRlcnMsXG4gICAgUGFnZUJsb2JSZXNpemVFeGNlcHRpb25IZWFkZXJzOiBQYWdlQmxvYlJlc2l6ZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgUGFnZUJsb2JSZXNpemVIZWFkZXJzOiBQYWdlQmxvYlJlc2l6ZUhlYWRlcnMsXG4gICAgUGFnZUJsb2JVcGRhdGVTZXF1ZW5jZU51bWJlckV4Y2VwdGlvbkhlYWRlcnM6IFBhZ2VCbG9iVXBkYXRlU2VxdWVuY2VOdW1iZXJFeGNlcHRpb25IZWFkZXJzLFxuICAgIFBhZ2VCbG9iVXBkYXRlU2VxdWVuY2VOdW1iZXJIZWFkZXJzOiBQYWdlQmxvYlVwZGF0ZVNlcXVlbmNlTnVtYmVySGVhZGVycyxcbiAgICBQYWdlQmxvYlVwbG9hZFBhZ2VzRXhjZXB0aW9uSGVhZGVyczogUGFnZUJsb2JVcGxvYWRQYWdlc0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgUGFnZUJsb2JVcGxvYWRQYWdlc0Zyb21VUkxFeGNlcHRpb25IZWFkZXJzOiBQYWdlQmxvYlVwbG9hZFBhZ2VzRnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgUGFnZUJsb2JVcGxvYWRQYWdlc0Zyb21VUkxIZWFkZXJzOiBQYWdlQmxvYlVwbG9hZFBhZ2VzRnJvbVVSTEhlYWRlcnMsXG4gICAgUGFnZUJsb2JVcGxvYWRQYWdlc0hlYWRlcnM6IFBhZ2VCbG9iVXBsb2FkUGFnZXNIZWFkZXJzLFxuICAgIFBhZ2VMaXN0OiBQYWdlTGlzdCxcbiAgICBQYWdlUmFuZ2U6IFBhZ2VSYW5nZSxcbiAgICBRdWVyeUZvcm1hdDogUXVlcnlGb3JtYXQsXG4gICAgUXVlcnlSZXF1ZXN0OiBRdWVyeVJlcXVlc3QsXG4gICAgUXVlcnlTZXJpYWxpemF0aW9uOiBRdWVyeVNlcmlhbGl6YXRpb24sXG4gICAgUmV0ZW50aW9uUG9saWN5OiBSZXRlbnRpb25Qb2xpY3ksXG4gICAgU2VydmljZUZpbHRlckJsb2JzRXhjZXB0aW9uSGVhZGVyczogU2VydmljZUZpbHRlckJsb2JzRXhjZXB0aW9uSGVhZGVycyxcbiAgICBTZXJ2aWNlRmlsdGVyQmxvYnNIZWFkZXJzOiBTZXJ2aWNlRmlsdGVyQmxvYnNIZWFkZXJzLFxuICAgIFNlcnZpY2VHZXRBY2NvdW50SW5mb0V4Y2VwdGlvbkhlYWRlcnM6IFNlcnZpY2VHZXRBY2NvdW50SW5mb0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgU2VydmljZUdldEFjY291bnRJbmZvSGVhZGVyczogU2VydmljZUdldEFjY291bnRJbmZvSGVhZGVycyxcbiAgICBTZXJ2aWNlR2V0UHJvcGVydGllc0V4Y2VwdGlvbkhlYWRlcnM6IFNlcnZpY2VHZXRQcm9wZXJ0aWVzRXhjZXB0aW9uSGVhZGVycyxcbiAgICBTZXJ2aWNlR2V0UHJvcGVydGllc0hlYWRlcnM6IFNlcnZpY2VHZXRQcm9wZXJ0aWVzSGVhZGVycyxcbiAgICBTZXJ2aWNlR2V0U3RhdGlzdGljc0V4Y2VwdGlvbkhlYWRlcnM6IFNlcnZpY2VHZXRTdGF0aXN0aWNzRXhjZXB0aW9uSGVhZGVycyxcbiAgICBTZXJ2aWNlR2V0U3RhdGlzdGljc0hlYWRlcnM6IFNlcnZpY2VHZXRTdGF0aXN0aWNzSGVhZGVycyxcbiAgICBTZXJ2aWNlR2V0VXNlckRlbGVnYXRpb25LZXlFeGNlcHRpb25IZWFkZXJzOiBTZXJ2aWNlR2V0VXNlckRlbGVnYXRpb25LZXlFeGNlcHRpb25IZWFkZXJzLFxuICAgIFNlcnZpY2VHZXRVc2VyRGVsZWdhdGlvbktleUhlYWRlcnM6IFNlcnZpY2VHZXRVc2VyRGVsZWdhdGlvbktleUhlYWRlcnMsXG4gICAgU2VydmljZUxpc3RDb250YWluZXJzU2VnbWVudEV4Y2VwdGlvbkhlYWRlcnM6IFNlcnZpY2VMaXN0Q29udGFpbmVyc1NlZ21lbnRFeGNlcHRpb25IZWFkZXJzLFxuICAgIFNlcnZpY2VMaXN0Q29udGFpbmVyc1NlZ21lbnRIZWFkZXJzOiBTZXJ2aWNlTGlzdENvbnRhaW5lcnNTZWdtZW50SGVhZGVycyxcbiAgICBTZXJ2aWNlU2V0UHJvcGVydGllc0V4Y2VwdGlvbkhlYWRlcnM6IFNlcnZpY2VTZXRQcm9wZXJ0aWVzRXhjZXB0aW9uSGVhZGVycyxcbiAgICBTZXJ2aWNlU2V0UHJvcGVydGllc0hlYWRlcnM6IFNlcnZpY2VTZXRQcm9wZXJ0aWVzSGVhZGVycyxcbiAgICBTZXJ2aWNlU3VibWl0QmF0Y2hFeGNlcHRpb25IZWFkZXJzOiBTZXJ2aWNlU3VibWl0QmF0Y2hFeGNlcHRpb25IZWFkZXJzLFxuICAgIFNlcnZpY2VTdWJtaXRCYXRjaEhlYWRlcnM6IFNlcnZpY2VTdWJtaXRCYXRjaEhlYWRlcnMsXG4gICAgU2lnbmVkSWRlbnRpZmllcjogU2lnbmVkSWRlbnRpZmllcixcbiAgICBTdGF0aWNXZWJzaXRlOiBTdGF0aWNXZWJzaXRlLFxuICAgIFN0b3JhZ2VFcnJvcjogU3RvcmFnZUVycm9yLFxuICAgIFVzZXJEZWxlZ2F0aW9uS2V5OiBVc2VyRGVsZWdhdGlvbktleVxufSk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAqXG4gKiBDb2RlIGdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEF1dG9SZXN0IENvZGUgR2VuZXJhdG9yLlxuICogQ2hhbmdlcyBtYXkgY2F1c2UgaW5jb3JyZWN0IGJlaGF2aW9yIGFuZCB3aWxsIGJlIGxvc3QgaWYgdGhlIGNvZGUgaXMgcmVnZW5lcmF0ZWQuXG4gKi9cbmNvbnN0IGNvbnRlbnRUeXBlID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJjb250ZW50VHlwZVwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcImFwcGxpY2F0aW9uL3htbFwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJDb250ZW50LVR5cGVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGJsb2JTZXJ2aWNlUHJvcGVydGllcyA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImJsb2JTZXJ2aWNlUHJvcGVydGllc1wiLFxuICAgIG1hcHBlcjogQmxvYlNlcnZpY2VQcm9wZXJ0aWVzLFxufTtcbmNvbnN0IGFjY2VwdCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImFjY2VwdFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwiYXBwbGljYXRpb24veG1sXCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkFjY2VwdFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgdXJsID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwidXJsXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcInVybFwiLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgeG1sTmFtZTogXCJ1cmxcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHNraXBFbmNvZGluZzogdHJ1ZSxcbn07XG5jb25zdCByZXN0eXBlID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwicmVzdHlwZVwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwic2VydmljZVwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJyZXN0eXBlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb21wID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiY29tcFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwicHJvcGVydGllc1wiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb21wXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCB0aW1lb3V0SW5TZWNvbmRzID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJ0aW1lb3V0SW5TZWNvbmRzXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBjb25zdHJhaW50czoge1xuICAgICAgICAgICAgSW5jbHVzaXZlTWluaW11bTogMCxcbiAgICAgICAgfSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwidGltZW91dFwiLFxuICAgICAgICB4bWxOYW1lOiBcInRpbWVvdXRcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHZlcnNpb24gPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJ2ZXJzaW9uXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCIyMDI0LTExLTA0XCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtdmVyc2lvblwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgcmVxdWVzdElkID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJyZXF1ZXN0SWRcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY2xpZW50LXJlcXVlc3QtaWRcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWNsaWVudC1yZXF1ZXN0LWlkXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBhY2NlcHQxID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiYWNjZXB0XCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJhcHBsaWNhdGlvbi94bWxcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQWNjZXB0XCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb21wMSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImNvbXBcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcInN0YXRzXCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbXBcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGNvbXAyID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiY29tcFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwibGlzdFwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb21wXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBwcmVmaXggPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcInByZWZpeFwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwicHJlZml4XCIsXG4gICAgICAgIHhtbE5hbWU6IFwicHJlZml4XCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBtYXJrZXIgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcIm1hcmtlclwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwibWFya2VyXCIsXG4gICAgICAgIHhtbE5hbWU6IFwibWFya2VyXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBtYXhQYWdlU2l6ZSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwibWF4UGFnZVNpemVcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGNvbnN0cmFpbnRzOiB7XG4gICAgICAgICAgICBJbmNsdXNpdmVNaW5pbXVtOiAxLFxuICAgICAgICB9LFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJtYXhyZXN1bHRzXCIsXG4gICAgICAgIHhtbE5hbWU6IFwibWF4cmVzdWx0c1wiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgaW5jbHVkZSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiaW5jbHVkZVwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiaW5jbHVkZVwiLFxuICAgICAgICB4bWxOYW1lOiBcImluY2x1ZGVcIixcbiAgICAgICAgeG1sRWxlbWVudE5hbWU6IFwiTGlzdENvbnRhaW5lcnNJbmNsdWRlVHlwZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlNlcXVlbmNlXCIsXG4gICAgICAgICAgICBlbGVtZW50OiB7XG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wibWV0YWRhdGFcIiwgXCJkZWxldGVkXCIsIFwic3lzdGVtXCJdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgY29sbGVjdGlvbkZvcm1hdDogXCJDU1ZcIixcbn07XG5jb25zdCBrZXlJbmZvID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwia2V5SW5mb1wiLFxuICAgIG1hcHBlcjogS2V5SW5mbyxcbn07XG5jb25zdCBjb21wMyA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImNvbXBcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcInVzZXJkZWxlZ2F0aW9ua2V5XCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbXBcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHJlc3R5cGUxID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwicmVzdHlwZVwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwiYWNjb3VudFwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJyZXN0eXBlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBib2R5ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiYm9keVwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJib2R5XCIsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB4bWxOYW1lOiBcImJvZHlcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJlYW1cIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGNvbXA0ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiY29tcFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwiYmF0Y2hcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29tcFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgY29udGVudExlbmd0aCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImNvbnRlbnRMZW5ndGhcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGVudC1MZW5ndGhcIixcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIHhtbE5hbWU6IFwiQ29udGVudC1MZW5ndGhcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IG11bHRpcGFydENvbnRlbnRUeXBlID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwibXVsdGlwYXJ0Q29udGVudFR5cGVcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGVudC1UeXBlXCIsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB4bWxOYW1lOiBcIkNvbnRlbnQtVHlwZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgY29tcDUgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb21wXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJibG9ic1wiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb21wXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCB3aGVyZSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwid2hlcmVcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIndoZXJlXCIsXG4gICAgICAgIHhtbE5hbWU6IFwid2hlcmVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHJlc3R5cGUyID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwicmVzdHlwZVwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwiY29udGFpbmVyXCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcInJlc3R5cGVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IG1ldGFkYXRhID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJtZXRhZGF0YVwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1tZXRhXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1tZXRhXCIsXG4gICAgICAgIGhlYWRlckNvbGxlY3Rpb25QcmVmaXg6IFwieC1tcy1tZXRhLVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIkRpY3Rpb25hcnlcIixcbiAgICAgICAgICAgIHZhbHVlOiB7IHR5cGU6IHsgbmFtZTogXCJTdHJpbmdcIiB9IH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBhY2Nlc3MgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcImFjY2Vzc1wiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLXB1YmxpYy1hY2Nlc3NcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWJsb2ItcHVibGljLWFjY2Vzc1wiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcImNvbnRhaW5lclwiLCBcImJsb2JcIl0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBkZWZhdWx0RW5jcnlwdGlvblNjb3BlID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcbiAgICAgICAgXCJvcHRpb25zXCIsXG4gICAgICAgIFwiY29udGFpbmVyRW5jcnlwdGlvblNjb3BlXCIsXG4gICAgICAgIFwiZGVmYXVsdEVuY3J5cHRpb25TY29wZVwiLFxuICAgIF0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZGVmYXVsdC1lbmNyeXB0aW9uLXNjb3BlXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1kZWZhdWx0LWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHByZXZlbnRFbmNyeXB0aW9uU2NvcGVPdmVycmlkZSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXG4gICAgICAgIFwib3B0aW9uc1wiLFxuICAgICAgICBcImNvbnRhaW5lckVuY3J5cHRpb25TY29wZVwiLFxuICAgICAgICBcInByZXZlbnRFbmNyeXB0aW9uU2NvcGVPdmVycmlkZVwiLFxuICAgIF0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZGVueS1lbmNyeXB0aW9uLXNjb3BlLW92ZXJyaWRlXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1kZW55LWVuY3J5cHRpb24tc2NvcGUtb3ZlcnJpZGVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBsZWFzZUlkID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJsZWFzZUFjY2Vzc0NvbmRpdGlvbnNcIiwgXCJsZWFzZUlkXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxlYXNlLWlkXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1sZWFzZS1pZFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgaWZNb2RpZmllZFNpbmNlID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnNcIiwgXCJpZk1vZGlmaWVkU2luY2VcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIklmLU1vZGlmaWVkLVNpbmNlXCIsXG4gICAgICAgIHhtbE5hbWU6IFwiSWYtTW9kaWZpZWQtU2luY2VcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGlmVW5tb2RpZmllZFNpbmNlID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnNcIiwgXCJpZlVubW9kaWZpZWRTaW5jZVwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiSWYtVW5tb2RpZmllZC1TaW5jZVwiLFxuICAgICAgICB4bWxOYW1lOiBcIklmLVVubW9kaWZpZWQtU2luY2VcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGNvbXA2ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiY29tcFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwibWV0YWRhdGFcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29tcFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgY29tcDcgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb21wXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJhY2xcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29tcFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgY29udGFpbmVyQWNsID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJjb250YWluZXJBY2xcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbnRhaW5lckFjbFwiLFxuICAgICAgICB4bWxOYW1lOiBcIlNpZ25lZElkZW50aWZpZXJzXCIsXG4gICAgICAgIHhtbElzV3JhcHBlZDogdHJ1ZSxcbiAgICAgICAgeG1sRWxlbWVudE5hbWU6IFwiU2lnbmVkSWRlbnRpZmllclwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlNlcXVlbmNlXCIsXG4gICAgICAgICAgICBlbGVtZW50OiB7XG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbXBvc2l0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiU2lnbmVkSWRlbnRpZmllclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgY29tcDggPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb21wXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJ1bmRlbGV0ZVwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb21wXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBkZWxldGVkQ29udGFpbmVyTmFtZSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiZGVsZXRlZENvbnRhaW5lck5hbWVcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZGVsZXRlZC1jb250YWluZXItbmFtZVwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtZGVsZXRlZC1jb250YWluZXItbmFtZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgZGVsZXRlZENvbnRhaW5lclZlcnNpb24gPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcImRlbGV0ZWRDb250YWluZXJWZXJzaW9uXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWRlbGV0ZWQtY29udGFpbmVyLXZlcnNpb25cIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWRlbGV0ZWQtY29udGFpbmVyLXZlcnNpb25cIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGNvbXA5ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiY29tcFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwicmVuYW1lXCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbXBcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHNvdXJjZUNvbnRhaW5lck5hbWUgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJzb3VyY2VDb250YWluZXJOYW1lXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtc291cmNlLWNvbnRhaW5lci1uYW1lXCIsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtc291cmNlLWNvbnRhaW5lci1uYW1lXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBzb3VyY2VMZWFzZUlkID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJzb3VyY2VMZWFzZUlkXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXNvdXJjZS1sZWFzZS1pZFwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtc291cmNlLWxlYXNlLWlkXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb21wMTAgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb21wXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJsZWFzZVwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb21wXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBhY3Rpb24gPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJhY3Rpb25cIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcImFjcXVpcmVcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWFzZS1hY3Rpb25cIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGR1cmF0aW9uID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJkdXJhdGlvblwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWFzZS1kdXJhdGlvblwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGVhc2UtZHVyYXRpb25cIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHByb3Bvc2VkTGVhc2VJZCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwicHJvcG9zZWRMZWFzZUlkXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXByb3Bvc2VkLWxlYXNlLWlkXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1wcm9wb3NlZC1sZWFzZS1pZFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgYWN0aW9uMSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImFjdGlvblwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwicmVsZWFzZVwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxlYXNlLWFjdGlvblwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgbGVhc2VJZDEgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJsZWFzZUlkXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVhc2UtaWRcIixcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1sZWFzZS1pZFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgYWN0aW9uMiA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImFjdGlvblwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwicmVuZXdcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWFzZS1hY3Rpb25cIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGFjdGlvbjMgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJhY3Rpb25cIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcImJyZWFrXCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVhc2UtYWN0aW9uXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBicmVha1BlcmlvZCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiYnJlYWtQZXJpb2RcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVhc2UtYnJlYWstcGVyaW9kXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1sZWFzZS1icmVhay1wZXJpb2RcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGFjdGlvbjQgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJhY3Rpb25cIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcImNoYW5nZVwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWxlYXNlLWFjdGlvblwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgcHJvcG9zZWRMZWFzZUlkMSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcInByb3Bvc2VkTGVhc2VJZFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXByb3Bvc2VkLWxlYXNlLWlkXCIsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtcHJvcG9zZWQtbGVhc2UtaWRcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGluY2x1ZGUxID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJpbmNsdWRlXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJpbmNsdWRlXCIsXG4gICAgICAgIHhtbE5hbWU6IFwiaW5jbHVkZVwiLFxuICAgICAgICB4bWxFbGVtZW50TmFtZTogXCJMaXN0QmxvYnNJbmNsdWRlSXRlbVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlNlcXVlbmNlXCIsXG4gICAgICAgICAgICBlbGVtZW50OiB7XG4gICAgICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJjb3B5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRlbGV0ZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibWV0YWRhdGFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwic25hcHNob3RzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInVuY29tbWl0dGVkYmxvYnNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwidmVyc2lvbnNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwidGFnc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJpbW11dGFiaWxpdHlwb2xpY3lcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibGVnYWxob2xkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRlbGV0ZWR3aXRodmVyc2lvbnNcIixcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIGNvbGxlY3Rpb25Gb3JtYXQ6IFwiQ1NWXCIsXG59O1xuY29uc3QgZGVsaW1pdGVyID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiZGVsaW1pdGVyXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRlbGltaXRlclwiLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgeG1sTmFtZTogXCJkZWxpbWl0ZXJcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHNuYXBzaG90ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJzbmFwc2hvdFwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwic25hcHNob3RcIixcbiAgICAgICAgeG1sTmFtZTogXCJzbmFwc2hvdFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgdmVyc2lvbklkID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJ2ZXJzaW9uSWRcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcInZlcnNpb25pZFwiLFxuICAgICAgICB4bWxOYW1lOiBcInZlcnNpb25pZFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgcmFuZ2UgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcInJhbmdlXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJhbmdlXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1yYW5nZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgcmFuZ2VHZXRDb250ZW50TUQ1ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJyYW5nZUdldENvbnRlbnRNRDVcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmFuZ2UtZ2V0LWNvbnRlbnQtbWQ1XCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1yYW5nZS1nZXQtY29udGVudC1tZDVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCByYW5nZUdldENvbnRlbnRDUkM2NCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwicmFuZ2VHZXRDb250ZW50Q1JDNjRcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmFuZ2UtZ2V0LWNvbnRlbnQtY3JjNjRcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXJhbmdlLWdldC1jb250ZW50LWNyYzY0XCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiQm9vbGVhblwiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgZW5jcnlwdGlvbktleSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiY3BrSW5mb1wiLCBcImVuY3J5cHRpb25LZXlcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1rZXlcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5XCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBlbmNyeXB0aW9uS2V5U2hhMjU2ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJjcGtJbmZvXCIsIFwiZW5jcnlwdGlvbktleVNoYTI1NlwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1lbmNyeXB0aW9uLWtleS1zaGEyNTZcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24ta2V5LXNoYTI1NlwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgZW5jcnlwdGlvbkFsZ29yaXRobSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiY3BrSW5mb1wiLCBcImVuY3J5cHRpb25BbGdvcml0aG1cIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZW5jcnlwdGlvbi1hbGdvcml0aG1cIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tYWxnb3JpdGhtXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBpZk1hdGNoID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnNcIiwgXCJpZk1hdGNoXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJJZi1NYXRjaFwiLFxuICAgICAgICB4bWxOYW1lOiBcIklmLU1hdGNoXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBpZk5vbmVNYXRjaCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwibW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zXCIsIFwiaWZOb25lTWF0Y2hcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIklmLU5vbmUtTWF0Y2hcIixcbiAgICAgICAgeG1sTmFtZTogXCJJZi1Ob25lLU1hdGNoXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBpZlRhZ3MgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcIm1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uc1wiLCBcImlmVGFnc1wiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1pZi10YWdzXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1pZi10YWdzXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBkZWxldGVTbmFwc2hvdHMgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcImRlbGV0ZVNuYXBzaG90c1wiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1kZWxldGUtc25hcHNob3RzXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1kZWxldGUtc25hcHNob3RzXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wiaW5jbHVkZVwiLCBcIm9ubHlcIl0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBibG9iRGVsZXRlVHlwZSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiYmxvYkRlbGV0ZVR5cGVcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImRlbGV0ZXR5cGVcIixcbiAgICAgICAgeG1sTmFtZTogXCJkZWxldGV0eXBlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb21wMTEgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb21wXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJleHBpcnlcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29tcFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgZXhwaXJ5T3B0aW9ucyA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImV4cGlyeU9wdGlvbnNcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1leHBpcnktb3B0aW9uXCIsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtZXhwaXJ5LW9wdGlvblwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgZXhwaXJlc09uID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJleHBpcmVzT25cIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtZXhwaXJ5LXRpbWVcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWV4cGlyeS10aW1lXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBibG9iQ2FjaGVDb250cm9sID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJibG9iSHR0cEhlYWRlcnNcIiwgXCJibG9iQ2FjaGVDb250cm9sXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2ItY2FjaGUtY29udHJvbFwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1jYWNoZS1jb250cm9sXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBibG9iQ29udGVudFR5cGUgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcImJsb2JIdHRwSGVhZGVyc1wiLCBcImJsb2JDb250ZW50VHlwZVwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLWNvbnRlbnQtdHlwZVwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1jb250ZW50LXR5cGVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGJsb2JDb250ZW50TUQ1ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJibG9iSHR0cEhlYWRlcnNcIiwgXCJibG9iQ29udGVudE1ENVwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLWNvbnRlbnQtbWQ1XCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLWNvbnRlbnQtbWQ1XCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBibG9iQ29udGVudEVuY29kaW5nID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJibG9iSHR0cEhlYWRlcnNcIiwgXCJibG9iQ29udGVudEVuY29kaW5nXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2ItY29udGVudC1lbmNvZGluZ1wiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1jb250ZW50LWVuY29kaW5nXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBibG9iQ29udGVudExhbmd1YWdlID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJibG9iSHR0cEhlYWRlcnNcIiwgXCJibG9iQ29udGVudExhbmd1YWdlXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2ItY29udGVudC1sYW5ndWFnZVwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1jb250ZW50LWxhbmd1YWdlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBibG9iQ29udGVudERpc3Bvc2l0aW9uID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJibG9iSHR0cEhlYWRlcnNcIiwgXCJibG9iQ29udGVudERpc3Bvc2l0aW9uXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2ItY29udGVudC1kaXNwb3NpdGlvblwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1jb250ZW50LWRpc3Bvc2l0aW9uXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb21wMTIgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb21wXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJpbW11dGFiaWxpdHlQb2xpY2llc1wiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb21wXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBpbW11dGFiaWxpdHlQb2xpY3lFeHBpcnkgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcImltbXV0YWJpbGl0eVBvbGljeUV4cGlyeVwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1pbW11dGFiaWxpdHktcG9saWN5LXVudGlsLWRhdGVcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWltbXV0YWJpbGl0eS1wb2xpY3ktdW50aWwtZGF0ZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIkRhdGVUaW1lUmZjMTEyM1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgaW1tdXRhYmlsaXR5UG9saWN5TW9kZSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiaW1tdXRhYmlsaXR5UG9saWN5TW9kZVwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1pbW11dGFiaWxpdHktcG9saWN5LW1vZGVcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWltbXV0YWJpbGl0eS1wb2xpY3ktbW9kZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcIk11dGFibGVcIiwgXCJVbmxvY2tlZFwiLCBcIkxvY2tlZFwiXSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGNvbXAxMyA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImNvbXBcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcImxlZ2FsaG9sZFwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb21wXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBsZWdhbEhvbGQgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJsZWdhbEhvbGRcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1sZWdhbC1ob2xkXCIsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGVnYWwtaG9sZFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGVuY3J5cHRpb25TY29wZSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiZW5jcnlwdGlvblNjb3BlXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWVuY3J5cHRpb24tc2NvcGVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGNvbXAxNCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImNvbXBcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcInNuYXBzaG90XCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbXBcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHRpZXIgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcInRpZXJcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYWNjZXNzLXRpZXJcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWFjY2Vzcy10aWVyXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1xuICAgICAgICAgICAgICAgIFwiUDRcIixcbiAgICAgICAgICAgICAgICBcIlA2XCIsXG4gICAgICAgICAgICAgICAgXCJQMTBcIixcbiAgICAgICAgICAgICAgICBcIlAxNVwiLFxuICAgICAgICAgICAgICAgIFwiUDIwXCIsXG4gICAgICAgICAgICAgICAgXCJQMzBcIixcbiAgICAgICAgICAgICAgICBcIlA0MFwiLFxuICAgICAgICAgICAgICAgIFwiUDUwXCIsXG4gICAgICAgICAgICAgICAgXCJQNjBcIixcbiAgICAgICAgICAgICAgICBcIlA3MFwiLFxuICAgICAgICAgICAgICAgIFwiUDgwXCIsXG4gICAgICAgICAgICAgICAgXCJIb3RcIixcbiAgICAgICAgICAgICAgICBcIkNvb2xcIixcbiAgICAgICAgICAgICAgICBcIkFyY2hpdmVcIixcbiAgICAgICAgICAgICAgICBcIkNvbGRcIixcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCByZWh5ZHJhdGVQcmlvcml0eSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwicmVoeWRyYXRlUHJpb3JpdHlcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcmVoeWRyYXRlLXByaW9yaXR5XCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1yZWh5ZHJhdGUtcHJpb3JpdHlcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJIaWdoXCIsIFwiU3RhbmRhcmRcIl0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBzb3VyY2VJZk1vZGlmaWVkU2luY2UgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1xuICAgICAgICBcIm9wdGlvbnNcIixcbiAgICAgICAgXCJzb3VyY2VNb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnNcIixcbiAgICAgICAgXCJzb3VyY2VJZk1vZGlmaWVkU2luY2VcIixcbiAgICBdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXNvdXJjZS1pZi1tb2RpZmllZC1zaW5jZVwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtc291cmNlLWlmLW1vZGlmaWVkLXNpbmNlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiRGF0ZVRpbWVSZmMxMTIzXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBzb3VyY2VJZlVubW9kaWZpZWRTaW5jZSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXG4gICAgICAgIFwib3B0aW9uc1wiLFxuICAgICAgICBcInNvdXJjZU1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uc1wiLFxuICAgICAgICBcInNvdXJjZUlmVW5tb2RpZmllZFNpbmNlXCIsXG4gICAgXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1zb3VyY2UtaWYtdW5tb2RpZmllZC1zaW5jZVwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtc291cmNlLWlmLXVubW9kaWZpZWQtc2luY2VcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJEYXRlVGltZVJmYzExMjNcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHNvdXJjZUlmTWF0Y2ggPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcInNvdXJjZU1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uc1wiLCBcInNvdXJjZUlmTWF0Y2hcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtc291cmNlLWlmLW1hdGNoXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1zb3VyY2UtaWYtbWF0Y2hcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHNvdXJjZUlmTm9uZU1hdGNoID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcbiAgICAgICAgXCJvcHRpb25zXCIsXG4gICAgICAgIFwic291cmNlTW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zXCIsXG4gICAgICAgIFwic291cmNlSWZOb25lTWF0Y2hcIixcbiAgICBdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXNvdXJjZS1pZi1ub25lLW1hdGNoXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1zb3VyY2UtaWYtbm9uZS1tYXRjaFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3Qgc291cmNlSWZUYWdzID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJzb3VyY2VNb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnNcIiwgXCJzb3VyY2VJZlRhZ3NcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtc291cmNlLWlmLXRhZ3NcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXNvdXJjZS1pZi10YWdzXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb3B5U291cmNlID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiY29weVNvdXJjZVwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvcHktc291cmNlXCIsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29weS1zb3VyY2VcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGJsb2JUYWdzU3RyaW5nID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJibG9iVGFnc1N0cmluZ1wiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy10YWdzXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy10YWdzXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBzZWFsQmxvYiA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwic2VhbEJsb2JcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtc2VhbC1ibG9iXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1zZWFsLWJsb2JcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBsZWdhbEhvbGQxID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJsZWdhbEhvbGRcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtbGVnYWwtaG9sZFwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtbGVnYWwtaG9sZFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIkJvb2xlYW5cIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHhNc1JlcXVpcmVzU3luYyA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcInhNc1JlcXVpcmVzU3luY1wiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwidHJ1ZVwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJlcXVpcmVzLXN5bmNcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHNvdXJjZUNvbnRlbnRNRDUgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcInNvdXJjZUNvbnRlbnRNRDVcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtc291cmNlLWNvbnRlbnQtbWQ1XCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1zb3VyY2UtY29udGVudC1tZDVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGNvcHlTb3VyY2VBdXRob3JpemF0aW9uID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJjb3B5U291cmNlQXV0aG9yaXphdGlvblwiXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1jb3B5LXNvdXJjZS1hdXRob3JpemF0aW9uXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LXNvdXJjZS1hdXRob3JpemF0aW9uXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb3B5U291cmNlVGFncyA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiY29weVNvdXJjZVRhZ3NcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1zb3VyY2UtdGFnLW9wdGlvblwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29weS1zb3VyY2UtdGFnLW9wdGlvblwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIkVudW1cIixcbiAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcIlJFUExBQ0VcIiwgXCJDT1BZXCJdLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgY29tcDE1ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiY29tcFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwiY29weVwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb21wXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb3B5QWN0aW9uQWJvcnRDb25zdGFudCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImNvcHlBY3Rpb25BYm9ydENvbnN0YW50XCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJhYm9ydFwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWNvcHktYWN0aW9uXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb3B5SWQgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb3B5SWRcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29weWlkXCIsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB4bWxOYW1lOiBcImNvcHlpZFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgY29tcDE2ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiY29tcFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwidGllclwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb21wXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCB0aWVyMSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcInRpZXJcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1hY2Nlc3MtdGllclwiLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWFjY2Vzcy10aWVyXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1xuICAgICAgICAgICAgICAgIFwiUDRcIixcbiAgICAgICAgICAgICAgICBcIlA2XCIsXG4gICAgICAgICAgICAgICAgXCJQMTBcIixcbiAgICAgICAgICAgICAgICBcIlAxNVwiLFxuICAgICAgICAgICAgICAgIFwiUDIwXCIsXG4gICAgICAgICAgICAgICAgXCJQMzBcIixcbiAgICAgICAgICAgICAgICBcIlA0MFwiLFxuICAgICAgICAgICAgICAgIFwiUDUwXCIsXG4gICAgICAgICAgICAgICAgXCJQNjBcIixcbiAgICAgICAgICAgICAgICBcIlA3MFwiLFxuICAgICAgICAgICAgICAgIFwiUDgwXCIsXG4gICAgICAgICAgICAgICAgXCJIb3RcIixcbiAgICAgICAgICAgICAgICBcIkNvb2xcIixcbiAgICAgICAgICAgICAgICBcIkFyY2hpdmVcIixcbiAgICAgICAgICAgICAgICBcIkNvbGRcIixcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBxdWVyeVJlcXVlc3QgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcInF1ZXJ5UmVxdWVzdFwiXSxcbiAgICBtYXBwZXI6IFF1ZXJ5UmVxdWVzdCxcbn07XG5jb25zdCBjb21wMTcgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb21wXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJxdWVyeVwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb21wXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb21wMTggPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb21wXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJ0YWdzXCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbXBcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHRhZ3MgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcInRhZ3NcIl0sXG4gICAgbWFwcGVyOiBCbG9iVGFncyxcbn07XG5jb25zdCB0cmFuc2FjdGlvbmFsQ29udGVudE1ENSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwidHJhbnNhY3Rpb25hbENvbnRlbnRNRDVcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIkNvbnRlbnQtTUQ1XCIsXG4gICAgICAgIHhtbE5hbWU6IFwiQ29udGVudC1NRDVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJCeXRlQXJyYXlcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHRyYW5zYWN0aW9uYWxDb250ZW50Q3JjNjQgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcInRyYW5zYWN0aW9uYWxDb250ZW50Q3JjNjRcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29udGVudC1jcmM2NFwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtY29udGVudC1jcmM2NFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIkJ5dGVBcnJheVwiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgYmxvYlR5cGUgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJibG9iVHlwZVwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwiUGFnZUJsb2JcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLXR5cGVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGJsb2JDb250ZW50TGVuZ3RoID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiYmxvYkNvbnRlbnRMZW5ndGhcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLWNvbnRlbnQtbGVuZ3RoXCIsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1jb250ZW50LWxlbmd0aFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgYmxvYlNlcXVlbmNlTnVtYmVyID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJibG9iU2VxdWVuY2VOdW1iZXJcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogMCxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLXNlcXVlbmNlLW51bWJlclwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1zZXF1ZW5jZS1udW1iZXJcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGNvbnRlbnRUeXBlMSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwiY29udGVudFR5cGVcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQ29udGVudC1UeXBlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBib2R5MSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImJvZHlcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiYm9keVwiLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgeG1sTmFtZTogXCJib2R5XCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyZWFtXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBhY2NlcHQyID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiYWNjZXB0XCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJhcHBsaWNhdGlvbi94bWxcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiQWNjZXB0XCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb21wMTkgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb21wXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJwYWdlXCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbXBcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHBhZ2VXcml0ZSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcInBhZ2VXcml0ZVwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFwidXBkYXRlXCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcGFnZS13cml0ZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgaWZTZXF1ZW5jZU51bWJlckxlc3NUaGFuT3JFcXVhbFRvID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcbiAgICAgICAgXCJvcHRpb25zXCIsXG4gICAgICAgIFwic2VxdWVuY2VOdW1iZXJBY2Nlc3NDb25kaXRpb25zXCIsXG4gICAgICAgIFwiaWZTZXF1ZW5jZU51bWJlckxlc3NUaGFuT3JFcXVhbFRvXCIsXG4gICAgXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1pZi1zZXF1ZW5jZS1udW1iZXItbGVcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWlmLXNlcXVlbmNlLW51bWJlci1sZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgaWZTZXF1ZW5jZU51bWJlckxlc3NUaGFuID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcbiAgICAgICAgXCJvcHRpb25zXCIsXG4gICAgICAgIFwic2VxdWVuY2VOdW1iZXJBY2Nlc3NDb25kaXRpb25zXCIsXG4gICAgICAgIFwiaWZTZXF1ZW5jZU51bWJlckxlc3NUaGFuXCIsXG4gICAgXSxcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1pZi1zZXF1ZW5jZS1udW1iZXItbHRcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLWlmLXNlcXVlbmNlLW51bWJlci1sdFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgaWZTZXF1ZW5jZU51bWJlckVxdWFsVG8gPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1xuICAgICAgICBcIm9wdGlvbnNcIixcbiAgICAgICAgXCJzZXF1ZW5jZU51bWJlckFjY2Vzc0NvbmRpdGlvbnNcIixcbiAgICAgICAgXCJpZlNlcXVlbmNlTnVtYmVyRXF1YWxUb1wiLFxuICAgIF0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtaWYtc2VxdWVuY2UtbnVtYmVyLWVxXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1pZi1zZXF1ZW5jZS1udW1iZXItZXFcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHBhZ2VXcml0ZTEgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJwYWdlV3JpdGVcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcImNsZWFyXCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtcGFnZS13cml0ZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3Qgc291cmNlVXJsID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwic291cmNlVXJsXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1zb3VyY2VcIixcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LXNvdXJjZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3Qgc291cmNlUmFuZ2UgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJzb3VyY2VSYW5nZVwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXNvdXJjZS1yYW5nZVwiLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXNvdXJjZS1yYW5nZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3Qgc291cmNlQ29udGVudENyYzY0ID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJzb3VyY2VDb250ZW50Q3JjNjRcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtc291cmNlLWNvbnRlbnQtY3JjNjRcIixcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXNvdXJjZS1jb250ZW50LWNyYzY0XCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiQnl0ZUFycmF5XCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCByYW5nZTEgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJyYW5nZVwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXJhbmdlXCIsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtcmFuZ2VcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGNvbXAyMCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImNvbXBcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcInBhZ2VsaXN0XCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbXBcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHByZXZzbmFwc2hvdCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwicHJldnNuYXBzaG90XCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJwcmV2c25hcHNob3RcIixcbiAgICAgICAgeG1sTmFtZTogXCJwcmV2c25hcHNob3RcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHByZXZTbmFwc2hvdFVybCA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwicHJldlNuYXBzaG90VXJsXCJdLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLXByZXZpb3VzLXNuYXBzaG90LXVybFwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtcHJldmlvdXMtc25hcHNob3QtdXJsXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBzZXF1ZW5jZU51bWJlckFjdGlvbiA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcInNlcXVlbmNlTnVtYmVyQWN0aW9uXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtc2VxdWVuY2UtbnVtYmVyLWFjdGlvblwiLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgeG1sTmFtZTogXCJ4LW1zLXNlcXVlbmNlLW51bWJlci1hY3Rpb25cIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJFbnVtXCIsXG4gICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCJtYXhcIiwgXCJ1cGRhdGVcIiwgXCJpbmNyZW1lbnRcIl0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb21wMjEgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb21wXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJpbmNyZW1lbnRhbGNvcHlcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29tcFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgYmxvYlR5cGUxID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiYmxvYlR5cGVcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcIkFwcGVuZEJsb2JcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwieC1tcy1ibG9iLXR5cGVcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGNvbXAyMiA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImNvbXBcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcImFwcGVuZGJsb2NrXCIsXG4gICAgICAgIGlzQ29uc3RhbnQ6IHRydWUsXG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcImNvbXBcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IG1heFNpemUgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1wib3B0aW9uc1wiLCBcImFwcGVuZFBvc2l0aW9uQWNjZXNzQ29uZGl0aW9uc1wiLCBcIm1heFNpemVcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1jb25kaXRpb24tbWF4c2l6ZVwiLFxuICAgICAgICB4bWxOYW1lOiBcIngtbXMtYmxvYi1jb25kaXRpb24tbWF4c2l6ZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIk51bWJlclwiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgYXBwZW5kUG9zaXRpb24gPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogW1xuICAgICAgICBcIm9wdGlvbnNcIixcbiAgICAgICAgXCJhcHBlbmRQb3NpdGlvbkFjY2Vzc0NvbmRpdGlvbnNcIixcbiAgICAgICAgXCJhcHBlbmRQb3NpdGlvblwiLFxuICAgIF0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtYmxvYi1jb25kaXRpb24tYXBwZW5kcG9zXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1ibG9iLWNvbmRpdGlvbi1hcHBlbmRwb3NcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJOdW1iZXJcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IHNvdXJjZVJhbmdlMSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBbXCJvcHRpb25zXCIsIFwic291cmNlUmFuZ2VcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtc291cmNlLXJhbmdlXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1zb3VyY2UtcmFuZ2VcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGNvbXAyMyA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImNvbXBcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcInNlYWxcIixcbiAgICAgICAgaXNDb25zdGFudDogdHJ1ZSxcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiY29tcFwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgYmxvYlR5cGUyID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiYmxvYlR5cGVcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcIkJsb2NrQmxvYlwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJ4LW1zLWJsb2ItdHlwZVwiLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICBuYW1lOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuY29uc3QgY29weVNvdXJjZUJsb2JQcm9wZXJ0aWVzID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFtcIm9wdGlvbnNcIiwgXCJjb3B5U291cmNlQmxvYlByb3BlcnRpZXNcIl0sXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIngtbXMtY29weS1zb3VyY2UtYmxvYi1wcm9wZXJ0aWVzXCIsXG4gICAgICAgIHhtbE5hbWU6IFwieC1tcy1jb3B5LXNvdXJjZS1ibG9iLXByb3BlcnRpZXNcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJCb29sZWFuXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBjb21wMjQgPSB7XG4gICAgcGFyYW1ldGVyUGF0aDogXCJjb21wXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJibG9ja1wiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb21wXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBibG9ja0lkID0ge1xuICAgIHBhcmFtZXRlclBhdGg6IFwiYmxvY2tJZFwiLFxuICAgIG1hcHBlcjoge1xuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJibG9ja2lkXCIsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB4bWxOYW1lOiBcImJsb2NraWRcIixcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgbmFtZTogXCJTdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmNvbnN0IGJsb2NrcyA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImJsb2Nrc1wiLFxuICAgIG1hcHBlcjogQmxvY2tMb29rdXBMaXN0LFxufTtcbmNvbnN0IGNvbXAyNSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImNvbXBcIixcbiAgICBtYXBwZXI6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBcImJsb2NrbGlzdFwiLFxuICAgICAgICBpc0NvbnN0YW50OiB0cnVlLFxuICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJjb21wXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5jb25zdCBsaXN0VHlwZSA9IHtcbiAgICBwYXJhbWV0ZXJQYXRoOiBcImxpc3RUeXBlXCIsXG4gICAgbWFwcGVyOiB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogXCJjb21taXR0ZWRcIixcbiAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwiYmxvY2tsaXN0dHlwZVwiLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgeG1sTmFtZTogXCJibG9ja2xpc3R0eXBlXCIsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIG5hbWU6IFwiRW51bVwiLFxuICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wiY29tbWl0dGVkXCIsIFwidW5jb21taXR0ZWRcIiwgXCJhbGxcIl0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5cbi8qXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAqXG4gKiBDb2RlIGdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEF1dG9SZXN0IENvZGUgR2VuZXJhdG9yLlxuICogQ2hhbmdlcyBtYXkgY2F1c2UgaW5jb3JyZWN0IGJlaGF2aW9yIGFuZCB3aWxsIGJlIGxvc3QgaWYgdGhlIGNvZGUgaXMgcmVnZW5lcmF0ZWQuXG4gKi9cbi8qKiBDbGFzcyBjb250YWluaW5nIFNlcnZpY2Ugb3BlcmF0aW9ucy4gKi9cbmNsYXNzIFNlcnZpY2VJbXBsIHtcbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBjbGFzcyBTZXJ2aWNlIGNsYXNzLlxuICAgICAqIEBwYXJhbSBjbGllbnQgUmVmZXJlbmNlIHRvIHRoZSBzZXJ2aWNlIGNsaWVudFxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGNsaWVudCkge1xuICAgICAgICB0aGlzLmNsaWVudCA9IGNsaWVudDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyBwcm9wZXJ0aWVzIGZvciBhIHN0b3JhZ2UgYWNjb3VudCdzIEJsb2Igc2VydmljZSBlbmRwb2ludCwgaW5jbHVkaW5nIHByb3BlcnRpZXMgZm9yIFN0b3JhZ2VcbiAgICAgKiBBbmFseXRpY3MgYW5kIENPUlMgKENyb3NzLU9yaWdpbiBSZXNvdXJjZSBTaGFyaW5nKSBydWxlc1xuICAgICAqIEBwYXJhbSBibG9iU2VydmljZVByb3BlcnRpZXMgVGhlIFN0b3JhZ2VTZXJ2aWNlIHByb3BlcnRpZXMuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBzZXRQcm9wZXJ0aWVzKGJsb2JTZXJ2aWNlUHJvcGVydGllcywgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBibG9iU2VydmljZVByb3BlcnRpZXMsIG9wdGlvbnMgfSwgc2V0UHJvcGVydGllc09wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBnZXRzIHRoZSBwcm9wZXJ0aWVzIG9mIGEgc3RvcmFnZSBhY2NvdW50J3MgQmxvYiBzZXJ2aWNlLCBpbmNsdWRpbmcgcHJvcGVydGllcyBmb3IgU3RvcmFnZSBBbmFseXRpY3NcbiAgICAgKiBhbmQgQ09SUyAoQ3Jvc3MtT3JpZ2luIFJlc291cmNlIFNoYXJpbmcpIHJ1bGVzLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgZ2V0UHJvcGVydGllcyhvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgZ2V0UHJvcGVydGllc09wZXJhdGlvblNwZWMkMik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyBzdGF0aXN0aWNzIHJlbGF0ZWQgdG8gcmVwbGljYXRpb24gZm9yIHRoZSBCbG9iIHNlcnZpY2UuIEl0IGlzIG9ubHkgYXZhaWxhYmxlIG9uIHRoZVxuICAgICAqIHNlY29uZGFyeSBsb2NhdGlvbiBlbmRwb2ludCB3aGVuIHJlYWQtYWNjZXNzIGdlby1yZWR1bmRhbnQgcmVwbGljYXRpb24gaXMgZW5hYmxlZCBmb3IgdGhlIHN0b3JhZ2VcbiAgICAgKiBhY2NvdW50LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgZ2V0U3RhdGlzdGljcyhvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgZ2V0U3RhdGlzdGljc09wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgTGlzdCBDb250YWluZXJzIFNlZ21lbnQgb3BlcmF0aW9uIHJldHVybnMgYSBsaXN0IG9mIHRoZSBjb250YWluZXJzIHVuZGVyIHRoZSBzcGVjaWZpZWQgYWNjb3VudFxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgbGlzdENvbnRhaW5lcnNTZWdtZW50KG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgb3B0aW9ucyB9LCBsaXN0Q29udGFpbmVyc1NlZ21lbnRPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIGEgdXNlciBkZWxlZ2F0aW9uIGtleSBmb3IgdGhlIEJsb2Igc2VydmljZS4gVGhpcyBpcyBvbmx5IGEgdmFsaWQgb3BlcmF0aW9uIHdoZW4gdXNpbmdcbiAgICAgKiBiZWFyZXIgdG9rZW4gYXV0aGVudGljYXRpb24uXG4gICAgICogQHBhcmFtIGtleUluZm8gS2V5IGluZm9ybWF0aW9uXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBnZXRVc2VyRGVsZWdhdGlvbktleShrZXlJbmZvLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IGtleUluZm8sIG9wdGlvbnMgfSwgZ2V0VXNlckRlbGVnYXRpb25LZXlPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgc2t1IG5hbWUgYW5kIGFjY291bnQga2luZFxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgZ2V0QWNjb3VudEluZm8ob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIGdldEFjY291bnRJbmZvT3BlcmF0aW9uU3BlYyQyKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIEJhdGNoIG9wZXJhdGlvbiBhbGxvd3MgbXVsdGlwbGUgQVBJIGNhbGxzIHRvIGJlIGVtYmVkZGVkIGludG8gYSBzaW5nbGUgSFRUUCByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBjb250ZW50TGVuZ3RoIFRoZSBsZW5ndGggb2YgdGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIG11bHRpcGFydENvbnRlbnRUeXBlIFJlcXVpcmVkLiBUaGUgdmFsdWUgb2YgdGhpcyBoZWFkZXIgbXVzdCBiZSBtdWx0aXBhcnQvbWl4ZWQgd2l0aCBhIGJhdGNoXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kYXJ5LiBFeGFtcGxlIGhlYWRlciB2YWx1ZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT1iYXRjaF88R1VJRD5cbiAgICAgKiBAcGFyYW0gYm9keSBJbml0aWFsIGRhdGFcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIHN1Ym1pdEJhdGNoKGNvbnRlbnRMZW5ndGgsIG11bHRpcGFydENvbnRlbnRUeXBlLCBib2R5LCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IGNvbnRlbnRMZW5ndGgsIG11bHRpcGFydENvbnRlbnRUeXBlLCBib2R5LCBvcHRpb25zIH0sIHN1Ym1pdEJhdGNoT3BlcmF0aW9uU3BlYyQxKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIEZpbHRlciBCbG9icyBvcGVyYXRpb24gZW5hYmxlcyBjYWxsZXJzIHRvIGxpc3QgYmxvYnMgYWNyb3NzIGFsbCBjb250YWluZXJzIHdob3NlIHRhZ3MgbWF0Y2ggYVxuICAgICAqIGdpdmVuIHNlYXJjaCBleHByZXNzaW9uLiAgRmlsdGVyIGJsb2JzIHNlYXJjaGVzIGFjcm9zcyBhbGwgY29udGFpbmVycyB3aXRoaW4gYSBzdG9yYWdlIGFjY291bnQgYnV0XG4gICAgICogY2FuIGJlIHNjb3BlZCB3aXRoaW4gdGhlIGV4cHJlc3Npb24gdG8gYSBzaW5nbGUgY29udGFpbmVyLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgZmlsdGVyQmxvYnMob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIGZpbHRlckJsb2JzT3BlcmF0aW9uU3BlYyQxKTtcbiAgICB9XG59XG4vLyBPcGVyYXRpb24gU3BlY2lmaWNhdGlvbnNcbmNvbnN0IHhtbFNlcmlhbGl6ZXIkNSA9IGNvcmVDbGllbnRfX25hbWVzcGFjZS5jcmVhdGVTZXJpYWxpemVyKE1hcHBlcnMsIC8qIGlzWG1sICovIHRydWUpO1xuY29uc3Qgc2V0UHJvcGVydGllc09wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIvXCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAyOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBTZXJ2aWNlU2V0UHJvcGVydGllc0hlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFNlcnZpY2VTZXRQcm9wZXJ0aWVzRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHJlcXVlc3RCb2R5OiBibG9iU2VydmljZVByb3BlcnRpZXMsXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHJlc3R5cGUsXG4gICAgICAgIGNvbXAsXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIGNvbnRlbnRUeXBlLFxuICAgICAgICBhY2NlcHQsXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3htbDsgY2hhcnNldD11dGYtOFwiLFxuICAgIG1lZGlhVHlwZTogXCJ4bWxcIixcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDUsXG59O1xuY29uc3QgZ2V0UHJvcGVydGllc09wZXJhdGlvblNwZWMkMiA9IHtcbiAgICBwYXRoOiBcIi9cIixcbiAgICBodHRwTWV0aG9kOiBcIkdFVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IEJsb2JTZXJ2aWNlUHJvcGVydGllcyxcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFNlcnZpY2VHZXRQcm9wZXJ0aWVzSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogU2VydmljZUdldFByb3BlcnRpZXNFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHJlc3R5cGUsXG4gICAgICAgIGNvbXAsXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkNSxcbn07XG5jb25zdCBnZXRTdGF0aXN0aWNzT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi9cIixcbiAgICBodHRwTWV0aG9kOiBcIkdFVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IEJsb2JTZXJ2aWNlU3RhdGlzdGljcyxcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFNlcnZpY2VHZXRTdGF0aXN0aWNzSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogU2VydmljZUdldFN0YXRpc3RpY3NFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHJlc3R5cGUsXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIGNvbXAxLFxuICAgIF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDUsXG59O1xuY29uc3QgbGlzdENvbnRhaW5lcnNTZWdtZW50T3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi9cIixcbiAgICBodHRwTWV0aG9kOiBcIkdFVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IExpc3RDb250YWluZXJzU2VnbWVudFJlc3BvbnNlLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogU2VydmljZUxpc3RDb250YWluZXJzU2VnbWVudEhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFNlcnZpY2VMaXN0Q29udGFpbmVyc1NlZ21lbnRFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIGNvbXAyLFxuICAgICAgICBwcmVmaXgsXG4gICAgICAgIG1hcmtlcixcbiAgICAgICAgbWF4UGFnZVNpemUsXG4gICAgICAgIGluY2x1ZGUsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkNSxcbn07XG5jb25zdCBnZXRVc2VyRGVsZWdhdGlvbktleU9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIvXCIsXG4gICAgaHR0cE1ldGhvZDogXCJQT1NUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogVXNlckRlbGVnYXRpb25LZXksXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBTZXJ2aWNlR2V0VXNlckRlbGVnYXRpb25LZXlIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBTZXJ2aWNlR2V0VXNlckRlbGVnYXRpb25LZXlFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcmVxdWVzdEJvZHk6IGtleUluZm8sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHJlc3R5cGUsXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIGNvbXAzLFxuICAgIF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICBjb250ZW50VHlwZSxcbiAgICAgICAgYWNjZXB0LFxuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi94bWw7IGNoYXJzZXQ9dXRmLThcIixcbiAgICBtZWRpYVR5cGU6IFwieG1sXCIsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQ1LFxufTtcbmNvbnN0IGdldEFjY291bnRJbmZvT3BlcmF0aW9uU3BlYyQyID0ge1xuICAgIHBhdGg6IFwiL1wiLFxuICAgIGh0dHBNZXRob2Q6IFwiR0VUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogU2VydmljZUdldEFjY291bnRJbmZvSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogU2VydmljZUdldEFjY291bnRJbmZvRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICBjb21wLFxuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgICAgICByZXN0eXBlMSxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQ1LFxufTtcbmNvbnN0IHN1Ym1pdEJhdGNoT3BlcmF0aW9uU3BlYyQxID0ge1xuICAgIHBhdGg6IFwiL1wiLFxuICAgIGh0dHBNZXRob2Q6IFwiUE9TVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDI6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiB7IG5hbWU6IFwiU3RyZWFtXCIgfSxcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJwYXJzZWRSZXNwb25zZVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFNlcnZpY2VTdWJtaXRCYXRjaEhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFNlcnZpY2VTdWJtaXRCYXRjaEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICByZXF1ZXN0Qm9keTogYm9keSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzLCBjb21wNF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICBhY2NlcHQsXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgbXVsdGlwYXJ0Q29udGVudFR5cGUsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi94bWw7IGNoYXJzZXQ9dXRmLThcIixcbiAgICBtZWRpYVR5cGU6IFwieG1sXCIsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQ1LFxufTtcbmNvbnN0IGZpbHRlckJsb2JzT3BlcmF0aW9uU3BlYyQxID0ge1xuICAgIHBhdGg6IFwiL1wiLFxuICAgIGh0dHBNZXRob2Q6IFwiR0VUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogRmlsdGVyQmxvYlNlZ21lbnQsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBTZXJ2aWNlRmlsdGVyQmxvYnNIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBTZXJ2aWNlRmlsdGVyQmxvYnNFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIG1hcmtlcixcbiAgICAgICAgbWF4UGFnZVNpemUsXG4gICAgICAgIGNvbXA1LFxuICAgICAgICB3aGVyZSxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQ1LFxufTtcblxuLypcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuICpcbiAqIENvZGUgZ2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgQXV0b1Jlc3QgQ29kZSBHZW5lcmF0b3IuXG4gKiBDaGFuZ2VzIG1heSBjYXVzZSBpbmNvcnJlY3QgYmVoYXZpb3IgYW5kIHdpbGwgYmUgbG9zdCBpZiB0aGUgY29kZSBpcyByZWdlbmVyYXRlZC5cbiAqL1xuLyoqIENsYXNzIGNvbnRhaW5pbmcgQ29udGFpbmVyIG9wZXJhdGlvbnMuICovXG5jbGFzcyBDb250YWluZXJJbXBsIHtcbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBjbGFzcyBDb250YWluZXIgY2xhc3MuXG4gICAgICogQHBhcmFtIGNsaWVudCBSZWZlcmVuY2UgdG8gdGhlIHNlcnZpY2UgY2xpZW50XG4gICAgICovXG4gICAgY29uc3RydWN0b3IoY2xpZW50KSB7XG4gICAgICAgIHRoaXMuY2xpZW50ID0gY2xpZW50O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBjcmVhdGVzIGEgbmV3IGNvbnRhaW5lciB1bmRlciB0aGUgc3BlY2lmaWVkIGFjY291bnQuIElmIHRoZSBjb250YWluZXIgd2l0aCB0aGUgc2FtZSBuYW1lIGFscmVhZHlcbiAgICAgKiBleGlzdHMsIHRoZSBvcGVyYXRpb24gZmFpbHNcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGNyZWF0ZShvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgY3JlYXRlT3BlcmF0aW9uU3BlYyQyKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogcmV0dXJucyBhbGwgdXNlci1kZWZpbmVkIG1ldGFkYXRhIGFuZCBzeXN0ZW0gcHJvcGVydGllcyBmb3IgdGhlIHNwZWNpZmllZCBjb250YWluZXIuIFRoZSBkYXRhXG4gICAgICogcmV0dXJuZWQgZG9lcyBub3QgaW5jbHVkZSB0aGUgY29udGFpbmVyJ3MgbGlzdCBvZiBibG9ic1xuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgZ2V0UHJvcGVydGllcyhvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgZ2V0UHJvcGVydGllc09wZXJhdGlvblNwZWMkMSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIG9wZXJhdGlvbiBtYXJrcyB0aGUgc3BlY2lmaWVkIGNvbnRhaW5lciBmb3IgZGVsZXRpb24uIFRoZSBjb250YWluZXIgYW5kIGFueSBibG9icyBjb250YWluZWQgd2l0aGluXG4gICAgICogaXQgYXJlIGxhdGVyIGRlbGV0ZWQgZHVyaW5nIGdhcmJhZ2UgY29sbGVjdGlvblxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgZGVsZXRlKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgb3B0aW9ucyB9LCBkZWxldGVPcGVyYXRpb25TcGVjJDEpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBvcGVyYXRpb24gc2V0cyBvbmUgb3IgbW9yZSB1c2VyLWRlZmluZWQgbmFtZS12YWx1ZSBwYWlycyBmb3IgdGhlIHNwZWNpZmllZCBjb250YWluZXIuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBzZXRNZXRhZGF0YShvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgc2V0TWV0YWRhdGFPcGVyYXRpb25TcGVjJDEpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBnZXRzIHRoZSBwZXJtaXNzaW9ucyBmb3IgdGhlIHNwZWNpZmllZCBjb250YWluZXIuIFRoZSBwZXJtaXNzaW9ucyBpbmRpY2F0ZSB3aGV0aGVyIGNvbnRhaW5lciBkYXRhXG4gICAgICogbWF5IGJlIGFjY2Vzc2VkIHB1YmxpY2x5LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgZ2V0QWNjZXNzUG9saWN5KG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgb3B0aW9ucyB9LCBnZXRBY2Nlc3NQb2xpY3lPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogc2V0cyB0aGUgcGVybWlzc2lvbnMgZm9yIHRoZSBzcGVjaWZpZWQgY29udGFpbmVyLiBUaGUgcGVybWlzc2lvbnMgaW5kaWNhdGUgd2hldGhlciBibG9icyBpbiBhXG4gICAgICogY29udGFpbmVyIG1heSBiZSBhY2Nlc3NlZCBwdWJsaWNseS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIHNldEFjY2Vzc1BvbGljeShvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgc2V0QWNjZXNzUG9saWN5T3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlc3RvcmVzIGEgcHJldmlvdXNseS1kZWxldGVkIGNvbnRhaW5lci5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIHJlc3RvcmUob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIHJlc3RvcmVPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVuYW1lcyBhbiBleGlzdGluZyBjb250YWluZXIuXG4gICAgICogQHBhcmFtIHNvdXJjZUNvbnRhaW5lck5hbWUgUmVxdWlyZWQuICBTcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIGNvbnRhaW5lciB0byByZW5hbWUuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICByZW5hbWUoc291cmNlQ29udGFpbmVyTmFtZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBzb3VyY2VDb250YWluZXJOYW1lLCBvcHRpb25zIH0sIHJlbmFtZU9wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgQmF0Y2ggb3BlcmF0aW9uIGFsbG93cyBtdWx0aXBsZSBBUEkgY2FsbHMgdG8gYmUgZW1iZWRkZWQgaW50byBhIHNpbmdsZSBIVFRQIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIGNvbnRlbnRMZW5ndGggVGhlIGxlbmd0aCBvZiB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gbXVsdGlwYXJ0Q29udGVudFR5cGUgUmVxdWlyZWQuIFRoZSB2YWx1ZSBvZiB0aGlzIGhlYWRlciBtdXN0IGJlIG11bHRpcGFydC9taXhlZCB3aXRoIGEgYmF0Y2hcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRhcnkuIEV4YW1wbGUgaGVhZGVyIHZhbHVlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PWJhdGNoXzxHVUlEPlxuICAgICAqIEBwYXJhbSBib2R5IEluaXRpYWwgZGF0YVxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgc3VibWl0QmF0Y2goY29udGVudExlbmd0aCwgbXVsdGlwYXJ0Q29udGVudFR5cGUsIGJvZHksIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgY29udGVudExlbmd0aCwgbXVsdGlwYXJ0Q29udGVudFR5cGUsIGJvZHksIG9wdGlvbnMgfSwgc3VibWl0QmF0Y2hPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIEZpbHRlciBCbG9icyBvcGVyYXRpb24gZW5hYmxlcyBjYWxsZXJzIHRvIGxpc3QgYmxvYnMgaW4gYSBjb250YWluZXIgd2hvc2UgdGFncyBtYXRjaCBhIGdpdmVuXG4gICAgICogc2VhcmNoIGV4cHJlc3Npb24uICBGaWx0ZXIgYmxvYnMgc2VhcmNoZXMgd2l0aGluIHRoZSBnaXZlbiBjb250YWluZXIuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBmaWx0ZXJCbG9icyhvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgZmlsdGVyQmxvYnNPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogW1VwZGF0ZV0gZXN0YWJsaXNoZXMgYW5kIG1hbmFnZXMgYSBsb2NrIG9uIGEgY29udGFpbmVyIGZvciBkZWxldGUgb3BlcmF0aW9ucy4gVGhlIGxvY2sgZHVyYXRpb24gY2FuXG4gICAgICogYmUgMTUgdG8gNjAgc2Vjb25kcywgb3IgY2FuIGJlIGluZmluaXRlXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBhY3F1aXJlTGVhc2Uob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIGFjcXVpcmVMZWFzZU9wZXJhdGlvblNwZWMkMSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFtVcGRhdGVdIGVzdGFibGlzaGVzIGFuZCBtYW5hZ2VzIGEgbG9jayBvbiBhIGNvbnRhaW5lciBmb3IgZGVsZXRlIG9wZXJhdGlvbnMuIFRoZSBsb2NrIGR1cmF0aW9uIGNhblxuICAgICAqIGJlIDE1IHRvIDYwIHNlY29uZHMsIG9yIGNhbiBiZSBpbmZpbml0ZVxuICAgICAqIEBwYXJhbSBsZWFzZUlkIFNwZWNpZmllcyB0aGUgY3VycmVudCBsZWFzZSBJRCBvbiB0aGUgcmVzb3VyY2UuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICByZWxlYXNlTGVhc2UobGVhc2VJZCwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBsZWFzZUlkLCBvcHRpb25zIH0sIHJlbGVhc2VMZWFzZU9wZXJhdGlvblNwZWMkMSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFtVcGRhdGVdIGVzdGFibGlzaGVzIGFuZCBtYW5hZ2VzIGEgbG9jayBvbiBhIGNvbnRhaW5lciBmb3IgZGVsZXRlIG9wZXJhdGlvbnMuIFRoZSBsb2NrIGR1cmF0aW9uIGNhblxuICAgICAqIGJlIDE1IHRvIDYwIHNlY29uZHMsIG9yIGNhbiBiZSBpbmZpbml0ZVxuICAgICAqIEBwYXJhbSBsZWFzZUlkIFNwZWNpZmllcyB0aGUgY3VycmVudCBsZWFzZSBJRCBvbiB0aGUgcmVzb3VyY2UuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICByZW5ld0xlYXNlKGxlYXNlSWQsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgbGVhc2VJZCwgb3B0aW9ucyB9LCByZW5ld0xlYXNlT3BlcmF0aW9uU3BlYyQxKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogW1VwZGF0ZV0gZXN0YWJsaXNoZXMgYW5kIG1hbmFnZXMgYSBsb2NrIG9uIGEgY29udGFpbmVyIGZvciBkZWxldGUgb3BlcmF0aW9ucy4gVGhlIGxvY2sgZHVyYXRpb24gY2FuXG4gICAgICogYmUgMTUgdG8gNjAgc2Vjb25kcywgb3IgY2FuIGJlIGluZmluaXRlXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBicmVha0xlYXNlKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgb3B0aW9ucyB9LCBicmVha0xlYXNlT3BlcmF0aW9uU3BlYyQxKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogW1VwZGF0ZV0gZXN0YWJsaXNoZXMgYW5kIG1hbmFnZXMgYSBsb2NrIG9uIGEgY29udGFpbmVyIGZvciBkZWxldGUgb3BlcmF0aW9ucy4gVGhlIGxvY2sgZHVyYXRpb24gY2FuXG4gICAgICogYmUgMTUgdG8gNjAgc2Vjb25kcywgb3IgY2FuIGJlIGluZmluaXRlXG4gICAgICogQHBhcmFtIGxlYXNlSWQgU3BlY2lmaWVzIHRoZSBjdXJyZW50IGxlYXNlIElEIG9uIHRoZSByZXNvdXJjZS5cbiAgICAgKiBAcGFyYW0gcHJvcG9zZWRMZWFzZUlkIFByb3Bvc2VkIGxlYXNlIElELCBpbiBhIEdVSUQgc3RyaW5nIGZvcm1hdC4gVGhlIEJsb2Igc2VydmljZSByZXR1cm5zIDQwMFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgKEludmFsaWQgcmVxdWVzdCkgaWYgdGhlIHByb3Bvc2VkIGxlYXNlIElEIGlzIG5vdCBpbiB0aGUgY29ycmVjdCBmb3JtYXQuIFNlZSBHdWlkIENvbnN0cnVjdG9yXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAoU3RyaW5nKSBmb3IgYSBsaXN0IG9mIHZhbGlkIEdVSUQgc3RyaW5nIGZvcm1hdHMuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBjaGFuZ2VMZWFzZShsZWFzZUlkLCBwcm9wb3NlZExlYXNlSWQsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgbGVhc2VJZCwgcHJvcG9zZWRMZWFzZUlkLCBvcHRpb25zIH0sIGNoYW5nZUxlYXNlT3BlcmF0aW9uU3BlYyQxKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogW1VwZGF0ZV0gVGhlIExpc3QgQmxvYnMgb3BlcmF0aW9uIHJldHVybnMgYSBsaXN0IG9mIHRoZSBibG9icyB1bmRlciB0aGUgc3BlY2lmaWVkIGNvbnRhaW5lclxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgbGlzdEJsb2JGbGF0U2VnbWVudChvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgbGlzdEJsb2JGbGF0U2VnbWVudE9wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBbVXBkYXRlXSBUaGUgTGlzdCBCbG9icyBvcGVyYXRpb24gcmV0dXJucyBhIGxpc3Qgb2YgdGhlIGJsb2JzIHVuZGVyIHRoZSBzcGVjaWZpZWQgY29udGFpbmVyXG4gICAgICogQHBhcmFtIGRlbGltaXRlciBXaGVuIHRoZSByZXF1ZXN0IGluY2x1ZGVzIHRoaXMgcGFyYW1ldGVyLCB0aGUgb3BlcmF0aW9uIHJldHVybnMgYSBCbG9iUHJlZml4XG4gICAgICogICAgICAgICAgICAgICAgICBlbGVtZW50IGluIHRoZSByZXNwb25zZSBib2R5IHRoYXQgYWN0cyBhcyBhIHBsYWNlaG9sZGVyIGZvciBhbGwgYmxvYnMgd2hvc2UgbmFtZXMgYmVnaW4gd2l0aCB0aGVcbiAgICAgKiAgICAgICAgICAgICAgICAgIHNhbWUgc3Vic3RyaW5nIHVwIHRvIHRoZSBhcHBlYXJhbmNlIG9mIHRoZSBkZWxpbWl0ZXIgY2hhcmFjdGVyLiBUaGUgZGVsaW1pdGVyIG1heSBiZSBhIHNpbmdsZVxuICAgICAqICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyIG9yIGEgc3RyaW5nLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgbGlzdEJsb2JIaWVyYXJjaHlTZWdtZW50KGRlbGltaXRlciwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBkZWxpbWl0ZXIsIG9wdGlvbnMgfSwgbGlzdEJsb2JIaWVyYXJjaHlTZWdtZW50T3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHNrdSBuYW1lIGFuZCBhY2NvdW50IGtpbmRcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGdldEFjY291bnRJbmZvKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgb3B0aW9ucyB9LCBnZXRBY2NvdW50SW5mb09wZXJhdGlvblNwZWMkMSk7XG4gICAgfVxufVxuLy8gT3BlcmF0aW9uIFNwZWNpZmljYXRpb25zXG5jb25zdCB4bWxTZXJpYWxpemVyJDQgPSBjb3JlQ2xpZW50X19uYW1lc3BhY2UuY3JlYXRlU2VyaWFsaXplcihNYXBwZXJzLCAvKiBpc1htbCAqLyB0cnVlKTtcbmNvbnN0IGNyZWF0ZU9wZXJhdGlvblNwZWMkMiA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDE6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lckNyZWF0ZUhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lckNyZWF0ZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzLCByZXN0eXBlMl0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIG1ldGFkYXRhLFxuICAgICAgICBhY2Nlc3MsXG4gICAgICAgIGRlZmF1bHRFbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgIHByZXZlbnRFbmNyeXB0aW9uU2NvcGVPdmVycmlkZSxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkNCxcbn07XG5jb25zdCBnZXRQcm9wZXJ0aWVzT3BlcmF0aW9uU3BlYyQxID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiR0VUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQ29udGFpbmVyR2V0UHJvcGVydGllc0hlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lckdldFByb3BlcnRpZXNFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbdGltZW91dEluU2Vjb25kcywgcmVzdHlwZTJdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBsZWFzZUlkLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQ0LFxufTtcbmNvbnN0IGRlbGV0ZU9wZXJhdGlvblNwZWMkMSA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX1cIixcbiAgICBodHRwTWV0aG9kOiBcIkRFTEVURVwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDI6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lckRlbGV0ZUhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lckRlbGV0ZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzLCByZXN0eXBlMl0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIGxlYXNlSWQsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDQsXG59O1xuY29uc3Qgc2V0TWV0YWRhdGFPcGVyYXRpb25TcGVjJDEgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJTZXRNZXRhZGF0YUhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lclNldE1ldGFkYXRhRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgICAgICByZXN0eXBlMixcbiAgICAgICAgY29tcDYsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgbWV0YWRhdGEsXG4gICAgICAgIGxlYXNlSWQsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkNCxcbn07XG5jb25zdCBnZXRBY2Nlc3NQb2xpY3lPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiR0VUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjoge1xuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTZXF1ZW5jZVwiLFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB7IG5hbWU6IFwiQ29tcG9zaXRlXCIsIGNsYXNzTmFtZTogXCJTaWduZWRJZGVudGlmaWVyXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcIlNpZ25lZElkZW50aWZpZXJzXCIsXG4gICAgICAgICAgICAgICAgeG1sTmFtZTogXCJTaWduZWRJZGVudGlmaWVyc1wiLFxuICAgICAgICAgICAgICAgIHhtbElzV3JhcHBlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB4bWxFbGVtZW50TmFtZTogXCJTaWduZWRJZGVudGlmaWVyXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQ29udGFpbmVyR2V0QWNjZXNzUG9saWN5SGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQ29udGFpbmVyR2V0QWNjZXNzUG9saWN5RXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgICAgICByZXN0eXBlMixcbiAgICAgICAgY29tcDcsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgbGVhc2VJZCxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkNCxcbn07XG5jb25zdCBzZXRBY2Nlc3NQb2xpY3lPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQ29udGFpbmVyU2V0QWNjZXNzUG9saWN5SGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQ29udGFpbmVyU2V0QWNjZXNzUG9saWN5RXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHJlcXVlc3RCb2R5OiBjb250YWluZXJBY2wsXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIHJlc3R5cGUyLFxuICAgICAgICBjb21wNyxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgY29udGVudFR5cGUsXG4gICAgICAgIGFjY2VwdCxcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2Nlc3MsXG4gICAgICAgIGxlYXNlSWQsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi94bWw7IGNoYXJzZXQ9dXRmLThcIixcbiAgICBtZWRpYVR5cGU6IFwieG1sXCIsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQ0LFxufTtcbmNvbnN0IHJlc3RvcmVPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMToge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQ29udGFpbmVyUmVzdG9yZUhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lclJlc3RvcmVFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIHJlc3R5cGUyLFxuICAgICAgICBjb21wOCxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBkZWxldGVkQ29udGFpbmVyTmFtZSxcbiAgICAgICAgZGVsZXRlZENvbnRhaW5lclZlcnNpb24sXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDQsXG59O1xuY29uc3QgcmVuYW1lT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lclJlbmFtZUhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lclJlbmFtZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFtcbiAgICAgICAgdGltZW91dEluU2Vjb25kcyxcbiAgICAgICAgcmVzdHlwZTIsXG4gICAgICAgIGNvbXA5LFxuICAgIF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIHNvdXJjZUNvbnRhaW5lck5hbWUsXG4gICAgICAgIHNvdXJjZUxlYXNlSWQsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDQsXG59O1xuY29uc3Qgc3VibWl0QmF0Y2hPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUE9TVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDI6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiB7IG5hbWU6IFwiU3RyZWFtXCIgfSxcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJwYXJzZWRSZXNwb25zZVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lclN1Ym1pdEJhdGNoSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQ29udGFpbmVyU3VibWl0QmF0Y2hFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcmVxdWVzdEJvZHk6IGJvZHksXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIGNvbXA0LFxuICAgICAgICByZXN0eXBlMixcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgYWNjZXB0LFxuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGNvbnRlbnRMZW5ndGgsXG4gICAgICAgIG11bHRpcGFydENvbnRlbnRUeXBlLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgY29udGVudFR5cGU6IFwiYXBwbGljYXRpb24veG1sOyBjaGFyc2V0PXV0Zi04XCIsXG4gICAgbWVkaWFUeXBlOiBcInhtbFwiLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkNCxcbn07XG5jb25zdCBmaWx0ZXJCbG9ic09wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJHRVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBGaWx0ZXJCbG9iU2VnbWVudCxcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lckZpbHRlckJsb2JzSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQ29udGFpbmVyRmlsdGVyQmxvYnNFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIG1hcmtlcixcbiAgICAgICAgbWF4UGFnZVNpemUsXG4gICAgICAgIGNvbXA1LFxuICAgICAgICB3aGVyZSxcbiAgICAgICAgcmVzdHlwZTIsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkNCxcbn07XG5jb25zdCBhY3F1aXJlTGVhc2VPcGVyYXRpb25TcGVjJDEgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAxOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJBY3F1aXJlTGVhc2VIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJBY3F1aXJlTGVhc2VFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIHJlc3R5cGUyLFxuICAgICAgICBjb21wMTAsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBkdXJhdGlvbixcbiAgICAgICAgcHJvcG9zZWRMZWFzZUlkLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQ0LFxufTtcbmNvbnN0IHJlbGVhc2VMZWFzZU9wZXJhdGlvblNwZWMkMSA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lclJlbGVhc2VMZWFzZUhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lclJlbGVhc2VMZWFzZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFtcbiAgICAgICAgdGltZW91dEluU2Vjb25kcyxcbiAgICAgICAgcmVzdHlwZTIsXG4gICAgICAgIGNvbXAxMCxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBhY3Rpb24xLFxuICAgICAgICBsZWFzZUlkMSxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkNCxcbn07XG5jb25zdCByZW5ld0xlYXNlT3BlcmF0aW9uU3BlYyQxID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQ29udGFpbmVyUmVuZXdMZWFzZUhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lclJlbmV3TGVhc2VFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIHJlc3R5cGUyLFxuICAgICAgICBjb21wMTAsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgbGVhc2VJZDEsXG4gICAgICAgIGFjdGlvbjIsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDQsXG59O1xuY29uc3QgYnJlYWtMZWFzZU9wZXJhdGlvblNwZWMkMSA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDI6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lckJyZWFrTGVhc2VIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJCcmVha0xlYXNlRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgICAgICByZXN0eXBlMixcbiAgICAgICAgY29tcDEwLFxuICAgIF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIGFjdGlvbjMsXG4gICAgICAgIGJyZWFrUGVyaW9kLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQ0LFxufTtcbmNvbnN0IGNoYW5nZUxlYXNlT3BlcmF0aW9uU3BlYyQxID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQ29udGFpbmVyQ2hhbmdlTGVhc2VIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJDaGFuZ2VMZWFzZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFtcbiAgICAgICAgdGltZW91dEluU2Vjb25kcyxcbiAgICAgICAgcmVzdHlwZTIsXG4gICAgICAgIGNvbXAxMCxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBsZWFzZUlkMSxcbiAgICAgICAgYWN0aW9uNCxcbiAgICAgICAgcHJvcG9zZWRMZWFzZUlkMSxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkNCxcbn07XG5jb25zdCBsaXN0QmxvYkZsYXRTZWdtZW50T3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX1cIixcbiAgICBodHRwTWV0aG9kOiBcIkdFVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IExpc3RCbG9ic0ZsYXRTZWdtZW50UmVzcG9uc2UsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBDb250YWluZXJMaXN0QmxvYkZsYXRTZWdtZW50SGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQ29udGFpbmVyTGlzdEJsb2JGbGF0U2VnbWVudEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFtcbiAgICAgICAgdGltZW91dEluU2Vjb25kcyxcbiAgICAgICAgY29tcDIsXG4gICAgICAgIHByZWZpeCxcbiAgICAgICAgbWFya2VyLFxuICAgICAgICBtYXhQYWdlU2l6ZSxcbiAgICAgICAgcmVzdHlwZTIsXG4gICAgICAgIGluY2x1ZGUxLFxuICAgIF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDQsXG59O1xuY29uc3QgbGlzdEJsb2JIaWVyYXJjaHlTZWdtZW50T3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX1cIixcbiAgICBodHRwTWV0aG9kOiBcIkdFVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IExpc3RCbG9ic0hpZXJhcmNoeVNlZ21lbnRSZXNwb25zZSxcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lckxpc3RCbG9iSGllcmFyY2h5U2VnbWVudEhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lckxpc3RCbG9iSGllcmFyY2h5U2VnbWVudEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFtcbiAgICAgICAgdGltZW91dEluU2Vjb25kcyxcbiAgICAgICAgY29tcDIsXG4gICAgICAgIHByZWZpeCxcbiAgICAgICAgbWFya2VyLFxuICAgICAgICBtYXhQYWdlU2l6ZSxcbiAgICAgICAgcmVzdHlwZTIsXG4gICAgICAgIGluY2x1ZGUxLFxuICAgICAgICBkZWxpbWl0ZXIsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkNCxcbn07XG5jb25zdCBnZXRBY2NvdW50SW5mb09wZXJhdGlvblNwZWMkMSA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX1cIixcbiAgICBodHRwTWV0aG9kOiBcIkdFVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IENvbnRhaW5lckdldEFjY291bnRJbmZvSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQ29udGFpbmVyR2V0QWNjb3VudEluZm9FeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIGNvbXAsXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIHJlc3R5cGUxLFxuICAgIF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDQsXG59O1xuXG4vKlxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKlxuICogQ29kZSBnZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBBdXRvUmVzdCBDb2RlIEdlbmVyYXRvci5cbiAqIENoYW5nZXMgbWF5IGNhdXNlIGluY29ycmVjdCBiZWhhdmlvciBhbmQgd2lsbCBiZSBsb3N0IGlmIHRoZSBjb2RlIGlzIHJlZ2VuZXJhdGVkLlxuICovXG4vKiogQ2xhc3MgY29udGFpbmluZyBCbG9iIG9wZXJhdGlvbnMuICovXG5jbGFzcyBCbG9iSW1wbCB7XG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgY2xhc3MgQmxvYiBjbGFzcy5cbiAgICAgKiBAcGFyYW0gY2xpZW50IFJlZmVyZW5jZSB0byB0aGUgc2VydmljZSBjbGllbnRcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihjbGllbnQpIHtcbiAgICAgICAgdGhpcy5jbGllbnQgPSBjbGllbnQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBEb3dubG9hZCBvcGVyYXRpb24gcmVhZHMgb3IgZG93bmxvYWRzIGEgYmxvYiBmcm9tIHRoZSBzeXN0ZW0sIGluY2x1ZGluZyBpdHMgbWV0YWRhdGEgYW5kXG4gICAgICogcHJvcGVydGllcy4gWW91IGNhbiBhbHNvIGNhbGwgRG93bmxvYWQgdG8gcmVhZCBhIHNuYXBzaG90LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgZG93bmxvYWQob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIGRvd25sb2FkT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBHZXQgUHJvcGVydGllcyBvcGVyYXRpb24gcmV0dXJucyBhbGwgdXNlci1kZWZpbmVkIG1ldGFkYXRhLCBzdGFuZGFyZCBIVFRQIHByb3BlcnRpZXMsIGFuZCBzeXN0ZW1cbiAgICAgKiBwcm9wZXJ0aWVzIGZvciB0aGUgYmxvYi4gSXQgZG9lcyBub3QgcmV0dXJuIHRoZSBjb250ZW50IG9mIHRoZSBibG9iLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgZ2V0UHJvcGVydGllcyhvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgZ2V0UHJvcGVydGllc09wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJZiB0aGUgc3RvcmFnZSBhY2NvdW50J3Mgc29mdCBkZWxldGUgZmVhdHVyZSBpcyBkaXNhYmxlZCB0aGVuLCB3aGVuIGEgYmxvYiBpcyBkZWxldGVkLCBpdCBpc1xuICAgICAqIHBlcm1hbmVudGx5IHJlbW92ZWQgZnJvbSB0aGUgc3RvcmFnZSBhY2NvdW50LiBJZiB0aGUgc3RvcmFnZSBhY2NvdW50J3Mgc29mdCBkZWxldGUgZmVhdHVyZSBpc1xuICAgICAqIGVuYWJsZWQsIHRoZW4sIHdoZW4gYSBibG9iIGlzIGRlbGV0ZWQsIGl0IGlzIG1hcmtlZCBmb3IgZGVsZXRpb24gYW5kIGJlY29tZXMgaW5hY2Nlc3NpYmxlXG4gICAgICogaW1tZWRpYXRlbHkuIEhvd2V2ZXIsIHRoZSBibG9iIHNlcnZpY2UgcmV0YWlucyB0aGUgYmxvYiBvciBzbmFwc2hvdCBmb3IgdGhlIG51bWJlciBvZiBkYXlzIHNwZWNpZmllZFxuICAgICAqIGJ5IHRoZSBEZWxldGVSZXRlbnRpb25Qb2xpY3kgc2VjdGlvbiBvZiBbU3RvcmFnZSBzZXJ2aWNlIHByb3BlcnRpZXNdXG4gICAgICogKFNldC1CbG9iLVNlcnZpY2UtUHJvcGVydGllcy5tZCkuIEFmdGVyIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGRheXMgaGFzIHBhc3NlZCwgdGhlIGJsb2IncyBkYXRhIGlzXG4gICAgICogcGVybWFuZW50bHkgcmVtb3ZlZCBmcm9tIHRoZSBzdG9yYWdlIGFjY291bnQuIE5vdGUgdGhhdCB5b3UgY29udGludWUgdG8gYmUgY2hhcmdlZCBmb3IgdGhlXG4gICAgICogc29mdC1kZWxldGVkIGJsb2IncyBzdG9yYWdlIHVudGlsIGl0IGlzIHBlcm1hbmVudGx5IHJlbW92ZWQuIFVzZSB0aGUgTGlzdCBCbG9icyBBUEkgYW5kIHNwZWNpZnkgdGhlXG4gICAgICogXCJpbmNsdWRlPWRlbGV0ZWRcIiBxdWVyeSBwYXJhbWV0ZXIgdG8gZGlzY292ZXIgd2hpY2ggYmxvYnMgYW5kIHNuYXBzaG90cyBoYXZlIGJlZW4gc29mdCBkZWxldGVkLiBZb3VcbiAgICAgKiBjYW4gdGhlbiB1c2UgdGhlIFVuZGVsZXRlIEJsb2IgQVBJIHRvIHJlc3RvcmUgYSBzb2Z0LWRlbGV0ZWQgYmxvYi4gQWxsIG90aGVyIG9wZXJhdGlvbnMgb24gYVxuICAgICAqIHNvZnQtZGVsZXRlZCBibG9iIG9yIHNuYXBzaG90IGNhdXNlcyB0aGUgc2VydmljZSB0byByZXR1cm4gYW4gSFRUUCBzdGF0dXMgY29kZSBvZiA0MDRcbiAgICAgKiAoUmVzb3VyY2VOb3RGb3VuZCkuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBkZWxldGUob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIGRlbGV0ZU9wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBVbmRlbGV0ZSBhIGJsb2IgdGhhdCB3YXMgcHJldmlvdXNseSBzb2Z0IGRlbGV0ZWRcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIHVuZGVsZXRlKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgb3B0aW9ucyB9LCB1bmRlbGV0ZU9wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSB0aW1lIGEgYmxvYiB3aWxsIGV4cGlyZSBhbmQgYmUgZGVsZXRlZC5cbiAgICAgKiBAcGFyYW0gZXhwaXJ5T3B0aW9ucyBSZXF1aXJlZC4gSW5kaWNhdGVzIG1vZGUgb2YgdGhlIGV4cGlyeSB0aW1lXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBzZXRFeHBpcnkoZXhwaXJ5T3B0aW9ucywgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBleHBpcnlPcHRpb25zLCBvcHRpb25zIH0sIHNldEV4cGlyeU9wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgU2V0IEhUVFAgSGVhZGVycyBvcGVyYXRpb24gc2V0cyBzeXN0ZW0gcHJvcGVydGllcyBvbiB0aGUgYmxvYlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgc2V0SHR0cEhlYWRlcnMob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIHNldEh0dHBIZWFkZXJzT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBTZXQgSW1tdXRhYmlsaXR5IFBvbGljeSBvcGVyYXRpb24gc2V0cyB0aGUgaW1tdXRhYmlsaXR5IHBvbGljeSBvbiB0aGUgYmxvYlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgc2V0SW1tdXRhYmlsaXR5UG9saWN5KG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgb3B0aW9ucyB9LCBzZXRJbW11dGFiaWxpdHlQb2xpY3lPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIERlbGV0ZSBJbW11dGFiaWxpdHkgUG9saWN5IG9wZXJhdGlvbiBkZWxldGVzIHRoZSBpbW11dGFiaWxpdHkgcG9saWN5IG9uIHRoZSBibG9iXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBkZWxldGVJbW11dGFiaWxpdHlQb2xpY3kob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBvcHRpb25zIH0sIGRlbGV0ZUltbXV0YWJpbGl0eVBvbGljeU9wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgU2V0IExlZ2FsIEhvbGQgb3BlcmF0aW9uIHNldHMgYSBsZWdhbCBob2xkIG9uIHRoZSBibG9iLlxuICAgICAqIEBwYXJhbSBsZWdhbEhvbGQgU3BlY2lmaWVkIGlmIGEgbGVnYWwgaG9sZCBzaG91bGQgYmUgc2V0IG9uIHRoZSBibG9iLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgc2V0TGVnYWxIb2xkKGxlZ2FsSG9sZCwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBsZWdhbEhvbGQsIG9wdGlvbnMgfSwgc2V0TGVnYWxIb2xkT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBTZXQgQmxvYiBNZXRhZGF0YSBvcGVyYXRpb24gc2V0cyB1c2VyLWRlZmluZWQgbWV0YWRhdGEgZm9yIHRoZSBzcGVjaWZpZWQgYmxvYiBhcyBvbmUgb3IgbW9yZVxuICAgICAqIG5hbWUtdmFsdWUgcGFpcnNcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIHNldE1ldGFkYXRhKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgb3B0aW9ucyB9LCBzZXRNZXRhZGF0YU9wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBbVXBkYXRlXSBUaGUgTGVhc2UgQmxvYiBvcGVyYXRpb24gZXN0YWJsaXNoZXMgYW5kIG1hbmFnZXMgYSBsb2NrIG9uIGEgYmxvYiBmb3Igd3JpdGUgYW5kIGRlbGV0ZVxuICAgICAqIG9wZXJhdGlvbnNcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGFjcXVpcmVMZWFzZShvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgYWNxdWlyZUxlYXNlT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFtVcGRhdGVdIFRoZSBMZWFzZSBCbG9iIG9wZXJhdGlvbiBlc3RhYmxpc2hlcyBhbmQgbWFuYWdlcyBhIGxvY2sgb24gYSBibG9iIGZvciB3cml0ZSBhbmQgZGVsZXRlXG4gICAgICogb3BlcmF0aW9uc1xuICAgICAqIEBwYXJhbSBsZWFzZUlkIFNwZWNpZmllcyB0aGUgY3VycmVudCBsZWFzZSBJRCBvbiB0aGUgcmVzb3VyY2UuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICByZWxlYXNlTGVhc2UobGVhc2VJZCwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBsZWFzZUlkLCBvcHRpb25zIH0sIHJlbGVhc2VMZWFzZU9wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBbVXBkYXRlXSBUaGUgTGVhc2UgQmxvYiBvcGVyYXRpb24gZXN0YWJsaXNoZXMgYW5kIG1hbmFnZXMgYSBsb2NrIG9uIGEgYmxvYiBmb3Igd3JpdGUgYW5kIGRlbGV0ZVxuICAgICAqIG9wZXJhdGlvbnNcbiAgICAgKiBAcGFyYW0gbGVhc2VJZCBTcGVjaWZpZXMgdGhlIGN1cnJlbnQgbGVhc2UgSUQgb24gdGhlIHJlc291cmNlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgcmVuZXdMZWFzZShsZWFzZUlkLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IGxlYXNlSWQsIG9wdGlvbnMgfSwgcmVuZXdMZWFzZU9wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBbVXBkYXRlXSBUaGUgTGVhc2UgQmxvYiBvcGVyYXRpb24gZXN0YWJsaXNoZXMgYW5kIG1hbmFnZXMgYSBsb2NrIG9uIGEgYmxvYiBmb3Igd3JpdGUgYW5kIGRlbGV0ZVxuICAgICAqIG9wZXJhdGlvbnNcbiAgICAgKiBAcGFyYW0gbGVhc2VJZCBTcGVjaWZpZXMgdGhlIGN1cnJlbnQgbGVhc2UgSUQgb24gdGhlIHJlc291cmNlLlxuICAgICAqIEBwYXJhbSBwcm9wb3NlZExlYXNlSWQgUHJvcG9zZWQgbGVhc2UgSUQsIGluIGEgR1VJRCBzdHJpbmcgZm9ybWF0LiBUaGUgQmxvYiBzZXJ2aWNlIHJldHVybnMgNDAwXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAoSW52YWxpZCByZXF1ZXN0KSBpZiB0aGUgcHJvcG9zZWQgbGVhc2UgSUQgaXMgbm90IGluIHRoZSBjb3JyZWN0IGZvcm1hdC4gU2VlIEd1aWQgQ29uc3RydWN0b3JcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIChTdHJpbmcpIGZvciBhIGxpc3Qgb2YgdmFsaWQgR1VJRCBzdHJpbmcgZm9ybWF0cy5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGNoYW5nZUxlYXNlKGxlYXNlSWQsIHByb3Bvc2VkTGVhc2VJZCwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBsZWFzZUlkLCBwcm9wb3NlZExlYXNlSWQsIG9wdGlvbnMgfSwgY2hhbmdlTGVhc2VPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogW1VwZGF0ZV0gVGhlIExlYXNlIEJsb2Igb3BlcmF0aW9uIGVzdGFibGlzaGVzIGFuZCBtYW5hZ2VzIGEgbG9jayBvbiBhIGJsb2IgZm9yIHdyaXRlIGFuZCBkZWxldGVcbiAgICAgKiBvcGVyYXRpb25zXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBicmVha0xlYXNlKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgb3B0aW9ucyB9LCBicmVha0xlYXNlT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBDcmVhdGUgU25hcHNob3Qgb3BlcmF0aW9uIGNyZWF0ZXMgYSByZWFkLW9ubHkgc25hcHNob3Qgb2YgYSBibG9iXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBjcmVhdGVTbmFwc2hvdChvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgY3JlYXRlU25hcHNob3RPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIFN0YXJ0IENvcHkgRnJvbSBVUkwgb3BlcmF0aW9uIGNvcGllcyBhIGJsb2Igb3IgYW4gaW50ZXJuZXQgcmVzb3VyY2UgdG8gYSBuZXcgYmxvYi5cbiAgICAgKiBAcGFyYW0gY29weVNvdXJjZSBTcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIHNvdXJjZSBwYWdlIGJsb2Igc25hcHNob3QuIFRoaXMgdmFsdWUgaXMgYSBVUkwgb2YgdXAgdG9cbiAgICAgKiAgICAgICAgICAgICAgICAgICAyIEtCIGluIGxlbmd0aCB0aGF0IHNwZWNpZmllcyBhIHBhZ2UgYmxvYiBzbmFwc2hvdC4gVGhlIHZhbHVlIHNob3VsZCBiZSBVUkwtZW5jb2RlZCBhcyBpdCB3b3VsZFxuICAgICAqICAgICAgICAgICAgICAgICAgIGFwcGVhciBpbiBhIHJlcXVlc3QgVVJJLiBUaGUgc291cmNlIGJsb2IgbXVzdCBlaXRoZXIgYmUgcHVibGljIG9yIG11c3QgYmUgYXV0aGVudGljYXRlZCB2aWEgYSBzaGFyZWRcbiAgICAgKiAgICAgICAgICAgICAgICAgICBhY2Nlc3Mgc2lnbmF0dXJlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgc3RhcnRDb3B5RnJvbVVSTChjb3B5U291cmNlLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IGNvcHlTb3VyY2UsIG9wdGlvbnMgfSwgc3RhcnRDb3B5RnJvbVVSTE9wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgQ29weSBGcm9tIFVSTCBvcGVyYXRpb24gY29waWVzIGEgYmxvYiBvciBhbiBpbnRlcm5ldCByZXNvdXJjZSB0byBhIG5ldyBibG9iLiBJdCB3aWxsIG5vdCByZXR1cm5cbiAgICAgKiBhIHJlc3BvbnNlIHVudGlsIHRoZSBjb3B5IGlzIGNvbXBsZXRlLlxuICAgICAqIEBwYXJhbSBjb3B5U291cmNlIFNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgc291cmNlIHBhZ2UgYmxvYiBzbmFwc2hvdC4gVGhpcyB2YWx1ZSBpcyBhIFVSTCBvZiB1cCB0b1xuICAgICAqICAgICAgICAgICAgICAgICAgIDIgS0IgaW4gbGVuZ3RoIHRoYXQgc3BlY2lmaWVzIGEgcGFnZSBibG9iIHNuYXBzaG90LiBUaGUgdmFsdWUgc2hvdWxkIGJlIFVSTC1lbmNvZGVkIGFzIGl0IHdvdWxkXG4gICAgICogICAgICAgICAgICAgICAgICAgYXBwZWFyIGluIGEgcmVxdWVzdCBVUkkuIFRoZSBzb3VyY2UgYmxvYiBtdXN0IGVpdGhlciBiZSBwdWJsaWMgb3IgbXVzdCBiZSBhdXRoZW50aWNhdGVkIHZpYSBhIHNoYXJlZFxuICAgICAqICAgICAgICAgICAgICAgICAgIGFjY2VzcyBzaWduYXR1cmUuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBjb3B5RnJvbVVSTChjb3B5U291cmNlLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IGNvcHlTb3VyY2UsIG9wdGlvbnMgfSwgY29weUZyb21VUkxPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIEFib3J0IENvcHkgRnJvbSBVUkwgb3BlcmF0aW9uIGFib3J0cyBhIHBlbmRpbmcgQ29weSBGcm9tIFVSTCBvcGVyYXRpb24sIGFuZCBsZWF2ZXMgYSBkZXN0aW5hdGlvblxuICAgICAqIGJsb2Igd2l0aCB6ZXJvIGxlbmd0aCBhbmQgZnVsbCBtZXRhZGF0YS5cbiAgICAgKiBAcGFyYW0gY29weUlkIFRoZSBjb3B5IGlkZW50aWZpZXIgcHJvdmlkZWQgaW4gdGhlIHgtbXMtY29weS1pZCBoZWFkZXIgb2YgdGhlIG9yaWdpbmFsIENvcHkgQmxvYlxuICAgICAqICAgICAgICAgICAgICAgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgYWJvcnRDb3B5RnJvbVVSTChjb3B5SWQsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgY29weUlkLCBvcHRpb25zIH0sIGFib3J0Q29weUZyb21VUkxPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIFNldCBUaWVyIG9wZXJhdGlvbiBzZXRzIHRoZSB0aWVyIG9uIGEgYmxvYi4gVGhlIG9wZXJhdGlvbiBpcyBhbGxvd2VkIG9uIGEgcGFnZSBibG9iIGluIGEgcHJlbWl1bVxuICAgICAqIHN0b3JhZ2UgYWNjb3VudCBhbmQgb24gYSBibG9jayBibG9iIGluIGEgYmxvYiBzdG9yYWdlIGFjY291bnQgKGxvY2FsbHkgcmVkdW5kYW50IHN0b3JhZ2Ugb25seSkuIEFcbiAgICAgKiBwcmVtaXVtIHBhZ2UgYmxvYidzIHRpZXIgZGV0ZXJtaW5lcyB0aGUgYWxsb3dlZCBzaXplLCBJT1BTLCBhbmQgYmFuZHdpZHRoIG9mIHRoZSBibG9iLiBBIGJsb2NrXG4gICAgICogYmxvYidzIHRpZXIgZGV0ZXJtaW5lcyBIb3QvQ29vbC9BcmNoaXZlIHN0b3JhZ2UgdHlwZS4gVGhpcyBvcGVyYXRpb24gZG9lcyBub3QgdXBkYXRlIHRoZSBibG9iJ3NcbiAgICAgKiBFVGFnLlxuICAgICAqIEBwYXJhbSB0aWVyIEluZGljYXRlcyB0aGUgdGllciB0byBiZSBzZXQgb24gdGhlIGJsb2IuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBzZXRUaWVyKHRpZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgdGllciwgb3B0aW9ucyB9LCBzZXRUaWVyT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHNrdSBuYW1lIGFuZCBhY2NvdW50IGtpbmRcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGdldEFjY291bnRJbmZvKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgb3B0aW9ucyB9LCBnZXRBY2NvdW50SW5mb09wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgUXVlcnkgb3BlcmF0aW9uIGVuYWJsZXMgdXNlcnMgdG8gc2VsZWN0L3Byb2plY3Qgb24gYmxvYiBkYXRhIGJ5IHByb3ZpZGluZyBzaW1wbGUgcXVlcnlcbiAgICAgKiBleHByZXNzaW9ucy5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIHF1ZXJ5KG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgb3B0aW9ucyB9LCBxdWVyeU9wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgR2V0IFRhZ3Mgb3BlcmF0aW9uIGVuYWJsZXMgdXNlcnMgdG8gZ2V0IHRoZSB0YWdzIGFzc29jaWF0ZWQgd2l0aCBhIGJsb2IuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBnZXRUYWdzKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgb3B0aW9ucyB9LCBnZXRUYWdzT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBTZXQgVGFncyBvcGVyYXRpb24gZW5hYmxlcyB1c2VycyB0byBzZXQgdGFncyBvbiBhIGJsb2IuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBzZXRUYWdzKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgb3B0aW9ucyB9LCBzZXRUYWdzT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxufVxuLy8gT3BlcmF0aW9uIFNwZWNpZmljYXRpb25zXG5jb25zdCB4bWxTZXJpYWxpemVyJDMgPSBjb3JlQ2xpZW50X19uYW1lc3BhY2UuY3JlYXRlU2VyaWFsaXplcihNYXBwZXJzLCAvKiBpc1htbCAqLyB0cnVlKTtcbmNvbnN0IGRvd25sb2FkT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJHRVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogeyBuYW1lOiBcIlN0cmVhbVwiIH0sXG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwicGFyc2VkUmVzcG9uc2VcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iRG93bmxvYWRIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICAyMDY6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiB7IG5hbWU6IFwiU3RyZWFtXCIgfSxcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTmFtZTogXCJwYXJzZWRSZXNwb25zZVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JEb3dubG9hZEhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JEb3dubG9hZEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFtcbiAgICAgICAgdGltZW91dEluU2Vjb25kcyxcbiAgICAgICAgc25hcHNob3QsXG4gICAgICAgIHZlcnNpb25JZCxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICByYW5nZSxcbiAgICAgICAgcmFuZ2VHZXRDb250ZW50TUQ1LFxuICAgICAgICByYW5nZUdldENvbnRlbnRDUkM2NCxcbiAgICAgICAgZW5jcnlwdGlvbktleSxcbiAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1NixcbiAgICAgICAgZW5jcnlwdGlvbkFsZ29yaXRobSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMyxcbn07XG5jb25zdCBnZXRQcm9wZXJ0aWVzT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJIRUFEXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYkdldFByb3BlcnRpZXNIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iR2V0UHJvcGVydGllc0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFtcbiAgICAgICAgdGltZW91dEluU2Vjb25kcyxcbiAgICAgICAgc25hcHNob3QsXG4gICAgICAgIHZlcnNpb25JZCxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBlbmNyeXB0aW9uS2V5LFxuICAgICAgICBlbmNyeXB0aW9uS2V5U2hhMjU2LFxuICAgICAgICBlbmNyeXB0aW9uQWxnb3JpdGhtLFxuICAgICAgICBpZk1hdGNoLFxuICAgICAgICBpZk5vbmVNYXRjaCxcbiAgICAgICAgaWZUYWdzLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQzLFxufTtcbmNvbnN0IGRlbGV0ZU9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiREVMRVRFXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMjoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYkRlbGV0ZUhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JEZWxldGVFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIHNuYXBzaG90LFxuICAgICAgICB2ZXJzaW9uSWQsXG4gICAgICAgIGJsb2JEZWxldGVUeXBlLFxuICAgIF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIGxlYXNlSWQsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmTWF0Y2gsXG4gICAgICAgIGlmTm9uZU1hdGNoLFxuICAgICAgICBpZlRhZ3MsXG4gICAgICAgIGRlbGV0ZVNuYXBzaG90cyxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMyxcbn07XG5jb25zdCB1bmRlbGV0ZU9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYlVuZGVsZXRlSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYlVuZGVsZXRlRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW3RpbWVvdXRJblNlY29uZHMsIGNvbXA4XSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMyxcbn07XG5jb25zdCBzZXRFeHBpcnlPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JTZXRFeHBpcnlIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iU2V0RXhwaXJ5RXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW3RpbWVvdXRJblNlY29uZHMsIGNvbXAxMV0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIGV4cGlyeU9wdGlvbnMsXG4gICAgICAgIGV4cGlyZXNPbixcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMyxcbn07XG5jb25zdCBzZXRIdHRwSGVhZGVyc09wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYlNldEh0dHBIZWFkZXJzSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYlNldEh0dHBIZWFkZXJzRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW2NvbXAsIHRpbWVvdXRJblNlY29uZHNdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBpZk1hdGNoLFxuICAgICAgICBpZk5vbmVNYXRjaCxcbiAgICAgICAgaWZUYWdzLFxuICAgICAgICBibG9iQ2FjaGVDb250cm9sLFxuICAgICAgICBibG9iQ29udGVudFR5cGUsXG4gICAgICAgIGJsb2JDb250ZW50TUQ1LFxuICAgICAgICBibG9iQ29udGVudEVuY29kaW5nLFxuICAgICAgICBibG9iQ29udGVudExhbmd1YWdlLFxuICAgICAgICBibG9iQ29udGVudERpc3Bvc2l0aW9uLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQzLFxufTtcbmNvbnN0IHNldEltbXV0YWJpbGl0eVBvbGljeU9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYlNldEltbXV0YWJpbGl0eVBvbGljeUhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JTZXRJbW11dGFiaWxpdHlQb2xpY3lFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbdGltZW91dEluU2Vjb25kcywgY29tcDEyXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIGltbXV0YWJpbGl0eVBvbGljeUV4cGlyeSxcbiAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5TW9kZSxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMyxcbn07XG5jb25zdCBkZWxldGVJbW11dGFiaWxpdHlQb2xpY3lPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIkRFTEVURVwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JEZWxldGVJbW11dGFiaWxpdHlQb2xpY3lIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iRGVsZXRlSW1tdXRhYmlsaXR5UG9saWN5RXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW3RpbWVvdXRJblNlY29uZHMsIGNvbXAxMl0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDMsXG59O1xuY29uc3Qgc2V0TGVnYWxIb2xkT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iU2V0TGVnYWxIb2xkSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYlNldExlZ2FsSG9sZEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzLCBjb21wMTNdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBsZWdhbEhvbGQsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDMsXG59O1xuY29uc3Qgc2V0TWV0YWRhdGFPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JTZXRNZXRhZGF0YUhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JTZXRNZXRhZGF0YUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzLCBjb21wNl0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIG1ldGFkYXRhLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBlbmNyeXB0aW9uS2V5LFxuICAgICAgICBlbmNyeXB0aW9uS2V5U2hhMjU2LFxuICAgICAgICBlbmNyeXB0aW9uQWxnb3JpdGhtLFxuICAgICAgICBpZk1hdGNoLFxuICAgICAgICBpZk5vbmVNYXRjaCxcbiAgICAgICAgaWZUYWdzLFxuICAgICAgICBlbmNyeXB0aW9uU2NvcGUsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDMsXG59O1xuY29uc3QgYWNxdWlyZUxlYXNlT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAxOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iQWNxdWlyZUxlYXNlSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYkFjcXVpcmVMZWFzZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzLCBjb21wMTBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGR1cmF0aW9uLFxuICAgICAgICBwcm9wb3NlZExlYXNlSWQsXG4gICAgICAgIGlmTWF0Y2gsXG4gICAgICAgIGlmTm9uZU1hdGNoLFxuICAgICAgICBpZlRhZ3MsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDMsXG59O1xuY29uc3QgcmVsZWFzZUxlYXNlT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iUmVsZWFzZUxlYXNlSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYlJlbGVhc2VMZWFzZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzLCBjb21wMTBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBhY3Rpb24xLFxuICAgICAgICBsZWFzZUlkMSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMyxcbn07XG5jb25zdCByZW5ld0xlYXNlT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iUmVuZXdMZWFzZUhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JSZW5ld0xlYXNlRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW3RpbWVvdXRJblNlY29uZHMsIGNvbXAxMF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIGxlYXNlSWQxLFxuICAgICAgICBhY3Rpb24yLFxuICAgICAgICBpZk1hdGNoLFxuICAgICAgICBpZk5vbmVNYXRjaCxcbiAgICAgICAgaWZUYWdzLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQzLFxufTtcbmNvbnN0IGNoYW5nZUxlYXNlT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iQ2hhbmdlTGVhc2VIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iQ2hhbmdlTGVhc2VFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbdGltZW91dEluU2Vjb25kcywgY29tcDEwXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgbGVhc2VJZDEsXG4gICAgICAgIGFjdGlvbjQsXG4gICAgICAgIHByb3Bvc2VkTGVhc2VJZDEsXG4gICAgICAgIGlmTWF0Y2gsXG4gICAgICAgIGlmTm9uZU1hdGNoLFxuICAgICAgICBpZlRhZ3MsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDMsXG59O1xuY29uc3QgYnJlYWtMZWFzZU9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMjoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYkJyZWFrTGVhc2VIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iQnJlYWtMZWFzZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzLCBjb21wMTBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBhY3Rpb24zLFxuICAgICAgICBicmVha1BlcmlvZCxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMyxcbn07XG5jb25zdCBjcmVhdGVTbmFwc2hvdE9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMToge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYkNyZWF0ZVNuYXBzaG90SGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYkNyZWF0ZVNuYXBzaG90RXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW3RpbWVvdXRJblNlY29uZHMsIGNvbXAxNF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIG1ldGFkYXRhLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBlbmNyeXB0aW9uS2V5LFxuICAgICAgICBlbmNyeXB0aW9uS2V5U2hhMjU2LFxuICAgICAgICBlbmNyeXB0aW9uQWxnb3JpdGhtLFxuICAgICAgICBpZk1hdGNoLFxuICAgICAgICBpZk5vbmVNYXRjaCxcbiAgICAgICAgaWZUYWdzLFxuICAgICAgICBlbmNyeXB0aW9uU2NvcGUsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDMsXG59O1xuY29uc3Qgc3RhcnRDb3B5RnJvbVVSTE9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMjoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYlN0YXJ0Q29weUZyb21VUkxIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iU3RhcnRDb3B5RnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgbWV0YWRhdGEsXG4gICAgICAgIGxlYXNlSWQsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmTWF0Y2gsXG4gICAgICAgIGlmTm9uZU1hdGNoLFxuICAgICAgICBpZlRhZ3MsXG4gICAgICAgIGltbXV0YWJpbGl0eVBvbGljeUV4cGlyeSxcbiAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5TW9kZSxcbiAgICAgICAgdGllcixcbiAgICAgICAgcmVoeWRyYXRlUHJpb3JpdHksXG4gICAgICAgIHNvdXJjZUlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgc291cmNlSWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIHNvdXJjZUlmTWF0Y2gsXG4gICAgICAgIHNvdXJjZUlmTm9uZU1hdGNoLFxuICAgICAgICBzb3VyY2VJZlRhZ3MsXG4gICAgICAgIGNvcHlTb3VyY2UsXG4gICAgICAgIGJsb2JUYWdzU3RyaW5nLFxuICAgICAgICBzZWFsQmxvYixcbiAgICAgICAgbGVnYWxIb2xkMSxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMyxcbn07XG5jb25zdCBjb3B5RnJvbVVSTE9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMjoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYkNvcHlGcm9tVVJMSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYkNvcHlGcm9tVVJMRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW3RpbWVvdXRJblNlY29uZHNdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBtZXRhZGF0YSxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5RXhwaXJ5LFxuICAgICAgICBpbW11dGFiaWxpdHlQb2xpY3lNb2RlLFxuICAgICAgICBlbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgIHRpZXIsXG4gICAgICAgIHNvdXJjZUlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgc291cmNlSWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIHNvdXJjZUlmTWF0Y2gsXG4gICAgICAgIHNvdXJjZUlmTm9uZU1hdGNoLFxuICAgICAgICBjb3B5U291cmNlLFxuICAgICAgICBibG9iVGFnc1N0cmluZyxcbiAgICAgICAgbGVnYWxIb2xkMSxcbiAgICAgICAgeE1zUmVxdWlyZXNTeW5jLFxuICAgICAgICBzb3VyY2VDb250ZW50TUQ1LFxuICAgICAgICBjb3B5U291cmNlQXV0aG9yaXphdGlvbixcbiAgICAgICAgY29weVNvdXJjZVRhZ3MsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDMsXG59O1xuY29uc3QgYWJvcnRDb3B5RnJvbVVSTE9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwNDoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYkFib3J0Q29weUZyb21VUkxIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iQWJvcnRDb3B5RnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFtcbiAgICAgICAgdGltZW91dEluU2Vjb25kcyxcbiAgICAgICAgY29tcDE1LFxuICAgICAgICBjb3B5SWQsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgY29weUFjdGlvbkFib3J0Q29uc3RhbnQsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDMsXG59O1xuY29uc3Qgc2V0VGllck9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYlNldFRpZXJIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICAyMDI6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JTZXRUaWVySGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYlNldFRpZXJFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIHNuYXBzaG90LFxuICAgICAgICB2ZXJzaW9uSWQsXG4gICAgICAgIGNvbXAxNixcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZlRhZ3MsXG4gICAgICAgIHJlaHlkcmF0ZVByaW9yaXR5LFxuICAgICAgICB0aWVyMSxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMyxcbn07XG5jb25zdCBnZXRBY2NvdW50SW5mb09wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiR0VUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYkdldEFjY291bnRJbmZvSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYkdldEFjY291bnRJbmZvRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW1xuICAgICAgICBjb21wLFxuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzLFxuICAgICAgICByZXN0eXBlMSxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQzLFxufTtcbmNvbnN0IHF1ZXJ5T3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQT1NUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjoge1xuICAgICAgICAgICAgICAgIHR5cGU6IHsgbmFtZTogXCJTdHJlYW1cIiB9LFxuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWROYW1lOiBcInBhcnNlZFJlc3BvbnNlXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYlF1ZXJ5SGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgMjA2OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogeyBuYW1lOiBcIlN0cmVhbVwiIH0sXG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZE5hbWU6IFwicGFyc2VkUmVzcG9uc2VcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iUXVlcnlIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iUXVlcnlFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcmVxdWVzdEJvZHk6IHF1ZXJ5UmVxdWVzdCxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFtcbiAgICAgICAgdGltZW91dEluU2Vjb25kcyxcbiAgICAgICAgc25hcHNob3QsXG4gICAgICAgIGNvbXAxNyxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgY29udGVudFR5cGUsXG4gICAgICAgIGFjY2VwdCxcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBlbmNyeXB0aW9uS2V5LFxuICAgICAgICBlbmNyeXB0aW9uS2V5U2hhMjU2LFxuICAgICAgICBlbmNyeXB0aW9uQWxnb3JpdGhtLFxuICAgICAgICBpZk1hdGNoLFxuICAgICAgICBpZk5vbmVNYXRjaCxcbiAgICAgICAgaWZUYWdzLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgY29udGVudFR5cGU6IFwiYXBwbGljYXRpb24veG1sOyBjaGFyc2V0PXV0Zi04XCIsXG4gICAgbWVkaWFUeXBlOiBcInhtbFwiLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMyxcbn07XG5jb25zdCBnZXRUYWdzT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJHRVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBCbG9iVGFncyxcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2JHZXRUYWdzSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYkdldFRhZ3NFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIHNuYXBzaG90LFxuICAgICAgICB2ZXJzaW9uSWQsXG4gICAgICAgIGNvbXAxOCxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZlRhZ3MsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDMsXG59O1xuY29uc3Qgc2V0VGFnc09wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwNDoge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvYlNldFRhZ3NIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9iU2V0VGFnc0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICByZXF1ZXN0Qm9keTogdGFncyxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFtcbiAgICAgICAgdGltZW91dEluU2Vjb25kcyxcbiAgICAgICAgdmVyc2lvbklkLFxuICAgICAgICBjb21wMTgsXG4gICAgXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIGNvbnRlbnRUeXBlLFxuICAgICAgICBhY2NlcHQsXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgaWZUYWdzLFxuICAgICAgICB0cmFuc2FjdGlvbmFsQ29udGVudE1ENSxcbiAgICAgICAgdHJhbnNhY3Rpb25hbENvbnRlbnRDcmM2NCxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3htbDsgY2hhcnNldD11dGYtOFwiLFxuICAgIG1lZGlhVHlwZTogXCJ4bWxcIixcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDMsXG59O1xuXG4vKlxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKlxuICogQ29kZSBnZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBBdXRvUmVzdCBDb2RlIEdlbmVyYXRvci5cbiAqIENoYW5nZXMgbWF5IGNhdXNlIGluY29ycmVjdCBiZWhhdmlvciBhbmQgd2lsbCBiZSBsb3N0IGlmIHRoZSBjb2RlIGlzIHJlZ2VuZXJhdGVkLlxuICovXG4vKiogQ2xhc3MgY29udGFpbmluZyBQYWdlQmxvYiBvcGVyYXRpb25zLiAqL1xuY2xhc3MgUGFnZUJsb2JJbXBsIHtcbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBjbGFzcyBQYWdlQmxvYiBjbGFzcy5cbiAgICAgKiBAcGFyYW0gY2xpZW50IFJlZmVyZW5jZSB0byB0aGUgc2VydmljZSBjbGllbnRcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihjbGllbnQpIHtcbiAgICAgICAgdGhpcy5jbGllbnQgPSBjbGllbnQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBDcmVhdGUgb3BlcmF0aW9uIGNyZWF0ZXMgYSBuZXcgcGFnZSBibG9iLlxuICAgICAqIEBwYXJhbSBjb250ZW50TGVuZ3RoIFRoZSBsZW5ndGggb2YgdGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIGJsb2JDb250ZW50TGVuZ3RoIFRoaXMgaGVhZGVyIHNwZWNpZmllcyB0aGUgbWF4aW11bSBzaXplIGZvciB0aGUgcGFnZSBibG9iLCB1cCB0byAxIFRCLiBUaGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZSBibG9iIHNpemUgbXVzdCBiZSBhbGlnbmVkIHRvIGEgNTEyLWJ5dGUgYm91bmRhcnkuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBjcmVhdGUoY29udGVudExlbmd0aCwgYmxvYkNvbnRlbnRMZW5ndGgsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgY29udGVudExlbmd0aCwgYmxvYkNvbnRlbnRMZW5ndGgsIG9wdGlvbnMgfSwgY3JlYXRlT3BlcmF0aW9uU3BlYyQxKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIFVwbG9hZCBQYWdlcyBvcGVyYXRpb24gd3JpdGVzIGEgcmFuZ2Ugb2YgcGFnZXMgdG8gYSBwYWdlIGJsb2JcbiAgICAgKiBAcGFyYW0gY29udGVudExlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBib2R5IEluaXRpYWwgZGF0YVxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgdXBsb2FkUGFnZXMoY29udGVudExlbmd0aCwgYm9keSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBjb250ZW50TGVuZ3RoLCBib2R5LCBvcHRpb25zIH0sIHVwbG9hZFBhZ2VzT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBDbGVhciBQYWdlcyBvcGVyYXRpb24gY2xlYXJzIGEgc2V0IG9mIHBhZ2VzIGZyb20gYSBwYWdlIGJsb2JcbiAgICAgKiBAcGFyYW0gY29udGVudExlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgY2xlYXJQYWdlcyhjb250ZW50TGVuZ3RoLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IGNvbnRlbnRMZW5ndGgsIG9wdGlvbnMgfSwgY2xlYXJQYWdlc09wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgVXBsb2FkIFBhZ2VzIG9wZXJhdGlvbiB3cml0ZXMgYSByYW5nZSBvZiBwYWdlcyB0byBhIHBhZ2UgYmxvYiB3aGVyZSB0aGUgY29udGVudHMgYXJlIHJlYWQgZnJvbSBhXG4gICAgICogVVJMXG4gICAgICogQHBhcmFtIHNvdXJjZVVybCBTcGVjaWZ5IGEgVVJMIHRvIHRoZSBjb3B5IHNvdXJjZS5cbiAgICAgKiBAcGFyYW0gc291cmNlUmFuZ2UgQnl0ZXMgb2Ygc291cmNlIGRhdGEgaW4gdGhlIHNwZWNpZmllZCByYW5nZS4gVGhlIGxlbmd0aCBvZiB0aGlzIHJhbmdlIHNob3VsZFxuICAgICAqICAgICAgICAgICAgICAgICAgICBtYXRjaCB0aGUgQ29udGVudExlbmd0aCBoZWFkZXIgYW5kIHgtbXMtcmFuZ2UvUmFuZ2UgZGVzdGluYXRpb24gcmFuZ2UgaGVhZGVyLlxuICAgICAqIEBwYXJhbSBjb250ZW50TGVuZ3RoIFRoZSBsZW5ndGggb2YgdGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIHJhbmdlIFRoZSByYW5nZSBvZiBieXRlcyB0byB3aGljaCB0aGUgc291cmNlIHJhbmdlIHdvdWxkIGJlIHdyaXR0ZW4uIFRoZSByYW5nZSBzaG91bGQgYmUgNTEyXG4gICAgICogICAgICAgICAgICAgIGFsaWduZWQgYW5kIHJhbmdlLWVuZCBpcyByZXF1aXJlZC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIHVwbG9hZFBhZ2VzRnJvbVVSTChzb3VyY2VVcmwsIHNvdXJjZVJhbmdlLCBjb250ZW50TGVuZ3RoLCByYW5nZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBzb3VyY2VVcmwsIHNvdXJjZVJhbmdlLCBjb250ZW50TGVuZ3RoLCByYW5nZSwgb3B0aW9ucyB9LCB1cGxvYWRQYWdlc0Zyb21VUkxPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIEdldCBQYWdlIFJhbmdlcyBvcGVyYXRpb24gcmV0dXJucyB0aGUgbGlzdCBvZiB2YWxpZCBwYWdlIHJhbmdlcyBmb3IgYSBwYWdlIGJsb2Igb3Igc25hcHNob3Qgb2YgYVxuICAgICAqIHBhZ2UgYmxvYlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgZ2V0UGFnZVJhbmdlcyhvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgZ2V0UGFnZVJhbmdlc09wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgR2V0IFBhZ2UgUmFuZ2VzIERpZmYgb3BlcmF0aW9uIHJldHVybnMgdGhlIGxpc3Qgb2YgdmFsaWQgcGFnZSByYW5nZXMgZm9yIGEgcGFnZSBibG9iIHRoYXQgd2VyZVxuICAgICAqIGNoYW5nZWQgYmV0d2VlbiB0YXJnZXQgYmxvYiBhbmQgcHJldmlvdXMgc25hcHNob3QuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBnZXRQYWdlUmFuZ2VzRGlmZihvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgZ2V0UGFnZVJhbmdlc0RpZmZPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVzaXplIHRoZSBCbG9iXG4gICAgICogQHBhcmFtIGJsb2JDb250ZW50TGVuZ3RoIFRoaXMgaGVhZGVyIHNwZWNpZmllcyB0aGUgbWF4aW11bSBzaXplIGZvciB0aGUgcGFnZSBibG9iLCB1cCB0byAxIFRCLiBUaGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZSBibG9iIHNpemUgbXVzdCBiZSBhbGlnbmVkIHRvIGEgNTEyLWJ5dGUgYm91bmRhcnkuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICByZXNpemUoYmxvYkNvbnRlbnRMZW5ndGgsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgYmxvYkNvbnRlbnRMZW5ndGgsIG9wdGlvbnMgfSwgcmVzaXplT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFVwZGF0ZSB0aGUgc2VxdWVuY2UgbnVtYmVyIG9mIHRoZSBibG9iXG4gICAgICogQHBhcmFtIHNlcXVlbmNlTnVtYmVyQWN0aW9uIFJlcXVpcmVkIGlmIHRoZSB4LW1zLWJsb2Itc2VxdWVuY2UtbnVtYmVyIGhlYWRlciBpcyBzZXQgZm9yIHRoZSByZXF1ZXN0LlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHByb3BlcnR5IGFwcGxpZXMgdG8gcGFnZSBibG9icyBvbmx5LiBUaGlzIHByb3BlcnR5IGluZGljYXRlcyBob3cgdGhlIHNlcnZpY2Ugc2hvdWxkIG1vZGlmeSB0aGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvYidzIHNlcXVlbmNlIG51bWJlclxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgdXBkYXRlU2VxdWVuY2VOdW1iZXIoc2VxdWVuY2VOdW1iZXJBY3Rpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgc2VxdWVuY2VOdW1iZXJBY3Rpb24sIG9wdGlvbnMgfSwgdXBkYXRlU2VxdWVuY2VOdW1iZXJPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIENvcHkgSW5jcmVtZW50YWwgb3BlcmF0aW9uIGNvcGllcyBhIHNuYXBzaG90IG9mIHRoZSBzb3VyY2UgcGFnZSBibG9iIHRvIGEgZGVzdGluYXRpb24gcGFnZSBibG9iLlxuICAgICAqIFRoZSBzbmFwc2hvdCBpcyBjb3BpZWQgc3VjaCB0aGF0IG9ubHkgdGhlIGRpZmZlcmVudGlhbCBjaGFuZ2VzIGJldHdlZW4gdGhlIHByZXZpb3VzbHkgY29waWVkXG4gICAgICogc25hcHNob3QgYXJlIHRyYW5zZmVycmVkIHRvIHRoZSBkZXN0aW5hdGlvbi4gVGhlIGNvcGllZCBzbmFwc2hvdHMgYXJlIGNvbXBsZXRlIGNvcGllcyBvZiB0aGVcbiAgICAgKiBvcmlnaW5hbCBzbmFwc2hvdCBhbmQgY2FuIGJlIHJlYWQgb3IgY29waWVkIGZyb20gYXMgdXN1YWwuIFRoaXMgQVBJIGlzIHN1cHBvcnRlZCBzaW5jZSBSRVNUIHZlcnNpb25cbiAgICAgKiAyMDE2LTA1LTMxLlxuICAgICAqIEBwYXJhbSBjb3B5U291cmNlIFNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgc291cmNlIHBhZ2UgYmxvYiBzbmFwc2hvdC4gVGhpcyB2YWx1ZSBpcyBhIFVSTCBvZiB1cCB0b1xuICAgICAqICAgICAgICAgICAgICAgICAgIDIgS0IgaW4gbGVuZ3RoIHRoYXQgc3BlY2lmaWVzIGEgcGFnZSBibG9iIHNuYXBzaG90LiBUaGUgdmFsdWUgc2hvdWxkIGJlIFVSTC1lbmNvZGVkIGFzIGl0IHdvdWxkXG4gICAgICogICAgICAgICAgICAgICAgICAgYXBwZWFyIGluIGEgcmVxdWVzdCBVUkkuIFRoZSBzb3VyY2UgYmxvYiBtdXN0IGVpdGhlciBiZSBwdWJsaWMgb3IgbXVzdCBiZSBhdXRoZW50aWNhdGVkIHZpYSBhIHNoYXJlZFxuICAgICAqICAgICAgICAgICAgICAgICAgIGFjY2VzcyBzaWduYXR1cmUuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBjb3B5SW5jcmVtZW50YWwoY29weVNvdXJjZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZE9wZXJhdGlvblJlcXVlc3QoeyBjb3B5U291cmNlLCBvcHRpb25zIH0sIGNvcHlJbmNyZW1lbnRhbE9wZXJhdGlvblNwZWMpO1xuICAgIH1cbn1cbi8vIE9wZXJhdGlvbiBTcGVjaWZpY2F0aW9uc1xuY29uc3QgeG1sU2VyaWFsaXplciQyID0gY29yZUNsaWVudF9fbmFtZXNwYWNlLmNyZWF0ZVNlcmlhbGl6ZXIoTWFwcGVycywgLyogaXNYbWwgKi8gdHJ1ZSk7XG5jb25zdCBjcmVhdGVPcGVyYXRpb25TcGVjJDEgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMToge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogUGFnZUJsb2JDcmVhdGVIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBQYWdlQmxvYkNyZWF0ZUV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgbWV0YWRhdGEsXG4gICAgICAgIGxlYXNlSWQsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIGVuY3J5cHRpb25LZXksXG4gICAgICAgIGVuY3J5cHRpb25LZXlTaGEyNTYsXG4gICAgICAgIGVuY3J5cHRpb25BbGdvcml0aG0sXG4gICAgICAgIGlmTWF0Y2gsXG4gICAgICAgIGlmTm9uZU1hdGNoLFxuICAgICAgICBpZlRhZ3MsXG4gICAgICAgIGJsb2JDYWNoZUNvbnRyb2wsXG4gICAgICAgIGJsb2JDb250ZW50VHlwZSxcbiAgICAgICAgYmxvYkNvbnRlbnRNRDUsXG4gICAgICAgIGJsb2JDb250ZW50RW5jb2RpbmcsXG4gICAgICAgIGJsb2JDb250ZW50TGFuZ3VhZ2UsXG4gICAgICAgIGJsb2JDb250ZW50RGlzcG9zaXRpb24sXG4gICAgICAgIGltbXV0YWJpbGl0eVBvbGljeUV4cGlyeSxcbiAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5TW9kZSxcbiAgICAgICAgZW5jcnlwdGlvblNjb3BlLFxuICAgICAgICB0aWVyLFxuICAgICAgICBibG9iVGFnc1N0cmluZyxcbiAgICAgICAgbGVnYWxIb2xkMSxcbiAgICAgICAgYmxvYlR5cGUsXG4gICAgICAgIGJsb2JDb250ZW50TGVuZ3RoLFxuICAgICAgICBibG9iU2VxdWVuY2VOdW1iZXIsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDIsXG59O1xuY29uc3QgdXBsb2FkUGFnZXNPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDE6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFBhZ2VCbG9iVXBsb2FkUGFnZXNIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBQYWdlQmxvYlVwbG9hZFBhZ2VzRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHJlcXVlc3RCb2R5OiBib2R5MSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzLCBjb21wMTldLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBjb250ZW50TGVuZ3RoLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICByYW5nZSxcbiAgICAgICAgZW5jcnlwdGlvbktleSxcbiAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1NixcbiAgICAgICAgZW5jcnlwdGlvbkFsZ29yaXRobSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICAgICAgZW5jcnlwdGlvblNjb3BlLFxuICAgICAgICB0cmFuc2FjdGlvbmFsQ29udGVudE1ENSxcbiAgICAgICAgdHJhbnNhY3Rpb25hbENvbnRlbnRDcmM2NCxcbiAgICAgICAgY29udGVudFR5cGUxLFxuICAgICAgICBhY2NlcHQyLFxuICAgICAgICBwYWdlV3JpdGUsXG4gICAgICAgIGlmU2VxdWVuY2VOdW1iZXJMZXNzVGhhbk9yRXF1YWxUbyxcbiAgICAgICAgaWZTZXF1ZW5jZU51bWJlckxlc3NUaGFuLFxuICAgICAgICBpZlNlcXVlbmNlTnVtYmVyRXF1YWxUbyxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3htbDsgY2hhcnNldD11dGYtOFwiLFxuICAgIG1lZGlhVHlwZTogXCJiaW5hcnlcIixcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDIsXG59O1xuY29uc3QgY2xlYXJQYWdlc09wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMToge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogUGFnZUJsb2JDbGVhclBhZ2VzSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogUGFnZUJsb2JDbGVhclBhZ2VzRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW3RpbWVvdXRJblNlY29uZHMsIGNvbXAxOV0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIGNvbnRlbnRMZW5ndGgsXG4gICAgICAgIGxlYXNlSWQsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIHJhbmdlLFxuICAgICAgICBlbmNyeXB0aW9uS2V5LFxuICAgICAgICBlbmNyeXB0aW9uS2V5U2hhMjU2LFxuICAgICAgICBlbmNyeXB0aW9uQWxnb3JpdGhtLFxuICAgICAgICBpZk1hdGNoLFxuICAgICAgICBpZk5vbmVNYXRjaCxcbiAgICAgICAgaWZUYWdzLFxuICAgICAgICBlbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgIGlmU2VxdWVuY2VOdW1iZXJMZXNzVGhhbk9yRXF1YWxUbyxcbiAgICAgICAgaWZTZXF1ZW5jZU51bWJlckxlc3NUaGFuLFxuICAgICAgICBpZlNlcXVlbmNlTnVtYmVyRXF1YWxUbyxcbiAgICAgICAgcGFnZVdyaXRlMSxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMixcbn07XG5jb25zdCB1cGxvYWRQYWdlc0Zyb21VUkxPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDE6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFBhZ2VCbG9iVXBsb2FkUGFnZXNGcm9tVVJMSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogUGFnZUJsb2JVcGxvYWRQYWdlc0Zyb21VUkxFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbdGltZW91dEluU2Vjb25kcywgY29tcDE5XSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgZW5jcnlwdGlvbktleSxcbiAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1NixcbiAgICAgICAgZW5jcnlwdGlvbkFsZ29yaXRobSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICAgICAgZW5jcnlwdGlvblNjb3BlLFxuICAgICAgICBzb3VyY2VJZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIHNvdXJjZUlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBzb3VyY2VJZk1hdGNoLFxuICAgICAgICBzb3VyY2VJZk5vbmVNYXRjaCxcbiAgICAgICAgc291cmNlQ29udGVudE1ENSxcbiAgICAgICAgY29weVNvdXJjZUF1dGhvcml6YXRpb24sXG4gICAgICAgIHBhZ2VXcml0ZSxcbiAgICAgICAgaWZTZXF1ZW5jZU51bWJlckxlc3NUaGFuT3JFcXVhbFRvLFxuICAgICAgICBpZlNlcXVlbmNlTnVtYmVyTGVzc1RoYW4sXG4gICAgICAgIGlmU2VxdWVuY2VOdW1iZXJFcXVhbFRvLFxuICAgICAgICBzb3VyY2VVcmwsXG4gICAgICAgIHNvdXJjZVJhbmdlLFxuICAgICAgICBzb3VyY2VDb250ZW50Q3JjNjQsXG4gICAgICAgIHJhbmdlMSxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMixcbn07XG5jb25zdCBnZXRQYWdlUmFuZ2VzT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJHRVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBQYWdlTGlzdCxcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFBhZ2VCbG9iR2V0UGFnZVJhbmdlc0hlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFBhZ2VCbG9iR2V0UGFnZVJhbmdlc0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFtcbiAgICAgICAgdGltZW91dEluU2Vjb25kcyxcbiAgICAgICAgbWFya2VyLFxuICAgICAgICBtYXhQYWdlU2l6ZSxcbiAgICAgICAgc25hcHNob3QsXG4gICAgICAgIGNvbXAyMCxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICByYW5nZSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMixcbn07XG5jb25zdCBnZXRQYWdlUmFuZ2VzRGlmZk9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiR0VUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogUGFnZUxpc3QsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBQYWdlQmxvYkdldFBhZ2VSYW5nZXNEaWZmSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogUGFnZUJsb2JHZXRQYWdlUmFuZ2VzRGlmZkV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFtcbiAgICAgICAgdGltZW91dEluU2Vjb25kcyxcbiAgICAgICAgbWFya2VyLFxuICAgICAgICBtYXhQYWdlU2l6ZSxcbiAgICAgICAgc25hcHNob3QsXG4gICAgICAgIGNvbXAyMCxcbiAgICAgICAgcHJldnNuYXBzaG90LFxuICAgIF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIGxlYXNlSWQsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIHJhbmdlLFxuICAgICAgICBpZk1hdGNoLFxuICAgICAgICBpZk5vbmVNYXRjaCxcbiAgICAgICAgaWZUYWdzLFxuICAgICAgICBwcmV2U25hcHNob3RVcmwsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDIsXG59O1xuY29uc3QgcmVzaXplT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBQYWdlQmxvYlJlc2l6ZUhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFBhZ2VCbG9iUmVzaXplRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW2NvbXAsIHRpbWVvdXRJblNlY29uZHNdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBlbmNyeXB0aW9uS2V5LFxuICAgICAgICBlbmNyeXB0aW9uS2V5U2hhMjU2LFxuICAgICAgICBlbmNyeXB0aW9uQWxnb3JpdGhtLFxuICAgICAgICBpZk1hdGNoLFxuICAgICAgICBpZk5vbmVNYXRjaCxcbiAgICAgICAgaWZUYWdzLFxuICAgICAgICBlbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgIGJsb2JDb250ZW50TGVuZ3RoLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQyLFxufTtcbmNvbnN0IHVwZGF0ZVNlcXVlbmNlTnVtYmVyT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBQYWdlQmxvYlVwZGF0ZVNlcXVlbmNlTnVtYmVySGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogUGFnZUJsb2JVcGRhdGVTZXF1ZW5jZU51bWJlckV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFtjb21wLCB0aW1lb3V0SW5TZWNvbmRzXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICAgICAgYmxvYlNlcXVlbmNlTnVtYmVyLFxuICAgICAgICBzZXF1ZW5jZU51bWJlckFjdGlvbixcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMixcbn07XG5jb25zdCBjb3B5SW5jcmVtZW50YWxPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDI6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IFBhZ2VCbG9iQ29weUluY3JlbWVudGFsSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogUGFnZUJsb2JDb3B5SW5jcmVtZW50YWxFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbdGltZW91dEluU2Vjb25kcywgY29tcDIxXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICAgICAgY29weVNvdXJjZSxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIkMixcbn07XG5cbi8qXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAqXG4gKiBDb2RlIGdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEF1dG9SZXN0IENvZGUgR2VuZXJhdG9yLlxuICogQ2hhbmdlcyBtYXkgY2F1c2UgaW5jb3JyZWN0IGJlaGF2aW9yIGFuZCB3aWxsIGJlIGxvc3QgaWYgdGhlIGNvZGUgaXMgcmVnZW5lcmF0ZWQuXG4gKi9cbi8qKiBDbGFzcyBjb250YWluaW5nIEFwcGVuZEJsb2Igb3BlcmF0aW9ucy4gKi9cbmNsYXNzIEFwcGVuZEJsb2JJbXBsIHtcbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBjbGFzcyBBcHBlbmRCbG9iIGNsYXNzLlxuICAgICAqIEBwYXJhbSBjbGllbnQgUmVmZXJlbmNlIHRvIHRoZSBzZXJ2aWNlIGNsaWVudFxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGNsaWVudCkge1xuICAgICAgICB0aGlzLmNsaWVudCA9IGNsaWVudDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIENyZWF0ZSBBcHBlbmQgQmxvYiBvcGVyYXRpb24gY3JlYXRlcyBhIG5ldyBhcHBlbmQgYmxvYi5cbiAgICAgKiBAcGFyYW0gY29udGVudExlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgY3JlYXRlKGNvbnRlbnRMZW5ndGgsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgY29udGVudExlbmd0aCwgb3B0aW9ucyB9LCBjcmVhdGVPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIEFwcGVuZCBCbG9jayBvcGVyYXRpb24gY29tbWl0cyBhIG5ldyBibG9jayBvZiBkYXRhIHRvIHRoZSBlbmQgb2YgYW4gZXhpc3RpbmcgYXBwZW5kIGJsb2IuIFRoZVxuICAgICAqIEFwcGVuZCBCbG9jayBvcGVyYXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaWYgdGhlIGJsb2Igd2FzIGNyZWF0ZWQgd2l0aCB4LW1zLWJsb2ItdHlwZSBzZXQgdG9cbiAgICAgKiBBcHBlbmRCbG9iLiBBcHBlbmQgQmxvY2sgaXMgc3VwcG9ydGVkIG9ubHkgb24gdmVyc2lvbiAyMDE1LTAyLTIxIHZlcnNpb24gb3IgbGF0ZXIuXG4gICAgICogQHBhcmFtIGNvbnRlbnRMZW5ndGggVGhlIGxlbmd0aCBvZiB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gYm9keSBJbml0aWFsIGRhdGFcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGFwcGVuZEJsb2NrKGNvbnRlbnRMZW5ndGgsIGJvZHksIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgY29udGVudExlbmd0aCwgYm9keSwgb3B0aW9ucyB9LCBhcHBlbmRCbG9ja09wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgQXBwZW5kIEJsb2NrIG9wZXJhdGlvbiBjb21taXRzIGEgbmV3IGJsb2NrIG9mIGRhdGEgdG8gdGhlIGVuZCBvZiBhbiBleGlzdGluZyBhcHBlbmQgYmxvYiB3aGVyZVxuICAgICAqIHRoZSBjb250ZW50cyBhcmUgcmVhZCBmcm9tIGEgc291cmNlIHVybC4gVGhlIEFwcGVuZCBCbG9jayBvcGVyYXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaWYgdGhlIGJsb2JcbiAgICAgKiB3YXMgY3JlYXRlZCB3aXRoIHgtbXMtYmxvYi10eXBlIHNldCB0byBBcHBlbmRCbG9iLiBBcHBlbmQgQmxvY2sgaXMgc3VwcG9ydGVkIG9ubHkgb24gdmVyc2lvblxuICAgICAqIDIwMTUtMDItMjEgdmVyc2lvbiBvciBsYXRlci5cbiAgICAgKiBAcGFyYW0gc291cmNlVXJsIFNwZWNpZnkgYSBVUkwgdG8gdGhlIGNvcHkgc291cmNlLlxuICAgICAqIEBwYXJhbSBjb250ZW50TGVuZ3RoIFRoZSBsZW5ndGggb2YgdGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBhcHBlbmRCbG9ja0Zyb21Vcmwoc291cmNlVXJsLCBjb250ZW50TGVuZ3RoLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IHNvdXJjZVVybCwgY29udGVudExlbmd0aCwgb3B0aW9ucyB9LCBhcHBlbmRCbG9ja0Zyb21VcmxPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIFNlYWwgb3BlcmF0aW9uIHNlYWxzIHRoZSBBcHBlbmQgQmxvYiB0byBtYWtlIGl0IHJlYWQtb25seS4gU2VhbCBpcyBzdXBwb3J0ZWQgb25seSBvbiB2ZXJzaW9uXG4gICAgICogMjAxOS0xMi0xMiB2ZXJzaW9uIG9yIGxhdGVyLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgc2VhbChvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IG9wdGlvbnMgfSwgc2VhbE9wZXJhdGlvblNwZWMpO1xuICAgIH1cbn1cbi8vIE9wZXJhdGlvbiBTcGVjaWZpY2F0aW9uc1xuY29uc3QgeG1sU2VyaWFsaXplciQxID0gY29yZUNsaWVudF9fbmFtZXNwYWNlLmNyZWF0ZVNlcmlhbGl6ZXIoTWFwcGVycywgLyogaXNYbWwgKi8gdHJ1ZSk7XG5jb25zdCBjcmVhdGVPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDE6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEFwcGVuZEJsb2JDcmVhdGVIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBBcHBlbmRCbG9iQ3JlYXRlRXhjZXB0aW9uSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW3RpbWVvdXRJblNlY29uZHNdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBjb250ZW50TGVuZ3RoLFxuICAgICAgICBtZXRhZGF0YSxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgZW5jcnlwdGlvbktleSxcbiAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1NixcbiAgICAgICAgZW5jcnlwdGlvbkFsZ29yaXRobSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICAgICAgYmxvYkNhY2hlQ29udHJvbCxcbiAgICAgICAgYmxvYkNvbnRlbnRUeXBlLFxuICAgICAgICBibG9iQ29udGVudE1ENSxcbiAgICAgICAgYmxvYkNvbnRlbnRFbmNvZGluZyxcbiAgICAgICAgYmxvYkNvbnRlbnRMYW5ndWFnZSxcbiAgICAgICAgYmxvYkNvbnRlbnREaXNwb3NpdGlvbixcbiAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5RXhwaXJ5LFxuICAgICAgICBpbW11dGFiaWxpdHlQb2xpY3lNb2RlLFxuICAgICAgICBlbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgIGJsb2JUYWdzU3RyaW5nLFxuICAgICAgICBsZWdhbEhvbGQxLFxuICAgICAgICBibG9iVHlwZTEsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDEsXG59O1xuY29uc3QgYXBwZW5kQmxvY2tPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDE6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEFwcGVuZEJsb2JBcHBlbmRCbG9ja0hlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEFwcGVuZEJsb2JBcHBlbmRCbG9ja0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICByZXF1ZXN0Qm9keTogYm9keTEsXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbdGltZW91dEluU2Vjb25kcywgY29tcDIyXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgZW5jcnlwdGlvbktleSxcbiAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1NixcbiAgICAgICAgZW5jcnlwdGlvbkFsZ29yaXRobSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICAgICAgZW5jcnlwdGlvblNjb3BlLFxuICAgICAgICB0cmFuc2FjdGlvbmFsQ29udGVudE1ENSxcbiAgICAgICAgdHJhbnNhY3Rpb25hbENvbnRlbnRDcmM2NCxcbiAgICAgICAgY29udGVudFR5cGUxLFxuICAgICAgICBhY2NlcHQyLFxuICAgICAgICBtYXhTaXplLFxuICAgICAgICBhcHBlbmRQb3NpdGlvbixcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3htbDsgY2hhcnNldD11dGYtOFwiLFxuICAgIG1lZGlhVHlwZTogXCJiaW5hcnlcIixcbiAgICBzZXJpYWxpemVyOiB4bWxTZXJpYWxpemVyJDEsXG59O1xuY29uc3QgYXBwZW5kQmxvY2tGcm9tVXJsT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAxOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBBcHBlbmRCbG9iQXBwZW5kQmxvY2tGcm9tVXJsSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQXBwZW5kQmxvYkFwcGVuZEJsb2NrRnJvbVVybEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzLCBjb21wMjJdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhY2NlcHQxLFxuICAgICAgICBjb250ZW50TGVuZ3RoLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBlbmNyeXB0aW9uS2V5LFxuICAgICAgICBlbmNyeXB0aW9uS2V5U2hhMjU2LFxuICAgICAgICBlbmNyeXB0aW9uQWxnb3JpdGhtLFxuICAgICAgICBpZk1hdGNoLFxuICAgICAgICBpZk5vbmVNYXRjaCxcbiAgICAgICAgaWZUYWdzLFxuICAgICAgICBlbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgIHNvdXJjZUlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgc291cmNlSWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIHNvdXJjZUlmTWF0Y2gsXG4gICAgICAgIHNvdXJjZUlmTm9uZU1hdGNoLFxuICAgICAgICBzb3VyY2VDb250ZW50TUQ1LFxuICAgICAgICBjb3B5U291cmNlQXV0aG9yaXphdGlvbixcbiAgICAgICAgdHJhbnNhY3Rpb25hbENvbnRlbnRNRDUsXG4gICAgICAgIHNvdXJjZVVybCxcbiAgICAgICAgc291cmNlQ29udGVudENyYzY0LFxuICAgICAgICBtYXhTaXplLFxuICAgICAgICBhcHBlbmRQb3NpdGlvbixcbiAgICAgICAgc291cmNlUmFuZ2UxLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQxLFxufTtcbmNvbnN0IHNlYWxPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEFwcGVuZEJsb2JTZWFsSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQXBwZW5kQmxvYlNlYWxFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbdGltZW91dEluU2Vjb25kcywgY29tcDIzXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGFwcGVuZFBvc2l0aW9uLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplciQxLFxufTtcblxuLypcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuICpcbiAqIENvZGUgZ2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgQXV0b1Jlc3QgQ29kZSBHZW5lcmF0b3IuXG4gKiBDaGFuZ2VzIG1heSBjYXVzZSBpbmNvcnJlY3QgYmVoYXZpb3IgYW5kIHdpbGwgYmUgbG9zdCBpZiB0aGUgY29kZSBpcyByZWdlbmVyYXRlZC5cbiAqL1xuLyoqIENsYXNzIGNvbnRhaW5pbmcgQmxvY2tCbG9iIG9wZXJhdGlvbnMuICovXG5jbGFzcyBCbG9ja0Jsb2JJbXBsIHtcbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBjbGFzcyBCbG9ja0Jsb2IgY2xhc3MuXG4gICAgICogQHBhcmFtIGNsaWVudCBSZWZlcmVuY2UgdG8gdGhlIHNlcnZpY2UgY2xpZW50XG4gICAgICovXG4gICAgY29uc3RydWN0b3IoY2xpZW50KSB7XG4gICAgICAgIHRoaXMuY2xpZW50ID0gY2xpZW50O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgVXBsb2FkIEJsb2NrIEJsb2Igb3BlcmF0aW9uIHVwZGF0ZXMgdGhlIGNvbnRlbnQgb2YgYW4gZXhpc3RpbmcgYmxvY2sgYmxvYi4gVXBkYXRpbmcgYW4gZXhpc3RpbmdcbiAgICAgKiBibG9jayBibG9iIG92ZXJ3cml0ZXMgYW55IGV4aXN0aW5nIG1ldGFkYXRhIG9uIHRoZSBibG9iLiBQYXJ0aWFsIHVwZGF0ZXMgYXJlIG5vdCBzdXBwb3J0ZWQgd2l0aCBQdXRcbiAgICAgKiBCbG9iOyB0aGUgY29udGVudCBvZiB0aGUgZXhpc3RpbmcgYmxvYiBpcyBvdmVyd3JpdHRlbiB3aXRoIHRoZSBjb250ZW50IG9mIHRoZSBuZXcgYmxvYi4gVG8gcGVyZm9ybSBhXG4gICAgICogcGFydGlhbCB1cGRhdGUgb2YgdGhlIGNvbnRlbnQgb2YgYSBibG9jayBibG9iLCB1c2UgdGhlIFB1dCBCbG9jayBMaXN0IG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0gY29udGVudExlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBib2R5IEluaXRpYWwgZGF0YVxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgdXBsb2FkKGNvbnRlbnRMZW5ndGgsIGJvZHksIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgY29udGVudExlbmd0aCwgYm9keSwgb3B0aW9ucyB9LCB1cGxvYWRPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIFB1dCBCbG9iIGZyb20gVVJMIG9wZXJhdGlvbiBjcmVhdGVzIGEgbmV3IEJsb2NrIEJsb2Igd2hlcmUgdGhlIGNvbnRlbnRzIG9mIHRoZSBibG9iIGFyZSByZWFkXG4gICAgICogZnJvbSBhIGdpdmVuIFVSTC4gIFRoaXMgQVBJIGlzIHN1cHBvcnRlZCBiZWdpbm5pbmcgd2l0aCB0aGUgMjAyMC0wNC0wOCB2ZXJzaW9uLiBQYXJ0aWFsIHVwZGF0ZXMgYXJlXG4gICAgICogbm90IHN1cHBvcnRlZCB3aXRoIFB1dCBCbG9iIGZyb20gVVJMOyB0aGUgY29udGVudCBvZiBhbiBleGlzdGluZyBibG9iIGlzIG92ZXJ3cml0dGVuIHdpdGggdGhlXG4gICAgICogY29udGVudCBvZiB0aGUgbmV3IGJsb2IuICBUbyBwZXJmb3JtIHBhcnRpYWwgdXBkYXRlcyB0byBhIGJsb2NrIGJsb2LigJlzIGNvbnRlbnRzIHVzaW5nIGEgc291cmNlIFVSTCxcbiAgICAgKiB1c2UgdGhlIFB1dCBCbG9jayBmcm9tIFVSTCBBUEkgaW4gY29uanVuY3Rpb24gd2l0aCBQdXQgQmxvY2sgTGlzdC5cbiAgICAgKiBAcGFyYW0gY29udGVudExlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBjb3B5U291cmNlIFNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgc291cmNlIHBhZ2UgYmxvYiBzbmFwc2hvdC4gVGhpcyB2YWx1ZSBpcyBhIFVSTCBvZiB1cCB0b1xuICAgICAqICAgICAgICAgICAgICAgICAgIDIgS0IgaW4gbGVuZ3RoIHRoYXQgc3BlY2lmaWVzIGEgcGFnZSBibG9iIHNuYXBzaG90LiBUaGUgdmFsdWUgc2hvdWxkIGJlIFVSTC1lbmNvZGVkIGFzIGl0IHdvdWxkXG4gICAgICogICAgICAgICAgICAgICAgICAgYXBwZWFyIGluIGEgcmVxdWVzdCBVUkkuIFRoZSBzb3VyY2UgYmxvYiBtdXN0IGVpdGhlciBiZSBwdWJsaWMgb3IgbXVzdCBiZSBhdXRoZW50aWNhdGVkIHZpYSBhIHNoYXJlZFxuICAgICAqICAgICAgICAgICAgICAgICAgIGFjY2VzcyBzaWduYXR1cmUuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBwdXRCbG9iRnJvbVVybChjb250ZW50TGVuZ3RoLCBjb3B5U291cmNlLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IGNvbnRlbnRMZW5ndGgsIGNvcHlTb3VyY2UsIG9wdGlvbnMgfSwgcHV0QmxvYkZyb21VcmxPcGVyYXRpb25TcGVjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIFN0YWdlIEJsb2NrIG9wZXJhdGlvbiBjcmVhdGVzIGEgbmV3IGJsb2NrIHRvIGJlIGNvbW1pdHRlZCBhcyBwYXJ0IG9mIGEgYmxvYlxuICAgICAqIEBwYXJhbSBibG9ja0lkIEEgdmFsaWQgQmFzZTY0IHN0cmluZyB2YWx1ZSB0aGF0IGlkZW50aWZpZXMgdGhlIGJsb2NrLiBQcmlvciB0byBlbmNvZGluZywgdGhlIHN0cmluZ1xuICAgICAqICAgICAgICAgICAgICAgIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDY0IGJ5dGVzIGluIHNpemUuIEZvciBhIGdpdmVuIGJsb2IsIHRoZSBsZW5ndGggb2YgdGhlIHZhbHVlIHNwZWNpZmllZFxuICAgICAqICAgICAgICAgICAgICAgIGZvciB0aGUgYmxvY2tpZCBwYXJhbWV0ZXIgbXVzdCBiZSB0aGUgc2FtZSBzaXplIGZvciBlYWNoIGJsb2NrLlxuICAgICAqIEBwYXJhbSBjb250ZW50TGVuZ3RoIFRoZSBsZW5ndGggb2YgdGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIGJvZHkgSW5pdGlhbCBkYXRhXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBzdGFnZUJsb2NrKGJsb2NrSWQsIGNvbnRlbnRMZW5ndGgsIGJvZHksIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgYmxvY2tJZCwgY29udGVudExlbmd0aCwgYm9keSwgb3B0aW9ucyB9LCBzdGFnZUJsb2NrT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBTdGFnZSBCbG9jayBvcGVyYXRpb24gY3JlYXRlcyBhIG5ldyBibG9jayB0byBiZSBjb21taXR0ZWQgYXMgcGFydCBvZiBhIGJsb2Igd2hlcmUgdGhlIGNvbnRlbnRzXG4gICAgICogYXJlIHJlYWQgZnJvbSBhIFVSTC5cbiAgICAgKiBAcGFyYW0gYmxvY2tJZCBBIHZhbGlkIEJhc2U2NCBzdHJpbmcgdmFsdWUgdGhhdCBpZGVudGlmaWVzIHRoZSBibG9jay4gUHJpb3IgdG8gZW5jb2RpbmcsIHRoZSBzdHJpbmdcbiAgICAgKiAgICAgICAgICAgICAgICBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byA2NCBieXRlcyBpbiBzaXplLiBGb3IgYSBnaXZlbiBibG9iLCB0aGUgbGVuZ3RoIG9mIHRoZSB2YWx1ZSBzcGVjaWZpZWRcbiAgICAgKiAgICAgICAgICAgICAgICBmb3IgdGhlIGJsb2NraWQgcGFyYW1ldGVyIG11c3QgYmUgdGhlIHNhbWUgc2l6ZSBmb3IgZWFjaCBibG9jay5cbiAgICAgKiBAcGFyYW0gY29udGVudExlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBzb3VyY2VVcmwgU3BlY2lmeSBhIFVSTCB0byB0aGUgY29weSBzb3VyY2UuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBzdGFnZUJsb2NrRnJvbVVSTChibG9ja0lkLCBjb250ZW50TGVuZ3RoLCBzb3VyY2VVcmwsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgYmxvY2tJZCwgY29udGVudExlbmd0aCwgc291cmNlVXJsLCBvcHRpb25zIH0sIHN0YWdlQmxvY2tGcm9tVVJMT3BlcmF0aW9uU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBDb21taXQgQmxvY2sgTGlzdCBvcGVyYXRpb24gd3JpdGVzIGEgYmxvYiBieSBzcGVjaWZ5aW5nIHRoZSBsaXN0IG9mIGJsb2NrIElEcyB0aGF0IG1ha2UgdXAgdGhlXG4gICAgICogYmxvYi4gSW4gb3JkZXIgdG8gYmUgd3JpdHRlbiBhcyBwYXJ0IG9mIGEgYmxvYiwgYSBibG9jayBtdXN0IGhhdmUgYmVlbiBzdWNjZXNzZnVsbHkgd3JpdHRlbiB0byB0aGVcbiAgICAgKiBzZXJ2ZXIgaW4gYSBwcmlvciBQdXQgQmxvY2sgb3BlcmF0aW9uLiBZb3UgY2FuIGNhbGwgUHV0IEJsb2NrIExpc3QgdG8gdXBkYXRlIGEgYmxvYiBieSB1cGxvYWRpbmdcbiAgICAgKiBvbmx5IHRob3NlIGJsb2NrcyB0aGF0IGhhdmUgY2hhbmdlZCwgdGhlbiBjb21taXR0aW5nIHRoZSBuZXcgYW5kIGV4aXN0aW5nIGJsb2NrcyB0b2dldGhlci4gWW91IGNhblxuICAgICAqIGRvIHRoaXMgYnkgc3BlY2lmeWluZyB3aGV0aGVyIHRvIGNvbW1pdCBhIGJsb2NrIGZyb20gdGhlIGNvbW1pdHRlZCBibG9jayBsaXN0IG9yIGZyb20gdGhlXG4gICAgICogdW5jb21taXR0ZWQgYmxvY2sgbGlzdCwgb3IgdG8gY29tbWl0IHRoZSBtb3N0IHJlY2VudGx5IHVwbG9hZGVkIHZlcnNpb24gb2YgdGhlIGJsb2NrLCB3aGljaGV2ZXIgbGlzdFxuICAgICAqIGl0IG1heSBiZWxvbmcgdG8uXG4gICAgICogQHBhcmFtIGJsb2NrcyBCbG9iIEJsb2Nrcy5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGNvbW1pdEJsb2NrTGlzdChibG9ja3MsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmRPcGVyYXRpb25SZXF1ZXN0KHsgYmxvY2tzLCBvcHRpb25zIH0sIGNvbW1pdEJsb2NrTGlzdE9wZXJhdGlvblNwZWMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgR2V0IEJsb2NrIExpc3Qgb3BlcmF0aW9uIHJldHJpZXZlcyB0aGUgbGlzdCBvZiBibG9ja3MgdGhhdCBoYXZlIGJlZW4gdXBsb2FkZWQgYXMgcGFydCBvZiBhIGJsb2NrXG4gICAgICogYmxvYlxuICAgICAqIEBwYXJhbSBsaXN0VHlwZSBTcGVjaWZpZXMgd2hldGhlciB0byByZXR1cm4gdGhlIGxpc3Qgb2YgY29tbWl0dGVkIGJsb2NrcywgdGhlIGxpc3Qgb2YgdW5jb21taXR0ZWRcbiAgICAgKiAgICAgICAgICAgICAgICAgYmxvY2tzLCBvciBib3RoIGxpc3RzIHRvZ2V0aGVyLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgZ2V0QmxvY2tMaXN0KGxpc3RUeXBlLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kT3BlcmF0aW9uUmVxdWVzdCh7IGxpc3RUeXBlLCBvcHRpb25zIH0sIGdldEJsb2NrTGlzdE9wZXJhdGlvblNwZWMpO1xuICAgIH1cbn1cbi8vIE9wZXJhdGlvbiBTcGVjaWZpY2F0aW9uc1xuY29uc3QgeG1sU2VyaWFsaXplciA9IGNvcmVDbGllbnRfX25hbWVzcGFjZS5jcmVhdGVTZXJpYWxpemVyKE1hcHBlcnMsIC8qIGlzWG1sICovIHRydWUpO1xuY29uc3QgdXBsb2FkT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAxOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9ja0Jsb2JVcGxvYWRIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9ja0Jsb2JVcGxvYWRFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcmVxdWVzdEJvZHk6IGJvZHkxLFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW3RpbWVvdXRJblNlY29uZHNdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBjb250ZW50TGVuZ3RoLFxuICAgICAgICBtZXRhZGF0YSxcbiAgICAgICAgbGVhc2VJZCxcbiAgICAgICAgaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBpZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgZW5jcnlwdGlvbktleSxcbiAgICAgICAgZW5jcnlwdGlvbktleVNoYTI1NixcbiAgICAgICAgZW5jcnlwdGlvbkFsZ29yaXRobSxcbiAgICAgICAgaWZNYXRjaCxcbiAgICAgICAgaWZOb25lTWF0Y2gsXG4gICAgICAgIGlmVGFncyxcbiAgICAgICAgYmxvYkNhY2hlQ29udHJvbCxcbiAgICAgICAgYmxvYkNvbnRlbnRUeXBlLFxuICAgICAgICBibG9iQ29udGVudE1ENSxcbiAgICAgICAgYmxvYkNvbnRlbnRFbmNvZGluZyxcbiAgICAgICAgYmxvYkNvbnRlbnRMYW5ndWFnZSxcbiAgICAgICAgYmxvYkNvbnRlbnREaXNwb3NpdGlvbixcbiAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5RXhwaXJ5LFxuICAgICAgICBpbW11dGFiaWxpdHlQb2xpY3lNb2RlLFxuICAgICAgICBlbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgIHRpZXIsXG4gICAgICAgIGJsb2JUYWdzU3RyaW5nLFxuICAgICAgICBsZWdhbEhvbGQxLFxuICAgICAgICB0cmFuc2FjdGlvbmFsQ29udGVudE1ENSxcbiAgICAgICAgdHJhbnNhY3Rpb25hbENvbnRlbnRDcmM2NCxcbiAgICAgICAgY29udGVudFR5cGUxLFxuICAgICAgICBhY2NlcHQyLFxuICAgICAgICBibG9iVHlwZTIsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi94bWw7IGNoYXJzZXQ9dXRmLThcIixcbiAgICBtZWRpYVR5cGU6IFwiYmluYXJ5XCIsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplcixcbn07XG5jb25zdCBwdXRCbG9iRnJvbVVybE9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMToge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvY2tCbG9iUHV0QmxvYkZyb21VcmxIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9ja0Jsb2JQdXRCbG9iRnJvbVVybEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFt0aW1lb3V0SW5TZWNvbmRzXSxcbiAgICB1cmxQYXJhbWV0ZXJzOiBbdXJsXSxcbiAgICBoZWFkZXJQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWNjZXB0MSxcbiAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgbWV0YWRhdGEsXG4gICAgICAgIGxlYXNlSWQsXG4gICAgICAgIGlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgIGVuY3J5cHRpb25LZXksXG4gICAgICAgIGVuY3J5cHRpb25LZXlTaGEyNTYsXG4gICAgICAgIGVuY3J5cHRpb25BbGdvcml0aG0sXG4gICAgICAgIGlmTWF0Y2gsXG4gICAgICAgIGlmTm9uZU1hdGNoLFxuICAgICAgICBpZlRhZ3MsXG4gICAgICAgIGJsb2JDYWNoZUNvbnRyb2wsXG4gICAgICAgIGJsb2JDb250ZW50VHlwZSxcbiAgICAgICAgYmxvYkNvbnRlbnRNRDUsXG4gICAgICAgIGJsb2JDb250ZW50RW5jb2RpbmcsXG4gICAgICAgIGJsb2JDb250ZW50TGFuZ3VhZ2UsXG4gICAgICAgIGJsb2JDb250ZW50RGlzcG9zaXRpb24sXG4gICAgICAgIGVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgdGllcixcbiAgICAgICAgc291cmNlSWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBzb3VyY2VJZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgc291cmNlSWZNYXRjaCxcbiAgICAgICAgc291cmNlSWZOb25lTWF0Y2gsXG4gICAgICAgIHNvdXJjZUlmVGFncyxcbiAgICAgICAgY29weVNvdXJjZSxcbiAgICAgICAgYmxvYlRhZ3NTdHJpbmcsXG4gICAgICAgIHNvdXJjZUNvbnRlbnRNRDUsXG4gICAgICAgIGNvcHlTb3VyY2VBdXRob3JpemF0aW9uLFxuICAgICAgICBjb3B5U291cmNlVGFncyxcbiAgICAgICAgdHJhbnNhY3Rpb25hbENvbnRlbnRNRDUsXG4gICAgICAgIGJsb2JUeXBlMixcbiAgICAgICAgY29weVNvdXJjZUJsb2JQcm9wZXJ0aWVzLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplcixcbn07XG5jb25zdCBzdGFnZUJsb2NrT3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJQVVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAxOiB7XG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9ja0Jsb2JTdGFnZUJsb2NrSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYm9keU1hcHBlcjogU3RvcmFnZUVycm9yLFxuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvY2tCbG9iU3RhZ2VCbG9ja0V4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICByZXF1ZXN0Qm9keTogYm9keTEsXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIGNvbXAyNCxcbiAgICAgICAgYmxvY2tJZCxcbiAgICBdLFxuICAgIHVybFBhcmFtZXRlcnM6IFt1cmxdLFxuICAgIGhlYWRlclBhcmFtZXRlcnM6IFtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBjb250ZW50TGVuZ3RoLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBlbmNyeXB0aW9uS2V5LFxuICAgICAgICBlbmNyeXB0aW9uS2V5U2hhMjU2LFxuICAgICAgICBlbmNyeXB0aW9uQWxnb3JpdGhtLFxuICAgICAgICBlbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgIHRyYW5zYWN0aW9uYWxDb250ZW50TUQ1LFxuICAgICAgICB0cmFuc2FjdGlvbmFsQ29udGVudENyYzY0LFxuICAgICAgICBjb250ZW50VHlwZTEsXG4gICAgICAgIGFjY2VwdDIsXG4gICAgXSxcbiAgICBpc1hNTDogdHJ1ZSxcbiAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi94bWw7IGNoYXJzZXQ9dXRmLThcIixcbiAgICBtZWRpYVR5cGU6IFwiYmluYXJ5XCIsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplcixcbn07XG5jb25zdCBzdGFnZUJsb2NrRnJvbVVSTE9wZXJhdGlvblNwZWMgPSB7XG4gICAgcGF0aDogXCIve2NvbnRhaW5lck5hbWV9L3tibG9ifVwiLFxuICAgIGh0dHBNZXRob2Q6IFwiUFVUXCIsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMToge1xuICAgICAgICAgICAgaGVhZGVyc01hcHBlcjogQmxvY2tCbG9iU3RhZ2VCbG9ja0Zyb21VUkxIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9ja0Jsb2JTdGFnZUJsb2NrRnJvbVVSTEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyeVBhcmFtZXRlcnM6IFtcbiAgICAgICAgdGltZW91dEluU2Vjb25kcyxcbiAgICAgICAgY29tcDI0LFxuICAgICAgICBibG9ja0lkLFxuICAgIF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIGNvbnRlbnRMZW5ndGgsXG4gICAgICAgIGxlYXNlSWQsXG4gICAgICAgIGVuY3J5cHRpb25LZXksXG4gICAgICAgIGVuY3J5cHRpb25LZXlTaGEyNTYsXG4gICAgICAgIGVuY3J5cHRpb25BbGdvcml0aG0sXG4gICAgICAgIGVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgc291cmNlSWZNb2RpZmllZFNpbmNlLFxuICAgICAgICBzb3VyY2VJZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgc291cmNlSWZNYXRjaCxcbiAgICAgICAgc291cmNlSWZOb25lTWF0Y2gsXG4gICAgICAgIHNvdXJjZUNvbnRlbnRNRDUsXG4gICAgICAgIGNvcHlTb3VyY2VBdXRob3JpemF0aW9uLFxuICAgICAgICBzb3VyY2VVcmwsXG4gICAgICAgIHNvdXJjZUNvbnRlbnRDcmM2NCxcbiAgICAgICAgc291cmNlUmFuZ2UxLFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgc2VyaWFsaXplcjogeG1sU2VyaWFsaXplcixcbn07XG5jb25zdCBjb21taXRCbG9ja0xpc3RPcGVyYXRpb25TcGVjID0ge1xuICAgIHBhdGg6IFwiL3tjb250YWluZXJOYW1lfS97YmxvYn1cIixcbiAgICBodHRwTWV0aG9kOiBcIlBVVFwiLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgICAyMDE6IHtcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2NrQmxvYkNvbW1pdEJsb2NrTGlzdEhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGJvZHlNYXBwZXI6IFN0b3JhZ2VFcnJvcixcbiAgICAgICAgICAgIGhlYWRlcnNNYXBwZXI6IEJsb2NrQmxvYkNvbW1pdEJsb2NrTGlzdEV4Y2VwdGlvbkhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICByZXF1ZXN0Qm9keTogYmxvY2tzLFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogW3RpbWVvdXRJblNlY29uZHMsIGNvbXAyNV0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICBjb250ZW50VHlwZSxcbiAgICAgICAgYWNjZXB0LFxuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIG1ldGFkYXRhLFxuICAgICAgICBsZWFzZUlkLFxuICAgICAgICBpZk1vZGlmaWVkU2luY2UsXG4gICAgICAgIGlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICBlbmNyeXB0aW9uS2V5LFxuICAgICAgICBlbmNyeXB0aW9uS2V5U2hhMjU2LFxuICAgICAgICBlbmNyeXB0aW9uQWxnb3JpdGhtLFxuICAgICAgICBpZk1hdGNoLFxuICAgICAgICBpZk5vbmVNYXRjaCxcbiAgICAgICAgaWZUYWdzLFxuICAgICAgICBibG9iQ2FjaGVDb250cm9sLFxuICAgICAgICBibG9iQ29udGVudFR5cGUsXG4gICAgICAgIGJsb2JDb250ZW50TUQ1LFxuICAgICAgICBibG9iQ29udGVudEVuY29kaW5nLFxuICAgICAgICBibG9iQ29udGVudExhbmd1YWdlLFxuICAgICAgICBibG9iQ29udGVudERpc3Bvc2l0aW9uLFxuICAgICAgICBpbW11dGFiaWxpdHlQb2xpY3lFeHBpcnksXG4gICAgICAgIGltbXV0YWJpbGl0eVBvbGljeU1vZGUsXG4gICAgICAgIGVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgdGllcixcbiAgICAgICAgYmxvYlRhZ3NTdHJpbmcsXG4gICAgICAgIGxlZ2FsSG9sZDEsXG4gICAgICAgIHRyYW5zYWN0aW9uYWxDb250ZW50TUQ1LFxuICAgICAgICB0cmFuc2FjdGlvbmFsQ29udGVudENyYzY0LFxuICAgIF0sXG4gICAgaXNYTUw6IHRydWUsXG4gICAgY29udGVudFR5cGU6IFwiYXBwbGljYXRpb24veG1sOyBjaGFyc2V0PXV0Zi04XCIsXG4gICAgbWVkaWFUeXBlOiBcInhtbFwiLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIsXG59O1xuY29uc3QgZ2V0QmxvY2tMaXN0T3BlcmF0aW9uU3BlYyA9IHtcbiAgICBwYXRoOiBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIsXG4gICAgaHR0cE1ldGhvZDogXCJHRVRcIixcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBCbG9ja0xpc3QsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9ja0Jsb2JHZXRCbG9ja0xpc3RIZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBib2R5TWFwcGVyOiBTdG9yYWdlRXJyb3IsXG4gICAgICAgICAgICBoZWFkZXJzTWFwcGVyOiBCbG9ja0Jsb2JHZXRCbG9ja0xpc3RFeGNlcHRpb25IZWFkZXJzLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgcXVlcnlQYXJhbWV0ZXJzOiBbXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHMsXG4gICAgICAgIHNuYXBzaG90LFxuICAgICAgICBjb21wMjUsXG4gICAgICAgIGxpc3RUeXBlLFxuICAgIF0sXG4gICAgdXJsUGFyYW1ldGVyczogW3VybF0sXG4gICAgaGVhZGVyUGFyYW1ldGVyczogW1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFjY2VwdDEsXG4gICAgICAgIGxlYXNlSWQsXG4gICAgICAgIGlmVGFncyxcbiAgICBdLFxuICAgIGlzWE1MOiB0cnVlLFxuICAgIHNlcmlhbGl6ZXI6IHhtbFNlcmlhbGl6ZXIsXG59O1xuXG4vKlxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKlxuICogQ29kZSBnZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBBdXRvUmVzdCBDb2RlIEdlbmVyYXRvci5cbiAqIENoYW5nZXMgbWF5IGNhdXNlIGluY29ycmVjdCBiZWhhdmlvciBhbmQgd2lsbCBiZSBsb3N0IGlmIHRoZSBjb2RlIGlzIHJlZ2VuZXJhdGVkLlxuICovXG5sZXQgU3RvcmFnZUNsaWVudCQxID0gY2xhc3MgU3RvcmFnZUNsaWVudCBleHRlbmRzIGNvcmVIdHRwQ29tcGF0X19uYW1lc3BhY2UuRXh0ZW5kZWRTZXJ2aWNlQ2xpZW50IHtcbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgU3RvcmFnZUNsaWVudCBjbGFzcy5cbiAgICAgKiBAcGFyYW0gdXJsIFRoZSBVUkwgb2YgdGhlIHNlcnZpY2UgYWNjb3VudCwgY29udGFpbmVyLCBvciBibG9iIHRoYXQgaXMgdGhlIHRhcmdldCBvZiB0aGUgZGVzaXJlZFxuICAgICAqICAgICAgICAgICAgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBwYXJhbWV0ZXIgb3B0aW9uc1xuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHVybCwgb3B0aW9ucykge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBpZiAodXJsID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIid1cmwnIGNhbm5vdCBiZSBudWxsXCIpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEluaXRpYWxpemluZyBkZWZhdWx0IHZhbHVlcyBmb3Igb3B0aW9uc1xuICAgICAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgICAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkZWZhdWx0cyA9IHtcbiAgICAgICAgICAgIHJlcXVlc3RDb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04XCIsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHBhY2thZ2VEZXRhaWxzID0gYGF6c2RrLWpzLWF6dXJlLXN0b3JhZ2UtYmxvYi8xMi4yNS4wYDtcbiAgICAgICAgY29uc3QgdXNlckFnZW50UHJlZml4ID0gb3B0aW9ucy51c2VyQWdlbnRPcHRpb25zICYmIG9wdGlvbnMudXNlckFnZW50T3B0aW9ucy51c2VyQWdlbnRQcmVmaXhcbiAgICAgICAgICAgID8gYCR7b3B0aW9ucy51c2VyQWdlbnRPcHRpb25zLnVzZXJBZ2VudFByZWZpeH0gJHtwYWNrYWdlRGV0YWlsc31gXG4gICAgICAgICAgICA6IGAke3BhY2thZ2VEZXRhaWxzfWA7XG4gICAgICAgIGNvbnN0IG9wdGlvbnNXaXRoRGVmYXVsdHMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdHMpLCBvcHRpb25zKSwgeyB1c2VyQWdlbnRPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgdXNlckFnZW50UHJlZml4LFxuICAgICAgICAgICAgfSwgZW5kcG9pbnQ6IChfYiA9IChfYSA9IG9wdGlvbnMuZW5kcG9pbnQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IG9wdGlvbnMuYmFzZVVyaSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogXCJ7dXJsfVwiIH0pO1xuICAgICAgICBzdXBlcihvcHRpb25zV2l0aERlZmF1bHRzKTtcbiAgICAgICAgLy8gUGFyYW1ldGVyIGFzc2lnbm1lbnRzXG4gICAgICAgIHRoaXMudXJsID0gdXJsO1xuICAgICAgICAvLyBBc3NpZ25pbmcgdmFsdWVzIHRvIENvbnN0YW50IHBhcmFtZXRlcnNcbiAgICAgICAgdGhpcy52ZXJzaW9uID0gb3B0aW9ucy52ZXJzaW9uIHx8IFwiMjAyNC0xMS0wNFwiO1xuICAgICAgICB0aGlzLnNlcnZpY2UgPSBuZXcgU2VydmljZUltcGwodGhpcyk7XG4gICAgICAgIHRoaXMuY29udGFpbmVyID0gbmV3IENvbnRhaW5lckltcGwodGhpcyk7XG4gICAgICAgIHRoaXMuYmxvYiA9IG5ldyBCbG9iSW1wbCh0aGlzKTtcbiAgICAgICAgdGhpcy5wYWdlQmxvYiA9IG5ldyBQYWdlQmxvYkltcGwodGhpcyk7XG4gICAgICAgIHRoaXMuYXBwZW5kQmxvYiA9IG5ldyBBcHBlbmRCbG9iSW1wbCh0aGlzKTtcbiAgICAgICAgdGhpcy5ibG9ja0Jsb2IgPSBuZXcgQmxvY2tCbG9iSW1wbCh0aGlzKTtcbiAgICB9XG59O1xuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmNsYXNzIFN0b3JhZ2VDb250ZXh0Q2xpZW50IGV4dGVuZHMgU3RvcmFnZUNsaWVudCQxIHtcbiAgICBhc3luYyBzZW5kT3BlcmF0aW9uUmVxdWVzdChvcGVyYXRpb25Bcmd1bWVudHMsIG9wZXJhdGlvblNwZWMpIHtcbiAgICAgICAgY29uc3Qgb3BlcmF0aW9uU3BlY1RvU2VuZCA9IE9iamVjdC5hc3NpZ24oe30sIG9wZXJhdGlvblNwZWMpO1xuICAgICAgICBpZiAob3BlcmF0aW9uU3BlY1RvU2VuZC5wYXRoID09PSBcIi97Y29udGFpbmVyTmFtZX1cIiB8fFxuICAgICAgICAgICAgb3BlcmF0aW9uU3BlY1RvU2VuZC5wYXRoID09PSBcIi97Y29udGFpbmVyTmFtZX0ve2Jsb2J9XCIpIHtcbiAgICAgICAgICAgIG9wZXJhdGlvblNwZWNUb1NlbmQucGF0aCA9IFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN1cGVyLnNlbmRPcGVyYXRpb25SZXF1ZXN0KG9wZXJhdGlvbkFyZ3VtZW50cywgb3BlcmF0aW9uU3BlY1RvU2VuZCk7XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogQSBTdG9yYWdlQ2xpZW50IHJlcHJlc2VudHMgYSBiYXNlZCBVUkwgY2xhc3MgZm9yIHtAbGluayBCbG9iU2VydmljZUNsaWVudH0sIHtAbGluayBDb250YWluZXJDbGllbnR9XG4gKiBhbmQgZXRjLlxuICovXG5jbGFzcyBTdG9yYWdlQ2xpZW50IHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIFN0b3JhZ2VDbGllbnQuXG4gICAgICogQHBhcmFtIHVybCAtIHVybCB0byByZXNvdXJjZVxuICAgICAqIEBwYXJhbSBwaXBlbGluZSAtIHJlcXVlc3QgcG9saWN5IHBpcGVsaW5lLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHVybCwgcGlwZWxpbmUpIHtcbiAgICAgICAgLy8gVVJMIHNob3VsZCBiZSBlbmNvZGVkIGFuZCBvbmx5IG9uY2UsIHByb3RvY29sIGxheWVyIHNob3VsZG4ndCBlbmNvZGUgVVJMIGFnYWluXG4gICAgICAgIHRoaXMudXJsID0gZXNjYXBlVVJMUGF0aCh1cmwpO1xuICAgICAgICB0aGlzLmFjY291bnROYW1lID0gZ2V0QWNjb3VudE5hbWVGcm9tVXJsKHVybCk7XG4gICAgICAgIHRoaXMucGlwZWxpbmUgPSBwaXBlbGluZTtcbiAgICAgICAgdGhpcy5zdG9yYWdlQ2xpZW50Q29udGV4dCA9IG5ldyBTdG9yYWdlQ29udGV4dENsaWVudCh0aGlzLnVybCwgZ2V0Q29yZUNsaWVudE9wdGlvbnMocGlwZWxpbmUpKTtcbiAgICAgICAgdGhpcy5pc0h0dHBzID0gaUVxdWFsKGdldFVSTFNjaGVtZSh0aGlzLnVybCkgfHwgXCJcIiwgXCJodHRwc1wiKTtcbiAgICAgICAgdGhpcy5jcmVkZW50aWFsID0gZ2V0Q3JlZGVudGlhbEZyb21QaXBlbGluZShwaXBlbGluZSk7XG4gICAgICAgIC8vIE92ZXJyaWRlIHByb3RvY29sIGxheWVyJ3MgZGVmYXVsdCBjb250ZW50LXR5cGVcbiAgICAgICAgY29uc3Qgc3RvcmFnZUNsaWVudENvbnRleHQgPSB0aGlzLnN0b3JhZ2VDbGllbnRDb250ZXh0O1xuICAgICAgICBzdG9yYWdlQ2xpZW50Q29udGV4dC5yZXF1ZXN0Q29udGVudFR5cGUgPSB1bmRlZmluZWQ7XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogQ3JlYXRlcyBhIHNwYW4gdXNpbmcgdGhlIGdsb2JhbCB0cmFjZXIuXG4gKiBAaW50ZXJuYWxcbiAqL1xuY29uc3QgdHJhY2luZ0NsaWVudCA9IGNvcmVUcmFjaW5nLmNyZWF0ZVRyYWNpbmdDbGllbnQoe1xuICAgIHBhY2thZ2VOYW1lOiBcIkBhenVyZS9zdG9yYWdlLWJsb2JcIixcbiAgICBwYWNrYWdlVmVyc2lvbjogU0RLX1ZFUlNJT04sXG4gICAgbmFtZXNwYWNlOiBcIk1pY3Jvc29mdC5TdG9yYWdlXCIsXG59KTtcblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIE9OTFkgQVZBSUxBQkxFIElOIE5PREUuSlMgUlVOVElNRS5cbiAqXG4gKiBUaGlzIGlzIGEgaGVscGVyIGNsYXNzIHRvIGNvbnN0cnVjdCBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHBlcm1pc3Npb25zIGdyYW50ZWQgYnkgYSBTZXJ2aWNlU0FTIHRvIGEgYmxvYi4gU2V0dGluZ1xuICogYSB2YWx1ZSB0byB0cnVlIG1lYW5zIHRoYXQgYW55IFNBUyB3aGljaCB1c2VzIHRoZXNlIHBlcm1pc3Npb25zIHdpbGwgZ3JhbnQgcGVybWlzc2lvbnMgZm9yIHRoYXQgb3BlcmF0aW9uLiBPbmNlIGFsbFxuICogdGhlIHZhbHVlcyBhcmUgc2V0LCB0aGlzIHNob3VsZCBiZSBzZXJpYWxpemVkIHdpdGggdG9TdHJpbmcgYW5kIHNldCBhcyB0aGUgcGVybWlzc2lvbnMgZmllbGQgb24gYVxuICoge0BsaW5rIEJsb2JTQVNTaWduYXR1cmVWYWx1ZXN9IG9iamVjdC4gSXQgaXMgcG9zc2libGUgdG8gY29uc3RydWN0IHRoZSBwZXJtaXNzaW9ucyBzdHJpbmcgd2l0aG91dCB0aGlzIGNsYXNzLCBidXRcbiAqIHRoZSBvcmRlciBvZiB0aGUgcGVybWlzc2lvbnMgaXMgcGFydGljdWxhciBhbmQgdGhpcyBjbGFzcyBndWFyYW50ZWVzIGNvcnJlY3RuZXNzLlxuICovXG5jbGFzcyBCbG9iU0FTUGVybWlzc2lvbnMge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIFJlYWQgYWNjZXNzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnJlYWQgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyBBZGQgYWNjZXNzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmFkZCA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIENyZWF0ZSBhY2Nlc3MgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY3JlYXRlID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgV3JpdGUgYWNjZXNzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLndyaXRlID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgRGVsZXRlIGFjY2VzcyBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5kZWxldGUgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyBEZWxldGUgdmVyc2lvbiBhY2Nlc3MgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZGVsZXRlVmVyc2lvbiA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2ZpZXMgVGFnIGFjY2VzcyBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy50YWcgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyBNb3ZlIGFjY2VzcyBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5tb3ZlID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgRXhlY3V0ZSBhY2Nlc3MgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZXhlY3V0ZSA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIFNldEltbXV0YWJpbGl0eVBvbGljeSBhY2Nlc3MgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuc2V0SW1tdXRhYmlsaXR5UG9saWN5ID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgdGhhdCBQZXJtYW5lbnQgRGVsZXRlIGlzIHBlcm1pdHRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMucGVybWFuZW50RGVsZXRlID0gZmFsc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSB7QGxpbmsgQmxvYlNBU1Blcm1pc3Npb25zfSBmcm9tIHRoZSBzcGVjaWZpZWQgcGVybWlzc2lvbnMgc3RyaW5nLiBUaGlzIG1ldGhvZCB3aWxsIHRocm93IGFuXG4gICAgICogRXJyb3IgaWYgaXQgZW5jb3VudGVycyBhIGNoYXJhY3RlciB0aGF0IGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSB2YWxpZCBwZXJtaXNzaW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIHBlcm1pc3Npb25zIC1cbiAgICAgKi9cbiAgICBzdGF0aWMgcGFyc2UocGVybWlzc2lvbnMpIHtcbiAgICAgICAgY29uc3QgYmxvYlNBU1Blcm1pc3Npb25zID0gbmV3IEJsb2JTQVNQZXJtaXNzaW9ucygpO1xuICAgICAgICBmb3IgKGNvbnN0IGNoYXIgb2YgcGVybWlzc2lvbnMpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoY2hhcikge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJyXCI6XG4gICAgICAgICAgICAgICAgICAgIGJsb2JTQVNQZXJtaXNzaW9ucy5yZWFkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImFcIjpcbiAgICAgICAgICAgICAgICAgICAgYmxvYlNBU1Blcm1pc3Npb25zLmFkZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJjXCI6XG4gICAgICAgICAgICAgICAgICAgIGJsb2JTQVNQZXJtaXNzaW9ucy5jcmVhdGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwid1wiOlxuICAgICAgICAgICAgICAgICAgICBibG9iU0FTUGVybWlzc2lvbnMud3JpdGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiZFwiOlxuICAgICAgICAgICAgICAgICAgICBibG9iU0FTUGVybWlzc2lvbnMuZGVsZXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInhcIjpcbiAgICAgICAgICAgICAgICAgICAgYmxvYlNBU1Blcm1pc3Npb25zLmRlbGV0ZVZlcnNpb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwidFwiOlxuICAgICAgICAgICAgICAgICAgICBibG9iU0FTUGVybWlzc2lvbnMudGFnID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm1cIjpcbiAgICAgICAgICAgICAgICAgICAgYmxvYlNBU1Blcm1pc3Npb25zLm1vdmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiZVwiOlxuICAgICAgICAgICAgICAgICAgICBibG9iU0FTUGVybWlzc2lvbnMuZXhlY3V0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJpXCI6XG4gICAgICAgICAgICAgICAgICAgIGJsb2JTQVNQZXJtaXNzaW9ucy5zZXRJbW11dGFiaWxpdHlQb2xpY3kgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwieVwiOlxuICAgICAgICAgICAgICAgICAgICBibG9iU0FTUGVybWlzc2lvbnMucGVybWFuZW50RGVsZXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEludmFsaWQgcGVybWlzc2lvbjogJHtjaGFyfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBibG9iU0FTUGVybWlzc2lvbnM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSB7QGxpbmsgQmxvYlNBU1Blcm1pc3Npb25zfSBmcm9tIGEgcmF3IG9iamVjdCB3aGljaCBjb250YWlucyBzYW1lIGtleXMgYXMgaXRcbiAgICAgKiBhbmQgYm9vbGVhbiB2YWx1ZXMgZm9yIHRoZW0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGVybWlzc2lvbkxpa2UgLVxuICAgICAqL1xuICAgIHN0YXRpYyBmcm9tKHBlcm1pc3Npb25MaWtlKSB7XG4gICAgICAgIGNvbnN0IGJsb2JTQVNQZXJtaXNzaW9ucyA9IG5ldyBCbG9iU0FTUGVybWlzc2lvbnMoKTtcbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLnJlYWQpIHtcbiAgICAgICAgICAgIGJsb2JTQVNQZXJtaXNzaW9ucy5yZWFkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2UuYWRkKSB7XG4gICAgICAgICAgICBibG9iU0FTUGVybWlzc2lvbnMuYWRkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2UuY3JlYXRlKSB7XG4gICAgICAgICAgICBibG9iU0FTUGVybWlzc2lvbnMuY3JlYXRlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2Uud3JpdGUpIHtcbiAgICAgICAgICAgIGJsb2JTQVNQZXJtaXNzaW9ucy53cml0ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLmRlbGV0ZSkge1xuICAgICAgICAgICAgYmxvYlNBU1Blcm1pc3Npb25zLmRlbGV0ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLmRlbGV0ZVZlcnNpb24pIHtcbiAgICAgICAgICAgIGJsb2JTQVNQZXJtaXNzaW9ucy5kZWxldGVWZXJzaW9uID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2UudGFnKSB7XG4gICAgICAgICAgICBibG9iU0FTUGVybWlzc2lvbnMudGFnID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2UubW92ZSkge1xuICAgICAgICAgICAgYmxvYlNBU1Blcm1pc3Npb25zLm1vdmUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS5leGVjdXRlKSB7XG4gICAgICAgICAgICBibG9iU0FTUGVybWlzc2lvbnMuZXhlY3V0ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLnNldEltbXV0YWJpbGl0eVBvbGljeSkge1xuICAgICAgICAgICAgYmxvYlNBU1Blcm1pc3Npb25zLnNldEltbXV0YWJpbGl0eVBvbGljeSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLnBlcm1hbmVudERlbGV0ZSkge1xuICAgICAgICAgICAgYmxvYlNBU1Blcm1pc3Npb25zLnBlcm1hbmVudERlbGV0ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJsb2JTQVNQZXJtaXNzaW9ucztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29udmVydHMgdGhlIGdpdmVuIHBlcm1pc3Npb25zIHRvIGEgc3RyaW5nLiBVc2luZyB0aGlzIG1ldGhvZCB3aWxsIGd1YXJhbnRlZSB0aGUgcGVybWlzc2lvbnMgYXJlIGluIGFuXG4gICAgICogb3JkZXIgYWNjZXB0ZWQgYnkgdGhlIHNlcnZpY2UuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBBIHN0cmluZyB3aGljaCByZXByZXNlbnRzIHRoZSBCbG9iU0FTUGVybWlzc2lvbnNcbiAgICAgKi9cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgY29uc3QgcGVybWlzc2lvbnMgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMucmVhZCkge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcInJcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuYWRkKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwiYVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jcmVhdGUpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJjXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLndyaXRlKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwid1wiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kZWxldGUpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmRlbGV0ZVZlcnNpb24pIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJ4XCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnRhZykge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcInRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubW92ZSkge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcIm1cIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZXhlY3V0ZSkge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcImVcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2V0SW1tdXRhYmlsaXR5UG9saWN5KSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwiaVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wZXJtYW5lbnREZWxldGUpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJ5XCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwZXJtaXNzaW9ucy5qb2luKFwiXCIpO1xuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIFRoaXMgaXMgYSBoZWxwZXIgY2xhc3MgdG8gY29uc3RydWN0IGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSBhIFNlcnZpY2VTQVMgdG8gYSBjb250YWluZXIuXG4gKiBTZXR0aW5nIGEgdmFsdWUgdG8gdHJ1ZSBtZWFucyB0aGF0IGFueSBTQVMgd2hpY2ggdXNlcyB0aGVzZSBwZXJtaXNzaW9ucyB3aWxsIGdyYW50IHBlcm1pc3Npb25zIGZvciB0aGF0IG9wZXJhdGlvbi5cbiAqIE9uY2UgYWxsIHRoZSB2YWx1ZXMgYXJlIHNldCwgdGhpcyBzaG91bGQgYmUgc2VyaWFsaXplZCB3aXRoIHRvU3RyaW5nIGFuZCBzZXQgYXMgdGhlIHBlcm1pc3Npb25zIGZpZWxkIG9uIGFcbiAqIHtAbGluayBCbG9iU0FTU2lnbmF0dXJlVmFsdWVzfSBvYmplY3QuIEl0IGlzIHBvc3NpYmxlIHRvIGNvbnN0cnVjdCB0aGUgcGVybWlzc2lvbnMgc3RyaW5nIHdpdGhvdXQgdGhpcyBjbGFzcywgYnV0XG4gKiB0aGUgb3JkZXIgb2YgdGhlIHBlcm1pc3Npb25zIGlzIHBhcnRpY3VsYXIgYW5kIHRoaXMgY2xhc3MgZ3VhcmFudGVlcyBjb3JyZWN0bmVzcy5cbiAqL1xuY2xhc3MgQ29udGFpbmVyU0FTUGVybWlzc2lvbnMge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIFJlYWQgYWNjZXNzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnJlYWQgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyBBZGQgYWNjZXNzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmFkZCA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIENyZWF0ZSBhY2Nlc3MgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY3JlYXRlID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgV3JpdGUgYWNjZXNzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLndyaXRlID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgRGVsZXRlIGFjY2VzcyBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5kZWxldGUgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyBEZWxldGUgdmVyc2lvbiBhY2Nlc3MgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZGVsZXRlVmVyc2lvbiA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIExpc3QgYWNjZXNzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmxpc3QgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNmaWVzIFRhZyBhY2Nlc3MgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudGFnID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgTW92ZSBhY2Nlc3MgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMubW92ZSA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIEV4ZWN1dGUgYWNjZXNzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmV4ZWN1dGUgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyBTZXRJbW11dGFiaWxpdHlQb2xpY3kgYWNjZXNzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnNldEltbXV0YWJpbGl0eVBvbGljeSA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHRoYXQgUGVybWFuZW50IERlbGV0ZSBpcyBwZXJtaXR0ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnBlcm1hbmVudERlbGV0ZSA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHRoYXQgRmlsdGVyIEJsb2JzIGJ5IFRhZ3MgaXMgcGVybWl0dGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5maWx0ZXJCeVRhZ3MgPSBmYWxzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiB7QGxpbmsgQ29udGFpbmVyU0FTUGVybWlzc2lvbnN9IGZyb20gdGhlIHNwZWNpZmllZCBwZXJtaXNzaW9ucyBzdHJpbmcuIFRoaXMgbWV0aG9kIHdpbGwgdGhyb3cgYW5cbiAgICAgKiBFcnJvciBpZiBpdCBlbmNvdW50ZXJzIGEgY2hhcmFjdGVyIHRoYXQgZG9lcyBub3QgY29ycmVzcG9uZCB0byBhIHZhbGlkIHBlcm1pc3Npb24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGVybWlzc2lvbnMgLVxuICAgICAqL1xuICAgIHN0YXRpYyBwYXJzZShwZXJtaXNzaW9ucykge1xuICAgICAgICBjb25zdCBjb250YWluZXJTQVNQZXJtaXNzaW9ucyA9IG5ldyBDb250YWluZXJTQVNQZXJtaXNzaW9ucygpO1xuICAgICAgICBmb3IgKGNvbnN0IGNoYXIgb2YgcGVybWlzc2lvbnMpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoY2hhcikge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJyXCI6XG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lclNBU1Blcm1pc3Npb25zLnJlYWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiYVwiOlxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJTQVNQZXJtaXNzaW9ucy5hZGQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiY1wiOlxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJTQVNQZXJtaXNzaW9ucy5jcmVhdGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwid1wiOlxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJTQVNQZXJtaXNzaW9ucy53cml0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJkXCI6XG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lclNBU1Blcm1pc3Npb25zLmRlbGV0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJsXCI6XG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lclNBU1Blcm1pc3Npb25zLmxpc3QgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwidFwiOlxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJTQVNQZXJtaXNzaW9ucy50YWcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwieFwiOlxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJTQVNQZXJtaXNzaW9ucy5kZWxldGVWZXJzaW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm1cIjpcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyU0FTUGVybWlzc2lvbnMubW92ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJlXCI6XG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lclNBU1Blcm1pc3Npb25zLmV4ZWN1dGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiaVwiOlxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJTQVNQZXJtaXNzaW9ucy5zZXRJbW11dGFiaWxpdHlQb2xpY3kgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwieVwiOlxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJTQVNQZXJtaXNzaW9ucy5wZXJtYW5lbnREZWxldGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiZlwiOlxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJTQVNQZXJtaXNzaW9ucy5maWx0ZXJCeVRhZ3MgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgSW52YWxpZCBwZXJtaXNzaW9uICR7Y2hhcn1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29udGFpbmVyU0FTUGVybWlzc2lvbnM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSB7QGxpbmsgQ29udGFpbmVyU0FTUGVybWlzc2lvbnN9IGZyb20gYSByYXcgb2JqZWN0IHdoaWNoIGNvbnRhaW5zIHNhbWUga2V5cyBhcyBpdFxuICAgICAqIGFuZCBib29sZWFuIHZhbHVlcyBmb3IgdGhlbS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwZXJtaXNzaW9uTGlrZSAtXG4gICAgICovXG4gICAgc3RhdGljIGZyb20ocGVybWlzc2lvbkxpa2UpIHtcbiAgICAgICAgY29uc3QgY29udGFpbmVyU0FTUGVybWlzc2lvbnMgPSBuZXcgQ29udGFpbmVyU0FTUGVybWlzc2lvbnMoKTtcbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLnJlYWQpIHtcbiAgICAgICAgICAgIGNvbnRhaW5lclNBU1Blcm1pc3Npb25zLnJlYWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS5hZGQpIHtcbiAgICAgICAgICAgIGNvbnRhaW5lclNBU1Blcm1pc3Npb25zLmFkZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLmNyZWF0ZSkge1xuICAgICAgICAgICAgY29udGFpbmVyU0FTUGVybWlzc2lvbnMuY3JlYXRlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2Uud3JpdGUpIHtcbiAgICAgICAgICAgIGNvbnRhaW5lclNBU1Blcm1pc3Npb25zLndyaXRlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2UuZGVsZXRlKSB7XG4gICAgICAgICAgICBjb250YWluZXJTQVNQZXJtaXNzaW9ucy5kZWxldGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS5saXN0KSB7XG4gICAgICAgICAgICBjb250YWluZXJTQVNQZXJtaXNzaW9ucy5saXN0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2UuZGVsZXRlVmVyc2lvbikge1xuICAgICAgICAgICAgY29udGFpbmVyU0FTUGVybWlzc2lvbnMuZGVsZXRlVmVyc2lvbiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLnRhZykge1xuICAgICAgICAgICAgY29udGFpbmVyU0FTUGVybWlzc2lvbnMudGFnID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2UubW92ZSkge1xuICAgICAgICAgICAgY29udGFpbmVyU0FTUGVybWlzc2lvbnMubW92ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLmV4ZWN1dGUpIHtcbiAgICAgICAgICAgIGNvbnRhaW5lclNBU1Blcm1pc3Npb25zLmV4ZWN1dGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS5zZXRJbW11dGFiaWxpdHlQb2xpY3kpIHtcbiAgICAgICAgICAgIGNvbnRhaW5lclNBU1Blcm1pc3Npb25zLnNldEltbXV0YWJpbGl0eVBvbGljeSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLnBlcm1hbmVudERlbGV0ZSkge1xuICAgICAgICAgICAgY29udGFpbmVyU0FTUGVybWlzc2lvbnMucGVybWFuZW50RGVsZXRlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2UuZmlsdGVyQnlUYWdzKSB7XG4gICAgICAgICAgICBjb250YWluZXJTQVNQZXJtaXNzaW9ucy5maWx0ZXJCeVRhZ3MgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb250YWluZXJTQVNQZXJtaXNzaW9ucztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29udmVydHMgdGhlIGdpdmVuIHBlcm1pc3Npb25zIHRvIGEgc3RyaW5nLiBVc2luZyB0aGlzIG1ldGhvZCB3aWxsIGd1YXJhbnRlZSB0aGUgcGVybWlzc2lvbnMgYXJlIGluIGFuXG4gICAgICogb3JkZXIgYWNjZXB0ZWQgYnkgdGhlIHNlcnZpY2UuXG4gICAgICpcbiAgICAgKiBUaGUgb3JkZXIgb2YgdGhlIGNoYXJhY3RlcnMgc2hvdWxkIGJlIGFzIHNwZWNpZmllZCBoZXJlIHRvIGVuc3VyZSBjb3JyZWN0bmVzcy5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9jb25zdHJ1Y3RpbmctYS1zZXJ2aWNlLXNhc1xuICAgICAqXG4gICAgICovXG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIGNvbnN0IHBlcm1pc3Npb25zID0gW107XG4gICAgICAgIGlmICh0aGlzLnJlYWQpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJyXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmFkZCkge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcImFcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY3JlYXRlKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwiY1wiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy53cml0ZSkge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcIndcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZGVsZXRlKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwiZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kZWxldGVWZXJzaW9uKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwieFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5saXN0KSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwibFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy50YWcpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJ0XCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1vdmUpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJtXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmV4ZWN1dGUpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJlXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNldEltbXV0YWJpbGl0eVBvbGljeSkge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcImlcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucGVybWFuZW50RGVsZXRlKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwieVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5maWx0ZXJCeVRhZ3MpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJmXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwZXJtaXNzaW9ucy5qb2luKFwiXCIpO1xuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIE9OTFkgQVZBSUxBQkxFIElOIE5PREUuSlMgUlVOVElNRS5cbiAqXG4gKiBVc2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwgaXMgb25seSB1c2VkIGZvciBnZW5lcmF0aW9uIG9mIHVzZXIgZGVsZWdhdGlvbiBTQVMuXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9jcmVhdGUtdXNlci1kZWxlZ2F0aW9uLXNhc1xuICovXG5jbGFzcyBVc2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgVXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsLlxuICAgICAqIEBwYXJhbSBhY2NvdW50TmFtZSAtXG4gICAgICogQHBhcmFtIHVzZXJEZWxlZ2F0aW9uS2V5IC1cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihhY2NvdW50TmFtZSwgdXNlckRlbGVnYXRpb25LZXkpIHtcbiAgICAgICAgdGhpcy5hY2NvdW50TmFtZSA9IGFjY291bnROYW1lO1xuICAgICAgICB0aGlzLnVzZXJEZWxlZ2F0aW9uS2V5ID0gdXNlckRlbGVnYXRpb25LZXk7XG4gICAgICAgIHRoaXMua2V5ID0gQnVmZmVyLmZyb20odXNlckRlbGVnYXRpb25LZXkudmFsdWUsIFwiYmFzZTY0XCIpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZW5lcmF0ZXMgYSBoYXNoIHNpZ25hdHVyZSBmb3IgYW4gSFRUUCByZXF1ZXN0IG9yIGZvciBhIFNBUy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzdHJpbmdUb1NpZ24gLVxuICAgICAqL1xuICAgIGNvbXB1dGVITUFDU0hBMjU2KHN0cmluZ1RvU2lnbikge1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhgc3RyaW5nVG9TaWduOiAke0pTT04uc3RyaW5naWZ5KHN0cmluZ1RvU2lnbil9YCk7XG4gICAgICAgIHJldHVybiBjcnlwdG8uY3JlYXRlSG1hYyhcInNoYTI1NlwiLCB0aGlzLmtleSkudXBkYXRlKHN0cmluZ1RvU2lnbiwgXCJ1dGY4XCIpLmRpZ2VzdChcImJhc2U2NFwiKTtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBHZW5lcmF0ZSBTYXNJUFJhbmdlIGZvcm1hdCBzdHJpbmcuIEZvciBleGFtcGxlOlxuICpcbiAqIFwiOC44LjguOFwiIG9yIFwiMS4xLjEuMS0yNTUuMjU1LjI1NS4yNTVcIlxuICpcbiAqIEBwYXJhbSBpcFJhbmdlIC1cbiAqL1xuZnVuY3Rpb24gaXBSYW5nZVRvU3RyaW5nKGlwUmFuZ2UpIHtcbiAgICByZXR1cm4gaXBSYW5nZS5lbmQgPyBgJHtpcFJhbmdlLnN0YXJ0fS0ke2lwUmFuZ2UuZW5kfWAgOiBpcFJhbmdlLnN0YXJ0O1xufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogUHJvdG9jb2xzIGZvciBnZW5lcmF0ZWQgU0FTLlxuICovXG5leHBvcnRzLlNBU1Byb3RvY29sID0gdm9pZCAwO1xuKGZ1bmN0aW9uIChTQVNQcm90b2NvbCkge1xuICAgIC8qKlxuICAgICAqIFByb3RvY29sIHRoYXQgYWxsb3dzIEhUVFBTIG9ubHlcbiAgICAgKi9cbiAgICBTQVNQcm90b2NvbFtcIkh0dHBzXCJdID0gXCJodHRwc1wiO1xuICAgIC8qKlxuICAgICAqIFByb3RvY29sIHRoYXQgYWxsb3dzIGJvdGggSFRUUFMgYW5kIEhUVFBcbiAgICAgKi9cbiAgICBTQVNQcm90b2NvbFtcIkh0dHBzQW5kSHR0cFwiXSA9IFwiaHR0cHMsaHR0cFwiO1xufSkoZXhwb3J0cy5TQVNQcm90b2NvbCB8fCAoZXhwb3J0cy5TQVNQcm90b2NvbCA9IHt9KSk7XG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIGNvbXBvbmVudHMgdGhhdCBtYWtlIHVwIGFuIEF6dXJlIFN0b3JhZ2UgU0FTJyBxdWVyeSBwYXJhbWV0ZXJzLiBUaGlzIHR5cGUgaXMgbm90IGNvbnN0cnVjdGVkIGRpcmVjdGx5XG4gKiBieSB0aGUgdXNlcjsgaXQgaXMgb25seSBnZW5lcmF0ZWQgYnkgdGhlIHtAbGluayBBY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzfSBhbmQge0BsaW5rIEJsb2JTQVNTaWduYXR1cmVWYWx1ZXN9XG4gKiB0eXBlcy4gT25jZSBnZW5lcmF0ZWQsIGl0IGNhbiBiZSBlbmNvZGVkIGludG8gYSB7QGxpbmsgU3RyaW5nfSBhbmQgYXBwZW5kZWQgdG8gYSBVUkwgZGlyZWN0bHkgKHRob3VnaCBjYXV0aW9uIHNob3VsZFxuICogYmUgdGFrZW4gaGVyZSBpbiBjYXNlIHRoZXJlIGFyZSBleGlzdGluZyBxdWVyeSBwYXJhbWV0ZXJzLCB3aGljaCBtaWdodCBhZmZlY3QgdGhlIGFwcHJvcHJpYXRlIG1lYW5zIG9mIGFwcGVuZGluZ1xuICogdGhlc2UgcXVlcnkgcGFyYW1ldGVycykuXG4gKlxuICogTk9URTogSW5zdGFuY2VzIG9mIHRoaXMgY2xhc3MgYXJlIGltbXV0YWJsZS5cbiAqL1xuY2xhc3MgU0FTUXVlcnlQYXJhbWV0ZXJzIHtcbiAgICAvKipcbiAgICAgKiBPcHRpb25hbC4gSVAgcmFuZ2UgYWxsb3dlZCBmb3IgdGhpcyBTQVMuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgaXBSYW5nZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXBSYW5nZUlubmVyKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGVuZDogdGhpcy5pcFJhbmdlSW5uZXIuZW5kLFxuICAgICAgICAgICAgICAgIHN0YXJ0OiB0aGlzLmlwUmFuZ2VJbm5lci5zdGFydCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3RydWN0b3IodmVyc2lvbiwgc2lnbmF0dXJlLCBwZXJtaXNzaW9uc09yT3B0aW9ucywgc2VydmljZXMsIHJlc291cmNlVHlwZXMsIHByb3RvY29sLCBzdGFydHNPbiwgZXhwaXJlc09uLCBpcFJhbmdlLCBpZGVudGlmaWVyLCByZXNvdXJjZSwgY2FjaGVDb250cm9sLCBjb250ZW50RGlzcG9zaXRpb24sIGNvbnRlbnRFbmNvZGluZywgY29udGVudExhbmd1YWdlLCBjb250ZW50VHlwZSwgdXNlckRlbGVnYXRpb25LZXksIHByZWF1dGhvcml6ZWRBZ2VudE9iamVjdElkLCBjb3JyZWxhdGlvbklkLCBlbmNyeXB0aW9uU2NvcGUpIHtcbiAgICAgICAgdGhpcy52ZXJzaW9uID0gdmVyc2lvbjtcbiAgICAgICAgdGhpcy5zaWduYXR1cmUgPSBzaWduYXR1cmU7XG4gICAgICAgIGlmIChwZXJtaXNzaW9uc09yT3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBwZXJtaXNzaW9uc09yT3B0aW9ucyAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgLy8gU0FTUXVlcnlQYXJhbWV0ZXJzT3B0aW9uc1xuICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9ucyA9IHBlcm1pc3Npb25zT3JPcHRpb25zLnBlcm1pc3Npb25zO1xuICAgICAgICAgICAgdGhpcy5zZXJ2aWNlcyA9IHBlcm1pc3Npb25zT3JPcHRpb25zLnNlcnZpY2VzO1xuICAgICAgICAgICAgdGhpcy5yZXNvdXJjZVR5cGVzID0gcGVybWlzc2lvbnNPck9wdGlvbnMucmVzb3VyY2VUeXBlcztcbiAgICAgICAgICAgIHRoaXMucHJvdG9jb2wgPSBwZXJtaXNzaW9uc09yT3B0aW9ucy5wcm90b2NvbDtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRzT24gPSBwZXJtaXNzaW9uc09yT3B0aW9ucy5zdGFydHNPbjtcbiAgICAgICAgICAgIHRoaXMuZXhwaXJlc09uID0gcGVybWlzc2lvbnNPck9wdGlvbnMuZXhwaXJlc09uO1xuICAgICAgICAgICAgdGhpcy5pcFJhbmdlSW5uZXIgPSBwZXJtaXNzaW9uc09yT3B0aW9ucy5pcFJhbmdlO1xuICAgICAgICAgICAgdGhpcy5pZGVudGlmaWVyID0gcGVybWlzc2lvbnNPck9wdGlvbnMuaWRlbnRpZmllcjtcbiAgICAgICAgICAgIHRoaXMuZW5jcnlwdGlvblNjb3BlID0gcGVybWlzc2lvbnNPck9wdGlvbnMuZW5jcnlwdGlvblNjb3BlO1xuICAgICAgICAgICAgdGhpcy5yZXNvdXJjZSA9IHBlcm1pc3Npb25zT3JPcHRpb25zLnJlc291cmNlO1xuICAgICAgICAgICAgdGhpcy5jYWNoZUNvbnRyb2wgPSBwZXJtaXNzaW9uc09yT3B0aW9ucy5jYWNoZUNvbnRyb2w7XG4gICAgICAgICAgICB0aGlzLmNvbnRlbnREaXNwb3NpdGlvbiA9IHBlcm1pc3Npb25zT3JPcHRpb25zLmNvbnRlbnREaXNwb3NpdGlvbjtcbiAgICAgICAgICAgIHRoaXMuY29udGVudEVuY29kaW5nID0gcGVybWlzc2lvbnNPck9wdGlvbnMuY29udGVudEVuY29kaW5nO1xuICAgICAgICAgICAgdGhpcy5jb250ZW50TGFuZ3VhZ2UgPSBwZXJtaXNzaW9uc09yT3B0aW9ucy5jb250ZW50TGFuZ3VhZ2U7XG4gICAgICAgICAgICB0aGlzLmNvbnRlbnRUeXBlID0gcGVybWlzc2lvbnNPck9wdGlvbnMuY29udGVudFR5cGU7XG4gICAgICAgICAgICBpZiAocGVybWlzc2lvbnNPck9wdGlvbnMudXNlckRlbGVnYXRpb25LZXkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNpZ25lZE9pZCA9IHBlcm1pc3Npb25zT3JPcHRpb25zLnVzZXJEZWxlZ2F0aW9uS2V5LnNpZ25lZE9iamVjdElkO1xuICAgICAgICAgICAgICAgIHRoaXMuc2lnbmVkVGVuYW50SWQgPSBwZXJtaXNzaW9uc09yT3B0aW9ucy51c2VyRGVsZWdhdGlvbktleS5zaWduZWRUZW5hbnRJZDtcbiAgICAgICAgICAgICAgICB0aGlzLnNpZ25lZFN0YXJ0c09uID0gcGVybWlzc2lvbnNPck9wdGlvbnMudXNlckRlbGVnYXRpb25LZXkuc2lnbmVkU3RhcnRzT247XG4gICAgICAgICAgICAgICAgdGhpcy5zaWduZWRFeHBpcmVzT24gPSBwZXJtaXNzaW9uc09yT3B0aW9ucy51c2VyRGVsZWdhdGlvbktleS5zaWduZWRFeHBpcmVzT247XG4gICAgICAgICAgICAgICAgdGhpcy5zaWduZWRTZXJ2aWNlID0gcGVybWlzc2lvbnNPck9wdGlvbnMudXNlckRlbGVnYXRpb25LZXkuc2lnbmVkU2VydmljZTtcbiAgICAgICAgICAgICAgICB0aGlzLnNpZ25lZFZlcnNpb24gPSBwZXJtaXNzaW9uc09yT3B0aW9ucy51c2VyRGVsZWdhdGlvbktleS5zaWduZWRWZXJzaW9uO1xuICAgICAgICAgICAgICAgIHRoaXMucHJlYXV0aG9yaXplZEFnZW50T2JqZWN0SWQgPSBwZXJtaXNzaW9uc09yT3B0aW9ucy5wcmVhdXRob3JpemVkQWdlbnRPYmplY3RJZDtcbiAgICAgICAgICAgICAgICB0aGlzLmNvcnJlbGF0aW9uSWQgPSBwZXJtaXNzaW9uc09yT3B0aW9ucy5jb3JyZWxhdGlvbklkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXJ2aWNlcyA9IHNlcnZpY2VzO1xuICAgICAgICAgICAgdGhpcy5yZXNvdXJjZVR5cGVzID0gcmVzb3VyY2VUeXBlcztcbiAgICAgICAgICAgIHRoaXMuZXhwaXJlc09uID0gZXhwaXJlc09uO1xuICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9ucyA9IHBlcm1pc3Npb25zT3JPcHRpb25zO1xuICAgICAgICAgICAgdGhpcy5wcm90b2NvbCA9IHByb3RvY29sO1xuICAgICAgICAgICAgdGhpcy5zdGFydHNPbiA9IHN0YXJ0c09uO1xuICAgICAgICAgICAgdGhpcy5pcFJhbmdlSW5uZXIgPSBpcFJhbmdlO1xuICAgICAgICAgICAgdGhpcy5lbmNyeXB0aW9uU2NvcGUgPSBlbmNyeXB0aW9uU2NvcGU7XG4gICAgICAgICAgICB0aGlzLmlkZW50aWZpZXIgPSBpZGVudGlmaWVyO1xuICAgICAgICAgICAgdGhpcy5yZXNvdXJjZSA9IHJlc291cmNlO1xuICAgICAgICAgICAgdGhpcy5jYWNoZUNvbnRyb2wgPSBjYWNoZUNvbnRyb2w7XG4gICAgICAgICAgICB0aGlzLmNvbnRlbnREaXNwb3NpdGlvbiA9IGNvbnRlbnREaXNwb3NpdGlvbjtcbiAgICAgICAgICAgIHRoaXMuY29udGVudEVuY29kaW5nID0gY29udGVudEVuY29kaW5nO1xuICAgICAgICAgICAgdGhpcy5jb250ZW50TGFuZ3VhZ2UgPSBjb250ZW50TGFuZ3VhZ2U7XG4gICAgICAgICAgICB0aGlzLmNvbnRlbnRUeXBlID0gY29udGVudFR5cGU7XG4gICAgICAgICAgICBpZiAodXNlckRlbGVnYXRpb25LZXkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNpZ25lZE9pZCA9IHVzZXJEZWxlZ2F0aW9uS2V5LnNpZ25lZE9iamVjdElkO1xuICAgICAgICAgICAgICAgIHRoaXMuc2lnbmVkVGVuYW50SWQgPSB1c2VyRGVsZWdhdGlvbktleS5zaWduZWRUZW5hbnRJZDtcbiAgICAgICAgICAgICAgICB0aGlzLnNpZ25lZFN0YXJ0c09uID0gdXNlckRlbGVnYXRpb25LZXkuc2lnbmVkU3RhcnRzT247XG4gICAgICAgICAgICAgICAgdGhpcy5zaWduZWRFeHBpcmVzT24gPSB1c2VyRGVsZWdhdGlvbktleS5zaWduZWRFeHBpcmVzT247XG4gICAgICAgICAgICAgICAgdGhpcy5zaWduZWRTZXJ2aWNlID0gdXNlckRlbGVnYXRpb25LZXkuc2lnbmVkU2VydmljZTtcbiAgICAgICAgICAgICAgICB0aGlzLnNpZ25lZFZlcnNpb24gPSB1c2VyRGVsZWdhdGlvbktleS5zaWduZWRWZXJzaW9uO1xuICAgICAgICAgICAgICAgIHRoaXMucHJlYXV0aG9yaXplZEFnZW50T2JqZWN0SWQgPSBwcmVhdXRob3JpemVkQWdlbnRPYmplY3RJZDtcbiAgICAgICAgICAgICAgICB0aGlzLmNvcnJlbGF0aW9uSWQgPSBjb3JyZWxhdGlvbklkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEVuY29kZXMgYWxsIFNBUyBxdWVyeSBwYXJhbWV0ZXJzIGludG8gYSBzdHJpbmcgdGhhdCBjYW4gYmUgYXBwZW5kZWQgdG8gYSBVUkwuXG4gICAgICpcbiAgICAgKi9cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgY29uc3QgcGFyYW1zID0gW1xuICAgICAgICAgICAgXCJzdlwiLFxuICAgICAgICAgICAgXCJzc1wiLFxuICAgICAgICAgICAgXCJzcnRcIixcbiAgICAgICAgICAgIFwic3ByXCIsXG4gICAgICAgICAgICBcInN0XCIsXG4gICAgICAgICAgICBcInNlXCIsXG4gICAgICAgICAgICBcInNpcFwiLFxuICAgICAgICAgICAgXCJzaVwiLFxuICAgICAgICAgICAgXCJzZXNcIixcbiAgICAgICAgICAgIFwic2tvaWRcIiwgLy8gU2lnbmVkIG9iamVjdCBJRFxuICAgICAgICAgICAgXCJza3RpZFwiLCAvLyBTaWduZWQgdGVuYW50IElEXG4gICAgICAgICAgICBcInNrdFwiLCAvLyBTaWduZWQga2V5IHN0YXJ0IHRpbWVcbiAgICAgICAgICAgIFwic2tlXCIsIC8vIFNpZ25lZCBrZXkgZXhwaXJ5IHRpbWVcbiAgICAgICAgICAgIFwic2tzXCIsIC8vIFNpZ25lZCBrZXkgc2VydmljZVxuICAgICAgICAgICAgXCJza3ZcIiwgLy8gU2lnbmVkIGtleSB2ZXJzaW9uXG4gICAgICAgICAgICBcInNyXCIsXG4gICAgICAgICAgICBcInNwXCIsXG4gICAgICAgICAgICBcInNpZ1wiLFxuICAgICAgICAgICAgXCJyc2NjXCIsXG4gICAgICAgICAgICBcInJzY2RcIixcbiAgICAgICAgICAgIFwicnNjZVwiLFxuICAgICAgICAgICAgXCJyc2NsXCIsXG4gICAgICAgICAgICBcInJzY3RcIixcbiAgICAgICAgICAgIFwic2FvaWRcIixcbiAgICAgICAgICAgIFwic2NpZFwiLFxuICAgICAgICBdO1xuICAgICAgICBjb25zdCBxdWVyaWVzID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcGFyYW0gb2YgcGFyYW1zKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHBhcmFtKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcInN2XCI6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJ5QXBwZW5kUXVlcnlQYXJhbWV0ZXIocXVlcmllcywgcGFyYW0sIHRoaXMudmVyc2lvbik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzc1wiOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIHBhcmFtLCB0aGlzLnNlcnZpY2VzKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNydFwiOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIHBhcmFtLCB0aGlzLnJlc291cmNlVHlwZXMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwic3ByXCI6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJ5QXBwZW5kUXVlcnlQYXJhbWV0ZXIocXVlcmllcywgcGFyYW0sIHRoaXMucHJvdG9jb2wpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwic3RcIjpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cnlBcHBlbmRRdWVyeVBhcmFtZXRlcihxdWVyaWVzLCBwYXJhbSwgdGhpcy5zdGFydHNPbiA/IHRydW5jYXRlZElTTzgwNjFEYXRlKHRoaXMuc3RhcnRzT24sIGZhbHNlKSA6IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzZVwiOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIHBhcmFtLCB0aGlzLmV4cGlyZXNPbiA/IHRydW5jYXRlZElTTzgwNjFEYXRlKHRoaXMuZXhwaXJlc09uLCBmYWxzZSkgOiB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwic2lwXCI6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJ5QXBwZW5kUXVlcnlQYXJhbWV0ZXIocXVlcmllcywgcGFyYW0sIHRoaXMuaXBSYW5nZSA/IGlwUmFuZ2VUb1N0cmluZyh0aGlzLmlwUmFuZ2UpIDogdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNpXCI6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJ5QXBwZW5kUXVlcnlQYXJhbWV0ZXIocXVlcmllcywgcGFyYW0sIHRoaXMuaWRlbnRpZmllcik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzZXNcIjpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cnlBcHBlbmRRdWVyeVBhcmFtZXRlcihxdWVyaWVzLCBwYXJhbSwgdGhpcy5lbmNyeXB0aW9uU2NvcGUpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwic2tvaWRcIjogLy8gU2lnbmVkIG9iamVjdCBJRFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIHBhcmFtLCB0aGlzLnNpZ25lZE9pZCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJza3RpZFwiOiAvLyBTaWduZWQgdGVuYW50IElEXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJ5QXBwZW5kUXVlcnlQYXJhbWV0ZXIocXVlcmllcywgcGFyYW0sIHRoaXMuc2lnbmVkVGVuYW50SWQpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwic2t0XCI6IC8vIFNpZ25lZCBrZXkgc3RhcnQgdGltZVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIHBhcmFtLCB0aGlzLnNpZ25lZFN0YXJ0c09uID8gdHJ1bmNhdGVkSVNPODA2MURhdGUodGhpcy5zaWduZWRTdGFydHNPbiwgZmFsc2UpIDogdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNrZVwiOiAvLyBTaWduZWQga2V5IGV4cGlyeSB0aW1lXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJ5QXBwZW5kUXVlcnlQYXJhbWV0ZXIocXVlcmllcywgcGFyYW0sIHRoaXMuc2lnbmVkRXhwaXJlc09uID8gdHJ1bmNhdGVkSVNPODA2MURhdGUodGhpcy5zaWduZWRFeHBpcmVzT24sIGZhbHNlKSA6IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJza3NcIjogLy8gU2lnbmVkIGtleSBzZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJ5QXBwZW5kUXVlcnlQYXJhbWV0ZXIocXVlcmllcywgcGFyYW0sIHRoaXMuc2lnbmVkU2VydmljZSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJza3ZcIjogLy8gU2lnbmVkIGtleSB2ZXJzaW9uXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJ5QXBwZW5kUXVlcnlQYXJhbWV0ZXIocXVlcmllcywgcGFyYW0sIHRoaXMuc2lnbmVkVmVyc2lvbik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzclwiOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIHBhcmFtLCB0aGlzLnJlc291cmNlKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNwXCI6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJ5QXBwZW5kUXVlcnlQYXJhbWV0ZXIocXVlcmllcywgcGFyYW0sIHRoaXMucGVybWlzc2lvbnMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwic2lnXCI6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJ5QXBwZW5kUXVlcnlQYXJhbWV0ZXIocXVlcmllcywgcGFyYW0sIHRoaXMuc2lnbmF0dXJlKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInJzY2NcIjpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cnlBcHBlbmRRdWVyeVBhcmFtZXRlcihxdWVyaWVzLCBwYXJhbSwgdGhpcy5jYWNoZUNvbnRyb2wpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwicnNjZFwiOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIHBhcmFtLCB0aGlzLmNvbnRlbnREaXNwb3NpdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJyc2NlXCI6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJ5QXBwZW5kUXVlcnlQYXJhbWV0ZXIocXVlcmllcywgcGFyYW0sIHRoaXMuY29udGVudEVuY29kaW5nKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInJzY2xcIjpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cnlBcHBlbmRRdWVyeVBhcmFtZXRlcihxdWVyaWVzLCBwYXJhbSwgdGhpcy5jb250ZW50TGFuZ3VhZ2UpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwicnNjdFwiOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIHBhcmFtLCB0aGlzLmNvbnRlbnRUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNhb2lkXCI6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJ5QXBwZW5kUXVlcnlQYXJhbWV0ZXIocXVlcmllcywgcGFyYW0sIHRoaXMucHJlYXV0aG9yaXplZEFnZW50T2JqZWN0SWQpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwic2NpZFwiOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIHBhcmFtLCB0aGlzLmNvcnJlbGF0aW9uSWQpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcXVlcmllcy5qb2luKFwiJlwiKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQSBwcml2YXRlIGhlbHBlciBtZXRob2QgdXNlZCB0byBmaWx0ZXIgYW5kIGFwcGVuZCBxdWVyeSBrZXkvdmFsdWUgcGFpcnMgaW50byBhbiBhcnJheS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBxdWVyaWVzIC1cbiAgICAgKiBAcGFyYW0ga2V5IC1cbiAgICAgKiBAcGFyYW0gdmFsdWUgLVxuICAgICAqL1xuICAgIHRyeUFwcGVuZFF1ZXJ5UGFyYW1ldGVyKHF1ZXJpZXMsIGtleSwgdmFsdWUpIHtcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGtleSA9IGVuY29kZVVSSUNvbXBvbmVudChrZXkpO1xuICAgICAgICB2YWx1ZSA9IGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7XG4gICAgICAgIGlmIChrZXkubGVuZ3RoID4gMCAmJiB2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBxdWVyaWVzLnB1c2goYCR7a2V5fT0ke3ZhbHVlfWApO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbmZ1bmN0aW9uIGdlbmVyYXRlQmxvYlNBU1F1ZXJ5UGFyYW1ldGVycyhibG9iU0FTU2lnbmF0dXJlVmFsdWVzLCBzaGFyZWRLZXlDcmVkZW50aWFsT3JVc2VyRGVsZWdhdGlvbktleSwgYWNjb3VudE5hbWUpIHtcbiAgICByZXR1cm4gZ2VuZXJhdGVCbG9iU0FTUXVlcnlQYXJhbWV0ZXJzSW50ZXJuYWwoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcywgc2hhcmVkS2V5Q3JlZGVudGlhbE9yVXNlckRlbGVnYXRpb25LZXksIGFjY291bnROYW1lKS5zYXNRdWVyeVBhcmFtZXRlcnM7XG59XG5mdW5jdGlvbiBnZW5lcmF0ZUJsb2JTQVNRdWVyeVBhcmFtZXRlcnNJbnRlcm5hbChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLCBzaGFyZWRLZXlDcmVkZW50aWFsT3JVc2VyRGVsZWdhdGlvbktleSwgYWNjb3VudE5hbWUpIHtcbiAgICBjb25zdCB2ZXJzaW9uID0gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uID8gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uIDogU0VSVklDRV9WRVJTSU9OO1xuICAgIGNvbnN0IHNoYXJlZEtleUNyZWRlbnRpYWwgPSBzaGFyZWRLZXlDcmVkZW50aWFsT3JVc2VyRGVsZWdhdGlvbktleSBpbnN0YW5jZW9mIFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsXG4gICAgICAgID8gc2hhcmVkS2V5Q3JlZGVudGlhbE9yVXNlckRlbGVnYXRpb25LZXlcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgbGV0IHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbDtcbiAgICBpZiAoc2hhcmVkS2V5Q3JlZGVudGlhbCA9PT0gdW5kZWZpbmVkICYmIGFjY291bnROYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsID0gbmV3IFVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbChhY2NvdW50TmFtZSwgc2hhcmVkS2V5Q3JlZGVudGlhbE9yVXNlckRlbGVnYXRpb25LZXkpO1xuICAgIH1cbiAgICBpZiAoc2hhcmVkS2V5Q3JlZGVudGlhbCA9PT0gdW5kZWZpbmVkICYmIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IFR5cGVFcnJvcihcIkludmFsaWQgc2hhcmVkS2V5Q3JlZGVudGlhbCwgdXNlckRlbGVnYXRpb25LZXkgb3IgYWNjb3VudE5hbWUuXCIpO1xuICAgIH1cbiAgICAvLyBWZXJzaW9uIDIwMjAtMTItMDYgYWRkcyBzdXBwb3J0IGZvciBlbmNyeXB0aW9uc2NvcGUgaW4gU0FTLlxuICAgIGlmICh2ZXJzaW9uID49IFwiMjAyMC0xMi0wNlwiKSB7XG4gICAgICAgIGlmIChzaGFyZWRLZXlDcmVkZW50aWFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBnZW5lcmF0ZUJsb2JTQVNRdWVyeVBhcmFtZXRlcnMyMDIwMTIwNihibG9iU0FTU2lnbmF0dXJlVmFsdWVzLCBzaGFyZWRLZXlDcmVkZW50aWFsKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBnZW5lcmF0ZUJsb2JTQVNRdWVyeVBhcmFtZXRlcnNVREsyMDIwMTIwNihibG9iU0FTU2lnbmF0dXJlVmFsdWVzLCB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFZlcnNpb24gMjAxOS0xMi0xMiBhZGRzIHN1cHBvcnQgZm9yIHRoZSBibG9iIHRhZ3MgcGVybWlzc2lvbi5cbiAgICAvLyBWZXJzaW9uIDIwMTgtMTEtMDkgYWRkcyBzdXBwb3J0IGZvciB0aGUgc2lnbmVkIHJlc291cmNlIGFuZCBzaWduZWQgYmxvYiBzbmFwc2hvdCB0aW1lIGZpZWxkcy5cbiAgICAvLyBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvY29uc3RydWN0aW5nLWEtc2VydmljZS1zYXMjY29uc3RydWN0aW5nLXRoZS1zaWduYXR1cmUtc3RyaW5nXG4gICAgaWYgKHZlcnNpb24gPj0gXCIyMDE4LTExLTA5XCIpIHtcbiAgICAgICAgaWYgKHNoYXJlZEtleUNyZWRlbnRpYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRlQmxvYlNBU1F1ZXJ5UGFyYW1ldGVyczIwMTgxMTA5KGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMsIHNoYXJlZEtleUNyZWRlbnRpYWwpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gVmVyc2lvbiAyMDIwLTAyLTEwIGRlbGVnYXRpb24gU0FTIHNpZ25hdHVyZSBjb25zdHJ1Y3Rpb24gaW5jbHVkZXMgcHJlYXV0aG9yaXplZEFnZW50T2JqZWN0SWQsIGFnZW50T2JqZWN0SWQsIGNvcnJlbGF0aW9uSWQuXG4gICAgICAgICAgICBpZiAodmVyc2lvbiA+PSBcIjIwMjAtMDItMTBcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiBnZW5lcmF0ZUJsb2JTQVNRdWVyeVBhcmFtZXRlcnNVREsyMDIwMDIxMChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLCB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRlQmxvYlNBU1F1ZXJ5UGFyYW1ldGVyc1VESzIwMTgxMTA5KGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMsIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHZlcnNpb24gPj0gXCIyMDE1LTA0LTA1XCIpIHtcbiAgICAgICAgaWYgKHNoYXJlZEtleUNyZWRlbnRpYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRlQmxvYlNBU1F1ZXJ5UGFyYW1ldGVyczIwMTUwNDA1KGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMsIHNoYXJlZEtleUNyZWRlbnRpYWwpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCIndmVyc2lvbicgbXVzdCBiZSA+PSAnMjAxOC0xMS0wOScgd2hlbiBnZW5lcmF0aW5nIHVzZXIgZGVsZWdhdGlvbiBTQVMgdXNpbmcgdXNlciBkZWxlZ2F0aW9uIGtleS5cIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCIndmVyc2lvbicgbXVzdCBiZSA+PSAnMjAxNS0wNC0wNScuXCIpO1xufVxuLyoqXG4gKiBPTkxZIEFWQUlMQUJMRSBJTiBOT0RFLkpTIFJVTlRJTUUuXG4gKiBJTVBMRU1FTlRBVElPTiBGT1IgQVBJIFZFUlNJT04gRlJPTSAyMDE1LTA0LTA1IEFORCBCRUZPUkUgMjAxOC0xMS0wOS5cbiAqXG4gKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIFNBU1F1ZXJ5UGFyYW1ldGVycy5cbiAqXG4gKiBPbmx5IGFjY2VwdHMgcmVxdWlyZWQgc2V0dGluZ3MgbmVlZGVkIHRvIGNyZWF0ZSBhIFNBUy4gRm9yIG9wdGlvbmFsIHNldHRpbmdzIHBsZWFzZVxuICogc2V0IGNvcnJlc3BvbmRpbmcgcHJvcGVydGllcyBkaXJlY3RseSwgc3VjaCBhcyBwZXJtaXNzaW9ucywgc3RhcnRzT24gYW5kIGlkZW50aWZpZXIuXG4gKlxuICogV0FSTklORzogV2hlbiBpZGVudGlmaWVyIGlzIG5vdCBwcm92aWRlZCwgcGVybWlzc2lvbnMgYW5kIGV4cGlyZXNPbiBhcmUgcmVxdWlyZWQuXG4gKiBZb3UgTVVTVCBhc3NpZ24gdmFsdWUgdG8gaWRlbnRpZmllciBvciBleHBpcmVzT24gJiBwZXJtaXNzaW9ucyBtYW51YWxseSBpZiB5b3UgaW5pdGlhbCB3aXRoXG4gKiB0aGlzIGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBibG9iU0FTU2lnbmF0dXJlVmFsdWVzIC1cbiAqIEBwYXJhbSBzaGFyZWRLZXlDcmVkZW50aWFsIC1cbiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGVCbG9iU0FTUXVlcnlQYXJhbWV0ZXJzMjAxNTA0MDUoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcywgc2hhcmVkS2V5Q3JlZGVudGlhbCkge1xuICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMgPSBTQVNTaWduYXR1cmVWYWx1ZXNTYW5pdHlDaGVja0FuZEF1dG9maWxsKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMpO1xuICAgIGlmICghYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5pZGVudGlmaWVyICYmXG4gICAgICAgICEoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucyAmJiBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmV4cGlyZXNPbikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJNdXN0IHByb3ZpZGUgJ3Blcm1pc3Npb25zJyBhbmQgJ2V4cGlyZXNPbicgZm9yIEJsb2IgU0FTIGdlbmVyYXRpb24gd2hlbiAnaWRlbnRpZmllcicgaXMgbm90IHByb3ZpZGVkLlwiKTtcbiAgICB9XG4gICAgbGV0IHJlc291cmNlID0gXCJjXCI7XG4gICAgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuYmxvYk5hbWUpIHtcbiAgICAgICAgcmVzb3VyY2UgPSBcImJcIjtcbiAgICB9XG4gICAgLy8gQ2FsbGluZyBwYXJzZSBhbmQgdG9TdHJpbmcgZ3VhcmFudGVlcyB0aGUgcHJvcGVyIG9yZGVyaW5nIGFuZCB0aHJvd3Mgb24gaW52YWxpZCBjaGFyYWN0ZXJzLlxuICAgIGxldCB2ZXJpZmllZFBlcm1pc3Npb25zO1xuICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zKSB7XG4gICAgICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmJsb2JOYW1lKSB7XG4gICAgICAgICAgICB2ZXJpZmllZFBlcm1pc3Npb25zID0gQmxvYlNBU1Blcm1pc3Npb25zLnBhcnNlKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMudG9TdHJpbmcoKSkudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZlcmlmaWVkUGVybWlzc2lvbnMgPSBDb250YWluZXJTQVNQZXJtaXNzaW9ucy5wYXJzZShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zLnRvU3RyaW5nKCkpLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gU2lnbmF0dXJlIGlzIGdlbmVyYXRlZCBvbiB0aGUgdW4tdXJsLWVuY29kZWQgdmFsdWVzLlxuICAgIGNvbnN0IHN0cmluZ1RvU2lnbiA9IFtcbiAgICAgICAgdmVyaWZpZWRQZXJtaXNzaW9ucyA/IHZlcmlmaWVkUGVybWlzc2lvbnMgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnN0YXJ0c09uXG4gICAgICAgICAgICA/IHRydW5jYXRlZElTTzgwNjFEYXRlKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuc3RhcnRzT24sIGZhbHNlKVxuICAgICAgICAgICAgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmV4cGlyZXNPblxuICAgICAgICAgICAgPyB0cnVuY2F0ZWRJU084MDYxRGF0ZShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmV4cGlyZXNPbiwgZmFsc2UpXG4gICAgICAgICAgICA6IFwiXCIsXG4gICAgICAgIGdldENhbm9uaWNhbE5hbWUoc2hhcmVkS2V5Q3JlZGVudGlhbC5hY2NvdW50TmFtZSwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250YWluZXJOYW1lLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmJsb2JOYW1lKSxcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5pZGVudGlmaWVyLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmlwUmFuZ2UgPyBpcFJhbmdlVG9TdHJpbmcoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5pcFJhbmdlKSA6IFwiXCIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucHJvdG9jb2wgPyBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnByb3RvY29sIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNhY2hlQ29udHJvbCA/IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY2FjaGVDb250cm9sIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50RGlzcG9zaXRpb24gPyBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnREaXNwb3NpdGlvbiA6IFwiXCIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudEVuY29kaW5nID8gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50RW5jb2RpbmcgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRMYW5ndWFnZSA/IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudExhbmd1YWdlIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50VHlwZSA/IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudFR5cGUgOiBcIlwiLFxuICAgIF0uam9pbihcIlxcblwiKTtcbiAgICBjb25zdCBzaWduYXR1cmUgPSBzaGFyZWRLZXlDcmVkZW50aWFsLmNvbXB1dGVITUFDU0hBMjU2KHN0cmluZ1RvU2lnbik7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc2FzUXVlcnlQYXJhbWV0ZXJzOiBuZXcgU0FTUXVlcnlQYXJhbWV0ZXJzKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMudmVyc2lvbiwgc2lnbmF0dXJlLCB2ZXJpZmllZFBlcm1pc3Npb25zLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wcm90b2NvbCwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5zdGFydHNPbiwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5leHBpcmVzT24sIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuaXBSYW5nZSwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5pZGVudGlmaWVyLCByZXNvdXJjZSwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jYWNoZUNvbnRyb2wsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudERpc3Bvc2l0aW9uLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRFbmNvZGluZywgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50TGFuZ3VhZ2UsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudFR5cGUpLFxuICAgICAgICBzdHJpbmdUb1NpZ246IHN0cmluZ1RvU2lnbixcbiAgICB9O1xufVxuLyoqXG4gKiBPTkxZIEFWQUlMQUJMRSBJTiBOT0RFLkpTIFJVTlRJTUUuXG4gKiBJTVBMRU1FTlRBVElPTiBGT1IgQVBJIFZFUlNJT04gRlJPTSAyMDE4LTExLTA5LlxuICpcbiAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgU0FTUXVlcnlQYXJhbWV0ZXJzLlxuICpcbiAqIE9ubHkgYWNjZXB0cyByZXF1aXJlZCBzZXR0aW5ncyBuZWVkZWQgdG8gY3JlYXRlIGEgU0FTLiBGb3Igb3B0aW9uYWwgc2V0dGluZ3MgcGxlYXNlXG4gKiBzZXQgY29ycmVzcG9uZGluZyBwcm9wZXJ0aWVzIGRpcmVjdGx5LCBzdWNoIGFzIHBlcm1pc3Npb25zLCBzdGFydHNPbiBhbmQgaWRlbnRpZmllci5cbiAqXG4gKiBXQVJOSU5HOiBXaGVuIGlkZW50aWZpZXIgaXMgbm90IHByb3ZpZGVkLCBwZXJtaXNzaW9ucyBhbmQgZXhwaXJlc09uIGFyZSByZXF1aXJlZC5cbiAqIFlvdSBNVVNUIGFzc2lnbiB2YWx1ZSB0byBpZGVudGlmaWVyIG9yIGV4cGlyZXNPbiAmIHBlcm1pc3Npb25zIG1hbnVhbGx5IGlmIHlvdSBpbml0aWFsIHdpdGhcbiAqIHRoaXMgY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMgLVxuICogQHBhcmFtIHNoYXJlZEtleUNyZWRlbnRpYWwgLVxuICovXG5mdW5jdGlvbiBnZW5lcmF0ZUJsb2JTQVNRdWVyeVBhcmFtZXRlcnMyMDE4MTEwOShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLCBzaGFyZWRLZXlDcmVkZW50aWFsKSB7XG4gICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcyA9IFNBU1NpZ25hdHVyZVZhbHVlc1Nhbml0eUNoZWNrQW5kQXV0b2ZpbGwoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcyk7XG4gICAgaWYgKCFibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmlkZW50aWZpZXIgJiZcbiAgICAgICAgIShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zICYmIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuZXhwaXJlc09uKSkge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIk11c3QgcHJvdmlkZSAncGVybWlzc2lvbnMnIGFuZCAnZXhwaXJlc09uJyBmb3IgQmxvYiBTQVMgZ2VuZXJhdGlvbiB3aGVuICdpZGVudGlmaWVyJyBpcyBub3QgcHJvdmlkZWQuXCIpO1xuICAgIH1cbiAgICBsZXQgcmVzb3VyY2UgPSBcImNcIjtcbiAgICBsZXQgdGltZXN0YW1wID0gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5zbmFwc2hvdFRpbWU7XG4gICAgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuYmxvYk5hbWUpIHtcbiAgICAgICAgcmVzb3VyY2UgPSBcImJcIjtcbiAgICAgICAgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuc25hcHNob3RUaW1lKSB7XG4gICAgICAgICAgICByZXNvdXJjZSA9IFwiYnNcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnZlcnNpb25JZCkge1xuICAgICAgICAgICAgcmVzb3VyY2UgPSBcImJ2XCI7XG4gICAgICAgICAgICB0aW1lc3RhbXAgPSBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnZlcnNpb25JZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBDYWxsaW5nIHBhcnNlIGFuZCB0b1N0cmluZyBndWFyYW50ZWVzIHRoZSBwcm9wZXIgb3JkZXJpbmcgYW5kIHRocm93cyBvbiBpbnZhbGlkIGNoYXJhY3RlcnMuXG4gICAgbGV0IHZlcmlmaWVkUGVybWlzc2lvbnM7XG4gICAgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMpIHtcbiAgICAgICAgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuYmxvYk5hbWUpIHtcbiAgICAgICAgICAgIHZlcmlmaWVkUGVybWlzc2lvbnMgPSBCbG9iU0FTUGVybWlzc2lvbnMucGFyc2UoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucy50b1N0cmluZygpKS50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmVyaWZpZWRQZXJtaXNzaW9ucyA9IENvbnRhaW5lclNBU1Blcm1pc3Npb25zLnBhcnNlKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMudG9TdHJpbmcoKSkudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBTaWduYXR1cmUgaXMgZ2VuZXJhdGVkIG9uIHRoZSB1bi11cmwtZW5jb2RlZCB2YWx1ZXMuXG4gICAgY29uc3Qgc3RyaW5nVG9TaWduID0gW1xuICAgICAgICB2ZXJpZmllZFBlcm1pc3Npb25zID8gdmVyaWZpZWRQZXJtaXNzaW9ucyA6IFwiXCIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuc3RhcnRzT25cbiAgICAgICAgICAgID8gdHJ1bmNhdGVkSVNPODA2MURhdGUoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5zdGFydHNPbiwgZmFsc2UpXG4gICAgICAgICAgICA6IFwiXCIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuZXhwaXJlc09uXG4gICAgICAgICAgICA/IHRydW5jYXRlZElTTzgwNjFEYXRlKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuZXhwaXJlc09uLCBmYWxzZSlcbiAgICAgICAgICAgIDogXCJcIixcbiAgICAgICAgZ2V0Q2Fub25pY2FsTmFtZShzaGFyZWRLZXlDcmVkZW50aWFsLmFjY291bnROYW1lLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRhaW5lck5hbWUsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuYmxvYk5hbWUpLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmlkZW50aWZpZXIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuaXBSYW5nZSA/IGlwUmFuZ2VUb1N0cmluZyhibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmlwUmFuZ2UpIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wcm90b2NvbCA/IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucHJvdG9jb2wgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnZlcnNpb24sXG4gICAgICAgIHJlc291cmNlLFxuICAgICAgICB0aW1lc3RhbXAsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY2FjaGVDb250cm9sID8gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jYWNoZUNvbnRyb2wgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnREaXNwb3NpdGlvbiA/IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudERpc3Bvc2l0aW9uIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50RW5jb2RpbmcgPyBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRFbmNvZGluZyA6IFwiXCIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudExhbmd1YWdlID8gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50TGFuZ3VhZ2UgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRUeXBlID8gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50VHlwZSA6IFwiXCIsXG4gICAgXS5qb2luKFwiXFxuXCIpO1xuICAgIGNvbnN0IHNpZ25hdHVyZSA9IHNoYXJlZEtleUNyZWRlbnRpYWwuY29tcHV0ZUhNQUNTSEEyNTYoc3RyaW5nVG9TaWduKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBzYXNRdWVyeVBhcmFtZXRlcnM6IG5ldyBTQVNRdWVyeVBhcmFtZXRlcnMoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uLCBzaWduYXR1cmUsIHZlcmlmaWVkUGVybWlzc2lvbnMsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnByb3RvY29sLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnN0YXJ0c09uLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmV4cGlyZXNPbiwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5pcFJhbmdlLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmlkZW50aWZpZXIsIHJlc291cmNlLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNhY2hlQ29udHJvbCwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50RGlzcG9zaXRpb24sIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudEVuY29kaW5nLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRMYW5ndWFnZSwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50VHlwZSksXG4gICAgICAgIHN0cmluZ1RvU2lnbjogc3RyaW5nVG9TaWduLFxuICAgIH07XG59XG4vKipcbiAqIE9OTFkgQVZBSUxBQkxFIElOIE5PREUuSlMgUlVOVElNRS5cbiAqIElNUExFTUVOVEFUSU9OIEZPUiBBUEkgVkVSU0lPTiBGUk9NIDIwMjAtMTItMDYuXG4gKlxuICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBTQVNRdWVyeVBhcmFtZXRlcnMuXG4gKlxuICogT25seSBhY2NlcHRzIHJlcXVpcmVkIHNldHRpbmdzIG5lZWRlZCB0byBjcmVhdGUgYSBTQVMuIEZvciBvcHRpb25hbCBzZXR0aW5ncyBwbGVhc2VcbiAqIHNldCBjb3JyZXNwb25kaW5nIHByb3BlcnRpZXMgZGlyZWN0bHksIHN1Y2ggYXMgcGVybWlzc2lvbnMsIHN0YXJ0c09uIGFuZCBpZGVudGlmaWVyLlxuICpcbiAqIFdBUk5JTkc6IFdoZW4gaWRlbnRpZmllciBpcyBub3QgcHJvdmlkZWQsIHBlcm1pc3Npb25zIGFuZCBleHBpcmVzT24gYXJlIHJlcXVpcmVkLlxuICogWW91IE1VU1QgYXNzaWduIHZhbHVlIHRvIGlkZW50aWZpZXIgb3IgZXhwaXJlc09uICYgcGVybWlzc2lvbnMgbWFudWFsbHkgaWYgeW91IGluaXRpYWwgd2l0aFxuICogdGhpcyBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcyAtXG4gKiBAcGFyYW0gc2hhcmVkS2V5Q3JlZGVudGlhbCAtXG4gKi9cbmZ1bmN0aW9uIGdlbmVyYXRlQmxvYlNBU1F1ZXJ5UGFyYW1ldGVyczIwMjAxMjA2KGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMsIHNoYXJlZEtleUNyZWRlbnRpYWwpIHtcbiAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzID0gU0FTU2lnbmF0dXJlVmFsdWVzU2FuaXR5Q2hlY2tBbmRBdXRvZmlsbChibG9iU0FTU2lnbmF0dXJlVmFsdWVzKTtcbiAgICBpZiAoIWJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuaWRlbnRpZmllciAmJlxuICAgICAgICAhKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMgJiYgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5leHBpcmVzT24pKSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiTXVzdCBwcm92aWRlICdwZXJtaXNzaW9ucycgYW5kICdleHBpcmVzT24nIGZvciBCbG9iIFNBUyBnZW5lcmF0aW9uIHdoZW4gJ2lkZW50aWZpZXInIGlzIG5vdCBwcm92aWRlZC5cIik7XG4gICAgfVxuICAgIGxldCByZXNvdXJjZSA9IFwiY1wiO1xuICAgIGxldCB0aW1lc3RhbXAgPSBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnNuYXBzaG90VGltZTtcbiAgICBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5ibG9iTmFtZSkge1xuICAgICAgICByZXNvdXJjZSA9IFwiYlwiO1xuICAgICAgICBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5zbmFwc2hvdFRpbWUpIHtcbiAgICAgICAgICAgIHJlc291cmNlID0gXCJic1wiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMudmVyc2lvbklkKSB7XG4gICAgICAgICAgICByZXNvdXJjZSA9IFwiYnZcIjtcbiAgICAgICAgICAgIHRpbWVzdGFtcCA9IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMudmVyc2lvbklkO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIENhbGxpbmcgcGFyc2UgYW5kIHRvU3RyaW5nIGd1YXJhbnRlZXMgdGhlIHByb3BlciBvcmRlcmluZyBhbmQgdGhyb3dzIG9uIGludmFsaWQgY2hhcmFjdGVycy5cbiAgICBsZXQgdmVyaWZpZWRQZXJtaXNzaW9ucztcbiAgICBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucykge1xuICAgICAgICBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5ibG9iTmFtZSkge1xuICAgICAgICAgICAgdmVyaWZpZWRQZXJtaXNzaW9ucyA9IEJsb2JTQVNQZXJtaXNzaW9ucy5wYXJzZShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zLnRvU3RyaW5nKCkpLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2ZXJpZmllZFBlcm1pc3Npb25zID0gQ29udGFpbmVyU0FTUGVybWlzc2lvbnMucGFyc2UoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucy50b1N0cmluZygpKS50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFNpZ25hdHVyZSBpcyBnZW5lcmF0ZWQgb24gdGhlIHVuLXVybC1lbmNvZGVkIHZhbHVlcy5cbiAgICBjb25zdCBzdHJpbmdUb1NpZ24gPSBbXG4gICAgICAgIHZlcmlmaWVkUGVybWlzc2lvbnMgPyB2ZXJpZmllZFBlcm1pc3Npb25zIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5zdGFydHNPblxuICAgICAgICAgICAgPyB0cnVuY2F0ZWRJU084MDYxRGF0ZShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnN0YXJ0c09uLCBmYWxzZSlcbiAgICAgICAgICAgIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5leHBpcmVzT25cbiAgICAgICAgICAgID8gdHJ1bmNhdGVkSVNPODA2MURhdGUoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5leHBpcmVzT24sIGZhbHNlKVxuICAgICAgICAgICAgOiBcIlwiLFxuICAgICAgICBnZXRDYW5vbmljYWxOYW1lKHNoYXJlZEtleUNyZWRlbnRpYWwuYWNjb3VudE5hbWUsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGFpbmVyTmFtZSwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5ibG9iTmFtZSksXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuaWRlbnRpZmllcixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5pcFJhbmdlID8gaXBSYW5nZVRvU3RyaW5nKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuaXBSYW5nZSkgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnByb3RvY29sID8gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wcm90b2NvbCA6IFwiXCIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMudmVyc2lvbixcbiAgICAgICAgcmVzb3VyY2UsXG4gICAgICAgIHRpbWVzdGFtcCxcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5lbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY2FjaGVDb250cm9sID8gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jYWNoZUNvbnRyb2wgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnREaXNwb3NpdGlvbiA/IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudERpc3Bvc2l0aW9uIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50RW5jb2RpbmcgPyBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRFbmNvZGluZyA6IFwiXCIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudExhbmd1YWdlID8gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50TGFuZ3VhZ2UgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRUeXBlID8gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50VHlwZSA6IFwiXCIsXG4gICAgXS5qb2luKFwiXFxuXCIpO1xuICAgIGNvbnN0IHNpZ25hdHVyZSA9IHNoYXJlZEtleUNyZWRlbnRpYWwuY29tcHV0ZUhNQUNTSEEyNTYoc3RyaW5nVG9TaWduKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBzYXNRdWVyeVBhcmFtZXRlcnM6IG5ldyBTQVNRdWVyeVBhcmFtZXRlcnMoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uLCBzaWduYXR1cmUsIHZlcmlmaWVkUGVybWlzc2lvbnMsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnByb3RvY29sLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnN0YXJ0c09uLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmV4cGlyZXNPbiwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5pcFJhbmdlLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmlkZW50aWZpZXIsIHJlc291cmNlLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNhY2hlQ29udHJvbCwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50RGlzcG9zaXRpb24sIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudEVuY29kaW5nLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRMYW5ndWFnZSwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50VHlwZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5lbmNyeXB0aW9uU2NvcGUpLFxuICAgICAgICBzdHJpbmdUb1NpZ246IHN0cmluZ1RvU2lnbixcbiAgICB9O1xufVxuLyoqXG4gKiBPTkxZIEFWQUlMQUJMRSBJTiBOT0RFLkpTIFJVTlRJTUUuXG4gKiBJTVBMRU1FTlRBVElPTiBGT1IgQVBJIFZFUlNJT04gRlJPTSAyMDE4LTExLTA5LlxuICpcbiAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgU0FTUXVlcnlQYXJhbWV0ZXJzLlxuICpcbiAqIE9ubHkgYWNjZXB0cyByZXF1aXJlZCBzZXR0aW5ncyBuZWVkZWQgdG8gY3JlYXRlIGEgU0FTLiBGb3Igb3B0aW9uYWwgc2V0dGluZ3MgcGxlYXNlXG4gKiBzZXQgY29ycmVzcG9uZGluZyBwcm9wZXJ0aWVzIGRpcmVjdGx5LCBzdWNoIGFzIHBlcm1pc3Npb25zLCBzdGFydHNPbi5cbiAqXG4gKiBXQVJOSU5HOiBpZGVudGlmaWVyIHdpbGwgYmUgaWdub3JlZCwgcGVybWlzc2lvbnMgYW5kIGV4cGlyZXNPbiBhcmUgcmVxdWlyZWQuXG4gKlxuICogQHBhcmFtIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMgLVxuICogQHBhcmFtIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbCAtXG4gKi9cbmZ1bmN0aW9uIGdlbmVyYXRlQmxvYlNBU1F1ZXJ5UGFyYW1ldGVyc1VESzIwMTgxMTA5KGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMsIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbCkge1xuICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMgPSBTQVNTaWduYXR1cmVWYWx1ZXNTYW5pdHlDaGVja0FuZEF1dG9maWxsKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMpO1xuICAgIC8vIFN0b3JlZCBhY2Nlc3MgcG9saWNpZXMgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIGEgdXNlciBkZWxlZ2F0aW9uIFNBUy5cbiAgICBpZiAoIWJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMgfHwgIWJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuZXhwaXJlc09uKSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiTXVzdCBwcm92aWRlICdwZXJtaXNzaW9ucycgYW5kICdleHBpcmVzT24nIGZvciBCbG9iIFNBUyBnZW5lcmF0aW9uIHdoZW4gZ2VuZXJhdGluZyB1c2VyIGRlbGVnYXRpb24gU0FTLlwiKTtcbiAgICB9XG4gICAgbGV0IHJlc291cmNlID0gXCJjXCI7XG4gICAgbGV0IHRpbWVzdGFtcCA9IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuc25hcHNob3RUaW1lO1xuICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmJsb2JOYW1lKSB7XG4gICAgICAgIHJlc291cmNlID0gXCJiXCI7XG4gICAgICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnNuYXBzaG90VGltZSkge1xuICAgICAgICAgICAgcmVzb3VyY2UgPSBcImJzXCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uSWQpIHtcbiAgICAgICAgICAgIHJlc291cmNlID0gXCJidlwiO1xuICAgICAgICAgICAgdGltZXN0YW1wID0gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uSWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gQ2FsbGluZyBwYXJzZSBhbmQgdG9TdHJpbmcgZ3VhcmFudGVlcyB0aGUgcHJvcGVyIG9yZGVyaW5nIGFuZCB0aHJvd3Mgb24gaW52YWxpZCBjaGFyYWN0ZXJzLlxuICAgIGxldCB2ZXJpZmllZFBlcm1pc3Npb25zO1xuICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zKSB7XG4gICAgICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmJsb2JOYW1lKSB7XG4gICAgICAgICAgICB2ZXJpZmllZFBlcm1pc3Npb25zID0gQmxvYlNBU1Blcm1pc3Npb25zLnBhcnNlKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMudG9TdHJpbmcoKSkudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZlcmlmaWVkUGVybWlzc2lvbnMgPSBDb250YWluZXJTQVNQZXJtaXNzaW9ucy5wYXJzZShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zLnRvU3RyaW5nKCkpLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gU2lnbmF0dXJlIGlzIGdlbmVyYXRlZCBvbiB0aGUgdW4tdXJsLWVuY29kZWQgdmFsdWVzLlxuICAgIGNvbnN0IHN0cmluZ1RvU2lnbiA9IFtcbiAgICAgICAgdmVyaWZpZWRQZXJtaXNzaW9ucyA/IHZlcmlmaWVkUGVybWlzc2lvbnMgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnN0YXJ0c09uXG4gICAgICAgICAgICA/IHRydW5jYXRlZElTTzgwNjFEYXRlKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuc3RhcnRzT24sIGZhbHNlKVxuICAgICAgICAgICAgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmV4cGlyZXNPblxuICAgICAgICAgICAgPyB0cnVuY2F0ZWRJU084MDYxRGF0ZShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmV4cGlyZXNPbiwgZmFsc2UpXG4gICAgICAgICAgICA6IFwiXCIsXG4gICAgICAgIGdldENhbm9uaWNhbE5hbWUodXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsLmFjY291bnROYW1lLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRhaW5lck5hbWUsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuYmxvYk5hbWUpLFxuICAgICAgICB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwudXNlckRlbGVnYXRpb25LZXkuc2lnbmVkT2JqZWN0SWQsXG4gICAgICAgIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC51c2VyRGVsZWdhdGlvbktleS5zaWduZWRUZW5hbnRJZCxcbiAgICAgICAgdXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsLnVzZXJEZWxlZ2F0aW9uS2V5LnNpZ25lZFN0YXJ0c09uXG4gICAgICAgICAgICA/IHRydW5jYXRlZElTTzgwNjFEYXRlKHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC51c2VyRGVsZWdhdGlvbktleS5zaWduZWRTdGFydHNPbiwgZmFsc2UpXG4gICAgICAgICAgICA6IFwiXCIsXG4gICAgICAgIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC51c2VyRGVsZWdhdGlvbktleS5zaWduZWRFeHBpcmVzT25cbiAgICAgICAgICAgID8gdHJ1bmNhdGVkSVNPODA2MURhdGUodXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsLnVzZXJEZWxlZ2F0aW9uS2V5LnNpZ25lZEV4cGlyZXNPbiwgZmFsc2UpXG4gICAgICAgICAgICA6IFwiXCIsXG4gICAgICAgIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC51c2VyRGVsZWdhdGlvbktleS5zaWduZWRTZXJ2aWNlLFxuICAgICAgICB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwudXNlckRlbGVnYXRpb25LZXkuc2lnbmVkVmVyc2lvbixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5pcFJhbmdlID8gaXBSYW5nZVRvU3RyaW5nKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuaXBSYW5nZSkgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnByb3RvY29sID8gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wcm90b2NvbCA6IFwiXCIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMudmVyc2lvbixcbiAgICAgICAgcmVzb3VyY2UsXG4gICAgICAgIHRpbWVzdGFtcCxcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jYWNoZUNvbnRyb2wsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudERpc3Bvc2l0aW9uLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRFbmNvZGluZyxcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50TGFuZ3VhZ2UsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudFR5cGUsXG4gICAgXS5qb2luKFwiXFxuXCIpO1xuICAgIGNvbnN0IHNpZ25hdHVyZSA9IHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC5jb21wdXRlSE1BQ1NIQTI1NihzdHJpbmdUb1NpZ24pO1xuICAgIHJldHVybiB7XG4gICAgICAgIHNhc1F1ZXJ5UGFyYW1ldGVyczogbmV3IFNBU1F1ZXJ5UGFyYW1ldGVycyhibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnZlcnNpb24sIHNpZ25hdHVyZSwgdmVyaWZpZWRQZXJtaXNzaW9ucywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucHJvdG9jb2wsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuc3RhcnRzT24sIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuZXhwaXJlc09uLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmlwUmFuZ2UsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuaWRlbnRpZmllciwgcmVzb3VyY2UsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY2FjaGVDb250cm9sLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnREaXNwb3NpdGlvbiwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50RW5jb2RpbmcsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudExhbmd1YWdlLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRUeXBlLCB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwudXNlckRlbGVnYXRpb25LZXkpLFxuICAgICAgICBzdHJpbmdUb1NpZ246IHN0cmluZ1RvU2lnbixcbiAgICB9O1xufVxuLyoqXG4gKiBPTkxZIEFWQUlMQUJMRSBJTiBOT0RFLkpTIFJVTlRJTUUuXG4gKiBJTVBMRU1FTlRBVElPTiBGT1IgQVBJIFZFUlNJT04gRlJPTSAyMDIwLTAyLTEwLlxuICpcbiAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgU0FTUXVlcnlQYXJhbWV0ZXJzLlxuICpcbiAqIE9ubHkgYWNjZXB0cyByZXF1aXJlZCBzZXR0aW5ncyBuZWVkZWQgdG8gY3JlYXRlIGEgU0FTLiBGb3Igb3B0aW9uYWwgc2V0dGluZ3MgcGxlYXNlXG4gKiBzZXQgY29ycmVzcG9uZGluZyBwcm9wZXJ0aWVzIGRpcmVjdGx5LCBzdWNoIGFzIHBlcm1pc3Npb25zLCBzdGFydHNPbi5cbiAqXG4gKiBXQVJOSU5HOiBpZGVudGlmaWVyIHdpbGwgYmUgaWdub3JlZCwgcGVybWlzc2lvbnMgYW5kIGV4cGlyZXNPbiBhcmUgcmVxdWlyZWQuXG4gKlxuICogQHBhcmFtIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMgLVxuICogQHBhcmFtIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbCAtXG4gKi9cbmZ1bmN0aW9uIGdlbmVyYXRlQmxvYlNBU1F1ZXJ5UGFyYW1ldGVyc1VESzIwMjAwMjEwKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMsIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbCkge1xuICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMgPSBTQVNTaWduYXR1cmVWYWx1ZXNTYW5pdHlDaGVja0FuZEF1dG9maWxsKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMpO1xuICAgIC8vIFN0b3JlZCBhY2Nlc3MgcG9saWNpZXMgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIGEgdXNlciBkZWxlZ2F0aW9uIFNBUy5cbiAgICBpZiAoIWJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMgfHwgIWJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuZXhwaXJlc09uKSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiTXVzdCBwcm92aWRlICdwZXJtaXNzaW9ucycgYW5kICdleHBpcmVzT24nIGZvciBCbG9iIFNBUyBnZW5lcmF0aW9uIHdoZW4gZ2VuZXJhdGluZyB1c2VyIGRlbGVnYXRpb24gU0FTLlwiKTtcbiAgICB9XG4gICAgbGV0IHJlc291cmNlID0gXCJjXCI7XG4gICAgbGV0IHRpbWVzdGFtcCA9IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuc25hcHNob3RUaW1lO1xuICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmJsb2JOYW1lKSB7XG4gICAgICAgIHJlc291cmNlID0gXCJiXCI7XG4gICAgICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnNuYXBzaG90VGltZSkge1xuICAgICAgICAgICAgcmVzb3VyY2UgPSBcImJzXCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uSWQpIHtcbiAgICAgICAgICAgIHJlc291cmNlID0gXCJidlwiO1xuICAgICAgICAgICAgdGltZXN0YW1wID0gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uSWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gQ2FsbGluZyBwYXJzZSBhbmQgdG9TdHJpbmcgZ3VhcmFudGVlcyB0aGUgcHJvcGVyIG9yZGVyaW5nIGFuZCB0aHJvd3Mgb24gaW52YWxpZCBjaGFyYWN0ZXJzLlxuICAgIGxldCB2ZXJpZmllZFBlcm1pc3Npb25zO1xuICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zKSB7XG4gICAgICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmJsb2JOYW1lKSB7XG4gICAgICAgICAgICB2ZXJpZmllZFBlcm1pc3Npb25zID0gQmxvYlNBU1Blcm1pc3Npb25zLnBhcnNlKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMudG9TdHJpbmcoKSkudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZlcmlmaWVkUGVybWlzc2lvbnMgPSBDb250YWluZXJTQVNQZXJtaXNzaW9ucy5wYXJzZShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zLnRvU3RyaW5nKCkpLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gU2lnbmF0dXJlIGlzIGdlbmVyYXRlZCBvbiB0aGUgdW4tdXJsLWVuY29kZWQgdmFsdWVzLlxuICAgIGNvbnN0IHN0cmluZ1RvU2lnbiA9IFtcbiAgICAgICAgdmVyaWZpZWRQZXJtaXNzaW9ucyA/IHZlcmlmaWVkUGVybWlzc2lvbnMgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnN0YXJ0c09uXG4gICAgICAgICAgICA/IHRydW5jYXRlZElTTzgwNjFEYXRlKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuc3RhcnRzT24sIGZhbHNlKVxuICAgICAgICAgICAgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmV4cGlyZXNPblxuICAgICAgICAgICAgPyB0cnVuY2F0ZWRJU084MDYxRGF0ZShibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmV4cGlyZXNPbiwgZmFsc2UpXG4gICAgICAgICAgICA6IFwiXCIsXG4gICAgICAgIGdldENhbm9uaWNhbE5hbWUodXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsLmFjY291bnROYW1lLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRhaW5lck5hbWUsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuYmxvYk5hbWUpLFxuICAgICAgICB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwudXNlckRlbGVnYXRpb25LZXkuc2lnbmVkT2JqZWN0SWQsXG4gICAgICAgIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC51c2VyRGVsZWdhdGlvbktleS5zaWduZWRUZW5hbnRJZCxcbiAgICAgICAgdXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsLnVzZXJEZWxlZ2F0aW9uS2V5LnNpZ25lZFN0YXJ0c09uXG4gICAgICAgICAgICA/IHRydW5jYXRlZElTTzgwNjFEYXRlKHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC51c2VyRGVsZWdhdGlvbktleS5zaWduZWRTdGFydHNPbiwgZmFsc2UpXG4gICAgICAgICAgICA6IFwiXCIsXG4gICAgICAgIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC51c2VyRGVsZWdhdGlvbktleS5zaWduZWRFeHBpcmVzT25cbiAgICAgICAgICAgID8gdHJ1bmNhdGVkSVNPODA2MURhdGUodXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsLnVzZXJEZWxlZ2F0aW9uS2V5LnNpZ25lZEV4cGlyZXNPbiwgZmFsc2UpXG4gICAgICAgICAgICA6IFwiXCIsXG4gICAgICAgIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC51c2VyRGVsZWdhdGlvbktleS5zaWduZWRTZXJ2aWNlLFxuICAgICAgICB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwudXNlckRlbGVnYXRpb25LZXkuc2lnbmVkVmVyc2lvbixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wcmVhdXRob3JpemVkQWdlbnRPYmplY3RJZCxcbiAgICAgICAgdW5kZWZpbmVkLCAvLyBhZ2VudE9iamVjdElkXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29ycmVsYXRpb25JZCxcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5pcFJhbmdlID8gaXBSYW5nZVRvU3RyaW5nKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuaXBSYW5nZSkgOiBcIlwiLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnByb3RvY29sID8gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wcm90b2NvbCA6IFwiXCIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMudmVyc2lvbixcbiAgICAgICAgcmVzb3VyY2UsXG4gICAgICAgIHRpbWVzdGFtcCxcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jYWNoZUNvbnRyb2wsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudERpc3Bvc2l0aW9uLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRFbmNvZGluZyxcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50TGFuZ3VhZ2UsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudFR5cGUsXG4gICAgXS5qb2luKFwiXFxuXCIpO1xuICAgIGNvbnN0IHNpZ25hdHVyZSA9IHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC5jb21wdXRlSE1BQ1NIQTI1NihzdHJpbmdUb1NpZ24pO1xuICAgIHJldHVybiB7XG4gICAgICAgIHNhc1F1ZXJ5UGFyYW1ldGVyczogbmV3IFNBU1F1ZXJ5UGFyYW1ldGVycyhibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnZlcnNpb24sIHNpZ25hdHVyZSwgdmVyaWZpZWRQZXJtaXNzaW9ucywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucHJvdG9jb2wsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuc3RhcnRzT24sIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuZXhwaXJlc09uLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmlwUmFuZ2UsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuaWRlbnRpZmllciwgcmVzb3VyY2UsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY2FjaGVDb250cm9sLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnREaXNwb3NpdGlvbiwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50RW5jb2RpbmcsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudExhbmd1YWdlLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRUeXBlLCB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwudXNlckRlbGVnYXRpb25LZXksIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucHJlYXV0aG9yaXplZEFnZW50T2JqZWN0SWQsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29ycmVsYXRpb25JZCksXG4gICAgICAgIHN0cmluZ1RvU2lnbjogc3RyaW5nVG9TaWduLFxuICAgIH07XG59XG4vKipcbiAqIE9OTFkgQVZBSUxBQkxFIElOIE5PREUuSlMgUlVOVElNRS5cbiAqIElNUExFTUVOVEFUSU9OIEZPUiBBUEkgVkVSU0lPTiBGUk9NIDIwMjAtMTItMDYuXG4gKlxuICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBTQVNRdWVyeVBhcmFtZXRlcnMuXG4gKlxuICogT25seSBhY2NlcHRzIHJlcXVpcmVkIHNldHRpbmdzIG5lZWRlZCB0byBjcmVhdGUgYSBTQVMuIEZvciBvcHRpb25hbCBzZXR0aW5ncyBwbGVhc2VcbiAqIHNldCBjb3JyZXNwb25kaW5nIHByb3BlcnRpZXMgZGlyZWN0bHksIHN1Y2ggYXMgcGVybWlzc2lvbnMsIHN0YXJ0c09uLlxuICpcbiAqIFdBUk5JTkc6IGlkZW50aWZpZXIgd2lsbCBiZSBpZ25vcmVkLCBwZXJtaXNzaW9ucyBhbmQgZXhwaXJlc09uIGFyZSByZXF1aXJlZC5cbiAqXG4gKiBAcGFyYW0gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcyAtXG4gKiBAcGFyYW0gdXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsIC1cbiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGVCbG9iU0FTUXVlcnlQYXJhbWV0ZXJzVURLMjAyMDEyMDYoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcywgdXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsKSB7XG4gICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcyA9IFNBU1NpZ25hdHVyZVZhbHVlc1Nhbml0eUNoZWNrQW5kQXV0b2ZpbGwoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcyk7XG4gICAgLy8gU3RvcmVkIGFjY2VzcyBwb2xpY2llcyBhcmUgbm90IHN1cHBvcnRlZCBmb3IgYSB1c2VyIGRlbGVnYXRpb24gU0FTLlxuICAgIGlmICghYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucyB8fCAhYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5leHBpcmVzT24pIHtcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJNdXN0IHByb3ZpZGUgJ3Blcm1pc3Npb25zJyBhbmQgJ2V4cGlyZXNPbicgZm9yIEJsb2IgU0FTIGdlbmVyYXRpb24gd2hlbiBnZW5lcmF0aW5nIHVzZXIgZGVsZWdhdGlvbiBTQVMuXCIpO1xuICAgIH1cbiAgICBsZXQgcmVzb3VyY2UgPSBcImNcIjtcbiAgICBsZXQgdGltZXN0YW1wID0gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5zbmFwc2hvdFRpbWU7XG4gICAgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuYmxvYk5hbWUpIHtcbiAgICAgICAgcmVzb3VyY2UgPSBcImJcIjtcbiAgICAgICAgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuc25hcHNob3RUaW1lKSB7XG4gICAgICAgICAgICByZXNvdXJjZSA9IFwiYnNcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnZlcnNpb25JZCkge1xuICAgICAgICAgICAgcmVzb3VyY2UgPSBcImJ2XCI7XG4gICAgICAgICAgICB0aW1lc3RhbXAgPSBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnZlcnNpb25JZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBDYWxsaW5nIHBhcnNlIGFuZCB0b1N0cmluZyBndWFyYW50ZWVzIHRoZSBwcm9wZXIgb3JkZXJpbmcgYW5kIHRocm93cyBvbiBpbnZhbGlkIGNoYXJhY3RlcnMuXG4gICAgbGV0IHZlcmlmaWVkUGVybWlzc2lvbnM7XG4gICAgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMpIHtcbiAgICAgICAgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuYmxvYk5hbWUpIHtcbiAgICAgICAgICAgIHZlcmlmaWVkUGVybWlzc2lvbnMgPSBCbG9iU0FTUGVybWlzc2lvbnMucGFyc2UoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucy50b1N0cmluZygpKS50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmVyaWZpZWRQZXJtaXNzaW9ucyA9IENvbnRhaW5lclNBU1Blcm1pc3Npb25zLnBhcnNlKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMudG9TdHJpbmcoKSkudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBTaWduYXR1cmUgaXMgZ2VuZXJhdGVkIG9uIHRoZSB1bi11cmwtZW5jb2RlZCB2YWx1ZXMuXG4gICAgY29uc3Qgc3RyaW5nVG9TaWduID0gW1xuICAgICAgICB2ZXJpZmllZFBlcm1pc3Npb25zID8gdmVyaWZpZWRQZXJtaXNzaW9ucyA6IFwiXCIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuc3RhcnRzT25cbiAgICAgICAgICAgID8gdHJ1bmNhdGVkSVNPODA2MURhdGUoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5zdGFydHNPbiwgZmFsc2UpXG4gICAgICAgICAgICA6IFwiXCIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuZXhwaXJlc09uXG4gICAgICAgICAgICA/IHRydW5jYXRlZElTTzgwNjFEYXRlKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuZXhwaXJlc09uLCBmYWxzZSlcbiAgICAgICAgICAgIDogXCJcIixcbiAgICAgICAgZ2V0Q2Fub25pY2FsTmFtZSh1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwuYWNjb3VudE5hbWUsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGFpbmVyTmFtZSwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5ibG9iTmFtZSksXG4gICAgICAgIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC51c2VyRGVsZWdhdGlvbktleS5zaWduZWRPYmplY3RJZCxcbiAgICAgICAgdXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsLnVzZXJEZWxlZ2F0aW9uS2V5LnNpZ25lZFRlbmFudElkLFxuICAgICAgICB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwudXNlckRlbGVnYXRpb25LZXkuc2lnbmVkU3RhcnRzT25cbiAgICAgICAgICAgID8gdHJ1bmNhdGVkSVNPODA2MURhdGUodXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsLnVzZXJEZWxlZ2F0aW9uS2V5LnNpZ25lZFN0YXJ0c09uLCBmYWxzZSlcbiAgICAgICAgICAgIDogXCJcIixcbiAgICAgICAgdXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsLnVzZXJEZWxlZ2F0aW9uS2V5LnNpZ25lZEV4cGlyZXNPblxuICAgICAgICAgICAgPyB0cnVuY2F0ZWRJU084MDYxRGF0ZSh1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwudXNlckRlbGVnYXRpb25LZXkuc2lnbmVkRXhwaXJlc09uLCBmYWxzZSlcbiAgICAgICAgICAgIDogXCJcIixcbiAgICAgICAgdXNlckRlbGVnYXRpb25LZXlDcmVkZW50aWFsLnVzZXJEZWxlZ2F0aW9uS2V5LnNpZ25lZFNlcnZpY2UsXG4gICAgICAgIHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC51c2VyRGVsZWdhdGlvbktleS5zaWduZWRWZXJzaW9uLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnByZWF1dGhvcml6ZWRBZ2VudE9iamVjdElkLFxuICAgICAgICB1bmRlZmluZWQsIC8vIGFnZW50T2JqZWN0SWRcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb3JyZWxhdGlvbklkLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmlwUmFuZ2UgPyBpcFJhbmdlVG9TdHJpbmcoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5pcFJhbmdlKSA6IFwiXCIsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucHJvdG9jb2wgPyBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnByb3RvY29sIDogXCJcIixcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uLFxuICAgICAgICByZXNvdXJjZSxcbiAgICAgICAgdGltZXN0YW1wLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jYWNoZUNvbnRyb2wsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudERpc3Bvc2l0aW9uLFxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRFbmNvZGluZyxcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50TGFuZ3VhZ2UsXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudFR5cGUsXG4gICAgXS5qb2luKFwiXFxuXCIpO1xuICAgIGNvbnN0IHNpZ25hdHVyZSA9IHVzZXJEZWxlZ2F0aW9uS2V5Q3JlZGVudGlhbC5jb21wdXRlSE1BQ1NIQTI1NihzdHJpbmdUb1NpZ24pO1xuICAgIHJldHVybiB7XG4gICAgICAgIHNhc1F1ZXJ5UGFyYW1ldGVyczogbmV3IFNBU1F1ZXJ5UGFyYW1ldGVycyhibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnZlcnNpb24sIHNpZ25hdHVyZSwgdmVyaWZpZWRQZXJtaXNzaW9ucywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucHJvdG9jb2wsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuc3RhcnRzT24sIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuZXhwaXJlc09uLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmlwUmFuZ2UsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuaWRlbnRpZmllciwgcmVzb3VyY2UsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY2FjaGVDb250cm9sLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnREaXNwb3NpdGlvbiwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5jb250ZW50RW5jb2RpbmcsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29udGVudExhbmd1YWdlLCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvbnRlbnRUeXBlLCB1c2VyRGVsZWdhdGlvbktleUNyZWRlbnRpYWwudXNlckRlbGVnYXRpb25LZXksIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucHJlYXV0aG9yaXplZEFnZW50T2JqZWN0SWQsIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuY29ycmVsYXRpb25JZCwgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5lbmNyeXB0aW9uU2NvcGUpLFxuICAgICAgICBzdHJpbmdUb1NpZ246IHN0cmluZ1RvU2lnbixcbiAgICB9O1xufVxuZnVuY3Rpb24gZ2V0Q2Fub25pY2FsTmFtZShhY2NvdW50TmFtZSwgY29udGFpbmVyTmFtZSwgYmxvYk5hbWUpIHtcbiAgICAvLyBDb250YWluZXI6IFwiL2Jsb2IvYWNjb3VudC9jb250YWluZXJOYW1lXCJcbiAgICAvLyBCbG9iOiAgICAgIFwiL2Jsb2IvYWNjb3VudC9jb250YWluZXJOYW1lL2Jsb2JOYW1lXCJcbiAgICBjb25zdCBlbGVtZW50cyA9IFtgL2Jsb2IvJHthY2NvdW50TmFtZX0vJHtjb250YWluZXJOYW1lfWBdO1xuICAgIGlmIChibG9iTmFtZSkge1xuICAgICAgICBlbGVtZW50cy5wdXNoKGAvJHtibG9iTmFtZX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIGVsZW1lbnRzLmpvaW4oXCJcIik7XG59XG5mdW5jdGlvbiBTQVNTaWduYXR1cmVWYWx1ZXNTYW5pdHlDaGVja0FuZEF1dG9maWxsKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMpIHtcbiAgICBjb25zdCB2ZXJzaW9uID0gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uID8gYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uIDogU0VSVklDRV9WRVJTSU9OO1xuICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnNuYXBzaG90VGltZSAmJiB2ZXJzaW9uIDwgXCIyMDE4LTExLTA5XCIpIHtcbiAgICAgICAgdGhyb3cgUmFuZ2VFcnJvcihcIid2ZXJzaW9uJyBtdXN0IGJlID49ICcyMDE4LTExLTA5JyB3aGVuIHByb3ZpZGluZyAnc25hcHNob3RUaW1lJy5cIik7XG4gICAgfVxuICAgIGlmIChibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmJsb2JOYW1lID09PSB1bmRlZmluZWQgJiYgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5zbmFwc2hvdFRpbWUpIHtcbiAgICAgICAgdGhyb3cgUmFuZ2VFcnJvcihcIk11c3QgcHJvdmlkZSAnYmxvYk5hbWUnIHdoZW4gcHJvdmlkaW5nICdzbmFwc2hvdFRpbWUnLlwiKTtcbiAgICB9XG4gICAgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMudmVyc2lvbklkICYmIHZlcnNpb24gPCBcIjIwMTktMTAtMTBcIikge1xuICAgICAgICB0aHJvdyBSYW5nZUVycm9yKFwiJ3ZlcnNpb24nIG11c3QgYmUgPj0gJzIwMTktMTAtMTAnIHdoZW4gcHJvdmlkaW5nICd2ZXJzaW9uSWQnLlwiKTtcbiAgICB9XG4gICAgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMuYmxvYk5hbWUgPT09IHVuZGVmaW5lZCAmJiBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnZlcnNpb25JZCkge1xuICAgICAgICB0aHJvdyBSYW5nZUVycm9yKFwiTXVzdCBwcm92aWRlICdibG9iTmFtZScgd2hlbiBwcm92aWRpbmcgJ3ZlcnNpb25JZCcuXCIpO1xuICAgIH1cbiAgICBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucyAmJlxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zLnNldEltbXV0YWJpbGl0eVBvbGljeSAmJlxuICAgICAgICB2ZXJzaW9uIDwgXCIyMDIwLTA4LTA0XCIpIHtcbiAgICAgICAgdGhyb3cgUmFuZ2VFcnJvcihcIid2ZXJzaW9uJyBtdXN0IGJlID49ICcyMDIwLTA4LTA0JyB3aGVuIHByb3ZpZGVkICdpJyBwZXJtaXNzaW9uLlwiKTtcbiAgICB9XG4gICAgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMgJiZcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucy5kZWxldGVWZXJzaW9uICYmXG4gICAgICAgIHZlcnNpb24gPCBcIjIwMTktMTAtMTBcIikge1xuICAgICAgICB0aHJvdyBSYW5nZUVycm9yKFwiJ3ZlcnNpb24nIG11c3QgYmUgPj0gJzIwMTktMTAtMTAnIHdoZW4gcHJvdmlkaW5nICd4JyBwZXJtaXNzaW9uLlwiKTtcbiAgICB9XG4gICAgaWYgKGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMgJiZcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucy5wZXJtYW5lbnREZWxldGUgJiZcbiAgICAgICAgdmVyc2lvbiA8IFwiMjAxOS0xMC0xMFwiKSB7XG4gICAgICAgIHRocm93IFJhbmdlRXJyb3IoXCIndmVyc2lvbicgbXVzdCBiZSA+PSAnMjAxOS0xMC0xMCcgd2hlbiBwcm92aWRpbmcgJ3knIHBlcm1pc3Npb24uXCIpO1xuICAgIH1cbiAgICBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucyAmJlxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zLnRhZyAmJlxuICAgICAgICB2ZXJzaW9uIDwgXCIyMDE5LTEyLTEyXCIpIHtcbiAgICAgICAgdGhyb3cgUmFuZ2VFcnJvcihcIid2ZXJzaW9uJyBtdXN0IGJlID49ICcyMDE5LTEyLTEyJyB3aGVuIHByb3ZpZGluZyAndCcgcGVybWlzc2lvbi5cIik7XG4gICAgfVxuICAgIGlmICh2ZXJzaW9uIDwgXCIyMDIwLTAyLTEwXCIgJiZcbiAgICAgICAgYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucyAmJlxuICAgICAgICAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucy5tb3ZlIHx8IGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMuZXhlY3V0ZSkpIHtcbiAgICAgICAgdGhyb3cgUmFuZ2VFcnJvcihcIid2ZXJzaW9uJyBtdXN0IGJlID49ICcyMDIwLTAyLTEwJyB3aGVuIHByb3ZpZGluZyB0aGUgJ20nIG9yICdlJyBwZXJtaXNzaW9uLlwiKTtcbiAgICB9XG4gICAgaWYgKHZlcnNpb24gPCBcIjIwMjEtMDQtMTBcIiAmJlxuICAgICAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zICYmXG4gICAgICAgIGJsb2JTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMuZmlsdGVyQnlUYWdzKSB7XG4gICAgICAgIHRocm93IFJhbmdlRXJyb3IoXCIndmVyc2lvbicgbXVzdCBiZSA+PSAnMjAyMS0wNC0xMCcgd2hlbiBwcm92aWRpbmcgdGhlICdmJyBwZXJtaXNzaW9uLlwiKTtcbiAgICB9XG4gICAgaWYgKHZlcnNpb24gPCBcIjIwMjAtMDItMTBcIiAmJlxuICAgICAgICAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5wcmVhdXRob3JpemVkQWdlbnRPYmplY3RJZCB8fCBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLmNvcnJlbGF0aW9uSWQpKSB7XG4gICAgICAgIHRocm93IFJhbmdlRXJyb3IoXCIndmVyc2lvbicgbXVzdCBiZSA+PSAnMjAyMC0wMi0xMCcgd2hlbiBwcm92aWRpbmcgJ3ByZWF1dGhvcml6ZWRBZ2VudE9iamVjdElkJyBvciAnY29ycmVsYXRpb25JZCcuXCIpO1xuICAgIH1cbiAgICBpZiAoYmxvYlNBU1NpZ25hdHVyZVZhbHVlcy5lbmNyeXB0aW9uU2NvcGUgJiYgdmVyc2lvbiA8IFwiMjAyMC0xMi0wNlwiKSB7XG4gICAgICAgIHRocm93IFJhbmdlRXJyb3IoXCIndmVyc2lvbicgbXVzdCBiZSA+PSAnMjAyMC0xMi0wNicgd2hlbiBwcm92aWRlZCAnZW5jcnlwdGlvblNjb3BlJyBpbiBTQVMuXCIpO1xuICAgIH1cbiAgICBibG9iU0FTU2lnbmF0dXJlVmFsdWVzLnZlcnNpb24gPSB2ZXJzaW9uO1xuICAgIHJldHVybiBibG9iU0FTU2lnbmF0dXJlVmFsdWVzO1xufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogQSBjbGllbnQgdGhhdCBtYW5hZ2VzIGxlYXNlcyBmb3IgYSB7QGxpbmsgQ29udGFpbmVyQ2xpZW50fSBvciBhIHtAbGluayBCbG9iQ2xpZW50fS5cbiAqL1xuY2xhc3MgQmxvYkxlYXNlQ2xpZW50IHtcbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBsZWFzZSBJZC5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBsZWFzZUlkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGVhc2VJZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgdXJsLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IHVybCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VybDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBCbG9iTGVhc2VDbGllbnQuXG4gICAgICogQHBhcmFtIGNsaWVudCAtIFRoZSBjbGllbnQgdG8gbWFrZSB0aGUgbGVhc2Ugb3BlcmF0aW9uIHJlcXVlc3RzLlxuICAgICAqIEBwYXJhbSBsZWFzZUlkIC0gSW5pdGlhbCBwcm9wb3NlZCBsZWFzZSBpZC5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihjbGllbnQsIGxlYXNlSWQpIHtcbiAgICAgICAgY29uc3QgY2xpZW50Q29udGV4dCA9IGNsaWVudC5zdG9yYWdlQ2xpZW50Q29udGV4dDtcbiAgICAgICAgdGhpcy5fdXJsID0gY2xpZW50LnVybDtcbiAgICAgICAgaWYgKGNsaWVudC5uYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2lzQ29udGFpbmVyID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lck9yQmxvYk9wZXJhdGlvbiA9IGNsaWVudENvbnRleHQuY29udGFpbmVyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5faXNDb250YWluZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lck9yQmxvYk9wZXJhdGlvbiA9IGNsaWVudENvbnRleHQuYmxvYjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWxlYXNlSWQpIHtcbiAgICAgICAgICAgIGxlYXNlSWQgPSBjb3JlVXRpbC5yYW5kb21VVUlEKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbGVhc2VJZCA9IGxlYXNlSWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEVzdGFibGlzaGVzIGFuZCBtYW5hZ2VzIGEgbG9jayBvbiBhIGNvbnRhaW5lciBmb3IgZGVsZXRlIG9wZXJhdGlvbnMsIG9yIG9uIGEgYmxvYlxuICAgICAqIGZvciB3cml0ZSBhbmQgZGVsZXRlIG9wZXJhdGlvbnMuXG4gICAgICogVGhlIGxvY2sgZHVyYXRpb24gY2FuIGJlIDE1IHRvIDYwIHNlY29uZHMsIG9yIGNhbiBiZSBpbmZpbml0ZS5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9sZWFzZS1jb250YWluZXJcbiAgICAgKiBhbmRcbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9sZWFzZS1ibG9iXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZHVyYXRpb24gLSBNdXN0IGJlIGJldHdlZW4gMTUgdG8gNjAgc2Vjb25kcywgb3IgaW5maW5pdGUgKC0xKVxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gb3B0aW9uIHRvIGNvbmZpZ3VyZSBsZWFzZSBtYW5hZ2VtZW50IG9wZXJhdGlvbnMuXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgYWNxdWlyZSBsZWFzZSBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgYWNxdWlyZUxlYXNlKGR1cmF0aW9uLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZTtcbiAgICAgICAgaWYgKHRoaXMuX2lzQ29udGFpbmVyICYmXG4gICAgICAgICAgICAoKCgoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5pZk1hdGNoKSAmJiAoKF9iID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaWZNYXRjaCkgIT09IEVUYWdOb25lKSB8fFxuICAgICAgICAgICAgICAgICgoKF9jID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuaWZOb25lTWF0Y2gpICYmICgoX2QgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZC5pZk5vbmVNYXRjaCkgIT09IEVUYWdOb25lKSB8fFxuICAgICAgICAgICAgICAgICgoX2UgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZS50YWdDb25kaXRpb25zKSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVGhlIElmTWF0Y2gsIElmTm9uZU1hdGNoIGFuZCB0YWdzIGFjY2VzcyBjb25kaXRpb25zIGFyZSBpZ25vcmVkIGJ5IHRoZSBzZXJ2aWNlLiBWYWx1ZXMgb3RoZXIgdGhhbiB1bmRlZmluZWQgb3IgdGhlaXIgZGVmYXVsdCB2YWx1ZXMgYXJlIG5vdCBhY2NlcHRhYmxlLlwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JMZWFzZUNsaWVudC1hY3F1aXJlTGVhc2VcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5fY29udGFpbmVyT3JCbG9iT3BlcmF0aW9uLmFjcXVpcmVMZWFzZSh7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgZHVyYXRpb24sXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIHByb3Bvc2VkTGVhc2VJZDogdGhpcy5fbGVhc2VJZCxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUbyBjaGFuZ2UgdGhlIElEIG9mIHRoZSBsZWFzZS5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9sZWFzZS1jb250YWluZXJcbiAgICAgKiBhbmRcbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9sZWFzZS1ibG9iXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcG9zZWRMZWFzZUlkIC0gdGhlIHByb3Bvc2VkIG5ldyBsZWFzZSBJZC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIG9wdGlvbiB0byBjb25maWd1cmUgbGVhc2UgbWFuYWdlbWVudCBvcGVyYXRpb25zLlxuICAgICAqIEByZXR1cm5zIFJlc3BvbnNlIGRhdGEgZm9yIGNoYW5nZSBsZWFzZSBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgY2hhbmdlTGVhc2UocHJvcG9zZWRMZWFzZUlkLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZTtcbiAgICAgICAgaWYgKHRoaXMuX2lzQ29udGFpbmVyICYmXG4gICAgICAgICAgICAoKCgoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5pZk1hdGNoKSAmJiAoKF9iID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaWZNYXRjaCkgIT09IEVUYWdOb25lKSB8fFxuICAgICAgICAgICAgICAgICgoKF9jID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuaWZOb25lTWF0Y2gpICYmICgoX2QgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZC5pZk5vbmVNYXRjaCkgIT09IEVUYWdOb25lKSB8fFxuICAgICAgICAgICAgICAgICgoX2UgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZS50YWdDb25kaXRpb25zKSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVGhlIElmTWF0Y2gsIElmTm9uZU1hdGNoIGFuZCB0YWdzIGFjY2VzcyBjb25kaXRpb25zIGFyZSBpZ25vcmVkIGJ5IHRoZSBzZXJ2aWNlLiBWYWx1ZXMgb3RoZXIgdGhhbiB1bmRlZmluZWQgb3IgdGhlaXIgZGVmYXVsdCB2YWx1ZXMgYXJlIG5vdCBhY2NlcHRhYmxlLlwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JMZWFzZUNsaWVudC1jaGFuZ2VMZWFzZVwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5fY29udGFpbmVyT3JCbG9iT3BlcmF0aW9uLmNoYW5nZUxlYXNlKHRoaXMuX2xlYXNlSWQsIHByb3Bvc2VkTGVhc2VJZCwge1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB0aGlzLl9sZWFzZUlkID0gcHJvcG9zZWRMZWFzZUlkO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVG8gZnJlZSB0aGUgbGVhc2UgaWYgaXQgaXMgbm8gbG9uZ2VyIG5lZWRlZCBzbyB0aGF0IGFub3RoZXIgY2xpZW50IG1heVxuICAgICAqIGltbWVkaWF0ZWx5IGFjcXVpcmUgYSBsZWFzZSBhZ2FpbnN0IHRoZSBjb250YWluZXIgb3IgdGhlIGJsb2IuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvbGVhc2UtY29udGFpbmVyXG4gICAgICogYW5kXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvbGVhc2UtYmxvYlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBvcHRpb24gdG8gY29uZmlndXJlIGxlYXNlIG1hbmFnZW1lbnQgb3BlcmF0aW9ucy5cbiAgICAgKiBAcmV0dXJucyBSZXNwb25zZSBkYXRhIGZvciByZWxlYXNlIGxlYXNlIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyByZWxlYXNlTGVhc2Uob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2U7XG4gICAgICAgIGlmICh0aGlzLl9pc0NvbnRhaW5lciAmJlxuICAgICAgICAgICAgKCgoKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuaWZNYXRjaCkgJiYgKChfYiA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmlmTWF0Y2gpICE9PSBFVGFnTm9uZSkgfHxcbiAgICAgICAgICAgICAgICAoKChfYyA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmlmTm9uZU1hdGNoKSAmJiAoKF9kID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuaWZOb25lTWF0Y2gpICE9PSBFVGFnTm9uZSkgfHxcbiAgICAgICAgICAgICAgICAoKF9lID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2UudGFnQ29uZGl0aW9ucykpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlRoZSBJZk1hdGNoLCBJZk5vbmVNYXRjaCBhbmQgdGFncyBhY2Nlc3MgY29uZGl0aW9ucyBhcmUgaWdub3JlZCBieSB0aGUgc2VydmljZS4gVmFsdWVzIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIHRoZWlyIGRlZmF1bHQgdmFsdWVzIGFyZSBub3QgYWNjZXB0YWJsZS5cIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iTGVhc2VDbGllbnQtcmVsZWFzZUxlYXNlXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuX2NvbnRhaW5lck9yQmxvYk9wZXJhdGlvbi5yZWxlYXNlTGVhc2UodGhpcy5fbGVhc2VJZCwge1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUbyByZW5ldyB0aGUgbGVhc2UuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvbGVhc2UtY29udGFpbmVyXG4gICAgICogYW5kXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvbGVhc2UtYmxvYlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBvcHRpb24gdG8gY29uZmlndXJlIGxlYXNlIG1hbmFnZW1lbnQgb3BlcmF0aW9ucy5cbiAgICAgKiBAcmV0dXJucyBSZXNwb25zZSBkYXRhIGZvciByZW5ldyBsZWFzZSBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgcmVuZXdMZWFzZShvcHRpb25zID0ge30pIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZTtcbiAgICAgICAgaWYgKHRoaXMuX2lzQ29udGFpbmVyICYmXG4gICAgICAgICAgICAoKCgoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5pZk1hdGNoKSAmJiAoKF9iID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaWZNYXRjaCkgIT09IEVUYWdOb25lKSB8fFxuICAgICAgICAgICAgICAgICgoKF9jID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuaWZOb25lTWF0Y2gpICYmICgoX2QgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZC5pZk5vbmVNYXRjaCkgIT09IEVUYWdOb25lKSB8fFxuICAgICAgICAgICAgICAgICgoX2UgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZS50YWdDb25kaXRpb25zKSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVGhlIElmTWF0Y2gsIElmTm9uZU1hdGNoIGFuZCB0YWdzIGFjY2VzcyBjb25kaXRpb25zIGFyZSBpZ25vcmVkIGJ5IHRoZSBzZXJ2aWNlLiBWYWx1ZXMgb3RoZXIgdGhhbiB1bmRlZmluZWQgb3IgdGhlaXIgZGVmYXVsdCB2YWx1ZXMgYXJlIG5vdCBhY2NlcHRhYmxlLlwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JMZWFzZUNsaWVudC1yZW5ld0xlYXNlXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRhaW5lck9yQmxvYk9wZXJhdGlvbi5yZW5ld0xlYXNlKHRoaXMuX2xlYXNlSWQsIHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUbyBlbmQgdGhlIGxlYXNlIGJ1dCBlbnN1cmUgdGhhdCBhbm90aGVyIGNsaWVudCBjYW5ub3QgYWNxdWlyZSBhIG5ldyBsZWFzZVxuICAgICAqIHVudGlsIHRoZSBjdXJyZW50IGxlYXNlIHBlcmlvZCBoYXMgZXhwaXJlZC5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9sZWFzZS1jb250YWluZXJcbiAgICAgKiBhbmRcbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9sZWFzZS1ibG9iXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYnJlYWtQZXJpb2QgLSBCcmVhayBwZXJpb2RcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIG9wdGlvbnMgdG8gY29uZmlndXJlIGxlYXNlIG1hbmFnZW1lbnQgb3BlcmF0aW9ucy5cbiAgICAgKiBAcmV0dXJucyBSZXNwb25zZSBkYXRhIGZvciBicmVhayBsZWFzZSBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgYnJlYWtMZWFzZShicmVha1BlcmlvZCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2U7XG4gICAgICAgIGlmICh0aGlzLl9pc0NvbnRhaW5lciAmJlxuICAgICAgICAgICAgKCgoKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuaWZNYXRjaCkgJiYgKChfYiA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmlmTWF0Y2gpICE9PSBFVGFnTm9uZSkgfHxcbiAgICAgICAgICAgICAgICAoKChfYyA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmlmTm9uZU1hdGNoKSAmJiAoKF9kID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuaWZOb25lTWF0Y2gpICE9PSBFVGFnTm9uZSkgfHxcbiAgICAgICAgICAgICAgICAoKF9lID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2UudGFnQ29uZGl0aW9ucykpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlRoZSBJZk1hdGNoLCBJZk5vbmVNYXRjaCBhbmQgdGFncyBhY2Nlc3MgY29uZGl0aW9ucyBhcmUgaWdub3JlZCBieSB0aGUgc2VydmljZS4gVmFsdWVzIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIHRoZWlyIGRlZmF1bHQgdmFsdWVzIGFyZSBub3QgYWNjZXB0YWJsZS5cIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iTGVhc2VDbGllbnQtYnJlYWtMZWFzZVwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGNvbnN0IG9wZXJhdGlvbk9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgYnJlYWtQZXJpb2QsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5fY29udGFpbmVyT3JCbG9iT3BlcmF0aW9uLmJyZWFrTGVhc2Uob3BlcmF0aW9uT3B0aW9ucykpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBPTkxZIEFWQUlMQUJMRSBJTiBOT0RFLkpTIFJVTlRJTUUuXG4gKlxuICogQSBOb2RlLmpzIFJlYWRhYmxlU3RyZWFtIHdpbGwgaW50ZXJuYWxseSByZXRyeSB3aGVuIGludGVybmFsIFJlYWRhYmxlU3RyZWFtIHVuZXhwZWN0ZWQgZW5kcy5cbiAqL1xuY2xhc3MgUmV0cmlhYmxlUmVhZGFibGVTdHJlYW0gZXh0ZW5kcyBzdHJlYW0uUmVhZGFibGUge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgUmV0cmlhYmxlUmVhZGFibGVTdHJlYW0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc291cmNlIC0gVGhlIGN1cnJlbnQgUmVhZGFibGVTdHJlYW0gcmV0dXJuZWQgZnJvbSBnZXR0ZXJcbiAgICAgKiBAcGFyYW0gZ2V0dGVyIC0gQSBtZXRob2QgY2FsbGluZyBkb3dubG9hZGluZyByZXF1ZXN0IHJldHVybmluZ1xuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIG5ldyBSZWFkYWJsZVN0cmVhbSBmcm9tIHNwZWNpZmllZCBvZmZzZXRcbiAgICAgKiBAcGFyYW0gb2Zmc2V0IC0gT2Zmc2V0IHBvc2l0aW9uIGluIG9yaWdpbmFsIGRhdGEgc291cmNlIHRvIHJlYWRcbiAgICAgKiBAcGFyYW0gY291bnQgLSBIb3cgbXVjaCBkYXRhIGluIG9yaWdpbmFsIGRhdGEgc291cmNlIHRvIHJlYWRcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtXG4gICAgICovXG4gICAgY29uc3RydWN0b3Ioc291cmNlLCBnZXR0ZXIsIG9mZnNldCwgY291bnQsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBzdXBlcih7IGhpZ2hXYXRlck1hcms6IG9wdGlvbnMuaGlnaFdhdGVyTWFyayB9KTtcbiAgICAgICAgdGhpcy5yZXRyaWVzID0gMDtcbiAgICAgICAgdGhpcy5zb3VyY2VEYXRhSGFuZGxlciA9IChkYXRhKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmRvSW5qZWN0RXJyb3JPbmNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmRvSW5qZWN0RXJyb3JPbmNlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHRoaXMuc291cmNlLnBhdXNlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zb3VyY2VFcnJvck9yRW5kSGFuZGxlcigpO1xuICAgICAgICAgICAgICAgIHRoaXMuc291cmNlLmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIC8vICAgYE9mZnNldDogJHt0aGlzLm9mZnNldH0sIFJlY2VpdmVkICR7ZGF0YS5sZW5ndGh9IGZyb20gaW50ZXJuYWwgc3RyZWFtYFxuICAgICAgICAgICAgLy8gKTtcbiAgICAgICAgICAgIHRoaXMub2Zmc2V0ICs9IGRhdGEubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKHRoaXMub25Qcm9ncmVzcykge1xuICAgICAgICAgICAgICAgIHRoaXMub25Qcm9ncmVzcyh7IGxvYWRlZEJ5dGVzOiB0aGlzLm9mZnNldCAtIHRoaXMuc3RhcnQgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMucHVzaChkYXRhKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc291cmNlLnBhdXNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuc291cmNlQWJvcnRlZEhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhYm9ydEVycm9yID0gbmV3IGFib3J0Q29udHJvbGxlci5BYm9ydEVycm9yKFwiVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC5cIik7XG4gICAgICAgICAgICB0aGlzLmRlc3Ryb3koYWJvcnRFcnJvcik7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuc291cmNlRXJyb3JPckVuZEhhbmRsZXIgPSAoZXJyKSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyICYmIGVyci5uYW1lID09PSBcIkFib3J0RXJyb3JcIikge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveShlcnIpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgLy8gICBgU291cmNlIHN0cmVhbSBlbWl0cyBlbmQgb3IgZXJyb3IsIG9mZnNldDogJHtcbiAgICAgICAgICAgIC8vICAgICB0aGlzLm9mZnNldFxuICAgICAgICAgICAgLy8gICB9LCBkZXN0IGVuZCA6ICR7dGhpcy5lbmR9YFxuICAgICAgICAgICAgLy8gKTtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlU291cmNlRXZlbnRIYW5kbGVycygpO1xuICAgICAgICAgICAgaWYgKHRoaXMub2Zmc2V0IC0gMSA9PT0gdGhpcy5lbmQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnB1c2gobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLm9mZnNldCA8PSB0aGlzLmVuZCkge1xuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgIC8vICAgYHJldHJpZXM6ICR7dGhpcy5yZXRyaWVzfSwgbWF4IHJldHJpZXM6ICR7dGhpcy5tYXhSZXRyaWVzfWBcbiAgICAgICAgICAgICAgICAvLyApO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJldHJpZXMgPCB0aGlzLm1heFJldHJ5UmVxdWVzdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXRyaWVzICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0dGVyKHRoaXMub2Zmc2V0KVxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oKG5ld1NvdXJjZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zb3VyY2UgPSBuZXdTb3VyY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFNvdXJjZUV2ZW50SGFuZGxlcnMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveShlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95KG5ldyBFcnJvcihgRGF0YSBjb3JydXB0aW9uIGZhaWx1cmU6IHJlY2VpdmVkIGxlc3MgZGF0YSB0aGFuIHJlcXVpcmVkIGFuZCByZWFjaGVkIG1heFJldGlyZXMgbGltaXRhdGlvbi4gUmVjZWl2ZWQgZGF0YSBvZmZzZXQ6ICR7dGhpcy5vZmZzZXQgLSAxfSwgZGF0YSBuZWVkZWQgb2Zmc2V0OiAke3RoaXMuZW5kfSwgcmV0cmllczogJHt0aGlzLnJldHJpZXN9LCBtYXggcmV0cmllczogJHt0aGlzLm1heFJldHJ5UmVxdWVzdHN9YCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveShuZXcgRXJyb3IoYERhdGEgY29ycnVwdGlvbiBmYWlsdXJlOiBSZWNlaXZlZCBtb3JlIGRhdGEgdGhhbiBvcmlnaW5hbCByZXF1ZXN0LCBkYXRhIG5lZWRlZCBvZmZzZXQgaXMgJHt0aGlzLmVuZH0sIHJlY2VpdmVkIG9mZnNldDogJHt0aGlzLm9mZnNldCAtIDF9YCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmdldHRlciA9IGdldHRlcjtcbiAgICAgICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICAgIHRoaXMuc3RhcnQgPSBvZmZzZXQ7XG4gICAgICAgIHRoaXMub2Zmc2V0ID0gb2Zmc2V0O1xuICAgICAgICB0aGlzLmVuZCA9IG9mZnNldCArIGNvdW50IC0gMTtcbiAgICAgICAgdGhpcy5tYXhSZXRyeVJlcXVlc3RzID1cbiAgICAgICAgICAgIG9wdGlvbnMubWF4UmV0cnlSZXF1ZXN0cyAmJiBvcHRpb25zLm1heFJldHJ5UmVxdWVzdHMgPj0gMCA/IG9wdGlvbnMubWF4UmV0cnlSZXF1ZXN0cyA6IDA7XG4gICAgICAgIHRoaXMub25Qcm9ncmVzcyA9IG9wdGlvbnMub25Qcm9ncmVzcztcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgdGhpcy5zZXRTb3VyY2VFdmVudEhhbmRsZXJzKCk7XG4gICAgfVxuICAgIF9yZWFkKCkge1xuICAgICAgICB0aGlzLnNvdXJjZS5yZXN1bWUoKTtcbiAgICB9XG4gICAgc2V0U291cmNlRXZlbnRIYW5kbGVycygpIHtcbiAgICAgICAgdGhpcy5zb3VyY2Uub24oXCJkYXRhXCIsIHRoaXMuc291cmNlRGF0YUhhbmRsZXIpO1xuICAgICAgICB0aGlzLnNvdXJjZS5vbihcImVuZFwiLCB0aGlzLnNvdXJjZUVycm9yT3JFbmRIYW5kbGVyKTtcbiAgICAgICAgdGhpcy5zb3VyY2Uub24oXCJlcnJvclwiLCB0aGlzLnNvdXJjZUVycm9yT3JFbmRIYW5kbGVyKTtcbiAgICAgICAgLy8gbmVlZGVkIGZvciBOb2RlMTRcbiAgICAgICAgdGhpcy5zb3VyY2Uub24oXCJhYm9ydGVkXCIsIHRoaXMuc291cmNlQWJvcnRlZEhhbmRsZXIpO1xuICAgIH1cbiAgICByZW1vdmVTb3VyY2VFdmVudEhhbmRsZXJzKCkge1xuICAgICAgICB0aGlzLnNvdXJjZS5yZW1vdmVMaXN0ZW5lcihcImRhdGFcIiwgdGhpcy5zb3VyY2VEYXRhSGFuZGxlcik7XG4gICAgICAgIHRoaXMuc291cmNlLnJlbW92ZUxpc3RlbmVyKFwiZW5kXCIsIHRoaXMuc291cmNlRXJyb3JPckVuZEhhbmRsZXIpO1xuICAgICAgICB0aGlzLnNvdXJjZS5yZW1vdmVMaXN0ZW5lcihcImVycm9yXCIsIHRoaXMuc291cmNlRXJyb3JPckVuZEhhbmRsZXIpO1xuICAgICAgICB0aGlzLnNvdXJjZS5yZW1vdmVMaXN0ZW5lcihcImFib3J0ZWRcIiwgdGhpcy5zb3VyY2VBYm9ydGVkSGFuZGxlcik7XG4gICAgfVxuICAgIF9kZXN0cm95KGVycm9yLCBjYWxsYmFjaykge1xuICAgICAgICAvLyByZW1vdmUgbGlzdGVuZXIgZnJvbSBzb3VyY2UgYW5kIHJlbGVhc2Ugc291cmNlXG4gICAgICAgIHRoaXMucmVtb3ZlU291cmNlRXZlbnRIYW5kbGVycygpO1xuICAgICAgICB0aGlzLnNvdXJjZS5kZXN0cm95KCk7XG4gICAgICAgIGNhbGxiYWNrKGVycm9yID09PSBudWxsID8gdW5kZWZpbmVkIDogZXJyb3IpO1xuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIE9OTFkgQVZBSUxBQkxFIElOIE5PREUuSlMgUlVOVElNRS5cbiAqXG4gKiBCbG9iRG93bmxvYWRSZXNwb25zZSBpbXBsZW1lbnRzIEJsb2JEb3dubG9hZFJlc3BvbnNlUGFyc2VkIGludGVyZmFjZSwgYW5kIGluIE5vZGUuanMgcnVudGltZSBpdCB3aWxsXG4gKiBhdXRvbWF0aWNhbGx5IHJldHJ5IHdoZW4gaW50ZXJuYWwgcmVhZCBzdHJlYW0gdW5leHBlY3RlZCBlbmRzLiAoVGhpcyBraW5kIG9mIHVuZXhwZWN0ZWQgZW5kcyBjYW5ub3RcbiAqIHRyaWdnZXIgcmV0cmllcyBkZWZpbmVkIGluIHBpcGVsaW5lIHJldHJ5IHBvbGljeS4pXG4gKlxuICogVGhlIHtAbGluayByZWFkYWJsZVN0cmVhbUJvZHl9IHN0cmVhbSB3aWxsIHJldHJ5IHVuZGVybGF5ZXIsIHlvdSBjYW4ganVzdCB1c2UgaXQgYXMgYSBub3JtYWwgTm9kZS5qc1xuICogUmVhZGFibGUgc3RyZWFtLlxuICovXG5jbGFzcyBCbG9iRG93bmxvYWRSZXNwb25zZSB7XG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHRoYXQgdGhlIHNlcnZpY2Ugc3VwcG9ydHNcbiAgICAgKiByZXF1ZXN0cyBmb3IgcGFydGlhbCBmaWxlIGNvbnRlbnQuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgYWNjZXB0UmFuZ2VzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmFjY2VwdFJhbmdlcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBpZiBpdCB3YXMgcHJldmlvdXNseSBzcGVjaWZpZWRcbiAgICAgKiBmb3IgdGhlIGZpbGUuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY2FjaGVDb250cm9sKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNhY2hlQ29udHJvbDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgdmFsdWUgdGhhdCB3YXMgc3BlY2lmaWVkXG4gICAgICogZm9yIHRoZSAneC1tcy1jb250ZW50LWRpc3Bvc2l0aW9uJyBoZWFkZXIgYW5kIHNwZWNpZmllcyBob3cgdG8gcHJvY2VzcyB0aGVcbiAgICAgKiByZXNwb25zZS5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBjb250ZW50RGlzcG9zaXRpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuY29udGVudERpc3Bvc2l0aW9uO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSB0aGF0IHdhcyBzcGVjaWZpZWRcbiAgICAgKiBmb3IgdGhlIENvbnRlbnQtRW5jb2RpbmcgcmVxdWVzdCBoZWFkZXIuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY29udGVudEVuY29kaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNvbnRlbnRFbmNvZGluZztcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgdmFsdWUgdGhhdCB3YXMgc3BlY2lmaWVkXG4gICAgICogZm9yIHRoZSBDb250ZW50LUxhbmd1YWdlIHJlcXVlc3QgaGVhZGVyLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNvbnRlbnRMYW5ndWFnZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5jb250ZW50TGFuZ3VhZ2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IHNlcXVlbmNlIG51bWJlciBmb3IgYVxuICAgICAqIHBhZ2UgYmxvYi4gVGhpcyBoZWFkZXIgaXMgbm90IHJldHVybmVkIGZvciBibG9jayBibG9icyBvciBhcHBlbmQgYmxvYnMuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgYmxvYlNlcXVlbmNlTnVtYmVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmJsb2JTZXF1ZW5jZU51bWJlcjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGJsb2IncyB0eXBlLiBQb3NzaWJsZSB2YWx1ZXMgaW5jbHVkZTpcbiAgICAgKiAnQmxvY2tCbG9iJywgJ1BhZ2VCbG9iJywgJ0FwcGVuZEJsb2InLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGJsb2JUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmJsb2JUeXBlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIHByZXNlbnQgaW4gdGhlXG4gICAgICogcmVzcG9uc2UgYm9keS5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBjb250ZW50TGVuZ3RoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNvbnRlbnRMZW5ndGg7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElmIHRoZSBmaWxlIGhhcyBhbiBNRDUgaGFzaCBhbmQgdGhlXG4gICAgICogcmVxdWVzdCBpcyB0byByZWFkIHRoZSBmdWxsIGZpbGUsIHRoaXMgcmVzcG9uc2UgaGVhZGVyIGlzIHJldHVybmVkIHNvIHRoYXRcbiAgICAgKiB0aGUgY2xpZW50IGNhbiBjaGVjayBmb3IgbWVzc2FnZSBjb250ZW50IGludGVncml0eS4gSWYgdGhlIHJlcXVlc3QgaXMgdG9cbiAgICAgKiByZWFkIGEgc3BlY2lmaWVkIHJhbmdlIGFuZCB0aGUgJ3gtbXMtcmFuZ2UtZ2V0LWNvbnRlbnQtbWQ1JyBpcyBzZXQgdG9cbiAgICAgKiB0cnVlLCB0aGVuIHRoZSByZXF1ZXN0IHJldHVybnMgYW4gTUQ1IGhhc2ggZm9yIHRoZSByYW5nZSwgYXMgbG9uZyBhcyB0aGVcbiAgICAgKiByYW5nZSBzaXplIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byA0IE1CLiBJZiBuZWl0aGVyIG9mIHRoZXNlIHNldHMgb2ZcbiAgICAgKiBjb25kaXRpb25zIGlzIHRydWUsIHRoZW4gbm8gdmFsdWUgaXMgcmV0dXJuZWQgZm9yIHRoZSAnQ29udGVudC1NRDUnXG4gICAgICogaGVhZGVyLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNvbnRlbnRNRDUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuY29udGVudE1ENTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHRoZSByYW5nZSBvZiBieXRlcyByZXR1cm5lZCBpZlxuICAgICAqIHRoZSBjbGllbnQgcmVxdWVzdGVkIGEgc3Vic2V0IG9mIHRoZSBmaWxlIGJ5IHNldHRpbmcgdGhlIFJhbmdlIHJlcXVlc3RcbiAgICAgKiBoZWFkZXIuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY29udGVudFJhbmdlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNvbnRlbnRSYW5nZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGNvbnRlbnQgdHlwZSBzcGVjaWZpZWQgZm9yIHRoZSBmaWxlLlxuICAgICAqIFRoZSBkZWZhdWx0IGNvbnRlbnQgdHlwZSBpcyAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJ1xuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNvbnRlbnRUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNvbnRlbnRUeXBlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb25jbHVzaW9uIHRpbWUgb2YgdGhlIGxhc3QgYXR0ZW1wdGVkXG4gICAgICogQ29weSBGaWxlIG9wZXJhdGlvbiB3aGVyZSB0aGlzIGZpbGUgd2FzIHRoZSBkZXN0aW5hdGlvbiBmaWxlLiBUaGlzIHZhbHVlXG4gICAgICogY2FuIHNwZWNpZnkgdGhlIHRpbWUgb2YgYSBjb21wbGV0ZWQsIGFib3J0ZWQsIG9yIGZhaWxlZCBjb3B5IGF0dGVtcHQuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY29weUNvbXBsZXRlZE9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNvcHlDb21wbGV0ZWRPbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3RyaW5nIGlkZW50aWZpZXIgZm9yIHRoZSBsYXN0IGF0dGVtcHRlZCBDb3B5XG4gICAgICogRmlsZSBvcGVyYXRpb24gd2hlcmUgdGhpcyBmaWxlIHdhcyB0aGUgZGVzdGluYXRpb24gZmlsZS5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBjb3B5SWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuY29weUlkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb250YWlucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCBhbmRcbiAgICAgKiB0aGUgdG90YWwgYnl0ZXMgaW4gdGhlIHNvdXJjZSBpbiB0aGUgbGFzdCBhdHRlbXB0ZWQgQ29weSBGaWxlIG9wZXJhdGlvblxuICAgICAqIHdoZXJlIHRoaXMgZmlsZSB3YXMgdGhlIGRlc3RpbmF0aW9uIGZpbGUuIENhbiBzaG93IGJldHdlZW4gMCBhbmRcbiAgICAgKiBDb250ZW50LUxlbmd0aCBieXRlcyBjb3BpZWQuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY29weVByb2dyZXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNvcHlQcm9ncmVzcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogVVJMIHVwIHRvIDJLQiBpbiBsZW5ndGggdGhhdCBzcGVjaWZpZXMgdGhlXG4gICAgICogc291cmNlIGZpbGUgdXNlZCBpbiB0aGUgbGFzdCBhdHRlbXB0ZWQgQ29weSBGaWxlIG9wZXJhdGlvbiB3aGVyZSB0aGlzIGZpbGVcbiAgICAgKiB3YXMgdGhlIGRlc3RpbmF0aW9uIGZpbGUuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY29weVNvdXJjZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5jb3B5U291cmNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTdGF0ZSBvZiB0aGUgY29weSBvcGVyYXRpb25cbiAgICAgKiBpZGVudGlmaWVkIGJ5ICd4LW1zLWNvcHktaWQnLiBQb3NzaWJsZSB2YWx1ZXMgaW5jbHVkZTogJ3BlbmRpbmcnLFxuICAgICAqICdzdWNjZXNzJywgJ2Fib3J0ZWQnLCAnZmFpbGVkJ1xuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNvcHlTdGF0dXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuY29weVN0YXR1cztcbiAgICB9XG4gICAgLyoqXG4gICAgICogT25seSBhcHBlYXJzIHdoZW5cbiAgICAgKiB4LW1zLWNvcHktc3RhdHVzIGlzIGZhaWxlZCBvciBwZW5kaW5nLiBEZXNjcmliZXMgY2F1c2Ugb2YgZmF0YWwgb3JcbiAgICAgKiBub24tZmF0YWwgY29weSBvcGVyYXRpb24gZmFpbHVyZS5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBjb3B5U3RhdHVzRGVzY3JpcHRpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuY29weVN0YXR1c0Rlc2NyaXB0aW9uO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXaGVuIGEgYmxvYiBpcyBsZWFzZWQsXG4gICAgICogc3BlY2lmaWVzIHdoZXRoZXIgdGhlIGxlYXNlIGlzIG9mIGluZmluaXRlIG9yIGZpeGVkIGR1cmF0aW9uLiBQb3NzaWJsZVxuICAgICAqIHZhbHVlcyBpbmNsdWRlOiAnaW5maW5pdGUnLCAnZml4ZWQnLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGxlYXNlRHVyYXRpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UubGVhc2VEdXJhdGlvbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTGVhc2Ugc3RhdGUgb2YgdGhlIGJsb2IuIFBvc3NpYmxlXG4gICAgICogdmFsdWVzIGluY2x1ZGU6ICdhdmFpbGFibGUnLCAnbGVhc2VkJywgJ2V4cGlyZWQnLCAnYnJlYWtpbmcnLCAnYnJva2VuJy5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBsZWFzZVN0YXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmxlYXNlU3RhdGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IGxlYXNlIHN0YXR1cyBvZiB0aGVcbiAgICAgKiBibG9iLiBQb3NzaWJsZSB2YWx1ZXMgaW5jbHVkZTogJ2xvY2tlZCcsICd1bmxvY2tlZCcuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgbGVhc2VTdGF0dXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UubGVhc2VTdGF0dXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEEgVVRDIGRhdGUvdGltZSB2YWx1ZSBnZW5lcmF0ZWQgYnkgdGhlIHNlcnZpY2UgdGhhdFxuICAgICAqIGluZGljYXRlcyB0aGUgdGltZSBhdCB3aGljaCB0aGUgcmVzcG9uc2Ugd2FzIGluaXRpYXRlZC5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBkYXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmRhdGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2YgY29tbWl0dGVkIGJsb2Nrc1xuICAgICAqIHByZXNlbnQgaW4gdGhlIGJsb2IuIFRoaXMgaGVhZGVyIGlzIHJldHVybmVkIG9ubHkgZm9yIGFwcGVuZCBibG9icy5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBibG9iQ29tbWl0dGVkQmxvY2tDb3VudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5ibG9iQ29tbWl0dGVkQmxvY2tDb3VudDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIEVUYWcgY29udGFpbnMgYSB2YWx1ZSB0aGF0IHlvdSBjYW4gdXNlIHRvXG4gICAgICogcGVyZm9ybSBvcGVyYXRpb25zIGNvbmRpdGlvbmFsbHksIGluIHF1b3Rlcy5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBldGFnKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmV0YWc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2YgdGFncyBhc3NvY2lhdGVkIHdpdGggdGhlIGJsb2JcbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCB0YWdDb3VudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS50YWdDb3VudDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGVycm9yIGNvZGUuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgZXJyb3JDb2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmVycm9yQ29kZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIHZhbHVlIG9mIHRoaXMgaGVhZGVyIGlzIHNldCB0b1xuICAgICAqIHRydWUgaWYgdGhlIGZpbGUgZGF0YSBhbmQgYXBwbGljYXRpb24gbWV0YWRhdGEgYXJlIGNvbXBsZXRlbHkgZW5jcnlwdGVkXG4gICAgICogdXNpbmcgdGhlIHNwZWNpZmllZCBhbGdvcml0aG0uIE90aGVyd2lzZSwgdGhlIHZhbHVlIGlzIHNldCB0byBmYWxzZSAod2hlblxuICAgICAqIHRoZSBmaWxlIGlzIHVuZW5jcnlwdGVkLCBvciBpZiBvbmx5IHBhcnRzIG9mIHRoZSBmaWxlL2FwcGxpY2F0aW9uIG1ldGFkYXRhXG4gICAgICogYXJlIGVuY3J5cHRlZCkuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgaXNTZXJ2ZXJFbmNyeXB0ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuaXNTZXJ2ZXJFbmNyeXB0ZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElmIHRoZSBibG9iIGhhcyBhIE1ENSBoYXNoLCBhbmQgaWZcbiAgICAgKiByZXF1ZXN0IGNvbnRhaW5zIHJhbmdlIGhlYWRlciAoUmFuZ2Ugb3IgeC1tcy1yYW5nZSksIHRoaXMgcmVzcG9uc2UgaGVhZGVyXG4gICAgICogaXMgcmV0dXJuZWQgd2l0aCB0aGUgdmFsdWUgb2YgdGhlIHdob2xlIGJsb2IncyBNRDUgdmFsdWUuIFRoaXMgdmFsdWUgbWF5XG4gICAgICogb3IgbWF5IG5vdCBiZSBlcXVhbCB0byB0aGUgdmFsdWUgcmV0dXJuZWQgaW4gQ29udGVudC1NRDUgaGVhZGVyLCB3aXRoIHRoZVxuICAgICAqIGxhdHRlciBjYWxjdWxhdGVkIGZyb20gdGhlIHJlcXVlc3RlZCByYW5nZS5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBibG9iQ29udGVudE1ENSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5ibG9iQ29udGVudE1ENTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZGF0ZSBhbmQgdGltZSB0aGUgZmlsZSB3YXMgbGFzdFxuICAgICAqIG1vZGlmaWVkLiBBbnkgb3BlcmF0aW9uIHRoYXQgbW9kaWZpZXMgdGhlIGZpbGUgb3IgaXRzIHByb3BlcnRpZXMgdXBkYXRlc1xuICAgICAqIHRoZSBsYXN0IG1vZGlmaWVkIHRpbWUuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgbGFzdE1vZGlmaWVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmxhc3RNb2RpZmllZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgVVRDIGRhdGUgYW5kIHRpbWUgZ2VuZXJhdGVkIGJ5IHRoZSBzZXJ2aWNlIHRoYXQgaW5kaWNhdGVzIHRoZSB0aW1lIGF0IHdoaWNoIHRoZSBibG9iIHdhc1xuICAgICAqIGxhc3QgcmVhZCBvciB3cml0dGVuIHRvLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGxhc3RBY2Nlc3NlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5sYXN0QWNjZXNzZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGRhdGUgYW5kIHRpbWUgdGhlIGJsb2Igd2FzIGNyZWF0ZWQuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY3JlYXRlZE9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNyZWF0ZWRPbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQSBuYW1lLXZhbHVlIHBhaXJcbiAgICAgKiB0byBhc3NvY2lhdGUgd2l0aCBhIGZpbGUgc3RvcmFnZSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgbWV0YWRhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UubWV0YWRhdGE7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoaXMgaGVhZGVyIHVuaXF1ZWx5IGlkZW50aWZpZXMgdGhlIHJlcXVlc3RcbiAgICAgKiB0aGF0IHdhcyBtYWRlIGFuZCBjYW4gYmUgdXNlZCBmb3IgdHJvdWJsZXNob290aW5nIHRoZSByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IHJlcXVlc3RJZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5yZXF1ZXN0SWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElmIGEgY2xpZW50IHJlcXVlc3QgaWQgaGVhZGVyIGlzIHNlbnQgaW4gdGhlIHJlcXVlc3QsIHRoaXMgaGVhZGVyIHdpbGwgYmUgcHJlc2VudCBpbiB0aGVcbiAgICAgKiByZXNwb25zZSB3aXRoIHRoZSBzYW1lIHZhbHVlLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNsaWVudFJlcXVlc3RJZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5jbGllbnRSZXF1ZXN0SWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB0aGUgdmVyc2lvbiBvZiB0aGUgQmxvYiBzZXJ2aWNlIHVzZWRcbiAgICAgKiB0byBleGVjdXRlIHRoZSByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IHZlcnNpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UudmVyc2lvbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHRoZSB2ZXJzaW9uSWQgb2YgdGhlIGRvd25sb2FkZWQgYmxvYiB2ZXJzaW9uLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IHZlcnNpb25JZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS52ZXJzaW9uSWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHZlcnNpb24gb2YgdGhpcyBibG9iIGlzIGEgY3VycmVudCB2ZXJzaW9uLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGlzQ3VycmVudFZlcnNpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuaXNDdXJyZW50VmVyc2lvbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIFNIQS0yNTYgaGFzaCBvZiB0aGUgZW5jcnlwdGlvbiBrZXkgdXNlZCB0byBlbmNyeXB0IHRoZSBibG9iLiBUaGlzIHZhbHVlIGlzIG9ubHkgcmV0dXJuZWRcbiAgICAgKiB3aGVuIHRoZSBibG9iIHdhcyBlbmNyeXB0ZWQgd2l0aCBhIGN1c3RvbWVyLXByb3ZpZGVkIGtleS5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBlbmNyeXB0aW9uS2V5U2hhMjU2KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmVuY3J5cHRpb25LZXlTaGEyNTY7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElmIHRoZSByZXF1ZXN0IGlzIHRvIHJlYWQgYSBzcGVjaWZpZWQgcmFuZ2UgYW5kIHRoZSB4LW1zLXJhbmdlLWdldC1jb250ZW50LWNyYzY0IGlzIHNldCB0b1xuICAgICAqIHRydWUsIHRoZW4gdGhlIHJlcXVlc3QgcmV0dXJucyBhIGNyYzY0IGZvciB0aGUgcmFuZ2UsIGFzIGxvbmcgYXMgdGhlIHJhbmdlIHNpemUgaXMgbGVzcyB0aGFuXG4gICAgICogb3IgZXF1YWwgdG8gNCBNQi4gSWYgYm90aCB4LW1zLXJhbmdlLWdldC1jb250ZW50LWNyYzY0ICYgeC1tcy1yYW5nZS1nZXQtY29udGVudC1tZDUgaXNcbiAgICAgKiBzcGVjaWZpZWQgaW4gdGhlIHNhbWUgcmVxdWVzdCwgaXQgd2lsbCBmYWlsIHdpdGggNDAwKEJhZCBSZXF1ZXN0KVxuICAgICAqL1xuICAgIGdldCBjb250ZW50Q3JjNjQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuY29udGVudENyYzY0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBPYmplY3QgUmVwbGljYXRpb24gUG9saWN5IElkIG9mIHRoZSBkZXN0aW5hdGlvbiBibG9iLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IG9iamVjdFJlcGxpY2F0aW9uRGVzdGluYXRpb25Qb2xpY3lJZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5vYmplY3RSZXBsaWNhdGlvbkRlc3RpbmF0aW9uUG9saWN5SWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFBhcnNlZCBPYmplY3QgUmVwbGljYXRpb24gUG9saWN5IElkLCBSdWxlIElkKHMpIGFuZCBzdGF0dXMgb2YgdGhlIHNvdXJjZSBibG9iLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IG9iamVjdFJlcGxpY2F0aW9uU291cmNlUHJvcGVydGllcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5vYmplY3RSZXBsaWNhdGlvblNvdXJjZVByb3BlcnRpZXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElmIHRoaXMgYmxvYiBoYXMgYmVlbiBzZWFsZWQuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgaXNTZWFsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuaXNTZWFsZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFVUQyBkYXRlL3RpbWUgdmFsdWUgZ2VuZXJhdGVkIGJ5IHRoZSBzZXJ2aWNlIHRoYXQgaW5kaWNhdGVzIHRoZSB0aW1lIGF0IHdoaWNoIHRoZSBibG9iIGltbXV0YWJpbGl0eSBwb2xpY3kgd2lsbCBleHBpcmUuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgaW1tdXRhYmlsaXR5UG9saWN5RXhwaXJlc09uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmltbXV0YWJpbGl0eVBvbGljeUV4cGlyZXNPbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIGltbXV0YWJpbGl0eSBwb2xpY3kgbW9kZS5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBpbW11dGFiaWxpdHlQb2xpY3lNb2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmltbXV0YWJpbGl0eVBvbGljeU1vZGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyBpZiBhIGxlZ2FsIGhvbGQgaXMgcHJlc2VudCBvbiB0aGUgYmxvYi5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBsZWdhbEhvbGQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UubGVnYWxIb2xkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzcG9uc2UgYm9keSBhcyBhIGJyb3dzZXIgQmxvYi5cbiAgICAgKiBBbHdheXMgdW5kZWZpbmVkIGluIG5vZGUuanMuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY29udGVudEFzQmxvYigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5ibG9iQm9keTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIHJlc3BvbnNlIGJvZHkgYXMgYSBub2RlLmpzIFJlYWRhYmxlIHN0cmVhbS5cbiAgICAgKiBBbHdheXMgdW5kZWZpbmVkIGluIHRoZSBicm93c2VyLlxuICAgICAqXG4gICAgICogSXQgd2lsbCBhdXRvbWF0aWNhbGx5IHJldHJ5IHdoZW4gaW50ZXJuYWwgcmVhZCBzdHJlYW0gdW5leHBlY3RlZCBlbmRzLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IHJlYWRhYmxlU3RyZWFtQm9keSgpIHtcbiAgICAgICAgcmV0dXJuIGNvcmVVdGlsLmlzTm9kZSA/IHRoaXMuYmxvYkRvd25sb2FkU3RyZWFtIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgSFRUUCByZXNwb25zZS5cbiAgICAgKi9cbiAgICBnZXQgX3Jlc3BvbnNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLl9yZXNwb25zZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBCbG9iRG93bmxvYWRSZXNwb25zZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcmlnaW5hbFJlc3BvbnNlIC1cbiAgICAgKiBAcGFyYW0gZ2V0dGVyIC1cbiAgICAgKiBAcGFyYW0gb2Zmc2V0IC1cbiAgICAgKiBAcGFyYW0gY291bnQgLVxuICAgICAqIEBwYXJhbSBvcHRpb25zIC1cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihvcmlnaW5hbFJlc3BvbnNlLCBnZXR0ZXIsIG9mZnNldCwgY291bnQsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICB0aGlzLm9yaWdpbmFsUmVzcG9uc2UgPSBvcmlnaW5hbFJlc3BvbnNlO1xuICAgICAgICB0aGlzLmJsb2JEb3dubG9hZFN0cmVhbSA9IG5ldyBSZXRyaWFibGVSZWFkYWJsZVN0cmVhbSh0aGlzLm9yaWdpbmFsUmVzcG9uc2UucmVhZGFibGVTdHJlYW1Cb2R5LCBnZXR0ZXIsIG9mZnNldCwgY291bnQsIG9wdGlvbnMpO1xuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5jb25zdCBBVlJPX1NZTkNfTUFSS0VSX1NJWkUgPSAxNjtcbmNvbnN0IEFWUk9fSU5JVF9CWVRFUyA9IG5ldyBVaW50OEFycmF5KFs3OSwgOTgsIDEwNiwgMV0pO1xuY29uc3QgQVZST19DT0RFQ19LRVkgPSBcImF2cm8uY29kZWNcIjtcbmNvbnN0IEFWUk9fU0NIRU1BX0tFWSA9IFwiYXZyby5zY2hlbWFcIjtcblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5jbGFzcyBBdnJvUGFyc2VyIHtcbiAgICAvKipcbiAgICAgKiBSZWFkcyBhIGZpeGVkIG51bWJlciBvZiBieXRlcyBmcm9tIHRoZSBzdHJlYW0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc3RyZWFtIC1cbiAgICAgKiBAcGFyYW0gbGVuZ3RoIC1cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtXG4gICAgICovXG4gICAgc3RhdGljIGFzeW5jIHJlYWRGaXhlZEJ5dGVzKHN0cmVhbSwgbGVuZ3RoLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgYnl0ZXMgPSBhd2FpdCBzdHJlYW0ucmVhZChsZW5ndGgsIHsgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwgfSk7XG4gICAgICAgIGlmIChieXRlcy5sZW5ndGggIT09IGxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSGl0IHN0cmVhbSBlbmQuXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBieXRlcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVhZHMgYSBzaW5nbGUgYnl0ZSBmcm9tIHRoZSBzdHJlYW0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc3RyZWFtIC1cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtXG4gICAgICovXG4gICAgc3RhdGljIGFzeW5jIHJlYWRCeXRlKHN0cmVhbSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IGJ1ZiA9IGF3YWl0IEF2cm9QYXJzZXIucmVhZEZpeGVkQnl0ZXMoc3RyZWFtLCAxLCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIGJ1ZlswXTtcbiAgICB9XG4gICAgLy8gaW50IGFuZCBsb25nIGFyZSBzdG9yZWQgaW4gdmFyaWFibGUtbGVuZ3RoIHppZy16YWcgY29kaW5nLlxuICAgIC8vIHZhcmlhYmxlLWxlbmd0aDogaHR0cHM6Ly9sdWNlbmUuYXBhY2hlLm9yZy9jb3JlLzNfNV8wL2ZpbGVmb3JtYXRzLmh0bWwjVkludFxuICAgIC8vIHppZy16YWc6IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvZG9jcy9lbmNvZGluZz9jc3c9MSN0eXBlc1xuICAgIHN0YXRpYyBhc3luYyByZWFkWmlnWmFnTG9uZyhzdHJlYW0sIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBsZXQgemlnWmFnRW5jb2RlZCA9IDA7XG4gICAgICAgIGxldCBzaWduaWZpY2FuY2VJbkJpdCA9IDA7XG4gICAgICAgIGxldCBieXRlLCBoYXZlTW9yZUJ5dGUsIHNpZ25pZmljYW5jZUluRmxvYXQ7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGJ5dGUgPSBhd2FpdCBBdnJvUGFyc2VyLnJlYWRCeXRlKHN0cmVhbSwgb3B0aW9ucyk7XG4gICAgICAgICAgICBoYXZlTW9yZUJ5dGUgPSBieXRlICYgMHg4MDtcbiAgICAgICAgICAgIHppZ1phZ0VuY29kZWQgfD0gKGJ5dGUgJiAweDdmKSA8PCBzaWduaWZpY2FuY2VJbkJpdDtcbiAgICAgICAgICAgIHNpZ25pZmljYW5jZUluQml0ICs9IDc7XG4gICAgICAgIH0gd2hpbGUgKGhhdmVNb3JlQnl0ZSAmJiBzaWduaWZpY2FuY2VJbkJpdCA8IDI4KTsgLy8gYml0d2lzZSBvcGVyYXRpb24gb25seSB3b3JrcyBmb3IgMzItYml0IGludGVnZXJzXG4gICAgICAgIGlmIChoYXZlTW9yZUJ5dGUpIHtcbiAgICAgICAgICAgIC8vIFN3aXRjaCB0byBmbG9hdCBhcml0aG1ldGljXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1hc3NpZ25cbiAgICAgICAgICAgIHppZ1phZ0VuY29kZWQgPSB6aWdaYWdFbmNvZGVkO1xuICAgICAgICAgICAgc2lnbmlmaWNhbmNlSW5GbG9hdCA9IDI2ODQzNTQ1NjsgLy8gMiAqKiAyOC5cbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICBieXRlID0gYXdhaXQgQXZyb1BhcnNlci5yZWFkQnl0ZShzdHJlYW0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIHppZ1phZ0VuY29kZWQgKz0gKGJ5dGUgJiAweDdmKSAqIHNpZ25pZmljYW5jZUluRmxvYXQ7XG4gICAgICAgICAgICAgICAgc2lnbmlmaWNhbmNlSW5GbG9hdCAqPSAxMjg7IC8vIDIgKiogN1xuICAgICAgICAgICAgfSB3aGlsZSAoYnl0ZSAmIDB4ODApO1xuICAgICAgICAgICAgY29uc3QgcmVzID0gKHppZ1phZ0VuY29kZWQgJSAyID8gLSh6aWdaYWdFbmNvZGVkICsgMSkgOiB6aWdaYWdFbmNvZGVkKSAvIDI7XG4gICAgICAgICAgICBpZiAocmVzIDwgTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIgfHwgcmVzID4gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnRlZ2VyIG92ZXJmbG93LlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICh6aWdaYWdFbmNvZGVkID4+IDEpIF4gLSh6aWdaYWdFbmNvZGVkICYgMSk7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyByZWFkTG9uZyhzdHJlYW0sIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gQXZyb1BhcnNlci5yZWFkWmlnWmFnTG9uZyhzdHJlYW0sIG9wdGlvbnMpO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgcmVhZEludChzdHJlYW0sIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gQXZyb1BhcnNlci5yZWFkWmlnWmFnTG9uZyhzdHJlYW0sIG9wdGlvbnMpO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgcmVhZE51bGwoKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgcmVhZEJvb2xlYW4oc3RyZWFtLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgYiA9IGF3YWl0IEF2cm9QYXJzZXIucmVhZEJ5dGUoc3RyZWFtLCBvcHRpb25zKTtcbiAgICAgICAgaWYgKGIgPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGIgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJ5dGUgd2FzIG5vdCBhIGJvb2xlYW4uXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyByZWFkRmxvYXQoc3RyZWFtLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgdThhcnIgPSBhd2FpdCBBdnJvUGFyc2VyLnJlYWRGaXhlZEJ5dGVzKHN0cmVhbSwgNCwgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHZpZXcgPSBuZXcgRGF0YVZpZXcodThhcnIuYnVmZmVyLCB1OGFyci5ieXRlT2Zmc2V0LCB1OGFyci5ieXRlTGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIHZpZXcuZ2V0RmxvYXQzMigwLCB0cnVlKTsgLy8gbGl0dGxlRW5kaWFuID0gdHJ1ZVxuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgcmVhZERvdWJsZShzdHJlYW0sIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCB1OGFyciA9IGF3YWl0IEF2cm9QYXJzZXIucmVhZEZpeGVkQnl0ZXMoc3RyZWFtLCA4LCBvcHRpb25zKTtcbiAgICAgICAgY29uc3QgdmlldyA9IG5ldyBEYXRhVmlldyh1OGFyci5idWZmZXIsIHU4YXJyLmJ5dGVPZmZzZXQsIHU4YXJyLmJ5dGVMZW5ndGgpO1xuICAgICAgICByZXR1cm4gdmlldy5nZXRGbG9hdDY0KDAsIHRydWUpOyAvLyBsaXR0bGVFbmRpYW4gPSB0cnVlXG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyByZWFkQnl0ZXMoc3RyZWFtLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IGF3YWl0IEF2cm9QYXJzZXIucmVhZExvbmcoc3RyZWFtLCBvcHRpb25zKTtcbiAgICAgICAgaWYgKHNpemUgPCAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCeXRlcyBzaXplIHdhcyBuZWdhdGl2ZS5cIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0cmVhbS5yZWFkKHNpemUsIHsgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwgfSk7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyByZWFkU3RyaW5nKHN0cmVhbSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHU4YXJyID0gYXdhaXQgQXZyb1BhcnNlci5yZWFkQnl0ZXMoc3RyZWFtLCBvcHRpb25zKTtcbiAgICAgICAgY29uc3QgdXRmOGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKTtcbiAgICAgICAgcmV0dXJuIHV0ZjhkZWNvZGVyLmRlY29kZSh1OGFycik7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyByZWFkTWFwUGFpcihzdHJlYW0sIHJlYWRJdGVtTWV0aG9kLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3Qga2V5ID0gYXdhaXQgQXZyb1BhcnNlci5yZWFkU3RyaW5nKHN0cmVhbSwgb3B0aW9ucyk7XG4gICAgICAgIC8vIEZVVFVSRTogdGhpcyB3b24ndCB3b3JrIHdpdGggcmVhZEZpeGVkIChjdXJyZW50bHkgbm90IHN1cHBvcnRlZCkgd2hpY2ggbmVlZHMgYSBsZW5ndGggYXMgdGhlIHBhcmFtZXRlci5cbiAgICAgICAgY29uc3QgdmFsdWUgPSBhd2FpdCByZWFkSXRlbU1ldGhvZChzdHJlYW0sIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4geyBrZXksIHZhbHVlIH07XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyByZWFkTWFwKHN0cmVhbSwgcmVhZEl0ZW1NZXRob2QsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCByZWFkUGFpck1ldGhvZCA9IChzLCBvcHRzID0ge30pID0+IHtcbiAgICAgICAgICAgIHJldHVybiBBdnJvUGFyc2VyLnJlYWRNYXBQYWlyKHMsIHJlYWRJdGVtTWV0aG9kLCBvcHRzKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcGFpcnMgPSBhd2FpdCBBdnJvUGFyc2VyLnJlYWRBcnJheShzdHJlYW0sIHJlYWRQYWlyTWV0aG9kLCBvcHRpb25zKTtcbiAgICAgICAgY29uc3QgZGljdCA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IHBhaXIgb2YgcGFpcnMpIHtcbiAgICAgICAgICAgIGRpY3RbcGFpci5rZXldID0gcGFpci52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGljdDtcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIHJlYWRBcnJheShzdHJlYW0sIHJlYWRJdGVtTWV0aG9kLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgaXRlbXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgY291bnQgPSBhd2FpdCBBdnJvUGFyc2VyLnJlYWRMb25nKHN0cmVhbSwgb3B0aW9ucyk7IGNvdW50ICE9PSAwOyBjb3VudCA9IGF3YWl0IEF2cm9QYXJzZXIucmVhZExvbmcoc3RyZWFtLCBvcHRpb25zKSkge1xuICAgICAgICAgICAgaWYgKGNvdW50IDwgMCkge1xuICAgICAgICAgICAgICAgIC8vIElnbm9yZSBibG9jayBzaXplc1xuICAgICAgICAgICAgICAgIGF3YWl0IEF2cm9QYXJzZXIucmVhZExvbmcoc3RyZWFtLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICBjb3VudCA9IC1jb3VudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdoaWxlIChjb3VudC0tKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IGF3YWl0IHJlYWRJdGVtTWV0aG9kKHN0cmVhbSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgaXRlbXMucHVzaChpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgfVxufVxudmFyIEF2cm9Db21wbGV4O1xuKGZ1bmN0aW9uIChBdnJvQ29tcGxleCkge1xuICAgIEF2cm9Db21wbGV4W1wiUkVDT1JEXCJdID0gXCJyZWNvcmRcIjtcbiAgICBBdnJvQ29tcGxleFtcIkVOVU1cIl0gPSBcImVudW1cIjtcbiAgICBBdnJvQ29tcGxleFtcIkFSUkFZXCJdID0gXCJhcnJheVwiO1xuICAgIEF2cm9Db21wbGV4W1wiTUFQXCJdID0gXCJtYXBcIjtcbiAgICBBdnJvQ29tcGxleFtcIlVOSU9OXCJdID0gXCJ1bmlvblwiO1xuICAgIEF2cm9Db21wbGV4W1wiRklYRURcIl0gPSBcImZpeGVkXCI7XG59KShBdnJvQ29tcGxleCB8fCAoQXZyb0NvbXBsZXggPSB7fSkpO1xudmFyIEF2cm9QcmltaXRpdmU7XG4oZnVuY3Rpb24gKEF2cm9QcmltaXRpdmUpIHtcbiAgICBBdnJvUHJpbWl0aXZlW1wiTlVMTFwiXSA9IFwibnVsbFwiO1xuICAgIEF2cm9QcmltaXRpdmVbXCJCT09MRUFOXCJdID0gXCJib29sZWFuXCI7XG4gICAgQXZyb1ByaW1pdGl2ZVtcIklOVFwiXSA9IFwiaW50XCI7XG4gICAgQXZyb1ByaW1pdGl2ZVtcIkxPTkdcIl0gPSBcImxvbmdcIjtcbiAgICBBdnJvUHJpbWl0aXZlW1wiRkxPQVRcIl0gPSBcImZsb2F0XCI7XG4gICAgQXZyb1ByaW1pdGl2ZVtcIkRPVUJMRVwiXSA9IFwiZG91YmxlXCI7XG4gICAgQXZyb1ByaW1pdGl2ZVtcIkJZVEVTXCJdID0gXCJieXRlc1wiO1xuICAgIEF2cm9QcmltaXRpdmVbXCJTVFJJTkdcIl0gPSBcInN0cmluZ1wiO1xufSkoQXZyb1ByaW1pdGl2ZSB8fCAoQXZyb1ByaW1pdGl2ZSA9IHt9KSk7XG5jbGFzcyBBdnJvVHlwZSB7XG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lcyB0aGUgQXZyb1R5cGUgZnJvbSB0aGUgQXZybyBTY2hlbWEuXG4gICAgICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby13cmFwcGVyLW9iamVjdC10eXBlc1xuICAgIHN0YXRpYyBmcm9tU2NoZW1hKHNjaGVtYSkge1xuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIEF2cm9UeXBlLmZyb21TdHJpbmdTY2hlbWEoc2NoZW1hKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHNjaGVtYSkpIHtcbiAgICAgICAgICAgIHJldHVybiBBdnJvVHlwZS5mcm9tQXJyYXlTY2hlbWEoc2NoZW1hKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBBdnJvVHlwZS5mcm9tT2JqZWN0U2NoZW1hKHNjaGVtYSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGZyb21TdHJpbmdTY2hlbWEoc2NoZW1hKSB7XG4gICAgICAgIHN3aXRjaCAoc2NoZW1hKSB7XG4gICAgICAgICAgICBjYXNlIEF2cm9QcmltaXRpdmUuTlVMTDpcbiAgICAgICAgICAgIGNhc2UgQXZyb1ByaW1pdGl2ZS5CT09MRUFOOlxuICAgICAgICAgICAgY2FzZSBBdnJvUHJpbWl0aXZlLklOVDpcbiAgICAgICAgICAgIGNhc2UgQXZyb1ByaW1pdGl2ZS5MT05HOlxuICAgICAgICAgICAgY2FzZSBBdnJvUHJpbWl0aXZlLkZMT0FUOlxuICAgICAgICAgICAgY2FzZSBBdnJvUHJpbWl0aXZlLkRPVUJMRTpcbiAgICAgICAgICAgIGNhc2UgQXZyb1ByaW1pdGl2ZS5CWVRFUzpcbiAgICAgICAgICAgIGNhc2UgQXZyb1ByaW1pdGl2ZS5TVFJJTkc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBdnJvUHJpbWl0aXZlVHlwZShzY2hlbWEpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgQXZybyB0eXBlICR7c2NoZW1hfWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBmcm9tQXJyYXlTY2hlbWEoc2NoZW1hKSB7XG4gICAgICAgIHJldHVybiBuZXcgQXZyb1VuaW9uVHlwZShzY2hlbWEubWFwKEF2cm9UeXBlLmZyb21TY2hlbWEpKTtcbiAgICB9XG4gICAgc3RhdGljIGZyb21PYmplY3RTY2hlbWEoc2NoZW1hKSB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSBzY2hlbWEudHlwZTtcbiAgICAgICAgLy8gUHJpbWl0aXZlcyBjYW4gYmUgZGVmaW5lZCBhcyBzdHJpbmdzIG9yIG9iamVjdHNcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBBdnJvVHlwZS5mcm9tU3RyaW5nU2NoZW1hKHR5cGUpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChfYSkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSBBdnJvQ29tcGxleC5SRUNPUkQ6XG4gICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5hbGlhc2VzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgYWxpYXNlcyBjdXJyZW50bHkgaXMgbm90IHN1cHBvcnRlZCwgc2NoZW1hOiAke3NjaGVtYX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFzY2hlbWEubmFtZSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFJlcXVpcmVkIGF0dHJpYnV0ZSAnbmFtZScgZG9lc24ndCBleGlzdCBvbiBzY2hlbWE6ICR7c2NoZW1hfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY2FzZS1kZWNsYXJhdGlvbnNcbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZHMgPSB7fTtcbiAgICAgICAgICAgICAgICBpZiAoIXNjaGVtYS5maWVsZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBSZXF1aXJlZCBhdHRyaWJ1dGUgJ2ZpZWxkcycgZG9lc24ndCBleGlzdCBvbiBzY2hlbWE6ICR7c2NoZW1hfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIHNjaGVtYS5maWVsZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGRzW2ZpZWxkLm5hbWVdID0gQXZyb1R5cGUuZnJvbVNjaGVtYShmaWVsZC50eXBlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBdnJvUmVjb3JkVHlwZShmaWVsZHMsIHNjaGVtYS5uYW1lKTtcbiAgICAgICAgICAgIGNhc2UgQXZyb0NvbXBsZXguRU5VTTpcbiAgICAgICAgICAgICAgICBpZiAoc2NoZW1hLmFsaWFzZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBhbGlhc2VzIGN1cnJlbnRseSBpcyBub3Qgc3VwcG9ydGVkLCBzY2hlbWE6ICR7c2NoZW1hfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXNjaGVtYS5zeW1ib2xzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUmVxdWlyZWQgYXR0cmlidXRlICdzeW1ib2xzJyBkb2Vzbid0IGV4aXN0IG9uIHNjaGVtYTogJHtzY2hlbWF9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQXZyb0VudW1UeXBlKHNjaGVtYS5zeW1ib2xzKTtcbiAgICAgICAgICAgIGNhc2UgQXZyb0NvbXBsZXguTUFQOlxuICAgICAgICAgICAgICAgIGlmICghc2NoZW1hLnZhbHVlcykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFJlcXVpcmVkIGF0dHJpYnV0ZSAndmFsdWVzJyBkb2Vzbid0IGV4aXN0IG9uIHNjaGVtYTogJHtzY2hlbWF9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQXZyb01hcFR5cGUoQXZyb1R5cGUuZnJvbVNjaGVtYShzY2hlbWEudmFsdWVzKSk7XG4gICAgICAgICAgICBjYXNlIEF2cm9Db21wbGV4LkFSUkFZOiAvLyBVbnVzZWQgdG9kYXlcbiAgICAgICAgICAgIGNhc2UgQXZyb0NvbXBsZXguRklYRUQ6IC8vIFVudXNlZCB0b2RheVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgQXZybyB0eXBlICR7dHlwZX0gaW4gJHtzY2hlbWF9YCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5jbGFzcyBBdnJvUHJpbWl0aXZlVHlwZSBleHRlbmRzIEF2cm9UeXBlIHtcbiAgICBjb25zdHJ1Y3RvcihwcmltaXRpdmUpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5fcHJpbWl0aXZlID0gcHJpbWl0aXZlO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXdyYXBwZXItb2JqZWN0LXR5cGVzXG4gICAgcmVhZChzdHJlYW0sIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBzd2l0Y2ggKHRoaXMuX3ByaW1pdGl2ZSkge1xuICAgICAgICAgICAgY2FzZSBBdnJvUHJpbWl0aXZlLk5VTEw6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEF2cm9QYXJzZXIucmVhZE51bGwoKTtcbiAgICAgICAgICAgIGNhc2UgQXZyb1ByaW1pdGl2ZS5CT09MRUFOOlxuICAgICAgICAgICAgICAgIHJldHVybiBBdnJvUGFyc2VyLnJlYWRCb29sZWFuKHN0cmVhbSwgb3B0aW9ucyk7XG4gICAgICAgICAgICBjYXNlIEF2cm9QcmltaXRpdmUuSU5UOlxuICAgICAgICAgICAgICAgIHJldHVybiBBdnJvUGFyc2VyLnJlYWRJbnQoc3RyZWFtLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGNhc2UgQXZyb1ByaW1pdGl2ZS5MT05HOlxuICAgICAgICAgICAgICAgIHJldHVybiBBdnJvUGFyc2VyLnJlYWRMb25nKHN0cmVhbSwgb3B0aW9ucyk7XG4gICAgICAgICAgICBjYXNlIEF2cm9QcmltaXRpdmUuRkxPQVQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEF2cm9QYXJzZXIucmVhZEZsb2F0KHN0cmVhbSwgb3B0aW9ucyk7XG4gICAgICAgICAgICBjYXNlIEF2cm9QcmltaXRpdmUuRE9VQkxFOlxuICAgICAgICAgICAgICAgIHJldHVybiBBdnJvUGFyc2VyLnJlYWREb3VibGUoc3RyZWFtLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGNhc2UgQXZyb1ByaW1pdGl2ZS5CWVRFUzpcbiAgICAgICAgICAgICAgICByZXR1cm4gQXZyb1BhcnNlci5yZWFkQnl0ZXMoc3RyZWFtLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGNhc2UgQXZyb1ByaW1pdGl2ZS5TVFJJTkc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEF2cm9QYXJzZXIucmVhZFN0cmluZyhzdHJlYW0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIEF2cm8gUHJpbWl0aXZlXCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuY2xhc3MgQXZyb0VudW1UeXBlIGV4dGVuZHMgQXZyb1R5cGUge1xuICAgIGNvbnN0cnVjdG9yKHN5bWJvbHMpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5fc3ltYm9scyA9IHN5bWJvbHM7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8td3JhcHBlci1vYmplY3QtdHlwZXNcbiAgICBhc3luYyByZWFkKHN0cmVhbSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgQXZyb1BhcnNlci5yZWFkSW50KHN0cmVhbSwgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiB0aGlzLl9zeW1ib2xzW3ZhbHVlXTtcbiAgICB9XG59XG5jbGFzcyBBdnJvVW5pb25UeXBlIGV4dGVuZHMgQXZyb1R5cGUge1xuICAgIGNvbnN0cnVjdG9yKHR5cGVzKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuX3R5cGVzID0gdHlwZXM7XG4gICAgfVxuICAgIGFzeW5jIHJlYWQoc3RyZWFtLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgdHlwZUluZGV4ID0gYXdhaXQgQXZyb1BhcnNlci5yZWFkSW50KHN0cmVhbSwgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiB0aGlzLl90eXBlc1t0eXBlSW5kZXhdLnJlYWQoc3RyZWFtLCBvcHRpb25zKTtcbiAgICB9XG59XG5jbGFzcyBBdnJvTWFwVHlwZSBleHRlbmRzIEF2cm9UeXBlIHtcbiAgICBjb25zdHJ1Y3RvcihpdGVtVHlwZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLl9pdGVtVHlwZSA9IGl0ZW1UeXBlO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXdyYXBwZXItb2JqZWN0LXR5cGVzXG4gICAgcmVhZChzdHJlYW0sIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCByZWFkSXRlbU1ldGhvZCA9IChzLCBvcHRzKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faXRlbVR5cGUucmVhZChzLCBvcHRzKTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIEF2cm9QYXJzZXIucmVhZE1hcChzdHJlYW0sIHJlYWRJdGVtTWV0aG9kLCBvcHRpb25zKTtcbiAgICB9XG59XG5jbGFzcyBBdnJvUmVjb3JkVHlwZSBleHRlbmRzIEF2cm9UeXBlIHtcbiAgICBjb25zdHJ1Y3RvcihmaWVsZHMsIG5hbWUpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5fZmllbGRzID0gZmllbGRzO1xuICAgICAgICB0aGlzLl9uYW1lID0gbmFtZTtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby13cmFwcGVyLW9iamVjdC10eXBlc1xuICAgIGFzeW5jIHJlYWQoc3RyZWFtLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby13cmFwcGVyLW9iamVjdC10eXBlc1xuICAgICAgICBjb25zdCByZWNvcmQgPSB7fTtcbiAgICAgICAgcmVjb3JkW1wiJHNjaGVtYVwiXSA9IHRoaXMuX25hbWU7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuX2ZpZWxkcykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLl9maWVsZHMsIGtleSkpIHtcbiAgICAgICAgICAgICAgICByZWNvcmRba2V5XSA9IGF3YWl0IHRoaXMuX2ZpZWxkc1trZXldLnJlYWQoc3RyZWFtLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVjb3JkO1xuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5mdW5jdGlvbiBhcnJheXNFcXVhbChhLCBiKSB7XG4gICAgaWYgKGEgPT09IGIpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcbiAgICBpZiAoYSA9PSBudWxsIHx8IGIgPT0gbnVsbClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKGFbaV0gIT09IGJbaV0pXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbmNsYXNzIEF2cm9SZWFkZXIge1xuICAgIGdldCBibG9ja09mZnNldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Jsb2NrT2Zmc2V0O1xuICAgIH1cbiAgICBnZXQgb2JqZWN0SW5kZXgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vYmplY3RJbmRleDtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoZGF0YVN0cmVhbSwgaGVhZGVyU3RyZWFtLCBjdXJyZW50QmxvY2tPZmZzZXQsIGluZGV4V2l0aGluQ3VycmVudEJsb2NrKSB7XG4gICAgICAgIHRoaXMuX2RhdGFTdHJlYW0gPSBkYXRhU3RyZWFtO1xuICAgICAgICB0aGlzLl9oZWFkZXJTdHJlYW0gPSBoZWFkZXJTdHJlYW0gfHwgZGF0YVN0cmVhbTtcbiAgICAgICAgdGhpcy5faW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fYmxvY2tPZmZzZXQgPSBjdXJyZW50QmxvY2tPZmZzZXQgfHwgMDtcbiAgICAgICAgdGhpcy5fb2JqZWN0SW5kZXggPSBpbmRleFdpdGhpbkN1cnJlbnRCbG9jayB8fCAwO1xuICAgICAgICB0aGlzLl9pbml0aWFsQmxvY2tPZmZzZXQgPSBjdXJyZW50QmxvY2tPZmZzZXQgfHwgMDtcbiAgICB9XG4gICAgYXN5bmMgaW5pdGlhbGl6ZShvcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgaGVhZGVyID0gYXdhaXQgQXZyb1BhcnNlci5yZWFkRml4ZWRCeXRlcyh0aGlzLl9oZWFkZXJTdHJlYW0sIEFWUk9fSU5JVF9CWVRFUy5sZW5ndGgsIHtcbiAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFhcnJheXNFcXVhbChoZWFkZXIsIEFWUk9fSU5JVF9CWVRFUykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlN0cmVhbSBpcyBub3QgYW4gQXZybyBmaWxlLlwiKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBGaWxlIG1ldGFkYXRhIGlzIHdyaXR0ZW4gYXMgaWYgZGVmaW5lZCBieSB0aGUgZm9sbG93aW5nIG1hcCBzY2hlbWE6XG4gICAgICAgIC8vIHsgXCJ0eXBlXCI6IFwibWFwXCIsIFwidmFsdWVzXCI6IFwiYnl0ZXNcIn1cbiAgICAgICAgdGhpcy5fbWV0YWRhdGEgPSBhd2FpdCBBdnJvUGFyc2VyLnJlYWRNYXAodGhpcy5faGVhZGVyU3RyZWFtLCBBdnJvUGFyc2VyLnJlYWRTdHJpbmcsIHtcbiAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gVmFsaWRhdGUgY29kZWNcbiAgICAgICAgY29uc3QgY29kZWMgPSB0aGlzLl9tZXRhZGF0YVtBVlJPX0NPREVDX0tFWV07XG4gICAgICAgIGlmICghKGNvZGVjID09PSB1bmRlZmluZWQgfHwgY29kZWMgPT09IG51bGwgfHwgY29kZWMgPT09IFwibnVsbFwiKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29kZWNzIGFyZSBub3Qgc3VwcG9ydGVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRoZSAxNi1ieXRlLCByYW5kb21seS1nZW5lcmF0ZWQgc3luYyBtYXJrZXIgZm9yIHRoaXMgZmlsZS5cbiAgICAgICAgdGhpcy5fc3luY01hcmtlciA9IGF3YWl0IEF2cm9QYXJzZXIucmVhZEZpeGVkQnl0ZXModGhpcy5faGVhZGVyU3RyZWFtLCBBVlJPX1NZTkNfTUFSS0VSX1NJWkUsIHtcbiAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gUGFyc2UgdGhlIHNjaGVtYVxuICAgICAgICBjb25zdCBzY2hlbWEgPSBKU09OLnBhcnNlKHRoaXMuX21ldGFkYXRhW0FWUk9fU0NIRU1BX0tFWV0pO1xuICAgICAgICB0aGlzLl9pdGVtVHlwZSA9IEF2cm9UeXBlLmZyb21TY2hlbWEoc2NoZW1hKTtcbiAgICAgICAgaWYgKHRoaXMuX2Jsb2NrT2Zmc2V0ID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLl9ibG9ja09mZnNldCA9IHRoaXMuX2luaXRpYWxCbG9ja09mZnNldCArIHRoaXMuX2RhdGFTdHJlYW0ucG9zaXRpb247XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faXRlbXNSZW1haW5pbmdJbkJsb2NrID0gYXdhaXQgQXZyb1BhcnNlci5yZWFkTG9uZyh0aGlzLl9kYXRhU3RyZWFtLCB7XG4gICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIHNraXAgYmxvY2sgbGVuZ3RoXG4gICAgICAgIGF3YWl0IEF2cm9QYXJzZXIucmVhZExvbmcodGhpcy5fZGF0YVN0cmVhbSwgeyBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCB9KTtcbiAgICAgICAgdGhpcy5faW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy5fb2JqZWN0SW5kZXggJiYgdGhpcy5fb2JqZWN0SW5kZXggPiAwKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX29iamVjdEluZGV4OyBpKyspIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9pdGVtVHlwZS5yZWFkKHRoaXMuX2RhdGFTdHJlYW0sIHsgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5faXRlbXNSZW1haW5pbmdJbkJsb2NrLS07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgaGFzTmV4dCgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLl9pbml0aWFsaXplZCB8fCB0aGlzLl9pdGVtc1JlbWFpbmluZ0luQmxvY2sgPiAwO1xuICAgIH1cbiAgICBwYXJzZU9iamVjdHMoKSB7XG4gICAgICAgIHJldHVybiB0c2xpYi5fX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24qIHBhcnNlT2JqZWN0c18xKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9pbml0aWFsaXplZCkge1xuICAgICAgICAgICAgICAgIHlpZWxkIHRzbGliLl9fYXdhaXQodGhpcy5pbml0aWFsaXplKG9wdGlvbnMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdoaWxlICh0aGlzLmhhc05leHQoKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHlpZWxkIHRzbGliLl9fYXdhaXQodGhpcy5faXRlbVR5cGUucmVhZCh0aGlzLl9kYXRhU3RyZWFtLCB7XG4gICAgICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9pdGVtc1JlbWFpbmluZ0luQmxvY2stLTtcbiAgICAgICAgICAgICAgICB0aGlzLl9vYmplY3RJbmRleCsrO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pdGVtc1JlbWFpbmluZ0luQmxvY2sgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFya2VyID0geWllbGQgdHNsaWIuX19hd2FpdChBdnJvUGFyc2VyLnJlYWRGaXhlZEJ5dGVzKHRoaXMuX2RhdGFTdHJlYW0sIEFWUk9fU1lOQ19NQVJLRVJfU0laRSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYmxvY2tPZmZzZXQgPSB0aGlzLl9pbml0aWFsQmxvY2tPZmZzZXQgKyB0aGlzLl9kYXRhU3RyZWFtLnBvc2l0aW9uO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vYmplY3RJbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGlmICghYXJyYXlzRXF1YWwodGhpcy5fc3luY01hcmtlciwgbWFya2VyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU3RyZWFtIGlzIG5vdCBhIHZhbGlkIEF2cm8gZmlsZS5cIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2l0ZW1zUmVtYWluaW5nSW5CbG9jayA9IHlpZWxkIHRzbGliLl9fYXdhaXQoQXZyb1BhcnNlci5yZWFkTG9uZyh0aGlzLl9kYXRhU3RyZWFtLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBoaXQgdGhlIGVuZCBvZiB0aGUgc3RyZWFtLlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faXRlbXNSZW1haW5pbmdJbkJsb2NrID0gMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5faXRlbXNSZW1haW5pbmdJbkJsb2NrID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWdub3JlIGJsb2NrIHNpemVcbiAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIHRzbGliLl9fYXdhaXQoQXZyb1BhcnNlci5yZWFkTG9uZyh0aGlzLl9kYXRhU3RyZWFtLCB7IGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB5aWVsZCB5aWVsZCB0c2xpYi5fX2F3YWl0KHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5jbGFzcyBBdnJvUmVhZGFibGUge1xufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbmNvbnN0IEFCT1JUX0VSUk9SID0gbmV3IGFib3J0Q29udHJvbGxlci5BYm9ydEVycm9yKFwiUmVhZGluZyBmcm9tIHRoZSBhdnJvIHN0cmVhbSB3YXMgYWJvcnRlZC5cIik7XG5jbGFzcyBBdnJvUmVhZGFibGVGcm9tU3RyZWFtIGV4dGVuZHMgQXZyb1JlYWRhYmxlIHtcbiAgICB0b1VpbnQ4QXJyYXkoZGF0YSkge1xuICAgICAgICBpZiAodHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgY29uc3RydWN0b3IocmVhZGFibGUpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5fcmVhZGFibGUgPSByZWFkYWJsZTtcbiAgICAgICAgdGhpcy5fcG9zaXRpb24gPSAwO1xuICAgIH1cbiAgICBnZXQgcG9zaXRpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wb3NpdGlvbjtcbiAgICB9XG4gICAgYXN5bmMgcmVhZChzaXplLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoKF9hID0gb3B0aW9ucy5hYm9ydFNpZ25hbCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmFib3J0ZWQpIHtcbiAgICAgICAgICAgIHRocm93IEFCT1JUX0VSUk9SO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzaXplIDwgMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBzaXplIHBhcmFtZXRlciBzaG91bGQgYmUgcG9zaXRpdmU6ICR7c2l6ZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLl9yZWFkYWJsZS5yZWFkYWJsZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU3RyZWFtIG5vIGxvbmdlciByZWFkYWJsZS5cIik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU2VlIGlmIHRoZXJlIGlzIGFscmVhZHkgZW5vdWdoIGRhdGEuXG4gICAgICAgIGNvbnN0IGNodW5rID0gdGhpcy5fcmVhZGFibGUucmVhZChzaXplKTtcbiAgICAgICAgaWYgKGNodW5rKSB7XG4gICAgICAgICAgICB0aGlzLl9wb3NpdGlvbiArPSBjaHVuay5sZW5ndGg7XG4gICAgICAgICAgICAvLyBjaHVuay5sZW5ndGggbWF5YmUgbGVzcyB0aGFuIGRlc2lyZWQgc2l6ZSBpZiB0aGUgc3RyZWFtIGVuZHMuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy50b1VpbnQ4QXJyYXkoY2h1bmspO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gcmVnaXN0ZXIgY2FsbGJhY2sgdG8gd2FpdCBmb3IgZW5vdWdoIGRhdGEgdG8gcmVhZFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlLWJlZm9yZS1kZWZpbmUgKi9cbiAgICAgICAgICAgICAgICBjb25zdCBjbGVhblVwID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkYWJsZS5yZW1vdmVMaXN0ZW5lcihcInJlYWRhYmxlXCIsIHJlYWRhYmxlQ2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkYWJsZS5yZW1vdmVMaXN0ZW5lcihcImVycm9yXCIsIHJlamVjdENhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZGFibGUucmVtb3ZlTGlzdGVuZXIoXCJlbmRcIiwgcmVqZWN0Q2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkYWJsZS5yZW1vdmVMaXN0ZW5lcihcImNsb3NlXCIsIHJlamVjdENhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYWJvcnRTaWduYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuYWJvcnRTaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIGFib3J0SGFuZGxlcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlYWRhYmxlQ2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhbGxiYWNrQ2h1bmsgPSB0aGlzLl9yZWFkYWJsZS5yZWFkKHNpemUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2tDaHVuaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcG9zaXRpb24gKz0gY2FsbGJhY2tDaHVuay5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGVhblVwKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjYWxsYmFja0NodW5rLmxlbmd0aCBtYXliZSBsZXNzIHRoYW4gZGVzaXJlZCBzaXplIGlmIHRoZSBzdHJlYW0gZW5kcy5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy50b1VpbnQ4QXJyYXkoY2FsbGJhY2tDaHVuaykpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb25zdCByZWplY3RDYWxsYmFjayA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYW5VcCgpO1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGNvbnN0IGFib3J0SGFuZGxlciA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYW5VcCgpO1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoQUJPUlRfRVJST1IpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVhZGFibGUub24oXCJyZWFkYWJsZVwiLCByZWFkYWJsZUNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWFkYWJsZS5vbmNlKFwiZXJyb3JcIiwgcmVqZWN0Q2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRhYmxlLm9uY2UoXCJlbmRcIiwgcmVqZWN0Q2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRhYmxlLm9uY2UoXCJjbG9zZVwiLCByZWplY3RDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYWJvcnRTaWduYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5hYm9ydFNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgYWJvcnRIYW5kbGVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlLWJlZm9yZS1kZWZpbmUgKi9cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogT05MWSBBVkFJTEFCTEUgSU4gTk9ERS5KUyBSVU5USU1FLlxuICpcbiAqIEEgTm9kZS5qcyBCbG9iUXVpY2tRdWVyeVN0cmVhbSB3aWxsIGludGVybmFsbHkgcGFyc2UgYXZybyBkYXRhIHN0cmVhbSBmb3IgYmxvYiBxdWVyeS5cbiAqL1xuY2xhc3MgQmxvYlF1aWNrUXVlcnlTdHJlYW0gZXh0ZW5kcyBzdHJlYW0uUmVhZGFibGUge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgQmxvYlF1aWNrUXVlcnlTdHJlYW0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc291cmNlIC0gVGhlIGN1cnJlbnQgUmVhZGFibGVTdHJlYW0gcmV0dXJuZWQgZnJvbSBnZXR0ZXJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtXG4gICAgICovXG4gICAgY29uc3RydWN0b3Ioc291cmNlLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5hdnJvUGF1c2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICAgIHRoaXMub25Qcm9ncmVzcyA9IG9wdGlvbnMub25Qcm9ncmVzcztcbiAgICAgICAgdGhpcy5vbkVycm9yID0gb3B0aW9ucy5vbkVycm9yO1xuICAgICAgICB0aGlzLmF2cm9SZWFkZXIgPSBuZXcgQXZyb1JlYWRlcihuZXcgQXZyb1JlYWRhYmxlRnJvbVN0cmVhbSh0aGlzLnNvdXJjZSkpO1xuICAgICAgICB0aGlzLmF2cm9JdGVyID0gdGhpcy5hdnJvUmVhZGVyLnBhcnNlT2JqZWN0cyh7IGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsIH0pO1xuICAgIH1cbiAgICBfcmVhZCgpIHtcbiAgICAgICAgaWYgKHRoaXMuYXZyb1BhdXNlZCkge1xuICAgICAgICAgICAgdGhpcy5yZWFkSW50ZXJuYWwoKS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0KFwiZXJyb3JcIiwgZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIHJlYWRJbnRlcm5hbCgpIHtcbiAgICAgICAgdGhpcy5hdnJvUGF1c2VkID0gZmFsc2U7XG4gICAgICAgIGxldCBhdnJvTmV4dDtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgYXZyb05leHQgPSBhd2FpdCB0aGlzLmF2cm9JdGVyLm5leHQoKTtcbiAgICAgICAgICAgIGlmIChhdnJvTmV4dC5kb25lKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBvYmogPSBhdnJvTmV4dC52YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IHNjaGVtYSA9IG9iai4kc2NoZW1hO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcIk1pc3Npbmcgc2NoZW1hIGluIGF2cm8gcmVjb3JkLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN3aXRjaCAoc2NoZW1hKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcImNvbS5taWNyb3NvZnQuYXp1cmUuc3RvcmFnZS5xdWVyeUJsb2JDb250ZW50cy5yZXN1bHREYXRhXCI6XG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBvYmouZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhIGluc3RhbmNlb2YgVWludDhBcnJheSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcIkludmFsaWQgZGF0YSBpbiBhdnJvIHJlc3VsdCByZWNvcmQuXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnB1c2goQnVmZmVyLmZyb20oZGF0YSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hdnJvUGF1c2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiY29tLm1pY3Jvc29mdC5henVyZS5zdG9yYWdlLnF1ZXJ5QmxvYkNvbnRlbnRzLnByb2dyZXNzXCI6XG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGVzU2Nhbm5lZCA9IG9iai5ieXRlc1NjYW5uZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGJ5dGVzU2Nhbm5lZCAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFwiSW52YWxpZCBieXRlc1NjYW5uZWQgaW4gYXZybyBwcm9ncmVzcyByZWNvcmQuXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub25Qcm9ncmVzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25Qcm9ncmVzcyh7IGxvYWRlZEJ5dGVzOiBieXRlc1NjYW5uZWQgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImNvbS5taWNyb3NvZnQuYXp1cmUuc3RvcmFnZS5xdWVyeUJsb2JDb250ZW50cy5lbmRcIjpcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub25Qcm9ncmVzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdG90YWxCeXRlcyA9IG9iai50b3RhbEJ5dGVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0b3RhbEJ5dGVzICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJJbnZhbGlkIHRvdGFsQnl0ZXMgaW4gYXZybyBlbmQgcmVjb3JkLlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25Qcm9ncmVzcyh7IGxvYWRlZEJ5dGVzOiB0b3RhbEJ5dGVzIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHVzaChudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImNvbS5taWNyb3NvZnQuYXp1cmUuc3RvcmFnZS5xdWVyeUJsb2JDb250ZW50cy5lcnJvclwiOlxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmYXRhbCA9IG9iai5mYXRhbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZmF0YWwgIT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJJbnZhbGlkIGZhdGFsIGluIGF2cm8gZXJyb3IgcmVjb3JkLlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBvYmoubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbmFtZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFwiSW52YWxpZCBuYW1lIGluIGF2cm8gZXJyb3IgcmVjb3JkLlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gb2JqLmRlc2NyaXB0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkZXNjcmlwdGlvbiAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFwiSW52YWxpZCBkZXNjcmlwdGlvbiBpbiBhdnJvIGVycm9yIHJlY29yZC5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IG9iai5wb3NpdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcG9zaXRpb24gIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcIkludmFsaWQgcG9zaXRpb24gaW4gYXZybyBlcnJvciByZWNvcmQuXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkVycm9yKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRmF0YWw6IGZhdGFsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoYFVua25vd24gc2NoZW1hICR7c2NoZW1hfSBpbiBhdnJvIHByb2dyZXNzIHJlY29yZC5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSB3aGlsZSAoIWF2cm9OZXh0LmRvbmUgJiYgIXRoaXMuYXZyb1BhdXNlZCk7XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogT05MWSBBVkFJTEFCTEUgSU4gTk9ERS5KUyBSVU5USU1FLlxuICpcbiAqIEJsb2JRdWVyeVJlc3BvbnNlIGltcGxlbWVudHMgQmxvYkRvd25sb2FkUmVzcG9uc2VNb2RlbCBpbnRlcmZhY2UsIGFuZCBpbiBOb2RlLmpzIHJ1bnRpbWUgaXQgd2lsbFxuICogcGFyc2UgYXZvciBkYXRhIHJldHVybmVkIGJ5IGJsb2IgcXVlcnkuXG4gKi9cbmNsYXNzIEJsb2JRdWVyeVJlc3BvbnNlIHtcbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgc2VydmljZSBzdXBwb3J0c1xuICAgICAqIHJlcXVlc3RzIGZvciBwYXJ0aWFsIGZpbGUgY29udGVudC5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBhY2NlcHRSYW5nZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuYWNjZXB0UmFuZ2VzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGlmIGl0IHdhcyBwcmV2aW91c2x5IHNwZWNpZmllZFxuICAgICAqIGZvciB0aGUgZmlsZS5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBjYWNoZUNvbnRyb2woKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuY2FjaGVDb250cm9sO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSB0aGF0IHdhcyBzcGVjaWZpZWRcbiAgICAgKiBmb3IgdGhlICd4LW1zLWNvbnRlbnQtZGlzcG9zaXRpb24nIGhlYWRlciBhbmQgc3BlY2lmaWVzIGhvdyB0byBwcm9jZXNzIHRoZVxuICAgICAqIHJlc3BvbnNlLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNvbnRlbnREaXNwb3NpdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5jb250ZW50RGlzcG9zaXRpb247XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHZhbHVlIHRoYXQgd2FzIHNwZWNpZmllZFxuICAgICAqIGZvciB0aGUgQ29udGVudC1FbmNvZGluZyByZXF1ZXN0IGhlYWRlci5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBjb250ZW50RW5jb2RpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuY29udGVudEVuY29kaW5nO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSB0aGF0IHdhcyBzcGVjaWZpZWRcbiAgICAgKiBmb3IgdGhlIENvbnRlbnQtTGFuZ3VhZ2UgcmVxdWVzdCBoZWFkZXIuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY29udGVudExhbmd1YWdlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNvbnRlbnRMYW5ndWFnZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgc2VxdWVuY2UgbnVtYmVyIGZvciBhXG4gICAgICogcGFnZSBibG9iLiBUaGlzIGhlYWRlciBpcyBub3QgcmV0dXJuZWQgZm9yIGJsb2NrIGJsb2JzIG9yIGFwcGVuZCBibG9icy5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBibG9iU2VxdWVuY2VOdW1iZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuYmxvYlNlcXVlbmNlTnVtYmVyO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgYmxvYidzIHR5cGUuIFBvc3NpYmxlIHZhbHVlcyBpbmNsdWRlOlxuICAgICAqICdCbG9ja0Jsb2InLCAnUGFnZUJsb2InLCAnQXBwZW5kQmxvYicuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgYmxvYlR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuYmxvYlR5cGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2YgYnl0ZXMgcHJlc2VudCBpbiB0aGVcbiAgICAgKiByZXNwb25zZSBib2R5LlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNvbnRlbnRMZW5ndGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuY29udGVudExlbmd0aDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSWYgdGhlIGZpbGUgaGFzIGFuIE1ENSBoYXNoIGFuZCB0aGVcbiAgICAgKiByZXF1ZXN0IGlzIHRvIHJlYWQgdGhlIGZ1bGwgZmlsZSwgdGhpcyByZXNwb25zZSBoZWFkZXIgaXMgcmV0dXJuZWQgc28gdGhhdFxuICAgICAqIHRoZSBjbGllbnQgY2FuIGNoZWNrIGZvciBtZXNzYWdlIGNvbnRlbnQgaW50ZWdyaXR5LiBJZiB0aGUgcmVxdWVzdCBpcyB0b1xuICAgICAqIHJlYWQgYSBzcGVjaWZpZWQgcmFuZ2UgYW5kIHRoZSAneC1tcy1yYW5nZS1nZXQtY29udGVudC1tZDUnIGlzIHNldCB0b1xuICAgICAqIHRydWUsIHRoZW4gdGhlIHJlcXVlc3QgcmV0dXJucyBhbiBNRDUgaGFzaCBmb3IgdGhlIHJhbmdlLCBhcyBsb25nIGFzIHRoZVxuICAgICAqIHJhbmdlIHNpemUgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDQgTUIuIElmIG5laXRoZXIgb2YgdGhlc2Ugc2V0cyBvZlxuICAgICAqIGNvbmRpdGlvbnMgaXMgdHJ1ZSwgdGhlbiBubyB2YWx1ZSBpcyByZXR1cm5lZCBmb3IgdGhlICdDb250ZW50LU1ENSdcbiAgICAgKiBoZWFkZXIuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY29udGVudE1ENSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5jb250ZW50TUQ1O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgdGhlIHJhbmdlIG9mIGJ5dGVzIHJldHVybmVkIGlmXG4gICAgICogdGhlIGNsaWVudCByZXF1ZXN0ZWQgYSBzdWJzZXQgb2YgdGhlIGZpbGUgYnkgc2V0dGluZyB0aGUgUmFuZ2UgcmVxdWVzdFxuICAgICAqIGhlYWRlci5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBjb250ZW50UmFuZ2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuY29udGVudFJhbmdlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgY29udGVudCB0eXBlIHNwZWNpZmllZCBmb3IgdGhlIGZpbGUuXG4gICAgICogVGhlIGRlZmF1bHQgY29udGVudCB0eXBlIGlzICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY29udGVudFR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuY29udGVudFR5cGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbmNsdXNpb24gdGltZSBvZiB0aGUgbGFzdCBhdHRlbXB0ZWRcbiAgICAgKiBDb3B5IEZpbGUgb3BlcmF0aW9uIHdoZXJlIHRoaXMgZmlsZSB3YXMgdGhlIGRlc3RpbmF0aW9uIGZpbGUuIFRoaXMgdmFsdWVcbiAgICAgKiBjYW4gc3BlY2lmeSB0aGUgdGltZSBvZiBhIGNvbXBsZXRlZCwgYWJvcnRlZCwgb3IgZmFpbGVkIGNvcHkgYXR0ZW1wdC5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBjb3B5Q29tcGxldGVkT24oKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN0cmluZyBpZGVudGlmaWVyIGZvciB0aGUgbGFzdCBhdHRlbXB0ZWQgQ29weVxuICAgICAqIEZpbGUgb3BlcmF0aW9uIHdoZXJlIHRoaXMgZmlsZSB3YXMgdGhlIGRlc3RpbmF0aW9uIGZpbGUuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY29weUlkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNvcHlJZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29udGFpbnMgdGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQgYW5kXG4gICAgICogdGhlIHRvdGFsIGJ5dGVzIGluIHRoZSBzb3VyY2UgaW4gdGhlIGxhc3QgYXR0ZW1wdGVkIENvcHkgRmlsZSBvcGVyYXRpb25cbiAgICAgKiB3aGVyZSB0aGlzIGZpbGUgd2FzIHRoZSBkZXN0aW5hdGlvbiBmaWxlLiBDYW4gc2hvdyBiZXR3ZWVuIDAgYW5kXG4gICAgICogQ29udGVudC1MZW5ndGggYnl0ZXMgY29waWVkLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNvcHlQcm9ncmVzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5jb3B5UHJvZ3Jlc3M7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFVSTCB1cCB0byAyS0IgaW4gbGVuZ3RoIHRoYXQgc3BlY2lmaWVzIHRoZVxuICAgICAqIHNvdXJjZSBmaWxlIHVzZWQgaW4gdGhlIGxhc3QgYXR0ZW1wdGVkIENvcHkgRmlsZSBvcGVyYXRpb24gd2hlcmUgdGhpcyBmaWxlXG4gICAgICogd2FzIHRoZSBkZXN0aW5hdGlvbiBmaWxlLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNvcHlTb3VyY2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuY29weVNvdXJjZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3RhdGUgb2YgdGhlIGNvcHkgb3BlcmF0aW9uXG4gICAgICogaWRlbnRpZmllZCBieSAneC1tcy1jb3B5LWlkJy4gUG9zc2libGUgdmFsdWVzIGluY2x1ZGU6ICdwZW5kaW5nJyxcbiAgICAgKiAnc3VjY2VzcycsICdhYm9ydGVkJywgJ2ZhaWxlZCdcbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBjb3B5U3RhdHVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNvcHlTdGF0dXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE9ubHkgYXBwZWFycyB3aGVuXG4gICAgICogeC1tcy1jb3B5LXN0YXR1cyBpcyBmYWlsZWQgb3IgcGVuZGluZy4gRGVzY3JpYmVzIGNhdXNlIG9mIGZhdGFsIG9yXG4gICAgICogbm9uLWZhdGFsIGNvcHkgb3BlcmF0aW9uIGZhaWx1cmUuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY29weVN0YXR1c0Rlc2NyaXB0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNvcHlTdGF0dXNEZXNjcmlwdGlvbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogV2hlbiBhIGJsb2IgaXMgbGVhc2VkLFxuICAgICAqIHNwZWNpZmllcyB3aGV0aGVyIHRoZSBsZWFzZSBpcyBvZiBpbmZpbml0ZSBvciBmaXhlZCBkdXJhdGlvbi4gUG9zc2libGVcbiAgICAgKiB2YWx1ZXMgaW5jbHVkZTogJ2luZmluaXRlJywgJ2ZpeGVkJy5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBsZWFzZUR1cmF0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmxlYXNlRHVyYXRpb247XG4gICAgfVxuICAgIC8qKlxuICAgICAqIExlYXNlIHN0YXRlIG9mIHRoZSBibG9iLiBQb3NzaWJsZVxuICAgICAqIHZhbHVlcyBpbmNsdWRlOiAnYXZhaWxhYmxlJywgJ2xlYXNlZCcsICdleHBpcmVkJywgJ2JyZWFraW5nJywgJ2Jyb2tlbicuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgbGVhc2VTdGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5sZWFzZVN0YXRlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBsZWFzZSBzdGF0dXMgb2YgdGhlXG4gICAgICogYmxvYi4gUG9zc2libGUgdmFsdWVzIGluY2x1ZGU6ICdsb2NrZWQnLCAndW5sb2NrZWQnLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGxlYXNlU3RhdHVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmxlYXNlU3RhdHVzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBIFVUQyBkYXRlL3RpbWUgdmFsdWUgZ2VuZXJhdGVkIGJ5IHRoZSBzZXJ2aWNlIHRoYXRcbiAgICAgKiBpbmRpY2F0ZXMgdGhlIHRpbWUgYXQgd2hpY2ggdGhlIHJlc3BvbnNlIHdhcyBpbml0aWF0ZWQuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgZGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5kYXRlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIGNvbW1pdHRlZCBibG9ja3NcbiAgICAgKiBwcmVzZW50IGluIHRoZSBibG9iLiBUaGlzIGhlYWRlciBpcyByZXR1cm5lZCBvbmx5IGZvciBhcHBlbmQgYmxvYnMuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgYmxvYkNvbW1pdHRlZEJsb2NrQ291bnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuYmxvYkNvbW1pdHRlZEJsb2NrQ291bnQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBFVGFnIGNvbnRhaW5zIGEgdmFsdWUgdGhhdCB5b3UgY2FuIHVzZSB0b1xuICAgICAqIHBlcmZvcm0gb3BlcmF0aW9ucyBjb25kaXRpb25hbGx5LCBpbiBxdW90ZXMuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgZXRhZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5ldGFnO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgZXJyb3IgY29kZS5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBlcnJvckNvZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuZXJyb3JDb2RlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgdmFsdWUgb2YgdGhpcyBoZWFkZXIgaXMgc2V0IHRvXG4gICAgICogdHJ1ZSBpZiB0aGUgZmlsZSBkYXRhIGFuZCBhcHBsaWNhdGlvbiBtZXRhZGF0YSBhcmUgY29tcGxldGVseSBlbmNyeXB0ZWRcbiAgICAgKiB1c2luZyB0aGUgc3BlY2lmaWVkIGFsZ29yaXRobS4gT3RoZXJ3aXNlLCB0aGUgdmFsdWUgaXMgc2V0IHRvIGZhbHNlICh3aGVuXG4gICAgICogdGhlIGZpbGUgaXMgdW5lbmNyeXB0ZWQsIG9yIGlmIG9ubHkgcGFydHMgb2YgdGhlIGZpbGUvYXBwbGljYXRpb24gbWV0YWRhdGFcbiAgICAgKiBhcmUgZW5jcnlwdGVkKS5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBpc1NlcnZlckVuY3J5cHRlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5pc1NlcnZlckVuY3J5cHRlZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSWYgdGhlIGJsb2IgaGFzIGEgTUQ1IGhhc2gsIGFuZCBpZlxuICAgICAqIHJlcXVlc3QgY29udGFpbnMgcmFuZ2UgaGVhZGVyIChSYW5nZSBvciB4LW1zLXJhbmdlKSwgdGhpcyByZXNwb25zZSBoZWFkZXJcbiAgICAgKiBpcyByZXR1cm5lZCB3aXRoIHRoZSB2YWx1ZSBvZiB0aGUgd2hvbGUgYmxvYidzIE1ENSB2YWx1ZS4gVGhpcyB2YWx1ZSBtYXlcbiAgICAgKiBvciBtYXkgbm90IGJlIGVxdWFsIHRvIHRoZSB2YWx1ZSByZXR1cm5lZCBpbiBDb250ZW50LU1ENSBoZWFkZXIsIHdpdGggdGhlXG4gICAgICogbGF0dGVyIGNhbGN1bGF0ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHJhbmdlLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGJsb2JDb250ZW50TUQ1KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmJsb2JDb250ZW50TUQ1O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBkYXRlIGFuZCB0aW1lIHRoZSBmaWxlIHdhcyBsYXN0XG4gICAgICogbW9kaWZpZWQuIEFueSBvcGVyYXRpb24gdGhhdCBtb2RpZmllcyB0aGUgZmlsZSBvciBpdHMgcHJvcGVydGllcyB1cGRhdGVzXG4gICAgICogdGhlIGxhc3QgbW9kaWZpZWQgdGltZS5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBsYXN0TW9kaWZpZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UubGFzdE1vZGlmaWVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBIG5hbWUtdmFsdWUgcGFpclxuICAgICAqIHRvIGFzc29jaWF0ZSB3aXRoIGEgZmlsZSBzdG9yYWdlIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBtZXRhZGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5tZXRhZGF0YTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhpcyBoZWFkZXIgdW5pcXVlbHkgaWRlbnRpZmllcyB0aGUgcmVxdWVzdFxuICAgICAqIHRoYXQgd2FzIG1hZGUgYW5kIGNhbiBiZSB1c2VkIGZvciB0cm91Ymxlc2hvb3RpbmcgdGhlIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgcmVxdWVzdElkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLnJlcXVlc3RJZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSWYgYSBjbGllbnQgcmVxdWVzdCBpZCBoZWFkZXIgaXMgc2VudCBpbiB0aGUgcmVxdWVzdCwgdGhpcyBoZWFkZXIgd2lsbCBiZSBwcmVzZW50IGluIHRoZVxuICAgICAqIHJlc3BvbnNlIHdpdGggdGhlIHNhbWUgdmFsdWUuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgY2xpZW50UmVxdWVzdElkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFJlc3BvbnNlLmNsaWVudFJlcXVlc3RJZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHRoZSB2ZXJzaW9uIG9mIHRoZSBGaWxlIHNlcnZpY2UgdXNlZFxuICAgICAqIHRvIGV4ZWN1dGUgdGhlIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgdmVyc2lvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS52ZXJzaW9uO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgU0hBLTI1NiBoYXNoIG9mIHRoZSBlbmNyeXB0aW9uIGtleSB1c2VkIHRvIGVuY3J5cHQgdGhlIGJsb2IuIFRoaXMgdmFsdWUgaXMgb25seSByZXR1cm5lZFxuICAgICAqIHdoZW4gdGhlIGJsb2Igd2FzIGVuY3J5cHRlZCB3aXRoIGEgY3VzdG9tZXItcHJvdmlkZWQga2V5LlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGVuY3J5cHRpb25LZXlTaGEyNTYoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUmVzcG9uc2UuZW5jcnlwdGlvbktleVNoYTI1NjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSWYgdGhlIHJlcXVlc3QgaXMgdG8gcmVhZCBhIHNwZWNpZmllZCByYW5nZSBhbmQgdGhlIHgtbXMtcmFuZ2UtZ2V0LWNvbnRlbnQtY3JjNjQgaXMgc2V0IHRvXG4gICAgICogdHJ1ZSwgdGhlbiB0aGUgcmVxdWVzdCByZXR1cm5zIGEgY3JjNjQgZm9yIHRoZSByYW5nZSwgYXMgbG9uZyBhcyB0aGUgcmFuZ2Ugc2l6ZSBpcyBsZXNzIHRoYW5cbiAgICAgKiBvciBlcXVhbCB0byA0IE1CLiBJZiBib3RoIHgtbXMtcmFuZ2UtZ2V0LWNvbnRlbnQtY3JjNjQgJiB4LW1zLXJhbmdlLWdldC1jb250ZW50LW1kNSBpc1xuICAgICAqIHNwZWNpZmllZCBpbiB0aGUgc2FtZSByZXF1ZXN0LCBpdCB3aWxsIGZhaWwgd2l0aCA0MDAoQmFkIFJlcXVlc3QpXG4gICAgICovXG4gICAgZ2V0IGNvbnRlbnRDcmM2NCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5jb250ZW50Q3JjNjQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSByZXNwb25zZSBib2R5IGFzIGEgYnJvd3NlciBCbG9iLlxuICAgICAqIEFsd2F5cyB1bmRlZmluZWQgaW4gbm9kZS5qcy5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBibG9iQm9keSgpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIHJlc3BvbnNlIGJvZHkgYXMgYSBub2RlLmpzIFJlYWRhYmxlIHN0cmVhbS5cbiAgICAgKiBBbHdheXMgdW5kZWZpbmVkIGluIHRoZSBicm93c2VyLlxuICAgICAqXG4gICAgICogSXQgd2lsbCBwYXJzZSBhdm9yIGRhdGEgcmV0dXJuZWQgYnkgYmxvYiBxdWVyeS5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCByZWFkYWJsZVN0cmVhbUJvZHkoKSB7XG4gICAgICAgIHJldHVybiBjb3JlVXRpbC5pc05vZGUgPyB0aGlzLmJsb2JEb3dubG9hZFN0cmVhbSA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIEhUVFAgcmVzcG9uc2UuXG4gICAgICovXG4gICAgZ2V0IF9yZXNwb25zZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxSZXNwb25zZS5fcmVzcG9uc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgQmxvYlF1ZXJ5UmVzcG9uc2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3JpZ2luYWxSZXNwb25zZSAtXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG9yaWdpbmFsUmVzcG9uc2UsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICB0aGlzLm9yaWdpbmFsUmVzcG9uc2UgPSBvcmlnaW5hbFJlc3BvbnNlO1xuICAgICAgICB0aGlzLmJsb2JEb3dubG9hZFN0cmVhbSA9IG5ldyBCbG9iUXVpY2tRdWVyeVN0cmVhbSh0aGlzLm9yaWdpbmFsUmVzcG9uc2UucmVhZGFibGVTdHJlYW1Cb2R5LCBvcHRpb25zKTtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBhY2Nlc3MgdGllciBvbiBhIGJsb2IuXG4gKiBGb3IgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgYmxvY2sgYmxvYiBsZXZlbCB0aWVyaW5nIHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vYXp1cmUvc3RvcmFnZS9ibG9icy9zdG9yYWdlLWJsb2Itc3RvcmFnZS10aWVyc3xIb3QsIGNvb2wgYW5kIGFyY2hpdmUgc3RvcmFnZSB0aWVycy59XG4gKi9cbmV4cG9ydHMuQmxvY2tCbG9iVGllciA9IHZvaWQgMDtcbihmdW5jdGlvbiAoQmxvY2tCbG9iVGllcikge1xuICAgIC8qKlxuICAgICAqIE9wdGltaXplZCBmb3Igc3RvcmluZyBkYXRhIHRoYXQgaXMgYWNjZXNzZWQgZnJlcXVlbnRseS5cbiAgICAgKi9cbiAgICBCbG9ja0Jsb2JUaWVyW1wiSG90XCJdID0gXCJIb3RcIjtcbiAgICAvKipcbiAgICAgKiBPcHRpbWl6ZWQgZm9yIHN0b3JpbmcgZGF0YSB0aGF0IGlzIGluZnJlcXVlbnRseSBhY2Nlc3NlZCBhbmQgc3RvcmVkIGZvciBhdCBsZWFzdCAzMCBkYXlzLlxuICAgICAqL1xuICAgIEJsb2NrQmxvYlRpZXJbXCJDb29sXCJdID0gXCJDb29sXCI7XG4gICAgLyoqXG4gICAgICogT3B0aW1pemVkIGZvciBzdG9yaW5nIGRhdGEgdGhhdCBpcyByYXJlbHkgYWNjZXNzZWQuXG4gICAgICovXG4gICAgQmxvY2tCbG9iVGllcltcIkNvbGRcIl0gPSBcIkNvbGRcIjtcbiAgICAvKipcbiAgICAgKiBPcHRpbWl6ZWQgZm9yIHN0b3JpbmcgZGF0YSB0aGF0IGlzIHJhcmVseSBhY2Nlc3NlZCBhbmQgc3RvcmVkIGZvciBhdCBsZWFzdCAxODAgZGF5c1xuICAgICAqIHdpdGggZmxleGlibGUgbGF0ZW5jeSByZXF1aXJlbWVudHMgKG9uIHRoZSBvcmRlciBvZiBob3VycykuXG4gICAgICovXG4gICAgQmxvY2tCbG9iVGllcltcIkFyY2hpdmVcIl0gPSBcIkFyY2hpdmVcIjtcbn0pKGV4cG9ydHMuQmxvY2tCbG9iVGllciB8fCAoZXhwb3J0cy5CbG9ja0Jsb2JUaWVyID0ge30pKTtcbi8qKlxuICogU3BlY2lmaWVzIHRoZSBwYWdlIGJsb2IgdGllciB0byBzZXQgdGhlIGJsb2IgdG8uIFRoaXMgaXMgb25seSBhcHBsaWNhYmxlIHRvIHBhZ2UgYmxvYnMgb24gcHJlbWl1bSBzdG9yYWdlIGFjY291bnRzLlxuICogUGxlYXNlIHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vYXp1cmUvc3RvcmFnZS9zdG9yYWdlLXByZW1pdW0tc3RvcmFnZSNzY2FsYWJpbGl0eS1hbmQtcGVyZm9ybWFuY2UtdGFyZ2V0c3xoZXJlfVxuICogZm9yIGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIHRoZSBjb3JyZXNwb25kaW5nIElPUFMgYW5kIHRocm91Z2hwdXQgcGVyIFBhZ2VCbG9iVGllci5cbiAqL1xuZXhwb3J0cy5QcmVtaXVtUGFnZUJsb2JUaWVyID0gdm9pZCAwO1xuKGZ1bmN0aW9uIChQcmVtaXVtUGFnZUJsb2JUaWVyKSB7XG4gICAgLyoqXG4gICAgICogUDQgVGllci5cbiAgICAgKi9cbiAgICBQcmVtaXVtUGFnZUJsb2JUaWVyW1wiUDRcIl0gPSBcIlA0XCI7XG4gICAgLyoqXG4gICAgICogUDYgVGllci5cbiAgICAgKi9cbiAgICBQcmVtaXVtUGFnZUJsb2JUaWVyW1wiUDZcIl0gPSBcIlA2XCI7XG4gICAgLyoqXG4gICAgICogUDEwIFRpZXIuXG4gICAgICovXG4gICAgUHJlbWl1bVBhZ2VCbG9iVGllcltcIlAxMFwiXSA9IFwiUDEwXCI7XG4gICAgLyoqXG4gICAgICogUDE1IFRpZXIuXG4gICAgICovXG4gICAgUHJlbWl1bVBhZ2VCbG9iVGllcltcIlAxNVwiXSA9IFwiUDE1XCI7XG4gICAgLyoqXG4gICAgICogUDIwIFRpZXIuXG4gICAgICovXG4gICAgUHJlbWl1bVBhZ2VCbG9iVGllcltcIlAyMFwiXSA9IFwiUDIwXCI7XG4gICAgLyoqXG4gICAgICogUDMwIFRpZXIuXG4gICAgICovXG4gICAgUHJlbWl1bVBhZ2VCbG9iVGllcltcIlAzMFwiXSA9IFwiUDMwXCI7XG4gICAgLyoqXG4gICAgICogUDQwIFRpZXIuXG4gICAgICovXG4gICAgUHJlbWl1bVBhZ2VCbG9iVGllcltcIlA0MFwiXSA9IFwiUDQwXCI7XG4gICAgLyoqXG4gICAgICogUDUwIFRpZXIuXG4gICAgICovXG4gICAgUHJlbWl1bVBhZ2VCbG9iVGllcltcIlA1MFwiXSA9IFwiUDUwXCI7XG4gICAgLyoqXG4gICAgICogUDYwIFRpZXIuXG4gICAgICovXG4gICAgUHJlbWl1bVBhZ2VCbG9iVGllcltcIlA2MFwiXSA9IFwiUDYwXCI7XG4gICAgLyoqXG4gICAgICogUDcwIFRpZXIuXG4gICAgICovXG4gICAgUHJlbWl1bVBhZ2VCbG9iVGllcltcIlA3MFwiXSA9IFwiUDcwXCI7XG4gICAgLyoqXG4gICAgICogUDgwIFRpZXIuXG4gICAgICovXG4gICAgUHJlbWl1bVBhZ2VCbG9iVGllcltcIlA4MFwiXSA9IFwiUDgwXCI7XG59KShleHBvcnRzLlByZW1pdW1QYWdlQmxvYlRpZXIgfHwgKGV4cG9ydHMuUHJlbWl1bVBhZ2VCbG9iVGllciA9IHt9KSk7XG5mdW5jdGlvbiB0b0FjY2Vzc1RpZXIodGllcikge1xuICAgIGlmICh0aWVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHRpZXI7IC8vIE5vIG1vcmUgY2hlY2sgaWYgc3RyaW5nIGlzIGEgdmFsaWQgQWNjZXNzVGllciwgYW5kIGxlZnQgdGhpcyB0byB1bmRlcmxheSBsb2dpYyB0byBkZWNpZGUoc2VydmljZSkuXG59XG5mdW5jdGlvbiBlbnN1cmVDcGtJZlNwZWNpZmllZChjcGssIGlzSHR0cHMpIHtcbiAgICBpZiAoY3BrICYmICFpc0h0dHBzKSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiQ3VzdG9tZXItcHJvdmlkZWQgZW5jcnlwdGlvbiBrZXkgbXVzdCBiZSB1c2VkIG92ZXIgSFRUUFMuXCIpO1xuICAgIH1cbiAgICBpZiAoY3BrICYmICFjcGsuZW5jcnlwdGlvbkFsZ29yaXRobSkge1xuICAgICAgICBjcGsuZW5jcnlwdGlvbkFsZ29yaXRobSA9IEVuY3J5cHRpb25BbGdvcml0aG1BRVMyNTtcbiAgICB9XG59XG4vKipcbiAqIERlZmluZXMgdGhlIGtub3duIGNsb3VkIGF1ZGllbmNlcyBmb3IgU3RvcmFnZS5cbiAqL1xuZXhwb3J0cy5TdG9yYWdlQmxvYkF1ZGllbmNlID0gdm9pZCAwO1xuKGZ1bmN0aW9uIChTdG9yYWdlQmxvYkF1ZGllbmNlKSB7XG4gICAgLyoqXG4gICAgICogVGhlIE9BdXRoIHNjb3BlIHRvIHVzZSB0byByZXRyaWV2ZSBhbiBBQUQgdG9rZW4gZm9yIEF6dXJlIFN0b3JhZ2UuXG4gICAgICovXG4gICAgU3RvcmFnZUJsb2JBdWRpZW5jZVtcIlN0b3JhZ2VPQXV0aFNjb3Blc1wiXSA9IFwiaHR0cHM6Ly9zdG9yYWdlLmF6dXJlLmNvbS8uZGVmYXVsdFwiO1xuICAgIC8qKlxuICAgICAqIFRoZSBPQXV0aCBzY29wZSB0byB1c2UgdG8gcmV0cmlldmUgYW4gQUFEIHRva2VuIGZvciBBenVyZSBEaXNrLlxuICAgICAqL1xuICAgIFN0b3JhZ2VCbG9iQXVkaWVuY2VbXCJEaXNrQ29tcHV0ZU9BdXRoU2NvcGVzXCJdID0gXCJodHRwczovL2Rpc2suY29tcHV0ZS5henVyZS5jb20vLmRlZmF1bHRcIjtcbn0pKGV4cG9ydHMuU3RvcmFnZUJsb2JBdWRpZW5jZSB8fCAoZXhwb3J0cy5TdG9yYWdlQmxvYkF1ZGllbmNlID0ge30pKTtcbi8qKlxuICpcbiAqIFRvIGdldCBPQXV0aCBhdWRpZW5jZSBmb3IgYSBzdG9yYWdlIGFjY291bnQgZm9yIGJsb2Igc2VydmljZS5cbiAqL1xuZnVuY3Rpb24gZ2V0QmxvYlNlcnZpY2VBY2NvdW50QXVkaWVuY2Uoc3RvcmFnZUFjY291bnROYW1lKSB7XG4gICAgcmV0dXJuIGBodHRwczovLyR7c3RvcmFnZUFjY291bnROYW1lfS5ibG9iLmNvcmUud2luZG93cy5uZXQvLmRlZmF1bHRgO1xufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogRnVuY3Rpb24gdGhhdCBjb252ZXJ0cyBQYWdlUmFuZ2UgYW5kIENsZWFyUmFuZ2UgdG8gYSBjb21tb24gUmFuZ2Ugb2JqZWN0LlxuICogUGFnZVJhbmdlIGFuZCBDbGVhclJhbmdlIGhhdmUgc3RhcnQgYW5kIGVuZCB3aGlsZSBSYW5nZSBvZmZzZXQgYW5kIGNvdW50XG4gKiB0aGlzIGZ1bmN0aW9uIG5vcm1hbGl6ZXMgdG8gUmFuZ2UuXG4gKiBAcGFyYW0gcmVzcG9uc2UgLSBNb2RlbCBQYWdlQmxvYiBSYW5nZSByZXNwb25zZVxuICovXG5mdW5jdGlvbiByYW5nZVJlc3BvbnNlRnJvbU1vZGVsKHJlc3BvbnNlKSB7XG4gICAgY29uc3QgcGFnZVJhbmdlID0gKHJlc3BvbnNlLl9yZXNwb25zZS5wYXJzZWRCb2R5LnBhZ2VSYW5nZSB8fCBbXSkubWFwKCh4KSA9PiAoe1xuICAgICAgICBvZmZzZXQ6IHguc3RhcnQsXG4gICAgICAgIGNvdW50OiB4LmVuZCAtIHguc3RhcnQsXG4gICAgfSkpO1xuICAgIGNvbnN0IGNsZWFyUmFuZ2UgPSAocmVzcG9uc2UuX3Jlc3BvbnNlLnBhcnNlZEJvZHkuY2xlYXJSYW5nZSB8fCBbXSkubWFwKCh4KSA9PiAoe1xuICAgICAgICBvZmZzZXQ6IHguc3RhcnQsXG4gICAgICAgIGNvdW50OiB4LmVuZCAtIHguc3RhcnQsXG4gICAgfSkpO1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHJlc3BvbnNlKSwgeyBwYWdlUmFuZ2UsXG4gICAgICAgIGNsZWFyUmFuZ2UsIF9yZXNwb25zZTogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCByZXNwb25zZS5fcmVzcG9uc2UpLCB7IHBhcnNlZEJvZHk6IHtcbiAgICAgICAgICAgICAgICBwYWdlUmFuZ2UsXG4gICAgICAgICAgICAgICAgY2xlYXJSYW5nZSxcbiAgICAgICAgICAgIH0gfSkgfSk7XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBUaGlzIGlzIHRoZSBwb2xsZXIgcmV0dXJuZWQgYnkge0BsaW5rIEJsb2JDbGllbnQuYmVnaW5Db3B5RnJvbVVSTH0uXG4gKiBUaGlzIGNhbiBub3QgYmUgaW5zdGFudGlhdGVkIGRpcmVjdGx5IG91dHNpZGUgb2YgdGhpcyBwYWNrYWdlLlxuICpcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgQmxvYkJlZ2luQ29weUZyb21VcmxQb2xsZXIgZXh0ZW5kcyBjb3JlTHJvLlBvbGxlciB7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICBjb25zdCB7IGJsb2JDbGllbnQsIGNvcHlTb3VyY2UsIGludGVydmFsSW5NcyA9IDE1MDAwLCBvblByb2dyZXNzLCByZXN1bWVGcm9tLCBzdGFydENvcHlGcm9tVVJMT3B0aW9ucywgfSA9IG9wdGlvbnM7XG4gICAgICAgIGxldCBzdGF0ZTtcbiAgICAgICAgaWYgKHJlc3VtZUZyb20pIHtcbiAgICAgICAgICAgIHN0YXRlID0gSlNPTi5wYXJzZShyZXN1bWVGcm9tKS5zdGF0ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcGVyYXRpb24gPSBtYWtlQmxvYkJlZ2luQ29weUZyb21VUkxQb2xsT3BlcmF0aW9uKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUpLCB7IGJsb2JDbGllbnQsXG4gICAgICAgICAgICBjb3B5U291cmNlLFxuICAgICAgICAgICAgc3RhcnRDb3B5RnJvbVVSTE9wdGlvbnMgfSkpO1xuICAgICAgICBzdXBlcihvcGVyYXRpb24pO1xuICAgICAgICBpZiAodHlwZW9mIG9uUHJvZ3Jlc3MgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdGhpcy5vblByb2dyZXNzKG9uUHJvZ3Jlc3MpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW50ZXJ2YWxJbk1zID0gaW50ZXJ2YWxJbk1zO1xuICAgIH1cbiAgICBkZWxheSgpIHtcbiAgICAgICAgcmV0dXJuIGNvcmVVdGlsLmRlbGF5KHRoaXMuaW50ZXJ2YWxJbk1zKTtcbiAgICB9XG59XG4vKipcbiAqIE5vdGU6IEludGVudGlvbmFsbHkgdXNpbmcgZnVuY3Rpb24gZXhwcmVzc2lvbiBvdmVyIGFycm93IGZ1bmN0aW9uIGV4cHJlc3Npb25cbiAqIHNvIHRoYXQgdGhlIGZ1bmN0aW9uIGNhbiBiZSBpbnZva2VkIHdpdGggYSBkaWZmZXJlbnQgY29udGV4dC5cbiAqIFRoaXMgYWZmZWN0cyB3aGF0IGB0aGlzYCByZWZlcnMgdG8uXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGNhbmNlbCA9IGFzeW5jIGZ1bmN0aW9uIGNhbmNlbChvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgeyBjb3B5SWQgfSA9IHN0YXRlO1xuICAgIGlmIChzdGF0ZS5pc0NvbXBsZXRlZCkge1xuICAgICAgICByZXR1cm4gbWFrZUJsb2JCZWdpbkNvcHlGcm9tVVJMUG9sbE9wZXJhdGlvbihzdGF0ZSk7XG4gICAgfVxuICAgIGlmICghY29weUlkKSB7XG4gICAgICAgIHN0YXRlLmlzQ2FuY2VsbGVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIG1ha2VCbG9iQmVnaW5Db3B5RnJvbVVSTFBvbGxPcGVyYXRpb24oc3RhdGUpO1xuICAgIH1cbiAgICAvLyBpZiBhYm9ydENvcHlGcm9tVVJMIHRocm93cywgaXQgd2lsbCBidWJibGUgdXAgdG8gdXNlcidzIHBvbGxlci5jYW5jZWxPcGVyYXRpb24gY2FsbFxuICAgIGF3YWl0IHN0YXRlLmJsb2JDbGllbnQuYWJvcnRDb3B5RnJvbVVSTChjb3B5SWQsIHtcbiAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgfSk7XG4gICAgc3RhdGUuaXNDYW5jZWxsZWQgPSB0cnVlO1xuICAgIHJldHVybiBtYWtlQmxvYkJlZ2luQ29weUZyb21VUkxQb2xsT3BlcmF0aW9uKHN0YXRlKTtcbn07XG4vKipcbiAqIE5vdGU6IEludGVudGlvbmFsbHkgdXNpbmcgZnVuY3Rpb24gZXhwcmVzc2lvbiBvdmVyIGFycm93IGZ1bmN0aW9uIGV4cHJlc3Npb25cbiAqIHNvIHRoYXQgdGhlIGZ1bmN0aW9uIGNhbiBiZSBpbnZva2VkIHdpdGggYSBkaWZmZXJlbnQgY29udGV4dC5cbiAqIFRoaXMgYWZmZWN0cyB3aGF0IGB0aGlzYCByZWZlcnMgdG8uXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IHVwZGF0ZSA9IGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZShvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgeyBibG9iQ2xpZW50LCBjb3B5U291cmNlLCBzdGFydENvcHlGcm9tVVJMT3B0aW9ucyB9ID0gc3RhdGU7XG4gICAgaWYgKCFzdGF0ZS5pc1N0YXJ0ZWQpIHtcbiAgICAgICAgc3RhdGUuaXNTdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYmxvYkNsaWVudC5zdGFydENvcHlGcm9tVVJMKGNvcHlTb3VyY2UsIHN0YXJ0Q29weUZyb21VUkxPcHRpb25zKTtcbiAgICAgICAgLy8gY29weUlkIGlzIG5lZWRlZCB0byBhYm9ydFxuICAgICAgICBzdGF0ZS5jb3B5SWQgPSByZXN1bHQuY29weUlkO1xuICAgICAgICBpZiAocmVzdWx0LmNvcHlTdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgICBzdGF0ZS5yZXN1bHQgPSByZXN1bHQ7XG4gICAgICAgICAgICBzdGF0ZS5pc0NvbXBsZXRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoIXN0YXRlLmlzQ29tcGxldGVkKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzdGF0ZS5ibG9iQ2xpZW50LmdldFByb3BlcnRpZXMoeyBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCB9KTtcbiAgICAgICAgICAgIGNvbnN0IHsgY29weVN0YXR1cywgY29weVByb2dyZXNzIH0gPSByZXN1bHQ7XG4gICAgICAgICAgICBjb25zdCBwcmV2Q29weVByb2dyZXNzID0gc3RhdGUuY29weVByb2dyZXNzO1xuICAgICAgICAgICAgaWYgKGNvcHlQcm9ncmVzcykge1xuICAgICAgICAgICAgICAgIHN0YXRlLmNvcHlQcm9ncmVzcyA9IGNvcHlQcm9ncmVzcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb3B5U3RhdHVzID09PSBcInBlbmRpbmdcIiAmJlxuICAgICAgICAgICAgICAgIGNvcHlQcm9ncmVzcyAhPT0gcHJldkNvcHlQcm9ncmVzcyAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiBvcHRpb25zLmZpcmVQcm9ncmVzcyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgLy8gdHJpZ2dlciBpbiBzZXRUaW1lb3V0LCBvciBzd2FsbG93IGVycm9yP1xuICAgICAgICAgICAgICAgIG9wdGlvbnMuZmlyZVByb2dyZXNzKHN0YXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNvcHlTdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgICAgICAgc3RhdGUucmVzdWx0ID0gcmVzdWx0O1xuICAgICAgICAgICAgICAgIHN0YXRlLmlzQ29tcGxldGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNvcHlTdGF0dXMgPT09IFwiZmFpbGVkXCIpIHtcbiAgICAgICAgICAgICAgICBzdGF0ZS5lcnJvciA9IG5ldyBFcnJvcihgQmxvYiBjb3B5IGZhaWxlZCB3aXRoIHJlYXNvbjogXCIke3Jlc3VsdC5jb3B5U3RhdHVzRGVzY3JpcHRpb24gfHwgXCJ1bmtub3duXCJ9XCJgKTtcbiAgICAgICAgICAgICAgICBzdGF0ZS5pc0NvbXBsZXRlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgc3RhdGUuZXJyb3IgPSBlcnI7XG4gICAgICAgICAgICBzdGF0ZS5pc0NvbXBsZXRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1ha2VCbG9iQmVnaW5Db3B5RnJvbVVSTFBvbGxPcGVyYXRpb24oc3RhdGUpO1xufTtcbi8qKlxuICogTm90ZTogSW50ZW50aW9uYWxseSB1c2luZyBmdW5jdGlvbiBleHByZXNzaW9uIG92ZXIgYXJyb3cgZnVuY3Rpb24gZXhwcmVzc2lvblxuICogc28gdGhhdCB0aGUgZnVuY3Rpb24gY2FuIGJlIGludm9rZWQgd2l0aCBhIGRpZmZlcmVudCBjb250ZXh0LlxuICogVGhpcyBhZmZlY3RzIHdoYXQgYHRoaXNgIHJlZmVycyB0by5cbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgdG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoeyBzdGF0ZTogdGhpcy5zdGF0ZSB9LCAoa2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgICAvLyByZW1vdmUgYmxvYkNsaWVudCBmcm9tIHNlcmlhbGl6ZWQgc3RhdGUgc2luY2UgYSBjbGllbnQgY2FuJ3QgYmUgaHlkcmF0ZWQgZnJvbSB0aGlzIGluZm8uXG4gICAgICAgIGlmIChrZXkgPT09IFwiYmxvYkNsaWVudFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9KTtcbn07XG4vKipcbiAqIENyZWF0ZXMgYSBwb2xsIG9wZXJhdGlvbiBnaXZlbiB0aGUgcHJvdmlkZWQgc3RhdGUuXG4gKiBAaGlkZGVuXG4gKi9cbmZ1bmN0aW9uIG1ha2VCbG9iQmVnaW5Db3B5RnJvbVVSTFBvbGxPcGVyYXRpb24oc3RhdGUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBzdGF0ZTogT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUpLFxuICAgICAgICBjYW5jZWwsXG4gICAgICAgIHRvU3RyaW5nLFxuICAgICAgICB1cGRhdGUsXG4gICAgfTtcbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIEdlbmVyYXRlIGEgcmFuZ2Ugc3RyaW5nLiBGb3IgZXhhbXBsZTpcbiAqXG4gKiBcImJ5dGVzPTI1NS1cIiBvciBcImJ5dGVzPTAtNTExXCJcbiAqXG4gKiBAcGFyYW0gaVJhbmdlIC1cbiAqL1xuZnVuY3Rpb24gcmFuZ2VUb1N0cmluZyhpUmFuZ2UpIHtcbiAgICBpZiAoaVJhbmdlLm9mZnNldCA8IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYFJhbmdlLm9mZnNldCBjYW5ub3QgYmUgc21hbGxlciB0aGFuIDAuYCk7XG4gICAgfVxuICAgIGlmIChpUmFuZ2UuY291bnQgJiYgaVJhbmdlLmNvdW50IDw9IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYFJhbmdlLmNvdW50IG11c3QgYmUgbGFyZ2VyIHRoYW4gMC4gTGVhdmUgaXQgdW5kZWZpbmVkIGlmIHlvdSB3YW50IGEgcmFuZ2UgZnJvbSBvZmZzZXQgdG8gdGhlIGVuZC5gKTtcbiAgICB9XG4gICAgcmV0dXJuIGlSYW5nZS5jb3VudFxuICAgICAgICA/IGBieXRlcz0ke2lSYW5nZS5vZmZzZXR9LSR7aVJhbmdlLm9mZnNldCArIGlSYW5nZS5jb3VudCAtIDF9YFxuICAgICAgICA6IGBieXRlcz0ke2lSYW5nZS5vZmZzZXR9LWA7XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLy8gSW4gYnJvd3NlciwgZHVyaW5nIHdlYnBhY2sgb3IgYnJvd3NlcmlmeSBidW5kbGluZywgdGhpcyBtb2R1bGUgd2lsbCBiZSByZXBsYWNlZCBieSAnZXZlbnRzJ1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL0dvemFsYS9ldmVudHNcbi8qKlxuICogU3RhdGVzIGZvciBCYXRjaC5cbiAqL1xudmFyIEJhdGNoU3RhdGVzO1xuKGZ1bmN0aW9uIChCYXRjaFN0YXRlcykge1xuICAgIEJhdGNoU3RhdGVzW0JhdGNoU3RhdGVzW1wiR29vZFwiXSA9IDBdID0gXCJHb29kXCI7XG4gICAgQmF0Y2hTdGF0ZXNbQmF0Y2hTdGF0ZXNbXCJFcnJvclwiXSA9IDFdID0gXCJFcnJvclwiO1xufSkoQmF0Y2hTdGF0ZXMgfHwgKEJhdGNoU3RhdGVzID0ge30pKTtcbi8qKlxuICogQmF0Y2ggcHJvdmlkZXMgYmFzaWMgcGFyYWxsZWwgZXhlY3V0aW9uIHdpdGggY29uY3VycmVuY3kgbGltaXRzLlxuICogV2lsbCBzdG9wIGV4ZWN1dGUgbGVmdCBvcGVyYXRpb25zIHdoZW4gb25lIG9mIHRoZSBleGVjdXRlZCBvcGVyYXRpb24gdGhyb3dzIGFuIGVycm9yLlxuICogQnV0IEJhdGNoIGNhbm5vdCBjYW5jZWwgb25nb2luZyBvcGVyYXRpb25zLCB5b3UgbmVlZCB0byBjYW5jZWwgdGhlbSBieSB5b3Vyc2VsZi5cbiAqL1xuY2xhc3MgQmF0Y2gge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgQmF0Y2guXG4gICAgICogQHBhcmFtIGNvbmN1cnJlbmN5IC1cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcihjb25jdXJyZW5jeSA9IDUpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIE51bWJlciBvZiBhY3RpdmUgb3BlcmF0aW9ucyB1bmRlciBleGVjdXRpb24uXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmFjdGl2ZXMgPSAwO1xuICAgICAgICAvKipcbiAgICAgICAgICogTnVtYmVyIG9mIGNvbXBsZXRlZCBvcGVyYXRpb25zIHVuZGVyIGV4ZWN1dGlvbi5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY29tcGxldGVkID0gMDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIE9mZnNldCBvZiBuZXh0IG9wZXJhdGlvbiB0byBiZSBleGVjdXRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMub2Zmc2V0ID0gMDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIE9wZXJhdGlvbiBhcnJheSB0byBiZSBleGVjdXRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMub3BlcmF0aW9ucyA9IFtdO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3RhdGVzIG9mIEJhdGNoLiBXaGVuIGFuIGVycm9yIGhhcHBlbnMsIHN0YXRlIHdpbGwgdHVybiBpbnRvIGVycm9yLlxuICAgICAgICAgKiBCYXRjaCB3aWxsIHN0b3AgZXhlY3V0ZSBsZWZ0IG9wZXJhdGlvbnMuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnN0YXRlID0gQmF0Y2hTdGF0ZXMuR29vZDtcbiAgICAgICAgaWYgKGNvbmN1cnJlbmN5IDwgMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJjb25jdXJyZW5jeSBtdXN0IGJlIGxhcmdlciB0aGFuIDBcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb25jdXJyZW5jeSA9IGNvbmN1cnJlbmN5O1xuICAgICAgICB0aGlzLmVtaXR0ZXIgPSBuZXcgZXZlbnRzLkV2ZW50RW1pdHRlcigpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGQgYSBvcGVyYXRpb24gaW50byBxdWV1ZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcGVyYXRpb24gLVxuICAgICAqL1xuICAgIGFkZE9wZXJhdGlvbihvcGVyYXRpb24pIHtcbiAgICAgICAgdGhpcy5vcGVyYXRpb25zLnB1c2goYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZXMrKztcbiAgICAgICAgICAgICAgICBhd2FpdCBvcGVyYXRpb24oKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZXMtLTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbXBsZXRlZCsrO1xuICAgICAgICAgICAgICAgIHRoaXMucGFyYWxsZWxFeGVjdXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdChcImVycm9yXCIsIGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN0YXJ0IGV4ZWN1dGUgb3BlcmF0aW9ucyBpbiB0aGUgcXVldWUuXG4gICAgICpcbiAgICAgKi9cbiAgICBhc3luYyBkbygpIHtcbiAgICAgICAgaWYgKHRoaXMub3BlcmF0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBhcmFsbGVsRXhlY3V0ZSgpO1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLm9uKFwiZmluaXNoXCIsIHJlc29sdmUpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLm9uKFwiZXJyb3JcIiwgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IEJhdGNoU3RhdGVzLkVycm9yO1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCBuZXh0IG9wZXJhdGlvbiB0byBiZSBleGVjdXRlZC4gUmV0dXJuIG51bGwgd2hlbiByZWFjaGluZyBlbmRzLlxuICAgICAqXG4gICAgICovXG4gICAgbmV4dE9wZXJhdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMub2Zmc2V0IDwgdGhpcy5vcGVyYXRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMub3BlcmF0aW9uc1t0aGlzLm9mZnNldCsrXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3RhcnQgZXhlY3V0ZSBvcGVyYXRpb25zLiBPbmUgb25lIHRoZSBtb3N0IGltcG9ydGFudCBkaWZmZXJlbmNlIGJldHdlZW5cbiAgICAgKiB0aGlzIG1ldGhvZCB3aXRoIGRvKCkgaXMgdGhhdCBkbygpIHdyYXBzIGFzIGFuIHN5bmMgbWV0aG9kLlxuICAgICAqXG4gICAgICovXG4gICAgcGFyYWxsZWxFeGVjdXRlKCkge1xuICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gQmF0Y2hTdGF0ZXMuRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jb21wbGV0ZWQgPj0gdGhpcy5vcGVyYXRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoXCJmaW5pc2hcIik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKHRoaXMuYWN0aXZlcyA8IHRoaXMuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wZXJhdGlvbiA9IHRoaXMubmV4dE9wZXJhdGlvbigpO1xuICAgICAgICAgICAgaWYgKG9wZXJhdGlvbikge1xuICAgICAgICAgICAgICAgIG9wZXJhdGlvbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogVGhpcyBjbGFzcyBnZW5lcmF0ZXMgYSByZWFkYWJsZSBzdHJlYW0gZnJvbSB0aGUgZGF0YSBpbiBhbiBhcnJheSBvZiBidWZmZXJzLlxuICovXG5jbGFzcyBCdWZmZXJzU3RyZWFtIGV4dGVuZHMgc3RyZWFtLlJlYWRhYmxlIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIEJ1ZmZlcnNTdHJlYW0gdGhhdCB3aWxsIGVtaXQgdGhlIGRhdGFcbiAgICAgKiBjb250YWluZWQgaW4gdGhlIGFycmF5IG9mIGJ1ZmZlcnMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYnVmZmVycyAtIEFycmF5IG9mIGJ1ZmZlcnMgY29udGFpbmluZyB0aGUgZGF0YVxuICAgICAqIEBwYXJhbSBieXRlTGVuZ3RoIC0gVGhlIHRvdGFsIGxlbmd0aCBvZiBkYXRhIGNvbnRhaW5lZCBpbiB0aGUgYnVmZmVyc1xuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGJ1ZmZlcnMsIGJ5dGVMZW5ndGgsIG9wdGlvbnMpIHtcbiAgICAgICAgc3VwZXIob3B0aW9ucyk7XG4gICAgICAgIHRoaXMuYnVmZmVycyA9IGJ1ZmZlcnM7XG4gICAgICAgIHRoaXMuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGg7XG4gICAgICAgIHRoaXMuYnl0ZU9mZnNldEluQ3VycmVudEJ1ZmZlciA9IDA7XG4gICAgICAgIHRoaXMuYnVmZmVySW5kZXggPSAwO1xuICAgICAgICB0aGlzLnB1c2hlZEJ5dGVzTGVuZ3RoID0gMDtcbiAgICAgICAgLy8gY2hlY2sgYnl0ZUxlbmd0aCBpcyBubyBsYXJnZXIgdGhhbiBidWZmZXJzW10gdG90YWwgbGVuZ3RoXG4gICAgICAgIGxldCBidWZmZXJzTGVuZ3RoID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBidWYgb2YgdGhpcy5idWZmZXJzKSB7XG4gICAgICAgICAgICBidWZmZXJzTGVuZ3RoICs9IGJ1Zi5ieXRlTGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIGlmIChidWZmZXJzTGVuZ3RoIDwgdGhpcy5ieXRlTGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEYXRhIHNpemUgc2hvdWxkbid0IGJlIGxhcmdlciB0aGFuIHRoZSB0b3RhbCBsZW5ndGggb2YgYnVmZmVycy5cIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgX3JlYWQoKSB0aGF0IHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIHN0cmVhbSB3YW50cyB0byBwdWxsIG1vcmUgZGF0YSBpbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzaXplIC0gT3B0aW9uYWwuIFRoZSBzaXplIG9mIGRhdGEgdG8gYmUgcmVhZFxuICAgICAqL1xuICAgIF9yZWFkKHNpemUpIHtcbiAgICAgICAgaWYgKHRoaXMucHVzaGVkQnl0ZXNMZW5ndGggPj0gdGhpcy5ieXRlTGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnB1c2gobnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzaXplKSB7XG4gICAgICAgICAgICBzaXplID0gdGhpcy5yZWFkYWJsZUhpZ2hXYXRlck1hcms7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3V0QnVmZmVycyA9IFtdO1xuICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgIHdoaWxlIChpIDwgc2l6ZSAmJiB0aGlzLnB1c2hlZEJ5dGVzTGVuZ3RoIDwgdGhpcy5ieXRlTGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBUaGUgbGFzdCBidWZmZXIgbWF5IGJlIGxvbmdlciB0aGFuIHRoZSBkYXRhIGl0IGNvbnRhaW5zLlxuICAgICAgICAgICAgY29uc3QgcmVtYWluaW5nRGF0YUluQWxsQnVmZmVycyA9IHRoaXMuYnl0ZUxlbmd0aCAtIHRoaXMucHVzaGVkQnl0ZXNMZW5ndGg7XG4gICAgICAgICAgICBjb25zdCByZW1haW5pbmdDYXBhY2l0eUluVGhpc0J1ZmZlciA9IHRoaXMuYnVmZmVyc1t0aGlzLmJ1ZmZlckluZGV4XS5ieXRlTGVuZ3RoIC0gdGhpcy5ieXRlT2Zmc2V0SW5DdXJyZW50QnVmZmVyO1xuICAgICAgICAgICAgY29uc3QgcmVtYWluaW5nID0gTWF0aC5taW4ocmVtYWluaW5nQ2FwYWNpdHlJblRoaXNCdWZmZXIsIHJlbWFpbmluZ0RhdGFJbkFsbEJ1ZmZlcnMpO1xuICAgICAgICAgICAgaWYgKHJlbWFpbmluZyA+IHNpemUgLSBpKSB7XG4gICAgICAgICAgICAgICAgLy8gY2h1bmtTaXplID0gc2l6ZSAtIGlcbiAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSB0aGlzLmJ5dGVPZmZzZXRJbkN1cnJlbnRCdWZmZXIgKyBzaXplIC0gaTtcbiAgICAgICAgICAgICAgICBvdXRCdWZmZXJzLnB1c2godGhpcy5idWZmZXJzW3RoaXMuYnVmZmVySW5kZXhdLnNsaWNlKHRoaXMuYnl0ZU9mZnNldEluQ3VycmVudEJ1ZmZlciwgZW5kKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5wdXNoZWRCeXRlc0xlbmd0aCArPSBzaXplIC0gaTtcbiAgICAgICAgICAgICAgICB0aGlzLmJ5dGVPZmZzZXRJbkN1cnJlbnRCdWZmZXIgPSBlbmQ7XG4gICAgICAgICAgICAgICAgaSA9IHNpemU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBjaHVua1NpemUgPSByZW1haW5pbmdcbiAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSB0aGlzLmJ5dGVPZmZzZXRJbkN1cnJlbnRCdWZmZXIgKyByZW1haW5pbmc7XG4gICAgICAgICAgICAgICAgb3V0QnVmZmVycy5wdXNoKHRoaXMuYnVmZmVyc1t0aGlzLmJ1ZmZlckluZGV4XS5zbGljZSh0aGlzLmJ5dGVPZmZzZXRJbkN1cnJlbnRCdWZmZXIsIGVuZCkpO1xuICAgICAgICAgICAgICAgIGlmIChyZW1haW5pbmcgPT09IHJlbWFpbmluZ0NhcGFjaXR5SW5UaGlzQnVmZmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuYnVmZmVyc1t0aGlzLmJ1ZmZlckluZGV4XSB1c2VkIHVwLCBzaGlmdCB0byBuZXh0IG9uZVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ5dGVPZmZzZXRJbkN1cnJlbnRCdWZmZXIgPSAwO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlckluZGV4Kys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ5dGVPZmZzZXRJbkN1cnJlbnRCdWZmZXIgPSBlbmQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMucHVzaGVkQnl0ZXNMZW5ndGggKz0gcmVtYWluaW5nO1xuICAgICAgICAgICAgICAgIGkgKz0gcmVtYWluaW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChvdXRCdWZmZXJzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHRoaXMucHVzaChCdWZmZXIuY29uY2F0KG91dEJ1ZmZlcnMpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChvdXRCdWZmZXJzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgdGhpcy5wdXNoKG91dEJ1ZmZlcnNbMF0pO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbmNvbnN0IG1heEJ1ZmZlckxlbmd0aCA9IGJ1ZmZlci5jb25zdGFudHMuTUFYX0xFTkdUSDtcbi8qKlxuICogVGhpcyBjbGFzcyBwcm92aWRlcyBhIGJ1ZmZlciBjb250YWluZXIgd2hpY2ggY29uY2VwdHVhbGx5IGhhcyBubyBoYXJkIHNpemUgbGltaXQuXG4gKiBJdCBhY2NlcHRzIGEgY2FwYWNpdHksIGFuIGFycmF5IG9mIGlucHV0IGJ1ZmZlcnMgYW5kIHRoZSB0b3RhbCBsZW5ndGggb2YgaW5wdXQgZGF0YS5cbiAqIEl0IHdpbGwgYWxsb2NhdGUgYW4gaW50ZXJuYWwgXCJidWZmZXJcIiBvZiB0aGUgY2FwYWNpdHkgYW5kIGZpbGwgdGhlIGRhdGEgaW4gdGhlIGlucHV0IGJ1ZmZlcnNcbiAqIGludG8gdGhlIGludGVybmFsIFwiYnVmZmVyXCIgc2VyaWFsbHkgd2l0aCByZXNwZWN0IHRvIHRoZSB0b3RhbCBsZW5ndGguXG4gKiBUaGVuIGJ5IGNhbGxpbmcgUG9vbGVkQnVmZmVyLmdldFJlYWRhYmxlU3RyZWFtKCksIHlvdSBjYW4gZ2V0IGEgcmVhZGFibGUgc3RyZWFtXG4gKiBhc3NlbWJsZWQgZnJvbSBhbGwgdGhlIGRhdGEgaW4gdGhlIGludGVybmFsIFwiYnVmZmVyXCIuXG4gKi9cbmNsYXNzIFBvb2xlZEJ1ZmZlciB7XG4gICAgLyoqXG4gICAgICogVGhlIHNpemUgb2YgdGhlIGRhdGEgY29udGFpbmVkIGluIHRoZSBwb29sZWQgYnVmZmVycy5cbiAgICAgKi9cbiAgICBnZXQgc2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpemU7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKGNhcGFjaXR5LCBidWZmZXJzLCB0b3RhbExlbmd0aCkge1xuICAgICAgICAvKipcbiAgICAgICAgICogSW50ZXJuYWwgYnVmZmVycyB1c2VkIHRvIGtlZXAgdGhlIGRhdGEuXG4gICAgICAgICAqIEVhY2ggYnVmZmVyIGhhcyBhIGxlbmd0aCBvZiB0aGUgbWF4QnVmZmVyTGVuZ3RoIGV4Y2VwdCBsYXN0IG9uZS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuYnVmZmVycyA9IFtdO1xuICAgICAgICB0aGlzLmNhcGFjaXR5ID0gY2FwYWNpdHk7XG4gICAgICAgIHRoaXMuX3NpemUgPSAwO1xuICAgICAgICAvLyBhbGxvY2F0ZVxuICAgICAgICBjb25zdCBidWZmZXJOdW0gPSBNYXRoLmNlaWwoY2FwYWNpdHkgLyBtYXhCdWZmZXJMZW5ndGgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1ZmZlck51bTsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgbGVuID0gaSA9PT0gYnVmZmVyTnVtIC0gMSA/IGNhcGFjaXR5ICUgbWF4QnVmZmVyTGVuZ3RoIDogbWF4QnVmZmVyTGVuZ3RoO1xuICAgICAgICAgICAgaWYgKGxlbiA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGxlbiA9IG1heEJ1ZmZlckxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYnVmZmVycy5wdXNoKEJ1ZmZlci5hbGxvY1Vuc2FmZShsZW4pKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYnVmZmVycykge1xuICAgICAgICAgICAgdGhpcy5maWxsKGJ1ZmZlcnMsIHRvdGFsTGVuZ3RoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBGaWxsIHRoZSBpbnRlcm5hbCBidWZmZXJzIHdpdGggZGF0YSBpbiB0aGUgaW5wdXQgYnVmZmVycyBzZXJpYWxseVxuICAgICAqIHdpdGggcmVzcGVjdCB0byB0aGUgdG90YWwgbGVuZ3RoIGFuZCB0aGUgdG90YWwgY2FwYWNpdHkgb2YgdGhlIGludGVybmFsIGJ1ZmZlcnMuXG4gICAgICogRGF0YSBjb3BpZWQgd2lsbCBiZSBzaGlmdCBvdXQgb2YgdGhlIGlucHV0IGJ1ZmZlcnMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYnVmZmVycyAtIElucHV0IGJ1ZmZlcnMgY29udGFpbmluZyB0aGUgZGF0YSB0byBiZSBmaWxsZWQgaW4gdGhlIHBvb2xlZCBidWZmZXJcbiAgICAgKiBAcGFyYW0gdG90YWxMZW5ndGggLSBUb3RhbCBsZW5ndGggb2YgdGhlIGRhdGEgdG8gYmUgZmlsbGVkIGluLlxuICAgICAqXG4gICAgICovXG4gICAgZmlsbChidWZmZXJzLCB0b3RhbExlbmd0aCkge1xuICAgICAgICB0aGlzLl9zaXplID0gTWF0aC5taW4odGhpcy5jYXBhY2l0eSwgdG90YWxMZW5ndGgpO1xuICAgICAgICBsZXQgaSA9IDAsIGogPSAwLCB0YXJnZXRPZmZzZXQgPSAwLCBzb3VyY2VPZmZzZXQgPSAwLCB0b3RhbENvcGllZE51bSA9IDA7XG4gICAgICAgIHdoaWxlICh0b3RhbENvcGllZE51bSA8IHRoaXMuX3NpemUpIHtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IGJ1ZmZlcnNbaV07XG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLmJ1ZmZlcnNbal07XG4gICAgICAgICAgICBjb25zdCBjb3BpZWROdW0gPSBzb3VyY2UuY29weSh0YXJnZXQsIHRhcmdldE9mZnNldCwgc291cmNlT2Zmc2V0KTtcbiAgICAgICAgICAgIHRvdGFsQ29waWVkTnVtICs9IGNvcGllZE51bTtcbiAgICAgICAgICAgIHNvdXJjZU9mZnNldCArPSBjb3BpZWROdW07XG4gICAgICAgICAgICB0YXJnZXRPZmZzZXQgKz0gY29waWVkTnVtO1xuICAgICAgICAgICAgaWYgKHNvdXJjZU9mZnNldCA9PT0gc291cmNlLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICBzb3VyY2VPZmZzZXQgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRhcmdldE9mZnNldCA9PT0gdGFyZ2V0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGorKztcbiAgICAgICAgICAgICAgICB0YXJnZXRPZmZzZXQgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGNsZWFyIGNvcGllZCBmcm9tIHNvdXJjZSBidWZmZXJzXG4gICAgICAgIGJ1ZmZlcnMuc3BsaWNlKDAsIGkpO1xuICAgICAgICBpZiAoYnVmZmVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBidWZmZXJzWzBdID0gYnVmZmVyc1swXS5zbGljZShzb3VyY2VPZmZzZXQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgcmVhZGFibGUgc3RyZWFtIGFzc2VtYmxlZCBmcm9tIGFsbCB0aGUgZGF0YSBpbiB0aGUgaW50ZXJuYWwgYnVmZmVycy5cbiAgICAgKlxuICAgICAqL1xuICAgIGdldFJlYWRhYmxlU3RyZWFtKCkge1xuICAgICAgICByZXR1cm4gbmV3IEJ1ZmZlcnNTdHJlYW0odGhpcy5idWZmZXJzLCB0aGlzLnNpemUpO1xuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIFRoaXMgY2xhc3MgYWNjZXB0cyBhIE5vZGUuanMgUmVhZGFibGUgc3RyZWFtIGFzIGlucHV0LCBhbmQga2VlcHMgcmVhZGluZyBkYXRhXG4gKiBmcm9tIHRoZSBzdHJlYW0gaW50byB0aGUgaW50ZXJuYWwgYnVmZmVyIHN0cnVjdHVyZSwgdW50aWwgaXQgcmVhY2hlcyBtYXhCdWZmZXJzLlxuICogRXZlcnkgYXZhaWxhYmxlIGJ1ZmZlciB3aWxsIHRyeSB0byB0cmlnZ2VyIG91dGdvaW5nSGFuZGxlci5cbiAqXG4gKiBUaGUgaW50ZXJuYWwgYnVmZmVyIHN0cnVjdHVyZSBpbmNsdWRlcyBhbiBpbmNvbWluZyBidWZmZXIgYXJyYXksIGFuZCBhIG91dGdvaW5nXG4gKiBidWZmZXIgYXJyYXkuIFRoZSBpbmNvbWluZyBidWZmZXIgYXJyYXkgaW5jbHVkZXMgdGhlIFwiZW1wdHlcIiBidWZmZXJzIGNhbiBiZSBmaWxsZWRcbiAqIHdpdGggbmV3IGluY29taW5nIGRhdGEuIFRoZSBvdXRnb2luZyBhcnJheSBpbmNsdWRlcyB0aGUgZmlsbGVkIGJ1ZmZlcnMgdG8gYmVcbiAqIGhhbmRsZWQgYnkgb3V0Z29pbmdIYW5kbGVyLiBFdmVyeSBhYm92ZSBidWZmZXIgc2l6ZSBpcyBkZWZpbmVkIGJ5IHBhcmFtZXRlciBidWZmZXJTaXplLlxuICpcbiAqIE5VTV9PRl9BTExfQlVGRkVSUyA9IEJVRkZFUlNfSU5fSU5DT01JTkcgKyBCVUZGRVJTX0lOX09VVEdPSU5HICsgQlVGRkVSU19VTkRFUl9IQU5ETElOR1xuICpcbiAqIE5VTV9PRl9BTExfQlVGRkVSUyBsZXNzZXIgdGhhbiBvciBlcXVhbCB0byBtYXhCdWZmZXJzXG4gKlxuICogUEVSRk9STUFOQ0UgSU1QUk9WRU1FTlQgVElQUzpcbiAqIDEuIElucHV0IHN0cmVhbSBoaWdoV2F0ZXJNYXJrIGlzIGJldHRlciB0byBzZXQgYSBzYW1lIHZhbHVlIHdpdGggYnVmZmVyU2l6ZVxuICogICAgcGFyYW1ldGVyLCB3aGljaCB3aWxsIGF2b2lkIEJ1ZmZlci5jb25jYXQoKSBvcGVyYXRpb25zLlxuICogMi4gY29uY3VycmVuY3kgc2hvdWxkIHNldCBhIHNtYWxsZXIgdmFsdWUgdGhhbiBtYXhCdWZmZXJzLCB3aGljaCBpcyBoZWxwZnVsIHRvXG4gKiAgICByZWR1Y2UgdGhlIHBvc3NpYmlsaXR5IHdoZW4gYSBvdXRnb2luZyBoYW5kbGVyIHdhaXRzIGZvciB0aGUgc3RyZWFtIGRhdGEuXG4gKiAgICBpbiB0aGlzIHNpdHVhdGlvbiwgb3V0Z29pbmcgaGFuZGxlcnMgYXJlIGJsb2NrZWQuXG4gKiAgICBPdXRnb2luZyBxdWV1ZSBzaG91bGRuJ3QgYmUgZW1wdHkuXG4gKi9cbmNsYXNzIEJ1ZmZlclNjaGVkdWxlciB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBCdWZmZXJTY2hlZHVsZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVhZGFibGUgLSBBIE5vZGUuanMgUmVhZGFibGUgc3RyZWFtXG4gICAgICogQHBhcmFtIGJ1ZmZlclNpemUgLSBCdWZmZXIgc2l6ZSBvZiBldmVyeSBtYWludGFpbmVkIGJ1ZmZlclxuICAgICAqIEBwYXJhbSBtYXhCdWZmZXJzIC0gSG93IG1hbnkgYnVmZmVycyBjYW4gYmUgYWxsb2NhdGVkXG4gICAgICogQHBhcmFtIG91dGdvaW5nSGFuZGxlciAtIEFuIGFzeW5jIGZ1bmN0aW9uIHNjaGVkdWxlZCB0byBiZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcmVkIHdoZW4gYSBidWZmZXIgZnVsbHkgZmlsbGVkXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHN0cmVhbSBkYXRhXG4gICAgICogQHBhcmFtIGNvbmN1cnJlbmN5IC0gQ29uY3VycmVuY3kgb2YgZXhlY3V0aW5nIG91dGdvaW5nSGFuZGxlcnMgKD4wKVxuICAgICAqIEBwYXJhbSBlbmNvZGluZyAtIFtPcHRpb25hbF0gRW5jb2Rpbmcgb2YgUmVhZGFibGUgc3RyZWFtIHdoZW4gaXQncyBhIHN0cmluZyBzdHJlYW1cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihyZWFkYWJsZSwgYnVmZmVyU2l6ZSwgbWF4QnVmZmVycywgb3V0Z29pbmdIYW5kbGVyLCBjb25jdXJyZW5jeSwgZW5jb2RpbmcpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFuIGludGVybmFsIGV2ZW50IGVtaXR0ZXIuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmVtaXR0ZXIgPSBuZXcgZXZlbnRzLkV2ZW50RW1pdHRlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogQW4gaW50ZXJuYWwgb2Zmc2V0IG1hcmtlciB0byB0cmFjayBkYXRhIG9mZnNldCBpbiBieXRlcyBvZiBuZXh0IG91dGdvaW5nSGFuZGxlci5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMub2Zmc2V0ID0gMDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFuIGludGVybmFsIG1hcmtlciB0byB0cmFjayB3aGV0aGVyIHN0cmVhbSBpcyBlbmQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmlzU3RyZWFtRW5kID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBbiBpbnRlcm5hbCBtYXJrZXIgdG8gdHJhY2sgd2hldGhlciBzdHJlYW0gb3Igb3V0Z29pbmdIYW5kbGVyIHJldHVybnMgZXJyb3IuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmlzRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEhvdyBtYW55IGhhbmRsZXJzIGFyZSBleGVjdXRpbmcuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmV4ZWN1dGluZ091dGdvaW5nSGFuZGxlcnMgPSAwO1xuICAgICAgICAvKipcbiAgICAgICAgICogSG93IG1hbnkgYnVmZmVycyBoYXZlIGJlZW4gYWxsb2NhdGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5udW1CdWZmZXJzID0gMDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEJlY2F1c2UgdGhpcyBjbGFzcyBkb2Vzbid0IGtub3cgaG93IG11Y2ggZGF0YSBldmVyeSB0aW1lIHN0cmVhbSBwb3BzLCB3aGljaFxuICAgICAgICAgKiBpcyBkZWZpbmVkIGJ5IGhpZ2hXYXRlck1hcmtlciBvZiB0aGUgc3RyZWFtLiBTbyBCdWZmZXJTY2hlZHVsZXIgd2lsbCBjYWNoZVxuICAgICAgICAgKiBkYXRhIHJlY2VpdmVkIGZyb20gdGhlIHN0cmVhbSwgd2hlbiBkYXRhIGluIHVucmVzb2x2ZWREYXRhQXJyYXkgZXhjZWVkcyB0aGVcbiAgICAgICAgICogYmxvY2tTaXplIGRlZmluZWQsIGl0IHdpbGwgdHJ5IHRvIGNvbmNhdCBhIGJsb2NrU2l6ZSBvZiBidWZmZXIsIGZpbGwgaW50byBhdmFpbGFibGVcbiAgICAgICAgICogYnVmZmVycyBmcm9tIGluY29taW5nIGFuZCBwdXNoIHRvIG91dGdvaW5nIGFycmF5LlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy51bnJlc29sdmVkRGF0YUFycmF5ID0gW107XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBIb3cgbXVjaCBkYXRhIGNvbnNpc3RlZCBpbiB1bnJlc29sdmVkRGF0YUFycmF5LlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy51bnJlc29sdmVkTGVuZ3RoID0gMDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBhcnJheSBpbmNsdWRlcyBhbGwgdGhlIGF2YWlsYWJsZSBidWZmZXJzIGNhbiBiZSB1c2VkIHRvIGZpbGwgZGF0YSBmcm9tIHN0cmVhbS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuaW5jb21pbmcgPSBbXTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBhcnJheSAocXVldWUpIGluY2x1ZGVzIGFsbCB0aGUgYnVmZmVycyBmaWxsZWQgZnJvbSBzdHJlYW0gZGF0YS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMub3V0Z29pbmcgPSBbXTtcbiAgICAgICAgaWYgKGJ1ZmZlclNpemUgPD0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYGJ1ZmZlclNpemUgbXVzdCBiZSBsYXJnZXIgdGhhbiAwLCBjdXJyZW50IGlzICR7YnVmZmVyU2l6ZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF4QnVmZmVycyA8PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgbWF4QnVmZmVycyBtdXN0IGJlIGxhcmdlciB0aGFuIDAsIGN1cnJlbnQgaXMgJHttYXhCdWZmZXJzfWApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb25jdXJyZW5jeSA8PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgY29uY3VycmVuY3kgbXVzdCBiZSBsYXJnZXIgdGhhbiAwLCBjdXJyZW50IGlzICR7Y29uY3VycmVuY3l9YCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5idWZmZXJTaXplID0gYnVmZmVyU2l6ZTtcbiAgICAgICAgdGhpcy5tYXhCdWZmZXJzID0gbWF4QnVmZmVycztcbiAgICAgICAgdGhpcy5yZWFkYWJsZSA9IHJlYWRhYmxlO1xuICAgICAgICB0aGlzLm91dGdvaW5nSGFuZGxlciA9IG91dGdvaW5nSGFuZGxlcjtcbiAgICAgICAgdGhpcy5jb25jdXJyZW5jeSA9IGNvbmN1cnJlbmN5O1xuICAgICAgICB0aGlzLmVuY29kaW5nID0gZW5jb2Rpbmc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN0YXJ0IHRoZSBzY2hlZHVsZXIsIHdpbGwgcmV0dXJuIGVycm9yIHdoZW4gc3RyZWFtIG9mIGFueSBvZiB0aGUgb3V0Z29pbmdIYW5kbGVyc1xuICAgICAqIHJldHVybnMgZXJyb3IuXG4gICAgICpcbiAgICAgKi9cbiAgICBhc3luYyBkbygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVhZGFibGUub24oXCJkYXRhXCIsIChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiID8gQnVmZmVyLmZyb20oZGF0YSwgdGhpcy5lbmNvZGluZykgOiBkYXRhO1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kVW5yZXNvbHZlZERhdGEoZGF0YSk7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnJlc29sdmVEYXRhKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWFkYWJsZS5wYXVzZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5yZWFkYWJsZS5vbihcImVycm9yXCIsIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdChcImVycm9yXCIsIGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMucmVhZGFibGUub24oXCJlbmRcIiwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNTdHJlYW1FbmQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KFwiY2hlY2tFbmRcIik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5vbihcImVycm9yXCIsIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzRXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMucmVhZGFibGUucGF1c2UoKTtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLm9uKFwiY2hlY2tFbmRcIiwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm91dGdvaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyT3V0Z29pbmdIYW5kbGVycygpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzU3RyZWFtRW5kICYmIHRoaXMuZXhlY3V0aW5nT3V0Z29pbmdIYW5kbGVycyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy51bnJlc29sdmVkTGVuZ3RoID4gMCAmJiB0aGlzLnVucmVzb2x2ZWRMZW5ndGggPCB0aGlzLmJ1ZmZlclNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ1ZmZlciA9IHRoaXMuc2hpZnRCdWZmZXJGcm9tVW5yZXNvbHZlZERhdGFBcnJheSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vdXRnb2luZ0hhbmRsZXIoKCkgPT4gYnVmZmVyLmdldFJlYWRhYmxlU3RyZWFtKCksIGJ1ZmZlci5zaXplLCB0aGlzLm9mZnNldClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbihyZXNvbHZlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jYXRjaChyZWplY3QpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMudW5yZXNvbHZlZExlbmd0aCA+PSB0aGlzLmJ1ZmZlclNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSW5zZXJ0IGEgbmV3IGRhdGEgaW50byB1bnJlc29sdmVkIGFycmF5LlxuICAgICAqXG4gICAgICogQHBhcmFtIGRhdGEgLVxuICAgICAqL1xuICAgIGFwcGVuZFVucmVzb2x2ZWREYXRhKGRhdGEpIHtcbiAgICAgICAgdGhpcy51bnJlc29sdmVkRGF0YUFycmF5LnB1c2goZGF0YSk7XG4gICAgICAgIHRoaXMudW5yZXNvbHZlZExlbmd0aCArPSBkYXRhLmxlbmd0aDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVHJ5IHRvIHNoaWZ0IGEgYnVmZmVyIHdpdGggc2l6ZSBpbiBibG9ja1NpemUuIFRoZSBidWZmZXIgcmV0dXJuZWQgbWF5IGJlIGxlc3NcbiAgICAgKiB0aGFuIGJsb2NrU2l6ZSB3aGVuIGRhdGEgaW4gdW5yZXNvbHZlZERhdGFBcnJheSBpcyBsZXNzIHRoYW4gYnVmZmVyU2l6ZS5cbiAgICAgKlxuICAgICAqL1xuICAgIHNoaWZ0QnVmZmVyRnJvbVVucmVzb2x2ZWREYXRhQXJyYXkoYnVmZmVyKSB7XG4gICAgICAgIGlmICghYnVmZmVyKSB7XG4gICAgICAgICAgICBidWZmZXIgPSBuZXcgUG9vbGVkQnVmZmVyKHRoaXMuYnVmZmVyU2l6ZSwgdGhpcy51bnJlc29sdmVkRGF0YUFycmF5LCB0aGlzLnVucmVzb2x2ZWRMZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYnVmZmVyLmZpbGwodGhpcy51bnJlc29sdmVkRGF0YUFycmF5LCB0aGlzLnVucmVzb2x2ZWRMZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudW5yZXNvbHZlZExlbmd0aCAtPSBidWZmZXIuc2l6ZTtcbiAgICAgICAgcmV0dXJuIGJ1ZmZlcjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVzb2x2ZSBkYXRhIGluIHVucmVzb2x2ZWREYXRhQXJyYXkuIEZvciBldmVyeSBidWZmZXIgd2l0aCBzaXplIGluIGJsb2NrU2l6ZVxuICAgICAqIHNoaWZ0ZWQsIGl0IHdpbGwgdHJ5IHRvIGdldCAob3IgYWxsb2NhdGUgYSBidWZmZXIpIGZyb20gaW5jb21pbmcsIGFuZCBmaWxsIGl0LFxuICAgICAqIHRoZW4gcHVzaCBpdCBpbnRvIG91dGdvaW5nIHRvIGJlIGhhbmRsZWQgYnkgb3V0Z29pbmcgaGFuZGxlci5cbiAgICAgKlxuICAgICAqIFJldHVybiBmYWxzZSB3aGVuIGF2YWlsYWJsZSBidWZmZXJzIGluIGluY29taW5nIGFyZSBub3QgZW5vdWdoLCBlbHNlIHRydWUuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBSZXR1cm4gZmFsc2Ugd2hlbiBidWZmZXJzIGluIGluY29taW5nIGFyZSBub3QgZW5vdWdoLCBlbHNlIHRydWUuXG4gICAgICovXG4gICAgcmVzb2x2ZURhdGEoKSB7XG4gICAgICAgIHdoaWxlICh0aGlzLnVucmVzb2x2ZWRMZW5ndGggPj0gdGhpcy5idWZmZXJTaXplKSB7XG4gICAgICAgICAgICBsZXQgYnVmZmVyO1xuICAgICAgICAgICAgaWYgKHRoaXMuaW5jb21pbmcubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGJ1ZmZlciA9IHRoaXMuaW5jb21pbmcuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNoaWZ0QnVmZmVyRnJvbVVucmVzb2x2ZWREYXRhQXJyYXkoYnVmZmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm51bUJ1ZmZlcnMgPCB0aGlzLm1heEJ1ZmZlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgYnVmZmVyID0gdGhpcy5zaGlmdEJ1ZmZlckZyb21VbnJlc29sdmVkRGF0YUFycmF5KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubnVtQnVmZmVycysrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gTm8gYXZhaWxhYmxlIGJ1ZmZlciwgd2FpdCBmb3IgYnVmZmVyIHJldHVybmVkXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm91dGdvaW5nLnB1c2goYnVmZmVyKTtcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlck91dGdvaW5nSGFuZGxlcnMoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVHJ5IHRvIHRyaWdnZXIgYSBvdXRnb2luZyBoYW5kbGVyIGZvciBldmVyeSBidWZmZXIgaW4gb3V0Z29pbmcuIFN0b3Agd2hlblxuICAgICAqIGNvbmN1cnJlbmN5IHJlYWNoZXMuXG4gICAgICovXG4gICAgYXN5bmMgdHJpZ2dlck91dGdvaW5nSGFuZGxlcnMoKSB7XG4gICAgICAgIGxldCBidWZmZXI7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmV4ZWN1dGluZ091dGdvaW5nSGFuZGxlcnMgPj0gdGhpcy5jb25jdXJyZW5jeSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJ1ZmZlciA9IHRoaXMub3V0Z29pbmcuc2hpZnQoKTtcbiAgICAgICAgICAgIGlmIChidWZmZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXJPdXRnb2luZ0hhbmRsZXIoYnVmZmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSB3aGlsZSAoYnVmZmVyKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVHJpZ2dlciBhIG91dGdvaW5nIGhhbmRsZXIgZm9yIGEgYnVmZmVyIHNoaWZ0ZWQgZnJvbSBvdXRnb2luZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBidWZmZXIgLVxuICAgICAqL1xuICAgIGFzeW5jIHRyaWdnZXJPdXRnb2luZ0hhbmRsZXIoYnVmZmVyKSB7XG4gICAgICAgIGNvbnN0IGJ1ZmZlckxlbmd0aCA9IGJ1ZmZlci5zaXplO1xuICAgICAgICB0aGlzLmV4ZWN1dGluZ091dGdvaW5nSGFuZGxlcnMrKztcbiAgICAgICAgdGhpcy5vZmZzZXQgKz0gYnVmZmVyTGVuZ3RoO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5vdXRnb2luZ0hhbmRsZXIoKCkgPT4gYnVmZmVyLmdldFJlYWRhYmxlU3RyZWFtKCksIGJ1ZmZlckxlbmd0aCwgdGhpcy5vZmZzZXQgLSBidWZmZXJMZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KFwiZXJyb3JcIiwgZXJyKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmV4ZWN1dGluZ091dGdvaW5nSGFuZGxlcnMtLTtcbiAgICAgICAgdGhpcy5yZXVzZUJ1ZmZlcihidWZmZXIpO1xuICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdChcImNoZWNrRW5kXCIpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYnVmZmVyIHVzZWQgYnkgb3V0Z29pbmcgaGFuZGxlciBpbnRvIGluY29taW5nLlxuICAgICAqXG4gICAgICogQHBhcmFtIGJ1ZmZlciAtXG4gICAgICovXG4gICAgcmV1c2VCdWZmZXIoYnVmZmVyKSB7XG4gICAgICAgIHRoaXMuaW5jb21pbmcucHVzaChidWZmZXIpO1xuICAgICAgICBpZiAoIXRoaXMuaXNFcnJvciAmJiB0aGlzLnJlc29sdmVEYXRhKCkgJiYgIXRoaXMuaXNTdHJlYW1FbmQpIHtcbiAgICAgICAgICAgIHRoaXMucmVhZGFibGUucmVzdW1lKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBSZWFkcyBhIHJlYWRhYmxlIHN0cmVhbSBpbnRvIGJ1ZmZlci4gRmlsbCB0aGUgYnVmZmVyIGZyb20gb2Zmc2V0IHRvIGVuZC5cbiAqXG4gKiBAcGFyYW0gc3RyZWFtIC0gQSBOb2RlLmpzIFJlYWRhYmxlIHN0cmVhbVxuICogQHBhcmFtIGJ1ZmZlciAtIEJ1ZmZlciB0byBiZSBmaWxsZWQsIGxlbmd0aCBtdXN0IGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBvZmZzZXRcbiAqIEBwYXJhbSBvZmZzZXQgLSBGcm9tIHdoaWNoIHBvc2l0aW9uIGluIHRoZSBidWZmZXIgdG8gYmUgZmlsbGVkLCBpbmNsdXNpdmVcbiAqIEBwYXJhbSBlbmQgLSBUbyB3aGljaCBwb3NpdGlvbiBpbiB0aGUgYnVmZmVyIHRvIGJlIGZpbGxlZCwgZXhjbHVzaXZlXG4gKiBAcGFyYW0gZW5jb2RpbmcgLSBFbmNvZGluZyBvZiB0aGUgUmVhZGFibGUgc3RyZWFtXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHN0cmVhbVRvQnVmZmVyKHN0cmVhbSwgYnVmZmVyLCBvZmZzZXQsIGVuZCwgZW5jb2RpbmcpIHtcbiAgICBsZXQgcG9zID0gMDsgLy8gUG9zaXRpb24gaW4gc3RyZWFtXG4gICAgY29uc3QgY291bnQgPSBlbmQgLSBvZmZzZXQ7IC8vIFRvdGFsIGFtb3VudCBvZiBkYXRhIG5lZWRlZCBpbiBzdHJlYW1cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiByZWplY3QobmV3IEVycm9yKGBUaGUgb3BlcmF0aW9uIGNhbm5vdCBiZSBjb21wbGV0ZWQgaW4gdGltZW91dC5gKSksIFJFUVVFU1RfVElNRU9VVCk7XG4gICAgICAgIHN0cmVhbS5vbihcInJlYWRhYmxlXCIsICgpID0+IHtcbiAgICAgICAgICAgIGlmIChwb3MgPj0gY291bnQpIHtcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBjaHVuayA9IHN0cmVhbS5yZWFkKCk7XG4gICAgICAgICAgICBpZiAoIWNodW5rKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBjaHVuayA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIGNodW5rID0gQnVmZmVyLmZyb20oY2h1bmssIGVuY29kaW5nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEhvdyBtdWNoIGRhdGEgbmVlZGVkIGluIHRoaXMgY2h1bmtcbiAgICAgICAgICAgIGNvbnN0IGNodW5rTGVuZ3RoID0gcG9zICsgY2h1bmsubGVuZ3RoID4gY291bnQgPyBjb3VudCAtIHBvcyA6IGNodW5rLmxlbmd0aDtcbiAgICAgICAgICAgIGJ1ZmZlci5maWxsKGNodW5rLnNsaWNlKDAsIGNodW5rTGVuZ3RoKSwgb2Zmc2V0ICsgcG9zLCBvZmZzZXQgKyBwb3MgKyBjaHVua0xlbmd0aCk7XG4gICAgICAgICAgICBwb3MgKz0gY2h1bmtMZW5ndGg7XG4gICAgICAgIH0pO1xuICAgICAgICBzdHJlYW0ub24oXCJlbmRcIiwgKCkgPT4ge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgICAgaWYgKHBvcyA8IGNvdW50KSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgU3RyZWFtIGRyYWlucyBiZWZvcmUgZ2V0dGluZyBlbm91Z2ggZGF0YSBuZWVkZWQuIERhdGEgcmVhZDogJHtwb3N9LCBkYXRhIG5lZWQ6ICR7Y291bnR9YCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgc3RyZWFtLm9uKFwiZXJyb3JcIiwgKG1zZykgPT4ge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgICAgcmVqZWN0KG1zZyk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuLyoqXG4gKiBSZWFkcyBhIHJlYWRhYmxlIHN0cmVhbSBpbnRvIGJ1ZmZlciBlbnRpcmVseS5cbiAqXG4gKiBAcGFyYW0gc3RyZWFtIC0gQSBOb2RlLmpzIFJlYWRhYmxlIHN0cmVhbVxuICogQHBhcmFtIGJ1ZmZlciAtIEJ1ZmZlciB0byBiZSBmaWxsZWQsIGxlbmd0aCBtdXN0IGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBvZmZzZXRcbiAqIEBwYXJhbSBlbmNvZGluZyAtIEVuY29kaW5nIG9mIHRoZSBSZWFkYWJsZSBzdHJlYW1cbiAqIEByZXR1cm5zIHdpdGggdGhlIGNvdW50IG9mIGJ5dGVzIHJlYWQuXG4gKiBAdGhyb3dzIGBSYW5nZUVycm9yYCBJZiBidWZmZXIgc2l6ZSBpcyBub3QgYmlnIGVub3VnaC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc3RyZWFtVG9CdWZmZXIyKHN0cmVhbSwgYnVmZmVyLCBlbmNvZGluZykge1xuICAgIGxldCBwb3MgPSAwOyAvLyBQb3NpdGlvbiBpbiBzdHJlYW1cbiAgICBjb25zdCBidWZmZXJTaXplID0gYnVmZmVyLmxlbmd0aDtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBzdHJlYW0ub24oXCJyZWFkYWJsZVwiLCAoKSA9PiB7XG4gICAgICAgICAgICBsZXQgY2h1bmsgPSBzdHJlYW0ucmVhZCgpO1xuICAgICAgICAgICAgaWYgKCFjaHVuaykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgY2h1bmsgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBjaHVuayA9IEJ1ZmZlci5mcm9tKGNodW5rLCBlbmNvZGluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocG9zICsgY2h1bmsubGVuZ3RoID4gYnVmZmVyU2l6ZSkge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYFN0cmVhbSBleGNlZWRzIGJ1ZmZlciBzaXplLiBCdWZmZXIgc2l6ZTogJHtidWZmZXJTaXplfWApKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBidWZmZXIuZmlsbChjaHVuaywgcG9zLCBwb3MgKyBjaHVuay5sZW5ndGgpO1xuICAgICAgICAgICAgcG9zICs9IGNodW5rLmxlbmd0aDtcbiAgICAgICAgfSk7XG4gICAgICAgIHN0cmVhbS5vbihcImVuZFwiLCAoKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKHBvcyk7XG4gICAgICAgIH0pO1xuICAgICAgICBzdHJlYW0ub24oXCJlcnJvclwiLCByZWplY3QpO1xuICAgIH0pO1xufVxuLyoqXG4gKiBPTkxZIEFWQUlMQUJMRSBJTiBOT0RFLkpTIFJVTlRJTUUuXG4gKlxuICogV3JpdGVzIHRoZSBjb250ZW50IG9mIGEgcmVhZHN0cmVhbSB0byBhIGxvY2FsIGZpbGUuIFJldHVybnMgYSBQcm9taXNlIHdoaWNoIGlzIGNvbXBsZXRlZCBhZnRlciB0aGUgZmlsZSBoYW5kbGUgaXMgY2xvc2VkLlxuICpcbiAqIEBwYXJhbSBycyAtIFRoZSByZWFkIHN0cmVhbS5cbiAqIEBwYXJhbSBmaWxlIC0gRGVzdGluYXRpb24gZmlsZSBwYXRoLlxuICovXG5hc3luYyBmdW5jdGlvbiByZWFkU3RyZWFtVG9Mb2NhbEZpbGUocnMsIGZpbGUpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCB3cyA9IGZzX19uYW1lc3BhY2UuY3JlYXRlV3JpdGVTdHJlYW0oZmlsZSk7XG4gICAgICAgIHJzLm9uKFwiZXJyb3JcIiwgKGVycikgPT4ge1xuICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH0pO1xuICAgICAgICB3cy5vbihcImVycm9yXCIsIChlcnIpID0+IHtcbiAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9KTtcbiAgICAgICAgd3Mub24oXCJjbG9zZVwiLCByZXNvbHZlKTtcbiAgICAgICAgcnMucGlwZSh3cyk7XG4gICAgfSk7XG59XG4vKipcbiAqIE9OTFkgQVZBSUxBQkxFIElOIE5PREUuSlMgUlVOVElNRS5cbiAqXG4gKiBQcm9taXNpZmllZCB2ZXJzaW9uIG9mIGZzLnN0YXQoKS5cbiAqL1xuY29uc3QgZnNTdGF0ID0gdXRpbF9fbmFtZXNwYWNlLnByb21pc2lmeShmc19fbmFtZXNwYWNlLnN0YXQpO1xuY29uc3QgZnNDcmVhdGVSZWFkU3RyZWFtID0gZnNfX25hbWVzcGFjZS5jcmVhdGVSZWFkU3RyZWFtO1xuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogQSBCbG9iQ2xpZW50IHJlcHJlc2VudHMgYSBVUkwgdG8gYW4gQXp1cmUgU3RvcmFnZSBibG9iOyB0aGUgYmxvYiBtYXkgYmUgYSBibG9jayBibG9iLFxuICogYXBwZW5kIGJsb2IsIG9yIHBhZ2UgYmxvYi5cbiAqL1xuY2xhc3MgQmxvYkNsaWVudCBleHRlbmRzIFN0b3JhZ2VDbGllbnQge1xuICAgIC8qKlxuICAgICAqIFRoZSBuYW1lIG9mIHRoZSBibG9iLlxuICAgICAqL1xuICAgIGdldCBuYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbmFtZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgb2YgdGhlIHN0b3JhZ2UgY29udGFpbmVyIHRoZSBibG9iIGlzIGFzc29jaWF0ZWQgd2l0aC5cbiAgICAgKi9cbiAgICBnZXQgY29udGFpbmVyTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRhaW5lck5hbWU7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKHVybE9yQ29ubmVjdGlvblN0cmluZywgY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUsIGJsb2JOYW1lT3JPcHRpb25zLCBcbiAgICAvLyBMZWdhY3ksIG5vIGZpeCBmb3IgZXNsaW50IGVycm9yIHdpdGhvdXQgYnJlYWtpbmcuIERpc2FibGUgaXQgZm9yIHRoaXMgaW50ZXJmYWNlLlxuICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYXp1cmUvYXp1cmUtc2RrL3RzLW5hbWluZy1vcHRpb25zKi9cbiAgICBvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgICAgICBsZXQgcGlwZWxpbmU7XG4gICAgICAgIGxldCB1cmw7XG4gICAgICAgIGlmIChpc1BpcGVsaW5lTGlrZShjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSkpIHtcbiAgICAgICAgICAgIC8vICh1cmw6IHN0cmluZywgcGlwZWxpbmU6IFBpcGVsaW5lKVxuICAgICAgICAgICAgdXJsID0gdXJsT3JDb25uZWN0aW9uU3RyaW5nO1xuICAgICAgICAgICAgcGlwZWxpbmUgPSBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICgoY29yZVV0aWwuaXNOb2RlICYmIGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lIGluc3RhbmNlb2YgU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwpIHx8XG4gICAgICAgICAgICBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSBpbnN0YW5jZW9mIEFub255bW91c0NyZWRlbnRpYWwgfHxcbiAgICAgICAgICAgIGNvcmVBdXRoLmlzVG9rZW5DcmVkZW50aWFsKGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lKSkge1xuICAgICAgICAgICAgLy8gKHVybDogc3RyaW5nLCBjcmVkZW50aWFsPzogU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwgfCBBbm9ueW1vdXNDcmVkZW50aWFsIHwgVG9rZW5DcmVkZW50aWFsLCBvcHRpb25zPzogU3RvcmFnZVBpcGVsaW5lT3B0aW9ucylcbiAgICAgICAgICAgIHVybCA9IHVybE9yQ29ubmVjdGlvblN0cmluZztcbiAgICAgICAgICAgIG9wdGlvbnMgPSBibG9iTmFtZU9yT3B0aW9ucztcbiAgICAgICAgICAgIHBpcGVsaW5lID0gbmV3UGlwZWxpbmUoY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSAmJlxuICAgICAgICAgICAgdHlwZW9mIGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAvLyAodXJsOiBzdHJpbmcsIGNyZWRlbnRpYWw/OiBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbCB8IEFub255bW91c0NyZWRlbnRpYWwgfCBUb2tlbkNyZWRlbnRpYWwsIG9wdGlvbnM/OiBTdG9yYWdlUGlwZWxpbmVPcHRpb25zKVxuICAgICAgICAgICAgLy8gVGhlIHNlY29uZCBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkLiBVc2UgYW5vbnltb3VzIGNyZWRlbnRpYWwuXG4gICAgICAgICAgICB1cmwgPSB1cmxPckNvbm5lY3Rpb25TdHJpbmc7XG4gICAgICAgICAgICBpZiAoYmxvYk5hbWVPck9wdGlvbnMgJiYgdHlwZW9mIGJsb2JOYW1lT3JPcHRpb25zICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucyA9IGJsb2JOYW1lT3JPcHRpb25zO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGlwZWxpbmUgPSBuZXdQaXBlbGluZShuZXcgQW5vbnltb3VzQ3JlZGVudGlhbCgpLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSAmJlxuICAgICAgICAgICAgdHlwZW9mIGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lID09PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICBibG9iTmFtZU9yT3B0aW9ucyAmJlxuICAgICAgICAgICAgdHlwZW9mIGJsb2JOYW1lT3JPcHRpb25zID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAvLyAoY29ubmVjdGlvblN0cmluZzogc3RyaW5nLCBjb250YWluZXJOYW1lOiBzdHJpbmcsIGJsb2JOYW1lOiBzdHJpbmcsIG9wdGlvbnM/OiBTdG9yYWdlUGlwZWxpbmVPcHRpb25zKVxuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyTmFtZSA9IGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lO1xuICAgICAgICAgICAgY29uc3QgYmxvYk5hbWUgPSBibG9iTmFtZU9yT3B0aW9ucztcbiAgICAgICAgICAgIGNvbnN0IGV4dHJhY3RlZENyZWRzID0gZXh0cmFjdENvbm5lY3Rpb25TdHJpbmdQYXJ0cyh1cmxPckNvbm5lY3Rpb25TdHJpbmcpO1xuICAgICAgICAgICAgaWYgKGV4dHJhY3RlZENyZWRzLmtpbmQgPT09IFwiQWNjb3VudENvbm5TdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIGlmIChjb3JlVXRpbC5pc05vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2hhcmVkS2V5Q3JlZGVudGlhbCA9IG5ldyBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbChleHRyYWN0ZWRDcmVkcy5hY2NvdW50TmFtZSwgZXh0cmFjdGVkQ3JlZHMuYWNjb3VudEtleSk7XG4gICAgICAgICAgICAgICAgICAgIHVybCA9IGFwcGVuZFRvVVJMUGF0aChhcHBlbmRUb1VSTFBhdGgoZXh0cmFjdGVkQ3JlZHMudXJsLCBlbmNvZGVVUklDb21wb25lbnQoY29udGFpbmVyTmFtZSkpLCBlbmNvZGVVUklDb21wb25lbnQoYmxvYk5hbWUpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zLnByb3h5T3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5wcm94eU9wdGlvbnMgPSBjb3JlUmVzdFBpcGVsaW5lLmdldERlZmF1bHRQcm94eVNldHRpbmdzKGV4dHJhY3RlZENyZWRzLnByb3h5VXJpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBwaXBlbGluZSA9IG5ld1BpcGVsaW5lKHNoYXJlZEtleUNyZWRlbnRpYWwsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQWNjb3VudCBjb25uZWN0aW9uIHN0cmluZyBpcyBvbmx5IHN1cHBvcnRlZCBpbiBOb2RlLmpzIGVudmlyb25tZW50XCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGV4dHJhY3RlZENyZWRzLmtpbmQgPT09IFwiU0FTQ29ublN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgdXJsID1cbiAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG9VUkxQYXRoKGFwcGVuZFRvVVJMUGF0aChleHRyYWN0ZWRDcmVkcy51cmwsIGVuY29kZVVSSUNvbXBvbmVudChjb250YWluZXJOYW1lKSksIGVuY29kZVVSSUNvbXBvbmVudChibG9iTmFtZSkpICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiP1wiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhY3RlZENyZWRzLmFjY291bnRTYXM7XG4gICAgICAgICAgICAgICAgcGlwZWxpbmUgPSBuZXdQaXBlbGluZShuZXcgQW5vbnltb3VzQ3JlZGVudGlhbCgpLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbm5lY3Rpb24gc3RyaW5nIG11c3QgYmUgZWl0aGVyIGFuIEFjY291bnQgY29ubmVjdGlvbiBzdHJpbmcgb3IgYSBTQVMgY29ubmVjdGlvbiBzdHJpbmdcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3Rpbmcgbm9uLWVtcHR5IHN0cmluZ3MgZm9yIGNvbnRhaW5lck5hbWUgYW5kIGJsb2JOYW1lIHBhcmFtZXRlcnNcIik7XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIodXJsLCBwaXBlbGluZSk7XG4gICAgICAgICh7IGJsb2JOYW1lOiB0aGlzLl9uYW1lLCBjb250YWluZXJOYW1lOiB0aGlzLl9jb250YWluZXJOYW1lIH0gPVxuICAgICAgICAgICAgdGhpcy5nZXRCbG9iQW5kQ29udGFpbmVyTmFtZXNGcm9tVXJsKCkpO1xuICAgICAgICB0aGlzLmJsb2JDb250ZXh0ID0gdGhpcy5zdG9yYWdlQ2xpZW50Q29udGV4dC5ibG9iO1xuICAgICAgICB0aGlzLl9zbmFwc2hvdCA9IGdldFVSTFBhcmFtZXRlcih0aGlzLnVybCwgVVJMQ29uc3RhbnRzLlBhcmFtZXRlcnMuU05BUFNIT1QpO1xuICAgICAgICB0aGlzLl92ZXJzaW9uSWQgPSBnZXRVUkxQYXJhbWV0ZXIodGhpcy51cmwsIFVSTENvbnN0YW50cy5QYXJhbWV0ZXJzLlZFUlNJT05JRCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgQmxvYkNsaWVudCBvYmplY3QgaWRlbnRpY2FsIHRvIHRoZSBzb3VyY2UgYnV0IHdpdGggdGhlIHNwZWNpZmllZCBzbmFwc2hvdCB0aW1lc3RhbXAuXG4gICAgICogUHJvdmlkZSBcIlwiIHdpbGwgcmVtb3ZlIHRoZSBzbmFwc2hvdCBhbmQgcmV0dXJuIGEgQ2xpZW50IHRvIHRoZSBiYXNlIGJsb2IuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc25hcHNob3QgLSBUaGUgc25hcHNob3QgdGltZXN0YW1wLlxuICAgICAqIEByZXR1cm5zIEEgbmV3IEJsb2JDbGllbnQgb2JqZWN0IGlkZW50aWNhbCB0byB0aGUgc291cmNlIGJ1dCB3aXRoIHRoZSBzcGVjaWZpZWQgc25hcHNob3QgdGltZXN0YW1wXG4gICAgICovXG4gICAgd2l0aFNuYXBzaG90KHNuYXBzaG90KSB7XG4gICAgICAgIHJldHVybiBuZXcgQmxvYkNsaWVudChzZXRVUkxQYXJhbWV0ZXIodGhpcy51cmwsIFVSTENvbnN0YW50cy5QYXJhbWV0ZXJzLlNOQVBTSE9ULCBzbmFwc2hvdC5sZW5ndGggPT09IDAgPyB1bmRlZmluZWQgOiBzbmFwc2hvdCksIHRoaXMucGlwZWxpbmUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IEJsb2JDbGllbnQgb2JqZWN0IHBvaW50aW5nIHRvIGEgdmVyc2lvbiBvZiB0aGlzIGJsb2IuXG4gICAgICogUHJvdmlkZSBcIlwiIHdpbGwgcmVtb3ZlIHRoZSB2ZXJzaW9uSWQgYW5kIHJldHVybiBhIENsaWVudCB0byB0aGUgYmFzZSBibG9iLlxuICAgICAqXG4gICAgICogQHBhcmFtIHZlcnNpb25JZCAtIFRoZSB2ZXJzaW9uSWQuXG4gICAgICogQHJldHVybnMgQSBuZXcgQmxvYkNsaWVudCBvYmplY3QgcG9pbnRpbmcgdG8gdGhlIHZlcnNpb24gb2YgdGhpcyBibG9iLlxuICAgICAqL1xuICAgIHdpdGhWZXJzaW9uKHZlcnNpb25JZCkge1xuICAgICAgICByZXR1cm4gbmV3IEJsb2JDbGllbnQoc2V0VVJMUGFyYW1ldGVyKHRoaXMudXJsLCBVUkxDb25zdGFudHMuUGFyYW1ldGVycy5WRVJTSU9OSUQsIHZlcnNpb25JZC5sZW5ndGggPT09IDAgPyB1bmRlZmluZWQgOiB2ZXJzaW9uSWQpLCB0aGlzLnBpcGVsaW5lKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIEFwcGVuZEJsb2JDbGllbnQgb2JqZWN0LlxuICAgICAqXG4gICAgICovXG4gICAgZ2V0QXBwZW5kQmxvYkNsaWVudCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBcHBlbmRCbG9iQ2xpZW50KHRoaXMudXJsLCB0aGlzLnBpcGVsaW5lKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIEJsb2NrQmxvYkNsaWVudCBvYmplY3QuXG4gICAgICpcbiAgICAgKi9cbiAgICBnZXRCbG9ja0Jsb2JDbGllbnQoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQmxvY2tCbG9iQ2xpZW50KHRoaXMudXJsLCB0aGlzLnBpcGVsaW5lKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIFBhZ2VCbG9iQ2xpZW50IG9iamVjdC5cbiAgICAgKlxuICAgICAqL1xuICAgIGdldFBhZ2VCbG9iQ2xpZW50KCkge1xuICAgICAgICByZXR1cm4gbmV3IFBhZ2VCbG9iQ2xpZW50KHRoaXMudXJsLCB0aGlzLnBpcGVsaW5lKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVhZHMgb3IgZG93bmxvYWRzIGEgYmxvYiBmcm9tIHRoZSBzeXN0ZW0sIGluY2x1ZGluZyBpdHMgbWV0YWRhdGEgYW5kIHByb3BlcnRpZXMuXG4gICAgICogWW91IGNhbiBhbHNvIGNhbGwgR2V0IEJsb2IgdG8gcmVhZCBhIHNuYXBzaG90LlxuICAgICAqXG4gICAgICogKiBJbiBOb2RlLmpzLCBkYXRhIHJldHVybnMgaW4gYSBSZWFkYWJsZSBzdHJlYW0gcmVhZGFibGVTdHJlYW1Cb2R5XG4gICAgICogKiBJbiBicm93c2VycywgZGF0YSByZXR1cm5zIGluIGEgcHJvbWlzZSBibG9iQm9keVxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvZ2V0LWJsb2JcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvZmZzZXQgLSBGcm9tIHdoaWNoIHBvc2l0aW9uIG9mIHRoZSBibG9iIHRvIGRvd25sb2FkLCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMFxuICAgICAqIEBwYXJhbSBjb3VudCAtIEhvdyBtdWNoIGRhdGEgdG8gYmUgZG93bmxvYWRlZCwgZ3JlYXRlciB0aGFuIDAuIFdpbGwgZG93bmxvYWQgdG8gdGhlIGVuZCB3aGVuIHVuZGVmaW5lZFxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgb3B0aW9ucyB0byBCbG9iIERvd25sb2FkIG9wZXJhdGlvbi5cbiAgICAgKlxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2FnZSAoTm9kZS5qcyk6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIERvd25sb2FkIGFuZCBjb252ZXJ0IGEgYmxvYiB0byBhIHN0cmluZ1xuICAgICAqIGNvbnN0IGRvd25sb2FkQmxvY2tCbG9iUmVzcG9uc2UgPSBhd2FpdCBibG9iQ2xpZW50LmRvd25sb2FkKCk7XG4gICAgICogY29uc3QgZG93bmxvYWRlZCA9IGF3YWl0IHN0cmVhbVRvQnVmZmVyKGRvd25sb2FkQmxvY2tCbG9iUmVzcG9uc2UucmVhZGFibGVTdHJlYW1Cb2R5KTtcbiAgICAgKiBjb25zb2xlLmxvZyhcIkRvd25sb2FkZWQgYmxvYiBjb250ZW50OlwiLCBkb3dubG9hZGVkLnRvU3RyaW5nKCkpO1xuICAgICAqXG4gICAgICogYXN5bmMgZnVuY3Rpb24gc3RyZWFtVG9CdWZmZXIocmVhZGFibGVTdHJlYW0pIHtcbiAgICAgKiByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAqIGNvbnN0IGNodW5rcyA9IFtdO1xuICAgICAqIHJlYWRhYmxlU3RyZWFtLm9uKFwiZGF0YVwiLCAoZGF0YSkgPT4ge1xuICAgICAqIGNodW5rcy5wdXNoKGRhdGEgaW5zdGFuY2VvZiBCdWZmZXIgPyBkYXRhIDogQnVmZmVyLmZyb20oZGF0YSkpO1xuICAgICAqIH0pO1xuICAgICAqIHJlYWRhYmxlU3RyZWFtLm9uKFwiZW5kXCIsICgpID0+IHtcbiAgICAgKiByZXNvbHZlKEJ1ZmZlci5jb25jYXQoY2h1bmtzKSk7XG4gICAgICogfSk7XG4gICAgICogcmVhZGFibGVTdHJlYW0ub24oXCJlcnJvclwiLCByZWplY3QpO1xuICAgICAqIH0pO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNhZ2UgKGJyb3dzZXIpOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiAvLyBEb3dubG9hZCBhbmQgY29udmVydCBhIGJsb2IgdG8gYSBzdHJpbmdcbiAgICAgKiBjb25zdCBkb3dubG9hZEJsb2NrQmxvYlJlc3BvbnNlID0gYXdhaXQgYmxvYkNsaWVudC5kb3dubG9hZCgpO1xuICAgICAqIGNvbnN0IGRvd25sb2FkZWQgPSBhd2FpdCBibG9iVG9TdHJpbmcoYXdhaXQgZG93bmxvYWRCbG9ja0Jsb2JSZXNwb25zZS5ibG9iQm9keSk7XG4gICAgICogY29uc29sZS5sb2coXG4gICAgICogICBcIkRvd25sb2FkZWQgYmxvYiBjb250ZW50XCIsXG4gICAgICogICBkb3dubG9hZGVkXG4gICAgICogKTtcbiAgICAgKlxuICAgICAqIGFzeW5jIGZ1bmN0aW9uIGJsb2JUb1N0cmluZyhibG9iOiBCbG9iKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgKiAgIGNvbnN0IGZpbGVSZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAqICAgcmV0dXJuIG5ldyBQcm9taXNlPHN0cmluZz4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAqICAgICBmaWxlUmVhZGVyLm9ubG9hZGVuZCA9IChldjogYW55KSA9PiB7XG4gICAgICogICAgICAgcmVzb2x2ZShldi50YXJnZXQhLnJlc3VsdCk7XG4gICAgICogICAgIH07XG4gICAgICogICAgIGZpbGVSZWFkZXIub25lcnJvciA9IHJlamVjdDtcbiAgICAgKiAgICAgZmlsZVJlYWRlci5yZWFkQXNUZXh0KGJsb2IpO1xuICAgICAqICAgfSk7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGFzeW5jIGRvd25sb2FkKG9mZnNldCA9IDAsIGNvdW50LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0gb3B0aW9ucy5jb25kaXRpb25zIHx8IHt9O1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIGVuc3VyZUNwa0lmU3BlY2lmaWVkKG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSwgdGhpcy5pc0h0dHBzKTtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iQ2xpZW50LWRvd25sb2FkXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgY29uc3QgcmVzID0gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5ibG9iQ29udGV4dC5kb3dubG9hZCh7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIHJlcXVlc3RPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgIG9uRG93bmxvYWRQcm9ncmVzczogY29yZVV0aWwuaXNOb2RlID8gdW5kZWZpbmVkIDogb3B0aW9ucy5vblByb2dyZXNzLCAvLyBmb3IgTm9kZS5qcywgcHJvZ3Jlc3MgaXMgcmVwb3J0ZWQgYnkgUmV0cmlhYmxlUmVhZGFibGVTdHJlYW1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHJhbmdlOiBvZmZzZXQgPT09IDAgJiYgIWNvdW50ID8gdW5kZWZpbmVkIDogcmFuZ2VUb1N0cmluZyh7IG9mZnNldCwgY291bnQgfSksXG4gICAgICAgICAgICAgICAgcmFuZ2VHZXRDb250ZW50TUQ1OiBvcHRpb25zLnJhbmdlR2V0Q29udGVudE1ENSxcbiAgICAgICAgICAgICAgICByYW5nZUdldENvbnRlbnRDUkM2NDogb3B0aW9ucy5yYW5nZUdldENvbnRlbnRDcmM2NCxcbiAgICAgICAgICAgICAgICBzbmFwc2hvdDogb3B0aW9ucy5zbmFwc2hvdCxcbiAgICAgICAgICAgICAgICBjcGtJbmZvOiBvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgY29uc3Qgd3JhcHBlZFJlcyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcmVzKSwgeyBfcmVzcG9uc2U6IHJlcy5fcmVzcG9uc2UsIG9iamVjdFJlcGxpY2F0aW9uRGVzdGluYXRpb25Qb2xpY3lJZDogcmVzLm9iamVjdFJlcGxpY2F0aW9uUG9saWN5SWQsIG9iamVjdFJlcGxpY2F0aW9uU291cmNlUHJvcGVydGllczogcGFyc2VPYmplY3RSZXBsaWNhdGlvblJlY29yZChyZXMub2JqZWN0UmVwbGljYXRpb25SdWxlcykgfSk7XG4gICAgICAgICAgICAvLyBSZXR1cm4gYnJvd3NlciByZXNwb25zZSBpbW1lZGlhdGVseVxuICAgICAgICAgICAgaWYgKCFjb3JlVXRpbC5pc05vZGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlZFJlcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFdlIHN1cHBvcnQgcmV0cnlpbmcgd2hlbiBkb3dubG9hZCBzdHJlYW0gdW5leHBlY3RlZCBlbmRzIGluIE5vZGUuanMgcnVudGltZVxuICAgICAgICAgICAgLy8gRm9sbG93aW5nIGNvZGUgc2hvdWxkbid0IGJlIGJ1bmRsZWQgaW50byBicm93c2VyIGJ1aWxkLCBob3dldmVyIHNvbWVcbiAgICAgICAgICAgIC8vIGJ1bmRsZXJzIG1heSB0cnkgdG8gYnVuZGxlIGZvbGxvd2luZyBjb2RlIGFuZCBcIkZpbGVSZWFkUmVzcG9uc2UudHNcIi5cbiAgICAgICAgICAgIC8vIEluIHRoaXMgY2FzZSwgXCJGaWxlRG93bmxvYWRSZXNwb25zZS5icm93c2VyLnRzXCIgd2lsbCBiZSB1c2VkIGFzIGEgc2hpbSBvZiBcIkZpbGVEb3dubG9hZFJlc3BvbnNlLnRzXCJcbiAgICAgICAgICAgIC8vIFRoZSBjb25maWcgaXMgaW4gcGFja2FnZS5qc29uIFwiYnJvd3NlclwiIGZpZWxkXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5tYXhSZXRyeVJlcXVlc3RzID09PSB1bmRlZmluZWQgfHwgb3B0aW9ucy5tYXhSZXRyeVJlcXVlc3RzIDwgMCkge1xuICAgICAgICAgICAgICAgIC8vIFRPRE86IERlZmF1bHQgdmFsdWUgb3IgbWFrZSBpdCBhIHJlcXVpcmVkIHBhcmFtZXRlcj9cbiAgICAgICAgICAgICAgICBvcHRpb25zLm1heFJldHJ5UmVxdWVzdHMgPSBERUZBVUxUX01BWF9ET1dOTE9BRF9SRVRSWV9SRVFVRVNUUztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXMuY29udGVudExlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEZpbGUgZG93bmxvYWQgcmVzcG9uc2UgZG9lc24ndCBjb250YWluIHZhbGlkIGNvbnRlbnQgbGVuZ3RoIGhlYWRlcmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFyZXMuZXRhZykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBGaWxlIGRvd25sb2FkIHJlc3BvbnNlIGRvZXNuJ3QgY29udGFpbiB2YWxpZCBldGFnIGhlYWRlcmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBCbG9iRG93bmxvYWRSZXNwb25zZSh3cmFwcGVkUmVzLCBhc3luYyAoc3RhcnQpID0+IHtcbiAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZERvd25sb2FkT3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWZNYXRjaDogb3B0aW9ucy5jb25kaXRpb25zLmlmTWF0Y2ggfHwgcmVzLmV0YWcsXG4gICAgICAgICAgICAgICAgICAgICAgICBpZk1vZGlmaWVkU2luY2U6IG9wdGlvbnMuY29uZGl0aW9ucy5pZk1vZGlmaWVkU2luY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBpZk5vbmVNYXRjaDogb3B0aW9ucy5jb25kaXRpb25zLmlmTm9uZU1hdGNoLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWZVbm1vZGlmaWVkU2luY2U6IG9wdGlvbnMuY29uZGl0aW9ucy5pZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgcmFuZ2U6IHJhbmdlVG9TdHJpbmcoe1xuICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6IG9mZnNldCArIHJlcy5jb250ZW50TGVuZ3RoIC0gc3RhcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IHN0YXJ0LFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgcmFuZ2VHZXRDb250ZW50TUQ1OiBvcHRpb25zLnJhbmdlR2V0Q29udGVudE1ENSxcbiAgICAgICAgICAgICAgICAgICAgcmFuZ2VHZXRDb250ZW50Q1JDNjQ6IG9wdGlvbnMucmFuZ2VHZXRDb250ZW50Q3JjNjQsXG4gICAgICAgICAgICAgICAgICAgIHNuYXBzaG90OiBvcHRpb25zLnNuYXBzaG90LFxuICAgICAgICAgICAgICAgICAgICBjcGtJbmZvOiBvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAvLyBEZWJ1ZyBwdXJwb3NlIG9ubHlcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAvLyAgIGBSZWFkIGZyb20gaW50ZXJuYWwgc3RyZWFtLCByYW5nZTogJHtcbiAgICAgICAgICAgICAgICAvLyAgICAgdXBkYXRlZE9wdGlvbnMucmFuZ2VcbiAgICAgICAgICAgICAgICAvLyAgIH0sIG9wdGlvbnM6ICR7SlNPTi5zdHJpbmdpZnkodXBkYXRlZE9wdGlvbnMpfWBcbiAgICAgICAgICAgICAgICAvLyApO1xuICAgICAgICAgICAgICAgIHJldHVybiAoYXdhaXQgdGhpcy5ibG9iQ29udGV4dC5kb3dubG9hZChPYmplY3QuYXNzaWduKHsgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwgfSwgdXBkYXRlZERvd25sb2FkT3B0aW9ucykpKS5yZWFkYWJsZVN0cmVhbUJvZHk7XG4gICAgICAgICAgICB9LCBvZmZzZXQsIHJlcy5jb250ZW50TGVuZ3RoLCB7XG4gICAgICAgICAgICAgICAgbWF4UmV0cnlSZXF1ZXN0czogb3B0aW9ucy5tYXhSZXRyeVJlcXVlc3RzLFxuICAgICAgICAgICAgICAgIG9uUHJvZ3Jlc3M6IG9wdGlvbnMub25Qcm9ncmVzcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBBenVyZSBibG9iIHJlc291cmNlIHJlcHJlc2VudGVkIGJ5IHRoaXMgY2xpZW50IGV4aXN0czsgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAqXG4gICAgICogTk9URTogdXNlIHRoaXMgZnVuY3Rpb24gd2l0aCBjYXJlIHNpbmNlIGFuIGV4aXN0aW5nIGJsb2IgbWlnaHQgYmUgZGVsZXRlZCBieSBvdGhlciBjbGllbnRzIG9yXG4gICAgICogYXBwbGljYXRpb25zLiBWaWNlIHZlcnNhIG5ldyBibG9icyBtaWdodCBiZSBhZGRlZCBieSBvdGhlciBjbGllbnRzIG9yIGFwcGxpY2F0aW9ucyBhZnRlciB0aGlzXG4gICAgICogZnVuY3Rpb24gY29tcGxldGVzLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBvcHRpb25zIHRvIEV4aXN0cyBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgZXhpc3RzKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JDbGllbnQtZXhpc3RzXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBlbnN1cmVDcGtJZlNwZWNpZmllZChvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksIHRoaXMuaXNIdHRwcyk7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5nZXRQcm9wZXJ0aWVzKHtcbiAgICAgICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgICAgIGN1c3RvbWVyUHJvdmlkZWRLZXk6IG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSxcbiAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGlmIChlLnN0YXR1c0NvZGUgPT09IDQwNCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBFeHBlY3RlZCBleGNlcHRpb24gd2hlbiBjaGVja2luZyBibG9iIGV4aXN0ZW5jZVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGUuc3RhdHVzQ29kZSA9PT0gNDA5ICYmXG4gICAgICAgICAgICAgICAgICAgIChlLmRldGFpbHMuZXJyb3JDb2RlID09PSBCbG9iVXNlc0N1c3RvbWVyU3BlY2lmaWVkRW5jcnlwdGlvbk1zZyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgZS5kZXRhaWxzLmVycm9yQ29kZSA9PT0gQmxvYkRvZXNOb3RVc2VDdXN0b21lclNwZWNpZmllZEVuY3J5cHRpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEV4cGVjdGVkIGV4Y2VwdGlvbiB3aGVuIGNoZWNraW5nIGJsb2IgZXhpc3RlbmNlXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbGwgdXNlci1kZWZpbmVkIG1ldGFkYXRhLCBzdGFuZGFyZCBIVFRQIHByb3BlcnRpZXMsIGFuZCBzeXN0ZW0gcHJvcGVydGllc1xuICAgICAqIGZvciB0aGUgYmxvYi4gSXQgZG9lcyBub3QgcmV0dXJuIHRoZSBjb250ZW50IG9mIHRoZSBibG9iLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2dldC1ibG9iLXByb3BlcnRpZXNcbiAgICAgKlxuICAgICAqIFdBUk5JTkc6IFRoZSBgbWV0YWRhdGFgIG9iamVjdCByZXR1cm5lZCBpbiB0aGUgcmVzcG9uc2Ugd2lsbCBoYXZlIGl0cyBrZXlzIGluIGxvd2VyY2FzZSwgZXZlbiBpZlxuICAgICAqIHRoZXkgb3JpZ2luYWxseSBjb250YWluZWQgdXBwZXJjYXNlIGNoYXJhY3RlcnMuIFRoaXMgZGlmZmVycyBmcm9tIHRoZSBtZXRhZGF0YSBrZXlzIHJldHVybmVkIGJ5XG4gICAgICogdGhlIG1ldGhvZHMgb2Yge0BsaW5rIENvbnRhaW5lckNsaWVudH0gdGhhdCBsaXN0IGJsb2JzIHVzaW5nIHRoZSBgaW5jbHVkZU1ldGFkYXRhYCBvcHRpb24sIHdoaWNoXG4gICAgICogd2lsbCByZXRhaW4gdGhlaXIgb3JpZ2luYWwgY2FzaW5nLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBvcHRpb25zIHRvIEdldCBQcm9wZXJ0aWVzIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBnZXRQcm9wZXJ0aWVzKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIGVuc3VyZUNwa0lmU3BlY2lmaWVkKG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSwgdGhpcy5pc0h0dHBzKTtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iQ2xpZW50LWdldFByb3BlcnRpZXNcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBjb25zdCByZXMgPSBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLmJsb2JDb250ZXh0LmdldFByb3BlcnRpZXMoe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICBjcGtJbmZvOiBvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcmVzKSwgeyBfcmVzcG9uc2U6IHJlcy5fcmVzcG9uc2UsIG9iamVjdFJlcGxpY2F0aW9uRGVzdGluYXRpb25Qb2xpY3lJZDogcmVzLm9iamVjdFJlcGxpY2F0aW9uUG9saWN5SWQsIG9iamVjdFJlcGxpY2F0aW9uU291cmNlUHJvcGVydGllczogcGFyc2VPYmplY3RSZXBsaWNhdGlvblJlY29yZChyZXMub2JqZWN0UmVwbGljYXRpb25SdWxlcykgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBNYXJrcyB0aGUgc3BlY2lmaWVkIGJsb2Igb3Igc25hcHNob3QgZm9yIGRlbGV0aW9uLiBUaGUgYmxvYiBpcyBsYXRlciBkZWxldGVkXG4gICAgICogZHVyaW5nIGdhcmJhZ2UgY29sbGVjdGlvbi4gTm90ZSB0aGF0IGluIG9yZGVyIHRvIGRlbGV0ZSBhIGJsb2IsIHlvdSBtdXN0IGRlbGV0ZVxuICAgICAqIGFsbCBvZiBpdHMgc25hcHNob3RzLiBZb3UgY2FuIGRlbGV0ZSBib3RoIGF0IHRoZSBzYW1lIHRpbWUgd2l0aCB0aGUgRGVsZXRlXG4gICAgICogQmxvYiBvcGVyYXRpb24uXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvZGVsZXRlLWJsb2JcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgb3B0aW9ucyB0byBCbG9iIERlbGV0ZSBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgZGVsZXRlKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYkNsaWVudC1kZWxldGVcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5ibG9iQ29udGV4dC5kZWxldGUoe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGRlbGV0ZVNuYXBzaG90czogb3B0aW9ucy5kZWxldGVTbmFwc2hvdHMsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1hcmtzIHRoZSBzcGVjaWZpZWQgYmxvYiBvciBzbmFwc2hvdCBmb3IgZGVsZXRpb24gaWYgaXQgZXhpc3RzLiBUaGUgYmxvYiBpcyBsYXRlciBkZWxldGVkXG4gICAgICogZHVyaW5nIGdhcmJhZ2UgY29sbGVjdGlvbi4gTm90ZSB0aGF0IGluIG9yZGVyIHRvIGRlbGV0ZSBhIGJsb2IsIHlvdSBtdXN0IGRlbGV0ZVxuICAgICAqIGFsbCBvZiBpdHMgc25hcHNob3RzLiBZb3UgY2FuIGRlbGV0ZSBib3RoIGF0IHRoZSBzYW1lIHRpbWUgd2l0aCB0aGUgRGVsZXRlXG4gICAgICogQmxvYiBvcGVyYXRpb24uXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvZGVsZXRlLWJsb2JcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgb3B0aW9ucyB0byBCbG9iIERlbGV0ZSBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgZGVsZXRlSWZFeGlzdHMob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYkNsaWVudC1kZWxldGVJZkV4aXN0c1wiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuZGVsZXRlKHVwZGF0ZWRPcHRpb25zKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7IHN1Y2NlZWRlZDogdHJ1ZSB9LCByZXMpLCB7IF9yZXNwb25zZTogcmVzLl9yZXNwb25zZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCgoX2EgPSBlLmRldGFpbHMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5lcnJvckNvZGUpID09PSBcIkJsb2JOb3RGb3VuZFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oeyBzdWNjZWVkZWQ6IGZhbHNlIH0sIChfYiA9IGUucmVzcG9uc2UpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5wYXJzZWRIZWFkZXJzKSwgeyBfcmVzcG9uc2U6IGUucmVzcG9uc2UgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXN0b3JlcyB0aGUgY29udGVudHMgYW5kIG1ldGFkYXRhIG9mIHNvZnQgZGVsZXRlZCBibG9iIGFuZCBhbnkgYXNzb2NpYXRlZFxuICAgICAqIHNvZnQgZGVsZXRlZCBzbmFwc2hvdHMuIFVuZGVsZXRlIEJsb2IgaXMgc3VwcG9ydGVkIG9ubHkgb24gdmVyc2lvbiAyMDE3LTA3LTI5XG4gICAgICogb3IgbGF0ZXIuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvdW5kZWxldGUtYmxvYlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBvcHRpb25zIHRvIEJsb2IgVW5kZWxldGUgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIHVuZGVsZXRlKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JDbGllbnQtdW5kZWxldGVcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5ibG9iQ29udGV4dC51bmRlbGV0ZSh7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyBzeXN0ZW0gcHJvcGVydGllcyBvbiB0aGUgYmxvYi5cbiAgICAgKlxuICAgICAqIElmIG5vIHZhbHVlIHByb3ZpZGVkLCBvciBubyB2YWx1ZSBwcm92aWRlZCBmb3IgdGhlIHNwZWNpZmllZCBibG9iIEhUVFAgaGVhZGVycyxcbiAgICAgKiB0aGVzZSBibG9iIEhUVFAgaGVhZGVycyB3aXRob3V0IGEgdmFsdWUgd2lsbCBiZSBjbGVhcmVkLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL3NldC1ibG9iLXByb3BlcnRpZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBibG9iSFRUUEhlYWRlcnMgLSBJZiBubyB2YWx1ZSBwcm92aWRlZCwgb3Igbm8gdmFsdWUgcHJvdmlkZWQgZm9yXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgc3BlY2lmaWVkIGJsb2IgSFRUUCBoZWFkZXJzLCB0aGVzZSBibG9iIEhUVFBcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnMgd2l0aG91dCBhIHZhbHVlIHdpbGwgYmUgY2xlYXJlZC5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgY29tbW9uIGhlYWRlciB0byBzZXQgaXMgYGJsb2JDb250ZW50VHlwZWBcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsaW5nIHRoZSBicm93c2VyIHRvIHByb3ZpZGUgZnVuY3Rpb25hbGl0eVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZWQgb24gZmlsZSB0eXBlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgb3B0aW9ucyB0byBCbG9iIFNldCBIVFRQIEhlYWRlcnMgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIHNldEhUVFBIZWFkZXJzKGJsb2JIVFRQSGVhZGVycywgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIG9wdGlvbnMuY29uZGl0aW9ucyA9IG9wdGlvbnMuY29uZGl0aW9ucyB8fCB7fTtcbiAgICAgICAgZW5zdXJlQ3BrSWZTcGVjaWZpZWQob3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LCB0aGlzLmlzSHR0cHMpO1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JDbGllbnQtc2V0SFRUUEhlYWRlcnNcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5ibG9iQ29udGV4dC5zZXRIdHRwSGVhZGVycyh7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgYmxvYkh0dHBIZWFkZXJzOiBibG9iSFRUUEhlYWRlcnMsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIC8vIGNwa0luZm86IG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSwgLy8gQ1BLIGlzIG5vdCBpbmNsdWRlZCBpbiBTd2FnZ2VyLCBzaG91bGQgY2hhbmdlIHRoaXMgYmFjayB3aGVuIHRoaXMgaXNzdWUgaXMgZml4ZWQgaW4gU3dhZ2dlci5cbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIHVzZXItZGVmaW5lZCBtZXRhZGF0YSBmb3IgdGhlIHNwZWNpZmllZCBibG9iIGFzIG9uZSBvciBtb3JlIG5hbWUtdmFsdWUgcGFpcnMuXG4gICAgICpcbiAgICAgKiBJZiBubyBvcHRpb24gcHJvdmlkZWQsIG9yIG5vIG1ldGFkYXRhIGRlZmluZWQgaW4gdGhlIHBhcmFtZXRlciwgdGhlIGJsb2JcbiAgICAgKiBtZXRhZGF0YSB3aWxsIGJlIHJlbW92ZWQuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvc2V0LWJsb2ItbWV0YWRhdGFcbiAgICAgKlxuICAgICAqIEBwYXJhbSBtZXRhZGF0YSAtIFJlcGxhY2UgZXhpc3RpbmcgbWV0YWRhdGEgd2l0aCB0aGlzIHZhbHVlLlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIG5vIHZhbHVlIHByb3ZpZGVkIHRoZSBleGlzdGluZyBtZXRhZGF0YSB3aWxsIGJlIHJlbW92ZWQuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBvcHRpb25zIHRvIFNldCBNZXRhZGF0YSBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgc2V0TWV0YWRhdGEobWV0YWRhdGEsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIGVuc3VyZUNwa0lmU3BlY2lmaWVkKG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSwgdGhpcy5pc0h0dHBzKTtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iQ2xpZW50LXNldE1ldGFkYXRhXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuYmxvYkNvbnRleHQuc2V0TWV0YWRhdGEoe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIG1ldGFkYXRhLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICBjcGtJbmZvOiBvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksXG4gICAgICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiBvcHRpb25zLmVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIHRhZ3Mgb24gdGhlIHVuZGVybHlpbmcgYmxvYi5cbiAgICAgKiBBIGJsb2IgY2FuIGhhdmUgdXAgdG8gMTAgdGFncy4gVGFnIGtleXMgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDEyOCBjaGFyYWN0ZXJzLiAgVGFnIHZhbHVlcyBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMjU2IGNoYXJhY3RlcnMuXG4gICAgICogVmFsaWQgdGFnIGtleSBhbmQgdmFsdWUgY2hhcmFjdGVycyBpbmNsdWRlIGxvd2VyIGFuZCB1cHBlciBjYXNlIGxldHRlcnMsIGRpZ2l0cyAoMC05KSxcbiAgICAgKiBzcGFjZSAoJyAnKSwgcGx1cyAoJysnKSwgbWludXMgKCctJyksIHBlcmlvZCAoJy4nKSwgZm93YXJkIHNsYXNoICgnLycpLCBjb2xvbiAoJzonKSwgZXF1YWxzICgnPScpLCBhbmQgdW5kZXJzY29yZSAoJ18nKS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0YWdzIC1cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtXG4gICAgICovXG4gICAgYXN5bmMgc2V0VGFncyh0YWdzLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iQ2xpZW50LXNldFRhZ3NcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5ibG9iQ29udGV4dC5zZXRUYWdzKHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgICAgIHRhZ3M6IHRvQmxvYlRhZ3ModGFncyksXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSB0YWdzIGFzc29jaWF0ZWQgd2l0aCB0aGUgdW5kZXJseWluZyBibG9iLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLVxuICAgICAqL1xuICAgIGFzeW5jIGdldFRhZ3Mob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYkNsaWVudC1nZXRUYWdzXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLmJsb2JDb250ZXh0LmdldFRhZ3Moe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICBjb25zdCB3cmFwcGVkUmVzcG9uc2UgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHJlc3BvbnNlKSwgeyBfcmVzcG9uc2U6IHJlc3BvbnNlLl9yZXNwb25zZSwgdGFnczogdG9UYWdzKHsgYmxvYlRhZ1NldDogcmVzcG9uc2UuYmxvYlRhZ1NldCB9KSB8fCB7fSB9KTtcbiAgICAgICAgICAgIHJldHVybiB3cmFwcGVkUmVzcG9uc2U7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgYSB7QGxpbmsgQmxvYkxlYXNlQ2xpZW50fSB0aGF0IG1hbmFnZXMgbGVhc2VzIG9uIHRoZSBibG9iLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3Bvc2VMZWFzZUlkIC0gSW5pdGlhbCBwcm9wb3NlZCBsZWFzZSBJZC5cbiAgICAgKiBAcmV0dXJucyBBIG5ldyBCbG9iTGVhc2VDbGllbnQgb2JqZWN0IGZvciBtYW5hZ2luZyBsZWFzZXMgb24gdGhlIGJsb2IuXG4gICAgICovXG4gICAgZ2V0QmxvYkxlYXNlQ2xpZW50KHByb3Bvc2VMZWFzZUlkKSB7XG4gICAgICAgIHJldHVybiBuZXcgQmxvYkxlYXNlQ2xpZW50KHRoaXMsIHByb3Bvc2VMZWFzZUlkKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHJlYWQtb25seSBzbmFwc2hvdCBvZiBhIGJsb2IuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvc25hcHNob3QtYmxvYlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBvcHRpb25zIHRvIHRoZSBCbG9iIENyZWF0ZSBTbmFwc2hvdCBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgY3JlYXRlU25hcHNob3Qob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIG9wdGlvbnMuY29uZGl0aW9ucyA9IG9wdGlvbnMuY29uZGl0aW9ucyB8fCB7fTtcbiAgICAgICAgZW5zdXJlQ3BrSWZTcGVjaWZpZWQob3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LCB0aGlzLmlzSHR0cHMpO1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JDbGllbnQtY3JlYXRlU25hcHNob3RcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5ibG9iQ29udGV4dC5jcmVhdGVTbmFwc2hvdCh7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbWV0YWRhdGE6IG9wdGlvbnMubWV0YWRhdGEsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIGNwa0luZm86IG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSxcbiAgICAgICAgICAgICAgICBlbmNyeXB0aW9uU2NvcGU6IG9wdGlvbnMuZW5jcnlwdGlvblNjb3BlLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFzeW5jaHJvbm91c2x5IGNvcGllcyBhIGJsb2IgdG8gYSBkZXN0aW5hdGlvbiB3aXRoaW4gdGhlIHN0b3JhZ2UgYWNjb3VudC5cbiAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbG9uZyBydW5uaW5nIG9wZXJhdGlvbiBwb2xsZXIgdGhhdCBhbGxvd3MgeW91IHRvIHdhaXRcbiAgICAgKiBpbmRlZmluaXRlbHkgdW50aWwgdGhlIGNvcHkgaXMgY29tcGxldGVkLlxuICAgICAqIFlvdSBjYW4gYWxzbyBjYW5jZWwgYSBjb3B5IGJlZm9yZSBpdCBpcyBjb21wbGV0ZWQgYnkgY2FsbGluZyBgY2FuY2VsT3BlcmF0aW9uYCBvbiB0aGUgcG9sbGVyLlxuICAgICAqIE5vdGUgdGhhdCB0aGUgb25Qcm9ncmVzcyBjYWxsYmFjayB3aWxsIG5vdCBiZSBpbnZva2VkIGlmIHRoZSBvcGVyYXRpb24gY29tcGxldGVzIGluIHRoZSBmaXJzdFxuICAgICAqIHJlcXVlc3QsIGFuZCBhdHRlbXB0aW5nIHRvIGNhbmNlbCBhIGNvbXBsZXRlZCBjb3B5IHdpbGwgcmVzdWx0IGluIGFuIGVycm9yIGJlaW5nIHRocm93bi5cbiAgICAgKlxuICAgICAqIEluIHZlcnNpb24gMjAxMi0wMi0xMiBhbmQgbGF0ZXIsIHRoZSBzb3VyY2UgZm9yIGEgQ29weSBCbG9iIG9wZXJhdGlvbiBjYW4gYmVcbiAgICAgKiBhIGNvbW1pdHRlZCBibG9iIGluIGFueSBBenVyZSBzdG9yYWdlIGFjY291bnQuXG4gICAgICogQmVnaW5uaW5nIHdpdGggdmVyc2lvbiAyMDE1LTAyLTIxLCB0aGUgc291cmNlIGZvciBhIENvcHkgQmxvYiBvcGVyYXRpb24gY2FuIGJlXG4gICAgICogYW4gQXp1cmUgZmlsZSBpbiBhbnkgQXp1cmUgc3RvcmFnZSBhY2NvdW50LlxuICAgICAqIE9ubHkgc3RvcmFnZSBhY2NvdW50cyBjcmVhdGVkIG9uIG9yIGFmdGVyIEp1bmUgN3RoLCAyMDEyIGFsbG93IHRoZSBDb3B5IEJsb2JcbiAgICAgKiBvcGVyYXRpb24gdG8gY29weSBmcm9tIGFub3RoZXIgc3RvcmFnZSBhY2NvdW50LlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2NvcHktYmxvYlxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBhdXRvbWF0aWMgcG9sbGluZzpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogY29uc3QgY29weVBvbGxlciA9IGF3YWl0IGJsb2JDbGllbnQuYmVnaW5Db3B5RnJvbVVSTCgndXJsJyk7XG4gICAgICogY29uc3QgcmVzdWx0ID0gYXdhaXQgY29weVBvbGxlci5wb2xsVW50aWxEb25lKCk7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIG1hbnVhbCBwb2xsaW5nOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBjb25zdCBjb3B5UG9sbGVyID0gYXdhaXQgYmxvYkNsaWVudC5iZWdpbkNvcHlGcm9tVVJMKCd1cmwnKTtcbiAgICAgKiB3aGlsZSAoIXBvbGxlci5pc0RvbmUoKSkge1xuICAgICAqICAgIGF3YWl0IHBvbGxlci5wb2xsKCk7XG4gICAgICogfVxuICAgICAqIGNvbnN0IHJlc3VsdCA9IGNvcHlQb2xsZXIuZ2V0UmVzdWx0KCk7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIHByb2dyZXNzIHVwZGF0ZXM6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnN0IGNvcHlQb2xsZXIgPSBhd2FpdCBibG9iQ2xpZW50LmJlZ2luQ29weUZyb21VUkwoJ3VybCcsIHtcbiAgICAgKiAgIG9uUHJvZ3Jlc3Moc3RhdGUpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coYFByb2dyZXNzOiAke3N0YXRlLmNvcHlQcm9ncmVzc31gKTtcbiAgICAgKiAgIH1cbiAgICAgKiB9KTtcbiAgICAgKiBjb25zdCByZXN1bHQgPSBhd2FpdCBjb3B5UG9sbGVyLnBvbGxVbnRpbERvbmUoKTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNpbmcgYSBjaGFuZ2luZyBwb2xsaW5nIGludGVydmFsIChkZWZhdWx0IDE1IHNlY29uZHMpOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBjb25zdCBjb3B5UG9sbGVyID0gYXdhaXQgYmxvYkNsaWVudC5iZWdpbkNvcHlGcm9tVVJMKCd1cmwnLCB7XG4gICAgICogICBpbnRlcnZhbEluTXM6IDEwMDAgLy8gcG9sbCBibG9iIGV2ZXJ5IDEgc2Vjb25kIGZvciBjb3B5IHByb2dyZXNzXG4gICAgICogfSk7XG4gICAgICogY29uc3QgcmVzdWx0ID0gYXdhaXQgY29weVBvbGxlci5wb2xsVW50aWxEb25lKCk7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIGNvcHkgY2FuY2VsbGF0aW9uOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBjb25zdCBjb3B5UG9sbGVyID0gYXdhaXQgYmxvYkNsaWVudC5iZWdpbkNvcHlGcm9tVVJMKCd1cmwnKTtcbiAgICAgKiAvLyBjYW5jZWwgb3BlcmF0aW9uIGFmdGVyIHN0YXJ0aW5nIGl0LlxuICAgICAqIHRyeSB7XG4gICAgICogICBhd2FpdCBjb3B5UG9sbGVyLmNhbmNlbE9wZXJhdGlvbigpO1xuICAgICAqICAgLy8gY2FsbHMgdG8gZ2V0IHRoZSByZXN1bHQgbm93IHRocm93IFBvbGxlckNhbmNlbGxlZEVycm9yXG4gICAgICogICBhd2FpdCBjb3B5UG9sbGVyLmdldFJlc3VsdCgpO1xuICAgICAqIH0gY2F0Y2ggKGVycikge1xuICAgICAqICAgaWYgKGVyci5uYW1lID09PSAnUG9sbGVyQ2FuY2VsbGVkRXJyb3InKSB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKCdUaGUgY29weSB3YXMgY2FuY2VsbGVkLicpO1xuICAgICAqICAgfVxuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb3B5U291cmNlIC0gdXJsIHRvIHRoZSBzb3VyY2UgQXp1cmUgQmxvYi9GaWxlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgb3B0aW9ucyB0byB0aGUgQmxvYiBTdGFydCBDb3B5IEZyb20gVVJMIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBiZWdpbkNvcHlGcm9tVVJMKGNvcHlTb3VyY2UsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCBjbGllbnQgPSB7XG4gICAgICAgICAgICBhYm9ydENvcHlGcm9tVVJMOiAoLi4uYXJncykgPT4gdGhpcy5hYm9ydENvcHlGcm9tVVJMKC4uLmFyZ3MpLFxuICAgICAgICAgICAgZ2V0UHJvcGVydGllczogKC4uLmFyZ3MpID0+IHRoaXMuZ2V0UHJvcGVydGllcyguLi5hcmdzKSxcbiAgICAgICAgICAgIHN0YXJ0Q29weUZyb21VUkw6ICguLi5hcmdzKSA9PiB0aGlzLnN0YXJ0Q29weUZyb21VUkwoLi4uYXJncyksXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHBvbGxlciA9IG5ldyBCbG9iQmVnaW5Db3B5RnJvbVVybFBvbGxlcih7XG4gICAgICAgICAgICBibG9iQ2xpZW50OiBjbGllbnQsXG4gICAgICAgICAgICBjb3B5U291cmNlLFxuICAgICAgICAgICAgaW50ZXJ2YWxJbk1zOiBvcHRpb25zLmludGVydmFsSW5NcyxcbiAgICAgICAgICAgIG9uUHJvZ3Jlc3M6IG9wdGlvbnMub25Qcm9ncmVzcyxcbiAgICAgICAgICAgIHJlc3VtZUZyb206IG9wdGlvbnMucmVzdW1lRnJvbSxcbiAgICAgICAgICAgIHN0YXJ0Q29weUZyb21VUkxPcHRpb25zOiBvcHRpb25zLFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gVHJpZ2dlciB0aGUgc3RhcnRDb3B5RnJvbVVSTCBjYWxsIGJ5IGNhbGxpbmcgcG9sbC5cbiAgICAgICAgLy8gQW55IGVycm9ycyBmcm9tIHRoaXMgbWV0aG9kIHNob3VsZCBiZSBzdXJmYWNlZCB0byB0aGUgdXNlci5cbiAgICAgICAgYXdhaXQgcG9sbGVyLnBvbGwoKTtcbiAgICAgICAgcmV0dXJuIHBvbGxlcjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWJvcnRzIGEgcGVuZGluZyBhc3luY2hyb25vdXMgQ29weSBCbG9iIG9wZXJhdGlvbiwgYW5kIGxlYXZlcyBhIGRlc3RpbmF0aW9uIGJsb2Igd2l0aCB6ZXJvXG4gICAgICogbGVuZ3RoIGFuZCBmdWxsIG1ldGFkYXRhLiBWZXJzaW9uIDIwMTItMDItMTIgYW5kIG5ld2VyLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2Fib3J0LWNvcHktYmxvYlxuICAgICAqXG4gICAgICogQHBhcmFtIGNvcHlJZCAtIElkIG9mIHRoZSBDb3B5IEZyb20gVVJMIG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIG9wdGlvbnMgdG8gdGhlIEJsb2IgQWJvcnQgQ29weSBGcm9tIFVSTCBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgYWJvcnRDb3B5RnJvbVVSTChjb3B5SWQsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JDbGllbnQtYWJvcnRDb3B5RnJvbVVSTFwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLmJsb2JDb250ZXh0LmFib3J0Q29weUZyb21VUkwoY29weUlkLCB7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIHN5bmNocm9ub3VzIENvcHkgRnJvbSBVUkwgb3BlcmF0aW9uIGNvcGllcyBhIGJsb2Igb3IgYW4gaW50ZXJuZXQgcmVzb3VyY2UgdG8gYSBuZXcgYmxvYi4gSXQgd2lsbCBub3RcbiAgICAgKiByZXR1cm4gYSByZXNwb25zZSB1bnRpbCB0aGUgY29weSBpcyBjb21wbGV0ZS5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9jb3B5LWJsb2ItZnJvbS11cmxcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb3B5U291cmNlIC0gVGhlIHNvdXJjZSBVUkwgdG8gY29weSBmcm9tLCBTaGFyZWQgQWNjZXNzIFNpZ25hdHVyZShTQVMpIG1heWJlIG5lZWRlZCBmb3IgYXV0aGVudGljYXRpb25cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtXG4gICAgICovXG4gICAgYXN5bmMgc3luY0NvcHlGcm9tVVJMKGNvcHlTb3VyY2UsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucyA9IG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucyB8fCB7fTtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iQ2xpZW50LXN5bmNDb3B5RnJvbVVSTFwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2UsIF9mLCBfZztcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLmJsb2JDb250ZXh0LmNvcHlGcm9tVVJMKGNvcHlTb3VyY2UsIHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBtZXRhZGF0YTogb3B0aW9ucy5tZXRhZGF0YSxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgc291cmNlTW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUlmTWF0Y2g6IChfYiA9IG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmlmTWF0Y2gsXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUlmTW9kaWZpZWRTaW5jZTogKF9jID0gb3B0aW9ucy5zb3VyY2VDb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VJZk5vbmVNYXRjaDogKF9kID0gb3B0aW9ucy5zb3VyY2VDb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuaWZOb25lTWF0Y2gsXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUlmVW5tb2RpZmllZFNpbmNlOiAoX2UgPSBvcHRpb25zLnNvdXJjZUNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZS5pZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNvdXJjZUNvbnRlbnRNRDU6IG9wdGlvbnMuc291cmNlQ29udGVudE1ENSxcbiAgICAgICAgICAgICAgICBjb3B5U291cmNlQXV0aG9yaXphdGlvbjogaHR0cEF1dGhvcml6YXRpb25Ub1N0cmluZyhvcHRpb25zLnNvdXJjZUF1dGhvcml6YXRpb24pLFxuICAgICAgICAgICAgICAgIHRpZXI6IHRvQWNjZXNzVGllcihvcHRpb25zLnRpZXIpLFxuICAgICAgICAgICAgICAgIGJsb2JUYWdzU3RyaW5nOiB0b0Jsb2JUYWdzU3RyaW5nKG9wdGlvbnMudGFncyksXG4gICAgICAgICAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5RXhwaXJ5OiAoX2YgPSBvcHRpb25zLmltbXV0YWJpbGl0eVBvbGljeSkgPT09IG51bGwgfHwgX2YgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9mLmV4cGlyaWVzT24sXG4gICAgICAgICAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5TW9kZTogKF9nID0gb3B0aW9ucy5pbW11dGFiaWxpdHlQb2xpY3kpID09PSBudWxsIHx8IF9nID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZy5wb2xpY3lNb2RlLFxuICAgICAgICAgICAgICAgIGxlZ2FsSG9sZDogb3B0aW9ucy5sZWdhbEhvbGQsXG4gICAgICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiBvcHRpb25zLmVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgICAgICAgICBjb3B5U291cmNlVGFnczogb3B0aW9ucy5jb3B5U291cmNlVGFncyxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSB0aWVyIG9uIGEgYmxvYi4gVGhlIG9wZXJhdGlvbiBpcyBhbGxvd2VkIG9uIGEgcGFnZSBibG9iIGluIGEgcHJlbWl1bVxuICAgICAqIHN0b3JhZ2UgYWNjb3VudCBhbmQgb24gYSBibG9jayBibG9iIGluIGEgYmxvYiBzdG9yYWdlIGFjY291bnQgKGxvY2FsbHkgcmVkdW5kYW50XG4gICAgICogc3RvcmFnZSBvbmx5KS4gQSBwcmVtaXVtIHBhZ2UgYmxvYidzIHRpZXIgZGV0ZXJtaW5lcyB0aGUgYWxsb3dlZCBzaXplLCBJT1BTLFxuICAgICAqIGFuZCBiYW5kd2lkdGggb2YgdGhlIGJsb2IuIEEgYmxvY2sgYmxvYidzIHRpZXIgZGV0ZXJtaW5lcyBIb3QvQ29vbC9BcmNoaXZlXG4gICAgICogc3RvcmFnZSB0eXBlLiBUaGlzIG9wZXJhdGlvbiBkb2VzIG5vdCB1cGRhdGUgdGhlIGJsb2IncyBFVGFnLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL3NldC1ibG9iLXRpZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSB0aWVyIC0gVGhlIHRpZXIgdG8gYmUgc2V0IG9uIHRoZSBibG9iLiBWYWxpZCB2YWx1ZXMgYXJlIEhvdCwgQ29vbCwgb3IgQXJjaGl2ZS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIG9wdGlvbnMgdG8gdGhlIEJsb2IgU2V0IFRpZXIgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIHNldEFjY2Vzc1RpZXIodGllciwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYkNsaWVudC1zZXRBY2Nlc3NUaWVyXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuYmxvYkNvbnRleHQuc2V0VGllcih0b0FjY2Vzc1RpZXIodGllciksIHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgcmVoeWRyYXRlUHJpb3JpdHk6IG9wdGlvbnMucmVoeWRyYXRlUHJpb3JpdHksXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMgZG93bmxvYWRUb0J1ZmZlcihwYXJhbTEsIHBhcmFtMiwgcGFyYW0zLCBwYXJhbTQgPSB7fSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGxldCBidWZmZXI7XG4gICAgICAgIGxldCBvZmZzZXQgPSAwO1xuICAgICAgICBsZXQgY291bnQgPSAwO1xuICAgICAgICBsZXQgb3B0aW9ucyA9IHBhcmFtNDtcbiAgICAgICAgaWYgKHBhcmFtMSBpbnN0YW5jZW9mIEJ1ZmZlcikge1xuICAgICAgICAgICAgYnVmZmVyID0gcGFyYW0xO1xuICAgICAgICAgICAgb2Zmc2V0ID0gcGFyYW0yIHx8IDA7XG4gICAgICAgICAgICBjb3VudCA9IHR5cGVvZiBwYXJhbTMgPT09IFwibnVtYmVyXCIgPyBwYXJhbTMgOiAwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgb2Zmc2V0ID0gdHlwZW9mIHBhcmFtMSA9PT0gXCJudW1iZXJcIiA/IHBhcmFtMSA6IDA7XG4gICAgICAgICAgICBjb3VudCA9IHR5cGVvZiBwYXJhbTIgPT09IFwibnVtYmVyXCIgPyBwYXJhbTIgOiAwO1xuICAgICAgICAgICAgb3B0aW9ucyA9IHBhcmFtMyB8fCB7fTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgYmxvY2tTaXplID0gKF9hID0gb3B0aW9ucy5ibG9ja1NpemUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IDA7XG4gICAgICAgIGlmIChibG9ja1NpemUgPCAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcImJsb2NrU2l6ZSBvcHRpb24gbXVzdCBiZSA+PSAwXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChibG9ja1NpemUgPT09IDApIHtcbiAgICAgICAgICAgIGJsb2NrU2l6ZSA9IERFRkFVTFRfQkxPQl9ET1dOTE9BRF9CTE9DS19CWVRFUztcbiAgICAgICAgfVxuICAgICAgICBpZiAob2Zmc2V0IDwgMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJvZmZzZXQgb3B0aW9uIG11c3QgYmUgPj0gMFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY291bnQgJiYgY291bnQgPD0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJjb3VudCBvcHRpb24gbXVzdCBiZSBncmVhdGVyIHRoYW4gMFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW9wdGlvbnMuY29uZGl0aW9ucykge1xuICAgICAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0ge307XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iQ2xpZW50LWRvd25sb2FkVG9CdWZmZXJcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICAvLyBDdXN0b21lciBkb2Vzbid0IHNwZWNpZnkgbGVuZ3RoLCBnZXQgaXRcbiAgICAgICAgICAgIGlmICghY291bnQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZ2V0UHJvcGVydGllcyhPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMpLCB7IHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyB9KSk7XG4gICAgICAgICAgICAgICAgY291bnQgPSByZXNwb25zZS5jb250ZW50TGVuZ3RoIC0gb2Zmc2V0O1xuICAgICAgICAgICAgICAgIGlmIChjb3VudCA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYG9mZnNldCAke29mZnNldH0gc2hvdWxkbid0IGJlIGxhcmdlciB0aGFuIGJsb2Igc2l6ZSAke3Jlc3BvbnNlLmNvbnRlbnRMZW5ndGh9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQWxsb2NhdGUgdGhlIGJ1ZmZlciBvZiBzaXplID0gY291bnQgaWYgdGhlIGJ1ZmZlciBpcyBub3QgcHJvdmlkZWRcbiAgICAgICAgICAgIGlmICghYnVmZmVyKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgYnVmZmVyID0gQnVmZmVyLmFsbG9jKGNvdW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGFsbG9jYXRlIHRoZSBidWZmZXIgb2Ygc2l6ZTogJHtjb3VudH0oaW4gYnl0ZXMpLiBQbGVhc2UgdHJ5IHBhc3NpbmcgeW91ciBvd24gYnVmZmVyIHRvIHRoZSBcImRvd25sb2FkVG9CdWZmZXJcIiBtZXRob2Qgb3IgdHJ5IHVzaW5nIG90aGVyIG1ldGhvZHMgbGlrZSBcImRvd25sb2FkXCIgb3IgXCJkb3dubG9hZFRvRmlsZVwiLlxcdCAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGJ1ZmZlci5sZW5ndGggPCBjb3VudCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBUaGUgYnVmZmVyJ3Mgc2l6ZSBzaG91bGQgYmUgZXF1YWwgdG8gb3IgbGFyZ2VyIHRoYW4gdGhlIHJlcXVlc3QgY291bnQgb2YgYnl0ZXM6ICR7Y291bnR9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgdHJhbnNmZXJQcm9ncmVzcyA9IDA7XG4gICAgICAgICAgICBjb25zdCBiYXRjaCA9IG5ldyBCYXRjaChvcHRpb25zLmNvbmN1cnJlbmN5KTtcbiAgICAgICAgICAgIGZvciAobGV0IG9mZiA9IG9mZnNldDsgb2ZmIDwgb2Zmc2V0ICsgY291bnQ7IG9mZiA9IG9mZiArIGJsb2NrU2l6ZSkge1xuICAgICAgICAgICAgICAgIGJhdGNoLmFkZE9wZXJhdGlvbihhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEV4Y2x1c2l2ZSBjaHVuayBlbmQgcG9zaXRpb25cbiAgICAgICAgICAgICAgICAgICAgbGV0IGNodW5rRW5kID0gb2Zmc2V0ICsgY291bnQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvZmYgKyBibG9ja1NpemUgPCBjaHVua0VuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2h1bmtFbmQgPSBvZmYgKyBibG9ja1NpemU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmRvd25sb2FkKG9mZiwgY2h1bmtFbmQgLSBvZmYsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4UmV0cnlSZXF1ZXN0czogb3B0aW9ucy5tYXhSZXRyeVJlcXVlc3RzUGVyQmxvY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21lclByb3ZpZGVkS2V5OiBvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJlYW0gPSByZXNwb25zZS5yZWFkYWJsZVN0cmVhbUJvZHk7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHN0cmVhbVRvQnVmZmVyKHN0cmVhbSwgYnVmZmVyLCBvZmYgLSBvZmZzZXQsIGNodW5rRW5kIC0gb2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIHByb2dyZXNzIGFmdGVyIGJsb2NrIGlzIGRvd25sb2FkZWQsIGluIGNhc2Ugb2YgYmxvY2sgdHJ5aW5nXG4gICAgICAgICAgICAgICAgICAgIC8vIENvdWxkIHByb3ZpZGUgZmluZXIgZ3JhaW5lZCBwcm9ncmVzcyB1cGRhdGluZyBpbnNpZGUgSFRUUCByZXF1ZXN0cyxcbiAgICAgICAgICAgICAgICAgICAgLy8gb25seSBpZiBjb252ZW5pZW5jZSBsYXllciBkb3dubG9hZCB0cnkgaXMgZW5hYmxlZFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2ZlclByb2dyZXNzICs9IGNodW5rRW5kIC0gb2ZmO1xuICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5vblByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm9uUHJvZ3Jlc3MoeyBsb2FkZWRCeXRlczogdHJhbnNmZXJQcm9ncmVzcyB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXdhaXQgYmF0Y2guZG8oKTtcbiAgICAgICAgICAgIHJldHVybiBidWZmZXI7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBPTkxZIEFWQUlMQUJMRSBJTiBOT0RFLkpTIFJVTlRJTUUuXG4gICAgICpcbiAgICAgKiBEb3dubG9hZHMgYW4gQXp1cmUgQmxvYiB0byBhIGxvY2FsIGZpbGUuXG4gICAgICogRmFpbHMgaWYgdGhlIHRoZSBnaXZlbiBmaWxlIHBhdGggYWxyZWFkeSBleGl0cy5cbiAgICAgKiBPZmZzZXQgYW5kIGNvdW50IGFyZSBvcHRpb25hbCwgcGFzcyAwIGFuZCB1bmRlZmluZWQgcmVzcGVjdGl2ZWx5IHRvIGRvd25sb2FkIHRoZSBlbnRpcmUgYmxvYi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBmaWxlUGF0aCAtXG4gICAgICogQHBhcmFtIG9mZnNldCAtIEZyb20gd2hpY2ggcG9zaXRpb24gb2YgdGhlIGJsb2NrIGJsb2IgdG8gZG93bmxvYWQuXG4gICAgICogQHBhcmFtIGNvdW50IC0gSG93IG11Y2ggZGF0YSB0byBiZSBkb3dubG9hZGVkLiBXaWxsIGRvd25sb2FkIHRvIHRoZSBlbmQgd2hlbiBwYXNzaW5nIHVuZGVmaW5lZC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gQmxvYiBkb3dubG9hZCBvcHRpb25zLlxuICAgICAqIEByZXR1cm5zIFRoZSByZXNwb25zZSBkYXRhIGZvciBibG9iIGRvd25sb2FkIG9wZXJhdGlvbixcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXQgd2l0aCByZWFkYWJsZVN0cmVhbUJvZHkgc2V0IHRvIHVuZGVmaW5lZCBzaW5jZSBpdHNcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50IGlzIGFscmVhZHkgcmVhZCBhbmQgd3JpdHRlbiBpbnRvIGEgbG9jYWwgZmlsZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0IHRoZSBzcGVjaWZpZWQgcGF0aC5cbiAgICAgKi9cbiAgICBhc3luYyBkb3dubG9hZFRvRmlsZShmaWxlUGF0aCwgb2Zmc2V0ID0gMCwgY291bnQsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JDbGllbnQtZG93bmxvYWRUb0ZpbGVcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZG93bmxvYWQob2Zmc2V0LCBjb3VudCwgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKSwgeyB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMgfSkpO1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnJlYWRhYmxlU3RyZWFtQm9keSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHJlYWRTdHJlYW1Ub0xvY2FsRmlsZShyZXNwb25zZS5yZWFkYWJsZVN0cmVhbUJvZHksIGZpbGVQYXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFRoZSBzdHJlYW0gaXMgbm8gbG9uZ2VyIGFjY2Vzc2libGUgc28gc2V0dGluZyBpdCB0byB1bmRlZmluZWQuXG4gICAgICAgICAgICByZXNwb25zZS5ibG9iRG93bmxvYWRTdHJlYW0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBnZXRCbG9iQW5kQ29udGFpbmVyTmFtZXNGcm9tVXJsKCkge1xuICAgICAgICBsZXQgY29udGFpbmVyTmFtZTtcbiAgICAgICAgbGV0IGJsb2JOYW1lO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gIFVSTCBtYXkgbG9vayBsaWtlIHRoZSBmb2xsb3dpbmdcbiAgICAgICAgICAgIC8vIFwiaHR0cHM6Ly9teWFjY291bnQuYmxvYi5jb3JlLndpbmRvd3MubmV0L215Y29udGFpbmVyL2Jsb2I/c2FzU3RyaW5nXCI7XG4gICAgICAgICAgICAvLyBcImh0dHBzOi8vbXlhY2NvdW50LmJsb2IuY29yZS53aW5kb3dzLm5ldC9teWNvbnRhaW5lci9ibG9iXCI7XG4gICAgICAgICAgICAvLyBcImh0dHBzOi8vbXlhY2NvdW50LmJsb2IuY29yZS53aW5kb3dzLm5ldC9teWNvbnRhaW5lci9ibG9iL2EudHh0P3Nhc1N0cmluZ1wiO1xuICAgICAgICAgICAgLy8gXCJodHRwczovL215YWNjb3VudC5ibG9iLmNvcmUud2luZG93cy5uZXQvbXljb250YWluZXIvYmxvYi9hLnR4dFwiO1xuICAgICAgICAgICAgLy8gSVB2NC9JUHY2IGFkZHJlc3MgaG9zdHMsIEVuZHBvaW50cyAtIGBodHRwOi8vMTI3LjAuMC4xOjEwMDAwL2RldnN0b3JlYWNjb3VudDEvY29udGFpbmVybmFtZS9ibG9iYFxuICAgICAgICAgICAgLy8gaHR0cDovL2xvY2FsaG9zdDoxMDAwMS9kZXZzdG9yZWFjY291bnQxL2NvbnRhaW5lcm5hbWUvYmxvYlxuICAgICAgICAgICAgY29uc3QgcGFyc2VkVXJsID0gbmV3IFVSTCh0aGlzLnVybCk7XG4gICAgICAgICAgICBpZiAocGFyc2VkVXJsLmhvc3Quc3BsaXQoXCIuXCIpWzFdID09PSBcImJsb2JcIikge1xuICAgICAgICAgICAgICAgIC8vIFwiaHR0cHM6Ly9teWFjY291bnQuYmxvYi5jb3JlLndpbmRvd3MubmV0L2NvbnRhaW5lcm5hbWUvYmxvYlwiLlxuICAgICAgICAgICAgICAgIC8vIC5nZXRQYXRoKCkgLT4gL2NvbnRhaW5lcm5hbWUvYmxvYlxuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGhDb21wb25lbnRzID0gcGFyc2VkVXJsLnBhdGhuYW1lLm1hdGNoKFwiLyhbXi9dKikoLyguKikpP1wiKTtcbiAgICAgICAgICAgICAgICBjb250YWluZXJOYW1lID0gcGF0aENvbXBvbmVudHNbMV07XG4gICAgICAgICAgICAgICAgYmxvYk5hbWUgPSBwYXRoQ29tcG9uZW50c1szXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzSXBFbmRwb2ludFN0eWxlKHBhcnNlZFVybCkpIHtcbiAgICAgICAgICAgICAgICAvLyBJUHY0L0lQdjYgYWRkcmVzcyBob3N0cy4uLiBFeGFtcGxlIC0gaHR0cDovLzE5Mi4wLjAuMTA6MTAwMDEvZGV2c3RvcmVhY2NvdW50MS9jb250YWluZXJuYW1lL2Jsb2JcbiAgICAgICAgICAgICAgICAvLyBTaW5nbGUgd29yZCBkb21haW4gd2l0aG91dCBhIFtkb3RdIGluIHRoZSBlbmRwb2ludC4uLiBFeGFtcGxlIC0gaHR0cDovL2xvY2FsaG9zdDoxMDAwMS9kZXZzdG9yZWFjY291bnQxL2NvbnRhaW5lcm5hbWUvYmxvYlxuICAgICAgICAgICAgICAgIC8vIC5nZXRQYXRoKCkgLT4gL2RldnN0b3JlYWNjb3VudDEvY29udGFpbmVybmFtZS9ibG9iXG4gICAgICAgICAgICAgICAgY29uc3QgcGF0aENvbXBvbmVudHMgPSBwYXJzZWRVcmwucGF0aG5hbWUubWF0Y2goXCIvKFteL10qKS8oW14vXSopKC8oLiopKT9cIik7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyTmFtZSA9IHBhdGhDb21wb25lbnRzWzJdO1xuICAgICAgICAgICAgICAgIGJsb2JOYW1lID0gcGF0aENvbXBvbmVudHNbNF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBcImh0dHBzOi8vY3VzdG9tZG9tYWluLmNvbS9jb250YWluZXJuYW1lL2Jsb2JcIi5cbiAgICAgICAgICAgICAgICAvLyAuZ2V0UGF0aCgpIC0+IC9jb250YWluZXJuYW1lL2Jsb2JcbiAgICAgICAgICAgICAgICBjb25zdCBwYXRoQ29tcG9uZW50cyA9IHBhcnNlZFVybC5wYXRobmFtZS5tYXRjaChcIi8oW14vXSopKC8oLiopKT9cIik7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyTmFtZSA9IHBhdGhDb21wb25lbnRzWzFdO1xuICAgICAgICAgICAgICAgIGJsb2JOYW1lID0gcGF0aENvbXBvbmVudHNbM107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBkZWNvZGUgdGhlIGVuY29kZWQgYmxvYk5hbWUsIGNvbnRhaW5lck5hbWUgLSB0byBnZXQgYWxsIHRoZSBzcGVjaWFsIGNoYXJhY3RlcnMgdGhhdCBtaWdodCBiZSBwcmVzZW50IGluIHRoZW1cbiAgICAgICAgICAgIGNvbnRhaW5lck5hbWUgPSBkZWNvZGVVUklDb21wb25lbnQoY29udGFpbmVyTmFtZSk7XG4gICAgICAgICAgICBibG9iTmFtZSA9IGRlY29kZVVSSUNvbXBvbmVudChibG9iTmFtZSk7XG4gICAgICAgICAgICAvLyBBenVyZSBTdG9yYWdlIFNlcnZlciB3aWxsIHJlcGxhY2UgXCJcXFwiIHdpdGggXCIvXCIgaW4gdGhlIGJsb2IgbmFtZXNcbiAgICAgICAgICAgIC8vICAgZG9pbmcgdGhlIHNhbWUgaW4gdGhlIFNESyBzaWRlIHNvIHRoYXQgdGhlIHVzZXIgZG9lc24ndCBoYXZlIHRvIHJlcGxhY2UgXCJcXFwiIGluc3RhbmNlcyBpbiB0aGUgYmxvYk5hbWVcbiAgICAgICAgICAgIGJsb2JOYW1lID0gYmxvYk5hbWUucmVwbGFjZSgvXFxcXC9nLCBcIi9cIik7XG4gICAgICAgICAgICBpZiAoIWNvbnRhaW5lck5hbWUpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQcm92aWRlZCBjb250YWluZXJOYW1lIGlzIGludmFsaWQuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHsgYmxvYk5hbWUsIGNvbnRhaW5lck5hbWUgfTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBleHRyYWN0IGJsb2JOYW1lIGFuZCBjb250YWluZXJOYW1lIHdpdGggcHJvdmlkZWQgaW5mb3JtYXRpb24uXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFzeW5jaHJvbm91c2x5IGNvcGllcyBhIGJsb2IgdG8gYSBkZXN0aW5hdGlvbiB3aXRoaW4gdGhlIHN0b3JhZ2UgYWNjb3VudC5cbiAgICAgKiBJbiB2ZXJzaW9uIDIwMTItMDItMTIgYW5kIGxhdGVyLCB0aGUgc291cmNlIGZvciBhIENvcHkgQmxvYiBvcGVyYXRpb24gY2FuIGJlXG4gICAgICogYSBjb21taXR0ZWQgYmxvYiBpbiBhbnkgQXp1cmUgc3RvcmFnZSBhY2NvdW50LlxuICAgICAqIEJlZ2lubmluZyB3aXRoIHZlcnNpb24gMjAxNS0wMi0yMSwgdGhlIHNvdXJjZSBmb3IgYSBDb3B5IEJsb2Igb3BlcmF0aW9uIGNhbiBiZVxuICAgICAqIGFuIEF6dXJlIGZpbGUgaW4gYW55IEF6dXJlIHN0b3JhZ2UgYWNjb3VudC5cbiAgICAgKiBPbmx5IHN0b3JhZ2UgYWNjb3VudHMgY3JlYXRlZCBvbiBvciBhZnRlciBKdW5lIDd0aCwgMjAxMiBhbGxvdyB0aGUgQ29weSBCbG9iXG4gICAgICogb3BlcmF0aW9uIHRvIGNvcHkgZnJvbSBhbm90aGVyIHN0b3JhZ2UgYWNjb3VudC5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9jb3B5LWJsb2JcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb3B5U291cmNlIC0gdXJsIHRvIHRoZSBzb3VyY2UgQXp1cmUgQmxvYi9GaWxlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgb3B0aW9ucyB0byB0aGUgQmxvYiBTdGFydCBDb3B5IEZyb20gVVJMIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBzdGFydENvcHlGcm9tVVJMKGNvcHlTb3VyY2UsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JDbGllbnQtc3RhcnRDb3B5RnJvbVVSTFwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYSwgX2IsIF9jO1xuICAgICAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0gb3B0aW9ucy5jb25kaXRpb25zIHx8IHt9O1xuICAgICAgICAgICAgb3B0aW9ucy5zb3VyY2VDb25kaXRpb25zID0gb3B0aW9ucy5zb3VyY2VDb25kaXRpb25zIHx8IHt9O1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuYmxvYkNvbnRleHQuc3RhcnRDb3B5RnJvbVVSTChjb3B5U291cmNlLCB7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbWV0YWRhdGE6IG9wdGlvbnMubWV0YWRhdGEsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIHNvdXJjZU1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICBzb3VyY2VJZk1hdGNoOiBvcHRpb25zLnNvdXJjZUNvbmRpdGlvbnMuaWZNYXRjaCxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlSWZNb2RpZmllZFNpbmNlOiBvcHRpb25zLnNvdXJjZUNvbmRpdGlvbnMuaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VJZk5vbmVNYXRjaDogb3B0aW9ucy5zb3VyY2VDb25kaXRpb25zLmlmTm9uZU1hdGNoLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VJZlVubW9kaWZpZWRTaW5jZTogb3B0aW9ucy5zb3VyY2VDb25kaXRpb25zLmlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VJZlRhZ3M6IG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucy50YWdDb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5RXhwaXJ5OiAoX2IgPSBvcHRpb25zLmltbXV0YWJpbGl0eVBvbGljeSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmV4cGlyaWVzT24sXG4gICAgICAgICAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5TW9kZTogKF9jID0gb3B0aW9ucy5pbW11dGFiaWxpdHlQb2xpY3kpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5wb2xpY3lNb2RlLFxuICAgICAgICAgICAgICAgIGxlZ2FsSG9sZDogb3B0aW9ucy5sZWdhbEhvbGQsXG4gICAgICAgICAgICAgICAgcmVoeWRyYXRlUHJpb3JpdHk6IG9wdGlvbnMucmVoeWRyYXRlUHJpb3JpdHksXG4gICAgICAgICAgICAgICAgdGllcjogdG9BY2Nlc3NUaWVyKG9wdGlvbnMudGllciksXG4gICAgICAgICAgICAgICAgYmxvYlRhZ3NTdHJpbmc6IHRvQmxvYlRhZ3NTdHJpbmcob3B0aW9ucy50YWdzKSxcbiAgICAgICAgICAgICAgICBzZWFsQmxvYjogb3B0aW9ucy5zZWFsQmxvYixcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBPbmx5IGF2YWlsYWJsZSBmb3IgQmxvYkNsaWVudCBjb25zdHJ1Y3RlZCB3aXRoIGEgc2hhcmVkIGtleSBjcmVkZW50aWFsLlxuICAgICAqXG4gICAgICogR2VuZXJhdGVzIGEgQmxvYiBTZXJ2aWNlIFNoYXJlZCBBY2Nlc3MgU2lnbmF0dXJlIChTQVMpIFVSSSBiYXNlZCBvbiB0aGUgY2xpZW50IHByb3BlcnRpZXNcbiAgICAgKiBhbmQgcGFyYW1ldGVycyBwYXNzZWQgaW4uIFRoZSBTQVMgaXMgc2lnbmVkIGJ5IHRoZSBzaGFyZWQga2V5IGNyZWRlbnRpYWwgb2YgdGhlIGNsaWVudC5cbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2NvbnN0cnVjdGluZy1hLXNlcnZpY2Utc2FzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIHBhcmFtZXRlcnMuXG4gICAgICogQHJldHVybnMgVGhlIFNBUyBVUkkgY29uc2lzdGluZyBvZiB0aGUgVVJJIHRvIHRoZSByZXNvdXJjZSByZXByZXNlbnRlZCBieSB0aGlzIGNsaWVudCwgZm9sbG93ZWQgYnkgdGhlIGdlbmVyYXRlZCBTQVMgdG9rZW4uXG4gICAgICovXG4gICAgZ2VuZXJhdGVTYXNVcmwob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIGlmICghKHRoaXMuY3JlZGVudGlhbCBpbnN0YW5jZW9mIFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiQ2FuIG9ubHkgZ2VuZXJhdGUgdGhlIFNBUyB3aGVuIHRoZSBjbGllbnQgaXMgaW5pdGlhbGl6ZWQgd2l0aCBhIHNoYXJlZCBrZXkgY3JlZGVudGlhbFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHNhcyA9IGdlbmVyYXRlQmxvYlNBU1F1ZXJ5UGFyYW1ldGVycyhPYmplY3QuYXNzaWduKHsgY29udGFpbmVyTmFtZTogdGhpcy5fY29udGFpbmVyTmFtZSwgYmxvYk5hbWU6IHRoaXMuX25hbWUsIHNuYXBzaG90VGltZTogdGhpcy5fc25hcHNob3QsIHZlcnNpb25JZDogdGhpcy5fdmVyc2lvbklkIH0sIG9wdGlvbnMpLCB0aGlzLmNyZWRlbnRpYWwpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICByZXNvbHZlKGFwcGVuZFRvVVJMUXVlcnkodGhpcy51cmwsIHNhcykpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogT25seSBhdmFpbGFibGUgZm9yIEJsb2JDbGllbnQgY29uc3RydWN0ZWQgd2l0aCBhIHNoYXJlZCBrZXkgY3JlZGVudGlhbC5cbiAgICAgKlxuICAgICAqIEdlbmVyYXRlcyBzdHJpbmcgdG8gc2lnbiBmb3IgYSBCbG9iIFNlcnZpY2UgU2hhcmVkIEFjY2VzcyBTaWduYXR1cmUgKFNBUykgVVJJIGJhc2VkIG9uXG4gICAgICogdGhlIGNsaWVudCBwcm9wZXJ0aWVzIGFuZCBwYXJhbWV0ZXJzIHBhc3NlZCBpbi4gVGhlIFNBUyBpcyBzaWduZWQgYnkgdGhlIHNoYXJlZCBrZXkgY3JlZGVudGlhbCBvZiB0aGUgY2xpZW50LlxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvY29uc3RydWN0aW5nLWEtc2VydmljZS1zYXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgcGFyYW1ldGVycy5cbiAgICAgKiBAcmV0dXJucyBUaGUgU0FTIFVSSSBjb25zaXN0aW5nIG9mIHRoZSBVUkkgdG8gdGhlIHJlc291cmNlIHJlcHJlc2VudGVkIGJ5IHRoaXMgY2xpZW50LCBmb2xsb3dlZCBieSB0aGUgZ2VuZXJhdGVkIFNBUyB0b2tlbi5cbiAgICAgKi9cbiAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGF6dXJlL2F6dXJlLXNkay90cy1uYW1pbmctb3B0aW9ucyovXG4gICAgZ2VuZXJhdGVTYXNTdHJpbmdUb1NpZ24ob3B0aW9ucykge1xuICAgICAgICBpZiAoISh0aGlzLmNyZWRlbnRpYWwgaW5zdGFuY2VvZiBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiQ2FuIG9ubHkgZ2VuZXJhdGUgdGhlIFNBUyB3aGVuIHRoZSBjbGllbnQgaXMgaW5pdGlhbGl6ZWQgd2l0aCBhIHNoYXJlZCBrZXkgY3JlZGVudGlhbFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2VuZXJhdGVCbG9iU0FTUXVlcnlQYXJhbWV0ZXJzSW50ZXJuYWwoT2JqZWN0LmFzc2lnbih7IGNvbnRhaW5lck5hbWU6IHRoaXMuX2NvbnRhaW5lck5hbWUsIGJsb2JOYW1lOiB0aGlzLl9uYW1lLCBzbmFwc2hvdFRpbWU6IHRoaXMuX3NuYXBzaG90LCB2ZXJzaW9uSWQ6IHRoaXMuX3ZlcnNpb25JZCB9LCBvcHRpb25zKSwgdGhpcy5jcmVkZW50aWFsKS5zdHJpbmdUb1NpZ247XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlbGV0ZSB0aGUgaW1tdXRhYmxpbGl0eSBwb2xpY3kgb24gdGhlIGJsb2IuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIG9wdGlvbnMgdG8gZGVsZXRlIGltbXV0YWJpbGl0eSBwb2xpY3kgb24gdGhlIGJsb2IuXG4gICAgICovXG4gICAgYXN5bmMgZGVsZXRlSW1tdXRhYmlsaXR5UG9saWN5KG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JDbGllbnQtZGVsZXRlSW1tdXRhYmlsaXR5UG9saWN5XCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuYmxvYkNvbnRleHQuZGVsZXRlSW1tdXRhYmlsaXR5UG9saWN5KHtcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXQgaW1tdXRhYmlsaXR5IHBvbGljeSBvbiB0aGUgYmxvYi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgb3B0aW9ucyB0byBzZXQgaW1tdXRhYmlsaXR5IHBvbGljeSBvbiB0aGUgYmxvYi5cbiAgICAgKi9cbiAgICBhc3luYyBzZXRJbW11dGFiaWxpdHlQb2xpY3koaW1tdXRhYmlsaXR5UG9saWN5LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iQ2xpZW50LXNldEltbXV0YWJpbGl0eVBvbGljeVwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLmJsb2JDb250ZXh0LnNldEltbXV0YWJpbGl0eVBvbGljeSh7XG4gICAgICAgICAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5RXhwaXJ5OiBpbW11dGFiaWxpdHlQb2xpY3kuZXhwaXJpZXNPbixcbiAgICAgICAgICAgICAgICBpbW11dGFiaWxpdHlQb2xpY3lNb2RlOiBpbW11dGFiaWxpdHlQb2xpY3kucG9saWN5TW9kZSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXQgbGVnYWwgaG9sZCBvbiB0aGUgYmxvYi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgb3B0aW9ucyB0byBzZXQgbGVnYWwgaG9sZCBvbiB0aGUgYmxvYi5cbiAgICAgKi9cbiAgICBhc3luYyBzZXRMZWdhbEhvbGQobGVnYWxIb2xkRW5hYmxlZCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYkNsaWVudC1zZXRMZWdhbEhvbGRcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5ibG9iQ29udGV4dC5zZXRMZWdhbEhvbGQobGVnYWxIb2xkRW5hYmxlZCwge1xuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBHZXQgQWNjb3VudCBJbmZvcm1hdGlvbiBvcGVyYXRpb24gcmV0dXJucyB0aGUgc2t1IG5hbWUgYW5kIGFjY291bnQga2luZFxuICAgICAqIGZvciB0aGUgc3BlY2lmaWVkIGFjY291bnQuXG4gICAgICogVGhlIEdldCBBY2NvdW50IEluZm9ybWF0aW9uIG9wZXJhdGlvbiBpcyBhdmFpbGFibGUgb24gc2VydmljZSB2ZXJzaW9ucyBiZWdpbm5pbmdcbiAgICAgKiB3aXRoIHZlcnNpb24gMjAxOC0wMy0yOC5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9nZXQtYWNjb3VudC1pbmZvcm1hdGlvblxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHRoZSBTZXJ2aWNlIEdldCBBY2NvdW50IEluZm8gb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIFJlc3BvbnNlIGRhdGEgZm9yIHRoZSBTZXJ2aWNlIEdldCBBY2NvdW50IEluZm8gb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGdldEFjY291bnRJbmZvKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JDbGllbnQtZ2V0QWNjb3VudEluZm9cIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5ibG9iQ29udGV4dC5nZXRBY2NvdW50SW5mbyh7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4vKipcbiAqIEFwcGVuZEJsb2JDbGllbnQgZGVmaW5lcyBhIHNldCBvZiBvcGVyYXRpb25zIGFwcGxpY2FibGUgdG8gYXBwZW5kIGJsb2JzLlxuICovXG5jbGFzcyBBcHBlbmRCbG9iQ2xpZW50IGV4dGVuZHMgQmxvYkNsaWVudCB7XG4gICAgY29uc3RydWN0b3IodXJsT3JDb25uZWN0aW9uU3RyaW5nLCBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSwgYmxvYk5hbWVPck9wdGlvbnMsIFxuICAgIC8vIExlZ2FjeSwgbm8gZml4IGZvciBlc2xpbnQgZXJyb3Igd2l0aG91dCBicmVha2luZy4gRGlzYWJsZSBpdCBmb3IgdGhpcyBpbnRlcmZhY2UuXG4gICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhenVyZS9henVyZS1zZGsvdHMtbmFtaW5nLW9wdGlvbnMqL1xuICAgIG9wdGlvbnMpIHtcbiAgICAgICAgLy8gSW4gVHlwZVNjcmlwdCB3ZSBjYW5ub3Qgc2ltcGx5IHBhc3MgYWxsIHBhcmFtZXRlcnMgdG8gc3VwZXIoKSBsaWtlIGJlbG93IHNvIGhhdmUgdG8gZHVwbGljYXRlIHRoZSBjb2RlIGluc3RlYWQuXG4gICAgICAgIC8vICAgc3VwZXIocywgY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWVPck9wdGlvbnMsIGJsb2JOYW1lT3JPcHRpb25zLCBvcHRpb25zKTtcbiAgICAgICAgbGV0IHBpcGVsaW5lO1xuICAgICAgICBsZXQgdXJsO1xuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgaWYgKGlzUGlwZWxpbmVMaWtlKGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lKSkge1xuICAgICAgICAgICAgLy8gKHVybDogc3RyaW5nLCBwaXBlbGluZTogUGlwZWxpbmUpXG4gICAgICAgICAgICB1cmwgPSB1cmxPckNvbm5lY3Rpb25TdHJpbmc7XG4gICAgICAgICAgICBwaXBlbGluZSA9IGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKChjb3JlVXRpbC5pc05vZGUgJiYgY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUgaW5zdGFuY2VvZiBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbCkgfHxcbiAgICAgICAgICAgIGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lIGluc3RhbmNlb2YgQW5vbnltb3VzQ3JlZGVudGlhbCB8fFxuICAgICAgICAgICAgY29yZUF1dGguaXNUb2tlbkNyZWRlbnRpYWwoY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUpKSB7XG4gICAgICAgICAgICAvLyAodXJsOiBzdHJpbmcsIGNyZWRlbnRpYWw/OiBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbCB8IEFub255bW91c0NyZWRlbnRpYWwgfCBUb2tlbkNyZWRlbnRpYWwsIG9wdGlvbnM/OiBTdG9yYWdlUGlwZWxpbmVPcHRpb25zKSAgICAgIHVybCA9IHVybE9yQ29ubmVjdGlvblN0cmluZztcbiAgICAgICAgICAgIHVybCA9IHVybE9yQ29ubmVjdGlvblN0cmluZztcbiAgICAgICAgICAgIG9wdGlvbnMgPSBibG9iTmFtZU9yT3B0aW9ucztcbiAgICAgICAgICAgIHBpcGVsaW5lID0gbmV3UGlwZWxpbmUoY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSAmJlxuICAgICAgICAgICAgdHlwZW9mIGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAvLyAodXJsOiBzdHJpbmcsIGNyZWRlbnRpYWw/OiBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbCB8IEFub255bW91c0NyZWRlbnRpYWwgfCBUb2tlbkNyZWRlbnRpYWwsIG9wdGlvbnM/OiBTdG9yYWdlUGlwZWxpbmVPcHRpb25zKVxuICAgICAgICAgICAgdXJsID0gdXJsT3JDb25uZWN0aW9uU3RyaW5nO1xuICAgICAgICAgICAgLy8gVGhlIHNlY29uZCBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkLiBVc2UgYW5vbnltb3VzIGNyZWRlbnRpYWwuXG4gICAgICAgICAgICBwaXBlbGluZSA9IG5ld1BpcGVsaW5lKG5ldyBBbm9ueW1vdXNDcmVkZW50aWFsKCksIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lICYmXG4gICAgICAgICAgICB0eXBlb2YgY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICAgIGJsb2JOYW1lT3JPcHRpb25zICYmXG4gICAgICAgICAgICB0eXBlb2YgYmxvYk5hbWVPck9wdGlvbnMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIC8vIChjb25uZWN0aW9uU3RyaW5nOiBzdHJpbmcsIGNvbnRhaW5lck5hbWU6IHN0cmluZywgYmxvYk5hbWU6IHN0cmluZywgb3B0aW9ucz86IFN0b3JhZ2VQaXBlbGluZU9wdGlvbnMpXG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJOYW1lID0gY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWU7XG4gICAgICAgICAgICBjb25zdCBibG9iTmFtZSA9IGJsb2JOYW1lT3JPcHRpb25zO1xuICAgICAgICAgICAgY29uc3QgZXh0cmFjdGVkQ3JlZHMgPSBleHRyYWN0Q29ubmVjdGlvblN0cmluZ1BhcnRzKHVybE9yQ29ubmVjdGlvblN0cmluZyk7XG4gICAgICAgICAgICBpZiAoZXh0cmFjdGVkQ3JlZHMua2luZCA9PT0gXCJBY2NvdW50Q29ublN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvcmVVdGlsLmlzTm9kZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaGFyZWRLZXlDcmVkZW50aWFsID0gbmV3IFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsKGV4dHJhY3RlZENyZWRzLmFjY291bnROYW1lLCBleHRyYWN0ZWRDcmVkcy5hY2NvdW50S2V5KTtcbiAgICAgICAgICAgICAgICAgICAgdXJsID0gYXBwZW5kVG9VUkxQYXRoKGFwcGVuZFRvVVJMUGF0aChleHRyYWN0ZWRDcmVkcy51cmwsIGVuY29kZVVSSUNvbXBvbmVudChjb250YWluZXJOYW1lKSksIGVuY29kZVVSSUNvbXBvbmVudChibG9iTmFtZSkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMucHJveHlPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnByb3h5T3B0aW9ucyA9IGNvcmVSZXN0UGlwZWxpbmUuZ2V0RGVmYXVsdFByb3h5U2V0dGluZ3MoZXh0cmFjdGVkQ3JlZHMucHJveHlVcmkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHBpcGVsaW5lID0gbmV3UGlwZWxpbmUoc2hhcmVkS2V5Q3JlZGVudGlhbCwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBY2NvdW50IGNvbm5lY3Rpb24gc3RyaW5nIGlzIG9ubHkgc3VwcG9ydGVkIGluIE5vZGUuanMgZW52aXJvbm1lbnRcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZXh0cmFjdGVkQ3JlZHMua2luZCA9PT0gXCJTQVNDb25uU3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICB1cmwgPVxuICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb1VSTFBhdGgoYXBwZW5kVG9VUkxQYXRoKGV4dHJhY3RlZENyZWRzLnVybCwgZW5jb2RlVVJJQ29tcG9uZW50KGNvbnRhaW5lck5hbWUpKSwgZW5jb2RlVVJJQ29tcG9uZW50KGJsb2JOYW1lKSkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCI/XCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFjdGVkQ3JlZHMuYWNjb3VudFNhcztcbiAgICAgICAgICAgICAgICBwaXBlbGluZSA9IG5ld1BpcGVsaW5lKG5ldyBBbm9ueW1vdXNDcmVkZW50aWFsKCksIG9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29ubmVjdGlvbiBzdHJpbmcgbXVzdCBiZSBlaXRoZXIgYW4gQWNjb3VudCBjb25uZWN0aW9uIHN0cmluZyBvciBhIFNBUyBjb25uZWN0aW9uIHN0cmluZ1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGluZyBub24tZW1wdHkgc3RyaW5ncyBmb3IgY29udGFpbmVyTmFtZSBhbmQgYmxvYk5hbWUgcGFyYW1ldGVyc1wiKTtcbiAgICAgICAgfVxuICAgICAgICBzdXBlcih1cmwsIHBpcGVsaW5lKTtcbiAgICAgICAgdGhpcy5hcHBlbmRCbG9iQ29udGV4dCA9IHRoaXMuc3RvcmFnZUNsaWVudENvbnRleHQuYXBwZW5kQmxvYjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBBcHBlbmRCbG9iQ2xpZW50IG9iamVjdCBpZGVudGljYWwgdG8gdGhlIHNvdXJjZSBidXQgd2l0aCB0aGVcbiAgICAgKiBzcGVjaWZpZWQgc25hcHNob3QgdGltZXN0YW1wLlxuICAgICAqIFByb3ZpZGUgXCJcIiB3aWxsIHJlbW92ZSB0aGUgc25hcHNob3QgYW5kIHJldHVybiBhIENsaWVudCB0byB0aGUgYmFzZSBibG9iLlxuICAgICAqXG4gICAgICogQHBhcmFtIHNuYXBzaG90IC0gVGhlIHNuYXBzaG90IHRpbWVzdGFtcC5cbiAgICAgKiBAcmV0dXJucyBBIG5ldyBBcHBlbmRCbG9iQ2xpZW50IG9iamVjdCBpZGVudGljYWwgdG8gdGhlIHNvdXJjZSBidXQgd2l0aCB0aGUgc3BlY2lmaWVkIHNuYXBzaG90IHRpbWVzdGFtcC5cbiAgICAgKi9cbiAgICB3aXRoU25hcHNob3Qoc25hcHNob3QpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBcHBlbmRCbG9iQ2xpZW50KHNldFVSTFBhcmFtZXRlcih0aGlzLnVybCwgVVJMQ29uc3RhbnRzLlBhcmFtZXRlcnMuU05BUFNIT1QsIHNuYXBzaG90Lmxlbmd0aCA9PT0gMCA/IHVuZGVmaW5lZCA6IHNuYXBzaG90KSwgdGhpcy5waXBlbGluZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSAwLWxlbmd0aCBhcHBlbmQgYmxvYi4gQ2FsbCBBcHBlbmRCbG9jayB0byBhcHBlbmQgZGF0YSB0byBhbiBhcHBlbmQgYmxvYi5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9wdXQtYmxvYlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHRoZSBBcHBlbmQgQmxvY2sgQ3JlYXRlIG9wZXJhdGlvbi5cbiAgICAgKlxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2FnZTpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogY29uc3QgYXBwZW5kQmxvYkNsaWVudCA9IGNvbnRhaW5lckNsaWVudC5nZXRBcHBlbmRCbG9iQ2xpZW50KFwiPGJsb2IgbmFtZT5cIik7XG4gICAgICogYXdhaXQgYXBwZW5kQmxvYkNsaWVudC5jcmVhdGUoKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBhc3luYyBjcmVhdGUob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIG9wdGlvbnMuY29uZGl0aW9ucyA9IG9wdGlvbnMuY29uZGl0aW9ucyB8fCB7fTtcbiAgICAgICAgZW5zdXJlQ3BrSWZTcGVjaWZpZWQob3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LCB0aGlzLmlzSHR0cHMpO1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkFwcGVuZEJsb2JDbGllbnQtY3JlYXRlXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5hcHBlbmRCbG9iQ29udGV4dC5jcmVhdGUoMCwge1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGJsb2JIdHRwSGVhZGVyczogb3B0aW9ucy5ibG9iSFRUUEhlYWRlcnMsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbWV0YWRhdGE6IG9wdGlvbnMubWV0YWRhdGEsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIGNwa0luZm86IG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSxcbiAgICAgICAgICAgICAgICBlbmNyeXB0aW9uU2NvcGU6IG9wdGlvbnMuZW5jcnlwdGlvblNjb3BlLFxuICAgICAgICAgICAgICAgIGltbXV0YWJpbGl0eVBvbGljeUV4cGlyeTogKF9iID0gb3B0aW9ucy5pbW11dGFiaWxpdHlQb2xpY3kpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5leHBpcmllc09uLFxuICAgICAgICAgICAgICAgIGltbXV0YWJpbGl0eVBvbGljeU1vZGU6IChfYyA9IG9wdGlvbnMuaW1tdXRhYmlsaXR5UG9saWN5KSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MucG9saWN5TW9kZSxcbiAgICAgICAgICAgICAgICBsZWdhbEhvbGQ6IG9wdGlvbnMubGVnYWxIb2xkLFxuICAgICAgICAgICAgICAgIGJsb2JUYWdzU3RyaW5nOiB0b0Jsb2JUYWdzU3RyaW5nKG9wdGlvbnMudGFncyksXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIDAtbGVuZ3RoIGFwcGVuZCBibG9iLiBDYWxsIEFwcGVuZEJsb2NrIHRvIGFwcGVuZCBkYXRhIHRvIGFuIGFwcGVuZCBibG9iLlxuICAgICAqIElmIHRoZSBibG9iIHdpdGggdGhlIHNhbWUgbmFtZSBhbHJlYWR5IGV4aXN0cywgdGhlIGNvbnRlbnQgb2YgdGhlIGV4aXN0aW5nIGJsb2Igd2lsbCByZW1haW4gdW5jaGFuZ2VkLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL3B1dC1ibG9iXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtXG4gICAgICovXG4gICAgYXN5bmMgY3JlYXRlSWZOb3RFeGlzdHMob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IGNvbmRpdGlvbnMgPSB7IGlmTm9uZU1hdGNoOiBFVGFnQW55IH07XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQXBwZW5kQmxvYkNsaWVudC1jcmVhdGVJZk5vdEV4aXN0c1wiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuY3JlYXRlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgdXBkYXRlZE9wdGlvbnMpLCB7IGNvbmRpdGlvbnMgfSkpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHsgc3VjY2VlZGVkOiB0cnVlIH0sIHJlcyksIHsgX3Jlc3BvbnNlOiByZXMuX3Jlc3BvbnNlIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoKChfYSA9IGUuZGV0YWlscykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmVycm9yQ29kZSkgPT09IFwiQmxvYkFscmVhZHlFeGlzdHNcIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHsgc3VjY2VlZGVkOiBmYWxzZSB9LCAoX2IgPSBlLnJlc3BvbnNlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IucGFyc2VkSGVhZGVycyksIHsgX3Jlc3BvbnNlOiBlLnJlc3BvbnNlIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2VhbHMgdGhlIGFwcGVuZCBibG9iLCBtYWtpbmcgaXQgcmVhZCBvbmx5LlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLVxuICAgICAqL1xuICAgIGFzeW5jIHNlYWwob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIG9wdGlvbnMuY29uZGl0aW9ucyA9IG9wdGlvbnMuY29uZGl0aW9ucyB8fCB7fTtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJBcHBlbmRCbG9iQ2xpZW50LXNlYWxcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5hcHBlbmRCbG9iQ29udGV4dC5zZWFsKHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBhcHBlbmRQb3NpdGlvbkFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29tbWl0cyBhIG5ldyBibG9jayBvZiBkYXRhIHRvIHRoZSBlbmQgb2YgdGhlIGV4aXN0aW5nIGFwcGVuZCBibG9iLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2FwcGVuZC1ibG9ja1xuICAgICAqXG4gICAgICogQHBhcmFtIGJvZHkgLSBEYXRhIHRvIGJlIGFwcGVuZGVkLlxuICAgICAqIEBwYXJhbSBjb250ZW50TGVuZ3RoIC0gTGVuZ3RoIG9mIHRoZSBib2R5IGluIGJ5dGVzLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB0aGUgQXBwZW5kIEJsb2NrIG9wZXJhdGlvbi5cbiAgICAgKlxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2FnZTpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogY29uc3QgY29udGVudCA9IFwiSGVsbG8gV29ybGQhXCI7XG4gICAgICpcbiAgICAgKiAvLyBDcmVhdGUgYSBuZXcgYXBwZW5kIGJsb2IgYW5kIGFwcGVuZCBkYXRhIHRvIHRoZSBibG9iLlxuICAgICAqIGNvbnN0IG5ld0FwcGVuZEJsb2JDbGllbnQgPSBjb250YWluZXJDbGllbnQuZ2V0QXBwZW5kQmxvYkNsaWVudChcIjxibG9iIG5hbWU+XCIpO1xuICAgICAqIGF3YWl0IG5ld0FwcGVuZEJsb2JDbGllbnQuY3JlYXRlKCk7XG4gICAgICogYXdhaXQgbmV3QXBwZW5kQmxvYkNsaWVudC5hcHBlbmRCbG9jayhjb250ZW50LCBjb250ZW50Lmxlbmd0aCk7XG4gICAgICpcbiAgICAgKiAvLyBBcHBlbmQgZGF0YSB0byBhbiBleGlzdGluZyBhcHBlbmQgYmxvYi5cbiAgICAgKiBjb25zdCBleGlzdGluZ0FwcGVuZEJsb2JDbGllbnQgPSBjb250YWluZXJDbGllbnQuZ2V0QXBwZW5kQmxvYkNsaWVudChcIjxibG9iIG5hbWU+XCIpO1xuICAgICAqIGF3YWl0IGV4aXN0aW5nQXBwZW5kQmxvYkNsaWVudC5hcHBlbmRCbG9jayhjb250ZW50LCBjb250ZW50Lmxlbmd0aCk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgYXN5bmMgYXBwZW5kQmxvY2soYm9keSwgY29udGVudExlbmd0aCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIG9wdGlvbnMuY29uZGl0aW9ucyA9IG9wdGlvbnMuY29uZGl0aW9ucyB8fCB7fTtcbiAgICAgICAgZW5zdXJlQ3BrSWZTcGVjaWZpZWQob3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LCB0aGlzLmlzSHR0cHMpO1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkFwcGVuZEJsb2JDbGllbnQtYXBwZW5kQmxvY2tcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5hcHBlbmRCbG9iQ29udGV4dC5hcHBlbmRCbG9jayhjb250ZW50TGVuZ3RoLCBib2R5LCB7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgYXBwZW5kUG9zaXRpb25BY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIHJlcXVlc3RPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgIG9uVXBsb2FkUHJvZ3Jlc3M6IG9wdGlvbnMub25Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uYWxDb250ZW50TUQ1OiBvcHRpb25zLnRyYW5zYWN0aW9uYWxDb250ZW50TUQ1LFxuICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uYWxDb250ZW50Q3JjNjQ6IG9wdGlvbnMudHJhbnNhY3Rpb25hbENvbnRlbnRDcmM2NCxcbiAgICAgICAgICAgICAgICBjcGtJbmZvOiBvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksXG4gICAgICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiBvcHRpb25zLmVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgQXBwZW5kIEJsb2NrIG9wZXJhdGlvbiBjb21taXRzIGEgbmV3IGJsb2NrIG9mIGRhdGEgdG8gdGhlIGVuZCBvZiBhbiBleGlzdGluZyBhcHBlbmQgYmxvYlxuICAgICAqIHdoZXJlIHRoZSBjb250ZW50cyBhcmUgcmVhZCBmcm9tIGEgc291cmNlIHVybC5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9hcHBlbmQtYmxvY2stZnJvbS11cmxcbiAgICAgKlxuICAgICAqIEBwYXJhbSBzb3VyY2VVUkwgLVxuICAgICAqICAgICAgICAgICAgICAgICBUaGUgdXJsIHRvIHRoZSBibG9iIHRoYXQgd2lsbCBiZSB0aGUgc291cmNlIG9mIHRoZSBjb3B5LiBBIHNvdXJjZSBibG9iIGluIHRoZSBzYW1lIHN0b3JhZ2UgYWNjb3VudCBjYW5cbiAgICAgKiAgICAgICAgICAgICAgICAgYmUgYXV0aGVudGljYXRlZCB2aWEgU2hhcmVkIEtleS4gSG93ZXZlciwgaWYgdGhlIHNvdXJjZSBpcyBhIGJsb2IgaW4gYW5vdGhlciBhY2NvdW50LCB0aGUgc291cmNlIGJsb2JcbiAgICAgKiAgICAgICAgICAgICAgICAgbXVzdCBlaXRoZXIgYmUgcHVibGljIG9yIG11c3QgYmUgYXV0aGVudGljYXRlZCB2aWEgYSBzaGFyZWQgYWNjZXNzIHNpZ25hdHVyZS4gSWYgdGhlIHNvdXJjZSBibG9iIGlzXG4gICAgICogICAgICAgICAgICAgICAgIHB1YmxpYywgbm8gYXV0aGVudGljYXRpb24gaXMgcmVxdWlyZWQgdG8gcGVyZm9ybSB0aGUgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSBzb3VyY2VPZmZzZXQgLSBPZmZzZXQgaW4gc291cmNlIHRvIGJlIGFwcGVuZGVkXG4gICAgICogQHBhcmFtIGNvdW50IC0gTnVtYmVyIG9mIGJ5dGVzIHRvIGJlIGFwcGVuZGVkIGFzIGEgYmxvY2tcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtXG4gICAgICovXG4gICAgYXN5bmMgYXBwZW5kQmxvY2tGcm9tVVJMKHNvdXJjZVVSTCwgc291cmNlT2Zmc2V0LCBjb3VudCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIG9wdGlvbnMuY29uZGl0aW9ucyA9IG9wdGlvbnMuY29uZGl0aW9ucyB8fCB7fTtcbiAgICAgICAgb3B0aW9ucy5zb3VyY2VDb25kaXRpb25zID0gb3B0aW9ucy5zb3VyY2VDb25kaXRpb25zIHx8IHt9O1xuICAgICAgICBlbnN1cmVDcGtJZlNwZWNpZmllZChvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksIHRoaXMuaXNIdHRwcyk7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQXBwZW5kQmxvYkNsaWVudC1hcHBlbmRCbG9ja0Zyb21VUkxcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lO1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuYXBwZW5kQmxvYkNvbnRleHQuYXBwZW5kQmxvY2tGcm9tVXJsKHNvdXJjZVVSTCwgMCwge1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIHNvdXJjZVJhbmdlOiByYW5nZVRvU3RyaW5nKHsgb2Zmc2V0OiBzb3VyY2VPZmZzZXQsIGNvdW50IH0pLFxuICAgICAgICAgICAgICAgIHNvdXJjZUNvbnRlbnRNRDU6IG9wdGlvbnMuc291cmNlQ29udGVudE1ENSxcbiAgICAgICAgICAgICAgICBzb3VyY2VDb250ZW50Q3JjNjQ6IG9wdGlvbnMuc291cmNlQ29udGVudENyYzY0LFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIGFwcGVuZFBvc2l0aW9uQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICBzb3VyY2VNb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgc291cmNlSWZNYXRjaDogKF9iID0gb3B0aW9ucy5zb3VyY2VDb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaWZNYXRjaCxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlSWZNb2RpZmllZFNpbmNlOiAoX2MgPSBvcHRpb25zLnNvdXJjZUNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5pZk1vZGlmaWVkU2luY2UsXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUlmTm9uZU1hdGNoOiAoX2QgPSBvcHRpb25zLnNvdXJjZUNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZC5pZk5vbmVNYXRjaCxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlSWZVbm1vZGlmaWVkU2luY2U6IChfZSA9IG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucykgPT09IG51bGwgfHwgX2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9lLmlmVW5tb2RpZmllZFNpbmNlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY29weVNvdXJjZUF1dGhvcml6YXRpb246IGh0dHBBdXRob3JpemF0aW9uVG9TdHJpbmcob3B0aW9ucy5zb3VyY2VBdXRob3JpemF0aW9uKSxcbiAgICAgICAgICAgICAgICBjcGtJbmZvOiBvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksXG4gICAgICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiBvcHRpb25zLmVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbi8qKlxuICogQmxvY2tCbG9iQ2xpZW50IGRlZmluZXMgYSBzZXQgb2Ygb3BlcmF0aW9ucyBhcHBsaWNhYmxlIHRvIGJsb2NrIGJsb2JzLlxuICovXG5jbGFzcyBCbG9ja0Jsb2JDbGllbnQgZXh0ZW5kcyBCbG9iQ2xpZW50IHtcbiAgICBjb25zdHJ1Y3Rvcih1cmxPckNvbm5lY3Rpb25TdHJpbmcsIGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lLCBibG9iTmFtZU9yT3B0aW9ucywgXG4gICAgLy8gTGVnYWN5LCBubyBmaXggZm9yIGVzbGludCBlcnJvciB3aXRob3V0IGJyZWFraW5nLiBEaXNhYmxlIGl0IGZvciB0aGlzIGludGVyZmFjZS5cbiAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGF6dXJlL2F6dXJlLXNkay90cy1uYW1pbmctb3B0aW9ucyovXG4gICAgb3B0aW9ucykge1xuICAgICAgICAvLyBJbiBUeXBlU2NyaXB0IHdlIGNhbm5vdCBzaW1wbHkgcGFzcyBhbGwgcGFyYW1ldGVycyB0byBzdXBlcigpIGxpa2UgYmVsb3cgc28gaGF2ZSB0byBkdXBsaWNhdGUgdGhlIGNvZGUgaW5zdGVhZC5cbiAgICAgICAgLy8gICBzdXBlcihzLCBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZU9yT3B0aW9ucywgYmxvYk5hbWVPck9wdGlvbnMsIG9wdGlvbnMpO1xuICAgICAgICBsZXQgcGlwZWxpbmU7XG4gICAgICAgIGxldCB1cmw7XG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgICAgICBpZiAoaXNQaXBlbGluZUxpa2UoY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUpKSB7XG4gICAgICAgICAgICAvLyAodXJsOiBzdHJpbmcsIHBpcGVsaW5lOiBQaXBlbGluZSlcbiAgICAgICAgICAgIHVybCA9IHVybE9yQ29ubmVjdGlvblN0cmluZztcbiAgICAgICAgICAgIHBpcGVsaW5lID0gY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoKGNvcmVVdGlsLmlzTm9kZSAmJiBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSBpbnN0YW5jZW9mIFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsKSB8fFxuICAgICAgICAgICAgY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUgaW5zdGFuY2VvZiBBbm9ueW1vdXNDcmVkZW50aWFsIHx8XG4gICAgICAgICAgICBjb3JlQXV0aC5pc1Rva2VuQ3JlZGVudGlhbChjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSkpIHtcbiAgICAgICAgICAgIC8vICh1cmw6IHN0cmluZywgY3JlZGVudGlhbD86IFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsIHwgQW5vbnltb3VzQ3JlZGVudGlhbCB8IFRva2VuQ3JlZGVudGlhbCwgb3B0aW9ucz86IFN0b3JhZ2VQaXBlbGluZU9wdGlvbnMpXG4gICAgICAgICAgICB1cmwgPSB1cmxPckNvbm5lY3Rpb25TdHJpbmc7XG4gICAgICAgICAgICBvcHRpb25zID0gYmxvYk5hbWVPck9wdGlvbnM7XG4gICAgICAgICAgICBwaXBlbGluZSA9IG5ld1BpcGVsaW5lKGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUgJiZcbiAgICAgICAgICAgIHR5cGVvZiBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgLy8gKHVybDogc3RyaW5nLCBjcmVkZW50aWFsPzogU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwgfCBBbm9ueW1vdXNDcmVkZW50aWFsIHwgVG9rZW5DcmVkZW50aWFsLCBvcHRpb25zPzogU3RvcmFnZVBpcGVsaW5lT3B0aW9ucylcbiAgICAgICAgICAgIC8vIFRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZC4gVXNlIGFub255bW91cyBjcmVkZW50aWFsLlxuICAgICAgICAgICAgdXJsID0gdXJsT3JDb25uZWN0aW9uU3RyaW5nO1xuICAgICAgICAgICAgaWYgKGJsb2JOYW1lT3JPcHRpb25zICYmIHR5cGVvZiBibG9iTmFtZU9yT3B0aW9ucyAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMgPSBibG9iTmFtZU9yT3B0aW9ucztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBpcGVsaW5lID0gbmV3UGlwZWxpbmUobmV3IEFub255bW91c0NyZWRlbnRpYWwoKSwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUgJiZcbiAgICAgICAgICAgIHR5cGVvZiBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgYmxvYk5hbWVPck9wdGlvbnMgJiZcbiAgICAgICAgICAgIHR5cGVvZiBibG9iTmFtZU9yT3B0aW9ucyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgLy8gKGNvbm5lY3Rpb25TdHJpbmc6IHN0cmluZywgY29udGFpbmVyTmFtZTogc3RyaW5nLCBibG9iTmFtZTogc3RyaW5nLCBvcHRpb25zPzogU3RvcmFnZVBpcGVsaW5lT3B0aW9ucylcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lck5hbWUgPSBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZTtcbiAgICAgICAgICAgIGNvbnN0IGJsb2JOYW1lID0gYmxvYk5hbWVPck9wdGlvbnM7XG4gICAgICAgICAgICBjb25zdCBleHRyYWN0ZWRDcmVkcyA9IGV4dHJhY3RDb25uZWN0aW9uU3RyaW5nUGFydHModXJsT3JDb25uZWN0aW9uU3RyaW5nKTtcbiAgICAgICAgICAgIGlmIChleHRyYWN0ZWRDcmVkcy5raW5kID09PSBcIkFjY291bnRDb25uU3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29yZVV0aWwuaXNOb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNoYXJlZEtleUNyZWRlbnRpYWwgPSBuZXcgU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwoZXh0cmFjdGVkQ3JlZHMuYWNjb3VudE5hbWUsIGV4dHJhY3RlZENyZWRzLmFjY291bnRLZXkpO1xuICAgICAgICAgICAgICAgICAgICB1cmwgPSBhcHBlbmRUb1VSTFBhdGgoYXBwZW5kVG9VUkxQYXRoKGV4dHJhY3RlZENyZWRzLnVybCwgZW5jb2RlVVJJQ29tcG9uZW50KGNvbnRhaW5lck5hbWUpKSwgZW5jb2RlVVJJQ29tcG9uZW50KGJsb2JOYW1lKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucy5wcm94eU9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMucHJveHlPcHRpb25zID0gY29yZVJlc3RQaXBlbGluZS5nZXREZWZhdWx0UHJveHlTZXR0aW5ncyhleHRyYWN0ZWRDcmVkcy5wcm94eVVyaSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcGlwZWxpbmUgPSBuZXdQaXBlbGluZShzaGFyZWRLZXlDcmVkZW50aWFsLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFjY291bnQgY29ubmVjdGlvbiBzdHJpbmcgaXMgb25seSBzdXBwb3J0ZWQgaW4gTm9kZS5qcyBlbnZpcm9ubWVudFwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChleHRyYWN0ZWRDcmVkcy5raW5kID09PSBcIlNBU0Nvbm5TdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIHVybCA9XG4gICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvVVJMUGF0aChhcHBlbmRUb1VSTFBhdGgoZXh0cmFjdGVkQ3JlZHMudXJsLCBlbmNvZGVVUklDb21wb25lbnQoY29udGFpbmVyTmFtZSkpLCBlbmNvZGVVUklDb21wb25lbnQoYmxvYk5hbWUpKSArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIj9cIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYWN0ZWRDcmVkcy5hY2NvdW50U2FzO1xuICAgICAgICAgICAgICAgIHBpcGVsaW5lID0gbmV3UGlwZWxpbmUobmV3IEFub255bW91c0NyZWRlbnRpYWwoKSwgb3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb25uZWN0aW9uIHN0cmluZyBtdXN0IGJlIGVpdGhlciBhbiBBY2NvdW50IGNvbm5lY3Rpb24gc3RyaW5nIG9yIGEgU0FTIGNvbm5lY3Rpb24gc3RyaW5nXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0aW5nIG5vbi1lbXB0eSBzdHJpbmdzIGZvciBjb250YWluZXJOYW1lIGFuZCBibG9iTmFtZSBwYXJhbWV0ZXJzXCIpO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyKHVybCwgcGlwZWxpbmUpO1xuICAgICAgICB0aGlzLmJsb2NrQmxvYkNvbnRleHQgPSB0aGlzLnN0b3JhZ2VDbGllbnRDb250ZXh0LmJsb2NrQmxvYjtcbiAgICAgICAgdGhpcy5fYmxvYkNvbnRleHQgPSB0aGlzLnN0b3JhZ2VDbGllbnRDb250ZXh0LmJsb2I7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgQmxvY2tCbG9iQ2xpZW50IG9iamVjdCBpZGVudGljYWwgdG8gdGhlIHNvdXJjZSBidXQgd2l0aCB0aGVcbiAgICAgKiBzcGVjaWZpZWQgc25hcHNob3QgdGltZXN0YW1wLlxuICAgICAqIFByb3ZpZGUgXCJcIiB3aWxsIHJlbW92ZSB0aGUgc25hcHNob3QgYW5kIHJldHVybiBhIFVSTCB0byB0aGUgYmFzZSBibG9iLlxuICAgICAqXG4gICAgICogQHBhcmFtIHNuYXBzaG90IC0gVGhlIHNuYXBzaG90IHRpbWVzdGFtcC5cbiAgICAgKiBAcmV0dXJucyBBIG5ldyBCbG9ja0Jsb2JDbGllbnQgb2JqZWN0IGlkZW50aWNhbCB0byB0aGUgc291cmNlIGJ1dCB3aXRoIHRoZSBzcGVjaWZpZWQgc25hcHNob3QgdGltZXN0YW1wLlxuICAgICAqL1xuICAgIHdpdGhTbmFwc2hvdChzbmFwc2hvdCkge1xuICAgICAgICByZXR1cm4gbmV3IEJsb2NrQmxvYkNsaWVudChzZXRVUkxQYXJhbWV0ZXIodGhpcy51cmwsIFVSTENvbnN0YW50cy5QYXJhbWV0ZXJzLlNOQVBTSE9ULCBzbmFwc2hvdC5sZW5ndGggPT09IDAgPyB1bmRlZmluZWQgOiBzbmFwc2hvdCksIHRoaXMucGlwZWxpbmUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBPTkxZIEFWQUlMQUJMRSBJTiBOT0RFLkpTIFJVTlRJTUUuXG4gICAgICpcbiAgICAgKiBRdWljayBxdWVyeSBmb3IgYSBKU09OIG9yIENTViBmb3JtYXR0ZWQgYmxvYi5cbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNhZ2UgKE5vZGUuanMpOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiAvLyBRdWVyeSBhbmQgY29udmVydCBhIGJsb2IgdG8gYSBzdHJpbmdcbiAgICAgKiBjb25zdCBxdWVyeUJsb2NrQmxvYlJlc3BvbnNlID0gYXdhaXQgYmxvY2tCbG9iQ2xpZW50LnF1ZXJ5KFwic2VsZWN0ICogZnJvbSBCbG9iU3RvcmFnZVwiKTtcbiAgICAgKiBjb25zdCBkb3dubG9hZGVkID0gKGF3YWl0IHN0cmVhbVRvQnVmZmVyKHF1ZXJ5QmxvY2tCbG9iUmVzcG9uc2UucmVhZGFibGVTdHJlYW1Cb2R5KSkudG9TdHJpbmcoKTtcbiAgICAgKiBjb25zb2xlLmxvZyhcIlF1ZXJ5IGJsb2IgY29udGVudDpcIiwgZG93bmxvYWRlZCk7XG4gICAgICpcbiAgICAgKiBhc3luYyBmdW5jdGlvbiBzdHJlYW1Ub0J1ZmZlcihyZWFkYWJsZVN0cmVhbSkge1xuICAgICAqICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgKiAgICAgY29uc3QgY2h1bmtzID0gW107XG4gICAgICogICAgIHJlYWRhYmxlU3RyZWFtLm9uKFwiZGF0YVwiLCAoZGF0YSkgPT4ge1xuICAgICAqICAgICAgIGNodW5rcy5wdXNoKGRhdGEgaW5zdGFuY2VvZiBCdWZmZXIgPyBkYXRhIDogQnVmZmVyLmZyb20oZGF0YSkpO1xuICAgICAqICAgICB9KTtcbiAgICAgKiAgICAgcmVhZGFibGVTdHJlYW0ub24oXCJlbmRcIiwgKCkgPT4ge1xuICAgICAqICAgICAgIHJlc29sdmUoQnVmZmVyLmNvbmNhdChjaHVua3MpKTtcbiAgICAgKiAgICAgfSk7XG4gICAgICogICAgIHJlYWRhYmxlU3RyZWFtLm9uKFwiZXJyb3JcIiwgcmVqZWN0KTtcbiAgICAgKiAgIH0pO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBwYXJhbSBxdWVyeSAtXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLVxuICAgICAqL1xuICAgIGFzeW5jIHF1ZXJ5KHF1ZXJ5LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgZW5zdXJlQ3BrSWZTcGVjaWZpZWQob3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LCB0aGlzLmlzSHR0cHMpO1xuICAgICAgICBpZiAoIWNvcmVVdGlsLmlzTm9kZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBvcGVyYXRpb24gY3VycmVudGx5IGlzIG9ubHkgc3VwcG9ydGVkIGluIE5vZGUuanMuXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvY2tCbG9iQ2xpZW50LXF1ZXJ5XCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLl9ibG9iQ29udGV4dC5xdWVyeSh7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgcXVlcnlSZXF1ZXN0OiB7XG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5VHlwZTogXCJTUUxcIixcbiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogcXVlcnksXG4gICAgICAgICAgICAgICAgICAgIGlucHV0U2VyaWFsaXphdGlvbjogdG9RdWVyeVNlcmlhbGl6YXRpb24ob3B0aW9ucy5pbnB1dFRleHRDb25maWd1cmF0aW9uKSxcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0U2VyaWFsaXphdGlvbjogdG9RdWVyeVNlcmlhbGl6YXRpb24ob3B0aW9ucy5vdXRwdXRUZXh0Q29uZmlndXJhdGlvbiksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgY3BrSW5mbzogb3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQmxvYlF1ZXJ5UmVzcG9uc2UocmVzcG9uc2UsIHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBvblByb2dyZXNzOiBvcHRpb25zLm9uUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgb25FcnJvcjogb3B0aW9ucy5vbkVycm9yLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IGJsb2NrIGJsb2IsIG9yIHVwZGF0ZXMgdGhlIGNvbnRlbnQgb2YgYW4gZXhpc3RpbmcgYmxvY2sgYmxvYi5cbiAgICAgKiBVcGRhdGluZyBhbiBleGlzdGluZyBibG9jayBibG9iIG92ZXJ3cml0ZXMgYW55IGV4aXN0aW5nIG1ldGFkYXRhIG9uIHRoZSBibG9iLlxuICAgICAqIFBhcnRpYWwgdXBkYXRlcyBhcmUgbm90IHN1cHBvcnRlZDsgdGhlIGNvbnRlbnQgb2YgdGhlIGV4aXN0aW5nIGJsb2IgaXNcbiAgICAgKiBvdmVyd3JpdHRlbiB3aXRoIHRoZSBuZXcgY29udGVudC4gVG8gcGVyZm9ybSBhIHBhcnRpYWwgdXBkYXRlIG9mIGEgYmxvY2sgYmxvYidzLFxuICAgICAqIHVzZSB7QGxpbmsgc3RhZ2VCbG9ja30gYW5kIHtAbGluayBjb21taXRCbG9ja0xpc3R9LlxuICAgICAqXG4gICAgICogVGhpcyBpcyBhIG5vbi1wYXJhbGxlbCB1cGxvYWRpbmcgbWV0aG9kLCBwbGVhc2UgdXNlIHtAbGluayB1cGxvYWRGaWxlfSxcbiAgICAgKiB7QGxpbmsgdXBsb2FkU3RyZWFtfSBvciB7QGxpbmsgdXBsb2FkQnJvd3NlckRhdGF9IGZvciBiZXR0ZXIgcGVyZm9ybWFuY2VcbiAgICAgKiB3aXRoIGNvbmN1cnJlbmN5IHVwbG9hZGluZy5cbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL3B1dC1ibG9iXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYm9keSAtIEJsb2IsIHN0cmluZywgQXJyYXlCdWZmZXIsIEFycmF5QnVmZmVyVmlldyBvciBhIGZ1bmN0aW9uXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggcmV0dXJucyBhIG5ldyBSZWFkYWJsZSBzdHJlYW0gd2hvc2Ugb2Zmc2V0IGlzIGZyb20gZGF0YSBzb3VyY2UgYmVnaW5uaW5nLlxuICAgICAqIEBwYXJhbSBjb250ZW50TGVuZ3RoIC0gTGVuZ3RoIG9mIGJvZHkgaW4gYnl0ZXMuIFVzZSBCdWZmZXIuYnl0ZUxlbmd0aCgpIHRvIGNhbGN1bGF0ZSBib2R5IGxlbmd0aCBmb3IgYVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyBpbmNsdWRpbmcgbm9uIG5vbi1CYXNlNjQvSGV4LWVuY29kZWQgY2hhcmFjdGVycy5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gdGhlIEJsb2NrIEJsb2IgVXBsb2FkIG9wZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyBSZXNwb25zZSBkYXRhIGZvciB0aGUgQmxvY2sgQmxvYiBVcGxvYWQgb3BlcmF0aW9uLlxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2FnZTpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogY29uc3QgY29udGVudCA9IFwiSGVsbG8gd29ybGQhXCI7XG4gICAgICogY29uc3QgdXBsb2FkQmxvYlJlc3BvbnNlID0gYXdhaXQgYmxvY2tCbG9iQ2xpZW50LnVwbG9hZChjb250ZW50LCBjb250ZW50Lmxlbmd0aCk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgYXN5bmMgdXBsb2FkKGJvZHksIGNvbnRlbnRMZW5ndGgsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIGVuc3VyZUNwa0lmU3BlY2lmaWVkKG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSwgdGhpcy5pc0h0dHBzKTtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9ja0Jsb2JDbGllbnQtdXBsb2FkXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5ibG9ja0Jsb2JDb250ZXh0LnVwbG9hZChjb250ZW50TGVuZ3RoLCBib2R5LCB7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgYmxvYkh0dHBIZWFkZXJzOiBvcHRpb25zLmJsb2JIVFRQSGVhZGVycyxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBtZXRhZGF0YTogb3B0aW9ucy5tZXRhZGF0YSxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgcmVxdWVzdE9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgb25VcGxvYWRQcm9ncmVzczogb3B0aW9ucy5vblByb2dyZXNzLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY3BrSW5mbzogb3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LFxuICAgICAgICAgICAgICAgIGVuY3J5cHRpb25TY29wZTogb3B0aW9ucy5lbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgICAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5RXhwaXJ5OiAoX2IgPSBvcHRpb25zLmltbXV0YWJpbGl0eVBvbGljeSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmV4cGlyaWVzT24sXG4gICAgICAgICAgICAgICAgaW1tdXRhYmlsaXR5UG9saWN5TW9kZTogKF9jID0gb3B0aW9ucy5pbW11dGFiaWxpdHlQb2xpY3kpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5wb2xpY3lNb2RlLFxuICAgICAgICAgICAgICAgIGxlZ2FsSG9sZDogb3B0aW9ucy5sZWdhbEhvbGQsXG4gICAgICAgICAgICAgICAgdGllcjogdG9BY2Nlc3NUaWVyKG9wdGlvbnMudGllciksXG4gICAgICAgICAgICAgICAgYmxvYlRhZ3NTdHJpbmc6IHRvQmxvYlRhZ3NTdHJpbmcob3B0aW9ucy50YWdzKSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IEJsb2NrIEJsb2Igd2hlcmUgdGhlIGNvbnRlbnRzIG9mIHRoZSBibG9iIGFyZSByZWFkIGZyb20gYSBnaXZlbiBVUkwuXG4gICAgICogVGhpcyBBUEkgaXMgc3VwcG9ydGVkIGJlZ2lubmluZyB3aXRoIHRoZSAyMDIwLTA0LTA4IHZlcnNpb24uIFBhcnRpYWwgdXBkYXRlc1xuICAgICAqIGFyZSBub3Qgc3VwcG9ydGVkIHdpdGggUHV0IEJsb2IgZnJvbSBVUkw7IHRoZSBjb250ZW50IG9mIGFuIGV4aXN0aW5nIGJsb2IgaXMgb3ZlcndyaXR0ZW4gd2l0aFxuICAgICAqIHRoZSBjb250ZW50IG9mIHRoZSBuZXcgYmxvYi4gIFRvIHBlcmZvcm0gcGFydGlhbCB1cGRhdGVzIHRvIGEgYmxvY2sgYmxvYuKAmXMgY29udGVudHMgdXNpbmcgYVxuICAgICAqIHNvdXJjZSBVUkwsIHVzZSB7QGxpbmsgc3RhZ2VCbG9ja0Zyb21VUkx9IGFuZCB7QGxpbmsgY29tbWl0QmxvY2tMaXN0fS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzb3VyY2VVUkwgLSBTcGVjaWZpZXMgdGhlIFVSTCBvZiB0aGUgYmxvYi4gVGhlIHZhbHVlXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBtYXkgYmUgYSBVUkwgb2YgdXAgdG8gMiBLQiBpbiBsZW5ndGggdGhhdCBzcGVjaWZpZXMgYSBibG9iLlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHZhbHVlIHNob3VsZCBiZSBVUkwtZW5jb2RlZCBhcyBpdCB3b3VsZCBhcHBlYXJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGEgcmVxdWVzdCBVUkkuIFRoZSBzb3VyY2UgYmxvYiBtdXN0IGVpdGhlciBiZSBwdWJsaWNcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIG11c3QgYmUgYXV0aGVudGljYXRlZCB2aWEgYSBzaGFyZWQgYWNjZXNzIHNpZ25hdHVyZS5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoZSBzb3VyY2UgYmxvYiBpcyBwdWJsaWMsIG5vIGF1dGhlbnRpY2F0aW9uIGlzIHJlcXVpcmVkXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICB0byBwZXJmb3JtIHRoZSBvcGVyYXRpb24uIEhlcmUgYXJlIHNvbWUgZXhhbXBsZXMgb2Ygc291cmNlIG9iamVjdCBVUkxzOlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBodHRwczovL215YWNjb3VudC5ibG9iLmNvcmUud2luZG93cy5uZXQvbXljb250YWluZXIvbXlibG9iXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAtIGh0dHBzOi8vbXlhY2NvdW50LmJsb2IuY29yZS53aW5kb3dzLm5ldC9teWNvbnRhaW5lci9teWJsb2I/c25hcHNob3Q9PERhdGVUaW1lPlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBhc3luYyBzeW5jVXBsb2FkRnJvbVVSTChzb3VyY2VVUkwsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIGVuc3VyZUNwa0lmU3BlY2lmaWVkKG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSwgdGhpcy5pc0h0dHBzKTtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9ja0Jsb2JDbGllbnQtc3luY1VwbG9hZEZyb21VUkxcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lLCBfZjtcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLmJsb2NrQmxvYkNvbnRleHQucHV0QmxvYkZyb21VcmwoMCwgc291cmNlVVJMLCBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMpLCB7IGJsb2JIdHRwSGVhZGVyczogb3B0aW9ucy5ibG9iSFRUUEhlYWRlcnMsIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLCBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksIHNvdXJjZU1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICBzb3VyY2VJZk1hdGNoOiAoX2IgPSBvcHRpb25zLnNvdXJjZUNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5pZk1hdGNoLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VJZk1vZGlmaWVkU2luY2U6IChfYyA9IG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmlmTW9kaWZpZWRTaW5jZSxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlSWZOb25lTWF0Y2g6IChfZCA9IG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucykgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLmlmTm9uZU1hdGNoLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VJZlVubW9kaWZpZWRTaW5jZTogKF9lID0gb3B0aW9ucy5zb3VyY2VDb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2UuaWZVbm1vZGlmaWVkU2luY2UsXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUlmVGFnczogKF9mID0gb3B0aW9ucy5zb3VyY2VDb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2YudGFnQ29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICB9LCBjcGtJbmZvOiBvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksIGNvcHlTb3VyY2VBdXRob3JpemF0aW9uOiBodHRwQXV0aG9yaXphdGlvblRvU3RyaW5nKG9wdGlvbnMuc291cmNlQXV0aG9yaXphdGlvbiksIHRpZXI6IHRvQWNjZXNzVGllcihvcHRpb25zLnRpZXIpLCBibG9iVGFnc1N0cmluZzogdG9CbG9iVGFnc1N0cmluZyhvcHRpb25zLnRhZ3MpLCBjb3B5U291cmNlVGFnczogb3B0aW9ucy5jb3B5U291cmNlVGFncywgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zIH0pKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBVcGxvYWRzIHRoZSBzcGVjaWZpZWQgYmxvY2sgdG8gdGhlIGJsb2NrIGJsb2IncyBcInN0YWdpbmcgYXJlYVwiIHRvIGJlIGxhdGVyXG4gICAgICogY29tbWl0dGVkIGJ5IGEgY2FsbCB0byBjb21taXRCbG9ja0xpc3QuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvcHV0LWJsb2NrXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYmxvY2tJZCAtIEEgNjQtYnl0ZSB2YWx1ZSB0aGF0IGlzIGJhc2U2NC1lbmNvZGVkXG4gICAgICogQHBhcmFtIGJvZHkgLSBEYXRhIHRvIHVwbG9hZCB0byB0aGUgc3RhZ2luZyBhcmVhLlxuICAgICAqIEBwYXJhbSBjb250ZW50TGVuZ3RoIC0gTnVtYmVyIG9mIGJ5dGVzIHRvIHVwbG9hZC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gdGhlIEJsb2NrIEJsb2IgU3RhZ2UgQmxvY2sgb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIFJlc3BvbnNlIGRhdGEgZm9yIHRoZSBCbG9jayBCbG9iIFN0YWdlIEJsb2NrIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBzdGFnZUJsb2NrKGJsb2NrSWQsIGJvZHksIGNvbnRlbnRMZW5ndGgsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBlbnN1cmVDcGtJZlNwZWNpZmllZChvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksIHRoaXMuaXNIdHRwcyk7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvY2tCbG9iQ2xpZW50LXN0YWdlQmxvY2tcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5ibG9ja0Jsb2JDb250ZXh0LnN0YWdlQmxvY2soYmxvY2tJZCwgY29udGVudExlbmd0aCwgYm9keSwge1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIHJlcXVlc3RPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgIG9uVXBsb2FkUHJvZ3Jlc3M6IG9wdGlvbnMub25Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uYWxDb250ZW50TUQ1OiBvcHRpb25zLnRyYW5zYWN0aW9uYWxDb250ZW50TUQ1LFxuICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uYWxDb250ZW50Q3JjNjQ6IG9wdGlvbnMudHJhbnNhY3Rpb25hbENvbnRlbnRDcmM2NCxcbiAgICAgICAgICAgICAgICBjcGtJbmZvOiBvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksXG4gICAgICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiBvcHRpb25zLmVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgU3RhZ2UgQmxvY2sgRnJvbSBVUkwgb3BlcmF0aW9uIGNyZWF0ZXMgYSBuZXcgYmxvY2sgdG8gYmUgY29tbWl0dGVkIGFzIHBhcnRcbiAgICAgKiBvZiBhIGJsb2Igd2hlcmUgdGhlIGNvbnRlbnRzIGFyZSByZWFkIGZyb20gYSBVUkwuXG4gICAgICogVGhpcyBBUEkgaXMgYXZhaWxhYmxlIHN0YXJ0aW5nIGluIHZlcnNpb24gMjAxOC0wMy0yOC5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9wdXQtYmxvY2stZnJvbS11cmxcbiAgICAgKlxuICAgICAqIEBwYXJhbSBibG9ja0lkIC0gQSA2NC1ieXRlIHZhbHVlIHRoYXQgaXMgYmFzZTY0LWVuY29kZWRcbiAgICAgKiBAcGFyYW0gc291cmNlVVJMIC0gU3BlY2lmaWVzIHRoZSBVUkwgb2YgdGhlIGJsb2IuIFRoZSB2YWx1ZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF5IGJlIGEgVVJMIG9mIHVwIHRvIDIgS0IgaW4gbGVuZ3RoIHRoYXQgc3BlY2lmaWVzIGEgYmxvYi5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB2YWx1ZSBzaG91bGQgYmUgVVJMLWVuY29kZWQgYXMgaXQgd291bGQgYXBwZWFyXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBhIHJlcXVlc3QgVVJJLiBUaGUgc291cmNlIGJsb2IgbXVzdCBlaXRoZXIgYmUgcHVibGljXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBvciBtdXN0IGJlIGF1dGhlbnRpY2F0ZWQgdmlhIGEgc2hhcmVkIGFjY2VzcyBzaWduYXR1cmUuXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB0aGUgc291cmNlIGJsb2IgaXMgcHVibGljLCBubyBhdXRoZW50aWNhdGlvbiBpcyByZXF1aXJlZFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gcGVyZm9ybSB0aGUgb3BlcmF0aW9uLiBIZXJlIGFyZSBzb21lIGV4YW1wbGVzIG9mIHNvdXJjZSBvYmplY3QgVVJMczpcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gaHR0cHM6Ly9teWFjY291bnQuYmxvYi5jb3JlLndpbmRvd3MubmV0L215Y29udGFpbmVyL215YmxvYlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBodHRwczovL215YWNjb3VudC5ibG9iLmNvcmUud2luZG93cy5uZXQvbXljb250YWluZXIvbXlibG9iP3NuYXBzaG90PTxEYXRlVGltZT5cbiAgICAgKiBAcGFyYW0gb2Zmc2V0IC0gRnJvbSB3aGljaCBwb3NpdGlvbiBvZiB0aGUgYmxvYiB0byBkb3dubG9hZCwgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDBcbiAgICAgKiBAcGFyYW0gY291bnQgLSBIb3cgbXVjaCBkYXRhIHRvIGJlIGRvd25sb2FkZWQsIGdyZWF0ZXIgdGhhbiAwLiBXaWxsIGRvd25sb2FkIHRvIHRoZSBlbmQgd2hlbiB1bmRlZmluZWRcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gdGhlIEJsb2NrIEJsb2IgU3RhZ2UgQmxvY2sgRnJvbSBVUkwgb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIFJlc3BvbnNlIGRhdGEgZm9yIHRoZSBCbG9jayBCbG9iIFN0YWdlIEJsb2NrIEZyb20gVVJMIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBzdGFnZUJsb2NrRnJvbVVSTChibG9ja0lkLCBzb3VyY2VVUkwsIG9mZnNldCA9IDAsIGNvdW50LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgZW5zdXJlQ3BrSWZTcGVjaWZpZWQob3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LCB0aGlzLmlzSHR0cHMpO1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2NrQmxvYkNsaWVudC1zdGFnZUJsb2NrRnJvbVVSTFwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLmJsb2NrQmxvYkNvbnRleHQuc3RhZ2VCbG9ja0Zyb21VUkwoYmxvY2tJZCwgMCwgc291cmNlVVJMLCB7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgc291cmNlQ29udGVudE1ENTogb3B0aW9ucy5zb3VyY2VDb250ZW50TUQ1LFxuICAgICAgICAgICAgICAgIHNvdXJjZUNvbnRlbnRDcmM2NDogb3B0aW9ucy5zb3VyY2VDb250ZW50Q3JjNjQsXG4gICAgICAgICAgICAgICAgc291cmNlUmFuZ2U6IG9mZnNldCA9PT0gMCAmJiAhY291bnQgPyB1bmRlZmluZWQgOiByYW5nZVRvU3RyaW5nKHsgb2Zmc2V0LCBjb3VudCB9KSxcbiAgICAgICAgICAgICAgICBjcGtJbmZvOiBvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksXG4gICAgICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiBvcHRpb25zLmVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgICAgICAgICBjb3B5U291cmNlQXV0aG9yaXphdGlvbjogaHR0cEF1dGhvcml6YXRpb25Ub1N0cmluZyhvcHRpb25zLnNvdXJjZUF1dGhvcml6YXRpb24pLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyaXRlcyBhIGJsb2IgYnkgc3BlY2lmeWluZyB0aGUgbGlzdCBvZiBibG9jayBJRHMgdGhhdCBtYWtlIHVwIHRoZSBibG9iLlxuICAgICAqIEluIG9yZGVyIHRvIGJlIHdyaXR0ZW4gYXMgcGFydCBvZiBhIGJsb2IsIGEgYmxvY2sgbXVzdCBoYXZlIGJlZW4gc3VjY2Vzc2Z1bGx5IHdyaXR0ZW5cbiAgICAgKiB0byB0aGUgc2VydmVyIGluIGEgcHJpb3Ige0BsaW5rIHN0YWdlQmxvY2t9IG9wZXJhdGlvbi4gWW91IGNhbiBjYWxsIHtAbGluayBjb21taXRCbG9ja0xpc3R9IHRvXG4gICAgICogdXBkYXRlIGEgYmxvYiBieSB1cGxvYWRpbmcgb25seSB0aG9zZSBibG9ja3MgdGhhdCBoYXZlIGNoYW5nZWQsIHRoZW4gY29tbWl0dGluZyB0aGUgbmV3IGFuZCBleGlzdGluZ1xuICAgICAqIGJsb2NrcyB0b2dldGhlci4gQW55IGJsb2NrcyBub3Qgc3BlY2lmaWVkIGluIHRoZSBibG9jayBsaXN0IGFuZCBwZXJtYW5lbnRseSBkZWxldGVkLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL3B1dC1ibG9jay1saXN0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gYmxvY2tzIC0gIEFycmF5IG9mIDY0LWJ5dGUgdmFsdWUgdGhhdCBpcyBiYXNlNjQtZW5jb2RlZFxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB0aGUgQmxvY2sgQmxvYiBDb21taXQgQmxvY2sgTGlzdCBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgdGhlIEJsb2NrIEJsb2IgQ29tbWl0IEJsb2NrIExpc3Qgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGNvbW1pdEJsb2NrTGlzdChibG9ja3MsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIGVuc3VyZUNwa0lmU3BlY2lmaWVkKG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSwgdGhpcy5pc0h0dHBzKTtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9ja0Jsb2JDbGllbnQtY29tbWl0QmxvY2tMaXN0XCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5ibG9ja0Jsb2JDb250ZXh0LmNvbW1pdEJsb2NrTGlzdCh7IGxhdGVzdDogYmxvY2tzIH0sIHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBibG9iSHR0cEhlYWRlcnM6IG9wdGlvbnMuYmxvYkhUVFBIZWFkZXJzLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIG1ldGFkYXRhOiBvcHRpb25zLm1ldGFkYXRhLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICBjcGtJbmZvOiBvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksXG4gICAgICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiBvcHRpb25zLmVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgICAgICAgICBpbW11dGFiaWxpdHlQb2xpY3lFeHBpcnk6IChfYiA9IG9wdGlvbnMuaW1tdXRhYmlsaXR5UG9saWN5KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuZXhwaXJpZXNPbixcbiAgICAgICAgICAgICAgICBpbW11dGFiaWxpdHlQb2xpY3lNb2RlOiAoX2MgPSBvcHRpb25zLmltbXV0YWJpbGl0eVBvbGljeSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLnBvbGljeU1vZGUsXG4gICAgICAgICAgICAgICAgbGVnYWxIb2xkOiBvcHRpb25zLmxlZ2FsSG9sZCxcbiAgICAgICAgICAgICAgICB0aWVyOiB0b0FjY2Vzc1RpZXIob3B0aW9ucy50aWVyKSxcbiAgICAgICAgICAgICAgICBibG9iVGFnc1N0cmluZzogdG9CbG9iVGFnc1N0cmluZyhvcHRpb25zLnRhZ3MpLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGxpc3Qgb2YgYmxvY2tzIHRoYXQgaGF2ZSBiZWVuIHVwbG9hZGVkIGFzIHBhcnQgb2YgYSBibG9jayBibG9iXG4gICAgICogdXNpbmcgdGhlIHNwZWNpZmllZCBibG9jayBsaXN0IGZpbHRlci5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9nZXQtYmxvY2stbGlzdFxuICAgICAqXG4gICAgICogQHBhcmFtIGxpc3RUeXBlIC0gU3BlY2lmaWVzIHdoZXRoZXIgdG8gcmV0dXJuIHRoZSBsaXN0IG9mIGNvbW1pdHRlZCBibG9ja3MsXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGxpc3Qgb2YgdW5jb21taXR0ZWQgYmxvY2tzLCBvciBib3RoIGxpc3RzIHRvZ2V0aGVyLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB0aGUgQmxvY2sgQmxvYiBHZXQgQmxvY2sgTGlzdCBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgdGhlIEJsb2NrIEJsb2IgR2V0IEJsb2NrIExpc3Qgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGdldEJsb2NrTGlzdChsaXN0VHlwZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvY2tCbG9iQ2xpZW50LWdldEJsb2NrTGlzdFwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuYmxvY2tCbG9iQ29udGV4dC5nZXRCbG9ja0xpc3QobGlzdFR5cGUsIHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgaWYgKCFyZXMuY29tbWl0dGVkQmxvY2tzKSB7XG4gICAgICAgICAgICAgICAgcmVzLmNvbW1pdHRlZEJsb2NrcyA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFyZXMudW5jb21taXR0ZWRCbG9ja3MpIHtcbiAgICAgICAgICAgICAgICByZXMudW5jb21taXR0ZWRCbG9ja3MgPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBIaWdoIGxldmVsIGZ1bmN0aW9uc1xuICAgIC8qKlxuICAgICAqIFVwbG9hZHMgYSBCdWZmZXIoTm9kZS5qcykvQmxvYihicm93c2VycykvQXJyYXlCdWZmZXIvQXJyYXlCdWZmZXJWaWV3IG9iamVjdCB0byBhIEJsb2NrQmxvYi5cbiAgICAgKlxuICAgICAqIFdoZW4gZGF0YSBsZW5ndGggaXMgbm8gbW9yZSB0aGFuIHRoZSBzcGVjaWZpbGVkIHtAbGluayBCbG9ja0Jsb2JQYXJhbGxlbFVwbG9hZE9wdGlvbnMubWF4U2luZ2xlU2hvdFNpemV9IChkZWZhdWx0IGlzXG4gICAgICoge0BsaW5rIEJMT0NLX0JMT0JfTUFYX1VQTE9BRF9CTE9CX0JZVEVTfSksIHRoaXMgbWV0aG9kIHdpbGwgdXNlIDEge0BsaW5rIHVwbG9hZH0gY2FsbCB0byBmaW5pc2ggdGhlIHVwbG9hZC5cbiAgICAgKiBPdGhlcndpc2UsIHRoaXMgbWV0aG9kIHdpbGwgY2FsbCB7QGxpbmsgc3RhZ2VCbG9ja30gdG8gdXBsb2FkIGJsb2NrcywgYW5kIGZpbmFsbHkgY2FsbCB7QGxpbmsgY29tbWl0QmxvY2tMaXN0fVxuICAgICAqIHRvIGNvbW1pdCB0aGUgYmxvY2sgbGlzdC5cbiAgICAgKlxuICAgICAqIEEgY29tbW9uIHtAbGluayBCbG9ja0Jsb2JQYXJhbGxlbFVwbG9hZE9wdGlvbnMuYmxvYkhUVFBIZWFkZXJzfSBvcHRpb24gdG8gc2V0IGlzXG4gICAgICogYGJsb2JDb250ZW50VHlwZWAsIGVuYWJsaW5nIHRoZSBicm93c2VyIHRvIHByb3ZpZGVcbiAgICAgKiBmdW5jdGlvbmFsaXR5IGJhc2VkIG9uIGZpbGUgdHlwZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkYXRhIC0gQnVmZmVyKE5vZGUuanMpLCBCbG9iLCBBcnJheUJ1ZmZlciBvciBBcnJheUJ1ZmZlclZpZXdcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtXG4gICAgICovXG4gICAgYXN5bmMgdXBsb2FkRGF0YShkYXRhLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9ja0Jsb2JDbGllbnQtdXBsb2FkRGF0YVwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGlmIChjb3JlVXRpbC5pc05vZGUpIHtcbiAgICAgICAgICAgICAgICBsZXQgYnVmZmVyO1xuICAgICAgICAgICAgICAgIGlmIChkYXRhIGluc3RhbmNlb2YgQnVmZmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1ZmZlciA9IGRhdGE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgICAgICAgICAgICAgICAgICBidWZmZXIgPSBCdWZmZXIuZnJvbShkYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhO1xuICAgICAgICAgICAgICAgICAgICBidWZmZXIgPSBCdWZmZXIuZnJvbShkYXRhLmJ1ZmZlciwgZGF0YS5ieXRlT2Zmc2V0LCBkYXRhLmJ5dGVMZW5ndGgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy51cGxvYWRTZWVrYWJsZUludGVybmFsKChvZmZzZXQsIHNpemUpID0+IGJ1ZmZlci5zbGljZShvZmZzZXQsIG9mZnNldCArIHNpemUpLCBidWZmZXIuYnl0ZUxlbmd0aCwgdXBkYXRlZE9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYnJvd3NlckJsb2IgPSBuZXcgQmxvYihbZGF0YV0pO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnVwbG9hZFNlZWthYmxlSW50ZXJuYWwoKG9mZnNldCwgc2l6ZSkgPT4gYnJvd3NlckJsb2Iuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBzaXplKSwgYnJvd3NlckJsb2Iuc2l6ZSwgdXBkYXRlZE9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogT05MWSBBVkFJTEFCTEUgSU4gQlJPV1NFUlMuXG4gICAgICpcbiAgICAgKiBVcGxvYWRzIGEgYnJvd3NlciBCbG9iL0ZpbGUvQXJyYXlCdWZmZXIvQXJyYXlCdWZmZXJWaWV3IG9iamVjdCB0byBibG9jayBibG9iLlxuICAgICAqXG4gICAgICogV2hlbiBidWZmZXIgbGVuZ3RoIGxlc3NlciB0aGFuIG9yIGVxdWFsIHRvIDI1Nk1CLCB0aGlzIG1ldGhvZCB3aWxsIHVzZSAxIHVwbG9hZCBjYWxsIHRvIGZpbmlzaCB0aGUgdXBsb2FkLlxuICAgICAqIE90aGVyd2lzZSwgdGhpcyBtZXRob2Qgd2lsbCBjYWxsIHtAbGluayBzdGFnZUJsb2NrfSB0byB1cGxvYWQgYmxvY2tzLCBhbmQgZmluYWxseSBjYWxsXG4gICAgICoge0BsaW5rIGNvbW1pdEJsb2NrTGlzdH0gdG8gY29tbWl0IHRoZSBibG9jayBsaXN0LlxuICAgICAqXG4gICAgICogQSBjb21tb24ge0BsaW5rIEJsb2NrQmxvYlBhcmFsbGVsVXBsb2FkT3B0aW9ucy5ibG9iSFRUUEhlYWRlcnN9IG9wdGlvbiB0byBzZXQgaXNcbiAgICAgKiBgYmxvYkNvbnRlbnRUeXBlYCwgZW5hYmxpbmcgdGhlIGJyb3dzZXIgdG8gcHJvdmlkZVxuICAgICAqIGZ1bmN0aW9uYWxpdHkgYmFzZWQgb24gZmlsZSB0eXBlLlxuICAgICAqXG4gICAgICogQGRlcHJlY2F0ZWQgVXNlIHtAbGluayB1cGxvYWREYXRhfSBpbnN0ZWFkLlxuICAgICAqXG4gICAgICogQHBhcmFtIGJyb3dzZXJEYXRhIC0gQmxvYiwgRmlsZSwgQXJyYXlCdWZmZXIgb3IgQXJyYXlCdWZmZXJWaWV3XG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHVwbG9hZCBicm93c2VyIGRhdGEuXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgdGhlIEJsb2IgVXBsb2FkIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyB1cGxvYWRCcm93c2VyRGF0YShicm93c2VyRGF0YSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvY2tCbG9iQ2xpZW50LXVwbG9hZEJyb3dzZXJEYXRhXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgY29uc3QgYnJvd3NlckJsb2IgPSBuZXcgQmxvYihbYnJvd3NlckRhdGFdKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVwbG9hZFNlZWthYmxlSW50ZXJuYWwoKG9mZnNldCwgc2l6ZSkgPT4gYnJvd3NlckJsb2Iuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBzaXplKSwgYnJvd3NlckJsb2Iuc2l6ZSwgdXBkYXRlZE9wdGlvbnMpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBVcGxvYWRzIGRhdGEgdG8gYmxvY2sgYmxvYi4gUmVxdWlyZXMgYSBib2R5RmFjdG9yeSBhcyB0aGUgZGF0YSBzb3VyY2UsXG4gICAgICogd2hpY2ggbmVlZCB0byByZXR1cm4gYSB7QGxpbmsgSHR0cFJlcXVlc3RCb2R5fSBvYmplY3Qgd2l0aCB0aGUgb2Zmc2V0IGFuZCBzaXplIHByb3ZpZGVkLlxuICAgICAqXG4gICAgICogV2hlbiBkYXRhIGxlbmd0aCBpcyBubyBtb3JlIHRoYW4gdGhlIHNwZWNpZmllZCB7QGxpbmsgQmxvY2tCbG9iUGFyYWxsZWxVcGxvYWRPcHRpb25zLm1heFNpbmdsZVNob3RTaXplfSAoZGVmYXVsdCBpc1xuICAgICAqIHtAbGluayBCTE9DS19CTE9CX01BWF9VUExPQURfQkxPQl9CWVRFU30pLCB0aGlzIG1ldGhvZCB3aWxsIHVzZSAxIHtAbGluayB1cGxvYWR9IGNhbGwgdG8gZmluaXNoIHRoZSB1cGxvYWQuXG4gICAgICogT3RoZXJ3aXNlLCB0aGlzIG1ldGhvZCB3aWxsIGNhbGwge0BsaW5rIHN0YWdlQmxvY2t9IHRvIHVwbG9hZCBibG9ja3MsIGFuZCBmaW5hbGx5IGNhbGwge0BsaW5rIGNvbW1pdEJsb2NrTGlzdH1cbiAgICAgKiB0byBjb21taXQgdGhlIGJsb2NrIGxpc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYm9keUZhY3RvcnkgLVxuICAgICAqIEBwYXJhbSBzaXplIC0gc2l6ZSBvZiB0aGUgZGF0YSB0byB1cGxvYWQuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIFVwbG9hZCB0byBCbG9jayBCbG9iIG9wZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyBSZXNwb25zZSBkYXRhIGZvciB0aGUgQmxvYiBVcGxvYWQgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIHVwbG9hZFNlZWthYmxlSW50ZXJuYWwoYm9keUZhY3RvcnksIHNpemUsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBsZXQgYmxvY2tTaXplID0gKF9hID0gb3B0aW9ucy5ibG9ja1NpemUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IDA7XG4gICAgICAgIGlmIChibG9ja1NpemUgPCAwIHx8IGJsb2NrU2l6ZSA+IEJMT0NLX0JMT0JfTUFYX1NUQUdFX0JMT0NLX0JZVEVTKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgYmxvY2tTaXplIG9wdGlvbiBtdXN0IGJlID49IDAgYW5kIDw9ICR7QkxPQ0tfQkxPQl9NQVhfU1RBR0VfQkxPQ0tfQllURVN9YCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWF4U2luZ2xlU2hvdFNpemUgPSAoX2IgPSBvcHRpb25zLm1heFNpbmdsZVNob3RTaXplKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBCTE9DS19CTE9CX01BWF9VUExPQURfQkxPQl9CWVRFUztcbiAgICAgICAgaWYgKG1heFNpbmdsZVNob3RTaXplIDwgMCB8fCBtYXhTaW5nbGVTaG90U2l6ZSA+IEJMT0NLX0JMT0JfTUFYX1VQTE9BRF9CTE9CX0JZVEVTKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgbWF4U2luZ2xlU2hvdFNpemUgb3B0aW9uIG11c3QgYmUgPj0gMCBhbmQgPD0gJHtCTE9DS19CTE9CX01BWF9VUExPQURfQkxPQl9CWVRFU31gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYmxvY2tTaXplID09PSAwKSB7XG4gICAgICAgICAgICBpZiAoc2l6ZSA+IEJMT0NLX0JMT0JfTUFYX1NUQUdFX0JMT0NLX0JZVEVTICogQkxPQ0tfQkxPQl9NQVhfQkxPQ0tTKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYCR7c2l6ZX0gaXMgdG9vIGxhcmdlciB0byB1cGxvYWQgdG8gYSBibG9jayBibG9iLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNpemUgPiBtYXhTaW5nbGVTaG90U2l6ZSkge1xuICAgICAgICAgICAgICAgIGJsb2NrU2l6ZSA9IE1hdGguY2VpbChzaXplIC8gQkxPQ0tfQkxPQl9NQVhfQkxPQ0tTKTtcbiAgICAgICAgICAgICAgICBpZiAoYmxvY2tTaXplIDwgREVGQVVMVF9CTE9CX0RPV05MT0FEX0JMT0NLX0JZVEVTKSB7XG4gICAgICAgICAgICAgICAgICAgIGJsb2NrU2l6ZSA9IERFRkFVTFRfQkxPQl9ET1dOTE9BRF9CTE9DS19CWVRFUztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFvcHRpb25zLmJsb2JIVFRQSGVhZGVycykge1xuICAgICAgICAgICAgb3B0aW9ucy5ibG9iSFRUUEhlYWRlcnMgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW9wdGlvbnMuY29uZGl0aW9ucykge1xuICAgICAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0ge307XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9ja0Jsb2JDbGllbnQtdXBsb2FkU2Vla2FibGVJbnRlcm5hbFwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGlmIChzaXplIDw9IG1heFNpbmdsZVNob3RTaXplKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMudXBsb2FkKGJvZHlGYWN0b3J5KDAsIHNpemUpLCBzaXplLCB1cGRhdGVkT3B0aW9ucykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbnVtQmxvY2tzID0gTWF0aC5mbG9vcigoc2l6ZSAtIDEpIC8gYmxvY2tTaXplKSArIDE7XG4gICAgICAgICAgICBpZiAobnVtQmxvY2tzID4gQkxPQ0tfQkxPQl9NQVhfQkxPQ0tTKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYFRoZSBidWZmZXIncyBzaXplIGlzIHRvbyBiaWcgb3IgdGhlIEJsb2NrU2l6ZSBpcyB0b28gc21hbGw7YCArXG4gICAgICAgICAgICAgICAgICAgIGB0aGUgbnVtYmVyIG9mIGJsb2NrcyBtdXN0IGJlIDw9ICR7QkxPQ0tfQkxPQl9NQVhfQkxPQ0tTfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYmxvY2tMaXN0ID0gW107XG4gICAgICAgICAgICBjb25zdCBibG9ja0lEUHJlZml4ID0gY29yZVV0aWwucmFuZG9tVVVJRCgpO1xuICAgICAgICAgICAgbGV0IHRyYW5zZmVyUHJvZ3Jlc3MgPSAwO1xuICAgICAgICAgICAgY29uc3QgYmF0Y2ggPSBuZXcgQmF0Y2gob3B0aW9ucy5jb25jdXJyZW5jeSk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bUJsb2NrczsgaSsrKSB7XG4gICAgICAgICAgICAgICAgYmF0Y2guYWRkT3BlcmF0aW9uKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2tJRCA9IGdlbmVyYXRlQmxvY2tJRChibG9ja0lEUHJlZml4LCBpKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSBibG9ja1NpemUgKiBpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSBpID09PSBudW1CbG9ja3MgLSAxID8gc2l6ZSA6IHN0YXJ0ICsgYmxvY2tTaXplO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50TGVuZ3RoID0gZW5kIC0gc3RhcnQ7XG4gICAgICAgICAgICAgICAgICAgIGJsb2NrTGlzdC5wdXNoKGJsb2NrSUQpO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnN0YWdlQmxvY2soYmxvY2tJRCwgYm9keUZhY3Rvcnkoc3RhcnQsIGNvbnRlbnRMZW5ndGgpLCBjb250ZW50TGVuZ3RoLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuY3J5cHRpb25TY29wZTogb3B0aW9ucy5lbmNyeXB0aW9uU2NvcGUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgcHJvZ3Jlc3MgYWZ0ZXIgYmxvY2sgaXMgc3VjY2Vzc2Z1bGx5IHVwbG9hZGVkIHRvIHNlcnZlciwgaW4gY2FzZSBvZiBibG9jayB0cnlpbmdcbiAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogSG9vayB3aXRoIGNvbnZlbmllbmNlIGxheWVyIHByb2dyZXNzIGV2ZW50IGluIGZpbmVyIGxldmVsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZmVyUHJvZ3Jlc3MgKz0gY29udGVudExlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMub25Qcm9ncmVzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5vblByb2dyZXNzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZWRCeXRlczogdHJhbnNmZXJQcm9ncmVzcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhd2FpdCBiYXRjaC5kbygpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29tbWl0QmxvY2tMaXN0KGJsb2NrTGlzdCwgdXBkYXRlZE9wdGlvbnMpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogT05MWSBBVkFJTEFCTEUgSU4gTk9ERS5KUyBSVU5USU1FLlxuICAgICAqXG4gICAgICogVXBsb2FkcyBhIGxvY2FsIGZpbGUgaW4gYmxvY2tzIHRvIGEgYmxvY2sgYmxvYi5cbiAgICAgKlxuICAgICAqIFdoZW4gZmlsZSBzaXplIGxlc3NlciB0aGFuIG9yIGVxdWFsIHRvIDI1Nk1CLCB0aGlzIG1ldGhvZCB3aWxsIHVzZSAxIHVwbG9hZCBjYWxsIHRvIGZpbmlzaCB0aGUgdXBsb2FkLlxuICAgICAqIE90aGVyd2lzZSwgdGhpcyBtZXRob2Qgd2lsbCBjYWxsIHN0YWdlQmxvY2sgdG8gdXBsb2FkIGJsb2NrcywgYW5kIGZpbmFsbHkgY2FsbCBjb21taXRCbG9ja0xpc3RcbiAgICAgKiB0byBjb21taXQgdGhlIGJsb2NrIGxpc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZmlsZVBhdGggLSBGdWxsIHBhdGggb2YgbG9jYWwgZmlsZVxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBVcGxvYWQgdG8gQmxvY2sgQmxvYiBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgdGhlIEJsb2IgVXBsb2FkIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyB1cGxvYWRGaWxlKGZpbGVQYXRoLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9ja0Jsb2JDbGllbnQtdXBsb2FkRmlsZVwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNpemUgPSAoYXdhaXQgZnNTdGF0KGZpbGVQYXRoKSkuc2l6ZTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVwbG9hZFNlZWthYmxlSW50ZXJuYWwoKG9mZnNldCwgY291bnQpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKCkgPT4gZnNDcmVhdGVSZWFkU3RyZWFtKGZpbGVQYXRoLCB7XG4gICAgICAgICAgICAgICAgICAgIGF1dG9DbG9zZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgZW5kOiBjb3VudCA/IG9mZnNldCArIGNvdW50IC0gMSA6IEluZmluaXR5LFxuICAgICAgICAgICAgICAgICAgICBzdGFydDogb2Zmc2V0LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgc2l6ZSwgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKSwgeyB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogT05MWSBBVkFJTEFCTEUgSU4gTk9ERS5KUyBSVU5USU1FLlxuICAgICAqXG4gICAgICogVXBsb2FkcyBhIE5vZGUuanMgUmVhZGFibGUgc3RyZWFtIGludG8gYmxvY2sgYmxvYi5cbiAgICAgKlxuICAgICAqIFBFUkZPUk1BTkNFIElNUFJPVkVNRU5UIFRJUFM6XG4gICAgICogKiBJbnB1dCBzdHJlYW0gaGlnaFdhdGVyTWFyayBpcyBiZXR0ZXIgdG8gc2V0IGEgc2FtZSB2YWx1ZSB3aXRoIGJ1ZmZlclNpemVcbiAgICAgKiAgICBwYXJhbWV0ZXIsIHdoaWNoIHdpbGwgYXZvaWQgQnVmZmVyLmNvbmNhdCgpIG9wZXJhdGlvbnMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc3RyZWFtIC0gTm9kZS5qcyBSZWFkYWJsZSBzdHJlYW1cbiAgICAgKiBAcGFyYW0gYnVmZmVyU2l6ZSAtIFNpemUgb2YgZXZlcnkgYnVmZmVyIGFsbG9jYXRlZCwgYWxzbyB0aGUgYmxvY2sgc2l6ZSBpbiB0aGUgdXBsb2FkZWQgYmxvY2sgYmxvYi4gRGVmYXVsdCB2YWx1ZSBpcyA4TUJcbiAgICAgKiBAcGFyYW0gbWF4Q29uY3VycmVuY3kgLSAgTWF4IGNvbmN1cnJlbmN5IGluZGljYXRlcyB0aGUgbWF4IG51bWJlciBvZiBidWZmZXJzIHRoYXQgY2FuIGJlIGFsbG9jYXRlZCxcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aXZlIGNvcnJlbGF0aW9uIHdpdGggbWF4IHVwbG9hZGluZyBjb25jdXJyZW5jeS4gRGVmYXVsdCB2YWx1ZSBpcyA1XG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIFVwbG9hZCBTdHJlYW0gdG8gQmxvY2sgQmxvYiBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgdGhlIEJsb2IgVXBsb2FkIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyB1cGxvYWRTdHJlYW0oc3RyZWFtLCBidWZmZXJTaXplID0gREVGQVVMVF9CTE9DS19CVUZGRVJfU0laRV9CWVRFUywgbWF4Q29uY3VycmVuY3kgPSA1LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgaWYgKCFvcHRpb25zLmJsb2JIVFRQSGVhZGVycykge1xuICAgICAgICAgICAgb3B0aW9ucy5ibG9iSFRUUEhlYWRlcnMgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW9wdGlvbnMuY29uZGl0aW9ucykge1xuICAgICAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0ge307XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9ja0Jsb2JDbGllbnQtdXBsb2FkU3RyZWFtXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgbGV0IGJsb2NrTnVtID0gMDtcbiAgICAgICAgICAgIGNvbnN0IGJsb2NrSURQcmVmaXggPSBjb3JlVXRpbC5yYW5kb21VVUlEKCk7XG4gICAgICAgICAgICBsZXQgdHJhbnNmZXJQcm9ncmVzcyA9IDA7XG4gICAgICAgICAgICBjb25zdCBibG9ja0xpc3QgPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IHNjaGVkdWxlciA9IG5ldyBCdWZmZXJTY2hlZHVsZXIoc3RyZWFtLCBidWZmZXJTaXplLCBtYXhDb25jdXJyZW5jeSwgYXN5bmMgKGJvZHksIGxlbmd0aCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrSUQgPSBnZW5lcmF0ZUJsb2NrSUQoYmxvY2tJRFByZWZpeCwgYmxvY2tOdW0pO1xuICAgICAgICAgICAgICAgIGJsb2NrTGlzdC5wdXNoKGJsb2NrSUQpO1xuICAgICAgICAgICAgICAgIGJsb2NrTnVtKys7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zdGFnZUJsb2NrKGJsb2NrSUQsIGJvZHksIGxlbmd0aCwge1xuICAgICAgICAgICAgICAgICAgICBjdXN0b21lclByb3ZpZGVkS2V5OiBvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksXG4gICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgZW5jcnlwdGlvblNjb3BlOiBvcHRpb25zLmVuY3J5cHRpb25TY29wZSxcbiAgICAgICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBwcm9ncmVzcyBhZnRlciBibG9jayBpcyBzdWNjZXNzZnVsbHkgdXBsb2FkZWQgdG8gc2VydmVyLCBpbiBjYXNlIG9mIGJsb2NrIHRyeWluZ1xuICAgICAgICAgICAgICAgIHRyYW5zZmVyUHJvZ3Jlc3MgKz0gbGVuZ3RoO1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLm9uUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5vblByb2dyZXNzKHsgbG9hZGVkQnl0ZXM6IHRyYW5zZmVyUHJvZ3Jlc3MgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgXG4gICAgICAgICAgICAvLyBjb25jdXJyZW5jeSBzaG91bGQgc2V0IGEgc21hbGxlciB2YWx1ZSB0aGFuIG1heENvbmN1cnJlbmN5LCB3aGljaCBpcyBoZWxwZnVsIHRvXG4gICAgICAgICAgICAvLyByZWR1Y2UgdGhlIHBvc3NpYmlsaXR5IHdoZW4gYSBvdXRnb2luZyBoYW5kbGVyIHdhaXRzIGZvciBzdHJlYW0gZGF0YSwgaW5cbiAgICAgICAgICAgIC8vIHRoaXMgc2l0dWF0aW9uLCBvdXRnb2luZyBoYW5kbGVycyBhcmUgYmxvY2tlZC5cbiAgICAgICAgICAgIC8vIE91dGdvaW5nIHF1ZXVlIHNob3VsZG4ndCBiZSBlbXB0eS5cbiAgICAgICAgICAgIE1hdGguY2VpbCgobWF4Q29uY3VycmVuY3kgLyA0KSAqIDMpKTtcbiAgICAgICAgICAgIGF3YWl0IHNjaGVkdWxlci5kbygpO1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuY29tbWl0QmxvY2tMaXN0KGJsb2NrTGlzdCwgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKSwgeyB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMgfSkpKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuLyoqXG4gKiBQYWdlQmxvYkNsaWVudCBkZWZpbmVzIGEgc2V0IG9mIG9wZXJhdGlvbnMgYXBwbGljYWJsZSB0byBwYWdlIGJsb2JzLlxuICovXG5jbGFzcyBQYWdlQmxvYkNsaWVudCBleHRlbmRzIEJsb2JDbGllbnQge1xuICAgIGNvbnN0cnVjdG9yKHVybE9yQ29ubmVjdGlvblN0cmluZywgY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUsIGJsb2JOYW1lT3JPcHRpb25zLCBcbiAgICAvLyBMZWdhY3ksIG5vIGZpeCBmb3IgZXNsaW50IGVycm9yIHdpdGhvdXQgYnJlYWtpbmcuIERpc2FibGUgaXQgZm9yIHRoaXMgaW50ZXJmYWNlLlxuICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYXp1cmUvYXp1cmUtc2RrL3RzLW5hbWluZy1vcHRpb25zKi9cbiAgICBvcHRpb25zKSB7XG4gICAgICAgIC8vIEluIFR5cGVTY3JpcHQgd2UgY2Fubm90IHNpbXBseSBwYXNzIGFsbCBwYXJhbWV0ZXJzIHRvIHN1cGVyKCkgbGlrZSBiZWxvdyBzbyBoYXZlIHRvIGR1cGxpY2F0ZSB0aGUgY29kZSBpbnN0ZWFkLlxuICAgICAgICAvLyAgIHN1cGVyKHMsIGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lT3JPcHRpb25zLCBibG9iTmFtZU9yT3B0aW9ucywgb3B0aW9ucyk7XG4gICAgICAgIGxldCBwaXBlbGluZTtcbiAgICAgICAgbGV0IHVybDtcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgICAgIGlmIChpc1BpcGVsaW5lTGlrZShjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSkpIHtcbiAgICAgICAgICAgIC8vICh1cmw6IHN0cmluZywgcGlwZWxpbmU6IFBpcGVsaW5lKVxuICAgICAgICAgICAgdXJsID0gdXJsT3JDb25uZWN0aW9uU3RyaW5nO1xuICAgICAgICAgICAgcGlwZWxpbmUgPSBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICgoY29yZVV0aWwuaXNOb2RlICYmIGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lIGluc3RhbmNlb2YgU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwpIHx8XG4gICAgICAgICAgICBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSBpbnN0YW5jZW9mIEFub255bW91c0NyZWRlbnRpYWwgfHxcbiAgICAgICAgICAgIGNvcmVBdXRoLmlzVG9rZW5DcmVkZW50aWFsKGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lKSkge1xuICAgICAgICAgICAgLy8gKHVybDogc3RyaW5nLCBjcmVkZW50aWFsPzogU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwgfCBBbm9ueW1vdXNDcmVkZW50aWFsIHwgVG9rZW5DcmVkZW50aWFsLCBvcHRpb25zPzogU3RvcmFnZVBpcGVsaW5lT3B0aW9ucylcbiAgICAgICAgICAgIHVybCA9IHVybE9yQ29ubmVjdGlvblN0cmluZztcbiAgICAgICAgICAgIG9wdGlvbnMgPSBibG9iTmFtZU9yT3B0aW9ucztcbiAgICAgICAgICAgIHBpcGVsaW5lID0gbmV3UGlwZWxpbmUoY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSAmJlxuICAgICAgICAgICAgdHlwZW9mIGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAvLyAodXJsOiBzdHJpbmcsIGNyZWRlbnRpYWw/OiBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbCB8IEFub255bW91c0NyZWRlbnRpYWwgfCBUb2tlbkNyZWRlbnRpYWwsIG9wdGlvbnM/OiBTdG9yYWdlUGlwZWxpbmVPcHRpb25zKVxuICAgICAgICAgICAgLy8gVGhlIHNlY29uZCBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkLiBVc2UgYW5vbnltb3VzIGNyZWRlbnRpYWwuXG4gICAgICAgICAgICB1cmwgPSB1cmxPckNvbm5lY3Rpb25TdHJpbmc7XG4gICAgICAgICAgICBwaXBlbGluZSA9IG5ld1BpcGVsaW5lKG5ldyBBbm9ueW1vdXNDcmVkZW50aWFsKCksIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lICYmXG4gICAgICAgICAgICB0eXBlb2YgY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICAgIGJsb2JOYW1lT3JPcHRpb25zICYmXG4gICAgICAgICAgICB0eXBlb2YgYmxvYk5hbWVPck9wdGlvbnMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIC8vIChjb25uZWN0aW9uU3RyaW5nOiBzdHJpbmcsIGNvbnRhaW5lck5hbWU6IHN0cmluZywgYmxvYk5hbWU6IHN0cmluZywgb3B0aW9ucz86IFN0b3JhZ2VQaXBlbGluZU9wdGlvbnMpXG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJOYW1lID0gY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWU7XG4gICAgICAgICAgICBjb25zdCBibG9iTmFtZSA9IGJsb2JOYW1lT3JPcHRpb25zO1xuICAgICAgICAgICAgY29uc3QgZXh0cmFjdGVkQ3JlZHMgPSBleHRyYWN0Q29ubmVjdGlvblN0cmluZ1BhcnRzKHVybE9yQ29ubmVjdGlvblN0cmluZyk7XG4gICAgICAgICAgICBpZiAoZXh0cmFjdGVkQ3JlZHMua2luZCA9PT0gXCJBY2NvdW50Q29ublN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvcmVVdGlsLmlzTm9kZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaGFyZWRLZXlDcmVkZW50aWFsID0gbmV3IFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsKGV4dHJhY3RlZENyZWRzLmFjY291bnROYW1lLCBleHRyYWN0ZWRDcmVkcy5hY2NvdW50S2V5KTtcbiAgICAgICAgICAgICAgICAgICAgdXJsID0gYXBwZW5kVG9VUkxQYXRoKGFwcGVuZFRvVVJMUGF0aChleHRyYWN0ZWRDcmVkcy51cmwsIGVuY29kZVVSSUNvbXBvbmVudChjb250YWluZXJOYW1lKSksIGVuY29kZVVSSUNvbXBvbmVudChibG9iTmFtZSkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMucHJveHlPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnByb3h5T3B0aW9ucyA9IGNvcmVSZXN0UGlwZWxpbmUuZ2V0RGVmYXVsdFByb3h5U2V0dGluZ3MoZXh0cmFjdGVkQ3JlZHMucHJveHlVcmkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHBpcGVsaW5lID0gbmV3UGlwZWxpbmUoc2hhcmVkS2V5Q3JlZGVudGlhbCwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBY2NvdW50IGNvbm5lY3Rpb24gc3RyaW5nIGlzIG9ubHkgc3VwcG9ydGVkIGluIE5vZGUuanMgZW52aXJvbm1lbnRcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZXh0cmFjdGVkQ3JlZHMua2luZCA9PT0gXCJTQVNDb25uU3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICB1cmwgPVxuICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb1VSTFBhdGgoYXBwZW5kVG9VUkxQYXRoKGV4dHJhY3RlZENyZWRzLnVybCwgZW5jb2RlVVJJQ29tcG9uZW50KGNvbnRhaW5lck5hbWUpKSwgZW5jb2RlVVJJQ29tcG9uZW50KGJsb2JOYW1lKSkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCI/XCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFjdGVkQ3JlZHMuYWNjb3VudFNhcztcbiAgICAgICAgICAgICAgICBwaXBlbGluZSA9IG5ld1BpcGVsaW5lKG5ldyBBbm9ueW1vdXNDcmVkZW50aWFsKCksIG9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29ubmVjdGlvbiBzdHJpbmcgbXVzdCBiZSBlaXRoZXIgYW4gQWNjb3VudCBjb25uZWN0aW9uIHN0cmluZyBvciBhIFNBUyBjb25uZWN0aW9uIHN0cmluZ1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGluZyBub24tZW1wdHkgc3RyaW5ncyBmb3IgY29udGFpbmVyTmFtZSBhbmQgYmxvYk5hbWUgcGFyYW1ldGVyc1wiKTtcbiAgICAgICAgfVxuICAgICAgICBzdXBlcih1cmwsIHBpcGVsaW5lKTtcbiAgICAgICAgdGhpcy5wYWdlQmxvYkNvbnRleHQgPSB0aGlzLnN0b3JhZ2VDbGllbnRDb250ZXh0LnBhZ2VCbG9iO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IFBhZ2VCbG9iQ2xpZW50IG9iamVjdCBpZGVudGljYWwgdG8gdGhlIHNvdXJjZSBidXQgd2l0aCB0aGVcbiAgICAgKiBzcGVjaWZpZWQgc25hcHNob3QgdGltZXN0YW1wLlxuICAgICAqIFByb3ZpZGUgXCJcIiB3aWxsIHJlbW92ZSB0aGUgc25hcHNob3QgYW5kIHJldHVybiBhIENsaWVudCB0byB0aGUgYmFzZSBibG9iLlxuICAgICAqXG4gICAgICogQHBhcmFtIHNuYXBzaG90IC0gVGhlIHNuYXBzaG90IHRpbWVzdGFtcC5cbiAgICAgKiBAcmV0dXJucyBBIG5ldyBQYWdlQmxvYkNsaWVudCBvYmplY3QgaWRlbnRpY2FsIHRvIHRoZSBzb3VyY2UgYnV0IHdpdGggdGhlIHNwZWNpZmllZCBzbmFwc2hvdCB0aW1lc3RhbXAuXG4gICAgICovXG4gICAgd2l0aFNuYXBzaG90KHNuYXBzaG90KSB7XG4gICAgICAgIHJldHVybiBuZXcgUGFnZUJsb2JDbGllbnQoc2V0VVJMUGFyYW1ldGVyKHRoaXMudXJsLCBVUkxDb25zdGFudHMuUGFyYW1ldGVycy5TTkFQU0hPVCwgc25hcHNob3QubGVuZ3RoID09PSAwID8gdW5kZWZpbmVkIDogc25hcHNob3QpLCB0aGlzLnBpcGVsaW5lKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHBhZ2UgYmxvYiBvZiB0aGUgc3BlY2lmaWVkIGxlbmd0aC4gQ2FsbCB1cGxvYWRQYWdlcyB0byB1cGxvYWQgZGF0YVxuICAgICAqIGRhdGEgdG8gYSBwYWdlIGJsb2IuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvcHV0LWJsb2JcbiAgICAgKlxuICAgICAqIEBwYXJhbSBzaXplIC0gc2l6ZSBvZiB0aGUgcGFnZSBibG9iLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB0aGUgUGFnZSBCbG9iIENyZWF0ZSBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgdGhlIFBhZ2UgQmxvYiBDcmVhdGUgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGNyZWF0ZShzaXplLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0gb3B0aW9ucy5jb25kaXRpb25zIHx8IHt9O1xuICAgICAgICBlbnN1cmVDcGtJZlNwZWNpZmllZChvcHRpb25zLmN1c3RvbWVyUHJvdmlkZWRLZXksIHRoaXMuaXNIdHRwcyk7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiUGFnZUJsb2JDbGllbnQtY3JlYXRlXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5wYWdlQmxvYkNvbnRleHQuY3JlYXRlKDAsIHNpemUsIHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBibG9iSHR0cEhlYWRlcnM6IG9wdGlvbnMuYmxvYkhUVFBIZWFkZXJzLFxuICAgICAgICAgICAgICAgIGJsb2JTZXF1ZW5jZU51bWJlcjogb3B0aW9ucy5ibG9iU2VxdWVuY2VOdW1iZXIsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbWV0YWRhdGE6IG9wdGlvbnMubWV0YWRhdGEsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIGNwa0luZm86IG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSxcbiAgICAgICAgICAgICAgICBlbmNyeXB0aW9uU2NvcGU6IG9wdGlvbnMuZW5jcnlwdGlvblNjb3BlLFxuICAgICAgICAgICAgICAgIGltbXV0YWJpbGl0eVBvbGljeUV4cGlyeTogKF9iID0gb3B0aW9ucy5pbW11dGFiaWxpdHlQb2xpY3kpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5leHBpcmllc09uLFxuICAgICAgICAgICAgICAgIGltbXV0YWJpbGl0eVBvbGljeU1vZGU6IChfYyA9IG9wdGlvbnMuaW1tdXRhYmlsaXR5UG9saWN5KSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MucG9saWN5TW9kZSxcbiAgICAgICAgICAgICAgICBsZWdhbEhvbGQ6IG9wdGlvbnMubGVnYWxIb2xkLFxuICAgICAgICAgICAgICAgIHRpZXI6IHRvQWNjZXNzVGllcihvcHRpb25zLnRpZXIpLFxuICAgICAgICAgICAgICAgIGJsb2JUYWdzU3RyaW5nOiB0b0Jsb2JUYWdzU3RyaW5nKG9wdGlvbnMudGFncyksXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHBhZ2UgYmxvYiBvZiB0aGUgc3BlY2lmaWVkIGxlbmd0aC4gQ2FsbCB1cGxvYWRQYWdlcyB0byB1cGxvYWQgZGF0YVxuICAgICAqIGRhdGEgdG8gYSBwYWdlIGJsb2IuIElmIHRoZSBibG9iIHdpdGggdGhlIHNhbWUgbmFtZSBhbHJlYWR5IGV4aXN0cywgdGhlIGNvbnRlbnRcbiAgICAgKiBvZiB0aGUgZXhpc3RpbmcgYmxvYiB3aWxsIHJlbWFpbiB1bmNoYW5nZWQuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvcHV0LWJsb2JcbiAgICAgKlxuICAgICAqIEBwYXJhbSBzaXplIC0gc2l6ZSBvZiB0aGUgcGFnZSBibG9iLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC1cbiAgICAgKi9cbiAgICBhc3luYyBjcmVhdGVJZk5vdEV4aXN0cyhzaXplLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJQYWdlQmxvYkNsaWVudC1jcmVhdGVJZk5vdEV4aXN0c1wiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbmRpdGlvbnMgPSB7IGlmTm9uZU1hdGNoOiBFVGFnQW55IH07XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzID0gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5jcmVhdGUoc2l6ZSwgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKSwgeyBjb25kaXRpb25zLCB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMgfSkpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHsgc3VjY2VlZGVkOiB0cnVlIH0sIHJlcyksIHsgX3Jlc3BvbnNlOiByZXMuX3Jlc3BvbnNlIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoKChfYSA9IGUuZGV0YWlscykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmVycm9yQ29kZSkgPT09IFwiQmxvYkFscmVhZHlFeGlzdHNcIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHsgc3VjY2VlZGVkOiBmYWxzZSB9LCAoX2IgPSBlLnJlc3BvbnNlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IucGFyc2VkSGVhZGVycyksIHsgX3Jlc3BvbnNlOiBlLnJlc3BvbnNlIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGVzIDEgb3IgbW9yZSBwYWdlcyB0byB0aGUgcGFnZSBibG9iLiBUaGUgc3RhcnQgYW5kIGVuZCBvZmZzZXRzIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA1MTIuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvcHV0LXBhZ2VcbiAgICAgKlxuICAgICAqIEBwYXJhbSBib2R5IC0gRGF0YSB0byB1cGxvYWRcbiAgICAgKiBAcGFyYW0gb2Zmc2V0IC0gT2Zmc2V0IG9mIGRlc3RpbmF0aW9uIHBhZ2UgYmxvYlxuICAgICAqIEBwYXJhbSBjb3VudCAtIENvbnRlbnQgbGVuZ3RoIG9mIHRoZSBib2R5LCBhbHNvIG51bWJlciBvZiBieXRlcyB0byBiZSB1cGxvYWRlZFxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB0aGUgUGFnZSBCbG9iIFVwbG9hZCBQYWdlcyBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgdGhlIFBhZ2UgQmxvYiBVcGxvYWQgUGFnZXMgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIHVwbG9hZFBhZ2VzKGJvZHksIG9mZnNldCwgY291bnQsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIGVuc3VyZUNwa0lmU3BlY2lmaWVkKG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSwgdGhpcy5pc0h0dHBzKTtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJQYWdlQmxvYkNsaWVudC11cGxvYWRQYWdlc1wiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLnBhZ2VCbG9iQ29udGV4dC51cGxvYWRQYWdlcyhjb3VudCwgYm9keSwge1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICByZXF1ZXN0T3B0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICBvblVwbG9hZFByb2dyZXNzOiBvcHRpb25zLm9uUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICByYW5nZTogcmFuZ2VUb1N0cmluZyh7IG9mZnNldCwgY291bnQgfSksXG4gICAgICAgICAgICAgICAgc2VxdWVuY2VOdW1iZXJBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgdHJhbnNhY3Rpb25hbENvbnRlbnRNRDU6IG9wdGlvbnMudHJhbnNhY3Rpb25hbENvbnRlbnRNRDUsXG4gICAgICAgICAgICAgICAgdHJhbnNhY3Rpb25hbENvbnRlbnRDcmM2NDogb3B0aW9ucy50cmFuc2FjdGlvbmFsQ29udGVudENyYzY0LFxuICAgICAgICAgICAgICAgIGNwa0luZm86IG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSxcbiAgICAgICAgICAgICAgICBlbmNyeXB0aW9uU2NvcGU6IG9wdGlvbnMuZW5jcnlwdGlvblNjb3BlLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBVcGxvYWQgUGFnZXMgb3BlcmF0aW9uIHdyaXRlcyBhIHJhbmdlIG9mIHBhZ2VzIHRvIGEgcGFnZSBibG9iIHdoZXJlIHRoZVxuICAgICAqIGNvbnRlbnRzIGFyZSByZWFkIGZyb20gYSBVUkwuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvcHV0LXBhZ2UtZnJvbS11cmxcbiAgICAgKlxuICAgICAqIEBwYXJhbSBzb3VyY2VVUkwgLSBTcGVjaWZ5IGEgVVJMIHRvIHRoZSBjb3B5IHNvdXJjZSwgU2hhcmVkIEFjY2VzcyBTaWduYXR1cmUoU0FTKSBtYXliZSBuZWVkZWQgZm9yIGF1dGhlbnRpY2F0aW9uXG4gICAgICogQHBhcmFtIHNvdXJjZU9mZnNldCAtIFRoZSBzb3VyY2Ugb2Zmc2V0IHRvIGNvcHkgZnJvbS4gUGFzcyAwIHRvIGNvcHkgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHNvdXJjZSBwYWdlIGJsb2JcbiAgICAgKiBAcGFyYW0gZGVzdE9mZnNldCAtIE9mZnNldCBvZiBkZXN0aW5hdGlvbiBwYWdlIGJsb2JcbiAgICAgKiBAcGFyYW0gY291bnQgLSBOdW1iZXIgb2YgYnl0ZXMgdG8gYmUgdXBsb2FkZWQgZnJvbSBzb3VyY2UgcGFnZSBibG9iXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLVxuICAgICAqL1xuICAgIGFzeW5jIHVwbG9hZFBhZ2VzRnJvbVVSTChzb3VyY2VVUkwsIHNvdXJjZU9mZnNldCwgZGVzdE9mZnNldCwgY291bnQsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucyA9IG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucyB8fCB7fTtcbiAgICAgICAgZW5zdXJlQ3BrSWZTcGVjaWZpZWQob3B0aW9ucy5jdXN0b21lclByb3ZpZGVkS2V5LCB0aGlzLmlzSHR0cHMpO1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIlBhZ2VCbG9iQ2xpZW50LXVwbG9hZFBhZ2VzRnJvbVVSTFwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2U7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5wYWdlQmxvYkNvbnRleHQudXBsb2FkUGFnZXNGcm9tVVJMKHNvdXJjZVVSTCwgcmFuZ2VUb1N0cmluZyh7IG9mZnNldDogc291cmNlT2Zmc2V0LCBjb3VudCB9KSwgMCwgcmFuZ2VUb1N0cmluZyh7IG9mZnNldDogZGVzdE9mZnNldCwgY291bnQgfSksIHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBzb3VyY2VDb250ZW50TUQ1OiBvcHRpb25zLnNvdXJjZUNvbnRlbnRNRDUsXG4gICAgICAgICAgICAgICAgc291cmNlQ29udGVudENyYzY0OiBvcHRpb25zLnNvdXJjZUNvbnRlbnRDcmM2NCxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBzZXF1ZW5jZU51bWJlckFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgc291cmNlTW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUlmTWF0Y2g6IChfYiA9IG9wdGlvbnMuc291cmNlQ29uZGl0aW9ucykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmlmTWF0Y2gsXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUlmTW9kaWZpZWRTaW5jZTogKF9jID0gb3B0aW9ucy5zb3VyY2VDb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuaWZNb2RpZmllZFNpbmNlLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VJZk5vbmVNYXRjaDogKF9kID0gb3B0aW9ucy5zb3VyY2VDb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuaWZOb25lTWF0Y2gsXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUlmVW5tb2RpZmllZFNpbmNlOiAoX2UgPSBvcHRpb25zLnNvdXJjZUNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZS5pZlVubW9kaWZpZWRTaW5jZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNwa0luZm86IG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSxcbiAgICAgICAgICAgICAgICBlbmNyeXB0aW9uU2NvcGU6IG9wdGlvbnMuZW5jcnlwdGlvblNjb3BlLFxuICAgICAgICAgICAgICAgIGNvcHlTb3VyY2VBdXRob3JpemF0aW9uOiBodHRwQXV0aG9yaXphdGlvblRvU3RyaW5nKG9wdGlvbnMuc291cmNlQXV0aG9yaXphdGlvbiksXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRnJlZXMgdGhlIHNwZWNpZmllZCBwYWdlcyBmcm9tIHRoZSBwYWdlIGJsb2IuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvcHV0LXBhZ2VcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvZmZzZXQgLSBTdGFydGluZyBieXRlIHBvc2l0aW9uIG9mIHRoZSBwYWdlcyB0byBjbGVhci5cbiAgICAgKiBAcGFyYW0gY291bnQgLSBOdW1iZXIgb2YgYnl0ZXMgdG8gY2xlYXIuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHRoZSBQYWdlIEJsb2IgQ2xlYXIgUGFnZXMgb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIFJlc3BvbnNlIGRhdGEgZm9yIHRoZSBQYWdlIEJsb2IgQ2xlYXIgUGFnZXMgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGNsZWFyUGFnZXMob2Zmc2V0ID0gMCwgY291bnQsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiUGFnZUJsb2JDbGllbnQtY2xlYXJQYWdlc1wiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLnBhZ2VCbG9iQ29udGV4dC5jbGVhclBhZ2VzKDAsIHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgcmFuZ2U6IHJhbmdlVG9TdHJpbmcoeyBvZmZzZXQsIGNvdW50IH0pLFxuICAgICAgICAgICAgICAgIHNlcXVlbmNlTnVtYmVyQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIGNwa0luZm86IG9wdGlvbnMuY3VzdG9tZXJQcm92aWRlZEtleSxcbiAgICAgICAgICAgICAgICBlbmNyeXB0aW9uU2NvcGU6IG9wdGlvbnMuZW5jcnlwdGlvblNjb3BlLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGxpc3Qgb2YgdmFsaWQgcGFnZSByYW5nZXMgZm9yIGEgcGFnZSBibG9iIG9yIHNuYXBzaG90IG9mIGEgcGFnZSBibG9iLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2dldC1wYWdlLXJhbmdlc1xuICAgICAqXG4gICAgICogQHBhcmFtIG9mZnNldCAtIFN0YXJ0aW5nIGJ5dGUgcG9zaXRpb24gb2YgdGhlIHBhZ2UgcmFuZ2VzLlxuICAgICAqIEBwYXJhbSBjb3VudCAtIE51bWJlciBvZiBieXRlcyB0byBnZXQuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHRoZSBQYWdlIEJsb2IgR2V0IFJhbmdlcyBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgdGhlIFBhZ2UgQmxvYiBHZXQgUmFuZ2VzIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBnZXRQYWdlUmFuZ2VzKG9mZnNldCA9IDAsIGNvdW50LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0gb3B0aW9ucy5jb25kaXRpb25zIHx8IHt9O1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIlBhZ2VCbG9iQ2xpZW50LWdldFBhZ2VSYW5nZXNcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMucGFnZUJsb2JDb250ZXh0LmdldFBhZ2VSYW5nZXMoe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICByYW5nZTogcmFuZ2VUb1N0cmluZyh7IG9mZnNldCwgY291bnQgfSksXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgcmV0dXJuIHJhbmdlUmVzcG9uc2VGcm9tTW9kZWwocmVzcG9uc2UpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogZ2V0UGFnZVJhbmdlc1NlZ21lbnQgcmV0dXJucyBhIHNpbmdsZSBzZWdtZW50IG9mIHBhZ2UgcmFuZ2VzIHN0YXJ0aW5nIGZyb20gdGhlXG4gICAgICogc3BlY2lmaWVkIE1hcmtlci4gVXNlIGFuIGVtcHR5IE1hcmtlciB0byBzdGFydCBlbnVtZXJhdGlvbiBmcm9tIHRoZSBiZWdpbm5pbmcuXG4gICAgICogQWZ0ZXIgZ2V0dGluZyBhIHNlZ21lbnQsIHByb2Nlc3MgaXQsIGFuZCB0aGVuIGNhbGwgZ2V0UGFnZVJhbmdlc1NlZ21lbnQgYWdhaW5cbiAgICAgKiAocGFzc2luZyB0aGUgdGhlIHByZXZpb3VzbHktcmV0dXJuZWQgTWFya2VyKSB0byBnZXQgdGhlIG5leHQgc2VnbWVudC5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9nZXQtcGFnZS1yYW5nZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvZmZzZXQgLSBTdGFydGluZyBieXRlIHBvc2l0aW9uIG9mIHRoZSBwYWdlIHJhbmdlcy5cbiAgICAgKiBAcGFyYW0gY291bnQgLSBOdW1iZXIgb2YgYnl0ZXMgdG8gZ2V0LlxuICAgICAqIEBwYXJhbSBtYXJrZXIgLSBBIHN0cmluZyB2YWx1ZSB0aGF0IGlkZW50aWZpZXMgdGhlIHBvcnRpb24gb2YgdGhlIGxpc3QgdG8gYmUgcmV0dXJuZWQgd2l0aCB0aGUgbmV4dCBsaXN0IG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gUGFnZUJsb2IgR2V0IFBhZ2UgUmFuZ2VzIFNlZ21lbnQgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGxpc3RQYWdlUmFuZ2VzU2VnbWVudChvZmZzZXQgPSAwLCBjb3VudCwgbWFya2VyLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJQYWdlQmxvYkNsaWVudC1nZXRQYWdlUmFuZ2VzU2VnbWVudFwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLnBhZ2VCbG9iQ29udGV4dC5nZXRQYWdlUmFuZ2VzKHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgcmFuZ2U6IHJhbmdlVG9TdHJpbmcoeyBvZmZzZXQsIGNvdW50IH0pLFxuICAgICAgICAgICAgICAgIG1hcmtlcjogbWFya2VyLFxuICAgICAgICAgICAgICAgIG1heFBhZ2VTaXplOiBvcHRpb25zLm1heFBhZ2VTaXplLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIGZvciB7QGxpbmsgUGFnZUJsb2JHZXRQYWdlUmFuZ2VzUmVzcG9uc2VNb2RlbH1cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvZmZzZXQgLSBTdGFydGluZyBieXRlIHBvc2l0aW9uIG9mIHRoZSBwYWdlIHJhbmdlcy5cbiAgICAgKiBAcGFyYW0gY291bnQgLSBOdW1iZXIgb2YgYnl0ZXMgdG8gZ2V0LlxuICAgICAqIEBwYXJhbSBtYXJrZXIgLSBBIHN0cmluZyB2YWx1ZSB0aGF0IGlkZW50aWZpZXMgdGhlIHBvcnRpb24gb2ZcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGdldCBvZiBwYWdlIHJhbmdlcyB0byBiZSByZXR1cm5lZCB3aXRoIHRoZSBuZXh0IGdldHRpbmcgb3BlcmF0aW9uLiBUaGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uIHJldHVybnMgdGhlIENvbnRpbnVhdGlvblRva2VuIHZhbHVlIHdpdGhpbiB0aGUgcmVzcG9uc2UgYm9keSBpZiB0aGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0dGluZyBvcGVyYXRpb24gZGlkIG5vdCByZXR1cm4gYWxsIHBhZ2UgcmFuZ2VzIHJlbWFpbmluZyB3aXRoaW4gdGhlIGN1cnJlbnQgcGFnZS5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIENvbnRpbnVhdGlvblRva2VuIHZhbHVlIGNhbiBiZSB1c2VkIGFzIHRoZSB2YWx1ZSBmb3JcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1hcmtlciBwYXJhbWV0ZXIgaW4gYSBzdWJzZXF1ZW50IGNhbGwgdG8gcmVxdWVzdCB0aGUgbmV4dCBwYWdlIG9mIGdldFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy4gVGhlIG1hcmtlciB2YWx1ZSBpcyBvcGFxdWUgdG8gdGhlIGNsaWVudC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gTGlzdCBQYWdlIFJhbmdlcyBvcGVyYXRpb24uXG4gICAgICovXG4gICAgbGlzdFBhZ2VSYW5nZUl0ZW1TZWdtZW50cygpIHtcbiAgICAgICAgcmV0dXJuIHRzbGliLl9fYXN5bmNHZW5lcmF0b3IodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiogbGlzdFBhZ2VSYW5nZUl0ZW1TZWdtZW50c18xKG9mZnNldCA9IDAsIGNvdW50LCBtYXJrZXIsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICAgICAgbGV0IGdldFBhZ2VSYW5nZUl0ZW1TZWdtZW50c1Jlc3BvbnNlO1xuICAgICAgICAgICAgaWYgKCEhbWFya2VyIHx8IG1hcmtlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICBnZXRQYWdlUmFuZ2VJdGVtU2VnbWVudHNSZXNwb25zZSA9IHlpZWxkIHRzbGliLl9fYXdhaXQodGhpcy5saXN0UGFnZVJhbmdlc1NlZ21lbnQob2Zmc2V0LCBjb3VudCwgbWFya2VyLCBvcHRpb25zKSk7XG4gICAgICAgICAgICAgICAgICAgIG1hcmtlciA9IGdldFBhZ2VSYW5nZUl0ZW1TZWdtZW50c1Jlc3BvbnNlLmNvbnRpbnVhdGlvblRva2VuO1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCB5aWVsZCB0c2xpYi5fX2F3YWl0KHlpZWxkIHRzbGliLl9fYXdhaXQoZ2V0UGFnZVJhbmdlSXRlbVNlZ21lbnRzUmVzcG9uc2UpKTtcbiAgICAgICAgICAgICAgICB9IHdoaWxlIChtYXJrZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBBc3luY0l0ZXJhYmxlSXRlcmF0b3Igb2Yge0BsaW5rIFBhZ2VSYW5nZUluZm99IG9iamVjdHNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvZmZzZXQgLSBTdGFydGluZyBieXRlIHBvc2l0aW9uIG9mIHRoZSBwYWdlIHJhbmdlcy5cbiAgICAgKiBAcGFyYW0gY291bnQgLSBOdW1iZXIgb2YgYnl0ZXMgdG8gZ2V0LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBMaXN0IFBhZ2UgUmFuZ2VzIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBsaXN0UGFnZVJhbmdlSXRlbXMoKSB7XG4gICAgICAgIHJldHVybiB0c2xpYi5fX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24qIGxpc3RQYWdlUmFuZ2VJdGVtc18xKG9mZnNldCA9IDAsIGNvdW50LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgICAgIHZhciBfYSwgZV8xLCBfYiwgX2M7XG4gICAgICAgICAgICBsZXQgbWFya2VyO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBfZCA9IHRydWUsIF9lID0gdHNsaWIuX19hc3luY1ZhbHVlcyh0aGlzLmxpc3RQYWdlUmFuZ2VJdGVtU2VnbWVudHMob2Zmc2V0LCBjb3VudCwgbWFya2VyLCBvcHRpb25zKSksIF9mOyBfZiA9IHlpZWxkIHRzbGliLl9fYXdhaXQoX2UubmV4dCgpKSwgX2EgPSBfZi5kb25lLCAhX2E7IF9kID0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICBfYyA9IF9mLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBfZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBnZXRQYWdlUmFuZ2VzU2VnbWVudCA9IF9jO1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCB0c2xpYi5fX2F3YWl0KHlpZWxkKiB0c2xpYi5fX2FzeW5jRGVsZWdhdG9yKHRzbGliLl9fYXN5bmNWYWx1ZXMoRXh0cmFjdFBhZ2VSYW5nZUluZm9JdGVtcyhnZXRQYWdlUmFuZ2VzU2VnbWVudCkpKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghX2QgJiYgIV9hICYmIChfYiA9IF9lLnJldHVybikpIHlpZWxkIHRzbGliLl9fYXdhaXQoX2IuY2FsbChfZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIGFzeW5jIGl0ZXJhYmxlIGl0ZXJhdG9yIHRvIGxpc3Qgb2YgcGFnZSByYW5nZXMgZm9yIGEgcGFnZSBibG9iLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2dldC1wYWdlLXJhbmdlc1xuICAgICAqXG4gICAgICogIC5ieVBhZ2UoKSByZXR1cm5zIGFuIGFzeW5jIGl0ZXJhYmxlIGl0ZXJhdG9yIHRvIGxpc3Qgb2YgcGFnZSByYW5nZXMgZm9yIGEgcGFnZSBibG9iLlxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBgZm9yIGF3YWl0YCBzeW50YXg6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIEdldCB0aGUgcGFnZUJsb2JDbGllbnQgYmVmb3JlIHlvdSBydW4gdGhlc2Ugc25pcHBldHMsXG4gICAgICogLy8gQ2FuIGJlIG9idGFpbmVkIGZyb20gYGJsb2JTZXJ2aWNlQ2xpZW50LmdldENvbnRhaW5lckNsaWVudChcIjx5b3VyLWNvbnRhaW5lci1uYW1lPlwiKS5nZXRQYWdlQmxvYkNsaWVudChcIjx5b3VyLWJsb2ItbmFtZT5cIik7YFxuICAgICAqIGxldCBpID0gMTtcbiAgICAgKiBmb3IgYXdhaXQgKGNvbnN0IHBhZ2VSYW5nZSBvZiBwYWdlQmxvYkNsaWVudC5saXN0UGFnZVJhbmdlcygpKSB7XG4gICAgICogICBjb25zb2xlLmxvZyhgUGFnZSByYW5nZSAke2krK306ICR7cGFnZVJhbmdlLnN0YXJ0fSAtICR7cGFnZVJhbmdlLmVuZH1gKTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIGBpdGVyLm5leHQoKWA6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGxldCBpID0gMTtcbiAgICAgKiBsZXQgaXRlciA9IHBhZ2VCbG9iQ2xpZW50Lmxpc3RQYWdlUmFuZ2VzKCk7XG4gICAgICogbGV0IHBhZ2VSYW5nZUl0ZW0gPSBhd2FpdCBpdGVyLm5leHQoKTtcbiAgICAgKiB3aGlsZSAoIXBhZ2VSYW5nZUl0ZW0uZG9uZSkge1xuICAgICAqICAgY29uc29sZS5sb2coYFBhZ2UgcmFuZ2UgJHtpKyt9OiAke3BhZ2VSYW5nZUl0ZW0udmFsdWUuc3RhcnR9IC0gJHtwYWdlUmFuZ2VJdGVtLnZhbHVlLmVuZH0sIElzQ2xlYXI6ICR7cGFnZVJhbmdlSXRlbS52YWx1ZS5pc0NsZWFyfWApO1xuICAgICAqICAgcGFnZVJhbmdlSXRlbSA9IGF3YWl0IGl0ZXIubmV4dCgpO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNpbmcgYGJ5UGFnZSgpYDpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogLy8gcGFzc2luZyBvcHRpb25hbCBtYXhQYWdlU2l6ZSBpbiB0aGUgcGFnZSBzZXR0aW5nc1xuICAgICAqIGxldCBpID0gMTtcbiAgICAgKiBmb3IgYXdhaXQgKGNvbnN0IHJlc3BvbnNlIG9mIHBhZ2VCbG9iQ2xpZW50Lmxpc3RQYWdlUmFuZ2VzKCkuYnlQYWdlKHsgbWF4UGFnZVNpemU6IDIwIH0pKSB7XG4gICAgICogICBmb3IgKGNvbnN0IHBhZ2VSYW5nZSBvZiByZXNwb25zZSkge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhgUGFnZSByYW5nZSAke2krK306ICR7cGFnZVJhbmdlLnN0YXJ0fSAtICR7cGFnZVJhbmdlLmVuZH1gKTtcbiAgICAgKiAgIH1cbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIHBhZ2luZyB3aXRoIGEgbWFya2VyOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBsZXQgaSA9IDE7XG4gICAgICogbGV0IGl0ZXJhdG9yID0gcGFnZUJsb2JDbGllbnQubGlzdFBhZ2VSYW5nZXMoKS5ieVBhZ2UoeyBtYXhQYWdlU2l6ZTogMiB9KTtcbiAgICAgKiBsZXQgcmVzcG9uc2UgPSAoYXdhaXQgaXRlcmF0b3IubmV4dCgpKS52YWx1ZTtcbiAgICAgKlxuICAgICAqIC8vIFByaW50cyAyIHBhZ2UgcmFuZ2VzXG4gICAgICogZm9yIChjb25zdCBwYWdlUmFuZ2Ugb2YgcmVzcG9uc2UpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKGBQYWdlIHJhbmdlICR7aSsrfTogJHtwYWdlUmFuZ2Uuc3RhcnR9IC0gJHtwYWdlUmFuZ2UuZW5kfWApO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIC8vIEdldHMgbmV4dCBtYXJrZXJcbiAgICAgKiBsZXQgbWFya2VyID0gcmVzcG9uc2UuY29udGludWF0aW9uVG9rZW47XG4gICAgICpcbiAgICAgKiAvLyBQYXNzaW5nIG5leHQgbWFya2VyIGFzIGNvbnRpbnVhdGlvblRva2VuXG4gICAgICpcbiAgICAgKiBpdGVyYXRvciA9IHBhZ2VCbG9iQ2xpZW50Lmxpc3RQYWdlUmFuZ2VzKCkuYnlQYWdlKHsgY29udGludWF0aW9uVG9rZW46IG1hcmtlciwgbWF4UGFnZVNpemU6IDEwIH0pO1xuICAgICAqIHJlc3BvbnNlID0gKGF3YWl0IGl0ZXJhdG9yLm5leHQoKSkudmFsdWU7XG4gICAgICpcbiAgICAgKiAvLyBQcmludHMgMTAgcGFnZSByYW5nZXNcbiAgICAgKiBmb3IgKGNvbnN0IGJsb2Igb2YgcmVzcG9uc2UpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKGBQYWdlIHJhbmdlICR7aSsrfTogJHtwYWdlUmFuZ2Uuc3RhcnR9IC0gJHtwYWdlUmFuZ2UuZW5kfWApO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKiBAcGFyYW0gb2Zmc2V0IC0gU3RhcnRpbmcgYnl0ZSBwb3NpdGlvbiBvZiB0aGUgcGFnZSByYW5nZXMuXG4gICAgICogQHBhcmFtIGNvdW50IC0gTnVtYmVyIG9mIGJ5dGVzIHRvIGdldC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gdGhlIFBhZ2UgQmxvYiBHZXQgUmFuZ2VzIG9wZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyBBbiBhc3luY0l0ZXJhYmxlSXRlcmF0b3IgdGhhdCBzdXBwb3J0cyBwYWdpbmcuXG4gICAgICovXG4gICAgbGlzdFBhZ2VSYW5nZXMob2Zmc2V0ID0gMCwgY291bnQsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIC8vIEFzeW5jSXRlcmFibGVJdGVyYXRvciB0byBpdGVyYXRlIG92ZXIgYmxvYnNcbiAgICAgICAgY29uc3QgaXRlciA9IHRoaXMubGlzdFBhZ2VSYW5nZUl0ZW1zKG9mZnNldCwgY291bnQsIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBUaGUgbmV4dCBtZXRob2QsIHBhcnQgb2YgdGhlIGl0ZXJhdGlvbiBwcm90b2NvbFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBuZXh0KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVyLm5leHQoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFRoZSBjb25uZWN0aW9uIHRvIHRoZSBhc3luYyBpdGVyYXRvciwgcGFydCBvZiB0aGUgaXRlcmF0aW9uIHByb3RvY29sXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBSZXR1cm4gYW4gQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIHRoYXQgd29ya3MgYSBwYWdlIGF0IGEgdGltZVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBieVBhZ2U6IChzZXR0aW5ncyA9IHt9KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubGlzdFBhZ2VSYW5nZUl0ZW1TZWdtZW50cyhvZmZzZXQsIGNvdW50LCBzZXR0aW5ncy5jb250aW51YXRpb25Ub2tlbiwgT2JqZWN0LmFzc2lnbih7IG1heFBhZ2VTaXplOiBzZXR0aW5ncy5tYXhQYWdlU2l6ZSB9LCBvcHRpb25zKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBjb2xsZWN0aW9uIG9mIHBhZ2UgcmFuZ2VzIHRoYXQgZGlmZmVyIGJldHdlZW4gYSBzcGVjaWZpZWQgc25hcHNob3QgYW5kIHRoaXMgcGFnZSBibG9iLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2dldC1wYWdlLXJhbmdlc1xuICAgICAqXG4gICAgICogQHBhcmFtIG9mZnNldCAtIFN0YXJ0aW5nIGJ5dGUgcG9zaXRpb24gb2YgdGhlIHBhZ2UgYmxvYlxuICAgICAqIEBwYXJhbSBjb3VudCAtIE51bWJlciBvZiBieXRlcyB0byBnZXQgcmFuZ2VzIGRpZmYuXG4gICAgICogQHBhcmFtIHByZXZTbmFwc2hvdCAtIFRpbWVzdGFtcCBvZiBzbmFwc2hvdCB0byByZXRyaWV2ZSB0aGUgZGlmZmVyZW5jZS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gdGhlIFBhZ2UgQmxvYiBHZXQgUGFnZSBSYW5nZXMgRGlmZiBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgdGhlIFBhZ2UgQmxvYiBHZXQgUGFnZSBSYW5nZSBEaWZmIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBnZXRQYWdlUmFuZ2VzRGlmZihvZmZzZXQsIGNvdW50LCBwcmV2U25hcHNob3QsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiUGFnZUJsb2JDbGllbnQtZ2V0UGFnZVJhbmdlc0RpZmZcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLnBhZ2VCbG9iQ29udGV4dC5nZXRQYWdlUmFuZ2VzRGlmZih7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIHByZXZzbmFwc2hvdDogcHJldlNuYXBzaG90LFxuICAgICAgICAgICAgICAgIHJhbmdlOiByYW5nZVRvU3RyaW5nKHsgb2Zmc2V0LCBjb3VudCB9KSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICByZXR1cm4gcmFuZ2VSZXNwb25zZUZyb21Nb2RlbChyZXN1bHQpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogZ2V0UGFnZVJhbmdlc0RpZmZTZWdtZW50IHJldHVybnMgYSBzaW5nbGUgc2VnbWVudCBvZiBwYWdlIHJhbmdlcyBzdGFydGluZyBmcm9tIHRoZVxuICAgICAqIHNwZWNpZmllZCBNYXJrZXIgZm9yIGRpZmZlcmVuY2UgYmV0d2VlbiBwcmV2aW91cyBzbmFwc2hvdCBhbmQgdGhlIHRhcmdldCBwYWdlIGJsb2IuXG4gICAgICogVXNlIGFuIGVtcHR5IE1hcmtlciB0byBzdGFydCBlbnVtZXJhdGlvbiBmcm9tIHRoZSBiZWdpbm5pbmcuXG4gICAgICogQWZ0ZXIgZ2V0dGluZyBhIHNlZ21lbnQsIHByb2Nlc3MgaXQsIGFuZCB0aGVuIGNhbGwgZ2V0UGFnZVJhbmdlc0RpZmZTZWdtZW50IGFnYWluXG4gICAgICogKHBhc3NpbmcgdGhlIHRoZSBwcmV2aW91c2x5LXJldHVybmVkIE1hcmtlcikgdG8gZ2V0IHRoZSBuZXh0IHNlZ21lbnQuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvZ2V0LXBhZ2UtcmFuZ2VzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb2Zmc2V0IC0gU3RhcnRpbmcgYnl0ZSBwb3NpdGlvbiBvZiB0aGUgcGFnZSByYW5nZXMuXG4gICAgICogQHBhcmFtIGNvdW50IC0gTnVtYmVyIG9mIGJ5dGVzIHRvIGdldC5cbiAgICAgKiBAcGFyYW0gcHJldlNuYXBzaG90T3JVcmwgLSBUaW1lc3RhbXAgb2Ygc25hcHNob3QgdG8gcmV0cmlldmUgdGhlIGRpZmZlcmVuY2Ugb3IgVVJMIG9mIHNuYXBzaG90IHRvIHJldHJpZXZlIHRoZSBkaWZmZXJlbmNlLlxuICAgICAqIEBwYXJhbSBtYXJrZXIgLSBBIHN0cmluZyB2YWx1ZSB0aGF0IGlkZW50aWZpZXMgdGhlIHBvcnRpb24gb2YgdGhlIGdldCB0byBiZSByZXR1cm5lZCB3aXRoIHRoZSBuZXh0IGdldCBvcGVyYXRpb24uXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHRoZSBQYWdlIEJsb2IgR2V0IFBhZ2UgUmFuZ2VzIERpZmYgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGxpc3RQYWdlUmFuZ2VzRGlmZlNlZ21lbnQob2Zmc2V0LCBjb3VudCwgcHJldlNuYXBzaG90T3JVcmwsIG1hcmtlciwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiUGFnZUJsb2JDbGllbnQtZ2V0UGFnZVJhbmdlc0RpZmZTZWdtZW50XCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMucGFnZUJsb2JDb250ZXh0LmdldFBhZ2VSYW5nZXNEaWZmKHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICBwcmV2c25hcHNob3Q6IHByZXZTbmFwc2hvdE9yVXJsLFxuICAgICAgICAgICAgICAgIHJhbmdlOiByYW5nZVRvU3RyaW5nKHtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiBvZmZzZXQsXG4gICAgICAgICAgICAgICAgICAgIGNvdW50OiBjb3VudCxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBtYXJrZXI6IG1hcmtlcixcbiAgICAgICAgICAgICAgICBtYXhQYWdlU2l6ZTogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLm1heFBhZ2VTaXplLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIGZvciB7QGxpbmsgUGFnZUJsb2JHZXRQYWdlUmFuZ2VzRGlmZlJlc3BvbnNlTW9kZWx9XG4gICAgICpcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvZmZzZXQgLSBTdGFydGluZyBieXRlIHBvc2l0aW9uIG9mIHRoZSBwYWdlIHJhbmdlcy5cbiAgICAgKiBAcGFyYW0gY291bnQgLSBOdW1iZXIgb2YgYnl0ZXMgdG8gZ2V0LlxuICAgICAqIEBwYXJhbSBwcmV2U25hcHNob3RPclVybCAtIFRpbWVzdGFtcCBvZiBzbmFwc2hvdCB0byByZXRyaWV2ZSB0aGUgZGlmZmVyZW5jZSBvciBVUkwgb2Ygc25hcHNob3QgdG8gcmV0cmlldmUgdGhlIGRpZmZlcmVuY2UuXG4gICAgICogQHBhcmFtIG1hcmtlciAtIEEgc3RyaW5nIHZhbHVlIHRoYXQgaWRlbnRpZmllcyB0aGUgcG9ydGlvbiBvZlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZ2V0IG9mIHBhZ2UgcmFuZ2VzIHRvIGJlIHJldHVybmVkIHdpdGggdGhlIG5leHQgZ2V0dGluZyBvcGVyYXRpb24uIFRoZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gcmV0dXJucyB0aGUgQ29udGludWF0aW9uVG9rZW4gdmFsdWUgd2l0aGluIHRoZSByZXNwb25zZSBib2R5IGlmIHRoZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBnZXR0aW5nIG9wZXJhdGlvbiBkaWQgbm90IHJldHVybiBhbGwgcGFnZSByYW5nZXMgcmVtYWluaW5nIHdpdGhpbiB0aGUgY3VycmVudCBwYWdlLlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgQ29udGludWF0aW9uVG9rZW4gdmFsdWUgY2FuIGJlIHVzZWQgYXMgdGhlIHZhbHVlIGZvclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWFya2VyIHBhcmFtZXRlciBpbiBhIHN1YnNlcXVlbnQgY2FsbCB0byByZXF1ZXN0IHRoZSBuZXh0IHBhZ2Ugb2YgZ2V0XG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLiBUaGUgbWFya2VyIHZhbHVlIGlzIG9wYXF1ZSB0byB0aGUgY2xpZW50LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB0aGUgUGFnZSBCbG9iIEdldCBQYWdlIFJhbmdlcyBEaWZmIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBsaXN0UGFnZVJhbmdlRGlmZkl0ZW1TZWdtZW50cyhvZmZzZXQsIGNvdW50LCBwcmV2U25hcHNob3RPclVybCwgbWFya2VyLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0c2xpYi5fX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24qIGxpc3RQYWdlUmFuZ2VEaWZmSXRlbVNlZ21lbnRzXzEoKSB7XG4gICAgICAgICAgICBsZXQgZ2V0UGFnZVJhbmdlSXRlbVNlZ21lbnRzUmVzcG9uc2U7XG4gICAgICAgICAgICBpZiAoISFtYXJrZXIgfHwgbWFya2VyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgIGdldFBhZ2VSYW5nZUl0ZW1TZWdtZW50c1Jlc3BvbnNlID0geWllbGQgdHNsaWIuX19hd2FpdCh0aGlzLmxpc3RQYWdlUmFuZ2VzRGlmZlNlZ21lbnQob2Zmc2V0LCBjb3VudCwgcHJldlNuYXBzaG90T3JVcmwsIG1hcmtlciwgb3B0aW9ucykpO1xuICAgICAgICAgICAgICAgICAgICBtYXJrZXIgPSBnZXRQYWdlUmFuZ2VJdGVtU2VnbWVudHNSZXNwb25zZS5jb250aW51YXRpb25Ub2tlbjtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgeWllbGQgdHNsaWIuX19hd2FpdCh5aWVsZCB0c2xpYi5fX2F3YWl0KGdldFBhZ2VSYW5nZUl0ZW1TZWdtZW50c1Jlc3BvbnNlKSk7XG4gICAgICAgICAgICAgICAgfSB3aGlsZSAobWFya2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIG9mIHtAbGluayBQYWdlUmFuZ2VJbmZvfSBvYmplY3RzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb2Zmc2V0IC0gU3RhcnRpbmcgYnl0ZSBwb3NpdGlvbiBvZiB0aGUgcGFnZSByYW5nZXMuXG4gICAgICogQHBhcmFtIGNvdW50IC0gTnVtYmVyIG9mIGJ5dGVzIHRvIGdldC5cbiAgICAgKiBAcGFyYW0gcHJldlNuYXBzaG90T3JVcmwgLSBUaW1lc3RhbXAgb2Ygc25hcHNob3QgdG8gcmV0cmlldmUgdGhlIGRpZmZlcmVuY2Ugb3IgVVJMIG9mIHNuYXBzaG90IHRvIHJldHJpZXZlIHRoZSBkaWZmZXJlbmNlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB0aGUgUGFnZSBCbG9iIEdldCBQYWdlIFJhbmdlcyBEaWZmIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBsaXN0UGFnZVJhbmdlRGlmZkl0ZW1zKG9mZnNldCwgY291bnQsIHByZXZTbmFwc2hvdE9yVXJsLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0c2xpYi5fX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24qIGxpc3RQYWdlUmFuZ2VEaWZmSXRlbXNfMSgpIHtcbiAgICAgICAgICAgIHZhciBfYSwgZV8yLCBfYiwgX2M7XG4gICAgICAgICAgICBsZXQgbWFya2VyO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBfZCA9IHRydWUsIF9lID0gdHNsaWIuX19hc3luY1ZhbHVlcyh0aGlzLmxpc3RQYWdlUmFuZ2VEaWZmSXRlbVNlZ21lbnRzKG9mZnNldCwgY291bnQsIHByZXZTbmFwc2hvdE9yVXJsLCBtYXJrZXIsIG9wdGlvbnMpKSwgX2Y7IF9mID0geWllbGQgdHNsaWIuX19hd2FpdChfZS5uZXh0KCkpLCBfYSA9IF9mLmRvbmUsICFfYTsgX2QgPSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgIF9jID0gX2YudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIF9kID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGdldFBhZ2VSYW5nZXNTZWdtZW50ID0gX2M7XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIHRzbGliLl9fYXdhaXQoeWllbGQqIHRzbGliLl9fYXN5bmNEZWxlZ2F0b3IodHNsaWIuX19hc3luY1ZhbHVlcyhFeHRyYWN0UGFnZVJhbmdlSW5mb0l0ZW1zKGdldFBhZ2VSYW5nZXNTZWdtZW50KSkpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZV8yXzEpIHsgZV8yID0geyBlcnJvcjogZV8yXzEgfTsgfVxuICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFfZCAmJiAhX2EgJiYgKF9iID0gX2UucmV0dXJuKSkgeWllbGQgdHNsaWIuX19hd2FpdChfYi5jYWxsKF9lKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8yKSB0aHJvdyBlXzIuZXJyb3I7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gYXN5bmMgaXRlcmFibGUgaXRlcmF0b3IgdG8gbGlzdCBvZiBwYWdlIHJhbmdlcyB0aGF0IGRpZmZlciBiZXR3ZWVuIGEgc3BlY2lmaWVkIHNuYXBzaG90IGFuZCB0aGlzIHBhZ2UgYmxvYi5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9nZXQtcGFnZS1yYW5nZXNcbiAgICAgKlxuICAgICAqICAuYnlQYWdlKCkgcmV0dXJucyBhbiBhc3luYyBpdGVyYWJsZSBpdGVyYXRvciB0byBsaXN0IG9mIHBhZ2UgcmFuZ2VzIHRoYXQgZGlmZmVyIGJldHdlZW4gYSBzcGVjaWZpZWQgc25hcHNob3QgYW5kIHRoaXMgcGFnZSBibG9iLlxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBgZm9yIGF3YWl0YCBzeW50YXg6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIEdldCB0aGUgcGFnZUJsb2JDbGllbnQgYmVmb3JlIHlvdSBydW4gdGhlc2Ugc25pcHBldHMsXG4gICAgICogLy8gQ2FuIGJlIG9idGFpbmVkIGZyb20gYGJsb2JTZXJ2aWNlQ2xpZW50LmdldENvbnRhaW5lckNsaWVudChcIjx5b3VyLWNvbnRhaW5lci1uYW1lPlwiKS5nZXRQYWdlQmxvYkNsaWVudChcIjx5b3VyLWJsb2ItbmFtZT5cIik7YFxuICAgICAqIGxldCBpID0gMTtcbiAgICAgKiBmb3IgYXdhaXQgKGNvbnN0IHBhZ2VSYW5nZSBvZiBwYWdlQmxvYkNsaWVudC5saXN0UGFnZVJhbmdlc0RpZmYoKSkge1xuICAgICAqICAgY29uc29sZS5sb2coYFBhZ2UgcmFuZ2UgJHtpKyt9OiAke3BhZ2VSYW5nZS5zdGFydH0gLSAke3BhZ2VSYW5nZS5lbmR9YCk7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBgaXRlci5uZXh0KClgOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBsZXQgaSA9IDE7XG4gICAgICogbGV0IGl0ZXIgPSBwYWdlQmxvYkNsaWVudC5saXN0UGFnZVJhbmdlc0RpZmYoKTtcbiAgICAgKiBsZXQgcGFnZVJhbmdlSXRlbSA9IGF3YWl0IGl0ZXIubmV4dCgpO1xuICAgICAqIHdoaWxlICghcGFnZVJhbmdlSXRlbS5kb25lKSB7XG4gICAgICogICBjb25zb2xlLmxvZyhgUGFnZSByYW5nZSAke2krK306ICR7cGFnZVJhbmdlSXRlbS52YWx1ZS5zdGFydH0gLSAke3BhZ2VSYW5nZUl0ZW0udmFsdWUuZW5kfSwgSXNDbGVhcjogJHtwYWdlUmFuZ2VJdGVtLnZhbHVlLmlzQ2xlYXJ9YCk7XG4gICAgICogICBwYWdlUmFuZ2VJdGVtID0gYXdhaXQgaXRlci5uZXh0KCk7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBgYnlQYWdlKClgOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiAvLyBwYXNzaW5nIG9wdGlvbmFsIG1heFBhZ2VTaXplIGluIHRoZSBwYWdlIHNldHRpbmdzXG4gICAgICogbGV0IGkgPSAxO1xuICAgICAqIGZvciBhd2FpdCAoY29uc3QgcmVzcG9uc2Ugb2YgcGFnZUJsb2JDbGllbnQubGlzdFBhZ2VSYW5nZXNEaWZmKCkuYnlQYWdlKHsgbWF4UGFnZVNpemU6IDIwIH0pKSB7XG4gICAgICogICBmb3IgKGNvbnN0IHBhZ2VSYW5nZSBvZiByZXNwb25zZSkge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhgUGFnZSByYW5nZSAke2krK306ICR7cGFnZVJhbmdlLnN0YXJ0fSAtICR7cGFnZVJhbmdlLmVuZH1gKTtcbiAgICAgKiAgIH1cbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIHBhZ2luZyB3aXRoIGEgbWFya2VyOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBsZXQgaSA9IDE7XG4gICAgICogbGV0IGl0ZXJhdG9yID0gcGFnZUJsb2JDbGllbnQubGlzdFBhZ2VSYW5nZXNEaWZmKCkuYnlQYWdlKHsgbWF4UGFnZVNpemU6IDIgfSk7XG4gICAgICogbGV0IHJlc3BvbnNlID0gKGF3YWl0IGl0ZXJhdG9yLm5leHQoKSkudmFsdWU7XG4gICAgICpcbiAgICAgKiAvLyBQcmludHMgMiBwYWdlIHJhbmdlc1xuICAgICAqIGZvciAoY29uc3QgcGFnZVJhbmdlIG9mIHJlc3BvbnNlKSB7XG4gICAgICogICBjb25zb2xlLmxvZyhgUGFnZSByYW5nZSAke2krK306ICR7cGFnZVJhbmdlLnN0YXJ0fSAtICR7cGFnZVJhbmdlLmVuZH1gKTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBHZXRzIG5leHQgbWFya2VyXG4gICAgICogbGV0IG1hcmtlciA9IHJlc3BvbnNlLmNvbnRpbnVhdGlvblRva2VuO1xuICAgICAqXG4gICAgICogLy8gUGFzc2luZyBuZXh0IG1hcmtlciBhcyBjb250aW51YXRpb25Ub2tlblxuICAgICAqXG4gICAgICogaXRlcmF0b3IgPSBwYWdlQmxvYkNsaWVudC5saXN0UGFnZVJhbmdlc0RpZmYoKS5ieVBhZ2UoeyBjb250aW51YXRpb25Ub2tlbjogbWFya2VyLCBtYXhQYWdlU2l6ZTogMTAgfSk7XG4gICAgICogcmVzcG9uc2UgPSAoYXdhaXQgaXRlcmF0b3IubmV4dCgpKS52YWx1ZTtcbiAgICAgKlxuICAgICAqIC8vIFByaW50cyAxMCBwYWdlIHJhbmdlc1xuICAgICAqIGZvciAoY29uc3QgYmxvYiBvZiByZXNwb25zZSkge1xuICAgICAqICAgY29uc29sZS5sb2coYFBhZ2UgcmFuZ2UgJHtpKyt9OiAke3BhZ2VSYW5nZS5zdGFydH0gLSAke3BhZ2VSYW5nZS5lbmR9YCk7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqIEBwYXJhbSBvZmZzZXQgLSBTdGFydGluZyBieXRlIHBvc2l0aW9uIG9mIHRoZSBwYWdlIHJhbmdlcy5cbiAgICAgKiBAcGFyYW0gY291bnQgLSBOdW1iZXIgb2YgYnl0ZXMgdG8gZ2V0LlxuICAgICAqIEBwYXJhbSBwcmV2U25hcHNob3QgLSBUaW1lc3RhbXAgb2Ygc25hcHNob3QgdG8gcmV0cmlldmUgdGhlIGRpZmZlcmVuY2UuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHRoZSBQYWdlIEJsb2IgR2V0IFJhbmdlcyBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgQW4gYXN5bmNJdGVyYWJsZUl0ZXJhdG9yIHRoYXQgc3VwcG9ydHMgcGFnaW5nLlxuICAgICAqL1xuICAgIGxpc3RQYWdlUmFuZ2VzRGlmZihvZmZzZXQsIGNvdW50LCBwcmV2U25hcHNob3QsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSBvcHRpb25zLmNvbmRpdGlvbnMgfHwge307XG4gICAgICAgIC8vIEFzeW5jSXRlcmFibGVJdGVyYXRvciB0byBpdGVyYXRlIG92ZXIgYmxvYnNcbiAgICAgICAgY29uc3QgaXRlciA9IHRoaXMubGlzdFBhZ2VSYW5nZURpZmZJdGVtcyhvZmZzZXQsIGNvdW50LCBwcmV2U25hcHNob3QsIE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVGhlIG5leHQgbWV0aG9kLCBwYXJ0IG9mIHRoZSBpdGVyYXRpb24gcHJvdG9jb2xcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgbmV4dCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlci5uZXh0KCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBUaGUgY29ubmVjdGlvbiB0byB0aGUgYXN5bmMgaXRlcmF0b3IsIHBhcnQgb2YgdGhlIGl0ZXJhdGlvbiBwcm90b2NvbFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogUmV0dXJuIGFuIEFzeW5jSXRlcmFibGVJdGVyYXRvciB0aGF0IHdvcmtzIGEgcGFnZSBhdCBhIHRpbWVcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgYnlQYWdlOiAoc2V0dGluZ3MgPSB7fSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxpc3RQYWdlUmFuZ2VEaWZmSXRlbVNlZ21lbnRzKG9mZnNldCwgY291bnQsIHByZXZTbmFwc2hvdCwgc2V0dGluZ3MuY29udGludWF0aW9uVG9rZW4sIE9iamVjdC5hc3NpZ24oeyBtYXhQYWdlU2l6ZTogc2V0dGluZ3MubWF4UGFnZVNpemUgfSwgb3B0aW9ucykpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgY29sbGVjdGlvbiBvZiBwYWdlIHJhbmdlcyB0aGF0IGRpZmZlciBiZXR3ZWVuIGEgc3BlY2lmaWVkIHNuYXBzaG90IGFuZCB0aGlzIHBhZ2UgYmxvYiBmb3IgbWFuYWdlZCBkaXNrcy5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9nZXQtcGFnZS1yYW5nZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvZmZzZXQgLSBTdGFydGluZyBieXRlIHBvc2l0aW9uIG9mIHRoZSBwYWdlIGJsb2JcbiAgICAgKiBAcGFyYW0gY291bnQgLSBOdW1iZXIgb2YgYnl0ZXMgdG8gZ2V0IHJhbmdlcyBkaWZmLlxuICAgICAqIEBwYXJhbSBwcmV2U25hcHNob3RVcmwgLSBVUkwgb2Ygc25hcHNob3QgdG8gcmV0cmlldmUgdGhlIGRpZmZlcmVuY2UuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHRoZSBQYWdlIEJsb2IgR2V0IFBhZ2UgUmFuZ2VzIERpZmYgb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIFJlc3BvbnNlIGRhdGEgZm9yIHRoZSBQYWdlIEJsb2IgR2V0IFBhZ2UgUmFuZ2UgRGlmZiBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgZ2V0UGFnZVJhbmdlc0RpZmZGb3JNYW5hZ2VkRGlza3Mob2Zmc2V0LCBjb3VudCwgcHJldlNuYXBzaG90VXJsLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0gb3B0aW9ucy5jb25kaXRpb25zIHx8IHt9O1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIlBhZ2VCbG9iQ2xpZW50LUdldFBhZ2VSYW5nZXNEaWZmRm9yTWFuYWdlZERpc2tzXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLnBhZ2VCbG9iQ29udGV4dC5nZXRQYWdlUmFuZ2VzRGlmZih7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIHByZXZTbmFwc2hvdFVybCxcbiAgICAgICAgICAgICAgICByYW5nZTogcmFuZ2VUb1N0cmluZyh7IG9mZnNldCwgY291bnQgfSksXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgcmV0dXJuIHJhbmdlUmVzcG9uc2VGcm9tTW9kZWwocmVzcG9uc2UpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVzaXplcyB0aGUgcGFnZSBibG9iIHRvIHRoZSBzcGVjaWZpZWQgc2l6ZSAod2hpY2ggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDUxMikuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvc2V0LWJsb2ItcHJvcGVydGllc1xuICAgICAqXG4gICAgICogQHBhcmFtIHNpemUgLSBUYXJnZXQgc2l6ZVxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB0aGUgUGFnZSBCbG9iIFJlc2l6ZSBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgdGhlIFBhZ2UgQmxvYiBSZXNpemUgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIHJlc2l6ZShzaXplLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgb3B0aW9ucy5jb25kaXRpb25zID0gb3B0aW9ucy5jb25kaXRpb25zIHx8IHt9O1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIlBhZ2VCbG9iQ2xpZW50LXJlc2l6ZVwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLnBhZ2VCbG9iQ29udGV4dC5yZXNpemUoc2l6ZSwge1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQWNjZXNzQ29uZGl0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmRpdGlvbnMpLCB7IGlmVGFnczogKF9hID0gb3B0aW9ucy5jb25kaXRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGFnQ29uZGl0aW9ucyB9KSxcbiAgICAgICAgICAgICAgICBlbmNyeXB0aW9uU2NvcGU6IG9wdGlvbnMuZW5jcnlwdGlvblNjb3BlLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldHMgYSBwYWdlIGJsb2IncyBzZXF1ZW5jZSBudW1iZXIuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvc2V0LWJsb2ItcHJvcGVydGllc1xuICAgICAqXG4gICAgICogQHBhcmFtIHNlcXVlbmNlTnVtYmVyQWN0aW9uIC0gSW5kaWNhdGVzIGhvdyB0aGUgc2VydmljZSBzaG91bGQgbW9kaWZ5IHRoZSBibG9iJ3Mgc2VxdWVuY2UgbnVtYmVyLlxuICAgICAqIEBwYXJhbSBzZXF1ZW5jZU51bWJlciAtIFJlcXVpcmVkIGlmIHNlcXVlbmNlTnVtYmVyQWN0aW9uIGlzIG1heCBvciB1cGRhdGVcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gdGhlIFBhZ2UgQmxvYiBVcGRhdGUgU2VxdWVuY2UgTnVtYmVyIG9wZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyBSZXNwb25zZSBkYXRhIGZvciB0aGUgUGFnZSBCbG9iIFVwZGF0ZSBTZXF1ZW5jZSBOdW1iZXIgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIHVwZGF0ZVNlcXVlbmNlTnVtYmVyKHNlcXVlbmNlTnVtYmVyQWN0aW9uLCBzZXF1ZW5jZU51bWJlciwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIG9wdGlvbnMuY29uZGl0aW9ucyA9IG9wdGlvbnMuY29uZGl0aW9ucyB8fCB7fTtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJQYWdlQmxvYkNsaWVudC11cGRhdGVTZXF1ZW5jZU51bWJlclwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLnBhZ2VCbG9iQ29udGV4dC51cGRhdGVTZXF1ZW5jZU51bWJlcihzZXF1ZW5jZU51bWJlckFjdGlvbiwge1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGJsb2JTZXF1ZW5jZU51bWJlcjogc2VxdWVuY2VOdW1iZXIsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZGl0aW9ucyksIHsgaWZUYWdzOiAoX2EgPSBvcHRpb25zLmNvbmRpdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdDb25kaXRpb25zIH0pLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEJlZ2lucyBhbiBvcGVyYXRpb24gdG8gc3RhcnQgYW4gaW5jcmVtZW50YWwgY29weSBmcm9tIG9uZSBwYWdlIGJsb2IncyBzbmFwc2hvdCB0byB0aGlzIHBhZ2UgYmxvYi5cbiAgICAgKiBUaGUgc25hcHNob3QgaXMgY29waWVkIHN1Y2ggdGhhdCBvbmx5IHRoZSBkaWZmZXJlbnRpYWwgY2hhbmdlcyBiZXR3ZWVuIHRoZSBwcmV2aW91c2x5XG4gICAgICogY29waWVkIHNuYXBzaG90IGFyZSB0cmFuc2ZlcnJlZCB0byB0aGUgZGVzdGluYXRpb24uXG4gICAgICogVGhlIGNvcGllZCBzbmFwc2hvdHMgYXJlIGNvbXBsZXRlIGNvcGllcyBvZiB0aGUgb3JpZ2luYWwgc25hcHNob3QgYW5kIGNhbiBiZSByZWFkIG9yIGNvcGllZCBmcm9tIGFzIHVzdWFsLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2luY3JlbWVudGFsLWNvcHktYmxvYlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvYXp1cmUvdmlydHVhbC1tYWNoaW5lcy93aW5kb3dzL2luY3JlbWVudGFsLXNuYXBzaG90c1xuICAgICAqXG4gICAgICogQHBhcmFtIGNvcHlTb3VyY2UgLSBTcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIHNvdXJjZSBwYWdlIGJsb2Igc25hcHNob3QuIEZvciBleGFtcGxlLFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBzOi8vbXlhY2NvdW50LmJsb2IuY29yZS53aW5kb3dzLm5ldC9teWNvbnRhaW5lci9teWJsb2I/c25hcHNob3Q9PERhdGVUaW1lPlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB0aGUgUGFnZSBCbG9iIENvcHkgSW5jcmVtZW50YWwgb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIFJlc3BvbnNlIGRhdGEgZm9yIHRoZSBQYWdlIEJsb2IgQ29weSBJbmNyZW1lbnRhbCBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgc3RhcnRDb3B5SW5jcmVtZW50YWwoY29weVNvdXJjZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiUGFnZUJsb2JDbGllbnQtc3RhcnRDb3B5SW5jcmVtZW50YWxcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5wYWdlQmxvYkNvbnRleHQuY29weUluY3JlbWVudGFsKGNvcHlTb3VyY2UsIHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyBpZlRhZ3M6IChfYSA9IG9wdGlvbnMuY29uZGl0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhZ0NvbmRpdGlvbnMgfSksXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuYXN5bmMgZnVuY3Rpb24gZ2V0Qm9keUFzVGV4dChiYXRjaFJlc3BvbnNlKSB7XG4gICAgbGV0IGJ1ZmZlciA9IEJ1ZmZlci5hbGxvYyhCQVRDSF9NQVhfUEFZTE9BRF9JTl9CWVRFUyk7XG4gICAgY29uc3QgcmVzcG9uc2VMZW5ndGggPSBhd2FpdCBzdHJlYW1Ub0J1ZmZlcjIoYmF0Y2hSZXNwb25zZS5yZWFkYWJsZVN0cmVhbUJvZHksIGJ1ZmZlcik7XG4gICAgLy8gU2xpY2UgdGhlIGJ1ZmZlciB0byB0cmltIHRoZSBlbXB0eSBlbmRpbmcuXG4gICAgYnVmZmVyID0gYnVmZmVyLnNsaWNlKDAsIHJlc3BvbnNlTGVuZ3RoKTtcbiAgICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7XG59XG5mdW5jdGlvbiB1dGY4Qnl0ZUxlbmd0aChzdHIpIHtcbiAgICByZXR1cm4gQnVmZmVyLmJ5dGVMZW5ndGgoc3RyKTtcbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5jb25zdCBIVFRQX0hFQURFUl9ERUxJTUlURVIgPSBcIjogXCI7XG5jb25zdCBTUEFDRV9ERUxJTUlURVIgPSBcIiBcIjtcbmNvbnN0IE5PVF9GT1VORCA9IC0xO1xuLyoqXG4gKiBVdGlsIGNsYXNzIGZvciBwYXJzaW5nIGJhdGNoIHJlc3BvbnNlLlxuICovXG5jbGFzcyBCYXRjaFJlc3BvbnNlUGFyc2VyIHtcbiAgICBjb25zdHJ1Y3RvcihiYXRjaFJlc3BvbnNlLCBzdWJSZXF1ZXN0cykge1xuICAgICAgICBpZiAoIWJhdGNoUmVzcG9uc2UgfHwgIWJhdGNoUmVzcG9uc2UuY29udGVudFR5cGUpIHtcbiAgICAgICAgICAgIC8vIEluIHNwZWNpYWwgY2FzZShyZXBvcnRlZCksIHNlcnZlciBtYXkgcmV0dXJuIGludmFsaWQgY29udGVudC10eXBlIHdoaWNoIGNvdWxkIG5vdCBiZSBwYXJzZWQuXG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcImJhdGNoUmVzcG9uc2UgaXMgbWFsZm9ybWVkIG9yIGRvZXNuJ3QgY29udGFpbiB2YWxpZCBjb250ZW50LXR5cGUuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghc3ViUmVxdWVzdHMgfHwgc3ViUmVxdWVzdHMuc2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgYmUgcHJldmVudCBkdXJpbmcgY29kaW5nLlxuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBzdWJSZXF1ZXN0cyBpcyBub3QgcHJvdmlkZWQgb3Igc2l6ZSBpcyAwLlwiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJhdGNoUmVzcG9uc2UgPSBiYXRjaFJlc3BvbnNlO1xuICAgICAgICB0aGlzLnN1YlJlcXVlc3RzID0gc3ViUmVxdWVzdHM7XG4gICAgICAgIHRoaXMucmVzcG9uc2VCYXRjaEJvdW5kYXJ5ID0gdGhpcy5iYXRjaFJlc3BvbnNlLmNvbnRlbnRUeXBlLnNwbGl0KFwiPVwiKVsxXTtcbiAgICAgICAgdGhpcy5wZXJSZXNwb25zZVByZWZpeCA9IGAtLSR7dGhpcy5yZXNwb25zZUJhdGNoQm91bmRhcnl9JHtIVFRQX0xJTkVfRU5ESU5HfWA7XG4gICAgICAgIHRoaXMuYmF0Y2hSZXNwb25zZUVuZGluZyA9IGAtLSR7dGhpcy5yZXNwb25zZUJhdGNoQm91bmRhcnl9LS1gO1xuICAgIH1cbiAgICAvLyBGb3IgZXhhbXBsZSBvZiByZXNwb25zZSwgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9ibG9iLWJhdGNoI3Jlc3BvbnNlXG4gICAgYXN5bmMgcGFyc2VCYXRjaFJlc3BvbnNlKCkge1xuICAgICAgICAvLyBXaGVuIGxvZ2ljIHJlYWNoIGhlcmUsIHN1cHBvc2UgYmF0Y2ggcmVxdWVzdCBoYXMgYWxyZWFkeSBzdWNjZWVkZWQgd2l0aCAyMDIsIHNvIHdlIGNhbiBmdXJ0aGVyIHBhcnNlXG4gICAgICAgIC8vIHN1YiByZXF1ZXN0J3MgcmVzcG9uc2UuXG4gICAgICAgIGlmICh0aGlzLmJhdGNoUmVzcG9uc2UuX3Jlc3BvbnNlLnN0YXR1cyAhPT0gSFRUUFVSTENvbm5lY3Rpb24uSFRUUF9BQ0NFUFRFRCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHN0YXRlOiBiYXRjaCByZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1czogJyR7dGhpcy5iYXRjaFJlc3BvbnNlLl9yZXNwb25zZS5zdGF0dXN9Jy5gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXNwb25zZUJvZHlBc1RleHQgPSBhd2FpdCBnZXRCb2R5QXNUZXh0KHRoaXMuYmF0Y2hSZXNwb25zZSk7XG4gICAgICAgIGNvbnN0IHN1YlJlc3BvbnNlcyA9IHJlc3BvbnNlQm9keUFzVGV4dFxuICAgICAgICAgICAgLnNwbGl0KHRoaXMuYmF0Y2hSZXNwb25zZUVuZGluZylbMF0gLy8gc3RyaW5nIGFmdGVyIGVuZGluZyBpcyB1c2VsZXNzXG4gICAgICAgICAgICAuc3BsaXQodGhpcy5wZXJSZXNwb25zZVByZWZpeClcbiAgICAgICAgICAgIC5zbGljZSgxKTsgLy8gc3RyaW5nIGJlZm9yZSBmaXJzdCByZXNwb25zZSBib3VuZGFyeSBpcyB1c2VsZXNzXG4gICAgICAgIGNvbnN0IHN1YlJlc3BvbnNlQ291bnQgPSBzdWJSZXNwb25zZXMubGVuZ3RoO1xuICAgICAgICAvLyBEZWZlbnNpdmUgY29kaW5nIGluIGNhc2Ugb2YgcG90ZW50aWFsIGVycm9yIHBhcnNpbmcuXG4gICAgICAgIC8vIE5vdGU6IHN1YlJlc3BvbnNlQ291bnQgPT0gMSBpcyBzcGVjaWFsIGNhc2Ugd2hlcmUgc3ViIHJlcXVlc3QgaXMgaW52YWxpZC5cbiAgICAgICAgLy8gV2UgdHJ5IHRvIHByZXZlbnQgc3VjaCBjYXNlcyB0aHJvdWdoIGVhcmx5IHZhbGlkYXRpb24sIGUuZy4gdmFsaWRhdGUgc3ViIHJlcXVlc3QgY291bnQgPj0gMS5cbiAgICAgICAgLy8gV2hpbGUgaW4gdW5leHBlY3RlZCBzdWIgcmVxdWVzdCBpbnZhbGlkIGNhc2UsIHdlIGFsbG93IHN1YiByZXNwb25zZSB0byBiZSBwYXJzZWQgYW5kIHJldHVybiB0byB1c2VyLlxuICAgICAgICBpZiAoc3ViUmVzcG9uc2VDb3VudCAhPT0gdGhpcy5zdWJSZXF1ZXN0cy5zaXplICYmIHN1YlJlc3BvbnNlQ291bnQgIT09IDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGU6IHN1YiByZXNwb25zZXMnIGNvdW50IGlzIG5vdCBlcXVhbCB0byBzdWIgcmVxdWVzdHMnIGNvdW50LlwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkZXNlcmlhbGl6ZWRTdWJSZXNwb25zZXMgPSBuZXcgQXJyYXkoc3ViUmVzcG9uc2VDb3VudCk7XG4gICAgICAgIGxldCBzdWJSZXNwb25zZXNTdWNjZWVkZWRDb3VudCA9IDA7XG4gICAgICAgIGxldCBzdWJSZXNwb25zZXNGYWlsZWRDb3VudCA9IDA7XG4gICAgICAgIC8vIFBhcnNlIHN1YiBzdWJSZXNwb25zZXMuXG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBzdWJSZXNwb25zZUNvdW50OyBpbmRleCsrKSB7XG4gICAgICAgICAgICBjb25zdCBzdWJSZXNwb25zZSA9IHN1YlJlc3BvbnNlc1tpbmRleF07XG4gICAgICAgICAgICBjb25zdCBkZXNlcmlhbGl6ZWRTdWJSZXNwb25zZSA9IHt9O1xuICAgICAgICAgICAgZGVzZXJpYWxpemVkU3ViUmVzcG9uc2UuaGVhZGVycyA9IGNvcmVIdHRwQ29tcGF0LnRvSHR0cEhlYWRlcnNMaWtlKGNvcmVSZXN0UGlwZWxpbmUuY3JlYXRlSHR0cEhlYWRlcnMoKSk7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZUxpbmVzID0gc3ViUmVzcG9uc2Uuc3BsaXQoYCR7SFRUUF9MSU5FX0VORElOR31gKTtcbiAgICAgICAgICAgIGxldCBzdWJSZXNwSGVhZGVyU3RhcnRGb3VuZCA9IGZhbHNlO1xuICAgICAgICAgICAgbGV0IHN1YlJlc3BIZWFkZXJFbmRGb3VuZCA9IGZhbHNlO1xuICAgICAgICAgICAgbGV0IHN1YlJlc3BGYWlsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGxldCBjb250ZW50SWQgPSBOT1RfRk9VTkQ7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJlc3BvbnNlTGluZSBvZiByZXNwb25zZUxpbmVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFzdWJSZXNwSGVhZGVyU3RhcnRGb3VuZCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBDb252ZW50aW9uIGxpbmUgdG8gaW5kaWNhdGUgY29udGVudCBJRFxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2VMaW5lLnN0YXJ0c1dpdGgoSGVhZGVyQ29uc3RhbnRzLkNPTlRFTlRfSUQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50SWQgPSBwYXJzZUludChyZXNwb25zZUxpbmUuc3BsaXQoSFRUUF9IRUFERVJfREVMSU1JVEVSKVsxXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gSHR0cCB2ZXJzaW9uIGxpbmUgd2l0aCBzdGF0dXMgY29kZSBpbmRpY2F0ZXMgdGhlIHN0YXJ0IG9mIHN1YiByZXF1ZXN0J3MgcmVzcG9uc2UuXG4gICAgICAgICAgICAgICAgICAgIC8vIEV4YW1wbGU6IEhUVFAvMS4xIDIwMiBBY2NlcHRlZFxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2VMaW5lLnN0YXJ0c1dpdGgoSFRUUF9WRVJTSU9OXzFfMSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YlJlc3BIZWFkZXJTdGFydEZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRva2VucyA9IHJlc3BvbnNlTGluZS5zcGxpdChTUEFDRV9ERUxJTUlURVIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVzZXJpYWxpemVkU3ViUmVzcG9uc2Uuc3RhdHVzID0gcGFyc2VJbnQodG9rZW5zWzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2VyaWFsaXplZFN1YlJlc3BvbnNlLnN0YXR1c01lc3NhZ2UgPSB0b2tlbnMuc2xpY2UoMikuam9pbihTUEFDRV9ERUxJTUlURVIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBTa2lwIGNvbnZlbnRpb24gaGVhZGVycyBub3Qgc3BlY2lmaWNhbGx5IGZvciBzdWIgcmVxdWVzdCBpLmUuIENvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vaHR0cCBhbmQgQ29udGVudC1JRDogKlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2VMaW5lLnRyaW0oKSA9PT0gXCJcIikge1xuICAgICAgICAgICAgICAgICAgICAvLyBTdWIgcmVzcG9uc2UncyBoZWFkZXIgc3RhcnQgbGluZSBhbHJlYWR5IGZvdW5kLCBhbmQgdGhlIGZpcnN0IGVtcHR5IGxpbmUgaW5kaWNhdGVzIGhlYWRlciBlbmQgbGluZSBmb3VuZC5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzdWJSZXNwSGVhZGVyRW5kRm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YlJlc3BIZWFkZXJFbmRGb3VuZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7IC8vIFNraXAgZW1wdHkgbGluZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBOb3RlOiB3aGVuIGNvZGUgcmVhY2ggaGVyZSwgaXQgaW5kaWNhdGVzIHN1YlJlc3BIZWFkZXJTdGFydEZvdW5kID09IHRydWVcbiAgICAgICAgICAgICAgICBpZiAoIXN1YlJlc3BIZWFkZXJFbmRGb3VuZCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2VMaW5lLmluZGV4T2YoSFRUUF9IRUFERVJfREVMSU1JVEVSKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlZmVuc2l2ZSBjb2RpbmcgdG8gcHJldmVudCBmcm9tIG1pc3NpbmcgdmFsdWFibGUgbGluZXMuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgc3RhdGU6IGZpbmQgbm9uLWVtcHR5IGxpbmUgJyR7cmVzcG9uc2VMaW5lfScgd2l0aG91dCBIVFRQIGhlYWRlciBkZWxpbWl0ZXIgJyR7SFRUUF9IRUFERVJfREVMSU1JVEVSfScuYCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gUGFyc2UgaGVhZGVycyBvZiBzdWIgcmVzcG9uc2UuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRva2VucyA9IHJlc3BvbnNlTGluZS5zcGxpdChIVFRQX0hFQURFUl9ERUxJTUlURVIpO1xuICAgICAgICAgICAgICAgICAgICBkZXNlcmlhbGl6ZWRTdWJSZXNwb25zZS5oZWFkZXJzLnNldCh0b2tlbnNbMF0sIHRva2Vuc1sxXSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbnNbMF0gPT09IEhlYWRlckNvbnN0YW50cy5YX01TX0VSUk9SX0NPREUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2VyaWFsaXplZFN1YlJlc3BvbnNlLmVycm9yQ29kZSA9IHRva2Vuc1sxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YlJlc3BGYWlsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBBc3NlbWJsZSBib2R5IG9mIHN1YiByZXNwb25zZS5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFkZXNlcmlhbGl6ZWRTdWJSZXNwb25zZS5ib2R5QXNUZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNlcmlhbGl6ZWRTdWJSZXNwb25zZS5ib2R5QXNUZXh0ID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBkZXNlcmlhbGl6ZWRTdWJSZXNwb25zZS5ib2R5QXNUZXh0ICs9IHJlc3BvbnNlTGluZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IC8vIElubmVyIGZvciBlbmRcbiAgICAgICAgICAgIC8vIFRoZSByZXNwb25zZSB3aWxsIGNvbnRhaW4gdGhlIENvbnRlbnQtSUQgaGVhZGVyIGZvciBlYWNoIGNvcnJlc3BvbmRpbmcgc3VicmVxdWVzdCByZXNwb25zZSB0byB1c2UgZm9yIHRyYWNraW5nLlxuICAgICAgICAgICAgLy8gVGhlIENvbnRlbnQtSURzIGFyZSBzZXQgdG8gYSB2YWxpZCBpbmRleCBpbiB0aGUgc3VicmVxdWVzdHMgd2Ugc2VudC4gSW4gdGhlIHN0YXR1cyBjb2RlIDIwMiBwYXRoLCB3ZSBjb3VsZCBleHBlY3QgaXRcbiAgICAgICAgICAgIC8vIHRvIGJlIDEtMSBtYXBwaW5nIGZyb20gdGhlIFswLCBzdWJSZXF1ZXN0cy5zaXplKSB0byB0aGUgQ29udGVudC1JRHMgcmV0dXJuZWQuIElmIG5vdCwgd2Ugc2ltcGx5IGRvbid0IHJldHVybiB0aGF0XG4gICAgICAgICAgICAvLyB1bmV4cGVjdGVkIHN1YlJlc3BvbnNlIGluIHRoZSBwYXJzZWQgcmVwb25zZSBhbmQgd2UgY2FuIGFsd2F5cyBsb29rIGl0IHVwIGluIHRoZSByYXcgcmVzcG9uc2UgZm9yIGRlYnVnZ2luZyBwdXJwb3NlLlxuICAgICAgICAgICAgaWYgKGNvbnRlbnRJZCAhPT0gTk9UX0ZPVU5EICYmXG4gICAgICAgICAgICAgICAgTnVtYmVyLmlzSW50ZWdlcihjb250ZW50SWQpICYmXG4gICAgICAgICAgICAgICAgY29udGVudElkID49IDAgJiZcbiAgICAgICAgICAgICAgICBjb250ZW50SWQgPCB0aGlzLnN1YlJlcXVlc3RzLnNpemUgJiZcbiAgICAgICAgICAgICAgICBkZXNlcmlhbGl6ZWRTdWJSZXNwb25zZXNbY29udGVudElkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZGVzZXJpYWxpemVkU3ViUmVzcG9uc2UuX3JlcXVlc3QgPSB0aGlzLnN1YlJlcXVlc3RzLmdldChjb250ZW50SWQpO1xuICAgICAgICAgICAgICAgIGRlc2VyaWFsaXplZFN1YlJlc3BvbnNlc1tjb250ZW50SWRdID0gZGVzZXJpYWxpemVkU3ViUmVzcG9uc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoYHN1YlJlc3BvbnNlc1ske2luZGV4fV0gaXMgZHJvcHBlZCBhcyB0aGUgQ29udGVudC1JRCBpcyBub3QgZm91bmQgb3IgaW52YWxpZCwgQ29udGVudC1JRDogJHtjb250ZW50SWR9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3ViUmVzcEZhaWxlZCkge1xuICAgICAgICAgICAgICAgIHN1YlJlc3BvbnNlc0ZhaWxlZENvdW50Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdWJSZXNwb25zZXNTdWNjZWVkZWRDb3VudCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWJSZXNwb25zZXM6IGRlc2VyaWFsaXplZFN1YlJlc3BvbnNlcyxcbiAgICAgICAgICAgIHN1YlJlc3BvbnNlc1N1Y2NlZWRlZENvdW50OiBzdWJSZXNwb25zZXNTdWNjZWVkZWRDb3VudCxcbiAgICAgICAgICAgIHN1YlJlc3BvbnNlc0ZhaWxlZENvdW50OiBzdWJSZXNwb25zZXNGYWlsZWRDb3VudCxcbiAgICAgICAgfTtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxudmFyIE11dGV4TG9ja1N0YXR1cztcbihmdW5jdGlvbiAoTXV0ZXhMb2NrU3RhdHVzKSB7XG4gICAgTXV0ZXhMb2NrU3RhdHVzW011dGV4TG9ja1N0YXR1c1tcIkxPQ0tFRFwiXSA9IDBdID0gXCJMT0NLRURcIjtcbiAgICBNdXRleExvY2tTdGF0dXNbTXV0ZXhMb2NrU3RhdHVzW1wiVU5MT0NLRURcIl0gPSAxXSA9IFwiVU5MT0NLRURcIjtcbn0pKE11dGV4TG9ja1N0YXR1cyB8fCAoTXV0ZXhMb2NrU3RhdHVzID0ge30pKTtcbi8qKlxuICogQW4gYXN5bmMgbXV0ZXggbG9jay5cbiAqL1xuY2xhc3MgTXV0ZXgge1xuICAgIC8qKlxuICAgICAqIExvY2sgZm9yIGEgc3BlY2lmaWMga2V5LiBJZiB0aGUgbG9jayBoYXMgYmVlbiBhY3F1aXJlZCBieSBhbm90aGVyIGN1c3RvbWVyLCB0aGVuXG4gICAgICogd2lsbCB3YWl0IHVudGlsIGdldHRpbmcgdGhlIGxvY2suXG4gICAgICpcbiAgICAgKiBAcGFyYW0ga2V5IC0gbG9jayBrZXlcbiAgICAgKi9cbiAgICBzdGF0aWMgYXN5bmMgbG9jayhrZXkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5rZXlzW2tleV0gPT09IHVuZGVmaW5lZCB8fCB0aGlzLmtleXNba2V5XSA9PT0gTXV0ZXhMb2NrU3RhdHVzLlVOTE9DS0VEKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5rZXlzW2tleV0gPSBNdXRleExvY2tTdGF0dXMuTE9DS0VEO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMub25VbmxvY2tFdmVudChrZXksICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5rZXlzW2tleV0gPSBNdXRleExvY2tTdGF0dXMuTE9DS0VEO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBVbmxvY2sgYSBrZXkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ga2V5IC1cbiAgICAgKi9cbiAgICBzdGF0aWMgYXN5bmMgdW5sb2NrKGtleSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmtleXNba2V5XSA9PT0gTXV0ZXhMb2NrU3RhdHVzLkxPQ0tFRCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdFVubG9ja0V2ZW50KGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5rZXlzW2tleV07XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBzdGF0aWMgb25VbmxvY2tFdmVudChrZXksIGhhbmRsZXIpIHtcbiAgICAgICAgaWYgKHRoaXMubGlzdGVuZXJzW2tleV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5saXN0ZW5lcnNba2V5XSA9IFtoYW5kbGVyXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzW2tleV0ucHVzaChoYW5kbGVyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgZW1pdFVubG9ja0V2ZW50KGtleSkge1xuICAgICAgICBpZiAodGhpcy5saXN0ZW5lcnNba2V5XSAhPT0gdW5kZWZpbmVkICYmIHRoaXMubGlzdGVuZXJzW2tleV0ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlciA9IHRoaXMubGlzdGVuZXJzW2tleV0uc2hpZnQoKTtcbiAgICAgICAgICAgIHNldEltbWVkaWF0ZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaGFuZGxlci5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5NdXRleC5rZXlzID0ge307XG5NdXRleC5saXN0ZW5lcnMgPSB7fTtcblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIEEgQmxvYkJhdGNoIHJlcHJlc2VudHMgYW4gYWdncmVnYXRlZCBzZXQgb2Ygb3BlcmF0aW9ucyBvbiBibG9icy5cbiAqIEN1cnJlbnRseSwgb25seSBgZGVsZXRlYCBhbmQgYHNldEFjY2Vzc1RpZXJgIGFyZSBzdXBwb3J0ZWQuXG4gKi9cbmNsYXNzIEJsb2JCYXRjaCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuYmF0Y2ggPSBcImJhdGNoXCI7XG4gICAgICAgIHRoaXMuYmF0Y2hSZXF1ZXN0ID0gbmV3IElubmVyQmF0Y2hSZXF1ZXN0KCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgdmFsdWUgb2YgQ29udGVudC1UeXBlIGZvciBhIGJhdGNoIHJlcXVlc3QuXG4gICAgICogVGhlIHZhbHVlIG11c3QgYmUgbXVsdGlwYXJ0L21peGVkIHdpdGggYSBiYXRjaCBib3VuZGFyeS5cbiAgICAgKiBFeGFtcGxlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PWJhdGNoX2E4MTc4NmM4LWUzMDEtNGU0Mi1hNzI5LWEzMmNhMjRhZTI1MlxuICAgICAqL1xuICAgIGdldE11bHRpUGFydENvbnRlbnRUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5iYXRjaFJlcXVlc3QuZ2V0TXVsdGlwYXJ0Q29udGVudFR5cGUoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IGFzc2VtYmxlZCBIVFRQIHJlcXVlc3QgYm9keSBmb3Igc3ViIHJlcXVlc3RzLlxuICAgICAqL1xuICAgIGdldEh0dHBSZXF1ZXN0Qm9keSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmF0Y2hSZXF1ZXN0LmdldEh0dHBSZXF1ZXN0Qm9keSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgc3ViIHJlcXVlc3RzIHRoYXQgYXJlIGFkZGVkIGludG8gdGhlIGJhdGNoIHJlcXVlc3QuXG4gICAgICovXG4gICAgZ2V0U3ViUmVxdWVzdHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhdGNoUmVxdWVzdC5nZXRTdWJSZXF1ZXN0cygpO1xuICAgIH1cbiAgICBhc3luYyBhZGRTdWJSZXF1ZXN0SW50ZXJuYWwoc3ViUmVxdWVzdCwgYXNzZW1ibGVTdWJSZXF1ZXN0RnVuYykge1xuICAgICAgICBhd2FpdCBNdXRleC5sb2NrKHRoaXMuYmF0Y2gpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5iYXRjaFJlcXVlc3QucHJlQWRkU3ViUmVxdWVzdChzdWJSZXF1ZXN0KTtcbiAgICAgICAgICAgIGF3YWl0IGFzc2VtYmxlU3ViUmVxdWVzdEZ1bmMoKTtcbiAgICAgICAgICAgIHRoaXMuYmF0Y2hSZXF1ZXN0LnBvc3RBZGRTdWJSZXF1ZXN0KHN1YlJlcXVlc3QpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgYXdhaXQgTXV0ZXgudW5sb2NrKHRoaXMuYmF0Y2gpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNldEJhdGNoVHlwZShiYXRjaFR5cGUpIHtcbiAgICAgICAgaWYgKCF0aGlzLmJhdGNoVHlwZSkge1xuICAgICAgICAgICAgdGhpcy5iYXRjaFR5cGUgPSBiYXRjaFR5cGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuYmF0Y2hUeXBlICE9PSBiYXRjaFR5cGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBCbG9iQmF0Y2ggb25seSBzdXBwb3J0cyBvbmUgb3BlcmF0aW9uIHR5cGUgcGVyIGJhdGNoIGFuZCBpdCBhbHJlYWR5IGlzIGJlaW5nIHVzZWQgZm9yICR7dGhpcy5iYXRjaFR5cGV9IG9wZXJhdGlvbnMuYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgZGVsZXRlQmxvYih1cmxPckJsb2JDbGllbnQsIGNyZWRlbnRpYWxPck9wdGlvbnMsIG9wdGlvbnMpIHtcbiAgICAgICAgbGV0IHVybDtcbiAgICAgICAgbGV0IGNyZWRlbnRpYWw7XG4gICAgICAgIGlmICh0eXBlb2YgdXJsT3JCbG9iQ2xpZW50ID09PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICAoKGNvcmVVdGlsLmlzTm9kZSAmJiBjcmVkZW50aWFsT3JPcHRpb25zIGluc3RhbmNlb2YgU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwpIHx8XG4gICAgICAgICAgICAgICAgY3JlZGVudGlhbE9yT3B0aW9ucyBpbnN0YW5jZW9mIEFub255bW91c0NyZWRlbnRpYWwgfHxcbiAgICAgICAgICAgICAgICBjb3JlQXV0aC5pc1Rva2VuQ3JlZGVudGlhbChjcmVkZW50aWFsT3JPcHRpb25zKSkpIHtcbiAgICAgICAgICAgIC8vIEZpcnN0IG92ZXJsb2FkXG4gICAgICAgICAgICB1cmwgPSB1cmxPckJsb2JDbGllbnQ7XG4gICAgICAgICAgICBjcmVkZW50aWFsID0gY3JlZGVudGlhbE9yT3B0aW9ucztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1cmxPckJsb2JDbGllbnQgaW5zdGFuY2VvZiBCbG9iQ2xpZW50KSB7XG4gICAgICAgICAgICAvLyBTZWNvbmQgb3ZlcmxvYWRcbiAgICAgICAgICAgIHVybCA9IHVybE9yQmxvYkNsaWVudC51cmw7XG4gICAgICAgICAgICBjcmVkZW50aWFsID0gdXJsT3JCbG9iQ2xpZW50LmNyZWRlbnRpYWw7XG4gICAgICAgICAgICBvcHRpb25zID0gY3JlZGVudGlhbE9yT3B0aW9ucztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiSW52YWxpZCBhcmd1bWVudHMuIEVpdGhlciB1cmwgYW5kIGNyZWRlbnRpYWwsIG9yIEJsb2JDbGllbnQgbmVlZCBiZSBwcm92aWRlZC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICAgICAgICBvcHRpb25zID0ge307XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCYXRjaERlbGV0ZVJlcXVlc3QtYWRkU3ViUmVxdWVzdFwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0QmF0Y2hUeXBlKFwiZGVsZXRlXCIpO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5hZGRTdWJSZXF1ZXN0SW50ZXJuYWwoe1xuICAgICAgICAgICAgICAgIHVybDogdXJsLFxuICAgICAgICAgICAgICAgIGNyZWRlbnRpYWw6IGNyZWRlbnRpYWwsXG4gICAgICAgICAgICB9LCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgYXdhaXQgbmV3IEJsb2JDbGllbnQodXJsLCB0aGlzLmJhdGNoUmVxdWVzdC5jcmVhdGVQaXBlbGluZShjcmVkZW50aWFsKSkuZGVsZXRlKHVwZGF0ZWRPcHRpb25zKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMgc2V0QmxvYkFjY2Vzc1RpZXIodXJsT3JCbG9iQ2xpZW50LCBjcmVkZW50aWFsT3JUaWVyLCB0aWVyT3JPcHRpb25zLCBvcHRpb25zKSB7XG4gICAgICAgIGxldCB1cmw7XG4gICAgICAgIGxldCBjcmVkZW50aWFsO1xuICAgICAgICBsZXQgdGllcjtcbiAgICAgICAgaWYgKHR5cGVvZiB1cmxPckJsb2JDbGllbnQgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICAgICgoY29yZVV0aWwuaXNOb2RlICYmIGNyZWRlbnRpYWxPclRpZXIgaW5zdGFuY2VvZiBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbCkgfHxcbiAgICAgICAgICAgICAgICBjcmVkZW50aWFsT3JUaWVyIGluc3RhbmNlb2YgQW5vbnltb3VzQ3JlZGVudGlhbCB8fFxuICAgICAgICAgICAgICAgIGNvcmVBdXRoLmlzVG9rZW5DcmVkZW50aWFsKGNyZWRlbnRpYWxPclRpZXIpKSkge1xuICAgICAgICAgICAgLy8gRmlyc3Qgb3ZlcmxvYWRcbiAgICAgICAgICAgIHVybCA9IHVybE9yQmxvYkNsaWVudDtcbiAgICAgICAgICAgIGNyZWRlbnRpYWwgPSBjcmVkZW50aWFsT3JUaWVyO1xuICAgICAgICAgICAgdGllciA9IHRpZXJPck9wdGlvbnM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodXJsT3JCbG9iQ2xpZW50IGluc3RhbmNlb2YgQmxvYkNsaWVudCkge1xuICAgICAgICAgICAgLy8gU2Vjb25kIG92ZXJsb2FkXG4gICAgICAgICAgICB1cmwgPSB1cmxPckJsb2JDbGllbnQudXJsO1xuICAgICAgICAgICAgY3JlZGVudGlhbCA9IHVybE9yQmxvYkNsaWVudC5jcmVkZW50aWFsO1xuICAgICAgICAgICAgdGllciA9IGNyZWRlbnRpYWxPclRpZXI7XG4gICAgICAgICAgICBvcHRpb25zID0gdGllck9yT3B0aW9ucztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiSW52YWxpZCBhcmd1bWVudHMuIEVpdGhlciB1cmwgYW5kIGNyZWRlbnRpYWwsIG9yIEJsb2JDbGllbnQgbmVlZCBiZSBwcm92aWRlZC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICAgICAgICBvcHRpb25zID0ge307XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCYXRjaFNldFRpZXJSZXF1ZXN0LWFkZFN1YlJlcXVlc3RcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldEJhdGNoVHlwZShcInNldEFjY2Vzc1RpZXJcIik7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmFkZFN1YlJlcXVlc3RJbnRlcm5hbCh7XG4gICAgICAgICAgICAgICAgdXJsOiB1cmwsXG4gICAgICAgICAgICAgICAgY3JlZGVudGlhbDogY3JlZGVudGlhbCxcbiAgICAgICAgICAgIH0sIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICBhd2FpdCBuZXcgQmxvYkNsaWVudCh1cmwsIHRoaXMuYmF0Y2hSZXF1ZXN0LmNyZWF0ZVBpcGVsaW5lKGNyZWRlbnRpYWwpKS5zZXRBY2Nlc3NUaWVyKHRpZXIsIHVwZGF0ZWRPcHRpb25zKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4vKipcbiAqIElubmVyIGJhdGNoIHJlcXVlc3QgY2xhc3Mgd2hpY2ggaXMgcmVzcG9uc2libGUgZm9yIGFzc2VtYmxpbmcgYW5kIHNlcmlhbGl6aW5nIHN1YiByZXF1ZXN0cy5cbiAqIFNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvYmxvYi1iYXRjaCNyZXF1ZXN0LWJvZHkgZm9yIGhvdyByZXF1ZXN0cyBhcmUgYXNzZW1ibGVkLlxuICovXG5jbGFzcyBJbm5lckJhdGNoUmVxdWVzdCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMub3BlcmF0aW9uQ291bnQgPSAwO1xuICAgICAgICB0aGlzLmJvZHkgPSBcIlwiO1xuICAgICAgICBjb25zdCB0ZW1wR3VpZCA9IGNvcmVVdGlsLnJhbmRvbVVVSUQoKTtcbiAgICAgICAgLy8gYmF0Y2hfe2JhdGNoaWR9XG4gICAgICAgIHRoaXMuYm91bmRhcnkgPSBgYmF0Y2hfJHt0ZW1wR3VpZH1gO1xuICAgICAgICAvLyAtLWJhdGNoX3tiYXRjaGlkfVxuICAgICAgICAvLyBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2h0dHBcbiAgICAgICAgLy8gQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmluYXJ5XG4gICAgICAgIHRoaXMuc3ViUmVxdWVzdFByZWZpeCA9IGAtLSR7dGhpcy5ib3VuZGFyeX0ke0hUVFBfTElORV9FTkRJTkd9JHtIZWFkZXJDb25zdGFudHMuQ09OVEVOVF9UWVBFfTogYXBwbGljYXRpb24vaHR0cCR7SFRUUF9MSU5FX0VORElOR30ke0hlYWRlckNvbnN0YW50cy5DT05URU5UX1RSQU5TRkVSX0VOQ09ESU5HfTogYmluYXJ5YDtcbiAgICAgICAgLy8gbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT1iYXRjaF97YmF0Y2hpZH1cbiAgICAgICAgdGhpcy5tdWx0aXBhcnRDb250ZW50VHlwZSA9IGBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSR7dGhpcy5ib3VuZGFyeX1gO1xuICAgICAgICAvLyAtLWJhdGNoX3tiYXRjaGlkfS0tXG4gICAgICAgIHRoaXMuYmF0Y2hSZXF1ZXN0RW5kaW5nID0gYC0tJHt0aGlzLmJvdW5kYXJ5fS0tYDtcbiAgICAgICAgdGhpcy5zdWJSZXF1ZXN0cyA9IG5ldyBNYXAoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIHBpcGVsaW5lIHRvIGFzc2VtYmxlIHN1YiByZXF1ZXN0cy4gVGhlIGlkZWEgaGVyZSBpcyB0byB1c2UgZXhpc3RpbmdcbiAgICAgKiBjcmVkZW50aWFsIGFuZCBzZXJpYWxpemF0aW9uL2Rlc2VyaWFsaXphdGlvbiBjb21wb25lbnRzLCB3aXRoIGFkZGl0aW9uYWwgcG9saWNpZXMgdG9cbiAgICAgKiBmaWx0ZXIgdW5uZWNlc3NhcnkgaGVhZGVycywgYXNzZW1ibGUgc3ViIHJlcXVlc3RzIGludG8gcmVxdWVzdCdzIGJvZHlcbiAgICAgKiBhbmQgaW50ZXJjZXB0IHJlcXVlc3QgZnJvbSBnb2luZyB0byB3aXJlLlxuICAgICAqIEBwYXJhbSBjcmVkZW50aWFsIC0gIFN1Y2ggYXMgQW5vbnltb3VzQ3JlZGVudGlhbCwgU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwgb3IgYW55IGNyZWRlbnRpYWwgZnJvbSB0aGUgYEBhenVyZS9pZGVudGl0eWAgcGFja2FnZSB0byBhdXRoZW50aWNhdGUgcmVxdWVzdHMgdG8gdGhlIHNlcnZpY2UuIFlvdSBjYW4gYWxzbyBwcm92aWRlIGFuIG9iamVjdCB0aGF0IGltcGxlbWVudHMgdGhlIFRva2VuQ3JlZGVudGlhbCBpbnRlcmZhY2UuIElmIG5vdCBzcGVjaWZpZWQsIEFub255bW91c0NyZWRlbnRpYWwgaXMgdXNlZC5cbiAgICAgKi9cbiAgICBjcmVhdGVQaXBlbGluZShjcmVkZW50aWFsKSB7XG4gICAgICAgIGNvbnN0IGNvcmVQaXBlbGluZSA9IGNvcmVSZXN0UGlwZWxpbmUuY3JlYXRlRW1wdHlQaXBlbGluZSgpO1xuICAgICAgICBjb3JlUGlwZWxpbmUuYWRkUG9saWN5KGNvcmVDbGllbnQuc2VyaWFsaXphdGlvblBvbGljeSh7XG4gICAgICAgICAgICBzdHJpbmdpZnlYTUw6IGNvcmVYbWwuc3RyaW5naWZ5WE1MLFxuICAgICAgICAgICAgc2VyaWFsaXplck9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICB4bWw6IHtcbiAgICAgICAgICAgICAgICAgICAgeG1sQ2hhcktleTogXCIjXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pLCB7IHBoYXNlOiBcIlNlcmlhbGl6ZVwiIH0pO1xuICAgICAgICAvLyBVc2UgYmF0Y2ggaGVhZGVyIGZpbHRlciBwb2xpY3kgdG8gZXhjbHVkZSB1bm5lY2Vzc2FyeSBoZWFkZXJzXG4gICAgICAgIGNvcmVQaXBlbGluZS5hZGRQb2xpY3koYmF0Y2hIZWFkZXJGaWx0ZXJQb2xpY3koKSk7XG4gICAgICAgIC8vIFVzZSBiYXRjaCBhc3NlbWJsZSBwb2xpY3kgdG8gYXNzZW1ibGUgcmVxdWVzdCBhbmQgaW50ZXJjZXB0IHJlcXVlc3QgZnJvbSBnb2luZyB0byB3aXJlXG4gICAgICAgIGNvcmVQaXBlbGluZS5hZGRQb2xpY3koYmF0Y2hSZXF1ZXN0QXNzZW1ibGVQb2xpY3kodGhpcyksIHsgYWZ0ZXJQaGFzZTogXCJTaWduXCIgfSk7XG4gICAgICAgIGlmIChjb3JlQXV0aC5pc1Rva2VuQ3JlZGVudGlhbChjcmVkZW50aWFsKSkge1xuICAgICAgICAgICAgY29yZVBpcGVsaW5lLmFkZFBvbGljeShjb3JlUmVzdFBpcGVsaW5lLmJlYXJlclRva2VuQXV0aGVudGljYXRpb25Qb2xpY3koe1xuICAgICAgICAgICAgICAgIGNyZWRlbnRpYWwsXG4gICAgICAgICAgICAgICAgc2NvcGVzOiBTdG9yYWdlT0F1dGhTY29wZXMsXG4gICAgICAgICAgICAgICAgY2hhbGxlbmdlQ2FsbGJhY2tzOiB7IGF1dGhvcml6ZVJlcXVlc3RPbkNoYWxsZW5nZTogY29yZUNsaWVudC5hdXRob3JpemVSZXF1ZXN0T25UZW5hbnRDaGFsbGVuZ2UgfSxcbiAgICAgICAgICAgIH0pLCB7IHBoYXNlOiBcIlNpZ25cIiB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjcmVkZW50aWFsIGluc3RhbmNlb2YgU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwpIHtcbiAgICAgICAgICAgIGNvcmVQaXBlbGluZS5hZGRQb2xpY3koc3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWxQb2xpY3koe1xuICAgICAgICAgICAgICAgIGFjY291bnROYW1lOiBjcmVkZW50aWFsLmFjY291bnROYW1lLFxuICAgICAgICAgICAgICAgIGFjY291bnRLZXk6IGNyZWRlbnRpYWwuYWNjb3VudEtleSxcbiAgICAgICAgICAgIH0pLCB7IHBoYXNlOiBcIlNpZ25cIiB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwaXBlbGluZSA9IG5ldyBQaXBlbGluZShbXSk7XG4gICAgICAgIC8vIGF0dGFjaCB0aGUgdjIgcGlwZWxpbmUgdG8gdGhpcyBvbmVcbiAgICAgICAgcGlwZWxpbmUuX2NyZWRlbnRpYWwgPSBjcmVkZW50aWFsO1xuICAgICAgICBwaXBlbGluZS5fY29yZVBpcGVsaW5lID0gY29yZVBpcGVsaW5lO1xuICAgICAgICByZXR1cm4gcGlwZWxpbmU7XG4gICAgfVxuICAgIGFwcGVuZFN1YlJlcXVlc3RUb0JvZHkocmVxdWVzdCkge1xuICAgICAgICAvLyBTdGFydCB0byBhc3NlbWJsZSBzdWIgcmVxdWVzdFxuICAgICAgICB0aGlzLmJvZHkgKz0gW1xuICAgICAgICAgICAgdGhpcy5zdWJSZXF1ZXN0UHJlZml4LCAvLyBzdWIgcmVxdWVzdCBjb25zdGFudCBwcmVmaXhcbiAgICAgICAgICAgIGAke0hlYWRlckNvbnN0YW50cy5DT05URU5UX0lEfTogJHt0aGlzLm9wZXJhdGlvbkNvdW50fWAsIC8vIHN1YiByZXF1ZXN0J3MgY29udGVudCBJRFxuICAgICAgICAgICAgXCJcIiwgLy8gZW1wdHkgbGluZSBhZnRlciBzdWIgcmVxdWVzdCdzIGNvbnRlbnQgSURcbiAgICAgICAgICAgIGAke3JlcXVlc3QubWV0aG9kLnRvU3RyaW5nKCl9ICR7Z2V0VVJMUGF0aEFuZFF1ZXJ5KHJlcXVlc3QudXJsKX0gJHtIVFRQX1ZFUlNJT05fMV8xfSR7SFRUUF9MSU5FX0VORElOR31gLCAvLyBzdWIgcmVxdWVzdCBzdGFydCBsaW5lIHdpdGggbWV0aG9kXG4gICAgICAgIF0uam9pbihIVFRQX0xJTkVfRU5ESU5HKTtcbiAgICAgICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIHJlcXVlc3QuaGVhZGVycykge1xuICAgICAgICAgICAgdGhpcy5ib2R5ICs9IGAke25hbWV9OiAke3ZhbHVlfSR7SFRUUF9MSU5FX0VORElOR31gO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYm9keSArPSBIVFRQX0xJTkVfRU5ESU5HOyAvLyBzdWIgcmVxdWVzdCdzIGhlYWRlcnMgbmVlZCBiZSBlbmRpbmcgd2l0aCBhbiBlbXB0eSBsaW5lXG4gICAgICAgIC8vIE5vIGJvZHkgdG8gYXNzZW1ibGUgZm9yIGN1cnJlbnQgYmF0Y2ggcmVxdWVzdCBzdXBwb3J0XG4gICAgICAgIC8vIEVuZCB0byBhc3NlbWJsZSBzdWIgcmVxdWVzdFxuICAgIH1cbiAgICBwcmVBZGRTdWJSZXF1ZXN0KHN1YlJlcXVlc3QpIHtcbiAgICAgICAgaWYgKHRoaXMub3BlcmF0aW9uQ291bnQgPj0gQkFUQ0hfTUFYX1JFUVVFU1QpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBDYW5ub3QgZXhjZWVkICR7QkFUQ0hfTUFYX1JFUVVFU1R9IHN1YiByZXF1ZXN0cyBpbiBhIHNpbmdsZSBiYXRjaGApO1xuICAgICAgICB9XG4gICAgICAgIC8vIEZhc3QgZmFpbCBpZiB1cmwgZm9yIHN1YiByZXF1ZXN0IGlzIGludmFsaWRcbiAgICAgICAgY29uc3QgcGF0aCA9IGdldFVSTFBhdGgoc3ViUmVxdWVzdC51cmwpO1xuICAgICAgICBpZiAoIXBhdGggfHwgcGF0aCA9PT0gXCJcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEludmFsaWQgdXJsIGZvciBzdWIgcmVxdWVzdDogJyR7c3ViUmVxdWVzdC51cmx9J2ApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHBvc3RBZGRTdWJSZXF1ZXN0KHN1YlJlcXVlc3QpIHtcbiAgICAgICAgdGhpcy5zdWJSZXF1ZXN0cy5zZXQodGhpcy5vcGVyYXRpb25Db3VudCwgc3ViUmVxdWVzdCk7XG4gICAgICAgIHRoaXMub3BlcmF0aW9uQ291bnQrKztcbiAgICB9XG4gICAgLy8gUmV0dXJuIHRoZSBodHRwIHJlcXVlc3QgYm9keSB3aXRoIGFzc2VtYmxpbmcgdGhlIGVuZGluZyBsaW5lIHRvIHRoZSBzdWIgcmVxdWVzdCBib2R5LlxuICAgIGdldEh0dHBSZXF1ZXN0Qm9keSgpIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuYm9keX0ke3RoaXMuYmF0Y2hSZXF1ZXN0RW5kaW5nfSR7SFRUUF9MSU5FX0VORElOR31gO1xuICAgIH1cbiAgICBnZXRNdWx0aXBhcnRDb250ZW50VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubXVsdGlwYXJ0Q29udGVudFR5cGU7XG4gICAgfVxuICAgIGdldFN1YlJlcXVlc3RzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdWJSZXF1ZXN0cztcbiAgICB9XG59XG5mdW5jdGlvbiBiYXRjaFJlcXVlc3RBc3NlbWJsZVBvbGljeShiYXRjaFJlcXVlc3QpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBcImJhdGNoUmVxdWVzdEFzc2VtYmxlUG9saWN5XCIsXG4gICAgICAgIGFzeW5jIHNlbmRSZXF1ZXN0KHJlcXVlc3QpIHtcbiAgICAgICAgICAgIGJhdGNoUmVxdWVzdC5hcHBlbmRTdWJSZXF1ZXN0VG9Cb2R5KHJlcXVlc3QpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICByZXF1ZXN0LFxuICAgICAgICAgICAgICAgIHN0YXR1czogMjAwLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGNvcmVSZXN0UGlwZWxpbmUuY3JlYXRlSHR0cEhlYWRlcnMoKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGJhdGNoSGVhZGVyRmlsdGVyUG9saWN5KCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IFwiYmF0Y2hIZWFkZXJGaWx0ZXJQb2xpY3lcIixcbiAgICAgICAgYXN5bmMgc2VuZFJlcXVlc3QocmVxdWVzdCwgbmV4dCkge1xuICAgICAgICAgICAgbGV0IHhNc0hlYWRlck5hbWUgPSBcIlwiO1xuICAgICAgICAgICAgZm9yIChjb25zdCBbbmFtZV0gb2YgcmVxdWVzdC5oZWFkZXJzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlFcXVhbChuYW1lLCBIZWFkZXJDb25zdGFudHMuWF9NU19WRVJTSU9OKSkge1xuICAgICAgICAgICAgICAgICAgICB4TXNIZWFkZXJOYW1lID0gbmFtZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoeE1zSGVhZGVyTmFtZSAhPT0gXCJcIikge1xuICAgICAgICAgICAgICAgIHJlcXVlc3QuaGVhZGVycy5kZWxldGUoeE1zSGVhZGVyTmFtZSk7IC8vIFRoZSBzdWJyZXF1ZXN0cyBzaG91bGQgbm90IGhhdmUgdGhlIHgtbXMtdmVyc2lvbiBoZWFkZXIuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV4dChyZXF1ZXN0KTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKlxuICogQSBCbG9iQmF0Y2hDbGllbnQgYWxsb3dzIHlvdSB0byBtYWtlIGJhdGNoZWQgcmVxdWVzdHMgdG8gdGhlIEF6dXJlIFN0b3JhZ2UgQmxvYiBzZXJ2aWNlLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2Jsb2ItYmF0Y2hcbiAqL1xuY2xhc3MgQmxvYkJhdGNoQ2xpZW50IHtcbiAgICBjb25zdHJ1Y3Rvcih1cmwsIGNyZWRlbnRpYWxPclBpcGVsaW5lLCBcbiAgICAvLyBMZWdhY3ksIG5vIGZpeCBmb3IgZXNsaW50IGVycm9yIHdpdGhvdXQgYnJlYWtpbmcuIERpc2FibGUgaXQgZm9yIHRoaXMgaW50ZXJmYWNlLlxuICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYXp1cmUvYXp1cmUtc2RrL3RzLW5hbWluZy1vcHRpb25zKi9cbiAgICBvcHRpb25zKSB7XG4gICAgICAgIGxldCBwaXBlbGluZTtcbiAgICAgICAgaWYgKGlzUGlwZWxpbmVMaWtlKGNyZWRlbnRpYWxPclBpcGVsaW5lKSkge1xuICAgICAgICAgICAgcGlwZWxpbmUgPSBjcmVkZW50aWFsT3JQaXBlbGluZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghY3JlZGVudGlhbE9yUGlwZWxpbmUpIHtcbiAgICAgICAgICAgIC8vIG5vIGNyZWRlbnRpYWwgcHJvdmlkZWRcbiAgICAgICAgICAgIHBpcGVsaW5lID0gbmV3UGlwZWxpbmUobmV3IEFub255bW91c0NyZWRlbnRpYWwoKSwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBwaXBlbGluZSA9IG5ld1BpcGVsaW5lKGNyZWRlbnRpYWxPclBpcGVsaW5lLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdG9yYWdlQ2xpZW50Q29udGV4dCA9IG5ldyBTdG9yYWdlQ29udGV4dENsaWVudCh1cmwsIGdldENvcmVDbGllbnRPcHRpb25zKHBpcGVsaW5lKSk7XG4gICAgICAgIGNvbnN0IHBhdGggPSBnZXRVUkxQYXRoKHVybCk7XG4gICAgICAgIGlmIChwYXRoICYmIHBhdGggIT09IFwiL1wiKSB7XG4gICAgICAgICAgICAvLyBDb250YWluZXIgc2NvcGVkLlxuICAgICAgICAgICAgdGhpcy5zZXJ2aWNlT3JDb250YWluZXJDb250ZXh0ID0gc3RvcmFnZUNsaWVudENvbnRleHQuY29udGFpbmVyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXJ2aWNlT3JDb250YWluZXJDb250ZXh0ID0gc3RvcmFnZUNsaWVudENvbnRleHQuc2VydmljZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEge0BsaW5rIEJsb2JCYXRjaH0uXG4gICAgICogQSBCbG9iQmF0Y2ggcmVwcmVzZW50cyBhbiBhZ2dyZWdhdGVkIHNldCBvZiBvcGVyYXRpb25zIG9uIGJsb2JzLlxuICAgICAqL1xuICAgIGNyZWF0ZUJhdGNoKCkge1xuICAgICAgICByZXR1cm4gbmV3IEJsb2JCYXRjaCgpO1xuICAgIH1cbiAgICBhc3luYyBkZWxldGVCbG9icyh1cmxzT3JCbG9iQ2xpZW50cywgY3JlZGVudGlhbE9yT3B0aW9ucywgXG4gICAgLy8gTGVnYWN5LCBubyBmaXggZm9yIGVzbGludCBlcnJvciB3aXRob3V0IGJyZWFraW5nLiBEaXNhYmxlIGl0IGZvciB0aGlzIGludGVyZmFjZS5cbiAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGF6dXJlL2F6dXJlLXNkay90cy1uYW1pbmctb3B0aW9ucyovXG4gICAgb3B0aW9ucykge1xuICAgICAgICBjb25zdCBiYXRjaCA9IG5ldyBCbG9iQmF0Y2goKTtcbiAgICAgICAgZm9yIChjb25zdCB1cmxPckJsb2JDbGllbnQgb2YgdXJsc09yQmxvYkNsaWVudHMpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdXJsT3JCbG9iQ2xpZW50ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgYmF0Y2guZGVsZXRlQmxvYih1cmxPckJsb2JDbGllbnQsIGNyZWRlbnRpYWxPck9wdGlvbnMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgYmF0Y2guZGVsZXRlQmxvYih1cmxPckJsb2JDbGllbnQsIGNyZWRlbnRpYWxPck9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnN1Ym1pdEJhdGNoKGJhdGNoKTtcbiAgICB9XG4gICAgYXN5bmMgc2V0QmxvYnNBY2Nlc3NUaWVyKHVybHNPckJsb2JDbGllbnRzLCBjcmVkZW50aWFsT3JUaWVyLCB0aWVyT3JPcHRpb25zLCBcbiAgICAvLyBMZWdhY3ksIG5vIGZpeCBmb3IgZXNsaW50IGVycm9yIHdpdGhvdXQgYnJlYWtpbmcuIERpc2FibGUgaXQgZm9yIHRoaXMgaW50ZXJmYWNlLlxuICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYXp1cmUvYXp1cmUtc2RrL3RzLW5hbWluZy1vcHRpb25zKi9cbiAgICBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGJhdGNoID0gbmV3IEJsb2JCYXRjaCgpO1xuICAgICAgICBmb3IgKGNvbnN0IHVybE9yQmxvYkNsaWVudCBvZiB1cmxzT3JCbG9iQ2xpZW50cykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB1cmxPckJsb2JDbGllbnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBiYXRjaC5zZXRCbG9iQWNjZXNzVGllcih1cmxPckJsb2JDbGllbnQsIGNyZWRlbnRpYWxPclRpZXIsIHRpZXJPck9wdGlvbnMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgYmF0Y2guc2V0QmxvYkFjY2Vzc1RpZXIodXJsT3JCbG9iQ2xpZW50LCBjcmVkZW50aWFsT3JUaWVyLCB0aWVyT3JPcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5zdWJtaXRCYXRjaChiYXRjaCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN1Ym1pdCBiYXRjaCByZXF1ZXN0IHdoaWNoIGNvbnNpc3RzIG9mIG11bHRpcGxlIHN1YnJlcXVlc3RzLlxuICAgICAqXG4gICAgICogR2V0IGBibG9iQmF0Y2hDbGllbnRgIGFuZCBvdGhlciBkZXRhaWxzIGJlZm9yZSBydW5uaW5nIHRoZSBzbmlwcGV0cy5cbiAgICAgKiBgYmxvYlNlcnZpY2VDbGllbnQuZ2V0QmxvYkJhdGNoQ2xpZW50KClgIGdpdmVzIHRoZSBgYmxvYkJhdGNoQ2xpZW50YFxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2FnZTpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogbGV0IGJhdGNoUmVxdWVzdCA9IG5ldyBCbG9iQmF0Y2goKTtcbiAgICAgKiBhd2FpdCBiYXRjaFJlcXVlc3QuZGVsZXRlQmxvYih1cmxJblN0cmluZzAsIGNyZWRlbnRpYWwwKTtcbiAgICAgKiBhd2FpdCBiYXRjaFJlcXVlc3QuZGVsZXRlQmxvYih1cmxJblN0cmluZzEsIGNyZWRlbnRpYWwxLCB7XG4gICAgICogIGRlbGV0ZVNuYXBzaG90czogXCJpbmNsdWRlXCJcbiAgICAgKiB9KTtcbiAgICAgKiBjb25zdCBiYXRjaFJlc3AgPSBhd2FpdCBibG9iQmF0Y2hDbGllbnQuc3VibWl0QmF0Y2goYmF0Y2hSZXF1ZXN0KTtcbiAgICAgKiBjb25zb2xlLmxvZyhiYXRjaFJlc3Auc3ViUmVzcG9uc2VzU3VjY2VlZGVkQ291bnQpO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBhIGxlYXNlOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBsZXQgYmF0Y2hSZXF1ZXN0ID0gbmV3IEJsb2JCYXRjaCgpO1xuICAgICAqIGF3YWl0IGJhdGNoUmVxdWVzdC5zZXRCbG9iQWNjZXNzVGllcihibG9ja0Jsb2JDbGllbnQwLCBcIkNvb2xcIik7XG4gICAgICogYXdhaXQgYmF0Y2hSZXF1ZXN0LnNldEJsb2JBY2Nlc3NUaWVyKGJsb2NrQmxvYkNsaWVudDEsIFwiQ29vbFwiLCB7XG4gICAgICogIGNvbmRpdGlvbnM6IHsgbGVhc2VJZDogbGVhc2VJZCB9XG4gICAgICogfSk7XG4gICAgICogY29uc3QgYmF0Y2hSZXNwID0gYXdhaXQgYmxvYkJhdGNoQ2xpZW50LnN1Ym1pdEJhdGNoKGJhdGNoUmVxdWVzdCk7XG4gICAgICogY29uc29sZS5sb2coYmF0Y2hSZXNwLnN1YlJlc3BvbnNlc1N1Y2NlZWRlZENvdW50KTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2Jsb2ItYmF0Y2hcbiAgICAgKlxuICAgICAqIEBwYXJhbSBiYXRjaFJlcXVlc3QgLSBBIHNldCBvZiBEZWxldGUgb3IgU2V0VGllciBvcGVyYXRpb25zLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC1cbiAgICAgKi9cbiAgICBhc3luYyBzdWJtaXRCYXRjaChiYXRjaFJlcXVlc3QsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBpZiAoIWJhdGNoUmVxdWVzdCB8fCBiYXRjaFJlcXVlc3QuZ2V0U3ViUmVxdWVzdHMoKS5zaXplID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkJhdGNoIHJlcXVlc3Qgc2hvdWxkIGNvbnRhaW4gb25lIG9yIG1vcmUgc3ViIHJlcXVlc3RzLlwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JCYXRjaENsaWVudC1zdWJtaXRCYXRjaFwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJhdGNoUmVxdWVzdEJvZHkgPSBiYXRjaFJlcXVlc3QuZ2V0SHR0cFJlcXVlc3RCb2R5KCk7XG4gICAgICAgICAgICAvLyBTZXJ2aWNlU3VibWl0QmF0Y2hSZXNwb25zZU1vZGVsIGFuZCBDb250YWluZXJTdWJtaXRCYXRjaFJlc3BvbnNlIGFyZSBjb21wYXRpYmxlIGZvciBub3cuXG4gICAgICAgICAgICBjb25zdCByYXdCYXRjaFJlc3BvbnNlID0gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5zZXJ2aWNlT3JDb250YWluZXJDb250ZXh0LnN1Ym1pdEJhdGNoKHV0ZjhCeXRlTGVuZ3RoKGJhdGNoUmVxdWVzdEJvZHkpLCBiYXRjaFJlcXVlc3QuZ2V0TXVsdGlQYXJ0Q29udGVudFR5cGUoKSwgYmF0Y2hSZXF1ZXN0Qm9keSwgT2JqZWN0LmFzc2lnbih7fSwgdXBkYXRlZE9wdGlvbnMpKSk7XG4gICAgICAgICAgICAvLyBQYXJzZSB0aGUgc3ViIHJlc3BvbnNlcyByZXN1bHQsIGlmIGxvZ2ljIHJlYWNoZXMgaGVyZShpLmUuIHRoZSBiYXRjaCByZXF1ZXN0IHN1Y2NlZWRlZCB3aXRoIHN0YXR1cyBjb2RlIDIwMikuXG4gICAgICAgICAgICBjb25zdCBiYXRjaFJlc3BvbnNlUGFyc2VyID0gbmV3IEJhdGNoUmVzcG9uc2VQYXJzZXIocmF3QmF0Y2hSZXNwb25zZSwgYmF0Y2hSZXF1ZXN0LmdldFN1YlJlcXVlc3RzKCkpO1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2VTdW1tYXJ5ID0gYXdhaXQgYmF0Y2hSZXNwb25zZVBhcnNlci5wYXJzZUJhdGNoUmVzcG9uc2UoKTtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IHtcbiAgICAgICAgICAgICAgICBfcmVzcG9uc2U6IHJhd0JhdGNoUmVzcG9uc2UuX3Jlc3BvbnNlLFxuICAgICAgICAgICAgICAgIGNvbnRlbnRUeXBlOiByYXdCYXRjaFJlc3BvbnNlLmNvbnRlbnRUeXBlLFxuICAgICAgICAgICAgICAgIGVycm9yQ29kZTogcmF3QmF0Y2hSZXNwb25zZS5lcnJvckNvZGUsXG4gICAgICAgICAgICAgICAgcmVxdWVzdElkOiByYXdCYXRjaFJlc3BvbnNlLnJlcXVlc3RJZCxcbiAgICAgICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHJhd0JhdGNoUmVzcG9uc2UuY2xpZW50UmVxdWVzdElkLFxuICAgICAgICAgICAgICAgIHZlcnNpb246IHJhd0JhdGNoUmVzcG9uc2UudmVyc2lvbixcbiAgICAgICAgICAgICAgICBzdWJSZXNwb25zZXM6IHJlc3BvbnNlU3VtbWFyeS5zdWJSZXNwb25zZXMsXG4gICAgICAgICAgICAgICAgc3ViUmVzcG9uc2VzU3VjY2VlZGVkQ291bnQ6IHJlc3BvbnNlU3VtbWFyeS5zdWJSZXNwb25zZXNTdWNjZWVkZWRDb3VudCxcbiAgICAgICAgICAgICAgICBzdWJSZXNwb25zZXNGYWlsZWRDb3VudDogcmVzcG9uc2VTdW1tYXJ5LnN1YlJlc3BvbnNlc0ZhaWxlZENvdW50LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuLyoqXG4gKiBBIENvbnRhaW5lckNsaWVudCByZXByZXNlbnRzIGEgVVJMIHRvIHRoZSBBenVyZSBTdG9yYWdlIGNvbnRhaW5lciBhbGxvd2luZyB5b3UgdG8gbWFuaXB1bGF0ZSBpdHMgYmxvYnMuXG4gKi9cbmNsYXNzIENvbnRhaW5lckNsaWVudCBleHRlbmRzIFN0b3JhZ2VDbGllbnQge1xuICAgIC8qKlxuICAgICAqIFRoZSBuYW1lIG9mIHRoZSBjb250YWluZXIuXG4gICAgICovXG4gICAgZ2V0IGNvbnRhaW5lck5hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb250YWluZXJOYW1lO1xuICAgIH1cbiAgICBjb25zdHJ1Y3Rvcih1cmxPckNvbm5lY3Rpb25TdHJpbmcsIGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lLCBcbiAgICAvLyBMZWdhY3ksIG5vIGZpeCBmb3IgZXNsaW50IGVycm9yIHdpdGhvdXQgYnJlYWtpbmcuIERpc2FibGUgaXQgZm9yIHRoaXMgaW50ZXJmYWNlLlxuICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYXp1cmUvYXp1cmUtc2RrL3RzLW5hbWluZy1vcHRpb25zKi9cbiAgICBvcHRpb25zKSB7XG4gICAgICAgIGxldCBwaXBlbGluZTtcbiAgICAgICAgbGV0IHVybDtcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgICAgIGlmIChpc1BpcGVsaW5lTGlrZShjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSkpIHtcbiAgICAgICAgICAgIC8vICh1cmw6IHN0cmluZywgcGlwZWxpbmU6IFBpcGVsaW5lKVxuICAgICAgICAgICAgdXJsID0gdXJsT3JDb25uZWN0aW9uU3RyaW5nO1xuICAgICAgICAgICAgcGlwZWxpbmUgPSBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICgoY29yZVV0aWwuaXNOb2RlICYmIGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lIGluc3RhbmNlb2YgU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwpIHx8XG4gICAgICAgICAgICBjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSBpbnN0YW5jZW9mIEFub255bW91c0NyZWRlbnRpYWwgfHxcbiAgICAgICAgICAgIGNvcmVBdXRoLmlzVG9rZW5DcmVkZW50aWFsKGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lKSkge1xuICAgICAgICAgICAgLy8gKHVybDogc3RyaW5nLCBjcmVkZW50aWFsPzogU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwgfCBBbm9ueW1vdXNDcmVkZW50aWFsIHwgVG9rZW5DcmVkZW50aWFsLCBvcHRpb25zPzogU3RvcmFnZVBpcGVsaW5lT3B0aW9ucylcbiAgICAgICAgICAgIHVybCA9IHVybE9yQ29ubmVjdGlvblN0cmluZztcbiAgICAgICAgICAgIHBpcGVsaW5lID0gbmV3UGlwZWxpbmUoY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFjcmVkZW50aWFsT3JQaXBlbGluZU9yQ29udGFpbmVyTmFtZSAmJlxuICAgICAgICAgICAgdHlwZW9mIGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAvLyAodXJsOiBzdHJpbmcsIGNyZWRlbnRpYWw/OiBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbCB8IEFub255bW91c0NyZWRlbnRpYWwgfCBUb2tlbkNyZWRlbnRpYWwsIG9wdGlvbnM/OiBTdG9yYWdlUGlwZWxpbmVPcHRpb25zKVxuICAgICAgICAgICAgLy8gVGhlIHNlY29uZCBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkLiBVc2UgYW5vbnltb3VzIGNyZWRlbnRpYWwuXG4gICAgICAgICAgICB1cmwgPSB1cmxPckNvbm5lY3Rpb25TdHJpbmc7XG4gICAgICAgICAgICBwaXBlbGluZSA9IG5ld1BpcGVsaW5lKG5ldyBBbm9ueW1vdXNDcmVkZW50aWFsKCksIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNyZWRlbnRpYWxPclBpcGVsaW5lT3JDb250YWluZXJOYW1lICYmXG4gICAgICAgICAgICB0eXBlb2YgY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIC8vIChjb25uZWN0aW9uU3RyaW5nOiBzdHJpbmcsIGNvbnRhaW5lck5hbWU6IHN0cmluZywgYmxvYk5hbWU6IHN0cmluZywgb3B0aW9ucz86IFN0b3JhZ2VQaXBlbGluZU9wdGlvbnMpXG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJOYW1lID0gY3JlZGVudGlhbE9yUGlwZWxpbmVPckNvbnRhaW5lck5hbWU7XG4gICAgICAgICAgICBjb25zdCBleHRyYWN0ZWRDcmVkcyA9IGV4dHJhY3RDb25uZWN0aW9uU3RyaW5nUGFydHModXJsT3JDb25uZWN0aW9uU3RyaW5nKTtcbiAgICAgICAgICAgIGlmIChleHRyYWN0ZWRDcmVkcy5raW5kID09PSBcIkFjY291bnRDb25uU3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29yZVV0aWwuaXNOb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNoYXJlZEtleUNyZWRlbnRpYWwgPSBuZXcgU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwoZXh0cmFjdGVkQ3JlZHMuYWNjb3VudE5hbWUsIGV4dHJhY3RlZENyZWRzLmFjY291bnRLZXkpO1xuICAgICAgICAgICAgICAgICAgICB1cmwgPSBhcHBlbmRUb1VSTFBhdGgoZXh0cmFjdGVkQ3JlZHMudXJsLCBlbmNvZGVVUklDb21wb25lbnQoY29udGFpbmVyTmFtZSkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMucHJveHlPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnByb3h5T3B0aW9ucyA9IGNvcmVSZXN0UGlwZWxpbmUuZ2V0RGVmYXVsdFByb3h5U2V0dGluZ3MoZXh0cmFjdGVkQ3JlZHMucHJveHlVcmkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHBpcGVsaW5lID0gbmV3UGlwZWxpbmUoc2hhcmVkS2V5Q3JlZGVudGlhbCwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBY2NvdW50IGNvbm5lY3Rpb24gc3RyaW5nIGlzIG9ubHkgc3VwcG9ydGVkIGluIE5vZGUuanMgZW52aXJvbm1lbnRcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZXh0cmFjdGVkQ3JlZHMua2luZCA9PT0gXCJTQVNDb25uU3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICB1cmwgPVxuICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb1VSTFBhdGgoZXh0cmFjdGVkQ3JlZHMudXJsLCBlbmNvZGVVUklDb21wb25lbnQoY29udGFpbmVyTmFtZSkpICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiP1wiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhY3RlZENyZWRzLmFjY291bnRTYXM7XG4gICAgICAgICAgICAgICAgcGlwZWxpbmUgPSBuZXdQaXBlbGluZShuZXcgQW5vbnltb3VzQ3JlZGVudGlhbCgpLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbm5lY3Rpb24gc3RyaW5nIG11c3QgYmUgZWl0aGVyIGFuIEFjY291bnQgY29ubmVjdGlvbiBzdHJpbmcgb3IgYSBTQVMgY29ubmVjdGlvbiBzdHJpbmdcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3Rpbmcgbm9uLWVtcHR5IHN0cmluZ3MgZm9yIGNvbnRhaW5lck5hbWUgcGFyYW1ldGVyXCIpO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyKHVybCwgcGlwZWxpbmUpO1xuICAgICAgICB0aGlzLl9jb250YWluZXJOYW1lID0gdGhpcy5nZXRDb250YWluZXJOYW1lRnJvbVVybCgpO1xuICAgICAgICB0aGlzLmNvbnRhaW5lckNvbnRleHQgPSB0aGlzLnN0b3JhZ2VDbGllbnRDb250ZXh0LmNvbnRhaW5lcjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBjb250YWluZXIgdW5kZXIgdGhlIHNwZWNpZmllZCBhY2NvdW50LiBJZiB0aGUgY29udGFpbmVyIHdpdGhcbiAgICAgKiB0aGUgc2FtZSBuYW1lIGFscmVhZHkgZXhpc3RzLCB0aGUgb3BlcmF0aW9uIGZhaWxzLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2NyZWF0ZS1jb250YWluZXJcbiAgICAgKiBOYW1pbmcgcnVsZXM6IEBzZWUgaHR0cHM6Ly9sZWFybi5taWNyb3NvZnQuY29tL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9uYW1pbmctYW5kLXJlZmVyZW5jaW5nLWNvbnRhaW5lcnMtLWJsb2JzLS1hbmQtbWV0YWRhdGFcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBDb250YWluZXIgQ3JlYXRlIG9wZXJhdGlvbi5cbiAgICAgKlxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2FnZTpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogY29uc3QgY29udGFpbmVyQ2xpZW50ID0gYmxvYlNlcnZpY2VDbGllbnQuZ2V0Q29udGFpbmVyQ2xpZW50KFwiPGNvbnRhaW5lciBuYW1lPlwiKTtcbiAgICAgKiBjb25zdCBjcmVhdGVDb250YWluZXJSZXNwb25zZSA9IGF3YWl0IGNvbnRhaW5lckNsaWVudC5jcmVhdGUoKTtcbiAgICAgKiBjb25zb2xlLmxvZyhcIkNvbnRhaW5lciB3YXMgY3JlYXRlZCBzdWNjZXNzZnVsbHlcIiwgY3JlYXRlQ29udGFpbmVyUmVzcG9uc2UucmVxdWVzdElkKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBhc3luYyBjcmVhdGUob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQ29udGFpbmVyQ2xpZW50LWNyZWF0ZVwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLmNvbnRhaW5lckNvbnRleHQuY3JlYXRlKHVwZGF0ZWRPcHRpb25zKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IGNvbnRhaW5lciB1bmRlciB0aGUgc3BlY2lmaWVkIGFjY291bnQuIElmIHRoZSBjb250YWluZXIgd2l0aFxuICAgICAqIHRoZSBzYW1lIG5hbWUgYWxyZWFkeSBleGlzdHMsIGl0IGlzIG5vdCBjaGFuZ2VkLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2NyZWF0ZS1jb250YWluZXJcbiAgICAgKiBOYW1pbmcgcnVsZXM6IEBzZWUgaHR0cHM6Ly9sZWFybi5taWNyb3NvZnQuY29tL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9uYW1pbmctYW5kLXJlZmVyZW5jaW5nLWNvbnRhaW5lcnMtLWJsb2JzLS1hbmQtbWV0YWRhdGFcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC1cbiAgICAgKi9cbiAgICBhc3luYyBjcmVhdGVJZk5vdEV4aXN0cyhvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJDb250YWluZXJDbGllbnQtY3JlYXRlSWZOb3RFeGlzdHNcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmNyZWF0ZSh1cGRhdGVkT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7IHN1Y2NlZWRlZDogdHJ1ZSB9LCByZXMpLCB7IF9yZXNwb25zZTogcmVzLl9yZXNwb25zZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCgoX2EgPSBlLmRldGFpbHMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5lcnJvckNvZGUpID09PSBcIkNvbnRhaW5lckFscmVhZHlFeGlzdHNcIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHsgc3VjY2VlZGVkOiBmYWxzZSB9LCAoX2IgPSBlLnJlc3BvbnNlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IucGFyc2VkSGVhZGVycyksIHsgX3Jlc3BvbnNlOiBlLnJlc3BvbnNlIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIEF6dXJlIGNvbnRhaW5lciByZXNvdXJjZSByZXByZXNlbnRlZCBieSB0aGlzIGNsaWVudCBleGlzdHM7IGZhbHNlIG90aGVyd2lzZS5cbiAgICAgKlxuICAgICAqIE5PVEU6IHVzZSB0aGlzIGZ1bmN0aW9uIHdpdGggY2FyZSBzaW5jZSBhbiBleGlzdGluZyBjb250YWluZXIgbWlnaHQgYmUgZGVsZXRlZCBieSBvdGhlciBjbGllbnRzIG9yXG4gICAgICogYXBwbGljYXRpb25zLiBWaWNlIHZlcnNhIG5ldyBjb250YWluZXJzIHdpdGggdGhlIHNhbWUgbmFtZSBtaWdodCBiZSBhZGRlZCBieSBvdGhlciBjbGllbnRzIG9yXG4gICAgICogYXBwbGljYXRpb25zIGFmdGVyIHRoaXMgZnVuY3Rpb24gY29tcGxldGVzLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLVxuICAgICAqL1xuICAgIGFzeW5jIGV4aXN0cyhvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJDb250YWluZXJDbGllbnQtZXhpc3RzXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmdldFByb3BlcnRpZXMoe1xuICAgICAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoZS5zdGF0dXNDb2RlID09PSA0MDQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHtAbGluayBCbG9iQ2xpZW50fVxuICAgICAqXG4gICAgICogQHBhcmFtIGJsb2JOYW1lIC0gQSBibG9iIG5hbWVcbiAgICAgKiBAcmV0dXJucyBBIG5ldyBCbG9iQ2xpZW50IG9iamVjdCBmb3IgdGhlIGdpdmVuIGJsb2IgbmFtZS5cbiAgICAgKi9cbiAgICBnZXRCbG9iQ2xpZW50KGJsb2JOYW1lKSB7XG4gICAgICAgIHJldHVybiBuZXcgQmxvYkNsaWVudChhcHBlbmRUb1VSTFBhdGgodGhpcy51cmwsIEVzY2FwZVBhdGgoYmxvYk5hbWUpKSwgdGhpcy5waXBlbGluZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4ge0BsaW5rIEFwcGVuZEJsb2JDbGllbnR9XG4gICAgICpcbiAgICAgKiBAcGFyYW0gYmxvYk5hbWUgLSBBbiBhcHBlbmQgYmxvYiBuYW1lXG4gICAgICovXG4gICAgZ2V0QXBwZW5kQmxvYkNsaWVudChibG9iTmFtZSkge1xuICAgICAgICByZXR1cm4gbmV3IEFwcGVuZEJsb2JDbGllbnQoYXBwZW5kVG9VUkxQYXRoKHRoaXMudXJsLCBFc2NhcGVQYXRoKGJsb2JOYW1lKSksIHRoaXMucGlwZWxpbmUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEge0BsaW5rIEJsb2NrQmxvYkNsaWVudH1cbiAgICAgKlxuICAgICAqIEBwYXJhbSBibG9iTmFtZSAtIEEgYmxvY2sgYmxvYiBuYW1lXG4gICAgICpcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNhZ2U6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnN0IGNvbnRlbnQgPSBcIkhlbGxvIHdvcmxkIVwiO1xuICAgICAqXG4gICAgICogY29uc3QgYmxvY2tCbG9iQ2xpZW50ID0gY29udGFpbmVyQ2xpZW50LmdldEJsb2NrQmxvYkNsaWVudChcIjxibG9iIG5hbWU+XCIpO1xuICAgICAqIGNvbnN0IHVwbG9hZEJsb2JSZXNwb25zZSA9IGF3YWl0IGJsb2NrQmxvYkNsaWVudC51cGxvYWQoY29udGVudCwgY29udGVudC5sZW5ndGgpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGdldEJsb2NrQmxvYkNsaWVudChibG9iTmFtZSkge1xuICAgICAgICByZXR1cm4gbmV3IEJsb2NrQmxvYkNsaWVudChhcHBlbmRUb1VSTFBhdGgodGhpcy51cmwsIEVzY2FwZVBhdGgoYmxvYk5hbWUpKSwgdGhpcy5waXBlbGluZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSB7QGxpbmsgUGFnZUJsb2JDbGllbnR9XG4gICAgICpcbiAgICAgKiBAcGFyYW0gYmxvYk5hbWUgLSBBIHBhZ2UgYmxvYiBuYW1lXG4gICAgICovXG4gICAgZ2V0UGFnZUJsb2JDbGllbnQoYmxvYk5hbWUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQYWdlQmxvYkNsaWVudChhcHBlbmRUb1VSTFBhdGgodGhpcy51cmwsIEVzY2FwZVBhdGgoYmxvYk5hbWUpKSwgdGhpcy5waXBlbGluZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYWxsIHVzZXItZGVmaW5lZCBtZXRhZGF0YSBhbmQgc3lzdGVtIHByb3BlcnRpZXMgZm9yIHRoZSBzcGVjaWZpZWRcbiAgICAgKiBjb250YWluZXIuIFRoZSBkYXRhIHJldHVybmVkIGRvZXMgbm90IGluY2x1ZGUgdGhlIGNvbnRhaW5lcidzIGxpc3Qgb2YgYmxvYnMuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvZ2V0LWNvbnRhaW5lci1wcm9wZXJ0aWVzXG4gICAgICpcbiAgICAgKiBXQVJOSU5HOiBUaGUgYG1ldGFkYXRhYCBvYmplY3QgcmV0dXJuZWQgaW4gdGhlIHJlc3BvbnNlIHdpbGwgaGF2ZSBpdHMga2V5cyBpbiBsb3dlcmNhc2UsIGV2ZW4gaWZcbiAgICAgKiB0aGV5IG9yaWdpbmFsbHkgY29udGFpbmVkIHVwcGVyY2FzZSBjaGFyYWN0ZXJzLiBUaGlzIGRpZmZlcnMgZnJvbSB0aGUgbWV0YWRhdGEga2V5cyByZXR1cm5lZCBieVxuICAgICAqIHRoZSBgbGlzdENvbnRhaW5lcnNgIG1ldGhvZCBvZiB7QGxpbmsgQmxvYlNlcnZpY2VDbGllbnR9IHVzaW5nIHRoZSBgaW5jbHVkZU1ldGFkYXRhYCBvcHRpb24sIHdoaWNoXG4gICAgICogd2lsbCByZXRhaW4gdGhlaXIgb3JpZ2luYWwgY2FzaW5nLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIENvbnRhaW5lciBHZXQgUHJvcGVydGllcyBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgZ2V0UHJvcGVydGllcyhvcHRpb25zID0ge30pIHtcbiAgICAgICAgaWYgKCFvcHRpb25zLmNvbmRpdGlvbnMpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuY29uZGl0aW9ucyA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQ29udGFpbmVyQ2xpZW50LWdldFByb3BlcnRpZXNcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5jb250YWluZXJDb250ZXh0LmdldFByb3BlcnRpZXMoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHsgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwgfSwgb3B0aW9ucy5jb25kaXRpb25zKSwgeyB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMgfSkpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1hcmtzIHRoZSBzcGVjaWZpZWQgY29udGFpbmVyIGZvciBkZWxldGlvbi4gVGhlIGNvbnRhaW5lciBhbmQgYW55IGJsb2JzXG4gICAgICogY29udGFpbmVkIHdpdGhpbiBpdCBhcmUgbGF0ZXIgZGVsZXRlZCBkdXJpbmcgZ2FyYmFnZSBjb2xsZWN0aW9uLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2RlbGV0ZS1jb250YWluZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBDb250YWluZXIgRGVsZXRlIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBkZWxldGUob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGlmICghb3B0aW9ucy5jb25kaXRpb25zKSB7XG4gICAgICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkNvbnRhaW5lckNsaWVudC1kZWxldGVcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5jb250YWluZXJDb250ZXh0LmRlbGV0ZSh7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgbGVhc2VBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgbW9kaWZpZWRBY2Nlc3NDb25kaXRpb25zOiBvcHRpb25zLmNvbmRpdGlvbnMsXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTWFya3MgdGhlIHNwZWNpZmllZCBjb250YWluZXIgZm9yIGRlbGV0aW9uIGlmIGl0IGV4aXN0cy4gVGhlIGNvbnRhaW5lciBhbmQgYW55IGJsb2JzXG4gICAgICogY29udGFpbmVkIHdpdGhpbiBpdCBhcmUgbGF0ZXIgZGVsZXRlZCBkdXJpbmcgZ2FyYmFnZSBjb2xsZWN0aW9uLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2RlbGV0ZS1jb250YWluZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBDb250YWluZXIgRGVsZXRlIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBkZWxldGVJZkV4aXN0cyhvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJDb250YWluZXJDbGllbnQtZGVsZXRlSWZFeGlzdHNcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmRlbGV0ZSh1cGRhdGVkT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7IHN1Y2NlZWRlZDogdHJ1ZSB9LCByZXMpLCB7IF9yZXNwb25zZTogcmVzLl9yZXNwb25zZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCgoX2EgPSBlLmRldGFpbHMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5lcnJvckNvZGUpID09PSBcIkNvbnRhaW5lck5vdEZvdW5kXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7IHN1Y2NlZWRlZDogZmFsc2UgfSwgKF9iID0gZS5yZXNwb25zZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnBhcnNlZEhlYWRlcnMpLCB7IF9yZXNwb25zZTogZS5yZXNwb25zZSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldHMgb25lIG9yIG1vcmUgdXNlci1kZWZpbmVkIG5hbWUtdmFsdWUgcGFpcnMgZm9yIHRoZSBzcGVjaWZpZWQgY29udGFpbmVyLlxuICAgICAqXG4gICAgICogSWYgbm8gb3B0aW9uIHByb3ZpZGVkLCBvciBubyBtZXRhZGF0YSBkZWZpbmVkIGluIHRoZSBwYXJhbWV0ZXIsIHRoZSBjb250YWluZXJcbiAgICAgKiBtZXRhZGF0YSB3aWxsIGJlIHJlbW92ZWQuXG4gICAgICpcbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9zZXQtY29udGFpbmVyLW1ldGFkYXRhXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbWV0YWRhdGEgLSBSZXBsYWNlIGV4aXN0aW5nIG1ldGFkYXRhIHdpdGggdGhpcyB2YWx1ZS5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBubyB2YWx1ZSBwcm92aWRlZCB0aGUgZXhpc3RpbmcgbWV0YWRhdGEgd2lsbCBiZSByZW1vdmVkLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBDb250YWluZXIgU2V0IE1ldGFkYXRhIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBzZXRNZXRhZGF0YShtZXRhZGF0YSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGlmICghb3B0aW9ucy5jb25kaXRpb25zKSB7XG4gICAgICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5jb25kaXRpb25zLmlmVW5tb2RpZmllZFNpbmNlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcInRoZSBJZlVubW9kaWZpZWRTaW5jZSBtdXN0IGhhdmUgdGhlaXIgZGVmYXVsdCB2YWx1ZXMgYmVjYXVzZSB0aGV5IGFyZSBpZ25vcmVkIGJ5IHRoZSBibG9iIHNlcnZpY2VcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJDb250YWluZXJDbGllbnQtc2V0TWV0YWRhdGFcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5jb250YWluZXJDb250ZXh0LnNldE1ldGFkYXRhKHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBtZXRhZGF0YSxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBwZXJtaXNzaW9ucyBmb3IgdGhlIHNwZWNpZmllZCBjb250YWluZXIuIFRoZSBwZXJtaXNzaW9ucyBpbmRpY2F0ZVxuICAgICAqIHdoZXRoZXIgY29udGFpbmVyIGRhdGEgbWF5IGJlIGFjY2Vzc2VkIHB1YmxpY2x5LlxuICAgICAqXG4gICAgICogV0FSTklORzogSmF2YVNjcmlwdCBEYXRlIHdpbGwgcG90ZW50aWFsbHkgbG9zZSBwcmVjaXNpb24gd2hlbiBwYXJzaW5nIHN0YXJ0c09uIGFuZCBleHBpcmVzT24gc3RyaW5ncy5cbiAgICAgKiBGb3IgZXhhbXBsZSwgbmV3IERhdGUoXCIyMDE4LTEyLTMxVDAzOjQ0OjIzLjg4Mjc4OTFaXCIpLnRvSVNPU3RyaW5nKCkgd2lsbCBnZXQgXCIyMDE4LTEyLTMxVDAzOjQ0OjIzLjg4MlpcIi5cbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2dldC1jb250YWluZXItYWNsXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gQ29udGFpbmVyIEdldCBBY2Nlc3MgUG9saWN5IG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBnZXRBY2Nlc3NQb2xpY3kob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGlmICghb3B0aW9ucy5jb25kaXRpb25zKSB7XG4gICAgICAgICAgICBvcHRpb25zLmNvbmRpdGlvbnMgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkNvbnRhaW5lckNsaWVudC1nZXRBY2Nlc3NQb2xpY3lcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuY29udGFpbmVyQ29udGV4dC5nZXRBY2Nlc3NQb2xpY3koe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGxlYXNlQWNjZXNzQ29uZGl0aW9uczogb3B0aW9ucy5jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IHtcbiAgICAgICAgICAgICAgICBfcmVzcG9uc2U6IHJlc3BvbnNlLl9yZXNwb25zZSxcbiAgICAgICAgICAgICAgICBibG9iUHVibGljQWNjZXNzOiByZXNwb25zZS5ibG9iUHVibGljQWNjZXNzLFxuICAgICAgICAgICAgICAgIGRhdGU6IHJlc3BvbnNlLmRhdGUsXG4gICAgICAgICAgICAgICAgZXRhZzogcmVzcG9uc2UuZXRhZyxcbiAgICAgICAgICAgICAgICBlcnJvckNvZGU6IHJlc3BvbnNlLmVycm9yQ29kZSxcbiAgICAgICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHJlc3BvbnNlLmxhc3RNb2RpZmllZCxcbiAgICAgICAgICAgICAgICByZXF1ZXN0SWQ6IHJlc3BvbnNlLnJlcXVlc3RJZCxcbiAgICAgICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHJlc3BvbnNlLmNsaWVudFJlcXVlc3RJZCxcbiAgICAgICAgICAgICAgICBzaWduZWRJZGVudGlmaWVyczogW10sXG4gICAgICAgICAgICAgICAgdmVyc2lvbjogcmVzcG9uc2UudmVyc2lvbixcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGlkZW50aWZpZXIgb2YgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBsZXQgYWNjZXNzUG9saWN5ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGlmIChpZGVudGlmaWVyLmFjY2Vzc1BvbGljeSkge1xuICAgICAgICAgICAgICAgICAgICBhY2Nlc3NQb2xpY3kgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwZXJtaXNzaW9uczogaWRlbnRpZmllci5hY2Nlc3NQb2xpY3kucGVybWlzc2lvbnMsXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGlmIChpZGVudGlmaWVyLmFjY2Vzc1BvbGljeS5leHBpcmVzT24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjY2Vzc1BvbGljeS5leHBpcmVzT24gPSBuZXcgRGF0ZShpZGVudGlmaWVyLmFjY2Vzc1BvbGljeS5leHBpcmVzT24pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChpZGVudGlmaWVyLmFjY2Vzc1BvbGljeS5zdGFydHNPbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXNzUG9saWN5LnN0YXJ0c09uID0gbmV3IERhdGUoaWRlbnRpZmllci5hY2Nlc3NQb2xpY3kuc3RhcnRzT24pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlcy5zaWduZWRJZGVudGlmaWVycy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgYWNjZXNzUG9saWN5LFxuICAgICAgICAgICAgICAgICAgICBpZDogaWRlbnRpZmllci5pZCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBwZXJtaXNzaW9ucyBmb3IgdGhlIHNwZWNpZmllZCBjb250YWluZXIuIFRoZSBwZXJtaXNzaW9ucyBpbmRpY2F0ZVxuICAgICAqIHdoZXRoZXIgYmxvYnMgaW4gYSBjb250YWluZXIgbWF5IGJlIGFjY2Vzc2VkIHB1YmxpY2x5LlxuICAgICAqXG4gICAgICogV2hlbiB5b3Ugc2V0IHBlcm1pc3Npb25zIGZvciBhIGNvbnRhaW5lciwgdGhlIGV4aXN0aW5nIHBlcm1pc3Npb25zIGFyZSByZXBsYWNlZC5cbiAgICAgKiBJZiBubyBhY2Nlc3Mgb3IgY29udGFpbmVyQWNsIHByb3ZpZGVkLCB0aGUgZXhpc3RpbmcgY29udGFpbmVyIEFDTCB3aWxsIGJlXG4gICAgICogcmVtb3ZlZC5cbiAgICAgKlxuICAgICAqIFdoZW4geW91IGVzdGFibGlzaCBhIHN0b3JlZCBhY2Nlc3MgcG9saWN5IG9uIGEgY29udGFpbmVyLCBpdCBtYXkgdGFrZSB1cCB0byAzMCBzZWNvbmRzIHRvIHRha2UgZWZmZWN0LlxuICAgICAqIER1cmluZyB0aGlzIGludGVydmFsLCBhIHNoYXJlZCBhY2Nlc3Mgc2lnbmF0dXJlIHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdG9yZWQgYWNjZXNzIHBvbGljeSB3aWxsXG4gICAgICogZmFpbCB3aXRoIHN0YXR1cyBjb2RlIDQwMyAoRm9yYmlkZGVuKSwgdW50aWwgdGhlIGFjY2VzcyBwb2xpY3kgYmVjb21lcyBhY3RpdmUuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvc2V0LWNvbnRhaW5lci1hY2xcbiAgICAgKlxuICAgICAqIEBwYXJhbSBhY2Nlc3MgLSBUaGUgbGV2ZWwgb2YgcHVibGljIGFjY2VzcyB0byBkYXRhIGluIHRoZSBjb250YWluZXIuXG4gICAgICogQHBhcmFtIGNvbnRhaW5lckFjbCAtIEFycmF5IG9mIGVsZW1lbnRzIGVhY2ggaGF2aW5nIGEgdW5pcXVlIElkIGFuZCBkZXRhaWxzIG9mIHRoZSBhY2Nlc3MgcG9saWN5LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBDb250YWluZXIgU2V0IEFjY2VzcyBQb2xpY3kgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIHNldEFjY2Vzc1BvbGljeShhY2Nlc3MsIGNvbnRhaW5lckFjbCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIG9wdGlvbnMuY29uZGl0aW9ucyA9IG9wdGlvbnMuY29uZGl0aW9ucyB8fCB7fTtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJDb250YWluZXJDbGllbnQtc2V0QWNjZXNzUG9saWN5XCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgY29uc3QgYWNsID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGlkZW50aWZpZXIgb2YgY29udGFpbmVyQWNsIHx8IFtdKSB7XG4gICAgICAgICAgICAgICAgYWNsLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBhY2Nlc3NQb2xpY3k6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGlyZXNPbjogaWRlbnRpZmllci5hY2Nlc3NQb2xpY3kuZXhwaXJlc09uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0cnVuY2F0ZWRJU084MDYxRGF0ZShpZGVudGlmaWVyLmFjY2Vzc1BvbGljeS5leHBpcmVzT24pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGVybWlzc2lvbnM6IGlkZW50aWZpZXIuYWNjZXNzUG9saWN5LnBlcm1pc3Npb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRzT246IGlkZW50aWZpZXIuYWNjZXNzUG9saWN5LnN0YXJ0c09uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0cnVuY2F0ZWRJU084MDYxRGF0ZShpZGVudGlmaWVyLmFjY2Vzc1BvbGljeS5zdGFydHNPbilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGlkOiBpZGVudGlmaWVyLmlkLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuY29udGFpbmVyQ29udGV4dC5zZXRBY2Nlc3NQb2xpY3koe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIGFjY2VzcyxcbiAgICAgICAgICAgICAgICBjb250YWluZXJBY2w6IGFjbCxcbiAgICAgICAgICAgICAgICBsZWFzZUFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEFjY2Vzc0NvbmRpdGlvbnM6IG9wdGlvbnMuY29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgYSB7QGxpbmsgQmxvYkxlYXNlQ2xpZW50fSB0aGF0IG1hbmFnZXMgbGVhc2VzIG9uIHRoZSBjb250YWluZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcG9zZUxlYXNlSWQgLSBJbml0aWFsIHByb3Bvc2VkIGxlYXNlIElkLlxuICAgICAqIEByZXR1cm5zIEEgbmV3IEJsb2JMZWFzZUNsaWVudCBvYmplY3QgZm9yIG1hbmFnaW5nIGxlYXNlcyBvbiB0aGUgY29udGFpbmVyLlxuICAgICAqL1xuICAgIGdldEJsb2JMZWFzZUNsaWVudChwcm9wb3NlTGVhc2VJZCkge1xuICAgICAgICByZXR1cm4gbmV3IEJsb2JMZWFzZUNsaWVudCh0aGlzLCBwcm9wb3NlTGVhc2VJZCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgYmxvY2sgYmxvYiwgb3IgdXBkYXRlcyB0aGUgY29udGVudCBvZiBhbiBleGlzdGluZyBibG9jayBibG9iLlxuICAgICAqXG4gICAgICogVXBkYXRpbmcgYW4gZXhpc3RpbmcgYmxvY2sgYmxvYiBvdmVyd3JpdGVzIGFueSBleGlzdGluZyBtZXRhZGF0YSBvbiB0aGUgYmxvYi5cbiAgICAgKiBQYXJ0aWFsIHVwZGF0ZXMgYXJlIG5vdCBzdXBwb3J0ZWQ7IHRoZSBjb250ZW50IG9mIHRoZSBleGlzdGluZyBibG9iIGlzXG4gICAgICogb3ZlcndyaXR0ZW4gd2l0aCB0aGUgbmV3IGNvbnRlbnQuIFRvIHBlcmZvcm0gYSBwYXJ0aWFsIHVwZGF0ZSBvZiBhIGJsb2NrIGJsb2IncyxcbiAgICAgKiB1c2Uge0BsaW5rIEJsb2NrQmxvYkNsaWVudC5zdGFnZUJsb2NrfSBhbmQge0BsaW5rIEJsb2NrQmxvYkNsaWVudC5jb21taXRCbG9ja0xpc3R9LlxuICAgICAqXG4gICAgICogVGhpcyBpcyBhIG5vbi1wYXJhbGxlbCB1cGxvYWRpbmcgbWV0aG9kLCBwbGVhc2UgdXNlIHtAbGluayBCbG9ja0Jsb2JDbGllbnQudXBsb2FkRmlsZX0sXG4gICAgICoge0BsaW5rIEJsb2NrQmxvYkNsaWVudC51cGxvYWRTdHJlYW19IG9yIHtAbGluayBCbG9ja0Jsb2JDbGllbnQudXBsb2FkQnJvd3NlckRhdGF9IGZvciBiZXR0ZXJcbiAgICAgKiBwZXJmb3JtYW5jZSB3aXRoIGNvbmN1cnJlbmN5IHVwbG9hZGluZy5cbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL3B1dC1ibG9iXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYmxvYk5hbWUgLSBOYW1lIG9mIHRoZSBibG9jayBibG9iIHRvIGNyZWF0ZSBvciB1cGRhdGUuXG4gICAgICogQHBhcmFtIGJvZHkgLSBCbG9iLCBzdHJpbmcsIEFycmF5QnVmZmVyLCBBcnJheUJ1ZmZlclZpZXcgb3IgYSBmdW5jdGlvblxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIHJldHVybnMgYSBuZXcgUmVhZGFibGUgc3RyZWFtIHdob3NlIG9mZnNldCBpcyBmcm9tIGRhdGEgc291cmNlIGJlZ2lubmluZy5cbiAgICAgKiBAcGFyYW0gY29udGVudExlbmd0aCAtIExlbmd0aCBvZiBib2R5IGluIGJ5dGVzLiBVc2UgQnVmZmVyLmJ5dGVMZW5ndGgoKSB0byBjYWxjdWxhdGUgYm9keSBsZW5ndGggZm9yIGFcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcgaW5jbHVkaW5nIG5vbiBub24tQmFzZTY0L0hleC1lbmNvZGVkIGNoYXJhY3RlcnMuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIGNvbmZpZ3VyZSB0aGUgQmxvY2sgQmxvYiBVcGxvYWQgb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIEJsb2NrIEJsb2IgdXBsb2FkIHJlc3BvbnNlIGRhdGEgYW5kIHRoZSBjb3JyZXNwb25kaW5nIEJsb2NrQmxvYkNsaWVudCBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBhc3luYyB1cGxvYWRCbG9ja0Jsb2IoYmxvYk5hbWUsIGJvZHksIGNvbnRlbnRMZW5ndGgsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkNvbnRhaW5lckNsaWVudC11cGxvYWRCbG9ja0Jsb2JcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBibG9ja0Jsb2JDbGllbnQgPSB0aGlzLmdldEJsb2NrQmxvYkNsaWVudChibG9iTmFtZSk7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGJsb2NrQmxvYkNsaWVudC51cGxvYWQoYm9keSwgY29udGVudExlbmd0aCwgdXBkYXRlZE9wdGlvbnMpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBibG9ja0Jsb2JDbGllbnQsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTWFya3MgdGhlIHNwZWNpZmllZCBibG9iIG9yIHNuYXBzaG90IGZvciBkZWxldGlvbi4gVGhlIGJsb2IgaXMgbGF0ZXIgZGVsZXRlZFxuICAgICAqIGR1cmluZyBnYXJiYWdlIGNvbGxlY3Rpb24uIE5vdGUgdGhhdCBpbiBvcmRlciB0byBkZWxldGUgYSBibG9iLCB5b3UgbXVzdCBkZWxldGVcbiAgICAgKiBhbGwgb2YgaXRzIHNuYXBzaG90cy4gWW91IGNhbiBkZWxldGUgYm90aCBhdCB0aGUgc2FtZSB0aW1lIHdpdGggdGhlIERlbGV0ZVxuICAgICAqIEJsb2Igb3BlcmF0aW9uLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2RlbGV0ZS1ibG9iXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYmxvYk5hbWUgLVxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBCbG9iIERlbGV0ZSBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgQmxvY2sgYmxvYiBkZWxldGlvbiByZXNwb25zZSBkYXRhLlxuICAgICAqL1xuICAgIGFzeW5jIGRlbGV0ZUJsb2IoYmxvYk5hbWUsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkNvbnRhaW5lckNsaWVudC1kZWxldGVCbG9iXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgbGV0IGJsb2JDbGllbnQgPSB0aGlzLmdldEJsb2JDbGllbnQoYmxvYk5hbWUpO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyc2lvbklkKSB7XG4gICAgICAgICAgICAgICAgYmxvYkNsaWVudCA9IGJsb2JDbGllbnQud2l0aFZlcnNpb24ob3B0aW9ucy52ZXJzaW9uSWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGJsb2JDbGllbnQuZGVsZXRlKHVwZGF0ZWRPcHRpb25zKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIGxpc3RCbG9iRmxhdFNlZ21lbnQgcmV0dXJucyBhIHNpbmdsZSBzZWdtZW50IG9mIGJsb2JzIHN0YXJ0aW5nIGZyb20gdGhlXG4gICAgICogc3BlY2lmaWVkIE1hcmtlci4gVXNlIGFuIGVtcHR5IE1hcmtlciB0byBzdGFydCBlbnVtZXJhdGlvbiBmcm9tIHRoZSBiZWdpbm5pbmcuXG4gICAgICogQWZ0ZXIgZ2V0dGluZyBhIHNlZ21lbnQsIHByb2Nlc3MgaXQsIGFuZCB0aGVuIGNhbGwgbGlzdEJsb2JzRmxhdFNlZ21lbnQgYWdhaW5cbiAgICAgKiAocGFzc2luZyB0aGUgdGhlIHByZXZpb3VzbHktcmV0dXJuZWQgTWFya2VyKSB0byBnZXQgdGhlIG5leHQgc2VnbWVudC5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9saXN0LWJsb2JzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbWFya2VyIC0gQSBzdHJpbmcgdmFsdWUgdGhhdCBpZGVudGlmaWVzIHRoZSBwb3J0aW9uIG9mIHRoZSBsaXN0IHRvIGJlIHJldHVybmVkIHdpdGggdGhlIG5leHQgbGlzdCBvcGVyYXRpb24uXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIENvbnRhaW5lciBMaXN0IEJsb2IgRmxhdCBTZWdtZW50IG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBsaXN0QmxvYkZsYXRTZWdtZW50KG1hcmtlciwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQ29udGFpbmVyQ2xpZW50LWxpc3RCbG9iRmxhdFNlZ21lbnRcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuY29udGFpbmVyQ29udGV4dC5saXN0QmxvYkZsYXRTZWdtZW50KE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7IG1hcmtlciB9LCBvcHRpb25zKSwgeyB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMgfSkpKTtcbiAgICAgICAgICAgIGNvbnN0IHdyYXBwZWRSZXNwb25zZSA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcmVzcG9uc2UpLCB7IF9yZXNwb25zZTogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCByZXNwb25zZS5fcmVzcG9uc2UpLCB7IHBhcnNlZEJvZHk6IENvbnZlcnRJbnRlcm5hbFJlc3BvbnNlT2ZMaXN0QmxvYkZsYXQocmVzcG9uc2UuX3Jlc3BvbnNlLnBhcnNlZEJvZHkpIH0pLCBzZWdtZW50OiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHJlc3BvbnNlLnNlZ21lbnQpLCB7IGJsb2JJdGVtczogcmVzcG9uc2Uuc2VnbWVudC5ibG9iSXRlbXMubWFwKChibG9iSXRlbUludGVybmFsKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9iSXRlbSA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYmxvYkl0ZW1JbnRlcm5hbCksIHsgbmFtZTogQmxvYk5hbWVUb1N0cmluZyhibG9iSXRlbUludGVybmFsLm5hbWUpLCB0YWdzOiB0b1RhZ3MoYmxvYkl0ZW1JbnRlcm5hbC5ibG9iVGFncyksIG9iamVjdFJlcGxpY2F0aW9uU291cmNlUHJvcGVydGllczogcGFyc2VPYmplY3RSZXBsaWNhdGlvblJlY29yZChibG9iSXRlbUludGVybmFsLm9iamVjdFJlcGxpY2F0aW9uTWV0YWRhdGEpIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJsb2JJdGVtO1xuICAgICAgICAgICAgICAgICAgICB9KSB9KSB9KTtcbiAgICAgICAgICAgIHJldHVybiB3cmFwcGVkUmVzcG9uc2U7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBsaXN0QmxvYkhpZXJhcmNoeVNlZ21lbnQgcmV0dXJucyBhIHNpbmdsZSBzZWdtZW50IG9mIGJsb2JzIHN0YXJ0aW5nIGZyb21cbiAgICAgKiB0aGUgc3BlY2lmaWVkIE1hcmtlci4gVXNlIGFuIGVtcHR5IE1hcmtlciB0byBzdGFydCBlbnVtZXJhdGlvbiBmcm9tIHRoZVxuICAgICAqIGJlZ2lubmluZy4gQWZ0ZXIgZ2V0dGluZyBhIHNlZ21lbnQsIHByb2Nlc3MgaXQsIGFuZCB0aGVuIGNhbGwgbGlzdEJsb2JzSGllcmFyY2hpY2FsU2VnbWVudFxuICAgICAqIGFnYWluIChwYXNzaW5nIHRoZSB0aGUgcHJldmlvdXNseS1yZXR1cm5lZCBNYXJrZXIpIHRvIGdldCB0aGUgbmV4dCBzZWdtZW50LlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2xpc3QtYmxvYnNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBkZWxpbWl0ZXIgLSBUaGUgY2hhcmFjdGVyIG9yIHN0cmluZyB1c2VkIHRvIGRlZmluZSB0aGUgdmlydHVhbCBoaWVyYXJjaHlcbiAgICAgKiBAcGFyYW0gbWFya2VyIC0gQSBzdHJpbmcgdmFsdWUgdGhhdCBpZGVudGlmaWVzIHRoZSBwb3J0aW9uIG9mIHRoZSBsaXN0IHRvIGJlIHJldHVybmVkIHdpdGggdGhlIG5leHQgbGlzdCBvcGVyYXRpb24uXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIENvbnRhaW5lciBMaXN0IEJsb2IgSGllcmFyY2h5IFNlZ21lbnQgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGxpc3RCbG9iSGllcmFyY2h5U2VnbWVudChkZWxpbWl0ZXIsIG1hcmtlciwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQ29udGFpbmVyQ2xpZW50LWxpc3RCbG9iSGllcmFyY2h5U2VnbWVudFwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5jb250YWluZXJDb250ZXh0Lmxpc3RCbG9iSGllcmFyY2h5U2VnbWVudChkZWxpbWl0ZXIsIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7IG1hcmtlciB9LCBvcHRpb25zKSwgeyB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMgfSkpKTtcbiAgICAgICAgICAgIGNvbnN0IHdyYXBwZWRSZXNwb25zZSA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcmVzcG9uc2UpLCB7IF9yZXNwb25zZTogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCByZXNwb25zZS5fcmVzcG9uc2UpLCB7IHBhcnNlZEJvZHk6IENvbnZlcnRJbnRlcm5hbFJlc3BvbnNlT2ZMaXN0QmxvYkhpZXJhcmNoeShyZXNwb25zZS5fcmVzcG9uc2UucGFyc2VkQm9keSkgfSksIHNlZ21lbnQ6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcmVzcG9uc2Uuc2VnbWVudCksIHsgYmxvYkl0ZW1zOiByZXNwb25zZS5zZWdtZW50LmJsb2JJdGVtcy5tYXAoKGJsb2JJdGVtSW50ZXJuYWwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2JJdGVtID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBibG9iSXRlbUludGVybmFsKSwgeyBuYW1lOiBCbG9iTmFtZVRvU3RyaW5nKGJsb2JJdGVtSW50ZXJuYWwubmFtZSksIHRhZ3M6IHRvVGFncyhibG9iSXRlbUludGVybmFsLmJsb2JUYWdzKSwgb2JqZWN0UmVwbGljYXRpb25Tb3VyY2VQcm9wZXJ0aWVzOiBwYXJzZU9iamVjdFJlcGxpY2F0aW9uUmVjb3JkKGJsb2JJdGVtSW50ZXJuYWwub2JqZWN0UmVwbGljYXRpb25NZXRhZGF0YSkgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYmxvYkl0ZW07XG4gICAgICAgICAgICAgICAgICAgIH0pLCBibG9iUHJlZml4ZXM6IChfYSA9IHJlc3BvbnNlLnNlZ21lbnQuYmxvYlByZWZpeGVzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubWFwKChibG9iUHJlZml4SW50ZXJuYWwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2JQcmVmaXggPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGJsb2JQcmVmaXhJbnRlcm5hbCksIHsgbmFtZTogQmxvYk5hbWVUb1N0cmluZyhibG9iUHJlZml4SW50ZXJuYWwubmFtZSkgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYmxvYlByZWZpeDtcbiAgICAgICAgICAgICAgICAgICAgfSkgfSkgfSk7XG4gICAgICAgICAgICByZXR1cm4gd3JhcHBlZFJlc3BvbnNlO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBBc3luY0l0ZXJhYmxlSXRlcmF0b3IgZm9yIENvbnRhaW5lckxpc3RCbG9iRmxhdFNlZ21lbnRSZXNwb25zZVxuICAgICAqXG4gICAgICogQHBhcmFtIG1hcmtlciAtIEEgc3RyaW5nIHZhbHVlIHRoYXQgaWRlbnRpZmllcyB0aGUgcG9ydGlvbiBvZlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbGlzdCBvZiBibG9icyB0byBiZSByZXR1cm5lZCB3aXRoIHRoZSBuZXh0IGxpc3Rpbmcgb3BlcmF0aW9uLiBUaGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uIHJldHVybnMgdGhlIENvbnRpbnVhdGlvblRva2VuIHZhbHVlIHdpdGhpbiB0aGUgcmVzcG9uc2UgYm9keSBpZiB0aGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGluZyBvcGVyYXRpb24gZGlkIG5vdCByZXR1cm4gYWxsIGJsb2JzIHJlbWFpbmluZyB0byBiZSBsaXN0ZWRcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgY3VycmVudCBwYWdlLiBUaGUgQ29udGludWF0aW9uVG9rZW4gdmFsdWUgY2FuIGJlIHVzZWQgYXMgdGhlIHZhbHVlIGZvclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWFya2VyIHBhcmFtZXRlciBpbiBhIHN1YnNlcXVlbnQgY2FsbCB0byByZXF1ZXN0IHRoZSBuZXh0IHBhZ2Ugb2YgbGlzdFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy4gVGhlIG1hcmtlciB2YWx1ZSBpcyBvcGFxdWUgdG8gdGhlIGNsaWVudC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gbGlzdCBibG9icyBvcGVyYXRpb24uXG4gICAgICovXG4gICAgbGlzdFNlZ21lbnRzKG1hcmtlcl8xKSB7XG4gICAgICAgIHJldHVybiB0c2xpYi5fX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24qIGxpc3RTZWdtZW50c18xKG1hcmtlciwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgICAgICBsZXQgbGlzdEJsb2JzRmxhdFNlZ21lbnRSZXNwb25zZTtcbiAgICAgICAgICAgIGlmICghIW1hcmtlciB8fCBtYXJrZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgbGlzdEJsb2JzRmxhdFNlZ21lbnRSZXNwb25zZSA9IHlpZWxkIHRzbGliLl9fYXdhaXQodGhpcy5saXN0QmxvYkZsYXRTZWdtZW50KG1hcmtlciwgb3B0aW9ucykpO1xuICAgICAgICAgICAgICAgICAgICBtYXJrZXIgPSBsaXN0QmxvYnNGbGF0U2VnbWVudFJlc3BvbnNlLmNvbnRpbnVhdGlvblRva2VuO1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCB5aWVsZCB0c2xpYi5fX2F3YWl0KHlpZWxkIHRzbGliLl9fYXdhaXQobGlzdEJsb2JzRmxhdFNlZ21lbnRSZXNwb25zZSkpO1xuICAgICAgICAgICAgICAgIH0gd2hpbGUgKG1hcmtlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIEFzeW5jSXRlcmFibGVJdGVyYXRvciBvZiB7QGxpbmsgQmxvYkl0ZW19IG9iamVjdHNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBsaXN0IGJsb2JzIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBsaXN0SXRlbXMoKSB7XG4gICAgICAgIHJldHVybiB0c2xpYi5fX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24qIGxpc3RJdGVtc18xKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICAgICAgdmFyIF9hLCBlXzEsIF9iLCBfYztcbiAgICAgICAgICAgIGxldCBtYXJrZXI7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIF9kID0gdHJ1ZSwgX2UgPSB0c2xpYi5fX2FzeW5jVmFsdWVzKHRoaXMubGlzdFNlZ21lbnRzKG1hcmtlciwgb3B0aW9ucykpLCBfZjsgX2YgPSB5aWVsZCB0c2xpYi5fX2F3YWl0KF9lLm5leHQoKSksIF9hID0gX2YuZG9uZSwgIV9hOyBfZCA9IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgX2MgPSBfZi52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgX2QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlzdEJsb2JzRmxhdFNlZ21lbnRSZXNwb25zZSA9IF9jO1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCB0c2xpYi5fX2F3YWl0KHlpZWxkKiB0c2xpYi5fX2FzeW5jRGVsZWdhdG9yKHRzbGliLl9fYXN5bmNWYWx1ZXMobGlzdEJsb2JzRmxhdFNlZ21lbnRSZXNwb25zZS5zZWdtZW50LmJsb2JJdGVtcykpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFfZCAmJiAhX2EgJiYgKF9iID0gX2UucmV0dXJuKSkgeWllbGQgdHNsaWIuX19hd2FpdChfYi5jYWxsKF9lKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gYXN5bmMgaXRlcmFibGUgaXRlcmF0b3IgdG8gbGlzdCBhbGwgdGhlIGJsb2JzXG4gICAgICogdW5kZXIgdGhlIHNwZWNpZmllZCBhY2NvdW50LlxuICAgICAqXG4gICAgICogLmJ5UGFnZSgpIHJldHVybnMgYW4gYXN5bmMgaXRlcmFibGUgaXRlcmF0b3IgdG8gbGlzdCB0aGUgYmxvYnMgaW4gcGFnZXMuXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIGBmb3IgYXdhaXRgIHN5bnRheDpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogLy8gR2V0IHRoZSBjb250YWluZXJDbGllbnQgYmVmb3JlIHlvdSBydW4gdGhlc2Ugc25pcHBldHMsXG4gICAgICogLy8gQ2FuIGJlIG9idGFpbmVkIGZyb20gYGJsb2JTZXJ2aWNlQ2xpZW50LmdldENvbnRhaW5lckNsaWVudChcIjx5b3VyLWNvbnRhaW5lci1uYW1lPlwiKTtgXG4gICAgICogbGV0IGkgPSAxO1xuICAgICAqIGZvciBhd2FpdCAoY29uc3QgYmxvYiBvZiBjb250YWluZXJDbGllbnQubGlzdEJsb2JzRmxhdCgpKSB7XG4gICAgICogICBjb25zb2xlLmxvZyhgQmxvYiAke2krK306ICR7YmxvYi5uYW1lfWApO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNpbmcgYGl0ZXIubmV4dCgpYDpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogbGV0IGkgPSAxO1xuICAgICAqIGxldCBpdGVyID0gY29udGFpbmVyQ2xpZW50Lmxpc3RCbG9ic0ZsYXQoKTtcbiAgICAgKiBsZXQgYmxvYkl0ZW0gPSBhd2FpdCBpdGVyLm5leHQoKTtcbiAgICAgKiB3aGlsZSAoIWJsb2JJdGVtLmRvbmUpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKGBCbG9iICR7aSsrfTogJHtibG9iSXRlbS52YWx1ZS5uYW1lfWApO1xuICAgICAqICAgYmxvYkl0ZW0gPSBhd2FpdCBpdGVyLm5leHQoKTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIGBieVBhZ2UoKWA6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIHBhc3Npbmcgb3B0aW9uYWwgbWF4UGFnZVNpemUgaW4gdGhlIHBhZ2Ugc2V0dGluZ3NcbiAgICAgKiBsZXQgaSA9IDE7XG4gICAgICogZm9yIGF3YWl0IChjb25zdCByZXNwb25zZSBvZiBjb250YWluZXJDbGllbnQubGlzdEJsb2JzRmxhdCgpLmJ5UGFnZSh7IG1heFBhZ2VTaXplOiAyMCB9KSkge1xuICAgICAqICAgZm9yIChjb25zdCBibG9iIG9mIHJlc3BvbnNlLnNlZ21lbnQuYmxvYkl0ZW1zKSB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGBCbG9iICR7aSsrfTogJHtibG9iLm5hbWV9YCk7XG4gICAgICogICB9XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBwYWdpbmcgd2l0aCBhIG1hcmtlcjpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogbGV0IGkgPSAxO1xuICAgICAqIGxldCBpdGVyYXRvciA9IGNvbnRhaW5lckNsaWVudC5saXN0QmxvYnNGbGF0KCkuYnlQYWdlKHsgbWF4UGFnZVNpemU6IDIgfSk7XG4gICAgICogbGV0IHJlc3BvbnNlID0gKGF3YWl0IGl0ZXJhdG9yLm5leHQoKSkudmFsdWU7XG4gICAgICpcbiAgICAgKiAvLyBQcmludHMgMiBibG9iIG5hbWVzXG4gICAgICogZm9yIChjb25zdCBibG9iIG9mIHJlc3BvbnNlLnNlZ21lbnQuYmxvYkl0ZW1zKSB7XG4gICAgICogICBjb25zb2xlLmxvZyhgQmxvYiAke2krK306ICR7YmxvYi5uYW1lfWApO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIC8vIEdldHMgbmV4dCBtYXJrZXJcbiAgICAgKiBsZXQgbWFya2VyID0gcmVzcG9uc2UuY29udGludWF0aW9uVG9rZW47XG4gICAgICpcbiAgICAgKiAvLyBQYXNzaW5nIG5leHQgbWFya2VyIGFzIGNvbnRpbnVhdGlvblRva2VuXG4gICAgICpcbiAgICAgKiBpdGVyYXRvciA9IGNvbnRhaW5lckNsaWVudC5saXN0QmxvYnNGbGF0KCkuYnlQYWdlKHsgY29udGludWF0aW9uVG9rZW46IG1hcmtlciwgbWF4UGFnZVNpemU6IDEwIH0pO1xuICAgICAqIHJlc3BvbnNlID0gKGF3YWl0IGl0ZXJhdG9yLm5leHQoKSkudmFsdWU7XG4gICAgICpcbiAgICAgKiAvLyBQcmludHMgMTAgYmxvYiBuYW1lc1xuICAgICAqIGZvciAoY29uc3QgYmxvYiBvZiByZXNwb25zZS5zZWdtZW50LmJsb2JJdGVtcykge1xuICAgICAqICAgY29uc29sZS5sb2coYEJsb2IgJHtpKyt9OiAke2Jsb2IubmFtZX1gKTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gbGlzdCBibG9icy5cbiAgICAgKiBAcmV0dXJucyBBbiBhc3luY0l0ZXJhYmxlSXRlcmF0b3IgdGhhdCBzdXBwb3J0cyBwYWdpbmcuXG4gICAgICovXG4gICAgbGlzdEJsb2JzRmxhdChvcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgaW5jbHVkZSA9IFtdO1xuICAgICAgICBpZiAob3B0aW9ucy5pbmNsdWRlQ29weSkge1xuICAgICAgICAgICAgaW5jbHVkZS5wdXNoKFwiY29weVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5pbmNsdWRlRGVsZXRlZCkge1xuICAgICAgICAgICAgaW5jbHVkZS5wdXNoKFwiZGVsZXRlZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5pbmNsdWRlTWV0YWRhdGEpIHtcbiAgICAgICAgICAgIGluY2x1ZGUucHVzaChcIm1ldGFkYXRhXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVTbmFwc2hvdHMpIHtcbiAgICAgICAgICAgIGluY2x1ZGUucHVzaChcInNuYXBzaG90c1wiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5pbmNsdWRlVmVyc2lvbnMpIHtcbiAgICAgICAgICAgIGluY2x1ZGUucHVzaChcInZlcnNpb25zXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVVbmNvbW1pdGVkQmxvYnMpIHtcbiAgICAgICAgICAgIGluY2x1ZGUucHVzaChcInVuY29tbWl0dGVkYmxvYnNcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZVRhZ3MpIHtcbiAgICAgICAgICAgIGluY2x1ZGUucHVzaChcInRhZ3NcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZURlbGV0ZWRXaXRoVmVyc2lvbnMpIHtcbiAgICAgICAgICAgIGluY2x1ZGUucHVzaChcImRlbGV0ZWR3aXRodmVyc2lvbnNcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZUltbXV0YWJpbGl0eVBvbGljeSkge1xuICAgICAgICAgICAgaW5jbHVkZS5wdXNoKFwiaW1tdXRhYmlsaXR5cG9saWN5XCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVMZWdhbEhvbGQpIHtcbiAgICAgICAgICAgIGluY2x1ZGUucHVzaChcImxlZ2FsaG9sZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5wcmVmaXggPT09IFwiXCIpIHtcbiAgICAgICAgICAgIG9wdGlvbnMucHJlZml4ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRPcHRpb25zID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKSwgKGluY2x1ZGUubGVuZ3RoID4gMCA/IHsgaW5jbHVkZTogaW5jbHVkZSB9IDoge30pKTtcbiAgICAgICAgLy8gQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIHRvIGl0ZXJhdGUgb3ZlciBibG9ic1xuICAgICAgICBjb25zdCBpdGVyID0gdGhpcy5saXN0SXRlbXModXBkYXRlZE9wdGlvbnMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBUaGUgbmV4dCBtZXRob2QsIHBhcnQgb2YgdGhlIGl0ZXJhdGlvbiBwcm90b2NvbFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBuZXh0KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVyLm5leHQoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFRoZSBjb25uZWN0aW9uIHRvIHRoZSBhc3luYyBpdGVyYXRvciwgcGFydCBvZiB0aGUgaXRlcmF0aW9uIHByb3RvY29sXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBSZXR1cm4gYW4gQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIHRoYXQgd29ya3MgYSBwYWdlIGF0IGEgdGltZVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBieVBhZ2U6IChzZXR0aW5ncyA9IHt9KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubGlzdFNlZ21lbnRzKHNldHRpbmdzLmNvbnRpbnVhdGlvblRva2VuLCBPYmplY3QuYXNzaWduKHsgbWF4UGFnZVNpemU6IHNldHRpbmdzLm1heFBhZ2VTaXplIH0sIHVwZGF0ZWRPcHRpb25zKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIEFzeW5jSXRlcmFibGVJdGVyYXRvciBmb3IgQ29udGFpbmVyTGlzdEJsb2JIaWVyYXJjaHlTZWdtZW50UmVzcG9uc2VcbiAgICAgKlxuICAgICAqIEBwYXJhbSBkZWxpbWl0ZXIgLSBUaGUgY2hhcmFjdGVyIG9yIHN0cmluZyB1c2VkIHRvIGRlZmluZSB0aGUgdmlydHVhbCBoaWVyYXJjaHlcbiAgICAgKiBAcGFyYW0gbWFya2VyIC0gQSBzdHJpbmcgdmFsdWUgdGhhdCBpZGVudGlmaWVzIHRoZSBwb3J0aW9uIG9mXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBsaXN0IG9mIGJsb2JzIHRvIGJlIHJldHVybmVkIHdpdGggdGhlIG5leHQgbGlzdGluZyBvcGVyYXRpb24uIFRoZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gcmV0dXJucyB0aGUgQ29udGludWF0aW9uVG9rZW4gdmFsdWUgd2l0aGluIHRoZSByZXNwb25zZSBib2R5IGlmIHRoZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0aW5nIG9wZXJhdGlvbiBkaWQgbm90IHJldHVybiBhbGwgYmxvYnMgcmVtYWluaW5nIHRvIGJlIGxpc3RlZFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSBjdXJyZW50IHBhZ2UuIFRoZSBDb250aW51YXRpb25Ub2tlbiB2YWx1ZSBjYW4gYmUgdXNlZCBhcyB0aGUgdmFsdWUgZm9yXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBtYXJrZXIgcGFyYW1ldGVyIGluIGEgc3Vic2VxdWVudCBjYWxsIHRvIHJlcXVlc3QgdGhlIG5leHQgcGFnZSBvZiBsaXN0XG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLiBUaGUgbWFya2VyIHZhbHVlIGlzIG9wYXF1ZSB0byB0aGUgY2xpZW50LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBsaXN0IGJsb2JzIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBsaXN0SGllcmFyY2h5U2VnbWVudHMoZGVsaW1pdGVyXzEsIG1hcmtlcl8xKSB7XG4gICAgICAgIHJldHVybiB0c2xpYi5fX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24qIGxpc3RIaWVyYXJjaHlTZWdtZW50c18xKGRlbGltaXRlciwgbWFya2VyLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgICAgIGxldCBsaXN0QmxvYnNIaWVyYXJjaHlTZWdtZW50UmVzcG9uc2U7XG4gICAgICAgICAgICBpZiAoISFtYXJrZXIgfHwgbWFya2VyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RCbG9ic0hpZXJhcmNoeVNlZ21lbnRSZXNwb25zZSA9IHlpZWxkIHRzbGliLl9fYXdhaXQodGhpcy5saXN0QmxvYkhpZXJhcmNoeVNlZ21lbnQoZGVsaW1pdGVyLCBtYXJrZXIsIG9wdGlvbnMpKTtcbiAgICAgICAgICAgICAgICAgICAgbWFya2VyID0gbGlzdEJsb2JzSGllcmFyY2h5U2VnbWVudFJlc3BvbnNlLmNvbnRpbnVhdGlvblRva2VuO1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCB5aWVsZCB0c2xpYi5fX2F3YWl0KHlpZWxkIHRzbGliLl9fYXdhaXQobGlzdEJsb2JzSGllcmFyY2h5U2VnbWVudFJlc3BvbnNlKSk7XG4gICAgICAgICAgICAgICAgfSB3aGlsZSAobWFya2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIGZvciB7QGxpbmsgQmxvYlByZWZpeH0gYW5kIHtAbGluayBCbG9iSXRlbX0gb2JqZWN0cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkZWxpbWl0ZXIgLSBUaGUgY2hhcmFjdGVyIG9yIHN0cmluZyB1c2VkIHRvIGRlZmluZSB0aGUgdmlydHVhbCBoaWVyYXJjaHlcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gbGlzdCBibG9icyBvcGVyYXRpb24uXG4gICAgICovXG4gICAgbGlzdEl0ZW1zQnlIaWVyYXJjaHkoZGVsaW1pdGVyXzEpIHtcbiAgICAgICAgcmV0dXJuIHRzbGliLl9fYXN5bmNHZW5lcmF0b3IodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiogbGlzdEl0ZW1zQnlIaWVyYXJjaHlfMShkZWxpbWl0ZXIsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICAgICAgdmFyIF9hLCBlXzIsIF9iLCBfYztcbiAgICAgICAgICAgIGxldCBtYXJrZXI7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIF9kID0gdHJ1ZSwgX2UgPSB0c2xpYi5fX2FzeW5jVmFsdWVzKHRoaXMubGlzdEhpZXJhcmNoeVNlZ21lbnRzKGRlbGltaXRlciwgbWFya2VyLCBvcHRpb25zKSksIF9mOyBfZiA9IHlpZWxkIHRzbGliLl9fYXdhaXQoX2UubmV4dCgpKSwgX2EgPSBfZi5kb25lLCAhX2E7IF9kID0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICBfYyA9IF9mLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBfZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBsaXN0QmxvYnNIaWVyYXJjaHlTZWdtZW50UmVzcG9uc2UgPSBfYztcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VnbWVudCA9IGxpc3RCbG9ic0hpZXJhcmNoeVNlZ21lbnRSZXNwb25zZS5zZWdtZW50O1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2VnbWVudC5ibG9iUHJlZml4ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcHJlZml4IG9mIHNlZ21lbnQuYmxvYlByZWZpeGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgeWllbGQgdHNsaWIuX19hd2FpdChPYmplY3QuYXNzaWduKHsga2luZDogXCJwcmVmaXhcIiB9LCBwcmVmaXgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGJsb2Igb2Ygc2VnbWVudC5ibG9iSXRlbXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIHlpZWxkIHRzbGliLl9fYXdhaXQoT2JqZWN0LmFzc2lnbih7IGtpbmQ6IFwiYmxvYlwiIH0sIGJsb2IpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlXzJfMSkgeyBlXzIgPSB7IGVycm9yOiBlXzJfMSB9OyB9XG4gICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIV9kICYmICFfYSAmJiAoX2IgPSBfZS5yZXR1cm4pKSB5aWVsZCB0c2xpYi5fX2F3YWl0KF9iLmNhbGwoX2UpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzIpIHRocm93IGVfMi5lcnJvcjsgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBhc3luYyBpdGVyYWJsZSBpdGVyYXRvciB0byBsaXN0IGFsbCB0aGUgYmxvYnMgYnkgaGllcmFyY2h5LlxuICAgICAqIHVuZGVyIHRoZSBzcGVjaWZpZWQgYWNjb3VudC5cbiAgICAgKlxuICAgICAqIC5ieVBhZ2UoKSByZXR1cm5zIGFuIGFzeW5jIGl0ZXJhYmxlIGl0ZXJhdG9yIHRvIGxpc3QgdGhlIGJsb2JzIGJ5IGhpZXJhcmNoeSBpbiBwYWdlcy5cbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNpbmcgYGZvciBhd2FpdGAgc3ludGF4OlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBmb3IgYXdhaXQgKGNvbnN0IGl0ZW0gb2YgY29udGFpbmVyQ2xpZW50Lmxpc3RCbG9ic0J5SGllcmFyY2h5KFwiL1wiKSkge1xuICAgICAqICAgaWYgKGl0ZW0ua2luZCA9PT0gXCJwcmVmaXhcIikge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhgXFx0QmxvYlByZWZpeDogJHtpdGVtLm5hbWV9YCk7XG4gICAgICogICB9IGVsc2Uge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhgXFx0QmxvYkl0ZW06IG5hbWUgLSAke2l0ZW0ubmFtZX1gKTtcbiAgICAgKiAgIH1cbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIGBpdGVyLm5leHQoKWA6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGxldCBpdGVyID0gY29udGFpbmVyQ2xpZW50Lmxpc3RCbG9ic0J5SGllcmFyY2h5KFwiL1wiLCB7IHByZWZpeDogXCJwcmVmaXgxL1wiIH0pO1xuICAgICAqIGxldCBlbnRpdHkgPSBhd2FpdCBpdGVyLm5leHQoKTtcbiAgICAgKiB3aGlsZSAoIWVudGl0eS5kb25lKSB7XG4gICAgICogICBsZXQgaXRlbSA9IGVudGl0eS52YWx1ZTtcbiAgICAgKiAgIGlmIChpdGVtLmtpbmQgPT09IFwicHJlZml4XCIpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coYFxcdEJsb2JQcmVmaXg6ICR7aXRlbS5uYW1lfWApO1xuICAgICAqICAgfSBlbHNlIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coYFxcdEJsb2JJdGVtOiBuYW1lIC0gJHtpdGVtLm5hbWV9YCk7XG4gICAgICogICB9XG4gICAgICogICBlbnRpdHkgPSBhd2FpdCBpdGVyLm5leHQoKTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIGBieVBhZ2UoKWA6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnNvbGUubG9nKFwiTGlzdGluZyBibG9icyBieSBoaWVyYXJjaHkgYnkgcGFnZVwiKTtcbiAgICAgKiBmb3IgYXdhaXQgKGNvbnN0IHJlc3BvbnNlIG9mIGNvbnRhaW5lckNsaWVudC5saXN0QmxvYnNCeUhpZXJhcmNoeShcIi9cIikuYnlQYWdlKCkpIHtcbiAgICAgKiAgIGNvbnN0IHNlZ21lbnQgPSByZXNwb25zZS5zZWdtZW50O1xuICAgICAqICAgaWYgKHNlZ21lbnQuYmxvYlByZWZpeGVzKSB7XG4gICAgICogICAgIGZvciAoY29uc3QgcHJlZml4IG9mIHNlZ21lbnQuYmxvYlByZWZpeGVzKSB7XG4gICAgICogICAgICAgY29uc29sZS5sb2coYFxcdEJsb2JQcmVmaXg6ICR7cHJlZml4Lm5hbWV9YCk7XG4gICAgICogICAgIH1cbiAgICAgKiAgIH1cbiAgICAgKiAgIGZvciAoY29uc3QgYmxvYiBvZiByZXNwb25zZS5zZWdtZW50LmJsb2JJdGVtcykge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhgXFx0QmxvYkl0ZW06IG5hbWUgLSAke2Jsb2IubmFtZX1gKTtcbiAgICAgKiAgIH1cbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIHBhZ2luZyB3aXRoIGEgbWF4IHBhZ2Ugc2l6ZTpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogY29uc29sZS5sb2coXCJMaXN0aW5nIGJsb2JzIGJ5IGhpZXJhcmNoeSBieSBwYWdlLCBzcGVjaWZ5aW5nIGEgcHJlZml4IGFuZCBhIG1heCBwYWdlIHNpemVcIik7XG4gICAgICpcbiAgICAgKiBsZXQgaSA9IDE7XG4gICAgICogZm9yIGF3YWl0IChjb25zdCByZXNwb25zZSBvZiBjb250YWluZXJDbGllbnRcbiAgICAgKiAgIC5saXN0QmxvYnNCeUhpZXJhcmNoeShcIi9cIiwgeyBwcmVmaXg6IFwicHJlZml4Mi9zdWIxL1wiIH0pXG4gICAgICogICAuYnlQYWdlKHsgbWF4UGFnZVNpemU6IDIgfSkpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKGBQYWdlICR7aSsrfWApO1xuICAgICAqICAgY29uc3Qgc2VnbWVudCA9IHJlc3BvbnNlLnNlZ21lbnQ7XG4gICAgICpcbiAgICAgKiAgIGlmIChzZWdtZW50LmJsb2JQcmVmaXhlcykge1xuICAgICAqICAgICBmb3IgKGNvbnN0IHByZWZpeCBvZiBzZWdtZW50LmJsb2JQcmVmaXhlcykge1xuICAgICAqICAgICAgIGNvbnNvbGUubG9nKGBcXHRCbG9iUHJlZml4OiAke3ByZWZpeC5uYW1lfWApO1xuICAgICAqICAgICB9XG4gICAgICogICB9XG4gICAgICpcbiAgICAgKiAgIGZvciAoY29uc3QgYmxvYiBvZiByZXNwb25zZS5zZWdtZW50LmJsb2JJdGVtcykge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhgXFx0QmxvYkl0ZW06IG5hbWUgLSAke2Jsb2IubmFtZX1gKTtcbiAgICAgKiAgIH1cbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGVsaW1pdGVyIC0gVGhlIGNoYXJhY3RlciBvciBzdHJpbmcgdXNlZCB0byBkZWZpbmUgdGhlIHZpcnR1YWwgaGllcmFyY2h5XG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIGxpc3QgYmxvYnMgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGxpc3RCbG9ic0J5SGllcmFyY2h5KGRlbGltaXRlciwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGlmIChkZWxpbWl0ZXIgPT09IFwiXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiZGVsaW1pdGVyIHNob3VsZCBjb250YWluIG9uZSBvciBtb3JlIGNoYXJhY3RlcnNcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5jbHVkZSA9IFtdO1xuICAgICAgICBpZiAob3B0aW9ucy5pbmNsdWRlQ29weSkge1xuICAgICAgICAgICAgaW5jbHVkZS5wdXNoKFwiY29weVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5pbmNsdWRlRGVsZXRlZCkge1xuICAgICAgICAgICAgaW5jbHVkZS5wdXNoKFwiZGVsZXRlZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5pbmNsdWRlTWV0YWRhdGEpIHtcbiAgICAgICAgICAgIGluY2x1ZGUucHVzaChcIm1ldGFkYXRhXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVTbmFwc2hvdHMpIHtcbiAgICAgICAgICAgIGluY2x1ZGUucHVzaChcInNuYXBzaG90c1wiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5pbmNsdWRlVmVyc2lvbnMpIHtcbiAgICAgICAgICAgIGluY2x1ZGUucHVzaChcInZlcnNpb25zXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVVbmNvbW1pdGVkQmxvYnMpIHtcbiAgICAgICAgICAgIGluY2x1ZGUucHVzaChcInVuY29tbWl0dGVkYmxvYnNcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZVRhZ3MpIHtcbiAgICAgICAgICAgIGluY2x1ZGUucHVzaChcInRhZ3NcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZURlbGV0ZWRXaXRoVmVyc2lvbnMpIHtcbiAgICAgICAgICAgIGluY2x1ZGUucHVzaChcImRlbGV0ZWR3aXRodmVyc2lvbnNcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZUltbXV0YWJpbGl0eVBvbGljeSkge1xuICAgICAgICAgICAgaW5jbHVkZS5wdXNoKFwiaW1tdXRhYmlsaXR5cG9saWN5XCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVMZWdhbEhvbGQpIHtcbiAgICAgICAgICAgIGluY2x1ZGUucHVzaChcImxlZ2FsaG9sZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5wcmVmaXggPT09IFwiXCIpIHtcbiAgICAgICAgICAgIG9wdGlvbnMucHJlZml4ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRPcHRpb25zID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKSwgKGluY2x1ZGUubGVuZ3RoID4gMCA/IHsgaW5jbHVkZTogaW5jbHVkZSB9IDoge30pKTtcbiAgICAgICAgLy8gQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIHRvIGl0ZXJhdGUgb3ZlciBibG9iIHByZWZpeGVzIGFuZCBibG9ic1xuICAgICAgICBjb25zdCBpdGVyID0gdGhpcy5saXN0SXRlbXNCeUhpZXJhcmNoeShkZWxpbWl0ZXIsIHVwZGF0ZWRPcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVGhlIG5leHQgbWV0aG9kLCBwYXJ0IG9mIHRoZSBpdGVyYXRpb24gcHJvdG9jb2xcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgYXN5bmMgbmV4dCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlci5uZXh0KCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBUaGUgY29ubmVjdGlvbiB0byB0aGUgYXN5bmMgaXRlcmF0b3IsIHBhcnQgb2YgdGhlIGl0ZXJhdGlvbiBwcm90b2NvbFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogUmV0dXJuIGFuIEFzeW5jSXRlcmFibGVJdGVyYXRvciB0aGF0IHdvcmtzIGEgcGFnZSBhdCBhIHRpbWVcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgYnlQYWdlOiAoc2V0dGluZ3MgPSB7fSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxpc3RIaWVyYXJjaHlTZWdtZW50cyhkZWxpbWl0ZXIsIHNldHRpbmdzLmNvbnRpbnVhdGlvblRva2VuLCBPYmplY3QuYXNzaWduKHsgbWF4UGFnZVNpemU6IHNldHRpbmdzLm1heFBhZ2VTaXplIH0sIHVwZGF0ZWRPcHRpb25zKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgRmlsdGVyIEJsb2JzIG9wZXJhdGlvbiBlbmFibGVzIGNhbGxlcnMgdG8gbGlzdCBibG9icyBpbiB0aGUgY29udGFpbmVyIHdob3NlIHRhZ3NcbiAgICAgKiBtYXRjaCBhIGdpdmVuIHNlYXJjaCBleHByZXNzaW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRhZ0ZpbHRlclNxbEV4cHJlc3Npb24gLSBUaGUgd2hlcmUgcGFyYW1ldGVyIGVuYWJsZXMgdGhlIGNhbGxlciB0byBxdWVyeSBibG9icyB3aG9zZSB0YWdzIG1hdGNoIGEgZ2l2ZW4gZXhwcmVzc2lvbi5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZ2l2ZW4gZXhwcmVzc2lvbiBtdXN0IGV2YWx1YXRlIHRvIHRydWUgZm9yIGEgYmxvYiB0byBiZSByZXR1cm5lZCBpbiB0aGUgcmVzdWx0cy5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGVbT0RhdGEgLSBBQk5GXSBmaWx0ZXIgc3ludGF4IHJ1bGUgZGVmaW5lcyB0aGUgZm9ybWFsIGdyYW1tYXIgZm9yIHRoZSB2YWx1ZSBvZiB0aGUgd2hlcmUgcXVlcnkgcGFyYW1ldGVyO1xuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvd2V2ZXIsIG9ubHkgYSBzdWJzZXQgb2YgdGhlIE9EYXRhIGZpbHRlciBzeW50YXggaXMgc3VwcG9ydGVkIGluIHRoZSBCbG9iIHNlcnZpY2UuXG4gICAgICogQHBhcmFtIG1hcmtlciAtIEEgc3RyaW5nIHZhbHVlIHRoYXQgaWRlbnRpZmllcyB0aGUgcG9ydGlvbiBvZlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbGlzdCBvZiBibG9icyB0byBiZSByZXR1cm5lZCB3aXRoIHRoZSBuZXh0IGxpc3Rpbmcgb3BlcmF0aW9uLiBUaGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uIHJldHVybnMgdGhlIGNvbnRpbnVhdGlvblRva2VuIHZhbHVlIHdpdGhpbiB0aGUgcmVzcG9uc2UgYm9keSBpZiB0aGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGluZyBvcGVyYXRpb24gZGlkIG5vdCByZXR1cm4gYWxsIGJsb2JzIHJlbWFpbmluZyB0byBiZSBsaXN0ZWRcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgY3VycmVudCBwYWdlLiBUaGUgY29udGludWF0aW9uVG9rZW4gdmFsdWUgY2FuIGJlIHVzZWQgYXMgdGhlIHZhbHVlIGZvclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWFya2VyIHBhcmFtZXRlciBpbiBhIHN1YnNlcXVlbnQgY2FsbCB0byByZXF1ZXN0IHRoZSBuZXh0IHBhZ2Ugb2YgbGlzdFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy4gVGhlIG1hcmtlciB2YWx1ZSBpcyBvcGFxdWUgdG8gdGhlIGNsaWVudC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gZmluZCBibG9icyBieSB0YWdzLlxuICAgICAqL1xuICAgIGFzeW5jIGZpbmRCbG9ic0J5VGFnc1NlZ21lbnQodGFnRmlsdGVyU3FsRXhwcmVzc2lvbiwgbWFya2VyLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJDb250YWluZXJDbGllbnQtZmluZEJsb2JzQnlUYWdzU2VnbWVudFwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5jb250YWluZXJDb250ZXh0LmZpbHRlckJsb2JzKHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICB3aGVyZTogdGFnRmlsdGVyU3FsRXhwcmVzc2lvbixcbiAgICAgICAgICAgICAgICBtYXJrZXIsXG4gICAgICAgICAgICAgICAgbWF4UGFnZVNpemU6IG9wdGlvbnMubWF4UGFnZVNpemUsXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgY29uc3Qgd3JhcHBlZFJlc3BvbnNlID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCByZXNwb25zZSksIHsgX3Jlc3BvbnNlOiByZXNwb25zZS5fcmVzcG9uc2UsIGJsb2JzOiByZXNwb25zZS5ibG9icy5tYXAoKGJsb2IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgICAgICBsZXQgdGFnVmFsdWUgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICBpZiAoKChfYSA9IGJsb2IudGFncykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmJsb2JUYWdTZXQubGVuZ3RoKSA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFnVmFsdWUgPSBibG9iLnRhZ3MuYmxvYlRhZ1NldFswXS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBibG9iKSwgeyB0YWdzOiB0b1RhZ3MoYmxvYi50YWdzKSwgdGFnVmFsdWUgfSk7XG4gICAgICAgICAgICAgICAgfSkgfSk7XG4gICAgICAgICAgICByZXR1cm4gd3JhcHBlZFJlc3BvbnNlO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBBc3luY0l0ZXJhYmxlSXRlcmF0b3IgZm9yIENvbnRhaW5lckZpbmRCbG9ic0J5VGFnc1NlZ21lbnRSZXNwb25zZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0YWdGaWx0ZXJTcWxFeHByZXNzaW9uIC0gIFRoZSB3aGVyZSBwYXJhbWV0ZXIgZW5hYmxlcyB0aGUgY2FsbGVyIHRvIHF1ZXJ5IGJsb2JzIHdob3NlIHRhZ3MgbWF0Y2ggYSBnaXZlbiBleHByZXNzaW9uLlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZ2l2ZW4gZXhwcmVzc2lvbiBtdXN0IGV2YWx1YXRlIHRvIHRydWUgZm9yIGEgYmxvYiB0byBiZSByZXR1cm5lZCBpbiB0aGUgcmVzdWx0cy5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlW09EYXRhIC0gQUJORl0gZmlsdGVyIHN5bnRheCBydWxlIGRlZmluZXMgdGhlIGZvcm1hbCBncmFtbWFyIGZvciB0aGUgdmFsdWUgb2YgdGhlIHdoZXJlIHF1ZXJ5IHBhcmFtZXRlcjtcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG93ZXZlciwgb25seSBhIHN1YnNldCBvZiB0aGUgT0RhdGEgZmlsdGVyIHN5bnRheCBpcyBzdXBwb3J0ZWQgaW4gdGhlIEJsb2Igc2VydmljZS5cbiAgICAgKiBAcGFyYW0gbWFya2VyIC0gQSBzdHJpbmcgdmFsdWUgdGhhdCBpZGVudGlmaWVzIHRoZSBwb3J0aW9uIG9mXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBsaXN0IG9mIGJsb2JzIHRvIGJlIHJldHVybmVkIHdpdGggdGhlIG5leHQgbGlzdGluZyBvcGVyYXRpb24uIFRoZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gcmV0dXJucyB0aGUgY29udGludWF0aW9uVG9rZW4gdmFsdWUgd2l0aGluIHRoZSByZXNwb25zZSBib2R5IGlmIHRoZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0aW5nIG9wZXJhdGlvbiBkaWQgbm90IHJldHVybiBhbGwgYmxvYnMgcmVtYWluaW5nIHRvIGJlIGxpc3RlZFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSBjdXJyZW50IHBhZ2UuIFRoZSBjb250aW51YXRpb25Ub2tlbiB2YWx1ZSBjYW4gYmUgdXNlZCBhcyB0aGUgdmFsdWUgZm9yXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBtYXJrZXIgcGFyYW1ldGVyIGluIGEgc3Vic2VxdWVudCBjYWxsIHRvIHJlcXVlc3QgdGhlIG5leHQgcGFnZSBvZiBsaXN0XG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLiBUaGUgbWFya2VyIHZhbHVlIGlzIG9wYXF1ZSB0byB0aGUgY2xpZW50LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBmaW5kIGJsb2JzIGJ5IHRhZ3MuXG4gICAgICovXG4gICAgZmluZEJsb2JzQnlUYWdzU2VnbWVudHModGFnRmlsdGVyU3FsRXhwcmVzc2lvbl8xLCBtYXJrZXJfMSkge1xuICAgICAgICByZXR1cm4gdHNsaWIuX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKiBmaW5kQmxvYnNCeVRhZ3NTZWdtZW50c18xKHRhZ0ZpbHRlclNxbEV4cHJlc3Npb24sIG1hcmtlciwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgICAgICBsZXQgcmVzcG9uc2U7XG4gICAgICAgICAgICBpZiAoISFtYXJrZXIgfHwgbWFya2VyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0geWllbGQgdHNsaWIuX19hd2FpdCh0aGlzLmZpbmRCbG9ic0J5VGFnc1NlZ21lbnQodGFnRmlsdGVyU3FsRXhwcmVzc2lvbiwgbWFya2VyLCBvcHRpb25zKSk7XG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmJsb2JzID0gcmVzcG9uc2UuYmxvYnMgfHwgW107XG4gICAgICAgICAgICAgICAgICAgIG1hcmtlciA9IHJlc3BvbnNlLmNvbnRpbnVhdGlvblRva2VuO1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCB5aWVsZCB0c2xpYi5fX2F3YWl0KHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICB9IHdoaWxlIChtYXJrZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBBc3luY0l0ZXJhYmxlSXRlcmF0b3IgZm9yIGJsb2JzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRhZ0ZpbHRlclNxbEV4cHJlc3Npb24gLSAgVGhlIHdoZXJlIHBhcmFtZXRlciBlbmFibGVzIHRoZSBjYWxsZXIgdG8gcXVlcnkgYmxvYnMgd2hvc2UgdGFncyBtYXRjaCBhIGdpdmVuIGV4cHJlc3Npb24uXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBnaXZlbiBleHByZXNzaW9uIG11c3QgZXZhbHVhdGUgdG8gdHJ1ZSBmb3IgYSBibG9iIHRvIGJlIHJldHVybmVkIGluIHRoZSByZXN1bHRzLlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGVbT0RhdGEgLSBBQk5GXSBmaWx0ZXIgc3ludGF4IHJ1bGUgZGVmaW5lcyB0aGUgZm9ybWFsIGdyYW1tYXIgZm9yIHRoZSB2YWx1ZSBvZiB0aGUgd2hlcmUgcXVlcnkgcGFyYW1ldGVyO1xuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3dldmVyLCBvbmx5IGEgc3Vic2V0IG9mIHRoZSBPRGF0YSBmaWx0ZXIgc3ludGF4IGlzIHN1cHBvcnRlZCBpbiB0aGUgQmxvYiBzZXJ2aWNlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBmaW5kQmxvYnNCeVRhZ3NJdGVtcy5cbiAgICAgKi9cbiAgICBmaW5kQmxvYnNCeVRhZ3NJdGVtcyh0YWdGaWx0ZXJTcWxFeHByZXNzaW9uXzEpIHtcbiAgICAgICAgcmV0dXJuIHRzbGliLl9fYXN5bmNHZW5lcmF0b3IodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiogZmluZEJsb2JzQnlUYWdzSXRlbXNfMSh0YWdGaWx0ZXJTcWxFeHByZXNzaW9uLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgICAgIHZhciBfYSwgZV8zLCBfYiwgX2M7XG4gICAgICAgICAgICBsZXQgbWFya2VyO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBfZCA9IHRydWUsIF9lID0gdHNsaWIuX19hc3luY1ZhbHVlcyh0aGlzLmZpbmRCbG9ic0J5VGFnc1NlZ21lbnRzKHRhZ0ZpbHRlclNxbEV4cHJlc3Npb24sIG1hcmtlciwgb3B0aW9ucykpLCBfZjsgX2YgPSB5aWVsZCB0c2xpYi5fX2F3YWl0KF9lLm5leHQoKSksIF9hID0gX2YuZG9uZSwgIV9hOyBfZCA9IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgX2MgPSBfZi52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgX2QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VnbWVudCA9IF9jO1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCB0c2xpYi5fX2F3YWl0KHlpZWxkKiB0c2xpYi5fX2FzeW5jRGVsZWdhdG9yKHRzbGliLl9fYXN5bmNWYWx1ZXMoc2VnbWVudC5ibG9icykpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZV8zXzEpIHsgZV8zID0geyBlcnJvcjogZV8zXzEgfTsgfVxuICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFfZCAmJiAhX2EgJiYgKF9iID0gX2UucmV0dXJuKSkgeWllbGQgdHNsaWIuX19hd2FpdChfYi5jYWxsKF9lKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8zKSB0aHJvdyBlXzMuZXJyb3I7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gYXN5bmMgaXRlcmFibGUgaXRlcmF0b3IgdG8gZmluZCBhbGwgYmxvYnMgd2l0aCBzcGVjaWZpZWQgdGFnXG4gICAgICogdW5kZXIgdGhlIHNwZWNpZmllZCBjb250YWluZXIuXG4gICAgICpcbiAgICAgKiAuYnlQYWdlKCkgcmV0dXJucyBhbiBhc3luYyBpdGVyYWJsZSBpdGVyYXRvciB0byBsaXN0IHRoZSBibG9icyBpbiBwYWdlcy5cbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNpbmcgYGZvciBhd2FpdGAgc3ludGF4OlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBsZXQgaSA9IDE7XG4gICAgICogZm9yIGF3YWl0IChjb25zdCBibG9iIG9mIGNvbnRhaW5lckNsaWVudC5maW5kQmxvYnNCeVRhZ3MoXCJ0YWdrZXk9J3RhZ3ZhbHVlJ1wiKSkge1xuICAgICAqICAgY29uc29sZS5sb2coYEJsb2IgJHtpKyt9OiAke2Jsb2IubmFtZX1gKTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIGBpdGVyLm5leHQoKWA6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGxldCBpID0gMTtcbiAgICAgKiBjb25zdCBpdGVyID0gY29udGFpbmVyQ2xpZW50LmZpbmRCbG9ic0J5VGFncyhcInRhZ2tleT0ndGFndmFsdWUnXCIpO1xuICAgICAqIGxldCBibG9iSXRlbSA9IGF3YWl0IGl0ZXIubmV4dCgpO1xuICAgICAqIHdoaWxlICghYmxvYkl0ZW0uZG9uZSkge1xuICAgICAqICAgY29uc29sZS5sb2coYEJsb2IgJHtpKyt9OiAke2Jsb2JJdGVtLnZhbHVlLm5hbWV9YCk7XG4gICAgICogICBibG9iSXRlbSA9IGF3YWl0IGl0ZXIubmV4dCgpO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNpbmcgYGJ5UGFnZSgpYDpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogLy8gcGFzc2luZyBvcHRpb25hbCBtYXhQYWdlU2l6ZSBpbiB0aGUgcGFnZSBzZXR0aW5nc1xuICAgICAqIGxldCBpID0gMTtcbiAgICAgKiBmb3IgYXdhaXQgKGNvbnN0IHJlc3BvbnNlIG9mIGNvbnRhaW5lckNsaWVudC5maW5kQmxvYnNCeVRhZ3MoXCJ0YWdrZXk9J3RhZ3ZhbHVlJ1wiKS5ieVBhZ2UoeyBtYXhQYWdlU2l6ZTogMjAgfSkpIHtcbiAgICAgKiAgIGlmIChyZXNwb25zZS5ibG9icykge1xuICAgICAqICAgICBmb3IgKGNvbnN0IGJsb2Igb2YgcmVzcG9uc2UuYmxvYnMpIHtcbiAgICAgKiAgICAgICBjb25zb2xlLmxvZyhgQmxvYiAke2krK306ICR7YmxvYi5uYW1lfWApO1xuICAgICAqICAgICB9XG4gICAgICogICB9XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBwYWdpbmcgd2l0aCBhIG1hcmtlcjpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogbGV0IGkgPSAxO1xuICAgICAqIGxldCBpdGVyYXRvciA9IGNvbnRhaW5lckNsaWVudC5maW5kQmxvYnNCeVRhZ3MoXCJ0YWdrZXk9J3RhZ3ZhbHVlJ1wiKS5ieVBhZ2UoeyBtYXhQYWdlU2l6ZTogMiB9KTtcbiAgICAgKiBsZXQgcmVzcG9uc2UgPSAoYXdhaXQgaXRlcmF0b3IubmV4dCgpKS52YWx1ZTtcbiAgICAgKlxuICAgICAqIC8vIFByaW50cyAyIGJsb2IgbmFtZXNcbiAgICAgKiBpZiAocmVzcG9uc2UuYmxvYnMpIHtcbiAgICAgKiAgIGZvciAoY29uc3QgYmxvYiBvZiByZXNwb25zZS5ibG9icykge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhgQmxvYiAke2krK306ICR7YmxvYi5uYW1lfWApO1xuICAgICAqICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIC8vIEdldHMgbmV4dCBtYXJrZXJcbiAgICAgKiBsZXQgbWFya2VyID0gcmVzcG9uc2UuY29udGludWF0aW9uVG9rZW47XG4gICAgICogLy8gUGFzc2luZyBuZXh0IG1hcmtlciBhcyBjb250aW51YXRpb25Ub2tlblxuICAgICAqIGl0ZXJhdG9yID0gY29udGFpbmVyQ2xpZW50XG4gICAgICogICAuZmluZEJsb2JzQnlUYWdzKFwidGFna2V5PSd0YWd2YWx1ZSdcIilcbiAgICAgKiAgIC5ieVBhZ2UoeyBjb250aW51YXRpb25Ub2tlbjogbWFya2VyLCBtYXhQYWdlU2l6ZTogMTAgfSk7XG4gICAgICogcmVzcG9uc2UgPSAoYXdhaXQgaXRlcmF0b3IubmV4dCgpKS52YWx1ZTtcbiAgICAgKlxuICAgICAqIC8vIFByaW50cyBibG9iIG5hbWVzXG4gICAgICogaWYgKHJlc3BvbnNlLmJsb2JzKSB7XG4gICAgICogICBmb3IgKGNvbnN0IGJsb2Igb2YgcmVzcG9uc2UuYmxvYnMpIHtcbiAgICAgKiAgICAgIGNvbnNvbGUubG9nKGBCbG9iICR7aSsrfTogJHtibG9iLm5hbWV9YCk7XG4gICAgICogICB9XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQHBhcmFtIHRhZ0ZpbHRlclNxbEV4cHJlc3Npb24gLSAgVGhlIHdoZXJlIHBhcmFtZXRlciBlbmFibGVzIHRoZSBjYWxsZXIgdG8gcXVlcnkgYmxvYnMgd2hvc2UgdGFncyBtYXRjaCBhIGdpdmVuIGV4cHJlc3Npb24uXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBnaXZlbiBleHByZXNzaW9uIG11c3QgZXZhbHVhdGUgdG8gdHJ1ZSBmb3IgYSBibG9iIHRvIGJlIHJldHVybmVkIGluIHRoZSByZXN1bHRzLlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGVbT0RhdGEgLSBBQk5GXSBmaWx0ZXIgc3ludGF4IHJ1bGUgZGVmaW5lcyB0aGUgZm9ybWFsIGdyYW1tYXIgZm9yIHRoZSB2YWx1ZSBvZiB0aGUgd2hlcmUgcXVlcnkgcGFyYW1ldGVyO1xuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3dldmVyLCBvbmx5IGEgc3Vic2V0IG9mIHRoZSBPRGF0YSBmaWx0ZXIgc3ludGF4IGlzIHN1cHBvcnRlZCBpbiB0aGUgQmxvYiBzZXJ2aWNlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBmaW5kIGJsb2JzIGJ5IHRhZ3MuXG4gICAgICovXG4gICAgZmluZEJsb2JzQnlUYWdzKHRhZ0ZpbHRlclNxbEV4cHJlc3Npb24sIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICAvLyBBc3luY0l0ZXJhYmxlSXRlcmF0b3IgdG8gaXRlcmF0ZSBvdmVyIGJsb2JzXG4gICAgICAgIGNvbnN0IGxpc3RTZWdtZW50T3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBpdGVyID0gdGhpcy5maW5kQmxvYnNCeVRhZ3NJdGVtcyh0YWdGaWx0ZXJTcWxFeHByZXNzaW9uLCBsaXN0U2VnbWVudE9wdGlvbnMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBUaGUgbmV4dCBtZXRob2QsIHBhcnQgb2YgdGhlIGl0ZXJhdGlvbiBwcm90b2NvbFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBuZXh0KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVyLm5leHQoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFRoZSBjb25uZWN0aW9uIHRvIHRoZSBhc3luYyBpdGVyYXRvciwgcGFydCBvZiB0aGUgaXRlcmF0aW9uIHByb3RvY29sXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBSZXR1cm4gYW4gQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIHRoYXQgd29ya3MgYSBwYWdlIGF0IGEgdGltZVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBieVBhZ2U6IChzZXR0aW5ncyA9IHt9KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluZEJsb2JzQnlUYWdzU2VnbWVudHModGFnRmlsdGVyU3FsRXhwcmVzc2lvbiwgc2V0dGluZ3MuY29udGludWF0aW9uVG9rZW4sIE9iamVjdC5hc3NpZ24oeyBtYXhQYWdlU2l6ZTogc2V0dGluZ3MubWF4UGFnZVNpemUgfSwgbGlzdFNlZ21lbnRPcHRpb25zKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgR2V0IEFjY291bnQgSW5mb3JtYXRpb24gb3BlcmF0aW9uIHJldHVybnMgdGhlIHNrdSBuYW1lIGFuZCBhY2NvdW50IGtpbmRcbiAgICAgKiBmb3IgdGhlIHNwZWNpZmllZCBhY2NvdW50LlxuICAgICAqIFRoZSBHZXQgQWNjb3VudCBJbmZvcm1hdGlvbiBvcGVyYXRpb24gaXMgYXZhaWxhYmxlIG9uIHNlcnZpY2UgdmVyc2lvbnMgYmVnaW5uaW5nXG4gICAgICogd2l0aCB2ZXJzaW9uIDIwMTgtMDMtMjguXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvZ2V0LWFjY291bnQtaW5mb3JtYXRpb25cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB0aGUgU2VydmljZSBHZXQgQWNjb3VudCBJbmZvIG9wZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyBSZXNwb25zZSBkYXRhIGZvciB0aGUgU2VydmljZSBHZXQgQWNjb3VudCBJbmZvIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBnZXRBY2NvdW50SW5mbyhvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJDb250YWluZXJDbGllbnQtZ2V0QWNjb3VudEluZm9cIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5jb250YWluZXJDb250ZXh0LmdldEFjY291bnRJbmZvKHtcbiAgICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBnZXRDb250YWluZXJOYW1lRnJvbVVybCgpIHtcbiAgICAgICAgbGV0IGNvbnRhaW5lck5hbWU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyAgVVJMIG1heSBsb29rIGxpa2UgdGhlIGZvbGxvd2luZ1xuICAgICAgICAgICAgLy8gXCJodHRwczovL215YWNjb3VudC5ibG9iLmNvcmUud2luZG93cy5uZXQvbXljb250YWluZXI/c2FzU3RyaW5nXCI7XG4gICAgICAgICAgICAvLyBcImh0dHBzOi8vbXlhY2NvdW50LmJsb2IuY29yZS53aW5kb3dzLm5ldC9teWNvbnRhaW5lclwiO1xuICAgICAgICAgICAgLy8gSVB2NC9JUHY2IGFkZHJlc3MgaG9zdHMsIEVuZHBvaW50cyAtIGBodHRwOi8vMTI3LjAuMC4xOjEwMDAwL2RldnN0b3JlYWNjb3VudDEvY29udGFpbmVybmFtZWBcbiAgICAgICAgICAgIC8vIGh0dHA6Ly9sb2NhbGhvc3Q6MTAwMDEvZGV2c3RvcmVhY2NvdW50MS9jb250YWluZXJuYW1lXG4gICAgICAgICAgICBjb25zdCBwYXJzZWRVcmwgPSBuZXcgVVJMKHRoaXMudXJsKTtcbiAgICAgICAgICAgIGlmIChwYXJzZWRVcmwuaG9zdG5hbWUuc3BsaXQoXCIuXCIpWzFdID09PSBcImJsb2JcIikge1xuICAgICAgICAgICAgICAgIC8vIFwiaHR0cHM6Ly9teWFjY291bnQuYmxvYi5jb3JlLndpbmRvd3MubmV0L2NvbnRhaW5lcm5hbWVcIi5cbiAgICAgICAgICAgICAgICAvLyBcImh0dHBzOi8vY3VzdG9tZG9tYWluLmNvbS9jb250YWluZXJuYW1lXCIuXG4gICAgICAgICAgICAgICAgLy8gLmdldFBhdGgoKSAtPiAvY29udGFpbmVybmFtZVxuICAgICAgICAgICAgICAgIGNvbnRhaW5lck5hbWUgPSBwYXJzZWRVcmwucGF0aG5hbWUuc3BsaXQoXCIvXCIpWzFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaXNJcEVuZHBvaW50U3R5bGUocGFyc2VkVXJsKSkge1xuICAgICAgICAgICAgICAgIC8vIElQdjQvSVB2NiBhZGRyZXNzIGhvc3RzLi4uIEV4YW1wbGUgLSBodHRwOi8vMTkyLjAuMC4xMDoxMDAwMS9kZXZzdG9yZWFjY291bnQxL2NvbnRhaW5lcm5hbWVcbiAgICAgICAgICAgICAgICAvLyBTaW5nbGUgd29yZCBkb21haW4gd2l0aG91dCBhIFtkb3RdIGluIHRoZSBlbmRwb2ludC4uLiBFeGFtcGxlIC0gaHR0cDovL2xvY2FsaG9zdDoxMDAwMS9kZXZzdG9yZWFjY291bnQxL2NvbnRhaW5lcm5hbWVcbiAgICAgICAgICAgICAgICAvLyAuZ2V0UGF0aCgpIC0+IC9kZXZzdG9yZWFjY291bnQxL2NvbnRhaW5lcm5hbWVcbiAgICAgICAgICAgICAgICBjb250YWluZXJOYW1lID0gcGFyc2VkVXJsLnBhdGhuYW1lLnNwbGl0KFwiL1wiKVsyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFwiaHR0cHM6Ly9jdXN0b21kb21haW4uY29tL2NvbnRhaW5lcm5hbWVcIi5cbiAgICAgICAgICAgICAgICAvLyAuZ2V0UGF0aCgpIC0+IC9jb250YWluZXJuYW1lXG4gICAgICAgICAgICAgICAgY29udGFpbmVyTmFtZSA9IHBhcnNlZFVybC5wYXRobmFtZS5zcGxpdChcIi9cIilbMV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBkZWNvZGUgdGhlIGVuY29kZWQgY29udGFpbmVyTmFtZSAtIHRvIGdldCBhbGwgdGhlIHNwZWNpYWwgY2hhcmFjdGVycyB0aGF0IG1pZ2h0IGJlIHByZXNlbnQgaW4gaXRcbiAgICAgICAgICAgIGNvbnRhaW5lck5hbWUgPSBkZWNvZGVVUklDb21wb25lbnQoY29udGFpbmVyTmFtZSk7XG4gICAgICAgICAgICBpZiAoIWNvbnRhaW5lck5hbWUpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQcm92aWRlZCBjb250YWluZXJOYW1lIGlzIGludmFsaWQuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5lck5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gZXh0cmFjdCBjb250YWluZXJOYW1lIHdpdGggcHJvdmlkZWQgaW5mb3JtYXRpb24uXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE9ubHkgYXZhaWxhYmxlIGZvciBDb250YWluZXJDbGllbnQgY29uc3RydWN0ZWQgd2l0aCBhIHNoYXJlZCBrZXkgY3JlZGVudGlhbC5cbiAgICAgKlxuICAgICAqIEdlbmVyYXRlcyBhIEJsb2IgQ29udGFpbmVyIFNlcnZpY2UgU2hhcmVkIEFjY2VzcyBTaWduYXR1cmUgKFNBUykgVVJJIGJhc2VkIG9uIHRoZSBjbGllbnQgcHJvcGVydGllc1xuICAgICAqIGFuZCBwYXJhbWV0ZXJzIHBhc3NlZCBpbi4gVGhlIFNBUyBpcyBzaWduZWQgYnkgdGhlIHNoYXJlZCBrZXkgY3JlZGVudGlhbCBvZiB0aGUgY2xpZW50LlxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvY29uc3RydWN0aW5nLWEtc2VydmljZS1zYXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgcGFyYW1ldGVycy5cbiAgICAgKiBAcmV0dXJucyBUaGUgU0FTIFVSSSBjb25zaXN0aW5nIG9mIHRoZSBVUkkgdG8gdGhlIHJlc291cmNlIHJlcHJlc2VudGVkIGJ5IHRoaXMgY2xpZW50LCBmb2xsb3dlZCBieSB0aGUgZ2VuZXJhdGVkIFNBUyB0b2tlbi5cbiAgICAgKi9cbiAgICBnZW5lcmF0ZVNhc1VybChvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKCEodGhpcy5jcmVkZW50aWFsIGluc3RhbmNlb2YgU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJDYW4gb25seSBnZW5lcmF0ZSB0aGUgU0FTIHdoZW4gdGhlIGNsaWVudCBpcyBpbml0aWFsaXplZCB3aXRoIGEgc2hhcmVkIGtleSBjcmVkZW50aWFsXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc2FzID0gZ2VuZXJhdGVCbG9iU0FTUXVlcnlQYXJhbWV0ZXJzKE9iamVjdC5hc3NpZ24oeyBjb250YWluZXJOYW1lOiB0aGlzLl9jb250YWluZXJOYW1lIH0sIG9wdGlvbnMpLCB0aGlzLmNyZWRlbnRpYWwpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICByZXNvbHZlKGFwcGVuZFRvVVJMUXVlcnkodGhpcy51cmwsIHNhcykpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogT25seSBhdmFpbGFibGUgZm9yIENvbnRhaW5lckNsaWVudCBjb25zdHJ1Y3RlZCB3aXRoIGEgc2hhcmVkIGtleSBjcmVkZW50aWFsLlxuICAgICAqXG4gICAgICogR2VuZXJhdGVzIHN0cmluZyB0byBzaWduIGZvciBhIEJsb2IgQ29udGFpbmVyIFNlcnZpY2UgU2hhcmVkIEFjY2VzcyBTaWduYXR1cmUgKFNBUykgVVJJXG4gICAgICogYmFzZWQgb24gdGhlIGNsaWVudCBwcm9wZXJ0aWVzIGFuZCBwYXJhbWV0ZXJzIHBhc3NlZCBpbi4gVGhlIFNBUyBpcyBzaWduZWQgYnkgdGhlIHNoYXJlZCBrZXkgY3JlZGVudGlhbCBvZiB0aGUgY2xpZW50LlxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvY29uc3RydWN0aW5nLWEtc2VydmljZS1zYXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgcGFyYW1ldGVycy5cbiAgICAgKiBAcmV0dXJucyBUaGUgU0FTIFVSSSBjb25zaXN0aW5nIG9mIHRoZSBVUkkgdG8gdGhlIHJlc291cmNlIHJlcHJlc2VudGVkIGJ5IHRoaXMgY2xpZW50LCBmb2xsb3dlZCBieSB0aGUgZ2VuZXJhdGVkIFNBUyB0b2tlbi5cbiAgICAgKi9cbiAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGF6dXJlL2F6dXJlLXNkay90cy1uYW1pbmctb3B0aW9ucyovXG4gICAgZ2VuZXJhdGVTYXNTdHJpbmdUb1NpZ24ob3B0aW9ucykge1xuICAgICAgICBpZiAoISh0aGlzLmNyZWRlbnRpYWwgaW5zdGFuY2VvZiBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiQ2FuIG9ubHkgZ2VuZXJhdGUgdGhlIFNBUyB3aGVuIHRoZSBjbGllbnQgaXMgaW5pdGlhbGl6ZWQgd2l0aCBhIHNoYXJlZCBrZXkgY3JlZGVudGlhbFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2VuZXJhdGVCbG9iU0FTUXVlcnlQYXJhbWV0ZXJzSW50ZXJuYWwoT2JqZWN0LmFzc2lnbih7IGNvbnRhaW5lck5hbWU6IHRoaXMuX2NvbnRhaW5lck5hbWUgfSwgb3B0aW9ucyksIHRoaXMuY3JlZGVudGlhbCkuc3RyaW5nVG9TaWduO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgQmxvYkJhdGNoQ2xpZW50IG9iamVjdCB0byBjb25kdWN0IGJhdGNoIG9wZXJhdGlvbnMuXG4gICAgICpcbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9ibG9iLWJhdGNoXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBBIG5ldyBCbG9iQmF0Y2hDbGllbnQgb2JqZWN0IGZvciB0aGlzIGNvbnRhaW5lci5cbiAgICAgKi9cbiAgICBnZXRCbG9iQmF0Y2hDbGllbnQoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQmxvYkJhdGNoQ2xpZW50KHRoaXMudXJsLCB0aGlzLnBpcGVsaW5lKTtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBPTkxZIEFWQUlMQUJMRSBJTiBOT0RFLkpTIFJVTlRJTUUuXG4gKlxuICogVGhpcyBpcyBhIGhlbHBlciBjbGFzcyB0byBjb25zdHJ1Y3QgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBwZXJtaXNzaW9ucyBncmFudGVkIGJ5IGFuIEFjY291bnRTQVMuIFNldHRpbmcgYSB2YWx1ZVxuICogdG8gdHJ1ZSBtZWFucyB0aGF0IGFueSBTQVMgd2hpY2ggdXNlcyB0aGVzZSBwZXJtaXNzaW9ucyB3aWxsIGdyYW50IHBlcm1pc3Npb25zIGZvciB0aGF0IG9wZXJhdGlvbi4gT25jZSBhbGwgdGhlXG4gKiB2YWx1ZXMgYXJlIHNldCwgdGhpcyBzaG91bGQgYmUgc2VyaWFsaXplZCB3aXRoIHRvU3RyaW5nIGFuZCBzZXQgYXMgdGhlIHBlcm1pc3Npb25zIGZpZWxkIG9uIGFuXG4gKiB7QGxpbmsgQWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlc30gb2JqZWN0LiBJdCBpcyBwb3NzaWJsZSB0byBjb25zdHJ1Y3QgdGhlIHBlcm1pc3Npb25zIHN0cmluZyB3aXRob3V0IHRoaXMgY2xhc3MsIGJ1dFxuICogdGhlIG9yZGVyIG9mIHRoZSBwZXJtaXNzaW9ucyBpcyBwYXJ0aWN1bGFyIGFuZCB0aGlzIGNsYXNzIGd1YXJhbnRlZXMgY29ycmVjdG5lc3MuXG4gKi9cbmNsYXNzIEFjY291bnRTQVNQZXJtaXNzaW9ucyB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQZXJtaXNzaW9uIHRvIHJlYWQgcmVzb3VyY2VzIGFuZCBsaXN0IHF1ZXVlcyBhbmQgdGFibGVzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnJlYWQgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFBlcm1pc3Npb24gdG8gd3JpdGUgcmVzb3VyY2VzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLndyaXRlID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQZXJtaXNzaW9uIHRvIGRlbGV0ZSBibG9icyBhbmQgZmlsZXMgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZGVsZXRlID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQZXJtaXNzaW9uIHRvIGRlbGV0ZSB2ZXJzaW9ucyBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5kZWxldGVWZXJzaW9uID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQZXJtaXNzaW9uIHRvIGxpc3QgYmxvYiBjb250YWluZXJzLCBibG9icywgc2hhcmVzLCBkaXJlY3RvcmllcywgYW5kIGZpbGVzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmxpc3QgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFBlcm1pc3Npb24gdG8gYWRkIG1lc3NhZ2VzLCB0YWJsZSBlbnRpdGllcywgYW5kIGFwcGVuZCB0byBibG9icyBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5hZGQgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFBlcm1pc3Npb24gdG8gY3JlYXRlIGJsb2JzIGFuZCBmaWxlcyBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5jcmVhdGUgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFBlcm1pc3Npb25zIHRvIHVwZGF0ZSBtZXNzYWdlcyBhbmQgdGFibGUgZW50aXRpZXMgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudXBkYXRlID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQZXJtaXNzaW9uIHRvIGdldCBhbmQgZGVsZXRlIG1lc3NhZ2VzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnByb2Nlc3MgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNmaWVzIFRhZyBhY2Nlc3MgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudGFnID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQZXJtaXNzaW9uIHRvIGZpbHRlciBibG9icy5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZmlsdGVyID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQZXJtaXNzaW9uIHRvIHNldCBpbW11dGFiaWxpdHkgcG9saWN5LlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5zZXRJbW11dGFiaWxpdHlQb2xpY3kgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB0aGF0IFBlcm1hbmVudCBEZWxldGUgaXMgcGVybWl0dGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5wZXJtYW5lbnREZWxldGUgPSBmYWxzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUGFyc2UgaW5pdGlhbGl6ZXMgdGhlIEFjY291bnRTQVNQZXJtaXNzaW9ucyBmaWVsZHMgZnJvbSBhIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwZXJtaXNzaW9ucyAtXG4gICAgICovXG4gICAgc3RhdGljIHBhcnNlKHBlcm1pc3Npb25zKSB7XG4gICAgICAgIGNvbnN0IGFjY291bnRTQVNQZXJtaXNzaW9ucyA9IG5ldyBBY2NvdW50U0FTUGVybWlzc2lvbnMoKTtcbiAgICAgICAgZm9yIChjb25zdCBjIG9mIHBlcm1pc3Npb25zKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGMpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwiclwiOlxuICAgICAgICAgICAgICAgICAgICBhY2NvdW50U0FTUGVybWlzc2lvbnMucmVhZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJ3XCI6XG4gICAgICAgICAgICAgICAgICAgIGFjY291bnRTQVNQZXJtaXNzaW9ucy53cml0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJkXCI6XG4gICAgICAgICAgICAgICAgICAgIGFjY291bnRTQVNQZXJtaXNzaW9ucy5kZWxldGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwieFwiOlxuICAgICAgICAgICAgICAgICAgICBhY2NvdW50U0FTUGVybWlzc2lvbnMuZGVsZXRlVmVyc2lvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJsXCI6XG4gICAgICAgICAgICAgICAgICAgIGFjY291bnRTQVNQZXJtaXNzaW9ucy5saXN0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImFcIjpcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudFNBU1Blcm1pc3Npb25zLmFkZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJjXCI6XG4gICAgICAgICAgICAgICAgICAgIGFjY291bnRTQVNQZXJtaXNzaW9ucy5jcmVhdGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwidVwiOlxuICAgICAgICAgICAgICAgICAgICBhY2NvdW50U0FTUGVybWlzc2lvbnMudXBkYXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInBcIjpcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudFNBU1Blcm1pc3Npb25zLnByb2Nlc3MgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwidFwiOlxuICAgICAgICAgICAgICAgICAgICBhY2NvdW50U0FTUGVybWlzc2lvbnMudGFnID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImZcIjpcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudFNBU1Blcm1pc3Npb25zLmZpbHRlciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJpXCI6XG4gICAgICAgICAgICAgICAgICAgIGFjY291bnRTQVNQZXJtaXNzaW9ucy5zZXRJbW11dGFiaWxpdHlQb2xpY3kgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwieVwiOlxuICAgICAgICAgICAgICAgICAgICBhY2NvdW50U0FTUGVybWlzc2lvbnMucGVybWFuZW50RGVsZXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEludmFsaWQgcGVybWlzc2lvbiBjaGFyYWN0ZXI6ICR7Y31gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjb3VudFNBU1Blcm1pc3Npb25zO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEge0BsaW5rIEFjY291bnRTQVNQZXJtaXNzaW9uc30gZnJvbSBhIHJhdyBvYmplY3Qgd2hpY2ggY29udGFpbnMgc2FtZSBrZXlzIGFzIGl0XG4gICAgICogYW5kIGJvb2xlYW4gdmFsdWVzIGZvciB0aGVtLlxuICAgICAqXG4gICAgICogQHBhcmFtIHBlcm1pc3Npb25MaWtlIC1cbiAgICAgKi9cbiAgICBzdGF0aWMgZnJvbShwZXJtaXNzaW9uTGlrZSkge1xuICAgICAgICBjb25zdCBhY2NvdW50U0FTUGVybWlzc2lvbnMgPSBuZXcgQWNjb3VudFNBU1Blcm1pc3Npb25zKCk7XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS5yZWFkKSB7XG4gICAgICAgICAgICBhY2NvdW50U0FTUGVybWlzc2lvbnMucmVhZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLndyaXRlKSB7XG4gICAgICAgICAgICBhY2NvdW50U0FTUGVybWlzc2lvbnMud3JpdGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS5kZWxldGUpIHtcbiAgICAgICAgICAgIGFjY291bnRTQVNQZXJtaXNzaW9ucy5kZWxldGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS5kZWxldGVWZXJzaW9uKSB7XG4gICAgICAgICAgICBhY2NvdW50U0FTUGVybWlzc2lvbnMuZGVsZXRlVmVyc2lvbiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLmZpbHRlcikge1xuICAgICAgICAgICAgYWNjb3VudFNBU1Blcm1pc3Npb25zLmZpbHRlciA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLnRhZykge1xuICAgICAgICAgICAgYWNjb3VudFNBU1Blcm1pc3Npb25zLnRhZyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb25MaWtlLmxpc3QpIHtcbiAgICAgICAgICAgIGFjY291bnRTQVNQZXJtaXNzaW9ucy5saXN0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2UuYWRkKSB7XG4gICAgICAgICAgICBhY2NvdW50U0FTUGVybWlzc2lvbnMuYWRkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2UuY3JlYXRlKSB7XG4gICAgICAgICAgICBhY2NvdW50U0FTUGVybWlzc2lvbnMuY3JlYXRlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2UudXBkYXRlKSB7XG4gICAgICAgICAgICBhY2NvdW50U0FTUGVybWlzc2lvbnMudXBkYXRlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbkxpa2UucHJvY2Vzcykge1xuICAgICAgICAgICAgYWNjb3VudFNBU1Blcm1pc3Npb25zLnByb2Nlc3MgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS5zZXRJbW11dGFiaWxpdHlQb2xpY3kpIHtcbiAgICAgICAgICAgIGFjY291bnRTQVNQZXJtaXNzaW9ucy5zZXRJbW11dGFiaWxpdHlQb2xpY3kgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZXJtaXNzaW9uTGlrZS5wZXJtYW5lbnREZWxldGUpIHtcbiAgICAgICAgICAgIGFjY291bnRTQVNQZXJtaXNzaW9ucy5wZXJtYW5lbnREZWxldGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2NvdW50U0FTUGVybWlzc2lvbnM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFByb2R1Y2VzIHRoZSBTQVMgcGVybWlzc2lvbnMgc3RyaW5nIGZvciBhbiBBenVyZSBTdG9yYWdlIGFjY291bnQuXG4gICAgICogQ2FsbCB0aGlzIG1ldGhvZCB0byBzZXQgQWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcyBQZXJtaXNzaW9ucyBmaWVsZC5cbiAgICAgKlxuICAgICAqIFVzaW5nIHRoaXMgbWV0aG9kIHdpbGwgZ3VhcmFudGVlIHRoZSByZXNvdXJjZSB0eXBlcyBhcmUgaW5cbiAgICAgKiBhbiBvcmRlciBhY2NlcHRlZCBieSB0aGUgc2VydmljZS5cbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2NvbnN0cnVjdGluZy1hbi1hY2NvdW50LXNhc1xuICAgICAqXG4gICAgICovXG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIC8vIFRoZSBvcmRlciBvZiB0aGUgY2hhcmFjdGVycyBzaG91bGQgYmUgYXMgc3BlY2lmaWVkIGhlcmUgdG8gZW5zdXJlIGNvcnJlY3RuZXNzOlxuICAgICAgICAvLyBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvY29uc3RydWN0aW5nLWFuLWFjY291bnQtc2FzXG4gICAgICAgIC8vIFVzZSBhIHN0cmluZyBhcnJheSBpbnN0ZWFkIG9mIHN0cmluZyBjb25jYXRlbmF0aW5nICs9IG9wZXJhdG9yIGZvciBwZXJmb3JtYW5jZVxuICAgICAgICBjb25zdCBwZXJtaXNzaW9ucyA9IFtdO1xuICAgICAgICBpZiAodGhpcy5yZWFkKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwiclwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy53cml0ZSkge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcIndcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZGVsZXRlKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwiZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kZWxldGVWZXJzaW9uKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwieFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5maWx0ZXIpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJmXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnRhZykge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcInRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubGlzdCkge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcImxcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuYWRkKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwiYVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jcmVhdGUpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJjXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnVwZGF0ZSkge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcInVcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucHJvY2Vzcykge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChcInBcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2V0SW1tdXRhYmlsaXR5UG9saWN5KSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFwiaVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wZXJtYW5lbnREZWxldGUpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2goXCJ5XCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwZXJtaXNzaW9ucy5qb2luKFwiXCIpO1xuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIE9OTFkgQVZBSUxBQkxFIElOIE5PREUuSlMgUlVOVElNRS5cbiAqXG4gKiBUaGlzIGlzIGEgaGVscGVyIGNsYXNzIHRvIGNvbnN0cnVjdCBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHJlc291cmNlcyBhY2Nlc3NpYmxlIGJ5IGFuIEFjY291bnRTQVMuIFNldHRpbmcgYSB2YWx1ZVxuICogdG8gdHJ1ZSBtZWFucyB0aGF0IGFueSBTQVMgd2hpY2ggdXNlcyB0aGVzZSBwZXJtaXNzaW9ucyB3aWxsIGdyYW50IGFjY2VzcyB0byB0aGF0IHJlc291cmNlIHR5cGUuIE9uY2UgYWxsIHRoZVxuICogdmFsdWVzIGFyZSBzZXQsIHRoaXMgc2hvdWxkIGJlIHNlcmlhbGl6ZWQgd2l0aCB0b1N0cmluZyBhbmQgc2V0IGFzIHRoZSByZXNvdXJjZXMgZmllbGQgb24gYW5cbiAqIHtAbGluayBBY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzfSBvYmplY3QuIEl0IGlzIHBvc3NpYmxlIHRvIGNvbnN0cnVjdCB0aGUgcmVzb3VyY2VzIHN0cmluZyB3aXRob3V0IHRoaXMgY2xhc3MsIGJ1dFxuICogdGhlIG9yZGVyIG9mIHRoZSByZXNvdXJjZXMgaXMgcGFydGljdWxhciBhbmQgdGhpcyBjbGFzcyBndWFyYW50ZWVzIGNvcnJlY3RuZXNzLlxuICovXG5jbGFzcyBBY2NvdW50U0FTUmVzb3VyY2VUeXBlcyB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQZXJtaXNzaW9uIHRvIGFjY2VzcyBzZXJ2aWNlIGxldmVsIEFQSXMgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuc2VydmljZSA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogUGVybWlzc2lvbiB0byBhY2Nlc3MgY29udGFpbmVyIGxldmVsIEFQSXMgKEJsb2IgQ29udGFpbmVycywgVGFibGVzLCBRdWV1ZXMsIEZpbGUgU2hhcmVzKSBncmFudGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5jb250YWluZXIgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFBlcm1pc3Npb24gdG8gYWNjZXNzIG9iamVjdCBsZXZlbCBBUElzIChCbG9icywgVGFibGUgRW50aXRpZXMsIFF1ZXVlIE1lc3NhZ2VzLCBGaWxlcykgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMub2JqZWN0ID0gZmFsc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4ge0BsaW5rIEFjY291bnRTQVNSZXNvdXJjZVR5cGVzfSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVzb3VyY2UgdHlwZXMgc3RyaW5nLiBUaGlzIG1ldGhvZCB3aWxsIHRocm93IGFuXG4gICAgICogRXJyb3IgaWYgaXQgZW5jb3VudGVycyBhIGNoYXJhY3RlciB0aGF0IGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSB2YWxpZCByZXNvdXJjZSB0eXBlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlc291cmNlVHlwZXMgLVxuICAgICAqL1xuICAgIHN0YXRpYyBwYXJzZShyZXNvdXJjZVR5cGVzKSB7XG4gICAgICAgIGNvbnN0IGFjY291bnRTQVNSZXNvdXJjZVR5cGVzID0gbmV3IEFjY291bnRTQVNSZXNvdXJjZVR5cGVzKCk7XG4gICAgICAgIGZvciAoY29uc3QgYyBvZiByZXNvdXJjZVR5cGVzKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGMpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwic1wiOlxuICAgICAgICAgICAgICAgICAgICBhY2NvdW50U0FTUmVzb3VyY2VUeXBlcy5zZXJ2aWNlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImNcIjpcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudFNBU1Jlc291cmNlVHlwZXMuY29udGFpbmVyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm9cIjpcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudFNBU1Jlc291cmNlVHlwZXMub2JqZWN0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEludmFsaWQgcmVzb3VyY2UgdHlwZTogJHtjfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2NvdW50U0FTUmVzb3VyY2VUeXBlcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29udmVydHMgdGhlIGdpdmVuIHJlc291cmNlIHR5cGVzIHRvIGEgc3RyaW5nLlxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvY29uc3RydWN0aW5nLWFuLWFjY291bnQtc2FzXG4gICAgICpcbiAgICAgKi9cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgY29uc3QgcmVzb3VyY2VUeXBlcyA9IFtdO1xuICAgICAgICBpZiAodGhpcy5zZXJ2aWNlKSB7XG4gICAgICAgICAgICByZXNvdXJjZVR5cGVzLnB1c2goXCJzXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNvbnRhaW5lcikge1xuICAgICAgICAgICAgcmVzb3VyY2VUeXBlcy5wdXNoKFwiY1wiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vYmplY3QpIHtcbiAgICAgICAgICAgIHJlc291cmNlVHlwZXMucHVzaChcIm9cIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc291cmNlVHlwZXMuam9pbihcIlwiKTtcbiAgICB9XG59XG5cbi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuLyoqXG4gKiBPTkxZIEFWQUlMQUJMRSBJTiBOT0RFLkpTIFJVTlRJTUUuXG4gKlxuICogVGhpcyBpcyBhIGhlbHBlciBjbGFzcyB0byBjb25zdHJ1Y3QgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBzZXJ2aWNlcyBhY2Nlc3NpYmxlIGJ5IGFuIEFjY291bnRTQVMuIFNldHRpbmcgYSB2YWx1ZVxuICogdG8gdHJ1ZSBtZWFucyB0aGF0IGFueSBTQVMgd2hpY2ggdXNlcyB0aGVzZSBwZXJtaXNzaW9ucyB3aWxsIGdyYW50IGFjY2VzcyB0byB0aGF0IHNlcnZpY2UuIE9uY2UgYWxsIHRoZVxuICogdmFsdWVzIGFyZSBzZXQsIHRoaXMgc2hvdWxkIGJlIHNlcmlhbGl6ZWQgd2l0aCB0b1N0cmluZyBhbmQgc2V0IGFzIHRoZSBzZXJ2aWNlcyBmaWVsZCBvbiBhblxuICoge0BsaW5rIEFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXN9IG9iamVjdC4gSXQgaXMgcG9zc2libGUgdG8gY29uc3RydWN0IHRoZSBzZXJ2aWNlcyBzdHJpbmcgd2l0aG91dCB0aGlzIGNsYXNzLCBidXRcbiAqIHRoZSBvcmRlciBvZiB0aGUgc2VydmljZXMgaXMgcGFydGljdWxhciBhbmQgdGhpcyBjbGFzcyBndWFyYW50ZWVzIGNvcnJlY3RuZXNzLlxuICovXG5jbGFzcyBBY2NvdW50U0FTU2VydmljZXMge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAvKipcbiAgICAgICAgICogUGVybWlzc2lvbiB0byBhY2Nlc3MgYmxvYiByZXNvdXJjZXMgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuYmxvYiA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogUGVybWlzc2lvbiB0byBhY2Nlc3MgZmlsZSByZXNvdXJjZXMgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZmlsZSA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogUGVybWlzc2lvbiB0byBhY2Nlc3MgcXVldWUgcmVzb3VyY2VzIGdyYW50ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnF1ZXVlID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQZXJtaXNzaW9uIHRvIGFjY2VzcyB0YWJsZSByZXNvdXJjZXMgZ3JhbnRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudGFibGUgPSBmYWxzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiB7QGxpbmsgQWNjb3VudFNBU1NlcnZpY2VzfSBmcm9tIHRoZSBzcGVjaWZpZWQgc2VydmljZXMgc3RyaW5nLiBUaGlzIG1ldGhvZCB3aWxsIHRocm93IGFuXG4gICAgICogRXJyb3IgaWYgaXQgZW5jb3VudGVycyBhIGNoYXJhY3RlciB0aGF0IGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSB2YWxpZCBzZXJ2aWNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHNlcnZpY2VzIC1cbiAgICAgKi9cbiAgICBzdGF0aWMgcGFyc2Uoc2VydmljZXMpIHtcbiAgICAgICAgY29uc3QgYWNjb3VudFNBU1NlcnZpY2VzID0gbmV3IEFjY291bnRTQVNTZXJ2aWNlcygpO1xuICAgICAgICBmb3IgKGNvbnN0IGMgb2Ygc2VydmljZXMpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoYykge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJiXCI6XG4gICAgICAgICAgICAgICAgICAgIGFjY291bnRTQVNTZXJ2aWNlcy5ibG9iID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImZcIjpcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudFNBU1NlcnZpY2VzLmZpbGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwicVwiOlxuICAgICAgICAgICAgICAgICAgICBhY2NvdW50U0FTU2VydmljZXMucXVldWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwidFwiOlxuICAgICAgICAgICAgICAgICAgICBhY2NvdW50U0FTU2VydmljZXMudGFibGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgSW52YWxpZCBzZXJ2aWNlIGNoYXJhY3RlcjogJHtjfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2NvdW50U0FTU2VydmljZXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIHRoZSBnaXZlbiBzZXJ2aWNlcyB0byBhIHN0cmluZy5cbiAgICAgKlxuICAgICAqL1xuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICBjb25zdCBzZXJ2aWNlcyA9IFtdO1xuICAgICAgICBpZiAodGhpcy5ibG9iKSB7XG4gICAgICAgICAgICBzZXJ2aWNlcy5wdXNoKFwiYlwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy50YWJsZSkge1xuICAgICAgICAgICAgc2VydmljZXMucHVzaChcInRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucXVldWUpIHtcbiAgICAgICAgICAgIHNlcnZpY2VzLnB1c2goXCJxXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZpbGUpIHtcbiAgICAgICAgICAgIHNlcnZpY2VzLnB1c2goXCJmXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXJ2aWNlcy5qb2luKFwiXCIpO1xuICAgIH1cbn1cblxuLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4vKipcbiAqIE9OTFkgQVZBSUxBQkxFIElOIE5PREUuSlMgUlVOVElNRS5cbiAqXG4gKiBHZW5lcmF0ZXMgYSB7QGxpbmsgU0FTUXVlcnlQYXJhbWV0ZXJzfSBvYmplY3Qgd2hpY2ggY29udGFpbnMgYWxsIFNBUyBxdWVyeSBwYXJhbWV0ZXJzIG5lZWRlZCB0byBtYWtlIGFuIGFjdHVhbFxuICogUkVTVCByZXF1ZXN0LlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2NvbnN0cnVjdGluZy1hbi1hY2NvdW50LXNhc1xuICpcbiAqIEBwYXJhbSBhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzIC1cbiAqIEBwYXJhbSBzaGFyZWRLZXlDcmVkZW50aWFsIC1cbiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGVBY2NvdW50U0FTUXVlcnlQYXJhbWV0ZXJzKGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMsIHNoYXJlZEtleUNyZWRlbnRpYWwpIHtcbiAgICByZXR1cm4gZ2VuZXJhdGVBY2NvdW50U0FTUXVlcnlQYXJhbWV0ZXJzSW50ZXJuYWwoYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcywgc2hhcmVkS2V5Q3JlZGVudGlhbClcbiAgICAgICAgLnNhc1F1ZXJ5UGFyYW1ldGVycztcbn1cbmZ1bmN0aW9uIGdlbmVyYXRlQWNjb3VudFNBU1F1ZXJ5UGFyYW1ldGVyc0ludGVybmFsKGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMsIHNoYXJlZEtleUNyZWRlbnRpYWwpIHtcbiAgICBjb25zdCB2ZXJzaW9uID0gYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uXG4gICAgICAgID8gYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy52ZXJzaW9uXG4gICAgICAgIDogU0VSVklDRV9WRVJTSU9OO1xuICAgIGlmIChhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zICYmXG4gICAgICAgIGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMuc2V0SW1tdXRhYmlsaXR5UG9saWN5ICYmXG4gICAgICAgIHZlcnNpb24gPCBcIjIwMjAtMDgtMDRcIikge1xuICAgICAgICB0aHJvdyBSYW5nZUVycm9yKFwiJ3ZlcnNpb24nIG11c3QgYmUgPj0gJzIwMjAtMDgtMDQnIHdoZW4gcHJvdmlkZWQgJ2knIHBlcm1pc3Npb24uXCIpO1xuICAgIH1cbiAgICBpZiAoYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucyAmJlxuICAgICAgICBhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zLmRlbGV0ZVZlcnNpb24gJiZcbiAgICAgICAgdmVyc2lvbiA8IFwiMjAxOS0xMC0xMFwiKSB7XG4gICAgICAgIHRocm93IFJhbmdlRXJyb3IoXCIndmVyc2lvbicgbXVzdCBiZSA+PSAnMjAxOS0xMC0xMCcgd2hlbiBwcm92aWRlZCAneCcgcGVybWlzc2lvbi5cIik7XG4gICAgfVxuICAgIGlmIChhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zICYmXG4gICAgICAgIGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMucGVybWFuZW50RGVsZXRlICYmXG4gICAgICAgIHZlcnNpb24gPCBcIjIwMTktMTAtMTBcIikge1xuICAgICAgICB0aHJvdyBSYW5nZUVycm9yKFwiJ3ZlcnNpb24nIG11c3QgYmUgPj0gJzIwMTktMTAtMTAnIHdoZW4gcHJvdmlkZWQgJ3knIHBlcm1pc3Npb24uXCIpO1xuICAgIH1cbiAgICBpZiAoYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucyAmJlxuICAgICAgICBhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLnBlcm1pc3Npb25zLnRhZyAmJlxuICAgICAgICB2ZXJzaW9uIDwgXCIyMDE5LTEyLTEyXCIpIHtcbiAgICAgICAgdGhyb3cgUmFuZ2VFcnJvcihcIid2ZXJzaW9uJyBtdXN0IGJlID49ICcyMDE5LTEyLTEyJyB3aGVuIHByb3ZpZGVkICd0JyBwZXJtaXNzaW9uLlwiKTtcbiAgICB9XG4gICAgaWYgKGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMgJiZcbiAgICAgICAgYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5wZXJtaXNzaW9ucy5maWx0ZXIgJiZcbiAgICAgICAgdmVyc2lvbiA8IFwiMjAxOS0xMi0xMlwiKSB7XG4gICAgICAgIHRocm93IFJhbmdlRXJyb3IoXCIndmVyc2lvbicgbXVzdCBiZSA+PSAnMjAxOS0xMi0xMicgd2hlbiBwcm92aWRlZCAnZicgcGVybWlzc2lvbi5cIik7XG4gICAgfVxuICAgIGlmIChhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLmVuY3J5cHRpb25TY29wZSAmJiB2ZXJzaW9uIDwgXCIyMDIwLTEyLTA2XCIpIHtcbiAgICAgICAgdGhyb3cgUmFuZ2VFcnJvcihcIid2ZXJzaW9uJyBtdXN0IGJlID49ICcyMDIwLTEyLTA2JyB3aGVuIHByb3ZpZGVkICdlbmNyeXB0aW9uU2NvcGUnIGluIFNBUy5cIik7XG4gICAgfVxuICAgIGNvbnN0IHBhcnNlZFBlcm1pc3Npb25zID0gQWNjb3VudFNBU1Blcm1pc3Npb25zLnBhcnNlKGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMucGVybWlzc2lvbnMudG9TdHJpbmcoKSk7XG4gICAgY29uc3QgcGFyc2VkU2VydmljZXMgPSBBY2NvdW50U0FTU2VydmljZXMucGFyc2UoYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5zZXJ2aWNlcykudG9TdHJpbmcoKTtcbiAgICBjb25zdCBwYXJzZWRSZXNvdXJjZVR5cGVzID0gQWNjb3VudFNBU1Jlc291cmNlVHlwZXMucGFyc2UoYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5yZXNvdXJjZVR5cGVzKS50b1N0cmluZygpO1xuICAgIGxldCBzdHJpbmdUb1NpZ247XG4gICAgaWYgKHZlcnNpb24gPj0gXCIyMDIwLTEyLTA2XCIpIHtcbiAgICAgICAgc3RyaW5nVG9TaWduID0gW1xuICAgICAgICAgICAgc2hhcmVkS2V5Q3JlZGVudGlhbC5hY2NvdW50TmFtZSxcbiAgICAgICAgICAgIHBhcnNlZFBlcm1pc3Npb25zLFxuICAgICAgICAgICAgcGFyc2VkU2VydmljZXMsXG4gICAgICAgICAgICBwYXJzZWRSZXNvdXJjZVR5cGVzLFxuICAgICAgICAgICAgYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5zdGFydHNPblxuICAgICAgICAgICAgICAgID8gdHJ1bmNhdGVkSVNPODA2MURhdGUoYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5zdGFydHNPbiwgZmFsc2UpXG4gICAgICAgICAgICAgICAgOiBcIlwiLFxuICAgICAgICAgICAgdHJ1bmNhdGVkSVNPODA2MURhdGUoYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5leHBpcmVzT24sIGZhbHNlKSxcbiAgICAgICAgICAgIGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMuaXBSYW5nZSA/IGlwUmFuZ2VUb1N0cmluZyhhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLmlwUmFuZ2UpIDogXCJcIixcbiAgICAgICAgICAgIGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMucHJvdG9jb2wgPyBhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLnByb3RvY29sIDogXCJcIixcbiAgICAgICAgICAgIHZlcnNpb24sXG4gICAgICAgICAgICBhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLmVuY3J5cHRpb25TY29wZSA/IGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMuZW5jcnlwdGlvblNjb3BlIDogXCJcIixcbiAgICAgICAgICAgIFwiXCIsIC8vIEFjY291bnQgU0FTIHJlcXVpcmVzIGFuIGFkZGl0aW9uYWwgbmV3bGluZSBjaGFyYWN0ZXJcbiAgICAgICAgXS5qb2luKFwiXFxuXCIpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgc3RyaW5nVG9TaWduID0gW1xuICAgICAgICAgICAgc2hhcmVkS2V5Q3JlZGVudGlhbC5hY2NvdW50TmFtZSxcbiAgICAgICAgICAgIHBhcnNlZFBlcm1pc3Npb25zLFxuICAgICAgICAgICAgcGFyc2VkU2VydmljZXMsXG4gICAgICAgICAgICBwYXJzZWRSZXNvdXJjZVR5cGVzLFxuICAgICAgICAgICAgYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5zdGFydHNPblxuICAgICAgICAgICAgICAgID8gdHJ1bmNhdGVkSVNPODA2MURhdGUoYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5zdGFydHNPbiwgZmFsc2UpXG4gICAgICAgICAgICAgICAgOiBcIlwiLFxuICAgICAgICAgICAgdHJ1bmNhdGVkSVNPODA2MURhdGUoYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5leHBpcmVzT24sIGZhbHNlKSxcbiAgICAgICAgICAgIGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMuaXBSYW5nZSA/IGlwUmFuZ2VUb1N0cmluZyhhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLmlwUmFuZ2UpIDogXCJcIixcbiAgICAgICAgICAgIGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMucHJvdG9jb2wgPyBhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLnByb3RvY29sIDogXCJcIixcbiAgICAgICAgICAgIHZlcnNpb24sXG4gICAgICAgICAgICBcIlwiLCAvLyBBY2NvdW50IFNBUyByZXF1aXJlcyBhbiBhZGRpdGlvbmFsIG5ld2xpbmUgY2hhcmFjdGVyXG4gICAgICAgIF0uam9pbihcIlxcblwiKTtcbiAgICB9XG4gICAgY29uc3Qgc2lnbmF0dXJlID0gc2hhcmVkS2V5Q3JlZGVudGlhbC5jb21wdXRlSE1BQ1NIQTI1NihzdHJpbmdUb1NpZ24pO1xuICAgIHJldHVybiB7XG4gICAgICAgIHNhc1F1ZXJ5UGFyYW1ldGVyczogbmV3IFNBU1F1ZXJ5UGFyYW1ldGVycyh2ZXJzaW9uLCBzaWduYXR1cmUsIHBhcnNlZFBlcm1pc3Npb25zLnRvU3RyaW5nKCksIHBhcnNlZFNlcnZpY2VzLCBwYXJzZWRSZXNvdXJjZVR5cGVzLCBhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLnByb3RvY29sLCBhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLnN0YXJ0c09uLCBhY2NvdW50U0FTU2lnbmF0dXJlVmFsdWVzLmV4cGlyZXNPbiwgYWNjb3VudFNBU1NpZ25hdHVyZVZhbHVlcy5pcFJhbmdlLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFjY291bnRTQVNTaWduYXR1cmVWYWx1ZXMuZW5jcnlwdGlvblNjb3BlKSxcbiAgICAgICAgc3RyaW5nVG9TaWduOiBzdHJpbmdUb1NpZ24sXG4gICAgfTtcbn1cblxuLyoqXG4gKiBBIEJsb2JTZXJ2aWNlQ2xpZW50IHJlcHJlc2VudHMgYSBDbGllbnQgdG8gdGhlIEF6dXJlIFN0b3JhZ2UgQmxvYiBzZXJ2aWNlIGFsbG93aW5nIHlvdVxuICogdG8gbWFuaXB1bGF0ZSBibG9iIGNvbnRhaW5lcnMuXG4gKi9cbmNsYXNzIEJsb2JTZXJ2aWNlQ2xpZW50IGV4dGVuZHMgU3RvcmFnZUNsaWVudCB7XG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIEJsb2JTZXJ2aWNlQ2xpZW50IGZyb20gY29ubmVjdGlvbiBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29ubmVjdGlvblN0cmluZyAtIEFjY291bnQgY29ubmVjdGlvbiBzdHJpbmcgb3IgYSBTQVMgY29ubmVjdGlvbiBzdHJpbmcgb2YgYW4gQXp1cmUgc3RvcmFnZSBhY2NvdW50LlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsgTm90ZSAtIEFjY291bnQgY29ubmVjdGlvbiBzdHJpbmcgY2FuIG9ubHkgYmUgdXNlZCBpbiBOT0RFLkpTIHJ1bnRpbWUuIF1cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY2NvdW50IGNvbm5lY3Rpb24gc3RyaW5nIGV4YW1wbGUgLVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBEZWZhdWx0RW5kcG9pbnRzUHJvdG9jb2w9aHR0cHM7QWNjb3VudE5hbWU9bXlhY2NvdW50O0FjY291bnRLZXk9YWNjb3VudEtleTtFbmRwb2ludFN1ZmZpeD1jb3JlLndpbmRvd3MubmV0YFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNBUyBjb25uZWN0aW9uIHN0cmluZyBleGFtcGxlIC1cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgQmxvYkVuZHBvaW50PWh0dHBzOi8vbXlhY2NvdW50LmJsb2IuY29yZS53aW5kb3dzLm5ldC87UXVldWVFbmRwb2ludD1odHRwczovL215YWNjb3VudC5xdWV1ZS5jb3JlLndpbmRvd3MubmV0LztGaWxlRW5kcG9pbnQ9aHR0cHM6Ly9teWFjY291bnQuZmlsZS5jb3JlLndpbmRvd3MubmV0LztUYWJsZUVuZHBvaW50PWh0dHBzOi8vbXlhY2NvdW50LnRhYmxlLmNvcmUud2luZG93cy5uZXQvO1NoYXJlZEFjY2Vzc1NpZ25hdHVyZT1zYXNTdHJpbmdgXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbC4gT3B0aW9ucyB0byBjb25maWd1cmUgdGhlIEhUVFAgcGlwZWxpbmUuXG4gICAgICovXG4gICAgc3RhdGljIGZyb21Db25uZWN0aW9uU3RyaW5nKGNvbm5lY3Rpb25TdHJpbmcsIFxuICAgIC8vIExlZ2FjeSwgbm8gZml4IGZvciBlc2xpbnQgZXJyb3Igd2l0aG91dCBicmVha2luZy4gRGlzYWJsZSBpdCBmb3IgdGhpcyBpbnRlcmZhY2UuXG4gICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhenVyZS9henVyZS1zZGsvdHMtbmFtaW5nLW9wdGlvbnMqL1xuICAgIG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgICAgIGNvbnN0IGV4dHJhY3RlZENyZWRzID0gZXh0cmFjdENvbm5lY3Rpb25TdHJpbmdQYXJ0cyhjb25uZWN0aW9uU3RyaW5nKTtcbiAgICAgICAgaWYgKGV4dHJhY3RlZENyZWRzLmtpbmQgPT09IFwiQWNjb3VudENvbm5TdHJpbmdcIikge1xuICAgICAgICAgICAgaWYgKGNvcmVVdGlsLmlzTm9kZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNoYXJlZEtleUNyZWRlbnRpYWwgPSBuZXcgU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwoZXh0cmFjdGVkQ3JlZHMuYWNjb3VudE5hbWUsIGV4dHJhY3RlZENyZWRzLmFjY291bnRLZXkpO1xuICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucy5wcm94eU9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5wcm94eU9wdGlvbnMgPSBjb3JlUmVzdFBpcGVsaW5lLmdldERlZmF1bHRQcm94eVNldHRpbmdzKGV4dHJhY3RlZENyZWRzLnByb3h5VXJpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcGlwZWxpbmUgPSBuZXdQaXBlbGluZShzaGFyZWRLZXlDcmVkZW50aWFsLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEJsb2JTZXJ2aWNlQ2xpZW50KGV4dHJhY3RlZENyZWRzLnVybCwgcGlwZWxpbmUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQWNjb3VudCBjb25uZWN0aW9uIHN0cmluZyBpcyBvbmx5IHN1cHBvcnRlZCBpbiBOb2RlLmpzIGVudmlyb25tZW50XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGV4dHJhY3RlZENyZWRzLmtpbmQgPT09IFwiU0FTQ29ublN0cmluZ1wiKSB7XG4gICAgICAgICAgICBjb25zdCBwaXBlbGluZSA9IG5ld1BpcGVsaW5lKG5ldyBBbm9ueW1vdXNDcmVkZW50aWFsKCksIG9wdGlvbnMpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBCbG9iU2VydmljZUNsaWVudChleHRyYWN0ZWRDcmVkcy51cmwgKyBcIj9cIiArIGV4dHJhY3RlZENyZWRzLmFjY291bnRTYXMsIHBpcGVsaW5lKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbm5lY3Rpb24gc3RyaW5nIG11c3QgYmUgZWl0aGVyIGFuIEFjY291bnQgY29ubmVjdGlvbiBzdHJpbmcgb3IgYSBTQVMgY29ubmVjdGlvbiBzdHJpbmdcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3RydWN0b3IodXJsLCBjcmVkZW50aWFsT3JQaXBlbGluZSwgXG4gICAgLy8gTGVnYWN5LCBubyBmaXggZm9yIGVzbGludCBlcnJvciB3aXRob3V0IGJyZWFraW5nLiBEaXNhYmxlIGl0IGZvciB0aGlzIGludGVyZmFjZS5cbiAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGF6dXJlL2F6dXJlLXNkay90cy1uYW1pbmctb3B0aW9ucyovXG4gICAgb3B0aW9ucykge1xuICAgICAgICBsZXQgcGlwZWxpbmU7XG4gICAgICAgIGlmIChpc1BpcGVsaW5lTGlrZShjcmVkZW50aWFsT3JQaXBlbGluZSkpIHtcbiAgICAgICAgICAgIHBpcGVsaW5lID0gY3JlZGVudGlhbE9yUGlwZWxpbmU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoKGNvcmVVdGlsLmlzTm9kZSAmJiBjcmVkZW50aWFsT3JQaXBlbGluZSBpbnN0YW5jZW9mIFN0b3JhZ2VTaGFyZWRLZXlDcmVkZW50aWFsKSB8fFxuICAgICAgICAgICAgY3JlZGVudGlhbE9yUGlwZWxpbmUgaW5zdGFuY2VvZiBBbm9ueW1vdXNDcmVkZW50aWFsIHx8XG4gICAgICAgICAgICBjb3JlQXV0aC5pc1Rva2VuQ3JlZGVudGlhbChjcmVkZW50aWFsT3JQaXBlbGluZSkpIHtcbiAgICAgICAgICAgIHBpcGVsaW5lID0gbmV3UGlwZWxpbmUoY3JlZGVudGlhbE9yUGlwZWxpbmUsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gVGhlIHNlY29uZCBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkLiBVc2UgYW5vbnltb3VzIGNyZWRlbnRpYWxcbiAgICAgICAgICAgIHBpcGVsaW5lID0gbmV3UGlwZWxpbmUobmV3IEFub255bW91c0NyZWRlbnRpYWwoKSwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIodXJsLCBwaXBlbGluZSk7XG4gICAgICAgIHRoaXMuc2VydmljZUNvbnRleHQgPSB0aGlzLnN0b3JhZ2VDbGllbnRDb250ZXh0LnNlcnZpY2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSB7QGxpbmsgQ29udGFpbmVyQ2xpZW50fSBvYmplY3RcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb250YWluZXJOYW1lIC0gQSBjb250YWluZXIgbmFtZVxuICAgICAqIEByZXR1cm5zIEEgbmV3IENvbnRhaW5lckNsaWVudCBvYmplY3QgZm9yIHRoZSBnaXZlbiBjb250YWluZXIgbmFtZS5cbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNhZ2U6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnN0IGNvbnRhaW5lckNsaWVudCA9IGJsb2JTZXJ2aWNlQ2xpZW50LmdldENvbnRhaW5lckNsaWVudChcIjxjb250YWluZXIgbmFtZT5cIik7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgZ2V0Q29udGFpbmVyQ2xpZW50KGNvbnRhaW5lck5hbWUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb250YWluZXJDbGllbnQoYXBwZW5kVG9VUkxQYXRoKHRoaXMudXJsLCBlbmNvZGVVUklDb21wb25lbnQoY29udGFpbmVyTmFtZSkpLCB0aGlzLnBpcGVsaW5lKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgQmxvYiBjb250YWluZXIuIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2NyZWF0ZS1jb250YWluZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb250YWluZXJOYW1lIC0gTmFtZSBvZiB0aGUgY29udGFpbmVyIHRvIGNyZWF0ZS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gY29uZmlndXJlIENvbnRhaW5lciBDcmVhdGUgb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIENvbnRhaW5lciBjcmVhdGlvbiByZXNwb25zZSBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgY29udGFpbmVyIGNsaWVudC5cbiAgICAgKi9cbiAgICBhc3luYyBjcmVhdGVDb250YWluZXIoY29udGFpbmVyTmFtZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYlNlcnZpY2VDbGllbnQtY3JlYXRlQ29udGFpbmVyXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyQ2xpZW50ID0gdGhpcy5nZXRDb250YWluZXJDbGllbnQoY29udGFpbmVyTmFtZSk7XG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJDcmVhdGVSZXNwb25zZSA9IGF3YWl0IGNvbnRhaW5lckNsaWVudC5jcmVhdGUodXBkYXRlZE9wdGlvbnMpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBjb250YWluZXJDbGllbnQsXG4gICAgICAgICAgICAgICAgY29udGFpbmVyQ3JlYXRlUmVzcG9uc2UsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVsZXRlcyBhIEJsb2IgY29udGFpbmVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIGNvbnRhaW5lck5hbWUgLSBOYW1lIG9mIHRoZSBjb250YWluZXIgdG8gZGVsZXRlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBjb25maWd1cmUgQ29udGFpbmVyIERlbGV0ZSBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgQ29udGFpbmVyIGRlbGV0aW9uIHJlc3BvbnNlLlxuICAgICAqL1xuICAgIGFzeW5jIGRlbGV0ZUNvbnRhaW5lcihjb250YWluZXJOYW1lLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iU2VydmljZUNsaWVudC1kZWxldGVDb250YWluZXJcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJDbGllbnQgPSB0aGlzLmdldENvbnRhaW5lckNsaWVudChjb250YWluZXJOYW1lKTtcbiAgICAgICAgICAgIHJldHVybiBjb250YWluZXJDbGllbnQuZGVsZXRlKHVwZGF0ZWRPcHRpb25zKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlc3RvcmUgYSBwcmV2aW91c2x5IGRlbGV0ZWQgQmxvYiBjb250YWluZXIuXG4gICAgICogVGhpcyBBUEkgaXMgb25seSBmdW5jdGlvbmFsIGlmIENvbnRhaW5lciBTb2Z0IERlbGV0ZSBpcyBlbmFibGVkIGZvciB0aGUgc3RvcmFnZSBhY2NvdW50IGFzc29jaWF0ZWQgd2l0aCB0aGUgY29udGFpbmVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRlbGV0ZWRDb250YWluZXJOYW1lIC0gTmFtZSBvZiB0aGUgcHJldmlvdXNseSBkZWxldGVkIGNvbnRhaW5lci5cbiAgICAgKiBAcGFyYW0gZGVsZXRlZENvbnRhaW5lclZlcnNpb24gLSBWZXJzaW9uIG9mIHRoZSBwcmV2aW91c2x5IGRlbGV0ZWQgY29udGFpbmVyLCB1c2VkIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHRoZSBkZWxldGVkIGNvbnRhaW5lci5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gY29uZmlndXJlIENvbnRhaW5lciBSZXN0b3JlIG9wZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyBDb250YWluZXIgZGVsZXRpb24gcmVzcG9uc2UuXG4gICAgICovXG4gICAgYXN5bmMgdW5kZWxldGVDb250YWluZXIoZGVsZXRlZENvbnRhaW5lck5hbWUsIGRlbGV0ZWRDb250YWluZXJWZXJzaW9uLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iU2VydmljZUNsaWVudC11bmRlbGV0ZUNvbnRhaW5lclwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lckNsaWVudCA9IHRoaXMuZ2V0Q29udGFpbmVyQ2xpZW50KG9wdGlvbnMuZGVzdGluYXRpb25Db250YWluZXJOYW1lIHx8IGRlbGV0ZWRDb250YWluZXJOYW1lKTtcbiAgICAgICAgICAgIC8vIEhhY2sgdG8gYWNjZXNzIGEgcHJvdGVjdGVkIG1lbWJlci5cbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lckNvbnRleHQgPSBjb250YWluZXJDbGllbnRbXCJzdG9yYWdlQ2xpZW50Q29udGV4dFwiXS5jb250YWluZXI7XG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJVbmRlbGV0ZVJlc3BvbnNlID0gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgY29udGFpbmVyQ29udGV4dC5yZXN0b3JlKHtcbiAgICAgICAgICAgICAgICBkZWxldGVkQ29udGFpbmVyTmFtZSxcbiAgICAgICAgICAgICAgICBkZWxldGVkQ29udGFpbmVyVmVyc2lvbixcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICByZXR1cm4geyBjb250YWluZXJDbGllbnQsIGNvbnRhaW5lclVuZGVsZXRlUmVzcG9uc2UgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlbmFtZSBhbiBleGlzdGluZyBCbG9iIENvbnRhaW5lci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzb3VyY2VDb250YWluZXJOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHNvdXJjZSBjb250YWluZXIuXG4gICAgICogQHBhcmFtIGRlc3RpbmF0aW9uQ29udGFpbmVyTmFtZSAtIFRoZSBuZXcgbmFtZSBvZiB0aGUgY29udGFpbmVyLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBjb25maWd1cmUgQ29udGFpbmVyIFJlbmFtZSBvcGVyYXRpb24uXG4gICAgICovXG4gICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudCAqL1xuICAgIC8vIEB0cy1pZ25vcmUgTmVlZCB0byBoaWRlIHRoaXMgaW50ZXJmYWNlIGZvciBub3cuIE1ha2UgaXQgcHVibGljIGFuZCB0dXJuIG9uIHRoZSBsaXZlIHRlc3RzIGZvciBpdCB3aGVuIHRoZSBzZXJ2aWNlIGlzIHJlYWR5LlxuICAgIGFzeW5jIHJlbmFtZUNvbnRhaW5lcihzb3VyY2VDb250YWluZXJOYW1lLCBkZXN0aW5hdGlvbkNvbnRhaW5lck5hbWUsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JTZXJ2aWNlQ2xpZW50LXJlbmFtZUNvbnRhaW5lclwiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lckNsaWVudCA9IHRoaXMuZ2V0Q29udGFpbmVyQ2xpZW50KGRlc3RpbmF0aW9uQ29udGFpbmVyTmFtZSk7XG4gICAgICAgICAgICAvLyBIYWNrIHRvIGFjY2VzcyBhIHByb3RlY3RlZCBtZW1iZXIuXG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJDb250ZXh0ID0gY29udGFpbmVyQ2xpZW50W1wic3RvcmFnZUNsaWVudENvbnRleHRcIl0uY29udGFpbmVyO1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyUmVuYW1lUmVzcG9uc2UgPSBhc3NlcnRSZXNwb25zZShhd2FpdCBjb250YWluZXJDb250ZXh0LnJlbmFtZShzb3VyY2VDb250YWluZXJOYW1lLCBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHVwZGF0ZWRPcHRpb25zKSwgeyBzb3VyY2VMZWFzZUlkOiAoX2EgPSBvcHRpb25zLnNvdXJjZUNvbmRpdGlvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmxlYXNlSWQgfSkpKTtcbiAgICAgICAgICAgIHJldHVybiB7IGNvbnRhaW5lckNsaWVudCwgY29udGFpbmVyUmVuYW1lUmVzcG9uc2UgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHByb3BlcnRpZXMgb2YgYSBzdG9yYWdlIGFjY291bnTigJlzIEJsb2Igc2VydmljZSwgaW5jbHVkaW5nIHByb3BlcnRpZXNcbiAgICAgKiBmb3IgU3RvcmFnZSBBbmFseXRpY3MgYW5kIENPUlMgKENyb3NzLU9yaWdpbiBSZXNvdXJjZSBTaGFyaW5nKSBydWxlcy5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9nZXQtYmxvYi1zZXJ2aWNlLXByb3BlcnRpZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB0aGUgU2VydmljZSBHZXQgUHJvcGVydGllcyBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgdGhlIFNlcnZpY2UgR2V0IFByb3BlcnRpZXMgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGdldFByb3BlcnRpZXMob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYlNlcnZpY2VDbGllbnQtZ2V0UHJvcGVydGllc1wiLCBvcHRpb25zLCBhc3luYyAodXBkYXRlZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBhc3NlcnRSZXNwb25zZShhd2FpdCB0aGlzLnNlcnZpY2VDb250ZXh0LmdldFByb3BlcnRpZXMoe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldHMgcHJvcGVydGllcyBmb3IgYSBzdG9yYWdlIGFjY291bnTigJlzIEJsb2Igc2VydmljZSBlbmRwb2ludCwgaW5jbHVkaW5nIHByb3BlcnRpZXNcbiAgICAgKiBmb3IgU3RvcmFnZSBBbmFseXRpY3MsIENPUlMgKENyb3NzLU9yaWdpbiBSZXNvdXJjZSBTaGFyaW5nKSBydWxlcyBhbmQgc29mdCBkZWxldGUgc2V0dGluZ3MuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvc2V0LWJsb2Itc2VydmljZS1wcm9wZXJ0aWVzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydGllcyAtXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHRoZSBTZXJ2aWNlIFNldCBQcm9wZXJ0aWVzIG9wZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyBSZXNwb25zZSBkYXRhIGZvciB0aGUgU2VydmljZSBTZXQgUHJvcGVydGllcyBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgc2V0UHJvcGVydGllcyhwcm9wZXJ0aWVzLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iU2VydmljZUNsaWVudC1zZXRQcm9wZXJ0aWVzXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuc2VydmljZUNvbnRleHQuc2V0UHJvcGVydGllcyhwcm9wZXJ0aWVzLCB7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHN0YXRpc3RpY3MgcmVsYXRlZCB0byByZXBsaWNhdGlvbiBmb3IgdGhlIEJsb2Igc2VydmljZS4gSXQgaXMgb25seVxuICAgICAqIGF2YWlsYWJsZSBvbiB0aGUgc2Vjb25kYXJ5IGxvY2F0aW9uIGVuZHBvaW50IHdoZW4gcmVhZC1hY2Nlc3MgZ2VvLXJlZHVuZGFudFxuICAgICAqIHJlcGxpY2F0aW9uIGlzIGVuYWJsZWQgZm9yIHRoZSBzdG9yYWdlIGFjY291bnQuXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvZ2V0LWJsb2Itc2VydmljZS1zdGF0c1xuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHRoZSBTZXJ2aWNlIEdldCBTdGF0aXN0aWNzIG9wZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyBSZXNwb25zZSBkYXRhIGZvciB0aGUgU2VydmljZSBHZXQgU3RhdGlzdGljcyBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgZ2V0U3RhdGlzdGljcyhvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iU2VydmljZUNsaWVudC1nZXRTdGF0aXN0aWNzXCIsIG9wdGlvbnMsIGFzeW5jICh1cGRhdGVkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuc2VydmljZUNvbnRleHQuZ2V0U3RhdGlzdGljcyh7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIEdldCBBY2NvdW50IEluZm9ybWF0aW9uIG9wZXJhdGlvbiByZXR1cm5zIHRoZSBza3UgbmFtZSBhbmQgYWNjb3VudCBraW5kXG4gICAgICogZm9yIHRoZSBzcGVjaWZpZWQgYWNjb3VudC5cbiAgICAgKiBUaGUgR2V0IEFjY291bnQgSW5mb3JtYXRpb24gb3BlcmF0aW9uIGlzIGF2YWlsYWJsZSBvbiBzZXJ2aWNlIHZlcnNpb25zIGJlZ2lubmluZ1xuICAgICAqIHdpdGggdmVyc2lvbiAyMDE4LTAzLTI4LlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2dldC1hY2NvdW50LWluZm9ybWF0aW9uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gdGhlIFNlcnZpY2UgR2V0IEFjY291bnQgSW5mbyBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgUmVzcG9uc2UgZGF0YSBmb3IgdGhlIFNlcnZpY2UgR2V0IEFjY291bnQgSW5mbyBvcGVyYXRpb24uXG4gICAgICovXG4gICAgYXN5bmMgZ2V0QWNjb3VudEluZm8ob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYlNlcnZpY2VDbGllbnQtZ2V0QWNjb3VudEluZm9cIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5zZXJ2aWNlQ29udGV4dC5nZXRBY2NvdW50SW5mbyh7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIGxpc3Qgb2YgdGhlIGNvbnRhaW5lcnMgdW5kZXIgdGhlIHNwZWNpZmllZCBhY2NvdW50LlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2xpc3QtY29udGFpbmVyczJcbiAgICAgKlxuICAgICAqIEBwYXJhbSBtYXJrZXIgLSBBIHN0cmluZyB2YWx1ZSB0aGF0IGlkZW50aWZpZXMgdGhlIHBvcnRpb24gb2ZcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBsaXN0IG9mIGNvbnRhaW5lcnMgdG8gYmUgcmV0dXJuZWQgd2l0aCB0aGUgbmV4dCBsaXN0aW5nIG9wZXJhdGlvbi4gVGhlXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gcmV0dXJucyB0aGUgY29udGludWF0aW9uVG9rZW4gdmFsdWUgd2l0aGluIHRoZSByZXNwb25zZSBib2R5IGlmIHRoZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGluZyBvcGVyYXRpb24gZGlkIG5vdCByZXR1cm4gYWxsIGNvbnRhaW5lcnMgcmVtYWluaW5nIHRvIGJlIGxpc3RlZFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgY3VycmVudCBwYWdlLiBUaGUgY29udGludWF0aW9uVG9rZW4gdmFsdWUgY2FuIGJlIHVzZWQgYXMgdGhlIHZhbHVlIGZvclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1hcmtlciBwYXJhbWV0ZXIgaW4gYSBzdWJzZXF1ZW50IGNhbGwgdG8gcmVxdWVzdCB0aGUgbmV4dCBwYWdlIG9mIGxpc3RcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLiBUaGUgbWFya2VyIHZhbHVlIGlzIG9wYXF1ZSB0byB0aGUgY2xpZW50LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byB0aGUgU2VydmljZSBMaXN0IENvbnRhaW5lciBTZWdtZW50IG9wZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyBSZXNwb25zZSBkYXRhIGZvciB0aGUgU2VydmljZSBMaXN0IENvbnRhaW5lciBTZWdtZW50IG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBsaXN0Q29udGFpbmVyc1NlZ21lbnQobWFya2VyLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdDbGllbnQud2l0aFNwYW4oXCJCbG9iU2VydmljZUNsaWVudC1saXN0Q29udGFpbmVyc1NlZ21lbnRcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYXNzZXJ0UmVzcG9uc2UoYXdhaXQgdGhpcy5zZXJ2aWNlQ29udGV4dC5saXN0Q29udGFpbmVyc1NlZ21lbnQoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHsgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsIG1hcmtlciB9LCBvcHRpb25zKSwgeyBpbmNsdWRlOiB0eXBlb2Ygb3B0aW9ucy5pbmNsdWRlID09PSBcInN0cmluZ1wiID8gW29wdGlvbnMuaW5jbHVkZV0gOiBvcHRpb25zLmluY2x1ZGUsIHRyYWNpbmdPcHRpb25zOiB1cGRhdGVkT3B0aW9ucy50cmFjaW5nT3B0aW9ucyB9KSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIEZpbHRlciBCbG9icyBvcGVyYXRpb24gZW5hYmxlcyBjYWxsZXJzIHRvIGxpc3QgYmxvYnMgYWNyb3NzIGFsbCBjb250YWluZXJzIHdob3NlIHRhZ3NcbiAgICAgKiBtYXRjaCBhIGdpdmVuIHNlYXJjaCBleHByZXNzaW9uLiBGaWx0ZXIgYmxvYnMgc2VhcmNoZXMgYWNyb3NzIGFsbCBjb250YWluZXJzIHdpdGhpbiBhXG4gICAgICogc3RvcmFnZSBhY2NvdW50IGJ1dCBjYW4gYmUgc2NvcGVkIHdpdGhpbiB0aGUgZXhwcmVzc2lvbiB0byBhIHNpbmdsZSBjb250YWluZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGFnRmlsdGVyU3FsRXhwcmVzc2lvbiAtIFRoZSB3aGVyZSBwYXJhbWV0ZXIgZW5hYmxlcyB0aGUgY2FsbGVyIHRvIHF1ZXJ5IGJsb2JzIHdob3NlIHRhZ3MgbWF0Y2ggYSBnaXZlbiBleHByZXNzaW9uLlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBnaXZlbiBleHByZXNzaW9uIG11c3QgZXZhbHVhdGUgdG8gdHJ1ZSBmb3IgYSBibG9iIHRvIGJlIHJldHVybmVkIGluIHRoZSByZXN1bHRzLlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZVtPRGF0YSAtIEFCTkZdIGZpbHRlciBzeW50YXggcnVsZSBkZWZpbmVzIHRoZSBmb3JtYWwgZ3JhbW1hciBmb3IgdGhlIHZhbHVlIG9mIHRoZSB3aGVyZSBxdWVyeSBwYXJhbWV0ZXI7XG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG93ZXZlciwgb25seSBhIHN1YnNldCBvZiB0aGUgT0RhdGEgZmlsdGVyIHN5bnRheCBpcyBzdXBwb3J0ZWQgaW4gdGhlIEJsb2Igc2VydmljZS5cbiAgICAgKiBAcGFyYW0gbWFya2VyIC0gQSBzdHJpbmcgdmFsdWUgdGhhdCBpZGVudGlmaWVzIHRoZSBwb3J0aW9uIG9mXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBsaXN0IG9mIGJsb2JzIHRvIGJlIHJldHVybmVkIHdpdGggdGhlIG5leHQgbGlzdGluZyBvcGVyYXRpb24uIFRoZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gcmV0dXJucyB0aGUgY29udGludWF0aW9uVG9rZW4gdmFsdWUgd2l0aGluIHRoZSByZXNwb25zZSBib2R5IGlmIHRoZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0aW5nIG9wZXJhdGlvbiBkaWQgbm90IHJldHVybiBhbGwgYmxvYnMgcmVtYWluaW5nIHRvIGJlIGxpc3RlZFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSBjdXJyZW50IHBhZ2UuIFRoZSBjb250aW51YXRpb25Ub2tlbiB2YWx1ZSBjYW4gYmUgdXNlZCBhcyB0aGUgdmFsdWUgZm9yXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBtYXJrZXIgcGFyYW1ldGVyIGluIGEgc3Vic2VxdWVudCBjYWxsIHRvIHJlcXVlc3QgdGhlIG5leHQgcGFnZSBvZiBsaXN0XG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLiBUaGUgbWFya2VyIHZhbHVlIGlzIG9wYXF1ZSB0byB0aGUgY2xpZW50LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBmaW5kIGJsb2JzIGJ5IHRhZ3MuXG4gICAgICovXG4gICAgYXN5bmMgZmluZEJsb2JzQnlUYWdzU2VnbWVudCh0YWdGaWx0ZXJTcWxFeHByZXNzaW9uLCBtYXJrZXIsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdHJhY2luZ0NsaWVudC53aXRoU3BhbihcIkJsb2JTZXJ2aWNlQ2xpZW50LWZpbmRCbG9ic0J5VGFnc1NlZ21lbnRcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuc2VydmljZUNvbnRleHQuZmlsdGVyQmxvYnMoe1xuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgICAgICAgICAgIHdoZXJlOiB0YWdGaWx0ZXJTcWxFeHByZXNzaW9uLFxuICAgICAgICAgICAgICAgIG1hcmtlcixcbiAgICAgICAgICAgICAgICBtYXhQYWdlU2l6ZTogb3B0aW9ucy5tYXhQYWdlU2l6ZSxcbiAgICAgICAgICAgICAgICB0cmFjaW5nT3B0aW9uczogdXBkYXRlZE9wdGlvbnMudHJhY2luZ09wdGlvbnMsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICBjb25zdCB3cmFwcGVkUmVzcG9uc2UgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHJlc3BvbnNlKSwgeyBfcmVzcG9uc2U6IHJlc3BvbnNlLl9yZXNwb25zZSwgYmxvYnM6IHJlc3BvbnNlLmJsb2JzLm1hcCgoYmxvYikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgICAgIGxldCB0YWdWYWx1ZSA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoKF9hID0gYmxvYi50YWdzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuYmxvYlRhZ1NldC5sZW5ndGgpID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YWdWYWx1ZSA9IGJsb2IudGFncy5ibG9iVGFnU2V0WzBdLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGJsb2IpLCB7IHRhZ3M6IHRvVGFncyhibG9iLnRhZ3MpLCB0YWdWYWx1ZSB9KTtcbiAgICAgICAgICAgICAgICB9KSB9KTtcbiAgICAgICAgICAgIHJldHVybiB3cmFwcGVkUmVzcG9uc2U7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIEFzeW5jSXRlcmFibGVJdGVyYXRvciBmb3IgU2VydmljZUZpbmRCbG9ic0J5VGFnc1NlZ21lbnRSZXNwb25zZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0YWdGaWx0ZXJTcWxFeHByZXNzaW9uIC0gIFRoZSB3aGVyZSBwYXJhbWV0ZXIgZW5hYmxlcyB0aGUgY2FsbGVyIHRvIHF1ZXJ5IGJsb2JzIHdob3NlIHRhZ3MgbWF0Y2ggYSBnaXZlbiBleHByZXNzaW9uLlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZ2l2ZW4gZXhwcmVzc2lvbiBtdXN0IGV2YWx1YXRlIHRvIHRydWUgZm9yIGEgYmxvYiB0byBiZSByZXR1cm5lZCBpbiB0aGUgcmVzdWx0cy5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlW09EYXRhIC0gQUJORl0gZmlsdGVyIHN5bnRheCBydWxlIGRlZmluZXMgdGhlIGZvcm1hbCBncmFtbWFyIGZvciB0aGUgdmFsdWUgb2YgdGhlIHdoZXJlIHF1ZXJ5IHBhcmFtZXRlcjtcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG93ZXZlciwgb25seSBhIHN1YnNldCBvZiB0aGUgT0RhdGEgZmlsdGVyIHN5bnRheCBpcyBzdXBwb3J0ZWQgaW4gdGhlIEJsb2Igc2VydmljZS5cbiAgICAgKiBAcGFyYW0gbWFya2VyIC0gQSBzdHJpbmcgdmFsdWUgdGhhdCBpZGVudGlmaWVzIHRoZSBwb3J0aW9uIG9mXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBsaXN0IG9mIGJsb2JzIHRvIGJlIHJldHVybmVkIHdpdGggdGhlIG5leHQgbGlzdGluZyBvcGVyYXRpb24uIFRoZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gcmV0dXJucyB0aGUgY29udGludWF0aW9uVG9rZW4gdmFsdWUgd2l0aGluIHRoZSByZXNwb25zZSBib2R5IGlmIHRoZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0aW5nIG9wZXJhdGlvbiBkaWQgbm90IHJldHVybiBhbGwgYmxvYnMgcmVtYWluaW5nIHRvIGJlIGxpc3RlZFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSBjdXJyZW50IHBhZ2UuIFRoZSBjb250aW51YXRpb25Ub2tlbiB2YWx1ZSBjYW4gYmUgdXNlZCBhcyB0aGUgdmFsdWUgZm9yXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBtYXJrZXIgcGFyYW1ldGVyIGluIGEgc3Vic2VxdWVudCBjYWxsIHRvIHJlcXVlc3QgdGhlIG5leHQgcGFnZSBvZiBsaXN0XG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLiBUaGUgbWFya2VyIHZhbHVlIGlzIG9wYXF1ZSB0byB0aGUgY2xpZW50LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBmaW5kIGJsb2JzIGJ5IHRhZ3MuXG4gICAgICovXG4gICAgZmluZEJsb2JzQnlUYWdzU2VnbWVudHModGFnRmlsdGVyU3FsRXhwcmVzc2lvbl8xLCBtYXJrZXJfMSkge1xuICAgICAgICByZXR1cm4gdHNsaWIuX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKiBmaW5kQmxvYnNCeVRhZ3NTZWdtZW50c18xKHRhZ0ZpbHRlclNxbEV4cHJlc3Npb24sIG1hcmtlciwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgICAgICBsZXQgcmVzcG9uc2U7XG4gICAgICAgICAgICBpZiAoISFtYXJrZXIgfHwgbWFya2VyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0geWllbGQgdHNsaWIuX19hd2FpdCh0aGlzLmZpbmRCbG9ic0J5VGFnc1NlZ21lbnQodGFnRmlsdGVyU3FsRXhwcmVzc2lvbiwgbWFya2VyLCBvcHRpb25zKSk7XG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmJsb2JzID0gcmVzcG9uc2UuYmxvYnMgfHwgW107XG4gICAgICAgICAgICAgICAgICAgIG1hcmtlciA9IHJlc3BvbnNlLmNvbnRpbnVhdGlvblRva2VuO1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCB5aWVsZCB0c2xpYi5fX2F3YWl0KHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICB9IHdoaWxlIChtYXJrZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBBc3luY0l0ZXJhYmxlSXRlcmF0b3IgZm9yIGJsb2JzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRhZ0ZpbHRlclNxbEV4cHJlc3Npb24gLSAgVGhlIHdoZXJlIHBhcmFtZXRlciBlbmFibGVzIHRoZSBjYWxsZXIgdG8gcXVlcnkgYmxvYnMgd2hvc2UgdGFncyBtYXRjaCBhIGdpdmVuIGV4cHJlc3Npb24uXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBnaXZlbiBleHByZXNzaW9uIG11c3QgZXZhbHVhdGUgdG8gdHJ1ZSBmb3IgYSBibG9iIHRvIGJlIHJldHVybmVkIGluIHRoZSByZXN1bHRzLlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGVbT0RhdGEgLSBBQk5GXSBmaWx0ZXIgc3ludGF4IHJ1bGUgZGVmaW5lcyB0aGUgZm9ybWFsIGdyYW1tYXIgZm9yIHRoZSB2YWx1ZSBvZiB0aGUgd2hlcmUgcXVlcnkgcGFyYW1ldGVyO1xuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3dldmVyLCBvbmx5IGEgc3Vic2V0IG9mIHRoZSBPRGF0YSBmaWx0ZXIgc3ludGF4IGlzIHN1cHBvcnRlZCBpbiB0aGUgQmxvYiBzZXJ2aWNlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBmaW5kQmxvYnNCeVRhZ3NJdGVtcy5cbiAgICAgKi9cbiAgICBmaW5kQmxvYnNCeVRhZ3NJdGVtcyh0YWdGaWx0ZXJTcWxFeHByZXNzaW9uXzEpIHtcbiAgICAgICAgcmV0dXJuIHRzbGliLl9fYXN5bmNHZW5lcmF0b3IodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiogZmluZEJsb2JzQnlUYWdzSXRlbXNfMSh0YWdGaWx0ZXJTcWxFeHByZXNzaW9uLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgICAgIHZhciBfYSwgZV8xLCBfYiwgX2M7XG4gICAgICAgICAgICBsZXQgbWFya2VyO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBfZCA9IHRydWUsIF9lID0gdHNsaWIuX19hc3luY1ZhbHVlcyh0aGlzLmZpbmRCbG9ic0J5VGFnc1NlZ21lbnRzKHRhZ0ZpbHRlclNxbEV4cHJlc3Npb24sIG1hcmtlciwgb3B0aW9ucykpLCBfZjsgX2YgPSB5aWVsZCB0c2xpYi5fX2F3YWl0KF9lLm5leHQoKSksIF9hID0gX2YuZG9uZSwgIV9hOyBfZCA9IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgX2MgPSBfZi52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgX2QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VnbWVudCA9IF9jO1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCB0c2xpYi5fX2F3YWl0KHlpZWxkKiB0c2xpYi5fX2FzeW5jRGVsZWdhdG9yKHRzbGliLl9fYXN5bmNWYWx1ZXMoc2VnbWVudC5ibG9icykpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFfZCAmJiAhX2EgJiYgKF9iID0gX2UucmV0dXJuKSkgeWllbGQgdHNsaWIuX19hd2FpdChfYi5jYWxsKF9lKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gYXN5bmMgaXRlcmFibGUgaXRlcmF0b3IgdG8gZmluZCBhbGwgYmxvYnMgd2l0aCBzcGVjaWZpZWQgdGFnXG4gICAgICogdW5kZXIgdGhlIHNwZWNpZmllZCBhY2NvdW50LlxuICAgICAqXG4gICAgICogLmJ5UGFnZSgpIHJldHVybnMgYW4gYXN5bmMgaXRlcmFibGUgaXRlcmF0b3IgdG8gbGlzdCB0aGUgYmxvYnMgaW4gcGFnZXMuXG4gICAgICpcbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9nZXQtYmxvYi1zZXJ2aWNlLXByb3BlcnRpZXNcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNpbmcgYGZvciBhd2FpdGAgc3ludGF4OlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBsZXQgaSA9IDE7XG4gICAgICogZm9yIGF3YWl0IChjb25zdCBibG9iIG9mIGJsb2JTZXJ2aWNlQ2xpZW50LmZpbmRCbG9ic0J5VGFncyhcInRhZ2tleT0ndGFndmFsdWUnXCIpKSB7XG4gICAgICogICBjb25zb2xlLmxvZyhgQmxvYiAke2krK306ICR7Y29udGFpbmVyLm5hbWV9YCk7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBgaXRlci5uZXh0KClgOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBsZXQgaSA9IDE7XG4gICAgICogY29uc3QgaXRlciA9IGJsb2JTZXJ2aWNlQ2xpZW50LmZpbmRCbG9ic0J5VGFncyhcInRhZ2tleT0ndGFndmFsdWUnXCIpO1xuICAgICAqIGxldCBibG9iSXRlbSA9IGF3YWl0IGl0ZXIubmV4dCgpO1xuICAgICAqIHdoaWxlICghYmxvYkl0ZW0uZG9uZSkge1xuICAgICAqICAgY29uc29sZS5sb2coYEJsb2IgJHtpKyt9OiAke2Jsb2JJdGVtLnZhbHVlLm5hbWV9YCk7XG4gICAgICogICBibG9iSXRlbSA9IGF3YWl0IGl0ZXIubmV4dCgpO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNpbmcgYGJ5UGFnZSgpYDpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogLy8gcGFzc2luZyBvcHRpb25hbCBtYXhQYWdlU2l6ZSBpbiB0aGUgcGFnZSBzZXR0aW5nc1xuICAgICAqIGxldCBpID0gMTtcbiAgICAgKiBmb3IgYXdhaXQgKGNvbnN0IHJlc3BvbnNlIG9mIGJsb2JTZXJ2aWNlQ2xpZW50LmZpbmRCbG9ic0J5VGFncyhcInRhZ2tleT0ndGFndmFsdWUnXCIpLmJ5UGFnZSh7IG1heFBhZ2VTaXplOiAyMCB9KSkge1xuICAgICAqICAgaWYgKHJlc3BvbnNlLmJsb2JzKSB7XG4gICAgICogICAgIGZvciAoY29uc3QgYmxvYiBvZiByZXNwb25zZS5ibG9icykge1xuICAgICAqICAgICAgIGNvbnNvbGUubG9nKGBCbG9iICR7aSsrfTogJHtibG9iLm5hbWV9YCk7XG4gICAgICogICAgIH1cbiAgICAgKiAgIH1cbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzaW5nIHBhZ2luZyB3aXRoIGEgbWFya2VyOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBsZXQgaSA9IDE7XG4gICAgICogbGV0IGl0ZXJhdG9yID0gYmxvYlNlcnZpY2VDbGllbnQuZmluZEJsb2JzQnlUYWdzKFwidGFna2V5PSd0YWd2YWx1ZSdcIikuYnlQYWdlKHsgbWF4UGFnZVNpemU6IDIgfSk7XG4gICAgICogbGV0IHJlc3BvbnNlID0gKGF3YWl0IGl0ZXJhdG9yLm5leHQoKSkudmFsdWU7XG4gICAgICpcbiAgICAgKiAvLyBQcmludHMgMiBibG9iIG5hbWVzXG4gICAgICogaWYgKHJlc3BvbnNlLmJsb2JzKSB7XG4gICAgICogICBmb3IgKGNvbnN0IGJsb2Igb2YgcmVzcG9uc2UuYmxvYnMpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coYEJsb2IgJHtpKyt9OiAke2Jsb2IubmFtZX1gKTtcbiAgICAgKiAgIH1cbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBHZXRzIG5leHQgbWFya2VyXG4gICAgICogbGV0IG1hcmtlciA9IHJlc3BvbnNlLmNvbnRpbnVhdGlvblRva2VuO1xuICAgICAqIC8vIFBhc3NpbmcgbmV4dCBtYXJrZXIgYXMgY29udGludWF0aW9uVG9rZW5cbiAgICAgKiBpdGVyYXRvciA9IGJsb2JTZXJ2aWNlQ2xpZW50XG4gICAgICogICAuZmluZEJsb2JzQnlUYWdzKFwidGFna2V5PSd0YWd2YWx1ZSdcIilcbiAgICAgKiAgIC5ieVBhZ2UoeyBjb250aW51YXRpb25Ub2tlbjogbWFya2VyLCBtYXhQYWdlU2l6ZTogMTAgfSk7XG4gICAgICogcmVzcG9uc2UgPSAoYXdhaXQgaXRlcmF0b3IubmV4dCgpKS52YWx1ZTtcbiAgICAgKlxuICAgICAqIC8vIFByaW50cyBibG9iIG5hbWVzXG4gICAgICogaWYgKHJlc3BvbnNlLmJsb2JzKSB7XG4gICAgICogICBmb3IgKGNvbnN0IGJsb2Igb2YgcmVzcG9uc2UuYmxvYnMpIHtcbiAgICAgKiAgICAgIGNvbnNvbGUubG9nKGBCbG9iICR7aSsrfTogJHtibG9iLm5hbWV9YCk7XG4gICAgICogICB9XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQHBhcmFtIHRhZ0ZpbHRlclNxbEV4cHJlc3Npb24gLSAgVGhlIHdoZXJlIHBhcmFtZXRlciBlbmFibGVzIHRoZSBjYWxsZXIgdG8gcXVlcnkgYmxvYnMgd2hvc2UgdGFncyBtYXRjaCBhIGdpdmVuIGV4cHJlc3Npb24uXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBnaXZlbiBleHByZXNzaW9uIG11c3QgZXZhbHVhdGUgdG8gdHJ1ZSBmb3IgYSBibG9iIHRvIGJlIHJldHVybmVkIGluIHRoZSByZXN1bHRzLlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGVbT0RhdGEgLSBBQk5GXSBmaWx0ZXIgc3ludGF4IHJ1bGUgZGVmaW5lcyB0aGUgZm9ybWFsIGdyYW1tYXIgZm9yIHRoZSB2YWx1ZSBvZiB0aGUgd2hlcmUgcXVlcnkgcGFyYW1ldGVyO1xuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3dldmVyLCBvbmx5IGEgc3Vic2V0IG9mIHRoZSBPRGF0YSBmaWx0ZXIgc3ludGF4IGlzIHN1cHBvcnRlZCBpbiB0aGUgQmxvYiBzZXJ2aWNlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBmaW5kIGJsb2JzIGJ5IHRhZ3MuXG4gICAgICovXG4gICAgZmluZEJsb2JzQnlUYWdzKHRhZ0ZpbHRlclNxbEV4cHJlc3Npb24sIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICAvLyBBc3luY0l0ZXJhYmxlSXRlcmF0b3IgdG8gaXRlcmF0ZSBvdmVyIGJsb2JzXG4gICAgICAgIGNvbnN0IGxpc3RTZWdtZW50T3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBpdGVyID0gdGhpcy5maW5kQmxvYnNCeVRhZ3NJdGVtcyh0YWdGaWx0ZXJTcWxFeHByZXNzaW9uLCBsaXN0U2VnbWVudE9wdGlvbnMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBUaGUgbmV4dCBtZXRob2QsIHBhcnQgb2YgdGhlIGl0ZXJhdGlvbiBwcm90b2NvbFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBuZXh0KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVyLm5leHQoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFRoZSBjb25uZWN0aW9uIHRvIHRoZSBhc3luYyBpdGVyYXRvciwgcGFydCBvZiB0aGUgaXRlcmF0aW9uIHByb3RvY29sXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBSZXR1cm4gYW4gQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIHRoYXQgd29ya3MgYSBwYWdlIGF0IGEgdGltZVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBieVBhZ2U6IChzZXR0aW5ncyA9IHt9KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluZEJsb2JzQnlUYWdzU2VnbWVudHModGFnRmlsdGVyU3FsRXhwcmVzc2lvbiwgc2V0dGluZ3MuY29udGludWF0aW9uVG9rZW4sIE9iamVjdC5hc3NpZ24oeyBtYXhQYWdlU2l6ZTogc2V0dGluZ3MubWF4UGFnZVNpemUgfSwgbGlzdFNlZ21lbnRPcHRpb25zKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIEFzeW5jSXRlcmFibGVJdGVyYXRvciBmb3IgU2VydmljZUxpc3RDb250YWluZXJzU2VnbWVudFJlc3BvbnNlc1xuICAgICAqXG4gICAgICogQHBhcmFtIG1hcmtlciAtIEEgc3RyaW5nIHZhbHVlIHRoYXQgaWRlbnRpZmllcyB0aGUgcG9ydGlvbiBvZlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGxpc3Qgb2YgY29udGFpbmVycyB0byBiZSByZXR1cm5lZCB3aXRoIHRoZSBuZXh0IGxpc3Rpbmcgb3BlcmF0aW9uLiBUaGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiByZXR1cm5zIHRoZSBjb250aW51YXRpb25Ub2tlbiB2YWx1ZSB3aXRoaW4gdGhlIHJlc3BvbnNlIGJvZHkgaWYgdGhlXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICBsaXN0aW5nIG9wZXJhdGlvbiBkaWQgbm90IHJldHVybiBhbGwgY29udGFpbmVycyByZW1haW5pbmcgdG8gYmUgbGlzdGVkXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSBjdXJyZW50IHBhZ2UuIFRoZSBjb250aW51YXRpb25Ub2tlbiB2YWx1ZSBjYW4gYmUgdXNlZCBhcyB0aGUgdmFsdWUgZm9yXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWFya2VyIHBhcmFtZXRlciBpbiBhIHN1YnNlcXVlbnQgY2FsbCB0byByZXF1ZXN0IHRoZSBuZXh0IHBhZ2Ugb2YgbGlzdFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMuIFRoZSBtYXJrZXIgdmFsdWUgaXMgb3BhcXVlIHRvIHRoZSBjbGllbnQuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIGxpc3QgY29udGFpbmVycyBvcGVyYXRpb24uXG4gICAgICovXG4gICAgbGlzdFNlZ21lbnRzKG1hcmtlcl8xKSB7XG4gICAgICAgIHJldHVybiB0c2xpYi5fX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24qIGxpc3RTZWdtZW50c18xKG1hcmtlciwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgICAgICBsZXQgbGlzdENvbnRhaW5lcnNTZWdtZW50UmVzcG9uc2U7XG4gICAgICAgICAgICBpZiAoISFtYXJrZXIgfHwgbWFya2VyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RDb250YWluZXJzU2VnbWVudFJlc3BvbnNlID0geWllbGQgdHNsaWIuX19hd2FpdCh0aGlzLmxpc3RDb250YWluZXJzU2VnbWVudChtYXJrZXIsIG9wdGlvbnMpKTtcbiAgICAgICAgICAgICAgICAgICAgbGlzdENvbnRhaW5lcnNTZWdtZW50UmVzcG9uc2UuY29udGFpbmVySXRlbXMgPVxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdENvbnRhaW5lcnNTZWdtZW50UmVzcG9uc2UuY29udGFpbmVySXRlbXMgfHwgW107XG4gICAgICAgICAgICAgICAgICAgIG1hcmtlciA9IGxpc3RDb250YWluZXJzU2VnbWVudFJlc3BvbnNlLmNvbnRpbnVhdGlvblRva2VuO1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCB5aWVsZCB0c2xpYi5fX2F3YWl0KHlpZWxkIHRzbGliLl9fYXdhaXQobGlzdENvbnRhaW5lcnNTZWdtZW50UmVzcG9uc2UpKTtcbiAgICAgICAgICAgICAgICB9IHdoaWxlIChtYXJrZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBBc3luY0l0ZXJhYmxlSXRlcmF0b3IgZm9yIENvbnRhaW5lciBJdGVtc1xuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIGxpc3QgY29udGFpbmVycyBvcGVyYXRpb24uXG4gICAgICovXG4gICAgbGlzdEl0ZW1zKCkge1xuICAgICAgICByZXR1cm4gdHNsaWIuX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKiBsaXN0SXRlbXNfMShvcHRpb25zID0ge30pIHtcbiAgICAgICAgICAgIHZhciBfYSwgZV8yLCBfYiwgX2M7XG4gICAgICAgICAgICBsZXQgbWFya2VyO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBfZCA9IHRydWUsIF9lID0gdHNsaWIuX19hc3luY1ZhbHVlcyh0aGlzLmxpc3RTZWdtZW50cyhtYXJrZXIsIG9wdGlvbnMpKSwgX2Y7IF9mID0geWllbGQgdHNsaWIuX19hd2FpdChfZS5uZXh0KCkpLCBfYSA9IF9mLmRvbmUsICFfYTsgX2QgPSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgIF9jID0gX2YudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIF9kID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlZ21lbnQgPSBfYztcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgdHNsaWIuX19hd2FpdCh5aWVsZCogdHNsaWIuX19hc3luY0RlbGVnYXRvcih0c2xpYi5fX2FzeW5jVmFsdWVzKHNlZ21lbnQuY29udGFpbmVySXRlbXMpKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVfMl8xKSB7IGVfMiA9IHsgZXJyb3I6IGVfMl8xIH07IH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghX2QgJiYgIV9hICYmIChfYiA9IF9lLnJldHVybikpIHlpZWxkIHRzbGliLl9fYXdhaXQoX2IuY2FsbChfZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMikgdGhyb3cgZV8yLmVycm9yOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIGFzeW5jIGl0ZXJhYmxlIGl0ZXJhdG9yIHRvIGxpc3QgYWxsIHRoZSBjb250YWluZXJzXG4gICAgICogdW5kZXIgdGhlIHNwZWNpZmllZCBhY2NvdW50LlxuICAgICAqXG4gICAgICogLmJ5UGFnZSgpIHJldHVybnMgYW4gYXN5bmMgaXRlcmFibGUgaXRlcmF0b3IgdG8gbGlzdCB0aGUgY29udGFpbmVycyBpbiBwYWdlcy5cbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNpbmcgYGZvciBhd2FpdGAgc3ludGF4OlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBsZXQgaSA9IDE7XG4gICAgICogZm9yIGF3YWl0IChjb25zdCBjb250YWluZXIgb2YgYmxvYlNlcnZpY2VDbGllbnQubGlzdENvbnRhaW5lcnMoKSkge1xuICAgICAqICAgY29uc29sZS5sb2coYENvbnRhaW5lciAke2krK306ICR7Y29udGFpbmVyLm5hbWV9YCk7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogRXhhbXBsZSB1c2luZyBgaXRlci5uZXh0KClgOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBsZXQgaSA9IDE7XG4gICAgICogY29uc3QgaXRlciA9IGJsb2JTZXJ2aWNlQ2xpZW50Lmxpc3RDb250YWluZXJzKCk7XG4gICAgICogbGV0IGNvbnRhaW5lckl0ZW0gPSBhd2FpdCBpdGVyLm5leHQoKTtcbiAgICAgKiB3aGlsZSAoIWNvbnRhaW5lckl0ZW0uZG9uZSkge1xuICAgICAqICAgY29uc29sZS5sb2coYENvbnRhaW5lciAke2krK306ICR7Y29udGFpbmVySXRlbS52YWx1ZS5uYW1lfWApO1xuICAgICAqICAgY29udGFpbmVySXRlbSA9IGF3YWl0IGl0ZXIubmV4dCgpO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNpbmcgYGJ5UGFnZSgpYDpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogLy8gcGFzc2luZyBvcHRpb25hbCBtYXhQYWdlU2l6ZSBpbiB0aGUgcGFnZSBzZXR0aW5nc1xuICAgICAqIGxldCBpID0gMTtcbiAgICAgKiBmb3IgYXdhaXQgKGNvbnN0IHJlc3BvbnNlIG9mIGJsb2JTZXJ2aWNlQ2xpZW50Lmxpc3RDb250YWluZXJzKCkuYnlQYWdlKHsgbWF4UGFnZVNpemU6IDIwIH0pKSB7XG4gICAgICogICBpZiAocmVzcG9uc2UuY29udGFpbmVySXRlbXMpIHtcbiAgICAgKiAgICAgZm9yIChjb25zdCBjb250YWluZXIgb2YgcmVzcG9uc2UuY29udGFpbmVySXRlbXMpIHtcbiAgICAgKiAgICAgICBjb25zb2xlLmxvZyhgQ29udGFpbmVyICR7aSsrfTogJHtjb250YWluZXIubmFtZX1gKTtcbiAgICAgKiAgICAgfVxuICAgICAqICAgfVxuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEV4YW1wbGUgdXNpbmcgcGFnaW5nIHdpdGggYSBtYXJrZXI6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGxldCBpID0gMTtcbiAgICAgKiBsZXQgaXRlcmF0b3IgPSBibG9iU2VydmljZUNsaWVudC5saXN0Q29udGFpbmVycygpLmJ5UGFnZSh7IG1heFBhZ2VTaXplOiAyIH0pO1xuICAgICAqIGxldCByZXNwb25zZSA9IChhd2FpdCBpdGVyYXRvci5uZXh0KCkpLnZhbHVlO1xuICAgICAqXG4gICAgICogLy8gUHJpbnRzIDIgY29udGFpbmVyIG5hbWVzXG4gICAgICogaWYgKHJlc3BvbnNlLmNvbnRhaW5lckl0ZW1zKSB7XG4gICAgICogICBmb3IgKGNvbnN0IGNvbnRhaW5lciBvZiByZXNwb25zZS5jb250YWluZXJJdGVtcykge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhgQ29udGFpbmVyICR7aSsrfTogJHtjb250YWluZXIubmFtZX1gKTtcbiAgICAgKiAgIH1cbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBHZXRzIG5leHQgbWFya2VyXG4gICAgICogbGV0IG1hcmtlciA9IHJlc3BvbnNlLmNvbnRpbnVhdGlvblRva2VuO1xuICAgICAqIC8vIFBhc3NpbmcgbmV4dCBtYXJrZXIgYXMgY29udGludWF0aW9uVG9rZW5cbiAgICAgKiBpdGVyYXRvciA9IGJsb2JTZXJ2aWNlQ2xpZW50XG4gICAgICogICAubGlzdENvbnRhaW5lcnMoKVxuICAgICAqICAgLmJ5UGFnZSh7IGNvbnRpbnVhdGlvblRva2VuOiBtYXJrZXIsIG1heFBhZ2VTaXplOiAxMCB9KTtcbiAgICAgKiByZXNwb25zZSA9IChhd2FpdCBpdGVyYXRvci5uZXh0KCkpLnZhbHVlO1xuICAgICAqXG4gICAgICogLy8gUHJpbnRzIDEwIGNvbnRhaW5lciBuYW1lc1xuICAgICAqIGlmIChyZXNwb25zZS5jb250YWluZXJJdGVtcykge1xuICAgICAqICAgZm9yIChjb25zdCBjb250YWluZXIgb2YgcmVzcG9uc2UuY29udGFpbmVySXRlbXMpIHtcbiAgICAgKiAgICAgIGNvbnNvbGUubG9nKGBDb250YWluZXIgJHtpKyt9OiAke2NvbnRhaW5lci5uYW1lfWApO1xuICAgICAqICAgfVxuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBsaXN0IGNvbnRhaW5lcnMuXG4gICAgICogQHJldHVybnMgQW4gYXN5bmNJdGVyYWJsZUl0ZXJhdG9yIHRoYXQgc3VwcG9ydHMgcGFnaW5nLlxuICAgICAqL1xuICAgIGxpc3RDb250YWluZXJzKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBpZiAob3B0aW9ucy5wcmVmaXggPT09IFwiXCIpIHtcbiAgICAgICAgICAgIG9wdGlvbnMucHJlZml4ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluY2x1ZGUgPSBbXTtcbiAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZURlbGV0ZWQpIHtcbiAgICAgICAgICAgIGluY2x1ZGUucHVzaChcImRlbGV0ZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZU1ldGFkYXRhKSB7XG4gICAgICAgICAgICBpbmNsdWRlLnB1c2goXCJtZXRhZGF0YVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5pbmNsdWRlU3lzdGVtKSB7XG4gICAgICAgICAgICBpbmNsdWRlLnB1c2goXCJzeXN0ZW1cIik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIHRvIGl0ZXJhdGUgb3ZlciBjb250YWluZXJzXG4gICAgICAgIGNvbnN0IGxpc3RTZWdtZW50T3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyksIChpbmNsdWRlLmxlbmd0aCA+IDAgPyB7IGluY2x1ZGUgfSA6IHt9KSk7XG4gICAgICAgIGNvbnN0IGl0ZXIgPSB0aGlzLmxpc3RJdGVtcyhsaXN0U2VnbWVudE9wdGlvbnMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBUaGUgbmV4dCBtZXRob2QsIHBhcnQgb2YgdGhlIGl0ZXJhdGlvbiBwcm90b2NvbFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBuZXh0KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVyLm5leHQoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFRoZSBjb25uZWN0aW9uIHRvIHRoZSBhc3luYyBpdGVyYXRvciwgcGFydCBvZiB0aGUgaXRlcmF0aW9uIHByb3RvY29sXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBSZXR1cm4gYW4gQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIHRoYXQgd29ya3MgYSBwYWdlIGF0IGEgdGltZVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBieVBhZ2U6IChzZXR0aW5ncyA9IHt9KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubGlzdFNlZ21lbnRzKHNldHRpbmdzLmNvbnRpbnVhdGlvblRva2VuLCBPYmplY3QuYXNzaWduKHsgbWF4UGFnZVNpemU6IHNldHRpbmdzLm1heFBhZ2VTaXplIH0sIGxpc3RTZWdtZW50T3B0aW9ucykpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogT05MWSBBVkFJTEFCTEUgV0hFTiBVU0lORyBCRUFSRVIgVE9LRU4gQVVUSEVOVElDQVRJT04gKFRva2VuQ3JlZGVudGlhbCkuXG4gICAgICpcbiAgICAgKiBSZXRyaWV2ZXMgYSB1c2VyIGRlbGVnYXRpb24ga2V5IGZvciB0aGUgQmxvYiBzZXJ2aWNlLiBUaGlzIGlzIG9ubHkgYSB2YWxpZCBvcGVyYXRpb24gd2hlbiB1c2luZ1xuICAgICAqIGJlYXJlciB0b2tlbiBhdXRoZW50aWNhdGlvbi5cbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcmVzdC9hcGkvc3RvcmFnZXNlcnZpY2VzL2dldC11c2VyLWRlbGVnYXRpb24ta2V5XG4gICAgICpcbiAgICAgKiBAcGFyYW0gc3RhcnRzT24gLSAgICAgIFRoZSBzdGFydCB0aW1lIGZvciB0aGUgdXNlciBkZWxlZ2F0aW9uIFNBUy4gTXVzdCBiZSB3aXRoaW4gNyBkYXlzIG9mIHRoZSBjdXJyZW50IHRpbWVcbiAgICAgKiBAcGFyYW0gZXhwaXJlc09uIC0gICAgIFRoZSBlbmQgdGltZSBmb3IgdGhlIHVzZXIgZGVsZWdhdGlvbiBTQVMuIE11c3QgYmUgd2l0aGluIDcgZGF5cyBvZiB0aGUgY3VycmVudCB0aW1lXG4gICAgICovXG4gICAgYXN5bmMgZ2V0VXNlckRlbGVnYXRpb25LZXkoc3RhcnRzT24sIGV4cGlyZXNPbiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nQ2xpZW50LndpdGhTcGFuKFwiQmxvYlNlcnZpY2VDbGllbnQtZ2V0VXNlckRlbGVnYXRpb25LZXlcIiwgb3B0aW9ucywgYXN5bmMgKHVwZGF0ZWRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGFzc2VydFJlc3BvbnNlKGF3YWl0IHRoaXMuc2VydmljZUNvbnRleHQuZ2V0VXNlckRlbGVnYXRpb25LZXkoe1xuICAgICAgICAgICAgICAgIHN0YXJ0c09uOiB0cnVuY2F0ZWRJU084MDYxRGF0ZShzdGFydHNPbiwgZmFsc2UpLFxuICAgICAgICAgICAgICAgIGV4cGlyZXNPbjogdHJ1bmNhdGVkSVNPODA2MURhdGUoZXhwaXJlc09uLCBmYWxzZSksXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgdHJhY2luZ09wdGlvbnM6IHVwZGF0ZWRPcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgY29uc3QgdXNlckRlbGVnYXRpb25LZXkgPSB7XG4gICAgICAgICAgICAgICAgc2lnbmVkT2JqZWN0SWQ6IHJlc3BvbnNlLnNpZ25lZE9iamVjdElkLFxuICAgICAgICAgICAgICAgIHNpZ25lZFRlbmFudElkOiByZXNwb25zZS5zaWduZWRUZW5hbnRJZCxcbiAgICAgICAgICAgICAgICBzaWduZWRTdGFydHNPbjogbmV3IERhdGUocmVzcG9uc2Uuc2lnbmVkU3RhcnRzT24pLFxuICAgICAgICAgICAgICAgIHNpZ25lZEV4cGlyZXNPbjogbmV3IERhdGUocmVzcG9uc2Uuc2lnbmVkRXhwaXJlc09uKSxcbiAgICAgICAgICAgICAgICBzaWduZWRTZXJ2aWNlOiByZXNwb25zZS5zaWduZWRTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHNpZ25lZFZlcnNpb246IHJlc3BvbnNlLnNpZ25lZFZlcnNpb24sXG4gICAgICAgICAgICAgICAgdmFsdWU6IHJlc3BvbnNlLnZhbHVlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IE9iamVjdC5hc3NpZ24oeyBfcmVzcG9uc2U6IHJlc3BvbnNlLl9yZXNwb25zZSwgcmVxdWVzdElkOiByZXNwb25zZS5yZXF1ZXN0SWQsIGNsaWVudFJlcXVlc3RJZDogcmVzcG9uc2UuY2xpZW50UmVxdWVzdElkLCB2ZXJzaW9uOiByZXNwb25zZS52ZXJzaW9uLCBkYXRlOiByZXNwb25zZS5kYXRlLCBlcnJvckNvZGU6IHJlc3BvbnNlLmVycm9yQ29kZSB9LCB1c2VyRGVsZWdhdGlvbktleSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIEJsb2JCYXRjaENsaWVudCBvYmplY3QgdG8gY29uZHVjdCBiYXRjaCBvcGVyYXRpb25zLlxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9zdG9yYWdlc2VydmljZXMvYmxvYi1iYXRjaFxuICAgICAqXG4gICAgICogQHJldHVybnMgQSBuZXcgQmxvYkJhdGNoQ2xpZW50IG9iamVjdCBmb3IgdGhpcyBzZXJ2aWNlLlxuICAgICAqL1xuICAgIGdldEJsb2JCYXRjaENsaWVudCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBCbG9iQmF0Y2hDbGllbnQodGhpcy51cmwsIHRoaXMucGlwZWxpbmUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBPbmx5IGF2YWlsYWJsZSBmb3IgQmxvYlNlcnZpY2VDbGllbnQgY29uc3RydWN0ZWQgd2l0aCBhIHNoYXJlZCBrZXkgY3JlZGVudGlhbC5cbiAgICAgKlxuICAgICAqIEdlbmVyYXRlcyBhIEJsb2IgYWNjb3VudCBTaGFyZWQgQWNjZXNzIFNpZ25hdHVyZSAoU0FTKSBVUkkgYmFzZWQgb24gdGhlIGNsaWVudCBwcm9wZXJ0aWVzXG4gICAgICogYW5kIHBhcmFtZXRlcnMgcGFzc2VkIGluLiBUaGUgU0FTIGlzIHNpZ25lZCBieSB0aGUgc2hhcmVkIGtleSBjcmVkZW50aWFsIG9mIHRoZSBjbGllbnQuXG4gICAgICpcbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9jcmVhdGUtYWNjb3VudC1zYXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBleHBpcmVzT24gLSBPcHRpb25hbC4gVGhlIHRpbWUgYXQgd2hpY2ggdGhlIHNoYXJlZCBhY2Nlc3Mgc2lnbmF0dXJlIGJlY29tZXMgaW52YWxpZC4gRGVmYXVsdCB0byBhbiBob3VyIGxhdGVyIGlmIG5vdCBwcm92aWRlZC5cbiAgICAgKiBAcGFyYW0gcGVybWlzc2lvbnMgLSBTcGVjaWZpZXMgdGhlIGxpc3Qgb2YgcGVybWlzc2lvbnMgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBTQVMuXG4gICAgICogQHBhcmFtIHJlc291cmNlVHlwZXMgLSBTcGVjaWZpZXMgdGhlIHJlc291cmNlIHR5cGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2hhcmVkIGFjY2VzcyBzaWduYXR1cmUuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBwYXJhbWV0ZXJzLlxuICAgICAqIEByZXR1cm5zIEFuIGFjY291bnQgU0FTIFVSSSBjb25zaXN0aW5nIG9mIHRoZSBVUkkgdG8gdGhlIHJlc291cmNlIHJlcHJlc2VudGVkIGJ5IHRoaXMgY2xpZW50LCBmb2xsb3dlZCBieSB0aGUgZ2VuZXJhdGVkIFNBUyB0b2tlbi5cbiAgICAgKi9cbiAgICBnZW5lcmF0ZUFjY291bnRTYXNVcmwoZXhwaXJlc09uLCBwZXJtaXNzaW9ucyA9IEFjY291bnRTQVNQZXJtaXNzaW9ucy5wYXJzZShcInJcIiksIHJlc291cmNlVHlwZXMgPSBcInNjb1wiLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgaWYgKCEodGhpcy5jcmVkZW50aWFsIGluc3RhbmNlb2YgU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwpKSB7XG4gICAgICAgICAgICB0aHJvdyBSYW5nZUVycm9yKFwiQ2FuIG9ubHkgZ2VuZXJhdGUgdGhlIGFjY291bnQgU0FTIHdoZW4gdGhlIGNsaWVudCBpcyBpbml0aWFsaXplZCB3aXRoIGEgc2hhcmVkIGtleSBjcmVkZW50aWFsXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChleHBpcmVzT24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICAgICAgICAgIGV4cGlyZXNPbiA9IG5ldyBEYXRlKG5vdy5nZXRUaW1lKCkgKyAzNjAwICogMTAwMCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2FzID0gZ2VuZXJhdGVBY2NvdW50U0FTUXVlcnlQYXJhbWV0ZXJzKE9iamVjdC5hc3NpZ24oeyBwZXJtaXNzaW9ucyxcbiAgICAgICAgICAgIGV4cGlyZXNPbixcbiAgICAgICAgICAgIHJlc291cmNlVHlwZXMsIHNlcnZpY2VzOiBBY2NvdW50U0FTU2VydmljZXMucGFyc2UoXCJiXCIpLnRvU3RyaW5nKCkgfSwgb3B0aW9ucyksIHRoaXMuY3JlZGVudGlhbCkudG9TdHJpbmcoKTtcbiAgICAgICAgcmV0dXJuIGFwcGVuZFRvVVJMUXVlcnkodGhpcy51cmwsIHNhcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE9ubHkgYXZhaWxhYmxlIGZvciBCbG9iU2VydmljZUNsaWVudCBjb25zdHJ1Y3RlZCB3aXRoIGEgc2hhcmVkIGtleSBjcmVkZW50aWFsLlxuICAgICAqXG4gICAgICogR2VuZXJhdGVzIHN0cmluZyB0byBzaWduIGZvciBhIEJsb2IgYWNjb3VudCBTaGFyZWQgQWNjZXNzIFNpZ25hdHVyZSAoU0FTKSBVUkkgYmFzZWQgb25cbiAgICAgKiB0aGUgY2xpZW50IHByb3BlcnRpZXMgYW5kIHBhcmFtZXRlcnMgcGFzc2VkIGluLiBUaGUgU0FTIGlzIHNpZ25lZCBieSB0aGUgc2hhcmVkIGtleSBjcmVkZW50aWFsIG9mIHRoZSBjbGllbnQuXG4gICAgICpcbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3Jlc3QvYXBpL3N0b3JhZ2VzZXJ2aWNlcy9jcmVhdGUtYWNjb3VudC1zYXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBleHBpcmVzT24gLSBPcHRpb25hbC4gVGhlIHRpbWUgYXQgd2hpY2ggdGhlIHNoYXJlZCBhY2Nlc3Mgc2lnbmF0dXJlIGJlY29tZXMgaW52YWxpZC4gRGVmYXVsdCB0byBhbiBob3VyIGxhdGVyIGlmIG5vdCBwcm92aWRlZC5cbiAgICAgKiBAcGFyYW0gcGVybWlzc2lvbnMgLSBTcGVjaWZpZXMgdGhlIGxpc3Qgb2YgcGVybWlzc2lvbnMgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBTQVMuXG4gICAgICogQHBhcmFtIHJlc291cmNlVHlwZXMgLSBTcGVjaWZpZXMgdGhlIHJlc291cmNlIHR5cGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2hhcmVkIGFjY2VzcyBzaWduYXR1cmUuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBwYXJhbWV0ZXJzLlxuICAgICAqIEByZXR1cm5zIEFuIGFjY291bnQgU0FTIFVSSSBjb25zaXN0aW5nIG9mIHRoZSBVUkkgdG8gdGhlIHJlc291cmNlIHJlcHJlc2VudGVkIGJ5IHRoaXMgY2xpZW50LCBmb2xsb3dlZCBieSB0aGUgZ2VuZXJhdGVkIFNBUyB0b2tlbi5cbiAgICAgKi9cbiAgICBnZW5lcmF0ZVNhc1N0cmluZ1RvU2lnbihleHBpcmVzT24sIHBlcm1pc3Npb25zID0gQWNjb3VudFNBU1Blcm1pc3Npb25zLnBhcnNlKFwiclwiKSwgcmVzb3VyY2VUeXBlcyA9IFwic2NvXCIsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBpZiAoISh0aGlzLmNyZWRlbnRpYWwgaW5zdGFuY2VvZiBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbCkpIHtcbiAgICAgICAgICAgIHRocm93IFJhbmdlRXJyb3IoXCJDYW4gb25seSBnZW5lcmF0ZSB0aGUgYWNjb3VudCBTQVMgd2hlbiB0aGUgY2xpZW50IGlzIGluaXRpYWxpemVkIHdpdGggYSBzaGFyZWQga2V5IGNyZWRlbnRpYWxcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV4cGlyZXNPbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgZXhwaXJlc09uID0gbmV3IERhdGUobm93LmdldFRpbWUoKSArIDM2MDAgKiAxMDAwKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2VuZXJhdGVBY2NvdW50U0FTUXVlcnlQYXJhbWV0ZXJzSW50ZXJuYWwoT2JqZWN0LmFzc2lnbih7IHBlcm1pc3Npb25zLFxuICAgICAgICAgICAgZXhwaXJlc09uLFxuICAgICAgICAgICAgcmVzb3VyY2VUeXBlcywgc2VydmljZXM6IEFjY291bnRTQVNTZXJ2aWNlcy5wYXJzZShcImJcIikudG9TdHJpbmcoKSB9LCBvcHRpb25zKSwgdGhpcy5jcmVkZW50aWFsKS5zdHJpbmdUb1NpZ247XG4gICAgfVxufVxuXG4vLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbi8qKiBLbm93biB2YWx1ZXMgb2Yge0BsaW5rIEVuY3J5cHRpb25BbGdvcml0aG1UeXBlfSB0aGF0IHRoZSBzZXJ2aWNlIGFjY2VwdHMuICovXG5leHBvcnRzLktub3duRW5jcnlwdGlvbkFsZ29yaXRobVR5cGUgPSB2b2lkIDA7XG4oZnVuY3Rpb24gKEtub3duRW5jcnlwdGlvbkFsZ29yaXRobVR5cGUpIHtcbiAgICBLbm93bkVuY3J5cHRpb25BbGdvcml0aG1UeXBlW1wiQUVTMjU2XCJdID0gXCJBRVMyNTZcIjtcbn0pKGV4cG9ydHMuS25vd25FbmNyeXB0aW9uQWxnb3JpdGhtVHlwZSB8fCAoZXhwb3J0cy5Lbm93bkVuY3J5cHRpb25BbGdvcml0aG1UeXBlID0ge30pKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUmVzdEVycm9yXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29yZVJlc3RQaXBlbGluZS5SZXN0RXJyb3I7IH1cbn0pO1xuZXhwb3J0cy5BY2NvdW50U0FTUGVybWlzc2lvbnMgPSBBY2NvdW50U0FTUGVybWlzc2lvbnM7XG5leHBvcnRzLkFjY291bnRTQVNSZXNvdXJjZVR5cGVzID0gQWNjb3VudFNBU1Jlc291cmNlVHlwZXM7XG5leHBvcnRzLkFjY291bnRTQVNTZXJ2aWNlcyA9IEFjY291bnRTQVNTZXJ2aWNlcztcbmV4cG9ydHMuQW5vbnltb3VzQ3JlZGVudGlhbCA9IEFub255bW91c0NyZWRlbnRpYWw7XG5leHBvcnRzLkFub255bW91c0NyZWRlbnRpYWxQb2xpY3kgPSBBbm9ueW1vdXNDcmVkZW50aWFsUG9saWN5O1xuZXhwb3J0cy5BcHBlbmRCbG9iQ2xpZW50ID0gQXBwZW5kQmxvYkNsaWVudDtcbmV4cG9ydHMuQmFzZVJlcXVlc3RQb2xpY3kgPSBCYXNlUmVxdWVzdFBvbGljeTtcbmV4cG9ydHMuQmxvYkJhdGNoID0gQmxvYkJhdGNoO1xuZXhwb3J0cy5CbG9iQmF0Y2hDbGllbnQgPSBCbG9iQmF0Y2hDbGllbnQ7XG5leHBvcnRzLkJsb2JDbGllbnQgPSBCbG9iQ2xpZW50O1xuZXhwb3J0cy5CbG9iTGVhc2VDbGllbnQgPSBCbG9iTGVhc2VDbGllbnQ7XG5leHBvcnRzLkJsb2JTQVNQZXJtaXNzaW9ucyA9IEJsb2JTQVNQZXJtaXNzaW9ucztcbmV4cG9ydHMuQmxvYlNlcnZpY2VDbGllbnQgPSBCbG9iU2VydmljZUNsaWVudDtcbmV4cG9ydHMuQmxvY2tCbG9iQ2xpZW50ID0gQmxvY2tCbG9iQ2xpZW50O1xuZXhwb3J0cy5Db250YWluZXJDbGllbnQgPSBDb250YWluZXJDbGllbnQ7XG5leHBvcnRzLkNvbnRhaW5lclNBU1Blcm1pc3Npb25zID0gQ29udGFpbmVyU0FTUGVybWlzc2lvbnM7XG5leHBvcnRzLkNyZWRlbnRpYWwgPSBDcmVkZW50aWFsO1xuZXhwb3J0cy5DcmVkZW50aWFsUG9saWN5ID0gQ3JlZGVudGlhbFBvbGljeTtcbmV4cG9ydHMuUGFnZUJsb2JDbGllbnQgPSBQYWdlQmxvYkNsaWVudDtcbmV4cG9ydHMuUGlwZWxpbmUgPSBQaXBlbGluZTtcbmV4cG9ydHMuU0FTUXVlcnlQYXJhbWV0ZXJzID0gU0FTUXVlcnlQYXJhbWV0ZXJzO1xuZXhwb3J0cy5TdG9yYWdlQnJvd3NlclBvbGljeSA9IFN0b3JhZ2VCcm93c2VyUG9saWN5O1xuZXhwb3J0cy5TdG9yYWdlQnJvd3NlclBvbGljeUZhY3RvcnkgPSBTdG9yYWdlQnJvd3NlclBvbGljeUZhY3Rvcnk7XG5leHBvcnRzLlN0b3JhZ2VPQXV0aFNjb3BlcyA9IFN0b3JhZ2VPQXV0aFNjb3BlcztcbmV4cG9ydHMuU3RvcmFnZVJldHJ5UG9saWN5ID0gU3RvcmFnZVJldHJ5UG9saWN5O1xuZXhwb3J0cy5TdG9yYWdlUmV0cnlQb2xpY3lGYWN0b3J5ID0gU3RvcmFnZVJldHJ5UG9saWN5RmFjdG9yeTtcbmV4cG9ydHMuU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWwgPSBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbDtcbmV4cG9ydHMuU3RvcmFnZVNoYXJlZEtleUNyZWRlbnRpYWxQb2xpY3kgPSBTdG9yYWdlU2hhcmVkS2V5Q3JlZGVudGlhbFBvbGljeTtcbmV4cG9ydHMuZ2VuZXJhdGVBY2NvdW50U0FTUXVlcnlQYXJhbWV0ZXJzID0gZ2VuZXJhdGVBY2NvdW50U0FTUXVlcnlQYXJhbWV0ZXJzO1xuZXhwb3J0cy5nZW5lcmF0ZUJsb2JTQVNRdWVyeVBhcmFtZXRlcnMgPSBnZW5lcmF0ZUJsb2JTQVNRdWVyeVBhcmFtZXRlcnM7XG5leHBvcnRzLmdldEJsb2JTZXJ2aWNlQWNjb3VudEF1ZGllbmNlID0gZ2V0QmxvYlNlcnZpY2VBY2NvdW50QXVkaWVuY2U7XG5leHBvcnRzLmlzUGlwZWxpbmVMaWtlID0gaXNQaXBlbGluZUxpa2U7XG5leHBvcnRzLmxvZ2dlciA9IGxvZ2dlcjtcbmV4cG9ydHMubmV3UGlwZWxpbmUgPSBuZXdQaXBlbGluZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnVwbG9hZFppcFRvQmxvYlN0b3JhZ2UgPSB2b2lkIDA7XG5jb25zdCBzdG9yYWdlX2Jsb2JfMSA9IHJlcXVpcmUoXCJAYXp1cmUvc3RvcmFnZS1ibG9iXCIpO1xuY29uc3QgY29uZmlnXzEgPSByZXF1aXJlKFwiLi4vc2hhcmVkL2NvbmZpZ1wiKTtcbmNvbnN0IGNvcmUgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIkBhY3Rpb25zL2NvcmVcIikpO1xuY29uc3QgY3J5cHRvID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJjcnlwdG9cIikpO1xuY29uc3Qgc3RyZWFtID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJzdHJlYW1cIikpO1xuY29uc3QgZXJyb3JzXzEgPSByZXF1aXJlKFwiLi4vc2hhcmVkL2Vycm9yc1wiKTtcbmZ1bmN0aW9uIHVwbG9hZFppcFRvQmxvYlN0b3JhZ2UoYXV0aGVudGljYXRlZFVwbG9hZFVSTCwgemlwVXBsb2FkU3RyZWFtKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgbGV0IHVwbG9hZEJ5dGVDb3VudCA9IDA7XG4gICAgICAgIGxldCBsYXN0UHJvZ3Jlc3NUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgY29uc3QgYWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgICAgICBjb25zdCBjaHVua1RpbWVyID0gKGludGVydmFsKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoRGF0ZS5ub3coKSAtIGxhc3RQcm9ncmVzc1RpbWUgPiBpbnRlcnZhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignVXBsb2FkIHByb2dyZXNzIHN0YWxsZWQuJykpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwgaW50ZXJ2YWwpO1xuICAgICAgICAgICAgICAgIGFib3J0Q29udHJvbGxlci5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGltZXIpO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IG1heENvbmN1cnJlbmN5ID0gKDAsIGNvbmZpZ18xLmdldENvbmN1cnJlbmN5KSgpO1xuICAgICAgICBjb25zdCBidWZmZXJTaXplID0gKDAsIGNvbmZpZ18xLmdldFVwbG9hZENodW5rU2l6ZSkoKTtcbiAgICAgICAgY29uc3QgYmxvYkNsaWVudCA9IG5ldyBzdG9yYWdlX2Jsb2JfMS5CbG9iQ2xpZW50KGF1dGhlbnRpY2F0ZWRVcGxvYWRVUkwpO1xuICAgICAgICBjb25zdCBibG9ja0Jsb2JDbGllbnQgPSBibG9iQ2xpZW50LmdldEJsb2NrQmxvYkNsaWVudCgpO1xuICAgICAgICBjb3JlLmRlYnVnKGBVcGxvYWRpbmcgYXJ0aWZhY3QgemlwIHRvIGJsb2Igc3RvcmFnZSB3aXRoIG1heENvbmN1cnJlbmN5OiAke21heENvbmN1cnJlbmN5fSwgYnVmZmVyU2l6ZTogJHtidWZmZXJTaXplfWApO1xuICAgICAgICBjb25zdCB1cGxvYWRDYWxsYmFjayA9IChwcm9ncmVzcykgPT4ge1xuICAgICAgICAgICAgY29yZS5pbmZvKGBVcGxvYWRlZCBieXRlcyAke3Byb2dyZXNzLmxvYWRlZEJ5dGVzfWApO1xuICAgICAgICAgICAgdXBsb2FkQnl0ZUNvdW50ID0gcHJvZ3Jlc3MubG9hZGVkQnl0ZXM7XG4gICAgICAgICAgICBsYXN0UHJvZ3Jlc3NUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGJsb2JIVFRQSGVhZGVyczogeyBibG9iQ29udGVudFR5cGU6ICd6aXAnIH0sXG4gICAgICAgICAgICBvblByb2dyZXNzOiB1cGxvYWRDYWxsYmFjayxcbiAgICAgICAgICAgIGFib3J0U2lnbmFsOiBhYm9ydENvbnRyb2xsZXIuc2lnbmFsXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaGEyNTZIYXNoID0gdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCB1cGxvYWRTdHJlYW0gPSBuZXcgc3RyZWFtLlBhc3NUaHJvdWdoKCk7XG4gICAgICAgIGNvbnN0IGhhc2hTdHJlYW0gPSBjcnlwdG8uY3JlYXRlSGFzaCgnc2hhMjU2Jyk7XG4gICAgICAgIHppcFVwbG9hZFN0cmVhbS5waXBlKHVwbG9hZFN0cmVhbSk7IC8vIFRoaXMgc3RyZWFtIGlzIHVzZWQgZm9yIHRoZSB1cGxvYWRcbiAgICAgICAgemlwVXBsb2FkU3RyZWFtLnBpcGUoaGFzaFN0cmVhbSkuc2V0RW5jb2RpbmcoJ2hleCcpOyAvLyBUaGlzIHN0cmVhbSBpcyB1c2VkIHRvIGNvbXB1dGUgYSBoYXNoIG9mIHRoZSB6aXAgY29udGVudCB0aGF0IGdldHMgdXNlZC4gSW50ZWdyaXR5IGNoZWNrXG4gICAgICAgIGNvcmUuaW5mbygnQmVnaW5uaW5nIHVwbG9hZCBvZiBhcnRpZmFjdCBjb250ZW50IHRvIGJsb2Igc3RvcmFnZScpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgeWllbGQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgICAgICAgICBibG9ja0Jsb2JDbGllbnQudXBsb2FkU3RyZWFtKHVwbG9hZFN0cmVhbSwgYnVmZmVyU2l6ZSwgbWF4Q29uY3VycmVuY3ksIG9wdGlvbnMpLFxuICAgICAgICAgICAgICAgIGNodW5rVGltZXIoKDAsIGNvbmZpZ18xLmdldFVwbG9hZENodW5rVGltZW91dCkoKSlcbiAgICAgICAgICAgIF0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgaWYgKGVycm9yc18xLk5ldHdvcmtFcnJvci5pc05ldHdvcmtFcnJvckNvZGUoZXJyb3IgPT09IG51bGwgfHwgZXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGVycm9yLmNvZGUpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGVycm9yc18xLk5ldHdvcmtFcnJvcihlcnJvciA9PT0gbnVsbCB8fCBlcnJvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogZXJyb3IuY29kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIGFib3J0Q29udHJvbGxlci5hYm9ydCgpO1xuICAgICAgICB9XG4gICAgICAgIGNvcmUuaW5mbygnRmluaXNoZWQgdXBsb2FkaW5nIGFydGlmYWN0IGNvbnRlbnQgdG8gYmxvYiBzdG9yYWdlIScpO1xuICAgICAgICBoYXNoU3RyZWFtLmVuZCgpO1xuICAgICAgICBzaGEyNTZIYXNoID0gaGFzaFN0cmVhbS5yZWFkKCk7XG4gICAgICAgIGNvcmUuaW5mbyhgU0hBMjU2IGhhc2ggb2YgdXBsb2FkZWQgYXJ0aWZhY3QgemlwIGlzICR7c2hhMjU2SGFzaH1gKTtcbiAgICAgICAgaWYgKHVwbG9hZEJ5dGVDb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgY29yZS53YXJuaW5nKGBObyBkYXRhIHdhcyB1cGxvYWRlZCB0byBibG9iIHN0b3JhZ2UuIFJlcG9ydGVkIHVwbG9hZCBieXRlIGNvdW50IGlzIDAuYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHVwbG9hZFNpemU6IHVwbG9hZEJ5dGVDb3VudCxcbiAgICAgICAgICAgIHNoYTI1Nkhhc2hcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cbmV4cG9ydHMudXBsb2FkWmlwVG9CbG9iU3RvcmFnZSA9IHVwbG9hZFppcFRvQmxvYlN0b3JhZ2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ibG9iLXVwbG9hZC5qcy5tYXAiLAogICAgImNvbnN0IGlzV2luZG93cyA9IHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JyAmJlxuICBwcm9jZXNzICYmXG4gIHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMidcbm1vZHVsZS5leHBvcnRzID0gaXNXaW5kb3dzID8geyBzZXA6ICdcXFxcJyB9IDogeyBzZXA6ICcvJyB9XG4iLAogICAgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gYmFsYW5jZWQ7XG5mdW5jdGlvbiBiYWxhbmNlZChhLCBiLCBzdHIpIHtcbiAgaWYgKGEgaW5zdGFuY2VvZiBSZWdFeHApIGEgPSBtYXliZU1hdGNoKGEsIHN0cik7XG4gIGlmIChiIGluc3RhbmNlb2YgUmVnRXhwKSBiID0gbWF5YmVNYXRjaChiLCBzdHIpO1xuXG4gIHZhciByID0gcmFuZ2UoYSwgYiwgc3RyKTtcblxuICByZXR1cm4gciAmJiB7XG4gICAgc3RhcnQ6IHJbMF0sXG4gICAgZW5kOiByWzFdLFxuICAgIHByZTogc3RyLnNsaWNlKDAsIHJbMF0pLFxuICAgIGJvZHk6IHN0ci5zbGljZShyWzBdICsgYS5sZW5ndGgsIHJbMV0pLFxuICAgIHBvc3Q6IHN0ci5zbGljZShyWzFdICsgYi5sZW5ndGgpXG4gIH07XG59XG5cbmZ1bmN0aW9uIG1heWJlTWF0Y2gocmVnLCBzdHIpIHtcbiAgdmFyIG0gPSBzdHIubWF0Y2gocmVnKTtcbiAgcmV0dXJuIG0gPyBtWzBdIDogbnVsbDtcbn1cblxuYmFsYW5jZWQucmFuZ2UgPSByYW5nZTtcbmZ1bmN0aW9uIHJhbmdlKGEsIGIsIHN0cikge1xuICB2YXIgYmVncywgYmVnLCBsZWZ0LCByaWdodCwgcmVzdWx0O1xuICB2YXIgYWkgPSBzdHIuaW5kZXhPZihhKTtcbiAgdmFyIGJpID0gc3RyLmluZGV4T2YoYiwgYWkgKyAxKTtcbiAgdmFyIGkgPSBhaTtcblxuICBpZiAoYWkgPj0gMCAmJiBiaSA+IDApIHtcbiAgICBpZihhPT09Yikge1xuICAgICAgcmV0dXJuIFthaSwgYmldO1xuICAgIH1cbiAgICBiZWdzID0gW107XG4gICAgbGVmdCA9IHN0ci5sZW5ndGg7XG5cbiAgICB3aGlsZSAoaSA+PSAwICYmICFyZXN1bHQpIHtcbiAgICAgIGlmIChpID09IGFpKSB7XG4gICAgICAgIGJlZ3MucHVzaChpKTtcbiAgICAgICAgYWkgPSBzdHIuaW5kZXhPZihhLCBpICsgMSk7XG4gICAgICB9IGVsc2UgaWYgKGJlZ3MubGVuZ3RoID09IDEpIHtcbiAgICAgICAgcmVzdWx0ID0gWyBiZWdzLnBvcCgpLCBiaSBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYmVnID0gYmVncy5wb3AoKTtcbiAgICAgICAgaWYgKGJlZyA8IGxlZnQpIHtcbiAgICAgICAgICBsZWZ0ID0gYmVnO1xuICAgICAgICAgIHJpZ2h0ID0gYmk7XG4gICAgICAgIH1cblxuICAgICAgICBiaSA9IHN0ci5pbmRleE9mKGIsIGkgKyAxKTtcbiAgICAgIH1cblxuICAgICAgaSA9IGFpIDwgYmkgJiYgYWkgPj0gMCA/IGFpIDogYmk7XG4gICAgfVxuXG4gICAgaWYgKGJlZ3MubGVuZ3RoKSB7XG4gICAgICByZXN1bHQgPSBbIGxlZnQsIHJpZ2h0IF07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbiIsCiAgICAidmFyIGJhbGFuY2VkID0gcmVxdWlyZSgnYmFsYW5jZWQtbWF0Y2gnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBleHBhbmRUb3A7XG5cbnZhciBlc2NTbGFzaCA9ICdcXDBTTEFTSCcrTWF0aC5yYW5kb20oKSsnXFwwJztcbnZhciBlc2NPcGVuID0gJ1xcME9QRU4nK01hdGgucmFuZG9tKCkrJ1xcMCc7XG52YXIgZXNjQ2xvc2UgPSAnXFwwQ0xPU0UnK01hdGgucmFuZG9tKCkrJ1xcMCc7XG52YXIgZXNjQ29tbWEgPSAnXFwwQ09NTUEnK01hdGgucmFuZG9tKCkrJ1xcMCc7XG52YXIgZXNjUGVyaW9kID0gJ1xcMFBFUklPRCcrTWF0aC5yYW5kb20oKSsnXFwwJztcblxuZnVuY3Rpb24gbnVtZXJpYyhzdHIpIHtcbiAgcmV0dXJuIHBhcnNlSW50KHN0ciwgMTApID09IHN0clxuICAgID8gcGFyc2VJbnQoc3RyLCAxMClcbiAgICA6IHN0ci5jaGFyQ29kZUF0KDApO1xufVxuXG5mdW5jdGlvbiBlc2NhcGVCcmFjZXMoc3RyKSB7XG4gIHJldHVybiBzdHIuc3BsaXQoJ1xcXFxcXFxcJykuam9pbihlc2NTbGFzaClcbiAgICAgICAgICAgIC5zcGxpdCgnXFxcXHsnKS5qb2luKGVzY09wZW4pXG4gICAgICAgICAgICAuc3BsaXQoJ1xcXFx9Jykuam9pbihlc2NDbG9zZSlcbiAgICAgICAgICAgIC5zcGxpdCgnXFxcXCwnKS5qb2luKGVzY0NvbW1hKVxuICAgICAgICAgICAgLnNwbGl0KCdcXFxcLicpLmpvaW4oZXNjUGVyaW9kKTtcbn1cblxuZnVuY3Rpb24gdW5lc2NhcGVCcmFjZXMoc3RyKSB7XG4gIHJldHVybiBzdHIuc3BsaXQoZXNjU2xhc2gpLmpvaW4oJ1xcXFwnKVxuICAgICAgICAgICAgLnNwbGl0KGVzY09wZW4pLmpvaW4oJ3snKVxuICAgICAgICAgICAgLnNwbGl0KGVzY0Nsb3NlKS5qb2luKCd9JylcbiAgICAgICAgICAgIC5zcGxpdChlc2NDb21tYSkuam9pbignLCcpXG4gICAgICAgICAgICAuc3BsaXQoZXNjUGVyaW9kKS5qb2luKCcuJyk7XG59XG5cblxuLy8gQmFzaWNhbGx5IGp1c3Qgc3RyLnNwbGl0KFwiLFwiKSwgYnV0IGhhbmRsaW5nIGNhc2VzXG4vLyB3aGVyZSB3ZSBoYXZlIG5lc3RlZCBicmFjZWQgc2VjdGlvbnMsIHdoaWNoIHNob3VsZCBiZVxuLy8gdHJlYXRlZCBhcyBpbmRpdmlkdWFsIG1lbWJlcnMsIGxpa2Uge2Ese2IsY30sZH1cbmZ1bmN0aW9uIHBhcnNlQ29tbWFQYXJ0cyhzdHIpIHtcbiAgaWYgKCFzdHIpXG4gICAgcmV0dXJuIFsnJ107XG5cbiAgdmFyIHBhcnRzID0gW107XG4gIHZhciBtID0gYmFsYW5jZWQoJ3snLCAnfScsIHN0cik7XG5cbiAgaWYgKCFtKVxuICAgIHJldHVybiBzdHIuc3BsaXQoJywnKTtcblxuICB2YXIgcHJlID0gbS5wcmU7XG4gIHZhciBib2R5ID0gbS5ib2R5O1xuICB2YXIgcG9zdCA9IG0ucG9zdDtcbiAgdmFyIHAgPSBwcmUuc3BsaXQoJywnKTtcblxuICBwW3AubGVuZ3RoLTFdICs9ICd7JyArIGJvZHkgKyAnfSc7XG4gIHZhciBwb3N0UGFydHMgPSBwYXJzZUNvbW1hUGFydHMocG9zdCk7XG4gIGlmIChwb3N0Lmxlbmd0aCkge1xuICAgIHBbcC5sZW5ndGgtMV0gKz0gcG9zdFBhcnRzLnNoaWZ0KCk7XG4gICAgcC5wdXNoLmFwcGx5KHAsIHBvc3RQYXJ0cyk7XG4gIH1cblxuICBwYXJ0cy5wdXNoLmFwcGx5KHBhcnRzLCBwKTtcblxuICByZXR1cm4gcGFydHM7XG59XG5cbmZ1bmN0aW9uIGV4cGFuZFRvcChzdHIpIHtcbiAgaWYgKCFzdHIpXG4gICAgcmV0dXJuIFtdO1xuXG4gIC8vIEkgZG9uJ3Qga25vdyB3aHkgQmFzaCA0LjMgZG9lcyB0aGlzLCBidXQgaXQgZG9lcy5cbiAgLy8gQW55dGhpbmcgc3RhcnRpbmcgd2l0aCB7fSB3aWxsIGhhdmUgdGhlIGZpcnN0IHR3byBieXRlcyBwcmVzZXJ2ZWRcbiAgLy8gYnV0ICpvbmx5KiBhdCB0aGUgdG9wIGxldmVsLCBzbyB7fSxhfWIgd2lsbCBub3QgZXhwYW5kIHRvIGFueXRoaW5nLFxuICAvLyBidXQgYXt9LGJ9YyB3aWxsIGJlIGV4cGFuZGVkIHRvIFthfWMsYWJjXS5cbiAgLy8gT25lIGNvdWxkIGFyZ3VlIHRoYXQgdGhpcyBpcyBhIGJ1ZyBpbiBCYXNoLCBidXQgc2luY2UgdGhlIGdvYWwgb2ZcbiAgLy8gdGhpcyBtb2R1bGUgaXMgdG8gbWF0Y2ggQmFzaCdzIHJ1bGVzLCB3ZSBlc2NhcGUgYSBsZWFkaW5nIHt9XG4gIGlmIChzdHIuc3Vic3RyKDAsIDIpID09PSAne30nKSB7XG4gICAgc3RyID0gJ1xcXFx7XFxcXH0nICsgc3RyLnN1YnN0cigyKTtcbiAgfVxuXG4gIHJldHVybiBleHBhbmQoZXNjYXBlQnJhY2VzKHN0ciksIHRydWUpLm1hcCh1bmVzY2FwZUJyYWNlcyk7XG59XG5cbmZ1bmN0aW9uIGVtYnJhY2Uoc3RyKSB7XG4gIHJldHVybiAneycgKyBzdHIgKyAnfSc7XG59XG5mdW5jdGlvbiBpc1BhZGRlZChlbCkge1xuICByZXR1cm4gL14tPzBcXGQvLnRlc3QoZWwpO1xufVxuXG5mdW5jdGlvbiBsdGUoaSwgeSkge1xuICByZXR1cm4gaSA8PSB5O1xufVxuZnVuY3Rpb24gZ3RlKGksIHkpIHtcbiAgcmV0dXJuIGkgPj0geTtcbn1cblxuZnVuY3Rpb24gZXhwYW5kKHN0ciwgaXNUb3ApIHtcbiAgdmFyIGV4cGFuc2lvbnMgPSBbXTtcblxuICB2YXIgbSA9IGJhbGFuY2VkKCd7JywgJ30nLCBzdHIpO1xuICBpZiAoIW0pIHJldHVybiBbc3RyXTtcblxuICAvLyBubyBuZWVkIHRvIGV4cGFuZCBwcmUsIHNpbmNlIGl0IGlzIGd1YXJhbnRlZWQgdG8gYmUgZnJlZSBvZiBicmFjZS1zZXRzXG4gIHZhciBwcmUgPSBtLnByZTtcbiAgdmFyIHBvc3QgPSBtLnBvc3QubGVuZ3RoXG4gICAgPyBleHBhbmQobS5wb3N0LCBmYWxzZSlcbiAgICA6IFsnJ107XG5cbiAgaWYgKC9cXCQkLy50ZXN0KG0ucHJlKSkgeyAgICBcbiAgICBmb3IgKHZhciBrID0gMDsgayA8IHBvc3QubGVuZ3RoOyBrKyspIHtcbiAgICAgIHZhciBleHBhbnNpb24gPSBwcmUrICd7JyArIG0uYm9keSArICd9JyArIHBvc3Rba107XG4gICAgICBleHBhbnNpb25zLnB1c2goZXhwYW5zaW9uKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGlzTnVtZXJpY1NlcXVlbmNlID0gL14tP1xcZCtcXC5cXC4tP1xcZCsoPzpcXC5cXC4tP1xcZCspPyQvLnRlc3QobS5ib2R5KTtcbiAgICB2YXIgaXNBbHBoYVNlcXVlbmNlID0gL15bYS16QS1aXVxcLlxcLlthLXpBLVpdKD86XFwuXFwuLT9cXGQrKT8kLy50ZXN0KG0uYm9keSk7XG4gICAgdmFyIGlzU2VxdWVuY2UgPSBpc051bWVyaWNTZXF1ZW5jZSB8fCBpc0FscGhhU2VxdWVuY2U7XG4gICAgdmFyIGlzT3B0aW9ucyA9IG0uYm9keS5pbmRleE9mKCcsJykgPj0gMDtcbiAgICBpZiAoIWlzU2VxdWVuY2UgJiYgIWlzT3B0aW9ucykge1xuICAgICAgLy8ge2F9LGJ9XG4gICAgICBpZiAobS5wb3N0Lm1hdGNoKC8sLipcXH0vKSkge1xuICAgICAgICBzdHIgPSBtLnByZSArICd7JyArIG0uYm9keSArIGVzY0Nsb3NlICsgbS5wb3N0O1xuICAgICAgICByZXR1cm4gZXhwYW5kKHN0cik7XG4gICAgICB9XG4gICAgICByZXR1cm4gW3N0cl07XG4gICAgfVxuXG4gICAgdmFyIG47XG4gICAgaWYgKGlzU2VxdWVuY2UpIHtcbiAgICAgIG4gPSBtLmJvZHkuc3BsaXQoL1xcLlxcLi8pO1xuICAgIH0gZWxzZSB7XG4gICAgICBuID0gcGFyc2VDb21tYVBhcnRzKG0uYm9keSk7XG4gICAgICBpZiAobi5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgLy8geHt7YSxifX15ID09PiB4e2F9eSB4e2J9eVxuICAgICAgICBuID0gZXhwYW5kKG5bMF0sIGZhbHNlKS5tYXAoZW1icmFjZSk7XG4gICAgICAgIGlmIChuLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIHJldHVybiBwb3N0Lm1hcChmdW5jdGlvbihwKSB7XG4gICAgICAgICAgICByZXR1cm4gbS5wcmUgKyBuWzBdICsgcDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGF0IHRoaXMgcG9pbnQsIG4gaXMgdGhlIHBhcnRzLCBhbmQgd2Uga25vdyBpdCdzIG5vdCBhIGNvbW1hIHNldFxuICAgIC8vIHdpdGggYSBzaW5nbGUgZW50cnkuXG4gICAgdmFyIE47XG5cbiAgICBpZiAoaXNTZXF1ZW5jZSkge1xuICAgICAgdmFyIHggPSBudW1lcmljKG5bMF0pO1xuICAgICAgdmFyIHkgPSBudW1lcmljKG5bMV0pO1xuICAgICAgdmFyIHdpZHRoID0gTWF0aC5tYXgoblswXS5sZW5ndGgsIG5bMV0ubGVuZ3RoKVxuICAgICAgdmFyIGluY3IgPSBuLmxlbmd0aCA9PSAzXG4gICAgICAgID8gTWF0aC5hYnMobnVtZXJpYyhuWzJdKSlcbiAgICAgICAgOiAxO1xuICAgICAgdmFyIHRlc3QgPSBsdGU7XG4gICAgICB2YXIgcmV2ZXJzZSA9IHkgPCB4O1xuICAgICAgaWYgKHJldmVyc2UpIHtcbiAgICAgICAgaW5jciAqPSAtMTtcbiAgICAgICAgdGVzdCA9IGd0ZTtcbiAgICAgIH1cbiAgICAgIHZhciBwYWQgPSBuLnNvbWUoaXNQYWRkZWQpO1xuXG4gICAgICBOID0gW107XG5cbiAgICAgIGZvciAodmFyIGkgPSB4OyB0ZXN0KGksIHkpOyBpICs9IGluY3IpIHtcbiAgICAgICAgdmFyIGM7XG4gICAgICAgIGlmIChpc0FscGhhU2VxdWVuY2UpIHtcbiAgICAgICAgICBjID0gU3RyaW5nLmZyb21DaGFyQ29kZShpKTtcbiAgICAgICAgICBpZiAoYyA9PT0gJ1xcXFwnKVxuICAgICAgICAgICAgYyA9ICcnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGMgPSBTdHJpbmcoaSk7XG4gICAgICAgICAgaWYgKHBhZCkge1xuICAgICAgICAgICAgdmFyIG5lZWQgPSB3aWR0aCAtIGMubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKG5lZWQgPiAwKSB7XG4gICAgICAgICAgICAgIHZhciB6ID0gbmV3IEFycmF5KG5lZWQgKyAxKS5qb2luKCcwJyk7XG4gICAgICAgICAgICAgIGlmIChpIDwgMClcbiAgICAgICAgICAgICAgICBjID0gJy0nICsgeiArIGMuc2xpY2UoMSk7XG4gICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBjID0geiArIGM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIE4ucHVzaChjKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgTiA9IFtdO1xuXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG4ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgTi5wdXNoLmFwcGx5KE4sIGV4cGFuZChuW2pdLCBmYWxzZSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgTi5sZW5ndGg7IGorKykge1xuICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBwb3N0Lmxlbmd0aDsgaysrKSB7XG4gICAgICAgIHZhciBleHBhbnNpb24gPSBwcmUgKyBOW2pdICsgcG9zdFtrXTtcbiAgICAgICAgaWYgKCFpc1RvcCB8fCBpc1NlcXVlbmNlIHx8IGV4cGFuc2lvbilcbiAgICAgICAgICBleHBhbnNpb25zLnB1c2goZXhwYW5zaW9uKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXhwYW5zaW9ucztcbn1cblxuIiwKICAgICJjb25zdCBtaW5pbWF0Y2ggPSBtb2R1bGUuZXhwb3J0cyA9IChwLCBwYXR0ZXJuLCBvcHRpb25zID0ge30pID0+IHtcbiAgYXNzZXJ0VmFsaWRQYXR0ZXJuKHBhdHRlcm4pXG5cbiAgLy8gc2hvcnRjdXQ6IGNvbW1lbnRzIG1hdGNoIG5vdGhpbmcuXG4gIGlmICghb3B0aW9ucy5ub2NvbW1lbnQgJiYgcGF0dGVybi5jaGFyQXQoMCkgPT09ICcjJykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIG5ldyBNaW5pbWF0Y2gocGF0dGVybiwgb3B0aW9ucykubWF0Y2gocClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtaW5pbWF0Y2hcblxuY29uc3QgcGF0aCA9IHJlcXVpcmUoJy4vbGliL3BhdGguanMnKVxubWluaW1hdGNoLnNlcCA9IHBhdGguc2VwXG5cbmNvbnN0IEdMT0JTVEFSID0gU3ltYm9sKCdnbG9ic3RhciAqKicpXG5taW5pbWF0Y2guR0xPQlNUQVIgPSBHTE9CU1RBUlxuY29uc3QgZXhwYW5kID0gcmVxdWlyZSgnYnJhY2UtZXhwYW5zaW9uJylcblxuY29uc3QgcGxUeXBlcyA9IHtcbiAgJyEnOiB7IG9wZW46ICcoPzooPyEoPzonLCBjbG9zZTogJykpW14vXSo/KSd9LFxuICAnPyc6IHsgb3BlbjogJyg/OicsIGNsb3NlOiAnKT8nIH0sXG4gICcrJzogeyBvcGVuOiAnKD86JywgY2xvc2U6ICcpKycgfSxcbiAgJyonOiB7IG9wZW46ICcoPzonLCBjbG9zZTogJykqJyB9LFxuICAnQCc6IHsgb3BlbjogJyg/OicsIGNsb3NlOiAnKScgfVxufVxuXG4vLyBhbnkgc2luZ2xlIHRoaW5nIG90aGVyIHRoYW4gL1xuLy8gZG9uJ3QgbmVlZCB0byBlc2NhcGUgLyB3aGVuIHVzaW5nIG5ldyBSZWdFeHAoKVxuY29uc3QgcW1hcmsgPSAnW14vXSdcblxuLy8gKiA9PiBhbnkgbnVtYmVyIG9mIGNoYXJhY3RlcnNcbmNvbnN0IHN0YXIgPSBxbWFyayArICcqPydcblxuLy8gKiogd2hlbiBkb3RzIGFyZSBhbGxvd2VkLiAgQW55dGhpbmcgZ29lcywgZXhjZXB0IC4uIGFuZCAuXG4vLyBub3QgKF4gb3IgLyBmb2xsb3dlZCBieSBvbmUgb3IgdHdvIGRvdHMgZm9sbG93ZWQgYnkgJCBvciAvKSxcbi8vIGZvbGxvd2VkIGJ5IGFueXRoaW5nLCBhbnkgbnVtYmVyIG9mIHRpbWVzLlxuY29uc3QgdHdvU3RhckRvdCA9ICcoPzooPyEoPzpcXFxcXFwvfF4pKD86XFxcXC57MSwyfSkoJHxcXFxcXFwvKSkuKSo/J1xuXG4vLyBub3QgYSBeIG9yIC8gZm9sbG93ZWQgYnkgYSBkb3QsXG4vLyBmb2xsb3dlZCBieSBhbnl0aGluZywgYW55IG51bWJlciBvZiB0aW1lcy5cbmNvbnN0IHR3b1N0YXJOb0RvdCA9ICcoPzooPyEoPzpcXFxcXFwvfF4pXFxcXC4pLikqPydcblxuLy8gXCJhYmNcIiAtPiB7IGE6dHJ1ZSwgYjp0cnVlLCBjOnRydWUgfVxuY29uc3QgY2hhclNldCA9IHMgPT4gcy5zcGxpdCgnJykucmVkdWNlKChzZXQsIGMpID0+IHtcbiAgc2V0W2NdID0gdHJ1ZVxuICByZXR1cm4gc2V0XG59LCB7fSlcblxuLy8gY2hhcmFjdGVycyB0aGF0IG5lZWQgdG8gYmUgZXNjYXBlZCBpbiBSZWdFeHAuXG5jb25zdCByZVNwZWNpYWxzID0gY2hhclNldCgnKCkuKnt9Kz9bXV4kXFxcXCEnKVxuXG4vLyBjaGFyYWN0ZXJzIHRoYXQgaW5kaWNhdGUgd2UgaGF2ZSB0byBhZGQgdGhlIHBhdHRlcm4gc3RhcnRcbmNvbnN0IGFkZFBhdHRlcm5TdGFydFNldCA9IGNoYXJTZXQoJ1suKCcpXG5cbi8vIG5vcm1hbGl6ZXMgc2xhc2hlcy5cbmNvbnN0IHNsYXNoU3BsaXQgPSAvXFwvKy9cblxubWluaW1hdGNoLmZpbHRlciA9IChwYXR0ZXJuLCBvcHRpb25zID0ge30pID0+XG4gIChwLCBpLCBsaXN0KSA9PiBtaW5pbWF0Y2gocCwgcGF0dGVybiwgb3B0aW9ucylcblxuY29uc3QgZXh0ID0gKGEsIGIgPSB7fSkgPT4ge1xuICBjb25zdCB0ID0ge31cbiAgT2JqZWN0LmtleXMoYSkuZm9yRWFjaChrID0+IHRba10gPSBhW2tdKVxuICBPYmplY3Qua2V5cyhiKS5mb3JFYWNoKGsgPT4gdFtrXSA9IGJba10pXG4gIHJldHVybiB0XG59XG5cbm1pbmltYXRjaC5kZWZhdWx0cyA9IGRlZiA9PiB7XG4gIGlmICghZGVmIHx8IHR5cGVvZiBkZWYgIT09ICdvYmplY3QnIHx8ICFPYmplY3Qua2V5cyhkZWYpLmxlbmd0aCkge1xuICAgIHJldHVybiBtaW5pbWF0Y2hcbiAgfVxuXG4gIGNvbnN0IG9yaWcgPSBtaW5pbWF0Y2hcblxuICBjb25zdCBtID0gKHAsIHBhdHRlcm4sIG9wdGlvbnMpID0+IG9yaWcocCwgcGF0dGVybiwgZXh0KGRlZiwgb3B0aW9ucykpXG4gIG0uTWluaW1hdGNoID0gY2xhc3MgTWluaW1hdGNoIGV4dGVuZHMgb3JpZy5NaW5pbWF0Y2gge1xuICAgIGNvbnN0cnVjdG9yIChwYXR0ZXJuLCBvcHRpb25zKSB7XG4gICAgICBzdXBlcihwYXR0ZXJuLCBleHQoZGVmLCBvcHRpb25zKSlcbiAgICB9XG4gIH1cbiAgbS5NaW5pbWF0Y2guZGVmYXVsdHMgPSBvcHRpb25zID0+IG9yaWcuZGVmYXVsdHMoZXh0KGRlZiwgb3B0aW9ucykpLk1pbmltYXRjaFxuICBtLmZpbHRlciA9IChwYXR0ZXJuLCBvcHRpb25zKSA9PiBvcmlnLmZpbHRlcihwYXR0ZXJuLCBleHQoZGVmLCBvcHRpb25zKSlcbiAgbS5kZWZhdWx0cyA9IG9wdGlvbnMgPT4gb3JpZy5kZWZhdWx0cyhleHQoZGVmLCBvcHRpb25zKSlcbiAgbS5tYWtlUmUgPSAocGF0dGVybiwgb3B0aW9ucykgPT4gb3JpZy5tYWtlUmUocGF0dGVybiwgZXh0KGRlZiwgb3B0aW9ucykpXG4gIG0uYnJhY2VFeHBhbmQgPSAocGF0dGVybiwgb3B0aW9ucykgPT4gb3JpZy5icmFjZUV4cGFuZChwYXR0ZXJuLCBleHQoZGVmLCBvcHRpb25zKSlcbiAgbS5tYXRjaCA9IChsaXN0LCBwYXR0ZXJuLCBvcHRpb25zKSA9PiBvcmlnLm1hdGNoKGxpc3QsIHBhdHRlcm4sIGV4dChkZWYsIG9wdGlvbnMpKVxuXG4gIHJldHVybiBtXG59XG5cblxuXG5cblxuLy8gQnJhY2UgZXhwYW5zaW9uOlxuLy8gYXtiLGN9ZCAtPiBhYmQgYWNkXG4vLyBhe2IsfWMgLT4gYWJjIGFjXG4vLyBhezAuLjN9ZCAtPiBhMGQgYTFkIGEyZCBhM2Rcbi8vIGF7Yixje2QsZX1mfWcgLT4gYWJnIGFjZGZnIGFjZWZnXG4vLyBhe2IsY31ke2UsZn1nIC0+IGFiZGVnIGFjZGVnIGFiZGVnIGFiZGZnXG4vL1xuLy8gSW52YWxpZCBzZXRzIGFyZSBub3QgZXhwYW5kZWQuXG4vLyBhezIuLn1iIC0+IGF7Mi4ufWJcbi8vIGF7Yn1jIC0+IGF7Yn1jXG5taW5pbWF0Y2guYnJhY2VFeHBhbmQgPSAocGF0dGVybiwgb3B0aW9ucykgPT4gYnJhY2VFeHBhbmQocGF0dGVybiwgb3B0aW9ucylcblxuY29uc3QgYnJhY2VFeHBhbmQgPSAocGF0dGVybiwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gIGFzc2VydFZhbGlkUGF0dGVybihwYXR0ZXJuKVxuXG4gIC8vIFRoYW5rcyB0byBZZXRpbmcgTGkgPGh0dHBzOi8vZ2l0aHViLmNvbS95ZXRpbmdsaT4gZm9yXG4gIC8vIGltcHJvdmluZyB0aGlzIHJlZ2V4cCB0byBhdm9pZCBhIFJlRE9TIHZ1bG5lcmFiaWxpdHkuXG4gIGlmIChvcHRpb25zLm5vYnJhY2UgfHwgIS9cXHsoPzooPyFcXHspLikqXFx9Ly50ZXN0KHBhdHRlcm4pKSB7XG4gICAgLy8gc2hvcnRjdXQuIG5vIG5lZWQgdG8gZXhwYW5kLlxuICAgIHJldHVybiBbcGF0dGVybl1cbiAgfVxuXG4gIHJldHVybiBleHBhbmQocGF0dGVybilcbn1cblxuY29uc3QgTUFYX1BBVFRFUk5fTEVOR1RIID0gMTAyNCAqIDY0XG5jb25zdCBhc3NlcnRWYWxpZFBhdHRlcm4gPSBwYXR0ZXJuID0+IHtcbiAgaWYgKHR5cGVvZiBwYXR0ZXJuICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludmFsaWQgcGF0dGVybicpXG4gIH1cblxuICBpZiAocGF0dGVybi5sZW5ndGggPiBNQVhfUEFUVEVSTl9MRU5HVEgpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdwYXR0ZXJuIGlzIHRvbyBsb25nJylcbiAgfVxufVxuXG4vLyBwYXJzZSBhIGNvbXBvbmVudCBvZiB0aGUgZXhwYW5kZWQgc2V0LlxuLy8gQXQgdGhpcyBwb2ludCwgbm8gcGF0dGVybiBtYXkgY29udGFpbiBcIi9cIiBpbiBpdFxuLy8gc28gd2UncmUgZ29pbmcgdG8gcmV0dXJuIGEgMmQgYXJyYXksIHdoZXJlIGVhY2ggZW50cnkgaXMgdGhlIGZ1bGxcbi8vIHBhdHRlcm4sIHNwbGl0IG9uICcvJywgYW5kIHRoZW4gdHVybmVkIGludG8gYSByZWd1bGFyIGV4cHJlc3Npb24uXG4vLyBBIHJlZ2V4cCBpcyBtYWRlIGF0IHRoZSBlbmQgd2hpY2ggam9pbnMgZWFjaCBhcnJheSB3aXRoIGFuXG4vLyBlc2NhcGVkIC8sIGFuZCBhbm90aGVyIGZ1bGwgb25lIHdoaWNoIGpvaW5zIGVhY2ggcmVnZXhwIHdpdGggfC5cbi8vXG4vLyBGb2xsb3dpbmcgdGhlIGxlYWQgb2YgQmFzaCA0LjEsIG5vdGUgdGhhdCBcIioqXCIgb25seSBoYXMgc3BlY2lhbCBtZWFuaW5nXG4vLyB3aGVuIGl0IGlzIHRoZSAqb25seSogdGhpbmcgaW4gYSBwYXRoIHBvcnRpb24uICBPdGhlcndpc2UsIGFueSBzZXJpZXNcbi8vIG9mICogaXMgZXF1aXZhbGVudCB0byBhIHNpbmdsZSAqLiAgR2xvYnN0YXIgYmVoYXZpb3IgaXMgZW5hYmxlZCBieVxuLy8gZGVmYXVsdCwgYW5kIGNhbiBiZSBkaXNhYmxlZCBieSBzZXR0aW5nIG9wdGlvbnMubm9nbG9ic3Rhci5cbmNvbnN0IFNVQlBBUlNFID0gU3ltYm9sKCdzdWJwYXJzZScpXG5cbm1pbmltYXRjaC5tYWtlUmUgPSAocGF0dGVybiwgb3B0aW9ucykgPT5cbiAgbmV3IE1pbmltYXRjaChwYXR0ZXJuLCBvcHRpb25zIHx8IHt9KS5tYWtlUmUoKVxuXG5taW5pbWF0Y2gubWF0Y2ggPSAobGlzdCwgcGF0dGVybiwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IG1tID0gbmV3IE1pbmltYXRjaChwYXR0ZXJuLCBvcHRpb25zKVxuICBsaXN0ID0gbGlzdC5maWx0ZXIoZiA9PiBtbS5tYXRjaChmKSlcbiAgaWYgKG1tLm9wdGlvbnMubm9udWxsICYmICFsaXN0Lmxlbmd0aCkge1xuICAgIGxpc3QucHVzaChwYXR0ZXJuKVxuICB9XG4gIHJldHVybiBsaXN0XG59XG5cbi8vIHJlcGxhY2Ugc3R1ZmYgbGlrZSBcXCogd2l0aCAqXG5jb25zdCBnbG9iVW5lc2NhcGUgPSBzID0+IHMucmVwbGFjZSgvXFxcXCguKS9nLCAnJDEnKVxuY29uc3QgY2hhclVuZXNjYXBlID0gcyA9PiBzLnJlcGxhY2UoL1xcXFwoW14tXFxdXSkvZywgJyQxJylcbmNvbnN0IHJlZ0V4cEVzY2FwZSA9IHMgPT4gcy5yZXBsYWNlKC9bLVtcXF17fSgpKis/LixcXFxcXiR8I1xcc10vZywgJ1xcXFwkJicpXG5jb25zdCBicmFFeHBFc2NhcGUgPSBzID0+IHMucmVwbGFjZSgvW1tcXF1cXFxcXS9nLCAnXFxcXCQmJylcblxuY2xhc3MgTWluaW1hdGNoIHtcbiAgY29uc3RydWN0b3IgKHBhdHRlcm4sIG9wdGlvbnMpIHtcbiAgICBhc3NlcnRWYWxpZFBhdHRlcm4ocGF0dGVybilcblxuICAgIGlmICghb3B0aW9ucykgb3B0aW9ucyA9IHt9XG5cbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zXG4gICAgdGhpcy5zZXQgPSBbXVxuICAgIHRoaXMucGF0dGVybiA9IHBhdHRlcm5cbiAgICB0aGlzLndpbmRvd3NQYXRoc05vRXNjYXBlID0gISFvcHRpb25zLndpbmRvd3NQYXRoc05vRXNjYXBlIHx8XG4gICAgICBvcHRpb25zLmFsbG93V2luZG93c0VzY2FwZSA9PT0gZmFsc2VcbiAgICBpZiAodGhpcy53aW5kb3dzUGF0aHNOb0VzY2FwZSkge1xuICAgICAgdGhpcy5wYXR0ZXJuID0gdGhpcy5wYXR0ZXJuLnJlcGxhY2UoL1xcXFwvZywgJy8nKVxuICAgIH1cbiAgICB0aGlzLnJlZ2V4cCA9IG51bGxcbiAgICB0aGlzLm5lZ2F0ZSA9IGZhbHNlXG4gICAgdGhpcy5jb21tZW50ID0gZmFsc2VcbiAgICB0aGlzLmVtcHR5ID0gZmFsc2VcbiAgICB0aGlzLnBhcnRpYWwgPSAhIW9wdGlvbnMucGFydGlhbFxuXG4gICAgLy8gbWFrZSB0aGUgc2V0IG9mIHJlZ2V4cHMgZXRjLlxuICAgIHRoaXMubWFrZSgpXG4gIH1cblxuICBkZWJ1ZyAoKSB7fVxuXG4gIG1ha2UgKCkge1xuICAgIGNvbnN0IHBhdHRlcm4gPSB0aGlzLnBhdHRlcm5cbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zXG5cbiAgICAvLyBlbXB0eSBwYXR0ZXJucyBhbmQgY29tbWVudHMgbWF0Y2ggbm90aGluZy5cbiAgICBpZiAoIW9wdGlvbnMubm9jb21tZW50ICYmIHBhdHRlcm4uY2hhckF0KDApID09PSAnIycpIHtcbiAgICAgIHRoaXMuY29tbWVudCA9IHRydWVcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoIXBhdHRlcm4pIHtcbiAgICAgIHRoaXMuZW1wdHkgPSB0cnVlXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBzdGVwIDE6IGZpZ3VyZSBvdXQgbmVnYXRpb24sIGV0Yy5cbiAgICB0aGlzLnBhcnNlTmVnYXRlKClcblxuICAgIC8vIHN0ZXAgMjogZXhwYW5kIGJyYWNlc1xuICAgIGxldCBzZXQgPSB0aGlzLmdsb2JTZXQgPSB0aGlzLmJyYWNlRXhwYW5kKClcblxuICAgIGlmIChvcHRpb25zLmRlYnVnKSB0aGlzLmRlYnVnID0gKC4uLmFyZ3MpID0+IGNvbnNvbGUuZXJyb3IoLi4uYXJncylcblxuICAgIHRoaXMuZGVidWcodGhpcy5wYXR0ZXJuLCBzZXQpXG5cbiAgICAvLyBzdGVwIDM6IG5vdyB3ZSBoYXZlIGEgc2V0LCBzbyB0dXJuIGVhY2ggb25lIGludG8gYSBzZXJpZXMgb2YgcGF0aC1wb3J0aW9uXG4gICAgLy8gbWF0Y2hpbmcgcGF0dGVybnMuXG4gICAgLy8gVGhlc2Ugd2lsbCBiZSByZWdleHBzLCBleGNlcHQgaW4gdGhlIGNhc2Ugb2YgXCIqKlwiLCB3aGljaCBpc1xuICAgIC8vIHNldCB0byB0aGUgR0xPQlNUQVIgb2JqZWN0IGZvciBnbG9ic3RhciBiZWhhdmlvcixcbiAgICAvLyBhbmQgd2lsbCBub3QgY29udGFpbiBhbnkgLyBjaGFyYWN0ZXJzXG4gICAgc2V0ID0gdGhpcy5nbG9iUGFydHMgPSBzZXQubWFwKHMgPT4gcy5zcGxpdChzbGFzaFNwbGl0KSlcblxuICAgIHRoaXMuZGVidWcodGhpcy5wYXR0ZXJuLCBzZXQpXG5cbiAgICAvLyBnbG9iIC0tPiByZWdleHBzXG4gICAgc2V0ID0gc2V0Lm1hcCgocywgc2ksIHNldCkgPT4gcy5tYXAodGhpcy5wYXJzZSwgdGhpcykpXG5cbiAgICB0aGlzLmRlYnVnKHRoaXMucGF0dGVybiwgc2V0KVxuXG4gICAgLy8gZmlsdGVyIG91dCBldmVyeXRoaW5nIHRoYXQgZGlkbid0IGNvbXBpbGUgcHJvcGVybHkuXG4gICAgc2V0ID0gc2V0LmZpbHRlcihzID0+IHMuaW5kZXhPZihmYWxzZSkgPT09IC0xKVxuXG4gICAgdGhpcy5kZWJ1Zyh0aGlzLnBhdHRlcm4sIHNldClcblxuICAgIHRoaXMuc2V0ID0gc2V0XG4gIH1cblxuICBwYXJzZU5lZ2F0ZSAoKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5ub25lZ2F0ZSkgcmV0dXJuXG5cbiAgICBjb25zdCBwYXR0ZXJuID0gdGhpcy5wYXR0ZXJuXG4gICAgbGV0IG5lZ2F0ZSA9IGZhbHNlXG4gICAgbGV0IG5lZ2F0ZU9mZnNldCA9IDBcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0dGVybi5sZW5ndGggJiYgcGF0dGVybi5jaGFyQXQoaSkgPT09ICchJzsgaSsrKSB7XG4gICAgICBuZWdhdGUgPSAhbmVnYXRlXG4gICAgICBuZWdhdGVPZmZzZXQrK1xuICAgIH1cblxuICAgIGlmIChuZWdhdGVPZmZzZXQpIHRoaXMucGF0dGVybiA9IHBhdHRlcm4uc2xpY2UobmVnYXRlT2Zmc2V0KVxuICAgIHRoaXMubmVnYXRlID0gbmVnYXRlXG4gIH1cblxuICAvLyBzZXQgcGFydGlhbCB0byB0cnVlIHRvIHRlc3QgaWYsIGZvciBleGFtcGxlLFxuICAvLyBcIi9hL2JcIiBtYXRjaGVzIHRoZSBzdGFydCBvZiBcIi8qL2IvKi9kXCJcbiAgLy8gUGFydGlhbCBtZWFucywgaWYgeW91IHJ1biBvdXQgb2YgZmlsZSBiZWZvcmUgeW91IHJ1blxuICAvLyBvdXQgb2YgcGF0dGVybiwgdGhlbiB0aGF0J3MgZmluZSwgYXMgbG9uZyBhcyBhbGxcbiAgLy8gdGhlIHBhcnRzIG1hdGNoLlxuICBtYXRjaE9uZSAoZmlsZSwgcGF0dGVybiwgcGFydGlhbCkge1xuICAgIHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zXG5cbiAgICB0aGlzLmRlYnVnKCdtYXRjaE9uZScsXG4gICAgICB7ICd0aGlzJzogdGhpcywgZmlsZTogZmlsZSwgcGF0dGVybjogcGF0dGVybiB9KVxuXG4gICAgdGhpcy5kZWJ1ZygnbWF0Y2hPbmUnLCBmaWxlLmxlbmd0aCwgcGF0dGVybi5sZW5ndGgpXG5cbiAgICBmb3IgKHZhciBmaSA9IDAsXG4gICAgICAgIHBpID0gMCxcbiAgICAgICAgZmwgPSBmaWxlLmxlbmd0aCxcbiAgICAgICAgcGwgPSBwYXR0ZXJuLmxlbmd0aFxuICAgICAgICA7IChmaSA8IGZsKSAmJiAocGkgPCBwbClcbiAgICAgICAgOyBmaSsrLCBwaSsrKSB7XG4gICAgICB0aGlzLmRlYnVnKCdtYXRjaE9uZSBsb29wJylcbiAgICAgIHZhciBwID0gcGF0dGVybltwaV1cbiAgICAgIHZhciBmID0gZmlsZVtmaV1cblxuICAgICAgdGhpcy5kZWJ1ZyhwYXR0ZXJuLCBwLCBmKVxuXG4gICAgICAvLyBzaG91bGQgYmUgaW1wb3NzaWJsZS5cbiAgICAgIC8vIHNvbWUgaW52YWxpZCByZWdleHAgc3R1ZmYgaW4gdGhlIHNldC5cbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKHAgPT09IGZhbHNlKSByZXR1cm4gZmFsc2VcblxuICAgICAgaWYgKHAgPT09IEdMT0JTVEFSKSB7XG4gICAgICAgIHRoaXMuZGVidWcoJ0dMT0JTVEFSJywgW3BhdHRlcm4sIHAsIGZdKVxuXG4gICAgICAgIC8vIFwiKipcIlxuICAgICAgICAvLyBhLyoqL2IvKiovYyB3b3VsZCBtYXRjaCB0aGUgZm9sbG93aW5nOlxuICAgICAgICAvLyBhL2IveC95L3ovY1xuICAgICAgICAvLyBhL3gveS96L2IvY1xuICAgICAgICAvLyBhL2IveC9iL3gvY1xuICAgICAgICAvLyBhL2IvY1xuICAgICAgICAvLyBUbyBkbyB0aGlzLCB0YWtlIHRoZSByZXN0IG9mIHRoZSBwYXR0ZXJuIGFmdGVyXG4gICAgICAgIC8vIHRoZSAqKiwgYW5kIHNlZSBpZiBpdCB3b3VsZCBtYXRjaCB0aGUgZmlsZSByZW1haW5kZXIuXG4gICAgICAgIC8vIElmIHNvLCByZXR1cm4gc3VjY2Vzcy5cbiAgICAgICAgLy8gSWYgbm90LCB0aGUgKiogXCJzd2FsbG93c1wiIGEgc2VnbWVudCwgYW5kIHRyeSBhZ2Fpbi5cbiAgICAgICAgLy8gVGhpcyBpcyByZWN1cnNpdmVseSBhd2Z1bC5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gYS8qKi9iLyoqL2MgbWF0Y2hpbmcgYS9iL3gveS96L2NcbiAgICAgICAgLy8gLSBhIG1hdGNoZXMgYVxuICAgICAgICAvLyAtIGRvdWJsZXN0YXJcbiAgICAgICAgLy8gICAtIG1hdGNoT25lKGIveC95L3ovYywgYi8qKi9jKVxuICAgICAgICAvLyAgICAgLSBiIG1hdGNoZXMgYlxuICAgICAgICAvLyAgICAgLSBkb3VibGVzdGFyXG4gICAgICAgIC8vICAgICAgIC0gbWF0Y2hPbmUoeC95L3ovYywgYykgLT4gbm9cbiAgICAgICAgLy8gICAgICAgLSBtYXRjaE9uZSh5L3ovYywgYykgLT4gbm9cbiAgICAgICAgLy8gICAgICAgLSBtYXRjaE9uZSh6L2MsIGMpIC0+IG5vXG4gICAgICAgIC8vICAgICAgIC0gbWF0Y2hPbmUoYywgYykgeWVzLCBoaXRcbiAgICAgICAgdmFyIGZyID0gZmlcbiAgICAgICAgdmFyIHByID0gcGkgKyAxXG4gICAgICAgIGlmIChwciA9PT0gcGwpIHtcbiAgICAgICAgICB0aGlzLmRlYnVnKCcqKiBhdCB0aGUgZW5kJylcbiAgICAgICAgICAvLyBhICoqIGF0IHRoZSBlbmQgd2lsbCBqdXN0IHN3YWxsb3cgdGhlIHJlc3QuXG4gICAgICAgICAgLy8gV2UgaGF2ZSBmb3VuZCBhIG1hdGNoLlxuICAgICAgICAgIC8vIGhvd2V2ZXIsIGl0IHdpbGwgbm90IHN3YWxsb3cgLy54LCB1bmxlc3NcbiAgICAgICAgICAvLyBvcHRpb25zLmRvdCBpcyBzZXQuXG4gICAgICAgICAgLy8gLiBhbmQgLi4gYXJlICpuZXZlciogbWF0Y2hlZCBieSAqKiwgZm9yIGV4cGxvc2l2ZWx5XG4gICAgICAgICAgLy8gZXhwb25lbnRpYWwgcmVhc29ucy5cbiAgICAgICAgICBmb3IgKDsgZmkgPCBmbDsgZmkrKykge1xuICAgICAgICAgICAgaWYgKGZpbGVbZmldID09PSAnLicgfHwgZmlsZVtmaV0gPT09ICcuLicgfHxcbiAgICAgICAgICAgICAgKCFvcHRpb25zLmRvdCAmJiBmaWxlW2ZpXS5jaGFyQXQoMCkgPT09ICcuJykpIHJldHVybiBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gb2ssIGxldCdzIHNlZSBpZiB3ZSBjYW4gc3dhbGxvdyB3aGF0ZXZlciB3ZSBjYW4uXG4gICAgICAgIHdoaWxlIChmciA8IGZsKSB7XG4gICAgICAgICAgdmFyIHN3YWxsb3dlZSA9IGZpbGVbZnJdXG5cbiAgICAgICAgICB0aGlzLmRlYnVnKCdcXG5nbG9ic3RhciB3aGlsZScsIGZpbGUsIGZyLCBwYXR0ZXJuLCBwciwgc3dhbGxvd2VlKVxuXG4gICAgICAgICAgLy8gWFhYIHJlbW92ZSB0aGlzIHNsaWNlLiAgSnVzdCBwYXNzIHRoZSBzdGFydCBpbmRleC5cbiAgICAgICAgICBpZiAodGhpcy5tYXRjaE9uZShmaWxlLnNsaWNlKGZyKSwgcGF0dGVybi5zbGljZShwciksIHBhcnRpYWwpKSB7XG4gICAgICAgICAgICB0aGlzLmRlYnVnKCdnbG9ic3RhciBmb3VuZCBtYXRjaCEnLCBmciwgZmwsIHN3YWxsb3dlZSlcbiAgICAgICAgICAgIC8vIGZvdW5kIGEgbWF0Y2guXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBjYW4ndCBzd2FsbG93IFwiLlwiIG9yIFwiLi5cIiBldmVyLlxuICAgICAgICAgICAgLy8gY2FuIG9ubHkgc3dhbGxvdyBcIi5mb29cIiB3aGVuIGV4cGxpY2l0bHkgYXNrZWQuXG4gICAgICAgICAgICBpZiAoc3dhbGxvd2VlID09PSAnLicgfHwgc3dhbGxvd2VlID09PSAnLi4nIHx8XG4gICAgICAgICAgICAgICghb3B0aW9ucy5kb3QgJiYgc3dhbGxvd2VlLmNoYXJBdCgwKSA9PT0gJy4nKSkge1xuICAgICAgICAgICAgICB0aGlzLmRlYnVnKCdkb3QgZGV0ZWN0ZWQhJywgZmlsZSwgZnIsIHBhdHRlcm4sIHByKVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyAqKiBzd2FsbG93cyBhIHNlZ21lbnQsIGFuZCBjb250aW51ZS5cbiAgICAgICAgICAgIHRoaXMuZGVidWcoJ2dsb2JzdGFyIHN3YWxsb3cgYSBzZWdtZW50LCBhbmQgY29udGludWUnKVxuICAgICAgICAgICAgZnIrK1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG5vIG1hdGNoIHdhcyBmb3VuZC5cbiAgICAgICAgLy8gSG93ZXZlciwgaW4gcGFydGlhbCBtb2RlLCB3ZSBjYW4ndCBzYXkgdGhpcyBpcyBuZWNlc3NhcmlseSBvdmVyLlxuICAgICAgICAvLyBJZiB0aGVyZSdzIG1vcmUgKnBhdHRlcm4qIGxlZnQsIHRoZW5cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmIChwYXJ0aWFsKSB7XG4gICAgICAgICAgLy8gcmFuIG91dCBvZiBmaWxlXG4gICAgICAgICAgdGhpcy5kZWJ1ZygnXFxuPj4+IG5vIG1hdGNoLCBwYXJ0aWFsPycsIGZpbGUsIGZyLCBwYXR0ZXJuLCBwcilcbiAgICAgICAgICBpZiAoZnIgPT09IGZsKSByZXR1cm4gdHJ1ZVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuXG4gICAgICAvLyBzb21ldGhpbmcgb3RoZXIgdGhhbiAqKlxuICAgICAgLy8gbm9uLW1hZ2ljIHBhdHRlcm5zIGp1c3QgaGF2ZSB0byBtYXRjaCBleGFjdGx5XG4gICAgICAvLyBwYXR0ZXJucyB3aXRoIG1hZ2ljIGhhdmUgYmVlbiB0dXJuZWQgaW50byByZWdleHBzLlxuICAgICAgdmFyIGhpdFxuICAgICAgaWYgKHR5cGVvZiBwID09PSAnc3RyaW5nJykge1xuICAgICAgICBoaXQgPSBmID09PSBwXG4gICAgICAgIHRoaXMuZGVidWcoJ3N0cmluZyBtYXRjaCcsIHAsIGYsIGhpdClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhpdCA9IGYubWF0Y2gocClcbiAgICAgICAgdGhpcy5kZWJ1ZygncGF0dGVybiBtYXRjaCcsIHAsIGYsIGhpdClcbiAgICAgIH1cblxuICAgICAgaWYgKCFoaXQpIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIC8vIE5vdGU6IGVuZGluZyBpbiAvIG1lYW5zIHRoYXQgd2UnbGwgZ2V0IGEgZmluYWwgXCJcIlxuICAgIC8vIGF0IHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4uICBUaGlzIGNhbiBvbmx5IG1hdGNoIGFcbiAgICAvLyBjb3JyZXNwb25kaW5nIFwiXCIgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZS5cbiAgICAvLyBJZiB0aGUgZmlsZSBlbmRzIGluIC8sIHRoZW4gaXQgY2FuIG9ubHkgbWF0Y2ggYVxuICAgIC8vIGEgcGF0dGVybiB0aGF0IGVuZHMgaW4gLywgdW5sZXNzIHRoZSBwYXR0ZXJuIGp1c3RcbiAgICAvLyBkb2Vzbid0IGhhdmUgYW55IG1vcmUgZm9yIGl0LiBCdXQsIGEvYi8gc2hvdWxkICpub3QqXG4gICAgLy8gbWF0Y2ggXCJhL2IvKlwiLCBldmVuIHRob3VnaCBcIlwiIG1hdGNoZXMgYWdhaW5zdCB0aGVcbiAgICAvLyBbXi9dKj8gcGF0dGVybiwgZXhjZXB0IGluIHBhcnRpYWwgbW9kZSwgd2hlcmUgaXQgbWlnaHRcbiAgICAvLyBzaW1wbHkgbm90IGJlIHJlYWNoZWQgeWV0LlxuICAgIC8vIEhvd2V2ZXIsIGEvYi8gc2hvdWxkIHN0aWxsIHNhdGlzZnkgYS8qXG5cbiAgICAvLyBub3cgZWl0aGVyIHdlIGZlbGwgb2ZmIHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4sIG9yIHdlJ3JlIGRvbmUuXG4gICAgaWYgKGZpID09PSBmbCAmJiBwaSA9PT0gcGwpIHtcbiAgICAgIC8vIHJhbiBvdXQgb2YgcGF0dGVybiBhbmQgZmlsZW5hbWUgYXQgdGhlIHNhbWUgdGltZS5cbiAgICAgIC8vIGFuIGV4YWN0IGhpdCFcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSBlbHNlIGlmIChmaSA9PT0gZmwpIHtcbiAgICAgIC8vIHJhbiBvdXQgb2YgZmlsZSwgYnV0IHN0aWxsIGhhZCBwYXR0ZXJuIGxlZnQuXG4gICAgICAvLyB0aGlzIGlzIG9rIGlmIHdlJ3JlIGRvaW5nIHRoZSBtYXRjaCBhcyBwYXJ0IG9mXG4gICAgICAvLyBhIGdsb2IgZnMgdHJhdmVyc2FsLlxuICAgICAgcmV0dXJuIHBhcnRpYWxcbiAgICB9IGVsc2UgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi8gaWYgKHBpID09PSBwbCkge1xuICAgICAgLy8gcmFuIG91dCBvZiBwYXR0ZXJuLCBzdGlsbCBoYXZlIGZpbGUgbGVmdC5cbiAgICAgIC8vIHRoaXMgaXMgb25seSBhY2NlcHRhYmxlIGlmIHdlJ3JlIG9uIHRoZSB2ZXJ5IGxhc3RcbiAgICAgIC8vIGVtcHR5IHNlZ21lbnQgb2YgYSBmaWxlIHdpdGggYSB0cmFpbGluZyBzbGFzaC5cbiAgICAgIC8vIGEvKiBzaG91bGQgbWF0Y2ggYS9iL1xuICAgICAgcmV0dXJuIChmaSA9PT0gZmwgLSAxKSAmJiAoZmlsZVtmaV0gPT09ICcnKVxuICAgIH1cblxuICAgIC8vIHNob3VsZCBiZSB1bnJlYWNoYWJsZS5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHRocm93IG5ldyBFcnJvcignd3RmPycpXG4gIH1cblxuICBicmFjZUV4cGFuZCAoKSB7XG4gICAgcmV0dXJuIGJyYWNlRXhwYW5kKHRoaXMucGF0dGVybiwgdGhpcy5vcHRpb25zKVxuICB9XG5cbiAgcGFyc2UgKHBhdHRlcm4sIGlzU3ViKSB7XG4gICAgYXNzZXJ0VmFsaWRQYXR0ZXJuKHBhdHRlcm4pXG5cbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zXG5cbiAgICAvLyBzaG9ydGN1dHNcbiAgICBpZiAocGF0dGVybiA9PT0gJyoqJykge1xuICAgICAgaWYgKCFvcHRpb25zLm5vZ2xvYnN0YXIpXG4gICAgICAgIHJldHVybiBHTE9CU1RBUlxuICAgICAgZWxzZVxuICAgICAgICBwYXR0ZXJuID0gJyonXG4gICAgfVxuICAgIGlmIChwYXR0ZXJuID09PSAnJykgcmV0dXJuICcnXG5cbiAgICBsZXQgcmUgPSAnJ1xuICAgIGxldCBoYXNNYWdpYyA9IGZhbHNlXG4gICAgbGV0IGVzY2FwaW5nID0gZmFsc2VcbiAgICAvLyA/ID0+IG9uZSBzaW5nbGUgY2hhcmFjdGVyXG4gICAgY29uc3QgcGF0dGVybkxpc3RTdGFjayA9IFtdXG4gICAgY29uc3QgbmVnYXRpdmVMaXN0cyA9IFtdXG4gICAgbGV0IHN0YXRlQ2hhclxuICAgIGxldCBpbkNsYXNzID0gZmFsc2VcbiAgICBsZXQgcmVDbGFzc1N0YXJ0ID0gLTFcbiAgICBsZXQgY2xhc3NTdGFydCA9IC0xXG4gICAgbGV0IGNzXG4gICAgbGV0IHBsXG4gICAgbGV0IHNwXG4gICAgLy8gLiBhbmQgLi4gbmV2ZXIgbWF0Y2ggYW55dGhpbmcgdGhhdCBkb2Vzbid0IHN0YXJ0IHdpdGggLixcbiAgICAvLyBldmVuIHdoZW4gb3B0aW9ucy5kb3QgaXMgc2V0LiAgSG93ZXZlciwgaWYgdGhlIHBhdHRlcm5cbiAgICAvLyBzdGFydHMgd2l0aCAuLCB0aGVuIHRyYXZlcnNhbCBwYXR0ZXJucyBjYW4gbWF0Y2guXG4gICAgbGV0IGRvdFRyYXZBbGxvd2VkID0gcGF0dGVybi5jaGFyQXQoMCkgPT09ICcuJ1xuICAgIGxldCBkb3RGaWxlQWxsb3dlZCA9IG9wdGlvbnMuZG90IHx8IGRvdFRyYXZBbGxvd2VkXG4gICAgY29uc3QgcGF0dGVyblN0YXJ0ID0gKCkgPT5cbiAgICAgIGRvdFRyYXZBbGxvd2VkXG4gICAgICAgID8gJydcbiAgICAgICAgOiBkb3RGaWxlQWxsb3dlZFxuICAgICAgICA/ICcoPyEoPzpefFxcXFwvKVxcXFwuezEsMn0oPzokfFxcXFwvKSknXG4gICAgICAgIDogJyg/IVxcXFwuKSdcbiAgICBjb25zdCBzdWJQYXR0ZXJuU3RhcnQgPSAocCkgPT5cbiAgICAgIHAuY2hhckF0KDApID09PSAnLidcbiAgICAgICAgPyAnJ1xuICAgICAgICA6IG9wdGlvbnMuZG90XG4gICAgICAgID8gJyg/ISg/Ol58XFxcXC8pXFxcXC57MSwyfSg/OiR8XFxcXC8pKSdcbiAgICAgICAgOiAnKD8hXFxcXC4pJ1xuXG5cbiAgICBjb25zdCBjbGVhclN0YXRlQ2hhciA9ICgpID0+IHtcbiAgICAgIGlmIChzdGF0ZUNoYXIpIHtcbiAgICAgICAgLy8gd2UgaGFkIHNvbWUgc3RhdGUtdHJhY2tpbmcgY2hhcmFjdGVyXG4gICAgICAgIC8vIHRoYXQgd2Fzbid0IGNvbnN1bWVkIGJ5IHRoaXMgcGFzcy5cbiAgICAgICAgc3dpdGNoIChzdGF0ZUNoYXIpIHtcbiAgICAgICAgICBjYXNlICcqJzpcbiAgICAgICAgICAgIHJlICs9IHN0YXJcbiAgICAgICAgICAgIGhhc01hZ2ljID0gdHJ1ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSAnPyc6XG4gICAgICAgICAgICByZSArPSBxbWFya1xuICAgICAgICAgICAgaGFzTWFnaWMgPSB0cnVlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmUgKz0gJ1xcXFwnICsgc3RhdGVDaGFyXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRlYnVnKCdjbGVhclN0YXRlQ2hhciAlaiAlaicsIHN0YXRlQ2hhciwgcmUpXG4gICAgICAgIHN0YXRlQ2hhciA9IGZhbHNlXG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDAsIGM7IChpIDwgcGF0dGVybi5sZW5ndGgpICYmIChjID0gcGF0dGVybi5jaGFyQXQoaSkpOyBpKyspIHtcbiAgICAgIHRoaXMuZGVidWcoJyVzXFx0JXMgJXMgJWonLCBwYXR0ZXJuLCBpLCByZSwgYylcblxuICAgICAgLy8gc2tpcCBvdmVyIGFueSB0aGF0IGFyZSBlc2NhcGVkLlxuICAgICAgaWYgKGVzY2FwaW5nKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0IC0gY29tcGxldGVseSBub3QgYWxsb3dlZCwgZXZlbiBlc2NhcGVkLiAqL1xuICAgICAgICBpZiAoYyA9PT0gJy8nKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVTcGVjaWFsc1tjXSkge1xuICAgICAgICAgIHJlICs9ICdcXFxcJ1xuICAgICAgICB9XG4gICAgICAgIHJlICs9IGNcbiAgICAgICAgZXNjYXBpbmcgPSBmYWxzZVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGMpIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgY2FzZSAnLyc6IHtcbiAgICAgICAgICAvLyBTaG91bGQgYWxyZWFkeSBiZSBwYXRoLXNwbGl0IGJ5IG5vdy5cbiAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgJ1xcXFwnOlxuICAgICAgICAgIGlmIChpbkNsYXNzICYmIHBhdHRlcm4uY2hhckF0KGkgKyAxKSA9PT0gJy0nKSB7XG4gICAgICAgICAgICByZSArPSBjXG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNsZWFyU3RhdGVDaGFyKClcbiAgICAgICAgICBlc2NhcGluZyA9IHRydWVcbiAgICAgICAgY29udGludWVcblxuICAgICAgICAvLyB0aGUgdmFyaW91cyBzdGF0ZUNoYXIgdmFsdWVzXG4gICAgICAgIC8vIGZvciB0aGUgXCJleHRnbG9iXCIgc3R1ZmYuXG4gICAgICAgIGNhc2UgJz8nOlxuICAgICAgICBjYXNlICcqJzpcbiAgICAgICAgY2FzZSAnKyc6XG4gICAgICAgIGNhc2UgJ0AnOlxuICAgICAgICBjYXNlICchJzpcbiAgICAgICAgICB0aGlzLmRlYnVnKCclc1xcdCVzICVzICVqIDwtLSBzdGF0ZUNoYXInLCBwYXR0ZXJuLCBpLCByZSwgYylcblxuICAgICAgICAgIC8vIGFsbCBvZiB0aG9zZSBhcmUgbGl0ZXJhbHMgaW5zaWRlIGEgY2xhc3MsIGV4Y2VwdCB0aGF0XG4gICAgICAgICAgLy8gdGhlIGdsb2IgWyFhXSBtZWFucyBbXmFdIGluIHJlZ2V4cFxuICAgICAgICAgIGlmIChpbkNsYXNzKSB7XG4gICAgICAgICAgICB0aGlzLmRlYnVnKCcgIGluIGNsYXNzJylcbiAgICAgICAgICAgIGlmIChjID09PSAnIScgJiYgaSA9PT0gY2xhc3NTdGFydCArIDEpIGMgPSAnXidcbiAgICAgICAgICAgIHJlICs9IGNcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gaWYgd2UgYWxyZWFkeSBoYXZlIGEgc3RhdGVDaGFyLCB0aGVuIGl0IG1lYW5zXG4gICAgICAgICAgLy8gdGhhdCB0aGVyZSB3YXMgc29tZXRoaW5nIGxpa2UgKiogb3IgKz8gaW4gdGhlcmUuXG4gICAgICAgICAgLy8gSGFuZGxlIHRoZSBzdGF0ZUNoYXIsIHRoZW4gcHJvY2VlZCB3aXRoIHRoaXMgb25lLlxuICAgICAgICAgIHRoaXMuZGVidWcoJ2NhbGwgY2xlYXJTdGF0ZUNoYXIgJWonLCBzdGF0ZUNoYXIpXG4gICAgICAgICAgY2xlYXJTdGF0ZUNoYXIoKVxuICAgICAgICAgIHN0YXRlQ2hhciA9IGNcbiAgICAgICAgICAvLyBpZiBleHRnbG9iIGlzIGRpc2FibGVkLCB0aGVuICsoYXNkZnxmb28pIGlzbid0IGEgdGhpbmcuXG4gICAgICAgICAgLy8ganVzdCBjbGVhciB0aGUgc3RhdGVjaGFyICpub3cqLCByYXRoZXIgdGhhbiBldmVuIGRpdmluZyBpbnRvXG4gICAgICAgICAgLy8gdGhlIHBhdHRlcm5MaXN0IHN0dWZmLlxuICAgICAgICAgIGlmIChvcHRpb25zLm5vZXh0KSBjbGVhclN0YXRlQ2hhcigpXG4gICAgICAgIGNvbnRpbnVlXG5cbiAgICAgICAgY2FzZSAnKCc6IHtcbiAgICAgICAgICBpZiAoaW5DbGFzcykge1xuICAgICAgICAgICAgcmUgKz0gJygnXG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghc3RhdGVDaGFyKSB7XG4gICAgICAgICAgICByZSArPSAnXFxcXCgnXG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHBsRW50cnkgPSB7XG4gICAgICAgICAgICB0eXBlOiBzdGF0ZUNoYXIsXG4gICAgICAgICAgICBzdGFydDogaSAtIDEsXG4gICAgICAgICAgICByZVN0YXJ0OiByZS5sZW5ndGgsXG4gICAgICAgICAgICBvcGVuOiBwbFR5cGVzW3N0YXRlQ2hhcl0ub3BlbixcbiAgICAgICAgICAgIGNsb3NlOiBwbFR5cGVzW3N0YXRlQ2hhcl0uY2xvc2UsXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZGVidWcodGhpcy5wYXR0ZXJuLCAnXFx0JywgcGxFbnRyeSlcbiAgICAgICAgICBwYXR0ZXJuTGlzdFN0YWNrLnB1c2gocGxFbnRyeSlcbiAgICAgICAgICAvLyBuZWdhdGlvbiBpcyAoPzooPyEoPzpqcykoPzo8cmVzdD4pKVteL10qKVxuICAgICAgICAgIHJlICs9IHBsRW50cnkub3BlblxuICAgICAgICAgIC8vIG5leHQgZW50cnkgc3RhcnRzIHdpdGggYSBkb3QgbWF5YmU/XG4gICAgICAgICAgaWYgKHBsRW50cnkuc3RhcnQgPT09IDAgJiYgcGxFbnRyeS50eXBlICE9PSAnIScpIHtcbiAgICAgICAgICAgIGRvdFRyYXZBbGxvd2VkID0gdHJ1ZVxuICAgICAgICAgICAgcmUgKz0gc3ViUGF0dGVyblN0YXJ0KHBhdHRlcm4uc2xpY2UoaSArIDEpKVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmRlYnVnKCdwbFR5cGUgJWogJWonLCBzdGF0ZUNoYXIsIHJlKVxuICAgICAgICAgIHN0YXRlQ2hhciA9IGZhbHNlXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgJyknOiB7XG4gICAgICAgICAgY29uc3QgcGxFbnRyeSA9IHBhdHRlcm5MaXN0U3RhY2tbcGF0dGVybkxpc3RTdGFjay5sZW5ndGggLSAxXVxuICAgICAgICAgIGlmIChpbkNsYXNzIHx8ICFwbEVudHJ5KSB7XG4gICAgICAgICAgICByZSArPSAnXFxcXCknXG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cbiAgICAgICAgICBwYXR0ZXJuTGlzdFN0YWNrLnBvcCgpXG5cbiAgICAgICAgICAvLyBjbG9zaW5nIGFuIGV4dGdsb2JcbiAgICAgICAgICBjbGVhclN0YXRlQ2hhcigpXG4gICAgICAgICAgaGFzTWFnaWMgPSB0cnVlXG4gICAgICAgICAgcGwgPSBwbEVudHJ5XG4gICAgICAgICAgLy8gbmVnYXRpb24gaXMgKD86KD8hanMpW14vXSopXG4gICAgICAgICAgLy8gVGhlIG90aGVycyBhcmUgKD86PHBhdHRlcm4+KTx0eXBlPlxuICAgICAgICAgIHJlICs9IHBsLmNsb3NlXG4gICAgICAgICAgaWYgKHBsLnR5cGUgPT09ICchJykge1xuICAgICAgICAgICAgbmVnYXRpdmVMaXN0cy5wdXNoKE9iamVjdC5hc3NpZ24ocGwsIHsgcmVFbmQ6IHJlLmxlbmd0aCB9KSlcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgJ3wnOiB7XG4gICAgICAgICAgY29uc3QgcGxFbnRyeSA9IHBhdHRlcm5MaXN0U3RhY2tbcGF0dGVybkxpc3RTdGFjay5sZW5ndGggLSAxXVxuICAgICAgICAgIGlmIChpbkNsYXNzIHx8ICFwbEVudHJ5KSB7XG4gICAgICAgICAgICByZSArPSAnXFxcXHwnXG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNsZWFyU3RhdGVDaGFyKClcbiAgICAgICAgICByZSArPSAnfCdcbiAgICAgICAgICAvLyBuZXh0IHN1YnBhdHRlcm4gY2FuIHN0YXJ0IHdpdGggYSBkb3Q/XG4gICAgICAgICAgaWYgKHBsRW50cnkuc3RhcnQgPT09IDAgJiYgcGxFbnRyeS50eXBlICE9PSAnIScpIHtcbiAgICAgICAgICAgIGRvdFRyYXZBbGxvd2VkID0gdHJ1ZVxuICAgICAgICAgICAgcmUgKz0gc3ViUGF0dGVyblN0YXJ0KHBhdHRlcm4uc2xpY2UoaSArIDEpKVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gdGhlc2UgYXJlIG1vc3RseSB0aGUgc2FtZSBpbiByZWdleHAgYW5kIGdsb2JcbiAgICAgICAgY2FzZSAnWyc6XG4gICAgICAgICAgLy8gc3dhbGxvdyBhbnkgc3RhdGUtdHJhY2tpbmcgY2hhciBiZWZvcmUgdGhlIFtcbiAgICAgICAgICBjbGVhclN0YXRlQ2hhcigpXG5cbiAgICAgICAgICBpZiAoaW5DbGFzcykge1xuICAgICAgICAgICAgcmUgKz0gJ1xcXFwnICsgY1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpbkNsYXNzID0gdHJ1ZVxuICAgICAgICAgIGNsYXNzU3RhcnQgPSBpXG4gICAgICAgICAgcmVDbGFzc1N0YXJ0ID0gcmUubGVuZ3RoXG4gICAgICAgICAgcmUgKz0gY1xuICAgICAgICBjb250aW51ZVxuXG4gICAgICAgIGNhc2UgJ10nOlxuICAgICAgICAgIC8vICBhIHJpZ2h0IGJyYWNrZXQgc2hhbGwgbG9zZSBpdHMgc3BlY2lhbFxuICAgICAgICAgIC8vICBtZWFuaW5nIGFuZCByZXByZXNlbnQgaXRzZWxmIGluXG4gICAgICAgICAgLy8gIGEgYnJhY2tldCBleHByZXNzaW9uIGlmIGl0IG9jY3Vyc1xuICAgICAgICAgIC8vICBmaXJzdCBpbiB0aGUgbGlzdC4gIC0tIFBPU0lYLjIgMi44LjMuMlxuICAgICAgICAgIGlmIChpID09PSBjbGFzc1N0YXJ0ICsgMSB8fCAhaW5DbGFzcykge1xuICAgICAgICAgICAgcmUgKz0gJ1xcXFwnICsgY1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBzcGxpdCB3aGVyZSB0aGUgbGFzdCBbIHdhcywgbWFrZSBzdXJlIHdlIGRvbid0IGhhdmVcbiAgICAgICAgICAvLyBhbiBpbnZhbGlkIHJlLiBpZiBzbywgcmUtd2FsayB0aGUgY29udGVudHMgb2YgdGhlXG4gICAgICAgICAgLy8gd291bGQtYmUgY2xhc3MgdG8gcmUtdHJhbnNsYXRlIGFueSBjaGFyYWN0ZXJzIHRoYXRcbiAgICAgICAgICAvLyB3ZXJlIHBhc3NlZCB0aHJvdWdoIGFzLWlzXG4gICAgICAgICAgLy8gVE9ETzogSXQgd291bGQgcHJvYmFibHkgYmUgZmFzdGVyIHRvIGRldGVybWluZSB0aGlzXG4gICAgICAgICAgLy8gd2l0aG91dCBhIHRyeS9jYXRjaCBhbmQgYSBuZXcgUmVnRXhwLCBidXQgaXQncyB0cmlja3lcbiAgICAgICAgICAvLyB0byBkbyBzYWZlbHkuICBGb3Igbm93LCB0aGlzIGlzIHNhZmUgYW5kIHdvcmtzLlxuICAgICAgICAgIGNzID0gcGF0dGVybi5zdWJzdHJpbmcoY2xhc3NTdGFydCArIDEsIGkpXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIFJlZ0V4cCgnWycgKyBicmFFeHBFc2NhcGUoY2hhclVuZXNjYXBlKGNzKSkgKyAnXScpXG4gICAgICAgICAgICAvLyBsb29rcyBnb29kLCBmaW5pc2ggdXAgdGhlIGNsYXNzLlxuICAgICAgICAgICAgcmUgKz0gY1xuICAgICAgICAgIH0gY2F0Y2ggKGVyKSB7XG4gICAgICAgICAgICAvLyBvdXQgb2Ygb3JkZXIgcmFuZ2VzIGluIEpTIGFyZSBlcnJvcnMsIGJ1dCBpbiBnbG9iIHN5bnRheCxcbiAgICAgICAgICAgIC8vIHRoZXkncmUganVzdCBhIHJhbmdlIHRoYXQgbWF0Y2hlcyBub3RoaW5nLlxuICAgICAgICAgICAgcmUgPSByZS5zdWJzdHJpbmcoMCwgcmVDbGFzc1N0YXJ0KSArICcoPzokLiknIC8vIG1hdGNoIG5vdGhpbmcgZXZlclxuICAgICAgICAgIH1cbiAgICAgICAgICBoYXNNYWdpYyA9IHRydWVcbiAgICAgICAgICBpbkNsYXNzID0gZmFsc2VcbiAgICAgICAgY29udGludWVcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIC8vIHN3YWxsb3cgYW55IHN0YXRlIGNoYXIgdGhhdCB3YXNuJ3QgY29uc3VtZWRcbiAgICAgICAgICBjbGVhclN0YXRlQ2hhcigpXG5cbiAgICAgICAgICBpZiAocmVTcGVjaWFsc1tjXSAmJiAhKGMgPT09ICdeJyAmJiBpbkNsYXNzKSkge1xuICAgICAgICAgICAgcmUgKz0gJ1xcXFwnXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmUgKz0gY1xuICAgICAgICAgIGJyZWFrXG5cbiAgICAgIH0gLy8gc3dpdGNoXG4gICAgfSAvLyBmb3JcblxuICAgIC8vIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB3ZSBsZWZ0IGEgY2xhc3Mgb3Blbi5cbiAgICAvLyBcIlthYmNcIiBpcyB2YWxpZCwgZXF1aXZhbGVudCB0byBcIlxcW2FiY1wiXG4gICAgaWYgKGluQ2xhc3MpIHtcbiAgICAgIC8vIHNwbGl0IHdoZXJlIHRoZSBsYXN0IFsgd2FzLCBhbmQgZXNjYXBlIGl0XG4gICAgICAvLyB0aGlzIGlzIGEgaHVnZSBwaXRhLiAgV2Ugbm93IGhhdmUgdG8gcmUtd2Fsa1xuICAgICAgLy8gdGhlIGNvbnRlbnRzIG9mIHRoZSB3b3VsZC1iZSBjbGFzcyB0byByZS10cmFuc2xhdGVcbiAgICAgIC8vIGFueSBjaGFyYWN0ZXJzIHRoYXQgd2VyZSBwYXNzZWQgdGhyb3VnaCBhcy1pc1xuICAgICAgY3MgPSBwYXR0ZXJuLnNsaWNlKGNsYXNzU3RhcnQgKyAxKVxuICAgICAgc3AgPSB0aGlzLnBhcnNlKGNzLCBTVUJQQVJTRSlcbiAgICAgIHJlID0gcmUuc3Vic3RyaW5nKDAsIHJlQ2xhc3NTdGFydCkgKyAnXFxcXFsnICsgc3BbMF1cbiAgICAgIGhhc01hZ2ljID0gaGFzTWFnaWMgfHwgc3BbMV1cbiAgICB9XG5cbiAgICAvLyBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgd2UgaGFkIGEgKyggdGhpbmcgYXQgdGhlICplbmQqXG4gICAgLy8gb2YgdGhlIHBhdHRlcm4uXG4gICAgLy8gZWFjaCBwYXR0ZXJuIGxpc3Qgc3RhY2sgYWRkcyAzIGNoYXJzLCBhbmQgd2UgbmVlZCB0byBnbyB0aHJvdWdoXG4gICAgLy8gYW5kIGVzY2FwZSBhbnkgfCBjaGFycyB0aGF0IHdlcmUgcGFzc2VkIHRocm91Z2ggYXMtaXMgZm9yIHRoZSByZWdleHAuXG4gICAgLy8gR28gdGhyb3VnaCBhbmQgZXNjYXBlIHRoZW0sIHRha2luZyBjYXJlIG5vdCB0byBkb3VibGUtZXNjYXBlIGFueVxuICAgIC8vIHwgY2hhcnMgdGhhdCB3ZXJlIGFscmVhZHkgZXNjYXBlZC5cbiAgICBmb3IgKHBsID0gcGF0dGVybkxpc3RTdGFjay5wb3AoKTsgcGw7IHBsID0gcGF0dGVybkxpc3RTdGFjay5wb3AoKSkge1xuICAgICAgbGV0IHRhaWxcbiAgICAgIHRhaWwgPSByZS5zbGljZShwbC5yZVN0YXJ0ICsgcGwub3Blbi5sZW5ndGgpXG4gICAgICB0aGlzLmRlYnVnKCdzZXR0aW5nIHRhaWwnLCByZSwgcGwpXG4gICAgICAvLyBtYXliZSBzb21lIGV2ZW4gbnVtYmVyIG9mIFxcLCB0aGVuIG1heWJlIDEgXFwsIGZvbGxvd2VkIGJ5IGEgfFxuICAgICAgdGFpbCA9IHRhaWwucmVwbGFjZSgvKCg/OlxcXFx7Mn0pezAsNjR9KShcXFxcPylcXHwvZywgKF8sICQxLCAkMikgPT4ge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAtIHNob3VsZCBhbHJlYWR5IGJlIGRvbmUgKi9cbiAgICAgICAgaWYgKCEkMikge1xuICAgICAgICAgIC8vIHRoZSB8IGlzbid0IGFscmVhZHkgZXNjYXBlZCwgc28gZXNjYXBlIGl0LlxuICAgICAgICAgICQyID0gJ1xcXFwnXG4gICAgICAgIH1cblxuICAgICAgICAvLyBuZWVkIHRvIGVzY2FwZSBhbGwgdGhvc2Ugc2xhc2hlcyAqYWdhaW4qLCB3aXRob3V0IGVzY2FwaW5nIHRoZVxuICAgICAgICAvLyBvbmUgdGhhdCB3ZSBuZWVkIGZvciBlc2NhcGluZyB0aGUgfCBjaGFyYWN0ZXIuICBBcyBpdCB3b3JrcyBvdXQsXG4gICAgICAgIC8vIGVzY2FwaW5nIGFuIGV2ZW4gbnVtYmVyIG9mIHNsYXNoZXMgY2FuIGJlIGRvbmUgYnkgc2ltcGx5IHJlcGVhdGluZ1xuICAgICAgICAvLyBpdCBleGFjdGx5IGFmdGVyIGl0c2VsZi4gIFRoYXQncyB3aHkgdGhpcyB0cmljayB3b3Jrcy5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gSSBhbSBzb3JyeSB0aGF0IHlvdSBoYXZlIHRvIHNlZSB0aGlzLlxuICAgICAgICByZXR1cm4gJDEgKyAkMSArICQyICsgJ3wnXG4gICAgICB9KVxuXG4gICAgICB0aGlzLmRlYnVnKCd0YWlsPSVqXFxuICAgJXMnLCB0YWlsLCB0YWlsLCBwbCwgcmUpXG4gICAgICBjb25zdCB0ID0gcGwudHlwZSA9PT0gJyonID8gc3RhclxuICAgICAgICA6IHBsLnR5cGUgPT09ICc/JyA/IHFtYXJrXG4gICAgICAgIDogJ1xcXFwnICsgcGwudHlwZVxuXG4gICAgICBoYXNNYWdpYyA9IHRydWVcbiAgICAgIHJlID0gcmUuc2xpY2UoMCwgcGwucmVTdGFydCkgKyB0ICsgJ1xcXFwoJyArIHRhaWxcbiAgICB9XG5cbiAgICAvLyBoYW5kbGUgdHJhaWxpbmcgdGhpbmdzIHRoYXQgb25seSBtYXR0ZXIgYXQgdGhlIHZlcnkgZW5kLlxuICAgIGNsZWFyU3RhdGVDaGFyKClcbiAgICBpZiAoZXNjYXBpbmcpIHtcbiAgICAgIC8vIHRyYWlsaW5nIFxcXFxcbiAgICAgIHJlICs9ICdcXFxcXFxcXCdcbiAgICB9XG5cbiAgICAvLyBvbmx5IG5lZWQgdG8gYXBwbHkgdGhlIG5vZG90IHN0YXJ0IGlmIHRoZSByZSBzdGFydHMgd2l0aFxuICAgIC8vIHNvbWV0aGluZyB0aGF0IGNvdWxkIGNvbmNlaXZhYmx5IGNhcHR1cmUgYSBkb3RcbiAgICBjb25zdCBhZGRQYXR0ZXJuU3RhcnQgPSBhZGRQYXR0ZXJuU3RhcnRTZXRbcmUuY2hhckF0KDApXVxuXG4gICAgLy8gSGFjayB0byB3b3JrIGFyb3VuZCBsYWNrIG9mIG5lZ2F0aXZlIGxvb2tiZWhpbmQgaW4gSlNcbiAgICAvLyBBIHBhdHRlcm4gbGlrZTogKi4hKHgpLiEoeXx6KSBuZWVkcyB0byBlbnN1cmUgdGhhdCBhIG5hbWVcbiAgICAvLyBsaWtlICdhLnh5ei55eicgZG9lc24ndCBtYXRjaC4gIFNvLCB0aGUgZmlyc3QgbmVnYXRpdmVcbiAgICAvLyBsb29rYWhlYWQsIGhhcyB0byBsb29rIEFMTCB0aGUgd2F5IGFoZWFkLCB0byB0aGUgZW5kIG9mXG4gICAgLy8gdGhlIHBhdHRlcm4uXG4gICAgZm9yIChsZXQgbiA9IG5lZ2F0aXZlTGlzdHMubGVuZ3RoIC0gMTsgbiA+IC0xOyBuLS0pIHtcbiAgICAgIGNvbnN0IG5sID0gbmVnYXRpdmVMaXN0c1tuXVxuXG4gICAgICBjb25zdCBubEJlZm9yZSA9IHJlLnNsaWNlKDAsIG5sLnJlU3RhcnQpXG4gICAgICBjb25zdCBubEZpcnN0ID0gcmUuc2xpY2UobmwucmVTdGFydCwgbmwucmVFbmQgLSA4KVxuICAgICAgbGV0IG5sQWZ0ZXIgPSByZS5zbGljZShubC5yZUVuZClcbiAgICAgIGNvbnN0IG5sTGFzdCA9IHJlLnNsaWNlKG5sLnJlRW5kIC0gOCwgbmwucmVFbmQpICsgbmxBZnRlclxuXG4gICAgICAvLyBIYW5kbGUgbmVzdGVkIHN0dWZmIGxpa2UgKigqLmpzfCEoKi5qc29uKSksIHdoZXJlIG9wZW4gcGFyZW5zXG4gICAgICAvLyBtZWFuIHRoYXQgd2Ugc2hvdWxkICpub3QqIGluY2x1ZGUgdGhlICkgaW4gdGhlIGJpdCB0aGF0IGlzIGNvbnNpZGVyZWRcbiAgICAgIC8vIFwiYWZ0ZXJcIiB0aGUgbmVnYXRlZCBzZWN0aW9uLlxuICAgICAgY29uc3QgY2xvc2VQYXJlbnNCZWZvcmUgPSBubEJlZm9yZS5zcGxpdCgnKScpLmxlbmd0aFxuICAgICAgY29uc3Qgb3BlblBhcmVuc0JlZm9yZSA9IG5sQmVmb3JlLnNwbGl0KCcoJykubGVuZ3RoIC0gY2xvc2VQYXJlbnNCZWZvcmVcbiAgICAgIGxldCBjbGVhbkFmdGVyID0gbmxBZnRlclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcGVuUGFyZW5zQmVmb3JlOyBpKyspIHtcbiAgICAgICAgY2xlYW5BZnRlciA9IGNsZWFuQWZ0ZXIucmVwbGFjZSgvXFwpWysqP10/LywgJycpXG4gICAgICB9XG4gICAgICBubEFmdGVyID0gY2xlYW5BZnRlclxuXG4gICAgICBjb25zdCBkb2xsYXIgPSBubEFmdGVyID09PSAnJyAmJiBpc1N1YiAhPT0gU1VCUEFSU0UgPyAnKD86JHxcXFxcLyknIDogJydcblxuICAgICAgcmUgPSBubEJlZm9yZSArIG5sRmlyc3QgKyBubEFmdGVyICsgZG9sbGFyICsgbmxMYXN0XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIHJlIGlzIG5vdCBcIlwiIGF0IHRoaXMgcG9pbnQsIHRoZW4gd2UgbmVlZCB0byBtYWtlIHN1cmVcbiAgICAvLyBpdCBkb2Vzbid0IG1hdGNoIGFnYWluc3QgYW4gZW1wdHkgcGF0aCBwYXJ0LlxuICAgIC8vIE90aGVyd2lzZSBhLyogd2lsbCBtYXRjaCBhLywgd2hpY2ggaXQgc2hvdWxkIG5vdC5cbiAgICBpZiAocmUgIT09ICcnICYmIGhhc01hZ2ljKSB7XG4gICAgICByZSA9ICcoPz0uKScgKyByZVxuICAgIH1cblxuICAgIGlmIChhZGRQYXR0ZXJuU3RhcnQpIHtcbiAgICAgIHJlID0gcGF0dGVyblN0YXJ0KCkgKyByZVxuICAgIH1cblxuICAgIC8vIHBhcnNpbmcganVzdCBhIHBpZWNlIG9mIGEgbGFyZ2VyIHBhdHRlcm4uXG4gICAgaWYgKGlzU3ViID09PSBTVUJQQVJTRSkge1xuICAgICAgcmV0dXJuIFtyZSwgaGFzTWFnaWNdXG4gICAgfVxuXG4gICAgLy8gaWYgaXQncyBub2Nhc2UsIGFuZCB0aGUgbGNhc2UvdXBwZXJjYXNlIGRvbid0IG1hdGNoLCBpdCdzIG1hZ2ljXG4gICAgaWYgKG9wdGlvbnMubm9jYXNlICYmICFoYXNNYWdpYykge1xuICAgICAgaGFzTWFnaWMgPSBwYXR0ZXJuLnRvVXBwZXJDYXNlKCkgIT09IHBhdHRlcm4udG9Mb3dlckNhc2UoKVxuICAgIH1cblxuICAgIC8vIHNraXAgdGhlIHJlZ2V4cCBmb3Igbm9uLW1hZ2ljYWwgcGF0dGVybnNcbiAgICAvLyB1bmVzY2FwZSBhbnl0aGluZyBpbiBpdCwgdGhvdWdoLCBzbyB0aGF0IGl0J2xsIGJlXG4gICAgLy8gYW4gZXhhY3QgbWF0Y2ggYWdhaW5zdCBhIGZpbGUgZXRjLlxuICAgIGlmICghaGFzTWFnaWMpIHtcbiAgICAgIHJldHVybiBnbG9iVW5lc2NhcGUocGF0dGVybilcbiAgICB9XG5cbiAgICBjb25zdCBmbGFncyA9IG9wdGlvbnMubm9jYXNlID8gJ2knIDogJydcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IFJlZ0V4cCgnXicgKyByZSArICckJywgZmxhZ3MpLCB7XG4gICAgICAgIF9nbG9iOiBwYXR0ZXJuLFxuICAgICAgICBfc3JjOiByZSxcbiAgICAgIH0pXG4gICAgfSBjYXRjaCAoZXIpIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0IC0gc2hvdWxkIGJlIGltcG9zc2libGUgKi8ge1xuICAgICAgLy8gSWYgaXQgd2FzIGFuIGludmFsaWQgcmVndWxhciBleHByZXNzaW9uLCB0aGVuIGl0IGNhbid0IG1hdGNoXG4gICAgICAvLyBhbnl0aGluZy4gIFRoaXMgdHJpY2sgbG9va3MgZm9yIGEgY2hhcmFjdGVyIGFmdGVyIHRoZSBlbmQgb2ZcbiAgICAgIC8vIHRoZSBzdHJpbmcsIHdoaWNoIGlzIG9mIGNvdXJzZSBpbXBvc3NpYmxlLCBleGNlcHQgaW4gbXVsdGktbGluZVxuICAgICAgLy8gbW9kZSwgYnV0IGl0J3Mgbm90IGEgL20gcmVnZXguXG4gICAgICByZXR1cm4gbmV3IFJlZ0V4cCgnJC4nKVxuICAgIH1cbiAgfVxuXG4gIG1ha2VSZSAoKSB7XG4gICAgaWYgKHRoaXMucmVnZXhwIHx8IHRoaXMucmVnZXhwID09PSBmYWxzZSkgcmV0dXJuIHRoaXMucmVnZXhwXG5cbiAgICAvLyBhdCB0aGlzIHBvaW50LCB0aGlzLnNldCBpcyBhIDJkIGFycmF5IG9mIHBhcnRpYWxcbiAgICAvLyBwYXR0ZXJuIHN0cmluZ3MsIG9yIFwiKipcIi5cbiAgICAvL1xuICAgIC8vIEl0J3MgYmV0dGVyIHRvIHVzZSAubWF0Y2goKS4gIFRoaXMgZnVuY3Rpb24gc2hvdWxkbid0XG4gICAgLy8gYmUgdXNlZCwgcmVhbGx5LCBidXQgaXQncyBwcmV0dHkgY29udmVuaWVudCBzb21ldGltZXMsXG4gICAgLy8gd2hlbiB5b3UganVzdCB3YW50IHRvIHdvcmsgd2l0aCBhIHJlZ2V4LlxuICAgIGNvbnN0IHNldCA9IHRoaXMuc2V0XG5cbiAgICBpZiAoIXNldC5sZW5ndGgpIHtcbiAgICAgIHRoaXMucmVnZXhwID0gZmFsc2VcbiAgICAgIHJldHVybiB0aGlzLnJlZ2V4cFxuICAgIH1cbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zXG5cbiAgICBjb25zdCB0d29TdGFyID0gb3B0aW9ucy5ub2dsb2JzdGFyID8gc3RhclxuICAgICAgOiBvcHRpb25zLmRvdCA/IHR3b1N0YXJEb3RcbiAgICAgIDogdHdvU3Rhck5vRG90XG4gICAgY29uc3QgZmxhZ3MgPSBvcHRpb25zLm5vY2FzZSA/ICdpJyA6ICcnXG5cbiAgICAvLyBjb2FsZXNjZSBnbG9ic3RhcnMgYW5kIHJlZ2V4cGlmeSBub24tZ2xvYnN0YXIgcGF0dGVybnNcbiAgICAvLyBpZiBpdCdzIHRoZSBvbmx5IGl0ZW0sIHRoZW4gd2UganVzdCBkbyBvbmUgdHdvU3RhclxuICAgIC8vIGlmIGl0J3MgdGhlIGZpcnN0LCBhbmQgdGhlcmUgYXJlIG1vcmUsIHByZXBlbmQgKFxcL3x0d29TdGFyXFwvKT8gdG8gbmV4dFxuICAgIC8vIGlmIGl0J3MgdGhlIGxhc3QsIGFwcGVuZCAoXFwvdHdvU3RhcnwpIHRvIHByZXZpb3VzXG4gICAgLy8gaWYgaXQncyBpbiB0aGUgbWlkZGxlLCBhcHBlbmQgKFxcL3xcXC90d29TdGFyXFwvKSB0byBwcmV2aW91c1xuICAgIC8vIHRoZW4gZmlsdGVyIG91dCBHTE9CU1RBUiBzeW1ib2xzXG4gICAgbGV0IHJlID0gc2V0Lm1hcChwYXR0ZXJuID0+IHtcbiAgICAgIHBhdHRlcm4gPSBwYXR0ZXJuLm1hcChwID0+XG4gICAgICAgIHR5cGVvZiBwID09PSAnc3RyaW5nJyA/IHJlZ0V4cEVzY2FwZShwKVxuICAgICAgICA6IHAgPT09IEdMT0JTVEFSID8gR0xPQlNUQVJcbiAgICAgICAgOiBwLl9zcmNcbiAgICAgICkucmVkdWNlKChzZXQsIHApID0+IHtcbiAgICAgICAgaWYgKCEoc2V0W3NldC5sZW5ndGggLSAxXSA9PT0gR0xPQlNUQVIgJiYgcCA9PT0gR0xPQlNUQVIpKSB7XG4gICAgICAgICAgc2V0LnB1c2gocClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2V0XG4gICAgICB9LCBbXSlcbiAgICAgIHBhdHRlcm4uZm9yRWFjaCgocCwgaSkgPT4ge1xuICAgICAgICBpZiAocCAhPT0gR0xPQlNUQVIgfHwgcGF0dGVybltpLTFdID09PSBHTE9CU1RBUikge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgaWYgKHBhdHRlcm4ubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgcGF0dGVybltpKzFdID0gJyg/OlxcXFxcXC98JyArIHR3b1N0YXIgKyAnXFxcXFxcLyk/JyArIHBhdHRlcm5baSsxXVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXR0ZXJuW2ldID0gdHdvU3RhclxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChpID09PSBwYXR0ZXJuLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICBwYXR0ZXJuW2ktMV0gKz0gJyg/OlxcXFxcXC98JyArIHR3b1N0YXIgKyAnKT8nXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGF0dGVybltpLTFdICs9ICcoPzpcXFxcXFwvfFxcXFxcXC8nICsgdHdvU3RhciArICdcXFxcXFwvKScgKyBwYXR0ZXJuW2krMV1cbiAgICAgICAgICBwYXR0ZXJuW2krMV0gPSBHTE9CU1RBUlxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgcmV0dXJuIHBhdHRlcm4uZmlsdGVyKHAgPT4gcCAhPT0gR0xPQlNUQVIpLmpvaW4oJy8nKVxuICAgIH0pLmpvaW4oJ3wnKVxuXG4gICAgLy8gbXVzdCBtYXRjaCBlbnRpcmUgcGF0dGVyblxuICAgIC8vIGVuZGluZyBpbiBhICogb3IgKiogd2lsbCBtYWtlIGl0IGxlc3Mgc3RyaWN0LlxuICAgIHJlID0gJ14oPzonICsgcmUgKyAnKSQnXG5cbiAgICAvLyBjYW4gbWF0Y2ggYW55dGhpbmcsIGFzIGxvbmcgYXMgaXQncyBub3QgdGhpcy5cbiAgICBpZiAodGhpcy5uZWdhdGUpIHJlID0gJ14oPyEnICsgcmUgKyAnKS4qJCdcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLnJlZ2V4cCA9IG5ldyBSZWdFeHAocmUsIGZsYWdzKVxuICAgIH0gY2F0Y2ggKGV4KSAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAtIHNob3VsZCBiZSBpbXBvc3NpYmxlICovIHtcbiAgICAgIHRoaXMucmVnZXhwID0gZmFsc2VcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucmVnZXhwXG4gIH1cblxuICBtYXRjaCAoZiwgcGFydGlhbCA9IHRoaXMucGFydGlhbCkge1xuICAgIHRoaXMuZGVidWcoJ21hdGNoJywgZiwgdGhpcy5wYXR0ZXJuKVxuICAgIC8vIHNob3J0LWNpcmN1aXQgaW4gdGhlIGNhc2Ugb2YgYnVzdGVkIHRoaW5ncy5cbiAgICAvLyBjb21tZW50cywgZXRjLlxuICAgIGlmICh0aGlzLmNvbW1lbnQpIHJldHVybiBmYWxzZVxuICAgIGlmICh0aGlzLmVtcHR5KSByZXR1cm4gZiA9PT0gJydcblxuICAgIGlmIChmID09PSAnLycgJiYgcGFydGlhbCkgcmV0dXJuIHRydWVcblxuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnNcblxuICAgIC8vIHdpbmRvd3M6IG5lZWQgdG8gdXNlIC8sIG5vdCBcXFxuICAgIGlmIChwYXRoLnNlcCAhPT0gJy8nKSB7XG4gICAgICBmID0gZi5zcGxpdChwYXRoLnNlcCkuam9pbignLycpXG4gICAgfVxuXG4gICAgLy8gdHJlYXQgdGhlIHRlc3QgcGF0aCBhcyBhIHNldCBvZiBwYXRocGFydHMuXG4gICAgZiA9IGYuc3BsaXQoc2xhc2hTcGxpdClcbiAgICB0aGlzLmRlYnVnKHRoaXMucGF0dGVybiwgJ3NwbGl0JywgZilcblxuICAgIC8vIGp1c3QgT05FIG9mIHRoZSBwYXR0ZXJuIHNldHMgaW4gdGhpcy5zZXQgbmVlZHMgdG8gbWF0Y2hcbiAgICAvLyBpbiBvcmRlciBmb3IgaXQgdG8gYmUgdmFsaWQuICBJZiBuZWdhdGluZywgdGhlbiBqdXN0IG9uZVxuICAgIC8vIG1hdGNoIG1lYW5zIHRoYXQgd2UgaGF2ZSBmYWlsZWQuXG4gICAgLy8gRWl0aGVyIHdheSwgcmV0dXJuIG9uIHRoZSBmaXJzdCBoaXQuXG5cbiAgICBjb25zdCBzZXQgPSB0aGlzLnNldFxuICAgIHRoaXMuZGVidWcodGhpcy5wYXR0ZXJuLCAnc2V0Jywgc2V0KVxuXG4gICAgLy8gRmluZCB0aGUgYmFzZW5hbWUgb2YgdGhlIHBhdGggYnkgbG9va2luZyBmb3IgdGhlIGxhc3Qgbm9uLWVtcHR5IHNlZ21lbnRcbiAgICBsZXQgZmlsZW5hbWVcbiAgICBmb3IgKGxldCBpID0gZi5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgZmlsZW5hbWUgPSBmW2ldXG4gICAgICBpZiAoZmlsZW5hbWUpIGJyZWFrXG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZXQubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHBhdHRlcm4gPSBzZXRbaV1cbiAgICAgIGxldCBmaWxlID0gZlxuICAgICAgaWYgKG9wdGlvbnMubWF0Y2hCYXNlICYmIHBhdHRlcm4ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGZpbGUgPSBbZmlsZW5hbWVdXG4gICAgICB9XG4gICAgICBjb25zdCBoaXQgPSB0aGlzLm1hdGNoT25lKGZpbGUsIHBhdHRlcm4sIHBhcnRpYWwpXG4gICAgICBpZiAoaGl0KSB7XG4gICAgICAgIGlmIChvcHRpb25zLmZsaXBOZWdhdGUpIHJldHVybiB0cnVlXG4gICAgICAgIHJldHVybiAhdGhpcy5uZWdhdGVcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBkaWRuJ3QgZ2V0IGFueSBoaXRzLiAgdGhpcyBpcyBzdWNjZXNzIGlmIGl0J3MgYSBuZWdhdGl2ZVxuICAgIC8vIHBhdHRlcm4sIGZhaWx1cmUgb3RoZXJ3aXNlLlxuICAgIGlmIChvcHRpb25zLmZsaXBOZWdhdGUpIHJldHVybiBmYWxzZVxuICAgIHJldHVybiB0aGlzLm5lZ2F0ZVxuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRzIChkZWYpIHtcbiAgICByZXR1cm4gbWluaW1hdGNoLmRlZmF1bHRzKGRlZikuTWluaW1hdGNoXG4gIH1cbn1cblxubWluaW1hdGNoLk1pbmltYXRjaCA9IE1pbmltYXRjaFxuIiwKICAgICJtb2R1bGUuZXhwb3J0cyA9IHJlYWRkaXJHbG9iO1xuXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG5jb25zdCB7IEV2ZW50RW1pdHRlciB9ID0gcmVxdWlyZSgnZXZlbnRzJyk7XG5jb25zdCB7IE1pbmltYXRjaCB9ID0gcmVxdWlyZSgnbWluaW1hdGNoJyk7XG5jb25zdCB7IHJlc29sdmUgfSA9IHJlcXVpcmUoJ3BhdGgnKTtcblxuZnVuY3Rpb24gcmVhZGRpcihkaXIsIHN0cmljdCkge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGZzLnJlYWRkaXIoZGlyLCB7d2l0aEZpbGVUeXBlczogdHJ1ZX0gLChlcnIsIGZpbGVzKSA9PiB7XG4gICAgICBpZihlcnIpIHtcbiAgICAgICAgc3dpdGNoIChlcnIuY29kZSkge1xuICAgICAgICAgIGNhc2UgJ0VOT1RESVInOiAgICAgIC8vIE5vdCBhIGRpcmVjdG9yeVxuICAgICAgICAgICAgaWYoc3RyaWN0KSB7XG4gICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmVzb2x2ZShbXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdFTk9UU1VQJzogICAgICAvLyBPcGVyYXRpb24gbm90IHN1cHBvcnRlZFxuICAgICAgICAgIGNhc2UgJ0VOT0VOVCc6ICAgICAgIC8vIE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnlcbiAgICAgICAgICBjYXNlICdFTkFNRVRPT0xPTkcnOiAvLyBGaWxlbmFtZSB0b28gbG9uZ1xuICAgICAgICAgIGNhc2UgJ1VOS05PV04nOlxuICAgICAgICAgICAgcmVzb2x2ZShbXSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdFTE9PUCc6ICAgICAgICAvLyBUb28gbWFueSBsZXZlbHMgb2Ygc3ltYm9saWMgbGlua3NcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZShmaWxlcyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gc3RhdChmaWxlLCBmb2xsb3dTeW1saW5rcykge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHN0YXRGdW5jID0gZm9sbG93U3ltbGlua3MgPyBmcy5zdGF0IDogZnMubHN0YXQ7XG4gICAgc3RhdEZ1bmMoZmlsZSwgKGVyciwgc3RhdHMpID0+IHtcbiAgICAgIGlmKGVycikge1xuICAgICAgICBzd2l0Y2ggKGVyci5jb2RlKSB7XG4gICAgICAgICAgY2FzZSAnRU5PRU5UJzpcbiAgICAgICAgICAgIGlmKGZvbGxvd1N5bWxpbmtzKSB7XG4gICAgICAgICAgICAgIC8vIEZhbGxiYWNrIHRvIGxzdGF0IHRvIGhhbmRsZSBicm9rZW4gbGlua3MgYXMgZmlsZXNcbiAgICAgICAgICAgICAgcmVzb2x2ZShzdGF0KGZpbGUsIGZhbHNlKSk7IFxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXNvbHZlKG51bGwpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUoc3RhdHMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24qIGV4cGxvcmVXYWxrQXN5bmMoZGlyLCBwYXRoLCBmb2xsb3dTeW1saW5rcywgdXNlU3RhdCwgc2hvdWxkU2tpcCwgc3RyaWN0KSB7XG4gIGxldCBmaWxlcyA9IGF3YWl0IHJlYWRkaXIocGF0aCArIGRpciwgc3RyaWN0KTtcbiAgZm9yKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICBsZXQgbmFtZSA9IGZpbGUubmFtZTtcbiAgICBpZihuYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIHVuZGVmaW5lZCBmaWxlLm5hbWUgbWVhbnMgdGhlIGB3aXRoRmlsZVR5cGVzYCBvcHRpb25zIGlzIG5vdCBzdXBwb3J0ZWQgYnkgbm9kZVxuICAgICAgLy8gd2UgaGF2ZSB0byBjYWxsIHRoZSBzdGF0IGZ1bmN0aW9uIHRvIGtub3cgaWYgZmlsZSBpcyBkaXJlY3Rvcnkgb3Igbm90LlxuICAgICAgbmFtZSA9IGZpbGU7XG4gICAgICB1c2VTdGF0ID0gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgZmlsZW5hbWUgPSBkaXIgKyAnLycgKyBuYW1lO1xuICAgIGNvbnN0IHJlbGF0aXZlID0gZmlsZW5hbWUuc2xpY2UoMSk7IC8vIFJlbW92ZSB0aGUgbGVhZGluZyAvXG4gICAgY29uc3QgYWJzb2x1dGUgPSBwYXRoICsgJy8nICsgcmVsYXRpdmU7XG4gICAgbGV0IHN0YXRzID0gbnVsbDtcbiAgICBpZih1c2VTdGF0IHx8IGZvbGxvd1N5bWxpbmtzKSB7XG4gICAgICBzdGF0cyA9IGF3YWl0IHN0YXQoYWJzb2x1dGUsIGZvbGxvd1N5bWxpbmtzKTtcbiAgICB9XG4gICAgaWYoIXN0YXRzICYmIGZpbGUubmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBzdGF0cyA9IGZpbGU7XG4gICAgfVxuICAgIGlmKHN0YXRzID09PSBudWxsKSB7XG4gICAgICBzdGF0cyA9IHsgaXNEaXJlY3Rvcnk6ICgpID0+IGZhbHNlIH07XG4gICAgfVxuXG4gICAgaWYoc3RhdHMuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgaWYoIXNob3VsZFNraXAocmVsYXRpdmUpKSB7XG4gICAgICAgIHlpZWxkIHtyZWxhdGl2ZSwgYWJzb2x1dGUsIHN0YXRzfTtcbiAgICAgICAgeWllbGQqIGV4cGxvcmVXYWxrQXN5bmMoZmlsZW5hbWUsIHBhdGgsIGZvbGxvd1N5bWxpbmtzLCB1c2VTdGF0LCBzaG91bGRTa2lwLCBmYWxzZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHlpZWxkIHtyZWxhdGl2ZSwgYWJzb2x1dGUsIHN0YXRzfTtcbiAgICB9XG4gIH1cbn1cbmFzeW5jIGZ1bmN0aW9uKiBleHBsb3JlKHBhdGgsIGZvbGxvd1N5bWxpbmtzLCB1c2VTdGF0LCBzaG91bGRTa2lwKSB7XG4gIHlpZWxkKiBleHBsb3JlV2Fsa0FzeW5jKCcnLCBwYXRoLCBmb2xsb3dTeW1saW5rcywgdXNlU3RhdCwgc2hvdWxkU2tpcCwgdHJ1ZSk7XG59XG5cblxuZnVuY3Rpb24gcmVhZE9wdGlvbnMob3B0aW9ucykge1xuICByZXR1cm4ge1xuICAgIHBhdHRlcm46IG9wdGlvbnMucGF0dGVybixcbiAgICBkb3Q6ICEhb3B0aW9ucy5kb3QsXG4gICAgbm9nbG9ic3RhcjogISFvcHRpb25zLm5vZ2xvYnN0YXIsXG4gICAgbWF0Y2hCYXNlOiAhIW9wdGlvbnMubWF0Y2hCYXNlLFxuICAgIG5vY2FzZTogISFvcHRpb25zLm5vY2FzZSxcbiAgICBpZ25vcmU6IG9wdGlvbnMuaWdub3JlLFxuICAgIHNraXA6IG9wdGlvbnMuc2tpcCxcblxuICAgIGZvbGxvdzogISFvcHRpb25zLmZvbGxvdyxcbiAgICBzdGF0OiAhIW9wdGlvbnMuc3RhdCxcbiAgICBub2RpcjogISFvcHRpb25zLm5vZGlyLFxuICAgIG1hcms6ICEhb3B0aW9ucy5tYXJrLFxuICAgIHNpbGVudDogISFvcHRpb25zLnNpbGVudCxcbiAgICBhYnNvbHV0ZTogISFvcHRpb25zLmFic29sdXRlXG4gIH07XG59XG5cbmNsYXNzIFJlYWRkaXJHbG9iIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgY29uc3RydWN0b3IoY3dkLCBvcHRpb25zLCBjYikge1xuICAgIHN1cGVyKCk7XG4gICAgaWYodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNiID0gb3B0aW9ucztcbiAgICAgIG9wdGlvbnMgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMub3B0aW9ucyA9IHJlYWRPcHRpb25zKG9wdGlvbnMgfHzCoHt9KTtcbiAgXG4gICAgdGhpcy5tYXRjaGVycyA9IFtdO1xuICAgIGlmKHRoaXMub3B0aW9ucy5wYXR0ZXJuKSB7XG4gICAgICBjb25zdCBtYXRjaGVycyA9IEFycmF5LmlzQXJyYXkodGhpcy5vcHRpb25zLnBhdHRlcm4pID8gdGhpcy5vcHRpb25zLnBhdHRlcm4gOiBbdGhpcy5vcHRpb25zLnBhdHRlcm5dO1xuICAgICAgdGhpcy5tYXRjaGVycyA9IG1hdGNoZXJzLm1hcCggbSA9PlxuICAgICAgICBuZXcgTWluaW1hdGNoKG0sIHtcbiAgICAgICAgICBkb3Q6IHRoaXMub3B0aW9ucy5kb3QsXG4gICAgICAgICAgbm9nbG9ic3Rhcjp0aGlzLm9wdGlvbnMubm9nbG9ic3RhcixcbiAgICAgICAgICBtYXRjaEJhc2U6dGhpcy5vcHRpb25zLm1hdGNoQmFzZSxcbiAgICAgICAgICBub2Nhc2U6dGhpcy5vcHRpb25zLm5vY2FzZVxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gIFxuICAgIHRoaXMuaWdub3JlTWF0Y2hlcnMgPSBbXTtcbiAgICBpZih0aGlzLm9wdGlvbnMuaWdub3JlKSB7XG4gICAgICBjb25zdCBpZ25vcmVQYXR0ZXJucyA9IEFycmF5LmlzQXJyYXkodGhpcy5vcHRpb25zLmlnbm9yZSkgPyB0aGlzLm9wdGlvbnMuaWdub3JlIDogW3RoaXMub3B0aW9ucy5pZ25vcmVdO1xuICAgICAgdGhpcy5pZ25vcmVNYXRjaGVycyA9IGlnbm9yZVBhdHRlcm5zLm1hcCggaWdub3JlID0+XG4gICAgICAgIG5ldyBNaW5pbWF0Y2goaWdub3JlLCB7ZG90OiB0cnVlfSlcbiAgICAgICk7XG4gICAgfVxuICBcbiAgICB0aGlzLnNraXBNYXRjaGVycyA9IFtdO1xuICAgIGlmKHRoaXMub3B0aW9ucy5za2lwKSB7XG4gICAgICBjb25zdCBza2lwUGF0dGVybnMgPSBBcnJheS5pc0FycmF5KHRoaXMub3B0aW9ucy5za2lwKSA/IHRoaXMub3B0aW9ucy5za2lwIDogW3RoaXMub3B0aW9ucy5za2lwXTtcbiAgICAgIHRoaXMuc2tpcE1hdGNoZXJzID0gc2tpcFBhdHRlcm5zLm1hcCggc2tpcCA9PlxuICAgICAgICBuZXcgTWluaW1hdGNoKHNraXAsIHtkb3Q6IHRydWV9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLml0ZXJhdG9yID0gZXhwbG9yZShyZXNvbHZlKGN3ZCB8fCAnLicpLCB0aGlzLm9wdGlvbnMuZm9sbG93LCB0aGlzLm9wdGlvbnMuc3RhdCwgdGhpcy5fc2hvdWxkU2tpcERpcmVjdG9yeS5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLnBhdXNlZCA9IGZhbHNlO1xuICAgIHRoaXMuaW5hY3RpdmUgPSBmYWxzZTtcbiAgICB0aGlzLmFib3J0ZWQgPSBmYWxzZTtcbiAgXG4gICAgaWYoY2IpIHtcbiAgICAgIHRoaXMuX21hdGNoZXMgPSBbXTsgXG4gICAgICB0aGlzLm9uKCdtYXRjaCcsIG1hdGNoID0+IHRoaXMuX21hdGNoZXMucHVzaCh0aGlzLm9wdGlvbnMuYWJzb2x1dGUgPyBtYXRjaC5hYnNvbHV0ZSA6IG1hdGNoLnJlbGF0aXZlKSk7XG4gICAgICB0aGlzLm9uKCdlcnJvcicsIGVyciA9PiBjYihlcnIpKTtcbiAgICAgIHRoaXMub24oJ2VuZCcsICgpID0+IGNiKG51bGwsIHRoaXMuX21hdGNoZXMpKTtcbiAgICB9XG5cbiAgICBzZXRUaW1lb3V0KCAoKSA9PiB0aGlzLl9uZXh0KCksIDApO1xuICB9XG5cbiAgX3Nob3VsZFNraXBEaXJlY3RvcnkocmVsYXRpdmUpIHtcbiAgICAvL2NvbnNvbGUubG9nKHJlbGF0aXZlLCB0aGlzLnNraXBNYXRjaGVycy5zb21lKG0gPT4gbS5tYXRjaChyZWxhdGl2ZSkpKTtcbiAgICByZXR1cm4gdGhpcy5za2lwTWF0Y2hlcnMuc29tZShtID0+IG0ubWF0Y2gocmVsYXRpdmUpKTtcbiAgfVxuXG4gIF9maWxlTWF0Y2hlcyhyZWxhdGl2ZSwgaXNEaXJlY3RvcnkpIHtcbiAgICBjb25zdCBmaWxlID0gcmVsYXRpdmUgKyAoaXNEaXJlY3RvcnkgPyAnLycgOiAnJyk7XG4gICAgcmV0dXJuICh0aGlzLm1hdGNoZXJzLmxlbmd0aCA9PT0gMCB8fCB0aGlzLm1hdGNoZXJzLnNvbWUobSA9PiBtLm1hdGNoKGZpbGUpKSlcbiAgICAgICYmICF0aGlzLmlnbm9yZU1hdGNoZXJzLnNvbWUobSA9PiBtLm1hdGNoKGZpbGUpKVxuICAgICAgJiYgKCF0aGlzLm9wdGlvbnMubm9kaXIgfHwgIWlzRGlyZWN0b3J5KTtcbiAgfVxuXG4gIF9uZXh0KCkge1xuICAgIGlmKCF0aGlzLnBhdXNlZCAmJiAhdGhpcy5hYm9ydGVkKSB7XG4gICAgICB0aGlzLml0ZXJhdG9yLm5leHQoKVxuICAgICAgLnRoZW4oKG9iaik9PiB7XG4gICAgICAgIGlmKCFvYmouZG9uZSkge1xuICAgICAgICAgIGNvbnN0IGlzRGlyZWN0b3J5ID0gb2JqLnZhbHVlLnN0YXRzLmlzRGlyZWN0b3J5KCk7XG4gICAgICAgICAgaWYodGhpcy5fZmlsZU1hdGNoZXMob2JqLnZhbHVlLnJlbGF0aXZlLCBpc0RpcmVjdG9yeSApKSB7XG4gICAgICAgICAgICBsZXQgcmVsYXRpdmUgPSBvYmoudmFsdWUucmVsYXRpdmU7XG4gICAgICAgICAgICBsZXQgYWJzb2x1dGUgPSBvYmoudmFsdWUuYWJzb2x1dGU7XG4gICAgICAgICAgICBpZih0aGlzLm9wdGlvbnMubWFyayAmJiBpc0RpcmVjdG9yeSkge1xuICAgICAgICAgICAgICByZWxhdGl2ZSArPSAnLyc7XG4gICAgICAgICAgICAgIGFic29sdXRlICs9ICcvJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKHRoaXMub3B0aW9ucy5zdGF0KSB7XG4gICAgICAgICAgICAgIHRoaXMuZW1pdCgnbWF0Y2gnLCB7cmVsYXRpdmUsIGFic29sdXRlLCBzdGF0Om9iai52YWx1ZS5zdGF0c30pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5lbWl0KCdtYXRjaCcsIHtyZWxhdGl2ZSwgYWJzb2x1dGV9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5fbmV4dCh0aGlzLml0ZXJhdG9yKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmVtaXQoJ2VuZCcpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgdGhpcy5hYm9ydCgpO1xuICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgICAgICAgaWYoIWVyci5jb2RlICYmICF0aGlzLm9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbmFjdGl2ZSA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgYWJvcnQoKSB7XG4gICAgdGhpcy5hYm9ydGVkID0gdHJ1ZTtcbiAgfVxuXG4gIHBhdXNlKCkge1xuICAgIHRoaXMucGF1c2VkID0gdHJ1ZTtcbiAgfVxuXG4gIHJlc3VtZSgpIHtcbiAgICB0aGlzLnBhdXNlZCA9IGZhbHNlO1xuICAgIGlmKHRoaXMuaW5hY3RpdmUpIHtcbiAgICAgIHRoaXMuaW5hY3RpdmUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX25leHQoKTtcbiAgICB9XG4gIH1cbn1cblxuXG5mdW5jdGlvbiByZWFkZGlyR2xvYihwYXR0ZXJuLCBvcHRpb25zLCBjYikge1xuICByZXR1cm4gbmV3IFJlYWRkaXJHbG9iKHBhdHRlcm4sIG9wdGlvbnMsIGNiKTtcbn1cbnJlYWRkaXJHbG9iLlJlYWRkaXJHbG9iID0gUmVhZGRpckdsb2I7IiwKICAgICIoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IGZhY3RvcnkoZXhwb3J0cykgOlxuICAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJ2V4cG9ydHMnXSwgZmFjdG9yeSkgOlxuICAgIChnbG9iYWwgPSB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWxUaGlzIDogZ2xvYmFsIHx8IHNlbGYsIGZhY3RvcnkoZ2xvYmFsLmFzeW5jID0ge30pKTtcbn0pKHRoaXMsIChmdW5jdGlvbiAoZXhwb3J0cykgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgY29udGludWF0aW9uIGZ1bmN0aW9uIHdpdGggc29tZSBhcmd1bWVudHMgYWxyZWFkeSBhcHBsaWVkLlxuICAgICAqXG4gICAgICogVXNlZnVsIGFzIGEgc2hvcnRoYW5kIHdoZW4gY29tYmluZWQgd2l0aCBvdGhlciBjb250cm9sIGZsb3cgZnVuY3Rpb25zLiBBbnlcbiAgICAgKiBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSByZXR1cm5lZCBmdW5jdGlvbiBhcmUgYWRkZWQgdG8gdGhlIGFyZ3VtZW50c1xuICAgICAqIG9yaWdpbmFsbHkgcGFzc2VkIHRvIGFwcGx5LlxuICAgICAqXG4gICAgICogQG5hbWUgYXBwbHlcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpVdGlsc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIC0gVGhlIGZ1bmN0aW9uIHlvdSB3YW50IHRvIGV2ZW50dWFsbHkgYXBwbHkgYWxsXG4gICAgICogYXJndW1lbnRzIHRvLiBJbnZva2VzIHdpdGggKGFyZ3VtZW50cy4uLikuXG4gICAgICogQHBhcmFtIHsuLi4qfSBhcmd1bWVudHMuLi4gLSBBbnkgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBhdXRvbWF0aWNhbGx5IGFwcGx5XG4gICAgICogd2hlbiB0aGUgY29udGludWF0aW9uIGlzIGNhbGxlZC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IHRoZSBwYXJ0aWFsbHktYXBwbGllZCBmdW5jdGlvblxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyB1c2luZyBhcHBseVxuICAgICAqIGFzeW5jLnBhcmFsbGVsKFtcbiAgICAgKiAgICAgYXN5bmMuYXBwbHkoZnMud3JpdGVGaWxlLCAndGVzdGZpbGUxJywgJ3Rlc3QxJyksXG4gICAgICogICAgIGFzeW5jLmFwcGx5KGZzLndyaXRlRmlsZSwgJ3Rlc3RmaWxlMicsICd0ZXN0MicpXG4gICAgICogXSk7XG4gICAgICpcbiAgICAgKlxuICAgICAqIC8vIHRoZSBzYW1lIHByb2Nlc3Mgd2l0aG91dCB1c2luZyBhcHBseVxuICAgICAqIGFzeW5jLnBhcmFsbGVsKFtcbiAgICAgKiAgICAgZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIGZzLndyaXRlRmlsZSgndGVzdGZpbGUxJywgJ3Rlc3QxJywgY2FsbGJhY2spO1xuICAgICAqICAgICB9LFxuICAgICAqICAgICBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgZnMud3JpdGVGaWxlKCd0ZXN0ZmlsZTInLCAndGVzdDInLCBjYWxsYmFjayk7XG4gICAgICogICAgIH1cbiAgICAgKiBdKTtcbiAgICAgKlxuICAgICAqIC8vIEl0J3MgcG9zc2libGUgdG8gcGFzcyBhbnkgbnVtYmVyIG9mIGFkZGl0aW9uYWwgYXJndW1lbnRzIHdoZW4gY2FsbGluZyB0aGVcbiAgICAgKiAvLyBjb250aW51YXRpb246XG4gICAgICpcbiAgICAgKiBub2RlPiB2YXIgZm4gPSBhc3luYy5hcHBseShzeXMucHV0cywgJ29uZScpO1xuICAgICAqIG5vZGU+IGZuKCd0d28nLCAndGhyZWUnKTtcbiAgICAgKiBvbmVcbiAgICAgKiB0d29cbiAgICAgKiB0aHJlZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGFwcGx5KGZuLCAuLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiAoLi4uY2FsbEFyZ3MpID0+IGZuKC4uLmFyZ3MsLi4uY2FsbEFyZ3MpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluaXRpYWxQYXJhbXMgKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoLi4uYXJncy8qLCBjYWxsYmFjayovKSB7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmNhbGwodGhpcywgYXJncywgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBmaWxlICovXG5cbiAgICB2YXIgaGFzUXVldWVNaWNyb3Rhc2sgPSB0eXBlb2YgcXVldWVNaWNyb3Rhc2sgPT09ICdmdW5jdGlvbicgJiYgcXVldWVNaWNyb3Rhc2s7XG4gICAgdmFyIGhhc1NldEltbWVkaWF0ZSA9IHR5cGVvZiBzZXRJbW1lZGlhdGUgPT09ICdmdW5jdGlvbicgJiYgc2V0SW1tZWRpYXRlO1xuICAgIHZhciBoYXNOZXh0VGljayA9IHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgcHJvY2Vzcy5uZXh0VGljayA9PT0gJ2Z1bmN0aW9uJztcblxuICAgIGZ1bmN0aW9uIGZhbGxiYWNrKGZuKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZm4sIDApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdyYXAoZGVmZXIpIHtcbiAgICAgICAgcmV0dXJuIChmbiwgLi4uYXJncykgPT4gZGVmZXIoKCkgPT4gZm4oLi4uYXJncykpO1xuICAgIH1cblxuICAgIHZhciBfZGVmZXIkMTtcblxuICAgIGlmIChoYXNRdWV1ZU1pY3JvdGFzaykge1xuICAgICAgICBfZGVmZXIkMSA9IHF1ZXVlTWljcm90YXNrO1xuICAgIH0gZWxzZSBpZiAoaGFzU2V0SW1tZWRpYXRlKSB7XG4gICAgICAgIF9kZWZlciQxID0gc2V0SW1tZWRpYXRlO1xuICAgIH0gZWxzZSBpZiAoaGFzTmV4dFRpY2spIHtcbiAgICAgICAgX2RlZmVyJDEgPSBwcm9jZXNzLm5leHRUaWNrO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIF9kZWZlciQxID0gZmFsbGJhY2s7XG4gICAgfVxuXG4gICAgdmFyIHNldEltbWVkaWF0ZSQxID0gd3JhcChfZGVmZXIkMSk7XG5cbiAgICAvKipcbiAgICAgKiBUYWtlIGEgc3luYyBmdW5jdGlvbiBhbmQgbWFrZSBpdCBhc3luYywgcGFzc2luZyBpdHMgcmV0dXJuIHZhbHVlIHRvIGFcbiAgICAgKiBjYWxsYmFjay4gVGhpcyBpcyB1c2VmdWwgZm9yIHBsdWdnaW5nIHN5bmMgZnVuY3Rpb25zIGludG8gYSB3YXRlcmZhbGwsXG4gICAgICogc2VyaWVzLCBvciBvdGhlciBhc3luYyBmdW5jdGlvbnMuIEFueSBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBnZW5lcmF0ZWRcbiAgICAgKiBmdW5jdGlvbiB3aWxsIGJlIHBhc3NlZCB0byB0aGUgd3JhcHBlZCBmdW5jdGlvbiAoZXhjZXB0IGZvciB0aGUgZmluYWxcbiAgICAgKiBjYWxsYmFjayBhcmd1bWVudCkuIEVycm9ycyB0aHJvd24gd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrLlxuICAgICAqXG4gICAgICogSWYgdGhlIGZ1bmN0aW9uIHBhc3NlZCB0byBgYXN5bmNpZnlgIHJldHVybnMgYSBQcm9taXNlLCB0aGF0IHByb21pc2VzJ3NcbiAgICAgKiByZXNvbHZlZC9yZWplY3RlZCBzdGF0ZSB3aWxsIGJlIHVzZWQgdG8gY2FsbCB0aGUgY2FsbGJhY2ssIHJhdGhlciB0aGFuIHNpbXBseVxuICAgICAqIHRoZSBzeW5jaHJvbm91cyByZXR1cm4gdmFsdWUuXG4gICAgICpcbiAgICAgKiBUaGlzIGFsc28gbWVhbnMgeW91IGNhbiBhc3luY2lmeSBFUzIwMTcgYGFzeW5jYCBmdW5jdGlvbnMuXG4gICAgICpcbiAgICAgKiBAbmFtZSBhc3luY2lmeVxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOlV0aWxzXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBhbGlhcyB3cmFwU3luY1xuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyAtIFRoZSBzeW5jaHJvbm91cyBmdW5jdGlvbiwgb3IgUHJvbWlzZS1yZXR1cm5pbmdcbiAgICAgKiBmdW5jdGlvbiB0byBjb252ZXJ0IHRvIGFuIHtAbGluayBBc3luY0Z1bmN0aW9ufS5cbiAgICAgKiBAcmV0dXJucyB7QXN5bmNGdW5jdGlvbn0gQW4gYXN5bmNocm9ub3VzIHdyYXBwZXIgb2YgdGhlIGBmdW5jYC4gVG8gYmVcbiAgICAgKiBpbnZva2VkIHdpdGggYChhcmdzLi4uLCBjYWxsYmFjaylgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBwYXNzaW5nIGEgcmVndWxhciBzeW5jaHJvbm91cyBmdW5jdGlvblxuICAgICAqIGFzeW5jLndhdGVyZmFsbChbXG4gICAgICogICAgIGFzeW5jLmFwcGx5KGZzLnJlYWRGaWxlLCBmaWxlbmFtZSwgXCJ1dGY4XCIpLFxuICAgICAqICAgICBhc3luYy5hc3luY2lmeShKU09OLnBhcnNlKSxcbiAgICAgKiAgICAgZnVuY3Rpb24gKGRhdGEsIG5leHQpIHtcbiAgICAgKiAgICAgICAgIC8vIGRhdGEgaXMgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIHRoZSB0ZXh0LlxuICAgICAqICAgICAgICAgLy8gSWYgdGhlcmUgd2FzIGEgcGFyc2luZyBlcnJvciwgaXQgd291bGQgaGF2ZSBiZWVuIGNhdWdodC5cbiAgICAgKiAgICAgfVxuICAgICAqIF0sIGNhbGxiYWNrKTtcbiAgICAgKlxuICAgICAqIC8vIHBhc3NpbmcgYSBmdW5jdGlvbiByZXR1cm5pbmcgYSBwcm9taXNlXG4gICAgICogYXN5bmMud2F0ZXJmYWxsKFtcbiAgICAgKiAgICAgYXN5bmMuYXBwbHkoZnMucmVhZEZpbGUsIGZpbGVuYW1lLCBcInV0ZjhcIiksXG4gICAgICogICAgIGFzeW5jLmFzeW5jaWZ5KGZ1bmN0aW9uIChjb250ZW50cykge1xuICAgICAqICAgICAgICAgcmV0dXJuIGRiLm1vZGVsLmNyZWF0ZShjb250ZW50cyk7XG4gICAgICogICAgIH0pLFxuICAgICAqICAgICBmdW5jdGlvbiAobW9kZWwsIG5leHQpIHtcbiAgICAgKiAgICAgICAgIC8vIGBtb2RlbGAgaXMgdGhlIGluc3RhbnRpYXRlZCBtb2RlbCBvYmplY3QuXG4gICAgICogICAgICAgICAvLyBJZiB0aGVyZSB3YXMgYW4gZXJyb3IsIHRoaXMgZnVuY3Rpb24gd291bGQgYmUgc2tpcHBlZC5cbiAgICAgKiAgICAgfVxuICAgICAqIF0sIGNhbGxiYWNrKTtcbiAgICAgKlxuICAgICAqIC8vIGVzMjAxNyBleGFtcGxlLCB0aG91Z2ggYGFzeW5jaWZ5YCBpcyBub3QgbmVlZGVkIGlmIHlvdXIgSlMgZW52aXJvbm1lbnRcbiAgICAgKiAvLyBzdXBwb3J0cyBhc3luYyBmdW5jdGlvbnMgb3V0IG9mIHRoZSBib3hcbiAgICAgKiB2YXIgcSA9IGFzeW5jLnF1ZXVlKGFzeW5jLmFzeW5jaWZ5KGFzeW5jIGZ1bmN0aW9uKGZpbGUpIHtcbiAgICAgKiAgICAgdmFyIGludGVybWVkaWF0ZVN0ZXAgPSBhd2FpdCBwcm9jZXNzRmlsZShmaWxlKTtcbiAgICAgKiAgICAgcmV0dXJuIGF3YWl0IHNvbWVQcm9taXNlKGludGVybWVkaWF0ZVN0ZXApXG4gICAgICogfSkpO1xuICAgICAqXG4gICAgICogcS5wdXNoKGZpbGVzKTtcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBhc3luY2lmeShmdW5jKSB7XG4gICAgICAgIGlmIChpc0FzeW5jKGZ1bmMpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3MvKiwgY2FsbGJhY2sqLykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9taXNlID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlUHJvbWlzZShwcm9taXNlLCBjYWxsYmFjaylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpbml0aWFsUGFyYW1zKGZ1bmN0aW9uIChhcmdzLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgdmFyIHJlc3VsdDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBpZiByZXN1bHQgaXMgUHJvbWlzZSBvYmplY3RcbiAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgdHlwZW9mIHJlc3VsdC50aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVByb21pc2UocmVzdWx0LCBjYWxsYmFjaylcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFuZGxlUHJvbWlzZShwcm9taXNlLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gcHJvbWlzZS50aGVuKHZhbHVlID0+IHtcbiAgICAgICAgICAgIGludm9rZUNhbGxiYWNrKGNhbGxiYWNrLCBudWxsLCB2YWx1ZSk7XG4gICAgICAgIH0sIGVyciA9PiB7XG4gICAgICAgICAgICBpbnZva2VDYWxsYmFjayhjYWxsYmFjaywgZXJyICYmIChlcnIgaW5zdGFuY2VvZiBFcnJvciB8fCBlcnIubWVzc2FnZSkgPyBlcnIgOiBuZXcgRXJyb3IoZXJyKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGludm9rZUNhbGxiYWNrKGNhbGxiYWNrLCBlcnJvciwgdmFsdWUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVycm9yLCB2YWx1ZSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgc2V0SW1tZWRpYXRlJDEoZSA9PiB7IHRocm93IGUgfSwgZXJyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQXN5bmMoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZuW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdBc3luY0Z1bmN0aW9uJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0FzeW5jR2VuZXJhdG9yKGZuKSB7XG4gICAgICAgIHJldHVybiBmbltTeW1ib2wudG9TdHJpbmdUYWddID09PSAnQXN5bmNHZW5lcmF0b3InO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQXN5bmNJdGVyYWJsZShvYmopIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBvYmpbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID09PSAnZnVuY3Rpb24nO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdyYXBBc3luYyhhc3luY0ZuKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYXN5bmNGbiAhPT0gJ2Z1bmN0aW9uJykgdGhyb3cgbmV3IEVycm9yKCdleHBlY3RlZCBhIGZ1bmN0aW9uJylcbiAgICAgICAgcmV0dXJuIGlzQXN5bmMoYXN5bmNGbikgPyBhc3luY2lmeShhc3luY0ZuKSA6IGFzeW5jRm47XG4gICAgfVxuXG4gICAgLy8gY29uZGl0aW9uYWxseSBwcm9taXNpZnkgYSBmdW5jdGlvbi5cbiAgICAvLyBvbmx5IHJldHVybiBhIHByb21pc2UgaWYgYSBjYWxsYmFjayBpcyBvbWl0dGVkXG4gICAgZnVuY3Rpb24gYXdhaXRpZnkgKGFzeW5jRm4sIGFyaXR5KSB7XG4gICAgICAgIGlmICghYXJpdHkpIGFyaXR5ID0gYXN5bmNGbi5sZW5ndGg7XG4gICAgICAgIGlmICghYXJpdHkpIHRocm93IG5ldyBFcnJvcignYXJpdHkgaXMgdW5kZWZpbmVkJylcbiAgICAgICAgZnVuY3Rpb24gYXdhaXRhYmxlICguLi5hcmdzKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGFyZ3NbYXJpdHkgLSAxXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBhc3luY0ZuLmFwcGx5KHRoaXMsIGFyZ3MpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgYXJnc1thcml0eSAtIDFdID0gKGVyciwgLi4uY2JBcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiByZWplY3QoZXJyKVxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGNiQXJncy5sZW5ndGggPiAxID8gY2JBcmdzIDogY2JBcmdzWzBdKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGFzeW5jRm4uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGF3YWl0YWJsZVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFwcGx5RWFjaCQxIChlYWNoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGFwcGx5RWFjaChmbnMsIC4uLmNhbGxBcmdzKSB7XG4gICAgICAgICAgICBjb25zdCBnbyA9IGF3YWl0aWZ5KGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgICAgICByZXR1cm4gZWFjaGZuKGZucywgKGZuLCBjYikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB3cmFwQXN5bmMoZm4pLmFwcGx5KHRoYXQsIGNhbGxBcmdzLmNvbmNhdChjYikpO1xuICAgICAgICAgICAgICAgIH0sIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGdvO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9hc3luY01hcChlYWNoZm4sIGFyciwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFyciA9IGFyciB8fCBbXTtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgICAgICB2YXIgX2l0ZXJhdGVlID0gd3JhcEFzeW5jKGl0ZXJhdGVlKTtcblxuICAgICAgICByZXR1cm4gZWFjaGZuKGFyciwgKHZhbHVlLCBfLCBpdGVyQ2IpID0+IHtcbiAgICAgICAgICAgIHZhciBpbmRleCA9IGNvdW50ZXIrKztcbiAgICAgICAgICAgIF9pdGVyYXRlZSh2YWx1ZSwgKGVyciwgdikgPT4ge1xuICAgICAgICAgICAgICAgIHJlc3VsdHNbaW5kZXhdID0gdjtcbiAgICAgICAgICAgICAgICBpdGVyQ2IoZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBlcnIgPT4ge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNBcnJheUxpa2UodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlICYmXG4gICAgICAgICAgICB0eXBlb2YgdmFsdWUubGVuZ3RoID09PSAnbnVtYmVyJyAmJlxuICAgICAgICAgICAgdmFsdWUubGVuZ3RoID49IDAgJiZcbiAgICAgICAgICAgIHZhbHVlLmxlbmd0aCAlIDEgPT09IDA7XG4gICAgfVxuXG4gICAgLy8gQSB0ZW1wb3JhcnkgdmFsdWUgdXNlZCB0byBpZGVudGlmeSBpZiB0aGUgbG9vcCBzaG91bGQgYmUgYnJva2VuLlxuICAgIC8vIFNlZSAjMTA2NCwgIzEyOTNcbiAgICBjb25zdCBicmVha0xvb3AgPSB7fTtcblxuICAgIGZ1bmN0aW9uIG9uY2UoZm4pIHtcbiAgICAgICAgZnVuY3Rpb24gd3JhcHBlciAoLi4uYXJncykge1xuICAgICAgICAgICAgaWYgKGZuID09PSBudWxsKSByZXR1cm47XG4gICAgICAgICAgICB2YXIgY2FsbEZuID0gZm47XG4gICAgICAgICAgICBmbiA9IG51bGw7XG4gICAgICAgICAgICBjYWxsRm4uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih3cmFwcGVyLCBmbik7XG4gICAgICAgIHJldHVybiB3cmFwcGVyXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0SXRlcmF0b3IgKGNvbGwpIHtcbiAgICAgICAgcmV0dXJuIGNvbGxbU3ltYm9sLml0ZXJhdG9yXSAmJiBjb2xsW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVBcnJheUl0ZXJhdG9yKGNvbGwpIHtcbiAgICAgICAgdmFyIGkgPSAtMTtcbiAgICAgICAgdmFyIGxlbiA9IGNvbGwubGVuZ3RoO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICAgIHJldHVybiArK2kgPCBsZW4gPyB7dmFsdWU6IGNvbGxbaV0sIGtleTogaX0gOiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlRVMyMDE1SXRlcmF0b3IoaXRlcmF0b3IpIHtcbiAgICAgICAgdmFyIGkgPSAtMTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgICB2YXIgaXRlbSA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgICAgIGlmIChpdGVtLmRvbmUpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBpKys7XG4gICAgICAgICAgICByZXR1cm4ge3ZhbHVlOiBpdGVtLnZhbHVlLCBrZXk6IGl9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlT2JqZWN0SXRlcmF0b3Iob2JqKSB7XG4gICAgICAgIHZhciBva2V5cyA9IG9iaiA/IE9iamVjdC5rZXlzKG9iaikgOiBbXTtcbiAgICAgICAgdmFyIGkgPSAtMTtcbiAgICAgICAgdmFyIGxlbiA9IG9rZXlzLmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgICB2YXIga2V5ID0gb2tleXNbKytpXTtcbiAgICAgICAgICAgIGlmIChrZXkgPT09ICdfX3Byb3RvX18nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBpIDwgbGVuID8ge3ZhbHVlOiBvYmpba2V5XSwga2V5fSA6IG51bGw7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlSXRlcmF0b3IoY29sbCkge1xuICAgICAgICBpZiAoaXNBcnJheUxpa2UoY29sbCkpIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVBcnJheUl0ZXJhdG9yKGNvbGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGl0ZXJhdG9yID0gZ2V0SXRlcmF0b3IoY29sbCk7XG4gICAgICAgIHJldHVybiBpdGVyYXRvciA/IGNyZWF0ZUVTMjAxNUl0ZXJhdG9yKGl0ZXJhdG9yKSA6IGNyZWF0ZU9iamVjdEl0ZXJhdG9yKGNvbGwpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9ubHlPbmNlKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgICAgICAgICAgaWYgKGZuID09PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoXCJDYWxsYmFjayB3YXMgYWxyZWFkeSBjYWxsZWQuXCIpO1xuICAgICAgICAgICAgdmFyIGNhbGxGbiA9IGZuO1xuICAgICAgICAgICAgZm4gPSBudWxsO1xuICAgICAgICAgICAgY2FsbEZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIGZvciBhc3luYyBnZW5lcmF0b3JzXG4gICAgZnVuY3Rpb24gYXN5bmNFYWNoT2ZMaW1pdChnZW5lcmF0b3IsIGxpbWl0LCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgbGV0IGRvbmUgPSBmYWxzZTtcbiAgICAgICAgbGV0IGNhbmNlbGVkID0gZmFsc2U7XG4gICAgICAgIGxldCBhd2FpdGluZyA9IGZhbHNlO1xuICAgICAgICBsZXQgcnVubmluZyA9IDA7XG4gICAgICAgIGxldCBpZHggPSAwO1xuXG4gICAgICAgIGZ1bmN0aW9uIHJlcGxlbmlzaCgpIHtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ3JlcGxlbmlzaCcpXG4gICAgICAgICAgICBpZiAocnVubmluZyA+PSBsaW1pdCB8fCBhd2FpdGluZyB8fCBkb25lKSByZXR1cm5cbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ3JlcGxlbmlzaCBhd2FpdGluZycpXG4gICAgICAgICAgICBhd2FpdGluZyA9IHRydWU7XG4gICAgICAgICAgICBnZW5lcmF0b3IubmV4dCgpLnRoZW4oKHt2YWx1ZSwgZG9uZTogaXRlckRvbmV9KSA9PiB7XG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnZ290IHZhbHVlJywgdmFsdWUpXG4gICAgICAgICAgICAgICAgaWYgKGNhbmNlbGVkIHx8IGRvbmUpIHJldHVyblxuICAgICAgICAgICAgICAgIGF3YWl0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZXJEb25lKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAocnVubmluZyA8PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdkb25lIG5leHRDYicpXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJ1bm5pbmcrKztcbiAgICAgICAgICAgICAgICBpdGVyYXRlZSh2YWx1ZSwgaWR4LCBpdGVyYXRlZUNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICBpZHgrKztcbiAgICAgICAgICAgICAgICByZXBsZW5pc2goKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGhhbmRsZUVycm9yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGl0ZXJhdGVlQ2FsbGJhY2soZXJyLCByZXN1bHQpIHtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ2l0ZXJhdGVlQ2FsbGJhY2snKVxuICAgICAgICAgICAgcnVubmluZyAtPSAxO1xuICAgICAgICAgICAgaWYgKGNhbmNlbGVkKSByZXR1cm5cbiAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBoYW5kbGVFcnJvcihlcnIpXG5cbiAgICAgICAgICAgIGlmIChlcnIgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgY2FuY2VsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVzdWx0ID09PSBicmVha0xvb3AgfHwgKGRvbmUgJiYgcnVubmluZyA8PSAwKSkge1xuICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ2RvbmUgaXRlckNiJylcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXBsZW5pc2goKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGhhbmRsZUVycm9yKGVycikge1xuICAgICAgICAgICAgaWYgKGNhbmNlbGVkKSByZXR1cm5cbiAgICAgICAgICAgIGF3YWl0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgIH1cblxuICAgICAgICByZXBsZW5pc2goKTtcbiAgICB9XG5cbiAgICB2YXIgZWFjaE9mTGltaXQkMiA9IChsaW1pdCkgPT4ge1xuICAgICAgICByZXR1cm4gKG9iaiwgaXRlcmF0ZWUsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IG9uY2UoY2FsbGJhY2spO1xuICAgICAgICAgICAgaWYgKGxpbWl0IDw9IDApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignY29uY3VycmVuY3kgbGltaXQgY2Fubm90IGJlIGxlc3MgdGhhbiAxJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghb2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzQXN5bmNHZW5lcmF0b3Iob2JqKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhc3luY0VhY2hPZkxpbWl0KG9iaiwgbGltaXQsIGl0ZXJhdGVlLCBjYWxsYmFjaylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc0FzeW5jSXRlcmFibGUob2JqKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhc3luY0VhY2hPZkxpbWl0KG9ialtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSwgbGltaXQsIGl0ZXJhdGVlLCBjYWxsYmFjaylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBuZXh0RWxlbSA9IGNyZWF0ZUl0ZXJhdG9yKG9iaik7XG4gICAgICAgICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgdmFyIGNhbmNlbGVkID0gZmFsc2U7XG4gICAgICAgICAgICB2YXIgcnVubmluZyA9IDA7XG4gICAgICAgICAgICB2YXIgbG9vcGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICBmdW5jdGlvbiBpdGVyYXRlZUNhbGxiYWNrKGVyciwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2FuY2VsZWQpIHJldHVyblxuICAgICAgICAgICAgICAgIHJ1bm5pbmcgLT0gMTtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChlcnIgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBjYW5jZWxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlID09PSBicmVha0xvb3AgfHwgKGRvbmUgJiYgcnVubmluZyA8PSAwKSkge1xuICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICghbG9vcGluZykge1xuICAgICAgICAgICAgICAgICAgICByZXBsZW5pc2goKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIHJlcGxlbmlzaCAoKSB7XG4gICAgICAgICAgICAgICAgbG9vcGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgd2hpbGUgKHJ1bm5pbmcgPCBsaW1pdCAmJiAhZG9uZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZWxlbSA9IG5leHRFbGVtKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlbGVtID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChydW5uaW5nIDw9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBydW5uaW5nICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGl0ZXJhdGVlKGVsZW0udmFsdWUsIGVsZW0ua2V5LCBvbmx5T25jZShpdGVyYXRlZUNhbGxiYWNrKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxvb3BpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVwbGVuaXNoKCk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzYW1lIGFzIFtgZWFjaE9mYF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmVhY2hPZn0gYnV0IHJ1bnMgYSBtYXhpbXVtIG9mIGBsaW1pdGAgYXN5bmMgb3BlcmF0aW9ucyBhdCBhXG4gICAgICogdGltZS5cbiAgICAgKlxuICAgICAqIEBuYW1lIGVhY2hPZkxpbWl0XG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMuZWFjaE9mXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZWFjaE9mfVxuICAgICAqIEBhbGlhcyBmb3JFYWNoT2ZMaW1pdFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbWl0IC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGFzeW5jIG9wZXJhdGlvbnMgYXQgYSB0aW1lLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBbiBhc3luYyBmdW5jdGlvbiB0byBhcHBseSB0byBlYWNoXG4gICAgICogaXRlbSBpbiBgY29sbGAuIFRoZSBga2V5YCBpcyB0aGUgaXRlbSdzIGtleSwgb3IgaW5kZXggaW4gdGhlIGNhc2Ugb2YgYW5cbiAgICAgKiBhcnJheS5cbiAgICAgKiBJbnZva2VkIHdpdGggKGl0ZW0sIGtleSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCB3aGVuIGFsbFxuICAgICAqIGBpdGVyYXRlZWAgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQsIG9yIGFuIGVycm9yIG9jY3Vycy4gSW52b2tlZCB3aXRoIChlcnIpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIGEgY2FsbGJhY2sgaXMgb21pdHRlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGVhY2hPZkxpbWl0KGNvbGwsIGxpbWl0LCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGVhY2hPZkxpbWl0JDIobGltaXQpKGNvbGwsIHdyYXBBc3luYyhpdGVyYXRlZSksIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICB2YXIgZWFjaE9mTGltaXQkMSA9IGF3YWl0aWZ5KGVhY2hPZkxpbWl0LCA0KTtcblxuICAgIC8vIGVhY2hPZiBpbXBsZW1lbnRhdGlvbiBvcHRpbWl6ZWQgZm9yIGFycmF5LWxpa2VzXG4gICAgZnVuY3Rpb24gZWFjaE9mQXJyYXlMaWtlKGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IG9uY2UoY2FsbGJhY2spO1xuICAgICAgICB2YXIgaW5kZXggPSAwLFxuICAgICAgICAgICAgY29tcGxldGVkID0gMCxcbiAgICAgICAgICAgIHtsZW5ndGh9ID0gY29sbCxcbiAgICAgICAgICAgIGNhbmNlbGVkID0gZmFsc2U7XG4gICAgICAgIGlmIChsZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gaXRlcmF0b3JDYWxsYmFjayhlcnIsIHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoZXJyID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIGNhbmNlbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjYW5jZWxlZCA9PT0gdHJ1ZSkgcmV0dXJuXG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoKCsrY29tcGxldGVkID09PSBsZW5ndGgpIHx8IHZhbHVlID09PSBicmVha0xvb3ApIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgaXRlcmF0ZWUoY29sbFtpbmRleF0sIGluZGV4LCBvbmx5T25jZShpdGVyYXRvckNhbGxiYWNrKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBhIGdlbmVyaWMgdmVyc2lvbiBvZiBlYWNoT2Ygd2hpY2ggY2FuIGhhbmRsZSBhcnJheSwgb2JqZWN0LCBhbmQgaXRlcmF0b3IgY2FzZXMuXG4gICAgZnVuY3Rpb24gZWFjaE9mR2VuZXJpYyAoY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBlYWNoT2ZMaW1pdCQxKGNvbGwsIEluZmluaXR5LCBpdGVyYXRlZSwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExpa2UgW2BlYWNoYF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmVhY2h9LCBleGNlcHQgdGhhdCBpdCBwYXNzZXMgdGhlIGtleSAob3IgaW5kZXgpIGFzIHRoZSBzZWNvbmQgYXJndW1lbnRcbiAgICAgKiB0byB0aGUgaXRlcmF0ZWUuXG4gICAgICpcbiAgICAgKiBAbmFtZSBlYWNoT2ZcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAYWxpYXMgZm9yRWFjaE9mXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAc2VlIFthc3luYy5lYWNoXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZWFjaH1cbiAgICAgKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfEFzeW5jSXRlcmFibGV8T2JqZWN0fSBjb2xsIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQSBmdW5jdGlvbiB0byBhcHBseSB0byBlYWNoXG4gICAgICogaXRlbSBpbiBgY29sbGAuXG4gICAgICogVGhlIGBrZXlgIGlzIHRoZSBpdGVtJ3Mga2V5LCBvciBpbmRleCBpbiB0aGUgY2FzZSBvZiBhbiBhcnJheS5cbiAgICAgKiBJbnZva2VkIHdpdGggKGl0ZW0sIGtleSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCB3aGVuIGFsbFxuICAgICAqIGBpdGVyYXRlZWAgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQsIG9yIGFuIGVycm9yIG9jY3Vycy4gSW52b2tlZCB3aXRoIChlcnIpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIGEgY2FsbGJhY2sgaXMgb21pdHRlZFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBkZXYuanNvbiBpcyBhIGZpbGUgY29udGFpbmluZyBhIHZhbGlkIGpzb24gb2JqZWN0IGNvbmZpZyBmb3IgZGV2IGVudmlyb25tZW50XG4gICAgICogLy8gZGV2Lmpzb24gaXMgYSBmaWxlIGNvbnRhaW5pbmcgYSB2YWxpZCBqc29uIG9iamVjdCBjb25maWcgZm9yIHRlc3QgZW52aXJvbm1lbnRcbiAgICAgKiAvLyBwcm9kLmpzb24gaXMgYSBmaWxlIGNvbnRhaW5pbmcgYSB2YWxpZCBqc29uIG9iamVjdCBjb25maWcgZm9yIHByb2QgZW52aXJvbm1lbnRcbiAgICAgKiAvLyBpbnZhbGlkLmpzb24gaXMgYSBmaWxlIHdpdGggYSBtYWxmb3JtZWQganNvbiBvYmplY3RcbiAgICAgKlxuICAgICAqIGxldCBjb25maWdzID0ge307IC8vZ2xvYmFsIHZhcmlhYmxlXG4gICAgICogbGV0IHZhbGlkQ29uZmlnRmlsZU1hcCA9IHtkZXY6ICdkZXYuanNvbicsIHRlc3Q6ICd0ZXN0Lmpzb24nLCBwcm9kOiAncHJvZC5qc29uJ307XG4gICAgICogbGV0IGludmFsaWRDb25maWdGaWxlTWFwID0ge2RldjogJ2Rldi5qc29uJywgdGVzdDogJ3Rlc3QuanNvbicsIGludmFsaWQ6ICdpbnZhbGlkLmpzb24nfTtcbiAgICAgKlxuICAgICAqIC8vIGFzeW5jaHJvbm91cyBmdW5jdGlvbiB0aGF0IHJlYWRzIGEganNvbiBmaWxlIGFuZCBwYXJzZXMgdGhlIGNvbnRlbnRzIGFzIGpzb24gb2JqZWN0XG4gICAgICogZnVuY3Rpb24gcGFyc2VGaWxlKGZpbGUsIGtleSwgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgZnMucmVhZEZpbGUoZmlsZSwgXCJ1dGY4XCIsIGZ1bmN0aW9uKGVyciwgZGF0YSkge1xuICAgICAqICAgICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGJhY2soZXJyKTtcbiAgICAgKiAgICAgICAgIHRyeSB7XG4gICAgICogICAgICAgICAgICAgY29uZmlnc1trZXldID0gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgKiAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgKiAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZSk7XG4gICAgICogICAgICAgICB9XG4gICAgICogICAgICAgICBjYWxsYmFjaygpO1xuICAgICAqICAgICB9KTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBjYWxsYmFja3NcbiAgICAgKiBhc3luYy5mb3JFYWNoT2YodmFsaWRDb25maWdGaWxlTWFwLCBwYXJzZUZpbGUsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgKiAgICAgaWYgKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAqICAgICB9IGVsc2Uge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coY29uZmlncyk7XG4gICAgICogICAgICAgICAvLyBjb25maWdzIGlzIG5vdyBhIG1hcCBvZiBKU09OIGRhdGEsIGUuZy5cbiAgICAgKiAgICAgICAgIC8vIHsgZGV2OiAvL3BhcnNlZCBkZXYuanNvbiwgdGVzdDogLy9wYXJzZWQgdGVzdC5qc29uLCBwcm9kOiAvL3BhcnNlZCBwcm9kLmpzb259XG4gICAgICogICAgIH1cbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vRXJyb3IgaGFuZGluZ1xuICAgICAqIGFzeW5jLmZvckVhY2hPZihpbnZhbGlkQ29uZmlnRmlsZU1hcCwgcGFyc2VGaWxlLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICogICAgIGlmIChlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgKiAgICAgICAgIC8vIEpTT04gcGFyc2UgZXJyb3IgZXhjZXB0aW9uXG4gICAgICogICAgIH0gZWxzZSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhjb25maWdzKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgUHJvbWlzZXNcbiAgICAgKiBhc3luYy5mb3JFYWNoT2YodmFsaWRDb25maWdGaWxlTWFwLCBwYXJzZUZpbGUpXG4gICAgICogLnRoZW4oICgpID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coY29uZmlncyk7XG4gICAgICogICAgIC8vIGNvbmZpZ3MgaXMgbm93IGEgbWFwIG9mIEpTT04gZGF0YSwgZS5nLlxuICAgICAqICAgICAvLyB7IGRldjogLy9wYXJzZWQgZGV2Lmpzb24sIHRlc3Q6IC8vcGFyc2VkIHRlc3QuanNvbiwgcHJvZDogLy9wYXJzZWQgcHJvZC5qc29ufVxuICAgICAqIH0pLmNhdGNoKCBlcnIgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvL0Vycm9yIGhhbmRpbmdcbiAgICAgKiBhc3luYy5mb3JFYWNoT2YoaW52YWxpZENvbmZpZ0ZpbGVNYXAsIHBhcnNlRmlsZSlcbiAgICAgKiAudGhlbiggKCkgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhjb25maWdzKTtcbiAgICAgKiB9KS5jYXRjaCggZXJyID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAqICAgICAvLyBKU09OIHBhcnNlIGVycm9yIGV4Y2VwdGlvblxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgYXN5bmMvYXdhaXRcbiAgICAgKiBhc3luYyAoKSA9PiB7XG4gICAgICogICAgIHRyeSB7XG4gICAgICogICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgYXN5bmMuZm9yRWFjaE9mKHZhbGlkQ29uZmlnRmlsZU1hcCwgcGFyc2VGaWxlKTtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGNvbmZpZ3MpO1xuICAgICAqICAgICAgICAgLy8gY29uZmlncyBpcyBub3cgYSBtYXAgb2YgSlNPTiBkYXRhLCBlLmcuXG4gICAgICogICAgICAgICAvLyB7IGRldjogLy9wYXJzZWQgZGV2Lmpzb24sIHRlc3Q6IC8vcGFyc2VkIHRlc3QuanNvbiwgcHJvZDogLy9wYXJzZWQgcHJvZC5qc29ufVxuICAgICAqICAgICB9XG4gICAgICogICAgIGNhdGNoIChlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgIH1cbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvL0Vycm9yIGhhbmRpbmdcbiAgICAgKiBhc3luYyAoKSA9PiB7XG4gICAgICogICAgIHRyeSB7XG4gICAgICogICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgYXN5bmMuZm9yRWFjaE9mKGludmFsaWRDb25maWdGaWxlTWFwLCBwYXJzZUZpbGUpO1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coY29uZmlncyk7XG4gICAgICogICAgIH1cbiAgICAgKiAgICAgY2F0Y2ggKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgICAgIC8vIEpTT04gcGFyc2UgZXJyb3IgZXhjZXB0aW9uXG4gICAgICogICAgIH1cbiAgICAgKiB9XG4gICAgICpcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBlYWNoT2YoY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBlYWNoT2ZJbXBsZW1lbnRhdGlvbiA9IGlzQXJyYXlMaWtlKGNvbGwpID8gZWFjaE9mQXJyYXlMaWtlIDogZWFjaE9mR2VuZXJpYztcbiAgICAgICAgcmV0dXJuIGVhY2hPZkltcGxlbWVudGF0aW9uKGNvbGwsIHdyYXBBc3luYyhpdGVyYXRlZSksIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICB2YXIgZWFjaE9mJDEgPSBhd2FpdGlmeShlYWNoT2YsIDMpO1xuXG4gICAgLyoqXG4gICAgICogUHJvZHVjZXMgYSBuZXcgY29sbGVjdGlvbiBvZiB2YWx1ZXMgYnkgbWFwcGluZyBlYWNoIHZhbHVlIGluIGBjb2xsYCB0aHJvdWdoXG4gICAgICogdGhlIGBpdGVyYXRlZWAgZnVuY3Rpb24uIFRoZSBgaXRlcmF0ZWVgIGlzIGNhbGxlZCB3aXRoIGFuIGl0ZW0gZnJvbSBgY29sbGBcbiAgICAgKiBhbmQgYSBjYWxsYmFjayBmb3Igd2hlbiBpdCBoYXMgZmluaXNoZWQgcHJvY2Vzc2luZy4gRWFjaCBvZiB0aGVzZSBjYWxsYmFja3NcbiAgICAgKiB0YWtlcyAyIGFyZ3VtZW50czogYW4gYGVycm9yYCwgYW5kIHRoZSB0cmFuc2Zvcm1lZCBpdGVtIGZyb20gYGNvbGxgLiBJZlxuICAgICAqIGBpdGVyYXRlZWAgcGFzc2VzIGFuIGVycm9yIHRvIGl0cyBjYWxsYmFjaywgdGhlIG1haW4gYGNhbGxiYWNrYCAoZm9yIHRoZVxuICAgICAqIGBtYXBgIGZ1bmN0aW9uKSBpcyBpbW1lZGlhdGVseSBjYWxsZWQgd2l0aCB0aGUgZXJyb3IuXG4gICAgICpcbiAgICAgKiBOb3RlLCB0aGF0IHNpbmNlIHRoaXMgZnVuY3Rpb24gYXBwbGllcyB0aGUgYGl0ZXJhdGVlYCB0byBlYWNoIGl0ZW0gaW5cbiAgICAgKiBwYXJhbGxlbCwgdGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgdGhlIGBpdGVyYXRlZWAgZnVuY3Rpb25zIHdpbGwgY29tcGxldGVcbiAgICAgKiBpbiBvcmRlci4gSG93ZXZlciwgdGhlIHJlc3VsdHMgYXJyYXkgd2lsbCBiZSBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGVcbiAgICAgKiBvcmlnaW5hbCBgY29sbGAuXG4gICAgICpcbiAgICAgKiBJZiBgbWFwYCBpcyBwYXNzZWQgYW4gT2JqZWN0LCB0aGUgcmVzdWx0cyB3aWxsIGJlIGFuIEFycmF5LiAgVGhlIHJlc3VsdHNcbiAgICAgKiB3aWxsIHJvdWdobHkgYmUgaW4gdGhlIG9yZGVyIG9mIHRoZSBvcmlnaW5hbCBPYmplY3RzJyBrZXlzIChidXQgdGhpcyBjYW5cbiAgICAgKiB2YXJ5IGFjcm9zcyBKYXZhU2NyaXB0IGVuZ2luZXMpLlxuICAgICAqXG4gICAgICogQG5hbWUgbWFwXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfEFzeW5jSXRlcmFibGV8T2JqZWN0fSBjb2xsIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQW4gYXN5bmMgZnVuY3Rpb24gdG8gYXBwbHkgdG8gZWFjaCBpdGVtIGluXG4gICAgICogYGNvbGxgLlxuICAgICAqIFRoZSBpdGVyYXRlZSBzaG91bGQgY29tcGxldGUgd2l0aCB0aGUgdHJhbnNmb3JtZWQgaXRlbS5cbiAgICAgKiBJbnZva2VkIHdpdGggKGl0ZW0sIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgd2hlbiBhbGwgYGl0ZXJhdGVlYFxuICAgICAqIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLCBvciBhbiBlcnJvciBvY2N1cnMuIFJlc3VsdHMgaXMgYW4gQXJyYXkgb2YgdGhlXG4gICAgICogdHJhbnNmb3JtZWQgaXRlbXMgZnJvbSB0aGUgYGNvbGxgLiBJbnZva2VkIHdpdGggKGVyciwgcmVzdWx0cykuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgaXMgcGFzc2VkXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vIGZpbGUxLnR4dCBpcyBhIGZpbGUgdGhhdCBpcyAxMDAwIGJ5dGVzIGluIHNpemVcbiAgICAgKiAvLyBmaWxlMi50eHQgaXMgYSBmaWxlIHRoYXQgaXMgMjAwMCBieXRlcyBpbiBzaXplXG4gICAgICogLy8gZmlsZTMudHh0IGlzIGEgZmlsZSB0aGF0IGlzIDMwMDAgYnl0ZXMgaW4gc2l6ZVxuICAgICAqIC8vIGZpbGU0LnR4dCBkb2VzIG5vdCBleGlzdFxuICAgICAqXG4gICAgICogY29uc3QgZmlsZUxpc3QgPSBbJ2ZpbGUxLnR4dCcsJ2ZpbGUyLnR4dCcsJ2ZpbGUzLnR4dCddO1xuICAgICAqIGNvbnN0IHdpdGhNaXNzaW5nRmlsZUxpc3QgPSBbJ2ZpbGUxLnR4dCcsJ2ZpbGUyLnR4dCcsJ2ZpbGU0LnR4dCddO1xuICAgICAqXG4gICAgICogLy8gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgZmlsZSBzaXplIGluIGJ5dGVzXG4gICAgICogZnVuY3Rpb24gZ2V0RmlsZVNpemVJbkJ5dGVzKGZpbGUsIGNhbGxiYWNrKSB7XG4gICAgICogICAgIGZzLnN0YXQoZmlsZSwgZnVuY3Rpb24oZXJyLCBzdGF0KSB7XG4gICAgICogICAgICAgICBpZiAoZXJyKSB7XG4gICAgICogICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICogICAgICAgICB9XG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCBzdGF0LnNpemUpO1xuICAgICAqICAgICB9KTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBjYWxsYmFja3NcbiAgICAgKiBhc3luYy5tYXAoZmlsZUxpc3QsIGdldEZpbGVTaXplSW5CeXRlcywgZnVuY3Rpb24oZXJyLCByZXN1bHRzKSB7XG4gICAgICogICAgIGlmIChlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgIH0gZWxzZSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiAgICAgICAgIC8vIHJlc3VsdHMgaXMgbm93IGFuIGFycmF5IG9mIHRoZSBmaWxlIHNpemUgaW4gYnl0ZXMgZm9yIGVhY2ggZmlsZSwgZS5nLlxuICAgICAqICAgICAgICAgLy8gWyAxMDAwLCAyMDAwLCAzMDAwXVxuICAgICAqICAgICB9XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBFcnJvciBIYW5kbGluZ1xuICAgICAqIGFzeW5jLm1hcCh3aXRoTWlzc2luZ0ZpbGVMaXN0LCBnZXRGaWxlU2l6ZUluQnl0ZXMsIGZ1bmN0aW9uKGVyciwgcmVzdWx0cykge1xuICAgICAqICAgICBpZiAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICAgICAgLy8gWyBFcnJvcjogRU5PRU5UOiBubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IF1cbiAgICAgKiAgICAgfSBlbHNlIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgICB9XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBQcm9taXNlc1xuICAgICAqIGFzeW5jLm1hcChmaWxlTGlzdCwgZ2V0RmlsZVNpemVJbkJ5dGVzKVxuICAgICAqIC50aGVuKCByZXN1bHRzID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgIC8vIHJlc3VsdHMgaXMgbm93IGFuIGFycmF5IG9mIHRoZSBmaWxlIHNpemUgaW4gYnl0ZXMgZm9yIGVhY2ggZmlsZSwgZS5nLlxuICAgICAqICAgICAvLyBbIDEwMDAsIDIwMDAsIDMwMDBdXG4gICAgICogfSkuY2F0Y2goIGVyciA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBFcnJvciBIYW5kbGluZ1xuICAgICAqIGFzeW5jLm1hcCh3aXRoTWlzc2luZ0ZpbGVMaXN0LCBnZXRGaWxlU2l6ZUluQnl0ZXMpXG4gICAgICogLnRoZW4oIHJlc3VsdHMgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiB9KS5jYXRjaCggZXJyID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgLy8gWyBFcnJvcjogRU5PRU5UOiBubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IF1cbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIGFzeW5jL2F3YWl0XG4gICAgICogYXN5bmMgKCkgPT4ge1xuICAgICAqICAgICB0cnkge1xuICAgICAqICAgICAgICAgbGV0IHJlc3VsdHMgPSBhd2FpdCBhc3luYy5tYXAoZmlsZUxpc3QsIGdldEZpbGVTaXplSW5CeXRlcyk7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiAgICAgICAgIC8vIHJlc3VsdHMgaXMgbm93IGFuIGFycmF5IG9mIHRoZSBmaWxlIHNpemUgaW4gYnl0ZXMgZm9yIGVhY2ggZmlsZSwgZS5nLlxuICAgICAqICAgICAgICAgLy8gWyAxMDAwLCAyMDAwLCAzMDAwXVxuICAgICAqICAgICB9XG4gICAgICogICAgIGNhdGNoIChlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgIH1cbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBFcnJvciBIYW5kbGluZ1xuICAgICAqIGFzeW5jICgpID0+IHtcbiAgICAgKiAgICAgdHJ5IHtcbiAgICAgKiAgICAgICAgIGxldCByZXN1bHRzID0gYXdhaXQgYXN5bmMubWFwKHdpdGhNaXNzaW5nRmlsZUxpc3QsIGdldEZpbGVTaXplSW5CeXRlcyk7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICAgICAgLy8gWyBFcnJvcjogRU5PRU5UOiBubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IF1cbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1hcCAoY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBfYXN5bmNNYXAoZWFjaE9mJDEsIGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaylcbiAgICB9XG4gICAgdmFyIG1hcCQxID0gYXdhaXRpZnkobWFwLCAzKTtcblxuICAgIC8qKlxuICAgICAqIEFwcGxpZXMgdGhlIHByb3ZpZGVkIGFyZ3VtZW50cyB0byBlYWNoIGZ1bmN0aW9uIGluIHRoZSBhcnJheSwgY2FsbGluZ1xuICAgICAqIGBjYWxsYmFja2AgYWZ0ZXIgYWxsIGZ1bmN0aW9ucyBoYXZlIGNvbXBsZXRlZC4gSWYgeW91IG9ubHkgcHJvdmlkZSB0aGUgZmlyc3RcbiAgICAgKiBhcmd1bWVudCwgYGZuc2AsIHRoZW4gaXQgd2lsbCByZXR1cm4gYSBmdW5jdGlvbiB3aGljaCBsZXRzIHlvdSBwYXNzIGluIHRoZVxuICAgICAqIGFyZ3VtZW50cyBhcyBpZiBpdCB3ZXJlIGEgc2luZ2xlIGZ1bmN0aW9uIGNhbGwuIElmIG1vcmUgYXJndW1lbnRzIGFyZVxuICAgICAqIHByb3ZpZGVkLCBgY2FsbGJhY2tgIGlzIHJlcXVpcmVkIHdoaWxlIGBhcmdzYCBpcyBzdGlsbCBvcHRpb25hbC4gVGhlIHJlc3VsdHNcbiAgICAgKiBmb3IgZWFjaCBvZiB0aGUgYXBwbGllZCBhc3luYyBmdW5jdGlvbnMgYXJlIHBhc3NlZCB0byB0aGUgZmluYWwgY2FsbGJhY2tcbiAgICAgKiBhcyBhbiBhcnJheS5cbiAgICAgKlxuICAgICAqIEBuYW1lIGFwcGx5RWFjaFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbnRyb2xGbG93XG4gICAgICogQG1ldGhvZFxuICAgICAqIEBjYXRlZ29yeSBDb250cm9sIEZsb3dcbiAgICAgKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfEFzeW5jSXRlcmFibGV8T2JqZWN0fSBmbnMgLSBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIEFzeW5jRnVuY3Rpb259c1xuICAgICAqIHRvIGFsbCBjYWxsIHdpdGggdGhlIHNhbWUgYXJndW1lbnRzXG4gICAgICogQHBhcmFtIHsuLi4qfSBbYXJnc10gLSBhbnkgbnVtYmVyIG9mIHNlcGFyYXRlIGFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZVxuICAgICAqIGZ1bmN0aW9uLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSB0aGUgZmluYWwgYXJndW1lbnQgc2hvdWxkIGJlIHRoZSBjYWxsYmFjayxcbiAgICAgKiBjYWxsZWQgd2hlbiBhbGwgZnVuY3Rpb25zIGhhdmUgY29tcGxldGVkIHByb2Nlc3NpbmcuXG4gICAgICogQHJldHVybnMge0FzeW5jRnVuY3Rpb259IC0gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgdGFrZXMgbm8gYXJncyBvdGhlciB0aGFuXG4gICAgICogYW4gb3B0aW9uYWwgY2FsbGJhY2ssIHRoYXQgaXMgdGhlIHJlc3VsdCBvZiBhcHBseWluZyB0aGUgYGFyZ3NgIHRvIGVhY2hcbiAgICAgKiBvZiB0aGUgZnVuY3Rpb25zLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBjb25zdCBhcHBsaWVkRm4gPSBhc3luYy5hcHBseUVhY2goW2VuYWJsZVNlYXJjaCwgdXBkYXRlU2NoZW1hXSwgJ2J1Y2tldCcpXG4gICAgICpcbiAgICAgKiBhcHBsaWVkRm4oKGVyciwgcmVzdWx0cykgPT4ge1xuICAgICAqICAgICAvLyByZXN1bHRzWzBdIGlzIHRoZSByZXN1bHRzIGZvciBgZW5hYmxlU2VhcmNoYFxuICAgICAqICAgICAvLyByZXN1bHRzWzFdIGlzIHRoZSByZXN1bHRzIGZvciBgdXBkYXRlU2NoZW1hYFxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gcGFydGlhbCBhcHBsaWNhdGlvbiBleGFtcGxlOlxuICAgICAqIGFzeW5jLmVhY2goXG4gICAgICogICAgIGJ1Y2tldHMsXG4gICAgICogICAgIGFzeW5jIChidWNrZXQpID0+IGFzeW5jLmFwcGx5RWFjaChbZW5hYmxlU2VhcmNoLCB1cGRhdGVTY2hlbWFdLCBidWNrZXQpKCksXG4gICAgICogICAgIGNhbGxiYWNrXG4gICAgICogKTtcbiAgICAgKi9cbiAgICB2YXIgYXBwbHlFYWNoID0gYXBwbHlFYWNoJDEobWFwJDEpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNhbWUgYXMgW2BlYWNoT2ZgXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZWFjaE9mfSBidXQgcnVucyBvbmx5IGEgc2luZ2xlIGFzeW5jIG9wZXJhdGlvbiBhdCBhIHRpbWUuXG4gICAgICpcbiAgICAgKiBAbmFtZSBlYWNoT2ZTZXJpZXNcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5lYWNoT2Zde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5lYWNoT2Z9XG4gICAgICogQGFsaWFzIGZvckVhY2hPZlNlcmllc1xuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEFuIGFzeW5jIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggaXRlbSBpblxuICAgICAqIGBjb2xsYC5cbiAgICAgKiBJbnZva2VkIHdpdGggKGl0ZW0sIGtleSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCB3aGVuIGFsbCBgaXRlcmF0ZWVgXG4gICAgICogZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQsIG9yIGFuIGVycm9yIG9jY3Vycy4gSW52b2tlZCB3aXRoIChlcnIpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIGEgY2FsbGJhY2sgaXMgb21pdHRlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGVhY2hPZlNlcmllcyhjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGVhY2hPZkxpbWl0JDEoY29sbCwgMSwgaXRlcmF0ZWUsIGNhbGxiYWNrKVxuICAgIH1cbiAgICB2YXIgZWFjaE9mU2VyaWVzJDEgPSBhd2FpdGlmeShlYWNoT2ZTZXJpZXMsIDMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNhbWUgYXMgW2BtYXBgXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMubWFwfSBidXQgcnVucyBvbmx5IGEgc2luZ2xlIGFzeW5jIG9wZXJhdGlvbiBhdCBhIHRpbWUuXG4gICAgICpcbiAgICAgKiBAbmFtZSBtYXBTZXJpZXNcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5tYXBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5tYXB9XG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfEFzeW5jSXRlcmFibGV8T2JqZWN0fSBjb2xsIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQW4gYXN5bmMgZnVuY3Rpb24gdG8gYXBwbHkgdG8gZWFjaCBpdGVtIGluXG4gICAgICogYGNvbGxgLlxuICAgICAqIFRoZSBpdGVyYXRlZSBzaG91bGQgY29tcGxldGUgd2l0aCB0aGUgdHJhbnNmb3JtZWQgaXRlbS5cbiAgICAgKiBJbnZva2VkIHdpdGggKGl0ZW0sIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgd2hlbiBhbGwgYGl0ZXJhdGVlYFxuICAgICAqIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLCBvciBhbiBlcnJvciBvY2N1cnMuIFJlc3VsdHMgaXMgYW4gYXJyYXkgb2YgdGhlXG4gICAgICogdHJhbnNmb3JtZWQgaXRlbXMgZnJvbSB0aGUgYGNvbGxgLiBJbnZva2VkIHdpdGggKGVyciwgcmVzdWx0cykuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgaXMgcGFzc2VkXG4gICAgICovXG4gICAgZnVuY3Rpb24gbWFwU2VyaWVzIChjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9hc3luY01hcChlYWNoT2ZTZXJpZXMkMSwgY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKVxuICAgIH1cbiAgICB2YXIgbWFwU2VyaWVzJDEgPSBhd2FpdGlmeShtYXBTZXJpZXMsIDMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNhbWUgYXMgW2BhcHBseUVhY2hgXXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cuYXBwbHlFYWNofSBidXQgcnVucyBvbmx5IGEgc2luZ2xlIGFzeW5jIG9wZXJhdGlvbiBhdCBhIHRpbWUuXG4gICAgICpcbiAgICAgKiBAbmFtZSBhcHBseUVhY2hTZXJpZXNcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb250cm9sRmxvd1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5hcHBseUVhY2hde0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy5hcHBseUVhY2h9XG4gICAgICogQGNhdGVnb3J5IENvbnRyb2wgRmxvd1xuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGZucyAtIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgQXN5bmNGdW5jdGlvbn1zIHRvIGFsbFxuICAgICAqIGNhbGwgd2l0aCB0aGUgc2FtZSBhcmd1bWVudHNcbiAgICAgKiBAcGFyYW0gey4uLip9IFthcmdzXSAtIGFueSBudW1iZXIgb2Ygc2VwYXJhdGUgYXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlXG4gICAgICogZnVuY3Rpb24uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIHRoZSBmaW5hbCBhcmd1bWVudCBzaG91bGQgYmUgdGhlIGNhbGxiYWNrLFxuICAgICAqIGNhbGxlZCB3aGVuIGFsbCBmdW5jdGlvbnMgaGF2ZSBjb21wbGV0ZWQgcHJvY2Vzc2luZy5cbiAgICAgKiBAcmV0dXJucyB7QXN5bmNGdW5jdGlvbn0gLSBBIGZ1bmN0aW9uLCB0aGF0IHdoZW4gY2FsbGVkLCBpcyB0aGUgcmVzdWx0IG9mXG4gICAgICogYXBwbGluZyB0aGUgYGFyZ3NgIHRvIHRoZSBsaXN0IG9mIGZ1bmN0aW9ucy4gIEl0IHRha2VzIG5vIGFyZ3MsIG90aGVyIHRoYW5cbiAgICAgKiBhIGNhbGxiYWNrLlxuICAgICAqL1xuICAgIHZhciBhcHBseUVhY2hTZXJpZXMgPSBhcHBseUVhY2gkMShtYXBTZXJpZXMkMSk7XG5cbiAgICBjb25zdCBQUk9NSVNFX1NZTUJPTCA9IFN5bWJvbCgncHJvbWlzZUNhbGxiYWNrJyk7XG5cbiAgICBmdW5jdGlvbiBwcm9taXNlQ2FsbGJhY2sgKCkge1xuICAgICAgICBsZXQgcmVzb2x2ZSwgcmVqZWN0O1xuICAgICAgICBmdW5jdGlvbiBjYWxsYmFjayAoZXJyLCAuLi5hcmdzKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gcmVqZWN0KGVycilcbiAgICAgICAgICAgIHJlc29sdmUoYXJncy5sZW5ndGggPiAxID8gYXJncyA6IGFyZ3NbMF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FsbGJhY2tbUFJPTUlTRV9TWU1CT0xdID0gbmV3IFByb21pc2UoKHJlcywgcmVqKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlID0gcmVzLFxuICAgICAgICAgICAgcmVqZWN0ID0gcmVqO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gY2FsbGJhY2tcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmVzIHRoZSBiZXN0IG9yZGVyIGZvciBydW5uaW5nIHRoZSB7QGxpbmsgQXN5bmNGdW5jdGlvbn1zIGluIGB0YXNrc2AsIGJhc2VkIG9uXG4gICAgICogdGhlaXIgcmVxdWlyZW1lbnRzLiBFYWNoIGZ1bmN0aW9uIGNhbiBvcHRpb25hbGx5IGRlcGVuZCBvbiBvdGhlciBmdW5jdGlvbnNcbiAgICAgKiBiZWluZyBjb21wbGV0ZWQgZmlyc3QsIGFuZCBlYWNoIGZ1bmN0aW9uIGlzIHJ1biBhcyBzb29uIGFzIGl0cyByZXF1aXJlbWVudHNcbiAgICAgKiBhcmUgc2F0aXNmaWVkLlxuICAgICAqXG4gICAgICogSWYgYW55IG9mIHRoZSB7QGxpbmsgQXN5bmNGdW5jdGlvbn1zIHBhc3MgYW4gZXJyb3IgdG8gdGhlaXIgY2FsbGJhY2ssIHRoZSBgYXV0b2Agc2VxdWVuY2VcbiAgICAgKiB3aWxsIHN0b3AuIEZ1cnRoZXIgdGFza3Mgd2lsbCBub3QgZXhlY3V0ZSAoc28gYW55IG90aGVyIGZ1bmN0aW9ucyBkZXBlbmRpbmdcbiAgICAgKiBvbiBpdCB3aWxsIG5vdCBydW4pLCBhbmQgdGhlIG1haW4gYGNhbGxiYWNrYCBpcyBpbW1lZGlhdGVseSBjYWxsZWQgd2l0aCB0aGVcbiAgICAgKiBlcnJvci5cbiAgICAgKlxuICAgICAqIHtAbGluayBBc3luY0Z1bmN0aW9ufXMgYWxzbyByZWNlaXZlIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSByZXN1bHRzIG9mIGZ1bmN0aW9ucyB3aGljaFxuICAgICAqIGhhdmUgY29tcGxldGVkIHNvIGZhciBhcyB0aGUgZmlyc3QgYXJndW1lbnQsIGlmIHRoZXkgaGF2ZSBkZXBlbmRlbmNpZXMuIElmIGFcbiAgICAgKiB0YXNrIGZ1bmN0aW9uIGhhcyBubyBkZXBlbmRlbmNpZXMsIGl0IHdpbGwgb25seSBiZSBwYXNzZWQgYSBjYWxsYmFjay5cbiAgICAgKlxuICAgICAqIEBuYW1lIGF1dG9cbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb250cm9sRmxvd1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgQ29udHJvbCBGbG93XG4gICAgICogQHBhcmFtIHtPYmplY3R9IHRhc2tzIC0gQW4gb2JqZWN0LiBFYWNoIG9mIGl0cyBwcm9wZXJ0aWVzIGlzIGVpdGhlciBhXG4gICAgICogZnVuY3Rpb24gb3IgYW4gYXJyYXkgb2YgcmVxdWlyZW1lbnRzLCB3aXRoIHRoZSB7QGxpbmsgQXN5bmNGdW5jdGlvbn0gaXRzZWxmIHRoZSBsYXN0IGl0ZW1cbiAgICAgKiBpbiB0aGUgYXJyYXkuIFRoZSBvYmplY3QncyBrZXkgb2YgYSBwcm9wZXJ0eSBzZXJ2ZXMgYXMgdGhlIG5hbWUgb2YgdGhlIHRhc2tcbiAgICAgKiBkZWZpbmVkIGJ5IHRoYXQgcHJvcGVydHksIGkuZS4gY2FuIGJlIHVzZWQgd2hlbiBzcGVjaWZ5aW5nIHJlcXVpcmVtZW50cyBmb3JcbiAgICAgKiBvdGhlciB0YXNrcy4gVGhlIGZ1bmN0aW9uIHJlY2VpdmVzIG9uZSBvciB0d28gYXJndW1lbnRzOlxuICAgICAqICogYSBgcmVzdWx0c2Agb2JqZWN0LCBjb250YWluaW5nIHRoZSByZXN1bHRzIG9mIHRoZSBwcmV2aW91c2x5IGV4ZWN1dGVkXG4gICAgICogICBmdW5jdGlvbnMsIG9ubHkgcGFzc2VkIGlmIHRoZSB0YXNrIGhhcyBhbnkgZGVwZW5kZW5jaWVzLFxuICAgICAqICogYSBgY2FsbGJhY2soZXJyLCByZXN1bHQpYCBmdW5jdGlvbiwgd2hpY2ggbXVzdCBiZSBjYWxsZWQgd2hlbiBmaW5pc2hlZCxcbiAgICAgKiAgIHBhc3NpbmcgYW4gYGVycm9yYCAod2hpY2ggY2FuIGJlIGBudWxsYCkgYW5kIHRoZSByZXN1bHQgb2YgdGhlIGZ1bmN0aW9uJ3NcbiAgICAgKiAgIGV4ZWN1dGlvbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2NvbmN1cnJlbmN5PUluZmluaXR5XSAtIEFuIG9wdGlvbmFsIGBpbnRlZ2VyYCBmb3JcbiAgICAgKiBkZXRlcm1pbmluZyB0aGUgbWF4aW11bSBudW1iZXIgb2YgdGFza3MgdGhhdCBjYW4gYmUgcnVuIGluIHBhcmFsbGVsLiBCeVxuICAgICAqIGRlZmF1bHQsIGFzIG1hbnkgYXMgcG9zc2libGUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEFuIG9wdGlvbmFsIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCB3aGVuIGFsbFxuICAgICAqIHRoZSB0YXNrcyBoYXZlIGJlZW4gY29tcGxldGVkLiBJdCByZWNlaXZlcyB0aGUgYGVycmAgYXJndW1lbnQgaWYgYW55IGB0YXNrc2BcbiAgICAgKiBwYXNzIGFuIGVycm9yIHRvIHRoZWlyIGNhbGxiYWNrLiBSZXN1bHRzIGFyZSBhbHdheXMgcmV0dXJuZWQ7IGhvd2V2ZXIsIGlmIGFuXG4gICAgICogZXJyb3Igb2NjdXJzLCBubyBmdXJ0aGVyIGB0YXNrc2Agd2lsbCBiZSBwZXJmb3JtZWQsIGFuZCB0aGUgcmVzdWx0cyBvYmplY3RcbiAgICAgKiB3aWxsIG9ubHkgY29udGFpbiBwYXJ0aWFsIHJlc3VsdHMuIEludm9rZWQgd2l0aCAoZXJyLCByZXN1bHRzKS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBhIGNhbGxiYWNrIGlzIG5vdCBwYXNzZWRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy9Vc2luZyBDYWxsYmFja3NcbiAgICAgKiBhc3luYy5hdXRvKHtcbiAgICAgKiAgICAgZ2V0X2RhdGE6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAvLyBhc3luYyBjb2RlIHRvIGdldCBzb21lIGRhdGFcbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsICdkYXRhJywgJ2NvbnZlcnRlZCB0byBhcnJheScpO1xuICAgICAqICAgICB9LFxuICAgICAqICAgICBtYWtlX2ZvbGRlcjogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIC8vIGFzeW5jIGNvZGUgdG8gY3JlYXRlIGEgZGlyZWN0b3J5IHRvIHN0b3JlIGEgZmlsZSBpblxuICAgICAqICAgICAgICAgLy8gdGhpcyBpcyBydW4gYXQgdGhlIHNhbWUgdGltZSBhcyBnZXR0aW5nIHRoZSBkYXRhXG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCAnZm9sZGVyJyk7XG4gICAgICogICAgIH0sXG4gICAgICogICAgIHdyaXRlX2ZpbGU6IFsnZ2V0X2RhdGEnLCAnbWFrZV9mb2xkZXInLCBmdW5jdGlvbihyZXN1bHRzLCBjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgLy8gb25jZSB0aGVyZSBpcyBzb21lIGRhdGEgYW5kIHRoZSBkaXJlY3RvcnkgZXhpc3RzLFxuICAgICAqICAgICAgICAgLy8gd3JpdGUgdGhlIGRhdGEgdG8gYSBmaWxlIGluIHRoZSBkaXJlY3RvcnlcbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsICdmaWxlbmFtZScpO1xuICAgICAqICAgICB9XSxcbiAgICAgKiAgICAgZW1haWxfbGluazogWyd3cml0ZV9maWxlJywgZnVuY3Rpb24ocmVzdWx0cywgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIC8vIG9uY2UgdGhlIGZpbGUgaXMgd3JpdHRlbiBsZXQncyBlbWFpbCBhIGxpbmsgdG8gaXQuLi5cbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsIHsnZmlsZSc6cmVzdWx0cy53cml0ZV9maWxlLCAnZW1haWwnOid1c2VyQGV4YW1wbGUuY29tJ30pO1xuICAgICAqICAgICB9XVxuICAgICAqIH0sIGZ1bmN0aW9uKGVyciwgcmVzdWx0cykge1xuICAgICAqICAgICBpZiAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZygnZXJyID0gJywgZXJyKTtcbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjb25zb2xlLmxvZygncmVzdWx0cyA9ICcsIHJlc3VsdHMpO1xuICAgICAqICAgICAvLyByZXN1bHRzID0ge1xuICAgICAqICAgICAvLyAgICAgZ2V0X2RhdGE6IFsnZGF0YScsICdjb252ZXJ0ZWQgdG8gYXJyYXknXVxuICAgICAqICAgICAvLyAgICAgbWFrZV9mb2xkZXI7ICdmb2xkZXInLFxuICAgICAqICAgICAvLyAgICAgd3JpdGVfZmlsZTogJ2ZpbGVuYW1lJ1xuICAgICAqICAgICAvLyAgICAgZW1haWxfbGluazogeyBmaWxlOiAnZmlsZW5hbWUnLCBlbWFpbDogJ3VzZXJAZXhhbXBsZS5jb20nIH1cbiAgICAgKiAgICAgLy8gfVxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy9Vc2luZyBQcm9taXNlc1xuICAgICAqIGFzeW5jLmF1dG8oe1xuICAgICAqICAgICBnZXRfZGF0YTogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKCdpbiBnZXRfZGF0YScpO1xuICAgICAqICAgICAgICAgLy8gYXN5bmMgY29kZSB0byBnZXQgc29tZSBkYXRhXG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCAnZGF0YScsICdjb252ZXJ0ZWQgdG8gYXJyYXknKTtcbiAgICAgKiAgICAgfSxcbiAgICAgKiAgICAgbWFrZV9mb2xkZXI6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZygnaW4gbWFrZV9mb2xkZXInKTtcbiAgICAgKiAgICAgICAgIC8vIGFzeW5jIGNvZGUgdG8gY3JlYXRlIGEgZGlyZWN0b3J5IHRvIHN0b3JlIGEgZmlsZSBpblxuICAgICAqICAgICAgICAgLy8gdGhpcyBpcyBydW4gYXQgdGhlIHNhbWUgdGltZSBhcyBnZXR0aW5nIHRoZSBkYXRhXG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCAnZm9sZGVyJyk7XG4gICAgICogICAgIH0sXG4gICAgICogICAgIHdyaXRlX2ZpbGU6IFsnZ2V0X2RhdGEnLCAnbWFrZV9mb2xkZXInLCBmdW5jdGlvbihyZXN1bHRzLCBjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgLy8gb25jZSB0aGVyZSBpcyBzb21lIGRhdGEgYW5kIHRoZSBkaXJlY3RvcnkgZXhpc3RzLFxuICAgICAqICAgICAgICAgLy8gd3JpdGUgdGhlIGRhdGEgdG8gYSBmaWxlIGluIHRoZSBkaXJlY3RvcnlcbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsICdmaWxlbmFtZScpO1xuICAgICAqICAgICB9XSxcbiAgICAgKiAgICAgZW1haWxfbGluazogWyd3cml0ZV9maWxlJywgZnVuY3Rpb24ocmVzdWx0cywgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIC8vIG9uY2UgdGhlIGZpbGUgaXMgd3JpdHRlbiBsZXQncyBlbWFpbCBhIGxpbmsgdG8gaXQuLi5cbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsIHsnZmlsZSc6cmVzdWx0cy53cml0ZV9maWxlLCAnZW1haWwnOid1c2VyQGV4YW1wbGUuY29tJ30pO1xuICAgICAqICAgICB9XVxuICAgICAqIH0pLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKCdyZXN1bHRzID0gJywgcmVzdWx0cyk7XG4gICAgICogICAgIC8vIHJlc3VsdHMgPSB7XG4gICAgICogICAgIC8vICAgICBnZXRfZGF0YTogWydkYXRhJywgJ2NvbnZlcnRlZCB0byBhcnJheSddXG4gICAgICogICAgIC8vICAgICBtYWtlX2ZvbGRlcjsgJ2ZvbGRlcicsXG4gICAgICogICAgIC8vICAgICB3cml0ZV9maWxlOiAnZmlsZW5hbWUnXG4gICAgICogICAgIC8vICAgICBlbWFpbF9saW5rOiB7IGZpbGU6ICdmaWxlbmFtZScsIGVtYWlsOiAndXNlckBleGFtcGxlLmNvbScgfVxuICAgICAqICAgICAvLyB9XG4gICAgICogfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coJ2VyciA9ICcsIGVycik7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvL1VzaW5nIGFzeW5jL2F3YWl0XG4gICAgICogYXN5bmMgKCkgPT4ge1xuICAgICAqICAgICB0cnkge1xuICAgICAqICAgICAgICAgbGV0IHJlc3VsdHMgPSBhd2FpdCBhc3luYy5hdXRvKHtcbiAgICAgKiAgICAgICAgICAgICBnZXRfZGF0YTogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgICAgICAgICAgLy8gYXN5bmMgY29kZSB0byBnZXQgc29tZSBkYXRhXG4gICAgICogICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsICdkYXRhJywgJ2NvbnZlcnRlZCB0byBhcnJheScpO1xuICAgICAqICAgICAgICAgICAgIH0sXG4gICAgICogICAgICAgICAgICAgbWFrZV9mb2xkZXI6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAgICAgICAgIC8vIGFzeW5jIGNvZGUgdG8gY3JlYXRlIGEgZGlyZWN0b3J5IHRvIHN0b3JlIGEgZmlsZSBpblxuICAgICAqICAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIHJ1biBhdCB0aGUgc2FtZSB0aW1lIGFzIGdldHRpbmcgdGhlIGRhdGFcbiAgICAgKiAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ2ZvbGRlcicpO1xuICAgICAqICAgICAgICAgICAgIH0sXG4gICAgICogICAgICAgICAgICAgd3JpdGVfZmlsZTogWydnZXRfZGF0YScsICdtYWtlX2ZvbGRlcicsIGZ1bmN0aW9uKHJlc3VsdHMsIGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAgICAgICAgIC8vIG9uY2UgdGhlcmUgaXMgc29tZSBkYXRhIGFuZCB0aGUgZGlyZWN0b3J5IGV4aXN0cyxcbiAgICAgKiAgICAgICAgICAgICAgICAgLy8gd3JpdGUgdGhlIGRhdGEgdG8gYSBmaWxlIGluIHRoZSBkaXJlY3RvcnlcbiAgICAgKiAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ2ZpbGVuYW1lJyk7XG4gICAgICogICAgICAgICAgICAgfV0sXG4gICAgICogICAgICAgICAgICAgZW1haWxfbGluazogWyd3cml0ZV9maWxlJywgZnVuY3Rpb24ocmVzdWx0cywgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgICAgICAgICAgLy8gb25jZSB0aGUgZmlsZSBpcyB3cml0dGVuIGxldCdzIGVtYWlsIGEgbGluayB0byBpdC4uLlxuICAgICAqICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB7J2ZpbGUnOnJlc3VsdHMud3JpdGVfZmlsZSwgJ2VtYWlsJzondXNlckBleGFtcGxlLmNvbSd9KTtcbiAgICAgKiAgICAgICAgICAgICB9XVxuICAgICAqICAgICAgICAgfSk7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZygncmVzdWx0cyA9ICcsIHJlc3VsdHMpO1xuICAgICAqICAgICAgICAgLy8gcmVzdWx0cyA9IHtcbiAgICAgKiAgICAgICAgIC8vICAgICBnZXRfZGF0YTogWydkYXRhJywgJ2NvbnZlcnRlZCB0byBhcnJheSddXG4gICAgICogICAgICAgICAvLyAgICAgbWFrZV9mb2xkZXI7ICdmb2xkZXInLFxuICAgICAqICAgICAgICAgLy8gICAgIHdyaXRlX2ZpbGU6ICdmaWxlbmFtZSdcbiAgICAgKiAgICAgICAgIC8vICAgICBlbWFpbF9saW5rOiB7IGZpbGU6ICdmaWxlbmFtZScsIGVtYWlsOiAndXNlckBleGFtcGxlLmNvbScgfVxuICAgICAqICAgICAgICAgLy8gfVxuICAgICAqICAgICB9XG4gICAgICogICAgIGNhdGNoIChlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgIH1cbiAgICAgKiB9XG4gICAgICpcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBhdXRvKHRhc2tzLCBjb25jdXJyZW5jeSwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25jdXJyZW5jeSAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIC8vIGNvbmN1cnJlbmN5IGlzIG9wdGlvbmFsLCBzaGlmdCB0aGUgYXJncy5cbiAgICAgICAgICAgIGNhbGxiYWNrID0gY29uY3VycmVuY3k7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY2FsbGJhY2sgPSBvbmNlKGNhbGxiYWNrIHx8IHByb21pc2VDYWxsYmFjaygpKTtcbiAgICAgICAgdmFyIG51bVRhc2tzID0gT2JqZWN0LmtleXModGFza3MpLmxlbmd0aDtcbiAgICAgICAgaWYgKCFudW1UYXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gbnVtVGFza3M7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICB2YXIgcnVubmluZ1Rhc2tzID0gMDtcbiAgICAgICAgdmFyIGNhbmNlbGVkID0gZmFsc2U7XG4gICAgICAgIHZhciBoYXNFcnJvciA9IGZhbHNlO1xuXG4gICAgICAgIHZhciBsaXN0ZW5lcnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgICAgIHZhciByZWFkeVRhc2tzID0gW107XG5cbiAgICAgICAgLy8gZm9yIGN5Y2xlIGRldGVjdGlvbjpcbiAgICAgICAgdmFyIHJlYWR5VG9DaGVjayA9IFtdOyAvLyB0YXNrcyB0aGF0IGhhdmUgYmVlbiBpZGVudGlmaWVkIGFzIHJlYWNoYWJsZVxuICAgICAgICAvLyB3aXRob3V0IHRoZSBwb3NzaWJpbGl0eSBvZiByZXR1cm5pbmcgdG8gYW4gYW5jZXN0b3IgdGFza1xuICAgICAgICB2YXIgdW5jaGVja2VkRGVwZW5kZW5jaWVzID0ge307XG5cbiAgICAgICAgT2JqZWN0LmtleXModGFza3MpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIHZhciB0YXNrID0gdGFza3Nba2V5XTtcbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0YXNrKSkge1xuICAgICAgICAgICAgICAgIC8vIG5vIGRlcGVuZGVuY2llc1xuICAgICAgICAgICAgICAgIGVucXVldWVUYXNrKGtleSwgW3Rhc2tdKTtcbiAgICAgICAgICAgICAgICByZWFkeVRvQ2hlY2sucHVzaChrZXkpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGRlcGVuZGVuY2llcyA9IHRhc2suc2xpY2UoMCwgdGFzay5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgIHZhciByZW1haW5pbmdEZXBlbmRlbmNpZXMgPSBkZXBlbmRlbmNpZXMubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKHJlbWFpbmluZ0RlcGVuZGVuY2llcyA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGVucXVldWVUYXNrKGtleSwgdGFzayk7XG4gICAgICAgICAgICAgICAgcmVhZHlUb0NoZWNrLnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB1bmNoZWNrZWREZXBlbmRlbmNpZXNba2V5XSA9IHJlbWFpbmluZ0RlcGVuZGVuY2llcztcblxuICAgICAgICAgICAgZGVwZW5kZW5jaWVzLmZvckVhY2goZGVwZW5kZW5jeU5hbWUgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGFza3NbZGVwZW5kZW5jeU5hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignYXN5bmMuYXV0byB0YXNrIGAnICsga2V5ICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdgIGhhcyBhIG5vbi1leGlzdGVudCBkZXBlbmRlbmN5IGAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZGVuY3lOYW1lICsgJ2AgaW4gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbmNpZXMuam9pbignLCAnKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFkZExpc3RlbmVyKGRlcGVuZGVuY3lOYW1lLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZ0RlcGVuZGVuY2llcy0tO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVtYWluaW5nRGVwZW5kZW5jaWVzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbnF1ZXVlVGFzayhrZXksIHRhc2spO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY2hlY2tGb3JEZWFkbG9ja3MoKTtcbiAgICAgICAgcHJvY2Vzc1F1ZXVlKCk7XG5cbiAgICAgICAgZnVuY3Rpb24gZW5xdWV1ZVRhc2soa2V5LCB0YXNrKSB7XG4gICAgICAgICAgICByZWFkeVRhc2tzLnB1c2goKCkgPT4gcnVuVGFzayhrZXksIHRhc2spKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHByb2Nlc3NRdWV1ZSgpIHtcbiAgICAgICAgICAgIGlmIChjYW5jZWxlZCkgcmV0dXJuXG4gICAgICAgICAgICBpZiAocmVhZHlUYXNrcy5sZW5ndGggPT09IDAgJiYgcnVubmluZ1Rhc2tzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2hpbGUocmVhZHlUYXNrcy5sZW5ndGggJiYgcnVubmluZ1Rhc2tzIDwgY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICB2YXIgcnVuID0gcmVhZHlUYXNrcy5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIHJ1bigpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBhZGRMaXN0ZW5lcih0YXNrTmFtZSwgZm4pIHtcbiAgICAgICAgICAgIHZhciB0YXNrTGlzdGVuZXJzID0gbGlzdGVuZXJzW3Rhc2tOYW1lXTtcbiAgICAgICAgICAgIGlmICghdGFza0xpc3RlbmVycykge1xuICAgICAgICAgICAgICAgIHRhc2tMaXN0ZW5lcnMgPSBsaXN0ZW5lcnNbdGFza05hbWVdID0gW107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRhc2tMaXN0ZW5lcnMucHVzaChmbik7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiB0YXNrQ29tcGxldGUodGFza05hbWUpIHtcbiAgICAgICAgICAgIHZhciB0YXNrTGlzdGVuZXJzID0gbGlzdGVuZXJzW3Rhc2tOYW1lXSB8fCBbXTtcbiAgICAgICAgICAgIHRhc2tMaXN0ZW5lcnMuZm9yRWFjaChmbiA9PiBmbigpKTtcbiAgICAgICAgICAgIHByb2Nlc3NRdWV1ZSgpO1xuICAgICAgICB9XG5cblxuICAgICAgICBmdW5jdGlvbiBydW5UYXNrKGtleSwgdGFzaykge1xuICAgICAgICAgICAgaWYgKGhhc0Vycm9yKSByZXR1cm47XG5cbiAgICAgICAgICAgIHZhciB0YXNrQ2FsbGJhY2sgPSBvbmx5T25jZSgoZXJyLCAuLi5yZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICBydW5uaW5nVGFza3MtLTtcbiAgICAgICAgICAgICAgICBpZiAoZXJyID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICBjYW5jZWxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgW3Jlc3VsdF0gPSByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNhZmVSZXN1bHRzID0ge307XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKHJlc3VsdHMpLmZvckVhY2gocmtleSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1tya2V5XSA9IHJlc3VsdHNbcmtleV07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1trZXldID0gcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICBoYXNFcnJvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVycyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYW5jZWxlZCkgcmV0dXJuXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgc2FmZVJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba2V5XSA9IHJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgdGFza0NvbXBsZXRlKGtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJ1bm5pbmdUYXNrcysrO1xuICAgICAgICAgICAgdmFyIHRhc2tGbiA9IHdyYXBBc3luYyh0YXNrW3Rhc2subGVuZ3RoIC0gMV0pO1xuICAgICAgICAgICAgaWYgKHRhc2subGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgIHRhc2tGbihyZXN1bHRzLCB0YXNrQ2FsbGJhY2spO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0YXNrRm4odGFza0NhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGNoZWNrRm9yRGVhZGxvY2tzKCkge1xuICAgICAgICAgICAgLy8gS2FobidzIGFsZ29yaXRobVxuICAgICAgICAgICAgLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVG9wb2xvZ2ljYWxfc29ydGluZyNLYWhuLjI3c19hbGdvcml0aG1cbiAgICAgICAgICAgIC8vIGh0dHA6Ly9jb25uYWxsZS5ibG9nc3BvdC5jb20vMjAxMy8xMC90b3BvbG9naWNhbC1zb3J0aW5na2Fobi1hbGdvcml0aG0uaHRtbFxuICAgICAgICAgICAgdmFyIGN1cnJlbnRUYXNrO1xuICAgICAgICAgICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgICAgICAgICAgd2hpbGUgKHJlYWR5VG9DaGVjay5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50VGFzayA9IHJlYWR5VG9DaGVjay5wb3AoKTtcbiAgICAgICAgICAgICAgICBjb3VudGVyKys7XG4gICAgICAgICAgICAgICAgZ2V0RGVwZW5kZW50cyhjdXJyZW50VGFzaykuZm9yRWFjaChkZXBlbmRlbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoLS11bmNoZWNrZWREZXBlbmRlbmNpZXNbZGVwZW5kZW50XSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZHlUb0NoZWNrLnB1c2goZGVwZW5kZW50KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY291bnRlciAhPT0gbnVtVGFza3MpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICdhc3luYy5hdXRvIGNhbm5vdCBleGVjdXRlIHRhc2tzIGR1ZSB0byBhIHJlY3Vyc2l2ZSBkZXBlbmRlbmN5J1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBnZXREZXBlbmRlbnRzKHRhc2tOYW1lKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICAgICAgICBPYmplY3Qua2V5cyh0YXNrcykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhc2sgPSB0YXNrc1trZXldO1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRhc2spICYmIHRhc2suaW5kZXhPZih0YXNrTmFtZSkgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjYWxsYmFja1tQUk9NSVNFX1NZTUJPTF1cbiAgICB9XG5cbiAgICB2YXIgRk5fQVJHUyA9IC9eKD86YXN5bmNcXHMpPyg/OmZ1bmN0aW9uKT9cXHMqKD86XFx3K1xccyopP1xcKChbXildKylcXCkoPzpcXHMqeykvO1xuICAgIHZhciBBUlJPV19GTl9BUkdTID0gL14oPzphc3luY1xccyk/XFxzKig/OlxcKFxccyopPygoPzpbXik9XFxzXVxccyopKikoPzpcXClcXHMqKT89Pi87XG4gICAgdmFyIEZOX0FSR19TUExJVCA9IC8sLztcbiAgICB2YXIgRk5fQVJHID0gLyg9LispPyhcXHMqKSQvO1xuXG4gICAgZnVuY3Rpb24gc3RyaXBDb21tZW50cyhzdHJpbmcpIHtcbiAgICAgICAgbGV0IHN0cmlwcGVkID0gJyc7XG4gICAgICAgIGxldCBpbmRleCA9IDA7XG4gICAgICAgIGxldCBlbmRCbG9ja0NvbW1lbnQgPSBzdHJpbmcuaW5kZXhPZignKi8nKTtcbiAgICAgICAgd2hpbGUgKGluZGV4IDwgc3RyaW5nLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKHN0cmluZ1tpbmRleF0gPT09ICcvJyAmJiBzdHJpbmdbaW5kZXgrMV0gPT09ICcvJykge1xuICAgICAgICAgICAgICAgIC8vIGlubGluZSBjb21tZW50XG4gICAgICAgICAgICAgICAgbGV0IGVuZEluZGV4ID0gc3RyaW5nLmluZGV4T2YoJ1xcbicsIGluZGV4KTtcbiAgICAgICAgICAgICAgICBpbmRleCA9IChlbmRJbmRleCA9PT0gLTEpID8gc3RyaW5nLmxlbmd0aCA6IGVuZEluZGV4O1xuICAgICAgICAgICAgfSBlbHNlIGlmICgoZW5kQmxvY2tDb21tZW50ICE9PSAtMSkgJiYgKHN0cmluZ1tpbmRleF0gPT09ICcvJykgJiYgKHN0cmluZ1tpbmRleCsxXSA9PT0gJyonKSkge1xuICAgICAgICAgICAgICAgIC8vIGJsb2NrIGNvbW1lbnRcbiAgICAgICAgICAgICAgICBsZXQgZW5kSW5kZXggPSBzdHJpbmcuaW5kZXhPZignKi8nLCBpbmRleCk7XG4gICAgICAgICAgICAgICAgaWYgKGVuZEluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBpbmRleCA9IGVuZEluZGV4ICsgMjtcbiAgICAgICAgICAgICAgICAgICAgZW5kQmxvY2tDb21tZW50ID0gc3RyaW5nLmluZGV4T2YoJyovJywgaW5kZXgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN0cmlwcGVkICs9IHN0cmluZ1tpbmRleF07XG4gICAgICAgICAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdHJpcHBlZCArPSBzdHJpbmdbaW5kZXhdO1xuICAgICAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0cmlwcGVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlUGFyYW1zKGZ1bmMpIHtcbiAgICAgICAgY29uc3Qgc3JjID0gc3RyaXBDb21tZW50cyhmdW5jLnRvU3RyaW5nKCkpO1xuICAgICAgICBsZXQgbWF0Y2ggPSBzcmMubWF0Y2goRk5fQVJHUyk7XG4gICAgICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgICAgIG1hdGNoID0gc3JjLm1hdGNoKEFSUk9XX0ZOX0FSR1MpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbWF0Y2gpIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IHBhcnNlIGFyZ3MgaW4gYXV0b0luamVjdFxcblNvdXJjZTpcXG4nICsgc3JjKVxuICAgICAgICBsZXQgWywgYXJnc10gPSBtYXRjaDtcbiAgICAgICAgcmV0dXJuIGFyZ3NcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXHMvZywgJycpXG4gICAgICAgICAgICAuc3BsaXQoRk5fQVJHX1NQTElUKVxuICAgICAgICAgICAgLm1hcCgoYXJnKSA9PiBhcmcucmVwbGFjZShGTl9BUkcsICcnKS50cmltKCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgZGVwZW5kZW5jeS1pbmplY3RlZCB2ZXJzaW9uIG9mIHRoZSBbYXN5bmMuYXV0b117QGxpbmsgbW9kdWxlOkNvbnRyb2xGbG93LmF1dG99IGZ1bmN0aW9uLiBEZXBlbmRlbnRcbiAgICAgKiB0YXNrcyBhcmUgc3BlY2lmaWVkIGFzIHBhcmFtZXRlcnMgdG8gdGhlIGZ1bmN0aW9uLCBhZnRlciB0aGUgdXN1YWwgY2FsbGJhY2tcbiAgICAgKiBwYXJhbWV0ZXIsIHdpdGggdGhlIHBhcmFtZXRlciBuYW1lcyBtYXRjaGluZyB0aGUgbmFtZXMgb2YgdGhlIHRhc2tzIGl0XG4gICAgICogZGVwZW5kcyBvbi4gVGhpcyBjYW4gcHJvdmlkZSBldmVuIG1vcmUgcmVhZGFibGUgdGFzayBncmFwaHMgd2hpY2ggY2FuIGJlXG4gICAgICogZWFzaWVyIHRvIG1haW50YWluLlxuICAgICAqXG4gICAgICogSWYgYSBmaW5hbCBjYWxsYmFjayBpcyBzcGVjaWZpZWQsIHRoZSB0YXNrIHJlc3VsdHMgYXJlIHNpbWlsYXJseSBpbmplY3RlZCxcbiAgICAgKiBzcGVjaWZpZWQgYXMgbmFtZWQgcGFyYW1ldGVycyBhZnRlciB0aGUgaW5pdGlhbCBlcnJvciBwYXJhbWV0ZXIuXG4gICAgICpcbiAgICAgKiBUaGUgYXV0b0luamVjdCBmdW5jdGlvbiBpcyBwdXJlbHkgc3ludGFjdGljIHN1Z2FyIGFuZCBpdHMgc2VtYW50aWNzIGFyZVxuICAgICAqIG90aGVyd2lzZSBlcXVpdmFsZW50IHRvIFthc3luYy5hdXRvXXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cuYXV0b30uXG4gICAgICpcbiAgICAgKiBAbmFtZSBhdXRvSW5qZWN0XG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMuYXV0b117QGxpbmsgbW9kdWxlOkNvbnRyb2xGbG93LmF1dG99XG4gICAgICogQGNhdGVnb3J5IENvbnRyb2wgRmxvd1xuICAgICAqIEBwYXJhbSB7T2JqZWN0fSB0YXNrcyAtIEFuIG9iamVjdCwgZWFjaCBvZiB3aG9zZSBwcm9wZXJ0aWVzIGlzIGFuIHtAbGluayBBc3luY0Z1bmN0aW9ufSBvZlxuICAgICAqIHRoZSBmb3JtICdmdW5jKFtkZXBlbmRlbmNpZXMuLi5dLCBjYWxsYmFjaykuIFRoZSBvYmplY3QncyBrZXkgb2YgYSBwcm9wZXJ0eVxuICAgICAqIHNlcnZlcyBhcyB0aGUgbmFtZSBvZiB0aGUgdGFzayBkZWZpbmVkIGJ5IHRoYXQgcHJvcGVydHksIGkuZS4gY2FuIGJlIHVzZWRcbiAgICAgKiB3aGVuIHNwZWNpZnlpbmcgcmVxdWlyZW1lbnRzIGZvciBvdGhlciB0YXNrcy5cbiAgICAgKiAqIFRoZSBgY2FsbGJhY2tgIHBhcmFtZXRlciBpcyBhIGBjYWxsYmFjayhlcnIsIHJlc3VsdClgIHdoaWNoIG11c3QgYmUgY2FsbGVkXG4gICAgICogICB3aGVuIGZpbmlzaGVkLCBwYXNzaW5nIGFuIGBlcnJvcmAgKHdoaWNoIGNhbiBiZSBgbnVsbGApIGFuZCB0aGUgcmVzdWx0IG9mXG4gICAgICogICB0aGUgZnVuY3Rpb24ncyBleGVjdXRpb24uIFRoZSByZW1haW5pbmcgcGFyYW1ldGVycyBuYW1lIG90aGVyIHRhc2tzIG9uXG4gICAgICogICB3aGljaCB0aGUgdGFzayBpcyBkZXBlbmRlbnQsIGFuZCB0aGUgcmVzdWx0cyBmcm9tIHRob3NlIHRhc2tzIGFyZSB0aGVcbiAgICAgKiAgIGFyZ3VtZW50cyBvZiB0aG9zZSBwYXJhbWV0ZXJzLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBbiBvcHRpb25hbCBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgd2hlbiBhbGxcbiAgICAgKiB0aGUgdGFza3MgaGF2ZSBiZWVuIGNvbXBsZXRlZC4gSXQgcmVjZWl2ZXMgdGhlIGBlcnJgIGFyZ3VtZW50IGlmIGFueSBgdGFza3NgXG4gICAgICogcGFzcyBhbiBlcnJvciB0byB0aGVpciBjYWxsYmFjaywgYW5kIGEgYHJlc3VsdHNgIG9iamVjdCB3aXRoIGFueSBjb21wbGV0ZWRcbiAgICAgKiB0YXNrIHJlc3VsdHMsIHNpbWlsYXIgdG8gYGF1dG9gLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIG5vIGNhbGxiYWNrIGlzIHBhc3NlZFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyAgVGhlIGV4YW1wbGUgZnJvbSBgYXV0b2AgY2FuIGJlIHJld3JpdHRlbiBhcyBmb2xsb3dzOlxuICAgICAqIGFzeW5jLmF1dG9JbmplY3Qoe1xuICAgICAqICAgICBnZXRfZGF0YTogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIC8vIGFzeW5jIGNvZGUgdG8gZ2V0IHNvbWUgZGF0YVxuICAgICAqICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ2RhdGEnLCAnY29udmVydGVkIHRvIGFycmF5Jyk7XG4gICAgICogICAgIH0sXG4gICAgICogICAgIG1ha2VfZm9sZGVyOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgLy8gYXN5bmMgY29kZSB0byBjcmVhdGUgYSBkaXJlY3RvcnkgdG8gc3RvcmUgYSBmaWxlIGluXG4gICAgICogICAgICAgICAvLyB0aGlzIGlzIHJ1biBhdCB0aGUgc2FtZSB0aW1lIGFzIGdldHRpbmcgdGhlIGRhdGFcbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsICdmb2xkZXInKTtcbiAgICAgKiAgICAgfSxcbiAgICAgKiAgICAgd3JpdGVfZmlsZTogZnVuY3Rpb24oZ2V0X2RhdGEsIG1ha2VfZm9sZGVyLCBjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgLy8gb25jZSB0aGVyZSBpcyBzb21lIGRhdGEgYW5kIHRoZSBkaXJlY3RvcnkgZXhpc3RzLFxuICAgICAqICAgICAgICAgLy8gd3JpdGUgdGhlIGRhdGEgdG8gYSBmaWxlIGluIHRoZSBkaXJlY3RvcnlcbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsICdmaWxlbmFtZScpO1xuICAgICAqICAgICB9LFxuICAgICAqICAgICBlbWFpbF9saW5rOiBmdW5jdGlvbih3cml0ZV9maWxlLCBjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgLy8gb25jZSB0aGUgZmlsZSBpcyB3cml0dGVuIGxldCdzIGVtYWlsIGEgbGluayB0byBpdC4uLlxuICAgICAqICAgICAgICAgLy8gd3JpdGVfZmlsZSBjb250YWlucyB0aGUgZmlsZW5hbWUgcmV0dXJuZWQgYnkgd3JpdGVfZmlsZS5cbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsIHsnZmlsZSc6d3JpdGVfZmlsZSwgJ2VtYWlsJzondXNlckBleGFtcGxlLmNvbSd9KTtcbiAgICAgKiAgICAgfVxuICAgICAqIH0sIGZ1bmN0aW9uKGVyciwgcmVzdWx0cykge1xuICAgICAqICAgICBjb25zb2xlLmxvZygnZXJyID0gJywgZXJyKTtcbiAgICAgKiAgICAgY29uc29sZS5sb2coJ2VtYWlsX2xpbmsgPSAnLCByZXN1bHRzLmVtYWlsX2xpbmspO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gSWYgeW91IGFyZSB1c2luZyBhIEpTIG1pbmlmaWVyIHRoYXQgbWFuZ2xlcyBwYXJhbWV0ZXIgbmFtZXMsIGBhdXRvSW5qZWN0YFxuICAgICAqIC8vIHdpbGwgbm90IHdvcmsgd2l0aCBwbGFpbiBmdW5jdGlvbnMsIHNpbmNlIHRoZSBwYXJhbWV0ZXIgbmFtZXMgd2lsbCBiZVxuICAgICAqIC8vIGNvbGxhcHNlZCB0byBhIHNpbmdsZSBsZXR0ZXIgaWRlbnRpZmllci4gIFRvIHdvcmsgYXJvdW5kIHRoaXMsIHlvdSBjYW5cbiAgICAgKiAvLyBleHBsaWNpdGx5IHNwZWNpZnkgdGhlIG5hbWVzIG9mIHRoZSBwYXJhbWV0ZXJzIHlvdXIgdGFzayBmdW5jdGlvbiBuZWVkc1xuICAgICAqIC8vIGluIGFuIGFycmF5LCBzaW1pbGFyIHRvIEFuZ3VsYXIuanMgZGVwZW5kZW5jeSBpbmplY3Rpb24uXG4gICAgICpcbiAgICAgKiAvLyBUaGlzIHN0aWxsIGhhcyBhbiBhZHZhbnRhZ2Ugb3ZlciBwbGFpbiBgYXV0b2AsIHNpbmNlIHRoZSByZXN1bHRzIGEgdGFza1xuICAgICAqIC8vIGRlcGVuZHMgb24gYXJlIHN0aWxsIHNwcmVhZCBpbnRvIGFyZ3VtZW50cy5cbiAgICAgKiBhc3luYy5hdXRvSW5qZWN0KHtcbiAgICAgKiAgICAgLy8uLi5cbiAgICAgKiAgICAgd3JpdGVfZmlsZTogWydnZXRfZGF0YScsICdtYWtlX2ZvbGRlcicsIGZ1bmN0aW9uKGdldF9kYXRhLCBtYWtlX2ZvbGRlciwgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsICdmaWxlbmFtZScpO1xuICAgICAqICAgICB9XSxcbiAgICAgKiAgICAgZW1haWxfbGluazogWyd3cml0ZV9maWxlJywgZnVuY3Rpb24od3JpdGVfZmlsZSwgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsIHsnZmlsZSc6d3JpdGVfZmlsZSwgJ2VtYWlsJzondXNlckBleGFtcGxlLmNvbSd9KTtcbiAgICAgKiAgICAgfV1cbiAgICAgKiAgICAgLy8uLi5cbiAgICAgKiB9LCBmdW5jdGlvbihlcnIsIHJlc3VsdHMpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coJ2VyciA9ICcsIGVycik7XG4gICAgICogICAgIGNvbnNvbGUubG9nKCdlbWFpbF9saW5rID0gJywgcmVzdWx0cy5lbWFpbF9saW5rKTtcbiAgICAgKiB9KTtcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBhdXRvSW5qZWN0KHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgbmV3VGFza3MgPSB7fTtcblxuICAgICAgICBPYmplY3Qua2V5cyh0YXNrcykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgdmFyIHRhc2tGbiA9IHRhc2tzW2tleV07XG4gICAgICAgICAgICB2YXIgcGFyYW1zO1xuICAgICAgICAgICAgdmFyIGZuSXNBc3luYyA9IGlzQXN5bmModGFza0ZuKTtcbiAgICAgICAgICAgIHZhciBoYXNOb0RlcHMgPVxuICAgICAgICAgICAgICAgICghZm5Jc0FzeW5jICYmIHRhc2tGbi5sZW5ndGggPT09IDEpIHx8XG4gICAgICAgICAgICAgICAgKGZuSXNBc3luYyAmJiB0YXNrRm4ubGVuZ3RoID09PSAwKTtcblxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGFza0ZuKSkge1xuICAgICAgICAgICAgICAgIHBhcmFtcyA9IFsuLi50YXNrRm5dO1xuICAgICAgICAgICAgICAgIHRhc2tGbiA9IHBhcmFtcy5wb3AoKTtcblxuICAgICAgICAgICAgICAgIG5ld1Rhc2tzW2tleV0gPSBwYXJhbXMuY29uY2F0KHBhcmFtcy5sZW5ndGggPiAwID8gbmV3VGFzayA6IHRhc2tGbik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhhc05vRGVwcykge1xuICAgICAgICAgICAgICAgIC8vIG5vIGRlcGVuZGVuY2llcywgdXNlIHRoZSBmdW5jdGlvbiBhcy1pc1xuICAgICAgICAgICAgICAgIG5ld1Rhc2tzW2tleV0gPSB0YXNrRm47XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHBhcmFtcyA9IHBhcnNlUGFyYW1zKHRhc2tGbik7XG4gICAgICAgICAgICAgICAgaWYgKCh0YXNrRm4ubGVuZ3RoID09PSAwICYmICFmbklzQXN5bmMpICYmIHBhcmFtcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYXV0b0luamVjdCB0YXNrIGZ1bmN0aW9ucyByZXF1aXJlIGV4cGxpY2l0IHBhcmFtZXRlcnMuXCIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBjYWxsYmFjayBwYXJhbVxuICAgICAgICAgICAgICAgIGlmICghZm5Jc0FzeW5jKSBwYXJhbXMucG9wKCk7XG5cbiAgICAgICAgICAgICAgICBuZXdUYXNrc1trZXldID0gcGFyYW1zLmNvbmNhdChuZXdUYXNrKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gbmV3VGFzayhyZXN1bHRzLCB0YXNrQ2IpIHtcbiAgICAgICAgICAgICAgICB2YXIgbmV3QXJncyA9IHBhcmFtcy5tYXAobmFtZSA9PiByZXN1bHRzW25hbWVdKTtcbiAgICAgICAgICAgICAgICBuZXdBcmdzLnB1c2godGFza0NiKTtcbiAgICAgICAgICAgICAgICB3cmFwQXN5bmModGFza0ZuKSguLi5uZXdBcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGF1dG8obmV3VGFza3MsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICAvLyBTaW1wbGUgZG91Ymx5IGxpbmtlZCBsaXN0IChodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Eb3VibHlfbGlua2VkX2xpc3QpIGltcGxlbWVudGF0aW9uXG4gICAgLy8gdXNlZCBmb3IgcXVldWVzLiBUaGlzIGltcGxlbWVudGF0aW9uIGFzc3VtZXMgdGhhdCB0aGUgbm9kZSBwcm92aWRlZCBieSB0aGUgdXNlciBjYW4gYmUgbW9kaWZpZWRcbiAgICAvLyB0byBhZGp1c3QgdGhlIG5leHQgYW5kIGxhc3QgcHJvcGVydGllcy4gV2UgaW1wbGVtZW50IG9ubHkgdGhlIG1pbmltYWwgZnVuY3Rpb25hbGl0eVxuICAgIC8vIGZvciBxdWV1ZSBzdXBwb3J0LlxuICAgIGNsYXNzIERMTCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgdGhpcy5oZWFkID0gdGhpcy50YWlsID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMubGVuZ3RoID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbW92ZUxpbmsobm9kZSkge1xuICAgICAgICAgICAgaWYgKG5vZGUucHJldikgbm9kZS5wcmV2Lm5leHQgPSBub2RlLm5leHQ7XG4gICAgICAgICAgICBlbHNlIHRoaXMuaGVhZCA9IG5vZGUubmV4dDtcbiAgICAgICAgICAgIGlmIChub2RlLm5leHQpIG5vZGUubmV4dC5wcmV2ID0gbm9kZS5wcmV2O1xuICAgICAgICAgICAgZWxzZSB0aGlzLnRhaWwgPSBub2RlLnByZXY7XG5cbiAgICAgICAgICAgIG5vZGUucHJldiA9IG5vZGUubmV4dCA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmxlbmd0aCAtPSAxO1xuICAgICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH1cblxuICAgICAgICBlbXB0eSAoKSB7XG4gICAgICAgICAgICB3aGlsZSh0aGlzLmhlYWQpIHRoaXMuc2hpZnQoKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5zZXJ0QWZ0ZXIobm9kZSwgbmV3Tm9kZSkge1xuICAgICAgICAgICAgbmV3Tm9kZS5wcmV2ID0gbm9kZTtcbiAgICAgICAgICAgIG5ld05vZGUubmV4dCA9IG5vZGUubmV4dDtcbiAgICAgICAgICAgIGlmIChub2RlLm5leHQpIG5vZGUubmV4dC5wcmV2ID0gbmV3Tm9kZTtcbiAgICAgICAgICAgIGVsc2UgdGhpcy50YWlsID0gbmV3Tm9kZTtcbiAgICAgICAgICAgIG5vZGUubmV4dCA9IG5ld05vZGU7XG4gICAgICAgICAgICB0aGlzLmxlbmd0aCArPSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5zZXJ0QmVmb3JlKG5vZGUsIG5ld05vZGUpIHtcbiAgICAgICAgICAgIG5ld05vZGUucHJldiA9IG5vZGUucHJldjtcbiAgICAgICAgICAgIG5ld05vZGUubmV4dCA9IG5vZGU7XG4gICAgICAgICAgICBpZiAobm9kZS5wcmV2KSBub2RlLnByZXYubmV4dCA9IG5ld05vZGU7XG4gICAgICAgICAgICBlbHNlIHRoaXMuaGVhZCA9IG5ld05vZGU7XG4gICAgICAgICAgICBub2RlLnByZXYgPSBuZXdOb2RlO1xuICAgICAgICAgICAgdGhpcy5sZW5ndGggKz0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHVuc2hpZnQobm9kZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaGVhZCkgdGhpcy5pbnNlcnRCZWZvcmUodGhpcy5oZWFkLCBub2RlKTtcbiAgICAgICAgICAgIGVsc2Ugc2V0SW5pdGlhbCh0aGlzLCBub2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1c2gobm9kZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMudGFpbCkgdGhpcy5pbnNlcnRBZnRlcih0aGlzLnRhaWwsIG5vZGUpO1xuICAgICAgICAgICAgZWxzZSBzZXRJbml0aWFsKHRoaXMsIG5vZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgc2hpZnQoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5oZWFkICYmIHRoaXMucmVtb3ZlTGluayh0aGlzLmhlYWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcG9wKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGFpbCAmJiB0aGlzLnJlbW92ZUxpbmsodGhpcy50YWlsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRvQXJyYXkoKSB7XG4gICAgICAgICAgICByZXR1cm4gWy4uLnRoaXNdXG4gICAgICAgIH1cblxuICAgICAgICAqW1N5bWJvbC5pdGVyYXRvcl0gKCkge1xuICAgICAgICAgICAgdmFyIGN1ciA9IHRoaXMuaGVhZDtcbiAgICAgICAgICAgIHdoaWxlIChjdXIpIHtcbiAgICAgICAgICAgICAgICB5aWVsZCBjdXIuZGF0YTtcbiAgICAgICAgICAgICAgICBjdXIgPSBjdXIubmV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJlbW92ZSAodGVzdEZuKSB7XG4gICAgICAgICAgICB2YXIgY3VyciA9IHRoaXMuaGVhZDtcbiAgICAgICAgICAgIHdoaWxlKGN1cnIpIHtcbiAgICAgICAgICAgICAgICB2YXIge25leHR9ID0gY3VycjtcbiAgICAgICAgICAgICAgICBpZiAodGVzdEZuKGN1cnIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlTGluayhjdXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY3VyciA9IG5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldEluaXRpYWwoZGxsLCBub2RlKSB7XG4gICAgICAgIGRsbC5sZW5ndGggPSAxO1xuICAgICAgICBkbGwuaGVhZCA9IGRsbC50YWlsID0gbm9kZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBxdWV1ZSQxKHdvcmtlciwgY29uY3VycmVuY3ksIHBheWxvYWQpIHtcbiAgICAgICAgaWYgKGNvbmN1cnJlbmN5ID09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKGNvbmN1cnJlbmN5ID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQ29uY3VycmVuY3kgbXVzdCBub3QgYmUgemVybycpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIF93b3JrZXIgPSB3cmFwQXN5bmMod29ya2VyKTtcbiAgICAgICAgdmFyIG51bVJ1bm5pbmcgPSAwO1xuICAgICAgICB2YXIgd29ya2Vyc0xpc3QgPSBbXTtcbiAgICAgICAgY29uc3QgZXZlbnRzID0ge1xuICAgICAgICAgICAgZXJyb3I6IFtdLFxuICAgICAgICAgICAgZHJhaW46IFtdLFxuICAgICAgICAgICAgc2F0dXJhdGVkOiBbXSxcbiAgICAgICAgICAgIHVuc2F0dXJhdGVkOiBbXSxcbiAgICAgICAgICAgIGVtcHR5OiBbXVxuICAgICAgICB9O1xuXG4gICAgICAgIGZ1bmN0aW9uIG9uIChldmVudCwgaGFuZGxlcikge1xuICAgICAgICAgICAgZXZlbnRzW2V2ZW50XS5wdXNoKGhhbmRsZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gb25jZSAoZXZlbnQsIGhhbmRsZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZUFuZFJlbW92ZSA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgb2ZmKGV2ZW50LCBoYW5kbGVBbmRSZW1vdmUpO1xuICAgICAgICAgICAgICAgIGhhbmRsZXIoLi4uYXJncyk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZXZlbnRzW2V2ZW50XS5wdXNoKGhhbmRsZUFuZFJlbW92ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBvZmYgKGV2ZW50LCBoYW5kbGVyKSB7XG4gICAgICAgICAgICBpZiAoIWV2ZW50KSByZXR1cm4gT2JqZWN0LmtleXMoZXZlbnRzKS5mb3JFYWNoKGV2ID0+IGV2ZW50c1tldl0gPSBbXSlcbiAgICAgICAgICAgIGlmICghaGFuZGxlcikgcmV0dXJuIGV2ZW50c1tldmVudF0gPSBbXVxuICAgICAgICAgICAgZXZlbnRzW2V2ZW50XSA9IGV2ZW50c1tldmVudF0uZmlsdGVyKGV2ID0+IGV2ICE9PSBoYW5kbGVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHRyaWdnZXIgKGV2ZW50LCAuLi5hcmdzKSB7XG4gICAgICAgICAgICBldmVudHNbZXZlbnRdLmZvckVhY2goaGFuZGxlciA9PiBoYW5kbGVyKC4uLmFyZ3MpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBwcm9jZXNzaW5nU2NoZWR1bGVkID0gZmFsc2U7XG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQoZGF0YSwgaW5zZXJ0QXRGcm9udCwgcmVqZWN0T25FcnJvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayAhPSBudWxsICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndGFzayBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHEuc3RhcnRlZCA9IHRydWU7XG5cbiAgICAgICAgICAgIHZhciByZXMsIHJlajtcbiAgICAgICAgICAgIGZ1bmN0aW9uIHByb21pc2VDYWxsYmFjayAoZXJyLCAuLi5hcmdzKSB7XG4gICAgICAgICAgICAgICAgLy8gd2UgZG9uJ3QgY2FyZSBhYm91dCB0aGUgZXJyb3IsIGxldCB0aGUgZ2xvYmFsIGVycm9yIGhhbmRsZXJcbiAgICAgICAgICAgICAgICAvLyBkZWFsIHdpdGggaXRcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gcmVqZWN0T25FcnJvciA/IHJlaihlcnIpIDogcmVzKClcbiAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkgcmV0dXJuIHJlcyhhcmdzWzBdKVxuICAgICAgICAgICAgICAgIHJlcyhhcmdzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGl0ZW0gPSBxLl9jcmVhdGVUYXNrSXRlbShcbiAgICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICAgIHJlamVjdE9uRXJyb3IgPyBwcm9taXNlQ2FsbGJhY2sgOlxuICAgICAgICAgICAgICAgICAgICAoY2FsbGJhY2sgfHwgcHJvbWlzZUNhbGxiYWNrKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKGluc2VydEF0RnJvbnQpIHtcbiAgICAgICAgICAgICAgICBxLl90YXNrcy51bnNoaWZ0KGl0ZW0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBxLl90YXNrcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXByb2Nlc3NpbmdTY2hlZHVsZWQpIHtcbiAgICAgICAgICAgICAgICBwcm9jZXNzaW5nU2NoZWR1bGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUkMSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3NpbmdTY2hlZHVsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcS5wcm9jZXNzKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZWplY3RPbkVycm9yIHx8ICFjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlcyA9IHJlc29sdmU7XG4gICAgICAgICAgICAgICAgICAgIHJlaiA9IHJlamVjdDtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gX2NyZWF0ZUNCKHRhc2tzKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGVyciwgLi4uYXJncykge1xuICAgICAgICAgICAgICAgIG51bVJ1bm5pbmcgLT0gMTtcblxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gdGFza3MubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0YXNrID0gdGFza3NbaV07XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gd29ya2Vyc0xpc3QuaW5kZXhPZih0YXNrKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzTGlzdC5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Vyc0xpc3Quc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRhc2suY2FsbGJhY2soZXJyLCAuLi5hcmdzKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXIoJ2Vycm9yJywgZXJyLCB0YXNrLmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKG51bVJ1bm5pbmcgPD0gKHEuY29uY3VycmVuY3kgLSBxLmJ1ZmZlcikgKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXIoJ3Vuc2F0dXJhdGVkJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHEuaWRsZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXIoJ2RyYWluJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHEucHJvY2VzcygpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIF9tYXliZURyYWluKGRhdGEpIHtcbiAgICAgICAgICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMCAmJiBxLmlkbGUoKSkge1xuICAgICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlJDEoKCkgPT4gdHJpZ2dlcignZHJhaW4nKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXZlbnRNZXRob2QgPSAobmFtZSkgPT4gKGhhbmRsZXIpID0+IHtcbiAgICAgICAgICAgIGlmICghaGFuZGxlcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG9uY2UobmFtZSwgKGVyciwgZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycikgcmV0dXJuIHJlamVjdChlcnIpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb2ZmKG5hbWUpO1xuICAgICAgICAgICAgb24obmFtZSwgaGFuZGxlcik7XG5cbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgaXNQcm9jZXNzaW5nID0gZmFsc2U7XG4gICAgICAgIHZhciBxID0ge1xuICAgICAgICAgICAgX3Rhc2tzOiBuZXcgRExMKCksXG4gICAgICAgICAgICBfY3JlYXRlVGFza0l0ZW0gKGRhdGEsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICpbU3ltYm9sLml0ZXJhdG9yXSAoKSB7XG4gICAgICAgICAgICAgICAgeWllbGQqIHEuX3Rhc2tzW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb25jdXJyZW5jeSxcbiAgICAgICAgICAgIHBheWxvYWQsXG4gICAgICAgICAgICBidWZmZXI6IGNvbmN1cnJlbmN5IC8gNCxcbiAgICAgICAgICAgIHN0YXJ0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgcGF1c2VkOiBmYWxzZSxcbiAgICAgICAgICAgIHB1c2ggKGRhdGEsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9tYXliZURyYWluKGRhdGEpKSByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEubWFwKGRhdHVtID0+IF9pbnNlcnQoZGF0dW0sIGZhbHNlLCBmYWxzZSwgY2FsbGJhY2spKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gX2luc2VydChkYXRhLCBmYWxzZSwgZmFsc2UsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwdXNoQXN5bmMgKGRhdGEsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9tYXliZURyYWluKGRhdGEpKSByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEubWFwKGRhdHVtID0+IF9pbnNlcnQoZGF0dW0sIGZhbHNlLCB0cnVlLCBjYWxsYmFjaykpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBfaW5zZXJ0KGRhdGEsIGZhbHNlLCB0cnVlLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAga2lsbCAoKSB7XG4gICAgICAgICAgICAgICAgb2ZmKCk7XG4gICAgICAgICAgICAgICAgcS5fdGFza3MuZW1wdHkoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bnNoaWZ0IChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfbWF5YmVEcmFpbihkYXRhKSkgcmV0dXJuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhLm1hcChkYXR1bSA9PiBfaW5zZXJ0KGRhdHVtLCB0cnVlLCBmYWxzZSwgY2FsbGJhY2spKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gX2luc2VydChkYXRhLCB0cnVlLCBmYWxzZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVuc2hpZnRBc3luYyAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoX21heWJlRHJhaW4oZGF0YSkpIHJldHVyblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YS5tYXAoZGF0dW0gPT4gX2luc2VydChkYXR1bSwgdHJ1ZSwgdHJ1ZSwgY2FsbGJhY2spKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gX2luc2VydChkYXRhLCB0cnVlLCB0cnVlLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVtb3ZlICh0ZXN0Rm4pIHtcbiAgICAgICAgICAgICAgICBxLl90YXNrcy5yZW1vdmUodGVzdEZuKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9jZXNzICgpIHtcbiAgICAgICAgICAgICAgICAvLyBBdm9pZCB0cnlpbmcgdG8gc3RhcnQgdG9vIG1hbnkgcHJvY2Vzc2luZyBvcGVyYXRpb25zLiBUaGlzIGNhbiBvY2N1clxuICAgICAgICAgICAgICAgIC8vIHdoZW4gY2FsbGJhY2tzIHJlc29sdmUgc3luY2hyb25vdXNseSAoIzEyNjcpLlxuICAgICAgICAgICAgICAgIGlmIChpc1Byb2Nlc3NpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpc1Byb2Nlc3NpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHdoaWxlKCFxLnBhdXNlZCAmJiBudW1SdW5uaW5nIDwgcS5jb25jdXJyZW5jeSAmJiBxLl90YXNrcy5sZW5ndGgpe1xuICAgICAgICAgICAgICAgICAgICB2YXIgdGFza3MgPSBbXSwgZGF0YSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbCA9IHEuX3Rhc2tzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHEucGF5bG9hZCkgbCA9IE1hdGgubWluKGwsIHEucGF5bG9hZCk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IHEuX3Rhc2tzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXNrcy5wdXNoKG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Vyc0xpc3QucHVzaChub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEucHVzaChub2RlLmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgbnVtUnVubmluZyArPSAxO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChxLl90YXNrcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXIoJ2VtcHR5Jyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAobnVtUnVubmluZyA9PT0gcS5jb25jdXJyZW5jeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcignc2F0dXJhdGVkJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgY2IgPSBvbmx5T25jZShfY3JlYXRlQ0IodGFza3MpKTtcbiAgICAgICAgICAgICAgICAgICAgX3dvcmtlcihkYXRhLCBjYik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlzUHJvY2Vzc2luZyA9IGZhbHNlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlbmd0aCAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHEuX3Rhc2tzLmxlbmd0aDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBydW5uaW5nICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtUnVubmluZztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB3b3JrZXJzTGlzdCAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtlcnNMaXN0O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlkbGUoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHEuX3Rhc2tzLmxlbmd0aCArIG51bVJ1bm5pbmcgPT09IDA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGF1c2UgKCkge1xuICAgICAgICAgICAgICAgIHEucGF1c2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXN1bWUgKCkge1xuICAgICAgICAgICAgICAgIGlmIChxLnBhdXNlZCA9PT0gZmFsc2UpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUkMShxLnByb2Nlc3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICAvLyBkZWZpbmUgdGhlc2UgYXMgZml4ZWQgcHJvcGVydGllcywgc28gcGVvcGxlIGdldCB1c2VmdWwgZXJyb3JzIHdoZW4gdXBkYXRpbmdcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMocSwge1xuICAgICAgICAgICAgc2F0dXJhdGVkOiB7XG4gICAgICAgICAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBldmVudE1ldGhvZCgnc2F0dXJhdGVkJylcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bnNhdHVyYXRlZDoge1xuICAgICAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogZXZlbnRNZXRob2QoJ3Vuc2F0dXJhdGVkJylcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbXB0eToge1xuICAgICAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogZXZlbnRNZXRob2QoJ2VtcHR5JylcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkcmFpbjoge1xuICAgICAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogZXZlbnRNZXRob2QoJ2RyYWluJylcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvcjoge1xuICAgICAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogZXZlbnRNZXRob2QoJ2Vycm9yJylcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgYGNhcmdvYCBvYmplY3Qgd2l0aCB0aGUgc3BlY2lmaWVkIHBheWxvYWQuIFRhc2tzIGFkZGVkIHRvIHRoZVxuICAgICAqIGNhcmdvIHdpbGwgYmUgcHJvY2Vzc2VkIGFsdG9nZXRoZXIgKHVwIHRvIHRoZSBgcGF5bG9hZGAgbGltaXQpLiBJZiB0aGVcbiAgICAgKiBgd29ya2VyYCBpcyBpbiBwcm9ncmVzcywgdGhlIHRhc2sgaXMgcXVldWVkIHVudGlsIGl0IGJlY29tZXMgYXZhaWxhYmxlLiBPbmNlXG4gICAgICogdGhlIGB3b3JrZXJgIGhhcyBjb21wbGV0ZWQgc29tZSB0YXNrcywgZWFjaCBjYWxsYmFjayBvZiB0aG9zZSB0YXNrcyBpc1xuICAgICAqIGNhbGxlZC4gQ2hlY2sgb3V0IFt0aGVzZV0oaHR0cHM6Ly9jYW1vLmdpdGh1YnVzZXJjb250ZW50LmNvbS82YmJkMzZmNGNmNWIzNWEwZjExYTk2ZGNkMmU5NzcxMWZmYzJmYjM3LzY4NzQ3NDcwNzMzYTJmMmY2NjJlNjM2YzZmNzU2NDJlNjc2OTc0Njg3NTYyMmU2MzZmNmQyZjYxNzM3MzY1NzQ3MzJmMzEzNjM3MzYzODM3MzEyZjM2MzgzMTMwMzgyZjYyNjI2MzMwNjM2NjYyMzAyZDM1NjYzMjM5MmQzMTMxNjUzMjJkMzkzNzM0NjYyZDMzMzMzOTM3NjMzNjM0NjQ2MzM4MzUzODJlNjc2OTY2KSBbYW5pbWF0aW9uc10oaHR0cHM6Ly9jYW1vLmdpdGh1YnVzZXJjb250ZW50LmNvbS9mNDgxMGUwMGUxYzVmNWY4YWRkYmUzZTlmNDkwNjRmZDVkMTAyNjk5LzY4NzQ3NDcwNzMzYTJmMmY2NjJlNjM2YzZmNzU2NDJlNjc2OTc0Njg3NTYyMmU2MzZmNmQyZjYxNzM3MzY1NzQ3MzJmMzEzNjM3MzYzODM3MzEyZjM2MzgzMTMwMzEyZjM4MzQ2MzM5MzIzMDM2MzYyZDM1NjYzMjM5MmQzMTMxNjUzMjJkMzgzMTM0NjYyZDM5NjQzMzY0MzAzMjM0MzEzMzYyNjY2NDJlNjc2OTY2KVxuICAgICAqIGZvciBob3cgYGNhcmdvYCBhbmQgYHF1ZXVlYCB3b3JrLlxuICAgICAqXG4gICAgICogV2hpbGUgW2BxdWV1ZWBde0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy5xdWV1ZX0gcGFzc2VzIG9ubHkgb25lIHRhc2sgdG8gb25lIG9mIGEgZ3JvdXAgb2Ygd29ya2Vyc1xuICAgICAqIGF0IGEgdGltZSwgY2FyZ28gcGFzc2VzIGFuIGFycmF5IG9mIHRhc2tzIHRvIGEgc2luZ2xlIHdvcmtlciwgcmVwZWF0aW5nXG4gICAgICogd2hlbiB0aGUgd29ya2VyIGlzIGZpbmlzaGVkLlxuICAgICAqXG4gICAgICogQG5hbWUgY2FyZ29cbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb250cm9sRmxvd1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5xdWV1ZV17QGxpbmsgbW9kdWxlOkNvbnRyb2xGbG93LnF1ZXVlfVxuICAgICAqIEBjYXRlZ29yeSBDb250cm9sIEZsb3dcbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IHdvcmtlciAtIEFuIGFzeW5jaHJvbm91cyBmdW5jdGlvbiBmb3IgcHJvY2Vzc2luZyBhbiBhcnJheVxuICAgICAqIG9mIHF1ZXVlZCB0YXNrcy4gSW52b2tlZCB3aXRoIGAodGFza3MsIGNhbGxiYWNrKWAuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtwYXlsb2FkPUluZmluaXR5XSAtIEFuIG9wdGlvbmFsIGBpbnRlZ2VyYCBmb3IgZGV0ZXJtaW5pbmdcbiAgICAgKiBob3cgbWFueSB0YXNrcyBzaG91bGQgYmUgcHJvY2Vzc2VkIHBlciByb3VuZDsgaWYgb21pdHRlZCwgdGhlIGRlZmF1bHQgaXNcbiAgICAgKiB1bmxpbWl0ZWQuXG4gICAgICogQHJldHVybnMge21vZHVsZTpDb250cm9sRmxvdy5RdWV1ZU9iamVjdH0gQSBjYXJnbyBvYmplY3QgdG8gbWFuYWdlIHRoZSB0YXNrcy4gQ2FsbGJhY2tzIGNhblxuICAgICAqIGF0dGFjaGVkIGFzIGNlcnRhaW4gcHJvcGVydGllcyB0byBsaXN0ZW4gZm9yIHNwZWNpZmljIGV2ZW50cyBkdXJpbmcgdGhlXG4gICAgICogbGlmZWN5Y2xlIG9mIHRoZSBjYXJnbyBhbmQgaW5uZXIgcXVldWUuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vIGNyZWF0ZSBhIGNhcmdvIG9iamVjdCB3aXRoIHBheWxvYWQgMlxuICAgICAqIHZhciBjYXJnbyA9IGFzeW5jLmNhcmdvKGZ1bmN0aW9uKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAqICAgICBmb3IgKHZhciBpPTA7IGk8dGFza3MubGVuZ3RoOyBpKyspIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKCdoZWxsbyAnICsgdGFza3NbaV0ubmFtZSk7XG4gICAgICogICAgIH1cbiAgICAgKiAgICAgY2FsbGJhY2soKTtcbiAgICAgKiB9LCAyKTtcbiAgICAgKlxuICAgICAqIC8vIGFkZCBzb21lIGl0ZW1zXG4gICAgICogY2FyZ28ucHVzaCh7bmFtZTogJ2Zvbyd9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coJ2ZpbmlzaGVkIHByb2Nlc3NpbmcgZm9vJyk7XG4gICAgICogfSk7XG4gICAgICogY2FyZ28ucHVzaCh7bmFtZTogJ2Jhcid9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coJ2ZpbmlzaGVkIHByb2Nlc3NpbmcgYmFyJyk7XG4gICAgICogfSk7XG4gICAgICogYXdhaXQgY2FyZ28ucHVzaCh7bmFtZTogJ2Jheid9KTtcbiAgICAgKiBjb25zb2xlLmxvZygnZmluaXNoZWQgcHJvY2Vzc2luZyBiYXonKTtcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjYXJnbyQxKHdvcmtlciwgcGF5bG9hZCkge1xuICAgICAgICByZXR1cm4gcXVldWUkMSh3b3JrZXIsIDEsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBgY2FyZ29RdWV1ZWAgb2JqZWN0IHdpdGggdGhlIHNwZWNpZmllZCBwYXlsb2FkLiBUYXNrcyBhZGRlZCB0byB0aGVcbiAgICAgKiBjYXJnb1F1ZXVlIHdpbGwgYmUgcHJvY2Vzc2VkIHRvZ2V0aGVyICh1cCB0byB0aGUgYHBheWxvYWRgIGxpbWl0KSBpbiBgY29uY3VycmVuY3lgIHBhcmFsbGVsIHdvcmtlcnMuXG4gICAgICogSWYgdGhlIGFsbCBgd29ya2Vyc2AgYXJlIGluIHByb2dyZXNzLCB0aGUgdGFzayBpcyBxdWV1ZWQgdW50aWwgb25lIGJlY29tZXMgYXZhaWxhYmxlLiBPbmNlXG4gICAgICogYSBgd29ya2VyYCBoYXMgY29tcGxldGVkIHNvbWUgdGFza3MsIGVhY2ggY2FsbGJhY2sgb2YgdGhvc2UgdGFza3MgaXNcbiAgICAgKiBjYWxsZWQuIENoZWNrIG91dCBbdGhlc2VdKGh0dHBzOi8vY2Ftby5naXRodWJ1c2VyY29udGVudC5jb20vNmJiZDM2ZjRjZjViMzVhMGYxMWE5NmRjZDJlOTc3MTFmZmMyZmIzNy82ODc0NzQ3MDczM2EyZjJmNjYyZTYzNmM2Zjc1NjQyZTY3Njk3NDY4NzU2MjJlNjM2ZjZkMmY2MTczNzM2NTc0NzMyZjMxMzYzNzM2MzgzNzMxMmYzNjM4MzEzMDM4MmY2MjYyNjMzMDYzNjY2MjMwMmQzNTY2MzIzOTJkMzEzMTY1MzIyZDM5MzczNDY2MmQzMzMzMzkzNzYzMzYzNDY0NjMzODM1MzgyZTY3Njk2NikgW2FuaW1hdGlvbnNdKGh0dHBzOi8vY2Ftby5naXRodWJ1c2VyY29udGVudC5jb20vZjQ4MTBlMDBlMWM1ZjVmOGFkZGJlM2U5ZjQ5MDY0ZmQ1ZDEwMjY5OS82ODc0NzQ3MDczM2EyZjJmNjYyZTYzNmM2Zjc1NjQyZTY3Njk3NDY4NzU2MjJlNjM2ZjZkMmY2MTczNzM2NTc0NzMyZjMxMzYzNzM2MzgzNzMxMmYzNjM4MzEzMDMxMmYzODM0NjMzOTMyMzAzNjM2MmQzNTY2MzIzOTJkMzEzMTY1MzIyZDM4MzEzNDY2MmQzOTY0MzM2NDMwMzIzNDMxMzM2MjY2NjQyZTY3Njk2NilcbiAgICAgKiBmb3IgaG93IGBjYXJnb2AgYW5kIGBxdWV1ZWAgd29yay5cbiAgICAgKlxuICAgICAqIFdoaWxlIFtgcXVldWVgXXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cucXVldWV9IHBhc3NlcyBvbmx5IG9uZSB0YXNrIHRvIG9uZSBvZiBhIGdyb3VwIG9mIHdvcmtlcnNcbiAgICAgKiBhdCBhIHRpbWUsIGFuZCBbYGNhcmdvYF17QGxpbmsgbW9kdWxlOkNvbnRyb2xGbG93LmNhcmdvfSBwYXNzZXMgYW4gYXJyYXkgb2YgdGFza3MgdG8gYSBzaW5nbGUgd29ya2VyLFxuICAgICAqIHRoZSBjYXJnb1F1ZXVlIHBhc3NlcyBhbiBhcnJheSBvZiB0YXNrcyB0byBtdWx0aXBsZSBwYXJhbGxlbCB3b3JrZXJzLlxuICAgICAqXG4gICAgICogQG5hbWUgY2FyZ29RdWV1ZVxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbnRyb2xGbG93XG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLnF1ZXVlXXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cucXVldWV9XG4gICAgICogQHNlZSBbYXN5bmMuY2FyZ29de0BsaW5rIG1vZHVsZTpDb250cm9sRkxvdy5jYXJnb31cbiAgICAgKiBAY2F0ZWdvcnkgQ29udHJvbCBGbG93XG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSB3b3JrZXIgLSBBbiBhc3luY2hyb25vdXMgZnVuY3Rpb24gZm9yIHByb2Nlc3NpbmcgYW4gYXJyYXlcbiAgICAgKiBvZiBxdWV1ZWQgdGFza3MuIEludm9rZWQgd2l0aCBgKHRhc2tzLCBjYWxsYmFjaylgLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbY29uY3VycmVuY3k9MV0gLSBBbiBgaW50ZWdlcmAgZm9yIGRldGVybWluaW5nIGhvdyBtYW55XG4gICAgICogYHdvcmtlcmAgZnVuY3Rpb25zIHNob3VsZCBiZSBydW4gaW4gcGFyYWxsZWwuICBJZiBvbWl0dGVkLCB0aGUgY29uY3VycmVuY3lcbiAgICAgKiBkZWZhdWx0cyB0byBgMWAuICBJZiB0aGUgY29uY3VycmVuY3kgaXMgYDBgLCBhbiBlcnJvciBpcyB0aHJvd24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtwYXlsb2FkPUluZmluaXR5XSAtIEFuIG9wdGlvbmFsIGBpbnRlZ2VyYCBmb3IgZGV0ZXJtaW5pbmdcbiAgICAgKiBob3cgbWFueSB0YXNrcyBzaG91bGQgYmUgcHJvY2Vzc2VkIHBlciByb3VuZDsgaWYgb21pdHRlZCwgdGhlIGRlZmF1bHQgaXNcbiAgICAgKiB1bmxpbWl0ZWQuXG4gICAgICogQHJldHVybnMge21vZHVsZTpDb250cm9sRmxvdy5RdWV1ZU9iamVjdH0gQSBjYXJnb1F1ZXVlIG9iamVjdCB0byBtYW5hZ2UgdGhlIHRhc2tzLiBDYWxsYmFja3MgY2FuXG4gICAgICogYXR0YWNoZWQgYXMgY2VydGFpbiBwcm9wZXJ0aWVzIHRvIGxpc3RlbiBmb3Igc3BlY2lmaWMgZXZlbnRzIGR1cmluZyB0aGVcbiAgICAgKiBsaWZlY3ljbGUgb2YgdGhlIGNhcmdvUXVldWUgYW5kIGlubmVyIHF1ZXVlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBjcmVhdGUgYSBjYXJnb1F1ZXVlIG9iamVjdCB3aXRoIHBheWxvYWQgMiBhbmQgY29uY3VycmVuY3kgMlxuICAgICAqIHZhciBjYXJnb1F1ZXVlID0gYXN5bmMuY2FyZ29RdWV1ZShmdW5jdGlvbih0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgZm9yICh2YXIgaT0wOyBpPHRhc2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZygnaGVsbG8gJyArIHRhc2tzW2ldLm5hbWUpO1xuICAgICAqICAgICB9XG4gICAgICogICAgIGNhbGxiYWNrKCk7XG4gICAgICogfSwgMiwgMik7XG4gICAgICpcbiAgICAgKiAvLyBhZGQgc29tZSBpdGVtc1xuICAgICAqIGNhcmdvUXVldWUucHVzaCh7bmFtZTogJ2Zvbyd9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coJ2ZpbmlzaGVkIHByb2Nlc3NpbmcgZm9vJyk7XG4gICAgICogfSk7XG4gICAgICogY2FyZ29RdWV1ZS5wdXNoKHtuYW1lOiAnYmFyJ30sIGZ1bmN0aW9uKGVycikge1xuICAgICAqICAgICBjb25zb2xlLmxvZygnZmluaXNoZWQgcHJvY2Vzc2luZyBiYXInKTtcbiAgICAgKiB9KTtcbiAgICAgKiBjYXJnb1F1ZXVlLnB1c2goe25hbWU6ICdiYXonfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKCdmaW5pc2hlZCBwcm9jZXNzaW5nIGJheicpO1xuICAgICAqIH0pO1xuICAgICAqIGNhcmdvUXVldWUucHVzaCh7bmFtZTogJ2Jvbyd9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coJ2ZpbmlzaGVkIHByb2Nlc3NpbmcgYm9vJyk7XG4gICAgICogfSk7XG4gICAgICovXG4gICAgZnVuY3Rpb24gY2FyZ28od29ya2VyLCBjb25jdXJyZW5jeSwgcGF5bG9hZCkge1xuICAgICAgICByZXR1cm4gcXVldWUkMSh3b3JrZXIsIGNvbmN1cnJlbmN5LCBwYXlsb2FkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWR1Y2VzIGBjb2xsYCBpbnRvIGEgc2luZ2xlIHZhbHVlIHVzaW5nIGFuIGFzeW5jIGBpdGVyYXRlZWAgdG8gcmV0dXJuIGVhY2hcbiAgICAgKiBzdWNjZXNzaXZlIHN0ZXAuIGBtZW1vYCBpcyB0aGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgcmVkdWN0aW9uLiBUaGlzIGZ1bmN0aW9uXG4gICAgICogb25seSBvcGVyYXRlcyBpbiBzZXJpZXMuXG4gICAgICpcbiAgICAgKiBGb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgaXQgbWF5IG1ha2Ugc2Vuc2UgdG8gc3BsaXQgYSBjYWxsIHRvIHRoaXMgZnVuY3Rpb25cbiAgICAgKiBpbnRvIGEgcGFyYWxsZWwgbWFwLCBhbmQgdGhlbiB1c2UgdGhlIG5vcm1hbCBgQXJyYXkucHJvdG90eXBlLnJlZHVjZWAgb24gdGhlXG4gICAgICogcmVzdWx0cy4gVGhpcyBmdW5jdGlvbiBpcyBmb3Igc2l0dWF0aW9ucyB3aGVyZSBlYWNoIHN0ZXAgaW4gdGhlIHJlZHVjdGlvblxuICAgICAqIG5lZWRzIHRvIGJlIGFzeW5jOyBpZiB5b3UgY2FuIGdldCB0aGUgZGF0YSBiZWZvcmUgcmVkdWNpbmcgaXQsIHRoZW4gaXQnc1xuICAgICAqIHByb2JhYmx5IGEgZ29vZCBpZGVhIHRvIGRvIHNvLlxuICAgICAqXG4gICAgICogQG5hbWUgcmVkdWNlXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGFsaWFzIGluamVjdFxuICAgICAqIEBhbGlhcyBmb2xkbFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHsqfSBtZW1vIC0gVGhlIGluaXRpYWwgc3RhdGUgb2YgdGhlIHJlZHVjdGlvbi5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQSBmdW5jdGlvbiBhcHBsaWVkIHRvIGVhY2ggaXRlbSBpbiB0aGVcbiAgICAgKiBhcnJheSB0byBwcm9kdWNlIHRoZSBuZXh0IHN0ZXAgaW4gdGhlIHJlZHVjdGlvbi5cbiAgICAgKiBUaGUgYGl0ZXJhdGVlYCBzaG91bGQgY29tcGxldGUgd2l0aCB0aGUgbmV4dCBzdGF0ZSBvZiB0aGUgcmVkdWN0aW9uLlxuICAgICAqIElmIHRoZSBpdGVyYXRlZSBjb21wbGV0ZXMgd2l0aCBhbiBlcnJvciwgdGhlIHJlZHVjdGlvbiBpcyBzdG9wcGVkIGFuZCB0aGVcbiAgICAgKiBtYWluIGBjYWxsYmFja2AgaXMgaW1tZWRpYXRlbHkgY2FsbGVkIHdpdGggdGhlIGVycm9yLlxuICAgICAqIEludm9rZWQgd2l0aCAobWVtbywgaXRlbSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCBhZnRlciBhbGwgdGhlXG4gICAgICogYGl0ZXJhdGVlYCBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZC4gUmVzdWx0IGlzIHRoZSByZWR1Y2VkIHZhbHVlLiBJbnZva2VkIHdpdGhcbiAgICAgKiAoZXJyLCByZXN1bHQpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIG5vIGNhbGxiYWNrIGlzIHBhc3NlZFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBmaWxlMS50eHQgaXMgYSBmaWxlIHRoYXQgaXMgMTAwMCBieXRlcyBpbiBzaXplXG4gICAgICogLy8gZmlsZTIudHh0IGlzIGEgZmlsZSB0aGF0IGlzIDIwMDAgYnl0ZXMgaW4gc2l6ZVxuICAgICAqIC8vIGZpbGUzLnR4dCBpcyBhIGZpbGUgdGhhdCBpcyAzMDAwIGJ5dGVzIGluIHNpemVcbiAgICAgKiAvLyBmaWxlNC50eHQgZG9lcyBub3QgZXhpc3RcbiAgICAgKlxuICAgICAqIGNvbnN0IGZpbGVMaXN0ID0gWydmaWxlMS50eHQnLCdmaWxlMi50eHQnLCdmaWxlMy50eHQnXTtcbiAgICAgKiBjb25zdCB3aXRoTWlzc2luZ0ZpbGVMaXN0ID0gWydmaWxlMS50eHQnLCdmaWxlMi50eHQnLCdmaWxlMy50eHQnLCAnZmlsZTQudHh0J107XG4gICAgICpcbiAgICAgKiAvLyBhc3luY2hyb25vdXMgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyB0aGUgZmlsZSBzaXplIGluIGJ5dGVzXG4gICAgICogLy8gZmlsZSBzaXplIGlzIGFkZGVkIHRvIHRoZSBtZW1vaXplZCB2YWx1ZSwgdGhlbiByZXR1cm5lZFxuICAgICAqIGZ1bmN0aW9uIGdldEZpbGVTaXplSW5CeXRlcyhtZW1vLCBmaWxlLCBjYWxsYmFjaykge1xuICAgICAqICAgICBmcy5zdGF0KGZpbGUsIGZ1bmN0aW9uKGVyciwgc3RhdCkge1xuICAgICAqICAgICAgICAgaWYgKGVycikge1xuICAgICAqICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAqICAgICAgICAgfVxuICAgICAqICAgICAgICAgY2FsbGJhY2sobnVsbCwgbWVtbyArIHN0YXQuc2l6ZSk7XG4gICAgICogICAgIH0pO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIGNhbGxiYWNrc1xuICAgICAqIGFzeW5jLnJlZHVjZShmaWxlTGlzdCwgMCwgZ2V0RmlsZVNpemVJbkJ5dGVzLCBmdW5jdGlvbihlcnIsIHJlc3VsdCkge1xuICAgICAqICAgICBpZiAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9IGVsc2Uge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgICAgIC8vIDYwMDBcbiAgICAgKiAgICAgICAgIC8vIHdoaWNoIGlzIHRoZSBzdW0gb2YgdGhlIGZpbGUgc2l6ZXMgb2YgdGhlIHRocmVlIGZpbGVzXG4gICAgICogICAgIH1cbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIEVycm9yIEhhbmRsaW5nXG4gICAgICogYXN5bmMucmVkdWNlKHdpdGhNaXNzaW5nRmlsZUxpc3QsIDAsIGdldEZpbGVTaXplSW5CeXRlcywgZnVuY3Rpb24oZXJyLCByZXN1bHQpIHtcbiAgICAgKiAgICAgaWYgKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgICAgIC8vIFsgRXJyb3I6IEVOT0VOVDogbm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSBdXG4gICAgICogICAgIH0gZWxzZSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICB9XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBQcm9taXNlc1xuICAgICAqIGFzeW5jLnJlZHVjZShmaWxlTGlzdCwgMCwgZ2V0RmlsZVNpemVJbkJ5dGVzKVxuICAgICAqIC50aGVuKCByZXN1bHQgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAvLyA2MDAwXG4gICAgICogICAgIC8vIHdoaWNoIGlzIHRoZSBzdW0gb2YgdGhlIGZpbGUgc2l6ZXMgb2YgdGhlIHRocmVlIGZpbGVzXG4gICAgICogfSkuY2F0Y2goIGVyciA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBFcnJvciBIYW5kbGluZ1xuICAgICAqIGFzeW5jLnJlZHVjZSh3aXRoTWlzc2luZ0ZpbGVMaXN0LCAwLCBnZXRGaWxlU2l6ZUluQnl0ZXMpXG4gICAgICogLnRoZW4oIHJlc3VsdCA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XG4gICAgICogfSkuY2F0Y2goIGVyciA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgIC8vIFsgRXJyb3I6IEVOT0VOVDogbm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSBdXG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBhc3luYy9hd2FpdFxuICAgICAqIGFzeW5jICgpID0+IHtcbiAgICAgKiAgICAgdHJ5IHtcbiAgICAgKiAgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBhc3luYy5yZWR1Y2UoZmlsZUxpc3QsIDAsIGdldEZpbGVTaXplSW5CeXRlcyk7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAgICAgLy8gNjAwMFxuICAgICAqICAgICAgICAgLy8gd2hpY2ggaXMgdGhlIHN1bSBvZiB0aGUgZmlsZSBzaXplcyBvZiB0aGUgdGhyZWUgZmlsZXNcbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICogLy8gRXJyb3IgSGFuZGxpbmdcbiAgICAgKiBhc3luYyAoKSA9PiB7XG4gICAgICogICAgIHRyeSB7XG4gICAgICogICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgYXN5bmMucmVkdWNlKHdpdGhNaXNzaW5nRmlsZUxpc3QsIDAsIGdldEZpbGVTaXplSW5CeXRlcyk7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICB9XG4gICAgICogICAgIGNhdGNoIChlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgICAgICAvLyBbIEVycm9yOiBFTk9FTlQ6IG5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkgXVxuICAgICAqICAgICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICovXG4gICAgZnVuY3Rpb24gcmVkdWNlKGNvbGwsIG1lbW8sIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IG9uY2UoY2FsbGJhY2spO1xuICAgICAgICB2YXIgX2l0ZXJhdGVlID0gd3JhcEFzeW5jKGl0ZXJhdGVlKTtcbiAgICAgICAgcmV0dXJuIGVhY2hPZlNlcmllcyQxKGNvbGwsICh4LCBpLCBpdGVyQ2IpID0+IHtcbiAgICAgICAgICAgIF9pdGVyYXRlZShtZW1vLCB4LCAoZXJyLCB2KSA9PiB7XG4gICAgICAgICAgICAgICAgbWVtbyA9IHY7XG4gICAgICAgICAgICAgICAgaXRlckNiKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZXJyID0+IGNhbGxiYWNrKGVyciwgbWVtbykpO1xuICAgIH1cbiAgICB2YXIgcmVkdWNlJDEgPSBhd2FpdGlmeShyZWR1Y2UsIDQpO1xuXG4gICAgLyoqXG4gICAgICogVmVyc2lvbiBvZiB0aGUgY29tcG9zZSBmdW5jdGlvbiB0aGF0IGlzIG1vcmUgbmF0dXJhbCB0byByZWFkLiBFYWNoIGZ1bmN0aW9uXG4gICAgICogY29uc3VtZXMgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgcHJldmlvdXMgZnVuY3Rpb24uIEl0IGlzIHRoZSBlcXVpdmFsZW50IG9mXG4gICAgICogW2NvbXBvc2Vde0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy5jb21wb3NlfSB3aXRoIHRoZSBhcmd1bWVudHMgcmV2ZXJzZWQuXG4gICAgICpcbiAgICAgKiBFYWNoIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIHRoZSBjb21wb3NlZCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBuYW1lIHNlcVxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbnRyb2xGbG93XG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLmNvbXBvc2Vde0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy5jb21wb3NlfVxuICAgICAqIEBjYXRlZ29yeSBDb250cm9sIEZsb3dcbiAgICAgKiBAcGFyYW0gey4uLkFzeW5jRnVuY3Rpb259IGZ1bmN0aW9ucyAtIHRoZSBhc3luY2hyb25vdXMgZnVuY3Rpb25zIHRvIGNvbXBvc2VcbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IGEgZnVuY3Rpb24gdGhhdCBjb21wb3NlcyB0aGUgYGZ1bmN0aW9uc2AgaW4gb3JkZXJcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gUmVxdWlyZXMgbG9kYXNoIChvciB1bmRlcnNjb3JlKSwgZXhwcmVzczMgYW5kIGRyZXNlbmRlJ3Mgb3JtMi5cbiAgICAgKiAvLyBQYXJ0IG9mIGFuIGFwcCwgdGhhdCBmZXRjaGVzIGNhdHMgb2YgdGhlIGxvZ2dlZCB1c2VyLlxuICAgICAqIC8vIFRoaXMgZXhhbXBsZSB1c2VzIGBzZXFgIGZ1bmN0aW9uIHRvIGF2b2lkIG92ZXJuZXN0aW5nIGFuZCBlcnJvclxuICAgICAqIC8vIGhhbmRsaW5nIGNsdXR0ZXIuXG4gICAgICogYXBwLmdldCgnL2NhdHMnLCBmdW5jdGlvbihyZXF1ZXN0LCByZXNwb25zZSkge1xuICAgICAqICAgICB2YXIgVXNlciA9IHJlcXVlc3QubW9kZWxzLlVzZXI7XG4gICAgICogICAgIGFzeW5jLnNlcShcbiAgICAgKiAgICAgICAgIFVzZXIuZ2V0LmJpbmQoVXNlciksICAvLyAnVXNlci5nZXQnIGhhcyBzaWduYXR1cmUgKGlkLCBjYWxsYmFjayhlcnIsIGRhdGEpKVxuICAgICAqICAgICAgICAgZnVuY3Rpb24odXNlciwgZm4pIHtcbiAgICAgKiAgICAgICAgICAgICB1c2VyLmdldENhdHMoZm4pOyAgICAgIC8vICdnZXRDYXRzJyBoYXMgc2lnbmF0dXJlIChjYWxsYmFjayhlcnIsIGRhdGEpKVxuICAgICAqICAgICAgICAgfVxuICAgICAqICAgICApKHJlcS5zZXNzaW9uLnVzZXJfaWQsIGZ1bmN0aW9uIChlcnIsIGNhdHMpIHtcbiAgICAgKiAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgKiAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICogICAgICAgICAgICAgcmVzcG9uc2UuanNvbih7IHN0YXR1czogJ2Vycm9yJywgbWVzc2FnZTogZXJyLm1lc3NhZ2UgfSk7XG4gICAgICogICAgICAgICB9IGVsc2Uge1xuICAgICAqICAgICAgICAgICAgIHJlc3BvbnNlLmpzb24oeyBzdGF0dXM6ICdvaycsIG1lc3NhZ2U6ICdDYXRzIGZvdW5kJywgZGF0YTogY2F0cyB9KTtcbiAgICAgKiAgICAgICAgIH1cbiAgICAgKiAgICAgfSk7XG4gICAgICogfSk7XG4gICAgICovXG4gICAgZnVuY3Rpb24gc2VxKC4uLmZ1bmN0aW9ucykge1xuICAgICAgICB2YXIgX2Z1bmN0aW9ucyA9IGZ1bmN0aW9ucy5tYXAod3JhcEFzeW5jKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG5cbiAgICAgICAgICAgIHZhciBjYiA9IGFyZ3NbYXJncy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY2IgPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIGFyZ3MucG9wKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNiID0gcHJvbWlzZUNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlZHVjZSQxKF9mdW5jdGlvbnMsIGFyZ3MsIChuZXdhcmdzLCBmbiwgaXRlckNiKSA9PiB7XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgbmV3YXJncy5jb25jYXQoKGVyciwgLi4ubmV4dGFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaXRlckNiKGVyciwgbmV4dGFyZ3MpO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAoZXJyLCByZXN1bHRzKSA9PiBjYihlcnIsIC4uLnJlc3VsdHMpKTtcblxuICAgICAgICAgICAgcmV0dXJuIGNiW1BST01JU0VfU1lNQk9MXVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB3aGljaCBpcyBhIGNvbXBvc2l0aW9uIG9mIHRoZSBwYXNzZWQgYXN5bmNocm9ub3VzXG4gICAgICogZnVuY3Rpb25zLiBFYWNoIGZ1bmN0aW9uIGNvbnN1bWVzIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uIHRoYXRcbiAgICAgKiBmb2xsb3dzLiBDb21wb3NpbmcgZnVuY3Rpb25zIGBmKClgLCBgZygpYCwgYW5kIGBoKClgIHdvdWxkIHByb2R1Y2UgdGhlIHJlc3VsdFxuICAgICAqIG9mIGBmKGcoaCgpKSlgLCBvbmx5IHRoaXMgdmVyc2lvbiB1c2VzIGNhbGxiYWNrcyB0byBvYnRhaW4gdGhlIHJldHVybiB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBJZiB0aGUgbGFzdCBhcmd1bWVudCB0byB0aGUgY29tcG9zZWQgZnVuY3Rpb24gaXMgbm90IGEgZnVuY3Rpb24sIGEgcHJvbWlzZVxuICAgICAqIGlzIHJldHVybmVkIHdoZW4geW91IGNhbGwgaXQuXG4gICAgICpcbiAgICAgKiBFYWNoIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIHRoZSBjb21wb3NlZCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBuYW1lIGNvbXBvc2VcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb250cm9sRmxvd1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgQ29udHJvbCBGbG93XG4gICAgICogQHBhcmFtIHsuLi5Bc3luY0Z1bmN0aW9ufSBmdW5jdGlvbnMgLSB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9ucyB0byBjb21wb3NlXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBhbiBhc3luY2hyb25vdXMgZnVuY3Rpb24gdGhhdCBpcyB0aGUgY29tcG9zZWRcbiAgICAgKiBhc3luY2hyb25vdXMgYGZ1bmN0aW9uc2BcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gYWRkMShuLCBjYWxsYmFjaykge1xuICAgICAqICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsIG4gKyAxKTtcbiAgICAgKiAgICAgfSwgMTApO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIG11bDMobiwgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCBuICogMyk7XG4gICAgICogICAgIH0sIDEwKTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiB2YXIgYWRkMW11bDMgPSBhc3luYy5jb21wb3NlKG11bDMsIGFkZDEpO1xuICAgICAqIGFkZDFtdWwzKDQsIGZ1bmN0aW9uIChlcnIsIHJlc3VsdCkge1xuICAgICAqICAgICAvLyByZXN1bHQgbm93IGVxdWFscyAxNVxuICAgICAqIH0pO1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbXBvc2UoLi4uYXJncykge1xuICAgICAgICByZXR1cm4gc2VxKC4uLmFyZ3MucmV2ZXJzZSgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyBbYG1hcGBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5tYXB9IGJ1dCBydW5zIGEgbWF4aW11bSBvZiBgbGltaXRgIGFzeW5jIG9wZXJhdGlvbnMgYXQgYSB0aW1lLlxuICAgICAqXG4gICAgICogQG5hbWUgbWFwTGltaXRcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5tYXBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5tYXB9XG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfEFzeW5jSXRlcmFibGV8T2JqZWN0fSBjb2xsIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbGltaXQgLSBUaGUgbWF4aW11bSBudW1iZXIgb2YgYXN5bmMgb3BlcmF0aW9ucyBhdCBhIHRpbWUuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEFuIGFzeW5jIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggaXRlbSBpblxuICAgICAqIGBjb2xsYC5cbiAgICAgKiBUaGUgaXRlcmF0ZWUgc2hvdWxkIGNvbXBsZXRlIHdpdGggdGhlIHRyYW5zZm9ybWVkIGl0ZW0uXG4gICAgICogSW52b2tlZCB3aXRoIChpdGVtLCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIHdoZW4gYWxsIGBpdGVyYXRlZWBcbiAgICAgKiBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZCwgb3IgYW4gZXJyb3Igb2NjdXJzLiBSZXN1bHRzIGlzIGFuIGFycmF5IG9mIHRoZVxuICAgICAqIHRyYW5zZm9ybWVkIGl0ZW1zIGZyb20gdGhlIGBjb2xsYC4gSW52b2tlZCB3aXRoIChlcnIsIHJlc3VsdHMpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIG5vIGNhbGxiYWNrIGlzIHBhc3NlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1hcExpbWl0IChjb2xsLCBsaW1pdCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBfYXN5bmNNYXAoZWFjaE9mTGltaXQkMihsaW1pdCksIGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaylcbiAgICB9XG4gICAgdmFyIG1hcExpbWl0JDEgPSBhd2FpdGlmeShtYXBMaW1pdCwgNCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyBbYGNvbmNhdGBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5jb25jYXR9IGJ1dCBydW5zIGEgbWF4aW11bSBvZiBgbGltaXRgIGFzeW5jIG9wZXJhdGlvbnMgYXQgYSB0aW1lLlxuICAgICAqXG4gICAgICogQG5hbWUgY29uY2F0TGltaXRcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5jb25jYXRde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5jb25jYXR9XG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAYWxpYXMgZmxhdE1hcExpbWl0XG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbWl0IC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGFzeW5jIG9wZXJhdGlvbnMgYXQgYSB0aW1lLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggaXRlbSBpbiBgY29sbGAsXG4gICAgICogd2hpY2ggc2hvdWxkIHVzZSBhbiBhcnJheSBhcyBpdHMgcmVzdWx0LiBJbnZva2VkIHdpdGggKGl0ZW0sIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgYWZ0ZXIgYWxsIHRoZVxuICAgICAqIGBpdGVyYXRlZWAgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQsIG9yIGFuIGVycm9yIG9jY3Vycy4gUmVzdWx0cyBpcyBhbiBhcnJheVxuICAgICAqIGNvbnRhaW5pbmcgdGhlIGNvbmNhdGVuYXRlZCByZXN1bHRzIG9mIHRoZSBgaXRlcmF0ZWVgIGZ1bmN0aW9uLiBJbnZva2VkIHdpdGhcbiAgICAgKiAoZXJyLCByZXN1bHRzKS5cbiAgICAgKiBAcmV0dXJucyBBIFByb21pc2UsIGlmIG5vIGNhbGxiYWNrIGlzIHBhc3NlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbmNhdExpbWl0KGNvbGwsIGxpbWl0LCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIF9pdGVyYXRlZSA9IHdyYXBBc3luYyhpdGVyYXRlZSk7XG4gICAgICAgIHJldHVybiBtYXBMaW1pdCQxKGNvbGwsIGxpbWl0LCAodmFsLCBpdGVyQ2IpID0+IHtcbiAgICAgICAgICAgIF9pdGVyYXRlZSh2YWwsIChlcnIsIC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gaXRlckNiKGVycik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZXJDYihlcnIsIGFyZ3MpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIChlcnIsIG1hcFJlc3VsdHMpID0+IHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFwUmVzdWx0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChtYXBSZXN1bHRzW2ldKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoLi4ubWFwUmVzdWx0c1tpXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyLCByZXN1bHQpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgdmFyIGNvbmNhdExpbWl0JDEgPSBhd2FpdGlmeShjb25jYXRMaW1pdCwgNCk7XG5cbiAgICAvKipcbiAgICAgKiBBcHBsaWVzIGBpdGVyYXRlZWAgdG8gZWFjaCBpdGVtIGluIGBjb2xsYCwgY29uY2F0ZW5hdGluZyB0aGUgcmVzdWx0cy4gUmV0dXJuc1xuICAgICAqIHRoZSBjb25jYXRlbmF0ZWQgbGlzdC4gVGhlIGBpdGVyYXRlZWBzIGFyZSBjYWxsZWQgaW4gcGFyYWxsZWwsIGFuZCB0aGVcbiAgICAgKiByZXN1bHRzIGFyZSBjb25jYXRlbmF0ZWQgYXMgdGhleSByZXR1cm4uIFRoZSByZXN1bHRzIGFycmF5IHdpbGwgYmUgcmV0dXJuZWQgaW5cbiAgICAgKiB0aGUgb3JpZ2luYWwgb3JkZXIgb2YgYGNvbGxgIHBhc3NlZCB0byB0aGUgYGl0ZXJhdGVlYCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBuYW1lIGNvbmNhdFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQGFsaWFzIGZsYXRNYXBcbiAgICAgKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfEFzeW5jSXRlcmFibGV8T2JqZWN0fSBjb2xsIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQSBmdW5jdGlvbiB0byBhcHBseSB0byBlYWNoIGl0ZW0gaW4gYGNvbGxgLFxuICAgICAqIHdoaWNoIHNob3VsZCB1c2UgYW4gYXJyYXkgYXMgaXRzIHJlc3VsdC4gSW52b2tlZCB3aXRoIChpdGVtLCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIGFmdGVyIGFsbCB0aGVcbiAgICAgKiBgaXRlcmF0ZWVgIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLCBvciBhbiBlcnJvciBvY2N1cnMuIFJlc3VsdHMgaXMgYW4gYXJyYXlcbiAgICAgKiBjb250YWluaW5nIHRoZSBjb25jYXRlbmF0ZWQgcmVzdWx0cyBvZiB0aGUgYGl0ZXJhdGVlYCBmdW5jdGlvbi4gSW52b2tlZCB3aXRoXG4gICAgICogKGVyciwgcmVzdWx0cykuXG4gICAgICogQHJldHVybnMgQSBQcm9taXNlLCBpZiBubyBjYWxsYmFjayBpcyBwYXNzZWRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gZGlyMSBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGZpbGUxLnR4dCwgZmlsZTIudHh0XG4gICAgICogLy8gZGlyMiBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGZpbGUzLnR4dCwgZmlsZTQudHh0XG4gICAgICogLy8gZGlyMyBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGZpbGU1LnR4dFxuICAgICAqIC8vIGRpcjQgZG9lcyBub3QgZXhpc3RcbiAgICAgKlxuICAgICAqIGxldCBkaXJlY3RvcnlMaXN0ID0gWydkaXIxJywnZGlyMicsJ2RpcjMnXTtcbiAgICAgKiBsZXQgd2l0aE1pc3NpbmdEaXJlY3RvcnlMaXN0ID0gWydkaXIxJywnZGlyMicsJ2RpcjMnLCAnZGlyNCddO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgY2FsbGJhY2tzXG4gICAgICogYXN5bmMuY29uY2F0KGRpcmVjdG9yeUxpc3QsIGZzLnJlYWRkaXIsIGZ1bmN0aW9uKGVyciwgcmVzdWx0cykge1xuICAgICAqICAgIGlmIChlcnIpIHtcbiAgICAgKiAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICB9IGVsc2Uge1xuICAgICAqICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiAgICAgICAgLy8gWyAnZmlsZTEudHh0JywgJ2ZpbGUyLnR4dCcsICdmaWxlMy50eHQnLCAnZmlsZTQudHh0JywgZmlsZTUudHh0IF1cbiAgICAgKiAgICB9XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBFcnJvciBIYW5kbGluZ1xuICAgICAqIGFzeW5jLmNvbmNhdCh3aXRoTWlzc2luZ0RpcmVjdG9yeUxpc3QsIGZzLnJlYWRkaXIsIGZ1bmN0aW9uKGVyciwgcmVzdWx0cykge1xuICAgICAqICAgIGlmIChlcnIpIHtcbiAgICAgKiAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgICAgLy8gWyBFcnJvcjogRU5PRU5UOiBubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IF1cbiAgICAgKiAgICAgICAgLy8gc2luY2UgZGlyNCBkb2VzIG5vdCBleGlzdFxuICAgICAqICAgIH0gZWxzZSB7XG4gICAgICogICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgIH1cbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIFByb21pc2VzXG4gICAgICogYXN5bmMuY29uY2F0KGRpcmVjdG9yeUxpc3QsIGZzLnJlYWRkaXIpXG4gICAgICogLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgICAvLyBbICdmaWxlMS50eHQnLCAnZmlsZTIudHh0JywgJ2ZpbGUzLnR4dCcsICdmaWxlNC50eHQnLCBmaWxlNS50eHQgXVxuICAgICAqIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICogICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gRXJyb3IgSGFuZGxpbmdcbiAgICAgKiBhc3luYy5jb25jYXQod2l0aE1pc3NpbmdEaXJlY3RvcnlMaXN0LCBmcy5yZWFkZGlyKVxuICAgICAqIC50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICAvLyBbIEVycm9yOiBFTk9FTlQ6IG5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkgXVxuICAgICAqICAgICAvLyBzaW5jZSBkaXI0IGRvZXMgbm90IGV4aXN0XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBhc3luYy9hd2FpdFxuICAgICAqIGFzeW5jICgpID0+IHtcbiAgICAgKiAgICAgdHJ5IHtcbiAgICAgKiAgICAgICAgIGxldCByZXN1bHRzID0gYXdhaXQgYXN5bmMuY29uY2F0KGRpcmVjdG9yeUxpc3QsIGZzLnJlYWRkaXIpO1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgICAgICAvLyBbICdmaWxlMS50eHQnLCAnZmlsZTIudHh0JywgJ2ZpbGUzLnR4dCcsICdmaWxlNC50eHQnLCBmaWxlNS50eHQgXVxuICAgICAqICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgIH1cbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBFcnJvciBIYW5kbGluZ1xuICAgICAqIGFzeW5jICgpID0+IHtcbiAgICAgKiAgICAgdHJ5IHtcbiAgICAgKiAgICAgICAgIGxldCByZXN1bHRzID0gYXdhaXQgYXN5bmMuY29uY2F0KHdpdGhNaXNzaW5nRGlyZWN0b3J5TGlzdCwgZnMucmVhZGRpcik7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICAgICAgLy8gWyBFcnJvcjogRU5PRU5UOiBubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IF1cbiAgICAgKiAgICAgICAgIC8vIHNpbmNlIGRpcjQgZG9lcyBub3QgZXhpc3RcbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbmNhdChjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGNvbmNhdExpbWl0JDEoY29sbCwgSW5maW5pdHksIGl0ZXJhdGVlLCBjYWxsYmFjaylcbiAgICB9XG4gICAgdmFyIGNvbmNhdCQxID0gYXdhaXRpZnkoY29uY2F0LCAzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzYW1lIGFzIFtgY29uY2F0YF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmNvbmNhdH0gYnV0IHJ1bnMgb25seSBhIHNpbmdsZSBhc3luYyBvcGVyYXRpb24gYXQgYSB0aW1lLlxuICAgICAqXG4gICAgICogQG5hbWUgY29uY2F0U2VyaWVzXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMuY29uY2F0XXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuY29uY2F0fVxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQGFsaWFzIGZsYXRNYXBTZXJpZXNcbiAgICAgKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfEFzeW5jSXRlcmFibGV8T2JqZWN0fSBjb2xsIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQSBmdW5jdGlvbiB0byBhcHBseSB0byBlYWNoIGl0ZW0gaW4gYGNvbGxgLlxuICAgICAqIFRoZSBpdGVyYXRlZSBzaG91bGQgY29tcGxldGUgd2l0aCBhbiBhcnJheSBhbiBhcnJheSBvZiByZXN1bHRzLlxuICAgICAqIEludm9rZWQgd2l0aCAoaXRlbSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCBhZnRlciBhbGwgdGhlXG4gICAgICogYGl0ZXJhdGVlYCBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZCwgb3IgYW4gZXJyb3Igb2NjdXJzLiBSZXN1bHRzIGlzIGFuIGFycmF5XG4gICAgICogY29udGFpbmluZyB0aGUgY29uY2F0ZW5hdGVkIHJlc3VsdHMgb2YgdGhlIGBpdGVyYXRlZWAgZnVuY3Rpb24uIEludm9rZWQgd2l0aFxuICAgICAqIChlcnIsIHJlc3VsdHMpLlxuICAgICAqIEByZXR1cm5zIEEgUHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgaXMgcGFzc2VkXG4gICAgICovXG4gICAgZnVuY3Rpb24gY29uY2F0U2VyaWVzKGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gY29uY2F0TGltaXQkMShjb2xsLCAxLCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuICAgIHZhciBjb25jYXRTZXJpZXMkMSA9IGF3YWl0aWZ5KGNvbmNhdFNlcmllcywgMyk7XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3aGVuIGNhbGxlZCwgY2FsbHMtYmFjayB3aXRoIHRoZSB2YWx1ZXMgcHJvdmlkZWQuXG4gICAgICogVXNlZnVsIGFzIHRoZSBmaXJzdCBmdW5jdGlvbiBpbiBhIFtgd2F0ZXJmYWxsYF17QGxpbmsgbW9kdWxlOkNvbnRyb2xGbG93LndhdGVyZmFsbH0sIG9yIGZvciBwbHVnZ2luZyB2YWx1ZXMgaW4gdG9cbiAgICAgKiBbYGF1dG9gXXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cuYXV0b30uXG4gICAgICpcbiAgICAgKiBAbmFtZSBjb25zdGFudFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOlV0aWxzXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHsuLi4qfSBhcmd1bWVudHMuLi4gLSBBbnkgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBhdXRvbWF0aWNhbGx5IGludm9rZVxuICAgICAqIGNhbGxiYWNrIHdpdGguXG4gICAgICogQHJldHVybnMge0FzeW5jRnVuY3Rpb259IFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHdoZW4gaW52b2tlZCwgYXV0b21hdGljYWxseVxuICAgICAqIGludm9rZXMgdGhlIGNhbGxiYWNrIHdpdGggdGhlIHByZXZpb3VzIGdpdmVuIGFyZ3VtZW50cy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogYXN5bmMud2F0ZXJmYWxsKFtcbiAgICAgKiAgICAgYXN5bmMuY29uc3RhbnQoNDIpLFxuICAgICAqICAgICBmdW5jdGlvbiAodmFsdWUsIG5leHQpIHtcbiAgICAgKiAgICAgICAgIC8vIHZhbHVlID09PSA0MlxuICAgICAqICAgICB9LFxuICAgICAqICAgICAvLy4uLlxuICAgICAqIF0sIGNhbGxiYWNrKTtcbiAgICAgKlxuICAgICAqIGFzeW5jLndhdGVyZmFsbChbXG4gICAgICogICAgIGFzeW5jLmNvbnN0YW50KGZpbGVuYW1lLCBcInV0ZjhcIiksXG4gICAgICogICAgIGZzLnJlYWRGaWxlLFxuICAgICAqICAgICBmdW5jdGlvbiAoZmlsZURhdGEsIG5leHQpIHtcbiAgICAgKiAgICAgICAgIC8vLi4uXG4gICAgICogICAgIH1cbiAgICAgKiAgICAgLy8uLi5cbiAgICAgKiBdLCBjYWxsYmFjayk7XG4gICAgICpcbiAgICAgKiBhc3luYy5hdXRvKHtcbiAgICAgKiAgICAgaG9zdG5hbWU6IGFzeW5jLmNvbnN0YW50KFwiaHR0cHM6Ly9zZXJ2ZXIubmV0L1wiKSxcbiAgICAgKiAgICAgcG9ydDogZmluZEZyZWVQb3J0LFxuICAgICAqICAgICBsYXVuY2hTZXJ2ZXI6IFtcImhvc3RuYW1lXCIsIFwicG9ydFwiLCBmdW5jdGlvbiAob3B0aW9ucywgY2IpIHtcbiAgICAgKiAgICAgICAgIHN0YXJ0U2VydmVyKG9wdGlvbnMsIGNiKTtcbiAgICAgKiAgICAgfV0sXG4gICAgICogICAgIC8vLi4uXG4gICAgICogfSwgY2FsbGJhY2spO1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbnN0YW50JDEoLi4uYXJncykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKC4uLmlnbm9yZWRBcmdzLyosIGNhbGxiYWNrKi8pIHtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGlnbm9yZWRBcmdzLnBvcCgpO1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIC4uLmFyZ3MpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9jcmVhdGVUZXN0ZXIoY2hlY2ssIGdldFJlc3VsdCkge1xuICAgICAgICByZXR1cm4gKGVhY2hmbiwgYXJyLCBfaXRlcmF0ZWUsIGNiKSA9PiB7XG4gICAgICAgICAgICB2YXIgdGVzdFBhc3NlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdmFyIHRlc3RSZXN1bHQ7XG4gICAgICAgICAgICBjb25zdCBpdGVyYXRlZSA9IHdyYXBBc3luYyhfaXRlcmF0ZWUpO1xuICAgICAgICAgICAgZWFjaGZuKGFyciwgKHZhbHVlLCBfLCBjYWxsYmFjaykgPT4ge1xuICAgICAgICAgICAgICAgIGl0ZXJhdGVlKHZhbHVlLCAoZXJyLCByZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVyciB8fCBlcnIgPT09IGZhbHNlKSByZXR1cm4gY2FsbGJhY2soZXJyKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hlY2socmVzdWx0KSAmJiAhdGVzdFJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGVzdFBhc3NlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXN0UmVzdWx0ID0gZ2V0UmVzdWx0KHRydWUsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsLCBicmVha0xvb3ApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCBlcnIgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpO1xuICAgICAgICAgICAgICAgIGNiKG51bGwsIHRlc3RQYXNzZWQgPyB0ZXN0UmVzdWx0IDogZ2V0UmVzdWx0KGZhbHNlKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBmaXJzdCB2YWx1ZSBpbiBgY29sbGAgdGhhdCBwYXNzZXMgYW4gYXN5bmMgdHJ1dGggdGVzdC4gVGhlXG4gICAgICogYGl0ZXJhdGVlYCBpcyBhcHBsaWVkIGluIHBhcmFsbGVsLCBtZWFuaW5nIHRoZSBmaXJzdCBpdGVyYXRlZSB0byByZXR1cm5cbiAgICAgKiBgdHJ1ZWAgd2lsbCBmaXJlIHRoZSBkZXRlY3QgYGNhbGxiYWNrYCB3aXRoIHRoYXQgcmVzdWx0LiBUaGF0IG1lYW5zIHRoZVxuICAgICAqIHJlc3VsdCBtaWdodCBub3QgYmUgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIG9yaWdpbmFsIGBjb2xsYCAoaW4gdGVybXMgb2Ygb3JkZXIpXG4gICAgICogdGhhdCBwYXNzZXMgdGhlIHRlc3QuXG5cbiAgICAgKiBJZiBvcmRlciB3aXRoaW4gdGhlIG9yaWdpbmFsIGBjb2xsYCBpcyBpbXBvcnRhbnQsIHRoZW4gbG9vayBhdFxuICAgICAqIFtgZGV0ZWN0U2VyaWVzYF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmRldGVjdFNlcmllc30uXG4gICAgICpcbiAgICAgKiBAbmFtZSBkZXRlY3RcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAYWxpYXMgZmluZFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uc1xuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBIHRydXRoIHRlc3QgdG8gYXBwbHkgdG8gZWFjaCBpdGVtIGluIGBjb2xsYC5cbiAgICAgKiBUaGUgaXRlcmF0ZWUgbXVzdCBjb21wbGV0ZSB3aXRoIGEgYm9vbGVhbiB2YWx1ZSBhcyBpdHMgcmVzdWx0LlxuICAgICAqIEludm9rZWQgd2l0aCAoaXRlbSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCBhcyBzb29uIGFzIGFueVxuICAgICAqIGl0ZXJhdGVlIHJldHVybnMgYHRydWVgLCBvciBhZnRlciBhbGwgdGhlIGBpdGVyYXRlZWAgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQuXG4gICAgICogUmVzdWx0IHdpbGwgYmUgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIGFycmF5IHRoYXQgcGFzc2VzIHRoZSB0cnV0aCB0ZXN0XG4gICAgICogKGl0ZXJhdGVlKSBvciB0aGUgdmFsdWUgYHVuZGVmaW5lZGAgaWYgbm9uZSBwYXNzZWQuIEludm9rZWQgd2l0aFxuICAgICAqIChlcnIsIHJlc3VsdCkuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgYSBjYWxsYmFjayBpcyBvbWl0dGVkXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vIGRpcjEgaXMgYSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyBmaWxlMS50eHQsIGZpbGUyLnR4dFxuICAgICAqIC8vIGRpcjIgaXMgYSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyBmaWxlMy50eHQsIGZpbGU0LnR4dFxuICAgICAqIC8vIGRpcjMgaXMgYSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyBmaWxlNS50eHRcbiAgICAgKlxuICAgICAqIC8vIGFzeW5jaHJvbm91cyBmdW5jdGlvbiB0aGF0IGNoZWNrcyBpZiBhIGZpbGUgZXhpc3RzXG4gICAgICogZnVuY3Rpb24gZmlsZUV4aXN0cyhmaWxlLCBjYWxsYmFjaykge1xuICAgICAqICAgIGZzLmFjY2VzcyhmaWxlLCBmcy5jb25zdGFudHMuRl9PSywgKGVycikgPT4ge1xuICAgICAqICAgICAgICBjYWxsYmFjayhudWxsLCAhZXJyKTtcbiAgICAgKiAgICB9KTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBhc3luYy5kZXRlY3QoWydmaWxlMy50eHQnLCdmaWxlMi50eHQnLCdkaXIxL2ZpbGUxLnR4dCddLCBmaWxlRXhpc3RzLFxuICAgICAqICAgIGZ1bmN0aW9uKGVyciwgcmVzdWx0KSB7XG4gICAgICogICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XG4gICAgICogICAgICAgIC8vIGRpcjEvZmlsZTEudHh0XG4gICAgICogICAgICAgIC8vIHJlc3VsdCBub3cgZXF1YWxzIHRoZSBmaXJzdCBmaWxlIGluIHRoZSBsaXN0IHRoYXQgZXhpc3RzXG4gICAgICogICAgfVxuICAgICAqKTtcbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIFByb21pc2VzXG4gICAgICogYXN5bmMuZGV0ZWN0KFsnZmlsZTMudHh0JywnZmlsZTIudHh0JywnZGlyMS9maWxlMS50eHQnXSwgZmlsZUV4aXN0cylcbiAgICAgKiAudGhlbihyZXN1bHQgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAvLyBkaXIxL2ZpbGUxLnR4dFxuICAgICAqICAgICAvLyByZXN1bHQgbm93IGVxdWFscyB0aGUgZmlyc3QgZmlsZSBpbiB0aGUgbGlzdCB0aGF0IGV4aXN0c1xuICAgICAqIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBhc3luYy9hd2FpdFxuICAgICAqIGFzeW5jICgpID0+IHtcbiAgICAgKiAgICAgdHJ5IHtcbiAgICAgKiAgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBhc3luYy5kZXRlY3QoWydmaWxlMy50eHQnLCdmaWxlMi50eHQnLCdkaXIxL2ZpbGUxLnR4dCddLCBmaWxlRXhpc3RzKTtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XG4gICAgICogICAgICAgICAvLyBkaXIxL2ZpbGUxLnR4dFxuICAgICAqICAgICAgICAgLy8gcmVzdWx0IG5vdyBlcXVhbHMgdGhlIGZpbGUgaW4gdGhlIGxpc3QgdGhhdCBleGlzdHNcbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICovXG4gICAgZnVuY3Rpb24gZGV0ZWN0KGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX2NyZWF0ZVRlc3Rlcihib29sID0+IGJvb2wsIChyZXMsIGl0ZW0pID0+IGl0ZW0pKGVhY2hPZiQxLCBjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuICAgIHZhciBkZXRlY3QkMSA9IGF3YWl0aWZ5KGRldGVjdCwgMyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyBbYGRldGVjdGBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5kZXRlY3R9IGJ1dCBydW5zIGEgbWF4aW11bSBvZiBgbGltaXRgIGFzeW5jIG9wZXJhdGlvbnMgYXQgYVxuICAgICAqIHRpbWUuXG4gICAgICpcbiAgICAgKiBAbmFtZSBkZXRlY3RMaW1pdFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLmRldGVjdF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmRldGVjdH1cbiAgICAgKiBAYWxpYXMgZmluZExpbWl0XG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25zXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbWl0IC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGFzeW5jIG9wZXJhdGlvbnMgYXQgYSB0aW1lLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBIHRydXRoIHRlc3QgdG8gYXBwbHkgdG8gZWFjaCBpdGVtIGluIGBjb2xsYC5cbiAgICAgKiBUaGUgaXRlcmF0ZWUgbXVzdCBjb21wbGV0ZSB3aXRoIGEgYm9vbGVhbiB2YWx1ZSBhcyBpdHMgcmVzdWx0LlxuICAgICAqIEludm9rZWQgd2l0aCAoaXRlbSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCBhcyBzb29uIGFzIGFueVxuICAgICAqIGl0ZXJhdGVlIHJldHVybnMgYHRydWVgLCBvciBhZnRlciBhbGwgdGhlIGBpdGVyYXRlZWAgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQuXG4gICAgICogUmVzdWx0IHdpbGwgYmUgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIGFycmF5IHRoYXQgcGFzc2VzIHRoZSB0cnV0aCB0ZXN0XG4gICAgICogKGl0ZXJhdGVlKSBvciB0aGUgdmFsdWUgYHVuZGVmaW5lZGAgaWYgbm9uZSBwYXNzZWQuIEludm9rZWQgd2l0aFxuICAgICAqIChlcnIsIHJlc3VsdCkuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgYSBjYWxsYmFjayBpcyBvbWl0dGVkXG4gICAgICovXG4gICAgZnVuY3Rpb24gZGV0ZWN0TGltaXQoY29sbCwgbGltaXQsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX2NyZWF0ZVRlc3Rlcihib29sID0+IGJvb2wsIChyZXMsIGl0ZW0pID0+IGl0ZW0pKGVhY2hPZkxpbWl0JDIobGltaXQpLCBjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuICAgIHZhciBkZXRlY3RMaW1pdCQxID0gYXdhaXRpZnkoZGV0ZWN0TGltaXQsIDQpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNhbWUgYXMgW2BkZXRlY3RgXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZGV0ZWN0fSBidXQgcnVucyBvbmx5IGEgc2luZ2xlIGFzeW5jIG9wZXJhdGlvbiBhdCBhIHRpbWUuXG4gICAgICpcbiAgICAgKiBAbmFtZSBkZXRlY3RTZXJpZXNcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5kZXRlY3Rde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5kZXRlY3R9XG4gICAgICogQGFsaWFzIGZpbmRTZXJpZXNcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvbnNcbiAgICAgKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfEFzeW5jSXRlcmFibGV8T2JqZWN0fSBjb2xsIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQSB0cnV0aCB0ZXN0IHRvIGFwcGx5IHRvIGVhY2ggaXRlbSBpbiBgY29sbGAuXG4gICAgICogVGhlIGl0ZXJhdGVlIG11c3QgY29tcGxldGUgd2l0aCBhIGJvb2xlYW4gdmFsdWUgYXMgaXRzIHJlc3VsdC5cbiAgICAgKiBJbnZva2VkIHdpdGggKGl0ZW0sIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgYXMgc29vbiBhcyBhbnlcbiAgICAgKiBpdGVyYXRlZSByZXR1cm5zIGB0cnVlYCwgb3IgYWZ0ZXIgYWxsIHRoZSBgaXRlcmF0ZWVgIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLlxuICAgICAqIFJlc3VsdCB3aWxsIGJlIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBhcnJheSB0aGF0IHBhc3NlcyB0aGUgdHJ1dGggdGVzdFxuICAgICAqIChpdGVyYXRlZSkgb3IgdGhlIHZhbHVlIGB1bmRlZmluZWRgIGlmIG5vbmUgcGFzc2VkLiBJbnZva2VkIHdpdGhcbiAgICAgKiAoZXJyLCByZXN1bHQpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIGEgY2FsbGJhY2sgaXMgb21pdHRlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGRldGVjdFNlcmllcyhjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9jcmVhdGVUZXN0ZXIoYm9vbCA9PiBib29sLCAocmVzLCBpdGVtKSA9PiBpdGVtKShlYWNoT2ZMaW1pdCQyKDEpLCBjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuXG4gICAgdmFyIGRldGVjdFNlcmllcyQxID0gYXdhaXRpZnkoZGV0ZWN0U2VyaWVzLCAzKTtcblxuICAgIGZ1bmN0aW9uIGNvbnNvbGVGdW5jKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIChmbiwgLi4uYXJncykgPT4gd3JhcEFzeW5jKGZuKSguLi5hcmdzLCAoZXJyLCAuLi5yZXN1bHRBcmdzKSA9PiB7XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29uc29sZS5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb25zb2xlW25hbWVdKSB7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdEFyZ3MuZm9yRWFjaCh4ID0+IGNvbnNvbGVbbmFtZV0oeCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMb2dzIHRoZSByZXN1bHQgb2YgYW4gW2Bhc3luY2AgZnVuY3Rpb25de0BsaW5rIEFzeW5jRnVuY3Rpb259IHRvIHRoZVxuICAgICAqIGBjb25zb2xlYCB1c2luZyBgY29uc29sZS5kaXJgIHRvIGRpc3BsYXkgdGhlIHByb3BlcnRpZXMgb2YgdGhlIHJlc3VsdGluZyBvYmplY3QuXG4gICAgICogT25seSB3b3JrcyBpbiBOb2RlLmpzIG9yIGluIGJyb3dzZXJzIHRoYXQgc3VwcG9ydCBgY29uc29sZS5kaXJgIGFuZFxuICAgICAqIGBjb25zb2xlLmVycm9yYCAoc3VjaCBhcyBGRiBhbmQgQ2hyb21lKS5cbiAgICAgKiBJZiBtdWx0aXBsZSBhcmd1bWVudHMgYXJlIHJldHVybmVkIGZyb20gdGhlIGFzeW5jIGZ1bmN0aW9uLFxuICAgICAqIGBjb25zb2xlLmRpcmAgaXMgY2FsbGVkIG9uIGVhY2ggYXJndW1lbnQgaW4gb3JkZXIuXG4gICAgICpcbiAgICAgKiBAbmFtZSBkaXJcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpVdGlsc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gZnVuY3Rpb24gLSBUaGUgZnVuY3Rpb24geW91IHdhbnQgdG8gZXZlbnR1YWxseSBhcHBseVxuICAgICAqIGFsbCBhcmd1bWVudHMgdG8uXG4gICAgICogQHBhcmFtIHsuLi4qfSBhcmd1bWVudHMuLi4gLSBBbnkgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBhcHBseSB0byB0aGUgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vIGluIGEgbW9kdWxlXG4gICAgICogdmFyIGhlbGxvID0gZnVuY3Rpb24obmFtZSwgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsIHtoZWxsbzogbmFtZX0pO1xuICAgICAqICAgICB9LCAxMDAwKTtcbiAgICAgKiB9O1xuICAgICAqXG4gICAgICogLy8gaW4gdGhlIG5vZGUgcmVwbFxuICAgICAqIG5vZGU+IGFzeW5jLmRpcihoZWxsbywgJ3dvcmxkJyk7XG4gICAgICoge2hlbGxvOiAnd29ybGQnfVxuICAgICAqL1xuICAgIHZhciBkaXIgPSBjb25zb2xlRnVuYygnZGlyJyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcG9zdC1jaGVjayB2ZXJzaW9uIG9mIFtgd2hpbHN0YF17QGxpbmsgbW9kdWxlOkNvbnRyb2xGbG93LndoaWxzdH0uIFRvIHJlZmxlY3QgdGhlIGRpZmZlcmVuY2UgaW5cbiAgICAgKiB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucywgdGhlIGFyZ3VtZW50cyBgdGVzdGAgYW5kIGBpdGVyYXRlZWAgYXJlIHN3aXRjaGVkLlxuICAgICAqXG4gICAgICogYGRvV2hpbHN0YCBpcyB0byBgd2hpbHN0YCBhcyBgZG8gd2hpbGVgIGlzIHRvIGB3aGlsZWAgaW4gcGxhaW4gSmF2YVNjcmlwdC5cbiAgICAgKlxuICAgICAqIEBuYW1lIGRvV2hpbHN0XG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMud2hpbHN0XXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cud2hpbHN0fVxuICAgICAqIEBjYXRlZ29yeSBDb250cm9sIEZsb3dcbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQSBmdW5jdGlvbiB3aGljaCBpcyBjYWxsZWQgZWFjaCB0aW1lIGB0ZXN0YFxuICAgICAqIHBhc3Nlcy4gSW52b2tlZCB3aXRoIChjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSB0ZXN0IC0gYXN5bmNocm9ub3VzIHRydXRoIHRlc3QgdG8gcGVyZm9ybSBhZnRlciBlYWNoXG4gICAgICogZXhlY3V0aW9uIG9mIGBpdGVyYXRlZWAuIEludm9rZWQgd2l0aCAoLi4uYXJncywgY2FsbGJhY2spLCB3aGVyZSBgLi4uYXJnc2AgYXJlIHRoZVxuICAgICAqIG5vbi1lcnJvciBhcmdzIGZyb20gdGhlIHByZXZpb3VzIGNhbGxiYWNrIG9mIGBpdGVyYXRlZWAuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIGFmdGVyIHRoZSB0ZXN0XG4gICAgICogZnVuY3Rpb24gaGFzIGZhaWxlZCBhbmQgcmVwZWF0ZWQgZXhlY3V0aW9uIG9mIGBpdGVyYXRlZWAgaGFzIHN0b3BwZWQuXG4gICAgICogYGNhbGxiYWNrYCB3aWxsIGJlIHBhc3NlZCBhbiBlcnJvciBhbmQgYW55IGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIGZpbmFsXG4gICAgICogYGl0ZXJhdGVlYCdzIGNhbGxiYWNrLiBJbnZva2VkIHdpdGggKGVyciwgW3Jlc3VsdHNdKTtcbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBpcyBwYXNzZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBkb1doaWxzdChpdGVyYXRlZSwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBvbmx5T25jZShjYWxsYmFjayk7XG4gICAgICAgIHZhciBfZm4gPSB3cmFwQXN5bmMoaXRlcmF0ZWUpO1xuICAgICAgICB2YXIgX3Rlc3QgPSB3cmFwQXN5bmModGVzdCk7XG4gICAgICAgIHZhciByZXN1bHRzO1xuXG4gICAgICAgIGZ1bmN0aW9uIG5leHQoZXJyLCAuLi5hcmdzKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIGlmIChlcnIgPT09IGZhbHNlKSByZXR1cm47XG4gICAgICAgICAgICByZXN1bHRzID0gYXJncztcbiAgICAgICAgICAgIF90ZXN0KC4uLmFyZ3MsIGNoZWNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGNoZWNrKGVyciwgdHJ1dGgpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgaWYgKGVyciA9PT0gZmFsc2UpIHJldHVybjtcbiAgICAgICAgICAgIGlmICghdHJ1dGgpIHJldHVybiBjYWxsYmFjayhudWxsLCAuLi5yZXN1bHRzKTtcbiAgICAgICAgICAgIF9mbihuZXh0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjaGVjayhudWxsLCB0cnVlKTtcbiAgICB9XG5cbiAgICB2YXIgZG9XaGlsc3QkMSA9IGF3YWl0aWZ5KGRvV2hpbHN0LCAzKTtcblxuICAgIC8qKlxuICAgICAqIExpa2UgWydkb1doaWxzdCdde0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy5kb1doaWxzdH0sIGV4Y2VwdCB0aGUgYHRlc3RgIGlzIGludmVydGVkLiBOb3RlIHRoZVxuICAgICAqIGFyZ3VtZW50IG9yZGVyaW5nIGRpZmZlcnMgZnJvbSBgdW50aWxgLlxuICAgICAqXG4gICAgICogQG5hbWUgZG9VbnRpbFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbnRyb2xGbG93XG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLmRvV2hpbHN0XXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cuZG9XaGlsc3R9XG4gICAgICogQGNhdGVnb3J5IENvbnRyb2wgRmxvd1xuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBbiBhc3luYyBmdW5jdGlvbiB3aGljaCBpcyBjYWxsZWQgZWFjaCB0aW1lXG4gICAgICogYHRlc3RgIGZhaWxzLiBJbnZva2VkIHdpdGggKGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IHRlc3QgLSBhc3luY2hyb25vdXMgdHJ1dGggdGVzdCB0byBwZXJmb3JtIGFmdGVyIGVhY2hcbiAgICAgKiBleGVjdXRpb24gb2YgYGl0ZXJhdGVlYC4gSW52b2tlZCB3aXRoICguLi5hcmdzLCBjYWxsYmFjayksIHdoZXJlIGAuLi5hcmdzYCBhcmUgdGhlXG4gICAgICogbm9uLWVycm9yIGFyZ3MgZnJvbSB0aGUgcHJldmlvdXMgY2FsbGJhY2sgb2YgYGl0ZXJhdGVlYFxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCBhZnRlciB0aGUgdGVzdFxuICAgICAqIGZ1bmN0aW9uIGhhcyBwYXNzZWQgYW5kIHJlcGVhdGVkIGV4ZWN1dGlvbiBvZiBgaXRlcmF0ZWVgIGhhcyBzdG9wcGVkLiBgY2FsbGJhY2tgXG4gICAgICogd2lsbCBiZSBwYXNzZWQgYW4gZXJyb3IgYW5kIGFueSBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBmaW5hbCBgaXRlcmF0ZWVgJ3NcbiAgICAgKiBjYWxsYmFjay4gSW52b2tlZCB3aXRoIChlcnIsIFtyZXN1bHRzXSk7XG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgaXMgcGFzc2VkXG4gICAgICovXG4gICAgZnVuY3Rpb24gZG9VbnRpbChpdGVyYXRlZSwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgY29uc3QgX3Rlc3QgPSB3cmFwQXN5bmModGVzdCk7XG4gICAgICAgIHJldHVybiBkb1doaWxzdCQxKGl0ZXJhdGVlLCAoLi4uYXJncykgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2IgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgX3Rlc3QoLi4uYXJncywgKGVyciwgdHJ1dGgpID0+IGNiIChlcnIsICF0cnV0aCkpO1xuICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3dpdGhvdXRJbmRleChpdGVyYXRlZSkge1xuICAgICAgICByZXR1cm4gKHZhbHVlLCBpbmRleCwgY2FsbGJhY2spID0+IGl0ZXJhdGVlKHZhbHVlLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQXBwbGllcyB0aGUgZnVuY3Rpb24gYGl0ZXJhdGVlYCB0byBlYWNoIGl0ZW0gaW4gYGNvbGxgLCBpbiBwYXJhbGxlbC5cbiAgICAgKiBUaGUgYGl0ZXJhdGVlYCBpcyBjYWxsZWQgd2l0aCBhbiBpdGVtIGZyb20gdGhlIGxpc3QsIGFuZCBhIGNhbGxiYWNrIGZvciB3aGVuXG4gICAgICogaXQgaGFzIGZpbmlzaGVkLiBJZiB0aGUgYGl0ZXJhdGVlYCBwYXNzZXMgYW4gZXJyb3IgdG8gaXRzIGBjYWxsYmFja2AsIHRoZVxuICAgICAqIG1haW4gYGNhbGxiYWNrYCAoZm9yIHRoZSBgZWFjaGAgZnVuY3Rpb24pIGlzIGltbWVkaWF0ZWx5IGNhbGxlZCB3aXRoIHRoZVxuICAgICAqIGVycm9yLlxuICAgICAqXG4gICAgICogTm90ZSwgdGhhdCBzaW5jZSB0aGlzIGZ1bmN0aW9uIGFwcGxpZXMgYGl0ZXJhdGVlYCB0byBlYWNoIGl0ZW0gaW4gcGFyYWxsZWwsXG4gICAgICogdGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgdGhlIGl0ZXJhdGVlIGZ1bmN0aW9ucyB3aWxsIGNvbXBsZXRlIGluIG9yZGVyLlxuICAgICAqXG4gICAgICogQG5hbWUgZWFjaFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBhbGlhcyBmb3JFYWNoXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfEFzeW5jSXRlcmFibGV8T2JqZWN0fSBjb2xsIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQW4gYXN5bmMgZnVuY3Rpb24gdG8gYXBwbHkgdG9cbiAgICAgKiBlYWNoIGl0ZW0gaW4gYGNvbGxgLiBJbnZva2VkIHdpdGggKGl0ZW0sIGNhbGxiYWNrKS5cbiAgICAgKiBUaGUgYXJyYXkgaW5kZXggaXMgbm90IHBhc3NlZCB0byB0aGUgaXRlcmF0ZWUuXG4gICAgICogSWYgeW91IG5lZWQgdGhlIGluZGV4LCB1c2UgYGVhY2hPZmAuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIHdoZW4gYWxsXG4gICAgICogYGl0ZXJhdGVlYCBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZCwgb3IgYW4gZXJyb3Igb2NjdXJzLiBJbnZva2VkIHdpdGggKGVycikuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgYSBjYWxsYmFjayBpcyBvbWl0dGVkXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vIGRpcjEgaXMgYSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyBmaWxlMS50eHQsIGZpbGUyLnR4dFxuICAgICAqIC8vIGRpcjIgaXMgYSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyBmaWxlMy50eHQsIGZpbGU0LnR4dFxuICAgICAqIC8vIGRpcjMgaXMgYSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyBmaWxlNS50eHRcbiAgICAgKiAvLyBkaXI0IGRvZXMgbm90IGV4aXN0XG4gICAgICpcbiAgICAgKiBjb25zdCBmaWxlTGlzdCA9IFsgJ2RpcjEvZmlsZTIudHh0JywgJ2RpcjIvZmlsZTMudHh0JywgJ2Rpci9maWxlNS50eHQnXTtcbiAgICAgKiBjb25zdCB3aXRoTWlzc2luZ0ZpbGVMaXN0ID0gWydkaXIxL2ZpbGUxLnR4dCcsICdkaXI0L2ZpbGUyLnR4dCddO1xuICAgICAqXG4gICAgICogLy8gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRoYXQgZGVsZXRlcyBhIGZpbGVcbiAgICAgKiBjb25zdCBkZWxldGVGaWxlID0gZnVuY3Rpb24oZmlsZSwgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgZnMudW5saW5rKGZpbGUsIGNhbGxiYWNrKTtcbiAgICAgKiB9O1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgY2FsbGJhY2tzXG4gICAgICogYXN5bmMuZWFjaChmaWxlTGlzdCwgZGVsZXRlRmlsZSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICogICAgIGlmKCBlcnIgKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9IGVsc2Uge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coJ0FsbCBmaWxlcyBoYXZlIGJlZW4gZGVsZXRlZCBzdWNjZXNzZnVsbHknKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gRXJyb3IgSGFuZGxpbmdcbiAgICAgKiBhc3luYy5lYWNoKHdpdGhNaXNzaW5nRmlsZUxpc3QsIGRlbGV0ZUZpbGUsIGZ1bmN0aW9uKGVycil7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgIC8vIFsgRXJyb3I6IEVOT0VOVDogbm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSBdXG4gICAgICogICAgIC8vIHNpbmNlIGRpcjQvZmlsZTIudHh0IGRvZXMgbm90IGV4aXN0XG4gICAgICogICAgIC8vIGRpcjEvZmlsZTEudHh0IGNvdWxkIGhhdmUgYmVlbiBkZWxldGVkXG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBQcm9taXNlc1xuICAgICAqIGFzeW5jLmVhY2goZmlsZUxpc3QsIGRlbGV0ZUZpbGUpXG4gICAgICogLnRoZW4oICgpID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coJ0FsbCBmaWxlcyBoYXZlIGJlZW4gZGVsZXRlZCBzdWNjZXNzZnVsbHknKTtcbiAgICAgKiB9KS5jYXRjaCggZXJyID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIEVycm9yIEhhbmRsaW5nXG4gICAgICogYXN5bmMuZWFjaChmaWxlTGlzdCwgZGVsZXRlRmlsZSlcbiAgICAgKiAudGhlbiggKCkgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZygnQWxsIGZpbGVzIGhhdmUgYmVlbiBkZWxldGVkIHN1Y2Nlc3NmdWxseScpO1xuICAgICAqIH0pLmNhdGNoKCBlcnIgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICAvLyBbIEVycm9yOiBFTk9FTlQ6IG5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkgXVxuICAgICAqICAgICAvLyBzaW5jZSBkaXI0L2ZpbGUyLnR4dCBkb2VzIG5vdCBleGlzdFxuICAgICAqICAgICAvLyBkaXIxL2ZpbGUxLnR4dCBjb3VsZCBoYXZlIGJlZW4gZGVsZXRlZFxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgYXN5bmMvYXdhaXRcbiAgICAgKiBhc3luYyAoKSA9PiB7XG4gICAgICogICAgIHRyeSB7XG4gICAgICogICAgICAgICBhd2FpdCBhc3luYy5lYWNoKGZpbGVzLCBkZWxldGVGaWxlKTtcbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICogLy8gRXJyb3IgSGFuZGxpbmdcbiAgICAgKiBhc3luYyAoKSA9PiB7XG4gICAgICogICAgIHRyeSB7XG4gICAgICogICAgICAgICBhd2FpdCBhc3luYy5lYWNoKHdpdGhNaXNzaW5nRmlsZUxpc3QsIGRlbGV0ZUZpbGUpO1xuICAgICAqICAgICB9XG4gICAgICogICAgIGNhdGNoIChlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgICAgICAvLyBbIEVycm9yOiBFTk9FTlQ6IG5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkgXVxuICAgICAqICAgICAgICAgLy8gc2luY2UgZGlyNC9maWxlMi50eHQgZG9lcyBub3QgZXhpc3RcbiAgICAgKiAgICAgICAgIC8vIGRpcjEvZmlsZTEudHh0IGNvdWxkIGhhdmUgYmVlbiBkZWxldGVkXG4gICAgICogICAgIH1cbiAgICAgKiB9XG4gICAgICpcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBlYWNoTGltaXQkMihjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGVhY2hPZiQxKGNvbGwsIF93aXRob3V0SW5kZXgod3JhcEFzeW5jKGl0ZXJhdGVlKSksIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICB2YXIgZWFjaCA9IGF3YWl0aWZ5KGVhY2hMaW1pdCQyLCAzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzYW1lIGFzIFtgZWFjaGBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5lYWNofSBidXQgcnVucyBhIG1heGltdW0gb2YgYGxpbWl0YCBhc3luYyBvcGVyYXRpb25zIGF0IGEgdGltZS5cbiAgICAgKlxuICAgICAqIEBuYW1lIGVhY2hMaW1pdFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLmVhY2hde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5lYWNofVxuICAgICAqIEBhbGlhcyBmb3JFYWNoTGltaXRcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW1pdCAtIFRoZSBtYXhpbXVtIG51bWJlciBvZiBhc3luYyBvcGVyYXRpb25zIGF0IGEgdGltZS5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQW4gYXN5bmMgZnVuY3Rpb24gdG8gYXBwbHkgdG8gZWFjaCBpdGVtIGluXG4gICAgICogYGNvbGxgLlxuICAgICAqIFRoZSBhcnJheSBpbmRleCBpcyBub3QgcGFzc2VkIHRvIHRoZSBpdGVyYXRlZS5cbiAgICAgKiBJZiB5b3UgbmVlZCB0aGUgaW5kZXgsIHVzZSBgZWFjaE9mTGltaXRgLlxuICAgICAqIEludm9rZWQgd2l0aCAoaXRlbSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCB3aGVuIGFsbFxuICAgICAqIGBpdGVyYXRlZWAgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQsIG9yIGFuIGVycm9yIG9jY3Vycy4gSW52b2tlZCB3aXRoIChlcnIpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIGEgY2FsbGJhY2sgaXMgb21pdHRlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGVhY2hMaW1pdChjb2xsLCBsaW1pdCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBlYWNoT2ZMaW1pdCQyKGxpbWl0KShjb2xsLCBfd2l0aG91dEluZGV4KHdyYXBBc3luYyhpdGVyYXRlZSkpLCBjYWxsYmFjayk7XG4gICAgfVxuICAgIHZhciBlYWNoTGltaXQkMSA9IGF3YWl0aWZ5KGVhY2hMaW1pdCwgNCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyBbYGVhY2hgXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZWFjaH0gYnV0IHJ1bnMgb25seSBhIHNpbmdsZSBhc3luYyBvcGVyYXRpb24gYXQgYSB0aW1lLlxuICAgICAqXG4gICAgICogTm90ZSwgdGhhdCB1bmxpa2UgW2BlYWNoYF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmVhY2h9LCB0aGlzIGZ1bmN0aW9uIGFwcGxpZXMgaXRlcmF0ZWUgdG8gZWFjaCBpdGVtXG4gICAgICogaW4gc2VyaWVzIGFuZCB0aGVyZWZvcmUgdGhlIGl0ZXJhdGVlIGZ1bmN0aW9ucyB3aWxsIGNvbXBsZXRlIGluIG9yZGVyLlxuXG4gICAgICogQG5hbWUgZWFjaFNlcmllc1xuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLmVhY2hde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5lYWNofVxuICAgICAqIEBhbGlhcyBmb3JFYWNoU2VyaWVzXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfEFzeW5jSXRlcmFibGV8T2JqZWN0fSBjb2xsIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQW4gYXN5bmMgZnVuY3Rpb24gdG8gYXBwbHkgdG8gZWFjaFxuICAgICAqIGl0ZW0gaW4gYGNvbGxgLlxuICAgICAqIFRoZSBhcnJheSBpbmRleCBpcyBub3QgcGFzc2VkIHRvIHRoZSBpdGVyYXRlZS5cbiAgICAgKiBJZiB5b3UgbmVlZCB0aGUgaW5kZXgsIHVzZSBgZWFjaE9mU2VyaWVzYC5cbiAgICAgKiBJbnZva2VkIHdpdGggKGl0ZW0sIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgd2hlbiBhbGxcbiAgICAgKiBgaXRlcmF0ZWVgIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLCBvciBhbiBlcnJvciBvY2N1cnMuIEludm9rZWQgd2l0aCAoZXJyKS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBhIGNhbGxiYWNrIGlzIG9taXR0ZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBlYWNoU2VyaWVzKGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gZWFjaExpbWl0JDEoY29sbCwgMSwgaXRlcmF0ZWUsIGNhbGxiYWNrKVxuICAgIH1cbiAgICB2YXIgZWFjaFNlcmllcyQxID0gYXdhaXRpZnkoZWFjaFNlcmllcywgMyk7XG5cbiAgICAvKipcbiAgICAgKiBXcmFwIGFuIGFzeW5jIGZ1bmN0aW9uIGFuZCBlbnN1cmUgaXQgY2FsbHMgaXRzIGNhbGxiYWNrIG9uIGEgbGF0ZXIgdGljayBvZlxuICAgICAqIHRoZSBldmVudCBsb29wLiAgSWYgdGhlIGZ1bmN0aW9uIGFscmVhZHkgY2FsbHMgaXRzIGNhbGxiYWNrIG9uIGEgbmV4dCB0aWNrLFxuICAgICAqIG5vIGV4dHJhIGRlZmVycmFsIGlzIGFkZGVkLiBUaGlzIGlzIHVzZWZ1bCBmb3IgcHJldmVudGluZyBzdGFjayBvdmVyZmxvd3NcbiAgICAgKiAoYFJhbmdlRXJyb3I6IE1heGltdW0gY2FsbCBzdGFjayBzaXplIGV4Y2VlZGVkYCkgYW5kIGdlbmVyYWxseSBrZWVwaW5nXG4gICAgICogW1phbGdvXShodHRwOi8vYmxvZy5penMubWUvcG9zdC81OTE0Mjc0MjE0My9kZXNpZ25pbmctYXBpcy1mb3ItYXN5bmNocm9ueSlcbiAgICAgKiBjb250YWluZWQuIEVTMjAxNyBgYXN5bmNgIGZ1bmN0aW9ucyBhcmUgcmV0dXJuZWQgYXMtaXMgLS0gdGhleSBhcmUgaW1tdW5lXG4gICAgICogdG8gWmFsZ28ncyBjb3JydXB0aW5nIGluZmx1ZW5jZXMsIGFzIHRoZXkgYWx3YXlzIHJlc29sdmUgb24gYSBsYXRlciB0aWNrLlxuICAgICAqXG4gICAgICogQG5hbWUgZW5zdXJlQXN5bmNcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpVdGlsc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gZm4gLSBhbiBhc3luYyBmdW5jdGlvbiwgb25lIHRoYXQgZXhwZWN0cyBhIG5vZGUtc3R5bGVcbiAgICAgKiBjYWxsYmFjayBhcyBpdHMgbGFzdCBhcmd1bWVudC5cbiAgICAgKiBAcmV0dXJucyB7QXN5bmNGdW5jdGlvbn0gUmV0dXJucyBhIHdyYXBwZWQgZnVuY3Rpb24gd2l0aCB0aGUgZXhhY3Qgc2FtZSBjYWxsXG4gICAgICogc2lnbmF0dXJlIGFzIHRoZSBmdW5jdGlvbiBwYXNzZWQgaW4uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIHNvbWV0aW1lc0FzeW5jKGFyZywgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgaWYgKGNhY2hlW2FyZ10pIHtcbiAgICAgKiAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsLCBjYWNoZVthcmddKTsgLy8gdGhpcyB3b3VsZCBiZSBzeW5jaHJvbm91cyEhXG4gICAgICogICAgIH0gZWxzZSB7XG4gICAgICogICAgICAgICBkb1NvbWVJTyhhcmcsIGNhbGxiYWNrKTsgLy8gdGhpcyBJTyB3b3VsZCBiZSBhc3luY2hyb25vdXNcbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIC8vIHRoaXMgaGFzIGEgcmlzayBvZiBzdGFjayBvdmVyZmxvd3MgaWYgbWFueSByZXN1bHRzIGFyZSBjYWNoZWQgaW4gYSByb3dcbiAgICAgKiBhc3luYy5tYXBTZXJpZXMoYXJncywgc29tZXRpbWVzQXN5bmMsIGRvbmUpO1xuICAgICAqXG4gICAgICogLy8gdGhpcyB3aWxsIGRlZmVyIHNvbWV0aW1lc0FzeW5jJ3MgY2FsbGJhY2sgaWYgbmVjZXNzYXJ5LFxuICAgICAqIC8vIHByZXZlbnRpbmcgc3RhY2sgb3ZlcmZsb3dzXG4gICAgICogYXN5bmMubWFwU2VyaWVzKGFyZ3MsIGFzeW5jLmVuc3VyZUFzeW5jKHNvbWV0aW1lc0FzeW5jKSwgZG9uZSk7XG4gICAgICovXG4gICAgZnVuY3Rpb24gZW5zdXJlQXN5bmMoZm4pIHtcbiAgICAgICAgaWYgKGlzQXN5bmMoZm4pKSByZXR1cm4gZm47XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoLi4uYXJncy8qLCBjYWxsYmFjayovKSB7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgdmFyIHN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgYXJncy5wdXNoKCguLi5pbm5lckFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoc3luYykge1xuICAgICAgICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUkMSgoKSA9PiBjYWxsYmFjayguLi5pbm5lckFyZ3MpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayguLi5pbm5lckFyZ3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICBzeW5jID0gZmFsc2U7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBgdHJ1ZWAgaWYgZXZlcnkgZWxlbWVudCBpbiBgY29sbGAgc2F0aXNmaWVzIGFuIGFzeW5jIHRlc3QuIElmIGFueVxuICAgICAqIGl0ZXJhdGVlIGNhbGwgcmV0dXJucyBgZmFsc2VgLCB0aGUgbWFpbiBgY2FsbGJhY2tgIGlzIGltbWVkaWF0ZWx5IGNhbGxlZC5cbiAgICAgKlxuICAgICAqIEBuYW1lIGV2ZXJ5XG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGFsaWFzIGFsbFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEFuIGFzeW5jIHRydXRoIHRlc3QgdG8gYXBwbHkgdG8gZWFjaCBpdGVtXG4gICAgICogaW4gdGhlIGNvbGxlY3Rpb24gaW4gcGFyYWxsZWwuXG4gICAgICogVGhlIGl0ZXJhdGVlIG11c3QgY29tcGxldGUgd2l0aCBhIGJvb2xlYW4gcmVzdWx0IHZhbHVlLlxuICAgICAqIEludm9rZWQgd2l0aCAoaXRlbSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCBhZnRlciBhbGwgdGhlXG4gICAgICogYGl0ZXJhdGVlYCBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZC4gUmVzdWx0IHdpbGwgYmUgZWl0aGVyIGB0cnVlYCBvciBgZmFsc2VgXG4gICAgICogZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZXMgb2YgdGhlIGFzeW5jIHRlc3RzLiBJbnZva2VkIHdpdGggKGVyciwgcmVzdWx0KS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBwcm92aWRlZFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBkaXIxIGlzIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgZmlsZTEudHh0LCBmaWxlMi50eHRcbiAgICAgKiAvLyBkaXIyIGlzIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgZmlsZTMudHh0LCBmaWxlNC50eHRcbiAgICAgKiAvLyBkaXIzIGlzIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgZmlsZTUudHh0XG4gICAgICogLy8gZGlyNCBkb2VzIG5vdCBleGlzdFxuICAgICAqXG4gICAgICogY29uc3QgZmlsZUxpc3QgPSBbJ2RpcjEvZmlsZTEudHh0JywnZGlyMi9maWxlMy50eHQnLCdkaXIzL2ZpbGU1LnR4dCddO1xuICAgICAqIGNvbnN0IHdpdGhNaXNzaW5nRmlsZUxpc3QgPSBbJ2ZpbGUxLnR4dCcsJ2ZpbGUyLnR4dCcsJ2ZpbGU0LnR4dCddO1xuICAgICAqXG4gICAgICogLy8gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIGlmIGEgZmlsZSBleGlzdHNcbiAgICAgKiBmdW5jdGlvbiBmaWxlRXhpc3RzKGZpbGUsIGNhbGxiYWNrKSB7XG4gICAgICogICAgZnMuYWNjZXNzKGZpbGUsIGZzLmNvbnN0YW50cy5GX09LLCAoZXJyKSA9PiB7XG4gICAgICogICAgICAgIGNhbGxiYWNrKG51bGwsICFlcnIpO1xuICAgICAqICAgIH0pO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIGNhbGxiYWNrc1xuICAgICAqIGFzeW5jLmV2ZXJ5KGZpbGVMaXN0LCBmaWxlRXhpc3RzLCBmdW5jdGlvbihlcnIsIHJlc3VsdCkge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAvLyB0cnVlXG4gICAgICogICAgIC8vIHJlc3VsdCBpcyB0cnVlIHNpbmNlIGV2ZXJ5IGZpbGUgZXhpc3RzXG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiBhc3luYy5ldmVyeSh3aXRoTWlzc2luZ0ZpbGVMaXN0LCBmaWxlRXhpc3RzLCBmdW5jdGlvbihlcnIsIHJlc3VsdCkge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAvLyBmYWxzZVxuICAgICAqICAgICAvLyByZXN1bHQgaXMgZmFsc2Ugc2luY2UgTk9UIGV2ZXJ5IGZpbGUgZXhpc3RzXG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBQcm9taXNlc1xuICAgICAqIGFzeW5jLmV2ZXJ5KGZpbGVMaXN0LCBmaWxlRXhpc3RzKVxuICAgICAqIC50aGVuKCByZXN1bHQgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAvLyB0cnVlXG4gICAgICogICAgIC8vIHJlc3VsdCBpcyB0cnVlIHNpbmNlIGV2ZXJ5IGZpbGUgZXhpc3RzXG4gICAgICogfSkuY2F0Y2goIGVyciA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiBhc3luYy5ldmVyeSh3aXRoTWlzc2luZ0ZpbGVMaXN0LCBmaWxlRXhpc3RzKVxuICAgICAqIC50aGVuKCByZXN1bHQgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAvLyBmYWxzZVxuICAgICAqICAgICAvLyByZXN1bHQgaXMgZmFsc2Ugc2luY2UgTk9UIGV2ZXJ5IGZpbGUgZXhpc3RzXG4gICAgICogfSkuY2F0Y2goIGVyciA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBhc3luYy9hd2FpdFxuICAgICAqIGFzeW5jICgpID0+IHtcbiAgICAgKiAgICAgdHJ5IHtcbiAgICAgKiAgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBhc3luYy5ldmVyeShmaWxlTGlzdCwgZmlsZUV4aXN0cyk7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAgICAgLy8gdHJ1ZVxuICAgICAqICAgICAgICAgLy8gcmVzdWx0IGlzIHRydWUgc2luY2UgZXZlcnkgZmlsZSBleGlzdHNcbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICogYXN5bmMgKCkgPT4ge1xuICAgICAqICAgICB0cnkge1xuICAgICAqICAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IGFzeW5jLmV2ZXJ5KHdpdGhNaXNzaW5nRmlsZUxpc3QsIGZpbGVFeGlzdHMpO1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgICAgIC8vIGZhbHNlXG4gICAgICogICAgICAgICAvLyByZXN1bHQgaXMgZmFsc2Ugc2luY2UgTk9UIGV2ZXJ5IGZpbGUgZXhpc3RzXG4gICAgICogICAgIH1cbiAgICAgKiAgICAgY2F0Y2ggKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGV2ZXJ5KGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX2NyZWF0ZVRlc3Rlcihib29sID0+ICFib29sLCByZXMgPT4gIXJlcykoZWFjaE9mJDEsIGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaylcbiAgICB9XG4gICAgdmFyIGV2ZXJ5JDEgPSBhd2FpdGlmeShldmVyeSwgMyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyBbYGV2ZXJ5YF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmV2ZXJ5fSBidXQgcnVucyBhIG1heGltdW0gb2YgYGxpbWl0YCBhc3luYyBvcGVyYXRpb25zIGF0IGEgdGltZS5cbiAgICAgKlxuICAgICAqIEBuYW1lIGV2ZXJ5TGltaXRcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5ldmVyeV17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmV2ZXJ5fVxuICAgICAqIEBhbGlhcyBhbGxMaW1pdFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbWl0IC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGFzeW5jIG9wZXJhdGlvbnMgYXQgYSB0aW1lLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBbiBhc3luYyB0cnV0aCB0ZXN0IHRvIGFwcGx5IHRvIGVhY2ggaXRlbVxuICAgICAqIGluIHRoZSBjb2xsZWN0aW9uIGluIHBhcmFsbGVsLlxuICAgICAqIFRoZSBpdGVyYXRlZSBtdXN0IGNvbXBsZXRlIHdpdGggYSBib29sZWFuIHJlc3VsdCB2YWx1ZS5cbiAgICAgKiBJbnZva2VkIHdpdGggKGl0ZW0sIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgYWZ0ZXIgYWxsIHRoZVxuICAgICAqIGBpdGVyYXRlZWAgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQuIFJlc3VsdCB3aWxsIGJlIGVpdGhlciBgdHJ1ZWAgb3IgYGZhbHNlYFxuICAgICAqIGRlcGVuZGluZyBvbiB0aGUgdmFsdWVzIG9mIHRoZSBhc3luYyB0ZXN0cy4gSW52b2tlZCB3aXRoIChlcnIsIHJlc3VsdCkuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgcHJvdmlkZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBldmVyeUxpbWl0KGNvbGwsIGxpbWl0LCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9jcmVhdGVUZXN0ZXIoYm9vbCA9PiAhYm9vbCwgcmVzID0+ICFyZXMpKGVhY2hPZkxpbWl0JDIobGltaXQpLCBjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuICAgIHZhciBldmVyeUxpbWl0JDEgPSBhd2FpdGlmeShldmVyeUxpbWl0LCA0KTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzYW1lIGFzIFtgZXZlcnlgXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZXZlcnl9IGJ1dCBydW5zIG9ubHkgYSBzaW5nbGUgYXN5bmMgb3BlcmF0aW9uIGF0IGEgdGltZS5cbiAgICAgKlxuICAgICAqIEBuYW1lIGV2ZXJ5U2VyaWVzXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMuZXZlcnlde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5ldmVyeX1cbiAgICAgKiBAYWxpYXMgYWxsU2VyaWVzXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfEFzeW5jSXRlcmFibGV8T2JqZWN0fSBjb2xsIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQW4gYXN5bmMgdHJ1dGggdGVzdCB0byBhcHBseSB0byBlYWNoIGl0ZW1cbiAgICAgKiBpbiB0aGUgY29sbGVjdGlvbiBpbiBzZXJpZXMuXG4gICAgICogVGhlIGl0ZXJhdGVlIG11c3QgY29tcGxldGUgd2l0aCBhIGJvb2xlYW4gcmVzdWx0IHZhbHVlLlxuICAgICAqIEludm9rZWQgd2l0aCAoaXRlbSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCBhZnRlciBhbGwgdGhlXG4gICAgICogYGl0ZXJhdGVlYCBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZC4gUmVzdWx0IHdpbGwgYmUgZWl0aGVyIGB0cnVlYCBvciBgZmFsc2VgXG4gICAgICogZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZXMgb2YgdGhlIGFzeW5jIHRlc3RzLiBJbnZva2VkIHdpdGggKGVyciwgcmVzdWx0KS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBwcm92aWRlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGV2ZXJ5U2VyaWVzKGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX2NyZWF0ZVRlc3Rlcihib29sID0+ICFib29sLCByZXMgPT4gIXJlcykoZWFjaE9mU2VyaWVzJDEsIGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaylcbiAgICB9XG4gICAgdmFyIGV2ZXJ5U2VyaWVzJDEgPSBhd2FpdGlmeShldmVyeVNlcmllcywgMyk7XG5cbiAgICBmdW5jdGlvbiBmaWx0ZXJBcnJheShlYWNoZm4sIGFyciwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciB0cnV0aFZhbHVlcyA9IG5ldyBBcnJheShhcnIubGVuZ3RoKTtcbiAgICAgICAgZWFjaGZuKGFyciwgKHgsIGluZGV4LCBpdGVyQ2IpID0+IHtcbiAgICAgICAgICAgIGl0ZXJhdGVlKHgsIChlcnIsIHYpID0+IHtcbiAgICAgICAgICAgICAgICB0cnV0aFZhbHVlc1tpbmRleF0gPSAhIXY7XG4gICAgICAgICAgICAgICAgaXRlckNiKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZXJyID0+IHtcbiAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRydXRoVmFsdWVzW2ldKSByZXN1bHRzLnB1c2goYXJyW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdHMpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmaWx0ZXJHZW5lcmljKGVhY2hmbiwgY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIGVhY2hmbihjb2xsLCAoeCwgaW5kZXgsIGl0ZXJDYikgPT4ge1xuICAgICAgICAgICAgaXRlcmF0ZWUoeCwgKGVyciwgdikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBpdGVyQ2IoZXJyKTtcbiAgICAgICAgICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goe2luZGV4LCB2YWx1ZTogeH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpdGVyQ2IoZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBlcnIgPT4ge1xuICAgICAgICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXN1bHRzXG4gICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEuaW5kZXggLSBiLmluZGV4KVxuICAgICAgICAgICAgICAgIC5tYXAodiA9PiB2LnZhbHVlKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9maWx0ZXIoZWFjaGZuLCBjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGZpbHRlciA9IGlzQXJyYXlMaWtlKGNvbGwpID8gZmlsdGVyQXJyYXkgOiBmaWx0ZXJHZW5lcmljO1xuICAgICAgICByZXR1cm4gZmlsdGVyKGVhY2hmbiwgY29sbCwgd3JhcEFzeW5jKGl0ZXJhdGVlKSwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBuZXcgYXJyYXkgb2YgYWxsIHRoZSB2YWx1ZXMgaW4gYGNvbGxgIHdoaWNoIHBhc3MgYW4gYXN5bmMgdHJ1dGhcbiAgICAgKiB0ZXN0LiBUaGlzIG9wZXJhdGlvbiBpcyBwZXJmb3JtZWQgaW4gcGFyYWxsZWwsIGJ1dCB0aGUgcmVzdWx0cyBhcnJheSB3aWxsIGJlXG4gICAgICogaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlIG9yaWdpbmFsLlxuICAgICAqXG4gICAgICogQG5hbWUgZmlsdGVyXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGFsaWFzIHNlbGVjdFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBIHRydXRoIHRlc3QgdG8gYXBwbHkgdG8gZWFjaCBpdGVtIGluIGBjb2xsYC5cbiAgICAgKiBUaGUgYGl0ZXJhdGVlYCBpcyBwYXNzZWQgYSBgY2FsbGJhY2soZXJyLCB0cnV0aFZhbHVlKWAsIHdoaWNoIG11c3QgYmUgY2FsbGVkXG4gICAgICogd2l0aCBhIGJvb2xlYW4gYXJndW1lbnQgb25jZSBpdCBoYXMgY29tcGxldGVkLiBJbnZva2VkIHdpdGggKGl0ZW0sIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgYWZ0ZXIgYWxsIHRoZVxuICAgICAqIGBpdGVyYXRlZWAgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQuIEludm9rZWQgd2l0aCAoZXJyLCByZXN1bHRzKS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBwcm92aWRlZFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBkaXIxIGlzIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgZmlsZTEudHh0LCBmaWxlMi50eHRcbiAgICAgKiAvLyBkaXIyIGlzIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgZmlsZTMudHh0LCBmaWxlNC50eHRcbiAgICAgKiAvLyBkaXIzIGlzIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgZmlsZTUudHh0XG4gICAgICpcbiAgICAgKiBjb25zdCBmaWxlcyA9IFsnZGlyMS9maWxlMS50eHQnLCdkaXIyL2ZpbGUzLnR4dCcsJ2RpcjMvZmlsZTYudHh0J107XG4gICAgICpcbiAgICAgKiAvLyBhc3luY2hyb25vdXMgZnVuY3Rpb24gdGhhdCBjaGVja3MgaWYgYSBmaWxlIGV4aXN0c1xuICAgICAqIGZ1bmN0aW9uIGZpbGVFeGlzdHMoZmlsZSwgY2FsbGJhY2spIHtcbiAgICAgKiAgICBmcy5hY2Nlc3MoZmlsZSwgZnMuY29uc3RhbnRzLkZfT0ssIChlcnIpID0+IHtcbiAgICAgKiAgICAgICAgY2FsbGJhY2sobnVsbCwgIWVycik7XG4gICAgICogICAgfSk7XG4gICAgICogfVxuICAgICAqXG4gICAgICogLy8gVXNpbmcgY2FsbGJhY2tzXG4gICAgICogYXN5bmMuZmlsdGVyKGZpbGVzLCBmaWxlRXhpc3RzLCBmdW5jdGlvbihlcnIsIHJlc3VsdHMpIHtcbiAgICAgKiAgICBpZihlcnIpIHtcbiAgICAgKiAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICB9IGVsc2Uge1xuICAgICAqICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiAgICAgICAgLy8gWyAnZGlyMS9maWxlMS50eHQnLCAnZGlyMi9maWxlMy50eHQnIF1cbiAgICAgKiAgICAgICAgLy8gcmVzdWx0cyBpcyBub3cgYW4gYXJyYXkgb2YgdGhlIGV4aXN0aW5nIGZpbGVzXG4gICAgICogICAgfVxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgUHJvbWlzZXNcbiAgICAgKiBhc3luYy5maWx0ZXIoZmlsZXMsIGZpbGVFeGlzdHMpXG4gICAgICogLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgICAvLyBbICdkaXIxL2ZpbGUxLnR4dCcsICdkaXIyL2ZpbGUzLnR4dCcgXVxuICAgICAqICAgICAvLyByZXN1bHRzIGlzIG5vdyBhbiBhcnJheSBvZiB0aGUgZXhpc3RpbmcgZmlsZXNcbiAgICAgKiB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgYXN5bmMvYXdhaXRcbiAgICAgKiBhc3luYyAoKSA9PiB7XG4gICAgICogICAgIHRyeSB7XG4gICAgICogICAgICAgICBsZXQgcmVzdWx0cyA9IGF3YWl0IGFzeW5jLmZpbHRlcihmaWxlcywgZmlsZUV4aXN0cyk7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiAgICAgICAgIC8vIFsgJ2RpcjEvZmlsZTEudHh0JywgJ2RpcjIvZmlsZTMudHh0JyBdXG4gICAgICogICAgICAgICAvLyByZXN1bHRzIGlzIG5vdyBhbiBhcnJheSBvZiB0aGUgZXhpc3RpbmcgZmlsZXNcbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICovXG4gICAgZnVuY3Rpb24gZmlsdGVyIChjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9maWx0ZXIoZWFjaE9mJDEsIGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaylcbiAgICB9XG4gICAgdmFyIGZpbHRlciQxID0gYXdhaXRpZnkoZmlsdGVyLCAzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzYW1lIGFzIFtgZmlsdGVyYF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmZpbHRlcn0gYnV0IHJ1bnMgYSBtYXhpbXVtIG9mIGBsaW1pdGAgYXN5bmMgb3BlcmF0aW9ucyBhdCBhXG4gICAgICogdGltZS5cbiAgICAgKlxuICAgICAqIEBuYW1lIGZpbHRlckxpbWl0XG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMuZmlsdGVyXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZmlsdGVyfVxuICAgICAqIEBhbGlhcyBzZWxlY3RMaW1pdFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbWl0IC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGFzeW5jIG9wZXJhdGlvbnMgYXQgYSB0aW1lLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIC0gQSB0cnV0aCB0ZXN0IHRvIGFwcGx5IHRvIGVhY2ggaXRlbSBpbiBgY29sbGAuXG4gICAgICogVGhlIGBpdGVyYXRlZWAgaXMgcGFzc2VkIGEgYGNhbGxiYWNrKGVyciwgdHJ1dGhWYWx1ZSlgLCB3aGljaCBtdXN0IGJlIGNhbGxlZFxuICAgICAqIHdpdGggYSBib29sZWFuIGFyZ3VtZW50IG9uY2UgaXQgaGFzIGNvbXBsZXRlZC4gSW52b2tlZCB3aXRoIChpdGVtLCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIGFmdGVyIGFsbCB0aGVcbiAgICAgKiBgaXRlcmF0ZWVgIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLiBJbnZva2VkIHdpdGggKGVyciwgcmVzdWx0cykuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgcHJvdmlkZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmaWx0ZXJMaW1pdCAoY29sbCwgbGltaXQsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX2ZpbHRlcihlYWNoT2ZMaW1pdCQyKGxpbWl0KSwgY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKVxuICAgIH1cbiAgICB2YXIgZmlsdGVyTGltaXQkMSA9IGF3YWl0aWZ5KGZpbHRlckxpbWl0LCA0KTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzYW1lIGFzIFtgZmlsdGVyYF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmZpbHRlcn0gYnV0IHJ1bnMgb25seSBhIHNpbmdsZSBhc3luYyBvcGVyYXRpb24gYXQgYSB0aW1lLlxuICAgICAqXG4gICAgICogQG5hbWUgZmlsdGVyU2VyaWVzXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMuZmlsdGVyXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZmlsdGVyfVxuICAgICAqIEBhbGlhcyBzZWxlY3RTZXJpZXNcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIC0gQSB0cnV0aCB0ZXN0IHRvIGFwcGx5IHRvIGVhY2ggaXRlbSBpbiBgY29sbGAuXG4gICAgICogVGhlIGBpdGVyYXRlZWAgaXMgcGFzc2VkIGEgYGNhbGxiYWNrKGVyciwgdHJ1dGhWYWx1ZSlgLCB3aGljaCBtdXN0IGJlIGNhbGxlZFxuICAgICAqIHdpdGggYSBib29sZWFuIGFyZ3VtZW50IG9uY2UgaXQgaGFzIGNvbXBsZXRlZC4gSW52b2tlZCB3aXRoIChpdGVtLCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIGFmdGVyIGFsbCB0aGVcbiAgICAgKiBgaXRlcmF0ZWVgIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLiBJbnZva2VkIHdpdGggKGVyciwgcmVzdWx0cylcbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBwcm92aWRlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZpbHRlclNlcmllcyAoY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBfZmlsdGVyKGVhY2hPZlNlcmllcyQxLCBjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuICAgIHZhciBmaWx0ZXJTZXJpZXMkMSA9IGF3YWl0aWZ5KGZpbHRlclNlcmllcywgMyk7XG5cbiAgICAvKipcbiAgICAgKiBDYWxscyB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIGBmbmAgd2l0aCBhIGNhbGxiYWNrIHBhcmFtZXRlciB0aGF0IGFsbG93cyBpdFxuICAgICAqIHRvIGNhbGwgaXRzZWxmIGFnYWluLCBpbiBzZXJpZXMsIGluZGVmaW5pdGVseS5cblxuICAgICAqIElmIGFuIGVycm9yIGlzIHBhc3NlZCB0byB0aGUgY2FsbGJhY2sgdGhlbiBgZXJyYmFja2AgaXMgY2FsbGVkIHdpdGggdGhlXG4gICAgICogZXJyb3IsIGFuZCBleGVjdXRpb24gc3RvcHMsIG90aGVyd2lzZSBpdCB3aWxsIG5ldmVyIGJlIGNhbGxlZC5cbiAgICAgKlxuICAgICAqIEBuYW1lIGZvcmV2ZXJcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb250cm9sRmxvd1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgQ29udHJvbCBGbG93XG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBmbiAtIGFuIGFzeW5jIGZ1bmN0aW9uIHRvIGNhbGwgcmVwZWF0ZWRseS5cbiAgICAgKiBJbnZva2VkIHdpdGggKG5leHQpLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtlcnJiYWNrXSAtIHdoZW4gYGZuYCBwYXNzZXMgYW4gZXJyb3IgdG8gaXQncyBjYWxsYmFjayxcbiAgICAgKiB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkLCBhbmQgZXhlY3V0aW9uIHN0b3BzLiBJbnZva2VkIHdpdGggKGVycikuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSB0aGF0IHJlamVjdHMgaWYgYW4gZXJyb3Igb2NjdXJzIGFuZCBhbiBlcnJiYWNrXG4gICAgICogaXMgbm90IHBhc3NlZFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBhc3luYy5mb3JldmVyKFxuICAgICAqICAgICBmdW5jdGlvbihuZXh0KSB7XG4gICAgICogICAgICAgICAvLyBuZXh0IGlzIHN1aXRhYmxlIGZvciBwYXNzaW5nIHRvIHRoaW5ncyB0aGF0IG5lZWQgYSBjYWxsYmFjayhlcnIgWywgd2hhdGV2ZXJdKTtcbiAgICAgKiAgICAgICAgIC8vIGl0IHdpbGwgcmVzdWx0IGluIHRoaXMgZnVuY3Rpb24gYmVpbmcgY2FsbGVkIGFnYWluLlxuICAgICAqICAgICB9LFxuICAgICAqICAgICBmdW5jdGlvbihlcnIpIHtcbiAgICAgKiAgICAgICAgIC8vIGlmIG5leHQgaXMgY2FsbGVkIHdpdGggYSB2YWx1ZSBpbiBpdHMgZmlyc3QgcGFyYW1ldGVyLCBpdCB3aWxsIGFwcGVhclxuICAgICAqICAgICAgICAgLy8gaW4gaGVyZSBhcyAnZXJyJywgYW5kIGV4ZWN1dGlvbiB3aWxsIHN0b3AuXG4gICAgICogICAgIH1cbiAgICAgKiApO1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZvcmV2ZXIoZm4sIGVycmJhY2spIHtcbiAgICAgICAgdmFyIGRvbmUgPSBvbmx5T25jZShlcnJiYWNrKTtcbiAgICAgICAgdmFyIHRhc2sgPSB3cmFwQXN5bmMoZW5zdXJlQXN5bmMoZm4pKTtcblxuICAgICAgICBmdW5jdGlvbiBuZXh0KGVycikge1xuICAgICAgICAgICAgaWYgKGVycikgcmV0dXJuIGRvbmUoZXJyKTtcbiAgICAgICAgICAgIGlmIChlcnIgPT09IGZhbHNlKSByZXR1cm47XG4gICAgICAgICAgICB0YXNrKG5leHQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgfVxuICAgIHZhciBmb3JldmVyJDEgPSBhd2FpdGlmeShmb3JldmVyLCAyKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzYW1lIGFzIFtgZ3JvdXBCeWBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5ncm91cEJ5fSBidXQgcnVucyBhIG1heGltdW0gb2YgYGxpbWl0YCBhc3luYyBvcGVyYXRpb25zIGF0IGEgdGltZS5cbiAgICAgKlxuICAgICAqIEBuYW1lIGdyb3VwQnlMaW1pdFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLmdyb3VwQnlde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5ncm91cEJ5fVxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbWl0IC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGFzeW5jIG9wZXJhdGlvbnMgYXQgYSB0aW1lLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBbiBhc3luYyBmdW5jdGlvbiB0byBhcHBseSB0byBlYWNoIGl0ZW0gaW5cbiAgICAgKiBgY29sbGAuXG4gICAgICogVGhlIGl0ZXJhdGVlIHNob3VsZCBjb21wbGV0ZSB3aXRoIGEgYGtleWAgdG8gZ3JvdXAgdGhlIHZhbHVlIHVuZGVyLlxuICAgICAqIEludm9rZWQgd2l0aCAodmFsdWUsIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgd2hlbiBhbGwgYGl0ZXJhdGVlYFxuICAgICAqIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLCBvciBhbiBlcnJvciBvY2N1cnMuIFJlc3VsdCBpcyBhbiBgT2JqZWN0YCB3aG9zZXNcbiAgICAgKiBwcm9wZXJ0aWVzIGFyZSBhcnJheXMgb2YgdmFsdWVzIHdoaWNoIHJldHVybmVkIHRoZSBjb3JyZXNwb25kaW5nIGtleS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBpcyBwYXNzZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBncm91cEJ5TGltaXQoY29sbCwgbGltaXQsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgX2l0ZXJhdGVlID0gd3JhcEFzeW5jKGl0ZXJhdGVlKTtcbiAgICAgICAgcmV0dXJuIG1hcExpbWl0JDEoY29sbCwgbGltaXQsICh2YWwsIGl0ZXJDYikgPT4ge1xuICAgICAgICAgICAgX2l0ZXJhdGVlKHZhbCwgKGVyciwga2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikgcmV0dXJuIGl0ZXJDYihlcnIpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVyQ2IoZXJyLCB7a2V5LCB2YWx9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCAoZXJyLCBtYXBSZXN1bHRzKSA9PiB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgICAgICAgICAvLyBmcm9tIE1ETiwgaGFuZGxlIG9iamVjdCBoYXZpbmcgYW4gYGhhc093blByb3BlcnR5YCBwcm9wXG4gICAgICAgICAgICB2YXIge2hhc093blByb3BlcnR5fSA9IE9iamVjdC5wcm90b3R5cGU7XG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFwUmVzdWx0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChtYXBSZXN1bHRzW2ldKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB7a2V5fSA9IG1hcFJlc3VsdHNbaV07XG4gICAgICAgICAgICAgICAgICAgIHZhciB7dmFsfSA9IG1hcFJlc3VsdHNbaV07XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwocmVzdWx0LCBrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRba2V5XS5wdXNoKHZhbCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IFt2YWxdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyLCByZXN1bHQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB2YXIgZ3JvdXBCeUxpbWl0JDEgPSBhd2FpdGlmeShncm91cEJ5TGltaXQsIDQpO1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBvYmplY3QsIHdoZXJlIGVhY2ggdmFsdWUgY29ycmVzcG9uZHMgdG8gYW4gYXJyYXkgb2YgaXRlbXMsIGZyb21cbiAgICAgKiBgY29sbGAsIHRoYXQgcmV0dXJuZWQgdGhlIGNvcnJlc3BvbmRpbmcga2V5LiBUaGF0IGlzLCB0aGUga2V5cyBvZiB0aGUgb2JqZWN0XG4gICAgICogY29ycmVzcG9uZCB0byB0aGUgdmFsdWVzIHBhc3NlZCB0byB0aGUgYGl0ZXJhdGVlYCBjYWxsYmFjay5cbiAgICAgKlxuICAgICAqIE5vdGU6IFNpbmNlIHRoaXMgZnVuY3Rpb24gYXBwbGllcyB0aGUgYGl0ZXJhdGVlYCB0byBlYWNoIGl0ZW0gaW4gcGFyYWxsZWwsXG4gICAgICogdGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgdGhlIGBpdGVyYXRlZWAgZnVuY3Rpb25zIHdpbGwgY29tcGxldGUgaW4gb3JkZXIuXG4gICAgICogSG93ZXZlciwgdGhlIHZhbHVlcyBmb3IgZWFjaCBrZXkgaW4gdGhlIGByZXN1bHRgIHdpbGwgYmUgaW4gdGhlIHNhbWUgb3JkZXIgYXNcbiAgICAgKiB0aGUgb3JpZ2luYWwgYGNvbGxgLiBGb3IgT2JqZWN0cywgdGhlIHZhbHVlcyB3aWxsIHJvdWdobHkgYmUgaW4gdGhlIG9yZGVyIG9mXG4gICAgICogdGhlIG9yaWdpbmFsIE9iamVjdHMnIGtleXMgKGJ1dCB0aGlzIGNhbiB2YXJ5IGFjcm9zcyBKYXZhU2NyaXB0IGVuZ2luZXMpLlxuICAgICAqXG4gICAgICogQG5hbWUgZ3JvdXBCeVxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEFuIGFzeW5jIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggaXRlbSBpblxuICAgICAqIGBjb2xsYC5cbiAgICAgKiBUaGUgaXRlcmF0ZWUgc2hvdWxkIGNvbXBsZXRlIHdpdGggYSBga2V5YCB0byBncm91cCB0aGUgdmFsdWUgdW5kZXIuXG4gICAgICogSW52b2tlZCB3aXRoICh2YWx1ZSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCB3aGVuIGFsbCBgaXRlcmF0ZWVgXG4gICAgICogZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQsIG9yIGFuIGVycm9yIG9jY3Vycy4gUmVzdWx0IGlzIGFuIGBPYmplY3RgIHdob3Nlc1xuICAgICAqIHByb3BlcnRpZXMgYXJlIGFycmF5cyBvZiB2YWx1ZXMgd2hpY2ggcmV0dXJuZWQgdGhlIGNvcnJlc3BvbmRpbmcga2V5LlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIG5vIGNhbGxiYWNrIGlzIHBhc3NlZFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBkaXIxIGlzIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgZmlsZTEudHh0LCBmaWxlMi50eHRcbiAgICAgKiAvLyBkaXIyIGlzIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgZmlsZTMudHh0LCBmaWxlNC50eHRcbiAgICAgKiAvLyBkaXIzIGlzIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgZmlsZTUudHh0XG4gICAgICogLy8gZGlyNCBkb2VzIG5vdCBleGlzdFxuICAgICAqXG4gICAgICogY29uc3QgZmlsZXMgPSBbJ2RpcjEvZmlsZTEudHh0JywnZGlyMicsJ2RpcjQnXVxuICAgICAqXG4gICAgICogLy8gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRoYXQgZGV0ZWN0cyBmaWxlIHR5cGUgYXMgbm9uZSwgZmlsZSwgb3IgZGlyZWN0b3J5XG4gICAgICogZnVuY3Rpb24gZGV0ZWN0RmlsZShmaWxlLCBjYWxsYmFjaykge1xuICAgICAqICAgICBmcy5zdGF0KGZpbGUsIGZ1bmN0aW9uKGVyciwgc3RhdCkge1xuICAgICAqICAgICAgICAgaWYgKGVycikge1xuICAgICAqICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsLCAnbm9uZScpO1xuICAgICAqICAgICAgICAgfVxuICAgICAqICAgICAgICAgY2FsbGJhY2sobnVsbCwgc3RhdC5pc0RpcmVjdG9yeSgpID8gJ2RpcmVjdG9yeScgOiAnZmlsZScpO1xuICAgICAqICAgICB9KTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvL1VzaW5nIGNhbGxiYWNrc1xuICAgICAqIGFzeW5jLmdyb3VwQnkoZmlsZXMsIGRldGVjdEZpbGUsIGZ1bmN0aW9uKGVyciwgcmVzdWx0KSB7XG4gICAgICogICAgIGlmKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgfSBlbHNlIHtcbiAgICAgKlx0ICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XG4gICAgICogICAgICAgICAvLyB7XG4gICAgICogICAgICAgICAvLyAgICAgZmlsZTogWyAnZGlyMS9maWxlMS50eHQnIF0sXG4gICAgICogICAgICAgICAvLyAgICAgbm9uZTogWyAnZGlyNCcgXSxcbiAgICAgKiAgICAgICAgIC8vICAgICBkaXJlY3Rvcnk6IFsgJ2RpcjInXVxuICAgICAqICAgICAgICAgLy8gfVxuICAgICAqICAgICAgICAgLy8gcmVzdWx0IGlzIG9iamVjdCBjb250YWluaW5nIHRoZSBmaWxlcyBncm91cGVkIGJ5IHR5cGVcbiAgICAgKiAgICAgfVxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgUHJvbWlzZXNcbiAgICAgKiBhc3luYy5ncm91cEJ5KGZpbGVzLCBkZXRlY3RGaWxlKVxuICAgICAqIC50aGVuKCByZXN1bHQgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAvLyB7XG4gICAgICogICAgIC8vICAgICBmaWxlOiBbICdkaXIxL2ZpbGUxLnR4dCcgXSxcbiAgICAgKiAgICAgLy8gICAgIG5vbmU6IFsgJ2RpcjQnIF0sXG4gICAgICogICAgIC8vICAgICBkaXJlY3Rvcnk6IFsgJ2RpcjInXVxuICAgICAqICAgICAvLyB9XG4gICAgICogICAgIC8vIHJlc3VsdCBpcyBvYmplY3QgY29udGFpbmluZyB0aGUgZmlsZXMgZ3JvdXBlZCBieSB0eXBlXG4gICAgICogfSkuY2F0Y2goIGVyciA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBhc3luYy9hd2FpdFxuICAgICAqIGFzeW5jICgpID0+IHtcbiAgICAgKiAgICAgdHJ5IHtcbiAgICAgKiAgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBhc3luYy5ncm91cEJ5KGZpbGVzLCBkZXRlY3RGaWxlKTtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XG4gICAgICogICAgICAgICAvLyB7XG4gICAgICogICAgICAgICAvLyAgICAgZmlsZTogWyAnZGlyMS9maWxlMS50eHQnIF0sXG4gICAgICogICAgICAgICAvLyAgICAgbm9uZTogWyAnZGlyNCcgXSxcbiAgICAgKiAgICAgICAgIC8vICAgICBkaXJlY3Rvcnk6IFsgJ2RpcjInXVxuICAgICAqICAgICAgICAgLy8gfVxuICAgICAqICAgICAgICAgLy8gcmVzdWx0IGlzIG9iamVjdCBjb250YWluaW5nIHRoZSBmaWxlcyBncm91cGVkIGJ5IHR5cGVcbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ3JvdXBCeSAoY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBncm91cEJ5TGltaXQkMShjb2xsLCBJbmZpbml0eSwgaXRlcmF0ZWUsIGNhbGxiYWNrKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBzYW1lIGFzIFtgZ3JvdXBCeWBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5ncm91cEJ5fSBidXQgcnVucyBvbmx5IGEgc2luZ2xlIGFzeW5jIG9wZXJhdGlvbiBhdCBhIHRpbWUuXG4gICAgICpcbiAgICAgKiBAbmFtZSBncm91cEJ5U2VyaWVzXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMuZ3JvdXBCeV17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmdyb3VwQnl9XG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfEFzeW5jSXRlcmFibGV8T2JqZWN0fSBjb2xsIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQW4gYXN5bmMgZnVuY3Rpb24gdG8gYXBwbHkgdG8gZWFjaCBpdGVtIGluXG4gICAgICogYGNvbGxgLlxuICAgICAqIFRoZSBpdGVyYXRlZSBzaG91bGQgY29tcGxldGUgd2l0aCBhIGBrZXlgIHRvIGdyb3VwIHRoZSB2YWx1ZSB1bmRlci5cbiAgICAgKiBJbnZva2VkIHdpdGggKHZhbHVlLCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIHdoZW4gYWxsIGBpdGVyYXRlZWBcbiAgICAgKiBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZCwgb3IgYW4gZXJyb3Igb2NjdXJzLiBSZXN1bHQgaXMgYW4gYE9iamVjdGAgd2hvc2VcbiAgICAgKiBwcm9wZXJ0aWVzIGFyZSBhcnJheXMgb2YgdmFsdWVzIHdoaWNoIHJldHVybmVkIHRoZSBjb3JyZXNwb25kaW5nIGtleS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBpcyBwYXNzZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBncm91cEJ5U2VyaWVzIChjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGdyb3VwQnlMaW1pdCQxKGNvbGwsIDEsIGl0ZXJhdGVlLCBjYWxsYmFjaylcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMb2dzIHRoZSByZXN1bHQgb2YgYW4gYGFzeW5jYCBmdW5jdGlvbiB0byB0aGUgYGNvbnNvbGVgLiBPbmx5IHdvcmtzIGluXG4gICAgICogTm9kZS5qcyBvciBpbiBicm93c2VycyB0aGF0IHN1cHBvcnQgYGNvbnNvbGUubG9nYCBhbmQgYGNvbnNvbGUuZXJyb3JgIChzdWNoXG4gICAgICogYXMgRkYgYW5kIENocm9tZSkuIElmIG11bHRpcGxlIGFyZ3VtZW50cyBhcmUgcmV0dXJuZWQgZnJvbSB0aGUgYXN5bmNcbiAgICAgKiBmdW5jdGlvbiwgYGNvbnNvbGUubG9nYCBpcyBjYWxsZWQgb24gZWFjaCBhcmd1bWVudCBpbiBvcmRlci5cbiAgICAgKlxuICAgICAqIEBuYW1lIGxvZ1xuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOlV0aWxzXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBmdW5jdGlvbiAtIFRoZSBmdW5jdGlvbiB5b3Ugd2FudCB0byBldmVudHVhbGx5IGFwcGx5XG4gICAgICogYWxsIGFyZ3VtZW50cyB0by5cbiAgICAgKiBAcGFyYW0gey4uLip9IGFyZ3VtZW50cy4uLiAtIEFueSBudW1iZXIgb2YgYXJndW1lbnRzIHRvIGFwcGx5IHRvIHRoZSBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gaW4gYSBtb2R1bGVcbiAgICAgKiB2YXIgaGVsbG8gPSBmdW5jdGlvbihuYW1lLCBjYWxsYmFjaykge1xuICAgICAqICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ2hlbGxvICcgKyBuYW1lKTtcbiAgICAgKiAgICAgfSwgMTAwMCk7XG4gICAgICogfTtcbiAgICAgKlxuICAgICAqIC8vIGluIHRoZSBub2RlIHJlcGxcbiAgICAgKiBub2RlPiBhc3luYy5sb2coaGVsbG8sICd3b3JsZCcpO1xuICAgICAqICdoZWxsbyB3b3JsZCdcbiAgICAgKi9cbiAgICB2YXIgbG9nID0gY29uc29sZUZ1bmMoJ2xvZycpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNhbWUgYXMgW2BtYXBWYWx1ZXNgXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMubWFwVmFsdWVzfSBidXQgcnVucyBhIG1heGltdW0gb2YgYGxpbWl0YCBhc3luYyBvcGVyYXRpb25zIGF0IGFcbiAgICAgKiB0aW1lLlxuICAgICAqXG4gICAgICogQG5hbWUgbWFwVmFsdWVzTGltaXRcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5tYXBWYWx1ZXNde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5tYXBWYWx1ZXN9XG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbGltaXQgLSBUaGUgbWF4aW11bSBudW1iZXIgb2YgYXN5bmMgb3BlcmF0aW9ucyBhdCBhIHRpbWUuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEEgZnVuY3Rpb24gdG8gYXBwbHkgdG8gZWFjaCB2YWx1ZSBhbmQga2V5XG4gICAgICogaW4gYGNvbGxgLlxuICAgICAqIFRoZSBpdGVyYXRlZSBzaG91bGQgY29tcGxldGUgd2l0aCB0aGUgdHJhbnNmb3JtZWQgdmFsdWUgYXMgaXRzIHJlc3VsdC5cbiAgICAgKiBJbnZva2VkIHdpdGggKHZhbHVlLCBrZXksIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgd2hlbiBhbGwgYGl0ZXJhdGVlYFxuICAgICAqIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLCBvciBhbiBlcnJvciBvY2N1cnMuIGByZXN1bHRgIGlzIGEgbmV3IG9iamVjdCBjb25zaXN0aW5nXG4gICAgICogb2YgZWFjaCBrZXkgZnJvbSBgb2JqYCwgd2l0aCBlYWNoIHRyYW5zZm9ybWVkIHZhbHVlIG9uIHRoZSByaWdodC1oYW5kIHNpZGUuXG4gICAgICogSW52b2tlZCB3aXRoIChlcnIsIHJlc3VsdCkuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgaXMgcGFzc2VkXG4gICAgICovXG4gICAgZnVuY3Rpb24gbWFwVmFsdWVzTGltaXQob2JqLCBsaW1pdCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gb25jZShjYWxsYmFjayk7XG4gICAgICAgIHZhciBuZXdPYmogPSB7fTtcbiAgICAgICAgdmFyIF9pdGVyYXRlZSA9IHdyYXBBc3luYyhpdGVyYXRlZSk7XG4gICAgICAgIHJldHVybiBlYWNoT2ZMaW1pdCQyKGxpbWl0KShvYmosICh2YWwsIGtleSwgbmV4dCkgPT4ge1xuICAgICAgICAgICAgX2l0ZXJhdGVlKHZhbCwga2V5LCAoZXJyLCByZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gbmV4dChlcnIpO1xuICAgICAgICAgICAgICAgIG5ld09ialtrZXldID0gcmVzdWx0O1xuICAgICAgICAgICAgICAgIG5leHQoZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBlcnIgPT4gY2FsbGJhY2soZXJyLCBuZXdPYmopKTtcbiAgICB9XG5cbiAgICB2YXIgbWFwVmFsdWVzTGltaXQkMSA9IGF3YWl0aWZ5KG1hcFZhbHVlc0xpbWl0LCA0KTtcblxuICAgIC8qKlxuICAgICAqIEEgcmVsYXRpdmUgb2YgW2BtYXBgXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMubWFwfSwgZGVzaWduZWQgZm9yIHVzZSB3aXRoIG9iamVjdHMuXG4gICAgICpcbiAgICAgKiBQcm9kdWNlcyBhIG5ldyBPYmplY3QgYnkgbWFwcGluZyBlYWNoIHZhbHVlIG9mIGBvYmpgIHRocm91Z2ggdGhlIGBpdGVyYXRlZWBcbiAgICAgKiBmdW5jdGlvbi4gVGhlIGBpdGVyYXRlZWAgaXMgY2FsbGVkIGVhY2ggYHZhbHVlYCBhbmQgYGtleWAgZnJvbSBgb2JqYCBhbmQgYVxuICAgICAqIGNhbGxiYWNrIGZvciB3aGVuIGl0IGhhcyBmaW5pc2hlZCBwcm9jZXNzaW5nLiBFYWNoIG9mIHRoZXNlIGNhbGxiYWNrcyB0YWtlc1xuICAgICAqIHR3byBhcmd1bWVudHM6IGFuIGBlcnJvcmAsIGFuZCB0aGUgdHJhbnNmb3JtZWQgaXRlbSBmcm9tIGBvYmpgLiBJZiBgaXRlcmF0ZWVgXG4gICAgICogcGFzc2VzIGFuIGVycm9yIHRvIGl0cyBjYWxsYmFjaywgdGhlIG1haW4gYGNhbGxiYWNrYCAoZm9yIHRoZSBgbWFwVmFsdWVzYFxuICAgICAqIGZ1bmN0aW9uKSBpcyBpbW1lZGlhdGVseSBjYWxsZWQgd2l0aCB0aGUgZXJyb3IuXG4gICAgICpcbiAgICAgKiBOb3RlLCB0aGUgb3JkZXIgb2YgdGhlIGtleXMgaW4gdGhlIHJlc3VsdCBpcyBub3QgZ3VhcmFudGVlZC4gIFRoZSBrZXlzIHdpbGxcbiAgICAgKiBiZSByb3VnaGx5IGluIHRoZSBvcmRlciB0aGV5IGNvbXBsZXRlLCAoYnV0IHRoaXMgaXMgdmVyeSBlbmdpbmUtc3BlY2lmaWMpXG4gICAgICpcbiAgICAgKiBAbmFtZSBtYXBWYWx1ZXNcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmogLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggdmFsdWUgYW5kIGtleVxuICAgICAqIGluIGBjb2xsYC5cbiAgICAgKiBUaGUgaXRlcmF0ZWUgc2hvdWxkIGNvbXBsZXRlIHdpdGggdGhlIHRyYW5zZm9ybWVkIHZhbHVlIGFzIGl0cyByZXN1bHQuXG4gICAgICogSW52b2tlZCB3aXRoICh2YWx1ZSwga2V5LCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIHdoZW4gYWxsIGBpdGVyYXRlZWBcbiAgICAgKiBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZCwgb3IgYW4gZXJyb3Igb2NjdXJzLiBgcmVzdWx0YCBpcyBhIG5ldyBvYmplY3QgY29uc2lzdGluZ1xuICAgICAqIG9mIGVhY2gga2V5IGZyb20gYG9iamAsIHdpdGggZWFjaCB0cmFuc2Zvcm1lZCB2YWx1ZSBvbiB0aGUgcmlnaHQtaGFuZCBzaWRlLlxuICAgICAqIEludm9rZWQgd2l0aCAoZXJyLCByZXN1bHQpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIG5vIGNhbGxiYWNrIGlzIHBhc3NlZFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBmaWxlMS50eHQgaXMgYSBmaWxlIHRoYXQgaXMgMTAwMCBieXRlcyBpbiBzaXplXG4gICAgICogLy8gZmlsZTIudHh0IGlzIGEgZmlsZSB0aGF0IGlzIDIwMDAgYnl0ZXMgaW4gc2l6ZVxuICAgICAqIC8vIGZpbGUzLnR4dCBpcyBhIGZpbGUgdGhhdCBpcyAzMDAwIGJ5dGVzIGluIHNpemVcbiAgICAgKiAvLyBmaWxlNC50eHQgZG9lcyBub3QgZXhpc3RcbiAgICAgKlxuICAgICAqIGNvbnN0IGZpbGVNYXAgPSB7XG4gICAgICogICAgIGYxOiAnZmlsZTEudHh0JyxcbiAgICAgKiAgICAgZjI6ICdmaWxlMi50eHQnLFxuICAgICAqICAgICBmMzogJ2ZpbGUzLnR4dCdcbiAgICAgKiB9O1xuICAgICAqXG4gICAgICogY29uc3Qgd2l0aE1pc3NpbmdGaWxlTWFwID0ge1xuICAgICAqICAgICBmMTogJ2ZpbGUxLnR4dCcsXG4gICAgICogICAgIGYyOiAnZmlsZTIudHh0JyxcbiAgICAgKiAgICAgZjM6ICdmaWxlNC50eHQnXG4gICAgICogfTtcbiAgICAgKlxuICAgICAqIC8vIGFzeW5jaHJvbm91cyBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGZpbGUgc2l6ZSBpbiBieXRlc1xuICAgICAqIGZ1bmN0aW9uIGdldEZpbGVTaXplSW5CeXRlcyhmaWxlLCBrZXksIGNhbGxiYWNrKSB7XG4gICAgICogICAgIGZzLnN0YXQoZmlsZSwgZnVuY3Rpb24oZXJyLCBzdGF0KSB7XG4gICAgICogICAgICAgICBpZiAoZXJyKSB7XG4gICAgICogICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICogICAgICAgICB9XG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCBzdGF0LnNpemUpO1xuICAgICAqICAgICB9KTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBjYWxsYmFja3NcbiAgICAgKiBhc3luYy5tYXBWYWx1ZXMoZmlsZU1hcCwgZ2V0RmlsZVNpemVJbkJ5dGVzLCBmdW5jdGlvbihlcnIsIHJlc3VsdCkge1xuICAgICAqICAgICBpZiAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9IGVsc2Uge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgICAgIC8vIHJlc3VsdCBpcyBub3cgYSBtYXAgb2YgZmlsZSBzaXplIGluIGJ5dGVzIGZvciBlYWNoIGZpbGUsIGUuZy5cbiAgICAgKiAgICAgICAgIC8vIHtcbiAgICAgKiAgICAgICAgIC8vICAgICBmMTogMTAwMCxcbiAgICAgKiAgICAgICAgIC8vICAgICBmMjogMjAwMCxcbiAgICAgKiAgICAgICAgIC8vICAgICBmMzogMzAwMFxuICAgICAqICAgICAgICAgLy8gfVxuICAgICAqICAgICB9XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBFcnJvciBoYW5kbGluZ1xuICAgICAqIGFzeW5jLm1hcFZhbHVlcyh3aXRoTWlzc2luZ0ZpbGVNYXAsIGdldEZpbGVTaXplSW5CeXRlcywgZnVuY3Rpb24oZXJyLCByZXN1bHQpIHtcbiAgICAgKiAgICAgaWYgKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgICAgIC8vIFsgRXJyb3I6IEVOT0VOVDogbm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSBdXG4gICAgICogICAgIH0gZWxzZSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICB9XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBQcm9taXNlc1xuICAgICAqIGFzeW5jLm1hcFZhbHVlcyhmaWxlTWFwLCBnZXRGaWxlU2l6ZUluQnl0ZXMpXG4gICAgICogLnRoZW4oIHJlc3VsdCA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XG4gICAgICogICAgIC8vIHJlc3VsdCBpcyBub3cgYSBtYXAgb2YgZmlsZSBzaXplIGluIGJ5dGVzIGZvciBlYWNoIGZpbGUsIGUuZy5cbiAgICAgKiAgICAgLy8ge1xuICAgICAqICAgICAvLyAgICAgZjE6IDEwMDAsXG4gICAgICogICAgIC8vICAgICBmMjogMjAwMCxcbiAgICAgKiAgICAgLy8gICAgIGYzOiAzMDAwXG4gICAgICogICAgIC8vIH1cbiAgICAgKiB9KS5jYXRjaCAoZXJyID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIEVycm9yIEhhbmRsaW5nXG4gICAgICogYXN5bmMubWFwVmFsdWVzKHdpdGhNaXNzaW5nRmlsZU1hcCwgZ2V0RmlsZVNpemVJbkJ5dGVzKVxuICAgICAqIC50aGVuKCByZXN1bHQgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqIH0pLmNhdGNoIChlcnIgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICAvLyBbIEVycm9yOiBFTk9FTlQ6IG5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkgXVxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgYXN5bmMvYXdhaXRcbiAgICAgKiBhc3luYyAoKSA9PiB7XG4gICAgICogICAgIHRyeSB7XG4gICAgICogICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgYXN5bmMubWFwVmFsdWVzKGZpbGVNYXAsIGdldEZpbGVTaXplSW5CeXRlcyk7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAgICAgLy8gcmVzdWx0IGlzIG5vdyBhIG1hcCBvZiBmaWxlIHNpemUgaW4gYnl0ZXMgZm9yIGVhY2ggZmlsZSwgZS5nLlxuICAgICAqICAgICAgICAgLy8ge1xuICAgICAqICAgICAgICAgLy8gICAgIGYxOiAxMDAwLFxuICAgICAqICAgICAgICAgLy8gICAgIGYyOiAyMDAwLFxuICAgICAqICAgICAgICAgLy8gICAgIGYzOiAzMDAwXG4gICAgICogICAgICAgICAvLyB9XG4gICAgICogICAgIH1cbiAgICAgKiAgICAgY2F0Y2ggKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIC8vIEVycm9yIEhhbmRsaW5nXG4gICAgICogYXN5bmMgKCkgPT4ge1xuICAgICAqICAgICB0cnkge1xuICAgICAqICAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IGFzeW5jLm1hcFZhbHVlcyh3aXRoTWlzc2luZ0ZpbGVNYXAsIGdldEZpbGVTaXplSW5CeXRlcyk7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICB9XG4gICAgICogICAgIGNhdGNoIChlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgICAgICAvLyBbIEVycm9yOiBFTk9FTlQ6IG5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkgXVxuICAgICAqICAgICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICovXG4gICAgZnVuY3Rpb24gbWFwVmFsdWVzKG9iaiwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBtYXBWYWx1ZXNMaW1pdCQxKG9iaiwgSW5maW5pdHksIGl0ZXJhdGVlLCBjYWxsYmFjaylcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyBbYG1hcFZhbHVlc2Bde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5tYXBWYWx1ZXN9IGJ1dCBydW5zIG9ubHkgYSBzaW5nbGUgYXN5bmMgb3BlcmF0aW9uIGF0IGEgdGltZS5cbiAgICAgKlxuICAgICAqIEBuYW1lIG1hcFZhbHVlc1Nlcmllc1xuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLm1hcFZhbHVlc117QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLm1hcFZhbHVlc31cbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmogLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggdmFsdWUgYW5kIGtleVxuICAgICAqIGluIGBjb2xsYC5cbiAgICAgKiBUaGUgaXRlcmF0ZWUgc2hvdWxkIGNvbXBsZXRlIHdpdGggdGhlIHRyYW5zZm9ybWVkIHZhbHVlIGFzIGl0cyByZXN1bHQuXG4gICAgICogSW52b2tlZCB3aXRoICh2YWx1ZSwga2V5LCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIHdoZW4gYWxsIGBpdGVyYXRlZWBcbiAgICAgKiBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZCwgb3IgYW4gZXJyb3Igb2NjdXJzLiBgcmVzdWx0YCBpcyBhIG5ldyBvYmplY3QgY29uc2lzdGluZ1xuICAgICAqIG9mIGVhY2gga2V5IGZyb20gYG9iamAsIHdpdGggZWFjaCB0cmFuc2Zvcm1lZCB2YWx1ZSBvbiB0aGUgcmlnaHQtaGFuZCBzaWRlLlxuICAgICAqIEludm9rZWQgd2l0aCAoZXJyLCByZXN1bHQpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIG5vIGNhbGxiYWNrIGlzIHBhc3NlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1hcFZhbHVlc1NlcmllcyhvYmosIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gbWFwVmFsdWVzTGltaXQkMShvYmosIDEsIGl0ZXJhdGVlLCBjYWxsYmFjaylcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWNoZXMgdGhlIHJlc3VsdHMgb2YgYW4gYXN5bmMgZnVuY3Rpb24uIFdoZW4gY3JlYXRpbmcgYSBoYXNoIHRvIHN0b3JlXG4gICAgICogZnVuY3Rpb24gcmVzdWx0cyBhZ2FpbnN0LCB0aGUgY2FsbGJhY2sgaXMgb21pdHRlZCBmcm9tIHRoZSBoYXNoIGFuZCBhblxuICAgICAqIG9wdGlvbmFsIGhhc2ggZnVuY3Rpb24gY2FuIGJlIHVzZWQuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6IGlmIHRoZSBhc3luYyBmdW5jdGlvbiBlcnJzLCB0aGUgcmVzdWx0IHdpbGwgbm90IGJlIGNhY2hlZCBhbmRcbiAgICAgKiBzdWJzZXF1ZW50IGNhbGxzIHdpbGwgY2FsbCB0aGUgd3JhcHBlZCBmdW5jdGlvbi4qKlxuICAgICAqXG4gICAgICogSWYgbm8gaGFzaCBmdW5jdGlvbiBpcyBzcGVjaWZpZWQsIHRoZSBmaXJzdCBhcmd1bWVudCBpcyB1c2VkIGFzIGEgaGFzaCBrZXksXG4gICAgICogd2hpY2ggbWF5IHdvcmsgcmVhc29uYWJseSBpZiBpdCBpcyBhIHN0cmluZyBvciBhIGRhdGEgdHlwZSB0aGF0IGNvbnZlcnRzIHRvIGFcbiAgICAgKiBkaXN0aW5jdCBzdHJpbmcuIE5vdGUgdGhhdCBvYmplY3RzIGFuZCBhcnJheXMgd2lsbCBub3QgYmVoYXZlIHJlYXNvbmFibHkuXG4gICAgICogTmVpdGhlciB3aWxsIGNhc2VzIHdoZXJlIHRoZSBvdGhlciBhcmd1bWVudHMgYXJlIHNpZ25pZmljYW50LiBJbiBzdWNoIGNhc2VzLFxuICAgICAqIHNwZWNpZnkgeW91ciBvd24gaGFzaCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIFRoZSBjYWNoZSBvZiByZXN1bHRzIGlzIGV4cG9zZWQgYXMgdGhlIGBtZW1vYCBwcm9wZXJ0eSBvZiB0aGUgZnVuY3Rpb25cbiAgICAgKiByZXR1cm5lZCBieSBgbWVtb2l6ZWAuXG4gICAgICpcbiAgICAgKiBAbmFtZSBtZW1vaXplXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6VXRpbHNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGZuIC0gVGhlIGFzeW5jIGZ1bmN0aW9uIHRvIHByb3h5IGFuZCBjYWNoZSByZXN1bHRzIGZyb20uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaGFzaGVyIC0gQW4gb3B0aW9uYWwgZnVuY3Rpb24gZm9yIGdlbmVyYXRpbmcgYSBjdXN0b20gaGFzaFxuICAgICAqIGZvciBzdG9yaW5nIHJlc3VsdHMuIEl0IGhhcyBhbGwgdGhlIGFyZ3VtZW50cyBhcHBsaWVkIHRvIGl0IGFwYXJ0IGZyb20gdGhlXG4gICAgICogY2FsbGJhY2ssIGFuZCBtdXN0IGJlIHN5bmNocm9ub3VzLlxuICAgICAqIEByZXR1cm5zIHtBc3luY0Z1bmN0aW9ufSBhIG1lbW9pemVkIHZlcnNpb24gb2YgYGZuYFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgc2xvd19mbiA9IGZ1bmN0aW9uKG5hbWUsIGNhbGxiYWNrKSB7XG4gICAgICogICAgIC8vIGRvIHNvbWV0aGluZ1xuICAgICAqICAgICBjYWxsYmFjayhudWxsLCByZXN1bHQpO1xuICAgICAqIH07XG4gICAgICogdmFyIGZuID0gYXN5bmMubWVtb2l6ZShzbG93X2ZuKTtcbiAgICAgKlxuICAgICAqIC8vIGZuIGNhbiBub3cgYmUgdXNlZCBhcyBpZiBpdCB3ZXJlIHNsb3dfZm5cbiAgICAgKiBmbignc29tZSBuYW1lJywgZnVuY3Rpb24oKSB7XG4gICAgICogICAgIC8vIGNhbGxiYWNrXG4gICAgICogfSk7XG4gICAgICovXG4gICAgZnVuY3Rpb24gbWVtb2l6ZShmbiwgaGFzaGVyID0gdiA9PiB2KSB7XG4gICAgICAgIHZhciBtZW1vID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgdmFyIHF1ZXVlcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIHZhciBfZm4gPSB3cmFwQXN5bmMoZm4pO1xuICAgICAgICB2YXIgbWVtb2l6ZWQgPSBpbml0aWFsUGFyYW1zKChhcmdzLCBjYWxsYmFjaykgPT4ge1xuICAgICAgICAgICAgdmFyIGtleSA9IGhhc2hlciguLi5hcmdzKTtcbiAgICAgICAgICAgIGlmIChrZXkgaW4gbWVtbykge1xuICAgICAgICAgICAgICAgIHNldEltbWVkaWF0ZSQxKCgpID0+IGNhbGxiYWNrKG51bGwsIC4uLm1lbW9ba2V5XSkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChrZXkgaW4gcXVldWVzKSB7XG4gICAgICAgICAgICAgICAgcXVldWVzW2tleV0ucHVzaChjYWxsYmFjayk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldID0gW2NhbGxiYWNrXTtcbiAgICAgICAgICAgICAgICBfZm4oLi4uYXJncywgKGVyciwgLi4ucmVzdWx0QXJncykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyAjMTQ2NSBkb24ndCBtZW1vaXplIGlmIGFuIGVycm9yIG9jY3VycmVkXG4gICAgICAgICAgICAgICAgICAgIGlmICghZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZW1vW2tleV0gPSByZXN1bHRBcmdzO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHZhciBxID0gcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBxdWV1ZXNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBxLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcVtpXShlcnIsIC4uLnJlc3VsdEFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBtZW1vaXplZC5tZW1vID0gbWVtbztcbiAgICAgICAgbWVtb2l6ZWQudW5tZW1vaXplZCA9IGZuO1xuICAgICAgICByZXR1cm4gbWVtb2l6ZWQ7XG4gICAgfVxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGZpbGUgKi9cblxuICAgIC8qKlxuICAgICAqIENhbGxzIGBjYWxsYmFja2Agb24gYSBsYXRlciBsb29wIGFyb3VuZCB0aGUgZXZlbnQgbG9vcC4gSW4gTm9kZS5qcyB0aGlzIGp1c3RcbiAgICAgKiBjYWxscyBgcHJvY2Vzcy5uZXh0VGlja2AuICBJbiB0aGUgYnJvd3NlciBpdCB3aWxsIHVzZSBgc2V0SW1tZWRpYXRlYCBpZlxuICAgICAqIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGBzZXRUaW1lb3V0KGNhbGxiYWNrLCAwKWAsIHdoaWNoIG1lYW5zIG90aGVyIGhpZ2hlclxuICAgICAqIHByaW9yaXR5IGV2ZW50cyBtYXkgcHJlY2VkZSB0aGUgZXhlY3V0aW9uIG9mIGBjYWxsYmFja2AuXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIHVzZWQgaW50ZXJuYWxseSBmb3IgYnJvd3Nlci1jb21wYXRpYmlsaXR5IHB1cnBvc2VzLlxuICAgICAqXG4gICAgICogQG5hbWUgbmV4dFRpY2tcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpVdGlsc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5zZXRJbW1lZGlhdGVde0BsaW5rIG1vZHVsZTpVdGlscy5zZXRJbW1lZGlhdGV9XG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAtIFRoZSBmdW5jdGlvbiB0byBjYWxsIG9uIGEgbGF0ZXIgbG9vcCBhcm91bmRcbiAgICAgKiB0aGUgZXZlbnQgbG9vcC4gSW52b2tlZCB3aXRoIChhcmdzLi4uKS5cbiAgICAgKiBAcGFyYW0gey4uLip9IGFyZ3MuLi4gLSBhbnkgbnVtYmVyIG9mIGFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlXG4gICAgICogY2FsbGJhY2sgb24gdGhlIG5leHQgdGljay5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGNhbGxfb3JkZXIgPSBbXTtcbiAgICAgKiBhc3luYy5uZXh0VGljayhmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgY2FsbF9vcmRlci5wdXNoKCd0d28nKTtcbiAgICAgKiAgICAgLy8gY2FsbF9vcmRlciBub3cgZXF1YWxzIFsnb25lJywndHdvJ11cbiAgICAgKiB9KTtcbiAgICAgKiBjYWxsX29yZGVyLnB1c2goJ29uZScpO1xuICAgICAqXG4gICAgICogYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICogICAgIC8vIGEsIGIsIGFuZCBjIGVxdWFsIDEsIDIsIGFuZCAzXG4gICAgICogfSwgMSwgMiwgMyk7XG4gICAgICovXG4gICAgdmFyIF9kZWZlcjtcblxuICAgIGlmIChoYXNOZXh0VGljaykge1xuICAgICAgICBfZGVmZXIgPSBwcm9jZXNzLm5leHRUaWNrO1xuICAgIH0gZWxzZSBpZiAoaGFzU2V0SW1tZWRpYXRlKSB7XG4gICAgICAgIF9kZWZlciA9IHNldEltbWVkaWF0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBfZGVmZXIgPSBmYWxsYmFjaztcbiAgICB9XG5cbiAgICB2YXIgbmV4dFRpY2sgPSB3cmFwKF9kZWZlcik7XG5cbiAgICB2YXIgX3BhcmFsbGVsID0gYXdhaXRpZnkoKGVhY2hmbiwgdGFza3MsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIHZhciByZXN1bHRzID0gaXNBcnJheUxpa2UodGFza3MpID8gW10gOiB7fTtcblxuICAgICAgICBlYWNoZm4odGFza3MsICh0YXNrLCBrZXksIHRhc2tDYikgPT4ge1xuICAgICAgICAgICAgd3JhcEFzeW5jKHRhc2spKChlcnIsIC4uLnJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQubGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgICAgICAgICBbcmVzdWx0XSA9IHJlc3VsdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzdWx0c1trZXldID0gcmVzdWx0O1xuICAgICAgICAgICAgICAgIHRhc2tDYihlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGVyciA9PiBjYWxsYmFjayhlcnIsIHJlc3VsdHMpKTtcbiAgICB9LCAzKTtcblxuICAgIC8qKlxuICAgICAqIFJ1biB0aGUgYHRhc2tzYCBjb2xsZWN0aW9uIG9mIGZ1bmN0aW9ucyBpbiBwYXJhbGxlbCwgd2l0aG91dCB3YWl0aW5nIHVudGlsXG4gICAgICogdGhlIHByZXZpb3VzIGZ1bmN0aW9uIGhhcyBjb21wbGV0ZWQuIElmIGFueSBvZiB0aGUgZnVuY3Rpb25zIHBhc3MgYW4gZXJyb3IgdG9cbiAgICAgKiBpdHMgY2FsbGJhY2ssIHRoZSBtYWluIGBjYWxsYmFja2AgaXMgaW1tZWRpYXRlbHkgY2FsbGVkIHdpdGggdGhlIHZhbHVlIG9mIHRoZVxuICAgICAqIGVycm9yLiBPbmNlIHRoZSBgdGFza3NgIGhhdmUgY29tcGxldGVkLCB0aGUgcmVzdWx0cyBhcmUgcGFzc2VkIHRvIHRoZSBmaW5hbFxuICAgICAqIGBjYWxsYmFja2AgYXMgYW4gYXJyYXkuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogYHBhcmFsbGVsYCBpcyBhYm91dCBraWNraW5nLW9mZiBJL08gdGFza3MgaW4gcGFyYWxsZWwsIG5vdCBhYm91dFxuICAgICAqIHBhcmFsbGVsIGV4ZWN1dGlvbiBvZiBjb2RlLiAgSWYgeW91ciB0YXNrcyBkbyBub3QgdXNlIGFueSB0aW1lcnMgb3IgcGVyZm9ybVxuICAgICAqIGFueSBJL08sIHRoZXkgd2lsbCBhY3R1YWxseSBiZSBleGVjdXRlZCBpbiBzZXJpZXMuICBBbnkgc3luY2hyb25vdXMgc2V0dXBcbiAgICAgKiBzZWN0aW9ucyBmb3IgZWFjaCB0YXNrIHdpbGwgaGFwcGVuIG9uZSBhZnRlciB0aGUgb3RoZXIuICBKYXZhU2NyaXB0IHJlbWFpbnNcbiAgICAgKiBzaW5nbGUtdGhyZWFkZWQuXG4gICAgICpcbiAgICAgKiAqKkhpbnQ6KiogVXNlIFtgcmVmbGVjdGBde0BsaW5rIG1vZHVsZTpVdGlscy5yZWZsZWN0fSB0byBjb250aW51ZSB0aGVcbiAgICAgKiBleGVjdXRpb24gb2Ygb3RoZXIgdGFza3Mgd2hlbiBhIHRhc2sgZmFpbHMuXG4gICAgICpcbiAgICAgKiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHVzZSBhbiBvYmplY3QgaW5zdGVhZCBvZiBhbiBhcnJheS4gRWFjaCBwcm9wZXJ0eSB3aWxsXG4gICAgICogYmUgcnVuIGFzIGEgZnVuY3Rpb24gYW5kIHRoZSByZXN1bHRzIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBmaW5hbCBgY2FsbGJhY2tgXG4gICAgICogYXMgYW4gb2JqZWN0IGluc3RlYWQgb2YgYW4gYXJyYXkuIFRoaXMgY2FuIGJlIGEgbW9yZSByZWFkYWJsZSB3YXkgb2YgaGFuZGxpbmdcbiAgICAgKiByZXN1bHRzIGZyb20ge0BsaW5rIGFzeW5jLnBhcmFsbGVsfS5cbiAgICAgKlxuICAgICAqIEBuYW1lIHBhcmFsbGVsXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGNhdGVnb3J5IENvbnRyb2wgRmxvd1xuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IHRhc2tzIC0gQSBjb2xsZWN0aW9uIG9mXG4gICAgICogW2FzeW5jIGZ1bmN0aW9uc117QGxpbmsgQXN5bmNGdW5jdGlvbn0gdG8gcnVuLlxuICAgICAqIEVhY2ggYXN5bmMgZnVuY3Rpb24gY2FuIGNvbXBsZXRlIHdpdGggYW55IG51bWJlciBvZiBvcHRpb25hbCBgcmVzdWx0YCB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEFuIG9wdGlvbmFsIGNhbGxiYWNrIHRvIHJ1biBvbmNlIGFsbCB0aGVcbiAgICAgKiBmdW5jdGlvbnMgaGF2ZSBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LiBUaGlzIGZ1bmN0aW9uIGdldHMgYSByZXN1bHRzIGFycmF5XG4gICAgICogKG9yIG9iamVjdCkgY29udGFpbmluZyBhbGwgdGhlIHJlc3VsdCBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSB0YXNrIGNhbGxiYWNrcy5cbiAgICAgKiBJbnZva2VkIHdpdGggKGVyciwgcmVzdWx0cykuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgYSBjYWxsYmFjayBpcyBub3QgcGFzc2VkXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy9Vc2luZyBDYWxsYmFja3NcbiAgICAgKiBhc3luYy5wYXJhbGxlbChbXG4gICAgICogICAgIGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsICdvbmUnKTtcbiAgICAgKiAgICAgICAgIH0sIDIwMCk7XG4gICAgICogICAgIH0sXG4gICAgICogICAgIGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsICd0d28nKTtcbiAgICAgKiAgICAgICAgIH0sIDEwMCk7XG4gICAgICogICAgIH1cbiAgICAgKiBdLCBmdW5jdGlvbihlcnIsIHJlc3VsdHMpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgIC8vIHJlc3VsdHMgaXMgZXF1YWwgdG8gWydvbmUnLCd0d28nXSBldmVuIHRob3VnaFxuICAgICAqICAgICAvLyB0aGUgc2Vjb25kIGZ1bmN0aW9uIGhhZCBhIHNob3J0ZXIgdGltZW91dC5cbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIGFuIGV4YW1wbGUgdXNpbmcgYW4gb2JqZWN0IGluc3RlYWQgb2YgYW4gYXJyYXlcbiAgICAgKiBhc3luYy5wYXJhbGxlbCh7XG4gICAgICogICAgIG9uZTogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICogICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgMSk7XG4gICAgICogICAgICAgICB9LCAyMDApO1xuICAgICAqICAgICB9LFxuICAgICAqICAgICB0d286IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIDIpO1xuICAgICAqICAgICAgICAgfSwgMTAwKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH0sIGZ1bmN0aW9uKGVyciwgcmVzdWx0cykge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiAgICAgLy8gcmVzdWx0cyBpcyBlcXVhbCB0bzogeyBvbmU6IDEsIHR3bzogMiB9XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvL1VzaW5nIFByb21pc2VzXG4gICAgICogYXN5bmMucGFyYWxsZWwoW1xuICAgICAqICAgICBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCAnb25lJyk7XG4gICAgICogICAgICAgICB9LCAyMDApO1xuICAgICAqICAgICB9LFxuICAgICAqICAgICBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCAndHdvJyk7XG4gICAgICogICAgICAgICB9LCAxMDApO1xuICAgICAqICAgICB9XG4gICAgICogXSkudGhlbihyZXN1bHRzID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgIC8vIHJlc3VsdHMgaXMgZXF1YWwgdG8gWydvbmUnLCd0d28nXSBldmVuIHRob3VnaFxuICAgICAqICAgICAvLyB0aGUgc2Vjb25kIGZ1bmN0aW9uIGhhZCBhIHNob3J0ZXIgdGltZW91dC5cbiAgICAgKiB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gYW4gZXhhbXBsZSB1c2luZyBhbiBvYmplY3QgaW5zdGVhZCBvZiBhbiBhcnJheVxuICAgICAqIGFzeW5jLnBhcmFsbGVsKHtcbiAgICAgKiAgICAgb25lOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCAxKTtcbiAgICAgKiAgICAgICAgIH0sIDIwMCk7XG4gICAgICogICAgIH0sXG4gICAgICogICAgIHR3bzogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICogICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgMik7XG4gICAgICogICAgICAgICB9LCAxMDApO1xuICAgICAqICAgICB9XG4gICAgICogfSkudGhlbihyZXN1bHRzID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgIC8vIHJlc3VsdHMgaXMgZXF1YWwgdG86IHsgb25lOiAxLCB0d286IDIgfVxuICAgICAqIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvL1VzaW5nIGFzeW5jL2F3YWl0XG4gICAgICogYXN5bmMgKCkgPT4ge1xuICAgICAqICAgICB0cnkge1xuICAgICAqICAgICAgICAgbGV0IHJlc3VsdHMgPSBhd2FpdCBhc3luYy5wYXJhbGxlbChbXG4gICAgICogICAgICAgICAgICAgZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsICdvbmUnKTtcbiAgICAgKiAgICAgICAgICAgICAgICAgfSwgMjAwKTtcbiAgICAgKiAgICAgICAgICAgICB9LFxuICAgICAqICAgICAgICAgICAgIGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICogICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCAndHdvJyk7XG4gICAgICogICAgICAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgICogICAgICAgICAgICAgfVxuICAgICAqICAgICAgICAgXSk7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiAgICAgICAgIC8vIHJlc3VsdHMgaXMgZXF1YWwgdG8gWydvbmUnLCd0d28nXSBldmVuIHRob3VnaFxuICAgICAqICAgICAgICAgLy8gdGhlIHNlY29uZCBmdW5jdGlvbiBoYWQgYSBzaG9ydGVyIHRpbWVvdXQuXG4gICAgICogICAgIH1cbiAgICAgKiAgICAgY2F0Y2ggKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIC8vIGFuIGV4YW1wbGUgdXNpbmcgYW4gb2JqZWN0IGluc3RlYWQgb2YgYW4gYXJyYXlcbiAgICAgKiBhc3luYyAoKSA9PiB7XG4gICAgICogICAgIHRyeSB7XG4gICAgICogICAgICAgICBsZXQgcmVzdWx0cyA9IGF3YWl0IGFzeW5jLnBhcmFsbGVsKHtcbiAgICAgKiAgICAgICAgICAgICBvbmU6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICogICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCAxKTtcbiAgICAgKiAgICAgICAgICAgICAgICAgfSwgMjAwKTtcbiAgICAgKiAgICAgICAgICAgICB9LFxuICAgICAqICAgICAgICAgICAgdHdvOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgMik7XG4gICAgICogICAgICAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgICogICAgICAgICAgICB9XG4gICAgICogICAgICAgICB9KTtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgICAgICAgLy8gcmVzdWx0cyBpcyBlcXVhbCB0bzogeyBvbmU6IDEsIHR3bzogMiB9XG4gICAgICogICAgIH1cbiAgICAgKiAgICAgY2F0Y2ggKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHBhcmFsbGVsKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX3BhcmFsbGVsKGVhY2hPZiQxLCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBzYW1lIGFzIFtgcGFyYWxsZWxgXXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cucGFyYWxsZWx9IGJ1dCBydW5zIGEgbWF4aW11bSBvZiBgbGltaXRgIGFzeW5jIG9wZXJhdGlvbnMgYXQgYVxuICAgICAqIHRpbWUuXG4gICAgICpcbiAgICAgKiBAbmFtZSBwYXJhbGxlbExpbWl0XG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMucGFyYWxsZWxde0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy5wYXJhbGxlbH1cbiAgICAgKiBAY2F0ZWdvcnkgQ29udHJvbCBGbG93XG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gdGFza3MgLSBBIGNvbGxlY3Rpb24gb2ZcbiAgICAgKiBbYXN5bmMgZnVuY3Rpb25zXXtAbGluayBBc3luY0Z1bmN0aW9ufSB0byBydW4uXG4gICAgICogRWFjaCBhc3luYyBmdW5jdGlvbiBjYW4gY29tcGxldGUgd2l0aCBhbnkgbnVtYmVyIG9mIG9wdGlvbmFsIGByZXN1bHRgIHZhbHVlcy5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbGltaXQgLSBUaGUgbWF4aW11bSBudW1iZXIgb2YgYXN5bmMgb3BlcmF0aW9ucyBhdCBhIHRpbWUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEFuIG9wdGlvbmFsIGNhbGxiYWNrIHRvIHJ1biBvbmNlIGFsbCB0aGVcbiAgICAgKiBmdW5jdGlvbnMgaGF2ZSBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LiBUaGlzIGZ1bmN0aW9uIGdldHMgYSByZXN1bHRzIGFycmF5XG4gICAgICogKG9yIG9iamVjdCkgY29udGFpbmluZyBhbGwgdGhlIHJlc3VsdCBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSB0YXNrIGNhbGxiYWNrcy5cbiAgICAgKiBJbnZva2VkIHdpdGggKGVyciwgcmVzdWx0cykuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgYSBjYWxsYmFjayBpcyBub3QgcGFzc2VkXG4gICAgICovXG4gICAgZnVuY3Rpb24gcGFyYWxsZWxMaW1pdCh0YXNrcywgbGltaXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBfcGFyYWxsZWwoZWFjaE9mTGltaXQkMihsaW1pdCksIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSBxdWV1ZSBvZiB0YXNrcyBmb3IgdGhlIHdvcmtlciBmdW5jdGlvbiB0byBjb21wbGV0ZS5cbiAgICAgKiBAdHlwZWRlZiB7SXRlcmFibGV9IFF1ZXVlT2JqZWN0XG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb250cm9sRmxvd1xuICAgICAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IGxlbmd0aCAtIGEgZnVuY3Rpb24gcmV0dXJuaW5nIHRoZSBudW1iZXIgb2YgaXRlbXNcbiAgICAgKiB3YWl0aW5nIHRvIGJlIHByb2Nlc3NlZC4gSW52b2tlIHdpdGggYHF1ZXVlLmxlbmd0aCgpYC5cbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IHN0YXJ0ZWQgLSBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCBhbnlcbiAgICAgKiBpdGVtcyBoYXZlIGJlZW4gcHVzaGVkIGFuZCBwcm9jZXNzZWQgYnkgdGhlIHF1ZXVlLlxuICAgICAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IHJ1bm5pbmcgLSBhIGZ1bmN0aW9uIHJldHVybmluZyB0aGUgbnVtYmVyIG9mIGl0ZW1zXG4gICAgICogY3VycmVudGx5IGJlaW5nIHByb2Nlc3NlZC4gSW52b2tlIHdpdGggYHF1ZXVlLnJ1bm5pbmcoKWAuXG4gICAgICogQHByb3BlcnR5IHtGdW5jdGlvbn0gd29ya2Vyc0xpc3QgLSBhIGZ1bmN0aW9uIHJldHVybmluZyB0aGUgYXJyYXkgb2YgaXRlbXNcbiAgICAgKiBjdXJyZW50bHkgYmVpbmcgcHJvY2Vzc2VkLiBJbnZva2Ugd2l0aCBgcXVldWUud29ya2Vyc0xpc3QoKWAuXG4gICAgICogQHByb3BlcnR5IHtGdW5jdGlvbn0gaWRsZSAtIGEgZnVuY3Rpb24gcmV0dXJuaW5nIGZhbHNlIGlmIHRoZXJlIGFyZSBpdGVtc1xuICAgICAqIHdhaXRpbmcgb3IgYmVpbmcgcHJvY2Vzc2VkLCBvciB0cnVlIGlmIG5vdC4gSW52b2tlIHdpdGggYHF1ZXVlLmlkbGUoKWAuXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IGNvbmN1cnJlbmN5IC0gYW4gaW50ZWdlciBmb3IgZGV0ZXJtaW5pbmcgaG93IG1hbnkgYHdvcmtlcmBcbiAgICAgKiBmdW5jdGlvbnMgc2hvdWxkIGJlIHJ1biBpbiBwYXJhbGxlbC4gVGhpcyBwcm9wZXJ0eSBjYW4gYmUgY2hhbmdlZCBhZnRlciBhXG4gICAgICogYHF1ZXVlYCBpcyBjcmVhdGVkIHRvIGFsdGVyIHRoZSBjb25jdXJyZW5jeSBvbi10aGUtZmx5LlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBwYXlsb2FkIC0gYW4gaW50ZWdlciB0aGF0IHNwZWNpZmllcyBob3cgbWFueSBpdGVtcyBhcmVcbiAgICAgKiBwYXNzZWQgdG8gdGhlIHdvcmtlciBmdW5jdGlvbiBhdCBhIHRpbWUuIG9ubHkgYXBwbGllcyBpZiB0aGlzIGlzIGFcbiAgICAgKiBbY2FyZ29de0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy5jYXJnb30gb2JqZWN0XG4gICAgICogQHByb3BlcnR5IHtBc3luY0Z1bmN0aW9ufSBwdXNoIC0gYWRkIGEgbmV3IHRhc2sgdG8gdGhlIGBxdWV1ZWAuIENhbGxzIGBjYWxsYmFja2BcbiAgICAgKiBvbmNlIHRoZSBgd29ya2VyYCBoYXMgZmluaXNoZWQgcHJvY2Vzc2luZyB0aGUgdGFzay4gSW5zdGVhZCBvZiBhIHNpbmdsZSB0YXNrLFxuICAgICAqIGEgYHRhc2tzYCBhcnJheSBjYW4gYmUgc3VibWl0dGVkLiBUaGUgcmVzcGVjdGl2ZSBjYWxsYmFjayBpcyB1c2VkIGZvciBldmVyeVxuICAgICAqIHRhc2sgaW4gdGhlIGxpc3QuIEludm9rZSB3aXRoIGBxdWV1ZS5wdXNoKHRhc2ssIFtjYWxsYmFja10pYCxcbiAgICAgKiBAcHJvcGVydHkge0FzeW5jRnVuY3Rpb259IHVuc2hpZnQgLSBhZGQgYSBuZXcgdGFzayB0byB0aGUgZnJvbnQgb2YgdGhlIGBxdWV1ZWAuXG4gICAgICogSW52b2tlIHdpdGggYHF1ZXVlLnVuc2hpZnQodGFzaywgW2NhbGxiYWNrXSlgLlxuICAgICAqIEBwcm9wZXJ0eSB7QXN5bmNGdW5jdGlvbn0gcHVzaEFzeW5jIC0gdGhlIHNhbWUgYXMgYHEucHVzaGAsIGV4Y2VwdCB0aGlzIHJldHVybnNcbiAgICAgKiBhIHByb21pc2UgdGhhdCByZWplY3RzIGlmIGFuIGVycm9yIG9jY3Vycy5cbiAgICAgKiBAcHJvcGVydHkge0FzeW5jRnVuY3Rpb259IHVuc2hpZnRBc3luYyAtIHRoZSBzYW1lIGFzIGBxLnVuc2hpZnRgLCBleGNlcHQgdGhpcyByZXR1cm5zXG4gICAgICogYSBwcm9taXNlIHRoYXQgcmVqZWN0cyBpZiBhbiBlcnJvciBvY2N1cnMuXG4gICAgICogQHByb3BlcnR5IHtGdW5jdGlvbn0gcmVtb3ZlIC0gcmVtb3ZlIGl0ZW1zIGZyb20gdGhlIHF1ZXVlIHRoYXQgbWF0Y2ggYSB0ZXN0XG4gICAgICogZnVuY3Rpb24uICBUaGUgdGVzdCBmdW5jdGlvbiB3aWxsIGJlIHBhc3NlZCBhbiBvYmplY3Qgd2l0aCBhIGBkYXRhYCBwcm9wZXJ0eSxcbiAgICAgKiBhbmQgYSBgcHJpb3JpdHlgIHByb3BlcnR5LCBpZiB0aGlzIGlzIGFcbiAgICAgKiBbcHJpb3JpdHlRdWV1ZV17QGxpbmsgbW9kdWxlOkNvbnRyb2xGbG93LnByaW9yaXR5UXVldWV9IG9iamVjdC5cbiAgICAgKiBJbnZva2VkIHdpdGggYHF1ZXVlLnJlbW92ZSh0ZXN0Rm4pYCwgd2hlcmUgYHRlc3RGbmAgaXMgb2YgdGhlIGZvcm1cbiAgICAgKiBgZnVuY3Rpb24gKHtkYXRhLCBwcmlvcml0eX0pIHt9YCBhbmQgcmV0dXJucyBhIEJvb2xlYW4uXG4gICAgICogQHByb3BlcnR5IHtGdW5jdGlvbn0gc2F0dXJhdGVkIC0gYSBmdW5jdGlvbiB0aGF0IHNldHMgYSBjYWxsYmFjayB0aGF0IGlzXG4gICAgICogY2FsbGVkIHdoZW4gdGhlIG51bWJlciBvZiBydW5uaW5nIHdvcmtlcnMgaGl0cyB0aGUgYGNvbmN1cnJlbmN5YCBsaW1pdCwgYW5kXG4gICAgICogZnVydGhlciB0YXNrcyB3aWxsIGJlIHF1ZXVlZC4gIElmIHRoZSBjYWxsYmFjayBpcyBvbWl0dGVkLCBgcS5zYXR1cmF0ZWQoKWBcbiAgICAgKiByZXR1cm5zIGEgcHJvbWlzZSBmb3IgdGhlIG5leHQgb2NjdXJyZW5jZS5cbiAgICAgKiBAcHJvcGVydHkge0Z1bmN0aW9ufSB1bnNhdHVyYXRlZCAtIGEgZnVuY3Rpb24gdGhhdCBzZXRzIGEgY2FsbGJhY2sgdGhhdCBpc1xuICAgICAqIGNhbGxlZCB3aGVuIHRoZSBudW1iZXIgb2YgcnVubmluZyB3b3JrZXJzIGlzIGxlc3MgdGhhbiB0aGUgYGNvbmN1cnJlbmN5YCAmXG4gICAgICogYGJ1ZmZlcmAgbGltaXRzLCBhbmQgZnVydGhlciB0YXNrcyB3aWxsIG5vdCBiZSBxdWV1ZWQuIElmIHRoZSBjYWxsYmFjayBpc1xuICAgICAqIG9taXR0ZWQsIGBxLnVuc2F0dXJhdGVkKClgIHJldHVybnMgYSBwcm9taXNlIGZvciB0aGUgbmV4dCBvY2N1cnJlbmNlLlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBidWZmZXIgLSBBIG1pbmltdW0gdGhyZXNob2xkIGJ1ZmZlciBpbiBvcmRlciB0byBzYXkgdGhhdFxuICAgICAqIHRoZSBgcXVldWVgIGlzIGB1bnNhdHVyYXRlZGAuXG4gICAgICogQHByb3BlcnR5IHtGdW5jdGlvbn0gZW1wdHkgLSBhIGZ1bmN0aW9uIHRoYXQgc2V0cyBhIGNhbGxiYWNrIHRoYXQgaXMgY2FsbGVkXG4gICAgICogd2hlbiB0aGUgbGFzdCBpdGVtIGZyb20gdGhlIGBxdWV1ZWAgaXMgZ2l2ZW4gdG8gYSBgd29ya2VyYC4gSWYgdGhlIGNhbGxiYWNrXG4gICAgICogaXMgb21pdHRlZCwgYHEuZW1wdHkoKWAgcmV0dXJucyBhIHByb21pc2UgZm9yIHRoZSBuZXh0IG9jY3VycmVuY2UuXG4gICAgICogQHByb3BlcnR5IHtGdW5jdGlvbn0gZHJhaW4gLSBhIGZ1bmN0aW9uIHRoYXQgc2V0cyBhIGNhbGxiYWNrIHRoYXQgaXMgY2FsbGVkXG4gICAgICogd2hlbiB0aGUgbGFzdCBpdGVtIGZyb20gdGhlIGBxdWV1ZWAgaGFzIHJldHVybmVkIGZyb20gdGhlIGB3b3JrZXJgLiBJZiB0aGVcbiAgICAgKiBjYWxsYmFjayBpcyBvbWl0dGVkLCBgcS5kcmFpbigpYCByZXR1cm5zIGEgcHJvbWlzZSBmb3IgdGhlIG5leHQgb2NjdXJyZW5jZS5cbiAgICAgKiBAcHJvcGVydHkge0Z1bmN0aW9ufSBlcnJvciAtIGEgZnVuY3Rpb24gdGhhdCBzZXRzIGEgY2FsbGJhY2sgdGhhdCBpcyBjYWxsZWRcbiAgICAgKiB3aGVuIGEgdGFzayBlcnJvcnMuIEhhcyB0aGUgc2lnbmF0dXJlIGBmdW5jdGlvbihlcnJvciwgdGFzaylgLiBJZiB0aGVcbiAgICAgKiBjYWxsYmFjayBpcyBvbWl0dGVkLCBgZXJyb3IoKWAgcmV0dXJucyBhIHByb21pc2UgdGhhdCByZWplY3RzIG9uIHRoZSBuZXh0XG4gICAgICogZXJyb3IuXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBwYXVzZWQgLSBhIGJvb2xlYW4gZm9yIGRldGVybWluaW5nIHdoZXRoZXIgdGhlIHF1ZXVlIGlzXG4gICAgICogaW4gYSBwYXVzZWQgc3RhdGUuXG4gICAgICogQHByb3BlcnR5IHtGdW5jdGlvbn0gcGF1c2UgLSBhIGZ1bmN0aW9uIHRoYXQgcGF1c2VzIHRoZSBwcm9jZXNzaW5nIG9mIHRhc2tzXG4gICAgICogdW50aWwgYHJlc3VtZSgpYCBpcyBjYWxsZWQuIEludm9rZSB3aXRoIGBxdWV1ZS5wYXVzZSgpYC5cbiAgICAgKiBAcHJvcGVydHkge0Z1bmN0aW9ufSByZXN1bWUgLSBhIGZ1bmN0aW9uIHRoYXQgcmVzdW1lcyB0aGUgcHJvY2Vzc2luZyBvZlxuICAgICAqIHF1ZXVlZCB0YXNrcyB3aGVuIHRoZSBxdWV1ZSBpcyBwYXVzZWQuIEludm9rZSB3aXRoIGBxdWV1ZS5yZXN1bWUoKWAuXG4gICAgICogQHByb3BlcnR5IHtGdW5jdGlvbn0ga2lsbCAtIGEgZnVuY3Rpb24gdGhhdCByZW1vdmVzIHRoZSBgZHJhaW5gIGNhbGxiYWNrIGFuZFxuICAgICAqIGVtcHRpZXMgcmVtYWluaW5nIHRhc2tzIGZyb20gdGhlIHF1ZXVlIGZvcmNpbmcgaXQgdG8gZ28gaWRsZS4gTm8gbW9yZSB0YXNrc1xuICAgICAqIHNob3VsZCBiZSBwdXNoZWQgdG8gdGhlIHF1ZXVlIGFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4gSW52b2tlIHdpdGggYHF1ZXVlLmtpbGwoKWAuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGNvbnN0IHEgPSBhc3luYy5xdWV1ZSh3b3JrZXIsIDIpXG4gICAgICogcS5wdXNoKGl0ZW0xKVxuICAgICAqIHEucHVzaChpdGVtMilcbiAgICAgKiBxLnB1c2goaXRlbTMpXG4gICAgICogLy8gcXVldWVzIGFyZSBpdGVyYWJsZSwgc3ByZWFkIGludG8gYW4gYXJyYXkgdG8gaW5zcGVjdFxuICAgICAqIGNvbnN0IGl0ZW1zID0gWy4uLnFdIC8vIFtpdGVtMSwgaXRlbTIsIGl0ZW0zXVxuICAgICAqIC8vIG9yIHVzZSBmb3Igb2ZcbiAgICAgKiBmb3IgKGxldCBpdGVtIG9mIHEpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coaXRlbSlcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBxLmRyYWluKCgpID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coJ2FsbCBkb25lJylcbiAgICAgKiB9KVxuICAgICAqIC8vIG9yXG4gICAgICogYXdhaXQgcS5kcmFpbigpXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgYHF1ZXVlYCBvYmplY3Qgd2l0aCB0aGUgc3BlY2lmaWVkIGBjb25jdXJyZW5jeWAuIFRhc2tzIGFkZGVkIHRvIHRoZVxuICAgICAqIGBxdWV1ZWAgYXJlIHByb2Nlc3NlZCBpbiBwYXJhbGxlbCAodXAgdG8gdGhlIGBjb25jdXJyZW5jeWAgbGltaXQpLiBJZiBhbGxcbiAgICAgKiBgd29ya2VyYHMgYXJlIGluIHByb2dyZXNzLCB0aGUgdGFzayBpcyBxdWV1ZWQgdW50aWwgb25lIGJlY29tZXMgYXZhaWxhYmxlLlxuICAgICAqIE9uY2UgYSBgd29ya2VyYCBjb21wbGV0ZXMgYSBgdGFza2AsIHRoYXQgYHRhc2tgJ3MgY2FsbGJhY2sgaXMgY2FsbGVkLlxuICAgICAqXG4gICAgICogQG5hbWUgcXVldWVcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb250cm9sRmxvd1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgQ29udHJvbCBGbG93XG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSB3b3JrZXIgLSBBbiBhc3luYyBmdW5jdGlvbiBmb3IgcHJvY2Vzc2luZyBhIHF1ZXVlZCB0YXNrLlxuICAgICAqIElmIHlvdSB3YW50IHRvIGhhbmRsZSBlcnJvcnMgZnJvbSBhbiBpbmRpdmlkdWFsIHRhc2ssIHBhc3MgYSBjYWxsYmFjayB0b1xuICAgICAqIGBxLnB1c2goKWAuIEludm9rZWQgd2l0aCAodGFzaywgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbY29uY3VycmVuY3k9MV0gLSBBbiBgaW50ZWdlcmAgZm9yIGRldGVybWluaW5nIGhvdyBtYW55XG4gICAgICogYHdvcmtlcmAgZnVuY3Rpb25zIHNob3VsZCBiZSBydW4gaW4gcGFyYWxsZWwuICBJZiBvbWl0dGVkLCB0aGUgY29uY3VycmVuY3lcbiAgICAgKiBkZWZhdWx0cyB0byBgMWAuICBJZiB0aGUgY29uY3VycmVuY3kgaXMgYDBgLCBhbiBlcnJvciBpcyB0aHJvd24uXG4gICAgICogQHJldHVybnMge21vZHVsZTpDb250cm9sRmxvdy5RdWV1ZU9iamVjdH0gQSBxdWV1ZSBvYmplY3QgdG8gbWFuYWdlIHRoZSB0YXNrcy4gQ2FsbGJhY2tzIGNhbiBiZVxuICAgICAqIGF0dGFjaGVkIGFzIGNlcnRhaW4gcHJvcGVydGllcyB0byBsaXN0ZW4gZm9yIHNwZWNpZmljIGV2ZW50cyBkdXJpbmcgdGhlXG4gICAgICogbGlmZWN5Y2xlIG9mIHRoZSBxdWV1ZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gY3JlYXRlIGEgcXVldWUgb2JqZWN0IHdpdGggY29uY3VycmVuY3kgMlxuICAgICAqIHZhciBxID0gYXN5bmMucXVldWUoZnVuY3Rpb24odGFzaywgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coJ2hlbGxvICcgKyB0YXNrLm5hbWUpO1xuICAgICAqICAgICBjYWxsYmFjaygpO1xuICAgICAqIH0sIDIpO1xuICAgICAqXG4gICAgICogLy8gYXNzaWduIGEgY2FsbGJhY2tcbiAgICAgKiBxLmRyYWluKGZ1bmN0aW9uKCkge1xuICAgICAqICAgICBjb25zb2xlLmxvZygnYWxsIGl0ZW1zIGhhdmUgYmVlbiBwcm9jZXNzZWQnKTtcbiAgICAgKiB9KTtcbiAgICAgKiAvLyBvciBhd2FpdCB0aGUgZW5kXG4gICAgICogYXdhaXQgcS5kcmFpbigpXG4gICAgICpcbiAgICAgKiAvLyBhc3NpZ24gYW4gZXJyb3IgY2FsbGJhY2tcbiAgICAgKiBxLmVycm9yKGZ1bmN0aW9uKGVyciwgdGFzaykge1xuICAgICAqICAgICBjb25zb2xlLmVycm9yKCd0YXNrIGV4cGVyaWVuY2VkIGFuIGVycm9yJyk7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBhZGQgc29tZSBpdGVtcyB0byB0aGUgcXVldWVcbiAgICAgKiBxLnB1c2goe25hbWU6ICdmb28nfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKCdmaW5pc2hlZCBwcm9jZXNzaW5nIGZvbycpO1xuICAgICAqIH0pO1xuICAgICAqIC8vIGNhbGxiYWNrIGlzIG9wdGlvbmFsXG4gICAgICogcS5wdXNoKHtuYW1lOiAnYmFyJ30pO1xuICAgICAqXG4gICAgICogLy8gYWRkIHNvbWUgaXRlbXMgdG8gdGhlIHF1ZXVlIChiYXRjaC13aXNlKVxuICAgICAqIHEucHVzaChbe25hbWU6ICdiYXonfSx7bmFtZTogJ2JheSd9LHtuYW1lOiAnYmF4J31dLCBmdW5jdGlvbihlcnIpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coJ2ZpbmlzaGVkIHByb2Nlc3NpbmcgaXRlbScpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gYWRkIHNvbWUgaXRlbXMgdG8gdGhlIGZyb250IG9mIHRoZSBxdWV1ZVxuICAgICAqIHEudW5zaGlmdCh7bmFtZTogJ2Jhcid9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKCdmaW5pc2hlZCBwcm9jZXNzaW5nIGJhcicpO1xuICAgICAqIH0pO1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHF1ZXVlICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG4gICAgICAgIHZhciBfd29ya2VyID0gd3JhcEFzeW5jKHdvcmtlcik7XG4gICAgICAgIHJldHVybiBxdWV1ZSQxKChpdGVtcywgY2IpID0+IHtcbiAgICAgICAgICAgIF93b3JrZXIoaXRlbXNbMF0sIGNiKTtcbiAgICAgICAgfSwgY29uY3VycmVuY3ksIDEpO1xuICAgIH1cblxuICAgIC8vIEJpbmFyeSBtaW4taGVhcCBpbXBsZW1lbnRhdGlvbiB1c2VkIGZvciBwcmlvcml0eSBxdWV1ZS5cbiAgICAvLyBJbXBsZW1lbnRhdGlvbiBpcyBzdGFibGUsIGkuZS4gcHVzaCB0aW1lIGlzIGNvbnNpZGVyZWQgZm9yIGVxdWFsIHByaW9yaXRpZXNcbiAgICBjbGFzcyBIZWFwIHtcbiAgICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgICB0aGlzLmhlYXAgPSBbXTtcbiAgICAgICAgICAgIHRoaXMucHVzaENvdW50ID0gTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVI7XG4gICAgICAgIH1cblxuICAgICAgICBnZXQgbGVuZ3RoKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGVhcC5sZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICBlbXB0eSAoKSB7XG4gICAgICAgICAgICB0aGlzLmhlYXAgPSBbXTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgcGVyY1VwKGluZGV4KSB7XG4gICAgICAgICAgICBsZXQgcDtcblxuICAgICAgICAgICAgd2hpbGUgKGluZGV4ID4gMCAmJiBzbWFsbGVyKHRoaXMuaGVhcFtpbmRleF0sIHRoaXMuaGVhcFtwPXBhcmVudChpbmRleCldKSkge1xuICAgICAgICAgICAgICAgIGxldCB0ID0gdGhpcy5oZWFwW2luZGV4XTtcbiAgICAgICAgICAgICAgICB0aGlzLmhlYXBbaW5kZXhdID0gdGhpcy5oZWFwW3BdO1xuICAgICAgICAgICAgICAgIHRoaXMuaGVhcFtwXSA9IHQ7XG5cbiAgICAgICAgICAgICAgICBpbmRleCA9IHA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwZXJjRG93bihpbmRleCkge1xuICAgICAgICAgICAgbGV0IGw7XG5cbiAgICAgICAgICAgIHdoaWxlICgobD1sZWZ0Q2hpKGluZGV4KSkgPCB0aGlzLmhlYXAubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGwrMSA8IHRoaXMuaGVhcC5sZW5ndGggJiYgc21hbGxlcih0aGlzLmhlYXBbbCsxXSwgdGhpcy5oZWFwW2xdKSkge1xuICAgICAgICAgICAgICAgICAgICBsID0gbCsxO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChzbWFsbGVyKHRoaXMuaGVhcFtpbmRleF0sIHRoaXMuaGVhcFtsXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGV0IHQgPSB0aGlzLmhlYXBbaW5kZXhdO1xuICAgICAgICAgICAgICAgIHRoaXMuaGVhcFtpbmRleF0gPSB0aGlzLmhlYXBbbF07XG4gICAgICAgICAgICAgICAgdGhpcy5oZWFwW2xdID0gdDtcblxuICAgICAgICAgICAgICAgIGluZGV4ID0gbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHB1c2gobm9kZSkge1xuICAgICAgICAgICAgbm9kZS5wdXNoQ291bnQgPSArK3RoaXMucHVzaENvdW50O1xuICAgICAgICAgICAgdGhpcy5oZWFwLnB1c2gobm9kZSk7XG4gICAgICAgICAgICB0aGlzLnBlcmNVcCh0aGlzLmhlYXAubGVuZ3RoLTEpO1xuICAgICAgICB9XG5cbiAgICAgICAgdW5zaGlmdChub2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5oZWFwLnB1c2gobm9kZSk7XG4gICAgICAgIH1cblxuICAgICAgICBzaGlmdCgpIHtcbiAgICAgICAgICAgIGxldCBbdG9wXSA9IHRoaXMuaGVhcDtcblxuICAgICAgICAgICAgdGhpcy5oZWFwWzBdID0gdGhpcy5oZWFwW3RoaXMuaGVhcC5sZW5ndGgtMV07XG4gICAgICAgICAgICB0aGlzLmhlYXAucG9wKCk7XG4gICAgICAgICAgICB0aGlzLnBlcmNEb3duKDApO1xuXG4gICAgICAgICAgICByZXR1cm4gdG9wO1xuICAgICAgICB9XG5cbiAgICAgICAgdG9BcnJheSgpIHtcbiAgICAgICAgICAgIHJldHVybiBbLi4udGhpc107XG4gICAgICAgIH1cblxuICAgICAgICAqW1N5bWJvbC5pdGVyYXRvcl0gKCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmhlYXAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB5aWVsZCB0aGlzLmhlYXBbaV0uZGF0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJlbW92ZSAodGVzdEZuKSB7XG4gICAgICAgICAgICBsZXQgaiA9IDA7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuaGVhcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICghdGVzdEZuKHRoaXMuaGVhcFtpXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oZWFwW2pdID0gdGhpcy5oZWFwW2ldO1xuICAgICAgICAgICAgICAgICAgICBqKys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmhlYXAuc3BsaWNlKGopO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gcGFyZW50KHRoaXMuaGVhcC5sZW5ndGgtMSk7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wZXJjRG93bihpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsZWZ0Q2hpKGkpIHtcbiAgICAgICAgcmV0dXJuIChpPDwxKSsxO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcmVudChpKSB7XG4gICAgICAgIHJldHVybiAoKGkrMSk+PjEpLTE7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc21hbGxlcih4LCB5KSB7XG4gICAgICAgIGlmICh4LnByaW9yaXR5ICE9PSB5LnByaW9yaXR5KSB7XG4gICAgICAgICAgICByZXR1cm4geC5wcmlvcml0eSA8IHkucHJpb3JpdHk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4geC5wdXNoQ291bnQgPCB5LnB1c2hDb3VudDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBzYW1lIGFzIFthc3luYy5xdWV1ZV17QGxpbmsgbW9kdWxlOkNvbnRyb2xGbG93LnF1ZXVlfSBvbmx5IHRhc2tzIGFyZSBhc3NpZ25lZCBhIHByaW9yaXR5IGFuZFxuICAgICAqIGNvbXBsZXRlZCBpbiBhc2NlbmRpbmcgcHJpb3JpdHkgb3JkZXIuXG4gICAgICpcbiAgICAgKiBAbmFtZSBwcmlvcml0eVF1ZXVlXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMucXVldWVde0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy5xdWV1ZX1cbiAgICAgKiBAY2F0ZWdvcnkgQ29udHJvbCBGbG93XG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSB3b3JrZXIgLSBBbiBhc3luYyBmdW5jdGlvbiBmb3IgcHJvY2Vzc2luZyBhIHF1ZXVlZCB0YXNrLlxuICAgICAqIElmIHlvdSB3YW50IHRvIGhhbmRsZSBlcnJvcnMgZnJvbSBhbiBpbmRpdmlkdWFsIHRhc2ssIHBhc3MgYSBjYWxsYmFjayB0b1xuICAgICAqIGBxLnB1c2goKWAuXG4gICAgICogSW52b2tlZCB3aXRoICh0YXNrLCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGNvbmN1cnJlbmN5IC0gQW4gYGludGVnZXJgIGZvciBkZXRlcm1pbmluZyBob3cgbWFueSBgd29ya2VyYFxuICAgICAqIGZ1bmN0aW9ucyBzaG91bGQgYmUgcnVuIGluIHBhcmFsbGVsLiAgSWYgb21pdHRlZCwgdGhlIGNvbmN1cnJlbmN5IGRlZmF1bHRzIHRvXG4gICAgICogYDFgLiAgSWYgdGhlIGNvbmN1cnJlbmN5IGlzIGAwYCwgYW4gZXJyb3IgaXMgdGhyb3duLlxuICAgICAqIEByZXR1cm5zIHttb2R1bGU6Q29udHJvbEZsb3cuUXVldWVPYmplY3R9IEEgcHJpb3JpdHlRdWV1ZSBvYmplY3QgdG8gbWFuYWdlIHRoZSB0YXNrcy4gVGhlcmUgYXJlIHRocmVlXG4gICAgICogZGlmZmVyZW5jZXMgYmV0d2VlbiBgcXVldWVgIGFuZCBgcHJpb3JpdHlRdWV1ZWAgb2JqZWN0czpcbiAgICAgKiAqIGBwdXNoKHRhc2ssIHByaW9yaXR5LCBbY2FsbGJhY2tdKWAgLSBgcHJpb3JpdHlgIHNob3VsZCBiZSBhIG51bWJlci4gSWYgYW5cbiAgICAgKiAgIGFycmF5IG9mIGB0YXNrc2AgaXMgZ2l2ZW4sIGFsbCB0YXNrcyB3aWxsIGJlIGFzc2lnbmVkIHRoZSBzYW1lIHByaW9yaXR5LlxuICAgICAqICogYHB1c2hBc3luYyh0YXNrLCBwcmlvcml0eSwgW2NhbGxiYWNrXSlgIC0gdGhlIHNhbWUgYXMgYHByaW9yaXR5UXVldWUucHVzaGAsXG4gICAgICogICBleGNlcHQgdGhpcyByZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHJlamVjdHMgaWYgYW4gZXJyb3Igb2NjdXJzLlxuICAgICAqICogVGhlIGB1bnNoaWZ0YCBhbmQgYHVuc2hpZnRBc3luY2AgbWV0aG9kcyB3ZXJlIHJlbW92ZWQuXG4gICAgICovXG4gICAgZnVuY3Rpb24gcHJpb3JpdHlRdWV1ZSh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG4gICAgICAgIC8vIFN0YXJ0IHdpdGggYSBub3JtYWwgcXVldWVcbiAgICAgICAgdmFyIHEgPSBxdWV1ZSh3b3JrZXIsIGNvbmN1cnJlbmN5KTtcblxuICAgICAgICB2YXIge1xuICAgICAgICAgICAgcHVzaCxcbiAgICAgICAgICAgIHB1c2hBc3luY1xuICAgICAgICB9ID0gcTtcblxuICAgICAgICBxLl90YXNrcyA9IG5ldyBIZWFwKCk7XG4gICAgICAgIHEuX2NyZWF0ZVRhc2tJdGVtID0gKHtkYXRhLCBwcmlvcml0eX0sIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgcHJpb3JpdHksXG4gICAgICAgICAgICAgICAgY2FsbGJhY2tcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG5cbiAgICAgICAgZnVuY3Rpb24gY3JlYXRlRGF0YUl0ZW1zKHRhc2tzLCBwcmlvcml0eSkge1xuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRhc2tzKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7ZGF0YTogdGFza3MsIHByaW9yaXR5fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0YXNrcy5tYXAoZGF0YSA9PiB7IHJldHVybiB7ZGF0YSwgcHJpb3JpdHl9OyB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE92ZXJyaWRlIHB1c2ggdG8gYWNjZXB0IHNlY29uZCBwYXJhbWV0ZXIgcmVwcmVzZW50aW5nIHByaW9yaXR5XG4gICAgICAgIHEucHVzaCA9IGZ1bmN0aW9uKGRhdGEsIHByaW9yaXR5ID0gMCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHJldHVybiBwdXNoKGNyZWF0ZURhdGFJdGVtcyhkYXRhLCBwcmlvcml0eSksIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcblxuICAgICAgICBxLnB1c2hBc3luYyA9IGZ1bmN0aW9uKGRhdGEsIHByaW9yaXR5ID0gMCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHJldHVybiBwdXNoQXN5bmMoY3JlYXRlRGF0YUl0ZW1zKGRhdGEsIHByaW9yaXR5KSwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFJlbW92ZSB1bnNoaWZ0IGZ1bmN0aW9uc1xuICAgICAgICBkZWxldGUgcS51bnNoaWZ0O1xuICAgICAgICBkZWxldGUgcS51bnNoaWZ0QXN5bmM7XG5cbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUnVucyB0aGUgYHRhc2tzYCBhcnJheSBvZiBmdW5jdGlvbnMgaW4gcGFyYWxsZWwsIHdpdGhvdXQgd2FpdGluZyB1bnRpbCB0aGVcbiAgICAgKiBwcmV2aW91cyBmdW5jdGlvbiBoYXMgY29tcGxldGVkLiBPbmNlIGFueSBvZiB0aGUgYHRhc2tzYCBjb21wbGV0ZSBvciBwYXNzIGFuXG4gICAgICogZXJyb3IgdG8gaXRzIGNhbGxiYWNrLCB0aGUgbWFpbiBgY2FsbGJhY2tgIGlzIGltbWVkaWF0ZWx5IGNhbGxlZC4gSXQnc1xuICAgICAqIGVxdWl2YWxlbnQgdG8gYFByb21pc2UucmFjZSgpYC5cbiAgICAgKlxuICAgICAqIEBuYW1lIHJhY2VcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb250cm9sRmxvd1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgQ29udHJvbCBGbG93XG4gICAgICogQHBhcmFtIHtBcnJheX0gdGFza3MgLSBBbiBhcnJheSBjb250YWluaW5nIFthc3luYyBmdW5jdGlvbnNde0BsaW5rIEFzeW5jRnVuY3Rpb259XG4gICAgICogdG8gcnVuLiBFYWNoIGZ1bmN0aW9uIGNhbiBjb21wbGV0ZSB3aXRoIGFuIG9wdGlvbmFsIGByZXN1bHRgIHZhbHVlLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIC0gQSBjYWxsYmFjayB0byBydW4gb25jZSBhbnkgb2YgdGhlIGZ1bmN0aW9ucyBoYXZlXG4gICAgICogY29tcGxldGVkLiBUaGlzIGZ1bmN0aW9uIGdldHMgYW4gZXJyb3Igb3IgcmVzdWx0IGZyb20gdGhlIGZpcnN0IGZ1bmN0aW9uIHRoYXRcbiAgICAgKiBjb21wbGV0ZWQuIEludm9rZWQgd2l0aCAoZXJyLCByZXN1bHQpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIGEgY2FsbGJhY2sgaXMgb21pdHRlZFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBhc3luYy5yYWNlKFtcbiAgICAgKiAgICAgZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICogICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ29uZScpO1xuICAgICAqICAgICAgICAgfSwgMjAwKTtcbiAgICAgKiAgICAgfSxcbiAgICAgKiAgICAgZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICogICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ3R3bycpO1xuICAgICAqICAgICAgICAgfSwgMTAwKTtcbiAgICAgKiAgICAgfVxuICAgICAqIF0sXG4gICAgICogLy8gbWFpbiBjYWxsYmFja1xuICAgICAqIGZ1bmN0aW9uKGVyciwgcmVzdWx0KSB7XG4gICAgICogICAgIC8vIHRoZSByZXN1bHQgd2lsbCBiZSBlcXVhbCB0byAndHdvJyBhcyBpdCBmaW5pc2hlcyBlYXJsaWVyXG4gICAgICogfSk7XG4gICAgICovXG4gICAgZnVuY3Rpb24gcmFjZSh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBvbmNlKGNhbGxiYWNrKTtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRhc2tzKSkgcmV0dXJuIGNhbGxiYWNrKG5ldyBUeXBlRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IHRvIHJhY2UgbXVzdCBiZSBhbiBhcnJheSBvZiBmdW5jdGlvbnMnKSk7XG4gICAgICAgIGlmICghdGFza3MubGVuZ3RoKSByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSB0YXNrcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgIHdyYXBBc3luYyh0YXNrc1tpXSkoY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHJhY2UkMSA9IGF3YWl0aWZ5KHJhY2UsIDIpO1xuXG4gICAgLyoqXG4gICAgICogU2FtZSBhcyBbYHJlZHVjZWBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5yZWR1Y2V9LCBvbmx5IG9wZXJhdGVzIG9uIGBhcnJheWAgaW4gcmV2ZXJzZSBvcmRlci5cbiAgICAgKlxuICAgICAqIEBuYW1lIHJlZHVjZVJpZ2h0XG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMucmVkdWNlXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMucmVkdWNlfVxuICAgICAqIEBhbGlhcyBmb2xkclxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7Kn0gbWVtbyAtIFRoZSBpbml0aWFsIHN0YXRlIG9mIHRoZSByZWR1Y3Rpb24uXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEEgZnVuY3Rpb24gYXBwbGllZCB0byBlYWNoIGl0ZW0gaW4gdGhlXG4gICAgICogYXJyYXkgdG8gcHJvZHVjZSB0aGUgbmV4dCBzdGVwIGluIHRoZSByZWR1Y3Rpb24uXG4gICAgICogVGhlIGBpdGVyYXRlZWAgc2hvdWxkIGNvbXBsZXRlIHdpdGggdGhlIG5leHQgc3RhdGUgb2YgdGhlIHJlZHVjdGlvbi5cbiAgICAgKiBJZiB0aGUgaXRlcmF0ZWUgY29tcGxldGVzIHdpdGggYW4gZXJyb3IsIHRoZSByZWR1Y3Rpb24gaXMgc3RvcHBlZCBhbmQgdGhlXG4gICAgICogbWFpbiBgY2FsbGJhY2tgIGlzIGltbWVkaWF0ZWx5IGNhbGxlZCB3aXRoIHRoZSBlcnJvci5cbiAgICAgKiBJbnZva2VkIHdpdGggKG1lbW8sIGl0ZW0sIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgYWZ0ZXIgYWxsIHRoZVxuICAgICAqIGBpdGVyYXRlZWAgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQuIFJlc3VsdCBpcyB0aGUgcmVkdWNlZCB2YWx1ZS4gSW52b2tlZCB3aXRoXG4gICAgICogKGVyciwgcmVzdWx0KS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBpcyBwYXNzZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiByZWR1Y2VSaWdodCAoYXJyYXksIG1lbW8sIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmV2ZXJzZWQgPSBbLi4uYXJyYXldLnJldmVyc2UoKTtcbiAgICAgICAgcmV0dXJuIHJlZHVjZSQxKHJldmVyc2VkLCBtZW1vLCBpdGVyYXRlZSwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdyYXBzIHRoZSBhc3luYyBmdW5jdGlvbiBpbiBhbm90aGVyIGZ1bmN0aW9uIHRoYXQgYWx3YXlzIGNvbXBsZXRlcyB3aXRoIGFcbiAgICAgKiByZXN1bHQgb2JqZWN0LCBldmVuIHdoZW4gaXQgZXJyb3JzLlxuICAgICAqXG4gICAgICogVGhlIHJlc3VsdCBvYmplY3QgaGFzIGVpdGhlciB0aGUgcHJvcGVydHkgYGVycm9yYCBvciBgdmFsdWVgLlxuICAgICAqXG4gICAgICogQG5hbWUgcmVmbGVjdFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOlV0aWxzXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBmbiAtIFRoZSBhc3luYyBmdW5jdGlvbiB5b3Ugd2FudCB0byB3cmFwXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSAtIEEgZnVuY3Rpb24gdGhhdCBhbHdheXMgcGFzc2VzIG51bGwgdG8gaXQncyBjYWxsYmFjayBhc1xuICAgICAqIHRoZSBlcnJvci4gVGhlIHNlY29uZCBhcmd1bWVudCB0byB0aGUgY2FsbGJhY2sgd2lsbCBiZSBhbiBgb2JqZWN0YCB3aXRoXG4gICAgICogZWl0aGVyIGFuIGBlcnJvcmAgb3IgYSBgdmFsdWVgIHByb3BlcnR5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBhc3luYy5wYXJhbGxlbChbXG4gICAgICogICAgIGFzeW5jLnJlZmxlY3QoZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIC8vIGRvIHNvbWUgc3R1ZmYgLi4uXG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCAnb25lJyk7XG4gICAgICogICAgIH0pLFxuICAgICAqICAgICBhc3luYy5yZWZsZWN0KGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAvLyBkbyBzb21lIG1vcmUgc3R1ZmYgYnV0IGVycm9yIC4uLlxuICAgICAqICAgICAgICAgY2FsbGJhY2soJ2JhZCBzdHVmZiBoYXBwZW5lZCcpO1xuICAgICAqICAgICB9KSxcbiAgICAgKiAgICAgYXN5bmMucmVmbGVjdChmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgLy8gZG8gc29tZSBtb3JlIHN0dWZmIC4uLlxuICAgICAqICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ3R3bycpO1xuICAgICAqICAgICB9KVxuICAgICAqIF0sXG4gICAgICogLy8gb3B0aW9uYWwgY2FsbGJhY2tcbiAgICAgKiBmdW5jdGlvbihlcnIsIHJlc3VsdHMpIHtcbiAgICAgKiAgICAgLy8gdmFsdWVzXG4gICAgICogICAgIC8vIHJlc3VsdHNbMF0udmFsdWUgPSAnb25lJ1xuICAgICAqICAgICAvLyByZXN1bHRzWzFdLmVycm9yID0gJ2JhZCBzdHVmZiBoYXBwZW5lZCdcbiAgICAgKiAgICAgLy8gcmVzdWx0c1syXS52YWx1ZSA9ICd0d28nXG4gICAgICogfSk7XG4gICAgICovXG4gICAgZnVuY3Rpb24gcmVmbGVjdChmbikge1xuICAgICAgICB2YXIgX2ZuID0gd3JhcEFzeW5jKGZuKTtcbiAgICAgICAgcmV0dXJuIGluaXRpYWxQYXJhbXMoZnVuY3Rpb24gcmVmbGVjdE9uKGFyZ3MsIHJlZmxlY3RDYWxsYmFjaykge1xuICAgICAgICAgICAgYXJncy5wdXNoKChlcnJvciwgLi4uY2JBcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IHJldFZhbCA9IHt9O1xuICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICByZXRWYWwuZXJyb3IgPSBlcnJvcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNiQXJncy5sZW5ndGggPiAwKXtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gY2JBcmdzO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2JBcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdID0gY2JBcmdzO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldFZhbC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZWZsZWN0Q2FsbGJhY2sobnVsbCwgcmV0VmFsKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gX2ZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIGhlbHBlciBmdW5jdGlvbiB0aGF0IHdyYXBzIGFuIGFycmF5IG9yIGFuIG9iamVjdCBvZiBmdW5jdGlvbnMgd2l0aCBgcmVmbGVjdGAuXG4gICAgICpcbiAgICAgKiBAbmFtZSByZWZsZWN0QWxsXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6VXRpbHNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMucmVmbGVjdF17QGxpbmsgbW9kdWxlOlV0aWxzLnJlZmxlY3R9XG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdHxJdGVyYWJsZX0gdGFza3MgLSBUaGUgY29sbGVjdGlvbiBvZlxuICAgICAqIFthc3luYyBmdW5jdGlvbnNde0BsaW5rIEFzeW5jRnVuY3Rpb259IHRvIHdyYXAgaW4gYGFzeW5jLnJlZmxlY3RgLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBhbiBhcnJheSBvZiBhc3luYyBmdW5jdGlvbnMsIGVhY2ggd3JhcHBlZCBpblxuICAgICAqIGBhc3luYy5yZWZsZWN0YFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBsZXQgdGFza3MgPSBbXG4gICAgICogICAgIGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsICdvbmUnKTtcbiAgICAgKiAgICAgICAgIH0sIDIwMCk7XG4gICAgICogICAgIH0sXG4gICAgICogICAgIGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAvLyBkbyBzb21lIG1vcmUgc3R1ZmYgYnV0IGVycm9yIC4uLlxuICAgICAqICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKCdiYWQgc3R1ZmYgaGFwcGVuZWQnKSk7XG4gICAgICogICAgIH0sXG4gICAgICogICAgIGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsICd0d28nKTtcbiAgICAgKiAgICAgICAgIH0sIDEwMCk7XG4gICAgICogICAgIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogYXN5bmMucGFyYWxsZWwoYXN5bmMucmVmbGVjdEFsbCh0YXNrcyksXG4gICAgICogLy8gb3B0aW9uYWwgY2FsbGJhY2tcbiAgICAgKiBmdW5jdGlvbihlcnIsIHJlc3VsdHMpIHtcbiAgICAgKiAgICAgLy8gdmFsdWVzXG4gICAgICogICAgIC8vIHJlc3VsdHNbMF0udmFsdWUgPSAnb25lJ1xuICAgICAqICAgICAvLyByZXN1bHRzWzFdLmVycm9yID0gRXJyb3IoJ2JhZCBzdHVmZiBoYXBwZW5lZCcpXG4gICAgICogICAgIC8vIHJlc3VsdHNbMl0udmFsdWUgPSAndHdvJ1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gYW4gZXhhbXBsZSB1c2luZyBhbiBvYmplY3QgaW5zdGVhZCBvZiBhbiBhcnJheVxuICAgICAqIGxldCB0YXNrcyA9IHtcbiAgICAgKiAgICAgb25lOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCAnb25lJyk7XG4gICAgICogICAgICAgICB9LCAyMDApO1xuICAgICAqICAgICB9LFxuICAgICAqICAgICB0d286IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBjYWxsYmFjaygndHdvJyk7XG4gICAgICogICAgIH0sXG4gICAgICogICAgIHRocmVlOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCAndGhyZWUnKTtcbiAgICAgKiAgICAgICAgIH0sIDEwMCk7XG4gICAgICogICAgIH1cbiAgICAgKiB9O1xuICAgICAqXG4gICAgICogYXN5bmMucGFyYWxsZWwoYXN5bmMucmVmbGVjdEFsbCh0YXNrcyksXG4gICAgICogLy8gb3B0aW9uYWwgY2FsbGJhY2tcbiAgICAgKiBmdW5jdGlvbihlcnIsIHJlc3VsdHMpIHtcbiAgICAgKiAgICAgLy8gdmFsdWVzXG4gICAgICogICAgIC8vIHJlc3VsdHMub25lLnZhbHVlID0gJ29uZSdcbiAgICAgKiAgICAgLy8gcmVzdWx0cy50d28uZXJyb3IgPSAndHdvJ1xuICAgICAqICAgICAvLyByZXN1bHRzLnRocmVlLnZhbHVlID0gJ3RocmVlJ1xuICAgICAqIH0pO1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJlZmxlY3RBbGwodGFza3MpIHtcbiAgICAgICAgdmFyIHJlc3VsdHM7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRhc2tzKSkge1xuICAgICAgICAgICAgcmVzdWx0cyA9IHRhc2tzLm1hcChyZWZsZWN0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHRhc2tzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzdWx0c1trZXldID0gcmVmbGVjdC5jYWxsKHRoaXMsIHRhc2tzW2tleV0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVqZWN0JDIoZWFjaGZuLCBhcnIsIF9pdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgY29uc3QgaXRlcmF0ZWUgPSB3cmFwQXN5bmMoX2l0ZXJhdGVlKTtcbiAgICAgICAgcmV0dXJuIF9maWx0ZXIoZWFjaGZuLCBhcnIsICh2YWx1ZSwgY2IpID0+IHtcbiAgICAgICAgICAgIGl0ZXJhdGVlKHZhbHVlLCAoZXJyLCB2KSA9PiB7XG4gICAgICAgICAgICAgICAgY2IoZXJyLCAhdik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBvcHBvc2l0ZSBvZiBbYGZpbHRlcmBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5maWx0ZXJ9LiBSZW1vdmVzIHZhbHVlcyB0aGF0IHBhc3MgYW4gYGFzeW5jYCB0cnV0aCB0ZXN0LlxuICAgICAqXG4gICAgICogQG5hbWUgcmVqZWN0XG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMuZmlsdGVyXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZmlsdGVyfVxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBbiBhc3luYyB0cnV0aCB0ZXN0IHRvIGFwcGx5IHRvIGVhY2ggaXRlbSBpblxuICAgICAqIGBjb2xsYC5cbiAgICAgKiBUaGUgc2hvdWxkIGNvbXBsZXRlIHdpdGggYSBib29sZWFuIHZhbHVlIGFzIGl0cyBgcmVzdWx0YC5cbiAgICAgKiBJbnZva2VkIHdpdGggKGl0ZW0sIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgYWZ0ZXIgYWxsIHRoZVxuICAgICAqIGBpdGVyYXRlZWAgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQuIEludm9rZWQgd2l0aCAoZXJyLCByZXN1bHRzKS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBpcyBwYXNzZWRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gZGlyMSBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGZpbGUxLnR4dCwgZmlsZTIudHh0XG4gICAgICogLy8gZGlyMiBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGZpbGUzLnR4dCwgZmlsZTQudHh0XG4gICAgICogLy8gZGlyMyBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGZpbGU1LnR4dFxuICAgICAqXG4gICAgICogY29uc3QgZmlsZUxpc3QgPSBbJ2RpcjEvZmlsZTEudHh0JywnZGlyMi9maWxlMy50eHQnLCdkaXIzL2ZpbGU2LnR4dCddO1xuICAgICAqXG4gICAgICogLy8gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIGlmIGEgZmlsZSBleGlzdHNcbiAgICAgKiBmdW5jdGlvbiBmaWxlRXhpc3RzKGZpbGUsIGNhbGxiYWNrKSB7XG4gICAgICogICAgZnMuYWNjZXNzKGZpbGUsIGZzLmNvbnN0YW50cy5GX09LLCAoZXJyKSA9PiB7XG4gICAgICogICAgICAgIGNhbGxiYWNrKG51bGwsICFlcnIpO1xuICAgICAqICAgIH0pO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIGNhbGxiYWNrc1xuICAgICAqIGFzeW5jLnJlamVjdChmaWxlTGlzdCwgZmlsZUV4aXN0cywgZnVuY3Rpb24oZXJyLCByZXN1bHRzKSB7XG4gICAgICogICAgLy8gWyAnZGlyMy9maWxlNi50eHQnIF1cbiAgICAgKiAgICAvLyByZXN1bHRzIG5vdyBlcXVhbHMgYW4gYXJyYXkgb2YgdGhlIG5vbi1leGlzdGluZyBmaWxlc1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgUHJvbWlzZXNcbiAgICAgKiBhc3luYy5yZWplY3QoZmlsZUxpc3QsIGZpbGVFeGlzdHMpXG4gICAgICogLnRoZW4oIHJlc3VsdHMgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiAgICAgLy8gWyAnZGlyMy9maWxlNi50eHQnIF1cbiAgICAgKiAgICAgLy8gcmVzdWx0cyBub3cgZXF1YWxzIGFuIGFycmF5IG9mIHRoZSBub24tZXhpc3RpbmcgZmlsZXNcbiAgICAgKiB9KS5jYXRjaCggZXJyID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIGFzeW5jL2F3YWl0XG4gICAgICogYXN5bmMgKCkgPT4ge1xuICAgICAqICAgICB0cnkge1xuICAgICAqICAgICAgICAgbGV0IHJlc3VsdHMgPSBhd2FpdCBhc3luYy5yZWplY3QoZmlsZUxpc3QsIGZpbGVFeGlzdHMpO1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgICAgICAvLyBbICdkaXIzL2ZpbGU2LnR4dCcgXVxuICAgICAqICAgICAgICAgLy8gcmVzdWx0cyBub3cgZXF1YWxzIGFuIGFycmF5IG9mIHRoZSBub24tZXhpc3RpbmcgZmlsZXNcbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICovXG4gICAgZnVuY3Rpb24gcmVqZWN0IChjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdCQyKGVhY2hPZiQxLCBjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuICAgIHZhciByZWplY3QkMSA9IGF3YWl0aWZ5KHJlamVjdCwgMyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyBbYHJlamVjdGBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5yZWplY3R9IGJ1dCBydW5zIGEgbWF4aW11bSBvZiBgbGltaXRgIGFzeW5jIG9wZXJhdGlvbnMgYXQgYVxuICAgICAqIHRpbWUuXG4gICAgICpcbiAgICAgKiBAbmFtZSByZWplY3RMaW1pdFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLnJlamVjdF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLnJlamVjdH1cbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW1pdCAtIFRoZSBtYXhpbXVtIG51bWJlciBvZiBhc3luYyBvcGVyYXRpb25zIGF0IGEgdGltZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEFuIGFzeW5jIHRydXRoIHRlc3QgdG8gYXBwbHkgdG8gZWFjaCBpdGVtIGluXG4gICAgICogYGNvbGxgLlxuICAgICAqIFRoZSBzaG91bGQgY29tcGxldGUgd2l0aCBhIGJvb2xlYW4gdmFsdWUgYXMgaXRzIGByZXN1bHRgLlxuICAgICAqIEludm9rZWQgd2l0aCAoaXRlbSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCBhZnRlciBhbGwgdGhlXG4gICAgICogYGl0ZXJhdGVlYCBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZC4gSW52b2tlZCB3aXRoIChlcnIsIHJlc3VsdHMpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIG5vIGNhbGxiYWNrIGlzIHBhc3NlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJlamVjdExpbWl0IChjb2xsLCBsaW1pdCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiByZWplY3QkMihlYWNoT2ZMaW1pdCQyKGxpbWl0KSwgY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKVxuICAgIH1cbiAgICB2YXIgcmVqZWN0TGltaXQkMSA9IGF3YWl0aWZ5KHJlamVjdExpbWl0LCA0KTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzYW1lIGFzIFtgcmVqZWN0YF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLnJlamVjdH0gYnV0IHJ1bnMgb25seSBhIHNpbmdsZSBhc3luYyBvcGVyYXRpb24gYXQgYSB0aW1lLlxuICAgICAqXG4gICAgICogQG5hbWUgcmVqZWN0U2VyaWVzXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMucmVqZWN0XXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMucmVqZWN0fVxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBbiBhc3luYyB0cnV0aCB0ZXN0IHRvIGFwcGx5IHRvIGVhY2ggaXRlbSBpblxuICAgICAqIGBjb2xsYC5cbiAgICAgKiBUaGUgc2hvdWxkIGNvbXBsZXRlIHdpdGggYSBib29sZWFuIHZhbHVlIGFzIGl0cyBgcmVzdWx0YC5cbiAgICAgKiBJbnZva2VkIHdpdGggKGl0ZW0sIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgYWZ0ZXIgYWxsIHRoZVxuICAgICAqIGBpdGVyYXRlZWAgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQuIEludm9rZWQgd2l0aCAoZXJyLCByZXN1bHRzKS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBpcyBwYXNzZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiByZWplY3RTZXJpZXMgKGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gcmVqZWN0JDIoZWFjaE9mU2VyaWVzJDEsIGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaylcbiAgICB9XG4gICAgdmFyIHJlamVjdFNlcmllcyQxID0gYXdhaXRpZnkocmVqZWN0U2VyaWVzLCAzKTtcblxuICAgIGZ1bmN0aW9uIGNvbnN0YW50KHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBdHRlbXB0cyB0byBnZXQgYSBzdWNjZXNzZnVsIHJlc3BvbnNlIGZyb20gYHRhc2tgIG5vIG1vcmUgdGhhbiBgdGltZXNgIHRpbWVzXG4gICAgICogYmVmb3JlIHJldHVybmluZyBhbiBlcnJvci4gSWYgdGhlIHRhc2sgaXMgc3VjY2Vzc2Z1bCwgdGhlIGBjYWxsYmFja2Agd2lsbCBiZVxuICAgICAqIHBhc3NlZCB0aGUgcmVzdWx0IG9mIHRoZSBzdWNjZXNzZnVsIHRhc2suIElmIGFsbCBhdHRlbXB0cyBmYWlsLCB0aGUgY2FsbGJhY2tcbiAgICAgKiB3aWxsIGJlIHBhc3NlZCB0aGUgZXJyb3IgYW5kIHJlc3VsdCAoaWYgYW55KSBvZiB0aGUgZmluYWwgYXR0ZW1wdC5cbiAgICAgKlxuICAgICAqIEBuYW1lIHJldHJ5XG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGNhdGVnb3J5IENvbnRyb2wgRmxvd1xuICAgICAqIEBzZWUgW2FzeW5jLnJldHJ5YWJsZV17QGxpbmsgbW9kdWxlOkNvbnRyb2xGbG93LnJldHJ5YWJsZX1cbiAgICAgKiBAcGFyYW0ge09iamVjdHxudW1iZXJ9IFtvcHRzID0ge3RpbWVzOiA1LCBpbnRlcnZhbDogMH18IDVdIC0gQ2FuIGJlIGVpdGhlciBhblxuICAgICAqIG9iamVjdCB3aXRoIGB0aW1lc2AgYW5kIGBpbnRlcnZhbGAgb3IgYSBudW1iZXIuXG4gICAgICogKiBgdGltZXNgIC0gVGhlIG51bWJlciBvZiBhdHRlbXB0cyB0byBtYWtlIGJlZm9yZSBnaXZpbmcgdXAuICBUaGUgZGVmYXVsdFxuICAgICAqICAgaXMgYDVgLlxuICAgICAqICogYGludGVydmFsYCAtIFRoZSB0aW1lIHRvIHdhaXQgYmV0d2VlbiByZXRyaWVzLCBpbiBtaWxsaXNlY29uZHMuICBUaGVcbiAgICAgKiAgIGRlZmF1bHQgaXMgYDBgLiBUaGUgaW50ZXJ2YWwgbWF5IGFsc28gYmUgc3BlY2lmaWVkIGFzIGEgZnVuY3Rpb24gb2YgdGhlXG4gICAgICogICByZXRyeSBjb3VudCAoc2VlIGV4YW1wbGUpLlxuICAgICAqICogYGVycm9yRmlsdGVyYCAtIEFuIG9wdGlvbmFsIHN5bmNocm9ub3VzIGZ1bmN0aW9uIHRoYXQgaXMgaW52b2tlZCBvblxuICAgICAqICAgZXJyb25lb3VzIHJlc3VsdC4gSWYgaXQgcmV0dXJucyBgdHJ1ZWAgdGhlIHJldHJ5IGF0dGVtcHRzIHdpbGwgY29udGludWU7XG4gICAgICogICBpZiB0aGUgZnVuY3Rpb24gcmV0dXJucyBgZmFsc2VgIHRoZSByZXRyeSBmbG93IGlzIGFib3J0ZWQgd2l0aCB0aGUgY3VycmVudFxuICAgICAqICAgYXR0ZW1wdCdzIGVycm9yIGFuZCByZXN1bHQgYmVpbmcgcmV0dXJuZWQgdG8gdGhlIGZpbmFsIGNhbGxiYWNrLlxuICAgICAqICAgSW52b2tlZCB3aXRoIChlcnIpLlxuICAgICAqICogSWYgYG9wdHNgIGlzIGEgbnVtYmVyLCB0aGUgbnVtYmVyIHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHRpbWVzIHRvIHJldHJ5LFxuICAgICAqICAgd2l0aCB0aGUgZGVmYXVsdCBpbnRlcnZhbCBvZiBgMGAuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSB0YXNrIC0gQW4gYXN5bmMgZnVuY3Rpb24gdG8gcmV0cnkuXG4gICAgICogSW52b2tlZCB3aXRoIChjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEFuIG9wdGlvbmFsIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCB3aGVuIHRoZVxuICAgICAqIHRhc2sgaGFzIHN1Y2NlZWRlZCwgb3IgYWZ0ZXIgdGhlIGZpbmFsIGZhaWxlZCBhdHRlbXB0LiBJdCByZWNlaXZlcyB0aGUgYGVycmBcbiAgICAgKiBhbmQgYHJlc3VsdGAgYXJndW1lbnRzIG9mIHRoZSBsYXN0IGF0dGVtcHQgYXQgY29tcGxldGluZyB0aGUgYHRhc2tgLiBJbnZva2VkXG4gICAgICogd2l0aCAoZXJyLCByZXN1bHRzKS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlIGlmIG5vIGNhbGxiYWNrIHByb3ZpZGVkXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gVGhlIGByZXRyeWAgZnVuY3Rpb24gY2FuIGJlIHVzZWQgYXMgYSBzdGFuZC1hbG9uZSBjb250cm9sIGZsb3cgYnkgcGFzc2luZ1xuICAgICAqIC8vIGEgY2FsbGJhY2ssIGFzIHNob3duIGJlbG93OlxuICAgICAqXG4gICAgICogLy8gdHJ5IGNhbGxpbmcgYXBpTWV0aG9kIDMgdGltZXNcbiAgICAgKiBhc3luYy5yZXRyeSgzLCBhcGlNZXRob2QsIGZ1bmN0aW9uKGVyciwgcmVzdWx0KSB7XG4gICAgICogICAgIC8vIGRvIHNvbWV0aGluZyB3aXRoIHRoZSByZXN1bHRcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIHRyeSBjYWxsaW5nIGFwaU1ldGhvZCAzIHRpbWVzLCB3YWl0aW5nIDIwMCBtcyBiZXR3ZWVuIGVhY2ggcmV0cnlcbiAgICAgKiBhc3luYy5yZXRyeSh7dGltZXM6IDMsIGludGVydmFsOiAyMDB9LCBhcGlNZXRob2QsIGZ1bmN0aW9uKGVyciwgcmVzdWx0KSB7XG4gICAgICogICAgIC8vIGRvIHNvbWV0aGluZyB3aXRoIHRoZSByZXN1bHRcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIHRyeSBjYWxsaW5nIGFwaU1ldGhvZCAxMCB0aW1lcyB3aXRoIGV4cG9uZW50aWFsIGJhY2tvZmZcbiAgICAgKiAvLyAoaS5lLiBpbnRlcnZhbHMgb2YgMTAwLCAyMDAsIDQwMCwgODAwLCAxNjAwLCAuLi4gbWlsbGlzZWNvbmRzKVxuICAgICAqIGFzeW5jLnJldHJ5KHtcbiAgICAgKiAgIHRpbWVzOiAxMCxcbiAgICAgKiAgIGludGVydmFsOiBmdW5jdGlvbihyZXRyeUNvdW50KSB7XG4gICAgICogICAgIHJldHVybiA1MCAqIE1hdGgucG93KDIsIHJldHJ5Q291bnQpO1xuICAgICAqICAgfVxuICAgICAqIH0sIGFwaU1ldGhvZCwgZnVuY3Rpb24oZXJyLCByZXN1bHQpIHtcbiAgICAgKiAgICAgLy8gZG8gc29tZXRoaW5nIHdpdGggdGhlIHJlc3VsdFxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gdHJ5IGNhbGxpbmcgYXBpTWV0aG9kIHRoZSBkZWZhdWx0IDUgdGltZXMgbm8gZGVsYXkgYmV0d2VlbiBlYWNoIHJldHJ5XG4gICAgICogYXN5bmMucmV0cnkoYXBpTWV0aG9kLCBmdW5jdGlvbihlcnIsIHJlc3VsdCkge1xuICAgICAqICAgICAvLyBkbyBzb21ldGhpbmcgd2l0aCB0aGUgcmVzdWx0XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyB0cnkgY2FsbGluZyBhcGlNZXRob2Qgb25seSB3aGVuIGVycm9yIGNvbmRpdGlvbiBzYXRpc2ZpZXMsIGFsbCBvdGhlclxuICAgICAqIC8vIGVycm9ycyB3aWxsIGFib3J0IHRoZSByZXRyeSBjb250cm9sIGZsb3cgYW5kIHJldHVybiB0byBmaW5hbCBjYWxsYmFja1xuICAgICAqIGFzeW5jLnJldHJ5KHtcbiAgICAgKiAgIGVycm9yRmlsdGVyOiBmdW5jdGlvbihlcnIpIHtcbiAgICAgKiAgICAgcmV0dXJuIGVyci5tZXNzYWdlID09PSAnVGVtcG9yYXJ5IGVycm9yJzsgLy8gb25seSByZXRyeSBvbiBhIHNwZWNpZmljIGVycm9yXG4gICAgICogICB9XG4gICAgICogfSwgYXBpTWV0aG9kLCBmdW5jdGlvbihlcnIsIHJlc3VsdCkge1xuICAgICAqICAgICAvLyBkbyBzb21ldGhpbmcgd2l0aCB0aGUgcmVzdWx0XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyB0byByZXRyeSBpbmRpdmlkdWFsIG1ldGhvZHMgdGhhdCBhcmUgbm90IGFzIHJlbGlhYmxlIHdpdGhpbiBvdGhlclxuICAgICAqIC8vIGNvbnRyb2wgZmxvdyBmdW5jdGlvbnMsIHVzZSB0aGUgYHJldHJ5YWJsZWAgd3JhcHBlcjpcbiAgICAgKiBhc3luYy5hdXRvKHtcbiAgICAgKiAgICAgdXNlcnM6IGFwaS5nZXRVc2Vycy5iaW5kKGFwaSksXG4gICAgICogICAgIHBheW1lbnRzOiBhc3luYy5yZXRyeWFibGUoMywgYXBpLmdldFBheW1lbnRzLmJpbmQoYXBpKSlcbiAgICAgKiB9LCBmdW5jdGlvbihlcnIsIHJlc3VsdHMpIHtcbiAgICAgKiAgICAgLy8gZG8gc29tZXRoaW5nIHdpdGggdGhlIHJlc3VsdHNcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqL1xuICAgIGNvbnN0IERFRkFVTFRfVElNRVMgPSA1O1xuICAgIGNvbnN0IERFRkFVTFRfSU5URVJWQUwgPSAwO1xuXG4gICAgZnVuY3Rpb24gcmV0cnkob3B0cywgdGFzaywgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICAgICAgICB0aW1lczogREVGQVVMVF9USU1FUyxcbiAgICAgICAgICAgIGludGVydmFsRnVuYzogY29uc3RhbnQoREVGQVVMVF9JTlRFUlZBTClcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDMgJiYgdHlwZW9mIG9wdHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gdGFzayB8fCBwcm9taXNlQ2FsbGJhY2soKTtcbiAgICAgICAgICAgIHRhc2sgPSBvcHRzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFyc2VUaW1lcyhvcHRpb25zLCBvcHRzKTtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgcHJvbWlzZUNhbGxiYWNrKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHRhc2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYXJndW1lbnRzIGZvciBhc3luYy5yZXRyeVwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBfdGFzayA9IHdyYXBBc3luYyh0YXNrKTtcblxuICAgICAgICB2YXIgYXR0ZW1wdCA9IDE7XG4gICAgICAgIGZ1bmN0aW9uIHJldHJ5QXR0ZW1wdCgpIHtcbiAgICAgICAgICAgIF90YXNrKChlcnIsIC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyID09PSBmYWxzZSkgcmV0dXJuXG4gICAgICAgICAgICAgICAgaWYgKGVyciAmJiBhdHRlbXB0KysgPCBvcHRpb25zLnRpbWVzICYmXG4gICAgICAgICAgICAgICAgICAgICh0eXBlb2Ygb3B0aW9ucy5lcnJvckZpbHRlciAhPSAnZnVuY3Rpb24nIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmVycm9yRmlsdGVyKGVycikpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQocmV0cnlBdHRlbXB0LCBvcHRpb25zLmludGVydmFsRnVuYyhhdHRlbXB0IC0gMSkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgLi4uYXJncyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXRyeUF0dGVtcHQoKTtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrW1BST01JU0VfU1lNQk9MXVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlVGltZXMoYWNjLCB0KSB7XG4gICAgICAgIGlmICh0eXBlb2YgdCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGFjYy50aW1lcyA9ICt0LnRpbWVzIHx8IERFRkFVTFRfVElNRVM7XG5cbiAgICAgICAgICAgIGFjYy5pbnRlcnZhbEZ1bmMgPSB0eXBlb2YgdC5pbnRlcnZhbCA9PT0gJ2Z1bmN0aW9uJyA/XG4gICAgICAgICAgICAgICAgdC5pbnRlcnZhbCA6XG4gICAgICAgICAgICAgICAgY29uc3RhbnQoK3QuaW50ZXJ2YWwgfHwgREVGQVVMVF9JTlRFUlZBTCk7XG5cbiAgICAgICAgICAgIGFjYy5lcnJvckZpbHRlciA9IHQuZXJyb3JGaWx0ZXI7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHQgPT09ICdudW1iZXInIHx8IHR5cGVvZiB0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgYWNjLnRpbWVzID0gK3QgfHwgREVGQVVMVF9USU1FUztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYXJndW1lbnRzIGZvciBhc3luYy5yZXRyeVwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgY2xvc2UgcmVsYXRpdmUgb2YgW2ByZXRyeWBde0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy5yZXRyeX0uICBUaGlzIG1ldGhvZFxuICAgICAqIHdyYXBzIGEgdGFzayBhbmQgbWFrZXMgaXQgcmV0cnlhYmxlLCByYXRoZXIgdGhhbiBpbW1lZGlhdGVseSBjYWxsaW5nIGl0XG4gICAgICogd2l0aCByZXRyaWVzLlxuICAgICAqXG4gICAgICogQG5hbWUgcmV0cnlhYmxlXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMucmV0cnlde0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy5yZXRyeX1cbiAgICAgKiBAY2F0ZWdvcnkgQ29udHJvbCBGbG93XG4gICAgICogQHBhcmFtIHtPYmplY3R8bnVtYmVyfSBbb3B0cyA9IHt0aW1lczogNSwgaW50ZXJ2YWw6IDB9fCA1XSAtIG9wdGlvbmFsXG4gICAgICogb3B0aW9ucywgZXhhY3RseSB0aGUgc2FtZSBhcyBmcm9tIGByZXRyeWAsIGV4Y2VwdCBmb3IgYSBgb3B0cy5hcml0eWAgdGhhdFxuICAgICAqIGlzIHRoZSBhcml0eSBvZiB0aGUgYHRhc2tgIGZ1bmN0aW9uLCBkZWZhdWx0aW5nIHRvIGB0YXNrLmxlbmd0aGBcbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IHRhc2sgLSB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRvIHdyYXAuXG4gICAgICogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIHBhc3NlZCBhbnkgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgcmV0dXJuZWQgd3JhcHBlci5cbiAgICAgKiBJbnZva2VkIHdpdGggKC4uLmFyZ3MsIGNhbGxiYWNrKS5cbiAgICAgKiBAcmV0dXJucyB7QXN5bmNGdW5jdGlvbn0gVGhlIHdyYXBwZWQgZnVuY3Rpb24sIHdoaWNoIHdoZW4gaW52b2tlZCwgd2lsbFxuICAgICAqIHJldHJ5IG9uIGFuIGVycm9yLCBiYXNlZCBvbiB0aGUgcGFyYW1ldGVycyBzcGVjaWZpZWQgaW4gYG9wdHNgLlxuICAgICAqIFRoaXMgZnVuY3Rpb24gd2lsbCBhY2NlcHQgdGhlIHNhbWUgcGFyYW1ldGVycyBhcyBgdGFza2AuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGFzeW5jLmF1dG8oe1xuICAgICAqICAgICBkZXAxOiBhc3luYy5yZXRyeWFibGUoMywgZ2V0RnJvbUZsYWt5U2VydmljZSksXG4gICAgICogICAgIHByb2Nlc3M6IFtcImRlcDFcIiwgYXN5bmMucmV0cnlhYmxlKDMsIGZ1bmN0aW9uIChyZXN1bHRzLCBjYikge1xuICAgICAqICAgICAgICAgbWF5YmVQcm9jZXNzRGF0YShyZXN1bHRzLmRlcDEsIGNiKTtcbiAgICAgKiAgICAgfSldXG4gICAgICogfSwgY2FsbGJhY2spO1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJldHJ5YWJsZSAob3B0cywgdGFzaykge1xuICAgICAgICBpZiAoIXRhc2spIHtcbiAgICAgICAgICAgIHRhc2sgPSBvcHRzO1xuICAgICAgICAgICAgb3B0cyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGFyaXR5ID0gKG9wdHMgJiYgb3B0cy5hcml0eSkgfHwgdGFzay5sZW5ndGg7XG4gICAgICAgIGlmIChpc0FzeW5jKHRhc2spKSB7XG4gICAgICAgICAgICBhcml0eSArPSAxO1xuICAgICAgICB9XG4gICAgICAgIHZhciBfdGFzayA9IHdyYXBBc3luYyh0YXNrKTtcbiAgICAgICAgcmV0dXJuIGluaXRpYWxQYXJhbXMoKGFyZ3MsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPCBhcml0eSAtIDEgfHwgY2FsbGJhY2sgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGFyZ3MucHVzaChjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBwcm9taXNlQ2FsbGJhY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIHRhc2tGbihjYikge1xuICAgICAgICAgICAgICAgIF90YXNrKC4uLmFyZ3MsIGNiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG9wdHMpIHJldHJ5KG9wdHMsIHRhc2tGbiwgY2FsbGJhY2spO1xuICAgICAgICAgICAgZWxzZSByZXRyeSh0YXNrRm4sIGNhbGxiYWNrKTtcblxuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrW1BST01JU0VfU1lNQk9MXVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSdW4gdGhlIGZ1bmN0aW9ucyBpbiB0aGUgYHRhc2tzYCBjb2xsZWN0aW9uIGluIHNlcmllcywgZWFjaCBvbmUgcnVubmluZyBvbmNlXG4gICAgICogdGhlIHByZXZpb3VzIGZ1bmN0aW9uIGhhcyBjb21wbGV0ZWQuIElmIGFueSBmdW5jdGlvbnMgaW4gdGhlIHNlcmllcyBwYXNzIGFuXG4gICAgICogZXJyb3IgdG8gaXRzIGNhbGxiYWNrLCBubyBtb3JlIGZ1bmN0aW9ucyBhcmUgcnVuLCBhbmQgYGNhbGxiYWNrYCBpc1xuICAgICAqIGltbWVkaWF0ZWx5IGNhbGxlZCB3aXRoIHRoZSB2YWx1ZSBvZiB0aGUgZXJyb3IuIE90aGVyd2lzZSwgYGNhbGxiYWNrYFxuICAgICAqIHJlY2VpdmVzIGFuIGFycmF5IG9mIHJlc3VsdHMgd2hlbiBgdGFza3NgIGhhdmUgY29tcGxldGVkLlxuICAgICAqXG4gICAgICogSXQgaXMgYWxzbyBwb3NzaWJsZSB0byB1c2UgYW4gb2JqZWN0IGluc3RlYWQgb2YgYW4gYXJyYXkuIEVhY2ggcHJvcGVydHkgd2lsbFxuICAgICAqIGJlIHJ1biBhcyBhIGZ1bmN0aW9uLCBhbmQgdGhlIHJlc3VsdHMgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGZpbmFsIGBjYWxsYmFja2BcbiAgICAgKiBhcyBhbiBvYmplY3QgaW5zdGVhZCBvZiBhbiBhcnJheS4gVGhpcyBjYW4gYmUgYSBtb3JlIHJlYWRhYmxlIHdheSBvZiBoYW5kbGluZ1xuICAgICAqICByZXN1bHRzIGZyb20ge0BsaW5rIGFzeW5jLnNlcmllc30uXG4gICAgICpcbiAgICAgKiAqKk5vdGUqKiB0aGF0IHdoaWxlIG1hbnkgaW1wbGVtZW50YXRpb25zIHByZXNlcnZlIHRoZSBvcmRlciBvZiBvYmplY3RcbiAgICAgKiBwcm9wZXJ0aWVzLCB0aGUgW0VDTUFTY3JpcHQgTGFuZ3VhZ2UgU3BlY2lmaWNhdGlvbl0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzUuMS8jc2VjLTguNilcbiAgICAgKiBleHBsaWNpdGx5IHN0YXRlcyB0aGF0XG4gICAgICpcbiAgICAgKiA+IFRoZSBtZWNoYW5pY3MgYW5kIG9yZGVyIG9mIGVudW1lcmF0aW5nIHRoZSBwcm9wZXJ0aWVzIGlzIG5vdCBzcGVjaWZpZWQuXG4gICAgICpcbiAgICAgKiBTbyBpZiB5b3UgcmVseSBvbiB0aGUgb3JkZXIgaW4gd2hpY2ggeW91ciBzZXJpZXMgb2YgZnVuY3Rpb25zIGFyZSBleGVjdXRlZCxcbiAgICAgKiBhbmQgd2FudCB0aGlzIHRvIHdvcmsgb24gYWxsIHBsYXRmb3JtcywgY29uc2lkZXIgdXNpbmcgYW4gYXJyYXkuXG4gICAgICpcbiAgICAgKiBAbmFtZSBzZXJpZXNcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb250cm9sRmxvd1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgQ29udHJvbCBGbG93XG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gdGFza3MgLSBBIGNvbGxlY3Rpb24gY29udGFpbmluZ1xuICAgICAqIFthc3luYyBmdW5jdGlvbnNde0BsaW5rIEFzeW5jRnVuY3Rpb259IHRvIHJ1biBpbiBzZXJpZXMuXG4gICAgICogRWFjaCBmdW5jdGlvbiBjYW4gY29tcGxldGUgd2l0aCBhbnkgbnVtYmVyIG9mIG9wdGlvbmFsIGByZXN1bHRgIHZhbHVlcy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQW4gb3B0aW9uYWwgY2FsbGJhY2sgdG8gcnVuIG9uY2UgYWxsIHRoZVxuICAgICAqIGZ1bmN0aW9ucyBoYXZlIGNvbXBsZXRlZC4gVGhpcyBmdW5jdGlvbiBnZXRzIGEgcmVzdWx0cyBhcnJheSAob3Igb2JqZWN0KVxuICAgICAqIGNvbnRhaW5pbmcgYWxsIHRoZSByZXN1bHQgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgYHRhc2tgIGNhbGxiYWNrcy4gSW52b2tlZFxuICAgICAqIHdpdGggKGVyciwgcmVzdWx0KS5cbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIG5vIGNhbGxiYWNrIGlzIHBhc3NlZFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvL1VzaW5nIENhbGxiYWNrc1xuICAgICAqIGFzeW5jLnNlcmllcyhbXG4gICAgICogICAgIGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgIC8vIGRvIHNvbWUgYXN5bmMgdGFza1xuICAgICAqICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsICdvbmUnKTtcbiAgICAgKiAgICAgICAgIH0sIDIwMCk7XG4gICAgICogICAgIH0sXG4gICAgICogICAgIGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgIC8vIHRoZW4gZG8gYW5vdGhlciBhc3luYyB0YXNrXG4gICAgICogICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ3R3bycpO1xuICAgICAqICAgICAgICAgfSwgMTAwKTtcbiAgICAgKiAgICAgfVxuICAgICAqIF0sIGZ1bmN0aW9uKGVyciwgcmVzdWx0cykge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiAgICAgLy8gcmVzdWx0cyBpcyBlcXVhbCB0byBbJ29uZScsJ3R3byddXG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBhbiBleGFtcGxlIHVzaW5nIG9iamVjdHMgaW5zdGVhZCBvZiBhcnJheXNcbiAgICAgKiBhc3luYy5zZXJpZXMoe1xuICAgICAqICAgICBvbmU6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgIC8vIGRvIHNvbWUgYXN5bmMgdGFza1xuICAgICAqICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIDEpO1xuICAgICAqICAgICAgICAgfSwgMjAwKTtcbiAgICAgKiAgICAgfSxcbiAgICAgKiAgICAgdHdvOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgICAgICAvLyB0aGVuIGRvIGFub3RoZXIgYXN5bmMgdGFza1xuICAgICAqICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIDIpO1xuICAgICAqICAgICAgICAgfSwgMTAwKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH0sIGZ1bmN0aW9uKGVyciwgcmVzdWx0cykge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiAgICAgLy8gcmVzdWx0cyBpcyBlcXVhbCB0bzogeyBvbmU6IDEsIHR3bzogMiB9XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvL1VzaW5nIFByb21pc2VzXG4gICAgICogYXN5bmMuc2VyaWVzKFtcbiAgICAgKiAgICAgZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICogICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ29uZScpO1xuICAgICAqICAgICAgICAgfSwgMjAwKTtcbiAgICAgKiAgICAgfSxcbiAgICAgKiAgICAgZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICogICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ3R3bycpO1xuICAgICAqICAgICAgICAgfSwgMTAwKTtcbiAgICAgKiAgICAgfVxuICAgICAqIF0pLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgICAvLyByZXN1bHRzIGlzIGVxdWFsIHRvIFsnb25lJywndHdvJ11cbiAgICAgKiB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gYW4gZXhhbXBsZSB1c2luZyBhbiBvYmplY3QgaW5zdGVhZCBvZiBhbiBhcnJheVxuICAgICAqIGFzeW5jLnNlcmllcyh7XG4gICAgICogICAgIG9uZTogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICogICAgICAgICAgICAgLy8gZG8gc29tZSBhc3luYyB0YXNrXG4gICAgICogICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgMSk7XG4gICAgICogICAgICAgICB9LCAyMDApO1xuICAgICAqICAgICB9LFxuICAgICAqICAgICB0d286IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgIC8vIHRoZW4gZG8gYW5vdGhlciBhc3luYyB0YXNrXG4gICAgICogICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgMik7XG4gICAgICogICAgICAgICB9LCAxMDApO1xuICAgICAqICAgICB9XG4gICAgICogfSkudGhlbihyZXN1bHRzID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgIC8vIHJlc3VsdHMgaXMgZXF1YWwgdG86IHsgb25lOiAxLCB0d286IDIgfVxuICAgICAqIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvL1VzaW5nIGFzeW5jL2F3YWl0XG4gICAgICogYXN5bmMgKCkgPT4ge1xuICAgICAqICAgICB0cnkge1xuICAgICAqICAgICAgICAgbGV0IHJlc3VsdHMgPSBhd2FpdCBhc3luYy5zZXJpZXMoW1xuICAgICAqICAgICAgICAgICAgIGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICogICAgICAgICAgICAgICAgICAgICAvLyBkbyBzb21lIGFzeW5jIHRhc2tcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsICdvbmUnKTtcbiAgICAgKiAgICAgICAgICAgICAgICAgfSwgMjAwKTtcbiAgICAgKiAgICAgICAgICAgICB9LFxuICAgICAqICAgICAgICAgICAgIGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICogICAgICAgICAgICAgICAgICAgICAvLyB0aGVuIGRvIGFub3RoZXIgYXN5bmMgdGFza1xuICAgICAqICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ3R3bycpO1xuICAgICAqICAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgICAqICAgICAgICAgICAgIH1cbiAgICAgKiAgICAgICAgIF0pO1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgICAgICAvLyByZXN1bHRzIGlzIGVxdWFsIHRvIFsnb25lJywndHdvJ11cbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICogLy8gYW4gZXhhbXBsZSB1c2luZyBhbiBvYmplY3QgaW5zdGVhZCBvZiBhbiBhcnJheVxuICAgICAqIGFzeW5jICgpID0+IHtcbiAgICAgKiAgICAgdHJ5IHtcbiAgICAgKiAgICAgICAgIGxldCByZXN1bHRzID0gYXdhaXQgYXN5bmMucGFyYWxsZWwoe1xuICAgICAqICAgICAgICAgICAgIG9uZTogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgIC8vIGRvIHNvbWUgYXN5bmMgdGFza1xuICAgICAqICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgMSk7XG4gICAgICogICAgICAgICAgICAgICAgIH0sIDIwMCk7XG4gICAgICogICAgICAgICAgICAgfSxcbiAgICAgKiAgICAgICAgICAgIHR3bzogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgIC8vIHRoZW4gZG8gYW5vdGhlciBhc3luYyB0YXNrXG4gICAgICogICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCAyKTtcbiAgICAgKiAgICAgICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAgKiAgICAgICAgICAgIH1cbiAgICAgKiAgICAgICAgIH0pO1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgICAgICAvLyByZXN1bHRzIGlzIGVxdWFsIHRvOiB7IG9uZTogMSwgdHdvOiAyIH1cbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICovXG4gICAgZnVuY3Rpb24gc2VyaWVzKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX3BhcmFsbGVsKGVhY2hPZlNlcmllcyQxLCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYHRydWVgIGlmIGF0IGxlYXN0IG9uZSBlbGVtZW50IGluIHRoZSBgY29sbGAgc2F0aXNmaWVzIGFuIGFzeW5jIHRlc3QuXG4gICAgICogSWYgYW55IGl0ZXJhdGVlIGNhbGwgcmV0dXJucyBgdHJ1ZWAsIHRoZSBtYWluIGBjYWxsYmFja2AgaXMgaW1tZWRpYXRlbHlcbiAgICAgKiBjYWxsZWQuXG4gICAgICpcbiAgICAgKiBAbmFtZSBzb21lXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQGFsaWFzIGFueVxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEFuIGFzeW5jIHRydXRoIHRlc3QgdG8gYXBwbHkgdG8gZWFjaCBpdGVtXG4gICAgICogaW4gdGhlIGNvbGxlY3Rpb25zIGluIHBhcmFsbGVsLlxuICAgICAqIFRoZSBpdGVyYXRlZSBzaG91bGQgY29tcGxldGUgd2l0aCBhIGJvb2xlYW4gYHJlc3VsdGAgdmFsdWUuXG4gICAgICogSW52b2tlZCB3aXRoIChpdGVtLCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIGFzIHNvb24gYXMgYW55XG4gICAgICogaXRlcmF0ZWUgcmV0dXJucyBgdHJ1ZWAsIG9yIGFmdGVyIGFsbCB0aGUgaXRlcmF0ZWUgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQuXG4gICAgICogUmVzdWx0IHdpbGwgYmUgZWl0aGVyIGB0cnVlYCBvciBgZmFsc2VgIGRlcGVuZGluZyBvbiB0aGUgdmFsdWVzIG9mIHRoZSBhc3luY1xuICAgICAqIHRlc3RzLiBJbnZva2VkIHdpdGggKGVyciwgcmVzdWx0KS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBwcm92aWRlZFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBkaXIxIGlzIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgZmlsZTEudHh0LCBmaWxlMi50eHRcbiAgICAgKiAvLyBkaXIyIGlzIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgZmlsZTMudHh0LCBmaWxlNC50eHRcbiAgICAgKiAvLyBkaXIzIGlzIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgZmlsZTUudHh0XG4gICAgICogLy8gZGlyNCBkb2VzIG5vdCBleGlzdFxuICAgICAqXG4gICAgICogLy8gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIGlmIGEgZmlsZSBleGlzdHNcbiAgICAgKiBmdW5jdGlvbiBmaWxlRXhpc3RzKGZpbGUsIGNhbGxiYWNrKSB7XG4gICAgICogICAgZnMuYWNjZXNzKGZpbGUsIGZzLmNvbnN0YW50cy5GX09LLCAoZXJyKSA9PiB7XG4gICAgICogICAgICAgIGNhbGxiYWNrKG51bGwsICFlcnIpO1xuICAgICAqICAgIH0pO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIGNhbGxiYWNrc1xuICAgICAqIGFzeW5jLnNvbWUoWydkaXIxL21pc3NpbmcudHh0JywnZGlyMi9taXNzaW5nLnR4dCcsJ2RpcjMvZmlsZTUudHh0J10sIGZpbGVFeGlzdHMsXG4gICAgICogICAgZnVuY3Rpb24oZXJyLCByZXN1bHQpIHtcbiAgICAgKiAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgICAgLy8gdHJ1ZVxuICAgICAqICAgICAgICAvLyByZXN1bHQgaXMgdHJ1ZSBzaW5jZSBzb21lIGZpbGUgaW4gdGhlIGxpc3QgZXhpc3RzXG4gICAgICogICAgfVxuICAgICAqKTtcbiAgICAgKlxuICAgICAqIGFzeW5jLnNvbWUoWydkaXIxL21pc3NpbmcudHh0JywnZGlyMi9taXNzaW5nLnR4dCcsJ2RpcjQvbWlzc2luZy50eHQnXSwgZmlsZUV4aXN0cyxcbiAgICAgKiAgICBmdW5jdGlvbihlcnIsIHJlc3VsdCkge1xuICAgICAqICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAgICAvLyBmYWxzZVxuICAgICAqICAgICAgICAvLyByZXN1bHQgaXMgZmFsc2Ugc2luY2Ugbm9uZSBvZiB0aGUgZmlsZXMgZXhpc3RzXG4gICAgICogICAgfVxuICAgICAqKTtcbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIFByb21pc2VzXG4gICAgICogYXN5bmMuc29tZShbJ2RpcjEvbWlzc2luZy50eHQnLCdkaXIyL21pc3NpbmcudHh0JywnZGlyMy9maWxlNS50eHQnXSwgZmlsZUV4aXN0cylcbiAgICAgKiAudGhlbiggcmVzdWx0ID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgLy8gdHJ1ZVxuICAgICAqICAgICAvLyByZXN1bHQgaXMgdHJ1ZSBzaW5jZSBzb21lIGZpbGUgaW4gdGhlIGxpc3QgZXhpc3RzXG4gICAgICogfSkuY2F0Y2goIGVyciA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiBhc3luYy5zb21lKFsnZGlyMS9taXNzaW5nLnR4dCcsJ2RpcjIvbWlzc2luZy50eHQnLCdkaXI0L21pc3NpbmcudHh0J10sIGZpbGVFeGlzdHMpXG4gICAgICogLnRoZW4oIHJlc3VsdCA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XG4gICAgICogICAgIC8vIGZhbHNlXG4gICAgICogICAgIC8vIHJlc3VsdCBpcyBmYWxzZSBzaW5jZSBub25lIG9mIHRoZSBmaWxlcyBleGlzdHNcbiAgICAgKiB9KS5jYXRjaCggZXJyID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIGFzeW5jL2F3YWl0XG4gICAgICogYXN5bmMgKCkgPT4ge1xuICAgICAqICAgICB0cnkge1xuICAgICAqICAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IGFzeW5jLnNvbWUoWydkaXIxL21pc3NpbmcudHh0JywnZGlyMi9taXNzaW5nLnR4dCcsJ2RpcjMvZmlsZTUudHh0J10sIGZpbGVFeGlzdHMpO1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgICAgIC8vIHRydWVcbiAgICAgKiAgICAgICAgIC8vIHJlc3VsdCBpcyB0cnVlIHNpbmNlIHNvbWUgZmlsZSBpbiB0aGUgbGlzdCBleGlzdHNcbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICogYXN5bmMgKCkgPT4ge1xuICAgICAqICAgICB0cnkge1xuICAgICAqICAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IGFzeW5jLnNvbWUoWydkaXIxL21pc3NpbmcudHh0JywnZGlyMi9taXNzaW5nLnR4dCcsJ2RpcjQvbWlzc2luZy50eHQnXSwgZmlsZUV4aXN0cyk7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAgICAgLy8gZmFsc2VcbiAgICAgKiAgICAgICAgIC8vIHJlc3VsdCBpcyBmYWxzZSBzaW5jZSBub25lIG9mIHRoZSBmaWxlcyBleGlzdHNcbiAgICAgKiAgICAgfVxuICAgICAqICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICovXG4gICAgZnVuY3Rpb24gc29tZShjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9jcmVhdGVUZXN0ZXIoQm9vbGVhbiwgcmVzID0+IHJlcykoZWFjaE9mJDEsIGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaylcbiAgICB9XG4gICAgdmFyIHNvbWUkMSA9IGF3YWl0aWZ5KHNvbWUsIDMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNhbWUgYXMgW2Bzb21lYF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLnNvbWV9IGJ1dCBydW5zIGEgbWF4aW11bSBvZiBgbGltaXRgIGFzeW5jIG9wZXJhdGlvbnMgYXQgYSB0aW1lLlxuICAgICAqXG4gICAgICogQG5hbWUgc29tZUxpbWl0XG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMuc29tZV17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLnNvbWV9XG4gICAgICogQGFsaWFzIGFueUxpbWl0XG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfEFzeW5jSXRlcmFibGV8T2JqZWN0fSBjb2xsIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbGltaXQgLSBUaGUgbWF4aW11bSBudW1iZXIgb2YgYXN5bmMgb3BlcmF0aW9ucyBhdCBhIHRpbWUuXG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEFuIGFzeW5jIHRydXRoIHRlc3QgdG8gYXBwbHkgdG8gZWFjaCBpdGVtXG4gICAgICogaW4gdGhlIGNvbGxlY3Rpb25zIGluIHBhcmFsbGVsLlxuICAgICAqIFRoZSBpdGVyYXRlZSBzaG91bGQgY29tcGxldGUgd2l0aCBhIGJvb2xlYW4gYHJlc3VsdGAgdmFsdWUuXG4gICAgICogSW52b2tlZCB3aXRoIChpdGVtLCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIGFzIHNvb24gYXMgYW55XG4gICAgICogaXRlcmF0ZWUgcmV0dXJucyBgdHJ1ZWAsIG9yIGFmdGVyIGFsbCB0aGUgaXRlcmF0ZWUgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQuXG4gICAgICogUmVzdWx0IHdpbGwgYmUgZWl0aGVyIGB0cnVlYCBvciBgZmFsc2VgIGRlcGVuZGluZyBvbiB0aGUgdmFsdWVzIG9mIHRoZSBhc3luY1xuICAgICAqIHRlc3RzLiBJbnZva2VkIHdpdGggKGVyciwgcmVzdWx0KS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBwcm92aWRlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNvbWVMaW1pdChjb2xsLCBsaW1pdCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBfY3JlYXRlVGVzdGVyKEJvb2xlYW4sIHJlcyA9PiByZXMpKGVhY2hPZkxpbWl0JDIobGltaXQpLCBjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuICAgIHZhciBzb21lTGltaXQkMSA9IGF3YWl0aWZ5KHNvbWVMaW1pdCwgNCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyBbYHNvbWVgXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuc29tZX0gYnV0IHJ1bnMgb25seSBhIHNpbmdsZSBhc3luYyBvcGVyYXRpb24gYXQgYSB0aW1lLlxuICAgICAqXG4gICAgICogQG5hbWUgc29tZVNlcmllc1xuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgW2FzeW5jLnNvbWVde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5zb21lfVxuICAgICAqIEBhbGlhcyBhbnlTZXJpZXNcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBbiBhc3luYyB0cnV0aCB0ZXN0IHRvIGFwcGx5IHRvIGVhY2ggaXRlbVxuICAgICAqIGluIHRoZSBjb2xsZWN0aW9ucyBpbiBzZXJpZXMuXG4gICAgICogVGhlIGl0ZXJhdGVlIHNob3VsZCBjb21wbGV0ZSB3aXRoIGEgYm9vbGVhbiBgcmVzdWx0YCB2YWx1ZS5cbiAgICAgKiBJbnZva2VkIHdpdGggKGl0ZW0sIGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgYXMgc29vbiBhcyBhbnlcbiAgICAgKiBpdGVyYXRlZSByZXR1cm5zIGB0cnVlYCwgb3IgYWZ0ZXIgYWxsIHRoZSBpdGVyYXRlZSBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZC5cbiAgICAgKiBSZXN1bHQgd2lsbCBiZSBlaXRoZXIgYHRydWVgIG9yIGBmYWxzZWAgZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZXMgb2YgdGhlIGFzeW5jXG4gICAgICogdGVzdHMuIEludm9rZWQgd2l0aCAoZXJyLCByZXN1bHQpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIG5vIGNhbGxiYWNrIHByb3ZpZGVkXG4gICAgICovXG4gICAgZnVuY3Rpb24gc29tZVNlcmllcyhjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9jcmVhdGVUZXN0ZXIoQm9vbGVhbiwgcmVzID0+IHJlcykoZWFjaE9mU2VyaWVzJDEsIGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaylcbiAgICB9XG4gICAgdmFyIHNvbWVTZXJpZXMkMSA9IGF3YWl0aWZ5KHNvbWVTZXJpZXMsIDMpO1xuXG4gICAgLyoqXG4gICAgICogU29ydHMgYSBsaXN0IGJ5IHRoZSByZXN1bHRzIG9mIHJ1bm5pbmcgZWFjaCBgY29sbGAgdmFsdWUgdGhyb3VnaCBhbiBhc3luY1xuICAgICAqIGBpdGVyYXRlZWAuXG4gICAgICpcbiAgICAgKiBAbmFtZSBzb3J0QnlcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8QXN5bmNJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBbiBhc3luYyBmdW5jdGlvbiB0byBhcHBseSB0byBlYWNoIGl0ZW0gaW5cbiAgICAgKiBgY29sbGAuXG4gICAgICogVGhlIGl0ZXJhdGVlIHNob3VsZCBjb21wbGV0ZSB3aXRoIGEgdmFsdWUgdG8gdXNlIGFzIHRoZSBzb3J0IGNyaXRlcmlhIGFzXG4gICAgICogaXRzIGByZXN1bHRgLlxuICAgICAqIEludm9rZWQgd2l0aCAoaXRlbSwgY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgYWZ0ZXIgYWxsIHRoZVxuICAgICAqIGBpdGVyYXRlZWAgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQsIG9yIGFuIGVycm9yIG9jY3Vycy4gUmVzdWx0cyBpcyB0aGUgaXRlbXNcbiAgICAgKiBmcm9tIHRoZSBvcmlnaW5hbCBgY29sbGAgc29ydGVkIGJ5IHRoZSB2YWx1ZXMgcmV0dXJuZWQgYnkgdGhlIGBpdGVyYXRlZWBcbiAgICAgKiBjYWxscy4gSW52b2tlZCB3aXRoIChlcnIsIHJlc3VsdHMpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIG5vIGNhbGxiYWNrIHBhc3NlZFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBiaWdmaWxlLnR4dCBpcyBhIGZpbGUgdGhhdCBpcyAyNTExMDAgYnl0ZXMgaW4gc2l6ZVxuICAgICAqIC8vIG1lZGl1bWZpbGUudHh0IGlzIGEgZmlsZSB0aGF0IGlzIDExMDAwIGJ5dGVzIGluIHNpemVcbiAgICAgKiAvLyBzbWFsbGZpbGUudHh0IGlzIGEgZmlsZSB0aGF0IGlzIDEyMSBieXRlcyBpbiBzaXplXG4gICAgICpcbiAgICAgKiAvLyBhc3luY2hyb25vdXMgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBmaWxlIHNpemUgaW4gYnl0ZXNcbiAgICAgKiBmdW5jdGlvbiBnZXRGaWxlU2l6ZUluQnl0ZXMoZmlsZSwgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgZnMuc3RhdChmaWxlLCBmdW5jdGlvbihlcnIsIHN0YXQpIHtcbiAgICAgKiAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgKiAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgKiAgICAgICAgIH1cbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsIHN0YXQuc2l6ZSk7XG4gICAgICogICAgIH0pO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIGNhbGxiYWNrc1xuICAgICAqIGFzeW5jLnNvcnRCeShbJ21lZGl1bWZpbGUudHh0Jywnc21hbGxmaWxlLnR4dCcsJ2JpZ2ZpbGUudHh0J10sIGdldEZpbGVTaXplSW5CeXRlcyxcbiAgICAgKiAgICAgZnVuY3Rpb24oZXJyLCByZXN1bHRzKSB7XG4gICAgICogICAgICAgICBpZiAoZXJyKSB7XG4gICAgICogICAgICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgICAgIH0gZWxzZSB7XG4gICAgICogICAgICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgICAgICAgICAgLy8gcmVzdWx0cyBpcyBub3cgdGhlIG9yaWdpbmFsIGFycmF5IG9mIGZpbGVzIHNvcnRlZCBieVxuICAgICAqICAgICAgICAgICAgIC8vIGZpbGUgc2l6ZSAoYXNjZW5kaW5nIGJ5IGRlZmF1bHQpLCBlLmcuXG4gICAgICogICAgICAgICAgICAgLy8gWyAnc21hbGxmaWxlLnR4dCcsICdtZWRpdW1maWxlLnR4dCcsICdiaWdmaWxlLnR4dCddXG4gICAgICogICAgICAgICB9XG4gICAgICogICAgIH1cbiAgICAgKiApO1xuICAgICAqXG4gICAgICogLy8gQnkgbW9kaWZ5aW5nIHRoZSBjYWxsYmFjayBwYXJhbWV0ZXIgdGhlXG4gICAgICogLy8gc29ydGluZyBvcmRlciBjYW4gYmUgaW5mbHVlbmNlZDpcbiAgICAgKlxuICAgICAqIC8vIGFzY2VuZGluZyBvcmRlclxuICAgICAqIGFzeW5jLnNvcnRCeShbJ21lZGl1bWZpbGUudHh0Jywnc21hbGxmaWxlLnR4dCcsJ2JpZ2ZpbGUudHh0J10sIGZ1bmN0aW9uKGZpbGUsIGNhbGxiYWNrKSB7XG4gICAgICogICAgIGdldEZpbGVTaXplSW5CeXRlcyhmaWxlLCBmdW5jdGlvbihnZXRGaWxlU2l6ZUVyciwgZmlsZVNpemUpIHtcbiAgICAgKiAgICAgICAgIGlmIChnZXRGaWxlU2l6ZUVycikgcmV0dXJuIGNhbGxiYWNrKGdldEZpbGVTaXplRXJyKTtcbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsIGZpbGVTaXplKTtcbiAgICAgKiAgICAgfSk7XG4gICAgICogfSwgZnVuY3Rpb24oZXJyLCByZXN1bHRzKSB7XG4gICAgICogICAgICAgICBpZiAoZXJyKSB7XG4gICAgICogICAgICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgICAgIH0gZWxzZSB7XG4gICAgICogICAgICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgICAgICAgICAgLy8gcmVzdWx0cyBpcyBub3cgdGhlIG9yaWdpbmFsIGFycmF5IG9mIGZpbGVzIHNvcnRlZCBieVxuICAgICAqICAgICAgICAgICAgIC8vIGZpbGUgc2l6ZSAoYXNjZW5kaW5nIGJ5IGRlZmF1bHQpLCBlLmcuXG4gICAgICogICAgICAgICAgICAgLy8gWyAnc21hbGxmaWxlLnR4dCcsICdtZWRpdW1maWxlLnR4dCcsICdiaWdmaWxlLnR4dCddXG4gICAgICogICAgICAgICB9XG4gICAgICogICAgIH1cbiAgICAgKiApO1xuICAgICAqXG4gICAgICogLy8gZGVzY2VuZGluZyBvcmRlclxuICAgICAqIGFzeW5jLnNvcnRCeShbJ2JpZ2ZpbGUudHh0JywnbWVkaXVtZmlsZS50eHQnLCdzbWFsbGZpbGUudHh0J10sIGZ1bmN0aW9uKGZpbGUsIGNhbGxiYWNrKSB7XG4gICAgICogICAgIGdldEZpbGVTaXplSW5CeXRlcyhmaWxlLCBmdW5jdGlvbihnZXRGaWxlU2l6ZUVyciwgZmlsZVNpemUpIHtcbiAgICAgKiAgICAgICAgIGlmIChnZXRGaWxlU2l6ZUVycikge1xuICAgICAqICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhnZXRGaWxlU2l6ZUVycik7XG4gICAgICogICAgICAgICB9XG4gICAgICogICAgICAgICBjYWxsYmFjayhudWxsLCBmaWxlU2l6ZSAqIC0xKTtcbiAgICAgKiAgICAgfSk7XG4gICAgICogfSwgZnVuY3Rpb24oZXJyLCByZXN1bHRzKSB7XG4gICAgICogICAgICAgICBpZiAoZXJyKSB7XG4gICAgICogICAgICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgICAgIH0gZWxzZSB7XG4gICAgICogICAgICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgICAgICAgICAgLy8gcmVzdWx0cyBpcyBub3cgdGhlIG9yaWdpbmFsIGFycmF5IG9mIGZpbGVzIHNvcnRlZCBieVxuICAgICAqICAgICAgICAgICAgIC8vIGZpbGUgc2l6ZSAoYXNjZW5kaW5nIGJ5IGRlZmF1bHQpLCBlLmcuXG4gICAgICogICAgICAgICAgICAgLy8gWyAnYmlnZmlsZS50eHQnLCAnbWVkaXVtZmlsZS50eHQnLCAnc21hbGxmaWxlLnR4dCddXG4gICAgICogICAgICAgICB9XG4gICAgICogICAgIH1cbiAgICAgKiApO1xuICAgICAqXG4gICAgICogLy8gRXJyb3IgaGFuZGxpbmdcbiAgICAgKiBhc3luYy5zb3J0QnkoWydtZWRpdW1maWxlLnR4dCcsJ3NtYWxsZmlsZS50eHQnLCdtaXNzaW5nZmlsZS50eHQnXSwgZ2V0RmlsZVNpemVJbkJ5dGVzLFxuICAgICAqICAgICBmdW5jdGlvbihlcnIsIHJlc3VsdHMpIHtcbiAgICAgKiAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgKiAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAqICAgICAgICAgICAgIC8vIFsgRXJyb3I6IEVOT0VOVDogbm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSBdXG4gICAgICogICAgICAgICB9IGVsc2Uge1xuICAgICAqICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgICAgICAgfVxuICAgICAqICAgICB9XG4gICAgICogKTtcbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIFByb21pc2VzXG4gICAgICogYXN5bmMuc29ydEJ5KFsnbWVkaXVtZmlsZS50eHQnLCdzbWFsbGZpbGUudHh0JywnYmlnZmlsZS50eHQnXSwgZ2V0RmlsZVNpemVJbkJ5dGVzKVxuICAgICAqIC50aGVuKCByZXN1bHRzID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgIC8vIHJlc3VsdHMgaXMgbm93IHRoZSBvcmlnaW5hbCBhcnJheSBvZiBmaWxlcyBzb3J0ZWQgYnlcbiAgICAgKiAgICAgLy8gZmlsZSBzaXplIChhc2NlbmRpbmcgYnkgZGVmYXVsdCksIGUuZy5cbiAgICAgKiAgICAgLy8gWyAnc21hbGxmaWxlLnR4dCcsICdtZWRpdW1maWxlLnR4dCcsICdiaWdmaWxlLnR4dCddXG4gICAgICogfSkuY2F0Y2goIGVyciA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBFcnJvciBoYW5kbGluZ1xuICAgICAqIGFzeW5jLnNvcnRCeShbJ21lZGl1bWZpbGUudHh0Jywnc21hbGxmaWxlLnR4dCcsJ21pc3NpbmdmaWxlLnR4dCddLCBnZXRGaWxlU2l6ZUluQnl0ZXMpXG4gICAgICogLnRoZW4oIHJlc3VsdHMgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcbiAgICAgKiB9KS5jYXRjaCggZXJyID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgLy8gWyBFcnJvcjogRU5PRU5UOiBubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IF1cbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIGFzeW5jL2F3YWl0XG4gICAgICogKGFzeW5jICgpID0+IHtcbiAgICAgKiAgICAgdHJ5IHtcbiAgICAgKiAgICAgICAgIGxldCByZXN1bHRzID0gYXdhaXQgYXN5bmMuc29ydEJ5KFsnYmlnZmlsZS50eHQnLCdtZWRpdW1maWxlLnR4dCcsJ3NtYWxsZmlsZS50eHQnXSwgZ2V0RmlsZVNpemVJbkJ5dGVzKTtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdHMpO1xuICAgICAqICAgICAgICAgLy8gcmVzdWx0cyBpcyBub3cgdGhlIG9yaWdpbmFsIGFycmF5IG9mIGZpbGVzIHNvcnRlZCBieVxuICAgICAqICAgICAgICAgLy8gZmlsZSBzaXplIChhc2NlbmRpbmcgYnkgZGVmYXVsdCksIGUuZy5cbiAgICAgKiAgICAgICAgIC8vIFsgJ3NtYWxsZmlsZS50eHQnLCAnbWVkaXVtZmlsZS50eHQnLCAnYmlnZmlsZS50eHQnXVxuICAgICAqICAgICB9XG4gICAgICogICAgIGNhdGNoIChlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgIH1cbiAgICAgKiB9KSgpO1xuICAgICAqXG4gICAgICogLy8gRXJyb3IgaGFuZGxpbmdcbiAgICAgKiBhc3luYyAoKSA9PiB7XG4gICAgICogICAgIHRyeSB7XG4gICAgICogICAgICAgICBsZXQgcmVzdWx0cyA9IGF3YWl0IGFzeW5jLnNvcnRCeShbJ21pc3NpbmdmaWxlLnR4dCcsJ21lZGl1bWZpbGUudHh0Jywnc21hbGxmaWxlLnR4dCddLCBnZXRGaWxlU2l6ZUluQnl0ZXMpO1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICogICAgIH1cbiAgICAgKiAgICAgY2F0Y2ggKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgICAgIC8vIFsgRXJyb3I6IEVOT0VOVDogbm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSBdXG4gICAgICogICAgIH1cbiAgICAgKiB9XG4gICAgICpcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzb3J0QnkgKGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgX2l0ZXJhdGVlID0gd3JhcEFzeW5jKGl0ZXJhdGVlKTtcbiAgICAgICAgcmV0dXJuIG1hcCQxKGNvbGwsICh4LCBpdGVyQ2IpID0+IHtcbiAgICAgICAgICAgIF9pdGVyYXRlZSh4LCAoZXJyLCBjcml0ZXJpYSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBpdGVyQ2IoZXJyKTtcbiAgICAgICAgICAgICAgICBpdGVyQ2IoZXJyLCB7dmFsdWU6IHgsIGNyaXRlcmlhfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgKGVyciwgcmVzdWx0cykgPT4ge1xuICAgICAgICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXN1bHRzLnNvcnQoY29tcGFyYXRvcikubWFwKHYgPT4gdi52YWx1ZSkpO1xuICAgICAgICB9KTtcblxuICAgICAgICBmdW5jdGlvbiBjb21wYXJhdG9yKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgICAgICB2YXIgYSA9IGxlZnQuY3JpdGVyaWEsIGIgPSByaWdodC5jcml0ZXJpYTtcbiAgICAgICAgICAgIHJldHVybiBhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogMDtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgc29ydEJ5JDEgPSBhd2FpdGlmeShzb3J0QnksIDMpO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyBhIHRpbWUgbGltaXQgb24gYW4gYXN5bmNocm9ub3VzIGZ1bmN0aW9uLiBJZiB0aGUgZnVuY3Rpb24gZG9lcyBub3QgY2FsbFxuICAgICAqIGl0cyBjYWxsYmFjayB3aXRoaW4gdGhlIHNwZWNpZmllZCBtaWxsaXNlY29uZHMsIGl0IHdpbGwgYmUgY2FsbGVkIHdpdGggYVxuICAgICAqIHRpbWVvdXQgZXJyb3IuIFRoZSBjb2RlIHByb3BlcnR5IGZvciB0aGUgZXJyb3Igb2JqZWN0IHdpbGwgYmUgYCdFVElNRURPVVQnYC5cbiAgICAgKlxuICAgICAqIEBuYW1lIHRpbWVvdXRcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpVdGlsc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gYXN5bmNGbiAtIFRoZSBhc3luYyBmdW5jdGlvbiB0byBsaW1pdCBpbiB0aW1lLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBtaWxsaXNlY29uZHMgLSBUaGUgc3BlY2lmaWVkIHRpbWUgbGltaXQuXG4gICAgICogQHBhcmFtIHsqfSBbaW5mb10gLSBBbnkgdmFyaWFibGUgeW91IHdhbnQgYXR0YWNoZWQgKGBzdHJpbmdgLCBgb2JqZWN0YCwgZXRjKVxuICAgICAqIHRvIHRpbWVvdXQgRXJyb3IgZm9yIG1vcmUgaW5mb3JtYXRpb24uLlxuICAgICAqIEByZXR1cm5zIHtBc3luY0Z1bmN0aW9ufSBSZXR1cm5zIGEgd3JhcHBlZCBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkIHdpdGggYW55XG4gICAgICogb2YgdGhlIGNvbnRyb2wgZmxvdyBmdW5jdGlvbnMuXG4gICAgICogSW52b2tlIHRoaXMgZnVuY3Rpb24gd2l0aCB0aGUgc2FtZSBwYXJhbWV0ZXJzIGFzIHlvdSB3b3VsZCBgYXN5bmNGdW5jYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gbXlGdW5jdGlvbihmb28sIGNhbGxiYWNrKSB7XG4gICAgICogICAgIGRvQXN5bmNUYXNrKGZvbywgZnVuY3Rpb24oZXJyLCBkYXRhKSB7XG4gICAgICogICAgICAgICAvLyBoYW5kbGUgZXJyb3JzXG4gICAgICogICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgKlxuICAgICAqICAgICAgICAgLy8gZG8gc29tZSBzdHVmZiAuLi5cbiAgICAgKlxuICAgICAqICAgICAgICAgLy8gcmV0dXJuIHByb2Nlc3NlZCBkYXRhXG4gICAgICogICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCwgZGF0YSk7XG4gICAgICogICAgIH0pO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIHZhciB3cmFwcGVkID0gYXN5bmMudGltZW91dChteUZ1bmN0aW9uLCAxMDAwKTtcbiAgICAgKlxuICAgICAqIC8vIGNhbGwgYHdyYXBwZWRgIGFzIHlvdSB3b3VsZCBgbXlGdW5jdGlvbmBcbiAgICAgKiB3cmFwcGVkKHsgYmFyOiAnYmFyJyB9LCBmdW5jdGlvbihlcnIsIGRhdGEpIHtcbiAgICAgKiAgICAgLy8gaWYgYG15RnVuY3Rpb25gIHRha2VzIDwgMTAwMCBtcyB0byBleGVjdXRlLCBgZXJyYFxuICAgICAqICAgICAvLyBhbmQgYGRhdGFgIHdpbGwgaGF2ZSB0aGVpciBleHBlY3RlZCB2YWx1ZXNcbiAgICAgKlxuICAgICAqICAgICAvLyBlbHNlIGBlcnJgIHdpbGwgYmUgYW4gRXJyb3Igd2l0aCB0aGUgY29kZSAnRVRJTUVET1VUJ1xuICAgICAqIH0pO1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRpbWVvdXQoYXN5bmNGbiwgbWlsbGlzZWNvbmRzLCBpbmZvKSB7XG4gICAgICAgIHZhciBmbiA9IHdyYXBBc3luYyhhc3luY0ZuKTtcblxuICAgICAgICByZXR1cm4gaW5pdGlhbFBhcmFtcygoYXJncywgY2FsbGJhY2spID0+IHtcbiAgICAgICAgICAgIHZhciB0aW1lZE91dCA9IGZhbHNlO1xuICAgICAgICAgICAgdmFyIHRpbWVyO1xuXG4gICAgICAgICAgICBmdW5jdGlvbiB0aW1lb3V0Q2FsbGJhY2soKSB7XG4gICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBhc3luY0ZuLm5hbWUgfHwgJ2Fub255bW91cyc7XG4gICAgICAgICAgICAgICAgdmFyIGVycm9yICA9IG5ldyBFcnJvcignQ2FsbGJhY2sgZnVuY3Rpb24gXCInICsgbmFtZSArICdcIiB0aW1lZCBvdXQuJyk7XG4gICAgICAgICAgICAgICAgZXJyb3IuY29kZSA9ICdFVElNRURPVVQnO1xuICAgICAgICAgICAgICAgIGlmIChpbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yLmluZm8gPSBpbmZvO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aW1lZE91dCA9IHRydWU7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhcmdzLnB1c2goKC4uLmNiQXJncykgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGltZWRPdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soLi4uY2JBcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8gc2V0dXAgdGltZXIgYW5kIGNhbGwgb3JpZ2luYWwgZnVuY3Rpb25cbiAgICAgICAgICAgIHRpbWVyID0gc2V0VGltZW91dCh0aW1lb3V0Q2FsbGJhY2ssIG1pbGxpc2Vjb25kcyk7XG4gICAgICAgICAgICBmbiguLi5hcmdzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmFuZ2Uoc2l6ZSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gQXJyYXkoc2l6ZSk7XG4gICAgICAgIHdoaWxlIChzaXplLS0pIHtcbiAgICAgICAgICAgIHJlc3VsdFtzaXplXSA9IHNpemU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyBbdGltZXNde0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy50aW1lc30gYnV0IHJ1bnMgYSBtYXhpbXVtIG9mIGBsaW1pdGAgYXN5bmMgb3BlcmF0aW9ucyBhdCBhXG4gICAgICogdGltZS5cbiAgICAgKlxuICAgICAqIEBuYW1lIHRpbWVzTGltaXRcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb250cm9sRmxvd1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy50aW1lc117QGxpbmsgbW9kdWxlOkNvbnRyb2xGbG93LnRpbWVzfVxuICAgICAqIEBjYXRlZ29yeSBDb250cm9sIEZsb3dcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gY291bnQgLSBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIHJ1biB0aGUgZnVuY3Rpb24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbWl0IC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGFzeW5jIG9wZXJhdGlvbnMgYXQgYSB0aW1lLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBUaGUgYXN5bmMgZnVuY3Rpb24gdG8gY2FsbCBgbmAgdGltZXMuXG4gICAgICogSW52b2tlZCB3aXRoIHRoZSBpdGVyYXRpb24gaW5kZXggYW5kIGEgY2FsbGJhY2s6IChuLCBuZXh0KS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAtIHNlZSBbYXN5bmMubWFwXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMubWFwfS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBubyBjYWxsYmFjayBpcyBwcm92aWRlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRpbWVzTGltaXQoY291bnQsIGxpbWl0LCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIF9pdGVyYXRlZSA9IHdyYXBBc3luYyhpdGVyYXRlZSk7XG4gICAgICAgIHJldHVybiBtYXBMaW1pdCQxKHJhbmdlKGNvdW50KSwgbGltaXQsIF9pdGVyYXRlZSwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhbGxzIHRoZSBgaXRlcmF0ZWVgIGZ1bmN0aW9uIGBuYCB0aW1lcywgYW5kIGFjY3VtdWxhdGVzIHJlc3VsdHMgaW4gdGhlIHNhbWVcbiAgICAgKiBtYW5uZXIgeW91IHdvdWxkIHVzZSB3aXRoIFttYXBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5tYXB9LlxuICAgICAqXG4gICAgICogQG5hbWUgdGltZXNcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb250cm9sRmxvd1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5tYXBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5tYXB9XG4gICAgICogQGNhdGVnb3J5IENvbnRyb2wgRmxvd1xuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuIC0gVGhlIG51bWJlciBvZiB0aW1lcyB0byBydW4gdGhlIGZ1bmN0aW9uLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBUaGUgYXN5bmMgZnVuY3Rpb24gdG8gY2FsbCBgbmAgdGltZXMuXG4gICAgICogSW52b2tlZCB3aXRoIHRoZSBpdGVyYXRpb24gaW5kZXggYW5kIGEgY2FsbGJhY2s6IChuLCBuZXh0KS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAtIHNlZSB7QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLm1hcH0uXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgaXMgcHJvdmlkZWRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gUHJldGVuZCB0aGlzIGlzIHNvbWUgY29tcGxpY2F0ZWQgYXN5bmMgZmFjdG9yeVxuICAgICAqIHZhciBjcmVhdGVVc2VyID0gZnVuY3Rpb24oaWQsIGNhbGxiYWNrKSB7XG4gICAgICogICAgIGNhbGxiYWNrKG51bGwsIHtcbiAgICAgKiAgICAgICAgIGlkOiAndXNlcicgKyBpZFxuICAgICAqICAgICB9KTtcbiAgICAgKiB9O1xuICAgICAqXG4gICAgICogLy8gZ2VuZXJhdGUgNSB1c2Vyc1xuICAgICAqIGFzeW5jLnRpbWVzKDUsIGZ1bmN0aW9uKG4sIG5leHQpIHtcbiAgICAgKiAgICAgY3JlYXRlVXNlcihuLCBmdW5jdGlvbihlcnIsIHVzZXIpIHtcbiAgICAgKiAgICAgICAgIG5leHQoZXJyLCB1c2VyKTtcbiAgICAgKiAgICAgfSk7XG4gICAgICogfSwgZnVuY3Rpb24oZXJyLCB1c2Vycykge1xuICAgICAqICAgICAvLyB3ZSBzaG91bGQgbm93IGhhdmUgNSB1c2Vyc1xuICAgICAqIH0pO1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRpbWVzIChuLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIHRpbWVzTGltaXQobiwgSW5maW5pdHksIGl0ZXJhdGVlLCBjYWxsYmFjaylcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyBbdGltZXNde0BsaW5rIG1vZHVsZTpDb250cm9sRmxvdy50aW1lc30gYnV0IHJ1bnMgb25seSBhIHNpbmdsZSBhc3luYyBvcGVyYXRpb24gYXQgYSB0aW1lLlxuICAgICAqXG4gICAgICogQG5hbWUgdGltZXNTZXJpZXNcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb250cm9sRmxvd1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy50aW1lc117QGxpbmsgbW9kdWxlOkNvbnRyb2xGbG93LnRpbWVzfVxuICAgICAqIEBjYXRlZ29yeSBDb250cm9sIEZsb3dcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbiAtIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gcnVuIHRoZSBmdW5jdGlvbi5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gVGhlIGFzeW5jIGZ1bmN0aW9uIHRvIGNhbGwgYG5gIHRpbWVzLlxuICAgICAqIEludm9rZWQgd2l0aCB0aGUgaXRlcmF0aW9uIGluZGV4IGFuZCBhIGNhbGxiYWNrOiAobiwgbmV4dCkuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgLSBzZWUge0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5tYXB9LlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIG5vIGNhbGxiYWNrIGlzIHByb3ZpZGVkXG4gICAgICovXG4gICAgZnVuY3Rpb24gdGltZXNTZXJpZXMgKG4sIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gdGltZXNMaW1pdChuLCAxLCBpdGVyYXRlZSwgY2FsbGJhY2spXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSByZWxhdGl2ZSBvZiBgcmVkdWNlYC4gIFRha2VzIGFuIE9iamVjdCBvciBBcnJheSwgYW5kIGl0ZXJhdGVzIG92ZXIgZWFjaFxuICAgICAqIGVsZW1lbnQgaW4gcGFyYWxsZWwsIGVhY2ggc3RlcCBwb3RlbnRpYWxseSBtdXRhdGluZyBhbiBgYWNjdW11bGF0b3JgIHZhbHVlLlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBhY2N1bXVsYXRvciBkZWZhdWx0cyB0byB0aGUgdHlwZSBvZiBjb2xsZWN0aW9uIHBhc3NlZCBpbi5cbiAgICAgKlxuICAgICAqIEBuYW1lIHRyYW5zZm9ybVxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHsqfSBbYWNjdW11bGF0b3JdIC0gVGhlIGluaXRpYWwgc3RhdGUgb2YgdGhlIHRyYW5zZm9ybS4gIElmIG9taXR0ZWQsXG4gICAgICogaXQgd2lsbCBkZWZhdWx0IHRvIGFuIGVtcHR5IE9iamVjdCBvciBBcnJheSwgZGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mIGBjb2xsYFxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBIGZ1bmN0aW9uIGFwcGxpZWQgdG8gZWFjaCBpdGVtIGluIHRoZVxuICAgICAqIGNvbGxlY3Rpb24gdGhhdCBwb3RlbnRpYWxseSBtb2RpZmllcyB0aGUgYWNjdW11bGF0b3IuXG4gICAgICogSW52b2tlZCB3aXRoIChhY2N1bXVsYXRvciwgaXRlbSwga2V5LCBjYWxsYmFjaykuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIGFmdGVyIGFsbCB0aGVcbiAgICAgKiBgaXRlcmF0ZWVgIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLiBSZXN1bHQgaXMgdGhlIHRyYW5zZm9ybWVkIGFjY3VtdWxhdG9yLlxuICAgICAqIEludm9rZWQgd2l0aCAoZXJyLCByZXN1bHQpLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIG5vIGNhbGxiYWNrIHByb3ZpZGVkXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vIGZpbGUxLnR4dCBpcyBhIGZpbGUgdGhhdCBpcyAxMDAwIGJ5dGVzIGluIHNpemVcbiAgICAgKiAvLyBmaWxlMi50eHQgaXMgYSBmaWxlIHRoYXQgaXMgMjAwMCBieXRlcyBpbiBzaXplXG4gICAgICogLy8gZmlsZTMudHh0IGlzIGEgZmlsZSB0aGF0IGlzIDMwMDAgYnl0ZXMgaW4gc2l6ZVxuICAgICAqXG4gICAgICogLy8gaGVscGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBodW1hbi1yZWFkYWJsZSBzaXplIGZvcm1hdCBmcm9tIGJ5dGVzXG4gICAgICogZnVuY3Rpb24gZm9ybWF0Qnl0ZXMoYnl0ZXMsIGRlY2ltYWxzID0gMikge1xuICAgICAqICAgLy8gaW1wbGVtZW50YXRpb24gbm90IGluY2x1ZGVkIGZvciBicmV2aXR5XG4gICAgICogICByZXR1cm4gaHVtYW5SZWFkYmxlRmlsZXNpemU7XG4gICAgICogfVxuICAgICAqXG4gICAgICogY29uc3QgZmlsZUxpc3QgPSBbJ2ZpbGUxLnR4dCcsJ2ZpbGUyLnR4dCcsJ2ZpbGUzLnR4dCddO1xuICAgICAqXG4gICAgICogLy8gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgZmlsZSBzaXplLCB0cmFuc2Zvcm1lZCB0byBodW1hbi1yZWFkYWJsZSBmb3JtYXRcbiAgICAgKiAvLyBlLmcuIDEwMjQgYnl0ZXMgPSAxS0IsIDEyMzQgYnl0ZXMgPSAxLjIxIEtCLCAxMDQ4NTc2IGJ5dGVzID0gMU1CLCBldGMuXG4gICAgICogZnVuY3Rpb24gdHJhbnNmb3JtRmlsZVNpemUoYWNjLCB2YWx1ZSwga2V5LCBjYWxsYmFjaykge1xuICAgICAqICAgICBmcy5zdGF0KHZhbHVlLCBmdW5jdGlvbihlcnIsIHN0YXQpIHtcbiAgICAgKiAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgKiAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgKiAgICAgICAgIH1cbiAgICAgKiAgICAgICAgIGFjY1trZXldID0gZm9ybWF0Qnl0ZXMoc3RhdC5zaXplKTtcbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAqICAgICB9KTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBjYWxsYmFja3NcbiAgICAgKiBhc3luYy50cmFuc2Zvcm0oZmlsZUxpc3QsIHRyYW5zZm9ybUZpbGVTaXplLCBmdW5jdGlvbihlcnIsIHJlc3VsdCkge1xuICAgICAqICAgICBpZihlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgIH0gZWxzZSB7XG4gICAgICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAgICAgLy8gWyAnMTAwMCBCeXRlcycsICcxLjk1IEtCJywgJzIuOTMgS0InIF1cbiAgICAgKiAgICAgfVxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gVXNpbmcgUHJvbWlzZXNcbiAgICAgKiBhc3luYy50cmFuc2Zvcm0oZmlsZUxpc3QsIHRyYW5zZm9ybUZpbGVTaXplKVxuICAgICAqIC50aGVuKHJlc3VsdCA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XG4gICAgICogICAgIC8vIFsgJzEwMDAgQnl0ZXMnLCAnMS45NSBLQicsICcyLjkzIEtCJyBdXG4gICAgICogfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIFVzaW5nIGFzeW5jL2F3YWl0XG4gICAgICogKGFzeW5jICgpID0+IHtcbiAgICAgKiAgICAgdHJ5IHtcbiAgICAgKiAgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBhc3luYy50cmFuc2Zvcm0oZmlsZUxpc3QsIHRyYW5zZm9ybUZpbGVTaXplKTtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XG4gICAgICogICAgICAgICAvLyBbICcxMDAwIEJ5dGVzJywgJzEuOTUgS0InLCAnMi45MyBLQicgXVxuICAgICAqICAgICB9XG4gICAgICogICAgIGNhdGNoIChlcnIpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogICAgIH1cbiAgICAgKiB9KSgpO1xuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vIGZpbGUxLnR4dCBpcyBhIGZpbGUgdGhhdCBpcyAxMDAwIGJ5dGVzIGluIHNpemVcbiAgICAgKiAvLyBmaWxlMi50eHQgaXMgYSBmaWxlIHRoYXQgaXMgMjAwMCBieXRlcyBpbiBzaXplXG4gICAgICogLy8gZmlsZTMudHh0IGlzIGEgZmlsZSB0aGF0IGlzIDMwMDAgYnl0ZXMgaW4gc2l6ZVxuICAgICAqXG4gICAgICogLy8gaGVscGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBodW1hbi1yZWFkYWJsZSBzaXplIGZvcm1hdCBmcm9tIGJ5dGVzXG4gICAgICogZnVuY3Rpb24gZm9ybWF0Qnl0ZXMoYnl0ZXMsIGRlY2ltYWxzID0gMikge1xuICAgICAqICAgLy8gaW1wbGVtZW50YXRpb24gbm90IGluY2x1ZGVkIGZvciBicmV2aXR5XG4gICAgICogICByZXR1cm4gaHVtYW5SZWFkYmxlRmlsZXNpemU7XG4gICAgICogfVxuICAgICAqXG4gICAgICogY29uc3QgZmlsZU1hcCA9IHsgZjE6ICdmaWxlMS50eHQnLCBmMjogJ2ZpbGUyLnR4dCcsIGYzOiAnZmlsZTMudHh0JyB9O1xuICAgICAqXG4gICAgICogLy8gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgZmlsZSBzaXplLCB0cmFuc2Zvcm1lZCB0byBodW1hbi1yZWFkYWJsZSBmb3JtYXRcbiAgICAgKiAvLyBlLmcuIDEwMjQgYnl0ZXMgPSAxS0IsIDEyMzQgYnl0ZXMgPSAxLjIxIEtCLCAxMDQ4NTc2IGJ5dGVzID0gMU1CLCBldGMuXG4gICAgICogZnVuY3Rpb24gdHJhbnNmb3JtRmlsZVNpemUoYWNjLCB2YWx1ZSwga2V5LCBjYWxsYmFjaykge1xuICAgICAqICAgICBmcy5zdGF0KHZhbHVlLCBmdW5jdGlvbihlcnIsIHN0YXQpIHtcbiAgICAgKiAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgKiAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgKiAgICAgICAgIH1cbiAgICAgKiAgICAgICAgIGFjY1trZXldID0gZm9ybWF0Qnl0ZXMoc3RhdC5zaXplKTtcbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAqICAgICB9KTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBjYWxsYmFja3NcbiAgICAgKiBhc3luYy50cmFuc2Zvcm0oZmlsZU1hcCwgdHJhbnNmb3JtRmlsZVNpemUsIGZ1bmN0aW9uKGVyciwgcmVzdWx0KSB7XG4gICAgICogICAgIGlmKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgfSBlbHNlIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XG4gICAgICogICAgICAgICAvLyB7IGYxOiAnMTAwMCBCeXRlcycsIGYyOiAnMS45NSBLQicsIGYzOiAnMi45MyBLQicgfVxuICAgICAqICAgICB9XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBQcm9taXNlc1xuICAgICAqIGFzeW5jLnRyYW5zZm9ybShmaWxlTWFwLCB0cmFuc2Zvcm1GaWxlU2l6ZSlcbiAgICAgKiAudGhlbihyZXN1bHQgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAqICAgICAvLyB7IGYxOiAnMTAwMCBCeXRlcycsIGYyOiAnMS45NSBLQicsIGYzOiAnMi45MyBLQicgfVxuICAgICAqIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiAvLyBVc2luZyBhc3luYy9hd2FpdFxuICAgICAqIGFzeW5jICgpID0+IHtcbiAgICAgKiAgICAgdHJ5IHtcbiAgICAgKiAgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBhc3luYy50cmFuc2Zvcm0oZmlsZU1hcCwgdHJhbnNmb3JtRmlsZVNpemUpO1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgKiAgICAgICAgIC8vIHsgZjE6ICcxMDAwIEJ5dGVzJywgZjI6ICcxLjk1IEtCJywgZjM6ICcyLjkzIEtCJyB9XG4gICAgICogICAgIH1cbiAgICAgKiAgICAgY2F0Y2ggKGVycikge1xuICAgICAqICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRyYW5zZm9ybSAoY29sbCwgYWNjdW11bGF0b3IsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8PSAzICYmIHR5cGVvZiBhY2N1bXVsYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSBpdGVyYXRlZTtcbiAgICAgICAgICAgIGl0ZXJhdGVlID0gYWNjdW11bGF0b3I7XG4gICAgICAgICAgICBhY2N1bXVsYXRvciA9IEFycmF5LmlzQXJyYXkoY29sbCkgPyBbXSA6IHt9O1xuICAgICAgICB9XG4gICAgICAgIGNhbGxiYWNrID0gb25jZShjYWxsYmFjayB8fCBwcm9taXNlQ2FsbGJhY2soKSk7XG4gICAgICAgIHZhciBfaXRlcmF0ZWUgPSB3cmFwQXN5bmMoaXRlcmF0ZWUpO1xuXG4gICAgICAgIGVhY2hPZiQxKGNvbGwsICh2LCBrLCBjYikgPT4ge1xuICAgICAgICAgICAgX2l0ZXJhdGVlKGFjY3VtdWxhdG9yLCB2LCBrLCBjYik7XG4gICAgICAgIH0sIGVyciA9PiBjYWxsYmFjayhlcnIsIGFjY3VtdWxhdG9yKSk7XG4gICAgICAgIHJldHVybiBjYWxsYmFja1tQUk9NSVNFX1NZTUJPTF1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJdCBydW5zIGVhY2ggdGFzayBpbiBzZXJpZXMgYnV0IHN0b3BzIHdoZW5ldmVyIGFueSBvZiB0aGUgZnVuY3Rpb25zIHdlcmVcbiAgICAgKiBzdWNjZXNzZnVsLiBJZiBvbmUgb2YgdGhlIHRhc2tzIHdlcmUgc3VjY2Vzc2Z1bCwgdGhlIGBjYWxsYmFja2Agd2lsbCBiZVxuICAgICAqIHBhc3NlZCB0aGUgcmVzdWx0IG9mIHRoZSBzdWNjZXNzZnVsIHRhc2suIElmIGFsbCB0YXNrcyBmYWlsLCB0aGUgY2FsbGJhY2tcbiAgICAgKiB3aWxsIGJlIHBhc3NlZCB0aGUgZXJyb3IgYW5kIHJlc3VsdCAoaWYgYW55KSBvZiB0aGUgZmluYWwgYXR0ZW1wdC5cbiAgICAgKlxuICAgICAqIEBuYW1lIHRyeUVhY2hcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb250cm9sRmxvd1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgQ29udHJvbCBGbG93XG4gICAgICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxBc3luY0l0ZXJhYmxlfE9iamVjdH0gdGFza3MgLSBBIGNvbGxlY3Rpb24gY29udGFpbmluZyBmdW5jdGlvbnMgdG9cbiAgICAgKiBydW4sIGVhY2ggZnVuY3Rpb24gaXMgcGFzc2VkIGEgYGNhbGxiYWNrKGVyciwgcmVzdWx0KWAgaXQgbXVzdCBjYWxsIG9uXG4gICAgICogY29tcGxldGlvbiB3aXRoIGFuIGVycm9yIGBlcnJgICh3aGljaCBjYW4gYmUgYG51bGxgKSBhbmQgYW4gb3B0aW9uYWwgYHJlc3VsdGBcbiAgICAgKiB2YWx1ZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQW4gb3B0aW9uYWwgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIHdoZW4gb25lXG4gICAgICogb2YgdGhlIHRhc2tzIGhhcyBzdWNjZWVkZWQsIG9yIGFsbCBoYXZlIGZhaWxlZC4gSXQgcmVjZWl2ZXMgdGhlIGBlcnJgIGFuZFxuICAgICAqIGByZXN1bHRgIGFyZ3VtZW50cyBvZiB0aGUgbGFzdCBhdHRlbXB0IGF0IGNvbXBsZXRpbmcgdGhlIGB0YXNrYC4gSW52b2tlZCB3aXRoXG4gICAgICogKGVyciwgcmVzdWx0cykuXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgaXMgcGFzc2VkXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBhc3luYy50cnlFYWNoKFtcbiAgICAgKiAgICAgZnVuY3Rpb24gZ2V0RGF0YUZyb21GaXJzdFdlYnNpdGUoY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIC8vIFRyeSBnZXR0aW5nIHRoZSBkYXRhIGZyb20gdGhlIGZpcnN0IHdlYnNpdGVcbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKGVyciwgZGF0YSk7XG4gICAgICogICAgIH0sXG4gICAgICogICAgIGZ1bmN0aW9uIGdldERhdGFGcm9tU2Vjb25kV2Vic2l0ZShjYWxsYmFjaykge1xuICAgICAqICAgICAgICAgLy8gRmlyc3Qgd2Vic2l0ZSBmYWlsZWQsXG4gICAgICogICAgICAgICAvLyBUcnkgZ2V0dGluZyB0aGUgZGF0YSBmcm9tIHRoZSBiYWNrdXAgd2Vic2l0ZVxuICAgICAqICAgICAgICAgY2FsbGJhY2soZXJyLCBkYXRhKTtcbiAgICAgKiAgICAgfVxuICAgICAqIF0sXG4gICAgICogLy8gb3B0aW9uYWwgY2FsbGJhY2tcbiAgICAgKiBmdW5jdGlvbihlcnIsIHJlc3VsdHMpIHtcbiAgICAgKiAgICAgTm93IGRvIHNvbWV0aGluZyB3aXRoIHRoZSBkYXRhLlxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICovXG4gICAgZnVuY3Rpb24gdHJ5RWFjaCh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGVycm9yID0gbnVsbDtcbiAgICAgICAgdmFyIHJlc3VsdDtcbiAgICAgICAgcmV0dXJuIGVhY2hTZXJpZXMkMSh0YXNrcywgKHRhc2ssIHRhc2tDYikgPT4ge1xuICAgICAgICAgICAgd3JhcEFzeW5jKHRhc2spKChlcnIsIC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyID09PSBmYWxzZSkgcmV0dXJuIHRhc2tDYihlcnIpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgICAgICAgICBbcmVzdWx0XSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gYXJncztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZXJyb3IgPSBlcnI7XG4gICAgICAgICAgICAgICAgdGFza0NiKGVyciA/IG51bGwgOiB7fSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgKCkgPT4gY2FsbGJhY2soZXJyb3IsIHJlc3VsdCkpO1xuICAgIH1cblxuICAgIHZhciB0cnlFYWNoJDEgPSBhd2FpdGlmeSh0cnlFYWNoKTtcblxuICAgIC8qKlxuICAgICAqIFVuZG9lcyBhIFttZW1vaXplXXtAbGluayBtb2R1bGU6VXRpbHMubWVtb2l6ZX1kIGZ1bmN0aW9uLCByZXZlcnRpbmcgaXQgdG8gdGhlIG9yaWdpbmFsLFxuICAgICAqIHVubWVtb2l6ZWQgZm9ybS4gSGFuZHkgZm9yIHRlc3RpbmcuXG4gICAgICpcbiAgICAgKiBAbmFtZSB1bm1lbW9pemVcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpVdGlsc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIFthc3luYy5tZW1vaXplXXtAbGluayBtb2R1bGU6VXRpbHMubWVtb2l6ZX1cbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gZm4gLSB0aGUgbWVtb2l6ZWQgZnVuY3Rpb25cbiAgICAgKiBAcmV0dXJucyB7QXN5bmNGdW5jdGlvbn0gYSBmdW5jdGlvbiB0aGF0IGNhbGxzIHRoZSBvcmlnaW5hbCB1bm1lbW9pemVkIGZ1bmN0aW9uXG4gICAgICovXG4gICAgZnVuY3Rpb24gdW5tZW1vaXplKGZuKSB7XG4gICAgICAgIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIChmbi51bm1lbW9pemVkIHx8IGZuKSguLi5hcmdzKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXBlYXRlZGx5IGNhbGwgYGl0ZXJhdGVlYCwgd2hpbGUgYHRlc3RgIHJldHVybnMgYHRydWVgLiBDYWxscyBgY2FsbGJhY2tgIHdoZW5cbiAgICAgKiBzdG9wcGVkLCBvciBhbiBlcnJvciBvY2N1cnMuXG4gICAgICpcbiAgICAgKiBAbmFtZSB3aGlsc3RcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIG1vZHVsZTpDb250cm9sRmxvd1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAY2F0ZWdvcnkgQ29udHJvbCBGbG93XG4gICAgICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSB0ZXN0IC0gYXN5bmNocm9ub3VzIHRydXRoIHRlc3QgdG8gcGVyZm9ybSBiZWZvcmUgZWFjaFxuICAgICAqIGV4ZWN1dGlvbiBvZiBgaXRlcmF0ZWVgLiBJbnZva2VkIHdpdGggKGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQW4gYXN5bmMgZnVuY3Rpb24gd2hpY2ggaXMgY2FsbGVkIGVhY2ggdGltZVxuICAgICAqIGB0ZXN0YCBwYXNzZXMuIEludm9rZWQgd2l0aCAoY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCBhZnRlciB0aGUgdGVzdFxuICAgICAqIGZ1bmN0aW9uIGhhcyBmYWlsZWQgYW5kIHJlcGVhdGVkIGV4ZWN1dGlvbiBvZiBgaXRlcmF0ZWVgIGhhcyBzdG9wcGVkLiBgY2FsbGJhY2tgXG4gICAgICogd2lsbCBiZSBwYXNzZWQgYW4gZXJyb3IgYW5kIGFueSBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBmaW5hbCBgaXRlcmF0ZWVgJ3NcbiAgICAgKiBjYWxsYmFjay4gSW52b2tlZCB3aXRoIChlcnIsIFtyZXN1bHRzXSk7XG4gICAgICogQHJldHVybnMge1Byb21pc2V9IGEgcHJvbWlzZSwgaWYgbm8gY2FsbGJhY2sgaXMgcGFzc2VkXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBjb3VudCA9IDA7XG4gICAgICogYXN5bmMud2hpbHN0KFxuICAgICAqICAgICBmdW5jdGlvbiB0ZXN0KGNiKSB7IGNiKG51bGwsIGNvdW50IDwgNSk7IH0sXG4gICAgICogICAgIGZ1bmN0aW9uIGl0ZXIoY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIGNvdW50Kys7XG4gICAgICogICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAqICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIGNvdW50KTtcbiAgICAgKiAgICAgICAgIH0sIDEwMDApO1xuICAgICAqICAgICB9LFxuICAgICAqICAgICBmdW5jdGlvbiAoZXJyLCBuKSB7XG4gICAgICogICAgICAgICAvLyA1IHNlY29uZHMgaGF2ZSBwYXNzZWQsIG4gPSA1XG4gICAgICogICAgIH1cbiAgICAgKiApO1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHdoaWxzdCh0ZXN0LCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBvbmx5T25jZShjYWxsYmFjayk7XG4gICAgICAgIHZhciBfZm4gPSB3cmFwQXN5bmMoaXRlcmF0ZWUpO1xuICAgICAgICB2YXIgX3Rlc3QgPSB3cmFwQXN5bmModGVzdCk7XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG5cbiAgICAgICAgZnVuY3Rpb24gbmV4dChlcnIsIC4uLnJlc3QpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgcmVzdWx0cyA9IHJlc3Q7XG4gICAgICAgICAgICBpZiAoZXJyID09PSBmYWxzZSkgcmV0dXJuO1xuICAgICAgICAgICAgX3Rlc3QoY2hlY2spO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gY2hlY2soZXJyLCB0cnV0aCkge1xuICAgICAgICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICBpZiAoZXJyID09PSBmYWxzZSkgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKCF0cnV0aCkgcmV0dXJuIGNhbGxiYWNrKG51bGwsIC4uLnJlc3VsdHMpO1xuICAgICAgICAgICAgX2ZuKG5leHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF90ZXN0KGNoZWNrKTtcbiAgICB9XG4gICAgdmFyIHdoaWxzdCQxID0gYXdhaXRpZnkod2hpbHN0LCAzKTtcblxuICAgIC8qKlxuICAgICAqIFJlcGVhdGVkbHkgY2FsbCBgaXRlcmF0ZWVgIHVudGlsIGB0ZXN0YCByZXR1cm5zIGB0cnVlYC4gQ2FsbHMgYGNhbGxiYWNrYCB3aGVuXG4gICAgICogc3RvcHBlZCwgb3IgYW4gZXJyb3Igb2NjdXJzLiBgY2FsbGJhY2tgIHdpbGwgYmUgcGFzc2VkIGFuIGVycm9yIGFuZCBhbnlcbiAgICAgKiBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBmaW5hbCBgaXRlcmF0ZWVgJ3MgY2FsbGJhY2suXG4gICAgICpcbiAgICAgKiBUaGUgaW52ZXJzZSBvZiBbd2hpbHN0XXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cud2hpbHN0fS5cbiAgICAgKlxuICAgICAqIEBuYW1lIHVudGlsXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBbYXN5bmMud2hpbHN0XXtAbGluayBtb2R1bGU6Q29udHJvbEZsb3cud2hpbHN0fVxuICAgICAqIEBjYXRlZ29yeSBDb250cm9sIEZsb3dcbiAgICAgKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IHRlc3QgLSBhc3luY2hyb25vdXMgdHJ1dGggdGVzdCB0byBwZXJmb3JtIGJlZm9yZSBlYWNoXG4gICAgICogZXhlY3V0aW9uIG9mIGBpdGVyYXRlZWAuIEludm9rZWQgd2l0aCAoY2FsbGJhY2spLlxuICAgICAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBbiBhc3luYyBmdW5jdGlvbiB3aGljaCBpcyBjYWxsZWQgZWFjaCB0aW1lXG4gICAgICogYHRlc3RgIGZhaWxzLiBJbnZva2VkIHdpdGggKGNhbGxiYWNrKS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgYWZ0ZXIgdGhlIHRlc3RcbiAgICAgKiBmdW5jdGlvbiBoYXMgcGFzc2VkIGFuZCByZXBlYXRlZCBleGVjdXRpb24gb2YgYGl0ZXJhdGVlYCBoYXMgc3RvcHBlZC4gYGNhbGxiYWNrYFxuICAgICAqIHdpbGwgYmUgcGFzc2VkIGFuIGVycm9yIGFuZCBhbnkgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgZmluYWwgYGl0ZXJhdGVlYCdzXG4gICAgICogY2FsbGJhY2suIEludm9rZWQgd2l0aCAoZXJyLCBbcmVzdWx0c10pO1xuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBhIHByb21pc2UsIGlmIGEgY2FsbGJhY2sgaXMgbm90IHBhc3NlZFxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBjb25zdCByZXN1bHRzID0gW11cbiAgICAgKiBsZXQgZmluaXNoZWQgPSBmYWxzZVxuICAgICAqIGFzeW5jLnVudGlsKGZ1bmN0aW9uIHRlc3QoY2IpIHtcbiAgICAgKiAgICAgY2IobnVsbCwgZmluaXNoZWQpXG4gICAgICogfSwgZnVuY3Rpb24gaXRlcihuZXh0KSB7XG4gICAgICogICAgIGZldGNoUGFnZSh1cmwsIChlcnIsIGJvZHkpID0+IHtcbiAgICAgKiAgICAgICAgIGlmIChlcnIpIHJldHVybiBuZXh0KGVycilcbiAgICAgKiAgICAgICAgIHJlc3VsdHMgPSByZXN1bHRzLmNvbmNhdChib2R5Lm9iamVjdHMpXG4gICAgICogICAgICAgICBmaW5pc2hlZCA9ICEhYm9keS5uZXh0XG4gICAgICogICAgICAgICBuZXh0KGVycilcbiAgICAgKiAgICAgfSlcbiAgICAgKiB9LCBmdW5jdGlvbiBkb25lIChlcnIpIHtcbiAgICAgKiAgICAgLy8gYWxsIHBhZ2VzIGhhdmUgYmVlbiBmZXRjaGVkXG4gICAgICogfSlcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB1bnRpbCh0ZXN0LCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgY29uc3QgX3Rlc3QgPSB3cmFwQXN5bmModGVzdCk7XG4gICAgICAgIHJldHVybiB3aGlsc3QkMSgoY2IpID0+IF90ZXN0KChlcnIsIHRydXRoKSA9PiBjYiAoZXJyLCAhdHJ1dGgpKSwgaXRlcmF0ZWUsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSdW5zIHRoZSBgdGFza3NgIGFycmF5IG9mIGZ1bmN0aW9ucyBpbiBzZXJpZXMsIGVhY2ggcGFzc2luZyB0aGVpciByZXN1bHRzIHRvXG4gICAgICogdGhlIG5leHQgaW4gdGhlIGFycmF5LiBIb3dldmVyLCBpZiBhbnkgb2YgdGhlIGB0YXNrc2AgcGFzcyBhbiBlcnJvciB0byB0aGVpclxuICAgICAqIG93biBjYWxsYmFjaywgdGhlIG5leHQgZnVuY3Rpb24gaXMgbm90IGV4ZWN1dGVkLCBhbmQgdGhlIG1haW4gYGNhbGxiYWNrYCBpc1xuICAgICAqIGltbWVkaWF0ZWx5IGNhbGxlZCB3aXRoIHRoZSBlcnJvci5cbiAgICAgKlxuICAgICAqIEBuYW1lIHdhdGVyZmFsbFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOkNvbnRyb2xGbG93XG4gICAgICogQG1ldGhvZFxuICAgICAqIEBjYXRlZ29yeSBDb250cm9sIEZsb3dcbiAgICAgKiBAcGFyYW0ge0FycmF5fSB0YXNrcyAtIEFuIGFycmF5IG9mIFthc3luYyBmdW5jdGlvbnNde0BsaW5rIEFzeW5jRnVuY3Rpb259XG4gICAgICogdG8gcnVuLlxuICAgICAqIEVhY2ggZnVuY3Rpb24gc2hvdWxkIGNvbXBsZXRlIHdpdGggYW55IG51bWJlciBvZiBgcmVzdWx0YCB2YWx1ZXMuXG4gICAgICogVGhlIGByZXN1bHRgIHZhbHVlcyB3aWxsIGJlIHBhc3NlZCBhcyBhcmd1bWVudHMsIGluIG9yZGVyLCB0byB0aGUgbmV4dCB0YXNrLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBbiBvcHRpb25hbCBjYWxsYmFjayB0byBydW4gb25jZSBhbGwgdGhlXG4gICAgICogZnVuY3Rpb25zIGhhdmUgY29tcGxldGVkLiBUaGlzIHdpbGwgYmUgcGFzc2VkIHRoZSByZXN1bHRzIG9mIHRoZSBsYXN0IHRhc2snc1xuICAgICAqIGNhbGxiYWNrLiBJbnZva2VkIHdpdGggKGVyciwgW3Jlc3VsdHNdKS5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlLCBpZiBhIGNhbGxiYWNrIGlzIG9taXR0ZWRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogYXN5bmMud2F0ZXJmYWxsKFtcbiAgICAgKiAgICAgZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgICAgIGNhbGxiYWNrKG51bGwsICdvbmUnLCAndHdvJyk7XG4gICAgICogICAgIH0sXG4gICAgICogICAgIGZ1bmN0aW9uKGFyZzEsIGFyZzIsIGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAvLyBhcmcxIG5vdyBlcXVhbHMgJ29uZScgYW5kIGFyZzIgbm93IGVxdWFscyAndHdvJ1xuICAgICAqICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ3RocmVlJyk7XG4gICAgICogICAgIH0sXG4gICAgICogICAgIGZ1bmN0aW9uKGFyZzEsIGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAvLyBhcmcxIG5vdyBlcXVhbHMgJ3RocmVlJ1xuICAgICAqICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ2RvbmUnKTtcbiAgICAgKiAgICAgfVxuICAgICAqIF0sIGZ1bmN0aW9uIChlcnIsIHJlc3VsdCkge1xuICAgICAqICAgICAvLyByZXN1bHQgbm93IGVxdWFscyAnZG9uZSdcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIC8vIE9yLCB3aXRoIG5hbWVkIGZ1bmN0aW9uczpcbiAgICAgKiBhc3luYy53YXRlcmZhbGwoW1xuICAgICAqICAgICBteUZpcnN0RnVuY3Rpb24sXG4gICAgICogICAgIG15U2Vjb25kRnVuY3Rpb24sXG4gICAgICogICAgIG15TGFzdEZ1bmN0aW9uLFxuICAgICAqIF0sIGZ1bmN0aW9uIChlcnIsIHJlc3VsdCkge1xuICAgICAqICAgICAvLyByZXN1bHQgbm93IGVxdWFscyAnZG9uZSdcbiAgICAgKiB9KTtcbiAgICAgKiBmdW5jdGlvbiBteUZpcnN0RnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgKiAgICAgY2FsbGJhY2sobnVsbCwgJ29uZScsICd0d28nKTtcbiAgICAgKiB9XG4gICAgICogZnVuY3Rpb24gbXlTZWNvbmRGdW5jdGlvbihhcmcxLCBhcmcyLCBjYWxsYmFjaykge1xuICAgICAqICAgICAvLyBhcmcxIG5vdyBlcXVhbHMgJ29uZScgYW5kIGFyZzIgbm93IGVxdWFscyAndHdvJ1xuICAgICAqICAgICBjYWxsYmFjayhudWxsLCAndGhyZWUnKTtcbiAgICAgKiB9XG4gICAgICogZnVuY3Rpb24gbXlMYXN0RnVuY3Rpb24oYXJnMSwgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgLy8gYXJnMSBub3cgZXF1YWxzICd0aHJlZSdcbiAgICAgKiAgICAgY2FsbGJhY2sobnVsbCwgJ2RvbmUnKTtcbiAgICAgKiB9XG4gICAgICovXG4gICAgZnVuY3Rpb24gd2F0ZXJmYWxsICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBvbmNlKGNhbGxiYWNrKTtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRhc2tzKSkgcmV0dXJuIGNhbGxiYWNrKG5ldyBFcnJvcignRmlyc3QgYXJndW1lbnQgdG8gd2F0ZXJmYWxsIG11c3QgYmUgYW4gYXJyYXkgb2YgZnVuY3Rpb25zJykpO1xuICAgICAgICBpZiAoIXRhc2tzLmxlbmd0aCkgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIHZhciB0YXNrSW5kZXggPSAwO1xuXG4gICAgICAgIGZ1bmN0aW9uIG5leHRUYXNrKGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciB0YXNrID0gd3JhcEFzeW5jKHRhc2tzW3Rhc2tJbmRleCsrXSk7XG4gICAgICAgICAgICB0YXNrKC4uLmFyZ3MsIG9ubHlPbmNlKG5leHQpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIG5leHQoZXJyLCAuLi5hcmdzKSB7XG4gICAgICAgICAgICBpZiAoZXJyID09PSBmYWxzZSkgcmV0dXJuXG4gICAgICAgICAgICBpZiAoZXJyIHx8IHRhc2tJbmRleCA9PT0gdGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVyciwgLi4uYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBuZXh0VGFzayhhcmdzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5leHRUYXNrKFtdKTtcbiAgICB9XG5cbiAgICB2YXIgd2F0ZXJmYWxsJDEgPSBhd2FpdGlmeSh3YXRlcmZhbGwpO1xuXG4gICAgLyoqXG4gICAgICogQW4gXCJhc3luYyBmdW5jdGlvblwiIGluIHRoZSBjb250ZXh0IG9mIEFzeW5jIGlzIGFuIGFzeW5jaHJvbm91cyBmdW5jdGlvbiB3aXRoXG4gICAgICogYSB2YXJpYWJsZSBudW1iZXIgb2YgcGFyYW1ldGVycywgd2l0aCB0aGUgZmluYWwgcGFyYW1ldGVyIGJlaW5nIGEgY2FsbGJhY2suXG4gICAgICogKGBmdW5jdGlvbiAoYXJnMSwgYXJnMiwgLi4uLCBjYWxsYmFjaykge31gKVxuICAgICAqIFRoZSBmaW5hbCBjYWxsYmFjayBpcyBvZiB0aGUgZm9ybSBgY2FsbGJhY2soZXJyLCByZXN1bHRzLi4uKWAsIHdoaWNoIG11c3QgYmVcbiAgICAgKiBjYWxsZWQgb25jZSB0aGUgZnVuY3Rpb24gaXMgY29tcGxldGVkLiAgVGhlIGNhbGxiYWNrIHNob3VsZCBiZSBjYWxsZWQgd2l0aCBhXG4gICAgICogRXJyb3IgYXMgaXRzIGZpcnN0IGFyZ3VtZW50IHRvIHNpZ25hbCB0aGF0IGFuIGVycm9yIG9jY3VycmVkLlxuICAgICAqIE90aGVyd2lzZSwgaWYgbm8gZXJyb3Igb2NjdXJyZWQsIGl0IHNob3VsZCBiZSBjYWxsZWQgd2l0aCBgbnVsbGAgYXMgdGhlIGZpcnN0XG4gICAgICogYXJndW1lbnQsIGFuZCBhbnkgYWRkaXRpb25hbCBgcmVzdWx0YCBhcmd1bWVudHMgdGhhdCBtYXkgYXBwbHksIHRvIHNpZ25hbFxuICAgICAqIHN1Y2Nlc3NmdWwgY29tcGxldGlvbi5cbiAgICAgKiBUaGUgY2FsbGJhY2sgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlLCBpZGVhbGx5IG9uIGEgbGF0ZXIgdGljayBvZiB0aGVcbiAgICAgKiBKYXZhU2NyaXB0IGV2ZW50IGxvb3AuXG4gICAgICpcbiAgICAgKiBUaGlzIHR5cGUgb2YgZnVuY3Rpb24gaXMgYWxzbyByZWZlcnJlZCB0byBhcyBhIFwiTm9kZS1zdHlsZSBhc3luYyBmdW5jdGlvblwiLFxuICAgICAqIG9yIGEgXCJjb250aW51YXRpb24gcGFzc2luZy1zdHlsZSBmdW5jdGlvblwiIChDUFMpLiBNb3N0IG9mIHRoZSBtZXRob2RzIG9mIHRoaXNcbiAgICAgKiBsaWJyYXJ5IGFyZSB0aGVtc2VsdmVzIENQUy9Ob2RlLXN0eWxlIGFzeW5jIGZ1bmN0aW9ucywgb3IgZnVuY3Rpb25zIHRoYXRcbiAgICAgKiByZXR1cm4gQ1BTL05vZGUtc3R5bGUgYXN5bmMgZnVuY3Rpb25zLlxuICAgICAqXG4gICAgICogV2hlcmV2ZXIgd2UgYWNjZXB0IGEgTm9kZS1zdHlsZSBhc3luYyBmdW5jdGlvbiwgd2UgYWxzbyBkaXJlY3RseSBhY2NlcHQgYW5cbiAgICAgKiBbRVMyMDE3IGBhc3luY2AgZnVuY3Rpb25de0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL1N0YXRlbWVudHMvYXN5bmNfZnVuY3Rpb259LlxuICAgICAqIEluIHRoaXMgY2FzZSwgdGhlIGBhc3luY2AgZnVuY3Rpb24gd2lsbCBub3QgYmUgcGFzc2VkIGEgZmluYWwgY2FsbGJhY2tcbiAgICAgKiBhcmd1bWVudCwgYW5kIGFueSB0aHJvd24gZXJyb3Igd2lsbCBiZSB1c2VkIGFzIHRoZSBgZXJyYCBhcmd1bWVudCBvZiB0aGVcbiAgICAgKiBpbXBsaWNpdCBjYWxsYmFjaywgYW5kIHRoZSByZXR1cm4gdmFsdWUgd2lsbCBiZSB1c2VkIGFzIHRoZSBgcmVzdWx0YCB2YWx1ZS5cbiAgICAgKiAoaS5lLiBhIGByZWplY3RlZGAgb2YgdGhlIHJldHVybmVkIFByb21pc2UgYmVjb21lcyB0aGUgYGVycmAgY2FsbGJhY2tcbiAgICAgKiBhcmd1bWVudCwgYW5kIGEgYHJlc29sdmVkYCB2YWx1ZSBiZWNvbWVzIHRoZSBgcmVzdWx0YC4pXG4gICAgICpcbiAgICAgKiBOb3RlLCBkdWUgdG8gSmF2YVNjcmlwdCBsaW1pdGF0aW9ucywgd2UgY2FuIG9ubHkgZGV0ZWN0IG5hdGl2ZSBgYXN5bmNgXG4gICAgICogZnVuY3Rpb25zIGFuZCBub3QgdHJhbnNwaWxpZWQgaW1wbGVtZW50YXRpb25zLlxuICAgICAqIFlvdXIgZW52aXJvbm1lbnQgbXVzdCBoYXZlIGBhc3luY2AvYGF3YWl0YCBzdXBwb3J0IGZvciB0aGlzIHRvIHdvcmsuXG4gICAgICogKGUuZy4gTm9kZSA+IHY3LjYsIG9yIGEgcmVjZW50IHZlcnNpb24gb2YgYSBtb2Rlcm4gYnJvd3NlcikuXG4gICAgICogSWYgeW91IGFyZSB1c2luZyBgYXN5bmNgIGZ1bmN0aW9ucyB0aHJvdWdoIGEgdHJhbnNwaWxlciAoZS5nLiBCYWJlbCksIHlvdVxuICAgICAqIG11c3Qgc3RpbGwgd3JhcCB0aGUgZnVuY3Rpb24gd2l0aCBbYXN5bmNpZnlde0BsaW5rIG1vZHVsZTpVdGlscy5hc3luY2lmeX0sXG4gICAgICogYmVjYXVzZSB0aGUgYGFzeW5jIGZ1bmN0aW9uYCB3aWxsIGJlIGNvbXBpbGVkIHRvIGFuIG9yZGluYXJ5IGZ1bmN0aW9uIHRoYXRcbiAgICAgKiByZXR1cm5zIGEgcHJvbWlzZS5cbiAgICAgKlxuICAgICAqIEB0eXBlZGVmIHtGdW5jdGlvbn0gQXN5bmNGdW5jdGlvblxuICAgICAqIEBzdGF0aWNcbiAgICAgKi9cblxuXG4gICAgdmFyIGluZGV4ID0ge1xuICAgICAgICBhcHBseSxcbiAgICAgICAgYXBwbHlFYWNoLFxuICAgICAgICBhcHBseUVhY2hTZXJpZXMsXG4gICAgICAgIGFzeW5jaWZ5LFxuICAgICAgICBhdXRvLFxuICAgICAgICBhdXRvSW5qZWN0LFxuICAgICAgICBjYXJnbzogY2FyZ28kMSxcbiAgICAgICAgY2FyZ29RdWV1ZTogY2FyZ28sXG4gICAgICAgIGNvbXBvc2UsXG4gICAgICAgIGNvbmNhdDogY29uY2F0JDEsXG4gICAgICAgIGNvbmNhdExpbWl0OiBjb25jYXRMaW1pdCQxLFxuICAgICAgICBjb25jYXRTZXJpZXM6IGNvbmNhdFNlcmllcyQxLFxuICAgICAgICBjb25zdGFudDogY29uc3RhbnQkMSxcbiAgICAgICAgZGV0ZWN0OiBkZXRlY3QkMSxcbiAgICAgICAgZGV0ZWN0TGltaXQ6IGRldGVjdExpbWl0JDEsXG4gICAgICAgIGRldGVjdFNlcmllczogZGV0ZWN0U2VyaWVzJDEsXG4gICAgICAgIGRpcixcbiAgICAgICAgZG9VbnRpbCxcbiAgICAgICAgZG9XaGlsc3Q6IGRvV2hpbHN0JDEsXG4gICAgICAgIGVhY2gsXG4gICAgICAgIGVhY2hMaW1pdDogZWFjaExpbWl0JDEsXG4gICAgICAgIGVhY2hPZjogZWFjaE9mJDEsXG4gICAgICAgIGVhY2hPZkxpbWl0OiBlYWNoT2ZMaW1pdCQxLFxuICAgICAgICBlYWNoT2ZTZXJpZXM6IGVhY2hPZlNlcmllcyQxLFxuICAgICAgICBlYWNoU2VyaWVzOiBlYWNoU2VyaWVzJDEsXG4gICAgICAgIGVuc3VyZUFzeW5jLFxuICAgICAgICBldmVyeTogZXZlcnkkMSxcbiAgICAgICAgZXZlcnlMaW1pdDogZXZlcnlMaW1pdCQxLFxuICAgICAgICBldmVyeVNlcmllczogZXZlcnlTZXJpZXMkMSxcbiAgICAgICAgZmlsdGVyOiBmaWx0ZXIkMSxcbiAgICAgICAgZmlsdGVyTGltaXQ6IGZpbHRlckxpbWl0JDEsXG4gICAgICAgIGZpbHRlclNlcmllczogZmlsdGVyU2VyaWVzJDEsXG4gICAgICAgIGZvcmV2ZXI6IGZvcmV2ZXIkMSxcbiAgICAgICAgZ3JvdXBCeSxcbiAgICAgICAgZ3JvdXBCeUxpbWl0OiBncm91cEJ5TGltaXQkMSxcbiAgICAgICAgZ3JvdXBCeVNlcmllcyxcbiAgICAgICAgbG9nLFxuICAgICAgICBtYXA6IG1hcCQxLFxuICAgICAgICBtYXBMaW1pdDogbWFwTGltaXQkMSxcbiAgICAgICAgbWFwU2VyaWVzOiBtYXBTZXJpZXMkMSxcbiAgICAgICAgbWFwVmFsdWVzLFxuICAgICAgICBtYXBWYWx1ZXNMaW1pdDogbWFwVmFsdWVzTGltaXQkMSxcbiAgICAgICAgbWFwVmFsdWVzU2VyaWVzLFxuICAgICAgICBtZW1vaXplLFxuICAgICAgICBuZXh0VGljayxcbiAgICAgICAgcGFyYWxsZWwsXG4gICAgICAgIHBhcmFsbGVsTGltaXQsXG4gICAgICAgIHByaW9yaXR5UXVldWUsXG4gICAgICAgIHF1ZXVlLFxuICAgICAgICByYWNlOiByYWNlJDEsXG4gICAgICAgIHJlZHVjZTogcmVkdWNlJDEsXG4gICAgICAgIHJlZHVjZVJpZ2h0LFxuICAgICAgICByZWZsZWN0LFxuICAgICAgICByZWZsZWN0QWxsLFxuICAgICAgICByZWplY3Q6IHJlamVjdCQxLFxuICAgICAgICByZWplY3RMaW1pdDogcmVqZWN0TGltaXQkMSxcbiAgICAgICAgcmVqZWN0U2VyaWVzOiByZWplY3RTZXJpZXMkMSxcbiAgICAgICAgcmV0cnksXG4gICAgICAgIHJldHJ5YWJsZSxcbiAgICAgICAgc2VxLFxuICAgICAgICBzZXJpZXMsXG4gICAgICAgIHNldEltbWVkaWF0ZTogc2V0SW1tZWRpYXRlJDEsXG4gICAgICAgIHNvbWU6IHNvbWUkMSxcbiAgICAgICAgc29tZUxpbWl0OiBzb21lTGltaXQkMSxcbiAgICAgICAgc29tZVNlcmllczogc29tZVNlcmllcyQxLFxuICAgICAgICBzb3J0Qnk6IHNvcnRCeSQxLFxuICAgICAgICB0aW1lb3V0LFxuICAgICAgICB0aW1lcyxcbiAgICAgICAgdGltZXNMaW1pdCxcbiAgICAgICAgdGltZXNTZXJpZXMsXG4gICAgICAgIHRyYW5zZm9ybSxcbiAgICAgICAgdHJ5RWFjaDogdHJ5RWFjaCQxLFxuICAgICAgICB1bm1lbW9pemUsXG4gICAgICAgIHVudGlsLFxuICAgICAgICB3YXRlcmZhbGw6IHdhdGVyZmFsbCQxLFxuICAgICAgICB3aGlsc3Q6IHdoaWxzdCQxLFxuXG4gICAgICAgIC8vIGFsaWFzZXNcbiAgICAgICAgYWxsOiBldmVyeSQxLFxuICAgICAgICBhbGxMaW1pdDogZXZlcnlMaW1pdCQxLFxuICAgICAgICBhbGxTZXJpZXM6IGV2ZXJ5U2VyaWVzJDEsXG4gICAgICAgIGFueTogc29tZSQxLFxuICAgICAgICBhbnlMaW1pdDogc29tZUxpbWl0JDEsXG4gICAgICAgIGFueVNlcmllczogc29tZVNlcmllcyQxLFxuICAgICAgICBmaW5kOiBkZXRlY3QkMSxcbiAgICAgICAgZmluZExpbWl0OiBkZXRlY3RMaW1pdCQxLFxuICAgICAgICBmaW5kU2VyaWVzOiBkZXRlY3RTZXJpZXMkMSxcbiAgICAgICAgZmxhdE1hcDogY29uY2F0JDEsXG4gICAgICAgIGZsYXRNYXBMaW1pdDogY29uY2F0TGltaXQkMSxcbiAgICAgICAgZmxhdE1hcFNlcmllczogY29uY2F0U2VyaWVzJDEsXG4gICAgICAgIGZvckVhY2g6IGVhY2gsXG4gICAgICAgIGZvckVhY2hTZXJpZXM6IGVhY2hTZXJpZXMkMSxcbiAgICAgICAgZm9yRWFjaExpbWl0OiBlYWNoTGltaXQkMSxcbiAgICAgICAgZm9yRWFjaE9mOiBlYWNoT2YkMSxcbiAgICAgICAgZm9yRWFjaE9mU2VyaWVzOiBlYWNoT2ZTZXJpZXMkMSxcbiAgICAgICAgZm9yRWFjaE9mTGltaXQ6IGVhY2hPZkxpbWl0JDEsXG4gICAgICAgIGluamVjdDogcmVkdWNlJDEsXG4gICAgICAgIGZvbGRsOiByZWR1Y2UkMSxcbiAgICAgICAgZm9sZHI6IHJlZHVjZVJpZ2h0LFxuICAgICAgICBzZWxlY3Q6IGZpbHRlciQxLFxuICAgICAgICBzZWxlY3RMaW1pdDogZmlsdGVyTGltaXQkMSxcbiAgICAgICAgc2VsZWN0U2VyaWVzOiBmaWx0ZXJTZXJpZXMkMSxcbiAgICAgICAgd3JhcFN5bmM6IGFzeW5jaWZ5LFxuICAgICAgICBkdXJpbmc6IHdoaWxzdCQxLFxuICAgICAgICBkb0R1cmluZzogZG9XaGlsc3QkMVxuICAgIH07XG5cbiAgICBleHBvcnRzLmFsbCA9IGV2ZXJ5JDE7XG4gICAgZXhwb3J0cy5hbGxMaW1pdCA9IGV2ZXJ5TGltaXQkMTtcbiAgICBleHBvcnRzLmFsbFNlcmllcyA9IGV2ZXJ5U2VyaWVzJDE7XG4gICAgZXhwb3J0cy5hbnkgPSBzb21lJDE7XG4gICAgZXhwb3J0cy5hbnlMaW1pdCA9IHNvbWVMaW1pdCQxO1xuICAgIGV4cG9ydHMuYW55U2VyaWVzID0gc29tZVNlcmllcyQxO1xuICAgIGV4cG9ydHMuYXBwbHkgPSBhcHBseTtcbiAgICBleHBvcnRzLmFwcGx5RWFjaCA9IGFwcGx5RWFjaDtcbiAgICBleHBvcnRzLmFwcGx5RWFjaFNlcmllcyA9IGFwcGx5RWFjaFNlcmllcztcbiAgICBleHBvcnRzLmFzeW5jaWZ5ID0gYXN5bmNpZnk7XG4gICAgZXhwb3J0cy5hdXRvID0gYXV0bztcbiAgICBleHBvcnRzLmF1dG9JbmplY3QgPSBhdXRvSW5qZWN0O1xuICAgIGV4cG9ydHMuY2FyZ28gPSBjYXJnbyQxO1xuICAgIGV4cG9ydHMuY2FyZ29RdWV1ZSA9IGNhcmdvO1xuICAgIGV4cG9ydHMuY29tcG9zZSA9IGNvbXBvc2U7XG4gICAgZXhwb3J0cy5jb25jYXQgPSBjb25jYXQkMTtcbiAgICBleHBvcnRzLmNvbmNhdExpbWl0ID0gY29uY2F0TGltaXQkMTtcbiAgICBleHBvcnRzLmNvbmNhdFNlcmllcyA9IGNvbmNhdFNlcmllcyQxO1xuICAgIGV4cG9ydHMuY29uc3RhbnQgPSBjb25zdGFudCQxO1xuICAgIGV4cG9ydHMuZGVmYXVsdCA9IGluZGV4O1xuICAgIGV4cG9ydHMuZGV0ZWN0ID0gZGV0ZWN0JDE7XG4gICAgZXhwb3J0cy5kZXRlY3RMaW1pdCA9IGRldGVjdExpbWl0JDE7XG4gICAgZXhwb3J0cy5kZXRlY3RTZXJpZXMgPSBkZXRlY3RTZXJpZXMkMTtcbiAgICBleHBvcnRzLmRpciA9IGRpcjtcbiAgICBleHBvcnRzLmRvRHVyaW5nID0gZG9XaGlsc3QkMTtcbiAgICBleHBvcnRzLmRvVW50aWwgPSBkb1VudGlsO1xuICAgIGV4cG9ydHMuZG9XaGlsc3QgPSBkb1doaWxzdCQxO1xuICAgIGV4cG9ydHMuZHVyaW5nID0gd2hpbHN0JDE7XG4gICAgZXhwb3J0cy5lYWNoID0gZWFjaDtcbiAgICBleHBvcnRzLmVhY2hMaW1pdCA9IGVhY2hMaW1pdCQxO1xuICAgIGV4cG9ydHMuZWFjaE9mID0gZWFjaE9mJDE7XG4gICAgZXhwb3J0cy5lYWNoT2ZMaW1pdCA9IGVhY2hPZkxpbWl0JDE7XG4gICAgZXhwb3J0cy5lYWNoT2ZTZXJpZXMgPSBlYWNoT2ZTZXJpZXMkMTtcbiAgICBleHBvcnRzLmVhY2hTZXJpZXMgPSBlYWNoU2VyaWVzJDE7XG4gICAgZXhwb3J0cy5lbnN1cmVBc3luYyA9IGVuc3VyZUFzeW5jO1xuICAgIGV4cG9ydHMuZXZlcnkgPSBldmVyeSQxO1xuICAgIGV4cG9ydHMuZXZlcnlMaW1pdCA9IGV2ZXJ5TGltaXQkMTtcbiAgICBleHBvcnRzLmV2ZXJ5U2VyaWVzID0gZXZlcnlTZXJpZXMkMTtcbiAgICBleHBvcnRzLmZpbHRlciA9IGZpbHRlciQxO1xuICAgIGV4cG9ydHMuZmlsdGVyTGltaXQgPSBmaWx0ZXJMaW1pdCQxO1xuICAgIGV4cG9ydHMuZmlsdGVyU2VyaWVzID0gZmlsdGVyU2VyaWVzJDE7XG4gICAgZXhwb3J0cy5maW5kID0gZGV0ZWN0JDE7XG4gICAgZXhwb3J0cy5maW5kTGltaXQgPSBkZXRlY3RMaW1pdCQxO1xuICAgIGV4cG9ydHMuZmluZFNlcmllcyA9IGRldGVjdFNlcmllcyQxO1xuICAgIGV4cG9ydHMuZmxhdE1hcCA9IGNvbmNhdCQxO1xuICAgIGV4cG9ydHMuZmxhdE1hcExpbWl0ID0gY29uY2F0TGltaXQkMTtcbiAgICBleHBvcnRzLmZsYXRNYXBTZXJpZXMgPSBjb25jYXRTZXJpZXMkMTtcbiAgICBleHBvcnRzLmZvbGRsID0gcmVkdWNlJDE7XG4gICAgZXhwb3J0cy5mb2xkciA9IHJlZHVjZVJpZ2h0O1xuICAgIGV4cG9ydHMuZm9yRWFjaCA9IGVhY2g7XG4gICAgZXhwb3J0cy5mb3JFYWNoTGltaXQgPSBlYWNoTGltaXQkMTtcbiAgICBleHBvcnRzLmZvckVhY2hPZiA9IGVhY2hPZiQxO1xuICAgIGV4cG9ydHMuZm9yRWFjaE9mTGltaXQgPSBlYWNoT2ZMaW1pdCQxO1xuICAgIGV4cG9ydHMuZm9yRWFjaE9mU2VyaWVzID0gZWFjaE9mU2VyaWVzJDE7XG4gICAgZXhwb3J0cy5mb3JFYWNoU2VyaWVzID0gZWFjaFNlcmllcyQxO1xuICAgIGV4cG9ydHMuZm9yZXZlciA9IGZvcmV2ZXIkMTtcbiAgICBleHBvcnRzLmdyb3VwQnkgPSBncm91cEJ5O1xuICAgIGV4cG9ydHMuZ3JvdXBCeUxpbWl0ID0gZ3JvdXBCeUxpbWl0JDE7XG4gICAgZXhwb3J0cy5ncm91cEJ5U2VyaWVzID0gZ3JvdXBCeVNlcmllcztcbiAgICBleHBvcnRzLmluamVjdCA9IHJlZHVjZSQxO1xuICAgIGV4cG9ydHMubG9nID0gbG9nO1xuICAgIGV4cG9ydHMubWFwID0gbWFwJDE7XG4gICAgZXhwb3J0cy5tYXBMaW1pdCA9IG1hcExpbWl0JDE7XG4gICAgZXhwb3J0cy5tYXBTZXJpZXMgPSBtYXBTZXJpZXMkMTtcbiAgICBleHBvcnRzLm1hcFZhbHVlcyA9IG1hcFZhbHVlcztcbiAgICBleHBvcnRzLm1hcFZhbHVlc0xpbWl0ID0gbWFwVmFsdWVzTGltaXQkMTtcbiAgICBleHBvcnRzLm1hcFZhbHVlc1NlcmllcyA9IG1hcFZhbHVlc1NlcmllcztcbiAgICBleHBvcnRzLm1lbW9pemUgPSBtZW1vaXplO1xuICAgIGV4cG9ydHMubmV4dFRpY2sgPSBuZXh0VGljaztcbiAgICBleHBvcnRzLnBhcmFsbGVsID0gcGFyYWxsZWw7XG4gICAgZXhwb3J0cy5wYXJhbGxlbExpbWl0ID0gcGFyYWxsZWxMaW1pdDtcbiAgICBleHBvcnRzLnByaW9yaXR5UXVldWUgPSBwcmlvcml0eVF1ZXVlO1xuICAgIGV4cG9ydHMucXVldWUgPSBxdWV1ZTtcbiAgICBleHBvcnRzLnJhY2UgPSByYWNlJDE7XG4gICAgZXhwb3J0cy5yZWR1Y2UgPSByZWR1Y2UkMTtcbiAgICBleHBvcnRzLnJlZHVjZVJpZ2h0ID0gcmVkdWNlUmlnaHQ7XG4gICAgZXhwb3J0cy5yZWZsZWN0ID0gcmVmbGVjdDtcbiAgICBleHBvcnRzLnJlZmxlY3RBbGwgPSByZWZsZWN0QWxsO1xuICAgIGV4cG9ydHMucmVqZWN0ID0gcmVqZWN0JDE7XG4gICAgZXhwb3J0cy5yZWplY3RMaW1pdCA9IHJlamVjdExpbWl0JDE7XG4gICAgZXhwb3J0cy5yZWplY3RTZXJpZXMgPSByZWplY3RTZXJpZXMkMTtcbiAgICBleHBvcnRzLnJldHJ5ID0gcmV0cnk7XG4gICAgZXhwb3J0cy5yZXRyeWFibGUgPSByZXRyeWFibGU7XG4gICAgZXhwb3J0cy5zZWxlY3QgPSBmaWx0ZXIkMTtcbiAgICBleHBvcnRzLnNlbGVjdExpbWl0ID0gZmlsdGVyTGltaXQkMTtcbiAgICBleHBvcnRzLnNlbGVjdFNlcmllcyA9IGZpbHRlclNlcmllcyQxO1xuICAgIGV4cG9ydHMuc2VxID0gc2VxO1xuICAgIGV4cG9ydHMuc2VyaWVzID0gc2VyaWVzO1xuICAgIGV4cG9ydHMuc2V0SW1tZWRpYXRlID0gc2V0SW1tZWRpYXRlJDE7XG4gICAgZXhwb3J0cy5zb21lID0gc29tZSQxO1xuICAgIGV4cG9ydHMuc29tZUxpbWl0ID0gc29tZUxpbWl0JDE7XG4gICAgZXhwb3J0cy5zb21lU2VyaWVzID0gc29tZVNlcmllcyQxO1xuICAgIGV4cG9ydHMuc29ydEJ5ID0gc29ydEJ5JDE7XG4gICAgZXhwb3J0cy50aW1lb3V0ID0gdGltZW91dDtcbiAgICBleHBvcnRzLnRpbWVzID0gdGltZXM7XG4gICAgZXhwb3J0cy50aW1lc0xpbWl0ID0gdGltZXNMaW1pdDtcbiAgICBleHBvcnRzLnRpbWVzU2VyaWVzID0gdGltZXNTZXJpZXM7XG4gICAgZXhwb3J0cy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm07XG4gICAgZXhwb3J0cy50cnlFYWNoID0gdHJ5RWFjaCQxO1xuICAgIGV4cG9ydHMudW5tZW1vaXplID0gdW5tZW1vaXplO1xuICAgIGV4cG9ydHMudW50aWwgPSB1bnRpbDtcbiAgICBleHBvcnRzLndhdGVyZmFsbCA9IHdhdGVyZmFsbCQxO1xuICAgIGV4cG9ydHMud2hpbHN0ID0gd2hpbHN0JDE7XG4gICAgZXhwb3J0cy53cmFwU3luYyA9IGFzeW5jaWZ5O1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxufSkpO1xuIiwKICAgICJ2YXIgY29uc3RhbnRzID0gcmVxdWlyZSgnY29uc3RhbnRzJylcblxudmFyIG9yaWdDd2QgPSBwcm9jZXNzLmN3ZFxudmFyIGN3ZCA9IG51bGxcblxudmFyIHBsYXRmb3JtID0gcHJvY2Vzcy5lbnYuR1JBQ0VGVUxfRlNfUExBVEZPUk0gfHwgcHJvY2Vzcy5wbGF0Zm9ybVxuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uKCkge1xuICBpZiAoIWN3ZClcbiAgICBjd2QgPSBvcmlnQ3dkLmNhbGwocHJvY2VzcylcbiAgcmV0dXJuIGN3ZFxufVxudHJ5IHtcbiAgcHJvY2Vzcy5jd2QoKVxufSBjYXRjaCAoZXIpIHt9XG5cbi8vIFRoaXMgY2hlY2sgaXMgbmVlZGVkIHVudGlsIG5vZGUuanMgMTIgaXMgcmVxdWlyZWRcbmlmICh0eXBlb2YgcHJvY2Vzcy5jaGRpciA9PT0gJ2Z1bmN0aW9uJykge1xuICB2YXIgY2hkaXIgPSBwcm9jZXNzLmNoZGlyXG4gIHByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZCkge1xuICAgIGN3ZCA9IG51bGxcbiAgICBjaGRpci5jYWxsKHByb2Nlc3MsIGQpXG4gIH1cbiAgaWYgKE9iamVjdC5zZXRQcm90b3R5cGVPZikgT2JqZWN0LnNldFByb3RvdHlwZU9mKHByb2Nlc3MuY2hkaXIsIGNoZGlyKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGNoXG5cbmZ1bmN0aW9uIHBhdGNoIChmcykge1xuICAvLyAocmUtKWltcGxlbWVudCBzb21lIHRoaW5ncyB0aGF0IGFyZSBrbm93biBidXN0ZWQgb3IgbWlzc2luZy5cblxuICAvLyBsY2htb2QsIGJyb2tlbiBwcmlvciB0byAwLjYuMlxuICAvLyBiYWNrLXBvcnQgdGhlIGZpeCBoZXJlLlxuICBpZiAoY29uc3RhbnRzLmhhc093blByb3BlcnR5KCdPX1NZTUxJTksnKSAmJlxuICAgICAgcHJvY2Vzcy52ZXJzaW9uLm1hdGNoKC9edjBcXC42XFwuWzAtMl18XnYwXFwuNVxcLi8pKSB7XG4gICAgcGF0Y2hMY2htb2QoZnMpXG4gIH1cblxuICAvLyBsdXRpbWVzIGltcGxlbWVudGF0aW9uLCBvciBuby1vcFxuICBpZiAoIWZzLmx1dGltZXMpIHtcbiAgICBwYXRjaEx1dGltZXMoZnMpXG4gIH1cblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vaXNhYWNzL25vZGUtZ3JhY2VmdWwtZnMvaXNzdWVzLzRcbiAgLy8gQ2hvd24gc2hvdWxkIG5vdCBmYWlsIG9uIGVpbnZhbCBvciBlcGVybSBpZiBub24tcm9vdC5cbiAgLy8gSXQgc2hvdWxkIG5vdCBmYWlsIG9uIGVub3N5cyBldmVyLCBhcyB0aGlzIGp1c3QgaW5kaWNhdGVzXG4gIC8vIHRoYXQgYSBmcyBkb2Vzbid0IHN1cHBvcnQgdGhlIGludGVuZGVkIG9wZXJhdGlvbi5cblxuICBmcy5jaG93biA9IGNob3duRml4KGZzLmNob3duKVxuICBmcy5mY2hvd24gPSBjaG93bkZpeChmcy5mY2hvd24pXG4gIGZzLmxjaG93biA9IGNob3duRml4KGZzLmxjaG93bilcblxuICBmcy5jaG1vZCA9IGNobW9kRml4KGZzLmNobW9kKVxuICBmcy5mY2htb2QgPSBjaG1vZEZpeChmcy5mY2htb2QpXG4gIGZzLmxjaG1vZCA9IGNobW9kRml4KGZzLmxjaG1vZClcblxuICBmcy5jaG93blN5bmMgPSBjaG93bkZpeFN5bmMoZnMuY2hvd25TeW5jKVxuICBmcy5mY2hvd25TeW5jID0gY2hvd25GaXhTeW5jKGZzLmZjaG93blN5bmMpXG4gIGZzLmxjaG93blN5bmMgPSBjaG93bkZpeFN5bmMoZnMubGNob3duU3luYylcblxuICBmcy5jaG1vZFN5bmMgPSBjaG1vZEZpeFN5bmMoZnMuY2htb2RTeW5jKVxuICBmcy5mY2htb2RTeW5jID0gY2htb2RGaXhTeW5jKGZzLmZjaG1vZFN5bmMpXG4gIGZzLmxjaG1vZFN5bmMgPSBjaG1vZEZpeFN5bmMoZnMubGNobW9kU3luYylcblxuICBmcy5zdGF0ID0gc3RhdEZpeChmcy5zdGF0KVxuICBmcy5mc3RhdCA9IHN0YXRGaXgoZnMuZnN0YXQpXG4gIGZzLmxzdGF0ID0gc3RhdEZpeChmcy5sc3RhdClcblxuICBmcy5zdGF0U3luYyA9IHN0YXRGaXhTeW5jKGZzLnN0YXRTeW5jKVxuICBmcy5mc3RhdFN5bmMgPSBzdGF0Rml4U3luYyhmcy5mc3RhdFN5bmMpXG4gIGZzLmxzdGF0U3luYyA9IHN0YXRGaXhTeW5jKGZzLmxzdGF0U3luYylcblxuICAvLyBpZiBsY2htb2QvbGNob3duIGRvIG5vdCBleGlzdCwgdGhlbiBtYWtlIHRoZW0gbm8tb3BzXG4gIGlmIChmcy5jaG1vZCAmJiAhZnMubGNobW9kKSB7XG4gICAgZnMubGNobW9kID0gZnVuY3Rpb24gKHBhdGgsIG1vZGUsIGNiKSB7XG4gICAgICBpZiAoY2IpIHByb2Nlc3MubmV4dFRpY2soY2IpXG4gICAgfVxuICAgIGZzLmxjaG1vZFN5bmMgPSBmdW5jdGlvbiAoKSB7fVxuICB9XG4gIGlmIChmcy5jaG93biAmJiAhZnMubGNob3duKSB7XG4gICAgZnMubGNob3duID0gZnVuY3Rpb24gKHBhdGgsIHVpZCwgZ2lkLCBjYikge1xuICAgICAgaWYgKGNiKSBwcm9jZXNzLm5leHRUaWNrKGNiKVxuICAgIH1cbiAgICBmcy5sY2hvd25TeW5jID0gZnVuY3Rpb24gKCkge31cbiAgfVxuXG4gIC8vIG9uIFdpbmRvd3MsIEEvViBzb2Z0d2FyZSBjYW4gbG9jayB0aGUgZGlyZWN0b3J5LCBjYXVzaW5nIHRoaXNcbiAgLy8gdG8gZmFpbCB3aXRoIGFuIEVBQ0NFUyBvciBFUEVSTSBpZiB0aGUgZGlyZWN0b3J5IGNvbnRhaW5zIG5ld2x5XG4gIC8vIGNyZWF0ZWQgZmlsZXMuICBUcnkgYWdhaW4gb24gZmFpbHVyZSwgZm9yIHVwIHRvIDYwIHNlY29uZHMuXG5cbiAgLy8gU2V0IHRoZSB0aW1lb3V0IHRoaXMgbG9uZyBiZWNhdXNlIHNvbWUgV2luZG93cyBBbnRpLVZpcnVzLCBzdWNoIGFzIFBhcml0eVxuICAvLyBiaXQ5LCBtYXkgbG9jayBmaWxlcyBmb3IgdXAgdG8gYSBtaW51dGUsIGNhdXNpbmcgbnBtIHBhY2thZ2UgaW5zdGFsbFxuICAvLyBmYWlsdXJlcy4gQWxzbywgdGFrZSBjYXJlIHRvIHlpZWxkIHRoZSBzY2hlZHVsZXIuIFdpbmRvd3Mgc2NoZWR1bGluZyBnaXZlc1xuICAvLyBDUFUgdG8gYSBidXN5IGxvb3BpbmcgcHJvY2Vzcywgd2hpY2ggY2FuIGNhdXNlIHRoZSBwcm9ncmFtIGNhdXNpbmcgdGhlIGxvY2tcbiAgLy8gY29udGVudGlvbiB0byBiZSBzdGFydmVkIG9mIENQVSBieSBub2RlLCBzbyB0aGUgY29udGVudGlvbiBkb2Vzbid0IHJlc29sdmUuXG4gIGlmIChwbGF0Zm9ybSA9PT0gXCJ3aW4zMlwiKSB7XG4gICAgZnMucmVuYW1lID0gdHlwZW9mIGZzLnJlbmFtZSAhPT0gJ2Z1bmN0aW9uJyA/IGZzLnJlbmFtZVxuICAgIDogKGZ1bmN0aW9uIChmcyRyZW5hbWUpIHtcbiAgICAgIGZ1bmN0aW9uIHJlbmFtZSAoZnJvbSwgdG8sIGNiKSB7XG4gICAgICAgIHZhciBzdGFydCA9IERhdGUubm93KClcbiAgICAgICAgdmFyIGJhY2tvZmYgPSAwO1xuICAgICAgICBmcyRyZW5hbWUoZnJvbSwgdG8sIGZ1bmN0aW9uIENCIChlcikge1xuICAgICAgICAgIGlmIChlclxuICAgICAgICAgICAgICAmJiAoZXIuY29kZSA9PT0gXCJFQUNDRVNcIiB8fCBlci5jb2RlID09PSBcIkVQRVJNXCIgfHwgZXIuY29kZSA9PT0gXCJFQlVTWVwiKVxuICAgICAgICAgICAgICAmJiBEYXRlLm5vdygpIC0gc3RhcnQgPCA2MDAwMCkge1xuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgZnMuc3RhdCh0bywgZnVuY3Rpb24gKHN0YXRlciwgc3QpIHtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdGVyICYmIHN0YXRlci5jb2RlID09PSBcIkVOT0VOVFwiKVxuICAgICAgICAgICAgICAgICAgZnMkcmVuYW1lKGZyb20sIHRvLCBDQik7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgY2IoZXIpXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9LCBiYWNrb2ZmKVxuICAgICAgICAgICAgaWYgKGJhY2tvZmYgPCAxMDApXG4gICAgICAgICAgICAgIGJhY2tvZmYgKz0gMTA7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjYikgY2IoZXIpXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSBPYmplY3Quc2V0UHJvdG90eXBlT2YocmVuYW1lLCBmcyRyZW5hbWUpXG4gICAgICByZXR1cm4gcmVuYW1lXG4gICAgfSkoZnMucmVuYW1lKVxuICB9XG5cbiAgLy8gaWYgcmVhZCgpIHJldHVybnMgRUFHQUlOLCB0aGVuIGp1c3QgdHJ5IGl0IGFnYWluLlxuICBmcy5yZWFkID0gdHlwZW9mIGZzLnJlYWQgIT09ICdmdW5jdGlvbicgPyBmcy5yZWFkXG4gIDogKGZ1bmN0aW9uIChmcyRyZWFkKSB7XG4gICAgZnVuY3Rpb24gcmVhZCAoZmQsIGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgsIHBvc2l0aW9uLCBjYWxsYmFja18pIHtcbiAgICAgIHZhciBjYWxsYmFja1xuICAgICAgaWYgKGNhbGxiYWNrXyAmJiB0eXBlb2YgY2FsbGJhY2tfID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZhciBlYWdDb3VudGVyID0gMFxuICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uIChlciwgXywgX18pIHtcbiAgICAgICAgICBpZiAoZXIgJiYgZXIuY29kZSA9PT0gJ0VBR0FJTicgJiYgZWFnQ291bnRlciA8IDEwKSB7XG4gICAgICAgICAgICBlYWdDb3VudGVyICsrXG4gICAgICAgICAgICByZXR1cm4gZnMkcmVhZC5jYWxsKGZzLCBmZCwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24sIGNhbGxiYWNrKVxuICAgICAgICAgIH1cbiAgICAgICAgICBjYWxsYmFja18uYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZnMkcmVhZC5jYWxsKGZzLCBmZCwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24sIGNhbGxiYWNrKVxuICAgIH1cblxuICAgIC8vIFRoaXMgZW5zdXJlcyBgdXRpbC5wcm9taXNpZnlgIHdvcmtzIGFzIGl0IGRvZXMgZm9yIG5hdGl2ZSBgZnMucmVhZGAuXG4gICAgaWYgKE9iamVjdC5zZXRQcm90b3R5cGVPZikgT2JqZWN0LnNldFByb3RvdHlwZU9mKHJlYWQsIGZzJHJlYWQpXG4gICAgcmV0dXJuIHJlYWRcbiAgfSkoZnMucmVhZClcblxuICBmcy5yZWFkU3luYyA9IHR5cGVvZiBmcy5yZWFkU3luYyAhPT0gJ2Z1bmN0aW9uJyA/IGZzLnJlYWRTeW5jXG4gIDogKGZ1bmN0aW9uIChmcyRyZWFkU3luYykgeyByZXR1cm4gZnVuY3Rpb24gKGZkLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbikge1xuICAgIHZhciBlYWdDb3VudGVyID0gMFxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gZnMkcmVhZFN5bmMuY2FsbChmcywgZmQsIGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgsIHBvc2l0aW9uKVxuICAgICAgfSBjYXRjaCAoZXIpIHtcbiAgICAgICAgaWYgKGVyLmNvZGUgPT09ICdFQUdBSU4nICYmIGVhZ0NvdW50ZXIgPCAxMCkge1xuICAgICAgICAgIGVhZ0NvdW50ZXIgKytcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIHRocm93IGVyXG4gICAgICB9XG4gICAgfVxuICB9fSkoZnMucmVhZFN5bmMpXG5cbiAgZnVuY3Rpb24gcGF0Y2hMY2htb2QgKGZzKSB7XG4gICAgZnMubGNobW9kID0gZnVuY3Rpb24gKHBhdGgsIG1vZGUsIGNhbGxiYWNrKSB7XG4gICAgICBmcy5vcGVuKCBwYXRoXG4gICAgICAgICAgICAgLCBjb25zdGFudHMuT19XUk9OTFkgfCBjb25zdGFudHMuT19TWU1MSU5LXG4gICAgICAgICAgICAgLCBtb2RlXG4gICAgICAgICAgICAgLCBmdW5jdGlvbiAoZXJyLCBmZCkge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgaWYgKGNhbGxiYWNrKSBjYWxsYmFjayhlcnIpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgLy8gcHJlZmVyIHRvIHJldHVybiB0aGUgY2htb2QgZXJyb3IsIGlmIG9uZSBvY2N1cnMsXG4gICAgICAgIC8vIGJ1dCBzdGlsbCB0cnkgdG8gY2xvc2UsIGFuZCByZXBvcnQgY2xvc2luZyBlcnJvcnMgaWYgdGhleSBvY2N1ci5cbiAgICAgICAgZnMuZmNobW9kKGZkLCBtb2RlLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgZnMuY2xvc2UoZmQsIGZ1bmN0aW9uKGVycjIpIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjaykgY2FsbGJhY2soZXJyIHx8IGVycjIpXG4gICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgZnMubGNobW9kU3luYyA9IGZ1bmN0aW9uIChwYXRoLCBtb2RlKSB7XG4gICAgICB2YXIgZmQgPSBmcy5vcGVuU3luYyhwYXRoLCBjb25zdGFudHMuT19XUk9OTFkgfCBjb25zdGFudHMuT19TWU1MSU5LLCBtb2RlKVxuXG4gICAgICAvLyBwcmVmZXIgdG8gcmV0dXJuIHRoZSBjaG1vZCBlcnJvciwgaWYgb25lIG9jY3VycyxcbiAgICAgIC8vIGJ1dCBzdGlsbCB0cnkgdG8gY2xvc2UsIGFuZCByZXBvcnQgY2xvc2luZyBlcnJvcnMgaWYgdGhleSBvY2N1ci5cbiAgICAgIHZhciB0aHJldyA9IHRydWVcbiAgICAgIHZhciByZXRcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldCA9IGZzLmZjaG1vZFN5bmMoZmQsIG1vZGUpXG4gICAgICAgIHRocmV3ID0gZmFsc2VcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmICh0aHJldykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmcy5jbG9zZVN5bmMoZmQpXG4gICAgICAgICAgfSBjYXRjaCAoZXIpIHt9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZnMuY2xvc2VTeW5jKGZkKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmV0XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcGF0Y2hMdXRpbWVzIChmcykge1xuICAgIGlmIChjb25zdGFudHMuaGFzT3duUHJvcGVydHkoXCJPX1NZTUxJTktcIikgJiYgZnMuZnV0aW1lcykge1xuICAgICAgZnMubHV0aW1lcyA9IGZ1bmN0aW9uIChwYXRoLCBhdCwgbXQsIGNiKSB7XG4gICAgICAgIGZzLm9wZW4ocGF0aCwgY29uc3RhbnRzLk9fU1lNTElOSywgZnVuY3Rpb24gKGVyLCBmZCkge1xuICAgICAgICAgIGlmIChlcikge1xuICAgICAgICAgICAgaWYgKGNiKSBjYihlcilcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgICBmcy5mdXRpbWVzKGZkLCBhdCwgbXQsIGZ1bmN0aW9uIChlcikge1xuICAgICAgICAgICAgZnMuY2xvc2UoZmQsIGZ1bmN0aW9uIChlcjIpIHtcbiAgICAgICAgICAgICAgaWYgKGNiKSBjYihlciB8fCBlcjIpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGZzLmx1dGltZXNTeW5jID0gZnVuY3Rpb24gKHBhdGgsIGF0LCBtdCkge1xuICAgICAgICB2YXIgZmQgPSBmcy5vcGVuU3luYyhwYXRoLCBjb25zdGFudHMuT19TWU1MSU5LKVxuICAgICAgICB2YXIgcmV0XG4gICAgICAgIHZhciB0aHJldyA9IHRydWVcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXQgPSBmcy5mdXRpbWVzU3luYyhmZCwgYXQsIG10KVxuICAgICAgICAgIHRocmV3ID0gZmFsc2VcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBpZiAodGhyZXcpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGZzLmNsb3NlU3luYyhmZClcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVyKSB7fVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmcy5jbG9zZVN5bmMoZmQpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXRcbiAgICAgIH1cblxuICAgIH0gZWxzZSBpZiAoZnMuZnV0aW1lcykge1xuICAgICAgZnMubHV0aW1lcyA9IGZ1bmN0aW9uIChfYSwgX2IsIF9jLCBjYikgeyBpZiAoY2IpIHByb2Nlc3MubmV4dFRpY2soY2IpIH1cbiAgICAgIGZzLmx1dGltZXNTeW5jID0gZnVuY3Rpb24gKCkge31cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjaG1vZEZpeCAob3JpZykge1xuICAgIGlmICghb3JpZykgcmV0dXJuIG9yaWdcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwgbW9kZSwgY2IpIHtcbiAgICAgIHJldHVybiBvcmlnLmNhbGwoZnMsIHRhcmdldCwgbW9kZSwgZnVuY3Rpb24gKGVyKSB7XG4gICAgICAgIGlmIChjaG93bkVyT2soZXIpKSBlciA9IG51bGxcbiAgICAgICAgaWYgKGNiKSBjYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNobW9kRml4U3luYyAob3JpZykge1xuICAgIGlmICghb3JpZykgcmV0dXJuIG9yaWdcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwgbW9kZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG9yaWcuY2FsbChmcywgdGFyZ2V0LCBtb2RlKVxuICAgICAgfSBjYXRjaCAoZXIpIHtcbiAgICAgICAgaWYgKCFjaG93bkVyT2soZXIpKSB0aHJvdyBlclxuICAgICAgfVxuICAgIH1cbiAgfVxuXG5cbiAgZnVuY3Rpb24gY2hvd25GaXggKG9yaWcpIHtcbiAgICBpZiAoIW9yaWcpIHJldHVybiBvcmlnXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIHVpZCwgZ2lkLCBjYikge1xuICAgICAgcmV0dXJuIG9yaWcuY2FsbChmcywgdGFyZ2V0LCB1aWQsIGdpZCwgZnVuY3Rpb24gKGVyKSB7XG4gICAgICAgIGlmIChjaG93bkVyT2soZXIpKSBlciA9IG51bGxcbiAgICAgICAgaWYgKGNiKSBjYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNob3duRml4U3luYyAob3JpZykge1xuICAgIGlmICghb3JpZykgcmV0dXJuIG9yaWdcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwgdWlkLCBnaWQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBvcmlnLmNhbGwoZnMsIHRhcmdldCwgdWlkLCBnaWQpXG4gICAgICB9IGNhdGNoIChlcikge1xuICAgICAgICBpZiAoIWNob3duRXJPayhlcikpIHRocm93IGVyXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc3RhdEZpeCAob3JpZykge1xuICAgIGlmICghb3JpZykgcmV0dXJuIG9yaWdcbiAgICAvLyBPbGRlciB2ZXJzaW9ucyBvZiBOb2RlIGVycm9uZW91c2x5IHJldHVybmVkIHNpZ25lZCBpbnRlZ2VycyBmb3JcbiAgICAvLyB1aWQgKyBnaWQuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIG9wdGlvbnMsIGNiKSB7XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY2IgPSBvcHRpb25zXG4gICAgICAgIG9wdGlvbnMgPSBudWxsXG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBjYWxsYmFjayAoZXIsIHN0YXRzKSB7XG4gICAgICAgIGlmIChzdGF0cykge1xuICAgICAgICAgIGlmIChzdGF0cy51aWQgPCAwKSBzdGF0cy51aWQgKz0gMHgxMDAwMDAwMDBcbiAgICAgICAgICBpZiAoc3RhdHMuZ2lkIDwgMCkgc3RhdHMuZ2lkICs9IDB4MTAwMDAwMDAwXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNiKSBjYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICB9XG4gICAgICByZXR1cm4gb3B0aW9ucyA/IG9yaWcuY2FsbChmcywgdGFyZ2V0LCBvcHRpb25zLCBjYWxsYmFjaylcbiAgICAgICAgOiBvcmlnLmNhbGwoZnMsIHRhcmdldCwgY2FsbGJhY2spXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc3RhdEZpeFN5bmMgKG9yaWcpIHtcbiAgICBpZiAoIW9yaWcpIHJldHVybiBvcmlnXG4gICAgLy8gT2xkZXIgdmVyc2lvbnMgb2YgTm9kZSBlcnJvbmVvdXNseSByZXR1cm5lZCBzaWduZWQgaW50ZWdlcnMgZm9yXG4gICAgLy8gdWlkICsgZ2lkLlxuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBvcHRpb25zKSB7XG4gICAgICB2YXIgc3RhdHMgPSBvcHRpb25zID8gb3JpZy5jYWxsKGZzLCB0YXJnZXQsIG9wdGlvbnMpXG4gICAgICAgIDogb3JpZy5jYWxsKGZzLCB0YXJnZXQpXG4gICAgICBpZiAoc3RhdHMpIHtcbiAgICAgICAgaWYgKHN0YXRzLnVpZCA8IDApIHN0YXRzLnVpZCArPSAweDEwMDAwMDAwMFxuICAgICAgICBpZiAoc3RhdHMuZ2lkIDwgMCkgc3RhdHMuZ2lkICs9IDB4MTAwMDAwMDAwXG4gICAgICB9XG4gICAgICByZXR1cm4gc3RhdHM7XG4gICAgfVxuICB9XG5cbiAgLy8gRU5PU1lTIG1lYW5zIHRoYXQgdGhlIGZzIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgb3AuIEp1c3QgaWdub3JlXG4gIC8vIHRoYXQsIGJlY2F1c2UgaXQgZG9lc24ndCBtYXR0ZXIuXG4gIC8vXG4gIC8vIGlmIHRoZXJlJ3Mgbm8gZ2V0dWlkLCBvciBpZiBnZXR1aWQoKSBpcyBzb21ldGhpbmcgb3RoZXJcbiAgLy8gdGhhbiAwLCBhbmQgdGhlIGVycm9yIGlzIEVJTlZBTCBvciBFUEVSTSwgdGhlbiBqdXN0IGlnbm9yZVxuICAvLyBpdC5cbiAgLy9cbiAgLy8gVGhpcyBzcGVjaWZpYyBjYXNlIGlzIGEgc2lsZW50IGZhaWx1cmUgaW4gY3AsIGluc3RhbGwsIHRhcixcbiAgLy8gYW5kIG1vc3Qgb3RoZXIgdW5peCB0b29scyB0aGF0IG1hbmFnZSBwZXJtaXNzaW9ucy5cbiAgLy9cbiAgLy8gV2hlbiBydW5uaW5nIGFzIHJvb3QsIG9yIGlmIG90aGVyIHR5cGVzIG9mIGVycm9ycyBhcmVcbiAgLy8gZW5jb3VudGVyZWQsIHRoZW4gaXQncyBzdHJpY3QuXG4gIGZ1bmN0aW9uIGNob3duRXJPayAoZXIpIHtcbiAgICBpZiAoIWVyKVxuICAgICAgcmV0dXJuIHRydWVcblxuICAgIGlmIChlci5jb2RlID09PSBcIkVOT1NZU1wiKVxuICAgICAgcmV0dXJuIHRydWVcblxuICAgIHZhciBub25yb290ID0gIXByb2Nlc3MuZ2V0dWlkIHx8IHByb2Nlc3MuZ2V0dWlkKCkgIT09IDBcbiAgICBpZiAobm9ucm9vdCkge1xuICAgICAgaWYgKGVyLmNvZGUgPT09IFwiRUlOVkFMXCIgfHwgZXIuY29kZSA9PT0gXCJFUEVSTVwiKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG4iLAogICAgInZhciBTdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0nKS5TdHJlYW1cblxubW9kdWxlLmV4cG9ydHMgPSBsZWdhY3lcblxuZnVuY3Rpb24gbGVnYWN5IChmcykge1xuICByZXR1cm4ge1xuICAgIFJlYWRTdHJlYW06IFJlYWRTdHJlYW0sXG4gICAgV3JpdGVTdHJlYW06IFdyaXRlU3RyZWFtXG4gIH1cblxuICBmdW5jdGlvbiBSZWFkU3RyZWFtIChwYXRoLCBvcHRpb25zKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlYWRTdHJlYW0pKSByZXR1cm4gbmV3IFJlYWRTdHJlYW0ocGF0aCwgb3B0aW9ucyk7XG5cbiAgICBTdHJlYW0uY2FsbCh0aGlzKTtcblxuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHRoaXMucGF0aCA9IHBhdGg7XG4gICAgdGhpcy5mZCA9IG51bGw7XG4gICAgdGhpcy5yZWFkYWJsZSA9IHRydWU7XG4gICAgdGhpcy5wYXVzZWQgPSBmYWxzZTtcblxuICAgIHRoaXMuZmxhZ3MgPSAncic7XG4gICAgdGhpcy5tb2RlID0gNDM4OyAvKj0wNjY2Ki9cbiAgICB0aGlzLmJ1ZmZlclNpemUgPSA2NCAqIDEwMjQ7XG5cbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIC8vIE1peGluIG9wdGlvbnMgaW50byB0aGlzXG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvcHRpb25zKTtcbiAgICBmb3IgKHZhciBpbmRleCA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaW5kZXhdO1xuICAgICAgdGhpc1trZXldID0gb3B0aW9uc1trZXldO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmVuY29kaW5nKSB0aGlzLnNldEVuY29kaW5nKHRoaXMuZW5jb2RpbmcpO1xuXG4gICAgaWYgKHRoaXMuc3RhcnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCdudW1iZXInICE9PSB0eXBlb2YgdGhpcy5zdGFydCkge1xuICAgICAgICB0aHJvdyBUeXBlRXJyb3IoJ3N0YXJ0IG11c3QgYmUgYSBOdW1iZXInKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuZW5kID0gSW5maW5pdHk7XG4gICAgICB9IGVsc2UgaWYgKCdudW1iZXInICE9PSB0eXBlb2YgdGhpcy5lbmQpIHtcbiAgICAgICAgdGhyb3cgVHlwZUVycm9yKCdlbmQgbXVzdCBiZSBhIE51bWJlcicpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5zdGFydCA+IHRoaXMuZW5kKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignc3RhcnQgbXVzdCBiZSA8PSBlbmQnKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5wb3MgPSB0aGlzLnN0YXJ0O1xuICAgIH1cblxuICAgIGlmICh0aGlzLmZkICE9PSBudWxsKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uKCkge1xuICAgICAgICBzZWxmLl9yZWFkKCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmcy5vcGVuKHRoaXMucGF0aCwgdGhpcy5mbGFncywgdGhpcy5tb2RlLCBmdW5jdGlvbiAoZXJyLCBmZCkge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICBzZWxmLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgICAgICAgc2VsZi5yZWFkYWJsZSA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHNlbGYuZmQgPSBmZDtcbiAgICAgIHNlbGYuZW1pdCgnb3BlbicsIGZkKTtcbiAgICAgIHNlbGYuX3JlYWQoKTtcbiAgICB9KVxuICB9XG5cbiAgZnVuY3Rpb24gV3JpdGVTdHJlYW0gKHBhdGgsIG9wdGlvbnMpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgV3JpdGVTdHJlYW0pKSByZXR1cm4gbmV3IFdyaXRlU3RyZWFtKHBhdGgsIG9wdGlvbnMpO1xuXG4gICAgU3RyZWFtLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnBhdGggPSBwYXRoO1xuICAgIHRoaXMuZmQgPSBudWxsO1xuICAgIHRoaXMud3JpdGFibGUgPSB0cnVlO1xuXG4gICAgdGhpcy5mbGFncyA9ICd3JztcbiAgICB0aGlzLmVuY29kaW5nID0gJ2JpbmFyeSc7XG4gICAgdGhpcy5tb2RlID0gNDM4OyAvKj0wNjY2Ki9cbiAgICB0aGlzLmJ5dGVzV3JpdHRlbiA9IDA7XG5cbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIC8vIE1peGluIG9wdGlvbnMgaW50byB0aGlzXG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvcHRpb25zKTtcbiAgICBmb3IgKHZhciBpbmRleCA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaW5kZXhdO1xuICAgICAgdGhpc1trZXldID0gb3B0aW9uc1trZXldO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnN0YXJ0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICgnbnVtYmVyJyAhPT0gdHlwZW9mIHRoaXMuc3RhcnQpIHtcbiAgICAgICAgdGhyb3cgVHlwZUVycm9yKCdzdGFydCBtdXN0IGJlIGEgTnVtYmVyJyk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5zdGFydCA8IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzdGFydCBtdXN0IGJlID49IHplcm8nKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5wb3MgPSB0aGlzLnN0YXJ0O1xuICAgIH1cblxuICAgIHRoaXMuYnVzeSA9IGZhbHNlO1xuICAgIHRoaXMuX3F1ZXVlID0gW107XG5cbiAgICBpZiAodGhpcy5mZCA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5fb3BlbiA9IGZzLm9wZW47XG4gICAgICB0aGlzLl9xdWV1ZS5wdXNoKFt0aGlzLl9vcGVuLCB0aGlzLnBhdGgsIHRoaXMuZmxhZ3MsIHRoaXMubW9kZSwgdW5kZWZpbmVkXSk7XG4gICAgICB0aGlzLmZsdXNoKCk7XG4gICAgfVxuICB9XG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lXG5cbnZhciBnZXRQcm90b3R5cGVPZiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiBvYmouX19wcm90b19fXG59XG5cbmZ1bmN0aW9uIGNsb25lIChvYmopIHtcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqICE9PSAnb2JqZWN0JylcbiAgICByZXR1cm4gb2JqXG5cbiAgaWYgKG9iaiBpbnN0YW5jZW9mIE9iamVjdClcbiAgICB2YXIgY29weSA9IHsgX19wcm90b19fOiBnZXRQcm90b3R5cGVPZihvYmopIH1cbiAgZWxzZVxuICAgIHZhciBjb3B5ID0gT2JqZWN0LmNyZWF0ZShudWxsKVxuXG4gIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvcHksIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIGtleSkpXG4gIH0pXG5cbiAgcmV0dXJuIGNvcHlcbn1cbiIsCiAgICAidmFyIGZzID0gcmVxdWlyZSgnZnMnKVxudmFyIHBvbHlmaWxscyA9IHJlcXVpcmUoJy4vcG9seWZpbGxzLmpzJylcbnZhciBsZWdhY3kgPSByZXF1aXJlKCcuL2xlZ2FjeS1zdHJlYW1zLmpzJylcbnZhciBjbG9uZSA9IHJlcXVpcmUoJy4vY2xvbmUuanMnKVxuXG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKVxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAtIG5vZGUgMC54IHBvbHlmaWxsICovXG52YXIgZ3JhY2VmdWxRdWV1ZVxudmFyIHByZXZpb3VzU3ltYm9sXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlIC0gbm9kZSAwLnggcG9seWZpbGwgKi9cbmlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuZm9yID09PSAnZnVuY3Rpb24nKSB7XG4gIGdyYWNlZnVsUXVldWUgPSBTeW1ib2wuZm9yKCdncmFjZWZ1bC1mcy5xdWV1ZScpXG4gIC8vIFRoaXMgaXMgdXNlZCBpbiB0ZXN0aW5nIGJ5IGZ1dHVyZSB2ZXJzaW9uc1xuICBwcmV2aW91c1N5bWJvbCA9IFN5bWJvbC5mb3IoJ2dyYWNlZnVsLWZzLnByZXZpb3VzJylcbn0gZWxzZSB7XG4gIGdyYWNlZnVsUXVldWUgPSAnX19fZ3JhY2VmdWwtZnMucXVldWUnXG4gIHByZXZpb3VzU3ltYm9sID0gJ19fX2dyYWNlZnVsLWZzLnByZXZpb3VzJ1xufVxuXG5mdW5jdGlvbiBub29wICgpIHt9XG5cbmZ1bmN0aW9uIHB1Ymxpc2hRdWV1ZShjb250ZXh0LCBxdWV1ZSkge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29udGV4dCwgZ3JhY2VmdWxRdWV1ZSwge1xuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gcXVldWVcbiAgICB9XG4gIH0pXG59XG5cbnZhciBkZWJ1ZyA9IG5vb3BcbmlmICh1dGlsLmRlYnVnbG9nKVxuICBkZWJ1ZyA9IHV0aWwuZGVidWdsb2coJ2dmczQnKVxuZWxzZSBpZiAoL1xcYmdmczRcXGIvaS50ZXN0KHByb2Nlc3MuZW52Lk5PREVfREVCVUcgfHwgJycpKVxuICBkZWJ1ZyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBtID0gdXRpbC5mb3JtYXQuYXBwbHkodXRpbCwgYXJndW1lbnRzKVxuICAgIG0gPSAnR0ZTNDogJyArIG0uc3BsaXQoL1xcbi8pLmpvaW4oJ1xcbkdGUzQ6ICcpXG4gICAgY29uc29sZS5lcnJvcihtKVxuICB9XG5cbi8vIE9uY2UgdGltZSBpbml0aWFsaXphdGlvblxuaWYgKCFmc1tncmFjZWZ1bFF1ZXVlXSkge1xuICAvLyBUaGlzIHF1ZXVlIGNhbiBiZSBzaGFyZWQgYnkgbXVsdGlwbGUgbG9hZGVkIGluc3RhbmNlc1xuICB2YXIgcXVldWUgPSBnbG9iYWxbZ3JhY2VmdWxRdWV1ZV0gfHwgW11cbiAgcHVibGlzaFF1ZXVlKGZzLCBxdWV1ZSlcblxuICAvLyBQYXRjaCBmcy5jbG9zZS9jbG9zZVN5bmMgdG8gc2hhcmVkIHF1ZXVlIHZlcnNpb24sIGJlY2F1c2Ugd2UgbmVlZFxuICAvLyB0byByZXRyeSgpIHdoZW5ldmVyIGEgY2xvc2UgaGFwcGVucyAqYW55d2hlcmUqIGluIHRoZSBwcm9ncmFtLlxuICAvLyBUaGlzIGlzIGVzc2VudGlhbCB3aGVuIG11bHRpcGxlIGdyYWNlZnVsLWZzIGluc3RhbmNlcyBhcmVcbiAgLy8gaW4gcGxheSBhdCB0aGUgc2FtZSB0aW1lLlxuICBmcy5jbG9zZSA9IChmdW5jdGlvbiAoZnMkY2xvc2UpIHtcbiAgICBmdW5jdGlvbiBjbG9zZSAoZmQsIGNiKSB7XG4gICAgICByZXR1cm4gZnMkY2xvc2UuY2FsbChmcywgZmQsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiB1c2VzIHRoZSBncmFjZWZ1bC1mcyBzaGFyZWQgcXVldWVcbiAgICAgICAgaWYgKCFlcnIpIHtcbiAgICAgICAgICByZXNldFF1ZXVlKClcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgY2IuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY2xvc2UsIHByZXZpb3VzU3ltYm9sLCB7XG4gICAgICB2YWx1ZTogZnMkY2xvc2VcbiAgICB9KVxuICAgIHJldHVybiBjbG9zZVxuICB9KShmcy5jbG9zZSlcblxuICBmcy5jbG9zZVN5bmMgPSAoZnVuY3Rpb24gKGZzJGNsb3NlU3luYykge1xuICAgIGZ1bmN0aW9uIGNsb3NlU3luYyAoZmQpIHtcbiAgICAgIC8vIFRoaXMgZnVuY3Rpb24gdXNlcyB0aGUgZ3JhY2VmdWwtZnMgc2hhcmVkIHF1ZXVlXG4gICAgICBmcyRjbG9zZVN5bmMuYXBwbHkoZnMsIGFyZ3VtZW50cylcbiAgICAgIHJlc2V0UXVldWUoKVxuICAgIH1cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjbG9zZVN5bmMsIHByZXZpb3VzU3ltYm9sLCB7XG4gICAgICB2YWx1ZTogZnMkY2xvc2VTeW5jXG4gICAgfSlcbiAgICByZXR1cm4gY2xvc2VTeW5jXG4gIH0pKGZzLmNsb3NlU3luYylcblxuICBpZiAoL1xcYmdmczRcXGIvaS50ZXN0KHByb2Nlc3MuZW52Lk5PREVfREVCVUcgfHwgJycpKSB7XG4gICAgcHJvY2Vzcy5vbignZXhpdCcsIGZ1bmN0aW9uKCkge1xuICAgICAgZGVidWcoZnNbZ3JhY2VmdWxRdWV1ZV0pXG4gICAgICByZXF1aXJlKCdhc3NlcnQnKS5lcXVhbChmc1tncmFjZWZ1bFF1ZXVlXS5sZW5ndGgsIDApXG4gICAgfSlcbiAgfVxufVxuXG5pZiAoIWdsb2JhbFtncmFjZWZ1bFF1ZXVlXSkge1xuICBwdWJsaXNoUXVldWUoZ2xvYmFsLCBmc1tncmFjZWZ1bFF1ZXVlXSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0Y2goY2xvbmUoZnMpKVxuaWYgKHByb2Nlc3MuZW52LlRFU1RfR1JBQ0VGVUxfRlNfR0xPQkFMX1BBVENIICYmICFmcy5fX3BhdGNoZWQpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IHBhdGNoKGZzKVxuICAgIGZzLl9fcGF0Y2hlZCA9IHRydWU7XG59XG5cbmZ1bmN0aW9uIHBhdGNoIChmcykge1xuICAvLyBFdmVyeXRoaW5nIHRoYXQgcmVmZXJlbmNlcyB0aGUgb3BlbigpIGZ1bmN0aW9uIG5lZWRzIHRvIGJlIGluIGhlcmVcbiAgcG9seWZpbGxzKGZzKVxuICBmcy5ncmFjZWZ1bGlmeSA9IHBhdGNoXG5cbiAgZnMuY3JlYXRlUmVhZFN0cmVhbSA9IGNyZWF0ZVJlYWRTdHJlYW1cbiAgZnMuY3JlYXRlV3JpdGVTdHJlYW0gPSBjcmVhdGVXcml0ZVN0cmVhbVxuICB2YXIgZnMkcmVhZEZpbGUgPSBmcy5yZWFkRmlsZVxuICBmcy5yZWFkRmlsZSA9IHJlYWRGaWxlXG4gIGZ1bmN0aW9uIHJlYWRGaWxlIChwYXRoLCBvcHRpb25zLCBjYikge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgIGNiID0gb3B0aW9ucywgb3B0aW9ucyA9IG51bGxcblxuICAgIHJldHVybiBnbyRyZWFkRmlsZShwYXRoLCBvcHRpb25zLCBjYilcblxuICAgIGZ1bmN0aW9uIGdvJHJlYWRGaWxlIChwYXRoLCBvcHRpb25zLCBjYiwgc3RhcnRUaW1lKSB7XG4gICAgICByZXR1cm4gZnMkcmVhZEZpbGUocGF0aCwgb3B0aW9ucywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAoZXJyICYmIChlcnIuY29kZSA9PT0gJ0VNRklMRScgfHwgZXJyLmNvZGUgPT09ICdFTkZJTEUnKSlcbiAgICAgICAgICBlbnF1ZXVlKFtnbyRyZWFkRmlsZSwgW3BhdGgsIG9wdGlvbnMsIGNiXSwgZXJyLCBzdGFydFRpbWUgfHwgRGF0ZS5ub3coKSwgRGF0ZS5ub3coKV0pXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICBjYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgdmFyIGZzJHdyaXRlRmlsZSA9IGZzLndyaXRlRmlsZVxuICBmcy53cml0ZUZpbGUgPSB3cml0ZUZpbGVcbiAgZnVuY3Rpb24gd3JpdGVGaWxlIChwYXRoLCBkYXRhLCBvcHRpb25zLCBjYikge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgIGNiID0gb3B0aW9ucywgb3B0aW9ucyA9IG51bGxcblxuICAgIHJldHVybiBnbyR3cml0ZUZpbGUocGF0aCwgZGF0YSwgb3B0aW9ucywgY2IpXG5cbiAgICBmdW5jdGlvbiBnbyR3cml0ZUZpbGUgKHBhdGgsIGRhdGEsIG9wdGlvbnMsIGNiLCBzdGFydFRpbWUpIHtcbiAgICAgIHJldHVybiBmcyR3cml0ZUZpbGUocGF0aCwgZGF0YSwgb3B0aW9ucywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAoZXJyICYmIChlcnIuY29kZSA9PT0gJ0VNRklMRScgfHwgZXJyLmNvZGUgPT09ICdFTkZJTEUnKSlcbiAgICAgICAgICBlbnF1ZXVlKFtnbyR3cml0ZUZpbGUsIFtwYXRoLCBkYXRhLCBvcHRpb25zLCBjYl0sIGVyciwgc3RhcnRUaW1lIHx8IERhdGUubm93KCksIERhdGUubm93KCldKVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgY2IuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHZhciBmcyRhcHBlbmRGaWxlID0gZnMuYXBwZW5kRmlsZVxuICBpZiAoZnMkYXBwZW5kRmlsZSlcbiAgICBmcy5hcHBlbmRGaWxlID0gYXBwZW5kRmlsZVxuICBmdW5jdGlvbiBhcHBlbmRGaWxlIChwYXRoLCBkYXRhLCBvcHRpb25zLCBjYikge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgIGNiID0gb3B0aW9ucywgb3B0aW9ucyA9IG51bGxcblxuICAgIHJldHVybiBnbyRhcHBlbmRGaWxlKHBhdGgsIGRhdGEsIG9wdGlvbnMsIGNiKVxuXG4gICAgZnVuY3Rpb24gZ28kYXBwZW5kRmlsZSAocGF0aCwgZGF0YSwgb3B0aW9ucywgY2IsIHN0YXJ0VGltZSkge1xuICAgICAgcmV0dXJuIGZzJGFwcGVuZEZpbGUocGF0aCwgZGF0YSwgb3B0aW9ucywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAoZXJyICYmIChlcnIuY29kZSA9PT0gJ0VNRklMRScgfHwgZXJyLmNvZGUgPT09ICdFTkZJTEUnKSlcbiAgICAgICAgICBlbnF1ZXVlKFtnbyRhcHBlbmRGaWxlLCBbcGF0aCwgZGF0YSwgb3B0aW9ucywgY2JdLCBlcnIsIHN0YXJ0VGltZSB8fCBEYXRlLm5vdygpLCBEYXRlLm5vdygpXSlcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICB2YXIgZnMkY29weUZpbGUgPSBmcy5jb3B5RmlsZVxuICBpZiAoZnMkY29weUZpbGUpXG4gICAgZnMuY29weUZpbGUgPSBjb3B5RmlsZVxuICBmdW5jdGlvbiBjb3B5RmlsZSAoc3JjLCBkZXN0LCBmbGFncywgY2IpIHtcbiAgICBpZiAodHlwZW9mIGZsYWdzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjYiA9IGZsYWdzXG4gICAgICBmbGFncyA9IDBcbiAgICB9XG4gICAgcmV0dXJuIGdvJGNvcHlGaWxlKHNyYywgZGVzdCwgZmxhZ3MsIGNiKVxuXG4gICAgZnVuY3Rpb24gZ28kY29weUZpbGUgKHNyYywgZGVzdCwgZmxhZ3MsIGNiLCBzdGFydFRpbWUpIHtcbiAgICAgIHJldHVybiBmcyRjb3B5RmlsZShzcmMsIGRlc3QsIGZsYWdzLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmIChlcnIgJiYgKGVyci5jb2RlID09PSAnRU1GSUxFJyB8fCBlcnIuY29kZSA9PT0gJ0VORklMRScpKVxuICAgICAgICAgIGVucXVldWUoW2dvJGNvcHlGaWxlLCBbc3JjLCBkZXN0LCBmbGFncywgY2JdLCBlcnIsIHN0YXJ0VGltZSB8fCBEYXRlLm5vdygpLCBEYXRlLm5vdygpXSlcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICB2YXIgZnMkcmVhZGRpciA9IGZzLnJlYWRkaXJcbiAgZnMucmVhZGRpciA9IHJlYWRkaXJcbiAgdmFyIG5vUmVhZGRpck9wdGlvblZlcnNpb25zID0gL152WzAtNV1cXC4vXG4gIGZ1bmN0aW9uIHJlYWRkaXIgKHBhdGgsIG9wdGlvbnMsIGNiKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKVxuICAgICAgY2IgPSBvcHRpb25zLCBvcHRpb25zID0gbnVsbFxuXG4gICAgdmFyIGdvJHJlYWRkaXIgPSBub1JlYWRkaXJPcHRpb25WZXJzaW9ucy50ZXN0KHByb2Nlc3MudmVyc2lvbilcbiAgICAgID8gZnVuY3Rpb24gZ28kcmVhZGRpciAocGF0aCwgb3B0aW9ucywgY2IsIHN0YXJ0VGltZSkge1xuICAgICAgICByZXR1cm4gZnMkcmVhZGRpcihwYXRoLCBmcyRyZWFkZGlyQ2FsbGJhY2soXG4gICAgICAgICAgcGF0aCwgb3B0aW9ucywgY2IsIHN0YXJ0VGltZVxuICAgICAgICApKVxuICAgICAgfVxuICAgICAgOiBmdW5jdGlvbiBnbyRyZWFkZGlyIChwYXRoLCBvcHRpb25zLCBjYiwgc3RhcnRUaW1lKSB7XG4gICAgICAgIHJldHVybiBmcyRyZWFkZGlyKHBhdGgsIG9wdGlvbnMsIGZzJHJlYWRkaXJDYWxsYmFjayhcbiAgICAgICAgICBwYXRoLCBvcHRpb25zLCBjYiwgc3RhcnRUaW1lXG4gICAgICAgICkpXG4gICAgICB9XG5cbiAgICByZXR1cm4gZ28kcmVhZGRpcihwYXRoLCBvcHRpb25zLCBjYilcblxuICAgIGZ1bmN0aW9uIGZzJHJlYWRkaXJDYWxsYmFjayAocGF0aCwgb3B0aW9ucywgY2IsIHN0YXJ0VGltZSkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChlcnIsIGZpbGVzKSB7XG4gICAgICAgIGlmIChlcnIgJiYgKGVyci5jb2RlID09PSAnRU1GSUxFJyB8fCBlcnIuY29kZSA9PT0gJ0VORklMRScpKVxuICAgICAgICAgIGVucXVldWUoW1xuICAgICAgICAgICAgZ28kcmVhZGRpcixcbiAgICAgICAgICAgIFtwYXRoLCBvcHRpb25zLCBjYl0sXG4gICAgICAgICAgICBlcnIsXG4gICAgICAgICAgICBzdGFydFRpbWUgfHwgRGF0ZS5ub3coKSxcbiAgICAgICAgICAgIERhdGUubm93KClcbiAgICAgICAgICBdKVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAoZmlsZXMgJiYgZmlsZXMuc29ydClcbiAgICAgICAgICAgIGZpbGVzLnNvcnQoKVxuXG4gICAgICAgICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIGNiLmNhbGwodGhpcywgZXJyLCBmaWxlcylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChwcm9jZXNzLnZlcnNpb24uc3Vic3RyKDAsIDQpID09PSAndjAuOCcpIHtcbiAgICB2YXIgbGVnU3RyZWFtcyA9IGxlZ2FjeShmcylcbiAgICBSZWFkU3RyZWFtID0gbGVnU3RyZWFtcy5SZWFkU3RyZWFtXG4gICAgV3JpdGVTdHJlYW0gPSBsZWdTdHJlYW1zLldyaXRlU3RyZWFtXG4gIH1cblxuICB2YXIgZnMkUmVhZFN0cmVhbSA9IGZzLlJlYWRTdHJlYW1cbiAgaWYgKGZzJFJlYWRTdHJlYW0pIHtcbiAgICBSZWFkU3RyZWFtLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZnMkUmVhZFN0cmVhbS5wcm90b3R5cGUpXG4gICAgUmVhZFN0cmVhbS5wcm90b3R5cGUub3BlbiA9IFJlYWRTdHJlYW0kb3BlblxuICB9XG5cbiAgdmFyIGZzJFdyaXRlU3RyZWFtID0gZnMuV3JpdGVTdHJlYW1cbiAgaWYgKGZzJFdyaXRlU3RyZWFtKSB7XG4gICAgV3JpdGVTdHJlYW0ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShmcyRXcml0ZVN0cmVhbS5wcm90b3R5cGUpXG4gICAgV3JpdGVTdHJlYW0ucHJvdG90eXBlLm9wZW4gPSBXcml0ZVN0cmVhbSRvcGVuXG4gIH1cblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnMsICdSZWFkU3RyZWFtJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIFJlYWRTdHJlYW1cbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgUmVhZFN0cmVhbSA9IHZhbFxuICAgIH0sXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSlcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZzLCAnV3JpdGVTdHJlYW0nLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gV3JpdGVTdHJlYW1cbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgV3JpdGVTdHJlYW0gPSB2YWxcbiAgICB9LFxuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pXG5cbiAgLy8gbGVnYWN5IG5hbWVzXG4gIHZhciBGaWxlUmVhZFN0cmVhbSA9IFJlYWRTdHJlYW1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZzLCAnRmlsZVJlYWRTdHJlYW0nLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gRmlsZVJlYWRTdHJlYW1cbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgRmlsZVJlYWRTdHJlYW0gPSB2YWxcbiAgICB9LFxuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pXG4gIHZhciBGaWxlV3JpdGVTdHJlYW0gPSBXcml0ZVN0cmVhbVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnMsICdGaWxlV3JpdGVTdHJlYW0nLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gRmlsZVdyaXRlU3RyZWFtXG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIEZpbGVXcml0ZVN0cmVhbSA9IHZhbFxuICAgIH0sXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSlcblxuICBmdW5jdGlvbiBSZWFkU3RyZWFtIChwYXRoLCBvcHRpb25zKSB7XG4gICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBSZWFkU3RyZWFtKVxuICAgICAgcmV0dXJuIGZzJFJlYWRTdHJlYW0uYXBwbHkodGhpcywgYXJndW1lbnRzKSwgdGhpc1xuICAgIGVsc2VcbiAgICAgIHJldHVybiBSZWFkU3RyZWFtLmFwcGx5KE9iamVjdC5jcmVhdGUoUmVhZFN0cmVhbS5wcm90b3R5cGUpLCBhcmd1bWVudHMpXG4gIH1cblxuICBmdW5jdGlvbiBSZWFkU3RyZWFtJG9wZW4gKCkge1xuICAgIHZhciB0aGF0ID0gdGhpc1xuICAgIG9wZW4odGhhdC5wYXRoLCB0aGF0LmZsYWdzLCB0aGF0Lm1vZGUsIGZ1bmN0aW9uIChlcnIsIGZkKSB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIGlmICh0aGF0LmF1dG9DbG9zZSlcbiAgICAgICAgICB0aGF0LmRlc3Ryb3koKVxuXG4gICAgICAgIHRoYXQuZW1pdCgnZXJyb3InLCBlcnIpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGF0LmZkID0gZmRcbiAgICAgICAgdGhhdC5lbWl0KCdvcGVuJywgZmQpXG4gICAgICAgIHRoYXQucmVhZCgpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIFdyaXRlU3RyZWFtIChwYXRoLCBvcHRpb25zKSB7XG4gICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBXcml0ZVN0cmVhbSlcbiAgICAgIHJldHVybiBmcyRXcml0ZVN0cmVhbS5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCB0aGlzXG4gICAgZWxzZVxuICAgICAgcmV0dXJuIFdyaXRlU3RyZWFtLmFwcGx5KE9iamVjdC5jcmVhdGUoV3JpdGVTdHJlYW0ucHJvdG90eXBlKSwgYXJndW1lbnRzKVxuICB9XG5cbiAgZnVuY3Rpb24gV3JpdGVTdHJlYW0kb3BlbiAoKSB7XG4gICAgdmFyIHRoYXQgPSB0aGlzXG4gICAgb3Blbih0aGF0LnBhdGgsIHRoYXQuZmxhZ3MsIHRoYXQubW9kZSwgZnVuY3Rpb24gKGVyciwgZmQpIHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgdGhhdC5kZXN0cm95KClcbiAgICAgICAgdGhhdC5lbWl0KCdlcnJvcicsIGVycilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoYXQuZmQgPSBmZFxuICAgICAgICB0aGF0LmVtaXQoJ29wZW4nLCBmZClcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlUmVhZFN0cmVhbSAocGF0aCwgb3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgZnMuUmVhZFN0cmVhbShwYXRoLCBvcHRpb25zKVxuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlV3JpdGVTdHJlYW0gKHBhdGgsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IGZzLldyaXRlU3RyZWFtKHBhdGgsIG9wdGlvbnMpXG4gIH1cblxuICB2YXIgZnMkb3BlbiA9IGZzLm9wZW5cbiAgZnMub3BlbiA9IG9wZW5cbiAgZnVuY3Rpb24gb3BlbiAocGF0aCwgZmxhZ3MsIG1vZGUsIGNiKSB7XG4gICAgaWYgKHR5cGVvZiBtb2RlID09PSAnZnVuY3Rpb24nKVxuICAgICAgY2IgPSBtb2RlLCBtb2RlID0gbnVsbFxuXG4gICAgcmV0dXJuIGdvJG9wZW4ocGF0aCwgZmxhZ3MsIG1vZGUsIGNiKVxuXG4gICAgZnVuY3Rpb24gZ28kb3BlbiAocGF0aCwgZmxhZ3MsIG1vZGUsIGNiLCBzdGFydFRpbWUpIHtcbiAgICAgIHJldHVybiBmcyRvcGVuKHBhdGgsIGZsYWdzLCBtb2RlLCBmdW5jdGlvbiAoZXJyLCBmZCkge1xuICAgICAgICBpZiAoZXJyICYmIChlcnIuY29kZSA9PT0gJ0VNRklMRScgfHwgZXJyLmNvZGUgPT09ICdFTkZJTEUnKSlcbiAgICAgICAgICBlbnF1ZXVlKFtnbyRvcGVuLCBbcGF0aCwgZmxhZ3MsIG1vZGUsIGNiXSwgZXJyLCBzdGFydFRpbWUgfHwgRGF0ZS5ub3coKSwgRGF0ZS5ub3coKV0pXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICBjYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZzXG59XG5cbmZ1bmN0aW9uIGVucXVldWUgKGVsZW0pIHtcbiAgZGVidWcoJ0VOUVVFVUUnLCBlbGVtWzBdLm5hbWUsIGVsZW1bMV0pXG4gIGZzW2dyYWNlZnVsUXVldWVdLnB1c2goZWxlbSlcbiAgcmV0cnkoKVxufVxuXG4vLyBrZWVwIHRyYWNrIG9mIHRoZSB0aW1lb3V0IGJldHdlZW4gcmV0cnkoKSBjYWxsc1xudmFyIHJldHJ5VGltZXJcblxuLy8gcmVzZXQgdGhlIHN0YXJ0VGltZSBhbmQgbGFzdFRpbWUgdG8gbm93XG4vLyB0aGlzIHJlc2V0cyB0aGUgc3RhcnQgb2YgdGhlIDYwIHNlY29uZCBvdmVyYWxsIHRpbWVvdXQgYXMgd2VsbCBhcyB0aGVcbi8vIGRlbGF5IGJldHdlZW4gYXR0ZW1wdHMgc28gdGhhdCB3ZSdsbCByZXRyeSB0aGVzZSBqb2JzIHNvb25lclxuZnVuY3Rpb24gcmVzZXRRdWV1ZSAoKSB7XG4gIHZhciBub3cgPSBEYXRlLm5vdygpXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZnNbZ3JhY2VmdWxRdWV1ZV0ubGVuZ3RoOyArK2kpIHtcbiAgICAvLyBlbnRyaWVzIHRoYXQgYXJlIG9ubHkgYSBsZW5ndGggb2YgMiBhcmUgZnJvbSBhbiBvbGRlciB2ZXJzaW9uLCBkb24ndFxuICAgIC8vIGJvdGhlciBtb2RpZnlpbmcgdGhvc2Ugc2luY2UgdGhleSdsbCBiZSByZXRyaWVkIGFueXdheS5cbiAgICBpZiAoZnNbZ3JhY2VmdWxRdWV1ZV1baV0ubGVuZ3RoID4gMikge1xuICAgICAgZnNbZ3JhY2VmdWxRdWV1ZV1baV1bM10gPSBub3cgLy8gc3RhcnRUaW1lXG4gICAgICBmc1tncmFjZWZ1bFF1ZXVlXVtpXVs0XSA9IG5vdyAvLyBsYXN0VGltZVxuICAgIH1cbiAgfVxuICAvLyBjYWxsIHJldHJ5IHRvIG1ha2Ugc3VyZSB3ZSdyZSBhY3RpdmVseSBwcm9jZXNzaW5nIHRoZSBxdWV1ZVxuICByZXRyeSgpXG59XG5cbmZ1bmN0aW9uIHJldHJ5ICgpIHtcbiAgLy8gY2xlYXIgdGhlIHRpbWVyIGFuZCByZW1vdmUgaXQgdG8gaGVscCBwcmV2ZW50IHVuaW50ZW5kZWQgY29uY3VycmVuY3lcbiAgY2xlYXJUaW1lb3V0KHJldHJ5VGltZXIpXG4gIHJldHJ5VGltZXIgPSB1bmRlZmluZWRcblxuICBpZiAoZnNbZ3JhY2VmdWxRdWV1ZV0ubGVuZ3RoID09PSAwKVxuICAgIHJldHVyblxuXG4gIHZhciBlbGVtID0gZnNbZ3JhY2VmdWxRdWV1ZV0uc2hpZnQoKVxuICB2YXIgZm4gPSBlbGVtWzBdXG4gIHZhciBhcmdzID0gZWxlbVsxXVxuICAvLyB0aGVzZSBpdGVtcyBtYXkgYmUgdW5zZXQgaWYgdGhleSB3ZXJlIGFkZGVkIGJ5IGFuIG9sZGVyIGdyYWNlZnVsLWZzXG4gIHZhciBlcnIgPSBlbGVtWzJdXG4gIHZhciBzdGFydFRpbWUgPSBlbGVtWzNdXG4gIHZhciBsYXN0VGltZSA9IGVsZW1bNF1cblxuICAvLyBpZiB3ZSBkb24ndCBoYXZlIGEgc3RhcnRUaW1lIHdlIGhhdmUgbm8gd2F5IG9mIGtub3dpbmcgaWYgd2UndmUgd2FpdGVkXG4gIC8vIGxvbmcgZW5vdWdoLCBzbyBnbyBhaGVhZCBhbmQgcmV0cnkgdGhpcyBpdGVtIG5vd1xuICBpZiAoc3RhcnRUaW1lID09PSB1bmRlZmluZWQpIHtcbiAgICBkZWJ1ZygnUkVUUlknLCBmbi5uYW1lLCBhcmdzKVxuICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MpXG4gIH0gZWxzZSBpZiAoRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSA+PSA2MDAwMCkge1xuICAgIC8vIGl0J3MgYmVlbiBtb3JlIHRoYW4gNjAgc2Vjb25kcyB0b3RhbCwgYmFpbCBub3dcbiAgICBkZWJ1ZygnVElNRU9VVCcsIGZuLm5hbWUsIGFyZ3MpXG4gICAgdmFyIGNiID0gYXJncy5wb3AoKVxuICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpXG4gICAgICBjYi5jYWxsKG51bGwsIGVycilcbiAgfSBlbHNlIHtcbiAgICAvLyB0aGUgYW1vdW50IG9mIHRpbWUgYmV0d2VlbiB0aGUgbGFzdCBhdHRlbXB0IGFuZCByaWdodCBub3dcbiAgICB2YXIgc2luY2VBdHRlbXB0ID0gRGF0ZS5ub3coKSAtIGxhc3RUaW1lXG4gICAgLy8gdGhlIGFtb3VudCBvZiB0aW1lIGJldHdlZW4gd2hlbiB3ZSBmaXJzdCB0cmllZCwgYW5kIHdoZW4gd2UgbGFzdCB0cmllZFxuICAgIC8vIHJvdW5kZWQgdXAgdG8gYXQgbGVhc3QgMVxuICAgIHZhciBzaW5jZVN0YXJ0ID0gTWF0aC5tYXgobGFzdFRpbWUgLSBzdGFydFRpbWUsIDEpXG4gICAgLy8gYmFja29mZi4gd2FpdCBsb25nZXIgdGhhbiB0aGUgdG90YWwgdGltZSB3ZSd2ZSBiZWVuIHJldHJ5aW5nLCBidXQgb25seVxuICAgIC8vIHVwIHRvIGEgbWF4aW11bSBvZiAxMDBtc1xuICAgIHZhciBkZXNpcmVkRGVsYXkgPSBNYXRoLm1pbihzaW5jZVN0YXJ0ICogMS4yLCAxMDApXG4gICAgLy8gaXQncyBiZWVuIGxvbmcgZW5vdWdoIHNpbmNlIHRoZSBsYXN0IHJldHJ5LCBkbyBpdCBhZ2FpblxuICAgIGlmIChzaW5jZUF0dGVtcHQgPj0gZGVzaXJlZERlbGF5KSB7XG4gICAgICBkZWJ1ZygnUkVUUlknLCBmbi5uYW1lLCBhcmdzKVxuICAgICAgZm4uYXBwbHkobnVsbCwgYXJncy5jb25jYXQoW3N0YXJ0VGltZV0pKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpZiB3ZSBjYW4ndCBkbyB0aGlzIGpvYiB5ZXQsIHB1c2ggaXQgdG8gdGhlIGVuZCBvZiB0aGUgcXVldWVcbiAgICAgIC8vIGFuZCBsZXQgdGhlIG5leHQgaXRlcmF0aW9uIGNoZWNrIGFnYWluXG4gICAgICBmc1tncmFjZWZ1bFF1ZXVlXS5wdXNoKGVsZW0pXG4gICAgfVxuICB9XG5cbiAgLy8gc2NoZWR1bGUgb3VyIG5leHQgcnVuIGlmIG9uZSBpc24ndCBhbHJlYWR5IHNjaGVkdWxlZFxuICBpZiAocmV0cnlUaW1lciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0cnlUaW1lciA9IHNldFRpbWVvdXQocmV0cnksIDApXG4gIH1cbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBpc1N0cmVhbSA9IHN0cmVhbSA9PlxuXHRzdHJlYW0gIT09IG51bGwgJiZcblx0dHlwZW9mIHN0cmVhbSA9PT0gJ29iamVjdCcgJiZcblx0dHlwZW9mIHN0cmVhbS5waXBlID09PSAnZnVuY3Rpb24nO1xuXG5pc1N0cmVhbS53cml0YWJsZSA9IHN0cmVhbSA9PlxuXHRpc1N0cmVhbShzdHJlYW0pICYmXG5cdHN0cmVhbS53cml0YWJsZSAhPT0gZmFsc2UgJiZcblx0dHlwZW9mIHN0cmVhbS5fd3JpdGUgPT09ICdmdW5jdGlvbicgJiZcblx0dHlwZW9mIHN0cmVhbS5fd3JpdGFibGVTdGF0ZSA9PT0gJ29iamVjdCc7XG5cbmlzU3RyZWFtLnJlYWRhYmxlID0gc3RyZWFtID0+XG5cdGlzU3RyZWFtKHN0cmVhbSkgJiZcblx0c3RyZWFtLnJlYWRhYmxlICE9PSBmYWxzZSAmJlxuXHR0eXBlb2Ygc3RyZWFtLl9yZWFkID09PSAnZnVuY3Rpb24nICYmXG5cdHR5cGVvZiBzdHJlYW0uX3JlYWRhYmxlU3RhdGUgPT09ICdvYmplY3QnO1xuXG5pc1N0cmVhbS5kdXBsZXggPSBzdHJlYW0gPT5cblx0aXNTdHJlYW0ud3JpdGFibGUoc3RyZWFtKSAmJlxuXHRpc1N0cmVhbS5yZWFkYWJsZShzdHJlYW0pO1xuXG5pc1N0cmVhbS50cmFuc2Zvcm0gPSBzdHJlYW0gPT5cblx0aXNTdHJlYW0uZHVwbGV4KHN0cmVhbSkgJiZcblx0dHlwZW9mIHN0cmVhbS5fdHJhbnNmb3JtID09PSAnZnVuY3Rpb24nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzU3RyZWFtO1xuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbmlmICh0eXBlb2YgcHJvY2VzcyA9PT0gJ3VuZGVmaW5lZCcgfHxcbiAgICAhcHJvY2Vzcy52ZXJzaW9uIHx8XG4gICAgcHJvY2Vzcy52ZXJzaW9uLmluZGV4T2YoJ3YwLicpID09PSAwIHx8XG4gICAgcHJvY2Vzcy52ZXJzaW9uLmluZGV4T2YoJ3YxLicpID09PSAwICYmIHByb2Nlc3MudmVyc2lvbi5pbmRleE9mKCd2MS44LicpICE9PSAwKSB7XG4gIG1vZHVsZS5leHBvcnRzID0geyBuZXh0VGljazogbmV4dFRpY2sgfTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcHJvY2Vzc1xufVxuXG5mdW5jdGlvbiBuZXh0VGljayhmbiwgYXJnMSwgYXJnMiwgYXJnMykge1xuICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJjYWxsYmFja1wiIGFyZ3VtZW50IG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICB9XG4gIHZhciBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICB2YXIgYXJncywgaTtcbiAgc3dpdGNoIChsZW4pIHtcbiAgY2FzZSAwOlxuICBjYXNlIDE6XG4gICAgcmV0dXJuIHByb2Nlc3MubmV4dFRpY2soZm4pO1xuICBjYXNlIDI6XG4gICAgcmV0dXJuIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gYWZ0ZXJUaWNrT25lKCkge1xuICAgICAgZm4uY2FsbChudWxsLCBhcmcxKTtcbiAgICB9KTtcbiAgY2FzZSAzOlxuICAgIHJldHVybiBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uIGFmdGVyVGlja1R3bygpIHtcbiAgICAgIGZuLmNhbGwobnVsbCwgYXJnMSwgYXJnMik7XG4gICAgfSk7XG4gIGNhc2UgNDpcbiAgICByZXR1cm4gcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiBhZnRlclRpY2tUaHJlZSgpIHtcbiAgICAgIGZuLmNhbGwobnVsbCwgYXJnMSwgYXJnMiwgYXJnMyk7XG4gICAgfSk7XG4gIGRlZmF1bHQ6XG4gICAgYXJncyA9IG5ldyBBcnJheShsZW4gLSAxKTtcbiAgICBpID0gMDtcbiAgICB3aGlsZSAoaSA8IGFyZ3MubGVuZ3RoKSB7XG4gICAgICBhcmdzW2krK10gPSBhcmd1bWVudHNbaV07XG4gICAgfVxuICAgIHJldHVybiBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uIGFmdGVyVGljaygpIHtcbiAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgIH0pO1xuICB9XG59XG5cbiIsCiAgICAidmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoYXJyKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKGFycikgPT0gJ1tvYmplY3QgQXJyYXldJztcbn07XG4iLAogICAgIi8qIGVzbGludC1kaXNhYmxlIG5vZGUvbm8tZGVwcmVjYXRlZC1hcGkgKi9cbnZhciBidWZmZXIgPSByZXF1aXJlKCdidWZmZXInKVxudmFyIEJ1ZmZlciA9IGJ1ZmZlci5CdWZmZXJcblxuLy8gYWx0ZXJuYXRpdmUgdG8gdXNpbmcgT2JqZWN0LmtleXMgZm9yIG9sZCBicm93c2Vyc1xuZnVuY3Rpb24gY29weVByb3BzIChzcmMsIGRzdCkge1xuICBmb3IgKHZhciBrZXkgaW4gc3JjKSB7XG4gICAgZHN0W2tleV0gPSBzcmNba2V5XVxuICB9XG59XG5pZiAoQnVmZmVyLmZyb20gJiYgQnVmZmVyLmFsbG9jICYmIEJ1ZmZlci5hbGxvY1Vuc2FmZSAmJiBCdWZmZXIuYWxsb2NVbnNhZmVTbG93KSB7XG4gIG1vZHVsZS5leHBvcnRzID0gYnVmZmVyXG59IGVsc2Uge1xuICAvLyBDb3B5IHByb3BlcnRpZXMgZnJvbSByZXF1aXJlKCdidWZmZXInKVxuICBjb3B5UHJvcHMoYnVmZmVyLCBleHBvcnRzKVxuICBleHBvcnRzLkJ1ZmZlciA9IFNhZmVCdWZmZXJcbn1cblxuZnVuY3Rpb24gU2FmZUJ1ZmZlciAoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIEJ1ZmZlcihhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuLy8gQ29weSBzdGF0aWMgbWV0aG9kcyBmcm9tIEJ1ZmZlclxuY29weVByb3BzKEJ1ZmZlciwgU2FmZUJ1ZmZlcilcblxuU2FmZUJ1ZmZlci5mcm9tID0gZnVuY3Rpb24gKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmICh0eXBlb2YgYXJnID09PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyJylcbiAgfVxuICByZXR1cm4gQnVmZmVyKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxufVxuXG5TYWZlQnVmZmVyLmFsbG9jID0gZnVuY3Rpb24gKHNpemUsIGZpbGwsIGVuY29kaW5nKSB7XG4gIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJylcbiAgfVxuICB2YXIgYnVmID0gQnVmZmVyKHNpemUpXG4gIGlmIChmaWxsICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnc3RyaW5nJykge1xuICAgICAgYnVmLmZpbGwoZmlsbCwgZW5jb2RpbmcpXG4gICAgfSBlbHNlIHtcbiAgICAgIGJ1Zi5maWxsKGZpbGwpXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGJ1Zi5maWxsKDApXG4gIH1cbiAgcmV0dXJuIGJ1ZlxufVxuXG5TYWZlQnVmZmVyLmFsbG9jVW5zYWZlID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKVxuICB9XG4gIHJldHVybiBCdWZmZXIoc2l6ZSlcbn1cblxuU2FmZUJ1ZmZlci5hbGxvY1Vuc2FmZVNsb3cgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpXG4gIH1cbiAgcmV0dXJuIGJ1ZmZlci5TbG93QnVmZmVyKHNpemUpXG59XG4iLAogICAgIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyBOT1RFOiBUaGVzZSB0eXBlIGNoZWNraW5nIGZ1bmN0aW9ucyBpbnRlbnRpb25hbGx5IGRvbid0IHVzZSBgaW5zdGFuY2VvZmBcbi8vIGJlY2F1c2UgaXQgaXMgZnJhZ2lsZSBhbmQgY2FuIGJlIGVhc2lseSBmYWtlZCB3aXRoIGBPYmplY3QuY3JlYXRlKClgLlxuXG5mdW5jdGlvbiBpc0FycmF5KGFyZykge1xuICBpZiAoQXJyYXkuaXNBcnJheSkge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KGFyZyk7XG4gIH1cbiAgcmV0dXJuIG9iamVjdFRvU3RyaW5nKGFyZykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59XG5leHBvcnRzLmlzQXJyYXkgPSBpc0FycmF5O1xuXG5mdW5jdGlvbiBpc0Jvb2xlYW4oYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnYm9vbGVhbic7XG59XG5leHBvcnRzLmlzQm9vbGVhbiA9IGlzQm9vbGVhbjtcblxuZnVuY3Rpb24gaXNOdWxsKGFyZykge1xuICByZXR1cm4gYXJnID09PSBudWxsO1xufVxuZXhwb3J0cy5pc051bGwgPSBpc051bGw7XG5cbmZ1bmN0aW9uIGlzTnVsbE9yVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gYXJnID09IG51bGw7XG59XG5leHBvcnRzLmlzTnVsbE9yVW5kZWZpbmVkID0gaXNOdWxsT3JVbmRlZmluZWQ7XG5cbmZ1bmN0aW9uIGlzTnVtYmVyKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ251bWJlcic7XG59XG5leHBvcnRzLmlzTnVtYmVyID0gaXNOdW1iZXI7XG5cbmZ1bmN0aW9uIGlzU3RyaW5nKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ3N0cmluZyc7XG59XG5leHBvcnRzLmlzU3RyaW5nID0gaXNTdHJpbmc7XG5cbmZ1bmN0aW9uIGlzU3ltYm9sKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ3N5bWJvbCc7XG59XG5leHBvcnRzLmlzU3ltYm9sID0gaXNTeW1ib2w7XG5cbmZ1bmN0aW9uIGlzVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gYXJnID09PSB2b2lkIDA7XG59XG5leHBvcnRzLmlzVW5kZWZpbmVkID0gaXNVbmRlZmluZWQ7XG5cbmZ1bmN0aW9uIGlzUmVnRXhwKHJlKSB7XG4gIHJldHVybiBvYmplY3RUb1N0cmluZyhyZSkgPT09ICdbb2JqZWN0IFJlZ0V4cF0nO1xufVxuZXhwb3J0cy5pc1JlZ0V4cCA9IGlzUmVnRXhwO1xuXG5mdW5jdGlvbiBpc09iamVjdChhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdvYmplY3QnICYmIGFyZyAhPT0gbnVsbDtcbn1cbmV4cG9ydHMuaXNPYmplY3QgPSBpc09iamVjdDtcblxuZnVuY3Rpb24gaXNEYXRlKGQpIHtcbiAgcmV0dXJuIG9iamVjdFRvU3RyaW5nKGQpID09PSAnW29iamVjdCBEYXRlXSc7XG59XG5leHBvcnRzLmlzRGF0ZSA9IGlzRGF0ZTtcblxuZnVuY3Rpb24gaXNFcnJvcihlKSB7XG4gIHJldHVybiAob2JqZWN0VG9TdHJpbmcoZSkgPT09ICdbb2JqZWN0IEVycm9yXScgfHwgZSBpbnN0YW5jZW9mIEVycm9yKTtcbn1cbmV4cG9ydHMuaXNFcnJvciA9IGlzRXJyb3I7XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24oYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnZnVuY3Rpb24nO1xufVxuZXhwb3J0cy5pc0Z1bmN0aW9uID0gaXNGdW5jdGlvbjtcblxuZnVuY3Rpb24gaXNQcmltaXRpdmUoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IG51bGwgfHxcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICdib29sZWFuJyB8fFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ251bWJlcicgfHxcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnIHx8XG4gICAgICAgICB0eXBlb2YgYXJnID09PSAnc3ltYm9sJyB8fCAgLy8gRVM2IHN5bWJvbFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ3VuZGVmaW5lZCc7XG59XG5leHBvcnRzLmlzUHJpbWl0aXZlID0gaXNQcmltaXRpdmU7XG5cbmV4cG9ydHMuaXNCdWZmZXIgPSByZXF1aXJlKCdidWZmZXInKS5CdWZmZXIuaXNCdWZmZXI7XG5cbmZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKG8pIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKTtcbn1cbiIsCiAgICAiaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIGltcGxlbWVudGF0aW9uIGZyb20gc3RhbmRhcmQgbm9kZS5qcyAndXRpbCcgbW9kdWxlXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgaWYgKHN1cGVyQ3Rvcikge1xuICAgICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICAgIGN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckN0b3IucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgICAgdmFsdWU6IGN0b3IsXG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9O1xufSBlbHNlIHtcbiAgLy8gb2xkIHNjaG9vbCBzaGltIGZvciBvbGQgYnJvd3NlcnNcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBpZiAoc3VwZXJDdG9yKSB7XG4gICAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvclxuICAgICAgdmFyIFRlbXBDdG9yID0gZnVuY3Rpb24gKCkge31cbiAgICAgIFRlbXBDdG9yLnByb3RvdHlwZSA9IHN1cGVyQ3Rvci5wcm90b3R5cGVcbiAgICAgIGN0b3IucHJvdG90eXBlID0gbmV3IFRlbXBDdG9yKClcbiAgICAgIGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvclxuICAgIH1cbiAgfVxufVxuIiwKICAgICJ0cnkge1xuICB2YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgaWYgKHR5cGVvZiB1dGlsLmluaGVyaXRzICE9PSAnZnVuY3Rpb24nKSB0aHJvdyAnJztcbiAgbW9kdWxlLmV4cG9ydHMgPSB1dGlsLmluaGVyaXRzO1xufSBjYXRjaCAoZSkge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vaW5oZXJpdHNfYnJvd3Nlci5qcycpO1xufVxuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbnZhciBCdWZmZXIgPSByZXF1aXJlKCdzYWZlLWJ1ZmZlcicpLkJ1ZmZlcjtcbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuXG5mdW5jdGlvbiBjb3B5QnVmZmVyKHNyYywgdGFyZ2V0LCBvZmZzZXQpIHtcbiAgc3JjLmNvcHkodGFyZ2V0LCBvZmZzZXQpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gQnVmZmVyTGlzdCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQnVmZmVyTGlzdCk7XG5cbiAgICB0aGlzLmhlYWQgPSBudWxsO1xuICAgIHRoaXMudGFpbCA9IG51bGw7XG4gICAgdGhpcy5sZW5ndGggPSAwO1xuICB9XG5cbiAgQnVmZmVyTGlzdC5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIHB1c2godikge1xuICAgIHZhciBlbnRyeSA9IHsgZGF0YTogdiwgbmV4dDogbnVsbCB9O1xuICAgIGlmICh0aGlzLmxlbmd0aCA+IDApIHRoaXMudGFpbC5uZXh0ID0gZW50cnk7ZWxzZSB0aGlzLmhlYWQgPSBlbnRyeTtcbiAgICB0aGlzLnRhaWwgPSBlbnRyeTtcbiAgICArK3RoaXMubGVuZ3RoO1xuICB9O1xuXG4gIEJ1ZmZlckxpc3QucHJvdG90eXBlLnVuc2hpZnQgPSBmdW5jdGlvbiB1bnNoaWZ0KHYpIHtcbiAgICB2YXIgZW50cnkgPSB7IGRhdGE6IHYsIG5leHQ6IHRoaXMuaGVhZCB9O1xuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkgdGhpcy50YWlsID0gZW50cnk7XG4gICAgdGhpcy5oZWFkID0gZW50cnk7XG4gICAgKyt0aGlzLmxlbmd0aDtcbiAgfTtcblxuICBCdWZmZXJMaXN0LnByb3RvdHlwZS5zaGlmdCA9IGZ1bmN0aW9uIHNoaWZ0KCkge1xuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIHZhciByZXQgPSB0aGlzLmhlYWQuZGF0YTtcbiAgICBpZiAodGhpcy5sZW5ndGggPT09IDEpIHRoaXMuaGVhZCA9IHRoaXMudGFpbCA9IG51bGw7ZWxzZSB0aGlzLmhlYWQgPSB0aGlzLmhlYWQubmV4dDtcbiAgICAtLXRoaXMubGVuZ3RoO1xuICAgIHJldHVybiByZXQ7XG4gIH07XG5cbiAgQnVmZmVyTGlzdC5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICB0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBudWxsO1xuICAgIHRoaXMubGVuZ3RoID0gMDtcbiAgfTtcblxuICBCdWZmZXJMaXN0LnByb3RvdHlwZS5qb2luID0gZnVuY3Rpb24gam9pbihzKSB7XG4gICAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSByZXR1cm4gJyc7XG4gICAgdmFyIHAgPSB0aGlzLmhlYWQ7XG4gICAgdmFyIHJldCA9ICcnICsgcC5kYXRhO1xuICAgIHdoaWxlIChwID0gcC5uZXh0KSB7XG4gICAgICByZXQgKz0gcyArIHAuZGF0YTtcbiAgICB9cmV0dXJuIHJldDtcbiAgfTtcblxuICBCdWZmZXJMaXN0LnByb3RvdHlwZS5jb25jYXQgPSBmdW5jdGlvbiBjb25jYXQobikge1xuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIEJ1ZmZlci5hbGxvYygwKTtcbiAgICB2YXIgcmV0ID0gQnVmZmVyLmFsbG9jVW5zYWZlKG4gPj4+IDApO1xuICAgIHZhciBwID0gdGhpcy5oZWFkO1xuICAgIHZhciBpID0gMDtcbiAgICB3aGlsZSAocCkge1xuICAgICAgY29weUJ1ZmZlcihwLmRhdGEsIHJldCwgaSk7XG4gICAgICBpICs9IHAuZGF0YS5sZW5ndGg7XG4gICAgICBwID0gcC5uZXh0O1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xuICB9O1xuXG4gIHJldHVybiBCdWZmZXJMaXN0O1xufSgpO1xuXG5pZiAodXRpbCAmJiB1dGlsLmluc3BlY3QgJiYgdXRpbC5pbnNwZWN0LmN1c3RvbSkge1xuICBtb2R1bGUuZXhwb3J0cy5wcm90b3R5cGVbdXRpbC5pbnNwZWN0LmN1c3RvbV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG9iaiA9IHV0aWwuaW5zcGVjdCh7IGxlbmd0aDogdGhpcy5sZW5ndGggfSk7XG4gICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IubmFtZSArICcgJyArIG9iajtcbiAgfTtcbn0iLAogICAgIid1c2Ugc3RyaWN0JztcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cblxudmFyIHBuYSA9IHJlcXVpcmUoJ3Byb2Nlc3MtbmV4dGljay1hcmdzJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuLy8gdW5kb2N1bWVudGVkIGNiKCkgQVBJLCBuZWVkZWQgZm9yIGNvcmUsIG5vdCBmb3IgcHVibGljIEFQSVxuZnVuY3Rpb24gZGVzdHJveShlcnIsIGNiKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgdmFyIHJlYWRhYmxlRGVzdHJveWVkID0gdGhpcy5fcmVhZGFibGVTdGF0ZSAmJiB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZDtcbiAgdmFyIHdyaXRhYmxlRGVzdHJveWVkID0gdGhpcy5fd3JpdGFibGVTdGF0ZSAmJiB0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZDtcblxuICBpZiAocmVhZGFibGVEZXN0cm95ZWQgfHwgd3JpdGFibGVEZXN0cm95ZWQpIHtcbiAgICBpZiAoY2IpIHtcbiAgICAgIGNiKGVycik7XG4gICAgfSBlbHNlIGlmIChlcnIpIHtcbiAgICAgIGlmICghdGhpcy5fd3JpdGFibGVTdGF0ZSkge1xuICAgICAgICBwbmEubmV4dFRpY2soZW1pdEVycm9yTlQsIHRoaXMsIGVycik7XG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZCkge1xuICAgICAgICB0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZCA9IHRydWU7XG4gICAgICAgIHBuYS5uZXh0VGljayhlbWl0RXJyb3JOVCwgdGhpcywgZXJyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIHdlIHNldCBkZXN0cm95ZWQgdG8gdHJ1ZSBiZWZvcmUgZmlyaW5nIGVycm9yIGNhbGxiYWNrcyBpbiBvcmRlclxuICAvLyB0byBtYWtlIGl0IHJlLWVudHJhbmNlIHNhZmUgaW4gY2FzZSBkZXN0cm95KCkgaXMgY2FsbGVkIHdpdGhpbiBjYWxsYmFja3NcblxuICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZSkge1xuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8vIGlmIHRoaXMgaXMgYSBkdXBsZXggc3RyZWFtIG1hcmsgdGhlIHdyaXRhYmxlIHBhcnQgYXMgZGVzdHJveWVkIGFzIHdlbGxcbiAgaWYgKHRoaXMuX3dyaXRhYmxlU3RhdGUpIHtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZCA9IHRydWU7XG4gIH1cblxuICB0aGlzLl9kZXN0cm95KGVyciB8fCBudWxsLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgaWYgKCFjYiAmJiBlcnIpIHtcbiAgICAgIGlmICghX3RoaXMuX3dyaXRhYmxlU3RhdGUpIHtcbiAgICAgICAgcG5hLm5leHRUaWNrKGVtaXRFcnJvck5ULCBfdGhpcywgZXJyKTtcbiAgICAgIH0gZWxzZSBpZiAoIV90aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZCkge1xuICAgICAgICBfdGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQgPSB0cnVlO1xuICAgICAgICBwbmEubmV4dFRpY2soZW1pdEVycm9yTlQsIF90aGlzLCBlcnIpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2IpIHtcbiAgICAgIGNiKGVycik7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gdW5kZXN0cm95KCkge1xuICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZSkge1xuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkID0gZmFsc2U7XG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5yZWFkaW5nID0gZmFsc2U7XG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRlZCA9IGZhbHNlO1xuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCA9IGZhbHNlO1xuICB9XG5cbiAgaWYgKHRoaXMuX3dyaXRhYmxlU3RhdGUpIHtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZCA9IGZhbHNlO1xuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWQgPSBmYWxzZTtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmVuZGluZyA9IGZhbHNlO1xuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluYWxDYWxsZWQgPSBmYWxzZTtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLnByZWZpbmlzaGVkID0gZmFsc2U7XG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5pc2hlZCA9IGZhbHNlO1xuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkID0gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gZW1pdEVycm9yTlQoc2VsZiwgZXJyKSB7XG4gIHNlbGYuZW1pdCgnZXJyb3InLCBlcnIpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZGVzdHJveTogZGVzdHJveSxcbiAgdW5kZXN0cm95OiB1bmRlc3Ryb3lcbn07IiwKICAgICJcbi8qKlxuICogRm9yIE5vZGUuanMsIHNpbXBseSByZS1leHBvcnQgdGhlIGNvcmUgYHV0aWwuZGVwcmVjYXRlYCBmdW5jdGlvbi5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJ3V0aWwnKS5kZXByZWNhdGU7XG4iLAogICAgIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyBBIGJpdCBzaW1wbGVyIHRoYW4gcmVhZGFibGUgc3RyZWFtcy5cbi8vIEltcGxlbWVudCBhbiBhc3luYyAuX3dyaXRlKGNodW5rLCBlbmNvZGluZywgY2IpLCBhbmQgaXQnbGwgaGFuZGxlIGFsbFxuLy8gdGhlIGRyYWluIGV2ZW50IGVtaXNzaW9uIGFuZCBidWZmZXJpbmcuXG5cbid1c2Ugc3RyaWN0JztcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cblxudmFyIHBuYSA9IHJlcXVpcmUoJ3Byb2Nlc3MtbmV4dGljay1hcmdzJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxubW9kdWxlLmV4cG9ydHMgPSBXcml0YWJsZTtcblxuLyogPHJlcGxhY2VtZW50PiAqL1xuZnVuY3Rpb24gV3JpdGVSZXEoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICB0aGlzLmNodW5rID0gY2h1bms7XG4gIHRoaXMuZW5jb2RpbmcgPSBlbmNvZGluZztcbiAgdGhpcy5jYWxsYmFjayA9IGNiO1xuICB0aGlzLm5leHQgPSBudWxsO1xufVxuXG4vLyBJdCBzZWVtcyBhIGxpbmtlZCBsaXN0IGJ1dCBpdCBpcyBub3Rcbi8vIHRoZXJlIHdpbGwgYmUgb25seSAyIG9mIHRoZXNlIGZvciBlYWNoIHN0cmVhbVxuZnVuY3Rpb24gQ29ya2VkUmVxdWVzdChzdGF0ZSkge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gIHRoaXMubmV4dCA9IG51bGw7XG4gIHRoaXMuZW50cnkgPSBudWxsO1xuICB0aGlzLmZpbmlzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICBvbkNvcmtlZEZpbmlzaChfdGhpcywgc3RhdGUpO1xuICB9O1xufVxuLyogPC9yZXBsYWNlbWVudD4gKi9cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBhc3luY1dyaXRlID0gIXByb2Nlc3MuYnJvd3NlciAmJiBbJ3YwLjEwJywgJ3YwLjkuJ10uaW5kZXhPZihwcm9jZXNzLnZlcnNpb24uc2xpY2UoMCwgNSkpID4gLTEgPyBzZXRJbW1lZGlhdGUgOiBwbmEubmV4dFRpY2s7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBEdXBsZXg7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuV3JpdGFibGUuV3JpdGFibGVTdGF0ZSA9IFdyaXRhYmxlU3RhdGU7XG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgdXRpbCA9IE9iamVjdC5jcmVhdGUocmVxdWlyZSgnY29yZS11dGlsLWlzJykpO1xudXRpbC5pbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBpbnRlcm5hbFV0aWwgPSB7XG4gIGRlcHJlY2F0ZTogcmVxdWlyZSgndXRpbC1kZXByZWNhdGUnKVxufTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIFN0cmVhbSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvc3RyZWFtcy9zdHJlYW0nKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG4vKjxyZXBsYWNlbWVudD4qL1xuXG52YXIgQnVmZmVyID0gcmVxdWlyZSgnc2FmZS1idWZmZXInKS5CdWZmZXI7XG52YXIgT3VyVWludDhBcnJheSA9ICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbCA6IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogdHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnID8gc2VsZiA6IHt9KS5VaW50OEFycmF5IHx8IGZ1bmN0aW9uICgpIHt9O1xuZnVuY3Rpb24gX3VpbnQ4QXJyYXlUb0J1ZmZlcihjaHVuaykge1xuICByZXR1cm4gQnVmZmVyLmZyb20oY2h1bmspO1xufVxuZnVuY3Rpb24gX2lzVWludDhBcnJheShvYmopIHtcbiAgcmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihvYmopIHx8IG9iaiBpbnN0YW5jZW9mIE91clVpbnQ4QXJyYXk7XG59XG5cbi8qPC9yZXBsYWNlbWVudD4qL1xuXG52YXIgZGVzdHJveUltcGwgPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvZGVzdHJveScpO1xuXG51dGlsLmluaGVyaXRzKFdyaXRhYmxlLCBTdHJlYW0pO1xuXG5mdW5jdGlvbiBub3AoKSB7fVxuXG5mdW5jdGlvbiBXcml0YWJsZVN0YXRlKG9wdGlvbnMsIHN0cmVhbSkge1xuICBEdXBsZXggPSBEdXBsZXggfHwgcmVxdWlyZSgnLi9fc3RyZWFtX2R1cGxleCcpO1xuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIC8vIER1cGxleCBzdHJlYW1zIGFyZSBib3RoIHJlYWRhYmxlIGFuZCB3cml0YWJsZSwgYnV0IHNoYXJlXG4gIC8vIHRoZSBzYW1lIG9wdGlvbnMgb2JqZWN0LlxuICAvLyBIb3dldmVyLCBzb21lIGNhc2VzIHJlcXVpcmUgc2V0dGluZyBvcHRpb25zIHRvIGRpZmZlcmVudFxuICAvLyB2YWx1ZXMgZm9yIHRoZSByZWFkYWJsZSBhbmQgdGhlIHdyaXRhYmxlIHNpZGVzIG9mIHRoZSBkdXBsZXggc3RyZWFtLlxuICAvLyBUaGVzZSBvcHRpb25zIGNhbiBiZSBwcm92aWRlZCBzZXBhcmF0ZWx5IGFzIHJlYWRhYmxlWFhYIGFuZCB3cml0YWJsZVhYWC5cbiAgdmFyIGlzRHVwbGV4ID0gc3RyZWFtIGluc3RhbmNlb2YgRHVwbGV4O1xuXG4gIC8vIG9iamVjdCBzdHJlYW0gZmxhZyB0byBpbmRpY2F0ZSB3aGV0aGVyIG9yIG5vdCB0aGlzIHN0cmVhbVxuICAvLyBjb250YWlucyBidWZmZXJzIG9yIG9iamVjdHMuXG4gIHRoaXMub2JqZWN0TW9kZSA9ICEhb3B0aW9ucy5vYmplY3RNb2RlO1xuXG4gIGlmIChpc0R1cGxleCkgdGhpcy5vYmplY3RNb2RlID0gdGhpcy5vYmplY3RNb2RlIHx8ICEhb3B0aW9ucy53cml0YWJsZU9iamVjdE1vZGU7XG5cbiAgLy8gdGhlIHBvaW50IGF0IHdoaWNoIHdyaXRlKCkgc3RhcnRzIHJldHVybmluZyBmYWxzZVxuICAvLyBOb3RlOiAwIGlzIGEgdmFsaWQgdmFsdWUsIG1lYW5zIHRoYXQgd2UgYWx3YXlzIHJldHVybiBmYWxzZSBpZlxuICAvLyB0aGUgZW50aXJlIGJ1ZmZlciBpcyBub3QgZmx1c2hlZCBpbW1lZGlhdGVseSBvbiB3cml0ZSgpXG4gIHZhciBod20gPSBvcHRpb25zLmhpZ2hXYXRlck1hcms7XG4gIHZhciB3cml0YWJsZUh3bSA9IG9wdGlvbnMud3JpdGFibGVIaWdoV2F0ZXJNYXJrO1xuICB2YXIgZGVmYXVsdEh3bSA9IHRoaXMub2JqZWN0TW9kZSA/IDE2IDogMTYgKiAxMDI0O1xuXG4gIGlmIChod20gfHwgaHdtID09PSAwKSB0aGlzLmhpZ2hXYXRlck1hcmsgPSBod207ZWxzZSBpZiAoaXNEdXBsZXggJiYgKHdyaXRhYmxlSHdtIHx8IHdyaXRhYmxlSHdtID09PSAwKSkgdGhpcy5oaWdoV2F0ZXJNYXJrID0gd3JpdGFibGVId207ZWxzZSB0aGlzLmhpZ2hXYXRlck1hcmsgPSBkZWZhdWx0SHdtO1xuXG4gIC8vIGNhc3QgdG8gaW50cy5cbiAgdGhpcy5oaWdoV2F0ZXJNYXJrID0gTWF0aC5mbG9vcih0aGlzLmhpZ2hXYXRlck1hcmspO1xuXG4gIC8vIGlmIF9maW5hbCBoYXMgYmVlbiBjYWxsZWRcbiAgdGhpcy5maW5hbENhbGxlZCA9IGZhbHNlO1xuXG4gIC8vIGRyYWluIGV2ZW50IGZsYWcuXG4gIHRoaXMubmVlZERyYWluID0gZmFsc2U7XG4gIC8vIGF0IHRoZSBzdGFydCBvZiBjYWxsaW5nIGVuZCgpXG4gIHRoaXMuZW5kaW5nID0gZmFsc2U7XG4gIC8vIHdoZW4gZW5kKCkgaGFzIGJlZW4gY2FsbGVkLCBhbmQgcmV0dXJuZWRcbiAgdGhpcy5lbmRlZCA9IGZhbHNlO1xuICAvLyB3aGVuICdmaW5pc2gnIGlzIGVtaXR0ZWRcbiAgdGhpcy5maW5pc2hlZCA9IGZhbHNlO1xuXG4gIC8vIGhhcyBpdCBiZWVuIGRlc3Ryb3llZFxuICB0aGlzLmRlc3Ryb3llZCA9IGZhbHNlO1xuXG4gIC8vIHNob3VsZCB3ZSBkZWNvZGUgc3RyaW5ncyBpbnRvIGJ1ZmZlcnMgYmVmb3JlIHBhc3NpbmcgdG8gX3dyaXRlP1xuICAvLyB0aGlzIGlzIGhlcmUgc28gdGhhdCBzb21lIG5vZGUtY29yZSBzdHJlYW1zIGNhbiBvcHRpbWl6ZSBzdHJpbmdcbiAgLy8gaGFuZGxpbmcgYXQgYSBsb3dlciBsZXZlbC5cbiAgdmFyIG5vRGVjb2RlID0gb3B0aW9ucy5kZWNvZGVTdHJpbmdzID09PSBmYWxzZTtcbiAgdGhpcy5kZWNvZGVTdHJpbmdzID0gIW5vRGVjb2RlO1xuXG4gIC8vIENyeXB0byBpcyBraW5kIG9mIG9sZCBhbmQgY3J1c3R5LiAgSGlzdG9yaWNhbGx5LCBpdHMgZGVmYXVsdCBzdHJpbmdcbiAgLy8gZW5jb2RpbmcgaXMgJ2JpbmFyeScgc28gd2UgaGF2ZSB0byBtYWtlIHRoaXMgY29uZmlndXJhYmxlLlxuICAvLyBFdmVyeXRoaW5nIGVsc2UgaW4gdGhlIHVuaXZlcnNlIHVzZXMgJ3V0ZjgnLCB0aG91Z2guXG4gIHRoaXMuZGVmYXVsdEVuY29kaW5nID0gb3B0aW9ucy5kZWZhdWx0RW5jb2RpbmcgfHwgJ3V0ZjgnO1xuXG4gIC8vIG5vdCBhbiBhY3R1YWwgYnVmZmVyIHdlIGtlZXAgdHJhY2sgb2YsIGJ1dCBhIG1lYXN1cmVtZW50XG4gIC8vIG9mIGhvdyBtdWNoIHdlJ3JlIHdhaXRpbmcgdG8gZ2V0IHB1c2hlZCB0byBzb21lIHVuZGVybHlpbmdcbiAgLy8gc29ja2V0IG9yIGZpbGUuXG4gIHRoaXMubGVuZ3RoID0gMDtcblxuICAvLyBhIGZsYWcgdG8gc2VlIHdoZW4gd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBhIHdyaXRlLlxuICB0aGlzLndyaXRpbmcgPSBmYWxzZTtcblxuICAvLyB3aGVuIHRydWUgYWxsIHdyaXRlcyB3aWxsIGJlIGJ1ZmZlcmVkIHVudGlsIC51bmNvcmsoKSBjYWxsXG4gIHRoaXMuY29ya2VkID0gMDtcblxuICAvLyBhIGZsYWcgdG8gYmUgYWJsZSB0byB0ZWxsIGlmIHRoZSBvbndyaXRlIGNiIGlzIGNhbGxlZCBpbW1lZGlhdGVseSxcbiAgLy8gb3Igb24gYSBsYXRlciB0aWNrLiAgV2Ugc2V0IHRoaXMgdG8gdHJ1ZSBhdCBmaXJzdCwgYmVjYXVzZSBhbnlcbiAgLy8gYWN0aW9ucyB0aGF0IHNob3VsZG4ndCBoYXBwZW4gdW50aWwgXCJsYXRlclwiIHNob3VsZCBnZW5lcmFsbHkgYWxzb1xuICAvLyBub3QgaGFwcGVuIGJlZm9yZSB0aGUgZmlyc3Qgd3JpdGUgY2FsbC5cbiAgdGhpcy5zeW5jID0gdHJ1ZTtcblxuICAvLyBhIGZsYWcgdG8ga25vdyBpZiB3ZSdyZSBwcm9jZXNzaW5nIHByZXZpb3VzbHkgYnVmZmVyZWQgaXRlbXMsIHdoaWNoXG4gIC8vIG1heSBjYWxsIHRoZSBfd3JpdGUoKSBjYWxsYmFjayBpbiB0aGUgc2FtZSB0aWNrLCBzbyB0aGF0IHdlIGRvbid0XG4gIC8vIGVuZCB1cCBpbiBhbiBvdmVybGFwcGVkIG9ud3JpdGUgc2l0dWF0aW9uLlxuICB0aGlzLmJ1ZmZlclByb2Nlc3NpbmcgPSBmYWxzZTtcblxuICAvLyB0aGUgY2FsbGJhY2sgdGhhdCdzIHBhc3NlZCB0byBfd3JpdGUoY2h1bmssY2IpXG4gIHRoaXMub253cml0ZSA9IGZ1bmN0aW9uIChlcikge1xuICAgIG9ud3JpdGUoc3RyZWFtLCBlcik7XG4gIH07XG5cbiAgLy8gdGhlIGNhbGxiYWNrIHRoYXQgdGhlIHVzZXIgc3VwcGxpZXMgdG8gd3JpdGUoY2h1bmssZW5jb2RpbmcsY2IpXG4gIHRoaXMud3JpdGVjYiA9IG51bGw7XG5cbiAgLy8gdGhlIGFtb3VudCB0aGF0IGlzIGJlaW5nIHdyaXR0ZW4gd2hlbiBfd3JpdGUgaXMgY2FsbGVkLlxuICB0aGlzLndyaXRlbGVuID0gMDtcblxuICB0aGlzLmJ1ZmZlcmVkUmVxdWVzdCA9IG51bGw7XG4gIHRoaXMubGFzdEJ1ZmZlcmVkUmVxdWVzdCA9IG51bGw7XG5cbiAgLy8gbnVtYmVyIG9mIHBlbmRpbmcgdXNlci1zdXBwbGllZCB3cml0ZSBjYWxsYmFja3NcbiAgLy8gdGhpcyBtdXN0IGJlIDAgYmVmb3JlICdmaW5pc2gnIGNhbiBiZSBlbWl0dGVkXG4gIHRoaXMucGVuZGluZ2NiID0gMDtcblxuICAvLyBlbWl0IHByZWZpbmlzaCBpZiB0aGUgb25seSB0aGluZyB3ZSdyZSB3YWl0aW5nIGZvciBpcyBfd3JpdGUgY2JzXG4gIC8vIFRoaXMgaXMgcmVsZXZhbnQgZm9yIHN5bmNocm9ub3VzIFRyYW5zZm9ybSBzdHJlYW1zXG4gIHRoaXMucHJlZmluaXNoZWQgPSBmYWxzZTtcblxuICAvLyBUcnVlIGlmIHRoZSBlcnJvciB3YXMgYWxyZWFkeSBlbWl0dGVkIGFuZCBzaG91bGQgbm90IGJlIHRocm93biBhZ2FpblxuICB0aGlzLmVycm9yRW1pdHRlZCA9IGZhbHNlO1xuXG4gIC8vIGNvdW50IGJ1ZmZlcmVkIHJlcXVlc3RzXG4gIHRoaXMuYnVmZmVyZWRSZXF1ZXN0Q291bnQgPSAwO1xuXG4gIC8vIGFsbG9jYXRlIHRoZSBmaXJzdCBDb3JrZWRSZXF1ZXN0LCB0aGVyZSBpcyBhbHdheXNcbiAgLy8gb25lIGFsbG9jYXRlZCBhbmQgZnJlZSB0byB1c2UsIGFuZCB3ZSBtYWludGFpbiBhdCBtb3N0IHR3b1xuICB0aGlzLmNvcmtlZFJlcXVlc3RzRnJlZSA9IG5ldyBDb3JrZWRSZXF1ZXN0KHRoaXMpO1xufVxuXG5Xcml0YWJsZVN0YXRlLnByb3RvdHlwZS5nZXRCdWZmZXIgPSBmdW5jdGlvbiBnZXRCdWZmZXIoKSB7XG4gIHZhciBjdXJyZW50ID0gdGhpcy5idWZmZXJlZFJlcXVlc3Q7XG4gIHZhciBvdXQgPSBbXTtcbiAgd2hpbGUgKGN1cnJlbnQpIHtcbiAgICBvdXQucHVzaChjdXJyZW50KTtcbiAgICBjdXJyZW50ID0gY3VycmVudC5uZXh0O1xuICB9XG4gIHJldHVybiBvdXQ7XG59O1xuXG4oZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXcml0YWJsZVN0YXRlLnByb3RvdHlwZSwgJ2J1ZmZlcicsIHtcbiAgICAgIGdldDogaW50ZXJuYWxVdGlsLmRlcHJlY2F0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEJ1ZmZlcigpO1xuICAgICAgfSwgJ193cml0YWJsZVN0YXRlLmJ1ZmZlciBpcyBkZXByZWNhdGVkLiBVc2UgX3dyaXRhYmxlU3RhdGUuZ2V0QnVmZmVyICcgKyAnaW5zdGVhZC4nLCAnREVQMDAwMycpXG4gICAgfSk7XG4gIH0gY2F0Y2ggKF8pIHt9XG59KSgpO1xuXG4vLyBUZXN0IF93cml0YWJsZVN0YXRlIGZvciBpbmhlcml0YW5jZSB0byBhY2NvdW50IGZvciBEdXBsZXggc3RyZWFtcyxcbi8vIHdob3NlIHByb3RvdHlwZSBjaGFpbiBvbmx5IHBvaW50cyB0byBSZWFkYWJsZS5cbnZhciByZWFsSGFzSW5zdGFuY2U7XG5pZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuaGFzSW5zdGFuY2UgJiYgdHlwZW9mIEZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdID09PSAnZnVuY3Rpb24nKSB7XG4gIHJlYWxIYXNJbnN0YW5jZSA9IEZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoV3JpdGFibGUsIFN5bWJvbC5oYXNJbnN0YW5jZSwge1xuICAgIHZhbHVlOiBmdW5jdGlvbiAob2JqZWN0KSB7XG4gICAgICBpZiAocmVhbEhhc0luc3RhbmNlLmNhbGwodGhpcywgb2JqZWN0KSkgcmV0dXJuIHRydWU7XG4gICAgICBpZiAodGhpcyAhPT0gV3JpdGFibGUpIHJldHVybiBmYWxzZTtcblxuICAgICAgcmV0dXJuIG9iamVjdCAmJiBvYmplY3QuX3dyaXRhYmxlU3RhdGUgaW5zdGFuY2VvZiBXcml0YWJsZVN0YXRlO1xuICAgIH1cbiAgfSk7XG59IGVsc2Uge1xuICByZWFsSGFzSW5zdGFuY2UgPSBmdW5jdGlvbiAob2JqZWN0KSB7XG4gICAgcmV0dXJuIG9iamVjdCBpbnN0YW5jZW9mIHRoaXM7XG4gIH07XG59XG5cbmZ1bmN0aW9uIFdyaXRhYmxlKG9wdGlvbnMpIHtcbiAgRHVwbGV4ID0gRHVwbGV4IHx8IHJlcXVpcmUoJy4vX3N0cmVhbV9kdXBsZXgnKTtcblxuICAvLyBXcml0YWJsZSBjdG9yIGlzIGFwcGxpZWQgdG8gRHVwbGV4ZXMsIHRvby5cbiAgLy8gYHJlYWxIYXNJbnN0YW5jZWAgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgdXNpbmcgcGxhaW4gYGluc3RhbmNlb2ZgXG4gIC8vIHdvdWxkIHJldHVybiBmYWxzZSwgYXMgbm8gYF93cml0YWJsZVN0YXRlYCBwcm9wZXJ0eSBpcyBhdHRhY2hlZC5cblxuICAvLyBUcnlpbmcgdG8gdXNlIHRoZSBjdXN0b20gYGluc3RhbmNlb2ZgIGZvciBXcml0YWJsZSBoZXJlIHdpbGwgYWxzbyBicmVhayB0aGVcbiAgLy8gTm9kZS5qcyBMYXp5VHJhbnNmb3JtIGltcGxlbWVudGF0aW9uLCB3aGljaCBoYXMgYSBub24tdHJpdmlhbCBnZXR0ZXIgZm9yXG4gIC8vIGBfd3JpdGFibGVTdGF0ZWAgdGhhdCB3b3VsZCBsZWFkIHRvIGluZmluaXRlIHJlY3Vyc2lvbi5cbiAgaWYgKCFyZWFsSGFzSW5zdGFuY2UuY2FsbChXcml0YWJsZSwgdGhpcykgJiYgISh0aGlzIGluc3RhbmNlb2YgRHVwbGV4KSkge1xuICAgIHJldHVybiBuZXcgV3JpdGFibGUob3B0aW9ucyk7XG4gIH1cblxuICB0aGlzLl93cml0YWJsZVN0YXRlID0gbmV3IFdyaXRhYmxlU3RhdGUob3B0aW9ucywgdGhpcyk7XG5cbiAgLy8gbGVnYWN5LlxuICB0aGlzLndyaXRhYmxlID0gdHJ1ZTtcblxuICBpZiAob3B0aW9ucykge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy53cml0ZSA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fd3JpdGUgPSBvcHRpb25zLndyaXRlO1xuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLndyaXRldiA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fd3JpdGV2ID0gb3B0aW9ucy53cml0ZXY7XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuZGVzdHJveSA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fZGVzdHJveSA9IG9wdGlvbnMuZGVzdHJveTtcblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5maW5hbCA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fZmluYWwgPSBvcHRpb25zLmZpbmFsO1xuICB9XG5cbiAgU3RyZWFtLmNhbGwodGhpcyk7XG59XG5cbi8vIE90aGVyd2lzZSBwZW9wbGUgY2FuIHBpcGUgV3JpdGFibGUgc3RyZWFtcywgd2hpY2ggaXMganVzdCB3cm9uZy5cbldyaXRhYmxlLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmVtaXQoJ2Vycm9yJywgbmV3IEVycm9yKCdDYW5ub3QgcGlwZSwgbm90IHJlYWRhYmxlJykpO1xufTtcblxuZnVuY3Rpb24gd3JpdGVBZnRlckVuZChzdHJlYW0sIGNiKSB7XG4gIHZhciBlciA9IG5ldyBFcnJvcignd3JpdGUgYWZ0ZXIgZW5kJyk7XG4gIC8vIFRPRE86IGRlZmVyIGVycm9yIGV2ZW50cyBjb25zaXN0ZW50bHkgZXZlcnl3aGVyZSwgbm90IGp1c3QgdGhlIGNiXG4gIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVyKTtcbiAgcG5hLm5leHRUaWNrKGNiLCBlcik7XG59XG5cbi8vIENoZWNrcyB0aGF0IGEgdXNlci1zdXBwbGllZCBjaHVuayBpcyB2YWxpZCwgZXNwZWNpYWxseSBmb3IgdGhlIHBhcnRpY3VsYXJcbi8vIG1vZGUgdGhlIHN0cmVhbSBpcyBpbi4gQ3VycmVudGx5IHRoaXMgbWVhbnMgdGhhdCBgbnVsbGAgaXMgbmV2ZXIgYWNjZXB0ZWRcbi8vIGFuZCB1bmRlZmluZWQvbm9uLXN0cmluZyB2YWx1ZXMgYXJlIG9ubHkgYWxsb3dlZCBpbiBvYmplY3QgbW9kZS5cbmZ1bmN0aW9uIHZhbGlkQ2h1bmsoc3RyZWFtLCBzdGF0ZSwgY2h1bmssIGNiKSB7XG4gIHZhciB2YWxpZCA9IHRydWU7XG4gIHZhciBlciA9IGZhbHNlO1xuXG4gIGlmIChjaHVuayA9PT0gbnVsbCkge1xuICAgIGVyID0gbmV3IFR5cGVFcnJvcignTWF5IG5vdCB3cml0ZSBudWxsIHZhbHVlcyB0byBzdHJlYW0nKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgY2h1bmsgIT09ICdzdHJpbmcnICYmIGNodW5rICE9PSB1bmRlZmluZWQgJiYgIXN0YXRlLm9iamVjdE1vZGUpIHtcbiAgICBlciA9IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgbm9uLXN0cmluZy9idWZmZXIgY2h1bmsnKTtcbiAgfVxuICBpZiAoZXIpIHtcbiAgICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcik7XG4gICAgcG5hLm5leHRUaWNrKGNiLCBlcik7XG4gICAgdmFsaWQgPSBmYWxzZTtcbiAgfVxuICByZXR1cm4gdmFsaWQ7XG59XG5cbldyaXRhYmxlLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3dyaXRhYmxlU3RhdGU7XG4gIHZhciByZXQgPSBmYWxzZTtcbiAgdmFyIGlzQnVmID0gIXN0YXRlLm9iamVjdE1vZGUgJiYgX2lzVWludDhBcnJheShjaHVuayk7XG5cbiAgaWYgKGlzQnVmICYmICFCdWZmZXIuaXNCdWZmZXIoY2h1bmspKSB7XG4gICAgY2h1bmsgPSBfdWludDhBcnJheVRvQnVmZmVyKGNodW5rKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYiA9IGVuY29kaW5nO1xuICAgIGVuY29kaW5nID0gbnVsbDtcbiAgfVxuXG4gIGlmIChpc0J1ZikgZW5jb2RpbmcgPSAnYnVmZmVyJztlbHNlIGlmICghZW5jb2RpbmcpIGVuY29kaW5nID0gc3RhdGUuZGVmYXVsdEVuY29kaW5nO1xuXG4gIGlmICh0eXBlb2YgY2IgIT09ICdmdW5jdGlvbicpIGNiID0gbm9wO1xuXG4gIGlmIChzdGF0ZS5lbmRlZCkgd3JpdGVBZnRlckVuZCh0aGlzLCBjYik7ZWxzZSBpZiAoaXNCdWYgfHwgdmFsaWRDaHVuayh0aGlzLCBzdGF0ZSwgY2h1bmssIGNiKSkge1xuICAgIHN0YXRlLnBlbmRpbmdjYisrO1xuICAgIHJldCA9IHdyaXRlT3JCdWZmZXIodGhpcywgc3RhdGUsIGlzQnVmLCBjaHVuaywgZW5jb2RpbmcsIGNiKTtcbiAgfVxuXG4gIHJldHVybiByZXQ7XG59O1xuXG5Xcml0YWJsZS5wcm90b3R5cGUuY29yayA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fd3JpdGFibGVTdGF0ZTtcblxuICBzdGF0ZS5jb3JrZWQrKztcbn07XG5cbldyaXRhYmxlLnByb3RvdHlwZS51bmNvcmsgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3dyaXRhYmxlU3RhdGU7XG5cbiAgaWYgKHN0YXRlLmNvcmtlZCkge1xuICAgIHN0YXRlLmNvcmtlZC0tO1xuXG4gICAgaWYgKCFzdGF0ZS53cml0aW5nICYmICFzdGF0ZS5jb3JrZWQgJiYgIXN0YXRlLmJ1ZmZlclByb2Nlc3NpbmcgJiYgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0KSBjbGVhckJ1ZmZlcih0aGlzLCBzdGF0ZSk7XG4gIH1cbn07XG5cbldyaXRhYmxlLnByb3RvdHlwZS5zZXREZWZhdWx0RW5jb2RpbmcgPSBmdW5jdGlvbiBzZXREZWZhdWx0RW5jb2RpbmcoZW5jb2RpbmcpIHtcbiAgLy8gbm9kZTo6UGFyc2VFbmNvZGluZygpIHJlcXVpcmVzIGxvd2VyIGNhc2UuXG4gIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnKSBlbmNvZGluZyA9IGVuY29kaW5nLnRvTG93ZXJDYXNlKCk7XG4gIGlmICghKFsnaGV4JywgJ3V0ZjgnLCAndXRmLTgnLCAnYXNjaWknLCAnYmluYXJ5JywgJ2Jhc2U2NCcsICd1Y3MyJywgJ3Vjcy0yJywgJ3V0ZjE2bGUnLCAndXRmLTE2bGUnLCAncmF3J10uaW5kZXhPZigoZW5jb2RpbmcgKyAnJykudG9Mb3dlckNhc2UoKSkgPiAtMSkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZyk7XG4gIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVmYXVsdEVuY29kaW5nID0gZW5jb2Rpbmc7XG4gIHJldHVybiB0aGlzO1xufTtcblxuZnVuY3Rpb24gZGVjb2RlQ2h1bmsoc3RhdGUsIGNodW5rLCBlbmNvZGluZykge1xuICBpZiAoIXN0YXRlLm9iamVjdE1vZGUgJiYgc3RhdGUuZGVjb2RlU3RyaW5ncyAhPT0gZmFsc2UgJiYgdHlwZW9mIGNodW5rID09PSAnc3RyaW5nJykge1xuICAgIGNodW5rID0gQnVmZmVyLmZyb20oY2h1bmssIGVuY29kaW5nKTtcbiAgfVxuICByZXR1cm4gY2h1bms7XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShXcml0YWJsZS5wcm90b3R5cGUsICd3cml0YWJsZUhpZ2hXYXRlck1hcmsnLCB7XG4gIC8vIG1ha2luZyBpdCBleHBsaWNpdCB0aGlzIHByb3BlcnR5IGlzIG5vdCBlbnVtZXJhYmxlXG4gIC8vIGJlY2F1c2Ugb3RoZXJ3aXNlIHNvbWUgcHJvdG90eXBlIG1hbmlwdWxhdGlvbiBpblxuICAvLyB1c2VybGFuZCB3aWxsIGZhaWxcbiAgZW51bWVyYWJsZTogZmFsc2UsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcms7XG4gIH1cbn0pO1xuXG4vLyBpZiB3ZSdyZSBhbHJlYWR5IHdyaXRpbmcgc29tZXRoaW5nLCB0aGVuIGp1c3QgcHV0IHRoaXNcbi8vIGluIHRoZSBxdWV1ZSwgYW5kIHdhaXQgb3VyIHR1cm4uICBPdGhlcndpc2UsIGNhbGwgX3dyaXRlXG4vLyBJZiB3ZSByZXR1cm4gZmFsc2UsIHRoZW4gd2UgbmVlZCBhIGRyYWluIGV2ZW50LCBzbyBzZXQgdGhhdCBmbGFnLlxuZnVuY3Rpb24gd3JpdGVPckJ1ZmZlcihzdHJlYW0sIHN0YXRlLCBpc0J1ZiwgY2h1bmssIGVuY29kaW5nLCBjYikge1xuICBpZiAoIWlzQnVmKSB7XG4gICAgdmFyIG5ld0NodW5rID0gZGVjb2RlQ2h1bmsoc3RhdGUsIGNodW5rLCBlbmNvZGluZyk7XG4gICAgaWYgKGNodW5rICE9PSBuZXdDaHVuaykge1xuICAgICAgaXNCdWYgPSB0cnVlO1xuICAgICAgZW5jb2RpbmcgPSAnYnVmZmVyJztcbiAgICAgIGNodW5rID0gbmV3Q2h1bms7XG4gICAgfVxuICB9XG4gIHZhciBsZW4gPSBzdGF0ZS5vYmplY3RNb2RlID8gMSA6IGNodW5rLmxlbmd0aDtcblxuICBzdGF0ZS5sZW5ndGggKz0gbGVuO1xuXG4gIHZhciByZXQgPSBzdGF0ZS5sZW5ndGggPCBzdGF0ZS5oaWdoV2F0ZXJNYXJrO1xuICAvLyB3ZSBtdXN0IGVuc3VyZSB0aGF0IHByZXZpb3VzIG5lZWREcmFpbiB3aWxsIG5vdCBiZSByZXNldCB0byBmYWxzZS5cbiAgaWYgKCFyZXQpIHN0YXRlLm5lZWREcmFpbiA9IHRydWU7XG5cbiAgaWYgKHN0YXRlLndyaXRpbmcgfHwgc3RhdGUuY29ya2VkKSB7XG4gICAgdmFyIGxhc3QgPSBzdGF0ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0O1xuICAgIHN0YXRlLmxhc3RCdWZmZXJlZFJlcXVlc3QgPSB7XG4gICAgICBjaHVuazogY2h1bmssXG4gICAgICBlbmNvZGluZzogZW5jb2RpbmcsXG4gICAgICBpc0J1ZjogaXNCdWYsXG4gICAgICBjYWxsYmFjazogY2IsXG4gICAgICBuZXh0OiBudWxsXG4gICAgfTtcbiAgICBpZiAobGFzdCkge1xuICAgICAgbGFzdC5uZXh0ID0gc3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0ID0gc3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdDtcbiAgICB9XG4gICAgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0Q291bnQgKz0gMTtcbiAgfSBlbHNlIHtcbiAgICBkb1dyaXRlKHN0cmVhbSwgc3RhdGUsIGZhbHNlLCBsZW4sIGNodW5rLCBlbmNvZGluZywgY2IpO1xuICB9XG5cbiAgcmV0dXJuIHJldDtcbn1cblxuZnVuY3Rpb24gZG9Xcml0ZShzdHJlYW0sIHN0YXRlLCB3cml0ZXYsIGxlbiwgY2h1bmssIGVuY29kaW5nLCBjYikge1xuICBzdGF0ZS53cml0ZWxlbiA9IGxlbjtcbiAgc3RhdGUud3JpdGVjYiA9IGNiO1xuICBzdGF0ZS53cml0aW5nID0gdHJ1ZTtcbiAgc3RhdGUuc3luYyA9IHRydWU7XG4gIGlmICh3cml0ZXYpIHN0cmVhbS5fd3JpdGV2KGNodW5rLCBzdGF0ZS5vbndyaXRlKTtlbHNlIHN0cmVhbS5fd3JpdGUoY2h1bmssIGVuY29kaW5nLCBzdGF0ZS5vbndyaXRlKTtcbiAgc3RhdGUuc3luYyA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBvbndyaXRlRXJyb3Ioc3RyZWFtLCBzdGF0ZSwgc3luYywgZXIsIGNiKSB7XG4gIC0tc3RhdGUucGVuZGluZ2NiO1xuXG4gIGlmIChzeW5jKSB7XG4gICAgLy8gZGVmZXIgdGhlIGNhbGxiYWNrIGlmIHdlIGFyZSBiZWluZyBjYWxsZWQgc3luY2hyb25vdXNseVxuICAgIC8vIHRvIGF2b2lkIHBpbGluZyB1cCB0aGluZ3Mgb24gdGhlIHN0YWNrXG4gICAgcG5hLm5leHRUaWNrKGNiLCBlcik7XG4gICAgLy8gdGhpcyBjYW4gZW1pdCBmaW5pc2gsIGFuZCBpdCB3aWxsIGFsd2F5cyBoYXBwZW5cbiAgICAvLyBhZnRlciBlcnJvclxuICAgIHBuYS5uZXh0VGljayhmaW5pc2hNYXliZSwgc3RyZWFtLCBzdGF0ZSk7XG4gICAgc3RyZWFtLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZCA9IHRydWU7XG4gICAgc3RyZWFtLmVtaXQoJ2Vycm9yJywgZXIpO1xuICB9IGVsc2Uge1xuICAgIC8vIHRoZSBjYWxsZXIgZXhwZWN0IHRoaXMgdG8gaGFwcGVuIGJlZm9yZSBpZlxuICAgIC8vIGl0IGlzIGFzeW5jXG4gICAgY2IoZXIpO1xuICAgIHN0cmVhbS5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQgPSB0cnVlO1xuICAgIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVyKTtcbiAgICAvLyB0aGlzIGNhbiBlbWl0IGZpbmlzaCwgYnV0IGZpbmlzaCBtdXN0XG4gICAgLy8gYWx3YXlzIGZvbGxvdyBlcnJvclxuICAgIGZpbmlzaE1heWJlKHN0cmVhbSwgc3RhdGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG9ud3JpdGVTdGF0ZVVwZGF0ZShzdGF0ZSkge1xuICBzdGF0ZS53cml0aW5nID0gZmFsc2U7XG4gIHN0YXRlLndyaXRlY2IgPSBudWxsO1xuICBzdGF0ZS5sZW5ndGggLT0gc3RhdGUud3JpdGVsZW47XG4gIHN0YXRlLndyaXRlbGVuID0gMDtcbn1cblxuZnVuY3Rpb24gb253cml0ZShzdHJlYW0sIGVyKSB7XG4gIHZhciBzdGF0ZSA9IHN0cmVhbS5fd3JpdGFibGVTdGF0ZTtcbiAgdmFyIHN5bmMgPSBzdGF0ZS5zeW5jO1xuICB2YXIgY2IgPSBzdGF0ZS53cml0ZWNiO1xuXG4gIG9ud3JpdGVTdGF0ZVVwZGF0ZShzdGF0ZSk7XG5cbiAgaWYgKGVyKSBvbndyaXRlRXJyb3Ioc3RyZWFtLCBzdGF0ZSwgc3luYywgZXIsIGNiKTtlbHNlIHtcbiAgICAvLyBDaGVjayBpZiB3ZSdyZSBhY3R1YWxseSByZWFkeSB0byBmaW5pc2gsIGJ1dCBkb24ndCBlbWl0IHlldFxuICAgIHZhciBmaW5pc2hlZCA9IG5lZWRGaW5pc2goc3RhdGUpO1xuXG4gICAgaWYgKCFmaW5pc2hlZCAmJiAhc3RhdGUuY29ya2VkICYmICFzdGF0ZS5idWZmZXJQcm9jZXNzaW5nICYmIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdCkge1xuICAgICAgY2xlYXJCdWZmZXIoc3RyZWFtLCBzdGF0ZSk7XG4gICAgfVxuXG4gICAgaWYgKHN5bmMpIHtcbiAgICAgIC8qPHJlcGxhY2VtZW50PiovXG4gICAgICBhc3luY1dyaXRlKGFmdGVyV3JpdGUsIHN0cmVhbSwgc3RhdGUsIGZpbmlzaGVkLCBjYik7XG4gICAgICAvKjwvcmVwbGFjZW1lbnQ+Ki9cbiAgICB9IGVsc2Uge1xuICAgICAgYWZ0ZXJXcml0ZShzdHJlYW0sIHN0YXRlLCBmaW5pc2hlZCwgY2IpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhZnRlcldyaXRlKHN0cmVhbSwgc3RhdGUsIGZpbmlzaGVkLCBjYikge1xuICBpZiAoIWZpbmlzaGVkKSBvbndyaXRlRHJhaW4oc3RyZWFtLCBzdGF0ZSk7XG4gIHN0YXRlLnBlbmRpbmdjYi0tO1xuICBjYigpO1xuICBmaW5pc2hNYXliZShzdHJlYW0sIHN0YXRlKTtcbn1cblxuLy8gTXVzdCBmb3JjZSBjYWxsYmFjayB0byBiZSBjYWxsZWQgb24gbmV4dFRpY2ssIHNvIHRoYXQgd2UgZG9uJ3Rcbi8vIGVtaXQgJ2RyYWluJyBiZWZvcmUgdGhlIHdyaXRlKCkgY29uc3VtZXIgZ2V0cyB0aGUgJ2ZhbHNlJyByZXR1cm5cbi8vIHZhbHVlLCBhbmQgaGFzIGEgY2hhbmNlIHRvIGF0dGFjaCBhICdkcmFpbicgbGlzdGVuZXIuXG5mdW5jdGlvbiBvbndyaXRlRHJhaW4oc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoc3RhdGUubGVuZ3RoID09PSAwICYmIHN0YXRlLm5lZWREcmFpbikge1xuICAgIHN0YXRlLm5lZWREcmFpbiA9IGZhbHNlO1xuICAgIHN0cmVhbS5lbWl0KCdkcmFpbicpO1xuICB9XG59XG5cbi8vIGlmIHRoZXJlJ3Mgc29tZXRoaW5nIGluIHRoZSBidWZmZXIgd2FpdGluZywgdGhlbiBwcm9jZXNzIGl0XG5mdW5jdGlvbiBjbGVhckJ1ZmZlcihzdHJlYW0sIHN0YXRlKSB7XG4gIHN0YXRlLmJ1ZmZlclByb2Nlc3NpbmcgPSB0cnVlO1xuICB2YXIgZW50cnkgPSBzdGF0ZS5idWZmZXJlZFJlcXVlc3Q7XG5cbiAgaWYgKHN0cmVhbS5fd3JpdGV2ICYmIGVudHJ5ICYmIGVudHJ5Lm5leHQpIHtcbiAgICAvLyBGYXN0IGNhc2UsIHdyaXRlIGV2ZXJ5dGhpbmcgdXNpbmcgX3dyaXRldigpXG4gICAgdmFyIGwgPSBzdGF0ZS5idWZmZXJlZFJlcXVlc3RDb3VudDtcbiAgICB2YXIgYnVmZmVyID0gbmV3IEFycmF5KGwpO1xuICAgIHZhciBob2xkZXIgPSBzdGF0ZS5jb3JrZWRSZXF1ZXN0c0ZyZWU7XG4gICAgaG9sZGVyLmVudHJ5ID0gZW50cnk7XG5cbiAgICB2YXIgY291bnQgPSAwO1xuICAgIHZhciBhbGxCdWZmZXJzID0gdHJ1ZTtcbiAgICB3aGlsZSAoZW50cnkpIHtcbiAgICAgIGJ1ZmZlcltjb3VudF0gPSBlbnRyeTtcbiAgICAgIGlmICghZW50cnkuaXNCdWYpIGFsbEJ1ZmZlcnMgPSBmYWxzZTtcbiAgICAgIGVudHJ5ID0gZW50cnkubmV4dDtcbiAgICAgIGNvdW50ICs9IDE7XG4gICAgfVxuICAgIGJ1ZmZlci5hbGxCdWZmZXJzID0gYWxsQnVmZmVycztcblxuICAgIGRvV3JpdGUoc3RyZWFtLCBzdGF0ZSwgdHJ1ZSwgc3RhdGUubGVuZ3RoLCBidWZmZXIsICcnLCBob2xkZXIuZmluaXNoKTtcblxuICAgIC8vIGRvV3JpdGUgaXMgYWxtb3N0IGFsd2F5cyBhc3luYywgZGVmZXIgdGhlc2UgdG8gc2F2ZSBhIGJpdCBvZiB0aW1lXG4gICAgLy8gYXMgdGhlIGhvdCBwYXRoIGVuZHMgd2l0aCBkb1dyaXRlXG4gICAgc3RhdGUucGVuZGluZ2NiKys7XG4gICAgc3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdCA9IG51bGw7XG4gICAgaWYgKGhvbGRlci5uZXh0KSB7XG4gICAgICBzdGF0ZS5jb3JrZWRSZXF1ZXN0c0ZyZWUgPSBob2xkZXIubmV4dDtcbiAgICAgIGhvbGRlci5uZXh0ID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUuY29ya2VkUmVxdWVzdHNGcmVlID0gbmV3IENvcmtlZFJlcXVlc3Qoc3RhdGUpO1xuICAgIH1cbiAgICBzdGF0ZS5idWZmZXJlZFJlcXVlc3RDb3VudCA9IDA7XG4gIH0gZWxzZSB7XG4gICAgLy8gU2xvdyBjYXNlLCB3cml0ZSBjaHVua3Mgb25lLWJ5LW9uZVxuICAgIHdoaWxlIChlbnRyeSkge1xuICAgICAgdmFyIGNodW5rID0gZW50cnkuY2h1bms7XG4gICAgICB2YXIgZW5jb2RpbmcgPSBlbnRyeS5lbmNvZGluZztcbiAgICAgIHZhciBjYiA9IGVudHJ5LmNhbGxiYWNrO1xuICAgICAgdmFyIGxlbiA9IHN0YXRlLm9iamVjdE1vZGUgPyAxIDogY2h1bmsubGVuZ3RoO1xuXG4gICAgICBkb1dyaXRlKHN0cmVhbSwgc3RhdGUsIGZhbHNlLCBsZW4sIGNodW5rLCBlbmNvZGluZywgY2IpO1xuICAgICAgZW50cnkgPSBlbnRyeS5uZXh0O1xuICAgICAgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0Q291bnQtLTtcbiAgICAgIC8vIGlmIHdlIGRpZG4ndCBjYWxsIHRoZSBvbndyaXRlIGltbWVkaWF0ZWx5LCB0aGVuXG4gICAgICAvLyBpdCBtZWFucyB0aGF0IHdlIG5lZWQgdG8gd2FpdCB1bnRpbCBpdCBkb2VzLlxuICAgICAgLy8gYWxzbywgdGhhdCBtZWFucyB0aGF0IHRoZSBjaHVuayBhbmQgY2IgYXJlIGN1cnJlbnRseVxuICAgICAgLy8gYmVpbmcgcHJvY2Vzc2VkLCBzbyBtb3ZlIHRoZSBidWZmZXIgY291bnRlciBwYXN0IHRoZW0uXG4gICAgICBpZiAoc3RhdGUud3JpdGluZykge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZW50cnkgPT09IG51bGwpIHN0YXRlLmxhc3RCdWZmZXJlZFJlcXVlc3QgPSBudWxsO1xuICB9XG5cbiAgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0ID0gZW50cnk7XG4gIHN0YXRlLmJ1ZmZlclByb2Nlc3NpbmcgPSBmYWxzZTtcbn1cblxuV3JpdGFibGUucHJvdG90eXBlLl93cml0ZSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIGNiKG5ldyBFcnJvcignX3dyaXRlKCkgaXMgbm90IGltcGxlbWVudGVkJykpO1xufTtcblxuV3JpdGFibGUucHJvdG90eXBlLl93cml0ZXYgPSBudWxsO1xuXG5Xcml0YWJsZS5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fd3JpdGFibGVTdGF0ZTtcblxuICBpZiAodHlwZW9mIGNodW5rID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2IgPSBjaHVuaztcbiAgICBjaHVuayA9IG51bGw7XG4gICAgZW5jb2RpbmcgPSBudWxsO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNiID0gZW5jb2Rpbmc7XG4gICAgZW5jb2RpbmcgPSBudWxsO1xuICB9XG5cbiAgaWYgKGNodW5rICE9PSBudWxsICYmIGNodW5rICE9PSB1bmRlZmluZWQpIHRoaXMud3JpdGUoY2h1bmssIGVuY29kaW5nKTtcblxuICAvLyAuZW5kKCkgZnVsbHkgdW5jb3Jrc1xuICBpZiAoc3RhdGUuY29ya2VkKSB7XG4gICAgc3RhdGUuY29ya2VkID0gMTtcbiAgICB0aGlzLnVuY29yaygpO1xuICB9XG5cbiAgLy8gaWdub3JlIHVubmVjZXNzYXJ5IGVuZCgpIGNhbGxzLlxuICBpZiAoIXN0YXRlLmVuZGluZykgZW5kV3JpdGFibGUodGhpcywgc3RhdGUsIGNiKTtcbn07XG5cbmZ1bmN0aW9uIG5lZWRGaW5pc2goc3RhdGUpIHtcbiAgcmV0dXJuIHN0YXRlLmVuZGluZyAmJiBzdGF0ZS5sZW5ndGggPT09IDAgJiYgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0ID09PSBudWxsICYmICFzdGF0ZS5maW5pc2hlZCAmJiAhc3RhdGUud3JpdGluZztcbn1cbmZ1bmN0aW9uIGNhbGxGaW5hbChzdHJlYW0sIHN0YXRlKSB7XG4gIHN0cmVhbS5fZmluYWwoZnVuY3Rpb24gKGVycikge1xuICAgIHN0YXRlLnBlbmRpbmdjYi0tO1xuICAgIGlmIChlcnIpIHtcbiAgICAgIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVycik7XG4gICAgfVxuICAgIHN0YXRlLnByZWZpbmlzaGVkID0gdHJ1ZTtcbiAgICBzdHJlYW0uZW1pdCgncHJlZmluaXNoJyk7XG4gICAgZmluaXNoTWF5YmUoc3RyZWFtLCBzdGF0ZSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gcHJlZmluaXNoKHN0cmVhbSwgc3RhdGUpIHtcbiAgaWYgKCFzdGF0ZS5wcmVmaW5pc2hlZCAmJiAhc3RhdGUuZmluYWxDYWxsZWQpIHtcbiAgICBpZiAodHlwZW9mIHN0cmVhbS5fZmluYWwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHN0YXRlLnBlbmRpbmdjYisrO1xuICAgICAgc3RhdGUuZmluYWxDYWxsZWQgPSB0cnVlO1xuICAgICAgcG5hLm5leHRUaWNrKGNhbGxGaW5hbCwgc3RyZWFtLCBzdGF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLnByZWZpbmlzaGVkID0gdHJ1ZTtcbiAgICAgIHN0cmVhbS5lbWl0KCdwcmVmaW5pc2gnKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluaXNoTWF5YmUoc3RyZWFtLCBzdGF0ZSkge1xuICB2YXIgbmVlZCA9IG5lZWRGaW5pc2goc3RhdGUpO1xuICBpZiAobmVlZCkge1xuICAgIHByZWZpbmlzaChzdHJlYW0sIHN0YXRlKTtcbiAgICBpZiAoc3RhdGUucGVuZGluZ2NiID09PSAwKSB7XG4gICAgICBzdGF0ZS5maW5pc2hlZCA9IHRydWU7XG4gICAgICBzdHJlYW0uZW1pdCgnZmluaXNoJyk7XG4gICAgfVxuICB9XG4gIHJldHVybiBuZWVkO1xufVxuXG5mdW5jdGlvbiBlbmRXcml0YWJsZShzdHJlYW0sIHN0YXRlLCBjYikge1xuICBzdGF0ZS5lbmRpbmcgPSB0cnVlO1xuICBmaW5pc2hNYXliZShzdHJlYW0sIHN0YXRlKTtcbiAgaWYgKGNiKSB7XG4gICAgaWYgKHN0YXRlLmZpbmlzaGVkKSBwbmEubmV4dFRpY2soY2IpO2Vsc2Ugc3RyZWFtLm9uY2UoJ2ZpbmlzaCcsIGNiKTtcbiAgfVxuICBzdGF0ZS5lbmRlZCA9IHRydWU7XG4gIHN0cmVhbS53cml0YWJsZSA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBvbkNvcmtlZEZpbmlzaChjb3JrUmVxLCBzdGF0ZSwgZXJyKSB7XG4gIHZhciBlbnRyeSA9IGNvcmtSZXEuZW50cnk7XG4gIGNvcmtSZXEuZW50cnkgPSBudWxsO1xuICB3aGlsZSAoZW50cnkpIHtcbiAgICB2YXIgY2IgPSBlbnRyeS5jYWxsYmFjaztcbiAgICBzdGF0ZS5wZW5kaW5nY2ItLTtcbiAgICBjYihlcnIpO1xuICAgIGVudHJ5ID0gZW50cnkubmV4dDtcbiAgfVxuXG4gIC8vIHJldXNlIHRoZSBmcmVlIGNvcmtSZXEuXG4gIHN0YXRlLmNvcmtlZFJlcXVlc3RzRnJlZS5uZXh0ID0gY29ya1JlcTtcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFdyaXRhYmxlLnByb3RvdHlwZSwgJ2Rlc3Ryb3llZCcsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMuX3dyaXRhYmxlU3RhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgLy8gd2UgaWdub3JlIHRoZSB2YWx1ZSBpZiB0aGUgc3RyZWFtXG4gICAgLy8gaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkIHlldFxuICAgIGlmICghdGhpcy5fd3JpdGFibGVTdGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHRoZSB1c2VyIGlzIGV4cGxpY2l0bHlcbiAgICAvLyBtYW5hZ2luZyBkZXN0cm95ZWRcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZCA9IHZhbHVlO1xuICB9XG59KTtcblxuV3JpdGFibGUucHJvdG90eXBlLmRlc3Ryb3kgPSBkZXN0cm95SW1wbC5kZXN0cm95O1xuV3JpdGFibGUucHJvdG90eXBlLl91bmRlc3Ryb3kgPSBkZXN0cm95SW1wbC51bmRlc3Ryb3k7XG5Xcml0YWJsZS5wcm90b3R5cGUuX2Rlc3Ryb3kgPSBmdW5jdGlvbiAoZXJyLCBjYikge1xuICB0aGlzLmVuZCgpO1xuICBjYihlcnIpO1xufTsiLAogICAgIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyBhIGR1cGxleCBzdHJlYW0gaXMganVzdCBhIHN0cmVhbSB0aGF0IGlzIGJvdGggcmVhZGFibGUgYW5kIHdyaXRhYmxlLlxuLy8gU2luY2UgSlMgZG9lc24ndCBoYXZlIG11bHRpcGxlIHByb3RvdHlwYWwgaW5oZXJpdGFuY2UsIHRoaXMgY2xhc3Ncbi8vIHByb3RvdHlwYWxseSBpbmhlcml0cyBmcm9tIFJlYWRhYmxlLCBhbmQgdGhlbiBwYXJhc2l0aWNhbGx5IGZyb21cbi8vIFdyaXRhYmxlLlxuXG4ndXNlIHN0cmljdCc7XG5cbi8qPHJlcGxhY2VtZW50PiovXG5cbnZhciBwbmEgPSByZXF1aXJlKCdwcm9jZXNzLW5leHRpY2stYXJncycpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgdmFyIGtleXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgIGtleXMucHVzaChrZXkpO1xuICB9cmV0dXJuIGtleXM7XG59O1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbm1vZHVsZS5leHBvcnRzID0gRHVwbGV4O1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIHV0aWwgPSBPYmplY3QuY3JlYXRlKHJlcXVpcmUoJ2NvcmUtdXRpbC1pcycpKTtcbnV0aWwuaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbnZhciBSZWFkYWJsZSA9IHJlcXVpcmUoJy4vX3N0cmVhbV9yZWFkYWJsZScpO1xudmFyIFdyaXRhYmxlID0gcmVxdWlyZSgnLi9fc3RyZWFtX3dyaXRhYmxlJyk7XG5cbnV0aWwuaW5oZXJpdHMoRHVwbGV4LCBSZWFkYWJsZSk7XG5cbntcbiAgLy8gYXZvaWQgc2NvcGUgY3JlZXAsIHRoZSBrZXlzIGFycmF5IGNhbiB0aGVuIGJlIGNvbGxlY3RlZFxuICB2YXIga2V5cyA9IG9iamVjdEtleXMoV3JpdGFibGUucHJvdG90eXBlKTtcbiAgZm9yICh2YXIgdiA9IDA7IHYgPCBrZXlzLmxlbmd0aDsgdisrKSB7XG4gICAgdmFyIG1ldGhvZCA9IGtleXNbdl07XG4gICAgaWYgKCFEdXBsZXgucHJvdG90eXBlW21ldGhvZF0pIER1cGxleC5wcm90b3R5cGVbbWV0aG9kXSA9IFdyaXRhYmxlLnByb3RvdHlwZVttZXRob2RdO1xuICB9XG59XG5cbmZ1bmN0aW9uIER1cGxleChvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBEdXBsZXgpKSByZXR1cm4gbmV3IER1cGxleChvcHRpb25zKTtcblxuICBSZWFkYWJsZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuICBXcml0YWJsZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMucmVhZGFibGUgPT09IGZhbHNlKSB0aGlzLnJlYWRhYmxlID0gZmFsc2U7XG5cbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy53cml0YWJsZSA9PT0gZmFsc2UpIHRoaXMud3JpdGFibGUgPSBmYWxzZTtcblxuICB0aGlzLmFsbG93SGFsZk9wZW4gPSB0cnVlO1xuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmFsbG93SGFsZk9wZW4gPT09IGZhbHNlKSB0aGlzLmFsbG93SGFsZk9wZW4gPSBmYWxzZTtcblxuICB0aGlzLm9uY2UoJ2VuZCcsIG9uZW5kKTtcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KER1cGxleC5wcm90b3R5cGUsICd3cml0YWJsZUhpZ2hXYXRlck1hcmsnLCB7XG4gIC8vIG1ha2luZyBpdCBleHBsaWNpdCB0aGlzIHByb3BlcnR5IGlzIG5vdCBlbnVtZXJhYmxlXG4gIC8vIGJlY2F1c2Ugb3RoZXJ3aXNlIHNvbWUgcHJvdG90eXBlIG1hbmlwdWxhdGlvbiBpblxuICAvLyB1c2VybGFuZCB3aWxsIGZhaWxcbiAgZW51bWVyYWJsZTogZmFsc2UsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcms7XG4gIH1cbn0pO1xuXG4vLyB0aGUgbm8taGFsZi1vcGVuIGVuZm9yY2VyXG5mdW5jdGlvbiBvbmVuZCgpIHtcbiAgLy8gaWYgd2UgYWxsb3cgaGFsZi1vcGVuIHN0YXRlLCBvciBpZiB0aGUgd3JpdGFibGUgc2lkZSBlbmRlZCxcbiAgLy8gdGhlbiB3ZSdyZSBvay5cbiAgaWYgKHRoaXMuYWxsb3dIYWxmT3BlbiB8fCB0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkKSByZXR1cm47XG5cbiAgLy8gbm8gbW9yZSBkYXRhIGNhbiBiZSB3cml0dGVuLlxuICAvLyBCdXQgYWxsb3cgbW9yZSB3cml0ZXMgdG8gaGFwcGVuIGluIHRoaXMgdGljay5cbiAgcG5hLm5leHRUaWNrKG9uRW5kTlQsIHRoaXMpO1xufVxuXG5mdW5jdGlvbiBvbkVuZE5UKHNlbGYpIHtcbiAgc2VsZi5lbmQoKTtcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KER1cGxleC5wcm90b3R5cGUsICdkZXN0cm95ZWQnLCB7XG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlID09PSB1bmRlZmluZWQgfHwgdGhpcy5fd3JpdGFibGVTdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCAmJiB0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZDtcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAvLyB3ZSBpZ25vcmUgdGhlIHZhbHVlIGlmIHRoZSBzdHJlYW1cbiAgICAvLyBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgeWV0XG4gICAgaWYgKHRoaXMuX3JlYWRhYmxlU3RhdGUgPT09IHVuZGVmaW5lZCB8fCB0aGlzLl93cml0YWJsZVN0YXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB0aGUgdXNlciBpcyBleHBsaWNpdGx5XG4gICAgLy8gbWFuYWdpbmcgZGVzdHJveWVkXG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQgPSB2YWx1ZTtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZCA9IHZhbHVlO1xuICB9XG59KTtcblxuRHVwbGV4LnByb3RvdHlwZS5fZGVzdHJveSA9IGZ1bmN0aW9uIChlcnIsIGNiKSB7XG4gIHRoaXMucHVzaChudWxsKTtcbiAgdGhpcy5lbmQoKTtcblxuICBwbmEubmV4dFRpY2soY2IsIGVycik7XG59OyIsCiAgICAiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cblxudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ3NhZmUtYnVmZmVyJykuQnVmZmVyO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbnZhciBpc0VuY29kaW5nID0gQnVmZmVyLmlzRW5jb2RpbmcgfHwgZnVuY3Rpb24gKGVuY29kaW5nKSB7XG4gIGVuY29kaW5nID0gJycgKyBlbmNvZGluZztcbiAgc3dpdGNoIChlbmNvZGluZyAmJiBlbmNvZGluZy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgY2FzZSAnaGV4JzpjYXNlICd1dGY4JzpjYXNlICd1dGYtOCc6Y2FzZSAnYXNjaWknOmNhc2UgJ2JpbmFyeSc6Y2FzZSAnYmFzZTY0JzpjYXNlICd1Y3MyJzpjYXNlICd1Y3MtMic6Y2FzZSAndXRmMTZsZSc6Y2FzZSAndXRmLTE2bGUnOmNhc2UgJ3Jhdyc6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG5mdW5jdGlvbiBfbm9ybWFsaXplRW5jb2RpbmcoZW5jKSB7XG4gIGlmICghZW5jKSByZXR1cm4gJ3V0ZjgnO1xuICB2YXIgcmV0cmllZDtcbiAgd2hpbGUgKHRydWUpIHtcbiAgICBzd2l0Y2ggKGVuYykge1xuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiAndXRmOCc7XG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gJ3V0ZjE2bGUnO1xuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiAnbGF0aW4xJztcbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gZW5jO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKHJldHJpZWQpIHJldHVybjsgLy8gdW5kZWZpbmVkXG4gICAgICAgIGVuYyA9ICgnJyArIGVuYykudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgcmV0cmllZCA9IHRydWU7XG4gICAgfVxuICB9XG59O1xuXG4vLyBEbyBub3QgY2FjaGUgYEJ1ZmZlci5pc0VuY29kaW5nYCB3aGVuIGNoZWNraW5nIGVuY29kaW5nIG5hbWVzIGFzIHNvbWVcbi8vIG1vZHVsZXMgbW9ua2V5LXBhdGNoIGl0IHRvIHN1cHBvcnQgYWRkaXRpb25hbCBlbmNvZGluZ3NcbmZ1bmN0aW9uIG5vcm1hbGl6ZUVuY29kaW5nKGVuYykge1xuICB2YXIgbmVuYyA9IF9ub3JtYWxpemVFbmNvZGluZyhlbmMpO1xuICBpZiAodHlwZW9mIG5lbmMgIT09ICdzdHJpbmcnICYmIChCdWZmZXIuaXNFbmNvZGluZyA9PT0gaXNFbmNvZGluZyB8fCAhaXNFbmNvZGluZyhlbmMpKSkgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jKTtcbiAgcmV0dXJuIG5lbmMgfHwgZW5jO1xufVxuXG4vLyBTdHJpbmdEZWNvZGVyIHByb3ZpZGVzIGFuIGludGVyZmFjZSBmb3IgZWZmaWNpZW50bHkgc3BsaXR0aW5nIGEgc2VyaWVzIG9mXG4vLyBidWZmZXJzIGludG8gYSBzZXJpZXMgb2YgSlMgc3RyaW5ncyB3aXRob3V0IGJyZWFraW5nIGFwYXJ0IG11bHRpLWJ5dGVcbi8vIGNoYXJhY3RlcnMuXG5leHBvcnRzLlN0cmluZ0RlY29kZXIgPSBTdHJpbmdEZWNvZGVyO1xuZnVuY3Rpb24gU3RyaW5nRGVjb2RlcihlbmNvZGluZykge1xuICB0aGlzLmVuY29kaW5nID0gbm9ybWFsaXplRW5jb2RpbmcoZW5jb2RpbmcpO1xuICB2YXIgbmI7XG4gIHN3aXRjaCAodGhpcy5lbmNvZGluZykge1xuICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgdGhpcy50ZXh0ID0gdXRmMTZUZXh0O1xuICAgICAgdGhpcy5lbmQgPSB1dGYxNkVuZDtcbiAgICAgIG5iID0gNDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgdGhpcy5maWxsTGFzdCA9IHV0ZjhGaWxsTGFzdDtcbiAgICAgIG5iID0gNDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICB0aGlzLnRleHQgPSBiYXNlNjRUZXh0O1xuICAgICAgdGhpcy5lbmQgPSBiYXNlNjRFbmQ7XG4gICAgICBuYiA9IDM7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhpcy53cml0ZSA9IHNpbXBsZVdyaXRlO1xuICAgICAgdGhpcy5lbmQgPSBzaW1wbGVFbmQ7XG4gICAgICByZXR1cm47XG4gIH1cbiAgdGhpcy5sYXN0TmVlZCA9IDA7XG4gIHRoaXMubGFzdFRvdGFsID0gMDtcbiAgdGhpcy5sYXN0Q2hhciA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShuYik7XG59XG5cblN0cmluZ0RlY29kZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKGJ1Zikge1xuICBpZiAoYnVmLmxlbmd0aCA9PT0gMCkgcmV0dXJuICcnO1xuICB2YXIgcjtcbiAgdmFyIGk7XG4gIGlmICh0aGlzLmxhc3ROZWVkKSB7XG4gICAgciA9IHRoaXMuZmlsbExhc3QoYnVmKTtcbiAgICBpZiAociA9PT0gdW5kZWZpbmVkKSByZXR1cm4gJyc7XG4gICAgaSA9IHRoaXMubGFzdE5lZWQ7XG4gICAgdGhpcy5sYXN0TmVlZCA9IDA7XG4gIH0gZWxzZSB7XG4gICAgaSA9IDA7XG4gIH1cbiAgaWYgKGkgPCBidWYubGVuZ3RoKSByZXR1cm4gciA/IHIgKyB0aGlzLnRleHQoYnVmLCBpKSA6IHRoaXMudGV4dChidWYsIGkpO1xuICByZXR1cm4gciB8fCAnJztcbn07XG5cblN0cmluZ0RlY29kZXIucHJvdG90eXBlLmVuZCA9IHV0ZjhFbmQ7XG5cbi8vIFJldHVybnMgb25seSBjb21wbGV0ZSBjaGFyYWN0ZXJzIGluIGEgQnVmZmVyXG5TdHJpbmdEZWNvZGVyLnByb3RvdHlwZS50ZXh0ID0gdXRmOFRleHQ7XG5cbi8vIEF0dGVtcHRzIHRvIGNvbXBsZXRlIGEgcGFydGlhbCBub24tVVRGLTggY2hhcmFjdGVyIHVzaW5nIGJ5dGVzIGZyb20gYSBCdWZmZXJcblN0cmluZ0RlY29kZXIucHJvdG90eXBlLmZpbGxMYXN0ID0gZnVuY3Rpb24gKGJ1Zikge1xuICBpZiAodGhpcy5sYXN0TmVlZCA8PSBidWYubGVuZ3RoKSB7XG4gICAgYnVmLmNvcHkodGhpcy5sYXN0Q2hhciwgdGhpcy5sYXN0VG90YWwgLSB0aGlzLmxhc3ROZWVkLCAwLCB0aGlzLmxhc3ROZWVkKTtcbiAgICByZXR1cm4gdGhpcy5sYXN0Q2hhci50b1N0cmluZyh0aGlzLmVuY29kaW5nLCAwLCB0aGlzLmxhc3RUb3RhbCk7XG4gIH1cbiAgYnVmLmNvcHkodGhpcy5sYXN0Q2hhciwgdGhpcy5sYXN0VG90YWwgLSB0aGlzLmxhc3ROZWVkLCAwLCBidWYubGVuZ3RoKTtcbiAgdGhpcy5sYXN0TmVlZCAtPSBidWYubGVuZ3RoO1xufTtcblxuLy8gQ2hlY2tzIHRoZSB0eXBlIG9mIGEgVVRGLTggYnl0ZSwgd2hldGhlciBpdCdzIEFTQ0lJLCBhIGxlYWRpbmcgYnl0ZSwgb3IgYVxuLy8gY29udGludWF0aW9uIGJ5dGUuIElmIGFuIGludmFsaWQgYnl0ZSBpcyBkZXRlY3RlZCwgLTIgaXMgcmV0dXJuZWQuXG5mdW5jdGlvbiB1dGY4Q2hlY2tCeXRlKGJ5dGUpIHtcbiAgaWYgKGJ5dGUgPD0gMHg3RikgcmV0dXJuIDA7ZWxzZSBpZiAoYnl0ZSA+PiA1ID09PSAweDA2KSByZXR1cm4gMjtlbHNlIGlmIChieXRlID4+IDQgPT09IDB4MEUpIHJldHVybiAzO2Vsc2UgaWYgKGJ5dGUgPj4gMyA9PT0gMHgxRSkgcmV0dXJuIDQ7XG4gIHJldHVybiBieXRlID4+IDYgPT09IDB4MDIgPyAtMSA6IC0yO1xufVxuXG4vLyBDaGVja3MgYXQgbW9zdCAzIGJ5dGVzIGF0IHRoZSBlbmQgb2YgYSBCdWZmZXIgaW4gb3JkZXIgdG8gZGV0ZWN0IGFuXG4vLyBpbmNvbXBsZXRlIG11bHRpLWJ5dGUgVVRGLTggY2hhcmFjdGVyLiBUaGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzICgyLCAzLCBvciA0KVxuLy8gbmVlZGVkIHRvIGNvbXBsZXRlIHRoZSBVVEYtOCBjaGFyYWN0ZXIgKGlmIGFwcGxpY2FibGUpIGFyZSByZXR1cm5lZC5cbmZ1bmN0aW9uIHV0ZjhDaGVja0luY29tcGxldGUoc2VsZiwgYnVmLCBpKSB7XG4gIHZhciBqID0gYnVmLmxlbmd0aCAtIDE7XG4gIGlmIChqIDwgaSkgcmV0dXJuIDA7XG4gIHZhciBuYiA9IHV0ZjhDaGVja0J5dGUoYnVmW2pdKTtcbiAgaWYgKG5iID49IDApIHtcbiAgICBpZiAobmIgPiAwKSBzZWxmLmxhc3ROZWVkID0gbmIgLSAxO1xuICAgIHJldHVybiBuYjtcbiAgfVxuICBpZiAoLS1qIDwgaSB8fCBuYiA9PT0gLTIpIHJldHVybiAwO1xuICBuYiA9IHV0ZjhDaGVja0J5dGUoYnVmW2pdKTtcbiAgaWYgKG5iID49IDApIHtcbiAgICBpZiAobmIgPiAwKSBzZWxmLmxhc3ROZWVkID0gbmIgLSAyO1xuICAgIHJldHVybiBuYjtcbiAgfVxuICBpZiAoLS1qIDwgaSB8fCBuYiA9PT0gLTIpIHJldHVybiAwO1xuICBuYiA9IHV0ZjhDaGVja0J5dGUoYnVmW2pdKTtcbiAgaWYgKG5iID49IDApIHtcbiAgICBpZiAobmIgPiAwKSB7XG4gICAgICBpZiAobmIgPT09IDIpIG5iID0gMDtlbHNlIHNlbGYubGFzdE5lZWQgPSBuYiAtIDM7XG4gICAgfVxuICAgIHJldHVybiBuYjtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy8gVmFsaWRhdGVzIGFzIG1hbnkgY29udGludWF0aW9uIGJ5dGVzIGZvciBhIG11bHRpLWJ5dGUgVVRGLTggY2hhcmFjdGVyIGFzXG4vLyBuZWVkZWQgb3IgYXJlIGF2YWlsYWJsZS4gSWYgd2Ugc2VlIGEgbm9uLWNvbnRpbnVhdGlvbiBieXRlIHdoZXJlIHdlIGV4cGVjdFxuLy8gb25lLCB3ZSBcInJlcGxhY2VcIiB0aGUgdmFsaWRhdGVkIGNvbnRpbnVhdGlvbiBieXRlcyB3ZSd2ZSBzZWVuIHNvIGZhciB3aXRoXG4vLyBhIHNpbmdsZSBVVEYtOCByZXBsYWNlbWVudCBjaGFyYWN0ZXIgKCdcXHVmZmZkJyksIHRvIG1hdGNoIHY4J3MgVVRGLTggZGVjb2Rpbmdcbi8vIGJlaGF2aW9yLiBUaGUgY29udGludWF0aW9uIGJ5dGUgY2hlY2sgaXMgaW5jbHVkZWQgdGhyZWUgdGltZXMgaW4gdGhlIGNhc2Vcbi8vIHdoZXJlIGFsbCBvZiB0aGUgY29udGludWF0aW9uIGJ5dGVzIGZvciBhIGNoYXJhY3RlciBleGlzdCBpbiB0aGUgc2FtZSBidWZmZXIuXG4vLyBJdCBpcyBhbHNvIGRvbmUgdGhpcyB3YXkgYXMgYSBzbGlnaHQgcGVyZm9ybWFuY2UgaW5jcmVhc2UgaW5zdGVhZCBvZiB1c2luZyBhXG4vLyBsb29wLlxuZnVuY3Rpb24gdXRmOENoZWNrRXh0cmFCeXRlcyhzZWxmLCBidWYsIHApIHtcbiAgaWYgKChidWZbMF0gJiAweEMwKSAhPT0gMHg4MCkge1xuICAgIHNlbGYubGFzdE5lZWQgPSAwO1xuICAgIHJldHVybiAnXFx1ZmZmZCc7XG4gIH1cbiAgaWYgKHNlbGYubGFzdE5lZWQgPiAxICYmIGJ1Zi5sZW5ndGggPiAxKSB7XG4gICAgaWYgKChidWZbMV0gJiAweEMwKSAhPT0gMHg4MCkge1xuICAgICAgc2VsZi5sYXN0TmVlZCA9IDE7XG4gICAgICByZXR1cm4gJ1xcdWZmZmQnO1xuICAgIH1cbiAgICBpZiAoc2VsZi5sYXN0TmVlZCA+IDIgJiYgYnVmLmxlbmd0aCA+IDIpIHtcbiAgICAgIGlmICgoYnVmWzJdICYgMHhDMCkgIT09IDB4ODApIHtcbiAgICAgICAgc2VsZi5sYXN0TmVlZCA9IDI7XG4gICAgICAgIHJldHVybiAnXFx1ZmZmZCc7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIEF0dGVtcHRzIHRvIGNvbXBsZXRlIGEgbXVsdGktYnl0ZSBVVEYtOCBjaGFyYWN0ZXIgdXNpbmcgYnl0ZXMgZnJvbSBhIEJ1ZmZlci5cbmZ1bmN0aW9uIHV0ZjhGaWxsTGFzdChidWYpIHtcbiAgdmFyIHAgPSB0aGlzLmxhc3RUb3RhbCAtIHRoaXMubGFzdE5lZWQ7XG4gIHZhciByID0gdXRmOENoZWNrRXh0cmFCeXRlcyh0aGlzLCBidWYsIHApO1xuICBpZiAociAhPT0gdW5kZWZpbmVkKSByZXR1cm4gcjtcbiAgaWYgKHRoaXMubGFzdE5lZWQgPD0gYnVmLmxlbmd0aCkge1xuICAgIGJ1Zi5jb3B5KHRoaXMubGFzdENoYXIsIHAsIDAsIHRoaXMubGFzdE5lZWQpO1xuICAgIHJldHVybiB0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsIDAsIHRoaXMubGFzdFRvdGFsKTtcbiAgfVxuICBidWYuY29weSh0aGlzLmxhc3RDaGFyLCBwLCAwLCBidWYubGVuZ3RoKTtcbiAgdGhpcy5sYXN0TmVlZCAtPSBidWYubGVuZ3RoO1xufVxuXG4vLyBSZXR1cm5zIGFsbCBjb21wbGV0ZSBVVEYtOCBjaGFyYWN0ZXJzIGluIGEgQnVmZmVyLiBJZiB0aGUgQnVmZmVyIGVuZGVkIG9uIGFcbi8vIHBhcnRpYWwgY2hhcmFjdGVyLCB0aGUgY2hhcmFjdGVyJ3MgYnl0ZXMgYXJlIGJ1ZmZlcmVkIHVudGlsIHRoZSByZXF1aXJlZFxuLy8gbnVtYmVyIG9mIGJ5dGVzIGFyZSBhdmFpbGFibGUuXG5mdW5jdGlvbiB1dGY4VGV4dChidWYsIGkpIHtcbiAgdmFyIHRvdGFsID0gdXRmOENoZWNrSW5jb21wbGV0ZSh0aGlzLCBidWYsIGkpO1xuICBpZiAoIXRoaXMubGFzdE5lZWQpIHJldHVybiBidWYudG9TdHJpbmcoJ3V0ZjgnLCBpKTtcbiAgdGhpcy5sYXN0VG90YWwgPSB0b3RhbDtcbiAgdmFyIGVuZCA9IGJ1Zi5sZW5ndGggLSAodG90YWwgLSB0aGlzLmxhc3ROZWVkKTtcbiAgYnVmLmNvcHkodGhpcy5sYXN0Q2hhciwgMCwgZW5kKTtcbiAgcmV0dXJuIGJ1Zi50b1N0cmluZygndXRmOCcsIGksIGVuZCk7XG59XG5cbi8vIEZvciBVVEYtOCwgYSByZXBsYWNlbWVudCBjaGFyYWN0ZXIgaXMgYWRkZWQgd2hlbiBlbmRpbmcgb24gYSBwYXJ0aWFsXG4vLyBjaGFyYWN0ZXIuXG5mdW5jdGlvbiB1dGY4RW5kKGJ1Zikge1xuICB2YXIgciA9IGJ1ZiAmJiBidWYubGVuZ3RoID8gdGhpcy53cml0ZShidWYpIDogJyc7XG4gIGlmICh0aGlzLmxhc3ROZWVkKSByZXR1cm4gciArICdcXHVmZmZkJztcbiAgcmV0dXJuIHI7XG59XG5cbi8vIFVURi0xNkxFIHR5cGljYWxseSBuZWVkcyB0d28gYnl0ZXMgcGVyIGNoYXJhY3RlciwgYnV0IGV2ZW4gaWYgd2UgaGF2ZSBhbiBldmVuXG4vLyBudW1iZXIgb2YgYnl0ZXMgYXZhaWxhYmxlLCB3ZSBuZWVkIHRvIGNoZWNrIGlmIHdlIGVuZCBvbiBhIGxlYWRpbmcvaGlnaFxuLy8gc3Vycm9nYXRlLiBJbiB0aGF0IGNhc2UsIHdlIG5lZWQgdG8gd2FpdCBmb3IgdGhlIG5leHQgdHdvIGJ5dGVzIGluIG9yZGVyIHRvXG4vLyBkZWNvZGUgdGhlIGxhc3QgY2hhcmFjdGVyIHByb3Blcmx5LlxuZnVuY3Rpb24gdXRmMTZUZXh0KGJ1ZiwgaSkge1xuICBpZiAoKGJ1Zi5sZW5ndGggLSBpKSAlIDIgPT09IDApIHtcbiAgICB2YXIgciA9IGJ1Zi50b1N0cmluZygndXRmMTZsZScsIGkpO1xuICAgIGlmIChyKSB7XG4gICAgICB2YXIgYyA9IHIuY2hhckNvZGVBdChyLmxlbmd0aCAtIDEpO1xuICAgICAgaWYgKGMgPj0gMHhEODAwICYmIGMgPD0gMHhEQkZGKSB7XG4gICAgICAgIHRoaXMubGFzdE5lZWQgPSAyO1xuICAgICAgICB0aGlzLmxhc3RUb3RhbCA9IDQ7XG4gICAgICAgIHRoaXMubGFzdENoYXJbMF0gPSBidWZbYnVmLmxlbmd0aCAtIDJdO1xuICAgICAgICB0aGlzLmxhc3RDaGFyWzFdID0gYnVmW2J1Zi5sZW5ndGggLSAxXTtcbiAgICAgICAgcmV0dXJuIHIuc2xpY2UoMCwgLTEpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcjtcbiAgfVxuICB0aGlzLmxhc3ROZWVkID0gMTtcbiAgdGhpcy5sYXN0VG90YWwgPSAyO1xuICB0aGlzLmxhc3RDaGFyWzBdID0gYnVmW2J1Zi5sZW5ndGggLSAxXTtcbiAgcmV0dXJuIGJ1Zi50b1N0cmluZygndXRmMTZsZScsIGksIGJ1Zi5sZW5ndGggLSAxKTtcbn1cblxuLy8gRm9yIFVURi0xNkxFIHdlIGRvIG5vdCBleHBsaWNpdGx5IGFwcGVuZCBzcGVjaWFsIHJlcGxhY2VtZW50IGNoYXJhY3RlcnMgaWYgd2Vcbi8vIGVuZCBvbiBhIHBhcnRpYWwgY2hhcmFjdGVyLCB3ZSBzaW1wbHkgbGV0IHY4IGhhbmRsZSB0aGF0LlxuZnVuY3Rpb24gdXRmMTZFbmQoYnVmKSB7XG4gIHZhciByID0gYnVmICYmIGJ1Zi5sZW5ndGggPyB0aGlzLndyaXRlKGJ1ZikgOiAnJztcbiAgaWYgKHRoaXMubGFzdE5lZWQpIHtcbiAgICB2YXIgZW5kID0gdGhpcy5sYXN0VG90YWwgLSB0aGlzLmxhc3ROZWVkO1xuICAgIHJldHVybiByICsgdGhpcy5sYXN0Q2hhci50b1N0cmluZygndXRmMTZsZScsIDAsIGVuZCk7XG4gIH1cbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIGJhc2U2NFRleHQoYnVmLCBpKSB7XG4gIHZhciBuID0gKGJ1Zi5sZW5ndGggLSBpKSAlIDM7XG4gIGlmIChuID09PSAwKSByZXR1cm4gYnVmLnRvU3RyaW5nKCdiYXNlNjQnLCBpKTtcbiAgdGhpcy5sYXN0TmVlZCA9IDMgLSBuO1xuICB0aGlzLmxhc3RUb3RhbCA9IDM7XG4gIGlmIChuID09PSAxKSB7XG4gICAgdGhpcy5sYXN0Q2hhclswXSA9IGJ1ZltidWYubGVuZ3RoIC0gMV07XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5sYXN0Q2hhclswXSA9IGJ1ZltidWYubGVuZ3RoIC0gMl07XG4gICAgdGhpcy5sYXN0Q2hhclsxXSA9IGJ1ZltidWYubGVuZ3RoIC0gMV07XG4gIH1cbiAgcmV0dXJuIGJ1Zi50b1N0cmluZygnYmFzZTY0JywgaSwgYnVmLmxlbmd0aCAtIG4pO1xufVxuXG5mdW5jdGlvbiBiYXNlNjRFbmQoYnVmKSB7XG4gIHZhciByID0gYnVmICYmIGJ1Zi5sZW5ndGggPyB0aGlzLndyaXRlKGJ1ZikgOiAnJztcbiAgaWYgKHRoaXMubGFzdE5lZWQpIHJldHVybiByICsgdGhpcy5sYXN0Q2hhci50b1N0cmluZygnYmFzZTY0JywgMCwgMyAtIHRoaXMubGFzdE5lZWQpO1xuICByZXR1cm4gcjtcbn1cblxuLy8gUGFzcyBieXRlcyBvbiB0aHJvdWdoIGZvciBzaW5nbGUtYnl0ZSBlbmNvZGluZ3MgKGUuZy4gYXNjaWksIGxhdGluMSwgaGV4KVxuZnVuY3Rpb24gc2ltcGxlV3JpdGUoYnVmKSB7XG4gIHJldHVybiBidWYudG9TdHJpbmcodGhpcy5lbmNvZGluZyk7XG59XG5cbmZ1bmN0aW9uIHNpbXBsZUVuZChidWYpIHtcbiAgcmV0dXJuIGJ1ZiAmJiBidWYubGVuZ3RoID8gdGhpcy53cml0ZShidWYpIDogJyc7XG59IiwKICAgICIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xuXG52YXIgcG5hID0gcmVxdWlyZSgncHJvY2Vzcy1uZXh0aWNrLWFyZ3MnKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWRhYmxlO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCdpc2FycmF5Jyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBEdXBsZXg7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuUmVhZGFibGUuUmVhZGFibGVTdGF0ZSA9IFJlYWRhYmxlU3RhdGU7XG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgRUUgPSByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXI7XG5cbnZhciBFRWxpc3RlbmVyQ291bnQgPSBmdW5jdGlvbiAoZW1pdHRlciwgdHlwZSkge1xuICByZXR1cm4gZW1pdHRlci5saXN0ZW5lcnModHlwZSkubGVuZ3RoO1xufTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIFN0cmVhbSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvc3RyZWFtcy9zdHJlYW0nKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG4vKjxyZXBsYWNlbWVudD4qL1xuXG52YXIgQnVmZmVyID0gcmVxdWlyZSgnc2FmZS1idWZmZXInKS5CdWZmZXI7XG52YXIgT3VyVWludDhBcnJheSA9ICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbCA6IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogdHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnID8gc2VsZiA6IHt9KS5VaW50OEFycmF5IHx8IGZ1bmN0aW9uICgpIHt9O1xuZnVuY3Rpb24gX3VpbnQ4QXJyYXlUb0J1ZmZlcihjaHVuaykge1xuICByZXR1cm4gQnVmZmVyLmZyb20oY2h1bmspO1xufVxuZnVuY3Rpb24gX2lzVWludDhBcnJheShvYmopIHtcbiAgcmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihvYmopIHx8IG9iaiBpbnN0YW5jZW9mIE91clVpbnQ4QXJyYXk7XG59XG5cbi8qPC9yZXBsYWNlbWVudD4qL1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIHV0aWwgPSBPYmplY3QuY3JlYXRlKHJlcXVpcmUoJ2NvcmUtdXRpbC1pcycpKTtcbnV0aWwuaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgZGVidWdVdGlsID0gcmVxdWlyZSgndXRpbCcpO1xudmFyIGRlYnVnID0gdm9pZCAwO1xuaWYgKGRlYnVnVXRpbCAmJiBkZWJ1Z1V0aWwuZGVidWdsb2cpIHtcbiAgZGVidWcgPSBkZWJ1Z1V0aWwuZGVidWdsb2coJ3N0cmVhbScpO1xufSBlbHNlIHtcbiAgZGVidWcgPSBmdW5jdGlvbiAoKSB7fTtcbn1cbi8qPC9yZXBsYWNlbWVudD4qL1xuXG52YXIgQnVmZmVyTGlzdCA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvc3RyZWFtcy9CdWZmZXJMaXN0Jyk7XG52YXIgZGVzdHJveUltcGwgPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvZGVzdHJveScpO1xudmFyIFN0cmluZ0RlY29kZXI7XG5cbnV0aWwuaW5oZXJpdHMoUmVhZGFibGUsIFN0cmVhbSk7XG5cbnZhciBrUHJveHlFdmVudHMgPSBbJ2Vycm9yJywgJ2Nsb3NlJywgJ2Rlc3Ryb3knLCAncGF1c2UnLCAncmVzdW1lJ107XG5cbmZ1bmN0aW9uIHByZXBlbmRMaXN0ZW5lcihlbWl0dGVyLCBldmVudCwgZm4pIHtcbiAgLy8gU2FkbHkgdGhpcyBpcyBub3QgY2FjaGVhYmxlIGFzIHNvbWUgbGlicmFyaWVzIGJ1bmRsZSB0aGVpciBvd25cbiAgLy8gZXZlbnQgZW1pdHRlciBpbXBsZW1lbnRhdGlvbiB3aXRoIHRoZW0uXG4gIGlmICh0eXBlb2YgZW1pdHRlci5wcmVwZW5kTGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHJldHVybiBlbWl0dGVyLnByZXBlbmRMaXN0ZW5lcihldmVudCwgZm4pO1xuXG4gIC8vIFRoaXMgaXMgYSBoYWNrIHRvIG1ha2Ugc3VyZSB0aGF0IG91ciBlcnJvciBoYW5kbGVyIGlzIGF0dGFjaGVkIGJlZm9yZSBhbnlcbiAgLy8gdXNlcmxhbmQgb25lcy4gIE5FVkVSIERPIFRISVMuIFRoaXMgaXMgaGVyZSBvbmx5IGJlY2F1c2UgdGhpcyBjb2RlIG5lZWRzXG4gIC8vIHRvIGNvbnRpbnVlIHRvIHdvcmsgd2l0aCBvbGRlciB2ZXJzaW9ucyBvZiBOb2RlLmpzIHRoYXQgZG8gbm90IGluY2x1ZGVcbiAgLy8gdGhlIHByZXBlbmRMaXN0ZW5lcigpIG1ldGhvZC4gVGhlIGdvYWwgaXMgdG8gZXZlbnR1YWxseSByZW1vdmUgdGhpcyBoYWNrLlxuICBpZiAoIWVtaXR0ZXIuX2V2ZW50cyB8fCAhZW1pdHRlci5fZXZlbnRzW2V2ZW50XSkgZW1pdHRlci5vbihldmVudCwgZm4pO2Vsc2UgaWYgKGlzQXJyYXkoZW1pdHRlci5fZXZlbnRzW2V2ZW50XSkpIGVtaXR0ZXIuX2V2ZW50c1tldmVudF0udW5zaGlmdChmbik7ZWxzZSBlbWl0dGVyLl9ldmVudHNbZXZlbnRdID0gW2ZuLCBlbWl0dGVyLl9ldmVudHNbZXZlbnRdXTtcbn1cblxuZnVuY3Rpb24gUmVhZGFibGVTdGF0ZShvcHRpb25zLCBzdHJlYW0pIHtcbiAgRHVwbGV4ID0gRHVwbGV4IHx8IHJlcXVpcmUoJy4vX3N0cmVhbV9kdXBsZXgnKTtcblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAvLyBEdXBsZXggc3RyZWFtcyBhcmUgYm90aCByZWFkYWJsZSBhbmQgd3JpdGFibGUsIGJ1dCBzaGFyZVxuICAvLyB0aGUgc2FtZSBvcHRpb25zIG9iamVjdC5cbiAgLy8gSG93ZXZlciwgc29tZSBjYXNlcyByZXF1aXJlIHNldHRpbmcgb3B0aW9ucyB0byBkaWZmZXJlbnRcbiAgLy8gdmFsdWVzIGZvciB0aGUgcmVhZGFibGUgYW5kIHRoZSB3cml0YWJsZSBzaWRlcyBvZiB0aGUgZHVwbGV4IHN0cmVhbS5cbiAgLy8gVGhlc2Ugb3B0aW9ucyBjYW4gYmUgcHJvdmlkZWQgc2VwYXJhdGVseSBhcyByZWFkYWJsZVhYWCBhbmQgd3JpdGFibGVYWFguXG4gIHZhciBpc0R1cGxleCA9IHN0cmVhbSBpbnN0YW5jZW9mIER1cGxleDtcblxuICAvLyBvYmplY3Qgc3RyZWFtIGZsYWcuIFVzZWQgdG8gbWFrZSByZWFkKG4pIGlnbm9yZSBuIGFuZCB0b1xuICAvLyBtYWtlIGFsbCB0aGUgYnVmZmVyIG1lcmdpbmcgYW5kIGxlbmd0aCBjaGVja3MgZ28gYXdheVxuICB0aGlzLm9iamVjdE1vZGUgPSAhIW9wdGlvbnMub2JqZWN0TW9kZTtcblxuICBpZiAoaXNEdXBsZXgpIHRoaXMub2JqZWN0TW9kZSA9IHRoaXMub2JqZWN0TW9kZSB8fCAhIW9wdGlvbnMucmVhZGFibGVPYmplY3RNb2RlO1xuXG4gIC8vIHRoZSBwb2ludCBhdCB3aGljaCBpdCBzdG9wcyBjYWxsaW5nIF9yZWFkKCkgdG8gZmlsbCB0aGUgYnVmZmVyXG4gIC8vIE5vdGU6IDAgaXMgYSB2YWxpZCB2YWx1ZSwgbWVhbnMgXCJkb24ndCBjYWxsIF9yZWFkIHByZWVtcHRpdmVseSBldmVyXCJcbiAgdmFyIGh3bSA9IG9wdGlvbnMuaGlnaFdhdGVyTWFyaztcbiAgdmFyIHJlYWRhYmxlSHdtID0gb3B0aW9ucy5yZWFkYWJsZUhpZ2hXYXRlck1hcms7XG4gIHZhciBkZWZhdWx0SHdtID0gdGhpcy5vYmplY3RNb2RlID8gMTYgOiAxNiAqIDEwMjQ7XG5cbiAgaWYgKGh3bSB8fCBod20gPT09IDApIHRoaXMuaGlnaFdhdGVyTWFyayA9IGh3bTtlbHNlIGlmIChpc0R1cGxleCAmJiAocmVhZGFibGVId20gfHwgcmVhZGFibGVId20gPT09IDApKSB0aGlzLmhpZ2hXYXRlck1hcmsgPSByZWFkYWJsZUh3bTtlbHNlIHRoaXMuaGlnaFdhdGVyTWFyayA9IGRlZmF1bHRId207XG5cbiAgLy8gY2FzdCB0byBpbnRzLlxuICB0aGlzLmhpZ2hXYXRlck1hcmsgPSBNYXRoLmZsb29yKHRoaXMuaGlnaFdhdGVyTWFyayk7XG5cbiAgLy8gQSBsaW5rZWQgbGlzdCBpcyB1c2VkIHRvIHN0b3JlIGRhdGEgY2h1bmtzIGluc3RlYWQgb2YgYW4gYXJyYXkgYmVjYXVzZSB0aGVcbiAgLy8gbGlua2VkIGxpc3QgY2FuIHJlbW92ZSBlbGVtZW50cyBmcm9tIHRoZSBiZWdpbm5pbmcgZmFzdGVyIHRoYW5cbiAgLy8gYXJyYXkuc2hpZnQoKVxuICB0aGlzLmJ1ZmZlciA9IG5ldyBCdWZmZXJMaXN0KCk7XG4gIHRoaXMubGVuZ3RoID0gMDtcbiAgdGhpcy5waXBlcyA9IG51bGw7XG4gIHRoaXMucGlwZXNDb3VudCA9IDA7XG4gIHRoaXMuZmxvd2luZyA9IG51bGw7XG4gIHRoaXMuZW5kZWQgPSBmYWxzZTtcbiAgdGhpcy5lbmRFbWl0dGVkID0gZmFsc2U7XG4gIHRoaXMucmVhZGluZyA9IGZhbHNlO1xuXG4gIC8vIGEgZmxhZyB0byBiZSBhYmxlIHRvIHRlbGwgaWYgdGhlIGV2ZW50ICdyZWFkYWJsZScvJ2RhdGEnIGlzIGVtaXR0ZWRcbiAgLy8gaW1tZWRpYXRlbHksIG9yIG9uIGEgbGF0ZXIgdGljay4gIFdlIHNldCB0aGlzIHRvIHRydWUgYXQgZmlyc3QsIGJlY2F1c2VcbiAgLy8gYW55IGFjdGlvbnMgdGhhdCBzaG91bGRuJ3QgaGFwcGVuIHVudGlsIFwibGF0ZXJcIiBzaG91bGQgZ2VuZXJhbGx5IGFsc29cbiAgLy8gbm90IGhhcHBlbiBiZWZvcmUgdGhlIGZpcnN0IHJlYWQgY2FsbC5cbiAgdGhpcy5zeW5jID0gdHJ1ZTtcblxuICAvLyB3aGVuZXZlciB3ZSByZXR1cm4gbnVsbCwgdGhlbiB3ZSBzZXQgYSBmbGFnIHRvIHNheVxuICAvLyB0aGF0IHdlJ3JlIGF3YWl0aW5nIGEgJ3JlYWRhYmxlJyBldmVudCBlbWlzc2lvbi5cbiAgdGhpcy5uZWVkUmVhZGFibGUgPSBmYWxzZTtcbiAgdGhpcy5lbWl0dGVkUmVhZGFibGUgPSBmYWxzZTtcbiAgdGhpcy5yZWFkYWJsZUxpc3RlbmluZyA9IGZhbHNlO1xuICB0aGlzLnJlc3VtZVNjaGVkdWxlZCA9IGZhbHNlO1xuXG4gIC8vIGhhcyBpdCBiZWVuIGRlc3Ryb3llZFxuICB0aGlzLmRlc3Ryb3llZCA9IGZhbHNlO1xuXG4gIC8vIENyeXB0byBpcyBraW5kIG9mIG9sZCBhbmQgY3J1c3R5LiAgSGlzdG9yaWNhbGx5LCBpdHMgZGVmYXVsdCBzdHJpbmdcbiAgLy8gZW5jb2RpbmcgaXMgJ2JpbmFyeScgc28gd2UgaGF2ZSB0byBtYWtlIHRoaXMgY29uZmlndXJhYmxlLlxuICAvLyBFdmVyeXRoaW5nIGVsc2UgaW4gdGhlIHVuaXZlcnNlIHVzZXMgJ3V0ZjgnLCB0aG91Z2guXG4gIHRoaXMuZGVmYXVsdEVuY29kaW5nID0gb3B0aW9ucy5kZWZhdWx0RW5jb2RpbmcgfHwgJ3V0ZjgnO1xuXG4gIC8vIHRoZSBudW1iZXIgb2Ygd3JpdGVycyB0aGF0IGFyZSBhd2FpdGluZyBhIGRyYWluIGV2ZW50IGluIC5waXBlKClzXG4gIHRoaXMuYXdhaXREcmFpbiA9IDA7XG5cbiAgLy8gaWYgdHJ1ZSwgYSBtYXliZVJlYWRNb3JlIGhhcyBiZWVuIHNjaGVkdWxlZFxuICB0aGlzLnJlYWRpbmdNb3JlID0gZmFsc2U7XG5cbiAgdGhpcy5kZWNvZGVyID0gbnVsbDtcbiAgdGhpcy5lbmNvZGluZyA9IG51bGw7XG4gIGlmIChvcHRpb25zLmVuY29kaW5nKSB7XG4gICAgaWYgKCFTdHJpbmdEZWNvZGVyKSBTdHJpbmdEZWNvZGVyID0gcmVxdWlyZSgnc3RyaW5nX2RlY29kZXIvJykuU3RyaW5nRGVjb2RlcjtcbiAgICB0aGlzLmRlY29kZXIgPSBuZXcgU3RyaW5nRGVjb2RlcihvcHRpb25zLmVuY29kaW5nKTtcbiAgICB0aGlzLmVuY29kaW5nID0gb3B0aW9ucy5lbmNvZGluZztcbiAgfVxufVxuXG5mdW5jdGlvbiBSZWFkYWJsZShvcHRpb25zKSB7XG4gIER1cGxleCA9IER1cGxleCB8fCByZXF1aXJlKCcuL19zdHJlYW1fZHVwbGV4Jyk7XG5cbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlYWRhYmxlKSkgcmV0dXJuIG5ldyBSZWFkYWJsZShvcHRpb25zKTtcblxuICB0aGlzLl9yZWFkYWJsZVN0YXRlID0gbmV3IFJlYWRhYmxlU3RhdGUob3B0aW9ucywgdGhpcyk7XG5cbiAgLy8gbGVnYWN5XG4gIHRoaXMucmVhZGFibGUgPSB0cnVlO1xuXG4gIGlmIChvcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLnJlYWQgPT09ICdmdW5jdGlvbicpIHRoaXMuX3JlYWQgPSBvcHRpb25zLnJlYWQ7XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuZGVzdHJveSA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fZGVzdHJveSA9IG9wdGlvbnMuZGVzdHJveTtcbiAgfVxuXG4gIFN0cmVhbS5jYWxsKHRoaXMpO1xufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoUmVhZGFibGUucHJvdG90eXBlLCAnZGVzdHJveWVkJywge1xuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZDtcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAvLyB3ZSBpZ25vcmUgdGhlIHZhbHVlIGlmIHRoZSBzdHJlYW1cbiAgICAvLyBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgeWV0XG4gICAgaWYgKCF0aGlzLl9yZWFkYWJsZVN0YXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgdGhlIHVzZXIgaXMgZXhwbGljaXRseVxuICAgIC8vIG1hbmFnaW5nIGRlc3Ryb3llZFxuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkID0gdmFsdWU7XG4gIH1cbn0pO1xuXG5SZWFkYWJsZS5wcm90b3R5cGUuZGVzdHJveSA9IGRlc3Ryb3lJbXBsLmRlc3Ryb3k7XG5SZWFkYWJsZS5wcm90b3R5cGUuX3VuZGVzdHJveSA9IGRlc3Ryb3lJbXBsLnVuZGVzdHJveTtcblJlYWRhYmxlLnByb3RvdHlwZS5fZGVzdHJveSA9IGZ1bmN0aW9uIChlcnIsIGNiKSB7XG4gIHRoaXMucHVzaChudWxsKTtcbiAgY2IoZXJyKTtcbn07XG5cbi8vIE1hbnVhbGx5IHNob3ZlIHNvbWV0aGluZyBpbnRvIHRoZSByZWFkKCkgYnVmZmVyLlxuLy8gVGhpcyByZXR1cm5zIHRydWUgaWYgdGhlIGhpZ2hXYXRlck1hcmsgaGFzIG5vdCBiZWVuIGhpdCB5ZXQsXG4vLyBzaW1pbGFyIHRvIGhvdyBXcml0YWJsZS53cml0ZSgpIHJldHVybnMgdHJ1ZSBpZiB5b3Ugc2hvdWxkXG4vLyB3cml0ZSgpIHNvbWUgbW9yZS5cblJlYWRhYmxlLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZykge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICB2YXIgc2tpcENodW5rQ2hlY2s7XG5cbiAgaWYgKCFzdGF0ZS5vYmplY3RNb2RlKSB7XG4gICAgaWYgKHR5cGVvZiBjaHVuayA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gZW5jb2RpbmcgfHwgc3RhdGUuZGVmYXVsdEVuY29kaW5nO1xuICAgICAgaWYgKGVuY29kaW5nICE9PSBzdGF0ZS5lbmNvZGluZykge1xuICAgICAgICBjaHVuayA9IEJ1ZmZlci5mcm9tKGNodW5rLCBlbmNvZGluZyk7XG4gICAgICAgIGVuY29kaW5nID0gJyc7XG4gICAgICB9XG4gICAgICBza2lwQ2h1bmtDaGVjayA9IHRydWU7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHNraXBDaHVua0NoZWNrID0gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiByZWFkYWJsZUFkZENodW5rKHRoaXMsIGNodW5rLCBlbmNvZGluZywgZmFsc2UsIHNraXBDaHVua0NoZWNrKTtcbn07XG5cbi8vIFVuc2hpZnQgc2hvdWxkICphbHdheXMqIGJlIHNvbWV0aGluZyBkaXJlY3RseSBvdXQgb2YgcmVhZCgpXG5SZWFkYWJsZS5wcm90b3R5cGUudW5zaGlmdCA9IGZ1bmN0aW9uIChjaHVuaykge1xuICByZXR1cm4gcmVhZGFibGVBZGRDaHVuayh0aGlzLCBjaHVuaywgbnVsbCwgdHJ1ZSwgZmFsc2UpO1xufTtcblxuZnVuY3Rpb24gcmVhZGFibGVBZGRDaHVuayhzdHJlYW0sIGNodW5rLCBlbmNvZGluZywgYWRkVG9Gcm9udCwgc2tpcENodW5rQ2hlY2spIHtcbiAgdmFyIHN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlO1xuICBpZiAoY2h1bmsgPT09IG51bGwpIHtcbiAgICBzdGF0ZS5yZWFkaW5nID0gZmFsc2U7XG4gICAgb25Fb2ZDaHVuayhzdHJlYW0sIHN0YXRlKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgZXI7XG4gICAgaWYgKCFza2lwQ2h1bmtDaGVjaykgZXIgPSBjaHVua0ludmFsaWQoc3RhdGUsIGNodW5rKTtcbiAgICBpZiAoZXIpIHtcbiAgICAgIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVyKTtcbiAgICB9IGVsc2UgaWYgKHN0YXRlLm9iamVjdE1vZGUgfHwgY2h1bmsgJiYgY2h1bmsubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKHR5cGVvZiBjaHVuayAhPT0gJ3N0cmluZycgJiYgIXN0YXRlLm9iamVjdE1vZGUgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKGNodW5rKSAhPT0gQnVmZmVyLnByb3RvdHlwZSkge1xuICAgICAgICBjaHVuayA9IF91aW50OEFycmF5VG9CdWZmZXIoY2h1bmspO1xuICAgICAgfVxuXG4gICAgICBpZiAoYWRkVG9Gcm9udCkge1xuICAgICAgICBpZiAoc3RhdGUuZW5kRW1pdHRlZCkgc3RyZWFtLmVtaXQoJ2Vycm9yJywgbmV3IEVycm9yKCdzdHJlYW0udW5zaGlmdCgpIGFmdGVyIGVuZCBldmVudCcpKTtlbHNlIGFkZENodW5rKHN0cmVhbSwgc3RhdGUsIGNodW5rLCB0cnVlKTtcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUuZW5kZWQpIHtcbiAgICAgICAgc3RyZWFtLmVtaXQoJ2Vycm9yJywgbmV3IEVycm9yKCdzdHJlYW0ucHVzaCgpIGFmdGVyIEVPRicpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRlLnJlYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgaWYgKHN0YXRlLmRlY29kZXIgJiYgIWVuY29kaW5nKSB7XG4gICAgICAgICAgY2h1bmsgPSBzdGF0ZS5kZWNvZGVyLndyaXRlKGNodW5rKTtcbiAgICAgICAgICBpZiAoc3RhdGUub2JqZWN0TW9kZSB8fCBjaHVuay5sZW5ndGggIT09IDApIGFkZENodW5rKHN0cmVhbSwgc3RhdGUsIGNodW5rLCBmYWxzZSk7ZWxzZSBtYXliZVJlYWRNb3JlKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFkZENodW5rKHN0cmVhbSwgc3RhdGUsIGNodW5rLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFhZGRUb0Zyb250KSB7XG4gICAgICBzdGF0ZS5yZWFkaW5nID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5lZWRNb3JlRGF0YShzdGF0ZSk7XG59XG5cbmZ1bmN0aW9uIGFkZENodW5rKHN0cmVhbSwgc3RhdGUsIGNodW5rLCBhZGRUb0Zyb250KSB7XG4gIGlmIChzdGF0ZS5mbG93aW5nICYmIHN0YXRlLmxlbmd0aCA9PT0gMCAmJiAhc3RhdGUuc3luYykge1xuICAgIHN0cmVhbS5lbWl0KCdkYXRhJywgY2h1bmspO1xuICAgIHN0cmVhbS5yZWFkKDApO1xuICB9IGVsc2Uge1xuICAgIC8vIHVwZGF0ZSB0aGUgYnVmZmVyIGluZm8uXG4gICAgc3RhdGUubGVuZ3RoICs9IHN0YXRlLm9iamVjdE1vZGUgPyAxIDogY2h1bmsubGVuZ3RoO1xuICAgIGlmIChhZGRUb0Zyb250KSBzdGF0ZS5idWZmZXIudW5zaGlmdChjaHVuayk7ZWxzZSBzdGF0ZS5idWZmZXIucHVzaChjaHVuayk7XG5cbiAgICBpZiAoc3RhdGUubmVlZFJlYWRhYmxlKSBlbWl0UmVhZGFibGUoc3RyZWFtKTtcbiAgfVxuICBtYXliZVJlYWRNb3JlKHN0cmVhbSwgc3RhdGUpO1xufVxuXG5mdW5jdGlvbiBjaHVua0ludmFsaWQoc3RhdGUsIGNodW5rKSB7XG4gIHZhciBlcjtcbiAgaWYgKCFfaXNVaW50OEFycmF5KGNodW5rKSAmJiB0eXBlb2YgY2h1bmsgIT09ICdzdHJpbmcnICYmIGNodW5rICE9PSB1bmRlZmluZWQgJiYgIXN0YXRlLm9iamVjdE1vZGUpIHtcbiAgICBlciA9IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgbm9uLXN0cmluZy9idWZmZXIgY2h1bmsnKTtcbiAgfVxuICByZXR1cm4gZXI7XG59XG5cbi8vIGlmIGl0J3MgcGFzdCB0aGUgaGlnaCB3YXRlciBtYXJrLCB3ZSBjYW4gcHVzaCBpbiBzb21lIG1vcmUuXG4vLyBBbHNvLCBpZiB3ZSBoYXZlIG5vIGRhdGEgeWV0LCB3ZSBjYW4gc3RhbmQgc29tZVxuLy8gbW9yZSBieXRlcy4gIFRoaXMgaXMgdG8gd29yayBhcm91bmQgY2FzZXMgd2hlcmUgaHdtPTAsXG4vLyBzdWNoIGFzIHRoZSByZXBsLiAgQWxzbywgaWYgdGhlIHB1c2goKSB0cmlnZ2VyZWQgYVxuLy8gcmVhZGFibGUgZXZlbnQsIGFuZCB0aGUgdXNlciBjYWxsZWQgcmVhZChsYXJnZU51bWJlcikgc3VjaCB0aGF0XG4vLyBuZWVkUmVhZGFibGUgd2FzIHNldCwgdGhlbiB3ZSBvdWdodCB0byBwdXNoIG1vcmUsIHNvIHRoYXQgYW5vdGhlclxuLy8gJ3JlYWRhYmxlJyBldmVudCB3aWxsIGJlIHRyaWdnZXJlZC5cbmZ1bmN0aW9uIG5lZWRNb3JlRGF0YShzdGF0ZSkge1xuICByZXR1cm4gIXN0YXRlLmVuZGVkICYmIChzdGF0ZS5uZWVkUmVhZGFibGUgfHwgc3RhdGUubGVuZ3RoIDwgc3RhdGUuaGlnaFdhdGVyTWFyayB8fCBzdGF0ZS5sZW5ndGggPT09IDApO1xufVxuXG5SZWFkYWJsZS5wcm90b3R5cGUuaXNQYXVzZWQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcgPT09IGZhbHNlO1xufTtcblxuLy8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuXG5SZWFkYWJsZS5wcm90b3R5cGUuc2V0RW5jb2RpbmcgPSBmdW5jdGlvbiAoZW5jKSB7XG4gIGlmICghU3RyaW5nRGVjb2RlcikgU3RyaW5nRGVjb2RlciA9IHJlcXVpcmUoJ3N0cmluZ19kZWNvZGVyLycpLlN0cmluZ0RlY29kZXI7XG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2RlciA9IG5ldyBTdHJpbmdEZWNvZGVyKGVuYyk7XG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5jb2RpbmcgPSBlbmM7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gRG9uJ3QgcmFpc2UgdGhlIGh3bSA+IDhNQlxudmFyIE1BWF9IV00gPSAweDgwMDAwMDtcbmZ1bmN0aW9uIGNvbXB1dGVOZXdIaWdoV2F0ZXJNYXJrKG4pIHtcbiAgaWYgKG4gPj0gTUFYX0hXTSkge1xuICAgIG4gPSBNQVhfSFdNO1xuICB9IGVsc2Uge1xuICAgIC8vIEdldCB0aGUgbmV4dCBoaWdoZXN0IHBvd2VyIG9mIDIgdG8gcHJldmVudCBpbmNyZWFzaW5nIGh3bSBleGNlc3NpdmVseSBpblxuICAgIC8vIHRpbnkgYW1vdW50c1xuICAgIG4tLTtcbiAgICBuIHw9IG4gPj4+IDE7XG4gICAgbiB8PSBuID4+PiAyO1xuICAgIG4gfD0gbiA+Pj4gNDtcbiAgICBuIHw9IG4gPj4+IDg7XG4gICAgbiB8PSBuID4+PiAxNjtcbiAgICBuKys7XG4gIH1cbiAgcmV0dXJuIG47XG59XG5cbi8vIFRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gYmUgaW5saW5hYmxlLCBzbyBwbGVhc2UgdGFrZSBjYXJlIHdoZW4gbWFraW5nXG4vLyBjaGFuZ2VzIHRvIHRoZSBmdW5jdGlvbiBib2R5LlxuZnVuY3Rpb24gaG93TXVjaFRvUmVhZChuLCBzdGF0ZSkge1xuICBpZiAobiA8PSAwIHx8IHN0YXRlLmxlbmd0aCA9PT0gMCAmJiBzdGF0ZS5lbmRlZCkgcmV0dXJuIDA7XG4gIGlmIChzdGF0ZS5vYmplY3RNb2RlKSByZXR1cm4gMTtcbiAgaWYgKG4gIT09IG4pIHtcbiAgICAvLyBPbmx5IGZsb3cgb25lIGJ1ZmZlciBhdCBhIHRpbWVcbiAgICBpZiAoc3RhdGUuZmxvd2luZyAmJiBzdGF0ZS5sZW5ndGgpIHJldHVybiBzdGF0ZS5idWZmZXIuaGVhZC5kYXRhLmxlbmd0aDtlbHNlIHJldHVybiBzdGF0ZS5sZW5ndGg7XG4gIH1cbiAgLy8gSWYgd2UncmUgYXNraW5nIGZvciBtb3JlIHRoYW4gdGhlIGN1cnJlbnQgaHdtLCB0aGVuIHJhaXNlIHRoZSBod20uXG4gIGlmIChuID4gc3RhdGUuaGlnaFdhdGVyTWFyaykgc3RhdGUuaGlnaFdhdGVyTWFyayA9IGNvbXB1dGVOZXdIaWdoV2F0ZXJNYXJrKG4pO1xuICBpZiAobiA8PSBzdGF0ZS5sZW5ndGgpIHJldHVybiBuO1xuICAvLyBEb24ndCBoYXZlIGVub3VnaFxuICBpZiAoIXN0YXRlLmVuZGVkKSB7XG4gICAgc3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZTtcbiAgICByZXR1cm4gMDtcbiAgfVxuICByZXR1cm4gc3RhdGUubGVuZ3RoO1xufVxuXG4vLyB5b3UgY2FuIG92ZXJyaWRlIGVpdGhlciB0aGlzIG1ldGhvZCwgb3IgdGhlIGFzeW5jIF9yZWFkKG4pIGJlbG93LlxuUmVhZGFibGUucHJvdG90eXBlLnJlYWQgPSBmdW5jdGlvbiAobikge1xuICBkZWJ1ZygncmVhZCcsIG4pO1xuICBuID0gcGFyc2VJbnQobiwgMTApO1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICB2YXIgbk9yaWcgPSBuO1xuXG4gIGlmIChuICE9PSAwKSBzdGF0ZS5lbWl0dGVkUmVhZGFibGUgPSBmYWxzZTtcblxuICAvLyBpZiB3ZSdyZSBkb2luZyByZWFkKDApIHRvIHRyaWdnZXIgYSByZWFkYWJsZSBldmVudCwgYnV0IHdlXG4gIC8vIGFscmVhZHkgaGF2ZSBhIGJ1bmNoIG9mIGRhdGEgaW4gdGhlIGJ1ZmZlciwgdGhlbiBqdXN0IHRyaWdnZXJcbiAgLy8gdGhlICdyZWFkYWJsZScgZXZlbnQgYW5kIG1vdmUgb24uXG4gIGlmIChuID09PSAwICYmIHN0YXRlLm5lZWRSZWFkYWJsZSAmJiAoc3RhdGUubGVuZ3RoID49IHN0YXRlLmhpZ2hXYXRlck1hcmsgfHwgc3RhdGUuZW5kZWQpKSB7XG4gICAgZGVidWcoJ3JlYWQ6IGVtaXRSZWFkYWJsZScsIHN0YXRlLmxlbmd0aCwgc3RhdGUuZW5kZWQpO1xuICAgIGlmIChzdGF0ZS5sZW5ndGggPT09IDAgJiYgc3RhdGUuZW5kZWQpIGVuZFJlYWRhYmxlKHRoaXMpO2Vsc2UgZW1pdFJlYWRhYmxlKHRoaXMpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgbiA9IGhvd011Y2hUb1JlYWQobiwgc3RhdGUpO1xuXG4gIC8vIGlmIHdlJ3ZlIGVuZGVkLCBhbmQgd2UncmUgbm93IGNsZWFyLCB0aGVuIGZpbmlzaCBpdCB1cC5cbiAgaWYgKG4gPT09IDAgJiYgc3RhdGUuZW5kZWQpIHtcbiAgICBpZiAoc3RhdGUubGVuZ3RoID09PSAwKSBlbmRSZWFkYWJsZSh0aGlzKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIEFsbCB0aGUgYWN0dWFsIGNodW5rIGdlbmVyYXRpb24gbG9naWMgbmVlZHMgdG8gYmVcbiAgLy8gKmJlbG93KiB0aGUgY2FsbCB0byBfcmVhZC4gIFRoZSByZWFzb24gaXMgdGhhdCBpbiBjZXJ0YWluXG4gIC8vIHN5bnRoZXRpYyBzdHJlYW0gY2FzZXMsIHN1Y2ggYXMgcGFzc3Rocm91Z2ggc3RyZWFtcywgX3JlYWRcbiAgLy8gbWF5IGJlIGEgY29tcGxldGVseSBzeW5jaHJvbm91cyBvcGVyYXRpb24gd2hpY2ggbWF5IGNoYW5nZVxuICAvLyB0aGUgc3RhdGUgb2YgdGhlIHJlYWQgYnVmZmVyLCBwcm92aWRpbmcgZW5vdWdoIGRhdGEgd2hlblxuICAvLyBiZWZvcmUgdGhlcmUgd2FzICpub3QqIGVub3VnaC5cbiAgLy9cbiAgLy8gU28sIHRoZSBzdGVwcyBhcmU6XG4gIC8vIDEuIEZpZ3VyZSBvdXQgd2hhdCB0aGUgc3RhdGUgb2YgdGhpbmdzIHdpbGwgYmUgYWZ0ZXIgd2UgZG9cbiAgLy8gYSByZWFkIGZyb20gdGhlIGJ1ZmZlci5cbiAgLy9cbiAgLy8gMi4gSWYgdGhhdCByZXN1bHRpbmcgc3RhdGUgd2lsbCB0cmlnZ2VyIGEgX3JlYWQsIHRoZW4gY2FsbCBfcmVhZC5cbiAgLy8gTm90ZSB0aGF0IHRoaXMgbWF5IGJlIGFzeW5jaHJvbm91cywgb3Igc3luY2hyb25vdXMuICBZZXMsIGl0IGlzXG4gIC8vIGRlZXBseSB1Z2x5IHRvIHdyaXRlIEFQSXMgdGhpcyB3YXksIGJ1dCB0aGF0IHN0aWxsIGRvZXNuJ3QgbWVhblxuICAvLyB0aGF0IHRoZSBSZWFkYWJsZSBjbGFzcyBzaG91bGQgYmVoYXZlIGltcHJvcGVybHksIGFzIHN0cmVhbXMgYXJlXG4gIC8vIGRlc2lnbmVkIHRvIGJlIHN5bmMvYXN5bmMgYWdub3N0aWMuXG4gIC8vIFRha2Ugbm90ZSBpZiB0aGUgX3JlYWQgY2FsbCBpcyBzeW5jIG9yIGFzeW5jIChpZSwgaWYgdGhlIHJlYWQgY2FsbFxuICAvLyBoYXMgcmV0dXJuZWQgeWV0KSwgc28gdGhhdCB3ZSBrbm93IHdoZXRoZXIgb3Igbm90IGl0J3Mgc2FmZSB0byBlbWl0XG4gIC8vICdyZWFkYWJsZScgZXRjLlxuICAvL1xuICAvLyAzLiBBY3R1YWxseSBwdWxsIHRoZSByZXF1ZXN0ZWQgY2h1bmtzIG91dCBvZiB0aGUgYnVmZmVyIGFuZCByZXR1cm4uXG5cbiAgLy8gaWYgd2UgbmVlZCBhIHJlYWRhYmxlIGV2ZW50LCB0aGVuIHdlIG5lZWQgdG8gZG8gc29tZSByZWFkaW5nLlxuICB2YXIgZG9SZWFkID0gc3RhdGUubmVlZFJlYWRhYmxlO1xuICBkZWJ1ZygnbmVlZCByZWFkYWJsZScsIGRvUmVhZCk7XG5cbiAgLy8gaWYgd2UgY3VycmVudGx5IGhhdmUgbGVzcyB0aGFuIHRoZSBoaWdoV2F0ZXJNYXJrLCB0aGVuIGFsc28gcmVhZCBzb21lXG4gIGlmIChzdGF0ZS5sZW5ndGggPT09IDAgfHwgc3RhdGUubGVuZ3RoIC0gbiA8IHN0YXRlLmhpZ2hXYXRlck1hcmspIHtcbiAgICBkb1JlYWQgPSB0cnVlO1xuICAgIGRlYnVnKCdsZW5ndGggbGVzcyB0aGFuIHdhdGVybWFyaycsIGRvUmVhZCk7XG4gIH1cblxuICAvLyBob3dldmVyLCBpZiB3ZSd2ZSBlbmRlZCwgdGhlbiB0aGVyZSdzIG5vIHBvaW50LCBhbmQgaWYgd2UncmUgYWxyZWFkeVxuICAvLyByZWFkaW5nLCB0aGVuIGl0J3MgdW5uZWNlc3NhcnkuXG4gIGlmIChzdGF0ZS5lbmRlZCB8fCBzdGF0ZS5yZWFkaW5nKSB7XG4gICAgZG9SZWFkID0gZmFsc2U7XG4gICAgZGVidWcoJ3JlYWRpbmcgb3IgZW5kZWQnLCBkb1JlYWQpO1xuICB9IGVsc2UgaWYgKGRvUmVhZCkge1xuICAgIGRlYnVnKCdkbyByZWFkJyk7XG4gICAgc3RhdGUucmVhZGluZyA9IHRydWU7XG4gICAgc3RhdGUuc3luYyA9IHRydWU7XG4gICAgLy8gaWYgdGhlIGxlbmd0aCBpcyBjdXJyZW50bHkgemVybywgdGhlbiB3ZSAqbmVlZCogYSByZWFkYWJsZSBldmVudC5cbiAgICBpZiAoc3RhdGUubGVuZ3RoID09PSAwKSBzdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlO1xuICAgIC8vIGNhbGwgaW50ZXJuYWwgcmVhZCBtZXRob2RcbiAgICB0aGlzLl9yZWFkKHN0YXRlLmhpZ2hXYXRlck1hcmspO1xuICAgIHN0YXRlLnN5bmMgPSBmYWxzZTtcbiAgICAvLyBJZiBfcmVhZCBwdXNoZWQgZGF0YSBzeW5jaHJvbm91c2x5LCB0aGVuIGByZWFkaW5nYCB3aWxsIGJlIGZhbHNlLFxuICAgIC8vIGFuZCB3ZSBuZWVkIHRvIHJlLWV2YWx1YXRlIGhvdyBtdWNoIGRhdGEgd2UgY2FuIHJldHVybiB0byB0aGUgdXNlci5cbiAgICBpZiAoIXN0YXRlLnJlYWRpbmcpIG4gPSBob3dNdWNoVG9SZWFkKG5PcmlnLCBzdGF0ZSk7XG4gIH1cblxuICB2YXIgcmV0O1xuICBpZiAobiA+IDApIHJldCA9IGZyb21MaXN0KG4sIHN0YXRlKTtlbHNlIHJldCA9IG51bGw7XG5cbiAgaWYgKHJldCA9PT0gbnVsbCkge1xuICAgIHN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWU7XG4gICAgbiA9IDA7XG4gIH0gZWxzZSB7XG4gICAgc3RhdGUubGVuZ3RoIC09IG47XG4gIH1cblxuICBpZiAoc3RhdGUubGVuZ3RoID09PSAwKSB7XG4gICAgLy8gSWYgd2UgaGF2ZSBub3RoaW5nIGluIHRoZSBidWZmZXIsIHRoZW4gd2Ugd2FudCB0byBrbm93XG4gICAgLy8gYXMgc29vbiBhcyB3ZSAqZG8qIGdldCBzb21ldGhpbmcgaW50byB0aGUgYnVmZmVyLlxuICAgIGlmICghc3RhdGUuZW5kZWQpIHN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWU7XG5cbiAgICAvLyBJZiB3ZSB0cmllZCB0byByZWFkKCkgcGFzdCB0aGUgRU9GLCB0aGVuIGVtaXQgZW5kIG9uIHRoZSBuZXh0IHRpY2suXG4gICAgaWYgKG5PcmlnICE9PSBuICYmIHN0YXRlLmVuZGVkKSBlbmRSZWFkYWJsZSh0aGlzKTtcbiAgfVxuXG4gIGlmIChyZXQgIT09IG51bGwpIHRoaXMuZW1pdCgnZGF0YScsIHJldCk7XG5cbiAgcmV0dXJuIHJldDtcbn07XG5cbmZ1bmN0aW9uIG9uRW9mQ2h1bmsoc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoc3RhdGUuZW5kZWQpIHJldHVybjtcbiAgaWYgKHN0YXRlLmRlY29kZXIpIHtcbiAgICB2YXIgY2h1bmsgPSBzdGF0ZS5kZWNvZGVyLmVuZCgpO1xuICAgIGlmIChjaHVuayAmJiBjaHVuay5sZW5ndGgpIHtcbiAgICAgIHN0YXRlLmJ1ZmZlci5wdXNoKGNodW5rKTtcbiAgICAgIHN0YXRlLmxlbmd0aCArPSBzdGF0ZS5vYmplY3RNb2RlID8gMSA6IGNodW5rLmxlbmd0aDtcbiAgICB9XG4gIH1cbiAgc3RhdGUuZW5kZWQgPSB0cnVlO1xuXG4gIC8vIGVtaXQgJ3JlYWRhYmxlJyBub3cgdG8gbWFrZSBzdXJlIGl0IGdldHMgcGlja2VkIHVwLlxuICBlbWl0UmVhZGFibGUoc3RyZWFtKTtcbn1cblxuLy8gRG9uJ3QgZW1pdCByZWFkYWJsZSByaWdodCBhd2F5IGluIHN5bmMgbW9kZSwgYmVjYXVzZSB0aGlzIGNhbiB0cmlnZ2VyXG4vLyBhbm90aGVyIHJlYWQoKSBjYWxsID0+IHN0YWNrIG92ZXJmbG93LiAgVGhpcyB3YXksIGl0IG1pZ2h0IHRyaWdnZXJcbi8vIGEgbmV4dFRpY2sgcmVjdXJzaW9uIHdhcm5pbmcsIGJ1dCB0aGF0J3Mgbm90IHNvIGJhZC5cbmZ1bmN0aW9uIGVtaXRSZWFkYWJsZShzdHJlYW0pIHtcbiAgdmFyIHN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlO1xuICBzdGF0ZS5uZWVkUmVhZGFibGUgPSBmYWxzZTtcbiAgaWYgKCFzdGF0ZS5lbWl0dGVkUmVhZGFibGUpIHtcbiAgICBkZWJ1ZygnZW1pdFJlYWRhYmxlJywgc3RhdGUuZmxvd2luZyk7XG4gICAgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gdHJ1ZTtcbiAgICBpZiAoc3RhdGUuc3luYykgcG5hLm5leHRUaWNrKGVtaXRSZWFkYWJsZV8sIHN0cmVhbSk7ZWxzZSBlbWl0UmVhZGFibGVfKHN0cmVhbSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZW1pdFJlYWRhYmxlXyhzdHJlYW0pIHtcbiAgZGVidWcoJ2VtaXQgcmVhZGFibGUnKTtcbiAgc3RyZWFtLmVtaXQoJ3JlYWRhYmxlJyk7XG4gIGZsb3coc3RyZWFtKTtcbn1cblxuLy8gYXQgdGhpcyBwb2ludCwgdGhlIHVzZXIgaGFzIHByZXN1bWFibHkgc2VlbiB0aGUgJ3JlYWRhYmxlJyBldmVudCxcbi8vIGFuZCBjYWxsZWQgcmVhZCgpIHRvIGNvbnN1bWUgc29tZSBkYXRhLiAgdGhhdCBtYXkgaGF2ZSB0cmlnZ2VyZWRcbi8vIGluIHR1cm4gYW5vdGhlciBfcmVhZChuKSBjYWxsLCBpbiB3aGljaCBjYXNlIHJlYWRpbmcgPSB0cnVlIGlmXG4vLyBpdCdzIGluIHByb2dyZXNzLlxuLy8gSG93ZXZlciwgaWYgd2UncmUgbm90IGVuZGVkLCBvciByZWFkaW5nLCBhbmQgdGhlIGxlbmd0aCA8IGh3bSxcbi8vIHRoZW4gZ28gYWhlYWQgYW5kIHRyeSB0byByZWFkIHNvbWUgbW9yZSBwcmVlbXB0aXZlbHkuXG5mdW5jdGlvbiBtYXliZVJlYWRNb3JlKHN0cmVhbSwgc3RhdGUpIHtcbiAgaWYgKCFzdGF0ZS5yZWFkaW5nTW9yZSkge1xuICAgIHN0YXRlLnJlYWRpbmdNb3JlID0gdHJ1ZTtcbiAgICBwbmEubmV4dFRpY2sobWF5YmVSZWFkTW9yZV8sIHN0cmVhbSwgc3RhdGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1heWJlUmVhZE1vcmVfKHN0cmVhbSwgc3RhdGUpIHtcbiAgdmFyIGxlbiA9IHN0YXRlLmxlbmd0aDtcbiAgd2hpbGUgKCFzdGF0ZS5yZWFkaW5nICYmICFzdGF0ZS5mbG93aW5nICYmICFzdGF0ZS5lbmRlZCAmJiBzdGF0ZS5sZW5ndGggPCBzdGF0ZS5oaWdoV2F0ZXJNYXJrKSB7XG4gICAgZGVidWcoJ21heWJlUmVhZE1vcmUgcmVhZCAwJyk7XG4gICAgc3RyZWFtLnJlYWQoMCk7XG4gICAgaWYgKGxlbiA9PT0gc3RhdGUubGVuZ3RoKVxuICAgICAgLy8gZGlkbid0IGdldCBhbnkgZGF0YSwgc3RvcCBzcGlubmluZy5cbiAgICAgIGJyZWFrO2Vsc2UgbGVuID0gc3RhdGUubGVuZ3RoO1xuICB9XG4gIHN0YXRlLnJlYWRpbmdNb3JlID0gZmFsc2U7XG59XG5cbi8vIGFic3RyYWN0IG1ldGhvZC4gIHRvIGJlIG92ZXJyaWRkZW4gaW4gc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gY2xhc3Nlcy5cbi8vIGNhbGwgY2IoZXIsIGRhdGEpIHdoZXJlIGRhdGEgaXMgPD0gbiBpbiBsZW5ndGguXG4vLyBmb3IgdmlydHVhbCAobm9uLXN0cmluZywgbm9uLWJ1ZmZlcikgc3RyZWFtcywgXCJsZW5ndGhcIiBpcyBzb21ld2hhdFxuLy8gYXJiaXRyYXJ5LCBhbmQgcGVyaGFwcyBub3QgdmVyeSBtZWFuaW5nZnVsLlxuUmVhZGFibGUucHJvdG90eXBlLl9yZWFkID0gZnVuY3Rpb24gKG4pIHtcbiAgdGhpcy5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcignX3JlYWQoKSBpcyBub3QgaW1wbGVtZW50ZWQnKSk7XG59O1xuXG5SZWFkYWJsZS5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uIChkZXN0LCBwaXBlT3B0cykge1xuICB2YXIgc3JjID0gdGhpcztcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcblxuICBzd2l0Y2ggKHN0YXRlLnBpcGVzQ291bnQpIHtcbiAgICBjYXNlIDA6XG4gICAgICBzdGF0ZS5waXBlcyA9IGRlc3Q7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDE6XG4gICAgICBzdGF0ZS5waXBlcyA9IFtzdGF0ZS5waXBlcywgZGVzdF07XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgc3RhdGUucGlwZXMucHVzaChkZXN0KTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIHN0YXRlLnBpcGVzQ291bnQgKz0gMTtcbiAgZGVidWcoJ3BpcGUgY291bnQ9JWQgb3B0cz0laicsIHN0YXRlLnBpcGVzQ291bnQsIHBpcGVPcHRzKTtcblxuICB2YXIgZG9FbmQgPSAoIXBpcGVPcHRzIHx8IHBpcGVPcHRzLmVuZCAhPT0gZmFsc2UpICYmIGRlc3QgIT09IHByb2Nlc3Muc3Rkb3V0ICYmIGRlc3QgIT09IHByb2Nlc3Muc3RkZXJyO1xuXG4gIHZhciBlbmRGbiA9IGRvRW5kID8gb25lbmQgOiB1bnBpcGU7XG4gIGlmIChzdGF0ZS5lbmRFbWl0dGVkKSBwbmEubmV4dFRpY2soZW5kRm4pO2Vsc2Ugc3JjLm9uY2UoJ2VuZCcsIGVuZEZuKTtcblxuICBkZXN0Lm9uKCd1bnBpcGUnLCBvbnVucGlwZSk7XG4gIGZ1bmN0aW9uIG9udW5waXBlKHJlYWRhYmxlLCB1bnBpcGVJbmZvKSB7XG4gICAgZGVidWcoJ29udW5waXBlJyk7XG4gICAgaWYgKHJlYWRhYmxlID09PSBzcmMpIHtcbiAgICAgIGlmICh1bnBpcGVJbmZvICYmIHVucGlwZUluZm8uaGFzVW5waXBlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgdW5waXBlSW5mby5oYXNVbnBpcGVkID0gdHJ1ZTtcbiAgICAgICAgY2xlYW51cCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG9uZW5kKCkge1xuICAgIGRlYnVnKCdvbmVuZCcpO1xuICAgIGRlc3QuZW5kKCk7XG4gIH1cblxuICAvLyB3aGVuIHRoZSBkZXN0IGRyYWlucywgaXQgcmVkdWNlcyB0aGUgYXdhaXREcmFpbiBjb3VudGVyXG4gIC8vIG9uIHRoZSBzb3VyY2UuICBUaGlzIHdvdWxkIGJlIG1vcmUgZWxlZ2FudCB3aXRoIGEgLm9uY2UoKVxuICAvLyBoYW5kbGVyIGluIGZsb3coKSwgYnV0IGFkZGluZyBhbmQgcmVtb3ZpbmcgcmVwZWF0ZWRseSBpc1xuICAvLyB0b28gc2xvdy5cbiAgdmFyIG9uZHJhaW4gPSBwaXBlT25EcmFpbihzcmMpO1xuICBkZXN0Lm9uKCdkcmFpbicsIG9uZHJhaW4pO1xuXG4gIHZhciBjbGVhbmVkVXAgPSBmYWxzZTtcbiAgZnVuY3Rpb24gY2xlYW51cCgpIHtcbiAgICBkZWJ1ZygnY2xlYW51cCcpO1xuICAgIC8vIGNsZWFudXAgZXZlbnQgaGFuZGxlcnMgb25jZSB0aGUgcGlwZSBpcyBicm9rZW5cbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uY2xvc2UpO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2ZpbmlzaCcsIG9uZmluaXNoKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdkcmFpbicsIG9uZHJhaW4pO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgb25lcnJvcik7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcigndW5waXBlJywgb251bnBpcGUpO1xuICAgIHNyYy5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25lbmQpO1xuICAgIHNyYy5yZW1vdmVMaXN0ZW5lcignZW5kJywgdW5waXBlKTtcbiAgICBzcmMucmVtb3ZlTGlzdGVuZXIoJ2RhdGEnLCBvbmRhdGEpO1xuXG4gICAgY2xlYW5lZFVwID0gdHJ1ZTtcblxuICAgIC8vIGlmIHRoZSByZWFkZXIgaXMgd2FpdGluZyBmb3IgYSBkcmFpbiBldmVudCBmcm9tIHRoaXNcbiAgICAvLyBzcGVjaWZpYyB3cml0ZXIsIHRoZW4gaXQgd291bGQgY2F1c2UgaXQgdG8gbmV2ZXIgc3RhcnRcbiAgICAvLyBmbG93aW5nIGFnYWluLlxuICAgIC8vIFNvLCBpZiB0aGlzIGlzIGF3YWl0aW5nIGEgZHJhaW4sIHRoZW4gd2UganVzdCBjYWxsIGl0IG5vdy5cbiAgICAvLyBJZiB3ZSBkb24ndCBrbm93LCB0aGVuIGFzc3VtZSB0aGF0IHdlIGFyZSB3YWl0aW5nIGZvciBvbmUuXG4gICAgaWYgKHN0YXRlLmF3YWl0RHJhaW4gJiYgKCFkZXN0Ll93cml0YWJsZVN0YXRlIHx8IGRlc3QuX3dyaXRhYmxlU3RhdGUubmVlZERyYWluKSkgb25kcmFpbigpO1xuICB9XG5cbiAgLy8gSWYgdGhlIHVzZXIgcHVzaGVzIG1vcmUgZGF0YSB3aGlsZSB3ZSdyZSB3cml0aW5nIHRvIGRlc3QgdGhlbiB3ZSdsbCBlbmQgdXBcbiAgLy8gaW4gb25kYXRhIGFnYWluLiBIb3dldmVyLCB3ZSBvbmx5IHdhbnQgdG8gaW5jcmVhc2UgYXdhaXREcmFpbiBvbmNlIGJlY2F1c2VcbiAgLy8gZGVzdCB3aWxsIG9ubHkgZW1pdCBvbmUgJ2RyYWluJyBldmVudCBmb3IgdGhlIG11bHRpcGxlIHdyaXRlcy5cbiAgLy8gPT4gSW50cm9kdWNlIGEgZ3VhcmQgb24gaW5jcmVhc2luZyBhd2FpdERyYWluLlxuICB2YXIgaW5jcmVhc2VkQXdhaXREcmFpbiA9IGZhbHNlO1xuICBzcmMub24oJ2RhdGEnLCBvbmRhdGEpO1xuICBmdW5jdGlvbiBvbmRhdGEoY2h1bmspIHtcbiAgICBkZWJ1Zygnb25kYXRhJyk7XG4gICAgaW5jcmVhc2VkQXdhaXREcmFpbiA9IGZhbHNlO1xuICAgIHZhciByZXQgPSBkZXN0LndyaXRlKGNodW5rKTtcbiAgICBpZiAoZmFsc2UgPT09IHJldCAmJiAhaW5jcmVhc2VkQXdhaXREcmFpbikge1xuICAgICAgLy8gSWYgdGhlIHVzZXIgdW5waXBlZCBkdXJpbmcgYGRlc3Qud3JpdGUoKWAsIGl0IGlzIHBvc3NpYmxlXG4gICAgICAvLyB0byBnZXQgc3R1Y2sgaW4gYSBwZXJtYW5lbnRseSBwYXVzZWQgc3RhdGUgaWYgdGhhdCB3cml0ZVxuICAgICAgLy8gYWxzbyByZXR1cm5lZCBmYWxzZS5cbiAgICAgIC8vID0+IENoZWNrIHdoZXRoZXIgYGRlc3RgIGlzIHN0aWxsIGEgcGlwaW5nIGRlc3RpbmF0aW9uLlxuICAgICAgaWYgKChzdGF0ZS5waXBlc0NvdW50ID09PSAxICYmIHN0YXRlLnBpcGVzID09PSBkZXN0IHx8IHN0YXRlLnBpcGVzQ291bnQgPiAxICYmIGluZGV4T2Yoc3RhdGUucGlwZXMsIGRlc3QpICE9PSAtMSkgJiYgIWNsZWFuZWRVcCkge1xuICAgICAgICBkZWJ1ZygnZmFsc2Ugd3JpdGUgcmVzcG9uc2UsIHBhdXNlJywgc3RhdGUuYXdhaXREcmFpbik7XG4gICAgICAgIHN0YXRlLmF3YWl0RHJhaW4rKztcbiAgICAgICAgaW5jcmVhc2VkQXdhaXREcmFpbiA9IHRydWU7XG4gICAgICB9XG4gICAgICBzcmMucGF1c2UoKTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgZGVzdCBoYXMgYW4gZXJyb3IsIHRoZW4gc3RvcCBwaXBpbmcgaW50byBpdC5cbiAgLy8gaG93ZXZlciwgZG9uJ3Qgc3VwcHJlc3MgdGhlIHRocm93aW5nIGJlaGF2aW9yIGZvciB0aGlzLlxuICBmdW5jdGlvbiBvbmVycm9yKGVyKSB7XG4gICAgZGVidWcoJ29uZXJyb3InLCBlcik7XG4gICAgdW5waXBlKCk7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbmVycm9yKTtcbiAgICBpZiAoRUVsaXN0ZW5lckNvdW50KGRlc3QsICdlcnJvcicpID09PSAwKSBkZXN0LmVtaXQoJ2Vycm9yJywgZXIpO1xuICB9XG5cbiAgLy8gTWFrZSBzdXJlIG91ciBlcnJvciBoYW5kbGVyIGlzIGF0dGFjaGVkIGJlZm9yZSB1c2VybGFuZCBvbmVzLlxuICBwcmVwZW5kTGlzdGVuZXIoZGVzdCwgJ2Vycm9yJywgb25lcnJvcik7XG5cbiAgLy8gQm90aCBjbG9zZSBhbmQgZmluaXNoIHNob3VsZCB0cmlnZ2VyIHVucGlwZSwgYnV0IG9ubHkgb25jZS5cbiAgZnVuY3Rpb24gb25jbG9zZSgpIHtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdmaW5pc2gnLCBvbmZpbmlzaCk7XG4gICAgdW5waXBlKCk7XG4gIH1cbiAgZGVzdC5vbmNlKCdjbG9zZScsIG9uY2xvc2UpO1xuICBmdW5jdGlvbiBvbmZpbmlzaCgpIHtcbiAgICBkZWJ1Zygnb25maW5pc2gnKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uY2xvc2UpO1xuICAgIHVucGlwZSgpO1xuICB9XG4gIGRlc3Qub25jZSgnZmluaXNoJywgb25maW5pc2gpO1xuXG4gIGZ1bmN0aW9uIHVucGlwZSgpIHtcbiAgICBkZWJ1ZygndW5waXBlJyk7XG4gICAgc3JjLnVucGlwZShkZXN0KTtcbiAgfVxuXG4gIC8vIHRlbGwgdGhlIGRlc3QgdGhhdCBpdCdzIGJlaW5nIHBpcGVkIHRvXG4gIGRlc3QuZW1pdCgncGlwZScsIHNyYyk7XG5cbiAgLy8gc3RhcnQgdGhlIGZsb3cgaWYgaXQgaGFzbid0IGJlZW4gc3RhcnRlZCBhbHJlYWR5LlxuICBpZiAoIXN0YXRlLmZsb3dpbmcpIHtcbiAgICBkZWJ1ZygncGlwZSByZXN1bWUnKTtcbiAgICBzcmMucmVzdW1lKCk7XG4gIH1cblxuICByZXR1cm4gZGVzdDtcbn07XG5cbmZ1bmN0aW9uIHBpcGVPbkRyYWluKHNyYykge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzdGF0ZSA9IHNyYy5fcmVhZGFibGVTdGF0ZTtcbiAgICBkZWJ1ZygncGlwZU9uRHJhaW4nLCBzdGF0ZS5hd2FpdERyYWluKTtcbiAgICBpZiAoc3RhdGUuYXdhaXREcmFpbikgc3RhdGUuYXdhaXREcmFpbi0tO1xuICAgIGlmIChzdGF0ZS5hd2FpdERyYWluID09PSAwICYmIEVFbGlzdGVuZXJDb3VudChzcmMsICdkYXRhJykpIHtcbiAgICAgIHN0YXRlLmZsb3dpbmcgPSB0cnVlO1xuICAgICAgZmxvdyhzcmMpO1xuICAgIH1cbiAgfTtcbn1cblxuUmVhZGFibGUucHJvdG90eXBlLnVucGlwZSA9IGZ1bmN0aW9uIChkZXN0KSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gIHZhciB1bnBpcGVJbmZvID0geyBoYXNVbnBpcGVkOiBmYWxzZSB9O1xuXG4gIC8vIGlmIHdlJ3JlIG5vdCBwaXBpbmcgYW55d2hlcmUsIHRoZW4gZG8gbm90aGluZy5cbiAgaWYgKHN0YXRlLnBpcGVzQ291bnQgPT09IDApIHJldHVybiB0aGlzO1xuXG4gIC8vIGp1c3Qgb25lIGRlc3RpbmF0aW9uLiAgbW9zdCBjb21tb24gY2FzZS5cbiAgaWYgKHN0YXRlLnBpcGVzQ291bnQgPT09IDEpIHtcbiAgICAvLyBwYXNzZWQgaW4gb25lLCBidXQgaXQncyBub3QgdGhlIHJpZ2h0IG9uZS5cbiAgICBpZiAoZGVzdCAmJiBkZXN0ICE9PSBzdGF0ZS5waXBlcykgcmV0dXJuIHRoaXM7XG5cbiAgICBpZiAoIWRlc3QpIGRlc3QgPSBzdGF0ZS5waXBlcztcblxuICAgIC8vIGdvdCBhIG1hdGNoLlxuICAgIHN0YXRlLnBpcGVzID0gbnVsbDtcbiAgICBzdGF0ZS5waXBlc0NvdW50ID0gMDtcbiAgICBzdGF0ZS5mbG93aW5nID0gZmFsc2U7XG4gICAgaWYgKGRlc3QpIGRlc3QuZW1pdCgndW5waXBlJywgdGhpcywgdW5waXBlSW5mbyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBzbG93IGNhc2UuIG11bHRpcGxlIHBpcGUgZGVzdGluYXRpb25zLlxuXG4gIGlmICghZGVzdCkge1xuICAgIC8vIHJlbW92ZSBhbGwuXG4gICAgdmFyIGRlc3RzID0gc3RhdGUucGlwZXM7XG4gICAgdmFyIGxlbiA9IHN0YXRlLnBpcGVzQ291bnQ7XG4gICAgc3RhdGUucGlwZXMgPSBudWxsO1xuICAgIHN0YXRlLnBpcGVzQ291bnQgPSAwO1xuICAgIHN0YXRlLmZsb3dpbmcgPSBmYWxzZTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGRlc3RzW2ldLmVtaXQoJ3VucGlwZScsIHRoaXMsIHsgaGFzVW5waXBlZDogZmFsc2UgfSk7XG4gICAgfXJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gdHJ5IHRvIGZpbmQgdGhlIHJpZ2h0IG9uZS5cbiAgdmFyIGluZGV4ID0gaW5kZXhPZihzdGF0ZS5waXBlcywgZGVzdCk7XG4gIGlmIChpbmRleCA9PT0gLTEpIHJldHVybiB0aGlzO1xuXG4gIHN0YXRlLnBpcGVzLnNwbGljZShpbmRleCwgMSk7XG4gIHN0YXRlLnBpcGVzQ291bnQgLT0gMTtcbiAgaWYgKHN0YXRlLnBpcGVzQ291bnQgPT09IDEpIHN0YXRlLnBpcGVzID0gc3RhdGUucGlwZXNbMF07XG5cbiAgZGVzdC5lbWl0KCd1bnBpcGUnLCB0aGlzLCB1bnBpcGVJbmZvKTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8vIHNldCB1cCBkYXRhIGV2ZW50cyBpZiB0aGV5IGFyZSBhc2tlZCBmb3Jcbi8vIEVuc3VyZSByZWFkYWJsZSBsaXN0ZW5lcnMgZXZlbnR1YWxseSBnZXQgc29tZXRoaW5nXG5SZWFkYWJsZS5wcm90b3R5cGUub24gPSBmdW5jdGlvbiAoZXYsIGZuKSB7XG4gIHZhciByZXMgPSBTdHJlYW0ucHJvdG90eXBlLm9uLmNhbGwodGhpcywgZXYsIGZuKTtcblxuICBpZiAoZXYgPT09ICdkYXRhJykge1xuICAgIC8vIFN0YXJ0IGZsb3dpbmcgb24gbmV4dCB0aWNrIGlmIHN0cmVhbSBpc24ndCBleHBsaWNpdGx5IHBhdXNlZFxuICAgIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcgIT09IGZhbHNlKSB0aGlzLnJlc3VtZSgpO1xuICB9IGVsc2UgaWYgKGV2ID09PSAncmVhZGFibGUnKSB7XG4gICAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgICBpZiAoIXN0YXRlLmVuZEVtaXR0ZWQgJiYgIXN0YXRlLnJlYWRhYmxlTGlzdGVuaW5nKSB7XG4gICAgICBzdGF0ZS5yZWFkYWJsZUxpc3RlbmluZyA9IHN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWU7XG4gICAgICBzdGF0ZS5lbWl0dGVkUmVhZGFibGUgPSBmYWxzZTtcbiAgICAgIGlmICghc3RhdGUucmVhZGluZykge1xuICAgICAgICBwbmEubmV4dFRpY2soblJlYWRpbmdOZXh0VGljaywgdGhpcyk7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlLmxlbmd0aCkge1xuICAgICAgICBlbWl0UmVhZGFibGUodGhpcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlcztcbn07XG5SZWFkYWJsZS5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBSZWFkYWJsZS5wcm90b3R5cGUub247XG5cbmZ1bmN0aW9uIG5SZWFkaW5nTmV4dFRpY2soc2VsZikge1xuICBkZWJ1ZygncmVhZGFibGUgbmV4dHRpY2sgcmVhZCAwJyk7XG4gIHNlbGYucmVhZCgwKTtcbn1cblxuLy8gcGF1c2UoKSBhbmQgcmVzdW1lKCkgYXJlIHJlbW5hbnRzIG9mIHRoZSBsZWdhY3kgcmVhZGFibGUgc3RyZWFtIEFQSVxuLy8gSWYgdGhlIHVzZXIgdXNlcyB0aGVtLCB0aGVuIHN3aXRjaCBpbnRvIG9sZCBtb2RlLlxuUmVhZGFibGUucHJvdG90eXBlLnJlc3VtZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgaWYgKCFzdGF0ZS5mbG93aW5nKSB7XG4gICAgZGVidWcoJ3Jlc3VtZScpO1xuICAgIHN0YXRlLmZsb3dpbmcgPSB0cnVlO1xuICAgIHJlc3VtZSh0aGlzLCBzdGF0ZSk7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5mdW5jdGlvbiByZXN1bWUoc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoIXN0YXRlLnJlc3VtZVNjaGVkdWxlZCkge1xuICAgIHN0YXRlLnJlc3VtZVNjaGVkdWxlZCA9IHRydWU7XG4gICAgcG5hLm5leHRUaWNrKHJlc3VtZV8sIHN0cmVhbSwgc3RhdGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc3VtZV8oc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoIXN0YXRlLnJlYWRpbmcpIHtcbiAgICBkZWJ1ZygncmVzdW1lIHJlYWQgMCcpO1xuICAgIHN0cmVhbS5yZWFkKDApO1xuICB9XG5cbiAgc3RhdGUucmVzdW1lU2NoZWR1bGVkID0gZmFsc2U7XG4gIHN0YXRlLmF3YWl0RHJhaW4gPSAwO1xuICBzdHJlYW0uZW1pdCgncmVzdW1lJyk7XG4gIGZsb3coc3RyZWFtKTtcbiAgaWYgKHN0YXRlLmZsb3dpbmcgJiYgIXN0YXRlLnJlYWRpbmcpIHN0cmVhbS5yZWFkKDApO1xufVxuXG5SZWFkYWJsZS5wcm90b3R5cGUucGF1c2UgPSBmdW5jdGlvbiAoKSB7XG4gIGRlYnVnKCdjYWxsIHBhdXNlIGZsb3dpbmc9JWonLCB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcpO1xuICBpZiAoZmFsc2UgIT09IHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZykge1xuICAgIGRlYnVnKCdwYXVzZScpO1xuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyA9IGZhbHNlO1xuICAgIHRoaXMuZW1pdCgncGF1c2UnKTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn07XG5cbmZ1bmN0aW9uIGZsb3coc3RyZWFtKSB7XG4gIHZhciBzdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZTtcbiAgZGVidWcoJ2Zsb3cnLCBzdGF0ZS5mbG93aW5nKTtcbiAgd2hpbGUgKHN0YXRlLmZsb3dpbmcgJiYgc3RyZWFtLnJlYWQoKSAhPT0gbnVsbCkge31cbn1cblxuLy8gd3JhcCBhbiBvbGQtc3R5bGUgc3RyZWFtIGFzIHRoZSBhc3luYyBkYXRhIHNvdXJjZS5cbi8vIFRoaXMgaXMgKm5vdCogcGFydCBvZiB0aGUgcmVhZGFibGUgc3RyZWFtIGludGVyZmFjZS5cbi8vIEl0IGlzIGFuIHVnbHkgdW5mb3J0dW5hdGUgbWVzcyBvZiBoaXN0b3J5LlxuUmVhZGFibGUucHJvdG90eXBlLndyYXAgPSBmdW5jdGlvbiAoc3RyZWFtKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgdmFyIHBhdXNlZCA9IGZhbHNlO1xuXG4gIHN0cmVhbS5vbignZW5kJywgZnVuY3Rpb24gKCkge1xuICAgIGRlYnVnKCd3cmFwcGVkIGVuZCcpO1xuICAgIGlmIChzdGF0ZS5kZWNvZGVyICYmICFzdGF0ZS5lbmRlZCkge1xuICAgICAgdmFyIGNodW5rID0gc3RhdGUuZGVjb2Rlci5lbmQoKTtcbiAgICAgIGlmIChjaHVuayAmJiBjaHVuay5sZW5ndGgpIF90aGlzLnB1c2goY2h1bmspO1xuICAgIH1cblxuICAgIF90aGlzLnB1c2gobnVsbCk7XG4gIH0pO1xuXG4gIHN0cmVhbS5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykge1xuICAgIGRlYnVnKCd3cmFwcGVkIGRhdGEnKTtcbiAgICBpZiAoc3RhdGUuZGVjb2RlcikgY2h1bmsgPSBzdGF0ZS5kZWNvZGVyLndyaXRlKGNodW5rKTtcblxuICAgIC8vIGRvbid0IHNraXAgb3ZlciBmYWxzeSB2YWx1ZXMgaW4gb2JqZWN0TW9kZVxuICAgIGlmIChzdGF0ZS5vYmplY3RNb2RlICYmIChjaHVuayA9PT0gbnVsbCB8fCBjaHVuayA9PT0gdW5kZWZpbmVkKSkgcmV0dXJuO2Vsc2UgaWYgKCFzdGF0ZS5vYmplY3RNb2RlICYmICghY2h1bmsgfHwgIWNodW5rLmxlbmd0aCkpIHJldHVybjtcblxuICAgIHZhciByZXQgPSBfdGhpcy5wdXNoKGNodW5rKTtcbiAgICBpZiAoIXJldCkge1xuICAgICAgcGF1c2VkID0gdHJ1ZTtcbiAgICAgIHN0cmVhbS5wYXVzZSgpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gcHJveHkgYWxsIHRoZSBvdGhlciBtZXRob2RzLlxuICAvLyBpbXBvcnRhbnQgd2hlbiB3cmFwcGluZyBmaWx0ZXJzIGFuZCBkdXBsZXhlcy5cbiAgZm9yICh2YXIgaSBpbiBzdHJlYW0pIHtcbiAgICBpZiAodGhpc1tpXSA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiBzdHJlYW1baV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXNbaV0gPSBmdW5jdGlvbiAobWV0aG9kKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHN0cmVhbVttZXRob2RdLmFwcGx5KHN0cmVhbSwgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcbiAgICAgIH0oaSk7XG4gICAgfVxuICB9XG5cbiAgLy8gcHJveHkgY2VydGFpbiBpbXBvcnRhbnQgZXZlbnRzLlxuICBmb3IgKHZhciBuID0gMDsgbiA8IGtQcm94eUV2ZW50cy5sZW5ndGg7IG4rKykge1xuICAgIHN0cmVhbS5vbihrUHJveHlFdmVudHNbbl0sIHRoaXMuZW1pdC5iaW5kKHRoaXMsIGtQcm94eUV2ZW50c1tuXSkpO1xuICB9XG5cbiAgLy8gd2hlbiB3ZSB0cnkgdG8gY29uc3VtZSBzb21lIG1vcmUgYnl0ZXMsIHNpbXBseSB1bnBhdXNlIHRoZVxuICAvLyB1bmRlcmx5aW5nIHN0cmVhbS5cbiAgdGhpcy5fcmVhZCA9IGZ1bmN0aW9uIChuKSB7XG4gICAgZGVidWcoJ3dyYXBwZWQgX3JlYWQnLCBuKTtcbiAgICBpZiAocGF1c2VkKSB7XG4gICAgICBwYXVzZWQgPSBmYWxzZTtcbiAgICAgIHN0cmVhbS5yZXN1bWUoKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoUmVhZGFibGUucHJvdG90eXBlLCAncmVhZGFibGVIaWdoV2F0ZXJNYXJrJywge1xuICAvLyBtYWtpbmcgaXQgZXhwbGljaXQgdGhpcyBwcm9wZXJ0eSBpcyBub3QgZW51bWVyYWJsZVxuICAvLyBiZWNhdXNlIG90aGVyd2lzZSBzb21lIHByb3RvdHlwZSBtYW5pcHVsYXRpb24gaW5cbiAgLy8gdXNlcmxhbmQgd2lsbCBmYWlsXG4gIGVudW1lcmFibGU6IGZhbHNlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrO1xuICB9XG59KTtcblxuLy8gZXhwb3NlZCBmb3IgdGVzdGluZyBwdXJwb3NlcyBvbmx5LlxuUmVhZGFibGUuX2Zyb21MaXN0ID0gZnJvbUxpc3Q7XG5cbi8vIFBsdWNrIG9mZiBuIGJ5dGVzIGZyb20gYW4gYXJyYXkgb2YgYnVmZmVycy5cbi8vIExlbmd0aCBpcyB0aGUgY29tYmluZWQgbGVuZ3RocyBvZiBhbGwgdGhlIGJ1ZmZlcnMgaW4gdGhlIGxpc3QuXG4vLyBUaGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGJlIGlubGluYWJsZSwgc28gcGxlYXNlIHRha2UgY2FyZSB3aGVuIG1ha2luZ1xuLy8gY2hhbmdlcyB0byB0aGUgZnVuY3Rpb24gYm9keS5cbmZ1bmN0aW9uIGZyb21MaXN0KG4sIHN0YXRlKSB7XG4gIC8vIG5vdGhpbmcgYnVmZmVyZWRcbiAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG5cbiAgdmFyIHJldDtcbiAgaWYgKHN0YXRlLm9iamVjdE1vZGUpIHJldCA9IHN0YXRlLmJ1ZmZlci5zaGlmdCgpO2Vsc2UgaWYgKCFuIHx8IG4gPj0gc3RhdGUubGVuZ3RoKSB7XG4gICAgLy8gcmVhZCBpdCBhbGwsIHRydW5jYXRlIHRoZSBsaXN0XG4gICAgaWYgKHN0YXRlLmRlY29kZXIpIHJldCA9IHN0YXRlLmJ1ZmZlci5qb2luKCcnKTtlbHNlIGlmIChzdGF0ZS5idWZmZXIubGVuZ3RoID09PSAxKSByZXQgPSBzdGF0ZS5idWZmZXIuaGVhZC5kYXRhO2Vsc2UgcmV0ID0gc3RhdGUuYnVmZmVyLmNvbmNhdChzdGF0ZS5sZW5ndGgpO1xuICAgIHN0YXRlLmJ1ZmZlci5jbGVhcigpO1xuICB9IGVsc2Uge1xuICAgIC8vIHJlYWQgcGFydCBvZiBsaXN0XG4gICAgcmV0ID0gZnJvbUxpc3RQYXJ0aWFsKG4sIHN0YXRlLmJ1ZmZlciwgc3RhdGUuZGVjb2Rlcik7XG4gIH1cblxuICByZXR1cm4gcmV0O1xufVxuXG4vLyBFeHRyYWN0cyBvbmx5IGVub3VnaCBidWZmZXJlZCBkYXRhIHRvIHNhdGlzZnkgdGhlIGFtb3VudCByZXF1ZXN0ZWQuXG4vLyBUaGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGJlIGlubGluYWJsZSwgc28gcGxlYXNlIHRha2UgY2FyZSB3aGVuIG1ha2luZ1xuLy8gY2hhbmdlcyB0byB0aGUgZnVuY3Rpb24gYm9keS5cbmZ1bmN0aW9uIGZyb21MaXN0UGFydGlhbChuLCBsaXN0LCBoYXNTdHJpbmdzKSB7XG4gIHZhciByZXQ7XG4gIGlmIChuIDwgbGlzdC5oZWFkLmRhdGEubGVuZ3RoKSB7XG4gICAgLy8gc2xpY2UgaXMgdGhlIHNhbWUgZm9yIGJ1ZmZlcnMgYW5kIHN0cmluZ3NcbiAgICByZXQgPSBsaXN0LmhlYWQuZGF0YS5zbGljZSgwLCBuKTtcbiAgICBsaXN0LmhlYWQuZGF0YSA9IGxpc3QuaGVhZC5kYXRhLnNsaWNlKG4pO1xuICB9IGVsc2UgaWYgKG4gPT09IGxpc3QuaGVhZC5kYXRhLmxlbmd0aCkge1xuICAgIC8vIGZpcnN0IGNodW5rIGlzIGEgcGVyZmVjdCBtYXRjaFxuICAgIHJldCA9IGxpc3Quc2hpZnQoKTtcbiAgfSBlbHNlIHtcbiAgICAvLyByZXN1bHQgc3BhbnMgbW9yZSB0aGFuIG9uZSBidWZmZXJcbiAgICByZXQgPSBoYXNTdHJpbmdzID8gY29weUZyb21CdWZmZXJTdHJpbmcobiwgbGlzdCkgOiBjb3B5RnJvbUJ1ZmZlcihuLCBsaXN0KTtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG4vLyBDb3BpZXMgYSBzcGVjaWZpZWQgYW1vdW50IG9mIGNoYXJhY3RlcnMgZnJvbSB0aGUgbGlzdCBvZiBidWZmZXJlZCBkYXRhXG4vLyBjaHVua3MuXG4vLyBUaGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGJlIGlubGluYWJsZSwgc28gcGxlYXNlIHRha2UgY2FyZSB3aGVuIG1ha2luZ1xuLy8gY2hhbmdlcyB0byB0aGUgZnVuY3Rpb24gYm9keS5cbmZ1bmN0aW9uIGNvcHlGcm9tQnVmZmVyU3RyaW5nKG4sIGxpc3QpIHtcbiAgdmFyIHAgPSBsaXN0LmhlYWQ7XG4gIHZhciBjID0gMTtcbiAgdmFyIHJldCA9IHAuZGF0YTtcbiAgbiAtPSByZXQubGVuZ3RoO1xuICB3aGlsZSAocCA9IHAubmV4dCkge1xuICAgIHZhciBzdHIgPSBwLmRhdGE7XG4gICAgdmFyIG5iID0gbiA+IHN0ci5sZW5ndGggPyBzdHIubGVuZ3RoIDogbjtcbiAgICBpZiAobmIgPT09IHN0ci5sZW5ndGgpIHJldCArPSBzdHI7ZWxzZSByZXQgKz0gc3RyLnNsaWNlKDAsIG4pO1xuICAgIG4gLT0gbmI7XG4gICAgaWYgKG4gPT09IDApIHtcbiAgICAgIGlmIChuYiA9PT0gc3RyLmxlbmd0aCkge1xuICAgICAgICArK2M7XG4gICAgICAgIGlmIChwLm5leHQpIGxpc3QuaGVhZCA9IHAubmV4dDtlbHNlIGxpc3QuaGVhZCA9IGxpc3QudGFpbCA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsaXN0LmhlYWQgPSBwO1xuICAgICAgICBwLmRhdGEgPSBzdHIuc2xpY2UobmIpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICAgICsrYztcbiAgfVxuICBsaXN0Lmxlbmd0aCAtPSBjO1xuICByZXR1cm4gcmV0O1xufVxuXG4vLyBDb3BpZXMgYSBzcGVjaWZpZWQgYW1vdW50IG9mIGJ5dGVzIGZyb20gdGhlIGxpc3Qgb2YgYnVmZmVyZWQgZGF0YSBjaHVua3MuXG4vLyBUaGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGJlIGlubGluYWJsZSwgc28gcGxlYXNlIHRha2UgY2FyZSB3aGVuIG1ha2luZ1xuLy8gY2hhbmdlcyB0byB0aGUgZnVuY3Rpb24gYm9keS5cbmZ1bmN0aW9uIGNvcHlGcm9tQnVmZmVyKG4sIGxpc3QpIHtcbiAgdmFyIHJldCA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShuKTtcbiAgdmFyIHAgPSBsaXN0LmhlYWQ7XG4gIHZhciBjID0gMTtcbiAgcC5kYXRhLmNvcHkocmV0KTtcbiAgbiAtPSBwLmRhdGEubGVuZ3RoO1xuICB3aGlsZSAocCA9IHAubmV4dCkge1xuICAgIHZhciBidWYgPSBwLmRhdGE7XG4gICAgdmFyIG5iID0gbiA+IGJ1Zi5sZW5ndGggPyBidWYubGVuZ3RoIDogbjtcbiAgICBidWYuY29weShyZXQsIHJldC5sZW5ndGggLSBuLCAwLCBuYik7XG4gICAgbiAtPSBuYjtcbiAgICBpZiAobiA9PT0gMCkge1xuICAgICAgaWYgKG5iID09PSBidWYubGVuZ3RoKSB7XG4gICAgICAgICsrYztcbiAgICAgICAgaWYgKHAubmV4dCkgbGlzdC5oZWFkID0gcC5uZXh0O2Vsc2UgbGlzdC5oZWFkID0gbGlzdC50YWlsID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxpc3QuaGVhZCA9IHA7XG4gICAgICAgIHAuZGF0YSA9IGJ1Zi5zbGljZShuYik7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgKytjO1xuICB9XG4gIGxpc3QubGVuZ3RoIC09IGM7XG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIGVuZFJlYWRhYmxlKHN0cmVhbSkge1xuICB2YXIgc3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGU7XG5cbiAgLy8gSWYgd2UgZ2V0IGhlcmUgYmVmb3JlIGNvbnN1bWluZyBhbGwgdGhlIGJ5dGVzLCB0aGVuIHRoYXQgaXMgYVxuICAvLyBidWcgaW4gbm9kZS4gIFNob3VsZCBuZXZlciBoYXBwZW4uXG4gIGlmIChzdGF0ZS5sZW5ndGggPiAwKSB0aHJvdyBuZXcgRXJyb3IoJ1wiZW5kUmVhZGFibGUoKVwiIGNhbGxlZCBvbiBub24tZW1wdHkgc3RyZWFtJyk7XG5cbiAgaWYgKCFzdGF0ZS5lbmRFbWl0dGVkKSB7XG4gICAgc3RhdGUuZW5kZWQgPSB0cnVlO1xuICAgIHBuYS5uZXh0VGljayhlbmRSZWFkYWJsZU5ULCBzdGF0ZSwgc3RyZWFtKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBlbmRSZWFkYWJsZU5UKHN0YXRlLCBzdHJlYW0pIHtcbiAgLy8gQ2hlY2sgdGhhdCB3ZSBkaWRuJ3QgZ2V0IG9uZSBsYXN0IHVuc2hpZnQuXG4gIGlmICghc3RhdGUuZW5kRW1pdHRlZCAmJiBzdGF0ZS5sZW5ndGggPT09IDApIHtcbiAgICBzdGF0ZS5lbmRFbWl0dGVkID0gdHJ1ZTtcbiAgICBzdHJlYW0ucmVhZGFibGUgPSBmYWxzZTtcbiAgICBzdHJlYW0uZW1pdCgnZW5kJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5kZXhPZih4cywgeCkge1xuICBmb3IgKHZhciBpID0gMCwgbCA9IHhzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGlmICh4c1tpXSA9PT0geCkgcmV0dXJuIGk7XG4gIH1cbiAgcmV0dXJuIC0xO1xufSIsCiAgICAiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbi8vIGEgdHJhbnNmb3JtIHN0cmVhbSBpcyBhIHJlYWRhYmxlL3dyaXRhYmxlIHN0cmVhbSB3aGVyZSB5b3UgZG9cbi8vIHNvbWV0aGluZyB3aXRoIHRoZSBkYXRhLiAgU29tZXRpbWVzIGl0J3MgY2FsbGVkIGEgXCJmaWx0ZXJcIixcbi8vIGJ1dCB0aGF0J3Mgbm90IGEgZ3JlYXQgbmFtZSBmb3IgaXQsIHNpbmNlIHRoYXQgaW1wbGllcyBhIHRoaW5nIHdoZXJlXG4vLyBzb21lIGJpdHMgcGFzcyB0aHJvdWdoLCBhbmQgb3RoZXJzIGFyZSBzaW1wbHkgaWdub3JlZC4gIChUaGF0IHdvdWxkXG4vLyBiZSBhIHZhbGlkIGV4YW1wbGUgb2YgYSB0cmFuc2Zvcm0sIG9mIGNvdXJzZS4pXG4vL1xuLy8gV2hpbGUgdGhlIG91dHB1dCBpcyBjYXVzYWxseSByZWxhdGVkIHRvIHRoZSBpbnB1dCwgaXQncyBub3QgYVxuLy8gbmVjZXNzYXJpbHkgc3ltbWV0cmljIG9yIHN5bmNocm9ub3VzIHRyYW5zZm9ybWF0aW9uLiAgRm9yIGV4YW1wbGUsXG4vLyBhIHpsaWIgc3RyZWFtIG1pZ2h0IHRha2UgbXVsdGlwbGUgcGxhaW4tdGV4dCB3cml0ZXMoKSwgYW5kIHRoZW5cbi8vIGVtaXQgYSBzaW5nbGUgY29tcHJlc3NlZCBjaHVuayBzb21lIHRpbWUgaW4gdGhlIGZ1dHVyZS5cbi8vXG4vLyBIZXJlJ3MgaG93IHRoaXMgd29ya3M6XG4vL1xuLy8gVGhlIFRyYW5zZm9ybSBzdHJlYW0gaGFzIGFsbCB0aGUgYXNwZWN0cyBvZiB0aGUgcmVhZGFibGUgYW5kIHdyaXRhYmxlXG4vLyBzdHJlYW0gY2xhc3Nlcy4gIFdoZW4geW91IHdyaXRlKGNodW5rKSwgdGhhdCBjYWxscyBfd3JpdGUoY2h1bmssY2IpXG4vLyBpbnRlcm5hbGx5LCBhbmQgcmV0dXJucyBmYWxzZSBpZiB0aGVyZSdzIGEgbG90IG9mIHBlbmRpbmcgd3JpdGVzXG4vLyBidWZmZXJlZCB1cC4gIFdoZW4geW91IGNhbGwgcmVhZCgpLCB0aGF0IGNhbGxzIF9yZWFkKG4pIHVudGlsXG4vLyB0aGVyZSdzIGVub3VnaCBwZW5kaW5nIHJlYWRhYmxlIGRhdGEgYnVmZmVyZWQgdXAuXG4vL1xuLy8gSW4gYSB0cmFuc2Zvcm0gc3RyZWFtLCB0aGUgd3JpdHRlbiBkYXRhIGlzIHBsYWNlZCBpbiBhIGJ1ZmZlci4gIFdoZW5cbi8vIF9yZWFkKG4pIGlzIGNhbGxlZCwgaXQgdHJhbnNmb3JtcyB0aGUgcXVldWVkIHVwIGRhdGEsIGNhbGxpbmcgdGhlXG4vLyBidWZmZXJlZCBfd3JpdGUgY2IncyBhcyBpdCBjb25zdW1lcyBjaHVua3MuICBJZiBjb25zdW1pbmcgYSBzaW5nbGVcbi8vIHdyaXR0ZW4gY2h1bmsgd291bGQgcmVzdWx0IGluIG11bHRpcGxlIG91dHB1dCBjaHVua3MsIHRoZW4gdGhlIGZpcnN0XG4vLyBvdXRwdXR0ZWQgYml0IGNhbGxzIHRoZSByZWFkY2IsIGFuZCBzdWJzZXF1ZW50IGNodW5rcyBqdXN0IGdvIGludG9cbi8vIHRoZSByZWFkIGJ1ZmZlciwgYW5kIHdpbGwgY2F1c2UgaXQgdG8gZW1pdCAncmVhZGFibGUnIGlmIG5lY2Vzc2FyeS5cbi8vXG4vLyBUaGlzIHdheSwgYmFjay1wcmVzc3VyZSBpcyBhY3R1YWxseSBkZXRlcm1pbmVkIGJ5IHRoZSByZWFkaW5nIHNpZGUsXG4vLyBzaW5jZSBfcmVhZCBoYXMgdG8gYmUgY2FsbGVkIHRvIHN0YXJ0IHByb2Nlc3NpbmcgYSBuZXcgY2h1bmsuICBIb3dldmVyLFxuLy8gYSBwYXRob2xvZ2ljYWwgaW5mbGF0ZSB0eXBlIG9mIHRyYW5zZm9ybSBjYW4gY2F1c2UgZXhjZXNzaXZlIGJ1ZmZlcmluZ1xuLy8gaGVyZS4gIEZvciBleGFtcGxlLCBpbWFnaW5lIGEgc3RyZWFtIHdoZXJlIGV2ZXJ5IGJ5dGUgb2YgaW5wdXQgaXNcbi8vIGludGVycHJldGVkIGFzIGFuIGludGVnZXIgZnJvbSAwLTI1NSwgYW5kIHRoZW4gcmVzdWx0cyBpbiB0aGF0IG1hbnlcbi8vIGJ5dGVzIG9mIG91dHB1dC4gIFdyaXRpbmcgdGhlIDQgYnl0ZXMge2ZmLGZmLGZmLGZmfSB3b3VsZCByZXN1bHQgaW5cbi8vIDFrYiBvZiBkYXRhIGJlaW5nIG91dHB1dC4gIEluIHRoaXMgY2FzZSwgeW91IGNvdWxkIHdyaXRlIGEgdmVyeSBzbWFsbFxuLy8gYW1vdW50IG9mIGlucHV0LCBhbmQgZW5kIHVwIHdpdGggYSB2ZXJ5IGxhcmdlIGFtb3VudCBvZiBvdXRwdXQuICBJblxuLy8gc3VjaCBhIHBhdGhvbG9naWNhbCBpbmZsYXRpbmcgbWVjaGFuaXNtLCB0aGVyZSdkIGJlIG5vIHdheSB0byB0ZWxsXG4vLyB0aGUgc3lzdGVtIHRvIHN0b3AgZG9pbmcgdGhlIHRyYW5zZm9ybS4gIEEgc2luZ2xlIDRNQiB3cml0ZSBjb3VsZFxuLy8gY2F1c2UgdGhlIHN5c3RlbSB0byBydW4gb3V0IG9mIG1lbW9yeS5cbi8vXG4vLyBIb3dldmVyLCBldmVuIGluIHN1Y2ggYSBwYXRob2xvZ2ljYWwgY2FzZSwgb25seSBhIHNpbmdsZSB3cml0dGVuIGNodW5rXG4vLyB3b3VsZCBiZSBjb25zdW1lZCwgYW5kIHRoZW4gdGhlIHJlc3Qgd291bGQgd2FpdCAodW4tdHJhbnNmb3JtZWQpIHVudGlsXG4vLyB0aGUgcmVzdWx0cyBvZiB0aGUgcHJldmlvdXMgdHJhbnNmb3JtZWQgY2h1bmsgd2VyZSBjb25zdW1lZC5cblxuJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFRyYW5zZm9ybTtcblxudmFyIER1cGxleCA9IHJlcXVpcmUoJy4vX3N0cmVhbV9kdXBsZXgnKTtcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciB1dGlsID0gT2JqZWN0LmNyZWF0ZShyZXF1aXJlKCdjb3JlLXV0aWwtaXMnKSk7XG51dGlsLmluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG51dGlsLmluaGVyaXRzKFRyYW5zZm9ybSwgRHVwbGV4KTtcblxuZnVuY3Rpb24gYWZ0ZXJUcmFuc2Zvcm0oZXIsIGRhdGEpIHtcbiAgdmFyIHRzID0gdGhpcy5fdHJhbnNmb3JtU3RhdGU7XG4gIHRzLnRyYW5zZm9ybWluZyA9IGZhbHNlO1xuXG4gIHZhciBjYiA9IHRzLndyaXRlY2I7XG5cbiAgaWYgKCFjYikge1xuICAgIHJldHVybiB0aGlzLmVtaXQoJ2Vycm9yJywgbmV3IEVycm9yKCd3cml0ZSBjYWxsYmFjayBjYWxsZWQgbXVsdGlwbGUgdGltZXMnKSk7XG4gIH1cblxuICB0cy53cml0ZWNodW5rID0gbnVsbDtcbiAgdHMud3JpdGVjYiA9IG51bGw7XG5cbiAgaWYgKGRhdGEgIT0gbnVsbCkgLy8gc2luZ2xlIGVxdWFscyBjaGVjayBmb3IgYm90aCBgbnVsbGAgYW5kIGB1bmRlZmluZWRgXG4gICAgdGhpcy5wdXNoKGRhdGEpO1xuXG4gIGNiKGVyKTtcblxuICB2YXIgcnMgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICBycy5yZWFkaW5nID0gZmFsc2U7XG4gIGlmIChycy5uZWVkUmVhZGFibGUgfHwgcnMubGVuZ3RoIDwgcnMuaGlnaFdhdGVyTWFyaykge1xuICAgIHRoaXMuX3JlYWQocnMuaGlnaFdhdGVyTWFyayk7XG4gIH1cbn1cblxuZnVuY3Rpb24gVHJhbnNmb3JtKG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFRyYW5zZm9ybSkpIHJldHVybiBuZXcgVHJhbnNmb3JtKG9wdGlvbnMpO1xuXG4gIER1cGxleC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXG4gIHRoaXMuX3RyYW5zZm9ybVN0YXRlID0ge1xuICAgIGFmdGVyVHJhbnNmb3JtOiBhZnRlclRyYW5zZm9ybS5iaW5kKHRoaXMpLFxuICAgIG5lZWRUcmFuc2Zvcm06IGZhbHNlLFxuICAgIHRyYW5zZm9ybWluZzogZmFsc2UsXG4gICAgd3JpdGVjYjogbnVsbCxcbiAgICB3cml0ZWNodW5rOiBudWxsLFxuICAgIHdyaXRlZW5jb2Rpbmc6IG51bGxcbiAgfTtcblxuICAvLyBzdGFydCBvdXQgYXNraW5nIGZvciBhIHJlYWRhYmxlIGV2ZW50IG9uY2UgZGF0YSBpcyB0cmFuc2Zvcm1lZC5cbiAgdGhpcy5fcmVhZGFibGVTdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlO1xuXG4gIC8vIHdlIGhhdmUgaW1wbGVtZW50ZWQgdGhlIF9yZWFkIG1ldGhvZCwgYW5kIGRvbmUgdGhlIG90aGVyIHRoaW5nc1xuICAvLyB0aGF0IFJlYWRhYmxlIHdhbnRzIGJlZm9yZSB0aGUgZmlyc3QgX3JlYWQgY2FsbCwgc28gdW5zZXQgdGhlXG4gIC8vIHN5bmMgZ3VhcmQgZmxhZy5cbiAgdGhpcy5fcmVhZGFibGVTdGF0ZS5zeW5jID0gZmFsc2U7XG5cbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMudHJhbnNmb3JtID09PSAnZnVuY3Rpb24nKSB0aGlzLl90cmFuc2Zvcm0gPSBvcHRpb25zLnRyYW5zZm9ybTtcblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5mbHVzaCA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fZmx1c2ggPSBvcHRpb25zLmZsdXNoO1xuICB9XG5cbiAgLy8gV2hlbiB0aGUgd3JpdGFibGUgc2lkZSBmaW5pc2hlcywgdGhlbiBmbHVzaCBvdXQgYW55dGhpbmcgcmVtYWluaW5nLlxuICB0aGlzLm9uKCdwcmVmaW5pc2gnLCBwcmVmaW5pc2gpO1xufVxuXG5mdW5jdGlvbiBwcmVmaW5pc2goKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgaWYgKHR5cGVvZiB0aGlzLl9mbHVzaCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRoaXMuX2ZsdXNoKGZ1bmN0aW9uIChlciwgZGF0YSkge1xuICAgICAgZG9uZShfdGhpcywgZXIsIGRhdGEpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGRvbmUodGhpcywgbnVsbCwgbnVsbCk7XG4gIH1cbn1cblxuVHJhbnNmb3JtLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZykge1xuICB0aGlzLl90cmFuc2Zvcm1TdGF0ZS5uZWVkVHJhbnNmb3JtID0gZmFsc2U7XG4gIHJldHVybiBEdXBsZXgucHJvdG90eXBlLnB1c2guY2FsbCh0aGlzLCBjaHVuaywgZW5jb2RpbmcpO1xufTtcblxuLy8gVGhpcyBpcyB0aGUgcGFydCB3aGVyZSB5b3UgZG8gc3R1ZmYhXG4vLyBvdmVycmlkZSB0aGlzIGZ1bmN0aW9uIGluIGltcGxlbWVudGF0aW9uIGNsYXNzZXMuXG4vLyAnY2h1bmsnIGlzIGFuIGlucHV0IGNodW5rLlxuLy9cbi8vIENhbGwgYHB1c2gobmV3Q2h1bmspYCB0byBwYXNzIGFsb25nIHRyYW5zZm9ybWVkIG91dHB1dFxuLy8gdG8gdGhlIHJlYWRhYmxlIHNpZGUuICBZb3UgbWF5IGNhbGwgJ3B1c2gnIHplcm8gb3IgbW9yZSB0aW1lcy5cbi8vXG4vLyBDYWxsIGBjYihlcnIpYCB3aGVuIHlvdSBhcmUgZG9uZSB3aXRoIHRoaXMgY2h1bmsuICBJZiB5b3UgcGFzc1xuLy8gYW4gZXJyb3IsIHRoZW4gdGhhdCdsbCBwdXQgdGhlIGh1cnQgb24gdGhlIHdob2xlIG9wZXJhdGlvbi4gIElmIHlvdVxuLy8gbmV2ZXIgY2FsbCBjYigpLCB0aGVuIHlvdSdsbCBuZXZlciBnZXQgYW5vdGhlciBjaHVuay5cblRyYW5zZm9ybS5wcm90b3R5cGUuX3RyYW5zZm9ybSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIHRocm93IG5ldyBFcnJvcignX3RyYW5zZm9ybSgpIGlzIG5vdCBpbXBsZW1lbnRlZCcpO1xufTtcblxuVHJhbnNmb3JtLnByb3RvdHlwZS5fd3JpdGUgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICB2YXIgdHMgPSB0aGlzLl90cmFuc2Zvcm1TdGF0ZTtcbiAgdHMud3JpdGVjYiA9IGNiO1xuICB0cy53cml0ZWNodW5rID0gY2h1bms7XG4gIHRzLndyaXRlZW5jb2RpbmcgPSBlbmNvZGluZztcbiAgaWYgKCF0cy50cmFuc2Zvcm1pbmcpIHtcbiAgICB2YXIgcnMgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICAgIGlmICh0cy5uZWVkVHJhbnNmb3JtIHx8IHJzLm5lZWRSZWFkYWJsZSB8fCBycy5sZW5ndGggPCBycy5oaWdoV2F0ZXJNYXJrKSB0aGlzLl9yZWFkKHJzLmhpZ2hXYXRlck1hcmspO1xuICB9XG59O1xuXG4vLyBEb2Vzbid0IG1hdHRlciB3aGF0IHRoZSBhcmdzIGFyZSBoZXJlLlxuLy8gX3RyYW5zZm9ybSBkb2VzIGFsbCB0aGUgd29yay5cbi8vIFRoYXQgd2UgZ290IGhlcmUgbWVhbnMgdGhhdCB0aGUgcmVhZGFibGUgc2lkZSB3YW50cyBtb3JlIGRhdGEuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLl9yZWFkID0gZnVuY3Rpb24gKG4pIHtcbiAgdmFyIHRzID0gdGhpcy5fdHJhbnNmb3JtU3RhdGU7XG5cbiAgaWYgKHRzLndyaXRlY2h1bmsgIT09IG51bGwgJiYgdHMud3JpdGVjYiAmJiAhdHMudHJhbnNmb3JtaW5nKSB7XG4gICAgdHMudHJhbnNmb3JtaW5nID0gdHJ1ZTtcbiAgICB0aGlzLl90cmFuc2Zvcm0odHMud3JpdGVjaHVuaywgdHMud3JpdGVlbmNvZGluZywgdHMuYWZ0ZXJUcmFuc2Zvcm0pO1xuICB9IGVsc2Uge1xuICAgIC8vIG1hcmsgdGhhdCB3ZSBuZWVkIGEgdHJhbnNmb3JtLCBzbyB0aGF0IGFueSBkYXRhIHRoYXQgY29tZXMgaW5cbiAgICAvLyB3aWxsIGdldCBwcm9jZXNzZWQsIG5vdyB0aGF0IHdlJ3ZlIGFza2VkIGZvciBpdC5cbiAgICB0cy5uZWVkVHJhbnNmb3JtID0gdHJ1ZTtcbiAgfVxufTtcblxuVHJhbnNmb3JtLnByb3RvdHlwZS5fZGVzdHJveSA9IGZ1bmN0aW9uIChlcnIsIGNiKSB7XG4gIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gIER1cGxleC5wcm90b3R5cGUuX2Rlc3Ryb3kuY2FsbCh0aGlzLCBlcnIsIGZ1bmN0aW9uIChlcnIyKSB7XG4gICAgY2IoZXJyMik7XG4gICAgX3RoaXMyLmVtaXQoJ2Nsb3NlJyk7XG4gIH0pO1xufTtcblxuZnVuY3Rpb24gZG9uZShzdHJlYW0sIGVyLCBkYXRhKSB7XG4gIGlmIChlcikgcmV0dXJuIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVyKTtcblxuICBpZiAoZGF0YSAhPSBudWxsKSAvLyBzaW5nbGUgZXF1YWxzIGNoZWNrIGZvciBib3RoIGBudWxsYCBhbmQgYHVuZGVmaW5lZGBcbiAgICBzdHJlYW0ucHVzaChkYXRhKTtcblxuICAvLyBpZiB0aGVyZSdzIG5vdGhpbmcgaW4gdGhlIHdyaXRlIGJ1ZmZlciwgdGhlbiB0aGF0IG1lYW5zXG4gIC8vIHRoYXQgbm90aGluZyBtb3JlIHdpbGwgZXZlciBiZSBwcm92aWRlZFxuICBpZiAoc3RyZWFtLl93cml0YWJsZVN0YXRlLmxlbmd0aCkgdGhyb3cgbmV3IEVycm9yKCdDYWxsaW5nIHRyYW5zZm9ybSBkb25lIHdoZW4gd3MubGVuZ3RoICE9IDAnKTtcblxuICBpZiAoc3RyZWFtLl90cmFuc2Zvcm1TdGF0ZS50cmFuc2Zvcm1pbmcpIHRocm93IG5ldyBFcnJvcignQ2FsbGluZyB0cmFuc2Zvcm0gZG9uZSB3aGVuIHN0aWxsIHRyYW5zZm9ybWluZycpO1xuXG4gIHJldHVybiBzdHJlYW0ucHVzaChudWxsKTtcbn0iLAogICAgIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyBhIHBhc3N0aHJvdWdoIHN0cmVhbS5cbi8vIGJhc2ljYWxseSBqdXN0IHRoZSBtb3N0IG1pbmltYWwgc29ydCBvZiBUcmFuc2Zvcm0gc3RyZWFtLlxuLy8gRXZlcnkgd3JpdHRlbiBjaHVuayBnZXRzIG91dHB1dCBhcy1pcy5cblxuJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFBhc3NUaHJvdWdoO1xuXG52YXIgVHJhbnNmb3JtID0gcmVxdWlyZSgnLi9fc3RyZWFtX3RyYW5zZm9ybScpO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIHV0aWwgPSBPYmplY3QuY3JlYXRlKHJlcXVpcmUoJ2NvcmUtdXRpbC1pcycpKTtcbnV0aWwuaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbnV0aWwuaW5oZXJpdHMoUGFzc1Rocm91Z2gsIFRyYW5zZm9ybSk7XG5cbmZ1bmN0aW9uIFBhc3NUaHJvdWdoKG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFBhc3NUaHJvdWdoKSkgcmV0dXJuIG5ldyBQYXNzVGhyb3VnaChvcHRpb25zKTtcblxuICBUcmFuc2Zvcm0uY2FsbCh0aGlzLCBvcHRpb25zKTtcbn1cblxuUGFzc1Rocm91Z2gucHJvdG90eXBlLl90cmFuc2Zvcm0gPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICBjYihudWxsLCBjaHVuayk7XG59OyIsCiAgICAidmFyIFN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpO1xuaWYgKHByb2Nlc3MuZW52LlJFQURBQkxFX1NUUkVBTSA9PT0gJ2Rpc2FibGUnICYmIFN0cmVhbSkge1xuICBtb2R1bGUuZXhwb3J0cyA9IFN0cmVhbTtcbiAgZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gU3RyZWFtLlJlYWRhYmxlO1xuICBleHBvcnRzLlJlYWRhYmxlID0gU3RyZWFtLlJlYWRhYmxlO1xuICBleHBvcnRzLldyaXRhYmxlID0gU3RyZWFtLldyaXRhYmxlO1xuICBleHBvcnRzLkR1cGxleCA9IFN0cmVhbS5EdXBsZXg7XG4gIGV4cG9ydHMuVHJhbnNmb3JtID0gU3RyZWFtLlRyYW5zZm9ybTtcbiAgZXhwb3J0cy5QYXNzVGhyb3VnaCA9IFN0cmVhbS5QYXNzVGhyb3VnaDtcbiAgZXhwb3J0cy5TdHJlYW0gPSBTdHJlYW07XG59IGVsc2Uge1xuICBleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2xpYi9fc3RyZWFtX3JlYWRhYmxlLmpzJyk7XG4gIGV4cG9ydHMuU3RyZWFtID0gU3RyZWFtIHx8IGV4cG9ydHM7XG4gIGV4cG9ydHMuUmVhZGFibGUgPSBleHBvcnRzO1xuICBleHBvcnRzLldyaXRhYmxlID0gcmVxdWlyZSgnLi9saWIvX3N0cmVhbV93cml0YWJsZS5qcycpO1xuICBleHBvcnRzLkR1cGxleCA9IHJlcXVpcmUoJy4vbGliL19zdHJlYW1fZHVwbGV4LmpzJyk7XG4gIGV4cG9ydHMuVHJhbnNmb3JtID0gcmVxdWlyZSgnLi9saWIvX3N0cmVhbV90cmFuc2Zvcm0uanMnKTtcbiAgZXhwb3J0cy5QYXNzVGhyb3VnaCA9IHJlcXVpcmUoJy4vbGliL19zdHJlYW1fcGFzc3Rocm91Z2guanMnKTtcbn1cbiIsCiAgICAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL3JlYWRhYmxlJykuUGFzc1Rocm91Z2hcbiIsCiAgICAidmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG52YXIgUGFzc1Rocm91Z2ggPSByZXF1aXJlKCdyZWFkYWJsZS1zdHJlYW0vcGFzc3Rocm91Z2gnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFJlYWRhYmxlOiBSZWFkYWJsZSxcbiAgV3JpdGFibGU6IFdyaXRhYmxlXG59O1xuXG51dGlsLmluaGVyaXRzKFJlYWRhYmxlLCBQYXNzVGhyb3VnaCk7XG51dGlsLmluaGVyaXRzKFdyaXRhYmxlLCBQYXNzVGhyb3VnaCk7XG5cbi8vIFBhdGNoIHRoZSBnaXZlbiBtZXRob2Qgb2YgaW5zdGFuY2Ugc28gdGhhdCB0aGUgY2FsbGJhY2tcbi8vIGlzIGV4ZWN1dGVkIG9uY2UsIGJlZm9yZSB0aGUgYWN0dWFsIG1ldGhvZCBpcyBjYWxsZWQgdGhlXG4vLyBmaXJzdCB0aW1lLlxuZnVuY3Rpb24gYmVmb3JlRmlyc3RDYWxsKGluc3RhbmNlLCBtZXRob2QsIGNhbGxiYWNrKSB7XG4gIGluc3RhbmNlW21ldGhvZF0gPSBmdW5jdGlvbigpIHtcbiAgICBkZWxldGUgaW5zdGFuY2VbbWV0aG9kXTtcbiAgICBjYWxsYmFjay5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIHJldHVybiB0aGlzW21ldGhvZF0uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gUmVhZGFibGUoZm4sIG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlYWRhYmxlKSlcbiAgICByZXR1cm4gbmV3IFJlYWRhYmxlKGZuLCBvcHRpb25zKTtcblxuICBQYXNzVGhyb3VnaC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXG4gIGJlZm9yZUZpcnN0Q2FsbCh0aGlzLCAnX3JlYWQnLCBmdW5jdGlvbigpIHtcbiAgICB2YXIgc291cmNlID0gZm4uY2FsbCh0aGlzLCBvcHRpb25zKTtcbiAgICB2YXIgZW1pdCA9IHRoaXMuZW1pdC5iaW5kKHRoaXMsICdlcnJvcicpO1xuICAgIHNvdXJjZS5vbignZXJyb3InLCBlbWl0KTtcbiAgICBzb3VyY2UucGlwZSh0aGlzKTtcbiAgfSk7XG5cbiAgdGhpcy5lbWl0KCdyZWFkYWJsZScpO1xufVxuXG5mdW5jdGlvbiBXcml0YWJsZShmbiwgb3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgV3JpdGFibGUpKVxuICAgIHJldHVybiBuZXcgV3JpdGFibGUoZm4sIG9wdGlvbnMpO1xuXG4gIFBhc3NUaHJvdWdoLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cbiAgYmVmb3JlRmlyc3RDYWxsKHRoaXMsICdfd3JpdGUnLCBmdW5jdGlvbigpIHtcbiAgICB2YXIgZGVzdGluYXRpb24gPSBmbi5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuICAgIHZhciBlbWl0ID0gdGhpcy5lbWl0LmJpbmQodGhpcywgJ2Vycm9yJyk7XG4gICAgZGVzdGluYXRpb24ub24oJ2Vycm9yJywgZW1pdCk7XG4gICAgdGhpcy5waXBlKGRlc3RpbmF0aW9uKTtcbiAgfSk7XG5cbiAgdGhpcy5lbWl0KCd3cml0YWJsZScpO1xufVxuXG4iLAogICAgIi8qIVxuICogbm9ybWFsaXplLXBhdGggPGh0dHBzOi8vZ2l0aHViLmNvbS9qb25zY2hsaW5rZXJ0L25vcm1hbGl6ZS1wYXRoPlxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4LCBKb24gU2NobGlua2VydC5cbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHBhdGgsIHN0cmlwVHJhaWxpbmcpIHtcbiAgaWYgKHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2V4cGVjdGVkIHBhdGggdG8gYmUgYSBzdHJpbmcnKTtcbiAgfVxuXG4gIGlmIChwYXRoID09PSAnXFxcXCcgfHwgcGF0aCA9PT0gJy8nKSByZXR1cm4gJy8nO1xuXG4gIHZhciBsZW4gPSBwYXRoLmxlbmd0aDtcbiAgaWYgKGxlbiA8PSAxKSByZXR1cm4gcGF0aDtcblxuICAvLyBlbnN1cmUgdGhhdCB3aW4zMiBuYW1lc3BhY2VzIGhhcyB0d28gbGVhZGluZyBzbGFzaGVzLCBzbyB0aGF0IHRoZSBwYXRoIGlzXG4gIC8vIGhhbmRsZWQgcHJvcGVybHkgYnkgdGhlIHdpbjMyIHZlcnNpb24gb2YgcGF0aC5wYXJzZSgpIGFmdGVyIGJlaW5nIG5vcm1hbGl6ZWRcbiAgLy8gaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeS93aW5kb3dzL2Rlc2t0b3AvYWEzNjUyNDcodj12cy44NSkuYXNweCNuYW1lc3BhY2VzXG4gIHZhciBwcmVmaXggPSAnJztcbiAgaWYgKGxlbiA+IDQgJiYgcGF0aFszXSA9PT0gJ1xcXFwnKSB7XG4gICAgdmFyIGNoID0gcGF0aFsyXTtcbiAgICBpZiAoKGNoID09PSAnPycgfHwgY2ggPT09ICcuJykgJiYgcGF0aC5zbGljZSgwLCAyKSA9PT0gJ1xcXFxcXFxcJykge1xuICAgICAgcGF0aCA9IHBhdGguc2xpY2UoMik7XG4gICAgICBwcmVmaXggPSAnLy8nO1xuICAgIH1cbiAgfVxuXG4gIHZhciBzZWdzID0gcGF0aC5zcGxpdCgvWy9cXFxcXSsvKTtcbiAgaWYgKHN0cmlwVHJhaWxpbmcgIT09IGZhbHNlICYmIHNlZ3Nbc2Vncy5sZW5ndGggLSAxXSA9PT0gJycpIHtcbiAgICBzZWdzLnBvcCgpO1xuICB9XG4gIHJldHVybiBwcmVmaXggKyBzZWdzLmpvaW4oJy8nKTtcbn07XG4iLAogICAgIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgZmlyc3QgYXJndW1lbnQgaXQgcmVjZWl2ZXMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgQW55IHZhbHVlLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgYHZhbHVlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKlxuICogY29uc29sZS5sb2coXy5pZGVudGl0eShvYmplY3QpID09PSBvYmplY3QpO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBpZGVudGl0eSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaWRlbnRpdHk7XG4iLAogICAgIi8qKlxuICogQSBmYXN0ZXIgYWx0ZXJuYXRpdmUgdG8gYEZ1bmN0aW9uI2FwcGx5YCwgdGhpcyBmdW5jdGlvbiBpbnZva2VzIGBmdW5jYFxuICogd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgYHRoaXNBcmdgIGFuZCB0aGUgYXJndW1lbnRzIG9mIGBhcmdzYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaW52b2tlLlxuICogQHBhcmFtIHsqfSB0aGlzQXJnIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gKiBAcGFyYW0ge0FycmF5fSBhcmdzIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIGBmdW5jYCB3aXRoLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc3VsdCBvZiBgZnVuY2AuXG4gKi9cbmZ1bmN0aW9uIGFwcGx5KGZ1bmMsIHRoaXNBcmcsIGFyZ3MpIHtcbiAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgIGNhc2UgMDogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnKTtcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSk7XG4gICAgY2FzZSAyOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgfVxuICByZXR1cm4gZnVuYy5hcHBseSh0aGlzQXJnLCBhcmdzKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcHBseTtcbiIsCiAgICAidmFyIGFwcGx5ID0gcmVxdWlyZSgnLi9fYXBwbHknKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU1heCA9IE1hdGgubWF4O1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVJlc3RgIHdoaWNoIHRyYW5zZm9ybXMgdGhlIHJlc3QgYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIHJlc3QgYXJyYXkgdHJhbnNmb3JtLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG92ZXJSZXN0KGZ1bmMsIHN0YXJ0LCB0cmFuc2Zvcm0pIHtcbiAgc3RhcnQgPSBuYXRpdmVNYXgoc3RhcnQgPT09IHVuZGVmaW5lZCA/IChmdW5jLmxlbmd0aCAtIDEpIDogc3RhcnQsIDApO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IG5hdGl2ZU1heChhcmdzLmxlbmd0aCAtIHN0YXJ0LCAwKSxcbiAgICAgICAgYXJyYXkgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGFycmF5W2luZGV4XSA9IGFyZ3Nbc3RhcnQgKyBpbmRleF07XG4gICAgfVxuICAgIGluZGV4ID0gLTE7XG4gICAgdmFyIG90aGVyQXJncyA9IEFycmF5KHN0YXJ0ICsgMSk7XG4gICAgd2hpbGUgKCsraW5kZXggPCBzdGFydCkge1xuICAgICAgb3RoZXJBcmdzW2luZGV4XSA9IGFyZ3NbaW5kZXhdO1xuICAgIH1cbiAgICBvdGhlckFyZ3Nbc3RhcnRdID0gdHJhbnNmb3JtKGFycmF5KTtcbiAgICByZXR1cm4gYXBwbHkoZnVuYywgdGhpcywgb3RoZXJBcmdzKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvdmVyUmVzdDtcbiIsCiAgICAiLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGB2YWx1ZWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjQuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHJldHVybiBmcm9tIHRoZSBuZXcgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjb25zdGFudCBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdHMgPSBfLnRpbWVzKDIsIF8uY29uc3RhbnQoeyAnYSc6IDEgfSkpO1xuICpcbiAqIGNvbnNvbGUubG9nKG9iamVjdHMpO1xuICogLy8gPT4gW3sgJ2EnOiAxIH0sIHsgJ2EnOiAxIH1dXG4gKlxuICogY29uc29sZS5sb2cob2JqZWN0c1swXSA9PT0gb2JqZWN0c1sxXSk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGNvbnN0YW50KHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29uc3RhbnQ7XG4iLAogICAgIi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZ2xvYmFsYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsICYmIGdsb2JhbC5PYmplY3QgPT09IE9iamVjdCAmJiBnbG9iYWw7XG5cbm1vZHVsZS5leHBvcnRzID0gZnJlZUdsb2JhbDtcbiIsCiAgICAidmFyIGZyZWVHbG9iYWwgPSByZXF1aXJlKCcuL19mcmVlR2xvYmFsJyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgc2VsZmAuICovXG52YXIgZnJlZVNlbGYgPSB0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmICYmIHNlbGYuT2JqZWN0ID09PSBPYmplY3QgJiYgc2VsZjtcblxuLyoqIFVzZWQgYXMgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3QuICovXG52YXIgcm9vdCA9IGZyZWVHbG9iYWwgfHwgZnJlZVNlbGYgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblxubW9kdWxlLmV4cG9ydHMgPSByb290O1xuIiwKICAgICJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgU3ltYm9sID0gcm9vdC5TeW1ib2w7XG5cbm1vZHVsZS5leHBvcnRzID0gU3ltYm9sO1xuIiwKICAgICJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZVxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VHZXRUYWdgIHdoaWNoIGlnbm9yZXMgYFN5bWJvbC50b1N0cmluZ1RhZ2AgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHJhdyBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBnZXRSYXdUYWcodmFsdWUpIHtcbiAgdmFyIGlzT3duID0gaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgc3ltVG9TdHJpbmdUYWcpLFxuICAgICAgdGFnID0gdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuXG4gIHRyeSB7XG4gICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdW5kZWZpbmVkO1xuICAgIHZhciB1bm1hc2tlZCA9IHRydWU7XG4gIH0gY2F0Y2ggKGUpIHt9XG5cbiAgdmFyIHJlc3VsdCA9IG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xuICBpZiAodW5tYXNrZWQpIHtcbiAgICBpZiAoaXNPd24pIHtcbiAgICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHRhZztcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRSYXdUYWc7XG4iLAogICAgIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZVxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcgdXNpbmcgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gb2JqZWN0VG9TdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG9iamVjdFRvU3RyaW5nO1xuIiwKICAgICJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgZ2V0UmF3VGFnID0gcmVxdWlyZSgnLi9fZ2V0UmF3VGFnJyksXG4gICAgb2JqZWN0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19vYmplY3RUb1N0cmluZycpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbnVsbFRhZyA9ICdbb2JqZWN0IE51bGxdJyxcbiAgICB1bmRlZmluZWRUYWcgPSAnW29iamVjdCBVbmRlZmluZWRdJztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldFRhZ2Agd2l0aG91dCBmYWxsYmFja3MgZm9yIGJ1Z2d5IGVudmlyb25tZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0VGFnKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWRUYWcgOiBudWxsVGFnO1xuICB9XG4gIHJldHVybiAoc3ltVG9TdHJpbmdUYWcgJiYgc3ltVG9TdHJpbmdUYWcgaW4gT2JqZWN0KHZhbHVlKSlcbiAgICA/IGdldFJhd1RhZyh2YWx1ZSlcbiAgICA6IG9iamVjdFRvU3RyaW5nKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlR2V0VGFnO1xuIiwKICAgICIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHRoZVxuICogW2xhbmd1YWdlIHR5cGVdKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1lY21hc2NyaXB0LWxhbmd1YWdlLXR5cGVzKVxuICogb2YgYE9iamVjdGAuIChlLmcuIGFycmF5cywgZnVuY3Rpb25zLCBvYmplY3RzLCByZWdleGVzLCBgbmV3IE51bWJlcigwKWAsIGFuZCBgbmV3IFN0cmluZygnJylgKVxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0KHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChfLm5vb3ApO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgKHR5cGUgPT0gJ29iamVjdCcgfHwgdHlwZSA9PSAnZnVuY3Rpb24nKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc09iamVjdDtcbiIsCiAgICAidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0Jyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhc3luY1RhZyA9ICdbb2JqZWN0IEFzeW5jRnVuY3Rpb25dJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBnZW5UYWcgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nLFxuICAgIHByb3h5VGFnID0gJ1tvYmplY3QgUHJveHldJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYEZ1bmN0aW9uYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBmdW5jdGlvbiwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oXyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0Z1bmN0aW9uKC9hYmMvKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gVGhlIHVzZSBvZiBgT2JqZWN0I3RvU3RyaW5nYCBhdm9pZHMgaXNzdWVzIHdpdGggdGhlIGB0eXBlb2ZgIG9wZXJhdG9yXG4gIC8vIGluIFNhZmFyaSA5IHdoaWNoIHJldHVybnMgJ29iamVjdCcgZm9yIHR5cGVkIGFycmF5cyBhbmQgb3RoZXIgY29uc3RydWN0b3JzLlxuICB2YXIgdGFnID0gYmFzZUdldFRhZyh2YWx1ZSk7XG4gIHJldHVybiB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnIHx8IHRhZyA9PSBhc3luY1RhZyB8fCB0YWcgPT0gcHJveHlUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGdW5jdGlvbjtcbiIsCiAgICAidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBvdmVycmVhY2hpbmcgY29yZS1qcyBzaGltcy4gKi9cbnZhciBjb3JlSnNEYXRhID0gcm9vdFsnX19jb3JlLWpzX3NoYXJlZF9fJ107XG5cbm1vZHVsZS5leHBvcnRzID0gY29yZUpzRGF0YTtcbiIsCiAgICAidmFyIGNvcmVKc0RhdGEgPSByZXF1aXJlKCcuL19jb3JlSnNEYXRhJyk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBtZXRob2RzIG1hc3F1ZXJhZGluZyBhcyBuYXRpdmUuICovXG52YXIgbWFza1NyY0tleSA9IChmdW5jdGlvbigpIHtcbiAgdmFyIHVpZCA9IC9bXi5dKyQvLmV4ZWMoY29yZUpzRGF0YSAmJiBjb3JlSnNEYXRhLmtleXMgJiYgY29yZUpzRGF0YS5rZXlzLklFX1BST1RPIHx8ICcnKTtcbiAgcmV0dXJuIHVpZCA/ICgnU3ltYm9sKHNyYylfMS4nICsgdWlkKSA6ICcnO1xufSgpKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYGZ1bmNgIGhhcyBpdHMgc291cmNlIG1hc2tlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYGZ1bmNgIGlzIG1hc2tlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc01hc2tlZChmdW5jKSB7XG4gIHJldHVybiAhIW1hc2tTcmNLZXkgJiYgKG1hc2tTcmNLZXkgaW4gZnVuYyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNNYXNrZWQ7XG4iLAogICAgIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYGZ1bmNgIHRvIGl0cyBzb3VyY2UgY29kZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHNvdXJjZSBjb2RlLlxuICovXG5mdW5jdGlvbiB0b1NvdXJjZShmdW5jKSB7XG4gIGlmIChmdW5jICE9IG51bGwpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZ1bmNUb1N0cmluZy5jYWxsKGZ1bmMpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoZnVuYyArICcnKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICB9XG4gIHJldHVybiAnJztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b1NvdXJjZTtcbiIsCiAgICAidmFyIGlzRnVuY3Rpb24gPSByZXF1aXJlKCcuL2lzRnVuY3Rpb24nKSxcbiAgICBpc01hc2tlZCA9IHJlcXVpcmUoJy4vX2lzTWFza2VkJyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0JyksXG4gICAgdG9Tb3VyY2UgPSByZXF1aXJlKCcuL190b1NvdXJjZScpO1xuXG4vKipcbiAqIFVzZWQgdG8gbWF0Y2ggYFJlZ0V4cGBcbiAqIFtzeW50YXggY2hhcmFjdGVyc10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcGF0dGVybnMpLlxuICovXG52YXIgcmVSZWdFeHBDaGFyID0gL1tcXFxcXiQuKis/KClbXFxde318XS9nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaG9zdCBjb25zdHJ1Y3RvcnMgKFNhZmFyaSkuICovXG52YXIgcmVJc0hvc3RDdG9yID0gL15cXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXF0kLztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcbiAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBpZiBhIG1ldGhvZCBpcyBuYXRpdmUuICovXG52YXIgcmVJc05hdGl2ZSA9IFJlZ0V4cCgnXicgK1xuICBmdW5jVG9TdHJpbmcuY2FsbChoYXNPd25Qcm9wZXJ0eSkucmVwbGFjZShyZVJlZ0V4cENoYXIsICdcXFxcJCYnKVxuICAucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXFxcXCgpfCBmb3IgLis/KD89XFxcXFxcXSkvZywgJyQxLio/JykgKyAnJCdcbik7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNOYXRpdmVgIHdpdGhvdXQgYmFkIHNoaW0gY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbmF0aXZlIGZ1bmN0aW9uLFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzTmF0aXZlKHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpIHx8IGlzTWFza2VkKHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgcGF0dGVybiA9IGlzRnVuY3Rpb24odmFsdWUpID8gcmVJc05hdGl2ZSA6IHJlSXNIb3N0Q3RvcjtcbiAgcmV0dXJuIHBhdHRlcm4udGVzdCh0b1NvdXJjZSh2YWx1ZSkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc05hdGl2ZTtcbiIsCiAgICAiLyoqXG4gKiBHZXRzIHRoZSB2YWx1ZSBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZ2V0VmFsdWUob2JqZWN0LCBrZXkpIHtcbiAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0VmFsdWU7XG4iLAogICAgInZhciBiYXNlSXNOYXRpdmUgPSByZXF1aXJlKCcuL19iYXNlSXNOYXRpdmUnKSxcbiAgICBnZXRWYWx1ZSA9IHJlcXVpcmUoJy4vX2dldFZhbHVlJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgbmF0aXZlIGZ1bmN0aW9uIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIG1ldGhvZCB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZnVuY3Rpb24gaWYgaXQncyBuYXRpdmUsIGVsc2UgYHVuZGVmaW5lZGAuXG4gKi9cbmZ1bmN0aW9uIGdldE5hdGl2ZShvYmplY3QsIGtleSkge1xuICB2YXIgdmFsdWUgPSBnZXRWYWx1ZShvYmplY3QsIGtleSk7XG4gIHJldHVybiBiYXNlSXNOYXRpdmUodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0TmF0aXZlO1xuIiwKICAgICJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyk7XG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IChmdW5jdGlvbigpIHtcbiAgdHJ5IHtcbiAgICB2YXIgZnVuYyA9IGdldE5hdGl2ZShPYmplY3QsICdkZWZpbmVQcm9wZXJ0eScpO1xuICAgIGZ1bmMoe30sICcnLCB7fSk7XG4gICAgcmV0dXJuIGZ1bmM7XG4gIH0gY2F0Y2ggKGUpIHt9XG59KCkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmluZVByb3BlcnR5O1xuIiwKICAgICJ2YXIgY29uc3RhbnQgPSByZXF1aXJlKCcuL2NvbnN0YW50JyksXG4gICAgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19kZWZpbmVQcm9wZXJ0eScpLFxuICAgIGlkZW50aXR5ID0gcmVxdWlyZSgnLi9pZGVudGl0eScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBzZXRUb1N0cmluZ2Agd2l0aG91dCBzdXBwb3J0IGZvciBob3QgbG9vcCBzaG9ydGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3RyaW5nIFRoZSBgdG9TdHJpbmdgIHJlc3VsdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gKi9cbnZhciBiYXNlU2V0VG9TdHJpbmcgPSAhZGVmaW5lUHJvcGVydHkgPyBpZGVudGl0eSA6IGZ1bmN0aW9uKGZ1bmMsIHN0cmluZykge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZnVuYywgJ3RvU3RyaW5nJywge1xuICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICdlbnVtZXJhYmxlJzogZmFsc2UsXG4gICAgJ3ZhbHVlJzogY29uc3RhbnQoc3RyaW5nKSxcbiAgICAnd3JpdGFibGUnOiB0cnVlXG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlU2V0VG9TdHJpbmc7XG4iLAogICAgIi8qKiBVc2VkIHRvIGRldGVjdCBob3QgZnVuY3Rpb25zIGJ5IG51bWJlciBvZiBjYWxscyB3aXRoaW4gYSBzcGFuIG9mIG1pbGxpc2Vjb25kcy4gKi9cbnZhciBIT1RfQ09VTlQgPSA4MDAsXG4gICAgSE9UX1NQQU4gPSAxNjtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU5vdyA9IERhdGUubm93O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0J2xsIHNob3J0IG91dCBhbmQgaW52b2tlIGBpZGVudGl0eWAgaW5zdGVhZFxuICogb2YgYGZ1bmNgIHdoZW4gaXQncyBjYWxsZWQgYEhPVF9DT1VOVGAgb3IgbW9yZSB0aW1lcyBpbiBgSE9UX1NQQU5gXG4gKiBtaWxsaXNlY29uZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHJlc3RyaWN0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc2hvcnRhYmxlIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBzaG9ydE91dChmdW5jKSB7XG4gIHZhciBjb3VudCA9IDAsXG4gICAgICBsYXN0Q2FsbGVkID0gMDtcblxuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0YW1wID0gbmF0aXZlTm93KCksXG4gICAgICAgIHJlbWFpbmluZyA9IEhPVF9TUEFOIC0gKHN0YW1wIC0gbGFzdENhbGxlZCk7XG5cbiAgICBsYXN0Q2FsbGVkID0gc3RhbXA7XG4gICAgaWYgKHJlbWFpbmluZyA+IDApIHtcbiAgICAgIGlmICgrK2NvdW50ID49IEhPVF9DT1VOVCkge1xuICAgICAgICByZXR1cm4gYXJndW1lbnRzWzBdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb3VudCA9IDA7XG4gICAgfVxuICAgIHJldHVybiBmdW5jLmFwcGx5KHVuZGVmaW5lZCwgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzaG9ydE91dDtcbiIsCiAgICAidmFyIGJhc2VTZXRUb1N0cmluZyA9IHJlcXVpcmUoJy4vX2Jhc2VTZXRUb1N0cmluZycpLFxuICAgIHNob3J0T3V0ID0gcmVxdWlyZSgnLi9fc2hvcnRPdXQnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBgdG9TdHJpbmdgIG1ldGhvZCBvZiBgZnVuY2AgdG8gcmV0dXJuIGBzdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmcgVGhlIGB0b1N0cmluZ2AgcmVzdWx0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cbiAqL1xudmFyIHNldFRvU3RyaW5nID0gc2hvcnRPdXQoYmFzZVNldFRvU3RyaW5nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBzZXRUb1N0cmluZztcbiIsCiAgICAidmFyIGlkZW50aXR5ID0gcmVxdWlyZSgnLi9pZGVudGl0eScpLFxuICAgIG92ZXJSZXN0ID0gcmVxdWlyZSgnLi9fb3ZlclJlc3QnKSxcbiAgICBzZXRUb1N0cmluZyA9IHJlcXVpcmUoJy4vX3NldFRvU3RyaW5nJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucmVzdGAgd2hpY2ggZG9lc24ndCB2YWxpZGF0ZSBvciBjb2VyY2UgYXJndW1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD1mdW5jLmxlbmd0aC0xXSBUaGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHJlc3QgcGFyYW1ldGVyLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VSZXN0KGZ1bmMsIHN0YXJ0KSB7XG4gIHJldHVybiBzZXRUb1N0cmluZyhvdmVyUmVzdChmdW5jLCBzdGFydCwgaWRlbnRpdHkpLCBmdW5jICsgJycpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VSZXN0O1xuIiwKICAgICIvKipcbiAqIFBlcmZvcm1zIGFcbiAqIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBjb21wYXJpc29uIGJldHdlZW4gdHdvIHZhbHVlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmUgZXF1aXZhbGVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAqIHZhciBvdGhlciA9IHsgJ2EnOiAxIH07XG4gKlxuICogXy5lcShvYmplY3QsIG9iamVjdCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcShvYmplY3QsIG90aGVyKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5lcSgnYScsICdhJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcSgnYScsIE9iamVjdCgnYScpKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5lcShOYU4sIE5hTik7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGVxKHZhbHVlLCBvdGhlcikge1xuICByZXR1cm4gdmFsdWUgPT09IG90aGVyIHx8ICh2YWx1ZSAhPT0gdmFsdWUgJiYgb3RoZXIgIT09IG90aGVyKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlcTtcbiIsCiAgICAiLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGxlbmd0aC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgbG9vc2VseSBiYXNlZCBvblxuICogW2BUb0xlbmd0aGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXRvbGVuZ3RoKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGxlbmd0aCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzTGVuZ3RoKDMpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNMZW5ndGgoTnVtYmVyLk1JTl9WQUxVRSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNMZW5ndGgoSW5maW5pdHkpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzTGVuZ3RoKCczJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0xlbmd0aCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdudW1iZXInICYmXG4gICAgdmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8PSBNQVhfU0FGRV9JTlRFR0VSO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTGVuZ3RoO1xuIiwKICAgICJ2YXIgaXNGdW5jdGlvbiA9IHJlcXVpcmUoJy4vaXNGdW5jdGlvbicpLFxuICAgIGlzTGVuZ3RoID0gcmVxdWlyZSgnLi9pc0xlbmd0aCcpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UuIEEgdmFsdWUgaXMgY29uc2lkZXJlZCBhcnJheS1saWtlIGlmIGl0J3NcbiAqIG5vdCBhIGZ1bmN0aW9uIGFuZCBoYXMgYSBgdmFsdWUubGVuZ3RoYCB0aGF0J3MgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gb3JcbiAqIGVxdWFsIHRvIGAwYCBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUmAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKCdhYmMnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5TGlrZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmICFpc0Z1bmN0aW9uKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0FycmF5TGlrZTtcbiIsCiAgICAiLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlcy4gKi9cbnZhciByZUlzVWludCA9IC9eKD86MHxbMS05XVxcZCopJC87XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGluZGV4LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPU1BWF9TQUZFX0lOVEVHRVJdIFRoZSB1cHBlciBib3VuZHMgb2YgYSB2YWxpZCBpbmRleC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgaW5kZXgsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNJbmRleCh2YWx1ZSwgbGVuZ3RoKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICBsZW5ndGggPSBsZW5ndGggPT0gbnVsbCA/IE1BWF9TQUZFX0lOVEVHRVIgOiBsZW5ndGg7XG5cbiAgcmV0dXJuICEhbGVuZ3RoICYmXG4gICAgKHR5cGUgPT0gJ251bWJlcicgfHxcbiAgICAgICh0eXBlICE9ICdzeW1ib2wnICYmIHJlSXNVaW50LnRlc3QodmFsdWUpKSkgJiZcbiAgICAgICAgKHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPCBsZW5ndGgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzSW5kZXg7XG4iLAogICAgInZhciBlcSA9IHJlcXVpcmUoJy4vZXEnKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKSxcbiAgICBpc0luZGV4ID0gcmVxdWlyZSgnLi9faXNJbmRleCcpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpO1xuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gYXJndW1lbnRzIGFyZSBmcm9tIGFuIGl0ZXJhdGVlIGNhbGwuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHBvdGVudGlhbCBpdGVyYXRlZSB2YWx1ZSBhcmd1bWVudC5cbiAqIEBwYXJhbSB7Kn0gaW5kZXggVGhlIHBvdGVudGlhbCBpdGVyYXRlZSBpbmRleCBvciBrZXkgYXJndW1lbnQuXG4gKiBAcGFyYW0geyp9IG9iamVjdCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIG9iamVjdCBhcmd1bWVudC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXJndW1lbnRzIGFyZSBmcm9tIGFuIGl0ZXJhdGVlIGNhbGwsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0l0ZXJhdGVlQ2FsbCh2YWx1ZSwgaW5kZXgsIG9iamVjdCkge1xuICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHR5cGUgPSB0eXBlb2YgaW5kZXg7XG4gIGlmICh0eXBlID09ICdudW1iZXInXG4gICAgICAgID8gKGlzQXJyYXlMaWtlKG9iamVjdCkgJiYgaXNJbmRleChpbmRleCwgb2JqZWN0Lmxlbmd0aCkpXG4gICAgICAgIDogKHR5cGUgPT0gJ3N0cmluZycgJiYgaW5kZXggaW4gb2JqZWN0KVxuICAgICAgKSB7XG4gICAgcmV0dXJuIGVxKG9iamVjdFtpbmRleF0sIHZhbHVlKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNJdGVyYXRlZUNhbGw7XG4iLAogICAgIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udGltZXNgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kc1xuICogb3IgbWF4IGFycmF5IGxlbmd0aCBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gaW52b2tlIGBpdGVyYXRlZWAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiByZXN1bHRzLlxuICovXG5mdW5jdGlvbiBiYXNlVGltZXMobiwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShuKTtcblxuICB3aGlsZSAoKytpbmRleCA8IG4pIHtcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoaW5kZXgpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVRpbWVzO1xuIiwKICAgICIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLiBBIHZhbHVlIGlzIG9iamVjdC1saWtlIGlmIGl0J3Mgbm90IGBudWxsYFxuICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcIm9iamVjdFwiLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc09iamVjdExpa2U7XG4iLAogICAgInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXSc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNBcmd1bWVudHNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAqL1xuZnVuY3Rpb24gYmFzZUlzQXJndW1lbnRzKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IGFyZ3NUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzQXJndW1lbnRzO1xuIiwKICAgICJ2YXIgYmFzZUlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9fYmFzZUlzQXJndW1lbnRzJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBvYmplY3RQcm90by5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoZnVuY3Rpb24oKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FyZ3VtZW50cyhbMSwgMiwgM10pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQXJndW1lbnRzID0gYmFzZUlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID8gYmFzZUlzQXJndW1lbnRzIDogZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgJ2NhbGxlZScpICYmXG4gICAgIXByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwodmFsdWUsICdjYWxsZWUnKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcmd1bWVudHM7XG4iLAogICAgIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhbiBgQXJyYXlgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXkoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXkoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheSgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJyYXk7XG4iLAogICAgIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyBgZmFsc2VgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4xMy4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50aW1lcygyLCBfLnN0dWJGYWxzZSk7XG4gKiAvLyA9PiBbZmFsc2UsIGZhbHNlXVxuICovXG5mdW5jdGlvbiBzdHViRmFsc2UoKSB7XG4gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHViRmFsc2U7XG4iLAogICAgInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpLFxuICAgIHN0dWJGYWxzZSA9IHJlcXVpcmUoJy4vc3R1YkZhbHNlJyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgQnVmZmVyID0gbW9kdWxlRXhwb3J0cyA/IHJvb3QuQnVmZmVyIDogdW5kZWZpbmVkO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlSXNCdWZmZXIgPSBCdWZmZXIgPyBCdWZmZXIuaXNCdWZmZXIgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjMuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0J1ZmZlcihuZXcgQnVmZmVyKDIpKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQnVmZmVyKG5ldyBVaW50OEFycmF5KDIpKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0J1ZmZlciA9IG5hdGl2ZUlzQnVmZmVyIHx8IHN0dWJGYWxzZTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0J1ZmZlcjtcbiIsCiAgICAidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNMZW5ndGggPSByZXF1aXJlKCcuL2lzTGVuZ3RoJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJyxcbiAgICBhcnJheVRhZyA9ICdbb2JqZWN0IEFycmF5XScsXG4gICAgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxuICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJyxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcbiAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nO1xuXG52YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJyxcbiAgICBmbG9hdDMyVGFnID0gJ1tvYmplY3QgRmxvYXQzMkFycmF5XScsXG4gICAgZmxvYXQ2NFRhZyA9ICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nLFxuICAgIGludDhUYWcgPSAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICBpbnQxNlRhZyA9ICdbb2JqZWN0IEludDE2QXJyYXldJyxcbiAgICBpbnQzMlRhZyA9ICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICB1aW50OFRhZyA9ICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICB1aW50OENsYW1wZWRUYWcgPSAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nLFxuICAgIHVpbnQxNlRhZyA9ICdbb2JqZWN0IFVpbnQxNkFycmF5XScsXG4gICAgdWludDMyVGFnID0gJ1tvYmplY3QgVWludDMyQXJyYXldJztcblxuLyoqIFVzZWQgdG8gaWRlbnRpZnkgYHRvU3RyaW5nVGFnYCB2YWx1ZXMgb2YgdHlwZWQgYXJyYXlzLiAqL1xudmFyIHR5cGVkQXJyYXlUYWdzID0ge307XG50eXBlZEFycmF5VGFnc1tmbG9hdDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Zsb2F0NjRUYWddID1cbnR5cGVkQXJyYXlUYWdzW2ludDhUYWddID0gdHlwZWRBcnJheVRhZ3NbaW50MTZUYWddID1cbnR5cGVkQXJyYXlUYWdzW2ludDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQ4VGFnXSA9XG50eXBlZEFycmF5VGFnc1t1aW50OENsYW1wZWRUYWddID0gdHlwZWRBcnJheVRhZ3NbdWludDE2VGFnXSA9XG50eXBlZEFycmF5VGFnc1t1aW50MzJUYWddID0gdHJ1ZTtcbnR5cGVkQXJyYXlUYWdzW2FyZ3NUYWddID0gdHlwZWRBcnJheVRhZ3NbYXJyYXlUYWddID1cbnR5cGVkQXJyYXlUYWdzW2FycmF5QnVmZmVyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Jvb2xUYWddID1cbnR5cGVkQXJyYXlUYWdzW2RhdGFWaWV3VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2RhdGVUYWddID1cbnR5cGVkQXJyYXlUYWdzW2Vycm9yVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Z1bmNUYWddID1cbnR5cGVkQXJyYXlUYWdzW21hcFRhZ10gPSB0eXBlZEFycmF5VGFnc1tudW1iZXJUYWddID1cbnR5cGVkQXJyYXlUYWdzW29iamVjdFRhZ10gPSB0eXBlZEFycmF5VGFnc1tyZWdleHBUYWddID1cbnR5cGVkQXJyYXlUYWdzW3NldFRhZ10gPSB0eXBlZEFycmF5VGFnc1tzdHJpbmdUYWddID1cbnR5cGVkQXJyYXlUYWdzW3dlYWtNYXBUYWddID0gZmFsc2U7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNUeXBlZEFycmF5YCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc1R5cGVkQXJyYXkodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiZcbiAgICBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmICEhdHlwZWRBcnJheVRhZ3NbYmFzZUdldFRhZyh2YWx1ZSldO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc1R5cGVkQXJyYXk7XG4iLAogICAgIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5hcnlgIHdpdGhvdXQgc3VwcG9ydCBmb3Igc3RvcmluZyBtZXRhZGF0YS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2FwIGFyZ3VtZW50cyBmb3IuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VVbmFyeShmdW5jKSB7XG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBmdW5jKHZhbHVlKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVW5hcnk7XG4iLAogICAgInZhciBmcmVlR2xvYmFsID0gcmVxdWlyZSgnLi9fZnJlZUdsb2JhbCcpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgcHJvY2Vzc2AgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVQcm9jZXNzID0gbW9kdWxlRXhwb3J0cyAmJiBmcmVlR2xvYmFsLnByb2Nlc3M7XG5cbi8qKiBVc2VkIHRvIGFjY2VzcyBmYXN0ZXIgTm9kZS5qcyBoZWxwZXJzLiAqL1xudmFyIG5vZGVVdGlsID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIC8vIFVzZSBgdXRpbC50eXBlc2AgZm9yIE5vZGUuanMgMTArLlxuICAgIHZhciB0eXBlcyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlICYmIGZyZWVNb2R1bGUucmVxdWlyZSgndXRpbCcpLnR5cGVzO1xuXG4gICAgaWYgKHR5cGVzKSB7XG4gICAgICByZXR1cm4gdHlwZXM7XG4gICAgfVxuXG4gICAgLy8gTGVnYWN5IGBwcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKWAgZm9yIE5vZGUuanMgPCAxMC5cbiAgICByZXR1cm4gZnJlZVByb2Nlc3MgJiYgZnJlZVByb2Nlc3MuYmluZGluZyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nKCd1dGlsJyk7XG4gIH0gY2F0Y2ggKGUpIHt9XG59KCkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5vZGVVdGlsO1xuIiwKICAgICJ2YXIgYmFzZUlzVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vX2Jhc2VJc1R5cGVkQXJyYXknKSxcbiAgICBiYXNlVW5hcnkgPSByZXF1aXJlKCcuL19iYXNlVW5hcnknKSxcbiAgICBub2RlVXRpbCA9IHJlcXVpcmUoJy4vX25vZGVVdGlsJyk7XG5cbi8qIE5vZGUuanMgaGVscGVyIHJlZmVyZW5jZXMuICovXG52YXIgbm9kZUlzVHlwZWRBcnJheSA9IG5vZGVVdGlsICYmIG5vZGVVdGlsLmlzVHlwZWRBcnJheTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgdHlwZWQgYXJyYXkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzVHlwZWRBcnJheShuZXcgVWludDhBcnJheSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1R5cGVkQXJyYXkoW10pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzVHlwZWRBcnJheSA9IG5vZGVJc1R5cGVkQXJyYXkgPyBiYXNlVW5hcnkobm9kZUlzVHlwZWRBcnJheSkgOiBiYXNlSXNUeXBlZEFycmF5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzVHlwZWRBcnJheTtcbiIsCiAgICAidmFyIGJhc2VUaW1lcyA9IHJlcXVpcmUoJy4vX2Jhc2VUaW1lcycpLFxuICAgIGlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9pc0FyZ3VtZW50cycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0J1ZmZlciA9IHJlcXVpcmUoJy4vaXNCdWZmZXInKSxcbiAgICBpc0luZGV4ID0gcmVxdWlyZSgnLi9faXNJbmRleCcpLFxuICAgIGlzVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vaXNUeXBlZEFycmF5Jyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiB0aGUgYXJyYXktbGlrZSBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5oZXJpdGVkIFNwZWNpZnkgcmV0dXJuaW5nIGluaGVyaXRlZCBwcm9wZXJ0eSBuYW1lcy5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGFycmF5TGlrZUtleXModmFsdWUsIGluaGVyaXRlZCkge1xuICB2YXIgaXNBcnIgPSBpc0FycmF5KHZhbHVlKSxcbiAgICAgIGlzQXJnID0gIWlzQXJyICYmIGlzQXJndW1lbnRzKHZhbHVlKSxcbiAgICAgIGlzQnVmZiA9ICFpc0FyciAmJiAhaXNBcmcgJiYgaXNCdWZmZXIodmFsdWUpLFxuICAgICAgaXNUeXBlID0gIWlzQXJyICYmICFpc0FyZyAmJiAhaXNCdWZmICYmIGlzVHlwZWRBcnJheSh2YWx1ZSksXG4gICAgICBza2lwSW5kZXhlcyA9IGlzQXJyIHx8IGlzQXJnIHx8IGlzQnVmZiB8fCBpc1R5cGUsXG4gICAgICByZXN1bHQgPSBza2lwSW5kZXhlcyA/IGJhc2VUaW1lcyh2YWx1ZS5sZW5ndGgsIFN0cmluZykgOiBbXSxcbiAgICAgIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XG5cbiAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgaWYgKChpbmhlcml0ZWQgfHwgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwga2V5KSkgJiZcbiAgICAgICAgIShza2lwSW5kZXhlcyAmJiAoXG4gICAgICAgICAgIC8vIFNhZmFyaSA5IGhhcyBlbnVtZXJhYmxlIGBhcmd1bWVudHMubGVuZ3RoYCBpbiBzdHJpY3QgbW9kZS5cbiAgICAgICAgICAga2V5ID09ICdsZW5ndGgnIHx8XG4gICAgICAgICAgIC8vIE5vZGUuanMgMC4xMCBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiBidWZmZXJzLlxuICAgICAgICAgICAoaXNCdWZmICYmIChrZXkgPT0gJ29mZnNldCcgfHwga2V5ID09ICdwYXJlbnQnKSkgfHxcbiAgICAgICAgICAgLy8gUGhhbnRvbUpTIDIgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gdHlwZWQgYXJyYXlzLlxuICAgICAgICAgICAoaXNUeXBlICYmIChrZXkgPT0gJ2J1ZmZlcicgfHwga2V5ID09ICdieXRlTGVuZ3RoJyB8fCBrZXkgPT0gJ2J5dGVPZmZzZXQnKSkgfHxcbiAgICAgICAgICAgLy8gU2tpcCBpbmRleCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICBpc0luZGV4KGtleSwgbGVuZ3RoKVxuICAgICAgICApKSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUxpa2VLZXlzO1xuIiwKICAgICIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhIHByb3RvdHlwZSBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm90b3R5cGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNQcm90b3R5cGUodmFsdWUpIHtcbiAgdmFyIEN0b3IgPSB2YWx1ZSAmJiB2YWx1ZS5jb25zdHJ1Y3RvcixcbiAgICAgIHByb3RvID0gKHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3Rvci5wcm90b3R5cGUpIHx8IG9iamVjdFByb3RvO1xuXG4gIHJldHVybiB2YWx1ZSA9PT0gcHJvdG87XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNQcm90b3R5cGU7XG4iLAogICAgIi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlXG4gKiBbYE9iamVjdC5rZXlzYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXG4gKiBleGNlcHQgdGhhdCBpdCBpbmNsdWRlcyBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0aWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBuYXRpdmVLZXlzSW4ob2JqZWN0KSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgaWYgKG9iamVjdCAhPSBudWxsKSB7XG4gICAgZm9yICh2YXIga2V5IGluIE9iamVjdChvYmplY3QpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdGl2ZUtleXNJbjtcbiIsCiAgICAidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIGlzUHJvdG90eXBlID0gcmVxdWlyZSgnLi9faXNQcm90b3R5cGUnKSxcbiAgICBuYXRpdmVLZXlzSW4gPSByZXF1aXJlKCcuL19uYXRpdmVLZXlzSW4nKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzSW5gIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYmFzZUtleXNJbihvYmplY3QpIHtcbiAgaWYgKCFpc09iamVjdChvYmplY3QpKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUtleXNJbihvYmplY3QpO1xuICB9XG4gIHZhciBpc1Byb3RvID0gaXNQcm90b3R5cGUob2JqZWN0KSxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICBpZiAoIShrZXkgPT0gJ2NvbnN0cnVjdG9yJyAmJiAoaXNQcm90byB8fCAhaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpKSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlS2V5c0luO1xuIiwKICAgICJ2YXIgYXJyYXlMaWtlS2V5cyA9IHJlcXVpcmUoJy4vX2FycmF5TGlrZUtleXMnKSxcbiAgICBiYXNlS2V5c0luID0gcmVxdWlyZSgnLi9fYmFzZUtleXNJbicpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXG4gKlxuICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5rZXlzSW4obmV3IEZvbyk7XG4gKiAvLyA9PiBbJ2EnLCAnYicsICdjJ10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqL1xuZnVuY3Rpb24ga2V5c0luKG9iamVjdCkge1xuICByZXR1cm4gaXNBcnJheUxpa2Uob2JqZWN0KSA/IGFycmF5TGlrZUtleXMob2JqZWN0LCB0cnVlKSA6IGJhc2VLZXlzSW4ob2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBrZXlzSW47XG4iLAogICAgInZhciBiYXNlUmVzdCA9IHJlcXVpcmUoJy4vX2Jhc2VSZXN0JyksXG4gICAgZXEgPSByZXF1aXJlKCcuL2VxJyksXG4gICAgaXNJdGVyYXRlZUNhbGwgPSByZXF1aXJlKCcuL19pc0l0ZXJhdGVlQ2FsbCcpLFxuICAgIGtleXNJbiA9IHJlcXVpcmUoJy4va2V5c0luJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQXNzaWducyBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0aWVzIG9mIHNvdXJjZVxuICogb2JqZWN0cyB0byB0aGUgZGVzdGluYXRpb24gb2JqZWN0IGZvciBhbGwgZGVzdGluYXRpb24gcHJvcGVydGllcyB0aGF0XG4gKiByZXNvbHZlIHRvIGB1bmRlZmluZWRgLiBTb3VyY2Ugb2JqZWN0cyBhcmUgYXBwbGllZCBmcm9tIGxlZnQgdG8gcmlnaHQuXG4gKiBPbmNlIGEgcHJvcGVydHkgaXMgc2V0LCBhZGRpdGlvbmFsIHZhbHVlcyBvZiB0aGUgc2FtZSBwcm9wZXJ0eSBhcmUgaWdub3JlZC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAcGFyYW0gey4uLk9iamVjdH0gW3NvdXJjZXNdIFRoZSBzb3VyY2Ugb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKiBAc2VlIF8uZGVmYXVsdHNEZWVwXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uZGVmYXVsdHMoeyAnYSc6IDEgfSwgeyAnYic6IDIgfSwgeyAnYSc6IDMgfSk7XG4gKiAvLyA9PiB7ICdhJzogMSwgJ2InOiAyIH1cbiAqL1xudmFyIGRlZmF1bHRzID0gYmFzZVJlc3QoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2VzKSB7XG4gIG9iamVjdCA9IE9iamVjdChvYmplY3QpO1xuXG4gIHZhciBpbmRleCA9IC0xO1xuICB2YXIgbGVuZ3RoID0gc291cmNlcy5sZW5ndGg7XG4gIHZhciBndWFyZCA9IGxlbmd0aCA+IDIgPyBzb3VyY2VzWzJdIDogdW5kZWZpbmVkO1xuXG4gIGlmIChndWFyZCAmJiBpc0l0ZXJhdGVlQ2FsbChzb3VyY2VzWzBdLCBzb3VyY2VzWzFdLCBndWFyZCkpIHtcbiAgICBsZW5ndGggPSAxO1xuICB9XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgc291cmNlID0gc291cmNlc1tpbmRleF07XG4gICAgdmFyIHByb3BzID0ga2V5c0luKHNvdXJjZSk7XG4gICAgdmFyIHByb3BzSW5kZXggPSAtMTtcbiAgICB2YXIgcHJvcHNMZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cbiAgICB3aGlsZSAoKytwcm9wc0luZGV4IDwgcHJvcHNMZW5ndGgpIHtcbiAgICAgIHZhciBrZXkgPSBwcm9wc1twcm9wc0luZGV4XTtcbiAgICAgIHZhciB2YWx1ZSA9IG9iamVjdFtrZXldO1xuXG4gICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgIChlcSh2YWx1ZSwgb2JqZWN0UHJvdG9ba2V5XSkgJiYgIWhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpKSkge1xuICAgICAgICBvYmplY3Rba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvYmplY3Q7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBkZWZhdWx0cztcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbi8qXG4gIFRoaXMgZmlsZSBpcyBhIHJlZHVjZWQgYW5kIGFkYXB0ZWQgdmVyc2lvbiBvZiB0aGUgbWFpbiBsaWIvaW50ZXJuYWwvcGVyX2NvbnRleHQvcHJpbW9yZGlhbHMuanMgZmlsZSBkZWZpbmVkIGF0XG5cbiAgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvbWFzdGVyL2xpYi9pbnRlcm5hbC9wZXJfY29udGV4dC9wcmltb3JkaWFscy5qc1xuXG4gIERvbid0IHRyeSB0byByZXBsYWNlIHdpdGggdGhlIG9yaWdpbmFsIGZpbGUgYW5kIGtlZXAgaXQgdXAgdG8gZGF0ZSB3aXRoIHRoZSB1cHN0cmVhbSBmaWxlLlxuKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICBBcnJheUlzQXJyYXkoc2VsZikge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHNlbGYpXG4gIH0sXG4gIEFycmF5UHJvdG90eXBlSW5jbHVkZXMoc2VsZiwgZWwpIHtcbiAgICByZXR1cm4gc2VsZi5pbmNsdWRlcyhlbClcbiAgfSxcbiAgQXJyYXlQcm90b3R5cGVJbmRleE9mKHNlbGYsIGVsKSB7XG4gICAgcmV0dXJuIHNlbGYuaW5kZXhPZihlbClcbiAgfSxcbiAgQXJyYXlQcm90b3R5cGVKb2luKHNlbGYsIHNlcCkge1xuICAgIHJldHVybiBzZWxmLmpvaW4oc2VwKVxuICB9LFxuICBBcnJheVByb3RvdHlwZU1hcChzZWxmLCBmbikge1xuICAgIHJldHVybiBzZWxmLm1hcChmbilcbiAgfSxcbiAgQXJyYXlQcm90b3R5cGVQb3Aoc2VsZiwgZWwpIHtcbiAgICByZXR1cm4gc2VsZi5wb3AoZWwpXG4gIH0sXG4gIEFycmF5UHJvdG90eXBlUHVzaChzZWxmLCBlbCkge1xuICAgIHJldHVybiBzZWxmLnB1c2goZWwpXG4gIH0sXG4gIEFycmF5UHJvdG90eXBlU2xpY2Uoc2VsZiwgc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiBzZWxmLnNsaWNlKHN0YXJ0LCBlbmQpXG4gIH0sXG4gIEVycm9yLFxuICBGdW5jdGlvblByb3RvdHlwZUNhbGwoZm4sIHRoaXNBcmdzLCAuLi5hcmdzKSB7XG4gICAgcmV0dXJuIGZuLmNhbGwodGhpc0FyZ3MsIC4uLmFyZ3MpXG4gIH0sXG4gIEZ1bmN0aW9uUHJvdG90eXBlU3ltYm9sSGFzSW5zdGFuY2Uoc2VsZiwgaW5zdGFuY2UpIHtcbiAgICByZXR1cm4gRnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV0uY2FsbChzZWxmLCBpbnN0YW5jZSlcbiAgfSxcbiAgTWF0aEZsb29yOiBNYXRoLmZsb29yLFxuICBOdW1iZXIsXG4gIE51bWJlcklzSW50ZWdlcjogTnVtYmVyLmlzSW50ZWdlcixcbiAgTnVtYmVySXNOYU46IE51bWJlci5pc05hTixcbiAgTnVtYmVyTUFYX1NBRkVfSU5URUdFUjogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsXG4gIE51bWJlck1JTl9TQUZFX0lOVEVHRVI6IE51bWJlci5NSU5fU0FGRV9JTlRFR0VSLFxuICBOdW1iZXJQYXJzZUludDogTnVtYmVyLnBhcnNlSW50LFxuICBPYmplY3REZWZpbmVQcm9wZXJ0aWVzKHNlbGYsIHByb3BzKSB7XG4gICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHNlbGYsIHByb3BzKVxuICB9LFxuICBPYmplY3REZWZpbmVQcm9wZXJ0eShzZWxmLCBuYW1lLCBwcm9wKSB7XG4gICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzZWxmLCBuYW1lLCBwcm9wKVxuICB9LFxuICBPYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc2VsZiwgbmFtZSkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNlbGYsIG5hbWUpXG4gIH0sXG4gIE9iamVjdEtleXMob2JqKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iailcbiAgfSxcbiAgT2JqZWN0U2V0UHJvdG90eXBlT2YodGFyZ2V0LCBwcm90bykge1xuICAgIHJldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YodGFyZ2V0LCBwcm90bylcbiAgfSxcbiAgUHJvbWlzZSxcbiAgUHJvbWlzZVByb3RvdHlwZUNhdGNoKHNlbGYsIGZuKSB7XG4gICAgcmV0dXJuIHNlbGYuY2F0Y2goZm4pXG4gIH0sXG4gIFByb21pc2VQcm90b3R5cGVUaGVuKHNlbGYsIHRoZW5GbiwgY2F0Y2hGbikge1xuICAgIHJldHVybiBzZWxmLnRoZW4odGhlbkZuLCBjYXRjaEZuKVxuICB9LFxuICBQcm9taXNlUmVqZWN0KGVycikge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnIpXG4gIH0sXG4gIFByb21pc2VSZXNvbHZlKHZhbCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsKVxuICB9LFxuICBSZWZsZWN0QXBwbHk6IFJlZmxlY3QuYXBwbHksXG4gIFJlZ0V4cFByb3RvdHlwZVRlc3Qoc2VsZiwgdmFsdWUpIHtcbiAgICByZXR1cm4gc2VsZi50ZXN0KHZhbHVlKVxuICB9LFxuICBTYWZlU2V0OiBTZXQsXG4gIFN0cmluZyxcbiAgU3RyaW5nUHJvdG90eXBlU2xpY2Uoc2VsZiwgc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiBzZWxmLnNsaWNlKHN0YXJ0LCBlbmQpXG4gIH0sXG4gIFN0cmluZ1Byb3RvdHlwZVRvTG93ZXJDYXNlKHNlbGYpIHtcbiAgICByZXR1cm4gc2VsZi50b0xvd2VyQ2FzZSgpXG4gIH0sXG4gIFN0cmluZ1Byb3RvdHlwZVRvVXBwZXJDYXNlKHNlbGYpIHtcbiAgICByZXR1cm4gc2VsZi50b1VwcGVyQ2FzZSgpXG4gIH0sXG4gIFN0cmluZ1Byb3RvdHlwZVRyaW0oc2VsZikge1xuICAgIHJldHVybiBzZWxmLnRyaW0oKVxuICB9LFxuICBTeW1ib2wsXG4gIFN5bWJvbEZvcjogU3ltYm9sLmZvcixcbiAgU3ltYm9sQXN5bmNJdGVyYXRvcjogU3ltYm9sLmFzeW5jSXRlcmF0b3IsXG4gIFN5bWJvbEhhc0luc3RhbmNlOiBTeW1ib2wuaGFzSW5zdGFuY2UsXG4gIFN5bWJvbEl0ZXJhdG9yOiBTeW1ib2wuaXRlcmF0b3IsXG4gIFN5bWJvbERpc3Bvc2U6IFN5bWJvbC5kaXNwb3NlIHx8IFN5bWJvbCgnU3ltYm9sLmRpc3Bvc2UnKSxcbiAgU3ltYm9sQXN5bmNEaXNwb3NlOiBTeW1ib2wuYXN5bmNEaXNwb3NlIHx8IFN5bWJvbCgnU3ltYm9sLmFzeW5jRGlzcG9zZScpLFxuICBUeXBlZEFycmF5UHJvdG90eXBlU2V0KHNlbGYsIGJ1ZiwgbGVuKSB7XG4gICAgcmV0dXJuIHNlbGYuc2V0KGJ1ZiwgbGVuKVxuICB9LFxuICBCb29sZWFuOiBCb29sZWFuLFxuICBVaW50OEFycmF5XG59XG4iLAogICAgIi8qKlxuICogQGF1dGhvciBUb3J1IE5hZ2FzaGltYSA8aHR0cHM6Ly9naXRodWIuY29tL215c3RpY2F0ZWE+XG4gKiBAY29weXJpZ2h0IDIwMTUgVG9ydSBOYWdhc2hpbWEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBTZWUgTElDRU5TRSBmaWxlIGluIHJvb3QgZGlyZWN0b3J5IGZvciBmdWxsIGxpY2Vuc2UuXG4gKi9cbid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBQcml2YXRlRGF0YVxuICogQHByb3BlcnR5IHtFdmVudFRhcmdldH0gZXZlbnRUYXJnZXQgVGhlIGV2ZW50IHRhcmdldC5cbiAqIEBwcm9wZXJ0eSB7e3R5cGU6c3RyaW5nfX0gZXZlbnQgVGhlIG9yaWdpbmFsIGV2ZW50IG9iamVjdC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBldmVudFBoYXNlIFRoZSBjdXJyZW50IGV2ZW50IHBoYXNlLlxuICogQHByb3BlcnR5IHtFdmVudFRhcmdldHxudWxsfSBjdXJyZW50VGFyZ2V0IFRoZSBjdXJyZW50IGV2ZW50IHRhcmdldC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gY2FuY2VsZWQgVGhlIGZsYWcgdG8gcHJldmVudCBkZWZhdWx0LlxuICogQHByb3BlcnR5IHtib29sZWFufSBzdG9wcGVkIFRoZSBmbGFnIHRvIHN0b3AgcHJvcGFnYXRpb24uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGltbWVkaWF0ZVN0b3BwZWQgVGhlIGZsYWcgdG8gc3RvcCBwcm9wYWdhdGlvbiBpbW1lZGlhdGVseS5cbiAqIEBwcm9wZXJ0eSB7RnVuY3Rpb258bnVsbH0gcGFzc2l2ZUxpc3RlbmVyIFRoZSBsaXN0ZW5lciBpZiB0aGUgY3VycmVudCBsaXN0ZW5lciBpcyBwYXNzaXZlLiBPdGhlcndpc2UgdGhpcyBpcyBudWxsLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHRpbWVTdGFtcCBUaGUgdW5peCB0aW1lLlxuICogQHByaXZhdGVcbiAqL1xuXG4vKipcbiAqIFByaXZhdGUgZGF0YSBmb3IgZXZlbnQgd3JhcHBlcnMuXG4gKiBAdHlwZSB7V2Vha01hcDxFdmVudCwgUHJpdmF0ZURhdGE+fVxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgcHJpdmF0ZURhdGEgPSBuZXcgV2Vha01hcCgpO1xuXG4vKipcbiAqIENhY2hlIGZvciB3cmFwcGVyIGNsYXNzZXMuXG4gKiBAdHlwZSB7V2Vha01hcDxPYmplY3QsIEZ1bmN0aW9uPn1cbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IHdyYXBwZXJzID0gbmV3IFdlYWtNYXAoKTtcblxuLyoqXG4gKiBHZXQgcHJpdmF0ZSBkYXRhLlxuICogQHBhcmFtIHtFdmVudH0gZXZlbnQgVGhlIGV2ZW50IG9iamVjdCB0byBnZXQgcHJpdmF0ZSBkYXRhLlxuICogQHJldHVybnMge1ByaXZhdGVEYXRhfSBUaGUgcHJpdmF0ZSBkYXRhIG9mIHRoZSBldmVudC5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHBkKGV2ZW50KSB7XG4gICAgY29uc3QgcmV0diA9IHByaXZhdGVEYXRhLmdldChldmVudCk7XG4gICAgY29uc29sZS5hc3NlcnQoXG4gICAgICAgIHJldHYgIT0gbnVsbCxcbiAgICAgICAgXCIndGhpcycgaXMgZXhwZWN0ZWQgYW4gRXZlbnQgb2JqZWN0LCBidXQgZ290XCIsXG4gICAgICAgIGV2ZW50XG4gICAgKTtcbiAgICByZXR1cm4gcmV0dlxufVxuXG4vKipcbiAqIGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jc2V0LXRoZS1jYW5jZWxlZC1mbGFnXG4gKiBAcGFyYW0gZGF0YSB7UHJpdmF0ZURhdGF9IHByaXZhdGUgZGF0YS5cbiAqL1xuZnVuY3Rpb24gc2V0Q2FuY2VsRmxhZyhkYXRhKSB7XG4gICAgaWYgKGRhdGEucGFzc2l2ZUxpc3RlbmVyICE9IG51bGwpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdHlwZW9mIGNvbnNvbGUgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICAgICAgICAgIHR5cGVvZiBjb25zb2xlLmVycm9yID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgIFwiVW5hYmxlIHRvIHByZXZlbnREZWZhdWx0IGluc2lkZSBwYXNzaXZlIGV2ZW50IGxpc3RlbmVyIGludm9jYXRpb24uXCIsXG4gICAgICAgICAgICAgICAgZGF0YS5wYXNzaXZlTGlzdGVuZXJcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmICghZGF0YS5ldmVudC5jYW5jZWxhYmxlKSB7XG4gICAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGRhdGEuY2FuY2VsZWQgPSB0cnVlO1xuICAgIGlmICh0eXBlb2YgZGF0YS5ldmVudC5wcmV2ZW50RGVmYXVsdCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGRhdGEuZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2ludGVyZmFjZS1ldmVudFxuICogQHByaXZhdGVcbiAqL1xuLyoqXG4gKiBUaGUgZXZlbnQgd3JhcHBlci5cbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtFdmVudFRhcmdldH0gZXZlbnRUYXJnZXQgVGhlIGV2ZW50IHRhcmdldCBvZiB0aGlzIGRpc3BhdGNoaW5nLlxuICogQHBhcmFtIHtFdmVudHx7dHlwZTpzdHJpbmd9fSBldmVudCBUaGUgb3JpZ2luYWwgZXZlbnQgdG8gd3JhcC5cbiAqL1xuZnVuY3Rpb24gRXZlbnQoZXZlbnRUYXJnZXQsIGV2ZW50KSB7XG4gICAgcHJpdmF0ZURhdGEuc2V0KHRoaXMsIHtcbiAgICAgICAgZXZlbnRUYXJnZXQsXG4gICAgICAgIGV2ZW50LFxuICAgICAgICBldmVudFBoYXNlOiAyLFxuICAgICAgICBjdXJyZW50VGFyZ2V0OiBldmVudFRhcmdldCxcbiAgICAgICAgY2FuY2VsZWQ6IGZhbHNlLFxuICAgICAgICBzdG9wcGVkOiBmYWxzZSxcbiAgICAgICAgaW1tZWRpYXRlU3RvcHBlZDogZmFsc2UsXG4gICAgICAgIHBhc3NpdmVMaXN0ZW5lcjogbnVsbCxcbiAgICAgICAgdGltZVN0YW1wOiBldmVudC50aW1lU3RhbXAgfHwgRGF0ZS5ub3coKSxcbiAgICB9KTtcblxuICAgIC8vIGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI1VuZm9yZ2VhYmxlXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwiaXNUcnVzdGVkXCIsIHsgdmFsdWU6IGZhbHNlLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xuXG4gICAgLy8gRGVmaW5lIGFjY2Vzc29yc1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhldmVudCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGtleXNbaV07XG4gICAgICAgIGlmICghKGtleSBpbiB0aGlzKSkge1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIGtleSwgZGVmaW5lUmVkaXJlY3REZXNjcmlwdG9yKGtleSkpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBTaG91bGQgYmUgZW51bWVyYWJsZSwgYnV0IGNsYXNzIG1ldGhvZHMgYXJlIG5vdCBlbnVtZXJhYmxlLlxuRXZlbnQucHJvdG90eXBlID0ge1xuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoaXMgZXZlbnQuXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICBnZXQgdHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHBkKHRoaXMpLmV2ZW50LnR5cGVcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHRhcmdldCBvZiB0aGlzIGV2ZW50LlxuICAgICAqIEB0eXBlIHtFdmVudFRhcmdldH1cbiAgICAgKi9cbiAgICBnZXQgdGFyZ2V0KCkge1xuICAgICAgICByZXR1cm4gcGQodGhpcykuZXZlbnRUYXJnZXRcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHRhcmdldCBvZiB0aGlzIGV2ZW50LlxuICAgICAqIEB0eXBlIHtFdmVudFRhcmdldH1cbiAgICAgKi9cbiAgICBnZXQgY3VycmVudFRhcmdldCgpIHtcbiAgICAgICAgcmV0dXJuIHBkKHRoaXMpLmN1cnJlbnRUYXJnZXRcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMge0V2ZW50VGFyZ2V0W119IFRoZSBjb21wb3NlZCBwYXRoIG9mIHRoaXMgZXZlbnQuXG4gICAgICovXG4gICAgY29tcG9zZWRQYXRoKCkge1xuICAgICAgICBjb25zdCBjdXJyZW50VGFyZ2V0ID0gcGQodGhpcykuY3VycmVudFRhcmdldDtcbiAgICAgICAgaWYgKGN1cnJlbnRUYXJnZXQgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtjdXJyZW50VGFyZ2V0XVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb25zdGFudCBvZiBOT05FLlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgZ2V0IE5PTkUoKSB7XG4gICAgICAgIHJldHVybiAwXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnN0YW50IG9mIENBUFRVUklOR19QSEFTRS5cbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIGdldCBDQVBUVVJJTkdfUEhBU0UoKSB7XG4gICAgICAgIHJldHVybiAxXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnN0YW50IG9mIEFUX1RBUkdFVC5cbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIGdldCBBVF9UQVJHRVQoKSB7XG4gICAgICAgIHJldHVybiAyXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnN0YW50IG9mIEJVQkJMSU5HX1BIQVNFLlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgZ2V0IEJVQkJMSU5HX1BIQVNFKCkge1xuICAgICAgICByZXR1cm4gM1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGFyZ2V0IG9mIHRoaXMgZXZlbnQuXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBnZXQgZXZlbnRQaGFzZSgpIHtcbiAgICAgICAgcmV0dXJuIHBkKHRoaXMpLmV2ZW50UGhhc2VcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU3RvcCBldmVudCBidWJibGluZy5cbiAgICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICAgKi9cbiAgICBzdG9wUHJvcGFnYXRpb24oKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBwZCh0aGlzKTtcblxuICAgICAgICBkYXRhLnN0b3BwZWQgPSB0cnVlO1xuICAgICAgICBpZiAodHlwZW9mIGRhdGEuZXZlbnQuc3RvcFByb3BhZ2F0aW9uID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIGRhdGEuZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU3RvcCBldmVudCBidWJibGluZy5cbiAgICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICAgKi9cbiAgICBzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBwZCh0aGlzKTtcblxuICAgICAgICBkYXRhLnN0b3BwZWQgPSB0cnVlO1xuICAgICAgICBkYXRhLmltbWVkaWF0ZVN0b3BwZWQgPSB0cnVlO1xuICAgICAgICBpZiAodHlwZW9mIGRhdGEuZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIGRhdGEuZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGZsYWcgdG8gYmUgYnViYmxpbmcuXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgZ2V0IGJ1YmJsZXMoKSB7XG4gICAgICAgIHJldHVybiBCb29sZWFuKHBkKHRoaXMpLmV2ZW50LmJ1YmJsZXMpXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBmbGFnIHRvIGJlIGNhbmNlbGFibGUuXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgZ2V0IGNhbmNlbGFibGUoKSB7XG4gICAgICAgIHJldHVybiBCb29sZWFuKHBkKHRoaXMpLmV2ZW50LmNhbmNlbGFibGUpXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbmNlbCB0aGlzIGV2ZW50LlxuICAgICAqIEByZXR1cm5zIHt2b2lkfVxuICAgICAqL1xuICAgIHByZXZlbnREZWZhdWx0KCkge1xuICAgICAgICBzZXRDYW5jZWxGbGFnKHBkKHRoaXMpKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGZsYWcgdG8gaW5kaWNhdGUgY2FuY2VsbGF0aW9uIHN0YXRlLlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIGdldCBkZWZhdWx0UHJldmVudGVkKCkge1xuICAgICAgICByZXR1cm4gcGQodGhpcykuY2FuY2VsZWRcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGZsYWcgdG8gYmUgY29tcG9zZWQuXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgZ2V0IGNvbXBvc2VkKCkge1xuICAgICAgICByZXR1cm4gQm9vbGVhbihwZCh0aGlzKS5ldmVudC5jb21wb3NlZClcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHVuaXggdGltZSBvZiB0aGlzIGV2ZW50LlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgZ2V0IHRpbWVTdGFtcCgpIHtcbiAgICAgICAgcmV0dXJuIHBkKHRoaXMpLnRpbWVTdGFtcFxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGFyZ2V0IG9mIHRoaXMgZXZlbnQuXG4gICAgICogQHR5cGUge0V2ZW50VGFyZ2V0fVxuICAgICAqIEBkZXByZWNhdGVkXG4gICAgICovXG4gICAgZ2V0IHNyY0VsZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiBwZCh0aGlzKS5ldmVudFRhcmdldFxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZmxhZyB0byBzdG9wIGV2ZW50IGJ1YmJsaW5nLlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBkZXByZWNhdGVkXG4gICAgICovXG4gICAgZ2V0IGNhbmNlbEJ1YmJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHBkKHRoaXMpLnN0b3BwZWRcbiAgICB9LFxuICAgIHNldCBjYW5jZWxCdWJibGUodmFsdWUpIHtcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGF0YSA9IHBkKHRoaXMpO1xuXG4gICAgICAgIGRhdGEuc3RvcHBlZCA9IHRydWU7XG4gICAgICAgIGlmICh0eXBlb2YgZGF0YS5ldmVudC5jYW5jZWxCdWJibGUgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICBkYXRhLmV2ZW50LmNhbmNlbEJ1YmJsZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGZsYWcgdG8gaW5kaWNhdGUgY2FuY2VsbGF0aW9uIHN0YXRlLlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBkZXByZWNhdGVkXG4gICAgICovXG4gICAgZ2V0IHJldHVyblZhbHVlKCkge1xuICAgICAgICByZXR1cm4gIXBkKHRoaXMpLmNhbmNlbGVkXG4gICAgfSxcbiAgICBzZXQgcmV0dXJuVmFsdWUodmFsdWUpIHtcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgc2V0Q2FuY2VsRmxhZyhwZCh0aGlzKSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZSB0aGlzIGV2ZW50IG9iamVjdC4gQnV0IGRvIG5vdGhpbmcgdW5kZXIgZXZlbnQgZGlzcGF0Y2hpbmcuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgVGhlIGV2ZW50IHR5cGUuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbYnViYmxlcz1mYWxzZV0gVGhlIGZsYWcgdG8gYmUgcG9zc2libGUgdG8gYnViYmxlIHVwLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NhbmNlbGFibGU9ZmFsc2VdIFRoZSBmbGFnIHRvIGJlIHBvc3NpYmxlIHRvIGNhbmNlbC5cbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqL1xuICAgIGluaXRFdmVudCgpIHtcbiAgICAgICAgLy8gRG8gbm90aGluZy5cbiAgICB9LFxufTtcblxuLy8gYGNvbnN0cnVjdG9yYCBpcyBub3QgZW51bWVyYWJsZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShFdmVudC5wcm90b3R5cGUsIFwiY29uc3RydWN0b3JcIiwge1xuICAgIHZhbHVlOiBFdmVudCxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgd3JpdGFibGU6IHRydWUsXG59KTtcblxuLy8gRW5zdXJlIGBldmVudCBpbnN0YW5jZW9mIHdpbmRvdy5FdmVudGAgaXMgYHRydWVgLlxuaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5FdmVudCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihFdmVudC5wcm90b3R5cGUsIHdpbmRvdy5FdmVudC5wcm90b3R5cGUpO1xuXG4gICAgLy8gTWFrZSBhc3NvY2lhdGlvbiBmb3Igd3JhcHBlcnMuXG4gICAgd3JhcHBlcnMuc2V0KHdpbmRvdy5FdmVudC5wcm90b3R5cGUsIEV2ZW50KTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3IgdG8gcmVkaXJlY3QgYSBnaXZlbiBwcm9wZXJ0eS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgUHJvcGVydHkgbmFtZSB0byBkZWZpbmUgcHJvcGVydHkgZGVzY3JpcHRvci5cbiAqIEByZXR1cm5zIHtQcm9wZXJ0eURlc2NyaXB0b3J9IFRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9yIHRvIHJlZGlyZWN0IHRoZSBwcm9wZXJ0eS5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGRlZmluZVJlZGlyZWN0RGVzY3JpcHRvcihrZXkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgICByZXR1cm4gcGQodGhpcykuZXZlbnRba2V5XVxuICAgICAgICB9LFxuICAgICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgICAgIHBkKHRoaXMpLmV2ZW50W2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIH1cbn1cblxuLyoqXG4gKiBHZXQgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3IgdG8gY2FsbCBhIGdpdmVuIG1ldGhvZCBwcm9wZXJ0eS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgUHJvcGVydHkgbmFtZSB0byBkZWZpbmUgcHJvcGVydHkgZGVzY3JpcHRvci5cbiAqIEByZXR1cm5zIHtQcm9wZXJ0eURlc2NyaXB0b3J9IFRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9yIHRvIGNhbGwgdGhlIG1ldGhvZCBwcm9wZXJ0eS5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGRlZmluZUNhbGxEZXNjcmlwdG9yKGtleSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlKCkge1xuICAgICAgICAgICAgY29uc3QgZXZlbnQgPSBwZCh0aGlzKS5ldmVudDtcbiAgICAgICAgICAgIHJldHVybiBldmVudFtrZXldLmFwcGx5KGV2ZW50LCBhcmd1bWVudHMpXG4gICAgICAgIH0sXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICB9XG59XG5cbi8qKlxuICogRGVmaW5lIG5ldyB3cmFwcGVyIGNsYXNzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gQmFzZUV2ZW50IFRoZSBiYXNlIHdyYXBwZXIgY2xhc3MuXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvdG8gVGhlIHByb3RvdHlwZSBvZiB0aGUgb3JpZ2luYWwgZXZlbnQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFRoZSBkZWZpbmVkIHdyYXBwZXIgY2xhc3MuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBkZWZpbmVXcmFwcGVyKEJhc2VFdmVudCwgcHJvdG8pIHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMocHJvdG8pO1xuICAgIGlmIChrZXlzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gQmFzZUV2ZW50XG4gICAgfVxuXG4gICAgLyoqIEN1c3RvbUV2ZW50ICovXG4gICAgZnVuY3Rpb24gQ3VzdG9tRXZlbnQoZXZlbnRUYXJnZXQsIGV2ZW50KSB7XG4gICAgICAgIEJhc2VFdmVudC5jYWxsKHRoaXMsIGV2ZW50VGFyZ2V0LCBldmVudCk7XG4gICAgfVxuXG4gICAgQ3VzdG9tRXZlbnQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShCYXNlRXZlbnQucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBDdXN0b21FdmVudCwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9LFxuICAgIH0pO1xuXG4gICAgLy8gRGVmaW5lIGFjY2Vzc29ycy5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgaWYgKCEoa2V5IGluIEJhc2VFdmVudC5wcm90b3R5cGUpKSB7XG4gICAgICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwcm90bywga2V5KTtcbiAgICAgICAgICAgIGNvbnN0IGlzRnVuYyA9IHR5cGVvZiBkZXNjcmlwdG9yLnZhbHVlID09PSBcImZ1bmN0aW9uXCI7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoXG4gICAgICAgICAgICAgICAgQ3VzdG9tRXZlbnQucHJvdG90eXBlLFxuICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICBpc0Z1bmNcbiAgICAgICAgICAgICAgICAgICAgPyBkZWZpbmVDYWxsRGVzY3JpcHRvcihrZXkpXG4gICAgICAgICAgICAgICAgICAgIDogZGVmaW5lUmVkaXJlY3REZXNjcmlwdG9yKGtleSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gQ3VzdG9tRXZlbnRcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHdyYXBwZXIgY2xhc3Mgb2YgYSBnaXZlbiBwcm90b3R5cGUuXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvdG8gVGhlIHByb3RvdHlwZSBvZiB0aGUgb3JpZ2luYWwgZXZlbnQgdG8gZ2V0IGl0cyB3cmFwcGVyLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBUaGUgd3JhcHBlciBjbGFzcy5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGdldFdyYXBwZXIocHJvdG8pIHtcbiAgICBpZiAocHJvdG8gPT0gbnVsbCB8fCBwcm90byA9PT0gT2JqZWN0LnByb3RvdHlwZSkge1xuICAgICAgICByZXR1cm4gRXZlbnRcbiAgICB9XG5cbiAgICBsZXQgd3JhcHBlciA9IHdyYXBwZXJzLmdldChwcm90byk7XG4gICAgaWYgKHdyYXBwZXIgPT0gbnVsbCkge1xuICAgICAgICB3cmFwcGVyID0gZGVmaW5lV3JhcHBlcihnZXRXcmFwcGVyKE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90bykpLCBwcm90byk7XG4gICAgICAgIHdyYXBwZXJzLnNldChwcm90bywgd3JhcHBlcik7XG4gICAgfVxuICAgIHJldHVybiB3cmFwcGVyXG59XG5cbi8qKlxuICogV3JhcCBhIGdpdmVuIGV2ZW50IHRvIG1hbmFnZW1lbnQgYSBkaXNwYXRjaGluZy5cbiAqIEBwYXJhbSB7RXZlbnRUYXJnZXR9IGV2ZW50VGFyZ2V0IFRoZSBldmVudCB0YXJnZXQgb2YgdGhpcyBkaXNwYXRjaGluZy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBldmVudCBUaGUgZXZlbnQgdG8gd3JhcC5cbiAqIEByZXR1cm5zIHtFdmVudH0gVGhlIHdyYXBwZXIgaW5zdGFuY2UuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiB3cmFwRXZlbnQoZXZlbnRUYXJnZXQsIGV2ZW50KSB7XG4gICAgY29uc3QgV3JhcHBlciA9IGdldFdyYXBwZXIoT2JqZWN0LmdldFByb3RvdHlwZU9mKGV2ZW50KSk7XG4gICAgcmV0dXJuIG5ldyBXcmFwcGVyKGV2ZW50VGFyZ2V0LCBldmVudClcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGltbWVkaWF0ZVN0b3BwZWQgZmxhZyBvZiBhIGdpdmVuIGV2ZW50LlxuICogQHBhcmFtIHtFdmVudH0gZXZlbnQgVGhlIGV2ZW50IHRvIGdldC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBUaGUgZmxhZyB0byBzdG9wIHByb3BhZ2F0aW9uIGltbWVkaWF0ZWx5LlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaXNTdG9wcGVkKGV2ZW50KSB7XG4gICAgcmV0dXJuIHBkKGV2ZW50KS5pbW1lZGlhdGVTdG9wcGVkXG59XG5cbi8qKlxuICogU2V0IHRoZSBjdXJyZW50IGV2ZW50IHBoYXNlIG9mIGEgZ2l2ZW4gZXZlbnQuXG4gKiBAcGFyYW0ge0V2ZW50fSBldmVudCBUaGUgZXZlbnQgdG8gc2V0IGN1cnJlbnQgdGFyZ2V0LlxuICogQHBhcmFtIHtudW1iZXJ9IGV2ZW50UGhhc2UgTmV3IGV2ZW50IHBoYXNlLlxuICogQHJldHVybnMge3ZvaWR9XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzZXRFdmVudFBoYXNlKGV2ZW50LCBldmVudFBoYXNlKSB7XG4gICAgcGQoZXZlbnQpLmV2ZW50UGhhc2UgPSBldmVudFBoYXNlO1xufVxuXG4vKipcbiAqIFNldCB0aGUgY3VycmVudCB0YXJnZXQgb2YgYSBnaXZlbiBldmVudC5cbiAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IFRoZSBldmVudCB0byBzZXQgY3VycmVudCB0YXJnZXQuXG4gKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fG51bGx9IGN1cnJlbnRUYXJnZXQgTmV3IGN1cnJlbnQgdGFyZ2V0LlxuICogQHJldHVybnMge3ZvaWR9XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzZXRDdXJyZW50VGFyZ2V0KGV2ZW50LCBjdXJyZW50VGFyZ2V0KSB7XG4gICAgcGQoZXZlbnQpLmN1cnJlbnRUYXJnZXQgPSBjdXJyZW50VGFyZ2V0O1xufVxuXG4vKipcbiAqIFNldCBhIHBhc3NpdmUgbGlzdGVuZXIgb2YgYSBnaXZlbiBldmVudC5cbiAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IFRoZSBldmVudCB0byBzZXQgY3VycmVudCB0YXJnZXQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufG51bGx9IHBhc3NpdmVMaXN0ZW5lciBOZXcgcGFzc2l2ZSBsaXN0ZW5lci5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gc2V0UGFzc2l2ZUxpc3RlbmVyKGV2ZW50LCBwYXNzaXZlTGlzdGVuZXIpIHtcbiAgICBwZChldmVudCkucGFzc2l2ZUxpc3RlbmVyID0gcGFzc2l2ZUxpc3RlbmVyO1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IExpc3RlbmVyTm9kZVxuICogQHByb3BlcnR5IHtGdW5jdGlvbn0gbGlzdGVuZXJcbiAqIEBwcm9wZXJ0eSB7MXwyfDN9IGxpc3RlbmVyVHlwZVxuICogQHByb3BlcnR5IHtib29sZWFufSBwYXNzaXZlXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IG9uY2VcbiAqIEBwcm9wZXJ0eSB7TGlzdGVuZXJOb2RlfG51bGx9IG5leHRcbiAqIEBwcml2YXRlXG4gKi9cblxuLyoqXG4gKiBAdHlwZSB7V2Vha01hcDxvYmplY3QsIE1hcDxzdHJpbmcsIExpc3RlbmVyTm9kZT4+fVxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgbGlzdGVuZXJzTWFwID0gbmV3IFdlYWtNYXAoKTtcblxuLy8gTGlzdGVuZXIgdHlwZXNcbmNvbnN0IENBUFRVUkUgPSAxO1xuY29uc3QgQlVCQkxFID0gMjtcbmNvbnN0IEFUVFJJQlVURSA9IDM7XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciBhIGdpdmVuIHZhbHVlIGlzIGFuIG9iamVjdCBvciBub3QuXG4gKiBAcGFyYW0ge2FueX0geCBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSB2YWx1ZSBpcyBhbiBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHgpIHtcbiAgICByZXR1cm4geCAhPT0gbnVsbCAmJiB0eXBlb2YgeCA9PT0gXCJvYmplY3RcIiAvL2VzbGludC1kaXNhYmxlLWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXhcbn1cblxuLyoqXG4gKiBHZXQgbGlzdGVuZXJzLlxuICogQHBhcmFtIHtFdmVudFRhcmdldH0gZXZlbnRUYXJnZXQgVGhlIGV2ZW50IHRhcmdldCB0byBnZXQuXG4gKiBAcmV0dXJucyB7TWFwPHN0cmluZywgTGlzdGVuZXJOb2RlPn0gVGhlIGxpc3RlbmVycy5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGdldExpc3RlbmVycyhldmVudFRhcmdldCkge1xuICAgIGNvbnN0IGxpc3RlbmVycyA9IGxpc3RlbmVyc01hcC5nZXQoZXZlbnRUYXJnZXQpO1xuICAgIGlmIChsaXN0ZW5lcnMgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgXCIndGhpcycgaXMgZXhwZWN0ZWQgYW4gRXZlbnRUYXJnZXQgb2JqZWN0LCBidXQgZ290IGFub3RoZXIgdmFsdWUuXCJcbiAgICAgICAgKVxuICAgIH1cbiAgICByZXR1cm4gbGlzdGVuZXJzXG59XG5cbi8qKlxuICogR2V0IHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgZXZlbnQgYXR0cmlidXRlIG9mIGEgZ2l2ZW4gZXZlbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lIFRoZSBldmVudCBuYW1lIHRvIGdldCBwcm9wZXJ0eSBkZXNjcmlwdG9yLlxuICogQHJldHVybnMge1Byb3BlcnR5RGVzY3JpcHRvcn0gVGhlIHByb3BlcnR5IGRlc2NyaXB0b3IuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBkZWZpbmVFdmVudEF0dHJpYnV0ZURlc2NyaXB0b3IoZXZlbnROYW1lKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gZ2V0TGlzdGVuZXJzKHRoaXMpO1xuICAgICAgICAgICAgbGV0IG5vZGUgPSBsaXN0ZW5lcnMuZ2V0KGV2ZW50TmFtZSk7XG4gICAgICAgICAgICB3aGlsZSAobm9kZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGUubGlzdGVuZXJUeXBlID09PSBBVFRSSUJVVEUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUubGlzdGVuZXJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUubmV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgIH0sXG5cbiAgICAgICAgc2V0KGxpc3RlbmVyKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGxpc3RlbmVyICE9PSBcImZ1bmN0aW9uXCIgJiYgIWlzT2JqZWN0KGxpc3RlbmVyKSkge1xuICAgICAgICAgICAgICAgIGxpc3RlbmVyID0gbnVsbDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gZ2V0TGlzdGVuZXJzKHRoaXMpO1xuXG4gICAgICAgICAgICAvLyBUcmF2ZXJzZSB0byB0aGUgdGFpbCB3aGlsZSByZW1vdmluZyBvbGQgdmFsdWUuXG4gICAgICAgICAgICBsZXQgcHJldiA9IG51bGw7XG4gICAgICAgICAgICBsZXQgbm9kZSA9IGxpc3RlbmVycy5nZXQoZXZlbnROYW1lKTtcbiAgICAgICAgICAgIHdoaWxlIChub2RlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAobm9kZS5saXN0ZW5lclR5cGUgPT09IEFUVFJJQlVURSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBSZW1vdmUgb2xkIHZhbHVlLlxuICAgICAgICAgICAgICAgICAgICBpZiAocHJldiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJldi5uZXh0ID0gbm9kZS5uZXh0O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5vZGUubmV4dCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJzLnNldChldmVudE5hbWUsIG5vZGUubmV4dCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcnMuZGVsZXRlKGV2ZW50TmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwcmV2ID0gbm9kZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBub2RlID0gbm9kZS5uZXh0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBBZGQgbmV3IHZhbHVlLlxuICAgICAgICAgICAgaWYgKGxpc3RlbmVyICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Tm9kZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXIsXG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyVHlwZTogQVRUUklCVVRFLFxuICAgICAgICAgICAgICAgICAgICBwYXNzaXZlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgb25jZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIG5leHQ6IG51bGwsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBpZiAocHJldiA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcnMuc2V0KGV2ZW50TmFtZSwgbmV3Tm9kZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcHJldi5uZXh0ID0gbmV3Tm9kZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICB9XG59XG5cbi8qKlxuICogRGVmaW5lIGFuIGV2ZW50IGF0dHJpYnV0ZSAoZS5nLiBgZXZlbnRUYXJnZXQub25jbGlja2ApLlxuICogQHBhcmFtIHtPYmplY3R9IGV2ZW50VGFyZ2V0UHJvdG90eXBlIFRoZSBldmVudCB0YXJnZXQgcHJvdG90eXBlIHRvIGRlZmluZSBhbiBldmVudCBhdHRyYml0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWUgVGhlIGV2ZW50IG5hbWUgdG8gZGVmaW5lLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIGRlZmluZUV2ZW50QXR0cmlidXRlKGV2ZW50VGFyZ2V0UHJvdG90eXBlLCBldmVudE5hbWUpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoXG4gICAgICAgIGV2ZW50VGFyZ2V0UHJvdG90eXBlLFxuICAgICAgICBgb24ke2V2ZW50TmFtZX1gLFxuICAgICAgICBkZWZpbmVFdmVudEF0dHJpYnV0ZURlc2NyaXB0b3IoZXZlbnROYW1lKVxuICAgICk7XG59XG5cbi8qKlxuICogRGVmaW5lIGEgY3VzdG9tIEV2ZW50VGFyZ2V0IHdpdGggZXZlbnQgYXR0cmlidXRlcy5cbiAqIEBwYXJhbSB7c3RyaW5nW119IGV2ZW50TmFtZXMgRXZlbnQgbmFtZXMgZm9yIGV2ZW50IGF0dHJpYnV0ZXMuXG4gKiBAcmV0dXJucyB7RXZlbnRUYXJnZXR9IFRoZSBjdXN0b20gRXZlbnRUYXJnZXQuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBkZWZpbmVDdXN0b21FdmVudFRhcmdldChldmVudE5hbWVzKSB7XG4gICAgLyoqIEN1c3RvbUV2ZW50VGFyZ2V0ICovXG4gICAgZnVuY3Rpb24gQ3VzdG9tRXZlbnRUYXJnZXQoKSB7XG4gICAgICAgIEV2ZW50VGFyZ2V0LmNhbGwodGhpcyk7XG4gICAgfVxuXG4gICAgQ3VzdG9tRXZlbnRUYXJnZXQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudFRhcmdldC5wcm90b3R5cGUsIHtcbiAgICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgICAgIHZhbHVlOiBDdXN0b21FdmVudFRhcmdldCxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBldmVudE5hbWVzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGRlZmluZUV2ZW50QXR0cmlidXRlKEN1c3RvbUV2ZW50VGFyZ2V0LnByb3RvdHlwZSwgZXZlbnROYW1lc1tpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIEN1c3RvbUV2ZW50VGFyZ2V0XG59XG5cbi8qKlxuICogRXZlbnRUYXJnZXQuXG4gKlxuICogLSBUaGlzIGlzIGNvbnN0cnVjdG9yIGlmIG5vIGFyZ3VtZW50cy5cbiAqIC0gVGhpcyBpcyBhIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgYSBDdXN0b21FdmVudFRhcmdldCBjb25zdHJ1Y3RvciBpZiB0aGVyZSBhcmUgYXJndW1lbnRzLlxuICpcbiAqIEZvciBleGFtcGxlOlxuICpcbiAqICAgICBjbGFzcyBBIGV4dGVuZHMgRXZlbnRUYXJnZXQge31cbiAqICAgICBjbGFzcyBCIGV4dGVuZHMgRXZlbnRUYXJnZXQoXCJtZXNzYWdlXCIpIHt9XG4gKiAgICAgY2xhc3MgQyBleHRlbmRzIEV2ZW50VGFyZ2V0KFwibWVzc2FnZVwiLCBcImVycm9yXCIpIHt9XG4gKiAgICAgY2xhc3MgRCBleHRlbmRzIEV2ZW50VGFyZ2V0KFtcIm1lc3NhZ2VcIiwgXCJlcnJvclwiXSkge31cbiAqL1xuZnVuY3Rpb24gRXZlbnRUYXJnZXQoKSB7XG4gICAgLyplc2xpbnQtZGlzYWJsZSBjb25zaXN0ZW50LXJldHVybiAqL1xuICAgIGlmICh0aGlzIGluc3RhbmNlb2YgRXZlbnRUYXJnZXQpIHtcbiAgICAgICAgbGlzdGVuZXJzTWFwLnNldCh0aGlzLCBuZXcgTWFwKCkpO1xuICAgICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEgJiYgQXJyYXkuaXNBcnJheShhcmd1bWVudHNbMF0pKSB7XG4gICAgICAgIHJldHVybiBkZWZpbmVDdXN0b21FdmVudFRhcmdldChhcmd1bWVudHNbMF0pXG4gICAgfVxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCB0eXBlcyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIHR5cGVzW2ldID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWZpbmVDdXN0b21FdmVudFRhcmdldCh0eXBlcylcbiAgICB9XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKVxuICAgIC8qZXNsaW50LWVuYWJsZSBjb25zaXN0ZW50LXJldHVybiAqL1xufVxuXG4vLyBTaG91bGQgYmUgZW51bWVyYWJsZSwgYnV0IGNsYXNzIG1ldGhvZHMgYXJlIG5vdCBlbnVtZXJhYmxlLlxuRXZlbnRUYXJnZXQucHJvdG90eXBlID0ge1xuICAgIC8qKlxuICAgICAqIEFkZCBhIGdpdmVuIGxpc3RlbmVyIHRvIHRoaXMgZXZlbnQgdGFyZ2V0LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWUgVGhlIGV2ZW50IG5hbWUgdG8gYWRkLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyIFRoZSBsaXN0ZW5lciB0byBhZGQuXG4gICAgICogQHBhcmFtIHtib29sZWFufHtjYXB0dXJlPzpib29sZWFuLHBhc3NpdmU/OmJvb2xlYW4sb25jZT86Ym9vbGVhbn19IFtvcHRpb25zXSBUaGUgb3B0aW9ucyBmb3IgdGhpcyBsaXN0ZW5lci5cbiAgICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICAgKi9cbiAgICBhZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgbGlzdGVuZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKGxpc3RlbmVyID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgbGlzdGVuZXIgIT09IFwiZnVuY3Rpb25cIiAmJiAhaXNPYmplY3QobGlzdGVuZXIpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiJ2xpc3RlbmVyJyBzaG91bGQgYmUgYSBmdW5jdGlvbiBvciBhbiBvYmplY3QuXCIpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSBnZXRMaXN0ZW5lcnModGhpcyk7XG4gICAgICAgIGNvbnN0IG9wdGlvbnNJc09iaiA9IGlzT2JqZWN0KG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBjYXB0dXJlID0gb3B0aW9uc0lzT2JqXG4gICAgICAgICAgICA/IEJvb2xlYW4ob3B0aW9ucy5jYXB0dXJlKVxuICAgICAgICAgICAgOiBCb29sZWFuKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBsaXN0ZW5lclR5cGUgPSBjYXB0dXJlID8gQ0FQVFVSRSA6IEJVQkJMRTtcbiAgICAgICAgY29uc3QgbmV3Tm9kZSA9IHtcbiAgICAgICAgICAgIGxpc3RlbmVyLFxuICAgICAgICAgICAgbGlzdGVuZXJUeXBlLFxuICAgICAgICAgICAgcGFzc2l2ZTogb3B0aW9uc0lzT2JqICYmIEJvb2xlYW4ob3B0aW9ucy5wYXNzaXZlKSxcbiAgICAgICAgICAgIG9uY2U6IG9wdGlvbnNJc09iaiAmJiBCb29sZWFuKG9wdGlvbnMub25jZSksXG4gICAgICAgICAgICBuZXh0OiBudWxsLFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFNldCBpdCBhcyB0aGUgZmlyc3Qgbm9kZSBpZiB0aGUgZmlyc3Qgbm9kZSBpcyBudWxsLlxuICAgICAgICBsZXQgbm9kZSA9IGxpc3RlbmVycy5nZXQoZXZlbnROYW1lKTtcbiAgICAgICAgaWYgKG5vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbGlzdGVuZXJzLnNldChldmVudE5hbWUsIG5ld05vZGUpO1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICAvLyBUcmF2ZXJzZSB0byB0aGUgdGFpbCB3aGlsZSBjaGVja2luZyBkdXBsaWNhdGlvbi4uXG4gICAgICAgIGxldCBwcmV2ID0gbnVsbDtcbiAgICAgICAgd2hpbGUgKG5vZGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIG5vZGUubGlzdGVuZXIgPT09IGxpc3RlbmVyICYmXG4gICAgICAgICAgICAgICAgbm9kZS5saXN0ZW5lclR5cGUgPT09IGxpc3RlbmVyVHlwZVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgLy8gU2hvdWxkIGlnbm9yZSBkdXBsaWNhdGlvbi5cbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHByZXYgPSBub2RlO1xuICAgICAgICAgICAgbm9kZSA9IG5vZGUubmV4dDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFkZCBpdC5cbiAgICAgICAgcHJldi5uZXh0ID0gbmV3Tm9kZTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGEgZ2l2ZW4gbGlzdGVuZXIgZnJvbSB0aGlzIGV2ZW50IHRhcmdldC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lIFRoZSBldmVudCBuYW1lIHRvIHJlbW92ZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lciBUaGUgbGlzdGVuZXIgdG8gcmVtb3ZlLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbnx7Y2FwdHVyZT86Ym9vbGVhbixwYXNzaXZlPzpib29sZWFuLG9uY2U/OmJvb2xlYW59fSBbb3B0aW9uc10gVGhlIG9wdGlvbnMgZm9yIHRoaXMgbGlzdGVuZXIuXG4gICAgICogQHJldHVybnMge3ZvaWR9XG4gICAgICovXG4gICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGxpc3RlbmVyLCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChsaXN0ZW5lciA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxpc3RlbmVycyA9IGdldExpc3RlbmVycyh0aGlzKTtcbiAgICAgICAgY29uc3QgY2FwdHVyZSA9IGlzT2JqZWN0KG9wdGlvbnMpXG4gICAgICAgICAgICA/IEJvb2xlYW4ob3B0aW9ucy5jYXB0dXJlKVxuICAgICAgICAgICAgOiBCb29sZWFuKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBsaXN0ZW5lclR5cGUgPSBjYXB0dXJlID8gQ0FQVFVSRSA6IEJVQkJMRTtcblxuICAgICAgICBsZXQgcHJldiA9IG51bGw7XG4gICAgICAgIGxldCBub2RlID0gbGlzdGVuZXJzLmdldChldmVudE5hbWUpO1xuICAgICAgICB3aGlsZSAobm9kZSAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgbm9kZS5saXN0ZW5lciA9PT0gbGlzdGVuZXIgJiZcbiAgICAgICAgICAgICAgICBub2RlLmxpc3RlbmVyVHlwZSA9PT0gbGlzdGVuZXJUeXBlXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBpZiAocHJldiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBwcmV2Lm5leHQgPSBub2RlLm5leHQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChub2RlLm5leHQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJzLnNldChldmVudE5hbWUsIG5vZGUubmV4dCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJzLmRlbGV0ZShldmVudE5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHJldiA9IG5vZGU7XG4gICAgICAgICAgICBub2RlID0gbm9kZS5uZXh0O1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIERpc3BhdGNoIGEgZ2l2ZW4gZXZlbnQuXG4gICAgICogQHBhcmFtIHtFdmVudHx7dHlwZTpzdHJpbmd9fSBldmVudCBUaGUgZXZlbnQgdG8gZGlzcGF0Y2guXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IGBmYWxzZWAgaWYgY2FuY2VsZWQuXG4gICAgICovXG4gICAgZGlzcGF0Y2hFdmVudChldmVudCkge1xuICAgICAgICBpZiAoZXZlbnQgPT0gbnVsbCB8fCB0eXBlb2YgZXZlbnQudHlwZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJldmVudC50eXBlXCIgc2hvdWxkIGJlIGEgc3RyaW5nLicpXG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBsaXN0ZW5lcnMgYXJlbid0IHJlZ2lzdGVyZWQsIHRlcm1pbmF0ZS5cbiAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gZ2V0TGlzdGVuZXJzKHRoaXMpO1xuICAgICAgICBjb25zdCBldmVudE5hbWUgPSBldmVudC50eXBlO1xuICAgICAgICBsZXQgbm9kZSA9IGxpc3RlbmVycy5nZXQoZXZlbnROYW1lKTtcbiAgICAgICAgaWYgKG5vZGUgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNpbmNlIHdlIGNhbm5vdCByZXdyaXRlIHNldmVyYWwgcHJvcGVydGllcywgc28gd3JhcCBvYmplY3QuXG4gICAgICAgIGNvbnN0IHdyYXBwZWRFdmVudCA9IHdyYXBFdmVudCh0aGlzLCBldmVudCk7XG5cbiAgICAgICAgLy8gVGhpcyBkb2Vzbid0IHByb2Nlc3MgY2FwdHVyaW5nIHBoYXNlIGFuZCBidWJibGluZyBwaGFzZS5cbiAgICAgICAgLy8gVGhpcyBpc24ndCBwYXJ0aWNpcGF0aW5nIGluIGEgdHJlZS5cbiAgICAgICAgbGV0IHByZXYgPSBudWxsO1xuICAgICAgICB3aGlsZSAobm9kZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAvLyBSZW1vdmUgdGhpcyBsaXN0ZW5lciBpZiBpdCdzIG9uY2VcbiAgICAgICAgICAgIGlmIChub2RlLm9uY2UpIHtcbiAgICAgICAgICAgICAgICBpZiAocHJldiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBwcmV2Lm5leHQgPSBub2RlLm5leHQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChub2RlLm5leHQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJzLnNldChldmVudE5hbWUsIG5vZGUubmV4dCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJzLmRlbGV0ZShldmVudE5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcHJldiA9IG5vZGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIENhbGwgdGhpcyBsaXN0ZW5lclxuICAgICAgICAgICAgc2V0UGFzc2l2ZUxpc3RlbmVyKFxuICAgICAgICAgICAgICAgIHdyYXBwZWRFdmVudCxcbiAgICAgICAgICAgICAgICBub2RlLnBhc3NpdmUgPyBub2RlLmxpc3RlbmVyIDogbnVsbFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygbm9kZS5saXN0ZW5lciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5saXN0ZW5lci5jYWxsKHRoaXMsIHdyYXBwZWRFdmVudCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBjb25zb2xlICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgY29uc29sZS5lcnJvciA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICBub2RlLmxpc3RlbmVyVHlwZSAhPT0gQVRUUklCVVRFICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIG5vZGUubGlzdGVuZXIuaGFuZGxlRXZlbnQgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5saXN0ZW5lci5oYW5kbGVFdmVudCh3cmFwcGVkRXZlbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBCcmVhayBpZiBgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uYCB3YXMgY2FsbGVkLlxuICAgICAgICAgICAgaWYgKGlzU3RvcHBlZCh3cmFwcGVkRXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbm9kZSA9IG5vZGUubmV4dDtcbiAgICAgICAgfVxuICAgICAgICBzZXRQYXNzaXZlTGlzdGVuZXIod3JhcHBlZEV2ZW50LCBudWxsKTtcbiAgICAgICAgc2V0RXZlbnRQaGFzZSh3cmFwcGVkRXZlbnQsIDApO1xuICAgICAgICBzZXRDdXJyZW50VGFyZ2V0KHdyYXBwZWRFdmVudCwgbnVsbCk7XG5cbiAgICAgICAgcmV0dXJuICF3cmFwcGVkRXZlbnQuZGVmYXVsdFByZXZlbnRlZFxuICAgIH0sXG59O1xuXG4vLyBgY29uc3RydWN0b3JgIGlzIG5vdCBlbnVtZXJhYmxlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEV2ZW50VGFyZ2V0LnByb3RvdHlwZSwgXCJjb25zdHJ1Y3RvclwiLCB7XG4gICAgdmFsdWU6IEV2ZW50VGFyZ2V0LFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB3cml0YWJsZTogdHJ1ZSxcbn0pO1xuXG4vLyBFbnN1cmUgYGV2ZW50VGFyZ2V0IGluc3RhbmNlb2Ygd2luZG93LkV2ZW50VGFyZ2V0YCBpcyBgdHJ1ZWAuXG5pZiAoXG4gICAgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgIHR5cGVvZiB3aW5kb3cuRXZlbnRUYXJnZXQgIT09IFwidW5kZWZpbmVkXCJcbikge1xuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihFdmVudFRhcmdldC5wcm90b3R5cGUsIHdpbmRvdy5FdmVudFRhcmdldC5wcm90b3R5cGUpO1xufVxuXG5leHBvcnRzLmRlZmluZUV2ZW50QXR0cmlidXRlID0gZGVmaW5lRXZlbnRBdHRyaWJ1dGU7XG5leHBvcnRzLkV2ZW50VGFyZ2V0ID0gRXZlbnRUYXJnZXQ7XG5leHBvcnRzLmRlZmF1bHQgPSBFdmVudFRhcmdldDtcblxubW9kdWxlLmV4cG9ydHMgPSBFdmVudFRhcmdldFxubW9kdWxlLmV4cG9ydHMuRXZlbnRUYXJnZXQgPSBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBFdmVudFRhcmdldFxubW9kdWxlLmV4cG9ydHMuZGVmaW5lRXZlbnRBdHRyaWJ1dGUgPSBkZWZpbmVFdmVudEF0dHJpYnV0ZVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXZlbnQtdGFyZ2V0LXNoaW0uanMubWFwXG4iLAogICAgIi8qKlxuICogQGF1dGhvciBUb3J1IE5hZ2FzaGltYSA8aHR0cHM6Ly9naXRodWIuY29tL215c3RpY2F0ZWE+XG4gKiBTZWUgTElDRU5TRSBmaWxlIGluIHJvb3QgZGlyZWN0b3J5IGZvciBmdWxsIGxpY2Vuc2UuXG4gKi9cbid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxudmFyIGV2ZW50VGFyZ2V0U2hpbSA9IHJlcXVpcmUoJ2V2ZW50LXRhcmdldC1zaGltJyk7XG5cbi8qKlxuICogVGhlIHNpZ25hbCBjbGFzcy5cbiAqIEBzZWUgaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNhYm9ydHNpZ25hbFxuICovXG5jbGFzcyBBYm9ydFNpZ25hbCBleHRlbmRzIGV2ZW50VGFyZ2V0U2hpbS5FdmVudFRhcmdldCB7XG4gICAgLyoqXG4gICAgICogQWJvcnRTaWduYWwgY2Fubm90IGJlIGNvbnN0cnVjdGVkIGRpcmVjdGx5LlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQWJvcnRTaWduYWwgY2Fubm90IGJlIGNvbnN0cnVjdGVkIGRpcmVjdGx5XCIpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGlzIGBBYm9ydFNpZ25hbGAncyBgQWJvcnRDb250cm9sbGVyYCBoYXMgc2lnbmFsZWQgdG8gYWJvcnQsIGFuZCBgZmFsc2VgIG90aGVyd2lzZS5cbiAgICAgKi9cbiAgICBnZXQgYWJvcnRlZCgpIHtcbiAgICAgICAgY29uc3QgYWJvcnRlZCA9IGFib3J0ZWRGbGFncy5nZXQodGhpcyk7XG4gICAgICAgIGlmICh0eXBlb2YgYWJvcnRlZCAhPT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkICd0aGlzJyB0byBiZSBhbiAnQWJvcnRTaWduYWwnIG9iamVjdCwgYnV0IGdvdCAke3RoaXMgPT09IG51bGwgPyBcIm51bGxcIiA6IHR5cGVvZiB0aGlzfWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhYm9ydGVkO1xuICAgIH1cbn1cbmV2ZW50VGFyZ2V0U2hpbS5kZWZpbmVFdmVudEF0dHJpYnV0ZShBYm9ydFNpZ25hbC5wcm90b3R5cGUsIFwiYWJvcnRcIik7XG4vKipcbiAqIENyZWF0ZSBhbiBBYm9ydFNpZ25hbCBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUFib3J0U2lnbmFsKCkge1xuICAgIGNvbnN0IHNpZ25hbCA9IE9iamVjdC5jcmVhdGUoQWJvcnRTaWduYWwucHJvdG90eXBlKTtcbiAgICBldmVudFRhcmdldFNoaW0uRXZlbnRUYXJnZXQuY2FsbChzaWduYWwpO1xuICAgIGFib3J0ZWRGbGFncy5zZXQoc2lnbmFsLCBmYWxzZSk7XG4gICAgcmV0dXJuIHNpZ25hbDtcbn1cbi8qKlxuICogQWJvcnQgYSBnaXZlbiBzaWduYWwuXG4gKi9cbmZ1bmN0aW9uIGFib3J0U2lnbmFsKHNpZ25hbCkge1xuICAgIGlmIChhYm9ydGVkRmxhZ3MuZ2V0KHNpZ25hbCkgIT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYWJvcnRlZEZsYWdzLnNldChzaWduYWwsIHRydWUpO1xuICAgIHNpZ25hbC5kaXNwYXRjaEV2ZW50KHsgdHlwZTogXCJhYm9ydFwiIH0pO1xufVxuLyoqXG4gKiBBYm9ydGVkIGZsYWcgZm9yIGVhY2ggaW5zdGFuY2VzLlxuICovXG5jb25zdCBhYm9ydGVkRmxhZ3MgPSBuZXcgV2Vha01hcCgpO1xuLy8gUHJvcGVydGllcyBzaG91bGQgYmUgZW51bWVyYWJsZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEFib3J0U2lnbmFsLnByb3RvdHlwZSwge1xuICAgIGFib3J0ZWQ6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxufSk7XG4vLyBgdG9TdHJpbmcoKWAgc2hvdWxkIHJldHVybiBgXCJbb2JqZWN0IEFib3J0U2lnbmFsXVwiYFxuaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLnRvU3RyaW5nVGFnID09PSBcInN5bWJvbFwiKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFib3J0U2lnbmFsLnByb3RvdHlwZSwgU3ltYm9sLnRvU3RyaW5nVGFnLCB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IFwiQWJvcnRTaWduYWxcIixcbiAgICB9KTtcbn1cblxuLyoqXG4gKiBUaGUgQWJvcnRDb250cm9sbGVyLlxuICogQHNlZSBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2Fib3J0Y29udHJvbGxlclxuICovXG5jbGFzcyBBYm9ydENvbnRyb2xsZXIge1xuICAgIC8qKlxuICAgICAqIEluaXRpYWxpemUgdGhpcyBjb250cm9sbGVyLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzaWduYWxzLnNldCh0aGlzLCBjcmVhdGVBYm9ydFNpZ25hbCgpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgYEFib3J0U2lnbmFsYCBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoaXMgb2JqZWN0LlxuICAgICAqL1xuICAgIGdldCBzaWduYWwoKSB7XG4gICAgICAgIHJldHVybiBnZXRTaWduYWwodGhpcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFib3J0IGFuZCBzaWduYWwgdG8gYW55IG9ic2VydmVycyB0aGF0IHRoZSBhc3NvY2lhdGVkIGFjdGl2aXR5IGlzIHRvIGJlIGFib3J0ZWQuXG4gICAgICovXG4gICAgYWJvcnQoKSB7XG4gICAgICAgIGFib3J0U2lnbmFsKGdldFNpZ25hbCh0aGlzKSk7XG4gICAgfVxufVxuLyoqXG4gKiBBc3NvY2lhdGVkIHNpZ25hbHMuXG4gKi9cbmNvbnN0IHNpZ25hbHMgPSBuZXcgV2Vha01hcCgpO1xuLyoqXG4gKiBHZXQgdGhlIGFzc29jaWF0ZWQgc2lnbmFsIG9mIGEgZ2l2ZW4gY29udHJvbGxlci5cbiAqL1xuZnVuY3Rpb24gZ2V0U2lnbmFsKGNvbnRyb2xsZXIpIHtcbiAgICBjb25zdCBzaWduYWwgPSBzaWduYWxzLmdldChjb250cm9sbGVyKTtcbiAgICBpZiAoc2lnbmFsID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgJ3RoaXMnIHRvIGJlIGFuICdBYm9ydENvbnRyb2xsZXInIG9iamVjdCwgYnV0IGdvdCAke2NvbnRyb2xsZXIgPT09IG51bGwgPyBcIm51bGxcIiA6IHR5cGVvZiBjb250cm9sbGVyfWApO1xuICAgIH1cbiAgICByZXR1cm4gc2lnbmFsO1xufVxuLy8gUHJvcGVydGllcyBzaG91bGQgYmUgZW51bWVyYWJsZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEFib3J0Q29udHJvbGxlci5wcm90b3R5cGUsIHtcbiAgICBzaWduYWw6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuICAgIGFib3J0OiB7IGVudW1lcmFibGU6IHRydWUgfSxcbn0pO1xuaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLnRvU3RyaW5nVGFnID09PSBcInN5bWJvbFwiKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFib3J0Q29udHJvbGxlci5wcm90b3R5cGUsIFN5bWJvbC50b1N0cmluZ1RhZywge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlOiBcIkFib3J0Q29udHJvbGxlclwiLFxuICAgIH0pO1xufVxuXG5leHBvcnRzLkFib3J0Q29udHJvbGxlciA9IEFib3J0Q29udHJvbGxlcjtcbmV4cG9ydHMuQWJvcnRTaWduYWwgPSBBYm9ydFNpZ25hbDtcbmV4cG9ydHMuZGVmYXVsdCA9IEFib3J0Q29udHJvbGxlcjtcblxubW9kdWxlLmV4cG9ydHMgPSBBYm9ydENvbnRyb2xsZXJcbm1vZHVsZS5leHBvcnRzLkFib3J0Q29udHJvbGxlciA9IG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IEFib3J0Q29udHJvbGxlclxubW9kdWxlLmV4cG9ydHMuQWJvcnRTaWduYWwgPSBBYm9ydFNpZ25hbFxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YWJvcnQtY29udHJvbGxlci5qcy5tYXBcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGJ1ZmZlck1vZHVsZSA9IHJlcXVpcmUoJ2J1ZmZlcicpXG5jb25zdCB7IGtSZXNpc3RTdG9wUHJvcGFnYXRpb24sIFN5bWJvbERpc3Bvc2UgfSA9IHJlcXVpcmUoJy4vcHJpbW9yZGlhbHMnKVxuY29uc3QgQWJvcnRTaWduYWwgPSBnbG9iYWxUaGlzLkFib3J0U2lnbmFsIHx8IHJlcXVpcmUoJ2Fib3J0LWNvbnRyb2xsZXInKS5BYm9ydFNpZ25hbFxuY29uc3QgQWJvcnRDb250cm9sbGVyID0gZ2xvYmFsVGhpcy5BYm9ydENvbnRyb2xsZXIgfHwgcmVxdWlyZSgnYWJvcnQtY29udHJvbGxlcicpLkFib3J0Q29udHJvbGxlclxuY29uc3QgQXN5bmNGdW5jdGlvbiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihhc3luYyBmdW5jdGlvbiAoKSB7fSkuY29uc3RydWN0b3JcbmNvbnN0IEJsb2IgPSBnbG9iYWxUaGlzLkJsb2IgfHwgYnVmZmVyTW9kdWxlLkJsb2Jcbi8qIGVzbGludC1kaXNhYmxlIGluZGVudCAqL1xuY29uc3QgaXNCbG9iID1cbiAgdHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnXG4gICAgPyBmdW5jdGlvbiBpc0Jsb2IoYikge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW5kZW50XG4gICAgICAgIHJldHVybiBiIGluc3RhbmNlb2YgQmxvYlxuICAgICAgfVxuICAgIDogZnVuY3Rpb24gaXNCbG9iKGIpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4vKiBlc2xpbnQtZW5hYmxlIGluZGVudCAqL1xuXG5jb25zdCB2YWxpZGF0ZUFib3J0U2lnbmFsID0gKHNpZ25hbCwgbmFtZSkgPT4ge1xuICBpZiAoc2lnbmFsICE9PSB1bmRlZmluZWQgJiYgKHNpZ25hbCA9PT0gbnVsbCB8fCB0eXBlb2Ygc2lnbmFsICE9PSAnb2JqZWN0JyB8fCAhKCdhYm9ydGVkJyBpbiBzaWduYWwpKSkge1xuICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRShuYW1lLCAnQWJvcnRTaWduYWwnLCBzaWduYWwpXG4gIH1cbn1cbmNvbnN0IHZhbGlkYXRlRnVuY3Rpb24gPSAodmFsdWUsIG5hbWUpID0+IHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Z1bmN0aW9uJykgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKG5hbWUsICdGdW5jdGlvbicsIHZhbHVlKVxufVxuXG4vLyBUaGlzIGlzIGEgc2ltcGxpZmllZCB2ZXJzaW9uIG9mIEFnZ3JlZ2F0ZUVycm9yXG5jbGFzcyBBZ2dyZWdhdGVFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IoZXJyb3JzKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGVycm9ycykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIGlucHV0IHRvIGJlIGFuIEFycmF5LCBnb3QgJHt0eXBlb2YgZXJyb3JzfWApXG4gICAgfVxuICAgIGxldCBtZXNzYWdlID0gJydcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVycm9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgbWVzc2FnZSArPSBgICAgICR7ZXJyb3JzW2ldLnN0YWNrfVxcbmBcbiAgICB9XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICB0aGlzLm5hbWUgPSAnQWdncmVnYXRlRXJyb3InXG4gICAgdGhpcy5lcnJvcnMgPSBlcnJvcnNcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEFnZ3JlZ2F0ZUVycm9yLFxuICBrRW1wdHlPYmplY3Q6IE9iamVjdC5mcmVlemUoe30pLFxuICBvbmNlKGNhbGxiYWNrKSB7XG4gICAgbGV0IGNhbGxlZCA9IGZhbHNlXG4gICAgcmV0dXJuIGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICBpZiAoY2FsbGVkKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgY2FsbGVkID0gdHJ1ZVxuICAgICAgY2FsbGJhY2suYXBwbHkodGhpcywgYXJncylcbiAgICB9XG4gIH0sXG4gIGNyZWF0ZURlZmVycmVkUHJvbWlzZTogZnVuY3Rpb24gKCkge1xuICAgIGxldCByZXNvbHZlXG4gICAgbGV0IHJlamVjdFxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByb21pc2UvcGFyYW0tbmFtZXNcbiAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlcywgcmVqKSA9PiB7XG4gICAgICByZXNvbHZlID0gcmVzXG4gICAgICByZWplY3QgPSByZWpcbiAgICB9KVxuICAgIHJldHVybiB7XG4gICAgICBwcm9taXNlLFxuICAgICAgcmVzb2x2ZSxcbiAgICAgIHJlamVjdFxuICAgIH1cbiAgfSxcbiAgcHJvbWlzaWZ5KGZuKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGZuKChlcnIsIC4uLmFyZ3MpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJldHVybiByZWplY3QoZXJyKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNvbHZlKC4uLmFyZ3MpXG4gICAgICB9KVxuICAgIH0pXG4gIH0sXG4gIGRlYnVnbG9nKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7fVxuICB9LFxuICBmb3JtYXQoZm9ybWF0LCAuLi5hcmdzKSB7XG4gICAgLy8gU2ltcGxpZmllZCB2ZXJzaW9uIG9mIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvdXRpbC5odG1sI3V0aWxmb3JtYXRmb3JtYXQtYXJnc1xuICAgIHJldHVybiBmb3JtYXQucmVwbGFjZSgvJShbc2RpZmpdKS9nLCBmdW5jdGlvbiAoLi4uW191bnVzZWQsIHR5cGVdKSB7XG4gICAgICBjb25zdCByZXBsYWNlbWVudCA9IGFyZ3Muc2hpZnQoKVxuICAgICAgaWYgKHR5cGUgPT09ICdmJykge1xuICAgICAgICByZXR1cm4gcmVwbGFjZW1lbnQudG9GaXhlZCg2KVxuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnaicpIHtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHJlcGxhY2VtZW50KVxuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAncycgJiYgdHlwZW9mIHJlcGxhY2VtZW50ID09PSAnb2JqZWN0Jykge1xuICAgICAgICBjb25zdCBjdG9yID0gcmVwbGFjZW1lbnQuY29uc3RydWN0b3IgIT09IE9iamVjdCA/IHJlcGxhY2VtZW50LmNvbnN0cnVjdG9yLm5hbWUgOiAnJ1xuICAgICAgICByZXR1cm4gYCR7Y3Rvcn0ge31gLnRyaW0oKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHJlcGxhY2VtZW50LnRvU3RyaW5nKClcbiAgICAgIH1cbiAgICB9KVxuICB9LFxuICBpbnNwZWN0KHZhbHVlKSB7XG4gICAgLy8gVmFzdGx5IHNpbXBsaWZpZWQgdmVyc2lvbiBvZiBodHRwczovL25vZGVqcy5vcmcvYXBpL3V0aWwuaHRtbCN1dGlsaW5zcGVjdG9iamVjdC1vcHRpb25zXG4gICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgIGlmICh2YWx1ZS5pbmNsdWRlcyhcIidcIikpIHtcbiAgICAgICAgICBpZiAoIXZhbHVlLmluY2x1ZGVzKCdcIicpKSB7XG4gICAgICAgICAgICByZXR1cm4gYFwiJHt2YWx1ZX1cImBcbiAgICAgICAgICB9IGVsc2UgaWYgKCF2YWx1ZS5pbmNsdWRlcygnYCcpICYmICF2YWx1ZS5pbmNsdWRlcygnJHsnKSkge1xuICAgICAgICAgICAgcmV0dXJuIGBcXGAke3ZhbHVlfVxcYGBcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGAnJHt2YWx1ZX0nYFxuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgaWYgKGlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiAnTmFOJ1xuICAgICAgICB9IGVsc2UgaWYgKE9iamVjdC5pcyh2YWx1ZSwgLTApKSB7XG4gICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgIGNhc2UgJ2JpZ2ludCc6XG4gICAgICAgIHJldHVybiBgJHtTdHJpbmcodmFsdWUpfW5gXG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpXG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICByZXR1cm4gJ3t9J1xuICAgIH1cbiAgfSxcbiAgdHlwZXM6IHtcbiAgICBpc0FzeW5jRnVuY3Rpb24oZm4pIHtcbiAgICAgIHJldHVybiBmbiBpbnN0YW5jZW9mIEFzeW5jRnVuY3Rpb25cbiAgICB9LFxuICAgIGlzQXJyYXlCdWZmZXJWaWV3KGFycikge1xuICAgICAgcmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyhhcnIpXG4gICAgfVxuICB9LFxuICBpc0Jsb2IsXG4gIGRlcHJlY2F0ZShmbiwgbWVzc2FnZSkge1xuICAgIHJldHVybiBmblxuICB9LFxuICBhZGRBYm9ydExpc3RlbmVyOlxuICAgIHJlcXVpcmUoJ2V2ZW50cycpLmFkZEFib3J0TGlzdGVuZXIgfHxcbiAgICBmdW5jdGlvbiBhZGRBYm9ydExpc3RlbmVyKHNpZ25hbCwgbGlzdGVuZXIpIHtcbiAgICAgIGlmIChzaWduYWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoJ3NpZ25hbCcsICdBYm9ydFNpZ25hbCcsIHNpZ25hbClcbiAgICAgIH1cbiAgICAgIHZhbGlkYXRlQWJvcnRTaWduYWwoc2lnbmFsLCAnc2lnbmFsJylcbiAgICAgIHZhbGlkYXRlRnVuY3Rpb24obGlzdGVuZXIsICdsaXN0ZW5lcicpXG4gICAgICBsZXQgcmVtb3ZlRXZlbnRMaXN0ZW5lclxuICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGxpc3RlbmVyKCkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBsaXN0ZW5lciwge1xuICAgICAgICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAgICAgICBvbmNlOiB0cnVlLFxuICAgICAgICAgIFtrUmVzaXN0U3RvcFByb3BhZ2F0aW9uXTogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgICByZW1vdmVFdmVudExpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgICAgIHNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIGxpc3RlbmVyKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBfX3Byb3RvX186IG51bGwsXG4gICAgICAgIFtTeW1ib2xEaXNwb3NlXSgpIHtcbiAgICAgICAgICB2YXIgX3JlbW92ZUV2ZW50TGlzdGVuZXJcbiAgICAgICAgICA7KF9yZW1vdmVFdmVudExpc3RlbmVyID0gcmVtb3ZlRXZlbnRMaXN0ZW5lcikgPT09IG51bGwgfHwgX3JlbW92ZUV2ZW50TGlzdGVuZXIgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgICAgIDogX3JlbW92ZUV2ZW50TGlzdGVuZXIoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgQWJvcnRTaWduYWxBbnk6XG4gICAgQWJvcnRTaWduYWwuYW55IHx8XG4gICAgZnVuY3Rpb24gQWJvcnRTaWduYWxBbnkoc2lnbmFscykge1xuICAgICAgLy8gRmFzdCBwYXRoIGlmIHRoZXJlIGlzIG9ubHkgb25lIHNpZ25hbC5cbiAgICAgIGlmIChzaWduYWxzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gc2lnbmFsc1swXVxuICAgICAgfVxuICAgICAgY29uc3QgYWMgPSBuZXcgQWJvcnRDb250cm9sbGVyKClcbiAgICAgIGNvbnN0IGFib3J0ID0gKCkgPT4gYWMuYWJvcnQoKVxuICAgICAgc2lnbmFscy5mb3JFYWNoKChzaWduYWwpID0+IHtcbiAgICAgICAgdmFsaWRhdGVBYm9ydFNpZ25hbChzaWduYWwsICdzaWduYWxzJylcbiAgICAgICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnQsIHtcbiAgICAgICAgICBvbmNlOiB0cnVlXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgICAgYWMuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICdhYm9ydCcsXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBzaWduYWxzLmZvckVhY2goKHNpZ25hbCkgPT4gc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnQpKVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgb25jZTogdHJ1ZVxuICAgICAgICB9XG4gICAgICApXG4gICAgICByZXR1cm4gYWMuc2lnbmFsXG4gICAgfVxufVxubW9kdWxlLmV4cG9ydHMucHJvbWlzaWZ5LmN1c3RvbSA9IFN5bWJvbC5mb3IoJ25vZGVqcy51dGlsLnByb21pc2lmeS5jdXN0b20nKVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBmb3JtYXQsIGluc3BlY3QsIEFnZ3JlZ2F0ZUVycm9yOiBDdXN0b21BZ2dyZWdhdGVFcnJvciB9ID0gcmVxdWlyZSgnLi91dGlsJylcblxuLypcbiAgVGhpcyBmaWxlIGlzIGEgcmVkdWNlZCBhbmQgYWRhcHRlZCB2ZXJzaW9uIG9mIHRoZSBtYWluIGxpYi9pbnRlcm5hbC9lcnJvcnMuanMgZmlsZSBkZWZpbmVkIGF0XG5cbiAgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvbWFzdGVyL2xpYi9pbnRlcm5hbC9lcnJvcnMuanNcblxuICBEb24ndCB0cnkgdG8gcmVwbGFjZSB3aXRoIHRoZSBvcmlnaW5hbCBmaWxlIGFuZCBrZWVwIGl0IHVwIHRvIGRhdGUgKHN0YXJ0aW5nIGZyb20gRSguLi4pIGRlZmluaXRpb25zKVxuICB3aXRoIHRoZSB1cHN0cmVhbSBmaWxlLlxuKi9cblxuY29uc3QgQWdncmVnYXRlRXJyb3IgPSBnbG9iYWxUaGlzLkFnZ3JlZ2F0ZUVycm9yIHx8IEN1c3RvbUFnZ3JlZ2F0ZUVycm9yXG5jb25zdCBrSXNOb2RlRXJyb3IgPSBTeW1ib2woJ2tJc05vZGVFcnJvcicpXG5jb25zdCBrVHlwZXMgPSBbXG4gICdzdHJpbmcnLFxuICAnZnVuY3Rpb24nLFxuICAnbnVtYmVyJyxcbiAgJ29iamVjdCcsXG4gIC8vIEFjY2VwdCAnRnVuY3Rpb24nIGFuZCAnT2JqZWN0JyBhcyBhbHRlcm5hdGl2ZSB0byB0aGUgbG93ZXIgY2FzZWQgdmVyc2lvbi5cbiAgJ0Z1bmN0aW9uJyxcbiAgJ09iamVjdCcsXG4gICdib29sZWFuJyxcbiAgJ2JpZ2ludCcsXG4gICdzeW1ib2wnXG5dXG5jb25zdCBjbGFzc1JlZ0V4cCA9IC9eKFtBLVpdW2EtejAtOV0qKSskL1xuY29uc3Qgbm9kZUludGVybmFsUHJlZml4ID0gJ19fbm9kZV9pbnRlcm5hbF8nXG5jb25zdCBjb2RlcyA9IHt9XG5mdW5jdGlvbiBhc3NlcnQodmFsdWUsIG1lc3NhZ2UpIHtcbiAgaWYgKCF2YWx1ZSkge1xuICAgIHRocm93IG5ldyBjb2Rlcy5FUlJfSU5URVJOQUxfQVNTRVJUSU9OKG1lc3NhZ2UpXG4gIH1cbn1cblxuLy8gT25seSB1c2UgdGhpcyBmb3IgaW50ZWdlcnMhIERlY2ltYWwgbnVtYmVycyBkbyBub3Qgd29yayB3aXRoIHRoaXMgZnVuY3Rpb24uXG5mdW5jdGlvbiBhZGROdW1lcmljYWxTZXBhcmF0b3IodmFsKSB7XG4gIGxldCByZXMgPSAnJ1xuICBsZXQgaSA9IHZhbC5sZW5ndGhcbiAgY29uc3Qgc3RhcnQgPSB2YWxbMF0gPT09ICctJyA/IDEgOiAwXG4gIGZvciAoOyBpID49IHN0YXJ0ICsgNDsgaSAtPSAzKSB7XG4gICAgcmVzID0gYF8ke3ZhbC5zbGljZShpIC0gMywgaSl9JHtyZXN9YFxuICB9XG4gIHJldHVybiBgJHt2YWwuc2xpY2UoMCwgaSl9JHtyZXN9YFxufVxuZnVuY3Rpb24gZ2V0TWVzc2FnZShrZXksIG1zZywgYXJncykge1xuICBpZiAodHlwZW9mIG1zZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGFzc2VydChcbiAgICAgIG1zZy5sZW5ndGggPD0gYXJncy5sZW5ndGgsXG4gICAgICAvLyBEZWZhdWx0IG9wdGlvbnMgZG8gbm90IGNvdW50LlxuICAgICAgYENvZGU6ICR7a2V5fTsgVGhlIHByb3ZpZGVkIGFyZ3VtZW50cyBsZW5ndGggKCR7YXJncy5sZW5ndGh9KSBkb2VzIG5vdCBtYXRjaCB0aGUgcmVxdWlyZWQgb25lcyAoJHttc2cubGVuZ3RofSkuYFxuICAgIClcbiAgICByZXR1cm4gbXNnKC4uLmFyZ3MpXG4gIH1cbiAgY29uc3QgZXhwZWN0ZWRMZW5ndGggPSAobXNnLm1hdGNoKC8lW2RmaWpvT3NdL2cpIHx8IFtdKS5sZW5ndGhcbiAgYXNzZXJ0KFxuICAgIGV4cGVjdGVkTGVuZ3RoID09PSBhcmdzLmxlbmd0aCxcbiAgICBgQ29kZTogJHtrZXl9OyBUaGUgcHJvdmlkZWQgYXJndW1lbnRzIGxlbmd0aCAoJHthcmdzLmxlbmd0aH0pIGRvZXMgbm90IG1hdGNoIHRoZSByZXF1aXJlZCBvbmVzICgke2V4cGVjdGVkTGVuZ3RofSkuYFxuICApXG4gIGlmIChhcmdzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBtc2dcbiAgfVxuICByZXR1cm4gZm9ybWF0KG1zZywgLi4uYXJncylcbn1cbmZ1bmN0aW9uIEUoY29kZSwgbWVzc2FnZSwgQmFzZSkge1xuICBpZiAoIUJhc2UpIHtcbiAgICBCYXNlID0gRXJyb3JcbiAgfVxuICBjbGFzcyBOb2RlRXJyb3IgZXh0ZW5kcyBCYXNlIHtcbiAgICBjb25zdHJ1Y3RvciguLi5hcmdzKSB7XG4gICAgICBzdXBlcihnZXRNZXNzYWdlKGNvZGUsIG1lc3NhZ2UsIGFyZ3MpKVxuICAgIH1cbiAgICB0b1N0cmluZygpIHtcbiAgICAgIHJldHVybiBgJHt0aGlzLm5hbWV9IFske2NvZGV9XTogJHt0aGlzLm1lc3NhZ2V9YFxuICAgIH1cbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhOb2RlRXJyb3IucHJvdG90eXBlLCB7XG4gICAgbmFtZToge1xuICAgICAgdmFsdWU6IEJhc2UubmFtZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9LFxuICAgIHRvU3RyaW5nOiB7XG4gICAgICB2YWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMubmFtZX0gWyR7Y29kZX1dOiAke3RoaXMubWVzc2FnZX1gXG4gICAgICB9LFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH1cbiAgfSlcbiAgTm9kZUVycm9yLnByb3RvdHlwZS5jb2RlID0gY29kZVxuICBOb2RlRXJyb3IucHJvdG90eXBlW2tJc05vZGVFcnJvcl0gPSB0cnVlXG4gIGNvZGVzW2NvZGVdID0gTm9kZUVycm9yXG59XG5mdW5jdGlvbiBoaWRlU3RhY2tGcmFtZXMoZm4pIHtcbiAgLy8gV2UgcmVuYW1lIHRoZSBmdW5jdGlvbnMgdGhhdCB3aWxsIGJlIGhpZGRlbiB0byBjdXQgb2ZmIHRoZSBzdGFja3RyYWNlXG4gIC8vIGF0IHRoZSBvdXRlcm1vc3Qgb25lXG4gIGNvbnN0IGhpZGRlbiA9IG5vZGVJbnRlcm5hbFByZWZpeCArIGZuLm5hbWVcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZuLCAnbmFtZScsIHtcbiAgICB2YWx1ZTogaGlkZGVuXG4gIH0pXG4gIHJldHVybiBmblxufVxuZnVuY3Rpb24gYWdncmVnYXRlVHdvRXJyb3JzKGlubmVyRXJyb3IsIG91dGVyRXJyb3IpIHtcbiAgaWYgKGlubmVyRXJyb3IgJiYgb3V0ZXJFcnJvciAmJiBpbm5lckVycm9yICE9PSBvdXRlckVycm9yKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkob3V0ZXJFcnJvci5lcnJvcnMpKSB7XG4gICAgICAvLyBJZiBgb3V0ZXJFcnJvcmAgaXMgYWxyZWFkeSBhbiBgQWdncmVnYXRlRXJyb3JgLlxuICAgICAgb3V0ZXJFcnJvci5lcnJvcnMucHVzaChpbm5lckVycm9yKVxuICAgICAgcmV0dXJuIG91dGVyRXJyb3JcbiAgICB9XG4gICAgY29uc3QgZXJyID0gbmV3IEFnZ3JlZ2F0ZUVycm9yKFtvdXRlckVycm9yLCBpbm5lckVycm9yXSwgb3V0ZXJFcnJvci5tZXNzYWdlKVxuICAgIGVyci5jb2RlID0gb3V0ZXJFcnJvci5jb2RlXG4gICAgcmV0dXJuIGVyclxuICB9XG4gIHJldHVybiBpbm5lckVycm9yIHx8IG91dGVyRXJyb3Jcbn1cbmNsYXNzIEFib3J0RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2UgPSAnVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZCcsIG9wdGlvbnMgPSB1bmRlZmluZWQpIHtcbiAgICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IGNvZGVzLkVSUl9JTlZBTElEX0FSR19UWVBFKCdvcHRpb25zJywgJ09iamVjdCcsIG9wdGlvbnMpXG4gICAgfVxuICAgIHN1cGVyKG1lc3NhZ2UsIG9wdGlvbnMpXG4gICAgdGhpcy5jb2RlID0gJ0FCT1JUX0VSUidcbiAgICB0aGlzLm5hbWUgPSAnQWJvcnRFcnJvcidcbiAgfVxufVxuRSgnRVJSX0FTU0VSVElPTicsICclcycsIEVycm9yKVxuRShcbiAgJ0VSUl9JTlZBTElEX0FSR19UWVBFJyxcbiAgKG5hbWUsIGV4cGVjdGVkLCBhY3R1YWwpID0+IHtcbiAgICBhc3NlcnQodHlwZW9mIG5hbWUgPT09ICdzdHJpbmcnLCBcIiduYW1lJyBtdXN0IGJlIGEgc3RyaW5nXCIpXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGV4cGVjdGVkKSkge1xuICAgICAgZXhwZWN0ZWQgPSBbZXhwZWN0ZWRdXG4gICAgfVxuICAgIGxldCBtc2cgPSAnVGhlICdcbiAgICBpZiAobmFtZS5lbmRzV2l0aCgnIGFyZ3VtZW50JykpIHtcbiAgICAgIC8vIEZvciBjYXNlcyBsaWtlICdmaXJzdCBhcmd1bWVudCdcbiAgICAgIG1zZyArPSBgJHtuYW1lfSBgXG4gICAgfSBlbHNlIHtcbiAgICAgIG1zZyArPSBgXCIke25hbWV9XCIgJHtuYW1lLmluY2x1ZGVzKCcuJykgPyAncHJvcGVydHknIDogJ2FyZ3VtZW50J30gYFxuICAgIH1cbiAgICBtc2cgKz0gJ211c3QgYmUgJ1xuICAgIGNvbnN0IHR5cGVzID0gW11cbiAgICBjb25zdCBpbnN0YW5jZXMgPSBbXVxuICAgIGNvbnN0IG90aGVyID0gW11cbiAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIGV4cGVjdGVkKSB7XG4gICAgICBhc3NlcnQodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJywgJ0FsbCBleHBlY3RlZCBlbnRyaWVzIGhhdmUgdG8gYmUgb2YgdHlwZSBzdHJpbmcnKVxuICAgICAgaWYgKGtUeXBlcy5pbmNsdWRlcyh2YWx1ZSkpIHtcbiAgICAgICAgdHlwZXMucHVzaCh2YWx1ZS50b0xvd2VyQ2FzZSgpKVxuICAgICAgfSBlbHNlIGlmIChjbGFzc1JlZ0V4cC50ZXN0KHZhbHVlKSkge1xuICAgICAgICBpbnN0YW5jZXMucHVzaCh2YWx1ZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFzc2VydCh2YWx1ZSAhPT0gJ29iamVjdCcsICdUaGUgdmFsdWUgXCJvYmplY3RcIiBzaG91bGQgYmUgd3JpdHRlbiBhcyBcIk9iamVjdFwiJylcbiAgICAgICAgb3RoZXIucHVzaCh2YWx1ZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTcGVjaWFsIGhhbmRsZSBgb2JqZWN0YCBpbiBjYXNlIG90aGVyIGluc3RhbmNlcyBhcmUgYWxsb3dlZCB0byBvdXRsaW5lXG4gICAgLy8gdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gZWFjaCBvdGhlci5cbiAgICBpZiAoaW5zdGFuY2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHBvcyA9IHR5cGVzLmluZGV4T2YoJ29iamVjdCcpXG4gICAgICBpZiAocG9zICE9PSAtMSkge1xuICAgICAgICB0eXBlcy5zcGxpY2UodHlwZXMsIHBvcywgMSlcbiAgICAgICAgaW5zdGFuY2VzLnB1c2goJ09iamVjdCcpXG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlcy5sZW5ndGggPiAwKSB7XG4gICAgICBzd2l0Y2ggKHR5cGVzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbXNnICs9IGBvZiB0eXBlICR7dHlwZXNbMF19YFxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtc2cgKz0gYG9uZSBvZiB0eXBlICR7dHlwZXNbMF19IG9yICR7dHlwZXNbMV19YFxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICBjb25zdCBsYXN0ID0gdHlwZXMucG9wKClcbiAgICAgICAgICBtc2cgKz0gYG9uZSBvZiB0eXBlICR7dHlwZXMuam9pbignLCAnKX0sIG9yICR7bGFzdH1gXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChpbnN0YW5jZXMubGVuZ3RoID4gMCB8fCBvdGhlci5sZW5ndGggPiAwKSB7XG4gICAgICAgIG1zZyArPSAnIG9yICdcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGluc3RhbmNlcy5sZW5ndGggPiAwKSB7XG4gICAgICBzd2l0Y2ggKGluc3RhbmNlcy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1zZyArPSBgYW4gaW5zdGFuY2Ugb2YgJHtpbnN0YW5jZXNbMF19YFxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtc2cgKz0gYGFuIGluc3RhbmNlIG9mICR7aW5zdGFuY2VzWzBdfSBvciAke2luc3RhbmNlc1sxXX1gXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIGNvbnN0IGxhc3QgPSBpbnN0YW5jZXMucG9wKClcbiAgICAgICAgICBtc2cgKz0gYGFuIGluc3RhbmNlIG9mICR7aW5zdGFuY2VzLmpvaW4oJywgJyl9LCBvciAke2xhc3R9YFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAob3RoZXIubGVuZ3RoID4gMCkge1xuICAgICAgICBtc2cgKz0gJyBvciAnXG4gICAgICB9XG4gICAgfVxuICAgIHN3aXRjaCAob3RoZXIubGVuZ3RoKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIDE6XG4gICAgICAgIGlmIChvdGhlclswXS50b0xvd2VyQ2FzZSgpICE9PSBvdGhlclswXSkge1xuICAgICAgICAgIG1zZyArPSAnYW4gJ1xuICAgICAgICB9XG4gICAgICAgIG1zZyArPSBgJHtvdGhlclswXX1gXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIDI6XG4gICAgICAgIG1zZyArPSBgb25lIG9mICR7b3RoZXJbMF19IG9yICR7b3RoZXJbMV19YFxuICAgICAgICBicmVha1xuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBjb25zdCBsYXN0ID0gb3RoZXIucG9wKClcbiAgICAgICAgbXNnICs9IGBvbmUgb2YgJHtvdGhlci5qb2luKCcsICcpfSwgb3IgJHtsYXN0fWBcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGFjdHVhbCA9PSBudWxsKSB7XG4gICAgICBtc2cgKz0gYC4gUmVjZWl2ZWQgJHthY3R1YWx9YFxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGFjdHVhbCA9PT0gJ2Z1bmN0aW9uJyAmJiBhY3R1YWwubmFtZSkge1xuICAgICAgbXNnICs9IGAuIFJlY2VpdmVkIGZ1bmN0aW9uICR7YWN0dWFsLm5hbWV9YFxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGFjdHVhbCA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHZhciBfYWN0dWFsJGNvbnN0cnVjdG9yXG4gICAgICBpZiAoXG4gICAgICAgIChfYWN0dWFsJGNvbnN0cnVjdG9yID0gYWN0dWFsLmNvbnN0cnVjdG9yKSAhPT0gbnVsbCAmJlxuICAgICAgICBfYWN0dWFsJGNvbnN0cnVjdG9yICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgX2FjdHVhbCRjb25zdHJ1Y3Rvci5uYW1lXG4gICAgICApIHtcbiAgICAgICAgbXNnICs9IGAuIFJlY2VpdmVkIGFuIGluc3RhbmNlIG9mICR7YWN0dWFsLmNvbnN0cnVjdG9yLm5hbWV9YFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgaW5zcGVjdGVkID0gaW5zcGVjdChhY3R1YWwsIHtcbiAgICAgICAgICBkZXB0aDogLTFcbiAgICAgICAgfSlcbiAgICAgICAgbXNnICs9IGAuIFJlY2VpdmVkICR7aW5zcGVjdGVkfWBcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGluc3BlY3RlZCA9IGluc3BlY3QoYWN0dWFsLCB7XG4gICAgICAgIGNvbG9yczogZmFsc2VcbiAgICAgIH0pXG4gICAgICBpZiAoaW5zcGVjdGVkLmxlbmd0aCA+IDI1KSB7XG4gICAgICAgIGluc3BlY3RlZCA9IGAke2luc3BlY3RlZC5zbGljZSgwLCAyNSl9Li4uYFxuICAgICAgfVxuICAgICAgbXNnICs9IGAuIFJlY2VpdmVkIHR5cGUgJHt0eXBlb2YgYWN0dWFsfSAoJHtpbnNwZWN0ZWR9KWBcbiAgICB9XG4gICAgcmV0dXJuIG1zZ1xuICB9LFxuICBUeXBlRXJyb3JcbilcbkUoXG4gICdFUlJfSU5WQUxJRF9BUkdfVkFMVUUnLFxuICAobmFtZSwgdmFsdWUsIHJlYXNvbiA9ICdpcyBpbnZhbGlkJykgPT4ge1xuICAgIGxldCBpbnNwZWN0ZWQgPSBpbnNwZWN0KHZhbHVlKVxuICAgIGlmIChpbnNwZWN0ZWQubGVuZ3RoID4gMTI4KSB7XG4gICAgICBpbnNwZWN0ZWQgPSBpbnNwZWN0ZWQuc2xpY2UoMCwgMTI4KSArICcuLi4nXG4gICAgfVxuICAgIGNvbnN0IHR5cGUgPSBuYW1lLmluY2x1ZGVzKCcuJykgPyAncHJvcGVydHknIDogJ2FyZ3VtZW50J1xuICAgIHJldHVybiBgVGhlICR7dHlwZX0gJyR7bmFtZX0nICR7cmVhc29ufS4gUmVjZWl2ZWQgJHtpbnNwZWN0ZWR9YFxuICB9LFxuICBUeXBlRXJyb3JcbilcbkUoXG4gICdFUlJfSU5WQUxJRF9SRVRVUk5fVkFMVUUnLFxuICAoaW5wdXQsIG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgdmFyIF92YWx1ZSRjb25zdHJ1Y3RvclxuICAgIGNvbnN0IHR5cGUgPVxuICAgICAgdmFsdWUgIT09IG51bGwgJiZcbiAgICAgIHZhbHVlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIChfdmFsdWUkY29uc3RydWN0b3IgPSB2YWx1ZS5jb25zdHJ1Y3RvcikgIT09IG51bGwgJiZcbiAgICAgIF92YWx1ZSRjb25zdHJ1Y3RvciAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBfdmFsdWUkY29uc3RydWN0b3IubmFtZVxuICAgICAgICA/IGBpbnN0YW5jZSBvZiAke3ZhbHVlLmNvbnN0cnVjdG9yLm5hbWV9YFxuICAgICAgICA6IGB0eXBlICR7dHlwZW9mIHZhbHVlfWBcbiAgICByZXR1cm4gYEV4cGVjdGVkICR7aW5wdXR9IHRvIGJlIHJldHVybmVkIGZyb20gdGhlIFwiJHtuYW1lfVwiYCArIGAgZnVuY3Rpb24gYnV0IGdvdCAke3R5cGV9LmBcbiAgfSxcbiAgVHlwZUVycm9yXG4pXG5FKFxuICAnRVJSX01JU1NJTkdfQVJHUycsXG4gICguLi5hcmdzKSA9PiB7XG4gICAgYXNzZXJ0KGFyZ3MubGVuZ3RoID4gMCwgJ0F0IGxlYXN0IG9uZSBhcmcgbmVlZHMgdG8gYmUgc3BlY2lmaWVkJylcbiAgICBsZXQgbXNnXG4gICAgY29uc3QgbGVuID0gYXJncy5sZW5ndGhcbiAgICBhcmdzID0gKEFycmF5LmlzQXJyYXkoYXJncykgPyBhcmdzIDogW2FyZ3NdKS5tYXAoKGEpID0+IGBcIiR7YX1cImApLmpvaW4oJyBvciAnKVxuICAgIHN3aXRjaCAobGVuKSB7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIG1zZyArPSBgVGhlICR7YXJnc1swXX0gYXJndW1lbnRgXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIDI6XG4gICAgICAgIG1zZyArPSBgVGhlICR7YXJnc1swXX0gYW5kICR7YXJnc1sxXX0gYXJndW1lbnRzYFxuICAgICAgICBicmVha1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAge1xuICAgICAgICAgIGNvbnN0IGxhc3QgPSBhcmdzLnBvcCgpXG4gICAgICAgICAgbXNnICs9IGBUaGUgJHthcmdzLmpvaW4oJywgJyl9LCBhbmQgJHtsYXN0fSBhcmd1bWVudHNgXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICB9XG4gICAgcmV0dXJuIGAke21zZ30gbXVzdCBiZSBzcGVjaWZpZWRgXG4gIH0sXG4gIFR5cGVFcnJvclxuKVxuRShcbiAgJ0VSUl9PVVRfT0ZfUkFOR0UnLFxuICAoc3RyLCByYW5nZSwgaW5wdXQpID0+IHtcbiAgICBhc3NlcnQocmFuZ2UsICdNaXNzaW5nIFwicmFuZ2VcIiBhcmd1bWVudCcpXG4gICAgbGV0IHJlY2VpdmVkXG4gICAgaWYgKE51bWJlci5pc0ludGVnZXIoaW5wdXQpICYmIE1hdGguYWJzKGlucHV0KSA+IDIgKiogMzIpIHtcbiAgICAgIHJlY2VpdmVkID0gYWRkTnVtZXJpY2FsU2VwYXJhdG9yKFN0cmluZyhpbnB1dCkpXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09ICdiaWdpbnQnKSB7XG4gICAgICByZWNlaXZlZCA9IFN0cmluZyhpbnB1dClcbiAgICAgIGlmIChpbnB1dCA+IDJuICoqIDMybiB8fCBpbnB1dCA8IC0oMm4gKiogMzJuKSkge1xuICAgICAgICByZWNlaXZlZCA9IGFkZE51bWVyaWNhbFNlcGFyYXRvcihyZWNlaXZlZClcbiAgICAgIH1cbiAgICAgIHJlY2VpdmVkICs9ICduJ1xuICAgIH0gZWxzZSB7XG4gICAgICByZWNlaXZlZCA9IGluc3BlY3QoaW5wdXQpXG4gICAgfVxuICAgIHJldHVybiBgVGhlIHZhbHVlIG9mIFwiJHtzdHJ9XCIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlICR7cmFuZ2V9LiBSZWNlaXZlZCAke3JlY2VpdmVkfWBcbiAgfSxcbiAgUmFuZ2VFcnJvclxuKVxuRSgnRVJSX01VTFRJUExFX0NBTExCQUNLJywgJ0NhbGxiYWNrIGNhbGxlZCBtdWx0aXBsZSB0aW1lcycsIEVycm9yKVxuRSgnRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQnLCAnVGhlICVzIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQnLCBFcnJvcilcbkUoJ0VSUl9TVFJFQU1fQUxSRUFEWV9GSU5JU0hFRCcsICdDYW5ub3QgY2FsbCAlcyBhZnRlciBhIHN0cmVhbSB3YXMgZmluaXNoZWQnLCBFcnJvcilcbkUoJ0VSUl9TVFJFQU1fQ0FOTk9UX1BJUEUnLCAnQ2Fubm90IHBpcGUsIG5vdCByZWFkYWJsZScsIEVycm9yKVxuRSgnRVJSX1NUUkVBTV9ERVNUUk9ZRUQnLCAnQ2Fubm90IGNhbGwgJXMgYWZ0ZXIgYSBzdHJlYW0gd2FzIGRlc3Ryb3llZCcsIEVycm9yKVxuRSgnRVJSX1NUUkVBTV9OVUxMX1ZBTFVFUycsICdNYXkgbm90IHdyaXRlIG51bGwgdmFsdWVzIHRvIHN0cmVhbScsIFR5cGVFcnJvcilcbkUoJ0VSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFJywgJ1ByZW1hdHVyZSBjbG9zZScsIEVycm9yKVxuRSgnRVJSX1NUUkVBTV9QVVNIX0FGVEVSX0VPRicsICdzdHJlYW0ucHVzaCgpIGFmdGVyIEVPRicsIEVycm9yKVxuRSgnRVJSX1NUUkVBTV9VTlNISUZUX0FGVEVSX0VORF9FVkVOVCcsICdzdHJlYW0udW5zaGlmdCgpIGFmdGVyIGVuZCBldmVudCcsIEVycm9yKVxuRSgnRVJSX1NUUkVBTV9XUklURV9BRlRFUl9FTkQnLCAnd3JpdGUgYWZ0ZXIgZW5kJywgRXJyb3IpXG5FKCdFUlJfVU5LTk9XTl9FTkNPRElORycsICdVbmtub3duIGVuY29kaW5nOiAlcycsIFR5cGVFcnJvcilcbm1vZHVsZS5leHBvcnRzID0ge1xuICBBYm9ydEVycm9yLFxuICBhZ2dyZWdhdGVUd29FcnJvcnM6IGhpZGVTdGFja0ZyYW1lcyhhZ2dyZWdhdGVUd29FcnJvcnMpLFxuICBoaWRlU3RhY2tGcmFtZXMsXG4gIGNvZGVzXG59XG4iLAogICAgIi8qIGVzbGludCBqc2RvYy9yZXF1aXJlLWpzZG9jOiBcImVycm9yXCIgKi9cblxuJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHtcbiAgQXJyYXlJc0FycmF5LFxuICBBcnJheVByb3RvdHlwZUluY2x1ZGVzLFxuICBBcnJheVByb3RvdHlwZUpvaW4sXG4gIEFycmF5UHJvdG90eXBlTWFwLFxuICBOdW1iZXJJc0ludGVnZXIsXG4gIE51bWJlcklzTmFOLFxuICBOdW1iZXJNQVhfU0FGRV9JTlRFR0VSLFxuICBOdW1iZXJNSU5fU0FGRV9JTlRFR0VSLFxuICBOdW1iZXJQYXJzZUludCxcbiAgT2JqZWN0UHJvdG90eXBlSGFzT3duUHJvcGVydHksXG4gIFJlZ0V4cFByb3RvdHlwZUV4ZWMsXG4gIFN0cmluZyxcbiAgU3RyaW5nUHJvdG90eXBlVG9VcHBlckNhc2UsXG4gIFN0cmluZ1Byb3RvdHlwZVRyaW1cbn0gPSByZXF1aXJlKCcuLi9vdXJzL3ByaW1vcmRpYWxzJylcbmNvbnN0IHtcbiAgaGlkZVN0YWNrRnJhbWVzLFxuICBjb2RlczogeyBFUlJfU09DS0VUX0JBRF9QT1JULCBFUlJfSU5WQUxJRF9BUkdfVFlQRSwgRVJSX0lOVkFMSURfQVJHX1ZBTFVFLCBFUlJfT1VUX09GX1JBTkdFLCBFUlJfVU5LTk9XTl9TSUdOQUwgfVxufSA9IHJlcXVpcmUoJy4uL291cnMvZXJyb3JzJylcbmNvbnN0IHsgbm9ybWFsaXplRW5jb2RpbmcgfSA9IHJlcXVpcmUoJy4uL291cnMvdXRpbCcpXG5jb25zdCB7IGlzQXN5bmNGdW5jdGlvbiwgaXNBcnJheUJ1ZmZlclZpZXcgfSA9IHJlcXVpcmUoJy4uL291cnMvdXRpbCcpLnR5cGVzXG5jb25zdCBzaWduYWxzID0ge31cblxuLyoqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNJbnQzMih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT09ICh2YWx1ZSB8IDApXG59XG5cbi8qKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzVWludDMyKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gdmFsdWUgPj4+IDBcbn1cbmNvbnN0IG9jdGFsUmVnID0gL15bMC03XSskL1xuY29uc3QgbW9kZURlc2MgPSAnbXVzdCBiZSBhIDMyLWJpdCB1bnNpZ25lZCBpbnRlZ2VyIG9yIGFuIG9jdGFsIHN0cmluZydcblxuLyoqXG4gKiBQYXJzZSBhbmQgdmFsaWRhdGUgdmFsdWVzIHRoYXQgd2lsbCBiZSBjb252ZXJ0ZWQgaW50byBtb2RlX3QgKHRoZSBTXypcbiAqIGNvbnN0YW50cykuIE9ubHkgdmFsaWQgbnVtYmVycyBhbmQgb2N0YWwgc3RyaW5ncyBhcmUgYWxsb3dlZC4gVGhleSBjb3VsZCBiZVxuICogY29udmVydGVkIHRvIDMyLWJpdCB1bnNpZ25lZCBpbnRlZ2VycyBvciBub24tbmVnYXRpdmUgc2lnbmVkIGludGVnZXJzIGluIHRoZVxuICogQysrIGxhbmQsIGJ1dCBhbnkgdmFsdWUgaGlnaGVyIHRoYW4gMG83Nzcgd2lsbCByZXN1bHQgaW4gcGxhdGZvcm0tc3BlY2lmaWNcbiAqIGJlaGF2aW9ycy5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVmFsdWVzIHRvIGJlIHZhbGlkYXRlZFxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgTmFtZSBvZiB0aGUgYXJndW1lbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZGVmXSBJZiBzcGVjaWZpZWQsIHdpbGwgYmUgcmV0dXJuZWQgZm9yIGludmFsaWQgdmFsdWVzXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5mdW5jdGlvbiBwYXJzZUZpbGVNb2RlKHZhbHVlLCBuYW1lLCBkZWYpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICB2YWx1ZSA9IGRlZlxuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKFJlZ0V4cFByb3RvdHlwZUV4ZWMob2N0YWxSZWcsIHZhbHVlKSA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19WQUxVRShuYW1lLCB2YWx1ZSwgbW9kZURlc2MpXG4gICAgfVxuICAgIHZhbHVlID0gTnVtYmVyUGFyc2VJbnQodmFsdWUsIDgpXG4gIH1cbiAgdmFsaWRhdGVVaW50MzIodmFsdWUsIG5hbWUpXG4gIHJldHVybiB2YWx1ZVxufVxuXG4vKipcbiAqIEBjYWxsYmFjayB2YWxpZGF0ZUludGVnZXJcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge251bWJlcn0gW21pbl1cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbWF4XVxuICogQHJldHVybnMge2Fzc2VydHMgdmFsdWUgaXMgbnVtYmVyfVxuICovXG5cbi8qKiBAdHlwZSB7dmFsaWRhdGVJbnRlZ2VyfSAqL1xuY29uc3QgdmFsaWRhdGVJbnRlZ2VyID0gaGlkZVN0YWNrRnJhbWVzKCh2YWx1ZSwgbmFtZSwgbWluID0gTnVtYmVyTUlOX1NBRkVfSU5URUdFUiwgbWF4ID0gTnVtYmVyTUFYX1NBRkVfSU5URUdFUikgPT4ge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJykgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKG5hbWUsICdudW1iZXInLCB2YWx1ZSlcbiAgaWYgKCFOdW1iZXJJc0ludGVnZXIodmFsdWUpKSB0aHJvdyBuZXcgRVJSX09VVF9PRl9SQU5HRShuYW1lLCAnYW4gaW50ZWdlcicsIHZhbHVlKVxuICBpZiAodmFsdWUgPCBtaW4gfHwgdmFsdWUgPiBtYXgpIHRocm93IG5ldyBFUlJfT1VUX09GX1JBTkdFKG5hbWUsIGA+PSAke21pbn0gJiYgPD0gJHttYXh9YCwgdmFsdWUpXG59KVxuXG4vKipcbiAqIEBjYWxsYmFjayB2YWxpZGF0ZUludDMyXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHtudW1iZXJ9IFttaW5dXG4gKiBAcGFyYW0ge251bWJlcn0gW21heF1cbiAqIEByZXR1cm5zIHthc3NlcnRzIHZhbHVlIGlzIG51bWJlcn1cbiAqL1xuXG4vKiogQHR5cGUge3ZhbGlkYXRlSW50MzJ9ICovXG5jb25zdCB2YWxpZGF0ZUludDMyID0gaGlkZVN0YWNrRnJhbWVzKCh2YWx1ZSwgbmFtZSwgbWluID0gLTIxNDc0ODM2NDgsIG1heCA9IDIxNDc0ODM2NDcpID0+IHtcbiAgLy8gVGhlIGRlZmF1bHRzIGZvciBtaW4gYW5kIG1heCBjb3JyZXNwb25kIHRvIHRoZSBsaW1pdHMgb2YgMzItYml0IGludGVnZXJzLlxuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRShuYW1lLCAnbnVtYmVyJywgdmFsdWUpXG4gIH1cbiAgaWYgKCFOdW1iZXJJc0ludGVnZXIodmFsdWUpKSB7XG4gICAgdGhyb3cgbmV3IEVSUl9PVVRfT0ZfUkFOR0UobmFtZSwgJ2FuIGludGVnZXInLCB2YWx1ZSlcbiAgfVxuICBpZiAodmFsdWUgPCBtaW4gfHwgdmFsdWUgPiBtYXgpIHtcbiAgICB0aHJvdyBuZXcgRVJSX09VVF9PRl9SQU5HRShuYW1lLCBgPj0gJHttaW59ICYmIDw9ICR7bWF4fWAsIHZhbHVlKVxuICB9XG59KVxuXG4vKipcbiAqIEBjYWxsYmFjayB2YWxpZGF0ZVVpbnQzMlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7bnVtYmVyfGJvb2xlYW59IFtwb3NpdGl2ZT1mYWxzZV1cbiAqIEByZXR1cm5zIHthc3NlcnRzIHZhbHVlIGlzIG51bWJlcn1cbiAqL1xuXG4vKiogQHR5cGUge3ZhbGlkYXRlVWludDMyfSAqL1xuY29uc3QgdmFsaWRhdGVVaW50MzIgPSBoaWRlU3RhY2tGcmFtZXMoKHZhbHVlLCBuYW1lLCBwb3NpdGl2ZSA9IGZhbHNlKSA9PiB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKG5hbWUsICdudW1iZXInLCB2YWx1ZSlcbiAgfVxuICBpZiAoIU51bWJlcklzSW50ZWdlcih2YWx1ZSkpIHtcbiAgICB0aHJvdyBuZXcgRVJSX09VVF9PRl9SQU5HRShuYW1lLCAnYW4gaW50ZWdlcicsIHZhbHVlKVxuICB9XG4gIGNvbnN0IG1pbiA9IHBvc2l0aXZlID8gMSA6IDBcbiAgLy8gMiAqKiAzMiA9PT0gNDI5NDk2NzI5NlxuICBjb25zdCBtYXggPSA0Mjk0OTY3Mjk1XG4gIGlmICh2YWx1ZSA8IG1pbiB8fCB2YWx1ZSA+IG1heCkge1xuICAgIHRocm93IG5ldyBFUlJfT1VUX09GX1JBTkdFKG5hbWUsIGA+PSAke21pbn0gJiYgPD0gJHttYXh9YCwgdmFsdWUpXG4gIH1cbn0pXG5cbi8qKlxuICogQGNhbGxiYWNrIHZhbGlkYXRlU3RyaW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHJldHVybnMge2Fzc2VydHMgdmFsdWUgaXMgc3RyaW5nfVxuICovXG5cbi8qKiBAdHlwZSB7dmFsaWRhdGVTdHJpbmd9ICovXG5mdW5jdGlvbiB2YWxpZGF0ZVN0cmluZyh2YWx1ZSwgbmFtZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKG5hbWUsICdzdHJpbmcnLCB2YWx1ZSlcbn1cblxuLyoqXG4gKiBAY2FsbGJhY2sgdmFsaWRhdGVOdW1iZXJcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge251bWJlcn0gW21pbl1cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbWF4XVxuICogQHJldHVybnMge2Fzc2VydHMgdmFsdWUgaXMgbnVtYmVyfVxuICovXG5cbi8qKiBAdHlwZSB7dmFsaWRhdGVOdW1iZXJ9ICovXG5mdW5jdGlvbiB2YWxpZGF0ZU51bWJlcih2YWx1ZSwgbmFtZSwgbWluID0gdW5kZWZpbmVkLCBtYXgpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicpIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRShuYW1lLCAnbnVtYmVyJywgdmFsdWUpXG4gIGlmIChcbiAgICAobWluICE9IG51bGwgJiYgdmFsdWUgPCBtaW4pIHx8XG4gICAgKG1heCAhPSBudWxsICYmIHZhbHVlID4gbWF4KSB8fFxuICAgICgobWluICE9IG51bGwgfHwgbWF4ICE9IG51bGwpICYmIE51bWJlcklzTmFOKHZhbHVlKSlcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVSUl9PVVRfT0ZfUkFOR0UoXG4gICAgICBuYW1lLFxuICAgICAgYCR7bWluICE9IG51bGwgPyBgPj0gJHttaW59YCA6ICcnfSR7bWluICE9IG51bGwgJiYgbWF4ICE9IG51bGwgPyAnICYmICcgOiAnJ30ke21heCAhPSBudWxsID8gYDw9ICR7bWF4fWAgOiAnJ31gLFxuICAgICAgdmFsdWVcbiAgICApXG4gIH1cbn1cblxuLyoqXG4gKiBAY2FsbGJhY2sgdmFsaWRhdGVPbmVPZlxuICogQHRlbXBsYXRlIFRcbiAqIEBwYXJhbSB7VH0gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge1RbXX0gb25lT2ZcbiAqL1xuXG4vKiogQHR5cGUge3ZhbGlkYXRlT25lT2Z9ICovXG5jb25zdCB2YWxpZGF0ZU9uZU9mID0gaGlkZVN0YWNrRnJhbWVzKCh2YWx1ZSwgbmFtZSwgb25lT2YpID0+IHtcbiAgaWYgKCFBcnJheVByb3RvdHlwZUluY2x1ZGVzKG9uZU9mLCB2YWx1ZSkpIHtcbiAgICBjb25zdCBhbGxvd2VkID0gQXJyYXlQcm90b3R5cGVKb2luKFxuICAgICAgQXJyYXlQcm90b3R5cGVNYXAob25lT2YsICh2KSA9PiAodHlwZW9mIHYgPT09ICdzdHJpbmcnID8gYCcke3Z9J2AgOiBTdHJpbmcodikpKSxcbiAgICAgICcsICdcbiAgICApXG4gICAgY29uc3QgcmVhc29uID0gJ211c3QgYmUgb25lIG9mOiAnICsgYWxsb3dlZFxuICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVkFMVUUobmFtZSwgdmFsdWUsIHJlYXNvbilcbiAgfVxufSlcblxuLyoqXG4gKiBAY2FsbGJhY2sgdmFsaWRhdGVCb29sZWFuXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHJldHVybnMge2Fzc2VydHMgdmFsdWUgaXMgYm9vbGVhbn1cbiAqL1xuXG4vKiogQHR5cGUge3ZhbGlkYXRlQm9vbGVhbn0gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQm9vbGVhbih2YWx1ZSwgbmFtZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnYm9vbGVhbicpIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRShuYW1lLCAnYm9vbGVhbicsIHZhbHVlKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7YW55fSBvcHRpb25zXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKiBAcGFyYW0ge2Jvb2xlYW59IGRlZmF1bHRWYWx1ZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGdldE93blByb3BlcnR5VmFsdWVPckRlZmF1bHQob3B0aW9ucywga2V5LCBkZWZhdWx0VmFsdWUpIHtcbiAgcmV0dXJuIG9wdGlvbnMgPT0gbnVsbCB8fCAhT2JqZWN0UHJvdG90eXBlSGFzT3duUHJvcGVydHkob3B0aW9ucywga2V5KSA/IGRlZmF1bHRWYWx1ZSA6IG9wdGlvbnNba2V5XVxufVxuXG4vKipcbiAqIEBjYWxsYmFjayB2YWxpZGF0ZU9iamVjdFxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7e1xuICogICBhbGxvd0FycmF5PzogYm9vbGVhbixcbiAqICAgYWxsb3dGdW5jdGlvbj86IGJvb2xlYW4sXG4gKiAgIG51bGxhYmxlPzogYm9vbGVhblxuICogfX0gW29wdGlvbnNdXG4gKi9cblxuLyoqIEB0eXBlIHt2YWxpZGF0ZU9iamVjdH0gKi9cbmNvbnN0IHZhbGlkYXRlT2JqZWN0ID0gaGlkZVN0YWNrRnJhbWVzKCh2YWx1ZSwgbmFtZSwgb3B0aW9ucyA9IG51bGwpID0+IHtcbiAgY29uc3QgYWxsb3dBcnJheSA9IGdldE93blByb3BlcnR5VmFsdWVPckRlZmF1bHQob3B0aW9ucywgJ2FsbG93QXJyYXknLCBmYWxzZSlcbiAgY29uc3QgYWxsb3dGdW5jdGlvbiA9IGdldE93blByb3BlcnR5VmFsdWVPckRlZmF1bHQob3B0aW9ucywgJ2FsbG93RnVuY3Rpb24nLCBmYWxzZSlcbiAgY29uc3QgbnVsbGFibGUgPSBnZXRPd25Qcm9wZXJ0eVZhbHVlT3JEZWZhdWx0KG9wdGlvbnMsICdudWxsYWJsZScsIGZhbHNlKVxuICBpZiAoXG4gICAgKCFudWxsYWJsZSAmJiB2YWx1ZSA9PT0gbnVsbCkgfHxcbiAgICAoIWFsbG93QXJyYXkgJiYgQXJyYXlJc0FycmF5KHZhbHVlKSkgfHxcbiAgICAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyAmJiAoIWFsbG93RnVuY3Rpb24gfHwgdHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nKSlcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKG5hbWUsICdPYmplY3QnLCB2YWx1ZSlcbiAgfVxufSlcblxuLyoqXG4gKiBAY2FsbGJhY2sgdmFsaWRhdGVEaWN0aW9uYXJ5IC0gV2UgYXJlIHVzaW5nIHRoZSBXZWIgSURMIFN0YW5kYXJkIGRlZmluaXRpb25cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiBcImRpY3Rpb25hcnlcIiBoZXJlLCB3aGljaCBtZWFucyBhbnkgdmFsdWVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aG9zZSBUeXBlIGlzIGVpdGhlciBVbmRlZmluZWQsIE51bGwsIG9yXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0ICh3aGljaCBpbmNsdWRlcyBmdW5jdGlvbnMpLlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBzZWUgaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy1kaWN0aW9uYXJ5XG4gKiBAc2VlIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyN0YWJsZS10eXBlb2Ytb3BlcmF0b3ItcmVzdWx0c1xuICovXG5cbi8qKiBAdHlwZSB7dmFsaWRhdGVEaWN0aW9uYXJ5fSAqL1xuY29uc3QgdmFsaWRhdGVEaWN0aW9uYXJ5ID0gaGlkZVN0YWNrRnJhbWVzKCh2YWx1ZSwgbmFtZSkgPT4ge1xuICBpZiAodmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRShuYW1lLCAnYSBkaWN0aW9uYXJ5JywgdmFsdWUpXG4gIH1cbn0pXG5cbi8qKlxuICogQGNhbGxiYWNrIHZhbGlkYXRlQXJyYXlcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge251bWJlcn0gW21pbkxlbmd0aF1cbiAqIEByZXR1cm5zIHthc3NlcnRzIHZhbHVlIGlzIGFueVtdfVxuICovXG5cbi8qKiBAdHlwZSB7dmFsaWRhdGVBcnJheX0gKi9cbmNvbnN0IHZhbGlkYXRlQXJyYXkgPSBoaWRlU3RhY2tGcmFtZXMoKHZhbHVlLCBuYW1lLCBtaW5MZW5ndGggPSAwKSA9PiB7XG4gIGlmICghQXJyYXlJc0FycmF5KHZhbHVlKSkge1xuICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRShuYW1lLCAnQXJyYXknLCB2YWx1ZSlcbiAgfVxuICBpZiAodmFsdWUubGVuZ3RoIDwgbWluTGVuZ3RoKSB7XG4gICAgY29uc3QgcmVhc29uID0gYG11c3QgYmUgbG9uZ2VyIHRoYW4gJHttaW5MZW5ndGh9YFxuICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVkFMVUUobmFtZSwgdmFsdWUsIHJlYXNvbilcbiAgfVxufSlcblxuLyoqXG4gKiBAY2FsbGJhY2sgdmFsaWRhdGVTdHJpbmdBcnJheVxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEByZXR1cm5zIHthc3NlcnRzIHZhbHVlIGlzIHN0cmluZ1tdfVxuICovXG5cbi8qKiBAdHlwZSB7dmFsaWRhdGVTdHJpbmdBcnJheX0gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlU3RyaW5nQXJyYXkodmFsdWUsIG5hbWUpIHtcbiAgdmFsaWRhdGVBcnJheSh2YWx1ZSwgbmFtZSlcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgIHZhbGlkYXRlU3RyaW5nKHZhbHVlW2ldLCBgJHtuYW1lfVske2l9XWApXG4gIH1cbn1cblxuLyoqXG4gKiBAY2FsbGJhY2sgdmFsaWRhdGVCb29sZWFuQXJyYXlcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcmV0dXJucyB7YXNzZXJ0cyB2YWx1ZSBpcyBib29sZWFuW119XG4gKi9cblxuLyoqIEB0eXBlIHt2YWxpZGF0ZUJvb2xlYW5BcnJheX0gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQm9vbGVhbkFycmF5KHZhbHVlLCBuYW1lKSB7XG4gIHZhbGlkYXRlQXJyYXkodmFsdWUsIG5hbWUpXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICB2YWxpZGF0ZUJvb2xlYW4odmFsdWVbaV0sIGAke25hbWV9WyR7aX1dYClcbiAgfVxufVxuXG4vKipcbiAqIEBjYWxsYmFjayB2YWxpZGF0ZUFib3J0U2lnbmFsQXJyYXlcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcmV0dXJucyB7YXNzZXJ0cyB2YWx1ZSBpcyBBYm9ydFNpZ25hbFtdfVxuICovXG5cbi8qKiBAdHlwZSB7dmFsaWRhdGVBYm9ydFNpZ25hbEFycmF5fSAqL1xuZnVuY3Rpb24gdmFsaWRhdGVBYm9ydFNpZ25hbEFycmF5KHZhbHVlLCBuYW1lKSB7XG4gIHZhbGlkYXRlQXJyYXkodmFsdWUsIG5hbWUpXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBzaWduYWwgPSB2YWx1ZVtpXVxuICAgIGNvbnN0IGluZGV4ZWROYW1lID0gYCR7bmFtZX1bJHtpfV1gXG4gICAgaWYgKHNpZ25hbCA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoaW5kZXhlZE5hbWUsICdBYm9ydFNpZ25hbCcsIHNpZ25hbClcbiAgICB9XG4gICAgdmFsaWRhdGVBYm9ydFNpZ25hbChzaWduYWwsIGluZGV4ZWROYW1lKVxuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHsqfSBzaWduYWxcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbmFtZT0nc2lnbmFsJ11cbiAqIEByZXR1cm5zIHthc3NlcnRzIHNpZ25hbCBpcyBrZXlvZiBzaWduYWxzfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVNpZ25hbE5hbWUoc2lnbmFsLCBuYW1lID0gJ3NpZ25hbCcpIHtcbiAgdmFsaWRhdGVTdHJpbmcoc2lnbmFsLCBuYW1lKVxuICBpZiAoc2lnbmFsc1tzaWduYWxdID09PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoc2lnbmFsc1tTdHJpbmdQcm90b3R5cGVUb1VwcGVyQ2FzZShzaWduYWwpXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRVJSX1VOS05PV05fU0lHTkFMKHNpZ25hbCArICcgKHNpZ25hbHMgbXVzdCB1c2UgYWxsIGNhcGl0YWwgbGV0dGVycyknKVxuICAgIH1cbiAgICB0aHJvdyBuZXcgRVJSX1VOS05PV05fU0lHTkFMKHNpZ25hbClcbiAgfVxufVxuXG4vKipcbiAqIEBjYWxsYmFjayB2YWxpZGF0ZUJ1ZmZlclxuICogQHBhcmFtIHsqfSBidWZmZXJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbmFtZT0nYnVmZmVyJ11cbiAqIEByZXR1cm5zIHthc3NlcnRzIGJ1ZmZlciBpcyBBcnJheUJ1ZmZlclZpZXd9XG4gKi9cblxuLyoqIEB0eXBlIHt2YWxpZGF0ZUJ1ZmZlcn0gKi9cbmNvbnN0IHZhbGlkYXRlQnVmZmVyID0gaGlkZVN0YWNrRnJhbWVzKChidWZmZXIsIG5hbWUgPSAnYnVmZmVyJykgPT4ge1xuICBpZiAoIWlzQXJyYXlCdWZmZXJWaWV3KGJ1ZmZlcikpIHtcbiAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUobmFtZSwgWydCdWZmZXInLCAnVHlwZWRBcnJheScsICdEYXRhVmlldyddLCBidWZmZXIpXG4gIH1cbn0pXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGRhdGFcbiAqIEBwYXJhbSB7c3RyaW5nfSBlbmNvZGluZ1xuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUVuY29kaW5nKGRhdGEsIGVuY29kaW5nKSB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRFbmNvZGluZyA9IG5vcm1hbGl6ZUVuY29kaW5nKGVuY29kaW5nKVxuICBjb25zdCBsZW5ndGggPSBkYXRhLmxlbmd0aFxuICBpZiAobm9ybWFsaXplZEVuY29kaW5nID09PSAnaGV4JyAmJiBsZW5ndGggJSAyICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19WQUxVRSgnZW5jb2RpbmcnLCBlbmNvZGluZywgYGlzIGludmFsaWQgZm9yIGRhdGEgb2YgbGVuZ3RoICR7bGVuZ3RofWApXG4gIH1cbn1cblxuLyoqXG4gKiBDaGVjayB0aGF0IHRoZSBwb3J0IG51bWJlciBpcyBub3QgTmFOIHdoZW4gY29lcmNlZCB0byBhIG51bWJlcixcbiAqIGlzIGFuIGludGVnZXIgYW5kIHRoYXQgaXQgZmFsbHMgd2l0aGluIHRoZSBsZWdhbCByYW5nZSBvZiBwb3J0IG51bWJlcnMuXG4gKiBAcGFyYW0geyp9IHBvcnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbmFtZT0nUG9ydCddXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFthbGxvd1plcm89dHJ1ZV1cbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlUG9ydChwb3J0LCBuYW1lID0gJ1BvcnQnLCBhbGxvd1plcm8gPSB0cnVlKSB7XG4gIGlmIChcbiAgICAodHlwZW9mIHBvcnQgIT09ICdudW1iZXInICYmIHR5cGVvZiBwb3J0ICE9PSAnc3RyaW5nJykgfHxcbiAgICAodHlwZW9mIHBvcnQgPT09ICdzdHJpbmcnICYmIFN0cmluZ1Byb3RvdHlwZVRyaW0ocG9ydCkubGVuZ3RoID09PSAwKSB8fFxuICAgICtwb3J0ICE9PSArcG9ydCA+Pj4gMCB8fFxuICAgIHBvcnQgPiAweGZmZmYgfHxcbiAgICAocG9ydCA9PT0gMCAmJiAhYWxsb3daZXJvKVxuICApIHtcbiAgICB0aHJvdyBuZXcgRVJSX1NPQ0tFVF9CQURfUE9SVChuYW1lLCBwb3J0LCBhbGxvd1plcm8pXG4gIH1cbiAgcmV0dXJuIHBvcnQgfCAwXG59XG5cbi8qKlxuICogQGNhbGxiYWNrIHZhbGlkYXRlQWJvcnRTaWduYWxcbiAqIEBwYXJhbSB7Kn0gc2lnbmFsXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICovXG5cbi8qKiBAdHlwZSB7dmFsaWRhdGVBYm9ydFNpZ25hbH0gKi9cbmNvbnN0IHZhbGlkYXRlQWJvcnRTaWduYWwgPSBoaWRlU3RhY2tGcmFtZXMoKHNpZ25hbCwgbmFtZSkgPT4ge1xuICBpZiAoc2lnbmFsICE9PSB1bmRlZmluZWQgJiYgKHNpZ25hbCA9PT0gbnVsbCB8fCB0eXBlb2Ygc2lnbmFsICE9PSAnb2JqZWN0JyB8fCAhKCdhYm9ydGVkJyBpbiBzaWduYWwpKSkge1xuICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRShuYW1lLCAnQWJvcnRTaWduYWwnLCBzaWduYWwpXG4gIH1cbn0pXG5cbi8qKlxuICogQGNhbGxiYWNrIHZhbGlkYXRlRnVuY3Rpb25cbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcmV0dXJucyB7YXNzZXJ0cyB2YWx1ZSBpcyBGdW5jdGlvbn1cbiAqL1xuXG4vKiogQHR5cGUge3ZhbGlkYXRlRnVuY3Rpb259ICovXG5jb25zdCB2YWxpZGF0ZUZ1bmN0aW9uID0gaGlkZVN0YWNrRnJhbWVzKCh2YWx1ZSwgbmFtZSkgPT4ge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nKSB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUobmFtZSwgJ0Z1bmN0aW9uJywgdmFsdWUpXG59KVxuXG4vKipcbiAqIEBjYWxsYmFjayB2YWxpZGF0ZVBsYWluRnVuY3Rpb25cbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcmV0dXJucyB7YXNzZXJ0cyB2YWx1ZSBpcyBGdW5jdGlvbn1cbiAqL1xuXG4vKiogQHR5cGUge3ZhbGlkYXRlUGxhaW5GdW5jdGlvbn0gKi9cbmNvbnN0IHZhbGlkYXRlUGxhaW5GdW5jdGlvbiA9IGhpZGVTdGFja0ZyYW1lcygodmFsdWUsIG5hbWUpID0+IHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Z1bmN0aW9uJyB8fCBpc0FzeW5jRnVuY3Rpb24odmFsdWUpKSB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUobmFtZSwgJ0Z1bmN0aW9uJywgdmFsdWUpXG59KVxuXG4vKipcbiAqIEBjYWxsYmFjayB2YWxpZGF0ZVVuZGVmaW5lZFxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEByZXR1cm5zIHthc3NlcnRzIHZhbHVlIGlzIHVuZGVmaW5lZH1cbiAqL1xuXG4vKiogQHR5cGUge3ZhbGlkYXRlVW5kZWZpbmVkfSAqL1xuY29uc3QgdmFsaWRhdGVVbmRlZmluZWQgPSBoaWRlU3RhY2tGcmFtZXMoKHZhbHVlLCBuYW1lKSA9PiB7XG4gIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUobmFtZSwgJ3VuZGVmaW5lZCcsIHZhbHVlKVxufSlcblxuLyoqXG4gKiBAdGVtcGxhdGUgVFxuICogQHBhcmFtIHtUfSB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7VFtdfSB1bmlvblxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVVuaW9uKHZhbHVlLCBuYW1lLCB1bmlvbikge1xuICBpZiAoIUFycmF5UHJvdG90eXBlSW5jbHVkZXModW5pb24sIHZhbHVlKSkge1xuICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRShuYW1lLCBgKCcke0FycmF5UHJvdG90eXBlSm9pbih1bmlvbiwgJ3wnKX0nKWAsIHZhbHVlKVxuICB9XG59XG5cbi8qXG4gIFRoZSBydWxlcyBmb3IgdGhlIExpbmsgaGVhZGVyIGZpZWxkIGFyZSBkZXNjcmliZWQgaGVyZTpcbiAgaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzgyODguaHRtbCNzZWN0aW9uLTNcblxuICBUaGlzIHJlZ2V4IHZhbGlkYXRlcyBhbnkgc3RyaW5nIHN1cnJvdW5kZWQgYnkgYW5nbGUgYnJhY2tldHNcbiAgKG5vdCBuZWNlc3NhcmlseSBhIHZhbGlkIFVSSSByZWZlcmVuY2UpIGZvbGxvd2VkIGJ5IHplcm8gb3IgbW9yZVxuICBsaW5rLXBhcmFtcyBzZXBhcmF0ZWQgYnkgc2VtaWNvbG9ucy5cbiovXG5jb25zdCBsaW5rVmFsdWVSZWdFeHAgPSAvXig/OjxbXj5dKj4pKD86XFxzKjtcXHMqW147XCJcXHNdKyg/Oj0oXCIpP1teO1wiXFxzXSpcXDEpPykqJC9cblxuLyoqXG4gKiBAcGFyYW0ge2FueX0gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlTGlua0hlYWRlckZvcm1hdCh2YWx1ZSwgbmFtZSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJyB8fCAhUmVnRXhwUHJvdG90eXBlRXhlYyhsaW5rVmFsdWVSZWdFeHAsIHZhbHVlKSkge1xuICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVkFMVUUoXG4gICAgICBuYW1lLFxuICAgICAgdmFsdWUsXG4gICAgICAnbXVzdCBiZSBhbiBhcnJheSBvciBzdHJpbmcgb2YgZm9ybWF0IFwiPC9zdHlsZXMuY3NzPjsgcmVsPXByZWxvYWQ7IGFzPXN0eWxlXCInXG4gICAgKVxuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHthbnl9IGhpbnRzXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlTGlua0hlYWRlclZhbHVlKGhpbnRzKSB7XG4gIGlmICh0eXBlb2YgaGludHMgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFsaWRhdGVMaW5rSGVhZGVyRm9ybWF0KGhpbnRzLCAnaGludHMnKVxuICAgIHJldHVybiBoaW50c1xuICB9IGVsc2UgaWYgKEFycmF5SXNBcnJheShoaW50cykpIHtcbiAgICBjb25zdCBoaW50c0xlbmd0aCA9IGhpbnRzLmxlbmd0aFxuICAgIGxldCByZXN1bHQgPSAnJ1xuICAgIGlmIChoaW50c0xlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhpbnRzTGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGxpbmsgPSBoaW50c1tpXVxuICAgICAgdmFsaWRhdGVMaW5rSGVhZGVyRm9ybWF0KGxpbmssICdoaW50cycpXG4gICAgICByZXN1bHQgKz0gbGlua1xuICAgICAgaWYgKGkgIT09IGhpbnRzTGVuZ3RoIC0gMSkge1xuICAgICAgICByZXN1bHQgKz0gJywgJ1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cbiAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19WQUxVRShcbiAgICAnaGludHMnLFxuICAgIGhpbnRzLFxuICAgICdtdXN0IGJlIGFuIGFycmF5IG9yIHN0cmluZyBvZiBmb3JtYXQgXCI8L3N0eWxlcy5jc3M+OyByZWw9cHJlbG9hZDsgYXM9c3R5bGVcIidcbiAgKVxufVxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGlzSW50MzIsXG4gIGlzVWludDMyLFxuICBwYXJzZUZpbGVNb2RlLFxuICB2YWxpZGF0ZUFycmF5LFxuICB2YWxpZGF0ZVN0cmluZ0FycmF5LFxuICB2YWxpZGF0ZUJvb2xlYW5BcnJheSxcbiAgdmFsaWRhdGVBYm9ydFNpZ25hbEFycmF5LFxuICB2YWxpZGF0ZUJvb2xlYW4sXG4gIHZhbGlkYXRlQnVmZmVyLFxuICB2YWxpZGF0ZURpY3Rpb25hcnksXG4gIHZhbGlkYXRlRW5jb2RpbmcsXG4gIHZhbGlkYXRlRnVuY3Rpb24sXG4gIHZhbGlkYXRlSW50MzIsXG4gIHZhbGlkYXRlSW50ZWdlcixcbiAgdmFsaWRhdGVOdW1iZXIsXG4gIHZhbGlkYXRlT2JqZWN0LFxuICB2YWxpZGF0ZU9uZU9mLFxuICB2YWxpZGF0ZVBsYWluRnVuY3Rpb24sXG4gIHZhbGlkYXRlUG9ydCxcbiAgdmFsaWRhdGVTaWduYWxOYW1lLFxuICB2YWxpZGF0ZVN0cmluZyxcbiAgdmFsaWRhdGVVaW50MzIsXG4gIHZhbGlkYXRlVW5kZWZpbmVkLFxuICB2YWxpZGF0ZVVuaW9uLFxuICB2YWxpZGF0ZUFib3J0U2lnbmFsLFxuICB2YWxpZGF0ZUxpbmtIZWFkZXJWYWx1ZVxufVxuIiwKICAgICIvLyBmb3Igbm93IGp1c3QgZXhwb3NlIHRoZSBidWlsdGluIHByb2Nlc3MgZ2xvYmFsIGZyb20gbm9kZS5qc1xubW9kdWxlLmV4cG9ydHMgPSBnbG9iYWwucHJvY2VzcztcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgU3ltYm9sQXN5bmNJdGVyYXRvciwgU3ltYm9sSXRlcmF0b3IsIFN5bWJvbEZvciB9ID0gcmVxdWlyZSgnLi4vLi4vb3Vycy9wcmltb3JkaWFscycpXG5cbi8vIFdlIG5lZWQgdG8gdXNlIFN5bWJvbEZvciB0byBtYWtlIHRoZXNlIGdsb2JhbGx5IGF2YWlsYWJsZVxuLy8gZm9yIGludGVyb3B0IHdpdGggcmVhZGFibGUtc3RyZWFtLCBpLmUuIHJlYWRhYmxlLXN0cmVhbVxuLy8gYW5kIG5vZGUgY29yZSBuZWVkcyB0byBiZSBhYmxlIHRvIHJlYWQvd3JpdGUgcHJpdmF0ZSBzdGF0ZVxuLy8gZnJvbSBlYWNoIG90aGVyIGZvciBwcm9wZXIgaW50ZXJvcGVyYWJpbGl0eS5cbmNvbnN0IGtJc0Rlc3Ryb3llZCA9IFN5bWJvbEZvcignbm9kZWpzLnN0cmVhbS5kZXN0cm95ZWQnKVxuY29uc3Qga0lzRXJyb3JlZCA9IFN5bWJvbEZvcignbm9kZWpzLnN0cmVhbS5lcnJvcmVkJylcbmNvbnN0IGtJc1JlYWRhYmxlID0gU3ltYm9sRm9yKCdub2RlanMuc3RyZWFtLnJlYWRhYmxlJylcbmNvbnN0IGtJc1dyaXRhYmxlID0gU3ltYm9sRm9yKCdub2RlanMuc3RyZWFtLndyaXRhYmxlJylcbmNvbnN0IGtJc0Rpc3R1cmJlZCA9IFN5bWJvbEZvcignbm9kZWpzLnN0cmVhbS5kaXN0dXJiZWQnKVxuY29uc3Qga0lzQ2xvc2VkUHJvbWlzZSA9IFN5bWJvbEZvcignbm9kZWpzLndlYnN0cmVhbS5pc0Nsb3NlZFByb21pc2UnKVxuY29uc3Qga0NvbnRyb2xsZXJFcnJvckZ1bmN0aW9uID0gU3ltYm9sRm9yKCdub2RlanMud2Vic3RyZWFtLmNvbnRyb2xsZXJFcnJvckZ1bmN0aW9uJylcbmZ1bmN0aW9uIGlzUmVhZGFibGVOb2RlU3RyZWFtKG9iaiwgc3RyaWN0ID0gZmFsc2UpIHtcbiAgdmFyIF9vYmokX3JlYWRhYmxlU3RhdGVcbiAgcmV0dXJuICEhKFxuICAgIChcbiAgICAgIG9iaiAmJlxuICAgICAgdHlwZW9mIG9iai5waXBlID09PSAnZnVuY3Rpb24nICYmXG4gICAgICB0eXBlb2Ygb2JqLm9uID09PSAnZnVuY3Rpb24nICYmXG4gICAgICAoIXN0cmljdCB8fCAodHlwZW9mIG9iai5wYXVzZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2Ygb2JqLnJlc3VtZSA9PT0gJ2Z1bmN0aW9uJykpICYmXG4gICAgICAoIW9iai5fd3JpdGFibGVTdGF0ZSB8fFxuICAgICAgICAoKF9vYmokX3JlYWRhYmxlU3RhdGUgPSBvYmouX3JlYWRhYmxlU3RhdGUpID09PSBudWxsIHx8IF9vYmokX3JlYWRhYmxlU3RhdGUgPT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgOiBfb2JqJF9yZWFkYWJsZVN0YXRlLnJlYWRhYmxlKSAhPT0gZmFsc2UpICYmXG4gICAgICAvLyBEdXBsZXhcbiAgICAgICghb2JqLl93cml0YWJsZVN0YXRlIHx8IG9iai5fcmVhZGFibGVTdGF0ZSlcbiAgICApIC8vIFdyaXRhYmxlIGhhcyAucGlwZS5cbiAgKVxufVxuXG5mdW5jdGlvbiBpc1dyaXRhYmxlTm9kZVN0cmVhbShvYmopIHtcbiAgdmFyIF9vYmokX3dyaXRhYmxlU3RhdGVcbiAgcmV0dXJuICEhKFxuICAgIChcbiAgICAgIG9iaiAmJlxuICAgICAgdHlwZW9mIG9iai53cml0ZSA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgdHlwZW9mIG9iai5vbiA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgKCFvYmouX3JlYWRhYmxlU3RhdGUgfHxcbiAgICAgICAgKChfb2JqJF93cml0YWJsZVN0YXRlID0gb2JqLl93cml0YWJsZVN0YXRlKSA9PT0gbnVsbCB8fCBfb2JqJF93cml0YWJsZVN0YXRlID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICAgIDogX29iaiRfd3JpdGFibGVTdGF0ZS53cml0YWJsZSkgIT09IGZhbHNlKVxuICAgICkgLy8gRHVwbGV4XG4gIClcbn1cblxuZnVuY3Rpb24gaXNEdXBsZXhOb2RlU3RyZWFtKG9iaikge1xuICByZXR1cm4gISEoXG4gICAgb2JqICYmXG4gICAgdHlwZW9mIG9iai5waXBlID09PSAnZnVuY3Rpb24nICYmXG4gICAgb2JqLl9yZWFkYWJsZVN0YXRlICYmXG4gICAgdHlwZW9mIG9iai5vbiA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBvYmoud3JpdGUgPT09ICdmdW5jdGlvbidcbiAgKVxufVxuZnVuY3Rpb24gaXNOb2RlU3RyZWFtKG9iaikge1xuICByZXR1cm4gKFxuICAgIG9iaiAmJlxuICAgIChvYmouX3JlYWRhYmxlU3RhdGUgfHxcbiAgICAgIG9iai5fd3JpdGFibGVTdGF0ZSB8fFxuICAgICAgKHR5cGVvZiBvYmoud3JpdGUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIG9iai5vbiA9PT0gJ2Z1bmN0aW9uJykgfHxcbiAgICAgICh0eXBlb2Ygb2JqLnBpcGUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIG9iai5vbiA9PT0gJ2Z1bmN0aW9uJykpXG4gIClcbn1cbmZ1bmN0aW9uIGlzUmVhZGFibGVTdHJlYW0ob2JqKSB7XG4gIHJldHVybiAhIShcbiAgICBvYmogJiZcbiAgICAhaXNOb2RlU3RyZWFtKG9iaikgJiZcbiAgICB0eXBlb2Ygb2JqLnBpcGVUaHJvdWdoID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIG9iai5nZXRSZWFkZXIgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2Ygb2JqLmNhbmNlbCA9PT0gJ2Z1bmN0aW9uJ1xuICApXG59XG5mdW5jdGlvbiBpc1dyaXRhYmxlU3RyZWFtKG9iaikge1xuICByZXR1cm4gISEob2JqICYmICFpc05vZGVTdHJlYW0ob2JqKSAmJiB0eXBlb2Ygb2JqLmdldFdyaXRlciA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2Ygb2JqLmFib3J0ID09PSAnZnVuY3Rpb24nKVxufVxuZnVuY3Rpb24gaXNUcmFuc2Zvcm1TdHJlYW0ob2JqKSB7XG4gIHJldHVybiAhIShvYmogJiYgIWlzTm9kZVN0cmVhbShvYmopICYmIHR5cGVvZiBvYmoucmVhZGFibGUgPT09ICdvYmplY3QnICYmIHR5cGVvZiBvYmoud3JpdGFibGUgPT09ICdvYmplY3QnKVxufVxuZnVuY3Rpb24gaXNXZWJTdHJlYW0ob2JqKSB7XG4gIHJldHVybiBpc1JlYWRhYmxlU3RyZWFtKG9iaikgfHwgaXNXcml0YWJsZVN0cmVhbShvYmopIHx8IGlzVHJhbnNmb3JtU3RyZWFtKG9iailcbn1cbmZ1bmN0aW9uIGlzSXRlcmFibGUob2JqLCBpc0FzeW5jKSB7XG4gIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIGZhbHNlXG4gIGlmIChpc0FzeW5jID09PSB0cnVlKSByZXR1cm4gdHlwZW9mIG9ialtTeW1ib2xBc3luY0l0ZXJhdG9yXSA9PT0gJ2Z1bmN0aW9uJ1xuICBpZiAoaXNBc3luYyA9PT0gZmFsc2UpIHJldHVybiB0eXBlb2Ygb2JqW1N5bWJvbEl0ZXJhdG9yXSA9PT0gJ2Z1bmN0aW9uJ1xuICByZXR1cm4gdHlwZW9mIG9ialtTeW1ib2xBc3luY0l0ZXJhdG9yXSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2Ygb2JqW1N5bWJvbEl0ZXJhdG9yXSA9PT0gJ2Z1bmN0aW9uJ1xufVxuZnVuY3Rpb24gaXNEZXN0cm95ZWQoc3RyZWFtKSB7XG4gIGlmICghaXNOb2RlU3RyZWFtKHN0cmVhbSkpIHJldHVybiBudWxsXG4gIGNvbnN0IHdTdGF0ZSA9IHN0cmVhbS5fd3JpdGFibGVTdGF0ZVxuICBjb25zdCByU3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGVcbiAgY29uc3Qgc3RhdGUgPSB3U3RhdGUgfHwgclN0YXRlXG4gIHJldHVybiAhIShzdHJlYW0uZGVzdHJveWVkIHx8IHN0cmVhbVtrSXNEZXN0cm95ZWRdIHx8IChzdGF0ZSAhPT0gbnVsbCAmJiBzdGF0ZSAhPT0gdW5kZWZpbmVkICYmIHN0YXRlLmRlc3Ryb3llZCkpXG59XG5cbi8vIEhhdmUgYmVlbiBlbmQoKTpkLlxuZnVuY3Rpb24gaXNXcml0YWJsZUVuZGVkKHN0cmVhbSkge1xuICBpZiAoIWlzV3JpdGFibGVOb2RlU3RyZWFtKHN0cmVhbSkpIHJldHVybiBudWxsXG4gIGlmIChzdHJlYW0ud3JpdGFibGVFbmRlZCA9PT0gdHJ1ZSkgcmV0dXJuIHRydWVcbiAgY29uc3Qgd1N0YXRlID0gc3RyZWFtLl93cml0YWJsZVN0YXRlXG4gIGlmICh3U3RhdGUgIT09IG51bGwgJiYgd1N0YXRlICE9PSB1bmRlZmluZWQgJiYgd1N0YXRlLmVycm9yZWQpIHJldHVybiBmYWxzZVxuICBpZiAodHlwZW9mICh3U3RhdGUgPT09IG51bGwgfHwgd1N0YXRlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB3U3RhdGUuZW5kZWQpICE9PSAnYm9vbGVhbicpIHJldHVybiBudWxsXG4gIHJldHVybiB3U3RhdGUuZW5kZWRcbn1cblxuLy8gSGF2ZSBlbWl0dGVkICdmaW5pc2gnLlxuZnVuY3Rpb24gaXNXcml0YWJsZUZpbmlzaGVkKHN0cmVhbSwgc3RyaWN0KSB7XG4gIGlmICghaXNXcml0YWJsZU5vZGVTdHJlYW0oc3RyZWFtKSkgcmV0dXJuIG51bGxcbiAgaWYgKHN0cmVhbS53cml0YWJsZUZpbmlzaGVkID09PSB0cnVlKSByZXR1cm4gdHJ1ZVxuICBjb25zdCB3U3RhdGUgPSBzdHJlYW0uX3dyaXRhYmxlU3RhdGVcbiAgaWYgKHdTdGF0ZSAhPT0gbnVsbCAmJiB3U3RhdGUgIT09IHVuZGVmaW5lZCAmJiB3U3RhdGUuZXJyb3JlZCkgcmV0dXJuIGZhbHNlXG4gIGlmICh0eXBlb2YgKHdTdGF0ZSA9PT0gbnVsbCB8fCB3U3RhdGUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHdTdGF0ZS5maW5pc2hlZCkgIT09ICdib29sZWFuJykgcmV0dXJuIG51bGxcbiAgcmV0dXJuICEhKHdTdGF0ZS5maW5pc2hlZCB8fCAoc3RyaWN0ID09PSBmYWxzZSAmJiB3U3RhdGUuZW5kZWQgPT09IHRydWUgJiYgd1N0YXRlLmxlbmd0aCA9PT0gMCkpXG59XG5cbi8vIEhhdmUgYmVlbiBwdXNoKG51bGwpOmQuXG5mdW5jdGlvbiBpc1JlYWRhYmxlRW5kZWQoc3RyZWFtKSB7XG4gIGlmICghaXNSZWFkYWJsZU5vZGVTdHJlYW0oc3RyZWFtKSkgcmV0dXJuIG51bGxcbiAgaWYgKHN0cmVhbS5yZWFkYWJsZUVuZGVkID09PSB0cnVlKSByZXR1cm4gdHJ1ZVxuICBjb25zdCByU3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGVcbiAgaWYgKCFyU3RhdGUgfHwgclN0YXRlLmVycm9yZWQpIHJldHVybiBmYWxzZVxuICBpZiAodHlwZW9mIChyU3RhdGUgPT09IG51bGwgfHwgclN0YXRlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiByU3RhdGUuZW5kZWQpICE9PSAnYm9vbGVhbicpIHJldHVybiBudWxsXG4gIHJldHVybiByU3RhdGUuZW5kZWRcbn1cblxuLy8gSGF2ZSBlbWl0dGVkICdlbmQnLlxuZnVuY3Rpb24gaXNSZWFkYWJsZUZpbmlzaGVkKHN0cmVhbSwgc3RyaWN0KSB7XG4gIGlmICghaXNSZWFkYWJsZU5vZGVTdHJlYW0oc3RyZWFtKSkgcmV0dXJuIG51bGxcbiAgY29uc3QgclN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlXG4gIGlmIChyU3RhdGUgIT09IG51bGwgJiYgclN0YXRlICE9PSB1bmRlZmluZWQgJiYgclN0YXRlLmVycm9yZWQpIHJldHVybiBmYWxzZVxuICBpZiAodHlwZW9mIChyU3RhdGUgPT09IG51bGwgfHwgclN0YXRlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiByU3RhdGUuZW5kRW1pdHRlZCkgIT09ICdib29sZWFuJykgcmV0dXJuIG51bGxcbiAgcmV0dXJuICEhKHJTdGF0ZS5lbmRFbWl0dGVkIHx8IChzdHJpY3QgPT09IGZhbHNlICYmIHJTdGF0ZS5lbmRlZCA9PT0gdHJ1ZSAmJiByU3RhdGUubGVuZ3RoID09PSAwKSlcbn1cbmZ1bmN0aW9uIGlzUmVhZGFibGUoc3RyZWFtKSB7XG4gIGlmIChzdHJlYW0gJiYgc3RyZWFtW2tJc1JlYWRhYmxlXSAhPSBudWxsKSByZXR1cm4gc3RyZWFtW2tJc1JlYWRhYmxlXVxuICBpZiAodHlwZW9mIChzdHJlYW0gPT09IG51bGwgfHwgc3RyZWFtID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBzdHJlYW0ucmVhZGFibGUpICE9PSAnYm9vbGVhbicpIHJldHVybiBudWxsXG4gIGlmIChpc0Rlc3Ryb3llZChzdHJlYW0pKSByZXR1cm4gZmFsc2VcbiAgcmV0dXJuIGlzUmVhZGFibGVOb2RlU3RyZWFtKHN0cmVhbSkgJiYgc3RyZWFtLnJlYWRhYmxlICYmICFpc1JlYWRhYmxlRmluaXNoZWQoc3RyZWFtKVxufVxuZnVuY3Rpb24gaXNXcml0YWJsZShzdHJlYW0pIHtcbiAgaWYgKHN0cmVhbSAmJiBzdHJlYW1ba0lzV3JpdGFibGVdICE9IG51bGwpIHJldHVybiBzdHJlYW1ba0lzV3JpdGFibGVdXG4gIGlmICh0eXBlb2YgKHN0cmVhbSA9PT0gbnVsbCB8fCBzdHJlYW0gPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHN0cmVhbS53cml0YWJsZSkgIT09ICdib29sZWFuJykgcmV0dXJuIG51bGxcbiAgaWYgKGlzRGVzdHJveWVkKHN0cmVhbSkpIHJldHVybiBmYWxzZVxuICByZXR1cm4gaXNXcml0YWJsZU5vZGVTdHJlYW0oc3RyZWFtKSAmJiBzdHJlYW0ud3JpdGFibGUgJiYgIWlzV3JpdGFibGVFbmRlZChzdHJlYW0pXG59XG5mdW5jdGlvbiBpc0ZpbmlzaGVkKHN0cmVhbSwgb3B0cykge1xuICBpZiAoIWlzTm9kZVN0cmVhbShzdHJlYW0pKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuICBpZiAoaXNEZXN0cm95ZWQoc3RyZWFtKSkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgaWYgKChvcHRzID09PSBudWxsIHx8IG9wdHMgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IG9wdHMucmVhZGFibGUpICE9PSBmYWxzZSAmJiBpc1JlYWRhYmxlKHN0cmVhbSkpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICBpZiAoKG9wdHMgPT09IG51bGwgfHwgb3B0cyA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogb3B0cy53cml0YWJsZSkgIT09IGZhbHNlICYmIGlzV3JpdGFibGUoc3RyZWFtKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIHJldHVybiB0cnVlXG59XG5mdW5jdGlvbiBpc1dyaXRhYmxlRXJyb3JlZChzdHJlYW0pIHtcbiAgdmFyIF9zdHJlYW0kX3dyaXRhYmxlU3RhdCwgX3N0cmVhbSRfd3JpdGFibGVTdGF0MlxuICBpZiAoIWlzTm9kZVN0cmVhbShzdHJlYW0pKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuICBpZiAoc3RyZWFtLndyaXRhYmxlRXJyb3JlZCkge1xuICAgIHJldHVybiBzdHJlYW0ud3JpdGFibGVFcnJvcmVkXG4gIH1cbiAgcmV0dXJuIChfc3RyZWFtJF93cml0YWJsZVN0YXQgPVxuICAgIChfc3RyZWFtJF93cml0YWJsZVN0YXQyID0gc3RyZWFtLl93cml0YWJsZVN0YXRlKSA9PT0gbnVsbCB8fCBfc3RyZWFtJF93cml0YWJsZVN0YXQyID09PSB1bmRlZmluZWRcbiAgICAgID8gdW5kZWZpbmVkXG4gICAgICA6IF9zdHJlYW0kX3dyaXRhYmxlU3RhdDIuZXJyb3JlZCkgIT09IG51bGwgJiYgX3N0cmVhbSRfd3JpdGFibGVTdGF0ICE9PSB1bmRlZmluZWRcbiAgICA/IF9zdHJlYW0kX3dyaXRhYmxlU3RhdFxuICAgIDogbnVsbFxufVxuZnVuY3Rpb24gaXNSZWFkYWJsZUVycm9yZWQoc3RyZWFtKSB7XG4gIHZhciBfc3RyZWFtJF9yZWFkYWJsZVN0YXQsIF9zdHJlYW0kX3JlYWRhYmxlU3RhdDJcbiAgaWYgKCFpc05vZGVTdHJlYW0oc3RyZWFtKSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgaWYgKHN0cmVhbS5yZWFkYWJsZUVycm9yZWQpIHtcbiAgICByZXR1cm4gc3RyZWFtLnJlYWRhYmxlRXJyb3JlZFxuICB9XG4gIHJldHVybiAoX3N0cmVhbSRfcmVhZGFibGVTdGF0ID1cbiAgICAoX3N0cmVhbSRfcmVhZGFibGVTdGF0MiA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZSkgPT09IG51bGwgfHwgX3N0cmVhbSRfcmVhZGFibGVTdGF0MiA9PT0gdW5kZWZpbmVkXG4gICAgICA/IHVuZGVmaW5lZFxuICAgICAgOiBfc3RyZWFtJF9yZWFkYWJsZVN0YXQyLmVycm9yZWQpICE9PSBudWxsICYmIF9zdHJlYW0kX3JlYWRhYmxlU3RhdCAhPT0gdW5kZWZpbmVkXG4gICAgPyBfc3RyZWFtJF9yZWFkYWJsZVN0YXRcbiAgICA6IG51bGxcbn1cbmZ1bmN0aW9uIGlzQ2xvc2VkKHN0cmVhbSkge1xuICBpZiAoIWlzTm9kZVN0cmVhbShzdHJlYW0pKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuICBpZiAodHlwZW9mIHN0cmVhbS5jbG9zZWQgPT09ICdib29sZWFuJykge1xuICAgIHJldHVybiBzdHJlYW0uY2xvc2VkXG4gIH1cbiAgY29uc3Qgd1N0YXRlID0gc3RyZWFtLl93cml0YWJsZVN0YXRlXG4gIGNvbnN0IHJTdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZVxuICBpZiAoXG4gICAgdHlwZW9mICh3U3RhdGUgPT09IG51bGwgfHwgd1N0YXRlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB3U3RhdGUuY2xvc2VkKSA9PT0gJ2Jvb2xlYW4nIHx8XG4gICAgdHlwZW9mIChyU3RhdGUgPT09IG51bGwgfHwgclN0YXRlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiByU3RhdGUuY2xvc2VkKSA9PT0gJ2Jvb2xlYW4nXG4gICkge1xuICAgIHJldHVybiAoXG4gICAgICAod1N0YXRlID09PSBudWxsIHx8IHdTdGF0ZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogd1N0YXRlLmNsb3NlZCkgfHxcbiAgICAgIChyU3RhdGUgPT09IG51bGwgfHwgclN0YXRlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiByU3RhdGUuY2xvc2VkKVxuICAgIClcbiAgfVxuICBpZiAodHlwZW9mIHN0cmVhbS5fY2xvc2VkID09PSAnYm9vbGVhbicgJiYgaXNPdXRnb2luZ01lc3NhZ2Uoc3RyZWFtKSkge1xuICAgIHJldHVybiBzdHJlYW0uX2Nsb3NlZFxuICB9XG4gIHJldHVybiBudWxsXG59XG5mdW5jdGlvbiBpc091dGdvaW5nTWVzc2FnZShzdHJlYW0pIHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2Ygc3RyZWFtLl9jbG9zZWQgPT09ICdib29sZWFuJyAmJlxuICAgIHR5cGVvZiBzdHJlYW0uX2RlZmF1bHRLZWVwQWxpdmUgPT09ICdib29sZWFuJyAmJlxuICAgIHR5cGVvZiBzdHJlYW0uX3JlbW92ZWRDb25uZWN0aW9uID09PSAnYm9vbGVhbicgJiZcbiAgICB0eXBlb2Ygc3RyZWFtLl9yZW1vdmVkQ29udExlbiA9PT0gJ2Jvb2xlYW4nXG4gIClcbn1cbmZ1bmN0aW9uIGlzU2VydmVyUmVzcG9uc2Uoc3RyZWFtKSB7XG4gIHJldHVybiB0eXBlb2Ygc3RyZWFtLl9zZW50MTAwID09PSAnYm9vbGVhbicgJiYgaXNPdXRnb2luZ01lc3NhZ2Uoc3RyZWFtKVxufVxuZnVuY3Rpb24gaXNTZXJ2ZXJSZXF1ZXN0KHN0cmVhbSkge1xuICB2YXIgX3N0cmVhbSRyZXFcbiAgcmV0dXJuIChcbiAgICB0eXBlb2Ygc3RyZWFtLl9jb25zdW1pbmcgPT09ICdib29sZWFuJyAmJlxuICAgIHR5cGVvZiBzdHJlYW0uX2R1bXBlZCA9PT0gJ2Jvb2xlYW4nICYmXG4gICAgKChfc3RyZWFtJHJlcSA9IHN0cmVhbS5yZXEpID09PSBudWxsIHx8IF9zdHJlYW0kcmVxID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBfc3RyZWFtJHJlcS51cGdyYWRlT3JDb25uZWN0KSA9PT1cbiAgICAgIHVuZGVmaW5lZFxuICApXG59XG5mdW5jdGlvbiB3aWxsRW1pdENsb3NlKHN0cmVhbSkge1xuICBpZiAoIWlzTm9kZVN0cmVhbShzdHJlYW0pKSByZXR1cm4gbnVsbFxuICBjb25zdCB3U3RhdGUgPSBzdHJlYW0uX3dyaXRhYmxlU3RhdGVcbiAgY29uc3QgclN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlXG4gIGNvbnN0IHN0YXRlID0gd1N0YXRlIHx8IHJTdGF0ZVxuICByZXR1cm4gKFxuICAgICghc3RhdGUgJiYgaXNTZXJ2ZXJSZXNwb25zZShzdHJlYW0pKSB8fCAhIShzdGF0ZSAmJiBzdGF0ZS5hdXRvRGVzdHJveSAmJiBzdGF0ZS5lbWl0Q2xvc2UgJiYgc3RhdGUuY2xvc2VkID09PSBmYWxzZSlcbiAgKVxufVxuZnVuY3Rpb24gaXNEaXN0dXJiZWQoc3RyZWFtKSB7XG4gIHZhciBfc3RyZWFtJGtJc0Rpc3R1cmJlZFxuICByZXR1cm4gISEoXG4gICAgc3RyZWFtICYmXG4gICAgKChfc3RyZWFtJGtJc0Rpc3R1cmJlZCA9IHN0cmVhbVtrSXNEaXN0dXJiZWRdKSAhPT0gbnVsbCAmJiBfc3RyZWFtJGtJc0Rpc3R1cmJlZCAhPT0gdW5kZWZpbmVkXG4gICAgICA/IF9zdHJlYW0ka0lzRGlzdHVyYmVkXG4gICAgICA6IHN0cmVhbS5yZWFkYWJsZURpZFJlYWQgfHwgc3RyZWFtLnJlYWRhYmxlQWJvcnRlZClcbiAgKVxufVxuZnVuY3Rpb24gaXNFcnJvcmVkKHN0cmVhbSkge1xuICB2YXIgX3JlZixcbiAgICBfcmVmMixcbiAgICBfcmVmMyxcbiAgICBfcmVmNCxcbiAgICBfcmVmNSxcbiAgICBfc3RyZWFtJGtJc0Vycm9yZWQsXG4gICAgX3N0cmVhbSRfcmVhZGFibGVTdGF0MyxcbiAgICBfc3RyZWFtJF93cml0YWJsZVN0YXQzLFxuICAgIF9zdHJlYW0kX3JlYWRhYmxlU3RhdDQsXG4gICAgX3N0cmVhbSRfd3JpdGFibGVTdGF0NFxuICByZXR1cm4gISEoXG4gICAgc3RyZWFtICYmXG4gICAgKChfcmVmID1cbiAgICAgIChfcmVmMiA9XG4gICAgICAgIChfcmVmMyA9XG4gICAgICAgICAgKF9yZWY0ID1cbiAgICAgICAgICAgIChfcmVmNSA9XG4gICAgICAgICAgICAgIChfc3RyZWFtJGtJc0Vycm9yZWQgPSBzdHJlYW1ba0lzRXJyb3JlZF0pICE9PSBudWxsICYmIF9zdHJlYW0ka0lzRXJyb3JlZCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyBfc3RyZWFtJGtJc0Vycm9yZWRcbiAgICAgICAgICAgICAgICA6IHN0cmVhbS5yZWFkYWJsZUVycm9yZWQpICE9PSBudWxsICYmIF9yZWY1ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgPyBfcmVmNVxuICAgICAgICAgICAgICA6IHN0cmVhbS53cml0YWJsZUVycm9yZWQpICE9PSBudWxsICYmIF9yZWY0ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gX3JlZjRcbiAgICAgICAgICAgIDogKF9zdHJlYW0kX3JlYWRhYmxlU3RhdDMgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGUpID09PSBudWxsIHx8IF9zdHJlYW0kX3JlYWRhYmxlU3RhdDMgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgICAgIDogX3N0cmVhbSRfcmVhZGFibGVTdGF0My5lcnJvckVtaXR0ZWQpICE9PSBudWxsICYmIF9yZWYzICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IF9yZWYzXG4gICAgICAgICAgOiAoX3N0cmVhbSRfd3JpdGFibGVTdGF0MyA9IHN0cmVhbS5fd3JpdGFibGVTdGF0ZSkgPT09IG51bGwgfHwgX3N0cmVhbSRfd3JpdGFibGVTdGF0MyA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgICA6IF9zdHJlYW0kX3dyaXRhYmxlU3RhdDMuZXJyb3JFbWl0dGVkKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gX3JlZjJcbiAgICAgICAgOiAoX3N0cmVhbSRfcmVhZGFibGVTdGF0NCA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZSkgPT09IG51bGwgfHwgX3N0cmVhbSRfcmVhZGFibGVTdGF0NCA9PT0gdW5kZWZpbmVkXG4gICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgIDogX3N0cmVhbSRfcmVhZGFibGVTdGF0NC5lcnJvcmVkKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB1bmRlZmluZWRcbiAgICAgID8gX3JlZlxuICAgICAgOiAoX3N0cmVhbSRfd3JpdGFibGVTdGF0NCA9IHN0cmVhbS5fd3JpdGFibGVTdGF0ZSkgPT09IG51bGwgfHwgX3N0cmVhbSRfd3JpdGFibGVTdGF0NCA9PT0gdW5kZWZpbmVkXG4gICAgICA/IHVuZGVmaW5lZFxuICAgICAgOiBfc3RyZWFtJF93cml0YWJsZVN0YXQ0LmVycm9yZWQpXG4gIClcbn1cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc0Rlc3Ryb3llZCxcbiAga0lzRGVzdHJveWVkLFxuICBpc0Rpc3R1cmJlZCxcbiAga0lzRGlzdHVyYmVkLFxuICBpc0Vycm9yZWQsXG4gIGtJc0Vycm9yZWQsXG4gIGlzUmVhZGFibGUsXG4gIGtJc1JlYWRhYmxlLFxuICBrSXNDbG9zZWRQcm9taXNlLFxuICBrQ29udHJvbGxlckVycm9yRnVuY3Rpb24sXG4gIGtJc1dyaXRhYmxlLFxuICBpc0Nsb3NlZCxcbiAgaXNEdXBsZXhOb2RlU3RyZWFtLFxuICBpc0ZpbmlzaGVkLFxuICBpc0l0ZXJhYmxlLFxuICBpc1JlYWRhYmxlTm9kZVN0cmVhbSxcbiAgaXNSZWFkYWJsZVN0cmVhbSxcbiAgaXNSZWFkYWJsZUVuZGVkLFxuICBpc1JlYWRhYmxlRmluaXNoZWQsXG4gIGlzUmVhZGFibGVFcnJvcmVkLFxuICBpc05vZGVTdHJlYW0sXG4gIGlzV2ViU3RyZWFtLFxuICBpc1dyaXRhYmxlLFxuICBpc1dyaXRhYmxlTm9kZVN0cmVhbSxcbiAgaXNXcml0YWJsZVN0cmVhbSxcbiAgaXNXcml0YWJsZUVuZGVkLFxuICBpc1dyaXRhYmxlRmluaXNoZWQsXG4gIGlzV3JpdGFibGVFcnJvcmVkLFxuICBpc1NlcnZlclJlcXVlc3QsXG4gIGlzU2VydmVyUmVzcG9uc2UsXG4gIHdpbGxFbWl0Q2xvc2UsXG4gIGlzVHJhbnNmb3JtU3RyZWFtXG59XG4iLAogICAgIi8qIHJlcGxhY2VtZW50IHN0YXJ0ICovXG5cbmNvbnN0IHByb2Nlc3MgPSByZXF1aXJlKCdwcm9jZXNzLycpXG5cbi8qIHJlcGxhY2VtZW50IGVuZCAqL1xuLy8gUG9ydGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL21hZmludG9zaC9lbmQtb2Ytc3RyZWFtIHdpdGhcbi8vIHBlcm1pc3Npb24gZnJvbSB0aGUgYXV0aG9yLCBNYXRoaWFzIEJ1dXMgKEBtYWZpbnRvc2gpLlxuXG47KCd1c2Ugc3RyaWN0JylcbmNvbnN0IHsgQWJvcnRFcnJvciwgY29kZXMgfSA9IHJlcXVpcmUoJy4uLy4uL291cnMvZXJyb3JzJylcbmNvbnN0IHsgRVJSX0lOVkFMSURfQVJHX1RZUEUsIEVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFIH0gPSBjb2Rlc1xuY29uc3QgeyBrRW1wdHlPYmplY3QsIG9uY2UgfSA9IHJlcXVpcmUoJy4uLy4uL291cnMvdXRpbCcpXG5jb25zdCB7IHZhbGlkYXRlQWJvcnRTaWduYWwsIHZhbGlkYXRlRnVuY3Rpb24sIHZhbGlkYXRlT2JqZWN0LCB2YWxpZGF0ZUJvb2xlYW4gfSA9IHJlcXVpcmUoJy4uL3ZhbGlkYXRvcnMnKVxuY29uc3QgeyBQcm9taXNlLCBQcm9taXNlUHJvdG90eXBlVGhlbiwgU3ltYm9sRGlzcG9zZSB9ID0gcmVxdWlyZSgnLi4vLi4vb3Vycy9wcmltb3JkaWFscycpXG5jb25zdCB7XG4gIGlzQ2xvc2VkLFxuICBpc1JlYWRhYmxlLFxuICBpc1JlYWRhYmxlTm9kZVN0cmVhbSxcbiAgaXNSZWFkYWJsZVN0cmVhbSxcbiAgaXNSZWFkYWJsZUZpbmlzaGVkLFxuICBpc1JlYWRhYmxlRXJyb3JlZCxcbiAgaXNXcml0YWJsZSxcbiAgaXNXcml0YWJsZU5vZGVTdHJlYW0sXG4gIGlzV3JpdGFibGVTdHJlYW0sXG4gIGlzV3JpdGFibGVGaW5pc2hlZCxcbiAgaXNXcml0YWJsZUVycm9yZWQsXG4gIGlzTm9kZVN0cmVhbSxcbiAgd2lsbEVtaXRDbG9zZTogX3dpbGxFbWl0Q2xvc2UsXG4gIGtJc0Nsb3NlZFByb21pc2Vcbn0gPSByZXF1aXJlKCcuL3V0aWxzJylcbmxldCBhZGRBYm9ydExpc3RlbmVyXG5mdW5jdGlvbiBpc1JlcXVlc3Qoc3RyZWFtKSB7XG4gIHJldHVybiBzdHJlYW0uc2V0SGVhZGVyICYmIHR5cGVvZiBzdHJlYW0uYWJvcnQgPT09ICdmdW5jdGlvbidcbn1cbmNvbnN0IG5vcCA9ICgpID0+IHt9XG5mdW5jdGlvbiBlb3Moc3RyZWFtLCBvcHRpb25zLCBjYWxsYmFjaykge1xuICB2YXIgX29wdGlvbnMkcmVhZGFibGUsIF9vcHRpb25zJHdyaXRhYmxlXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgY2FsbGJhY2sgPSBvcHRpb25zXG4gICAgb3B0aW9ucyA9IGtFbXB0eU9iamVjdFxuICB9IGVsc2UgaWYgKG9wdGlvbnMgPT0gbnVsbCkge1xuICAgIG9wdGlvbnMgPSBrRW1wdHlPYmplY3RcbiAgfSBlbHNlIHtcbiAgICB2YWxpZGF0ZU9iamVjdChvcHRpb25zLCAnb3B0aW9ucycpXG4gIH1cbiAgdmFsaWRhdGVGdW5jdGlvbihjYWxsYmFjaywgJ2NhbGxiYWNrJylcbiAgdmFsaWRhdGVBYm9ydFNpZ25hbChvcHRpb25zLnNpZ25hbCwgJ29wdGlvbnMuc2lnbmFsJylcbiAgY2FsbGJhY2sgPSBvbmNlKGNhbGxiYWNrKVxuICBpZiAoaXNSZWFkYWJsZVN0cmVhbShzdHJlYW0pIHx8IGlzV3JpdGFibGVTdHJlYW0oc3RyZWFtKSkge1xuICAgIHJldHVybiBlb3NXZWIoc3RyZWFtLCBvcHRpb25zLCBjYWxsYmFjaylcbiAgfVxuICBpZiAoIWlzTm9kZVN0cmVhbShzdHJlYW0pKSB7XG4gICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKCdzdHJlYW0nLCBbJ1JlYWRhYmxlU3RyZWFtJywgJ1dyaXRhYmxlU3RyZWFtJywgJ1N0cmVhbSddLCBzdHJlYW0pXG4gIH1cbiAgY29uc3QgcmVhZGFibGUgPVxuICAgIChfb3B0aW9ucyRyZWFkYWJsZSA9IG9wdGlvbnMucmVhZGFibGUpICE9PSBudWxsICYmIF9vcHRpb25zJHJlYWRhYmxlICE9PSB1bmRlZmluZWRcbiAgICAgID8gX29wdGlvbnMkcmVhZGFibGVcbiAgICAgIDogaXNSZWFkYWJsZU5vZGVTdHJlYW0oc3RyZWFtKVxuICBjb25zdCB3cml0YWJsZSA9XG4gICAgKF9vcHRpb25zJHdyaXRhYmxlID0gb3B0aW9ucy53cml0YWJsZSkgIT09IG51bGwgJiYgX29wdGlvbnMkd3JpdGFibGUgIT09IHVuZGVmaW5lZFxuICAgICAgPyBfb3B0aW9ucyR3cml0YWJsZVxuICAgICAgOiBpc1dyaXRhYmxlTm9kZVN0cmVhbShzdHJlYW0pXG4gIGNvbnN0IHdTdGF0ZSA9IHN0cmVhbS5fd3JpdGFibGVTdGF0ZVxuICBjb25zdCByU3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGVcbiAgY29uc3Qgb25sZWdhY3lmaW5pc2ggPSAoKSA9PiB7XG4gICAgaWYgKCFzdHJlYW0ud3JpdGFibGUpIHtcbiAgICAgIG9uZmluaXNoKClcbiAgICB9XG4gIH1cblxuICAvLyBUT0RPIChyb25hZyk6IEltcHJvdmUgc29mdCBkZXRlY3Rpb24gdG8gaW5jbHVkZSBjb3JlIG1vZHVsZXMgYW5kXG4gIC8vIGNvbW1vbiBlY29zeXN0ZW0gbW9kdWxlcyB0aGF0IGRvIHByb3Blcmx5IGVtaXQgJ2Nsb3NlJyBidXQgZmFpbFxuICAvLyB0aGlzIGdlbmVyaWMgY2hlY2suXG4gIGxldCB3aWxsRW1pdENsb3NlID1cbiAgICBfd2lsbEVtaXRDbG9zZShzdHJlYW0pICYmIGlzUmVhZGFibGVOb2RlU3RyZWFtKHN0cmVhbSkgPT09IHJlYWRhYmxlICYmIGlzV3JpdGFibGVOb2RlU3RyZWFtKHN0cmVhbSkgPT09IHdyaXRhYmxlXG4gIGxldCB3cml0YWJsZUZpbmlzaGVkID0gaXNXcml0YWJsZUZpbmlzaGVkKHN0cmVhbSwgZmFsc2UpXG4gIGNvbnN0IG9uZmluaXNoID0gKCkgPT4ge1xuICAgIHdyaXRhYmxlRmluaXNoZWQgPSB0cnVlXG4gICAgLy8gU3RyZWFtIHNob3VsZCBub3QgYmUgZGVzdHJveWVkIGhlcmUuIElmIGl0IGlzIHRoYXRcbiAgICAvLyBtZWFucyB0aGF0IHVzZXIgc3BhY2UgaXMgZG9pbmcgc29tZXRoaW5nIGRpZmZlcmVudGx5IGFuZFxuICAgIC8vIHdlIGNhbm5vdCB0cnVzdCB3aWxsRW1pdENsb3NlLlxuICAgIGlmIChzdHJlYW0uZGVzdHJveWVkKSB7XG4gICAgICB3aWxsRW1pdENsb3NlID0gZmFsc2VcbiAgICB9XG4gICAgaWYgKHdpbGxFbWl0Q2xvc2UgJiYgKCFzdHJlYW0ucmVhZGFibGUgfHwgcmVhZGFibGUpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKCFyZWFkYWJsZSB8fCByZWFkYWJsZUZpbmlzaGVkKSB7XG4gICAgICBjYWxsYmFjay5jYWxsKHN0cmVhbSlcbiAgICB9XG4gIH1cbiAgbGV0IHJlYWRhYmxlRmluaXNoZWQgPSBpc1JlYWRhYmxlRmluaXNoZWQoc3RyZWFtLCBmYWxzZSlcbiAgY29uc3Qgb25lbmQgPSAoKSA9PiB7XG4gICAgcmVhZGFibGVGaW5pc2hlZCA9IHRydWVcbiAgICAvLyBTdHJlYW0gc2hvdWxkIG5vdCBiZSBkZXN0cm95ZWQgaGVyZS4gSWYgaXQgaXMgdGhhdFxuICAgIC8vIG1lYW5zIHRoYXQgdXNlciBzcGFjZSBpcyBkb2luZyBzb21ldGhpbmcgZGlmZmVyZW50bHkgYW5kXG4gICAgLy8gd2UgY2Fubm90IHRydXN0IHdpbGxFbWl0Q2xvc2UuXG4gICAgaWYgKHN0cmVhbS5kZXN0cm95ZWQpIHtcbiAgICAgIHdpbGxFbWl0Q2xvc2UgPSBmYWxzZVxuICAgIH1cbiAgICBpZiAod2lsbEVtaXRDbG9zZSAmJiAoIXN0cmVhbS53cml0YWJsZSB8fCB3cml0YWJsZSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoIXdyaXRhYmxlIHx8IHdyaXRhYmxlRmluaXNoZWQpIHtcbiAgICAgIGNhbGxiYWNrLmNhbGwoc3RyZWFtKVxuICAgIH1cbiAgfVxuICBjb25zdCBvbmVycm9yID0gKGVycikgPT4ge1xuICAgIGNhbGxiYWNrLmNhbGwoc3RyZWFtLCBlcnIpXG4gIH1cbiAgbGV0IGNsb3NlZCA9IGlzQ2xvc2VkKHN0cmVhbSlcbiAgY29uc3Qgb25jbG9zZSA9ICgpID0+IHtcbiAgICBjbG9zZWQgPSB0cnVlXG4gICAgY29uc3QgZXJyb3JlZCA9IGlzV3JpdGFibGVFcnJvcmVkKHN0cmVhbSkgfHwgaXNSZWFkYWJsZUVycm9yZWQoc3RyZWFtKVxuICAgIGlmIChlcnJvcmVkICYmIHR5cGVvZiBlcnJvcmVkICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjay5jYWxsKHN0cmVhbSwgZXJyb3JlZClcbiAgICB9XG4gICAgaWYgKHJlYWRhYmxlICYmICFyZWFkYWJsZUZpbmlzaGVkICYmIGlzUmVhZGFibGVOb2RlU3RyZWFtKHN0cmVhbSwgdHJ1ZSkpIHtcbiAgICAgIGlmICghaXNSZWFkYWJsZUZpbmlzaGVkKHN0cmVhbSwgZmFsc2UpKSByZXR1cm4gY2FsbGJhY2suY2FsbChzdHJlYW0sIG5ldyBFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRSgpKVxuICAgIH1cbiAgICBpZiAod3JpdGFibGUgJiYgIXdyaXRhYmxlRmluaXNoZWQpIHtcbiAgICAgIGlmICghaXNXcml0YWJsZUZpbmlzaGVkKHN0cmVhbSwgZmFsc2UpKSByZXR1cm4gY2FsbGJhY2suY2FsbChzdHJlYW0sIG5ldyBFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRSgpKVxuICAgIH1cbiAgICBjYWxsYmFjay5jYWxsKHN0cmVhbSlcbiAgfVxuICBjb25zdCBvbmNsb3NlZCA9ICgpID0+IHtcbiAgICBjbG9zZWQgPSB0cnVlXG4gICAgY29uc3QgZXJyb3JlZCA9IGlzV3JpdGFibGVFcnJvcmVkKHN0cmVhbSkgfHwgaXNSZWFkYWJsZUVycm9yZWQoc3RyZWFtKVxuICAgIGlmIChlcnJvcmVkICYmIHR5cGVvZiBlcnJvcmVkICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjay5jYWxsKHN0cmVhbSwgZXJyb3JlZClcbiAgICB9XG4gICAgY2FsbGJhY2suY2FsbChzdHJlYW0pXG4gIH1cbiAgY29uc3Qgb25yZXF1ZXN0ID0gKCkgPT4ge1xuICAgIHN0cmVhbS5yZXEub24oJ2ZpbmlzaCcsIG9uZmluaXNoKVxuICB9XG4gIGlmIChpc1JlcXVlc3Qoc3RyZWFtKSkge1xuICAgIHN0cmVhbS5vbignY29tcGxldGUnLCBvbmZpbmlzaClcbiAgICBpZiAoIXdpbGxFbWl0Q2xvc2UpIHtcbiAgICAgIHN0cmVhbS5vbignYWJvcnQnLCBvbmNsb3NlKVxuICAgIH1cbiAgICBpZiAoc3RyZWFtLnJlcSkge1xuICAgICAgb25yZXF1ZXN0KClcbiAgICB9IGVsc2Uge1xuICAgICAgc3RyZWFtLm9uKCdyZXF1ZXN0Jywgb25yZXF1ZXN0KVxuICAgIH1cbiAgfSBlbHNlIGlmICh3cml0YWJsZSAmJiAhd1N0YXRlKSB7XG4gICAgLy8gbGVnYWN5IHN0cmVhbXNcbiAgICBzdHJlYW0ub24oJ2VuZCcsIG9ubGVnYWN5ZmluaXNoKVxuICAgIHN0cmVhbS5vbignY2xvc2UnLCBvbmxlZ2FjeWZpbmlzaClcbiAgfVxuXG4gIC8vIE5vdCBhbGwgc3RyZWFtcyB3aWxsIGVtaXQgJ2Nsb3NlJyBhZnRlciAnYWJvcnRlZCcuXG4gIGlmICghd2lsbEVtaXRDbG9zZSAmJiB0eXBlb2Ygc3RyZWFtLmFib3J0ZWQgPT09ICdib29sZWFuJykge1xuICAgIHN0cmVhbS5vbignYWJvcnRlZCcsIG9uY2xvc2UpXG4gIH1cbiAgc3RyZWFtLm9uKCdlbmQnLCBvbmVuZClcbiAgc3RyZWFtLm9uKCdmaW5pc2gnLCBvbmZpbmlzaClcbiAgaWYgKG9wdGlvbnMuZXJyb3IgIT09IGZhbHNlKSB7XG4gICAgc3RyZWFtLm9uKCdlcnJvcicsIG9uZXJyb3IpXG4gIH1cbiAgc3RyZWFtLm9uKCdjbG9zZScsIG9uY2xvc2UpXG4gIGlmIChjbG9zZWQpIHtcbiAgICBwcm9jZXNzLm5leHRUaWNrKG9uY2xvc2UpXG4gIH0gZWxzZSBpZiAoXG4gICAgKHdTdGF0ZSAhPT0gbnVsbCAmJiB3U3RhdGUgIT09IHVuZGVmaW5lZCAmJiB3U3RhdGUuZXJyb3JFbWl0dGVkKSB8fFxuICAgIChyU3RhdGUgIT09IG51bGwgJiYgclN0YXRlICE9PSB1bmRlZmluZWQgJiYgclN0YXRlLmVycm9yRW1pdHRlZClcbiAgKSB7XG4gICAgaWYgKCF3aWxsRW1pdENsb3NlKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKG9uY2xvc2VkKVxuICAgIH1cbiAgfSBlbHNlIGlmIChcbiAgICAhcmVhZGFibGUgJiZcbiAgICAoIXdpbGxFbWl0Q2xvc2UgfHwgaXNSZWFkYWJsZShzdHJlYW0pKSAmJlxuICAgICh3cml0YWJsZUZpbmlzaGVkIHx8IGlzV3JpdGFibGUoc3RyZWFtKSA9PT0gZmFsc2UpXG4gICkge1xuICAgIHByb2Nlc3MubmV4dFRpY2sob25jbG9zZWQpXG4gIH0gZWxzZSBpZiAoXG4gICAgIXdyaXRhYmxlICYmXG4gICAgKCF3aWxsRW1pdENsb3NlIHx8IGlzV3JpdGFibGUoc3RyZWFtKSkgJiZcbiAgICAocmVhZGFibGVGaW5pc2hlZCB8fCBpc1JlYWRhYmxlKHN0cmVhbSkgPT09IGZhbHNlKVxuICApIHtcbiAgICBwcm9jZXNzLm5leHRUaWNrKG9uY2xvc2VkKVxuICB9IGVsc2UgaWYgKHJTdGF0ZSAmJiBzdHJlYW0ucmVxICYmIHN0cmVhbS5hYm9ydGVkKSB7XG4gICAgcHJvY2Vzcy5uZXh0VGljayhvbmNsb3NlZClcbiAgfVxuICBjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xuICAgIGNhbGxiYWNrID0gbm9wXG4gICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdhYm9ydGVkJywgb25jbG9zZSlcbiAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoJ2NvbXBsZXRlJywgb25maW5pc2gpXG4gICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdhYm9ydCcsIG9uY2xvc2UpXG4gICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdyZXF1ZXN0Jywgb25yZXF1ZXN0KVxuICAgIGlmIChzdHJlYW0ucmVxKSBzdHJlYW0ucmVxLnJlbW92ZUxpc3RlbmVyKCdmaW5pc2gnLCBvbmZpbmlzaClcbiAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIG9ubGVnYWN5ZmluaXNoKVxuICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBvbmxlZ2FjeWZpbmlzaClcbiAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoJ2ZpbmlzaCcsIG9uZmluaXNoKVxuICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25lbmQpXG4gICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uZXJyb3IpXG4gICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uY2xvc2UpXG4gIH1cbiAgaWYgKG9wdGlvbnMuc2lnbmFsICYmICFjbG9zZWQpIHtcbiAgICBjb25zdCBhYm9ydCA9ICgpID0+IHtcbiAgICAgIC8vIEtlZXAgaXQgYmVjYXVzZSBjbGVhbnVwIHJlbW92ZXMgaXQuXG4gICAgICBjb25zdCBlbmRDYWxsYmFjayA9IGNhbGxiYWNrXG4gICAgICBjbGVhbnVwKClcbiAgICAgIGVuZENhbGxiYWNrLmNhbGwoXG4gICAgICAgIHN0cmVhbSxcbiAgICAgICAgbmV3IEFib3J0RXJyb3IodW5kZWZpbmVkLCB7XG4gICAgICAgICAgY2F1c2U6IG9wdGlvbnMuc2lnbmFsLnJlYXNvblxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH1cbiAgICBpZiAob3B0aW9ucy5zaWduYWwuYWJvcnRlZCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhhYm9ydClcbiAgICB9IGVsc2Uge1xuICAgICAgYWRkQWJvcnRMaXN0ZW5lciA9IGFkZEFib3J0TGlzdGVuZXIgfHwgcmVxdWlyZSgnLi4vLi4vb3Vycy91dGlsJykuYWRkQWJvcnRMaXN0ZW5lclxuICAgICAgY29uc3QgZGlzcG9zYWJsZSA9IGFkZEFib3J0TGlzdGVuZXIob3B0aW9ucy5zaWduYWwsIGFib3J0KVxuICAgICAgY29uc3Qgb3JpZ2luYWxDYWxsYmFjayA9IGNhbGxiYWNrXG4gICAgICBjYWxsYmFjayA9IG9uY2UoKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgZGlzcG9zYWJsZVtTeW1ib2xEaXNwb3NlXSgpXG4gICAgICAgIG9yaWdpbmFsQ2FsbGJhY2suYXBwbHkoc3RyZWFtLCBhcmdzKVxuICAgICAgfSlcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNsZWFudXBcbn1cbmZ1bmN0aW9uIGVvc1dlYihzdHJlYW0sIG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gIGxldCBpc0Fib3J0ZWQgPSBmYWxzZVxuICBsZXQgYWJvcnQgPSBub3BcbiAgaWYgKG9wdGlvbnMuc2lnbmFsKSB7XG4gICAgYWJvcnQgPSAoKSA9PiB7XG4gICAgICBpc0Fib3J0ZWQgPSB0cnVlXG4gICAgICBjYWxsYmFjay5jYWxsKFxuICAgICAgICBzdHJlYW0sXG4gICAgICAgIG5ldyBBYm9ydEVycm9yKHVuZGVmaW5lZCwge1xuICAgICAgICAgIGNhdXNlOiBvcHRpb25zLnNpZ25hbC5yZWFzb25cbiAgICAgICAgfSlcbiAgICAgIClcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soYWJvcnQpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFkZEFib3J0TGlzdGVuZXIgPSBhZGRBYm9ydExpc3RlbmVyIHx8IHJlcXVpcmUoJy4uLy4uL291cnMvdXRpbCcpLmFkZEFib3J0TGlzdGVuZXJcbiAgICAgIGNvbnN0IGRpc3Bvc2FibGUgPSBhZGRBYm9ydExpc3RlbmVyKG9wdGlvbnMuc2lnbmFsLCBhYm9ydClcbiAgICAgIGNvbnN0IG9yaWdpbmFsQ2FsbGJhY2sgPSBjYWxsYmFja1xuICAgICAgY2FsbGJhY2sgPSBvbmNlKCguLi5hcmdzKSA9PiB7XG4gICAgICAgIGRpc3Bvc2FibGVbU3ltYm9sRGlzcG9zZV0oKVxuICAgICAgICBvcmlnaW5hbENhbGxiYWNrLmFwcGx5KHN0cmVhbSwgYXJncylcbiAgICAgIH0pXG4gICAgfVxuICB9XG4gIGNvbnN0IHJlc29sdmVyRm4gPSAoLi4uYXJncykgPT4ge1xuICAgIGlmICghaXNBYm9ydGVkKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IGNhbGxiYWNrLmFwcGx5KHN0cmVhbSwgYXJncykpXG4gICAgfVxuICB9XG4gIFByb21pc2VQcm90b3R5cGVUaGVuKHN0cmVhbVtrSXNDbG9zZWRQcm9taXNlXS5wcm9taXNlLCByZXNvbHZlckZuLCByZXNvbHZlckZuKVxuICByZXR1cm4gbm9wXG59XG5mdW5jdGlvbiBmaW5pc2hlZChzdHJlYW0sIG9wdHMpIHtcbiAgdmFyIF9vcHRzXG4gIGxldCBhdXRvQ2xlYW51cCA9IGZhbHNlXG4gIGlmIChvcHRzID09PSBudWxsKSB7XG4gICAgb3B0cyA9IGtFbXB0eU9iamVjdFxuICB9XG4gIGlmICgoX29wdHMgPSBvcHRzKSAhPT0gbnVsbCAmJiBfb3B0cyAhPT0gdW5kZWZpbmVkICYmIF9vcHRzLmNsZWFudXApIHtcbiAgICB2YWxpZGF0ZUJvb2xlYW4ob3B0cy5jbGVhbnVwLCAnY2xlYW51cCcpXG4gICAgYXV0b0NsZWFudXAgPSBvcHRzLmNsZWFudXBcbiAgfVxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IGNsZWFudXAgPSBlb3Moc3RyZWFtLCBvcHRzLCAoZXJyKSA9PiB7XG4gICAgICBpZiAoYXV0b0NsZWFudXApIHtcbiAgICAgICAgY2xlYW51cCgpXG4gICAgICB9XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHJlamVjdChlcnIpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNvbHZlKClcbiAgICAgIH1cbiAgICB9KVxuICB9KVxufVxubW9kdWxlLmV4cG9ydHMgPSBlb3Ncbm1vZHVsZS5leHBvcnRzLmZpbmlzaGVkID0gZmluaXNoZWRcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbi8qIHJlcGxhY2VtZW50IHN0YXJ0ICovXG5cbmNvbnN0IHByb2Nlc3MgPSByZXF1aXJlKCdwcm9jZXNzLycpXG5cbi8qIHJlcGxhY2VtZW50IGVuZCAqL1xuXG5jb25zdCB7XG4gIGFnZ3JlZ2F0ZVR3b0Vycm9ycyxcbiAgY29kZXM6IHsgRVJSX01VTFRJUExFX0NBTExCQUNLIH0sXG4gIEFib3J0RXJyb3Jcbn0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL2Vycm9ycycpXG5jb25zdCB7IFN5bWJvbCB9ID0gcmVxdWlyZSgnLi4vLi4vb3Vycy9wcmltb3JkaWFscycpXG5jb25zdCB7IGtJc0Rlc3Ryb3llZCwgaXNEZXN0cm95ZWQsIGlzRmluaXNoZWQsIGlzU2VydmVyUmVxdWVzdCB9ID0gcmVxdWlyZSgnLi91dGlscycpXG5jb25zdCBrRGVzdHJveSA9IFN5bWJvbCgna0Rlc3Ryb3knKVxuY29uc3Qga0NvbnN0cnVjdCA9IFN5bWJvbCgna0NvbnN0cnVjdCcpXG5mdW5jdGlvbiBjaGVja0Vycm9yKGVyciwgdywgcikge1xuICBpZiAoZXJyKSB7XG4gICAgLy8gQXZvaWQgVjggbGVhaywgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvMzQxMDMjaXNzdWVjb21tZW50LTY1MjAwMjM2NFxuICAgIGVyci5zdGFjayAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC1leHByZXNzaW9uc1xuXG4gICAgaWYgKHcgJiYgIXcuZXJyb3JlZCkge1xuICAgICAgdy5lcnJvcmVkID0gZXJyXG4gICAgfVxuICAgIGlmIChyICYmICFyLmVycm9yZWQpIHtcbiAgICAgIHIuZXJyb3JlZCA9IGVyclxuICAgIH1cbiAgfVxufVxuXG4vLyBCYWNrd2FyZHMgY29tcGF0LiBjYigpIGlzIHVuZG9jdW1lbnRlZCBhbmQgdW51c2VkIGluIGNvcmUgYnV0XG4vLyB1bmZvcnR1bmF0ZWx5IG1pZ2h0IGJlIHVzZWQgYnkgbW9kdWxlcy5cbmZ1bmN0aW9uIGRlc3Ryb3koZXJyLCBjYikge1xuICBjb25zdCByID0gdGhpcy5fcmVhZGFibGVTdGF0ZVxuICBjb25zdCB3ID0gdGhpcy5fd3JpdGFibGVTdGF0ZVxuICAvLyBXaXRoIGR1cGxleCBzdHJlYW1zIHdlIHVzZSB0aGUgd3JpdGFibGUgc2lkZSBmb3Igc3RhdGUuXG4gIGNvbnN0IHMgPSB3IHx8IHJcbiAgaWYgKCh3ICE9PSBudWxsICYmIHcgIT09IHVuZGVmaW5lZCAmJiB3LmRlc3Ryb3llZCkgfHwgKHIgIT09IG51bGwgJiYgciAhPT0gdW5kZWZpbmVkICYmIHIuZGVzdHJveWVkKSkge1xuICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNiKClcbiAgICB9XG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8vIFdlIHNldCBkZXN0cm95ZWQgdG8gdHJ1ZSBiZWZvcmUgZmlyaW5nIGVycm9yIGNhbGxiYWNrcyBpbiBvcmRlclxuICAvLyB0byBtYWtlIGl0IHJlLWVudHJhbmNlIHNhZmUgaW4gY2FzZSBkZXN0cm95KCkgaXMgY2FsbGVkIHdpdGhpbiBjYWxsYmFja3NcbiAgY2hlY2tFcnJvcihlcnIsIHcsIHIpXG4gIGlmICh3KSB7XG4gICAgdy5kZXN0cm95ZWQgPSB0cnVlXG4gIH1cbiAgaWYgKHIpIHtcbiAgICByLmRlc3Ryb3llZCA9IHRydWVcbiAgfVxuXG4gIC8vIElmIHN0aWxsIGNvbnN0cnVjdGluZyB0aGVuIGRlZmVyIGNhbGxpbmcgX2Rlc3Ryb3kuXG4gIGlmICghcy5jb25zdHJ1Y3RlZCkge1xuICAgIHRoaXMub25jZShrRGVzdHJveSwgZnVuY3Rpb24gKGVyKSB7XG4gICAgICBfZGVzdHJveSh0aGlzLCBhZ2dyZWdhdGVUd29FcnJvcnMoZXIsIGVyciksIGNiKVxuICAgIH0pXG4gIH0gZWxzZSB7XG4gICAgX2Rlc3Ryb3kodGhpcywgZXJyLCBjYilcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuZnVuY3Rpb24gX2Rlc3Ryb3koc2VsZiwgZXJyLCBjYikge1xuICBsZXQgY2FsbGVkID0gZmFsc2VcbiAgZnVuY3Rpb24gb25EZXN0cm95KGVycikge1xuICAgIGlmIChjYWxsZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjYWxsZWQgPSB0cnVlXG4gICAgY29uc3QgciA9IHNlbGYuX3JlYWRhYmxlU3RhdGVcbiAgICBjb25zdCB3ID0gc2VsZi5fd3JpdGFibGVTdGF0ZVxuICAgIGNoZWNrRXJyb3IoZXJyLCB3LCByKVxuICAgIGlmICh3KSB7XG4gICAgICB3LmNsb3NlZCA9IHRydWVcbiAgICB9XG4gICAgaWYgKHIpIHtcbiAgICAgIHIuY2xvc2VkID0gdHJ1ZVxuICAgIH1cbiAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjYihlcnIpXG4gICAgfVxuICAgIGlmIChlcnIpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZW1pdEVycm9yQ2xvc2VOVCwgc2VsZiwgZXJyKVxuICAgIH0gZWxzZSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGVtaXRDbG9zZU5ULCBzZWxmKVxuICAgIH1cbiAgfVxuICB0cnkge1xuICAgIHNlbGYuX2Rlc3Ryb3koZXJyIHx8IG51bGwsIG9uRGVzdHJveSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgb25EZXN0cm95KGVycilcbiAgfVxufVxuZnVuY3Rpb24gZW1pdEVycm9yQ2xvc2VOVChzZWxmLCBlcnIpIHtcbiAgZW1pdEVycm9yTlQoc2VsZiwgZXJyKVxuICBlbWl0Q2xvc2VOVChzZWxmKVxufVxuZnVuY3Rpb24gZW1pdENsb3NlTlQoc2VsZikge1xuICBjb25zdCByID0gc2VsZi5fcmVhZGFibGVTdGF0ZVxuICBjb25zdCB3ID0gc2VsZi5fd3JpdGFibGVTdGF0ZVxuICBpZiAodykge1xuICAgIHcuY2xvc2VFbWl0dGVkID0gdHJ1ZVxuICB9XG4gIGlmIChyKSB7XG4gICAgci5jbG9zZUVtaXR0ZWQgPSB0cnVlXG4gIH1cbiAgaWYgKCh3ICE9PSBudWxsICYmIHcgIT09IHVuZGVmaW5lZCAmJiB3LmVtaXRDbG9zZSkgfHwgKHIgIT09IG51bGwgJiYgciAhPT0gdW5kZWZpbmVkICYmIHIuZW1pdENsb3NlKSkge1xuICAgIHNlbGYuZW1pdCgnY2xvc2UnKVxuICB9XG59XG5mdW5jdGlvbiBlbWl0RXJyb3JOVChzZWxmLCBlcnIpIHtcbiAgY29uc3QgciA9IHNlbGYuX3JlYWRhYmxlU3RhdGVcbiAgY29uc3QgdyA9IHNlbGYuX3dyaXRhYmxlU3RhdGVcbiAgaWYgKCh3ICE9PSBudWxsICYmIHcgIT09IHVuZGVmaW5lZCAmJiB3LmVycm9yRW1pdHRlZCkgfHwgKHIgIT09IG51bGwgJiYgciAhPT0gdW5kZWZpbmVkICYmIHIuZXJyb3JFbWl0dGVkKSkge1xuICAgIHJldHVyblxuICB9XG4gIGlmICh3KSB7XG4gICAgdy5lcnJvckVtaXR0ZWQgPSB0cnVlXG4gIH1cbiAgaWYgKHIpIHtcbiAgICByLmVycm9yRW1pdHRlZCA9IHRydWVcbiAgfVxuICBzZWxmLmVtaXQoJ2Vycm9yJywgZXJyKVxufVxuZnVuY3Rpb24gdW5kZXN0cm95KCkge1xuICBjb25zdCByID0gdGhpcy5fcmVhZGFibGVTdGF0ZVxuICBjb25zdCB3ID0gdGhpcy5fd3JpdGFibGVTdGF0ZVxuICBpZiAocikge1xuICAgIHIuY29uc3RydWN0ZWQgPSB0cnVlXG4gICAgci5jbG9zZWQgPSBmYWxzZVxuICAgIHIuY2xvc2VFbWl0dGVkID0gZmFsc2VcbiAgICByLmRlc3Ryb3llZCA9IGZhbHNlXG4gICAgci5lcnJvcmVkID0gbnVsbFxuICAgIHIuZXJyb3JFbWl0dGVkID0gZmFsc2VcbiAgICByLnJlYWRpbmcgPSBmYWxzZVxuICAgIHIuZW5kZWQgPSByLnJlYWRhYmxlID09PSBmYWxzZVxuICAgIHIuZW5kRW1pdHRlZCA9IHIucmVhZGFibGUgPT09IGZhbHNlXG4gIH1cbiAgaWYgKHcpIHtcbiAgICB3LmNvbnN0cnVjdGVkID0gdHJ1ZVxuICAgIHcuZGVzdHJveWVkID0gZmFsc2VcbiAgICB3LmNsb3NlZCA9IGZhbHNlXG4gICAgdy5jbG9zZUVtaXR0ZWQgPSBmYWxzZVxuICAgIHcuZXJyb3JlZCA9IG51bGxcbiAgICB3LmVycm9yRW1pdHRlZCA9IGZhbHNlXG4gICAgdy5maW5hbENhbGxlZCA9IGZhbHNlXG4gICAgdy5wcmVmaW5pc2hlZCA9IGZhbHNlXG4gICAgdy5lbmRlZCA9IHcud3JpdGFibGUgPT09IGZhbHNlXG4gICAgdy5lbmRpbmcgPSB3LndyaXRhYmxlID09PSBmYWxzZVxuICAgIHcuZmluaXNoZWQgPSB3LndyaXRhYmxlID09PSBmYWxzZVxuICB9XG59XG5mdW5jdGlvbiBlcnJvck9yRGVzdHJveShzdHJlYW0sIGVyciwgc3luYykge1xuICAvLyBXZSBoYXZlIHRlc3RzIHRoYXQgcmVseSBvbiBlcnJvcnMgYmVpbmcgZW1pdHRlZFxuICAvLyBpbiB0aGUgc2FtZSB0aWNrLCBzbyBjaGFuZ2luZyB0aGlzIGlzIHNlbXZlciBtYWpvci5cbiAgLy8gRm9yIG5vdyB3aGVuIHlvdSBvcHQtaW4gdG8gYXV0b0Rlc3Ryb3kgd2UgYWxsb3dcbiAgLy8gdGhlIGVycm9yIHRvIGJlIGVtaXR0ZWQgbmV4dFRpY2suIEluIGEgZnV0dXJlXG4gIC8vIHNlbXZlciBtYWpvciB1cGRhdGUgd2Ugc2hvdWxkIGNoYW5nZSB0aGUgZGVmYXVsdCB0byB0aGlzLlxuXG4gIGNvbnN0IHIgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGVcbiAgY29uc3QgdyA9IHN0cmVhbS5fd3JpdGFibGVTdGF0ZVxuICBpZiAoKHcgIT09IG51bGwgJiYgdyAhPT0gdW5kZWZpbmVkICYmIHcuZGVzdHJveWVkKSB8fCAociAhPT0gbnVsbCAmJiByICE9PSB1bmRlZmluZWQgJiYgci5kZXN0cm95ZWQpKSB7XG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuICBpZiAoKHIgIT09IG51bGwgJiYgciAhPT0gdW5kZWZpbmVkICYmIHIuYXV0b0Rlc3Ryb3kpIHx8ICh3ICE9PSBudWxsICYmIHcgIT09IHVuZGVmaW5lZCAmJiB3LmF1dG9EZXN0cm95KSlcbiAgICBzdHJlYW0uZGVzdHJveShlcnIpXG4gIGVsc2UgaWYgKGVycikge1xuICAgIC8vIEF2b2lkIFY4IGxlYWssIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9wdWxsLzM0MTAzI2lzc3VlY29tbWVudC02NTIwMDIzNjRcbiAgICBlcnIuc3RhY2sgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcblxuICAgIGlmICh3ICYmICF3LmVycm9yZWQpIHtcbiAgICAgIHcuZXJyb3JlZCA9IGVyclxuICAgIH1cbiAgICBpZiAociAmJiAhci5lcnJvcmVkKSB7XG4gICAgICByLmVycm9yZWQgPSBlcnJcbiAgICB9XG4gICAgaWYgKHN5bmMpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZW1pdEVycm9yTlQsIHN0cmVhbSwgZXJyKVxuICAgIH0gZWxzZSB7XG4gICAgICBlbWl0RXJyb3JOVChzdHJlYW0sIGVycilcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGNvbnN0cnVjdChzdHJlYW0sIGNiKSB7XG4gIGlmICh0eXBlb2Ygc3RyZWFtLl9jb25zdHJ1Y3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm5cbiAgfVxuICBjb25zdCByID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlXG4gIGNvbnN0IHcgPSBzdHJlYW0uX3dyaXRhYmxlU3RhdGVcbiAgaWYgKHIpIHtcbiAgICByLmNvbnN0cnVjdGVkID0gZmFsc2VcbiAgfVxuICBpZiAodykge1xuICAgIHcuY29uc3RydWN0ZWQgPSBmYWxzZVxuICB9XG4gIHN0cmVhbS5vbmNlKGtDb25zdHJ1Y3QsIGNiKVxuICBpZiAoc3RyZWFtLmxpc3RlbmVyQ291bnQoa0NvbnN0cnVjdCkgPiAxKSB7XG4gICAgLy8gRHVwbGV4XG4gICAgcmV0dXJuXG4gIH1cbiAgcHJvY2Vzcy5uZXh0VGljayhjb25zdHJ1Y3ROVCwgc3RyZWFtKVxufVxuZnVuY3Rpb24gY29uc3RydWN0TlQoc3RyZWFtKSB7XG4gIGxldCBjYWxsZWQgPSBmYWxzZVxuICBmdW5jdGlvbiBvbkNvbnN0cnVjdChlcnIpIHtcbiAgICBpZiAoY2FsbGVkKSB7XG4gICAgICBlcnJvck9yRGVzdHJveShzdHJlYW0sIGVyciAhPT0gbnVsbCAmJiBlcnIgIT09IHVuZGVmaW5lZCA/IGVyciA6IG5ldyBFUlJfTVVMVElQTEVfQ0FMTEJBQ0soKSlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjYWxsZWQgPSB0cnVlXG4gICAgY29uc3QgciA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZVxuICAgIGNvbnN0IHcgPSBzdHJlYW0uX3dyaXRhYmxlU3RhdGVcbiAgICBjb25zdCBzID0gdyB8fCByXG4gICAgaWYgKHIpIHtcbiAgICAgIHIuY29uc3RydWN0ZWQgPSB0cnVlXG4gICAgfVxuICAgIGlmICh3KSB7XG4gICAgICB3LmNvbnN0cnVjdGVkID0gdHJ1ZVxuICAgIH1cbiAgICBpZiAocy5kZXN0cm95ZWQpIHtcbiAgICAgIHN0cmVhbS5lbWl0KGtEZXN0cm95LCBlcnIpXG4gICAgfSBlbHNlIGlmIChlcnIpIHtcbiAgICAgIGVycm9yT3JEZXN0cm95KHN0cmVhbSwgZXJyLCB0cnVlKVxuICAgIH0gZWxzZSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGVtaXRDb25zdHJ1Y3ROVCwgc3RyZWFtKVxuICAgIH1cbiAgfVxuICB0cnkge1xuICAgIHN0cmVhbS5fY29uc3RydWN0KChlcnIpID0+IHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2sob25Db25zdHJ1Y3QsIGVycilcbiAgICB9KVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBwcm9jZXNzLm5leHRUaWNrKG9uQ29uc3RydWN0LCBlcnIpXG4gIH1cbn1cbmZ1bmN0aW9uIGVtaXRDb25zdHJ1Y3ROVChzdHJlYW0pIHtcbiAgc3RyZWFtLmVtaXQoa0NvbnN0cnVjdClcbn1cbmZ1bmN0aW9uIGlzUmVxdWVzdChzdHJlYW0pIHtcbiAgcmV0dXJuIChzdHJlYW0gPT09IG51bGwgfHwgc3RyZWFtID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBzdHJlYW0uc2V0SGVhZGVyKSAmJiB0eXBlb2Ygc3RyZWFtLmFib3J0ID09PSAnZnVuY3Rpb24nXG59XG5mdW5jdGlvbiBlbWl0Q2xvc2VMZWdhY3koc3RyZWFtKSB7XG4gIHN0cmVhbS5lbWl0KCdjbG9zZScpXG59XG5mdW5jdGlvbiBlbWl0RXJyb3JDbG9zZUxlZ2FjeShzdHJlYW0sIGVycikge1xuICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcnIpXG4gIHByb2Nlc3MubmV4dFRpY2soZW1pdENsb3NlTGVnYWN5LCBzdHJlYW0pXG59XG5cbi8vIE5vcm1hbGl6ZSBkZXN0cm95IGZvciBsZWdhY3kuXG5mdW5jdGlvbiBkZXN0cm95ZXIoc3RyZWFtLCBlcnIpIHtcbiAgaWYgKCFzdHJlYW0gfHwgaXNEZXN0cm95ZWQoc3RyZWFtKSkge1xuICAgIHJldHVyblxuICB9XG4gIGlmICghZXJyICYmICFpc0ZpbmlzaGVkKHN0cmVhbSkpIHtcbiAgICBlcnIgPSBuZXcgQWJvcnRFcnJvcigpXG4gIH1cblxuICAvLyBUT0RPOiBSZW1vdmUgaXNSZXF1ZXN0IGJyYW5jaGVzLlxuICBpZiAoaXNTZXJ2ZXJSZXF1ZXN0KHN0cmVhbSkpIHtcbiAgICBzdHJlYW0uc29ja2V0ID0gbnVsbFxuICAgIHN0cmVhbS5kZXN0cm95KGVycilcbiAgfSBlbHNlIGlmIChpc1JlcXVlc3Qoc3RyZWFtKSkge1xuICAgIHN0cmVhbS5hYm9ydCgpXG4gIH0gZWxzZSBpZiAoaXNSZXF1ZXN0KHN0cmVhbS5yZXEpKSB7XG4gICAgc3RyZWFtLnJlcS5hYm9ydCgpXG4gIH0gZWxzZSBpZiAodHlwZW9mIHN0cmVhbS5kZXN0cm95ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgc3RyZWFtLmRlc3Ryb3koZXJyKVxuICB9IGVsc2UgaWYgKHR5cGVvZiBzdHJlYW0uY2xvc2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBUT0RPOiBEb24ndCBsb3NlIGVycj9cbiAgICBzdHJlYW0uY2xvc2UoKVxuICB9IGVsc2UgaWYgKGVycikge1xuICAgIHByb2Nlc3MubmV4dFRpY2soZW1pdEVycm9yQ2xvc2VMZWdhY3ksIHN0cmVhbSwgZXJyKVxuICB9IGVsc2Uge1xuICAgIHByb2Nlc3MubmV4dFRpY2soZW1pdENsb3NlTGVnYWN5LCBzdHJlYW0pXG4gIH1cbiAgaWYgKCFzdHJlYW0uZGVzdHJveWVkKSB7XG4gICAgc3RyZWFtW2tJc0Rlc3Ryb3llZF0gPSB0cnVlXG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0ge1xuICBjb25zdHJ1Y3QsXG4gIGRlc3Ryb3llcixcbiAgZGVzdHJveSxcbiAgdW5kZXN0cm95LFxuICBlcnJvck9yRGVzdHJveVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBBcnJheUlzQXJyYXksIE9iamVjdFNldFByb3RvdHlwZU9mIH0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL3ByaW1vcmRpYWxzJylcbmNvbnN0IHsgRXZlbnRFbWl0dGVyOiBFRSB9ID0gcmVxdWlyZSgnZXZlbnRzJylcbmZ1bmN0aW9uIFN0cmVhbShvcHRzKSB7XG4gIEVFLmNhbGwodGhpcywgb3B0cylcbn1cbk9iamVjdFNldFByb3RvdHlwZU9mKFN0cmVhbS5wcm90b3R5cGUsIEVFLnByb3RvdHlwZSlcbk9iamVjdFNldFByb3RvdHlwZU9mKFN0cmVhbSwgRUUpXG5TdHJlYW0ucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbiAoZGVzdCwgb3B0aW9ucykge1xuICBjb25zdCBzb3VyY2UgPSB0aGlzXG4gIGZ1bmN0aW9uIG9uZGF0YShjaHVuaykge1xuICAgIGlmIChkZXN0LndyaXRhYmxlICYmIGRlc3Qud3JpdGUoY2h1bmspID09PSBmYWxzZSAmJiBzb3VyY2UucGF1c2UpIHtcbiAgICAgIHNvdXJjZS5wYXVzZSgpXG4gICAgfVxuICB9XG4gIHNvdXJjZS5vbignZGF0YScsIG9uZGF0YSlcbiAgZnVuY3Rpb24gb25kcmFpbigpIHtcbiAgICBpZiAoc291cmNlLnJlYWRhYmxlICYmIHNvdXJjZS5yZXN1bWUpIHtcbiAgICAgIHNvdXJjZS5yZXN1bWUoKVxuICAgIH1cbiAgfVxuICBkZXN0Lm9uKCdkcmFpbicsIG9uZHJhaW4pXG5cbiAgLy8gSWYgdGhlICdlbmQnIG9wdGlvbiBpcyBub3Qgc3VwcGxpZWQsIGRlc3QuZW5kKCkgd2lsbCBiZSBjYWxsZWQgd2hlblxuICAvLyBzb3VyY2UgZ2V0cyB0aGUgJ2VuZCcgb3IgJ2Nsb3NlJyBldmVudHMuICBPbmx5IGRlc3QuZW5kKCkgb25jZS5cbiAgaWYgKCFkZXN0Ll9pc1N0ZGlvICYmICghb3B0aW9ucyB8fCBvcHRpb25zLmVuZCAhPT0gZmFsc2UpKSB7XG4gICAgc291cmNlLm9uKCdlbmQnLCBvbmVuZClcbiAgICBzb3VyY2Uub24oJ2Nsb3NlJywgb25jbG9zZSlcbiAgfVxuICBsZXQgZGlkT25FbmQgPSBmYWxzZVxuICBmdW5jdGlvbiBvbmVuZCgpIHtcbiAgICBpZiAoZGlkT25FbmQpIHJldHVyblxuICAgIGRpZE9uRW5kID0gdHJ1ZVxuICAgIGRlc3QuZW5kKClcbiAgfVxuICBmdW5jdGlvbiBvbmNsb3NlKCkge1xuICAgIGlmIChkaWRPbkVuZCkgcmV0dXJuXG4gICAgZGlkT25FbmQgPSB0cnVlXG4gICAgaWYgKHR5cGVvZiBkZXN0LmRlc3Ryb3kgPT09ICdmdW5jdGlvbicpIGRlc3QuZGVzdHJveSgpXG4gIH1cblxuICAvLyBEb24ndCBsZWF2ZSBkYW5nbGluZyBwaXBlcyB3aGVuIHRoZXJlIGFyZSBlcnJvcnMuXG4gIGZ1bmN0aW9uIG9uZXJyb3IoZXIpIHtcbiAgICBjbGVhbnVwKClcbiAgICBpZiAoRUUubGlzdGVuZXJDb3VudCh0aGlzLCAnZXJyb3InKSA9PT0gMCkge1xuICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIGVyKVxuICAgIH1cbiAgfVxuICBwcmVwZW5kTGlzdGVuZXIoc291cmNlLCAnZXJyb3InLCBvbmVycm9yKVxuICBwcmVwZW5kTGlzdGVuZXIoZGVzdCwgJ2Vycm9yJywgb25lcnJvcilcblxuICAvLyBSZW1vdmUgYWxsIHRoZSBldmVudCBsaXN0ZW5lcnMgdGhhdCB3ZXJlIGFkZGVkLlxuICBmdW5jdGlvbiBjbGVhbnVwKCkge1xuICAgIHNvdXJjZS5yZW1vdmVMaXN0ZW5lcignZGF0YScsIG9uZGF0YSlcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdkcmFpbicsIG9uZHJhaW4pXG4gICAgc291cmNlLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBvbmVuZClcbiAgICBzb3VyY2UucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgb25jbG9zZSlcbiAgICBzb3VyY2UucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgb25lcnJvcilcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uZXJyb3IpXG4gICAgc291cmNlLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBjbGVhbnVwKVxuICAgIHNvdXJjZS5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBjbGVhbnVwKVxuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgY2xlYW51cClcbiAgfVxuICBzb3VyY2Uub24oJ2VuZCcsIGNsZWFudXApXG4gIHNvdXJjZS5vbignY2xvc2UnLCBjbGVhbnVwKVxuICBkZXN0Lm9uKCdjbG9zZScsIGNsZWFudXApXG4gIGRlc3QuZW1pdCgncGlwZScsIHNvdXJjZSlcblxuICAvLyBBbGxvdyBmb3IgdW5peC1saWtlIHVzYWdlOiBBLnBpcGUoQikucGlwZShDKVxuICByZXR1cm4gZGVzdFxufVxuZnVuY3Rpb24gcHJlcGVuZExpc3RlbmVyKGVtaXR0ZXIsIGV2ZW50LCBmbikge1xuICAvLyBTYWRseSB0aGlzIGlzIG5vdCBjYWNoZWFibGUgYXMgc29tZSBsaWJyYXJpZXMgYnVuZGxlIHRoZWlyIG93blxuICAvLyBldmVudCBlbWl0dGVyIGltcGxlbWVudGF0aW9uIHdpdGggdGhlbS5cbiAgaWYgKHR5cGVvZiBlbWl0dGVyLnByZXBlbmRMaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIGVtaXR0ZXIucHJlcGVuZExpc3RlbmVyKGV2ZW50LCBmbilcblxuICAvLyBUaGlzIGlzIGEgaGFjayB0byBtYWtlIHN1cmUgdGhhdCBvdXIgZXJyb3IgaGFuZGxlciBpcyBhdHRhY2hlZCBiZWZvcmUgYW55XG4gIC8vIHVzZXJsYW5kIG9uZXMuICBORVZFUiBETyBUSElTLiBUaGlzIGlzIGhlcmUgb25seSBiZWNhdXNlIHRoaXMgY29kZSBuZWVkc1xuICAvLyB0byBjb250aW51ZSB0byB3b3JrIHdpdGggb2xkZXIgdmVyc2lvbnMgb2YgTm9kZS5qcyB0aGF0IGRvIG5vdCBpbmNsdWRlXG4gIC8vIHRoZSBwcmVwZW5kTGlzdGVuZXIoKSBtZXRob2QuIFRoZSBnb2FsIGlzIHRvIGV2ZW50dWFsbHkgcmVtb3ZlIHRoaXMgaGFjay5cbiAgaWYgKCFlbWl0dGVyLl9ldmVudHMgfHwgIWVtaXR0ZXIuX2V2ZW50c1tldmVudF0pIGVtaXR0ZXIub24oZXZlbnQsIGZuKVxuICBlbHNlIGlmIChBcnJheUlzQXJyYXkoZW1pdHRlci5fZXZlbnRzW2V2ZW50XSkpIGVtaXR0ZXIuX2V2ZW50c1tldmVudF0udW5zaGlmdChmbilcbiAgZWxzZSBlbWl0dGVyLl9ldmVudHNbZXZlbnRdID0gW2ZuLCBlbWl0dGVyLl9ldmVudHNbZXZlbnRdXVxufVxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFN0cmVhbSxcbiAgcHJlcGVuZExpc3RlbmVyXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IFN5bWJvbERpc3Bvc2UgfSA9IHJlcXVpcmUoJy4uLy4uL291cnMvcHJpbW9yZGlhbHMnKVxuY29uc3QgeyBBYm9ydEVycm9yLCBjb2RlcyB9ID0gcmVxdWlyZSgnLi4vLi4vb3Vycy9lcnJvcnMnKVxuY29uc3QgeyBpc05vZGVTdHJlYW0sIGlzV2ViU3RyZWFtLCBrQ29udHJvbGxlckVycm9yRnVuY3Rpb24gfSA9IHJlcXVpcmUoJy4vdXRpbHMnKVxuY29uc3QgZW9zID0gcmVxdWlyZSgnLi9lbmQtb2Ytc3RyZWFtJylcbmNvbnN0IHsgRVJSX0lOVkFMSURfQVJHX1RZUEUgfSA9IGNvZGVzXG5sZXQgYWRkQWJvcnRMaXN0ZW5lclxuXG4vLyBUaGlzIG1ldGhvZCBpcyBpbmxpbmVkIGhlcmUgZm9yIHJlYWRhYmxlLXN0cmVhbVxuLy8gSXQgYWxzbyBkb2VzIG5vdCBhbGxvdyBmb3Igc2lnbmFsIHRvIG5vdCBleGlzdCBvbiB0aGUgc3RyZWFtXG4vLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvcHVsbC8zNjA2MSNkaXNjdXNzaW9uX3I1MzM3MTgwMjlcbmNvbnN0IHZhbGlkYXRlQWJvcnRTaWduYWwgPSAoc2lnbmFsLCBuYW1lKSA9PiB7XG4gIGlmICh0eXBlb2Ygc2lnbmFsICE9PSAnb2JqZWN0JyB8fCAhKCdhYm9ydGVkJyBpbiBzaWduYWwpKSB7XG4gICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKG5hbWUsICdBYm9ydFNpZ25hbCcsIHNpZ25hbClcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMuYWRkQWJvcnRTaWduYWwgPSBmdW5jdGlvbiBhZGRBYm9ydFNpZ25hbChzaWduYWwsIHN0cmVhbSkge1xuICB2YWxpZGF0ZUFib3J0U2lnbmFsKHNpZ25hbCwgJ3NpZ25hbCcpXG4gIGlmICghaXNOb2RlU3RyZWFtKHN0cmVhbSkgJiYgIWlzV2ViU3RyZWFtKHN0cmVhbSkpIHtcbiAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoJ3N0cmVhbScsIFsnUmVhZGFibGVTdHJlYW0nLCAnV3JpdGFibGVTdHJlYW0nLCAnU3RyZWFtJ10sIHN0cmVhbSlcbiAgfVxuICByZXR1cm4gbW9kdWxlLmV4cG9ydHMuYWRkQWJvcnRTaWduYWxOb1ZhbGlkYXRlKHNpZ25hbCwgc3RyZWFtKVxufVxubW9kdWxlLmV4cG9ydHMuYWRkQWJvcnRTaWduYWxOb1ZhbGlkYXRlID0gZnVuY3Rpb24gKHNpZ25hbCwgc3RyZWFtKSB7XG4gIGlmICh0eXBlb2Ygc2lnbmFsICE9PSAnb2JqZWN0JyB8fCAhKCdhYm9ydGVkJyBpbiBzaWduYWwpKSB7XG4gICAgcmV0dXJuIHN0cmVhbVxuICB9XG4gIGNvbnN0IG9uQWJvcnQgPSBpc05vZGVTdHJlYW0oc3RyZWFtKVxuICAgID8gKCkgPT4ge1xuICAgICAgICBzdHJlYW0uZGVzdHJveShcbiAgICAgICAgICBuZXcgQWJvcnRFcnJvcih1bmRlZmluZWQsIHtcbiAgICAgICAgICAgIGNhdXNlOiBzaWduYWwucmVhc29uXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgfVxuICAgIDogKCkgPT4ge1xuICAgICAgICBzdHJlYW1ba0NvbnRyb2xsZXJFcnJvckZ1bmN0aW9uXShcbiAgICAgICAgICBuZXcgQWJvcnRFcnJvcih1bmRlZmluZWQsIHtcbiAgICAgICAgICAgIGNhdXNlOiBzaWduYWwucmVhc29uXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgfVxuICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcbiAgICBvbkFib3J0KClcbiAgfSBlbHNlIHtcbiAgICBhZGRBYm9ydExpc3RlbmVyID0gYWRkQWJvcnRMaXN0ZW5lciB8fCByZXF1aXJlKCcuLi8uLi9vdXJzL3V0aWwnKS5hZGRBYm9ydExpc3RlbmVyXG4gICAgY29uc3QgZGlzcG9zYWJsZSA9IGFkZEFib3J0TGlzdGVuZXIoc2lnbmFsLCBvbkFib3J0KVxuICAgIGVvcyhzdHJlYW0sIGRpc3Bvc2FibGVbU3ltYm9sRGlzcG9zZV0pXG4gIH1cbiAgcmV0dXJuIHN0cmVhbVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBTdHJpbmdQcm90b3R5cGVTbGljZSwgU3ltYm9sSXRlcmF0b3IsIFR5cGVkQXJyYXlQcm90b3R5cGVTZXQsIFVpbnQ4QXJyYXkgfSA9IHJlcXVpcmUoJy4uLy4uL291cnMvcHJpbW9yZGlhbHMnKVxuY29uc3QgeyBCdWZmZXIgfSA9IHJlcXVpcmUoJ2J1ZmZlcicpXG5jb25zdCB7IGluc3BlY3QgfSA9IHJlcXVpcmUoJy4uLy4uL291cnMvdXRpbCcpXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIEJ1ZmZlckxpc3Qge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmhlYWQgPSBudWxsXG4gICAgdGhpcy50YWlsID0gbnVsbFxuICAgIHRoaXMubGVuZ3RoID0gMFxuICB9XG4gIHB1c2godikge1xuICAgIGNvbnN0IGVudHJ5ID0ge1xuICAgICAgZGF0YTogdixcbiAgICAgIG5leHQ6IG51bGxcbiAgICB9XG4gICAgaWYgKHRoaXMubGVuZ3RoID4gMCkgdGhpcy50YWlsLm5leHQgPSBlbnRyeVxuICAgIGVsc2UgdGhpcy5oZWFkID0gZW50cnlcbiAgICB0aGlzLnRhaWwgPSBlbnRyeVxuICAgICsrdGhpcy5sZW5ndGhcbiAgfVxuICB1bnNoaWZ0KHYpIHtcbiAgICBjb25zdCBlbnRyeSA9IHtcbiAgICAgIGRhdGE6IHYsXG4gICAgICBuZXh0OiB0aGlzLmhlYWRcbiAgICB9XG4gICAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSB0aGlzLnRhaWwgPSBlbnRyeVxuICAgIHRoaXMuaGVhZCA9IGVudHJ5XG4gICAgKyt0aGlzLmxlbmd0aFxuICB9XG4gIHNoaWZ0KCkge1xuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuXG4gICAgY29uc3QgcmV0ID0gdGhpcy5oZWFkLmRhdGFcbiAgICBpZiAodGhpcy5sZW5ndGggPT09IDEpIHRoaXMuaGVhZCA9IHRoaXMudGFpbCA9IG51bGxcbiAgICBlbHNlIHRoaXMuaGVhZCA9IHRoaXMuaGVhZC5uZXh0XG4gICAgLS10aGlzLmxlbmd0aFxuICAgIHJldHVybiByZXRcbiAgfVxuICBjbGVhcigpIHtcbiAgICB0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBudWxsXG4gICAgdGhpcy5sZW5ndGggPSAwXG4gIH1cbiAgam9pbihzKSB7XG4gICAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSByZXR1cm4gJydcbiAgICBsZXQgcCA9IHRoaXMuaGVhZFxuICAgIGxldCByZXQgPSAnJyArIHAuZGF0YVxuICAgIHdoaWxlICgocCA9IHAubmV4dCkgIT09IG51bGwpIHJldCArPSBzICsgcC5kYXRhXG4gICAgcmV0dXJuIHJldFxuICB9XG4gIGNvbmNhdChuKSB7XG4gICAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSByZXR1cm4gQnVmZmVyLmFsbG9jKDApXG4gICAgY29uc3QgcmV0ID0gQnVmZmVyLmFsbG9jVW5zYWZlKG4gPj4+IDApXG4gICAgbGV0IHAgPSB0aGlzLmhlYWRcbiAgICBsZXQgaSA9IDBcbiAgICB3aGlsZSAocCkge1xuICAgICAgVHlwZWRBcnJheVByb3RvdHlwZVNldChyZXQsIHAuZGF0YSwgaSlcbiAgICAgIGkgKz0gcC5kYXRhLmxlbmd0aFxuICAgICAgcCA9IHAubmV4dFxuICAgIH1cbiAgICByZXR1cm4gcmV0XG4gIH1cblxuICAvLyBDb25zdW1lcyBhIHNwZWNpZmllZCBhbW91bnQgb2YgYnl0ZXMgb3IgY2hhcmFjdGVycyBmcm9tIHRoZSBidWZmZXJlZCBkYXRhLlxuICBjb25zdW1lKG4sIGhhc1N0cmluZ3MpIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5oZWFkLmRhdGFcbiAgICBpZiAobiA8IGRhdGEubGVuZ3RoKSB7XG4gICAgICAvLyBgc2xpY2VgIGlzIHRoZSBzYW1lIGZvciBidWZmZXJzIGFuZCBzdHJpbmdzLlxuICAgICAgY29uc3Qgc2xpY2UgPSBkYXRhLnNsaWNlKDAsIG4pXG4gICAgICB0aGlzLmhlYWQuZGF0YSA9IGRhdGEuc2xpY2UobilcbiAgICAgIHJldHVybiBzbGljZVxuICAgIH1cbiAgICBpZiAobiA9PT0gZGF0YS5sZW5ndGgpIHtcbiAgICAgIC8vIEZpcnN0IGNodW5rIGlzIGEgcGVyZmVjdCBtYXRjaC5cbiAgICAgIHJldHVybiB0aGlzLnNoaWZ0KClcbiAgICB9XG4gICAgLy8gUmVzdWx0IHNwYW5zIG1vcmUgdGhhbiBvbmUgYnVmZmVyLlxuICAgIHJldHVybiBoYXNTdHJpbmdzID8gdGhpcy5fZ2V0U3RyaW5nKG4pIDogdGhpcy5fZ2V0QnVmZmVyKG4pXG4gIH1cbiAgZmlyc3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGVhZC5kYXRhXG4gIH1cbiAgKltTeW1ib2xJdGVyYXRvcl0oKSB7XG4gICAgZm9yIChsZXQgcCA9IHRoaXMuaGVhZDsgcDsgcCA9IHAubmV4dCkge1xuICAgICAgeWllbGQgcC5kYXRhXG4gICAgfVxuICB9XG5cbiAgLy8gQ29uc3VtZXMgYSBzcGVjaWZpZWQgYW1vdW50IG9mIGNoYXJhY3RlcnMgZnJvbSB0aGUgYnVmZmVyZWQgZGF0YS5cbiAgX2dldFN0cmluZyhuKSB7XG4gICAgbGV0IHJldCA9ICcnXG4gICAgbGV0IHAgPSB0aGlzLmhlYWRcbiAgICBsZXQgYyA9IDBcbiAgICBkbyB7XG4gICAgICBjb25zdCBzdHIgPSBwLmRhdGFcbiAgICAgIGlmIChuID4gc3RyLmxlbmd0aCkge1xuICAgICAgICByZXQgKz0gc3RyXG4gICAgICAgIG4gLT0gc3RyLmxlbmd0aFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG4gPT09IHN0ci5sZW5ndGgpIHtcbiAgICAgICAgICByZXQgKz0gc3RyXG4gICAgICAgICAgKytjXG4gICAgICAgICAgaWYgKHAubmV4dCkgdGhpcy5oZWFkID0gcC5uZXh0XG4gICAgICAgICAgZWxzZSB0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBudWxsXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0ICs9IFN0cmluZ1Byb3RvdHlwZVNsaWNlKHN0ciwgMCwgbilcbiAgICAgICAgICB0aGlzLmhlYWQgPSBwXG4gICAgICAgICAgcC5kYXRhID0gU3RyaW5nUHJvdG90eXBlU2xpY2Uoc3RyLCBuKVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICArK2NcbiAgICB9IHdoaWxlICgocCA9IHAubmV4dCkgIT09IG51bGwpXG4gICAgdGhpcy5sZW5ndGggLT0gY1xuICAgIHJldHVybiByZXRcbiAgfVxuXG4gIC8vIENvbnN1bWVzIGEgc3BlY2lmaWVkIGFtb3VudCBvZiBieXRlcyBmcm9tIHRoZSBidWZmZXJlZCBkYXRhLlxuICBfZ2V0QnVmZmVyKG4pIHtcbiAgICBjb25zdCByZXQgPSBCdWZmZXIuYWxsb2NVbnNhZmUobilcbiAgICBjb25zdCByZXRMZW4gPSBuXG4gICAgbGV0IHAgPSB0aGlzLmhlYWRcbiAgICBsZXQgYyA9IDBcbiAgICBkbyB7XG4gICAgICBjb25zdCBidWYgPSBwLmRhdGFcbiAgICAgIGlmIChuID4gYnVmLmxlbmd0aCkge1xuICAgICAgICBUeXBlZEFycmF5UHJvdG90eXBlU2V0KHJldCwgYnVmLCByZXRMZW4gLSBuKVxuICAgICAgICBuIC09IGJ1Zi5sZW5ndGhcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChuID09PSBidWYubGVuZ3RoKSB7XG4gICAgICAgICAgVHlwZWRBcnJheVByb3RvdHlwZVNldChyZXQsIGJ1ZiwgcmV0TGVuIC0gbilcbiAgICAgICAgICArK2NcbiAgICAgICAgICBpZiAocC5uZXh0KSB0aGlzLmhlYWQgPSBwLm5leHRcbiAgICAgICAgICBlbHNlIHRoaXMuaGVhZCA9IHRoaXMudGFpbCA9IG51bGxcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBUeXBlZEFycmF5UHJvdG90eXBlU2V0KHJldCwgbmV3IFVpbnQ4QXJyYXkoYnVmLmJ1ZmZlciwgYnVmLmJ5dGVPZmZzZXQsIG4pLCByZXRMZW4gLSBuKVxuICAgICAgICAgIHRoaXMuaGVhZCA9IHBcbiAgICAgICAgICBwLmRhdGEgPSBidWYuc2xpY2UobilcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgKytjXG4gICAgfSB3aGlsZSAoKHAgPSBwLm5leHQpICE9PSBudWxsKVxuICAgIHRoaXMubGVuZ3RoIC09IGNcbiAgICByZXR1cm4gcmV0XG4gIH1cblxuICAvLyBNYWtlIHN1cmUgdGhlIGxpbmtlZCBsaXN0IG9ubHkgc2hvd3MgdGhlIG1pbmltYWwgbmVjZXNzYXJ5IGluZm9ybWF0aW9uLlxuICBbU3ltYm9sLmZvcignbm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20nKV0oXywgb3B0aW9ucykge1xuICAgIHJldHVybiBpbnNwZWN0KHRoaXMsIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAvLyBPbmx5IGluc3BlY3Qgb25lIGxldmVsLlxuICAgICAgZGVwdGg6IDAsXG4gICAgICAvLyBJdCBzaG91bGQgbm90IHJlY3Vyc2UuXG4gICAgICBjdXN0b21JbnNwZWN0OiBmYWxzZVxuICAgIH0pXG4gIH1cbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgTWF0aEZsb29yLCBOdW1iZXJJc0ludGVnZXIgfSA9IHJlcXVpcmUoJy4uLy4uL291cnMvcHJpbW9yZGlhbHMnKVxuY29uc3QgeyB2YWxpZGF0ZUludGVnZXIgfSA9IHJlcXVpcmUoJy4uL3ZhbGlkYXRvcnMnKVxuY29uc3QgeyBFUlJfSU5WQUxJRF9BUkdfVkFMVUUgfSA9IHJlcXVpcmUoJy4uLy4uL291cnMvZXJyb3JzJykuY29kZXNcbmxldCBkZWZhdWx0SGlnaFdhdGVyTWFya0J5dGVzID0gMTYgKiAxMDI0XG5sZXQgZGVmYXVsdEhpZ2hXYXRlck1hcmtPYmplY3RNb2RlID0gMTZcbmZ1bmN0aW9uIGhpZ2hXYXRlck1hcmtGcm9tKG9wdGlvbnMsIGlzRHVwbGV4LCBkdXBsZXhLZXkpIHtcbiAgcmV0dXJuIG9wdGlvbnMuaGlnaFdhdGVyTWFyayAhPSBudWxsID8gb3B0aW9ucy5oaWdoV2F0ZXJNYXJrIDogaXNEdXBsZXggPyBvcHRpb25zW2R1cGxleEtleV0gOiBudWxsXG59XG5mdW5jdGlvbiBnZXREZWZhdWx0SGlnaFdhdGVyTWFyayhvYmplY3RNb2RlKSB7XG4gIHJldHVybiBvYmplY3RNb2RlID8gZGVmYXVsdEhpZ2hXYXRlck1hcmtPYmplY3RNb2RlIDogZGVmYXVsdEhpZ2hXYXRlck1hcmtCeXRlc1xufVxuZnVuY3Rpb24gc2V0RGVmYXVsdEhpZ2hXYXRlck1hcmsob2JqZWN0TW9kZSwgdmFsdWUpIHtcbiAgdmFsaWRhdGVJbnRlZ2VyKHZhbHVlLCAndmFsdWUnLCAwKVxuICBpZiAob2JqZWN0TW9kZSkge1xuICAgIGRlZmF1bHRIaWdoV2F0ZXJNYXJrT2JqZWN0TW9kZSA9IHZhbHVlXG4gIH0gZWxzZSB7XG4gICAgZGVmYXVsdEhpZ2hXYXRlck1hcmtCeXRlcyA9IHZhbHVlXG4gIH1cbn1cbmZ1bmN0aW9uIGdldEhpZ2hXYXRlck1hcmsoc3RhdGUsIG9wdGlvbnMsIGR1cGxleEtleSwgaXNEdXBsZXgpIHtcbiAgY29uc3QgaHdtID0gaGlnaFdhdGVyTWFya0Zyb20ob3B0aW9ucywgaXNEdXBsZXgsIGR1cGxleEtleSlcbiAgaWYgKGh3bSAhPSBudWxsKSB7XG4gICAgaWYgKCFOdW1iZXJJc0ludGVnZXIoaHdtKSB8fCBod20gPCAwKSB7XG4gICAgICBjb25zdCBuYW1lID0gaXNEdXBsZXggPyBgb3B0aW9ucy4ke2R1cGxleEtleX1gIDogJ29wdGlvbnMuaGlnaFdhdGVyTWFyaydcbiAgICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVkFMVUUobmFtZSwgaHdtKVxuICAgIH1cbiAgICByZXR1cm4gTWF0aEZsb29yKGh3bSlcbiAgfVxuXG4gIC8vIERlZmF1bHQgdmFsdWVcbiAgcmV0dXJuIGdldERlZmF1bHRIaWdoV2F0ZXJNYXJrKHN0YXRlLm9iamVjdE1vZGUpXG59XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0SGlnaFdhdGVyTWFyayxcbiAgZ2V0RGVmYXVsdEhpZ2hXYXRlck1hcmssXG4gIHNldERlZmF1bHRIaWdoV2F0ZXJNYXJrXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG4vKiByZXBsYWNlbWVudCBzdGFydCAqL1xuXG5jb25zdCBwcm9jZXNzID0gcmVxdWlyZSgncHJvY2Vzcy8nKVxuXG4vKiByZXBsYWNlbWVudCBlbmQgKi9cblxuY29uc3QgeyBQcm9taXNlUHJvdG90eXBlVGhlbiwgU3ltYm9sQXN5bmNJdGVyYXRvciwgU3ltYm9sSXRlcmF0b3IgfSA9IHJlcXVpcmUoJy4uLy4uL291cnMvcHJpbW9yZGlhbHMnKVxuY29uc3QgeyBCdWZmZXIgfSA9IHJlcXVpcmUoJ2J1ZmZlcicpXG5jb25zdCB7IEVSUl9JTlZBTElEX0FSR19UWVBFLCBFUlJfU1RSRUFNX05VTExfVkFMVUVTIH0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL2Vycm9ycycpLmNvZGVzXG5mdW5jdGlvbiBmcm9tKFJlYWRhYmxlLCBpdGVyYWJsZSwgb3B0cykge1xuICBsZXQgaXRlcmF0b3JcbiAgaWYgKHR5cGVvZiBpdGVyYWJsZSA9PT0gJ3N0cmluZycgfHwgaXRlcmFibGUgaW5zdGFuY2VvZiBCdWZmZXIpIHtcbiAgICByZXR1cm4gbmV3IFJlYWRhYmxlKHtcbiAgICAgIG9iamVjdE1vZGU6IHRydWUsXG4gICAgICAuLi5vcHRzLFxuICAgICAgcmVhZCgpIHtcbiAgICAgICAgdGhpcy5wdXNoKGl0ZXJhYmxlKVxuICAgICAgICB0aGlzLnB1c2gobnVsbClcbiAgICAgIH1cbiAgICB9KVxuICB9XG4gIGxldCBpc0FzeW5jXG4gIGlmIChpdGVyYWJsZSAmJiBpdGVyYWJsZVtTeW1ib2xBc3luY0l0ZXJhdG9yXSkge1xuICAgIGlzQXN5bmMgPSB0cnVlXG4gICAgaXRlcmF0b3IgPSBpdGVyYWJsZVtTeW1ib2xBc3luY0l0ZXJhdG9yXSgpXG4gIH0gZWxzZSBpZiAoaXRlcmFibGUgJiYgaXRlcmFibGVbU3ltYm9sSXRlcmF0b3JdKSB7XG4gICAgaXNBc3luYyA9IGZhbHNlXG4gICAgaXRlcmF0b3IgPSBpdGVyYWJsZVtTeW1ib2xJdGVyYXRvcl0oKVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRSgnaXRlcmFibGUnLCBbJ0l0ZXJhYmxlJ10sIGl0ZXJhYmxlKVxuICB9XG4gIGNvbnN0IHJlYWRhYmxlID0gbmV3IFJlYWRhYmxlKHtcbiAgICBvYmplY3RNb2RlOiB0cnVlLFxuICAgIGhpZ2hXYXRlck1hcms6IDEsXG4gICAgLy8gVE9ETyhyb25hZyk6IFdoYXQgb3B0aW9ucyBzaG91bGQgYmUgYWxsb3dlZD9cbiAgICAuLi5vcHRzXG4gIH0pXG5cbiAgLy8gRmxhZyB0byBwcm90ZWN0IGFnYWluc3QgX3JlYWRcbiAgLy8gYmVpbmcgY2FsbGVkIGJlZm9yZSBsYXN0IGl0ZXJhdGlvbiBjb21wbGV0aW9uLlxuICBsZXQgcmVhZGluZyA9IGZhbHNlXG4gIHJlYWRhYmxlLl9yZWFkID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICghcmVhZGluZykge1xuICAgICAgcmVhZGluZyA9IHRydWVcbiAgICAgIG5leHQoKVxuICAgIH1cbiAgfVxuICByZWFkYWJsZS5fZGVzdHJveSA9IGZ1bmN0aW9uIChlcnJvciwgY2IpIHtcbiAgICBQcm9taXNlUHJvdG90eXBlVGhlbihcbiAgICAgIGNsb3NlKGVycm9yKSxcbiAgICAgICgpID0+IHByb2Nlc3MubmV4dFRpY2soY2IsIGVycm9yKSxcbiAgICAgIC8vIG5leHRUaWNrIGlzIGhlcmUgaW4gY2FzZSBjYiB0aHJvd3NcbiAgICAgIChlKSA9PiBwcm9jZXNzLm5leHRUaWNrKGNiLCBlIHx8IGVycm9yKVxuICAgIClcbiAgfVxuICBhc3luYyBmdW5jdGlvbiBjbG9zZShlcnJvcikge1xuICAgIGNvbnN0IGhhZEVycm9yID0gZXJyb3IgIT09IHVuZGVmaW5lZCAmJiBlcnJvciAhPT0gbnVsbFxuICAgIGNvbnN0IGhhc1Rocm93ID0gdHlwZW9mIGl0ZXJhdG9yLnRocm93ID09PSAnZnVuY3Rpb24nXG4gICAgaWYgKGhhZEVycm9yICYmIGhhc1Rocm93KSB7XG4gICAgICBjb25zdCB7IHZhbHVlLCBkb25lIH0gPSBhd2FpdCBpdGVyYXRvci50aHJvdyhlcnJvcilcbiAgICAgIGF3YWl0IHZhbHVlXG4gICAgICBpZiAoZG9uZSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHR5cGVvZiBpdGVyYXRvci5yZXR1cm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnN0IHsgdmFsdWUgfSA9IGF3YWl0IGl0ZXJhdG9yLnJldHVybigpXG4gICAgICBhd2FpdCB2YWx1ZVxuICAgIH1cbiAgfVxuICBhc3luYyBmdW5jdGlvbiBuZXh0KCkge1xuICAgIGZvciAoOzspIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgdmFsdWUsIGRvbmUgfSA9IGlzQXN5bmMgPyBhd2FpdCBpdGVyYXRvci5uZXh0KCkgOiBpdGVyYXRvci5uZXh0KClcbiAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICByZWFkYWJsZS5wdXNoKG51bGwpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgcmVzID0gdmFsdWUgJiYgdHlwZW9mIHZhbHVlLnRoZW4gPT09ICdmdW5jdGlvbicgPyBhd2FpdCB2YWx1ZSA6IHZhbHVlXG4gICAgICAgICAgaWYgKHJlcyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmVhZGluZyA9IGZhbHNlXG4gICAgICAgICAgICB0aHJvdyBuZXcgRVJSX1NUUkVBTV9OVUxMX1ZBTFVFUygpXG4gICAgICAgICAgfSBlbHNlIGlmIChyZWFkYWJsZS5wdXNoKHJlcykpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlYWRpbmcgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHJlYWRhYmxlLmRlc3Ryb3koZXJyKVxuICAgICAgfVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlYWRhYmxlXG59XG5tb2R1bGUuZXhwb3J0cyA9IGZyb21cbiIsCiAgICAiLyogcmVwbGFjZW1lbnQgc3RhcnQgKi9cblxuY29uc3QgcHJvY2VzcyA9IHJlcXVpcmUoJ3Byb2Nlc3MvJylcblxuLyogcmVwbGFjZW1lbnQgZW5kICovXG4vLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuOygndXNlIHN0cmljdCcpXG5jb25zdCB7XG4gIEFycmF5UHJvdG90eXBlSW5kZXhPZixcbiAgTnVtYmVySXNJbnRlZ2VyLFxuICBOdW1iZXJJc05hTixcbiAgTnVtYmVyUGFyc2VJbnQsXG4gIE9iamVjdERlZmluZVByb3BlcnRpZXMsXG4gIE9iamVjdEtleXMsXG4gIE9iamVjdFNldFByb3RvdHlwZU9mLFxuICBQcm9taXNlLFxuICBTYWZlU2V0LFxuICBTeW1ib2xBc3luY0Rpc3Bvc2UsXG4gIFN5bWJvbEFzeW5jSXRlcmF0b3IsXG4gIFN5bWJvbFxufSA9IHJlcXVpcmUoJy4uLy4uL291cnMvcHJpbW9yZGlhbHMnKVxubW9kdWxlLmV4cG9ydHMgPSBSZWFkYWJsZVxuUmVhZGFibGUuUmVhZGFibGVTdGF0ZSA9IFJlYWRhYmxlU3RhdGVcbmNvbnN0IHsgRXZlbnRFbWl0dGVyOiBFRSB9ID0gcmVxdWlyZSgnZXZlbnRzJylcbmNvbnN0IHsgU3RyZWFtLCBwcmVwZW5kTGlzdGVuZXIgfSA9IHJlcXVpcmUoJy4vbGVnYWN5JylcbmNvbnN0IHsgQnVmZmVyIH0gPSByZXF1aXJlKCdidWZmZXInKVxuY29uc3QgeyBhZGRBYm9ydFNpZ25hbCB9ID0gcmVxdWlyZSgnLi9hZGQtYWJvcnQtc2lnbmFsJylcbmNvbnN0IGVvcyA9IHJlcXVpcmUoJy4vZW5kLW9mLXN0cmVhbScpXG5sZXQgZGVidWcgPSByZXF1aXJlKCcuLi8uLi9vdXJzL3V0aWwnKS5kZWJ1Z2xvZygnc3RyZWFtJywgKGZuKSA9PiB7XG4gIGRlYnVnID0gZm5cbn0pXG5jb25zdCBCdWZmZXJMaXN0ID0gcmVxdWlyZSgnLi9idWZmZXJfbGlzdCcpXG5jb25zdCBkZXN0cm95SW1wbCA9IHJlcXVpcmUoJy4vZGVzdHJveScpXG5jb25zdCB7IGdldEhpZ2hXYXRlck1hcmssIGdldERlZmF1bHRIaWdoV2F0ZXJNYXJrIH0gPSByZXF1aXJlKCcuL3N0YXRlJylcbmNvbnN0IHtcbiAgYWdncmVnYXRlVHdvRXJyb3JzLFxuICBjb2Rlczoge1xuICAgIEVSUl9JTlZBTElEX0FSR19UWVBFLFxuICAgIEVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVELFxuICAgIEVSUl9PVVRfT0ZfUkFOR0UsXG4gICAgRVJSX1NUUkVBTV9QVVNIX0FGVEVSX0VPRixcbiAgICBFUlJfU1RSRUFNX1VOU0hJRlRfQUZURVJfRU5EX0VWRU5UXG4gIH0sXG4gIEFib3J0RXJyb3Jcbn0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL2Vycm9ycycpXG5jb25zdCB7IHZhbGlkYXRlT2JqZWN0IH0gPSByZXF1aXJlKCcuLi92YWxpZGF0b3JzJylcbmNvbnN0IGtQYXVzZWQgPSBTeW1ib2woJ2tQYXVzZWQnKVxuY29uc3QgeyBTdHJpbmdEZWNvZGVyIH0gPSByZXF1aXJlKCdzdHJpbmdfZGVjb2RlcicpXG5jb25zdCBmcm9tID0gcmVxdWlyZSgnLi9mcm9tJylcbk9iamVjdFNldFByb3RvdHlwZU9mKFJlYWRhYmxlLnByb3RvdHlwZSwgU3RyZWFtLnByb3RvdHlwZSlcbk9iamVjdFNldFByb3RvdHlwZU9mKFJlYWRhYmxlLCBTdHJlYW0pXG5jb25zdCBub3AgPSAoKSA9PiB7fVxuY29uc3QgeyBlcnJvck9yRGVzdHJveSB9ID0gZGVzdHJveUltcGxcbmNvbnN0IGtPYmplY3RNb2RlID0gMSA8PCAwXG5jb25zdCBrRW5kZWQgPSAxIDw8IDFcbmNvbnN0IGtFbmRFbWl0dGVkID0gMSA8PCAyXG5jb25zdCBrUmVhZGluZyA9IDEgPDwgM1xuY29uc3Qga0NvbnN0cnVjdGVkID0gMSA8PCA0XG5jb25zdCBrU3luYyA9IDEgPDwgNVxuY29uc3Qga05lZWRSZWFkYWJsZSA9IDEgPDwgNlxuY29uc3Qga0VtaXR0ZWRSZWFkYWJsZSA9IDEgPDwgN1xuY29uc3Qga1JlYWRhYmxlTGlzdGVuaW5nID0gMSA8PCA4XG5jb25zdCBrUmVzdW1lU2NoZWR1bGVkID0gMSA8PCA5XG5jb25zdCBrRXJyb3JFbWl0dGVkID0gMSA8PCAxMFxuY29uc3Qga0VtaXRDbG9zZSA9IDEgPDwgMTFcbmNvbnN0IGtBdXRvRGVzdHJveSA9IDEgPDwgMTJcbmNvbnN0IGtEZXN0cm95ZWQgPSAxIDw8IDEzXG5jb25zdCBrQ2xvc2VkID0gMSA8PCAxNFxuY29uc3Qga0Nsb3NlRW1pdHRlZCA9IDEgPDwgMTVcbmNvbnN0IGtNdWx0aUF3YWl0RHJhaW4gPSAxIDw8IDE2XG5jb25zdCBrUmVhZGluZ01vcmUgPSAxIDw8IDE3XG5jb25zdCBrRGF0YUVtaXR0ZWQgPSAxIDw8IDE4XG5cbi8vIFRPRE8oYmVuamFtaW5ncikgaXQgaXMgbGlrZWx5IHNsb3dlciB0byBkbyBpdCB0aGlzIHdheSB0aGFuIHdpdGggZnJlZSBmdW5jdGlvbnNcbmZ1bmN0aW9uIG1ha2VCaXRNYXBEZXNjcmlwdG9yKGJpdCkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiAodGhpcy5zdGF0ZSAmIGJpdCkgIT09IDBcbiAgICB9LFxuICAgIHNldCh2YWx1ZSkge1xuICAgICAgaWYgKHZhbHVlKSB0aGlzLnN0YXRlIHw9IGJpdFxuICAgICAgZWxzZSB0aGlzLnN0YXRlICY9IH5iaXRcbiAgICB9XG4gIH1cbn1cbk9iamVjdERlZmluZVByb3BlcnRpZXMoUmVhZGFibGVTdGF0ZS5wcm90b3R5cGUsIHtcbiAgb2JqZWN0TW9kZTogbWFrZUJpdE1hcERlc2NyaXB0b3Ioa09iamVjdE1vZGUpLFxuICBlbmRlZDogbWFrZUJpdE1hcERlc2NyaXB0b3Ioa0VuZGVkKSxcbiAgZW5kRW1pdHRlZDogbWFrZUJpdE1hcERlc2NyaXB0b3Ioa0VuZEVtaXR0ZWQpLFxuICByZWFkaW5nOiBtYWtlQml0TWFwRGVzY3JpcHRvcihrUmVhZGluZyksXG4gIC8vIFN0cmVhbSBpcyBzdGlsbCBiZWluZyBjb25zdHJ1Y3RlZCBhbmQgY2Fubm90IGJlXG4gIC8vIGRlc3Ryb3llZCB1bnRpbCBjb25zdHJ1Y3Rpb24gZmluaXNoZWQgb3IgZmFpbGVkLlxuICAvLyBBc3luYyBjb25zdHJ1Y3Rpb24gaXMgb3B0IGluLCB0aGVyZWZvcmUgd2Ugc3RhcnQgYXNcbiAgLy8gY29uc3RydWN0ZWQuXG4gIGNvbnN0cnVjdGVkOiBtYWtlQml0TWFwRGVzY3JpcHRvcihrQ29uc3RydWN0ZWQpLFxuICAvLyBBIGZsYWcgdG8gYmUgYWJsZSB0byB0ZWxsIGlmIHRoZSBldmVudCAncmVhZGFibGUnLydkYXRhJyBpcyBlbWl0dGVkXG4gIC8vIGltbWVkaWF0ZWx5LCBvciBvbiBhIGxhdGVyIHRpY2suICBXZSBzZXQgdGhpcyB0byB0cnVlIGF0IGZpcnN0LCBiZWNhdXNlXG4gIC8vIGFueSBhY3Rpb25zIHRoYXQgc2hvdWxkbid0IGhhcHBlbiB1bnRpbCBcImxhdGVyXCIgc2hvdWxkIGdlbmVyYWxseSBhbHNvXG4gIC8vIG5vdCBoYXBwZW4gYmVmb3JlIHRoZSBmaXJzdCByZWFkIGNhbGwuXG4gIHN5bmM6IG1ha2VCaXRNYXBEZXNjcmlwdG9yKGtTeW5jKSxcbiAgLy8gV2hlbmV2ZXIgd2UgcmV0dXJuIG51bGwsIHRoZW4gd2Ugc2V0IGEgZmxhZyB0byBzYXlcbiAgLy8gdGhhdCB3ZSdyZSBhd2FpdGluZyBhICdyZWFkYWJsZScgZXZlbnQgZW1pc3Npb24uXG4gIG5lZWRSZWFkYWJsZTogbWFrZUJpdE1hcERlc2NyaXB0b3Ioa05lZWRSZWFkYWJsZSksXG4gIGVtaXR0ZWRSZWFkYWJsZTogbWFrZUJpdE1hcERlc2NyaXB0b3Ioa0VtaXR0ZWRSZWFkYWJsZSksXG4gIHJlYWRhYmxlTGlzdGVuaW5nOiBtYWtlQml0TWFwRGVzY3JpcHRvcihrUmVhZGFibGVMaXN0ZW5pbmcpLFxuICByZXN1bWVTY2hlZHVsZWQ6IG1ha2VCaXRNYXBEZXNjcmlwdG9yKGtSZXN1bWVTY2hlZHVsZWQpLFxuICAvLyBUcnVlIGlmIHRoZSBlcnJvciB3YXMgYWxyZWFkeSBlbWl0dGVkIGFuZCBzaG91bGQgbm90IGJlIHRocm93biBhZ2Fpbi5cbiAgZXJyb3JFbWl0dGVkOiBtYWtlQml0TWFwRGVzY3JpcHRvcihrRXJyb3JFbWl0dGVkKSxcbiAgZW1pdENsb3NlOiBtYWtlQml0TWFwRGVzY3JpcHRvcihrRW1pdENsb3NlKSxcbiAgYXV0b0Rlc3Ryb3k6IG1ha2VCaXRNYXBEZXNjcmlwdG9yKGtBdXRvRGVzdHJveSksXG4gIC8vIEhhcyBpdCBiZWVuIGRlc3Ryb3llZC5cbiAgZGVzdHJveWVkOiBtYWtlQml0TWFwRGVzY3JpcHRvcihrRGVzdHJveWVkKSxcbiAgLy8gSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHN0cmVhbSBoYXMgZmluaXNoZWQgZGVzdHJveWluZy5cbiAgY2xvc2VkOiBtYWtlQml0TWFwRGVzY3JpcHRvcihrQ2xvc2VkKSxcbiAgLy8gVHJ1ZSBpZiBjbG9zZSBoYXMgYmVlbiBlbWl0dGVkIG9yIHdvdWxkIGhhdmUgYmVlbiBlbWl0dGVkXG4gIC8vIGRlcGVuZGluZyBvbiBlbWl0Q2xvc2UuXG4gIGNsb3NlRW1pdHRlZDogbWFrZUJpdE1hcERlc2NyaXB0b3Ioa0Nsb3NlRW1pdHRlZCksXG4gIG11bHRpQXdhaXREcmFpbjogbWFrZUJpdE1hcERlc2NyaXB0b3Ioa011bHRpQXdhaXREcmFpbiksXG4gIC8vIElmIHRydWUsIGEgbWF5YmVSZWFkTW9yZSBoYXMgYmVlbiBzY2hlZHVsZWQuXG4gIHJlYWRpbmdNb3JlOiBtYWtlQml0TWFwRGVzY3JpcHRvcihrUmVhZGluZ01vcmUpLFxuICBkYXRhRW1pdHRlZDogbWFrZUJpdE1hcERlc2NyaXB0b3Ioa0RhdGFFbWl0dGVkKVxufSlcbmZ1bmN0aW9uIFJlYWRhYmxlU3RhdGUob3B0aW9ucywgc3RyZWFtLCBpc0R1cGxleCkge1xuICAvLyBEdXBsZXggc3RyZWFtcyBhcmUgYm90aCByZWFkYWJsZSBhbmQgd3JpdGFibGUsIGJ1dCBzaGFyZVxuICAvLyB0aGUgc2FtZSBvcHRpb25zIG9iamVjdC5cbiAgLy8gSG93ZXZlciwgc29tZSBjYXNlcyByZXF1aXJlIHNldHRpbmcgb3B0aW9ucyB0byBkaWZmZXJlbnRcbiAgLy8gdmFsdWVzIGZvciB0aGUgcmVhZGFibGUgYW5kIHRoZSB3cml0YWJsZSBzaWRlcyBvZiB0aGUgZHVwbGV4IHN0cmVhbS5cbiAgLy8gVGhlc2Ugb3B0aW9ucyBjYW4gYmUgcHJvdmlkZWQgc2VwYXJhdGVseSBhcyByZWFkYWJsZVhYWCBhbmQgd3JpdGFibGVYWFguXG4gIGlmICh0eXBlb2YgaXNEdXBsZXggIT09ICdib29sZWFuJykgaXNEdXBsZXggPSBzdHJlYW0gaW5zdGFuY2VvZiByZXF1aXJlKCcuL2R1cGxleCcpXG5cbiAgLy8gQml0IG1hcCBmaWVsZCB0byBzdG9yZSBSZWFkYWJsZVN0YXRlIG1vcmUgZWZmY2llbnRseSB3aXRoIDEgYml0IHBlciBmaWVsZFxuICAvLyBpbnN0ZWFkIG9mIGEgVjggc2xvdCBwZXIgZmllbGQuXG4gIHRoaXMuc3RhdGUgPSBrRW1pdENsb3NlIHwga0F1dG9EZXN0cm95IHwga0NvbnN0cnVjdGVkIHwga1N5bmNcbiAgLy8gT2JqZWN0IHN0cmVhbSBmbGFnLiBVc2VkIHRvIG1ha2UgcmVhZChuKSBpZ25vcmUgbiBhbmQgdG9cbiAgLy8gbWFrZSBhbGwgdGhlIGJ1ZmZlciBtZXJnaW5nIGFuZCBsZW5ndGggY2hlY2tzIGdvIGF3YXkuXG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMub2JqZWN0TW9kZSkgdGhpcy5zdGF0ZSB8PSBrT2JqZWN0TW9kZVxuICBpZiAoaXNEdXBsZXggJiYgb3B0aW9ucyAmJiBvcHRpb25zLnJlYWRhYmxlT2JqZWN0TW9kZSkgdGhpcy5zdGF0ZSB8PSBrT2JqZWN0TW9kZVxuXG4gIC8vIFRoZSBwb2ludCBhdCB3aGljaCBpdCBzdG9wcyBjYWxsaW5nIF9yZWFkKCkgdG8gZmlsbCB0aGUgYnVmZmVyXG4gIC8vIE5vdGU6IDAgaXMgYSB2YWxpZCB2YWx1ZSwgbWVhbnMgXCJkb24ndCBjYWxsIF9yZWFkIHByZWVtcHRpdmVseSBldmVyXCJcbiAgdGhpcy5oaWdoV2F0ZXJNYXJrID0gb3B0aW9uc1xuICAgID8gZ2V0SGlnaFdhdGVyTWFyayh0aGlzLCBvcHRpb25zLCAncmVhZGFibGVIaWdoV2F0ZXJNYXJrJywgaXNEdXBsZXgpXG4gICAgOiBnZXREZWZhdWx0SGlnaFdhdGVyTWFyayhmYWxzZSlcblxuICAvLyBBIGxpbmtlZCBsaXN0IGlzIHVzZWQgdG8gc3RvcmUgZGF0YSBjaHVua3MgaW5zdGVhZCBvZiBhbiBhcnJheSBiZWNhdXNlIHRoZVxuICAvLyBsaW5rZWQgbGlzdCBjYW4gcmVtb3ZlIGVsZW1lbnRzIGZyb20gdGhlIGJlZ2lubmluZyBmYXN0ZXIgdGhhblxuICAvLyBhcnJheS5zaGlmdCgpLlxuICB0aGlzLmJ1ZmZlciA9IG5ldyBCdWZmZXJMaXN0KClcbiAgdGhpcy5sZW5ndGggPSAwXG4gIHRoaXMucGlwZXMgPSBbXVxuICB0aGlzLmZsb3dpbmcgPSBudWxsXG4gIHRoaXNba1BhdXNlZF0gPSBudWxsXG5cbiAgLy8gU2hvdWxkIGNsb3NlIGJlIGVtaXR0ZWQgb24gZGVzdHJveS4gRGVmYXVsdHMgdG8gdHJ1ZS5cbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5lbWl0Q2xvc2UgPT09IGZhbHNlKSB0aGlzLnN0YXRlICY9IH5rRW1pdENsb3NlXG5cbiAgLy8gU2hvdWxkIC5kZXN0cm95KCkgYmUgY2FsbGVkIGFmdGVyICdlbmQnIChhbmQgcG90ZW50aWFsbHkgJ2ZpbmlzaCcpLlxuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmF1dG9EZXN0cm95ID09PSBmYWxzZSkgdGhpcy5zdGF0ZSAmPSB+a0F1dG9EZXN0cm95XG5cbiAgLy8gSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHN0cmVhbSBoYXMgZXJyb3JlZC4gV2hlbiB0cnVlIG5vIGZ1cnRoZXJcbiAgLy8gX3JlYWQgY2FsbHMsICdkYXRhJyBvciAncmVhZGFibGUnIGV2ZW50cyBzaG91bGQgb2NjdXIuIFRoaXMgaXMgbmVlZGVkXG4gIC8vIHNpbmNlIHdoZW4gYXV0b0Rlc3Ryb3kgaXMgZGlzYWJsZWQgd2UgbmVlZCBhIHdheSB0byB0ZWxsIHdoZXRoZXIgdGhlXG4gIC8vIHN0cmVhbSBoYXMgZmFpbGVkLlxuICB0aGlzLmVycm9yZWQgPSBudWxsXG5cbiAgLy8gQ3J5cHRvIGlzIGtpbmQgb2Ygb2xkIGFuZCBjcnVzdHkuICBIaXN0b3JpY2FsbHksIGl0cyBkZWZhdWx0IHN0cmluZ1xuICAvLyBlbmNvZGluZyBpcyAnYmluYXJ5JyBzbyB3ZSBoYXZlIHRvIG1ha2UgdGhpcyBjb25maWd1cmFibGUuXG4gIC8vIEV2ZXJ5dGhpbmcgZWxzZSBpbiB0aGUgdW5pdmVyc2UgdXNlcyAndXRmOCcsIHRob3VnaC5cbiAgdGhpcy5kZWZhdWx0RW5jb2RpbmcgPSAob3B0aW9ucyAmJiBvcHRpb25zLmRlZmF1bHRFbmNvZGluZykgfHwgJ3V0ZjgnXG5cbiAgLy8gUmVmIHRoZSBwaXBlZCBkZXN0IHdoaWNoIHdlIG5lZWQgYSBkcmFpbiBldmVudCBvbiBpdFxuICAvLyB0eXBlOiBudWxsIHwgV3JpdGFibGUgfCBTZXQ8V3JpdGFibGU+LlxuICB0aGlzLmF3YWl0RHJhaW5Xcml0ZXJzID0gbnVsbFxuICB0aGlzLmRlY29kZXIgPSBudWxsXG4gIHRoaXMuZW5jb2RpbmcgPSBudWxsXG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZW5jb2RpbmcpIHtcbiAgICB0aGlzLmRlY29kZXIgPSBuZXcgU3RyaW5nRGVjb2RlcihvcHRpb25zLmVuY29kaW5nKVxuICAgIHRoaXMuZW5jb2RpbmcgPSBvcHRpb25zLmVuY29kaW5nXG4gIH1cbn1cbmZ1bmN0aW9uIFJlYWRhYmxlKG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlYWRhYmxlKSkgcmV0dXJuIG5ldyBSZWFkYWJsZShvcHRpb25zKVxuXG4gIC8vIENoZWNraW5nIGZvciBhIFN0cmVhbS5EdXBsZXggaW5zdGFuY2UgaXMgZmFzdGVyIGhlcmUgaW5zdGVhZCBvZiBpbnNpZGVcbiAgLy8gdGhlIFJlYWRhYmxlU3RhdGUgY29uc3RydWN0b3IsIGF0IGxlYXN0IHdpdGggVjggNi41LlxuICBjb25zdCBpc0R1cGxleCA9IHRoaXMgaW5zdGFuY2VvZiByZXF1aXJlKCcuL2R1cGxleCcpXG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUgPSBuZXcgUmVhZGFibGVTdGF0ZShvcHRpb25zLCB0aGlzLCBpc0R1cGxleClcbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMucmVhZCA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fcmVhZCA9IG9wdGlvbnMucmVhZFxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5kZXN0cm95ID09PSAnZnVuY3Rpb24nKSB0aGlzLl9kZXN0cm95ID0gb3B0aW9ucy5kZXN0cm95XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmNvbnN0cnVjdCA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fY29uc3RydWN0ID0gb3B0aW9ucy5jb25zdHJ1Y3RcbiAgICBpZiAob3B0aW9ucy5zaWduYWwgJiYgIWlzRHVwbGV4KSBhZGRBYm9ydFNpZ25hbChvcHRpb25zLnNpZ25hbCwgdGhpcylcbiAgfVxuICBTdHJlYW0uY2FsbCh0aGlzLCBvcHRpb25zKVxuICBkZXN0cm95SW1wbC5jb25zdHJ1Y3QodGhpcywgKCkgPT4ge1xuICAgIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlLm5lZWRSZWFkYWJsZSkge1xuICAgICAgbWF5YmVSZWFkTW9yZSh0aGlzLCB0aGlzLl9yZWFkYWJsZVN0YXRlKVxuICAgIH1cbiAgfSlcbn1cblJlYWRhYmxlLnByb3RvdHlwZS5kZXN0cm95ID0gZGVzdHJveUltcGwuZGVzdHJveVxuUmVhZGFibGUucHJvdG90eXBlLl91bmRlc3Ryb3kgPSBkZXN0cm95SW1wbC51bmRlc3Ryb3lcblJlYWRhYmxlLnByb3RvdHlwZS5fZGVzdHJveSA9IGZ1bmN0aW9uIChlcnIsIGNiKSB7XG4gIGNiKGVycilcbn1cblJlYWRhYmxlLnByb3RvdHlwZVtFRS5jYXB0dXJlUmVqZWN0aW9uU3ltYm9sXSA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgdGhpcy5kZXN0cm95KGVycilcbn1cblJlYWRhYmxlLnByb3RvdHlwZVtTeW1ib2xBc3luY0Rpc3Bvc2VdID0gZnVuY3Rpb24gKCkge1xuICBsZXQgZXJyb3JcbiAgaWYgKCF0aGlzLmRlc3Ryb3llZCkge1xuICAgIGVycm9yID0gdGhpcy5yZWFkYWJsZUVuZGVkID8gbnVsbCA6IG5ldyBBYm9ydEVycm9yKClcbiAgICB0aGlzLmRlc3Ryb3koZXJyb3IpXG4gIH1cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IGVvcyh0aGlzLCAoZXJyKSA9PiAoZXJyICYmIGVyciAhPT0gZXJyb3IgPyByZWplY3QoZXJyKSA6IHJlc29sdmUobnVsbCkpKSlcbn1cblxuLy8gTWFudWFsbHkgc2hvdmUgc29tZXRoaW5nIGludG8gdGhlIHJlYWQoKSBidWZmZXIuXG4vLyBUaGlzIHJldHVybnMgdHJ1ZSBpZiB0aGUgaGlnaFdhdGVyTWFyayBoYXMgbm90IGJlZW4gaGl0IHlldCxcbi8vIHNpbWlsYXIgdG8gaG93IFdyaXRhYmxlLndyaXRlKCkgcmV0dXJucyB0cnVlIGlmIHlvdSBzaG91bGRcbi8vIHdyaXRlKCkgc29tZSBtb3JlLlxuUmVhZGFibGUucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nKSB7XG4gIHJldHVybiByZWFkYWJsZUFkZENodW5rKHRoaXMsIGNodW5rLCBlbmNvZGluZywgZmFsc2UpXG59XG5cbi8vIFVuc2hpZnQgc2hvdWxkICphbHdheXMqIGJlIHNvbWV0aGluZyBkaXJlY3RseSBvdXQgb2YgcmVhZCgpLlxuUmVhZGFibGUucHJvdG90eXBlLnVuc2hpZnQgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nKSB7XG4gIHJldHVybiByZWFkYWJsZUFkZENodW5rKHRoaXMsIGNodW5rLCBlbmNvZGluZywgdHJ1ZSlcbn1cbmZ1bmN0aW9uIHJlYWRhYmxlQWRkQ2h1bmsoc3RyZWFtLCBjaHVuaywgZW5jb2RpbmcsIGFkZFRvRnJvbnQpIHtcbiAgZGVidWcoJ3JlYWRhYmxlQWRkQ2h1bmsnLCBjaHVuaylcbiAgY29uc3Qgc3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGVcbiAgbGV0IGVyclxuICBpZiAoKHN0YXRlLnN0YXRlICYga09iamVjdE1vZGUpID09PSAwKSB7XG4gICAgaWYgKHR5cGVvZiBjaHVuayA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gZW5jb2RpbmcgfHwgc3RhdGUuZGVmYXVsdEVuY29kaW5nXG4gICAgICBpZiAoc3RhdGUuZW5jb2RpbmcgIT09IGVuY29kaW5nKSB7XG4gICAgICAgIGlmIChhZGRUb0Zyb250ICYmIHN0YXRlLmVuY29kaW5nKSB7XG4gICAgICAgICAgLy8gV2hlbiB1bnNoaWZ0aW5nLCBpZiBzdGF0ZS5lbmNvZGluZyBpcyBzZXQsIHdlIGhhdmUgdG8gc2F2ZVxuICAgICAgICAgIC8vIHRoZSBzdHJpbmcgaW4gdGhlIEJ1ZmZlckxpc3Qgd2l0aCB0aGUgc3RhdGUgZW5jb2RpbmcuXG4gICAgICAgICAgY2h1bmsgPSBCdWZmZXIuZnJvbShjaHVuaywgZW5jb2RpbmcpLnRvU3RyaW5nKHN0YXRlLmVuY29kaW5nKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNodW5rID0gQnVmZmVyLmZyb20oY2h1bmssIGVuY29kaW5nKVxuICAgICAgICAgIGVuY29kaW5nID0gJydcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2h1bmsgaW5zdGFuY2VvZiBCdWZmZXIpIHtcbiAgICAgIGVuY29kaW5nID0gJydcbiAgICB9IGVsc2UgaWYgKFN0cmVhbS5faXNVaW50OEFycmF5KGNodW5rKSkge1xuICAgICAgY2h1bmsgPSBTdHJlYW0uX3VpbnQ4QXJyYXlUb0J1ZmZlcihjaHVuaylcbiAgICAgIGVuY29kaW5nID0gJydcbiAgICB9IGVsc2UgaWYgKGNodW5rICE9IG51bGwpIHtcbiAgICAgIGVyciA9IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRSgnY2h1bmsnLCBbJ3N0cmluZycsICdCdWZmZXInLCAnVWludDhBcnJheSddLCBjaHVuaylcbiAgICB9XG4gIH1cbiAgaWYgKGVycikge1xuICAgIGVycm9yT3JEZXN0cm95KHN0cmVhbSwgZXJyKVxuICB9IGVsc2UgaWYgKGNodW5rID09PSBudWxsKSB7XG4gICAgc3RhdGUuc3RhdGUgJj0gfmtSZWFkaW5nXG4gICAgb25Fb2ZDaHVuayhzdHJlYW0sIHN0YXRlKVxuICB9IGVsc2UgaWYgKChzdGF0ZS5zdGF0ZSAmIGtPYmplY3RNb2RlKSAhPT0gMCB8fCAoY2h1bmsgJiYgY2h1bmsubGVuZ3RoID4gMCkpIHtcbiAgICBpZiAoYWRkVG9Gcm9udCkge1xuICAgICAgaWYgKChzdGF0ZS5zdGF0ZSAmIGtFbmRFbWl0dGVkKSAhPT0gMCkgZXJyb3JPckRlc3Ryb3koc3RyZWFtLCBuZXcgRVJSX1NUUkVBTV9VTlNISUZUX0FGVEVSX0VORF9FVkVOVCgpKVxuICAgICAgZWxzZSBpZiAoc3RhdGUuZGVzdHJveWVkIHx8IHN0YXRlLmVycm9yZWQpIHJldHVybiBmYWxzZVxuICAgICAgZWxzZSBhZGRDaHVuayhzdHJlYW0sIHN0YXRlLCBjaHVuaywgdHJ1ZSlcbiAgICB9IGVsc2UgaWYgKHN0YXRlLmVuZGVkKSB7XG4gICAgICBlcnJvck9yRGVzdHJveShzdHJlYW0sIG5ldyBFUlJfU1RSRUFNX1BVU0hfQUZURVJfRU9GKCkpXG4gICAgfSBlbHNlIGlmIChzdGF0ZS5kZXN0cm95ZWQgfHwgc3RhdGUuZXJyb3JlZCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLnN0YXRlICY9IH5rUmVhZGluZ1xuICAgICAgaWYgKHN0YXRlLmRlY29kZXIgJiYgIWVuY29kaW5nKSB7XG4gICAgICAgIGNodW5rID0gc3RhdGUuZGVjb2Rlci53cml0ZShjaHVuaylcbiAgICAgICAgaWYgKHN0YXRlLm9iamVjdE1vZGUgfHwgY2h1bmsubGVuZ3RoICE9PSAwKSBhZGRDaHVuayhzdHJlYW0sIHN0YXRlLCBjaHVuaywgZmFsc2UpXG4gICAgICAgIGVsc2UgbWF5YmVSZWFkTW9yZShzdHJlYW0sIHN0YXRlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWRkQ2h1bmsoc3RyZWFtLCBzdGF0ZSwgY2h1bmssIGZhbHNlKVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmICghYWRkVG9Gcm9udCkge1xuICAgIHN0YXRlLnN0YXRlICY9IH5rUmVhZGluZ1xuICAgIG1heWJlUmVhZE1vcmUoc3RyZWFtLCBzdGF0ZSlcbiAgfVxuXG4gIC8vIFdlIGNhbiBwdXNoIG1vcmUgZGF0YSBpZiB3ZSBhcmUgYmVsb3cgdGhlIGhpZ2hXYXRlck1hcmsuXG4gIC8vIEFsc28sIGlmIHdlIGhhdmUgbm8gZGF0YSB5ZXQsIHdlIGNhbiBzdGFuZCBzb21lIG1vcmUgYnl0ZXMuXG4gIC8vIFRoaXMgaXMgdG8gd29yayBhcm91bmQgY2FzZXMgd2hlcmUgaHdtPTAsIHN1Y2ggYXMgdGhlIHJlcGwuXG4gIHJldHVybiAhc3RhdGUuZW5kZWQgJiYgKHN0YXRlLmxlbmd0aCA8IHN0YXRlLmhpZ2hXYXRlck1hcmsgfHwgc3RhdGUubGVuZ3RoID09PSAwKVxufVxuZnVuY3Rpb24gYWRkQ2h1bmsoc3RyZWFtLCBzdGF0ZSwgY2h1bmssIGFkZFRvRnJvbnQpIHtcbiAgaWYgKHN0YXRlLmZsb3dpbmcgJiYgc3RhdGUubGVuZ3RoID09PSAwICYmICFzdGF0ZS5zeW5jICYmIHN0cmVhbS5saXN0ZW5lckNvdW50KCdkYXRhJykgPiAwKSB7XG4gICAgLy8gVXNlIHRoZSBndWFyZCB0byBhdm9pZCBjcmVhdGluZyBgU2V0KClgIHJlcGVhdGVkbHlcbiAgICAvLyB3aGVuIHdlIGhhdmUgbXVsdGlwbGUgcGlwZXMuXG4gICAgaWYgKChzdGF0ZS5zdGF0ZSAmIGtNdWx0aUF3YWl0RHJhaW4pICE9PSAwKSB7XG4gICAgICBzdGF0ZS5hd2FpdERyYWluV3JpdGVycy5jbGVhcigpXG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLmF3YWl0RHJhaW5Xcml0ZXJzID0gbnVsbFxuICAgIH1cbiAgICBzdGF0ZS5kYXRhRW1pdHRlZCA9IHRydWVcbiAgICBzdHJlYW0uZW1pdCgnZGF0YScsIGNodW5rKVxuICB9IGVsc2Uge1xuICAgIC8vIFVwZGF0ZSB0aGUgYnVmZmVyIGluZm8uXG4gICAgc3RhdGUubGVuZ3RoICs9IHN0YXRlLm9iamVjdE1vZGUgPyAxIDogY2h1bmsubGVuZ3RoXG4gICAgaWYgKGFkZFRvRnJvbnQpIHN0YXRlLmJ1ZmZlci51bnNoaWZ0KGNodW5rKVxuICAgIGVsc2Ugc3RhdGUuYnVmZmVyLnB1c2goY2h1bmspXG4gICAgaWYgKChzdGF0ZS5zdGF0ZSAmIGtOZWVkUmVhZGFibGUpICE9PSAwKSBlbWl0UmVhZGFibGUoc3RyZWFtKVxuICB9XG4gIG1heWJlUmVhZE1vcmUoc3RyZWFtLCBzdGF0ZSlcbn1cblJlYWRhYmxlLnByb3RvdHlwZS5pc1BhdXNlZCA9IGZ1bmN0aW9uICgpIHtcbiAgY29uc3Qgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlXG4gIHJldHVybiBzdGF0ZVtrUGF1c2VkXSA9PT0gdHJ1ZSB8fCBzdGF0ZS5mbG93aW5nID09PSBmYWxzZVxufVxuXG4vLyBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eS5cblJlYWRhYmxlLnByb3RvdHlwZS5zZXRFbmNvZGluZyA9IGZ1bmN0aW9uIChlbmMpIHtcbiAgY29uc3QgZGVjb2RlciA9IG5ldyBTdHJpbmdEZWNvZGVyKGVuYylcbiAgdGhpcy5fcmVhZGFibGVTdGF0ZS5kZWNvZGVyID0gZGVjb2RlclxuICAvLyBJZiBzZXRFbmNvZGluZyhudWxsKSwgZGVjb2Rlci5lbmNvZGluZyBlcXVhbHMgdXRmOC5cbiAgdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmNvZGluZyA9IHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2Rlci5lbmNvZGluZ1xuICBjb25zdCBidWZmZXIgPSB0aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlclxuICAvLyBJdGVyYXRlIG92ZXIgY3VycmVudCBidWZmZXIgdG8gY29udmVydCBhbHJlYWR5IHN0b3JlZCBCdWZmZXJzOlxuICBsZXQgY29udGVudCA9ICcnXG4gIGZvciAoY29uc3QgZGF0YSBvZiBidWZmZXIpIHtcbiAgICBjb250ZW50ICs9IGRlY29kZXIud3JpdGUoZGF0YSlcbiAgfVxuICBidWZmZXIuY2xlYXIoKVxuICBpZiAoY29udGVudCAhPT0gJycpIGJ1ZmZlci5wdXNoKGNvbnRlbnQpXG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUubGVuZ3RoID0gY29udGVudC5sZW5ndGhcbiAgcmV0dXJuIHRoaXNcbn1cblxuLy8gRG9uJ3QgcmFpc2UgdGhlIGh3bSA+IDFHQi5cbmNvbnN0IE1BWF9IV00gPSAweDQwMDAwMDAwXG5mdW5jdGlvbiBjb21wdXRlTmV3SGlnaFdhdGVyTWFyayhuKSB7XG4gIGlmIChuID4gTUFYX0hXTSkge1xuICAgIHRocm93IG5ldyBFUlJfT1VUX09GX1JBTkdFKCdzaXplJywgJzw9IDFHaUInLCBuKVxuICB9IGVsc2Uge1xuICAgIC8vIEdldCB0aGUgbmV4dCBoaWdoZXN0IHBvd2VyIG9mIDIgdG8gcHJldmVudCBpbmNyZWFzaW5nIGh3bSBleGNlc3NpdmVseSBpblxuICAgIC8vIHRpbnkgYW1vdW50cy5cbiAgICBuLS1cbiAgICBuIHw9IG4gPj4+IDFcbiAgICBuIHw9IG4gPj4+IDJcbiAgICBuIHw9IG4gPj4+IDRcbiAgICBuIHw9IG4gPj4+IDhcbiAgICBuIHw9IG4gPj4+IDE2XG4gICAgbisrXG4gIH1cbiAgcmV0dXJuIG5cbn1cblxuLy8gVGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBiZSBpbmxpbmFibGUsIHNvIHBsZWFzZSB0YWtlIGNhcmUgd2hlbiBtYWtpbmdcbi8vIGNoYW5nZXMgdG8gdGhlIGZ1bmN0aW9uIGJvZHkuXG5mdW5jdGlvbiBob3dNdWNoVG9SZWFkKG4sIHN0YXRlKSB7XG4gIGlmIChuIDw9IDAgfHwgKHN0YXRlLmxlbmd0aCA9PT0gMCAmJiBzdGF0ZS5lbmRlZCkpIHJldHVybiAwXG4gIGlmICgoc3RhdGUuc3RhdGUgJiBrT2JqZWN0TW9kZSkgIT09IDApIHJldHVybiAxXG4gIGlmIChOdW1iZXJJc05hTihuKSkge1xuICAgIC8vIE9ubHkgZmxvdyBvbmUgYnVmZmVyIGF0IGEgdGltZS5cbiAgICBpZiAoc3RhdGUuZmxvd2luZyAmJiBzdGF0ZS5sZW5ndGgpIHJldHVybiBzdGF0ZS5idWZmZXIuZmlyc3QoKS5sZW5ndGhcbiAgICByZXR1cm4gc3RhdGUubGVuZ3RoXG4gIH1cbiAgaWYgKG4gPD0gc3RhdGUubGVuZ3RoKSByZXR1cm4gblxuICByZXR1cm4gc3RhdGUuZW5kZWQgPyBzdGF0ZS5sZW5ndGggOiAwXG59XG5cbi8vIFlvdSBjYW4gb3ZlcnJpZGUgZWl0aGVyIHRoaXMgbWV0aG9kLCBvciB0aGUgYXN5bmMgX3JlYWQobikgYmVsb3cuXG5SZWFkYWJsZS5wcm90b3R5cGUucmVhZCA9IGZ1bmN0aW9uIChuKSB7XG4gIGRlYnVnKCdyZWFkJywgbilcbiAgLy8gU2FtZSBhcyBwYXJzZUludCh1bmRlZmluZWQsIDEwKSwgaG93ZXZlciBWOCA3LjMgcGVyZm9ybWFuY2UgcmVncmVzc2VkXG4gIC8vIGluIHRoaXMgc2NlbmFyaW8sIHNvIHdlIGFyZSBkb2luZyBpdCBtYW51YWxseS5cbiAgaWYgKG4gPT09IHVuZGVmaW5lZCkge1xuICAgIG4gPSBOYU5cbiAgfSBlbHNlIGlmICghTnVtYmVySXNJbnRlZ2VyKG4pKSB7XG4gICAgbiA9IE51bWJlclBhcnNlSW50KG4sIDEwKVxuICB9XG4gIGNvbnN0IHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZVxuICBjb25zdCBuT3JpZyA9IG5cblxuICAvLyBJZiB3ZSdyZSBhc2tpbmcgZm9yIG1vcmUgdGhhbiB0aGUgY3VycmVudCBod20sIHRoZW4gcmFpc2UgdGhlIGh3bS5cbiAgaWYgKG4gPiBzdGF0ZS5oaWdoV2F0ZXJNYXJrKSBzdGF0ZS5oaWdoV2F0ZXJNYXJrID0gY29tcHV0ZU5ld0hpZ2hXYXRlck1hcmsobilcbiAgaWYgKG4gIT09IDApIHN0YXRlLnN0YXRlICY9IH5rRW1pdHRlZFJlYWRhYmxlXG5cbiAgLy8gSWYgd2UncmUgZG9pbmcgcmVhZCgwKSB0byB0cmlnZ2VyIGEgcmVhZGFibGUgZXZlbnQsIGJ1dCB3ZVxuICAvLyBhbHJlYWR5IGhhdmUgYSBidW5jaCBvZiBkYXRhIGluIHRoZSBidWZmZXIsIHRoZW4ganVzdCB0cmlnZ2VyXG4gIC8vIHRoZSAncmVhZGFibGUnIGV2ZW50IGFuZCBtb3ZlIG9uLlxuICBpZiAoXG4gICAgbiA9PT0gMCAmJlxuICAgIHN0YXRlLm5lZWRSZWFkYWJsZSAmJlxuICAgICgoc3RhdGUuaGlnaFdhdGVyTWFyayAhPT0gMCA/IHN0YXRlLmxlbmd0aCA+PSBzdGF0ZS5oaWdoV2F0ZXJNYXJrIDogc3RhdGUubGVuZ3RoID4gMCkgfHwgc3RhdGUuZW5kZWQpXG4gICkge1xuICAgIGRlYnVnKCdyZWFkOiBlbWl0UmVhZGFibGUnLCBzdGF0ZS5sZW5ndGgsIHN0YXRlLmVuZGVkKVxuICAgIGlmIChzdGF0ZS5sZW5ndGggPT09IDAgJiYgc3RhdGUuZW5kZWQpIGVuZFJlYWRhYmxlKHRoaXMpXG4gICAgZWxzZSBlbWl0UmVhZGFibGUodGhpcylcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIG4gPSBob3dNdWNoVG9SZWFkKG4sIHN0YXRlKVxuXG4gIC8vIElmIHdlJ3ZlIGVuZGVkLCBhbmQgd2UncmUgbm93IGNsZWFyLCB0aGVuIGZpbmlzaCBpdCB1cC5cbiAgaWYgKG4gPT09IDAgJiYgc3RhdGUuZW5kZWQpIHtcbiAgICBpZiAoc3RhdGUubGVuZ3RoID09PSAwKSBlbmRSZWFkYWJsZSh0aGlzKVxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvLyBBbGwgdGhlIGFjdHVhbCBjaHVuayBnZW5lcmF0aW9uIGxvZ2ljIG5lZWRzIHRvIGJlXG4gIC8vICpiZWxvdyogdGhlIGNhbGwgdG8gX3JlYWQuICBUaGUgcmVhc29uIGlzIHRoYXQgaW4gY2VydGFpblxuICAvLyBzeW50aGV0aWMgc3RyZWFtIGNhc2VzLCBzdWNoIGFzIHBhc3N0aHJvdWdoIHN0cmVhbXMsIF9yZWFkXG4gIC8vIG1heSBiZSBhIGNvbXBsZXRlbHkgc3luY2hyb25vdXMgb3BlcmF0aW9uIHdoaWNoIG1heSBjaGFuZ2VcbiAgLy8gdGhlIHN0YXRlIG9mIHRoZSByZWFkIGJ1ZmZlciwgcHJvdmlkaW5nIGVub3VnaCBkYXRhIHdoZW5cbiAgLy8gYmVmb3JlIHRoZXJlIHdhcyAqbm90KiBlbm91Z2guXG4gIC8vXG4gIC8vIFNvLCB0aGUgc3RlcHMgYXJlOlxuICAvLyAxLiBGaWd1cmUgb3V0IHdoYXQgdGhlIHN0YXRlIG9mIHRoaW5ncyB3aWxsIGJlIGFmdGVyIHdlIGRvXG4gIC8vIGEgcmVhZCBmcm9tIHRoZSBidWZmZXIuXG4gIC8vXG4gIC8vIDIuIElmIHRoYXQgcmVzdWx0aW5nIHN0YXRlIHdpbGwgdHJpZ2dlciBhIF9yZWFkLCB0aGVuIGNhbGwgX3JlYWQuXG4gIC8vIE5vdGUgdGhhdCB0aGlzIG1heSBiZSBhc3luY2hyb25vdXMsIG9yIHN5bmNocm9ub3VzLiAgWWVzLCBpdCBpc1xuICAvLyBkZWVwbHkgdWdseSB0byB3cml0ZSBBUElzIHRoaXMgd2F5LCBidXQgdGhhdCBzdGlsbCBkb2Vzbid0IG1lYW5cbiAgLy8gdGhhdCB0aGUgUmVhZGFibGUgY2xhc3Mgc2hvdWxkIGJlaGF2ZSBpbXByb3Blcmx5LCBhcyBzdHJlYW1zIGFyZVxuICAvLyBkZXNpZ25lZCB0byBiZSBzeW5jL2FzeW5jIGFnbm9zdGljLlxuICAvLyBUYWtlIG5vdGUgaWYgdGhlIF9yZWFkIGNhbGwgaXMgc3luYyBvciBhc3luYyAoaWUsIGlmIHRoZSByZWFkIGNhbGxcbiAgLy8gaGFzIHJldHVybmVkIHlldCksIHNvIHRoYXQgd2Uga25vdyB3aGV0aGVyIG9yIG5vdCBpdCdzIHNhZmUgdG8gZW1pdFxuICAvLyAncmVhZGFibGUnIGV0Yy5cbiAgLy9cbiAgLy8gMy4gQWN0dWFsbHkgcHVsbCB0aGUgcmVxdWVzdGVkIGNodW5rcyBvdXQgb2YgdGhlIGJ1ZmZlciBhbmQgcmV0dXJuLlxuXG4gIC8vIGlmIHdlIG5lZWQgYSByZWFkYWJsZSBldmVudCwgdGhlbiB3ZSBuZWVkIHRvIGRvIHNvbWUgcmVhZGluZy5cbiAgbGV0IGRvUmVhZCA9IChzdGF0ZS5zdGF0ZSAmIGtOZWVkUmVhZGFibGUpICE9PSAwXG4gIGRlYnVnKCduZWVkIHJlYWRhYmxlJywgZG9SZWFkKVxuXG4gIC8vIElmIHdlIGN1cnJlbnRseSBoYXZlIGxlc3MgdGhhbiB0aGUgaGlnaFdhdGVyTWFyaywgdGhlbiBhbHNvIHJlYWQgc29tZS5cbiAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCB8fCBzdGF0ZS5sZW5ndGggLSBuIDwgc3RhdGUuaGlnaFdhdGVyTWFyaykge1xuICAgIGRvUmVhZCA9IHRydWVcbiAgICBkZWJ1ZygnbGVuZ3RoIGxlc3MgdGhhbiB3YXRlcm1hcmsnLCBkb1JlYWQpXG4gIH1cblxuICAvLyBIb3dldmVyLCBpZiB3ZSd2ZSBlbmRlZCwgdGhlbiB0aGVyZSdzIG5vIHBvaW50LCBpZiB3ZSdyZSBhbHJlYWR5XG4gIC8vIHJlYWRpbmcsIHRoZW4gaXQncyB1bm5lY2Vzc2FyeSwgaWYgd2UncmUgY29uc3RydWN0aW5nIHdlIGhhdmUgdG8gd2FpdCxcbiAgLy8gYW5kIGlmIHdlJ3JlIGRlc3Ryb3llZCBvciBlcnJvcmVkLCB0aGVuIGl0J3Mgbm90IGFsbG93ZWQsXG4gIGlmIChzdGF0ZS5lbmRlZCB8fCBzdGF0ZS5yZWFkaW5nIHx8IHN0YXRlLmRlc3Ryb3llZCB8fCBzdGF0ZS5lcnJvcmVkIHx8ICFzdGF0ZS5jb25zdHJ1Y3RlZCkge1xuICAgIGRvUmVhZCA9IGZhbHNlXG4gICAgZGVidWcoJ3JlYWRpbmcsIGVuZGVkIG9yIGNvbnN0cnVjdGluZycsIGRvUmVhZClcbiAgfSBlbHNlIGlmIChkb1JlYWQpIHtcbiAgICBkZWJ1ZygnZG8gcmVhZCcpXG4gICAgc3RhdGUuc3RhdGUgfD0ga1JlYWRpbmcgfCBrU3luY1xuICAgIC8vIElmIHRoZSBsZW5ndGggaXMgY3VycmVudGx5IHplcm8sIHRoZW4gd2UgKm5lZWQqIGEgcmVhZGFibGUgZXZlbnQuXG4gICAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCkgc3RhdGUuc3RhdGUgfD0ga05lZWRSZWFkYWJsZVxuXG4gICAgLy8gQ2FsbCBpbnRlcm5hbCByZWFkIG1ldGhvZFxuICAgIHRyeSB7XG4gICAgICB0aGlzLl9yZWFkKHN0YXRlLmhpZ2hXYXRlck1hcmspXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJvck9yRGVzdHJveSh0aGlzLCBlcnIpXG4gICAgfVxuICAgIHN0YXRlLnN0YXRlICY9IH5rU3luY1xuXG4gICAgLy8gSWYgX3JlYWQgcHVzaGVkIGRhdGEgc3luY2hyb25vdXNseSwgdGhlbiBgcmVhZGluZ2Agd2lsbCBiZSBmYWxzZSxcbiAgICAvLyBhbmQgd2UgbmVlZCB0byByZS1ldmFsdWF0ZSBob3cgbXVjaCBkYXRhIHdlIGNhbiByZXR1cm4gdG8gdGhlIHVzZXIuXG4gICAgaWYgKCFzdGF0ZS5yZWFkaW5nKSBuID0gaG93TXVjaFRvUmVhZChuT3JpZywgc3RhdGUpXG4gIH1cbiAgbGV0IHJldFxuICBpZiAobiA+IDApIHJldCA9IGZyb21MaXN0KG4sIHN0YXRlKVxuICBlbHNlIHJldCA9IG51bGxcbiAgaWYgKHJldCA9PT0gbnVsbCkge1xuICAgIHN0YXRlLm5lZWRSZWFkYWJsZSA9IHN0YXRlLmxlbmd0aCA8PSBzdGF0ZS5oaWdoV2F0ZXJNYXJrXG4gICAgbiA9IDBcbiAgfSBlbHNlIHtcbiAgICBzdGF0ZS5sZW5ndGggLT0gblxuICAgIGlmIChzdGF0ZS5tdWx0aUF3YWl0RHJhaW4pIHtcbiAgICAgIHN0YXRlLmF3YWl0RHJhaW5Xcml0ZXJzLmNsZWFyKClcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUuYXdhaXREcmFpbldyaXRlcnMgPSBudWxsXG4gICAgfVxuICB9XG4gIGlmIChzdGF0ZS5sZW5ndGggPT09IDApIHtcbiAgICAvLyBJZiB3ZSBoYXZlIG5vdGhpbmcgaW4gdGhlIGJ1ZmZlciwgdGhlbiB3ZSB3YW50IHRvIGtub3dcbiAgICAvLyBhcyBzb29uIGFzIHdlICpkbyogZ2V0IHNvbWV0aGluZyBpbnRvIHRoZSBidWZmZXIuXG4gICAgaWYgKCFzdGF0ZS5lbmRlZCkgc3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZVxuXG4gICAgLy8gSWYgd2UgdHJpZWQgdG8gcmVhZCgpIHBhc3QgdGhlIEVPRiwgdGhlbiBlbWl0IGVuZCBvbiB0aGUgbmV4dCB0aWNrLlxuICAgIGlmIChuT3JpZyAhPT0gbiAmJiBzdGF0ZS5lbmRlZCkgZW5kUmVhZGFibGUodGhpcylcbiAgfVxuICBpZiAocmV0ICE9PSBudWxsICYmICFzdGF0ZS5lcnJvckVtaXR0ZWQgJiYgIXN0YXRlLmNsb3NlRW1pdHRlZCkge1xuICAgIHN0YXRlLmRhdGFFbWl0dGVkID0gdHJ1ZVxuICAgIHRoaXMuZW1pdCgnZGF0YScsIHJldClcbiAgfVxuICByZXR1cm4gcmV0XG59XG5mdW5jdGlvbiBvbkVvZkNodW5rKHN0cmVhbSwgc3RhdGUpIHtcbiAgZGVidWcoJ29uRW9mQ2h1bmsnKVxuICBpZiAoc3RhdGUuZW5kZWQpIHJldHVyblxuICBpZiAoc3RhdGUuZGVjb2Rlcikge1xuICAgIGNvbnN0IGNodW5rID0gc3RhdGUuZGVjb2Rlci5lbmQoKVxuICAgIGlmIChjaHVuayAmJiBjaHVuay5sZW5ndGgpIHtcbiAgICAgIHN0YXRlLmJ1ZmZlci5wdXNoKGNodW5rKVxuICAgICAgc3RhdGUubGVuZ3RoICs9IHN0YXRlLm9iamVjdE1vZGUgPyAxIDogY2h1bmsubGVuZ3RoXG4gICAgfVxuICB9XG4gIHN0YXRlLmVuZGVkID0gdHJ1ZVxuICBpZiAoc3RhdGUuc3luYykge1xuICAgIC8vIElmIHdlIGFyZSBzeW5jLCB3YWl0IHVudGlsIG5leHQgdGljayB0byBlbWl0IHRoZSBkYXRhLlxuICAgIC8vIE90aGVyd2lzZSB3ZSByaXNrIGVtaXR0aW5nIGRhdGEgaW4gdGhlIGZsb3coKVxuICAgIC8vIHRoZSByZWFkYWJsZSBjb2RlIHRyaWdnZXJzIGR1cmluZyBhIHJlYWQoKSBjYWxsLlxuICAgIGVtaXRSZWFkYWJsZShzdHJlYW0pXG4gIH0gZWxzZSB7XG4gICAgLy8gRW1pdCAncmVhZGFibGUnIG5vdyB0byBtYWtlIHN1cmUgaXQgZ2V0cyBwaWNrZWQgdXAuXG4gICAgc3RhdGUubmVlZFJlYWRhYmxlID0gZmFsc2VcbiAgICBzdGF0ZS5lbWl0dGVkUmVhZGFibGUgPSB0cnVlXG4gICAgLy8gV2UgaGF2ZSB0byBlbWl0IHJlYWRhYmxlIG5vdyB0aGF0IHdlIGFyZSBFT0YuIE1vZHVsZXNcbiAgICAvLyBpbiB0aGUgZWNvc3lzdGVtIChlLmcuIGRpY2VyKSByZWx5IG9uIHRoaXMgZXZlbnQgYmVpbmcgc3luYy5cbiAgICBlbWl0UmVhZGFibGVfKHN0cmVhbSlcbiAgfVxufVxuXG4vLyBEb24ndCBlbWl0IHJlYWRhYmxlIHJpZ2h0IGF3YXkgaW4gc3luYyBtb2RlLCBiZWNhdXNlIHRoaXMgY2FuIHRyaWdnZXJcbi8vIGFub3RoZXIgcmVhZCgpIGNhbGwgPT4gc3RhY2sgb3ZlcmZsb3cuICBUaGlzIHdheSwgaXQgbWlnaHQgdHJpZ2dlclxuLy8gYSBuZXh0VGljayByZWN1cnNpb24gd2FybmluZywgYnV0IHRoYXQncyBub3Qgc28gYmFkLlxuZnVuY3Rpb24gZW1pdFJlYWRhYmxlKHN0cmVhbSkge1xuICBjb25zdCBzdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZVxuICBkZWJ1ZygnZW1pdFJlYWRhYmxlJywgc3RhdGUubmVlZFJlYWRhYmxlLCBzdGF0ZS5lbWl0dGVkUmVhZGFibGUpXG4gIHN0YXRlLm5lZWRSZWFkYWJsZSA9IGZhbHNlXG4gIGlmICghc3RhdGUuZW1pdHRlZFJlYWRhYmxlKSB7XG4gICAgZGVidWcoJ2VtaXRSZWFkYWJsZScsIHN0YXRlLmZsb3dpbmcpXG4gICAgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gdHJ1ZVxuICAgIHByb2Nlc3MubmV4dFRpY2soZW1pdFJlYWRhYmxlXywgc3RyZWFtKVxuICB9XG59XG5mdW5jdGlvbiBlbWl0UmVhZGFibGVfKHN0cmVhbSkge1xuICBjb25zdCBzdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZVxuICBkZWJ1ZygnZW1pdFJlYWRhYmxlXycsIHN0YXRlLmRlc3Ryb3llZCwgc3RhdGUubGVuZ3RoLCBzdGF0ZS5lbmRlZClcbiAgaWYgKCFzdGF0ZS5kZXN0cm95ZWQgJiYgIXN0YXRlLmVycm9yZWQgJiYgKHN0YXRlLmxlbmd0aCB8fCBzdGF0ZS5lbmRlZCkpIHtcbiAgICBzdHJlYW0uZW1pdCgncmVhZGFibGUnKVxuICAgIHN0YXRlLmVtaXR0ZWRSZWFkYWJsZSA9IGZhbHNlXG4gIH1cblxuICAvLyBUaGUgc3RyZWFtIG5lZWRzIGFub3RoZXIgcmVhZGFibGUgZXZlbnQgaWY6XG4gIC8vIDEuIEl0IGlzIG5vdCBmbG93aW5nLCBhcyB0aGUgZmxvdyBtZWNoYW5pc20gd2lsbCB0YWtlXG4gIC8vICAgIGNhcmUgb2YgaXQuXG4gIC8vIDIuIEl0IGlzIG5vdCBlbmRlZC5cbiAgLy8gMy4gSXQgaXMgYmVsb3cgdGhlIGhpZ2hXYXRlck1hcmssIHNvIHdlIGNhbiBzY2hlZHVsZVxuICAvLyAgICBhbm90aGVyIHJlYWRhYmxlIGxhdGVyLlxuICBzdGF0ZS5uZWVkUmVhZGFibGUgPSAhc3RhdGUuZmxvd2luZyAmJiAhc3RhdGUuZW5kZWQgJiYgc3RhdGUubGVuZ3RoIDw9IHN0YXRlLmhpZ2hXYXRlck1hcmtcbiAgZmxvdyhzdHJlYW0pXG59XG5cbi8vIEF0IHRoaXMgcG9pbnQsIHRoZSB1c2VyIGhhcyBwcmVzdW1hYmx5IHNlZW4gdGhlICdyZWFkYWJsZScgZXZlbnQsXG4vLyBhbmQgY2FsbGVkIHJlYWQoKSB0byBjb25zdW1lIHNvbWUgZGF0YS4gIHRoYXQgbWF5IGhhdmUgdHJpZ2dlcmVkXG4vLyBpbiB0dXJuIGFub3RoZXIgX3JlYWQobikgY2FsbCwgaW4gd2hpY2ggY2FzZSByZWFkaW5nID0gdHJ1ZSBpZlxuLy8gaXQncyBpbiBwcm9ncmVzcy5cbi8vIEhvd2V2ZXIsIGlmIHdlJ3JlIG5vdCBlbmRlZCwgb3IgcmVhZGluZywgYW5kIHRoZSBsZW5ndGggPCBod20sXG4vLyB0aGVuIGdvIGFoZWFkIGFuZCB0cnkgdG8gcmVhZCBzb21lIG1vcmUgcHJlZW1wdGl2ZWx5LlxuZnVuY3Rpb24gbWF5YmVSZWFkTW9yZShzdHJlYW0sIHN0YXRlKSB7XG4gIGlmICghc3RhdGUucmVhZGluZ01vcmUgJiYgc3RhdGUuY29uc3RydWN0ZWQpIHtcbiAgICBzdGF0ZS5yZWFkaW5nTW9yZSA9IHRydWVcbiAgICBwcm9jZXNzLm5leHRUaWNrKG1heWJlUmVhZE1vcmVfLCBzdHJlYW0sIHN0YXRlKVxuICB9XG59XG5mdW5jdGlvbiBtYXliZVJlYWRNb3JlXyhzdHJlYW0sIHN0YXRlKSB7XG4gIC8vIEF0dGVtcHQgdG8gcmVhZCBtb3JlIGRhdGEgaWYgd2Ugc2hvdWxkLlxuICAvL1xuICAvLyBUaGUgY29uZGl0aW9ucyBmb3IgcmVhZGluZyBtb3JlIGRhdGEgYXJlIChvbmUgb2YpOlxuICAvLyAtIE5vdCBlbm91Z2ggZGF0YSBidWZmZXJlZCAoc3RhdGUubGVuZ3RoIDwgc3RhdGUuaGlnaFdhdGVyTWFyaykuIFRoZSBsb29wXG4gIC8vICAgaXMgcmVzcG9uc2libGUgZm9yIGZpbGxpbmcgdGhlIGJ1ZmZlciB3aXRoIGVub3VnaCBkYXRhIGlmIHN1Y2ggZGF0YVxuICAvLyAgIGlzIGF2YWlsYWJsZS4gSWYgaGlnaFdhdGVyTWFyayBpcyAwIGFuZCB3ZSBhcmUgbm90IGluIHRoZSBmbG93aW5nIG1vZGVcbiAgLy8gICB3ZSBzaG91bGQgX25vdF8gYXR0ZW1wdCB0byBidWZmZXIgYW55IGV4dHJhIGRhdGEuIFdlJ2xsIGdldCBtb3JlIGRhdGFcbiAgLy8gICB3aGVuIHRoZSBzdHJlYW0gY29uc3VtZXIgY2FsbHMgcmVhZCgpIGluc3RlYWQuXG4gIC8vIC0gTm8gZGF0YSBpbiB0aGUgYnVmZmVyLCBhbmQgdGhlIHN0cmVhbSBpcyBpbiBmbG93aW5nIG1vZGUuIEluIHRoaXMgbW9kZVxuICAvLyAgIHRoZSBsb29wIGJlbG93IGlzIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyByZWFkKCkgaXMgY2FsbGVkLiBGYWlsaW5nIHRvXG4gIC8vICAgY2FsbCByZWFkIGhlcmUgd291bGQgYWJvcnQgdGhlIGZsb3cgYW5kIHRoZXJlJ3Mgbm8gb3RoZXIgbWVjaGFuaXNtIGZvclxuICAvLyAgIGNvbnRpbnVpbmcgdGhlIGZsb3cgaWYgdGhlIHN0cmVhbSBjb25zdW1lciBoYXMganVzdCBzdWJzY3JpYmVkIHRvIHRoZVxuICAvLyAgICdkYXRhJyBldmVudC5cbiAgLy9cbiAgLy8gSW4gYWRkaXRpb24gdG8gdGhlIGFib3ZlIGNvbmRpdGlvbnMgdG8ga2VlcCByZWFkaW5nIGRhdGEsIHRoZSBmb2xsb3dpbmdcbiAgLy8gY29uZGl0aW9ucyBwcmV2ZW50IHRoZSBkYXRhIGZyb20gYmVpbmcgcmVhZDpcbiAgLy8gLSBUaGUgc3RyZWFtIGhhcyBlbmRlZCAoc3RhdGUuZW5kZWQpLlxuICAvLyAtIFRoZXJlIGlzIGFscmVhZHkgYSBwZW5kaW5nICdyZWFkJyBvcGVyYXRpb24gKHN0YXRlLnJlYWRpbmcpLiBUaGlzIGlzIGFcbiAgLy8gICBjYXNlIHdoZXJlIHRoZSBzdHJlYW0gaGFzIGNhbGxlZCB0aGUgaW1wbGVtZW50YXRpb24gZGVmaW5lZCBfcmVhZCgpXG4gIC8vICAgbWV0aG9kLCBidXQgdGhleSBhcmUgcHJvY2Vzc2luZyB0aGUgY2FsbCBhc3luY2hyb25vdXNseSBhbmQgaGF2ZSBfbm90X1xuICAvLyAgIGNhbGxlZCBwdXNoKCkgd2l0aCBuZXcgZGF0YS4gSW4gdGhpcyBjYXNlIHdlIHNraXAgcGVyZm9ybWluZyBtb3JlXG4gIC8vICAgcmVhZCgpcy4gVGhlIGV4ZWN1dGlvbiBlbmRzIGluIHRoaXMgbWV0aG9kIGFnYWluIGFmdGVyIHRoZSBfcmVhZCgpIGVuZHNcbiAgLy8gICB1cCBjYWxsaW5nIHB1c2goKSB3aXRoIG1vcmUgZGF0YS5cbiAgd2hpbGUgKFxuICAgICFzdGF0ZS5yZWFkaW5nICYmXG4gICAgIXN0YXRlLmVuZGVkICYmXG4gICAgKHN0YXRlLmxlbmd0aCA8IHN0YXRlLmhpZ2hXYXRlck1hcmsgfHwgKHN0YXRlLmZsb3dpbmcgJiYgc3RhdGUubGVuZ3RoID09PSAwKSlcbiAgKSB7XG4gICAgY29uc3QgbGVuID0gc3RhdGUubGVuZ3RoXG4gICAgZGVidWcoJ21heWJlUmVhZE1vcmUgcmVhZCAwJylcbiAgICBzdHJlYW0ucmVhZCgwKVxuICAgIGlmIChsZW4gPT09IHN0YXRlLmxlbmd0aClcbiAgICAgIC8vIERpZG4ndCBnZXQgYW55IGRhdGEsIHN0b3Agc3Bpbm5pbmcuXG4gICAgICBicmVha1xuICB9XG4gIHN0YXRlLnJlYWRpbmdNb3JlID0gZmFsc2Vcbn1cblxuLy8gQWJzdHJhY3QgbWV0aG9kLiAgdG8gYmUgb3ZlcnJpZGRlbiBpbiBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBjbGFzc2VzLlxuLy8gY2FsbCBjYihlciwgZGF0YSkgd2hlcmUgZGF0YSBpcyA8PSBuIGluIGxlbmd0aC5cbi8vIGZvciB2aXJ0dWFsIChub24tc3RyaW5nLCBub24tYnVmZmVyKSBzdHJlYW1zLCBcImxlbmd0aFwiIGlzIHNvbWV3aGF0XG4vLyBhcmJpdHJhcnksIGFuZCBwZXJoYXBzIG5vdCB2ZXJ5IG1lYW5pbmdmdWwuXG5SZWFkYWJsZS5wcm90b3R5cGUuX3JlYWQgPSBmdW5jdGlvbiAobikge1xuICB0aHJvdyBuZXcgRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQoJ19yZWFkKCknKVxufVxuUmVhZGFibGUucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbiAoZGVzdCwgcGlwZU9wdHMpIHtcbiAgY29uc3Qgc3JjID0gdGhpc1xuICBjb25zdCBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGVcbiAgaWYgKHN0YXRlLnBpcGVzLmxlbmd0aCA9PT0gMSkge1xuICAgIGlmICghc3RhdGUubXVsdGlBd2FpdERyYWluKSB7XG4gICAgICBzdGF0ZS5tdWx0aUF3YWl0RHJhaW4gPSB0cnVlXG4gICAgICBzdGF0ZS5hd2FpdERyYWluV3JpdGVycyA9IG5ldyBTYWZlU2V0KHN0YXRlLmF3YWl0RHJhaW5Xcml0ZXJzID8gW3N0YXRlLmF3YWl0RHJhaW5Xcml0ZXJzXSA6IFtdKVxuICAgIH1cbiAgfVxuICBzdGF0ZS5waXBlcy5wdXNoKGRlc3QpXG4gIGRlYnVnKCdwaXBlIGNvdW50PSVkIG9wdHM9JWonLCBzdGF0ZS5waXBlcy5sZW5ndGgsIHBpcGVPcHRzKVxuICBjb25zdCBkb0VuZCA9ICghcGlwZU9wdHMgfHwgcGlwZU9wdHMuZW5kICE9PSBmYWxzZSkgJiYgZGVzdCAhPT0gcHJvY2Vzcy5zdGRvdXQgJiYgZGVzdCAhPT0gcHJvY2Vzcy5zdGRlcnJcbiAgY29uc3QgZW5kRm4gPSBkb0VuZCA/IG9uZW5kIDogdW5waXBlXG4gIGlmIChzdGF0ZS5lbmRFbWl0dGVkKSBwcm9jZXNzLm5leHRUaWNrKGVuZEZuKVxuICBlbHNlIHNyYy5vbmNlKCdlbmQnLCBlbmRGbilcbiAgZGVzdC5vbigndW5waXBlJywgb251bnBpcGUpXG4gIGZ1bmN0aW9uIG9udW5waXBlKHJlYWRhYmxlLCB1bnBpcGVJbmZvKSB7XG4gICAgZGVidWcoJ29udW5waXBlJylcbiAgICBpZiAocmVhZGFibGUgPT09IHNyYykge1xuICAgICAgaWYgKHVucGlwZUluZm8gJiYgdW5waXBlSW5mby5oYXNVbnBpcGVkID09PSBmYWxzZSkge1xuICAgICAgICB1bnBpcGVJbmZvLmhhc1VucGlwZWQgPSB0cnVlXG4gICAgICAgIGNsZWFudXAoKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBvbmVuZCgpIHtcbiAgICBkZWJ1Zygnb25lbmQnKVxuICAgIGRlc3QuZW5kKClcbiAgfVxuICBsZXQgb25kcmFpblxuICBsZXQgY2xlYW5lZFVwID0gZmFsc2VcbiAgZnVuY3Rpb24gY2xlYW51cCgpIHtcbiAgICBkZWJ1ZygnY2xlYW51cCcpXG4gICAgLy8gQ2xlYW51cCBldmVudCBoYW5kbGVycyBvbmNlIHRoZSBwaXBlIGlzIGJyb2tlbi5cbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uY2xvc2UpXG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZmluaXNoJywgb25maW5pc2gpXG4gICAgaWYgKG9uZHJhaW4pIHtcbiAgICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2RyYWluJywgb25kcmFpbilcbiAgICB9XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbmVycm9yKVxuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ3VucGlwZScsIG9udW5waXBlKVxuICAgIHNyYy5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25lbmQpXG4gICAgc3JjLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCB1bnBpcGUpXG4gICAgc3JjLnJlbW92ZUxpc3RlbmVyKCdkYXRhJywgb25kYXRhKVxuICAgIGNsZWFuZWRVcCA9IHRydWVcblxuICAgIC8vIElmIHRoZSByZWFkZXIgaXMgd2FpdGluZyBmb3IgYSBkcmFpbiBldmVudCBmcm9tIHRoaXNcbiAgICAvLyBzcGVjaWZpYyB3cml0ZXIsIHRoZW4gaXQgd291bGQgY2F1c2UgaXQgdG8gbmV2ZXIgc3RhcnRcbiAgICAvLyBmbG93aW5nIGFnYWluLlxuICAgIC8vIFNvLCBpZiB0aGlzIGlzIGF3YWl0aW5nIGEgZHJhaW4sIHRoZW4gd2UganVzdCBjYWxsIGl0IG5vdy5cbiAgICAvLyBJZiB3ZSBkb24ndCBrbm93LCB0aGVuIGFzc3VtZSB0aGF0IHdlIGFyZSB3YWl0aW5nIGZvciBvbmUuXG4gICAgaWYgKG9uZHJhaW4gJiYgc3RhdGUuYXdhaXREcmFpbldyaXRlcnMgJiYgKCFkZXN0Ll93cml0YWJsZVN0YXRlIHx8IGRlc3QuX3dyaXRhYmxlU3RhdGUubmVlZERyYWluKSkgb25kcmFpbigpXG4gIH1cbiAgZnVuY3Rpb24gcGF1c2UoKSB7XG4gICAgLy8gSWYgdGhlIHVzZXIgdW5waXBlZCBkdXJpbmcgYGRlc3Qud3JpdGUoKWAsIGl0IGlzIHBvc3NpYmxlXG4gICAgLy8gdG8gZ2V0IHN0dWNrIGluIGEgcGVybWFuZW50bHkgcGF1c2VkIHN0YXRlIGlmIHRoYXQgd3JpdGVcbiAgICAvLyBhbHNvIHJldHVybmVkIGZhbHNlLlxuICAgIC8vID0+IENoZWNrIHdoZXRoZXIgYGRlc3RgIGlzIHN0aWxsIGEgcGlwaW5nIGRlc3RpbmF0aW9uLlxuICAgIGlmICghY2xlYW5lZFVwKSB7XG4gICAgICBpZiAoc3RhdGUucGlwZXMubGVuZ3RoID09PSAxICYmIHN0YXRlLnBpcGVzWzBdID09PSBkZXN0KSB7XG4gICAgICAgIGRlYnVnKCdmYWxzZSB3cml0ZSByZXNwb25zZSwgcGF1c2UnLCAwKVxuICAgICAgICBzdGF0ZS5hd2FpdERyYWluV3JpdGVycyA9IGRlc3RcbiAgICAgICAgc3RhdGUubXVsdGlBd2FpdERyYWluID0gZmFsc2VcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUucGlwZXMubGVuZ3RoID4gMSAmJiBzdGF0ZS5waXBlcy5pbmNsdWRlcyhkZXN0KSkge1xuICAgICAgICBkZWJ1ZygnZmFsc2Ugd3JpdGUgcmVzcG9uc2UsIHBhdXNlJywgc3RhdGUuYXdhaXREcmFpbldyaXRlcnMuc2l6ZSlcbiAgICAgICAgc3RhdGUuYXdhaXREcmFpbldyaXRlcnMuYWRkKGRlc3QpXG4gICAgICB9XG4gICAgICBzcmMucGF1c2UoKVxuICAgIH1cbiAgICBpZiAoIW9uZHJhaW4pIHtcbiAgICAgIC8vIFdoZW4gdGhlIGRlc3QgZHJhaW5zLCBpdCByZWR1Y2VzIHRoZSBhd2FpdERyYWluIGNvdW50ZXJcbiAgICAgIC8vIG9uIHRoZSBzb3VyY2UuICBUaGlzIHdvdWxkIGJlIG1vcmUgZWxlZ2FudCB3aXRoIGEgLm9uY2UoKVxuICAgICAgLy8gaGFuZGxlciBpbiBmbG93KCksIGJ1dCBhZGRpbmcgYW5kIHJlbW92aW5nIHJlcGVhdGVkbHkgaXNcbiAgICAgIC8vIHRvbyBzbG93LlxuICAgICAgb25kcmFpbiA9IHBpcGVPbkRyYWluKHNyYywgZGVzdClcbiAgICAgIGRlc3Qub24oJ2RyYWluJywgb25kcmFpbilcbiAgICB9XG4gIH1cbiAgc3JjLm9uKCdkYXRhJywgb25kYXRhKVxuICBmdW5jdGlvbiBvbmRhdGEoY2h1bmspIHtcbiAgICBkZWJ1Zygnb25kYXRhJylcbiAgICBjb25zdCByZXQgPSBkZXN0LndyaXRlKGNodW5rKVxuICAgIGRlYnVnKCdkZXN0LndyaXRlJywgcmV0KVxuICAgIGlmIChyZXQgPT09IGZhbHNlKSB7XG4gICAgICBwYXVzZSgpXG4gICAgfVxuICB9XG5cbiAgLy8gSWYgdGhlIGRlc3QgaGFzIGFuIGVycm9yLCB0aGVuIHN0b3AgcGlwaW5nIGludG8gaXQuXG4gIC8vIEhvd2V2ZXIsIGRvbid0IHN1cHByZXNzIHRoZSB0aHJvd2luZyBiZWhhdmlvciBmb3IgdGhpcy5cbiAgZnVuY3Rpb24gb25lcnJvcihlcikge1xuICAgIGRlYnVnKCdvbmVycm9yJywgZXIpXG4gICAgdW5waXBlKClcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uZXJyb3IpXG4gICAgaWYgKGRlc3QubGlzdGVuZXJDb3VudCgnZXJyb3InKSA9PT0gMCkge1xuICAgICAgY29uc3QgcyA9IGRlc3QuX3dyaXRhYmxlU3RhdGUgfHwgZGVzdC5fcmVhZGFibGVTdGF0ZVxuICAgICAgaWYgKHMgJiYgIXMuZXJyb3JFbWl0dGVkKSB7XG4gICAgICAgIC8vIFVzZXIgaW5jb3JyZWN0bHkgZW1pdHRlZCAnZXJyb3InIGRpcmVjdGx5IG9uIHRoZSBzdHJlYW0uXG4gICAgICAgIGVycm9yT3JEZXN0cm95KGRlc3QsIGVyKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVzdC5lbWl0KCdlcnJvcicsIGVyKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIE1ha2Ugc3VyZSBvdXIgZXJyb3IgaGFuZGxlciBpcyBhdHRhY2hlZCBiZWZvcmUgdXNlcmxhbmQgb25lcy5cbiAgcHJlcGVuZExpc3RlbmVyKGRlc3QsICdlcnJvcicsIG9uZXJyb3IpXG5cbiAgLy8gQm90aCBjbG9zZSBhbmQgZmluaXNoIHNob3VsZCB0cmlnZ2VyIHVucGlwZSwgYnV0IG9ubHkgb25jZS5cbiAgZnVuY3Rpb24gb25jbG9zZSgpIHtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdmaW5pc2gnLCBvbmZpbmlzaClcbiAgICB1bnBpcGUoKVxuICB9XG4gIGRlc3Qub25jZSgnY2xvc2UnLCBvbmNsb3NlKVxuICBmdW5jdGlvbiBvbmZpbmlzaCgpIHtcbiAgICBkZWJ1Zygnb25maW5pc2gnKVxuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgb25jbG9zZSlcbiAgICB1bnBpcGUoKVxuICB9XG4gIGRlc3Qub25jZSgnZmluaXNoJywgb25maW5pc2gpXG4gIGZ1bmN0aW9uIHVucGlwZSgpIHtcbiAgICBkZWJ1ZygndW5waXBlJylcbiAgICBzcmMudW5waXBlKGRlc3QpXG4gIH1cblxuICAvLyBUZWxsIHRoZSBkZXN0IHRoYXQgaXQncyBiZWluZyBwaXBlZCB0by5cbiAgZGVzdC5lbWl0KCdwaXBlJywgc3JjKVxuXG4gIC8vIFN0YXJ0IHRoZSBmbG93IGlmIGl0IGhhc24ndCBiZWVuIHN0YXJ0ZWQgYWxyZWFkeS5cblxuICBpZiAoZGVzdC53cml0YWJsZU5lZWREcmFpbiA9PT0gdHJ1ZSkge1xuICAgIHBhdXNlKClcbiAgfSBlbHNlIGlmICghc3RhdGUuZmxvd2luZykge1xuICAgIGRlYnVnKCdwaXBlIHJlc3VtZScpXG4gICAgc3JjLnJlc3VtZSgpXG4gIH1cbiAgcmV0dXJuIGRlc3Rcbn1cbmZ1bmN0aW9uIHBpcGVPbkRyYWluKHNyYywgZGVzdCkge1xuICByZXR1cm4gZnVuY3Rpb24gcGlwZU9uRHJhaW5GdW5jdGlvblJlc3VsdCgpIHtcbiAgICBjb25zdCBzdGF0ZSA9IHNyYy5fcmVhZGFibGVTdGF0ZVxuXG4gICAgLy8gYG9uZHJhaW5gIHdpbGwgY2FsbCBkaXJlY3RseSxcbiAgICAvLyBgdGhpc2AgbWF5YmUgbm90IGEgcmVmZXJlbmNlIHRvIGRlc3QsXG4gICAgLy8gc28gd2UgdXNlIHRoZSByZWFsIGRlc3QgaGVyZS5cbiAgICBpZiAoc3RhdGUuYXdhaXREcmFpbldyaXRlcnMgPT09IGRlc3QpIHtcbiAgICAgIGRlYnVnKCdwaXBlT25EcmFpbicsIDEpXG4gICAgICBzdGF0ZS5hd2FpdERyYWluV3JpdGVycyA9IG51bGxcbiAgICB9IGVsc2UgaWYgKHN0YXRlLm11bHRpQXdhaXREcmFpbikge1xuICAgICAgZGVidWcoJ3BpcGVPbkRyYWluJywgc3RhdGUuYXdhaXREcmFpbldyaXRlcnMuc2l6ZSlcbiAgICAgIHN0YXRlLmF3YWl0RHJhaW5Xcml0ZXJzLmRlbGV0ZShkZXN0KVxuICAgIH1cbiAgICBpZiAoKCFzdGF0ZS5hd2FpdERyYWluV3JpdGVycyB8fCBzdGF0ZS5hd2FpdERyYWluV3JpdGVycy5zaXplID09PSAwKSAmJiBzcmMubGlzdGVuZXJDb3VudCgnZGF0YScpKSB7XG4gICAgICBzcmMucmVzdW1lKClcbiAgICB9XG4gIH1cbn1cblJlYWRhYmxlLnByb3RvdHlwZS51bnBpcGUgPSBmdW5jdGlvbiAoZGVzdCkge1xuICBjb25zdCBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGVcbiAgY29uc3QgdW5waXBlSW5mbyA9IHtcbiAgICBoYXNVbnBpcGVkOiBmYWxzZVxuICB9XG5cbiAgLy8gSWYgd2UncmUgbm90IHBpcGluZyBhbnl3aGVyZSwgdGhlbiBkbyBub3RoaW5nLlxuICBpZiAoc3RhdGUucGlwZXMubGVuZ3RoID09PSAwKSByZXR1cm4gdGhpc1xuICBpZiAoIWRlc3QpIHtcbiAgICAvLyByZW1vdmUgYWxsLlxuICAgIGNvbnN0IGRlc3RzID0gc3RhdGUucGlwZXNcbiAgICBzdGF0ZS5waXBlcyA9IFtdXG4gICAgdGhpcy5wYXVzZSgpXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZXN0cy5sZW5ndGg7IGkrKylcbiAgICAgIGRlc3RzW2ldLmVtaXQoJ3VucGlwZScsIHRoaXMsIHtcbiAgICAgICAgaGFzVW5waXBlZDogZmFsc2VcbiAgICAgIH0pXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8vIFRyeSB0byBmaW5kIHRoZSByaWdodCBvbmUuXG4gIGNvbnN0IGluZGV4ID0gQXJyYXlQcm90b3R5cGVJbmRleE9mKHN0YXRlLnBpcGVzLCBkZXN0KVxuICBpZiAoaW5kZXggPT09IC0xKSByZXR1cm4gdGhpc1xuICBzdGF0ZS5waXBlcy5zcGxpY2UoaW5kZXgsIDEpXG4gIGlmIChzdGF0ZS5waXBlcy5sZW5ndGggPT09IDApIHRoaXMucGF1c2UoKVxuICBkZXN0LmVtaXQoJ3VucGlwZScsIHRoaXMsIHVucGlwZUluZm8pXG4gIHJldHVybiB0aGlzXG59XG5cbi8vIFNldCB1cCBkYXRhIGV2ZW50cyBpZiB0aGV5IGFyZSBhc2tlZCBmb3Jcbi8vIEVuc3VyZSByZWFkYWJsZSBsaXN0ZW5lcnMgZXZlbnR1YWxseSBnZXQgc29tZXRoaW5nLlxuUmVhZGFibGUucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gKGV2LCBmbikge1xuICBjb25zdCByZXMgPSBTdHJlYW0ucHJvdG90eXBlLm9uLmNhbGwodGhpcywgZXYsIGZuKVxuICBjb25zdCBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGVcbiAgaWYgKGV2ID09PSAnZGF0YScpIHtcbiAgICAvLyBVcGRhdGUgcmVhZGFibGVMaXN0ZW5pbmcgc28gdGhhdCByZXN1bWUoKSBtYXkgYmUgYSBuby1vcFxuICAgIC8vIGEgZmV3IGxpbmVzIGRvd24uIFRoaXMgaXMgbmVlZGVkIHRvIHN1cHBvcnQgb25jZSgncmVhZGFibGUnKS5cbiAgICBzdGF0ZS5yZWFkYWJsZUxpc3RlbmluZyA9IHRoaXMubGlzdGVuZXJDb3VudCgncmVhZGFibGUnKSA+IDBcblxuICAgIC8vIFRyeSBzdGFydCBmbG93aW5nIG9uIG5leHQgdGljayBpZiBzdHJlYW0gaXNuJ3QgZXhwbGljaXRseSBwYXVzZWQuXG4gICAgaWYgKHN0YXRlLmZsb3dpbmcgIT09IGZhbHNlKSB0aGlzLnJlc3VtZSgpXG4gIH0gZWxzZSBpZiAoZXYgPT09ICdyZWFkYWJsZScpIHtcbiAgICBpZiAoIXN0YXRlLmVuZEVtaXR0ZWQgJiYgIXN0YXRlLnJlYWRhYmxlTGlzdGVuaW5nKSB7XG4gICAgICBzdGF0ZS5yZWFkYWJsZUxpc3RlbmluZyA9IHN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWVcbiAgICAgIHN0YXRlLmZsb3dpbmcgPSBmYWxzZVxuICAgICAgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gZmFsc2VcbiAgICAgIGRlYnVnKCdvbiByZWFkYWJsZScsIHN0YXRlLmxlbmd0aCwgc3RhdGUucmVhZGluZylcbiAgICAgIGlmIChzdGF0ZS5sZW5ndGgpIHtcbiAgICAgICAgZW1pdFJlYWRhYmxlKHRoaXMpXG4gICAgICB9IGVsc2UgaWYgKCFzdGF0ZS5yZWFkaW5nKSB7XG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soblJlYWRpbmdOZXh0VGljaywgdGhpcylcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuUmVhZGFibGUucHJvdG90eXBlLmFkZExpc3RlbmVyID0gUmVhZGFibGUucHJvdG90eXBlLm9uXG5SZWFkYWJsZS5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPSBmdW5jdGlvbiAoZXYsIGZuKSB7XG4gIGNvbnN0IHJlcyA9IFN0cmVhbS5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIuY2FsbCh0aGlzLCBldiwgZm4pXG4gIGlmIChldiA9PT0gJ3JlYWRhYmxlJykge1xuICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUgaXMgc29tZW9uZSBzdGlsbCBsaXN0ZW5pbmcgdG9cbiAgICAvLyByZWFkYWJsZSBhbmQgcmVzZXQgdGhlIHN0YXRlLiBIb3dldmVyIHRoaXMgbmVlZHMgdG8gaGFwcGVuXG4gICAgLy8gYWZ0ZXIgcmVhZGFibGUgaGFzIGJlZW4gZW1pdHRlZCBidXQgYmVmb3JlIEkvTyAobmV4dFRpY2spIHRvXG4gICAgLy8gc3VwcG9ydCBvbmNlKCdyZWFkYWJsZScsIGZuKSBjeWNsZXMuIFRoaXMgbWVhbnMgdGhhdCBjYWxsaW5nXG4gICAgLy8gcmVzdW1lIHdpdGhpbiB0aGUgc2FtZSB0aWNrIHdpbGwgaGF2ZSBub1xuICAgIC8vIGVmZmVjdC5cbiAgICBwcm9jZXNzLm5leHRUaWNrKHVwZGF0ZVJlYWRhYmxlTGlzdGVuaW5nLCB0aGlzKVxuICB9XG4gIHJldHVybiByZXNcbn1cblJlYWRhYmxlLnByb3RvdHlwZS5vZmYgPSBSZWFkYWJsZS5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXJcblJlYWRhYmxlLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBmdW5jdGlvbiAoZXYpIHtcbiAgY29uc3QgcmVzID0gU3RyZWFtLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICBpZiAoZXYgPT09ICdyZWFkYWJsZScgfHwgZXYgPT09IHVuZGVmaW5lZCkge1xuICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUgaXMgc29tZW9uZSBzdGlsbCBsaXN0ZW5pbmcgdG9cbiAgICAvLyByZWFkYWJsZSBhbmQgcmVzZXQgdGhlIHN0YXRlLiBIb3dldmVyIHRoaXMgbmVlZHMgdG8gaGFwcGVuXG4gICAgLy8gYWZ0ZXIgcmVhZGFibGUgaGFzIGJlZW4gZW1pdHRlZCBidXQgYmVmb3JlIEkvTyAobmV4dFRpY2spIHRvXG4gICAgLy8gc3VwcG9ydCBvbmNlKCdyZWFkYWJsZScsIGZuKSBjeWNsZXMuIFRoaXMgbWVhbnMgdGhhdCBjYWxsaW5nXG4gICAgLy8gcmVzdW1lIHdpdGhpbiB0aGUgc2FtZSB0aWNrIHdpbGwgaGF2ZSBub1xuICAgIC8vIGVmZmVjdC5cbiAgICBwcm9jZXNzLm5leHRUaWNrKHVwZGF0ZVJlYWRhYmxlTGlzdGVuaW5nLCB0aGlzKVxuICB9XG4gIHJldHVybiByZXNcbn1cbmZ1bmN0aW9uIHVwZGF0ZVJlYWRhYmxlTGlzdGVuaW5nKHNlbGYpIHtcbiAgY29uc3Qgc3RhdGUgPSBzZWxmLl9yZWFkYWJsZVN0YXRlXG4gIHN0YXRlLnJlYWRhYmxlTGlzdGVuaW5nID0gc2VsZi5saXN0ZW5lckNvdW50KCdyZWFkYWJsZScpID4gMFxuICBpZiAoc3RhdGUucmVzdW1lU2NoZWR1bGVkICYmIHN0YXRlW2tQYXVzZWRdID09PSBmYWxzZSkge1xuICAgIC8vIEZsb3dpbmcgbmVlZHMgdG8gYmUgc2V0IHRvIHRydWUgbm93LCBvdGhlcndpc2VcbiAgICAvLyB0aGUgdXBjb21pbmcgcmVzdW1lIHdpbGwgbm90IGZsb3cuXG4gICAgc3RhdGUuZmxvd2luZyA9IHRydWVcblxuICAgIC8vIENydWRlIHdheSB0byBjaGVjayBpZiB3ZSBzaG91bGQgcmVzdW1lLlxuICB9IGVsc2UgaWYgKHNlbGYubGlzdGVuZXJDb3VudCgnZGF0YScpID4gMCkge1xuICAgIHNlbGYucmVzdW1lKClcbiAgfSBlbHNlIGlmICghc3RhdGUucmVhZGFibGVMaXN0ZW5pbmcpIHtcbiAgICBzdGF0ZS5mbG93aW5nID0gbnVsbFxuICB9XG59XG5mdW5jdGlvbiBuUmVhZGluZ05leHRUaWNrKHNlbGYpIHtcbiAgZGVidWcoJ3JlYWRhYmxlIG5leHR0aWNrIHJlYWQgMCcpXG4gIHNlbGYucmVhZCgwKVxufVxuXG4vLyBwYXVzZSgpIGFuZCByZXN1bWUoKSBhcmUgcmVtbmFudHMgb2YgdGhlIGxlZ2FjeSByZWFkYWJsZSBzdHJlYW0gQVBJXG4vLyBJZiB0aGUgdXNlciB1c2VzIHRoZW0sIHRoZW4gc3dpdGNoIGludG8gb2xkIG1vZGUuXG5SZWFkYWJsZS5wcm90b3R5cGUucmVzdW1lID0gZnVuY3Rpb24gKCkge1xuICBjb25zdCBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGVcbiAgaWYgKCFzdGF0ZS5mbG93aW5nKSB7XG4gICAgZGVidWcoJ3Jlc3VtZScpXG4gICAgLy8gV2UgZmxvdyBvbmx5IGlmIHRoZXJlIGlzIG5vIG9uZSBsaXN0ZW5pbmdcbiAgICAvLyBmb3IgcmVhZGFibGUsIGJ1dCB3ZSBzdGlsbCBoYXZlIHRvIGNhbGxcbiAgICAvLyByZXN1bWUoKS5cbiAgICBzdGF0ZS5mbG93aW5nID0gIXN0YXRlLnJlYWRhYmxlTGlzdGVuaW5nXG4gICAgcmVzdW1lKHRoaXMsIHN0YXRlKVxuICB9XG4gIHN0YXRlW2tQYXVzZWRdID0gZmFsc2VcbiAgcmV0dXJuIHRoaXNcbn1cbmZ1bmN0aW9uIHJlc3VtZShzdHJlYW0sIHN0YXRlKSB7XG4gIGlmICghc3RhdGUucmVzdW1lU2NoZWR1bGVkKSB7XG4gICAgc3RhdGUucmVzdW1lU2NoZWR1bGVkID0gdHJ1ZVxuICAgIHByb2Nlc3MubmV4dFRpY2socmVzdW1lXywgc3RyZWFtLCBzdGF0ZSlcbiAgfVxufVxuZnVuY3Rpb24gcmVzdW1lXyhzdHJlYW0sIHN0YXRlKSB7XG4gIGRlYnVnKCdyZXN1bWUnLCBzdGF0ZS5yZWFkaW5nKVxuICBpZiAoIXN0YXRlLnJlYWRpbmcpIHtcbiAgICBzdHJlYW0ucmVhZCgwKVxuICB9XG4gIHN0YXRlLnJlc3VtZVNjaGVkdWxlZCA9IGZhbHNlXG4gIHN0cmVhbS5lbWl0KCdyZXN1bWUnKVxuICBmbG93KHN0cmVhbSlcbiAgaWYgKHN0YXRlLmZsb3dpbmcgJiYgIXN0YXRlLnJlYWRpbmcpIHN0cmVhbS5yZWFkKDApXG59XG5SZWFkYWJsZS5wcm90b3R5cGUucGF1c2UgPSBmdW5jdGlvbiAoKSB7XG4gIGRlYnVnKCdjYWxsIHBhdXNlIGZsb3dpbmc9JWonLCB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcpXG4gIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcgIT09IGZhbHNlKSB7XG4gICAgZGVidWcoJ3BhdXNlJylcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcgPSBmYWxzZVxuICAgIHRoaXMuZW1pdCgncGF1c2UnKVxuICB9XG4gIHRoaXMuX3JlYWRhYmxlU3RhdGVba1BhdXNlZF0gPSB0cnVlXG4gIHJldHVybiB0aGlzXG59XG5mdW5jdGlvbiBmbG93KHN0cmVhbSkge1xuICBjb25zdCBzdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZVxuICBkZWJ1ZygnZmxvdycsIHN0YXRlLmZsb3dpbmcpXG4gIHdoaWxlIChzdGF0ZS5mbG93aW5nICYmIHN0cmVhbS5yZWFkKCkgIT09IG51bGwpO1xufVxuXG4vLyBXcmFwIGFuIG9sZC1zdHlsZSBzdHJlYW0gYXMgdGhlIGFzeW5jIGRhdGEgc291cmNlLlxuLy8gVGhpcyBpcyAqbm90KiBwYXJ0IG9mIHRoZSByZWFkYWJsZSBzdHJlYW0gaW50ZXJmYWNlLlxuLy8gSXQgaXMgYW4gdWdseSB1bmZvcnR1bmF0ZSBtZXNzIG9mIGhpc3RvcnkuXG5SZWFkYWJsZS5wcm90b3R5cGUud3JhcCA9IGZ1bmN0aW9uIChzdHJlYW0pIHtcbiAgbGV0IHBhdXNlZCA9IGZhbHNlXG5cbiAgLy8gVE9ETyAocm9uYWcpOiBTaG91bGQgdGhpcy5kZXN0cm95KGVycikgZW1pdFxuICAvLyAnZXJyb3InIG9uIHRoZSB3cmFwcGVkIHN0cmVhbT8gV291bGQgcmVxdWlyZVxuICAvLyBhIHN0YXRpYyBmYWN0b3J5IG1ldGhvZCwgZS5nLiBSZWFkYWJsZS53cmFwKHN0cmVhbSkuXG5cbiAgc3RyZWFtLm9uKCdkYXRhJywgKGNodW5rKSA9PiB7XG4gICAgaWYgKCF0aGlzLnB1c2goY2h1bmspICYmIHN0cmVhbS5wYXVzZSkge1xuICAgICAgcGF1c2VkID0gdHJ1ZVxuICAgICAgc3RyZWFtLnBhdXNlKClcbiAgICB9XG4gIH0pXG4gIHN0cmVhbS5vbignZW5kJywgKCkgPT4ge1xuICAgIHRoaXMucHVzaChudWxsKVxuICB9KVxuICBzdHJlYW0ub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgIGVycm9yT3JEZXN0cm95KHRoaXMsIGVycilcbiAgfSlcbiAgc3RyZWFtLm9uKCdjbG9zZScsICgpID0+IHtcbiAgICB0aGlzLmRlc3Ryb3koKVxuICB9KVxuICBzdHJlYW0ub24oJ2Rlc3Ryb3knLCAoKSA9PiB7XG4gICAgdGhpcy5kZXN0cm95KClcbiAgfSlcbiAgdGhpcy5fcmVhZCA9ICgpID0+IHtcbiAgICBpZiAocGF1c2VkICYmIHN0cmVhbS5yZXN1bWUpIHtcbiAgICAgIHBhdXNlZCA9IGZhbHNlXG4gICAgICBzdHJlYW0ucmVzdW1lKClcbiAgICB9XG4gIH1cblxuICAvLyBQcm94eSBhbGwgdGhlIG90aGVyIG1ldGhvZHMuIEltcG9ydGFudCB3aGVuIHdyYXBwaW5nIGZpbHRlcnMgYW5kIGR1cGxleGVzLlxuICBjb25zdCBzdHJlYW1LZXlzID0gT2JqZWN0S2V5cyhzdHJlYW0pXG4gIGZvciAobGV0IGogPSAxOyBqIDwgc3RyZWFtS2V5cy5sZW5ndGg7IGorKykge1xuICAgIGNvbnN0IGkgPSBzdHJlYW1LZXlzW2pdXG4gICAgaWYgKHRoaXNbaV0gPT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygc3RyZWFtW2ldID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzW2ldID0gc3RyZWFtW2ldLmJpbmQoc3RyZWFtKVxuICAgIH1cbiAgfVxuICByZXR1cm4gdGhpc1xufVxuUmVhZGFibGUucHJvdG90eXBlW1N5bWJvbEFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gc3RyZWFtVG9Bc3luY0l0ZXJhdG9yKHRoaXMpXG59XG5SZWFkYWJsZS5wcm90b3R5cGUuaXRlcmF0b3IgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFsaWRhdGVPYmplY3Qob3B0aW9ucywgJ29wdGlvbnMnKVxuICB9XG4gIHJldHVybiBzdHJlYW1Ub0FzeW5jSXRlcmF0b3IodGhpcywgb3B0aW9ucylcbn1cbmZ1bmN0aW9uIHN0cmVhbVRvQXN5bmNJdGVyYXRvcihzdHJlYW0sIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiBzdHJlYW0ucmVhZCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHN0cmVhbSA9IFJlYWRhYmxlLndyYXAoc3RyZWFtLCB7XG4gICAgICBvYmplY3RNb2RlOiB0cnVlXG4gICAgfSlcbiAgfVxuICBjb25zdCBpdGVyID0gY3JlYXRlQXN5bmNJdGVyYXRvcihzdHJlYW0sIG9wdGlvbnMpXG4gIGl0ZXIuc3RyZWFtID0gc3RyZWFtXG4gIHJldHVybiBpdGVyXG59XG5hc3luYyBmdW5jdGlvbiogY3JlYXRlQXN5bmNJdGVyYXRvcihzdHJlYW0sIG9wdGlvbnMpIHtcbiAgbGV0IGNhbGxiYWNrID0gbm9wXG4gIGZ1bmN0aW9uIG5leHQocmVzb2x2ZSkge1xuICAgIGlmICh0aGlzID09PSBzdHJlYW0pIHtcbiAgICAgIGNhbGxiYWNrKClcbiAgICAgIGNhbGxiYWNrID0gbm9wXG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbGxiYWNrID0gcmVzb2x2ZVxuICAgIH1cbiAgfVxuICBzdHJlYW0ub24oJ3JlYWRhYmxlJywgbmV4dClcbiAgbGV0IGVycm9yXG4gIGNvbnN0IGNsZWFudXAgPSBlb3MoXG4gICAgc3RyZWFtLFxuICAgIHtcbiAgICAgIHdyaXRhYmxlOiBmYWxzZVxuICAgIH0sXG4gICAgKGVycikgPT4ge1xuICAgICAgZXJyb3IgPSBlcnIgPyBhZ2dyZWdhdGVUd29FcnJvcnMoZXJyb3IsIGVycikgOiBudWxsXG4gICAgICBjYWxsYmFjaygpXG4gICAgICBjYWxsYmFjayA9IG5vcFxuICAgIH1cbiAgKVxuICB0cnkge1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCBjaHVuayA9IHN0cmVhbS5kZXN0cm95ZWQgPyBudWxsIDogc3RyZWFtLnJlYWQoKVxuICAgICAgaWYgKGNodW5rICE9PSBudWxsKSB7XG4gICAgICAgIHlpZWxkIGNodW5rXG4gICAgICB9IGVsc2UgaWYgKGVycm9yKSB7XG4gICAgICAgIHRocm93IGVycm9yXG4gICAgICB9IGVsc2UgaWYgKGVycm9yID09PSBudWxsKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UobmV4dClcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGVycm9yID0gYWdncmVnYXRlVHdvRXJyb3JzKGVycm9yLCBlcnIpXG4gICAgdGhyb3cgZXJyb3JcbiAgfSBmaW5hbGx5IHtcbiAgICBpZiAoXG4gICAgICAoZXJyb3IgfHwgKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogb3B0aW9ucy5kZXN0cm95T25SZXR1cm4pICE9PSBmYWxzZSkgJiZcbiAgICAgIChlcnJvciA9PT0gdW5kZWZpbmVkIHx8IHN0cmVhbS5fcmVhZGFibGVTdGF0ZS5hdXRvRGVzdHJveSlcbiAgICApIHtcbiAgICAgIGRlc3Ryb3lJbXBsLmRlc3Ryb3llcihzdHJlYW0sIG51bGwpXG4gICAgfSBlbHNlIHtcbiAgICAgIHN0cmVhbS5vZmYoJ3JlYWRhYmxlJywgbmV4dClcbiAgICAgIGNsZWFudXAoKVxuICAgIH1cbiAgfVxufVxuXG4vLyBNYWtpbmcgaXQgZXhwbGljaXQgdGhlc2UgcHJvcGVydGllcyBhcmUgbm90IGVudW1lcmFibGVcbi8vIGJlY2F1c2Ugb3RoZXJ3aXNlIHNvbWUgcHJvdG90eXBlIG1hbmlwdWxhdGlvbiBpblxuLy8gdXNlcmxhbmQgd2lsbCBmYWlsLlxuT2JqZWN0RGVmaW5lUHJvcGVydGllcyhSZWFkYWJsZS5wcm90b3R5cGUsIHtcbiAgcmVhZGFibGU6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZ2V0KCkge1xuICAgICAgY29uc3QgciA9IHRoaXMuX3JlYWRhYmxlU3RhdGVcbiAgICAgIC8vIHIucmVhZGFibGUgPT09IGZhbHNlIG1lYW5zIHRoYXQgdGhpcyBpcyBwYXJ0IG9mIGEgRHVwbGV4IHN0cmVhbVxuICAgICAgLy8gd2hlcmUgdGhlIHJlYWRhYmxlIHNpZGUgd2FzIGRpc2FibGVkIHVwb24gY29uc3RydWN0aW9uLlxuICAgICAgLy8gQ29tcGF0LiBUaGUgdXNlciBtaWdodCBtYW51YWxseSBkaXNhYmxlIHJlYWRhYmxlIHNpZGUgdGhyb3VnaFxuICAgICAgLy8gZGVwcmVjYXRlZCBzZXR0ZXIuXG4gICAgICByZXR1cm4gISFyICYmIHIucmVhZGFibGUgIT09IGZhbHNlICYmICFyLmRlc3Ryb3llZCAmJiAhci5lcnJvckVtaXR0ZWQgJiYgIXIuZW5kRW1pdHRlZFxuICAgIH0sXG4gICAgc2V0KHZhbCkge1xuICAgICAgLy8gQmFja3dhcmRzIGNvbXBhdC5cbiAgICAgIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlKSB7XG4gICAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUucmVhZGFibGUgPSAhIXZhbFxuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgcmVhZGFibGVEaWRSZWFkOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGF0YUVtaXR0ZWRcbiAgICB9XG4gIH0sXG4gIHJlYWRhYmxlQWJvcnRlZDoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiAhIShcbiAgICAgICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5yZWFkYWJsZSAhPT0gZmFsc2UgJiZcbiAgICAgICAgKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkIHx8IHRoaXMuX3JlYWRhYmxlU3RhdGUuZXJyb3JlZCkgJiZcbiAgICAgICAgIXRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZFxuICAgICAgKVxuICAgIH1cbiAgfSxcbiAgcmVhZGFibGVIaWdoV2F0ZXJNYXJrOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya1xuICAgIH1cbiAgfSxcbiAgcmVhZGFibGVCdWZmZXI6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZSAmJiB0aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlclxuICAgIH1cbiAgfSxcbiAgcmVhZGFibGVGbG93aW5nOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZ1xuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgICAgIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlKSB7XG4gICAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyA9IHN0YXRlXG4gICAgICB9XG4gICAgfVxuICB9LFxuICByZWFkYWJsZUxlbmd0aDoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5sZW5ndGhcbiAgICB9XG4gIH0sXG4gIHJlYWRhYmxlT2JqZWN0TW9kZToge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZSA/IHRoaXMuX3JlYWRhYmxlU3RhdGUub2JqZWN0TW9kZSA6IGZhbHNlXG4gICAgfVxuICB9LFxuICByZWFkYWJsZUVuY29kaW5nOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlID8gdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmNvZGluZyA6IG51bGxcbiAgICB9XG4gIH0sXG4gIGVycm9yZWQ6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUgPyB0aGlzLl9yZWFkYWJsZVN0YXRlLmVycm9yZWQgOiBudWxsXG4gICAgfVxuICB9LFxuICBjbG9zZWQ6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUgPyB0aGlzLl9yZWFkYWJsZVN0YXRlLmNsb3NlZCA6IGZhbHNlXG4gICAgfVxuICB9LFxuICBkZXN0cm95ZWQ6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUgPyB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCA6IGZhbHNlXG4gICAgfSxcbiAgICBzZXQodmFsdWUpIHtcbiAgICAgIC8vIFdlIGlnbm9yZSB0aGUgdmFsdWUgaWYgdGhlIHN0cmVhbVxuICAgICAgLy8gaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkIHlldC5cbiAgICAgIGlmICghdGhpcy5fcmVhZGFibGVTdGF0ZSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gQmFja3dhcmQgY29tcGF0aWJpbGl0eSwgdGhlIHVzZXIgaXMgZXhwbGljaXRseVxuICAgICAgLy8gbWFuYWdpbmcgZGVzdHJveWVkLlxuICAgICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQgPSB2YWx1ZVxuICAgIH1cbiAgfSxcbiAgcmVhZGFibGVFbmRlZDoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZSA/IHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCA6IGZhbHNlXG4gICAgfVxuICB9XG59KVxuT2JqZWN0RGVmaW5lUHJvcGVydGllcyhSZWFkYWJsZVN0YXRlLnByb3RvdHlwZSwge1xuICAvLyBMZWdhY3kgZ2V0dGVyIGZvciBgcGlwZXNDb3VudGAuXG4gIHBpcGVzQ291bnQ6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMucGlwZXMubGVuZ3RoXG4gICAgfVxuICB9LFxuICAvLyBMZWdhY3kgcHJvcGVydHkgZm9yIGBwYXVzZWRgLlxuICBwYXVzZWQ6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXNba1BhdXNlZF0gIT09IGZhbHNlXG4gICAgfSxcbiAgICBzZXQodmFsdWUpIHtcbiAgICAgIHRoaXNba1BhdXNlZF0gPSAhIXZhbHVlXG4gICAgfVxuICB9XG59KVxuXG4vLyBFeHBvc2VkIGZvciB0ZXN0aW5nIHB1cnBvc2VzIG9ubHkuXG5SZWFkYWJsZS5fZnJvbUxpc3QgPSBmcm9tTGlzdFxuXG4vLyBQbHVjayBvZmYgbiBieXRlcyBmcm9tIGFuIGFycmF5IG9mIGJ1ZmZlcnMuXG4vLyBMZW5ndGggaXMgdGhlIGNvbWJpbmVkIGxlbmd0aHMgb2YgYWxsIHRoZSBidWZmZXJzIGluIHRoZSBsaXN0LlxuLy8gVGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBiZSBpbmxpbmFibGUsIHNvIHBsZWFzZSB0YWtlIGNhcmUgd2hlbiBtYWtpbmdcbi8vIGNoYW5nZXMgdG8gdGhlIGZ1bmN0aW9uIGJvZHkuXG5mdW5jdGlvbiBmcm9tTGlzdChuLCBzdGF0ZSkge1xuICAvLyBub3RoaW5nIGJ1ZmZlcmVkLlxuICBpZiAoc3RhdGUubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbFxuICBsZXQgcmV0XG4gIGlmIChzdGF0ZS5vYmplY3RNb2RlKSByZXQgPSBzdGF0ZS5idWZmZXIuc2hpZnQoKVxuICBlbHNlIGlmICghbiB8fCBuID49IHN0YXRlLmxlbmd0aCkge1xuICAgIC8vIFJlYWQgaXQgYWxsLCB0cnVuY2F0ZSB0aGUgbGlzdC5cbiAgICBpZiAoc3RhdGUuZGVjb2RlcikgcmV0ID0gc3RhdGUuYnVmZmVyLmpvaW4oJycpXG4gICAgZWxzZSBpZiAoc3RhdGUuYnVmZmVyLmxlbmd0aCA9PT0gMSkgcmV0ID0gc3RhdGUuYnVmZmVyLmZpcnN0KClcbiAgICBlbHNlIHJldCA9IHN0YXRlLmJ1ZmZlci5jb25jYXQoc3RhdGUubGVuZ3RoKVxuICAgIHN0YXRlLmJ1ZmZlci5jbGVhcigpXG4gIH0gZWxzZSB7XG4gICAgLy8gcmVhZCBwYXJ0IG9mIGxpc3QuXG4gICAgcmV0ID0gc3RhdGUuYnVmZmVyLmNvbnN1bWUobiwgc3RhdGUuZGVjb2RlcilcbiAgfVxuICByZXR1cm4gcmV0XG59XG5mdW5jdGlvbiBlbmRSZWFkYWJsZShzdHJlYW0pIHtcbiAgY29uc3Qgc3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGVcbiAgZGVidWcoJ2VuZFJlYWRhYmxlJywgc3RhdGUuZW5kRW1pdHRlZClcbiAgaWYgKCFzdGF0ZS5lbmRFbWl0dGVkKSB7XG4gICAgc3RhdGUuZW5kZWQgPSB0cnVlXG4gICAgcHJvY2Vzcy5uZXh0VGljayhlbmRSZWFkYWJsZU5ULCBzdGF0ZSwgc3RyZWFtKVxuICB9XG59XG5mdW5jdGlvbiBlbmRSZWFkYWJsZU5UKHN0YXRlLCBzdHJlYW0pIHtcbiAgZGVidWcoJ2VuZFJlYWRhYmxlTlQnLCBzdGF0ZS5lbmRFbWl0dGVkLCBzdGF0ZS5sZW5ndGgpXG5cbiAgLy8gQ2hlY2sgdGhhdCB3ZSBkaWRuJ3QgZ2V0IG9uZSBsYXN0IHVuc2hpZnQuXG4gIGlmICghc3RhdGUuZXJyb3JlZCAmJiAhc3RhdGUuY2xvc2VFbWl0dGVkICYmICFzdGF0ZS5lbmRFbWl0dGVkICYmIHN0YXRlLmxlbmd0aCA9PT0gMCkge1xuICAgIHN0YXRlLmVuZEVtaXR0ZWQgPSB0cnVlXG4gICAgc3RyZWFtLmVtaXQoJ2VuZCcpXG4gICAgaWYgKHN0cmVhbS53cml0YWJsZSAmJiBzdHJlYW0uYWxsb3dIYWxmT3BlbiA9PT0gZmFsc2UpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZW5kV3JpdGFibGVOVCwgc3RyZWFtKVxuICAgIH0gZWxzZSBpZiAoc3RhdGUuYXV0b0Rlc3Ryb3kpIHtcbiAgICAgIC8vIEluIGNhc2Ugb2YgZHVwbGV4IHN0cmVhbXMgd2UgbmVlZCBhIHdheSB0byBkZXRlY3RcbiAgICAgIC8vIGlmIHRoZSB3cml0YWJsZSBzaWRlIGlzIHJlYWR5IGZvciBhdXRvRGVzdHJveSBhcyB3ZWxsLlxuICAgICAgY29uc3Qgd1N0YXRlID0gc3RyZWFtLl93cml0YWJsZVN0YXRlXG4gICAgICBjb25zdCBhdXRvRGVzdHJveSA9XG4gICAgICAgICF3U3RhdGUgfHxcbiAgICAgICAgKHdTdGF0ZS5hdXRvRGVzdHJveSAmJlxuICAgICAgICAgIC8vIFdlIGRvbid0IGV4cGVjdCB0aGUgd3JpdGFibGUgdG8gZXZlciAnZmluaXNoJ1xuICAgICAgICAgIC8vIGlmIHdyaXRhYmxlIGlzIGV4cGxpY2l0bHkgc2V0IHRvIGZhbHNlLlxuICAgICAgICAgICh3U3RhdGUuZmluaXNoZWQgfHwgd1N0YXRlLndyaXRhYmxlID09PSBmYWxzZSkpXG4gICAgICBpZiAoYXV0b0Rlc3Ryb3kpIHtcbiAgICAgICAgc3RyZWFtLmRlc3Ryb3koKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZW5kV3JpdGFibGVOVChzdHJlYW0pIHtcbiAgY29uc3Qgd3JpdGFibGUgPSBzdHJlYW0ud3JpdGFibGUgJiYgIXN0cmVhbS53cml0YWJsZUVuZGVkICYmICFzdHJlYW0uZGVzdHJveWVkXG4gIGlmICh3cml0YWJsZSkge1xuICAgIHN0cmVhbS5lbmQoKVxuICB9XG59XG5SZWFkYWJsZS5mcm9tID0gZnVuY3Rpb24gKGl0ZXJhYmxlLCBvcHRzKSB7XG4gIHJldHVybiBmcm9tKFJlYWRhYmxlLCBpdGVyYWJsZSwgb3B0cylcbn1cbmxldCB3ZWJTdHJlYW1zQWRhcHRlcnNcblxuLy8gTGF6eSB0byBhdm9pZCBjaXJjdWxhciByZWZlcmVuY2VzXG5mdW5jdGlvbiBsYXp5V2ViU3RyZWFtcygpIHtcbiAgaWYgKHdlYlN0cmVhbXNBZGFwdGVycyA9PT0gdW5kZWZpbmVkKSB3ZWJTdHJlYW1zQWRhcHRlcnMgPSB7fVxuICByZXR1cm4gd2ViU3RyZWFtc0FkYXB0ZXJzXG59XG5SZWFkYWJsZS5mcm9tV2ViID0gZnVuY3Rpb24gKHJlYWRhYmxlU3RyZWFtLCBvcHRpb25zKSB7XG4gIHJldHVybiBsYXp5V2ViU3RyZWFtcygpLm5ld1N0cmVhbVJlYWRhYmxlRnJvbVJlYWRhYmxlU3RyZWFtKHJlYWRhYmxlU3RyZWFtLCBvcHRpb25zKVxufVxuUmVhZGFibGUudG9XZWIgPSBmdW5jdGlvbiAoc3RyZWFtUmVhZGFibGUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGxhenlXZWJTdHJlYW1zKCkubmV3UmVhZGFibGVTdHJlYW1Gcm9tU3RyZWFtUmVhZGFibGUoc3RyZWFtUmVhZGFibGUsIG9wdGlvbnMpXG59XG5SZWFkYWJsZS53cmFwID0gZnVuY3Rpb24gKHNyYywgb3B0aW9ucykge1xuICB2YXIgX3JlZiwgX3NyYyRyZWFkYWJsZU9iamVjdE1vXG4gIHJldHVybiBuZXcgUmVhZGFibGUoe1xuICAgIG9iamVjdE1vZGU6XG4gICAgICAoX3JlZiA9XG4gICAgICAgIChfc3JjJHJlYWRhYmxlT2JqZWN0TW8gPSBzcmMucmVhZGFibGVPYmplY3RNb2RlKSAhPT0gbnVsbCAmJiBfc3JjJHJlYWRhYmxlT2JqZWN0TW8gIT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gX3NyYyRyZWFkYWJsZU9iamVjdE1vXG4gICAgICAgICAgOiBzcmMub2JqZWN0TW9kZSkgIT09IG51bGwgJiYgX3JlZiAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gX3JlZlxuICAgICAgICA6IHRydWUsXG4gICAgLi4ub3B0aW9ucyxcbiAgICBkZXN0cm95KGVyciwgY2FsbGJhY2spIHtcbiAgICAgIGRlc3Ryb3lJbXBsLmRlc3Ryb3llcihzcmMsIGVycilcbiAgICAgIGNhbGxiYWNrKGVycilcbiAgICB9XG4gIH0pLndyYXAoc3JjKVxufVxuIiwKICAgICIvKiByZXBsYWNlbWVudCBzdGFydCAqL1xuXG5jb25zdCBwcm9jZXNzID0gcmVxdWlyZSgncHJvY2Vzcy8nKVxuXG4vKiByZXBsYWNlbWVudCBlbmQgKi9cbi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyBBIGJpdCBzaW1wbGVyIHRoYW4gcmVhZGFibGUgc3RyZWFtcy5cbi8vIEltcGxlbWVudCBhbiBhc3luYyAuX3dyaXRlKGNodW5rLCBlbmNvZGluZywgY2IpLCBhbmQgaXQnbGwgaGFuZGxlIGFsbFxuLy8gdGhlIGRyYWluIGV2ZW50IGVtaXNzaW9uIGFuZCBidWZmZXJpbmcuXG5cbjsoJ3VzZSBzdHJpY3QnKVxuY29uc3Qge1xuICBBcnJheVByb3RvdHlwZVNsaWNlLFxuICBFcnJvcixcbiAgRnVuY3Rpb25Qcm90b3R5cGVTeW1ib2xIYXNJbnN0YW5jZSxcbiAgT2JqZWN0RGVmaW5lUHJvcGVydHksXG4gIE9iamVjdERlZmluZVByb3BlcnRpZXMsXG4gIE9iamVjdFNldFByb3RvdHlwZU9mLFxuICBTdHJpbmdQcm90b3R5cGVUb0xvd2VyQ2FzZSxcbiAgU3ltYm9sLFxuICBTeW1ib2xIYXNJbnN0YW5jZVxufSA9IHJlcXVpcmUoJy4uLy4uL291cnMvcHJpbW9yZGlhbHMnKVxubW9kdWxlLmV4cG9ydHMgPSBXcml0YWJsZVxuV3JpdGFibGUuV3JpdGFibGVTdGF0ZSA9IFdyaXRhYmxlU3RhdGVcbmNvbnN0IHsgRXZlbnRFbWl0dGVyOiBFRSB9ID0gcmVxdWlyZSgnZXZlbnRzJylcbmNvbnN0IFN0cmVhbSA9IHJlcXVpcmUoJy4vbGVnYWN5JykuU3RyZWFtXG5jb25zdCB7IEJ1ZmZlciB9ID0gcmVxdWlyZSgnYnVmZmVyJylcbmNvbnN0IGRlc3Ryb3lJbXBsID0gcmVxdWlyZSgnLi9kZXN0cm95JylcbmNvbnN0IHsgYWRkQWJvcnRTaWduYWwgfSA9IHJlcXVpcmUoJy4vYWRkLWFib3J0LXNpZ25hbCcpXG5jb25zdCB7IGdldEhpZ2hXYXRlck1hcmssIGdldERlZmF1bHRIaWdoV2F0ZXJNYXJrIH0gPSByZXF1aXJlKCcuL3N0YXRlJylcbmNvbnN0IHtcbiAgRVJSX0lOVkFMSURfQVJHX1RZUEUsXG4gIEVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVELFxuICBFUlJfTVVMVElQTEVfQ0FMTEJBQ0ssXG4gIEVSUl9TVFJFQU1fQ0FOTk9UX1BJUEUsXG4gIEVSUl9TVFJFQU1fREVTVFJPWUVELFxuICBFUlJfU1RSRUFNX0FMUkVBRFlfRklOSVNIRUQsXG4gIEVSUl9TVFJFQU1fTlVMTF9WQUxVRVMsXG4gIEVSUl9TVFJFQU1fV1JJVEVfQUZURVJfRU5ELFxuICBFUlJfVU5LTk9XTl9FTkNPRElOR1xufSA9IHJlcXVpcmUoJy4uLy4uL291cnMvZXJyb3JzJykuY29kZXNcbmNvbnN0IHsgZXJyb3JPckRlc3Ryb3kgfSA9IGRlc3Ryb3lJbXBsXG5PYmplY3RTZXRQcm90b3R5cGVPZihXcml0YWJsZS5wcm90b3R5cGUsIFN0cmVhbS5wcm90b3R5cGUpXG5PYmplY3RTZXRQcm90b3R5cGVPZihXcml0YWJsZSwgU3RyZWFtKVxuZnVuY3Rpb24gbm9wKCkge31cbmNvbnN0IGtPbkZpbmlzaGVkID0gU3ltYm9sKCdrT25GaW5pc2hlZCcpXG5mdW5jdGlvbiBXcml0YWJsZVN0YXRlKG9wdGlvbnMsIHN0cmVhbSwgaXNEdXBsZXgpIHtcbiAgLy8gRHVwbGV4IHN0cmVhbXMgYXJlIGJvdGggcmVhZGFibGUgYW5kIHdyaXRhYmxlLCBidXQgc2hhcmVcbiAgLy8gdGhlIHNhbWUgb3B0aW9ucyBvYmplY3QuXG4gIC8vIEhvd2V2ZXIsIHNvbWUgY2FzZXMgcmVxdWlyZSBzZXR0aW5nIG9wdGlvbnMgdG8gZGlmZmVyZW50XG4gIC8vIHZhbHVlcyBmb3IgdGhlIHJlYWRhYmxlIGFuZCB0aGUgd3JpdGFibGUgc2lkZXMgb2YgdGhlIGR1cGxleCBzdHJlYW0sXG4gIC8vIGUuZy4gb3B0aW9ucy5yZWFkYWJsZU9iamVjdE1vZGUgdnMuIG9wdGlvbnMud3JpdGFibGVPYmplY3RNb2RlLCBldGMuXG4gIGlmICh0eXBlb2YgaXNEdXBsZXggIT09ICdib29sZWFuJykgaXNEdXBsZXggPSBzdHJlYW0gaW5zdGFuY2VvZiByZXF1aXJlKCcuL2R1cGxleCcpXG5cbiAgLy8gT2JqZWN0IHN0cmVhbSBmbGFnIHRvIGluZGljYXRlIHdoZXRoZXIgb3Igbm90IHRoaXMgc3RyZWFtXG4gIC8vIGNvbnRhaW5zIGJ1ZmZlcnMgb3Igb2JqZWN0cy5cbiAgdGhpcy5vYmplY3RNb2RlID0gISEob3B0aW9ucyAmJiBvcHRpb25zLm9iamVjdE1vZGUpXG4gIGlmIChpc0R1cGxleCkgdGhpcy5vYmplY3RNb2RlID0gdGhpcy5vYmplY3RNb2RlIHx8ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy53cml0YWJsZU9iamVjdE1vZGUpXG5cbiAgLy8gVGhlIHBvaW50IGF0IHdoaWNoIHdyaXRlKCkgc3RhcnRzIHJldHVybmluZyBmYWxzZVxuICAvLyBOb3RlOiAwIGlzIGEgdmFsaWQgdmFsdWUsIG1lYW5zIHRoYXQgd2UgYWx3YXlzIHJldHVybiBmYWxzZSBpZlxuICAvLyB0aGUgZW50aXJlIGJ1ZmZlciBpcyBub3QgZmx1c2hlZCBpbW1lZGlhdGVseSBvbiB3cml0ZSgpLlxuICB0aGlzLmhpZ2hXYXRlck1hcmsgPSBvcHRpb25zXG4gICAgPyBnZXRIaWdoV2F0ZXJNYXJrKHRoaXMsIG9wdGlvbnMsICd3cml0YWJsZUhpZ2hXYXRlck1hcmsnLCBpc0R1cGxleClcbiAgICA6IGdldERlZmF1bHRIaWdoV2F0ZXJNYXJrKGZhbHNlKVxuXG4gIC8vIGlmIF9maW5hbCBoYXMgYmVlbiBjYWxsZWQuXG4gIHRoaXMuZmluYWxDYWxsZWQgPSBmYWxzZVxuXG4gIC8vIGRyYWluIGV2ZW50IGZsYWcuXG4gIHRoaXMubmVlZERyYWluID0gZmFsc2VcbiAgLy8gQXQgdGhlIHN0YXJ0IG9mIGNhbGxpbmcgZW5kKClcbiAgdGhpcy5lbmRpbmcgPSBmYWxzZVxuICAvLyBXaGVuIGVuZCgpIGhhcyBiZWVuIGNhbGxlZCwgYW5kIHJldHVybmVkLlxuICB0aGlzLmVuZGVkID0gZmFsc2VcbiAgLy8gV2hlbiAnZmluaXNoJyBpcyBlbWl0dGVkLlxuICB0aGlzLmZpbmlzaGVkID0gZmFsc2VcblxuICAvLyBIYXMgaXQgYmVlbiBkZXN0cm95ZWRcbiAgdGhpcy5kZXN0cm95ZWQgPSBmYWxzZVxuXG4gIC8vIFNob3VsZCB3ZSBkZWNvZGUgc3RyaW5ncyBpbnRvIGJ1ZmZlcnMgYmVmb3JlIHBhc3NpbmcgdG8gX3dyaXRlP1xuICAvLyB0aGlzIGlzIGhlcmUgc28gdGhhdCBzb21lIG5vZGUtY29yZSBzdHJlYW1zIGNhbiBvcHRpbWl6ZSBzdHJpbmdcbiAgLy8gaGFuZGxpbmcgYXQgYSBsb3dlciBsZXZlbC5cbiAgY29uc3Qgbm9EZWNvZGUgPSAhIShvcHRpb25zICYmIG9wdGlvbnMuZGVjb2RlU3RyaW5ncyA9PT0gZmFsc2UpXG4gIHRoaXMuZGVjb2RlU3RyaW5ncyA9ICFub0RlY29kZVxuXG4gIC8vIENyeXB0byBpcyBraW5kIG9mIG9sZCBhbmQgY3J1c3R5LiAgSGlzdG9yaWNhbGx5LCBpdHMgZGVmYXVsdCBzdHJpbmdcbiAgLy8gZW5jb2RpbmcgaXMgJ2JpbmFyeScgc28gd2UgaGF2ZSB0byBtYWtlIHRoaXMgY29uZmlndXJhYmxlLlxuICAvLyBFdmVyeXRoaW5nIGVsc2UgaW4gdGhlIHVuaXZlcnNlIHVzZXMgJ3V0ZjgnLCB0aG91Z2guXG4gIHRoaXMuZGVmYXVsdEVuY29kaW5nID0gKG9wdGlvbnMgJiYgb3B0aW9ucy5kZWZhdWx0RW5jb2RpbmcpIHx8ICd1dGY4J1xuXG4gIC8vIE5vdCBhbiBhY3R1YWwgYnVmZmVyIHdlIGtlZXAgdHJhY2sgb2YsIGJ1dCBhIG1lYXN1cmVtZW50XG4gIC8vIG9mIGhvdyBtdWNoIHdlJ3JlIHdhaXRpbmcgdG8gZ2V0IHB1c2hlZCB0byBzb21lIHVuZGVybHlpbmdcbiAgLy8gc29ja2V0IG9yIGZpbGUuXG4gIHRoaXMubGVuZ3RoID0gMFxuXG4gIC8vIEEgZmxhZyB0byBzZWUgd2hlbiB3ZSdyZSBpbiB0aGUgbWlkZGxlIG9mIGEgd3JpdGUuXG4gIHRoaXMud3JpdGluZyA9IGZhbHNlXG5cbiAgLy8gV2hlbiB0cnVlIGFsbCB3cml0ZXMgd2lsbCBiZSBidWZmZXJlZCB1bnRpbCAudW5jb3JrKCkgY2FsbC5cbiAgdGhpcy5jb3JrZWQgPSAwXG5cbiAgLy8gQSBmbGFnIHRvIGJlIGFibGUgdG8gdGVsbCBpZiB0aGUgb253cml0ZSBjYiBpcyBjYWxsZWQgaW1tZWRpYXRlbHksXG4gIC8vIG9yIG9uIGEgbGF0ZXIgdGljay4gIFdlIHNldCB0aGlzIHRvIHRydWUgYXQgZmlyc3QsIGJlY2F1c2UgYW55XG4gIC8vIGFjdGlvbnMgdGhhdCBzaG91bGRuJ3QgaGFwcGVuIHVudGlsIFwibGF0ZXJcIiBzaG91bGQgZ2VuZXJhbGx5IGFsc29cbiAgLy8gbm90IGhhcHBlbiBiZWZvcmUgdGhlIGZpcnN0IHdyaXRlIGNhbGwuXG4gIHRoaXMuc3luYyA9IHRydWVcblxuICAvLyBBIGZsYWcgdG8ga25vdyBpZiB3ZSdyZSBwcm9jZXNzaW5nIHByZXZpb3VzbHkgYnVmZmVyZWQgaXRlbXMsIHdoaWNoXG4gIC8vIG1heSBjYWxsIHRoZSBfd3JpdGUoKSBjYWxsYmFjayBpbiB0aGUgc2FtZSB0aWNrLCBzbyB0aGF0IHdlIGRvbid0XG4gIC8vIGVuZCB1cCBpbiBhbiBvdmVybGFwcGVkIG9ud3JpdGUgc2l0dWF0aW9uLlxuICB0aGlzLmJ1ZmZlclByb2Nlc3NpbmcgPSBmYWxzZVxuXG4gIC8vIFRoZSBjYWxsYmFjayB0aGF0J3MgcGFzc2VkIHRvIF93cml0ZShjaHVuaywgY2IpLlxuICB0aGlzLm9ud3JpdGUgPSBvbndyaXRlLmJpbmQodW5kZWZpbmVkLCBzdHJlYW0pXG5cbiAgLy8gVGhlIGNhbGxiYWNrIHRoYXQgdGhlIHVzZXIgc3VwcGxpZXMgdG8gd3JpdGUoY2h1bmssIGVuY29kaW5nLCBjYikuXG4gIHRoaXMud3JpdGVjYiA9IG51bGxcblxuICAvLyBUaGUgYW1vdW50IHRoYXQgaXMgYmVpbmcgd3JpdHRlbiB3aGVuIF93cml0ZSBpcyBjYWxsZWQuXG4gIHRoaXMud3JpdGVsZW4gPSAwXG5cbiAgLy8gU3RvcmFnZSBmb3IgZGF0YSBwYXNzZWQgdG8gdGhlIGFmdGVyV3JpdGUoKSBjYWxsYmFjayBpbiBjYXNlIG9mXG4gIC8vIHN5bmNocm9ub3VzIF93cml0ZSgpIGNvbXBsZXRpb24uXG4gIHRoaXMuYWZ0ZXJXcml0ZVRpY2tJbmZvID0gbnVsbFxuICByZXNldEJ1ZmZlcih0aGlzKVxuXG4gIC8vIE51bWJlciBvZiBwZW5kaW5nIHVzZXItc3VwcGxpZWQgd3JpdGUgY2FsbGJhY2tzXG4gIC8vIHRoaXMgbXVzdCBiZSAwIGJlZm9yZSAnZmluaXNoJyBjYW4gYmUgZW1pdHRlZC5cbiAgdGhpcy5wZW5kaW5nY2IgPSAwXG5cbiAgLy8gU3RyZWFtIGlzIHN0aWxsIGJlaW5nIGNvbnN0cnVjdGVkIGFuZCBjYW5ub3QgYmVcbiAgLy8gZGVzdHJveWVkIHVudGlsIGNvbnN0cnVjdGlvbiBmaW5pc2hlZCBvciBmYWlsZWQuXG4gIC8vIEFzeW5jIGNvbnN0cnVjdGlvbiBpcyBvcHQgaW4sIHRoZXJlZm9yZSB3ZSBzdGFydCBhc1xuICAvLyBjb25zdHJ1Y3RlZC5cbiAgdGhpcy5jb25zdHJ1Y3RlZCA9IHRydWVcblxuICAvLyBFbWl0IHByZWZpbmlzaCBpZiB0aGUgb25seSB0aGluZyB3ZSdyZSB3YWl0aW5nIGZvciBpcyBfd3JpdGUgY2JzXG4gIC8vIFRoaXMgaXMgcmVsZXZhbnQgZm9yIHN5bmNocm9ub3VzIFRyYW5zZm9ybSBzdHJlYW1zLlxuICB0aGlzLnByZWZpbmlzaGVkID0gZmFsc2VcblxuICAvLyBUcnVlIGlmIHRoZSBlcnJvciB3YXMgYWxyZWFkeSBlbWl0dGVkIGFuZCBzaG91bGQgbm90IGJlIHRocm93biBhZ2Fpbi5cbiAgdGhpcy5lcnJvckVtaXR0ZWQgPSBmYWxzZVxuXG4gIC8vIFNob3VsZCBjbG9zZSBiZSBlbWl0dGVkIG9uIGRlc3Ryb3kuIERlZmF1bHRzIHRvIHRydWUuXG4gIHRoaXMuZW1pdENsb3NlID0gIW9wdGlvbnMgfHwgb3B0aW9ucy5lbWl0Q2xvc2UgIT09IGZhbHNlXG5cbiAgLy8gU2hvdWxkIC5kZXN0cm95KCkgYmUgY2FsbGVkIGFmdGVyICdmaW5pc2gnIChhbmQgcG90ZW50aWFsbHkgJ2VuZCcpLlxuICB0aGlzLmF1dG9EZXN0cm95ID0gIW9wdGlvbnMgfHwgb3B0aW9ucy5hdXRvRGVzdHJveSAhPT0gZmFsc2VcblxuICAvLyBJbmRpY2F0ZXMgd2hldGhlciB0aGUgc3RyZWFtIGhhcyBlcnJvcmVkLiBXaGVuIHRydWUgYWxsIHdyaXRlKCkgY2FsbHNcbiAgLy8gc2hvdWxkIHJldHVybiBmYWxzZS4gVGhpcyBpcyBuZWVkZWQgc2luY2Ugd2hlbiBhdXRvRGVzdHJveVxuICAvLyBpcyBkaXNhYmxlZCB3ZSBuZWVkIGEgd2F5IHRvIHRlbGwgd2hldGhlciB0aGUgc3RyZWFtIGhhcyBmYWlsZWQuXG4gIHRoaXMuZXJyb3JlZCA9IG51bGxcblxuICAvLyBJbmRpY2F0ZXMgd2hldGhlciB0aGUgc3RyZWFtIGhhcyBmaW5pc2hlZCBkZXN0cm95aW5nLlxuICB0aGlzLmNsb3NlZCA9IGZhbHNlXG5cbiAgLy8gVHJ1ZSBpZiBjbG9zZSBoYXMgYmVlbiBlbWl0dGVkIG9yIHdvdWxkIGhhdmUgYmVlbiBlbWl0dGVkXG4gIC8vIGRlcGVuZGluZyBvbiBlbWl0Q2xvc2UuXG4gIHRoaXMuY2xvc2VFbWl0dGVkID0gZmFsc2VcbiAgdGhpc1trT25GaW5pc2hlZF0gPSBbXVxufVxuZnVuY3Rpb24gcmVzZXRCdWZmZXIoc3RhdGUpIHtcbiAgc3RhdGUuYnVmZmVyZWQgPSBbXVxuICBzdGF0ZS5idWZmZXJlZEluZGV4ID0gMFxuICBzdGF0ZS5hbGxCdWZmZXJzID0gdHJ1ZVxuICBzdGF0ZS5hbGxOb29wID0gdHJ1ZVxufVxuV3JpdGFibGVTdGF0ZS5wcm90b3R5cGUuZ2V0QnVmZmVyID0gZnVuY3Rpb24gZ2V0QnVmZmVyKCkge1xuICByZXR1cm4gQXJyYXlQcm90b3R5cGVTbGljZSh0aGlzLmJ1ZmZlcmVkLCB0aGlzLmJ1ZmZlcmVkSW5kZXgpXG59XG5PYmplY3REZWZpbmVQcm9wZXJ0eShXcml0YWJsZVN0YXRlLnByb3RvdHlwZSwgJ2J1ZmZlcmVkUmVxdWVzdENvdW50Jywge1xuICBfX3Byb3RvX186IG51bGwsXG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5idWZmZXJlZC5sZW5ndGggLSB0aGlzLmJ1ZmZlcmVkSW5kZXhcbiAgfVxufSlcbmZ1bmN0aW9uIFdyaXRhYmxlKG9wdGlvbnMpIHtcbiAgLy8gV3JpdGFibGUgY3RvciBpcyBhcHBsaWVkIHRvIER1cGxleGVzLCB0b28uXG4gIC8vIGByZWFsSGFzSW5zdGFuY2VgIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHVzaW5nIHBsYWluIGBpbnN0YW5jZW9mYFxuICAvLyB3b3VsZCByZXR1cm4gZmFsc2UsIGFzIG5vIGBfd3JpdGFibGVTdGF0ZWAgcHJvcGVydHkgaXMgYXR0YWNoZWQuXG5cbiAgLy8gVHJ5aW5nIHRvIHVzZSB0aGUgY3VzdG9tIGBpbnN0YW5jZW9mYCBmb3IgV3JpdGFibGUgaGVyZSB3aWxsIGFsc28gYnJlYWsgdGhlXG4gIC8vIE5vZGUuanMgTGF6eVRyYW5zZm9ybSBpbXBsZW1lbnRhdGlvbiwgd2hpY2ggaGFzIGEgbm9uLXRyaXZpYWwgZ2V0dGVyIGZvclxuICAvLyBgX3dyaXRhYmxlU3RhdGVgIHRoYXQgd291bGQgbGVhZCB0byBpbmZpbml0ZSByZWN1cnNpb24uXG5cbiAgLy8gQ2hlY2tpbmcgZm9yIGEgU3RyZWFtLkR1cGxleCBpbnN0YW5jZSBpcyBmYXN0ZXIgaGVyZSBpbnN0ZWFkIG9mIGluc2lkZVxuICAvLyB0aGUgV3JpdGFibGVTdGF0ZSBjb25zdHJ1Y3RvciwgYXQgbGVhc3Qgd2l0aCBWOCA2LjUuXG4gIGNvbnN0IGlzRHVwbGV4ID0gdGhpcyBpbnN0YW5jZW9mIHJlcXVpcmUoJy4vZHVwbGV4JylcbiAgaWYgKCFpc0R1cGxleCAmJiAhRnVuY3Rpb25Qcm90b3R5cGVTeW1ib2xIYXNJbnN0YW5jZShXcml0YWJsZSwgdGhpcykpIHJldHVybiBuZXcgV3JpdGFibGUob3B0aW9ucylcbiAgdGhpcy5fd3JpdGFibGVTdGF0ZSA9IG5ldyBXcml0YWJsZVN0YXRlKG9wdGlvbnMsIHRoaXMsIGlzRHVwbGV4KVxuICBpZiAob3B0aW9ucykge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy53cml0ZSA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fd3JpdGUgPSBvcHRpb25zLndyaXRlXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLndyaXRldiA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fd3JpdGV2ID0gb3B0aW9ucy53cml0ZXZcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuZGVzdHJveSA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fZGVzdHJveSA9IG9wdGlvbnMuZGVzdHJveVxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5maW5hbCA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fZmluYWwgPSBvcHRpb25zLmZpbmFsXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmNvbnN0cnVjdCA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fY29uc3RydWN0ID0gb3B0aW9ucy5jb25zdHJ1Y3RcbiAgICBpZiAob3B0aW9ucy5zaWduYWwpIGFkZEFib3J0U2lnbmFsKG9wdGlvbnMuc2lnbmFsLCB0aGlzKVxuICB9XG4gIFN0cmVhbS5jYWxsKHRoaXMsIG9wdGlvbnMpXG4gIGRlc3Ryb3lJbXBsLmNvbnN0cnVjdCh0aGlzLCAoKSA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLl93cml0YWJsZVN0YXRlXG4gICAgaWYgKCFzdGF0ZS53cml0aW5nKSB7XG4gICAgICBjbGVhckJ1ZmZlcih0aGlzLCBzdGF0ZSlcbiAgICB9XG4gICAgZmluaXNoTWF5YmUodGhpcywgc3RhdGUpXG4gIH0pXG59XG5PYmplY3REZWZpbmVQcm9wZXJ0eShXcml0YWJsZSwgU3ltYm9sSGFzSW5zdGFuY2UsIHtcbiAgX19wcm90b19fOiBudWxsLFxuICB2YWx1ZTogZnVuY3Rpb24gKG9iamVjdCkge1xuICAgIGlmIChGdW5jdGlvblByb3RvdHlwZVN5bWJvbEhhc0luc3RhbmNlKHRoaXMsIG9iamVjdCkpIHJldHVybiB0cnVlXG4gICAgaWYgKHRoaXMgIT09IFdyaXRhYmxlKSByZXR1cm4gZmFsc2VcbiAgICByZXR1cm4gb2JqZWN0ICYmIG9iamVjdC5fd3JpdGFibGVTdGF0ZSBpbnN0YW5jZW9mIFdyaXRhYmxlU3RhdGVcbiAgfVxufSlcblxuLy8gT3RoZXJ3aXNlIHBlb3BsZSBjYW4gcGlwZSBXcml0YWJsZSBzdHJlYW1zLCB3aGljaCBpcyBqdXN0IHdyb25nLlxuV3JpdGFibGUucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbiAoKSB7XG4gIGVycm9yT3JEZXN0cm95KHRoaXMsIG5ldyBFUlJfU1RSRUFNX0NBTk5PVF9QSVBFKCkpXG59XG5mdW5jdGlvbiBfd3JpdGUoc3RyZWFtLCBjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIGNvbnN0IHN0YXRlID0gc3RyZWFtLl93cml0YWJsZVN0YXRlXG4gIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYiA9IGVuY29kaW5nXG4gICAgZW5jb2RpbmcgPSBzdGF0ZS5kZWZhdWx0RW5jb2RpbmdcbiAgfSBlbHNlIHtcbiAgICBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9IHN0YXRlLmRlZmF1bHRFbmNvZGluZ1xuICAgIGVsc2UgaWYgKGVuY29kaW5nICE9PSAnYnVmZmVyJyAmJiAhQnVmZmVyLmlzRW5jb2RpbmcoZW5jb2RpbmcpKSB0aHJvdyBuZXcgRVJSX1VOS05PV05fRU5DT0RJTkcoZW5jb2RpbmcpXG4gICAgaWYgKHR5cGVvZiBjYiAhPT0gJ2Z1bmN0aW9uJykgY2IgPSBub3BcbiAgfVxuICBpZiAoY2h1bmsgPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRVJSX1NUUkVBTV9OVUxMX1ZBTFVFUygpXG4gIH0gZWxzZSBpZiAoIXN0YXRlLm9iamVjdE1vZGUpIHtcbiAgICBpZiAodHlwZW9mIGNodW5rID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKHN0YXRlLmRlY29kZVN0cmluZ3MgIT09IGZhbHNlKSB7XG4gICAgICAgIGNodW5rID0gQnVmZmVyLmZyb20oY2h1bmssIGVuY29kaW5nKVxuICAgICAgICBlbmNvZGluZyA9ICdidWZmZXInXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjaHVuayBpbnN0YW5jZW9mIEJ1ZmZlcikge1xuICAgICAgZW5jb2RpbmcgPSAnYnVmZmVyJ1xuICAgIH0gZWxzZSBpZiAoU3RyZWFtLl9pc1VpbnQ4QXJyYXkoY2h1bmspKSB7XG4gICAgICBjaHVuayA9IFN0cmVhbS5fdWludDhBcnJheVRvQnVmZmVyKGNodW5rKVxuICAgICAgZW5jb2RpbmcgPSAnYnVmZmVyJ1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoJ2NodW5rJywgWydzdHJpbmcnLCAnQnVmZmVyJywgJ1VpbnQ4QXJyYXknXSwgY2h1bmspXG4gICAgfVxuICB9XG4gIGxldCBlcnJcbiAgaWYgKHN0YXRlLmVuZGluZykge1xuICAgIGVyciA9IG5ldyBFUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORCgpXG4gIH0gZWxzZSBpZiAoc3RhdGUuZGVzdHJveWVkKSB7XG4gICAgZXJyID0gbmV3IEVSUl9TVFJFQU1fREVTVFJPWUVEKCd3cml0ZScpXG4gIH1cbiAgaWYgKGVycikge1xuICAgIHByb2Nlc3MubmV4dFRpY2soY2IsIGVycilcbiAgICBlcnJvck9yRGVzdHJveShzdHJlYW0sIGVyciwgdHJ1ZSlcbiAgICByZXR1cm4gZXJyXG4gIH1cbiAgc3RhdGUucGVuZGluZ2NiKytcbiAgcmV0dXJuIHdyaXRlT3JCdWZmZXIoc3RyZWFtLCBzdGF0ZSwgY2h1bmssIGVuY29kaW5nLCBjYilcbn1cbldyaXRhYmxlLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIHJldHVybiBfd3JpdGUodGhpcywgY2h1bmssIGVuY29kaW5nLCBjYikgPT09IHRydWVcbn1cbldyaXRhYmxlLnByb3RvdHlwZS5jb3JrID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLl93cml0YWJsZVN0YXRlLmNvcmtlZCsrXG59XG5Xcml0YWJsZS5wcm90b3R5cGUudW5jb3JrID0gZnVuY3Rpb24gKCkge1xuICBjb25zdCBzdGF0ZSA9IHRoaXMuX3dyaXRhYmxlU3RhdGVcbiAgaWYgKHN0YXRlLmNvcmtlZCkge1xuICAgIHN0YXRlLmNvcmtlZC0tXG4gICAgaWYgKCFzdGF0ZS53cml0aW5nKSBjbGVhckJ1ZmZlcih0aGlzLCBzdGF0ZSlcbiAgfVxufVxuV3JpdGFibGUucHJvdG90eXBlLnNldERlZmF1bHRFbmNvZGluZyA9IGZ1bmN0aW9uIHNldERlZmF1bHRFbmNvZGluZyhlbmNvZGluZykge1xuICAvLyBub2RlOjpQYXJzZUVuY29kaW5nKCkgcmVxdWlyZXMgbG93ZXIgY2FzZS5cbiAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZycpIGVuY29kaW5nID0gU3RyaW5nUHJvdG90eXBlVG9Mb3dlckNhc2UoZW5jb2RpbmcpXG4gIGlmICghQnVmZmVyLmlzRW5jb2RpbmcoZW5jb2RpbmcpKSB0aHJvdyBuZXcgRVJSX1VOS05PV05fRU5DT0RJTkcoZW5jb2RpbmcpXG4gIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVmYXVsdEVuY29kaW5nID0gZW5jb2RpbmdcbiAgcmV0dXJuIHRoaXNcbn1cblxuLy8gSWYgd2UncmUgYWxyZWFkeSB3cml0aW5nIHNvbWV0aGluZywgdGhlbiBqdXN0IHB1dCB0aGlzXG4vLyBpbiB0aGUgcXVldWUsIGFuZCB3YWl0IG91ciB0dXJuLiAgT3RoZXJ3aXNlLCBjYWxsIF93cml0ZVxuLy8gSWYgd2UgcmV0dXJuIGZhbHNlLCB0aGVuIHdlIG5lZWQgYSBkcmFpbiBldmVudCwgc28gc2V0IHRoYXQgZmxhZy5cbmZ1bmN0aW9uIHdyaXRlT3JCdWZmZXIoc3RyZWFtLCBzdGF0ZSwgY2h1bmssIGVuY29kaW5nLCBjYWxsYmFjaykge1xuICBjb25zdCBsZW4gPSBzdGF0ZS5vYmplY3RNb2RlID8gMSA6IGNodW5rLmxlbmd0aFxuICBzdGF0ZS5sZW5ndGggKz0gbGVuXG5cbiAgLy8gc3RyZWFtLl93cml0ZSByZXNldHMgc3RhdGUubGVuZ3RoXG4gIGNvbnN0IHJldCA9IHN0YXRlLmxlbmd0aCA8IHN0YXRlLmhpZ2hXYXRlck1hcmtcbiAgLy8gV2UgbXVzdCBlbnN1cmUgdGhhdCBwcmV2aW91cyBuZWVkRHJhaW4gd2lsbCBub3QgYmUgcmVzZXQgdG8gZmFsc2UuXG4gIGlmICghcmV0KSBzdGF0ZS5uZWVkRHJhaW4gPSB0cnVlXG4gIGlmIChzdGF0ZS53cml0aW5nIHx8IHN0YXRlLmNvcmtlZCB8fCBzdGF0ZS5lcnJvcmVkIHx8ICFzdGF0ZS5jb25zdHJ1Y3RlZCkge1xuICAgIHN0YXRlLmJ1ZmZlcmVkLnB1c2goe1xuICAgICAgY2h1bmssXG4gICAgICBlbmNvZGluZyxcbiAgICAgIGNhbGxiYWNrXG4gICAgfSlcbiAgICBpZiAoc3RhdGUuYWxsQnVmZmVycyAmJiBlbmNvZGluZyAhPT0gJ2J1ZmZlcicpIHtcbiAgICAgIHN0YXRlLmFsbEJ1ZmZlcnMgPSBmYWxzZVxuICAgIH1cbiAgICBpZiAoc3RhdGUuYWxsTm9vcCAmJiBjYWxsYmFjayAhPT0gbm9wKSB7XG4gICAgICBzdGF0ZS5hbGxOb29wID0gZmFsc2VcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgc3RhdGUud3JpdGVsZW4gPSBsZW5cbiAgICBzdGF0ZS53cml0ZWNiID0gY2FsbGJhY2tcbiAgICBzdGF0ZS53cml0aW5nID0gdHJ1ZVxuICAgIHN0YXRlLnN5bmMgPSB0cnVlXG4gICAgc3RyZWFtLl93cml0ZShjaHVuaywgZW5jb2RpbmcsIHN0YXRlLm9ud3JpdGUpXG4gICAgc3RhdGUuc3luYyA9IGZhbHNlXG4gIH1cblxuICAvLyBSZXR1cm4gZmFsc2UgaWYgZXJyb3JlZCBvciBkZXN0cm95ZWQgaW4gb3JkZXIgdG8gYnJlYWtcbiAgLy8gYW55IHN5bmNocm9ub3VzIHdoaWxlKHN0cmVhbS53cml0ZShkYXRhKSkgbG9vcHMuXG4gIHJldHVybiByZXQgJiYgIXN0YXRlLmVycm9yZWQgJiYgIXN0YXRlLmRlc3Ryb3llZFxufVxuZnVuY3Rpb24gZG9Xcml0ZShzdHJlYW0sIHN0YXRlLCB3cml0ZXYsIGxlbiwgY2h1bmssIGVuY29kaW5nLCBjYikge1xuICBzdGF0ZS53cml0ZWxlbiA9IGxlblxuICBzdGF0ZS53cml0ZWNiID0gY2JcbiAgc3RhdGUud3JpdGluZyA9IHRydWVcbiAgc3RhdGUuc3luYyA9IHRydWVcbiAgaWYgKHN0YXRlLmRlc3Ryb3llZCkgc3RhdGUub253cml0ZShuZXcgRVJSX1NUUkVBTV9ERVNUUk9ZRUQoJ3dyaXRlJykpXG4gIGVsc2UgaWYgKHdyaXRldikgc3RyZWFtLl93cml0ZXYoY2h1bmssIHN0YXRlLm9ud3JpdGUpXG4gIGVsc2Ugc3RyZWFtLl93cml0ZShjaHVuaywgZW5jb2RpbmcsIHN0YXRlLm9ud3JpdGUpXG4gIHN0YXRlLnN5bmMgPSBmYWxzZVxufVxuZnVuY3Rpb24gb253cml0ZUVycm9yKHN0cmVhbSwgc3RhdGUsIGVyLCBjYikge1xuICAtLXN0YXRlLnBlbmRpbmdjYlxuICBjYihlcilcbiAgLy8gRW5zdXJlIGNhbGxiYWNrcyBhcmUgaW52b2tlZCBldmVuIHdoZW4gYXV0b0Rlc3Ryb3kgaXNcbiAgLy8gbm90IGVuYWJsZWQuIFBhc3NpbmcgYGVyYCBoZXJlIGRvZXNuJ3QgbWFrZSBzZW5zZSBzaW5jZVxuICAvLyBpdCdzIHJlbGF0ZWQgdG8gb25lIHNwZWNpZmljIHdyaXRlLCBub3QgdG8gdGhlIGJ1ZmZlcmVkXG4gIC8vIHdyaXRlcy5cbiAgZXJyb3JCdWZmZXIoc3RhdGUpXG4gIC8vIFRoaXMgY2FuIGVtaXQgZXJyb3IsIGJ1dCBlcnJvciBtdXN0IGFsd2F5cyBmb2xsb3cgY2IuXG4gIGVycm9yT3JEZXN0cm95KHN0cmVhbSwgZXIpXG59XG5mdW5jdGlvbiBvbndyaXRlKHN0cmVhbSwgZXIpIHtcbiAgY29uc3Qgc3RhdGUgPSBzdHJlYW0uX3dyaXRhYmxlU3RhdGVcbiAgY29uc3Qgc3luYyA9IHN0YXRlLnN5bmNcbiAgY29uc3QgY2IgPSBzdGF0ZS53cml0ZWNiXG4gIGlmICh0eXBlb2YgY2IgIT09ICdmdW5jdGlvbicpIHtcbiAgICBlcnJvck9yRGVzdHJveShzdHJlYW0sIG5ldyBFUlJfTVVMVElQTEVfQ0FMTEJBQ0soKSlcbiAgICByZXR1cm5cbiAgfVxuICBzdGF0ZS53cml0aW5nID0gZmFsc2VcbiAgc3RhdGUud3JpdGVjYiA9IG51bGxcbiAgc3RhdGUubGVuZ3RoIC09IHN0YXRlLndyaXRlbGVuXG4gIHN0YXRlLndyaXRlbGVuID0gMFxuICBpZiAoZXIpIHtcbiAgICAvLyBBdm9pZCBWOCBsZWFrLCBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvcHVsbC8zNDEwMyNpc3N1ZWNvbW1lbnQtNjUyMDAyMzY0XG4gICAgZXIuc3RhY2sgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcblxuICAgIGlmICghc3RhdGUuZXJyb3JlZCkge1xuICAgICAgc3RhdGUuZXJyb3JlZCA9IGVyXG4gICAgfVxuXG4gICAgLy8gSW4gY2FzZSBvZiBkdXBsZXggc3RyZWFtcyB3ZSBuZWVkIHRvIG5vdGlmeSB0aGUgcmVhZGFibGUgc2lkZSBvZiB0aGVcbiAgICAvLyBlcnJvci5cbiAgICBpZiAoc3RyZWFtLl9yZWFkYWJsZVN0YXRlICYmICFzdHJlYW0uX3JlYWRhYmxlU3RhdGUuZXJyb3JlZCkge1xuICAgICAgc3RyZWFtLl9yZWFkYWJsZVN0YXRlLmVycm9yZWQgPSBlclxuICAgIH1cbiAgICBpZiAoc3luYykge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhvbndyaXRlRXJyb3IsIHN0cmVhbSwgc3RhdGUsIGVyLCBjYilcbiAgICB9IGVsc2Uge1xuICAgICAgb253cml0ZUVycm9yKHN0cmVhbSwgc3RhdGUsIGVyLCBjYilcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKHN0YXRlLmJ1ZmZlcmVkLmxlbmd0aCA+IHN0YXRlLmJ1ZmZlcmVkSW5kZXgpIHtcbiAgICAgIGNsZWFyQnVmZmVyKHN0cmVhbSwgc3RhdGUpXG4gICAgfVxuICAgIGlmIChzeW5jKSB7XG4gICAgICAvLyBJdCBpcyBhIGNvbW1vbiBjYXNlIHRoYXQgdGhlIGNhbGxiYWNrIHBhc3NlZCB0byAud3JpdGUoKSBpcyBhbHdheXNcbiAgICAgIC8vIHRoZSBzYW1lLiBJbiB0aGF0IGNhc2UsIHdlIGRvIG5vdCBzY2hlZHVsZSBhIG5ldyBuZXh0VGljaygpLCBidXRcbiAgICAgIC8vIHJhdGhlciBqdXN0IGluY3JlYXNlIGEgY291bnRlciwgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSBhbmQgYXZvaWRcbiAgICAgIC8vIG1lbW9yeSBhbGxvY2F0aW9ucy5cbiAgICAgIGlmIChzdGF0ZS5hZnRlcldyaXRlVGlja0luZm8gIT09IG51bGwgJiYgc3RhdGUuYWZ0ZXJXcml0ZVRpY2tJbmZvLmNiID09PSBjYikge1xuICAgICAgICBzdGF0ZS5hZnRlcldyaXRlVGlja0luZm8uY291bnQrK1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhdGUuYWZ0ZXJXcml0ZVRpY2tJbmZvID0ge1xuICAgICAgICAgIGNvdW50OiAxLFxuICAgICAgICAgIGNiLFxuICAgICAgICAgIHN0cmVhbSxcbiAgICAgICAgICBzdGF0ZVxuICAgICAgICB9XG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soYWZ0ZXJXcml0ZVRpY2ssIHN0YXRlLmFmdGVyV3JpdGVUaWNrSW5mbylcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYWZ0ZXJXcml0ZShzdHJlYW0sIHN0YXRlLCAxLCBjYilcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGFmdGVyV3JpdGVUaWNrKHsgc3RyZWFtLCBzdGF0ZSwgY291bnQsIGNiIH0pIHtcbiAgc3RhdGUuYWZ0ZXJXcml0ZVRpY2tJbmZvID0gbnVsbFxuICByZXR1cm4gYWZ0ZXJXcml0ZShzdHJlYW0sIHN0YXRlLCBjb3VudCwgY2IpXG59XG5mdW5jdGlvbiBhZnRlcldyaXRlKHN0cmVhbSwgc3RhdGUsIGNvdW50LCBjYikge1xuICBjb25zdCBuZWVkRHJhaW4gPSAhc3RhdGUuZW5kaW5nICYmICFzdHJlYW0uZGVzdHJveWVkICYmIHN0YXRlLmxlbmd0aCA9PT0gMCAmJiBzdGF0ZS5uZWVkRHJhaW5cbiAgaWYgKG5lZWREcmFpbikge1xuICAgIHN0YXRlLm5lZWREcmFpbiA9IGZhbHNlXG4gICAgc3RyZWFtLmVtaXQoJ2RyYWluJylcbiAgfVxuICB3aGlsZSAoY291bnQtLSA+IDApIHtcbiAgICBzdGF0ZS5wZW5kaW5nY2ItLVxuICAgIGNiKClcbiAgfVxuICBpZiAoc3RhdGUuZGVzdHJveWVkKSB7XG4gICAgZXJyb3JCdWZmZXIoc3RhdGUpXG4gIH1cbiAgZmluaXNoTWF5YmUoc3RyZWFtLCBzdGF0ZSlcbn1cblxuLy8gSWYgdGhlcmUncyBzb21ldGhpbmcgaW4gdGhlIGJ1ZmZlciB3YWl0aW5nLCB0aGVuIGludm9rZSBjYWxsYmFja3MuXG5mdW5jdGlvbiBlcnJvckJ1ZmZlcihzdGF0ZSkge1xuICBpZiAoc3RhdGUud3JpdGluZykge1xuICAgIHJldHVyblxuICB9XG4gIGZvciAobGV0IG4gPSBzdGF0ZS5idWZmZXJlZEluZGV4OyBuIDwgc3RhdGUuYnVmZmVyZWQubGVuZ3RoOyArK24pIHtcbiAgICB2YXIgX3N0YXRlJGVycm9yZWRcbiAgICBjb25zdCB7IGNodW5rLCBjYWxsYmFjayB9ID0gc3RhdGUuYnVmZmVyZWRbbl1cbiAgICBjb25zdCBsZW4gPSBzdGF0ZS5vYmplY3RNb2RlID8gMSA6IGNodW5rLmxlbmd0aFxuICAgIHN0YXRlLmxlbmd0aCAtPSBsZW5cbiAgICBjYWxsYmFjayhcbiAgICAgIChfc3RhdGUkZXJyb3JlZCA9IHN0YXRlLmVycm9yZWQpICE9PSBudWxsICYmIF9zdGF0ZSRlcnJvcmVkICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBfc3RhdGUkZXJyb3JlZFxuICAgICAgICA6IG5ldyBFUlJfU1RSRUFNX0RFU1RST1lFRCgnd3JpdGUnKVxuICAgIClcbiAgfVxuICBjb25zdCBvbmZpbmlzaENhbGxiYWNrcyA9IHN0YXRlW2tPbkZpbmlzaGVkXS5zcGxpY2UoMClcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBvbmZpbmlzaENhbGxiYWNrcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBfc3RhdGUkZXJyb3JlZDJcbiAgICBvbmZpbmlzaENhbGxiYWNrc1tpXShcbiAgICAgIChfc3RhdGUkZXJyb3JlZDIgPSBzdGF0ZS5lcnJvcmVkKSAhPT0gbnVsbCAmJiBfc3RhdGUkZXJyb3JlZDIgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IF9zdGF0ZSRlcnJvcmVkMlxuICAgICAgICA6IG5ldyBFUlJfU1RSRUFNX0RFU1RST1lFRCgnZW5kJylcbiAgICApXG4gIH1cbiAgcmVzZXRCdWZmZXIoc3RhdGUpXG59XG5cbi8vIElmIHRoZXJlJ3Mgc29tZXRoaW5nIGluIHRoZSBidWZmZXIgd2FpdGluZywgdGhlbiBwcm9jZXNzIGl0LlxuZnVuY3Rpb24gY2xlYXJCdWZmZXIoc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoc3RhdGUuY29ya2VkIHx8IHN0YXRlLmJ1ZmZlclByb2Nlc3NpbmcgfHwgc3RhdGUuZGVzdHJveWVkIHx8ICFzdGF0ZS5jb25zdHJ1Y3RlZCkge1xuICAgIHJldHVyblxuICB9XG4gIGNvbnN0IHsgYnVmZmVyZWQsIGJ1ZmZlcmVkSW5kZXgsIG9iamVjdE1vZGUgfSA9IHN0YXRlXG4gIGNvbnN0IGJ1ZmZlcmVkTGVuZ3RoID0gYnVmZmVyZWQubGVuZ3RoIC0gYnVmZmVyZWRJbmRleFxuICBpZiAoIWJ1ZmZlcmVkTGVuZ3RoKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgbGV0IGkgPSBidWZmZXJlZEluZGV4XG4gIHN0YXRlLmJ1ZmZlclByb2Nlc3NpbmcgPSB0cnVlXG4gIGlmIChidWZmZXJlZExlbmd0aCA+IDEgJiYgc3RyZWFtLl93cml0ZXYpIHtcbiAgICBzdGF0ZS5wZW5kaW5nY2IgLT0gYnVmZmVyZWRMZW5ndGggLSAxXG4gICAgY29uc3QgY2FsbGJhY2sgPSBzdGF0ZS5hbGxOb29wXG4gICAgICA/IG5vcFxuICAgICAgOiAoZXJyKSA9PiB7XG4gICAgICAgICAgZm9yIChsZXQgbiA9IGk7IG4gPCBidWZmZXJlZC5sZW5ndGg7ICsrbikge1xuICAgICAgICAgICAgYnVmZmVyZWRbbl0uY2FsbGJhY2soZXJyKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIC8vIE1ha2UgYSBjb3B5IG9mIGBidWZmZXJlZGAgaWYgaXQncyBnb2luZyB0byBiZSB1c2VkIGJ5IGBjYWxsYmFja2AgYWJvdmUsXG4gICAgLy8gc2luY2UgYGRvV3JpdGVgIHdpbGwgbXV0YXRlIHRoZSBhcnJheS5cbiAgICBjb25zdCBjaHVua3MgPSBzdGF0ZS5hbGxOb29wICYmIGkgPT09IDAgPyBidWZmZXJlZCA6IEFycmF5UHJvdG90eXBlU2xpY2UoYnVmZmVyZWQsIGkpXG4gICAgY2h1bmtzLmFsbEJ1ZmZlcnMgPSBzdGF0ZS5hbGxCdWZmZXJzXG4gICAgZG9Xcml0ZShzdHJlYW0sIHN0YXRlLCB0cnVlLCBzdGF0ZS5sZW5ndGgsIGNodW5rcywgJycsIGNhbGxiYWNrKVxuICAgIHJlc2V0QnVmZmVyKHN0YXRlKVxuICB9IGVsc2Uge1xuICAgIGRvIHtcbiAgICAgIGNvbnN0IHsgY2h1bmssIGVuY29kaW5nLCBjYWxsYmFjayB9ID0gYnVmZmVyZWRbaV1cbiAgICAgIGJ1ZmZlcmVkW2krK10gPSBudWxsXG4gICAgICBjb25zdCBsZW4gPSBvYmplY3RNb2RlID8gMSA6IGNodW5rLmxlbmd0aFxuICAgICAgZG9Xcml0ZShzdHJlYW0sIHN0YXRlLCBmYWxzZSwgbGVuLCBjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKVxuICAgIH0gd2hpbGUgKGkgPCBidWZmZXJlZC5sZW5ndGggJiYgIXN0YXRlLndyaXRpbmcpXG4gICAgaWYgKGkgPT09IGJ1ZmZlcmVkLmxlbmd0aCkge1xuICAgICAgcmVzZXRCdWZmZXIoc3RhdGUpXG4gICAgfSBlbHNlIGlmIChpID4gMjU2KSB7XG4gICAgICBidWZmZXJlZC5zcGxpY2UoMCwgaSlcbiAgICAgIHN0YXRlLmJ1ZmZlcmVkSW5kZXggPSAwXG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLmJ1ZmZlcmVkSW5kZXggPSBpXG4gICAgfVxuICB9XG4gIHN0YXRlLmJ1ZmZlclByb2Nlc3NpbmcgPSBmYWxzZVxufVxuV3JpdGFibGUucHJvdG90eXBlLl93cml0ZSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIGlmICh0aGlzLl93cml0ZXYpIHtcbiAgICB0aGlzLl93cml0ZXYoXG4gICAgICBbXG4gICAgICAgIHtcbiAgICAgICAgICBjaHVuayxcbiAgICAgICAgICBlbmNvZGluZ1xuICAgICAgICB9XG4gICAgICBdLFxuICAgICAgY2JcbiAgICApXG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVEKCdfd3JpdGUoKScpXG4gIH1cbn1cbldyaXRhYmxlLnByb3RvdHlwZS5fd3JpdGV2ID0gbnVsbFxuV3JpdGFibGUucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIGNvbnN0IHN0YXRlID0gdGhpcy5fd3JpdGFibGVTdGF0ZVxuICBpZiAodHlwZW9mIGNodW5rID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2IgPSBjaHVua1xuICAgIGNodW5rID0gbnVsbFxuICAgIGVuY29kaW5nID0gbnVsbFxuICB9IGVsc2UgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNiID0gZW5jb2RpbmdcbiAgICBlbmNvZGluZyA9IG51bGxcbiAgfVxuICBsZXQgZXJyXG4gIGlmIChjaHVuayAhPT0gbnVsbCAmJiBjaHVuayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgcmV0ID0gX3dyaXRlKHRoaXMsIGNodW5rLCBlbmNvZGluZylcbiAgICBpZiAocmV0IGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIGVyciA9IHJldFxuICAgIH1cbiAgfVxuXG4gIC8vIC5lbmQoKSBmdWxseSB1bmNvcmtzLlxuICBpZiAoc3RhdGUuY29ya2VkKSB7XG4gICAgc3RhdGUuY29ya2VkID0gMVxuICAgIHRoaXMudW5jb3JrKClcbiAgfVxuICBpZiAoZXJyKSB7XG4gICAgLy8gRG8gbm90aGluZy4uLlxuICB9IGVsc2UgaWYgKCFzdGF0ZS5lcnJvcmVkICYmICFzdGF0ZS5lbmRpbmcpIHtcbiAgICAvLyBUaGlzIGlzIGZvcmdpdmluZyBpbiB0ZXJtcyBvZiB1bm5lY2Vzc2FyeSBjYWxscyB0byBlbmQoKSBhbmQgY2FuIGhpZGVcbiAgICAvLyBsb2dpYyBlcnJvcnMuIEhvd2V2ZXIsIHVzdWFsbHkgc3VjaCBlcnJvcnMgYXJlIGhhcm1sZXNzIGFuZCBjYXVzaW5nIGFcbiAgICAvLyBoYXJkIGVycm9yIGNhbiBiZSBkaXNwcm9wb3J0aW9uYXRlbHkgZGVzdHJ1Y3RpdmUuIEl0IGlzIG5vdCBhbHdheXNcbiAgICAvLyB0cml2aWFsIGZvciB0aGUgdXNlciB0byBkZXRlcm1pbmUgd2hldGhlciBlbmQoKSBuZWVkcyB0byBiZSBjYWxsZWRcbiAgICAvLyBvciBub3QuXG5cbiAgICBzdGF0ZS5lbmRpbmcgPSB0cnVlXG4gICAgZmluaXNoTWF5YmUodGhpcywgc3RhdGUsIHRydWUpXG4gICAgc3RhdGUuZW5kZWQgPSB0cnVlXG4gIH0gZWxzZSBpZiAoc3RhdGUuZmluaXNoZWQpIHtcbiAgICBlcnIgPSBuZXcgRVJSX1NUUkVBTV9BTFJFQURZX0ZJTklTSEVEKCdlbmQnKVxuICB9IGVsc2UgaWYgKHN0YXRlLmRlc3Ryb3llZCkge1xuICAgIGVyciA9IG5ldyBFUlJfU1RSRUFNX0RFU1RST1lFRCgnZW5kJylcbiAgfVxuICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKGVyciB8fCBzdGF0ZS5maW5pc2hlZCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhjYiwgZXJyKVxuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZVtrT25GaW5pc2hlZF0ucHVzaChjYilcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cbmZ1bmN0aW9uIG5lZWRGaW5pc2goc3RhdGUpIHtcbiAgcmV0dXJuIChcbiAgICBzdGF0ZS5lbmRpbmcgJiZcbiAgICAhc3RhdGUuZGVzdHJveWVkICYmXG4gICAgc3RhdGUuY29uc3RydWN0ZWQgJiZcbiAgICBzdGF0ZS5sZW5ndGggPT09IDAgJiZcbiAgICAhc3RhdGUuZXJyb3JlZCAmJlxuICAgIHN0YXRlLmJ1ZmZlcmVkLmxlbmd0aCA9PT0gMCAmJlxuICAgICFzdGF0ZS5maW5pc2hlZCAmJlxuICAgICFzdGF0ZS53cml0aW5nICYmXG4gICAgIXN0YXRlLmVycm9yRW1pdHRlZCAmJlxuICAgICFzdGF0ZS5jbG9zZUVtaXR0ZWRcbiAgKVxufVxuZnVuY3Rpb24gY2FsbEZpbmFsKHN0cmVhbSwgc3RhdGUpIHtcbiAgbGV0IGNhbGxlZCA9IGZhbHNlXG4gIGZ1bmN0aW9uIG9uRmluaXNoKGVycikge1xuICAgIGlmIChjYWxsZWQpIHtcbiAgICAgIGVycm9yT3JEZXN0cm95KHN0cmVhbSwgZXJyICE9PSBudWxsICYmIGVyciAhPT0gdW5kZWZpbmVkID8gZXJyIDogRVJSX01VTFRJUExFX0NBTExCQUNLKCkpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY2FsbGVkID0gdHJ1ZVxuICAgIHN0YXRlLnBlbmRpbmdjYi0tXG4gICAgaWYgKGVycikge1xuICAgICAgY29uc3Qgb25maW5pc2hDYWxsYmFja3MgPSBzdGF0ZVtrT25GaW5pc2hlZF0uc3BsaWNlKDApXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9uZmluaXNoQ2FsbGJhY2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG9uZmluaXNoQ2FsbGJhY2tzW2ldKGVycilcbiAgICAgIH1cbiAgICAgIGVycm9yT3JEZXN0cm95KHN0cmVhbSwgZXJyLCBzdGF0ZS5zeW5jKVxuICAgIH0gZWxzZSBpZiAobmVlZEZpbmlzaChzdGF0ZSkpIHtcbiAgICAgIHN0YXRlLnByZWZpbmlzaGVkID0gdHJ1ZVxuICAgICAgc3RyZWFtLmVtaXQoJ3ByZWZpbmlzaCcpXG4gICAgICAvLyBCYWNrd2FyZHMgY29tcGF0LiBEb24ndCBjaGVjayBzdGF0ZS5zeW5jIGhlcmUuXG4gICAgICAvLyBTb21lIHN0cmVhbXMgYXNzdW1lICdmaW5pc2gnIHdpbGwgYmUgZW1pdHRlZFxuICAgICAgLy8gYXN5bmNocm9ub3VzbHkgcmVsYXRpdmUgdG8gX2ZpbmFsIGNhbGxiYWNrLlxuICAgICAgc3RhdGUucGVuZGluZ2NiKytcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZmluaXNoLCBzdHJlYW0sIHN0YXRlKVxuICAgIH1cbiAgfVxuICBzdGF0ZS5zeW5jID0gdHJ1ZVxuICBzdGF0ZS5wZW5kaW5nY2IrK1xuICB0cnkge1xuICAgIHN0cmVhbS5fZmluYWwob25GaW5pc2gpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIG9uRmluaXNoKGVycilcbiAgfVxuICBzdGF0ZS5zeW5jID0gZmFsc2Vcbn1cbmZ1bmN0aW9uIHByZWZpbmlzaChzdHJlYW0sIHN0YXRlKSB7XG4gIGlmICghc3RhdGUucHJlZmluaXNoZWQgJiYgIXN0YXRlLmZpbmFsQ2FsbGVkKSB7XG4gICAgaWYgKHR5cGVvZiBzdHJlYW0uX2ZpbmFsID09PSAnZnVuY3Rpb24nICYmICFzdGF0ZS5kZXN0cm95ZWQpIHtcbiAgICAgIHN0YXRlLmZpbmFsQ2FsbGVkID0gdHJ1ZVxuICAgICAgY2FsbEZpbmFsKHN0cmVhbSwgc3RhdGUpXG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLnByZWZpbmlzaGVkID0gdHJ1ZVxuICAgICAgc3RyZWFtLmVtaXQoJ3ByZWZpbmlzaCcpXG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBmaW5pc2hNYXliZShzdHJlYW0sIHN0YXRlLCBzeW5jKSB7XG4gIGlmIChuZWVkRmluaXNoKHN0YXRlKSkge1xuICAgIHByZWZpbmlzaChzdHJlYW0sIHN0YXRlKVxuICAgIGlmIChzdGF0ZS5wZW5kaW5nY2IgPT09IDApIHtcbiAgICAgIGlmIChzeW5jKSB7XG4gICAgICAgIHN0YXRlLnBlbmRpbmdjYisrXG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soXG4gICAgICAgICAgKHN0cmVhbSwgc3RhdGUpID0+IHtcbiAgICAgICAgICAgIGlmIChuZWVkRmluaXNoKHN0YXRlKSkge1xuICAgICAgICAgICAgICBmaW5pc2goc3RyZWFtLCBzdGF0ZSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHN0YXRlLnBlbmRpbmdjYi0tXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBzdHJlYW0sXG4gICAgICAgICAgc3RhdGVcbiAgICAgICAgKVxuICAgICAgfSBlbHNlIGlmIChuZWVkRmluaXNoKHN0YXRlKSkge1xuICAgICAgICBzdGF0ZS5wZW5kaW5nY2IrK1xuICAgICAgICBmaW5pc2goc3RyZWFtLCBzdGF0ZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGZpbmlzaChzdHJlYW0sIHN0YXRlKSB7XG4gIHN0YXRlLnBlbmRpbmdjYi0tXG4gIHN0YXRlLmZpbmlzaGVkID0gdHJ1ZVxuICBjb25zdCBvbmZpbmlzaENhbGxiYWNrcyA9IHN0YXRlW2tPbkZpbmlzaGVkXS5zcGxpY2UoMClcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBvbmZpbmlzaENhbGxiYWNrcy5sZW5ndGg7IGkrKykge1xuICAgIG9uZmluaXNoQ2FsbGJhY2tzW2ldKClcbiAgfVxuICBzdHJlYW0uZW1pdCgnZmluaXNoJylcbiAgaWYgKHN0YXRlLmF1dG9EZXN0cm95KSB7XG4gICAgLy8gSW4gY2FzZSBvZiBkdXBsZXggc3RyZWFtcyB3ZSBuZWVkIGEgd2F5IHRvIGRldGVjdFxuICAgIC8vIGlmIHRoZSByZWFkYWJsZSBzaWRlIGlzIHJlYWR5IGZvciBhdXRvRGVzdHJveSBhcyB3ZWxsLlxuICAgIGNvbnN0IHJTdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZVxuICAgIGNvbnN0IGF1dG9EZXN0cm95ID1cbiAgICAgICFyU3RhdGUgfHxcbiAgICAgIChyU3RhdGUuYXV0b0Rlc3Ryb3kgJiZcbiAgICAgICAgLy8gV2UgZG9uJ3QgZXhwZWN0IHRoZSByZWFkYWJsZSB0byBldmVyICdlbmQnXG4gICAgICAgIC8vIGlmIHJlYWRhYmxlIGlzIGV4cGxpY2l0bHkgc2V0IHRvIGZhbHNlLlxuICAgICAgICAoclN0YXRlLmVuZEVtaXR0ZWQgfHwgclN0YXRlLnJlYWRhYmxlID09PSBmYWxzZSkpXG4gICAgaWYgKGF1dG9EZXN0cm95KSB7XG4gICAgICBzdHJlYW0uZGVzdHJveSgpXG4gICAgfVxuICB9XG59XG5PYmplY3REZWZpbmVQcm9wZXJ0aWVzKFdyaXRhYmxlLnByb3RvdHlwZSwge1xuICBjbG9zZWQ6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUgPyB0aGlzLl93cml0YWJsZVN0YXRlLmNsb3NlZCA6IGZhbHNlXG4gICAgfVxuICB9LFxuICBkZXN0cm95ZWQ6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUgPyB0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZCA6IGZhbHNlXG4gICAgfSxcbiAgICBzZXQodmFsdWUpIHtcbiAgICAgIC8vIEJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHRoZSB1c2VyIGlzIGV4cGxpY2l0bHkgbWFuYWdpbmcgZGVzdHJveWVkLlxuICAgICAgaWYgKHRoaXMuX3dyaXRhYmxlU3RhdGUpIHtcbiAgICAgICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQgPSB2YWx1ZVxuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgd3JpdGFibGU6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZ2V0KCkge1xuICAgICAgY29uc3QgdyA9IHRoaXMuX3dyaXRhYmxlU3RhdGVcbiAgICAgIC8vIHcud3JpdGFibGUgPT09IGZhbHNlIG1lYW5zIHRoYXQgdGhpcyBpcyBwYXJ0IG9mIGEgRHVwbGV4IHN0cmVhbVxuICAgICAgLy8gd2hlcmUgdGhlIHdyaXRhYmxlIHNpZGUgd2FzIGRpc2FibGVkIHVwb24gY29uc3RydWN0aW9uLlxuICAgICAgLy8gQ29tcGF0LiBUaGUgdXNlciBtaWdodCBtYW51YWxseSBkaXNhYmxlIHdyaXRhYmxlIHNpZGUgdGhyb3VnaFxuICAgICAgLy8gZGVwcmVjYXRlZCBzZXR0ZXIuXG4gICAgICByZXR1cm4gISF3ICYmIHcud3JpdGFibGUgIT09IGZhbHNlICYmICF3LmRlc3Ryb3llZCAmJiAhdy5lcnJvcmVkICYmICF3LmVuZGluZyAmJiAhdy5lbmRlZFxuICAgIH0sXG4gICAgc2V0KHZhbCkge1xuICAgICAgLy8gQmFja3dhcmRzIGNvbXBhdGlibGUuXG4gICAgICBpZiAodGhpcy5fd3JpdGFibGVTdGF0ZSkge1xuICAgICAgICB0aGlzLl93cml0YWJsZVN0YXRlLndyaXRhYmxlID0gISF2YWxcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIHdyaXRhYmxlRmluaXNoZWQ6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUgPyB0aGlzLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkIDogZmFsc2VcbiAgICB9XG4gIH0sXG4gIHdyaXRhYmxlT2JqZWN0TW9kZToge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSA/IHRoaXMuX3dyaXRhYmxlU3RhdGUub2JqZWN0TW9kZSA6IGZhbHNlXG4gICAgfVxuICB9LFxuICB3cml0YWJsZUJ1ZmZlcjoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSAmJiB0aGlzLl93cml0YWJsZVN0YXRlLmdldEJ1ZmZlcigpXG4gICAgfVxuICB9LFxuICB3cml0YWJsZUVuZGVkOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl93cml0YWJsZVN0YXRlID8gdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRpbmcgOiBmYWxzZVxuICAgIH1cbiAgfSxcbiAgd3JpdGFibGVOZWVkRHJhaW46IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZ2V0KCkge1xuICAgICAgY29uc3Qgd1N0YXRlID0gdGhpcy5fd3JpdGFibGVTdGF0ZVxuICAgICAgaWYgKCF3U3RhdGUpIHJldHVybiBmYWxzZVxuICAgICAgcmV0dXJuICF3U3RhdGUuZGVzdHJveWVkICYmICF3U3RhdGUuZW5kaW5nICYmIHdTdGF0ZS5uZWVkRHJhaW5cbiAgICB9XG4gIH0sXG4gIHdyaXRhYmxlSGlnaFdhdGVyTWFyazoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSAmJiB0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcmtcbiAgICB9XG4gIH0sXG4gIHdyaXRhYmxlQ29ya2VkOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl93cml0YWJsZVN0YXRlID8gdGhpcy5fd3JpdGFibGVTdGF0ZS5jb3JrZWQgOiAwXG4gICAgfVxuICB9LFxuICB3cml0YWJsZUxlbmd0aDoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSAmJiB0aGlzLl93cml0YWJsZVN0YXRlLmxlbmd0aFxuICAgIH1cbiAgfSxcbiAgZXJyb3JlZDoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSA/IHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JlZCA6IG51bGxcbiAgICB9XG4gIH0sXG4gIHdyaXRhYmxlQWJvcnRlZDoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiAhIShcbiAgICAgICAgdGhpcy5fd3JpdGFibGVTdGF0ZS53cml0YWJsZSAhPT0gZmFsc2UgJiZcbiAgICAgICAgKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkIHx8IHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JlZCkgJiZcbiAgICAgICAgIXRoaXMuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWRcbiAgICAgIClcbiAgICB9XG4gIH1cbn0pXG5jb25zdCBkZXN0cm95ID0gZGVzdHJveUltcGwuZGVzdHJveVxuV3JpdGFibGUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoZXJyLCBjYikge1xuICBjb25zdCBzdGF0ZSA9IHRoaXMuX3dyaXRhYmxlU3RhdGVcblxuICAvLyBJbnZva2UgcGVuZGluZyBjYWxsYmFja3MuXG4gIGlmICghc3RhdGUuZGVzdHJveWVkICYmIChzdGF0ZS5idWZmZXJlZEluZGV4IDwgc3RhdGUuYnVmZmVyZWQubGVuZ3RoIHx8IHN0YXRlW2tPbkZpbmlzaGVkXS5sZW5ndGgpKSB7XG4gICAgcHJvY2Vzcy5uZXh0VGljayhlcnJvckJ1ZmZlciwgc3RhdGUpXG4gIH1cbiAgZGVzdHJveS5jYWxsKHRoaXMsIGVyciwgY2IpXG4gIHJldHVybiB0aGlzXG59XG5Xcml0YWJsZS5wcm90b3R5cGUuX3VuZGVzdHJveSA9IGRlc3Ryb3lJbXBsLnVuZGVzdHJveVxuV3JpdGFibGUucHJvdG90eXBlLl9kZXN0cm95ID0gZnVuY3Rpb24gKGVyciwgY2IpIHtcbiAgY2IoZXJyKVxufVxuV3JpdGFibGUucHJvdG90eXBlW0VFLmNhcHR1cmVSZWplY3Rpb25TeW1ib2xdID0gZnVuY3Rpb24gKGVycikge1xuICB0aGlzLmRlc3Ryb3koZXJyKVxufVxubGV0IHdlYlN0cmVhbXNBZGFwdGVyc1xuXG4vLyBMYXp5IHRvIGF2b2lkIGNpcmN1bGFyIHJlZmVyZW5jZXNcbmZ1bmN0aW9uIGxhenlXZWJTdHJlYW1zKCkge1xuICBpZiAod2ViU3RyZWFtc0FkYXB0ZXJzID09PSB1bmRlZmluZWQpIHdlYlN0cmVhbXNBZGFwdGVycyA9IHt9XG4gIHJldHVybiB3ZWJTdHJlYW1zQWRhcHRlcnNcbn1cbldyaXRhYmxlLmZyb21XZWIgPSBmdW5jdGlvbiAod3JpdGFibGVTdHJlYW0sIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGxhenlXZWJTdHJlYW1zKCkubmV3U3RyZWFtV3JpdGFibGVGcm9tV3JpdGFibGVTdHJlYW0od3JpdGFibGVTdHJlYW0sIG9wdGlvbnMpXG59XG5Xcml0YWJsZS50b1dlYiA9IGZ1bmN0aW9uIChzdHJlYW1Xcml0YWJsZSkge1xuICByZXR1cm4gbGF6eVdlYlN0cmVhbXMoKS5uZXdXcml0YWJsZVN0cmVhbUZyb21TdHJlYW1Xcml0YWJsZShzdHJlYW1Xcml0YWJsZSlcbn1cbiIsCiAgICAiLyogcmVwbGFjZW1lbnQgc3RhcnQgKi9cblxuY29uc3QgcHJvY2VzcyA9IHJlcXVpcmUoJ3Byb2Nlc3MvJylcblxuLyogcmVwbGFjZW1lbnQgZW5kICovXG5cbjsoJ3VzZSBzdHJpY3QnKVxuY29uc3QgYnVmZmVyTW9kdWxlID0gcmVxdWlyZSgnYnVmZmVyJylcbmNvbnN0IHtcbiAgaXNSZWFkYWJsZSxcbiAgaXNXcml0YWJsZSxcbiAgaXNJdGVyYWJsZSxcbiAgaXNOb2RlU3RyZWFtLFxuICBpc1JlYWRhYmxlTm9kZVN0cmVhbSxcbiAgaXNXcml0YWJsZU5vZGVTdHJlYW0sXG4gIGlzRHVwbGV4Tm9kZVN0cmVhbSxcbiAgaXNSZWFkYWJsZVN0cmVhbSxcbiAgaXNXcml0YWJsZVN0cmVhbVxufSA9IHJlcXVpcmUoJy4vdXRpbHMnKVxuY29uc3QgZW9zID0gcmVxdWlyZSgnLi9lbmQtb2Ytc3RyZWFtJylcbmNvbnN0IHtcbiAgQWJvcnRFcnJvcixcbiAgY29kZXM6IHsgRVJSX0lOVkFMSURfQVJHX1RZUEUsIEVSUl9JTlZBTElEX1JFVFVSTl9WQUxVRSB9XG59ID0gcmVxdWlyZSgnLi4vLi4vb3Vycy9lcnJvcnMnKVxuY29uc3QgeyBkZXN0cm95ZXIgfSA9IHJlcXVpcmUoJy4vZGVzdHJveScpXG5jb25zdCBEdXBsZXggPSByZXF1aXJlKCcuL2R1cGxleCcpXG5jb25zdCBSZWFkYWJsZSA9IHJlcXVpcmUoJy4vcmVhZGFibGUnKVxuY29uc3QgV3JpdGFibGUgPSByZXF1aXJlKCcuL3dyaXRhYmxlJylcbmNvbnN0IHsgY3JlYXRlRGVmZXJyZWRQcm9taXNlIH0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL3V0aWwnKVxuY29uc3QgZnJvbSA9IHJlcXVpcmUoJy4vZnJvbScpXG5jb25zdCBCbG9iID0gZ2xvYmFsVGhpcy5CbG9iIHx8IGJ1ZmZlck1vZHVsZS5CbG9iXG5jb25zdCBpc0Jsb2IgPVxuICB0eXBlb2YgQmxvYiAhPT0gJ3VuZGVmaW5lZCdcbiAgICA/IGZ1bmN0aW9uIGlzQmxvYihiKSB7XG4gICAgICAgIHJldHVybiBiIGluc3RhbmNlb2YgQmxvYlxuICAgICAgfVxuICAgIDogZnVuY3Rpb24gaXNCbG9iKGIpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG5jb25zdCBBYm9ydENvbnRyb2xsZXIgPSBnbG9iYWxUaGlzLkFib3J0Q29udHJvbGxlciB8fCByZXF1aXJlKCdhYm9ydC1jb250cm9sbGVyJykuQWJvcnRDb250cm9sbGVyXG5jb25zdCB7IEZ1bmN0aW9uUHJvdG90eXBlQ2FsbCB9ID0gcmVxdWlyZSgnLi4vLi4vb3Vycy9wcmltb3JkaWFscycpXG5cbi8vIFRoaXMgaXMgbmVlZGVkIGZvciBwcmUgbm9kZSAxNy5cbmNsYXNzIER1cGxleGlmeSBleHRlbmRzIER1cGxleCB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICBzdXBlcihvcHRpb25zKVxuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvMzQzODVcblxuICAgIGlmICgob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBvcHRpb25zLnJlYWRhYmxlKSA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUucmVhZGFibGUgPSBmYWxzZVxuICAgICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRlZCA9IHRydWVcbiAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCA9IHRydWVcbiAgICB9XG4gICAgaWYgKChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IG9wdGlvbnMud3JpdGFibGUpID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5fd3JpdGFibGVTdGF0ZS53cml0YWJsZSA9IGZhbHNlXG4gICAgICB0aGlzLl93cml0YWJsZVN0YXRlLmVuZGluZyA9IHRydWVcbiAgICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWQgPSB0cnVlXG4gICAgICB0aGlzLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkdXBsZXhpZnkoYm9keSwgbmFtZSkge1xuICBpZiAoaXNEdXBsZXhOb2RlU3RyZWFtKGJvZHkpKSB7XG4gICAgcmV0dXJuIGJvZHlcbiAgfVxuICBpZiAoaXNSZWFkYWJsZU5vZGVTdHJlYW0oYm9keSkpIHtcbiAgICByZXR1cm4gX2R1cGxleGlmeSh7XG4gICAgICByZWFkYWJsZTogYm9keVxuICAgIH0pXG4gIH1cbiAgaWYgKGlzV3JpdGFibGVOb2RlU3RyZWFtKGJvZHkpKSB7XG4gICAgcmV0dXJuIF9kdXBsZXhpZnkoe1xuICAgICAgd3JpdGFibGU6IGJvZHlcbiAgICB9KVxuICB9XG4gIGlmIChpc05vZGVTdHJlYW0oYm9keSkpIHtcbiAgICByZXR1cm4gX2R1cGxleGlmeSh7XG4gICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICByZWFkYWJsZTogZmFsc2VcbiAgICB9KVxuICB9XG4gIGlmIChpc1JlYWRhYmxlU3RyZWFtKGJvZHkpKSB7XG4gICAgcmV0dXJuIF9kdXBsZXhpZnkoe1xuICAgICAgcmVhZGFibGU6IFJlYWRhYmxlLmZyb21XZWIoYm9keSlcbiAgICB9KVxuICB9XG4gIGlmIChpc1dyaXRhYmxlU3RyZWFtKGJvZHkpKSB7XG4gICAgcmV0dXJuIF9kdXBsZXhpZnkoe1xuICAgICAgd3JpdGFibGU6IFdyaXRhYmxlLmZyb21XZWIoYm9keSlcbiAgICB9KVxuICB9XG4gIGlmICh0eXBlb2YgYm9keSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNvbnN0IHsgdmFsdWUsIHdyaXRlLCBmaW5hbCwgZGVzdHJveSB9ID0gZnJvbUFzeW5jR2VuKGJvZHkpXG4gICAgaWYgKGlzSXRlcmFibGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gZnJvbShEdXBsZXhpZnksIHZhbHVlLCB7XG4gICAgICAgIC8vIFRPRE8gKHJvbmFnKTogaGlnaFdhdGVyTWFyaz9cbiAgICAgICAgb2JqZWN0TW9kZTogdHJ1ZSxcbiAgICAgICAgd3JpdGUsXG4gICAgICAgIGZpbmFsLFxuICAgICAgICBkZXN0cm95XG4gICAgICB9KVxuICAgIH1cbiAgICBjb25zdCB0aGVuID0gdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHZhbHVlLnRoZW5cbiAgICBpZiAodHlwZW9mIHRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGxldCBkXG4gICAgICBjb25zdCBwcm9taXNlID0gRnVuY3Rpb25Qcm90b3R5cGVDYWxsKFxuICAgICAgICB0aGVuLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgKHZhbCkgPT4ge1xuICAgICAgICAgIGlmICh2YWwgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX1JFVFVSTl9WQUxVRSgnbnVsbHknLCAnYm9keScsIHZhbClcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICBkZXN0cm95ZXIoZCwgZXJyKVxuICAgICAgICB9XG4gICAgICApXG4gICAgICByZXR1cm4gKGQgPSBuZXcgRHVwbGV4aWZ5KHtcbiAgICAgICAgLy8gVE9ETyAocm9uYWcpOiBoaWdoV2F0ZXJNYXJrP1xuICAgICAgICBvYmplY3RNb2RlOiB0cnVlLFxuICAgICAgICByZWFkYWJsZTogZmFsc2UsXG4gICAgICAgIHdyaXRlLFxuICAgICAgICBmaW5hbChjYikge1xuICAgICAgICAgIGZpbmFsKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGF3YWl0IHByb21pc2VcbiAgICAgICAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhjYiwgbnVsbClcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGNiLCBlcnIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfSxcbiAgICAgICAgZGVzdHJveVxuICAgICAgfSkpXG4gICAgfVxuICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9SRVRVUk5fVkFMVUUoJ0l0ZXJhYmxlLCBBc3luY0l0ZXJhYmxlIG9yIEFzeW5jRnVuY3Rpb24nLCBuYW1lLCB2YWx1ZSlcbiAgfVxuICBpZiAoaXNCbG9iKGJvZHkpKSB7XG4gICAgcmV0dXJuIGR1cGxleGlmeShib2R5LmFycmF5QnVmZmVyKCkpXG4gIH1cbiAgaWYgKGlzSXRlcmFibGUoYm9keSkpIHtcbiAgICByZXR1cm4gZnJvbShEdXBsZXhpZnksIGJvZHksIHtcbiAgICAgIC8vIFRPRE8gKHJvbmFnKTogaGlnaFdhdGVyTWFyaz9cbiAgICAgIG9iamVjdE1vZGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogZmFsc2VcbiAgICB9KVxuICB9XG4gIGlmIChcbiAgICBpc1JlYWRhYmxlU3RyZWFtKGJvZHkgPT09IG51bGwgfHwgYm9keSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogYm9keS5yZWFkYWJsZSkgJiZcbiAgICBpc1dyaXRhYmxlU3RyZWFtKGJvZHkgPT09IG51bGwgfHwgYm9keSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogYm9keS53cml0YWJsZSlcbiAgKSB7XG4gICAgcmV0dXJuIER1cGxleGlmeS5mcm9tV2ViKGJvZHkpXG4gIH1cbiAgaWYgKFxuICAgIHR5cGVvZiAoYm9keSA9PT0gbnVsbCB8fCBib2R5ID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBib2R5LndyaXRhYmxlKSA9PT0gJ29iamVjdCcgfHxcbiAgICB0eXBlb2YgKGJvZHkgPT09IG51bGwgfHwgYm9keSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogYm9keS5yZWFkYWJsZSkgPT09ICdvYmplY3QnXG4gICkge1xuICAgIGNvbnN0IHJlYWRhYmxlID1cbiAgICAgIGJvZHkgIT09IG51bGwgJiYgYm9keSAhPT0gdW5kZWZpbmVkICYmIGJvZHkucmVhZGFibGVcbiAgICAgICAgPyBpc1JlYWRhYmxlTm9kZVN0cmVhbShib2R5ID09PSBudWxsIHx8IGJvZHkgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IGJvZHkucmVhZGFibGUpXG4gICAgICAgICAgPyBib2R5ID09PSBudWxsIHx8IGJvZHkgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgICAgIDogYm9keS5yZWFkYWJsZVxuICAgICAgICAgIDogZHVwbGV4aWZ5KGJvZHkucmVhZGFibGUpXG4gICAgICAgIDogdW5kZWZpbmVkXG4gICAgY29uc3Qgd3JpdGFibGUgPVxuICAgICAgYm9keSAhPT0gbnVsbCAmJiBib2R5ICE9PSB1bmRlZmluZWQgJiYgYm9keS53cml0YWJsZVxuICAgICAgICA/IGlzV3JpdGFibGVOb2RlU3RyZWFtKGJvZHkgPT09IG51bGwgfHwgYm9keSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogYm9keS53cml0YWJsZSlcbiAgICAgICAgICA/IGJvZHkgPT09IG51bGwgfHwgYm9keSA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICAgICAgOiBib2R5LndyaXRhYmxlXG4gICAgICAgICAgOiBkdXBsZXhpZnkoYm9keS53cml0YWJsZSlcbiAgICAgICAgOiB1bmRlZmluZWRcbiAgICByZXR1cm4gX2R1cGxleGlmeSh7XG4gICAgICByZWFkYWJsZSxcbiAgICAgIHdyaXRhYmxlXG4gICAgfSlcbiAgfVxuICBjb25zdCB0aGVuID0gYm9keSA9PT0gbnVsbCB8fCBib2R5ID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBib2R5LnRoZW5cbiAgaWYgKHR5cGVvZiB0aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgbGV0IGRcbiAgICBGdW5jdGlvblByb3RvdHlwZUNhbGwoXG4gICAgICB0aGVuLFxuICAgICAgYm9keSxcbiAgICAgICh2YWwpID0+IHtcbiAgICAgICAgaWYgKHZhbCAhPSBudWxsKSB7XG4gICAgICAgICAgZC5wdXNoKHZhbClcbiAgICAgICAgfVxuICAgICAgICBkLnB1c2gobnVsbClcbiAgICAgIH0sXG4gICAgICAoZXJyKSA9PiB7XG4gICAgICAgIGRlc3Ryb3llcihkLCBlcnIpXG4gICAgICB9XG4gICAgKVxuICAgIHJldHVybiAoZCA9IG5ldyBEdXBsZXhpZnkoe1xuICAgICAgb2JqZWN0TW9kZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIHJlYWQoKSB7fVxuICAgIH0pKVxuICB9XG4gIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRShcbiAgICBuYW1lLFxuICAgIFtcbiAgICAgICdCbG9iJyxcbiAgICAgICdSZWFkYWJsZVN0cmVhbScsXG4gICAgICAnV3JpdGFibGVTdHJlYW0nLFxuICAgICAgJ1N0cmVhbScsXG4gICAgICAnSXRlcmFibGUnLFxuICAgICAgJ0FzeW5jSXRlcmFibGUnLFxuICAgICAgJ0Z1bmN0aW9uJyxcbiAgICAgICd7IHJlYWRhYmxlLCB3cml0YWJsZSB9IHBhaXInLFxuICAgICAgJ1Byb21pc2UnXG4gICAgXSxcbiAgICBib2R5XG4gIClcbn1cbmZ1bmN0aW9uIGZyb21Bc3luY0dlbihmbikge1xuICBsZXQgeyBwcm9taXNlLCByZXNvbHZlIH0gPSBjcmVhdGVEZWZlcnJlZFByb21pc2UoKVxuICBjb25zdCBhYyA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuICBjb25zdCBzaWduYWwgPSBhYy5zaWduYWxcbiAgY29uc3QgdmFsdWUgPSBmbihcbiAgICAoYXN5bmMgZnVuY3Rpb24qICgpIHtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIGNvbnN0IF9wcm9taXNlID0gcHJvbWlzZVxuICAgICAgICBwcm9taXNlID0gbnVsbFxuICAgICAgICBjb25zdCB7IGNodW5rLCBkb25lLCBjYiB9ID0gYXdhaXQgX3Byb21pc2VcbiAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhjYilcbiAgICAgICAgaWYgKGRvbmUpIHJldHVyblxuICAgICAgICBpZiAoc2lnbmFsLmFib3J0ZWQpXG4gICAgICAgICAgdGhyb3cgbmV3IEFib3J0RXJyb3IodW5kZWZpbmVkLCB7XG4gICAgICAgICAgICBjYXVzZTogc2lnbmFsLnJlYXNvblxuICAgICAgICAgIH0pXG4gICAgICAgIDsoeyBwcm9taXNlLCByZXNvbHZlIH0gPSBjcmVhdGVEZWZlcnJlZFByb21pc2UoKSlcbiAgICAgICAgeWllbGQgY2h1bmtcbiAgICAgIH1cbiAgICB9KSgpLFxuICAgIHtcbiAgICAgIHNpZ25hbFxuICAgIH1cbiAgKVxuICByZXR1cm4ge1xuICAgIHZhbHVlLFxuICAgIHdyaXRlKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgICAgIGNvbnN0IF9yZXNvbHZlID0gcmVzb2x2ZVxuICAgICAgcmVzb2x2ZSA9IG51bGxcbiAgICAgIF9yZXNvbHZlKHtcbiAgICAgICAgY2h1bmssXG4gICAgICAgIGRvbmU6IGZhbHNlLFxuICAgICAgICBjYlxuICAgICAgfSlcbiAgICB9LFxuICAgIGZpbmFsKGNiKSB7XG4gICAgICBjb25zdCBfcmVzb2x2ZSA9IHJlc29sdmVcbiAgICAgIHJlc29sdmUgPSBudWxsXG4gICAgICBfcmVzb2x2ZSh7XG4gICAgICAgIGRvbmU6IHRydWUsXG4gICAgICAgIGNiXG4gICAgICB9KVxuICAgIH0sXG4gICAgZGVzdHJveShlcnIsIGNiKSB7XG4gICAgICBhYy5hYm9ydCgpXG4gICAgICBjYihlcnIpXG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBfZHVwbGV4aWZ5KHBhaXIpIHtcbiAgY29uc3QgciA9IHBhaXIucmVhZGFibGUgJiYgdHlwZW9mIHBhaXIucmVhZGFibGUucmVhZCAhPT0gJ2Z1bmN0aW9uJyA/IFJlYWRhYmxlLndyYXAocGFpci5yZWFkYWJsZSkgOiBwYWlyLnJlYWRhYmxlXG4gIGNvbnN0IHcgPSBwYWlyLndyaXRhYmxlXG4gIGxldCByZWFkYWJsZSA9ICEhaXNSZWFkYWJsZShyKVxuICBsZXQgd3JpdGFibGUgPSAhIWlzV3JpdGFibGUodylcbiAgbGV0IG9uZHJhaW5cbiAgbGV0IG9uZmluaXNoXG4gIGxldCBvbnJlYWRhYmxlXG4gIGxldCBvbmNsb3NlXG4gIGxldCBkXG4gIGZ1bmN0aW9uIG9uZmluaXNoZWQoZXJyKSB7XG4gICAgY29uc3QgY2IgPSBvbmNsb3NlXG4gICAgb25jbG9zZSA9IG51bGxcbiAgICBpZiAoY2IpIHtcbiAgICAgIGNiKGVycilcbiAgICB9IGVsc2UgaWYgKGVycikge1xuICAgICAgZC5kZXN0cm95KGVycilcbiAgICB9XG4gIH1cblxuICAvLyBUT0RPKHJvbmFnKTogQXZvaWQgZG91YmxlIGJ1ZmZlcmluZy5cbiAgLy8gSW1wbGVtZW50IFdyaXRhYmxlL1JlYWRhYmxlL0R1cGxleCB0cmFpdHMuXG4gIC8vIFNlZSwgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvMzM1MTUuXG4gIGQgPSBuZXcgRHVwbGV4aWZ5KHtcbiAgICAvLyBUT0RPIChyb25hZyk6IGhpZ2hXYXRlck1hcms/XG4gICAgcmVhZGFibGVPYmplY3RNb2RlOiAhIShyICE9PSBudWxsICYmIHIgIT09IHVuZGVmaW5lZCAmJiByLnJlYWRhYmxlT2JqZWN0TW9kZSksXG4gICAgd3JpdGFibGVPYmplY3RNb2RlOiAhISh3ICE9PSBudWxsICYmIHcgIT09IHVuZGVmaW5lZCAmJiB3LndyaXRhYmxlT2JqZWN0TW9kZSksXG4gICAgcmVhZGFibGUsXG4gICAgd3JpdGFibGVcbiAgfSlcbiAgaWYgKHdyaXRhYmxlKSB7XG4gICAgZW9zKHcsIChlcnIpID0+IHtcbiAgICAgIHdyaXRhYmxlID0gZmFsc2VcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgZGVzdHJveWVyKHIsIGVycilcbiAgICAgIH1cbiAgICAgIG9uZmluaXNoZWQoZXJyKVxuICAgIH0pXG4gICAgZC5fd3JpdGUgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYWxsYmFjaykge1xuICAgICAgaWYgKHcud3JpdGUoY2h1bmssIGVuY29kaW5nKSkge1xuICAgICAgICBjYWxsYmFjaygpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvbmRyYWluID0gY2FsbGJhY2tcbiAgICAgIH1cbiAgICB9XG4gICAgZC5fZmluYWwgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgIHcuZW5kKClcbiAgICAgIG9uZmluaXNoID0gY2FsbGJhY2tcbiAgICB9XG4gICAgdy5vbignZHJhaW4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAob25kcmFpbikge1xuICAgICAgICBjb25zdCBjYiA9IG9uZHJhaW5cbiAgICAgICAgb25kcmFpbiA9IG51bGxcbiAgICAgICAgY2IoKVxuICAgICAgfVxuICAgIH0pXG4gICAgdy5vbignZmluaXNoJywgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKG9uZmluaXNoKSB7XG4gICAgICAgIGNvbnN0IGNiID0gb25maW5pc2hcbiAgICAgICAgb25maW5pc2ggPSBudWxsXG4gICAgICAgIGNiKClcbiAgICAgIH1cbiAgICB9KVxuICB9XG4gIGlmIChyZWFkYWJsZSkge1xuICAgIGVvcyhyLCAoZXJyKSA9PiB7XG4gICAgICByZWFkYWJsZSA9IGZhbHNlXG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIGRlc3Ryb3llcihyLCBlcnIpXG4gICAgICB9XG4gICAgICBvbmZpbmlzaGVkKGVycilcbiAgICB9KVxuICAgIHIub24oJ3JlYWRhYmxlJywgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKG9ucmVhZGFibGUpIHtcbiAgICAgICAgY29uc3QgY2IgPSBvbnJlYWRhYmxlXG4gICAgICAgIG9ucmVhZGFibGUgPSBudWxsXG4gICAgICAgIGNiKClcbiAgICAgIH1cbiAgICB9KVxuICAgIHIub24oJ2VuZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGQucHVzaChudWxsKVxuICAgIH0pXG4gICAgZC5fcmVhZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIGNvbnN0IGJ1ZiA9IHIucmVhZCgpXG4gICAgICAgIGlmIChidWYgPT09IG51bGwpIHtcbiAgICAgICAgICBvbnJlYWRhYmxlID0gZC5fcmVhZFxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGlmICghZC5wdXNoKGJ1ZikpIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBkLl9kZXN0cm95ID0gZnVuY3Rpb24gKGVyciwgY2FsbGJhY2spIHtcbiAgICBpZiAoIWVyciAmJiBvbmNsb3NlICE9PSBudWxsKSB7XG4gICAgICBlcnIgPSBuZXcgQWJvcnRFcnJvcigpXG4gICAgfVxuICAgIG9ucmVhZGFibGUgPSBudWxsXG4gICAgb25kcmFpbiA9IG51bGxcbiAgICBvbmZpbmlzaCA9IG51bGxcbiAgICBpZiAob25jbG9zZSA9PT0gbnVsbCkge1xuICAgICAgY2FsbGJhY2soZXJyKVxuICAgIH0gZWxzZSB7XG4gICAgICBvbmNsb3NlID0gY2FsbGJhY2tcbiAgICAgIGRlc3Ryb3llcih3LCBlcnIpXG4gICAgICBkZXN0cm95ZXIociwgZXJyKVxuICAgIH1cbiAgfVxuICByZXR1cm4gZFxufVxuIiwKICAgICIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuLy8gYSBkdXBsZXggc3RyZWFtIGlzIGp1c3QgYSBzdHJlYW0gdGhhdCBpcyBib3RoIHJlYWRhYmxlIGFuZCB3cml0YWJsZS5cbi8vIFNpbmNlIEpTIGRvZXNuJ3QgaGF2ZSBtdWx0aXBsZSBwcm90b3R5cGUgaW5oZXJpdGFuY2UsIHRoaXMgY2xhc3Ncbi8vIHByb3RvdHlwaWNhbGx5IGluaGVyaXRzIGZyb20gUmVhZGFibGUsIGFuZCB0aGVuIHBhcmFzaXRpY2FsbHkgZnJvbVxuLy8gV3JpdGFibGUuXG5cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIE9iamVjdERlZmluZVByb3BlcnRpZXMsXG4gIE9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcixcbiAgT2JqZWN0S2V5cyxcbiAgT2JqZWN0U2V0UHJvdG90eXBlT2Zcbn0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL3ByaW1vcmRpYWxzJylcbm1vZHVsZS5leHBvcnRzID0gRHVwbGV4XG5jb25zdCBSZWFkYWJsZSA9IHJlcXVpcmUoJy4vcmVhZGFibGUnKVxuY29uc3QgV3JpdGFibGUgPSByZXF1aXJlKCcuL3dyaXRhYmxlJylcbk9iamVjdFNldFByb3RvdHlwZU9mKER1cGxleC5wcm90b3R5cGUsIFJlYWRhYmxlLnByb3RvdHlwZSlcbk9iamVjdFNldFByb3RvdHlwZU9mKER1cGxleCwgUmVhZGFibGUpXG57XG4gIGNvbnN0IGtleXMgPSBPYmplY3RLZXlzKFdyaXRhYmxlLnByb3RvdHlwZSlcbiAgLy8gQWxsb3cgdGhlIGtleXMgYXJyYXkgdG8gYmUgR0MnZWQuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IG1ldGhvZCA9IGtleXNbaV1cbiAgICBpZiAoIUR1cGxleC5wcm90b3R5cGVbbWV0aG9kXSkgRHVwbGV4LnByb3RvdHlwZVttZXRob2RdID0gV3JpdGFibGUucHJvdG90eXBlW21ldGhvZF1cbiAgfVxufVxuZnVuY3Rpb24gRHVwbGV4KG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIER1cGxleCkpIHJldHVybiBuZXcgRHVwbGV4KG9wdGlvbnMpXG4gIFJlYWRhYmxlLmNhbGwodGhpcywgb3B0aW9ucylcbiAgV3JpdGFibGUuY2FsbCh0aGlzLCBvcHRpb25zKVxuICBpZiAob3B0aW9ucykge1xuICAgIHRoaXMuYWxsb3dIYWxmT3BlbiA9IG9wdGlvbnMuYWxsb3dIYWxmT3BlbiAhPT0gZmFsc2VcbiAgICBpZiAob3B0aW9ucy5yZWFkYWJsZSA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUucmVhZGFibGUgPSBmYWxzZVxuICAgICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRlZCA9IHRydWVcbiAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCA9IHRydWVcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMud3JpdGFibGUgPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLl93cml0YWJsZVN0YXRlLndyaXRhYmxlID0gZmFsc2VcbiAgICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kaW5nID0gdHJ1ZVxuICAgICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZCA9IHRydWVcbiAgICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQgPSB0cnVlXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRoaXMuYWxsb3dIYWxmT3BlbiA9IHRydWVcbiAgfVxufVxuT2JqZWN0RGVmaW5lUHJvcGVydGllcyhEdXBsZXgucHJvdG90eXBlLCB7XG4gIHdyaXRhYmxlOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIC4uLk9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcihXcml0YWJsZS5wcm90b3R5cGUsICd3cml0YWJsZScpXG4gIH0sXG4gIHdyaXRhYmxlSGlnaFdhdGVyTWFyazoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAuLi5PYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoV3JpdGFibGUucHJvdG90eXBlLCAnd3JpdGFibGVIaWdoV2F0ZXJNYXJrJylcbiAgfSxcbiAgd3JpdGFibGVPYmplY3RNb2RlOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIC4uLk9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcihXcml0YWJsZS5wcm90b3R5cGUsICd3cml0YWJsZU9iamVjdE1vZGUnKVxuICB9LFxuICB3cml0YWJsZUJ1ZmZlcjoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAuLi5PYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoV3JpdGFibGUucHJvdG90eXBlLCAnd3JpdGFibGVCdWZmZXInKVxuICB9LFxuICB3cml0YWJsZUxlbmd0aDoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAuLi5PYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoV3JpdGFibGUucHJvdG90eXBlLCAnd3JpdGFibGVMZW5ndGgnKVxuICB9LFxuICB3cml0YWJsZUZpbmlzaGVkOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIC4uLk9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcihXcml0YWJsZS5wcm90b3R5cGUsICd3cml0YWJsZUZpbmlzaGVkJylcbiAgfSxcbiAgd3JpdGFibGVDb3JrZWQ6IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgLi4uT2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFdyaXRhYmxlLnByb3RvdHlwZSwgJ3dyaXRhYmxlQ29ya2VkJylcbiAgfSxcbiAgd3JpdGFibGVFbmRlZDoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAuLi5PYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoV3JpdGFibGUucHJvdG90eXBlLCAnd3JpdGFibGVFbmRlZCcpXG4gIH0sXG4gIHdyaXRhYmxlTmVlZERyYWluOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIC4uLk9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcihXcml0YWJsZS5wcm90b3R5cGUsICd3cml0YWJsZU5lZWREcmFpbicpXG4gIH0sXG4gIGRlc3Ryb3llZDoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBnZXQoKSB7XG4gICAgICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZSA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuX3dyaXRhYmxlU3RhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCAmJiB0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZFxuICAgIH0sXG4gICAgc2V0KHZhbHVlKSB7XG4gICAgICAvLyBCYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB0aGUgdXNlciBpcyBleHBsaWNpdGx5XG4gICAgICAvLyBtYW5hZ2luZyBkZXN0cm95ZWQuXG4gICAgICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZSAmJiB0aGlzLl93cml0YWJsZVN0YXRlKSB7XG4gICAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkID0gdmFsdWVcbiAgICAgICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQgPSB2YWx1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbmxldCB3ZWJTdHJlYW1zQWRhcHRlcnNcblxuLy8gTGF6eSB0byBhdm9pZCBjaXJjdWxhciByZWZlcmVuY2VzXG5mdW5jdGlvbiBsYXp5V2ViU3RyZWFtcygpIHtcbiAgaWYgKHdlYlN0cmVhbXNBZGFwdGVycyA9PT0gdW5kZWZpbmVkKSB3ZWJTdHJlYW1zQWRhcHRlcnMgPSB7fVxuICByZXR1cm4gd2ViU3RyZWFtc0FkYXB0ZXJzXG59XG5EdXBsZXguZnJvbVdlYiA9IGZ1bmN0aW9uIChwYWlyLCBvcHRpb25zKSB7XG4gIHJldHVybiBsYXp5V2ViU3RyZWFtcygpLm5ld1N0cmVhbUR1cGxleEZyb21SZWFkYWJsZVdyaXRhYmxlUGFpcihwYWlyLCBvcHRpb25zKVxufVxuRHVwbGV4LnRvV2ViID0gZnVuY3Rpb24gKGR1cGxleCkge1xuICByZXR1cm4gbGF6eVdlYlN0cmVhbXMoKS5uZXdSZWFkYWJsZVdyaXRhYmxlUGFpckZyb21EdXBsZXgoZHVwbGV4KVxufVxubGV0IGR1cGxleGlmeVxuRHVwbGV4LmZyb20gPSBmdW5jdGlvbiAoYm9keSkge1xuICBpZiAoIWR1cGxleGlmeSkge1xuICAgIGR1cGxleGlmeSA9IHJlcXVpcmUoJy4vZHVwbGV4aWZ5JylcbiAgfVxuICByZXR1cm4gZHVwbGV4aWZ5KGJvZHksICdib2R5Jylcbn1cbiIsCiAgICAiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbi8vIGEgdHJhbnNmb3JtIHN0cmVhbSBpcyBhIHJlYWRhYmxlL3dyaXRhYmxlIHN0cmVhbSB3aGVyZSB5b3UgZG9cbi8vIHNvbWV0aGluZyB3aXRoIHRoZSBkYXRhLiAgU29tZXRpbWVzIGl0J3MgY2FsbGVkIGEgXCJmaWx0ZXJcIixcbi8vIGJ1dCB0aGF0J3Mgbm90IGEgZ3JlYXQgbmFtZSBmb3IgaXQsIHNpbmNlIHRoYXQgaW1wbGllcyBhIHRoaW5nIHdoZXJlXG4vLyBzb21lIGJpdHMgcGFzcyB0aHJvdWdoLCBhbmQgb3RoZXJzIGFyZSBzaW1wbHkgaWdub3JlZC4gIChUaGF0IHdvdWxkXG4vLyBiZSBhIHZhbGlkIGV4YW1wbGUgb2YgYSB0cmFuc2Zvcm0sIG9mIGNvdXJzZS4pXG4vL1xuLy8gV2hpbGUgdGhlIG91dHB1dCBpcyBjYXVzYWxseSByZWxhdGVkIHRvIHRoZSBpbnB1dCwgaXQncyBub3QgYVxuLy8gbmVjZXNzYXJpbHkgc3ltbWV0cmljIG9yIHN5bmNocm9ub3VzIHRyYW5zZm9ybWF0aW9uLiAgRm9yIGV4YW1wbGUsXG4vLyBhIHpsaWIgc3RyZWFtIG1pZ2h0IHRha2UgbXVsdGlwbGUgcGxhaW4tdGV4dCB3cml0ZXMoKSwgYW5kIHRoZW5cbi8vIGVtaXQgYSBzaW5nbGUgY29tcHJlc3NlZCBjaHVuayBzb21lIHRpbWUgaW4gdGhlIGZ1dHVyZS5cbi8vXG4vLyBIZXJlJ3MgaG93IHRoaXMgd29ya3M6XG4vL1xuLy8gVGhlIFRyYW5zZm9ybSBzdHJlYW0gaGFzIGFsbCB0aGUgYXNwZWN0cyBvZiB0aGUgcmVhZGFibGUgYW5kIHdyaXRhYmxlXG4vLyBzdHJlYW0gY2xhc3Nlcy4gIFdoZW4geW91IHdyaXRlKGNodW5rKSwgdGhhdCBjYWxscyBfd3JpdGUoY2h1bmssY2IpXG4vLyBpbnRlcm5hbGx5LCBhbmQgcmV0dXJucyBmYWxzZSBpZiB0aGVyZSdzIGEgbG90IG9mIHBlbmRpbmcgd3JpdGVzXG4vLyBidWZmZXJlZCB1cC4gIFdoZW4geW91IGNhbGwgcmVhZCgpLCB0aGF0IGNhbGxzIF9yZWFkKG4pIHVudGlsXG4vLyB0aGVyZSdzIGVub3VnaCBwZW5kaW5nIHJlYWRhYmxlIGRhdGEgYnVmZmVyZWQgdXAuXG4vL1xuLy8gSW4gYSB0cmFuc2Zvcm0gc3RyZWFtLCB0aGUgd3JpdHRlbiBkYXRhIGlzIHBsYWNlZCBpbiBhIGJ1ZmZlci4gIFdoZW5cbi8vIF9yZWFkKG4pIGlzIGNhbGxlZCwgaXQgdHJhbnNmb3JtcyB0aGUgcXVldWVkIHVwIGRhdGEsIGNhbGxpbmcgdGhlXG4vLyBidWZmZXJlZCBfd3JpdGUgY2IncyBhcyBpdCBjb25zdW1lcyBjaHVua3MuICBJZiBjb25zdW1pbmcgYSBzaW5nbGVcbi8vIHdyaXR0ZW4gY2h1bmsgd291bGQgcmVzdWx0IGluIG11bHRpcGxlIG91dHB1dCBjaHVua3MsIHRoZW4gdGhlIGZpcnN0XG4vLyBvdXRwdXR0ZWQgYml0IGNhbGxzIHRoZSByZWFkY2IsIGFuZCBzdWJzZXF1ZW50IGNodW5rcyBqdXN0IGdvIGludG9cbi8vIHRoZSByZWFkIGJ1ZmZlciwgYW5kIHdpbGwgY2F1c2UgaXQgdG8gZW1pdCAncmVhZGFibGUnIGlmIG5lY2Vzc2FyeS5cbi8vXG4vLyBUaGlzIHdheSwgYmFjay1wcmVzc3VyZSBpcyBhY3R1YWxseSBkZXRlcm1pbmVkIGJ5IHRoZSByZWFkaW5nIHNpZGUsXG4vLyBzaW5jZSBfcmVhZCBoYXMgdG8gYmUgY2FsbGVkIHRvIHN0YXJ0IHByb2Nlc3NpbmcgYSBuZXcgY2h1bmsuICBIb3dldmVyLFxuLy8gYSBwYXRob2xvZ2ljYWwgaW5mbGF0ZSB0eXBlIG9mIHRyYW5zZm9ybSBjYW4gY2F1c2UgZXhjZXNzaXZlIGJ1ZmZlcmluZ1xuLy8gaGVyZS4gIEZvciBleGFtcGxlLCBpbWFnaW5lIGEgc3RyZWFtIHdoZXJlIGV2ZXJ5IGJ5dGUgb2YgaW5wdXQgaXNcbi8vIGludGVycHJldGVkIGFzIGFuIGludGVnZXIgZnJvbSAwLTI1NSwgYW5kIHRoZW4gcmVzdWx0cyBpbiB0aGF0IG1hbnlcbi8vIGJ5dGVzIG9mIG91dHB1dC4gIFdyaXRpbmcgdGhlIDQgYnl0ZXMge2ZmLGZmLGZmLGZmfSB3b3VsZCByZXN1bHQgaW5cbi8vIDFrYiBvZiBkYXRhIGJlaW5nIG91dHB1dC4gIEluIHRoaXMgY2FzZSwgeW91IGNvdWxkIHdyaXRlIGEgdmVyeSBzbWFsbFxuLy8gYW1vdW50IG9mIGlucHV0LCBhbmQgZW5kIHVwIHdpdGggYSB2ZXJ5IGxhcmdlIGFtb3VudCBvZiBvdXRwdXQuICBJblxuLy8gc3VjaCBhIHBhdGhvbG9naWNhbCBpbmZsYXRpbmcgbWVjaGFuaXNtLCB0aGVyZSdkIGJlIG5vIHdheSB0byB0ZWxsXG4vLyB0aGUgc3lzdGVtIHRvIHN0b3AgZG9pbmcgdGhlIHRyYW5zZm9ybS4gIEEgc2luZ2xlIDRNQiB3cml0ZSBjb3VsZFxuLy8gY2F1c2UgdGhlIHN5c3RlbSB0byBydW4gb3V0IG9mIG1lbW9yeS5cbi8vXG4vLyBIb3dldmVyLCBldmVuIGluIHN1Y2ggYSBwYXRob2xvZ2ljYWwgY2FzZSwgb25seSBhIHNpbmdsZSB3cml0dGVuIGNodW5rXG4vLyB3b3VsZCBiZSBjb25zdW1lZCwgYW5kIHRoZW4gdGhlIHJlc3Qgd291bGQgd2FpdCAodW4tdHJhbnNmb3JtZWQpIHVudGlsXG4vLyB0aGUgcmVzdWx0cyBvZiB0aGUgcHJldmlvdXMgdHJhbnNmb3JtZWQgY2h1bmsgd2VyZSBjb25zdW1lZC5cblxuJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgT2JqZWN0U2V0UHJvdG90eXBlT2YsIFN5bWJvbCB9ID0gcmVxdWlyZSgnLi4vLi4vb3Vycy9wcmltb3JkaWFscycpXG5tb2R1bGUuZXhwb3J0cyA9IFRyYW5zZm9ybVxuY29uc3QgeyBFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCB9ID0gcmVxdWlyZSgnLi4vLi4vb3Vycy9lcnJvcnMnKS5jb2Rlc1xuY29uc3QgRHVwbGV4ID0gcmVxdWlyZSgnLi9kdXBsZXgnKVxuY29uc3QgeyBnZXRIaWdoV2F0ZXJNYXJrIH0gPSByZXF1aXJlKCcuL3N0YXRlJylcbk9iamVjdFNldFByb3RvdHlwZU9mKFRyYW5zZm9ybS5wcm90b3R5cGUsIER1cGxleC5wcm90b3R5cGUpXG5PYmplY3RTZXRQcm90b3R5cGVPZihUcmFuc2Zvcm0sIER1cGxleClcbmNvbnN0IGtDYWxsYmFjayA9IFN5bWJvbCgna0NhbGxiYWNrJylcbmZ1bmN0aW9uIFRyYW5zZm9ybShvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBUcmFuc2Zvcm0pKSByZXR1cm4gbmV3IFRyYW5zZm9ybShvcHRpb25zKVxuXG4gIC8vIFRPRE8gKHJvbmFnKTogVGhpcyBzaG91bGQgcHJlZmVyYWJseSBhbHdheXMgYmVcbiAgLy8gYXBwbGllZCBidXQgd291bGQgYmUgc2VtdmVyLW1ham9yLiBPciBldmVuIGJldHRlcjtcbiAgLy8gbWFrZSBUcmFuc2Zvcm0gYSBSZWFkYWJsZSB3aXRoIHRoZSBXcml0YWJsZSBpbnRlcmZhY2UuXG4gIGNvbnN0IHJlYWRhYmxlSGlnaFdhdGVyTWFyayA9IG9wdGlvbnMgPyBnZXRIaWdoV2F0ZXJNYXJrKHRoaXMsIG9wdGlvbnMsICdyZWFkYWJsZUhpZ2hXYXRlck1hcmsnLCB0cnVlKSA6IG51bGxcbiAgaWYgKHJlYWRhYmxlSGlnaFdhdGVyTWFyayA9PT0gMCkge1xuICAgIC8vIEEgRHVwbGV4IHdpbGwgYnVmZmVyIGJvdGggb24gdGhlIHdyaXRhYmxlIGFuZCByZWFkYWJsZSBzaWRlIHdoaWxlXG4gICAgLy8gYSBUcmFuc2Zvcm0ganVzdCB3YW50cyB0byBidWZmZXIgaHdtIG51bWJlciBvZiBlbGVtZW50cy4gVG8gYXZvaWRcbiAgICAvLyBidWZmZXJpbmcgdHdpY2Ugd2UgZGlzYWJsZSBidWZmZXJpbmcgb24gdGhlIHdyaXRhYmxlIHNpZGUuXG4gICAgb3B0aW9ucyA9IHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBoaWdoV2F0ZXJNYXJrOiBudWxsLFxuICAgICAgcmVhZGFibGVIaWdoV2F0ZXJNYXJrLFxuICAgICAgLy8gVE9ETyAocm9uYWcpOiAwIGlzIG5vdCBvcHRpbWFsIHNpbmNlIHdlIGhhdmVcbiAgICAgIC8vIGEgXCJidWdcIiB3aGVyZSB3ZSBjaGVjayBuZWVkRHJhaW4gYmVmb3JlIGNhbGxpbmcgX3dyaXRlIGFuZCBub3QgYWZ0ZXIuXG4gICAgICAvLyBSZWZzOiBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvcHVsbC8zMjg4N1xuICAgICAgLy8gUmVmczogaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvMzU5NDFcbiAgICAgIHdyaXRhYmxlSGlnaFdhdGVyTWFyazogb3B0aW9ucy53cml0YWJsZUhpZ2hXYXRlck1hcmsgfHwgMFxuICAgIH1cbiAgfVxuICBEdXBsZXguY2FsbCh0aGlzLCBvcHRpb25zKVxuXG4gIC8vIFdlIGhhdmUgaW1wbGVtZW50ZWQgdGhlIF9yZWFkIG1ldGhvZCwgYW5kIGRvbmUgdGhlIG90aGVyIHRoaW5nc1xuICAvLyB0aGF0IFJlYWRhYmxlIHdhbnRzIGJlZm9yZSB0aGUgZmlyc3QgX3JlYWQgY2FsbCwgc28gdW5zZXQgdGhlXG4gIC8vIHN5bmMgZ3VhcmQgZmxhZy5cbiAgdGhpcy5fcmVhZGFibGVTdGF0ZS5zeW5jID0gZmFsc2VcbiAgdGhpc1trQ2FsbGJhY2tdID0gbnVsbFxuICBpZiAob3B0aW9ucykge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy50cmFuc2Zvcm0gPT09ICdmdW5jdGlvbicpIHRoaXMuX3RyYW5zZm9ybSA9IG9wdGlvbnMudHJhbnNmb3JtXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmZsdXNoID09PSAnZnVuY3Rpb24nKSB0aGlzLl9mbHVzaCA9IG9wdGlvbnMuZmx1c2hcbiAgfVxuXG4gIC8vIFdoZW4gdGhlIHdyaXRhYmxlIHNpZGUgZmluaXNoZXMsIHRoZW4gZmx1c2ggb3V0IGFueXRoaW5nIHJlbWFpbmluZy5cbiAgLy8gQmFja3dhcmRzIGNvbXBhdC4gU29tZSBUcmFuc2Zvcm0gc3RyZWFtcyBpbmNvcnJlY3RseSBpbXBsZW1lbnQgX2ZpbmFsXG4gIC8vIGluc3RlYWQgb2Ygb3IgaW4gYWRkaXRpb24gdG8gX2ZsdXNoLiBCeSB1c2luZyAncHJlZmluaXNoJyBpbnN0ZWFkIG9mXG4gIC8vIGltcGxlbWVudGluZyBfZmluYWwgd2UgY29udGludWUgc3VwcG9ydGluZyB0aGlzIHVuZm9ydHVuYXRlIHVzZSBjYXNlLlxuICB0aGlzLm9uKCdwcmVmaW5pc2gnLCBwcmVmaW5pc2gpXG59XG5mdW5jdGlvbiBmaW5hbChjYikge1xuICBpZiAodHlwZW9mIHRoaXMuX2ZsdXNoID09PSAnZnVuY3Rpb24nICYmICF0aGlzLmRlc3Ryb3llZCkge1xuICAgIHRoaXMuX2ZsdXNoKChlciwgZGF0YSkgPT4ge1xuICAgICAgaWYgKGVyKSB7XG4gICAgICAgIGlmIChjYikge1xuICAgICAgICAgIGNiKGVyKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZGVzdHJveShlcilcbiAgICAgICAgfVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGlmIChkYXRhICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy5wdXNoKGRhdGEpXG4gICAgICB9XG4gICAgICB0aGlzLnB1c2gobnVsbClcbiAgICAgIGlmIChjYikge1xuICAgICAgICBjYigpXG4gICAgICB9XG4gICAgfSlcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnB1c2gobnVsbClcbiAgICBpZiAoY2IpIHtcbiAgICAgIGNiKClcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHByZWZpbmlzaCgpIHtcbiAgaWYgKHRoaXMuX2ZpbmFsICE9PSBmaW5hbCkge1xuICAgIGZpbmFsLmNhbGwodGhpcylcbiAgfVxufVxuVHJhbnNmb3JtLnByb3RvdHlwZS5fZmluYWwgPSBmaW5hbFxuVHJhbnNmb3JtLnByb3RvdHlwZS5fdHJhbnNmb3JtID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2FsbGJhY2spIHtcbiAgdGhyb3cgbmV3IEVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVEKCdfdHJhbnNmb3JtKCknKVxufVxuVHJhbnNmb3JtLnByb3RvdHlwZS5fd3JpdGUgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYWxsYmFjaykge1xuICBjb25zdCByU3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlXG4gIGNvbnN0IHdTdGF0ZSA9IHRoaXMuX3dyaXRhYmxlU3RhdGVcbiAgY29uc3QgbGVuZ3RoID0gclN0YXRlLmxlbmd0aFxuICB0aGlzLl90cmFuc2Zvcm0oY2h1bmssIGVuY29kaW5nLCAoZXJyLCB2YWwpID0+IHtcbiAgICBpZiAoZXJyKSB7XG4gICAgICBjYWxsYmFjayhlcnIpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKHZhbCAhPSBudWxsKSB7XG4gICAgICB0aGlzLnB1c2godmFsKVxuICAgIH1cbiAgICBpZiAoXG4gICAgICB3U3RhdGUuZW5kZWQgfHxcbiAgICAgIC8vIEJhY2t3YXJkcyBjb21wYXQuXG4gICAgICBsZW5ndGggPT09IHJTdGF0ZS5sZW5ndGggfHxcbiAgICAgIC8vIEJhY2t3YXJkcyBjb21wYXQuXG4gICAgICByU3RhdGUubGVuZ3RoIDwgclN0YXRlLmhpZ2hXYXRlck1hcmtcbiAgICApIHtcbiAgICAgIGNhbGxiYWNrKClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trQ2FsbGJhY2tdID0gY2FsbGJhY2tcbiAgICB9XG4gIH0pXG59XG5UcmFuc2Zvcm0ucHJvdG90eXBlLl9yZWFkID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpc1trQ2FsbGJhY2tdKSB7XG4gICAgY29uc3QgY2FsbGJhY2sgPSB0aGlzW2tDYWxsYmFja11cbiAgICB0aGlzW2tDYWxsYmFja10gPSBudWxsXG4gICAgY2FsbGJhY2soKVxuICB9XG59XG4iLAogICAgIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyBhIHBhc3N0aHJvdWdoIHN0cmVhbS5cbi8vIGJhc2ljYWxseSBqdXN0IHRoZSBtb3N0IG1pbmltYWwgc29ydCBvZiBUcmFuc2Zvcm0gc3RyZWFtLlxuLy8gRXZlcnkgd3JpdHRlbiBjaHVuayBnZXRzIG91dHB1dCBhcy1pcy5cblxuJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgT2JqZWN0U2V0UHJvdG90eXBlT2YgfSA9IHJlcXVpcmUoJy4uLy4uL291cnMvcHJpbW9yZGlhbHMnKVxubW9kdWxlLmV4cG9ydHMgPSBQYXNzVGhyb3VnaFxuY29uc3QgVHJhbnNmb3JtID0gcmVxdWlyZSgnLi90cmFuc2Zvcm0nKVxuT2JqZWN0U2V0UHJvdG90eXBlT2YoUGFzc1Rocm91Z2gucHJvdG90eXBlLCBUcmFuc2Zvcm0ucHJvdG90eXBlKVxuT2JqZWN0U2V0UHJvdG90eXBlT2YoUGFzc1Rocm91Z2gsIFRyYW5zZm9ybSlcbmZ1bmN0aW9uIFBhc3NUaHJvdWdoKG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFBhc3NUaHJvdWdoKSkgcmV0dXJuIG5ldyBQYXNzVGhyb3VnaChvcHRpb25zKVxuICBUcmFuc2Zvcm0uY2FsbCh0aGlzLCBvcHRpb25zKVxufVxuUGFzc1Rocm91Z2gucHJvdG90eXBlLl90cmFuc2Zvcm0gPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICBjYihudWxsLCBjaHVuaylcbn1cbiIsCiAgICAiLyogcmVwbGFjZW1lbnQgc3RhcnQgKi9cblxuY29uc3QgcHJvY2VzcyA9IHJlcXVpcmUoJ3Byb2Nlc3MvJylcblxuLyogcmVwbGFjZW1lbnQgZW5kICovXG4vLyBQb3J0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbWFmaW50b3NoL3B1bXAgd2l0aFxuLy8gcGVybWlzc2lvbiBmcm9tIHRoZSBhdXRob3IsIE1hdGhpYXMgQnV1cyAoQG1hZmludG9zaCkuXG5cbjsoJ3VzZSBzdHJpY3QnKVxuY29uc3QgeyBBcnJheUlzQXJyYXksIFByb21pc2UsIFN5bWJvbEFzeW5jSXRlcmF0b3IsIFN5bWJvbERpc3Bvc2UgfSA9IHJlcXVpcmUoJy4uLy4uL291cnMvcHJpbW9yZGlhbHMnKVxuY29uc3QgZW9zID0gcmVxdWlyZSgnLi9lbmQtb2Ytc3RyZWFtJylcbmNvbnN0IHsgb25jZSB9ID0gcmVxdWlyZSgnLi4vLi4vb3Vycy91dGlsJylcbmNvbnN0IGRlc3Ryb3lJbXBsID0gcmVxdWlyZSgnLi9kZXN0cm95JylcbmNvbnN0IER1cGxleCA9IHJlcXVpcmUoJy4vZHVwbGV4JylcbmNvbnN0IHtcbiAgYWdncmVnYXRlVHdvRXJyb3JzLFxuICBjb2Rlczoge1xuICAgIEVSUl9JTlZBTElEX0FSR19UWVBFLFxuICAgIEVSUl9JTlZBTElEX1JFVFVSTl9WQUxVRSxcbiAgICBFUlJfTUlTU0lOR19BUkdTLFxuICAgIEVSUl9TVFJFQU1fREVTVFJPWUVELFxuICAgIEVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFXG4gIH0sXG4gIEFib3J0RXJyb3Jcbn0gPSByZXF1aXJlKCcuLi8uLi9vdXJzL2Vycm9ycycpXG5jb25zdCB7IHZhbGlkYXRlRnVuY3Rpb24sIHZhbGlkYXRlQWJvcnRTaWduYWwgfSA9IHJlcXVpcmUoJy4uL3ZhbGlkYXRvcnMnKVxuY29uc3Qge1xuICBpc0l0ZXJhYmxlLFxuICBpc1JlYWRhYmxlLFxuICBpc1JlYWRhYmxlTm9kZVN0cmVhbSxcbiAgaXNOb2RlU3RyZWFtLFxuICBpc1RyYW5zZm9ybVN0cmVhbSxcbiAgaXNXZWJTdHJlYW0sXG4gIGlzUmVhZGFibGVTdHJlYW0sXG4gIGlzUmVhZGFibGVGaW5pc2hlZFxufSA9IHJlcXVpcmUoJy4vdXRpbHMnKVxuY29uc3QgQWJvcnRDb250cm9sbGVyID0gZ2xvYmFsVGhpcy5BYm9ydENvbnRyb2xsZXIgfHwgcmVxdWlyZSgnYWJvcnQtY29udHJvbGxlcicpLkFib3J0Q29udHJvbGxlclxubGV0IFBhc3NUaHJvdWdoXG5sZXQgUmVhZGFibGVcbmxldCBhZGRBYm9ydExpc3RlbmVyXG5mdW5jdGlvbiBkZXN0cm95ZXIoc3RyZWFtLCByZWFkaW5nLCB3cml0aW5nKSB7XG4gIGxldCBmaW5pc2hlZCA9IGZhbHNlXG4gIHN0cmVhbS5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgZmluaXNoZWQgPSB0cnVlXG4gIH0pXG4gIGNvbnN0IGNsZWFudXAgPSBlb3MoXG4gICAgc3RyZWFtLFxuICAgIHtcbiAgICAgIHJlYWRhYmxlOiByZWFkaW5nLFxuICAgICAgd3JpdGFibGU6IHdyaXRpbmdcbiAgICB9LFxuICAgIChlcnIpID0+IHtcbiAgICAgIGZpbmlzaGVkID0gIWVyclxuICAgIH1cbiAgKVxuICByZXR1cm4ge1xuICAgIGRlc3Ryb3k6IChlcnIpID0+IHtcbiAgICAgIGlmIChmaW5pc2hlZCkgcmV0dXJuXG4gICAgICBmaW5pc2hlZCA9IHRydWVcbiAgICAgIGRlc3Ryb3lJbXBsLmRlc3Ryb3llcihzdHJlYW0sIGVyciB8fCBuZXcgRVJSX1NUUkVBTV9ERVNUUk9ZRUQoJ3BpcGUnKSlcbiAgICB9LFxuICAgIGNsZWFudXBcbiAgfVxufVxuZnVuY3Rpb24gcG9wQ2FsbGJhY2soc3RyZWFtcykge1xuICAvLyBTdHJlYW1zIHNob3VsZCBuZXZlciBiZSBhbiBlbXB0eSBhcnJheS4gSXQgc2hvdWxkIGFsd2F5cyBjb250YWluIGF0IGxlYXN0XG4gIC8vIGEgc2luZ2xlIHN0cmVhbS4gVGhlcmVmb3JlIG9wdGltaXplIGZvciB0aGUgYXZlcmFnZSBjYXNlIGluc3RlYWQgb2ZcbiAgLy8gY2hlY2tpbmcgZm9yIGxlbmd0aCA9PT0gMCBhcyB3ZWxsLlxuICB2YWxpZGF0ZUZ1bmN0aW9uKHN0cmVhbXNbc3RyZWFtcy5sZW5ndGggLSAxXSwgJ3N0cmVhbXNbc3RyZWFtLmxlbmd0aCAtIDFdJylcbiAgcmV0dXJuIHN0cmVhbXMucG9wKClcbn1cbmZ1bmN0aW9uIG1ha2VBc3luY0l0ZXJhYmxlKHZhbCkge1xuICBpZiAoaXNJdGVyYWJsZSh2YWwpKSB7XG4gICAgcmV0dXJuIHZhbFxuICB9IGVsc2UgaWYgKGlzUmVhZGFibGVOb2RlU3RyZWFtKHZhbCkpIHtcbiAgICAvLyBMZWdhY3kgc3RyZWFtcyBhcmUgbm90IEl0ZXJhYmxlLlxuICAgIHJldHVybiBmcm9tUmVhZGFibGUodmFsKVxuICB9XG4gIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRSgndmFsJywgWydSZWFkYWJsZScsICdJdGVyYWJsZScsICdBc3luY0l0ZXJhYmxlJ10sIHZhbClcbn1cbmFzeW5jIGZ1bmN0aW9uKiBmcm9tUmVhZGFibGUodmFsKSB7XG4gIGlmICghUmVhZGFibGUpIHtcbiAgICBSZWFkYWJsZSA9IHJlcXVpcmUoJy4vcmVhZGFibGUnKVxuICB9XG4gIHlpZWxkKiBSZWFkYWJsZS5wcm90b3R5cGVbU3ltYm9sQXN5bmNJdGVyYXRvcl0uY2FsbCh2YWwpXG59XG5hc3luYyBmdW5jdGlvbiBwdW1wVG9Ob2RlKGl0ZXJhYmxlLCB3cml0YWJsZSwgZmluaXNoLCB7IGVuZCB9KSB7XG4gIGxldCBlcnJvclxuICBsZXQgb25yZXNvbHZlID0gbnVsbFxuICBjb25zdCByZXN1bWUgPSAoZXJyKSA9PiB7XG4gICAgaWYgKGVycikge1xuICAgICAgZXJyb3IgPSBlcnJcbiAgICB9XG4gICAgaWYgKG9ucmVzb2x2ZSkge1xuICAgICAgY29uc3QgY2FsbGJhY2sgPSBvbnJlc29sdmVcbiAgICAgIG9ucmVzb2x2ZSA9IG51bGxcbiAgICAgIGNhbGxiYWNrKClcbiAgICB9XG4gIH1cbiAgY29uc3Qgd2FpdCA9ICgpID0+XG4gICAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9ucmVzb2x2ZSA9ICgpID0+IHtcbiAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzb2x2ZSgpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgd3JpdGFibGUub24oJ2RyYWluJywgcmVzdW1lKVxuICBjb25zdCBjbGVhbnVwID0gZW9zKFxuICAgIHdyaXRhYmxlLFxuICAgIHtcbiAgICAgIHJlYWRhYmxlOiBmYWxzZVxuICAgIH0sXG4gICAgcmVzdW1lXG4gIClcbiAgdHJ5IHtcbiAgICBpZiAod3JpdGFibGUud3JpdGFibGVOZWVkRHJhaW4pIHtcbiAgICAgIGF3YWl0IHdhaXQoKVxuICAgIH1cbiAgICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIGl0ZXJhYmxlKSB7XG4gICAgICBpZiAoIXdyaXRhYmxlLndyaXRlKGNodW5rKSkge1xuICAgICAgICBhd2FpdCB3YWl0KClcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGVuZCkge1xuICAgICAgd3JpdGFibGUuZW5kKClcbiAgICAgIGF3YWl0IHdhaXQoKVxuICAgIH1cbiAgICBmaW5pc2goKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBmaW5pc2goZXJyb3IgIT09IGVyciA/IGFnZ3JlZ2F0ZVR3b0Vycm9ycyhlcnJvciwgZXJyKSA6IGVycilcbiAgfSBmaW5hbGx5IHtcbiAgICBjbGVhbnVwKClcbiAgICB3cml0YWJsZS5vZmYoJ2RyYWluJywgcmVzdW1lKVxuICB9XG59XG5hc3luYyBmdW5jdGlvbiBwdW1wVG9XZWIocmVhZGFibGUsIHdyaXRhYmxlLCBmaW5pc2gsIHsgZW5kIH0pIHtcbiAgaWYgKGlzVHJhbnNmb3JtU3RyZWFtKHdyaXRhYmxlKSkge1xuICAgIHdyaXRhYmxlID0gd3JpdGFibGUud3JpdGFibGVcbiAgfVxuICAvLyBodHRwczovL3N0cmVhbXMuc3BlYy53aGF0d2cub3JnLyNleGFtcGxlLW1hbnVhbC13cml0ZS13aXRoLWJhY2twcmVzc3VyZVxuICBjb25zdCB3cml0ZXIgPSB3cml0YWJsZS5nZXRXcml0ZXIoKVxuICB0cnkge1xuICAgIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgcmVhZGFibGUpIHtcbiAgICAgIGF3YWl0IHdyaXRlci5yZWFkeVxuICAgICAgd3JpdGVyLndyaXRlKGNodW5rKS5jYXRjaCgoKSA9PiB7fSlcbiAgICB9XG4gICAgYXdhaXQgd3JpdGVyLnJlYWR5XG4gICAgaWYgKGVuZCkge1xuICAgICAgYXdhaXQgd3JpdGVyLmNsb3NlKClcbiAgICB9XG4gICAgZmluaXNoKClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHdyaXRlci5hYm9ydChlcnIpXG4gICAgICBmaW5pc2goZXJyKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZmluaXNoKGVycilcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHBpcGVsaW5lKC4uLnN0cmVhbXMpIHtcbiAgcmV0dXJuIHBpcGVsaW5lSW1wbChzdHJlYW1zLCBvbmNlKHBvcENhbGxiYWNrKHN0cmVhbXMpKSlcbn1cbmZ1bmN0aW9uIHBpcGVsaW5lSW1wbChzdHJlYW1zLCBjYWxsYmFjaywgb3B0cykge1xuICBpZiAoc3RyZWFtcy5sZW5ndGggPT09IDEgJiYgQXJyYXlJc0FycmF5KHN0cmVhbXNbMF0pKSB7XG4gICAgc3RyZWFtcyA9IHN0cmVhbXNbMF1cbiAgfVxuICBpZiAoc3RyZWFtcy5sZW5ndGggPCAyKSB7XG4gICAgdGhyb3cgbmV3IEVSUl9NSVNTSU5HX0FSR1MoJ3N0cmVhbXMnKVxuICB9XG4gIGNvbnN0IGFjID0gbmV3IEFib3J0Q29udHJvbGxlcigpXG4gIGNvbnN0IHNpZ25hbCA9IGFjLnNpZ25hbFxuICBjb25zdCBvdXRlclNpZ25hbCA9IG9wdHMgPT09IG51bGwgfHwgb3B0cyA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogb3B0cy5zaWduYWxcblxuICAvLyBOZWVkIHRvIGNsZWFudXAgZXZlbnQgbGlzdGVuZXJzIGlmIGxhc3Qgc3RyZWFtIGlzIHJlYWRhYmxlXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9pc3N1ZXMvMzU0NTJcbiAgY29uc3QgbGFzdFN0cmVhbUNsZWFudXAgPSBbXVxuICB2YWxpZGF0ZUFib3J0U2lnbmFsKG91dGVyU2lnbmFsLCAnb3B0aW9ucy5zaWduYWwnKVxuICBmdW5jdGlvbiBhYm9ydCgpIHtcbiAgICBmaW5pc2hJbXBsKG5ldyBBYm9ydEVycm9yKCkpXG4gIH1cbiAgYWRkQWJvcnRMaXN0ZW5lciA9IGFkZEFib3J0TGlzdGVuZXIgfHwgcmVxdWlyZSgnLi4vLi4vb3Vycy91dGlsJykuYWRkQWJvcnRMaXN0ZW5lclxuICBsZXQgZGlzcG9zYWJsZVxuICBpZiAob3V0ZXJTaWduYWwpIHtcbiAgICBkaXNwb3NhYmxlID0gYWRkQWJvcnRMaXN0ZW5lcihvdXRlclNpZ25hbCwgYWJvcnQpXG4gIH1cbiAgbGV0IGVycm9yXG4gIGxldCB2YWx1ZVxuICBjb25zdCBkZXN0cm95cyA9IFtdXG4gIGxldCBmaW5pc2hDb3VudCA9IDBcbiAgZnVuY3Rpb24gZmluaXNoKGVycikge1xuICAgIGZpbmlzaEltcGwoZXJyLCAtLWZpbmlzaENvdW50ID09PSAwKVxuICB9XG4gIGZ1bmN0aW9uIGZpbmlzaEltcGwoZXJyLCBmaW5hbCkge1xuICAgIHZhciBfZGlzcG9zYWJsZVxuICAgIGlmIChlcnIgJiYgKCFlcnJvciB8fCBlcnJvci5jb2RlID09PSAnRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UnKSkge1xuICAgICAgZXJyb3IgPSBlcnJcbiAgICB9XG4gICAgaWYgKCFlcnJvciAmJiAhZmluYWwpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB3aGlsZSAoZGVzdHJveXMubGVuZ3RoKSB7XG4gICAgICBkZXN0cm95cy5zaGlmdCgpKGVycm9yKVxuICAgIH1cbiAgICA7KF9kaXNwb3NhYmxlID0gZGlzcG9zYWJsZSkgPT09IG51bGwgfHwgX2Rpc3Bvc2FibGUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IF9kaXNwb3NhYmxlW1N5bWJvbERpc3Bvc2VdKClcbiAgICBhYy5hYm9ydCgpXG4gICAgaWYgKGZpbmFsKSB7XG4gICAgICBpZiAoIWVycm9yKSB7XG4gICAgICAgIGxhc3RTdHJlYW1DbGVhbnVwLmZvckVhY2goKGZuKSA9PiBmbigpKVxuICAgICAgfVxuICAgICAgcHJvY2Vzcy5uZXh0VGljayhjYWxsYmFjaywgZXJyb3IsIHZhbHVlKVxuICAgIH1cbiAgfVxuICBsZXQgcmV0XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyZWFtcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHN0cmVhbSA9IHN0cmVhbXNbaV1cbiAgICBjb25zdCByZWFkaW5nID0gaSA8IHN0cmVhbXMubGVuZ3RoIC0gMVxuICAgIGNvbnN0IHdyaXRpbmcgPSBpID4gMFxuICAgIGNvbnN0IGVuZCA9IHJlYWRpbmcgfHwgKG9wdHMgPT09IG51bGwgfHwgb3B0cyA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogb3B0cy5lbmQpICE9PSBmYWxzZVxuICAgIGNvbnN0IGlzTGFzdFN0cmVhbSA9IGkgPT09IHN0cmVhbXMubGVuZ3RoIC0gMVxuICAgIGlmIChpc05vZGVTdHJlYW0oc3RyZWFtKSkge1xuICAgICAgaWYgKGVuZCkge1xuICAgICAgICBjb25zdCB7IGRlc3Ryb3ksIGNsZWFudXAgfSA9IGRlc3Ryb3llcihzdHJlYW0sIHJlYWRpbmcsIHdyaXRpbmcpXG4gICAgICAgIGRlc3Ryb3lzLnB1c2goZGVzdHJveSlcbiAgICAgICAgaWYgKGlzUmVhZGFibGUoc3RyZWFtKSAmJiBpc0xhc3RTdHJlYW0pIHtcbiAgICAgICAgICBsYXN0U3RyZWFtQ2xlYW51cC5wdXNoKGNsZWFudXApXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQ2F0Y2ggc3RyZWFtIGVycm9ycyB0aGF0IG9jY3VyIGFmdGVyIHBpcGUvcHVtcCBoYXMgY29tcGxldGVkLlxuICAgICAgZnVuY3Rpb24gb25FcnJvcihlcnIpIHtcbiAgICAgICAgaWYgKGVyciAmJiBlcnIubmFtZSAhPT0gJ0Fib3J0RXJyb3InICYmIGVyci5jb2RlICE9PSAnRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UnKSB7XG4gICAgICAgICAgZmluaXNoKGVycilcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc3RyZWFtLm9uKCdlcnJvcicsIG9uRXJyb3IpXG4gICAgICBpZiAoaXNSZWFkYWJsZShzdHJlYW0pICYmIGlzTGFzdFN0cmVhbSkge1xuICAgICAgICBsYXN0U3RyZWFtQ2xlYW51cC5wdXNoKCgpID0+IHtcbiAgICAgICAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgb25FcnJvcilcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGkgPT09IDApIHtcbiAgICAgIGlmICh0eXBlb2Ygc3RyZWFtID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldCA9IHN0cmVhbSh7XG4gICAgICAgICAgc2lnbmFsXG4gICAgICAgIH0pXG4gICAgICAgIGlmICghaXNJdGVyYWJsZShyZXQpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX1JFVFVSTl9WQUxVRSgnSXRlcmFibGUsIEFzeW5jSXRlcmFibGUgb3IgU3RyZWFtJywgJ3NvdXJjZScsIHJldClcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc0l0ZXJhYmxlKHN0cmVhbSkgfHwgaXNSZWFkYWJsZU5vZGVTdHJlYW0oc3RyZWFtKSB8fCBpc1RyYW5zZm9ybVN0cmVhbShzdHJlYW0pKSB7XG4gICAgICAgIHJldCA9IHN0cmVhbVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0ID0gRHVwbGV4LmZyb20oc3RyZWFtKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIHN0cmVhbSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKGlzVHJhbnNmb3JtU3RyZWFtKHJldCkpIHtcbiAgICAgICAgdmFyIF9yZXRcbiAgICAgICAgcmV0ID0gbWFrZUFzeW5jSXRlcmFibGUoKF9yZXQgPSByZXQpID09PSBudWxsIHx8IF9yZXQgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IF9yZXQucmVhZGFibGUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXQgPSBtYWtlQXN5bmNJdGVyYWJsZShyZXQpXG4gICAgICB9XG4gICAgICByZXQgPSBzdHJlYW0ocmV0LCB7XG4gICAgICAgIHNpZ25hbFxuICAgICAgfSlcbiAgICAgIGlmIChyZWFkaW5nKSB7XG4gICAgICAgIGlmICghaXNJdGVyYWJsZShyZXQsIHRydWUpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX1JFVFVSTl9WQUxVRSgnQXN5bmNJdGVyYWJsZScsIGB0cmFuc2Zvcm1bJHtpIC0gMX1dYCwgcmV0KVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgX3JldDJcbiAgICAgICAgaWYgKCFQYXNzVGhyb3VnaCkge1xuICAgICAgICAgIFBhc3NUaHJvdWdoID0gcmVxdWlyZSgnLi9wYXNzdGhyb3VnaCcpXG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB0aGUgbGFzdCBhcmd1bWVudCB0byBwaXBlbGluZSBpcyBub3QgYSBzdHJlYW1cbiAgICAgICAgLy8gd2UgbXVzdCBjcmVhdGUgYSBwcm94eSBzdHJlYW0gc28gdGhhdCBwaXBlbGluZSguLi4pXG4gICAgICAgIC8vIGFsd2F5cyByZXR1cm5zIGEgc3RyZWFtIHdoaWNoIGNhbiBiZSBmdXJ0aGVyXG4gICAgICAgIC8vIGNvbXBvc2VkIHRocm91Z2ggYC5waXBlKHN0cmVhbSlgLlxuXG4gICAgICAgIGNvbnN0IHB0ID0gbmV3IFBhc3NUaHJvdWdoKHtcbiAgICAgICAgICBvYmplY3RNb2RlOiB0cnVlXG4gICAgICAgIH0pXG5cbiAgICAgICAgLy8gSGFuZGxlIFByb21pc2VzL0ErIHNwZWMsIGB0aGVuYCBjb3VsZCBiZSBhIGdldHRlciB0aGF0IHRocm93cyBvblxuICAgICAgICAvLyBzZWNvbmQgdXNlLlxuICAgICAgICBjb25zdCB0aGVuID0gKF9yZXQyID0gcmV0KSA9PT0gbnVsbCB8fCBfcmV0MiA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogX3JldDIudGhlblxuICAgICAgICBpZiAodHlwZW9mIHRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBmaW5pc2hDb3VudCsrXG4gICAgICAgICAgdGhlbi5jYWxsKFxuICAgICAgICAgICAgcmV0LFxuICAgICAgICAgICAgKHZhbCkgPT4ge1xuICAgICAgICAgICAgICB2YWx1ZSA9IHZhbFxuICAgICAgICAgICAgICBpZiAodmFsICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBwdC53cml0ZSh2YWwpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGVuZCkge1xuICAgICAgICAgICAgICAgIHB0LmVuZCgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhmaW5pc2gpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgICAgICBwdC5kZXN0cm95KGVycilcbiAgICAgICAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhmaW5pc2gsIGVycilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSBpZiAoaXNJdGVyYWJsZShyZXQsIHRydWUpKSB7XG4gICAgICAgICAgZmluaXNoQ291bnQrK1xuICAgICAgICAgIHB1bXBUb05vZGUocmV0LCBwdCwgZmluaXNoLCB7XG4gICAgICAgICAgICBlbmRcbiAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2UgaWYgKGlzUmVhZGFibGVTdHJlYW0ocmV0KSB8fCBpc1RyYW5zZm9ybVN0cmVhbShyZXQpKSB7XG4gICAgICAgICAgY29uc3QgdG9SZWFkID0gcmV0LnJlYWRhYmxlIHx8IHJldFxuICAgICAgICAgIGZpbmlzaENvdW50KytcbiAgICAgICAgICBwdW1wVG9Ob2RlKHRvUmVhZCwgcHQsIGZpbmlzaCwge1xuICAgICAgICAgICAgZW5kXG4gICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfUkVUVVJOX1ZBTFVFKCdBc3luY0l0ZXJhYmxlIG9yIFByb21pc2UnLCAnZGVzdGluYXRpb24nLCByZXQpXG4gICAgICAgIH1cbiAgICAgICAgcmV0ID0gcHRcbiAgICAgICAgY29uc3QgeyBkZXN0cm95LCBjbGVhbnVwIH0gPSBkZXN0cm95ZXIocmV0LCBmYWxzZSwgdHJ1ZSlcbiAgICAgICAgZGVzdHJveXMucHVzaChkZXN0cm95KVxuICAgICAgICBpZiAoaXNMYXN0U3RyZWFtKSB7XG4gICAgICAgICAgbGFzdFN0cmVhbUNsZWFudXAucHVzaChjbGVhbnVwKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc05vZGVTdHJlYW0oc3RyZWFtKSkge1xuICAgICAgaWYgKGlzUmVhZGFibGVOb2RlU3RyZWFtKHJldCkpIHtcbiAgICAgICAgZmluaXNoQ291bnQgKz0gMlxuICAgICAgICBjb25zdCBjbGVhbnVwID0gcGlwZShyZXQsIHN0cmVhbSwgZmluaXNoLCB7XG4gICAgICAgICAgZW5kXG4gICAgICAgIH0pXG4gICAgICAgIGlmIChpc1JlYWRhYmxlKHN0cmVhbSkgJiYgaXNMYXN0U3RyZWFtKSB7XG4gICAgICAgICAgbGFzdFN0cmVhbUNsZWFudXAucHVzaChjbGVhbnVwKVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGlzVHJhbnNmb3JtU3RyZWFtKHJldCkgfHwgaXNSZWFkYWJsZVN0cmVhbShyZXQpKSB7XG4gICAgICAgIGNvbnN0IHRvUmVhZCA9IHJldC5yZWFkYWJsZSB8fCByZXRcbiAgICAgICAgZmluaXNoQ291bnQrK1xuICAgICAgICBwdW1wVG9Ob2RlKHRvUmVhZCwgc3RyZWFtLCBmaW5pc2gsIHtcbiAgICAgICAgICBlbmRcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSBpZiAoaXNJdGVyYWJsZShyZXQpKSB7XG4gICAgICAgIGZpbmlzaENvdW50KytcbiAgICAgICAgcHVtcFRvTm9kZShyZXQsIHN0cmVhbSwgZmluaXNoLCB7XG4gICAgICAgICAgZW5kXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoXG4gICAgICAgICAgJ3ZhbCcsXG4gICAgICAgICAgWydSZWFkYWJsZScsICdJdGVyYWJsZScsICdBc3luY0l0ZXJhYmxlJywgJ1JlYWRhYmxlU3RyZWFtJywgJ1RyYW5zZm9ybVN0cmVhbSddLFxuICAgICAgICAgIHJldFxuICAgICAgICApXG4gICAgICB9XG4gICAgICByZXQgPSBzdHJlYW1cbiAgICB9IGVsc2UgaWYgKGlzV2ViU3RyZWFtKHN0cmVhbSkpIHtcbiAgICAgIGlmIChpc1JlYWRhYmxlTm9kZVN0cmVhbShyZXQpKSB7XG4gICAgICAgIGZpbmlzaENvdW50KytcbiAgICAgICAgcHVtcFRvV2ViKG1ha2VBc3luY0l0ZXJhYmxlKHJldCksIHN0cmVhbSwgZmluaXNoLCB7XG4gICAgICAgICAgZW5kXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2UgaWYgKGlzUmVhZGFibGVTdHJlYW0ocmV0KSB8fCBpc0l0ZXJhYmxlKHJldCkpIHtcbiAgICAgICAgZmluaXNoQ291bnQrK1xuICAgICAgICBwdW1wVG9XZWIocmV0LCBzdHJlYW0sIGZpbmlzaCwge1xuICAgICAgICAgIGVuZFxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIGlmIChpc1RyYW5zZm9ybVN0cmVhbShyZXQpKSB7XG4gICAgICAgIGZpbmlzaENvdW50KytcbiAgICAgICAgcHVtcFRvV2ViKHJldC5yZWFkYWJsZSwgc3RyZWFtLCBmaW5pc2gsIHtcbiAgICAgICAgICBlbmRcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRShcbiAgICAgICAgICAndmFsJyxcbiAgICAgICAgICBbJ1JlYWRhYmxlJywgJ0l0ZXJhYmxlJywgJ0FzeW5jSXRlcmFibGUnLCAnUmVhZGFibGVTdHJlYW0nLCAnVHJhbnNmb3JtU3RyZWFtJ10sXG4gICAgICAgICAgcmV0XG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIHJldCA9IHN0cmVhbVxuICAgIH0gZWxzZSB7XG4gICAgICByZXQgPSBEdXBsZXguZnJvbShzdHJlYW0pXG4gICAgfVxuICB9XG4gIGlmIChcbiAgICAoc2lnbmFsICE9PSBudWxsICYmIHNpZ25hbCAhPT0gdW5kZWZpbmVkICYmIHNpZ25hbC5hYm9ydGVkKSB8fFxuICAgIChvdXRlclNpZ25hbCAhPT0gbnVsbCAmJiBvdXRlclNpZ25hbCAhPT0gdW5kZWZpbmVkICYmIG91dGVyU2lnbmFsLmFib3J0ZWQpXG4gICkge1xuICAgIHByb2Nlc3MubmV4dFRpY2soYWJvcnQpXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuZnVuY3Rpb24gcGlwZShzcmMsIGRzdCwgZmluaXNoLCB7IGVuZCB9KSB7XG4gIGxldCBlbmRlZCA9IGZhbHNlXG4gIGRzdC5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgaWYgKCFlbmRlZCkge1xuICAgICAgLy8gRmluaXNoIGlmIHRoZSBkZXN0aW5hdGlvbiBjbG9zZXMgYmVmb3JlIHRoZSBzb3VyY2UgaGFzIGNvbXBsZXRlZC5cbiAgICAgIGZpbmlzaChuZXcgRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UoKSlcbiAgICB9XG4gIH0pXG4gIHNyYy5waXBlKGRzdCwge1xuICAgIGVuZDogZmFsc2VcbiAgfSkgLy8gSWYgZW5kIGlzIHRydWUgd2UgYWxyZWFkeSB3aWxsIGhhdmUgYSBsaXN0ZW5lciB0byBlbmQgZHN0LlxuXG4gIGlmIChlbmQpIHtcbiAgICAvLyBDb21wYXQuIEJlZm9yZSBub2RlIHYxMC4xMi4wIHN0ZGlvIHVzZWQgdG8gdGhyb3cgYW4gZXJyb3Igc29cbiAgICAvLyBwaXBlKCkgZGlkL2RvZXMgbm90IGVuZCgpIHN0ZGlvIGRlc3RpbmF0aW9ucy5cbiAgICAvLyBOb3cgdGhleSBhbGxvdyBpdCBidXQgXCJzZWNyZXRseVwiIGRvbid0IGNsb3NlIHRoZSB1bmRlcmx5aW5nIGZkLlxuXG4gICAgZnVuY3Rpb24gZW5kRm4oKSB7XG4gICAgICBlbmRlZCA9IHRydWVcbiAgICAgIGRzdC5lbmQoKVxuICAgIH1cbiAgICBpZiAoaXNSZWFkYWJsZUZpbmlzaGVkKHNyYykpIHtcbiAgICAgIC8vIEVuZCB0aGUgZGVzdGluYXRpb24gaWYgdGhlIHNvdXJjZSBoYXMgYWxyZWFkeSBlbmRlZC5cbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZW5kRm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHNyYy5vbmNlKCdlbmQnLCBlbmRGbilcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZmluaXNoKClcbiAgfVxuICBlb3MoXG4gICAgc3JjLFxuICAgIHtcbiAgICAgIHJlYWRhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IGZhbHNlXG4gICAgfSxcbiAgICAoZXJyKSA9PiB7XG4gICAgICBjb25zdCByU3RhdGUgPSBzcmMuX3JlYWRhYmxlU3RhdGVcbiAgICAgIGlmIChcbiAgICAgICAgZXJyICYmXG4gICAgICAgIGVyci5jb2RlID09PSAnRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UnICYmXG4gICAgICAgIHJTdGF0ZSAmJlxuICAgICAgICByU3RhdGUuZW5kZWQgJiZcbiAgICAgICAgIXJTdGF0ZS5lcnJvcmVkICYmXG4gICAgICAgICFyU3RhdGUuZXJyb3JFbWl0dGVkXG4gICAgICApIHtcbiAgICAgICAgLy8gU29tZSByZWFkYWJsZSBzdHJlYW1zIHdpbGwgZW1pdCAnY2xvc2UnIGJlZm9yZSAnZW5kJy4gSG93ZXZlciwgc2luY2VcbiAgICAgICAgLy8gdGhpcyBpcyBvbiB0aGUgcmVhZGFibGUgc2lkZSAnZW5kJyBzaG91bGQgc3RpbGwgYmUgZW1pdHRlZCBpZiB0aGVcbiAgICAgICAgLy8gc3RyZWFtIGhhcyBiZWVuIGVuZGVkIGFuZCBubyBlcnJvciBlbWl0dGVkLiBUaGlzIHNob3VsZCBiZSBhbGxvd2VkIGluXG4gICAgICAgIC8vIGZhdm9yIG9mIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiBTaW5jZSB0aGUgc3RyZWFtIGlzIHBpcGVkIHRvIGFcbiAgICAgICAgLy8gZGVzdGluYXRpb24gdGhpcyBzaG91bGQgbm90IHJlc3VsdCBpbiBhbnkgb2JzZXJ2YWJsZSBkaWZmZXJlbmNlLlxuICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGNoZWNrIGlmIHRoaXMgaXMgYSB3cml0YWJsZSBwcmVtYXR1cmUgY2xvc2Ugc2luY2VcbiAgICAgICAgLy8gZW9zIHdpbGwgb25seSBmYWlsIHdpdGggcHJlbWF0dXJlIGNsb3NlIG9uIHRoZSByZWFkaW5nIHNpZGUgZm9yXG4gICAgICAgIC8vIGR1cGxleCBzdHJlYW1zLlxuICAgICAgICBzcmMub25jZSgnZW5kJywgZmluaXNoKS5vbmNlKCdlcnJvcicsIGZpbmlzaClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpbmlzaChlcnIpXG4gICAgICB9XG4gICAgfVxuICApXG4gIHJldHVybiBlb3MoXG4gICAgZHN0LFxuICAgIHtcbiAgICAgIHJlYWRhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSxcbiAgICBmaW5pc2hcbiAgKVxufVxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHBpcGVsaW5lSW1wbCxcbiAgcGlwZWxpbmVcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgcGlwZWxpbmUgfSA9IHJlcXVpcmUoJy4vcGlwZWxpbmUnKVxuY29uc3QgRHVwbGV4ID0gcmVxdWlyZSgnLi9kdXBsZXgnKVxuY29uc3QgeyBkZXN0cm95ZXIgfSA9IHJlcXVpcmUoJy4vZGVzdHJveScpXG5jb25zdCB7XG4gIGlzTm9kZVN0cmVhbSxcbiAgaXNSZWFkYWJsZSxcbiAgaXNXcml0YWJsZSxcbiAgaXNXZWJTdHJlYW0sXG4gIGlzVHJhbnNmb3JtU3RyZWFtLFxuICBpc1dyaXRhYmxlU3RyZWFtLFxuICBpc1JlYWRhYmxlU3RyZWFtXG59ID0gcmVxdWlyZSgnLi91dGlscycpXG5jb25zdCB7XG4gIEFib3J0RXJyb3IsXG4gIGNvZGVzOiB7IEVSUl9JTlZBTElEX0FSR19WQUxVRSwgRVJSX01JU1NJTkdfQVJHUyB9XG59ID0gcmVxdWlyZSgnLi4vLi4vb3Vycy9lcnJvcnMnKVxuY29uc3QgZW9zID0gcmVxdWlyZSgnLi9lbmQtb2Ytc3RyZWFtJylcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY29tcG9zZSguLi5zdHJlYW1zKSB7XG4gIGlmIChzdHJlYW1zLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFUlJfTUlTU0lOR19BUkdTKCdzdHJlYW1zJylcbiAgfVxuICBpZiAoc3RyZWFtcy5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gRHVwbGV4LmZyb20oc3RyZWFtc1swXSlcbiAgfVxuICBjb25zdCBvcmdTdHJlYW1zID0gWy4uLnN0cmVhbXNdXG4gIGlmICh0eXBlb2Ygc3RyZWFtc1swXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHN0cmVhbXNbMF0gPSBEdXBsZXguZnJvbShzdHJlYW1zWzBdKVxuICB9XG4gIGlmICh0eXBlb2Ygc3RyZWFtc1tzdHJlYW1zLmxlbmd0aCAtIDFdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY29uc3QgaWR4ID0gc3RyZWFtcy5sZW5ndGggLSAxXG4gICAgc3RyZWFtc1tpZHhdID0gRHVwbGV4LmZyb20oc3RyZWFtc1tpZHhdKVxuICB9XG4gIGZvciAobGV0IG4gPSAwOyBuIDwgc3RyZWFtcy5sZW5ndGg7ICsrbikge1xuICAgIGlmICghaXNOb2RlU3RyZWFtKHN0cmVhbXNbbl0pICYmICFpc1dlYlN0cmVhbShzdHJlYW1zW25dKSkge1xuICAgICAgLy8gVE9ETyhyb25hZyk6IEFkZCBjaGVja3MgZm9yIG5vbiBzdHJlYW1zLlxuICAgICAgY29udGludWVcbiAgICB9XG4gICAgaWYgKFxuICAgICAgbiA8IHN0cmVhbXMubGVuZ3RoIC0gMSAmJlxuICAgICAgIShpc1JlYWRhYmxlKHN0cmVhbXNbbl0pIHx8IGlzUmVhZGFibGVTdHJlYW0oc3RyZWFtc1tuXSkgfHwgaXNUcmFuc2Zvcm1TdHJlYW0oc3RyZWFtc1tuXSkpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1ZBTFVFKGBzdHJlYW1zWyR7bn1dYCwgb3JnU3RyZWFtc1tuXSwgJ211c3QgYmUgcmVhZGFibGUnKVxuICAgIH1cbiAgICBpZiAobiA+IDAgJiYgIShpc1dyaXRhYmxlKHN0cmVhbXNbbl0pIHx8IGlzV3JpdGFibGVTdHJlYW0oc3RyZWFtc1tuXSkgfHwgaXNUcmFuc2Zvcm1TdHJlYW0oc3RyZWFtc1tuXSkpKSB7XG4gICAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1ZBTFVFKGBzdHJlYW1zWyR7bn1dYCwgb3JnU3RyZWFtc1tuXSwgJ211c3QgYmUgd3JpdGFibGUnKVxuICAgIH1cbiAgfVxuICBsZXQgb25kcmFpblxuICBsZXQgb25maW5pc2hcbiAgbGV0IG9ucmVhZGFibGVcbiAgbGV0IG9uY2xvc2VcbiAgbGV0IGRcbiAgZnVuY3Rpb24gb25maW5pc2hlZChlcnIpIHtcbiAgICBjb25zdCBjYiA9IG9uY2xvc2VcbiAgICBvbmNsb3NlID0gbnVsbFxuICAgIGlmIChjYikge1xuICAgICAgY2IoZXJyKVxuICAgIH0gZWxzZSBpZiAoZXJyKSB7XG4gICAgICBkLmRlc3Ryb3koZXJyKVxuICAgIH0gZWxzZSBpZiAoIXJlYWRhYmxlICYmICF3cml0YWJsZSkge1xuICAgICAgZC5kZXN0cm95KClcbiAgICB9XG4gIH1cbiAgY29uc3QgaGVhZCA9IHN0cmVhbXNbMF1cbiAgY29uc3QgdGFpbCA9IHBpcGVsaW5lKHN0cmVhbXMsIG9uZmluaXNoZWQpXG4gIGNvbnN0IHdyaXRhYmxlID0gISEoaXNXcml0YWJsZShoZWFkKSB8fCBpc1dyaXRhYmxlU3RyZWFtKGhlYWQpIHx8IGlzVHJhbnNmb3JtU3RyZWFtKGhlYWQpKVxuICBjb25zdCByZWFkYWJsZSA9ICEhKGlzUmVhZGFibGUodGFpbCkgfHwgaXNSZWFkYWJsZVN0cmVhbSh0YWlsKSB8fCBpc1RyYW5zZm9ybVN0cmVhbSh0YWlsKSlcblxuICAvLyBUT0RPKHJvbmFnKTogQXZvaWQgZG91YmxlIGJ1ZmZlcmluZy5cbiAgLy8gSW1wbGVtZW50IFdyaXRhYmxlL1JlYWRhYmxlL0R1cGxleCB0cmFpdHMuXG4gIC8vIFNlZSwgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvMzM1MTUuXG4gIGQgPSBuZXcgRHVwbGV4KHtcbiAgICAvLyBUT0RPIChyb25hZyk6IGhpZ2hXYXRlck1hcms/XG4gICAgd3JpdGFibGVPYmplY3RNb2RlOiAhIShoZWFkICE9PSBudWxsICYmIGhlYWQgIT09IHVuZGVmaW5lZCAmJiBoZWFkLndyaXRhYmxlT2JqZWN0TW9kZSksXG4gICAgcmVhZGFibGVPYmplY3RNb2RlOiAhISh0YWlsICE9PSBudWxsICYmIHRhaWwgIT09IHVuZGVmaW5lZCAmJiB0YWlsLnJlYWRhYmxlT2JqZWN0TW9kZSksXG4gICAgd3JpdGFibGUsXG4gICAgcmVhZGFibGVcbiAgfSlcbiAgaWYgKHdyaXRhYmxlKSB7XG4gICAgaWYgKGlzTm9kZVN0cmVhbShoZWFkKSkge1xuICAgICAgZC5fd3JpdGUgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYWxsYmFjaykge1xuICAgICAgICBpZiAoaGVhZC53cml0ZShjaHVuaywgZW5jb2RpbmcpKSB7XG4gICAgICAgICAgY2FsbGJhY2soKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9uZHJhaW4gPSBjYWxsYmFja1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBkLl9maW5hbCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICBoZWFkLmVuZCgpXG4gICAgICAgIG9uZmluaXNoID0gY2FsbGJhY2tcbiAgICAgIH1cbiAgICAgIGhlYWQub24oJ2RyYWluJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAob25kcmFpbikge1xuICAgICAgICAgIGNvbnN0IGNiID0gb25kcmFpblxuICAgICAgICAgIG9uZHJhaW4gPSBudWxsXG4gICAgICAgICAgY2IoKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0gZWxzZSBpZiAoaXNXZWJTdHJlYW0oaGVhZCkpIHtcbiAgICAgIGNvbnN0IHdyaXRhYmxlID0gaXNUcmFuc2Zvcm1TdHJlYW0oaGVhZCkgPyBoZWFkLndyaXRhYmxlIDogaGVhZFxuICAgICAgY29uc3Qgd3JpdGVyID0gd3JpdGFibGUuZ2V0V3JpdGVyKClcbiAgICAgIGQuX3dyaXRlID0gYXN5bmMgZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2FsbGJhY2spIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB3cml0ZXIucmVhZHlcbiAgICAgICAgICB3cml0ZXIud3JpdGUoY2h1bmspLmNhdGNoKCgpID0+IHt9KVxuICAgICAgICAgIGNhbGxiYWNrKClcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY2FsbGJhY2soZXJyKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBkLl9maW5hbCA9IGFzeW5jIGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHdyaXRlci5yZWFkeVxuICAgICAgICAgIHdyaXRlci5jbG9zZSgpLmNhdGNoKCgpID0+IHt9KVxuICAgICAgICAgIG9uZmluaXNoID0gY2FsbGJhY2tcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY2FsbGJhY2soZXJyKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHRvUmVhZCA9IGlzVHJhbnNmb3JtU3RyZWFtKHRhaWwpID8gdGFpbC5yZWFkYWJsZSA6IHRhaWxcbiAgICBlb3ModG9SZWFkLCAoKSA9PiB7XG4gICAgICBpZiAob25maW5pc2gpIHtcbiAgICAgICAgY29uc3QgY2IgPSBvbmZpbmlzaFxuICAgICAgICBvbmZpbmlzaCA9IG51bGxcbiAgICAgICAgY2IoKVxuICAgICAgfVxuICAgIH0pXG4gIH1cbiAgaWYgKHJlYWRhYmxlKSB7XG4gICAgaWYgKGlzTm9kZVN0cmVhbSh0YWlsKSkge1xuICAgICAgdGFpbC5vbigncmVhZGFibGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChvbnJlYWRhYmxlKSB7XG4gICAgICAgICAgY29uc3QgY2IgPSBvbnJlYWRhYmxlXG4gICAgICAgICAgb25yZWFkYWJsZSA9IG51bGxcbiAgICAgICAgICBjYigpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICB0YWlsLm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGQucHVzaChudWxsKVxuICAgICAgfSlcbiAgICAgIGQuX3JlYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgY29uc3QgYnVmID0gdGFpbC5yZWFkKClcbiAgICAgICAgICBpZiAoYnVmID09PSBudWxsKSB7XG4gICAgICAgICAgICBvbnJlYWRhYmxlID0gZC5fcmVhZFxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghZC5wdXNoKGJ1ZikpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNXZWJTdHJlYW0odGFpbCkpIHtcbiAgICAgIGNvbnN0IHJlYWRhYmxlID0gaXNUcmFuc2Zvcm1TdHJlYW0odGFpbCkgPyB0YWlsLnJlYWRhYmxlIDogdGFpbFxuICAgICAgY29uc3QgcmVhZGVyID0gcmVhZGFibGUuZ2V0UmVhZGVyKClcbiAgICAgIGQuX3JlYWQgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHsgdmFsdWUsIGRvbmUgfSA9IGF3YWl0IHJlYWRlci5yZWFkKClcbiAgICAgICAgICAgIGlmICghZC5wdXNoKHZhbHVlKSkge1xuICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICAgIGQucHVzaChudWxsKVxuICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBkLl9kZXN0cm95ID0gZnVuY3Rpb24gKGVyciwgY2FsbGJhY2spIHtcbiAgICBpZiAoIWVyciAmJiBvbmNsb3NlICE9PSBudWxsKSB7XG4gICAgICBlcnIgPSBuZXcgQWJvcnRFcnJvcigpXG4gICAgfVxuICAgIG9ucmVhZGFibGUgPSBudWxsXG4gICAgb25kcmFpbiA9IG51bGxcbiAgICBvbmZpbmlzaCA9IG51bGxcbiAgICBpZiAob25jbG9zZSA9PT0gbnVsbCkge1xuICAgICAgY2FsbGJhY2soZXJyKVxuICAgIH0gZWxzZSB7XG4gICAgICBvbmNsb3NlID0gY2FsbGJhY2tcbiAgICAgIGlmIChpc05vZGVTdHJlYW0odGFpbCkpIHtcbiAgICAgICAgZGVzdHJveWVyKHRhaWwsIGVycilcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IEFib3J0Q29udHJvbGxlciA9IGdsb2JhbFRoaXMuQWJvcnRDb250cm9sbGVyIHx8IHJlcXVpcmUoJ2Fib3J0LWNvbnRyb2xsZXInKS5BYm9ydENvbnRyb2xsZXJcbmNvbnN0IHtcbiAgY29kZXM6IHsgRVJSX0lOVkFMSURfQVJHX1ZBTFVFLCBFUlJfSU5WQUxJRF9BUkdfVFlQRSwgRVJSX01JU1NJTkdfQVJHUywgRVJSX09VVF9PRl9SQU5HRSB9LFxuICBBYm9ydEVycm9yXG59ID0gcmVxdWlyZSgnLi4vLi4vb3Vycy9lcnJvcnMnKVxuY29uc3QgeyB2YWxpZGF0ZUFib3J0U2lnbmFsLCB2YWxpZGF0ZUludGVnZXIsIHZhbGlkYXRlT2JqZWN0IH0gPSByZXF1aXJlKCcuLi92YWxpZGF0b3JzJylcbmNvbnN0IGtXZWFrSGFuZGxlciA9IHJlcXVpcmUoJy4uLy4uL291cnMvcHJpbW9yZGlhbHMnKS5TeW1ib2woJ2tXZWFrJylcbmNvbnN0IGtSZXNpc3RTdG9wUHJvcGFnYXRpb24gPSByZXF1aXJlKCcuLi8uLi9vdXJzL3ByaW1vcmRpYWxzJykuU3ltYm9sKCdrUmVzaXN0U3RvcFByb3BhZ2F0aW9uJylcbmNvbnN0IHsgZmluaXNoZWQgfSA9IHJlcXVpcmUoJy4vZW5kLW9mLXN0cmVhbScpXG5jb25zdCBzdGF0aWNDb21wb3NlID0gcmVxdWlyZSgnLi9jb21wb3NlJylcbmNvbnN0IHsgYWRkQWJvcnRTaWduYWxOb1ZhbGlkYXRlIH0gPSByZXF1aXJlKCcuL2FkZC1hYm9ydC1zaWduYWwnKVxuY29uc3QgeyBpc1dyaXRhYmxlLCBpc05vZGVTdHJlYW0gfSA9IHJlcXVpcmUoJy4vdXRpbHMnKVxuY29uc3QgeyBkZXByZWNhdGUgfSA9IHJlcXVpcmUoJy4uLy4uL291cnMvdXRpbCcpXG5jb25zdCB7XG4gIEFycmF5UHJvdG90eXBlUHVzaCxcbiAgQm9vbGVhbixcbiAgTWF0aEZsb29yLFxuICBOdW1iZXIsXG4gIE51bWJlcklzTmFOLFxuICBQcm9taXNlLFxuICBQcm9taXNlUmVqZWN0LFxuICBQcm9taXNlUmVzb2x2ZSxcbiAgUHJvbWlzZVByb3RvdHlwZVRoZW4sXG4gIFN5bWJvbFxufSA9IHJlcXVpcmUoJy4uLy4uL291cnMvcHJpbW9yZGlhbHMnKVxuY29uc3Qga0VtcHR5ID0gU3ltYm9sKCdrRW1wdHknKVxuY29uc3Qga0VvZiA9IFN5bWJvbCgna0VvZicpXG5mdW5jdGlvbiBjb21wb3NlKHN0cmVhbSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyAhPSBudWxsKSB7XG4gICAgdmFsaWRhdGVPYmplY3Qob3B0aW9ucywgJ29wdGlvbnMnKVxuICB9XG4gIGlmICgob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBvcHRpb25zLnNpZ25hbCkgIT0gbnVsbCkge1xuICAgIHZhbGlkYXRlQWJvcnRTaWduYWwob3B0aW9ucy5zaWduYWwsICdvcHRpb25zLnNpZ25hbCcpXG4gIH1cbiAgaWYgKGlzTm9kZVN0cmVhbShzdHJlYW0pICYmICFpc1dyaXRhYmxlKHN0cmVhbSkpIHtcbiAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1ZBTFVFKCdzdHJlYW0nLCBzdHJlYW0sICdtdXN0IGJlIHdyaXRhYmxlJylcbiAgfVxuICBjb25zdCBjb21wb3NlZFN0cmVhbSA9IHN0YXRpY0NvbXBvc2UodGhpcywgc3RyZWFtKVxuICBpZiAob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB1bmRlZmluZWQgJiYgb3B0aW9ucy5zaWduYWwpIHtcbiAgICAvLyBOb3QgdmFsaWRhdGluZyBhcyB3ZSBhbHJlYWR5IHZhbGlkYXRlZCBiZWZvcmVcbiAgICBhZGRBYm9ydFNpZ25hbE5vVmFsaWRhdGUob3B0aW9ucy5zaWduYWwsIGNvbXBvc2VkU3RyZWFtKVxuICB9XG4gIHJldHVybiBjb21wb3NlZFN0cmVhbVxufVxuZnVuY3Rpb24gbWFwKGZuLCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoJ2ZuJywgWydGdW5jdGlvbicsICdBc3luY0Z1bmN0aW9uJ10sIGZuKVxuICB9XG4gIGlmIChvcHRpb25zICE9IG51bGwpIHtcbiAgICB2YWxpZGF0ZU9iamVjdChvcHRpb25zLCAnb3B0aW9ucycpXG4gIH1cbiAgaWYgKChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IG9wdGlvbnMuc2lnbmFsKSAhPSBudWxsKSB7XG4gICAgdmFsaWRhdGVBYm9ydFNpZ25hbChvcHRpb25zLnNpZ25hbCwgJ29wdGlvbnMuc2lnbmFsJylcbiAgfVxuICBsZXQgY29uY3VycmVuY3kgPSAxXG4gIGlmICgob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBvcHRpb25zLmNvbmN1cnJlbmN5KSAhPSBudWxsKSB7XG4gICAgY29uY3VycmVuY3kgPSBNYXRoRmxvb3Iob3B0aW9ucy5jb25jdXJyZW5jeSlcbiAgfVxuICBsZXQgaGlnaFdhdGVyTWFyayA9IGNvbmN1cnJlbmN5IC0gMVxuICBpZiAoKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogb3B0aW9ucy5oaWdoV2F0ZXJNYXJrKSAhPSBudWxsKSB7XG4gICAgaGlnaFdhdGVyTWFyayA9IE1hdGhGbG9vcihvcHRpb25zLmhpZ2hXYXRlck1hcmspXG4gIH1cbiAgdmFsaWRhdGVJbnRlZ2VyKGNvbmN1cnJlbmN5LCAnb3B0aW9ucy5jb25jdXJyZW5jeScsIDEpXG4gIHZhbGlkYXRlSW50ZWdlcihoaWdoV2F0ZXJNYXJrLCAnb3B0aW9ucy5oaWdoV2F0ZXJNYXJrJywgMClcbiAgaGlnaFdhdGVyTWFyayArPSBjb25jdXJyZW5jeVxuICByZXR1cm4gYXN5bmMgZnVuY3Rpb24qIG1hcCgpIHtcbiAgICBjb25zdCBzaWduYWwgPSByZXF1aXJlKCcuLi8uLi9vdXJzL3V0aWwnKS5BYm9ydFNpZ25hbEFueShcbiAgICAgIFtvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IG9wdGlvbnMuc2lnbmFsXS5maWx0ZXIoQm9vbGVhbilcbiAgICApXG4gICAgY29uc3Qgc3RyZWFtID0gdGhpc1xuICAgIGNvbnN0IHF1ZXVlID0gW11cbiAgICBjb25zdCBzaWduYWxPcHQgPSB7XG4gICAgICBzaWduYWxcbiAgICB9XG4gICAgbGV0IG5leHRcbiAgICBsZXQgcmVzdW1lXG4gICAgbGV0IGRvbmUgPSBmYWxzZVxuICAgIGxldCBjbnQgPSAwXG4gICAgZnVuY3Rpb24gb25DYXRjaCgpIHtcbiAgICAgIGRvbmUgPSB0cnVlXG4gICAgICBhZnRlckl0ZW1Qcm9jZXNzZWQoKVxuICAgIH1cbiAgICBmdW5jdGlvbiBhZnRlckl0ZW1Qcm9jZXNzZWQoKSB7XG4gICAgICBjbnQgLT0gMVxuICAgICAgbWF5YmVSZXN1bWUoKVxuICAgIH1cbiAgICBmdW5jdGlvbiBtYXliZVJlc3VtZSgpIHtcbiAgICAgIGlmIChyZXN1bWUgJiYgIWRvbmUgJiYgY250IDwgY29uY3VycmVuY3kgJiYgcXVldWUubGVuZ3RoIDwgaGlnaFdhdGVyTWFyaykge1xuICAgICAgICByZXN1bWUoKVxuICAgICAgICByZXN1bWUgPSBudWxsXG4gICAgICB9XG4gICAgfVxuICAgIGFzeW5jIGZ1bmN0aW9uIHB1bXAoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBmb3IgYXdhaXQgKGxldCB2YWwgb2Ygc3RyZWFtKSB7XG4gICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBBYm9ydEVycm9yKClcbiAgICAgICAgICB9XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHZhbCA9IGZuKHZhbCwgc2lnbmFsT3B0KVxuICAgICAgICAgICAgaWYgKHZhbCA9PT0ga0VtcHR5KSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YWwgPSBQcm9taXNlUmVzb2x2ZSh2YWwpXG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICB2YWwgPSBQcm9taXNlUmVqZWN0KGVycilcbiAgICAgICAgICB9XG4gICAgICAgICAgY250ICs9IDFcbiAgICAgICAgICBQcm9taXNlUHJvdG90eXBlVGhlbih2YWwsIGFmdGVySXRlbVByb2Nlc3NlZCwgb25DYXRjaClcbiAgICAgICAgICBxdWV1ZS5wdXNoKHZhbClcbiAgICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgbmV4dCgpXG4gICAgICAgICAgICBuZXh0ID0gbnVsbFxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWRvbmUgJiYgKHF1ZXVlLmxlbmd0aCA+PSBoaWdoV2F0ZXJNYXJrIHx8IGNudCA+PSBjb25jdXJyZW5jeSkpIHtcbiAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICAgIHJlc3VtZSA9IHJlc29sdmVcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlLnB1c2goa0VvZilcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zdCB2YWwgPSBQcm9taXNlUmVqZWN0KGVycilcbiAgICAgICAgUHJvbWlzZVByb3RvdHlwZVRoZW4odmFsLCBhZnRlckl0ZW1Qcm9jZXNzZWQsIG9uQ2F0Y2gpXG4gICAgICAgIHF1ZXVlLnB1c2godmFsKVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgZG9uZSA9IHRydWVcbiAgICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgICBuZXh0KClcbiAgICAgICAgICBuZXh0ID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHB1bXAoKVxuICAgIHRyeSB7XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB3aGlsZSAocXVldWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IHZhbCA9IGF3YWl0IHF1ZXVlWzBdXG4gICAgICAgICAgaWYgKHZhbCA9PT0ga0VvZikge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzaWduYWwuYWJvcnRlZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEFib3J0RXJyb3IoKVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodmFsICE9PSBrRW1wdHkpIHtcbiAgICAgICAgICAgIHlpZWxkIHZhbFxuICAgICAgICAgIH1cbiAgICAgICAgICBxdWV1ZS5zaGlmdCgpXG4gICAgICAgICAgbWF5YmVSZXN1bWUoKVxuICAgICAgICB9XG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgbmV4dCA9IHJlc29sdmVcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgZG9uZSA9IHRydWVcbiAgICAgIGlmIChyZXN1bWUpIHtcbiAgICAgICAgcmVzdW1lKClcbiAgICAgICAgcmVzdW1lID0gbnVsbFxuICAgICAgfVxuICAgIH1cbiAgfS5jYWxsKHRoaXMpXG59XG5mdW5jdGlvbiBhc0luZGV4ZWRQYWlycyhvcHRpb25zID0gdW5kZWZpbmVkKSB7XG4gIGlmIChvcHRpb25zICE9IG51bGwpIHtcbiAgICB2YWxpZGF0ZU9iamVjdChvcHRpb25zLCAnb3B0aW9ucycpXG4gIH1cbiAgaWYgKChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IG9wdGlvbnMuc2lnbmFsKSAhPSBudWxsKSB7XG4gICAgdmFsaWRhdGVBYm9ydFNpZ25hbChvcHRpb25zLnNpZ25hbCwgJ29wdGlvbnMuc2lnbmFsJylcbiAgfVxuICByZXR1cm4gYXN5bmMgZnVuY3Rpb24qIGFzSW5kZXhlZFBhaXJzKCkge1xuICAgIGxldCBpbmRleCA9IDBcbiAgICBmb3IgYXdhaXQgKGNvbnN0IHZhbCBvZiB0aGlzKSB7XG4gICAgICB2YXIgX29wdGlvbnMkc2lnbmFsXG4gICAgICBpZiAoXG4gICAgICAgIG9wdGlvbnMgIT09IG51bGwgJiZcbiAgICAgICAgb3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIChfb3B0aW9ucyRzaWduYWwgPSBvcHRpb25zLnNpZ25hbCkgIT09IG51bGwgJiZcbiAgICAgICAgX29wdGlvbnMkc2lnbmFsICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgX29wdGlvbnMkc2lnbmFsLmFib3J0ZWRcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgQWJvcnRFcnJvcih7XG4gICAgICAgICAgY2F1c2U6IG9wdGlvbnMuc2lnbmFsLnJlYXNvblxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgeWllbGQgW2luZGV4KyssIHZhbF1cbiAgICB9XG4gIH0uY2FsbCh0aGlzKVxufVxuYXN5bmMgZnVuY3Rpb24gc29tZShmbiwgb3B0aW9ucyA9IHVuZGVmaW5lZCkge1xuICBmb3IgYXdhaXQgKGNvbnN0IHVudXNlZCBvZiBmaWx0ZXIuY2FsbCh0aGlzLCBmbiwgb3B0aW9ucykpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuYXN5bmMgZnVuY3Rpb24gZXZlcnkoZm4sIG9wdGlvbnMgPSB1bmRlZmluZWQpIHtcbiAgaWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRSgnZm4nLCBbJ0Z1bmN0aW9uJywgJ0FzeW5jRnVuY3Rpb24nXSwgZm4pXG4gIH1cbiAgLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRGVfTW9yZ2FuJTI3c19sYXdzXG4gIHJldHVybiAhKGF3YWl0IHNvbWUuY2FsbChcbiAgICB0aGlzLFxuICAgIGFzeW5jICguLi5hcmdzKSA9PiB7XG4gICAgICByZXR1cm4gIShhd2FpdCBmbiguLi5hcmdzKSlcbiAgICB9LFxuICAgIG9wdGlvbnNcbiAgKSlcbn1cbmFzeW5jIGZ1bmN0aW9uIGZpbmQoZm4sIG9wdGlvbnMpIHtcbiAgZm9yIGF3YWl0IChjb25zdCByZXN1bHQgb2YgZmlsdGVyLmNhbGwodGhpcywgZm4sIG9wdGlvbnMpKSB7XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG4gIHJldHVybiB1bmRlZmluZWRcbn1cbmFzeW5jIGZ1bmN0aW9uIGZvckVhY2goZm4sIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRSgnZm4nLCBbJ0Z1bmN0aW9uJywgJ0FzeW5jRnVuY3Rpb24nXSwgZm4pXG4gIH1cbiAgYXN5bmMgZnVuY3Rpb24gZm9yRWFjaEZuKHZhbHVlLCBvcHRpb25zKSB7XG4gICAgYXdhaXQgZm4odmFsdWUsIG9wdGlvbnMpXG4gICAgcmV0dXJuIGtFbXB0eVxuICB9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBmb3IgYXdhaXQgKGNvbnN0IHVudXNlZCBvZiBtYXAuY2FsbCh0aGlzLCBmb3JFYWNoRm4sIG9wdGlvbnMpKTtcbn1cbmZ1bmN0aW9uIGZpbHRlcihmbiwgb3B0aW9ucykge1xuICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKCdmbicsIFsnRnVuY3Rpb24nLCAnQXN5bmNGdW5jdGlvbiddLCBmbilcbiAgfVxuICBhc3luYyBmdW5jdGlvbiBmaWx0ZXJGbih2YWx1ZSwgb3B0aW9ucykge1xuICAgIGlmIChhd2FpdCBmbih2YWx1ZSwgb3B0aW9ucykpIHtcbiAgICAgIHJldHVybiB2YWx1ZVxuICAgIH1cbiAgICByZXR1cm4ga0VtcHR5XG4gIH1cbiAgcmV0dXJuIG1hcC5jYWxsKHRoaXMsIGZpbHRlckZuLCBvcHRpb25zKVxufVxuXG4vLyBTcGVjaWZpYyB0byBwcm92aWRlIGJldHRlciBlcnJvciB0byByZWR1Y2Ugc2luY2UgdGhlIGFyZ3VtZW50IGlzIG9ubHlcbi8vIG1pc3NpbmcgaWYgdGhlIHN0cmVhbSBoYXMgbm8gaXRlbXMgaW4gaXQgLSBidXQgdGhlIGNvZGUgaXMgc3RpbGwgYXBwcm9wcmlhdGVcbmNsYXNzIFJlZHVjZUF3YXJlRXJyTWlzc2luZ0FyZ3MgZXh0ZW5kcyBFUlJfTUlTU0lOR19BUkdTIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoJ3JlZHVjZScpXG4gICAgdGhpcy5tZXNzYWdlID0gJ1JlZHVjZSBvZiBhbiBlbXB0eSBzdHJlYW0gcmVxdWlyZXMgYW4gaW5pdGlhbCB2YWx1ZSdcbiAgfVxufVxuYXN5bmMgZnVuY3Rpb24gcmVkdWNlKHJlZHVjZXIsIGluaXRpYWxWYWx1ZSwgb3B0aW9ucykge1xuICB2YXIgX29wdGlvbnMkc2lnbmFsMlxuICBpZiAodHlwZW9mIHJlZHVjZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoJ3JlZHVjZXInLCBbJ0Z1bmN0aW9uJywgJ0FzeW5jRnVuY3Rpb24nXSwgcmVkdWNlcilcbiAgfVxuICBpZiAob3B0aW9ucyAhPSBudWxsKSB7XG4gICAgdmFsaWRhdGVPYmplY3Qob3B0aW9ucywgJ29wdGlvbnMnKVxuICB9XG4gIGlmICgob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBvcHRpb25zLnNpZ25hbCkgIT0gbnVsbCkge1xuICAgIHZhbGlkYXRlQWJvcnRTaWduYWwob3B0aW9ucy5zaWduYWwsICdvcHRpb25zLnNpZ25hbCcpXG4gIH1cbiAgbGV0IGhhc0luaXRpYWxWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxXG4gIGlmIChcbiAgICBvcHRpb25zICE9PSBudWxsICYmXG4gICAgb3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmXG4gICAgKF9vcHRpb25zJHNpZ25hbDIgPSBvcHRpb25zLnNpZ25hbCkgIT09IG51bGwgJiZcbiAgICBfb3B0aW9ucyRzaWduYWwyICE9PSB1bmRlZmluZWQgJiZcbiAgICBfb3B0aW9ucyRzaWduYWwyLmFib3J0ZWRcbiAgKSB7XG4gICAgY29uc3QgZXJyID0gbmV3IEFib3J0RXJyb3IodW5kZWZpbmVkLCB7XG4gICAgICBjYXVzZTogb3B0aW9ucy5zaWduYWwucmVhc29uXG4gICAgfSlcbiAgICB0aGlzLm9uY2UoJ2Vycm9yJywgKCkgPT4ge30pIC8vIFRoZSBlcnJvciBpcyBhbHJlYWR5IHByb3BhZ2F0ZWRcbiAgICBhd2FpdCBmaW5pc2hlZCh0aGlzLmRlc3Ryb3koZXJyKSlcbiAgICB0aHJvdyBlcnJcbiAgfVxuICBjb25zdCBhYyA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuICBjb25zdCBzaWduYWwgPSBhYy5zaWduYWxcbiAgaWYgKG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbnMuc2lnbmFsKSB7XG4gICAgY29uc3Qgb3B0cyA9IHtcbiAgICAgIG9uY2U6IHRydWUsXG4gICAgICBba1dlYWtIYW5kbGVyXTogdGhpcyxcbiAgICAgIFtrUmVzaXN0U3RvcFByb3BhZ2F0aW9uXTogdHJ1ZVxuICAgIH1cbiAgICBvcHRpb25zLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsICgpID0+IGFjLmFib3J0KCksIG9wdHMpXG4gIH1cbiAgbGV0IGdvdEFueUl0ZW1Gcm9tU3RyZWFtID0gZmFsc2VcbiAgdHJ5IHtcbiAgICBmb3IgYXdhaXQgKGNvbnN0IHZhbHVlIG9mIHRoaXMpIHtcbiAgICAgIHZhciBfb3B0aW9ucyRzaWduYWwzXG4gICAgICBnb3RBbnlJdGVtRnJvbVN0cmVhbSA9IHRydWVcbiAgICAgIGlmIChcbiAgICAgICAgb3B0aW9ucyAhPT0gbnVsbCAmJlxuICAgICAgICBvcHRpb25zICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgKF9vcHRpb25zJHNpZ25hbDMgPSBvcHRpb25zLnNpZ25hbCkgIT09IG51bGwgJiZcbiAgICAgICAgX29wdGlvbnMkc2lnbmFsMyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIF9vcHRpb25zJHNpZ25hbDMuYWJvcnRlZFxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBBYm9ydEVycm9yKClcbiAgICAgIH1cbiAgICAgIGlmICghaGFzSW5pdGlhbFZhbHVlKSB7XG4gICAgICAgIGluaXRpYWxWYWx1ZSA9IHZhbHVlXG4gICAgICAgIGhhc0luaXRpYWxWYWx1ZSA9IHRydWVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGluaXRpYWxWYWx1ZSA9IGF3YWl0IHJlZHVjZXIoaW5pdGlhbFZhbHVlLCB2YWx1ZSwge1xuICAgICAgICAgIHNpZ25hbFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWdvdEFueUl0ZW1Gcm9tU3RyZWFtICYmICFoYXNJbml0aWFsVmFsdWUpIHtcbiAgICAgIHRocm93IG5ldyBSZWR1Y2VBd2FyZUVyck1pc3NpbmdBcmdzKClcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgYWMuYWJvcnQoKVxuICB9XG4gIHJldHVybiBpbml0aWFsVmFsdWVcbn1cbmFzeW5jIGZ1bmN0aW9uIHRvQXJyYXkob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyAhPSBudWxsKSB7XG4gICAgdmFsaWRhdGVPYmplY3Qob3B0aW9ucywgJ29wdGlvbnMnKVxuICB9XG4gIGlmICgob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBvcHRpb25zLnNpZ25hbCkgIT0gbnVsbCkge1xuICAgIHZhbGlkYXRlQWJvcnRTaWduYWwob3B0aW9ucy5zaWduYWwsICdvcHRpb25zLnNpZ25hbCcpXG4gIH1cbiAgY29uc3QgcmVzdWx0ID0gW11cbiAgZm9yIGF3YWl0IChjb25zdCB2YWwgb2YgdGhpcykge1xuICAgIHZhciBfb3B0aW9ucyRzaWduYWw0XG4gICAgaWYgKFxuICAgICAgb3B0aW9ucyAhPT0gbnVsbCAmJlxuICAgICAgb3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAoX29wdGlvbnMkc2lnbmFsNCA9IG9wdGlvbnMuc2lnbmFsKSAhPT0gbnVsbCAmJlxuICAgICAgX29wdGlvbnMkc2lnbmFsNCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBfb3B0aW9ucyRzaWduYWw0LmFib3J0ZWRcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBBYm9ydEVycm9yKHVuZGVmaW5lZCwge1xuICAgICAgICBjYXVzZTogb3B0aW9ucy5zaWduYWwucmVhc29uXG4gICAgICB9KVxuICAgIH1cbiAgICBBcnJheVByb3RvdHlwZVB1c2gocmVzdWx0LCB2YWwpXG4gIH1cbiAgcmV0dXJuIHJlc3VsdFxufVxuZnVuY3Rpb24gZmxhdE1hcChmbiwgb3B0aW9ucykge1xuICBjb25zdCB2YWx1ZXMgPSBtYXAuY2FsbCh0aGlzLCBmbiwgb3B0aW9ucylcbiAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uKiBmbGF0TWFwKCkge1xuICAgIGZvciBhd2FpdCAoY29uc3QgdmFsIG9mIHZhbHVlcykge1xuICAgICAgeWllbGQqIHZhbFxuICAgIH1cbiAgfS5jYWxsKHRoaXMpXG59XG5mdW5jdGlvbiB0b0ludGVnZXJPckluZmluaXR5KG51bWJlcikge1xuICAvLyBXZSBjb2VyY2UgaGVyZSB0byBhbGlnbiB3aXRoIHRoZSBzcGVjXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWl0ZXJhdG9yLWhlbHBlcnMvaXNzdWVzLzE2OVxuICBudW1iZXIgPSBOdW1iZXIobnVtYmVyKVxuICBpZiAoTnVtYmVySXNOYU4obnVtYmVyKSkge1xuICAgIHJldHVybiAwXG4gIH1cbiAgaWYgKG51bWJlciA8IDApIHtcbiAgICB0aHJvdyBuZXcgRVJSX09VVF9PRl9SQU5HRSgnbnVtYmVyJywgJz49IDAnLCBudW1iZXIpXG4gIH1cbiAgcmV0dXJuIG51bWJlclxufVxuZnVuY3Rpb24gZHJvcChudW1iZXIsIG9wdGlvbnMgPSB1bmRlZmluZWQpIHtcbiAgaWYgKG9wdGlvbnMgIT0gbnVsbCkge1xuICAgIHZhbGlkYXRlT2JqZWN0KG9wdGlvbnMsICdvcHRpb25zJylcbiAgfVxuICBpZiAoKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogb3B0aW9ucy5zaWduYWwpICE9IG51bGwpIHtcbiAgICB2YWxpZGF0ZUFib3J0U2lnbmFsKG9wdGlvbnMuc2lnbmFsLCAnb3B0aW9ucy5zaWduYWwnKVxuICB9XG4gIG51bWJlciA9IHRvSW50ZWdlck9ySW5maW5pdHkobnVtYmVyKVxuICByZXR1cm4gYXN5bmMgZnVuY3Rpb24qIGRyb3AoKSB7XG4gICAgdmFyIF9vcHRpb25zJHNpZ25hbDVcbiAgICBpZiAoXG4gICAgICBvcHRpb25zICE9PSBudWxsICYmXG4gICAgICBvcHRpb25zICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIChfb3B0aW9ucyRzaWduYWw1ID0gb3B0aW9ucy5zaWduYWwpICE9PSBudWxsICYmXG4gICAgICBfb3B0aW9ucyRzaWduYWw1ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIF9vcHRpb25zJHNpZ25hbDUuYWJvcnRlZFxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEFib3J0RXJyb3IoKVxuICAgIH1cbiAgICBmb3IgYXdhaXQgKGNvbnN0IHZhbCBvZiB0aGlzKSB7XG4gICAgICB2YXIgX29wdGlvbnMkc2lnbmFsNlxuICAgICAgaWYgKFxuICAgICAgICBvcHRpb25zICE9PSBudWxsICYmXG4gICAgICAgIG9wdGlvbnMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAoX29wdGlvbnMkc2lnbmFsNiA9IG9wdGlvbnMuc2lnbmFsKSAhPT0gbnVsbCAmJlxuICAgICAgICBfb3B0aW9ucyRzaWduYWw2ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgX29wdGlvbnMkc2lnbmFsNi5hYm9ydGVkXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEFib3J0RXJyb3IoKVxuICAgICAgfVxuICAgICAgaWYgKG51bWJlci0tIDw9IDApIHtcbiAgICAgICAgeWllbGQgdmFsXG4gICAgICB9XG4gICAgfVxuICB9LmNhbGwodGhpcylcbn1cbmZ1bmN0aW9uIHRha2UobnVtYmVyLCBvcHRpb25zID0gdW5kZWZpbmVkKSB7XG4gIGlmIChvcHRpb25zICE9IG51bGwpIHtcbiAgICB2YWxpZGF0ZU9iamVjdChvcHRpb25zLCAnb3B0aW9ucycpXG4gIH1cbiAgaWYgKChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IG9wdGlvbnMuc2lnbmFsKSAhPSBudWxsKSB7XG4gICAgdmFsaWRhdGVBYm9ydFNpZ25hbChvcHRpb25zLnNpZ25hbCwgJ29wdGlvbnMuc2lnbmFsJylcbiAgfVxuICBudW1iZXIgPSB0b0ludGVnZXJPckluZmluaXR5KG51bWJlcilcbiAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uKiB0YWtlKCkge1xuICAgIHZhciBfb3B0aW9ucyRzaWduYWw3XG4gICAgaWYgKFxuICAgICAgb3B0aW9ucyAhPT0gbnVsbCAmJlxuICAgICAgb3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAoX29wdGlvbnMkc2lnbmFsNyA9IG9wdGlvbnMuc2lnbmFsKSAhPT0gbnVsbCAmJlxuICAgICAgX29wdGlvbnMkc2lnbmFsNyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBfb3B0aW9ucyRzaWduYWw3LmFib3J0ZWRcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBBYm9ydEVycm9yKClcbiAgICB9XG4gICAgZm9yIGF3YWl0IChjb25zdCB2YWwgb2YgdGhpcykge1xuICAgICAgdmFyIF9vcHRpb25zJHNpZ25hbDhcbiAgICAgIGlmIChcbiAgICAgICAgb3B0aW9ucyAhPT0gbnVsbCAmJlxuICAgICAgICBvcHRpb25zICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgKF9vcHRpb25zJHNpZ25hbDggPSBvcHRpb25zLnNpZ25hbCkgIT09IG51bGwgJiZcbiAgICAgICAgX29wdGlvbnMkc2lnbmFsOCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIF9vcHRpb25zJHNpZ25hbDguYWJvcnRlZFxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBBYm9ydEVycm9yKClcbiAgICAgIH1cbiAgICAgIGlmIChudW1iZXItLSA+IDApIHtcbiAgICAgICAgeWllbGQgdmFsXG4gICAgICB9XG5cbiAgICAgIC8vIERvbid0IGdldCBhbm90aGVyIGl0ZW0gZnJvbSBpdGVyYXRvciBpbiBjYXNlIHdlIHJlYWNoZWQgdGhlIGVuZFxuICAgICAgaWYgKG51bWJlciA8PSAwKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cbiAgfS5jYWxsKHRoaXMpXG59XG5tb2R1bGUuZXhwb3J0cy5zdHJlYW1SZXR1cm5pbmdPcGVyYXRvcnMgPSB7XG4gIGFzSW5kZXhlZFBhaXJzOiBkZXByZWNhdGUoYXNJbmRleGVkUGFpcnMsICdyZWFkYWJsZS5hc0luZGV4ZWRQYWlycyB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbi4nKSxcbiAgZHJvcCxcbiAgZmlsdGVyLFxuICBmbGF0TWFwLFxuICBtYXAsXG4gIHRha2UsXG4gIGNvbXBvc2Vcbn1cbm1vZHVsZS5leHBvcnRzLnByb21pc2VSZXR1cm5pbmdPcGVyYXRvcnMgPSB7XG4gIGV2ZXJ5LFxuICBmb3JFYWNoLFxuICByZWR1Y2UsXG4gIHRvQXJyYXksXG4gIHNvbWUsXG4gIGZpbmRcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgQXJyYXlQcm90b3R5cGVQb3AsIFByb21pc2UgfSA9IHJlcXVpcmUoJy4uL291cnMvcHJpbW9yZGlhbHMnKVxuY29uc3QgeyBpc0l0ZXJhYmxlLCBpc05vZGVTdHJlYW0sIGlzV2ViU3RyZWFtIH0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbC9zdHJlYW1zL3V0aWxzJylcbmNvbnN0IHsgcGlwZWxpbmVJbXBsOiBwbCB9ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWwvc3RyZWFtcy9waXBlbGluZScpXG5jb25zdCB7IGZpbmlzaGVkIH0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbC9zdHJlYW1zL2VuZC1vZi1zdHJlYW0nKVxucmVxdWlyZSgnLi4vLi4vbGliL3N0cmVhbS5qcycpXG5mdW5jdGlvbiBwaXBlbGluZSguLi5zdHJlYW1zKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgbGV0IHNpZ25hbFxuICAgIGxldCBlbmRcbiAgICBjb25zdCBsYXN0QXJnID0gc3RyZWFtc1tzdHJlYW1zLmxlbmd0aCAtIDFdXG4gICAgaWYgKFxuICAgICAgbGFzdEFyZyAmJlxuICAgICAgdHlwZW9mIGxhc3RBcmcgPT09ICdvYmplY3QnICYmXG4gICAgICAhaXNOb2RlU3RyZWFtKGxhc3RBcmcpICYmXG4gICAgICAhaXNJdGVyYWJsZShsYXN0QXJnKSAmJlxuICAgICAgIWlzV2ViU3RyZWFtKGxhc3RBcmcpXG4gICAgKSB7XG4gICAgICBjb25zdCBvcHRpb25zID0gQXJyYXlQcm90b3R5cGVQb3Aoc3RyZWFtcylcbiAgICAgIHNpZ25hbCA9IG9wdGlvbnMuc2lnbmFsXG4gICAgICBlbmQgPSBvcHRpb25zLmVuZFxuICAgIH1cbiAgICBwbChcbiAgICAgIHN0cmVhbXMsXG4gICAgICAoZXJyLCB2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgcmVqZWN0KGVycilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNvbHZlKHZhbHVlKVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBzaWduYWwsXG4gICAgICAgIGVuZFxuICAgICAgfVxuICAgIClcbiAgfSlcbn1cbm1vZHVsZS5leHBvcnRzID0ge1xuICBmaW5pc2hlZCxcbiAgcGlwZWxpbmVcbn1cbiIsCiAgICAiLyogcmVwbGFjZW1lbnQgc3RhcnQgKi9cblxuY29uc3QgeyBCdWZmZXIgfSA9IHJlcXVpcmUoJ2J1ZmZlcicpXG5cbi8qIHJlcGxhY2VtZW50IGVuZCAqL1xuLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbjsoJ3VzZSBzdHJpY3QnKVxuY29uc3QgeyBPYmplY3REZWZpbmVQcm9wZXJ0eSwgT2JqZWN0S2V5cywgUmVmbGVjdEFwcGx5IH0gPSByZXF1aXJlKCcuL291cnMvcHJpbW9yZGlhbHMnKVxuY29uc3Qge1xuICBwcm9taXNpZnk6IHsgY3VzdG9tOiBjdXN0b21Qcm9taXNpZnkgfVxufSA9IHJlcXVpcmUoJy4vb3Vycy91dGlsJylcbmNvbnN0IHsgc3RyZWFtUmV0dXJuaW5nT3BlcmF0b3JzLCBwcm9taXNlUmV0dXJuaW5nT3BlcmF0b3JzIH0gPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvb3BlcmF0b3JzJylcbmNvbnN0IHtcbiAgY29kZXM6IHsgRVJSX0lMTEVHQUxfQ09OU1RSVUNUT1IgfVxufSA9IHJlcXVpcmUoJy4vb3Vycy9lcnJvcnMnKVxuY29uc3QgY29tcG9zZSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvc3RyZWFtcy9jb21wb3NlJylcbmNvbnN0IHsgc2V0RGVmYXVsdEhpZ2hXYXRlck1hcmssIGdldERlZmF1bHRIaWdoV2F0ZXJNYXJrIH0gPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvc3RhdGUnKVxuY29uc3QgeyBwaXBlbGluZSB9ID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL3BpcGVsaW5lJylcbmNvbnN0IHsgZGVzdHJveWVyIH0gPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvZGVzdHJveScpXG5jb25zdCBlb3MgPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvZW5kLW9mLXN0cmVhbScpXG5jb25zdCBpbnRlcm5hbEJ1ZmZlciA9IHt9XG5jb25zdCBwcm9taXNlcyA9IHJlcXVpcmUoJy4vc3RyZWFtL3Byb21pc2VzJylcbmNvbnN0IHV0aWxzID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL3V0aWxzJylcbmNvbnN0IFN0cmVhbSA9IChtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvc3RyZWFtcy9sZWdhY3knKS5TdHJlYW0pXG5TdHJlYW0uaXNEZXN0cm95ZWQgPSB1dGlscy5pc0Rlc3Ryb3llZFxuU3RyZWFtLmlzRGlzdHVyYmVkID0gdXRpbHMuaXNEaXN0dXJiZWRcblN0cmVhbS5pc0Vycm9yZWQgPSB1dGlscy5pc0Vycm9yZWRcblN0cmVhbS5pc1JlYWRhYmxlID0gdXRpbHMuaXNSZWFkYWJsZVxuU3RyZWFtLmlzV3JpdGFibGUgPSB1dGlscy5pc1dyaXRhYmxlXG5TdHJlYW0uUmVhZGFibGUgPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvcmVhZGFibGUnKVxuZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0S2V5cyhzdHJlYW1SZXR1cm5pbmdPcGVyYXRvcnMpKSB7XG4gIGNvbnN0IG9wID0gc3RyZWFtUmV0dXJuaW5nT3BlcmF0b3JzW2tleV1cbiAgZnVuY3Rpb24gZm4oLi4uYXJncykge1xuICAgIGlmIChuZXcudGFyZ2V0KSB7XG4gICAgICB0aHJvdyBFUlJfSUxMRUdBTF9DT05TVFJVQ1RPUigpXG4gICAgfVxuICAgIHJldHVybiBTdHJlYW0uUmVhZGFibGUuZnJvbShSZWZsZWN0QXBwbHkob3AsIHRoaXMsIGFyZ3MpKVxuICB9XG4gIE9iamVjdERlZmluZVByb3BlcnR5KGZuLCAnbmFtZScsIHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgdmFsdWU6IG9wLm5hbWVcbiAgfSlcbiAgT2JqZWN0RGVmaW5lUHJvcGVydHkoZm4sICdsZW5ndGgnLCB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIHZhbHVlOiBvcC5sZW5ndGhcbiAgfSlcbiAgT2JqZWN0RGVmaW5lUHJvcGVydHkoU3RyZWFtLlJlYWRhYmxlLnByb3RvdHlwZSwga2V5LCB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIHZhbHVlOiBmbixcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgd3JpdGFibGU6IHRydWVcbiAgfSlcbn1cbmZvciAoY29uc3Qga2V5IG9mIE9iamVjdEtleXMocHJvbWlzZVJldHVybmluZ09wZXJhdG9ycykpIHtcbiAgY29uc3Qgb3AgPSBwcm9taXNlUmV0dXJuaW5nT3BlcmF0b3JzW2tleV1cbiAgZnVuY3Rpb24gZm4oLi4uYXJncykge1xuICAgIGlmIChuZXcudGFyZ2V0KSB7XG4gICAgICB0aHJvdyBFUlJfSUxMRUdBTF9DT05TVFJVQ1RPUigpXG4gICAgfVxuICAgIHJldHVybiBSZWZsZWN0QXBwbHkob3AsIHRoaXMsIGFyZ3MpXG4gIH1cbiAgT2JqZWN0RGVmaW5lUHJvcGVydHkoZm4sICduYW1lJywge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICB2YWx1ZTogb3AubmFtZVxuICB9KVxuICBPYmplY3REZWZpbmVQcm9wZXJ0eShmbiwgJ2xlbmd0aCcsIHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgdmFsdWU6IG9wLmxlbmd0aFxuICB9KVxuICBPYmplY3REZWZpbmVQcm9wZXJ0eShTdHJlYW0uUmVhZGFibGUucHJvdG90eXBlLCBrZXksIHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgdmFsdWU6IGZuLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB3cml0YWJsZTogdHJ1ZVxuICB9KVxufVxuU3RyZWFtLldyaXRhYmxlID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL3dyaXRhYmxlJylcblN0cmVhbS5EdXBsZXggPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvZHVwbGV4JylcblN0cmVhbS5UcmFuc2Zvcm0gPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvdHJhbnNmb3JtJylcblN0cmVhbS5QYXNzVGhyb3VnaCA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvc3RyZWFtcy9wYXNzdGhyb3VnaCcpXG5TdHJlYW0ucGlwZWxpbmUgPSBwaXBlbGluZVxuY29uc3QgeyBhZGRBYm9ydFNpZ25hbCB9ID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL2FkZC1hYm9ydC1zaWduYWwnKVxuU3RyZWFtLmFkZEFib3J0U2lnbmFsID0gYWRkQWJvcnRTaWduYWxcblN0cmVhbS5maW5pc2hlZCA9IGVvc1xuU3RyZWFtLmRlc3Ryb3kgPSBkZXN0cm95ZXJcblN0cmVhbS5jb21wb3NlID0gY29tcG9zZVxuU3RyZWFtLnNldERlZmF1bHRIaWdoV2F0ZXJNYXJrID0gc2V0RGVmYXVsdEhpZ2hXYXRlck1hcmtcblN0cmVhbS5nZXREZWZhdWx0SGlnaFdhdGVyTWFyayA9IGdldERlZmF1bHRIaWdoV2F0ZXJNYXJrXG5PYmplY3REZWZpbmVQcm9wZXJ0eShTdHJlYW0sICdwcm9taXNlcycsIHtcbiAgX19wcm90b19fOiBudWxsLFxuICBjb25maWd1cmFibGU6IHRydWUsXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldCgpIHtcbiAgICByZXR1cm4gcHJvbWlzZXNcbiAgfVxufSlcbk9iamVjdERlZmluZVByb3BlcnR5KHBpcGVsaW5lLCBjdXN0b21Qcm9taXNpZnksIHtcbiAgX19wcm90b19fOiBudWxsLFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQoKSB7XG4gICAgcmV0dXJuIHByb21pc2VzLnBpcGVsaW5lXG4gIH1cbn0pXG5PYmplY3REZWZpbmVQcm9wZXJ0eShlb3MsIGN1c3RvbVByb21pc2lmeSwge1xuICBfX3Byb3RvX186IG51bGwsXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldCgpIHtcbiAgICByZXR1cm4gcHJvbWlzZXMuZmluaXNoZWRcbiAgfVxufSlcblxuLy8gQmFja3dhcmRzLWNvbXBhdCB3aXRoIG5vZGUgMC40LnhcblN0cmVhbS5TdHJlYW0gPSBTdHJlYW1cblN0cmVhbS5faXNVaW50OEFycmF5ID0gZnVuY3Rpb24gaXNVaW50OEFycmF5KHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXlcbn1cblN0cmVhbS5fdWludDhBcnJheVRvQnVmZmVyID0gZnVuY3Rpb24gX3VpbnQ4QXJyYXlUb0J1ZmZlcihjaHVuaykge1xuICByZXR1cm4gQnVmZmVyLmZyb20oY2h1bmsuYnVmZmVyLCBjaHVuay5ieXRlT2Zmc2V0LCBjaHVuay5ieXRlTGVuZ3RoKVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJylcbmlmIChTdHJlYW0gJiYgcHJvY2Vzcy5lbnYuUkVBREFCTEVfU1RSRUFNID09PSAnZGlzYWJsZScpIHtcbiAgY29uc3QgcHJvbWlzZXMgPSBTdHJlYW0ucHJvbWlzZXNcblxuICAvLyBFeHBsaWNpdCBleHBvcnQgbmFtaW5nIGlzIG5lZWRlZCBmb3IgRVNNXG4gIG1vZHVsZS5leHBvcnRzLl91aW50OEFycmF5VG9CdWZmZXIgPSBTdHJlYW0uX3VpbnQ4QXJyYXlUb0J1ZmZlclxuICBtb2R1bGUuZXhwb3J0cy5faXNVaW50OEFycmF5ID0gU3RyZWFtLl9pc1VpbnQ4QXJyYXlcbiAgbW9kdWxlLmV4cG9ydHMuaXNEaXN0dXJiZWQgPSBTdHJlYW0uaXNEaXN0dXJiZWRcbiAgbW9kdWxlLmV4cG9ydHMuaXNFcnJvcmVkID0gU3RyZWFtLmlzRXJyb3JlZFxuICBtb2R1bGUuZXhwb3J0cy5pc1JlYWRhYmxlID0gU3RyZWFtLmlzUmVhZGFibGVcbiAgbW9kdWxlLmV4cG9ydHMuUmVhZGFibGUgPSBTdHJlYW0uUmVhZGFibGVcbiAgbW9kdWxlLmV4cG9ydHMuV3JpdGFibGUgPSBTdHJlYW0uV3JpdGFibGVcbiAgbW9kdWxlLmV4cG9ydHMuRHVwbGV4ID0gU3RyZWFtLkR1cGxleFxuICBtb2R1bGUuZXhwb3J0cy5UcmFuc2Zvcm0gPSBTdHJlYW0uVHJhbnNmb3JtXG4gIG1vZHVsZS5leHBvcnRzLlBhc3NUaHJvdWdoID0gU3RyZWFtLlBhc3NUaHJvdWdoXG4gIG1vZHVsZS5leHBvcnRzLmFkZEFib3J0U2lnbmFsID0gU3RyZWFtLmFkZEFib3J0U2lnbmFsXG4gIG1vZHVsZS5leHBvcnRzLmZpbmlzaGVkID0gU3RyZWFtLmZpbmlzaGVkXG4gIG1vZHVsZS5leHBvcnRzLmRlc3Ryb3kgPSBTdHJlYW0uZGVzdHJveVxuICBtb2R1bGUuZXhwb3J0cy5waXBlbGluZSA9IFN0cmVhbS5waXBlbGluZVxuICBtb2R1bGUuZXhwb3J0cy5jb21wb3NlID0gU3RyZWFtLmNvbXBvc2VcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0cmVhbSwgJ3Byb21pc2VzJywge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiBwcm9taXNlc1xuICAgIH1cbiAgfSlcbiAgbW9kdWxlLmV4cG9ydHMuU3RyZWFtID0gU3RyZWFtLlN0cmVhbVxufSBlbHNlIHtcbiAgY29uc3QgQ3VzdG9tU3RyZWFtID0gcmVxdWlyZSgnLi4vc3RyZWFtJylcbiAgY29uc3QgcHJvbWlzZXMgPSByZXF1aXJlKCcuLi9zdHJlYW0vcHJvbWlzZXMnKVxuICBjb25zdCBvcmlnaW5hbERlc3Ryb3kgPSBDdXN0b21TdHJlYW0uUmVhZGFibGUuZGVzdHJveVxuICBtb2R1bGUuZXhwb3J0cyA9IEN1c3RvbVN0cmVhbS5SZWFkYWJsZVxuXG4gIC8vIEV4cGxpY2l0IGV4cG9ydCBuYW1pbmcgaXMgbmVlZGVkIGZvciBFU01cbiAgbW9kdWxlLmV4cG9ydHMuX3VpbnQ4QXJyYXlUb0J1ZmZlciA9IEN1c3RvbVN0cmVhbS5fdWludDhBcnJheVRvQnVmZmVyXG4gIG1vZHVsZS5leHBvcnRzLl9pc1VpbnQ4QXJyYXkgPSBDdXN0b21TdHJlYW0uX2lzVWludDhBcnJheVxuICBtb2R1bGUuZXhwb3J0cy5pc0Rpc3R1cmJlZCA9IEN1c3RvbVN0cmVhbS5pc0Rpc3R1cmJlZFxuICBtb2R1bGUuZXhwb3J0cy5pc0Vycm9yZWQgPSBDdXN0b21TdHJlYW0uaXNFcnJvcmVkXG4gIG1vZHVsZS5leHBvcnRzLmlzUmVhZGFibGUgPSBDdXN0b21TdHJlYW0uaXNSZWFkYWJsZVxuICBtb2R1bGUuZXhwb3J0cy5SZWFkYWJsZSA9IEN1c3RvbVN0cmVhbS5SZWFkYWJsZVxuICBtb2R1bGUuZXhwb3J0cy5Xcml0YWJsZSA9IEN1c3RvbVN0cmVhbS5Xcml0YWJsZVxuICBtb2R1bGUuZXhwb3J0cy5EdXBsZXggPSBDdXN0b21TdHJlYW0uRHVwbGV4XG4gIG1vZHVsZS5leHBvcnRzLlRyYW5zZm9ybSA9IEN1c3RvbVN0cmVhbS5UcmFuc2Zvcm1cbiAgbW9kdWxlLmV4cG9ydHMuUGFzc1Rocm91Z2ggPSBDdXN0b21TdHJlYW0uUGFzc1Rocm91Z2hcbiAgbW9kdWxlLmV4cG9ydHMuYWRkQWJvcnRTaWduYWwgPSBDdXN0b21TdHJlYW0uYWRkQWJvcnRTaWduYWxcbiAgbW9kdWxlLmV4cG9ydHMuZmluaXNoZWQgPSBDdXN0b21TdHJlYW0uZmluaXNoZWRcbiAgbW9kdWxlLmV4cG9ydHMuZGVzdHJveSA9IEN1c3RvbVN0cmVhbS5kZXN0cm95XG4gIG1vZHVsZS5leHBvcnRzLmRlc3Ryb3kgPSBvcmlnaW5hbERlc3Ryb3lcbiAgbW9kdWxlLmV4cG9ydHMucGlwZWxpbmUgPSBDdXN0b21TdHJlYW0ucGlwZWxpbmVcbiAgbW9kdWxlLmV4cG9ydHMuY29tcG9zZSA9IEN1c3RvbVN0cmVhbS5jb21wb3NlXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDdXN0b21TdHJlYW0sICdwcm9taXNlcycsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gcHJvbWlzZXNcbiAgICB9XG4gIH0pXG4gIG1vZHVsZS5leHBvcnRzLlN0cmVhbSA9IEN1c3RvbVN0cmVhbS5TdHJlYW1cbn1cblxuLy8gQWxsb3cgZGVmYXVsdCBpbXBvcnRpbmdcbm1vZHVsZS5leHBvcnRzLmRlZmF1bHQgPSBtb2R1bGUuZXhwb3J0c1xuIiwKICAgICIvKipcbiAqIEFwcGVuZHMgdGhlIGVsZW1lbnRzIG9mIGB2YWx1ZXNgIHRvIGBhcnJheWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHZhbHVlcyB0byBhcHBlbmQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlQdXNoKGFycmF5LCB2YWx1ZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSB2YWx1ZXMubGVuZ3RoLFxuICAgICAgb2Zmc2V0ID0gYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgYXJyYXlbb2Zmc2V0ICsgaW5kZXhdID0gdmFsdWVzW2luZGV4XTtcbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlQdXNoO1xuIiwKICAgICJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzcHJlYWRhYmxlU3ltYm9sID0gU3ltYm9sID8gU3ltYm9sLmlzQ29uY2F0U3ByZWFkYWJsZSA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIGZsYXR0ZW5hYmxlIGBhcmd1bWVudHNgIG9iamVjdCBvciBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBmbGF0dGVuYWJsZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0ZsYXR0ZW5hYmxlKHZhbHVlKSB7XG4gIHJldHVybiBpc0FycmF5KHZhbHVlKSB8fCBpc0FyZ3VtZW50cyh2YWx1ZSkgfHxcbiAgICAhIShzcHJlYWRhYmxlU3ltYm9sICYmIHZhbHVlICYmIHZhbHVlW3NwcmVhZGFibGVTeW1ib2xdKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0ZsYXR0ZW5hYmxlO1xuIiwKICAgICJ2YXIgYXJyYXlQdXNoID0gcmVxdWlyZSgnLi9fYXJyYXlQdXNoJyksXG4gICAgaXNGbGF0dGVuYWJsZSA9IHJlcXVpcmUoJy4vX2lzRmxhdHRlbmFibGUnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mbGF0dGVuYCB3aXRoIHN1cHBvcnQgZm9yIHJlc3RyaWN0aW5nIGZsYXR0ZW5pbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmbGF0dGVuLlxuICogQHBhcmFtIHtudW1iZXJ9IGRlcHRoIFRoZSBtYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3ByZWRpY2F0ZT1pc0ZsYXR0ZW5hYmxlXSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNTdHJpY3RdIFJlc3RyaWN0IHRvIHZhbHVlcyB0aGF0IHBhc3MgYHByZWRpY2F0ZWAgY2hlY2tzLlxuICogQHBhcmFtIHtBcnJheX0gW3Jlc3VsdD1bXV0gVGhlIGluaXRpYWwgcmVzdWx0IHZhbHVlLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmxhdHRlbmVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBiYXNlRmxhdHRlbihhcnJheSwgZGVwdGgsIHByZWRpY2F0ZSwgaXNTdHJpY3QsIHJlc3VsdCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBwcmVkaWNhdGUgfHwgKHByZWRpY2F0ZSA9IGlzRmxhdHRlbmFibGUpO1xuICByZXN1bHQgfHwgKHJlc3VsdCA9IFtdKTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICBpZiAoZGVwdGggPiAwICYmIHByZWRpY2F0ZSh2YWx1ZSkpIHtcbiAgICAgIGlmIChkZXB0aCA+IDEpIHtcbiAgICAgICAgLy8gUmVjdXJzaXZlbHkgZmxhdHRlbiBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICAgICAgYmFzZUZsYXR0ZW4odmFsdWUsIGRlcHRoIC0gMSwgcHJlZGljYXRlLCBpc1N0cmljdCwgcmVzdWx0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFycmF5UHVzaChyZXN1bHQsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFpc1N0cmljdCkge1xuICAgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGhdID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUZsYXR0ZW47XG4iLAogICAgInZhciBiYXNlRmxhdHRlbiA9IHJlcXVpcmUoJy4vX2Jhc2VGbGF0dGVuJyk7XG5cbi8qKlxuICogRmxhdHRlbnMgYGFycmF5YCBhIHNpbmdsZSBsZXZlbCBkZWVwLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGZsYXR0ZW4uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmbGF0dGVuZWQgYXJyYXkuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uZmxhdHRlbihbMSwgWzIsIFszLCBbNF1dLCA1XV0pO1xuICogLy8gPT4gWzEsIDIsIFszLCBbNF1dLCA1XVxuICovXG5mdW5jdGlvbiBmbGF0dGVuKGFycmF5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgcmV0dXJuIGxlbmd0aCA/IGJhc2VGbGF0dGVuKGFycmF5LCAxKSA6IFtdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZsYXR0ZW47XG4iLAogICAgInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIG5hdGl2ZUNyZWF0ZSA9IGdldE5hdGl2ZShPYmplY3QsICdjcmVhdGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBuYXRpdmVDcmVhdGU7XG4iLAogICAgInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBoYXNoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIEhhc2hcbiAqL1xuZnVuY3Rpb24gaGFzaENsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gbmF0aXZlQ3JlYXRlID8gbmF0aXZlQ3JlYXRlKG51bGwpIDoge307XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaENsZWFyO1xuIiwKICAgICIvKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBoYXNoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge09iamVjdH0gaGFzaCBUaGUgaGFzaCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzaERlbGV0ZShrZXkpIHtcbiAgdmFyIHJlc3VsdCA9IHRoaXMuaGFzKGtleSkgJiYgZGVsZXRlIHRoaXMuX19kYXRhX19ba2V5XTtcbiAgdGhpcy5zaXplIC09IHJlc3VsdCA/IDEgOiAwO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hEZWxldGU7XG4iLAogICAgInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEdldHMgdGhlIGhhc2ggdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gaGFzaEdldChrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICBpZiAobmF0aXZlQ3JlYXRlKSB7XG4gICAgdmFyIHJlc3VsdCA9IGRhdGFba2V5XTtcbiAgICByZXR1cm4gcmVzdWx0ID09PSBIQVNIX1VOREVGSU5FRCA/IHVuZGVmaW5lZCA6IHJlc3VsdDtcbiAgfVxuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpID8gZGF0YVtrZXldIDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hHZXQ7XG4iLAogICAgInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBoYXNoIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBoYXNoSGFzKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIHJldHVybiBuYXRpdmVDcmVhdGUgPyAoZGF0YVtrZXldICE9PSB1bmRlZmluZWQpIDogaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hIYXM7XG4iLAogICAgInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKipcbiAqIFNldHMgdGhlIGhhc2ggYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBoYXNoIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBoYXNoU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICB0aGlzLnNpemUgKz0gdGhpcy5oYXMoa2V5KSA/IDAgOiAxO1xuICBkYXRhW2tleV0gPSAobmF0aXZlQ3JlYXRlICYmIHZhbHVlID09PSB1bmRlZmluZWQpID8gSEFTSF9VTkRFRklORUQgOiB2YWx1ZTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaFNldDtcbiIsCiAgICAidmFyIGhhc2hDbGVhciA9IHJlcXVpcmUoJy4vX2hhc2hDbGVhcicpLFxuICAgIGhhc2hEZWxldGUgPSByZXF1aXJlKCcuL19oYXNoRGVsZXRlJyksXG4gICAgaGFzaEdldCA9IHJlcXVpcmUoJy4vX2hhc2hHZXQnKSxcbiAgICBoYXNoSGFzID0gcmVxdWlyZSgnLi9faGFzaEhhcycpLFxuICAgIGhhc2hTZXQgPSByZXF1aXJlKCcuL19oYXNoU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGhhc2ggb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBIYXNoKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYEhhc2hgLlxuSGFzaC5wcm90b3R5cGUuY2xlYXIgPSBoYXNoQ2xlYXI7XG5IYXNoLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBoYXNoRGVsZXRlO1xuSGFzaC5wcm90b3R5cGUuZ2V0ID0gaGFzaEdldDtcbkhhc2gucHJvdG90eXBlLmhhcyA9IGhhc2hIYXM7XG5IYXNoLnByb3RvdHlwZS5zZXQgPSBoYXNoU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEhhc2g7XG4iLAogICAgIi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgbGlzdCBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBbXTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVDbGVhcjtcbiIsCiAgICAidmFyIGVxID0gcmVxdWlyZSgnLi9lcScpO1xuXG4vKipcbiAqIEdldHMgdGhlIGluZGV4IGF0IHdoaWNoIHRoZSBga2V5YCBpcyBmb3VuZCBpbiBgYXJyYXlgIG9mIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IGtleSBUaGUga2V5IHRvIHNlYXJjaCBmb3IuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICovXG5mdW5jdGlvbiBhc3NvY0luZGV4T2YoYXJyYXksIGtleSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICBpZiAoZXEoYXJyYXlbbGVuZ3RoXVswXSwga2V5KSkge1xuICAgICAgcmV0dXJuIGxlbmd0aDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFzc29jSW5kZXhPZjtcbiIsCiAgICAidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgYXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3BsaWNlID0gYXJyYXlQcm90by5zcGxpY2U7XG5cbi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGxpc3QgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZURlbGV0ZShrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBsYXN0SW5kZXggPSBkYXRhLmxlbmd0aCAtIDE7XG4gIGlmIChpbmRleCA9PSBsYXN0SW5kZXgpIHtcbiAgICBkYXRhLnBvcCgpO1xuICB9IGVsc2Uge1xuICAgIHNwbGljZS5jYWxsKGRhdGEsIGluZGV4LCAxKTtcbiAgfVxuICAtLXRoaXMuc2l6ZTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlRGVsZXRlO1xuIiwKICAgICJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUdldChrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICByZXR1cm4gaW5kZXggPCAwID8gdW5kZWZpbmVkIDogZGF0YVtpbmRleF1bMV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlR2V0O1xuIiwKICAgICJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVIYXMoa2V5KSB7XG4gIHJldHVybiBhc3NvY0luZGV4T2YodGhpcy5fX2RhdGFfXywga2V5KSA+IC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZUhhcztcbiIsCiAgICAidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKipcbiAqIFNldHMgdGhlIGxpc3QgY2FjaGUgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGxpc3QgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZVNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgaWYgKGluZGV4IDwgMCkge1xuICAgICsrdGhpcy5zaXplO1xuICAgIGRhdGEucHVzaChba2V5LCB2YWx1ZV0pO1xuICB9IGVsc2Uge1xuICAgIGRhdGFbaW5kZXhdWzFdID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlU2V0O1xuIiwKICAgICJ2YXIgbGlzdENhY2hlQ2xlYXIgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVDbGVhcicpLFxuICAgIGxpc3RDYWNoZURlbGV0ZSA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZURlbGV0ZScpLFxuICAgIGxpc3RDYWNoZUdldCA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZUdldCcpLFxuICAgIGxpc3RDYWNoZUhhcyA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZUhhcycpLFxuICAgIGxpc3RDYWNoZVNldCA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZVNldCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gbGlzdCBjYWNoZSBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIExpc3RDYWNoZShlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBMaXN0Q2FjaGVgLlxuTGlzdENhY2hlLnByb3RvdHlwZS5jbGVhciA9IGxpc3RDYWNoZUNsZWFyO1xuTGlzdENhY2hlLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBsaXN0Q2FjaGVEZWxldGU7XG5MaXN0Q2FjaGUucHJvdG90eXBlLmdldCA9IGxpc3RDYWNoZUdldDtcbkxpc3RDYWNoZS5wcm90b3R5cGUuaGFzID0gbGlzdENhY2hlSGFzO1xuTGlzdENhY2hlLnByb3RvdHlwZS5zZXQgPSBsaXN0Q2FjaGVTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gTGlzdENhY2hlO1xuIiwKICAgICJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIE1hcCA9IGdldE5hdGl2ZShyb290LCAnTWFwJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gTWFwO1xuIiwKICAgICJ2YXIgSGFzaCA9IHJlcXVpcmUoJy4vX0hhc2gnKSxcbiAgICBMaXN0Q2FjaGUgPSByZXF1aXJlKCcuL19MaXN0Q2FjaGUnKSxcbiAgICBNYXAgPSByZXF1aXJlKCcuL19NYXAnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVDbGVhcigpIHtcbiAgdGhpcy5zaXplID0gMDtcbiAgdGhpcy5fX2RhdGFfXyA9IHtcbiAgICAnaGFzaCc6IG5ldyBIYXNoLFxuICAgICdtYXAnOiBuZXcgKE1hcCB8fCBMaXN0Q2FjaGUpLFxuICAgICdzdHJpbmcnOiBuZXcgSGFzaFxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlQ2xlYXI7XG4iLAogICAgIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUgZm9yIHVzZSBhcyB1bmlxdWUgb2JqZWN0IGtleS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0tleWFibGUodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiAodHlwZSA9PSAnc3RyaW5nJyB8fCB0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicpXG4gICAgPyAodmFsdWUgIT09ICdfX3Byb3RvX18nKVxuICAgIDogKHZhbHVlID09PSBudWxsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0tleWFibGU7XG4iLAogICAgInZhciBpc0tleWFibGUgPSByZXF1aXJlKCcuL19pc0tleWFibGUnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBkYXRhIGZvciBgbWFwYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG1hcCBUaGUgbWFwIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUgcmVmZXJlbmNlIGtleS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtYXAgZGF0YS5cbiAqL1xuZnVuY3Rpb24gZ2V0TWFwRGF0YShtYXAsIGtleSkge1xuICB2YXIgZGF0YSA9IG1hcC5fX2RhdGFfXztcbiAgcmV0dXJuIGlzS2V5YWJsZShrZXkpXG4gICAgPyBkYXRhW3R5cGVvZiBrZXkgPT0gJ3N0cmluZycgPyAnc3RyaW5nJyA6ICdoYXNoJ11cbiAgICA6IGRhdGEubWFwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldE1hcERhdGE7XG4iLAogICAgInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSlbJ2RlbGV0ZSddKGtleSk7XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZURlbGV0ZTtcbiIsCiAgICAidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgbWFwIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUdldChrZXkpIHtcbiAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KS5nZXQoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZUdldDtcbiIsCiAgICAidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgbWFwIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVIYXMoa2V5KSB7XG4gIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleSkuaGFzKGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVIYXM7XG4iLAogICAgInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIFNldHMgdGhlIG1hcCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBtYXAgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSksXG4gICAgICBzaXplID0gZGF0YS5zaXplO1xuXG4gIGRhdGEuc2V0KGtleSwgdmFsdWUpO1xuICB0aGlzLnNpemUgKz0gZGF0YS5zaXplID09IHNpemUgPyAwIDogMTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVTZXQ7XG4iLAogICAgInZhciBtYXBDYWNoZUNsZWFyID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVDbGVhcicpLFxuICAgIG1hcENhY2hlRGVsZXRlID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVEZWxldGUnKSxcbiAgICBtYXBDYWNoZUdldCA9IHJlcXVpcmUoJy4vX21hcENhY2hlR2V0JyksXG4gICAgbWFwQ2FjaGVIYXMgPSByZXF1aXJlKCcuL19tYXBDYWNoZUhhcycpLFxuICAgIG1hcENhY2hlU2V0ID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbWFwIGNhY2hlIG9iamVjdCB0byBzdG9yZSBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIE1hcENhY2hlKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYE1hcENhY2hlYC5cbk1hcENhY2hlLnByb3RvdHlwZS5jbGVhciA9IG1hcENhY2hlQ2xlYXI7XG5NYXBDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gbWFwQ2FjaGVEZWxldGU7XG5NYXBDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbWFwQ2FjaGVHZXQ7XG5NYXBDYWNoZS5wcm90b3R5cGUuaGFzID0gbWFwQ2FjaGVIYXM7XG5NYXBDYWNoZS5wcm90b3R5cGUuc2V0ID0gbWFwQ2FjaGVTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gTWFwQ2FjaGU7XG4iLAogICAgIi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuLyoqXG4gKiBBZGRzIGB2YWx1ZWAgdG8gdGhlIGFycmF5IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBhZGRcbiAqIEBtZW1iZXJPZiBTZXRDYWNoZVxuICogQGFsaWFzIHB1c2hcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNhY2hlLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIHNldENhY2hlQWRkKHZhbHVlKSB7XG4gIHRoaXMuX19kYXRhX18uc2V0KHZhbHVlLCBIQVNIX1VOREVGSU5FRCk7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldENhY2hlQWRkO1xuIiwKICAgICIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGluIHRoZSBhcnJheSBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgU2V0Q2FjaGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHNldENhY2hlSGFzKHZhbHVlKSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmhhcyh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0Q2FjaGVIYXM7XG4iLAogICAgInZhciBNYXBDYWNoZSA9IHJlcXVpcmUoJy4vX01hcENhY2hlJyksXG4gICAgc2V0Q2FjaGVBZGQgPSByZXF1aXJlKCcuL19zZXRDYWNoZUFkZCcpLFxuICAgIHNldENhY2hlSGFzID0gcmVxdWlyZSgnLi9fc2V0Q2FjaGVIYXMnKTtcblxuLyoqXG4gKlxuICogQ3JlYXRlcyBhbiBhcnJheSBjYWNoZSBvYmplY3QgdG8gc3RvcmUgdW5pcXVlIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbdmFsdWVzXSBUaGUgdmFsdWVzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBTZXRDYWNoZSh2YWx1ZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSB2YWx1ZXMgPT0gbnVsbCA/IDAgOiB2YWx1ZXMubGVuZ3RoO1xuXG4gIHRoaXMuX19kYXRhX18gPSBuZXcgTWFwQ2FjaGU7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdGhpcy5hZGQodmFsdWVzW2luZGV4XSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYFNldENhY2hlYC5cblNldENhY2hlLnByb3RvdHlwZS5hZGQgPSBTZXRDYWNoZS5wcm90b3R5cGUucHVzaCA9IHNldENhY2hlQWRkO1xuU2V0Q2FjaGUucHJvdG90eXBlLmhhcyA9IHNldENhY2hlSGFzO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNldENhY2hlO1xuIiwKICAgICIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZpbmRJbmRleGAgYW5kIGBfLmZpbmRMYXN0SW5kZXhgIHdpdGhvdXRcbiAqIHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0ge251bWJlcn0gZnJvbUluZGV4IFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUZpbmRJbmRleChhcnJheSwgcHJlZGljYXRlLCBmcm9tSW5kZXgsIGZyb21SaWdodCkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgaW5kZXggPSBmcm9tSW5kZXggKyAoZnJvbVJpZ2h0ID8gMSA6IC0xKTtcblxuICB3aGlsZSAoKGZyb21SaWdodCA/IGluZGV4LS0gOiArK2luZGV4IDwgbGVuZ3RoKSkge1xuICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlRmluZEluZGV4O1xuIiwKICAgICIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTmFOYCB3aXRob3V0IHN1cHBvcnQgZm9yIG51bWJlciBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGBOYU5gLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc05hTih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IHZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc05hTjtcbiIsCiAgICAiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uaW5kZXhPZmAgd2hpY2ggcGVyZm9ybXMgc3RyaWN0IGVxdWFsaXR5XG4gKiBjb21wYXJpc29ucyBvZiB2YWx1ZXMsIGkuZS4gYD09PWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gc3RyaWN0SW5kZXhPZihhcnJheSwgdmFsdWUsIGZyb21JbmRleCkge1xuICB2YXIgaW5kZXggPSBmcm9tSW5kZXggLSAxLFxuICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKGFycmF5W2luZGV4XSA9PT0gdmFsdWUpIHtcbiAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0cmljdEluZGV4T2Y7XG4iLAogICAgInZhciBiYXNlRmluZEluZGV4ID0gcmVxdWlyZSgnLi9fYmFzZUZpbmRJbmRleCcpLFxuICAgIGJhc2VJc05hTiA9IHJlcXVpcmUoJy4vX2Jhc2VJc05hTicpLFxuICAgIHN0cmljdEluZGV4T2YgPSByZXF1aXJlKCcuL19zdHJpY3RJbmRleE9mJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaW5kZXhPZmAgd2l0aG91dCBgZnJvbUluZGV4YCBib3VuZHMgY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcGFyYW0ge251bWJlcn0gZnJvbUluZGV4IFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJbmRleE9mKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4KSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gdmFsdWVcbiAgICA/IHN0cmljdEluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpXG4gICAgOiBiYXNlRmluZEluZGV4KGFycmF5LCBiYXNlSXNOYU4sIGZyb21JbmRleCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUluZGV4T2Y7XG4iLAogICAgInZhciBiYXNlSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Jhc2VJbmRleE9mJyk7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmluY2x1ZGVzYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAqIHNwZWNpZnlpbmcgYW4gaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IHRhcmdldCBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdGFyZ2V0YCBpcyBmb3VuZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBhcnJheUluY2x1ZGVzKGFycmF5LCB2YWx1ZSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gIHJldHVybiAhIWxlbmd0aCAmJiBiYXNlSW5kZXhPZihhcnJheSwgdmFsdWUsIDApID4gLTE7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlJbmNsdWRlcztcbiIsCiAgICAiLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2UgYGFycmF5SW5jbHVkZXNgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYSBjb21wYXJhdG9yLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSB0YXJnZXQgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjb21wYXJhdG9yIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHRhcmdldGAgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlJbmNsdWRlc1dpdGgoYXJyYXksIHZhbHVlLCBjb21wYXJhdG9yKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBpZiAoY29tcGFyYXRvcih2YWx1ZSwgYXJyYXlbaW5kZXhdKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUluY2x1ZGVzV2l0aDtcbiIsCiAgICAiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubWFwYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWVcbiAqIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5TWFwKGFycmF5LCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheU1hcDtcbiIsCiAgICAiLyoqXG4gKiBDaGVja3MgaWYgYSBgY2FjaGVgIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBjYWNoZSBUaGUgY2FjaGUgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gY2FjaGVIYXMoY2FjaGUsIGtleSkge1xuICByZXR1cm4gY2FjaGUuaGFzKGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2FjaGVIYXM7XG4iLAogICAgInZhciBTZXRDYWNoZSA9IHJlcXVpcmUoJy4vX1NldENhY2hlJyksXG4gICAgYXJyYXlJbmNsdWRlcyA9IHJlcXVpcmUoJy4vX2FycmF5SW5jbHVkZXMnKSxcbiAgICBhcnJheUluY2x1ZGVzV2l0aCA9IHJlcXVpcmUoJy4vX2FycmF5SW5jbHVkZXNXaXRoJyksXG4gICAgYXJyYXlNYXAgPSByZXF1aXJlKCcuL19hcnJheU1hcCcpLFxuICAgIGJhc2VVbmFyeSA9IHJlcXVpcmUoJy4vX2Jhc2VVbmFyeScpLFxuICAgIGNhY2hlSGFzID0gcmVxdWlyZSgnLi9fY2FjaGVIYXMnKTtcblxuLyoqIFVzZWQgYXMgdGhlIHNpemUgdG8gZW5hYmxlIGxhcmdlIGFycmF5IG9wdGltaXphdGlvbnMuICovXG52YXIgTEFSR0VfQVJSQVlfU0laRSA9IDIwMDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBtZXRob2RzIGxpa2UgYF8uZGlmZmVyZW5jZWAgd2l0aG91dCBzdXBwb3J0XG4gKiBmb3IgZXhjbHVkaW5nIG11bHRpcGxlIGFycmF5cyBvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIGV4Y2x1ZGUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWVdIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmF0b3JdIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBmaWx0ZXJlZCB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VEaWZmZXJlbmNlKGFycmF5LCB2YWx1ZXMsIGl0ZXJhdGVlLCBjb21wYXJhdG9yKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgaW5jbHVkZXMgPSBhcnJheUluY2x1ZGVzLFxuICAgICAgaXNDb21tb24gPSB0cnVlLFxuICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gW10sXG4gICAgICB2YWx1ZXNMZW5ndGggPSB2YWx1ZXMubGVuZ3RoO1xuXG4gIGlmICghbGVuZ3RoKSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBpZiAoaXRlcmF0ZWUpIHtcbiAgICB2YWx1ZXMgPSBhcnJheU1hcCh2YWx1ZXMsIGJhc2VVbmFyeShpdGVyYXRlZSkpO1xuICB9XG4gIGlmIChjb21wYXJhdG9yKSB7XG4gICAgaW5jbHVkZXMgPSBhcnJheUluY2x1ZGVzV2l0aDtcbiAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICB9XG4gIGVsc2UgaWYgKHZhbHVlcy5sZW5ndGggPj0gTEFSR0VfQVJSQVlfU0laRSkge1xuICAgIGluY2x1ZGVzID0gY2FjaGVIYXM7XG4gICAgaXNDb21tb24gPSBmYWxzZTtcbiAgICB2YWx1ZXMgPSBuZXcgU2V0Q2FjaGUodmFsdWVzKTtcbiAgfVxuICBvdXRlcjpcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF0sXG4gICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUgPT0gbnVsbCA/IHZhbHVlIDogaXRlcmF0ZWUodmFsdWUpO1xuXG4gICAgdmFsdWUgPSAoY29tcGFyYXRvciB8fCB2YWx1ZSAhPT0gMCkgPyB2YWx1ZSA6IDA7XG4gICAgaWYgKGlzQ29tbW9uICYmIGNvbXB1dGVkID09PSBjb21wdXRlZCkge1xuICAgICAgdmFyIHZhbHVlc0luZGV4ID0gdmFsdWVzTGVuZ3RoO1xuICAgICAgd2hpbGUgKHZhbHVlc0luZGV4LS0pIHtcbiAgICAgICAgaWYgKHZhbHVlc1t2YWx1ZXNJbmRleF0gPT09IGNvbXB1dGVkKSB7XG4gICAgICAgICAgY29udGludWUgb3V0ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIWluY2x1ZGVzKHZhbHVlcywgY29tcHV0ZWQsIGNvbXBhcmF0b3IpKSB7XG4gICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZURpZmZlcmVuY2U7XG4iLAogICAgInZhciBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uaXNBcnJheUxpa2VgIGV4Y2VwdCB0aGF0IGl0IGFsc28gY2hlY2tzIGlmIGB2YWx1ZWBcbiAqIGlzIGFuIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheS1saWtlIG9iamVjdCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlT2JqZWN0KGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXlMaWtlT2JqZWN0KF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5TGlrZU9iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBpc0FycmF5TGlrZSh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcnJheUxpa2VPYmplY3Q7XG4iLAogICAgInZhciBiYXNlRGlmZmVyZW5jZSA9IHJlcXVpcmUoJy4vX2Jhc2VEaWZmZXJlbmNlJyksXG4gICAgYmFzZUZsYXR0ZW4gPSByZXF1aXJlKCcuL19iYXNlRmxhdHRlbicpLFxuICAgIGJhc2VSZXN0ID0gcmVxdWlyZSgnLi9fYmFzZVJlc3QnKSxcbiAgICBpc0FycmF5TGlrZU9iamVjdCA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2VPYmplY3QnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIGBhcnJheWAgdmFsdWVzIG5vdCBpbmNsdWRlZCBpbiB0aGUgb3RoZXIgZ2l2ZW4gYXJyYXlzXG4gKiB1c2luZyBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLiBUaGUgb3JkZXIgYW5kIHJlZmVyZW5jZXMgb2YgcmVzdWx0IHZhbHVlcyBhcmVcbiAqIGRldGVybWluZWQgYnkgdGhlIGZpcnN0IGFycmF5LlxuICpcbiAqICoqTm90ZToqKiBVbmxpa2UgYF8ucHVsbEFsbGAsIHRoaXMgbWV0aG9kIHJldHVybnMgYSBuZXcgYXJyYXkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Li4uQXJyYXl9IFt2YWx1ZXNdIFRoZSB2YWx1ZXMgdG8gZXhjbHVkZS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGZpbHRlcmVkIHZhbHVlcy5cbiAqIEBzZWUgXy53aXRob3V0LCBfLnhvclxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmRpZmZlcmVuY2UoWzIsIDFdLCBbMiwgM10pO1xuICogLy8gPT4gWzFdXG4gKi9cbnZhciBkaWZmZXJlbmNlID0gYmFzZVJlc3QoZnVuY3Rpb24oYXJyYXksIHZhbHVlcykge1xuICByZXR1cm4gaXNBcnJheUxpa2VPYmplY3QoYXJyYXkpXG4gICAgPyBiYXNlRGlmZmVyZW5jZShhcnJheSwgYmFzZUZsYXR0ZW4odmFsdWVzLCAxLCBpc0FycmF5TGlrZU9iamVjdCwgdHJ1ZSkpXG4gICAgOiBbXTtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRpZmZlcmVuY2U7XG4iLAogICAgInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgU2V0ID0gZ2V0TmF0aXZlKHJvb3QsICdTZXQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTZXQ7XG4iLAogICAgIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyBgdW5kZWZpbmVkYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDIuMy4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRpbWVzKDIsIF8ubm9vcCk7XG4gKiAvLyA9PiBbdW5kZWZpbmVkLCB1bmRlZmluZWRdXG4gKi9cbmZ1bmN0aW9uIG5vb3AoKSB7XG4gIC8vIE5vIG9wZXJhdGlvbiBwZXJmb3JtZWQuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbm9vcDtcbiIsCiAgICAiLyoqXG4gKiBDb252ZXJ0cyBgc2V0YCB0byBhbiBhcnJheSBvZiBpdHMgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc2V0IFRoZSBzZXQgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBzZXRUb0FycmF5KHNldCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KHNldC5zaXplKTtcblxuICBzZXQuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJlc3VsdFsrK2luZGV4XSA9IHZhbHVlO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXRUb0FycmF5O1xuIiwKICAgICJ2YXIgU2V0ID0gcmVxdWlyZSgnLi9fU2V0JyksXG4gICAgbm9vcCA9IHJlcXVpcmUoJy4vbm9vcCcpLFxuICAgIHNldFRvQXJyYXkgPSByZXF1aXJlKCcuL19zZXRUb0FycmF5Jyk7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIElORklOSVRZID0gMSAvIDA7XG5cbi8qKlxuICogQ3JlYXRlcyBhIHNldCBvYmplY3Qgb2YgYHZhbHVlc2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIGFkZCB0byB0aGUgc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IHNldC5cbiAqL1xudmFyIGNyZWF0ZVNldCA9ICEoU2V0ICYmICgxIC8gc2V0VG9BcnJheShuZXcgU2V0KFssLTBdKSlbMV0pID09IElORklOSVRZKSA/IG5vb3AgOiBmdW5jdGlvbih2YWx1ZXMpIHtcbiAgcmV0dXJuIG5ldyBTZXQodmFsdWVzKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlU2V0O1xuIiwKICAgICJ2YXIgU2V0Q2FjaGUgPSByZXF1aXJlKCcuL19TZXRDYWNoZScpLFxuICAgIGFycmF5SW5jbHVkZXMgPSByZXF1aXJlKCcuL19hcnJheUluY2x1ZGVzJyksXG4gICAgYXJyYXlJbmNsdWRlc1dpdGggPSByZXF1aXJlKCcuL19hcnJheUluY2x1ZGVzV2l0aCcpLFxuICAgIGNhY2hlSGFzID0gcmVxdWlyZSgnLi9fY2FjaGVIYXMnKSxcbiAgICBjcmVhdGVTZXQgPSByZXF1aXJlKCcuL19jcmVhdGVTZXQnKSxcbiAgICBzZXRUb0FycmF5ID0gcmVxdWlyZSgnLi9fc2V0VG9BcnJheScpO1xuXG4vKiogVXNlZCBhcyB0aGUgc2l6ZSB0byBlbmFibGUgbGFyZ2UgYXJyYXkgb3B0aW1pemF0aW9ucy4gKi9cbnZhciBMQVJHRV9BUlJBWV9TSVpFID0gMjAwO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVuaXFCeWAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY29tcGFyYXRvcl0gVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGR1cGxpY2F0ZSBmcmVlIGFycmF5LlxuICovXG5mdW5jdGlvbiBiYXNlVW5pcShhcnJheSwgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBpbmNsdWRlcyA9IGFycmF5SW5jbHVkZXMsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICBpc0NvbW1vbiA9IHRydWUsXG4gICAgICByZXN1bHQgPSBbXSxcbiAgICAgIHNlZW4gPSByZXN1bHQ7XG5cbiAgaWYgKGNvbXBhcmF0b3IpIHtcbiAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICAgIGluY2x1ZGVzID0gYXJyYXlJbmNsdWRlc1dpdGg7XG4gIH1cbiAgZWxzZSBpZiAobGVuZ3RoID49IExBUkdFX0FSUkFZX1NJWkUpIHtcbiAgICB2YXIgc2V0ID0gaXRlcmF0ZWUgPyBudWxsIDogY3JlYXRlU2V0KGFycmF5KTtcbiAgICBpZiAoc2V0KSB7XG4gICAgICByZXR1cm4gc2V0VG9BcnJheShzZXQpO1xuICAgIH1cbiAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICAgIGluY2x1ZGVzID0gY2FjaGVIYXM7XG4gICAgc2VlbiA9IG5ldyBTZXRDYWNoZTtcbiAgfVxuICBlbHNlIHtcbiAgICBzZWVuID0gaXRlcmF0ZWUgPyBbXSA6IHJlc3VsdDtcbiAgfVxuICBvdXRlcjpcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF0sXG4gICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUgPyBpdGVyYXRlZSh2YWx1ZSkgOiB2YWx1ZTtcblxuICAgIHZhbHVlID0gKGNvbXBhcmF0b3IgfHwgdmFsdWUgIT09IDApID8gdmFsdWUgOiAwO1xuICAgIGlmIChpc0NvbW1vbiAmJiBjb21wdXRlZCA9PT0gY29tcHV0ZWQpIHtcbiAgICAgIHZhciBzZWVuSW5kZXggPSBzZWVuLmxlbmd0aDtcbiAgICAgIHdoaWxlIChzZWVuSW5kZXgtLSkge1xuICAgICAgICBpZiAoc2VlbltzZWVuSW5kZXhdID09PSBjb21wdXRlZCkge1xuICAgICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaXRlcmF0ZWUpIHtcbiAgICAgICAgc2Vlbi5wdXNoKGNvbXB1dGVkKTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIWluY2x1ZGVzKHNlZW4sIGNvbXB1dGVkLCBjb21wYXJhdG9yKSkge1xuICAgICAgaWYgKHNlZW4gIT09IHJlc3VsdCkge1xuICAgICAgICBzZWVuLnB1c2goY29tcHV0ZWQpO1xuICAgICAgfVxuICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VVbmlxO1xuIiwKICAgICJ2YXIgYmFzZUZsYXR0ZW4gPSByZXF1aXJlKCcuL19iYXNlRmxhdHRlbicpLFxuICAgIGJhc2VSZXN0ID0gcmVxdWlyZSgnLi9fYmFzZVJlc3QnKSxcbiAgICBiYXNlVW5pcSA9IHJlcXVpcmUoJy4vX2Jhc2VVbmlxJyksXG4gICAgaXNBcnJheUxpa2VPYmplY3QgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlT2JqZWN0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB1bmlxdWUgdmFsdWVzLCBpbiBvcmRlciwgZnJvbSBhbGwgZ2l2ZW4gYXJyYXlzIHVzaW5nXG4gKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHsuLi5BcnJheX0gW2FycmF5c10gVGhlIGFycmF5cyB0byBpbnNwZWN0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgY29tYmluZWQgdmFsdWVzLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnVuaW9uKFsyXSwgWzEsIDJdKTtcbiAqIC8vID0+IFsyLCAxXVxuICovXG52YXIgdW5pb24gPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheXMpIHtcbiAgcmV0dXJuIGJhc2VVbmlxKGJhc2VGbGF0dGVuKGFycmF5cywgMSwgaXNBcnJheUxpa2VPYmplY3QsIHRydWUpKTtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVuaW9uO1xuIiwKICAgICIvKipcbiAqIENyZWF0ZXMgYSB1bmFyeSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggaXRzIGFyZ3VtZW50IHRyYW5zZm9ybWVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNmb3JtIFRoZSBhcmd1bWVudCB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlckFyZyhmdW5jLCB0cmFuc2Zvcm0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiBmdW5jKHRyYW5zZm9ybShhcmcpKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvdmVyQXJnO1xuIiwKICAgICJ2YXIgb3ZlckFyZyA9IHJlcXVpcmUoJy4vX292ZXJBcmcnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgZ2V0UHJvdG90eXBlID0gb3ZlckFyZyhPYmplY3QuZ2V0UHJvdG90eXBlT2YsIE9iamVjdCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0UHJvdG90eXBlO1xuIiwKICAgICJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBnZXRQcm90b3R5cGUgPSByZXF1aXJlKCcuL19nZXRQcm90b3R5cGUnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XSc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGUsXG4gICAgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKiogVXNlZCB0byBpbmZlciB0aGUgYE9iamVjdGAgY29uc3RydWN0b3IuICovXG52YXIgb2JqZWN0Q3RvclN0cmluZyA9IGZ1bmNUb1N0cmluZy5jYWxsKE9iamVjdCk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIHRoYXQgaXMsIGFuIG9iamVjdCBjcmVhdGVkIGJ5IHRoZVxuICogYE9iamVjdGAgY29uc3RydWN0b3Igb3Igb25lIHdpdGggYSBgW1tQcm90b3R5cGVdXWAgb2YgYG51bGxgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC44LjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcGxhaW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqIH1cbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QobmV3IEZvbyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoeyAneCc6IDAsICd5JzogMCB9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoT2JqZWN0LmNyZWF0ZShudWxsKSk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdExpa2UodmFsdWUpIHx8IGJhc2VHZXRUYWcodmFsdWUpICE9IG9iamVjdFRhZykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgcHJvdG8gPSBnZXRQcm90b3R5cGUodmFsdWUpO1xuICBpZiAocHJvdG8gPT09IG51bGwpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICB2YXIgQ3RvciA9IGhhc093blByb3BlcnR5LmNhbGwocHJvdG8sICdjb25zdHJ1Y3RvcicpICYmIHByb3RvLmNvbnN0cnVjdG9yO1xuICByZXR1cm4gdHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yIGluc3RhbmNlb2YgQ3RvciAmJlxuICAgIGZ1bmNUb1N0cmluZy5jYWxsKEN0b3IpID09IG9iamVjdEN0b3JTdHJpbmc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNQbGFpbk9iamVjdDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmFzc2VydFZhbGlkUGF0dGVybiA9IHZvaWQgMDtcbmNvbnN0IE1BWF9QQVRURVJOX0xFTkdUSCA9IDEwMjQgKiA2NDtcbmNvbnN0IGFzc2VydFZhbGlkUGF0dGVybiA9IChwYXR0ZXJuKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBwYXR0ZXJuICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnZhbGlkIHBhdHRlcm4nKTtcbiAgICB9XG4gICAgaWYgKHBhdHRlcm4ubGVuZ3RoID4gTUFYX1BBVFRFUk5fTEVOR1RIKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3BhdHRlcm4gaXMgdG9vIGxvbmcnKTtcbiAgICB9XG59O1xuZXhwb3J0cy5hc3NlcnRWYWxpZFBhdHRlcm4gPSBhc3NlcnRWYWxpZFBhdHRlcm47XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hc3NlcnQtdmFsaWQtcGF0dGVybi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gdHJhbnNsYXRlIHRoZSB2YXJpb3VzIHBvc2l4IGNoYXJhY3RlciBjbGFzc2VzIGludG8gdW5pY29kZSBwcm9wZXJ0aWVzXG4vLyB0aGlzIHdvcmtzIGFjcm9zcyBhbGwgdW5pY29kZSBsb2NhbGVzXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnBhcnNlQ2xhc3MgPSB2b2lkIDA7XG4vLyB7IDxwb3NpeCBjbGFzcz46IFs8dHJhbnNsYXRpb24+LCAvdSBmbGFnIHJlcXVpcmVkLCBuZWdhdGVkXVxuY29uc3QgcG9zaXhDbGFzc2VzID0ge1xuICAgICdbOmFsbnVtOl0nOiBbJ1xcXFxwe0x9XFxcXHB7Tmx9XFxcXHB7TmR9JywgdHJ1ZV0sXG4gICAgJ1s6YWxwaGE6XSc6IFsnXFxcXHB7TH1cXFxccHtObH0nLCB0cnVlXSxcbiAgICAnWzphc2NpaTpdJzogWydcXFxceCcgKyAnMDAtXFxcXHgnICsgJzdmJywgZmFsc2VdLFxuICAgICdbOmJsYW5rOl0nOiBbJ1xcXFxwe1pzfVxcXFx0JywgdHJ1ZV0sXG4gICAgJ1s6Y250cmw6XSc6IFsnXFxcXHB7Q2N9JywgdHJ1ZV0sXG4gICAgJ1s6ZGlnaXQ6XSc6IFsnXFxcXHB7TmR9JywgdHJ1ZV0sXG4gICAgJ1s6Z3JhcGg6XSc6IFsnXFxcXHB7Wn1cXFxccHtDfScsIHRydWUsIHRydWVdLFxuICAgICdbOmxvd2VyOl0nOiBbJ1xcXFxwe0xsfScsIHRydWVdLFxuICAgICdbOnByaW50Ol0nOiBbJ1xcXFxwe0N9JywgdHJ1ZV0sXG4gICAgJ1s6cHVuY3Q6XSc6IFsnXFxcXHB7UH0nLCB0cnVlXSxcbiAgICAnWzpzcGFjZTpdJzogWydcXFxccHtafVxcXFx0XFxcXHJcXFxcblxcXFx2XFxcXGYnLCB0cnVlXSxcbiAgICAnWzp1cHBlcjpdJzogWydcXFxccHtMdX0nLCB0cnVlXSxcbiAgICAnWzp3b3JkOl0nOiBbJ1xcXFxwe0x9XFxcXHB7Tmx9XFxcXHB7TmR9XFxcXHB7UGN9JywgdHJ1ZV0sXG4gICAgJ1s6eGRpZ2l0Ol0nOiBbJ0EtRmEtZjAtOScsIGZhbHNlXSxcbn07XG4vLyBvbmx5IG5lZWQgdG8gZXNjYXBlIGEgZmV3IHRoaW5ncyBpbnNpZGUgb2YgYnJhY2UgZXhwcmVzc2lvbnNcbi8vIGVzY2FwZXM6IFsgXFwgXSAtXG5jb25zdCBicmFjZUVzY2FwZSA9IChzKSA9PiBzLnJlcGxhY2UoL1tbXFxdXFxcXC1dL2csICdcXFxcJCYnKTtcbi8vIGVzY2FwZSBhbGwgcmVnZXhwIG1hZ2ljIGNoYXJhY3RlcnNcbmNvbnN0IHJlZ2V4cEVzY2FwZSA9IChzKSA9PiBzLnJlcGxhY2UoL1stW1xcXXt9KCkqKz8uLFxcXFxeJHwjXFxzXS9nLCAnXFxcXCQmJyk7XG4vLyBldmVyeXRoaW5nIGhhcyBhbHJlYWR5IGJlZW4gZXNjYXBlZCwgd2UganVzdCBoYXZlIHRvIGpvaW5cbmNvbnN0IHJhbmdlc1RvU3RyaW5nID0gKHJhbmdlcykgPT4gcmFuZ2VzLmpvaW4oJycpO1xuLy8gdGFrZXMgYSBnbG9iIHN0cmluZyBhdCBhIHBvc2l4IGJyYWNlIGV4cHJlc3Npb24sIGFuZCByZXR1cm5zXG4vLyBhbiBlcXVpdmFsZW50IHJlZ3VsYXIgZXhwcmVzc2lvbiBzb3VyY2UsIGFuZCBib29sZWFuIGluZGljYXRpbmdcbi8vIHdoZXRoZXIgdGhlIC91IGZsYWcgbmVlZHMgdG8gYmUgYXBwbGllZCwgYW5kIHRoZSBudW1iZXIgb2YgY2hhcnNcbi8vIGNvbnN1bWVkIHRvIHBhcnNlIHRoZSBjaGFyYWN0ZXIgY2xhc3MuXG4vLyBUaGlzIGFsc28gcmVtb3ZlcyBvdXQgb2Ygb3JkZXIgcmFuZ2VzLCBhbmQgcmV0dXJucyAoJC4pIGlmIHRoZVxuLy8gZW50aXJlIGNsYXNzIGp1c3Qgbm8gZ29vZC5cbmNvbnN0IHBhcnNlQ2xhc3MgPSAoZ2xvYiwgcG9zaXRpb24pID0+IHtcbiAgICBjb25zdCBwb3MgPSBwb3NpdGlvbjtcbiAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICBpZiAoZ2xvYi5jaGFyQXQocG9zKSAhPT0gJ1snKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignbm90IGluIGEgYnJhY2UgZXhwcmVzc2lvbicpO1xuICAgIH1cbiAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgIGNvbnN0IHJhbmdlcyA9IFtdO1xuICAgIGNvbnN0IG5lZ3MgPSBbXTtcbiAgICBsZXQgaSA9IHBvcyArIDE7XG4gICAgbGV0IHNhd1N0YXJ0ID0gZmFsc2U7XG4gICAgbGV0IHVmbGFnID0gZmFsc2U7XG4gICAgbGV0IGVzY2FwaW5nID0gZmFsc2U7XG4gICAgbGV0IG5lZ2F0ZSA9IGZhbHNlO1xuICAgIGxldCBlbmRQb3MgPSBwb3M7XG4gICAgbGV0IHJhbmdlU3RhcnQgPSAnJztcbiAgICBXSElMRTogd2hpbGUgKGkgPCBnbG9iLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBjID0gZ2xvYi5jaGFyQXQoaSk7XG4gICAgICAgIGlmICgoYyA9PT0gJyEnIHx8IGMgPT09ICdeJykgJiYgaSA9PT0gcG9zICsgMSkge1xuICAgICAgICAgICAgbmVnYXRlID0gdHJ1ZTtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjID09PSAnXScgJiYgc2F3U3RhcnQgJiYgIWVzY2FwaW5nKSB7XG4gICAgICAgICAgICBlbmRQb3MgPSBpICsgMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHNhd1N0YXJ0ID0gdHJ1ZTtcbiAgICAgICAgaWYgKGMgPT09ICdcXFxcJykge1xuICAgICAgICAgICAgaWYgKCFlc2NhcGluZykge1xuICAgICAgICAgICAgICAgIGVzY2FwaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBlc2NhcGVkIFxcIGNoYXIsIGZhbGwgdGhyb3VnaCBhbmQgdHJlYXQgbGlrZSBub3JtYWwgY2hhclxuICAgICAgICB9XG4gICAgICAgIGlmIChjID09PSAnWycgJiYgIWVzY2FwaW5nKSB7XG4gICAgICAgICAgICAvLyBlaXRoZXIgYSBwb3NpeCBjbGFzcywgYSBjb2xsYXRpb24gZXF1aXZhbGVudCwgb3IganVzdCBhIFtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2NscywgW3VuaXAsIHUsIG5lZ11dIG9mIE9iamVjdC5lbnRyaWVzKHBvc2l4Q2xhc3NlcykpIHtcbiAgICAgICAgICAgICAgICBpZiAoZ2xvYi5zdGFydHNXaXRoKGNscywgaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaW52YWxpZCwgW2EtW10gaXMgZmluZSwgYnV0IG5vdCBbYS1bOmFscGhhXV1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHJhbmdlU3RhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbJyQuJywgZmFsc2UsIGdsb2IubGVuZ3RoIC0gcG9zLCB0cnVlXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpICs9IGNscy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZWcpXG4gICAgICAgICAgICAgICAgICAgICAgICBuZWdzLnB1c2godW5pcCk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlcy5wdXNoKHVuaXApO1xuICAgICAgICAgICAgICAgICAgICB1ZmxhZyA9IHVmbGFnIHx8IHU7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIFdISUxFO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBub3cgaXQncyBqdXN0IGEgbm9ybWFsIGNoYXJhY3RlciwgZWZmZWN0aXZlbHlcbiAgICAgICAgZXNjYXBpbmcgPSBmYWxzZTtcbiAgICAgICAgaWYgKHJhbmdlU3RhcnQpIHtcbiAgICAgICAgICAgIC8vIHRocm93IHRoaXMgcmFuZ2UgYXdheSBpZiBpdCdzIG5vdCB2YWxpZCwgYnV0IG90aGVyc1xuICAgICAgICAgICAgLy8gY2FuIHN0aWxsIG1hdGNoLlxuICAgICAgICAgICAgaWYgKGMgPiByYW5nZVN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgcmFuZ2VzLnB1c2goYnJhY2VFc2NhcGUocmFuZ2VTdGFydCkgKyAnLScgKyBicmFjZUVzY2FwZShjKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjID09PSByYW5nZVN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgcmFuZ2VzLnB1c2goYnJhY2VFc2NhcGUoYykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmFuZ2VTdGFydCA9ICcnO1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbm93IG1pZ2h0IGJlIHRoZSBzdGFydCBvZiBhIHJhbmdlLlxuICAgICAgICAvLyBjYW4gYmUgZWl0aGVyIGMtZCBvciBjLV0gb3IgYzxtb3JlLi4uPl0gb3IgY10gYXQgdGhpcyBwb2ludFxuICAgICAgICBpZiAoZ2xvYi5zdGFydHNXaXRoKCctXScsIGkgKyAxKSkge1xuICAgICAgICAgICAgcmFuZ2VzLnB1c2goYnJhY2VFc2NhcGUoYyArICctJykpO1xuICAgICAgICAgICAgaSArPSAyO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGdsb2Iuc3RhcnRzV2l0aCgnLScsIGkgKyAxKSkge1xuICAgICAgICAgICAgcmFuZ2VTdGFydCA9IGM7XG4gICAgICAgICAgICBpICs9IDI7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBub3QgdGhlIHN0YXJ0IG9mIGEgcmFuZ2UsIGp1c3QgYSBzaW5nbGUgY2hhcmFjdGVyXG4gICAgICAgIHJhbmdlcy5wdXNoKGJyYWNlRXNjYXBlKGMpKTtcbiAgICAgICAgaSsrO1xuICAgIH1cbiAgICBpZiAoZW5kUG9zIDwgaSkge1xuICAgICAgICAvLyBkaWRuJ3Qgc2VlIHRoZSBlbmQgb2YgdGhlIGNsYXNzLCBub3QgYSB2YWxpZCBjbGFzcyxcbiAgICAgICAgLy8gYnV0IG1pZ2h0IHN0aWxsIGJlIHZhbGlkIGFzIGEgbGl0ZXJhbCBtYXRjaC5cbiAgICAgICAgcmV0dXJuIFsnJywgZmFsc2UsIDAsIGZhbHNlXTtcbiAgICB9XG4gICAgLy8gaWYgd2UgZ290IG5vIHJhbmdlcyBhbmQgbm8gbmVnYXRlcywgdGhlbiB3ZSBoYXZlIGEgcmFuZ2UgdGhhdFxuICAgIC8vIGNhbm5vdCBwb3NzaWJseSBtYXRjaCBhbnl0aGluZywgYW5kIHRoYXQgcG9pc29ucyB0aGUgd2hvbGUgZ2xvYlxuICAgIGlmICghcmFuZ2VzLmxlbmd0aCAmJiAhbmVncy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIFsnJC4nLCBmYWxzZSwgZ2xvYi5sZW5ndGggLSBwb3MsIHRydWVdO1xuICAgIH1cbiAgICAvLyBpZiB3ZSBnb3Qgb25lIHBvc2l0aXZlIHJhbmdlLCBhbmQgaXQncyBhIHNpbmdsZSBjaGFyYWN0ZXIsIHRoZW4gdGhhdCdzXG4gICAgLy8gbm90IGFjdHVhbGx5IGEgbWFnaWMgcGF0dGVybiwgaXQncyBqdXN0IHRoYXQgb25lIGxpdGVyYWwgY2hhcmFjdGVyLlxuICAgIC8vIHdlIHNob3VsZCBub3QgdHJlYXQgdGhhdCBhcyBcIm1hZ2ljXCIsIHdlIHNob3VsZCBqdXN0IHJldHVybiB0aGUgbGl0ZXJhbFxuICAgIC8vIGNoYXJhY3Rlci4gW19dIGlzIGEgcGVyZmVjdGx5IHZhbGlkIHdheSB0byBlc2NhcGUgZ2xvYiBtYWdpYyBjaGFycy5cbiAgICBpZiAobmVncy5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgcmFuZ2VzLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICAvXlxcXFw/LiQvLnRlc3QocmFuZ2VzWzBdKSAmJlxuICAgICAgICAhbmVnYXRlKSB7XG4gICAgICAgIGNvbnN0IHIgPSByYW5nZXNbMF0ubGVuZ3RoID09PSAyID8gcmFuZ2VzWzBdLnNsaWNlKC0xKSA6IHJhbmdlc1swXTtcbiAgICAgICAgcmV0dXJuIFtyZWdleHBFc2NhcGUociksIGZhbHNlLCBlbmRQb3MgLSBwb3MsIGZhbHNlXTtcbiAgICB9XG4gICAgY29uc3Qgc3JhbmdlcyA9ICdbJyArIChuZWdhdGUgPyAnXicgOiAnJykgKyByYW5nZXNUb1N0cmluZyhyYW5nZXMpICsgJ10nO1xuICAgIGNvbnN0IHNuZWdzID0gJ1snICsgKG5lZ2F0ZSA/ICcnIDogJ14nKSArIHJhbmdlc1RvU3RyaW5nKG5lZ3MpICsgJ10nO1xuICAgIGNvbnN0IGNvbWIgPSByYW5nZXMubGVuZ3RoICYmIG5lZ3MubGVuZ3RoXG4gICAgICAgID8gJygnICsgc3JhbmdlcyArICd8JyArIHNuZWdzICsgJyknXG4gICAgICAgIDogcmFuZ2VzLmxlbmd0aFxuICAgICAgICAgICAgPyBzcmFuZ2VzXG4gICAgICAgICAgICA6IHNuZWdzO1xuICAgIHJldHVybiBbY29tYiwgdWZsYWcsIGVuZFBvcyAtIHBvcywgdHJ1ZV07XG59O1xuZXhwb3J0cy5wYXJzZUNsYXNzID0gcGFyc2VDbGFzcztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJyYWNlLWV4cHJlc3Npb25zLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnVuZXNjYXBlID0gdm9pZCAwO1xuLyoqXG4gKiBVbi1lc2NhcGUgYSBzdHJpbmcgdGhhdCBoYXMgYmVlbiBlc2NhcGVkIHdpdGgge0BsaW5rIGVzY2FwZX0uXG4gKlxuICogSWYgdGhlIHtAbGluayB3aW5kb3dzUGF0aHNOb0VzY2FwZX0gb3B0aW9uIGlzIHVzZWQsIHRoZW4gc3F1YXJlLWJyYWNlXG4gKiBlc2NhcGVzIGFyZSByZW1vdmVkLCBidXQgbm90IGJhY2tzbGFzaCBlc2NhcGVzLiAgRm9yIGV4YW1wbGUsIGl0IHdpbGwgdHVyblxuICogdGhlIHN0cmluZyBgJ1sqXSdgIGludG8gYCpgLCBidXQgaXQgd2lsbCBub3QgdHVybiBgJ1xcXFwqJ2AgaW50byBgJyonYCxcbiAqIGJlY3Vhc2UgYFxcYCBpcyBhIHBhdGggc2VwYXJhdG9yIGluIGB3aW5kb3dzUGF0aHNOb0VzY2FwZWAgbW9kZS5cbiAqXG4gKiBXaGVuIGB3aW5kb3dzUGF0aHNOb0VzY2FwZWAgaXMgbm90IHNldCwgdGhlbiBib3RoIGJyYWNlIGVzY2FwZXMgYW5kXG4gKiBiYWNrc2xhc2ggZXNjYXBlcyBhcmUgcmVtb3ZlZC5cbiAqXG4gKiBTbGFzaGVzIChhbmQgYmFja3NsYXNoZXMgaW4gYHdpbmRvd3NQYXRoc05vRXNjYXBlYCBtb2RlKSBjYW5ub3QgYmUgZXNjYXBlZFxuICogb3IgdW5lc2NhcGVkLlxuICovXG5jb25zdCB1bmVzY2FwZSA9IChzLCB7IHdpbmRvd3NQYXRoc05vRXNjYXBlID0gZmFsc2UsIH0gPSB7fSkgPT4ge1xuICAgIHJldHVybiB3aW5kb3dzUGF0aHNOb0VzY2FwZVxuICAgICAgICA/IHMucmVwbGFjZSgvXFxbKFteXFwvXFxcXF0pXFxdL2csICckMScpXG4gICAgICAgIDogcy5yZXBsYWNlKC8oKD8hXFxcXCkufF4pXFxbKFteXFwvXFxcXF0pXFxdL2csICckMSQyJykucmVwbGFjZSgvXFxcXChbXlxcL10pL2csICckMScpO1xufTtcbmV4cG9ydHMudW5lc2NhcGUgPSB1bmVzY2FwZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVuZXNjYXBlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBwYXJzZSBhIHNpbmdsZSBwYXRoIHBvcnRpb25cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQVNUID0gdm9pZCAwO1xuY29uc3QgYnJhY2VfZXhwcmVzc2lvbnNfanNfMSA9IHJlcXVpcmUoXCIuL2JyYWNlLWV4cHJlc3Npb25zLmpzXCIpO1xuY29uc3QgdW5lc2NhcGVfanNfMSA9IHJlcXVpcmUoXCIuL3VuZXNjYXBlLmpzXCIpO1xuY29uc3QgdHlwZXMgPSBuZXcgU2V0KFsnIScsICc/JywgJysnLCAnKicsICdAJ10pO1xuY29uc3QgaXNFeHRnbG9iVHlwZSA9IChjKSA9PiB0eXBlcy5oYXMoYyk7XG4vLyBQYXR0ZXJucyB0aGF0IGdldCBwcmVwZW5kZWQgdG8gYmluZCB0byB0aGUgc3RhcnQgb2YgZWl0aGVyIHRoZVxuLy8gZW50aXJlIHN0cmluZywgb3IganVzdCBhIHNpbmdsZSBwYXRoIHBvcnRpb24sIHRvIHByZXZlbnQgZG90c1xuLy8gYW5kL29yIHRyYXZlcnNhbCBwYXR0ZXJucywgd2hlbiBuZWVkZWQuXG4vLyBFeHRzIGRvbid0IG5lZWQgdGhlIF4gb3IgLyBiaXQsIGJlY2F1c2UgdGhlIHJvb3QgYmluZHMgdGhhdCBhbHJlYWR5LlxuY29uc3Qgc3RhcnROb1RyYXZlcnNhbCA9ICcoPyEoPzpefC8pXFxcXC5cXFxcLj8oPzokfC8pKSc7XG5jb25zdCBzdGFydE5vRG90ID0gJyg/IVxcXFwuKSc7XG4vLyBjaGFyYWN0ZXJzIHRoYXQgaW5kaWNhdGUgYSBzdGFydCBvZiBwYXR0ZXJuIG5lZWRzIHRoZSBcIm5vIGRvdHNcIiBiaXQsXG4vLyBiZWNhdXNlIGEgZG90ICptaWdodCogYmUgbWF0Y2hlZC4gKCBpcyBub3QgaW4gdGhlIGxpc3QsIGJlY2F1c2UgaW5cbi8vIHRoZSBjYXNlIG9mIGEgY2hpbGQgZXh0Z2xvYiwgaXQgd2lsbCBoYW5kbGUgdGhlIHByZXZlbnRpb24gaXRzZWxmLlxuY29uc3QgYWRkUGF0dGVyblN0YXJ0ID0gbmV3IFNldChbJ1snLCAnLiddKTtcbi8vIGNhc2VzIHdoZXJlIHRyYXZlcnNhbCBpcyBBLU9LLCBubyBkb3QgcHJldmVudGlvbiBuZWVkZWRcbmNvbnN0IGp1c3REb3RzID0gbmV3IFNldChbJy4uJywgJy4nXSk7XG5jb25zdCByZVNwZWNpYWxzID0gbmV3IFNldCgnKCkuKnt9Kz9bXV4kXFxcXCEnKTtcbmNvbnN0IHJlZ0V4cEVzY2FwZSA9IChzKSA9PiBzLnJlcGxhY2UoL1stW1xcXXt9KCkqKz8uLFxcXFxeJHwjXFxzXS9nLCAnXFxcXCQmJyk7XG4vLyBhbnkgc2luZ2xlIHRoaW5nIG90aGVyIHRoYW4gL1xuY29uc3QgcW1hcmsgPSAnW14vXSc7XG4vLyAqID0+IGFueSBudW1iZXIgb2YgY2hhcmFjdGVyc1xuY29uc3Qgc3RhciA9IHFtYXJrICsgJyo/Jztcbi8vIHVzZSArIHdoZW4gd2UgbmVlZCB0byBlbnN1cmUgdGhhdCAqc29tZXRoaW5nKiBtYXRjaGVzLCBiZWNhdXNlIHRoZSAqIGlzXG4vLyB0aGUgb25seSB0aGluZyBpbiB0aGUgcGF0aCBwb3J0aW9uLlxuY29uc3Qgc3Rhck5vRW1wdHkgPSBxbWFyayArICcrPyc7XG4vLyByZW1vdmUgdGhlIFxcIGNoYXJzIHRoYXQgd2UgYWRkZWQgaWYgd2UgZW5kIHVwIGRvaW5nIGEgbm9ubWFnaWMgY29tcGFyZVxuLy8gY29uc3QgZGVzbGFzaCA9IChzOiBzdHJpbmcpID0+IHMucmVwbGFjZSgvXFxcXCguKS9nLCAnJDEnKVxuY2xhc3MgQVNUIHtcbiAgICB0eXBlO1xuICAgICNyb290O1xuICAgICNoYXNNYWdpYztcbiAgICAjdWZsYWcgPSBmYWxzZTtcbiAgICAjcGFydHMgPSBbXTtcbiAgICAjcGFyZW50O1xuICAgICNwYXJlbnRJbmRleDtcbiAgICAjbmVncztcbiAgICAjZmlsbGVkTmVncyA9IGZhbHNlO1xuICAgICNvcHRpb25zO1xuICAgICN0b1N0cmluZztcbiAgICAvLyBzZXQgdG8gdHJ1ZSBpZiBpdCdzIGFuIGV4dGdsb2Igd2l0aCBubyBjaGlsZHJlblxuICAgIC8vICh3aGljaCByZWFsbHkgbWVhbnMgb25lIGNoaWxkIG9mICcnKVxuICAgICNlbXB0eUV4dCA9IGZhbHNlO1xuICAgIGNvbnN0cnVjdG9yKHR5cGUsIHBhcmVudCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgIC8vIGV4dGdsb2JzIGFyZSBpbmhlcmVudGx5IG1hZ2ljYWxcbiAgICAgICAgaWYgKHR5cGUpXG4gICAgICAgICAgICB0aGlzLiNoYXNNYWdpYyA9IHRydWU7XG4gICAgICAgIHRoaXMuI3BhcmVudCA9IHBhcmVudDtcbiAgICAgICAgdGhpcy4jcm9vdCA9IHRoaXMuI3BhcmVudCA/IHRoaXMuI3BhcmVudC4jcm9vdCA6IHRoaXM7XG4gICAgICAgIHRoaXMuI29wdGlvbnMgPSB0aGlzLiNyb290ID09PSB0aGlzID8gb3B0aW9ucyA6IHRoaXMuI3Jvb3QuI29wdGlvbnM7XG4gICAgICAgIHRoaXMuI25lZ3MgPSB0aGlzLiNyb290ID09PSB0aGlzID8gW10gOiB0aGlzLiNyb290LiNuZWdzO1xuICAgICAgICBpZiAodHlwZSA9PT0gJyEnICYmICF0aGlzLiNyb290LiNmaWxsZWROZWdzKVxuICAgICAgICAgICAgdGhpcy4jbmVncy5wdXNoKHRoaXMpO1xuICAgICAgICB0aGlzLiNwYXJlbnRJbmRleCA9IHRoaXMuI3BhcmVudCA/IHRoaXMuI3BhcmVudC4jcGFydHMubGVuZ3RoIDogMDtcbiAgICB9XG4gICAgZ2V0IGhhc01hZ2ljKCkge1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgaWYgKHRoaXMuI2hhc01hZ2ljICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy4jaGFzTWFnaWM7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIGZvciAoY29uc3QgcCBvZiB0aGlzLiNwYXJ0cykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBwID09PSAnc3RyaW5nJylcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGlmIChwLnR5cGUgfHwgcC5oYXNNYWdpYylcbiAgICAgICAgICAgICAgICByZXR1cm4gKHRoaXMuI2hhc01hZ2ljID0gdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbm90ZTogd2lsbCBiZSB1bmRlZmluZWQgdW50aWwgd2UgZ2VuZXJhdGUgdGhlIHJlZ2V4cCBzcmMgYW5kIGZpbmQgb3V0XG4gICAgICAgIHJldHVybiB0aGlzLiNoYXNNYWdpYztcbiAgICB9XG4gICAgLy8gcmVjb25zdHJ1Y3RzIHRoZSBwYXR0ZXJuXG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIGlmICh0aGlzLiN0b1N0cmluZyAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuI3RvU3RyaW5nO1xuICAgICAgICBpZiAoIXRoaXMudHlwZSkge1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLiN0b1N0cmluZyA9IHRoaXMuI3BhcnRzLm1hcChwID0+IFN0cmluZyhwKSkuam9pbignJykpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLiN0b1N0cmluZyA9XG4gICAgICAgICAgICAgICAgdGhpcy50eXBlICsgJygnICsgdGhpcy4jcGFydHMubWFwKHAgPT4gU3RyaW5nKHApKS5qb2luKCd8JykgKyAnKScpO1xuICAgICAgICB9XG4gICAgfVxuICAgICNmaWxsTmVncygpIHtcbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIGlmICh0aGlzICE9PSB0aGlzLiNyb290KVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzaG91bGQgb25seSBjYWxsIG9uIHJvb3QnKTtcbiAgICAgICAgaWYgKHRoaXMuI2ZpbGxlZE5lZ3MpXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgLy8gY2FsbCB0b1N0cmluZygpIG9uY2UgdG8gZmlsbCB0aGlzIG91dFxuICAgICAgICB0aGlzLnRvU3RyaW5nKCk7XG4gICAgICAgIHRoaXMuI2ZpbGxlZE5lZ3MgPSB0cnVlO1xuICAgICAgICBsZXQgbjtcbiAgICAgICAgd2hpbGUgKChuID0gdGhpcy4jbmVncy5wb3AoKSkpIHtcbiAgICAgICAgICAgIGlmIChuLnR5cGUgIT09ICchJylcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIC8vIHdhbGsgdXAgdGhlIHRyZWUsIGFwcGVuZGluZyBldmVydGhpbmcgdGhhdCBjb21lcyBBRlRFUiBwYXJlbnRJbmRleFxuICAgICAgICAgICAgbGV0IHAgPSBuO1xuICAgICAgICAgICAgbGV0IHBwID0gcC4jcGFyZW50O1xuICAgICAgICAgICAgd2hpbGUgKHBwKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IHAuI3BhcmVudEluZGV4ICsgMTsgIXBwLnR5cGUgJiYgaSA8IHBwLiNwYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHBhcnQgb2Ygbi4jcGFydHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwYXJ0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc3RyaW5nIHBhcnQgaW4gZXh0Z2xvYiBBU1Q/PycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnQuY29weUluKHBwLiNwYXJ0c1tpXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcCA9IHBwO1xuICAgICAgICAgICAgICAgIHBwID0gcC4jcGFyZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBwdXNoKC4uLnBhcnRzKSB7XG4gICAgICAgIGZvciAoY29uc3QgcCBvZiBwYXJ0cykge1xuICAgICAgICAgICAgaWYgKHAgPT09ICcnKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICBpZiAodHlwZW9mIHAgIT09ICdzdHJpbmcnICYmICEocCBpbnN0YW5jZW9mIEFTVCAmJiBwLiNwYXJlbnQgPT09IHRoaXMpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHBhcnQ6ICcgKyBwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICB0aGlzLiNwYXJ0cy5wdXNoKHApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRvSlNPTigpIHtcbiAgICAgICAgY29uc3QgcmV0ID0gdGhpcy50eXBlID09PSBudWxsXG4gICAgICAgICAgICA/IHRoaXMuI3BhcnRzLnNsaWNlKCkubWFwKHAgPT4gKHR5cGVvZiBwID09PSAnc3RyaW5nJyA/IHAgOiBwLnRvSlNPTigpKSlcbiAgICAgICAgICAgIDogW3RoaXMudHlwZSwgLi4udGhpcy4jcGFydHMubWFwKHAgPT4gcC50b0pTT04oKSldO1xuICAgICAgICBpZiAodGhpcy5pc1N0YXJ0KCkgJiYgIXRoaXMudHlwZSlcbiAgICAgICAgICAgIHJldC51bnNoaWZ0KFtdKTtcbiAgICAgICAgaWYgKHRoaXMuaXNFbmQoKSAmJlxuICAgICAgICAgICAgKHRoaXMgPT09IHRoaXMuI3Jvb3QgfHxcbiAgICAgICAgICAgICAgICAodGhpcy4jcm9vdC4jZmlsbGVkTmVncyAmJiB0aGlzLiNwYXJlbnQ/LnR5cGUgPT09ICchJykpKSB7XG4gICAgICAgICAgICByZXQucHVzaCh7fSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gICAgaXNTdGFydCgpIHtcbiAgICAgICAgaWYgKHRoaXMuI3Jvb3QgPT09IHRoaXMpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgLy8gaWYgKHRoaXMudHlwZSkgcmV0dXJuICEhdGhpcy4jcGFyZW50Py5pc1N0YXJ0KClcbiAgICAgICAgaWYgKCF0aGlzLiNwYXJlbnQ/LmlzU3RhcnQoKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuI3BhcmVudEluZGV4ID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIC8vIGlmIGV2ZXJ5dGhpbmcgQUhFQUQgb2YgdGhpcyBpcyBhIG5lZ2F0aW9uLCB0aGVuIGl0J3Mgc3RpbGwgdGhlIFwic3RhcnRcIlxuICAgICAgICBjb25zdCBwID0gdGhpcy4jcGFyZW50O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuI3BhcmVudEluZGV4OyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHBwID0gcC4jcGFydHNbaV07XG4gICAgICAgICAgICBpZiAoIShwcCBpbnN0YW5jZW9mIEFTVCAmJiBwcC50eXBlID09PSAnIScpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpc0VuZCgpIHtcbiAgICAgICAgaWYgKHRoaXMuI3Jvb3QgPT09IHRoaXMpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMuI3BhcmVudD8udHlwZSA9PT0gJyEnKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmICghdGhpcy4jcGFyZW50Py5pc0VuZCgpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoIXRoaXMudHlwZSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiNwYXJlbnQ/LmlzRW5kKCk7XG4gICAgICAgIC8vIGlmIG5vdCByb290LCBpdCdsbCBhbHdheXMgaGF2ZSBhIHBhcmVudFxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgY29uc3QgcGwgPSB0aGlzLiNwYXJlbnQgPyB0aGlzLiNwYXJlbnQuI3BhcnRzLmxlbmd0aCA6IDA7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIHJldHVybiB0aGlzLiNwYXJlbnRJbmRleCA9PT0gcGwgLSAxO1xuICAgIH1cbiAgICBjb3B5SW4ocGFydCkge1xuICAgICAgICBpZiAodHlwZW9mIHBhcnQgPT09ICdzdHJpbmcnKVxuICAgICAgICAgICAgdGhpcy5wdXNoKHBhcnQpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzLnB1c2gocGFydC5jbG9uZSh0aGlzKSk7XG4gICAgfVxuICAgIGNsb25lKHBhcmVudCkge1xuICAgICAgICBjb25zdCBjID0gbmV3IEFTVCh0aGlzLnR5cGUsIHBhcmVudCk7XG4gICAgICAgIGZvciAoY29uc3QgcCBvZiB0aGlzLiNwYXJ0cykge1xuICAgICAgICAgICAgYy5jb3B5SW4ocCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGM7XG4gICAgfVxuICAgIHN0YXRpYyAjcGFyc2VBU1Qoc3RyLCBhc3QsIHBvcywgb3B0KSB7XG4gICAgICAgIGxldCBlc2NhcGluZyA9IGZhbHNlO1xuICAgICAgICBsZXQgaW5CcmFjZSA9IGZhbHNlO1xuICAgICAgICBsZXQgYnJhY2VTdGFydCA9IC0xO1xuICAgICAgICBsZXQgYnJhY2VOZWcgPSBmYWxzZTtcbiAgICAgICAgaWYgKGFzdC50eXBlID09PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBvdXRzaWRlIG9mIGEgZXh0Z2xvYiwgYXBwZW5kIHVudGlsIHdlIGZpbmQgYSBzdGFydFxuICAgICAgICAgICAgbGV0IGkgPSBwb3M7XG4gICAgICAgICAgICBsZXQgYWNjID0gJyc7XG4gICAgICAgICAgICB3aGlsZSAoaSA8IHN0ci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjID0gc3RyLmNoYXJBdChpKyspO1xuICAgICAgICAgICAgICAgIC8vIHN0aWxsIGFjY3VtdWxhdGUgZXNjYXBlcyBhdCB0aGlzIHBvaW50LCBidXQgd2UgZG8gaWdub3JlXG4gICAgICAgICAgICAgICAgLy8gc3RhcnRzIHRoYXQgYXJlIGVzY2FwZWRcbiAgICAgICAgICAgICAgICBpZiAoZXNjYXBpbmcgfHwgYyA9PT0gJ1xcXFwnKSB7XG4gICAgICAgICAgICAgICAgICAgIGVzY2FwaW5nID0gIWVzY2FwaW5nO1xuICAgICAgICAgICAgICAgICAgICBhY2MgKz0gYztcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpbkJyYWNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpID09PSBicmFjZVN0YXJ0ICsgMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT09ICdeJyB8fCBjID09PSAnIScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmFjZU5lZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYyA9PT0gJ10nICYmICEoaSA9PT0gYnJhY2VTdGFydCArIDIgJiYgYnJhY2VOZWcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbkJyYWNlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYWNjICs9IGM7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjID09PSAnWycpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5CcmFjZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyYWNlU3RhcnQgPSBpO1xuICAgICAgICAgICAgICAgICAgICBicmFjZU5lZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBhY2MgKz0gYztcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghb3B0Lm5vZXh0ICYmIGlzRXh0Z2xvYlR5cGUoYykgJiYgc3RyLmNoYXJBdChpKSA9PT0gJygnKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzdC5wdXNoKGFjYyk7XG4gICAgICAgICAgICAgICAgICAgIGFjYyA9ICcnO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBleHQgPSBuZXcgQVNUKGMsIGFzdCk7XG4gICAgICAgICAgICAgICAgICAgIGkgPSBBU1QuI3BhcnNlQVNUKHN0ciwgZXh0LCBpLCBvcHQpO1xuICAgICAgICAgICAgICAgICAgICBhc3QucHVzaChleHQpO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYWNjICs9IGM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhc3QucHVzaChhY2MpO1xuICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gc29tZSBraW5kIG9mIGV4dGdsb2IsIHBvcyBpcyBhdCB0aGUgKFxuICAgICAgICAvLyBmaW5kIHRoZSBuZXh0IHwgb3IgKVxuICAgICAgICBsZXQgaSA9IHBvcyArIDE7XG4gICAgICAgIGxldCBwYXJ0ID0gbmV3IEFTVChudWxsLCBhc3QpO1xuICAgICAgICBjb25zdCBwYXJ0cyA9IFtdO1xuICAgICAgICBsZXQgYWNjID0gJyc7XG4gICAgICAgIHdoaWxlIChpIDwgc3RyLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgYyA9IHN0ci5jaGFyQXQoaSsrKTtcbiAgICAgICAgICAgIC8vIHN0aWxsIGFjY3VtdWxhdGUgZXNjYXBlcyBhdCB0aGlzIHBvaW50LCBidXQgd2UgZG8gaWdub3JlXG4gICAgICAgICAgICAvLyBzdGFydHMgdGhhdCBhcmUgZXNjYXBlZFxuICAgICAgICAgICAgaWYgKGVzY2FwaW5nIHx8IGMgPT09ICdcXFxcJykge1xuICAgICAgICAgICAgICAgIGVzY2FwaW5nID0gIWVzY2FwaW5nO1xuICAgICAgICAgICAgICAgIGFjYyArPSBjO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGluQnJhY2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoaSA9PT0gYnJhY2VTdGFydCArIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT09ICdeJyB8fCBjID09PSAnIScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyYWNlTmVnID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjID09PSAnXScgJiYgIShpID09PSBicmFjZVN0YXJ0ICsgMiAmJiBicmFjZU5lZykpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5CcmFjZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhY2MgKz0gYztcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGMgPT09ICdbJykge1xuICAgICAgICAgICAgICAgIGluQnJhY2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyYWNlU3RhcnQgPSBpO1xuICAgICAgICAgICAgICAgIGJyYWNlTmVnID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgYWNjICs9IGM7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNFeHRnbG9iVHlwZShjKSAmJiBzdHIuY2hhckF0KGkpID09PSAnKCcpIHtcbiAgICAgICAgICAgICAgICBwYXJ0LnB1c2goYWNjKTtcbiAgICAgICAgICAgICAgICBhY2MgPSAnJztcbiAgICAgICAgICAgICAgICBjb25zdCBleHQgPSBuZXcgQVNUKGMsIHBhcnQpO1xuICAgICAgICAgICAgICAgIHBhcnQucHVzaChleHQpO1xuICAgICAgICAgICAgICAgIGkgPSBBU1QuI3BhcnNlQVNUKHN0ciwgZXh0LCBpLCBvcHQpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGMgPT09ICd8Jykge1xuICAgICAgICAgICAgICAgIHBhcnQucHVzaChhY2MpO1xuICAgICAgICAgICAgICAgIGFjYyA9ICcnO1xuICAgICAgICAgICAgICAgIHBhcnRzLnB1c2gocGFydCk7XG4gICAgICAgICAgICAgICAgcGFydCA9IG5ldyBBU1QobnVsbCwgYXN0KTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjID09PSAnKScpIHtcbiAgICAgICAgICAgICAgICBpZiAoYWNjID09PSAnJyAmJiBhc3QuI3BhcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBhc3QuI2VtcHR5RXh0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcGFydC5wdXNoKGFjYyk7XG4gICAgICAgICAgICAgICAgYWNjID0gJyc7XG4gICAgICAgICAgICAgICAgYXN0LnB1c2goLi4ucGFydHMsIHBhcnQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWNjICs9IGM7XG4gICAgICAgIH1cbiAgICAgICAgLy8gdW5maW5pc2hlZCBleHRnbG9iXG4gICAgICAgIC8vIGlmIHdlIGdvdCBoZXJlLCBpdCB3YXMgYSBtYWxmb3JtZWQgZXh0Z2xvYiEgbm90IGFuIGV4dGdsb2IsIGJ1dFxuICAgICAgICAvLyBtYXliZSBzb21ldGhpbmcgZWxzZSBpbiB0aGVyZS5cbiAgICAgICAgYXN0LnR5cGUgPSBudWxsO1xuICAgICAgICBhc3QuI2hhc01hZ2ljID0gdW5kZWZpbmVkO1xuICAgICAgICBhc3QuI3BhcnRzID0gW3N0ci5zdWJzdHJpbmcocG9zIC0gMSldO1xuICAgICAgICByZXR1cm4gaTtcbiAgICB9XG4gICAgc3RhdGljIGZyb21HbG9iKHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCBhc3QgPSBuZXcgQVNUKG51bGwsIHVuZGVmaW5lZCwgb3B0aW9ucyk7XG4gICAgICAgIEFTVC4jcGFyc2VBU1QocGF0dGVybiwgYXN0LCAwLCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIGFzdDtcbiAgICB9XG4gICAgLy8gcmV0dXJucyB0aGUgcmVndWxhciBleHByZXNzaW9uIGlmIHRoZXJlJ3MgbWFnaWMsIG9yIHRoZSB1bmVzY2FwZWRcbiAgICAvLyBzdHJpbmcgaWYgbm90LlxuICAgIHRvTU1QYXR0ZXJuKCkge1xuICAgICAgICAvLyBzaG91bGQgb25seSBiZSBjYWxsZWQgb24gcm9vdFxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgaWYgKHRoaXMgIT09IHRoaXMuI3Jvb3QpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy4jcm9vdC50b01NUGF0dGVybigpO1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICBjb25zdCBnbG9iID0gdGhpcy50b1N0cmluZygpO1xuICAgICAgICBjb25zdCBbcmUsIGJvZHksIGhhc01hZ2ljLCB1ZmxhZ10gPSB0aGlzLnRvUmVnRXhwU291cmNlKCk7XG4gICAgICAgIC8vIGlmIHdlJ3JlIGluIG5vY2FzZSBtb2RlLCBhbmQgbm90IG5vY2FzZU1hZ2ljT25seSwgdGhlbiB3ZSBkb1xuICAgICAgICAvLyBzdGlsbCBuZWVkIGEgcmVndWxhciBleHByZXNzaW9uIGlmIHdlIGhhdmUgdG8gY2FzZS1pbnNlbnNpdGl2ZWx5XG4gICAgICAgIC8vIG1hdGNoIGNhcGl0YWwvbG93ZXJjYXNlIGNoYXJhY3RlcnMuXG4gICAgICAgIGNvbnN0IGFueU1hZ2ljID0gaGFzTWFnaWMgfHxcbiAgICAgICAgICAgIHRoaXMuI2hhc01hZ2ljIHx8XG4gICAgICAgICAgICAodGhpcy4jb3B0aW9ucy5ub2Nhc2UgJiZcbiAgICAgICAgICAgICAgICAhdGhpcy4jb3B0aW9ucy5ub2Nhc2VNYWdpY09ubHkgJiZcbiAgICAgICAgICAgICAgICBnbG9iLnRvVXBwZXJDYXNlKCkgIT09IGdsb2IudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIGlmICghYW55TWFnaWMpIHtcbiAgICAgICAgICAgIHJldHVybiBib2R5O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZsYWdzID0gKHRoaXMuI29wdGlvbnMubm9jYXNlID8gJ2knIDogJycpICsgKHVmbGFnID8gJ3UnIDogJycpO1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgUmVnRXhwKGBeJHtyZX0kYCwgZmxhZ3MpLCB7XG4gICAgICAgICAgICBfc3JjOiByZSxcbiAgICAgICAgICAgIF9nbG9iOiBnbG9iLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNvcHRpb25zO1xuICAgIH1cbiAgICAvLyByZXR1cm5zIHRoZSBzdHJpbmcgbWF0Y2gsIHRoZSByZWdleHAgc291cmNlLCB3aGV0aGVyIHRoZXJlJ3MgbWFnaWNcbiAgICAvLyBpbiB0aGUgcmVnZXhwIChzbyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBpcyByZXF1aXJlZCkgYW5kIHdoZXRoZXIgb3JcbiAgICAvLyBub3QgdGhlIHVmbGFnIGlzIG5lZWRlZCBmb3IgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiAoZm9yIHBvc2l4IGNsYXNzZXMpXG4gICAgLy8gVE9ETzogaW5zdGVhZCBvZiBpbmplY3RpbmcgdGhlIHN0YXJ0L2VuZCBhdCB0aGlzIHBvaW50LCBqdXN0IHJldHVyblxuICAgIC8vIHRoZSBCT0RZIG9mIHRoZSByZWdleHAsIGFsb25nIHdpdGggdGhlIHN0YXJ0L2VuZCBwb3J0aW9ucyBzdWl0YWJsZVxuICAgIC8vIGZvciBiaW5kaW5nIHRoZSBzdGFydC9lbmQgaW4gZWl0aGVyIGEgam9pbmVkIGZ1bGwtcGF0aCBtYWtlUmUgY29udGV4dFxuICAgIC8vICh3aGVyZSB3ZSBiaW5kIHRvIChefC8pLCBvciBhIHN0YW5kYWxvbmUgbWF0Y2hQYXJ0IGNvbnRleHQgKHdoZXJlXG4gICAgLy8gd2UgYmluZCB0byBeLCBhbmQgbm90IC8pLiAgT3RoZXJ3aXNlIHNsYXNoZXMgZ2V0IGR1cGVkIVxuICAgIC8vXG4gICAgLy8gSW4gcGFydC1tYXRjaGluZyBtb2RlLCB0aGUgc3RhcnQgaXM6XG4gICAgLy8gLSBpZiBub3QgaXNTdGFydDogbm90aGluZ1xuICAgIC8vIC0gaWYgdHJhdmVyc2FsIHBvc3NpYmxlLCBidXQgbm90IGFsbG93ZWQ6IF4oPyFcXC5cXC4/JClcbiAgICAvLyAtIGlmIGRvdHMgYWxsb3dlZCBvciBub3QgcG9zc2libGU6IF5cbiAgICAvLyAtIGlmIGRvdHMgcG9zc2libGUgYW5kIG5vdCBhbGxvd2VkOiBeKD8hXFwuKVxuICAgIC8vIGVuZCBpczpcbiAgICAvLyAtIGlmIG5vdCBpc0VuZCgpOiBub3RoaW5nXG4gICAgLy8gLSBlbHNlOiAkXG4gICAgLy9cbiAgICAvLyBJbiBmdWxsLXBhdGggbWF0Y2hpbmcgbW9kZSwgd2UgcHV0IHRoZSBzbGFzaCBhdCB0aGUgU1RBUlQgb2YgdGhlXG4gICAgLy8gcGF0dGVybiwgc28gc3RhcnQgaXM6XG4gICAgLy8gLSBpZiBmaXJzdCBwYXR0ZXJuOiBzYW1lIGFzIHBhcnQtbWF0Y2hpbmcgbW9kZVxuICAgIC8vIC0gaWYgbm90IGlzU3RhcnQoKTogbm90aGluZ1xuICAgIC8vIC0gaWYgdHJhdmVyc2FsIHBvc3NpYmxlLCBidXQgbm90IGFsbG93ZWQ6IC8oPyFcXC5cXC4/KD86JHwvKSlcbiAgICAvLyAtIGlmIGRvdHMgYWxsb3dlZCBvciBub3QgcG9zc2libGU6IC9cbiAgICAvLyAtIGlmIGRvdHMgcG9zc2libGUgYW5kIG5vdCBhbGxvd2VkOiAvKD8hXFwuKVxuICAgIC8vIGVuZCBpczpcbiAgICAvLyAtIGlmIGxhc3QgcGF0dGVybiwgc2FtZSBhcyBwYXJ0LW1hdGNoaW5nIG1vZGVcbiAgICAvLyAtIGVsc2Ugbm90aGluZ1xuICAgIC8vXG4gICAgLy8gQWx3YXlzIHB1dCB0aGUgKD86JHwvKSBvbiBuZWdhdGVkIHRhaWxzLCB0aG91Z2gsIGJlY2F1c2UgdGhhdCBoYXMgdG8gYmVcbiAgICAvLyB0aGVyZSB0byBiaW5kIHRoZSBlbmQgb2YgdGhlIG5lZ2F0ZWQgcGF0dGVybiBwb3J0aW9uLCBhbmQgaXQncyBlYXNpZXIgdG9cbiAgICAvLyBqdXN0IHN0aWNrIGl0IGluIG5vdyByYXRoZXIgdGhhbiB0cnkgdG8gaW5qZWN0IGl0IGxhdGVyIGluIHRoZSBtaWRkbGUgb2ZcbiAgICAvLyB0aGUgcGF0dGVybi5cbiAgICAvL1xuICAgIC8vIFdlIGNhbiBqdXN0IGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgZW5kLCBhbmQgbGVhdmUgaXQgdXAgdG8gdGhlIGNhbGxlclxuICAgIC8vIHRvIGtub3cgd2hldGhlciBpdCdzIGdvaW5nIHRvIGJlIHVzZWQgam9pbmVkIG9yIGluIHBhcnRzLlxuICAgIC8vIEFuZCwgaWYgdGhlIHN0YXJ0IGlzIGFkanVzdGVkIHNsaWdodGx5LCBjYW4gZG8gdGhlIHNhbWUgdGhlcmU6XG4gICAgLy8gLSBpZiBub3QgaXNTdGFydDogbm90aGluZ1xuICAgIC8vIC0gaWYgdHJhdmVyc2FsIHBvc3NpYmxlLCBidXQgbm90IGFsbG93ZWQ6ICg/Oi98XikoPyFcXC5cXC4/JClcbiAgICAvLyAtIGlmIGRvdHMgYWxsb3dlZCBvciBub3QgcG9zc2libGU6ICg/Oi98XilcbiAgICAvLyAtIGlmIGRvdHMgcG9zc2libGUgYW5kIG5vdCBhbGxvd2VkOiAoPzovfF4pKD8hXFwuKVxuICAgIC8vXG4gICAgLy8gQnV0IGl0J3MgYmV0dGVyIHRvIGhhdmUgYSBzaW1wbGVyIGJpbmRpbmcgd2l0aG91dCBhIGNvbmRpdGlvbmFsLCBmb3JcbiAgICAvLyBwZXJmb3JtYW5jZSwgc28gcHJvYmFibHkgYmV0dGVyIHRvIHJldHVybiBib3RoIHN0YXJ0IG9wdGlvbnMuXG4gICAgLy9cbiAgICAvLyBUaGVuIHRoZSBjYWxsZXIganVzdCBpZ25vcmVzIHRoZSBlbmQgaWYgaXQncyBub3QgdGhlIGZpcnN0IHBhdHRlcm4sXG4gICAgLy8gYW5kIHRoZSBzdGFydCBhbHdheXMgZ2V0cyBhcHBsaWVkLlxuICAgIC8vXG4gICAgLy8gQnV0IHRoYXQncyBhbHdheXMgZ29pbmcgdG8gYmUgJCBpZiBpdCdzIHRoZSBlbmRpbmcgcGF0dGVybiwgb3Igbm90aGluZyxcbiAgICAvLyBzbyB0aGUgY2FsbGVyIGNhbiBqdXN0IGF0dGFjaCAkIGF0IHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4gd2hlbiBidWlsZGluZy5cbiAgICAvL1xuICAgIC8vIFNvIHRoZSB0b2RvIGlzOlxuICAgIC8vIC0gYmV0dGVyIGRldGVjdCB3aGF0IGtpbmQgb2Ygc3RhcnQgaXMgbmVlZGVkXG4gICAgLy8gLSByZXR1cm4gYm90aCBmbGF2b3JzIG9mIHN0YXJ0aW5nIHBhdHRlcm5cbiAgICAvLyAtIGF0dGFjaCAkIGF0IHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4gd2hlbiBjcmVhdGluZyB0aGUgYWN0dWFsIFJlZ0V4cFxuICAgIC8vXG4gICAgLy8gQWgsIGJ1dCB3YWl0LCBubywgdGhhdCBhbGwgb25seSBhcHBsaWVzIHRvIHRoZSByb290IHdoZW4gdGhlIGZpcnN0IHBhdHRlcm5cbiAgICAvLyBpcyBub3QgYW4gZXh0Z2xvYi4gSWYgdGhlIGZpcnN0IHBhdHRlcm4gSVMgYW4gZXh0Z2xvYiwgdGhlbiB3ZSBuZWVkIGFsbFxuICAgIC8vIHRoYXQgZG90IHByZXZlbnRpb24gYml6IHRvIGxpdmUgaW4gdGhlIGV4dGdsb2IgcG9ydGlvbnMsIGJlY2F1c2UgZWdcbiAgICAvLyArKCp8LngqKSBjYW4gbWF0Y2ggLnh5IGJ1dCBub3QgLnl4LlxuICAgIC8vXG4gICAgLy8gU28sIHJldHVybiB0aGUgdHdvIGZsYXZvcnMgaWYgaXQncyAjcm9vdCBhbmQgdGhlIGZpcnN0IGNoaWxkIGlzIG5vdCBhblxuICAgIC8vIEFTVCwgb3RoZXJ3aXNlIGxlYXZlIGl0IHRvIHRoZSBjaGlsZCBBU1QgdG8gaGFuZGxlIGl0LCBhbmQgdGhlcmUsXG4gICAgLy8gdXNlIHRoZSAoPzpefC8pIHN0eWxlIG9mIHN0YXJ0IGJpbmRpbmcuXG4gICAgLy9cbiAgICAvLyBFdmVuIHNpbXBsaWZpZWQgZnVydGhlcjpcbiAgICAvLyAtIFNpbmNlIHRoZSBzdGFydCBmb3IgYSBqb2luIGlzIGVnIC8oPyFcXC4pIGFuZCB0aGUgc3RhcnQgZm9yIGEgcGFydFxuICAgIC8vIGlzIF4oPyFcXC4pLCB3ZSBjYW4ganVzdCBwcmVwZW5kICg/IVxcLikgdG8gdGhlIHBhdHRlcm4gKGVpdGhlciByb290XG4gICAgLy8gb3Igc3RhcnQgb3Igd2hhdGV2ZXIpIGFuZCBwcmVwZW5kIF4gb3IgLyBhdCB0aGUgUmVnZXhwIGNvbnN0cnVjdGlvbi5cbiAgICB0b1JlZ0V4cFNvdXJjZShhbGxvd0RvdCkge1xuICAgICAgICBjb25zdCBkb3QgPSBhbGxvd0RvdCA/PyAhIXRoaXMuI29wdGlvbnMuZG90O1xuICAgICAgICBpZiAodGhpcy4jcm9vdCA9PT0gdGhpcylcbiAgICAgICAgICAgIHRoaXMuI2ZpbGxOZWdzKCk7XG4gICAgICAgIGlmICghdGhpcy50eXBlKSB7XG4gICAgICAgICAgICBjb25zdCBub0VtcHR5ID0gdGhpcy5pc1N0YXJ0KCkgJiYgdGhpcy5pc0VuZCgpO1xuICAgICAgICAgICAgY29uc3Qgc3JjID0gdGhpcy4jcGFydHNcbiAgICAgICAgICAgICAgICAubWFwKHAgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IFtyZSwgXywgaGFzTWFnaWMsIHVmbGFnXSA9IHR5cGVvZiBwID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgICA/IEFTVC4jcGFyc2VHbG9iKHAsIHRoaXMuI2hhc01hZ2ljLCBub0VtcHR5KVxuICAgICAgICAgICAgICAgICAgICA6IHAudG9SZWdFeHBTb3VyY2UoYWxsb3dEb3QpO1xuICAgICAgICAgICAgICAgIHRoaXMuI2hhc01hZ2ljID0gdGhpcy4jaGFzTWFnaWMgfHwgaGFzTWFnaWM7XG4gICAgICAgICAgICAgICAgdGhpcy4jdWZsYWcgPSB0aGlzLiN1ZmxhZyB8fCB1ZmxhZztcbiAgICAgICAgICAgICAgICByZXR1cm4gcmU7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5qb2luKCcnKTtcbiAgICAgICAgICAgIGxldCBzdGFydCA9ICcnO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNTdGFydCgpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLiNwYXJ0c1swXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBpcyB0aGUgc3RyaW5nIHRoYXQgd2lsbCBtYXRjaCB0aGUgc3RhcnQgb2YgdGhlIHBhdHRlcm4sXG4gICAgICAgICAgICAgICAgICAgIC8vIHNvIHdlIG5lZWQgdG8gcHJvdGVjdCBhZ2FpbnN0IGRvdHMgYW5kIHN1Y2guXG4gICAgICAgICAgICAgICAgICAgIC8vICcuJyBhbmQgJy4uJyBjYW5ub3QgbWF0Y2ggdW5sZXNzIHRoZSBwYXR0ZXJuIGlzIHRoYXQgZXhhY3RseSxcbiAgICAgICAgICAgICAgICAgICAgLy8gZXZlbiBpZiBpdCBzdGFydHMgd2l0aCAuIG9yIGRvdDp0cnVlIGlzIHNldC5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZG90VHJhdkFsbG93ZWQgPSB0aGlzLiNwYXJ0cy5sZW5ndGggPT09IDEgJiYganVzdERvdHMuaGFzKHRoaXMuI3BhcnRzWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFkb3RUcmF2QWxsb3dlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXBzID0gYWRkUGF0dGVyblN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgd2UgaGF2ZSBhIHBvc3NpYmlsaXR5IG9mIG1hdGNoaW5nIC4gb3IgLi4sXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmQgcHJldmVudCB0aGF0LlxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmVlZE5vVHJhdiA9IFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZG90cyBhcmUgYWxsb3dlZCwgYW5kIHRoZSBwYXR0ZXJuIHN0YXJ0cyB3aXRoIFsgb3IgLlxuICAgICAgICAgICAgICAgICAgICAgICAgKGRvdCAmJiBhcHMuaGFzKHNyYy5jaGFyQXQoMCkpKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBwYXR0ZXJuIHN0YXJ0cyB3aXRoIFxcLiwgYW5kIHRoZW4gWyBvciAuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNyYy5zdGFydHNXaXRoKCdcXFxcLicpICYmIGFwcy5oYXMoc3JjLmNoYXJBdCgyKSkpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHBhdHRlcm4gc3RhcnRzIHdpdGggXFwuXFwuLCBhbmQgdGhlbiBbIG9yIC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3JjLnN0YXJ0c1dpdGgoJ1xcXFwuXFxcXC4nKSAmJiBhcHMuaGFzKHNyYy5jaGFyQXQoNCkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vIG5lZWQgdG8gcHJldmVudCBkb3RzIGlmIGl0IGNhbid0IG1hdGNoIGEgZG90LCBvciBpZiBhXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzdWItcGF0dGVybiB3aWxsIGJlIHByZXZlbnRpbmcgaXQgYW55d2F5LlxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmVlZE5vRG90ID0gIWRvdCAmJiAhYWxsb3dEb3QgJiYgYXBzLmhhcyhzcmMuY2hhckF0KDApKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gbmVlZE5vVHJhdiA/IHN0YXJ0Tm9UcmF2ZXJzYWwgOiBuZWVkTm9Eb3QgPyBzdGFydE5vRG90IDogJyc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBhcHBlbmQgdGhlIFwiZW5kIG9mIHBhdGggcG9ydGlvblwiIHBhdHRlcm4gdG8gbmVnYXRpb24gdGFpbHNcbiAgICAgICAgICAgIGxldCBlbmQgPSAnJztcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRW5kKCkgJiZcbiAgICAgICAgICAgICAgICB0aGlzLiNyb290LiNmaWxsZWROZWdzICYmXG4gICAgICAgICAgICAgICAgdGhpcy4jcGFyZW50Py50eXBlID09PSAnIScpIHtcbiAgICAgICAgICAgICAgICBlbmQgPSAnKD86JHxcXFxcLyknO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZmluYWwgPSBzdGFydCArIHNyYyArIGVuZDtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgZmluYWwsXG4gICAgICAgICAgICAgICAgKDAsIHVuZXNjYXBlX2pzXzEudW5lc2NhcGUpKHNyYyksXG4gICAgICAgICAgICAgICAgKHRoaXMuI2hhc01hZ2ljID0gISF0aGlzLiNoYXNNYWdpYyksXG4gICAgICAgICAgICAgICAgdGhpcy4jdWZsYWcsXG4gICAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICAgIC8vIFdlIG5lZWQgdG8gY2FsY3VsYXRlIHRoZSBib2R5ICp0d2ljZSogaWYgaXQncyBhIHJlcGVhdCBwYXR0ZXJuXG4gICAgICAgIC8vIGF0IHRoZSBzdGFydCwgb25jZSBpbiBub2RvdCBtb2RlLCB0aGVuIGFnYWluIGluIGRvdCBtb2RlLCBzbyBhXG4gICAgICAgIC8vIHBhdHRlcm4gbGlrZSAqKD8pIGNhbiBtYXRjaCAneC55J1xuICAgICAgICBjb25zdCByZXBlYXRlZCA9IHRoaXMudHlwZSA9PT0gJyonIHx8IHRoaXMudHlwZSA9PT0gJysnO1xuICAgICAgICAvLyBzb21lIGtpbmQgb2YgZXh0Z2xvYlxuICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMudHlwZSA9PT0gJyEnID8gJyg/Oig/ISg/OicgOiAnKD86JztcbiAgICAgICAgbGV0IGJvZHkgPSB0aGlzLiNwYXJ0c1RvUmVnRXhwKGRvdCk7XG4gICAgICAgIGlmICh0aGlzLmlzU3RhcnQoKSAmJiB0aGlzLmlzRW5kKCkgJiYgIWJvZHkgJiYgdGhpcy50eXBlICE9PSAnIScpIHtcbiAgICAgICAgICAgIC8vIGludmFsaWQgZXh0Z2xvYiwgaGFzIHRvIGF0IGxlYXN0IGJlICpzb21ldGhpbmcqIHByZXNlbnQsIGlmIGl0J3NcbiAgICAgICAgICAgIC8vIHRoZSBlbnRpcmUgcGF0aCBwb3J0aW9uLlxuICAgICAgICAgICAgY29uc3QgcyA9IHRoaXMudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIHRoaXMuI3BhcnRzID0gW3NdO1xuICAgICAgICAgICAgdGhpcy50eXBlID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuI2hhc01hZ2ljID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgcmV0dXJuIFtzLCAoMCwgdW5lc2NhcGVfanNfMS51bmVzY2FwZSkodGhpcy50b1N0cmluZygpKSwgZmFsc2UsIGZhbHNlXTtcbiAgICAgICAgfVxuICAgICAgICAvLyBYWFggYWJzdHJhY3Qgb3V0IHRoaXMgbWFwIG1ldGhvZFxuICAgICAgICBsZXQgYm9keURvdEFsbG93ZWQgPSAhcmVwZWF0ZWQgfHwgYWxsb3dEb3QgfHwgZG90IHx8ICFzdGFydE5vRG90XG4gICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICA6IHRoaXMuI3BhcnRzVG9SZWdFeHAodHJ1ZSk7XG4gICAgICAgIGlmIChib2R5RG90QWxsb3dlZCA9PT0gYm9keSkge1xuICAgICAgICAgICAgYm9keURvdEFsbG93ZWQgPSAnJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoYm9keURvdEFsbG93ZWQpIHtcbiAgICAgICAgICAgIGJvZHkgPSBgKD86JHtib2R5fSkoPzoke2JvZHlEb3RBbGxvd2VkfSkqP2A7XG4gICAgICAgIH1cbiAgICAgICAgLy8gYW4gZW1wdHkgISgpIGlzIGV4YWN0bHkgZXF1aXZhbGVudCB0byBhIHN0YXJOb0VtcHR5XG4gICAgICAgIGxldCBmaW5hbCA9ICcnO1xuICAgICAgICBpZiAodGhpcy50eXBlID09PSAnIScgJiYgdGhpcy4jZW1wdHlFeHQpIHtcbiAgICAgICAgICAgIGZpbmFsID0gKHRoaXMuaXNTdGFydCgpICYmICFkb3QgPyBzdGFydE5vRG90IDogJycpICsgc3Rhck5vRW1wdHk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBjbG9zZSA9IHRoaXMudHlwZSA9PT0gJyEnXG4gICAgICAgICAgICAgICAgPyAvLyAhKCkgbXVzdCBtYXRjaCBzb21ldGhpbmcsYnV0ICEoeCkgY2FuIG1hdGNoICcnXG4gICAgICAgICAgICAgICAgICAgICcpKScgK1xuICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMuaXNTdGFydCgpICYmICFkb3QgJiYgIWFsbG93RG90ID8gc3RhcnROb0RvdCA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFyICtcbiAgICAgICAgICAgICAgICAgICAgICAgICcpJ1xuICAgICAgICAgICAgICAgIDogdGhpcy50eXBlID09PSAnQCdcbiAgICAgICAgICAgICAgICAgICAgPyAnKSdcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLnR5cGUgPT09ICc/J1xuICAgICAgICAgICAgICAgICAgICAgICAgPyAnKT8nXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMudHlwZSA9PT0gJysnICYmIGJvZHlEb3RBbGxvd2VkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnKSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMudHlwZSA9PT0gJyonICYmIGJvZHlEb3RBbGxvd2VkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gYCk/YFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGApJHt0aGlzLnR5cGV9YDtcbiAgICAgICAgICAgIGZpbmFsID0gc3RhcnQgKyBib2R5ICsgY2xvc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIGZpbmFsLFxuICAgICAgICAgICAgKDAsIHVuZXNjYXBlX2pzXzEudW5lc2NhcGUpKGJvZHkpLFxuICAgICAgICAgICAgKHRoaXMuI2hhc01hZ2ljID0gISF0aGlzLiNoYXNNYWdpYyksXG4gICAgICAgICAgICB0aGlzLiN1ZmxhZyxcbiAgICAgICAgXTtcbiAgICB9XG4gICAgI3BhcnRzVG9SZWdFeHAoZG90KSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNwYXJ0c1xuICAgICAgICAgICAgLm1hcChwID0+IHtcbiAgICAgICAgICAgIC8vIGV4dGdsb2IgQVNUcyBzaG91bGQgb25seSBjb250YWluIHBhcmVudCBBU1RzXG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgICAgIGlmICh0eXBlb2YgcCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N0cmluZyB0eXBlIGluIGV4dGdsb2IgYXN0Pz8nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICAvLyBjYW4gaWdub3JlIGhhc01hZ2ljLCBiZWNhdXNlIGV4dGdsb2JzIGFyZSBhbHJlYWR5IGFsd2F5cyBtYWdpY1xuICAgICAgICAgICAgY29uc3QgW3JlLCBfLCBfaGFzTWFnaWMsIHVmbGFnXSA9IHAudG9SZWdFeHBTb3VyY2UoZG90KTtcbiAgICAgICAgICAgIHRoaXMuI3VmbGFnID0gdGhpcy4jdWZsYWcgfHwgdWZsYWc7XG4gICAgICAgICAgICByZXR1cm4gcmU7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAuZmlsdGVyKHAgPT4gISh0aGlzLmlzU3RhcnQoKSAmJiB0aGlzLmlzRW5kKCkpIHx8ICEhcClcbiAgICAgICAgICAgIC5qb2luKCd8Jyk7XG4gICAgfVxuICAgIHN0YXRpYyAjcGFyc2VHbG9iKGdsb2IsIGhhc01hZ2ljLCBub0VtcHR5ID0gZmFsc2UpIHtcbiAgICAgICAgbGV0IGVzY2FwaW5nID0gZmFsc2U7XG4gICAgICAgIGxldCByZSA9ICcnO1xuICAgICAgICBsZXQgdWZsYWcgPSBmYWxzZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBnbG9iLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gZ2xvYi5jaGFyQXQoaSk7XG4gICAgICAgICAgICBpZiAoZXNjYXBpbmcpIHtcbiAgICAgICAgICAgICAgICBlc2NhcGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJlICs9IChyZVNwZWNpYWxzLmhhcyhjKSA/ICdcXFxcJyA6ICcnKSArIGM7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYyA9PT0gJ1xcXFwnKSB7XG4gICAgICAgICAgICAgICAgaWYgKGkgPT09IGdsb2IubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZSArPSAnXFxcXFxcXFwnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZXNjYXBpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjID09PSAnWycpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBbc3JjLCBuZWVkVWZsYWcsIGNvbnN1bWVkLCBtYWdpY10gPSAoMCwgYnJhY2VfZXhwcmVzc2lvbnNfanNfMS5wYXJzZUNsYXNzKShnbG9iLCBpKTtcbiAgICAgICAgICAgICAgICBpZiAoY29uc3VtZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmUgKz0gc3JjO1xuICAgICAgICAgICAgICAgICAgICB1ZmxhZyA9IHVmbGFnIHx8IG5lZWRVZmxhZztcbiAgICAgICAgICAgICAgICAgICAgaSArPSBjb25zdW1lZCAtIDE7XG4gICAgICAgICAgICAgICAgICAgIGhhc01hZ2ljID0gaGFzTWFnaWMgfHwgbWFnaWM7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjID09PSAnKicpIHtcbiAgICAgICAgICAgICAgICBpZiAobm9FbXB0eSAmJiBnbG9iID09PSAnKicpXG4gICAgICAgICAgICAgICAgICAgIHJlICs9IHN0YXJOb0VtcHR5O1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgcmUgKz0gc3RhcjtcbiAgICAgICAgICAgICAgICBoYXNNYWdpYyA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYyA9PT0gJz8nKSB7XG4gICAgICAgICAgICAgICAgcmUgKz0gcW1hcms7XG4gICAgICAgICAgICAgICAgaGFzTWFnaWMgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmUgKz0gcmVnRXhwRXNjYXBlKGMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbcmUsICgwLCB1bmVzY2FwZV9qc18xLnVuZXNjYXBlKShnbG9iKSwgISFoYXNNYWdpYywgdWZsYWddO1xuICAgIH1cbn1cbmV4cG9ydHMuQVNUID0gQVNUO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXN0LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmVzY2FwZSA9IHZvaWQgMDtcbi8qKlxuICogRXNjYXBlIGFsbCBtYWdpYyBjaGFyYWN0ZXJzIGluIGEgZ2xvYiBwYXR0ZXJuLlxuICpcbiAqIElmIHRoZSB7QGxpbmsgd2luZG93c1BhdGhzTm9Fc2NhcGUgfCBHbG9iT3B0aW9ucy53aW5kb3dzUGF0aHNOb0VzY2FwZX1cbiAqIG9wdGlvbiBpcyB1c2VkLCB0aGVuIGNoYXJhY3RlcnMgYXJlIGVzY2FwZWQgYnkgd3JhcHBpbmcgaW4gYFtdYCwgYmVjYXVzZVxuICogYSBtYWdpYyBjaGFyYWN0ZXIgd3JhcHBlZCBpbiBhIGNoYXJhY3RlciBjbGFzcyBjYW4gb25seSBiZSBzYXRpc2ZpZWQgYnlcbiAqIHRoYXQgZXhhY3QgY2hhcmFjdGVyLiAgSW4gdGhpcyBtb2RlLCBgXFxgIGlzIF9ub3RfIGVzY2FwZWQsIGJlY2F1c2UgaXQgaXNcbiAqIG5vdCBpbnRlcnByZXRlZCBhcyBhIG1hZ2ljIGNoYXJhY3RlciwgYnV0IGluc3RlYWQgYXMgYSBwYXRoIHNlcGFyYXRvci5cbiAqL1xuY29uc3QgZXNjYXBlID0gKHMsIHsgd2luZG93c1BhdGhzTm9Fc2NhcGUgPSBmYWxzZSwgfSA9IHt9KSA9PiB7XG4gICAgLy8gZG9uJ3QgbmVlZCB0byBlc2NhcGUgK0AhIGJlY2F1c2Ugd2UgZXNjYXBlIHRoZSBwYXJlbnNcbiAgICAvLyB0aGF0IG1ha2UgdGhvc2UgbWFnaWMsIGFuZCBlc2NhcGluZyAhIGFzIFshXSBpc24ndCB2YWxpZCxcbiAgICAvLyBiZWNhdXNlIFshXV0gaXMgYSB2YWxpZCBnbG9iIGNsYXNzIG1lYW5pbmcgbm90ICddJy5cbiAgICByZXR1cm4gd2luZG93c1BhdGhzTm9Fc2NhcGVcbiAgICAgICAgPyBzLnJlcGxhY2UoL1s/KigpW1xcXV0vZywgJ1skJl0nKVxuICAgICAgICA6IHMucmVwbGFjZSgvWz8qKClbXFxdXFxcXF0vZywgJ1xcXFwkJicpO1xufTtcbmV4cG9ydHMuZXNjYXBlID0gZXNjYXBlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXNjYXBlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnVuZXNjYXBlID0gZXhwb3J0cy5lc2NhcGUgPSBleHBvcnRzLkFTVCA9IGV4cG9ydHMuTWluaW1hdGNoID0gZXhwb3J0cy5tYXRjaCA9IGV4cG9ydHMubWFrZVJlID0gZXhwb3J0cy5icmFjZUV4cGFuZCA9IGV4cG9ydHMuZGVmYXVsdHMgPSBleHBvcnRzLmZpbHRlciA9IGV4cG9ydHMuR0xPQlNUQVIgPSBleHBvcnRzLnNlcCA9IGV4cG9ydHMubWluaW1hdGNoID0gdm9pZCAwO1xuY29uc3QgYnJhY2VfZXhwYW5zaW9uXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImJyYWNlLWV4cGFuc2lvblwiKSk7XG5jb25zdCBhc3NlcnRfdmFsaWRfcGF0dGVybl9qc18xID0gcmVxdWlyZShcIi4vYXNzZXJ0LXZhbGlkLXBhdHRlcm4uanNcIik7XG5jb25zdCBhc3RfanNfMSA9IHJlcXVpcmUoXCIuL2FzdC5qc1wiKTtcbmNvbnN0IGVzY2FwZV9qc18xID0gcmVxdWlyZShcIi4vZXNjYXBlLmpzXCIpO1xuY29uc3QgdW5lc2NhcGVfanNfMSA9IHJlcXVpcmUoXCIuL3VuZXNjYXBlLmpzXCIpO1xuY29uc3QgbWluaW1hdGNoID0gKHAsIHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkgPT4ge1xuICAgICgwLCBhc3NlcnRfdmFsaWRfcGF0dGVybl9qc18xLmFzc2VydFZhbGlkUGF0dGVybikocGF0dGVybik7XG4gICAgLy8gc2hvcnRjdXQ6IGNvbW1lbnRzIG1hdGNoIG5vdGhpbmcuXG4gICAgaWYgKCFvcHRpb25zLm5vY29tbWVudCAmJiBwYXR0ZXJuLmNoYXJBdCgwKSA9PT0gJyMnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBNaW5pbWF0Y2gocGF0dGVybiwgb3B0aW9ucykubWF0Y2gocCk7XG59O1xuZXhwb3J0cy5taW5pbWF0Y2ggPSBtaW5pbWF0Y2g7XG4vLyBPcHRpbWl6ZWQgY2hlY2tpbmcgZm9yIHRoZSBtb3N0IGNvbW1vbiBnbG9iIHBhdHRlcm5zLlxuY29uc3Qgc3RhckRvdEV4dFJFID0gL15cXCorKFteK0AhP1xcKlxcW1xcKF0qKSQvO1xuY29uc3Qgc3RhckRvdEV4dFRlc3QgPSAoZXh0KSA9PiAoZikgPT4gIWYuc3RhcnRzV2l0aCgnLicpICYmIGYuZW5kc1dpdGgoZXh0KTtcbmNvbnN0IHN0YXJEb3RFeHRUZXN0RG90ID0gKGV4dCkgPT4gKGYpID0+IGYuZW5kc1dpdGgoZXh0KTtcbmNvbnN0IHN0YXJEb3RFeHRUZXN0Tm9jYXNlID0gKGV4dCkgPT4ge1xuICAgIGV4dCA9IGV4dC50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiAoZikgPT4gIWYuc3RhcnRzV2l0aCgnLicpICYmIGYudG9Mb3dlckNhc2UoKS5lbmRzV2l0aChleHQpO1xufTtcbmNvbnN0IHN0YXJEb3RFeHRUZXN0Tm9jYXNlRG90ID0gKGV4dCkgPT4ge1xuICAgIGV4dCA9IGV4dC50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiAoZikgPT4gZi50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKGV4dCk7XG59O1xuY29uc3Qgc3RhckRvdFN0YXJSRSA9IC9eXFwqK1xcLlxcKiskLztcbmNvbnN0IHN0YXJEb3RTdGFyVGVzdCA9IChmKSA9PiAhZi5zdGFydHNXaXRoKCcuJykgJiYgZi5pbmNsdWRlcygnLicpO1xuY29uc3Qgc3RhckRvdFN0YXJUZXN0RG90ID0gKGYpID0+IGYgIT09ICcuJyAmJiBmICE9PSAnLi4nICYmIGYuaW5jbHVkZXMoJy4nKTtcbmNvbnN0IGRvdFN0YXJSRSA9IC9eXFwuXFwqKyQvO1xuY29uc3QgZG90U3RhclRlc3QgPSAoZikgPT4gZiAhPT0gJy4nICYmIGYgIT09ICcuLicgJiYgZi5zdGFydHNXaXRoKCcuJyk7XG5jb25zdCBzdGFyUkUgPSAvXlxcKiskLztcbmNvbnN0IHN0YXJUZXN0ID0gKGYpID0+IGYubGVuZ3RoICE9PSAwICYmICFmLnN0YXJ0c1dpdGgoJy4nKTtcbmNvbnN0IHN0YXJUZXN0RG90ID0gKGYpID0+IGYubGVuZ3RoICE9PSAwICYmIGYgIT09ICcuJyAmJiBmICE9PSAnLi4nO1xuY29uc3QgcW1hcmtzUkUgPSAvXlxcPysoW14rQCE/XFwqXFxbXFwoXSopPyQvO1xuY29uc3QgcW1hcmtzVGVzdE5vY2FzZSA9IChbJDAsIGV4dCA9ICcnXSkgPT4ge1xuICAgIGNvbnN0IG5vZXh0ID0gcW1hcmtzVGVzdE5vRXh0KFskMF0pO1xuICAgIGlmICghZXh0KVxuICAgICAgICByZXR1cm4gbm9leHQ7XG4gICAgZXh0ID0gZXh0LnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuIChmKSA9PiBub2V4dChmKSAmJiBmLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoZXh0KTtcbn07XG5jb25zdCBxbWFya3NUZXN0Tm9jYXNlRG90ID0gKFskMCwgZXh0ID0gJyddKSA9PiB7XG4gICAgY29uc3Qgbm9leHQgPSBxbWFya3NUZXN0Tm9FeHREb3QoWyQwXSk7XG4gICAgaWYgKCFleHQpXG4gICAgICAgIHJldHVybiBub2V4dDtcbiAgICBleHQgPSBleHQudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gKGYpID0+IG5vZXh0KGYpICYmIGYudG9Mb3dlckNhc2UoKS5lbmRzV2l0aChleHQpO1xufTtcbmNvbnN0IHFtYXJrc1Rlc3REb3QgPSAoWyQwLCBleHQgPSAnJ10pID0+IHtcbiAgICBjb25zdCBub2V4dCA9IHFtYXJrc1Rlc3ROb0V4dERvdChbJDBdKTtcbiAgICByZXR1cm4gIWV4dCA/IG5vZXh0IDogKGYpID0+IG5vZXh0KGYpICYmIGYuZW5kc1dpdGgoZXh0KTtcbn07XG5jb25zdCBxbWFya3NUZXN0ID0gKFskMCwgZXh0ID0gJyddKSA9PiB7XG4gICAgY29uc3Qgbm9leHQgPSBxbWFya3NUZXN0Tm9FeHQoWyQwXSk7XG4gICAgcmV0dXJuICFleHQgPyBub2V4dCA6IChmKSA9PiBub2V4dChmKSAmJiBmLmVuZHNXaXRoKGV4dCk7XG59O1xuY29uc3QgcW1hcmtzVGVzdE5vRXh0ID0gKFskMF0pID0+IHtcbiAgICBjb25zdCBsZW4gPSAkMC5sZW5ndGg7XG4gICAgcmV0dXJuIChmKSA9PiBmLmxlbmd0aCA9PT0gbGVuICYmICFmLnN0YXJ0c1dpdGgoJy4nKTtcbn07XG5jb25zdCBxbWFya3NUZXN0Tm9FeHREb3QgPSAoWyQwXSkgPT4ge1xuICAgIGNvbnN0IGxlbiA9ICQwLmxlbmd0aDtcbiAgICByZXR1cm4gKGYpID0+IGYubGVuZ3RoID09PSBsZW4gJiYgZiAhPT0gJy4nICYmIGYgIT09ICcuLic7XG59O1xuLyogYzggaWdub3JlIHN0YXJ0ICovXG5jb25zdCBkZWZhdWx0UGxhdGZvcm0gPSAodHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmIHByb2Nlc3NcbiAgICA/ICh0eXBlb2YgcHJvY2Vzcy5lbnYgPT09ICdvYmplY3QnICYmXG4gICAgICAgIHByb2Nlc3MuZW52ICYmXG4gICAgICAgIHByb2Nlc3MuZW52Ll9fTUlOSU1BVENIX1RFU1RJTkdfUExBVEZPUk1fXykgfHxcbiAgICAgICAgcHJvY2Vzcy5wbGF0Zm9ybVxuICAgIDogJ3Bvc2l4Jyk7XG5jb25zdCBwYXRoID0ge1xuICAgIHdpbjMyOiB7IHNlcDogJ1xcXFwnIH0sXG4gICAgcG9zaXg6IHsgc2VwOiAnLycgfSxcbn07XG4vKiBjOCBpZ25vcmUgc3RvcCAqL1xuZXhwb3J0cy5zZXAgPSBkZWZhdWx0UGxhdGZvcm0gPT09ICd3aW4zMicgPyBwYXRoLndpbjMyLnNlcCA6IHBhdGgucG9zaXguc2VwO1xuZXhwb3J0cy5taW5pbWF0Y2guc2VwID0gZXhwb3J0cy5zZXA7XG5leHBvcnRzLkdMT0JTVEFSID0gU3ltYm9sKCdnbG9ic3RhciAqKicpO1xuZXhwb3J0cy5taW5pbWF0Y2guR0xPQlNUQVIgPSBleHBvcnRzLkdMT0JTVEFSO1xuLy8gYW55IHNpbmdsZSB0aGluZyBvdGhlciB0aGFuIC9cbi8vIGRvbid0IG5lZWQgdG8gZXNjYXBlIC8gd2hlbiB1c2luZyBuZXcgUmVnRXhwKClcbmNvbnN0IHFtYXJrID0gJ1teL10nO1xuLy8gKiA9PiBhbnkgbnVtYmVyIG9mIGNoYXJhY3RlcnNcbmNvbnN0IHN0YXIgPSBxbWFyayArICcqPyc7XG4vLyAqKiB3aGVuIGRvdHMgYXJlIGFsbG93ZWQuICBBbnl0aGluZyBnb2VzLCBleGNlcHQgLi4gYW5kIC5cbi8vIG5vdCAoXiBvciAvIGZvbGxvd2VkIGJ5IG9uZSBvciB0d28gZG90cyBmb2xsb3dlZCBieSAkIG9yIC8pLFxuLy8gZm9sbG93ZWQgYnkgYW55dGhpbmcsIGFueSBudW1iZXIgb2YgdGltZXMuXG5jb25zdCB0d29TdGFyRG90ID0gJyg/Oig/ISg/OlxcXFwvfF4pKD86XFxcXC57MSwyfSkoJHxcXFxcLykpLikqPyc7XG4vLyBub3QgYSBeIG9yIC8gZm9sbG93ZWQgYnkgYSBkb3QsXG4vLyBmb2xsb3dlZCBieSBhbnl0aGluZywgYW55IG51bWJlciBvZiB0aW1lcy5cbmNvbnN0IHR3b1N0YXJOb0RvdCA9ICcoPzooPyEoPzpcXFxcL3xeKVxcXFwuKS4pKj8nO1xuY29uc3QgZmlsdGVyID0gKHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkgPT4gKHApID0+ICgwLCBleHBvcnRzLm1pbmltYXRjaCkocCwgcGF0dGVybiwgb3B0aW9ucyk7XG5leHBvcnRzLmZpbHRlciA9IGZpbHRlcjtcbmV4cG9ydHMubWluaW1hdGNoLmZpbHRlciA9IGV4cG9ydHMuZmlsdGVyO1xuY29uc3QgZXh0ID0gKGEsIGIgPSB7fSkgPT4gT2JqZWN0LmFzc2lnbih7fSwgYSwgYik7XG5jb25zdCBkZWZhdWx0cyA9IChkZWYpID0+IHtcbiAgICBpZiAoIWRlZiB8fCB0eXBlb2YgZGVmICE9PSAnb2JqZWN0JyB8fCAhT2JqZWN0LmtleXMoZGVmKS5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMubWluaW1hdGNoO1xuICAgIH1cbiAgICBjb25zdCBvcmlnID0gZXhwb3J0cy5taW5pbWF0Y2g7XG4gICAgY29uc3QgbSA9IChwLCBwYXR0ZXJuLCBvcHRpb25zID0ge30pID0+IG9yaWcocCwgcGF0dGVybiwgZXh0KGRlZiwgb3B0aW9ucykpO1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKG0sIHtcbiAgICAgICAgTWluaW1hdGNoOiBjbGFzcyBNaW5pbWF0Y2ggZXh0ZW5kcyBvcmlnLk1pbmltYXRjaCB7XG4gICAgICAgICAgICBjb25zdHJ1Y3RvcihwYXR0ZXJuLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgICAgICAgICBzdXBlcihwYXR0ZXJuLCBleHQoZGVmLCBvcHRpb25zKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdGF0aWMgZGVmYXVsdHMob3B0aW9ucykge1xuICAgICAgICAgICAgICAgIHJldHVybiBvcmlnLmRlZmF1bHRzKGV4dChkZWYsIG9wdGlvbnMpKS5NaW5pbWF0Y2g7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIEFTVDogY2xhc3MgQVNUIGV4dGVuZHMgb3JpZy5BU1Qge1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICBjb25zdHJ1Y3Rvcih0eXBlLCBwYXJlbnQsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICAgICAgICAgIHN1cGVyKHR5cGUsIHBhcmVudCwgZXh0KGRlZiwgb3B0aW9ucykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgICAgIHN0YXRpYyBmcm9tR2xvYihwYXR0ZXJuLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZy5BU1QuZnJvbUdsb2IocGF0dGVybiwgZXh0KGRlZiwgb3B0aW9ucykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB1bmVzY2FwZTogKHMsIG9wdGlvbnMgPSB7fSkgPT4gb3JpZy51bmVzY2FwZShzLCBleHQoZGVmLCBvcHRpb25zKSksXG4gICAgICAgIGVzY2FwZTogKHMsIG9wdGlvbnMgPSB7fSkgPT4gb3JpZy5lc2NhcGUocywgZXh0KGRlZiwgb3B0aW9ucykpLFxuICAgICAgICBmaWx0ZXI6IChwYXR0ZXJuLCBvcHRpb25zID0ge30pID0+IG9yaWcuZmlsdGVyKHBhdHRlcm4sIGV4dChkZWYsIG9wdGlvbnMpKSxcbiAgICAgICAgZGVmYXVsdHM6IChvcHRpb25zKSA9PiBvcmlnLmRlZmF1bHRzKGV4dChkZWYsIG9wdGlvbnMpKSxcbiAgICAgICAgbWFrZVJlOiAocGF0dGVybiwgb3B0aW9ucyA9IHt9KSA9PiBvcmlnLm1ha2VSZShwYXR0ZXJuLCBleHQoZGVmLCBvcHRpb25zKSksXG4gICAgICAgIGJyYWNlRXhwYW5kOiAocGF0dGVybiwgb3B0aW9ucyA9IHt9KSA9PiBvcmlnLmJyYWNlRXhwYW5kKHBhdHRlcm4sIGV4dChkZWYsIG9wdGlvbnMpKSxcbiAgICAgICAgbWF0Y2g6IChsaXN0LCBwYXR0ZXJuLCBvcHRpb25zID0ge30pID0+IG9yaWcubWF0Y2gobGlzdCwgcGF0dGVybiwgZXh0KGRlZiwgb3B0aW9ucykpLFxuICAgICAgICBzZXA6IG9yaWcuc2VwLFxuICAgICAgICBHTE9CU1RBUjogZXhwb3J0cy5HTE9CU1RBUixcbiAgICB9KTtcbn07XG5leHBvcnRzLmRlZmF1bHRzID0gZGVmYXVsdHM7XG5leHBvcnRzLm1pbmltYXRjaC5kZWZhdWx0cyA9IGV4cG9ydHMuZGVmYXVsdHM7XG4vLyBCcmFjZSBleHBhbnNpb246XG4vLyBhe2IsY31kIC0+IGFiZCBhY2Rcbi8vIGF7Yix9YyAtPiBhYmMgYWNcbi8vIGF7MC4uM31kIC0+IGEwZCBhMWQgYTJkIGEzZFxuLy8gYXtiLGN7ZCxlfWZ9ZyAtPiBhYmcgYWNkZmcgYWNlZmdcbi8vIGF7YixjfWR7ZSxmfWcgLT4gYWJkZWcgYWNkZWcgYWJkZWcgYWJkZmdcbi8vXG4vLyBJbnZhbGlkIHNldHMgYXJlIG5vdCBleHBhbmRlZC5cbi8vIGF7Mi4ufWIgLT4gYXsyLi59YlxuLy8gYXtifWMgLT4gYXtifWNcbmNvbnN0IGJyYWNlRXhwYW5kID0gKHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkgPT4ge1xuICAgICgwLCBhc3NlcnRfdmFsaWRfcGF0dGVybl9qc18xLmFzc2VydFZhbGlkUGF0dGVybikocGF0dGVybik7XG4gICAgLy8gVGhhbmtzIHRvIFlldGluZyBMaSA8aHR0cHM6Ly9naXRodWIuY29tL3lldGluZ2xpPiBmb3JcbiAgICAvLyBpbXByb3ZpbmcgdGhpcyByZWdleHAgdG8gYXZvaWQgYSBSZURPUyB2dWxuZXJhYmlsaXR5LlxuICAgIGlmIChvcHRpb25zLm5vYnJhY2UgfHwgIS9cXHsoPzooPyFcXHspLikqXFx9Ly50ZXN0KHBhdHRlcm4pKSB7XG4gICAgICAgIC8vIHNob3J0Y3V0LiBubyBuZWVkIHRvIGV4cGFuZC5cbiAgICAgICAgcmV0dXJuIFtwYXR0ZXJuXTtcbiAgICB9XG4gICAgcmV0dXJuICgwLCBicmFjZV9leHBhbnNpb25fMS5kZWZhdWx0KShwYXR0ZXJuKTtcbn07XG5leHBvcnRzLmJyYWNlRXhwYW5kID0gYnJhY2VFeHBhbmQ7XG5leHBvcnRzLm1pbmltYXRjaC5icmFjZUV4cGFuZCA9IGV4cG9ydHMuYnJhY2VFeHBhbmQ7XG4vLyBwYXJzZSBhIGNvbXBvbmVudCBvZiB0aGUgZXhwYW5kZWQgc2V0LlxuLy8gQXQgdGhpcyBwb2ludCwgbm8gcGF0dGVybiBtYXkgY29udGFpbiBcIi9cIiBpbiBpdFxuLy8gc28gd2UncmUgZ29pbmcgdG8gcmV0dXJuIGEgMmQgYXJyYXksIHdoZXJlIGVhY2ggZW50cnkgaXMgdGhlIGZ1bGxcbi8vIHBhdHRlcm4sIHNwbGl0IG9uICcvJywgYW5kIHRoZW4gdHVybmVkIGludG8gYSByZWd1bGFyIGV4cHJlc3Npb24uXG4vLyBBIHJlZ2V4cCBpcyBtYWRlIGF0IHRoZSBlbmQgd2hpY2ggam9pbnMgZWFjaCBhcnJheSB3aXRoIGFuXG4vLyBlc2NhcGVkIC8sIGFuZCBhbm90aGVyIGZ1bGwgb25lIHdoaWNoIGpvaW5zIGVhY2ggcmVnZXhwIHdpdGggfC5cbi8vXG4vLyBGb2xsb3dpbmcgdGhlIGxlYWQgb2YgQmFzaCA0LjEsIG5vdGUgdGhhdCBcIioqXCIgb25seSBoYXMgc3BlY2lhbCBtZWFuaW5nXG4vLyB3aGVuIGl0IGlzIHRoZSAqb25seSogdGhpbmcgaW4gYSBwYXRoIHBvcnRpb24uICBPdGhlcndpc2UsIGFueSBzZXJpZXNcbi8vIG9mICogaXMgZXF1aXZhbGVudCB0byBhIHNpbmdsZSAqLiAgR2xvYnN0YXIgYmVoYXZpb3IgaXMgZW5hYmxlZCBieVxuLy8gZGVmYXVsdCwgYW5kIGNhbiBiZSBkaXNhYmxlZCBieSBzZXR0aW5nIG9wdGlvbnMubm9nbG9ic3Rhci5cbmNvbnN0IG1ha2VSZSA9IChwYXR0ZXJuLCBvcHRpb25zID0ge30pID0+IG5ldyBNaW5pbWF0Y2gocGF0dGVybiwgb3B0aW9ucykubWFrZVJlKCk7XG5leHBvcnRzLm1ha2VSZSA9IG1ha2VSZTtcbmV4cG9ydHMubWluaW1hdGNoLm1ha2VSZSA9IGV4cG9ydHMubWFrZVJlO1xuY29uc3QgbWF0Y2ggPSAobGlzdCwgcGF0dGVybiwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgY29uc3QgbW0gPSBuZXcgTWluaW1hdGNoKHBhdHRlcm4sIG9wdGlvbnMpO1xuICAgIGxpc3QgPSBsaXN0LmZpbHRlcihmID0+IG1tLm1hdGNoKGYpKTtcbiAgICBpZiAobW0ub3B0aW9ucy5ub251bGwgJiYgIWxpc3QubGVuZ3RoKSB7XG4gICAgICAgIGxpc3QucHVzaChwYXR0ZXJuKTtcbiAgICB9XG4gICAgcmV0dXJuIGxpc3Q7XG59O1xuZXhwb3J0cy5tYXRjaCA9IG1hdGNoO1xuZXhwb3J0cy5taW5pbWF0Y2gubWF0Y2ggPSBleHBvcnRzLm1hdGNoO1xuLy8gcmVwbGFjZSBzdHVmZiBsaWtlIFxcKiB3aXRoICpcbmNvbnN0IGdsb2JNYWdpYyA9IC9bPypdfFsrQCFdXFwoLio/XFwpfFxcW3xcXF0vO1xuY29uc3QgcmVnRXhwRXNjYXBlID0gKHMpID0+IHMucmVwbGFjZSgvWy1bXFxde30oKSorPy4sXFxcXF4kfCNcXHNdL2csICdcXFxcJCYnKTtcbmNsYXNzIE1pbmltYXRjaCB7XG4gICAgb3B0aW9ucztcbiAgICBzZXQ7XG4gICAgcGF0dGVybjtcbiAgICB3aW5kb3dzUGF0aHNOb0VzY2FwZTtcbiAgICBub25lZ2F0ZTtcbiAgICBuZWdhdGU7XG4gICAgY29tbWVudDtcbiAgICBlbXB0eTtcbiAgICBwcmVzZXJ2ZU11bHRpcGxlU2xhc2hlcztcbiAgICBwYXJ0aWFsO1xuICAgIGdsb2JTZXQ7XG4gICAgZ2xvYlBhcnRzO1xuICAgIG5vY2FzZTtcbiAgICBpc1dpbmRvd3M7XG4gICAgcGxhdGZvcm07XG4gICAgd2luZG93c05vTWFnaWNSb290O1xuICAgIHJlZ2V4cDtcbiAgICBjb25zdHJ1Y3RvcihwYXR0ZXJuLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgKDAsIGFzc2VydF92YWxpZF9wYXR0ZXJuX2pzXzEuYXNzZXJ0VmFsaWRQYXR0ZXJuKShwYXR0ZXJuKTtcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgIHRoaXMucGF0dGVybiA9IHBhdHRlcm47XG4gICAgICAgIHRoaXMucGxhdGZvcm0gPSBvcHRpb25zLnBsYXRmb3JtIHx8IGRlZmF1bHRQbGF0Zm9ybTtcbiAgICAgICAgdGhpcy5pc1dpbmRvd3MgPSB0aGlzLnBsYXRmb3JtID09PSAnd2luMzInO1xuICAgICAgICB0aGlzLndpbmRvd3NQYXRoc05vRXNjYXBlID1cbiAgICAgICAgICAgICEhb3B0aW9ucy53aW5kb3dzUGF0aHNOb0VzY2FwZSB8fCBvcHRpb25zLmFsbG93V2luZG93c0VzY2FwZSA9PT0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLndpbmRvd3NQYXRoc05vRXNjYXBlKSB7XG4gICAgICAgICAgICB0aGlzLnBhdHRlcm4gPSB0aGlzLnBhdHRlcm4ucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJlc2VydmVNdWx0aXBsZVNsYXNoZXMgPSAhIW9wdGlvbnMucHJlc2VydmVNdWx0aXBsZVNsYXNoZXM7XG4gICAgICAgIHRoaXMucmVnZXhwID0gbnVsbDtcbiAgICAgICAgdGhpcy5uZWdhdGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5ub25lZ2F0ZSA9ICEhb3B0aW9ucy5ub25lZ2F0ZTtcbiAgICAgICAgdGhpcy5jb21tZW50ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZW1wdHkgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5wYXJ0aWFsID0gISFvcHRpb25zLnBhcnRpYWw7XG4gICAgICAgIHRoaXMubm9jYXNlID0gISF0aGlzLm9wdGlvbnMubm9jYXNlO1xuICAgICAgICB0aGlzLndpbmRvd3NOb01hZ2ljUm9vdCA9XG4gICAgICAgICAgICBvcHRpb25zLndpbmRvd3NOb01hZ2ljUm9vdCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyBvcHRpb25zLndpbmRvd3NOb01hZ2ljUm9vdFxuICAgICAgICAgICAgICAgIDogISEodGhpcy5pc1dpbmRvd3MgJiYgdGhpcy5ub2Nhc2UpO1xuICAgICAgICB0aGlzLmdsb2JTZXQgPSBbXTtcbiAgICAgICAgdGhpcy5nbG9iUGFydHMgPSBbXTtcbiAgICAgICAgdGhpcy5zZXQgPSBbXTtcbiAgICAgICAgLy8gbWFrZSB0aGUgc2V0IG9mIHJlZ2V4cHMgZXRjLlxuICAgICAgICB0aGlzLm1ha2UoKTtcbiAgICB9XG4gICAgaGFzTWFnaWMoKSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMubWFnaWNhbEJyYWNlcyAmJiB0aGlzLnNldC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgdGhpcy5zZXQpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcGFydCBvZiBwYXR0ZXJuKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwYXJ0ICE9PSAnc3RyaW5nJylcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBkZWJ1ZyguLi5fKSB7IH1cbiAgICBtYWtlKCkge1xuICAgICAgICBjb25zdCBwYXR0ZXJuID0gdGhpcy5wYXR0ZXJuO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgICAvLyBlbXB0eSBwYXR0ZXJucyBhbmQgY29tbWVudHMgbWF0Y2ggbm90aGluZy5cbiAgICAgICAgaWYgKCFvcHRpb25zLm5vY29tbWVudCAmJiBwYXR0ZXJuLmNoYXJBdCgwKSA9PT0gJyMnKSB7XG4gICAgICAgICAgICB0aGlzLmNvbW1lbnQgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghcGF0dGVybikge1xuICAgICAgICAgICAgdGhpcy5lbXB0eSA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gc3RlcCAxOiBmaWd1cmUgb3V0IG5lZ2F0aW9uLCBldGMuXG4gICAgICAgIHRoaXMucGFyc2VOZWdhdGUoKTtcbiAgICAgICAgLy8gc3RlcCAyOiBleHBhbmQgYnJhY2VzXG4gICAgICAgIHRoaXMuZ2xvYlNldCA9IFsuLi5uZXcgU2V0KHRoaXMuYnJhY2VFeHBhbmQoKSldO1xuICAgICAgICBpZiAob3B0aW9ucy5kZWJ1Zykge1xuICAgICAgICAgICAgdGhpcy5kZWJ1ZyA9ICguLi5hcmdzKSA9PiBjb25zb2xlLmVycm9yKC4uLmFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGVidWcodGhpcy5wYXR0ZXJuLCB0aGlzLmdsb2JTZXQpO1xuICAgICAgICAvLyBzdGVwIDM6IG5vdyB3ZSBoYXZlIGEgc2V0LCBzbyB0dXJuIGVhY2ggb25lIGludG8gYSBzZXJpZXMgb2ZcbiAgICAgICAgLy8gcGF0aC1wb3J0aW9uIG1hdGNoaW5nIHBhdHRlcm5zLlxuICAgICAgICAvLyBUaGVzZSB3aWxsIGJlIHJlZ2V4cHMsIGV4Y2VwdCBpbiB0aGUgY2FzZSBvZiBcIioqXCIsIHdoaWNoIGlzXG4gICAgICAgIC8vIHNldCB0byB0aGUgR0xPQlNUQVIgb2JqZWN0IGZvciBnbG9ic3RhciBiZWhhdmlvcixcbiAgICAgICAgLy8gYW5kIHdpbGwgbm90IGNvbnRhaW4gYW55IC8gY2hhcmFjdGVyc1xuICAgICAgICAvL1xuICAgICAgICAvLyBGaXJzdCwgd2UgcHJlcHJvY2VzcyB0byBtYWtlIHRoZSBnbG9iIHBhdHRlcm4gc2V0cyBhIGJpdCBzaW1wbGVyXG4gICAgICAgIC8vIGFuZCBkZWR1cGVkLiAgVGhlcmUgYXJlIHNvbWUgcGVyZi1raWxsaW5nIHBhdHRlcm5zIHRoYXQgY2FuIGNhdXNlXG4gICAgICAgIC8vIHByb2JsZW1zIHdpdGggYSBnbG9iIHdhbGssIGJ1dCB3ZSBjYW4gc2ltcGxpZnkgdGhlbSBkb3duIGEgYml0LlxuICAgICAgICBjb25zdCByYXdHbG9iUGFydHMgPSB0aGlzLmdsb2JTZXQubWFwKHMgPT4gdGhpcy5zbGFzaFNwbGl0KHMpKTtcbiAgICAgICAgdGhpcy5nbG9iUGFydHMgPSB0aGlzLnByZXByb2Nlc3MocmF3R2xvYlBhcnRzKTtcbiAgICAgICAgdGhpcy5kZWJ1Zyh0aGlzLnBhdHRlcm4sIHRoaXMuZ2xvYlBhcnRzKTtcbiAgICAgICAgLy8gZ2xvYiAtLT4gcmVnZXhwc1xuICAgICAgICBsZXQgc2V0ID0gdGhpcy5nbG9iUGFydHMubWFwKChzLCBfLCBfXykgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNXaW5kb3dzICYmIHRoaXMud2luZG93c05vTWFnaWNSb290KSB7XG4gICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgaXQncyBhIGRyaXZlIG9yIHVuYyBwYXRoLlxuICAgICAgICAgICAgICAgIGNvbnN0IGlzVU5DID0gc1swXSA9PT0gJycgJiZcbiAgICAgICAgICAgICAgICAgICAgc1sxXSA9PT0gJycgJiZcbiAgICAgICAgICAgICAgICAgICAgKHNbMl0gPT09ICc/JyB8fCAhZ2xvYk1hZ2ljLnRlc3Qoc1syXSkpICYmXG4gICAgICAgICAgICAgICAgICAgICFnbG9iTWFnaWMudGVzdChzWzNdKTtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0RyaXZlID0gL15bYS16XTovaS50ZXN0KHNbMF0pO1xuICAgICAgICAgICAgICAgIGlmIChpc1VOQykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWy4uLnMuc2xpY2UoMCwgNCksIC4uLnMuc2xpY2UoNCkubWFwKHNzID0+IHRoaXMucGFyc2Uoc3MpKV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzRHJpdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtzWzBdLCAuLi5zLnNsaWNlKDEpLm1hcChzcyA9PiB0aGlzLnBhcnNlKHNzKSldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzLm1hcChzcyA9PiB0aGlzLnBhcnNlKHNzKSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRlYnVnKHRoaXMucGF0dGVybiwgc2V0KTtcbiAgICAgICAgLy8gZmlsdGVyIG91dCBldmVyeXRoaW5nIHRoYXQgZGlkbid0IGNvbXBpbGUgcHJvcGVybHkuXG4gICAgICAgIHRoaXMuc2V0ID0gc2V0LmZpbHRlcihzID0+IHMuaW5kZXhPZihmYWxzZSkgPT09IC0xKTtcbiAgICAgICAgLy8gZG8gbm90IHRyZWF0IHRoZSA/IGluIFVOQyBwYXRocyBhcyBtYWdpY1xuICAgICAgICBpZiAodGhpcy5pc1dpbmRvd3MpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zZXQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwID0gdGhpcy5zZXRbaV07XG4gICAgICAgICAgICAgICAgaWYgKHBbMF0gPT09ICcnICYmXG4gICAgICAgICAgICAgICAgICAgIHBbMV0gPT09ICcnICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2xvYlBhcnRzW2ldWzJdID09PSAnPycgJiZcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHBbM10gPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAgICAgICAgIC9eW2Etel06JC9pLnRlc3QocFszXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcFsyXSA9ICc/JztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kZWJ1Zyh0aGlzLnBhdHRlcm4sIHRoaXMuc2V0KTtcbiAgICB9XG4gICAgLy8gdmFyaW91cyB0cmFuc2Zvcm1zIHRvIGVxdWl2YWxlbnQgcGF0dGVybiBzZXRzIHRoYXQgYXJlXG4gICAgLy8gZmFzdGVyIHRvIHByb2Nlc3MgaW4gYSBmaWxlc3lzdGVtIHdhbGsuICBUaGUgZ29hbCBpcyB0b1xuICAgIC8vIGVsaW1pbmF0ZSB3aGF0IHdlIGNhbiwgYW5kIHB1c2ggYWxsICoqIHBhdHRlcm5zIGFzIGZhclxuICAgIC8vIHRvIHRoZSByaWdodCBhcyBwb3NzaWJsZSwgZXZlbiBpZiBpdCBpbmNyZWFzZXMgdGhlIG51bWJlclxuICAgIC8vIG9mIHBhdHRlcm5zIHRoYXQgd2UgaGF2ZSB0byBwcm9jZXNzLlxuICAgIHByZXByb2Nlc3MoZ2xvYlBhcnRzKSB7XG4gICAgICAgIC8vIGlmIHdlJ3JlIG5vdCBpbiBnbG9ic3RhciBtb2RlLCB0aGVuIHR1cm4gYWxsICoqIGludG8gKlxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLm5vZ2xvYnN0YXIpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZ2xvYlBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBnbG9iUGFydHNbaV0ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGdsb2JQYXJ0c1tpXVtqXSA9PT0gJyoqJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYlBhcnRzW2ldW2pdID0gJyonO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgb3B0aW1pemF0aW9uTGV2ZWwgPSAxIH0gPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGlmIChvcHRpbWl6YXRpb25MZXZlbCA+PSAyKSB7XG4gICAgICAgICAgICAvLyBhZ2dyZXNzaXZlIG9wdGltaXphdGlvbiBmb3IgdGhlIHB1cnBvc2Ugb2YgZnMgd2Fsa2luZ1xuICAgICAgICAgICAgZ2xvYlBhcnRzID0gdGhpcy5maXJzdFBoYXNlUHJlUHJvY2VzcyhnbG9iUGFydHMpO1xuICAgICAgICAgICAgZ2xvYlBhcnRzID0gdGhpcy5zZWNvbmRQaGFzZVByZVByb2Nlc3MoZ2xvYlBhcnRzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChvcHRpbWl6YXRpb25MZXZlbCA+PSAxKSB7XG4gICAgICAgICAgICAvLyBqdXN0IGJhc2ljIG9wdGltaXphdGlvbnMgdG8gcmVtb3ZlIHNvbWUgLi4gcGFydHNcbiAgICAgICAgICAgIGdsb2JQYXJ0cyA9IHRoaXMubGV2ZWxPbmVPcHRpbWl6ZShnbG9iUGFydHMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8ganVzdCBjb2xsYXBzZSBtdWx0aXBsZSAqKiBwb3J0aW9ucyBpbnRvIG9uZVxuICAgICAgICAgICAgZ2xvYlBhcnRzID0gdGhpcy5hZGphc2NlbnRHbG9ic3Rhck9wdGltaXplKGdsb2JQYXJ0cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdsb2JQYXJ0cztcbiAgICB9XG4gICAgLy8ganVzdCBnZXQgcmlkIG9mIGFkamFzY2VudCAqKiBwb3J0aW9uc1xuICAgIGFkamFzY2VudEdsb2JzdGFyT3B0aW1pemUoZ2xvYlBhcnRzKSB7XG4gICAgICAgIHJldHVybiBnbG9iUGFydHMubWFwKHBhcnRzID0+IHtcbiAgICAgICAgICAgIGxldCBncyA9IC0xO1xuICAgICAgICAgICAgd2hpbGUgKC0xICE9PSAoZ3MgPSBwYXJ0cy5pbmRleE9mKCcqKicsIGdzICsgMSkpKSB7XG4gICAgICAgICAgICAgICAgbGV0IGkgPSBncztcbiAgICAgICAgICAgICAgICB3aGlsZSAocGFydHNbaSArIDFdID09PSAnKionKSB7XG4gICAgICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGkgIT09IGdzKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcnRzLnNwbGljZShncywgaSAtIGdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcGFydHM7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBnZXQgcmlkIG9mIGFkamFzY2VudCAqKiBhbmQgcmVzb2x2ZSAuLiBwb3J0aW9uc1xuICAgIGxldmVsT25lT3B0aW1pemUoZ2xvYlBhcnRzKSB7XG4gICAgICAgIHJldHVybiBnbG9iUGFydHMubWFwKHBhcnRzID0+IHtcbiAgICAgICAgICAgIHBhcnRzID0gcGFydHMucmVkdWNlKChzZXQsIHBhcnQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2ID0gc2V0W3NldC5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICBpZiAocGFydCA9PT0gJyoqJyAmJiBwcmV2ID09PSAnKionKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwYXJ0ID09PSAnLi4nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcmV2ICYmIHByZXYgIT09ICcuLicgJiYgcHJldiAhPT0gJy4nICYmIHByZXYgIT09ICcqKicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldC5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2V0LnB1c2gocGFydCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNldDtcbiAgICAgICAgICAgIH0sIFtdKTtcbiAgICAgICAgICAgIHJldHVybiBwYXJ0cy5sZW5ndGggPT09IDAgPyBbJyddIDogcGFydHM7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBsZXZlbFR3b0ZpbGVPcHRpbWl6ZShwYXJ0cykge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocGFydHMpKSB7XG4gICAgICAgICAgICBwYXJ0cyA9IHRoaXMuc2xhc2hTcGxpdChwYXJ0cyk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGRpZFNvbWV0aGluZyA9IGZhbHNlO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICBkaWRTb21ldGhpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vIDxwcmU+LzxlPi88cmVzdD4gLT4gPHByZT4vPHJlc3Q+XG4gICAgICAgICAgICBpZiAoIXRoaXMucHJlc2VydmVNdWx0aXBsZVNsYXNoZXMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHBhcnRzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwID0gcGFydHNbaV07XG4gICAgICAgICAgICAgICAgICAgIC8vIGRvbid0IHNxdWVlemUgb3V0IFVOQyBwYXR0ZXJuc1xuICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PT0gMSAmJiBwID09PSAnJyAmJiBwYXJ0c1swXSA9PT0gJycpXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHAgPT09ICcuJyB8fCBwID09PSAnJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlkU29tZXRoaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGktLTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocGFydHNbMF0gPT09ICcuJyAmJlxuICAgICAgICAgICAgICAgICAgICBwYXJ0cy5sZW5ndGggPT09IDIgJiZcbiAgICAgICAgICAgICAgICAgICAgKHBhcnRzWzFdID09PSAnLicgfHwgcGFydHNbMV0gPT09ICcnKSkge1xuICAgICAgICAgICAgICAgICAgICBkaWRTb21ldGhpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBwYXJ0cy5wb3AoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyA8cHJlPi88cD4vLi4vPHJlc3Q+IC0+IDxwcmU+LzxyZXN0PlxuICAgICAgICAgICAgbGV0IGRkID0gMDtcbiAgICAgICAgICAgIHdoaWxlICgtMSAhPT0gKGRkID0gcGFydHMuaW5kZXhPZignLi4nLCBkZCArIDEpKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHAgPSBwYXJ0c1tkZCAtIDFdO1xuICAgICAgICAgICAgICAgIGlmIChwICYmIHAgIT09ICcuJyAmJiBwICE9PSAnLi4nICYmIHAgIT09ICcqKicpIHtcbiAgICAgICAgICAgICAgICAgICAgZGlkU29tZXRoaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcGFydHMuc3BsaWNlKGRkIC0gMSwgMik7XG4gICAgICAgICAgICAgICAgICAgIGRkIC09IDI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IHdoaWxlIChkaWRTb21ldGhpbmcpO1xuICAgICAgICByZXR1cm4gcGFydHMubGVuZ3RoID09PSAwID8gWycnXSA6IHBhcnRzO1xuICAgIH1cbiAgICAvLyBGaXJzdCBwaGFzZTogc2luZ2xlLXBhdHRlcm4gcHJvY2Vzc2luZ1xuICAgIC8vIDxwcmU+IGlzIDEgb3IgbW9yZSBwb3J0aW9uc1xuICAgIC8vIDxyZXN0PiBpcyAxIG9yIG1vcmUgcG9ydGlvbnNcbiAgICAvLyA8cD4gaXMgYW55IHBvcnRpb24gb3RoZXIgdGhhbiAuLCAuLiwgJycsIG9yICoqXG4gICAgLy8gPGU+IGlzIC4gb3IgJydcbiAgICAvL1xuICAgIC8vICoqLy4uIGlzICpicnV0YWwqIGZvciBmaWxlc3lzdGVtIHdhbGtpbmcgcGVyZm9ybWFuY2UsIGJlY2F1c2VcbiAgICAvLyBpdCBlZmZlY3RpdmVseSByZXNldHMgdGhlIHJlY3Vyc2l2ZSB3YWxrIGVhY2ggdGltZSBpdCBvY2N1cnMsXG4gICAgLy8gYW5kICoqIGNhbm5vdCBiZSByZWR1Y2VkIG91dCBieSBhIC4uIHBhdHRlcm4gcGFydCBsaWtlIGEgcmVnZXhwXG4gICAgLy8gb3IgbW9zdCBzdHJpbmdzIChvdGhlciB0aGFuIC4uLCAuLCBhbmQgJycpIGNhbiBiZS5cbiAgICAvL1xuICAgIC8vIDxwcmU+LyoqLy4uLzxwPi88cD4vPHJlc3Q+IC0+IHs8cHJlPi8uLi88cD4vPHA+LzxyZXN0Piw8cHJlPi8qKi88cD4vPHA+LzxyZXN0Pn1cbiAgICAvLyA8cHJlPi88ZT4vPHJlc3Q+IC0+IDxwcmU+LzxyZXN0PlxuICAgIC8vIDxwcmU+LzxwPi8uLi88cmVzdD4gLT4gPHByZT4vPHJlc3Q+XG4gICAgLy8gKiovKiovPHJlc3Q+IC0+ICoqLzxyZXN0PlxuICAgIC8vXG4gICAgLy8gKiovKi88cmVzdD4gLT4gKi8qKi88cmVzdD4gPD09IG5vdCB2YWxpZCBiZWNhdXNlICoqIGRvZXNuJ3QgZm9sbG93XG4gICAgLy8gdGhpcyBXT1VMRCBiZSBhbGxvd2VkIGlmICoqIGRpZCBmb2xsb3cgc3ltbGlua3MsIG9yICogZGlkbid0XG4gICAgZmlyc3RQaGFzZVByZVByb2Nlc3MoZ2xvYlBhcnRzKSB7XG4gICAgICAgIGxldCBkaWRTb21ldGhpbmcgPSBmYWxzZTtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgZGlkU29tZXRoaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAvLyA8cHJlPi8qKi8uLi88cD4vPHA+LzxyZXN0PiAtPiB7PHByZT4vLi4vPHA+LzxwPi88cmVzdD4sPHByZT4vKiovPHA+LzxwPi88cmVzdD59XG4gICAgICAgICAgICBmb3IgKGxldCBwYXJ0cyBvZiBnbG9iUGFydHMpIHtcbiAgICAgICAgICAgICAgICBsZXQgZ3MgPSAtMTtcbiAgICAgICAgICAgICAgICB3aGlsZSAoLTEgIT09IChncyA9IHBhcnRzLmluZGV4T2YoJyoqJywgZ3MgKyAxKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGdzcyA9IGdzO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAocGFydHNbZ3NzICsgMV0gPT09ICcqKicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIDxwcmU+LyoqLyoqLzxyZXN0PiAtPiA8cHJlPi8qKi88cmVzdD5cbiAgICAgICAgICAgICAgICAgICAgICAgIGdzcysrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIGVnLCBpZiBncyBpcyAyIGFuZCBnc3MgaXMgNCwgdGhhdCBtZWFucyB3ZSBoYXZlIDMgKipcbiAgICAgICAgICAgICAgICAgICAgLy8gcGFydHMsIGFuZCBjYW4gcmVtb3ZlIDIgb2YgdGhlbS5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGdzcyA+IGdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0cy5zcGxpY2UoZ3MgKyAxLCBnc3MgLSBncyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbGV0IG5leHQgPSBwYXJ0c1tncyArIDFdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwID0gcGFydHNbZ3MgKyAyXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcDIgPSBwYXJ0c1tncyArIDNdO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCAhPT0gJy4uJylcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXAgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHAgPT09ICcuJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgcCA9PT0gJy4uJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgIXAyIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBwMiA9PT0gJy4nIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBwMiA9PT0gJy4uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZGlkU29tZXRoaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgLy8gZWRpdCBwYXJ0cyBpbiBwbGFjZSwgYW5kIHB1c2ggdGhlIG5ldyBvbmVcbiAgICAgICAgICAgICAgICAgICAgcGFydHMuc3BsaWNlKGdzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RoZXIgPSBwYXJ0cy5zbGljZSgwKTtcbiAgICAgICAgICAgICAgICAgICAgb3RoZXJbZ3NdID0gJyoqJztcbiAgICAgICAgICAgICAgICAgICAgZ2xvYlBhcnRzLnB1c2gob3RoZXIpO1xuICAgICAgICAgICAgICAgICAgICBncy0tO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyA8cHJlPi88ZT4vPHJlc3Q+IC0+IDxwcmU+LzxyZXN0PlxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5wcmVzZXJ2ZU11bHRpcGxlU2xhc2hlcykge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHBhcnRzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcCA9IHBhcnRzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZG9uJ3Qgc3F1ZWV6ZSBvdXQgVU5DIHBhdHRlcm5zXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PT0gMSAmJiBwID09PSAnJyAmJiBwYXJ0c1swXSA9PT0gJycpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocCA9PT0gJy4nIHx8IHAgPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlkU29tZXRoaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaS0tO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJ0c1swXSA9PT0gJy4nICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0cy5sZW5ndGggPT09IDIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIChwYXJ0c1sxXSA9PT0gJy4nIHx8IHBhcnRzWzFdID09PSAnJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpZFNvbWV0aGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0cy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyA8cHJlPi88cD4vLi4vPHJlc3Q+IC0+IDxwcmU+LzxyZXN0PlxuICAgICAgICAgICAgICAgIGxldCBkZCA9IDA7XG4gICAgICAgICAgICAgICAgd2hpbGUgKC0xICE9PSAoZGQgPSBwYXJ0cy5pbmRleE9mKCcuLicsIGRkICsgMSkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHAgPSBwYXJ0c1tkZCAtIDFdO1xuICAgICAgICAgICAgICAgICAgICBpZiAocCAmJiBwICE9PSAnLicgJiYgcCAhPT0gJy4uJyAmJiBwICE9PSAnKionKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaWRTb21ldGhpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmVlZERvdCA9IGRkID09PSAxICYmIHBhcnRzW2RkICsgMV0gPT09ICcqKic7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzcGxpbiA9IG5lZWREb3QgPyBbJy4nXSA6IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFydHMuc3BsaWNlKGRkIC0gMSwgMiwgLi4uc3BsaW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0cy5wdXNoKCcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRkIC09IDI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gd2hpbGUgKGRpZFNvbWV0aGluZyk7XG4gICAgICAgIHJldHVybiBnbG9iUGFydHM7XG4gICAgfVxuICAgIC8vIHNlY29uZCBwaGFzZTogbXVsdGktcGF0dGVybiBkZWR1cGVzXG4gICAgLy8gezxwcmU+LyovPHJlc3Q+LDxwcmU+LzxwPi88cmVzdD59IC0+IDxwcmU+LyovPHJlc3Q+XG4gICAgLy8gezxwcmU+LzxyZXN0Piw8cHJlPi88cmVzdD59IC0+IDxwcmU+LzxyZXN0PlxuICAgIC8vIHs8cHJlPi8qKi88cmVzdD4sPHByZT4vPHJlc3Q+fSAtPiA8cHJlPi8qKi88cmVzdD5cbiAgICAvL1xuICAgIC8vIHs8cHJlPi8qKi88cmVzdD4sPHByZT4vKiovPHA+LzxyZXN0Pn0gLT4gPHByZT4vKiovPHJlc3Q+XG4gICAgLy8gXi0tIG5vdCB2YWxpZCBiZWNhdXNlICoqIGRvZW5zJ3QgZm9sbG93IHN5bWxpbmtzXG4gICAgc2Vjb25kUGhhc2VQcmVQcm9jZXNzKGdsb2JQYXJ0cykge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGdsb2JQYXJ0cy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IGdsb2JQYXJ0cy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoZWQgPSB0aGlzLnBhcnRzTWF0Y2goZ2xvYlBhcnRzW2ldLCBnbG9iUGFydHNbal0sICF0aGlzLnByZXNlcnZlTXVsdGlwbGVTbGFzaGVzKTtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2hlZCkge1xuICAgICAgICAgICAgICAgICAgICBnbG9iUGFydHNbaV0gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgZ2xvYlBhcnRzW2pdID0gbWF0Y2hlZDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBnbG9iUGFydHMuZmlsdGVyKGdzID0+IGdzLmxlbmd0aCk7XG4gICAgfVxuICAgIHBhcnRzTWF0Y2goYSwgYiwgZW1wdHlHU01hdGNoID0gZmFsc2UpIHtcbiAgICAgICAgbGV0IGFpID0gMDtcbiAgICAgICAgbGV0IGJpID0gMDtcbiAgICAgICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgICAgICBsZXQgd2hpY2ggPSAnJztcbiAgICAgICAgd2hpbGUgKGFpIDwgYS5sZW5ndGggJiYgYmkgPCBiLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKGFbYWldID09PSBiW2JpXSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHdoaWNoID09PSAnYicgPyBiW2JpXSA6IGFbYWldKTtcbiAgICAgICAgICAgICAgICBhaSsrO1xuICAgICAgICAgICAgICAgIGJpKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChlbXB0eUdTTWF0Y2ggJiYgYVthaV0gPT09ICcqKicgJiYgYltiaV0gPT09IGFbYWkgKyAxXSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGFbYWldKTtcbiAgICAgICAgICAgICAgICBhaSsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZW1wdHlHU01hdGNoICYmIGJbYmldID09PSAnKionICYmIGFbYWldID09PSBiW2JpICsgMV0pIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChiW2JpXSk7XG4gICAgICAgICAgICAgICAgYmkrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGFbYWldID09PSAnKicgJiZcbiAgICAgICAgICAgICAgICBiW2JpXSAmJlxuICAgICAgICAgICAgICAgICh0aGlzLm9wdGlvbnMuZG90IHx8ICFiW2JpXS5zdGFydHNXaXRoKCcuJykpICYmXG4gICAgICAgICAgICAgICAgYltiaV0gIT09ICcqKicpIHtcbiAgICAgICAgICAgICAgICBpZiAod2hpY2ggPT09ICdiJylcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIHdoaWNoID0gJ2EnO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGFbYWldKTtcbiAgICAgICAgICAgICAgICBhaSsrO1xuICAgICAgICAgICAgICAgIGJpKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChiW2JpXSA9PT0gJyonICYmXG4gICAgICAgICAgICAgICAgYVthaV0gJiZcbiAgICAgICAgICAgICAgICAodGhpcy5vcHRpb25zLmRvdCB8fCAhYVthaV0uc3RhcnRzV2l0aCgnLicpKSAmJlxuICAgICAgICAgICAgICAgIGFbYWldICE9PSAnKionKSB7XG4gICAgICAgICAgICAgICAgaWYgKHdoaWNoID09PSAnYScpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB3aGljaCA9ICdiJztcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChiW2JpXSk7XG4gICAgICAgICAgICAgICAgYWkrKztcbiAgICAgICAgICAgICAgICBiaSsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHdlIGZhbGwgb3V0IG9mIHRoZSBsb29wLCBpdCBtZWFucyB0aGV5IHR3byBhcmUgaWRlbnRpY2FsXG4gICAgICAgIC8vIGFzIGxvbmcgYXMgdGhlaXIgbGVuZ3RocyBtYXRjaFxuICAgICAgICByZXR1cm4gYS5sZW5ndGggPT09IGIubGVuZ3RoICYmIHJlc3VsdDtcbiAgICB9XG4gICAgcGFyc2VOZWdhdGUoKSB7XG4gICAgICAgIGlmICh0aGlzLm5vbmVnYXRlKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBwYXR0ZXJuID0gdGhpcy5wYXR0ZXJuO1xuICAgICAgICBsZXQgbmVnYXRlID0gZmFsc2U7XG4gICAgICAgIGxldCBuZWdhdGVPZmZzZXQgPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdHRlcm4ubGVuZ3RoICYmIHBhdHRlcm4uY2hhckF0KGkpID09PSAnISc7IGkrKykge1xuICAgICAgICAgICAgbmVnYXRlID0gIW5lZ2F0ZTtcbiAgICAgICAgICAgIG5lZ2F0ZU9mZnNldCsrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuZWdhdGVPZmZzZXQpXG4gICAgICAgICAgICB0aGlzLnBhdHRlcm4gPSBwYXR0ZXJuLnNsaWNlKG5lZ2F0ZU9mZnNldCk7XG4gICAgICAgIHRoaXMubmVnYXRlID0gbmVnYXRlO1xuICAgIH1cbiAgICAvLyBzZXQgcGFydGlhbCB0byB0cnVlIHRvIHRlc3QgaWYsIGZvciBleGFtcGxlLFxuICAgIC8vIFwiL2EvYlwiIG1hdGNoZXMgdGhlIHN0YXJ0IG9mIFwiLyovYi8qL2RcIlxuICAgIC8vIFBhcnRpYWwgbWVhbnMsIGlmIHlvdSBydW4gb3V0IG9mIGZpbGUgYmVmb3JlIHlvdSBydW5cbiAgICAvLyBvdXQgb2YgcGF0dGVybiwgdGhlbiB0aGF0J3MgZmluZSwgYXMgbG9uZyBhcyBhbGxcbiAgICAvLyB0aGUgcGFydHMgbWF0Y2guXG4gICAgbWF0Y2hPbmUoZmlsZSwgcGF0dGVybiwgcGFydGlhbCA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIC8vIFVOQyBwYXRocyBsaWtlIC8vPy9YOi8uLi4gY2FuIG1hdGNoIFg6Ly4uLiBhbmQgdmljZSB2ZXJzYVxuICAgICAgICAvLyBEcml2ZSBsZXR0ZXJzIGluIGFic29sdXRlIGRyaXZlIG9yIHVuYyBwYXRocyBhcmUgYWx3YXlzIGNvbXBhcmVkXG4gICAgICAgIC8vIGNhc2UtaW5zZW5zaXRpdmVseS5cbiAgICAgICAgaWYgKHRoaXMuaXNXaW5kb3dzKSB7XG4gICAgICAgICAgICBjb25zdCBmaWxlRHJpdmUgPSB0eXBlb2YgZmlsZVswXSA9PT0gJ3N0cmluZycgJiYgL15bYS16XTokL2kudGVzdChmaWxlWzBdKTtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVVTkMgPSAhZmlsZURyaXZlICYmXG4gICAgICAgICAgICAgICAgZmlsZVswXSA9PT0gJycgJiZcbiAgICAgICAgICAgICAgICBmaWxlWzFdID09PSAnJyAmJlxuICAgICAgICAgICAgICAgIGZpbGVbMl0gPT09ICc/JyAmJlxuICAgICAgICAgICAgICAgIC9eW2Etel06JC9pLnRlc3QoZmlsZVszXSk7XG4gICAgICAgICAgICBjb25zdCBwYXR0ZXJuRHJpdmUgPSB0eXBlb2YgcGF0dGVyblswXSA9PT0gJ3N0cmluZycgJiYgL15bYS16XTokL2kudGVzdChwYXR0ZXJuWzBdKTtcbiAgICAgICAgICAgIGNvbnN0IHBhdHRlcm5VTkMgPSAhcGF0dGVybkRyaXZlICYmXG4gICAgICAgICAgICAgICAgcGF0dGVyblswXSA9PT0gJycgJiZcbiAgICAgICAgICAgICAgICBwYXR0ZXJuWzFdID09PSAnJyAmJlxuICAgICAgICAgICAgICAgIHBhdHRlcm5bMl0gPT09ICc/JyAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiBwYXR0ZXJuWzNdID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgICAgIC9eW2Etel06JC9pLnRlc3QocGF0dGVyblszXSk7XG4gICAgICAgICAgICBjb25zdCBmZGkgPSBmaWxlVU5DID8gMyA6IGZpbGVEcml2ZSA/IDAgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjb25zdCBwZGkgPSBwYXR0ZXJuVU5DID8gMyA6IHBhdHRlcm5Ecml2ZSA/IDAgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGZkaSA9PT0gJ251bWJlcicgJiYgdHlwZW9mIHBkaSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBbZmQsIHBkXSA9IFtmaWxlW2ZkaV0sIHBhdHRlcm5bcGRpXV07XG4gICAgICAgICAgICAgICAgaWYgKGZkLnRvTG93ZXJDYXNlKCkgPT09IHBkLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcGF0dGVybltwZGldID0gZmQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwZGkgPiBmZGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm4gPSBwYXR0ZXJuLnNsaWNlKHBkaSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZmRpID4gcGRpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlID0gZmlsZS5zbGljZShmZGkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIHJlc29sdmUgYW5kIHJlZHVjZSAuIGFuZCAuLiBwb3J0aW9ucyBpbiB0aGUgZmlsZSBhcyB3ZWxsLlxuICAgICAgICAvLyBkb250JyBuZWVkIHRvIGRvIHRoZSBzZWNvbmQgcGhhc2UsIGJlY2F1c2UgaXQncyBvbmx5IG9uZSBzdHJpbmdbXVxuICAgICAgICBjb25zdCB7IG9wdGltaXphdGlvbkxldmVsID0gMSB9ID0gdGhpcy5vcHRpb25zO1xuICAgICAgICBpZiAob3B0aW1pemF0aW9uTGV2ZWwgPj0gMikge1xuICAgICAgICAgICAgZmlsZSA9IHRoaXMubGV2ZWxUd29GaWxlT3B0aW1pemUoZmlsZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kZWJ1ZygnbWF0Y2hPbmUnLCB0aGlzLCB7IGZpbGUsIHBhdHRlcm4gfSk7XG4gICAgICAgIHRoaXMuZGVidWcoJ21hdGNoT25lJywgZmlsZS5sZW5ndGgsIHBhdHRlcm4ubGVuZ3RoKTtcbiAgICAgICAgZm9yICh2YXIgZmkgPSAwLCBwaSA9IDAsIGZsID0gZmlsZS5sZW5ndGgsIHBsID0gcGF0dGVybi5sZW5ndGg7IGZpIDwgZmwgJiYgcGkgPCBwbDsgZmkrKywgcGkrKykge1xuICAgICAgICAgICAgdGhpcy5kZWJ1ZygnbWF0Y2hPbmUgbG9vcCcpO1xuICAgICAgICAgICAgdmFyIHAgPSBwYXR0ZXJuW3BpXTtcbiAgICAgICAgICAgIHZhciBmID0gZmlsZVtmaV07XG4gICAgICAgICAgICB0aGlzLmRlYnVnKHBhdHRlcm4sIHAsIGYpO1xuICAgICAgICAgICAgLy8gc2hvdWxkIGJlIGltcG9zc2libGUuXG4gICAgICAgICAgICAvLyBzb21lIGludmFsaWQgcmVnZXhwIHN0dWZmIGluIHRoZSBzZXQuXG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgICAgIGlmIChwID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICBpZiAocCA9PT0gZXhwb3J0cy5HTE9CU1RBUikge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVidWcoJ0dMT0JTVEFSJywgW3BhdHRlcm4sIHAsIGZdKTtcbiAgICAgICAgICAgICAgICAvLyBcIioqXCJcbiAgICAgICAgICAgICAgICAvLyBhLyoqL2IvKiovYyB3b3VsZCBtYXRjaCB0aGUgZm9sbG93aW5nOlxuICAgICAgICAgICAgICAgIC8vIGEvYi94L3kvei9jXG4gICAgICAgICAgICAgICAgLy8gYS94L3kvei9iL2NcbiAgICAgICAgICAgICAgICAvLyBhL2IveC9iL3gvY1xuICAgICAgICAgICAgICAgIC8vIGEvYi9jXG4gICAgICAgICAgICAgICAgLy8gVG8gZG8gdGhpcywgdGFrZSB0aGUgcmVzdCBvZiB0aGUgcGF0dGVybiBhZnRlclxuICAgICAgICAgICAgICAgIC8vIHRoZSAqKiwgYW5kIHNlZSBpZiBpdCB3b3VsZCBtYXRjaCB0aGUgZmlsZSByZW1haW5kZXIuXG4gICAgICAgICAgICAgICAgLy8gSWYgc28sIHJldHVybiBzdWNjZXNzLlxuICAgICAgICAgICAgICAgIC8vIElmIG5vdCwgdGhlICoqIFwic3dhbGxvd3NcIiBhIHNlZ21lbnQsIGFuZCB0cnkgYWdhaW4uXG4gICAgICAgICAgICAgICAgLy8gVGhpcyBpcyByZWN1cnNpdmVseSBhd2Z1bC5cbiAgICAgICAgICAgICAgICAvL1xuICAgICAgICAgICAgICAgIC8vIGEvKiovYi8qKi9jIG1hdGNoaW5nIGEvYi94L3kvei9jXG4gICAgICAgICAgICAgICAgLy8gLSBhIG1hdGNoZXMgYVxuICAgICAgICAgICAgICAgIC8vIC0gZG91Ymxlc3RhclxuICAgICAgICAgICAgICAgIC8vICAgLSBtYXRjaE9uZShiL3gveS96L2MsIGIvKiovYylcbiAgICAgICAgICAgICAgICAvLyAgICAgLSBiIG1hdGNoZXMgYlxuICAgICAgICAgICAgICAgIC8vICAgICAtIGRvdWJsZXN0YXJcbiAgICAgICAgICAgICAgICAvLyAgICAgICAtIG1hdGNoT25lKHgveS96L2MsIGMpIC0+IG5vXG4gICAgICAgICAgICAgICAgLy8gICAgICAgLSBtYXRjaE9uZSh5L3ovYywgYykgLT4gbm9cbiAgICAgICAgICAgICAgICAvLyAgICAgICAtIG1hdGNoT25lKHovYywgYykgLT4gbm9cbiAgICAgICAgICAgICAgICAvLyAgICAgICAtIG1hdGNoT25lKGMsIGMpIHllcywgaGl0XG4gICAgICAgICAgICAgICAgdmFyIGZyID0gZmk7XG4gICAgICAgICAgICAgICAgdmFyIHByID0gcGkgKyAxO1xuICAgICAgICAgICAgICAgIGlmIChwciA9PT0gcGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWJ1ZygnKiogYXQgdGhlIGVuZCcpO1xuICAgICAgICAgICAgICAgICAgICAvLyBhICoqIGF0IHRoZSBlbmQgd2lsbCBqdXN0IHN3YWxsb3cgdGhlIHJlc3QuXG4gICAgICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgZm91bmQgYSBtYXRjaC5cbiAgICAgICAgICAgICAgICAgICAgLy8gaG93ZXZlciwgaXQgd2lsbCBub3Qgc3dhbGxvdyAvLngsIHVubGVzc1xuICAgICAgICAgICAgICAgICAgICAvLyBvcHRpb25zLmRvdCBpcyBzZXQuXG4gICAgICAgICAgICAgICAgICAgIC8vIC4gYW5kIC4uIGFyZSAqbmV2ZXIqIG1hdGNoZWQgYnkgKiosIGZvciBleHBsb3NpdmVseVxuICAgICAgICAgICAgICAgICAgICAvLyBleHBvbmVudGlhbCByZWFzb25zLlxuICAgICAgICAgICAgICAgICAgICBmb3IgKDsgZmkgPCBmbDsgZmkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpbGVbZmldID09PSAnLicgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlW2ZpXSA9PT0gJy4uJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICghb3B0aW9ucy5kb3QgJiYgZmlsZVtmaV0uY2hhckF0KDApID09PSAnLicpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gb2ssIGxldCdzIHNlZSBpZiB3ZSBjYW4gc3dhbGxvdyB3aGF0ZXZlciB3ZSBjYW4uXG4gICAgICAgICAgICAgICAgd2hpbGUgKGZyIDwgZmwpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHN3YWxsb3dlZSA9IGZpbGVbZnJdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRlYnVnKCdcXG5nbG9ic3RhciB3aGlsZScsIGZpbGUsIGZyLCBwYXR0ZXJuLCBwciwgc3dhbGxvd2VlKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gWFhYIHJlbW92ZSB0aGlzIHNsaWNlLiAgSnVzdCBwYXNzIHRoZSBzdGFydCBpbmRleC5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2hPbmUoZmlsZS5zbGljZShmciksIHBhdHRlcm4uc2xpY2UocHIpLCBwYXJ0aWFsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWJ1ZygnZ2xvYnN0YXIgZm91bmQgbWF0Y2ghJywgZnIsIGZsLCBzd2FsbG93ZWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm91bmQgYSBtYXRjaC5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FuJ3Qgc3dhbGxvdyBcIi5cIiBvciBcIi4uXCIgZXZlci5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbiBvbmx5IHN3YWxsb3cgXCIuZm9vXCIgd2hlbiBleHBsaWNpdGx5IGFza2VkLlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN3YWxsb3dlZSA9PT0gJy4nIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dhbGxvd2VlID09PSAnLi4nIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCFvcHRpb25zLmRvdCAmJiBzd2FsbG93ZWUuY2hhckF0KDApID09PSAnLicpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWJ1ZygnZG90IGRldGVjdGVkIScsIGZpbGUsIGZyLCBwYXR0ZXJuLCBwcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAqKiBzd2FsbG93cyBhIHNlZ21lbnQsIGFuZCBjb250aW51ZS5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVidWcoJ2dsb2JzdGFyIHN3YWxsb3cgYSBzZWdtZW50LCBhbmQgY29udGludWUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyKys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gbm8gbWF0Y2ggd2FzIGZvdW5kLlxuICAgICAgICAgICAgICAgIC8vIEhvd2V2ZXIsIGluIHBhcnRpYWwgbW9kZSwgd2UgY2FuJ3Qgc2F5IHRoaXMgaXMgbmVjZXNzYXJpbHkgb3Zlci5cbiAgICAgICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgICAgICAgICBpZiAocGFydGlhbCkge1xuICAgICAgICAgICAgICAgICAgICAvLyByYW4gb3V0IG9mIGZpbGVcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWJ1ZygnXFxuPj4+IG5vIG1hdGNoLCBwYXJ0aWFsPycsIGZpbGUsIGZyLCBwYXR0ZXJuLCBwcik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmciA9PT0gZmwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gc29tZXRoaW5nIG90aGVyIHRoYW4gKipcbiAgICAgICAgICAgIC8vIG5vbi1tYWdpYyBwYXR0ZXJucyBqdXN0IGhhdmUgdG8gbWF0Y2ggZXhhY3RseVxuICAgICAgICAgICAgLy8gcGF0dGVybnMgd2l0aCBtYWdpYyBoYXZlIGJlZW4gdHVybmVkIGludG8gcmVnZXhwcy5cbiAgICAgICAgICAgIGxldCBoaXQ7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHAgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgaGl0ID0gZiA9PT0gcDtcbiAgICAgICAgICAgICAgICB0aGlzLmRlYnVnKCdzdHJpbmcgbWF0Y2gnLCBwLCBmLCBoaXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaGl0ID0gcC50ZXN0KGYpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGVidWcoJ3BhdHRlcm4gbWF0Y2gnLCBwLCBmLCBoaXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFoaXQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIE5vdGU6IGVuZGluZyBpbiAvIG1lYW5zIHRoYXQgd2UnbGwgZ2V0IGEgZmluYWwgXCJcIlxuICAgICAgICAvLyBhdCB0aGUgZW5kIG9mIHRoZSBwYXR0ZXJuLiAgVGhpcyBjYW4gb25seSBtYXRjaCBhXG4gICAgICAgIC8vIGNvcnJlc3BvbmRpbmcgXCJcIiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLlxuICAgICAgICAvLyBJZiB0aGUgZmlsZSBlbmRzIGluIC8sIHRoZW4gaXQgY2FuIG9ubHkgbWF0Y2ggYVxuICAgICAgICAvLyBhIHBhdHRlcm4gdGhhdCBlbmRzIGluIC8sIHVubGVzcyB0aGUgcGF0dGVybiBqdXN0XG4gICAgICAgIC8vIGRvZXNuJ3QgaGF2ZSBhbnkgbW9yZSBmb3IgaXQuIEJ1dCwgYS9iLyBzaG91bGQgKm5vdCpcbiAgICAgICAgLy8gbWF0Y2ggXCJhL2IvKlwiLCBldmVuIHRob3VnaCBcIlwiIG1hdGNoZXMgYWdhaW5zdCB0aGVcbiAgICAgICAgLy8gW14vXSo/IHBhdHRlcm4sIGV4Y2VwdCBpbiBwYXJ0aWFsIG1vZGUsIHdoZXJlIGl0IG1pZ2h0XG4gICAgICAgIC8vIHNpbXBseSBub3QgYmUgcmVhY2hlZCB5ZXQuXG4gICAgICAgIC8vIEhvd2V2ZXIsIGEvYi8gc2hvdWxkIHN0aWxsIHNhdGlzZnkgYS8qXG4gICAgICAgIC8vIG5vdyBlaXRoZXIgd2UgZmVsbCBvZmYgdGhlIGVuZCBvZiB0aGUgcGF0dGVybiwgb3Igd2UncmUgZG9uZS5cbiAgICAgICAgaWYgKGZpID09PSBmbCAmJiBwaSA9PT0gcGwpIHtcbiAgICAgICAgICAgIC8vIHJhbiBvdXQgb2YgcGF0dGVybiBhbmQgZmlsZW5hbWUgYXQgdGhlIHNhbWUgdGltZS5cbiAgICAgICAgICAgIC8vIGFuIGV4YWN0IGhpdCFcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGZpID09PSBmbCkge1xuICAgICAgICAgICAgLy8gcmFuIG91dCBvZiBmaWxlLCBidXQgc3RpbGwgaGFkIHBhdHRlcm4gbGVmdC5cbiAgICAgICAgICAgIC8vIHRoaXMgaXMgb2sgaWYgd2UncmUgZG9pbmcgdGhlIG1hdGNoIGFzIHBhcnQgb2ZcbiAgICAgICAgICAgIC8vIGEgZ2xvYiBmcyB0cmF2ZXJzYWwuXG4gICAgICAgICAgICByZXR1cm4gcGFydGlhbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwaSA9PT0gcGwpIHtcbiAgICAgICAgICAgIC8vIHJhbiBvdXQgb2YgcGF0dGVybiwgc3RpbGwgaGF2ZSBmaWxlIGxlZnQuXG4gICAgICAgICAgICAvLyB0aGlzIGlzIG9ubHkgYWNjZXB0YWJsZSBpZiB3ZSdyZSBvbiB0aGUgdmVyeSBsYXN0XG4gICAgICAgICAgICAvLyBlbXB0eSBzZWdtZW50IG9mIGEgZmlsZSB3aXRoIGEgdHJhaWxpbmcgc2xhc2guXG4gICAgICAgICAgICAvLyBhLyogc2hvdWxkIG1hdGNoIGEvYi9cbiAgICAgICAgICAgIHJldHVybiBmaSA9PT0gZmwgLSAxICYmIGZpbGVbZmldID09PSAnJztcbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gc2hvdWxkIGJlIHVucmVhY2hhYmxlLlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd3dGY/Jyk7XG4gICAgICAgIH1cbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICB9XG4gICAgYnJhY2VFeHBhbmQoKSB7XG4gICAgICAgIHJldHVybiAoMCwgZXhwb3J0cy5icmFjZUV4cGFuZCkodGhpcy5wYXR0ZXJuLCB0aGlzLm9wdGlvbnMpO1xuICAgIH1cbiAgICBwYXJzZShwYXR0ZXJuKSB7XG4gICAgICAgICgwLCBhc3NlcnRfdmFsaWRfcGF0dGVybl9qc18xLmFzc2VydFZhbGlkUGF0dGVybikocGF0dGVybik7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIC8vIHNob3J0Y3V0c1xuICAgICAgICBpZiAocGF0dGVybiA9PT0gJyoqJylcbiAgICAgICAgICAgIHJldHVybiBleHBvcnRzLkdMT0JTVEFSO1xuICAgICAgICBpZiAocGF0dGVybiA9PT0gJycpXG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIC8vIGZhciBhbmQgYXdheSwgdGhlIG1vc3QgY29tbW9uIGdsb2IgcGF0dGVybiBwYXJ0cyBhcmVcbiAgICAgICAgLy8gKiwgKi4qLCBhbmQgKi48ZXh0PiAgQWRkIGEgZmFzdCBjaGVjayBtZXRob2QgZm9yIHRob3NlLlxuICAgICAgICBsZXQgbTtcbiAgICAgICAgbGV0IGZhc3RUZXN0ID0gbnVsbDtcbiAgICAgICAgaWYgKChtID0gcGF0dGVybi5tYXRjaChzdGFyUkUpKSkge1xuICAgICAgICAgICAgZmFzdFRlc3QgPSBvcHRpb25zLmRvdCA/IHN0YXJUZXN0RG90IDogc3RhclRlc3Q7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoKG0gPSBwYXR0ZXJuLm1hdGNoKHN0YXJEb3RFeHRSRSkpKSB7XG4gICAgICAgICAgICBmYXN0VGVzdCA9IChvcHRpb25zLm5vY2FzZVxuICAgICAgICAgICAgICAgID8gb3B0aW9ucy5kb3RcbiAgICAgICAgICAgICAgICAgICAgPyBzdGFyRG90RXh0VGVzdE5vY2FzZURvdFxuICAgICAgICAgICAgICAgICAgICA6IHN0YXJEb3RFeHRUZXN0Tm9jYXNlXG4gICAgICAgICAgICAgICAgOiBvcHRpb25zLmRvdFxuICAgICAgICAgICAgICAgICAgICA/IHN0YXJEb3RFeHRUZXN0RG90XG4gICAgICAgICAgICAgICAgICAgIDogc3RhckRvdEV4dFRlc3QpKG1bMV0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKChtID0gcGF0dGVybi5tYXRjaChxbWFya3NSRSkpKSB7XG4gICAgICAgICAgICBmYXN0VGVzdCA9IChvcHRpb25zLm5vY2FzZVxuICAgICAgICAgICAgICAgID8gb3B0aW9ucy5kb3RcbiAgICAgICAgICAgICAgICAgICAgPyBxbWFya3NUZXN0Tm9jYXNlRG90XG4gICAgICAgICAgICAgICAgICAgIDogcW1hcmtzVGVzdE5vY2FzZVxuICAgICAgICAgICAgICAgIDogb3B0aW9ucy5kb3RcbiAgICAgICAgICAgICAgICAgICAgPyBxbWFya3NUZXN0RG90XG4gICAgICAgICAgICAgICAgICAgIDogcW1hcmtzVGVzdCkobSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoKG0gPSBwYXR0ZXJuLm1hdGNoKHN0YXJEb3RTdGFyUkUpKSkge1xuICAgICAgICAgICAgZmFzdFRlc3QgPSBvcHRpb25zLmRvdCA/IHN0YXJEb3RTdGFyVGVzdERvdCA6IHN0YXJEb3RTdGFyVGVzdDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICgobSA9IHBhdHRlcm4ubWF0Y2goZG90U3RhclJFKSkpIHtcbiAgICAgICAgICAgIGZhc3RUZXN0ID0gZG90U3RhclRlc3Q7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmUgPSBhc3RfanNfMS5BU1QuZnJvbUdsb2IocGF0dGVybiwgdGhpcy5vcHRpb25zKS50b01NUGF0dGVybigpO1xuICAgICAgICBpZiAoZmFzdFRlc3QgJiYgdHlwZW9mIHJlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgLy8gQXZvaWRzIG92ZXJyaWRpbmcgaW4gZnJvemVuIGVudmlyb25tZW50c1xuICAgICAgICAgICAgUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eShyZSwgJ3Rlc3QnLCB7IHZhbHVlOiBmYXN0VGVzdCB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmU7XG4gICAgfVxuICAgIG1ha2VSZSgpIHtcbiAgICAgICAgaWYgKHRoaXMucmVnZXhwIHx8IHRoaXMucmVnZXhwID09PSBmYWxzZSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlZ2V4cDtcbiAgICAgICAgLy8gYXQgdGhpcyBwb2ludCwgdGhpcy5zZXQgaXMgYSAyZCBhcnJheSBvZiBwYXJ0aWFsXG4gICAgICAgIC8vIHBhdHRlcm4gc3RyaW5ncywgb3IgXCIqKlwiLlxuICAgICAgICAvL1xuICAgICAgICAvLyBJdCdzIGJldHRlciB0byB1c2UgLm1hdGNoKCkuICBUaGlzIGZ1bmN0aW9uIHNob3VsZG4ndFxuICAgICAgICAvLyBiZSB1c2VkLCByZWFsbHksIGJ1dCBpdCdzIHByZXR0eSBjb252ZW5pZW50IHNvbWV0aW1lcyxcbiAgICAgICAgLy8gd2hlbiB5b3UganVzdCB3YW50IHRvIHdvcmsgd2l0aCBhIHJlZ2V4LlxuICAgICAgICBjb25zdCBzZXQgPSB0aGlzLnNldDtcbiAgICAgICAgaWYgKCFzZXQubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnJlZ2V4cCA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVnZXhwO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGNvbnN0IHR3b1N0YXIgPSBvcHRpb25zLm5vZ2xvYnN0YXJcbiAgICAgICAgICAgID8gc3RhclxuICAgICAgICAgICAgOiBvcHRpb25zLmRvdFxuICAgICAgICAgICAgICAgID8gdHdvU3RhckRvdFxuICAgICAgICAgICAgICAgIDogdHdvU3Rhck5vRG90O1xuICAgICAgICBjb25zdCBmbGFncyA9IG5ldyBTZXQob3B0aW9ucy5ub2Nhc2UgPyBbJ2knXSA6IFtdKTtcbiAgICAgICAgLy8gcmVnZXhwaWZ5IG5vbi1nbG9ic3RhciBwYXR0ZXJuc1xuICAgICAgICAvLyBpZiAqKiBpcyBvbmx5IGl0ZW0sIHRoZW4gd2UganVzdCBkbyBvbmUgdHdvU3RhclxuICAgICAgICAvLyBpZiAqKiBpcyBmaXJzdCwgYW5kIHRoZXJlIGFyZSBtb3JlLCBwcmVwZW5kIChcXC98dHdvU3RhclxcLyk/IHRvIG5leHRcbiAgICAgICAgLy8gaWYgKiogaXMgbGFzdCwgYXBwZW5kIChcXC90d29TdGFyfCkgdG8gcHJldmlvdXNcbiAgICAgICAgLy8gaWYgKiogaXMgaW4gdGhlIG1pZGRsZSwgYXBwZW5kIChcXC98XFwvdHdvU3RhclxcLykgdG8gcHJldmlvdXNcbiAgICAgICAgLy8gdGhlbiBmaWx0ZXIgb3V0IEdMT0JTVEFSIHN5bWJvbHNcbiAgICAgICAgbGV0IHJlID0gc2V0XG4gICAgICAgICAgICAubWFwKHBhdHRlcm4gPT4ge1xuICAgICAgICAgICAgY29uc3QgcHAgPSBwYXR0ZXJuLm1hcChwID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGYgb2YgcC5mbGFncy5zcGxpdCgnJykpXG4gICAgICAgICAgICAgICAgICAgICAgICBmbGFncy5hZGQoZik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2YgcCA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgICAgPyByZWdFeHBFc2NhcGUocClcbiAgICAgICAgICAgICAgICAgICAgOiBwID09PSBleHBvcnRzLkdMT0JTVEFSXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGV4cG9ydHMuR0xPQlNUQVJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogcC5fc3JjO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwcC5mb3JFYWNoKChwLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IHBwW2kgKyAxXTtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2ID0gcHBbaSAtIDFdO1xuICAgICAgICAgICAgICAgIGlmIChwICE9PSBleHBvcnRzLkdMT0JTVEFSIHx8IHByZXYgPT09IGV4cG9ydHMuR0xPQlNUQVIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocHJldiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0ICE9PSB1bmRlZmluZWQgJiYgbmV4dCAhPT0gZXhwb3J0cy5HTE9CU1RBUikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHBbaSArIDFdID0gJyg/OlxcXFwvfCcgKyB0d29TdGFyICsgJ1xcXFwvKT8nICsgbmV4dDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBwW2ldID0gdHdvU3RhcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChuZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcHBbaSAtIDFdID0gcHJldiArICcoPzpcXFxcL3wnICsgdHdvU3RhciArICcpPyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5leHQgIT09IGV4cG9ydHMuR0xPQlNUQVIpIHtcbiAgICAgICAgICAgICAgICAgICAgcHBbaSAtIDFdID0gcHJldiArICcoPzpcXFxcL3xcXFxcLycgKyB0d29TdGFyICsgJ1xcXFwvKScgKyBuZXh0O1xuICAgICAgICAgICAgICAgICAgICBwcFtpICsgMV0gPSBleHBvcnRzLkdMT0JTVEFSO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHBwLmZpbHRlcihwID0+IHAgIT09IGV4cG9ydHMuR0xPQlNUQVIpLmpvaW4oJy8nKTtcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC5qb2luKCd8Jyk7XG4gICAgICAgIC8vIG5lZWQgdG8gd3JhcCBpbiBwYXJlbnMgaWYgd2UgaGFkIG1vcmUgdGhhbiBvbmUgdGhpbmcgd2l0aCB8LFxuICAgICAgICAvLyBvdGhlcndpc2Ugb25seSB0aGUgZmlyc3Qgd2lsbCBiZSBhbmNob3JlZCB0byBeIGFuZCB0aGUgbGFzdCB0byAkXG4gICAgICAgIGNvbnN0IFtvcGVuLCBjbG9zZV0gPSBzZXQubGVuZ3RoID4gMSA/IFsnKD86JywgJyknXSA6IFsnJywgJyddO1xuICAgICAgICAvLyBtdXN0IG1hdGNoIGVudGlyZSBwYXR0ZXJuXG4gICAgICAgIC8vIGVuZGluZyBpbiBhICogb3IgKiogd2lsbCBtYWtlIGl0IGxlc3Mgc3RyaWN0LlxuICAgICAgICByZSA9ICdeJyArIG9wZW4gKyByZSArIGNsb3NlICsgJyQnO1xuICAgICAgICAvLyBjYW4gbWF0Y2ggYW55dGhpbmcsIGFzIGxvbmcgYXMgaXQncyBub3QgdGhpcy5cbiAgICAgICAgaWYgKHRoaXMubmVnYXRlKVxuICAgICAgICAgICAgcmUgPSAnXig/IScgKyByZSArICcpLiskJztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMucmVnZXhwID0gbmV3IFJlZ0V4cChyZSwgWy4uLmZsYWdzXS5qb2luKCcnKSk7XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXgpIHtcbiAgICAgICAgICAgIC8vIHNob3VsZCBiZSBpbXBvc3NpYmxlXG4gICAgICAgICAgICB0aGlzLnJlZ2V4cCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIHJldHVybiB0aGlzLnJlZ2V4cDtcbiAgICB9XG4gICAgc2xhc2hTcGxpdChwKSB7XG4gICAgICAgIC8vIGlmIHAgc3RhcnRzIHdpdGggLy8gb24gd2luZG93cywgd2UgcHJlc2VydmUgdGhhdFxuICAgICAgICAvLyBzbyB0aGF0IFVOQyBwYXRocyBhcmVuJ3QgYnJva2VuLiAgT3RoZXJ3aXNlLCBhbnkgbnVtYmVyIG9mXG4gICAgICAgIC8vIC8gY2hhcmFjdGVycyBhcmUgY29hbGVzY2VkIGludG8gb25lLCB1bmxlc3NcbiAgICAgICAgLy8gcHJlc2VydmVNdWx0aXBsZVNsYXNoZXMgaXMgc2V0IHRvIHRydWUuXG4gICAgICAgIGlmICh0aGlzLnByZXNlcnZlTXVsdGlwbGVTbGFzaGVzKSB7XG4gICAgICAgICAgICByZXR1cm4gcC5zcGxpdCgnLycpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuaXNXaW5kb3dzICYmIC9eXFwvXFwvW15cXC9dKy8udGVzdChwKSkge1xuICAgICAgICAgICAgLy8gYWRkIGFuIGV4dHJhICcnIGZvciB0aGUgb25lIHdlIGxvc2VcbiAgICAgICAgICAgIHJldHVybiBbJycsIC4uLnAuc3BsaXQoL1xcLysvKV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gcC5zcGxpdCgvXFwvKy8pO1xuICAgICAgICB9XG4gICAgfVxuICAgIG1hdGNoKGYsIHBhcnRpYWwgPSB0aGlzLnBhcnRpYWwpIHtcbiAgICAgICAgdGhpcy5kZWJ1ZygnbWF0Y2gnLCBmLCB0aGlzLnBhdHRlcm4pO1xuICAgICAgICAvLyBzaG9ydC1jaXJjdWl0IGluIHRoZSBjYXNlIG9mIGJ1c3RlZCB0aGluZ3MuXG4gICAgICAgIC8vIGNvbW1lbnRzLCBldGMuXG4gICAgICAgIGlmICh0aGlzLmNvbW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5lbXB0eSkge1xuICAgICAgICAgICAgcmV0dXJuIGYgPT09ICcnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmID09PSAnLycgJiYgcGFydGlhbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgLy8gd2luZG93czogbmVlZCB0byB1c2UgLywgbm90IFxcXG4gICAgICAgIGlmICh0aGlzLmlzV2luZG93cykge1xuICAgICAgICAgICAgZiA9IGYuc3BsaXQoJ1xcXFwnKS5qb2luKCcvJyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gdHJlYXQgdGhlIHRlc3QgcGF0aCBhcyBhIHNldCBvZiBwYXRocGFydHMuXG4gICAgICAgIGNvbnN0IGZmID0gdGhpcy5zbGFzaFNwbGl0KGYpO1xuICAgICAgICB0aGlzLmRlYnVnKHRoaXMucGF0dGVybiwgJ3NwbGl0JywgZmYpO1xuICAgICAgICAvLyBqdXN0IE9ORSBvZiB0aGUgcGF0dGVybiBzZXRzIGluIHRoaXMuc2V0IG5lZWRzIHRvIG1hdGNoXG4gICAgICAgIC8vIGluIG9yZGVyIGZvciBpdCB0byBiZSB2YWxpZC4gIElmIG5lZ2F0aW5nLCB0aGVuIGp1c3Qgb25lXG4gICAgICAgIC8vIG1hdGNoIG1lYW5zIHRoYXQgd2UgaGF2ZSBmYWlsZWQuXG4gICAgICAgIC8vIEVpdGhlciB3YXksIHJldHVybiBvbiB0aGUgZmlyc3QgaGl0LlxuICAgICAgICBjb25zdCBzZXQgPSB0aGlzLnNldDtcbiAgICAgICAgdGhpcy5kZWJ1Zyh0aGlzLnBhdHRlcm4sICdzZXQnLCBzZXQpO1xuICAgICAgICAvLyBGaW5kIHRoZSBiYXNlbmFtZSBvZiB0aGUgcGF0aCBieSBsb29raW5nIGZvciB0aGUgbGFzdCBub24tZW1wdHkgc2VnbWVudFxuICAgICAgICBsZXQgZmlsZW5hbWUgPSBmZltmZi5sZW5ndGggLSAxXTtcbiAgICAgICAgaWYgKCFmaWxlbmFtZSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IGZmLmxlbmd0aCAtIDI7ICFmaWxlbmFtZSAmJiBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gZmZbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZXQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHBhdHRlcm4gPSBzZXRbaV07XG4gICAgICAgICAgICBsZXQgZmlsZSA9IGZmO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMubWF0Y2hCYXNlICYmIHBhdHRlcm4ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgZmlsZSA9IFtmaWxlbmFtZV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBoaXQgPSB0aGlzLm1hdGNoT25lKGZpbGUsIHBhdHRlcm4sIHBhcnRpYWwpO1xuICAgICAgICAgICAgaWYgKGhpdCkge1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmZsaXBOZWdhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAhdGhpcy5uZWdhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gZGlkbid0IGdldCBhbnkgaGl0cy4gIHRoaXMgaXMgc3VjY2VzcyBpZiBpdCdzIGEgbmVnYXRpdmVcbiAgICAgICAgLy8gcGF0dGVybiwgZmFpbHVyZSBvdGhlcndpc2UuXG4gICAgICAgIGlmIChvcHRpb25zLmZsaXBOZWdhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5uZWdhdGU7XG4gICAgfVxuICAgIHN0YXRpYyBkZWZhdWx0cyhkZWYpIHtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMubWluaW1hdGNoLmRlZmF1bHRzKGRlZikuTWluaW1hdGNoO1xuICAgIH1cbn1cbmV4cG9ydHMuTWluaW1hdGNoID0gTWluaW1hdGNoO1xuLyogYzggaWdub3JlIHN0YXJ0ICovXG52YXIgYXN0X2pzXzIgPSByZXF1aXJlKFwiLi9hc3QuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJBU1RcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFzdF9qc18yLkFTVDsgfSB9KTtcbnZhciBlc2NhcGVfanNfMiA9IHJlcXVpcmUoXCIuL2VzY2FwZS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImVzY2FwZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZXNjYXBlX2pzXzIuZXNjYXBlOyB9IH0pO1xudmFyIHVuZXNjYXBlX2pzXzIgPSByZXF1aXJlKFwiLi91bmVzY2FwZS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInVuZXNjYXBlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB1bmVzY2FwZV9qc18yLnVuZXNjYXBlOyB9IH0pO1xuLyogYzggaWdub3JlIHN0b3AgKi9cbmV4cG9ydHMubWluaW1hdGNoLkFTVCA9IGFzdF9qc18xLkFTVDtcbmV4cG9ydHMubWluaW1hdGNoLk1pbmltYXRjaCA9IE1pbmltYXRjaDtcbmV4cG9ydHMubWluaW1hdGNoLmVzY2FwZSA9IGVzY2FwZV9qc18xLmVzY2FwZTtcbmV4cG9ydHMubWluaW1hdGNoLnVuZXNjYXBlID0gdW5lc2NhcGVfanNfMS51bmVzY2FwZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKipcbiAqIEBtb2R1bGUgTFJVQ2FjaGVcbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5MUlVDYWNoZSA9IHZvaWQgMDtcbmNvbnN0IHBlcmYgPSB0eXBlb2YgcGVyZm9ybWFuY2UgPT09ICdvYmplY3QnICYmXG4gICAgcGVyZm9ybWFuY2UgJiZcbiAgICB0eXBlb2YgcGVyZm9ybWFuY2Uubm93ID09PSAnZnVuY3Rpb24nXG4gICAgPyBwZXJmb3JtYW5jZVxuICAgIDogRGF0ZTtcbmNvbnN0IHdhcm5lZCA9IG5ldyBTZXQoKTtcbi8qIGM4IGlnbm9yZSBzdGFydCAqL1xuY29uc3QgUFJPQ0VTUyA9ICh0eXBlb2YgcHJvY2VzcyA9PT0gJ29iamVjdCcgJiYgISFwcm9jZXNzID8gcHJvY2VzcyA6IHt9KTtcbi8qIGM4IGlnbm9yZSBzdGFydCAqL1xuY29uc3QgZW1pdFdhcm5pbmcgPSAobXNnLCB0eXBlLCBjb2RlLCBmbikgPT4ge1xuICAgIHR5cGVvZiBQUk9DRVNTLmVtaXRXYXJuaW5nID09PSAnZnVuY3Rpb24nXG4gICAgICAgID8gUFJPQ0VTUy5lbWl0V2FybmluZyhtc2csIHR5cGUsIGNvZGUsIGZuKVxuICAgICAgICA6IGNvbnNvbGUuZXJyb3IoYFske2NvZGV9XSAke3R5cGV9OiAke21zZ31gKTtcbn07XG5sZXQgQUMgPSBnbG9iYWxUaGlzLkFib3J0Q29udHJvbGxlcjtcbmxldCBBUyA9IGdsb2JhbFRoaXMuQWJvcnRTaWduYWw7XG4vKiBjOCBpZ25vcmUgc3RhcnQgKi9cbmlmICh0eXBlb2YgQUMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgLy9AdHMtaWdub3JlXG4gICAgQVMgPSBjbGFzcyBBYm9ydFNpZ25hbCB7XG4gICAgICAgIG9uYWJvcnQ7XG4gICAgICAgIF9vbmFib3J0ID0gW107XG4gICAgICAgIHJlYXNvbjtcbiAgICAgICAgYWJvcnRlZCA9IGZhbHNlO1xuICAgICAgICBhZGRFdmVudExpc3RlbmVyKF8sIGZuKSB7XG4gICAgICAgICAgICB0aGlzLl9vbmFib3J0LnB1c2goZm4pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICAvL0B0cy1pZ25vcmVcbiAgICBBQyA9IGNsYXNzIEFib3J0Q29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgd2FybkFDUG9seWZpbGwoKTtcbiAgICAgICAgfVxuICAgICAgICBzaWduYWwgPSBuZXcgQVMoKTtcbiAgICAgICAgYWJvcnQocmVhc29uKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zaWduYWwuYWJvcnRlZClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAvL0B0cy1pZ25vcmVcbiAgICAgICAgICAgIHRoaXMuc2lnbmFsLnJlYXNvbiA9IHJlYXNvbjtcbiAgICAgICAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgICAgICAgdGhpcy5zaWduYWwuYWJvcnRlZCA9IHRydWU7XG4gICAgICAgICAgICAvL0B0cy1pZ25vcmVcbiAgICAgICAgICAgIGZvciAoY29uc3QgZm4gb2YgdGhpcy5zaWduYWwuX29uYWJvcnQpIHtcbiAgICAgICAgICAgICAgICBmbihyZWFzb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zaWduYWwub25hYm9ydD8uKHJlYXNvbik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGxldCBwcmludEFDUG9seWZpbGxXYXJuaW5nID0gUFJPQ0VTUy5lbnY/LkxSVV9DQUNIRV9JR05PUkVfQUNfV0FSTklORyAhPT0gJzEnO1xuICAgIGNvbnN0IHdhcm5BQ1BvbHlmaWxsID0gKCkgPT4ge1xuICAgICAgICBpZiAoIXByaW50QUNQb2x5ZmlsbFdhcm5pbmcpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHByaW50QUNQb2x5ZmlsbFdhcm5pbmcgPSBmYWxzZTtcbiAgICAgICAgZW1pdFdhcm5pbmcoJ0Fib3J0Q29udHJvbGxlciBpcyBub3QgZGVmaW5lZC4gSWYgdXNpbmcgbHJ1LWNhY2hlIGluICcgK1xuICAgICAgICAgICAgJ25vZGUgMTQsIGxvYWQgYW4gQWJvcnRDb250cm9sbGVyIHBvbHlmaWxsIGZyb20gdGhlICcgK1xuICAgICAgICAgICAgJ2Bub2RlLWFib3J0LWNvbnRyb2xsZXJgIHBhY2thZ2UuIEEgbWluaW1hbCBwb2x5ZmlsbCBpcyAnICtcbiAgICAgICAgICAgICdwcm92aWRlZCBmb3IgdXNlIGJ5IExSVUNhY2hlLmZldGNoKCksIGJ1dCBpdCBzaG91bGQgbm90IGJlICcgK1xuICAgICAgICAgICAgJ3JlbGllZCB1cG9uIGluIG90aGVyIGNvbnRleHRzIChlZywgcGFzc2luZyBpdCB0byBvdGhlciBBUElzIHRoYXQgJyArXG4gICAgICAgICAgICAndXNlIEFib3J0Q29udHJvbGxlci9BYm9ydFNpZ25hbCBtaWdodCBoYXZlIHVuZGVzaXJhYmxlIGVmZmVjdHMpLiAnICtcbiAgICAgICAgICAgICdZb3UgbWF5IGRpc2FibGUgdGhpcyB3aXRoIExSVV9DQUNIRV9JR05PUkVfQUNfV0FSTklORz0xIGluIHRoZSBlbnYuJywgJ05PX0FCT1JUX0NPTlRST0xMRVInLCAnRU5PVFNVUCcsIHdhcm5BQ1BvbHlmaWxsKTtcbiAgICB9O1xufVxuLyogYzggaWdub3JlIHN0b3AgKi9cbmNvbnN0IHNob3VsZFdhcm4gPSAoY29kZSkgPT4gIXdhcm5lZC5oYXMoY29kZSk7XG5jb25zdCBUWVBFID0gU3ltYm9sKCd0eXBlJyk7XG5jb25zdCBpc1Bvc0ludCA9IChuKSA9PiBuICYmIG4gPT09IE1hdGguZmxvb3IobikgJiYgbiA+IDAgJiYgaXNGaW5pdGUobik7XG4vKiBjOCBpZ25vcmUgc3RhcnQgKi9cbi8vIFRoaXMgaXMgYSBsaXR0bGUgYml0IHJpZGljdWxvdXMsIHRiaC5cbi8vIFRoZSBtYXhpbXVtIGFycmF5IGxlbmd0aCBpcyAyXjMyLTEgb3IgdGhlcmVhYm91dHMgb24gbW9zdCBKUyBpbXBscy5cbi8vIEFuZCB3ZWxsIGJlZm9yZSB0aGF0IHBvaW50LCB5b3UncmUgY2FjaGluZyB0aGUgZW50aXJlIHdvcmxkLCBJIG1lYW4sXG4vLyB0aGF0J3MgfjMyR0Igb2YganVzdCBpbnRlZ2VycyBmb3IgdGhlIG5leHQvcHJldiBsaW5rcywgcGx1cyB3aGF0ZXZlclxuLy8gZWxzZSB0byBob2xkIHRoYXQgbWFueSBrZXlzIGFuZCB2YWx1ZXMuICBKdXN0IGZpbGxpbmcgdGhlIG1lbW9yeSB3aXRoXG4vLyB6ZXJvZXMgYXQgaW5pdCB0aW1lIGlzIGJydXRhbCB3aGVuIHlvdSBnZXQgdGhhdCBiaWcuXG4vLyBCdXQgd2h5IG5vdCBiZSBjb21wbGV0ZT9cbi8vIE1heWJlIGluIHRoZSBmdXR1cmUsIHRoZXNlIGxpbWl0cyB3aWxsIGhhdmUgZXhwYW5kZWQuXG5jb25zdCBnZXRVaW50QXJyYXkgPSAobWF4KSA9PiAhaXNQb3NJbnQobWF4KVxuICAgID8gbnVsbFxuICAgIDogbWF4IDw9IE1hdGgucG93KDIsIDgpXG4gICAgICAgID8gVWludDhBcnJheVxuICAgICAgICA6IG1heCA8PSBNYXRoLnBvdygyLCAxNilcbiAgICAgICAgICAgID8gVWludDE2QXJyYXlcbiAgICAgICAgICAgIDogbWF4IDw9IE1hdGgucG93KDIsIDMyKVxuICAgICAgICAgICAgICAgID8gVWludDMyQXJyYXlcbiAgICAgICAgICAgICAgICA6IG1heCA8PSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUlxuICAgICAgICAgICAgICAgICAgICA/IFplcm9BcnJheVxuICAgICAgICAgICAgICAgICAgICA6IG51bGw7XG4vKiBjOCBpZ25vcmUgc3RvcCAqL1xuY2xhc3MgWmVyb0FycmF5IGV4dGVuZHMgQXJyYXkge1xuICAgIGNvbnN0cnVjdG9yKHNpemUpIHtcbiAgICAgICAgc3VwZXIoc2l6ZSk7XG4gICAgICAgIHRoaXMuZmlsbCgwKTtcbiAgICB9XG59XG5jbGFzcyBTdGFjayB7XG4gICAgaGVhcDtcbiAgICBsZW5ndGg7XG4gICAgLy8gcHJpdmF0ZSBjb25zdHJ1Y3RvclxuICAgIHN0YXRpYyAjY29uc3RydWN0aW5nID0gZmFsc2U7XG4gICAgc3RhdGljIGNyZWF0ZShtYXgpIHtcbiAgICAgICAgY29uc3QgSGVhcENscyA9IGdldFVpbnRBcnJheShtYXgpO1xuICAgICAgICBpZiAoIUhlYXBDbHMpXG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIFN0YWNrLiNjb25zdHJ1Y3RpbmcgPSB0cnVlO1xuICAgICAgICBjb25zdCBzID0gbmV3IFN0YWNrKG1heCwgSGVhcENscyk7XG4gICAgICAgIFN0YWNrLiNjb25zdHJ1Y3RpbmcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHM7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKG1heCwgSGVhcENscykge1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgaWYgKCFTdGFjay4jY29uc3RydWN0aW5nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnN0YW50aWF0ZSBTdGFjayB1c2luZyBTdGFjay5jcmVhdGUobiknKTtcbiAgICAgICAgfVxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICB0aGlzLmhlYXAgPSBuZXcgSGVhcENscyhtYXgpO1xuICAgICAgICB0aGlzLmxlbmd0aCA9IDA7XG4gICAgfVxuICAgIHB1c2gobikge1xuICAgICAgICB0aGlzLmhlYXBbdGhpcy5sZW5ndGgrK10gPSBuO1xuICAgIH1cbiAgICBwb3AoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhlYXBbLS10aGlzLmxlbmd0aF07XG4gICAgfVxufVxuLyoqXG4gKiBEZWZhdWx0IGV4cG9ydCwgdGhlIHRoaW5nIHlvdSdyZSB1c2luZyB0aGlzIG1vZHVsZSB0byBnZXQuXG4gKlxuICogVGhlIGBLYCBhbmQgYFZgIHR5cGVzIGRlZmluZSB0aGUga2V5IGFuZCB2YWx1ZSB0eXBlcywgcmVzcGVjdGl2ZWx5LiBUaGVcbiAqIG9wdGlvbmFsIGBGQ2AgdHlwZSBkZWZpbmVzIHRoZSB0eXBlIG9mIHRoZSBgY29udGV4dGAgb2JqZWN0IHBhc3NlZCB0b1xuICogYGNhY2hlLmZldGNoKClgIGFuZCBgY2FjaGUubWVtbygpYC5cbiAqXG4gKiBLZXlzIGFuZCB2YWx1ZXMgKiptdXN0IG5vdCoqIGJlIGBudWxsYCBvciBgdW5kZWZpbmVkYC5cbiAqXG4gKiBBbGwgcHJvcGVydGllcyBmcm9tIHRoZSBvcHRpb25zIG9iamVjdCAod2l0aCB0aGUgZXhjZXB0aW9uIG9mIGBtYXhgLFxuICogYG1heFNpemVgLCBgZmV0Y2hNZXRob2RgLCBgbWVtb01ldGhvZGAsIGBkaXNwb3NlYCBhbmQgYGRpc3Bvc2VBZnRlcmApIGFyZVxuICogYWRkZWQgYXMgbm9ybWFsIHB1YmxpYyBtZW1iZXJzLiAoVGhlIGxpc3RlZCBvcHRpb25zIGFyZSByZWFkLW9ubHkgZ2V0dGVycy4pXG4gKlxuICogQ2hhbmdpbmcgYW55IG9mIHRoZXNlIHdpbGwgYWx0ZXIgdGhlIGRlZmF1bHRzIGZvciBzdWJzZXF1ZW50IG1ldGhvZCBjYWxscy5cbiAqL1xuY2xhc3MgTFJVQ2FjaGUge1xuICAgIC8vIG9wdGlvbnMgdGhhdCBjYW5ub3QgYmUgY2hhbmdlZCB3aXRob3V0IGRpc2FzdGVyXG4gICAgI21heDtcbiAgICAjbWF4U2l6ZTtcbiAgICAjZGlzcG9zZTtcbiAgICAjZGlzcG9zZUFmdGVyO1xuICAgICNmZXRjaE1ldGhvZDtcbiAgICAjbWVtb01ldGhvZDtcbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UudHRsfVxuICAgICAqL1xuICAgIHR0bDtcbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UudHRsUmVzb2x1dGlvbn1cbiAgICAgKi9cbiAgICB0dGxSZXNvbHV0aW9uO1xuICAgIC8qKlxuICAgICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS50dGxBdXRvcHVyZ2V9XG4gICAgICovXG4gICAgdHRsQXV0b3B1cmdlO1xuICAgIC8qKlxuICAgICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS51cGRhdGVBZ2VPbkdldH1cbiAgICAgKi9cbiAgICB1cGRhdGVBZ2VPbkdldDtcbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UudXBkYXRlQWdlT25IYXN9XG4gICAgICovXG4gICAgdXBkYXRlQWdlT25IYXM7XG4gICAgLyoqXG4gICAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLmFsbG93U3RhbGV9XG4gICAgICovXG4gICAgYWxsb3dTdGFsZTtcbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2Uubm9EaXNwb3NlT25TZXR9XG4gICAgICovXG4gICAgbm9EaXNwb3NlT25TZXQ7XG4gICAgLyoqXG4gICAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLm5vVXBkYXRlVFRMfVxuICAgICAqL1xuICAgIG5vVXBkYXRlVFRMO1xuICAgIC8qKlxuICAgICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5tYXhFbnRyeVNpemV9XG4gICAgICovXG4gICAgbWF4RW50cnlTaXplO1xuICAgIC8qKlxuICAgICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5zaXplQ2FsY3VsYXRpb259XG4gICAgICovXG4gICAgc2l6ZUNhbGN1bGF0aW9uO1xuICAgIC8qKlxuICAgICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5ub0RlbGV0ZU9uRmV0Y2hSZWplY3Rpb259XG4gICAgICovXG4gICAgbm9EZWxldGVPbkZldGNoUmVqZWN0aW9uO1xuICAgIC8qKlxuICAgICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5ub0RlbGV0ZU9uU3RhbGVHZXR9XG4gICAgICovXG4gICAgbm9EZWxldGVPblN0YWxlR2V0O1xuICAgIC8qKlxuICAgICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5hbGxvd1N0YWxlT25GZXRjaEFib3J0fVxuICAgICAqL1xuICAgIGFsbG93U3RhbGVPbkZldGNoQWJvcnQ7XG4gICAgLyoqXG4gICAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLmFsbG93U3RhbGVPbkZldGNoUmVqZWN0aW9ufVxuICAgICAqL1xuICAgIGFsbG93U3RhbGVPbkZldGNoUmVqZWN0aW9uO1xuICAgIC8qKlxuICAgICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5pZ25vcmVGZXRjaEFib3J0fVxuICAgICAqL1xuICAgIGlnbm9yZUZldGNoQWJvcnQ7XG4gICAgLy8gY29tcHV0ZWQgcHJvcGVydGllc1xuICAgICNzaXplO1xuICAgICNjYWxjdWxhdGVkU2l6ZTtcbiAgICAja2V5TWFwO1xuICAgICNrZXlMaXN0O1xuICAgICN2YWxMaXN0O1xuICAgICNuZXh0O1xuICAgICNwcmV2O1xuICAgICNoZWFkO1xuICAgICN0YWlsO1xuICAgICNmcmVlO1xuICAgICNkaXNwb3NlZDtcbiAgICAjc2l6ZXM7XG4gICAgI3N0YXJ0cztcbiAgICAjdHRscztcbiAgICAjaGFzRGlzcG9zZTtcbiAgICAjaGFzRmV0Y2hNZXRob2Q7XG4gICAgI2hhc0Rpc3Bvc2VBZnRlcjtcbiAgICAvKipcbiAgICAgKiBEbyBub3QgY2FsbCB0aGlzIG1ldGhvZCB1bmxlc3MgeW91IG5lZWQgdG8gaW5zcGVjdCB0aGVcbiAgICAgKiBpbm5lciB3b3JraW5ncyBvZiB0aGUgY2FjaGUuICBJZiBhbnl0aGluZyByZXR1cm5lZCBieSB0aGlzXG4gICAgICogb2JqZWN0IGlzIG1vZGlmaWVkIGluIGFueSB3YXksIHN0cmFuZ2UgYnJlYWthZ2UgbWF5IG9jY3VyLlxuICAgICAqXG4gICAgICogVGhlc2UgZmllbGRzIGFyZSBwcml2YXRlIGZvciBhIHJlYXNvbiFcbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHN0YXRpYyB1bnNhZmVFeHBvc2VJbnRlcm5hbHMoYykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLy8gcHJvcGVydGllc1xuICAgICAgICAgICAgc3RhcnRzOiBjLiNzdGFydHMsXG4gICAgICAgICAgICB0dGxzOiBjLiN0dGxzLFxuICAgICAgICAgICAgc2l6ZXM6IGMuI3NpemVzLFxuICAgICAgICAgICAga2V5TWFwOiBjLiNrZXlNYXAsXG4gICAgICAgICAgICBrZXlMaXN0OiBjLiNrZXlMaXN0LFxuICAgICAgICAgICAgdmFsTGlzdDogYy4jdmFsTGlzdCxcbiAgICAgICAgICAgIG5leHQ6IGMuI25leHQsXG4gICAgICAgICAgICBwcmV2OiBjLiNwcmV2LFxuICAgICAgICAgICAgZ2V0IGhlYWQoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGMuI2hlYWQ7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0IHRhaWwoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGMuI3RhaWw7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZnJlZTogYy4jZnJlZSxcbiAgICAgICAgICAgIC8vIG1ldGhvZHNcbiAgICAgICAgICAgIGlzQmFja2dyb3VuZEZldGNoOiAocCkgPT4gYy4jaXNCYWNrZ3JvdW5kRmV0Y2gocCksXG4gICAgICAgICAgICBiYWNrZ3JvdW5kRmV0Y2g6IChrLCBpbmRleCwgb3B0aW9ucywgY29udGV4dCkgPT4gYy4jYmFja2dyb3VuZEZldGNoKGssIGluZGV4LCBvcHRpb25zLCBjb250ZXh0KSxcbiAgICAgICAgICAgIG1vdmVUb1RhaWw6IChpbmRleCkgPT4gYy4jbW92ZVRvVGFpbChpbmRleCksXG4gICAgICAgICAgICBpbmRleGVzOiAob3B0aW9ucykgPT4gYy4jaW5kZXhlcyhvcHRpb25zKSxcbiAgICAgICAgICAgIHJpbmRleGVzOiAob3B0aW9ucykgPT4gYy4jcmluZGV4ZXMob3B0aW9ucyksXG4gICAgICAgICAgICBpc1N0YWxlOiAoaW5kZXgpID0+IGMuI2lzU3RhbGUoaW5kZXgpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICAvLyBQcm90ZWN0ZWQgcmVhZC1vbmx5IG1lbWJlcnNcbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UubWF4fSAocmVhZC1vbmx5KVxuICAgICAqL1xuICAgIGdldCBtYXgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNtYXg7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5tYXhTaXplfSAocmVhZC1vbmx5KVxuICAgICAqL1xuICAgIGdldCBtYXhTaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jbWF4U2l6ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIHRvdGFsIGNvbXB1dGVkIHNpemUgb2YgaXRlbXMgaW4gdGhlIGNhY2hlIChyZWFkLW9ubHkpXG4gICAgICovXG4gICAgZ2V0IGNhbGN1bGF0ZWRTaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jY2FsY3VsYXRlZFNpemU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2YgaXRlbXMgc3RvcmVkIGluIHRoZSBjYWNoZSAocmVhZC1vbmx5KVxuICAgICAqL1xuICAgIGdldCBzaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jc2l6ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLmZldGNoTWV0aG9kfSAocmVhZC1vbmx5KVxuICAgICAqL1xuICAgIGdldCBmZXRjaE1ldGhvZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2ZldGNoTWV0aG9kO1xuICAgIH1cbiAgICBnZXQgbWVtb01ldGhvZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI21lbW9NZXRob2Q7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5kaXNwb3NlfSAocmVhZC1vbmx5KVxuICAgICAqL1xuICAgIGdldCBkaXNwb3NlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jZGlzcG9zZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLmRpc3Bvc2VBZnRlcn0gKHJlYWQtb25seSlcbiAgICAgKi9cbiAgICBnZXQgZGlzcG9zZUFmdGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jZGlzcG9zZUFmdGVyO1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHsgbWF4ID0gMCwgdHRsLCB0dGxSZXNvbHV0aW9uID0gMSwgdHRsQXV0b3B1cmdlLCB1cGRhdGVBZ2VPbkdldCwgdXBkYXRlQWdlT25IYXMsIGFsbG93U3RhbGUsIGRpc3Bvc2UsIGRpc3Bvc2VBZnRlciwgbm9EaXNwb3NlT25TZXQsIG5vVXBkYXRlVFRMLCBtYXhTaXplID0gMCwgbWF4RW50cnlTaXplID0gMCwgc2l6ZUNhbGN1bGF0aW9uLCBmZXRjaE1ldGhvZCwgbWVtb01ldGhvZCwgbm9EZWxldGVPbkZldGNoUmVqZWN0aW9uLCBub0RlbGV0ZU9uU3RhbGVHZXQsIGFsbG93U3RhbGVPbkZldGNoUmVqZWN0aW9uLCBhbGxvd1N0YWxlT25GZXRjaEFib3J0LCBpZ25vcmVGZXRjaEFib3J0LCB9ID0gb3B0aW9ucztcbiAgICAgICAgaWYgKG1heCAhPT0gMCAmJiAhaXNQb3NJbnQobWF4KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbWF4IG9wdGlvbiBtdXN0IGJlIGEgbm9ubmVnYXRpdmUgaW50ZWdlcicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IFVpbnRBcnJheSA9IG1heCA/IGdldFVpbnRBcnJheShtYXgpIDogQXJyYXk7XG4gICAgICAgIGlmICghVWludEFycmF5KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgbWF4IHZhbHVlOiAnICsgbWF4KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiNtYXggPSBtYXg7XG4gICAgICAgIHRoaXMuI21heFNpemUgPSBtYXhTaXplO1xuICAgICAgICB0aGlzLm1heEVudHJ5U2l6ZSA9IG1heEVudHJ5U2l6ZSB8fCB0aGlzLiNtYXhTaXplO1xuICAgICAgICB0aGlzLnNpemVDYWxjdWxhdGlvbiA9IHNpemVDYWxjdWxhdGlvbjtcbiAgICAgICAgaWYgKHRoaXMuc2l6ZUNhbGN1bGF0aW9uKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuI21heFNpemUgJiYgIXRoaXMubWF4RW50cnlTaXplKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignY2Fubm90IHNldCBzaXplQ2FsY3VsYXRpb24gd2l0aG91dCBzZXR0aW5nIG1heFNpemUgb3IgbWF4RW50cnlTaXplJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2l6ZUNhbGN1bGF0aW9uICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc2l6ZUNhbGN1bGF0aW9uIHNldCB0byBub24tZnVuY3Rpb24nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobWVtb01ldGhvZCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICB0eXBlb2YgbWVtb01ldGhvZCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbWVtb01ldGhvZCBtdXN0IGJlIGEgZnVuY3Rpb24gaWYgZGVmaW5lZCcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuI21lbW9NZXRob2QgPSBtZW1vTWV0aG9kO1xuICAgICAgICBpZiAoZmV0Y2hNZXRob2QgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgdHlwZW9mIGZldGNoTWV0aG9kICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdmZXRjaE1ldGhvZCBtdXN0IGJlIGEgZnVuY3Rpb24gaWYgc3BlY2lmaWVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4jZmV0Y2hNZXRob2QgPSBmZXRjaE1ldGhvZDtcbiAgICAgICAgdGhpcy4jaGFzRmV0Y2hNZXRob2QgPSAhIWZldGNoTWV0aG9kO1xuICAgICAgICB0aGlzLiNrZXlNYXAgPSBuZXcgTWFwKCk7XG4gICAgICAgIHRoaXMuI2tleUxpc3QgPSBuZXcgQXJyYXkobWF4KS5maWxsKHVuZGVmaW5lZCk7XG4gICAgICAgIHRoaXMuI3ZhbExpc3QgPSBuZXcgQXJyYXkobWF4KS5maWxsKHVuZGVmaW5lZCk7XG4gICAgICAgIHRoaXMuI25leHQgPSBuZXcgVWludEFycmF5KG1heCk7XG4gICAgICAgIHRoaXMuI3ByZXYgPSBuZXcgVWludEFycmF5KG1heCk7XG4gICAgICAgIHRoaXMuI2hlYWQgPSAwO1xuICAgICAgICB0aGlzLiN0YWlsID0gMDtcbiAgICAgICAgdGhpcy4jZnJlZSA9IFN0YWNrLmNyZWF0ZShtYXgpO1xuICAgICAgICB0aGlzLiNzaXplID0gMDtcbiAgICAgICAgdGhpcy4jY2FsY3VsYXRlZFNpemUgPSAwO1xuICAgICAgICBpZiAodHlwZW9mIGRpc3Bvc2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRoaXMuI2Rpc3Bvc2UgPSBkaXNwb3NlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgZGlzcG9zZUFmdGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aGlzLiNkaXNwb3NlQWZ0ZXIgPSBkaXNwb3NlQWZ0ZXI7XG4gICAgICAgICAgICB0aGlzLiNkaXNwb3NlZCA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy4jZGlzcG9zZUFmdGVyID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy4jZGlzcG9zZWQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4jaGFzRGlzcG9zZSA9ICEhdGhpcy4jZGlzcG9zZTtcbiAgICAgICAgdGhpcy4jaGFzRGlzcG9zZUFmdGVyID0gISF0aGlzLiNkaXNwb3NlQWZ0ZXI7XG4gICAgICAgIHRoaXMubm9EaXNwb3NlT25TZXQgPSAhIW5vRGlzcG9zZU9uU2V0O1xuICAgICAgICB0aGlzLm5vVXBkYXRlVFRMID0gISFub1VwZGF0ZVRUTDtcbiAgICAgICAgdGhpcy5ub0RlbGV0ZU9uRmV0Y2hSZWplY3Rpb24gPSAhIW5vRGVsZXRlT25GZXRjaFJlamVjdGlvbjtcbiAgICAgICAgdGhpcy5hbGxvd1N0YWxlT25GZXRjaFJlamVjdGlvbiA9ICEhYWxsb3dTdGFsZU9uRmV0Y2hSZWplY3Rpb247XG4gICAgICAgIHRoaXMuYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydCA9ICEhYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydDtcbiAgICAgICAgdGhpcy5pZ25vcmVGZXRjaEFib3J0ID0gISFpZ25vcmVGZXRjaEFib3J0O1xuICAgICAgICAvLyBOQjogbWF4RW50cnlTaXplIGlzIHNldCB0byBtYXhTaXplIGlmIGl0J3Mgc2V0XG4gICAgICAgIGlmICh0aGlzLm1heEVudHJ5U2l6ZSAhPT0gMCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuI21heFNpemUgIT09IDApIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzUG9zSW50KHRoaXMuI21heFNpemUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ21heFNpemUgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgaWYgc3BlY2lmaWVkJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpc1Bvc0ludCh0aGlzLm1heEVudHJ5U2l6ZSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdtYXhFbnRyeVNpemUgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgaWYgc3BlY2lmaWVkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLiNpbml0aWFsaXplU2l6ZVRyYWNraW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hbGxvd1N0YWxlID0gISFhbGxvd1N0YWxlO1xuICAgICAgICB0aGlzLm5vRGVsZXRlT25TdGFsZUdldCA9ICEhbm9EZWxldGVPblN0YWxlR2V0O1xuICAgICAgICB0aGlzLnVwZGF0ZUFnZU9uR2V0ID0gISF1cGRhdGVBZ2VPbkdldDtcbiAgICAgICAgdGhpcy51cGRhdGVBZ2VPbkhhcyA9ICEhdXBkYXRlQWdlT25IYXM7XG4gICAgICAgIHRoaXMudHRsUmVzb2x1dGlvbiA9XG4gICAgICAgICAgICBpc1Bvc0ludCh0dGxSZXNvbHV0aW9uKSB8fCB0dGxSZXNvbHV0aW9uID09PSAwXG4gICAgICAgICAgICAgICAgPyB0dGxSZXNvbHV0aW9uXG4gICAgICAgICAgICAgICAgOiAxO1xuICAgICAgICB0aGlzLnR0bEF1dG9wdXJnZSA9ICEhdHRsQXV0b3B1cmdlO1xuICAgICAgICB0aGlzLnR0bCA9IHR0bCB8fCAwO1xuICAgICAgICBpZiAodGhpcy50dGwpIHtcbiAgICAgICAgICAgIGlmICghaXNQb3NJbnQodGhpcy50dGwpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndHRsIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIGlmIHNwZWNpZmllZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy4jaW5pdGlhbGl6ZVRUTFRyYWNraW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZG8gbm90IGFsbG93IGNvbXBsZXRlbHkgdW5ib3VuZGVkIGNhY2hlc1xuICAgICAgICBpZiAodGhpcy4jbWF4ID09PSAwICYmIHRoaXMudHRsID09PSAwICYmIHRoaXMuI21heFNpemUgPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0F0IGxlYXN0IG9uZSBvZiBtYXgsIG1heFNpemUsIG9yIHR0bCBpcyByZXF1aXJlZCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy50dGxBdXRvcHVyZ2UgJiYgIXRoaXMuI21heCAmJiAhdGhpcy4jbWF4U2l6ZSkge1xuICAgICAgICAgICAgY29uc3QgY29kZSA9ICdMUlVfQ0FDSEVfVU5CT1VOREVEJztcbiAgICAgICAgICAgIGlmIChzaG91bGRXYXJuKGNvZGUpKSB7XG4gICAgICAgICAgICAgICAgd2FybmVkLmFkZChjb2RlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBtc2cgPSAnVFRMIGNhY2hpbmcgd2l0aG91dCB0dGxBdXRvcHVyZ2UsIG1heCwgb3IgbWF4U2l6ZSBjYW4gJyArXG4gICAgICAgICAgICAgICAgICAgICdyZXN1bHQgaW4gdW5ib3VuZGVkIG1lbW9yeSBjb25zdW1wdGlvbi4nO1xuICAgICAgICAgICAgICAgIGVtaXRXYXJuaW5nKG1zZywgJ1VuYm91bmRlZENhY2hlV2FybmluZycsIGNvZGUsIExSVUNhY2hlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBtcyBsZWZ0IGluIHRoZSBpdGVtJ3MgVFRMLiBJZiBpdGVtIGlzIG5vdCBpbiBjYWNoZSxcbiAgICAgKiByZXR1cm5zIGAwYC4gUmV0dXJucyBgSW5maW5pdHlgIGlmIGl0ZW0gaXMgaW4gY2FjaGUgd2l0aG91dCBhIGRlZmluZWQgVFRMLlxuICAgICAqL1xuICAgIGdldFJlbWFpbmluZ1RUTChrZXkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2tleU1hcC5oYXMoa2V5KSA/IEluZmluaXR5IDogMDtcbiAgICB9XG4gICAgI2luaXRpYWxpemVUVExUcmFja2luZygpIHtcbiAgICAgICAgY29uc3QgdHRscyA9IG5ldyBaZXJvQXJyYXkodGhpcy4jbWF4KTtcbiAgICAgICAgY29uc3Qgc3RhcnRzID0gbmV3IFplcm9BcnJheSh0aGlzLiNtYXgpO1xuICAgICAgICB0aGlzLiN0dGxzID0gdHRscztcbiAgICAgICAgdGhpcy4jc3RhcnRzID0gc3RhcnRzO1xuICAgICAgICB0aGlzLiNzZXRJdGVtVFRMID0gKGluZGV4LCB0dGwsIHN0YXJ0ID0gcGVyZi5ub3coKSkgPT4ge1xuICAgICAgICAgICAgc3RhcnRzW2luZGV4XSA9IHR0bCAhPT0gMCA/IHN0YXJ0IDogMDtcbiAgICAgICAgICAgIHR0bHNbaW5kZXhdID0gdHRsO1xuICAgICAgICAgICAgaWYgKHR0bCAhPT0gMCAmJiB0aGlzLnR0bEF1dG9wdXJnZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuI2lzU3RhbGUoaW5kZXgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiNkZWxldGUodGhpcy4ja2V5TGlzdFtpbmRleF0sICdleHBpcmUnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIHR0bCArIDEpO1xuICAgICAgICAgICAgICAgIC8vIHVucmVmKCkgbm90IHN1cHBvcnRlZCBvbiBhbGwgcGxhdGZvcm1zXG4gICAgICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICAgICAgaWYgKHQudW5yZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgdC51bnJlZigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLiN1cGRhdGVJdGVtQWdlID0gaW5kZXggPT4ge1xuICAgICAgICAgICAgc3RhcnRzW2luZGV4XSA9IHR0bHNbaW5kZXhdICE9PSAwID8gcGVyZi5ub3coKSA6IDA7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuI3N0YXR1c1RUTCA9IChzdGF0dXMsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAodHRsc1tpbmRleF0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0dGwgPSB0dGxzW2luZGV4XTtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydCA9IHN0YXJ0c1tpbmRleF07XG4gICAgICAgICAgICAgICAgLyogYzggaWdub3JlIG5leHQgKi9cbiAgICAgICAgICAgICAgICBpZiAoIXR0bCB8fCAhc3RhcnQpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBzdGF0dXMudHRsID0gdHRsO1xuICAgICAgICAgICAgICAgIHN0YXR1cy5zdGFydCA9IHN0YXJ0O1xuICAgICAgICAgICAgICAgIHN0YXR1cy5ub3cgPSBjYWNoZWROb3cgfHwgZ2V0Tm93KCk7XG4gICAgICAgICAgICAgICAgY29uc3QgYWdlID0gc3RhdHVzLm5vdyAtIHN0YXJ0O1xuICAgICAgICAgICAgICAgIHN0YXR1cy5yZW1haW5pbmdUVEwgPSB0dGwgLSBhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIC8vIGRlYm91bmNlIGNhbGxzIHRvIHBlcmYubm93KCkgdG8gMXMgc28gd2UncmUgbm90IGhpdHRpbmdcbiAgICAgICAgLy8gdGhhdCBjb3N0bHkgY2FsbCByZXBlYXRlZGx5LlxuICAgICAgICBsZXQgY2FjaGVkTm93ID0gMDtcbiAgICAgICAgY29uc3QgZ2V0Tm93ID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbiA9IHBlcmYubm93KCk7XG4gICAgICAgICAgICBpZiAodGhpcy50dGxSZXNvbHV0aW9uID4gMCkge1xuICAgICAgICAgICAgICAgIGNhY2hlZE5vdyA9IG47XG4gICAgICAgICAgICAgICAgY29uc3QgdCA9IHNldFRpbWVvdXQoKCkgPT4gKGNhY2hlZE5vdyA9IDApLCB0aGlzLnR0bFJlc29sdXRpb24pO1xuICAgICAgICAgICAgICAgIC8vIG5vdCBhdmFpbGFibGUgb24gYWxsIHBsYXRmb3Jtc1xuICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICAgICAgICAgIGlmICh0LnVucmVmKSB7XG4gICAgICAgICAgICAgICAgICAgIHQudW5yZWYoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmdldFJlbWFpbmluZ1RUTCA9IGtleSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuI2tleU1hcC5nZXQoa2V5KTtcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB0dGwgPSB0dGxzW2luZGV4XTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gc3RhcnRzW2luZGV4XTtcbiAgICAgICAgICAgIGlmICghdHRsIHx8ICFzdGFydCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBJbmZpbml0eTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGFnZSA9IChjYWNoZWROb3cgfHwgZ2V0Tm93KCkpIC0gc3RhcnQ7XG4gICAgICAgICAgICByZXR1cm4gdHRsIC0gYWdlO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLiNpc1N0YWxlID0gaW5kZXggPT4ge1xuICAgICAgICAgICAgY29uc3QgcyA9IHN0YXJ0c1tpbmRleF07XG4gICAgICAgICAgICBjb25zdCB0ID0gdHRsc1tpbmRleF07XG4gICAgICAgICAgICByZXR1cm4gISF0ICYmICEhcyAmJiAoY2FjaGVkTm93IHx8IGdldE5vdygpKSAtIHMgPiB0O1xuICAgICAgICB9O1xuICAgIH1cbiAgICAvLyBjb25kaXRpb25hbGx5IHNldCBwcml2YXRlIG1ldGhvZHMgcmVsYXRlZCB0byBUVExcbiAgICAjdXBkYXRlSXRlbUFnZSA9ICgpID0+IHsgfTtcbiAgICAjc3RhdHVzVFRMID0gKCkgPT4geyB9O1xuICAgICNzZXRJdGVtVFRMID0gKCkgPT4geyB9O1xuICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgI2lzU3RhbGUgPSAoKSA9PiBmYWxzZTtcbiAgICAjaW5pdGlhbGl6ZVNpemVUcmFja2luZygpIHtcbiAgICAgICAgY29uc3Qgc2l6ZXMgPSBuZXcgWmVyb0FycmF5KHRoaXMuI21heCk7XG4gICAgICAgIHRoaXMuI2NhbGN1bGF0ZWRTaXplID0gMDtcbiAgICAgICAgdGhpcy4jc2l6ZXMgPSBzaXplcztcbiAgICAgICAgdGhpcy4jcmVtb3ZlSXRlbVNpemUgPSBpbmRleCA9PiB7XG4gICAgICAgICAgICB0aGlzLiNjYWxjdWxhdGVkU2l6ZSAtPSBzaXplc1tpbmRleF07XG4gICAgICAgICAgICBzaXplc1tpbmRleF0gPSAwO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLiNyZXF1aXJlU2l6ZSA9IChrLCB2LCBzaXplLCBzaXplQ2FsY3VsYXRpb24pID0+IHtcbiAgICAgICAgICAgIC8vIHByb3Zpc2lvbmFsbHkgYWNjZXB0IGJhY2tncm91bmQgZmV0Y2hlcy5cbiAgICAgICAgICAgIC8vIGFjdHVhbCB2YWx1ZSBzaXplIHdpbGwgYmUgY2hlY2tlZCB3aGVuIHRoZXkgcmV0dXJuLlxuICAgICAgICAgICAgaWYgKHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHYpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWlzUG9zSW50KHNpemUpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNpemVDYWxjdWxhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNpemVDYWxjdWxhdGlvbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc2l6ZUNhbGN1bGF0aW9uIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHNpemUgPSBzaXplQ2FsY3VsYXRpb24odiwgayk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNQb3NJbnQoc2l6ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3NpemVDYWxjdWxhdGlvbiByZXR1cm4gaW52YWxpZCAoZXhwZWN0IHBvc2l0aXZlIGludGVnZXIpJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludmFsaWQgc2l6ZSB2YWx1ZSAobXVzdCBiZSBwb3NpdGl2ZSBpbnRlZ2VyKS4gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnV2hlbiBtYXhTaXplIG9yIG1heEVudHJ5U2l6ZSBpcyB1c2VkLCBzaXplQ2FsY3VsYXRpb24gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnb3Igc2l6ZSBtdXN0IGJlIHNldC4nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc2l6ZTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy4jYWRkSXRlbVNpemUgPSAoaW5kZXgsIHNpemUsIHN0YXR1cykgPT4ge1xuICAgICAgICAgICAgc2l6ZXNbaW5kZXhdID0gc2l6ZTtcbiAgICAgICAgICAgIGlmICh0aGlzLiNtYXhTaXplKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWF4U2l6ZSA9IHRoaXMuI21heFNpemUgLSBzaXplc1tpbmRleF07XG4gICAgICAgICAgICAgICAgd2hpbGUgKHRoaXMuI2NhbGN1bGF0ZWRTaXplID4gbWF4U2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiNldmljdCh0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLiNjYWxjdWxhdGVkU2l6ZSArPSBzaXplc1tpbmRleF07XG4gICAgICAgICAgICBpZiAoc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgc3RhdHVzLmVudHJ5U2l6ZSA9IHNpemU7XG4gICAgICAgICAgICAgICAgc3RhdHVzLnRvdGFsQ2FsY3VsYXRlZFNpemUgPSB0aGlzLiNjYWxjdWxhdGVkU2l6ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgI3JlbW92ZUl0ZW1TaXplID0gX2kgPT4geyB9O1xuICAgICNhZGRJdGVtU2l6ZSA9IChfaSwgX3MsIF9zdCkgPT4geyB9O1xuICAgICNyZXF1aXJlU2l6ZSA9IChfaywgX3YsIHNpemUsIHNpemVDYWxjdWxhdGlvbikgPT4ge1xuICAgICAgICBpZiAoc2l6ZSB8fCBzaXplQ2FsY3VsYXRpb24pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2Nhbm5vdCBzZXQgc2l6ZSB3aXRob3V0IHNldHRpbmcgbWF4U2l6ZSBvciBtYXhFbnRyeVNpemUgb24gY2FjaGUnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMDtcbiAgICB9O1xuICAgICojaW5kZXhlcyh7IGFsbG93U3RhbGUgPSB0aGlzLmFsbG93U3RhbGUgfSA9IHt9KSB7XG4gICAgICAgIGlmICh0aGlzLiNzaXplKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gdGhpcy4jdGFpbDsgdHJ1ZTspIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuI2lzVmFsaWRJbmRleChpKSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGFsbG93U3RhbGUgfHwgIXRoaXMuI2lzU3RhbGUoaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGkgPT09IHRoaXMuI2hlYWQpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpID0gdGhpcy4jcHJldltpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgKiNyaW5kZXhlcyh7IGFsbG93U3RhbGUgPSB0aGlzLmFsbG93U3RhbGUgfSA9IHt9KSB7XG4gICAgICAgIGlmICh0aGlzLiNzaXplKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gdGhpcy4jaGVhZDsgdHJ1ZTspIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuI2lzVmFsaWRJbmRleChpKSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGFsbG93U3RhbGUgfHwgIXRoaXMuI2lzU3RhbGUoaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGkgPT09IHRoaXMuI3RhaWwpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpID0gdGhpcy4jbmV4dFtpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgI2lzVmFsaWRJbmRleChpbmRleCkge1xuICAgICAgICByZXR1cm4gKGluZGV4ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIHRoaXMuI2tleU1hcC5nZXQodGhpcy4ja2V5TGlzdFtpbmRleF0pID09PSBpbmRleCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiBhIGdlbmVyYXRvciB5aWVsZGluZyBgW2tleSwgdmFsdWVdYCBwYWlycyxcbiAgICAgKiBpbiBvcmRlciBmcm9tIG1vc3QgcmVjZW50bHkgdXNlZCB0byBsZWFzdCByZWNlbnRseSB1c2VkLlxuICAgICAqL1xuICAgICplbnRyaWVzKCkge1xuICAgICAgICBmb3IgKGNvbnN0IGkgb2YgdGhpcy4jaW5kZXhlcygpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy4jdmFsTGlzdFtpXSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgdGhpcy4ja2V5TGlzdFtpXSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgIXRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHRoaXMuI3ZhbExpc3RbaV0pKSB7XG4gICAgICAgICAgICAgICAgeWllbGQgW3RoaXMuI2tleUxpc3RbaV0sIHRoaXMuI3ZhbExpc3RbaV1dO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEludmVyc2Ugb3JkZXIgdmVyc2lvbiBvZiB7QGxpbmsgTFJVQ2FjaGUuZW50cmllc31cbiAgICAgKlxuICAgICAqIFJldHVybiBhIGdlbmVyYXRvciB5aWVsZGluZyBgW2tleSwgdmFsdWVdYCBwYWlycyxcbiAgICAgKiBpbiBvcmRlciBmcm9tIGxlYXN0IHJlY2VudGx5IHVzZWQgdG8gbW9zdCByZWNlbnRseSB1c2VkLlxuICAgICAqL1xuICAgICpyZW50cmllcygpIHtcbiAgICAgICAgZm9yIChjb25zdCBpIG9mIHRoaXMuI3JpbmRleGVzKCkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLiN2YWxMaXN0W2ldICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICB0aGlzLiNrZXlMaXN0W2ldICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAhdGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2godGhpcy4jdmFsTGlzdFtpXSkpIHtcbiAgICAgICAgICAgICAgICB5aWVsZCBbdGhpcy4ja2V5TGlzdFtpXSwgdGhpcy4jdmFsTGlzdFtpXV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIGEgZ2VuZXJhdG9yIHlpZWxkaW5nIHRoZSBrZXlzIGluIHRoZSBjYWNoZSxcbiAgICAgKiBpbiBvcmRlciBmcm9tIG1vc3QgcmVjZW50bHkgdXNlZCB0byBsZWFzdCByZWNlbnRseSB1c2VkLlxuICAgICAqL1xuICAgICprZXlzKCkge1xuICAgICAgICBmb3IgKGNvbnN0IGkgb2YgdGhpcy4jaW5kZXhlcygpKSB7XG4gICAgICAgICAgICBjb25zdCBrID0gdGhpcy4ja2V5TGlzdFtpXTtcbiAgICAgICAgICAgIGlmIChrICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAhdGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2godGhpcy4jdmFsTGlzdFtpXSkpIHtcbiAgICAgICAgICAgICAgICB5aWVsZCBrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEludmVyc2Ugb3JkZXIgdmVyc2lvbiBvZiB7QGxpbmsgTFJVQ2FjaGUua2V5c31cbiAgICAgKlxuICAgICAqIFJldHVybiBhIGdlbmVyYXRvciB5aWVsZGluZyB0aGUga2V5cyBpbiB0aGUgY2FjaGUsXG4gICAgICogaW4gb3JkZXIgZnJvbSBsZWFzdCByZWNlbnRseSB1c2VkIHRvIG1vc3QgcmVjZW50bHkgdXNlZC5cbiAgICAgKi9cbiAgICAqcmtleXMoKSB7XG4gICAgICAgIGZvciAoY29uc3QgaSBvZiB0aGlzLiNyaW5kZXhlcygpKSB7XG4gICAgICAgICAgICBjb25zdCBrID0gdGhpcy4ja2V5TGlzdFtpXTtcbiAgICAgICAgICAgIGlmIChrICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAhdGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2godGhpcy4jdmFsTGlzdFtpXSkpIHtcbiAgICAgICAgICAgICAgICB5aWVsZCBrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiBhIGdlbmVyYXRvciB5aWVsZGluZyB0aGUgdmFsdWVzIGluIHRoZSBjYWNoZSxcbiAgICAgKiBpbiBvcmRlciBmcm9tIG1vc3QgcmVjZW50bHkgdXNlZCB0byBsZWFzdCByZWNlbnRseSB1c2VkLlxuICAgICAqL1xuICAgICp2YWx1ZXMoKSB7XG4gICAgICAgIGZvciAoY29uc3QgaSBvZiB0aGlzLiNpbmRleGVzKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHYgPSB0aGlzLiN2YWxMaXN0W2ldO1xuICAgICAgICAgICAgaWYgKHYgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICF0aGlzLiNpc0JhY2tncm91bmRGZXRjaCh0aGlzLiN2YWxMaXN0W2ldKSkge1xuICAgICAgICAgICAgICAgIHlpZWxkIHRoaXMuI3ZhbExpc3RbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogSW52ZXJzZSBvcmRlciB2ZXJzaW9uIG9mIHtAbGluayBMUlVDYWNoZS52YWx1ZXN9XG4gICAgICpcbiAgICAgKiBSZXR1cm4gYSBnZW5lcmF0b3IgeWllbGRpbmcgdGhlIHZhbHVlcyBpbiB0aGUgY2FjaGUsXG4gICAgICogaW4gb3JkZXIgZnJvbSBsZWFzdCByZWNlbnRseSB1c2VkIHRvIG1vc3QgcmVjZW50bHkgdXNlZC5cbiAgICAgKi9cbiAgICAqcnZhbHVlcygpIHtcbiAgICAgICAgZm9yIChjb25zdCBpIG9mIHRoaXMuI3JpbmRleGVzKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHYgPSB0aGlzLiN2YWxMaXN0W2ldO1xuICAgICAgICAgICAgaWYgKHYgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICF0aGlzLiNpc0JhY2tncm91bmRGZXRjaCh0aGlzLiN2YWxMaXN0W2ldKSkge1xuICAgICAgICAgICAgICAgIHlpZWxkIHRoaXMuI3ZhbExpc3RbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogSXRlcmF0aW5nIG92ZXIgdGhlIGNhY2hlIGl0c2VsZiB5aWVsZHMgdGhlIHNhbWUgcmVzdWx0cyBhc1xuICAgICAqIHtAbGluayBMUlVDYWNoZS5lbnRyaWVzfVxuICAgICAqL1xuICAgIFtTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnRyaWVzKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEEgU3RyaW5nIHZhbHVlIHRoYXQgaXMgdXNlZCBpbiB0aGUgY3JlYXRpb24gb2YgdGhlIGRlZmF1bHQgc3RyaW5nXG4gICAgICogZGVzY3JpcHRpb24gb2YgYW4gb2JqZWN0LiBDYWxsZWQgYnkgdGhlIGJ1aWx0LWluIG1ldGhvZFxuICAgICAqIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYC5cbiAgICAgKi9cbiAgICBbU3ltYm9sLnRvU3RyaW5nVGFnXSA9ICdMUlVDYWNoZSc7XG4gICAgLyoqXG4gICAgICogRmluZCBhIHZhbHVlIGZvciB3aGljaCB0aGUgc3VwcGxpZWQgZm4gbWV0aG9kIHJldHVybnMgYSB0cnV0aHkgdmFsdWUsXG4gICAgICogc2ltaWxhciB0byBgQXJyYXkuZmluZCgpYC4gZm4gaXMgY2FsbGVkIGFzIGBmbih2YWx1ZSwga2V5LCBjYWNoZSlgLlxuICAgICAqL1xuICAgIGZpbmQoZm4sIGdldE9wdGlvbnMgPSB7fSkge1xuICAgICAgICBmb3IgKGNvbnN0IGkgb2YgdGhpcy4jaW5kZXhlcygpKSB7XG4gICAgICAgICAgICBjb25zdCB2ID0gdGhpcy4jdmFsTGlzdFtpXTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2godilcbiAgICAgICAgICAgICAgICA/IHYuX19zdGFsZVdoaWxlRmV0Y2hpbmdcbiAgICAgICAgICAgICAgICA6IHY7XG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGlmIChmbih2YWx1ZSwgdGhpcy4ja2V5TGlzdFtpXSwgdGhpcykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXQodGhpcy4ja2V5TGlzdFtpXSwgZ2V0T3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2FsbCB0aGUgc3VwcGxpZWQgZnVuY3Rpb24gb24gZWFjaCBpdGVtIGluIHRoZSBjYWNoZSwgaW4gb3JkZXIgZnJvbSBtb3N0XG4gICAgICogcmVjZW50bHkgdXNlZCB0byBsZWFzdCByZWNlbnRseSB1c2VkLlxuICAgICAqXG4gICAgICogYGZuYCBpcyBjYWxsZWQgYXMgYGZuKHZhbHVlLCBrZXksIGNhY2hlKWAuXG4gICAgICpcbiAgICAgKiBJZiBgdGhpc3BgIGlzIHByb3ZpZGVkLCBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBpbiB0aGUgYHRoaXNgLWNvbnRleHQgb2ZcbiAgICAgKiB0aGUgcHJvdmlkZWQgb2JqZWN0LCBvciB0aGUgY2FjaGUgaWYgbm8gYHRoaXNwYCBvYmplY3QgaXMgcHJvdmlkZWQuXG4gICAgICpcbiAgICAgKiBEb2VzIG5vdCB1cGRhdGUgYWdlIG9yIHJlY2VudHkgb2YgdXNlLCBvciBpdGVyYXRlIG92ZXIgc3RhbGUgdmFsdWVzLlxuICAgICAqL1xuICAgIGZvckVhY2goZm4sIHRoaXNwID0gdGhpcykge1xuICAgICAgICBmb3IgKGNvbnN0IGkgb2YgdGhpcy4jaW5kZXhlcygpKSB7XG4gICAgICAgICAgICBjb25zdCB2ID0gdGhpcy4jdmFsTGlzdFtpXTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2godilcbiAgICAgICAgICAgICAgICA/IHYuX19zdGFsZVdoaWxlRmV0Y2hpbmdcbiAgICAgICAgICAgICAgICA6IHY7XG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGZuLmNhbGwodGhpc3AsIHZhbHVlLCB0aGlzLiNrZXlMaXN0W2ldLCB0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgc2FtZSBhcyB7QGxpbmsgTFJVQ2FjaGUuZm9yRWFjaH0gYnV0IGl0ZW1zIGFyZSBpdGVyYXRlZCBvdmVyIGluXG4gICAgICogcmV2ZXJzZSBvcmRlci4gIChpZSwgbGVzcyByZWNlbnRseSB1c2VkIGl0ZW1zIGFyZSBpdGVyYXRlZCBvdmVyIGZpcnN0LilcbiAgICAgKi9cbiAgICByZm9yRWFjaChmbiwgdGhpc3AgPSB0aGlzKSB7XG4gICAgICAgIGZvciAoY29uc3QgaSBvZiB0aGlzLiNyaW5kZXhlcygpKSB7XG4gICAgICAgICAgICBjb25zdCB2ID0gdGhpcy4jdmFsTGlzdFtpXTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2godilcbiAgICAgICAgICAgICAgICA/IHYuX19zdGFsZVdoaWxlRmV0Y2hpbmdcbiAgICAgICAgICAgICAgICA6IHY7XG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGZuLmNhbGwodGhpc3AsIHZhbHVlLCB0aGlzLiNrZXlMaXN0W2ldLCB0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWxldGUgYW55IHN0YWxlIGVudHJpZXMuIFJldHVybnMgdHJ1ZSBpZiBhbnl0aGluZyB3YXMgcmVtb3ZlZCxcbiAgICAgKiBmYWxzZSBvdGhlcndpc2UuXG4gICAgICovXG4gICAgcHVyZ2VTdGFsZSgpIHtcbiAgICAgICAgbGV0IGRlbGV0ZWQgPSBmYWxzZTtcbiAgICAgICAgZm9yIChjb25zdCBpIG9mIHRoaXMuI3JpbmRleGVzKHsgYWxsb3dTdGFsZTogdHJ1ZSB9KSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuI2lzU3RhbGUoaSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiNkZWxldGUodGhpcy4ja2V5TGlzdFtpXSwgJ2V4cGlyZScpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWxldGVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGV4dGVuZGVkIGluZm8gYWJvdXQgYSBnaXZlbiBlbnRyeSwgdG8gZ2V0IGl0cyB2YWx1ZSwgc2l6ZSwgYW5kXG4gICAgICogVFRMIGluZm8gc2ltdWx0YW5lb3VzbHkuIFJldHVybnMgYHVuZGVmaW5lZGAgaWYgdGhlIGtleSBpcyBub3QgcHJlc2VudC5cbiAgICAgKlxuICAgICAqIFVubGlrZSB7QGxpbmsgTFJVQ2FjaGUjZHVtcH0sIHdoaWNoIGlzIGRlc2lnbmVkIHRvIGJlIHBvcnRhYmxlIGFuZCBzdXJ2aXZlXG4gICAgICogc2VyaWFsaXphdGlvbiwgdGhlIGBzdGFydGAgdmFsdWUgaXMgYWx3YXlzIHRoZSBjdXJyZW50IHRpbWVzdGFtcCwgYW5kIHRoZVxuICAgICAqIGB0dGxgIGlzIGEgY2FsY3VsYXRlZCByZW1haW5pbmcgdGltZSB0byBsaXZlIChuZWdhdGl2ZSBpZiBleHBpcmVkKS5cbiAgICAgKlxuICAgICAqIEFsd2F5cyByZXR1cm5zIHN0YWxlIHZhbHVlcywgaWYgdGhlaXIgaW5mbyBpcyBmb3VuZCBpbiB0aGUgY2FjaGUsIHNvIGJlXG4gICAgICogc3VyZSB0byBjaGVjayBmb3IgZXhwaXJhdGlvbnMgKGllLCBhIG5lZ2F0aXZlIHtAbGluayBMUlVDYWNoZS5FbnRyeSN0dGx9KVxuICAgICAqIGlmIHJlbGV2YW50LlxuICAgICAqL1xuICAgIGluZm8oa2V5KSB7XG4gICAgICAgIGNvbnN0IGkgPSB0aGlzLiNrZXlNYXAuZ2V0KGtleSk7XG4gICAgICAgIGlmIChpID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCB2ID0gdGhpcy4jdmFsTGlzdFtpXTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLiNpc0JhY2tncm91bmRGZXRjaCh2KVxuICAgICAgICAgICAgPyB2Ll9fc3RhbGVXaGlsZUZldGNoaW5nXG4gICAgICAgICAgICA6IHY7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgZW50cnkgPSB7IHZhbHVlIH07XG4gICAgICAgIGlmICh0aGlzLiN0dGxzICYmIHRoaXMuI3N0YXJ0cykge1xuICAgICAgICAgICAgY29uc3QgdHRsID0gdGhpcy4jdHRsc1tpXTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy4jc3RhcnRzW2ldO1xuICAgICAgICAgICAgaWYgKHR0bCAmJiBzdGFydCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlbWFpbiA9IHR0bCAtIChwZXJmLm5vdygpIC0gc3RhcnQpO1xuICAgICAgICAgICAgICAgIGVudHJ5LnR0bCA9IHJlbWFpbjtcbiAgICAgICAgICAgICAgICBlbnRyeS5zdGFydCA9IERhdGUubm93KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuI3NpemVzKSB7XG4gICAgICAgICAgICBlbnRyeS5zaXplID0gdGhpcy4jc2l6ZXNbaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVudHJ5O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYW4gYXJyYXkgb2YgW2tleSwge0BsaW5rIExSVUNhY2hlLkVudHJ5fV0gdHVwbGVzIHdoaWNoIGNhbiBiZVxuICAgICAqIHBhc3NlZCB0byB7QGxpbmsgTFJMVUNhY2hlI2xvYWR9LlxuICAgICAqXG4gICAgICogVGhlIGBzdGFydGAgZmllbGRzIGFyZSBjYWxjdWxhdGVkIHJlbGF0aXZlIHRvIGEgcG9ydGFibGUgYERhdGUubm93KClgXG4gICAgICogdGltZXN0YW1wLCBldmVuIGlmIGBwZXJmb3JtYW5jZS5ub3coKWAgaXMgYXZhaWxhYmxlLlxuICAgICAqXG4gICAgICogU3RhbGUgZW50cmllcyBhcmUgYWx3YXlzIGluY2x1ZGVkIGluIHRoZSBgZHVtcGAsIGV2ZW4gaWZcbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UuYWxsb3dTdGFsZX0gaXMgZmFsc2UuXG4gICAgICpcbiAgICAgKiBOb3RlOiB0aGlzIHJldHVybnMgYW4gYWN0dWFsIGFycmF5LCBub3QgYSBnZW5lcmF0b3IsIHNvIGl0IGNhbiBiZSBtb3JlXG4gICAgICogZWFzaWx5IHBhc3NlZCBhcm91bmQuXG4gICAgICovXG4gICAgZHVtcCgpIHtcbiAgICAgICAgY29uc3QgYXJyID0gW107XG4gICAgICAgIGZvciAoY29uc3QgaSBvZiB0aGlzLiNpbmRleGVzKHsgYWxsb3dTdGFsZTogdHJ1ZSB9KSkge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gdGhpcy4ja2V5TGlzdFtpXTtcbiAgICAgICAgICAgIGNvbnN0IHYgPSB0aGlzLiN2YWxMaXN0W2ldO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLiNpc0JhY2tncm91bmRGZXRjaCh2KVxuICAgICAgICAgICAgICAgID8gdi5fX3N0YWxlV2hpbGVGZXRjaGluZ1xuICAgICAgICAgICAgICAgIDogdjtcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IGtleSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgY29uc3QgZW50cnkgPSB7IHZhbHVlIH07XG4gICAgICAgICAgICBpZiAodGhpcy4jdHRscyAmJiB0aGlzLiNzdGFydHMpIHtcbiAgICAgICAgICAgICAgICBlbnRyeS50dGwgPSB0aGlzLiN0dGxzW2ldO1xuICAgICAgICAgICAgICAgIC8vIGFsd2F5cyBkdW1wIHRoZSBzdGFydCByZWxhdGl2ZSB0byBhIHBvcnRhYmxlIHRpbWVzdGFtcFxuICAgICAgICAgICAgICAgIC8vIGl0J3Mgb2sgZm9yIHRoaXMgdG8gYmUgYSBiaXQgc2xvdywgaXQncyBhIHJhcmUgb3BlcmF0aW9uLlxuICAgICAgICAgICAgICAgIGNvbnN0IGFnZSA9IHBlcmYubm93KCkgLSB0aGlzLiNzdGFydHNbaV07XG4gICAgICAgICAgICAgICAgZW50cnkuc3RhcnQgPSBNYXRoLmZsb29yKERhdGUubm93KCkgLSBhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuI3NpemVzKSB7XG4gICAgICAgICAgICAgICAgZW50cnkuc2l6ZSA9IHRoaXMuI3NpemVzW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXJyLnVuc2hpZnQoW2tleSwgZW50cnldKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXJyO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXNldCB0aGUgY2FjaGUgYW5kIGxvYWQgaW4gdGhlIGl0ZW1zIGluIGVudHJpZXMgaW4gdGhlIG9yZGVyIGxpc3RlZC5cbiAgICAgKlxuICAgICAqIFRoZSBzaGFwZSBvZiB0aGUgcmVzdWx0aW5nIGNhY2hlIG1heSBiZSBkaWZmZXJlbnQgaWYgdGhlIHNhbWUgb3B0aW9ucyBhcmVcbiAgICAgKiBub3QgdXNlZCBpbiBib3RoIGNhY2hlcy5cbiAgICAgKlxuICAgICAqIFRoZSBgc3RhcnRgIGZpZWxkcyBhcmUgYXNzdW1lZCB0byBiZSBjYWxjdWxhdGVkIHJlbGF0aXZlIHRvIGEgcG9ydGFibGVcbiAgICAgKiBgRGF0ZS5ub3coKWAgdGltZXN0YW1wLCBldmVuIGlmIGBwZXJmb3JtYW5jZS5ub3coKWAgaXMgYXZhaWxhYmxlLlxuICAgICAqL1xuICAgIGxvYWQoYXJyKSB7XG4gICAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCBlbnRyeV0gb2YgYXJyKSB7XG4gICAgICAgICAgICBpZiAoZW50cnkuc3RhcnQpIHtcbiAgICAgICAgICAgICAgICAvLyBlbnRyeS5zdGFydCBpcyBhIHBvcnRhYmxlIHRpbWVzdGFtcCwgYnV0IHdlIG1heSBiZSB1c2luZ1xuICAgICAgICAgICAgICAgIC8vIG5vZGUncyBwZXJmb3JtYW5jZS5ub3coKSwgc28gY2FsY3VsYXRlIHRoZSBvZmZzZXQsIHNvIHRoYXRcbiAgICAgICAgICAgICAgICAvLyB3ZSBnZXQgdGhlIGludGVuZGVkIHJlbWFpbmluZyBUVEwsIG5vIG1hdHRlciBob3cgbG9uZyBpdCdzXG4gICAgICAgICAgICAgICAgLy8gYmVlbiBvbiBpY2UuXG4gICAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgICAvLyBpdCdzIG9rIGZvciB0aGlzIHRvIGJlIGEgYml0IHNsb3csIGl0J3MgYSByYXJlIG9wZXJhdGlvbi5cbiAgICAgICAgICAgICAgICBjb25zdCBhZ2UgPSBEYXRlLm5vdygpIC0gZW50cnkuc3RhcnQ7XG4gICAgICAgICAgICAgICAgZW50cnkuc3RhcnQgPSBwZXJmLm5vdygpIC0gYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZXQoa2V5LCBlbnRyeS52YWx1ZSwgZW50cnkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZCBhIHZhbHVlIHRvIHRoZSBjYWNoZS5cbiAgICAgKlxuICAgICAqIE5vdGU6IGlmIGB1bmRlZmluZWRgIGlzIHNwZWNpZmllZCBhcyBhIHZhbHVlLCB0aGlzIGlzIGFuIGFsaWFzIGZvclxuICAgICAqIHtAbGluayBMUlVDYWNoZSNkZWxldGV9XG4gICAgICpcbiAgICAgKiBGaWVsZHMgb24gdGhlIHtAbGluayBMUlVDYWNoZS5TZXRPcHRpb25zfSBvcHRpb25zIHBhcmFtIHdpbGwgb3ZlcnJpZGVcbiAgICAgKiB0aGVpciBjb3JyZXNwb25kaW5nIHZhbHVlcyBpbiB0aGUgY29uc3RydWN0b3Igb3B0aW9ucyBmb3IgdGhlIHNjb3BlXG4gICAgICogb2YgdGhpcyBzaW5nbGUgYHNldCgpYCBvcGVyYXRpb24uXG4gICAgICpcbiAgICAgKiBJZiBgc3RhcnRgIGlzIHByb3ZpZGVkLCB0aGVuIHRoYXQgd2lsbCBzZXQgdGhlIGVmZmVjdGl2ZSBzdGFydFxuICAgICAqIHRpbWUgZm9yIHRoZSBUVEwgY2FsY3VsYXRpb24uIE5vdGUgdGhhdCB0aGlzIG11c3QgYmUgYSBwcmV2aW91c1xuICAgICAqIHZhbHVlIG9mIGBwZXJmb3JtYW5jZS5ub3coKWAgaWYgc3VwcG9ydGVkLCBvciBhIHByZXZpb3VzIHZhbHVlIG9mXG4gICAgICogYERhdGUubm93KClgIGlmIG5vdC5cbiAgICAgKlxuICAgICAqIE9wdGlvbnMgb2JqZWN0IG1heSBhbHNvIGluY2x1ZGUgYHNpemVgLCB3aGljaCB3aWxsIHByZXZlbnRcbiAgICAgKiBjYWxsaW5nIHRoZSBgc2l6ZUNhbGN1bGF0aW9uYCBmdW5jdGlvbiBhbmQganVzdCB1c2UgdGhlIHNwZWNpZmllZFxuICAgICAqIG51bWJlciBpZiBpdCBpcyBhIHBvc2l0aXZlIGludGVnZXIsIGFuZCBgbm9EaXNwb3NlT25TZXRgIHdoaWNoXG4gICAgICogd2lsbCBwcmV2ZW50IGNhbGxpbmcgYSBgZGlzcG9zZWAgZnVuY3Rpb24gaW4gdGhlIGNhc2Ugb2ZcbiAgICAgKiBvdmVyd3JpdGVzLlxuICAgICAqXG4gICAgICogSWYgdGhlIGBzaXplYCAob3IgcmV0dXJuIHZhbHVlIG9mIGBzaXplQ2FsY3VsYXRpb25gKSBmb3IgYSBnaXZlblxuICAgICAqIGVudHJ5IGlzIGdyZWF0ZXIgdGhhbiBgbWF4RW50cnlTaXplYCwgdGhlbiB0aGUgaXRlbSB3aWxsIG5vdCBiZVxuICAgICAqIGFkZGVkIHRvIHRoZSBjYWNoZS5cbiAgICAgKlxuICAgICAqIFdpbGwgdXBkYXRlIHRoZSByZWNlbmN5IG9mIHRoZSBlbnRyeS5cbiAgICAgKlxuICAgICAqIElmIHRoZSB2YWx1ZSBpcyBgdW5kZWZpbmVkYCwgdGhlbiB0aGlzIGlzIGFuIGFsaWFzIGZvclxuICAgICAqIGBjYWNoZS5kZWxldGUoa2V5KWAuIGB1bmRlZmluZWRgIGlzIG5ldmVyIHN0b3JlZCBpbiB0aGUgY2FjaGUuXG4gICAgICovXG4gICAgc2V0KGssIHYsIHNldE9wdGlvbnMgPSB7fSkge1xuICAgICAgICBpZiAodiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmRlbGV0ZShrKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgdHRsID0gdGhpcy50dGwsIHN0YXJ0LCBub0Rpc3Bvc2VPblNldCA9IHRoaXMubm9EaXNwb3NlT25TZXQsIHNpemVDYWxjdWxhdGlvbiA9IHRoaXMuc2l6ZUNhbGN1bGF0aW9uLCBzdGF0dXMsIH0gPSBzZXRPcHRpb25zO1xuICAgICAgICBsZXQgeyBub1VwZGF0ZVRUTCA9IHRoaXMubm9VcGRhdGVUVEwgfSA9IHNldE9wdGlvbnM7XG4gICAgICAgIGNvbnN0IHNpemUgPSB0aGlzLiNyZXF1aXJlU2l6ZShrLCB2LCBzZXRPcHRpb25zLnNpemUgfHwgMCwgc2l6ZUNhbGN1bGF0aW9uKTtcbiAgICAgICAgLy8gaWYgdGhlIGl0ZW0gZG9lc24ndCBmaXQsIGRvbid0IGRvIGFueXRoaW5nXG4gICAgICAgIC8vIE5COiBtYXhFbnRyeVNpemUgc2V0IHRvIG1heFNpemUgYnkgZGVmYXVsdFxuICAgICAgICBpZiAodGhpcy5tYXhFbnRyeVNpemUgJiYgc2l6ZSA+IHRoaXMubWF4RW50cnlTaXplKSB7XG4gICAgICAgICAgICBpZiAoc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgc3RhdHVzLnNldCA9ICdtaXNzJztcbiAgICAgICAgICAgICAgICBzdGF0dXMubWF4RW50cnlTaXplRXhjZWVkZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaGF2ZSB0byBkZWxldGUsIGluIGNhc2Ugc29tZXRoaW5nIGlzIHRoZXJlIGFscmVhZHkuXG4gICAgICAgICAgICB0aGlzLiNkZWxldGUoaywgJ3NldCcpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGluZGV4ID0gdGhpcy4jc2l6ZSA9PT0gMCA/IHVuZGVmaW5lZCA6IHRoaXMuI2tleU1hcC5nZXQoayk7XG4gICAgICAgIGlmIChpbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyBhZGRpdGlvblxuICAgICAgICAgICAgaW5kZXggPSAodGhpcy4jc2l6ZSA9PT0gMFxuICAgICAgICAgICAgICAgID8gdGhpcy4jdGFpbFxuICAgICAgICAgICAgICAgIDogdGhpcy4jZnJlZS5sZW5ndGggIT09IDBcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLiNmcmVlLnBvcCgpXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy4jc2l6ZSA9PT0gdGhpcy4jbWF4XG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuI2V2aWN0KGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLiNzaXplKTtcbiAgICAgICAgICAgIHRoaXMuI2tleUxpc3RbaW5kZXhdID0gaztcbiAgICAgICAgICAgIHRoaXMuI3ZhbExpc3RbaW5kZXhdID0gdjtcbiAgICAgICAgICAgIHRoaXMuI2tleU1hcC5zZXQoaywgaW5kZXgpO1xuICAgICAgICAgICAgdGhpcy4jbmV4dFt0aGlzLiN0YWlsXSA9IGluZGV4O1xuICAgICAgICAgICAgdGhpcy4jcHJldltpbmRleF0gPSB0aGlzLiN0YWlsO1xuICAgICAgICAgICAgdGhpcy4jdGFpbCA9IGluZGV4O1xuICAgICAgICAgICAgdGhpcy4jc2l6ZSsrO1xuICAgICAgICAgICAgdGhpcy4jYWRkSXRlbVNpemUoaW5kZXgsIHNpemUsIHN0YXR1cyk7XG4gICAgICAgICAgICBpZiAoc3RhdHVzKVxuICAgICAgICAgICAgICAgIHN0YXR1cy5zZXQgPSAnYWRkJztcbiAgICAgICAgICAgIG5vVXBkYXRlVFRMID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyB1cGRhdGVcbiAgICAgICAgICAgIHRoaXMuI21vdmVUb1RhaWwoaW5kZXgpO1xuICAgICAgICAgICAgY29uc3Qgb2xkVmFsID0gdGhpcy4jdmFsTGlzdFtpbmRleF07XG4gICAgICAgICAgICBpZiAodiAhPT0gb2xkVmFsKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuI2hhc0ZldGNoTWV0aG9kICYmIHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKG9sZFZhbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgb2xkVmFsLl9fYWJvcnRDb250cm9sbGVyLmFib3J0KG5ldyBFcnJvcigncmVwbGFjZWQnKSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgX19zdGFsZVdoaWxlRmV0Y2hpbmc6IHMgfSA9IG9sZFZhbDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHMgIT09IHVuZGVmaW5lZCAmJiAhbm9EaXNwb3NlT25TZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLiNoYXNEaXNwb3NlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jZGlzcG9zZT8uKHMsIGssICdzZXQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLiNoYXNEaXNwb3NlQWZ0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiNkaXNwb3NlZD8ucHVzaChbcywgaywgJ3NldCddKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICghbm9EaXNwb3NlT25TZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuI2hhc0Rpc3Bvc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuI2Rpc3Bvc2U/LihvbGRWYWwsIGssICdzZXQnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy4jaGFzRGlzcG9zZUFmdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiNkaXNwb3NlZD8ucHVzaChbb2xkVmFsLCBrLCAnc2V0J10pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuI3JlbW92ZUl0ZW1TaXplKGluZGV4KTtcbiAgICAgICAgICAgICAgICB0aGlzLiNhZGRJdGVtU2l6ZShpbmRleCwgc2l6ZSwgc3RhdHVzKTtcbiAgICAgICAgICAgICAgICB0aGlzLiN2YWxMaXN0W2luZGV4XSA9IHY7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuc2V0ID0gJ3JlcGxhY2UnO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvbGRWYWx1ZSA9IG9sZFZhbCAmJiB0aGlzLiNpc0JhY2tncm91bmRGZXRjaChvbGRWYWwpXG4gICAgICAgICAgICAgICAgICAgICAgICA/IG9sZFZhbC5fX3N0YWxlV2hpbGVGZXRjaGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBvbGRWYWw7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvbGRWYWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLm9sZFZhbHVlID0gb2xkVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgc3RhdHVzLnNldCA9ICd1cGRhdGUnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0dGwgIT09IDAgJiYgIXRoaXMuI3R0bHMpIHtcbiAgICAgICAgICAgIHRoaXMuI2luaXRpYWxpemVUVExUcmFja2luZygpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLiN0dGxzKSB7XG4gICAgICAgICAgICBpZiAoIW5vVXBkYXRlVFRMKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jc2V0SXRlbVRUTChpbmRleCwgdHRsLCBzdGFydCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3RhdHVzKVxuICAgICAgICAgICAgICAgIHRoaXMuI3N0YXR1c1RUTChzdGF0dXMsIGluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW5vRGlzcG9zZU9uU2V0ICYmIHRoaXMuI2hhc0Rpc3Bvc2VBZnRlciAmJiB0aGlzLiNkaXNwb3NlZCkge1xuICAgICAgICAgICAgY29uc3QgZHQgPSB0aGlzLiNkaXNwb3NlZDtcbiAgICAgICAgICAgIGxldCB0YXNrO1xuICAgICAgICAgICAgd2hpbGUgKCh0YXNrID0gZHQ/LnNoaWZ0KCkpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jZGlzcG9zZUFmdGVyPy4oLi4udGFzayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEV2aWN0IHRoZSBsZWFzdCByZWNlbnRseSB1c2VkIGl0ZW0sIHJldHVybmluZyBpdHMgdmFsdWUgb3JcbiAgICAgKiBgdW5kZWZpbmVkYCBpZiBjYWNoZSBpcyBlbXB0eS5cbiAgICAgKi9cbiAgICBwb3AoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB3aGlsZSAodGhpcy4jc2l6ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbCA9IHRoaXMuI3ZhbExpc3RbdGhpcy4jaGVhZF07XG4gICAgICAgICAgICAgICAgdGhpcy4jZXZpY3QodHJ1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHZhbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbC5fX3N0YWxlV2hpbGVGZXRjaGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbC5fX3N0YWxlV2hpbGVGZXRjaGluZztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIGlmICh0aGlzLiNoYXNEaXNwb3NlQWZ0ZXIgJiYgdGhpcy4jZGlzcG9zZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkdCA9IHRoaXMuI2Rpc3Bvc2VkO1xuICAgICAgICAgICAgICAgIGxldCB0YXNrO1xuICAgICAgICAgICAgICAgIHdoaWxlICgodGFzayA9IGR0Py5zaGlmdCgpKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiNkaXNwb3NlQWZ0ZXI/LiguLi50YXNrKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgI2V2aWN0KGZyZWUpIHtcbiAgICAgICAgY29uc3QgaGVhZCA9IHRoaXMuI2hlYWQ7XG4gICAgICAgIGNvbnN0IGsgPSB0aGlzLiNrZXlMaXN0W2hlYWRdO1xuICAgICAgICBjb25zdCB2ID0gdGhpcy4jdmFsTGlzdFtoZWFkXTtcbiAgICAgICAgaWYgKHRoaXMuI2hhc0ZldGNoTWV0aG9kICYmIHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHYpKSB7XG4gICAgICAgICAgICB2Ll9fYWJvcnRDb250cm9sbGVyLmFib3J0KG5ldyBFcnJvcignZXZpY3RlZCcpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLiNoYXNEaXNwb3NlIHx8IHRoaXMuI2hhc0Rpc3Bvc2VBZnRlcikge1xuICAgICAgICAgICAgaWYgKHRoaXMuI2hhc0Rpc3Bvc2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiNkaXNwb3NlPy4odiwgaywgJ2V2aWN0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy4jaGFzRGlzcG9zZUFmdGVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jZGlzcG9zZWQ/LnB1c2goW3YsIGssICdldmljdCddKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLiNyZW1vdmVJdGVtU2l6ZShoZWFkKTtcbiAgICAgICAgLy8gaWYgd2UgYXJlbid0IGFib3V0IHRvIHVzZSB0aGUgaW5kZXgsIHRoZW4gbnVsbCB0aGVzZSBvdXRcbiAgICAgICAgaWYgKGZyZWUpIHtcbiAgICAgICAgICAgIHRoaXMuI2tleUxpc3RbaGVhZF0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLiN2YWxMaXN0W2hlYWRdID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy4jZnJlZS5wdXNoKGhlYWQpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLiNzaXplID09PSAxKSB7XG4gICAgICAgICAgICB0aGlzLiNoZWFkID0gdGhpcy4jdGFpbCA9IDA7XG4gICAgICAgICAgICB0aGlzLiNmcmVlLmxlbmd0aCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLiNoZWFkID0gdGhpcy4jbmV4dFtoZWFkXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiNrZXlNYXAuZGVsZXRlKGspO1xuICAgICAgICB0aGlzLiNzaXplLS07XG4gICAgICAgIHJldHVybiBoZWFkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiBhIGtleSBpcyBpbiB0aGUgY2FjaGUsIHdpdGhvdXQgdXBkYXRpbmcgdGhlIHJlY2VuY3kgb2YgdXNlLlxuICAgICAqIFdpbGwgcmV0dXJuIGZhbHNlIGlmIHRoZSBpdGVtIGlzIHN0YWxlLCBldmVuIHRob3VnaCBpdCBpcyB0ZWNobmljYWxseVxuICAgICAqIGluIHRoZSBjYWNoZS5cbiAgICAgKlxuICAgICAqIENoZWNrIGlmIGEga2V5IGlzIGluIHRoZSBjYWNoZSwgd2l0aG91dCB1cGRhdGluZyB0aGUgcmVjZW5jeSBvZlxuICAgICAqIHVzZS4gQWdlIGlzIHVwZGF0ZWQgaWYge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLnVwZGF0ZUFnZU9uSGFzfSBpcyBzZXRcbiAgICAgKiB0byBgdHJ1ZWAgaW4gZWl0aGVyIHRoZSBvcHRpb25zIG9yIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICAgKlxuICAgICAqIFdpbGwgcmV0dXJuIGBmYWxzZWAgaWYgdGhlIGl0ZW0gaXMgc3RhbGUsIGV2ZW4gdGhvdWdoIGl0IGlzIHRlY2huaWNhbGx5IGluXG4gICAgICogdGhlIGNhY2hlLiBUaGUgZGlmZmVyZW5jZSBjYW4gYmUgZGV0ZXJtaW5lZCAoaWYgaXQgbWF0dGVycykgYnkgdXNpbmcgYVxuICAgICAqIGBzdGF0dXNgIGFyZ3VtZW50LCBhbmQgaW5zcGVjdGluZyB0aGUgYGhhc2AgZmllbGQuXG4gICAgICpcbiAgICAgKiBXaWxsIG5vdCB1cGRhdGUgaXRlbSBhZ2UgdW5sZXNzXG4gICAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLnVwZGF0ZUFnZU9uSGFzfSBpcyBzZXQuXG4gICAgICovXG4gICAgaGFzKGssIGhhc09wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCB7IHVwZGF0ZUFnZU9uSGFzID0gdGhpcy51cGRhdGVBZ2VPbkhhcywgc3RhdHVzIH0gPSBoYXNPcHRpb25zO1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuI2tleU1hcC5nZXQoayk7XG4gICAgICAgIGlmIChpbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCB2ID0gdGhpcy4jdmFsTGlzdFtpbmRleF07XG4gICAgICAgICAgICBpZiAodGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2godikgJiZcbiAgICAgICAgICAgICAgICB2Ll9fc3RhbGVXaGlsZUZldGNoaW5nID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuI2lzU3RhbGUoaW5kZXgpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHVwZGF0ZUFnZU9uSGFzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI3VwZGF0ZUl0ZW1BZ2UoaW5kZXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5oYXMgPSAnaGl0JztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jc3RhdHVzVFRMKHN0YXR1cywgaW5kZXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHN0YXR1cykge1xuICAgICAgICAgICAgICAgIHN0YXR1cy5oYXMgPSAnc3RhbGUnO1xuICAgICAgICAgICAgICAgIHRoaXMuI3N0YXR1c1RUTChzdGF0dXMsIGluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzdGF0dXMpIHtcbiAgICAgICAgICAgIHN0YXR1cy5oYXMgPSAnbWlzcyc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBMaWtlIHtAbGluayBMUlVDYWNoZSNnZXR9IGJ1dCBkb2Vzbid0IHVwZGF0ZSByZWNlbmN5IG9yIGRlbGV0ZSBzdGFsZVxuICAgICAqIGl0ZW1zLlxuICAgICAqXG4gICAgICogUmV0dXJucyBgdW5kZWZpbmVkYCBpZiB0aGUgaXRlbSBpcyBzdGFsZSwgdW5sZXNzXG4gICAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLmFsbG93U3RhbGV9IGlzIHNldC5cbiAgICAgKi9cbiAgICBwZWVrKGssIHBlZWtPcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgeyBhbGxvd1N0YWxlID0gdGhpcy5hbGxvd1N0YWxlIH0gPSBwZWVrT3B0aW9ucztcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLiNrZXlNYXAuZ2V0KGspO1xuICAgICAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgKCFhbGxvd1N0YWxlICYmIHRoaXMuI2lzU3RhbGUoaW5kZXgpKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHYgPSB0aGlzLiN2YWxMaXN0W2luZGV4XTtcbiAgICAgICAgLy8gZWl0aGVyIHN0YWxlIGFuZCBhbGxvd2VkLCBvciBmb3JjaW5nIGEgcmVmcmVzaCBvZiBub24tc3RhbGUgdmFsdWVcbiAgICAgICAgcmV0dXJuIHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHYpID8gdi5fX3N0YWxlV2hpbGVGZXRjaGluZyA6IHY7XG4gICAgfVxuICAgICNiYWNrZ3JvdW5kRmV0Y2goaywgaW5kZXgsIG9wdGlvbnMsIGNvbnRleHQpIHtcbiAgICAgICAgY29uc3QgdiA9IGluZGV4ID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB0aGlzLiN2YWxMaXN0W2luZGV4XTtcbiAgICAgICAgaWYgKHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHYpKSB7XG4gICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhYyA9IG5ldyBBQygpO1xuICAgICAgICBjb25zdCB7IHNpZ25hbCB9ID0gb3B0aW9ucztcbiAgICAgICAgLy8gd2hlbi9pZiBvdXIgQUMgc2lnbmFscywgdGhlbiBzdG9wIGxpc3RlbmluZyB0byB0aGVpcnMuXG4gICAgICAgIHNpZ25hbD8uYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCAoKSA9PiBhYy5hYm9ydChzaWduYWwucmVhc29uKSwge1xuICAgICAgICAgICAgc2lnbmFsOiBhYy5zaWduYWwsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBmZXRjaE9wdHMgPSB7XG4gICAgICAgICAgICBzaWduYWw6IGFjLnNpZ25hbCxcbiAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBjYiA9ICh2LCB1cGRhdGVDYWNoZSA9IGZhbHNlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IGFib3J0ZWQgfSA9IGFjLnNpZ25hbDtcbiAgICAgICAgICAgIGNvbnN0IGlnbm9yZUFib3J0ID0gb3B0aW9ucy5pZ25vcmVGZXRjaEFib3J0ICYmIHYgIT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnN0YXR1cykge1xuICAgICAgICAgICAgICAgIGlmIChhYm9ydGVkICYmICF1cGRhdGVDYWNoZSkge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnN0YXR1cy5mZXRjaEFib3J0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnN0YXR1cy5mZXRjaEVycm9yID0gYWMuc2lnbmFsLnJlYXNvbjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlnbm9yZUFib3J0KVxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5zdGF0dXMuZmV0Y2hBYm9ydElnbm9yZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5zdGF0dXMuZmV0Y2hSZXNvbHZlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFib3J0ZWQgJiYgIWlnbm9yZUFib3J0ICYmICF1cGRhdGVDYWNoZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmZXRjaEZhaWwoYWMuc2lnbmFsLnJlYXNvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBlaXRoZXIgd2UgZGlkbid0IGFib3J0LCBhbmQgYXJlIHN0aWxsIGhlcmUsIG9yIHdlIGRpZCwgYW5kIGlnbm9yZWRcbiAgICAgICAgICAgIGNvbnN0IGJmID0gcDtcbiAgICAgICAgICAgIGlmICh0aGlzLiN2YWxMaXN0W2luZGV4XSA9PT0gcCkge1xuICAgICAgICAgICAgICAgIGlmICh2ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJmLl9fc3RhbGVXaGlsZUZldGNoaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiN2YWxMaXN0W2luZGV4XSA9IGJmLl9fc3RhbGVXaGlsZUZldGNoaW5nO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jZGVsZXRlKGssICdmZXRjaCcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5zdGF0dXMpXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnN0YXR1cy5mZXRjaFVwZGF0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldChrLCB2LCBmZXRjaE9wdHMub3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGViID0gKGVyKSA9PiB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5zdGF0dXMpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLnN0YXR1cy5mZXRjaFJlamVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBvcHRpb25zLnN0YXR1cy5mZXRjaEVycm9yID0gZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmV0Y2hGYWlsKGVyKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZmV0Y2hGYWlsID0gKGVyKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IGFib3J0ZWQgfSA9IGFjLnNpZ25hbDtcbiAgICAgICAgICAgIGNvbnN0IGFsbG93U3RhbGVBYm9ydGVkID0gYWJvcnRlZCAmJiBvcHRpb25zLmFsbG93U3RhbGVPbkZldGNoQWJvcnQ7XG4gICAgICAgICAgICBjb25zdCBhbGxvd1N0YWxlID0gYWxsb3dTdGFsZUFib3J0ZWQgfHwgb3B0aW9ucy5hbGxvd1N0YWxlT25GZXRjaFJlamVjdGlvbjtcbiAgICAgICAgICAgIGNvbnN0IG5vRGVsZXRlID0gYWxsb3dTdGFsZSB8fCBvcHRpb25zLm5vRGVsZXRlT25GZXRjaFJlamVjdGlvbjtcbiAgICAgICAgICAgIGNvbnN0IGJmID0gcDtcbiAgICAgICAgICAgIGlmICh0aGlzLiN2YWxMaXN0W2luZGV4XSA9PT0gcCkge1xuICAgICAgICAgICAgICAgIC8vIGlmIHdlIGFsbG93IHN0YWxlIG9uIGZldGNoIHJlamVjdGlvbnMsIHRoZW4gd2UgbmVlZCB0byBlbnN1cmUgdGhhdFxuICAgICAgICAgICAgICAgIC8vIHRoZSBzdGFsZSB2YWx1ZSBpcyBub3QgcmVtb3ZlZCBmcm9tIHRoZSBjYWNoZSB3aGVuIHRoZSBmZXRjaCBmYWlscy5cbiAgICAgICAgICAgICAgICBjb25zdCBkZWwgPSAhbm9EZWxldGUgfHwgYmYuX19zdGFsZVdoaWxlRmV0Y2hpbmcgPT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBpZiAoZGVsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI2RlbGV0ZShrLCAnZmV0Y2gnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIWFsbG93U3RhbGVBYm9ydGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHN0aWxsIHJlcGxhY2UgdGhlICpwcm9taXNlKiB3aXRoIHRoZSBzdGFsZSB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgLy8gc2luY2Ugd2UgYXJlIGRvbmUgd2l0aCB0aGUgcHJvbWlzZSBhdCB0aGlzIHBvaW50LlxuICAgICAgICAgICAgICAgICAgICAvLyBsZWF2ZSBpdCB1bnRvdWNoZWQgaWYgd2UncmUgc3RpbGwgd2FpdGluZyBmb3IgYW5cbiAgICAgICAgICAgICAgICAgICAgLy8gYWJvcnRlZCBiYWNrZ3JvdW5kIGZldGNoIHRoYXQgaGFzbid0IHlldCByZXR1cm5lZC5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jdmFsTGlzdFtpbmRleF0gPSBiZi5fX3N0YWxlV2hpbGVGZXRjaGluZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYWxsb3dTdGFsZSkge1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnN0YXR1cyAmJiBiZi5fX3N0YWxlV2hpbGVGZXRjaGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuc3RhdHVzLnJldHVybmVkU3RhbGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYmYuX19zdGFsZVdoaWxlRmV0Y2hpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChiZi5fX3JldHVybmVkID09PSBiZikge1xuICAgICAgICAgICAgICAgIHRocm93IGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBwY2FsbCA9IChyZXMsIHJlaikgPT4ge1xuICAgICAgICAgICAgY29uc3QgZm1wID0gdGhpcy4jZmV0Y2hNZXRob2Q/LihrLCB2LCBmZXRjaE9wdHMpO1xuICAgICAgICAgICAgaWYgKGZtcCAmJiBmbXAgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgZm1wLnRoZW4odiA9PiByZXModiA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogdiksIHJlaik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBpZ25vcmVkLCB3ZSBnbyB1bnRpbCB3ZSBmaW5pc2gsIHJlZ2FyZGxlc3MuXG4gICAgICAgICAgICAvLyBkZWZlciBjaGVjayB1bnRpbCB3ZSBhcmUgYWN0dWFsbHkgYWJvcnRpbmcsXG4gICAgICAgICAgICAvLyBzbyBmZXRjaE1ldGhvZCBjYW4gb3ZlcnJpZGUuXG4gICAgICAgICAgICBhYy5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zLmlnbm9yZUZldGNoQWJvcnQgfHxcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5hbGxvd1N0YWxlT25GZXRjaEFib3J0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcyh1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAvLyB3aGVuIGl0IGV2ZW50dWFsbHkgcmVzb2x2ZXMsIHVwZGF0ZSB0aGUgY2FjaGUuXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmFsbG93U3RhbGVPbkZldGNoQWJvcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcyA9IHYgPT4gY2IodiwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKG9wdGlvbnMuc3RhdHVzKVxuICAgICAgICAgICAgb3B0aW9ucy5zdGF0dXMuZmV0Y2hEaXNwYXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgcCA9IG5ldyBQcm9taXNlKHBjYWxsKS50aGVuKGNiLCBlYik7XG4gICAgICAgIGNvbnN0IGJmID0gT2JqZWN0LmFzc2lnbihwLCB7XG4gICAgICAgICAgICBfX2Fib3J0Q29udHJvbGxlcjogYWMsXG4gICAgICAgICAgICBfX3N0YWxlV2hpbGVGZXRjaGluZzogdixcbiAgICAgICAgICAgIF9fcmV0dXJuZWQ6IHVuZGVmaW5lZCxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChpbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyBpbnRlcm5hbCwgZG9uJ3QgZXhwb3NlIHN0YXR1cy5cbiAgICAgICAgICAgIHRoaXMuc2V0KGssIGJmLCB7IC4uLmZldGNoT3B0cy5vcHRpb25zLCBzdGF0dXM6IHVuZGVmaW5lZCB9KTtcbiAgICAgICAgICAgIGluZGV4ID0gdGhpcy4ja2V5TWFwLmdldChrKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuI3ZhbExpc3RbaW5kZXhdID0gYmY7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJmO1xuICAgIH1cbiAgICAjaXNCYWNrZ3JvdW5kRmV0Y2gocCkge1xuICAgICAgICBpZiAoIXRoaXMuI2hhc0ZldGNoTWV0aG9kKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb25zdCBiID0gcDtcbiAgICAgICAgcmV0dXJuICghIWIgJiZcbiAgICAgICAgICAgIGIgaW5zdGFuY2VvZiBQcm9taXNlICYmXG4gICAgICAgICAgICBiLmhhc093blByb3BlcnR5KCdfX3N0YWxlV2hpbGVGZXRjaGluZycpICYmXG4gICAgICAgICAgICBiLl9fYWJvcnRDb250cm9sbGVyIGluc3RhbmNlb2YgQUMpO1xuICAgIH1cbiAgICBhc3luYyBmZXRjaChrLCBmZXRjaE9wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCB7IFxuICAgICAgICAvLyBnZXQgb3B0aW9uc1xuICAgICAgICBhbGxvd1N0YWxlID0gdGhpcy5hbGxvd1N0YWxlLCB1cGRhdGVBZ2VPbkdldCA9IHRoaXMudXBkYXRlQWdlT25HZXQsIG5vRGVsZXRlT25TdGFsZUdldCA9IHRoaXMubm9EZWxldGVPblN0YWxlR2V0LCBcbiAgICAgICAgLy8gc2V0IG9wdGlvbnNcbiAgICAgICAgdHRsID0gdGhpcy50dGwsIG5vRGlzcG9zZU9uU2V0ID0gdGhpcy5ub0Rpc3Bvc2VPblNldCwgc2l6ZSA9IDAsIHNpemVDYWxjdWxhdGlvbiA9IHRoaXMuc2l6ZUNhbGN1bGF0aW9uLCBub1VwZGF0ZVRUTCA9IHRoaXMubm9VcGRhdGVUVEwsIFxuICAgICAgICAvLyBmZXRjaCBleGNsdXNpdmUgb3B0aW9uc1xuICAgICAgICBub0RlbGV0ZU9uRmV0Y2hSZWplY3Rpb24gPSB0aGlzLm5vRGVsZXRlT25GZXRjaFJlamVjdGlvbiwgYWxsb3dTdGFsZU9uRmV0Y2hSZWplY3Rpb24gPSB0aGlzLmFsbG93U3RhbGVPbkZldGNoUmVqZWN0aW9uLCBpZ25vcmVGZXRjaEFib3J0ID0gdGhpcy5pZ25vcmVGZXRjaEFib3J0LCBhbGxvd1N0YWxlT25GZXRjaEFib3J0ID0gdGhpcy5hbGxvd1N0YWxlT25GZXRjaEFib3J0LCBjb250ZXh0LCBmb3JjZVJlZnJlc2ggPSBmYWxzZSwgc3RhdHVzLCBzaWduYWwsIH0gPSBmZXRjaE9wdGlvbnM7XG4gICAgICAgIGlmICghdGhpcy4jaGFzRmV0Y2hNZXRob2QpIHtcbiAgICAgICAgICAgIGlmIChzdGF0dXMpXG4gICAgICAgICAgICAgICAgc3RhdHVzLmZldGNoID0gJ2dldCc7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXQoaywge1xuICAgICAgICAgICAgICAgIGFsbG93U3RhbGUsXG4gICAgICAgICAgICAgICAgdXBkYXRlQWdlT25HZXQsXG4gICAgICAgICAgICAgICAgbm9EZWxldGVPblN0YWxlR2V0LFxuICAgICAgICAgICAgICAgIHN0YXR1cyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBhbGxvd1N0YWxlLFxuICAgICAgICAgICAgdXBkYXRlQWdlT25HZXQsXG4gICAgICAgICAgICBub0RlbGV0ZU9uU3RhbGVHZXQsXG4gICAgICAgICAgICB0dGwsXG4gICAgICAgICAgICBub0Rpc3Bvc2VPblNldCxcbiAgICAgICAgICAgIHNpemUsXG4gICAgICAgICAgICBzaXplQ2FsY3VsYXRpb24sXG4gICAgICAgICAgICBub1VwZGF0ZVRUTCxcbiAgICAgICAgICAgIG5vRGVsZXRlT25GZXRjaFJlamVjdGlvbixcbiAgICAgICAgICAgIGFsbG93U3RhbGVPbkZldGNoUmVqZWN0aW9uLFxuICAgICAgICAgICAgYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydCxcbiAgICAgICAgICAgIGlnbm9yZUZldGNoQWJvcnQsXG4gICAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgICBzaWduYWwsXG4gICAgICAgIH07XG4gICAgICAgIGxldCBpbmRleCA9IHRoaXMuI2tleU1hcC5nZXQoayk7XG4gICAgICAgIGlmIChpbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoc3RhdHVzKVxuICAgICAgICAgICAgICAgIHN0YXR1cy5mZXRjaCA9ICdtaXNzJztcbiAgICAgICAgICAgIGNvbnN0IHAgPSB0aGlzLiNiYWNrZ3JvdW5kRmV0Y2goaywgaW5kZXgsIG9wdGlvbnMsIGNvbnRleHQpO1xuICAgICAgICAgICAgcmV0dXJuIChwLl9fcmV0dXJuZWQgPSBwKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIGluIGNhY2hlLCBtYXliZSBhbHJlYWR5IGZldGNoaW5nXG4gICAgICAgICAgICBjb25zdCB2ID0gdGhpcy4jdmFsTGlzdFtpbmRleF07XG4gICAgICAgICAgICBpZiAodGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2godikpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFsZSA9IGFsbG93U3RhbGUgJiYgdi5fX3N0YWxlV2hpbGVGZXRjaGluZyAhPT0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGlmIChzdGF0dXMpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmZldGNoID0gJ2luZmxpZ2h0JztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWxlKVxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLnJldHVybmVkU3RhbGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gc3RhbGUgPyB2Ll9fc3RhbGVXaGlsZUZldGNoaW5nIDogKHYuX19yZXR1cm5lZCA9IHYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgd2UgZm9yY2UgYSByZWZyZXNoLCB0aGF0IG1lYW5zIGRvIE5PVCBzZXJ2ZSB0aGUgY2FjaGVkIHZhbHVlLFxuICAgICAgICAgICAgLy8gdW5sZXNzIHdlIGFyZSBhbHJlYWR5IGluIHRoZSBwcm9jZXNzIG9mIHJlZnJlc2hpbmcgdGhlIGNhY2hlLlxuICAgICAgICAgICAgY29uc3QgaXNTdGFsZSA9IHRoaXMuI2lzU3RhbGUoaW5kZXgpO1xuICAgICAgICAgICAgaWYgKCFmb3JjZVJlZnJlc2ggJiYgIWlzU3RhbGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdHVzKVxuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZmV0Y2ggPSAnaGl0JztcbiAgICAgICAgICAgICAgICB0aGlzLiNtb3ZlVG9UYWlsKGluZGV4KTtcbiAgICAgICAgICAgICAgICBpZiAodXBkYXRlQWdlT25HZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jdXBkYXRlSXRlbUFnZShpbmRleCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzdGF0dXMpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI3N0YXR1c1RUTChzdGF0dXMsIGluZGV4KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIG9rLCBpdCBpcyBzdGFsZSBvciBhIGZvcmNlZCByZWZyZXNoLCBhbmQgbm90IGFscmVhZHkgZmV0Y2hpbmcuXG4gICAgICAgICAgICAvLyByZWZyZXNoIHRoZSBjYWNoZS5cbiAgICAgICAgICAgIGNvbnN0IHAgPSB0aGlzLiNiYWNrZ3JvdW5kRmV0Y2goaywgaW5kZXgsIG9wdGlvbnMsIGNvbnRleHQpO1xuICAgICAgICAgICAgY29uc3QgaGFzU3RhbGUgPSBwLl9fc3RhbGVXaGlsZUZldGNoaW5nICE9PSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjb25zdCBzdGFsZVZhbCA9IGhhc1N0YWxlICYmIGFsbG93U3RhbGU7XG4gICAgICAgICAgICBpZiAoc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgc3RhdHVzLmZldGNoID0gaXNTdGFsZSA/ICdzdGFsZScgOiAncmVmcmVzaCc7XG4gICAgICAgICAgICAgICAgaWYgKHN0YWxlVmFsICYmIGlzU3RhbGUpXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5yZXR1cm5lZFN0YWxlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzdGFsZVZhbCA/IHAuX19zdGFsZVdoaWxlRmV0Y2hpbmcgOiAocC5fX3JldHVybmVkID0gcCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgZm9yY2VGZXRjaChrLCBmZXRjaE9wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCB2ID0gYXdhaXQgdGhpcy5mZXRjaChrLCBmZXRjaE9wdGlvbnMpO1xuICAgICAgICBpZiAodiA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdmZXRjaCgpIHJldHVybmVkIHVuZGVmaW5lZCcpO1xuICAgICAgICByZXR1cm4gdjtcbiAgICB9XG4gICAgbWVtbyhrLCBtZW1vT3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IG1lbW9NZXRob2QgPSB0aGlzLiNtZW1vTWV0aG9kO1xuICAgICAgICBpZiAoIW1lbW9NZXRob2QpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbm8gbWVtb01ldGhvZCBwcm92aWRlZCB0byBjb25zdHJ1Y3RvcicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgY29udGV4dCwgZm9yY2VSZWZyZXNoLCAuLi5vcHRpb25zIH0gPSBtZW1vT3B0aW9ucztcbiAgICAgICAgY29uc3QgdiA9IHRoaXMuZ2V0KGssIG9wdGlvbnMpO1xuICAgICAgICBpZiAoIWZvcmNlUmVmcmVzaCAmJiB2ICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgY29uc3QgdnYgPSBtZW1vTWV0aG9kKGssIHYsIHtcbiAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zZXQoaywgdnYsIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gdnY7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiBhIHZhbHVlIGZyb20gdGhlIGNhY2hlLiBXaWxsIHVwZGF0ZSB0aGUgcmVjZW5jeSBvZiB0aGUgY2FjaGVcbiAgICAgKiBlbnRyeSBmb3VuZC5cbiAgICAgKlxuICAgICAqIElmIHRoZSBrZXkgaXMgbm90IGZvdW5kLCBnZXQoKSB3aWxsIHJldHVybiBgdW5kZWZpbmVkYC5cbiAgICAgKi9cbiAgICBnZXQoaywgZ2V0T3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHsgYWxsb3dTdGFsZSA9IHRoaXMuYWxsb3dTdGFsZSwgdXBkYXRlQWdlT25HZXQgPSB0aGlzLnVwZGF0ZUFnZU9uR2V0LCBub0RlbGV0ZU9uU3RhbGVHZXQgPSB0aGlzLm5vRGVsZXRlT25TdGFsZUdldCwgc3RhdHVzLCB9ID0gZ2V0T3B0aW9ucztcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLiNrZXlNYXAuZ2V0KGspO1xuICAgICAgICBpZiAoaW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLiN2YWxMaXN0W2luZGV4XTtcbiAgICAgICAgICAgIGNvbnN0IGZldGNoaW5nID0gdGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2godmFsdWUpO1xuICAgICAgICAgICAgaWYgKHN0YXR1cylcbiAgICAgICAgICAgICAgICB0aGlzLiNzdGF0dXNUVEwoc3RhdHVzLCBpbmRleCk7XG4gICAgICAgICAgICBpZiAodGhpcy4jaXNTdGFsZShpbmRleCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdHVzKVxuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZ2V0ID0gJ3N0YWxlJztcbiAgICAgICAgICAgICAgICAvLyBkZWxldGUgb25seSBpZiBub3QgYW4gaW4tZmxpZ2h0IGJhY2tncm91bmQgZmV0Y2hcbiAgICAgICAgICAgICAgICBpZiAoIWZldGNoaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghbm9EZWxldGVPblN0YWxlR2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiNkZWxldGUoaywgJ2V4cGlyZScpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgJiYgYWxsb3dTdGFsZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cy5yZXR1cm5lZFN0YWxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFsbG93U3RhbGUgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93U3RhbGUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLl9fc3RhbGVXaGlsZUZldGNoaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cy5yZXR1cm5lZFN0YWxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWxsb3dTdGFsZSA/IHZhbHVlLl9fc3RhbGVXaGlsZUZldGNoaW5nIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChzdGF0dXMpXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5nZXQgPSAnaGl0JztcbiAgICAgICAgICAgICAgICAvLyBpZiB3ZSdyZSBjdXJyZW50bHkgZmV0Y2hpbmcgaXQsIHdlIGRvbid0IGFjdHVhbGx5IGhhdmUgaXQgeWV0XG4gICAgICAgICAgICAgICAgLy8gaXQncyBub3Qgc3RhbGUsIHdoaWNoIG1lYW5zIHRoaXMgaXNuJ3QgYSBzdGFsZVdoaWxlUmVmZXRjaGluZy5cbiAgICAgICAgICAgICAgICAvLyBJZiBpdCdzIG5vdCBzdGFsZSwgYW5kIGZldGNoaW5nLCBBTkQgaGFzIGEgX19zdGFsZVdoaWxlRmV0Y2hpbmdcbiAgICAgICAgICAgICAgICAvLyB2YWx1ZSwgdGhlbiB0aGF0IG1lYW5zIHRoZSB1c2VyIGZldGNoZWQgd2l0aCB7Zm9yY2VSZWZyZXNoOnRydWV9LFxuICAgICAgICAgICAgICAgIC8vIHNvIGl0J3Mgc2FmZSB0byByZXR1cm4gdGhhdCB2YWx1ZS5cbiAgICAgICAgICAgICAgICBpZiAoZmV0Y2hpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLl9fc3RhbGVXaGlsZUZldGNoaW5nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLiNtb3ZlVG9UYWlsKGluZGV4KTtcbiAgICAgICAgICAgICAgICBpZiAodXBkYXRlQWdlT25HZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jdXBkYXRlSXRlbUFnZShpbmRleCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzdGF0dXMpIHtcbiAgICAgICAgICAgIHN0YXR1cy5nZXQgPSAnbWlzcyc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgI2Nvbm5lY3QocCwgbikge1xuICAgICAgICB0aGlzLiNwcmV2W25dID0gcDtcbiAgICAgICAgdGhpcy4jbmV4dFtwXSA9IG47XG4gICAgfVxuICAgICNtb3ZlVG9UYWlsKGluZGV4KSB7XG4gICAgICAgIC8vIGlmIHRhaWwgYWxyZWFkeSwgbm90aGluZyB0byBkb1xuICAgICAgICAvLyBpZiBoZWFkLCBtb3ZlIGhlYWQgdG8gbmV4dFtpbmRleF1cbiAgICAgICAgLy8gZWxzZVxuICAgICAgICAvLyAgIG1vdmUgbmV4dFtwcmV2W2luZGV4XV0gdG8gbmV4dFtpbmRleF0gKGhlYWQgaGFzIG5vIHByZXYpXG4gICAgICAgIC8vICAgbW92ZSBwcmV2W25leHRbaW5kZXhdXSB0byBwcmV2W2luZGV4XVxuICAgICAgICAvLyBwcmV2W2luZGV4XSA9IHRhaWxcbiAgICAgICAgLy8gbmV4dFt0YWlsXSA9IGluZGV4XG4gICAgICAgIC8vIHRhaWwgPSBpbmRleFxuICAgICAgICBpZiAoaW5kZXggIT09IHRoaXMuI3RhaWwpIHtcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gdGhpcy4jaGVhZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuI2hlYWQgPSB0aGlzLiNuZXh0W2luZGV4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuI2Nvbm5lY3QodGhpcy4jcHJldltpbmRleF0sIHRoaXMuI25leHRbaW5kZXhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuI2Nvbm5lY3QodGhpcy4jdGFpbCwgaW5kZXgpO1xuICAgICAgICAgICAgdGhpcy4jdGFpbCA9IGluZGV4O1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlbGV0ZXMgYSBrZXkgb3V0IG9mIHRoZSBjYWNoZS5cbiAgICAgKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUga2V5IHdhcyBkZWxldGVkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAgICovXG4gICAgZGVsZXRlKGspIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2RlbGV0ZShrLCAnZGVsZXRlJyk7XG4gICAgfVxuICAgICNkZWxldGUoaywgcmVhc29uKSB7XG4gICAgICAgIGxldCBkZWxldGVkID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLiNzaXplICE9PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuI2tleU1hcC5nZXQoayk7XG4gICAgICAgICAgICBpZiAoaW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLiNzaXplID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI2NsZWFyKHJlYXNvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiNyZW1vdmVJdGVtU2l6ZShpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHYgPSB0aGlzLiN2YWxMaXN0W2luZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHYpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2Ll9fYWJvcnRDb250cm9sbGVyLmFib3J0KG5ldyBFcnJvcignZGVsZXRlZCcpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLiNoYXNEaXNwb3NlIHx8IHRoaXMuI2hhc0Rpc3Bvc2VBZnRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuI2hhc0Rpc3Bvc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiNkaXNwb3NlPy4odiwgaywgcmVhc29uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLiNoYXNEaXNwb3NlQWZ0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiNkaXNwb3NlZD8ucHVzaChbdiwgaywgcmVhc29uXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy4ja2V5TWFwLmRlbGV0ZShrKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4ja2V5TGlzdFtpbmRleF0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI3ZhbExpc3RbaW5kZXhdID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IHRoaXMuI3RhaWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuI3RhaWwgPSB0aGlzLiNwcmV2W2luZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpbmRleCA9PT0gdGhpcy4jaGVhZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jaGVhZCA9IHRoaXMuI25leHRbaW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGkgPSB0aGlzLiNwcmV2W2luZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuI25leHRbcGldID0gdGhpcy4jbmV4dFtpbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuaSA9IHRoaXMuI25leHRbaW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jcHJldltuaV0gPSB0aGlzLiNwcmV2W2luZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLiNzaXplLS07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI2ZyZWUucHVzaChpbmRleCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLiNoYXNEaXNwb3NlQWZ0ZXIgJiYgdGhpcy4jZGlzcG9zZWQ/Lmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgZHQgPSB0aGlzLiNkaXNwb3NlZDtcbiAgICAgICAgICAgIGxldCB0YXNrO1xuICAgICAgICAgICAgd2hpbGUgKCh0YXNrID0gZHQ/LnNoaWZ0KCkpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jZGlzcG9zZUFmdGVyPy4oLi4udGFzayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlbGV0ZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENsZWFyIHRoZSBjYWNoZSBlbnRpcmVseSwgdGhyb3dpbmcgYXdheSBhbGwgdmFsdWVzLlxuICAgICAqL1xuICAgIGNsZWFyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jY2xlYXIoJ2RlbGV0ZScpO1xuICAgIH1cbiAgICAjY2xlYXIocmVhc29uKSB7XG4gICAgICAgIGZvciAoY29uc3QgaW5kZXggb2YgdGhpcy4jcmluZGV4ZXMoeyBhbGxvd1N0YWxlOiB0cnVlIH0pKSB7XG4gICAgICAgICAgICBjb25zdCB2ID0gdGhpcy4jdmFsTGlzdFtpbmRleF07XG4gICAgICAgICAgICBpZiAodGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2godikpIHtcbiAgICAgICAgICAgICAgICB2Ll9fYWJvcnRDb250cm9sbGVyLmFib3J0KG5ldyBFcnJvcignZGVsZXRlZCcpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGsgPSB0aGlzLiNrZXlMaXN0W2luZGV4XTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy4jaGFzRGlzcG9zZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiNkaXNwb3NlPy4odiwgaywgcmVhc29uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuI2hhc0Rpc3Bvc2VBZnRlcikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiNkaXNwb3NlZD8ucHVzaChbdiwgaywgcmVhc29uXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuI2tleU1hcC5jbGVhcigpO1xuICAgICAgICB0aGlzLiN2YWxMaXN0LmZpbGwodW5kZWZpbmVkKTtcbiAgICAgICAgdGhpcy4ja2V5TGlzdC5maWxsKHVuZGVmaW5lZCk7XG4gICAgICAgIGlmICh0aGlzLiN0dGxzICYmIHRoaXMuI3N0YXJ0cykge1xuICAgICAgICAgICAgdGhpcy4jdHRscy5maWxsKDApO1xuICAgICAgICAgICAgdGhpcy4jc3RhcnRzLmZpbGwoMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuI3NpemVzKSB7XG4gICAgICAgICAgICB0aGlzLiNzaXplcy5maWxsKDApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuI2hlYWQgPSAwO1xuICAgICAgICB0aGlzLiN0YWlsID0gMDtcbiAgICAgICAgdGhpcy4jZnJlZS5sZW5ndGggPSAwO1xuICAgICAgICB0aGlzLiNjYWxjdWxhdGVkU2l6ZSA9IDA7XG4gICAgICAgIHRoaXMuI3NpemUgPSAwO1xuICAgICAgICBpZiAodGhpcy4jaGFzRGlzcG9zZUFmdGVyICYmIHRoaXMuI2Rpc3Bvc2VkKSB7XG4gICAgICAgICAgICBjb25zdCBkdCA9IHRoaXMuI2Rpc3Bvc2VkO1xuICAgICAgICAgICAgbGV0IHRhc2s7XG4gICAgICAgICAgICB3aGlsZSAoKHRhc2sgPSBkdD8uc2hpZnQoKSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiNkaXNwb3NlQWZ0ZXI/LiguLi50YXNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuTFJVQ2FjaGUgPSBMUlVDYWNoZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk1pbmlwYXNzID0gZXhwb3J0cy5pc1dyaXRhYmxlID0gZXhwb3J0cy5pc1JlYWRhYmxlID0gZXhwb3J0cy5pc1N0cmVhbSA9IHZvaWQgMDtcbmNvbnN0IHByb2MgPSB0eXBlb2YgcHJvY2VzcyA9PT0gJ29iamVjdCcgJiYgcHJvY2Vzc1xuICAgID8gcHJvY2Vzc1xuICAgIDoge1xuICAgICAgICBzdGRvdXQ6IG51bGwsXG4gICAgICAgIHN0ZGVycjogbnVsbCxcbiAgICB9O1xuY29uc3Qgbm9kZV9ldmVudHNfMSA9IHJlcXVpcmUoXCJub2RlOmV2ZW50c1wiKTtcbmNvbnN0IG5vZGVfc3RyZWFtXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIm5vZGU6c3RyZWFtXCIpKTtcbmNvbnN0IG5vZGVfc3RyaW5nX2RlY29kZXJfMSA9IHJlcXVpcmUoXCJub2RlOnN0cmluZ19kZWNvZGVyXCIpO1xuLyoqXG4gKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgYXJndW1lbnQgaXMgYSBNaW5pcGFzcyBzdHJlYW0sIE5vZGUgc3RyZWFtLCBvciBzb21ldGhpbmdcbiAqIGVsc2UgdGhhdCBNaW5pcGFzcyBjYW4gaW50ZXJhY3Qgd2l0aC5cbiAqL1xuY29uc3QgaXNTdHJlYW0gPSAocykgPT4gISFzICYmXG4gICAgdHlwZW9mIHMgPT09ICdvYmplY3QnICYmXG4gICAgKHMgaW5zdGFuY2VvZiBNaW5pcGFzcyB8fFxuICAgICAgICBzIGluc3RhbmNlb2Ygbm9kZV9zdHJlYW1fMS5kZWZhdWx0IHx8XG4gICAgICAgICgwLCBleHBvcnRzLmlzUmVhZGFibGUpKHMpIHx8XG4gICAgICAgICgwLCBleHBvcnRzLmlzV3JpdGFibGUpKHMpKTtcbmV4cG9ydHMuaXNTdHJlYW0gPSBpc1N0cmVhbTtcbi8qKlxuICogUmV0dXJuIHRydWUgaWYgdGhlIGFyZ3VtZW50IGlzIGEgdmFsaWQge0BsaW5rIE1pbmlwYXNzLlJlYWRhYmxlfVxuICovXG5jb25zdCBpc1JlYWRhYmxlID0gKHMpID0+ICEhcyAmJlxuICAgIHR5cGVvZiBzID09PSAnb2JqZWN0JyAmJlxuICAgIHMgaW5zdGFuY2VvZiBub2RlX2V2ZW50c18xLkV2ZW50RW1pdHRlciAmJlxuICAgIHR5cGVvZiBzLnBpcGUgPT09ICdmdW5jdGlvbicgJiZcbiAgICAvLyBub2RlIGNvcmUgV3JpdGFibGUgc3RyZWFtcyBoYXZlIGEgcGlwZSgpIG1ldGhvZCwgYnV0IGl0IHRocm93c1xuICAgIHMucGlwZSAhPT0gbm9kZV9zdHJlYW1fMS5kZWZhdWx0LldyaXRhYmxlLnByb3RvdHlwZS5waXBlO1xuZXhwb3J0cy5pc1JlYWRhYmxlID0gaXNSZWFkYWJsZTtcbi8qKlxuICogUmV0dXJuIHRydWUgaWYgdGhlIGFyZ3VtZW50IGlzIGEgdmFsaWQge0BsaW5rIE1pbmlwYXNzLldyaXRhYmxlfVxuICovXG5jb25zdCBpc1dyaXRhYmxlID0gKHMpID0+ICEhcyAmJlxuICAgIHR5cGVvZiBzID09PSAnb2JqZWN0JyAmJlxuICAgIHMgaW5zdGFuY2VvZiBub2RlX2V2ZW50c18xLkV2ZW50RW1pdHRlciAmJlxuICAgIHR5cGVvZiBzLndyaXRlID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIHMuZW5kID09PSAnZnVuY3Rpb24nO1xuZXhwb3J0cy5pc1dyaXRhYmxlID0gaXNXcml0YWJsZTtcbmNvbnN0IEVPRiA9IFN5bWJvbCgnRU9GJyk7XG5jb25zdCBNQVlCRV9FTUlUX0VORCA9IFN5bWJvbCgnbWF5YmVFbWl0RW5kJyk7XG5jb25zdCBFTUlUVEVEX0VORCA9IFN5bWJvbCgnZW1pdHRlZEVuZCcpO1xuY29uc3QgRU1JVFRJTkdfRU5EID0gU3ltYm9sKCdlbWl0dGluZ0VuZCcpO1xuY29uc3QgRU1JVFRFRF9FUlJPUiA9IFN5bWJvbCgnZW1pdHRlZEVycm9yJyk7XG5jb25zdCBDTE9TRUQgPSBTeW1ib2woJ2Nsb3NlZCcpO1xuY29uc3QgUkVBRCA9IFN5bWJvbCgncmVhZCcpO1xuY29uc3QgRkxVU0ggPSBTeW1ib2woJ2ZsdXNoJyk7XG5jb25zdCBGTFVTSENIVU5LID0gU3ltYm9sKCdmbHVzaENodW5rJyk7XG5jb25zdCBFTkNPRElORyA9IFN5bWJvbCgnZW5jb2RpbmcnKTtcbmNvbnN0IERFQ09ERVIgPSBTeW1ib2woJ2RlY29kZXInKTtcbmNvbnN0IEZMT1dJTkcgPSBTeW1ib2woJ2Zsb3dpbmcnKTtcbmNvbnN0IFBBVVNFRCA9IFN5bWJvbCgncGF1c2VkJyk7XG5jb25zdCBSRVNVTUUgPSBTeW1ib2woJ3Jlc3VtZScpO1xuY29uc3QgQlVGRkVSID0gU3ltYm9sKCdidWZmZXInKTtcbmNvbnN0IFBJUEVTID0gU3ltYm9sKCdwaXBlcycpO1xuY29uc3QgQlVGRkVSTEVOR1RIID0gU3ltYm9sKCdidWZmZXJMZW5ndGgnKTtcbmNvbnN0IEJVRkZFUlBVU0ggPSBTeW1ib2woJ2J1ZmZlclB1c2gnKTtcbmNvbnN0IEJVRkZFUlNISUZUID0gU3ltYm9sKCdidWZmZXJTaGlmdCcpO1xuY29uc3QgT0JKRUNUTU9ERSA9IFN5bWJvbCgnb2JqZWN0TW9kZScpO1xuLy8gaW50ZXJuYWwgZXZlbnQgd2hlbiBzdHJlYW0gaXMgZGVzdHJveWVkXG5jb25zdCBERVNUUk9ZRUQgPSBTeW1ib2woJ2Rlc3Ryb3llZCcpO1xuLy8gaW50ZXJuYWwgZXZlbnQgd2hlbiBzdHJlYW0gaGFzIGFuIGVycm9yXG5jb25zdCBFUlJPUiA9IFN5bWJvbCgnZXJyb3InKTtcbmNvbnN0IEVNSVREQVRBID0gU3ltYm9sKCdlbWl0RGF0YScpO1xuY29uc3QgRU1JVEVORCA9IFN5bWJvbCgnZW1pdEVuZCcpO1xuY29uc3QgRU1JVEVORDIgPSBTeW1ib2woJ2VtaXRFbmQyJyk7XG5jb25zdCBBU1lOQyA9IFN5bWJvbCgnYXN5bmMnKTtcbmNvbnN0IEFCT1JUID0gU3ltYm9sKCdhYm9ydCcpO1xuY29uc3QgQUJPUlRFRCA9IFN5bWJvbCgnYWJvcnRlZCcpO1xuY29uc3QgU0lHTkFMID0gU3ltYm9sKCdzaWduYWwnKTtcbmNvbnN0IERBVEFMSVNURU5FUlMgPSBTeW1ib2woJ2RhdGFMaXN0ZW5lcnMnKTtcbmNvbnN0IERJU0NBUkRFRCA9IFN5bWJvbCgnZGlzY2FyZGVkJyk7XG5jb25zdCBkZWZlciA9IChmbikgPT4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmbik7XG5jb25zdCBub2RlZmVyID0gKGZuKSA9PiBmbigpO1xuY29uc3QgaXNFbmRpc2ggPSAoZXYpID0+IGV2ID09PSAnZW5kJyB8fCBldiA9PT0gJ2ZpbmlzaCcgfHwgZXYgPT09ICdwcmVmaW5pc2gnO1xuY29uc3QgaXNBcnJheUJ1ZmZlckxpa2UgPSAoYikgPT4gYiBpbnN0YW5jZW9mIEFycmF5QnVmZmVyIHx8XG4gICAgKCEhYiAmJlxuICAgICAgICB0eXBlb2YgYiA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgYi5jb25zdHJ1Y3RvciAmJlxuICAgICAgICBiLmNvbnN0cnVjdG9yLm5hbWUgPT09ICdBcnJheUJ1ZmZlcicgJiZcbiAgICAgICAgYi5ieXRlTGVuZ3RoID49IDApO1xuY29uc3QgaXNBcnJheUJ1ZmZlclZpZXcgPSAoYikgPT4gIUJ1ZmZlci5pc0J1ZmZlcihiKSAmJiBBcnJheUJ1ZmZlci5pc1ZpZXcoYik7XG4vKipcbiAqIEludGVybmFsIGNsYXNzIHJlcHJlc2VudGluZyBhIHBpcGUgdG8gYSBkZXN0aW5hdGlvbiBzdHJlYW0uXG4gKlxuICogQGludGVybmFsXG4gKi9cbmNsYXNzIFBpcGUge1xuICAgIHNyYztcbiAgICBkZXN0O1xuICAgIG9wdHM7XG4gICAgb25kcmFpbjtcbiAgICBjb25zdHJ1Y3RvcihzcmMsIGRlc3QsIG9wdHMpIHtcbiAgICAgICAgdGhpcy5zcmMgPSBzcmM7XG4gICAgICAgIHRoaXMuZGVzdCA9IGRlc3Q7XG4gICAgICAgIHRoaXMub3B0cyA9IG9wdHM7XG4gICAgICAgIHRoaXMub25kcmFpbiA9ICgpID0+IHNyY1tSRVNVTUVdKCk7XG4gICAgICAgIHRoaXMuZGVzdC5vbignZHJhaW4nLCB0aGlzLm9uZHJhaW4pO1xuICAgIH1cbiAgICB1bnBpcGUoKSB7XG4gICAgICAgIHRoaXMuZGVzdC5yZW1vdmVMaXN0ZW5lcignZHJhaW4nLCB0aGlzLm9uZHJhaW4pO1xuICAgIH1cbiAgICAvLyBvbmx5IGhlcmUgZm9yIHRoZSBwcm90b3R5cGVcbiAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICBwcm94eUVycm9ycyhfZXIpIHsgfVxuICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgZW5kKCkge1xuICAgICAgICB0aGlzLnVucGlwZSgpO1xuICAgICAgICBpZiAodGhpcy5vcHRzLmVuZClcbiAgICAgICAgICAgIHRoaXMuZGVzdC5lbmQoKTtcbiAgICB9XG59XG4vKipcbiAqIEludGVybmFsIGNsYXNzIHJlcHJlc2VudGluZyBhIHBpcGUgdG8gYSBkZXN0aW5hdGlvbiBzdHJlYW0gd2hlcmVcbiAqIGVycm9ycyBhcmUgcHJveGllZC5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuY2xhc3MgUGlwZVByb3h5RXJyb3JzIGV4dGVuZHMgUGlwZSB7XG4gICAgdW5waXBlKCkge1xuICAgICAgICB0aGlzLnNyYy5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCB0aGlzLnByb3h5RXJyb3JzKTtcbiAgICAgICAgc3VwZXIudW5waXBlKCk7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKHNyYywgZGVzdCwgb3B0cykge1xuICAgICAgICBzdXBlcihzcmMsIGRlc3QsIG9wdHMpO1xuICAgICAgICB0aGlzLnByb3h5RXJyb3JzID0gZXIgPT4gZGVzdC5lbWl0KCdlcnJvcicsIGVyKTtcbiAgICAgICAgc3JjLm9uKCdlcnJvcicsIHRoaXMucHJveHlFcnJvcnMpO1xuICAgIH1cbn1cbmNvbnN0IGlzT2JqZWN0TW9kZU9wdGlvbnMgPSAobykgPT4gISFvLm9iamVjdE1vZGU7XG5jb25zdCBpc0VuY29kaW5nT3B0aW9ucyA9IChvKSA9PiAhby5vYmplY3RNb2RlICYmICEhby5lbmNvZGluZyAmJiBvLmVuY29kaW5nICE9PSAnYnVmZmVyJztcbi8qKlxuICogTWFpbiBleHBvcnQsIHRoZSBNaW5pcGFzcyBjbGFzc1xuICpcbiAqIGBSVHlwZWAgaXMgdGhlIHR5cGUgb2YgZGF0YSBlbWl0dGVkLCBkZWZhdWx0cyB0byBCdWZmZXJcbiAqXG4gKiBgV1R5cGVgIGlzIHRoZSB0eXBlIG9mIGRhdGEgdG8gYmUgd3JpdHRlbiwgaWYgUlR5cGUgaXMgYnVmZmVyIG9yIHN0cmluZyxcbiAqIHRoZW4gYW55IHtAbGluayBNaW5pcGFzcy5Db250aWd1b3VzRGF0YX0gaXMgYWxsb3dlZC5cbiAqXG4gKiBgRXZlbnRzYCBpcyB0aGUgc2V0IG9mIGV2ZW50IGhhbmRsZXIgc2lnbmF0dXJlcyB0aGF0IHRoaXMgb2JqZWN0XG4gKiB3aWxsIGVtaXQsIHNlZSB7QGxpbmsgTWluaXBhc3MuRXZlbnRzfVxuICovXG5jbGFzcyBNaW5pcGFzcyBleHRlbmRzIG5vZGVfZXZlbnRzXzEuRXZlbnRFbWl0dGVyIHtcbiAgICBbRkxPV0lOR10gPSBmYWxzZTtcbiAgICBbUEFVU0VEXSA9IGZhbHNlO1xuICAgIFtQSVBFU10gPSBbXTtcbiAgICBbQlVGRkVSXSA9IFtdO1xuICAgIFtPQkpFQ1RNT0RFXTtcbiAgICBbRU5DT0RJTkddO1xuICAgIFtBU1lOQ107XG4gICAgW0RFQ09ERVJdO1xuICAgIFtFT0ZdID0gZmFsc2U7XG4gICAgW0VNSVRURURfRU5EXSA9IGZhbHNlO1xuICAgIFtFTUlUVElOR19FTkRdID0gZmFsc2U7XG4gICAgW0NMT1NFRF0gPSBmYWxzZTtcbiAgICBbRU1JVFRFRF9FUlJPUl0gPSBudWxsO1xuICAgIFtCVUZGRVJMRU5HVEhdID0gMDtcbiAgICBbREVTVFJPWUVEXSA9IGZhbHNlO1xuICAgIFtTSUdOQUxdO1xuICAgIFtBQk9SVEVEXSA9IGZhbHNlO1xuICAgIFtEQVRBTElTVEVORVJTXSA9IDA7XG4gICAgW0RJU0NBUkRFRF0gPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiB0cnVlIGlmIHRoZSBzdHJlYW0gY2FuIGJlIHdyaXR0ZW5cbiAgICAgKi9cbiAgICB3cml0YWJsZSA9IHRydWU7XG4gICAgLyoqXG4gICAgICogdHJ1ZSBpZiB0aGUgc3RyZWFtIGNhbiBiZSByZWFkXG4gICAgICovXG4gICAgcmVhZGFibGUgPSB0cnVlO1xuICAgIC8qKlxuICAgICAqIElmIGBSVHlwZWAgaXMgQnVmZmVyLCB0aGVuIG9wdGlvbnMgZG8gbm90IG5lZWQgdG8gYmUgcHJvdmlkZWQuXG4gICAgICogT3RoZXJ3aXNlLCBhbiBvcHRpb25zIG9iamVjdCBtdXN0IGJlIHByb3ZpZGVkIHRvIHNwZWNpZnkgZWl0aGVyXG4gICAgICoge0BsaW5rIE1pbmlwYXNzLlNoYXJlZE9wdGlvbnMub2JqZWN0TW9kZX0gb3JcbiAgICAgKiB7QGxpbmsgTWluaXBhc3MuU2hhcmVkT3B0aW9ucy5lbmNvZGluZ30sIGFzIGFwcHJvcHJpYXRlLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IChhcmdzWzBdIHx8XG4gICAgICAgICAgICB7fSk7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIGlmIChvcHRpb25zLm9iamVjdE1vZGUgJiYgdHlwZW9mIG9wdGlvbnMuZW5jb2RpbmcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFbmNvZGluZyBhbmQgb2JqZWN0TW9kZSBtYXkgbm90IGJlIHVzZWQgdG9nZXRoZXInKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNPYmplY3RNb2RlT3B0aW9ucyhvcHRpb25zKSkge1xuICAgICAgICAgICAgdGhpc1tPQkpFQ1RNT0RFXSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzW0VOQ09ESU5HXSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNFbmNvZGluZ09wdGlvbnMob3B0aW9ucykpIHtcbiAgICAgICAgICAgIHRoaXNbRU5DT0RJTkddID0gb3B0aW9ucy5lbmNvZGluZztcbiAgICAgICAgICAgIHRoaXNbT0JKRUNUTU9ERV0gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXNbT0JKRUNUTU9ERV0gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXNbRU5DT0RJTkddID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzW0FTWU5DXSA9ICEhb3B0aW9ucy5hc3luYztcbiAgICAgICAgdGhpc1tERUNPREVSXSA9IHRoaXNbRU5DT0RJTkddXG4gICAgICAgICAgICA/IG5ldyBub2RlX3N0cmluZ19kZWNvZGVyXzEuU3RyaW5nRGVjb2Rlcih0aGlzW0VOQ09ESU5HXSlcbiAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgLy9AdHMtaWdub3JlIC0gcHJpdmF0ZSBvcHRpb24gZm9yIGRlYnVnZ2luZyBhbmQgdGVzdGluZ1xuICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmRlYnVnRXhwb3NlQnVmZmVyID09PSB0cnVlKSB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2J1ZmZlcicsIHsgZ2V0OiAoKSA9PiB0aGlzW0JVRkZFUl0gfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy9AdHMtaWdub3JlIC0gcHJpdmF0ZSBvcHRpb24gZm9yIGRlYnVnZ2luZyBhbmQgdGVzdGluZ1xuICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmRlYnVnRXhwb3NlUGlwZXMgPT09IHRydWUpIHtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAncGlwZXMnLCB7IGdldDogKCkgPT4gdGhpc1tQSVBFU10gfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBzaWduYWwgfSA9IG9wdGlvbnM7XG4gICAgICAgIGlmIChzaWduYWwpIHtcbiAgICAgICAgICAgIHRoaXNbU0lHTkFMXSA9IHNpZ25hbDtcbiAgICAgICAgICAgIGlmIChzaWduYWwuYWJvcnRlZCkge1xuICAgICAgICAgICAgICAgIHRoaXNbQUJPUlRdKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCAoKSA9PiB0aGlzW0FCT1JUXSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgYW1vdW50IG9mIGRhdGEgc3RvcmVkIGluIHRoZSBidWZmZXIgd2FpdGluZyB0byBiZSByZWFkLlxuICAgICAqXG4gICAgICogRm9yIEJ1ZmZlciBzdHJpbmdzLCB0aGlzIHdpbGwgYmUgdGhlIHRvdGFsIGJ5dGUgbGVuZ3RoLlxuICAgICAqIEZvciBzdHJpbmcgZW5jb2Rpbmcgc3RyZWFtcywgdGhpcyB3aWxsIGJlIHRoZSBzdHJpbmcgY2hhcmFjdGVyIGxlbmd0aCxcbiAgICAgKiBhY2NvcmRpbmcgdG8gSmF2YVNjcmlwdCdzIGBzdHJpbmcubGVuZ3RoYCBsb2dpYy5cbiAgICAgKiBGb3Igb2JqZWN0TW9kZSBzdHJlYW1zLCB0aGlzIGlzIGEgY291bnQgb2YgdGhlIGl0ZW1zIHdhaXRpbmcgdG8gYmVcbiAgICAgKiBlbWl0dGVkLlxuICAgICAqL1xuICAgIGdldCBidWZmZXJMZW5ndGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzW0JVRkZFUkxFTkdUSF07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBgQnVmZmVyRW5jb2RpbmdgIGN1cnJlbnRseSBpbiB1c2UsIG9yIGBudWxsYFxuICAgICAqL1xuICAgIGdldCBlbmNvZGluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbRU5DT0RJTkddO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCAtIFRoaXMgaXMgYSByZWFkIG9ubHkgcHJvcGVydHlcbiAgICAgKi9cbiAgICBzZXQgZW5jb2RpbmcoX2VuYykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VuY29kaW5nIG11c3QgYmUgc2V0IGF0IGluc3RhbnRpYXRpb24gdGltZScpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCAtIEVuY29kaW5nIG1heSBvbmx5IGJlIHNldCBhdCBpbnN0YW50aWF0aW9uIHRpbWVcbiAgICAgKi9cbiAgICBzZXRFbmNvZGluZyhfZW5jKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRW5jb2RpbmcgbXVzdCBiZSBzZXQgYXQgaW5zdGFudGlhdGlvbiB0aW1lJyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRydWUgaWYgdGhpcyBpcyBhbiBvYmplY3RNb2RlIHN0cmVhbVxuICAgICAqL1xuICAgIGdldCBvYmplY3RNb2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpc1tPQkpFQ1RNT0RFXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgLSBUaGlzIGlzIGEgcmVhZC1vbmx5IHByb3BlcnR5XG4gICAgICovXG4gICAgc2V0IG9iamVjdE1vZGUoX29tKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignb2JqZWN0TW9kZSBtdXN0IGJlIHNldCBhdCBpbnN0YW50aWF0aW9uIHRpbWUnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogdHJ1ZSBpZiB0aGlzIGlzIGFuIGFzeW5jIHN0cmVhbVxuICAgICAqL1xuICAgIGdldCBbJ2FzeW5jJ10oKSB7XG4gICAgICAgIHJldHVybiB0aGlzW0FTWU5DXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0IHRvIHRydWUgdG8gbWFrZSB0aGlzIHN0cmVhbSBhc3luYy5cbiAgICAgKlxuICAgICAqIE9uY2Ugc2V0LCBpdCBjYW5ub3QgYmUgdW5zZXQsIGFzIHRoaXMgd291bGQgcG90ZW50aWFsbHkgY2F1c2UgaW5jb3JyZWN0XG4gICAgICogYmVoYXZpb3IuICBJZSwgYSBzeW5jIHN0cmVhbSBjYW4gYmUgbWFkZSBhc3luYywgYnV0IGFuIGFzeW5jIHN0cmVhbVxuICAgICAqIGNhbm5vdCBiZSBzYWZlbHkgbWFkZSBzeW5jLlxuICAgICAqL1xuICAgIHNldCBbJ2FzeW5jJ10oYSkge1xuICAgICAgICB0aGlzW0FTWU5DXSA9IHRoaXNbQVNZTkNdIHx8ICEhYTtcbiAgICB9XG4gICAgLy8gZHJvcCBldmVyeXRoaW5nIGFuZCBnZXQgb3V0IG9mIHRoZSBmbG93IGNvbXBsZXRlbHlcbiAgICBbQUJPUlRdKCkge1xuICAgICAgICB0aGlzW0FCT1JURURdID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5lbWl0KCdhYm9ydCcsIHRoaXNbU0lHTkFMXT8ucmVhc29uKTtcbiAgICAgICAgdGhpcy5kZXN0cm95KHRoaXNbU0lHTkFMXT8ucmVhc29uKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVHJ1ZSBpZiB0aGUgc3RyZWFtIGhhcyBiZWVuIGFib3J0ZWQuXG4gICAgICovXG4gICAgZ2V0IGFib3J0ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzW0FCT1JURURdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBOby1vcCBzZXR0ZXIuIFN0cmVhbSBhYm9ydGVkIHN0YXR1cyBpcyBzZXQgdmlhIHRoZSBBYm9ydFNpZ25hbCBwcm92aWRlZFxuICAgICAqIGluIHRoZSBjb25zdHJ1Y3RvciBvcHRpb25zLlxuICAgICAqL1xuICAgIHNldCBhYm9ydGVkKF8pIHsgfVxuICAgIHdyaXRlKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgICAgICAgaWYgKHRoaXNbQUJPUlRFRF0pXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzW0VPRl0pXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3dyaXRlIGFmdGVyIGVuZCcpO1xuICAgICAgICBpZiAodGhpc1tERVNUUk9ZRURdKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgT2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoJ0Nhbm5vdCBjYWxsIHdyaXRlIGFmdGVyIGEgc3RyZWFtIHdhcyBkZXN0cm95ZWQnKSwgeyBjb2RlOiAnRVJSX1NUUkVBTV9ERVNUUk9ZRUQnIH0pKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNiID0gZW5jb2Rpbmc7XG4gICAgICAgICAgICBlbmNvZGluZyA9ICd1dGY4JztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWVuY29kaW5nKVxuICAgICAgICAgICAgZW5jb2RpbmcgPSAndXRmOCc7XG4gICAgICAgIGNvbnN0IGZuID0gdGhpc1tBU1lOQ10gPyBkZWZlciA6IG5vZGVmZXI7XG4gICAgICAgIC8vIGNvbnZlcnQgYXJyYXkgYnVmZmVycyBhbmQgdHlwZWQgYXJyYXkgdmlld3MgaW50byBidWZmZXJzXG4gICAgICAgIC8vIGF0IHNvbWUgcG9pbnQgaW4gdGhlIGZ1dHVyZSwgd2UgbWF5IHdhbnQgdG8gZG8gdGhlIG9wcG9zaXRlIVxuICAgICAgICAvLyBsZWF2ZSBzdHJpbmdzIGFuZCBidWZmZXJzIGFzLWlzXG4gICAgICAgIC8vIGFueXRoaW5nIGlzIG9ubHkgYWxsb3dlZCBpZiBpbiBvYmplY3QgbW9kZSwgc28gdGhyb3dcbiAgICAgICAgaWYgKCF0aGlzW09CSkVDVE1PREVdICYmICFCdWZmZXIuaXNCdWZmZXIoY2h1bmspKSB7XG4gICAgICAgICAgICBpZiAoaXNBcnJheUJ1ZmZlclZpZXcoY2h1bmspKSB7XG4gICAgICAgICAgICAgICAgLy9AdHMtaWdub3JlIC0gc2luZnVsIHVuc2FmZSB0eXBlIGNoYW5naW5nXG4gICAgICAgICAgICAgICAgY2h1bmsgPSBCdWZmZXIuZnJvbShjaHVuay5idWZmZXIsIGNodW5rLmJ5dGVPZmZzZXQsIGNodW5rLmJ5dGVMZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaXNBcnJheUJ1ZmZlckxpa2UoY2h1bmspKSB7XG4gICAgICAgICAgICAgICAgLy9AdHMtaWdub3JlIC0gc2luZnVsIHVuc2FmZSB0eXBlIGNoYW5naW5nXG4gICAgICAgICAgICAgICAgY2h1bmsgPSBCdWZmZXIuZnJvbShjaHVuayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgY2h1bmsgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb24tY29udGlndW91cyBkYXRhIHdyaXR0ZW4gdG8gbm9uLW9iamVjdE1vZGUgc3RyZWFtJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gaGFuZGxlIG9iamVjdCBtb2RlIHVwIGZyb250LCBzaW5jZSBpdCdzIHNpbXBsZXJcbiAgICAgICAgLy8gdGhpcyB5aWVsZHMgYmV0dGVyIHBlcmZvcm1hbmNlLCBmZXdlciBjaGVja3MgbGF0ZXIuXG4gICAgICAgIGlmICh0aGlzW09CSkVDVE1PREVdKSB7XG4gICAgICAgICAgICAvLyBtYXliZSBpbXBvc3NpYmxlP1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICBpZiAodGhpc1tGTE9XSU5HXSAmJiB0aGlzW0JVRkZFUkxFTkdUSF0gIT09IDApXG4gICAgICAgICAgICAgICAgdGhpc1tGTFVTSF0odHJ1ZSk7XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgaWYgKHRoaXNbRkxPV0lOR10pXG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdkYXRhJywgY2h1bmspO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRoaXNbQlVGRkVSUFVTSF0oY2h1bmspO1xuICAgICAgICAgICAgaWYgKHRoaXNbQlVGRkVSTEVOR1RIXSAhPT0gMClcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ3JlYWRhYmxlJyk7XG4gICAgICAgICAgICBpZiAoY2IpXG4gICAgICAgICAgICAgICAgZm4oY2IpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXNbRkxPV0lOR107XG4gICAgICAgIH1cbiAgICAgICAgLy8gYXQgdGhpcyBwb2ludCB0aGUgY2h1bmsgaXMgYSBidWZmZXIgb3Igc3RyaW5nXG4gICAgICAgIC8vIGRvbid0IGJ1ZmZlciBpdCB1cCBvciBzZW5kIGl0IHRvIHRoZSBkZWNvZGVyXG4gICAgICAgIGlmICghY2h1bmsubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAodGhpc1tCVUZGRVJMRU5HVEhdICE9PSAwKVxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgncmVhZGFibGUnKTtcbiAgICAgICAgICAgIGlmIChjYilcbiAgICAgICAgICAgICAgICBmbihjYik7XG4gICAgICAgICAgICByZXR1cm4gdGhpc1tGTE9XSU5HXTtcbiAgICAgICAgfVxuICAgICAgICAvLyBmYXN0LXBhdGggd3JpdGluZyBzdHJpbmdzIG9mIHNhbWUgZW5jb2RpbmcgdG8gYSBzdHJlYW0gd2l0aFxuICAgICAgICAvLyBhbiBlbXB0eSBidWZmZXIsIHNraXBwaW5nIHRoZSBidWZmZXIvZGVjb2RlciBkYW5jZVxuICAgICAgICBpZiAodHlwZW9mIGNodW5rID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgLy8gdW5sZXNzIGl0IGlzIGEgc3RyaW5nIGFscmVhZHkgcmVhZHkgZm9yIHVzIHRvIHVzZVxuICAgICAgICAgICAgIShlbmNvZGluZyA9PT0gdGhpc1tFTkNPRElOR10gJiYgIXRoaXNbREVDT0RFUl0/Lmxhc3ROZWVkKSkge1xuICAgICAgICAgICAgLy9AdHMtaWdub3JlIC0gc2luZnVsIHVuc2FmZSB0eXBlIGNoYW5nZVxuICAgICAgICAgICAgY2h1bmsgPSBCdWZmZXIuZnJvbShjaHVuaywgZW5jb2RpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoY2h1bmspICYmIHRoaXNbRU5DT0RJTkddKSB7XG4gICAgICAgICAgICAvL0B0cy1pZ25vcmUgLSBzaW5mdWwgdW5zYWZlIHR5cGUgY2hhbmdlXG4gICAgICAgICAgICBjaHVuayA9IHRoaXNbREVDT0RFUl0ud3JpdGUoY2h1bmspO1xuICAgICAgICB9XG4gICAgICAgIC8vIE5vdGU6IGZsdXNoaW5nIENBTiBwb3RlbnRpYWxseSBzd2l0Y2ggdXMgaW50byBub3QtZmxvd2luZyBtb2RlXG4gICAgICAgIGlmICh0aGlzW0ZMT1dJTkddICYmIHRoaXNbQlVGRkVSTEVOR1RIXSAhPT0gMClcbiAgICAgICAgICAgIHRoaXNbRkxVU0hdKHRydWUpO1xuICAgICAgICBpZiAodGhpc1tGTE9XSU5HXSlcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZGF0YScsIGNodW5rKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpc1tCVUZGRVJQVVNIXShjaHVuayk7XG4gICAgICAgIGlmICh0aGlzW0JVRkZFUkxFTkdUSF0gIT09IDApXG4gICAgICAgICAgICB0aGlzLmVtaXQoJ3JlYWRhYmxlJyk7XG4gICAgICAgIGlmIChjYilcbiAgICAgICAgICAgIGZuKGNiKTtcbiAgICAgICAgcmV0dXJuIHRoaXNbRkxPV0lOR107XG4gICAgfVxuICAgIC8qKlxuICAgICAqIExvdy1sZXZlbCBleHBsaWNpdCByZWFkIG1ldGhvZC5cbiAgICAgKlxuICAgICAqIEluIG9iamVjdE1vZGUsIHRoZSBhcmd1bWVudCBpcyBpZ25vcmVkLCBhbmQgb25lIGl0ZW0gaXMgcmV0dXJuZWQgaWZcbiAgICAgKiBhdmFpbGFibGUuXG4gICAgICpcbiAgICAgKiBgbmAgaXMgdGhlIG51bWJlciBvZiBieXRlcyAob3IgaW4gdGhlIGNhc2Ugb2YgZW5jb2Rpbmcgc3RyZWFtcyxcbiAgICAgKiBjaGFyYWN0ZXJzKSB0byBjb25zdW1lLiBJZiBgbmAgaXMgbm90IHByb3ZpZGVkLCB0aGVuIHRoZSBlbnRpcmUgYnVmZmVyXG4gICAgICogaXMgcmV0dXJuZWQsIG9yIGBudWxsYCBpcyByZXR1cm5lZCBpZiBubyBkYXRhIGlzIGF2YWlsYWJsZS5cbiAgICAgKlxuICAgICAqIElmIGBuYCBpcyBncmVhdGVyIHRoYXQgdGhlIGFtb3VudCBvZiBkYXRhIGluIHRoZSBpbnRlcm5hbCBidWZmZXIsXG4gICAgICogdGhlbiBgbnVsbGAgaXMgcmV0dXJuZWQuXG4gICAgICovXG4gICAgcmVhZChuKSB7XG4gICAgICAgIGlmICh0aGlzW0RFU1RST1lFRF0pXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgdGhpc1tESVNDQVJERURdID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzW0JVRkZFUkxFTkdUSF0gPT09IDAgfHxcbiAgICAgICAgICAgIG4gPT09IDAgfHxcbiAgICAgICAgICAgIChuICYmIG4gPiB0aGlzW0JVRkZFUkxFTkdUSF0pKSB7XG4gICAgICAgICAgICB0aGlzW01BWUJFX0VNSVRfRU5EXSgpO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXNbT0JKRUNUTU9ERV0pXG4gICAgICAgICAgICBuID0gbnVsbDtcbiAgICAgICAgaWYgKHRoaXNbQlVGRkVSXS5sZW5ndGggPiAxICYmICF0aGlzW09CSkVDVE1PREVdKSB7XG4gICAgICAgICAgICAvLyBub3Qgb2JqZWN0IG1vZGUsIHNvIGlmIHdlIGhhdmUgYW4gZW5jb2RpbmcsIHRoZW4gUlR5cGUgaXMgc3RyaW5nXG4gICAgICAgICAgICAvLyBvdGhlcndpc2UsIG11c3QgYmUgQnVmZmVyXG4gICAgICAgICAgICB0aGlzW0JVRkZFUl0gPSBbXG4gICAgICAgICAgICAgICAgKHRoaXNbRU5DT0RJTkddXG4gICAgICAgICAgICAgICAgICAgID8gdGhpc1tCVUZGRVJdLmpvaW4oJycpXG4gICAgICAgICAgICAgICAgICAgIDogQnVmZmVyLmNvbmNhdCh0aGlzW0JVRkZFUl0sIHRoaXNbQlVGRkVSTEVOR1RIXSkpLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXQgPSB0aGlzW1JFQURdKG4gfHwgbnVsbCwgdGhpc1tCVUZGRVJdWzBdKTtcbiAgICAgICAgdGhpc1tNQVlCRV9FTUlUX0VORF0oKTtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gICAgW1JFQURdKG4sIGNodW5rKSB7XG4gICAgICAgIGlmICh0aGlzW09CSkVDVE1PREVdKVxuICAgICAgICAgICAgdGhpc1tCVUZGRVJTSElGVF0oKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBjID0gY2h1bms7XG4gICAgICAgICAgICBpZiAobiA9PT0gYy5sZW5ndGggfHwgbiA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICB0aGlzW0JVRkZFUlNISUZUXSgpO1xuICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIGMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgdGhpc1tCVUZGRVJdWzBdID0gYy5zbGljZShuKTtcbiAgICAgICAgICAgICAgICBjaHVuayA9IGMuc2xpY2UoMCwgbik7XG4gICAgICAgICAgICAgICAgdGhpc1tCVUZGRVJMRU5HVEhdIC09IG47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzW0JVRkZFUl1bMF0gPSBjLnN1YmFycmF5KG4pO1xuICAgICAgICAgICAgICAgIGNodW5rID0gYy5zdWJhcnJheSgwLCBuKTtcbiAgICAgICAgICAgICAgICB0aGlzW0JVRkZFUkxFTkdUSF0gLT0gbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVtaXQoJ2RhdGEnLCBjaHVuayk7XG4gICAgICAgIGlmICghdGhpc1tCVUZGRVJdLmxlbmd0aCAmJiAhdGhpc1tFT0ZdKVxuICAgICAgICAgICAgdGhpcy5lbWl0KCdkcmFpbicpO1xuICAgICAgICByZXR1cm4gY2h1bms7XG4gICAgfVxuICAgIGVuZChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2h1bmsgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNiID0gY2h1bms7XG4gICAgICAgICAgICBjaHVuayA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYiA9IGVuY29kaW5nO1xuICAgICAgICAgICAgZW5jb2RpbmcgPSAndXRmOCc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNodW5rICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB0aGlzLndyaXRlKGNodW5rLCBlbmNvZGluZyk7XG4gICAgICAgIGlmIChjYilcbiAgICAgICAgICAgIHRoaXMub25jZSgnZW5kJywgY2IpO1xuICAgICAgICB0aGlzW0VPRl0gPSB0cnVlO1xuICAgICAgICB0aGlzLndyaXRhYmxlID0gZmFsc2U7XG4gICAgICAgIC8vIGlmIHdlIGhhdmVuJ3Qgd3JpdHRlbiBhbnl0aGluZywgdGhlbiBnbyBhaGVhZCBhbmQgZW1pdCxcbiAgICAgICAgLy8gZXZlbiBpZiB3ZSdyZSBub3QgcmVhZGluZy5cbiAgICAgICAgLy8gd2UnbGwgcmUtZW1pdCBpZiBhIG5ldyAnZW5kJyBsaXN0ZW5lciBpcyBhZGRlZCBhbnl3YXkuXG4gICAgICAgIC8vIFRoaXMgbWFrZXMgTVAgbW9yZSBzdWl0YWJsZSB0byB3cml0ZS1vbmx5IHVzZSBjYXNlcy5cbiAgICAgICAgaWYgKHRoaXNbRkxPV0lOR10gfHwgIXRoaXNbUEFVU0VEXSlcbiAgICAgICAgICAgIHRoaXNbTUFZQkVfRU1JVF9FTkRdKCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvLyBkb24ndCBsZXQgdGhlIGludGVybmFsIHJlc3VtZSBiZSBvdmVyd3JpdHRlblxuICAgIFtSRVNVTUVdKCkge1xuICAgICAgICBpZiAodGhpc1tERVNUUk9ZRURdKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAoIXRoaXNbREFUQUxJU1RFTkVSU10gJiYgIXRoaXNbUElQRVNdLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpc1tESVNDQVJERURdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzW1BBVVNFRF0gPSBmYWxzZTtcbiAgICAgICAgdGhpc1tGTE9XSU5HXSA9IHRydWU7XG4gICAgICAgIHRoaXMuZW1pdCgncmVzdW1lJyk7XG4gICAgICAgIGlmICh0aGlzW0JVRkZFUl0ubGVuZ3RoKVxuICAgICAgICAgICAgdGhpc1tGTFVTSF0oKTtcbiAgICAgICAgZWxzZSBpZiAodGhpc1tFT0ZdKVxuICAgICAgICAgICAgdGhpc1tNQVlCRV9FTUlUX0VORF0oKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5lbWl0KCdkcmFpbicpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXN1bWUgdGhlIHN0cmVhbSBpZiBpdCBpcyBjdXJyZW50bHkgaW4gYSBwYXVzZWQgc3RhdGVcbiAgICAgKlxuICAgICAqIElmIGNhbGxlZCB3aGVuIHRoZXJlIGFyZSBubyBwaXBlIGRlc3RpbmF0aW9ucyBvciBgZGF0YWAgZXZlbnQgbGlzdGVuZXJzLFxuICAgICAqIHRoaXMgd2lsbCBwbGFjZSB0aGUgc3RyZWFtIGluIGEgXCJkaXNjYXJkZWRcIiBzdGF0ZSwgd2hlcmUgYWxsIGRhdGEgd2lsbFxuICAgICAqIGJlIHRocm93biBhd2F5LiBUaGUgZGlzY2FyZGVkIHN0YXRlIGlzIHJlbW92ZWQgaWYgYSBwaXBlIGRlc3RpbmF0aW9uIG9yXG4gICAgICogZGF0YSBoYW5kbGVyIGlzIGFkZGVkLCBpZiBwYXVzZSgpIGlzIGNhbGxlZCwgb3IgaWYgYW55IHN5bmNocm9ub3VzIG9yXG4gICAgICogYXN5bmNocm9ub3VzIGl0ZXJhdGlvbiBpcyBzdGFydGVkLlxuICAgICAqL1xuICAgIHJlc3VtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbUkVTVU1FXSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQYXVzZSB0aGUgc3RyZWFtXG4gICAgICovXG4gICAgcGF1c2UoKSB7XG4gICAgICAgIHRoaXNbRkxPV0lOR10gPSBmYWxzZTtcbiAgICAgICAgdGhpc1tQQVVTRURdID0gdHJ1ZTtcbiAgICAgICAgdGhpc1tESVNDQVJERURdID0gZmFsc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHRydWUgaWYgdGhlIHN0cmVhbSBoYXMgYmVlbiBmb3JjaWJseSBkZXN0cm95ZWRcbiAgICAgKi9cbiAgICBnZXQgZGVzdHJveWVkKCkge1xuICAgICAgICByZXR1cm4gdGhpc1tERVNUUk9ZRURdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiB0cnVlIGlmIHRoZSBzdHJlYW0gaXMgY3VycmVudGx5IGluIGEgZmxvd2luZyBzdGF0ZSwgbWVhbmluZyB0aGF0XG4gICAgICogYW55IHdyaXRlcyB3aWxsIGJlIGltbWVkaWF0ZWx5IGVtaXR0ZWQuXG4gICAgICovXG4gICAgZ2V0IGZsb3dpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzW0ZMT1dJTkddO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiB0cnVlIGlmIHRoZSBzdHJlYW0gaXMgY3VycmVudGx5IGluIGEgcGF1c2VkIHN0YXRlXG4gICAgICovXG4gICAgZ2V0IHBhdXNlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbUEFVU0VEXTtcbiAgICB9XG4gICAgW0JVRkZFUlBVU0hdKGNodW5rKSB7XG4gICAgICAgIGlmICh0aGlzW09CSkVDVE1PREVdKVxuICAgICAgICAgICAgdGhpc1tCVUZGRVJMRU5HVEhdICs9IDE7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXNbQlVGRkVSTEVOR1RIXSArPSBjaHVuay5sZW5ndGg7XG4gICAgICAgIHRoaXNbQlVGRkVSXS5wdXNoKGNodW5rKTtcbiAgICB9XG4gICAgW0JVRkZFUlNISUZUXSgpIHtcbiAgICAgICAgaWYgKHRoaXNbT0JKRUNUTU9ERV0pXG4gICAgICAgICAgICB0aGlzW0JVRkZFUkxFTkdUSF0gLT0gMTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpc1tCVUZGRVJMRU5HVEhdIC09IHRoaXNbQlVGRkVSXVswXS5sZW5ndGg7XG4gICAgICAgIHJldHVybiB0aGlzW0JVRkZFUl0uc2hpZnQoKTtcbiAgICB9XG4gICAgW0ZMVVNIXShub0RyYWluID0gZmFsc2UpIHtcbiAgICAgICAgZG8geyB9IHdoaWxlICh0aGlzW0ZMVVNIQ0hVTktdKHRoaXNbQlVGRkVSU0hJRlRdKCkpICYmXG4gICAgICAgICAgICB0aGlzW0JVRkZFUl0ubGVuZ3RoKTtcbiAgICAgICAgaWYgKCFub0RyYWluICYmICF0aGlzW0JVRkZFUl0ubGVuZ3RoICYmICF0aGlzW0VPRl0pXG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2RyYWluJyk7XG4gICAgfVxuICAgIFtGTFVTSENIVU5LXShjaHVuaykge1xuICAgICAgICB0aGlzLmVtaXQoJ2RhdGEnLCBjaHVuayk7XG4gICAgICAgIHJldHVybiB0aGlzW0ZMT1dJTkddO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQaXBlIGFsbCBkYXRhIGVtaXR0ZWQgYnkgdGhpcyBzdHJlYW0gaW50byB0aGUgZGVzdGluYXRpb24gcHJvdmlkZWQuXG4gICAgICpcbiAgICAgKiBUcmlnZ2VycyB0aGUgZmxvdyBvZiBkYXRhLlxuICAgICAqL1xuICAgIHBpcGUoZGVzdCwgb3B0cykge1xuICAgICAgICBpZiAodGhpc1tERVNUUk9ZRURdKVxuICAgICAgICAgICAgcmV0dXJuIGRlc3Q7XG4gICAgICAgIHRoaXNbRElTQ0FSREVEXSA9IGZhbHNlO1xuICAgICAgICBjb25zdCBlbmRlZCA9IHRoaXNbRU1JVFRFRF9FTkRdO1xuICAgICAgICBvcHRzID0gb3B0cyB8fCB7fTtcbiAgICAgICAgaWYgKGRlc3QgPT09IHByb2Muc3Rkb3V0IHx8IGRlc3QgPT09IHByb2Muc3RkZXJyKVxuICAgICAgICAgICAgb3B0cy5lbmQgPSBmYWxzZTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgb3B0cy5lbmQgPSBvcHRzLmVuZCAhPT0gZmFsc2U7XG4gICAgICAgIG9wdHMucHJveHlFcnJvcnMgPSAhIW9wdHMucHJveHlFcnJvcnM7XG4gICAgICAgIC8vIHBpcGluZyBhbiBlbmRlZCBzdHJlYW0gZW5kcyBpbW1lZGlhdGVseVxuICAgICAgICBpZiAoZW5kZWQpIHtcbiAgICAgICAgICAgIGlmIChvcHRzLmVuZClcbiAgICAgICAgICAgICAgICBkZXN0LmVuZCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gXCJhc1wiIGhlcmUganVzdCBpZ25vcmVzIHRoZSBXVHlwZSwgd2hpY2ggcGlwZXMgZG9uJ3QgY2FyZSBhYm91dCxcbiAgICAgICAgICAgIC8vIHNpbmNlIHRoZXkncmUgb25seSBjb25zdW1pbmcgZnJvbSB1cywgYW5kIHdyaXRpbmcgdG8gdGhlIGRlc3RcbiAgICAgICAgICAgIHRoaXNbUElQRVNdLnB1c2goIW9wdHMucHJveHlFcnJvcnNcbiAgICAgICAgICAgICAgICA/IG5ldyBQaXBlKHRoaXMsIGRlc3QsIG9wdHMpXG4gICAgICAgICAgICAgICAgOiBuZXcgUGlwZVByb3h5RXJyb3JzKHRoaXMsIGRlc3QsIG9wdHMpKTtcbiAgICAgICAgICAgIGlmICh0aGlzW0FTWU5DXSlcbiAgICAgICAgICAgICAgICBkZWZlcigoKSA9PiB0aGlzW1JFU1VNRV0oKSk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhpc1tSRVNVTUVdKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlc3Q7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEZ1bGx5IHVuaG9vayBhIHBpcGVkIGRlc3RpbmF0aW9uIHN0cmVhbS5cbiAgICAgKlxuICAgICAqIElmIHRoZSBkZXN0aW5hdGlvbiBzdHJlYW0gd2FzIHRoZSBvbmx5IGNvbnN1bWVyIG9mIHRoaXMgc3RyZWFtIChpZSxcbiAgICAgKiB0aGVyZSBhcmUgbm8gb3RoZXIgcGlwZWQgZGVzdGluYXRpb25zIG9yIGAnZGF0YSdgIGV2ZW50IGxpc3RlbmVycylcbiAgICAgKiB0aGVuIHRoZSBmbG93IG9mIGRhdGEgd2lsbCBzdG9wIHVudGlsIHRoZXJlIGlzIGFub3RoZXIgY29uc3VtZXIgb3JcbiAgICAgKiB7QGxpbmsgTWluaXBhc3MjcmVzdW1lfSBpcyBleHBsaWNpdGx5IGNhbGxlZC5cbiAgICAgKi9cbiAgICB1bnBpcGUoZGVzdCkge1xuICAgICAgICBjb25zdCBwID0gdGhpc1tQSVBFU10uZmluZChwID0+IHAuZGVzdCA9PT0gZGVzdCk7XG4gICAgICAgIGlmIChwKSB7XG4gICAgICAgICAgICBpZiAodGhpc1tQSVBFU10ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXNbRkxPV0lOR10gJiYgdGhpc1tEQVRBTElTVEVORVJTXSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzW0ZMT1dJTkddID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXNbUElQRVNdID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhpc1tQSVBFU10uc3BsaWNlKHRoaXNbUElQRVNdLmluZGV4T2YocCksIDEpO1xuICAgICAgICAgICAgcC51bnBpcGUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBBbGlhcyBmb3Ige0BsaW5rIE1pbmlwYXNzI29ufVxuICAgICAqL1xuICAgIGFkZExpc3RlbmVyKGV2LCBoYW5kbGVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9uKGV2LCBoYW5kbGVyKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTW9zdGx5IGlkZW50aWNhbCB0byBgRXZlbnRFbWl0dGVyLm9uYCwgd2l0aCB0aGUgZm9sbG93aW5nXG4gICAgICogYmVoYXZpb3IgZGlmZmVyZW5jZXMgdG8gcHJldmVudCBkYXRhIGxvc3MgYW5kIHVubmVjZXNzYXJ5IGhhbmdzOlxuICAgICAqXG4gICAgICogLSBBZGRpbmcgYSAnZGF0YScgZXZlbnQgaGFuZGxlciB3aWxsIHRyaWdnZXIgdGhlIGZsb3cgb2YgZGF0YVxuICAgICAqXG4gICAgICogLSBBZGRpbmcgYSAncmVhZGFibGUnIGV2ZW50IGhhbmRsZXIgd2hlbiB0aGVyZSBpcyBkYXRhIHdhaXRpbmcgdG8gYmUgcmVhZFxuICAgICAqICAgd2lsbCBjYXVzZSAncmVhZGFibGUnIHRvIGJlIGVtaXR0ZWQgaW1tZWRpYXRlbHkuXG4gICAgICpcbiAgICAgKiAtIEFkZGluZyBhbiAnZW5kaXNoJyBldmVudCBoYW5kbGVyICgnZW5kJywgJ2ZpbmlzaCcsIGV0Yy4pIHdoaWNoIGhhc1xuICAgICAqICAgYWxyZWFkeSBwYXNzZWQgd2lsbCBjYXVzZSB0aGUgZXZlbnQgdG8gYmUgZW1pdHRlZCBpbW1lZGlhdGVseSBhbmQgYWxsXG4gICAgICogICBoYW5kbGVycyByZW1vdmVkLlxuICAgICAqXG4gICAgICogLSBBZGRpbmcgYW4gJ2Vycm9yJyBldmVudCBoYW5kbGVyIGFmdGVyIGFuIGVycm9yIGhhcyBiZWVuIGVtaXR0ZWQgd2lsbFxuICAgICAqICAgY2F1c2UgdGhlIGV2ZW50IHRvIGJlIHJlLWVtaXR0ZWQgaW1tZWRpYXRlbHkgd2l0aCB0aGUgZXJyb3IgcHJldmlvdXNseVxuICAgICAqICAgcmFpc2VkLlxuICAgICAqL1xuICAgIG9uKGV2LCBoYW5kbGVyKSB7XG4gICAgICAgIGNvbnN0IHJldCA9IHN1cGVyLm9uKGV2LCBoYW5kbGVyKTtcbiAgICAgICAgaWYgKGV2ID09PSAnZGF0YScpIHtcbiAgICAgICAgICAgIHRoaXNbRElTQ0FSREVEXSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpc1tEQVRBTElTVEVORVJTXSsrO1xuICAgICAgICAgICAgaWYgKCF0aGlzW1BJUEVTXS5sZW5ndGggJiYgIXRoaXNbRkxPV0lOR10pIHtcbiAgICAgICAgICAgICAgICB0aGlzW1JFU1VNRV0oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChldiA9PT0gJ3JlYWRhYmxlJyAmJiB0aGlzW0JVRkZFUkxFTkdUSF0gIT09IDApIHtcbiAgICAgICAgICAgIHN1cGVyLmVtaXQoJ3JlYWRhYmxlJyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNFbmRpc2goZXYpICYmIHRoaXNbRU1JVFRFRF9FTkRdKSB7XG4gICAgICAgICAgICBzdXBlci5lbWl0KGV2KTtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKGV2KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChldiA9PT0gJ2Vycm9yJyAmJiB0aGlzW0VNSVRURURfRVJST1JdKSB7XG4gICAgICAgICAgICBjb25zdCBoID0gaGFuZGxlcjtcbiAgICAgICAgICAgIGlmICh0aGlzW0FTWU5DXSlcbiAgICAgICAgICAgICAgICBkZWZlcigoKSA9PiBoLmNhbGwodGhpcywgdGhpc1tFTUlUVEVEX0VSUk9SXSkpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGguY2FsbCh0aGlzLCB0aGlzW0VNSVRURURfRVJST1JdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBbGlhcyBmb3Ige0BsaW5rIE1pbmlwYXNzI29mZn1cbiAgICAgKi9cbiAgICByZW1vdmVMaXN0ZW5lcihldiwgaGFuZGxlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5vZmYoZXYsIGhhbmRsZXIpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBNb3N0bHkgaWRlbnRpY2FsIHRvIGBFdmVudEVtaXR0ZXIub2ZmYFxuICAgICAqXG4gICAgICogSWYgYSAnZGF0YScgZXZlbnQgaGFuZGxlciBpcyByZW1vdmVkLCBhbmQgaXQgd2FzIHRoZSBsYXN0IGNvbnN1bWVyXG4gICAgICogKGllLCB0aGVyZSBhcmUgbm8gcGlwZSBkZXN0aW5hdGlvbnMgb3Igb3RoZXIgJ2RhdGEnIGV2ZW50IGxpc3RlbmVycyksXG4gICAgICogdGhlbiB0aGUgZmxvdyBvZiBkYXRhIHdpbGwgc3RvcCB1bnRpbCB0aGVyZSBpcyBhbm90aGVyIGNvbnN1bWVyIG9yXG4gICAgICoge0BsaW5rIE1pbmlwYXNzI3Jlc3VtZX0gaXMgZXhwbGljaXRseSBjYWxsZWQuXG4gICAgICovXG4gICAgb2ZmKGV2LCBoYW5kbGVyKSB7XG4gICAgICAgIGNvbnN0IHJldCA9IHN1cGVyLm9mZihldiwgaGFuZGxlcik7XG4gICAgICAgIC8vIGlmIHdlIHByZXZpb3VzbHkgaGFkIGxpc3RlbmVycywgYW5kIG5vdyB3ZSBkb24ndCwgYW5kIHdlIGRvbid0XG4gICAgICAgIC8vIGhhdmUgYW55IHBpcGVzLCB0aGVuIHN0b3AgdGhlIGZsb3csIHVubGVzcyBpdCdzIGJlZW4gZXhwbGljaXRseVxuICAgICAgICAvLyBwdXQgaW4gYSBkaXNjYXJkZWQgZmxvd2luZyBzdGF0ZSB2aWEgc3RyZWFtLnJlc3VtZSgpLlxuICAgICAgICBpZiAoZXYgPT09ICdkYXRhJykge1xuICAgICAgICAgICAgdGhpc1tEQVRBTElTVEVORVJTXSA9IHRoaXMubGlzdGVuZXJzKCdkYXRhJykubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKHRoaXNbREFUQUxJU1RFTkVSU10gPT09IDAgJiZcbiAgICAgICAgICAgICAgICAhdGhpc1tESVNDQVJERURdICYmXG4gICAgICAgICAgICAgICAgIXRoaXNbUElQRVNdLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXNbRkxPV0lOR10gPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBNb3N0bHkgaWRlbnRpY2FsIHRvIGBFdmVudEVtaXR0ZXIucmVtb3ZlQWxsTGlzdGVuZXJzYFxuICAgICAqXG4gICAgICogSWYgYWxsICdkYXRhJyBldmVudCBoYW5kbGVycyBhcmUgcmVtb3ZlZCwgYW5kIHRoZXkgd2VyZSB0aGUgbGFzdCBjb25zdW1lclxuICAgICAqIChpZSwgdGhlcmUgYXJlIG5vIHBpcGUgZGVzdGluYXRpb25zKSwgdGhlbiB0aGUgZmxvdyBvZiBkYXRhIHdpbGwgc3RvcFxuICAgICAqIHVudGlsIHRoZXJlIGlzIGFub3RoZXIgY29uc3VtZXIgb3Ige0BsaW5rIE1pbmlwYXNzI3Jlc3VtZX0gaXMgZXhwbGljaXRseVxuICAgICAqIGNhbGxlZC5cbiAgICAgKi9cbiAgICByZW1vdmVBbGxMaXN0ZW5lcnMoZXYpIHtcbiAgICAgICAgY29uc3QgcmV0ID0gc3VwZXIucmVtb3ZlQWxsTGlzdGVuZXJzKGV2KTtcbiAgICAgICAgaWYgKGV2ID09PSAnZGF0YScgfHwgZXYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpc1tEQVRBTElTVEVORVJTXSA9IDA7XG4gICAgICAgICAgICBpZiAoIXRoaXNbRElTQ0FSREVEXSAmJiAhdGhpc1tQSVBFU10ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpc1tGTE9XSU5HXSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHRydWUgaWYgdGhlICdlbmQnIGV2ZW50IGhhcyBiZWVuIGVtaXR0ZWRcbiAgICAgKi9cbiAgICBnZXQgZW1pdHRlZEVuZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbRU1JVFRFRF9FTkRdO1xuICAgIH1cbiAgICBbTUFZQkVfRU1JVF9FTkRdKCkge1xuICAgICAgICBpZiAoIXRoaXNbRU1JVFRJTkdfRU5EXSAmJlxuICAgICAgICAgICAgIXRoaXNbRU1JVFRFRF9FTkRdICYmXG4gICAgICAgICAgICAhdGhpc1tERVNUUk9ZRURdICYmXG4gICAgICAgICAgICB0aGlzW0JVRkZFUl0ubGVuZ3RoID09PSAwICYmXG4gICAgICAgICAgICB0aGlzW0VPRl0pIHtcbiAgICAgICAgICAgIHRoaXNbRU1JVFRJTkdfRU5EXSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2VuZCcpO1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdwcmVmaW5pc2gnKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZmluaXNoJyk7XG4gICAgICAgICAgICBpZiAodGhpc1tDTE9TRURdKVxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnY2xvc2UnKTtcbiAgICAgICAgICAgIHRoaXNbRU1JVFRJTkdfRU5EXSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1vc3RseSBpZGVudGljYWwgdG8gYEV2ZW50RW1pdHRlci5lbWl0YCwgd2l0aCB0aGUgZm9sbG93aW5nXG4gICAgICogYmVoYXZpb3IgZGlmZmVyZW5jZXMgdG8gcHJldmVudCBkYXRhIGxvc3MgYW5kIHVubmVjZXNzYXJ5IGhhbmdzOlxuICAgICAqXG4gICAgICogSWYgdGhlIHN0cmVhbSBoYXMgYmVlbiBkZXN0cm95ZWQsIGFuZCB0aGUgZXZlbnQgaXMgc29tZXRoaW5nIG90aGVyXG4gICAgICogdGhhbiAnY2xvc2UnIG9yICdlcnJvcicsIHRoZW4gYGZhbHNlYCBpcyByZXR1cm5lZCBhbmQgbm8gaGFuZGxlcnNcbiAgICAgKiBhcmUgY2FsbGVkLlxuICAgICAqXG4gICAgICogSWYgdGhlIGV2ZW50IGlzICdlbmQnLCBhbmQgaGFzIGFscmVhZHkgYmVlbiBlbWl0dGVkLCB0aGVuIHRoZSBldmVudFxuICAgICAqIGlzIGlnbm9yZWQuIElmIHRoZSBzdHJlYW0gaXMgaW4gYSBwYXVzZWQgb3Igbm9uLWZsb3dpbmcgc3RhdGUsIHRoZW5cbiAgICAgKiB0aGUgZXZlbnQgd2lsbCBiZSBkZWZlcnJlZCB1bnRpbCBkYXRhIGZsb3cgcmVzdW1lcy4gSWYgdGhlIHN0cmVhbSBpc1xuICAgICAqIGFzeW5jLCB0aGVuIGhhbmRsZXJzIHdpbGwgYmUgY2FsbGVkIG9uIHRoZSBuZXh0IHRpY2sgcmF0aGVyIHRoYW5cbiAgICAgKiBpbW1lZGlhdGVseS5cbiAgICAgKlxuICAgICAqIElmIHRoZSBldmVudCBpcyAnY2xvc2UnLCBhbmQgJ2VuZCcgaGFzIG5vdCB5ZXQgYmVlbiBlbWl0dGVkLCB0aGVuXG4gICAgICogdGhlIGV2ZW50IHdpbGwgYmUgZGVmZXJyZWQgdW50aWwgYWZ0ZXIgJ2VuZCcgaXMgZW1pdHRlZC5cbiAgICAgKlxuICAgICAqIElmIHRoZSBldmVudCBpcyAnZXJyb3InLCBhbmQgYW4gQWJvcnRTaWduYWwgd2FzIHByb3ZpZGVkIGZvciB0aGUgc3RyZWFtLFxuICAgICAqIGFuZCB0aGVyZSBhcmUgbm8gbGlzdGVuZXJzLCB0aGVuIHRoZSBldmVudCBpcyBpZ25vcmVkLCBtYXRjaGluZyB0aGVcbiAgICAgKiBiZWhhdmlvciBvZiBub2RlIGNvcmUgc3RyZWFtcyBpbiB0aGUgcHJlc2Vuc2Ugb2YgYW4gQWJvcnRTaWduYWwuXG4gICAgICpcbiAgICAgKiBJZiB0aGUgZXZlbnQgaXMgJ2ZpbmlzaCcgb3IgJ3ByZWZpbmlzaCcsIHRoZW4gYWxsIGxpc3RlbmVycyB3aWxsIGJlXG4gICAgICogcmVtb3ZlZCBhZnRlciBlbWl0dGluZyB0aGUgZXZlbnQsIHRvIHByZXZlbnQgZG91YmxlLWZpcmluZy5cbiAgICAgKi9cbiAgICBlbWl0KGV2LCAuLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhcmdzWzBdO1xuICAgICAgICAvLyBlcnJvciBhbmQgY2xvc2UgYXJlIG9ubHkgZXZlbnRzIGFsbG93ZWQgYWZ0ZXIgY2FsbGluZyBkZXN0cm95KClcbiAgICAgICAgaWYgKGV2ICE9PSAnZXJyb3InICYmXG4gICAgICAgICAgICBldiAhPT0gJ2Nsb3NlJyAmJlxuICAgICAgICAgICAgZXYgIT09IERFU1RST1lFRCAmJlxuICAgICAgICAgICAgdGhpc1tERVNUUk9ZRURdKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXYgPT09ICdkYXRhJykge1xuICAgICAgICAgICAgcmV0dXJuICF0aGlzW09CSkVDVE1PREVdICYmICFkYXRhXG4gICAgICAgICAgICAgICAgPyBmYWxzZVxuICAgICAgICAgICAgICAgIDogdGhpc1tBU1lOQ11cbiAgICAgICAgICAgICAgICAgICAgPyAoZGVmZXIoKCkgPT4gdGhpc1tFTUlUREFUQV0oZGF0YSkpLCB0cnVlKVxuICAgICAgICAgICAgICAgICAgICA6IHRoaXNbRU1JVERBVEFdKGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGV2ID09PSAnZW5kJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXNbRU1JVEVORF0oKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChldiA9PT0gJ2Nsb3NlJykge1xuICAgICAgICAgICAgdGhpc1tDTE9TRURdID0gdHJ1ZTtcbiAgICAgICAgICAgIC8vIGRvbid0IGVtaXQgY2xvc2UgYmVmb3JlICdlbmQnIGFuZCAnZmluaXNoJ1xuICAgICAgICAgICAgaWYgKCF0aGlzW0VNSVRURURfRU5EXSAmJiAhdGhpc1tERVNUUk9ZRURdKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IHJldCA9IHN1cGVyLmVtaXQoJ2Nsb3NlJyk7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygnY2xvc2UnKTtcbiAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXYgPT09ICdlcnJvcicpIHtcbiAgICAgICAgICAgIHRoaXNbRU1JVFRFRF9FUlJPUl0gPSBkYXRhO1xuICAgICAgICAgICAgc3VwZXIuZW1pdChFUlJPUiwgZGF0YSk7XG4gICAgICAgICAgICBjb25zdCByZXQgPSAhdGhpc1tTSUdOQUxdIHx8IHRoaXMubGlzdGVuZXJzKCdlcnJvcicpLmxlbmd0aFxuICAgICAgICAgICAgICAgID8gc3VwZXIuZW1pdCgnZXJyb3InLCBkYXRhKVxuICAgICAgICAgICAgICAgIDogZmFsc2U7XG4gICAgICAgICAgICB0aGlzW01BWUJFX0VNSVRfRU5EXSgpO1xuICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChldiA9PT0gJ3Jlc3VtZScpIHtcbiAgICAgICAgICAgIGNvbnN0IHJldCA9IHN1cGVyLmVtaXQoJ3Jlc3VtZScpO1xuICAgICAgICAgICAgdGhpc1tNQVlCRV9FTUlUX0VORF0oKTtcbiAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXYgPT09ICdmaW5pc2gnIHx8IGV2ID09PSAncHJlZmluaXNoJykge1xuICAgICAgICAgICAgY29uc3QgcmV0ID0gc3VwZXIuZW1pdChldik7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhldik7XG4gICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICB9XG4gICAgICAgIC8vIFNvbWUgb3RoZXIgdW5rbm93biBldmVudFxuICAgICAgICBjb25zdCByZXQgPSBzdXBlci5lbWl0KGV2LCAuLi5hcmdzKTtcbiAgICAgICAgdGhpc1tNQVlCRV9FTUlUX0VORF0oKTtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gICAgW0VNSVREQVRBXShkYXRhKSB7XG4gICAgICAgIGZvciAoY29uc3QgcCBvZiB0aGlzW1BJUEVTXSkge1xuICAgICAgICAgICAgaWYgKHAuZGVzdC53cml0ZShkYXRhKSA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgdGhpcy5wYXVzZSgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJldCA9IHRoaXNbRElTQ0FSREVEXSA/IGZhbHNlIDogc3VwZXIuZW1pdCgnZGF0YScsIGRhdGEpO1xuICAgICAgICB0aGlzW01BWUJFX0VNSVRfRU5EXSgpO1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cbiAgICBbRU1JVEVORF0oKSB7XG4gICAgICAgIGlmICh0aGlzW0VNSVRURURfRU5EXSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgdGhpc1tFTUlUVEVEX0VORF0gPSB0cnVlO1xuICAgICAgICB0aGlzLnJlYWRhYmxlID0gZmFsc2U7XG4gICAgICAgIHJldHVybiB0aGlzW0FTWU5DXVxuICAgICAgICAgICAgPyAoZGVmZXIoKCkgPT4gdGhpc1tFTUlURU5EMl0oKSksIHRydWUpXG4gICAgICAgICAgICA6IHRoaXNbRU1JVEVORDJdKCk7XG4gICAgfVxuICAgIFtFTUlURU5EMl0oKSB7XG4gICAgICAgIGlmICh0aGlzW0RFQ09ERVJdKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gdGhpc1tERUNPREVSXS5lbmQoKTtcbiAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBwIG9mIHRoaXNbUElQRVNdKSB7XG4gICAgICAgICAgICAgICAgICAgIHAuZGVzdC53cml0ZShkYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzW0RJU0NBUkRFRF0pXG4gICAgICAgICAgICAgICAgICAgIHN1cGVyLmVtaXQoJ2RhdGEnLCBkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IHAgb2YgdGhpc1tQSVBFU10pIHtcbiAgICAgICAgICAgIHAuZW5kKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmV0ID0gc3VwZXIuZW1pdCgnZW5kJyk7XG4gICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCdlbmQnKTtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGFuIGFycmF5IG9mIGFsbCBlbWl0dGVkIGRhdGEgb25jZVxuICAgICAqIHRoZSBzdHJlYW0gZW5kcy5cbiAgICAgKi9cbiAgICBhc3luYyBjb2xsZWN0KCkge1xuICAgICAgICBjb25zdCBidWYgPSBPYmplY3QuYXNzaWduKFtdLCB7XG4gICAgICAgICAgICBkYXRhTGVuZ3RoOiAwLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCF0aGlzW09CSkVDVE1PREVdKVxuICAgICAgICAgICAgYnVmLmRhdGFMZW5ndGggPSAwO1xuICAgICAgICAvLyBzZXQgdGhlIHByb21pc2UgZmlyc3QsIGluIGNhc2UgYW4gZXJyb3IgaXMgcmFpc2VkXG4gICAgICAgIC8vIGJ5IHRyaWdnZXJpbmcgdGhlIGZsb3cgaGVyZS5cbiAgICAgICAgY29uc3QgcCA9IHRoaXMucHJvbWlzZSgpO1xuICAgICAgICB0aGlzLm9uKCdkYXRhJywgYyA9PiB7XG4gICAgICAgICAgICBidWYucHVzaChjKTtcbiAgICAgICAgICAgIGlmICghdGhpc1tPQkpFQ1RNT0RFXSlcbiAgICAgICAgICAgICAgICBidWYuZGF0YUxlbmd0aCArPSBjLmxlbmd0aDtcbiAgICAgICAgfSk7XG4gICAgICAgIGF3YWl0IHA7XG4gICAgICAgIHJldHVybiBidWY7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiBhIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgY29uY2F0ZW5hdGlvbiBvZiBhbGwgZW1pdHRlZCBkYXRhXG4gICAgICogb25jZSB0aGUgc3RyZWFtIGVuZHMuXG4gICAgICpcbiAgICAgKiBOb3QgYWxsb3dlZCBvbiBvYmplY3RNb2RlIHN0cmVhbXMuXG4gICAgICovXG4gICAgYXN5bmMgY29uY2F0KCkge1xuICAgICAgICBpZiAodGhpc1tPQkpFQ1RNT0RFXSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjYW5ub3QgY29uY2F0IGluIG9iamVjdE1vZGUnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBidWYgPSBhd2FpdCB0aGlzLmNvbGxlY3QoKTtcbiAgICAgICAgcmV0dXJuICh0aGlzW0VOQ09ESU5HXVxuICAgICAgICAgICAgPyBidWYuam9pbignJylcbiAgICAgICAgICAgIDogQnVmZmVyLmNvbmNhdChidWYsIGJ1Zi5kYXRhTGVuZ3RoKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiBhIHZvaWQgUHJvbWlzZSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIHN0cmVhbSBlbmRzLlxuICAgICAqL1xuICAgIGFzeW5jIHByb21pc2UoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uKERFU1RST1lFRCwgKCkgPT4gcmVqZWN0KG5ldyBFcnJvcignc3RyZWFtIGRlc3Ryb3llZCcpKSk7XG4gICAgICAgICAgICB0aGlzLm9uKCdlcnJvcicsIGVyID0+IHJlamVjdChlcikpO1xuICAgICAgICAgICAgdGhpcy5vbignZW5kJywgKCkgPT4gcmVzb2x2ZSgpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFzeW5jaHJvbm91cyBgZm9yIGF3YWl0IG9mYCBpdGVyYXRpb24uXG4gICAgICpcbiAgICAgKiBUaGlzIHdpbGwgY29udGludWUgZW1pdHRpbmcgYWxsIGNodW5rcyB1bnRpbCB0aGUgc3RyZWFtIHRlcm1pbmF0ZXMuXG4gICAgICovXG4gICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpIHtcbiAgICAgICAgLy8gc2V0IHRoaXMgdXAgZnJvbnQsIGluIGNhc2UgdGhlIGNvbnN1bWVyIGRvZXNuJ3QgY2FsbCBuZXh0KClcbiAgICAgICAgLy8gcmlnaHQgYXdheS5cbiAgICAgICAgdGhpc1tESVNDQVJERURdID0gZmFsc2U7XG4gICAgICAgIGxldCBzdG9wcGVkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IHN0b3AgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnBhdXNlKCk7XG4gICAgICAgICAgICBzdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbmV4dCA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChzdG9wcGVkKVxuICAgICAgICAgICAgICAgIHJldHVybiBzdG9wKCk7XG4gICAgICAgICAgICBjb25zdCByZXMgPSB0aGlzLnJlYWQoKTtcbiAgICAgICAgICAgIGlmIChyZXMgIT09IG51bGwpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IGRvbmU6IGZhbHNlLCB2YWx1ZTogcmVzIH0pO1xuICAgICAgICAgICAgaWYgKHRoaXNbRU9GXSlcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RvcCgpO1xuICAgICAgICAgICAgbGV0IHJlc29sdmU7XG4gICAgICAgICAgICBsZXQgcmVqZWN0O1xuICAgICAgICAgICAgY29uc3Qgb25lcnIgPSAoZXIpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9mZignZGF0YScsIG9uZGF0YSk7XG4gICAgICAgICAgICAgICAgdGhpcy5vZmYoJ2VuZCcsIG9uZW5kKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9mZihERVNUUk9ZRUQsIG9uZGVzdHJveSk7XG4gICAgICAgICAgICAgICAgc3RvcCgpO1xuICAgICAgICAgICAgICAgIHJlamVjdChlcik7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3Qgb25kYXRhID0gKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vZmYoJ2Vycm9yJywgb25lcnIpO1xuICAgICAgICAgICAgICAgIHRoaXMub2ZmKCdlbmQnLCBvbmVuZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5vZmYoREVTVFJPWUVELCBvbmRlc3Ryb3kpO1xuICAgICAgICAgICAgICAgIHRoaXMucGF1c2UoKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHsgdmFsdWUsIGRvbmU6ICEhdGhpc1tFT0ZdIH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IG9uZW5kID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub2ZmKCdlcnJvcicsIG9uZXJyKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9mZignZGF0YScsIG9uZGF0YSk7XG4gICAgICAgICAgICAgICAgdGhpcy5vZmYoREVTVFJPWUVELCBvbmRlc3Ryb3kpO1xuICAgICAgICAgICAgICAgIHN0b3AoKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBvbmRlc3Ryb3kgPSAoKSA9PiBvbmVycihuZXcgRXJyb3IoJ3N0cmVhbSBkZXN0cm95ZWQnKSk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlcywgcmVqKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVqZWN0ID0gcmVqO1xuICAgICAgICAgICAgICAgIHJlc29sdmUgPSByZXM7XG4gICAgICAgICAgICAgICAgdGhpcy5vbmNlKERFU1RST1lFRCwgb25kZXN0cm95KTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uY2UoJ2Vycm9yJywgb25lcnIpO1xuICAgICAgICAgICAgICAgIHRoaXMub25jZSgnZW5kJywgb25lbmQpO1xuICAgICAgICAgICAgICAgIHRoaXMub25jZSgnZGF0YScsIG9uZGF0YSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5leHQsXG4gICAgICAgICAgICB0aHJvdzogc3RvcCxcbiAgICAgICAgICAgIHJldHVybjogc3RvcCxcbiAgICAgICAgICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTeW5jaHJvbm91cyBgZm9yIG9mYCBpdGVyYXRpb24uXG4gICAgICpcbiAgICAgKiBUaGUgaXRlcmF0aW9uIHdpbGwgdGVybWluYXRlIHdoZW4gdGhlIGludGVybmFsIGJ1ZmZlciBydW5zIG91dCwgZXZlblxuICAgICAqIGlmIHRoZSBzdHJlYW0gaGFzIG5vdCB5ZXQgdGVybWluYXRlZC5cbiAgICAgKi9cbiAgICBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICAgICAgLy8gc2V0IHRoaXMgdXAgZnJvbnQsIGluIGNhc2UgdGhlIGNvbnN1bWVyIGRvZXNuJ3QgY2FsbCBuZXh0KClcbiAgICAgICAgLy8gcmlnaHQgYXdheS5cbiAgICAgICAgdGhpc1tESVNDQVJERURdID0gZmFsc2U7XG4gICAgICAgIGxldCBzdG9wcGVkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IHN0b3AgPSAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnBhdXNlKCk7XG4gICAgICAgICAgICB0aGlzLm9mZihFUlJPUiwgc3RvcCk7XG4gICAgICAgICAgICB0aGlzLm9mZihERVNUUk9ZRUQsIHN0b3ApO1xuICAgICAgICAgICAgdGhpcy5vZmYoJ2VuZCcsIHN0b3ApO1xuICAgICAgICAgICAgc3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogdW5kZWZpbmVkIH07XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IG5leHQgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoc3RvcHBlZClcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RvcCgpO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnJlYWQoKTtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IHN0b3AoKSA6IHsgZG9uZTogZmFsc2UsIHZhbHVlIH07XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMub25jZSgnZW5kJywgc3RvcCk7XG4gICAgICAgIHRoaXMub25jZShFUlJPUiwgc3RvcCk7XG4gICAgICAgIHRoaXMub25jZShERVNUUk9ZRUQsIHN0b3ApO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmV4dCxcbiAgICAgICAgICAgIHRocm93OiBzdG9wLFxuICAgICAgICAgICAgcmV0dXJuOiBzdG9wLFxuICAgICAgICAgICAgW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZXN0cm95IGEgc3RyZWFtLCBwcmV2ZW50aW5nIGl0IGZyb20gYmVpbmcgdXNlZCBmb3IgYW55IGZ1cnRoZXIgcHVycG9zZS5cbiAgICAgKlxuICAgICAqIElmIHRoZSBzdHJlYW0gaGFzIGEgYGNsb3NlKClgIG1ldGhvZCwgdGhlbiBpdCB3aWxsIGJlIGNhbGxlZCBvblxuICAgICAqIGRlc3RydWN0aW9uLlxuICAgICAqXG4gICAgICogQWZ0ZXIgZGVzdHJ1Y3Rpb24sIGFueSBhdHRlbXB0IHRvIHdyaXRlIGRhdGEsIHJlYWQgZGF0YSwgb3IgZW1pdCBtb3N0XG4gICAgICogZXZlbnRzIHdpbGwgYmUgaWdub3JlZC5cbiAgICAgKlxuICAgICAqIElmIGFuIGVycm9yIGFyZ3VtZW50IGlzIHByb3ZpZGVkLCB0aGVuIGl0IHdpbGwgYmUgZW1pdHRlZCBpbiBhblxuICAgICAqICdlcnJvcicgZXZlbnQuXG4gICAgICovXG4gICAgZGVzdHJveShlcikge1xuICAgICAgICBpZiAodGhpc1tERVNUUk9ZRURdKSB7XG4gICAgICAgICAgICBpZiAoZXIpXG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIGVyKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoREVTVFJPWUVEKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHRoaXNbREVTVFJPWUVEXSA9IHRydWU7XG4gICAgICAgIHRoaXNbRElTQ0FSREVEXSA9IHRydWU7XG4gICAgICAgIC8vIHRocm93IGF3YXkgYWxsIGJ1ZmZlcmVkIGRhdGEsIGl0J3MgbmV2ZXIgY29taW5nIG91dFxuICAgICAgICB0aGlzW0JVRkZFUl0ubGVuZ3RoID0gMDtcbiAgICAgICAgdGhpc1tCVUZGRVJMRU5HVEhdID0gMDtcbiAgICAgICAgY29uc3Qgd2MgPSB0aGlzO1xuICAgICAgICBpZiAodHlwZW9mIHdjLmNsb3NlID09PSAnZnVuY3Rpb24nICYmICF0aGlzW0NMT1NFRF0pXG4gICAgICAgICAgICB3Yy5jbG9zZSgpO1xuICAgICAgICBpZiAoZXIpXG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXIpO1xuICAgICAgICAvLyBpZiBubyBlcnJvciB0byBlbWl0LCBzdGlsbCByZWplY3QgcGVuZGluZyBwcm9taXNlc1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzLmVtaXQoREVTVFJPWUVEKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFsaWFzIGZvciB7QGxpbmsgaXNTdHJlYW19XG4gICAgICpcbiAgICAgKiBGb3JtZXIgZXhwb3J0IGxvY2F0aW9uLCBtYWludGFpbmVkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS5cbiAgICAgKlxuICAgICAqIEBkZXByZWNhdGVkXG4gICAgICovXG4gICAgc3RhdGljIGdldCBpc1N0cmVhbSgpIHtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMuaXNTdHJlYW07XG4gICAgfVxufVxuZXhwb3J0cy5NaW5pcGFzcyA9IE1pbmlwYXNzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5QYXRoU2N1cnJ5ID0gZXhwb3J0cy5QYXRoID0gZXhwb3J0cy5QYXRoU2N1cnJ5RGFyd2luID0gZXhwb3J0cy5QYXRoU2N1cnJ5UG9zaXggPSBleHBvcnRzLlBhdGhTY3VycnlXaW4zMiA9IGV4cG9ydHMuUGF0aFNjdXJyeUJhc2UgPSBleHBvcnRzLlBhdGhQb3NpeCA9IGV4cG9ydHMuUGF0aFdpbjMyID0gZXhwb3J0cy5QYXRoQmFzZSA9IGV4cG9ydHMuQ2hpbGRyZW5DYWNoZSA9IGV4cG9ydHMuUmVzb2x2ZUNhY2hlID0gdm9pZCAwO1xuY29uc3QgbHJ1X2NhY2hlXzEgPSByZXF1aXJlKFwibHJ1LWNhY2hlXCIpO1xuY29uc3Qgbm9kZV9wYXRoXzEgPSByZXF1aXJlKFwibm9kZTpwYXRoXCIpO1xuY29uc3Qgbm9kZV91cmxfMSA9IHJlcXVpcmUoXCJub2RlOnVybFwiKTtcbmNvbnN0IGZzXzEgPSByZXF1aXJlKFwiZnNcIik7XG5jb25zdCBhY3R1YWxGUyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwibm9kZTpmc1wiKSk7XG5jb25zdCByZWFscGF0aFN5bmMgPSBmc18xLnJlYWxwYXRoU3luYy5uYXRpdmU7XG4vLyBUT0RPOiB0ZXN0IHBlcmYgb2YgZnMvcHJvbWlzZXMgcmVhbHBhdGggdnMgcmVhbHBhdGhDQixcbi8vIHNpbmNlIHRoZSBwcm9taXNlcyBvbmUgdXNlcyByZWFscGF0aC5uYXRpdmVcbmNvbnN0IHByb21pc2VzXzEgPSByZXF1aXJlKFwibm9kZTpmcy9wcm9taXNlc1wiKTtcbmNvbnN0IG1pbmlwYXNzXzEgPSByZXF1aXJlKFwibWluaXBhc3NcIik7XG5jb25zdCBkZWZhdWx0RlMgPSB7XG4gICAgbHN0YXRTeW5jOiBmc18xLmxzdGF0U3luYyxcbiAgICByZWFkZGlyOiBmc18xLnJlYWRkaXIsXG4gICAgcmVhZGRpclN5bmM6IGZzXzEucmVhZGRpclN5bmMsXG4gICAgcmVhZGxpbmtTeW5jOiBmc18xLnJlYWRsaW5rU3luYyxcbiAgICByZWFscGF0aFN5bmMsXG4gICAgcHJvbWlzZXM6IHtcbiAgICAgICAgbHN0YXQ6IHByb21pc2VzXzEubHN0YXQsXG4gICAgICAgIHJlYWRkaXI6IHByb21pc2VzXzEucmVhZGRpcixcbiAgICAgICAgcmVhZGxpbms6IHByb21pc2VzXzEucmVhZGxpbmssXG4gICAgICAgIHJlYWxwYXRoOiBwcm9taXNlc18xLnJlYWxwYXRoLFxuICAgIH0sXG59O1xuLy8gaWYgdGhleSBqdXN0IGdhdmUgdXMgcmVxdWlyZSgnZnMnKSB0aGVuIHVzZSBvdXIgZGVmYXVsdFxuY29uc3QgZnNGcm9tT3B0aW9uID0gKGZzT3B0aW9uKSA9PiAhZnNPcHRpb24gfHwgZnNPcHRpb24gPT09IGRlZmF1bHRGUyB8fCBmc09wdGlvbiA9PT0gYWN0dWFsRlMgP1xuICAgIGRlZmF1bHRGU1xuICAgIDoge1xuICAgICAgICAuLi5kZWZhdWx0RlMsXG4gICAgICAgIC4uLmZzT3B0aW9uLFxuICAgICAgICBwcm9taXNlczoge1xuICAgICAgICAgICAgLi4uZGVmYXVsdEZTLnByb21pc2VzLFxuICAgICAgICAgICAgLi4uKGZzT3B0aW9uLnByb21pc2VzIHx8IHt9KSxcbiAgICAgICAgfSxcbiAgICB9O1xuLy8gdHVybiBzb21ldGhpbmcgbGlrZSAvLz8vYzovIGludG8gYzpcXFxuY29uc3QgdW5jRHJpdmVSZWdleHAgPSAvXlxcXFxcXFxcXFw/XFxcXChbYS16XTopXFxcXD8kL2k7XG5jb25zdCB1bmNUb0RyaXZlID0gKHJvb3RQYXRoKSA9PiByb290UGF0aC5yZXBsYWNlKC9cXC8vZywgJ1xcXFwnKS5yZXBsYWNlKHVuY0RyaXZlUmVnZXhwLCAnJDFcXFxcJyk7XG4vLyB3aW5kb3dzIHBhdGhzIGFyZSBzZXBhcmF0ZWQgYnkgZWl0aGVyIC8gb3IgXFxcbmNvbnN0IGVpdGhlclNlcCA9IC9bXFxcXFxcL10vO1xuY29uc3QgVU5LTk9XTiA9IDA7IC8vIG1heSBub3QgZXZlbiBleGlzdCwgZm9yIGFsbCB3ZSBrbm93XG5jb25zdCBJRklGTyA9IDBiMDAwMTtcbmNvbnN0IElGQ0hSID0gMGIwMDEwO1xuY29uc3QgSUZESVIgPSAwYjAxMDA7XG5jb25zdCBJRkJMSyA9IDBiMDExMDtcbmNvbnN0IElGUkVHID0gMGIxMDAwO1xuY29uc3QgSUZMTksgPSAwYjEwMTA7XG5jb25zdCBJRlNPQ0sgPSAwYjExMDA7XG5jb25zdCBJRk1UID0gMGIxMTExO1xuLy8gbWFzayB0byB1bnNldCBsb3cgNCBiaXRzXG5jb25zdCBJRk1UX1VOS05PV04gPSB+SUZNVDtcbi8vIHNldCBhZnRlciBzdWNjZXNzZnVsbHkgY2FsbGluZyByZWFkZGlyKCkgYW5kIGdldHRpbmcgZW50cmllcy5cbmNvbnN0IFJFQURESVJfQ0FMTEVEID0gMGIwMDAwXzAwMDFfMDAwMDtcbi8vIHNldCBhZnRlciBhIHN1Y2Nlc3NmdWwgbHN0YXQoKVxuY29uc3QgTFNUQVRfQ0FMTEVEID0gMGIwMDAwXzAwMTBfMDAwMDtcbi8vIHNldCBpZiBhbiBlbnRyeSAob3Igb25lIG9mIGl0cyBwYXJlbnRzKSBpcyBkZWZpbml0ZWx5IG5vdCBhIGRpclxuY29uc3QgRU5PVERJUiA9IDBiMDAwMF8wMTAwXzAwMDA7XG4vLyBzZXQgaWYgYW4gZW50cnkgKG9yIG9uZSBvZiBpdHMgcGFyZW50cykgZG9lcyBub3QgZXhpc3Rcbi8vIChjYW4gYWxzbyBiZSBzZXQgb24gbHN0YXQgZXJyb3JzIGxpa2UgRUFDQ0VTIG9yIEVOQU1FVE9PTE9ORylcbmNvbnN0IEVOT0VOVCA9IDBiMDAwMF8xMDAwXzAwMDA7XG4vLyBjYW5ub3QgaGF2ZSBjaGlsZCBlbnRyaWVzIC0tIGFsc28gdmVyaWZ5ICZJRk1UIGlzIGVpdGhlciBJRkRJUiBvciBJRkxOS1xuLy8gc2V0IGlmIHdlIGZhaWwgdG8gcmVhZGxpbmtcbmNvbnN0IEVOT1JFQURMSU5LID0gMGIwMDAxXzAwMDBfMDAwMDtcbi8vIHNldCBpZiB3ZSBrbm93IHJlYWxwYXRoKCkgd2lsbCBmYWlsXG5jb25zdCBFTk9SRUFMUEFUSCA9IDBiMDAxMF8wMDAwXzAwMDA7XG5jb25zdCBFTk9DSElMRCA9IEVOT1RESVIgfCBFTk9FTlQgfCBFTk9SRUFMUEFUSDtcbmNvbnN0IFRZUEVNQVNLID0gMGIwMDExXzExMTFfMTExMTtcbmNvbnN0IGVudFRvVHlwZSA9IChzKSA9PiBzLmlzRmlsZSgpID8gSUZSRUdcbiAgICA6IHMuaXNEaXJlY3RvcnkoKSA/IElGRElSXG4gICAgICAgIDogcy5pc1N5bWJvbGljTGluaygpID8gSUZMTktcbiAgICAgICAgICAgIDogcy5pc0NoYXJhY3RlckRldmljZSgpID8gSUZDSFJcbiAgICAgICAgICAgICAgICA6IHMuaXNCbG9ja0RldmljZSgpID8gSUZCTEtcbiAgICAgICAgICAgICAgICAgICAgOiBzLmlzU29ja2V0KCkgPyBJRlNPQ0tcbiAgICAgICAgICAgICAgICAgICAgICAgIDogcy5pc0ZJRk8oKSA/IElGSUZPXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBVTktOT1dOO1xuLy8gbm9ybWFsaXplIHVuaWNvZGUgcGF0aCBuYW1lc1xuY29uc3Qgbm9ybWFsaXplQ2FjaGUgPSBuZXcgTWFwKCk7XG5jb25zdCBub3JtYWxpemUgPSAocykgPT4ge1xuICAgIGNvbnN0IGMgPSBub3JtYWxpemVDYWNoZS5nZXQocyk7XG4gICAgaWYgKGMpXG4gICAgICAgIHJldHVybiBjO1xuICAgIGNvbnN0IG4gPSBzLm5vcm1hbGl6ZSgnTkZLRCcpO1xuICAgIG5vcm1hbGl6ZUNhY2hlLnNldChzLCBuKTtcbiAgICByZXR1cm4gbjtcbn07XG5jb25zdCBub3JtYWxpemVOb2Nhc2VDYWNoZSA9IG5ldyBNYXAoKTtcbmNvbnN0IG5vcm1hbGl6ZU5vY2FzZSA9IChzKSA9PiB7XG4gICAgY29uc3QgYyA9IG5vcm1hbGl6ZU5vY2FzZUNhY2hlLmdldChzKTtcbiAgICBpZiAoYylcbiAgICAgICAgcmV0dXJuIGM7XG4gICAgY29uc3QgbiA9IG5vcm1hbGl6ZShzLnRvTG93ZXJDYXNlKCkpO1xuICAgIG5vcm1hbGl6ZU5vY2FzZUNhY2hlLnNldChzLCBuKTtcbiAgICByZXR1cm4gbjtcbn07XG4vKipcbiAqIEFuIExSVUNhY2hlIGZvciBzdG9yaW5nIHJlc29sdmVkIHBhdGggc3RyaW5ncyBvciBQYXRoIG9iamVjdHMuXG4gKiBAaW50ZXJuYWxcbiAqL1xuY2xhc3MgUmVzb2x2ZUNhY2hlIGV4dGVuZHMgbHJ1X2NhY2hlXzEuTFJVQ2FjaGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcih7IG1heDogMjU2IH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuUmVzb2x2ZUNhY2hlID0gUmVzb2x2ZUNhY2hlO1xuLy8gSW4gb3JkZXIgdG8gcHJldmVudCBibG93aW5nIG91dCB0aGUganMgaGVhcCBieSBhbGxvY2F0aW5nIGh1bmRyZWRzIG9mXG4vLyB0aG91c2FuZHMgb2YgUGF0aCBlbnRyaWVzIHdoZW4gd2Fsa2luZyBleHRyZW1lbHkgbGFyZ2UgdHJlZXMsIHRoZSBcImNoaWxkcmVuXCJcbi8vIGluIHRoaXMgdHJlZSBhcmUgcmVwcmVzZW50ZWQgYnkgc3RvcmluZyBhbiBhcnJheSBvZiBQYXRoIGVudHJpZXMgaW4gYW5cbi8vIExSVUNhY2hlLCBpbmRleGVkIGJ5IHRoZSBwYXJlbnQuICBBdCBhbnkgdGltZSwgUGF0aC5jaGlsZHJlbigpIG1heSByZXR1cm4gYW5cbi8vIGVtcHR5IGFycmF5LCBpbmRpY2F0aW5nIHRoYXQgaXQgZG9lc24ndCBrbm93IGFib3V0IGFueSBvZiBpdHMgY2hpbGRyZW4sIGFuZFxuLy8gdGh1cyBoYXMgdG8gcmVidWlsZCB0aGF0IGNhY2hlLiAgVGhpcyBpcyBmaW5lLCBpdCBqdXN0IG1lYW5zIHRoYXQgd2UgZG9uJ3Rcbi8vIGJlbmVmaXQgYXMgbXVjaCBmcm9tIGhhdmluZyB0aGUgY2FjaGVkIGVudHJpZXMsIGJ1dCBodWdlIGRpcmVjdG9yeSB3YWxrc1xuLy8gZG9uJ3QgYmxvdyBvdXQgdGhlIHN0YWNrLCBhbmQgc21hbGxlciBvbmVzIGFyZSBzdGlsbCBhcyBmYXN0IGFzIHBvc3NpYmxlLlxuLy9cbi8vSXQgZG9lcyBpbXBvc2Ugc29tZSBjb21wbGV4aXR5IHdoZW4gYnVpbGRpbmcgdXAgdGhlIHJlYWRkaXIgZGF0YSwgYmVjYXVzZSB3ZVxuLy9uZWVkIHRvIHBhc3MgYSByZWZlcmVuY2UgdG8gdGhlIGNoaWxkcmVuIGFycmF5IHRoYXQgd2Ugc3RhcnRlZCB3aXRoLlxuLyoqXG4gKiBhbiBMUlVDYWNoZSBmb3Igc3RvcmluZyBjaGlsZCBlbnRyaWVzLlxuICogQGludGVybmFsXG4gKi9cbmNsYXNzIENoaWxkcmVuQ2FjaGUgZXh0ZW5kcyBscnVfY2FjaGVfMS5MUlVDYWNoZSB7XG4gICAgY29uc3RydWN0b3IobWF4U2l6ZSA9IDE2ICogMTAyNCkge1xuICAgICAgICBzdXBlcih7XG4gICAgICAgICAgICBtYXhTaXplLFxuICAgICAgICAgICAgLy8gcGFyZW50ICsgY2hpbGRyZW5cbiAgICAgICAgICAgIHNpemVDYWxjdWxhdGlvbjogYSA9PiBhLmxlbmd0aCArIDEsXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuQ2hpbGRyZW5DYWNoZSA9IENoaWxkcmVuQ2FjaGU7XG5jb25zdCBzZXRBc0N3ZCA9IFN5bWJvbCgnUGF0aFNjdXJyeSBzZXRBc0N3ZCcpO1xuLyoqXG4gKiBQYXRoIG9iamVjdHMgYXJlIHNvcnQgb2YgbGlrZSBhIHN1cGVyLXBvd2VyZWRcbiAqIHtAbGluayBodHRwczovL25vZGVqcy5vcmcvZG9jcy9sYXRlc3QvYXBpL2ZzLmh0bWwjY2xhc3MtZnNkaXJlbnQgZnMuRGlyZW50fVxuICpcbiAqIEVhY2ggb25lIHJlcHJlc2VudHMgYSBzaW5nbGUgZmlsZXN5c3RlbSBlbnRyeSBvbiBkaXNrLCB3aGljaCBtYXkgb3IgbWF5IG5vdFxuICogZXhpc3QuIEl0IGluY2x1ZGVzIG1ldGhvZHMgZm9yIHJlYWRpbmcgdmFyaW91cyB0eXBlcyBvZiBpbmZvcm1hdGlvbiB2aWFcbiAqIGxzdGF0LCByZWFkbGluaywgYW5kIHJlYWRkaXIsIGFuZCBjYWNoZXMgYWxsIGluZm9ybWF0aW9uIHRvIHRoZSBncmVhdGVzdFxuICogZGVncmVlIHBvc3NpYmxlLlxuICpcbiAqIE5vdGUgdGhhdCBmcyBvcGVyYXRpb25zIHRoYXQgd291bGQgbm9ybWFsbHkgdGhyb3cgd2lsbCBpbnN0ZWFkIHJldHVybiBhblxuICogXCJlbXB0eVwiIHZhbHVlLiBUaGlzIGlzIGluIG9yZGVyIHRvIHByZXZlbnQgZXhjZXNzaXZlIG92ZXJoZWFkIGZyb20gZXJyb3JcbiAqIHN0YWNrIHRyYWNlcy5cbiAqL1xuY2xhc3MgUGF0aEJhc2Uge1xuICAgIC8qKlxuICAgICAqIHRoZSBiYXNlbmFtZSBvZiB0aGlzIHBhdGhcbiAgICAgKlxuICAgICAqICoqSW1wb3J0YW50Kio6ICphbHdheXMqIHRlc3QgdGhlIHBhdGggbmFtZSBhZ2FpbnN0IGFueSB0ZXN0IHN0cmluZ1xuICAgICAqIHVzaW5ndGhlIHtAbGluayBpc05hbWVkfSBtZXRob2QsIGFuZCBub3QgYnkgZGlyZWN0bHkgY29tcGFyaW5nIHRoaXNcbiAgICAgKiBzdHJpbmcuIE90aGVyd2lzZSwgdW5pY29kZSBwYXRoIHN0cmluZ3MgdGhhdCB0aGUgc3lzdGVtIHNlZXMgYXMgaWRlbnRpY2FsXG4gICAgICogd2lsbCBub3QgYmUgcHJvcGVybHkgdHJlYXRlZCBhcyB0aGUgc2FtZSBwYXRoLCBsZWFkaW5nIHRvIGluY29ycmVjdFxuICAgICAqIGJlaGF2aW9yIGFuZCBwb3NzaWJsZSBzZWN1cml0eSBpc3N1ZXMuXG4gICAgICovXG4gICAgbmFtZTtcbiAgICAvKipcbiAgICAgKiB0aGUgUGF0aCBlbnRyeSBjb3JyZXNwb25kaW5nIHRvIHRoZSBwYXRoIHJvb3QuXG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICByb290O1xuICAgIC8qKlxuICAgICAqIEFsbCByb290cyBmb3VuZCB3aXRoaW4gdGhlIGN1cnJlbnQgUGF0aFNjdXJyeSBmYW1pbHlcbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHJvb3RzO1xuICAgIC8qKlxuICAgICAqIGEgcmVmZXJlbmNlIHRvIHRoZSBwYXJlbnQgcGF0aCwgb3IgdW5kZWZpbmVkIGluIHRoZSBjYXNlIG9mIHJvb3QgZW50cmllc1xuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcGFyZW50O1xuICAgIC8qKlxuICAgICAqIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHBhdGhzIGFyZSBjb21wYXJlZCBjYXNlLWluc2Vuc2l0aXZlbHlcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBub2Nhc2U7XG4gICAgLyoqXG4gICAgICogYm9vbGVhbiBpbmRpY2F0aW5nIHRoYXQgdGhpcyBwYXRoIGlzIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5XG4gICAgICogb2YgdGhlIFBhdGhTY3VycnkgY29sbGVjdGlvbiB0aGF0IGNvbnRhaW5zIGl0LlxuICAgICAqL1xuICAgIGlzQ1dEID0gZmFsc2U7XG4gICAgLy8gcG90ZW50aWFsIGRlZmF1bHQgZnMgb3ZlcnJpZGVcbiAgICAjZnM7XG4gICAgLy8gU3RhdHMgZmllbGRzXG4gICAgI2RldjtcbiAgICBnZXQgZGV2KCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jZGV2O1xuICAgIH1cbiAgICAjbW9kZTtcbiAgICBnZXQgbW9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI21vZGU7XG4gICAgfVxuICAgICNubGluaztcbiAgICBnZXQgbmxpbmsoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNubGluaztcbiAgICB9XG4gICAgI3VpZDtcbiAgICBnZXQgdWlkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jdWlkO1xuICAgIH1cbiAgICAjZ2lkO1xuICAgIGdldCBnaWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNnaWQ7XG4gICAgfVxuICAgICNyZGV2O1xuICAgIGdldCByZGV2KCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcmRldjtcbiAgICB9XG4gICAgI2Jsa3NpemU7XG4gICAgZ2V0IGJsa3NpemUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNibGtzaXplO1xuICAgIH1cbiAgICAjaW5vO1xuICAgIGdldCBpbm8oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNpbm87XG4gICAgfVxuICAgICNzaXplO1xuICAgIGdldCBzaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jc2l6ZTtcbiAgICB9XG4gICAgI2Jsb2NrcztcbiAgICBnZXQgYmxvY2tzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jYmxvY2tzO1xuICAgIH1cbiAgICAjYXRpbWVNcztcbiAgICBnZXQgYXRpbWVNcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2F0aW1lTXM7XG4gICAgfVxuICAgICNtdGltZU1zO1xuICAgIGdldCBtdGltZU1zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jbXRpbWVNcztcbiAgICB9XG4gICAgI2N0aW1lTXM7XG4gICAgZ2V0IGN0aW1lTXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNjdGltZU1zO1xuICAgIH1cbiAgICAjYmlydGh0aW1lTXM7XG4gICAgZ2V0IGJpcnRodGltZU1zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jYmlydGh0aW1lTXM7XG4gICAgfVxuICAgICNhdGltZTtcbiAgICBnZXQgYXRpbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNhdGltZTtcbiAgICB9XG4gICAgI210aW1lO1xuICAgIGdldCBtdGltZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI210aW1lO1xuICAgIH1cbiAgICAjY3RpbWU7XG4gICAgZ2V0IGN0aW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jY3RpbWU7XG4gICAgfVxuICAgICNiaXJ0aHRpbWU7XG4gICAgZ2V0IGJpcnRodGltZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2JpcnRodGltZTtcbiAgICB9XG4gICAgI21hdGNoTmFtZTtcbiAgICAjZGVwdGg7XG4gICAgI2Z1bGxwYXRoO1xuICAgICNmdWxscGF0aFBvc2l4O1xuICAgICNyZWxhdGl2ZTtcbiAgICAjcmVsYXRpdmVQb3NpeDtcbiAgICAjdHlwZTtcbiAgICAjY2hpbGRyZW47XG4gICAgI2xpbmtUYXJnZXQ7XG4gICAgI3JlYWxwYXRoO1xuICAgIC8qKlxuICAgICAqIFRoaXMgcHJvcGVydHkgaXMgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgRGlyZW50IGNsYXNzIGFzIG9mXG4gICAgICogTm9kZSB2MjAsIHdoZXJlIERpcmVudFsncGFyZW50UGF0aCddIHJlZmVycyB0byB0aGUgcGF0aCBvZiB0aGVcbiAgICAgKiBkaXJlY3RvcnkgdGhhdCB3YXMgcGFzc2VkIHRvIHJlYWRkaXIuIEZvciByb290IGVudHJpZXMsIGl0J3MgdGhlIHBhdGhcbiAgICAgKiB0byB0aGUgZW50cnkgaXRzZWxmLlxuICAgICAqL1xuICAgIGdldCBwYXJlbnRQYXRoKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMucGFyZW50IHx8IHRoaXMpLmZ1bGxwYXRoKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlcHJlY2F0ZWQgYWxpYXMgZm9yIERpcmVudFsncGFyZW50UGF0aCddIFNvbWV3aGF0IGNvdW50ZXJpbnR1aXRpdmVseSxcbiAgICAgKiB0aGlzIHByb3BlcnR5IHJlZmVycyB0byB0aGUgKnBhcmVudCogcGF0aCwgbm90IHRoZSBwYXRoIG9iamVjdCBpdHNlbGYuXG4gICAgICovXG4gICAgZ2V0IHBhdGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudFBhdGg7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERvIG5vdCBjcmVhdGUgbmV3IFBhdGggb2JqZWN0cyBkaXJlY3RseS4gIFRoZXkgc2hvdWxkIGFsd2F5cyBiZSBhY2Nlc3NlZFxuICAgICAqIHZpYSB0aGUgUGF0aFNjdXJyeSBjbGFzcyBvciBvdGhlciBtZXRob2RzIG9uIHRoZSBQYXRoIGNsYXNzLlxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgY29uc3RydWN0b3IobmFtZSwgdHlwZSA9IFVOS05PV04sIHJvb3QsIHJvb3RzLCBub2Nhc2UsIGNoaWxkcmVuLCBvcHRzKSB7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMuI21hdGNoTmFtZSA9IG5vY2FzZSA/IG5vcm1hbGl6ZU5vY2FzZShuYW1lKSA6IG5vcm1hbGl6ZShuYW1lKTtcbiAgICAgICAgdGhpcy4jdHlwZSA9IHR5cGUgJiBUWVBFTUFTSztcbiAgICAgICAgdGhpcy5ub2Nhc2UgPSBub2Nhc2U7XG4gICAgICAgIHRoaXMucm9vdHMgPSByb290cztcbiAgICAgICAgdGhpcy5yb290ID0gcm9vdCB8fCB0aGlzO1xuICAgICAgICB0aGlzLiNjaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgICAgICB0aGlzLiNmdWxscGF0aCA9IG9wdHMuZnVsbHBhdGg7XG4gICAgICAgIHRoaXMuI3JlbGF0aXZlID0gb3B0cy5yZWxhdGl2ZTtcbiAgICAgICAgdGhpcy4jcmVsYXRpdmVQb3NpeCA9IG9wdHMucmVsYXRpdmVQb3NpeDtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBvcHRzLnBhcmVudDtcbiAgICAgICAgaWYgKHRoaXMucGFyZW50KSB7XG4gICAgICAgICAgICB0aGlzLiNmcyA9IHRoaXMucGFyZW50LiNmcztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuI2ZzID0gZnNGcm9tT3B0aW9uKG9wdHMuZnMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGRlcHRoIG9mIHRoZSBQYXRoIG9iamVjdCBmcm9tIGl0cyByb290LlxuICAgICAqXG4gICAgICogRm9yIGV4YW1wbGUsIGEgcGF0aCBhdCBgL2Zvby9iYXJgIHdvdWxkIGhhdmUgYSBkZXB0aCBvZiAyLlxuICAgICAqL1xuICAgIGRlcHRoKCkge1xuICAgICAgICBpZiAodGhpcy4jZGVwdGggIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiNkZXB0aDtcbiAgICAgICAgaWYgKCF0aGlzLnBhcmVudClcbiAgICAgICAgICAgIHJldHVybiAodGhpcy4jZGVwdGggPSAwKTtcbiAgICAgICAgcmV0dXJuICh0aGlzLiNkZXB0aCA9IHRoaXMucGFyZW50LmRlcHRoKCkgKyAxKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgY2hpbGRyZW5DYWNoZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2NoaWxkcmVuO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIFBhdGggb2JqZWN0IHJlZmVyZW5jZWQgYnkgdGhlIHN0cmluZyBwYXRoLCByZXNvbHZlZCBmcm9tIHRoaXMgUGF0aFxuICAgICAqL1xuICAgIHJlc29sdmUocGF0aCkge1xuICAgICAgICBpZiAoIXBhdGgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJvb3RQYXRoID0gdGhpcy5nZXRSb290U3RyaW5nKHBhdGgpO1xuICAgICAgICBjb25zdCBkaXIgPSBwYXRoLnN1YnN0cmluZyhyb290UGF0aC5sZW5ndGgpO1xuICAgICAgICBjb25zdCBkaXJQYXJ0cyA9IGRpci5zcGxpdCh0aGlzLnNwbGl0U2VwKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcm9vdFBhdGggP1xuICAgICAgICAgICAgdGhpcy5nZXRSb290KHJvb3RQYXRoKS4jcmVzb2x2ZVBhcnRzKGRpclBhcnRzKVxuICAgICAgICAgICAgOiB0aGlzLiNyZXNvbHZlUGFydHMoZGlyUGFydHMpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICAjcmVzb2x2ZVBhcnRzKGRpclBhcnRzKSB7XG4gICAgICAgIGxldCBwID0gdGhpcztcbiAgICAgICAgZm9yIChjb25zdCBwYXJ0IG9mIGRpclBhcnRzKSB7XG4gICAgICAgICAgICBwID0gcC5jaGlsZChwYXJ0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY2FjaGVkIGNoaWxkcmVuIFBhdGggb2JqZWN0cywgaWYgc3RpbGwgYXZhaWxhYmxlLiAgSWYgdGhleVxuICAgICAqIGhhdmUgZmFsbGVuIG91dCBvZiB0aGUgY2FjaGUsIHRoZW4gcmV0dXJucyBhbiBlbXB0eSBhcnJheSwgYW5kIHJlc2V0cyB0aGVcbiAgICAgKiBSRUFERElSX0NBTExFRCBiaXQsIHNvIHRoYXQgZnV0dXJlIGNhbGxzIHRvIHJlYWRkaXIoKSB3aWxsIHJlcXVpcmUgYW4gZnNcbiAgICAgKiBsb29rdXAuXG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBjaGlsZHJlbigpIHtcbiAgICAgICAgY29uc3QgY2FjaGVkID0gdGhpcy4jY2hpbGRyZW4uZ2V0KHRoaXMpO1xuICAgICAgICBpZiAoY2FjaGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gT2JqZWN0LmFzc2lnbihbXSwgeyBwcm92aXNpb25hbDogMCB9KTtcbiAgICAgICAgdGhpcy4jY2hpbGRyZW4uc2V0KHRoaXMsIGNoaWxkcmVuKTtcbiAgICAgICAgdGhpcy4jdHlwZSAmPSB+UkVBRERJUl9DQUxMRUQ7XG4gICAgICAgIHJldHVybiBjaGlsZHJlbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVzb2x2ZXMgYSBwYXRoIHBvcnRpb24gYW5kIHJldHVybnMgb3IgY3JlYXRlcyB0aGUgY2hpbGQgUGF0aC5cbiAgICAgKlxuICAgICAqIFJldHVybnMgYHRoaXNgIGlmIHBhdGhQYXJ0IGlzIGAnJ2Agb3IgYCcuJ2AsIG9yIGBwYXJlbnRgIGlmIHBhdGhQYXJ0IGlzXG4gICAgICogYCcuLidgLlxuICAgICAqXG4gICAgICogVGhpcyBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS4gIElmIGBwYXRoUGFydGAgY29udGFpbnMgYW55IHBhdGhcbiAgICAgKiBzZXBhcmF0b3JzLCBpdCB3aWxsIGxlYWQgdG8gdW5zYWZlIHVuZGVmaW5lZCBiZWhhdmlvci5cbiAgICAgKlxuICAgICAqIFVzZSBgUGF0aC5yZXNvbHZlKClgIGluc3RlYWQuXG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBjaGlsZChwYXRoUGFydCwgb3B0cykge1xuICAgICAgICBpZiAocGF0aFBhcnQgPT09ICcnIHx8IHBhdGhQYXJ0ID09PSAnLicpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXRoUGFydCA9PT0gJy4uJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50IHx8IHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZmluZCB0aGUgY2hpbGRcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuKCk7XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLm5vY2FzZSA/IG5vcm1hbGl6ZU5vY2FzZShwYXRoUGFydCkgOiBub3JtYWxpemUocGF0aFBhcnQpO1xuICAgICAgICBmb3IgKGNvbnN0IHAgb2YgY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGlmIChwLiNtYXRjaE5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBkaWRuJ3QgZmluZCBpdCwgY3JlYXRlIHByb3Zpc2lvbmFsIGNoaWxkLCBzaW5jZSBpdCBtaWdodCBub3RcbiAgICAgICAgLy8gYWN0dWFsbHkgZXhpc3QuICBJZiB3ZSBrbm93IHRoZSBwYXJlbnQgaXNuJ3QgYSBkaXIsIHRoZW5cbiAgICAgICAgLy8gaW4gZmFjdCBpdCBDQU4nVCBleGlzdC5cbiAgICAgICAgY29uc3QgcyA9IHRoaXMucGFyZW50ID8gdGhpcy5zZXAgOiAnJztcbiAgICAgICAgY29uc3QgZnVsbHBhdGggPSB0aGlzLiNmdWxscGF0aCA/IHRoaXMuI2Z1bGxwYXRoICsgcyArIHBhdGhQYXJ0IDogdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBwY2hpbGQgPSB0aGlzLm5ld0NoaWxkKHBhdGhQYXJ0LCBVTktOT1dOLCB7XG4gICAgICAgICAgICAuLi5vcHRzLFxuICAgICAgICAgICAgcGFyZW50OiB0aGlzLFxuICAgICAgICAgICAgZnVsbHBhdGgsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIXRoaXMuY2FuUmVhZGRpcigpKSB7XG4gICAgICAgICAgICBwY2hpbGQuI3R5cGUgfD0gRU5PRU5UO1xuICAgICAgICB9XG4gICAgICAgIC8vIGRvbid0IGhhdmUgdG8gdXBkYXRlIHByb3Zpc2lvbmFsLCBiZWNhdXNlIGlmIHdlIGhhdmUgcmVhbCBjaGlsZHJlbixcbiAgICAgICAgLy8gdGhlbiBwcm92aXNpb25hbCBpcyBzZXQgdG8gY2hpbGRyZW4ubGVuZ3RoLCBvdGhlcndpc2UgYSBsb3dlciBudW1iZXJcbiAgICAgICAgY2hpbGRyZW4ucHVzaChwY2hpbGQpO1xuICAgICAgICByZXR1cm4gcGNoaWxkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgcmVsYXRpdmUgcGF0aCBmcm9tIHRoZSBjd2QuIElmIGl0IGRvZXMgbm90IHNoYXJlIGFuIGFuY2VzdG9yIHdpdGhcbiAgICAgKiB0aGUgY3dkLCB0aGVuIHRoaXMgZW5kcyB1cCBiZWluZyBlcXVpdmFsZW50IHRvIHRoZSBmdWxscGF0aCgpXG4gICAgICovXG4gICAgcmVsYXRpdmUoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzQ1dEKVxuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICBpZiAodGhpcy4jcmVsYXRpdmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuI3JlbGF0aXZlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLm5hbWU7XG4gICAgICAgIGNvbnN0IHAgPSB0aGlzLnBhcmVudDtcbiAgICAgICAgaWYgKCFwKSB7XG4gICAgICAgICAgICByZXR1cm4gKHRoaXMuI3JlbGF0aXZlID0gdGhpcy5uYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwdiA9IHAucmVsYXRpdmUoKTtcbiAgICAgICAgcmV0dXJuIHB2ICsgKCFwdiB8fCAhcC5wYXJlbnQgPyAnJyA6IHRoaXMuc2VwKSArIG5hbWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSByZWxhdGl2ZSBwYXRoIGZyb20gdGhlIGN3ZCwgdXNpbmcgLyBhcyB0aGUgcGF0aCBzZXBhcmF0b3IuXG4gICAgICogSWYgaXQgZG9lcyBub3Qgc2hhcmUgYW4gYW5jZXN0b3Igd2l0aFxuICAgICAqIHRoZSBjd2QsIHRoZW4gdGhpcyBlbmRzIHVwIGJlaW5nIGVxdWl2YWxlbnQgdG8gdGhlIGZ1bGxwYXRoUG9zaXgoKVxuICAgICAqIE9uIHBvc2l4IHN5c3RlbXMsIHRoaXMgaXMgaWRlbnRpY2FsIHRvIHJlbGF0aXZlKCkuXG4gICAgICovXG4gICAgcmVsYXRpdmVQb3NpeCgpIHtcbiAgICAgICAgaWYgKHRoaXMuc2VwID09PSAnLycpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZWxhdGl2ZSgpO1xuICAgICAgICBpZiAodGhpcy5pc0NXRClcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgaWYgKHRoaXMuI3JlbGF0aXZlUG9zaXggIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiNyZWxhdGl2ZVBvc2l4O1xuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5uYW1lO1xuICAgICAgICBjb25zdCBwID0gdGhpcy5wYXJlbnQ7XG4gICAgICAgIGlmICghcCkge1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLiNyZWxhdGl2ZVBvc2l4ID0gdGhpcy5mdWxscGF0aFBvc2l4KCkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHB2ID0gcC5yZWxhdGl2ZVBvc2l4KCk7XG4gICAgICAgIHJldHVybiBwdiArICghcHYgfHwgIXAucGFyZW50ID8gJycgOiAnLycpICsgbmFtZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGZ1bGx5IHJlc29sdmVkIHBhdGggc3RyaW5nIGZvciB0aGlzIFBhdGggZW50cnlcbiAgICAgKi9cbiAgICBmdWxscGF0aCgpIHtcbiAgICAgICAgaWYgKHRoaXMuI2Z1bGxwYXRoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiNmdWxscGF0aDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5uYW1lO1xuICAgICAgICBjb25zdCBwID0gdGhpcy5wYXJlbnQ7XG4gICAgICAgIGlmICghcCkge1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLiNmdWxscGF0aCA9IHRoaXMubmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHYgPSBwLmZ1bGxwYXRoKCk7XG4gICAgICAgIGNvbnN0IGZwID0gcHYgKyAoIXAucGFyZW50ID8gJycgOiB0aGlzLnNlcCkgKyBuYW1lO1xuICAgICAgICByZXR1cm4gKHRoaXMuI2Z1bGxwYXRoID0gZnApO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBPbiBwbGF0Zm9ybXMgb3RoZXIgdGhhbiB3aW5kb3dzLCB0aGlzIGlzIGlkZW50aWNhbCB0byBmdWxscGF0aC5cbiAgICAgKlxuICAgICAqIE9uIHdpbmRvd3MsIHRoaXMgaXMgb3ZlcnJpZGRlbiB0byByZXR1cm4gdGhlIGZvcndhcmQtc2xhc2ggZm9ybSBvZiB0aGVcbiAgICAgKiBmdWxsIFVOQyBwYXRoLlxuICAgICAqL1xuICAgIGZ1bGxwYXRoUG9zaXgoKSB7XG4gICAgICAgIGlmICh0aGlzLiNmdWxscGF0aFBvc2l4ICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy4jZnVsbHBhdGhQb3NpeDtcbiAgICAgICAgaWYgKHRoaXMuc2VwID09PSAnLycpXG4gICAgICAgICAgICByZXR1cm4gKHRoaXMuI2Z1bGxwYXRoUG9zaXggPSB0aGlzLmZ1bGxwYXRoKCkpO1xuICAgICAgICBpZiAoIXRoaXMucGFyZW50KSB7XG4gICAgICAgICAgICBjb25zdCBwID0gdGhpcy5mdWxscGF0aCgpLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbiAgICAgICAgICAgIGlmICgvXlthLXpdOlxcLy9pLnRlc3QocCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKHRoaXMuI2Z1bGxwYXRoUG9zaXggPSBgLy8/LyR7cH1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAodGhpcy4jZnVsbHBhdGhQb3NpeCA9IHApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHAgPSB0aGlzLnBhcmVudDtcbiAgICAgICAgY29uc3QgcGZwcCA9IHAuZnVsbHBhdGhQb3NpeCgpO1xuICAgICAgICBjb25zdCBmcHAgPSBwZnBwICsgKCFwZnBwIHx8ICFwLnBhcmVudCA/ICcnIDogJy8nKSArIHRoaXMubmFtZTtcbiAgICAgICAgcmV0dXJuICh0aGlzLiNmdWxscGF0aFBvc2l4ID0gZnBwKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSXMgdGhlIFBhdGggb2YgYW4gdW5rbm93biB0eXBlP1xuICAgICAqXG4gICAgICogTm90ZSB0aGF0IHdlIG1pZ2h0IGtub3cgKnNvbWV0aGluZyogYWJvdXQgaXQgaWYgdGhlcmUgaGFzIGJlZW4gYSBwcmV2aW91c1xuICAgICAqIGZpbGVzeXN0ZW0gb3BlcmF0aW9uLCBmb3IgZXhhbXBsZSB0aGF0IGl0IGRvZXMgbm90IGV4aXN0LCBvciBpcyBub3QgYVxuICAgICAqIGxpbmssIG9yIHdoZXRoZXIgaXQgaGFzIGNoaWxkIGVudHJpZXMuXG4gICAgICovXG4gICAgaXNVbmtub3duKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuI3R5cGUgJiBJRk1UKSA9PT0gVU5LTk9XTjtcbiAgICB9XG4gICAgaXNUeXBlKHR5cGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbYGlzJHt0eXBlfWBdKCk7XG4gICAgfVxuICAgIGdldFR5cGUoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5pc1Vua25vd24oKSA/ICdVbmtub3duJ1xuICAgICAgICAgICAgOiB0aGlzLmlzRGlyZWN0b3J5KCkgPyAnRGlyZWN0b3J5J1xuICAgICAgICAgICAgICAgIDogdGhpcy5pc0ZpbGUoKSA/ICdGaWxlJ1xuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuaXNTeW1ib2xpY0xpbmsoKSA/ICdTeW1ib2xpY0xpbmsnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuaXNGSUZPKCkgPyAnRklGTydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuaXNDaGFyYWN0ZXJEZXZpY2UoKSA/ICdDaGFyYWN0ZXJEZXZpY2UnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5pc0Jsb2NrRGV2aWNlKCkgPyAnQmxvY2tEZXZpY2UnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IC8qIGM4IGlnbm9yZSBzdGFydCAqLyB0aGlzLmlzU29ja2V0KCkgPyAnU29ja2V0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ1Vua25vd24nKTtcbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICB9XG4gICAgLyoqXG4gICAgICogSXMgdGhlIFBhdGggYSByZWd1bGFyIGZpbGU/XG4gICAgICovXG4gICAgaXNGaWxlKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuI3R5cGUgJiBJRk1UKSA9PT0gSUZSRUc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElzIHRoZSBQYXRoIGEgZGlyZWN0b3J5P1xuICAgICAqL1xuICAgIGlzRGlyZWN0b3J5KCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuI3R5cGUgJiBJRk1UKSA9PT0gSUZESVI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElzIHRoZSBwYXRoIGEgY2hhcmFjdGVyIGRldmljZT9cbiAgICAgKi9cbiAgICBpc0NoYXJhY3RlckRldmljZSgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLiN0eXBlICYgSUZNVCkgPT09IElGQ0hSO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJcyB0aGUgcGF0aCBhIGJsb2NrIGRldmljZT9cbiAgICAgKi9cbiAgICBpc0Jsb2NrRGV2aWNlKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuI3R5cGUgJiBJRk1UKSA9PT0gSUZCTEs7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElzIHRoZSBwYXRoIGEgRklGTyBwaXBlP1xuICAgICAqL1xuICAgIGlzRklGTygpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLiN0eXBlICYgSUZNVCkgPT09IElGSUZPO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJcyB0aGUgcGF0aCBhIHNvY2tldD9cbiAgICAgKi9cbiAgICBpc1NvY2tldCgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLiN0eXBlICYgSUZNVCkgPT09IElGU09DSztcbiAgICB9XG4gICAgLyoqXG4gICAgICogSXMgdGhlIHBhdGggYSBzeW1ib2xpYyBsaW5rP1xuICAgICAqL1xuICAgIGlzU3ltYm9saWNMaW5rKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuI3R5cGUgJiBJRkxOSykgPT09IElGTE5LO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIGVudHJ5IGlmIGl0IGhhcyBiZWVuIHN1YmplY3Qgb2YgYSBzdWNjZXNzZnVsIGxzdGF0LCBvclxuICAgICAqIHVuZGVmaW5lZCBvdGhlcndpc2UuXG4gICAgICpcbiAgICAgKiBEb2VzIG5vdCByZWFkIHRoZSBmaWxlc3lzdGVtLCBzbyBhbiB1bmRlZmluZWQgcmVzdWx0ICpjb3VsZCogc2ltcGx5XG4gICAgICogbWVhbiB0aGF0IHdlIGhhdmVuJ3QgY2FsbGVkIGxzdGF0IG9uIGl0LlxuICAgICAqL1xuICAgIGxzdGF0Q2FjaGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jdHlwZSAmIExTVEFUX0NBTExFRCA/IHRoaXMgOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgY2FjaGVkIGxpbmsgdGFyZ2V0IGlmIHRoZSBlbnRyeSBoYXMgYmVlbiB0aGUgc3ViamVjdCBvZiBhXG4gICAgICogc3VjY2Vzc2Z1bCByZWFkbGluaywgb3IgdW5kZWZpbmVkIG90aGVyd2lzZS5cbiAgICAgKlxuICAgICAqIERvZXMgbm90IHJlYWQgdGhlIGZpbGVzeXN0ZW0sIHNvIGFuIHVuZGVmaW5lZCByZXN1bHQgKmNvdWxkKiBqdXN0IG1lYW4gd2VcbiAgICAgKiBkb24ndCBoYXZlIGFueSBjYWNoZWQgZGF0YS4gT25seSB1c2UgaXQgaWYgeW91IGFyZSB2ZXJ5IHN1cmUgdGhhdCBhXG4gICAgICogcmVhZGxpbmsoKSBoYXMgYmVlbiBjYWxsZWQgYXQgc29tZSBwb2ludC5cbiAgICAgKi9cbiAgICByZWFkbGlua0NhY2hlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2xpbmtUYXJnZXQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGNhY2hlZCByZWFscGF0aCB0YXJnZXQgaWYgdGhlIGVudHJ5IGhhcyBiZWVuIHRoZSBzdWJqZWN0XG4gICAgICogb2YgYSBzdWNjZXNzZnVsIHJlYWxwYXRoLCBvciB1bmRlZmluZWQgb3RoZXJ3aXNlLlxuICAgICAqXG4gICAgICogRG9lcyBub3QgcmVhZCB0aGUgZmlsZXN5c3RlbSwgc28gYW4gdW5kZWZpbmVkIHJlc3VsdCAqY291bGQqIGp1c3QgbWVhbiB3ZVxuICAgICAqIGRvbid0IGhhdmUgYW55IGNhY2hlZCBkYXRhLiBPbmx5IHVzZSBpdCBpZiB5b3UgYXJlIHZlcnkgc3VyZSB0aGF0IGFcbiAgICAgKiByZWFscGF0aCgpIGhhcyBiZWVuIGNhbGxlZCBhdCBzb21lIHBvaW50LlxuICAgICAqL1xuICAgIHJlYWxwYXRoQ2FjaGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcmVhbHBhdGg7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGNhY2hlZCBjaGlsZCBQYXRoIGVudHJpZXMgYXJyYXkgaWYgdGhlIGVudHJ5IGhhcyBiZWVuIHRoZVxuICAgICAqIHN1YmplY3Qgb2YgYSBzdWNjZXNzZnVsIHJlYWRkaXIoKSwgb3IgW10gb3RoZXJ3aXNlLlxuICAgICAqXG4gICAgICogRG9lcyBub3QgcmVhZCB0aGUgZmlsZXN5c3RlbSwgc28gYW4gZW1wdHkgYXJyYXkgKmNvdWxkKiBqdXN0IG1lYW4gd2VcbiAgICAgKiBkb24ndCBoYXZlIGFueSBjYWNoZWQgZGF0YS4gT25seSB1c2UgaXQgaWYgeW91IGFyZSB2ZXJ5IHN1cmUgdGhhdCBhXG4gICAgICogcmVhZGRpcigpIGhhcyBiZWVuIGNhbGxlZCByZWNlbnRseSBlbm91Z2ggdG8gc3RpbGwgYmUgdmFsaWQuXG4gICAgICovXG4gICAgcmVhZGRpckNhY2hlZCgpIHtcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuKCk7XG4gICAgICAgIHJldHVybiBjaGlsZHJlbi5zbGljZSgwLCBjaGlsZHJlbi5wcm92aXNpb25hbCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiB0cnVlIGlmIGl0J3Mgd29ydGggdHJ5aW5nIHRvIHJlYWRsaW5rLiAgSWUsIHdlIGRvbid0ICh5ZXQpIGhhdmVcbiAgICAgKiBhbnkgaW5kaWNhdGlvbiB0aGF0IHJlYWRsaW5rIHdpbGwgZGVmaW5pdGVseSBmYWlsLlxuICAgICAqXG4gICAgICogUmV0dXJucyBmYWxzZSBpZiB0aGUgcGF0aCBpcyBrbm93biB0byBub3QgYmUgYSBzeW1saW5rLCBpZiBhIHByZXZpb3VzXG4gICAgICogcmVhZGxpbmsgZmFpbGVkLCBvciBpZiB0aGUgZW50cnkgZG9lcyBub3QgZXhpc3QuXG4gICAgICovXG4gICAgY2FuUmVhZGxpbmsoKSB7XG4gICAgICAgIGlmICh0aGlzLiNsaW5rVGFyZ2V0KVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmICghdGhpcy5wYXJlbnQpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIC8vIGNhc2VzIHdoZXJlIGl0IGNhbm5vdCBwb3NzaWJseSBzdWNjZWVkXG4gICAgICAgIGNvbnN0IGlmbXQgPSB0aGlzLiN0eXBlICYgSUZNVDtcbiAgICAgICAgcmV0dXJuICEoKGlmbXQgIT09IFVOS05PV04gJiYgaWZtdCAhPT0gSUZMTkspIHx8XG4gICAgICAgICAgICB0aGlzLiN0eXBlICYgRU5PUkVBRExJTksgfHxcbiAgICAgICAgICAgIHRoaXMuI3R5cGUgJiBFTk9FTlQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiByZWFkZGlyIGhhcyBwcmV2aW91c2x5IGJlZW4gc3VjY2Vzc2Z1bGx5IGNhbGxlZCBvbiB0aGlzXG4gICAgICogcGF0aCwgaW5kaWNhdGluZyB0aGF0IGNhY2hlZFJlYWRkaXIoKSBpcyBsaWtlbHkgdmFsaWQuXG4gICAgICovXG4gICAgY2FsbGVkUmVhZGRpcigpIHtcbiAgICAgICAgcmV0dXJuICEhKHRoaXMuI3R5cGUgJiBSRUFERElSX0NBTExFRCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcGF0aCBpcyBrbm93biB0byBub3QgZXhpc3QuIFRoYXQgaXMsIGEgcHJldmlvdXMgbHN0YXRcbiAgICAgKiBvciByZWFkZGlyIGZhaWxlZCB0byB2ZXJpZnkgaXRzIGV4aXN0ZW5jZSB3aGVuIHRoYXQgd291bGQgaGF2ZSBiZWVuXG4gICAgICogZXhwZWN0ZWQsIG9yIGEgcGFyZW50IGVudHJ5IHdhcyBtYXJrZWQgZWl0aGVyIGVub2VudCBvciBlbm90ZGlyLlxuICAgICAqL1xuICAgIGlzRU5PRU5UKCkge1xuICAgICAgICByZXR1cm4gISEodGhpcy4jdHlwZSAmIEVOT0VOVCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSBwYXRoIGlzIGEgbWF0Y2ggZm9yIHRoZSBnaXZlbiBwYXRoIG5hbWUuICBUaGlzIGhhbmRsZXNcbiAgICAgKiBjYXNlIHNlbnNpdGl2aXR5IGFuZCB1bmljb2RlIG5vcm1hbGl6YXRpb24uXG4gICAgICpcbiAgICAgKiBOb3RlOiBldmVuIG9uIGNhc2Utc2Vuc2l0aXZlIHN5c3RlbXMsIGl0IGlzICoqbm90Kiogc2FmZSB0byB0ZXN0IHRoZVxuICAgICAqIGVxdWFsaXR5IG9mIHRoZSBgLm5hbWVgIHByb3BlcnR5IHRvIGRldGVybWluZSB3aGV0aGVyIGEgZ2l2ZW4gcGF0aG5hbWVcbiAgICAgKiBtYXRjaGVzLCBkdWUgdG8gdW5pY29kZSBub3JtYWxpemF0aW9uIG1pc21hdGNoZXMuXG4gICAgICpcbiAgICAgKiBBbHdheXMgdXNlIHRoaXMgbWV0aG9kIGluc3RlYWQgb2YgdGVzdGluZyB0aGUgYHBhdGgubmFtZWAgcHJvcGVydHlcbiAgICAgKiBkaXJlY3RseS5cbiAgICAgKi9cbiAgICBpc05hbWVkKG4pIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLm5vY2FzZSA/XG4gICAgICAgICAgICB0aGlzLiNtYXRjaE5hbWUgPT09IG5vcm1hbGl6ZShuKVxuICAgICAgICAgICAgOiB0aGlzLiNtYXRjaE5hbWUgPT09IG5vcm1hbGl6ZU5vY2FzZShuKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBQYXRoIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHRoZSB0YXJnZXQgb2YgYSBzeW1ib2xpYyBsaW5rLlxuICAgICAqXG4gICAgICogSWYgdGhlIFBhdGggaXMgbm90IGEgc3ltYm9saWMgbGluaywgb3IgaWYgdGhlIHJlYWRsaW5rIGNhbGwgZmFpbHMgZm9yIGFueVxuICAgICAqIHJlYXNvbiwgYHVuZGVmaW5lZGAgaXMgcmV0dXJuZWQuXG4gICAgICpcbiAgICAgKiBSZXN1bHQgaXMgY2FjaGVkLCBhbmQgdGh1cyBtYXkgYmUgb3V0ZGF0ZWQgaWYgdGhlIGZpbGVzeXN0ZW0gaXMgbXV0YXRlZC5cbiAgICAgKi9cbiAgICBhc3luYyByZWFkbGluaygpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy4jbGlua1RhcmdldDtcbiAgICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuY2FuUmVhZGxpbmsoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgLy8gYWxyZWFkeSBjb3ZlcmVkIGJ5IHRoZSBjYW5SZWFkbGluayB0ZXN0LCBoZXJlIGZvciB0cyBncnVtcGxlc1xuICAgICAgICBpZiAoIXRoaXMucGFyZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZWFkID0gYXdhaXQgdGhpcy4jZnMucHJvbWlzZXMucmVhZGxpbmsodGhpcy5mdWxscGF0aCgpKTtcbiAgICAgICAgICAgIGNvbnN0IGxpbmtUYXJnZXQgPSAoYXdhaXQgdGhpcy5wYXJlbnQucmVhbHBhdGgoKSk/LnJlc29sdmUocmVhZCk7XG4gICAgICAgICAgICBpZiAobGlua1RhcmdldCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAodGhpcy4jbGlua1RhcmdldCA9IGxpbmtUYXJnZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcikge1xuICAgICAgICAgICAgdGhpcy4jcmVhZGxpbmtGYWlsKGVyLmNvZGUpO1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBTeW5jaHJvbm91cyB7QGxpbmsgUGF0aEJhc2UucmVhZGxpbmt9XG4gICAgICovXG4gICAgcmVhZGxpbmtTeW5jKCkge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLiNsaW5rVGFyZ2V0O1xuICAgICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5jYW5SZWFkbGluaygpKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICAvLyBhbHJlYWR5IGNvdmVyZWQgYnkgdGhlIGNhblJlYWRsaW5rIHRlc3QsIGhlcmUgZm9yIHRzIGdydW1wbGVzXG4gICAgICAgIGlmICghdGhpcy5wYXJlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlYWQgPSB0aGlzLiNmcy5yZWFkbGlua1N5bmModGhpcy5mdWxscGF0aCgpKTtcbiAgICAgICAgICAgIGNvbnN0IGxpbmtUYXJnZXQgPSB0aGlzLnBhcmVudC5yZWFscGF0aFN5bmMoKT8ucmVzb2x2ZShyZWFkKTtcbiAgICAgICAgICAgIGlmIChsaW5rVGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICh0aGlzLiNsaW5rVGFyZ2V0ID0gbGlua1RhcmdldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVyKSB7XG4gICAgICAgICAgICB0aGlzLiNyZWFkbGlua0ZhaWwoZXIuY29kZSk7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuICAgICNyZWFkZGlyU3VjY2VzcyhjaGlsZHJlbikge1xuICAgICAgICAvLyBzdWNjZWVkZWQsIG1hcmsgcmVhZGRpciBjYWxsZWQgYml0XG4gICAgICAgIHRoaXMuI3R5cGUgfD0gUkVBRERJUl9DQUxMRUQ7XG4gICAgICAgIC8vIG1hcmsgYWxsIHJlbWFpbmluZyBwcm92aXNpb25hbCBjaGlsZHJlbiBhcyBFTk9FTlRcbiAgICAgICAgZm9yIChsZXQgcCA9IGNoaWxkcmVuLnByb3Zpc2lvbmFsOyBwIDwgY2hpbGRyZW4ubGVuZ3RoOyBwKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBjaGlsZHJlbltwXTtcbiAgICAgICAgICAgIGlmIChjKVxuICAgICAgICAgICAgICAgIGMuI21hcmtFTk9FTlQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAjbWFya0VOT0VOVCgpIHtcbiAgICAgICAgLy8gbWFyayBhcyBVTktOT1dOIGFuZCBFTk9FTlRcbiAgICAgICAgaWYgKHRoaXMuI3R5cGUgJiBFTk9FTlQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuI3R5cGUgPSAodGhpcy4jdHlwZSB8IEVOT0VOVCkgJiBJRk1UX1VOS05PV047XG4gICAgICAgIHRoaXMuI21hcmtDaGlsZHJlbkVOT0VOVCgpO1xuICAgIH1cbiAgICAjbWFya0NoaWxkcmVuRU5PRU5UKCkge1xuICAgICAgICAvLyBhbGwgY2hpbGRyZW4gYXJlIHByb3Zpc2lvbmFsIGFuZCBkbyBub3QgZXhpc3RcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuKCk7XG4gICAgICAgIGNoaWxkcmVuLnByb3Zpc2lvbmFsID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBwIG9mIGNoaWxkcmVuKSB7XG4gICAgICAgICAgICBwLiNtYXJrRU5PRU5UKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgI21hcmtFTk9SRUFMUEFUSCgpIHtcbiAgICAgICAgdGhpcy4jdHlwZSB8PSBFTk9SRUFMUEFUSDtcbiAgICAgICAgdGhpcy4jbWFya0VOT1RESVIoKTtcbiAgICB9XG4gICAgLy8gc2F2ZSB0aGUgaW5mb3JtYXRpb24gd2hlbiB3ZSBrbm93IHRoZSBlbnRyeSBpcyBub3QgYSBkaXJcbiAgICAjbWFya0VOT1RESVIoKSB7XG4gICAgICAgIC8vIGVudHJ5IGlzIG5vdCBhIGRpcmVjdG9yeSwgc28gYW55IGNoaWxkcmVuIGNhbid0IGV4aXN0LlxuICAgICAgICAvLyB0aGlzICpzaG91bGQqIGJlIGltcG9zc2libGUsIHNpbmNlIGFueSBjaGlsZHJlbiBjcmVhdGVkXG4gICAgICAgIC8vIGFmdGVyIGl0J3MgYmVlbiBtYXJrZWQgRU5PVERJUiBzaG91bGQgYmUgbWFya2VkIEVOT0VOVCxcbiAgICAgICAgLy8gc28gaXQgd29uJ3QgZXZlbiBnZXQgdG8gdGhpcyBwb2ludC5cbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIGlmICh0aGlzLiN0eXBlICYgRU5PVERJUilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgbGV0IHQgPSB0aGlzLiN0eXBlO1xuICAgICAgICAvLyB0aGlzIGNvdWxkIGhhcHBlbiBpZiB3ZSBzdGF0IGEgZGlyLCB0aGVuIGRlbGV0ZSBpdCxcbiAgICAgICAgLy8gdGhlbiB0cnkgdG8gcmVhZCBpdCBvciBvbmUgb2YgaXRzIGNoaWxkcmVuLlxuICAgICAgICBpZiAoKHQgJiBJRk1UKSA9PT0gSUZESVIpXG4gICAgICAgICAgICB0ICY9IElGTVRfVU5LTk9XTjtcbiAgICAgICAgdGhpcy4jdHlwZSA9IHQgfCBFTk9URElSO1xuICAgICAgICB0aGlzLiNtYXJrQ2hpbGRyZW5FTk9FTlQoKTtcbiAgICB9XG4gICAgI3JlYWRkaXJGYWlsKGNvZGUgPSAnJykge1xuICAgICAgICAvLyBtYXJrRU5PVERJUiBhbmQgbWFya0VOT0VOVCBhbHNvIHNldCBwcm92aXNpb25hbD0wXG4gICAgICAgIGlmIChjb2RlID09PSAnRU5PVERJUicgfHwgY29kZSA9PT0gJ0VQRVJNJykge1xuICAgICAgICAgICAgdGhpcy4jbWFya0VOT1RESVIoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICAgICAgdGhpcy4jbWFya0VOT0VOVCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbigpLnByb3Zpc2lvbmFsID0gMDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAjbHN0YXRGYWlsKGNvZGUgPSAnJykge1xuICAgICAgICAvLyBXaW5kb3dzIGp1c3QgcmFpc2VzIEVOT0VOVCBpbiB0aGlzIGNhc2UsIGRpc2FibGUgZm9yIHdpbiBDSVxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgaWYgKGNvZGUgPT09ICdFTk9URElSJykge1xuICAgICAgICAgICAgLy8gYWxyZWFkeSBrbm93IGl0IGhhcyBhIHBhcmVudCBieSB0aGlzIHBvaW50XG4gICAgICAgICAgICBjb25zdCBwID0gdGhpcy5wYXJlbnQ7XG4gICAgICAgICAgICBwLiNtYXJrRU5PVERJUigpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgdGhpcy4jbWFya0VOT0VOVCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgICNyZWFkbGlua0ZhaWwoY29kZSA9ICcnKSB7XG4gICAgICAgIGxldCB0ZXIgPSB0aGlzLiN0eXBlO1xuICAgICAgICB0ZXIgfD0gRU5PUkVBRExJTks7XG4gICAgICAgIGlmIChjb2RlID09PSAnRU5PRU5UJylcbiAgICAgICAgICAgIHRlciB8PSBFTk9FTlQ7XG4gICAgICAgIC8vIHdpbmRvd3MgZ2V0cyBhIHdlaXJkIGVycm9yIHdoZW4geW91IHRyeSB0byByZWFkbGluayBhIGZpbGVcbiAgICAgICAgaWYgKGNvZGUgPT09ICdFSU5WQUwnIHx8IGNvZGUgPT09ICdVTktOT1dOJykge1xuICAgICAgICAgICAgLy8gZXhpc3RzLCBidXQgbm90IGEgc3ltbGluaywgd2UgZG9uJ3Qga25vdyBXSEFUIGl0IGlzLCBzbyByZW1vdmVcbiAgICAgICAgICAgIC8vIGFsbCBJRk1UIGJpdHMuXG4gICAgICAgICAgICB0ZXIgJj0gSUZNVF9VTktOT1dOO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuI3R5cGUgPSB0ZXI7XG4gICAgICAgIC8vIHdpbmRvd3MganVzdCBnZXRzIEVOT0VOVCBpbiB0aGlzIGNhc2UuICBXZSBkbyBjb3ZlciB0aGUgY2FzZSxcbiAgICAgICAgLy8ganVzdCBkaXNhYmxlZCBiZWNhdXNlIGl0J3MgaW1wb3NzaWJsZSBvbiBXaW5kb3dzIENJXG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICBpZiAoY29kZSA9PT0gJ0VOT1RESVInICYmIHRoaXMucGFyZW50KSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudC4jbWFya0VOT1RESVIoKTtcbiAgICAgICAgfVxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgIH1cbiAgICAjcmVhZGRpckFkZENoaWxkKGUsIGMpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLiNyZWFkZGlyTWF5YmVQcm9tb3RlQ2hpbGQoZSwgYykgfHxcbiAgICAgICAgICAgIHRoaXMuI3JlYWRkaXJBZGROZXdDaGlsZChlLCBjKSk7XG4gICAgfVxuICAgICNyZWFkZGlyQWRkTmV3Q2hpbGQoZSwgYykge1xuICAgICAgICAvLyBhbGxvYyBuZXcgZW50cnkgYXQgaGVhZCwgc28gaXQncyBuZXZlciBwcm92aXNpb25hbFxuICAgICAgICBjb25zdCB0eXBlID0gZW50VG9UeXBlKGUpO1xuICAgICAgICBjb25zdCBjaGlsZCA9IHRoaXMubmV3Q2hpbGQoZS5uYW1lLCB0eXBlLCB7IHBhcmVudDogdGhpcyB9KTtcbiAgICAgICAgY29uc3QgaWZtdCA9IGNoaWxkLiN0eXBlICYgSUZNVDtcbiAgICAgICAgaWYgKGlmbXQgIT09IElGRElSICYmIGlmbXQgIT09IElGTE5LICYmIGlmbXQgIT09IFVOS05PV04pIHtcbiAgICAgICAgICAgIGNoaWxkLiN0eXBlIHw9IEVOT1RESVI7XG4gICAgICAgIH1cbiAgICAgICAgYy51bnNoaWZ0KGNoaWxkKTtcbiAgICAgICAgYy5wcm92aXNpb25hbCsrO1xuICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgfVxuICAgICNyZWFkZGlyTWF5YmVQcm9tb3RlQ2hpbGQoZSwgYykge1xuICAgICAgICBmb3IgKGxldCBwID0gYy5wcm92aXNpb25hbDsgcCA8IGMubGVuZ3RoOyBwKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHBjaGlsZCA9IGNbcF07XG4gICAgICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5ub2Nhc2UgPyBub3JtYWxpemVOb2Nhc2UoZS5uYW1lKSA6IG5vcm1hbGl6ZShlLm5hbWUpO1xuICAgICAgICAgICAgaWYgKG5hbWUgIT09IHBjaGlsZC4jbWF0Y2hOYW1lKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy4jcmVhZGRpclByb21vdGVDaGlsZChlLCBwY2hpbGQsIHAsIGMpO1xuICAgICAgICB9XG4gICAgfVxuICAgICNyZWFkZGlyUHJvbW90ZUNoaWxkKGUsIHAsIGluZGV4LCBjKSB7XG4gICAgICAgIGNvbnN0IHYgPSBwLm5hbWU7XG4gICAgICAgIC8vIHJldGFpbiBhbnkgb3RoZXIgZmxhZ3MsIGJ1dCBzZXQgaWZtdCBmcm9tIGRpcmVudFxuICAgICAgICBwLiN0eXBlID0gKHAuI3R5cGUgJiBJRk1UX1VOS05PV04pIHwgZW50VG9UeXBlKGUpO1xuICAgICAgICAvLyBjYXNlIHNlbnNpdGl2aXR5IGZpeGluZyB3aGVuIHdlIGxlYXJuIHRoZSB0cnVlIG5hbWUuXG4gICAgICAgIGlmICh2ICE9PSBlLm5hbWUpXG4gICAgICAgICAgICBwLm5hbWUgPSBlLm5hbWU7XG4gICAgICAgIC8vIGp1c3QgYWR2YW5jZSBwcm92aXNpb25hbCBpbmRleCAocG90ZW50aWFsbHkgb2ZmIHRoZSBsaXN0KSxcbiAgICAgICAgLy8gb3RoZXJ3aXNlIHdlIGhhdmUgdG8gc3BsaWNlL3BvcCBpdCBvdXQgYW5kIHJlLWluc2VydCBhdCBoZWFkXG4gICAgICAgIGlmIChpbmRleCAhPT0gYy5wcm92aXNpb25hbCkge1xuICAgICAgICAgICAgaWYgKGluZGV4ID09PSBjLmxlbmd0aCAtIDEpXG4gICAgICAgICAgICAgICAgYy5wb3AoKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBjLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICBjLnVuc2hpZnQocCk7XG4gICAgICAgIH1cbiAgICAgICAgYy5wcm92aXNpb25hbCsrO1xuICAgICAgICByZXR1cm4gcDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2FsbCBsc3RhdCgpIG9uIHRoaXMgUGF0aCwgYW5kIHVwZGF0ZSBhbGwga25vd24gaW5mb3JtYXRpb24gdGhhdCBjYW4gYmVcbiAgICAgKiBkZXRlcm1pbmVkLlxuICAgICAqXG4gICAgICogTm90ZSB0aGF0IHVubGlrZSBgZnMubHN0YXQoKWAsIHRoZSByZXR1cm5lZCB2YWx1ZSBkb2VzIG5vdCBjb250YWluIHNvbWVcbiAgICAgKiBpbmZvcm1hdGlvbiwgc3VjaCBhcyBgbW9kZWAsIGBkZXZgLCBgbmxpbmtgLCBhbmQgYGlub2AuICBJZiB0aGF0XG4gICAgICogaW5mb3JtYXRpb24gaXMgcmVxdWlyZWQsIHlvdSB3aWxsIG5lZWQgdG8gY2FsbCBgZnMubHN0YXRgIHlvdXJzZWxmLlxuICAgICAqXG4gICAgICogSWYgdGhlIFBhdGggcmVmZXJzIHRvIGEgbm9uZXhpc3RlbnQgZmlsZSwgb3IgaWYgdGhlIGxzdGF0IGNhbGwgZmFpbHMgZm9yXG4gICAgICogYW55IHJlYXNvbiwgYHVuZGVmaW5lZGAgaXMgcmV0dXJuZWQuICBPdGhlcndpc2UgdGhlIHVwZGF0ZWQgUGF0aCBvYmplY3QgaXNcbiAgICAgKiByZXR1cm5lZC5cbiAgICAgKlxuICAgICAqIFJlc3VsdHMgYXJlIGNhY2hlZCwgYW5kIHRodXMgbWF5IGJlIG91dCBvZiBkYXRlIGlmIHRoZSBmaWxlc3lzdGVtIGlzXG4gICAgICogbXV0YXRlZC5cbiAgICAgKi9cbiAgICBhc3luYyBsc3RhdCgpIHtcbiAgICAgICAgaWYgKCh0aGlzLiN0eXBlICYgRU5PRU5UKSA9PT0gMCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB0aGlzLiNhcHBseVN0YXQoYXdhaXQgdGhpcy4jZnMucHJvbWlzZXMubHN0YXQodGhpcy5mdWxscGF0aCgpKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiNsc3RhdEZhaWwoZXIuY29kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogc3luY2hyb25vdXMge0BsaW5rIFBhdGhCYXNlLmxzdGF0fVxuICAgICAqL1xuICAgIGxzdGF0U3luYygpIHtcbiAgICAgICAgaWYgKCh0aGlzLiN0eXBlICYgRU5PRU5UKSA9PT0gMCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB0aGlzLiNhcHBseVN0YXQodGhpcy4jZnMubHN0YXRTeW5jKHRoaXMuZnVsbHBhdGgoKSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jbHN0YXRGYWlsKGVyLmNvZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgICNhcHBseVN0YXQoc3QpIHtcbiAgICAgICAgY29uc3QgeyBhdGltZSwgYXRpbWVNcywgYmlydGh0aW1lLCBiaXJ0aHRpbWVNcywgYmxrc2l6ZSwgYmxvY2tzLCBjdGltZSwgY3RpbWVNcywgZGV2LCBnaWQsIGlubywgbW9kZSwgbXRpbWUsIG10aW1lTXMsIG5saW5rLCByZGV2LCBzaXplLCB1aWQsIH0gPSBzdDtcbiAgICAgICAgdGhpcy4jYXRpbWUgPSBhdGltZTtcbiAgICAgICAgdGhpcy4jYXRpbWVNcyA9IGF0aW1lTXM7XG4gICAgICAgIHRoaXMuI2JpcnRodGltZSA9IGJpcnRodGltZTtcbiAgICAgICAgdGhpcy4jYmlydGh0aW1lTXMgPSBiaXJ0aHRpbWVNcztcbiAgICAgICAgdGhpcy4jYmxrc2l6ZSA9IGJsa3NpemU7XG4gICAgICAgIHRoaXMuI2Jsb2NrcyA9IGJsb2NrcztcbiAgICAgICAgdGhpcy4jY3RpbWUgPSBjdGltZTtcbiAgICAgICAgdGhpcy4jY3RpbWVNcyA9IGN0aW1lTXM7XG4gICAgICAgIHRoaXMuI2RldiA9IGRldjtcbiAgICAgICAgdGhpcy4jZ2lkID0gZ2lkO1xuICAgICAgICB0aGlzLiNpbm8gPSBpbm87XG4gICAgICAgIHRoaXMuI21vZGUgPSBtb2RlO1xuICAgICAgICB0aGlzLiNtdGltZSA9IG10aW1lO1xuICAgICAgICB0aGlzLiNtdGltZU1zID0gbXRpbWVNcztcbiAgICAgICAgdGhpcy4jbmxpbmsgPSBubGluaztcbiAgICAgICAgdGhpcy4jcmRldiA9IHJkZXY7XG4gICAgICAgIHRoaXMuI3NpemUgPSBzaXplO1xuICAgICAgICB0aGlzLiN1aWQgPSB1aWQ7XG4gICAgICAgIGNvbnN0IGlmbXQgPSBlbnRUb1R5cGUoc3QpO1xuICAgICAgICAvLyByZXRhaW4gYW55IG90aGVyIGZsYWdzLCBidXQgc2V0IHRoZSBpZm10XG4gICAgICAgIHRoaXMuI3R5cGUgPSAodGhpcy4jdHlwZSAmIElGTVRfVU5LTk9XTikgfCBpZm10IHwgTFNUQVRfQ0FMTEVEO1xuICAgICAgICBpZiAoaWZtdCAhPT0gVU5LTk9XTiAmJiBpZm10ICE9PSBJRkRJUiAmJiBpZm10ICE9PSBJRkxOSykge1xuICAgICAgICAgICAgdGhpcy4jdHlwZSB8PSBFTk9URElSO1xuICAgICAgICB9XG4gICAgfVxuICAgICNvblJlYWRkaXJDQiA9IFtdO1xuICAgICNyZWFkZGlyQ0JJbkZsaWdodCA9IGZhbHNlO1xuICAgICNjYWxsT25SZWFkZGlyQ0IoY2hpbGRyZW4pIHtcbiAgICAgICAgdGhpcy4jcmVhZGRpckNCSW5GbGlnaHQgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgY2JzID0gdGhpcy4jb25SZWFkZGlyQ0Iuc2xpY2UoKTtcbiAgICAgICAgdGhpcy4jb25SZWFkZGlyQ0IubGVuZ3RoID0gMDtcbiAgICAgICAgY2JzLmZvckVhY2goY2IgPT4gY2IobnVsbCwgY2hpbGRyZW4pKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3RhbmRhcmQgbm9kZS1zdHlsZSBjYWxsYmFjayBpbnRlcmZhY2UgdG8gZ2V0IGxpc3Qgb2YgZGlyZWN0b3J5IGVudHJpZXMuXG4gICAgICpcbiAgICAgKiBJZiB0aGUgUGF0aCBjYW5ub3Qgb3IgZG9lcyBub3QgY29udGFpbiBhbnkgY2hpbGRyZW4sIHRoZW4gYW4gZW1wdHkgYXJyYXlcbiAgICAgKiBpcyByZXR1cm5lZC5cbiAgICAgKlxuICAgICAqIFJlc3VsdHMgYXJlIGNhY2hlZCwgYW5kIHRodXMgbWF5IGJlIG91dCBvZiBkYXRlIGlmIHRoZSBmaWxlc3lzdGVtIGlzXG4gICAgICogbXV0YXRlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjYiBUaGUgY2FsbGJhY2sgY2FsbGVkIHdpdGggKGVyLCBlbnRyaWVzKS4gIE5vdGUgdGhhdCB0aGUgYGVyYFxuICAgICAqIHBhcmFtIGlzIHNvbWV3aGF0IGV4dHJhbmVvdXMsIGFzIGFsbCByZWFkZGlyKCkgZXJyb3JzIGFyZSBoYW5kbGVkIGFuZFxuICAgICAqIHNpbXBseSByZXN1bHQgaW4gYW4gZW1wdHkgc2V0IG9mIGVudHJpZXMgYmVpbmcgcmV0dXJuZWQuXG4gICAgICogQHBhcmFtIGFsbG93WmFsZ28gQm9vbGVhbiBpbmRpY2F0aW5nIHRoYXQgaW1tZWRpYXRlbHkga25vd24gcmVzdWx0cyBzaG91bGRcbiAgICAgKiAqbm90KiBiZSBkZWZlcnJlZCB3aXRoIGBxdWV1ZU1pY3JvdGFza2AuIERlZmF1bHRzIHRvIGBmYWxzZWAuIFJlbGVhc2VcbiAgICAgKiB6YWxnbyBhdCB5b3VyIHBlcmlsLCB0aGUgZGFyayBwb255IGxvcmQgaXMgZGV2aW91cyBhbmQgdW5mb3JnaXZpbmcuXG4gICAgICovXG4gICAgcmVhZGRpckNCKGNiLCBhbGxvd1phbGdvID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNhblJlYWRkaXIoKSkge1xuICAgICAgICAgICAgaWYgKGFsbG93WmFsZ28pXG4gICAgICAgICAgICAgICAgY2IobnVsbCwgW10pO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGNiKG51bGwsIFtdKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuKCk7XG4gICAgICAgIGlmICh0aGlzLmNhbGxlZFJlYWRkaXIoKSkge1xuICAgICAgICAgICAgY29uc3QgYyA9IGNoaWxkcmVuLnNsaWNlKDAsIGNoaWxkcmVuLnByb3Zpc2lvbmFsKTtcbiAgICAgICAgICAgIGlmIChhbGxvd1phbGdvKVxuICAgICAgICAgICAgICAgIGNiKG51bGwsIGMpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGNiKG51bGwsIGMpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHphbGdvIGF0IHRoaXMgcG9pbnQuXG4gICAgICAgIHRoaXMuI29uUmVhZGRpckNCLnB1c2goY2IpO1xuICAgICAgICBpZiAodGhpcy4jcmVhZGRpckNCSW5GbGlnaHQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiNyZWFkZGlyQ0JJbkZsaWdodCA9IHRydWU7XG4gICAgICAgIC8vIGVsc2UgcmVhZCB0aGUgZGlyZWN0b3J5LCBmaWxsIHVwIGNoaWxkcmVuXG4gICAgICAgIC8vIGRlLXByb3Zpc2lvbmFsaXplIGFueSBwcm92aXNpb25hbCBjaGlsZHJlbi5cbiAgICAgICAgY29uc3QgZnVsbHBhdGggPSB0aGlzLmZ1bGxwYXRoKCk7XG4gICAgICAgIHRoaXMuI2ZzLnJlYWRkaXIoZnVsbHBhdGgsIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9LCAoZXIsIGVudHJpZXMpID0+IHtcbiAgICAgICAgICAgIGlmIChlcikge1xuICAgICAgICAgICAgICAgIHRoaXMuI3JlYWRkaXJGYWlsKGVyLmNvZGUpO1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuLnByb3Zpc2lvbmFsID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGlmIHdlIGRpZG4ndCBnZXQgYW4gZXJyb3IsIHdlIGFsd2F5cyBnZXQgZW50cmllcy5cbiAgICAgICAgICAgICAgICAvL0B0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGUgb2YgZW50cmllcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiNyZWFkZGlyQWRkQ2hpbGQoZSwgY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLiNyZWFkZGlyU3VjY2VzcyhjaGlsZHJlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLiNjYWxsT25SZWFkZGlyQ0IoY2hpbGRyZW4uc2xpY2UoMCwgY2hpbGRyZW4ucHJvdmlzaW9uYWwpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgICNhc3luY1JlYWRkaXJJbkZsaWdodDtcbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYW4gYXJyYXkgb2Yga25vd24gY2hpbGQgZW50cmllcy5cbiAgICAgKlxuICAgICAqIElmIHRoZSBQYXRoIGNhbm5vdCBvciBkb2VzIG5vdCBjb250YWluIGFueSBjaGlsZHJlbiwgdGhlbiBhbiBlbXB0eSBhcnJheVxuICAgICAqIGlzIHJldHVybmVkLlxuICAgICAqXG4gICAgICogUmVzdWx0cyBhcmUgY2FjaGVkLCBhbmQgdGh1cyBtYXkgYmUgb3V0IG9mIGRhdGUgaWYgdGhlIGZpbGVzeXN0ZW0gaXNcbiAgICAgKiBtdXRhdGVkLlxuICAgICAqL1xuICAgIGFzeW5jIHJlYWRkaXIoKSB7XG4gICAgICAgIGlmICghdGhpcy5jYW5SZWFkZGlyKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW4oKTtcbiAgICAgICAgaWYgKHRoaXMuY2FsbGVkUmVhZGRpcigpKSB7XG4gICAgICAgICAgICByZXR1cm4gY2hpbGRyZW4uc2xpY2UoMCwgY2hpbGRyZW4ucHJvdmlzaW9uYWwpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGVsc2UgcmVhZCB0aGUgZGlyZWN0b3J5LCBmaWxsIHVwIGNoaWxkcmVuXG4gICAgICAgIC8vIGRlLXByb3Zpc2lvbmFsaXplIGFueSBwcm92aXNpb25hbCBjaGlsZHJlbi5cbiAgICAgICAgY29uc3QgZnVsbHBhdGggPSB0aGlzLmZ1bGxwYXRoKCk7XG4gICAgICAgIGlmICh0aGlzLiNhc3luY1JlYWRkaXJJbkZsaWdodCkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy4jYXN5bmNSZWFkZGlySW5GbGlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgICAgIGxldCByZXNvbHZlID0gKCkgPT4geyB9O1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgICAgIHRoaXMuI2FzeW5jUmVhZGRpckluRmxpZ2h0ID0gbmV3IFByb21pc2UocmVzID0+IChyZXNvbHZlID0gcmVzKSk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZSBvZiBhd2FpdCB0aGlzLiNmcy5wcm9taXNlcy5yZWFkZGlyKGZ1bGxwYXRoLCB7XG4gICAgICAgICAgICAgICAgICAgIHdpdGhGaWxlVHlwZXM6IHRydWUsXG4gICAgICAgICAgICAgICAgfSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jcmVhZGRpckFkZENoaWxkKGUsIGNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy4jcmVhZGRpclN1Y2Nlc3MoY2hpbGRyZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jcmVhZGRpckZhaWwoZXIuY29kZSk7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW4ucHJvdmlzaW9uYWwgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy4jYXN5bmNSZWFkZGlySW5GbGlnaHQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuLnNsaWNlKDAsIGNoaWxkcmVuLnByb3Zpc2lvbmFsKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogc3luY2hyb25vdXMge0BsaW5rIFBhdGhCYXNlLnJlYWRkaXJ9XG4gICAgICovXG4gICAgcmVhZGRpclN5bmMoKSB7XG4gICAgICAgIGlmICghdGhpcy5jYW5SZWFkZGlyKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW4oKTtcbiAgICAgICAgaWYgKHRoaXMuY2FsbGVkUmVhZGRpcigpKSB7XG4gICAgICAgICAgICByZXR1cm4gY2hpbGRyZW4uc2xpY2UoMCwgY2hpbGRyZW4ucHJvdmlzaW9uYWwpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGVsc2UgcmVhZCB0aGUgZGlyZWN0b3J5LCBmaWxsIHVwIGNoaWxkcmVuXG4gICAgICAgIC8vIGRlLXByb3Zpc2lvbmFsaXplIGFueSBwcm92aXNpb25hbCBjaGlsZHJlbi5cbiAgICAgICAgY29uc3QgZnVsbHBhdGggPSB0aGlzLmZ1bGxwYXRoKCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGUgb2YgdGhpcy4jZnMucmVhZGRpclN5bmMoZnVsbHBhdGgsIHtcbiAgICAgICAgICAgICAgICB3aXRoRmlsZVR5cGVzOiB0cnVlLFxuICAgICAgICAgICAgfSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiNyZWFkZGlyQWRkQ2hpbGQoZSwgY2hpbGRyZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy4jcmVhZGRpclN1Y2Nlc3MoY2hpbGRyZW4pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcikge1xuICAgICAgICAgICAgdGhpcy4jcmVhZGRpckZhaWwoZXIuY29kZSk7XG4gICAgICAgICAgICBjaGlsZHJlbi5wcm92aXNpb25hbCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuLnNsaWNlKDAsIGNoaWxkcmVuLnByb3Zpc2lvbmFsKTtcbiAgICB9XG4gICAgY2FuUmVhZGRpcigpIHtcbiAgICAgICAgaWYgKHRoaXMuI3R5cGUgJiBFTk9DSElMRClcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgY29uc3QgaWZtdCA9IElGTVQgJiB0aGlzLiN0eXBlO1xuICAgICAgICAvLyB3ZSBhbHdheXMgc2V0IEVOT1RESVIgd2hlbiBzZXR0aW5nIElGTVQsIHNvIHNob3VsZCBiZSBpbXBvc3NpYmxlXG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICBpZiAoIShpZm10ID09PSBVTktOT1dOIHx8IGlmbXQgPT09IElGRElSIHx8IGlmbXQgPT09IElGTE5LKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBzaG91bGRXYWxrKGRpcnMsIHdhbGtGaWx0ZXIpIHtcbiAgICAgICAgcmV0dXJuICgodGhpcy4jdHlwZSAmIElGRElSKSA9PT0gSUZESVIgJiZcbiAgICAgICAgICAgICEodGhpcy4jdHlwZSAmIEVOT0NISUxEKSAmJlxuICAgICAgICAgICAgIWRpcnMuaGFzKHRoaXMpICYmXG4gICAgICAgICAgICAoIXdhbGtGaWx0ZXIgfHwgd2Fsa0ZpbHRlcih0aGlzKSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIFBhdGggb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gcGF0aCBhcyByZXNvbHZlZFxuICAgICAqIGJ5IHJlYWxwYXRoKDMpLlxuICAgICAqXG4gICAgICogSWYgdGhlIHJlYWxwYXRoIGNhbGwgZmFpbHMgZm9yIGFueSByZWFzb24sIGB1bmRlZmluZWRgIGlzIHJldHVybmVkLlxuICAgICAqXG4gICAgICogUmVzdWx0IGlzIGNhY2hlZCwgYW5kIHRodXMgbWF5IGJlIG91dGRhdGVkIGlmIHRoZSBmaWxlc3lzdGVtIGlzIG11dGF0ZWQuXG4gICAgICogT24gc3VjY2VzcywgcmV0dXJucyBhIFBhdGggb2JqZWN0LlxuICAgICAqL1xuICAgIGFzeW5jIHJlYWxwYXRoKCkge1xuICAgICAgICBpZiAodGhpcy4jcmVhbHBhdGgpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy4jcmVhbHBhdGg7XG4gICAgICAgIGlmICgoRU5PUkVBTFBBVEggfCBFTk9SRUFETElOSyB8IEVOT0VOVCkgJiB0aGlzLiN0eXBlKVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJwID0gYXdhaXQgdGhpcy4jZnMucHJvbWlzZXMucmVhbHBhdGgodGhpcy5mdWxscGF0aCgpKTtcbiAgICAgICAgICAgIHJldHVybiAodGhpcy4jcmVhbHBhdGggPSB0aGlzLnJlc29sdmUocnApKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoXykge1xuICAgICAgICAgICAgdGhpcy4jbWFya0VOT1JFQUxQQVRIKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogU3luY2hyb25vdXMge0BsaW5rIHJlYWxwYXRofVxuICAgICAqL1xuICAgIHJlYWxwYXRoU3luYygpIHtcbiAgICAgICAgaWYgKHRoaXMuI3JlYWxwYXRoKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuI3JlYWxwYXRoO1xuICAgICAgICBpZiAoKEVOT1JFQUxQQVRIIHwgRU5PUkVBRExJTksgfCBFTk9FTlQpICYgdGhpcy4jdHlwZSlcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBycCA9IHRoaXMuI2ZzLnJlYWxwYXRoU3luYyh0aGlzLmZ1bGxwYXRoKCkpO1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLiNyZWFscGF0aCA9IHRoaXMucmVzb2x2ZShycCkpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChfKSB7XG4gICAgICAgICAgICB0aGlzLiNtYXJrRU5PUkVBTFBBVEgoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBtZXRob2QgdG8gbWFyayB0aGlzIFBhdGggb2JqZWN0IGFzIHRoZSBzY3VycnkgY3dkLFxuICAgICAqIGNhbGxlZCBieSB7QGxpbmsgUGF0aFNjdXJyeSNjaGRpcn1cbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIFtzZXRBc0N3ZF0ob2xkQ3dkKSB7XG4gICAgICAgIGlmIChvbGRDd2QgPT09IHRoaXMpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIG9sZEN3ZC5pc0NXRCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzQ1dEID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgY2hhbmdlZCA9IG5ldyBTZXQoW10pO1xuICAgICAgICBsZXQgcnAgPSBbXTtcbiAgICAgICAgbGV0IHAgPSB0aGlzO1xuICAgICAgICB3aGlsZSAocCAmJiBwLnBhcmVudCkge1xuICAgICAgICAgICAgY2hhbmdlZC5hZGQocCk7XG4gICAgICAgICAgICBwLiNyZWxhdGl2ZSA9IHJwLmpvaW4odGhpcy5zZXApO1xuICAgICAgICAgICAgcC4jcmVsYXRpdmVQb3NpeCA9IHJwLmpvaW4oJy8nKTtcbiAgICAgICAgICAgIHAgPSBwLnBhcmVudDtcbiAgICAgICAgICAgIHJwLnB1c2goJy4uJyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbm93IHVuLW1lbW9pemUgcGFyZW50cyBvZiBvbGQgY3dkXG4gICAgICAgIHAgPSBvbGRDd2Q7XG4gICAgICAgIHdoaWxlIChwICYmIHAucGFyZW50ICYmICFjaGFuZ2VkLmhhcyhwKSkge1xuICAgICAgICAgICAgcC4jcmVsYXRpdmUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBwLiNyZWxhdGl2ZVBvc2l4ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgcCA9IHAucGFyZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5QYXRoQmFzZSA9IFBhdGhCYXNlO1xuLyoqXG4gKiBQYXRoIGNsYXNzIHVzZWQgb24gd2luMzIgc3lzdGVtc1xuICpcbiAqIFVzZXMgYCdcXFxcJ2AgYXMgdGhlIHBhdGggc2VwYXJhdG9yIGZvciByZXR1cm5lZCBwYXRocywgZWl0aGVyIGAnXFxcXCdgIG9yIGAnLydgXG4gKiBhcyB0aGUgcGF0aCBzZXBhcmF0b3IgZm9yIHBhcnNpbmcgcGF0aHMuXG4gKi9cbmNsYXNzIFBhdGhXaW4zMiBleHRlbmRzIFBhdGhCYXNlIHtcbiAgICAvKipcbiAgICAgKiBTZXBhcmF0b3IgZm9yIGdlbmVyYXRpbmcgcGF0aCBzdHJpbmdzLlxuICAgICAqL1xuICAgIHNlcCA9ICdcXFxcJztcbiAgICAvKipcbiAgICAgKiBTZXBhcmF0b3IgZm9yIHBhcnNpbmcgcGF0aCBzdHJpbmdzLlxuICAgICAqL1xuICAgIHNwbGl0U2VwID0gZWl0aGVyU2VwO1xuICAgIC8qKlxuICAgICAqIERvIG5vdCBjcmVhdGUgbmV3IFBhdGggb2JqZWN0cyBkaXJlY3RseS4gIFRoZXkgc2hvdWxkIGFsd2F5cyBiZSBhY2Nlc3NlZFxuICAgICAqIHZpYSB0aGUgUGF0aFNjdXJyeSBjbGFzcyBvciBvdGhlciBtZXRob2RzIG9uIHRoZSBQYXRoIGNsYXNzLlxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgY29uc3RydWN0b3IobmFtZSwgdHlwZSA9IFVOS05PV04sIHJvb3QsIHJvb3RzLCBub2Nhc2UsIGNoaWxkcmVuLCBvcHRzKSB7XG4gICAgICAgIHN1cGVyKG5hbWUsIHR5cGUsIHJvb3QsIHJvb3RzLCBub2Nhc2UsIGNoaWxkcmVuLCBvcHRzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgbmV3Q2hpbGQobmFtZSwgdHlwZSA9IFVOS05PV04sIG9wdHMgPSB7fSkge1xuICAgICAgICByZXR1cm4gbmV3IFBhdGhXaW4zMihuYW1lLCB0eXBlLCB0aGlzLnJvb3QsIHRoaXMucm9vdHMsIHRoaXMubm9jYXNlLCB0aGlzLmNoaWxkcmVuQ2FjaGUoKSwgb3B0cyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIGdldFJvb3RTdHJpbmcocGF0aCkge1xuICAgICAgICByZXR1cm4gbm9kZV9wYXRoXzEud2luMzIucGFyc2UocGF0aCkucm9vdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgZ2V0Um9vdChyb290UGF0aCkge1xuICAgICAgICByb290UGF0aCA9IHVuY1RvRHJpdmUocm9vdFBhdGgudG9VcHBlckNhc2UoKSk7XG4gICAgICAgIGlmIChyb290UGF0aCA9PT0gdGhpcy5yb290Lm5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJvb3Q7XG4gICAgICAgIH1cbiAgICAgICAgLy8gb2ssIG5vdCB0aGF0IG9uZSwgY2hlY2sgaWYgaXQgbWF0Y2hlcyBhbm90aGVyIHdlIGtub3cgYWJvdXRcbiAgICAgICAgZm9yIChjb25zdCBbY29tcGFyZSwgcm9vdF0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5yb290cykpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNhbWVSb290KHJvb3RQYXRoLCBjb21wYXJlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAodGhpcy5yb290c1tyb290UGF0aF0gPSByb290KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBvdGhlcndpc2UsIGhhdmUgdG8gY3JlYXRlIGEgbmV3IG9uZS5cbiAgICAgICAgcmV0dXJuICh0aGlzLnJvb3RzW3Jvb3RQYXRoXSA9IG5ldyBQYXRoU2N1cnJ5V2luMzIocm9vdFBhdGgsIHRoaXMpLnJvb3QpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBzYW1lUm9vdChyb290UGF0aCwgY29tcGFyZSA9IHRoaXMucm9vdC5uYW1lKSB7XG4gICAgICAgIC8vIHdpbmRvd3MgY2FuIChyYXJlbHkpIGhhdmUgY2FzZS1zZW5zaXRpdmUgZmlsZXN5c3RlbSwgYnV0XG4gICAgICAgIC8vIFVOQyBhbmQgZHJpdmUgbGV0dGVycyBhcmUgYWx3YXlzIGNhc2UtaW5zZW5zaXRpdmUsIGFuZCBjYW5vbmljYWxseVxuICAgICAgICAvLyByZXByZXNlbnRlZCB1cHBlcmNhc2UuXG4gICAgICAgIHJvb3RQYXRoID0gcm9vdFBhdGhcbiAgICAgICAgICAgIC50b1VwcGVyQ2FzZSgpXG4gICAgICAgICAgICAucmVwbGFjZSgvXFwvL2csICdcXFxcJylcbiAgICAgICAgICAgIC5yZXBsYWNlKHVuY0RyaXZlUmVnZXhwLCAnJDFcXFxcJyk7XG4gICAgICAgIHJldHVybiByb290UGF0aCA9PT0gY29tcGFyZTtcbiAgICB9XG59XG5leHBvcnRzLlBhdGhXaW4zMiA9IFBhdGhXaW4zMjtcbi8qKlxuICogUGF0aCBjbGFzcyB1c2VkIG9uIGFsbCBwb3NpeCBzeXN0ZW1zLlxuICpcbiAqIFVzZXMgYCcvJ2AgYXMgdGhlIHBhdGggc2VwYXJhdG9yLlxuICovXG5jbGFzcyBQYXRoUG9zaXggZXh0ZW5kcyBQYXRoQmFzZSB7XG4gICAgLyoqXG4gICAgICogc2VwYXJhdG9yIGZvciBwYXJzaW5nIHBhdGggc3RyaW5nc1xuICAgICAqL1xuICAgIHNwbGl0U2VwID0gJy8nO1xuICAgIC8qKlxuICAgICAqIHNlcGFyYXRvciBmb3IgZ2VuZXJhdGluZyBwYXRoIHN0cmluZ3NcbiAgICAgKi9cbiAgICBzZXAgPSAnLyc7XG4gICAgLyoqXG4gICAgICogRG8gbm90IGNyZWF0ZSBuZXcgUGF0aCBvYmplY3RzIGRpcmVjdGx5LiAgVGhleSBzaG91bGQgYWx3YXlzIGJlIGFjY2Vzc2VkXG4gICAgICogdmlhIHRoZSBQYXRoU2N1cnJ5IGNsYXNzIG9yIG90aGVyIG1ldGhvZHMgb24gdGhlIFBhdGggY2xhc3MuXG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihuYW1lLCB0eXBlID0gVU5LTk9XTiwgcm9vdCwgcm9vdHMsIG5vY2FzZSwgY2hpbGRyZW4sIG9wdHMpIHtcbiAgICAgICAgc3VwZXIobmFtZSwgdHlwZSwgcm9vdCwgcm9vdHMsIG5vY2FzZSwgY2hpbGRyZW4sIG9wdHMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBnZXRSb290U3RyaW5nKHBhdGgpIHtcbiAgICAgICAgcmV0dXJuIHBhdGguc3RhcnRzV2l0aCgnLycpID8gJy8nIDogJyc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIGdldFJvb3QoX3Jvb3RQYXRoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJvb3Q7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIG5ld0NoaWxkKG5hbWUsIHR5cGUgPSBVTktOT1dOLCBvcHRzID0ge30pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQYXRoUG9zaXgobmFtZSwgdHlwZSwgdGhpcy5yb290LCB0aGlzLnJvb3RzLCB0aGlzLm5vY2FzZSwgdGhpcy5jaGlsZHJlbkNhY2hlKCksIG9wdHMpO1xuICAgIH1cbn1cbmV4cG9ydHMuUGF0aFBvc2l4ID0gUGF0aFBvc2l4O1xuLyoqXG4gKiBUaGUgYmFzZSBjbGFzcyBmb3IgYWxsIFBhdGhTY3VycnkgY2xhc3NlcywgcHJvdmlkaW5nIHRoZSBpbnRlcmZhY2UgZm9yIHBhdGhcbiAqIHJlc29sdXRpb24gYW5kIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucy5cbiAqXG4gKiBUeXBpY2FsbHksIHlvdSBzaG91bGQgKm5vdCogaW5zdGFudGlhdGUgdGhpcyBjbGFzcyBkaXJlY3RseSwgYnV0IHJhdGhlciBvbmVcbiAqIG9mIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBjbGFzc2VzLCBvciB0aGUgZXhwb3J0ZWQge0BsaW5rIFBhdGhTY3Vycnl9IHdoaWNoXG4gKiBkZWZhdWx0cyB0byB0aGUgY3VycmVudCBwbGF0Zm9ybS5cbiAqL1xuY2xhc3MgUGF0aFNjdXJyeUJhc2Uge1xuICAgIC8qKlxuICAgICAqIFRoZSByb290IFBhdGggZW50cnkgZm9yIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IG9mIHRoaXMgU2N1cnJ5XG4gICAgICovXG4gICAgcm9vdDtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyaW5nIHBhdGggZm9yIHRoZSByb290IG9mIHRoaXMgU2N1cnJ5J3MgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeVxuICAgICAqL1xuICAgIHJvb3RQYXRoO1xuICAgIC8qKlxuICAgICAqIEEgY29sbGVjdGlvbiBvZiBhbGwgcm9vdHMgZW5jb3VudGVyZWQsIHJlZmVyZW5jZWQgYnkgcm9vdFBhdGhcbiAgICAgKi9cbiAgICByb290cztcbiAgICAvKipcbiAgICAgKiBUaGUgUGF0aCBlbnRyeSBjb3JyZXNwb25kaW5nIHRvIHRoaXMgUGF0aFNjdXJyeSdzIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuXG4gICAgICovXG4gICAgY3dkO1xuICAgICNyZXNvbHZlQ2FjaGU7XG4gICAgI3Jlc29sdmVQb3NpeENhY2hlO1xuICAgICNjaGlsZHJlbjtcbiAgICAvKipcbiAgICAgKiBQZXJmb3JtIHBhdGggY29tcGFyaXNvbnMgY2FzZS1pbnNlbnNpdGl2ZWx5LlxuICAgICAqXG4gICAgICogRGVmYXVsdHMgdHJ1ZSBvbiBEYXJ3aW4gYW5kIFdpbmRvd3Mgc3lzdGVtcywgZmFsc2UgZWxzZXdoZXJlLlxuICAgICAqL1xuICAgIG5vY2FzZTtcbiAgICAjZnM7XG4gICAgLyoqXG4gICAgICogVGhpcyBjbGFzcyBzaG91bGQgbm90IGJlIGluc3RhbnRpYXRlZCBkaXJlY3RseS5cbiAgICAgKlxuICAgICAqIFVzZSBQYXRoU2N1cnJ5V2luMzIsIFBhdGhTY3VycnlEYXJ3aW4sIFBhdGhTY3VycnlQb3NpeCwgb3IgUGF0aFNjdXJyeVxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoY3dkID0gcHJvY2Vzcy5jd2QoKSwgcGF0aEltcGwsIHNlcCwgeyBub2Nhc2UsIGNoaWxkcmVuQ2FjaGVTaXplID0gMTYgKiAxMDI0LCBmcyA9IGRlZmF1bHRGUywgfSA9IHt9KSB7XG4gICAgICAgIHRoaXMuI2ZzID0gZnNGcm9tT3B0aW9uKGZzKTtcbiAgICAgICAgaWYgKGN3ZCBpbnN0YW5jZW9mIFVSTCB8fCBjd2Quc3RhcnRzV2l0aCgnZmlsZTovLycpKSB7XG4gICAgICAgICAgICBjd2QgPSAoMCwgbm9kZV91cmxfMS5maWxlVVJMVG9QYXRoKShjd2QpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHJlc29sdmUgYW5kIHNwbGl0IHJvb3QsIGFuZCB0aGVuIGFkZCB0byB0aGUgc3RvcmUuXG4gICAgICAgIC8vIHRoaXMgaXMgdGhlIG9ubHkgdGltZSB3ZSBjYWxsIHBhdGgucmVzb2x2ZSgpXG4gICAgICAgIGNvbnN0IGN3ZFBhdGggPSBwYXRoSW1wbC5yZXNvbHZlKGN3ZCk7XG4gICAgICAgIHRoaXMucm9vdHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICB0aGlzLnJvb3RQYXRoID0gdGhpcy5wYXJzZVJvb3RQYXRoKGN3ZFBhdGgpO1xuICAgICAgICB0aGlzLiNyZXNvbHZlQ2FjaGUgPSBuZXcgUmVzb2x2ZUNhY2hlKCk7XG4gICAgICAgIHRoaXMuI3Jlc29sdmVQb3NpeENhY2hlID0gbmV3IFJlc29sdmVDYWNoZSgpO1xuICAgICAgICB0aGlzLiNjaGlsZHJlbiA9IG5ldyBDaGlsZHJlbkNhY2hlKGNoaWxkcmVuQ2FjaGVTaXplKTtcbiAgICAgICAgY29uc3Qgc3BsaXQgPSBjd2RQYXRoLnN1YnN0cmluZyh0aGlzLnJvb3RQYXRoLmxlbmd0aCkuc3BsaXQoc2VwKTtcbiAgICAgICAgLy8gcmVzb2x2ZSgnLycpIGxlYXZlcyAnJywgc3BsaXRzIHRvIFsnJ10sIHdlIGRvbid0IHdhbnQgdGhhdC5cbiAgICAgICAgaWYgKHNwbGl0Lmxlbmd0aCA9PT0gMSAmJiAhc3BsaXRbMF0pIHtcbiAgICAgICAgICAgIHNwbGl0LnBvcCgpO1xuICAgICAgICB9XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICBpZiAobm9jYXNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ211c3QgcHJvdmlkZSBub2Nhc2Ugc2V0dGluZyB0byBQYXRoU2N1cnJ5QmFzZSBjdG9yJyk7XG4gICAgICAgIH1cbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgdGhpcy5ub2Nhc2UgPSBub2Nhc2U7XG4gICAgICAgIHRoaXMucm9vdCA9IHRoaXMubmV3Um9vdCh0aGlzLiNmcyk7XG4gICAgICAgIHRoaXMucm9vdHNbdGhpcy5yb290UGF0aF0gPSB0aGlzLnJvb3Q7XG4gICAgICAgIGxldCBwcmV2ID0gdGhpcy5yb290O1xuICAgICAgICBsZXQgbGVuID0gc3BsaXQubGVuZ3RoIC0gMTtcbiAgICAgICAgY29uc3Qgam9pblNlcCA9IHBhdGhJbXBsLnNlcDtcbiAgICAgICAgbGV0IGFicyA9IHRoaXMucm9vdFBhdGg7XG4gICAgICAgIGxldCBzYXdGaXJzdCA9IGZhbHNlO1xuICAgICAgICBmb3IgKGNvbnN0IHBhcnQgb2Ygc3BsaXQpIHtcbiAgICAgICAgICAgIGNvbnN0IGwgPSBsZW4tLTtcbiAgICAgICAgICAgIHByZXYgPSBwcmV2LmNoaWxkKHBhcnQsIHtcbiAgICAgICAgICAgICAgICByZWxhdGl2ZTogbmV3IEFycmF5KGwpLmZpbGwoJy4uJykuam9pbihqb2luU2VwKSxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBvc2l4OiBuZXcgQXJyYXkobCkuZmlsbCgnLi4nKS5qb2luKCcvJyksXG4gICAgICAgICAgICAgICAgZnVsbHBhdGg6IChhYnMgKz0gKHNhd0ZpcnN0ID8gJycgOiBqb2luU2VwKSArIHBhcnQpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzYXdGaXJzdCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jd2QgPSBwcmV2O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGRlcHRoIG9mIGEgcHJvdmlkZWQgcGF0aCwgc3RyaW5nLCBvciB0aGUgY3dkXG4gICAgICovXG4gICAgZGVwdGgocGF0aCA9IHRoaXMuY3dkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgcGF0aCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHBhdGggPSB0aGlzLmN3ZC5yZXNvbHZlKHBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXRoLmRlcHRoKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgY2FjaGUgb2YgY2hpbGQgZW50cmllcy4gIEV4cG9zZWQgc28gc3ViY2xhc3NlcyBjYW4gY3JlYXRlXG4gICAgICogY2hpbGQgUGF0aCBvYmplY3RzIGluIGEgcGxhdGZvcm0tc3BlY2lmaWMgd2F5LlxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgY2hpbGRyZW5DYWNoZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2NoaWxkcmVuO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXNvbHZlIG9uZSBvciBtb3JlIHBhdGggc3RyaW5ncyB0byBhIHJlc29sdmVkIHN0cmluZ1xuICAgICAqXG4gICAgICogU2FtZSBpbnRlcmZhY2UgYXMgcmVxdWlyZSgncGF0aCcpLnJlc29sdmUuXG4gICAgICpcbiAgICAgKiBNdWNoIGZhc3RlciB0aGFuIHBhdGgucmVzb2x2ZSgpIHdoZW4gY2FsbGVkIG11bHRpcGxlIHRpbWVzIGZvciB0aGUgc2FtZVxuICAgICAqIHBhdGgsIGJlY2F1c2UgdGhlIHJlc29sdmVkIFBhdGggb2JqZWN0cyBhcmUgY2FjaGVkLiAgTXVjaCBzbG93ZXJcbiAgICAgKiBvdGhlcndpc2UuXG4gICAgICovXG4gICAgcmVzb2x2ZSguLi5wYXRocykge1xuICAgICAgICAvLyBmaXJzdCBmaWd1cmUgb3V0IHRoZSBtaW5pbXVtIG51bWJlciBvZiBwYXRocyB3ZSBoYXZlIHRvIHRlc3RcbiAgICAgICAgLy8gd2UgYWx3YXlzIHN0YXJ0IGF0IGN3ZCwgYnV0IGFueSBhYnNvbHV0ZXMgd2lsbCBidW1wIHRoZSBzdGFydFxuICAgICAgICBsZXQgciA9ICcnO1xuICAgICAgICBmb3IgKGxldCBpID0gcGF0aHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IHAgPSBwYXRoc1tpXTtcbiAgICAgICAgICAgIGlmICghcCB8fCBwID09PSAnLicpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICByID0gciA/IGAke3B9LyR7cn1gIDogcDtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzQWJzb2x1dGUocCkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjYWNoZWQgPSB0aGlzLiNyZXNvbHZlQ2FjaGUuZ2V0KHIpO1xuICAgICAgICBpZiAoY2FjaGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5jd2QucmVzb2x2ZShyKS5mdWxscGF0aCgpO1xuICAgICAgICB0aGlzLiNyZXNvbHZlQ2FjaGUuc2V0KHIsIHJlc3VsdCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlc29sdmUgb25lIG9yIG1vcmUgcGF0aCBzdHJpbmdzIHRvIGEgcmVzb2x2ZWQgc3RyaW5nLCByZXR1cm5pbmdcbiAgICAgKiB0aGUgcG9zaXggcGF0aC4gIElkZW50aWNhbCB0byAucmVzb2x2ZSgpIG9uIHBvc2l4IHN5c3RlbXMsIGJ1dCBvblxuICAgICAqIHdpbmRvd3Mgd2lsbCByZXR1cm4gYSBmb3J3YXJkLXNsYXNoIHNlcGFyYXRlZCBVTkMgcGF0aC5cbiAgICAgKlxuICAgICAqIFNhbWUgaW50ZXJmYWNlIGFzIHJlcXVpcmUoJ3BhdGgnKS5yZXNvbHZlLlxuICAgICAqXG4gICAgICogTXVjaCBmYXN0ZXIgdGhhbiBwYXRoLnJlc29sdmUoKSB3aGVuIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBmb3IgdGhlIHNhbWVcbiAgICAgKiBwYXRoLCBiZWNhdXNlIHRoZSByZXNvbHZlZCBQYXRoIG9iamVjdHMgYXJlIGNhY2hlZC4gIE11Y2ggc2xvd2VyXG4gICAgICogb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIHJlc29sdmVQb3NpeCguLi5wYXRocykge1xuICAgICAgICAvLyBmaXJzdCBmaWd1cmUgb3V0IHRoZSBtaW5pbXVtIG51bWJlciBvZiBwYXRocyB3ZSBoYXZlIHRvIHRlc3RcbiAgICAgICAgLy8gd2UgYWx3YXlzIHN0YXJ0IGF0IGN3ZCwgYnV0IGFueSBhYnNvbHV0ZXMgd2lsbCBidW1wIHRoZSBzdGFydFxuICAgICAgICBsZXQgciA9ICcnO1xuICAgICAgICBmb3IgKGxldCBpID0gcGF0aHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IHAgPSBwYXRoc1tpXTtcbiAgICAgICAgICAgIGlmICghcCB8fCBwID09PSAnLicpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICByID0gciA/IGAke3B9LyR7cn1gIDogcDtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzQWJzb2x1dGUocCkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjYWNoZWQgPSB0aGlzLiNyZXNvbHZlUG9zaXhDYWNoZS5nZXQocik7XG4gICAgICAgIGlmIChjYWNoZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmN3ZC5yZXNvbHZlKHIpLmZ1bGxwYXRoUG9zaXgoKTtcbiAgICAgICAgdGhpcy4jcmVzb2x2ZVBvc2l4Q2FjaGUuc2V0KHIsIHJlc3VsdCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIGZpbmQgdGhlIHJlbGF0aXZlIHBhdGggZnJvbSB0aGUgY3dkIHRvIHRoZSBzdXBwbGllZCBwYXRoIHN0cmluZyBvciBlbnRyeVxuICAgICAqL1xuICAgIHJlbGF0aXZlKGVudHJ5ID0gdGhpcy5jd2QpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVudHJ5LnJlbGF0aXZlKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIGZpbmQgdGhlIHJlbGF0aXZlIHBhdGggZnJvbSB0aGUgY3dkIHRvIHRoZSBzdXBwbGllZCBwYXRoIHN0cmluZyBvclxuICAgICAqIGVudHJ5LCB1c2luZyAvIGFzIHRoZSBwYXRoIGRlbGltaXRlciwgZXZlbiBvbiBXaW5kb3dzLlxuICAgICAqL1xuICAgIHJlbGF0aXZlUG9zaXgoZW50cnkgPSB0aGlzLmN3ZCkge1xuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZC5yZXNvbHZlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW50cnkucmVsYXRpdmVQb3NpeCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIGJhc2VuYW1lIGZvciB0aGUgcHJvdmlkZWQgc3RyaW5nIG9yIFBhdGggb2JqZWN0XG4gICAgICovXG4gICAgYmFzZW5hbWUoZW50cnkgPSB0aGlzLmN3ZCkge1xuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZC5yZXNvbHZlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW50cnkubmFtZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBkaXJuYW1lIGZvciB0aGUgcHJvdmlkZWQgc3RyaW5nIG9yIFBhdGggb2JqZWN0XG4gICAgICovXG4gICAgZGlybmFtZShlbnRyeSA9IHRoaXMuY3dkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoZW50cnkucGFyZW50IHx8IGVudHJ5KS5mdWxscGF0aCgpO1xuICAgIH1cbiAgICBhc3luYyByZWFkZGlyKGVudHJ5ID0gdGhpcy5jd2QsIG9wdHMgPSB7XG4gICAgICAgIHdpdGhGaWxlVHlwZXM6IHRydWUsXG4gICAgfSkge1xuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZC5yZXNvbHZlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghKGVudHJ5IGluc3RhbmNlb2YgUGF0aEJhc2UpKSB7XG4gICAgICAgICAgICBvcHRzID0gZW50cnk7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgd2l0aEZpbGVUeXBlcyB9ID0gb3B0cztcbiAgICAgICAgaWYgKCFlbnRyeS5jYW5SZWFkZGlyKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHAgPSBhd2FpdCBlbnRyeS5yZWFkZGlyKCk7XG4gICAgICAgICAgICByZXR1cm4gd2l0aEZpbGVUeXBlcyA/IHAgOiBwLm1hcChlID0+IGUubmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVhZGRpclN5bmMoZW50cnkgPSB0aGlzLmN3ZCwgb3B0cyA9IHtcbiAgICAgICAgd2l0aEZpbGVUeXBlczogdHJ1ZSxcbiAgICB9KSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCEoZW50cnkgaW5zdGFuY2VvZiBQYXRoQmFzZSkpIHtcbiAgICAgICAgICAgIG9wdHMgPSBlbnRyeTtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2Q7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyB3aXRoRmlsZVR5cGVzID0gdHJ1ZSB9ID0gb3B0cztcbiAgICAgICAgaWYgKCFlbnRyeS5jYW5SZWFkZGlyKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh3aXRoRmlsZVR5cGVzKSB7XG4gICAgICAgICAgICByZXR1cm4gZW50cnkucmVhZGRpclN5bmMoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBlbnRyeS5yZWFkZGlyU3luYygpLm1hcChlID0+IGUubmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2FsbCBsc3RhdCgpIG9uIHRoZSBzdHJpbmcgb3IgUGF0aCBvYmplY3QsIGFuZCB1cGRhdGUgYWxsIGtub3duXG4gICAgICogaW5mb3JtYXRpb24gdGhhdCBjYW4gYmUgZGV0ZXJtaW5lZC5cbiAgICAgKlxuICAgICAqIE5vdGUgdGhhdCB1bmxpa2UgYGZzLmxzdGF0KClgLCB0aGUgcmV0dXJuZWQgdmFsdWUgZG9lcyBub3QgY29udGFpbiBzb21lXG4gICAgICogaW5mb3JtYXRpb24sIHN1Y2ggYXMgYG1vZGVgLCBgZGV2YCwgYG5saW5rYCwgYW5kIGBpbm9gLiAgSWYgdGhhdFxuICAgICAqIGluZm9ybWF0aW9uIGlzIHJlcXVpcmVkLCB5b3Ugd2lsbCBuZWVkIHRvIGNhbGwgYGZzLmxzdGF0YCB5b3Vyc2VsZi5cbiAgICAgKlxuICAgICAqIElmIHRoZSBQYXRoIHJlZmVycyB0byBhIG5vbmV4aXN0ZW50IGZpbGUsIG9yIGlmIHRoZSBsc3RhdCBjYWxsIGZhaWxzIGZvclxuICAgICAqIGFueSByZWFzb24sIGB1bmRlZmluZWRgIGlzIHJldHVybmVkLiAgT3RoZXJ3aXNlIHRoZSB1cGRhdGVkIFBhdGggb2JqZWN0IGlzXG4gICAgICogcmV0dXJuZWQuXG4gICAgICpcbiAgICAgKiBSZXN1bHRzIGFyZSBjYWNoZWQsIGFuZCB0aHVzIG1heSBiZSBvdXQgb2YgZGF0ZSBpZiB0aGUgZmlsZXN5c3RlbSBpc1xuICAgICAqIG11dGF0ZWQuXG4gICAgICovXG4gICAgYXN5bmMgbHN0YXQoZW50cnkgPSB0aGlzLmN3ZCkge1xuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZC5yZXNvbHZlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW50cnkubHN0YXQoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogc3luY2hyb25vdXMge0BsaW5rIFBhdGhTY3VycnlCYXNlLmxzdGF0fVxuICAgICAqL1xuICAgIGxzdGF0U3luYyhlbnRyeSA9IHRoaXMuY3dkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbnRyeS5sc3RhdFN5bmMoKTtcbiAgICB9XG4gICAgYXN5bmMgcmVhZGxpbmsoZW50cnkgPSB0aGlzLmN3ZCwgeyB3aXRoRmlsZVR5cGVzIH0gPSB7XG4gICAgICAgIHdpdGhGaWxlVHlwZXM6IGZhbHNlLFxuICAgIH0pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIShlbnRyeSBpbnN0YW5jZW9mIFBhdGhCYXNlKSkge1xuICAgICAgICAgICAgd2l0aEZpbGVUeXBlcyA9IGVudHJ5LndpdGhGaWxlVHlwZXM7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGUgPSBhd2FpdCBlbnRyeS5yZWFkbGluaygpO1xuICAgICAgICByZXR1cm4gd2l0aEZpbGVUeXBlcyA/IGUgOiBlPy5mdWxscGF0aCgpO1xuICAgIH1cbiAgICByZWFkbGlua1N5bmMoZW50cnkgPSB0aGlzLmN3ZCwgeyB3aXRoRmlsZVR5cGVzIH0gPSB7XG4gICAgICAgIHdpdGhGaWxlVHlwZXM6IGZhbHNlLFxuICAgIH0pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIShlbnRyeSBpbnN0YW5jZW9mIFBhdGhCYXNlKSkge1xuICAgICAgICAgICAgd2l0aEZpbGVUeXBlcyA9IGVudHJ5LndpdGhGaWxlVHlwZXM7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGUgPSBlbnRyeS5yZWFkbGlua1N5bmMoKTtcbiAgICAgICAgcmV0dXJuIHdpdGhGaWxlVHlwZXMgPyBlIDogZT8uZnVsbHBhdGgoKTtcbiAgICB9XG4gICAgYXN5bmMgcmVhbHBhdGgoZW50cnkgPSB0aGlzLmN3ZCwgeyB3aXRoRmlsZVR5cGVzIH0gPSB7XG4gICAgICAgIHdpdGhGaWxlVHlwZXM6IGZhbHNlLFxuICAgIH0pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIShlbnRyeSBpbnN0YW5jZW9mIFBhdGhCYXNlKSkge1xuICAgICAgICAgICAgd2l0aEZpbGVUeXBlcyA9IGVudHJ5LndpdGhGaWxlVHlwZXM7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGUgPSBhd2FpdCBlbnRyeS5yZWFscGF0aCgpO1xuICAgICAgICByZXR1cm4gd2l0aEZpbGVUeXBlcyA/IGUgOiBlPy5mdWxscGF0aCgpO1xuICAgIH1cbiAgICByZWFscGF0aFN5bmMoZW50cnkgPSB0aGlzLmN3ZCwgeyB3aXRoRmlsZVR5cGVzIH0gPSB7XG4gICAgICAgIHdpdGhGaWxlVHlwZXM6IGZhbHNlLFxuICAgIH0pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIShlbnRyeSBpbnN0YW5jZW9mIFBhdGhCYXNlKSkge1xuICAgICAgICAgICAgd2l0aEZpbGVUeXBlcyA9IGVudHJ5LndpdGhGaWxlVHlwZXM7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGUgPSBlbnRyeS5yZWFscGF0aFN5bmMoKTtcbiAgICAgICAgcmV0dXJuIHdpdGhGaWxlVHlwZXMgPyBlIDogZT8uZnVsbHBhdGgoKTtcbiAgICB9XG4gICAgYXN5bmMgd2FsayhlbnRyeSA9IHRoaXMuY3dkLCBvcHRzID0ge30pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIShlbnRyeSBpbnN0YW5jZW9mIFBhdGhCYXNlKSkge1xuICAgICAgICAgICAgb3B0cyA9IGVudHJ5O1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHdpdGhGaWxlVHlwZXMgPSB0cnVlLCBmb2xsb3cgPSBmYWxzZSwgZmlsdGVyLCB3YWxrRmlsdGVyLCB9ID0gb3B0cztcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IFtdO1xuICAgICAgICBpZiAoIWZpbHRlciB8fCBmaWx0ZXIoZW50cnkpKSB7XG4gICAgICAgICAgICByZXN1bHRzLnB1c2god2l0aEZpbGVUeXBlcyA/IGVudHJ5IDogZW50cnkuZnVsbHBhdGgoKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGlycyA9IG5ldyBTZXQoKTtcbiAgICAgICAgY29uc3Qgd2FsayA9IChkaXIsIGNiKSA9PiB7XG4gICAgICAgICAgICBkaXJzLmFkZChkaXIpO1xuICAgICAgICAgICAgZGlyLnJlYWRkaXJDQigoZXIsIGVudHJpZXMpID0+IHtcbiAgICAgICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgICAgICAgICBpZiAoZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNiKGVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgICAgICAgICBsZXQgbGVuID0gZW50cmllcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgaWYgKCFsZW4pXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYigpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgtLWxlbiA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBlIG9mIGVudHJpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmaWx0ZXIgfHwgZmlsdGVyKGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2god2l0aEZpbGVUeXBlcyA/IGUgOiBlLmZ1bGxwYXRoKCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChmb2xsb3cgJiYgZS5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlLnJlYWxwYXRoKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbihyID0+IChyPy5pc1Vua25vd24oKSA/IHIubHN0YXQoKSA6IHIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKHIgPT4gcj8uc2hvdWxkV2FsayhkaXJzLCB3YWxrRmlsdGVyKSA/IHdhbGsociwgbmV4dCkgOiBuZXh0KCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUuc2hvdWxkV2FsayhkaXJzLCB3YWxrRmlsdGVyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbGsoZSwgbmV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB0cnVlKTsgLy8gemFsZ29vb29vb29cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBlbnRyeTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXMsIHJlaikgPT4ge1xuICAgICAgICAgICAgd2FsayhzdGFydCwgZXIgPT4ge1xuICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICAgICAgICAgIGlmIChlcilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlaihlcik7XG4gICAgICAgICAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgICAgICAgICByZXMocmVzdWx0cyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHdhbGtTeW5jKGVudHJ5ID0gdGhpcy5jd2QsIG9wdHMgPSB7fSkge1xuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZC5yZXNvbHZlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghKGVudHJ5IGluc3RhbmNlb2YgUGF0aEJhc2UpKSB7XG4gICAgICAgICAgICBvcHRzID0gZW50cnk7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgd2l0aEZpbGVUeXBlcyA9IHRydWUsIGZvbGxvdyA9IGZhbHNlLCBmaWx0ZXIsIHdhbGtGaWx0ZXIsIH0gPSBvcHRzO1xuICAgICAgICBjb25zdCByZXN1bHRzID0gW107XG4gICAgICAgIGlmICghZmlsdGVyIHx8IGZpbHRlcihlbnRyeSkpIHtcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaCh3aXRoRmlsZVR5cGVzID8gZW50cnkgOiBlbnRyeS5mdWxscGF0aCgpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkaXJzID0gbmV3IFNldChbZW50cnldKTtcbiAgICAgICAgZm9yIChjb25zdCBkaXIgb2YgZGlycykge1xuICAgICAgICAgICAgY29uc3QgZW50cmllcyA9IGRpci5yZWFkZGlyU3luYygpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBlIG9mIGVudHJpZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWZpbHRlciB8fCBmaWx0ZXIoZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHdpdGhGaWxlVHlwZXMgPyBlIDogZS5mdWxscGF0aCgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IHIgPSBlO1xuICAgICAgICAgICAgICAgIGlmIChlLmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoZm9sbG93ICYmIChyID0gZS5yZWFscGF0aFN5bmMoKSkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyLmlzVW5rbm93bigpKVxuICAgICAgICAgICAgICAgICAgICAgICAgci5sc3RhdFN5bmMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHIuc2hvdWxkV2FsayhkaXJzLCB3YWxrRmlsdGVyKSkge1xuICAgICAgICAgICAgICAgICAgICBkaXJzLmFkZChyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN1cHBvcnQgZm9yIGBmb3IgYXdhaXRgXG4gICAgICpcbiAgICAgKiBBbGlhcyBmb3Ige0BsaW5rIFBhdGhTY3VycnlCYXNlLml0ZXJhdGV9XG4gICAgICpcbiAgICAgKiBOb3RlOiBBcyBvZiBOb2RlIDE5LCB0aGlzIGlzIHZlcnkgc2xvdywgY29tcGFyZWQgdG8gb3RoZXIgbWV0aG9kcyBvZlxuICAgICAqIHdhbGtpbmcuICBDb25zaWRlciB1c2luZyB7QGxpbmsgUGF0aFNjdXJyeUJhc2Uuc3RyZWFtfSBpZiBtZW1vcnkgb3ZlcmhlYWRcbiAgICAgKiBhbmQgYmFja3ByZXNzdXJlIGFyZSBjb25jZXJucywgb3Ige0BsaW5rIFBhdGhTY3VycnlCYXNlLndhbGt9IGlmIG5vdC5cbiAgICAgKi9cbiAgICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pdGVyYXRlKCk7XG4gICAgfVxuICAgIGl0ZXJhdGUoZW50cnkgPSB0aGlzLmN3ZCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIC8vIGl0ZXJhdGluZyBhc3luYyBvdmVyIHRoZSBzdHJlYW0gaXMgc2lnbmlmaWNhbnRseSBtb3JlIHBlcmZvcm1hbnQsXG4gICAgICAgIC8vIGVzcGVjaWFsbHkgaW4gdGhlIHdhcm0tY2FjaGUgc2NlbmFyaW8sIGJlY2F1c2UgaXQgYnVmZmVycyB1cCBkaXJlY3RvcnlcbiAgICAgICAgLy8gZW50cmllcyBpbiB0aGUgYmFja2dyb3VuZCBpbnN0ZWFkIG9mIHdhaXRpbmcgZm9yIGEgeWllbGQgZm9yIGVhY2ggb25lLlxuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZC5yZXNvbHZlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghKGVudHJ5IGluc3RhbmNlb2YgUGF0aEJhc2UpKSB7XG4gICAgICAgICAgICBvcHRpb25zID0gZW50cnk7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnN0cmVhbShlbnRyeSwgb3B0aW9ucylbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEl0ZXJhdGluZyBvdmVyIGEgUGF0aFNjdXJyeSBwZXJmb3JtcyBhIHN5bmNocm9ub3VzIHdhbGsuXG4gICAgICpcbiAgICAgKiBBbGlhcyBmb3Ige0BsaW5rIFBhdGhTY3VycnlCYXNlLml0ZXJhdGVTeW5jfVxuICAgICAqL1xuICAgIFtTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pdGVyYXRlU3luYygpO1xuICAgIH1cbiAgICAqaXRlcmF0ZVN5bmMoZW50cnkgPSB0aGlzLmN3ZCwgb3B0cyA9IHt9KSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCEoZW50cnkgaW5zdGFuY2VvZiBQYXRoQmFzZSkpIHtcbiAgICAgICAgICAgIG9wdHMgPSBlbnRyeTtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2Q7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyB3aXRoRmlsZVR5cGVzID0gdHJ1ZSwgZm9sbG93ID0gZmFsc2UsIGZpbHRlciwgd2Fsa0ZpbHRlciwgfSA9IG9wdHM7XG4gICAgICAgIGlmICghZmlsdGVyIHx8IGZpbHRlcihlbnRyeSkpIHtcbiAgICAgICAgICAgIHlpZWxkIHdpdGhGaWxlVHlwZXMgPyBlbnRyeSA6IGVudHJ5LmZ1bGxwYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGlycyA9IG5ldyBTZXQoW2VudHJ5XSk7XG4gICAgICAgIGZvciAoY29uc3QgZGlyIG9mIGRpcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGVudHJpZXMgPSBkaXIucmVhZGRpclN5bmMoKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFmaWx0ZXIgfHwgZmlsdGVyKGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIHdpdGhGaWxlVHlwZXMgPyBlIDogZS5mdWxscGF0aCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgciA9IGU7XG4gICAgICAgICAgICAgICAgaWYgKGUuaXNTeW1ib2xpY0xpbmsoKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIShmb2xsb3cgJiYgKHIgPSBlLnJlYWxwYXRoU3luYygpKSkpXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHIuaXNVbmtub3duKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICByLmxzdGF0U3luYygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoci5zaG91bGRXYWxrKGRpcnMsIHdhbGtGaWx0ZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRpcnMuYWRkKHIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBzdHJlYW0oZW50cnkgPSB0aGlzLmN3ZCwgb3B0cyA9IHt9KSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCEoZW50cnkgaW5zdGFuY2VvZiBQYXRoQmFzZSkpIHtcbiAgICAgICAgICAgIG9wdHMgPSBlbnRyeTtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2Q7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyB3aXRoRmlsZVR5cGVzID0gdHJ1ZSwgZm9sbG93ID0gZmFsc2UsIGZpbHRlciwgd2Fsa0ZpbHRlciwgfSA9IG9wdHM7XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBuZXcgbWluaXBhc3NfMS5NaW5pcGFzcyh7IG9iamVjdE1vZGU6IHRydWUgfSk7XG4gICAgICAgIGlmICghZmlsdGVyIHx8IGZpbHRlcihlbnRyeSkpIHtcbiAgICAgICAgICAgIHJlc3VsdHMud3JpdGUod2l0aEZpbGVUeXBlcyA/IGVudHJ5IDogZW50cnkuZnVsbHBhdGgoKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGlycyA9IG5ldyBTZXQoKTtcbiAgICAgICAgY29uc3QgcXVldWUgPSBbZW50cnldO1xuICAgICAgICBsZXQgcHJvY2Vzc2luZyA9IDA7XG4gICAgICAgIGNvbnN0IHByb2Nlc3MgPSAoKSA9PiB7XG4gICAgICAgICAgICBsZXQgcGF1c2VkID0gZmFsc2U7XG4gICAgICAgICAgICB3aGlsZSAoIXBhdXNlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpciA9IHF1ZXVlLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgaWYgKCFkaXIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb2Nlc3NpbmcgPT09IDApXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzLmVuZCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHByb2Nlc3NpbmcrKztcbiAgICAgICAgICAgICAgICBkaXJzLmFkZChkaXIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9uUmVhZGRpciA9IChlciwgZW50cmllcywgZGlkUmVhbHBhdGhzID0gZmFsc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICAgICAgICAgIGlmIChlcilcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRzLmVtaXQoJ2Vycm9yJywgZXIpO1xuICAgICAgICAgICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgICAgICAgICBpZiAoZm9sbG93ICYmICFkaWRSZWFscGF0aHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb21pc2VzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGUgb2YgZW50cmllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaChlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVhbHBhdGgoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oKHIpID0+IHI/LmlzVW5rbm93bigpID8gci5sc3RhdCgpIDogcikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9taXNlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbigoKSA9PiBvblJlYWRkaXIobnVsbCwgZW50cmllcywgdHJ1ZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGUgb2YgZW50cmllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUgJiYgKCFmaWx0ZXIgfHwgZmlsdGVyKGUpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVzdWx0cy53cml0ZSh3aXRoRmlsZVR5cGVzID8gZSA6IGUuZnVsbHBhdGgoKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF1c2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2luZy0tO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGUgb2YgZW50cmllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgciA9IGUucmVhbHBhdGhDYWNoZWQoKSB8fCBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIuc2hvdWxkV2FsayhkaXJzLCB3YWxrRmlsdGVyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXVlLnB1c2gocik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhdXNlZCAmJiAhcmVzdWx0cy5mbG93aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzLm9uY2UoJ2RyYWluJywgcHJvY2Vzcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIXN5bmMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgLy8gemFsZ28gY29udGFpbm1lbnRcbiAgICAgICAgICAgICAgICBsZXQgc3luYyA9IHRydWU7XG4gICAgICAgICAgICAgICAgZGlyLnJlYWRkaXJDQihvblJlYWRkaXIsIHRydWUpO1xuICAgICAgICAgICAgICAgIHN5bmMgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcHJvY2VzcygpO1xuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG4gICAgc3RyZWFtU3luYyhlbnRyeSA9IHRoaXMuY3dkLCBvcHRzID0ge30pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIShlbnRyeSBpbnN0YW5jZW9mIFBhdGhCYXNlKSkge1xuICAgICAgICAgICAgb3B0cyA9IGVudHJ5O1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHdpdGhGaWxlVHlwZXMgPSB0cnVlLCBmb2xsb3cgPSBmYWxzZSwgZmlsdGVyLCB3YWxrRmlsdGVyLCB9ID0gb3B0cztcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IG5ldyBtaW5pcGFzc18xLk1pbmlwYXNzKHsgb2JqZWN0TW9kZTogdHJ1ZSB9KTtcbiAgICAgICAgY29uc3QgZGlycyA9IG5ldyBTZXQoKTtcbiAgICAgICAgaWYgKCFmaWx0ZXIgfHwgZmlsdGVyKGVudHJ5KSkge1xuICAgICAgICAgICAgcmVzdWx0cy53cml0ZSh3aXRoRmlsZVR5cGVzID8gZW50cnkgOiBlbnRyeS5mdWxscGF0aCgpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBxdWV1ZSA9IFtlbnRyeV07XG4gICAgICAgIGxldCBwcm9jZXNzaW5nID0gMDtcbiAgICAgICAgY29uc3QgcHJvY2VzcyA9ICgpID0+IHtcbiAgICAgICAgICAgIGxldCBwYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHdoaWxlICghcGF1c2VkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGlyID0gcXVldWUuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICBpZiAoIWRpcikge1xuICAgICAgICAgICAgICAgICAgICBpZiAocHJvY2Vzc2luZyA9PT0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMuZW5kKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcHJvY2Vzc2luZysrO1xuICAgICAgICAgICAgICAgIGRpcnMuYWRkKGRpcik7XG4gICAgICAgICAgICAgICAgY29uc3QgZW50cmllcyA9IGRpci5yZWFkZGlyU3luYygpO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZmlsdGVyIHx8IGZpbHRlcihlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHRzLndyaXRlKHdpdGhGaWxlVHlwZXMgPyBlIDogZS5mdWxscGF0aCgpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdXNlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcHJvY2Vzc2luZy0tO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCByID0gZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUuaXNTeW1ib2xpY0xpbmsoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoZm9sbG93ICYmIChyID0gZS5yZWFscGF0aFN5bmMoKSkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIuaXNVbmtub3duKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgci5sc3RhdFN5bmMoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoci5zaG91bGRXYWxrKGRpcnMsIHdhbGtGaWx0ZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBxdWV1ZS5wdXNoKHIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBhdXNlZCAmJiAhcmVzdWx0cy5mbG93aW5nKVxuICAgICAgICAgICAgICAgIHJlc3VsdHMub25jZSgnZHJhaW4nLCBwcm9jZXNzKTtcbiAgICAgICAgfTtcbiAgICAgICAgcHJvY2VzcygpO1xuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG4gICAgY2hkaXIocGF0aCA9IHRoaXMuY3dkKSB7XG4gICAgICAgIGNvbnN0IG9sZEN3ZCA9IHRoaXMuY3dkO1xuICAgICAgICB0aGlzLmN3ZCA9IHR5cGVvZiBwYXRoID09PSAnc3RyaW5nJyA/IHRoaXMuY3dkLnJlc29sdmUocGF0aCkgOiBwYXRoO1xuICAgICAgICB0aGlzLmN3ZFtzZXRBc0N3ZF0ob2xkQ3dkKTtcbiAgICB9XG59XG5leHBvcnRzLlBhdGhTY3VycnlCYXNlID0gUGF0aFNjdXJyeUJhc2U7XG4vKipcbiAqIFdpbmRvd3MgaW1wbGVtZW50YXRpb24gb2Yge0BsaW5rIFBhdGhTY3VycnlCYXNlfVxuICpcbiAqIERlZmF1bHRzIHRvIGNhc2UgaW5zZW5zaXR2ZSwgdXNlcyBgJ1xcXFwnYCB0byBnZW5lcmF0ZSBwYXRoIHN0cmluZ3MuICBVc2VzXG4gKiB7QGxpbmsgUGF0aFdpbjMyfSBmb3IgUGF0aCBvYmplY3RzLlxuICovXG5jbGFzcyBQYXRoU2N1cnJ5V2luMzIgZXh0ZW5kcyBQYXRoU2N1cnJ5QmFzZSB7XG4gICAgLyoqXG4gICAgICogc2VwYXJhdG9yIGZvciBnZW5lcmF0aW5nIHBhdGggc3RyaW5nc1xuICAgICAqL1xuICAgIHNlcCA9ICdcXFxcJztcbiAgICBjb25zdHJ1Y3Rvcihjd2QgPSBwcm9jZXNzLmN3ZCgpLCBvcHRzID0ge30pIHtcbiAgICAgICAgY29uc3QgeyBub2Nhc2UgPSB0cnVlIH0gPSBvcHRzO1xuICAgICAgICBzdXBlcihjd2QsIG5vZGVfcGF0aF8xLndpbjMyLCAnXFxcXCcsIHsgLi4ub3B0cywgbm9jYXNlIH0pO1xuICAgICAgICB0aGlzLm5vY2FzZSA9IG5vY2FzZTtcbiAgICAgICAgZm9yIChsZXQgcCA9IHRoaXMuY3dkOyBwOyBwID0gcC5wYXJlbnQpIHtcbiAgICAgICAgICAgIHAubm9jYXNlID0gdGhpcy5ub2Nhc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcGFyc2VSb290UGF0aChkaXIpIHtcbiAgICAgICAgLy8gaWYgdGhlIHBhdGggc3RhcnRzIHdpdGggYSBzaW5nbGUgc2VwYXJhdG9yLCBpdCdzIG5vdCBhIFVOQywgYW5kIHdlJ2xsXG4gICAgICAgIC8vIGp1c3QgZ2V0IHNlcGFyYXRvciBhcyB0aGUgcm9vdCwgYW5kIGRyaXZlRnJvbVVOQyB3aWxsIHJldHVybiBcXFxuICAgICAgICAvLyBJbiB0aGF0IGNhc2UsIG1vdW50IFxcIG9uIHRoZSByb290IGZyb20gdGhlIGN3ZC5cbiAgICAgICAgcmV0dXJuIG5vZGVfcGF0aF8xLndpbjMyLnBhcnNlKGRpcikucm9vdC50b1VwcGVyQ2FzZSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBuZXdSb290KGZzKSB7XG4gICAgICAgIHJldHVybiBuZXcgUGF0aFdpbjMyKHRoaXMucm9vdFBhdGgsIElGRElSLCB1bmRlZmluZWQsIHRoaXMucm9vdHMsIHRoaXMubm9jYXNlLCB0aGlzLmNoaWxkcmVuQ2FjaGUoKSwgeyBmcyB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHByb3ZpZGVkIHBhdGggc3RyaW5nIGlzIGFuIGFic29sdXRlIHBhdGhcbiAgICAgKi9cbiAgICBpc0Fic29sdXRlKHApIHtcbiAgICAgICAgcmV0dXJuIChwLnN0YXJ0c1dpdGgoJy8nKSB8fCBwLnN0YXJ0c1dpdGgoJ1xcXFwnKSB8fCAvXlthLXpdOihcXC98XFxcXCkvaS50ZXN0KHApKTtcbiAgICB9XG59XG5leHBvcnRzLlBhdGhTY3VycnlXaW4zMiA9IFBhdGhTY3VycnlXaW4zMjtcbi8qKlxuICoge0BsaW5rIFBhdGhTY3VycnlCYXNlfSBpbXBsZW1lbnRhdGlvbiBmb3IgYWxsIHBvc2l4IHN5c3RlbXMgb3RoZXIgdGhhbiBEYXJ3aW4uXG4gKlxuICogRGVmYXVsdHMgdG8gY2FzZS1zZW5zaXRpdmUgbWF0Y2hpbmcsIHVzZXMgYCcvJ2AgdG8gZ2VuZXJhdGUgcGF0aCBzdHJpbmdzLlxuICpcbiAqIFVzZXMge0BsaW5rIFBhdGhQb3NpeH0gZm9yIFBhdGggb2JqZWN0cy5cbiAqL1xuY2xhc3MgUGF0aFNjdXJyeVBvc2l4IGV4dGVuZHMgUGF0aFNjdXJyeUJhc2Uge1xuICAgIC8qKlxuICAgICAqIHNlcGFyYXRvciBmb3IgZ2VuZXJhdGluZyBwYXRoIHN0cmluZ3NcbiAgICAgKi9cbiAgICBzZXAgPSAnLyc7XG4gICAgY29uc3RydWN0b3IoY3dkID0gcHJvY2Vzcy5jd2QoKSwgb3B0cyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHsgbm9jYXNlID0gZmFsc2UgfSA9IG9wdHM7XG4gICAgICAgIHN1cGVyKGN3ZCwgbm9kZV9wYXRoXzEucG9zaXgsICcvJywgeyAuLi5vcHRzLCBub2Nhc2UgfSk7XG4gICAgICAgIHRoaXMubm9jYXNlID0gbm9jYXNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwYXJzZVJvb3RQYXRoKF9kaXIpIHtcbiAgICAgICAgcmV0dXJuICcvJztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgbmV3Um9vdChmcykge1xuICAgICAgICByZXR1cm4gbmV3IFBhdGhQb3NpeCh0aGlzLnJvb3RQYXRoLCBJRkRJUiwgdW5kZWZpbmVkLCB0aGlzLnJvb3RzLCB0aGlzLm5vY2FzZSwgdGhpcy5jaGlsZHJlbkNhY2hlKCksIHsgZnMgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSBwcm92aWRlZCBwYXRoIHN0cmluZyBpcyBhbiBhYnNvbHV0ZSBwYXRoXG4gICAgICovXG4gICAgaXNBYnNvbHV0ZShwKSB7XG4gICAgICAgIHJldHVybiBwLnN0YXJ0c1dpdGgoJy8nKTtcbiAgICB9XG59XG5leHBvcnRzLlBhdGhTY3VycnlQb3NpeCA9IFBhdGhTY3VycnlQb3NpeDtcbi8qKlxuICoge0BsaW5rIFBhdGhTY3VycnlCYXNlfSBpbXBsZW1lbnRhdGlvbiBmb3IgRGFyd2luIChtYWNPUykgc3lzdGVtcy5cbiAqXG4gKiBEZWZhdWx0cyB0byBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoaW5nLCB1c2VzIGAnLydgIGZvciBnZW5lcmF0aW5nIHBhdGhcbiAqIHN0cmluZ3MuXG4gKlxuICogVXNlcyB7QGxpbmsgUGF0aFBvc2l4fSBmb3IgUGF0aCBvYmplY3RzLlxuICovXG5jbGFzcyBQYXRoU2N1cnJ5RGFyd2luIGV4dGVuZHMgUGF0aFNjdXJyeVBvc2l4IHtcbiAgICBjb25zdHJ1Y3Rvcihjd2QgPSBwcm9jZXNzLmN3ZCgpLCBvcHRzID0ge30pIHtcbiAgICAgICAgY29uc3QgeyBub2Nhc2UgPSB0cnVlIH0gPSBvcHRzO1xuICAgICAgICBzdXBlcihjd2QsIHsgLi4ub3B0cywgbm9jYXNlIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuUGF0aFNjdXJyeURhcndpbiA9IFBhdGhTY3VycnlEYXJ3aW47XG4vKipcbiAqIERlZmF1bHQge0BsaW5rIFBhdGhCYXNlfSBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIGN1cnJlbnQgcGxhdGZvcm0uXG4gKlxuICoge0BsaW5rIFBhdGhXaW4zMn0gb24gV2luZG93cyBzeXN0ZW1zLCB7QGxpbmsgUGF0aFBvc2l4fSBvbiBhbGwgb3RoZXJzLlxuICovXG5leHBvcnRzLlBhdGggPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInID8gUGF0aFdpbjMyIDogUGF0aFBvc2l4O1xuLyoqXG4gKiBEZWZhdWx0IHtAbGluayBQYXRoU2N1cnJ5QmFzZX0gaW1wbGVtZW50YXRpb24gZm9yIHRoZSBjdXJyZW50IHBsYXRmb3JtLlxuICpcbiAqIHtAbGluayBQYXRoU2N1cnJ5V2luMzJ9IG9uIFdpbmRvd3Mgc3lzdGVtcywge0BsaW5rIFBhdGhTY3VycnlEYXJ3aW59IG9uXG4gKiBEYXJ3aW4gKG1hY09TKSBzeXN0ZW1zLCB7QGxpbmsgUGF0aFNjdXJyeVBvc2l4fSBvbiBhbGwgb3RoZXJzLlxuICovXG5leHBvcnRzLlBhdGhTY3VycnkgPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInID8gUGF0aFNjdXJyeVdpbjMyXG4gICAgOiBwcm9jZXNzLnBsYXRmb3JtID09PSAnZGFyd2luJyA/IFBhdGhTY3VycnlEYXJ3aW5cbiAgICAgICAgOiBQYXRoU2N1cnJ5UG9zaXg7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gdGhpcyBpcyBqdXN0IGEgdmVyeSBsaWdodCB3cmFwcGVyIGFyb3VuZCAyIGFycmF5cyB3aXRoIGFuIG9mZnNldCBpbmRleFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5QYXR0ZXJuID0gdm9pZCAwO1xuY29uc3QgbWluaW1hdGNoXzEgPSByZXF1aXJlKFwibWluaW1hdGNoXCIpO1xuY29uc3QgaXNQYXR0ZXJuTGlzdCA9IChwbCkgPT4gcGwubGVuZ3RoID49IDE7XG5jb25zdCBpc0dsb2JMaXN0ID0gKGdsKSA9PiBnbC5sZW5ndGggPj0gMTtcbi8qKlxuICogQW4gaW1tdXRhYmxlLWlzaCB2aWV3IG9uIGFuIGFycmF5IG9mIGdsb2IgcGFydHMgYW5kIHRoZWlyIHBhcnNlZFxuICogcmVzdWx0c1xuICovXG5jbGFzcyBQYXR0ZXJuIHtcbiAgICAjcGF0dGVybkxpc3Q7XG4gICAgI2dsb2JMaXN0O1xuICAgICNpbmRleDtcbiAgICBsZW5ndGg7XG4gICAgI3BsYXRmb3JtO1xuICAgICNyZXN0O1xuICAgICNnbG9iU3RyaW5nO1xuICAgICNpc0RyaXZlO1xuICAgICNpc1VOQztcbiAgICAjaXNBYnNvbHV0ZTtcbiAgICAjZm9sbG93R2xvYnN0YXIgPSB0cnVlO1xuICAgIGNvbnN0cnVjdG9yKHBhdHRlcm5MaXN0LCBnbG9iTGlzdCwgaW5kZXgsIHBsYXRmb3JtKSB7XG4gICAgICAgIGlmICghaXNQYXR0ZXJuTGlzdChwYXR0ZXJuTGlzdCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2VtcHR5IHBhdHRlcm4gbGlzdCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNHbG9iTGlzdChnbG9iTGlzdCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2VtcHR5IGdsb2IgbGlzdCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChnbG9iTGlzdC5sZW5ndGggIT09IHBhdHRlcm5MaXN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbWlzbWF0Y2hlZCBwYXR0ZXJuIGxpc3QgYW5kIGdsb2IgbGlzdCBsZW5ndGhzJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sZW5ndGggPSBwYXR0ZXJuTGlzdC5sZW5ndGg7XG4gICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2luZGV4IG91dCBvZiByYW5nZScpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuI3BhdHRlcm5MaXN0ID0gcGF0dGVybkxpc3Q7XG4gICAgICAgIHRoaXMuI2dsb2JMaXN0ID0gZ2xvYkxpc3Q7XG4gICAgICAgIHRoaXMuI2luZGV4ID0gaW5kZXg7XG4gICAgICAgIHRoaXMuI3BsYXRmb3JtID0gcGxhdGZvcm07XG4gICAgICAgIC8vIG5vcm1hbGl6ZSByb290IGVudHJpZXMgb2YgYWJzb2x1dGUgcGF0dGVybnMgb24gaW5pdGlhbCBjcmVhdGlvbi5cbiAgICAgICAgaWYgKHRoaXMuI2luZGV4ID09PSAwKSB7XG4gICAgICAgICAgICAvLyBjOiA9PiBbJ2M6LyddXG4gICAgICAgICAgICAvLyBDOi8gPT4gWydDOi8nXVxuICAgICAgICAgICAgLy8gQzoveCA9PiBbJ0M6LycsICd4J11cbiAgICAgICAgICAgIC8vIC8vaG9zdC9zaGFyZSA9PiBbJy8vaG9zdC9zaGFyZS8nXVxuICAgICAgICAgICAgLy8gLy9ob3N0L3NoYXJlLyA9PiBbJy8vaG9zdC9zaGFyZS8nXVxuICAgICAgICAgICAgLy8gLy9ob3N0L3NoYXJlL3ggPT4gWycvL2hvc3Qvc2hhcmUvJywgJ3gnXVxuICAgICAgICAgICAgLy8gL2V0YyA9PiBbJy8nLCAnZXRjJ11cbiAgICAgICAgICAgIC8vIC8gPT4gWycvJ11cbiAgICAgICAgICAgIGlmICh0aGlzLmlzVU5DKCkpIHtcbiAgICAgICAgICAgICAgICAvLyAnJyAvICcnIC8gJ2hvc3QnIC8gJ3NoYXJlJ1xuICAgICAgICAgICAgICAgIGNvbnN0IFtwMCwgcDEsIHAyLCBwMywgLi4ucHJlc3RdID0gdGhpcy4jcGF0dGVybkxpc3Q7XG4gICAgICAgICAgICAgICAgY29uc3QgW2cwLCBnMSwgZzIsIGczLCAuLi5ncmVzdF0gPSB0aGlzLiNnbG9iTGlzdDtcbiAgICAgICAgICAgICAgICBpZiAocHJlc3RbMF0gPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGVuZHMgaW4gL1xuICAgICAgICAgICAgICAgICAgICBwcmVzdC5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICBncmVzdC5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBwID0gW3AwLCBwMSwgcDIsIHAzLCAnJ10uam9pbignLycpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGcgPSBbZzAsIGcxLCBnMiwgZzMsICcnXS5qb2luKCcvJyk7XG4gICAgICAgICAgICAgICAgdGhpcy4jcGF0dGVybkxpc3QgPSBbcCwgLi4ucHJlc3RdO1xuICAgICAgICAgICAgICAgIHRoaXMuI2dsb2JMaXN0ID0gW2csIC4uLmdyZXN0XTtcbiAgICAgICAgICAgICAgICB0aGlzLmxlbmd0aCA9IHRoaXMuI3BhdHRlcm5MaXN0Lmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuaXNEcml2ZSgpIHx8IHRoaXMuaXNBYnNvbHV0ZSgpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgW3AxLCAuLi5wcmVzdF0gPSB0aGlzLiNwYXR0ZXJuTGlzdDtcbiAgICAgICAgICAgICAgICBjb25zdCBbZzEsIC4uLmdyZXN0XSA9IHRoaXMuI2dsb2JMaXN0O1xuICAgICAgICAgICAgICAgIGlmIChwcmVzdFswXSA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZW5kcyBpbiAvXG4gICAgICAgICAgICAgICAgICAgIHByZXN0LnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgIGdyZXN0LnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHAgPSBwMSArICcvJztcbiAgICAgICAgICAgICAgICBjb25zdCBnID0gZzEgKyAnLyc7XG4gICAgICAgICAgICAgICAgdGhpcy4jcGF0dGVybkxpc3QgPSBbcCwgLi4ucHJlc3RdO1xuICAgICAgICAgICAgICAgIHRoaXMuI2dsb2JMaXN0ID0gW2csIC4uLmdyZXN0XTtcbiAgICAgICAgICAgICAgICB0aGlzLmxlbmd0aCA9IHRoaXMuI3BhdHRlcm5MaXN0Lmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgZmlyc3QgZW50cnkgaW4gdGhlIHBhcnNlZCBsaXN0IG9mIHBhdHRlcm5zXG4gICAgICovXG4gICAgcGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3BhdHRlcm5MaXN0W3RoaXMuI2luZGV4XTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogdHJ1ZSBvZiBpZiBwYXR0ZXJuKCkgcmV0dXJucyBhIHN0cmluZ1xuICAgICAqL1xuICAgIGlzU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHRoaXMuI3BhdHRlcm5MaXN0W3RoaXMuI2luZGV4XSA9PT0gJ3N0cmluZyc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHRydWUgb2YgaWYgcGF0dGVybigpIHJldHVybnMgR0xPQlNUQVJcbiAgICAgKi9cbiAgICBpc0dsb2JzdGFyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcGF0dGVybkxpc3RbdGhpcy4jaW5kZXhdID09PSBtaW5pbWF0Y2hfMS5HTE9CU1RBUjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogdHJ1ZSBpZiBwYXR0ZXJuKCkgcmV0dXJucyBhIHJlZ2V4cFxuICAgICAqL1xuICAgIGlzUmVnRXhwKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcGF0dGVybkxpc3RbdGhpcy4jaW5kZXhdIGluc3RhbmNlb2YgUmVnRXhwO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgLy1qb2luZWQgc2V0IG9mIGdsb2IgcGFydHMgdGhhdCBtYWtlIHVwIHRoaXMgcGF0dGVyblxuICAgICAqL1xuICAgIGdsb2JTdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy4jZ2xvYlN0cmluZyA9XG4gICAgICAgICAgICB0aGlzLiNnbG9iU3RyaW5nIHx8XG4gICAgICAgICAgICAgICAgKHRoaXMuI2luZGV4ID09PSAwID9cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0Fic29sdXRlKCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jZ2xvYkxpc3RbMF0gKyB0aGlzLiNnbG9iTGlzdC5zbGljZSgxKS5qb2luKCcvJylcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy4jZ2xvYkxpc3Quam9pbignLycpXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy4jZ2xvYkxpc3Quc2xpY2UodGhpcy4jaW5kZXgpLmpvaW4oJy8nKSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiB0cnVlIGlmIHRoZXJlIGFyZSBtb3JlIHBhdHRlcm4gcGFydHMgYWZ0ZXIgdGhpcyBvbmVcbiAgICAgKi9cbiAgICBoYXNNb3JlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sZW5ndGggPiB0aGlzLiNpbmRleCArIDE7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSByZXN0IG9mIHRoZSBwYXR0ZXJuIGFmdGVyIHRoaXMgcGFydCwgb3IgbnVsbCBpZiB0aGlzIGlzIHRoZSBlbmRcbiAgICAgKi9cbiAgICByZXN0KCkge1xuICAgICAgICBpZiAodGhpcy4jcmVzdCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuI3Jlc3Q7XG4gICAgICAgIGlmICghdGhpcy5oYXNNb3JlKCkpXG4gICAgICAgICAgICByZXR1cm4gKHRoaXMuI3Jlc3QgPSBudWxsKTtcbiAgICAgICAgdGhpcy4jcmVzdCA9IG5ldyBQYXR0ZXJuKHRoaXMuI3BhdHRlcm5MaXN0LCB0aGlzLiNnbG9iTGlzdCwgdGhpcy4jaW5kZXggKyAxLCB0aGlzLiNwbGF0Zm9ybSk7XG4gICAgICAgIHRoaXMuI3Jlc3QuI2lzQWJzb2x1dGUgPSB0aGlzLiNpc0Fic29sdXRlO1xuICAgICAgICB0aGlzLiNyZXN0LiNpc1VOQyA9IHRoaXMuI2lzVU5DO1xuICAgICAgICB0aGlzLiNyZXN0LiNpc0RyaXZlID0gdGhpcy4jaXNEcml2ZTtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3Jlc3Q7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHRydWUgaWYgdGhlIHBhdHRlcm4gcmVwcmVzZW50cyBhIC8vdW5jL3BhdGgvIG9uIHdpbmRvd3NcbiAgICAgKi9cbiAgICBpc1VOQygpIHtcbiAgICAgICAgY29uc3QgcGwgPSB0aGlzLiNwYXR0ZXJuTGlzdDtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2lzVU5DICE9PSB1bmRlZmluZWQgP1xuICAgICAgICAgICAgdGhpcy4jaXNVTkNcbiAgICAgICAgICAgIDogKHRoaXMuI2lzVU5DID1cbiAgICAgICAgICAgICAgICB0aGlzLiNwbGF0Zm9ybSA9PT0gJ3dpbjMyJyAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLiNpbmRleCA9PT0gMCAmJlxuICAgICAgICAgICAgICAgICAgICBwbFswXSA9PT0gJycgJiZcbiAgICAgICAgICAgICAgICAgICAgcGxbMV0gPT09ICcnICYmXG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBwbFsyXSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgICAgICAgICAgISFwbFsyXSAmJlxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgcGxbM10gPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAgICAgICAgICEhcGxbM10pO1xuICAgIH1cbiAgICAvLyBwYXR0ZXJuIGxpa2UgQzovLi4uXG4gICAgLy8gc3BsaXQgPSBbJ0M6JywgLi4uXVxuICAgIC8vIFhYWDogd291bGQgYmUgbmljZSB0byBoYW5kbGUgcGF0dGVybnMgbGlrZSBgYzoqYCB0byB0ZXN0IHRoZSBjd2RcbiAgICAvLyBpbiBjOiBmb3IgKiwgYnV0IEkgZG9uJ3Qga25vdyBvZiBhIHdheSB0byBldmVuIGZpZ3VyZSBvdXQgd2hhdCB0aGF0XG4gICAgLy8gY3dkIGlzIHdpdGhvdXQgYWN0dWFsbHkgY2hkaXInaW5nIGludG8gaXQ/XG4gICAgLyoqXG4gICAgICogVHJ1ZSBpZiB0aGUgcGF0dGVybiBzdGFydHMgd2l0aCBhIGRyaXZlIGxldHRlciBvbiBXaW5kb3dzXG4gICAgICovXG4gICAgaXNEcml2ZSgpIHtcbiAgICAgICAgY29uc3QgcGwgPSB0aGlzLiNwYXR0ZXJuTGlzdDtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2lzRHJpdmUgIT09IHVuZGVmaW5lZCA/XG4gICAgICAgICAgICB0aGlzLiNpc0RyaXZlXG4gICAgICAgICAgICA6ICh0aGlzLiNpc0RyaXZlID1cbiAgICAgICAgICAgICAgICB0aGlzLiNwbGF0Zm9ybSA9PT0gJ3dpbjMyJyAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLiNpbmRleCA9PT0gMCAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxlbmd0aCA+IDEgJiZcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHBsWzBdID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgICAgICAgICAvXlthLXpdOiQvaS50ZXN0KHBsWzBdKSk7XG4gICAgfVxuICAgIC8vIHBhdHRlcm4gPSAnLycgb3IgJy8uLi4nIG9yICcveC8uLi4nXG4gICAgLy8gc3BsaXQgPSBbJycsICcnXSBvciBbJycsIC4uLl0gb3IgWycnLCAneCcsIC4uLl1cbiAgICAvLyBEcml2ZSBhbmQgVU5DIGJvdGggY29uc2lkZXJlZCBhYnNvbHV0ZSBvbiB3aW5kb3dzXG4gICAgLyoqXG4gICAgICogVHJ1ZSBpZiB0aGUgcGF0dGVybiBpcyByb290ZWQgb24gYW4gYWJzb2x1dGUgcGF0aFxuICAgICAqL1xuICAgIGlzQWJzb2x1dGUoKSB7XG4gICAgICAgIGNvbnN0IHBsID0gdGhpcy4jcGF0dGVybkxpc3Q7XG4gICAgICAgIHJldHVybiB0aGlzLiNpc0Fic29sdXRlICE9PSB1bmRlZmluZWQgP1xuICAgICAgICAgICAgdGhpcy4jaXNBYnNvbHV0ZVxuICAgICAgICAgICAgOiAodGhpcy4jaXNBYnNvbHV0ZSA9XG4gICAgICAgICAgICAgICAgKHBsWzBdID09PSAnJyAmJiBwbC5sZW5ndGggPiAxKSB8fFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzRHJpdmUoKSB8fFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzVU5DKCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBjb25zdW1lIHRoZSByb290IG9mIHRoZSBwYXR0ZXJuLCBhbmQgcmV0dXJuIGl0XG4gICAgICovXG4gICAgcm9vdCgpIHtcbiAgICAgICAgY29uc3QgcCA9IHRoaXMuI3BhdHRlcm5MaXN0WzBdO1xuICAgICAgICByZXR1cm4gKHR5cGVvZiBwID09PSAnc3RyaW5nJyAmJiB0aGlzLmlzQWJzb2x1dGUoKSAmJiB0aGlzLiNpbmRleCA9PT0gMCkgP1xuICAgICAgICAgICAgcFxuICAgICAgICAgICAgOiAnJztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2hlY2sgdG8gc2VlIGlmIHRoZSBjdXJyZW50IGdsb2JzdGFyIHBhdHRlcm4gaXMgYWxsb3dlZCB0byBmb2xsb3dcbiAgICAgKiBhIHN5bWJvbGljIGxpbmsuXG4gICAgICovXG4gICAgY2hlY2tGb2xsb3dHbG9ic3RhcigpIHtcbiAgICAgICAgcmV0dXJuICEodGhpcy4jaW5kZXggPT09IDAgfHxcbiAgICAgICAgICAgICF0aGlzLmlzR2xvYnN0YXIoKSB8fFxuICAgICAgICAgICAgIXRoaXMuI2ZvbGxvd0dsb2JzdGFyKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTWFyayB0aGF0IHRoZSBjdXJyZW50IGdsb2JzdGFyIHBhdHRlcm4gaXMgZm9sbG93aW5nIGEgc3ltYm9saWMgbGlua1xuICAgICAqL1xuICAgIG1hcmtGb2xsb3dHbG9ic3RhcigpIHtcbiAgICAgICAgaWYgKHRoaXMuI2luZGV4ID09PSAwIHx8ICF0aGlzLmlzR2xvYnN0YXIoKSB8fCAhdGhpcy4jZm9sbG93R2xvYnN0YXIpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHRoaXMuI2ZvbGxvd0dsb2JzdGFyID0gZmFsc2U7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cbmV4cG9ydHMuUGF0dGVybiA9IFBhdHRlcm47XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wYXR0ZXJuLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBnaXZlIGl0IGEgcGF0dGVybiwgYW5kIGl0J2xsIGJlIGFibGUgdG8gdGVsbCB5b3UgaWZcbi8vIGEgZ2l2ZW4gcGF0aCBzaG91bGQgYmUgaWdub3JlZC5cbi8vIElnbm9yaW5nIGEgcGF0aCBpZ25vcmVzIGl0cyBjaGlsZHJlbiBpZiB0aGUgcGF0dGVybiBlbmRzIGluIC8qKlxuLy8gSWdub3JlcyBhcmUgYWx3YXlzIHBhcnNlZCBpbiBkb3Q6dHJ1ZSBtb2RlXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLklnbm9yZSA9IHZvaWQgMDtcbmNvbnN0IG1pbmltYXRjaF8xID0gcmVxdWlyZShcIm1pbmltYXRjaFwiKTtcbmNvbnN0IHBhdHRlcm5fanNfMSA9IHJlcXVpcmUoXCIuL3BhdHRlcm4uanNcIik7XG5jb25zdCBkZWZhdWx0UGxhdGZvcm0gPSAodHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmXG4gICAgcHJvY2VzcyAmJlxuICAgIHR5cGVvZiBwcm9jZXNzLnBsYXRmb3JtID09PSAnc3RyaW5nJykgP1xuICAgIHByb2Nlc3MucGxhdGZvcm1cbiAgICA6ICdsaW51eCc7XG4vKipcbiAqIENsYXNzIHVzZWQgdG8gcHJvY2VzcyBpZ25vcmVkIHBhdHRlcm5zXG4gKi9cbmNsYXNzIElnbm9yZSB7XG4gICAgcmVsYXRpdmU7XG4gICAgcmVsYXRpdmVDaGlsZHJlbjtcbiAgICBhYnNvbHV0ZTtcbiAgICBhYnNvbHV0ZUNoaWxkcmVuO1xuICAgIHBsYXRmb3JtO1xuICAgIG1tb3B0cztcbiAgICBjb25zdHJ1Y3RvcihpZ25vcmVkLCB7IG5vYnJhY2UsIG5vY2FzZSwgbm9leHQsIG5vZ2xvYnN0YXIsIHBsYXRmb3JtID0gZGVmYXVsdFBsYXRmb3JtLCB9KSB7XG4gICAgICAgIHRoaXMucmVsYXRpdmUgPSBbXTtcbiAgICAgICAgdGhpcy5hYnNvbHV0ZSA9IFtdO1xuICAgICAgICB0aGlzLnJlbGF0aXZlQ2hpbGRyZW4gPSBbXTtcbiAgICAgICAgdGhpcy5hYnNvbHV0ZUNoaWxkcmVuID0gW107XG4gICAgICAgIHRoaXMucGxhdGZvcm0gPSBwbGF0Zm9ybTtcbiAgICAgICAgdGhpcy5tbW9wdHMgPSB7XG4gICAgICAgICAgICBkb3Q6IHRydWUsXG4gICAgICAgICAgICBub2JyYWNlLFxuICAgICAgICAgICAgbm9jYXNlLFxuICAgICAgICAgICAgbm9leHQsXG4gICAgICAgICAgICBub2dsb2JzdGFyLFxuICAgICAgICAgICAgb3B0aW1pemF0aW9uTGV2ZWw6IDIsXG4gICAgICAgICAgICBwbGF0Zm9ybSxcbiAgICAgICAgICAgIG5vY29tbWVudDogdHJ1ZSxcbiAgICAgICAgICAgIG5vbmVnYXRlOiB0cnVlLFxuICAgICAgICB9O1xuICAgICAgICBmb3IgKGNvbnN0IGlnbiBvZiBpZ25vcmVkKVxuICAgICAgICAgICAgdGhpcy5hZGQoaWduKTtcbiAgICB9XG4gICAgYWRkKGlnbikge1xuICAgICAgICAvLyB0aGlzIGlzIGEgbGl0dGxlIHdlaXJkLCBidXQgaXQgZ2l2ZXMgdXMgYSBjbGVhbiBzZXQgb2Ygb3B0aW1pemVkXG4gICAgICAgIC8vIG1pbmltYXRjaCBtYXRjaGVycywgd2l0aG91dCBnZXR0aW5nIHRyaXBwZWQgdXAgaWYgb25lIG9mIHRoZW1cbiAgICAgICAgLy8gZW5kcyBpbiAvKiogaW5zaWRlIGEgYnJhY2Ugc2VjdGlvbiwgYW5kIGl0J3Mgb25seSBpbmVmZmljaWVudCBhdFxuICAgICAgICAvLyB0aGUgc3RhcnQgb2YgdGhlIHdhbGssIG5vdCBhbG9uZyBpdC5cbiAgICAgICAgLy8gSXQnZCBiZSBuaWNlIGlmIHRoZSBQYXR0ZXJuIGNsYXNzIGp1c3QgaGFkIGEgLnRlc3QoKSBtZXRob2QsIGJ1dFxuICAgICAgICAvLyBoYW5kbGluZyBnbG9ic3RhcnMgaXMgYSBiaXQgb2YgYSBwaXRhLCBhbmQgdGhhdCBjb2RlIGFscmVhZHkgbGl2ZXNcbiAgICAgICAgLy8gaW4gbWluaW1hdGNoIGFueXdheS5cbiAgICAgICAgLy8gQW5vdGhlciB3YXkgd291bGQgYmUgaWYgbWF5YmUgTWluaW1hdGNoIGNvdWxkIHRha2UgaXRzIHNldC9nbG9iUGFydHNcbiAgICAgICAgLy8gYXMgYW4gb3B0aW9uLCBhbmQgdGhlbiB3ZSBjb3VsZCBhdCBsZWFzdCBqdXN0IHVzZSBQYXR0ZXJuIHRvIHRlc3RcbiAgICAgICAgLy8gZm9yIGFic29sdXRlLW5lc3MuXG4gICAgICAgIC8vIFlldCBhbm90aGVyIHdheSwgTWluaW1hdGNoIGNvdWxkIHRha2UgYW4gYXJyYXkgb2YgZ2xvYiBzdHJpbmdzLCBhbmRcbiAgICAgICAgLy8gYSBjd2Qgb3B0aW9uLCBhbmQgZG8gdGhlIHJpZ2h0IHRoaW5nLlxuICAgICAgICBjb25zdCBtbSA9IG5ldyBtaW5pbWF0Y2hfMS5NaW5pbWF0Y2goaWduLCB0aGlzLm1tb3B0cyk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW0uc2V0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBtbS5zZXRbaV07XG4gICAgICAgICAgICBjb25zdCBnbG9iUGFydHMgPSBtbS5nbG9iUGFydHNbaV07XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgICAgIGlmICghcGFyc2VkIHx8ICFnbG9iUGFydHMpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcGF0dGVybiBvYmplY3QnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHN0cmlwIG9mZiBsZWFkaW5nIC4vIHBvcnRpb25zXG4gICAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vaXNhYWNzL25vZGUtZ2xvYi9pc3N1ZXMvNTcwXG4gICAgICAgICAgICB3aGlsZSAocGFyc2VkWzBdID09PSAnLicgJiYgZ2xvYlBhcnRzWzBdID09PSAnLicpIHtcbiAgICAgICAgICAgICAgICBwYXJzZWQuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICBnbG9iUGFydHMuc2hpZnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICBjb25zdCBwID0gbmV3IHBhdHRlcm5fanNfMS5QYXR0ZXJuKHBhcnNlZCwgZ2xvYlBhcnRzLCAwLCB0aGlzLnBsYXRmb3JtKTtcbiAgICAgICAgICAgIGNvbnN0IG0gPSBuZXcgbWluaW1hdGNoXzEuTWluaW1hdGNoKHAuZ2xvYlN0cmluZygpLCB0aGlzLm1tb3B0cyk7XG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGdsb2JQYXJ0c1tnbG9iUGFydHMubGVuZ3RoIC0gMV0gPT09ICcqKic7XG4gICAgICAgICAgICBjb25zdCBhYnNvbHV0ZSA9IHAuaXNBYnNvbHV0ZSgpO1xuICAgICAgICAgICAgaWYgKGFic29sdXRlKVxuICAgICAgICAgICAgICAgIHRoaXMuYWJzb2x1dGUucHVzaChtKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aGlzLnJlbGF0aXZlLnB1c2gobSk7XG4gICAgICAgICAgICBpZiAoY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBpZiAoYWJzb2x1dGUpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWJzb2x1dGVDaGlsZHJlbi5wdXNoKG0pO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWxhdGl2ZUNoaWxkcmVuLnB1c2gobSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWdub3JlZChwKSB7XG4gICAgICAgIGNvbnN0IGZ1bGxwYXRoID0gcC5mdWxscGF0aCgpO1xuICAgICAgICBjb25zdCBmdWxscGF0aHMgPSBgJHtmdWxscGF0aH0vYDtcbiAgICAgICAgY29uc3QgcmVsYXRpdmUgPSBwLnJlbGF0aXZlKCkgfHwgJy4nO1xuICAgICAgICBjb25zdCByZWxhdGl2ZXMgPSBgJHtyZWxhdGl2ZX0vYDtcbiAgICAgICAgZm9yIChjb25zdCBtIG9mIHRoaXMucmVsYXRpdmUpIHtcbiAgICAgICAgICAgIGlmIChtLm1hdGNoKHJlbGF0aXZlKSB8fCBtLm1hdGNoKHJlbGF0aXZlcykpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBtIG9mIHRoaXMuYWJzb2x1dGUpIHtcbiAgICAgICAgICAgIGlmIChtLm1hdGNoKGZ1bGxwYXRoKSB8fCBtLm1hdGNoKGZ1bGxwYXRocykpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjaGlsZHJlbklnbm9yZWQocCkge1xuICAgICAgICBjb25zdCBmdWxscGF0aCA9IHAuZnVsbHBhdGgoKSArICcvJztcbiAgICAgICAgY29uc3QgcmVsYXRpdmUgPSAocC5yZWxhdGl2ZSgpIHx8ICcuJykgKyAnLyc7XG4gICAgICAgIGZvciAoY29uc3QgbSBvZiB0aGlzLnJlbGF0aXZlQ2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGlmIChtLm1hdGNoKHJlbGF0aXZlKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IG0gb2YgdGhpcy5hYnNvbHV0ZUNoaWxkcmVuKSB7XG4gICAgICAgICAgICBpZiAobS5tYXRjaChmdWxscGF0aCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbmV4cG9ydHMuSWdub3JlID0gSWdub3JlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aWdub3JlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBzeW5jaHJvbm91cyB1dGlsaXR5IGZvciBmaWx0ZXJpbmcgZW50cmllcyBhbmQgY2FsY3VsYXRpbmcgc3Vid2Fsa3Ncbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUHJvY2Vzc29yID0gZXhwb3J0cy5TdWJXYWxrcyA9IGV4cG9ydHMuTWF0Y2hSZWNvcmQgPSBleHBvcnRzLkhhc1dhbGtlZENhY2hlID0gdm9pZCAwO1xuY29uc3QgbWluaW1hdGNoXzEgPSByZXF1aXJlKFwibWluaW1hdGNoXCIpO1xuLyoqXG4gKiBBIGNhY2hlIG9mIHdoaWNoIHBhdHRlcm5zIGhhdmUgYmVlbiBwcm9jZXNzZWQgZm9yIGEgZ2l2ZW4gUGF0aFxuICovXG5jbGFzcyBIYXNXYWxrZWRDYWNoZSB7XG4gICAgc3RvcmU7XG4gICAgY29uc3RydWN0b3Ioc3RvcmUgPSBuZXcgTWFwKCkpIHtcbiAgICAgICAgdGhpcy5zdG9yZSA9IHN0b3JlO1xuICAgIH1cbiAgICBjb3B5KCkge1xuICAgICAgICByZXR1cm4gbmV3IEhhc1dhbGtlZENhY2hlKG5ldyBNYXAodGhpcy5zdG9yZSkpO1xuICAgIH1cbiAgICBoYXNXYWxrZWQodGFyZ2V0LCBwYXR0ZXJuKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0b3JlLmdldCh0YXJnZXQuZnVsbHBhdGgoKSk/LmhhcyhwYXR0ZXJuLmdsb2JTdHJpbmcoKSk7XG4gICAgfVxuICAgIHN0b3JlV2Fsa2VkKHRhcmdldCwgcGF0dGVybikge1xuICAgICAgICBjb25zdCBmdWxscGF0aCA9IHRhcmdldC5mdWxscGF0aCgpO1xuICAgICAgICBjb25zdCBjYWNoZWQgPSB0aGlzLnN0b3JlLmdldChmdWxscGF0aCk7XG4gICAgICAgIGlmIChjYWNoZWQpXG4gICAgICAgICAgICBjYWNoZWQuYWRkKHBhdHRlcm4uZ2xvYlN0cmluZygpKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5zdG9yZS5zZXQoZnVsbHBhdGgsIG5ldyBTZXQoW3BhdHRlcm4uZ2xvYlN0cmluZygpXSkpO1xuICAgIH1cbn1cbmV4cG9ydHMuSGFzV2Fsa2VkQ2FjaGUgPSBIYXNXYWxrZWRDYWNoZTtcbi8qKlxuICogQSByZWNvcmQgb2Ygd2hpY2ggcGF0aHMgaGF2ZSBiZWVuIG1hdGNoZWQgaW4gYSBnaXZlbiB3YWxrIHN0ZXAsXG4gKiBhbmQgd2hldGhlciB0aGV5IG9ubHkgYXJlIGNvbnNpZGVyZWQgYSBtYXRjaCBpZiB0aGV5IGFyZSBhIGRpcmVjdG9yeSxcbiAqIGFuZCB3aGV0aGVyIHRoZWlyIGFic29sdXRlIG9yIHJlbGF0aXZlIHBhdGggc2hvdWxkIGJlIHJldHVybmVkLlxuICovXG5jbGFzcyBNYXRjaFJlY29yZCB7XG4gICAgc3RvcmUgPSBuZXcgTWFwKCk7XG4gICAgYWRkKHRhcmdldCwgYWJzb2x1dGUsIGlmRGlyKSB7XG4gICAgICAgIGNvbnN0IG4gPSAoYWJzb2x1dGUgPyAyIDogMCkgfCAoaWZEaXIgPyAxIDogMCk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLnN0b3JlLmdldCh0YXJnZXQpO1xuICAgICAgICB0aGlzLnN0b3JlLnNldCh0YXJnZXQsIGN1cnJlbnQgPT09IHVuZGVmaW5lZCA/IG4gOiBuICYgY3VycmVudCk7XG4gICAgfVxuICAgIC8vIG1hdGNoLCBhYnNvbHV0ZSwgaWZkaXJcbiAgICBlbnRyaWVzKCkge1xuICAgICAgICByZXR1cm4gWy4uLnRoaXMuc3RvcmUuZW50cmllcygpXS5tYXAoKFtwYXRoLCBuXSkgPT4gW1xuICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgICEhKG4gJiAyKSxcbiAgICAgICAgICAgICEhKG4gJiAxKSxcbiAgICAgICAgXSk7XG4gICAgfVxufVxuZXhwb3J0cy5NYXRjaFJlY29yZCA9IE1hdGNoUmVjb3JkO1xuLyoqXG4gKiBBIGNvbGxlY3Rpb24gb2YgcGF0dGVybnMgdGhhdCBtdXN0IGJlIHByb2Nlc3NlZCBpbiBhIHN1YnNlcXVlbnQgc3RlcFxuICogZm9yIGEgZ2l2ZW4gcGF0aC5cbiAqL1xuY2xhc3MgU3ViV2Fsa3Mge1xuICAgIHN0b3JlID0gbmV3IE1hcCgpO1xuICAgIGFkZCh0YXJnZXQsIHBhdHRlcm4pIHtcbiAgICAgICAgaWYgKCF0YXJnZXQuY2FuUmVhZGRpcigpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3VicyA9IHRoaXMuc3RvcmUuZ2V0KHRhcmdldCk7XG4gICAgICAgIGlmIChzdWJzKSB7XG4gICAgICAgICAgICBpZiAoIXN1YnMuZmluZChwID0+IHAuZ2xvYlN0cmluZygpID09PSBwYXR0ZXJuLmdsb2JTdHJpbmcoKSkpIHtcbiAgICAgICAgICAgICAgICBzdWJzLnB1c2gocGF0dGVybik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5zdG9yZS5zZXQodGFyZ2V0LCBbcGF0dGVybl0pO1xuICAgIH1cbiAgICBnZXQodGFyZ2V0KSB7XG4gICAgICAgIGNvbnN0IHN1YnMgPSB0aGlzLnN0b3JlLmdldCh0YXJnZXQpO1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgaWYgKCFzdWJzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2F0dGVtcHRpbmcgdG8gd2FsayB1bmtub3duIHBhdGgnKTtcbiAgICAgICAgfVxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICByZXR1cm4gc3VicztcbiAgICB9XG4gICAgZW50cmllcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMua2V5cygpLm1hcChrID0+IFtrLCB0aGlzLnN0b3JlLmdldChrKV0pO1xuICAgIH1cbiAgICBrZXlzKCkge1xuICAgICAgICByZXR1cm4gWy4uLnRoaXMuc3RvcmUua2V5cygpXS5maWx0ZXIodCA9PiB0LmNhblJlYWRkaXIoKSk7XG4gICAgfVxufVxuZXhwb3J0cy5TdWJXYWxrcyA9IFN1YldhbGtzO1xuLyoqXG4gKiBUaGUgY2xhc3MgdGhhdCBwcm9jZXNzZXMgcGF0dGVybnMgZm9yIGEgZ2l2ZW4gcGF0aC5cbiAqXG4gKiBIYW5kbGVzIGNoaWxkIGVudHJ5IGZpbHRlcmluZywgYW5kIGRldGVybWluaW5nIHdoZXRoZXIgYSBwYXRoJ3NcbiAqIGRpcmVjdG9yeSBjb250ZW50cyBtdXN0IGJlIHJlYWQuXG4gKi9cbmNsYXNzIFByb2Nlc3NvciB7XG4gICAgaGFzV2Fsa2VkQ2FjaGU7XG4gICAgbWF0Y2hlcyA9IG5ldyBNYXRjaFJlY29yZCgpO1xuICAgIHN1YndhbGtzID0gbmV3IFN1YldhbGtzKCk7XG4gICAgcGF0dGVybnM7XG4gICAgZm9sbG93O1xuICAgIGRvdDtcbiAgICBvcHRzO1xuICAgIGNvbnN0cnVjdG9yKG9wdHMsIGhhc1dhbGtlZENhY2hlKSB7XG4gICAgICAgIHRoaXMub3B0cyA9IG9wdHM7XG4gICAgICAgIHRoaXMuZm9sbG93ID0gISFvcHRzLmZvbGxvdztcbiAgICAgICAgdGhpcy5kb3QgPSAhIW9wdHMuZG90O1xuICAgICAgICB0aGlzLmhhc1dhbGtlZENhY2hlID1cbiAgICAgICAgICAgIGhhc1dhbGtlZENhY2hlID8gaGFzV2Fsa2VkQ2FjaGUuY29weSgpIDogbmV3IEhhc1dhbGtlZENhY2hlKCk7XG4gICAgfVxuICAgIHByb2Nlc3NQYXR0ZXJucyh0YXJnZXQsIHBhdHRlcm5zKSB7XG4gICAgICAgIHRoaXMucGF0dGVybnMgPSBwYXR0ZXJucztcbiAgICAgICAgY29uc3QgcHJvY2Vzc2luZ1NldCA9IHBhdHRlcm5zLm1hcChwID0+IFt0YXJnZXQsIHBdKTtcbiAgICAgICAgLy8gbWFwIG9mIHBhdGhzIHRvIHRoZSBtYWdpYy1zdGFydGluZyBzdWJ3YWxrcyB0aGV5IG5lZWQgdG8gd2Fsa1xuICAgICAgICAvLyBmaXJzdCBpdGVtIGluIHBhdHRlcm5zIGlzIHRoZSBmaWx0ZXJcbiAgICAgICAgZm9yIChsZXQgW3QsIHBhdHRlcm5dIG9mIHByb2Nlc3NpbmdTZXQpIHtcbiAgICAgICAgICAgIHRoaXMuaGFzV2Fsa2VkQ2FjaGUuc3RvcmVXYWxrZWQodCwgcGF0dGVybik7XG4gICAgICAgICAgICBjb25zdCByb290ID0gcGF0dGVybi5yb290KCk7XG4gICAgICAgICAgICBjb25zdCBhYnNvbHV0ZSA9IHBhdHRlcm4uaXNBYnNvbHV0ZSgpICYmIHRoaXMub3B0cy5hYnNvbHV0ZSAhPT0gZmFsc2U7XG4gICAgICAgICAgICAvLyBzdGFydCBhYnNvbHV0ZSBwYXR0ZXJucyBhdCByb290XG4gICAgICAgICAgICBpZiAocm9vdCkge1xuICAgICAgICAgICAgICAgIHQgPSB0LnJlc29sdmUocm9vdCA9PT0gJy8nICYmIHRoaXMub3B0cy5yb290ICE9PSB1bmRlZmluZWQgP1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdHMucm9vdFxuICAgICAgICAgICAgICAgICAgICA6IHJvb3QpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3QgPSBwYXR0ZXJuLnJlc3QoKTtcbiAgICAgICAgICAgICAgICBpZiAoIXJlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRjaGVzLmFkZCh0LCB0cnVlLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcGF0dGVybiA9IHJlc3Q7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHQuaXNFTk9FTlQoKSlcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGxldCBwO1xuICAgICAgICAgICAgbGV0IHJlc3Q7XG4gICAgICAgICAgICBsZXQgY2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICAgICAgd2hpbGUgKHR5cGVvZiAocCA9IHBhdHRlcm4ucGF0dGVybigpKSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgICAgICAocmVzdCA9IHBhdHRlcm4ucmVzdCgpKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGMgPSB0LnJlc29sdmUocCk7XG4gICAgICAgICAgICAgICAgdCA9IGM7XG4gICAgICAgICAgICAgICAgcGF0dGVybiA9IHJlc3Q7XG4gICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwID0gcGF0dGVybi5wYXR0ZXJuKCk7XG4gICAgICAgICAgICByZXN0ID0gcGF0dGVybi5yZXN0KCk7XG4gICAgICAgICAgICBpZiAoY2hhbmdlZCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmhhc1dhbGtlZENhY2hlLmhhc1dhbGtlZCh0LCBwYXR0ZXJuKSlcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgdGhpcy5oYXNXYWxrZWRDYWNoZS5zdG9yZVdhbGtlZCh0LCBwYXR0ZXJuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIG5vdyB3ZSBoYXZlIGVpdGhlciBhIGZpbmFsIHN0cmluZyBmb3IgYSBrbm93biBlbnRyeSxcbiAgICAgICAgICAgIC8vIG1vcmUgc3RyaW5ncyBmb3IgYW4gdW5rbm93biBlbnRyeSxcbiAgICAgICAgICAgIC8vIG9yIGEgcGF0dGVybiBzdGFydGluZyB3aXRoIG1hZ2ljLCBtb3VudGVkIG9uIHQuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHAgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgLy8gbXVzdCBub3QgYmUgZmluYWwgZW50cnksIG90aGVyd2lzZSB3ZSB3b3VsZCBoYXZlXG4gICAgICAgICAgICAgICAgLy8gY29uY2F0ZW5hdGVkIGl0IGVhcmxpZXIuXG4gICAgICAgICAgICAgICAgY29uc3QgaWZEaXIgPSBwID09PSAnLi4nIHx8IHAgPT09ICcnIHx8IHAgPT09ICcuJztcbiAgICAgICAgICAgICAgICB0aGlzLm1hdGNoZXMuYWRkKHQucmVzb2x2ZShwKSwgYWJzb2x1dGUsIGlmRGlyKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHAgPT09IG1pbmltYXRjaF8xLkdMT0JTVEFSKSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgbm8gcmVzdCwgbWF0Y2ggYW5kIHN1YndhbGsgcGF0dGVyblxuICAgICAgICAgICAgICAgIC8vIGlmIHJlc3QsIHByb2Nlc3MgcmVzdCBhbmQgc3Vid2FsayBwYXR0ZXJuXG4gICAgICAgICAgICAgICAgLy8gaWYgaXQncyBhIHN5bWxpbmssIGJ1dCB3ZSBkaWRuJ3QgZ2V0IGhlcmUgYnkgd2F5IG9mIGFcbiAgICAgICAgICAgICAgICAvLyBnbG9ic3RhciBtYXRjaCAobWVhbmluZyBpdCdzIHRoZSBmaXJzdCB0aW1lIFRISVMgZ2xvYnN0YXJcbiAgICAgICAgICAgICAgICAvLyBoYXMgdHJhdmVyc2VkIGEgc3ltbGluayksIHRoZW4gd2UgZm9sbG93IGl0LiBPdGhlcndpc2UsIHN0b3AuXG4gICAgICAgICAgICAgICAgaWYgKCF0LmlzU3ltYm9saWNMaW5rKCkgfHxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2xsb3cgfHxcbiAgICAgICAgICAgICAgICAgICAgcGF0dGVybi5jaGVja0ZvbGxvd0dsb2JzdGFyKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJ3YWxrcy5hZGQodCwgcGF0dGVybik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHJwID0gcmVzdD8ucGF0dGVybigpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJyZXN0ID0gcmVzdD8ucmVzdCgpO1xuICAgICAgICAgICAgICAgIGlmICghcmVzdCB8fCAoKHJwID09PSAnJyB8fCBycCA9PT0gJy4nKSAmJiAhcnJlc3QpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIG9ubHkgSEFTIHRvIGJlIGEgZGlyIGlmIGl0IGVuZHMgaW4gKiovIG9yICoqLy5cbiAgICAgICAgICAgICAgICAgICAgLy8gYnV0IGVuZGluZyBpbiAqKiB3aWxsIG1hdGNoIGZpbGVzIGFzIHdlbGwuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2hlcy5hZGQodCwgYWJzb2x1dGUsIHJwID09PSAnJyB8fCBycCA9PT0gJy4nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChycCA9PT0gJy4uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyB3b3VsZCBtZWFuIHlvdSdyZSBtYXRjaGluZyAqKi8uLiBhdCB0aGUgZnMgcm9vdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCBubyB0aGFua3MsIEknbSBub3QgZ29ubmEgdGVzdCB0aGF0IHNwZWNpZmljIGNhc2UuXG4gICAgICAgICAgICAgICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRwID0gdC5wYXJlbnQgfHwgdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJyZXN0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2hlcy5hZGQodHAsIGFic29sdXRlLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCF0aGlzLmhhc1dhbGtlZENhY2hlLmhhc1dhbGtlZCh0cCwgcnJlc3QpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJ3YWxrcy5hZGQodHAsIHJyZXN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHAgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN1YndhbGtzLmFkZCh0LCBwYXR0ZXJuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgc3Vid2Fsa1RhcmdldHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN1YndhbGtzLmtleXMoKTtcbiAgICB9XG4gICAgY2hpbGQoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvY2Vzc29yKHRoaXMub3B0cywgdGhpcy5oYXNXYWxrZWRDYWNoZSk7XG4gICAgfVxuICAgIC8vIHJldHVybiBhIG5ldyBQcm9jZXNzb3IgY29udGFpbmluZyB0aGUgc3Vid2Fsa3MgZm9yIGVhY2hcbiAgICAvLyBjaGlsZCBlbnRyeSwgYW5kIGEgc2V0IG9mIG1hdGNoZXMsIGFuZFxuICAgIC8vIGEgaGFzV2Fsa2VkQ2FjaGUgdGhhdCdzIGEgY29weSBvZiB0aGlzIG9uZVxuICAgIC8vIHRoZW4gd2UncmUgZ29pbmcgdG8gY2FsbFxuICAgIGZpbHRlckVudHJpZXMocGFyZW50LCBlbnRyaWVzKSB7XG4gICAgICAgIGNvbnN0IHBhdHRlcm5zID0gdGhpcy5zdWJ3YWxrcy5nZXQocGFyZW50KTtcbiAgICAgICAgLy8gcHV0IG1hdGNoZXMgYW5kIGVudHJ5IHdhbGtzIGludG8gdGhlIHJlc3VsdHMgcHJvY2Vzc29yXG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSB0aGlzLmNoaWxkKCk7XG4gICAgICAgIGZvciAoY29uc3QgZSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgcGF0dGVybnMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhYnNvbHV0ZSA9IHBhdHRlcm4uaXNBYnNvbHV0ZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHAgPSBwYXR0ZXJuLnBhdHRlcm4oKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN0ID0gcGF0dGVybi5yZXN0KCk7XG4gICAgICAgICAgICAgICAgaWYgKHAgPT09IG1pbmltYXRjaF8xLkdMT0JTVEFSKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMudGVzdEdsb2JzdGFyKGUsIHBhdHRlcm4sIHJlc3QsIGFic29sdXRlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAocCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnRlc3RSZWdFeHAoZSwgcCwgcmVzdCwgYWJzb2x1dGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy50ZXN0U3RyaW5nKGUsIHAsIHJlc3QsIGFic29sdXRlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuICAgIHRlc3RHbG9ic3RhcihlLCBwYXR0ZXJuLCByZXN0LCBhYnNvbHV0ZSkge1xuICAgICAgICBpZiAodGhpcy5kb3QgfHwgIWUubmFtZS5zdGFydHNXaXRoKCcuJykpIHtcbiAgICAgICAgICAgIGlmICghcGF0dGVybi5oYXNNb3JlKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1hdGNoZXMuYWRkKGUsIGFic29sdXRlLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5jYW5SZWFkZGlyKCkpIHtcbiAgICAgICAgICAgICAgICAvLyBpZiB3ZSdyZSBpbiBmb2xsb3cgbW9kZSBvciBpdCdzIG5vdCBhIHN5bWxpbmssIGp1c3Qga2VlcFxuICAgICAgICAgICAgICAgIC8vIHRlc3RpbmcgdGhlIHNhbWUgcGF0dGVybi4gSWYgdGhlcmUncyBtb3JlIGFmdGVyIHRoZSBnbG9ic3RhcixcbiAgICAgICAgICAgICAgICAvLyB0aGVuIHRoaXMgc3ltbGluayBjb25zdW1lcyB0aGUgZ2xvYnN0YXIuIElmIG5vdCwgdGhlbiB3ZSBjYW5cbiAgICAgICAgICAgICAgICAvLyBmb2xsb3cgYXQgbW9zdCBPTkUgc3ltbGluayBhbG9uZyB0aGUgd2F5LCBzbyB3ZSBtYXJrIGl0LCB3aGljaFxuICAgICAgICAgICAgICAgIC8vIGFsc28gY2hlY2tzIHRvIGVuc3VyZSB0aGF0IGl0IHdhc24ndCBhbHJlYWR5IG1hcmtlZC5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5mb2xsb3cgfHwgIWUuaXNTeW1ib2xpY0xpbmsoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN1YndhbGtzLmFkZChlLCBwYXR0ZXJuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZS5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN0ICYmIHBhdHRlcm4uY2hlY2tGb2xsb3dHbG9ic3RhcigpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1YndhbGtzLmFkZChlLCByZXN0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChwYXR0ZXJuLm1hcmtGb2xsb3dHbG9ic3RhcigpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1YndhbGtzLmFkZChlLCBwYXR0ZXJuKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBpZiB0aGUgTkVYVCB0aGluZyBtYXRjaGVzIHRoaXMgZW50cnksIHRoZW4gYWxzbyBhZGRcbiAgICAgICAgLy8gdGhlIHJlc3QuXG4gICAgICAgIGlmIChyZXN0KSB7XG4gICAgICAgICAgICBjb25zdCBycCA9IHJlc3QucGF0dGVybigpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBycCA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgICAgICAvLyBkb3RzIGFuZCBlbXB0eSB3ZXJlIGhhbmRsZWQgYWxyZWFkeVxuICAgICAgICAgICAgICAgIHJwICE9PSAnLi4nICYmXG4gICAgICAgICAgICAgICAgcnAgIT09ICcnICYmXG4gICAgICAgICAgICAgICAgcnAgIT09ICcuJykge1xuICAgICAgICAgICAgICAgIHRoaXMudGVzdFN0cmluZyhlLCBycCwgcmVzdC5yZXN0KCksIGFic29sdXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHJwID09PSAnLi4nKSB7XG4gICAgICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICAgICAgY29uc3QgZXAgPSBlLnBhcmVudCB8fCBlO1xuICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICAgICAgdGhpcy5zdWJ3YWxrcy5hZGQoZXAsIHJlc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAocnAgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRlc3RSZWdFeHAoZSwgcnAsIHJlc3QucmVzdCgpLCBhYnNvbHV0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGVzdFJlZ0V4cChlLCBwLCByZXN0LCBhYnNvbHV0ZSkge1xuICAgICAgICBpZiAoIXAudGVzdChlLm5hbWUpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAoIXJlc3QpIHtcbiAgICAgICAgICAgIHRoaXMubWF0Y2hlcy5hZGQoZSwgYWJzb2x1dGUsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3Vid2Fsa3MuYWRkKGUsIHJlc3QpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRlc3RTdHJpbmcoZSwgcCwgcmVzdCwgYWJzb2x1dGUpIHtcbiAgICAgICAgLy8gc2hvdWxkIG5ldmVyIGhhcHBlbj9cbiAgICAgICAgaWYgKCFlLmlzTmFtZWQocCkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmICghcmVzdCkge1xuICAgICAgICAgICAgdGhpcy5tYXRjaGVzLmFkZChlLCBhYnNvbHV0ZSwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zdWJ3YWxrcy5hZGQoZSwgcmVzdCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLlByb2Nlc3NvciA9IFByb2Nlc3Nvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXByb2Nlc3Nvci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5HbG9iU3RyZWFtID0gZXhwb3J0cy5HbG9iV2Fsa2VyID0gZXhwb3J0cy5HbG9iVXRpbCA9IHZvaWQgMDtcbi8qKlxuICogU2luZ2xlLXVzZSB1dGlsaXR5IGNsYXNzZXMgdG8gcHJvdmlkZSBmdW5jdGlvbmFsaXR5IHRvIHRoZSB7QGxpbmsgR2xvYn1cbiAqIG1ldGhvZHMuXG4gKlxuICogQG1vZHVsZVxuICovXG5jb25zdCBtaW5pcGFzc18xID0gcmVxdWlyZShcIm1pbmlwYXNzXCIpO1xuY29uc3QgaWdub3JlX2pzXzEgPSByZXF1aXJlKFwiLi9pZ25vcmUuanNcIik7XG5jb25zdCBwcm9jZXNzb3JfanNfMSA9IHJlcXVpcmUoXCIuL3Byb2Nlc3Nvci5qc1wiKTtcbmNvbnN0IG1ha2VJZ25vcmUgPSAoaWdub3JlLCBvcHRzKSA9PiB0eXBlb2YgaWdub3JlID09PSAnc3RyaW5nJyA/IG5ldyBpZ25vcmVfanNfMS5JZ25vcmUoW2lnbm9yZV0sIG9wdHMpXG4gICAgOiBBcnJheS5pc0FycmF5KGlnbm9yZSkgPyBuZXcgaWdub3JlX2pzXzEuSWdub3JlKGlnbm9yZSwgb3B0cylcbiAgICAgICAgOiBpZ25vcmU7XG4vKipcbiAqIGJhc2ljIHdhbGtpbmcgdXRpbGl0aWVzIHRoYXQgYWxsIHRoZSBnbG9iIHdhbGtlciB0eXBlcyB1c2VcbiAqL1xuY2xhc3MgR2xvYlV0aWwge1xuICAgIHBhdGg7XG4gICAgcGF0dGVybnM7XG4gICAgb3B0cztcbiAgICBzZWVuID0gbmV3IFNldCgpO1xuICAgIHBhdXNlZCA9IGZhbHNlO1xuICAgIGFib3J0ZWQgPSBmYWxzZTtcbiAgICAjb25SZXN1bWUgPSBbXTtcbiAgICAjaWdub3JlO1xuICAgICNzZXA7XG4gICAgc2lnbmFsO1xuICAgIG1heERlcHRoO1xuICAgIGluY2x1ZGVDaGlsZE1hdGNoZXM7XG4gICAgY29uc3RydWN0b3IocGF0dGVybnMsIHBhdGgsIG9wdHMpIHtcbiAgICAgICAgdGhpcy5wYXR0ZXJucyA9IHBhdHRlcm5zO1xuICAgICAgICB0aGlzLnBhdGggPSBwYXRoO1xuICAgICAgICB0aGlzLm9wdHMgPSBvcHRzO1xuICAgICAgICB0aGlzLiNzZXAgPSAhb3B0cy5wb3NpeCAmJiBvcHRzLnBsYXRmb3JtID09PSAnd2luMzInID8gJ1xcXFwnIDogJy8nO1xuICAgICAgICB0aGlzLmluY2x1ZGVDaGlsZE1hdGNoZXMgPSBvcHRzLmluY2x1ZGVDaGlsZE1hdGNoZXMgIT09IGZhbHNlO1xuICAgICAgICBpZiAob3B0cy5pZ25vcmUgfHwgIXRoaXMuaW5jbHVkZUNoaWxkTWF0Y2hlcykge1xuICAgICAgICAgICAgdGhpcy4jaWdub3JlID0gbWFrZUlnbm9yZShvcHRzLmlnbm9yZSA/PyBbXSwgb3B0cyk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaW5jbHVkZUNoaWxkTWF0Y2hlcyAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiB0aGlzLiNpZ25vcmUuYWRkICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbSA9ICdjYW5ub3QgaWdub3JlIGNoaWxkIG1hdGNoZXMsIGlnbm9yZSBsYWNrcyBhZGQoKSBtZXRob2QuJztcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWdub3JlLCBhbHdheXMgc2V0IHdpdGggbWF4RGVwdGgsIGJ1dCBpdCdzIG9wdGlvbmFsIG9uIHRoZVxuICAgICAgICAvLyBHbG9iT3B0aW9ucyB0eXBlXG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICB0aGlzLm1heERlcHRoID0gb3B0cy5tYXhEZXB0aCB8fCBJbmZpbml0eTtcbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgaWYgKG9wdHMuc2lnbmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNpZ25hbCA9IG9wdHMuc2lnbmFsO1xuICAgICAgICAgICAgdGhpcy5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy4jb25SZXN1bWUubGVuZ3RoID0gMDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgICNpZ25vcmVkKHBhdGgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2Vlbi5oYXMocGF0aCkgfHwgISF0aGlzLiNpZ25vcmU/Lmlnbm9yZWQ/LihwYXRoKTtcbiAgICB9XG4gICAgI2NoaWxkcmVuSWdub3JlZChwYXRoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuI2lnbm9yZT8uY2hpbGRyZW5JZ25vcmVkPy4ocGF0aCk7XG4gICAgfVxuICAgIC8vIGJhY2twcmVzc3VyZSBtZWNoYW5pc21cbiAgICBwYXVzZSgpIHtcbiAgICAgICAgdGhpcy5wYXVzZWQgPSB0cnVlO1xuICAgIH1cbiAgICByZXN1bWUoKSB7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICBpZiAodGhpcy5zaWduYWw/LmFib3J0ZWQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIHRoaXMucGF1c2VkID0gZmFsc2U7XG4gICAgICAgIGxldCBmbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgd2hpbGUgKCF0aGlzLnBhdXNlZCAmJiAoZm4gPSB0aGlzLiNvblJlc3VtZS5zaGlmdCgpKSkge1xuICAgICAgICAgICAgZm4oKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBvblJlc3VtZShmbikge1xuICAgICAgICBpZiAodGhpcy5zaWduYWw/LmFib3J0ZWQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICBpZiAoIXRoaXMucGF1c2VkKSB7XG4gICAgICAgICAgICBmbigpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgICAgIHRoaXMuI29uUmVzdW1lLnB1c2goZm4pO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIGRvIHRoZSByZXF1aXNpdGUgcmVhbHBhdGgvc3RhdCBjaGVja2luZywgYW5kIHJldHVybiB0aGUgcGF0aFxuICAgIC8vIHRvIGFkZCBvciB1bmRlZmluZWQgdG8gZmlsdGVyIGl0IG91dC5cbiAgICBhc3luYyBtYXRjaENoZWNrKGUsIGlmRGlyKSB7XG4gICAgICAgIGlmIChpZkRpciAmJiB0aGlzLm9wdHMubm9kaXIpXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICBsZXQgcnBjO1xuICAgICAgICBpZiAodGhpcy5vcHRzLnJlYWxwYXRoKSB7XG4gICAgICAgICAgICBycGMgPSBlLnJlYWxwYXRoQ2FjaGVkKCkgfHwgKGF3YWl0IGUucmVhbHBhdGgoKSk7XG4gICAgICAgICAgICBpZiAoIXJwYylcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgZSA9IHJwYztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZWVkU3RhdCA9IGUuaXNVbmtub3duKCkgfHwgdGhpcy5vcHRzLnN0YXQ7XG4gICAgICAgIGNvbnN0IHMgPSBuZWVkU3RhdCA/IGF3YWl0IGUubHN0YXQoKSA6IGU7XG4gICAgICAgIGlmICh0aGlzLm9wdHMuZm9sbG93ICYmIHRoaXMub3B0cy5ub2RpciAmJiBzPy5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBhd2FpdCBzLnJlYWxwYXRoKCk7XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgICAgIGlmICh0YXJnZXQgJiYgKHRhcmdldC5pc1Vua25vd24oKSB8fCB0aGlzLm9wdHMuc3RhdCkpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0YXJnZXQubHN0YXQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubWF0Y2hDaGVja1Rlc3QocywgaWZEaXIpO1xuICAgIH1cbiAgICBtYXRjaENoZWNrVGVzdChlLCBpZkRpcikge1xuICAgICAgICByZXR1cm4gKGUgJiZcbiAgICAgICAgICAgICh0aGlzLm1heERlcHRoID09PSBJbmZpbml0eSB8fCBlLmRlcHRoKCkgPD0gdGhpcy5tYXhEZXB0aCkgJiZcbiAgICAgICAgICAgICghaWZEaXIgfHwgZS5jYW5SZWFkZGlyKCkpICYmXG4gICAgICAgICAgICAoIXRoaXMub3B0cy5ub2RpciB8fCAhZS5pc0RpcmVjdG9yeSgpKSAmJlxuICAgICAgICAgICAgKCF0aGlzLm9wdHMubm9kaXIgfHxcbiAgICAgICAgICAgICAgICAhdGhpcy5vcHRzLmZvbGxvdyB8fFxuICAgICAgICAgICAgICAgICFlLmlzU3ltYm9saWNMaW5rKCkgfHxcbiAgICAgICAgICAgICAgICAhZS5yZWFscGF0aENhY2hlZCgpPy5pc0RpcmVjdG9yeSgpKSAmJlxuICAgICAgICAgICAgIXRoaXMuI2lnbm9yZWQoZSkpID9cbiAgICAgICAgICAgIGVcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICBtYXRjaENoZWNrU3luYyhlLCBpZkRpcikge1xuICAgICAgICBpZiAoaWZEaXIgJiYgdGhpcy5vcHRzLm5vZGlyKVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IHJwYztcbiAgICAgICAgaWYgKHRoaXMub3B0cy5yZWFscGF0aCkge1xuICAgICAgICAgICAgcnBjID0gZS5yZWFscGF0aENhY2hlZCgpIHx8IGUucmVhbHBhdGhTeW5jKCk7XG4gICAgICAgICAgICBpZiAoIXJwYylcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgZSA9IHJwYztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZWVkU3RhdCA9IGUuaXNVbmtub3duKCkgfHwgdGhpcy5vcHRzLnN0YXQ7XG4gICAgICAgIGNvbnN0IHMgPSBuZWVkU3RhdCA/IGUubHN0YXRTeW5jKCkgOiBlO1xuICAgICAgICBpZiAodGhpcy5vcHRzLmZvbGxvdyAmJiB0aGlzLm9wdHMubm9kaXIgJiYgcz8uaXNTeW1ib2xpY0xpbmsoKSkge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gcy5yZWFscGF0aFN5bmMoKTtcbiAgICAgICAgICAgIGlmICh0YXJnZXQgJiYgKHRhcmdldD8uaXNVbmtub3duKCkgfHwgdGhpcy5vcHRzLnN0YXQpKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0LmxzdGF0U3luYygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLm1hdGNoQ2hlY2tUZXN0KHMsIGlmRGlyKTtcbiAgICB9XG4gICAgbWF0Y2hGaW5pc2goZSwgYWJzb2x1dGUpIHtcbiAgICAgICAgaWYgKHRoaXMuI2lnbm9yZWQoZSkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIC8vIHdlIGtub3cgd2UgaGF2ZSBhbiBpZ25vcmUgaWYgdGhpcyBpcyBmYWxzZSwgYnV0IFRTIGRvZXNuJ3RcbiAgICAgICAgaWYgKCF0aGlzLmluY2x1ZGVDaGlsZE1hdGNoZXMgJiYgdGhpcy4jaWdub3JlPy5hZGQpIHtcbiAgICAgICAgICAgIGNvbnN0IGlnbiA9IGAke2UucmVsYXRpdmVQb3NpeCgpfS8qKmA7XG4gICAgICAgICAgICB0aGlzLiNpZ25vcmUuYWRkKGlnbik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWJzID0gdGhpcy5vcHRzLmFic29sdXRlID09PSB1bmRlZmluZWQgPyBhYnNvbHV0ZSA6IHRoaXMub3B0cy5hYnNvbHV0ZTtcbiAgICAgICAgdGhpcy5zZWVuLmFkZChlKTtcbiAgICAgICAgY29uc3QgbWFyayA9IHRoaXMub3B0cy5tYXJrICYmIGUuaXNEaXJlY3RvcnkoKSA/IHRoaXMuI3NlcCA6ICcnO1xuICAgICAgICAvLyBvaywgd2UgaGF2ZSB3aGF0IHdlIG5lZWQhXG4gICAgICAgIGlmICh0aGlzLm9wdHMud2l0aEZpbGVUeXBlcykge1xuICAgICAgICAgICAgdGhpcy5tYXRjaEVtaXQoZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYWJzKSB7XG4gICAgICAgICAgICBjb25zdCBhYnMgPSB0aGlzLm9wdHMucG9zaXggPyBlLmZ1bGxwYXRoUG9zaXgoKSA6IGUuZnVsbHBhdGgoKTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2hFbWl0KGFicyArIG1hcmspO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcmVsID0gdGhpcy5vcHRzLnBvc2l4ID8gZS5yZWxhdGl2ZVBvc2l4KCkgOiBlLnJlbGF0aXZlKCk7XG4gICAgICAgICAgICBjb25zdCBwcmUgPSB0aGlzLm9wdHMuZG90UmVsYXRpdmUgJiYgIXJlbC5zdGFydHNXaXRoKCcuLicgKyB0aGlzLiNzZXApID9cbiAgICAgICAgICAgICAgICAnLicgKyB0aGlzLiNzZXBcbiAgICAgICAgICAgICAgICA6ICcnO1xuICAgICAgICAgICAgdGhpcy5tYXRjaEVtaXQoIXJlbCA/ICcuJyArIG1hcmsgOiBwcmUgKyByZWwgKyBtYXJrKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBtYXRjaChlLCBhYnNvbHV0ZSwgaWZEaXIpIHtcbiAgICAgICAgY29uc3QgcCA9IGF3YWl0IHRoaXMubWF0Y2hDaGVjayhlLCBpZkRpcik7XG4gICAgICAgIGlmIChwKVxuICAgICAgICAgICAgdGhpcy5tYXRjaEZpbmlzaChwLCBhYnNvbHV0ZSk7XG4gICAgfVxuICAgIG1hdGNoU3luYyhlLCBhYnNvbHV0ZSwgaWZEaXIpIHtcbiAgICAgICAgY29uc3QgcCA9IHRoaXMubWF0Y2hDaGVja1N5bmMoZSwgaWZEaXIpO1xuICAgICAgICBpZiAocClcbiAgICAgICAgICAgIHRoaXMubWF0Y2hGaW5pc2gocCwgYWJzb2x1dGUpO1xuICAgIH1cbiAgICB3YWxrQ0IodGFyZ2V0LCBwYXR0ZXJucywgY2IpIHtcbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIGlmICh0aGlzLnNpZ25hbD8uYWJvcnRlZClcbiAgICAgICAgICAgIGNiKCk7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIHRoaXMud2Fsa0NCMih0YXJnZXQsIHBhdHRlcm5zLCBuZXcgcHJvY2Vzc29yX2pzXzEuUHJvY2Vzc29yKHRoaXMub3B0cyksIGNiKTtcbiAgICB9XG4gICAgd2Fsa0NCMih0YXJnZXQsIHBhdHRlcm5zLCBwcm9jZXNzb3IsIGNiKSB7XG4gICAgICAgIGlmICh0aGlzLiNjaGlsZHJlbklnbm9yZWQodGFyZ2V0KSlcbiAgICAgICAgICAgIHJldHVybiBjYigpO1xuICAgICAgICBpZiAodGhpcy5zaWduYWw/LmFib3J0ZWQpXG4gICAgICAgICAgICBjYigpO1xuICAgICAgICBpZiAodGhpcy5wYXVzZWQpIHtcbiAgICAgICAgICAgIHRoaXMub25SZXN1bWUoKCkgPT4gdGhpcy53YWxrQ0IyKHRhcmdldCwgcGF0dGVybnMsIHByb2Nlc3NvciwgY2IpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBwcm9jZXNzb3IucHJvY2Vzc1BhdHRlcm5zKHRhcmdldCwgcGF0dGVybnMpO1xuICAgICAgICAvLyBkb25lIHByb2Nlc3NpbmcuICBhbGwgb2YgdGhlIGFib3ZlIGlzIHN5bmMsIGNhbiBiZSBhYnN0cmFjdGVkIG91dC5cbiAgICAgICAgLy8gc3Vid2Fsa3MgaXMgYSBtYXAgb2YgcGF0aHMgdG8gdGhlIGVudHJ5IGZpbHRlcnMgdGhleSBuZWVkXG4gICAgICAgIC8vIG1hdGNoZXMgaXMgYSBtYXAgb2YgcGF0aHMgdG8gW2Fic29sdXRlLCBpZkRpcl0gdHVwbGVzLlxuICAgICAgICBsZXQgdGFza3MgPSAxO1xuICAgICAgICBjb25zdCBuZXh0ID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKC0tdGFza3MgPT09IDApXG4gICAgICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgfTtcbiAgICAgICAgZm9yIChjb25zdCBbbSwgYWJzb2x1dGUsIGlmRGlyXSBvZiBwcm9jZXNzb3IubWF0Y2hlcy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLiNpZ25vcmVkKG0pKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgdGFza3MrKztcbiAgICAgICAgICAgIHRoaXMubWF0Y2gobSwgYWJzb2x1dGUsIGlmRGlyKS50aGVuKCgpID0+IG5leHQoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCB0IG9mIHByb2Nlc3Nvci5zdWJ3YWxrVGFyZ2V0cygpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5tYXhEZXB0aCAhPT0gSW5maW5pdHkgJiYgdC5kZXB0aCgpID49IHRoaXMubWF4RGVwdGgpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhc2tzKys7XG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbkNhY2hlZCA9IHQucmVhZGRpckNhY2hlZCgpO1xuICAgICAgICAgICAgaWYgKHQuY2FsbGVkUmVhZGRpcigpKVxuICAgICAgICAgICAgICAgIHRoaXMud2Fsa0NCMyh0LCBjaGlsZHJlbkNhY2hlZCwgcHJvY2Vzc29yLCBuZXh0KTtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHQucmVhZGRpckNCKChfLCBlbnRyaWVzKSA9PiB0aGlzLndhbGtDQjModCwgZW50cmllcywgcHJvY2Vzc29yLCBuZXh0KSwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbmV4dCgpO1xuICAgIH1cbiAgICB3YWxrQ0IzKHRhcmdldCwgZW50cmllcywgcHJvY2Vzc29yLCBjYikge1xuICAgICAgICBwcm9jZXNzb3IgPSBwcm9jZXNzb3IuZmlsdGVyRW50cmllcyh0YXJnZXQsIGVudHJpZXMpO1xuICAgICAgICBsZXQgdGFza3MgPSAxO1xuICAgICAgICBjb25zdCBuZXh0ID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKC0tdGFza3MgPT09IDApXG4gICAgICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgfTtcbiAgICAgICAgZm9yIChjb25zdCBbbSwgYWJzb2x1dGUsIGlmRGlyXSBvZiBwcm9jZXNzb3IubWF0Y2hlcy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLiNpZ25vcmVkKG0pKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgdGFza3MrKztcbiAgICAgICAgICAgIHRoaXMubWF0Y2gobSwgYWJzb2x1dGUsIGlmRGlyKS50aGVuKCgpID0+IG5leHQoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBbdGFyZ2V0LCBwYXR0ZXJuc10gb2YgcHJvY2Vzc29yLnN1YndhbGtzLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgdGFza3MrKztcbiAgICAgICAgICAgIHRoaXMud2Fsa0NCMih0YXJnZXQsIHBhdHRlcm5zLCBwcm9jZXNzb3IuY2hpbGQoKSwgbmV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgbmV4dCgpO1xuICAgIH1cbiAgICB3YWxrQ0JTeW5jKHRhcmdldCwgcGF0dGVybnMsIGNiKSB7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICBpZiAodGhpcy5zaWduYWw/LmFib3J0ZWQpXG4gICAgICAgICAgICBjYigpO1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICB0aGlzLndhbGtDQjJTeW5jKHRhcmdldCwgcGF0dGVybnMsIG5ldyBwcm9jZXNzb3JfanNfMS5Qcm9jZXNzb3IodGhpcy5vcHRzKSwgY2IpO1xuICAgIH1cbiAgICB3YWxrQ0IyU3luYyh0YXJnZXQsIHBhdHRlcm5zLCBwcm9jZXNzb3IsIGNiKSB7XG4gICAgICAgIGlmICh0aGlzLiNjaGlsZHJlbklnbm9yZWQodGFyZ2V0KSlcbiAgICAgICAgICAgIHJldHVybiBjYigpO1xuICAgICAgICBpZiAodGhpcy5zaWduYWw/LmFib3J0ZWQpXG4gICAgICAgICAgICBjYigpO1xuICAgICAgICBpZiAodGhpcy5wYXVzZWQpIHtcbiAgICAgICAgICAgIHRoaXMub25SZXN1bWUoKCkgPT4gdGhpcy53YWxrQ0IyU3luYyh0YXJnZXQsIHBhdHRlcm5zLCBwcm9jZXNzb3IsIGNiKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcHJvY2Vzc29yLnByb2Nlc3NQYXR0ZXJucyh0YXJnZXQsIHBhdHRlcm5zKTtcbiAgICAgICAgLy8gZG9uZSBwcm9jZXNzaW5nLiAgYWxsIG9mIHRoZSBhYm92ZSBpcyBzeW5jLCBjYW4gYmUgYWJzdHJhY3RlZCBvdXQuXG4gICAgICAgIC8vIHN1YndhbGtzIGlzIGEgbWFwIG9mIHBhdGhzIHRvIHRoZSBlbnRyeSBmaWx0ZXJzIHRoZXkgbmVlZFxuICAgICAgICAvLyBtYXRjaGVzIGlzIGEgbWFwIG9mIHBhdGhzIHRvIFthYnNvbHV0ZSwgaWZEaXJdIHR1cGxlcy5cbiAgICAgICAgbGV0IHRhc2tzID0gMTtcbiAgICAgICAgY29uc3QgbmV4dCA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmICgtLXRhc2tzID09PSAwKVxuICAgICAgICAgICAgICAgIGNiKCk7XG4gICAgICAgIH07XG4gICAgICAgIGZvciAoY29uc3QgW20sIGFic29sdXRlLCBpZkRpcl0gb2YgcHJvY2Vzc29yLm1hdGNoZXMuZW50cmllcygpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy4jaWdub3JlZChtKSlcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2hTeW5jKG0sIGFic29sdXRlLCBpZkRpcik7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCB0IG9mIHByb2Nlc3Nvci5zdWJ3YWxrVGFyZ2V0cygpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5tYXhEZXB0aCAhPT0gSW5maW5pdHkgJiYgdC5kZXB0aCgpID49IHRoaXMubWF4RGVwdGgpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhc2tzKys7XG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHQucmVhZGRpclN5bmMoKTtcbiAgICAgICAgICAgIHRoaXMud2Fsa0NCM1N5bmModCwgY2hpbGRyZW4sIHByb2Nlc3NvciwgbmV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgbmV4dCgpO1xuICAgIH1cbiAgICB3YWxrQ0IzU3luYyh0YXJnZXQsIGVudHJpZXMsIHByb2Nlc3NvciwgY2IpIHtcbiAgICAgICAgcHJvY2Vzc29yID0gcHJvY2Vzc29yLmZpbHRlckVudHJpZXModGFyZ2V0LCBlbnRyaWVzKTtcbiAgICAgICAgbGV0IHRhc2tzID0gMTtcbiAgICAgICAgY29uc3QgbmV4dCA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmICgtLXRhc2tzID09PSAwKVxuICAgICAgICAgICAgICAgIGNiKCk7XG4gICAgICAgIH07XG4gICAgICAgIGZvciAoY29uc3QgW20sIGFic29sdXRlLCBpZkRpcl0gb2YgcHJvY2Vzc29yLm1hdGNoZXMuZW50cmllcygpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy4jaWdub3JlZChtKSlcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2hTeW5jKG0sIGFic29sdXRlLCBpZkRpcik7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBbdGFyZ2V0LCBwYXR0ZXJuc10gb2YgcHJvY2Vzc29yLnN1YndhbGtzLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgdGFza3MrKztcbiAgICAgICAgICAgIHRoaXMud2Fsa0NCMlN5bmModGFyZ2V0LCBwYXR0ZXJucywgcHJvY2Vzc29yLmNoaWxkKCksIG5leHQpO1xuICAgICAgICB9XG4gICAgICAgIG5leHQoKTtcbiAgICB9XG59XG5leHBvcnRzLkdsb2JVdGlsID0gR2xvYlV0aWw7XG5jbGFzcyBHbG9iV2Fsa2VyIGV4dGVuZHMgR2xvYlV0aWwge1xuICAgIG1hdGNoZXMgPSBuZXcgU2V0KCk7XG4gICAgY29uc3RydWN0b3IocGF0dGVybnMsIHBhdGgsIG9wdHMpIHtcbiAgICAgICAgc3VwZXIocGF0dGVybnMsIHBhdGgsIG9wdHMpO1xuICAgIH1cbiAgICBtYXRjaEVtaXQoZSkge1xuICAgICAgICB0aGlzLm1hdGNoZXMuYWRkKGUpO1xuICAgIH1cbiAgICBhc3luYyB3YWxrKCkge1xuICAgICAgICBpZiAodGhpcy5zaWduYWw/LmFib3J0ZWQpXG4gICAgICAgICAgICB0aHJvdyB0aGlzLnNpZ25hbC5yZWFzb247XG4gICAgICAgIGlmICh0aGlzLnBhdGguaXNVbmtub3duKCkpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucGF0aC5sc3RhdCgpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXMsIHJlaikgPT4ge1xuICAgICAgICAgICAgdGhpcy53YWxrQ0IodGhpcy5wYXRoLCB0aGlzLnBhdHRlcm5zLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2lnbmFsPy5hYm9ydGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlaih0aGlzLnNpZ25hbC5yZWFzb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzKHRoaXMubWF0Y2hlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5tYXRjaGVzO1xuICAgIH1cbiAgICB3YWxrU3luYygpIHtcbiAgICAgICAgaWYgKHRoaXMuc2lnbmFsPy5hYm9ydGVkKVxuICAgICAgICAgICAgdGhyb3cgdGhpcy5zaWduYWwucmVhc29uO1xuICAgICAgICBpZiAodGhpcy5wYXRoLmlzVW5rbm93bigpKSB7XG4gICAgICAgICAgICB0aGlzLnBhdGgubHN0YXRTeW5jKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbm90aGluZyBmb3IgdGhlIGNhbGxiYWNrIHRvIGRvLCBiZWNhdXNlIHRoaXMgbmV2ZXIgcGF1c2VzXG4gICAgICAgIHRoaXMud2Fsa0NCU3luYyh0aGlzLnBhdGgsIHRoaXMucGF0dGVybnMsICgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNpZ25hbD8uYWJvcnRlZClcbiAgICAgICAgICAgICAgICB0aHJvdyB0aGlzLnNpZ25hbC5yZWFzb247XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5tYXRjaGVzO1xuICAgIH1cbn1cbmV4cG9ydHMuR2xvYldhbGtlciA9IEdsb2JXYWxrZXI7XG5jbGFzcyBHbG9iU3RyZWFtIGV4dGVuZHMgR2xvYlV0aWwge1xuICAgIHJlc3VsdHM7XG4gICAgY29uc3RydWN0b3IocGF0dGVybnMsIHBhdGgsIG9wdHMpIHtcbiAgICAgICAgc3VwZXIocGF0dGVybnMsIHBhdGgsIG9wdHMpO1xuICAgICAgICB0aGlzLnJlc3VsdHMgPSBuZXcgbWluaXBhc3NfMS5NaW5pcGFzcyh7XG4gICAgICAgICAgICBzaWduYWw6IHRoaXMuc2lnbmFsLFxuICAgICAgICAgICAgb2JqZWN0TW9kZTogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucmVzdWx0cy5vbignZHJhaW4nLCAoKSA9PiB0aGlzLnJlc3VtZSgpKTtcbiAgICAgICAgdGhpcy5yZXN1bHRzLm9uKCdyZXN1bWUnLCAoKSA9PiB0aGlzLnJlc3VtZSgpKTtcbiAgICB9XG4gICAgbWF0Y2hFbWl0KGUpIHtcbiAgICAgICAgdGhpcy5yZXN1bHRzLndyaXRlKGUpO1xuICAgICAgICBpZiAoIXRoaXMucmVzdWx0cy5mbG93aW5nKVxuICAgICAgICAgICAgdGhpcy5wYXVzZSgpO1xuICAgIH1cbiAgICBzdHJlYW0oKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMucGF0aDtcbiAgICAgICAgaWYgKHRhcmdldC5pc1Vua25vd24oKSkge1xuICAgICAgICAgICAgdGFyZ2V0LmxzdGF0KCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy53YWxrQ0IodGFyZ2V0LCB0aGlzLnBhdHRlcm5zLCAoKSA9PiB0aGlzLnJlc3VsdHMuZW5kKCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLndhbGtDQih0YXJnZXQsIHRoaXMucGF0dGVybnMsICgpID0+IHRoaXMucmVzdWx0cy5lbmQoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMucmVzdWx0cztcbiAgICB9XG4gICAgc3RyZWFtU3luYygpIHtcbiAgICAgICAgaWYgKHRoaXMucGF0aC5pc1Vua25vd24oKSkge1xuICAgICAgICAgICAgdGhpcy5wYXRoLmxzdGF0U3luYygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMud2Fsa0NCU3luYyh0aGlzLnBhdGgsIHRoaXMucGF0dGVybnMsICgpID0+IHRoaXMucmVzdWx0cy5lbmQoKSk7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc3VsdHM7XG4gICAgfVxufVxuZXhwb3J0cy5HbG9iU3RyZWFtID0gR2xvYlN0cmVhbTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXdhbGtlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5HbG9iID0gdm9pZCAwO1xuY29uc3QgbWluaW1hdGNoXzEgPSByZXF1aXJlKFwibWluaW1hdGNoXCIpO1xuY29uc3Qgbm9kZV91cmxfMSA9IHJlcXVpcmUoXCJub2RlOnVybFwiKTtcbmNvbnN0IHBhdGhfc2N1cnJ5XzEgPSByZXF1aXJlKFwicGF0aC1zY3VycnlcIik7XG5jb25zdCBwYXR0ZXJuX2pzXzEgPSByZXF1aXJlKFwiLi9wYXR0ZXJuLmpzXCIpO1xuY29uc3Qgd2Fsa2VyX2pzXzEgPSByZXF1aXJlKFwiLi93YWxrZXIuanNcIik7XG4vLyBpZiBubyBwcm9jZXNzIGdsb2JhbCwganVzdCBjYWxsIGl0IGxpbnV4LlxuLy8gc28gd2UgZGVmYXVsdCB0byBjYXNlLXNlbnNpdGl2ZSwgLyBzZXBhcmF0b3JzXG5jb25zdCBkZWZhdWx0UGxhdGZvcm0gPSAodHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmXG4gICAgcHJvY2VzcyAmJlxuICAgIHR5cGVvZiBwcm9jZXNzLnBsYXRmb3JtID09PSAnc3RyaW5nJykgP1xuICAgIHByb2Nlc3MucGxhdGZvcm1cbiAgICA6ICdsaW51eCc7XG4vKipcbiAqIEFuIG9iamVjdCB0aGF0IGNhbiBwZXJmb3JtIGdsb2IgcGF0dGVybiB0cmF2ZXJzYWxzLlxuICovXG5jbGFzcyBHbG9iIHtcbiAgICBhYnNvbHV0ZTtcbiAgICBjd2Q7XG4gICAgcm9vdDtcbiAgICBkb3Q7XG4gICAgZG90UmVsYXRpdmU7XG4gICAgZm9sbG93O1xuICAgIGlnbm9yZTtcbiAgICBtYWdpY2FsQnJhY2VzO1xuICAgIG1hcms7XG4gICAgbWF0Y2hCYXNlO1xuICAgIG1heERlcHRoO1xuICAgIG5vYnJhY2U7XG4gICAgbm9jYXNlO1xuICAgIG5vZGlyO1xuICAgIG5vZXh0O1xuICAgIG5vZ2xvYnN0YXI7XG4gICAgcGF0dGVybjtcbiAgICBwbGF0Zm9ybTtcbiAgICByZWFscGF0aDtcbiAgICBzY3Vycnk7XG4gICAgc3RhdDtcbiAgICBzaWduYWw7XG4gICAgd2luZG93c1BhdGhzTm9Fc2NhcGU7XG4gICAgd2l0aEZpbGVUeXBlcztcbiAgICBpbmNsdWRlQ2hpbGRNYXRjaGVzO1xuICAgIC8qKlxuICAgICAqIFRoZSBvcHRpb25zIHByb3ZpZGVkIHRvIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICAgKi9cbiAgICBvcHRzO1xuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHBhcnNlZCBpbW11dGFibGUge0BsaW5rIFBhdHRlcm59IG9iamVjdHMuXG4gICAgICovXG4gICAgcGF0dGVybnM7XG4gICAgLyoqXG4gICAgICogQWxsIG9wdGlvbnMgYXJlIHN0b3JlZCBhcyBwcm9wZXJ0aWVzIG9uIHRoZSBgR2xvYmAgb2JqZWN0LlxuICAgICAqXG4gICAgICogU2VlIHtAbGluayBHbG9iT3B0aW9uc30gZm9yIGZ1bGwgb3B0aW9ucyBkZXNjcmlwdGlvbnMuXG4gICAgICpcbiAgICAgKiBOb3RlIHRoYXQgYSBwcmV2aW91cyBgR2xvYmAgb2JqZWN0IGNhbiBiZSBwYXNzZWQgYXMgdGhlXG4gICAgICogYEdsb2JPcHRpb25zYCB0byBhbm90aGVyIGBHbG9iYCBpbnN0YW50aWF0aW9uIHRvIHJlLXVzZSBzZXR0aW5nc1xuICAgICAqIGFuZCBjYWNoZXMgd2l0aCBhIG5ldyBwYXR0ZXJuLlxuICAgICAqXG4gICAgICogVHJhdmVyc2FsIGZ1bmN0aW9ucyBjYW4gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIHRvIHJ1biB0aGUgd2Fsa1xuICAgICAqIGFnYWluLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHBhdHRlcm4sIG9wdHMpIHtcbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIGlmICghb3B0cylcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2dsb2Igb3B0aW9ucyByZXF1aXJlZCcpO1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICB0aGlzLndpdGhGaWxlVHlwZXMgPSAhIW9wdHMud2l0aEZpbGVUeXBlcztcbiAgICAgICAgdGhpcy5zaWduYWwgPSBvcHRzLnNpZ25hbDtcbiAgICAgICAgdGhpcy5mb2xsb3cgPSAhIW9wdHMuZm9sbG93O1xuICAgICAgICB0aGlzLmRvdCA9ICEhb3B0cy5kb3Q7XG4gICAgICAgIHRoaXMuZG90UmVsYXRpdmUgPSAhIW9wdHMuZG90UmVsYXRpdmU7XG4gICAgICAgIHRoaXMubm9kaXIgPSAhIW9wdHMubm9kaXI7XG4gICAgICAgIHRoaXMubWFyayA9ICEhb3B0cy5tYXJrO1xuICAgICAgICBpZiAoIW9wdHMuY3dkKSB7XG4gICAgICAgICAgICB0aGlzLmN3ZCA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG9wdHMuY3dkIGluc3RhbmNlb2YgVVJMIHx8IG9wdHMuY3dkLnN0YXJ0c1dpdGgoJ2ZpbGU6Ly8nKSkge1xuICAgICAgICAgICAgb3B0cy5jd2QgPSAoMCwgbm9kZV91cmxfMS5maWxlVVJMVG9QYXRoKShvcHRzLmN3ZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jd2QgPSBvcHRzLmN3ZCB8fCAnJztcbiAgICAgICAgdGhpcy5yb290ID0gb3B0cy5yb290O1xuICAgICAgICB0aGlzLm1hZ2ljYWxCcmFjZXMgPSAhIW9wdHMubWFnaWNhbEJyYWNlcztcbiAgICAgICAgdGhpcy5ub2JyYWNlID0gISFvcHRzLm5vYnJhY2U7XG4gICAgICAgIHRoaXMubm9leHQgPSAhIW9wdHMubm9leHQ7XG4gICAgICAgIHRoaXMucmVhbHBhdGggPSAhIW9wdHMucmVhbHBhdGg7XG4gICAgICAgIHRoaXMuYWJzb2x1dGUgPSBvcHRzLmFic29sdXRlO1xuICAgICAgICB0aGlzLmluY2x1ZGVDaGlsZE1hdGNoZXMgPSBvcHRzLmluY2x1ZGVDaGlsZE1hdGNoZXMgIT09IGZhbHNlO1xuICAgICAgICB0aGlzLm5vZ2xvYnN0YXIgPSAhIW9wdHMubm9nbG9ic3RhcjtcbiAgICAgICAgdGhpcy5tYXRjaEJhc2UgPSAhIW9wdHMubWF0Y2hCYXNlO1xuICAgICAgICB0aGlzLm1heERlcHRoID1cbiAgICAgICAgICAgIHR5cGVvZiBvcHRzLm1heERlcHRoID09PSAnbnVtYmVyJyA/IG9wdHMubWF4RGVwdGggOiBJbmZpbml0eTtcbiAgICAgICAgdGhpcy5zdGF0ID0gISFvcHRzLnN0YXQ7XG4gICAgICAgIHRoaXMuaWdub3JlID0gb3B0cy5pZ25vcmU7XG4gICAgICAgIGlmICh0aGlzLndpdGhGaWxlVHlwZXMgJiYgdGhpcy5hYnNvbHV0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Nhbm5vdCBzZXQgYWJzb2x1dGUgYW5kIHdpdGhGaWxlVHlwZXM6dHJ1ZScpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgcGF0dGVybiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHBhdHRlcm4gPSBbcGF0dGVybl07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy53aW5kb3dzUGF0aHNOb0VzY2FwZSA9XG4gICAgICAgICAgICAhIW9wdHMud2luZG93c1BhdGhzTm9Fc2NhcGUgfHxcbiAgICAgICAgICAgICAgICBvcHRzLmFsbG93V2luZG93c0VzY2FwZSA9PT1cbiAgICAgICAgICAgICAgICAgICAgZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLndpbmRvd3NQYXRoc05vRXNjYXBlKSB7XG4gICAgICAgICAgICBwYXR0ZXJuID0gcGF0dGVybi5tYXAocCA9PiBwLnJlcGxhY2UoL1xcXFwvZywgJy8nKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubWF0Y2hCYXNlKSB7XG4gICAgICAgICAgICBpZiAob3B0cy5ub2dsb2JzdGFyKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYmFzZSBtYXRjaGluZyByZXF1aXJlcyBnbG9ic3RhcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGF0dGVybiA9IHBhdHRlcm4ubWFwKHAgPT4gKHAuaW5jbHVkZXMoJy8nKSA/IHAgOiBgLi8qKi8ke3B9YCkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGF0dGVybiA9IHBhdHRlcm47XG4gICAgICAgIHRoaXMucGxhdGZvcm0gPSBvcHRzLnBsYXRmb3JtIHx8IGRlZmF1bHRQbGF0Zm9ybTtcbiAgICAgICAgdGhpcy5vcHRzID0geyAuLi5vcHRzLCBwbGF0Zm9ybTogdGhpcy5wbGF0Zm9ybSB9O1xuICAgICAgICBpZiAob3B0cy5zY3VycnkpIHtcbiAgICAgICAgICAgIHRoaXMuc2N1cnJ5ID0gb3B0cy5zY3Vycnk7XG4gICAgICAgICAgICBpZiAob3B0cy5ub2Nhc2UgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgIG9wdHMubm9jYXNlICE9PSBvcHRzLnNjdXJyeS5ub2Nhc2UpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vY2FzZSBvcHRpb24gY29udHJhZGljdHMgcHJvdmlkZWQgc2N1cnJ5IG9wdGlvbicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgU2N1cnJ5ID0gb3B0cy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyA/IHBhdGhfc2N1cnJ5XzEuUGF0aFNjdXJyeVdpbjMyXG4gICAgICAgICAgICAgICAgOiBvcHRzLnBsYXRmb3JtID09PSAnZGFyd2luJyA/IHBhdGhfc2N1cnJ5XzEuUGF0aFNjdXJyeURhcndpblxuICAgICAgICAgICAgICAgICAgICA6IG9wdHMucGxhdGZvcm0gPyBwYXRoX3NjdXJyeV8xLlBhdGhTY3VycnlQb3NpeFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBwYXRoX3NjdXJyeV8xLlBhdGhTY3Vycnk7XG4gICAgICAgICAgICB0aGlzLnNjdXJyeSA9IG5ldyBTY3VycnkodGhpcy5jd2QsIHtcbiAgICAgICAgICAgICAgICBub2Nhc2U6IG9wdHMubm9jYXNlLFxuICAgICAgICAgICAgICAgIGZzOiBvcHRzLmZzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ub2Nhc2UgPSB0aGlzLnNjdXJyeS5ub2Nhc2U7XG4gICAgICAgIC8vIElmIHlvdSBkbyBub2Nhc2U6dHJ1ZSBvbiBhIGNhc2Utc2Vuc2l0aXZlIGZpbGUgc3lzdGVtLCB0aGVuXG4gICAgICAgIC8vIHdlIG5lZWQgdG8gdXNlIHJlZ2V4cHMgaW5zdGVhZCBvZiBzdHJpbmdzIGZvciBub24tbWFnaWNcbiAgICAgICAgLy8gcGF0aCBwb3J0aW9ucywgYmVjYXVzZSBzdGF0dGluZyBgYUJjYCB3b24ndCByZXR1cm4gcmVzdWx0c1xuICAgICAgICAvLyBmb3IgdGhlIGZpbGUgYEFiQ2AgZm9yIGV4YW1wbGUuXG4gICAgICAgIGNvbnN0IG5vY2FzZU1hZ2ljT25seSA9IHRoaXMucGxhdGZvcm0gPT09ICdkYXJ3aW4nIHx8IHRoaXMucGxhdGZvcm0gPT09ICd3aW4zMic7XG4gICAgICAgIGNvbnN0IG1tbyA9IHtcbiAgICAgICAgICAgIC8vIGRlZmF1bHQgbm9jYXNlIGJhc2VkIG9uIHBsYXRmb3JtXG4gICAgICAgICAgICAuLi5vcHRzLFxuICAgICAgICAgICAgZG90OiB0aGlzLmRvdCxcbiAgICAgICAgICAgIG1hdGNoQmFzZTogdGhpcy5tYXRjaEJhc2UsXG4gICAgICAgICAgICBub2JyYWNlOiB0aGlzLm5vYnJhY2UsXG4gICAgICAgICAgICBub2Nhc2U6IHRoaXMubm9jYXNlLFxuICAgICAgICAgICAgbm9jYXNlTWFnaWNPbmx5LFxuICAgICAgICAgICAgbm9jb21tZW50OiB0cnVlLFxuICAgICAgICAgICAgbm9leHQ6IHRoaXMubm9leHQsXG4gICAgICAgICAgICBub25lZ2F0ZTogdHJ1ZSxcbiAgICAgICAgICAgIG9wdGltaXphdGlvbkxldmVsOiAyLFxuICAgICAgICAgICAgcGxhdGZvcm06IHRoaXMucGxhdGZvcm0sXG4gICAgICAgICAgICB3aW5kb3dzUGF0aHNOb0VzY2FwZTogdGhpcy53aW5kb3dzUGF0aHNOb0VzY2FwZSxcbiAgICAgICAgICAgIGRlYnVnOiAhIXRoaXMub3B0cy5kZWJ1ZyxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbW1zID0gdGhpcy5wYXR0ZXJuLm1hcChwID0+IG5ldyBtaW5pbWF0Y2hfMS5NaW5pbWF0Y2gocCwgbW1vKSk7XG4gICAgICAgIGNvbnN0IFttYXRjaFNldCwgZ2xvYlBhcnRzXSA9IG1tcy5yZWR1Y2UoKHNldCwgbSkgPT4ge1xuICAgICAgICAgICAgc2V0WzBdLnB1c2goLi4ubS5zZXQpO1xuICAgICAgICAgICAgc2V0WzFdLnB1c2goLi4ubS5nbG9iUGFydHMpO1xuICAgICAgICAgICAgcmV0dXJuIHNldDtcbiAgICAgICAgfSwgW1tdLCBbXV0pO1xuICAgICAgICB0aGlzLnBhdHRlcm5zID0gbWF0Y2hTZXQubWFwKChzZXQsIGkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGcgPSBnbG9iUGFydHNbaV07XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgICAgIGlmICghZylcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcGF0dGVybiBvYmplY3QnKTtcbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICByZXR1cm4gbmV3IHBhdHRlcm5fanNfMS5QYXR0ZXJuKHNldCwgZywgMCwgdGhpcy5wbGF0Zm9ybSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYyB3YWxrKCkge1xuICAgICAgICAvLyBXYWxrZXJzIGFsd2F5cyByZXR1cm4gYXJyYXkgb2YgUGF0aCBvYmplY3RzLCBzbyB3ZSBqdXN0IGhhdmUgdG9cbiAgICAgICAgLy8gY29lcmNlIHRoZW0gaW50byB0aGUgcmlnaHQgc2hhcGUuICBJdCB3aWxsIGhhdmUgYWxyZWFkeSBjYWxsZWRcbiAgICAgICAgLy8gcmVhbHBhdGgoKSBpZiB0aGUgb3B0aW9uIHdhcyBzZXQgdG8gZG8gc28sIHNvIHdlIGtub3cgdGhhdCdzIGNhY2hlZC5cbiAgICAgICAgLy8gc3RhcnQgb3V0IGtub3dpbmcgdGhlIGN3ZCwgYXQgbGVhc3RcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIC4uLihhd2FpdCBuZXcgd2Fsa2VyX2pzXzEuR2xvYldhbGtlcih0aGlzLnBhdHRlcm5zLCB0aGlzLnNjdXJyeS5jd2QsIHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLm9wdHMsXG4gICAgICAgICAgICAgICAgbWF4RGVwdGg6IHRoaXMubWF4RGVwdGggIT09IEluZmluaXR5ID9cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXhEZXB0aCArIHRoaXMuc2N1cnJ5LmN3ZC5kZXB0aCgpXG4gICAgICAgICAgICAgICAgICAgIDogSW5maW5pdHksXG4gICAgICAgICAgICAgICAgcGxhdGZvcm06IHRoaXMucGxhdGZvcm0sXG4gICAgICAgICAgICAgICAgbm9jYXNlOiB0aGlzLm5vY2FzZSxcbiAgICAgICAgICAgICAgICBpbmNsdWRlQ2hpbGRNYXRjaGVzOiB0aGlzLmluY2x1ZGVDaGlsZE1hdGNoZXMsXG4gICAgICAgICAgICB9KS53YWxrKCkpLFxuICAgICAgICBdO1xuICAgIH1cbiAgICB3YWxrU3luYygpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIC4uLm5ldyB3YWxrZXJfanNfMS5HbG9iV2Fsa2VyKHRoaXMucGF0dGVybnMsIHRoaXMuc2N1cnJ5LmN3ZCwge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMub3B0cyxcbiAgICAgICAgICAgICAgICBtYXhEZXB0aDogdGhpcy5tYXhEZXB0aCAhPT0gSW5maW5pdHkgP1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1heERlcHRoICsgdGhpcy5zY3VycnkuY3dkLmRlcHRoKClcbiAgICAgICAgICAgICAgICAgICAgOiBJbmZpbml0eSxcbiAgICAgICAgICAgICAgICBwbGF0Zm9ybTogdGhpcy5wbGF0Zm9ybSxcbiAgICAgICAgICAgICAgICBub2Nhc2U6IHRoaXMubm9jYXNlLFxuICAgICAgICAgICAgICAgIGluY2x1ZGVDaGlsZE1hdGNoZXM6IHRoaXMuaW5jbHVkZUNoaWxkTWF0Y2hlcyxcbiAgICAgICAgICAgIH0pLndhbGtTeW5jKCksXG4gICAgICAgIF07XG4gICAgfVxuICAgIHN0cmVhbSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyB3YWxrZXJfanNfMS5HbG9iU3RyZWFtKHRoaXMucGF0dGVybnMsIHRoaXMuc2N1cnJ5LmN3ZCwge1xuICAgICAgICAgICAgLi4udGhpcy5vcHRzLFxuICAgICAgICAgICAgbWF4RGVwdGg6IHRoaXMubWF4RGVwdGggIT09IEluZmluaXR5ID9cbiAgICAgICAgICAgICAgICB0aGlzLm1heERlcHRoICsgdGhpcy5zY3VycnkuY3dkLmRlcHRoKClcbiAgICAgICAgICAgICAgICA6IEluZmluaXR5LFxuICAgICAgICAgICAgcGxhdGZvcm06IHRoaXMucGxhdGZvcm0sXG4gICAgICAgICAgICBub2Nhc2U6IHRoaXMubm9jYXNlLFxuICAgICAgICAgICAgaW5jbHVkZUNoaWxkTWF0Y2hlczogdGhpcy5pbmNsdWRlQ2hpbGRNYXRjaGVzLFxuICAgICAgICB9KS5zdHJlYW0oKTtcbiAgICB9XG4gICAgc3RyZWFtU3luYygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyB3YWxrZXJfanNfMS5HbG9iU3RyZWFtKHRoaXMucGF0dGVybnMsIHRoaXMuc2N1cnJ5LmN3ZCwge1xuICAgICAgICAgICAgLi4udGhpcy5vcHRzLFxuICAgICAgICAgICAgbWF4RGVwdGg6IHRoaXMubWF4RGVwdGggIT09IEluZmluaXR5ID9cbiAgICAgICAgICAgICAgICB0aGlzLm1heERlcHRoICsgdGhpcy5zY3VycnkuY3dkLmRlcHRoKClcbiAgICAgICAgICAgICAgICA6IEluZmluaXR5LFxuICAgICAgICAgICAgcGxhdGZvcm06IHRoaXMucGxhdGZvcm0sXG4gICAgICAgICAgICBub2Nhc2U6IHRoaXMubm9jYXNlLFxuICAgICAgICAgICAgaW5jbHVkZUNoaWxkTWF0Y2hlczogdGhpcy5pbmNsdWRlQ2hpbGRNYXRjaGVzLFxuICAgICAgICB9KS5zdHJlYW1TeW5jKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlZmF1bHQgc3luYyBpdGVyYXRpb24gZnVuY3Rpb24uIFJldHVybnMgYSBHZW5lcmF0b3IgdGhhdFxuICAgICAqIGl0ZXJhdGVzIG92ZXIgdGhlIHJlc3VsdHMuXG4gICAgICovXG4gICAgaXRlcmF0ZVN5bmMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0cmVhbVN5bmMoKVtTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgfVxuICAgIFtTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pdGVyYXRlU3luYygpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWZhdWx0IGFzeW5jIGl0ZXJhdGlvbiBmdW5jdGlvbi4gUmV0dXJucyBhbiBBc3luY0dlbmVyYXRvciB0aGF0XG4gICAgICogaXRlcmF0ZXMgb3ZlciB0aGUgcmVzdWx0cy5cbiAgICAgKi9cbiAgICBpdGVyYXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdHJlYW0oKVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKTtcbiAgICB9XG4gICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlcmF0ZSgpO1xuICAgIH1cbn1cbmV4cG9ydHMuR2xvYiA9IEdsb2I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1nbG9iLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmhhc01hZ2ljID0gdm9pZCAwO1xuY29uc3QgbWluaW1hdGNoXzEgPSByZXF1aXJlKFwibWluaW1hdGNoXCIpO1xuLyoqXG4gKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgcGF0dGVybnMgcHJvdmlkZWQgY29udGFpbiBhbnkgbWFnaWMgZ2xvYiBjaGFyYWN0ZXJzLFxuICogZ2l2ZW4gdGhlIG9wdGlvbnMgcHJvdmlkZWQuXG4gKlxuICogQnJhY2UgZXhwYW5zaW9uIGlzIG5vdCBjb25zaWRlcmVkIFwibWFnaWNcIiB1bmxlc3MgdGhlIGBtYWdpY2FsQnJhY2VzYCBvcHRpb25cbiAqIGlzIHNldCwgYXMgYnJhY2UgZXhwYW5zaW9uIGp1c3QgdHVybnMgb25lIHN0cmluZyBpbnRvIGFuIGFycmF5IG9mIHN0cmluZ3MuXG4gKiBTbyBhIHBhdHRlcm4gbGlrZSBgJ3h7YSxifXknYCB3b3VsZCByZXR1cm4gYGZhbHNlYCwgYmVjYXVzZSBgJ3hheSdgIGFuZFxuICogYCd4YnknYCBib3RoIGRvIG5vdCBjb250YWluIGFueSBtYWdpYyBnbG9iIGNoYXJhY3RlcnMsIGFuZCBpdCdzIHRyZWF0ZWQgdGhlXG4gKiBzYW1lIGFzIGlmIHlvdSBoYWQgY2FsbGVkIGl0IG9uIGBbJ3hheScsICd4YnknXWAuIFdoZW4gYG1hZ2ljYWxCcmFjZXM6dHJ1ZWBcbiAqIGlzIGluIHRoZSBvcHRpb25zLCBicmFjZSBleHBhbnNpb24gX2lzXyB0cmVhdGVkIGFzIGEgcGF0dGVybiBoYXZpbmcgbWFnaWMuXG4gKi9cbmNvbnN0IGhhc01hZ2ljID0gKHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkgPT4ge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShwYXR0ZXJuKSkge1xuICAgICAgICBwYXR0ZXJuID0gW3BhdHRlcm5dO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHAgb2YgcGF0dGVybikge1xuICAgICAgICBpZiAobmV3IG1pbmltYXRjaF8xLk1pbmltYXRjaChwLCBvcHRpb25zKS5oYXNNYWdpYygpKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5leHBvcnRzLmhhc01hZ2ljID0gaGFzTWFnaWM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1oYXMtbWFnaWMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2xvYiA9IGV4cG9ydHMuc3luYyA9IGV4cG9ydHMuaXRlcmF0ZSA9IGV4cG9ydHMuaXRlcmF0ZVN5bmMgPSBleHBvcnRzLnN0cmVhbSA9IGV4cG9ydHMuc3RyZWFtU3luYyA9IGV4cG9ydHMuSWdub3JlID0gZXhwb3J0cy5oYXNNYWdpYyA9IGV4cG9ydHMuR2xvYiA9IGV4cG9ydHMudW5lc2NhcGUgPSBleHBvcnRzLmVzY2FwZSA9IHZvaWQgMDtcbmV4cG9ydHMuZ2xvYlN0cmVhbVN5bmMgPSBnbG9iU3RyZWFtU3luYztcbmV4cG9ydHMuZ2xvYlN0cmVhbSA9IGdsb2JTdHJlYW07XG5leHBvcnRzLmdsb2JTeW5jID0gZ2xvYlN5bmM7XG5leHBvcnRzLmdsb2JJdGVyYXRlU3luYyA9IGdsb2JJdGVyYXRlU3luYztcbmV4cG9ydHMuZ2xvYkl0ZXJhdGUgPSBnbG9iSXRlcmF0ZTtcbmNvbnN0IG1pbmltYXRjaF8xID0gcmVxdWlyZShcIm1pbmltYXRjaFwiKTtcbmNvbnN0IGdsb2JfanNfMSA9IHJlcXVpcmUoXCIuL2dsb2IuanNcIik7XG5jb25zdCBoYXNfbWFnaWNfanNfMSA9IHJlcXVpcmUoXCIuL2hhcy1tYWdpYy5qc1wiKTtcbnZhciBtaW5pbWF0Y2hfMiA9IHJlcXVpcmUoXCJtaW5pbWF0Y2hcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJlc2NhcGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1pbmltYXRjaF8yLmVzY2FwZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInVuZXNjYXBlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBtaW5pbWF0Y2hfMi51bmVzY2FwZTsgfSB9KTtcbnZhciBnbG9iX2pzXzIgPSByZXF1aXJlKFwiLi9nbG9iLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiR2xvYlwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZ2xvYl9qc18yLkdsb2I7IH0gfSk7XG52YXIgaGFzX21hZ2ljX2pzXzIgPSByZXF1aXJlKFwiLi9oYXMtbWFnaWMuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJoYXNNYWdpY1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gaGFzX21hZ2ljX2pzXzIuaGFzTWFnaWM7IH0gfSk7XG52YXIgaWdub3JlX2pzXzEgPSByZXF1aXJlKFwiLi9pZ25vcmUuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJJZ25vcmVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGlnbm9yZV9qc18xLklnbm9yZTsgfSB9KTtcbmZ1bmN0aW9uIGdsb2JTdHJlYW1TeW5jKHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiBuZXcgZ2xvYl9qc18xLkdsb2IocGF0dGVybiwgb3B0aW9ucykuc3RyZWFtU3luYygpO1xufVxuZnVuY3Rpb24gZ2xvYlN0cmVhbShwYXR0ZXJuLCBvcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gbmV3IGdsb2JfanNfMS5HbG9iKHBhdHRlcm4sIG9wdGlvbnMpLnN0cmVhbSgpO1xufVxuZnVuY3Rpb24gZ2xvYlN5bmMocGF0dGVybiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgcmV0dXJuIG5ldyBnbG9iX2pzXzEuR2xvYihwYXR0ZXJuLCBvcHRpb25zKS53YWxrU3luYygpO1xufVxuYXN5bmMgZnVuY3Rpb24gZ2xvYl8ocGF0dGVybiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgcmV0dXJuIG5ldyBnbG9iX2pzXzEuR2xvYihwYXR0ZXJuLCBvcHRpb25zKS53YWxrKCk7XG59XG5mdW5jdGlvbiBnbG9iSXRlcmF0ZVN5bmMocGF0dGVybiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgcmV0dXJuIG5ldyBnbG9iX2pzXzEuR2xvYihwYXR0ZXJuLCBvcHRpb25zKS5pdGVyYXRlU3luYygpO1xufVxuZnVuY3Rpb24gZ2xvYkl0ZXJhdGUocGF0dGVybiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgcmV0dXJuIG5ldyBnbG9iX2pzXzEuR2xvYihwYXR0ZXJuLCBvcHRpb25zKS5pdGVyYXRlKCk7XG59XG4vLyBhbGlhc2VzOiBnbG9iLnN5bmMuc3RyZWFtKCkgZ2xvYi5zdHJlYW0uc3luYygpIGdsb2Iuc3luYygpIGV0Y1xuZXhwb3J0cy5zdHJlYW1TeW5jID0gZ2xvYlN0cmVhbVN5bmM7XG5leHBvcnRzLnN0cmVhbSA9IE9iamVjdC5hc3NpZ24oZ2xvYlN0cmVhbSwgeyBzeW5jOiBnbG9iU3RyZWFtU3luYyB9KTtcbmV4cG9ydHMuaXRlcmF0ZVN5bmMgPSBnbG9iSXRlcmF0ZVN5bmM7XG5leHBvcnRzLml0ZXJhdGUgPSBPYmplY3QuYXNzaWduKGdsb2JJdGVyYXRlLCB7XG4gICAgc3luYzogZ2xvYkl0ZXJhdGVTeW5jLFxufSk7XG5leHBvcnRzLnN5bmMgPSBPYmplY3QuYXNzaWduKGdsb2JTeW5jLCB7XG4gICAgc3RyZWFtOiBnbG9iU3RyZWFtU3luYyxcbiAgICBpdGVyYXRlOiBnbG9iSXRlcmF0ZVN5bmMsXG59KTtcbmV4cG9ydHMuZ2xvYiA9IE9iamVjdC5hc3NpZ24oZ2xvYl8sIHtcbiAgICBnbG9iOiBnbG9iXyxcbiAgICBnbG9iU3luYyxcbiAgICBzeW5jOiBleHBvcnRzLnN5bmMsXG4gICAgZ2xvYlN0cmVhbSxcbiAgICBzdHJlYW06IGV4cG9ydHMuc3RyZWFtLFxuICAgIGdsb2JTdHJlYW1TeW5jLFxuICAgIHN0cmVhbVN5bmM6IGV4cG9ydHMuc3RyZWFtU3luYyxcbiAgICBnbG9iSXRlcmF0ZSxcbiAgICBpdGVyYXRlOiBleHBvcnRzLml0ZXJhdGUsXG4gICAgZ2xvYkl0ZXJhdGVTeW5jLFxuICAgIGl0ZXJhdGVTeW5jOiBleHBvcnRzLml0ZXJhdGVTeW5jLFxuICAgIEdsb2I6IGdsb2JfanNfMS5HbG9iLFxuICAgIGhhc01hZ2ljOiBoYXNfbWFnaWNfanNfMS5oYXNNYWdpYyxcbiAgICBlc2NhcGU6IG1pbmltYXRjaF8xLmVzY2FwZSxcbiAgICB1bmVzY2FwZTogbWluaW1hdGNoXzEudW5lc2NhcGUsXG59KTtcbmV4cG9ydHMuZ2xvYi5nbG9iID0gZXhwb3J0cy5nbG9iO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICIvKipcbiAqIGFyY2hpdmVyLXV0aWxzXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTQgQ2hyaXMgVGFsa2luZ3RvbiwgY29udHJpYnV0b3JzLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cHM6Ly9naXRodWIuY29tL2FyY2hpdmVyanMvbm9kZS1hcmNoaXZlci9ibG9iL21hc3Rlci9MSUNFTlNFLU1JVFxuICovXG52YXIgZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpO1xudmFyIHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG5cbnZhciBmbGF0dGVuID0gcmVxdWlyZSgnbG9kYXNoL2ZsYXR0ZW4nKTtcbnZhciBkaWZmZXJlbmNlID0gcmVxdWlyZSgnbG9kYXNoL2RpZmZlcmVuY2UnKTtcbnZhciB1bmlvbiA9IHJlcXVpcmUoJ2xvZGFzaC91bmlvbicpO1xudmFyIGlzUGxhaW5PYmplY3QgPSByZXF1aXJlKCdsb2Rhc2gvaXNQbGFpbk9iamVjdCcpO1xuXG52YXIgZ2xvYiA9IHJlcXVpcmUoJ2dsb2InKTtcblxudmFyIGZpbGUgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xuXG52YXIgcGF0aFNlcGFyYXRvclJlID0gL1tcXC9cXFxcXS9nO1xuXG4vLyBQcm9jZXNzIHNwZWNpZmllZCB3aWxkY2FyZCBnbG9iIHBhdHRlcm5zIG9yIGZpbGVuYW1lcyBhZ2FpbnN0IGFcbi8vIGNhbGxiYWNrLCBleGNsdWRpbmcgYW5kIHVuaXF1aW5nIGZpbGVzIGluIHRoZSByZXN1bHQgc2V0LlxudmFyIHByb2Nlc3NQYXR0ZXJucyA9IGZ1bmN0aW9uKHBhdHRlcm5zLCBmbikge1xuICAvLyBGaWxlcGF0aHMgdG8gcmV0dXJuLlxuICB2YXIgcmVzdWx0ID0gW107XG4gIC8vIEl0ZXJhdGUgb3ZlciBmbGF0dGVuZWQgcGF0dGVybnMgYXJyYXkuXG4gIGZsYXR0ZW4ocGF0dGVybnMpLmZvckVhY2goZnVuY3Rpb24ocGF0dGVybikge1xuICAgIC8vIElmIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaXMgISBpdCBzaG91bGQgYmUgb21pdHRlZFxuICAgIHZhciBleGNsdXNpb24gPSBwYXR0ZXJuLmluZGV4T2YoJyEnKSA9PT0gMDtcbiAgICAvLyBJZiB0aGUgcGF0dGVybiBpcyBhbiBleGNsdXNpb24sIHJlbW92ZSB0aGUgIVxuICAgIGlmIChleGNsdXNpb24pIHsgcGF0dGVybiA9IHBhdHRlcm4uc2xpY2UoMSk7IH1cbiAgICAvLyBGaW5kIGFsbCBtYXRjaGluZyBmaWxlcyBmb3IgdGhpcyBwYXR0ZXJuLlxuICAgIHZhciBtYXRjaGVzID0gZm4ocGF0dGVybik7XG4gICAgaWYgKGV4Y2x1c2lvbikge1xuICAgICAgLy8gSWYgYW4gZXhjbHVzaW9uLCByZW1vdmUgbWF0Y2hpbmcgZmlsZXMuXG4gICAgICByZXN1bHQgPSBkaWZmZXJlbmNlKHJlc3VsdCwgbWF0Y2hlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE90aGVyd2lzZSBhZGQgbWF0Y2hpbmcgZmlsZXMuXG4gICAgICByZXN1bHQgPSB1bmlvbihyZXN1bHQsIG1hdGNoZXMpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG4vLyBUcnVlIGlmIHRoZSBmaWxlIHBhdGggZXhpc3RzLlxuZmlsZS5leGlzdHMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGZpbGVwYXRoID0gcGF0aC5qb2luLmFwcGx5KHBhdGgsIGFyZ3VtZW50cyk7XG4gIHJldHVybiBmcy5leGlzdHNTeW5jKGZpbGVwYXRoKTtcbn07XG5cbi8vIFJldHVybiBhbiBhcnJheSBvZiBhbGwgZmlsZSBwYXRocyB0aGF0IG1hdGNoIHRoZSBnaXZlbiB3aWxkY2FyZCBwYXR0ZXJucy5cbmZpbGUuZXhwYW5kID0gZnVuY3Rpb24oLi4uYXJncykge1xuICAvLyBJZiB0aGUgZmlyc3QgYXJndW1lbnQgaXMgYW4gb3B0aW9ucyBvYmplY3QsIHNhdmUgdGhvc2Ugb3B0aW9ucyB0byBwYXNzXG4gIC8vIGludG8gdGhlIEZpbGUucHJvdG90eXBlLmdsb2Iuc3luYyBtZXRob2QuXG4gIHZhciBvcHRpb25zID0gaXNQbGFpbk9iamVjdChhcmdzWzBdKSA/IGFyZ3Muc2hpZnQoKSA6IHt9O1xuICAvLyBVc2UgdGhlIGZpcnN0IGFyZ3VtZW50IGlmIGl0J3MgYW4gQXJyYXksIG90aGVyd2lzZSBjb252ZXJ0IHRoZSBhcmd1bWVudHNcbiAgLy8gb2JqZWN0IHRvIGFuIGFycmF5IGFuZCB1c2UgdGhhdC5cbiAgdmFyIHBhdHRlcm5zID0gQXJyYXkuaXNBcnJheShhcmdzWzBdKSA/IGFyZ3NbMF0gOiBhcmdzO1xuICAvLyBSZXR1cm4gZW1wdHkgc2V0IGlmIHRoZXJlIGFyZSBubyBwYXR0ZXJucyBvciBmaWxlcGF0aHMuXG4gIGlmIChwYXR0ZXJucy5sZW5ndGggPT09IDApIHsgcmV0dXJuIFtdOyB9XG4gIC8vIFJldHVybiBhbGwgbWF0Y2hpbmcgZmlsZXBhdGhzLlxuICB2YXIgbWF0Y2hlcyA9IHByb2Nlc3NQYXR0ZXJucyhwYXR0ZXJucywgZnVuY3Rpb24ocGF0dGVybikge1xuICAgIC8vIEZpbmQgYWxsIG1hdGNoaW5nIGZpbGVzIGZvciB0aGlzIHBhdHRlcm4uXG4gICAgcmV0dXJuIGdsb2Iuc3luYyhwYXR0ZXJuLCBvcHRpb25zKTtcbiAgfSk7XG4gIC8vIEZpbHRlciByZXN1bHQgc2V0P1xuICBpZiAob3B0aW9ucy5maWx0ZXIpIHtcbiAgICBtYXRjaGVzID0gbWF0Y2hlcy5maWx0ZXIoZnVuY3Rpb24oZmlsZXBhdGgpIHtcbiAgICAgIGZpbGVwYXRoID0gcGF0aC5qb2luKG9wdGlvbnMuY3dkIHx8ICcnLCBmaWxlcGF0aCk7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuZmlsdGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmV0dXJuIG9wdGlvbnMuZmlsdGVyKGZpbGVwYXRoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZmlsZSBpcyBvZiB0aGUgcmlnaHQgdHlwZSBhbmQgZXhpc3RzLCB0aGlzIHNob3VsZCB3b3JrLlxuICAgICAgICAgIHJldHVybiBmcy5zdGF0U3luYyhmaWxlcGF0aClbb3B0aW9ucy5maWx0ZXJdKCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2goZSkge1xuICAgICAgICAvLyBPdGhlcndpc2UsIGl0J3MgcHJvYmFibHkgbm90IHRoZSByaWdodCB0eXBlLlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG1hdGNoZXM7XG59O1xuXG4vLyBCdWlsZCBhIG11bHRpIHRhc2sgXCJmaWxlc1wiIG9iamVjdCBkeW5hbWljYWxseS5cbmZpbGUuZXhwYW5kTWFwcGluZyA9IGZ1bmN0aW9uKHBhdHRlcm5zLCBkZXN0QmFzZSwgb3B0aW9ucykge1xuICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7XG4gICAgcmVuYW1lOiBmdW5jdGlvbihkZXN0QmFzZSwgZGVzdFBhdGgpIHtcbiAgICAgIHJldHVybiBwYXRoLmpvaW4oZGVzdEJhc2UgfHwgJycsIGRlc3RQYXRoKTtcbiAgICB9XG4gIH0sIG9wdGlvbnMpO1xuICB2YXIgZmlsZXMgPSBbXTtcbiAgdmFyIGZpbGVCeURlc3QgPSB7fTtcbiAgLy8gRmluZCBhbGwgZmlsZXMgbWF0Y2hpbmcgcGF0dGVybiwgdXNpbmcgcGFzc2VkLWluIG9wdGlvbnMuXG4gIGZpbGUuZXhwYW5kKG9wdGlvbnMsIHBhdHRlcm5zKS5mb3JFYWNoKGZ1bmN0aW9uKHNyYykge1xuICAgIHZhciBkZXN0UGF0aCA9IHNyYztcbiAgICAvLyBGbGF0dGVuP1xuICAgIGlmIChvcHRpb25zLmZsYXR0ZW4pIHtcbiAgICAgIGRlc3RQYXRoID0gcGF0aC5iYXNlbmFtZShkZXN0UGF0aCk7XG4gICAgfVxuICAgIC8vIENoYW5nZSB0aGUgZXh0ZW5zaW9uP1xuICAgIGlmIChvcHRpb25zLmV4dCkge1xuICAgICAgZGVzdFBhdGggPSBkZXN0UGF0aC5yZXBsYWNlKC8oXFwuW15cXC9dKik/JC8sIG9wdGlvbnMuZXh0KTtcbiAgICB9XG4gICAgLy8gR2VuZXJhdGUgZGVzdGluYXRpb24gZmlsZW5hbWUuXG4gICAgdmFyIGRlc3QgPSBvcHRpb25zLnJlbmFtZShkZXN0QmFzZSwgZGVzdFBhdGgsIG9wdGlvbnMpO1xuICAgIC8vIFByZXBlbmQgY3dkIHRvIHNyYyBwYXRoIGlmIG5lY2Vzc2FyeS5cbiAgICBpZiAob3B0aW9ucy5jd2QpIHsgc3JjID0gcGF0aC5qb2luKG9wdGlvbnMuY3dkLCBzcmMpOyB9XG4gICAgLy8gTm9ybWFsaXplIGZpbGVwYXRocyB0byBiZSB1bml4LXN0eWxlLlxuICAgIGRlc3QgPSBkZXN0LnJlcGxhY2UocGF0aFNlcGFyYXRvclJlLCAnLycpO1xuICAgIHNyYyA9IHNyYy5yZXBsYWNlKHBhdGhTZXBhcmF0b3JSZSwgJy8nKTtcbiAgICAvLyBNYXAgY29ycmVjdCBzcmMgcGF0aCB0byBkZXN0IHBhdGguXG4gICAgaWYgKGZpbGVCeURlc3RbZGVzdF0pIHtcbiAgICAgIC8vIElmIGRlc3QgYWxyZWFkeSBleGlzdHMsIHB1c2ggdGhpcyBzcmMgb250byB0aGF0IGRlc3QncyBzcmMgYXJyYXkuXG4gICAgICBmaWxlQnlEZXN0W2Rlc3RdLnNyYy5wdXNoKHNyYyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE90aGVyd2lzZSBjcmVhdGUgYSBuZXcgc3JjLWRlc3QgZmlsZSBtYXBwaW5nIG9iamVjdC5cbiAgICAgIGZpbGVzLnB1c2goe1xuICAgICAgICBzcmM6IFtzcmNdLFxuICAgICAgICBkZXN0OiBkZXN0LFxuICAgICAgfSk7XG4gICAgICAvLyBBbmQgc3RvcmUgYSByZWZlcmVuY2UgZm9yIGxhdGVyIHVzZS5cbiAgICAgIGZpbGVCeURlc3RbZGVzdF0gPSBmaWxlc1tmaWxlcy5sZW5ndGggLSAxXTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gZmlsZXM7XG59O1xuXG4vLyByZXVzaW5nIGJpdHMgb2YgZ3J1bnQncyBtdWx0aS10YXNrIHNvdXJjZSBub3JtYWxpemF0aW9uXG5maWxlLm5vcm1hbGl6ZUZpbGVzQXJyYXkgPSBmdW5jdGlvbihkYXRhKSB7XG4gIHZhciBmaWxlcyA9IFtdO1xuXG4gIGRhdGEuZm9yRWFjaChmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgcHJvcDtcbiAgICBpZiAoJ3NyYycgaW4gb2JqIHx8ICdkZXN0JyBpbiBvYmopIHtcbiAgICAgIGZpbGVzLnB1c2gob2JqKTtcbiAgICB9XG4gIH0pO1xuXG4gIGlmIChmaWxlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBmaWxlcyA9IF8oZmlsZXMpLmNoYWluKCkuZm9yRWFjaChmdW5jdGlvbihvYmopIHtcbiAgICBpZiAoISgnc3JjJyBpbiBvYmopIHx8ICFvYmouc3JjKSB7IHJldHVybjsgfVxuICAgIC8vIE5vcm1hbGl6ZSAuc3JjIHByb3BlcnRpZXMgdG8gZmxhdHRlbmVkIGFycmF5LlxuICAgIGlmIChBcnJheS5pc0FycmF5KG9iai5zcmMpKSB7XG4gICAgICBvYmouc3JjID0gZmxhdHRlbihvYmouc3JjKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqLnNyYyA9IFtvYmouc3JjXTtcbiAgICB9XG4gIH0pLm1hcChmdW5jdGlvbihvYmopIHtcbiAgICAvLyBCdWlsZCBvcHRpb25zIG9iamVjdCwgcmVtb3ZpbmcgdW53YW50ZWQgcHJvcGVydGllcy5cbiAgICB2YXIgZXhwYW5kT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG9iaik7XG4gICAgZGVsZXRlIGV4cGFuZE9wdGlvbnMuc3JjO1xuICAgIGRlbGV0ZSBleHBhbmRPcHRpb25zLmRlc3Q7XG5cbiAgICAvLyBFeHBhbmQgZmlsZSBtYXBwaW5ncy5cbiAgICBpZiAob2JqLmV4cGFuZCkge1xuICAgICAgcmV0dXJuIGZpbGUuZXhwYW5kTWFwcGluZyhvYmouc3JjLCBvYmouZGVzdCwgZXhwYW5kT3B0aW9ucykubWFwKGZ1bmN0aW9uKG1hcE9iaikge1xuICAgICAgICAvLyBDb3B5IG9iaiBwcm9wZXJ0aWVzIHRvIHJlc3VsdC5cbiAgICAgICAgdmFyIHJlc3VsdCA9IE9iamVjdC5hc3NpZ24oe30sIG9iaik7XG4gICAgICAgIC8vIE1ha2UgYSBjbG9uZSBvZiB0aGUgb3JpZyBvYmogYXZhaWxhYmxlLlxuICAgICAgICByZXN1bHQub3JpZyA9IE9iamVjdC5hc3NpZ24oe30sIG9iaik7XG4gICAgICAgIC8vIFNldCAuc3JjIGFuZCAuZGVzdCwgcHJvY2Vzc2luZyBib3RoIGFzIHRlbXBsYXRlcy5cbiAgICAgICAgcmVzdWx0LnNyYyA9IG1hcE9iai5zcmM7XG4gICAgICAgIHJlc3VsdC5kZXN0ID0gbWFwT2JqLmRlc3Q7XG4gICAgICAgIC8vIFJlbW92ZSB1bndhbnRlZCBwcm9wZXJ0aWVzLlxuICAgICAgICBbJ2V4cGFuZCcsICdjd2QnLCAnZmxhdHRlbicsICdyZW5hbWUnLCAnZXh0J10uZm9yRWFjaChmdW5jdGlvbihwcm9wKSB7XG4gICAgICAgICAgZGVsZXRlIHJlc3VsdFtwcm9wXTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBDb3B5IG9iaiBwcm9wZXJ0aWVzIHRvIHJlc3VsdCwgYWRkaW5nIGFuIC5vcmlnIHByb3BlcnR5LlxuICAgIHZhciByZXN1bHQgPSBPYmplY3QuYXNzaWduKHt9LCBvYmopO1xuICAgIC8vIE1ha2UgYSBjbG9uZSBvZiB0aGUgb3JpZyBvYmogYXZhaWxhYmxlLlxuICAgIHJlc3VsdC5vcmlnID0gT2JqZWN0LmFzc2lnbih7fSwgb2JqKTtcblxuICAgIGlmICgnc3JjJyBpbiByZXN1bHQpIHtcbiAgICAgIC8vIEV4cG9zZSBhbiBleHBhbmQtb24tZGVtYW5kIGdldHRlciBtZXRob2QgYXMgLnNyYy5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXN1bHQsICdzcmMnLCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGdldDogZnVuY3Rpb24gZm4oKSB7XG4gICAgICAgICAgdmFyIHNyYztcbiAgICAgICAgICBpZiAoISgncmVzdWx0JyBpbiBmbikpIHtcbiAgICAgICAgICAgIHNyYyA9IG9iai5zcmM7XG4gICAgICAgICAgICAvLyBJZiBzcmMgaXMgYW4gYXJyYXksIGZsYXR0ZW4gaXQuIE90aGVyd2lzZSwgbWFrZSBpdCBpbnRvIGFuIGFycmF5LlxuICAgICAgICAgICAgc3JjID0gQXJyYXkuaXNBcnJheShzcmMpID8gZmxhdHRlbihzcmMpIDogW3NyY107XG4gICAgICAgICAgICAvLyBFeHBhbmQgc3JjIGZpbGVzLCBtZW1vaXppbmcgcmVzdWx0LlxuICAgICAgICAgICAgZm4ucmVzdWx0ID0gZmlsZS5leHBhbmQoZXhwYW5kT3B0aW9ucywgc3JjKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZuLnJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKCdkZXN0JyBpbiByZXN1bHQpIHtcbiAgICAgIHJlc3VsdC5kZXN0ID0gb2JqLmRlc3Q7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSkuZmxhdHRlbigpLnZhbHVlKCk7XG5cbiAgcmV0dXJuIGZpbGVzO1xufTtcbiIsCiAgICAiLyoqXG4gKiBhcmNoaXZlci11dGlsc1xuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNSBDaHJpcyBUYWxraW5ndG9uLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cHM6Ly9naXRodWIuY29tL2FyY2hpdmVyanMvYXJjaGl2ZXItdXRpbHMvYmxvYi9tYXN0ZXIvTElDRU5TRVxuICovXG52YXIgZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpO1xudmFyIHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG52YXIgaXNTdHJlYW0gPSByZXF1aXJlKCdpcy1zdHJlYW0nKTtcbnZhciBsYXp5c3RyZWFtID0gcmVxdWlyZSgnbGF6eXN0cmVhbScpO1xudmFyIG5vcm1hbGl6ZVBhdGggPSByZXF1aXJlKCdub3JtYWxpemUtcGF0aCcpO1xudmFyIGRlZmF1bHRzID0gcmVxdWlyZSgnbG9kYXNoL2RlZmF1bHRzJyk7XG5cbnZhciBTdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0nKS5TdHJlYW07XG52YXIgUGFzc1Rocm91Z2ggPSByZXF1aXJlKCdyZWFkYWJsZS1zdHJlYW0nKS5QYXNzVGhyb3VnaDtcblxudmFyIHV0aWxzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcbnV0aWxzLmZpbGUgPSByZXF1aXJlKCcuL2ZpbGUuanMnKTtcblxudXRpbHMuY29sbGVjdFN0cmVhbSA9IGZ1bmN0aW9uKHNvdXJjZSwgY2FsbGJhY2spIHtcbiAgdmFyIGNvbGxlY3Rpb24gPSBbXTtcbiAgdmFyIHNpemUgPSAwO1xuXG4gIHNvdXJjZS5vbignZXJyb3InLCBjYWxsYmFjayk7XG5cbiAgc291cmNlLm9uKCdkYXRhJywgZnVuY3Rpb24oY2h1bmspIHtcbiAgICBjb2xsZWN0aW9uLnB1c2goY2h1bmspO1xuICAgIHNpemUgKz0gY2h1bmsubGVuZ3RoO1xuICB9KTtcblxuICBzb3VyY2Uub24oJ2VuZCcsIGZ1bmN0aW9uKCkge1xuICAgIHZhciBidWYgPSBCdWZmZXIuYWxsb2Moc2l6ZSk7XG4gICAgdmFyIG9mZnNldCA9IDA7XG5cbiAgICBjb2xsZWN0aW9uLmZvckVhY2goZnVuY3Rpb24oZGF0YSkge1xuICAgICAgZGF0YS5jb3B5KGJ1Ziwgb2Zmc2V0KTtcbiAgICAgIG9mZnNldCArPSBkYXRhLmxlbmd0aDtcbiAgICB9KTtcblxuICAgIGNhbGxiYWNrKG51bGwsIGJ1Zik7XG4gIH0pO1xufTtcblxudXRpbHMuZGF0ZWlmeSA9IGZ1bmN0aW9uKGRhdGVpc2gpIHtcbiAgZGF0ZWlzaCA9IGRhdGVpc2ggfHwgbmV3IERhdGUoKTtcblxuICBpZiAoZGF0ZWlzaCBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICBkYXRlaXNoID0gZGF0ZWlzaDtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZGF0ZWlzaCA9PT0gJ3N0cmluZycpIHtcbiAgICBkYXRlaXNoID0gbmV3IERhdGUoZGF0ZWlzaCk7XG4gIH0gZWxzZSB7XG4gICAgZGF0ZWlzaCA9IG5ldyBEYXRlKCk7XG4gIH1cblxuICByZXR1cm4gZGF0ZWlzaDtcbn07XG5cbi8vIHRoaXMgaXMgc2xpZ2h0bHkgZGlmZmVyZW50IGZyb20gbG9kYXNoIHZlcnNpb25cbnV0aWxzLmRlZmF1bHRzID0gZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2UsIGd1YXJkKSB7XG4gIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICBhcmdzWzBdID0gYXJnc1swXSB8fCB7fTtcblxuICByZXR1cm4gZGVmYXVsdHMoLi4uYXJncyk7XG59O1xuXG51dGlscy5pc1N0cmVhbSA9IGZ1bmN0aW9uKHNvdXJjZSkge1xuICByZXR1cm4gaXNTdHJlYW0oc291cmNlKTtcbn07XG5cbnV0aWxzLmxhenlSZWFkU3RyZWFtID0gZnVuY3Rpb24oZmlsZXBhdGgpIHtcbiAgcmV0dXJuIG5ldyBsYXp5c3RyZWFtLlJlYWRhYmxlKGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBmcy5jcmVhdGVSZWFkU3RyZWFtKGZpbGVwYXRoKTtcbiAgfSk7XG59O1xuXG51dGlscy5ub3JtYWxpemVJbnB1dFNvdXJjZSA9IGZ1bmN0aW9uKHNvdXJjZSkge1xuICBpZiAoc291cmNlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5hbGxvYygwKTtcbiAgfSBlbHNlIGlmICh0eXBlb2Ygc291cmNlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShzb3VyY2UpO1xuICB9IGVsc2UgaWYgKHV0aWxzLmlzU3RyZWFtKHNvdXJjZSkpIHtcbiAgICAvLyBBbHdheXMgcGlwZSB0aHJvdWdoIGEgUGFzc1Rocm91Z2ggc3RyZWFtIHRvIGd1YXJhbnRlZSBwYXVzaW5nIHRoZSBzdHJlYW0gaWYgaXQncyBhbHJlYWR5IGZsb3dpbmcsXG4gICAgLy8gc2luY2UgaXQgd2lsbCBvbmx5IGJlIHByb2Nlc3NlZCBpbiBhIChkaXN0YW50KSBmdXR1cmUgaXRlcmF0aW9uIG9mIHRoZSBldmVudCBsb29wLCBhbmQgd2lsbCBsb3NlXG4gICAgLy8gZGF0YSBpZiBhbHJlYWR5IGZsb3dpbmcgbm93LlxuICAgIHJldHVybiBzb3VyY2UucGlwZShuZXcgUGFzc1Rocm91Z2goKSk7XG4gIH1cblxuICByZXR1cm4gc291cmNlO1xufTtcblxudXRpbHMuc2FuaXRpemVQYXRoID0gZnVuY3Rpb24oZmlsZXBhdGgpIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZVBhdGgoZmlsZXBhdGgsIGZhbHNlKS5yZXBsYWNlKC9eXFx3KzovLCAnJykucmVwbGFjZSgvXihcXC5cXC5cXC98XFwvKSsvLCAnJyk7XG59O1xuXG51dGlscy50cmFpbGluZ1NsYXNoSXQgPSBmdW5jdGlvbihzdHIpIHtcbiAgcmV0dXJuIHN0ci5zbGljZSgtMSkgIT09ICcvJyA/IHN0ciArICcvJyA6IHN0cjtcbn07XG5cbnV0aWxzLnVuaXhpZnlQYXRoID0gZnVuY3Rpb24oZmlsZXBhdGgpIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZVBhdGgoZmlsZXBhdGgsIGZhbHNlKS5yZXBsYWNlKC9eXFx3KzovLCAnJyk7XG59O1xuXG51dGlscy53YWxrZGlyID0gZnVuY3Rpb24oZGlycGF0aCwgYmFzZSwgY2FsbGJhY2spIHtcbiAgdmFyIHJlc3VsdHMgPSBbXTtcblxuICBpZiAodHlwZW9mIGJhc2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYWxsYmFjayA9IGJhc2U7XG4gICAgYmFzZSA9IGRpcnBhdGg7XG4gIH1cblxuICBmcy5yZWFkZGlyKGRpcnBhdGgsIGZ1bmN0aW9uKGVyciwgbGlzdCkge1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgZmlsZTtcbiAgICB2YXIgZmlsZXBhdGg7XG5cbiAgICBpZiAoZXJyKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICB9XG5cbiAgICAoZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIGZpbGUgPSBsaXN0W2krK107XG5cbiAgICAgIGlmICghZmlsZSkge1xuICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCwgcmVzdWx0cyk7XG4gICAgICB9XG5cbiAgICAgIGZpbGVwYXRoID0gcGF0aC5qb2luKGRpcnBhdGgsIGZpbGUpO1xuXG4gICAgICBmcy5zdGF0KGZpbGVwYXRoLCBmdW5jdGlvbihlcnIsIHN0YXRzKSB7XG4gICAgICAgIHJlc3VsdHMucHVzaCh7XG4gICAgICAgICAgcGF0aDogZmlsZXBhdGgsXG4gICAgICAgICAgcmVsYXRpdmU6IHBhdGgucmVsYXRpdmUoYmFzZSwgZmlsZXBhdGgpLnJlcGxhY2UoL1xcXFwvZywgJy8nKSxcbiAgICAgICAgICBzdGF0czogc3RhdHNcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHN0YXRzICYmIHN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgICB1dGlscy53YWxrZGlyKGZpbGVwYXRoLCBiYXNlLCBmdW5jdGlvbihlcnIsIHJlcykge1xuXHQgICAgaWYoZXJyKXtcblx0ICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG5cdCAgICB9XG5cbiAgICAgICAgICAgIHJlcy5mb3JFYWNoKGZ1bmN0aW9uKGRpckVudHJ5KSB7XG4gICAgICAgICAgICAgIHJlc3VsdHMucHVzaChkaXJFbnRyeSk7XG4gICAgICAgICAgICB9KTtcblx0XHQgIFxuICAgICAgICAgICAgbmV4dCgpOyAgXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KSgpO1xuICB9KTtcbn07XG4iLAogICAgIi8qKlxuICogQXJjaGl2ZXIgQ29yZVxuICpcbiAqIEBpZ25vcmVcbiAqIEBsaWNlbnNlIFtNSVRde0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hcmNoaXZlcmpzL25vZGUtYXJjaGl2ZXIvYmxvYi9tYXN0ZXIvTElDRU5TRX1cbiAqIEBjb3B5cmlnaHQgKGMpIDIwMTItMjAxNCBDaHJpcyBUYWxraW5ndG9uLCBjb250cmlidXRvcnMuXG4gKi9cblxudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG5cbmNvbnN0IEVSUk9SX0NPREVTID0ge1xuICAnQUJPUlRFRCc6ICdhcmNoaXZlIHdhcyBhYm9ydGVkJyxcbiAgJ0RJUkVDVE9SWURJUlBBVEhSRVFVSVJFRCc6ICdkaXJldG9yeSBkaXJwYXRoIGFyZ3VtZW50IG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIHZhbHVlJyxcbiAgJ0RJUkVDVE9SWUZVTkNUSU9OSU5WQUxJRERBVEEnOiAnaW52YWxpZCBkYXRhIHJldHVybmVkIGJ5IGRpcmVjdG9yeSBjdXN0b20gZGF0YSBmdW5jdGlvbicsXG4gICdFTlRSWU5BTUVSRVFVSVJFRCc6ICdlbnRyeSBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIHZhbHVlJyxcbiAgJ0ZJTEVGSUxFUEFUSFJFUVVJUkVEJzogJ2ZpbGUgZmlsZXBhdGggYXJndW1lbnQgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcgdmFsdWUnLFxuICAnRklOQUxJWklORyc6ICdhcmNoaXZlIGFscmVhZHkgZmluYWxpemluZycsXG4gICdRVUVVRUNMT1NFRCc6ICdxdWV1ZSBjbG9zZWQnLFxuICAnTk9FTkRNRVRIT0QnOiAnbm8gc3VpdGFibGUgZmluYWxpemUvZW5kIG1ldGhvZCBkZWZpbmVkIGJ5IG1vZHVsZScsXG4gICdESVJFQ1RPUllOT1RTVVBQT1JURUQnOiAnc3VwcG9ydCBmb3IgZGlyZWN0b3J5IGVudHJpZXMgbm90IGRlZmluZWQgYnkgbW9kdWxlJyxcbiAgJ0ZPUk1BVFNFVCc6ICdhcmNoaXZlIGZvcm1hdCBhbHJlYWR5IHNldCcsXG4gICdJTlBVVFNURUFNQlVGRkVSUkVRVUlSRUQnOiAnaW5wdXQgc291cmNlIG11c3QgYmUgdmFsaWQgU3RyZWFtIG9yIEJ1ZmZlciBpbnN0YW5jZScsXG4gICdNT0RVTEVTRVQnOiAnbW9kdWxlIGFscmVhZHkgc2V0JyxcbiAgJ1NZTUxJTktOT1RTVVBQT1JURUQnOiAnc3VwcG9ydCBmb3Igc3ltbGluayBlbnRyaWVzIG5vdCBkZWZpbmVkIGJ5IG1vZHVsZScsXG4gICdTWU1MSU5LRklMRVBBVEhSRVFVSVJFRCc6ICdzeW1saW5rIGZpbGVwYXRoIGFyZ3VtZW50IG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIHZhbHVlJyxcbiAgJ1NZTUxJTktUQVJHRVRSRVFVSVJFRCc6ICdzeW1saW5rIHRhcmdldCBhcmd1bWVudCBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyB2YWx1ZScsXG4gICdFTlRSWU5PVFNVUFBPUlRFRCc6ICdlbnRyeSBub3Qgc3VwcG9ydGVkJ1xufTtcblxuZnVuY3Rpb24gQXJjaGl2ZXJFcnJvcihjb2RlLCBkYXRhKSB7XG4gIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuICAvL3RoaXMubmFtZSA9IHRoaXMuY29uc3RydWN0b3IubmFtZTtcbiAgdGhpcy5tZXNzYWdlID0gRVJST1JfQ09ERVNbY29kZV0gfHwgY29kZTtcbiAgdGhpcy5jb2RlID0gY29kZTtcbiAgdGhpcy5kYXRhID0gZGF0YTtcbn1cblxudXRpbC5pbmhlcml0cyhBcmNoaXZlckVycm9yLCBFcnJvcik7XG5cbmV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IEFyY2hpdmVyRXJyb3I7IiwKICAgICIvKipcbiAqIEFyY2hpdmVyIENvcmVcbiAqXG4gKiBAaWdub3JlXG4gKiBAbGljZW5zZSBbTUlUXXtAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXJjaGl2ZXJqcy9ub2RlLWFyY2hpdmVyL2Jsb2IvbWFzdGVyL0xJQ0VOU0V9XG4gKiBAY29weXJpZ2h0IChjKSAyMDEyLTIwMTQgQ2hyaXMgVGFsa2luZ3RvbiwgY29udHJpYnV0b3JzLlxuICovXG52YXIgZnMgPSByZXF1aXJlKCdmcycpO1xudmFyIGdsb2IgPSByZXF1aXJlKCdyZWFkZGlyLWdsb2InKTtcbnZhciBhc3luYyA9IHJlcXVpcmUoJ2FzeW5jJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcbnZhciB1dGlsID0gcmVxdWlyZSgnYXJjaGl2ZXItdXRpbHMnKTtcblxudmFyIGluaGVyaXRzID0gcmVxdWlyZSgndXRpbCcpLmluaGVyaXRzO1xudmFyIEFyY2hpdmVyRXJyb3IgPSByZXF1aXJlKCcuL2Vycm9yJyk7XG52YXIgVHJhbnNmb3JtID0gcmVxdWlyZSgncmVhZGFibGUtc3RyZWFtJykuVHJhbnNmb3JtO1xuXG52YXIgd2luMzIgPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInO1xuXG4vKipcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtTdHJpbmd9IGZvcm1hdCBUaGUgYXJjaGl2ZSBmb3JtYXQgdG8gdXNlLlxuICogQHBhcmFtIHsoQ29yZU9wdGlvbnN8VHJhbnNmb3JtT3B0aW9ucyl9IG9wdGlvbnMgU2VlIGFsc28ge0BsaW5rIFppcE9wdGlvbnN9IGFuZCB7QGxpbmsgVGFyT3B0aW9uc30uXG4gKi9cbnZhciBBcmNoaXZlciA9IGZ1bmN0aW9uKGZvcm1hdCwgb3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQXJjaGl2ZXIpKSB7XG4gICAgcmV0dXJuIG5ldyBBcmNoaXZlcihmb3JtYXQsIG9wdGlvbnMpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBmb3JtYXQgIT09ICdzdHJpbmcnKSB7XG4gICAgb3B0aW9ucyA9IGZvcm1hdDtcbiAgICBmb3JtYXQgPSAnemlwJztcbiAgfVxuXG4gIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMgPSB1dGlsLmRlZmF1bHRzKG9wdGlvbnMsIHtcbiAgICBoaWdoV2F0ZXJNYXJrOiAxMDI0ICogMTAyNCxcbiAgICBzdGF0Q29uY3VycmVuY3k6IDRcbiAgfSk7XG5cbiAgVHJhbnNmb3JtLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cbiAgdGhpcy5fZm9ybWF0ID0gZmFsc2U7XG4gIHRoaXMuX21vZHVsZSA9IGZhbHNlO1xuICB0aGlzLl9wZW5kaW5nID0gMDtcbiAgdGhpcy5fcG9pbnRlciA9IDA7XG5cbiAgdGhpcy5fZW50cmllc0NvdW50ID0gMDtcbiAgdGhpcy5fZW50cmllc1Byb2Nlc3NlZENvdW50ID0gMDtcbiAgdGhpcy5fZnNFbnRyaWVzVG90YWxCeXRlcyA9IDA7XG4gIHRoaXMuX2ZzRW50cmllc1Byb2Nlc3NlZEJ5dGVzID0gMDtcblxuICB0aGlzLl9xdWV1ZSA9IGFzeW5jLnF1ZXVlKHRoaXMuX29uUXVldWVUYXNrLmJpbmQodGhpcyksIDEpO1xuICB0aGlzLl9xdWV1ZS5kcmFpbih0aGlzLl9vblF1ZXVlRHJhaW4uYmluZCh0aGlzKSk7XG5cbiAgdGhpcy5fc3RhdFF1ZXVlID0gYXN5bmMucXVldWUodGhpcy5fb25TdGF0UXVldWVUYXNrLmJpbmQodGhpcyksIG9wdGlvbnMuc3RhdENvbmN1cnJlbmN5KTtcbiAgdGhpcy5fc3RhdFF1ZXVlLmRyYWluKHRoaXMuX29uUXVldWVEcmFpbi5iaW5kKHRoaXMpKTtcblxuICB0aGlzLl9zdGF0ZSA9IHtcbiAgICBhYm9ydGVkOiBmYWxzZSxcbiAgICBmaW5hbGl6ZTogZmFsc2UsXG4gICAgZmluYWxpemluZzogZmFsc2UsXG4gICAgZmluYWxpemVkOiBmYWxzZSxcbiAgICBtb2R1bGVQaXBlZDogZmFsc2VcbiAgfTtcblxuICB0aGlzLl9zdHJlYW1zID0gW107XG59O1xuXG5pbmhlcml0cyhBcmNoaXZlciwgVHJhbnNmb3JtKTtcblxuLyoqXG4gKiBJbnRlcm5hbCBsb2dpYyBmb3IgYGFib3J0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB2b2lkXG4gKi9cbkFyY2hpdmVyLnByb3RvdHlwZS5fYWJvcnQgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fc3RhdGUuYWJvcnRlZCA9IHRydWU7XG4gIHRoaXMuX3F1ZXVlLmtpbGwoKTtcbiAgdGhpcy5fc3RhdFF1ZXVlLmtpbGwoKTtcblxuICBpZiAodGhpcy5fcXVldWUuaWRsZSgpKSB7XG4gICAgdGhpcy5fc2h1dGRvd24oKTtcbiAgfVxufTtcblxuLyoqXG4gKiBJbnRlcm5hbCBoZWxwZXIgZm9yIGFwcGVuZGluZyBmaWxlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtICB7U3RyaW5nfSBmaWxlcGF0aCBUaGUgc291cmNlIGZpbGVwYXRoLlxuICogQHBhcmFtICB7RW50cnlEYXRhfSBkYXRhIFRoZSBlbnRyeSBkYXRhLlxuICogQHJldHVybiB2b2lkXG4gKi9cbkFyY2hpdmVyLnByb3RvdHlwZS5fYXBwZW5kID0gZnVuY3Rpb24oZmlsZXBhdGgsIGRhdGEpIHtcbiAgZGF0YSA9IGRhdGEgfHwge307XG5cbiAgdmFyIHRhc2sgPSB7XG4gICAgc291cmNlOiBudWxsLFxuICAgIGZpbGVwYXRoOiBmaWxlcGF0aFxuICB9O1xuXG4gIGlmICghZGF0YS5uYW1lKSB7XG4gICAgZGF0YS5uYW1lID0gZmlsZXBhdGg7XG4gIH1cblxuICBkYXRhLnNvdXJjZVBhdGggPSBmaWxlcGF0aDtcbiAgdGFzay5kYXRhID0gZGF0YTtcbiAgdGhpcy5fZW50cmllc0NvdW50Kys7XG5cbiAgaWYgKGRhdGEuc3RhdHMgJiYgZGF0YS5zdGF0cyBpbnN0YW5jZW9mIGZzLlN0YXRzKSB7XG4gICAgdGFzayA9IHRoaXMuX3VwZGF0ZVF1ZXVlVGFza1dpdGhTdGF0cyh0YXNrLCBkYXRhLnN0YXRzKTtcbiAgICBpZiAodGFzaykge1xuICAgICAgaWYgKGRhdGEuc3RhdHMuc2l6ZSkge1xuICAgICAgICB0aGlzLl9mc0VudHJpZXNUb3RhbEJ5dGVzICs9IGRhdGEuc3RhdHMuc2l6ZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fcXVldWUucHVzaCh0YXNrKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fc3RhdFF1ZXVlLnB1c2godGFzayk7XG4gIH1cbn07XG5cbi8qKlxuICogSW50ZXJuYWwgbG9naWMgZm9yIGBmaW5hbGl6ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4gdm9pZFxuICovXG5BcmNoaXZlci5wcm90b3R5cGUuX2ZpbmFsaXplID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLl9zdGF0ZS5maW5hbGl6aW5nIHx8IHRoaXMuX3N0YXRlLmZpbmFsaXplZCB8fCB0aGlzLl9zdGF0ZS5hYm9ydGVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdGhpcy5fc3RhdGUuZmluYWxpemluZyA9IHRydWU7XG5cbiAgdGhpcy5fbW9kdWxlRmluYWxpemUoKTtcblxuICB0aGlzLl9zdGF0ZS5maW5hbGl6aW5nID0gZmFsc2U7XG4gIHRoaXMuX3N0YXRlLmZpbmFsaXplZCA9IHRydWU7XG59O1xuXG4vKipcbiAqIENoZWNrcyB0aGUgdmFyaW91cyBzdGF0ZSB2YXJpYWJsZXMgdG8gZGV0ZXJtaW5lIGlmIHdlIGNhbiBgZmluYWxpemVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICovXG5BcmNoaXZlci5wcm90b3R5cGUuX21heWJlRmluYWxpemUgPSBmdW5jdGlvbigpIHtcbiAgaWYgKHRoaXMuX3N0YXRlLmZpbmFsaXppbmcgfHwgdGhpcy5fc3RhdGUuZmluYWxpemVkIHx8IHRoaXMuX3N0YXRlLmFib3J0ZWQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAodGhpcy5fc3RhdGUuZmluYWxpemUgJiYgdGhpcy5fcGVuZGluZyA9PT0gMCAmJiB0aGlzLl9xdWV1ZS5pZGxlKCkgJiYgdGhpcy5fc3RhdFF1ZXVlLmlkbGUoKSkge1xuICAgIHRoaXMuX2ZpbmFsaXplKCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIEFwcGVuZHMgYW4gZW50cnkgdG8gdGhlIG1vZHVsZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGZpcmVzICBBcmNoaXZlciNlbnRyeVxuICogQHBhcmFtICB7KEJ1ZmZlcnxTdHJlYW0pfSBzb3VyY2VcbiAqIEBwYXJhbSAge0VudHJ5RGF0YX0gZGF0YVxuICogQHBhcmFtICB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHZvaWRcbiAqL1xuQXJjaGl2ZXIucHJvdG90eXBlLl9tb2R1bGVBcHBlbmQgPSBmdW5jdGlvbihzb3VyY2UsIGRhdGEsIGNhbGxiYWNrKSB7XG4gIGlmICh0aGlzLl9zdGF0ZS5hYm9ydGVkKSB7XG4gICAgY2FsbGJhY2soKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aGlzLl9tb2R1bGUuYXBwZW5kKHNvdXJjZSwgZGF0YSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgdGhpcy5fdGFzayA9IG51bGw7XG5cbiAgICBpZiAodGhpcy5fc3RhdGUuYWJvcnRlZCkge1xuICAgICAgdGhpcy5fc2h1dGRvd24oKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZXJyKSB7XG4gICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgICAgIHNldEltbWVkaWF0ZShjYWxsYmFjayk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiB0aGUgZW50cnkncyBpbnB1dCBoYXMgYmVlbiBwcm9jZXNzZWQgYW5kIGFwcGVuZGVkIHRvIHRoZSBhcmNoaXZlLlxuICAgICAqXG4gICAgICogQGV2ZW50IEFyY2hpdmVyI2VudHJ5XG4gICAgICogQHR5cGUge0VudHJ5RGF0YX1cbiAgICAgKi9cbiAgICB0aGlzLmVtaXQoJ2VudHJ5JywgZGF0YSk7XG4gICAgdGhpcy5fZW50cmllc1Byb2Nlc3NlZENvdW50Kys7XG5cbiAgICBpZiAoZGF0YS5zdGF0cyAmJiBkYXRhLnN0YXRzLnNpemUpIHtcbiAgICAgIHRoaXMuX2ZzRW50cmllc1Byb2Nlc3NlZEJ5dGVzICs9IGRhdGEuc3RhdHMuc2l6ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZXZlbnQgQXJjaGl2ZXIjcHJvZ3Jlc3NcbiAgICAgKiBAdHlwZSB7UHJvZ3Jlc3NEYXRhfVxuICAgICAqL1xuICAgIHRoaXMuZW1pdCgncHJvZ3Jlc3MnLCB7XG4gICAgICBlbnRyaWVzOiB7XG4gICAgICAgIHRvdGFsOiB0aGlzLl9lbnRyaWVzQ291bnQsXG4gICAgICAgIHByb2Nlc3NlZDogdGhpcy5fZW50cmllc1Byb2Nlc3NlZENvdW50XG4gICAgICB9LFxuICAgICAgZnM6IHtcbiAgICAgICAgdG90YWxCeXRlczogdGhpcy5fZnNFbnRyaWVzVG90YWxCeXRlcyxcbiAgICAgICAgcHJvY2Vzc2VkQnl0ZXM6IHRoaXMuX2ZzRW50cmllc1Byb2Nlc3NlZEJ5dGVzXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBzZXRJbW1lZGlhdGUoY2FsbGJhY2spO1xuICB9LmJpbmQodGhpcykpO1xufTtcblxuLyoqXG4gKiBGaW5hbGl6ZXMgdGhlIG1vZHVsZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB2b2lkXG4gKi9cbkFyY2hpdmVyLnByb3RvdHlwZS5fbW9kdWxlRmluYWxpemUgPSBmdW5jdGlvbigpIHtcbiAgaWYgKHR5cGVvZiB0aGlzLl9tb2R1bGUuZmluYWxpemUgPT09ICdmdW5jdGlvbicpIHtcbiAgICB0aGlzLl9tb2R1bGUuZmluYWxpemUoKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5fbW9kdWxlLmVuZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRoaXMuX21vZHVsZS5lbmQoKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmVtaXQoJ2Vycm9yJywgbmV3IEFyY2hpdmVyRXJyb3IoJ05PRU5ETUVUSE9EJykpO1xuICB9XG59O1xuXG4vKipcbiAqIFBpcGVzIHRoZSBtb2R1bGUgdG8gb3VyIGludGVybmFsIHN0cmVhbSB3aXRoIGVycm9yIGJ1YmJsaW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHZvaWRcbiAqL1xuQXJjaGl2ZXIucHJvdG90eXBlLl9tb2R1bGVQaXBlID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX21vZHVsZS5vbignZXJyb3InLCB0aGlzLl9vbk1vZHVsZUVycm9yLmJpbmQodGhpcykpO1xuICB0aGlzLl9tb2R1bGUucGlwZSh0aGlzKTtcbiAgdGhpcy5fc3RhdGUubW9kdWxlUGlwZWQgPSB0cnVlO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIHRoZSBjdXJyZW50IG1vZHVsZSBzdXBwb3J0cyBhIGRlZmluZWQgZmVhdHVyZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtICB7U3RyaW5nfSBrZXlcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKi9cbkFyY2hpdmVyLnByb3RvdHlwZS5fbW9kdWxlU3VwcG9ydHMgPSBmdW5jdGlvbihrZXkpIHtcbiAgaWYgKCF0aGlzLl9tb2R1bGUuc3VwcG9ydHMgfHwgIXRoaXMuX21vZHVsZS5zdXBwb3J0c1trZXldKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuX21vZHVsZS5zdXBwb3J0c1trZXldO1xufTtcblxuLyoqXG4gKiBVbnBpcGVzIHRoZSBtb2R1bGUgZnJvbSBvdXIgaW50ZXJuYWwgc3RyZWFtLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHZvaWRcbiAqL1xuQXJjaGl2ZXIucHJvdG90eXBlLl9tb2R1bGVVbnBpcGUgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fbW9kdWxlLnVucGlwZSh0aGlzKTtcbiAgdGhpcy5fc3RhdGUubW9kdWxlUGlwZWQgPSBmYWxzZTtcbn07XG5cbi8qKlxuICogTm9ybWFsaXplcyBlbnRyeSBkYXRhIHdpdGggZmFsbGJhY2tzIGZvciBrZXkgcHJvcGVydGllcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtICB7T2JqZWN0fSBkYXRhXG4gKiBAcGFyYW0gIHtmcy5TdGF0c30gc3RhdHNcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuQXJjaGl2ZXIucHJvdG90eXBlLl9ub3JtYWxpemVFbnRyeURhdGEgPSBmdW5jdGlvbihkYXRhLCBzdGF0cykge1xuICBkYXRhID0gdXRpbC5kZWZhdWx0cyhkYXRhLCB7XG4gICAgdHlwZTogJ2ZpbGUnLFxuICAgIG5hbWU6IG51bGwsXG4gICAgZGF0ZTogbnVsbCxcbiAgICBtb2RlOiBudWxsLFxuICAgIHByZWZpeDogbnVsbCxcbiAgICBzb3VyY2VQYXRoOiBudWxsLFxuICAgIHN0YXRzOiBmYWxzZVxuICB9KTtcblxuICBpZiAoc3RhdHMgJiYgZGF0YS5zdGF0cyA9PT0gZmFsc2UpIHtcbiAgICBkYXRhLnN0YXRzID0gc3RhdHM7XG4gIH1cblxuICB2YXIgaXNEaXIgPSBkYXRhLnR5cGUgPT09ICdkaXJlY3RvcnknO1xuXG4gIGlmIChkYXRhLm5hbWUpIHtcbiAgICBpZiAodHlwZW9mIGRhdGEucHJlZml4ID09PSAnc3RyaW5nJyAmJiAnJyAhPT0gZGF0YS5wcmVmaXgpIHtcbiAgICAgIGRhdGEubmFtZSA9IGRhdGEucHJlZml4ICsgJy8nICsgZGF0YS5uYW1lO1xuICAgICAgZGF0YS5wcmVmaXggPSBudWxsO1xuICAgIH1cblxuICAgIGRhdGEubmFtZSA9IHV0aWwuc2FuaXRpemVQYXRoKGRhdGEubmFtZSk7XG5cbiAgICBpZiAoZGF0YS50eXBlICE9PSAnc3ltbGluaycgJiYgZGF0YS5uYW1lLnNsaWNlKC0xKSA9PT0gJy8nKSB7XG4gICAgICBpc0RpciA9IHRydWU7XG4gICAgICBkYXRhLnR5cGUgPSAnZGlyZWN0b3J5JztcbiAgICB9IGVsc2UgaWYgKGlzRGlyKSB7XG4gICAgICBkYXRhLm5hbWUgKz0gJy8nO1xuICAgIH1cbiAgfVxuXG4gIC8vIDUxMSA9PT0gMDc3NzsgNDkzID09PSAwNzU1OyA0MzggPT09IDA2NjY7IDQyMCA9PT0gMDY0NFxuICBpZiAodHlwZW9mIGRhdGEubW9kZSA9PT0gJ251bWJlcicpIHtcbiAgICBpZiAod2luMzIpIHtcbiAgICAgIGRhdGEubW9kZSAmPSA1MTE7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGEubW9kZSAmPSA0MDk1XG4gICAgfVxuICB9IGVsc2UgaWYgKGRhdGEuc3RhdHMgJiYgZGF0YS5tb2RlID09PSBudWxsKSB7XG4gICAgaWYgKHdpbjMyKSB7XG4gICAgICBkYXRhLm1vZGUgPSBkYXRhLnN0YXRzLm1vZGUgJiA1MTE7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGEubW9kZSA9IGRhdGEuc3RhdHMubW9kZSAmIDQwOTU7XG4gICAgfVxuXG4gICAgLy8gc3RhdCBpc24ndCByZWxpYWJsZSBvbiB3aW5kb3dzOyBmb3JjZSAwNzU1IGZvciBkaXJcbiAgICBpZiAod2luMzIgJiYgaXNEaXIpIHtcbiAgICAgIGRhdGEubW9kZSA9IDQ5MztcbiAgICB9XG4gIH0gZWxzZSBpZiAoZGF0YS5tb2RlID09PSBudWxsKSB7XG4gICAgZGF0YS5tb2RlID0gaXNEaXIgPyA0OTMgOiA0MjA7XG4gIH1cblxuICBpZiAoZGF0YS5zdGF0cyAmJiBkYXRhLmRhdGUgPT09IG51bGwpIHtcbiAgICBkYXRhLmRhdGUgPSBkYXRhLnN0YXRzLm10aW1lO1xuICB9IGVsc2Uge1xuICAgIGRhdGEuZGF0ZSA9IHV0aWwuZGF0ZWlmeShkYXRhLmRhdGUpO1xuICB9XG5cbiAgcmV0dXJuIGRhdGE7XG59O1xuXG4vKipcbiAqIEVycm9yIGxpc3RlbmVyIHRoYXQgcmUtZW1pdHMgZXJyb3Igb24gdG8gb3VyIGludGVybmFsIHN0cmVhbS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtICB7RXJyb3J9IGVyclxuICogQHJldHVybiB2b2lkXG4gKi9cbkFyY2hpdmVyLnByb3RvdHlwZS5fb25Nb2R1bGVFcnJvciA9IGZ1bmN0aW9uKGVycikge1xuICAvKipcbiAgICogQGV2ZW50IEFyY2hpdmVyI2Vycm9yXG4gICAqIEB0eXBlIHtFcnJvckRhdGF9XG4gICAqL1xuICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHRoZSB2YXJpb3VzIHN0YXRlIHZhcmlhYmxlcyBhZnRlciBxdWV1ZSBoYXMgZHJhaW5lZCB0byBkZXRlcm1pbmUgaWZcbiAqIHdlIG5lZWQgdG8gYGZpbmFsaXplYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB2b2lkXG4gKi9cbkFyY2hpdmVyLnByb3RvdHlwZS5fb25RdWV1ZURyYWluID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLl9zdGF0ZS5maW5hbGl6aW5nIHx8IHRoaXMuX3N0YXRlLmZpbmFsaXplZCB8fCB0aGlzLl9zdGF0ZS5hYm9ydGVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHRoaXMuX3N0YXRlLmZpbmFsaXplICYmIHRoaXMuX3BlbmRpbmcgPT09IDAgJiYgdGhpcy5fcXVldWUuaWRsZSgpICYmIHRoaXMuX3N0YXRRdWV1ZS5pZGxlKCkpIHtcbiAgICB0aGlzLl9maW5hbGl6ZSgpO1xuICB9XG59O1xuXG4vKipcbiAqIEFwcGVuZHMgZWFjaCBxdWV1ZSB0YXNrIHRvIHRoZSBtb2R1bGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSAge09iamVjdH0gdGFza1xuICogQHBhcmFtICB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHZvaWRcbiAqL1xuQXJjaGl2ZXIucHJvdG90eXBlLl9vblF1ZXVlVGFzayA9IGZ1bmN0aW9uKHRhc2ssIGNhbGxiYWNrKSB7XG4gIHZhciBmdWxsQ2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgaWYodGFzay5kYXRhLmNhbGxiYWNrKSB7XG4gICAgICB0YXNrLmRhdGEuY2FsbGJhY2soKTtcbiAgICB9XG4gICAgY2FsbGJhY2soKTtcbiAgfVxuXG4gIGlmICh0aGlzLl9zdGF0ZS5maW5hbGl6aW5nIHx8IHRoaXMuX3N0YXRlLmZpbmFsaXplZCB8fCB0aGlzLl9zdGF0ZS5hYm9ydGVkKSB7XG4gICAgZnVsbENhbGxiYWNrKCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdGhpcy5fdGFzayA9IHRhc2s7XG4gIHRoaXMuX21vZHVsZUFwcGVuZCh0YXNrLnNvdXJjZSwgdGFzay5kYXRhLCBmdWxsQ2FsbGJhY2spO1xufTtcblxuLyoqXG4gKiBQZXJmb3JtcyBhIGZpbGUgc3RhdCBhbmQgcmVpbmplY3RzIHRoZSB0YXNrIGJhY2sgaW50byB0aGUgcXVldWUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSAge09iamVjdH0gdGFza1xuICogQHBhcmFtICB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHZvaWRcbiAqL1xuQXJjaGl2ZXIucHJvdG90eXBlLl9vblN0YXRRdWV1ZVRhc2sgPSBmdW5jdGlvbih0YXNrLCBjYWxsYmFjaykge1xuICBpZiAodGhpcy5fc3RhdGUuZmluYWxpemluZyB8fCB0aGlzLl9zdGF0ZS5maW5hbGl6ZWQgfHwgdGhpcy5fc3RhdGUuYWJvcnRlZCkge1xuICAgIGNhbGxiYWNrKCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZnMubHN0YXQodGFzay5maWxlcGF0aCwgZnVuY3Rpb24oZXJyLCBzdGF0cykge1xuICAgIGlmICh0aGlzLl9zdGF0ZS5hYm9ydGVkKSB7XG4gICAgICBzZXRJbW1lZGlhdGUoY2FsbGJhY2spO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChlcnIpIHtcbiAgICAgIHRoaXMuX2VudHJpZXNDb3VudC0tO1xuXG4gICAgICAvKipcbiAgICAgICAqIEBldmVudCBBcmNoaXZlciN3YXJuaW5nXG4gICAgICAgKiBAdHlwZSB7RXJyb3JEYXRhfVxuICAgICAgICovXG4gICAgICB0aGlzLmVtaXQoJ3dhcm5pbmcnLCBlcnIpO1xuICAgICAgc2V0SW1tZWRpYXRlKGNhbGxiYWNrKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0YXNrID0gdGhpcy5fdXBkYXRlUXVldWVUYXNrV2l0aFN0YXRzKHRhc2ssIHN0YXRzKTtcblxuICAgIGlmICh0YXNrKSB7XG4gICAgICBpZiAoc3RhdHMuc2l6ZSkge1xuICAgICAgICB0aGlzLl9mc0VudHJpZXNUb3RhbEJ5dGVzICs9IHN0YXRzLnNpemU7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3F1ZXVlLnB1c2godGFzayk7XG4gICAgfVxuXG4gICAgc2V0SW1tZWRpYXRlKGNhbGxiYWNrKTtcbiAgfS5iaW5kKHRoaXMpKTtcbn07XG5cbi8qKlxuICogVW5waXBlcyB0aGUgbW9kdWxlIGFuZCBlbmRzIG91ciBpbnRlcm5hbCBzdHJlYW0uXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4gdm9pZFxuICovXG5BcmNoaXZlci5wcm90b3R5cGUuX3NodXRkb3duID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX21vZHVsZVVucGlwZSgpO1xuICB0aGlzLmVuZCgpO1xufTtcblxuLyoqXG4gKiBUcmFja3MgdGhlIGJ5dGVzIGVtaXR0ZWQgYnkgb3VyIGludGVybmFsIHN0cmVhbS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtICB7QnVmZmVyfSBjaHVua1xuICogQHBhcmFtICB7U3RyaW5nfSBlbmNvZGluZ1xuICogQHBhcmFtICB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHZvaWRcbiAqL1xuQXJjaGl2ZXIucHJvdG90eXBlLl90cmFuc2Zvcm0gPSBmdW5jdGlvbihjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gIGlmIChjaHVuaykge1xuICAgIHRoaXMuX3BvaW50ZXIgKz0gY2h1bmsubGVuZ3RoO1xuICB9XG5cbiAgY2FsbGJhY2sobnVsbCwgY2h1bmspO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIGFuZCBub3JtYWxpemVzIGEgcXVldWUgdGFzayB1c2luZyBzdGF0cyBkYXRhLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gIHtPYmplY3R9IHRhc2tcbiAqIEBwYXJhbSAge2ZzLlN0YXRzfSBzdGF0c1xuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5BcmNoaXZlci5wcm90b3R5cGUuX3VwZGF0ZVF1ZXVlVGFza1dpdGhTdGF0cyA9IGZ1bmN0aW9uKHRhc2ssIHN0YXRzKSB7XG4gIGlmIChzdGF0cy5pc0ZpbGUoKSkge1xuICAgIHRhc2suZGF0YS50eXBlID0gJ2ZpbGUnO1xuICAgIHRhc2suZGF0YS5zb3VyY2VUeXBlID0gJ3N0cmVhbSc7XG4gICAgdGFzay5zb3VyY2UgPSB1dGlsLmxhenlSZWFkU3RyZWFtKHRhc2suZmlsZXBhdGgpO1xuICB9IGVsc2UgaWYgKHN0YXRzLmlzRGlyZWN0b3J5KCkgJiYgdGhpcy5fbW9kdWxlU3VwcG9ydHMoJ2RpcmVjdG9yeScpKSB7XG4gICAgdGFzay5kYXRhLm5hbWUgPSB1dGlsLnRyYWlsaW5nU2xhc2hJdCh0YXNrLmRhdGEubmFtZSk7XG4gICAgdGFzay5kYXRhLnR5cGUgPSAnZGlyZWN0b3J5JztcbiAgICB0YXNrLmRhdGEuc291cmNlUGF0aCA9IHV0aWwudHJhaWxpbmdTbGFzaEl0KHRhc2suZmlsZXBhdGgpO1xuICAgIHRhc2suZGF0YS5zb3VyY2VUeXBlID0gJ2J1ZmZlcic7XG4gICAgdGFzay5zb3VyY2UgPSBCdWZmZXIuY29uY2F0KFtdKTtcbiAgfSBlbHNlIGlmIChzdGF0cy5pc1N5bWJvbGljTGluaygpICYmIHRoaXMuX21vZHVsZVN1cHBvcnRzKCdzeW1saW5rJykpIHtcbiAgICB2YXIgbGlua1BhdGggPSBmcy5yZWFkbGlua1N5bmModGFzay5maWxlcGF0aCk7XG4gICAgdmFyIGRpck5hbWUgPSBwYXRoLmRpcm5hbWUodGFzay5maWxlcGF0aCk7XG4gICAgdGFzay5kYXRhLnR5cGUgPSAnc3ltbGluayc7XG4gICAgdGFzay5kYXRhLmxpbmtuYW1lID0gcGF0aC5yZWxhdGl2ZShkaXJOYW1lLCBwYXRoLnJlc29sdmUoZGlyTmFtZSwgbGlua1BhdGgpKTtcbiAgICB0YXNrLmRhdGEuc291cmNlVHlwZSA9ICdidWZmZXInO1xuICAgIHRhc2suc291cmNlID0gQnVmZmVyLmNvbmNhdChbXSk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIHRoaXMuZW1pdCgnd2FybmluZycsIG5ldyBBcmNoaXZlckVycm9yKCdESVJFQ1RPUllOT1RTVVBQT1JURUQnLCB0YXNrLmRhdGEpKTtcbiAgICB9IGVsc2UgaWYgKHN0YXRzLmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICAgIHRoaXMuZW1pdCgnd2FybmluZycsIG5ldyBBcmNoaXZlckVycm9yKCdTWU1MSU5LTk9UU1VQUE9SVEVEJywgdGFzay5kYXRhKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZW1pdCgnd2FybmluZycsIG5ldyBBcmNoaXZlckVycm9yKCdFTlRSWU5PVFNVUFBPUlRFRCcsIHRhc2suZGF0YSkpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdGFzay5kYXRhID0gdGhpcy5fbm9ybWFsaXplRW50cnlEYXRhKHRhc2suZGF0YSwgc3RhdHMpO1xuXG4gIHJldHVybiB0YXNrO1xufTtcblxuLyoqXG4gKiBBYm9ydHMgdGhlIGFyY2hpdmluZyBwcm9jZXNzLCB0YWtpbmcgYSBiZXN0LWVmZm9ydCBhcHByb2FjaCwgYnk6XG4gKlxuICogLSByZW1vdmluZyBhbnkgcGVuZGluZyBxdWV1ZSB0YXNrc1xuICogLSBhbGxvd2luZyBhbnkgYWN0aXZlIHF1ZXVlIHdvcmtlcnMgdG8gZmluaXNoXG4gKiAtIGRldGFjaGluZyBpbnRlcm5hbCBtb2R1bGUgcGlwZXNcbiAqIC0gZW5kaW5nIGJvdGggc2lkZXMgb2YgdGhlIFRyYW5zZm9ybSBzdHJlYW1cbiAqXG4gKiBJdCB3aWxsIE5PVCBkcmFpbiBhbnkgcmVtYWluaW5nIHNvdXJjZXMuXG4gKlxuICogQHJldHVybiB7dGhpc31cbiAqL1xuQXJjaGl2ZXIucHJvdG90eXBlLmFib3J0ID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLl9zdGF0ZS5hYm9ydGVkIHx8IHRoaXMuX3N0YXRlLmZpbmFsaXplZCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdGhpcy5fYWJvcnQoKTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwZW5kcyBhbiBpbnB1dCBzb3VyY2UgKHRleHQgc3RyaW5nLCBidWZmZXIsIG9yIHN0cmVhbSkgdG8gdGhlIGluc3RhbmNlLlxuICpcbiAqIFdoZW4gdGhlIGluc3RhbmNlIGhhcyByZWNlaXZlZCwgcHJvY2Vzc2VkLCBhbmQgZW1pdHRlZCB0aGUgaW5wdXQsIHRoZSBgZW50cnlgXG4gKiBldmVudCBpcyBmaXJlZC5cbiAqXG4gKiBAZmlyZXMgIEFyY2hpdmVyI2VudHJ5XG4gKiBAcGFyYW0gIHsoQnVmZmVyfFN0cmVhbXxTdHJpbmcpfSBzb3VyY2UgVGhlIGlucHV0IHNvdXJjZS5cbiAqIEBwYXJhbSAge0VudHJ5RGF0YX0gZGF0YSBTZWUgYWxzbyB7QGxpbmsgWmlwRW50cnlEYXRhfSBhbmQge0BsaW5rIFRhckVudHJ5RGF0YX0uXG4gKiBAcmV0dXJuIHt0aGlzfVxuICovXG5BcmNoaXZlci5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24oc291cmNlLCBkYXRhKSB7XG4gIGlmICh0aGlzLl9zdGF0ZS5maW5hbGl6ZSB8fCB0aGlzLl9zdGF0ZS5hYm9ydGVkKSB7XG4gICAgdGhpcy5lbWl0KCdlcnJvcicsIG5ldyBBcmNoaXZlckVycm9yKCdRVUVVRUNMT1NFRCcpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGRhdGEgPSB0aGlzLl9ub3JtYWxpemVFbnRyeURhdGEoZGF0YSk7XG5cbiAgaWYgKHR5cGVvZiBkYXRhLm5hbWUgIT09ICdzdHJpbmcnIHx8IGRhdGEubmFtZS5sZW5ndGggPT09IDApIHtcbiAgICB0aGlzLmVtaXQoJ2Vycm9yJywgbmV3IEFyY2hpdmVyRXJyb3IoJ0VOVFJZTkFNRVJFUVVJUkVEJykpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgaWYgKGRhdGEudHlwZSA9PT0gJ2RpcmVjdG9yeScgJiYgIXRoaXMuX21vZHVsZVN1cHBvcnRzKCdkaXJlY3RvcnknKSkge1xuICAgIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgQXJjaGl2ZXJFcnJvcignRElSRUNUT1JZTk9UU1VQUE9SVEVEJywgeyBuYW1lOiBkYXRhLm5hbWUgfSkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc291cmNlID0gdXRpbC5ub3JtYWxpemVJbnB1dFNvdXJjZShzb3VyY2UpO1xuXG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoc291cmNlKSkge1xuICAgIGRhdGEuc291cmNlVHlwZSA9ICdidWZmZXInO1xuICB9IGVsc2UgaWYgKHV0aWwuaXNTdHJlYW0oc291cmNlKSkge1xuICAgIGRhdGEuc291cmNlVHlwZSA9ICdzdHJlYW0nO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgQXJjaGl2ZXJFcnJvcignSU5QVVRTVEVBTUJVRkZFUlJFUVVJUkVEJywgeyBuYW1lOiBkYXRhLm5hbWUgfSkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdGhpcy5fZW50cmllc0NvdW50Kys7XG4gIHRoaXMuX3F1ZXVlLnB1c2goe1xuICAgIGRhdGE6IGRhdGEsXG4gICAgc291cmNlOiBzb3VyY2VcbiAgfSk7XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEFwcGVuZHMgYSBkaXJlY3RvcnkgYW5kIGl0cyBmaWxlcywgcmVjdXJzaXZlbHksIGdpdmVuIGl0cyBkaXJwYXRoLlxuICpcbiAqIEBwYXJhbSAge1N0cmluZ30gZGlycGF0aCBUaGUgc291cmNlIGRpcmVjdG9yeSBwYXRoLlxuICogQHBhcmFtICB7U3RyaW5nfSBkZXN0cGF0aCBUaGUgZGVzdGluYXRpb24gcGF0aCB3aXRoaW4gdGhlIGFyY2hpdmUuXG4gKiBAcGFyYW0gIHsoRW50cnlEYXRhfEZ1bmN0aW9uKX0gZGF0YSBTZWUgYWxzbyBbWmlwRW50cnlEYXRhXXtAbGluayBaaXBFbnRyeURhdGF9IGFuZFxuICogW1RhckVudHJ5RGF0YV17QGxpbmsgVGFyRW50cnlEYXRhfS5cbiAqIEByZXR1cm4ge3RoaXN9XG4gKi9cbkFyY2hpdmVyLnByb3RvdHlwZS5kaXJlY3RvcnkgPSBmdW5jdGlvbihkaXJwYXRoLCBkZXN0cGF0aCwgZGF0YSkge1xuICBpZiAodGhpcy5fc3RhdGUuZmluYWxpemUgfHwgdGhpcy5fc3RhdGUuYWJvcnRlZCkge1xuICAgIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgQXJjaGl2ZXJFcnJvcignUVVFVUVDTE9TRUQnKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBpZiAodHlwZW9mIGRpcnBhdGggIT09ICdzdHJpbmcnIHx8IGRpcnBhdGgubGVuZ3RoID09PSAwKSB7XG4gICAgdGhpcy5lbWl0KCdlcnJvcicsIG5ldyBBcmNoaXZlckVycm9yKCdESVJFQ1RPUllESVJQQVRIUkVRVUlSRUQnKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB0aGlzLl9wZW5kaW5nKys7XG5cbiAgaWYgKGRlc3RwYXRoID09PSBmYWxzZSkge1xuICAgIGRlc3RwYXRoID0gJyc7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGRlc3RwYXRoICE9PSAnc3RyaW5nJyl7XG4gICAgZGVzdHBhdGggPSBkaXJwYXRoO1xuICB9XG5cbiAgdmFyIGRhdGFGdW5jdGlvbiA9IGZhbHNlO1xuICBpZiAodHlwZW9mIGRhdGEgPT09ICdmdW5jdGlvbicpIHtcbiAgICBkYXRhRnVuY3Rpb24gPSBkYXRhO1xuICAgIGRhdGEgPSB7fTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcpIHtcbiAgICBkYXRhID0ge307XG4gIH1cblxuICB2YXIgZ2xvYk9wdGlvbnMgPSB7XG4gICAgc3RhdDogdHJ1ZSxcbiAgICBkb3Q6IHRydWVcbiAgfTtcblxuICBmdW5jdGlvbiBvbkdsb2JFbmQoKSB7XG4gICAgdGhpcy5fcGVuZGluZy0tO1xuICAgIHRoaXMuX21heWJlRmluYWxpemUoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uR2xvYkVycm9yKGVycikge1xuICAgIHRoaXMuZW1pdCgnZXJyb3InLCBlcnIpO1xuICB9XG5cbiAgZnVuY3Rpb24gb25HbG9iTWF0Y2gobWF0Y2gpe1xuICAgIGdsb2JiZXIucGF1c2UoKTtcblxuICAgIHZhciBpZ25vcmVNYXRjaCA9IGZhbHNlO1xuICAgIHZhciBlbnRyeURhdGEgPSBPYmplY3QuYXNzaWduKHt9LCBkYXRhKTtcbiAgICBlbnRyeURhdGEubmFtZSA9IG1hdGNoLnJlbGF0aXZlO1xuICAgIGVudHJ5RGF0YS5wcmVmaXggPSBkZXN0cGF0aDtcbiAgICBlbnRyeURhdGEuc3RhdHMgPSBtYXRjaC5zdGF0O1xuICAgIGVudHJ5RGF0YS5jYWxsYmFjayA9IGdsb2JiZXIucmVzdW1lLmJpbmQoZ2xvYmJlcik7XG5cbiAgICB0cnkge1xuICAgICAgaWYgKGRhdGFGdW5jdGlvbikge1xuICAgICAgICBlbnRyeURhdGEgPSBkYXRhRnVuY3Rpb24oZW50cnlEYXRhKTtcblxuICAgICAgICBpZiAoZW50cnlEYXRhID09PSBmYWxzZSkge1xuICAgICAgICAgIGlnbm9yZU1hdGNoID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZW50cnlEYXRhICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgIHRocm93IG5ldyBBcmNoaXZlckVycm9yKCdESVJFQ1RPUllGVU5DVElPTklOVkFMSUREQVRBJywgeyBkaXJwYXRoOiBkaXJwYXRoIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaChlKSB7XG4gICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGlnbm9yZU1hdGNoKSB7XG4gICAgICBnbG9iYmVyLnJlc3VtZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2FwcGVuZChtYXRjaC5hYnNvbHV0ZSwgZW50cnlEYXRhKTtcbiAgfVxuXG4gIHZhciBnbG9iYmVyID0gZ2xvYihkaXJwYXRoLCBnbG9iT3B0aW9ucyk7XG4gIGdsb2JiZXIub24oJ2Vycm9yJywgb25HbG9iRXJyb3IuYmluZCh0aGlzKSk7XG4gIGdsb2JiZXIub24oJ21hdGNoJywgb25HbG9iTWF0Y2guYmluZCh0aGlzKSk7XG4gIGdsb2JiZXIub24oJ2VuZCcsIG9uR2xvYkVuZC5iaW5kKHRoaXMpKTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwZW5kcyBhIGZpbGUgZ2l2ZW4gaXRzIGZpbGVwYXRoIHVzaW5nIGFcbiAqIFtsYXp5c3RyZWFtXXtAbGluayBodHRwczovL2dpdGh1Yi5jb20vanBvbW1lcmVuaW5nL25vZGUtbGF6eXN0cmVhbX0gd3JhcHBlciB0b1xuICogcHJldmVudCBpc3N1ZXMgd2l0aCBvcGVuIGZpbGUgbGltaXRzLlxuICpcbiAqIFdoZW4gdGhlIGluc3RhbmNlIGhhcyByZWNlaXZlZCwgcHJvY2Vzc2VkLCBhbmQgZW1pdHRlZCB0aGUgZmlsZSwgdGhlIGBlbnRyeWBcbiAqIGV2ZW50IGlzIGZpcmVkLlxuICpcbiAqIEBwYXJhbSAge1N0cmluZ30gZmlsZXBhdGggVGhlIHNvdXJjZSBmaWxlcGF0aC5cbiAqIEBwYXJhbSAge0VudHJ5RGF0YX0gZGF0YSBTZWUgYWxzbyBbWmlwRW50cnlEYXRhXXtAbGluayBaaXBFbnRyeURhdGF9IGFuZFxuICogW1RhckVudHJ5RGF0YV17QGxpbmsgVGFyRW50cnlEYXRhfS5cbiAqIEByZXR1cm4ge3RoaXN9XG4gKi9cbkFyY2hpdmVyLnByb3RvdHlwZS5maWxlID0gZnVuY3Rpb24oZmlsZXBhdGgsIGRhdGEpIHtcbiAgaWYgKHRoaXMuX3N0YXRlLmZpbmFsaXplIHx8IHRoaXMuX3N0YXRlLmFib3J0ZWQpIHtcbiAgICB0aGlzLmVtaXQoJ2Vycm9yJywgbmV3IEFyY2hpdmVyRXJyb3IoJ1FVRVVFQ0xPU0VEJykpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBmaWxlcGF0aCAhPT0gJ3N0cmluZycgfHwgZmlsZXBhdGgubGVuZ3RoID09PSAwKSB7XG4gICAgdGhpcy5lbWl0KCdlcnJvcicsIG5ldyBBcmNoaXZlckVycm9yKCdGSUxFRklMRVBBVEhSRVFVSVJFRCcpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHRoaXMuX2FwcGVuZChmaWxlcGF0aCwgZGF0YSk7XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEFwcGVuZHMgbXVsdGlwbGUgZmlsZXMgdGhhdCBtYXRjaCBhIGdsb2IgcGF0dGVybi5cbiAqXG4gKiBAcGFyYW0gIHtTdHJpbmd9IHBhdHRlcm4gVGhlIFtnbG9iIHBhdHRlcm5de0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9pc2FhY3MvbWluaW1hdGNofSB0byBtYXRjaC5cbiAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9ucyBTZWUgW25vZGUtcmVhZGRpci1nbG9iXXtAbGluayBodHRwczovL2dpdGh1Yi5jb20veXFubi9ub2RlLXJlYWRkaXItZ2xvYiNvcHRpb25zfS5cbiAqIEBwYXJhbSAge0VudHJ5RGF0YX0gZGF0YSBTZWUgYWxzbyBbWmlwRW50cnlEYXRhXXtAbGluayBaaXBFbnRyeURhdGF9IGFuZFxuICogW1RhckVudHJ5RGF0YV17QGxpbmsgVGFyRW50cnlEYXRhfS5cbiAqIEByZXR1cm4ge3RoaXN9XG4gKi9cbkFyY2hpdmVyLnByb3RvdHlwZS5nbG9iID0gZnVuY3Rpb24ocGF0dGVybiwgb3B0aW9ucywgZGF0YSkge1xuICB0aGlzLl9wZW5kaW5nKys7XG5cbiAgb3B0aW9ucyA9IHV0aWwuZGVmYXVsdHMob3B0aW9ucywge1xuICAgIHN0YXQ6IHRydWUsXG4gICAgcGF0dGVybjogcGF0dGVyblxuICB9KTtcblxuICBmdW5jdGlvbiBvbkdsb2JFbmQoKSB7XG4gICAgdGhpcy5fcGVuZGluZy0tO1xuICAgIHRoaXMuX21heWJlRmluYWxpemUoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uR2xvYkVycm9yKGVycikge1xuICAgIHRoaXMuZW1pdCgnZXJyb3InLCBlcnIpO1xuICB9XG5cbiAgZnVuY3Rpb24gb25HbG9iTWF0Y2gobWF0Y2gpe1xuICAgIGdsb2JiZXIucGF1c2UoKTtcbiAgICB2YXIgZW50cnlEYXRhID0gT2JqZWN0LmFzc2lnbih7fSwgZGF0YSk7XG4gICAgZW50cnlEYXRhLmNhbGxiYWNrID0gZ2xvYmJlci5yZXN1bWUuYmluZChnbG9iYmVyKTtcbiAgICBlbnRyeURhdGEuc3RhdHMgPSBtYXRjaC5zdGF0O1xuICAgIGVudHJ5RGF0YS5uYW1lID0gbWF0Y2gucmVsYXRpdmU7XG5cbiAgICB0aGlzLl9hcHBlbmQobWF0Y2guYWJzb2x1dGUsIGVudHJ5RGF0YSk7XG4gIH1cblxuICB2YXIgZ2xvYmJlciA9IGdsb2Iob3B0aW9ucy5jd2QgfHwgJy4nLCBvcHRpb25zKTtcbiAgZ2xvYmJlci5vbignZXJyb3InLCBvbkdsb2JFcnJvci5iaW5kKHRoaXMpKTtcbiAgZ2xvYmJlci5vbignbWF0Y2gnLCBvbkdsb2JNYXRjaC5iaW5kKHRoaXMpKTtcbiAgZ2xvYmJlci5vbignZW5kJywgb25HbG9iRW5kLmJpbmQodGhpcykpO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBGaW5hbGl6ZXMgdGhlIGluc3RhbmNlIGFuZCBwcmV2ZW50cyBmdXJ0aGVyIGFwcGVuZGluZyB0byB0aGUgYXJjaGl2ZVxuICogc3RydWN0dXJlIChxdWV1ZSB3aWxsIGNvbnRpbnVlIHRpbCBkcmFpbmVkKS5cbiAqXG4gKiBUaGUgYGVuZGAsIGBjbG9zZWAgb3IgYGZpbmlzaGAgZXZlbnRzIG9uIHRoZSBkZXN0aW5hdGlvbiBzdHJlYW0gbWF5IGZpcmVcbiAqIHJpZ2h0IGFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2Qgc28geW91IHNob3VsZCBzZXQgbGlzdGVuZXJzIGJlZm9yZWhhbmQgdG9cbiAqIHByb3Blcmx5IGRldGVjdCBzdHJlYW0gY29tcGxldGlvbi5cbiAqXG4gKiBAcmV0dXJuIHtQcm9taXNlfVxuICovXG5BcmNoaXZlci5wcm90b3R5cGUuZmluYWxpemUgPSBmdW5jdGlvbigpIHtcbiAgaWYgKHRoaXMuX3N0YXRlLmFib3J0ZWQpIHtcbiAgICB2YXIgYWJvcnRlZEVycm9yID0gbmV3IEFyY2hpdmVyRXJyb3IoJ0FCT1JURUQnKTtcbiAgICB0aGlzLmVtaXQoJ2Vycm9yJywgYWJvcnRlZEVycm9yKTtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoYWJvcnRlZEVycm9yKTtcbiAgfVxuXG4gIGlmICh0aGlzLl9zdGF0ZS5maW5hbGl6ZSkge1xuICAgIHZhciBmaW5hbGl6aW5nRXJyb3IgPSBuZXcgQXJjaGl2ZXJFcnJvcignRklOQUxJWklORycpO1xuICAgIHRoaXMuZW1pdCgnZXJyb3InLCBmaW5hbGl6aW5nRXJyb3IpO1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChmaW5hbGl6aW5nRXJyb3IpO1xuICB9XG5cbiAgdGhpcy5fc3RhdGUuZmluYWxpemUgPSB0cnVlO1xuXG4gIGlmICh0aGlzLl9wZW5kaW5nID09PSAwICYmIHRoaXMuX3F1ZXVlLmlkbGUoKSAmJiB0aGlzLl9zdGF0UXVldWUuaWRsZSgpKSB7XG4gICAgdGhpcy5fZmluYWxpemUoKTtcbiAgfVxuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgdmFyIGVycm9yZWQ7XG5cbiAgICBzZWxmLl9tb2R1bGUub24oJ2VuZCcsIGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKCFlcnJvcmVkKSB7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgc2VsZi5fbW9kdWxlLm9uKCdlcnJvcicsIGZ1bmN0aW9uKGVycikge1xuICAgICAgZXJyb3JlZCA9IHRydWU7XG4gICAgICByZWplY3QoZXJyKTtcbiAgICB9KVxuICB9KVxufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBtb2R1bGUgZm9ybWF0IG5hbWUgdXNlZCBmb3IgYXJjaGl2aW5nLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBmb3JtYXQgVGhlIG5hbWUgb2YgdGhlIGZvcm1hdC5cbiAqIEByZXR1cm4ge3RoaXN9XG4gKi9cbkFyY2hpdmVyLnByb3RvdHlwZS5zZXRGb3JtYXQgPSBmdW5jdGlvbihmb3JtYXQpIHtcbiAgaWYgKHRoaXMuX2Zvcm1hdCkge1xuICAgIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgQXJjaGl2ZXJFcnJvcignRk9STUFUU0VUJykpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdGhpcy5fZm9ybWF0ID0gZm9ybWF0O1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBtb2R1bGUgdXNlZCBmb3IgYXJjaGl2aW5nLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IG1vZHVsZSBUaGUgZnVuY3Rpb24gZm9yIGFyY2hpdmVyIHRvIGludGVyYWN0IHdpdGguXG4gKiBAcmV0dXJuIHt0aGlzfVxuICovXG5BcmNoaXZlci5wcm90b3R5cGUuc2V0TW9kdWxlID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gIGlmICh0aGlzLl9zdGF0ZS5hYm9ydGVkKSB7XG4gICAgdGhpcy5lbWl0KCdlcnJvcicsIG5ldyBBcmNoaXZlckVycm9yKCdBQk9SVEVEJykpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgaWYgKHRoaXMuX3N0YXRlLm1vZHVsZSkge1xuICAgIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgQXJjaGl2ZXJFcnJvcignTU9EVUxFU0VUJykpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdGhpcy5fbW9kdWxlID0gbW9kdWxlO1xuICB0aGlzLl9tb2R1bGVQaXBlKCk7XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEFwcGVuZHMgYSBzeW1saW5rIHRvIHRoZSBpbnN0YW5jZS5cbiAqXG4gKiBUaGlzIGRvZXMgTk9UIGludGVyYWN0IHdpdGggZmlsZXN5c3RlbSBhbmQgaXMgdXNlZCBmb3IgcHJvZ3JhbW1hdGljYWxseSBjcmVhdGluZyBzeW1saW5rcy5cbiAqXG4gKiBAcGFyYW0gIHtTdHJpbmd9IGZpbGVwYXRoIFRoZSBzeW1saW5rIHBhdGggKHdpdGhpbiBhcmNoaXZlKS5cbiAqIEBwYXJhbSAge1N0cmluZ30gdGFyZ2V0IFRoZSB0YXJnZXQgcGF0aCAod2l0aGluIGFyY2hpdmUpLlxuICogQHBhcmFtICB7TnVtYmVyfSBtb2RlIFNldHMgdGhlIGVudHJ5IHBlcm1pc3Npb25zLlxuICogQHJldHVybiB7dGhpc31cbiAqL1xuQXJjaGl2ZXIucHJvdG90eXBlLnN5bWxpbmsgPSBmdW5jdGlvbihmaWxlcGF0aCwgdGFyZ2V0LCBtb2RlKSB7XG4gIGlmICh0aGlzLl9zdGF0ZS5maW5hbGl6ZSB8fCB0aGlzLl9zdGF0ZS5hYm9ydGVkKSB7XG4gICAgdGhpcy5lbWl0KCdlcnJvcicsIG5ldyBBcmNoaXZlckVycm9yKCdRVUVVRUNMT1NFRCcpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGlmICh0eXBlb2YgZmlsZXBhdGggIT09ICdzdHJpbmcnIHx8IGZpbGVwYXRoLmxlbmd0aCA9PT0gMCkge1xuICAgIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgQXJjaGl2ZXJFcnJvcignU1lNTElOS0ZJTEVQQVRIUkVRVUlSRUQnKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBpZiAodHlwZW9mIHRhcmdldCAhPT0gJ3N0cmluZycgfHwgdGFyZ2V0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgQXJjaGl2ZXJFcnJvcignU1lNTElOS1RBUkdFVFJFUVVJUkVEJywgeyBmaWxlcGF0aDogZmlsZXBhdGggfSkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgaWYgKCF0aGlzLl9tb2R1bGVTdXBwb3J0cygnc3ltbGluaycpKSB7XG4gICAgdGhpcy5lbWl0KCdlcnJvcicsIG5ldyBBcmNoaXZlckVycm9yKCdTWU1MSU5LTk9UU1VQUE9SVEVEJywgeyBmaWxlcGF0aDogZmlsZXBhdGggfSkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdmFyIGRhdGEgPSB7fTtcbiAgZGF0YS50eXBlID0gJ3N5bWxpbmsnO1xuICBkYXRhLm5hbWUgPSBmaWxlcGF0aC5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG4gIGRhdGEubGlua25hbWUgPSB0YXJnZXQucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuICBkYXRhLnNvdXJjZVR5cGUgPSAnYnVmZmVyJztcblxuICBpZiAodHlwZW9mIG1vZGUgPT09IFwibnVtYmVyXCIpIHtcbiAgICBkYXRhLm1vZGUgPSBtb2RlO1xuICB9XG5cbiAgdGhpcy5fZW50cmllc0NvdW50Kys7XG4gIHRoaXMuX3F1ZXVlLnB1c2goe1xuICAgIGRhdGE6IGRhdGEsXG4gICAgc291cmNlOiBCdWZmZXIuY29uY2F0KFtdKVxuICB9KTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY3VycmVudCBsZW5ndGggKGluIGJ5dGVzKSB0aGF0IGhhcyBiZWVuIGVtaXR0ZWQuXG4gKlxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG5BcmNoaXZlci5wcm90b3R5cGUucG9pbnRlciA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5fcG9pbnRlcjtcbn07XG5cbi8qKlxuICogTWlkZGxld2FyZS1saWtlIGhlbHBlciB0aGF0IGhhcyB5ZXQgdG8gYmUgZnVsbHkgaW1wbGVtZW50ZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBwbHVnaW5cbiAqIEByZXR1cm4ge3RoaXN9XG4gKi9cbkFyY2hpdmVyLnByb3RvdHlwZS51c2UgPSBmdW5jdGlvbihwbHVnaW4pIHtcbiAgdGhpcy5fc3RyZWFtcy5wdXNoKHBsdWdpbik7XG4gIHJldHVybiB0aGlzO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBBcmNoaXZlcjtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBDb3JlT3B0aW9uc1xuICogQGdsb2JhbFxuICogQHByb3BlcnR5IHtOdW1iZXJ9IFtzdGF0Q29uY3VycmVuY3k9NF0gU2V0cyB0aGUgbnVtYmVyIG9mIHdvcmtlcnMgdXNlZCB0b1xuICogcHJvY2VzcyB0aGUgaW50ZXJuYWwgZnMgc3RhdCBxdWV1ZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFRyYW5zZm9ybU9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gW2FsbG93SGFsZk9wZW49dHJ1ZV0gSWYgc2V0IHRvIGZhbHNlLCB0aGVuIHRoZSBzdHJlYW1cbiAqIHdpbGwgYXV0b21hdGljYWxseSBlbmQgdGhlIHJlYWRhYmxlIHNpZGUgd2hlbiB0aGUgd3JpdGFibGUgc2lkZSBlbmRzIGFuZCB2aWNlXG4gKiB2ZXJzYS5cbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gW3JlYWRhYmxlT2JqZWN0TW9kZT1mYWxzZV0gU2V0cyBvYmplY3RNb2RlIGZvciByZWFkYWJsZVxuICogc2lkZSBvZiB0aGUgc3RyZWFtLiBIYXMgbm8gZWZmZWN0IGlmIG9iamVjdE1vZGUgaXMgdHJ1ZS5cbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gW3dyaXRhYmxlT2JqZWN0TW9kZT1mYWxzZV0gU2V0cyBvYmplY3RNb2RlIGZvciB3cml0YWJsZVxuICogc2lkZSBvZiB0aGUgc3RyZWFtLiBIYXMgbm8gZWZmZWN0IGlmIG9iamVjdE1vZGUgaXMgdHJ1ZS5cbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gW2RlY29kZVN0cmluZ3M9dHJ1ZV0gV2hldGhlciBvciBub3QgdG8gZGVjb2RlIHN0cmluZ3NcbiAqIGludG8gQnVmZmVycyBiZWZvcmUgcGFzc2luZyB0aGVtIHRvIF93cml0ZSgpLiBgV3JpdGFibGVgXG4gKiBAcHJvcGVydHkge1N0cmluZ30gW2VuY29kaW5nPU5VTExdIElmIHNwZWNpZmllZCwgdGhlbiBidWZmZXJzIHdpbGwgYmUgZGVjb2RlZFxuICogdG8gc3RyaW5ncyB1c2luZyB0aGUgc3BlY2lmaWVkIGVuY29kaW5nLiBgUmVhZGFibGVgXG4gKiBAcHJvcGVydHkge051bWJlcn0gW2hpZ2hXYXRlck1hcms9MTZrYl0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIHN0b3JlXG4gKiBpbiB0aGUgaW50ZXJuYWwgYnVmZmVyIGJlZm9yZSBjZWFzaW5nIHRvIHJlYWQgZnJvbSB0aGUgdW5kZXJseWluZyByZXNvdXJjZS5cbiAqIGBSZWFkYWJsZWAgYFdyaXRhYmxlYFxuICogQHByb3BlcnR5IHtCb29sZWFufSBbb2JqZWN0TW9kZT1mYWxzZV0gV2hldGhlciB0aGlzIHN0cmVhbSBzaG91bGQgYmVoYXZlIGFzIGFcbiAqIHN0cmVhbSBvZiBvYmplY3RzLiBNZWFuaW5nIHRoYXQgc3RyZWFtLnJlYWQobikgcmV0dXJucyBhIHNpbmdsZSB2YWx1ZSBpbnN0ZWFkXG4gKiBvZiBhIEJ1ZmZlciBvZiBzaXplIG4uIGBSZWFkYWJsZWAgYFdyaXRhYmxlYFxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gRW50cnlEYXRhXG4gKiBAcHJvcGVydHkge1N0cmluZ30gbmFtZSBTZXRzIHRoZSBlbnRyeSBuYW1lIGluY2x1ZGluZyBpbnRlcm5hbCBwYXRoLlxuICogQHByb3BlcnR5IHsoU3RyaW5nfERhdGUpfSBbZGF0ZT1OT1coKV0gU2V0cyB0aGUgZW50cnkgZGF0ZS5cbiAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBbbW9kZT1EOjA3NTUvRjowNjQ0XSBTZXRzIHRoZSBlbnRyeSBwZXJtaXNzaW9ucy5cbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBbcHJlZml4XSBTZXRzIGEgcGF0aCBwcmVmaXggZm9yIHRoZSBlbnRyeSBuYW1lLiBVc2VmdWxcbiAqIHdoZW4gd29ya2luZyB3aXRoIG1ldGhvZHMgbGlrZSBgZGlyZWN0b3J5YCBvciBgZ2xvYmAuXG4gKiBAcHJvcGVydHkge2ZzLlN0YXRzfSBbc3RhdHNdIFNldHMgdGhlIGZzIHN0YXQgZGF0YSBmb3IgdGhpcyBlbnRyeSBhbGxvd2luZ1xuICogZm9yIHJlZHVjdGlvbiBvZiBmcyBzdGF0IGNhbGxzIHdoZW4gc3RhdCBkYXRhIGlzIGFscmVhZHkga25vd24uXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBFcnJvckRhdGFcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIG9mIHRoZSBlcnJvci5cbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBjb2RlIFRoZSBlcnJvciBjb2RlIGFzc2lnbmVkIHRvIHRoaXMgZXJyb3IuXG4gKiBAcHJvcGVydHkge1N0cmluZ30gZGF0YSBBZGRpdGlvbmFsIGRhdGEgcHJvdmlkZWQgZm9yIHJlcG9ydGluZyBvciBkZWJ1Z2dpbmcgKHdoZXJlIGF2YWlsYWJsZSkuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBQcm9ncmVzc0RhdGFcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBlbnRyaWVzXG4gKiBAcHJvcGVydHkge051bWJlcn0gZW50cmllcy50b3RhbCBOdW1iZXIgb2YgZW50cmllcyB0aGF0IGhhdmUgYmVlbiBhcHBlbmRlZC5cbiAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBlbnRyaWVzLnByb2Nlc3NlZCBOdW1iZXIgb2YgZW50cmllcyB0aGF0IGhhdmUgYmVlbiBwcm9jZXNzZWQuXG4gKiBAcHJvcGVydHkge09iamVjdH0gZnNcbiAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBmcy50b3RhbEJ5dGVzIE51bWJlciBvZiBieXRlcyB0aGF0IGhhdmUgYmVlbiBhcHBlbmRlZC4gQ2FsY3VsYXRlZCBhc3luY2hyb25vdXNseSBhbmQgbWlnaHQgbm90IGJlIGFjY3VyYXRlOiBpdCBncm93dGggd2hpbGUgZW50cmllcyBhcmUgYWRkZWQuIChiYXNlZCBvbiBmcy5TdGF0cylcbiAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBmcy5wcm9jZXNzZWRCeXRlcyBOdW1iZXIgb2YgYnl0ZXMgdGhhdCBoYXZlIGJlZW4gcHJvY2Vzc2VkLiAoYmFzZWQgb24gZnMuU3RhdHMpXG4gKi9cbiIsCiAgICAiLyoqXG4gKiBub2RlLWNvbXByZXNzLWNvbW1vbnNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQgQ2hyaXMgVGFsa2luZ3RvbiwgY29udHJpYnV0b3JzLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cHM6Ly9naXRodWIuY29tL2FyY2hpdmVyanMvbm9kZS1jb21wcmVzcy1jb21tb25zL2Jsb2IvbWFzdGVyL0xJQ0VOU0UtTUlUXG4gKi9cbnZhciBBcmNoaXZlRW50cnkgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge307XG5cbkFyY2hpdmVFbnRyeS5wcm90b3R5cGUuZ2V0TmFtZSA9IGZ1bmN0aW9uKCkge307XG5cbkFyY2hpdmVFbnRyeS5wcm90b3R5cGUuZ2V0U2l6ZSA9IGZ1bmN0aW9uKCkge307XG5cbkFyY2hpdmVFbnRyeS5wcm90b3R5cGUuZ2V0TGFzdE1vZGlmaWVkRGF0ZSA9IGZ1bmN0aW9uKCkge307XG5cbkFyY2hpdmVFbnRyeS5wcm90b3R5cGUuaXNEaXJlY3RvcnkgPSBmdW5jdGlvbigpIHt9OyIsCiAgICAiLyoqXG4gKiBub2RlLWNvbXByZXNzLWNvbW1vbnNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQgQ2hyaXMgVGFsa2luZ3RvbiwgY29udHJpYnV0b3JzLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cHM6Ly9naXRodWIuY29tL2FyY2hpdmVyanMvbm9kZS1jb21wcmVzcy1jb21tb25zL2Jsb2IvbWFzdGVyL0xJQ0VOU0UtTUlUXG4gKi9cbnZhciB1dGlsID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcblxudXRpbC5kYXRlVG9Eb3MgPSBmdW5jdGlvbihkLCBmb3JjZUxvY2FsVGltZSkge1xuICBmb3JjZUxvY2FsVGltZSA9IGZvcmNlTG9jYWxUaW1lIHx8IGZhbHNlO1xuXG4gIHZhciB5ZWFyID0gZm9yY2VMb2NhbFRpbWUgPyBkLmdldEZ1bGxZZWFyKCkgOiBkLmdldFVUQ0Z1bGxZZWFyKCk7XG5cbiAgaWYgKHllYXIgPCAxOTgwKSB7XG4gICAgcmV0dXJuIDIxNjI2ODg7IC8vIDE5ODAtMS0xIDAwOjAwOjAwXG4gIH0gZWxzZSBpZiAoeWVhciA+PSAyMDQ0KSB7XG4gICAgcmV0dXJuIDIxNDExNzU2Nzc7IC8vIDIwNDMtMTItMzEgMjM6NTk6NThcbiAgfVxuXG4gIHZhciB2YWwgPSB7XG4gICAgeWVhcjogeWVhcixcbiAgICBtb250aDogZm9yY2VMb2NhbFRpbWUgPyBkLmdldE1vbnRoKCkgOiBkLmdldFVUQ01vbnRoKCksXG4gICAgZGF0ZTogZm9yY2VMb2NhbFRpbWUgPyBkLmdldERhdGUoKSA6IGQuZ2V0VVRDRGF0ZSgpLFxuICAgIGhvdXJzOiBmb3JjZUxvY2FsVGltZSA/IGQuZ2V0SG91cnMoKSA6IGQuZ2V0VVRDSG91cnMoKSxcbiAgICBtaW51dGVzOiBmb3JjZUxvY2FsVGltZSA/IGQuZ2V0TWludXRlcygpIDogZC5nZXRVVENNaW51dGVzKCksXG4gICAgc2Vjb25kczogZm9yY2VMb2NhbFRpbWUgPyBkLmdldFNlY29uZHMoKSA6IGQuZ2V0VVRDU2Vjb25kcygpXG4gIH07XG5cbiAgcmV0dXJuICgodmFsLnllYXIgLSAxOTgwKSA8PCAyNSkgfCAoKHZhbC5tb250aCArIDEpIDw8IDIxKSB8ICh2YWwuZGF0ZSA8PCAxNikgfFxuICAgICh2YWwuaG91cnMgPDwgMTEpIHwgKHZhbC5taW51dGVzIDw8IDUpIHwgKHZhbC5zZWNvbmRzIC8gMik7XG59O1xuXG51dGlsLmRvc1RvRGF0ZSA9IGZ1bmN0aW9uKGRvcykge1xuICByZXR1cm4gbmV3IERhdGUoKChkb3MgPj4gMjUpICYgMHg3ZikgKyAxOTgwLCAoKGRvcyA+PiAyMSkgJiAweDBmKSAtIDEsIChkb3MgPj4gMTYpICYgMHgxZiwgKGRvcyA+PiAxMSkgJiAweDFmLCAoZG9zID4+IDUpICYgMHgzZiwgKGRvcyAmIDB4MWYpIDw8IDEpO1xufTtcblxudXRpbC5mcm9tRG9zVGltZSA9IGZ1bmN0aW9uKGJ1Zikge1xuICByZXR1cm4gdXRpbC5kb3NUb0RhdGUoYnVmLnJlYWRVSW50MzJMRSgwKSk7XG59O1xuXG51dGlsLmdldEVpZ2h0Qnl0ZXMgPSBmdW5jdGlvbih2KSB7XG4gIHZhciBidWYgPSBCdWZmZXIuYWxsb2MoOCk7XG4gIGJ1Zi53cml0ZVVJbnQzMkxFKHYgJSAweDAxMDAwMDAwMDAsIDApO1xuICBidWYud3JpdGVVSW50MzJMRSgodiAvIDB4MDEwMDAwMDAwMCkgfCAwLCA0KTtcblxuICByZXR1cm4gYnVmO1xufTtcblxudXRpbC5nZXRTaG9ydEJ5dGVzID0gZnVuY3Rpb24odikge1xuICB2YXIgYnVmID0gQnVmZmVyLmFsbG9jKDIpO1xuICBidWYud3JpdGVVSW50MTZMRSgodiAmIDB4RkZGRikgPj4+IDAsIDApO1xuXG4gIHJldHVybiBidWY7XG59O1xuXG51dGlsLmdldFNob3J0Qnl0ZXNWYWx1ZSA9IGZ1bmN0aW9uKGJ1Ziwgb2Zmc2V0KSB7XG4gIHJldHVybiBidWYucmVhZFVJbnQxNkxFKG9mZnNldCk7XG59O1xuXG51dGlsLmdldExvbmdCeXRlcyA9IGZ1bmN0aW9uKHYpIHtcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvYyg0KTtcbiAgYnVmLndyaXRlVUludDMyTEUoKHYgJiAweEZGRkZGRkZGKSA+Pj4gMCwgMCk7XG5cbiAgcmV0dXJuIGJ1Zjtcbn07XG5cbnV0aWwuZ2V0TG9uZ0J5dGVzVmFsdWUgPSBmdW5jdGlvbihidWYsIG9mZnNldCkge1xuICByZXR1cm4gYnVmLnJlYWRVSW50MzJMRShvZmZzZXQpO1xufTtcblxudXRpbC50b0Rvc1RpbWUgPSBmdW5jdGlvbihkKSB7XG4gIHJldHVybiB1dGlsLmdldExvbmdCeXRlcyh1dGlsLmRhdGVUb0RvcyhkKSk7XG59OyIsCiAgICAiLyoqXG4gKiBub2RlLWNvbXByZXNzLWNvbW1vbnNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQgQ2hyaXMgVGFsa2luZ3RvbiwgY29udHJpYnV0b3JzLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cHM6Ly9naXRodWIuY29tL2FyY2hpdmVyanMvbm9kZS1jb21wcmVzcy1jb21tb25zL2Jsb2IvbWFzdGVyL0xJQ0VOU0UtTUlUXG4gKi9cbnZhciB6aXBVdGlsID0gcmVxdWlyZSgnLi91dGlsJyk7XG5cbnZhciBEQVRBX0RFU0NSSVBUT1JfRkxBRyA9IDEgPDwgMztcbnZhciBFTkNSWVBUSU9OX0ZMQUcgPSAxIDw8IDA7XG52YXIgTlVNQkVSX09GX1NIQU5OT05fRkFOT19UUkVFU19GTEFHID0gMSA8PCAyO1xudmFyIFNMSURJTkdfRElDVElPTkFSWV9TSVpFX0ZMQUcgPSAxIDw8IDE7XG52YXIgU1RST05HX0VOQ1JZUFRJT05fRkxBRyA9IDEgPDwgNjtcbnZhciBVRlQ4X05BTUVTX0ZMQUcgPSAxIDw8IDExO1xuXG52YXIgR2VuZXJhbFB1cnBvc2VCaXQgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgR2VuZXJhbFB1cnBvc2VCaXQpKSB7XG4gICAgcmV0dXJuIG5ldyBHZW5lcmFsUHVycG9zZUJpdCgpO1xuICB9XG5cbiAgdGhpcy5kZXNjcmlwdG9yID0gZmFsc2U7XG4gIHRoaXMuZW5jcnlwdGlvbiA9IGZhbHNlO1xuICB0aGlzLnV0ZjggPSBmYWxzZTtcbiAgdGhpcy5udW1iZXJPZlNoYW5ub25GYW5vVHJlZXMgPSAwO1xuICB0aGlzLnN0cm9uZ0VuY3J5cHRpb24gPSBmYWxzZTtcbiAgdGhpcy5zbGlkaW5nRGljdGlvbmFyeVNpemUgPSAwO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuR2VuZXJhbFB1cnBvc2VCaXQucHJvdG90eXBlLmVuY29kZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gemlwVXRpbC5nZXRTaG9ydEJ5dGVzKFxuICAgICh0aGlzLmRlc2NyaXB0b3IgPyBEQVRBX0RFU0NSSVBUT1JfRkxBRyA6IDApIHxcbiAgICAodGhpcy51dGY4ID8gVUZUOF9OQU1FU19GTEFHIDogMCkgfFxuICAgICh0aGlzLmVuY3J5cHRpb24gPyBFTkNSWVBUSU9OX0ZMQUcgOiAwKSB8XG4gICAgKHRoaXMuc3Ryb25nRW5jcnlwdGlvbiA/IFNUUk9OR19FTkNSWVBUSU9OX0ZMQUcgOiAwKVxuICApO1xufTtcblxuR2VuZXJhbFB1cnBvc2VCaXQucHJvdG90eXBlLnBhcnNlID0gZnVuY3Rpb24oYnVmLCBvZmZzZXQpIHtcbiAgdmFyIGZsYWcgPSB6aXBVdGlsLmdldFNob3J0Qnl0ZXNWYWx1ZShidWYsIG9mZnNldCk7XG4gIHZhciBnYnAgPSBuZXcgR2VuZXJhbFB1cnBvc2VCaXQoKTtcblxuICBnYnAudXNlRGF0YURlc2NyaXB0b3IoKGZsYWcgJiBEQVRBX0RFU0NSSVBUT1JfRkxBRykgIT09IDApO1xuICBnYnAudXNlVVRGOEZvck5hbWVzKChmbGFnICYgVUZUOF9OQU1FU19GTEFHKSAhPT0gMCk7XG4gIGdicC51c2VTdHJvbmdFbmNyeXB0aW9uKChmbGFnICYgU1RST05HX0VOQ1JZUFRJT05fRkxBRykgIT09IDApO1xuICBnYnAudXNlRW5jcnlwdGlvbigoZmxhZyAmIEVOQ1JZUFRJT05fRkxBRykgIT09IDApO1xuICBnYnAuc2V0U2xpZGluZ0RpY3Rpb25hcnlTaXplKChmbGFnICYgU0xJRElOR19ESUNUSU9OQVJZX1NJWkVfRkxBRykgIT09IDAgPyA4MTkyIDogNDA5Nik7XG4gIGdicC5zZXROdW1iZXJPZlNoYW5ub25GYW5vVHJlZXMoKGZsYWcgJiBOVU1CRVJfT0ZfU0hBTk5PTl9GQU5PX1RSRUVTX0ZMQUcpICE9PSAwID8gMyA6IDIpO1xuXG4gIHJldHVybiBnYnA7XG59O1xuXG5HZW5lcmFsUHVycG9zZUJpdC5wcm90b3R5cGUuc2V0TnVtYmVyT2ZTaGFubm9uRmFub1RyZWVzID0gZnVuY3Rpb24obikge1xuICB0aGlzLm51bWJlck9mU2hhbm5vbkZhbm9UcmVlcyA9IG47XG59O1xuXG5HZW5lcmFsUHVycG9zZUJpdC5wcm90b3R5cGUuZ2V0TnVtYmVyT2ZTaGFubm9uRmFub1RyZWVzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLm51bWJlck9mU2hhbm5vbkZhbm9UcmVlcztcbn07XG5cbkdlbmVyYWxQdXJwb3NlQml0LnByb3RvdHlwZS5zZXRTbGlkaW5nRGljdGlvbmFyeVNpemUgPSBmdW5jdGlvbihuKSB7XG4gIHRoaXMuc2xpZGluZ0RpY3Rpb25hcnlTaXplID0gbjtcbn07XG5cbkdlbmVyYWxQdXJwb3NlQml0LnByb3RvdHlwZS5nZXRTbGlkaW5nRGljdGlvbmFyeVNpemUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2xpZGluZ0RpY3Rpb25hcnlTaXplO1xufTtcblxuR2VuZXJhbFB1cnBvc2VCaXQucHJvdG90eXBlLnVzZURhdGFEZXNjcmlwdG9yID0gZnVuY3Rpb24oYikge1xuICB0aGlzLmRlc2NyaXB0b3IgPSBiO1xufTtcblxuR2VuZXJhbFB1cnBvc2VCaXQucHJvdG90eXBlLnVzZXNEYXRhRGVzY3JpcHRvciA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5kZXNjcmlwdG9yO1xufTtcblxuR2VuZXJhbFB1cnBvc2VCaXQucHJvdG90eXBlLnVzZUVuY3J5cHRpb24gPSBmdW5jdGlvbihiKSB7XG4gIHRoaXMuZW5jcnlwdGlvbiA9IGI7XG59O1xuXG5HZW5lcmFsUHVycG9zZUJpdC5wcm90b3R5cGUudXNlc0VuY3J5cHRpb24gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZW5jcnlwdGlvbjtcbn07XG5cbkdlbmVyYWxQdXJwb3NlQml0LnByb3RvdHlwZS51c2VTdHJvbmdFbmNyeXB0aW9uID0gZnVuY3Rpb24oYikge1xuICB0aGlzLnN0cm9uZ0VuY3J5cHRpb24gPSBiO1xufTtcblxuR2VuZXJhbFB1cnBvc2VCaXQucHJvdG90eXBlLnVzZXNTdHJvbmdFbmNyeXB0aW9uID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnN0cm9uZ0VuY3J5cHRpb247XG59O1xuXG5HZW5lcmFsUHVycG9zZUJpdC5wcm90b3R5cGUudXNlVVRGOEZvck5hbWVzID0gZnVuY3Rpb24oYikge1xuICB0aGlzLnV0ZjggPSBiO1xufTtcblxuR2VuZXJhbFB1cnBvc2VCaXQucHJvdG90eXBlLnVzZXNVVEY4Rm9yTmFtZXMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMudXRmODtcbn07IiwKICAgICIvKipcbiAqIG5vZGUtY29tcHJlc3MtY29tbW9uc1xuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNCBDaHJpcyBUYWxraW5ndG9uLCBjb250cmlidXRvcnMuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBodHRwczovL2dpdGh1Yi5jb20vYXJjaGl2ZXJqcy9ub2RlLWNvbXByZXNzLWNvbW1vbnMvYmxvYi9tYXN0ZXIvTElDRU5TRS1NSVRcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgLyoqXG4gICAgICogQml0cyB1c2VkIGZvciBwZXJtaXNzaW9ucyAoYW5kIHN0aWNreSBiaXQpXG4gICAgICovXG4gICAgUEVSTV9NQVNLOiA0MDk1LCAvLyAwNzc3N1xuXG4gICAgLyoqXG4gICAgICogQml0cyB1c2VkIHRvIGluZGljYXRlIHRoZSBmaWxlc3lzdGVtIG9iamVjdCB0eXBlLlxuICAgICAqL1xuICAgIEZJTEVfVFlQRV9GTEFHOiA2MTQ0MCwgLy8gMDE3MDAwMFxuXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHN5bWJvbGljIGxpbmtzLlxuICAgICAqL1xuICAgIExJTktfRkxBRzogNDA5NjAsIC8vIDAxMjAwMDBcblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyBwbGFpbiBmaWxlcy5cbiAgICAgKi9cbiAgICBGSUxFX0ZMQUc6IDMyNzY4LCAvLyAwMTAwMDAwXG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgZGlyZWN0b3JpZXMuXG4gICAgICovXG4gICAgRElSX0ZMQUc6IDE2Mzg0LCAvLyAwNDAwMDBcblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBzb21ld2hhdCBhcmJpdHJhcnkgY2hvaWNlcyB0aGF0IGFyZSBxdWl0ZSBjb21tb24gZm9yIHNoYXJlZFxuICAgIC8vIGluc3RhbGxhdGlvbnNcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgLyoqXG4gICAgICogRGVmYXVsdCBwZXJtaXNzaW9ucyBmb3Igc3ltYm9saWMgbGlua3MuXG4gICAgICovXG4gICAgREVGQVVMVF9MSU5LX1BFUk06IDUxMSwgLy8gMDc3N1xuXG4gICAgLyoqXG4gICAgICogRGVmYXVsdCBwZXJtaXNzaW9ucyBmb3IgZGlyZWN0b3JpZXMuXG4gICAgICovXG4gICAgREVGQVVMVF9ESVJfUEVSTTogNDkzLCAvLyAwNzU1XG5cbiAgICAvKipcbiAgICAgKiBEZWZhdWx0IHBlcm1pc3Npb25zIGZvciBwbGFpbiBmaWxlcy5cbiAgICAgKi9cbiAgICBERUZBVUxUX0ZJTEVfUEVSTTogNDIwIC8vIDA2NDRcbn07IiwKICAgICIvKipcbiAqIG5vZGUtY29tcHJlc3MtY29tbW9uc1xuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNCBDaHJpcyBUYWxraW5ndG9uLCBjb250cmlidXRvcnMuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBodHRwczovL2dpdGh1Yi5jb20vYXJjaGl2ZXJqcy9ub2RlLWNvbXByZXNzLWNvbW1vbnMvYmxvYi9tYXN0ZXIvTElDRU5TRS1NSVRcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFdPUkQ6IDQsXG4gIERXT1JEOiA4LFxuICBFTVBUWTogQnVmZmVyLmFsbG9jKDApLFxuXG4gIFNIT1JUOiAyLFxuICBTSE9SVF9NQVNLOiAweGZmZmYsXG4gIFNIT1JUX1NISUZUOiAxNixcbiAgU0hPUlRfWkVSTzogQnVmZmVyLmZyb20oQXJyYXkoMikpLFxuICBMT05HOiA0LFxuICBMT05HX1pFUk86IEJ1ZmZlci5mcm9tKEFycmF5KDQpKSxcblxuICBNSU5fVkVSU0lPTl9JTklUSUFMOiAxMCxcbiAgTUlOX1ZFUlNJT05fREFUQV9ERVNDUklQVE9SOiAyMCxcbiAgTUlOX1ZFUlNJT05fWklQNjQ6IDQ1LFxuICBWRVJTSU9OX01BREVCWTogNDUsXG5cbiAgTUVUSE9EX1NUT1JFRDogMCxcbiAgTUVUSE9EX0RFRkxBVEVEOiA4LFxuXG4gIFBMQVRGT1JNX1VOSVg6IDMsXG4gIFBMQVRGT1JNX0ZBVDogMCxcblxuICBTSUdfTEZIOiAweDA0MDM0YjUwLFxuICBTSUdfREQ6IDB4MDgwNzRiNTAsXG4gIFNJR19DRkg6IDB4MDIwMTRiNTAsXG4gIFNJR19FT0NEOiAweDA2MDU0YjUwLFxuICBTSUdfWklQNjRfRU9DRDogMHgwNjA2NEI1MCxcbiAgU0lHX1pJUDY0X0VPQ0RfTE9DOiAweDA3MDY0QjUwLFxuXG4gIFpJUDY0X01BR0lDX1NIT1JUOiAweGZmZmYsXG4gIFpJUDY0X01BR0lDOiAweGZmZmZmZmZmLFxuICBaSVA2NF9FWFRSQV9JRDogMHgwMDAxLFxuXG4gIFpMSUJfTk9fQ09NUFJFU1NJT046IDAsXG4gIFpMSUJfQkVTVF9TUEVFRDogMSxcbiAgWkxJQl9CRVNUX0NPTVBSRVNTSU9OOiA5LFxuICBaTElCX0RFRkFVTFRfQ09NUFJFU1NJT046IC0xLFxuXG4gIE1PREVfTUFTSzogMHhGRkYsXG4gIERFRkFVTFRfRklMRV9NT0RFOiAzMzE4OCwgLy8gMDEwNjQ0ID0gLXJ3LXItLXItLSA9IFNfSUZSRUcgfCBTX0lSVVNSIHwgU19JV1VTUiB8IFNfSVJHUlAgfCBTX0lST1RIXG4gIERFRkFVTFRfRElSX01PREU6IDE2ODc3LCAgLy8gMDQwNzU1ID0gZHJ3eHIteHIteCA9IFNfSUZESVIgfCBTX0lSV1hVIHwgU19JUkdSUCB8IFNfSVhHUlAgfCBTX0lST1RIIHwgU19JWE9USFxuXG4gIEVYVF9GSUxFX0FUVFJfRElSOiAxMTA2MDUxMDg4LCAgLy8gMDEwMTczMjAwMDIwID0gZHJ3eHIteHIteCA9ICgoKFNfSUZESVIgfCAwNzU1KSA8PCAxNikgfCBTX0RPU19EKVxuICBFWFRfRklMRV9BVFRSX0ZJTEU6IDIxNzUwMDg4MDAsIC8vIDAyMDE1MTAwMDA0MCA9IC1ydy1yLS1yLS0gPSAoKChTX0lGUkVHIHwgMDY0NCkgPDwgMTYpIHwgU19ET1NfQSkgPj4+IDBcblxuICAvLyBVbml4IGZpbGUgdHlwZXNcbiAgU19JRk1UOiA2MTQ0MCwgICAvLyAwMTcwMDAwIHR5cGUgb2YgZmlsZSBtYXNrXG4gIFNfSUZJRk86IDQwOTYsICAgLy8gMDEwMDAwIG5hbWVkIHBpcGUgKGZpZm8pXG4gIFNfSUZDSFI6IDgxOTIsICAgLy8gMDIwMDAwIGNoYXJhY3RlciBzcGVjaWFsXG4gIFNfSUZESVI6IDE2Mzg0LCAgLy8gMDQwMDAwIGRpcmVjdG9yeVxuICBTX0lGQkxLOiAyNDU3NiwgIC8vIDA2MDAwMCBibG9jayBzcGVjaWFsXG4gIFNfSUZSRUc6IDMyNzY4LCAgLy8gMDEwMDAwMCByZWd1bGFyXG4gIFNfSUZMTks6IDQwOTYwLCAgLy8gMDEyMDAwMCBzeW1ib2xpYyBsaW5rXG4gIFNfSUZTT0NLOiA0OTE1MiwgLy8gMDE0MDAwMCBzb2NrZXRcblxuICAvLyBET1MgZmlsZSB0eXBlIGZsYWdzXG4gIFNfRE9TX0E6IDMyLCAvLyAwNDAgQXJjaGl2ZVxuICBTX0RPU19EOiAxNiwgLy8gMDIwIERpcmVjdG9yeVxuICBTX0RPU19WOiA4LCAgLy8gMDEwIFZvbHVtZVxuICBTX0RPU19TOiA0LCAgLy8gMDQgU3lzdGVtXG4gIFNfRE9TX0g6IDIsICAvLyAwMiBIaWRkZW5cbiAgU19ET1NfUjogMSAgIC8vIDAxIFJlYWQgT25seVxufTtcbiIsCiAgICAiLyoqXG4gKiBub2RlLWNvbXByZXNzLWNvbW1vbnNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQgQ2hyaXMgVGFsa2luZ3RvbiwgY29udHJpYnV0b3JzLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cHM6Ly9naXRodWIuY29tL2FyY2hpdmVyanMvbm9kZS1jb21wcmVzcy1jb21tb25zL2Jsb2IvbWFzdGVyL0xJQ0VOU0UtTUlUXG4gKi9cbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ3V0aWwnKS5pbmhlcml0cztcbnZhciBub3JtYWxpemVQYXRoID0gcmVxdWlyZSgnbm9ybWFsaXplLXBhdGgnKTtcblxudmFyIEFyY2hpdmVFbnRyeSA9IHJlcXVpcmUoJy4uL2FyY2hpdmUtZW50cnknKTtcbnZhciBHZW5lcmFsUHVycG9zZUJpdCA9IHJlcXVpcmUoJy4vZ2VuZXJhbC1wdXJwb3NlLWJpdCcpO1xudmFyIFVuaXhTdGF0ID0gcmVxdWlyZSgnLi91bml4LXN0YXQnKTtcblxudmFyIGNvbnN0YW50cyA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJyk7XG52YXIgemlwVXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xuXG52YXIgWmlwQXJjaGl2ZUVudHJ5ID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihuYW1lKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBaaXBBcmNoaXZlRW50cnkpKSB7XG4gICAgcmV0dXJuIG5ldyBaaXBBcmNoaXZlRW50cnkobmFtZSk7XG4gIH1cblxuICBBcmNoaXZlRW50cnkuY2FsbCh0aGlzKTtcblxuICB0aGlzLnBsYXRmb3JtID0gY29uc3RhbnRzLlBMQVRGT1JNX0ZBVDtcbiAgdGhpcy5tZXRob2QgPSAtMTtcblxuICB0aGlzLm5hbWUgPSBudWxsO1xuICB0aGlzLnNpemUgPSAwO1xuICB0aGlzLmNzaXplID0gMDtcbiAgdGhpcy5ncGIgPSBuZXcgR2VuZXJhbFB1cnBvc2VCaXQoKTtcbiAgdGhpcy5jcmMgPSAwO1xuICB0aGlzLnRpbWUgPSAtMTtcblxuICB0aGlzLm1pbnZlciA9IGNvbnN0YW50cy5NSU5fVkVSU0lPTl9JTklUSUFMO1xuICB0aGlzLm1vZGUgPSAtMTtcbiAgdGhpcy5leHRyYSA9IG51bGw7XG4gIHRoaXMuZXhhdHRyID0gMDtcbiAgdGhpcy5pbmF0dHIgPSAwO1xuICB0aGlzLmNvbW1lbnQgPSBudWxsO1xuXG4gIGlmIChuYW1lKSB7XG4gICAgdGhpcy5zZXROYW1lKG5hbWUpO1xuICB9XG59O1xuXG5pbmhlcml0cyhaaXBBcmNoaXZlRW50cnksIEFyY2hpdmVFbnRyeSk7XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZXh0cmEgZmllbGRzIHJlbGF0ZWQgdG8gdGhlIGVudHJ5LlxuICpcbiAqIEByZXR1cm5zIHtCdWZmZXJ9XG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuZ2V0Q2VudHJhbERpcmVjdG9yeUV4dHJhID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmdldEV4dHJhKCk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGNvbW1lbnQgc2V0IGZvciB0aGUgZW50cnkuXG4gKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5nZXRDb21tZW50ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmNvbW1lbnQgIT09IG51bGwgPyB0aGlzLmNvbW1lbnQgOiAnJztcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY29tcHJlc3NlZCBzaXplIG9mIHRoZSBlbnRyeS5cbiAqXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLmdldENvbXByZXNzZWRTaXplID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmNzaXplO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBDUkMzMiBkaWdlc3QgZm9yIHRoZSBlbnRyeS5cbiAqXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLmdldENyYyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5jcmM7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGV4dGVybmFsIGZpbGUgYXR0cmlidXRlcyBmb3IgdGhlIGVudHJ5LlxuICpcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuZ2V0RXh0ZXJuYWxBdHRyaWJ1dGVzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmV4YXR0cjtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZXh0cmEgZmllbGRzIHJlbGF0ZWQgdG8gdGhlIGVudHJ5LlxuICpcbiAqIEByZXR1cm5zIHtCdWZmZXJ9XG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuZ2V0RXh0cmEgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZXh0cmEgIT09IG51bGwgPyB0aGlzLmV4dHJhIDogY29uc3RhbnRzLkVNUFRZO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBnZW5lcmFsIHB1cnBvc2UgYml0cyByZWxhdGVkIHRvIHRoZSBlbnRyeS5cbiAqXG4gKiBAcmV0dXJucyB7R2VuZXJhbFB1cnBvc2VCaXR9XG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuZ2V0R2VuZXJhbFB1cnBvc2VCaXQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZ3BiO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBpbnRlcm5hbCBmaWxlIGF0dHJpYnV0ZXMgZm9yIHRoZSBlbnRyeS5cbiAqXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLmdldEludGVybmFsQXR0cmlidXRlcyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5pbmF0dHI7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGxhc3QgbW9kaWZpZWQgZGF0ZSBvZiB0aGUgZW50cnkuXG4gKlxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5nZXRMYXN0TW9kaWZpZWREYXRlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmdldFRpbWUoKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZXh0cmEgZmllbGRzIHJlbGF0ZWQgdG8gdGhlIGVudHJ5LlxuICpcbiAqIEByZXR1cm5zIHtCdWZmZXJ9XG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuZ2V0TG9jYWxGaWxlRGF0YUV4dHJhID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmdldEV4dHJhKCk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGNvbXByZXNzaW9uIG1ldGhvZCB1c2VkIG9uIHRoZSBlbnRyeS5cbiAqXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLmdldE1ldGhvZCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5tZXRob2Q7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGZpbGVuYW1lIG9mIHRoZSBlbnRyeS5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLmdldE5hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMubmFtZTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgcGxhdGZvcm0gb24gd2hpY2ggdGhlIGVudHJ5IHdhcyBtYWRlLlxuICpcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuZ2V0UGxhdGZvcm0gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMucGxhdGZvcm07XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIGVudHJ5LlxuICpcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuZ2V0U2l6ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zaXplO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgZGF0ZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBsYXN0IG1vZGlmaWVkIGRhdGUgb2YgdGhlIGVudHJ5LlxuICpcbiAqIEByZXR1cm5zIHtudW1iZXJ8RGF0ZX1cbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5nZXRUaW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnRpbWUgIT09IC0xID8gemlwVXRpbC5kb3NUb0RhdGUodGhpcy50aW1lKSA6IC0xO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBET1MgdGltZXN0YW1wIGZvciB0aGUgZW50cnkuXG4gKlxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5nZXRUaW1lRG9zID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnRpbWUgIT09IC0xID8gdGhpcy50aW1lIDogMDtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgVU5JWCBmaWxlIHBlcm1pc3Npb25zIGZvciB0aGUgZW50cnkuXG4gKlxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5nZXRVbml4TW9kZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5wbGF0Zm9ybSAhPT0gY29uc3RhbnRzLlBMQVRGT1JNX1VOSVggPyAwIDogKCh0aGlzLmdldEV4dGVybmFsQXR0cmlidXRlcygpID4+IGNvbnN0YW50cy5TSE9SVF9TSElGVCkgJiBjb25zdGFudHMuU0hPUlRfTUFTSyk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHZlcnNpb24gb2YgWklQIG5lZWRlZCB0byBleHRyYWN0IHRoZSBlbnRyeS5cbiAqXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLmdldFZlcnNpb25OZWVkZWRUb0V4dHJhY3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMubWludmVyO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBjb21tZW50IG9mIHRoZSBlbnRyeS5cbiAqXG4gKiBAcGFyYW0gY29tbWVudFxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLnNldENvbW1lbnQgPSBmdW5jdGlvbihjb21tZW50KSB7XG4gIGlmIChCdWZmZXIuYnl0ZUxlbmd0aChjb21tZW50KSAhPT0gY29tbWVudC5sZW5ndGgpIHtcbiAgICB0aGlzLmdldEdlbmVyYWxQdXJwb3NlQml0KCkudXNlVVRGOEZvck5hbWVzKHRydWUpO1xuICB9XG5cbiAgdGhpcy5jb21tZW50ID0gY29tbWVudDtcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgY29tcHJlc3NlZCBzaXplIG9mIHRoZSBlbnRyeS5cbiAqXG4gKiBAcGFyYW0gc2l6ZVxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLnNldENvbXByZXNzZWRTaXplID0gZnVuY3Rpb24oc2l6ZSkge1xuICBpZiAoc2l6ZSA8IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgZW50cnkgY29tcHJlc3NlZCBzaXplJyk7XG4gIH1cblxuICB0aGlzLmNzaXplID0gc2l6ZTtcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgY2hlY2tzdW0gb2YgdGhlIGVudHJ5LlxuICpcbiAqIEBwYXJhbSBjcmNcbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5zZXRDcmMgPSBmdW5jdGlvbihjcmMpIHtcbiAgaWYgKGNyYyA8IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgZW50cnkgY3JjMzInKTtcbiAgfVxuXG4gIHRoaXMuY3JjID0gY3JjO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBleHRlcm5hbCBmaWxlIGF0dHJpYnV0ZXMgb2YgdGhlIGVudHJ5LlxuICpcbiAqIEBwYXJhbSBhdHRyXG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuc2V0RXh0ZXJuYWxBdHRyaWJ1dGVzID0gZnVuY3Rpb24oYXR0cikge1xuICB0aGlzLmV4YXR0ciA9IGF0dHIgPj4+IDA7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGV4dHJhIGZpZWxkcyByZWxhdGVkIHRvIHRoZSBlbnRyeS5cbiAqXG4gKiBAcGFyYW0gZXh0cmFcbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5zZXRFeHRyYSA9IGZ1bmN0aW9uKGV4dHJhKSB7XG4gIHRoaXMuZXh0cmEgPSBleHRyYTtcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgZ2VuZXJhbCBwdXJwb3NlIGJpdHMgcmVsYXRlZCB0byB0aGUgZW50cnkuXG4gKlxuICogQHBhcmFtIGdwYlxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLnNldEdlbmVyYWxQdXJwb3NlQml0ID0gZnVuY3Rpb24oZ3BiKSB7XG4gIGlmICghKGdwYiBpbnN0YW5jZW9mIEdlbmVyYWxQdXJwb3NlQml0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBlbnRyeSBHZW5lcmFsUHVycG9zZUJpdCcpO1xuICB9XG5cbiAgdGhpcy5ncGIgPSBncGI7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGludGVybmFsIGZpbGUgYXR0cmlidXRlcyBvZiB0aGUgZW50cnkuXG4gKlxuICogQHBhcmFtIGF0dHJcbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5zZXRJbnRlcm5hbEF0dHJpYnV0ZXMgPSBmdW5jdGlvbihhdHRyKSB7XG4gIHRoaXMuaW5hdHRyID0gYXR0cjtcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgY29tcHJlc3Npb24gbWV0aG9kIG9mIHRoZSBlbnRyeS5cbiAqXG4gKiBAcGFyYW0gbWV0aG9kXG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuc2V0TWV0aG9kID0gZnVuY3Rpb24obWV0aG9kKSB7XG4gIGlmIChtZXRob2QgPCAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGVudHJ5IGNvbXByZXNzaW9uIG1ldGhvZCcpO1xuICB9XG5cbiAgdGhpcy5tZXRob2QgPSBtZXRob2Q7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIG5hbWUgb2YgdGhlIGVudHJ5LlxuICpcbiAqIEBwYXJhbSBuYW1lXG4gKiBAcGFyYW0gcHJlcGVuZFNsYXNoXG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuc2V0TmFtZSA9IGZ1bmN0aW9uKG5hbWUsIHByZXBlbmRTbGFzaCA9IGZhbHNlKSB7XG4gIG5hbWUgPSBub3JtYWxpemVQYXRoKG5hbWUsIGZhbHNlKVxuICAgIC5yZXBsYWNlKC9eXFx3KzovLCAnJylcbiAgICAucmVwbGFjZSgvXihcXC5cXC5cXC98XFwvKSsvLCAnJyk7XG5cbiAgaWYgKHByZXBlbmRTbGFzaCkge1xuICAgIG5hbWUgPSBgLyR7bmFtZX1gO1xuICB9XG5cbiAgaWYgKEJ1ZmZlci5ieXRlTGVuZ3RoKG5hbWUpICE9PSBuYW1lLmxlbmd0aCkge1xuICAgIHRoaXMuZ2V0R2VuZXJhbFB1cnBvc2VCaXQoKS51c2VVVEY4Rm9yTmFtZXModHJ1ZSk7XG4gIH1cblxuICB0aGlzLm5hbWUgPSBuYW1lO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBwbGF0Zm9ybSBvbiB3aGljaCB0aGUgZW50cnkgd2FzIG1hZGUuXG4gKlxuICogQHBhcmFtIHBsYXRmb3JtXG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuc2V0UGxhdGZvcm0gPSBmdW5jdGlvbihwbGF0Zm9ybSkge1xuICB0aGlzLnBsYXRmb3JtID0gcGxhdGZvcm07XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIHNpemUgb2YgdGhlIGVudHJ5LlxuICpcbiAqIEBwYXJhbSBzaXplXG4gKi9cblppcEFyY2hpdmVFbnRyeS5wcm90b3R5cGUuc2V0U2l6ZSA9IGZ1bmN0aW9uKHNpemUpIHtcbiAgaWYgKHNpemUgPCAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGVudHJ5IHNpemUnKTtcbiAgfVxuXG4gIHRoaXMuc2l6ZSA9IHNpemU7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIHRpbWUgb2YgdGhlIGVudHJ5LlxuICpcbiAqIEBwYXJhbSB0aW1lXG4gKiBAcGFyYW0gZm9yY2VMb2NhbFRpbWVcbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5zZXRUaW1lID0gZnVuY3Rpb24odGltZSwgZm9yY2VMb2NhbFRpbWUpIHtcbiAgaWYgKCEodGltZSBpbnN0YW5jZW9mIERhdGUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGVudHJ5IHRpbWUnKTtcbiAgfVxuXG4gIHRoaXMudGltZSA9IHppcFV0aWwuZGF0ZVRvRG9zKHRpbWUsIGZvcmNlTG9jYWxUaW1lKTtcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgVU5JWCBmaWxlIHBlcm1pc3Npb25zIGZvciB0aGUgZW50cnkuXG4gKlxuICogQHBhcmFtIG1vZGVcbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5zZXRVbml4TW9kZSA9IGZ1bmN0aW9uKG1vZGUpIHtcbiAgbW9kZSB8PSB0aGlzLmlzRGlyZWN0b3J5KCkgPyBjb25zdGFudHMuU19JRkRJUiA6IGNvbnN0YW50cy5TX0lGUkVHO1xuXG4gIHZhciBleHRhdHRyID0gMDtcbiAgZXh0YXR0ciB8PSAobW9kZSA8PCBjb25zdGFudHMuU0hPUlRfU0hJRlQpIHwgKHRoaXMuaXNEaXJlY3RvcnkoKSA/IGNvbnN0YW50cy5TX0RPU19EIDogY29uc3RhbnRzLlNfRE9TX0EpO1xuXG4gIHRoaXMuc2V0RXh0ZXJuYWxBdHRyaWJ1dGVzKGV4dGF0dHIpO1xuICB0aGlzLm1vZGUgPSBtb2RlICYgY29uc3RhbnRzLk1PREVfTUFTSztcbiAgdGhpcy5wbGF0Zm9ybSA9IGNvbnN0YW50cy5QTEFURk9STV9VTklYO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSB2ZXJzaW9uIG9mIFpJUCBuZWVkZWQgdG8gZXh0cmFjdCB0aGlzIGVudHJ5LlxuICpcbiAqIEBwYXJhbSBtaW52ZXJcbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5zZXRWZXJzaW9uTmVlZGVkVG9FeHRyYWN0ID0gZnVuY3Rpb24obWludmVyKSB7XG4gIHRoaXMubWludmVyID0gbWludmVyO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBlbnRyeSByZXByZXNlbnRzIGEgZGlyZWN0b3J5LlxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLmlzRGlyZWN0b3J5ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmdldE5hbWUoKS5zbGljZSgtMSkgPT09ICcvJztcbn07XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoaXMgZW50cnkgcmVwcmVzZW50cyBhIHVuaXggc3ltbGluayxcbiAqIGluIHdoaWNoIGNhc2UgdGhlIGVudHJ5J3MgY29udGVudCBjb250YWlucyB0aGUgdGFyZ2V0IHBhdGhcbiAqIGZvciB0aGUgc3ltbGluay5cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuWmlwQXJjaGl2ZUVudHJ5LnByb3RvdHlwZS5pc1VuaXhTeW1saW5rID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAodGhpcy5nZXRVbml4TW9kZSgpICYgVW5peFN0YXQuRklMRV9UWVBFX0ZMQUcpID09PSBVbml4U3RhdC5MSU5LX0ZMQUc7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGVudHJ5IGlzIHVzaW5nIHRoZSBaSVA2NCBleHRlbnNpb24gb2YgWklQLlxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5aaXBBcmNoaXZlRW50cnkucHJvdG90eXBlLmlzWmlwNjQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuY3NpemUgPiBjb25zdGFudHMuWklQNjRfTUFHSUMgfHwgdGhpcy5zaXplID4gY29uc3RhbnRzLlpJUDY0X01BR0lDO1xufTtcbiIsCiAgICAiLyoqXG4gKiBub2RlLWNvbXByZXNzLWNvbW1vbnNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQgQ2hyaXMgVGFsa2luZ3RvbiwgY29udHJpYnV0b3JzLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cHM6Ly9naXRodWIuY29tL2FyY2hpdmVyanMvbm9kZS1jb21wcmVzcy1jb21tb25zL2Jsb2IvbWFzdGVyL0xJQ0VOU0UtTUlUXG4gKi9cbnZhciBTdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0nKS5TdHJlYW07XG52YXIgUGFzc1Rocm91Z2ggPSByZXF1aXJlKCdyZWFkYWJsZS1zdHJlYW0nKS5QYXNzVGhyb3VnaDtcbnZhciBpc1N0cmVhbSA9IHJlcXVpcmUoJ2lzLXN0cmVhbScpO1xuXG52YXIgdXRpbCA9IG1vZHVsZS5leHBvcnRzID0ge307XG5cbnV0aWwubm9ybWFsaXplSW5wdXRTb3VyY2UgPSBmdW5jdGlvbihzb3VyY2UpIHtcbiAgaWYgKHNvdXJjZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBCdWZmZXIuYWxsb2MoMCk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHNvdXJjZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oc291cmNlKTtcbiAgfSBlbHNlIGlmIChpc1N0cmVhbShzb3VyY2UpICYmICFzb3VyY2UuX3JlYWRhYmxlU3RhdGUpIHtcbiAgICB2YXIgbm9ybWFsaXplZCA9IG5ldyBQYXNzVGhyb3VnaCgpO1xuICAgIHNvdXJjZS5waXBlKG5vcm1hbGl6ZWQpO1xuXG4gICAgcmV0dXJuIG5vcm1hbGl6ZWQ7XG4gIH1cblxuICByZXR1cm4gc291cmNlO1xufTsiLAogICAgIi8qKlxuICogbm9kZS1jb21wcmVzcy1jb21tb25zXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE0IENocmlzIFRhbGtpbmd0b24sIGNvbnRyaWJ1dG9ycy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hcmNoaXZlcmpzL25vZGUtY29tcHJlc3MtY29tbW9ucy9ibG9iL21hc3Rlci9MSUNFTlNFLU1JVFxuICovXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCd1dGlsJykuaW5oZXJpdHM7XG52YXIgaXNTdHJlYW0gPSByZXF1aXJlKCdpcy1zdHJlYW0nKTtcbnZhciBUcmFuc2Zvcm0gPSByZXF1aXJlKCdyZWFkYWJsZS1zdHJlYW0nKS5UcmFuc2Zvcm07XG5cbnZhciBBcmNoaXZlRW50cnkgPSByZXF1aXJlKCcuL2FyY2hpdmUtZW50cnknKTtcbnZhciB1dGlsID0gcmVxdWlyZSgnLi4vdXRpbCcpO1xuXG52YXIgQXJjaGl2ZU91dHB1dFN0cmVhbSA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQXJjaGl2ZU91dHB1dFN0cmVhbSkpIHtcbiAgICByZXR1cm4gbmV3IEFyY2hpdmVPdXRwdXRTdHJlYW0ob3B0aW9ucyk7XG4gIH1cblxuICBUcmFuc2Zvcm0uY2FsbCh0aGlzLCBvcHRpb25zKTtcblxuICB0aGlzLm9mZnNldCA9IDA7XG4gIHRoaXMuX2FyY2hpdmUgPSB7XG4gICAgZmluaXNoOiBmYWxzZSxcbiAgICBmaW5pc2hlZDogZmFsc2UsXG4gICAgcHJvY2Vzc2luZzogZmFsc2VcbiAgfTtcbn07XG5cbmluaGVyaXRzKEFyY2hpdmVPdXRwdXRTdHJlYW0sIFRyYW5zZm9ybSk7XG5cbkFyY2hpdmVPdXRwdXRTdHJlYW0ucHJvdG90eXBlLl9hcHBlbmRCdWZmZXIgPSBmdW5jdGlvbih6YWUsIHNvdXJjZSwgY2FsbGJhY2spIHtcbiAgLy8gc2NhZmZvbGQgb25seVxufTtcblxuQXJjaGl2ZU91dHB1dFN0cmVhbS5wcm90b3R5cGUuX2FwcGVuZFN0cmVhbSA9IGZ1bmN0aW9uKHphZSwgc291cmNlLCBjYWxsYmFjaykge1xuICAvLyBzY2FmZm9sZCBvbmx5XG59O1xuXG5BcmNoaXZlT3V0cHV0U3RyZWFtLnByb3RvdHlwZS5fZW1pdEVycm9yQ2FsbGJhY2sgPSBmdW5jdGlvbihlcnIpIHtcbiAgaWYgKGVycikge1xuICAgIHRoaXMuZW1pdCgnZXJyb3InLCBlcnIpO1xuICB9XG59O1xuXG5BcmNoaXZlT3V0cHV0U3RyZWFtLnByb3RvdHlwZS5fZmluaXNoID0gZnVuY3Rpb24oYWUpIHtcbiAgLy8gc2NhZmZvbGQgb25seVxufTtcblxuQXJjaGl2ZU91dHB1dFN0cmVhbS5wcm90b3R5cGUuX25vcm1hbGl6ZUVudHJ5ID0gZnVuY3Rpb24oYWUpIHtcbiAgLy8gc2NhZmZvbGQgb25seVxufTtcblxuQXJjaGl2ZU91dHB1dFN0cmVhbS5wcm90b3R5cGUuX3RyYW5zZm9ybSA9IGZ1bmN0aW9uKGNodW5rLCBlbmNvZGluZywgY2FsbGJhY2spIHtcbiAgY2FsbGJhY2sobnVsbCwgY2h1bmspO1xufTtcblxuQXJjaGl2ZU91dHB1dFN0cmVhbS5wcm90b3R5cGUuZW50cnkgPSBmdW5jdGlvbihhZSwgc291cmNlLCBjYWxsYmFjaykge1xuICBzb3VyY2UgPSBzb3VyY2UgfHwgbnVsbDtcblxuICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgY2FsbGJhY2sgPSB0aGlzLl9lbWl0RXJyb3JDYWxsYmFjay5iaW5kKHRoaXMpO1xuICB9XG5cbiAgaWYgKCEoYWUgaW5zdGFuY2VvZiBBcmNoaXZlRW50cnkpKSB7XG4gICAgY2FsbGJhY2sobmV3IEVycm9yKCdub3QgYSB2YWxpZCBpbnN0YW5jZSBvZiBBcmNoaXZlRW50cnknKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHRoaXMuX2FyY2hpdmUuZmluaXNoIHx8IHRoaXMuX2FyY2hpdmUuZmluaXNoZWQpIHtcbiAgICBjYWxsYmFjayhuZXcgRXJyb3IoJ3VuYWNjZXB0YWJsZSBlbnRyeSBhZnRlciBmaW5pc2gnKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHRoaXMuX2FyY2hpdmUucHJvY2Vzc2luZykge1xuICAgIGNhbGxiYWNrKG5ldyBFcnJvcignYWxyZWFkeSBwcm9jZXNzaW5nIGFuIGVudHJ5JykpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRoaXMuX2FyY2hpdmUucHJvY2Vzc2luZyA9IHRydWU7XG4gIHRoaXMuX25vcm1hbGl6ZUVudHJ5KGFlKTtcbiAgdGhpcy5fZW50cnkgPSBhZTtcblxuICBzb3VyY2UgPSB1dGlsLm5vcm1hbGl6ZUlucHV0U291cmNlKHNvdXJjZSk7XG5cbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihzb3VyY2UpKSB7XG4gICAgdGhpcy5fYXBwZW5kQnVmZmVyKGFlLCBzb3VyY2UsIGNhbGxiYWNrKTtcbiAgfSBlbHNlIGlmIChpc1N0cmVhbShzb3VyY2UpKSB7XG4gICAgdGhpcy5fYXBwZW5kU3RyZWFtKGFlLCBzb3VyY2UsIGNhbGxiYWNrKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLl9hcmNoaXZlLnByb2Nlc3NpbmcgPSBmYWxzZTtcbiAgICBjYWxsYmFjayhuZXcgRXJyb3IoJ2lucHV0IHNvdXJjZSBtdXN0IGJlIHZhbGlkIFN0cmVhbSBvciBCdWZmZXIgaW5zdGFuY2UnKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5BcmNoaXZlT3V0cHV0U3RyZWFtLnByb3RvdHlwZS5maW5pc2ggPSBmdW5jdGlvbigpIHtcbiAgaWYgKHRoaXMuX2FyY2hpdmUucHJvY2Vzc2luZykge1xuICAgIHRoaXMuX2FyY2hpdmUuZmluaXNoID0gdHJ1ZTtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aGlzLl9maW5pc2goKTtcbn07XG5cbkFyY2hpdmVPdXRwdXRTdHJlYW0ucHJvdG90eXBlLmdldEJ5dGVzV3JpdHRlbiA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5vZmZzZXQ7XG59O1xuXG5BcmNoaXZlT3V0cHV0U3RyZWFtLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKGNodW5rLCBjYikge1xuICBpZiAoY2h1bmspIHtcbiAgICB0aGlzLm9mZnNldCArPSBjaHVuay5sZW5ndGg7XG4gIH1cblxuICByZXR1cm4gVHJhbnNmb3JtLnByb3RvdHlwZS53cml0ZS5jYWxsKHRoaXMsIGNodW5rLCBjYik7XG59OyIsCiAgICAiLyohIGNyYzMyLmpzIChDKSAyMDE0LXByZXNlbnQgU2hlZXRKUyAtLSBodHRwOi8vc2hlZXRqcy5jb20gKi9cbi8qIHZpbTogc2V0IHRzPTI6ICovXG4vKmV4cG9ydGVkIENSQzMyICovXG52YXIgQ1JDMzI7XG4oZnVuY3Rpb24gKGZhY3RvcnkpIHtcblx0Lypqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG5cdC8qZXNsaW50LWRpc2FibGUgKi9cblx0aWYodHlwZW9mIERPX05PVF9FWFBPUlRfQ1JDID09PSAndW5kZWZpbmVkJykge1xuXHRcdGlmKCdvYmplY3QnID09PSB0eXBlb2YgZXhwb3J0cykge1xuXHRcdFx0ZmFjdG9yeShleHBvcnRzKTtcblx0XHR9IGVsc2UgaWYgKCdmdW5jdGlvbicgPT09IHR5cGVvZiBkZWZpbmUgJiYgZGVmaW5lLmFtZCkge1xuXHRcdFx0ZGVmaW5lKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0dmFyIG1vZHVsZSA9IHt9O1xuXHRcdFx0XHRmYWN0b3J5KG1vZHVsZSk7XG5cdFx0XHRcdHJldHVybiBtb2R1bGU7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZmFjdG9yeShDUkMzMiA9IHt9KTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0ZmFjdG9yeShDUkMzMiA9IHt9KTtcblx0fVxuXHQvKmVzbGludC1lbmFibGUgKi9cblx0Lypqc2hpbnQgaWdub3JlOmVuZCAqL1xufShmdW5jdGlvbihDUkMzMikge1xuQ1JDMzIudmVyc2lvbiA9ICcxLjIuMic7XG4vKmdsb2JhbCBJbnQzMkFycmF5ICovXG5mdW5jdGlvbiBzaWduZWRfY3JjX3RhYmxlKCkge1xuXHR2YXIgYyA9IDAsIHRhYmxlID0gbmV3IEFycmF5KDI1Nik7XG5cblx0Zm9yKHZhciBuID0wOyBuICE9IDI1NjsgKytuKXtcblx0XHRjID0gbjtcblx0XHRjID0gKChjJjEpID8gKC0zMDY2NzQ5MTIgXiAoYyA+Pj4gMSkpIDogKGMgPj4+IDEpKTtcblx0XHRjID0gKChjJjEpID8gKC0zMDY2NzQ5MTIgXiAoYyA+Pj4gMSkpIDogKGMgPj4+IDEpKTtcblx0XHRjID0gKChjJjEpID8gKC0zMDY2NzQ5MTIgXiAoYyA+Pj4gMSkpIDogKGMgPj4+IDEpKTtcblx0XHRjID0gKChjJjEpID8gKC0zMDY2NzQ5MTIgXiAoYyA+Pj4gMSkpIDogKGMgPj4+IDEpKTtcblx0XHRjID0gKChjJjEpID8gKC0zMDY2NzQ5MTIgXiAoYyA+Pj4gMSkpIDogKGMgPj4+IDEpKTtcblx0XHRjID0gKChjJjEpID8gKC0zMDY2NzQ5MTIgXiAoYyA+Pj4gMSkpIDogKGMgPj4+IDEpKTtcblx0XHRjID0gKChjJjEpID8gKC0zMDY2NzQ5MTIgXiAoYyA+Pj4gMSkpIDogKGMgPj4+IDEpKTtcblx0XHRjID0gKChjJjEpID8gKC0zMDY2NzQ5MTIgXiAoYyA+Pj4gMSkpIDogKGMgPj4+IDEpKTtcblx0XHR0YWJsZVtuXSA9IGM7XG5cdH1cblxuXHRyZXR1cm4gdHlwZW9mIEludDMyQXJyYXkgIT09ICd1bmRlZmluZWQnID8gbmV3IEludDMyQXJyYXkodGFibGUpIDogdGFibGU7XG59XG5cbnZhciBUMCA9IHNpZ25lZF9jcmNfdGFibGUoKTtcbmZ1bmN0aW9uIHNsaWNlX2J5XzE2X3RhYmxlcyhUKSB7XG5cdHZhciBjID0gMCwgdiA9IDAsIG4gPSAwLCB0YWJsZSA9IHR5cGVvZiBJbnQzMkFycmF5ICE9PSAndW5kZWZpbmVkJyA/IG5ldyBJbnQzMkFycmF5KDQwOTYpIDogbmV3IEFycmF5KDQwOTYpIDtcblxuXHRmb3IobiA9IDA7IG4gIT0gMjU2OyArK24pIHRhYmxlW25dID0gVFtuXTtcblx0Zm9yKG4gPSAwOyBuICE9IDI1NjsgKytuKSB7XG5cdFx0diA9IFRbbl07XG5cdFx0Zm9yKGMgPSAyNTYgKyBuOyBjIDwgNDA5NjsgYyArPSAyNTYpIHYgPSB0YWJsZVtjXSA9ICh2ID4+PiA4KSBeIFRbdiAmIDB4RkZdO1xuXHR9XG5cdHZhciBvdXQgPSBbXTtcblx0Zm9yKG4gPSAxOyBuICE9IDE2OyArK24pIG91dFtuIC0gMV0gPSB0eXBlb2YgSW50MzJBcnJheSAhPT0gJ3VuZGVmaW5lZCcgPyB0YWJsZS5zdWJhcnJheShuICogMjU2LCBuICogMjU2ICsgMjU2KSA6IHRhYmxlLnNsaWNlKG4gKiAyNTYsIG4gKiAyNTYgKyAyNTYpO1xuXHRyZXR1cm4gb3V0O1xufVxudmFyIFRUID0gc2xpY2VfYnlfMTZfdGFibGVzKFQwKTtcbnZhciBUMSA9IFRUWzBdLCAgVDIgPSBUVFsxXSwgIFQzID0gVFRbMl0sICBUNCA9IFRUWzNdLCAgVDUgPSBUVFs0XTtcbnZhciBUNiA9IFRUWzVdLCAgVDcgPSBUVFs2XSwgIFQ4ID0gVFRbN10sICBUOSA9IFRUWzhdLCAgVGEgPSBUVFs5XTtcbnZhciBUYiA9IFRUWzEwXSwgVGMgPSBUVFsxMV0sIFRkID0gVFRbMTJdLCBUZSA9IFRUWzEzXSwgVGYgPSBUVFsxNF07XG5mdW5jdGlvbiBjcmMzMl9ic3RyKGJzdHIsIHNlZWQpIHtcblx0dmFyIEMgPSBzZWVkIF4gLTE7XG5cdGZvcih2YXIgaSA9IDAsIEwgPSBic3RyLmxlbmd0aDsgaSA8IEw7KSBDID0gKEM+Pj44KSBeIFQwWyhDXmJzdHIuY2hhckNvZGVBdChpKyspKSYweEZGXTtcblx0cmV0dXJuIH5DO1xufVxuXG5mdW5jdGlvbiBjcmMzMl9idWYoQiwgc2VlZCkge1xuXHR2YXIgQyA9IHNlZWQgXiAtMSwgTCA9IEIubGVuZ3RoIC0gMTUsIGkgPSAwO1xuXHRmb3IoOyBpIDwgTDspIEMgPVxuXHRcdFRmW0JbaSsrXSBeIChDICYgMjU1KV0gXlxuXHRcdFRlW0JbaSsrXSBeICgoQyA+PiA4KSAmIDI1NSldIF5cblx0XHRUZFtCW2krK10gXiAoKEMgPj4gMTYpICYgMjU1KV0gXlxuXHRcdFRjW0JbaSsrXSBeIChDID4+PiAyNCldIF5cblx0XHRUYltCW2krK11dIF4gVGFbQltpKytdXSBeIFQ5W0JbaSsrXV0gXiBUOFtCW2krK11dIF5cblx0XHRUN1tCW2krK11dIF4gVDZbQltpKytdXSBeIFQ1W0JbaSsrXV0gXiBUNFtCW2krK11dIF5cblx0XHRUM1tCW2krK11dIF4gVDJbQltpKytdXSBeIFQxW0JbaSsrXV0gXiBUMFtCW2krK11dO1xuXHRMICs9IDE1O1xuXHR3aGlsZShpIDwgTCkgQyA9IChDPj4+OCkgXiBUMFsoQ15CW2krK10pJjB4RkZdO1xuXHRyZXR1cm4gfkM7XG59XG5cbmZ1bmN0aW9uIGNyYzMyX3N0cihzdHIsIHNlZWQpIHtcblx0dmFyIEMgPSBzZWVkIF4gLTE7XG5cdGZvcih2YXIgaSA9IDAsIEwgPSBzdHIubGVuZ3RoLCBjID0gMCwgZCA9IDA7IGkgPCBMOykge1xuXHRcdGMgPSBzdHIuY2hhckNvZGVBdChpKyspO1xuXHRcdGlmKGMgPCAweDgwKSB7XG5cdFx0XHRDID0gKEM+Pj44KSBeIFQwWyhDXmMpJjB4RkZdO1xuXHRcdH0gZWxzZSBpZihjIDwgMHg4MDApIHtcblx0XHRcdEMgPSAoQz4+PjgpIF4gVDBbKEMgXiAoMTkyfCgoYz4+NikmMzEpKSkmMHhGRl07XG5cdFx0XHRDID0gKEM+Pj44KSBeIFQwWyhDIF4gKDEyOHwoYyY2MykpKSYweEZGXTtcblx0XHR9IGVsc2UgaWYoYyA+PSAweEQ4MDAgJiYgYyA8IDB4RTAwMCkge1xuXHRcdFx0YyA9IChjJjEwMjMpKzY0OyBkID0gc3RyLmNoYXJDb2RlQXQoaSsrKSYxMDIzO1xuXHRcdFx0QyA9IChDPj4+OCkgXiBUMFsoQyBeICgyNDB8KChjPj44KSY3KSkpJjB4RkZdO1xuXHRcdFx0QyA9IChDPj4+OCkgXiBUMFsoQyBeICgxMjh8KChjPj4yKSY2MykpKSYweEZGXTtcblx0XHRcdEMgPSAoQz4+PjgpIF4gVDBbKEMgXiAoMTI4fCgoZD4+NikmMTUpfCgoYyYzKTw8NCkpKSYweEZGXTtcblx0XHRcdEMgPSAoQz4+PjgpIF4gVDBbKEMgXiAoMTI4fChkJjYzKSkpJjB4RkZdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRDID0gKEM+Pj44KSBeIFQwWyhDIF4gKDIyNHwoKGM+PjEyKSYxNSkpKSYweEZGXTtcblx0XHRcdEMgPSAoQz4+PjgpIF4gVDBbKEMgXiAoMTI4fCgoYz4+NikmNjMpKSkmMHhGRl07XG5cdFx0XHRDID0gKEM+Pj44KSBeIFQwWyhDIF4gKDEyOHwoYyY2MykpKSYweEZGXTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIH5DO1xufVxuQ1JDMzIudGFibGUgPSBUMDtcbi8vICRGbG93SWdub3JlXG5DUkMzMi5ic3RyID0gY3JjMzJfYnN0cjtcbi8vICRGbG93SWdub3JlXG5DUkMzMi5idWYgPSBjcmMzMl9idWY7XG4vLyAkRmxvd0lnbm9yZVxuQ1JDMzIuc3RyID0gY3JjMzJfc3RyO1xufSkpO1xuIiwKICAgICIvKipcbiAqIG5vZGUtY3JjMzItc3RyZWFtXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE0IENocmlzIFRhbGtpbmd0b24sIGNvbnRyaWJ1dG9ycy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hcmNoaXZlcmpzL25vZGUtY3JjMzItc3RyZWFtL2Jsb2IvbWFzdGVyL0xJQ0VOU0UtTUlUXG4gKi9cblxuICd1c2Ugc3RyaWN0JztcblxuY29uc3Qge1RyYW5zZm9ybX0gPSByZXF1aXJlKCdyZWFkYWJsZS1zdHJlYW0nKTtcblxuY29uc3QgY3JjMzIgPSByZXF1aXJlKCdjcmMtMzInKTtcblxuY2xhc3MgQ1JDMzJTdHJlYW0gZXh0ZW5kcyBUcmFuc2Zvcm0ge1xuICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgc3VwZXIob3B0aW9ucyk7XG4gICAgdGhpcy5jaGVja3N1bSA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSg0KTtcbiAgICB0aGlzLmNoZWNrc3VtLndyaXRlSW50MzJCRSgwLCAwKTtcblxuICAgIHRoaXMucmF3U2l6ZSA9IDA7XG4gIH1cblxuICBfdHJhbnNmb3JtKGNodW5rLCBlbmNvZGluZywgY2FsbGJhY2spIHtcbiAgICBpZiAoY2h1bmspIHtcbiAgICAgIHRoaXMuY2hlY2tzdW0gPSBjcmMzMi5idWYoY2h1bmssIHRoaXMuY2hlY2tzdW0pID4+PiAwO1xuICAgICAgdGhpcy5yYXdTaXplICs9IGNodW5rLmxlbmd0aDtcbiAgICB9XG5cbiAgICBjYWxsYmFjayhudWxsLCBjaHVuayk7XG4gIH1cblxuICBkaWdlc3QoZW5jb2RpbmcpIHtcbiAgICBjb25zdCBjaGVja3N1bSA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSg0KTtcbiAgICBjaGVja3N1bS53cml0ZVVJbnQzMkJFKHRoaXMuY2hlY2tzdW0gPj4+IDAsIDApO1xuICAgIHJldHVybiBlbmNvZGluZyA/IGNoZWNrc3VtLnRvU3RyaW5nKGVuY29kaW5nKSA6IGNoZWNrc3VtO1xuICB9XG5cbiAgaGV4KCkge1xuICAgIHJldHVybiB0aGlzLmRpZ2VzdCgnaGV4JykudG9VcHBlckNhc2UoKTtcbiAgfVxuXG4gIHNpemUoKSB7XG4gICAgcmV0dXJuIHRoaXMucmF3U2l6ZTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IENSQzMyU3RyZWFtO1xuIiwKICAgICIvKipcbiAqIG5vZGUtY3JjMzItc3RyZWFtXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE0IENocmlzIFRhbGtpbmd0b24sIGNvbnRyaWJ1dG9ycy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hcmNoaXZlcmpzL25vZGUtY3JjMzItc3RyZWFtL2Jsb2IvbWFzdGVyL0xJQ0VOU0UtTUlUXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCB7RGVmbGF0ZVJhd30gPSByZXF1aXJlKCd6bGliJyk7XG5cbmNvbnN0IGNyYzMyID0gcmVxdWlyZSgnY3JjLTMyJyk7XG5cbmNsYXNzIERlZmxhdGVDUkMzMlN0cmVhbSBleHRlbmRzIERlZmxhdGVSYXcge1xuICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgc3VwZXIob3B0aW9ucyk7XG5cbiAgICB0aGlzLmNoZWNrc3VtID0gQnVmZmVyLmFsbG9jVW5zYWZlKDQpO1xuICAgIHRoaXMuY2hlY2tzdW0ud3JpdGVJbnQzMkJFKDAsIDApO1xuXG4gICAgdGhpcy5yYXdTaXplID0gMDtcbiAgICB0aGlzLmNvbXByZXNzZWRTaXplID0gMDtcbiAgfVxuXG4gIHB1c2goY2h1bmssIGVuY29kaW5nKSB7XG4gICAgaWYgKGNodW5rKSB7XG4gICAgICB0aGlzLmNvbXByZXNzZWRTaXplICs9IGNodW5rLmxlbmd0aDtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VwZXIucHVzaChjaHVuaywgZW5jb2RpbmcpO1xuICB9XG5cbiAgX3RyYW5zZm9ybShjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gICAgaWYgKGNodW5rKSB7XG4gICAgICB0aGlzLmNoZWNrc3VtID0gY3JjMzIuYnVmKGNodW5rLCB0aGlzLmNoZWNrc3VtKSA+Pj4gMDtcbiAgICAgIHRoaXMucmF3U2l6ZSArPSBjaHVuay5sZW5ndGg7XG4gICAgfVxuXG4gICAgc3VwZXIuX3RyYW5zZm9ybShjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKVxuICB9XG5cbiAgZGlnZXN0KGVuY29kaW5nKSB7XG4gICAgY29uc3QgY2hlY2tzdW0gPSBCdWZmZXIuYWxsb2NVbnNhZmUoNCk7XG4gICAgY2hlY2tzdW0ud3JpdGVVSW50MzJCRSh0aGlzLmNoZWNrc3VtID4+PiAwLCAwKTtcbiAgICByZXR1cm4gZW5jb2RpbmcgPyBjaGVja3N1bS50b1N0cmluZyhlbmNvZGluZykgOiBjaGVja3N1bTtcbiAgfVxuXG4gIGhleCgpIHtcbiAgICByZXR1cm4gdGhpcy5kaWdlc3QoJ2hleCcpLnRvVXBwZXJDYXNlKCk7XG4gIH1cblxuICBzaXplKGNvbXByZXNzZWQgPSBmYWxzZSkge1xuICAgIGlmIChjb21wcmVzc2VkKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb21wcmVzc2VkU2l6ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMucmF3U2l6ZTtcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBEZWZsYXRlQ1JDMzJTdHJlYW07XG4iLAogICAgIi8qKlxuICogbm9kZS1jcmMzMi1zdHJlYW1cbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQgQ2hyaXMgVGFsa2luZ3RvbiwgY29udHJpYnV0b3JzLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cHM6Ly9naXRodWIuY29tL2FyY2hpdmVyanMvbm9kZS1jcmMzMi1zdHJlYW0vYmxvYi9tYXN0ZXIvTElDRU5TRS1NSVRcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBDUkMzMlN0cmVhbTogcmVxdWlyZSgnLi9jcmMzMi1zdHJlYW0nKSxcbiAgRGVmbGF0ZUNSQzMyU3RyZWFtOiByZXF1aXJlKCcuL2RlZmxhdGUtY3JjMzItc3RyZWFtJylcbn1cbiIsCiAgICAiLyoqXG4gKiBub2RlLWNvbXByZXNzLWNvbW1vbnNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQgQ2hyaXMgVGFsa2luZ3RvbiwgY29udHJpYnV0b3JzLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cHM6Ly9naXRodWIuY29tL2FyY2hpdmVyanMvbm9kZS1jb21wcmVzcy1jb21tb25zL2Jsb2IvbWFzdGVyL0xJQ0VOU0UtTUlUXG4gKi9cbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ3V0aWwnKS5pbmhlcml0cztcbnZhciBjcmMzMiA9IHJlcXVpcmUoJ2NyYy0zMicpO1xudmFyIHtDUkMzMlN0cmVhbX0gPSByZXF1aXJlKCdjcmMzMi1zdHJlYW0nKTtcbnZhciB7RGVmbGF0ZUNSQzMyU3RyZWFtfSA9IHJlcXVpcmUoJ2NyYzMyLXN0cmVhbScpO1xuXG52YXIgQXJjaGl2ZU91dHB1dFN0cmVhbSA9IHJlcXVpcmUoJy4uL2FyY2hpdmUtb3V0cHV0LXN0cmVhbScpO1xudmFyIFppcEFyY2hpdmVFbnRyeSA9IHJlcXVpcmUoJy4vemlwLWFyY2hpdmUtZW50cnknKTtcbnZhciBHZW5lcmFsUHVycG9zZUJpdCA9IHJlcXVpcmUoJy4vZ2VuZXJhbC1wdXJwb3NlLWJpdCcpO1xuXG52YXIgY29uc3RhbnRzID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKTtcbnZhciB1dGlsID0gcmVxdWlyZSgnLi4vLi4vdXRpbCcpO1xudmFyIHppcFV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcblxudmFyIFppcEFyY2hpdmVPdXRwdXRTdHJlYW0gPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFppcEFyY2hpdmVPdXRwdXRTdHJlYW0pKSB7XG4gICAgcmV0dXJuIG5ldyBaaXBBcmNoaXZlT3V0cHV0U3RyZWFtKG9wdGlvbnMpO1xuICB9XG5cbiAgb3B0aW9ucyA9IHRoaXMub3B0aW9ucyA9IHRoaXMuX2RlZmF1bHRzKG9wdGlvbnMpO1xuXG4gIEFyY2hpdmVPdXRwdXRTdHJlYW0uY2FsbCh0aGlzLCBvcHRpb25zKTtcblxuICB0aGlzLl9lbnRyeSA9IG51bGw7XG4gIHRoaXMuX2VudHJpZXMgPSBbXTtcbiAgdGhpcy5fYXJjaGl2ZSA9IHtcbiAgICBjZW50cmFsTGVuZ3RoOiAwLFxuICAgIGNlbnRyYWxPZmZzZXQ6IDAsXG4gICAgY29tbWVudDogJycsXG4gICAgZmluaXNoOiBmYWxzZSxcbiAgICBmaW5pc2hlZDogZmFsc2UsXG4gICAgcHJvY2Vzc2luZzogZmFsc2UsXG4gICAgZm9yY2VaaXA2NDogb3B0aW9ucy5mb3JjZVppcDY0LFxuICAgIGZvcmNlTG9jYWxUaW1lOiBvcHRpb25zLmZvcmNlTG9jYWxUaW1lXG4gIH07XG59O1xuXG5pbmhlcml0cyhaaXBBcmNoaXZlT3V0cHV0U3RyZWFtLCBBcmNoaXZlT3V0cHV0U3RyZWFtKTtcblxuWmlwQXJjaGl2ZU91dHB1dFN0cmVhbS5wcm90b3R5cGUuX2FmdGVyQXBwZW5kID0gZnVuY3Rpb24oYWUpIHtcbiAgdGhpcy5fZW50cmllcy5wdXNoKGFlKTtcblxuICBpZiAoYWUuZ2V0R2VuZXJhbFB1cnBvc2VCaXQoKS51c2VzRGF0YURlc2NyaXB0b3IoKSkge1xuICAgIHRoaXMuX3dyaXRlRGF0YURlc2NyaXB0b3IoYWUpO1xuICB9XG5cbiAgdGhpcy5fYXJjaGl2ZS5wcm9jZXNzaW5nID0gZmFsc2U7XG4gIHRoaXMuX2VudHJ5ID0gbnVsbDtcblxuICBpZiAodGhpcy5fYXJjaGl2ZS5maW5pc2ggJiYgIXRoaXMuX2FyY2hpdmUuZmluaXNoZWQpIHtcbiAgICB0aGlzLl9maW5pc2goKTtcbiAgfVxufTtcblxuWmlwQXJjaGl2ZU91dHB1dFN0cmVhbS5wcm90b3R5cGUuX2FwcGVuZEJ1ZmZlciA9IGZ1bmN0aW9uKGFlLCBzb3VyY2UsIGNhbGxiYWNrKSB7XG4gIGlmIChzb3VyY2UubGVuZ3RoID09PSAwKSB7XG4gICAgYWUuc2V0TWV0aG9kKGNvbnN0YW50cy5NRVRIT0RfU1RPUkVEKTtcbiAgfVxuXG4gIHZhciBtZXRob2QgPSBhZS5nZXRNZXRob2QoKTtcblxuICBpZiAobWV0aG9kID09PSBjb25zdGFudHMuTUVUSE9EX1NUT1JFRCkge1xuICAgIGFlLnNldFNpemUoc291cmNlLmxlbmd0aCk7XG4gICAgYWUuc2V0Q29tcHJlc3NlZFNpemUoc291cmNlLmxlbmd0aCk7XG4gICAgYWUuc2V0Q3JjKGNyYzMyLmJ1Zihzb3VyY2UpID4+PiAwKTtcbiAgfVxuXG4gIHRoaXMuX3dyaXRlTG9jYWxGaWxlSGVhZGVyKGFlKTtcblxuICBpZiAobWV0aG9kID09PSBjb25zdGFudHMuTUVUSE9EX1NUT1JFRCkge1xuICAgIHRoaXMud3JpdGUoc291cmNlKTtcbiAgICB0aGlzLl9hZnRlckFwcGVuZChhZSk7XG4gICAgY2FsbGJhY2sobnVsbCwgYWUpO1xuICAgIHJldHVybjtcbiAgfSBlbHNlIGlmIChtZXRob2QgPT09IGNvbnN0YW50cy5NRVRIT0RfREVGTEFURUQpIHtcbiAgICB0aGlzLl9zbWFydFN0cmVhbShhZSwgY2FsbGJhY2spLmVuZChzb3VyY2UpO1xuICAgIHJldHVybjtcbiAgfSBlbHNlIHtcbiAgICBjYWxsYmFjayhuZXcgRXJyb3IoJ2NvbXByZXNzaW9uIG1ldGhvZCAnICsgbWV0aG9kICsgJyBub3QgaW1wbGVtZW50ZWQnKSk7XG4gICAgcmV0dXJuO1xuICB9XG59O1xuXG5aaXBBcmNoaXZlT3V0cHV0U3RyZWFtLnByb3RvdHlwZS5fYXBwZW5kU3RyZWFtID0gZnVuY3Rpb24oYWUsIHNvdXJjZSwgY2FsbGJhY2spIHtcbiAgYWUuZ2V0R2VuZXJhbFB1cnBvc2VCaXQoKS51c2VEYXRhRGVzY3JpcHRvcih0cnVlKTtcbiAgYWUuc2V0VmVyc2lvbk5lZWRlZFRvRXh0cmFjdChjb25zdGFudHMuTUlOX1ZFUlNJT05fREFUQV9ERVNDUklQVE9SKTtcblxuICB0aGlzLl93cml0ZUxvY2FsRmlsZUhlYWRlcihhZSk7XG5cbiAgdmFyIHNtYXJ0ID0gdGhpcy5fc21hcnRTdHJlYW0oYWUsIGNhbGxiYWNrKTtcbiAgc291cmNlLm9uY2UoJ2Vycm9yJywgZnVuY3Rpb24oZXJyKSB7XG4gICAgc21hcnQuZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgIHNtYXJ0LmVuZCgpO1xuICB9KVxuICBzb3VyY2UucGlwZShzbWFydCk7XG59O1xuXG5aaXBBcmNoaXZlT3V0cHV0U3RyZWFtLnByb3RvdHlwZS5fZGVmYXVsdHMgPSBmdW5jdGlvbihvKSB7XG4gIGlmICh0eXBlb2YgbyAhPT0gJ29iamVjdCcpIHtcbiAgICBvID0ge307XG4gIH1cblxuICBpZiAodHlwZW9mIG8uemxpYiAhPT0gJ29iamVjdCcpIHtcbiAgICBvLnpsaWIgPSB7fTtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygby56bGliLmxldmVsICE9PSAnbnVtYmVyJykge1xuICAgIG8uemxpYi5sZXZlbCA9IGNvbnN0YW50cy5aTElCX0JFU1RfU1BFRUQ7XG4gIH1cblxuICBvLmZvcmNlWmlwNjQgPSAhIW8uZm9yY2VaaXA2NDtcbiAgby5mb3JjZUxvY2FsVGltZSA9ICEhby5mb3JjZUxvY2FsVGltZTtcblxuICByZXR1cm4gbztcbn07XG5cblppcEFyY2hpdmVPdXRwdXRTdHJlYW0ucHJvdG90eXBlLl9maW5pc2ggPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fYXJjaGl2ZS5jZW50cmFsT2Zmc2V0ID0gdGhpcy5vZmZzZXQ7XG5cbiAgdGhpcy5fZW50cmllcy5mb3JFYWNoKGZ1bmN0aW9uKGFlKSB7XG4gICAgdGhpcy5fd3JpdGVDZW50cmFsRmlsZUhlYWRlcihhZSk7XG4gIH0uYmluZCh0aGlzKSk7XG5cbiAgdGhpcy5fYXJjaGl2ZS5jZW50cmFsTGVuZ3RoID0gdGhpcy5vZmZzZXQgLSB0aGlzLl9hcmNoaXZlLmNlbnRyYWxPZmZzZXQ7XG5cbiAgaWYgKHRoaXMuaXNaaXA2NCgpKSB7XG4gICAgdGhpcy5fd3JpdGVDZW50cmFsRGlyZWN0b3J5WmlwNjQoKTtcbiAgfVxuXG4gIHRoaXMuX3dyaXRlQ2VudHJhbERpcmVjdG9yeUVuZCgpO1xuXG4gIHRoaXMuX2FyY2hpdmUucHJvY2Vzc2luZyA9IGZhbHNlO1xuICB0aGlzLl9hcmNoaXZlLmZpbmlzaCA9IHRydWU7XG4gIHRoaXMuX2FyY2hpdmUuZmluaXNoZWQgPSB0cnVlO1xuICB0aGlzLmVuZCgpO1xufTtcblxuWmlwQXJjaGl2ZU91dHB1dFN0cmVhbS5wcm90b3R5cGUuX25vcm1hbGl6ZUVudHJ5ID0gZnVuY3Rpb24oYWUpIHtcbiAgaWYgKGFlLmdldE1ldGhvZCgpID09PSAtMSkge1xuICAgIGFlLnNldE1ldGhvZChjb25zdGFudHMuTUVUSE9EX0RFRkxBVEVEKTtcbiAgfVxuXG4gIGlmIChhZS5nZXRNZXRob2QoKSA9PT0gY29uc3RhbnRzLk1FVEhPRF9ERUZMQVRFRCkge1xuICAgIGFlLmdldEdlbmVyYWxQdXJwb3NlQml0KCkudXNlRGF0YURlc2NyaXB0b3IodHJ1ZSk7XG4gICAgYWUuc2V0VmVyc2lvbk5lZWRlZFRvRXh0cmFjdChjb25zdGFudHMuTUlOX1ZFUlNJT05fREFUQV9ERVNDUklQVE9SKTtcbiAgfVxuXG4gIGlmIChhZS5nZXRUaW1lKCkgPT09IC0xKSB7XG4gICAgYWUuc2V0VGltZShuZXcgRGF0ZSgpLCB0aGlzLl9hcmNoaXZlLmZvcmNlTG9jYWxUaW1lKTtcbiAgfVxuXG4gIGFlLl9vZmZzZXRzID0ge1xuICAgIGZpbGU6IDAsXG4gICAgZGF0YTogMCxcbiAgICBjb250ZW50czogMCxcbiAgfTtcbn07XG5cblppcEFyY2hpdmVPdXRwdXRTdHJlYW0ucHJvdG90eXBlLl9zbWFydFN0cmVhbSA9IGZ1bmN0aW9uKGFlLCBjYWxsYmFjaykge1xuICB2YXIgZGVmbGF0ZSA9IGFlLmdldE1ldGhvZCgpID09PSBjb25zdGFudHMuTUVUSE9EX0RFRkxBVEVEO1xuICB2YXIgcHJvY2VzcyA9IGRlZmxhdGUgPyBuZXcgRGVmbGF0ZUNSQzMyU3RyZWFtKHRoaXMub3B0aW9ucy56bGliKSA6IG5ldyBDUkMzMlN0cmVhbSgpO1xuICB2YXIgZXJyb3IgPSBudWxsO1xuXG4gIGZ1bmN0aW9uIGhhbmRsZVN0dWZmKCkge1xuICAgIHZhciBkaWdlc3QgPSBwcm9jZXNzLmRpZ2VzdCgpLnJlYWRVSW50MzJCRSgwKTtcbiAgICBhZS5zZXRDcmMoZGlnZXN0KTtcbiAgICBhZS5zZXRTaXplKHByb2Nlc3Muc2l6ZSgpKTtcbiAgICBhZS5zZXRDb21wcmVzc2VkU2l6ZShwcm9jZXNzLnNpemUodHJ1ZSkpO1xuICAgIHRoaXMuX2FmdGVyQXBwZW5kKGFlKTtcbiAgICBjYWxsYmFjayhlcnJvciwgYWUpO1xuICB9XG5cbiAgcHJvY2Vzcy5vbmNlKCdlbmQnLCBoYW5kbGVTdHVmZi5iaW5kKHRoaXMpKTtcbiAgcHJvY2Vzcy5vbmNlKCdlcnJvcicsIGZ1bmN0aW9uKGVycikge1xuICAgIGVycm9yID0gZXJyO1xuICB9KTtcblxuICBwcm9jZXNzLnBpcGUodGhpcywgeyBlbmQ6IGZhbHNlIH0pO1xuXG4gIHJldHVybiBwcm9jZXNzO1xufTtcblxuWmlwQXJjaGl2ZU91dHB1dFN0cmVhbS5wcm90b3R5cGUuX3dyaXRlQ2VudHJhbERpcmVjdG9yeUVuZCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcmVjb3JkcyA9IHRoaXMuX2VudHJpZXMubGVuZ3RoO1xuICB2YXIgc2l6ZSA9IHRoaXMuX2FyY2hpdmUuY2VudHJhbExlbmd0aDtcbiAgdmFyIG9mZnNldCA9IHRoaXMuX2FyY2hpdmUuY2VudHJhbE9mZnNldDtcblxuICBpZiAodGhpcy5pc1ppcDY0KCkpIHtcbiAgICByZWNvcmRzID0gY29uc3RhbnRzLlpJUDY0X01BR0lDX1NIT1JUO1xuICAgIHNpemUgPSBjb25zdGFudHMuWklQNjRfTUFHSUM7XG4gICAgb2Zmc2V0ID0gY29uc3RhbnRzLlpJUDY0X01BR0lDO1xuICB9XG5cbiAgLy8gc2lnbmF0dXJlXG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRMb25nQnl0ZXMoY29uc3RhbnRzLlNJR19FT0NEKSk7XG5cbiAgLy8gZGlzayBudW1iZXJzXG4gIHRoaXMud3JpdGUoY29uc3RhbnRzLlNIT1JUX1pFUk8pO1xuICB0aGlzLndyaXRlKGNvbnN0YW50cy5TSE9SVF9aRVJPKTtcblxuICAvLyBudW1iZXIgb2YgZW50cmllc1xuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0U2hvcnRCeXRlcyhyZWNvcmRzKSk7XG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRTaG9ydEJ5dGVzKHJlY29yZHMpKTtcblxuICAvLyBsZW5ndGggYW5kIGxvY2F0aW9uIG9mIENEXG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRMb25nQnl0ZXMoc2l6ZSkpO1xuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0TG9uZ0J5dGVzKG9mZnNldCkpO1xuXG4gIC8vIGFyY2hpdmUgY29tbWVudFxuICB2YXIgY29tbWVudCA9IHRoaXMuZ2V0Q29tbWVudCgpO1xuICB2YXIgY29tbWVudExlbmd0aCA9IEJ1ZmZlci5ieXRlTGVuZ3RoKGNvbW1lbnQpO1xuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0U2hvcnRCeXRlcyhjb21tZW50TGVuZ3RoKSk7XG4gIHRoaXMud3JpdGUoY29tbWVudCk7XG59O1xuXG5aaXBBcmNoaXZlT3V0cHV0U3RyZWFtLnByb3RvdHlwZS5fd3JpdGVDZW50cmFsRGlyZWN0b3J5WmlwNjQgPSBmdW5jdGlvbigpIHtcbiAgLy8gc2lnbmF0dXJlXG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRMb25nQnl0ZXMoY29uc3RhbnRzLlNJR19aSVA2NF9FT0NEKSk7XG5cbiAgLy8gc2l6ZSBvZiB0aGUgWklQNjQgRU9DRCByZWNvcmRcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldEVpZ2h0Qnl0ZXMoNDQpKTtcblxuICAvLyB2ZXJzaW9uIG1hZGUgYnlcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldFNob3J0Qnl0ZXMoY29uc3RhbnRzLk1JTl9WRVJTSU9OX1pJUDY0KSk7XG5cbiAgLy8gdmVyc2lvbiB0byBleHRyYWN0XG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRTaG9ydEJ5dGVzKGNvbnN0YW50cy5NSU5fVkVSU0lPTl9aSVA2NCkpO1xuXG4gIC8vIGRpc2sgbnVtYmVyc1xuICB0aGlzLndyaXRlKGNvbnN0YW50cy5MT05HX1pFUk8pO1xuICB0aGlzLndyaXRlKGNvbnN0YW50cy5MT05HX1pFUk8pO1xuXG4gIC8vIG51bWJlciBvZiBlbnRyaWVzXG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRFaWdodEJ5dGVzKHRoaXMuX2VudHJpZXMubGVuZ3RoKSk7XG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRFaWdodEJ5dGVzKHRoaXMuX2VudHJpZXMubGVuZ3RoKSk7XG5cbiAgLy8gbGVuZ3RoIGFuZCBsb2NhdGlvbiBvZiBDRFxuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0RWlnaHRCeXRlcyh0aGlzLl9hcmNoaXZlLmNlbnRyYWxMZW5ndGgpKTtcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldEVpZ2h0Qnl0ZXModGhpcy5fYXJjaGl2ZS5jZW50cmFsT2Zmc2V0KSk7XG5cbiAgLy8gZXh0ZW5zaWJsZSBkYXRhIHNlY3RvclxuICAvLyBub3QgaW1wbGVtZW50ZWQgYXQgdGhpcyB0aW1lXG5cbiAgLy8gZW5kIG9mIGNlbnRyYWwgZGlyZWN0b3J5IGxvY2F0b3JcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldExvbmdCeXRlcyhjb25zdGFudHMuU0lHX1pJUDY0X0VPQ0RfTE9DKSk7XG5cbiAgLy8gZGlzayBudW1iZXIgaG9sZGluZyB0aGUgWklQNjQgRU9DRCByZWNvcmRcbiAgdGhpcy53cml0ZShjb25zdGFudHMuTE9OR19aRVJPKTtcblxuICAvLyByZWxhdGl2ZSBvZmZzZXQgb2YgdGhlIFpJUDY0IEVPQ0QgcmVjb3JkXG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRFaWdodEJ5dGVzKHRoaXMuX2FyY2hpdmUuY2VudHJhbE9mZnNldCArIHRoaXMuX2FyY2hpdmUuY2VudHJhbExlbmd0aCkpO1xuXG4gIC8vIHRvdGFsIG51bWJlciBvZiBkaXNrc1xuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0TG9uZ0J5dGVzKDEpKTtcbn07XG5cblppcEFyY2hpdmVPdXRwdXRTdHJlYW0ucHJvdG90eXBlLl93cml0ZUNlbnRyYWxGaWxlSGVhZGVyID0gZnVuY3Rpb24oYWUpIHtcbiAgdmFyIGdwYiA9IGFlLmdldEdlbmVyYWxQdXJwb3NlQml0KCk7XG4gIHZhciBtZXRob2QgPSBhZS5nZXRNZXRob2QoKTtcbiAgdmFyIGZpbGVPZmZzZXQgPSBhZS5fb2Zmc2V0cy5maWxlO1xuXG4gIHZhciBzaXplID0gYWUuZ2V0U2l6ZSgpO1xuICB2YXIgY29tcHJlc3NlZFNpemUgPSBhZS5nZXRDb21wcmVzc2VkU2l6ZSgpO1xuXG4gIGlmIChhZS5pc1ppcDY0KCkgfHwgZmlsZU9mZnNldCA+IGNvbnN0YW50cy5aSVA2NF9NQUdJQykge1xuICAgIHNpemUgPSBjb25zdGFudHMuWklQNjRfTUFHSUM7XG4gICAgY29tcHJlc3NlZFNpemUgPSBjb25zdGFudHMuWklQNjRfTUFHSUM7XG4gICAgZmlsZU9mZnNldCA9IGNvbnN0YW50cy5aSVA2NF9NQUdJQztcblxuICAgIGFlLnNldFZlcnNpb25OZWVkZWRUb0V4dHJhY3QoY29uc3RhbnRzLk1JTl9WRVJTSU9OX1pJUDY0KTtcblxuICAgIHZhciBleHRyYUJ1ZiA9IEJ1ZmZlci5jb25jYXQoW1xuICAgICAgemlwVXRpbC5nZXRTaG9ydEJ5dGVzKGNvbnN0YW50cy5aSVA2NF9FWFRSQV9JRCksXG4gICAgICB6aXBVdGlsLmdldFNob3J0Qnl0ZXMoMjQpLFxuICAgICAgemlwVXRpbC5nZXRFaWdodEJ5dGVzKGFlLmdldFNpemUoKSksXG4gICAgICB6aXBVdGlsLmdldEVpZ2h0Qnl0ZXMoYWUuZ2V0Q29tcHJlc3NlZFNpemUoKSksXG4gICAgICB6aXBVdGlsLmdldEVpZ2h0Qnl0ZXMoYWUuX29mZnNldHMuZmlsZSlcbiAgICBdLCAyOCk7XG5cbiAgICBhZS5zZXRFeHRyYShleHRyYUJ1Zik7XG4gIH1cblxuICAvLyBzaWduYXR1cmVcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldExvbmdCeXRlcyhjb25zdGFudHMuU0lHX0NGSCkpO1xuXG4gIC8vIHZlcnNpb24gbWFkZSBieVxuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0U2hvcnRCeXRlcygoYWUuZ2V0UGxhdGZvcm0oKSA8PCA4KSB8IGNvbnN0YW50cy5WRVJTSU9OX01BREVCWSkpO1xuXG4gIC8vIHZlcnNpb24gdG8gZXh0cmFjdCBhbmQgZ2VuZXJhbCBiaXQgZmxhZ1xuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0U2hvcnRCeXRlcyhhZS5nZXRWZXJzaW9uTmVlZGVkVG9FeHRyYWN0KCkpKTtcbiAgdGhpcy53cml0ZShncGIuZW5jb2RlKCkpO1xuXG4gIC8vIGNvbXByZXNzaW9uIG1ldGhvZFxuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0U2hvcnRCeXRlcyhtZXRob2QpKTtcblxuICAvLyBkYXRldGltZVxuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0TG9uZ0J5dGVzKGFlLmdldFRpbWVEb3MoKSkpO1xuXG4gIC8vIGNyYzMyIGNoZWNrc3VtXG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRMb25nQnl0ZXMoYWUuZ2V0Q3JjKCkpKTtcblxuICAvLyBzaXplc1xuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0TG9uZ0J5dGVzKGNvbXByZXNzZWRTaXplKSk7XG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRMb25nQnl0ZXMoc2l6ZSkpO1xuXG4gIHZhciBuYW1lID0gYWUuZ2V0TmFtZSgpO1xuICB2YXIgY29tbWVudCA9IGFlLmdldENvbW1lbnQoKTtcbiAgdmFyIGV4dHJhID0gYWUuZ2V0Q2VudHJhbERpcmVjdG9yeUV4dHJhKCk7XG5cbiAgaWYgKGdwYi51c2VzVVRGOEZvck5hbWVzKCkpIHtcbiAgICBuYW1lID0gQnVmZmVyLmZyb20obmFtZSk7XG4gICAgY29tbWVudCA9IEJ1ZmZlci5mcm9tKGNvbW1lbnQpO1xuICB9XG5cbiAgLy8gbmFtZSBsZW5ndGhcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldFNob3J0Qnl0ZXMobmFtZS5sZW5ndGgpKTtcblxuICAvLyBleHRyYSBsZW5ndGhcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldFNob3J0Qnl0ZXMoZXh0cmEubGVuZ3RoKSk7XG5cbiAgLy8gY29tbWVudHMgbGVuZ3RoXG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRTaG9ydEJ5dGVzKGNvbW1lbnQubGVuZ3RoKSk7XG5cbiAgLy8gZGlzayBudW1iZXIgc3RhcnRcbiAgdGhpcy53cml0ZShjb25zdGFudHMuU0hPUlRfWkVSTyk7XG5cbiAgLy8gaW50ZXJuYWwgYXR0cmlidXRlc1xuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0U2hvcnRCeXRlcyhhZS5nZXRJbnRlcm5hbEF0dHJpYnV0ZXMoKSkpO1xuXG4gIC8vIGV4dGVybmFsIGF0dHJpYnV0ZXNcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldExvbmdCeXRlcyhhZS5nZXRFeHRlcm5hbEF0dHJpYnV0ZXMoKSkpO1xuXG4gIC8vIHJlbGF0aXZlIG9mZnNldCBvZiBMRkhcbiAgdGhpcy53cml0ZSh6aXBVdGlsLmdldExvbmdCeXRlcyhmaWxlT2Zmc2V0KSk7XG5cbiAgLy8gbmFtZVxuICB0aGlzLndyaXRlKG5hbWUpO1xuXG4gIC8vIGV4dHJhXG4gIHRoaXMud3JpdGUoZXh0cmEpO1xuXG4gIC8vIGNvbW1lbnRcbiAgdGhpcy53cml0ZShjb21tZW50KTtcbn07XG5cblppcEFyY2hpdmVPdXRwdXRTdHJlYW0ucHJvdG90eXBlLl93cml0ZURhdGFEZXNjcmlwdG9yID0gZnVuY3Rpb24oYWUpIHtcbiAgLy8gc2lnbmF0dXJlXG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRMb25nQnl0ZXMoY29uc3RhbnRzLlNJR19ERCkpO1xuXG4gIC8vIGNyYzMyIGNoZWNrc3VtXG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRMb25nQnl0ZXMoYWUuZ2V0Q3JjKCkpKTtcblxuICAvLyBzaXplc1xuICBpZiAoYWUuaXNaaXA2NCgpKSB7XG4gICAgdGhpcy53cml0ZSh6aXBVdGlsLmdldEVpZ2h0Qnl0ZXMoYWUuZ2V0Q29tcHJlc3NlZFNpemUoKSkpO1xuICAgIHRoaXMud3JpdGUoemlwVXRpbC5nZXRFaWdodEJ5dGVzKGFlLmdldFNpemUoKSkpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMud3JpdGUoemlwVXRpbC5nZXRMb25nQnl0ZXMoYWUuZ2V0Q29tcHJlc3NlZFNpemUoKSkpO1xuICAgIHRoaXMud3JpdGUoemlwVXRpbC5nZXRMb25nQnl0ZXMoYWUuZ2V0U2l6ZSgpKSk7XG4gIH1cbn07XG5cblppcEFyY2hpdmVPdXRwdXRTdHJlYW0ucHJvdG90eXBlLl93cml0ZUxvY2FsRmlsZUhlYWRlciA9IGZ1bmN0aW9uKGFlKSB7XG4gIHZhciBncGIgPSBhZS5nZXRHZW5lcmFsUHVycG9zZUJpdCgpO1xuICB2YXIgbWV0aG9kID0gYWUuZ2V0TWV0aG9kKCk7XG4gIHZhciBuYW1lID0gYWUuZ2V0TmFtZSgpO1xuICB2YXIgZXh0cmEgPSBhZS5nZXRMb2NhbEZpbGVEYXRhRXh0cmEoKTtcblxuICBpZiAoYWUuaXNaaXA2NCgpKSB7XG4gICAgZ3BiLnVzZURhdGFEZXNjcmlwdG9yKHRydWUpO1xuICAgIGFlLnNldFZlcnNpb25OZWVkZWRUb0V4dHJhY3QoY29uc3RhbnRzLk1JTl9WRVJTSU9OX1pJUDY0KTtcbiAgfVxuXG4gIGlmIChncGIudXNlc1VURjhGb3JOYW1lcygpKSB7XG4gICAgbmFtZSA9IEJ1ZmZlci5mcm9tKG5hbWUpO1xuICB9XG5cbiAgYWUuX29mZnNldHMuZmlsZSA9IHRoaXMub2Zmc2V0O1xuXG4gIC8vIHNpZ25hdHVyZVxuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0TG9uZ0J5dGVzKGNvbnN0YW50cy5TSUdfTEZIKSk7XG5cbiAgLy8gdmVyc2lvbiB0byBleHRyYWN0IGFuZCBnZW5lcmFsIGJpdCBmbGFnXG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRTaG9ydEJ5dGVzKGFlLmdldFZlcnNpb25OZWVkZWRUb0V4dHJhY3QoKSkpO1xuICB0aGlzLndyaXRlKGdwYi5lbmNvZGUoKSk7XG5cbiAgLy8gY29tcHJlc3Npb24gbWV0aG9kXG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRTaG9ydEJ5dGVzKG1ldGhvZCkpO1xuXG4gIC8vIGRhdGV0aW1lXG4gIHRoaXMud3JpdGUoemlwVXRpbC5nZXRMb25nQnl0ZXMoYWUuZ2V0VGltZURvcygpKSk7XG5cbiAgYWUuX29mZnNldHMuZGF0YSA9IHRoaXMub2Zmc2V0O1xuXG4gIC8vIGNyYzMyIGNoZWNrc3VtIGFuZCBzaXplc1xuICBpZiAoZ3BiLnVzZXNEYXRhRGVzY3JpcHRvcigpKSB7XG4gICAgdGhpcy53cml0ZShjb25zdGFudHMuTE9OR19aRVJPKTtcbiAgICB0aGlzLndyaXRlKGNvbnN0YW50cy5MT05HX1pFUk8pO1xuICAgIHRoaXMud3JpdGUoY29uc3RhbnRzLkxPTkdfWkVSTyk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy53cml0ZSh6aXBVdGlsLmdldExvbmdCeXRlcyhhZS5nZXRDcmMoKSkpO1xuICAgIHRoaXMud3JpdGUoemlwVXRpbC5nZXRMb25nQnl0ZXMoYWUuZ2V0Q29tcHJlc3NlZFNpemUoKSkpO1xuICAgIHRoaXMud3JpdGUoemlwVXRpbC5nZXRMb25nQnl0ZXMoYWUuZ2V0U2l6ZSgpKSk7XG4gIH1cblxuICAvLyBuYW1lIGxlbmd0aFxuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0U2hvcnRCeXRlcyhuYW1lLmxlbmd0aCkpO1xuXG4gIC8vIGV4dHJhIGxlbmd0aFxuICB0aGlzLndyaXRlKHppcFV0aWwuZ2V0U2hvcnRCeXRlcyhleHRyYS5sZW5ndGgpKTtcblxuICAvLyBuYW1lXG4gIHRoaXMud3JpdGUobmFtZSk7XG5cbiAgLy8gZXh0cmFcbiAgdGhpcy53cml0ZShleHRyYSk7XG5cbiAgYWUuX29mZnNldHMuY29udGVudHMgPSB0aGlzLm9mZnNldDtcbn07XG5cblppcEFyY2hpdmVPdXRwdXRTdHJlYW0ucHJvdG90eXBlLmdldENvbW1lbnQgPSBmdW5jdGlvbihjb21tZW50KSB7XG4gIHJldHVybiB0aGlzLl9hcmNoaXZlLmNvbW1lbnQgIT09IG51bGwgPyB0aGlzLl9hcmNoaXZlLmNvbW1lbnQgOiAnJztcbn07XG5cblppcEFyY2hpdmVPdXRwdXRTdHJlYW0ucHJvdG90eXBlLmlzWmlwNjQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuX2FyY2hpdmUuZm9yY2VaaXA2NCB8fCB0aGlzLl9lbnRyaWVzLmxlbmd0aCA+IGNvbnN0YW50cy5aSVA2NF9NQUdJQ19TSE9SVCB8fCB0aGlzLl9hcmNoaXZlLmNlbnRyYWxMZW5ndGggPiBjb25zdGFudHMuWklQNjRfTUFHSUMgfHwgdGhpcy5fYXJjaGl2ZS5jZW50cmFsT2Zmc2V0ID4gY29uc3RhbnRzLlpJUDY0X01BR0lDO1xufTtcblxuWmlwQXJjaGl2ZU91dHB1dFN0cmVhbS5wcm90b3R5cGUuc2V0Q29tbWVudCA9IGZ1bmN0aW9uKGNvbW1lbnQpIHtcbiAgdGhpcy5fYXJjaGl2ZS5jb21tZW50ID0gY29tbWVudDtcbn07XG4iLAogICAgIi8qKlxuICogbm9kZS1jb21wcmVzcy1jb21tb25zXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE0IENocmlzIFRhbGtpbmd0b24sIGNvbnRyaWJ1dG9ycy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hcmNoaXZlcmpzL25vZGUtY29tcHJlc3MtY29tbW9ucy9ibG9iL21hc3Rlci9MSUNFTlNFLU1JVFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQXJjaGl2ZUVudHJ5OiByZXF1aXJlKCcuL2FyY2hpdmVycy9hcmNoaXZlLWVudHJ5JyksXG4gIFppcEFyY2hpdmVFbnRyeTogcmVxdWlyZSgnLi9hcmNoaXZlcnMvemlwL3ppcC1hcmNoaXZlLWVudHJ5JyksXG4gIEFyY2hpdmVPdXRwdXRTdHJlYW06IHJlcXVpcmUoJy4vYXJjaGl2ZXJzL2FyY2hpdmUtb3V0cHV0LXN0cmVhbScpLFxuICBaaXBBcmNoaXZlT3V0cHV0U3RyZWFtOiByZXF1aXJlKCcuL2FyY2hpdmVycy96aXAvemlwLWFyY2hpdmUtb3V0cHV0LXN0cmVhbScpXG59OyIsCiAgICAiLyoqXG4gKiBaaXBTdHJlYW1cbiAqXG4gKiBAaWdub3JlXG4gKiBAbGljZW5zZSBbTUlUXXtAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXJjaGl2ZXJqcy9ub2RlLXppcC1zdHJlYW0vYmxvYi9tYXN0ZXIvTElDRU5TRX1cbiAqIEBjb3B5cmlnaHQgKGMpIDIwMTQgQ2hyaXMgVGFsa2luZ3RvbiwgY29udHJpYnV0b3JzLlxuICovXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCd1dGlsJykuaW5oZXJpdHM7XG5cbnZhciBaaXBBcmNoaXZlT3V0cHV0U3RyZWFtID0gcmVxdWlyZSgnY29tcHJlc3MtY29tbW9ucycpLlppcEFyY2hpdmVPdXRwdXRTdHJlYW07XG52YXIgWmlwQXJjaGl2ZUVudHJ5ID0gcmVxdWlyZSgnY29tcHJlc3MtY29tbW9ucycpLlppcEFyY2hpdmVFbnRyeTtcblxudmFyIHV0aWwgPSByZXF1aXJlKCdhcmNoaXZlci11dGlscycpO1xuXG4vKipcbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgZXh0ZXJuYWw6WmlwQXJjaGl2ZU91dHB1dFN0cmVhbVxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLmNvbW1lbnRdIFNldHMgdGhlIHppcCBhcmNoaXZlIGNvbW1lbnQuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLmZvcmNlTG9jYWxUaW1lPWZhbHNlXSBGb3JjZXMgdGhlIGFyY2hpdmUgdG8gY29udGFpbiBsb2NhbCBmaWxlIHRpbWVzIGluc3RlYWQgb2YgVVRDLlxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5mb3JjZVppcDY0PWZhbHNlXSBGb3JjZXMgdGhlIGFyY2hpdmUgdG8gY29udGFpbiBaSVA2NCBoZWFkZXJzLlxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5zdG9yZT1mYWxzZV0gU2V0cyB0aGUgY29tcHJlc3Npb24gbWV0aG9kIHRvIFNUT1JFLlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLnpsaWJdIFBhc3NlZCB0byBbemxpYl17QGxpbmsgaHR0cHM6Ly9ub2RlanMub3JnL2FwaS96bGliLmh0bWwjemxpYl9jbGFzc19vcHRpb25zfVxuICogdG8gY29udHJvbCBjb21wcmVzc2lvbi5cbiAqL1xudmFyIFppcFN0cmVhbSA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgWmlwU3RyZWFtKSkge1xuICAgIHJldHVybiBuZXcgWmlwU3RyZWFtKG9wdGlvbnMpO1xuICB9XG5cbiAgb3B0aW9ucyA9IHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIG9wdGlvbnMuemxpYiA9IG9wdGlvbnMuemxpYiB8fCB7fTtcblxuICBaaXBBcmNoaXZlT3V0cHV0U3RyZWFtLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cbiAgaWYgKHR5cGVvZiBvcHRpb25zLmxldmVsID09PSAnbnVtYmVyJyAmJiBvcHRpb25zLmxldmVsID49IDApIHtcbiAgICBvcHRpb25zLnpsaWIubGV2ZWwgPSBvcHRpb25zLmxldmVsO1xuICAgIGRlbGV0ZSBvcHRpb25zLmxldmVsO1xuICB9XG5cbiAgaWYgKCFvcHRpb25zLmZvcmNlWmlwNjQgJiYgdHlwZW9mIG9wdGlvbnMuemxpYi5sZXZlbCA9PT0gJ251bWJlcicgJiYgb3B0aW9ucy56bGliLmxldmVsID09PSAwKSB7XG4gICAgb3B0aW9ucy5zdG9yZSA9IHRydWU7XG4gIH1cblxuICBvcHRpb25zLm5hbWVQcmVwZW5kU2xhc2ggPSBvcHRpb25zLm5hbWVQcmVwZW5kU2xhc2ggfHwgZmFsc2U7XG5cbiAgaWYgKG9wdGlvbnMuY29tbWVudCAmJiBvcHRpb25zLmNvbW1lbnQubGVuZ3RoID4gMCkge1xuICAgIHRoaXMuc2V0Q29tbWVudChvcHRpb25zLmNvbW1lbnQpO1xuICB9XG59O1xuXG5pbmhlcml0cyhaaXBTdHJlYW0sIFppcEFyY2hpdmVPdXRwdXRTdHJlYW0pO1xuXG4vKipcbiAqIE5vcm1hbGl6ZXMgZW50cnkgZGF0YSB3aXRoIGZhbGxiYWNrcyBmb3Iga2V5IHByb3BlcnRpZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSAge09iamVjdH0gZGF0YVxuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5aaXBTdHJlYW0ucHJvdG90eXBlLl9ub3JtYWxpemVGaWxlRGF0YSA9IGZ1bmN0aW9uKGRhdGEpIHtcbiAgZGF0YSA9IHV0aWwuZGVmYXVsdHMoZGF0YSwge1xuICAgIHR5cGU6ICdmaWxlJyxcbiAgICBuYW1lOiBudWxsLFxuICAgIG5hbWVQcmVwZW5kU2xhc2g6IHRoaXMub3B0aW9ucy5uYW1lUHJlcGVuZFNsYXNoLFxuICAgIGxpbmtuYW1lOiBudWxsLFxuICAgIGRhdGU6IG51bGwsXG4gICAgbW9kZTogbnVsbCxcbiAgICBzdG9yZTogdGhpcy5vcHRpb25zLnN0b3JlLFxuICAgIGNvbW1lbnQ6ICcnXG4gIH0pO1xuXG4gIHZhciBpc0RpciA9IGRhdGEudHlwZSA9PT0gJ2RpcmVjdG9yeSc7XG4gIHZhciBpc1N5bWxpbmsgPSBkYXRhLnR5cGUgPT09ICdzeW1saW5rJztcblxuICBpZiAoZGF0YS5uYW1lKSB7XG4gICAgZGF0YS5uYW1lID0gdXRpbC5zYW5pdGl6ZVBhdGgoZGF0YS5uYW1lKTtcblxuICAgIGlmICghaXNTeW1saW5rICYmIGRhdGEubmFtZS5zbGljZSgtMSkgPT09ICcvJykge1xuICAgICAgaXNEaXIgPSB0cnVlO1xuICAgICAgZGF0YS50eXBlID0gJ2RpcmVjdG9yeSc7XG4gICAgfSBlbHNlIGlmIChpc0Rpcikge1xuICAgICAgZGF0YS5uYW1lICs9ICcvJztcbiAgICB9XG4gIH1cblxuICBpZiAoaXNEaXIgfHwgaXNTeW1saW5rKSB7XG4gICAgZGF0YS5zdG9yZSA9IHRydWU7XG4gIH1cblxuICBkYXRhLmRhdGUgPSB1dGlsLmRhdGVpZnkoZGF0YS5kYXRlKTtcblxuICByZXR1cm4gZGF0YTtcbn07XG5cbi8qKlxuICogQXBwZW5kcyBhbiBlbnRyeSBnaXZlbiBhbiBpbnB1dCBzb3VyY2UgKHRleHQgc3RyaW5nLCBidWZmZXIsIG9yIHN0cmVhbSkuXG4gKlxuICogQHBhcmFtICB7KEJ1ZmZlcnxTdHJlYW18U3RyaW5nKX0gc291cmNlIFRoZSBpbnB1dCBzb3VyY2UuXG4gKiBAcGFyYW0gIHtPYmplY3R9IGRhdGFcbiAqIEBwYXJhbSAge1N0cmluZ30gZGF0YS5uYW1lIFNldHMgdGhlIGVudHJ5IG5hbWUgaW5jbHVkaW5nIGludGVybmFsIHBhdGguXG4gKiBAcGFyYW0gIHtTdHJpbmd9IFtkYXRhLmNvbW1lbnRdIFNldHMgdGhlIGVudHJ5IGNvbW1lbnQuXG4gKiBAcGFyYW0gIHsoU3RyaW5nfERhdGUpfSBbZGF0YS5kYXRlPU5PVygpXSBTZXRzIHRoZSBlbnRyeSBkYXRlLlxuICogQHBhcmFtICB7TnVtYmVyfSBbZGF0YS5tb2RlPUQ6MDc1NS9GOjA2NDRdIFNldHMgdGhlIGVudHJ5IHBlcm1pc3Npb25zLlxuICogQHBhcmFtICB7Qm9vbGVhbn0gW2RhdGEuc3RvcmU9b3B0aW9ucy5zdG9yZV0gU2V0cyB0aGUgY29tcHJlc3Npb24gbWV0aG9kIHRvIFNUT1JFLlxuICogQHBhcmFtICB7U3RyaW5nfSBbZGF0YS50eXBlPWZpbGVdIFNldHMgdGhlIGVudHJ5IHR5cGUuIERlZmF1bHRzIHRvIGBkaXJlY3RvcnlgXG4gKiBpZiBuYW1lIGVuZHMgd2l0aCB0cmFpbGluZyBzbGFzaC5cbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB0aGlzXG4gKi9cblppcFN0cmVhbS5wcm90b3R5cGUuZW50cnkgPSBmdW5jdGlvbihzb3VyY2UsIGRhdGEsIGNhbGxiYWNrKSB7XG4gIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICBjYWxsYmFjayA9IHRoaXMuX2VtaXRFcnJvckNhbGxiYWNrLmJpbmQodGhpcyk7XG4gIH1cblxuICBkYXRhID0gdGhpcy5fbm9ybWFsaXplRmlsZURhdGEoZGF0YSk7XG5cbiAgaWYgKGRhdGEudHlwZSAhPT0gJ2ZpbGUnICYmIGRhdGEudHlwZSAhPT0gJ2RpcmVjdG9yeScgJiYgZGF0YS50eXBlICE9PSAnc3ltbGluaycpIHtcbiAgICBjYWxsYmFjayhuZXcgRXJyb3IoZGF0YS50eXBlICsgJyBlbnRyaWVzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkJykpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh0eXBlb2YgZGF0YS5uYW1lICE9PSAnc3RyaW5nJyB8fCBkYXRhLm5hbWUubGVuZ3RoID09PSAwKSB7XG4gICAgY2FsbGJhY2sobmV3IEVycm9yKCdlbnRyeSBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIHZhbHVlJykpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChkYXRhLnR5cGUgPT09ICdzeW1saW5rJyAmJiB0eXBlb2YgZGF0YS5saW5rbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICBjYWxsYmFjayhuZXcgRXJyb3IoJ2VudHJ5IGxpbmtuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIHZhbHVlIHdoZW4gdHlwZSBlcXVhbHMgc3ltbGluaycpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZW50cnkgPSBuZXcgWmlwQXJjaGl2ZUVudHJ5KGRhdGEubmFtZSk7XG4gIGVudHJ5LnNldFRpbWUoZGF0YS5kYXRlLCB0aGlzLm9wdGlvbnMuZm9yY2VMb2NhbFRpbWUpO1xuXG4gIGlmIChkYXRhLm5hbWVQcmVwZW5kU2xhc2gpIHtcbiAgICBlbnRyeS5zZXROYW1lKGRhdGEubmFtZSwgdHJ1ZSk7XG4gIH1cblxuICBpZiAoZGF0YS5zdG9yZSkge1xuICAgIGVudHJ5LnNldE1ldGhvZCgwKTtcbiAgfVxuXG4gIGlmIChkYXRhLmNvbW1lbnQubGVuZ3RoID4gMCkge1xuICAgIGVudHJ5LnNldENvbW1lbnQoZGF0YS5jb21tZW50KTtcbiAgfVxuXG4gIGlmIChkYXRhLnR5cGUgPT09ICdzeW1saW5rJyAmJiB0eXBlb2YgZGF0YS5tb2RlICE9PSAnbnVtYmVyJykge1xuICAgIGRhdGEubW9kZSA9IDQwOTYwOyAvLyAwMTIwMDAwXG4gIH1cblxuICBpZiAodHlwZW9mIGRhdGEubW9kZSA9PT0gJ251bWJlcicpIHtcbiAgICBpZiAoZGF0YS50eXBlID09PSAnc3ltbGluaycpIHtcbiAgICAgIGRhdGEubW9kZSB8PSA0MDk2MDtcbiAgICB9XG5cbiAgICBlbnRyeS5zZXRVbml4TW9kZShkYXRhLm1vZGUpO1xuICB9XG5cbiAgaWYgKGRhdGEudHlwZSA9PT0gJ3N5bWxpbmsnICYmIHR5cGVvZiBkYXRhLmxpbmtuYW1lID09PSAnc3RyaW5nJykge1xuICAgIHNvdXJjZSA9IEJ1ZmZlci5mcm9tKGRhdGEubGlua25hbWUpO1xuICB9XG5cbiAgcmV0dXJuIFppcEFyY2hpdmVPdXRwdXRTdHJlYW0ucHJvdG90eXBlLmVudHJ5LmNhbGwodGhpcywgZW50cnksIHNvdXJjZSwgY2FsbGJhY2spO1xufTtcblxuLyoqXG4gKiBGaW5hbGl6ZXMgdGhlIGluc3RhbmNlIGFuZCBwcmV2ZW50cyBmdXJ0aGVyIGFwcGVuZGluZyB0byB0aGUgYXJjaGl2ZVxuICogc3RydWN0dXJlIChxdWV1ZSB3aWxsIGNvbnRpbnVlIHRpbCBkcmFpbmVkKS5cbiAqXG4gKiBAcmV0dXJuIHZvaWRcbiAqL1xuWmlwU3RyZWFtLnByb3RvdHlwZS5maW5hbGl6ZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLmZpbmlzaCgpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjdXJyZW50IG51bWJlciBvZiBieXRlcyB3cml0dGVuIHRvIHRoaXMgc3RyZWFtLlxuICogQGZ1bmN0aW9uIFppcFN0cmVhbSNnZXRCeXRlc1dyaXR0ZW5cbiAqIEByZXR1cm5zIHtOdW1iZXJ9XG4gKi9cblxuLyoqXG4gKiBDb21wcmVzcyBDb21tb25zIFppcEFyY2hpdmVPdXRwdXRTdHJlYW1cbiAqIEBleHRlcm5hbCBaaXBBcmNoaXZlT3V0cHV0U3RyZWFtXG4gKiBAc2VlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXJjaGl2ZXJqcy9ub2RlLWNvbXByZXNzLWNvbW1vbnN9XG4gKi9cbiIsCiAgICAiLyoqXG4gKiBaSVAgRm9ybWF0IFBsdWdpblxuICpcbiAqIEBtb2R1bGUgcGx1Z2lucy96aXBcbiAqIEBsaWNlbnNlIFtNSVRde0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hcmNoaXZlcmpzL25vZGUtYXJjaGl2ZXIvYmxvYi9tYXN0ZXIvTElDRU5TRX1cbiAqIEBjb3B5cmlnaHQgKGMpIDIwMTItMjAxNCBDaHJpcyBUYWxraW5ndG9uLCBjb250cmlidXRvcnMuXG4gKi9cbnZhciBlbmdpbmUgPSByZXF1aXJlKCd6aXAtc3RyZWFtJyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJ2FyY2hpdmVyLXV0aWxzJyk7XG5cbi8qKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge1ppcE9wdGlvbnN9IFtvcHRpb25zXVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLmNvbW1lbnRdIFNldHMgdGhlIHppcCBhcmNoaXZlIGNvbW1lbnQuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLmZvcmNlTG9jYWxUaW1lPWZhbHNlXSBGb3JjZXMgdGhlIGFyY2hpdmUgdG8gY29udGFpbiBsb2NhbCBmaWxlIHRpbWVzIGluc3RlYWQgb2YgVVRDLlxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5mb3JjZVppcDY0PWZhbHNlXSBGb3JjZXMgdGhlIGFyY2hpdmUgdG8gY29udGFpbiBaSVA2NCBoZWFkZXJzLlxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5uYW1lUHJlcGVuZFNsYXNoPWZhbHNlXSBQcmVwZW5kcyBhIGZvcndhcmQgc2xhc2ggdG8gYXJjaGl2ZSBmaWxlIHBhdGhzLlxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5zdG9yZT1mYWxzZV0gU2V0cyB0aGUgY29tcHJlc3Npb24gbWV0aG9kIHRvIFNUT1JFLlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLnpsaWJdIFBhc3NlZCB0byBbemxpYl17QGxpbmsgaHR0cHM6Ly9ub2RlanMub3JnL2FwaS96bGliLmh0bWwjemxpYl9jbGFzc19vcHRpb25zfVxuICovXG52YXIgWmlwID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgWmlwKSkge1xuICAgIHJldHVybiBuZXcgWmlwKG9wdGlvbnMpO1xuICB9XG5cbiAgb3B0aW9ucyA9IHRoaXMub3B0aW9ucyA9IHV0aWwuZGVmYXVsdHMob3B0aW9ucywge1xuICAgIGNvbW1lbnQ6ICcnLFxuICAgIGZvcmNlVVRDOiBmYWxzZSxcbiAgICBuYW1lUHJlcGVuZFNsYXNoOiBmYWxzZSxcbiAgICBzdG9yZTogZmFsc2VcbiAgfSk7XG5cbiAgdGhpcy5zdXBwb3J0cyA9IHtcbiAgICBkaXJlY3Rvcnk6IHRydWUsXG4gICAgc3ltbGluazogdHJ1ZVxuICB9O1xuXG4gIHRoaXMuZW5naW5lID0gbmV3IGVuZ2luZShvcHRpb25zKTtcbn07XG5cbi8qKlxuICogQHBhcmFtICB7KEJ1ZmZlcnxTdHJlYW0pfSBzb3VyY2VcbiAqIEBwYXJhbSAge1ppcEVudHJ5RGF0YX0gZGF0YVxuICogQHBhcmFtICB7U3RyaW5nfSBkYXRhLm5hbWUgU2V0cyB0aGUgZW50cnkgbmFtZSBpbmNsdWRpbmcgaW50ZXJuYWwgcGF0aC5cbiAqIEBwYXJhbSAgeyhTdHJpbmd8RGF0ZSl9IFtkYXRhLmRhdGU9Tk9XKCldIFNldHMgdGhlIGVudHJ5IGRhdGUuXG4gKiBAcGFyYW0gIHtOdW1iZXJ9IFtkYXRhLm1vZGU9RDowNzU1L0Y6MDY0NF0gU2V0cyB0aGUgZW50cnkgcGVybWlzc2lvbnMuXG4gKiBAcGFyYW0gIHtTdHJpbmd9IFtkYXRhLnByZWZpeF0gU2V0cyBhIHBhdGggcHJlZml4IGZvciB0aGUgZW50cnkgbmFtZS4gVXNlZnVsXG4gKiB3aGVuIHdvcmtpbmcgd2l0aCBtZXRob2RzIGxpa2UgYGRpcmVjdG9yeWAgb3IgYGdsb2JgLlxuICogQHBhcmFtICB7ZnMuU3RhdHN9IFtkYXRhLnN0YXRzXSBTZXRzIHRoZSBmcyBzdGF0IGRhdGEgZm9yIHRoaXMgZW50cnkgYWxsb3dpbmdcbiAqIGZvciByZWR1Y3Rpb24gb2YgZnMgc3RhdCBjYWxscyB3aGVuIHN0YXQgZGF0YSBpcyBhbHJlYWR5IGtub3duLlxuICogQHBhcmFtICB7Qm9vbGVhbn0gW2RhdGEuc3RvcmU9WmlwT3B0aW9ucy5zdG9yZV0gU2V0cyB0aGUgY29tcHJlc3Npb24gbWV0aG9kIHRvIFNUT1JFLlxuICogQHBhcmFtICB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHZvaWRcbiAqL1xuWmlwLnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbihzb3VyY2UsIGRhdGEsIGNhbGxiYWNrKSB7XG4gIHRoaXMuZW5naW5lLmVudHJ5KHNvdXJjZSwgZGF0YSwgY2FsbGJhY2spO1xufTtcblxuLyoqXG4gKiBAcmV0dXJuIHZvaWRcbiAqL1xuWmlwLnByb3RvdHlwZS5maW5hbGl6ZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLmVuZ2luZS5maW5hbGl6ZSgpO1xufTtcblxuLyoqXG4gKiBAcmV0dXJuIHRoaXMuZW5naW5lXG4gKi9cblppcC5wcm90b3R5cGUub24gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZW5naW5lLm9uLmFwcGx5KHRoaXMuZW5naW5lLCBhcmd1bWVudHMpO1xufTtcblxuLyoqXG4gKiBAcmV0dXJuIHRoaXMuZW5naW5lXG4gKi9cblppcC5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5lbmdpbmUucGlwZS5hcHBseSh0aGlzLmVuZ2luZSwgYXJndW1lbnRzKTtcbn07XG5cbi8qKlxuICogQHJldHVybiB0aGlzLmVuZ2luZVxuICovXG5aaXAucHJvdG90eXBlLnVucGlwZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5lbmdpbmUudW5waXBlLmFwcGx5KHRoaXMuZW5naW5lLCBhcmd1bWVudHMpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBaaXA7XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gWmlwT3B0aW9uc1xuICogQGdsb2JhbFxuICogQHByb3BlcnR5IHtTdHJpbmd9IFtjb21tZW50XSBTZXRzIHRoZSB6aXAgYXJjaGl2ZSBjb21tZW50LlxuICogQHByb3BlcnR5IHtCb29sZWFufSBbZm9yY2VMb2NhbFRpbWU9ZmFsc2VdIEZvcmNlcyB0aGUgYXJjaGl2ZSB0byBjb250YWluIGxvY2FsIGZpbGUgdGltZXMgaW5zdGVhZCBvZiBVVEMuXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IFtmb3JjZVppcDY0PWZhbHNlXSBGb3JjZXMgdGhlIGFyY2hpdmUgdG8gY29udGFpbiBaSVA2NCBoZWFkZXJzLlxuICogQHBycHBlcnR5IHtCb29sZWFufSBbbmFtZVByZXBlbmRTbGFzaD1mYWxzZV0gUHJlcGVuZHMgYSBmb3J3YXJkIHNsYXNoIHRvIGFyY2hpdmUgZmlsZSBwYXRocy5cbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gW3N0b3JlPWZhbHNlXSBTZXRzIHRoZSBjb21wcmVzc2lvbiBtZXRob2QgdG8gU1RPUkUuXG4gKiBAcHJvcGVydHkge09iamVjdH0gW3psaWJdIFBhc3NlZCB0byBbemxpYl17QGxpbmsgaHR0cHM6Ly9ub2RlanMub3JnL2FwaS96bGliLmh0bWwjemxpYl9jbGFzc19vcHRpb25zfVxuICogdG8gY29udHJvbCBjb21wcmVzc2lvbi5cbiAqIEBwcm9wZXJ0eSB7Kn0gWypdIFNlZSBbemlwLXN0cmVhbV17QGxpbmsgaHR0cHM6Ly9hcmNoaXZlcmpzLmNvbS96aXAtc3RyZWFtL1ppcFN0cmVhbS5odG1sfSBkb2N1bWVudGF0aW9uIGZvciBjdXJyZW50IGxpc3Qgb2YgcHJvcGVydGllcy5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFppcEVudHJ5RGF0YVxuICogQGdsb2JhbFxuICogQHByb3BlcnR5IHtTdHJpbmd9IG5hbWUgU2V0cyB0aGUgZW50cnkgbmFtZSBpbmNsdWRpbmcgaW50ZXJuYWwgcGF0aC5cbiAqIEBwcm9wZXJ0eSB7KFN0cmluZ3xEYXRlKX0gW2RhdGU9Tk9XKCldIFNldHMgdGhlIGVudHJ5IGRhdGUuXG4gKiBAcHJvcGVydHkge051bWJlcn0gW21vZGU9RDowNzU1L0Y6MDY0NF0gU2V0cyB0aGUgZW50cnkgcGVybWlzc2lvbnMuXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IFtuYW1lUHJlcGVuZFNsYXNoPVppcE9wdGlvbnMubmFtZVByZXBlbmRTbGFzaF0gUHJlcGVuZHMgYSBmb3J3YXJkIHNsYXNoIHRvIGFyY2hpdmUgZmlsZSBwYXRocy5cbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBbcHJlZml4XSBTZXRzIGEgcGF0aCBwcmVmaXggZm9yIHRoZSBlbnRyeSBuYW1lLiBVc2VmdWxcbiAqIHdoZW4gd29ya2luZyB3aXRoIG1ldGhvZHMgbGlrZSBgZGlyZWN0b3J5YCBvciBgZ2xvYmAuXG4gKiBAcHJvcGVydHkge2ZzLlN0YXRzfSBbc3RhdHNdIFNldHMgdGhlIGZzIHN0YXQgZGF0YSBmb3IgdGhpcyBlbnRyeSBhbGxvd2luZ1xuICogZm9yIHJlZHVjdGlvbiBvZiBmcyBzdGF0IGNhbGxzIHdoZW4gc3RhdCBkYXRhIGlzIGFscmVhZHkga25vd24uXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IFtzdG9yZT1aaXBPcHRpb25zLnN0b3JlXSBTZXRzIHRoZSBjb21wcmVzc2lvbiBtZXRob2QgdG8gU1RPUkUuXG4gKi9cblxuLyoqXG4gKiBaaXBTdHJlYW0gTW9kdWxlXG4gKiBAZXh0ZXJuYWwgWmlwU3RyZWFtXG4gKiBAc2VlIHtAbGluayBodHRwczovL3d3dy5hcmNoaXZlcmpzLmNvbS96aXAtc3RyZWFtL1ppcFN0cmVhbS5odG1sfVxuICovXG4iLAogICAgIm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIHF1ZXVlTWljcm90YXNrID09PSAnZnVuY3Rpb24nID8gcXVldWVNaWNyb3Rhc2sgOiAoZm4pID0+IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZm4pXG4iLAogICAgIm1vZHVsZS5leHBvcnRzID0gKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgcHJvY2Vzcy5uZXh0VGljayA9PT0gJ2Z1bmN0aW9uJylcbiAgPyBwcm9jZXNzLm5leHRUaWNrLmJpbmQocHJvY2VzcylcbiAgOiByZXF1aXJlKCcuL3F1ZXVlLW1pY3JvdGFzaycpXG4iLAogICAgIm1vZHVsZS5leHBvcnRzID0gY2xhc3MgRml4ZWRGSUZPIHtcbiAgY29uc3RydWN0b3IgKGh3bSkge1xuICAgIGlmICghKGh3bSA+IDApIHx8ICgoaHdtIC0gMSkgJiBod20pICE9PSAwKSB0aHJvdyBuZXcgRXJyb3IoJ01heCBzaXplIGZvciBhIEZpeGVkRklGTyBzaG91bGQgYmUgYSBwb3dlciBvZiB0d28nKVxuICAgIHRoaXMuYnVmZmVyID0gbmV3IEFycmF5KGh3bSlcbiAgICB0aGlzLm1hc2sgPSBod20gLSAxXG4gICAgdGhpcy50b3AgPSAwXG4gICAgdGhpcy5idG0gPSAwXG4gICAgdGhpcy5uZXh0ID0gbnVsbFxuICB9XG5cbiAgY2xlYXIgKCkge1xuICAgIHRoaXMudG9wID0gdGhpcy5idG0gPSAwXG4gICAgdGhpcy5uZXh0ID0gbnVsbFxuICAgIHRoaXMuYnVmZmVyLmZpbGwodW5kZWZpbmVkKVxuICB9XG5cbiAgcHVzaCAoZGF0YSkge1xuICAgIGlmICh0aGlzLmJ1ZmZlclt0aGlzLnRvcF0gIT09IHVuZGVmaW5lZCkgcmV0dXJuIGZhbHNlXG4gICAgdGhpcy5idWZmZXJbdGhpcy50b3BdID0gZGF0YVxuICAgIHRoaXMudG9wID0gKHRoaXMudG9wICsgMSkgJiB0aGlzLm1hc2tcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgc2hpZnQgKCkge1xuICAgIGNvbnN0IGxhc3QgPSB0aGlzLmJ1ZmZlclt0aGlzLmJ0bV1cbiAgICBpZiAobGFzdCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkXG4gICAgdGhpcy5idWZmZXJbdGhpcy5idG1dID0gdW5kZWZpbmVkXG4gICAgdGhpcy5idG0gPSAodGhpcy5idG0gKyAxKSAmIHRoaXMubWFza1xuICAgIHJldHVybiBsYXN0XG4gIH1cblxuICBwZWVrICgpIHtcbiAgICByZXR1cm4gdGhpcy5idWZmZXJbdGhpcy5idG1dXG4gIH1cblxuICBpc0VtcHR5ICgpIHtcbiAgICByZXR1cm4gdGhpcy5idWZmZXJbdGhpcy5idG1dID09PSB1bmRlZmluZWRcbiAgfVxufVxuIiwKICAgICJjb25zdCBGaXhlZEZJRk8gPSByZXF1aXJlKCcuL2ZpeGVkLXNpemUnKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIEZhc3RGSUZPIHtcbiAgY29uc3RydWN0b3IgKGh3bSkge1xuICAgIHRoaXMuaHdtID0gaHdtIHx8IDE2XG4gICAgdGhpcy5oZWFkID0gbmV3IEZpeGVkRklGTyh0aGlzLmh3bSlcbiAgICB0aGlzLnRhaWwgPSB0aGlzLmhlYWRcbiAgICB0aGlzLmxlbmd0aCA9IDBcbiAgfVxuXG4gIGNsZWFyICgpIHtcbiAgICB0aGlzLmhlYWQgPSB0aGlzLnRhaWxcbiAgICB0aGlzLmhlYWQuY2xlYXIoKVxuICAgIHRoaXMubGVuZ3RoID0gMFxuICB9XG5cbiAgcHVzaCAodmFsKSB7XG4gICAgdGhpcy5sZW5ndGgrK1xuICAgIGlmICghdGhpcy5oZWFkLnB1c2godmFsKSkge1xuICAgICAgY29uc3QgcHJldiA9IHRoaXMuaGVhZFxuICAgICAgdGhpcy5oZWFkID0gcHJldi5uZXh0ID0gbmV3IEZpeGVkRklGTygyICogdGhpcy5oZWFkLmJ1ZmZlci5sZW5ndGgpXG4gICAgICB0aGlzLmhlYWQucHVzaCh2YWwpXG4gICAgfVxuICB9XG5cbiAgc2hpZnQgKCkge1xuICAgIGlmICh0aGlzLmxlbmd0aCAhPT0gMCkgdGhpcy5sZW5ndGgtLVxuICAgIGNvbnN0IHZhbCA9IHRoaXMudGFpbC5zaGlmdCgpXG4gICAgaWYgKHZhbCA9PT0gdW5kZWZpbmVkICYmIHRoaXMudGFpbC5uZXh0KSB7XG4gICAgICBjb25zdCBuZXh0ID0gdGhpcy50YWlsLm5leHRcbiAgICAgIHRoaXMudGFpbC5uZXh0ID0gbnVsbFxuICAgICAgdGhpcy50YWlsID0gbmV4dFxuICAgICAgcmV0dXJuIHRoaXMudGFpbC5zaGlmdCgpXG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbFxuICB9XG5cbiAgcGVlayAoKSB7XG4gICAgY29uc3QgdmFsID0gdGhpcy50YWlsLnBlZWsoKVxuICAgIGlmICh2YWwgPT09IHVuZGVmaW5lZCAmJiB0aGlzLnRhaWwubmV4dCkgcmV0dXJuIHRoaXMudGFpbC5uZXh0LnBlZWsoKVxuICAgIHJldHVybiB2YWxcbiAgfVxuXG4gIGlzRW1wdHkgKCkge1xuICAgIHJldHVybiB0aGlzLmxlbmd0aCA9PT0gMFxuICB9XG59XG4iLAogICAgIm1vZHVsZS5leHBvcnRzID0gY2xhc3MgUGFzc1Rocm91Z2hEZWNvZGVyIHtcbiAgY29uc3RydWN0b3IgKGVuY29kaW5nKSB7XG4gICAgdGhpcy5lbmNvZGluZyA9IGVuY29kaW5nXG4gIH1cblxuICBnZXQgcmVtYWluaW5nICgpIHtcbiAgICByZXR1cm4gMFxuICB9XG5cbiAgZGVjb2RlICh0YWlsKSB7XG4gICAgcmV0dXJuIHRhaWwudG9TdHJpbmcodGhpcy5lbmNvZGluZylcbiAgfVxuXG4gIGZsdXNoICgpIHtcbiAgICByZXR1cm4gJydcbiAgfVxufVxuIiwKICAgICIvKipcbiAqIGh0dHBzOi8vZW5jb2Rpbmcuc3BlYy53aGF0d2cub3JnLyN1dGYtOC1kZWNvZGVyXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gY2xhc3MgVVRGOERlY29kZXIge1xuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgdGhpcy5jb2RlUG9pbnQgPSAwXG4gICAgdGhpcy5ieXRlc1NlZW4gPSAwXG4gICAgdGhpcy5ieXRlc05lZWRlZCA9IDBcbiAgICB0aGlzLmxvd2VyQm91bmRhcnkgPSAweDgwXG4gICAgdGhpcy51cHBlckJvdW5kYXJ5ID0gMHhiZlxuICB9XG5cbiAgZ2V0IHJlbWFpbmluZyAoKSB7XG4gICAgcmV0dXJuIHRoaXMuYnl0ZXNTZWVuXG4gIH1cblxuICBkZWNvZGUgKGRhdGEpIHtcbiAgICAvLyBJZiB3ZSBoYXZlIGEgZmFzdCBwYXRoLCBqdXN0IHNuaWZmIGlmIHRoZSBsYXN0IHBhcnQgaXMgYSBib3VuZGFyeVxuICAgIGlmICh0aGlzLmJ5dGVzTmVlZGVkID09PSAwKSB7XG4gICAgICBsZXQgaXNCb3VuZGFyeSA9IHRydWVcblxuICAgICAgZm9yIChsZXQgaSA9IE1hdGgubWF4KDAsIGRhdGEuYnl0ZUxlbmd0aCAtIDQpLCBuID0gZGF0YS5ieXRlTGVuZ3RoOyBpIDwgbiAmJiBpc0JvdW5kYXJ5OyBpKyspIHtcbiAgICAgICAgaXNCb3VuZGFyeSA9IGRhdGFbaV0gPD0gMHg3ZlxuICAgICAgfVxuXG4gICAgICBpZiAoaXNCb3VuZGFyeSkgcmV0dXJuIGRhdGEudG9TdHJpbmcoKVxuICAgIH1cblxuICAgIGxldCByZXN1bHQgPSAnJ1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIG4gPSBkYXRhLmJ5dGVMZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgIGNvbnN0IGJ5dGUgPSBkYXRhW2ldXG5cbiAgICAgIGlmICh0aGlzLmJ5dGVzTmVlZGVkID09PSAwKSB7XG4gICAgICAgIGlmIChieXRlIDw9IDB4N2YpIHtcbiAgICAgICAgICByZXN1bHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShieXRlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuYnl0ZXNTZWVuID0gMVxuXG4gICAgICAgICAgaWYgKGJ5dGUgPj0gMHhjMiAmJiBieXRlIDw9IDB4ZGYpIHtcbiAgICAgICAgICAgIHRoaXMuYnl0ZXNOZWVkZWQgPSAyXG4gICAgICAgICAgICB0aGlzLmNvZGVQb2ludCA9IGJ5dGUgJiAweDFmXG4gICAgICAgICAgfSBlbHNlIGlmIChieXRlID49IDB4ZTAgJiYgYnl0ZSA8PSAweGVmKSB7XG4gICAgICAgICAgICBpZiAoYnl0ZSA9PT0gMHhlMCkgdGhpcy5sb3dlckJvdW5kYXJ5ID0gMHhhMFxuICAgICAgICAgICAgZWxzZSBpZiAoYnl0ZSA9PT0gMHhlZCkgdGhpcy51cHBlckJvdW5kYXJ5ID0gMHg5ZlxuICAgICAgICAgICAgdGhpcy5ieXRlc05lZWRlZCA9IDNcbiAgICAgICAgICAgIHRoaXMuY29kZVBvaW50ID0gYnl0ZSAmIDB4ZlxuICAgICAgICAgIH0gZWxzZSBpZiAoYnl0ZSA+PSAweGYwICYmIGJ5dGUgPD0gMHhmNCkge1xuICAgICAgICAgICAgaWYgKGJ5dGUgPT09IDB4ZjApIHRoaXMubG93ZXJCb3VuZGFyeSA9IDB4OTBcbiAgICAgICAgICAgIGlmIChieXRlID09PSAweGY0KSB0aGlzLnVwcGVyQm91bmRhcnkgPSAweDhmXG4gICAgICAgICAgICB0aGlzLmJ5dGVzTmVlZGVkID0gNFxuICAgICAgICAgICAgdGhpcy5jb2RlUG9pbnQgPSBieXRlICYgMHg3XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSAnXFx1ZmZmZCdcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBpZiAoYnl0ZSA8IHRoaXMubG93ZXJCb3VuZGFyeSB8fCBieXRlID4gdGhpcy51cHBlckJvdW5kYXJ5KSB7XG4gICAgICAgIHRoaXMuY29kZVBvaW50ID0gMFxuICAgICAgICB0aGlzLmJ5dGVzTmVlZGVkID0gMFxuICAgICAgICB0aGlzLmJ5dGVzU2VlbiA9IDBcbiAgICAgICAgdGhpcy5sb3dlckJvdW5kYXJ5ID0gMHg4MFxuICAgICAgICB0aGlzLnVwcGVyQm91bmRhcnkgPSAweGJmXG5cbiAgICAgICAgcmVzdWx0ICs9ICdcXHVmZmZkJ1xuXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIHRoaXMubG93ZXJCb3VuZGFyeSA9IDB4ODBcbiAgICAgIHRoaXMudXBwZXJCb3VuZGFyeSA9IDB4YmZcblxuICAgICAgdGhpcy5jb2RlUG9pbnQgPSAodGhpcy5jb2RlUG9pbnQgPDwgNikgfCAoYnl0ZSAmIDB4M2YpXG4gICAgICB0aGlzLmJ5dGVzU2VlbisrXG5cbiAgICAgIGlmICh0aGlzLmJ5dGVzU2VlbiAhPT0gdGhpcy5ieXRlc05lZWRlZCkgY29udGludWVcblxuICAgICAgcmVzdWx0ICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KHRoaXMuY29kZVBvaW50KVxuXG4gICAgICB0aGlzLmNvZGVQb2ludCA9IDBcbiAgICAgIHRoaXMuYnl0ZXNOZWVkZWQgPSAwXG4gICAgICB0aGlzLmJ5dGVzU2VlbiA9IDBcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICBmbHVzaCAoKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5ieXRlc05lZWRlZCA+IDAgPyAnXFx1ZmZmZCcgOiAnJ1xuXG4gICAgdGhpcy5jb2RlUG9pbnQgPSAwXG4gICAgdGhpcy5ieXRlc05lZWRlZCA9IDBcbiAgICB0aGlzLmJ5dGVzU2VlbiA9IDBcbiAgICB0aGlzLmxvd2VyQm91bmRhcnkgPSAweDgwXG4gICAgdGhpcy51cHBlckJvdW5kYXJ5ID0gMHhiZlxuXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG59XG4iLAogICAgImNvbnN0IFBhc3NUaHJvdWdoRGVjb2RlciA9IHJlcXVpcmUoJy4vbGliL3Bhc3MtdGhyb3VnaC1kZWNvZGVyJylcbmNvbnN0IFVURjhEZWNvZGVyID0gcmVxdWlyZSgnLi9saWIvdXRmOC1kZWNvZGVyJylcblxubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBUZXh0RGVjb2RlciB7XG4gIGNvbnN0cnVjdG9yIChlbmNvZGluZyA9ICd1dGY4Jykge1xuICAgIHRoaXMuZW5jb2RpbmcgPSBub3JtYWxpemVFbmNvZGluZyhlbmNvZGluZylcblxuICAgIHN3aXRjaCAodGhpcy5lbmNvZGluZykge1xuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICAgIHRoaXMuZGVjb2RlciA9IG5ldyBVVEY4RGVjb2RlcigpXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgZW5jb2Rpbmc6ICcgKyB0aGlzLmVuY29kaW5nKVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5kZWNvZGVyID0gbmV3IFBhc3NUaHJvdWdoRGVjb2Rlcih0aGlzLmVuY29kaW5nKVxuICAgIH1cbiAgfVxuXG4gIGdldCByZW1haW5pbmcgKCkge1xuICAgIHJldHVybiB0aGlzLmRlY29kZXIucmVtYWluaW5nXG4gIH1cblxuICBwdXNoIChkYXRhKSB7XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykgcmV0dXJuIGRhdGFcbiAgICByZXR1cm4gdGhpcy5kZWNvZGVyLmRlY29kZShkYXRhKVxuICB9XG5cbiAgLy8gRm9yIE5vZGUuanMgY29tcGF0aWJpbGl0eVxuICB3cml0ZSAoZGF0YSkge1xuICAgIHJldHVybiB0aGlzLnB1c2goZGF0YSlcbiAgfVxuXG4gIGVuZCAoZGF0YSkge1xuICAgIGxldCByZXN1bHQgPSAnJ1xuICAgIGlmIChkYXRhKSByZXN1bHQgPSB0aGlzLnB1c2goZGF0YSlcbiAgICByZXN1bHQgKz0gdGhpcy5kZWNvZGVyLmZsdXNoKClcbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplRW5jb2RpbmcgKGVuY29kaW5nKSB7XG4gIGVuY29kaW5nID0gZW5jb2RpbmcudG9Mb3dlckNhc2UoKVxuXG4gIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICBjYXNlICd1dGY4JzpcbiAgICBjYXNlICd1dGYtOCc6XG4gICAgICByZXR1cm4gJ3V0ZjgnXG4gICAgY2FzZSAndWNzMic6XG4gICAgY2FzZSAndWNzLTInOlxuICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgIHJldHVybiAndXRmMTZsZSdcbiAgICBjYXNlICdsYXRpbjEnOlxuICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICByZXR1cm4gJ2xhdGluMSdcbiAgICBjYXNlICdiYXNlNjQnOlxuICAgIGNhc2UgJ2FzY2lpJzpcbiAgICBjYXNlICdoZXgnOlxuICAgICAgcmV0dXJuIGVuY29kaW5nXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICB9XG59O1xuIiwKICAgICJjb25zdCB7IEV2ZW50RW1pdHRlciB9ID0gcmVxdWlyZSgnZXZlbnRzJylcbmNvbnN0IFNUUkVBTV9ERVNUUk9ZRUQgPSBuZXcgRXJyb3IoJ1N0cmVhbSB3YXMgZGVzdHJveWVkJylcbmNvbnN0IFBSRU1BVFVSRV9DTE9TRSA9IG5ldyBFcnJvcignUHJlbWF0dXJlIGNsb3NlJylcblxuY29uc3QgcXVldWVUaWNrID0gcmVxdWlyZSgncXVldWUtdGljaycpXG5jb25zdCBGSUZPID0gcmVxdWlyZSgnZmFzdC1maWZvJylcbmNvbnN0IFRleHREZWNvZGVyID0gcmVxdWlyZSgndGV4dC1kZWNvZGVyJylcblxuLyogZXNsaW50LWRpc2FibGUgbm8tbXVsdGktc3BhY2VzICovXG5cbi8vIDI5IGJpdHMgdXNlZCB0b3RhbCAoNCBmcm9tIHNoYXJlZCwgMTQgZnJvbSByZWFkLCBhbmQgMTEgZnJvbSB3cml0ZSlcbmNvbnN0IE1BWCA9ICgoMSA8PCAyOSkgLSAxKVxuXG4vLyBTaGFyZWQgc3RhdGVcbmNvbnN0IE9QRU5JTkcgICAgICAgPSAwYjAwMDFcbmNvbnN0IFBSRURFU1RST1lJTkcgPSAwYjAwMTBcbmNvbnN0IERFU1RST1lJTkcgICAgPSAwYjAxMDBcbmNvbnN0IERFU1RST1lFRCAgICAgPSAwYjEwMDBcblxuY29uc3QgTk9UX09QRU5JTkcgPSBNQVggXiBPUEVOSU5HXG5jb25zdCBOT1RfUFJFREVTVFJPWUlORyA9IE1BWCBeIFBSRURFU1RST1lJTkdcblxuLy8gUmVhZCBzdGF0ZSAoNCBiaXQgb2Zmc2V0IGZyb20gc2hhcmVkIHN0YXRlKVxuY29uc3QgUkVBRF9BQ1RJVkUgICAgICAgICAgID0gMGIwMDAwMDAwMDAwMDAwMSA8PCA0XG5jb25zdCBSRUFEX1VQREFUSU5HICAgICAgICAgPSAwYjAwMDAwMDAwMDAwMDEwIDw8IDRcbmNvbnN0IFJFQURfUFJJTUFSWSAgICAgICAgICA9IDBiMDAwMDAwMDAwMDAxMDAgPDwgNFxuY29uc3QgUkVBRF9RVUVVRUQgICAgICAgICAgID0gMGIwMDAwMDAwMDAwMTAwMCA8PCA0XG5jb25zdCBSRUFEX1JFU1VNRUQgICAgICAgICAgPSAwYjAwMDAwMDAwMDEwMDAwIDw8IDRcbmNvbnN0IFJFQURfUElQRV9EUkFJTkVEICAgICA9IDBiMDAwMDAwMDAxMDAwMDAgPDwgNFxuY29uc3QgUkVBRF9FTkRJTkcgICAgICAgICAgID0gMGIwMDAwMDAwMTAwMDAwMCA8PCA0XG5jb25zdCBSRUFEX0VNSVRfREFUQSAgICAgICAgPSAwYjAwMDAwMDEwMDAwMDAwIDw8IDRcbmNvbnN0IFJFQURfRU1JVF9SRUFEQUJMRSAgICA9IDBiMDAwMDAxMDAwMDAwMDAgPDwgNFxuY29uc3QgUkVBRF9FTUlUVEVEX1JFQURBQkxFID0gMGIwMDAwMTAwMDAwMDAwMCA8PCA0XG5jb25zdCBSRUFEX0RPTkUgICAgICAgICAgICAgPSAwYjAwMDEwMDAwMDAwMDAwIDw8IDRcbmNvbnN0IFJFQURfTkVYVF9USUNLICAgICAgICA9IDBiMDAxMDAwMDAwMDAwMDAgPDwgNFxuY29uc3QgUkVBRF9ORUVEU19QVVNIICAgICAgID0gMGIwMTAwMDAwMDAwMDAwMCA8PCA0XG5jb25zdCBSRUFEX1JFQURfQUhFQUQgICAgICAgPSAwYjEwMDAwMDAwMDAwMDAwIDw8IDRcblxuLy8gQ29tYmluZWQgcmVhZCBzdGF0ZVxuY29uc3QgUkVBRF9GTE9XSU5HID0gUkVBRF9SRVNVTUVEIHwgUkVBRF9QSVBFX0RSQUlORURcbmNvbnN0IFJFQURfQUNUSVZFX0FORF9ORUVEU19QVVNIID0gUkVBRF9BQ1RJVkUgfCBSRUFEX05FRURTX1BVU0hcbmNvbnN0IFJFQURfUFJJTUFSWV9BTkRfQUNUSVZFID0gUkVBRF9QUklNQVJZIHwgUkVBRF9BQ1RJVkVcbmNvbnN0IFJFQURfRU1JVF9SRUFEQUJMRV9BTkRfUVVFVUVEID0gUkVBRF9FTUlUX1JFQURBQkxFIHwgUkVBRF9RVUVVRURcbmNvbnN0IFJFQURfUkVTVU1FRF9SRUFEX0FIRUFEID0gUkVBRF9SRVNVTUVEIHwgUkVBRF9SRUFEX0FIRUFEXG5cbmNvbnN0IFJFQURfTk9UX0FDVElWRSAgICAgICAgICAgICA9IE1BWCBeIFJFQURfQUNUSVZFXG5jb25zdCBSRUFEX05PTl9QUklNQVJZICAgICAgICAgICAgPSBNQVggXiBSRUFEX1BSSU1BUllcbmNvbnN0IFJFQURfTk9OX1BSSU1BUllfQU5EX1BVU0hFRCA9IE1BWCBeIChSRUFEX1BSSU1BUlkgfCBSRUFEX05FRURTX1BVU0gpXG5jb25zdCBSRUFEX1BVU0hFRCAgICAgICAgICAgICAgICAgPSBNQVggXiBSRUFEX05FRURTX1BVU0hcbmNvbnN0IFJFQURfUEFVU0VEICAgICAgICAgICAgICAgICA9IE1BWCBeIFJFQURfUkVTVU1FRFxuY29uc3QgUkVBRF9OT1RfUVVFVUVEICAgICAgICAgICAgID0gTUFYIF4gKFJFQURfUVVFVUVEIHwgUkVBRF9FTUlUVEVEX1JFQURBQkxFKVxuY29uc3QgUkVBRF9OT1RfRU5ESU5HICAgICAgICAgICAgID0gTUFYIF4gUkVBRF9FTkRJTkdcbmNvbnN0IFJFQURfUElQRV9OT1RfRFJBSU5FRCAgICAgICA9IE1BWCBeIFJFQURfRkxPV0lOR1xuY29uc3QgUkVBRF9OT1RfTkVYVF9USUNLICAgICAgICAgID0gTUFYIF4gUkVBRF9ORVhUX1RJQ0tcbmNvbnN0IFJFQURfTk9UX1VQREFUSU5HICAgICAgICAgICA9IE1BWCBeIFJFQURfVVBEQVRJTkdcbmNvbnN0IFJFQURfTk9fUkVBRF9BSEVBRCAgICAgICAgICA9IE1BWCBeIFJFQURfUkVBRF9BSEVBRFxuY29uc3QgUkVBRF9QQVVTRURfTk9fUkVBRF9BSEVBRCAgID0gTUFYIF4gUkVBRF9SRVNVTUVEX1JFQURfQUhFQURcblxuLy8gV3JpdGUgc3RhdGUgKDE4IGJpdCBvZmZzZXQsIDQgYml0IG9mZnNldCBmcm9tIHNoYXJlZCBzdGF0ZSBhbmQgMTQgZnJvbSByZWFkIHN0YXRlKVxuY29uc3QgV1JJVEVfQUNUSVZFICAgICA9IDBiMDAwMDAwMDAwMDEgPDwgMThcbmNvbnN0IFdSSVRFX1VQREFUSU5HICAgPSAwYjAwMDAwMDAwMDEwIDw8IDE4XG5jb25zdCBXUklURV9QUklNQVJZICAgID0gMGIwMDAwMDAwMDEwMCA8PCAxOFxuY29uc3QgV1JJVEVfUVVFVUVEICAgICA9IDBiMDAwMDAwMDEwMDAgPDwgMThcbmNvbnN0IFdSSVRFX1VORFJBSU5FRCAgPSAwYjAwMDAwMDEwMDAwIDw8IDE4XG5jb25zdCBXUklURV9ET05FICAgICAgID0gMGIwMDAwMDEwMDAwMCA8PCAxOFxuY29uc3QgV1JJVEVfRU1JVF9EUkFJTiA9IDBiMDAwMDEwMDAwMDAgPDwgMThcbmNvbnN0IFdSSVRFX05FWFRfVElDSyAgPSAwYjAwMDEwMDAwMDAwIDw8IDE4XG5jb25zdCBXUklURV9XUklUSU5HICAgID0gMGIwMDEwMDAwMDAwMCA8PCAxOFxuY29uc3QgV1JJVEVfRklOSVNISU5HICA9IDBiMDEwMDAwMDAwMDAgPDwgMThcbmNvbnN0IFdSSVRFX0NPUktFRCAgICAgPSAwYjEwMDAwMDAwMDAwIDw8IDE4XG5cbmNvbnN0IFdSSVRFX05PVF9BQ1RJVkUgICAgPSBNQVggXiAoV1JJVEVfQUNUSVZFIHwgV1JJVEVfV1JJVElORylcbmNvbnN0IFdSSVRFX05PTl9QUklNQVJZICAgPSBNQVggXiBXUklURV9QUklNQVJZXG5jb25zdCBXUklURV9OT1RfRklOSVNISU5HID0gTUFYIF4gV1JJVEVfRklOSVNISU5HXG5jb25zdCBXUklURV9EUkFJTkVEICAgICAgID0gTUFYIF4gV1JJVEVfVU5EUkFJTkVEXG5jb25zdCBXUklURV9OT1RfUVVFVUVEICAgID0gTUFYIF4gV1JJVEVfUVVFVUVEXG5jb25zdCBXUklURV9OT1RfTkVYVF9USUNLID0gTUFYIF4gV1JJVEVfTkVYVF9USUNLXG5jb25zdCBXUklURV9OT1RfVVBEQVRJTkcgID0gTUFYIF4gV1JJVEVfVVBEQVRJTkdcbmNvbnN0IFdSSVRFX05PVF9DT1JLRUQgICAgPSBNQVggXiBXUklURV9DT1JLRURcblxuLy8gQ29tYmluZWQgc2hhcmVkIHN0YXRlXG5jb25zdCBBQ1RJVkUgPSBSRUFEX0FDVElWRSB8IFdSSVRFX0FDVElWRVxuY29uc3QgTk9UX0FDVElWRSA9IE1BWCBeIEFDVElWRVxuY29uc3QgRE9ORSA9IFJFQURfRE9ORSB8IFdSSVRFX0RPTkVcbmNvbnN0IERFU1RST1lfU1RBVFVTID0gREVTVFJPWUlORyB8IERFU1RST1lFRCB8IFBSRURFU1RST1lJTkdcbmNvbnN0IE9QRU5fU1RBVFVTID0gREVTVFJPWV9TVEFUVVMgfCBPUEVOSU5HXG5jb25zdCBBVVRPX0RFU1RST1kgPSBERVNUUk9ZX1NUQVRVUyB8IERPTkVcbmNvbnN0IE5PTl9QUklNQVJZID0gV1JJVEVfTk9OX1BSSU1BUlkgJiBSRUFEX05PTl9QUklNQVJZXG5jb25zdCBBQ1RJVkVfT1JfVElDS0lORyA9IFdSSVRFX05FWFRfVElDSyB8IFJFQURfTkVYVF9USUNLXG5jb25zdCBUSUNLSU5HID0gQUNUSVZFX09SX1RJQ0tJTkcgJiBOT1RfQUNUSVZFXG5jb25zdCBJU19PUEVOSU5HID0gT1BFTl9TVEFUVVMgfCBUSUNLSU5HXG5cbi8vIENvbWJpbmVkIHNoYXJlZCBzdGF0ZSBhbmQgcmVhZCBzdGF0ZVxuY29uc3QgUkVBRF9QUklNQVJZX1NUQVRVUyA9IE9QRU5fU1RBVFVTIHwgUkVBRF9FTkRJTkcgfCBSRUFEX0RPTkVcbmNvbnN0IFJFQURfU1RBVFVTID0gT1BFTl9TVEFUVVMgfCBSRUFEX0RPTkUgfCBSRUFEX1FVRVVFRFxuY29uc3QgUkVBRF9FTkRJTkdfU1RBVFVTID0gT1BFTl9TVEFUVVMgfCBSRUFEX0VORElORyB8IFJFQURfUVVFVUVEXG5jb25zdCBSRUFEX1JFQURBQkxFX1NUQVRVUyA9IE9QRU5fU1RBVFVTIHwgUkVBRF9FTUlUX1JFQURBQkxFIHwgUkVBRF9RVUVVRUQgfCBSRUFEX0VNSVRURURfUkVBREFCTEVcbmNvbnN0IFNIT1VMRF9OT1RfUkVBRCA9IE9QRU5fU1RBVFVTIHwgUkVBRF9BQ1RJVkUgfCBSRUFEX0VORElORyB8IFJFQURfRE9ORSB8IFJFQURfTkVFRFNfUFVTSCB8IFJFQURfUkVBRF9BSEVBRFxuY29uc3QgUkVBRF9CQUNLUFJFU1NVUkVfU1RBVFVTID0gREVTVFJPWV9TVEFUVVMgfCBSRUFEX0VORElORyB8IFJFQURfRE9ORVxuY29uc3QgUkVBRF9VUERBVEVfU1lOQ19TVEFUVVMgPSBSRUFEX1VQREFUSU5HIHwgT1BFTl9TVEFUVVMgfCBSRUFEX05FWFRfVElDSyB8IFJFQURfUFJJTUFSWVxuXG4vLyBDb21iaW5lZCB3cml0ZSBzdGF0ZVxuY29uc3QgV1JJVEVfUFJJTUFSWV9TVEFUVVMgPSBPUEVOX1NUQVRVUyB8IFdSSVRFX0ZJTklTSElORyB8IFdSSVRFX0RPTkVcbmNvbnN0IFdSSVRFX1FVRVVFRF9BTkRfVU5EUkFJTkVEID0gV1JJVEVfUVVFVUVEIHwgV1JJVEVfVU5EUkFJTkVEXG5jb25zdCBXUklURV9RVUVVRURfQU5EX0FDVElWRSA9IFdSSVRFX1FVRVVFRCB8IFdSSVRFX0FDVElWRVxuY29uc3QgV1JJVEVfRFJBSU5fU1RBVFVTID0gV1JJVEVfUVVFVUVEIHwgV1JJVEVfVU5EUkFJTkVEIHwgT1BFTl9TVEFUVVMgfCBXUklURV9BQ1RJVkVcbmNvbnN0IFdSSVRFX1NUQVRVUyA9IE9QRU5fU1RBVFVTIHwgV1JJVEVfQUNUSVZFIHwgV1JJVEVfUVVFVUVEIHwgV1JJVEVfQ09SS0VEXG5jb25zdCBXUklURV9QUklNQVJZX0FORF9BQ1RJVkUgPSBXUklURV9QUklNQVJZIHwgV1JJVEVfQUNUSVZFXG5jb25zdCBXUklURV9BQ1RJVkVfQU5EX1dSSVRJTkcgPSBXUklURV9BQ1RJVkUgfCBXUklURV9XUklUSU5HXG5jb25zdCBXUklURV9GSU5JU0hJTkdfU1RBVFVTID0gT1BFTl9TVEFUVVMgfCBXUklURV9GSU5JU0hJTkcgfCBXUklURV9RVUVVRURfQU5EX0FDVElWRSB8IFdSSVRFX0RPTkVcbmNvbnN0IFdSSVRFX0JBQ0tQUkVTU1VSRV9TVEFUVVMgPSBXUklURV9VTkRSQUlORUQgfCBERVNUUk9ZX1NUQVRVUyB8IFdSSVRFX0ZJTklTSElORyB8IFdSSVRFX0RPTkVcbmNvbnN0IFdSSVRFX1VQREFURV9TWU5DX1NUQVRVUyA9IFdSSVRFX1VQREFUSU5HIHwgT1BFTl9TVEFUVVMgfCBXUklURV9ORVhUX1RJQ0sgfCBXUklURV9QUklNQVJZXG5cbmNvbnN0IGFzeW5jSXRlcmF0b3IgPSBTeW1ib2wuYXN5bmNJdGVyYXRvciB8fCBTeW1ib2woJ2FzeW5jSXRlcmF0b3InKVxuXG5jbGFzcyBXcml0YWJsZVN0YXRlIHtcbiAgY29uc3RydWN0b3IgKHN0cmVhbSwgeyBoaWdoV2F0ZXJNYXJrID0gMTYzODQsIG1hcCA9IG51bGwsIG1hcFdyaXRhYmxlLCBieXRlTGVuZ3RoLCBieXRlTGVuZ3RoV3JpdGFibGUgfSA9IHt9KSB7XG4gICAgdGhpcy5zdHJlYW0gPSBzdHJlYW1cbiAgICB0aGlzLnF1ZXVlID0gbmV3IEZJRk8oKVxuICAgIHRoaXMuaGlnaFdhdGVyTWFyayA9IGhpZ2hXYXRlck1hcmtcbiAgICB0aGlzLmJ1ZmZlcmVkID0gMFxuICAgIHRoaXMuZXJyb3IgPSBudWxsXG4gICAgdGhpcy5waXBlbGluZSA9IG51bGxcbiAgICB0aGlzLmRyYWlucyA9IG51bGwgLy8gaWYgd2UgYWRkIG1vcmUgc2VsZG9tbHkgdXNlZCBoZWxwZXJzIHdlIG1pZ2h0IHRoZW0gaW50byBhIHN1Ym9iamVjdCBzbyBpdHMgYSBzaW5nbGUgcHRyXG4gICAgdGhpcy5ieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aFdyaXRhYmxlIHx8IGJ5dGVMZW5ndGggfHwgZGVmYXVsdEJ5dGVMZW5ndGhcbiAgICB0aGlzLm1hcCA9IG1hcFdyaXRhYmxlIHx8IG1hcFxuICAgIHRoaXMuYWZ0ZXJXcml0ZSA9IGFmdGVyV3JpdGUuYmluZCh0aGlzKVxuICAgIHRoaXMuYWZ0ZXJVcGRhdGVOZXh0VGljayA9IHVwZGF0ZVdyaXRlTlQuYmluZCh0aGlzKVxuICB9XG5cbiAgZ2V0IGVuZGVkICgpIHtcbiAgICByZXR1cm4gKHRoaXMuc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFdSSVRFX0RPTkUpICE9PSAwXG4gIH1cblxuICBwdXNoIChkYXRhKSB7XG4gICAgaWYgKHRoaXMubWFwICE9PSBudWxsKSBkYXRhID0gdGhpcy5tYXAoZGF0YSlcblxuICAgIHRoaXMuYnVmZmVyZWQgKz0gdGhpcy5ieXRlTGVuZ3RoKGRhdGEpXG4gICAgdGhpcy5xdWV1ZS5wdXNoKGRhdGEpXG5cbiAgICBpZiAodGhpcy5idWZmZXJlZCA8IHRoaXMuaGlnaFdhdGVyTWFyaykge1xuICAgICAgdGhpcy5zdHJlYW0uX2R1cGxleFN0YXRlIHw9IFdSSVRFX1FVRVVFRFxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICB0aGlzLnN0cmVhbS5fZHVwbGV4U3RhdGUgfD0gV1JJVEVfUVVFVUVEX0FORF9VTkRSQUlORURcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHNoaWZ0ICgpIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5xdWV1ZS5zaGlmdCgpXG5cbiAgICB0aGlzLmJ1ZmZlcmVkIC09IHRoaXMuYnl0ZUxlbmd0aChkYXRhKVxuICAgIGlmICh0aGlzLmJ1ZmZlcmVkID09PSAwKSB0aGlzLnN0cmVhbS5fZHVwbGV4U3RhdGUgJj0gV1JJVEVfTk9UX1FVRVVFRFxuXG4gICAgcmV0dXJuIGRhdGFcbiAgfVxuXG4gIGVuZCAoZGF0YSkge1xuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5zdHJlYW0ub25jZSgnZmluaXNoJywgZGF0YSlcbiAgICBlbHNlIGlmIChkYXRhICE9PSB1bmRlZmluZWQgJiYgZGF0YSAhPT0gbnVsbCkgdGhpcy5wdXNoKGRhdGEpXG4gICAgdGhpcy5zdHJlYW0uX2R1cGxleFN0YXRlID0gKHRoaXMuc3RyZWFtLl9kdXBsZXhTdGF0ZSB8IFdSSVRFX0ZJTklTSElORykgJiBXUklURV9OT05fUFJJTUFSWVxuICB9XG5cbiAgYXV0b0JhdGNoIChkYXRhLCBjYikge1xuICAgIGNvbnN0IGJ1ZmZlciA9IFtdXG4gICAgY29uc3Qgc3RyZWFtID0gdGhpcy5zdHJlYW1cblxuICAgIGJ1ZmZlci5wdXNoKGRhdGEpXG4gICAgd2hpbGUgKChzdHJlYW0uX2R1cGxleFN0YXRlICYgV1JJVEVfU1RBVFVTKSA9PT0gV1JJVEVfUVVFVUVEX0FORF9BQ1RJVkUpIHtcbiAgICAgIGJ1ZmZlci5wdXNoKHN0cmVhbS5fd3JpdGFibGVTdGF0ZS5zaGlmdCgpKVxuICAgIH1cblxuICAgIGlmICgoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIE9QRU5fU1RBVFVTKSAhPT0gMCkgcmV0dXJuIGNiKG51bGwpXG4gICAgc3RyZWFtLl93cml0ZXYoYnVmZmVyLCBjYilcbiAgfVxuXG4gIHVwZGF0ZSAoKSB7XG4gICAgY29uc3Qgc3RyZWFtID0gdGhpcy5zdHJlYW1cblxuICAgIHN0cmVhbS5fZHVwbGV4U3RhdGUgfD0gV1JJVEVfVVBEQVRJTkdcblxuICAgIGRvIHtcbiAgICAgIHdoaWxlICgoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFdSSVRFX1NUQVRVUykgPT09IFdSSVRFX1FVRVVFRCkge1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5zaGlmdCgpXG4gICAgICAgIHN0cmVhbS5fZHVwbGV4U3RhdGUgfD0gV1JJVEVfQUNUSVZFX0FORF9XUklUSU5HXG4gICAgICAgIHN0cmVhbS5fd3JpdGUoZGF0YSwgdGhpcy5hZnRlcldyaXRlKVxuICAgICAgfVxuXG4gICAgICBpZiAoKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBXUklURV9QUklNQVJZX0FORF9BQ1RJVkUpID09PSAwKSB0aGlzLnVwZGF0ZU5vblByaW1hcnkoKVxuICAgIH0gd2hpbGUgKHRoaXMuY29udGludWVVcGRhdGUoKSA9PT0gdHJ1ZSlcblxuICAgIHN0cmVhbS5fZHVwbGV4U3RhdGUgJj0gV1JJVEVfTk9UX1VQREFUSU5HXG4gIH1cblxuICB1cGRhdGVOb25QcmltYXJ5ICgpIHtcbiAgICBjb25zdCBzdHJlYW0gPSB0aGlzLnN0cmVhbVxuXG4gICAgaWYgKChzdHJlYW0uX2R1cGxleFN0YXRlICYgV1JJVEVfRklOSVNISU5HX1NUQVRVUykgPT09IFdSSVRFX0ZJTklTSElORykge1xuICAgICAgc3RyZWFtLl9kdXBsZXhTdGF0ZSA9IChzdHJlYW0uX2R1cGxleFN0YXRlIHwgV1JJVEVfQUNUSVZFKSAmIFdSSVRFX05PVF9GSU5JU0hJTkdcbiAgICAgIHN0cmVhbS5fZmluYWwoYWZ0ZXJGaW5hbC5iaW5kKHRoaXMpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKChzdHJlYW0uX2R1cGxleFN0YXRlICYgREVTVFJPWV9TVEFUVVMpID09PSBERVNUUk9ZSU5HKSB7XG4gICAgICBpZiAoKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBBQ1RJVkVfT1JfVElDS0lORykgPT09IDApIHtcbiAgICAgICAgc3RyZWFtLl9kdXBsZXhTdGF0ZSB8PSBBQ1RJVkVcbiAgICAgICAgc3RyZWFtLl9kZXN0cm95KGFmdGVyRGVzdHJveS5iaW5kKHRoaXMpKVxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKChzdHJlYW0uX2R1cGxleFN0YXRlICYgSVNfT1BFTklORykgPT09IE9QRU5JTkcpIHtcbiAgICAgIHN0cmVhbS5fZHVwbGV4U3RhdGUgPSAoc3RyZWFtLl9kdXBsZXhTdGF0ZSB8IEFDVElWRSkgJiBOT1RfT1BFTklOR1xuICAgICAgc3RyZWFtLl9vcGVuKGFmdGVyT3Blbi5iaW5kKHRoaXMpKVxuICAgIH1cbiAgfVxuXG4gIGNvbnRpbnVlVXBkYXRlICgpIHtcbiAgICBpZiAoKHRoaXMuc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFdSSVRFX05FWFRfVElDSykgPT09IDApIHJldHVybiBmYWxzZVxuICAgIHRoaXMuc3RyZWFtLl9kdXBsZXhTdGF0ZSAmPSBXUklURV9OT1RfTkVYVF9USUNLXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIHVwZGF0ZUNhbGxiYWNrICgpIHtcbiAgICBpZiAoKHRoaXMuc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFdSSVRFX1VQREFURV9TWU5DX1NUQVRVUykgPT09IFdSSVRFX1BSSU1BUlkpIHRoaXMudXBkYXRlKClcbiAgICBlbHNlIHRoaXMudXBkYXRlTmV4dFRpY2soKVxuICB9XG5cbiAgdXBkYXRlTmV4dFRpY2sgKCkge1xuICAgIGlmICgodGhpcy5zdHJlYW0uX2R1cGxleFN0YXRlICYgV1JJVEVfTkVYVF9USUNLKSAhPT0gMCkgcmV0dXJuXG4gICAgdGhpcy5zdHJlYW0uX2R1cGxleFN0YXRlIHw9IFdSSVRFX05FWFRfVElDS1xuICAgIGlmICgodGhpcy5zdHJlYW0uX2R1cGxleFN0YXRlICYgV1JJVEVfVVBEQVRJTkcpID09PSAwKSBxdWV1ZVRpY2sodGhpcy5hZnRlclVwZGF0ZU5leHRUaWNrKVxuICB9XG59XG5cbmNsYXNzIFJlYWRhYmxlU3RhdGUge1xuICBjb25zdHJ1Y3RvciAoc3RyZWFtLCB7IGhpZ2hXYXRlck1hcmsgPSAxNjM4NCwgbWFwID0gbnVsbCwgbWFwUmVhZGFibGUsIGJ5dGVMZW5ndGgsIGJ5dGVMZW5ndGhSZWFkYWJsZSB9ID0ge30pIHtcbiAgICB0aGlzLnN0cmVhbSA9IHN0cmVhbVxuICAgIHRoaXMucXVldWUgPSBuZXcgRklGTygpXG4gICAgdGhpcy5oaWdoV2F0ZXJNYXJrID0gaGlnaFdhdGVyTWFyayA9PT0gMCA/IDEgOiBoaWdoV2F0ZXJNYXJrXG4gICAgdGhpcy5idWZmZXJlZCA9IDBcbiAgICB0aGlzLnJlYWRBaGVhZCA9IGhpZ2hXYXRlck1hcmsgPiAwXG4gICAgdGhpcy5lcnJvciA9IG51bGxcbiAgICB0aGlzLnBpcGVsaW5lID0gbnVsbFxuICAgIHRoaXMuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGhSZWFkYWJsZSB8fCBieXRlTGVuZ3RoIHx8IGRlZmF1bHRCeXRlTGVuZ3RoXG4gICAgdGhpcy5tYXAgPSBtYXBSZWFkYWJsZSB8fCBtYXBcbiAgICB0aGlzLnBpcGVUbyA9IG51bGxcbiAgICB0aGlzLmFmdGVyUmVhZCA9IGFmdGVyUmVhZC5iaW5kKHRoaXMpXG4gICAgdGhpcy5hZnRlclVwZGF0ZU5leHRUaWNrID0gdXBkYXRlUmVhZE5ULmJpbmQodGhpcylcbiAgfVxuXG4gIGdldCBlbmRlZCAoKSB7XG4gICAgcmV0dXJuICh0aGlzLnN0cmVhbS5fZHVwbGV4U3RhdGUgJiBSRUFEX0RPTkUpICE9PSAwXG4gIH1cblxuICBwaXBlIChwaXBlVG8sIGNiKSB7XG4gICAgaWYgKHRoaXMucGlwZVRvICE9PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoJ0NhbiBvbmx5IHBpcGUgdG8gb25lIGRlc3RpbmF0aW9uJylcbiAgICBpZiAodHlwZW9mIGNiICE9PSAnZnVuY3Rpb24nKSBjYiA9IG51bGxcblxuICAgIHRoaXMuc3RyZWFtLl9kdXBsZXhTdGF0ZSB8PSBSRUFEX1BJUEVfRFJBSU5FRFxuICAgIHRoaXMucGlwZVRvID0gcGlwZVRvXG4gICAgdGhpcy5waXBlbGluZSA9IG5ldyBQaXBlbGluZSh0aGlzLnN0cmVhbSwgcGlwZVRvLCBjYilcblxuICAgIGlmIChjYikgdGhpcy5zdHJlYW0ub24oJ2Vycm9yJywgbm9vcCkgLy8gV2UgYWxyZWFkeSBlcnJvciBoYW5kbGUgdGhpcyBzbyBzdXByZXNzIGNyYXNoZXNcblxuICAgIGlmIChpc1N0cmVhbXgocGlwZVRvKSkge1xuICAgICAgcGlwZVRvLl93cml0YWJsZVN0YXRlLnBpcGVsaW5lID0gdGhpcy5waXBlbGluZVxuICAgICAgaWYgKGNiKSBwaXBlVG8ub24oJ2Vycm9yJywgbm9vcCkgLy8gV2UgYWxyZWFkeSBlcnJvciBoYW5kbGUgdGhpcyBzbyBzdXByZXNzIGNyYXNoZXNcbiAgICAgIHBpcGVUby5vbignZmluaXNoJywgdGhpcy5waXBlbGluZS5maW5pc2hlZC5iaW5kKHRoaXMucGlwZWxpbmUpKSAvLyBUT0RPOiBqdXN0IGNhbGwgZmluaXNoZWQgZnJvbSBwaXBlVG8gaXRzZWxmXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG9uZXJyb3IgPSB0aGlzLnBpcGVsaW5lLmRvbmUuYmluZCh0aGlzLnBpcGVsaW5lLCBwaXBlVG8pXG4gICAgICBjb25zdCBvbmNsb3NlID0gdGhpcy5waXBlbGluZS5kb25lLmJpbmQodGhpcy5waXBlbGluZSwgcGlwZVRvLCBudWxsKSAvLyBvbmNsb3NlIGhhcyBhIHdlaXJkIGJvb2wgYXJnXG4gICAgICBwaXBlVG8ub24oJ2Vycm9yJywgb25lcnJvcilcbiAgICAgIHBpcGVUby5vbignY2xvc2UnLCBvbmNsb3NlKVxuICAgICAgcGlwZVRvLm9uKCdmaW5pc2gnLCB0aGlzLnBpcGVsaW5lLmZpbmlzaGVkLmJpbmQodGhpcy5waXBlbGluZSkpXG4gICAgfVxuXG4gICAgcGlwZVRvLm9uKCdkcmFpbicsIGFmdGVyRHJhaW4uYmluZCh0aGlzKSlcbiAgICB0aGlzLnN0cmVhbS5lbWl0KCdwaXBpbmcnLCBwaXBlVG8pXG4gICAgcGlwZVRvLmVtaXQoJ3BpcGUnLCB0aGlzLnN0cmVhbSlcbiAgfVxuXG4gIHB1c2ggKGRhdGEpIHtcbiAgICBjb25zdCBzdHJlYW0gPSB0aGlzLnN0cmVhbVxuXG4gICAgaWYgKGRhdGEgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuaGlnaFdhdGVyTWFyayA9IDBcbiAgICAgIHN0cmVhbS5fZHVwbGV4U3RhdGUgPSAoc3RyZWFtLl9kdXBsZXhTdGF0ZSB8IFJFQURfRU5ESU5HKSAmIFJFQURfTk9OX1BSSU1BUllfQU5EX1BVU0hFRFxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgaWYgKHRoaXMubWFwICE9PSBudWxsKSB7XG4gICAgICBkYXRhID0gdGhpcy5tYXAoZGF0YSlcbiAgICAgIGlmIChkYXRhID09PSBudWxsKSB7XG4gICAgICAgIHN0cmVhbS5fZHVwbGV4U3RhdGUgJj0gUkVBRF9QVVNIRURcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVmZmVyZWQgPCB0aGlzLmhpZ2hXYXRlck1hcmtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmJ1ZmZlcmVkICs9IHRoaXMuYnl0ZUxlbmd0aChkYXRhKVxuICAgIHRoaXMucXVldWUucHVzaChkYXRhKVxuXG4gICAgc3RyZWFtLl9kdXBsZXhTdGF0ZSA9IChzdHJlYW0uX2R1cGxleFN0YXRlIHwgUkVBRF9RVUVVRUQpICYgUkVBRF9QVVNIRURcblxuICAgIHJldHVybiB0aGlzLmJ1ZmZlcmVkIDwgdGhpcy5oaWdoV2F0ZXJNYXJrXG4gIH1cblxuICBzaGlmdCAoKSB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMucXVldWUuc2hpZnQoKVxuXG4gICAgdGhpcy5idWZmZXJlZCAtPSB0aGlzLmJ5dGVMZW5ndGgoZGF0YSlcbiAgICBpZiAodGhpcy5idWZmZXJlZCA9PT0gMCkgdGhpcy5zdHJlYW0uX2R1cGxleFN0YXRlICY9IFJFQURfTk9UX1FVRVVFRFxuICAgIHJldHVybiBkYXRhXG4gIH1cblxuICB1bnNoaWZ0IChkYXRhKSB7XG4gICAgY29uc3QgcGVuZGluZyA9IFt0aGlzLm1hcCAhPT0gbnVsbCA/IHRoaXMubWFwKGRhdGEpIDogZGF0YV1cbiAgICB3aGlsZSAodGhpcy5idWZmZXJlZCA+IDApIHBlbmRpbmcucHVzaCh0aGlzLnNoaWZ0KCkpXG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBlbmRpbmcubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICBjb25zdCBkYXRhID0gcGVuZGluZ1tpXVxuICAgICAgdGhpcy5idWZmZXJlZCArPSB0aGlzLmJ5dGVMZW5ndGgoZGF0YSlcbiAgICAgIHRoaXMucXVldWUucHVzaChkYXRhKVxuICAgIH1cblxuICAgIHRoaXMucHVzaChwZW5kaW5nW3BlbmRpbmcubGVuZ3RoIC0gMV0pXG4gIH1cblxuICByZWFkICgpIHtcbiAgICBjb25zdCBzdHJlYW0gPSB0aGlzLnN0cmVhbVxuXG4gICAgaWYgKChzdHJlYW0uX2R1cGxleFN0YXRlICYgUkVBRF9TVEFUVVMpID09PSBSRUFEX1FVRVVFRCkge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuc2hpZnQoKVxuICAgICAgaWYgKHRoaXMucGlwZVRvICE9PSBudWxsICYmIHRoaXMucGlwZVRvLndyaXRlKGRhdGEpID09PSBmYWxzZSkgc3RyZWFtLl9kdXBsZXhTdGF0ZSAmPSBSRUFEX1BJUEVfTk9UX0RSQUlORURcbiAgICAgIGlmICgoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFJFQURfRU1JVF9EQVRBKSAhPT0gMCkgc3RyZWFtLmVtaXQoJ2RhdGEnLCBkYXRhKVxuICAgICAgcmV0dXJuIGRhdGFcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZWFkQWhlYWQgPT09IGZhbHNlKSB7XG4gICAgICBzdHJlYW0uX2R1cGxleFN0YXRlIHw9IFJFQURfUkVBRF9BSEVBRFxuICAgICAgdGhpcy51cGRhdGVOZXh0VGljaygpXG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGRyYWluICgpIHtcbiAgICBjb25zdCBzdHJlYW0gPSB0aGlzLnN0cmVhbVxuXG4gICAgd2hpbGUgKChzdHJlYW0uX2R1cGxleFN0YXRlICYgUkVBRF9TVEFUVVMpID09PSBSRUFEX1FVRVVFRCAmJiAoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFJFQURfRkxPV0lORykgIT09IDApIHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLnNoaWZ0KClcbiAgICAgIGlmICh0aGlzLnBpcGVUbyAhPT0gbnVsbCAmJiB0aGlzLnBpcGVUby53cml0ZShkYXRhKSA9PT0gZmFsc2UpIHN0cmVhbS5fZHVwbGV4U3RhdGUgJj0gUkVBRF9QSVBFX05PVF9EUkFJTkVEXG4gICAgICBpZiAoKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBSRUFEX0VNSVRfREFUQSkgIT09IDApIHN0cmVhbS5lbWl0KCdkYXRhJywgZGF0YSlcbiAgICB9XG4gIH1cblxuICB1cGRhdGUgKCkge1xuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuc3RyZWFtXG5cbiAgICBzdHJlYW0uX2R1cGxleFN0YXRlIHw9IFJFQURfVVBEQVRJTkdcblxuICAgIGRvIHtcbiAgICAgIHRoaXMuZHJhaW4oKVxuXG4gICAgICB3aGlsZSAodGhpcy5idWZmZXJlZCA8IHRoaXMuaGlnaFdhdGVyTWFyayAmJiAoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFNIT1VMRF9OT1RfUkVBRCkgPT09IFJFQURfUkVBRF9BSEVBRCkge1xuICAgICAgICBzdHJlYW0uX2R1cGxleFN0YXRlIHw9IFJFQURfQUNUSVZFX0FORF9ORUVEU19QVVNIXG4gICAgICAgIHN0cmVhbS5fcmVhZCh0aGlzLmFmdGVyUmVhZClcbiAgICAgICAgdGhpcy5kcmFpbigpXG4gICAgICB9XG5cbiAgICAgIGlmICgoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFJFQURfUkVBREFCTEVfU1RBVFVTKSA9PT0gUkVBRF9FTUlUX1JFQURBQkxFX0FORF9RVUVVRUQpIHtcbiAgICAgICAgc3RyZWFtLl9kdXBsZXhTdGF0ZSB8PSBSRUFEX0VNSVRURURfUkVBREFCTEVcbiAgICAgICAgc3RyZWFtLmVtaXQoJ3JlYWRhYmxlJylcbiAgICAgIH1cblxuICAgICAgaWYgKChzdHJlYW0uX2R1cGxleFN0YXRlICYgUkVBRF9QUklNQVJZX0FORF9BQ1RJVkUpID09PSAwKSB0aGlzLnVwZGF0ZU5vblByaW1hcnkoKVxuICAgIH0gd2hpbGUgKHRoaXMuY29udGludWVVcGRhdGUoKSA9PT0gdHJ1ZSlcblxuICAgIHN0cmVhbS5fZHVwbGV4U3RhdGUgJj0gUkVBRF9OT1RfVVBEQVRJTkdcbiAgfVxuXG4gIHVwZGF0ZU5vblByaW1hcnkgKCkge1xuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuc3RyZWFtXG5cbiAgICBpZiAoKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBSRUFEX0VORElOR19TVEFUVVMpID09PSBSRUFEX0VORElORykge1xuICAgICAgc3RyZWFtLl9kdXBsZXhTdGF0ZSA9IChzdHJlYW0uX2R1cGxleFN0YXRlIHwgUkVBRF9ET05FKSAmIFJFQURfTk9UX0VORElOR1xuICAgICAgc3RyZWFtLmVtaXQoJ2VuZCcpXG4gICAgICBpZiAoKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBBVVRPX0RFU1RST1kpID09PSBET05FKSBzdHJlYW0uX2R1cGxleFN0YXRlIHw9IERFU1RST1lJTkdcbiAgICAgIGlmICh0aGlzLnBpcGVUbyAhPT0gbnVsbCkgdGhpcy5waXBlVG8uZW5kKClcbiAgICB9XG5cbiAgICBpZiAoKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBERVNUUk9ZX1NUQVRVUykgPT09IERFU1RST1lJTkcpIHtcbiAgICAgIGlmICgoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIEFDVElWRV9PUl9USUNLSU5HKSA9PT0gMCkge1xuICAgICAgICBzdHJlYW0uX2R1cGxleFN0YXRlIHw9IEFDVElWRVxuICAgICAgICBzdHJlYW0uX2Rlc3Ryb3koYWZ0ZXJEZXN0cm95LmJpbmQodGhpcykpXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBJU19PUEVOSU5HKSA9PT0gT1BFTklORykge1xuICAgICAgc3RyZWFtLl9kdXBsZXhTdGF0ZSA9IChzdHJlYW0uX2R1cGxleFN0YXRlIHwgQUNUSVZFKSAmIE5PVF9PUEVOSU5HXG4gICAgICBzdHJlYW0uX29wZW4oYWZ0ZXJPcGVuLmJpbmQodGhpcykpXG4gICAgfVxuICB9XG5cbiAgY29udGludWVVcGRhdGUgKCkge1xuICAgIGlmICgodGhpcy5zdHJlYW0uX2R1cGxleFN0YXRlICYgUkVBRF9ORVhUX1RJQ0spID09PSAwKSByZXR1cm4gZmFsc2VcbiAgICB0aGlzLnN0cmVhbS5fZHVwbGV4U3RhdGUgJj0gUkVBRF9OT1RfTkVYVF9USUNLXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIHVwZGF0ZUNhbGxiYWNrICgpIHtcbiAgICBpZiAoKHRoaXMuc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFJFQURfVVBEQVRFX1NZTkNfU1RBVFVTKSA9PT0gUkVBRF9QUklNQVJZKSB0aGlzLnVwZGF0ZSgpXG4gICAgZWxzZSB0aGlzLnVwZGF0ZU5leHRUaWNrKClcbiAgfVxuXG4gIHVwZGF0ZU5leHRUaWNrICgpIHtcbiAgICBpZiAoKHRoaXMuc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFJFQURfTkVYVF9USUNLKSAhPT0gMCkgcmV0dXJuXG4gICAgdGhpcy5zdHJlYW0uX2R1cGxleFN0YXRlIHw9IFJFQURfTkVYVF9USUNLXG4gICAgaWYgKCh0aGlzLnN0cmVhbS5fZHVwbGV4U3RhdGUgJiBSRUFEX1VQREFUSU5HKSA9PT0gMCkgcXVldWVUaWNrKHRoaXMuYWZ0ZXJVcGRhdGVOZXh0VGljaylcbiAgfVxufVxuXG5jbGFzcyBUcmFuc2Zvcm1TdGF0ZSB7XG4gIGNvbnN0cnVjdG9yIChzdHJlYW0pIHtcbiAgICB0aGlzLmRhdGEgPSBudWxsXG4gICAgdGhpcy5hZnRlclRyYW5zZm9ybSA9IGFmdGVyVHJhbnNmb3JtLmJpbmQoc3RyZWFtKVxuICAgIHRoaXMuYWZ0ZXJGaW5hbCA9IG51bGxcbiAgfVxufVxuXG5jbGFzcyBQaXBlbGluZSB7XG4gIGNvbnN0cnVjdG9yIChzcmMsIGRzdCwgY2IpIHtcbiAgICB0aGlzLmZyb20gPSBzcmNcbiAgICB0aGlzLnRvID0gZHN0XG4gICAgdGhpcy5hZnRlclBpcGUgPSBjYlxuICAgIHRoaXMuZXJyb3IgPSBudWxsXG4gICAgdGhpcy5waXBlVG9GaW5pc2hlZCA9IGZhbHNlXG4gIH1cblxuICBmaW5pc2hlZCAoKSB7XG4gICAgdGhpcy5waXBlVG9GaW5pc2hlZCA9IHRydWVcbiAgfVxuXG4gIGRvbmUgKHN0cmVhbSwgZXJyKSB7XG4gICAgaWYgKGVycikgdGhpcy5lcnJvciA9IGVyclxuXG4gICAgaWYgKHN0cmVhbSA9PT0gdGhpcy50bykge1xuICAgICAgdGhpcy50byA9IG51bGxcblxuICAgICAgaWYgKHRoaXMuZnJvbSAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoKHRoaXMuZnJvbS5fZHVwbGV4U3RhdGUgJiBSRUFEX0RPTkUpID09PSAwIHx8ICF0aGlzLnBpcGVUb0ZpbmlzaGVkKSB7XG4gICAgICAgICAgdGhpcy5mcm9tLmRlc3Ryb3kodGhpcy5lcnJvciB8fCBuZXcgRXJyb3IoJ1dyaXRhYmxlIHN0cmVhbSBjbG9zZWQgcHJlbWF0dXJlbHknKSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3RyZWFtID09PSB0aGlzLmZyb20pIHtcbiAgICAgIHRoaXMuZnJvbSA9IG51bGxcblxuICAgICAgaWYgKHRoaXMudG8gIT09IG51bGwpIHtcbiAgICAgICAgaWYgKChzdHJlYW0uX2R1cGxleFN0YXRlICYgUkVBRF9ET05FKSA9PT0gMCkge1xuICAgICAgICAgIHRoaXMudG8uZGVzdHJveSh0aGlzLmVycm9yIHx8IG5ldyBFcnJvcignUmVhZGFibGUgc3RyZWFtIGNsb3NlZCBiZWZvcmUgZW5kaW5nJykpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYWZ0ZXJQaXBlICE9PSBudWxsKSB0aGlzLmFmdGVyUGlwZSh0aGlzLmVycm9yKVxuICAgIHRoaXMudG8gPSB0aGlzLmZyb20gPSB0aGlzLmFmdGVyUGlwZSA9IG51bGxcbiAgfVxufVxuXG5mdW5jdGlvbiBhZnRlckRyYWluICgpIHtcbiAgdGhpcy5zdHJlYW0uX2R1cGxleFN0YXRlIHw9IFJFQURfUElQRV9EUkFJTkVEXG4gIHRoaXMudXBkYXRlQ2FsbGJhY2soKVxufVxuXG5mdW5jdGlvbiBhZnRlckZpbmFsIChlcnIpIHtcbiAgY29uc3Qgc3RyZWFtID0gdGhpcy5zdHJlYW1cbiAgaWYgKGVycikgc3RyZWFtLmRlc3Ryb3koZXJyKVxuICBpZiAoKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBERVNUUk9ZX1NUQVRVUykgPT09IDApIHtcbiAgICBzdHJlYW0uX2R1cGxleFN0YXRlIHw9IFdSSVRFX0RPTkVcbiAgICBzdHJlYW0uZW1pdCgnZmluaXNoJylcbiAgfVxuICBpZiAoKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBBVVRPX0RFU1RST1kpID09PSBET05FKSB7XG4gICAgc3RyZWFtLl9kdXBsZXhTdGF0ZSB8PSBERVNUUk9ZSU5HXG4gIH1cblxuICBzdHJlYW0uX2R1cGxleFN0YXRlICY9IFdSSVRFX05PVF9BQ1RJVkVcblxuICAvLyBubyBuZWVkIHRvIHdhaXQgdGhlIGV4dHJhIHRpY2sgaGVyZSwgc28gd2Ugc2hvcnQgY2lyY3VpdCB0aGF0XG4gIGlmICgoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFdSSVRFX1VQREFUSU5HKSA9PT0gMCkgdGhpcy51cGRhdGUoKVxuICBlbHNlIHRoaXMudXBkYXRlTmV4dFRpY2soKVxufVxuXG5mdW5jdGlvbiBhZnRlckRlc3Ryb3kgKGVycikge1xuICBjb25zdCBzdHJlYW0gPSB0aGlzLnN0cmVhbVxuXG4gIGlmICghZXJyICYmIHRoaXMuZXJyb3IgIT09IFNUUkVBTV9ERVNUUk9ZRUQpIGVyciA9IHRoaXMuZXJyb3JcbiAgaWYgKGVycikgc3RyZWFtLmVtaXQoJ2Vycm9yJywgZXJyKVxuICBzdHJlYW0uX2R1cGxleFN0YXRlIHw9IERFU1RST1lFRFxuICBzdHJlYW0uZW1pdCgnY2xvc2UnKVxuXG4gIGNvbnN0IHJzID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlXG4gIGNvbnN0IHdzID0gc3RyZWFtLl93cml0YWJsZVN0YXRlXG5cbiAgaWYgKHJzICE9PSBudWxsICYmIHJzLnBpcGVsaW5lICE9PSBudWxsKSBycy5waXBlbGluZS5kb25lKHN0cmVhbSwgZXJyKVxuXG4gIGlmICh3cyAhPT0gbnVsbCkge1xuICAgIHdoaWxlICh3cy5kcmFpbnMgIT09IG51bGwgJiYgd3MuZHJhaW5zLmxlbmd0aCA+IDApIHdzLmRyYWlucy5zaGlmdCgpLnJlc29sdmUoZmFsc2UpXG4gICAgaWYgKHdzLnBpcGVsaW5lICE9PSBudWxsKSB3cy5waXBlbGluZS5kb25lKHN0cmVhbSwgZXJyKVxuICB9XG59XG5cbmZ1bmN0aW9uIGFmdGVyV3JpdGUgKGVycikge1xuICBjb25zdCBzdHJlYW0gPSB0aGlzLnN0cmVhbVxuXG4gIGlmIChlcnIpIHN0cmVhbS5kZXN0cm95KGVycilcbiAgc3RyZWFtLl9kdXBsZXhTdGF0ZSAmPSBXUklURV9OT1RfQUNUSVZFXG5cbiAgaWYgKHRoaXMuZHJhaW5zICE9PSBudWxsKSB0aWNrRHJhaW5zKHRoaXMuZHJhaW5zKVxuXG4gIGlmICgoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFdSSVRFX0RSQUlOX1NUQVRVUykgPT09IFdSSVRFX1VORFJBSU5FRCkge1xuICAgIHN0cmVhbS5fZHVwbGV4U3RhdGUgJj0gV1JJVEVfRFJBSU5FRFxuICAgIGlmICgoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFdSSVRFX0VNSVRfRFJBSU4pID09PSBXUklURV9FTUlUX0RSQUlOKSB7XG4gICAgICBzdHJlYW0uZW1pdCgnZHJhaW4nKVxuICAgIH1cbiAgfVxuXG4gIHRoaXMudXBkYXRlQ2FsbGJhY2soKVxufVxuXG5mdW5jdGlvbiBhZnRlclJlYWQgKGVycikge1xuICBpZiAoZXJyKSB0aGlzLnN0cmVhbS5kZXN0cm95KGVycilcbiAgdGhpcy5zdHJlYW0uX2R1cGxleFN0YXRlICY9IFJFQURfTk9UX0FDVElWRVxuICBpZiAodGhpcy5yZWFkQWhlYWQgPT09IGZhbHNlICYmICh0aGlzLnN0cmVhbS5fZHVwbGV4U3RhdGUgJiBSRUFEX1JFU1VNRUQpID09PSAwKSB0aGlzLnN0cmVhbS5fZHVwbGV4U3RhdGUgJj0gUkVBRF9OT19SRUFEX0FIRUFEXG4gIHRoaXMudXBkYXRlQ2FsbGJhY2soKVxufVxuXG5mdW5jdGlvbiB1cGRhdGVSZWFkTlQgKCkge1xuICBpZiAoKHRoaXMuc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFJFQURfVVBEQVRJTkcpID09PSAwKSB7XG4gICAgdGhpcy5zdHJlYW0uX2R1cGxleFN0YXRlICY9IFJFQURfTk9UX05FWFRfVElDS1xuICAgIHRoaXMudXBkYXRlKClcbiAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVXcml0ZU5UICgpIHtcbiAgaWYgKCh0aGlzLnN0cmVhbS5fZHVwbGV4U3RhdGUgJiBXUklURV9VUERBVElORykgPT09IDApIHtcbiAgICB0aGlzLnN0cmVhbS5fZHVwbGV4U3RhdGUgJj0gV1JJVEVfTk9UX05FWFRfVElDS1xuICAgIHRoaXMudXBkYXRlKClcbiAgfVxufVxuXG5mdW5jdGlvbiB0aWNrRHJhaW5zIChkcmFpbnMpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkcmFpbnMubGVuZ3RoOyBpKyspIHtcbiAgICAvLyBkcmFpbnMud3JpdGVzIGFyZSBtb25vdG9uaWMsIHNvIGlmIG9uZSBpcyAwIGl0cyBhbHdheXMgdGhlIGZpcnN0IG9uZVxuICAgIGlmICgtLWRyYWluc1tpXS53cml0ZXMgPT09IDApIHtcbiAgICAgIGRyYWlucy5zaGlmdCgpLnJlc29sdmUodHJ1ZSlcbiAgICAgIGktLVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhZnRlck9wZW4gKGVycikge1xuICBjb25zdCBzdHJlYW0gPSB0aGlzLnN0cmVhbVxuXG4gIGlmIChlcnIpIHN0cmVhbS5kZXN0cm95KGVycilcblxuICBpZiAoKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBERVNUUk9ZSU5HKSA9PT0gMCkge1xuICAgIGlmICgoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFJFQURfUFJJTUFSWV9TVEFUVVMpID09PSAwKSBzdHJlYW0uX2R1cGxleFN0YXRlIHw9IFJFQURfUFJJTUFSWVxuICAgIGlmICgoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIFdSSVRFX1BSSU1BUllfU1RBVFVTKSA9PT0gMCkgc3RyZWFtLl9kdXBsZXhTdGF0ZSB8PSBXUklURV9QUklNQVJZXG4gICAgc3RyZWFtLmVtaXQoJ29wZW4nKVxuICB9XG5cbiAgc3RyZWFtLl9kdXBsZXhTdGF0ZSAmPSBOT1RfQUNUSVZFXG5cbiAgaWYgKHN0cmVhbS5fd3JpdGFibGVTdGF0ZSAhPT0gbnVsbCkge1xuICAgIHN0cmVhbS5fd3JpdGFibGVTdGF0ZS51cGRhdGVDYWxsYmFjaygpXG4gIH1cblxuICBpZiAoc3RyZWFtLl9yZWFkYWJsZVN0YXRlICE9PSBudWxsKSB7XG4gICAgc3RyZWFtLl9yZWFkYWJsZVN0YXRlLnVwZGF0ZUNhbGxiYWNrKClcbiAgfVxufVxuXG5mdW5jdGlvbiBhZnRlclRyYW5zZm9ybSAoZXJyLCBkYXRhKSB7XG4gIGlmIChkYXRhICE9PSB1bmRlZmluZWQgJiYgZGF0YSAhPT0gbnVsbCkgdGhpcy5wdXNoKGRhdGEpXG4gIHRoaXMuX3dyaXRhYmxlU3RhdGUuYWZ0ZXJXcml0ZShlcnIpXG59XG5cbmZ1bmN0aW9uIG5ld0xpc3RlbmVyIChuYW1lKSB7XG4gIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlICE9PSBudWxsKSB7XG4gICAgaWYgKG5hbWUgPT09ICdkYXRhJykge1xuICAgICAgdGhpcy5fZHVwbGV4U3RhdGUgfD0gKFJFQURfRU1JVF9EQVRBIHwgUkVBRF9SRVNVTUVEX1JFQURfQUhFQUQpXG4gICAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLnVwZGF0ZU5leHRUaWNrKClcbiAgICB9XG4gICAgaWYgKG5hbWUgPT09ICdyZWFkYWJsZScpIHtcbiAgICAgIHRoaXMuX2R1cGxleFN0YXRlIHw9IFJFQURfRU1JVF9SRUFEQUJMRVxuICAgICAgdGhpcy5fcmVhZGFibGVTdGF0ZS51cGRhdGVOZXh0VGljaygpXG4gICAgfVxuICB9XG5cbiAgaWYgKHRoaXMuX3dyaXRhYmxlU3RhdGUgIT09IG51bGwpIHtcbiAgICBpZiAobmFtZSA9PT0gJ2RyYWluJykge1xuICAgICAgdGhpcy5fZHVwbGV4U3RhdGUgfD0gV1JJVEVfRU1JVF9EUkFJTlxuICAgICAgdGhpcy5fd3JpdGFibGVTdGF0ZS51cGRhdGVOZXh0VGljaygpXG4gICAgfVxuICB9XG59XG5cbmNsYXNzIFN0cmVhbSBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gIGNvbnN0cnVjdG9yIChvcHRzKSB7XG4gICAgc3VwZXIoKVxuXG4gICAgdGhpcy5fZHVwbGV4U3RhdGUgPSAwXG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZSA9IG51bGxcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlID0gbnVsbFxuXG4gICAgaWYgKG9wdHMpIHtcbiAgICAgIGlmIChvcHRzLm9wZW4pIHRoaXMuX29wZW4gPSBvcHRzLm9wZW5cbiAgICAgIGlmIChvcHRzLmRlc3Ryb3kpIHRoaXMuX2Rlc3Ryb3kgPSBvcHRzLmRlc3Ryb3lcbiAgICAgIGlmIChvcHRzLnByZWRlc3Ryb3kpIHRoaXMuX3ByZWRlc3Ryb3kgPSBvcHRzLnByZWRlc3Ryb3lcbiAgICAgIGlmIChvcHRzLnNpZ25hbCkge1xuICAgICAgICBvcHRzLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0LmJpbmQodGhpcykpXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5vbignbmV3TGlzdGVuZXInLCBuZXdMaXN0ZW5lcilcbiAgfVxuXG4gIF9vcGVuIChjYikge1xuICAgIGNiKG51bGwpXG4gIH1cblxuICBfZGVzdHJveSAoY2IpIHtcbiAgICBjYihudWxsKVxuICB9XG5cbiAgX3ByZWRlc3Ryb3kgKCkge1xuICAgIC8vIGRvZXMgbm90aGluZ1xuICB9XG5cbiAgZ2V0IHJlYWRhYmxlICgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZSAhPT0gbnVsbCA/IHRydWUgOiB1bmRlZmluZWRcbiAgfVxuXG4gIGdldCB3cml0YWJsZSAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUgIT09IG51bGwgPyB0cnVlIDogdW5kZWZpbmVkXG4gIH1cblxuICBnZXQgZGVzdHJveWVkICgpIHtcbiAgICByZXR1cm4gKHRoaXMuX2R1cGxleFN0YXRlICYgREVTVFJPWUVEKSAhPT0gMFxuICB9XG5cbiAgZ2V0IGRlc3Ryb3lpbmcgKCkge1xuICAgIHJldHVybiAodGhpcy5fZHVwbGV4U3RhdGUgJiBERVNUUk9ZX1NUQVRVUykgIT09IDBcbiAgfVxuXG4gIGRlc3Ryb3kgKGVycikge1xuICAgIGlmICgodGhpcy5fZHVwbGV4U3RhdGUgJiBERVNUUk9ZX1NUQVRVUykgPT09IDApIHtcbiAgICAgIGlmICghZXJyKSBlcnIgPSBTVFJFQU1fREVTVFJPWUVEXG4gICAgICB0aGlzLl9kdXBsZXhTdGF0ZSA9ICh0aGlzLl9kdXBsZXhTdGF0ZSB8IERFU1RST1lJTkcpICYgTk9OX1BSSU1BUllcblxuICAgICAgaWYgKHRoaXMuX3JlYWRhYmxlU3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrID0gMFxuICAgICAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmVycm9yID0gZXJyXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fd3JpdGFibGVTdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcmsgPSAwXG4gICAgICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3IgPSBlcnJcbiAgICAgIH1cblxuICAgICAgdGhpcy5fZHVwbGV4U3RhdGUgfD0gUFJFREVTVFJPWUlOR1xuICAgICAgdGhpcy5fcHJlZGVzdHJveSgpXG4gICAgICB0aGlzLl9kdXBsZXhTdGF0ZSAmPSBOT1RfUFJFREVTVFJPWUlOR1xuXG4gICAgICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZSAhPT0gbnVsbCkgdGhpcy5fcmVhZGFibGVTdGF0ZS51cGRhdGVOZXh0VGljaygpXG4gICAgICBpZiAodGhpcy5fd3JpdGFibGVTdGF0ZSAhPT0gbnVsbCkgdGhpcy5fd3JpdGFibGVTdGF0ZS51cGRhdGVOZXh0VGljaygpXG4gICAgfVxuICB9XG59XG5cbmNsYXNzIFJlYWRhYmxlIGV4dGVuZHMgU3RyZWFtIHtcbiAgY29uc3RydWN0b3IgKG9wdHMpIHtcbiAgICBzdXBlcihvcHRzKVxuXG4gICAgdGhpcy5fZHVwbGV4U3RhdGUgfD0gT1BFTklORyB8IFdSSVRFX0RPTkUgfCBSRUFEX1JFQURfQUhFQURcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlID0gbmV3IFJlYWRhYmxlU3RhdGUodGhpcywgb3B0cylcblxuICAgIGlmIChvcHRzKSB7XG4gICAgICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZS5yZWFkQWhlYWQgPT09IGZhbHNlKSB0aGlzLl9kdXBsZXhTdGF0ZSAmPSBSRUFEX05PX1JFQURfQUhFQURcbiAgICAgIGlmIChvcHRzLnJlYWQpIHRoaXMuX3JlYWQgPSBvcHRzLnJlYWRcbiAgICAgIGlmIChvcHRzLmVhZ2VyT3BlbikgdGhpcy5fcmVhZGFibGVTdGF0ZS51cGRhdGVOZXh0VGljaygpXG4gICAgICBpZiAob3B0cy5lbmNvZGluZykgdGhpcy5zZXRFbmNvZGluZyhvcHRzLmVuY29kaW5nKVxuICAgIH1cbiAgfVxuXG4gIHNldEVuY29kaW5nIChlbmNvZGluZykge1xuICAgIGNvbnN0IGRlYyA9IG5ldyBUZXh0RGVjb2RlcihlbmNvZGluZylcbiAgICBjb25zdCBtYXAgPSB0aGlzLl9yZWFkYWJsZVN0YXRlLm1hcCB8fCBlY2hvXG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5tYXAgPSBtYXBPclNraXBcbiAgICByZXR1cm4gdGhpc1xuXG4gICAgZnVuY3Rpb24gbWFwT3JTa2lwIChkYXRhKSB7XG4gICAgICBjb25zdCBuZXh0ID0gZGVjLnB1c2goZGF0YSlcbiAgICAgIHJldHVybiBuZXh0ID09PSAnJyAmJiAoZGF0YS5ieXRlTGVuZ3RoICE9PSAwIHx8IGRlYy5yZW1haW5pbmcgPiAwKSA/IG51bGwgOiBtYXAobmV4dClcbiAgICB9XG4gIH1cblxuICBfcmVhZCAoY2IpIHtcbiAgICBjYihudWxsKVxuICB9XG5cbiAgcGlwZSAoZGVzdCwgY2IpIHtcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLnVwZGF0ZU5leHRUaWNrKClcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLnBpcGUoZGVzdCwgY2IpXG4gICAgcmV0dXJuIGRlc3RcbiAgfVxuXG4gIHJlYWQgKCkge1xuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUudXBkYXRlTmV4dFRpY2soKVxuICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLnJlYWQoKVxuICB9XG5cbiAgcHVzaCAoZGF0YSkge1xuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUudXBkYXRlTmV4dFRpY2soKVxuICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLnB1c2goZGF0YSlcbiAgfVxuXG4gIHVuc2hpZnQgKGRhdGEpIHtcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLnVwZGF0ZU5leHRUaWNrKClcbiAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS51bnNoaWZ0KGRhdGEpXG4gIH1cblxuICByZXN1bWUgKCkge1xuICAgIHRoaXMuX2R1cGxleFN0YXRlIHw9IFJFQURfUkVTVU1FRF9SRUFEX0FIRUFEXG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS51cGRhdGVOZXh0VGljaygpXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIHBhdXNlICgpIHtcbiAgICB0aGlzLl9kdXBsZXhTdGF0ZSAmPSAodGhpcy5fcmVhZGFibGVTdGF0ZS5yZWFkQWhlYWQgPT09IGZhbHNlID8gUkVBRF9QQVVTRURfTk9fUkVBRF9BSEVBRCA6IFJFQURfUEFVU0VEKVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBzdGF0aWMgX2Zyb21Bc3luY0l0ZXJhdG9yIChpdGUsIG9wdHMpIHtcbiAgICBsZXQgZGVzdHJveVxuXG4gICAgY29uc3QgcnMgPSBuZXcgUmVhZGFibGUoe1xuICAgICAgLi4ub3B0cyxcbiAgICAgIHJlYWQgKGNiKSB7XG4gICAgICAgIGl0ZS5uZXh0KCkudGhlbihwdXNoKS50aGVuKGNiLmJpbmQobnVsbCwgbnVsbCkpLmNhdGNoKGNiKVxuICAgICAgfSxcbiAgICAgIHByZWRlc3Ryb3kgKCkge1xuICAgICAgICBkZXN0cm95ID0gaXRlLnJldHVybigpXG4gICAgICB9LFxuICAgICAgZGVzdHJveSAoY2IpIHtcbiAgICAgICAgaWYgKCFkZXN0cm95KSByZXR1cm4gY2IobnVsbClcbiAgICAgICAgZGVzdHJveS50aGVuKGNiLmJpbmQobnVsbCwgbnVsbCkpLmNhdGNoKGNiKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICByZXR1cm4gcnNcblxuICAgIGZ1bmN0aW9uIHB1c2ggKGRhdGEpIHtcbiAgICAgIGlmIChkYXRhLmRvbmUpIHJzLnB1c2gobnVsbClcbiAgICAgIGVsc2UgcnMucHVzaChkYXRhLnZhbHVlKVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBmcm9tIChkYXRhLCBvcHRzKSB7XG4gICAgaWYgKGlzUmVhZFN0cmVhbXgoZGF0YSkpIHJldHVybiBkYXRhXG4gICAgaWYgKGRhdGFbYXN5bmNJdGVyYXRvcl0pIHJldHVybiB0aGlzLl9mcm9tQXN5bmNJdGVyYXRvcihkYXRhW2FzeW5jSXRlcmF0b3JdKCksIG9wdHMpXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGRhdGEpKSBkYXRhID0gZGF0YSA9PT0gdW5kZWZpbmVkID8gW10gOiBbZGF0YV1cblxuICAgIGxldCBpID0gMFxuICAgIHJldHVybiBuZXcgUmVhZGFibGUoe1xuICAgICAgLi4ub3B0cyxcbiAgICAgIHJlYWQgKGNiKSB7XG4gICAgICAgIHRoaXMucHVzaChpID09PSBkYXRhLmxlbmd0aCA/IG51bGwgOiBkYXRhW2krK10pXG4gICAgICAgIGNiKG51bGwpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHN0YXRpYyBpc0JhY2twcmVzc3VyZWQgKHJzKSB7XG4gICAgcmV0dXJuIChycy5fZHVwbGV4U3RhdGUgJiBSRUFEX0JBQ0tQUkVTU1VSRV9TVEFUVVMpICE9PSAwIHx8IHJzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlcmVkID49IHJzLl9yZWFkYWJsZVN0YXRlLmhpZ2hXYXRlck1hcmtcbiAgfVxuXG4gIHN0YXRpYyBpc1BhdXNlZCAocnMpIHtcbiAgICByZXR1cm4gKHJzLl9kdXBsZXhTdGF0ZSAmIFJFQURfUkVTVU1FRCkgPT09IDBcbiAgfVxuXG4gIFthc3luY0l0ZXJhdG9yXSAoKSB7XG4gICAgY29uc3Qgc3RyZWFtID0gdGhpc1xuXG4gICAgbGV0IGVycm9yID0gbnVsbFxuICAgIGxldCBwcm9taXNlUmVzb2x2ZSA9IG51bGxcbiAgICBsZXQgcHJvbWlzZVJlamVjdCA9IG51bGxcblxuICAgIHRoaXMub24oJ2Vycm9yJywgKGVycikgPT4geyBlcnJvciA9IGVyciB9KVxuICAgIHRoaXMub24oJ3JlYWRhYmxlJywgb25yZWFkYWJsZSlcbiAgICB0aGlzLm9uKCdjbG9zZScsIG9uY2xvc2UpXG5cbiAgICByZXR1cm4ge1xuICAgICAgW2FzeW5jSXRlcmF0b3JdICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNcbiAgICAgIH0sXG4gICAgICBuZXh0ICgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICBwcm9taXNlUmVzb2x2ZSA9IHJlc29sdmVcbiAgICAgICAgICBwcm9taXNlUmVqZWN0ID0gcmVqZWN0XG4gICAgICAgICAgY29uc3QgZGF0YSA9IHN0cmVhbS5yZWFkKClcbiAgICAgICAgICBpZiAoZGF0YSAhPT0gbnVsbCkgb25kYXRhKGRhdGEpXG4gICAgICAgICAgZWxzZSBpZiAoKHN0cmVhbS5fZHVwbGV4U3RhdGUgJiBERVNUUk9ZRUQpICE9PSAwKSBvbmRhdGEobnVsbClcbiAgICAgICAgfSlcbiAgICAgIH0sXG4gICAgICByZXR1cm4gKCkge1xuICAgICAgICByZXR1cm4gZGVzdHJveShudWxsKVxuICAgICAgfSxcbiAgICAgIHRocm93IChlcnIpIHtcbiAgICAgICAgcmV0dXJuIGRlc3Ryb3koZXJyKVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9ucmVhZGFibGUgKCkge1xuICAgICAgaWYgKHByb21pc2VSZXNvbHZlICE9PSBudWxsKSBvbmRhdGEoc3RyZWFtLnJlYWQoKSlcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvbmNsb3NlICgpIHtcbiAgICAgIGlmIChwcm9taXNlUmVzb2x2ZSAhPT0gbnVsbCkgb25kYXRhKG51bGwpXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25kYXRhIChkYXRhKSB7XG4gICAgICBpZiAocHJvbWlzZVJlamVjdCA9PT0gbnVsbCkgcmV0dXJuXG4gICAgICBpZiAoZXJyb3IpIHByb21pc2VSZWplY3QoZXJyb3IpXG4gICAgICBlbHNlIGlmIChkYXRhID09PSBudWxsICYmIChzdHJlYW0uX2R1cGxleFN0YXRlICYgUkVBRF9ET05FKSA9PT0gMCkgcHJvbWlzZVJlamVjdChTVFJFQU1fREVTVFJPWUVEKVxuICAgICAgZWxzZSBwcm9taXNlUmVzb2x2ZSh7IHZhbHVlOiBkYXRhLCBkb25lOiBkYXRhID09PSBudWxsIH0pXG4gICAgICBwcm9taXNlUmVqZWN0ID0gcHJvbWlzZVJlc29sdmUgPSBudWxsXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVzdHJveSAoZXJyKSB7XG4gICAgICBzdHJlYW0uZGVzdHJveShlcnIpXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBpZiAoc3RyZWFtLl9kdXBsZXhTdGF0ZSAmIERFU1RST1lFRCkgcmV0dXJuIHJlc29sdmUoeyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH0pXG4gICAgICAgIHN0cmVhbS5vbmNlKCdjbG9zZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoZXJyKSByZWplY3QoZXJyKVxuICAgICAgICAgIGVsc2UgcmVzb2x2ZSh7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfSlcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfVxuICB9XG59XG5cbmNsYXNzIFdyaXRhYmxlIGV4dGVuZHMgU3RyZWFtIHtcbiAgY29uc3RydWN0b3IgKG9wdHMpIHtcbiAgICBzdXBlcihvcHRzKVxuXG4gICAgdGhpcy5fZHVwbGV4U3RhdGUgfD0gT1BFTklORyB8IFJFQURfRE9ORVxuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUgPSBuZXcgV3JpdGFibGVTdGF0ZSh0aGlzLCBvcHRzKVxuXG4gICAgaWYgKG9wdHMpIHtcbiAgICAgIGlmIChvcHRzLndyaXRldikgdGhpcy5fd3JpdGV2ID0gb3B0cy53cml0ZXZcbiAgICAgIGlmIChvcHRzLndyaXRlKSB0aGlzLl93cml0ZSA9IG9wdHMud3JpdGVcbiAgICAgIGlmIChvcHRzLmZpbmFsKSB0aGlzLl9maW5hbCA9IG9wdHMuZmluYWxcbiAgICAgIGlmIChvcHRzLmVhZ2VyT3BlbikgdGhpcy5fd3JpdGFibGVTdGF0ZS51cGRhdGVOZXh0VGljaygpXG4gICAgfVxuICB9XG5cbiAgY29yayAoKSB7XG4gICAgdGhpcy5fZHVwbGV4U3RhdGUgfD0gV1JJVEVfQ09SS0VEXG4gIH1cblxuICB1bmNvcmsgKCkge1xuICAgIHRoaXMuX2R1cGxleFN0YXRlICY9IFdSSVRFX05PVF9DT1JLRURcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLnVwZGF0ZU5leHRUaWNrKClcbiAgfVxuXG4gIF93cml0ZXYgKGJhdGNoLCBjYikge1xuICAgIGNiKG51bGwpXG4gIH1cblxuICBfd3JpdGUgKGRhdGEsIGNiKSB7XG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5hdXRvQmF0Y2goZGF0YSwgY2IpXG4gIH1cblxuICBfZmluYWwgKGNiKSB7XG4gICAgY2IobnVsbClcbiAgfVxuXG4gIHN0YXRpYyBpc0JhY2twcmVzc3VyZWQgKHdzKSB7XG4gICAgcmV0dXJuICh3cy5fZHVwbGV4U3RhdGUgJiBXUklURV9CQUNLUFJFU1NVUkVfU1RBVFVTKSAhPT0gMFxuICB9XG5cbiAgc3RhdGljIGRyYWluZWQgKHdzKSB7XG4gICAgaWYgKHdzLmRlc3Ryb3llZCkgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSlcbiAgICBjb25zdCBzdGF0ZSA9IHdzLl93cml0YWJsZVN0YXRlXG4gICAgY29uc3QgcGVuZGluZyA9IChpc1dyaXRldih3cykgPyBNYXRoLm1pbigxLCBzdGF0ZS5xdWV1ZS5sZW5ndGgpIDogc3RhdGUucXVldWUubGVuZ3RoKVxuICAgIGNvbnN0IHdyaXRlcyA9IHBlbmRpbmcgKyAoKHdzLl9kdXBsZXhTdGF0ZSAmIFdSSVRFX1dSSVRJTkcpID8gMSA6IDApXG4gICAgaWYgKHdyaXRlcyA9PT0gMCkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKVxuICAgIGlmIChzdGF0ZS5kcmFpbnMgPT09IG51bGwpIHN0YXRlLmRyYWlucyA9IFtdXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBzdGF0ZS5kcmFpbnMucHVzaCh7IHdyaXRlcywgcmVzb2x2ZSB9KVxuICAgIH0pXG4gIH1cblxuICB3cml0ZSAoZGF0YSkge1xuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUudXBkYXRlTmV4dFRpY2soKVxuICAgIHJldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLnB1c2goZGF0YSlcbiAgfVxuXG4gIGVuZCAoZGF0YSkge1xuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUudXBkYXRlTmV4dFRpY2soKVxuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kKGRhdGEpXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxufVxuXG5jbGFzcyBEdXBsZXggZXh0ZW5kcyBSZWFkYWJsZSB7IC8vIGFuZCBXcml0YWJsZVxuICBjb25zdHJ1Y3RvciAob3B0cykge1xuICAgIHN1cGVyKG9wdHMpXG5cbiAgICB0aGlzLl9kdXBsZXhTdGF0ZSA9IE9QRU5JTkcgfCAodGhpcy5fZHVwbGV4U3RhdGUgJiBSRUFEX1JFQURfQUhFQUQpXG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZSA9IG5ldyBXcml0YWJsZVN0YXRlKHRoaXMsIG9wdHMpXG5cbiAgICBpZiAob3B0cykge1xuICAgICAgaWYgKG9wdHMud3JpdGV2KSB0aGlzLl93cml0ZXYgPSBvcHRzLndyaXRldlxuICAgICAgaWYgKG9wdHMud3JpdGUpIHRoaXMuX3dyaXRlID0gb3B0cy53cml0ZVxuICAgICAgaWYgKG9wdHMuZmluYWwpIHRoaXMuX2ZpbmFsID0gb3B0cy5maW5hbFxuICAgIH1cbiAgfVxuXG4gIGNvcmsgKCkge1xuICAgIHRoaXMuX2R1cGxleFN0YXRlIHw9IFdSSVRFX0NPUktFRFxuICB9XG5cbiAgdW5jb3JrICgpIHtcbiAgICB0aGlzLl9kdXBsZXhTdGF0ZSAmPSBXUklURV9OT1RfQ09SS0VEXG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS51cGRhdGVOZXh0VGljaygpXG4gIH1cblxuICBfd3JpdGV2IChiYXRjaCwgY2IpIHtcbiAgICBjYihudWxsKVxuICB9XG5cbiAgX3dyaXRlIChkYXRhLCBjYikge1xuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuYXV0b0JhdGNoKGRhdGEsIGNiKVxuICB9XG5cbiAgX2ZpbmFsIChjYikge1xuICAgIGNiKG51bGwpXG4gIH1cblxuICB3cml0ZSAoZGF0YSkge1xuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUudXBkYXRlTmV4dFRpY2soKVxuICAgIHJldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLnB1c2goZGF0YSlcbiAgfVxuXG4gIGVuZCAoZGF0YSkge1xuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUudXBkYXRlTmV4dFRpY2soKVxuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kKGRhdGEpXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxufVxuXG5jbGFzcyBUcmFuc2Zvcm0gZXh0ZW5kcyBEdXBsZXgge1xuICBjb25zdHJ1Y3RvciAob3B0cykge1xuICAgIHN1cGVyKG9wdHMpXG4gICAgdGhpcy5fdHJhbnNmb3JtU3RhdGUgPSBuZXcgVHJhbnNmb3JtU3RhdGUodGhpcylcblxuICAgIGlmIChvcHRzKSB7XG4gICAgICBpZiAob3B0cy50cmFuc2Zvcm0pIHRoaXMuX3RyYW5zZm9ybSA9IG9wdHMudHJhbnNmb3JtXG4gICAgICBpZiAob3B0cy5mbHVzaCkgdGhpcy5fZmx1c2ggPSBvcHRzLmZsdXNoXG4gICAgfVxuICB9XG5cbiAgX3dyaXRlIChkYXRhLCBjYikge1xuICAgIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlcmVkID49IHRoaXMuX3JlYWRhYmxlU3RhdGUuaGlnaFdhdGVyTWFyaykge1xuICAgICAgdGhpcy5fdHJhbnNmb3JtU3RhdGUuZGF0YSA9IGRhdGFcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fdHJhbnNmb3JtKGRhdGEsIHRoaXMuX3RyYW5zZm9ybVN0YXRlLmFmdGVyVHJhbnNmb3JtKVxuICAgIH1cbiAgfVxuXG4gIF9yZWFkIChjYikge1xuICAgIGlmICh0aGlzLl90cmFuc2Zvcm1TdGF0ZS5kYXRhICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5fdHJhbnNmb3JtU3RhdGUuZGF0YVxuICAgICAgdGhpcy5fdHJhbnNmb3JtU3RhdGUuZGF0YSA9IG51bGxcbiAgICAgIGNiKG51bGwpXG4gICAgICB0aGlzLl90cmFuc2Zvcm0oZGF0YSwgdGhpcy5fdHJhbnNmb3JtU3RhdGUuYWZ0ZXJUcmFuc2Zvcm0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGNiKG51bGwpXG4gICAgfVxuICB9XG5cbiAgZGVzdHJveSAoZXJyKSB7XG4gICAgc3VwZXIuZGVzdHJveShlcnIpXG4gICAgaWYgKHRoaXMuX3RyYW5zZm9ybVN0YXRlLmRhdGEgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuX3RyYW5zZm9ybVN0YXRlLmRhdGEgPSBudWxsXG4gICAgICB0aGlzLl90cmFuc2Zvcm1TdGF0ZS5hZnRlclRyYW5zZm9ybSgpXG4gICAgfVxuICB9XG5cbiAgX3RyYW5zZm9ybSAoZGF0YSwgY2IpIHtcbiAgICBjYihudWxsLCBkYXRhKVxuICB9XG5cbiAgX2ZsdXNoIChjYikge1xuICAgIGNiKG51bGwpXG4gIH1cblxuICBfZmluYWwgKGNiKSB7XG4gICAgdGhpcy5fdHJhbnNmb3JtU3RhdGUuYWZ0ZXJGaW5hbCA9IGNiXG4gICAgdGhpcy5fZmx1c2godHJhbnNmb3JtQWZ0ZXJGbHVzaC5iaW5kKHRoaXMpKVxuICB9XG59XG5cbmNsYXNzIFBhc3NUaHJvdWdoIGV4dGVuZHMgVHJhbnNmb3JtIHt9XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybUFmdGVyRmx1c2ggKGVyciwgZGF0YSkge1xuICBjb25zdCBjYiA9IHRoaXMuX3RyYW5zZm9ybVN0YXRlLmFmdGVyRmluYWxcbiAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgaWYgKGRhdGEgIT09IG51bGwgJiYgZGF0YSAhPT0gdW5kZWZpbmVkKSB0aGlzLnB1c2goZGF0YSlcbiAgdGhpcy5wdXNoKG51bGwpXG4gIGNiKG51bGwpXG59XG5cbmZ1bmN0aW9uIHBpcGVsaW5lUHJvbWlzZSAoLi4uc3RyZWFtcykge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHJldHVybiBwaXBlbGluZSguLi5zdHJlYW1zLCAoZXJyKSA9PiB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gcmVqZWN0KGVycilcbiAgICAgIHJlc29sdmUoKVxuICAgIH0pXG4gIH0pXG59XG5cbmZ1bmN0aW9uIHBpcGVsaW5lIChzdHJlYW0sIC4uLnN0cmVhbXMpIHtcbiAgY29uc3QgYWxsID0gQXJyYXkuaXNBcnJheShzdHJlYW0pID8gWy4uLnN0cmVhbSwgLi4uc3RyZWFtc10gOiBbc3RyZWFtLCAuLi5zdHJlYW1zXVxuICBjb25zdCBkb25lID0gKGFsbC5sZW5ndGggJiYgdHlwZW9mIGFsbFthbGwubGVuZ3RoIC0gMV0gPT09ICdmdW5jdGlvbicpID8gYWxsLnBvcCgpIDogbnVsbFxuXG4gIGlmIChhbGwubGVuZ3RoIDwgMikgdGhyb3cgbmV3IEVycm9yKCdQaXBlbGluZSByZXF1aXJlcyBhdCBsZWFzdCAyIHN0cmVhbXMnKVxuXG4gIGxldCBzcmMgPSBhbGxbMF1cbiAgbGV0IGRlc3QgPSBudWxsXG4gIGxldCBlcnJvciA9IG51bGxcblxuICBmb3IgKGxldCBpID0gMTsgaSA8IGFsbC5sZW5ndGg7IGkrKykge1xuICAgIGRlc3QgPSBhbGxbaV1cblxuICAgIGlmIChpc1N0cmVhbXgoc3JjKSkge1xuICAgICAgc3JjLnBpcGUoZGVzdCwgb25lcnJvcilcbiAgICB9IGVsc2Uge1xuICAgICAgZXJyb3JIYW5kbGUoc3JjLCB0cnVlLCBpID4gMSwgb25lcnJvcilcbiAgICAgIHNyYy5waXBlKGRlc3QpXG4gICAgfVxuXG4gICAgc3JjID0gZGVzdFxuICB9XG5cbiAgaWYgKGRvbmUpIHtcbiAgICBsZXQgZmluID0gZmFsc2VcblxuICAgIGNvbnN0IGF1dG9EZXN0cm95ID0gaXNTdHJlYW14KGRlc3QpIHx8ICEhKGRlc3QuX3dyaXRhYmxlU3RhdGUgJiYgZGVzdC5fd3JpdGFibGVTdGF0ZS5hdXRvRGVzdHJveSlcblxuICAgIGRlc3Qub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgaWYgKGVycm9yID09PSBudWxsKSBlcnJvciA9IGVyclxuICAgIH0pXG5cbiAgICBkZXN0Lm9uKCdmaW5pc2gnLCAoKSA9PiB7XG4gICAgICBmaW4gPSB0cnVlXG4gICAgICBpZiAoIWF1dG9EZXN0cm95KSBkb25lKGVycm9yKVxuICAgIH0pXG5cbiAgICBpZiAoYXV0b0Rlc3Ryb3kpIHtcbiAgICAgIGRlc3Qub24oJ2Nsb3NlJywgKCkgPT4gZG9uZShlcnJvciB8fCAoZmluID8gbnVsbCA6IFBSRU1BVFVSRV9DTE9TRSkpKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkZXN0XG5cbiAgZnVuY3Rpb24gZXJyb3JIYW5kbGUgKHMsIHJkLCB3ciwgb25lcnJvcikge1xuICAgIHMub24oJ2Vycm9yJywgb25lcnJvcilcbiAgICBzLm9uKCdjbG9zZScsIG9uY2xvc2UpXG5cbiAgICBmdW5jdGlvbiBvbmNsb3NlICgpIHtcbiAgICAgIGlmIChyZCAmJiBzLl9yZWFkYWJsZVN0YXRlICYmICFzLl9yZWFkYWJsZVN0YXRlLmVuZGVkKSByZXR1cm4gb25lcnJvcihQUkVNQVRVUkVfQ0xPU0UpXG4gICAgICBpZiAod3IgJiYgcy5fd3JpdGFibGVTdGF0ZSAmJiAhcy5fd3JpdGFibGVTdGF0ZS5lbmRlZCkgcmV0dXJuIG9uZXJyb3IoUFJFTUFUVVJFX0NMT1NFKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG9uZXJyb3IgKGVycikge1xuICAgIGlmICghZXJyIHx8IGVycm9yKSByZXR1cm5cbiAgICBlcnJvciA9IGVyclxuXG4gICAgZm9yIChjb25zdCBzIG9mIGFsbCkge1xuICAgICAgcy5kZXN0cm95KGVycilcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZWNobyAocykge1xuICByZXR1cm4gc1xufVxuXG5mdW5jdGlvbiBpc1N0cmVhbSAoc3RyZWFtKSB7XG4gIHJldHVybiAhIXN0cmVhbS5fcmVhZGFibGVTdGF0ZSB8fCAhIXN0cmVhbS5fd3JpdGFibGVTdGF0ZVxufVxuXG5mdW5jdGlvbiBpc1N0cmVhbXggKHN0cmVhbSkge1xuICByZXR1cm4gdHlwZW9mIHN0cmVhbS5fZHVwbGV4U3RhdGUgPT09ICdudW1iZXInICYmIGlzU3RyZWFtKHN0cmVhbSlcbn1cblxuZnVuY3Rpb24gaXNFbmRlZCAoc3RyZWFtKSB7XG4gIHJldHVybiAhIXN0cmVhbS5fcmVhZGFibGVTdGF0ZSAmJiBzdHJlYW0uX3JlYWRhYmxlU3RhdGUuZW5kZWRcbn1cblxuZnVuY3Rpb24gaXNGaW5pc2hlZCAoc3RyZWFtKSB7XG4gIHJldHVybiAhIXN0cmVhbS5fd3JpdGFibGVTdGF0ZSAmJiBzdHJlYW0uX3dyaXRhYmxlU3RhdGUuZW5kZWRcbn1cblxuZnVuY3Rpb24gZ2V0U3RyZWFtRXJyb3IgKHN0cmVhbSwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IGVyciA9IChzdHJlYW0uX3JlYWRhYmxlU3RhdGUgJiYgc3RyZWFtLl9yZWFkYWJsZVN0YXRlLmVycm9yKSB8fCAoc3RyZWFtLl93cml0YWJsZVN0YXRlICYmIHN0cmVhbS5fd3JpdGFibGVTdGF0ZS5lcnJvcilcblxuICAvLyBhdm9pZCBpbXBsaWNpdCBlcnJvcnMgYnkgZGVmYXVsdFxuICByZXR1cm4gKCFvcHRzLmFsbCAmJiBlcnIgPT09IFNUUkVBTV9ERVNUUk9ZRUQpID8gbnVsbCA6IGVyclxufVxuXG5mdW5jdGlvbiBpc1JlYWRTdHJlYW14IChzdHJlYW0pIHtcbiAgcmV0dXJuIGlzU3RyZWFteChzdHJlYW0pICYmIHN0cmVhbS5yZWFkYWJsZVxufVxuXG5mdW5jdGlvbiBpc1R5cGVkQXJyYXkgKGRhdGEpIHtcbiAgcmV0dXJuIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyAmJiBkYXRhICE9PSBudWxsICYmIHR5cGVvZiBkYXRhLmJ5dGVMZW5ndGggPT09ICdudW1iZXInXG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRCeXRlTGVuZ3RoIChkYXRhKSB7XG4gIHJldHVybiBpc1R5cGVkQXJyYXkoZGF0YSkgPyBkYXRhLmJ5dGVMZW5ndGggOiAxMDI0XG59XG5cbmZ1bmN0aW9uIG5vb3AgKCkge31cblxuZnVuY3Rpb24gYWJvcnQgKCkge1xuICB0aGlzLmRlc3Ryb3kobmV3IEVycm9yKCdTdHJlYW0gYWJvcnRlZC4nKSlcbn1cblxuZnVuY3Rpb24gaXNXcml0ZXYgKHMpIHtcbiAgcmV0dXJuIHMuX3dyaXRldiAhPT0gV3JpdGFibGUucHJvdG90eXBlLl93cml0ZXYgJiYgcy5fd3JpdGV2ICE9PSBEdXBsZXgucHJvdG90eXBlLl93cml0ZXZcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHBpcGVsaW5lLFxuICBwaXBlbGluZVByb21pc2UsXG4gIGlzU3RyZWFtLFxuICBpc1N0cmVhbXgsXG4gIGlzRW5kZWQsXG4gIGlzRmluaXNoZWQsXG4gIGdldFN0cmVhbUVycm9yLFxuICBTdHJlYW0sXG4gIFdyaXRhYmxlLFxuICBSZWFkYWJsZSxcbiAgRHVwbGV4LFxuICBUcmFuc2Zvcm0sXG4gIC8vIEV4cG9ydCBQYXNzVGhyb3VnaCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIE5vZGUuanMgY29yZSdzIHN0cmVhbSBtb2R1bGVcbiAgUGFzc1Rocm91Z2hcbn1cbiIsCiAgICAiZnVuY3Rpb24gaXNCdWZmZXIgKHZhbHVlKSB7XG4gIHJldHVybiBCdWZmZXIuaXNCdWZmZXIodmFsdWUpIHx8IHZhbHVlIGluc3RhbmNlb2YgVWludDhBcnJheVxufVxuXG5mdW5jdGlvbiBpc0VuY29kaW5nIChlbmNvZGluZykge1xuICByZXR1cm4gQnVmZmVyLmlzRW5jb2RpbmcoZW5jb2RpbmcpXG59XG5cbmZ1bmN0aW9uIGFsbG9jIChzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICByZXR1cm4gQnVmZmVyLmFsbG9jKHNpemUsIGZpbGwsIGVuY29kaW5nKVxufVxuXG5mdW5jdGlvbiBhbGxvY1Vuc2FmZSAoc2l6ZSkge1xuICByZXR1cm4gQnVmZmVyLmFsbG9jVW5zYWZlKHNpemUpXG59XG5cbmZ1bmN0aW9uIGFsbG9jVW5zYWZlU2xvdyAoc2l6ZSkge1xuICByZXR1cm4gQnVmZmVyLmFsbG9jVW5zYWZlU2xvdyhzaXplKVxufVxuXG5mdW5jdGlvbiBieXRlTGVuZ3RoIChzdHJpbmcsIGVuY29kaW5nKSB7XG4gIHJldHVybiBCdWZmZXIuYnl0ZUxlbmd0aChzdHJpbmcsIGVuY29kaW5nKVxufVxuXG5mdW5jdGlvbiBjb21wYXJlIChhLCBiKSB7XG4gIHJldHVybiBCdWZmZXIuY29tcGFyZShhLCBiKVxufVxuXG5mdW5jdGlvbiBjb25jYXQgKGJ1ZmZlcnMsIHRvdGFsTGVuZ3RoKSB7XG4gIHJldHVybiBCdWZmZXIuY29uY2F0KGJ1ZmZlcnMsIHRvdGFsTGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBjb3B5IChzb3VyY2UsIHRhcmdldCwgdGFyZ2V0U3RhcnQsIHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIHRvQnVmZmVyKHNvdXJjZSkuY29weSh0YXJnZXQsIHRhcmdldFN0YXJ0LCBzdGFydCwgZW5kKVxufVxuXG5mdW5jdGlvbiBlcXVhbHMgKGEsIGIpIHtcbiAgcmV0dXJuIHRvQnVmZmVyKGEpLmVxdWFscyhiKVxufVxuXG5mdW5jdGlvbiBmaWxsIChidWZmZXIsIHZhbHVlLCBvZmZzZXQsIGVuZCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIHRvQnVmZmVyKGJ1ZmZlcikuZmlsbCh2YWx1ZSwgb2Zmc2V0LCBlbmQsIGVuY29kaW5nKVxufVxuXG5mdW5jdGlvbiBmcm9tICh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBCdWZmZXIuZnJvbSh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBpbmNsdWRlcyAoYnVmZmVyLCB2YWx1ZSwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIHRvQnVmZmVyKGJ1ZmZlcikuaW5jbHVkZXModmFsdWUsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKVxufVxuXG5mdW5jdGlvbiBpbmRleE9mIChidWZmZXIsIHZhbHVlLCBieWZlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gdG9CdWZmZXIoYnVmZmVyKS5pbmRleE9mKHZhbHVlLCBieWZlT2Zmc2V0LCBlbmNvZGluZylcbn1cblxuZnVuY3Rpb24gbGFzdEluZGV4T2YgKGJ1ZmZlciwgdmFsdWUsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiB0b0J1ZmZlcihidWZmZXIpLmxhc3RJbmRleE9mKHZhbHVlLCBieXRlT2Zmc2V0LCBlbmNvZGluZylcbn1cblxuZnVuY3Rpb24gc3dhcDE2IChidWZmZXIpIHtcbiAgcmV0dXJuIHRvQnVmZmVyKGJ1ZmZlcikuc3dhcDE2KClcbn1cblxuZnVuY3Rpb24gc3dhcDMyIChidWZmZXIpIHtcbiAgcmV0dXJuIHRvQnVmZmVyKGJ1ZmZlcikuc3dhcDMyKClcbn1cblxuZnVuY3Rpb24gc3dhcDY0IChidWZmZXIpIHtcbiAgcmV0dXJuIHRvQnVmZmVyKGJ1ZmZlcikuc3dhcDY0KClcbn1cblxuZnVuY3Rpb24gdG9CdWZmZXIgKGJ1ZmZlcikge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKGJ1ZmZlcikpIHJldHVybiBidWZmZXJcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKGJ1ZmZlci5idWZmZXIsIGJ1ZmZlci5ieXRlT2Zmc2V0LCBidWZmZXIuYnl0ZUxlbmd0aClcbn1cblxuZnVuY3Rpb24gdG9TdHJpbmcgKGJ1ZmZlciwgZW5jb2RpbmcsIHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIHRvQnVmZmVyKGJ1ZmZlcikudG9TdHJpbmcoZW5jb2RpbmcsIHN0YXJ0LCBlbmQpXG59XG5cbmZ1bmN0aW9uIHdyaXRlIChidWZmZXIsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgsIGVuY29kaW5nKSB7XG4gIHJldHVybiB0b0J1ZmZlcihidWZmZXIpLndyaXRlKHN0cmluZywgb2Zmc2V0LCBsZW5ndGgsIGVuY29kaW5nKVxufVxuXG5mdW5jdGlvbiB3cml0ZURvdWJsZUxFIChidWZmZXIsIHZhbHVlLCBvZmZzZXQpIHtcbiAgcmV0dXJuIHRvQnVmZmVyKGJ1ZmZlcikud3JpdGVEb3VibGVMRSh2YWx1ZSwgb2Zmc2V0KVxufVxuXG5mdW5jdGlvbiB3cml0ZUZsb2F0TEUgKGJ1ZmZlciwgdmFsdWUsIG9mZnNldCkge1xuICByZXR1cm4gdG9CdWZmZXIoYnVmZmVyKS53cml0ZUZsb2F0TEUodmFsdWUsIG9mZnNldClcbn1cblxuZnVuY3Rpb24gd3JpdGVVSW50MzJMRSAoYnVmZmVyLCB2YWx1ZSwgb2Zmc2V0KSB7XG4gIHJldHVybiB0b0J1ZmZlcihidWZmZXIpLndyaXRlVUludDMyTEUodmFsdWUsIG9mZnNldClcbn1cblxuZnVuY3Rpb24gd3JpdGVJbnQzMkxFIChidWZmZXIsIHZhbHVlLCBvZmZzZXQpIHtcbiAgcmV0dXJuIHRvQnVmZmVyKGJ1ZmZlcikud3JpdGVJbnQzMkxFKHZhbHVlLCBvZmZzZXQpXG59XG5cbmZ1bmN0aW9uIHJlYWREb3VibGVMRSAoYnVmZmVyLCBvZmZzZXQpIHtcbiAgcmV0dXJuIHRvQnVmZmVyKGJ1ZmZlcikucmVhZERvdWJsZUxFKG9mZnNldClcbn1cblxuZnVuY3Rpb24gcmVhZEZsb2F0TEUgKGJ1ZmZlciwgb2Zmc2V0KSB7XG4gIHJldHVybiB0b0J1ZmZlcihidWZmZXIpLnJlYWRGbG9hdExFKG9mZnNldClcbn1cblxuZnVuY3Rpb24gcmVhZFVJbnQzMkxFIChidWZmZXIsIG9mZnNldCkge1xuICByZXR1cm4gdG9CdWZmZXIoYnVmZmVyKS5yZWFkVUludDMyTEUob2Zmc2V0KVxufVxuXG5mdW5jdGlvbiByZWFkSW50MzJMRSAoYnVmZmVyLCBvZmZzZXQpIHtcbiAgcmV0dXJuIHRvQnVmZmVyKGJ1ZmZlcikucmVhZEludDMyTEUob2Zmc2V0KVxufVxuXG5mdW5jdGlvbiB3cml0ZURvdWJsZUJFIChidWZmZXIsIHZhbHVlLCBvZmZzZXQpIHtcbiAgcmV0dXJuIHRvQnVmZmVyKGJ1ZmZlcikud3JpdGVEb3VibGVCRSh2YWx1ZSwgb2Zmc2V0KVxufVxuXG5mdW5jdGlvbiB3cml0ZUZsb2F0QkUgKGJ1ZmZlciwgdmFsdWUsIG9mZnNldCkge1xuICByZXR1cm4gdG9CdWZmZXIoYnVmZmVyKS53cml0ZUZsb2F0QkUodmFsdWUsIG9mZnNldClcbn1cblxuZnVuY3Rpb24gd3JpdGVVSW50MzJCRSAoYnVmZmVyLCB2YWx1ZSwgb2Zmc2V0KSB7XG4gIHJldHVybiB0b0J1ZmZlcihidWZmZXIpLndyaXRlVUludDMyQkUodmFsdWUsIG9mZnNldClcbn1cblxuZnVuY3Rpb24gd3JpdGVJbnQzMkJFIChidWZmZXIsIHZhbHVlLCBvZmZzZXQpIHtcbiAgcmV0dXJuIHRvQnVmZmVyKGJ1ZmZlcikud3JpdGVJbnQzMkJFKHZhbHVlLCBvZmZzZXQpXG59XG5cbmZ1bmN0aW9uIHJlYWREb3VibGVCRSAoYnVmZmVyLCBvZmZzZXQpIHtcbiAgcmV0dXJuIHRvQnVmZmVyKGJ1ZmZlcikucmVhZERvdWJsZUJFKG9mZnNldClcbn1cblxuZnVuY3Rpb24gcmVhZEZsb2F0QkUgKGJ1ZmZlciwgb2Zmc2V0KSB7XG4gIHJldHVybiB0b0J1ZmZlcihidWZmZXIpLnJlYWRGbG9hdEJFKG9mZnNldClcbn1cblxuZnVuY3Rpb24gcmVhZFVJbnQzMkJFIChidWZmZXIsIG9mZnNldCkge1xuICByZXR1cm4gdG9CdWZmZXIoYnVmZmVyKS5yZWFkVUludDMyQkUob2Zmc2V0KVxufVxuXG5mdW5jdGlvbiByZWFkSW50MzJCRSAoYnVmZmVyLCBvZmZzZXQpIHtcbiAgcmV0dXJuIHRvQnVmZmVyKGJ1ZmZlcikucmVhZEludDMyQkUob2Zmc2V0KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXNCdWZmZXIsXG4gIGlzRW5jb2RpbmcsXG4gIGFsbG9jLFxuICBhbGxvY1Vuc2FmZSxcbiAgYWxsb2NVbnNhZmVTbG93LFxuICBieXRlTGVuZ3RoLFxuICBjb21wYXJlLFxuICBjb25jYXQsXG4gIGNvcHksXG4gIGVxdWFscyxcbiAgZmlsbCxcbiAgZnJvbSxcbiAgaW5jbHVkZXMsXG4gIGluZGV4T2YsXG4gIGxhc3RJbmRleE9mLFxuICBzd2FwMTYsXG4gIHN3YXAzMixcbiAgc3dhcDY0LFxuICB0b0J1ZmZlcixcbiAgdG9TdHJpbmcsXG4gIHdyaXRlLFxuICB3cml0ZURvdWJsZUxFLFxuICB3cml0ZUZsb2F0TEUsXG4gIHdyaXRlVUludDMyTEUsXG4gIHdyaXRlSW50MzJMRSxcbiAgcmVhZERvdWJsZUxFLFxuICByZWFkRmxvYXRMRSxcbiAgcmVhZFVJbnQzMkxFLFxuICByZWFkSW50MzJMRSxcbiAgd3JpdGVEb3VibGVCRSxcbiAgd3JpdGVGbG9hdEJFLFxuICB3cml0ZVVJbnQzMkJFLFxuICB3cml0ZUludDMyQkUsXG4gIHJlYWREb3VibGVCRSxcbiAgcmVhZEZsb2F0QkUsXG4gIHJlYWRVSW50MzJCRSxcbiAgcmVhZEludDMyQkVcblxufVxuIiwKICAgICJjb25zdCBiNGEgPSByZXF1aXJlKCdiNGEnKVxuXG5jb25zdCBaRVJPUyA9ICcwMDAwMDAwMDAwMDAwMDAwMDAwJ1xuY29uc3QgU0VWRU5TID0gJzc3Nzc3Nzc3Nzc3Nzc3Nzc3NzcnXG5jb25zdCBaRVJPX09GRlNFVCA9ICcwJy5jaGFyQ29kZUF0KDApXG5jb25zdCBVU1RBUl9NQUdJQyA9IGI0YS5mcm9tKFsweDc1LCAweDczLCAweDc0LCAweDYxLCAweDcyLCAweDAwXSkgLy8gdXN0YXJcXHgwMFxuY29uc3QgVVNUQVJfVkVSID0gYjRhLmZyb20oW1pFUk9fT0ZGU0VULCBaRVJPX09GRlNFVF0pXG5jb25zdCBHTlVfTUFHSUMgPSBiNGEuZnJvbShbMHg3NSwgMHg3MywgMHg3NCwgMHg2MSwgMHg3MiwgMHgyMF0pIC8vIHVzdGFyXFx4MjBcbmNvbnN0IEdOVV9WRVIgPSBiNGEuZnJvbShbMHgyMCwgMHgwMF0pXG5jb25zdCBNQVNLID0gMG83Nzc3XG5jb25zdCBNQUdJQ19PRkZTRVQgPSAyNTdcbmNvbnN0IFZFUlNJT05fT0ZGU0VUID0gMjYzXG5cbmV4cG9ydHMuZGVjb2RlTG9uZ1BhdGggPSBmdW5jdGlvbiBkZWNvZGVMb25nUGF0aCAoYnVmLCBlbmNvZGluZykge1xuICByZXR1cm4gZGVjb2RlU3RyKGJ1ZiwgMCwgYnVmLmxlbmd0aCwgZW5jb2RpbmcpXG59XG5cbmV4cG9ydHMuZW5jb2RlUGF4ID0gZnVuY3Rpb24gZW5jb2RlUGF4IChvcHRzKSB7IC8vIFRPRE86IGVuY29kZSBtb3JlIHN0dWZmIGluIHBheFxuICBsZXQgcmVzdWx0ID0gJydcbiAgaWYgKG9wdHMubmFtZSkgcmVzdWx0ICs9IGFkZExlbmd0aCgnIHBhdGg9JyArIG9wdHMubmFtZSArICdcXG4nKVxuICBpZiAob3B0cy5saW5rbmFtZSkgcmVzdWx0ICs9IGFkZExlbmd0aCgnIGxpbmtwYXRoPScgKyBvcHRzLmxpbmtuYW1lICsgJ1xcbicpXG4gIGNvbnN0IHBheCA9IG9wdHMucGF4XG4gIGlmIChwYXgpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBwYXgpIHtcbiAgICAgIHJlc3VsdCArPSBhZGRMZW5ndGgoJyAnICsga2V5ICsgJz0nICsgcGF4W2tleV0gKyAnXFxuJylcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGI0YS5mcm9tKHJlc3VsdClcbn1cblxuZXhwb3J0cy5kZWNvZGVQYXggPSBmdW5jdGlvbiBkZWNvZGVQYXggKGJ1Zikge1xuICBjb25zdCByZXN1bHQgPSB7fVxuXG4gIHdoaWxlIChidWYubGVuZ3RoKSB7XG4gICAgbGV0IGkgPSAwXG4gICAgd2hpbGUgKGkgPCBidWYubGVuZ3RoICYmIGJ1ZltpXSAhPT0gMzIpIGkrK1xuICAgIGNvbnN0IGxlbiA9IHBhcnNlSW50KGI0YS50b1N0cmluZyhidWYuc3ViYXJyYXkoMCwgaSkpLCAxMClcbiAgICBpZiAoIWxlbikgcmV0dXJuIHJlc3VsdFxuXG4gICAgY29uc3QgYiA9IGI0YS50b1N0cmluZyhidWYuc3ViYXJyYXkoaSArIDEsIGxlbiAtIDEpKVxuICAgIGNvbnN0IGtleUluZGV4ID0gYi5pbmRleE9mKCc9JylcbiAgICBpZiAoa2V5SW5kZXggPT09IC0xKSByZXR1cm4gcmVzdWx0XG4gICAgcmVzdWx0W2Iuc2xpY2UoMCwga2V5SW5kZXgpXSA9IGIuc2xpY2Uoa2V5SW5kZXggKyAxKVxuXG4gICAgYnVmID0gYnVmLnN1YmFycmF5KGxlbilcbiAgfVxuXG4gIHJldHVybiByZXN1bHRcbn1cblxuZXhwb3J0cy5lbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUgKG9wdHMpIHtcbiAgY29uc3QgYnVmID0gYjRhLmFsbG9jKDUxMilcbiAgbGV0IG5hbWUgPSBvcHRzLm5hbWVcbiAgbGV0IHByZWZpeCA9ICcnXG5cbiAgaWYgKG9wdHMudHlwZWZsYWcgPT09IDUgJiYgbmFtZVtuYW1lLmxlbmd0aCAtIDFdICE9PSAnLycpIG5hbWUgKz0gJy8nXG4gIGlmIChiNGEuYnl0ZUxlbmd0aChuYW1lKSAhPT0gbmFtZS5sZW5ndGgpIHJldHVybiBudWxsIC8vIHV0Zi04XG5cbiAgd2hpbGUgKGI0YS5ieXRlTGVuZ3RoKG5hbWUpID4gMTAwKSB7XG4gICAgY29uc3QgaSA9IG5hbWUuaW5kZXhPZignLycpXG4gICAgaWYgKGkgPT09IC0xKSByZXR1cm4gbnVsbFxuICAgIHByZWZpeCArPSBwcmVmaXggPyAnLycgKyBuYW1lLnNsaWNlKDAsIGkpIDogbmFtZS5zbGljZSgwLCBpKVxuICAgIG5hbWUgPSBuYW1lLnNsaWNlKGkgKyAxKVxuICB9XG5cbiAgaWYgKGI0YS5ieXRlTGVuZ3RoKG5hbWUpID4gMTAwIHx8IGI0YS5ieXRlTGVuZ3RoKHByZWZpeCkgPiAxNTUpIHJldHVybiBudWxsXG4gIGlmIChvcHRzLmxpbmtuYW1lICYmIGI0YS5ieXRlTGVuZ3RoKG9wdHMubGlua25hbWUpID4gMTAwKSByZXR1cm4gbnVsbFxuXG4gIGI0YS53cml0ZShidWYsIG5hbWUpXG4gIGI0YS53cml0ZShidWYsIGVuY29kZU9jdChvcHRzLm1vZGUgJiBNQVNLLCA2KSwgMTAwKVxuICBiNGEud3JpdGUoYnVmLCBlbmNvZGVPY3Qob3B0cy51aWQsIDYpLCAxMDgpXG4gIGI0YS53cml0ZShidWYsIGVuY29kZU9jdChvcHRzLmdpZCwgNiksIDExNilcbiAgZW5jb2RlU2l6ZShvcHRzLnNpemUsIGJ1ZiwgMTI0KVxuICBiNGEud3JpdGUoYnVmLCBlbmNvZGVPY3QoKG9wdHMubXRpbWUuZ2V0VGltZSgpIC8gMTAwMCkgfCAwLCAxMSksIDEzNilcblxuICBidWZbMTU2XSA9IFpFUk9fT0ZGU0VUICsgdG9UeXBlZmxhZyhvcHRzLnR5cGUpXG5cbiAgaWYgKG9wdHMubGlua25hbWUpIGI0YS53cml0ZShidWYsIG9wdHMubGlua25hbWUsIDE1NylcblxuICBiNGEuY29weShVU1RBUl9NQUdJQywgYnVmLCBNQUdJQ19PRkZTRVQpXG4gIGI0YS5jb3B5KFVTVEFSX1ZFUiwgYnVmLCBWRVJTSU9OX09GRlNFVClcbiAgaWYgKG9wdHMudW5hbWUpIGI0YS53cml0ZShidWYsIG9wdHMudW5hbWUsIDI2NSlcbiAgaWYgKG9wdHMuZ25hbWUpIGI0YS53cml0ZShidWYsIG9wdHMuZ25hbWUsIDI5NylcbiAgYjRhLndyaXRlKGJ1ZiwgZW5jb2RlT2N0KG9wdHMuZGV2bWFqb3IgfHwgMCwgNiksIDMyOSlcbiAgYjRhLndyaXRlKGJ1ZiwgZW5jb2RlT2N0KG9wdHMuZGV2bWlub3IgfHwgMCwgNiksIDMzNylcblxuICBpZiAocHJlZml4KSBiNGEud3JpdGUoYnVmLCBwcmVmaXgsIDM0NSlcblxuICBiNGEud3JpdGUoYnVmLCBlbmNvZGVPY3QoY2tzdW0oYnVmKSwgNiksIDE0OClcblxuICByZXR1cm4gYnVmXG59XG5cbmV4cG9ydHMuZGVjb2RlID0gZnVuY3Rpb24gZGVjb2RlIChidWYsIGZpbGVuYW1lRW5jb2RpbmcsIGFsbG93VW5rbm93bkZvcm1hdCkge1xuICBsZXQgdHlwZWZsYWcgPSBidWZbMTU2XSA9PT0gMCA/IDAgOiBidWZbMTU2XSAtIFpFUk9fT0ZGU0VUXG5cbiAgbGV0IG5hbWUgPSBkZWNvZGVTdHIoYnVmLCAwLCAxMDAsIGZpbGVuYW1lRW5jb2RpbmcpXG4gIGNvbnN0IG1vZGUgPSBkZWNvZGVPY3QoYnVmLCAxMDAsIDgpXG4gIGNvbnN0IHVpZCA9IGRlY29kZU9jdChidWYsIDEwOCwgOClcbiAgY29uc3QgZ2lkID0gZGVjb2RlT2N0KGJ1ZiwgMTE2LCA4KVxuICBjb25zdCBzaXplID0gZGVjb2RlT2N0KGJ1ZiwgMTI0LCAxMilcbiAgY29uc3QgbXRpbWUgPSBkZWNvZGVPY3QoYnVmLCAxMzYsIDEyKVxuICBjb25zdCB0eXBlID0gdG9UeXBlKHR5cGVmbGFnKVxuICBjb25zdCBsaW5rbmFtZSA9IGJ1ZlsxNTddID09PSAwID8gbnVsbCA6IGRlY29kZVN0cihidWYsIDE1NywgMTAwLCBmaWxlbmFtZUVuY29kaW5nKVxuICBjb25zdCB1bmFtZSA9IGRlY29kZVN0cihidWYsIDI2NSwgMzIpXG4gIGNvbnN0IGduYW1lID0gZGVjb2RlU3RyKGJ1ZiwgMjk3LCAzMilcbiAgY29uc3QgZGV2bWFqb3IgPSBkZWNvZGVPY3QoYnVmLCAzMjksIDgpXG4gIGNvbnN0IGRldm1pbm9yID0gZGVjb2RlT2N0KGJ1ZiwgMzM3LCA4KVxuXG4gIGNvbnN0IGMgPSBja3N1bShidWYpXG5cbiAgLy8gY2hlY2tzdW0gaXMgc3RpbGwgaW5pdGlhbCB2YWx1ZSBpZiBoZWFkZXIgd2FzIG51bGwuXG4gIGlmIChjID09PSA4ICogMzIpIHJldHVybiBudWxsXG5cbiAgLy8gdmFsaWQgY2hlY2tzdW1cbiAgaWYgKGMgIT09IGRlY29kZU9jdChidWYsIDE0OCwgOCkpIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB0YXIgaGVhZGVyLiBNYXliZSB0aGUgdGFyIGlzIGNvcnJ1cHRlZCBvciBpdCBuZWVkcyB0byBiZSBndW56aXBwZWQ/JylcblxuICBpZiAoaXNVU1RBUihidWYpKSB7XG4gICAgLy8gdXN0YXIgKHBvc2l4KSBmb3JtYXQuXG4gICAgLy8gcHJlcGVuZCBwcmVmaXgsIGlmIHByZXNlbnQuXG4gICAgaWYgKGJ1ZlszNDVdKSBuYW1lID0gZGVjb2RlU3RyKGJ1ZiwgMzQ1LCAxNTUsIGZpbGVuYW1lRW5jb2RpbmcpICsgJy8nICsgbmFtZVxuICB9IGVsc2UgaWYgKGlzR05VKGJ1ZikpIHtcbiAgICAvLyAnZ251Jy8nb2xkZ251JyBmb3JtYXQuIFNpbWlsYXIgdG8gdXN0YXIsIGJ1dCBoYXMgc3VwcG9ydCBmb3IgaW5jcmVtZW50YWwgYW5kXG4gICAgLy8gbXVsdGktdm9sdW1lIHRhcmJhbGxzLlxuICB9IGVsc2Uge1xuICAgIGlmICghYWxsb3dVbmtub3duRm9ybWF0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdGFyIGhlYWRlcjogdW5rbm93biBmb3JtYXQuJylcbiAgICB9XG4gIH1cblxuICAvLyB0byBzdXBwb3J0IG9sZCB0YXIgdmVyc2lvbnMgdGhhdCB1c2UgdHJhaWxpbmcgLyB0byBpbmRpY2F0ZSBkaXJzXG4gIGlmICh0eXBlZmxhZyA9PT0gMCAmJiBuYW1lICYmIG5hbWVbbmFtZS5sZW5ndGggLSAxXSA9PT0gJy8nKSB0eXBlZmxhZyA9IDVcblxuICByZXR1cm4ge1xuICAgIG5hbWUsXG4gICAgbW9kZSxcbiAgICB1aWQsXG4gICAgZ2lkLFxuICAgIHNpemUsXG4gICAgbXRpbWU6IG5ldyBEYXRlKDEwMDAgKiBtdGltZSksXG4gICAgdHlwZSxcbiAgICBsaW5rbmFtZSxcbiAgICB1bmFtZSxcbiAgICBnbmFtZSxcbiAgICBkZXZtYWpvcixcbiAgICBkZXZtaW5vcixcbiAgICBwYXg6IG51bGxcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1VTVEFSIChidWYpIHtcbiAgcmV0dXJuIGI0YS5lcXVhbHMoVVNUQVJfTUFHSUMsIGJ1Zi5zdWJhcnJheShNQUdJQ19PRkZTRVQsIE1BR0lDX09GRlNFVCArIDYpKVxufVxuXG5mdW5jdGlvbiBpc0dOVSAoYnVmKSB7XG4gIHJldHVybiBiNGEuZXF1YWxzKEdOVV9NQUdJQywgYnVmLnN1YmFycmF5KE1BR0lDX09GRlNFVCwgTUFHSUNfT0ZGU0VUICsgNikpICYmXG4gICAgYjRhLmVxdWFscyhHTlVfVkVSLCBidWYuc3ViYXJyYXkoVkVSU0lPTl9PRkZTRVQsIFZFUlNJT05fT0ZGU0VUICsgMikpXG59XG5cbmZ1bmN0aW9uIGNsYW1wIChpbmRleCwgbGVuLCBkZWZhdWx0VmFsdWUpIHtcbiAgaWYgKHR5cGVvZiBpbmRleCAhPT0gJ251bWJlcicpIHJldHVybiBkZWZhdWx0VmFsdWVcbiAgaW5kZXggPSB+fmluZGV4IC8vIENvZXJjZSB0byBpbnRlZ2VyLlxuICBpZiAoaW5kZXggPj0gbGVuKSByZXR1cm4gbGVuXG4gIGlmIChpbmRleCA+PSAwKSByZXR1cm4gaW5kZXhcbiAgaW5kZXggKz0gbGVuXG4gIGlmIChpbmRleCA+PSAwKSByZXR1cm4gaW5kZXhcbiAgcmV0dXJuIDBcbn1cblxuZnVuY3Rpb24gdG9UeXBlIChmbGFnKSB7XG4gIHN3aXRjaCAoZmxhZykge1xuICAgIGNhc2UgMDpcbiAgICAgIHJldHVybiAnZmlsZSdcbiAgICBjYXNlIDE6XG4gICAgICByZXR1cm4gJ2xpbmsnXG4gICAgY2FzZSAyOlxuICAgICAgcmV0dXJuICdzeW1saW5rJ1xuICAgIGNhc2UgMzpcbiAgICAgIHJldHVybiAnY2hhcmFjdGVyLWRldmljZSdcbiAgICBjYXNlIDQ6XG4gICAgICByZXR1cm4gJ2Jsb2NrLWRldmljZSdcbiAgICBjYXNlIDU6XG4gICAgICByZXR1cm4gJ2RpcmVjdG9yeSdcbiAgICBjYXNlIDY6XG4gICAgICByZXR1cm4gJ2ZpZm8nXG4gICAgY2FzZSA3OlxuICAgICAgcmV0dXJuICdjb250aWd1b3VzLWZpbGUnXG4gICAgY2FzZSA3MjpcbiAgICAgIHJldHVybiAncGF4LWhlYWRlcidcbiAgICBjYXNlIDU1OlxuICAgICAgcmV0dXJuICdwYXgtZ2xvYmFsLWhlYWRlcidcbiAgICBjYXNlIDI3OlxuICAgICAgcmV0dXJuICdnbnUtbG9uZy1saW5rLXBhdGgnXG4gICAgY2FzZSAyODpcbiAgICBjYXNlIDMwOlxuICAgICAgcmV0dXJuICdnbnUtbG9uZy1wYXRoJ1xuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuZnVuY3Rpb24gdG9UeXBlZmxhZyAoZmxhZykge1xuICBzd2l0Y2ggKGZsYWcpIHtcbiAgICBjYXNlICdmaWxlJzpcbiAgICAgIHJldHVybiAwXG4gICAgY2FzZSAnbGluayc6XG4gICAgICByZXR1cm4gMVxuICAgIGNhc2UgJ3N5bWxpbmsnOlxuICAgICAgcmV0dXJuIDJcbiAgICBjYXNlICdjaGFyYWN0ZXItZGV2aWNlJzpcbiAgICAgIHJldHVybiAzXG4gICAgY2FzZSAnYmxvY2stZGV2aWNlJzpcbiAgICAgIHJldHVybiA0XG4gICAgY2FzZSAnZGlyZWN0b3J5JzpcbiAgICAgIHJldHVybiA1XG4gICAgY2FzZSAnZmlmbyc6XG4gICAgICByZXR1cm4gNlxuICAgIGNhc2UgJ2NvbnRpZ3VvdXMtZmlsZSc6XG4gICAgICByZXR1cm4gN1xuICAgIGNhc2UgJ3BheC1oZWFkZXInOlxuICAgICAgcmV0dXJuIDcyXG4gIH1cblxuICByZXR1cm4gMFxufVxuXG5mdW5jdGlvbiBpbmRleE9mIChibG9jaywgbnVtLCBvZmZzZXQsIGVuZCkge1xuICBmb3IgKDsgb2Zmc2V0IDwgZW5kOyBvZmZzZXQrKykge1xuICAgIGlmIChibG9ja1tvZmZzZXRdID09PSBudW0pIHJldHVybiBvZmZzZXRcbiAgfVxuICByZXR1cm4gZW5kXG59XG5cbmZ1bmN0aW9uIGNrc3VtIChibG9jaykge1xuICBsZXQgc3VtID0gOCAqIDMyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMTQ4OyBpKyspIHN1bSArPSBibG9ja1tpXVxuICBmb3IgKGxldCBqID0gMTU2OyBqIDwgNTEyOyBqKyspIHN1bSArPSBibG9ja1tqXVxuICByZXR1cm4gc3VtXG59XG5cbmZ1bmN0aW9uIGVuY29kZU9jdCAodmFsLCBuKSB7XG4gIHZhbCA9IHZhbC50b1N0cmluZyg4KVxuICBpZiAodmFsLmxlbmd0aCA+IG4pIHJldHVybiBTRVZFTlMuc2xpY2UoMCwgbikgKyAnICdcbiAgcmV0dXJuIFpFUk9TLnNsaWNlKDAsIG4gLSB2YWwubGVuZ3RoKSArIHZhbCArICcgJ1xufVxuXG5mdW5jdGlvbiBlbmNvZGVTaXplQmluIChudW0sIGJ1Ziwgb2ZmKSB7XG4gIGJ1ZltvZmZdID0gMHg4MFxuICBmb3IgKGxldCBpID0gMTE7IGkgPiAwOyBpLS0pIHtcbiAgICBidWZbb2ZmICsgaV0gPSBudW0gJiAweGZmXG4gICAgbnVtID0gTWF0aC5mbG9vcihudW0gLyAweDEwMClcbiAgfVxufVxuXG5mdW5jdGlvbiBlbmNvZGVTaXplIChudW0sIGJ1Ziwgb2ZmKSB7XG4gIGlmIChudW0udG9TdHJpbmcoOCkubGVuZ3RoID4gMTEpIHtcbiAgICBlbmNvZGVTaXplQmluKG51bSwgYnVmLCBvZmYpXG4gIH0gZWxzZSB7XG4gICAgYjRhLndyaXRlKGJ1ZiwgZW5jb2RlT2N0KG51bSwgMTEpLCBvZmYpXG4gIH1cbn1cblxuLyogQ29waWVkIGZyb20gdGhlIG5vZGUtdGFyIHJlcG8gYW5kIG1vZGlmaWVkIHRvIG1lZXRcbiAqIHRhci1zdHJlYW0gY29kaW5nIHN0YW5kYXJkLlxuICpcbiAqIFNvdXJjZTogaHR0cHM6Ly9naXRodWIuY29tL25wbS9ub2RlLXRhci9ibG9iLzUxYjY2MjdhMWYzNTdkMmViNDMzZTczNzhlNWYwNWU4M2I3YWE2Y2QvbGliL2hlYWRlci5qcyNMMzQ5XG4gKi9cbmZ1bmN0aW9uIHBhcnNlMjU2IChidWYpIHtcbiAgLy8gZmlyc3QgYnl0ZSBNVVNUIGJlIGVpdGhlciA4MCBvciBGRlxuICAvLyA4MCBmb3IgcG9zaXRpdmUsIEZGIGZvciAyJ3MgY29tcFxuICBsZXQgcG9zaXRpdmVcbiAgaWYgKGJ1ZlswXSA9PT0gMHg4MCkgcG9zaXRpdmUgPSB0cnVlXG4gIGVsc2UgaWYgKGJ1ZlswXSA9PT0gMHhGRikgcG9zaXRpdmUgPSBmYWxzZVxuICBlbHNlIHJldHVybiBudWxsXG5cbiAgLy8gYnVpbGQgdXAgYSBiYXNlLTI1NiB0dXBsZSBmcm9tIHRoZSBsZWFzdCBzaWcgdG8gdGhlIGhpZ2hlc3RcbiAgY29uc3QgdHVwbGUgPSBbXVxuICBsZXQgaVxuICBmb3IgKGkgPSBidWYubGVuZ3RoIC0gMTsgaSA+IDA7IGktLSkge1xuICAgIGNvbnN0IGJ5dGUgPSBidWZbaV1cbiAgICBpZiAocG9zaXRpdmUpIHR1cGxlLnB1c2goYnl0ZSlcbiAgICBlbHNlIHR1cGxlLnB1c2goMHhGRiAtIGJ5dGUpXG4gIH1cblxuICBsZXQgc3VtID0gMFxuICBjb25zdCBsID0gdHVwbGUubGVuZ3RoXG4gIGZvciAoaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICBzdW0gKz0gdHVwbGVbaV0gKiBNYXRoLnBvdygyNTYsIGkpXG4gIH1cblxuICByZXR1cm4gcG9zaXRpdmUgPyBzdW0gOiAtMSAqIHN1bVxufVxuXG5mdW5jdGlvbiBkZWNvZGVPY3QgKHZhbCwgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgdmFsID0gdmFsLnN1YmFycmF5KG9mZnNldCwgb2Zmc2V0ICsgbGVuZ3RoKVxuICBvZmZzZXQgPSAwXG5cbiAgLy8gSWYgcHJlZml4ZWQgd2l0aCAweDgwIHRoZW4gcGFyc2UgYXMgYSBiYXNlLTI1NiBpbnRlZ2VyXG4gIGlmICh2YWxbb2Zmc2V0XSAmIDB4ODApIHtcbiAgICByZXR1cm4gcGFyc2UyNTYodmFsKVxuICB9IGVsc2Uge1xuICAgIC8vIE9sZGVyIHZlcnNpb25zIG9mIHRhciBjYW4gcHJlZml4IHdpdGggc3BhY2VzXG4gICAgd2hpbGUgKG9mZnNldCA8IHZhbC5sZW5ndGggJiYgdmFsW29mZnNldF0gPT09IDMyKSBvZmZzZXQrK1xuICAgIGNvbnN0IGVuZCA9IGNsYW1wKGluZGV4T2YodmFsLCAzMiwgb2Zmc2V0LCB2YWwubGVuZ3RoKSwgdmFsLmxlbmd0aCwgdmFsLmxlbmd0aClcbiAgICB3aGlsZSAob2Zmc2V0IDwgZW5kICYmIHZhbFtvZmZzZXRdID09PSAwKSBvZmZzZXQrK1xuICAgIGlmIChlbmQgPT09IG9mZnNldCkgcmV0dXJuIDBcbiAgICByZXR1cm4gcGFyc2VJbnQoYjRhLnRvU3RyaW5nKHZhbC5zdWJhcnJheShvZmZzZXQsIGVuZCkpLCA4KVxuICB9XG59XG5cbmZ1bmN0aW9uIGRlY29kZVN0ciAodmFsLCBvZmZzZXQsIGxlbmd0aCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGI0YS50b1N0cmluZyh2YWwuc3ViYXJyYXkob2Zmc2V0LCBpbmRleE9mKHZhbCwgMCwgb2Zmc2V0LCBvZmZzZXQgKyBsZW5ndGgpKSwgZW5jb2RpbmcpXG59XG5cbmZ1bmN0aW9uIGFkZExlbmd0aCAoc3RyKSB7XG4gIGNvbnN0IGxlbiA9IGI0YS5ieXRlTGVuZ3RoKHN0cilcbiAgbGV0IGRpZ2l0cyA9IE1hdGguZmxvb3IoTWF0aC5sb2cobGVuKSAvIE1hdGgubG9nKDEwKSkgKyAxXG4gIGlmIChsZW4gKyBkaWdpdHMgPj0gTWF0aC5wb3coMTAsIGRpZ2l0cykpIGRpZ2l0cysrXG5cbiAgcmV0dXJuIChsZW4gKyBkaWdpdHMpICsgc3RyXG59XG4iLAogICAgImNvbnN0IHsgV3JpdGFibGUsIFJlYWRhYmxlLCBnZXRTdHJlYW1FcnJvciB9ID0gcmVxdWlyZSgnc3RyZWFteCcpXG5jb25zdCBGSUZPID0gcmVxdWlyZSgnZmFzdC1maWZvJylcbmNvbnN0IGI0YSA9IHJlcXVpcmUoJ2I0YScpXG5jb25zdCBoZWFkZXJzID0gcmVxdWlyZSgnLi9oZWFkZXJzJylcblxuY29uc3QgRU1QVFkgPSBiNGEuYWxsb2MoMClcblxuY2xhc3MgQnVmZmVyTGlzdCB7XG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICB0aGlzLmJ1ZmZlcmVkID0gMFxuICAgIHRoaXMuc2hpZnRlZCA9IDBcbiAgICB0aGlzLnF1ZXVlID0gbmV3IEZJRk8oKVxuXG4gICAgdGhpcy5fb2Zmc2V0ID0gMFxuICB9XG5cbiAgcHVzaCAoYnVmZmVyKSB7XG4gICAgdGhpcy5idWZmZXJlZCArPSBidWZmZXIuYnl0ZUxlbmd0aFxuICAgIHRoaXMucXVldWUucHVzaChidWZmZXIpXG4gIH1cblxuICBzaGlmdEZpcnN0IChzaXplKSB7XG4gICAgcmV0dXJuIHRoaXMuX2J1ZmZlcmVkID09PSAwID8gbnVsbCA6IHRoaXMuX25leHQoc2l6ZSlcbiAgfVxuXG4gIHNoaWZ0IChzaXplKSB7XG4gICAgaWYgKHNpemUgPiB0aGlzLmJ1ZmZlcmVkKSByZXR1cm4gbnVsbFxuICAgIGlmIChzaXplID09PSAwKSByZXR1cm4gRU1QVFlcblxuICAgIGxldCBjaHVuayA9IHRoaXMuX25leHQoc2l6ZSlcblxuICAgIGlmIChzaXplID09PSBjaHVuay5ieXRlTGVuZ3RoKSByZXR1cm4gY2h1bmsgLy8gbGlrZWx5IGNhc2VcblxuICAgIGNvbnN0IGNodW5rcyA9IFtjaHVua11cblxuICAgIHdoaWxlICgoc2l6ZSAtPSBjaHVuay5ieXRlTGVuZ3RoKSA+IDApIHtcbiAgICAgIGNodW5rID0gdGhpcy5fbmV4dChzaXplKVxuICAgICAgY2h1bmtzLnB1c2goY2h1bmspXG4gICAgfVxuXG4gICAgcmV0dXJuIGI0YS5jb25jYXQoY2h1bmtzKVxuICB9XG5cbiAgX25leHQgKHNpemUpIHtcbiAgICBjb25zdCBidWYgPSB0aGlzLnF1ZXVlLnBlZWsoKVxuICAgIGNvbnN0IHJlbSA9IGJ1Zi5ieXRlTGVuZ3RoIC0gdGhpcy5fb2Zmc2V0XG5cbiAgICBpZiAoc2l6ZSA+PSByZW0pIHtcbiAgICAgIGNvbnN0IHN1YiA9IHRoaXMuX29mZnNldCA/IGJ1Zi5zdWJhcnJheSh0aGlzLl9vZmZzZXQsIGJ1Zi5ieXRlTGVuZ3RoKSA6IGJ1ZlxuICAgICAgdGhpcy5xdWV1ZS5zaGlmdCgpXG4gICAgICB0aGlzLl9vZmZzZXQgPSAwXG4gICAgICB0aGlzLmJ1ZmZlcmVkIC09IHJlbVxuICAgICAgdGhpcy5zaGlmdGVkICs9IHJlbVxuICAgICAgcmV0dXJuIHN1YlxuICAgIH1cblxuICAgIHRoaXMuYnVmZmVyZWQgLT0gc2l6ZVxuICAgIHRoaXMuc2hpZnRlZCArPSBzaXplXG5cbiAgICByZXR1cm4gYnVmLnN1YmFycmF5KHRoaXMuX29mZnNldCwgKHRoaXMuX29mZnNldCArPSBzaXplKSlcbiAgfVxufVxuXG5jbGFzcyBTb3VyY2UgZXh0ZW5kcyBSZWFkYWJsZSB7XG4gIGNvbnN0cnVjdG9yIChzZWxmLCBoZWFkZXIsIG9mZnNldCkge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXMuaGVhZGVyID0gaGVhZGVyXG4gICAgdGhpcy5vZmZzZXQgPSBvZmZzZXRcblxuICAgIHRoaXMuX3BhcmVudCA9IHNlbGZcbiAgfVxuXG4gIF9yZWFkIChjYikge1xuICAgIGlmICh0aGlzLmhlYWRlci5zaXplID09PSAwKSB7XG4gICAgICB0aGlzLnB1c2gobnVsbClcbiAgICB9XG4gICAgaWYgKHRoaXMuX3BhcmVudC5fc3RyZWFtID09PSB0aGlzKSB7XG4gICAgICB0aGlzLl9wYXJlbnQuX3VwZGF0ZSgpXG4gICAgfVxuICAgIGNiKG51bGwpXG4gIH1cblxuICBfcHJlZGVzdHJveSAoKSB7XG4gICAgdGhpcy5fcGFyZW50LmRlc3Ryb3koZ2V0U3RyZWFtRXJyb3IodGhpcykpXG4gIH1cblxuICBfZGV0YWNoICgpIHtcbiAgICBpZiAodGhpcy5fcGFyZW50Ll9zdHJlYW0gPT09IHRoaXMpIHtcbiAgICAgIHRoaXMuX3BhcmVudC5fc3RyZWFtID0gbnVsbFxuICAgICAgdGhpcy5fcGFyZW50Ll9taXNzaW5nID0gb3ZlcmZsb3codGhpcy5oZWFkZXIuc2l6ZSlcbiAgICAgIHRoaXMuX3BhcmVudC5fdXBkYXRlKClcbiAgICB9XG4gIH1cblxuICBfZGVzdHJveSAoY2IpIHtcbiAgICB0aGlzLl9kZXRhY2goKVxuICAgIGNiKG51bGwpXG4gIH1cbn1cblxuY2xhc3MgRXh0cmFjdCBleHRlbmRzIFdyaXRhYmxlIHtcbiAgY29uc3RydWN0b3IgKG9wdHMpIHtcbiAgICBzdXBlcihvcHRzKVxuXG4gICAgaWYgKCFvcHRzKSBvcHRzID0ge31cblxuICAgIHRoaXMuX2J1ZmZlciA9IG5ldyBCdWZmZXJMaXN0KClcbiAgICB0aGlzLl9vZmZzZXQgPSAwXG4gICAgdGhpcy5faGVhZGVyID0gbnVsbFxuICAgIHRoaXMuX3N0cmVhbSA9IG51bGxcbiAgICB0aGlzLl9taXNzaW5nID0gMFxuICAgIHRoaXMuX2xvbmdIZWFkZXIgPSBmYWxzZVxuICAgIHRoaXMuX2NhbGxiYWNrID0gbm9vcFxuICAgIHRoaXMuX2xvY2tlZCA9IGZhbHNlXG4gICAgdGhpcy5fZmluaXNoZWQgPSBmYWxzZVxuICAgIHRoaXMuX3BheCA9IG51bGxcbiAgICB0aGlzLl9wYXhHbG9iYWwgPSBudWxsXG4gICAgdGhpcy5fZ251TG9uZ1BhdGggPSBudWxsXG4gICAgdGhpcy5fZ251TG9uZ0xpbmtQYXRoID0gbnVsbFxuICAgIHRoaXMuX2ZpbGVuYW1lRW5jb2RpbmcgPSBvcHRzLmZpbGVuYW1lRW5jb2RpbmcgfHwgJ3V0Zi04J1xuICAgIHRoaXMuX2FsbG93VW5rbm93bkZvcm1hdCA9ICEhb3B0cy5hbGxvd1Vua25vd25Gb3JtYXRcbiAgICB0aGlzLl91bmxvY2tCb3VuZCA9IHRoaXMuX3VubG9jay5iaW5kKHRoaXMpXG4gIH1cblxuICBfdW5sb2NrIChlcnIpIHtcbiAgICB0aGlzLl9sb2NrZWQgPSBmYWxzZVxuXG4gICAgaWYgKGVycikge1xuICAgICAgdGhpcy5kZXN0cm95KGVycilcbiAgICAgIHRoaXMuX2NvbnRpbnVlV3JpdGUoZXJyKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5fdXBkYXRlKClcbiAgfVxuXG4gIF9jb25zdW1lSGVhZGVyICgpIHtcbiAgICBpZiAodGhpcy5fbG9ja2VkKSByZXR1cm4gZmFsc2VcblxuICAgIHRoaXMuX29mZnNldCA9IHRoaXMuX2J1ZmZlci5zaGlmdGVkXG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5faGVhZGVyID0gaGVhZGVycy5kZWNvZGUodGhpcy5fYnVmZmVyLnNoaWZ0KDUxMiksIHRoaXMuX2ZpbGVuYW1lRW5jb2RpbmcsIHRoaXMuX2FsbG93VW5rbm93bkZvcm1hdClcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuX2NvbnRpbnVlV3JpdGUoZXJyKVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9oZWFkZXIpIHJldHVybiB0cnVlXG5cbiAgICBzd2l0Y2ggKHRoaXMuX2hlYWRlci50eXBlKSB7XG4gICAgICBjYXNlICdnbnUtbG9uZy1wYXRoJzpcbiAgICAgIGNhc2UgJ2dudS1sb25nLWxpbmstcGF0aCc6XG4gICAgICBjYXNlICdwYXgtZ2xvYmFsLWhlYWRlcic6XG4gICAgICBjYXNlICdwYXgtaGVhZGVyJzpcbiAgICAgICAgdGhpcy5fbG9uZ0hlYWRlciA9IHRydWVcbiAgICAgICAgdGhpcy5fbWlzc2luZyA9IHRoaXMuX2hlYWRlci5zaXplXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgdGhpcy5fbG9ja2VkID0gdHJ1ZVxuICAgIHRoaXMuX2FwcGx5TG9uZ0hlYWRlcnMoKVxuXG4gICAgaWYgKHRoaXMuX2hlYWRlci5zaXplID09PSAwIHx8IHRoaXMuX2hlYWRlci50eXBlID09PSAnZGlyZWN0b3J5Jykge1xuICAgICAgdGhpcy5lbWl0KCdlbnRyeScsIHRoaXMuX2hlYWRlciwgdGhpcy5fY3JlYXRlU3RyZWFtKCksIHRoaXMuX3VubG9ja0JvdW5kKVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICB0aGlzLl9zdHJlYW0gPSB0aGlzLl9jcmVhdGVTdHJlYW0oKVxuICAgIHRoaXMuX21pc3NpbmcgPSB0aGlzLl9oZWFkZXIuc2l6ZVxuXG4gICAgdGhpcy5lbWl0KCdlbnRyeScsIHRoaXMuX2hlYWRlciwgdGhpcy5fc3RyZWFtLCB0aGlzLl91bmxvY2tCb3VuZClcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgX2FwcGx5TG9uZ0hlYWRlcnMgKCkge1xuICAgIGlmICh0aGlzLl9nbnVMb25nUGF0aCkge1xuICAgICAgdGhpcy5faGVhZGVyLm5hbWUgPSB0aGlzLl9nbnVMb25nUGF0aFxuICAgICAgdGhpcy5fZ251TG9uZ1BhdGggPSBudWxsXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2dudUxvbmdMaW5rUGF0aCkge1xuICAgICAgdGhpcy5faGVhZGVyLmxpbmtuYW1lID0gdGhpcy5fZ251TG9uZ0xpbmtQYXRoXG4gICAgICB0aGlzLl9nbnVMb25nTGlua1BhdGggPSBudWxsXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3BheCkge1xuICAgICAgaWYgKHRoaXMuX3BheC5wYXRoKSB0aGlzLl9oZWFkZXIubmFtZSA9IHRoaXMuX3BheC5wYXRoXG4gICAgICBpZiAodGhpcy5fcGF4LmxpbmtwYXRoKSB0aGlzLl9oZWFkZXIubGlua25hbWUgPSB0aGlzLl9wYXgubGlua3BhdGhcbiAgICAgIGlmICh0aGlzLl9wYXguc2l6ZSkgdGhpcy5faGVhZGVyLnNpemUgPSBwYXJzZUludCh0aGlzLl9wYXguc2l6ZSwgMTApXG4gICAgICB0aGlzLl9oZWFkZXIucGF4ID0gdGhpcy5fcGF4XG4gICAgICB0aGlzLl9wYXggPSBudWxsXG4gICAgfVxuICB9XG5cbiAgX2RlY29kZUxvbmdIZWFkZXIgKGJ1Zikge1xuICAgIHN3aXRjaCAodGhpcy5faGVhZGVyLnR5cGUpIHtcbiAgICAgIGNhc2UgJ2dudS1sb25nLXBhdGgnOlxuICAgICAgICB0aGlzLl9nbnVMb25nUGF0aCA9IGhlYWRlcnMuZGVjb2RlTG9uZ1BhdGgoYnVmLCB0aGlzLl9maWxlbmFtZUVuY29kaW5nKVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnZ251LWxvbmctbGluay1wYXRoJzpcbiAgICAgICAgdGhpcy5fZ251TG9uZ0xpbmtQYXRoID0gaGVhZGVycy5kZWNvZGVMb25nUGF0aChidWYsIHRoaXMuX2ZpbGVuYW1lRW5jb2RpbmcpXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdwYXgtZ2xvYmFsLWhlYWRlcic6XG4gICAgICAgIHRoaXMuX3BheEdsb2JhbCA9IGhlYWRlcnMuZGVjb2RlUGF4KGJ1ZilcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ3BheC1oZWFkZXInOlxuICAgICAgICB0aGlzLl9wYXggPSB0aGlzLl9wYXhHbG9iYWwgPT09IG51bGxcbiAgICAgICAgICA/IGhlYWRlcnMuZGVjb2RlUGF4KGJ1ZilcbiAgICAgICAgICA6IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX3BheEdsb2JhbCwgaGVhZGVycy5kZWNvZGVQYXgoYnVmKSlcbiAgICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBfY29uc3VtZUxvbmdIZWFkZXIgKCkge1xuICAgIHRoaXMuX2xvbmdIZWFkZXIgPSBmYWxzZVxuICAgIHRoaXMuX21pc3NpbmcgPSBvdmVyZmxvdyh0aGlzLl9oZWFkZXIuc2l6ZSlcblxuICAgIGNvbnN0IGJ1ZiA9IHRoaXMuX2J1ZmZlci5zaGlmdCh0aGlzLl9oZWFkZXIuc2l6ZSlcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLl9kZWNvZGVMb25nSGVhZGVyKGJ1ZilcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuX2NvbnRpbnVlV3JpdGUoZXJyKVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIF9jb25zdW1lU3RyZWFtICgpIHtcbiAgICBjb25zdCBidWYgPSB0aGlzLl9idWZmZXIuc2hpZnRGaXJzdCh0aGlzLl9taXNzaW5nKVxuICAgIGlmIChidWYgPT09IG51bGwpIHJldHVybiBmYWxzZVxuXG4gICAgdGhpcy5fbWlzc2luZyAtPSBidWYuYnl0ZUxlbmd0aFxuICAgIGNvbnN0IGRyYWluZWQgPSB0aGlzLl9zdHJlYW0ucHVzaChidWYpXG5cbiAgICBpZiAodGhpcy5fbWlzc2luZyA9PT0gMCkge1xuICAgICAgdGhpcy5fc3RyZWFtLnB1c2gobnVsbClcbiAgICAgIGlmIChkcmFpbmVkKSB0aGlzLl9zdHJlYW0uX2RldGFjaCgpXG4gICAgICByZXR1cm4gZHJhaW5lZCAmJiB0aGlzLl9sb2NrZWQgPT09IGZhbHNlXG4gICAgfVxuXG4gICAgcmV0dXJuIGRyYWluZWRcbiAgfVxuXG4gIF9jcmVhdGVTdHJlYW0gKCkge1xuICAgIHJldHVybiBuZXcgU291cmNlKHRoaXMsIHRoaXMuX2hlYWRlciwgdGhpcy5fb2Zmc2V0KVxuICB9XG5cbiAgX3VwZGF0ZSAoKSB7XG4gICAgd2hpbGUgKHRoaXMuX2J1ZmZlci5idWZmZXJlZCA+IDAgJiYgIXRoaXMuZGVzdHJveWluZykge1xuICAgICAgaWYgKHRoaXMuX21pc3NpbmcgPiAwKSB7XG4gICAgICAgIGlmICh0aGlzLl9zdHJlYW0gIT09IG51bGwpIHtcbiAgICAgICAgICBpZiAodGhpcy5fY29uc3VtZVN0cmVhbSgpID09PSBmYWxzZSkgcmV0dXJuXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9sb25nSGVhZGVyID09PSB0cnVlKSB7XG4gICAgICAgICAgaWYgKHRoaXMuX21pc3NpbmcgPiB0aGlzLl9idWZmZXIuYnVmZmVyZWQpIGJyZWFrXG4gICAgICAgICAgaWYgKHRoaXMuX2NvbnN1bWVMb25nSGVhZGVyKCkgPT09IGZhbHNlKSByZXR1cm4gZmFsc2VcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaWdub3JlID0gdGhpcy5fYnVmZmVyLnNoaWZ0Rmlyc3QodGhpcy5fbWlzc2luZylcbiAgICAgICAgaWYgKGlnbm9yZSAhPT0gbnVsbCkgdGhpcy5fbWlzc2luZyAtPSBpZ25vcmUuYnl0ZUxlbmd0aFxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fYnVmZmVyLmJ1ZmZlcmVkIDwgNTEyKSBicmVha1xuICAgICAgaWYgKHRoaXMuX3N0cmVhbSAhPT0gbnVsbCB8fCB0aGlzLl9jb25zdW1lSGVhZGVyKCkgPT09IGZhbHNlKSByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9jb250aW51ZVdyaXRlKG51bGwpXG4gIH1cblxuICBfY29udGludWVXcml0ZSAoZXJyKSB7XG4gICAgY29uc3QgY2IgPSB0aGlzLl9jYWxsYmFja1xuICAgIHRoaXMuX2NhbGxiYWNrID0gbm9vcFxuICAgIGNiKGVycilcbiAgfVxuXG4gIF93cml0ZSAoZGF0YSwgY2IpIHtcbiAgICB0aGlzLl9jYWxsYmFjayA9IGNiXG4gICAgdGhpcy5fYnVmZmVyLnB1c2goZGF0YSlcbiAgICB0aGlzLl91cGRhdGUoKVxuICB9XG5cbiAgX2ZpbmFsIChjYikge1xuICAgIHRoaXMuX2ZpbmlzaGVkID0gdGhpcy5fbWlzc2luZyA9PT0gMCAmJiB0aGlzLl9idWZmZXIuYnVmZmVyZWQgPT09IDBcbiAgICBjYih0aGlzLl9maW5pc2hlZCA/IG51bGwgOiBuZXcgRXJyb3IoJ1VuZXhwZWN0ZWQgZW5kIG9mIGRhdGEnKSlcbiAgfVxuXG4gIF9wcmVkZXN0cm95ICgpIHtcbiAgICB0aGlzLl9jb250aW51ZVdyaXRlKG51bGwpXG4gIH1cblxuICBfZGVzdHJveSAoY2IpIHtcbiAgICBpZiAodGhpcy5fc3RyZWFtKSB0aGlzLl9zdHJlYW0uZGVzdHJveShnZXRTdHJlYW1FcnJvcih0aGlzKSlcbiAgICBjYihudWxsKVxuICB9XG5cbiAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSAoKSB7XG4gICAgbGV0IGVycm9yID0gbnVsbFxuXG4gICAgbGV0IHByb21pc2VSZXNvbHZlID0gbnVsbFxuICAgIGxldCBwcm9taXNlUmVqZWN0ID0gbnVsbFxuXG4gICAgbGV0IGVudHJ5U3RyZWFtID0gbnVsbFxuICAgIGxldCBlbnRyeUNhbGxiYWNrID0gbnVsbFxuXG4gICAgY29uc3QgZXh0cmFjdCA9IHRoaXNcblxuICAgIHRoaXMub24oJ2VudHJ5Jywgb25lbnRyeSlcbiAgICB0aGlzLm9uKCdlcnJvcicsIChlcnIpID0+IHsgZXJyb3IgPSBlcnIgfSlcbiAgICB0aGlzLm9uKCdjbG9zZScsIG9uY2xvc2UpXG5cbiAgICByZXR1cm4ge1xuICAgICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzXG4gICAgICB9LFxuICAgICAgbmV4dCAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShvbm5leHQpXG4gICAgICB9LFxuICAgICAgcmV0dXJuICgpIHtcbiAgICAgICAgcmV0dXJuIGRlc3Ryb3kobnVsbClcbiAgICAgIH0sXG4gICAgICB0aHJvdyAoZXJyKSB7XG4gICAgICAgIHJldHVybiBkZXN0cm95KGVycilcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb25zdW1lQ2FsbGJhY2sgKGVycikge1xuICAgICAgaWYgKCFlbnRyeUNhbGxiYWNrKSByZXR1cm5cbiAgICAgIGNvbnN0IGNiID0gZW50cnlDYWxsYmFja1xuICAgICAgZW50cnlDYWxsYmFjayA9IG51bGxcbiAgICAgIGNiKGVycilcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvbm5leHQgKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoZXJyb3IpXG4gICAgICB9XG5cbiAgICAgIGlmIChlbnRyeVN0cmVhbSkge1xuICAgICAgICByZXNvbHZlKHsgdmFsdWU6IGVudHJ5U3RyZWFtLCBkb25lOiBmYWxzZSB9KVxuICAgICAgICBlbnRyeVN0cmVhbSA9IG51bGxcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHByb21pc2VSZXNvbHZlID0gcmVzb2x2ZVxuICAgICAgcHJvbWlzZVJlamVjdCA9IHJlamVjdFxuXG4gICAgICBjb25zdW1lQ2FsbGJhY2sobnVsbClcblxuICAgICAgaWYgKGV4dHJhY3QuX2ZpbmlzaGVkICYmIHByb21pc2VSZXNvbHZlKSB7XG4gICAgICAgIHByb21pc2VSZXNvbHZlKHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9KVxuICAgICAgICBwcm9taXNlUmVzb2x2ZSA9IHByb21pc2VSZWplY3QgPSBudWxsXG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25lbnRyeSAoaGVhZGVyLCBzdHJlYW0sIGNhbGxiYWNrKSB7XG4gICAgICBlbnRyeUNhbGxiYWNrID0gY2FsbGJhY2tcbiAgICAgIHN0cmVhbS5vbignZXJyb3InLCBub29wKSAvLyBubyB3YXkgYXJvdW5kIHRoaXMgZHVlIHRvIHRpY2sgc2lsbHluZXNzXG5cbiAgICAgIGlmIChwcm9taXNlUmVzb2x2ZSkge1xuICAgICAgICBwcm9taXNlUmVzb2x2ZSh7IHZhbHVlOiBzdHJlYW0sIGRvbmU6IGZhbHNlIH0pXG4gICAgICAgIHByb21pc2VSZXNvbHZlID0gcHJvbWlzZVJlamVjdCA9IG51bGxcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVudHJ5U3RyZWFtID0gc3RyZWFtXG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25jbG9zZSAoKSB7XG4gICAgICBjb25zdW1lQ2FsbGJhY2soZXJyb3IpXG4gICAgICBpZiAoIXByb21pc2VSZXNvbHZlKSByZXR1cm5cbiAgICAgIGlmIChlcnJvcikgcHJvbWlzZVJlamVjdChlcnJvcilcbiAgICAgIGVsc2UgcHJvbWlzZVJlc29sdmUoeyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH0pXG4gICAgICBwcm9taXNlUmVzb2x2ZSA9IHByb21pc2VSZWplY3QgPSBudWxsXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVzdHJveSAoZXJyKSB7XG4gICAgICBleHRyYWN0LmRlc3Ryb3koZXJyKVxuICAgICAgY29uc3VtZUNhbGxiYWNrKGVycilcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGlmIChleHRyYWN0LmRlc3Ryb3llZCkgcmV0dXJuIHJlc29sdmUoeyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH0pXG4gICAgICAgIGV4dHJhY3Qub25jZSgnY2xvc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKGVycikgcmVqZWN0KGVycilcbiAgICAgICAgICBlbHNlIHJlc29sdmUoeyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH0pXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGV4dHJhY3QgKG9wdHMpIHtcbiAgcmV0dXJuIG5ldyBFeHRyYWN0KG9wdHMpXG59XG5cbmZ1bmN0aW9uIG5vb3AgKCkge31cblxuZnVuY3Rpb24gb3ZlcmZsb3cgKHNpemUpIHtcbiAgc2l6ZSAmPSA1MTFcbiAgcmV0dXJuIHNpemUgJiYgNTEyIC0gc2l6ZVxufVxuIiwKICAgICJjb25zdCBjb25zdGFudHMgPSB7IC8vIGp1c3QgZm9yIGVudnMgd2l0aG91dCBmc1xuICBTX0lGTVQ6IDYxNDQwLFxuICBTX0lGRElSOiAxNjM4NCxcbiAgU19JRkNIUjogODE5MixcbiAgU19JRkJMSzogMjQ1NzYsXG4gIFNfSUZJRk86IDQwOTYsXG4gIFNfSUZMTks6IDQwOTYwXG59XG5cbnRyeSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnZnMnKS5jb25zdGFudHMgfHwgY29uc3RhbnRzXG59IGNhdGNoIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBjb25zdGFudHNcbn1cbiIsCiAgICAiY29uc3QgeyBSZWFkYWJsZSwgV3JpdGFibGUsIGdldFN0cmVhbUVycm9yIH0gPSByZXF1aXJlKCdzdHJlYW14JylcbmNvbnN0IGI0YSA9IHJlcXVpcmUoJ2I0YScpXG5cbmNvbnN0IGNvbnN0YW50cyA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IGhlYWRlcnMgPSByZXF1aXJlKCcuL2hlYWRlcnMnKVxuXG5jb25zdCBETU9ERSA9IDBvNzU1XG5jb25zdCBGTU9ERSA9IDBvNjQ0XG5cbmNvbnN0IEVORF9PRl9UQVIgPSBiNGEuYWxsb2MoMTAyNClcblxuY2xhc3MgU2luayBleHRlbmRzIFdyaXRhYmxlIHtcbiAgY29uc3RydWN0b3IgKHBhY2ssIGhlYWRlciwgY2FsbGJhY2spIHtcbiAgICBzdXBlcih7IG1hcFdyaXRhYmxlLCBlYWdlck9wZW46IHRydWUgfSlcblxuICAgIHRoaXMud3JpdHRlbiA9IDBcbiAgICB0aGlzLmhlYWRlciA9IGhlYWRlclxuXG4gICAgdGhpcy5fY2FsbGJhY2sgPSBjYWxsYmFja1xuICAgIHRoaXMuX2xpbmtuYW1lID0gbnVsbFxuICAgIHRoaXMuX2lzTGlua25hbWUgPSBoZWFkZXIudHlwZSA9PT0gJ3N5bWxpbmsnICYmICFoZWFkZXIubGlua25hbWVcbiAgICB0aGlzLl9pc1ZvaWQgPSBoZWFkZXIudHlwZSAhPT0gJ2ZpbGUnICYmIGhlYWRlci50eXBlICE9PSAnY29udGlndW91cy1maWxlJ1xuICAgIHRoaXMuX2ZpbmlzaGVkID0gZmFsc2VcbiAgICB0aGlzLl9wYWNrID0gcGFja1xuICAgIHRoaXMuX29wZW5DYWxsYmFjayA9IG51bGxcblxuICAgIGlmICh0aGlzLl9wYWNrLl9zdHJlYW0gPT09IG51bGwpIHRoaXMuX3BhY2suX3N0cmVhbSA9IHRoaXNcbiAgICBlbHNlIHRoaXMuX3BhY2suX3BlbmRpbmcucHVzaCh0aGlzKVxuICB9XG5cbiAgX29wZW4gKGNiKSB7XG4gICAgdGhpcy5fb3BlbkNhbGxiYWNrID0gY2JcbiAgICBpZiAodGhpcy5fcGFjay5fc3RyZWFtID09PSB0aGlzKSB0aGlzLl9jb250aW51ZU9wZW4oKVxuICB9XG5cbiAgX2NvbnRpbnVlUGFjayAoZXJyKSB7XG4gICAgaWYgKHRoaXMuX2NhbGxiYWNrID09PSBudWxsKSByZXR1cm5cblxuICAgIGNvbnN0IGNhbGxiYWNrID0gdGhpcy5fY2FsbGJhY2tcbiAgICB0aGlzLl9jYWxsYmFjayA9IG51bGxcblxuICAgIGNhbGxiYWNrKGVycilcbiAgfVxuXG4gIF9jb250aW51ZU9wZW4gKCkge1xuICAgIGlmICh0aGlzLl9wYWNrLl9zdHJlYW0gPT09IG51bGwpIHRoaXMuX3BhY2suX3N0cmVhbSA9IHRoaXNcblxuICAgIGNvbnN0IGNiID0gdGhpcy5fb3BlbkNhbGxiYWNrXG4gICAgdGhpcy5fb3BlbkNhbGxiYWNrID0gbnVsbFxuICAgIGlmIChjYiA9PT0gbnVsbCkgcmV0dXJuXG5cbiAgICBpZiAodGhpcy5fcGFjay5kZXN0cm95aW5nKSByZXR1cm4gY2IobmV3IEVycm9yKCdwYWNrIHN0cmVhbSBkZXN0cm95ZWQnKSlcbiAgICBpZiAodGhpcy5fcGFjay5fZmluYWxpemVkKSByZXR1cm4gY2IobmV3IEVycm9yKCdwYWNrIHN0cmVhbSBpcyBhbHJlYWR5IGZpbmFsaXplZCcpKVxuXG4gICAgdGhpcy5fcGFjay5fc3RyZWFtID0gdGhpc1xuXG4gICAgaWYgKCF0aGlzLl9pc0xpbmtuYW1lKSB7XG4gICAgICB0aGlzLl9wYWNrLl9lbmNvZGUodGhpcy5oZWFkZXIpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2lzVm9pZCkge1xuICAgICAgdGhpcy5fZmluaXNoKClcbiAgICAgIHRoaXMuX2NvbnRpbnVlUGFjayhudWxsKVxuICAgIH1cblxuICAgIGNiKG51bGwpXG4gIH1cblxuICBfd3JpdGUgKGRhdGEsIGNiKSB7XG4gICAgaWYgKHRoaXMuX2lzTGlua25hbWUpIHtcbiAgICAgIHRoaXMuX2xpbmtuYW1lID0gdGhpcy5fbGlua25hbWUgPyBiNGEuY29uY2F0KFt0aGlzLl9saW5rbmFtZSwgZGF0YV0pIDogZGF0YVxuICAgICAgcmV0dXJuIGNiKG51bGwpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2lzVm9pZCkge1xuICAgICAgaWYgKGRhdGEuYnl0ZUxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIGNiKG5ldyBFcnJvcignTm8gYm9keSBhbGxvd2VkIGZvciB0aGlzIGVudHJ5JykpXG4gICAgICB9XG4gICAgICByZXR1cm4gY2IoKVxuICAgIH1cblxuICAgIHRoaXMud3JpdHRlbiArPSBkYXRhLmJ5dGVMZW5ndGhcbiAgICBpZiAodGhpcy5fcGFjay5wdXNoKGRhdGEpKSByZXR1cm4gY2IoKVxuICAgIHRoaXMuX3BhY2suX2RyYWluID0gY2JcbiAgfVxuXG4gIF9maW5pc2ggKCkge1xuICAgIGlmICh0aGlzLl9maW5pc2hlZCkgcmV0dXJuXG4gICAgdGhpcy5fZmluaXNoZWQgPSB0cnVlXG5cbiAgICBpZiAodGhpcy5faXNMaW5rbmFtZSkge1xuICAgICAgdGhpcy5oZWFkZXIubGlua25hbWUgPSB0aGlzLl9saW5rbmFtZSA/IGI0YS50b1N0cmluZyh0aGlzLl9saW5rbmFtZSwgJ3V0Zi04JykgOiAnJ1xuICAgICAgdGhpcy5fcGFjay5fZW5jb2RlKHRoaXMuaGVhZGVyKVxuICAgIH1cblxuICAgIG92ZXJmbG93KHRoaXMuX3BhY2ssIHRoaXMuaGVhZGVyLnNpemUpXG5cbiAgICB0aGlzLl9wYWNrLl9kb25lKHRoaXMpXG4gIH1cblxuICBfZmluYWwgKGNiKSB7XG4gICAgaWYgKHRoaXMud3JpdHRlbiAhPT0gdGhpcy5oZWFkZXIuc2l6ZSkgeyAvLyBjb3JydXB0aW5nIHRhclxuICAgICAgcmV0dXJuIGNiKG5ldyBFcnJvcignU2l6ZSBtaXNtYXRjaCcpKVxuICAgIH1cblxuICAgIHRoaXMuX2ZpbmlzaCgpXG4gICAgY2IobnVsbClcbiAgfVxuXG4gIF9nZXRFcnJvciAoKSB7XG4gICAgcmV0dXJuIGdldFN0cmVhbUVycm9yKHRoaXMpIHx8IG5ldyBFcnJvcigndGFyIGVudHJ5IGRlc3Ryb3llZCcpXG4gIH1cblxuICBfcHJlZGVzdHJveSAoKSB7XG4gICAgdGhpcy5fcGFjay5kZXN0cm95KHRoaXMuX2dldEVycm9yKCkpXG4gIH1cblxuICBfZGVzdHJveSAoY2IpIHtcbiAgICB0aGlzLl9wYWNrLl9kb25lKHRoaXMpXG5cbiAgICB0aGlzLl9jb250aW51ZVBhY2sodGhpcy5fZmluaXNoZWQgPyBudWxsIDogdGhpcy5fZ2V0RXJyb3IoKSlcblxuICAgIGNiKClcbiAgfVxufVxuXG5jbGFzcyBQYWNrIGV4dGVuZHMgUmVhZGFibGUge1xuICBjb25zdHJ1Y3RvciAob3B0cykge1xuICAgIHN1cGVyKG9wdHMpXG4gICAgdGhpcy5fZHJhaW4gPSBub29wXG4gICAgdGhpcy5fZmluYWxpemVkID0gZmFsc2VcbiAgICB0aGlzLl9maW5hbGl6aW5nID0gZmFsc2VcbiAgICB0aGlzLl9wZW5kaW5nID0gW11cbiAgICB0aGlzLl9zdHJlYW0gPSBudWxsXG4gIH1cblxuICBlbnRyeSAoaGVhZGVyLCBidWZmZXIsIGNhbGxiYWNrKSB7XG4gICAgaWYgKHRoaXMuX2ZpbmFsaXplZCB8fCB0aGlzLmRlc3Ryb3lpbmcpIHRocm93IG5ldyBFcnJvcignYWxyZWFkeSBmaW5hbGl6ZWQgb3IgZGVzdHJveWVkJylcblxuICAgIGlmICh0eXBlb2YgYnVmZmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjYWxsYmFjayA9IGJ1ZmZlclxuICAgICAgYnVmZmVyID0gbnVsbFxuICAgIH1cblxuICAgIGlmICghY2FsbGJhY2spIGNhbGxiYWNrID0gbm9vcFxuXG4gICAgaWYgKCFoZWFkZXIuc2l6ZSB8fCBoZWFkZXIudHlwZSA9PT0gJ3N5bWxpbmsnKSBoZWFkZXIuc2l6ZSA9IDBcbiAgICBpZiAoIWhlYWRlci50eXBlKSBoZWFkZXIudHlwZSA9IG1vZGVUb1R5cGUoaGVhZGVyLm1vZGUpXG4gICAgaWYgKCFoZWFkZXIubW9kZSkgaGVhZGVyLm1vZGUgPSBoZWFkZXIudHlwZSA9PT0gJ2RpcmVjdG9yeScgPyBETU9ERSA6IEZNT0RFXG4gICAgaWYgKCFoZWFkZXIudWlkKSBoZWFkZXIudWlkID0gMFxuICAgIGlmICghaGVhZGVyLmdpZCkgaGVhZGVyLmdpZCA9IDBcbiAgICBpZiAoIWhlYWRlci5tdGltZSkgaGVhZGVyLm10aW1lID0gbmV3IERhdGUoKVxuXG4gICAgaWYgKHR5cGVvZiBidWZmZXIgPT09ICdzdHJpbmcnKSBidWZmZXIgPSBiNGEuZnJvbShidWZmZXIpXG5cbiAgICBjb25zdCBzaW5rID0gbmV3IFNpbmsodGhpcywgaGVhZGVyLCBjYWxsYmFjaylcblxuICAgIGlmIChiNGEuaXNCdWZmZXIoYnVmZmVyKSkge1xuICAgICAgaGVhZGVyLnNpemUgPSBidWZmZXIuYnl0ZUxlbmd0aFxuICAgICAgc2luay53cml0ZShidWZmZXIpXG4gICAgICBzaW5rLmVuZCgpXG4gICAgICByZXR1cm4gc2lua1xuICAgIH1cblxuICAgIGlmIChzaW5rLl9pc1ZvaWQpIHtcbiAgICAgIHJldHVybiBzaW5rXG4gICAgfVxuXG4gICAgcmV0dXJuIHNpbmtcbiAgfVxuXG4gIGZpbmFsaXplICgpIHtcbiAgICBpZiAodGhpcy5fc3RyZWFtIHx8IHRoaXMuX3BlbmRpbmcubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5fZmluYWxpemluZyA9IHRydWVcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICh0aGlzLl9maW5hbGl6ZWQpIHJldHVyblxuICAgIHRoaXMuX2ZpbmFsaXplZCA9IHRydWVcblxuICAgIHRoaXMucHVzaChFTkRfT0ZfVEFSKVxuICAgIHRoaXMucHVzaChudWxsKVxuICB9XG5cbiAgX2RvbmUgKHN0cmVhbSkge1xuICAgIGlmIChzdHJlYW0gIT09IHRoaXMuX3N0cmVhbSkgcmV0dXJuXG5cbiAgICB0aGlzLl9zdHJlYW0gPSBudWxsXG5cbiAgICBpZiAodGhpcy5fZmluYWxpemluZykgdGhpcy5maW5hbGl6ZSgpXG4gICAgaWYgKHRoaXMuX3BlbmRpbmcubGVuZ3RoKSB0aGlzLl9wZW5kaW5nLnNoaWZ0KCkuX2NvbnRpbnVlT3BlbigpXG4gIH1cblxuICBfZW5jb2RlIChoZWFkZXIpIHtcbiAgICBpZiAoIWhlYWRlci5wYXgpIHtcbiAgICAgIGNvbnN0IGJ1ZiA9IGhlYWRlcnMuZW5jb2RlKGhlYWRlcilcbiAgICAgIGlmIChidWYpIHtcbiAgICAgICAgdGhpcy5wdXNoKGJ1ZilcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX2VuY29kZVBheChoZWFkZXIpXG4gIH1cblxuICBfZW5jb2RlUGF4IChoZWFkZXIpIHtcbiAgICBjb25zdCBwYXhIZWFkZXIgPSBoZWFkZXJzLmVuY29kZVBheCh7XG4gICAgICBuYW1lOiBoZWFkZXIubmFtZSxcbiAgICAgIGxpbmtuYW1lOiBoZWFkZXIubGlua25hbWUsXG4gICAgICBwYXg6IGhlYWRlci5wYXhcbiAgICB9KVxuXG4gICAgY29uc3QgbmV3SGVhZGVyID0ge1xuICAgICAgbmFtZTogJ1BheEhlYWRlcicsXG4gICAgICBtb2RlOiBoZWFkZXIubW9kZSxcbiAgICAgIHVpZDogaGVhZGVyLnVpZCxcbiAgICAgIGdpZDogaGVhZGVyLmdpZCxcbiAgICAgIHNpemU6IHBheEhlYWRlci5ieXRlTGVuZ3RoLFxuICAgICAgbXRpbWU6IGhlYWRlci5tdGltZSxcbiAgICAgIHR5cGU6ICdwYXgtaGVhZGVyJyxcbiAgICAgIGxpbmtuYW1lOiBoZWFkZXIubGlua25hbWUgJiYgJ1BheEhlYWRlcicsXG4gICAgICB1bmFtZTogaGVhZGVyLnVuYW1lLFxuICAgICAgZ25hbWU6IGhlYWRlci5nbmFtZSxcbiAgICAgIGRldm1ham9yOiBoZWFkZXIuZGV2bWFqb3IsXG4gICAgICBkZXZtaW5vcjogaGVhZGVyLmRldm1pbm9yXG4gICAgfVxuXG4gICAgdGhpcy5wdXNoKGhlYWRlcnMuZW5jb2RlKG5ld0hlYWRlcikpXG4gICAgdGhpcy5wdXNoKHBheEhlYWRlcilcbiAgICBvdmVyZmxvdyh0aGlzLCBwYXhIZWFkZXIuYnl0ZUxlbmd0aClcblxuICAgIG5ld0hlYWRlci5zaXplID0gaGVhZGVyLnNpemVcbiAgICBuZXdIZWFkZXIudHlwZSA9IGhlYWRlci50eXBlXG4gICAgdGhpcy5wdXNoKGhlYWRlcnMuZW5jb2RlKG5ld0hlYWRlcikpXG4gIH1cblxuICBfZG9EcmFpbiAoKSB7XG4gICAgY29uc3QgZHJhaW4gPSB0aGlzLl9kcmFpblxuICAgIHRoaXMuX2RyYWluID0gbm9vcFxuICAgIGRyYWluKClcbiAgfVxuXG4gIF9wcmVkZXN0cm95ICgpIHtcbiAgICBjb25zdCBlcnIgPSBnZXRTdHJlYW1FcnJvcih0aGlzKVxuXG4gICAgaWYgKHRoaXMuX3N0cmVhbSkgdGhpcy5fc3RyZWFtLmRlc3Ryb3koZXJyKVxuXG4gICAgd2hpbGUgKHRoaXMuX3BlbmRpbmcubGVuZ3RoKSB7XG4gICAgICBjb25zdCBzdHJlYW0gPSB0aGlzLl9wZW5kaW5nLnNoaWZ0KClcbiAgICAgIHN0cmVhbS5kZXN0cm95KGVycilcbiAgICAgIHN0cmVhbS5fY29udGludWVPcGVuKClcbiAgICB9XG5cbiAgICB0aGlzLl9kb0RyYWluKClcbiAgfVxuXG4gIF9yZWFkIChjYikge1xuICAgIHRoaXMuX2RvRHJhaW4oKVxuICAgIGNiKClcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHBhY2sgKG9wdHMpIHtcbiAgcmV0dXJuIG5ldyBQYWNrKG9wdHMpXG59XG5cbmZ1bmN0aW9uIG1vZGVUb1R5cGUgKG1vZGUpIHtcbiAgc3dpdGNoIChtb2RlICYgY29uc3RhbnRzLlNfSUZNVCkge1xuICAgIGNhc2UgY29uc3RhbnRzLlNfSUZCTEs6IHJldHVybiAnYmxvY2stZGV2aWNlJ1xuICAgIGNhc2UgY29uc3RhbnRzLlNfSUZDSFI6IHJldHVybiAnY2hhcmFjdGVyLWRldmljZSdcbiAgICBjYXNlIGNvbnN0YW50cy5TX0lGRElSOiByZXR1cm4gJ2RpcmVjdG9yeSdcbiAgICBjYXNlIGNvbnN0YW50cy5TX0lGSUZPOiByZXR1cm4gJ2ZpZm8nXG4gICAgY2FzZSBjb25zdGFudHMuU19JRkxOSzogcmV0dXJuICdzeW1saW5rJ1xuICB9XG5cbiAgcmV0dXJuICdmaWxlJ1xufVxuXG5mdW5jdGlvbiBub29wICgpIHt9XG5cbmZ1bmN0aW9uIG92ZXJmbG93IChzZWxmLCBzaXplKSB7XG4gIHNpemUgJj0gNTExXG4gIGlmIChzaXplKSBzZWxmLnB1c2goRU5EX09GX1RBUi5zdWJhcnJheSgwLCA1MTIgLSBzaXplKSlcbn1cblxuZnVuY3Rpb24gbWFwV3JpdGFibGUgKGJ1Zikge1xuICByZXR1cm4gYjRhLmlzQnVmZmVyKGJ1ZikgPyBidWYgOiBiNGEuZnJvbShidWYpXG59XG4iLAogICAgImV4cG9ydHMuZXh0cmFjdCA9IHJlcXVpcmUoJy4vZXh0cmFjdCcpXG5leHBvcnRzLnBhY2sgPSByZXF1aXJlKCcuL3BhY2snKVxuIiwKICAgICIvKipcbiAqIFRBUiBGb3JtYXQgUGx1Z2luXG4gKlxuICogQG1vZHVsZSBwbHVnaW5zL3RhclxuICogQGxpY2Vuc2UgW01JVF17QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FyY2hpdmVyanMvbm9kZS1hcmNoaXZlci9ibG9iL21hc3Rlci9MSUNFTlNFfVxuICogQGNvcHlyaWdodCAoYykgMjAxMi0yMDE0IENocmlzIFRhbGtpbmd0b24sIGNvbnRyaWJ1dG9ycy5cbiAqL1xudmFyIHpsaWIgPSByZXF1aXJlKCd6bGliJyk7XG5cbnZhciBlbmdpbmUgPSByZXF1aXJlKCd0YXItc3RyZWFtJyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJ2FyY2hpdmVyLXV0aWxzJyk7XG5cbi8qKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge1Rhck9wdGlvbnN9IG9wdGlvbnNcbiAqL1xudmFyIFRhciA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFRhcikpIHtcbiAgICByZXR1cm4gbmV3IFRhcihvcHRpb25zKTtcbiAgfVxuXG4gIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMgPSB1dGlsLmRlZmF1bHRzKG9wdGlvbnMsIHtcbiAgICBnemlwOiBmYWxzZVxuICB9KTtcblxuICBpZiAodHlwZW9mIG9wdGlvbnMuZ3ppcE9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgb3B0aW9ucy5nemlwT3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgdGhpcy5zdXBwb3J0cyA9IHtcbiAgICBkaXJlY3Rvcnk6IHRydWUsXG4gICAgc3ltbGluazogdHJ1ZVxuICB9O1xuXG4gIHRoaXMuZW5naW5lID0gZW5naW5lLnBhY2sob3B0aW9ucyk7XG4gIHRoaXMuY29tcHJlc3NvciA9IGZhbHNlO1xuXG4gIGlmIChvcHRpb25zLmd6aXApIHtcbiAgICB0aGlzLmNvbXByZXNzb3IgPSB6bGliLmNyZWF0ZUd6aXAob3B0aW9ucy5nemlwT3B0aW9ucyk7XG4gICAgdGhpcy5jb21wcmVzc29yLm9uKCdlcnJvcicsIHRoaXMuX29uQ29tcHJlc3NvckVycm9yLmJpbmQodGhpcykpO1xuICB9XG59O1xuXG4vKipcbiAqIFtfb25Db21wcmVzc29yRXJyb3IgZGVzY3JpcHRpb25dXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSAge0Vycm9yfSBlcnJcbiAqIEByZXR1cm4gdm9pZFxuICovXG5UYXIucHJvdG90eXBlLl9vbkNvbXByZXNzb3JFcnJvciA9IGZ1bmN0aW9uKGVycikge1xuICB0aGlzLmVuZ2luZS5lbWl0KCdlcnJvcicsIGVycik7XG59O1xuXG4vKipcbiAqIFthcHBlbmQgZGVzY3JpcHRpb25dXG4gKlxuICogQHBhcmFtICB7KEJ1ZmZlcnxTdHJlYW0pfSBzb3VyY2VcbiAqIEBwYXJhbSAge1RhckVudHJ5RGF0YX0gZGF0YVxuICogQHBhcmFtICB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHZvaWRcbiAqL1xuVGFyLnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbihzb3VyY2UsIGRhdGEsIGNhbGxiYWNrKSB7XG4gIHZhciBzZWxmID0gdGhpcztcblxuICBkYXRhLm10aW1lID0gZGF0YS5kYXRlO1xuXG4gIGZ1bmN0aW9uIGFwcGVuZChlcnIsIHNvdXJjZUJ1ZmZlcikge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2VsZi5lbmdpbmUuZW50cnkoZGF0YSwgc291cmNlQnVmZmVyLCBmdW5jdGlvbihlcnIpIHtcbiAgICAgIGNhbGxiYWNrKGVyciwgZGF0YSk7XG4gICAgfSk7XG4gIH1cblxuICBpZiAoZGF0YS5zb3VyY2VUeXBlID09PSAnYnVmZmVyJykge1xuICAgIGFwcGVuZChudWxsLCBzb3VyY2UpO1xuICB9IGVsc2UgaWYgKGRhdGEuc291cmNlVHlwZSA9PT0gJ3N0cmVhbScgJiYgZGF0YS5zdGF0cykge1xuICAgIGRhdGEuc2l6ZSA9IGRhdGEuc3RhdHMuc2l6ZTtcblxuICAgIHZhciBlbnRyeSA9IHNlbGYuZW5naW5lLmVudHJ5KGRhdGEsIGZ1bmN0aW9uKGVycikge1xuICAgICAgY2FsbGJhY2soZXJyLCBkYXRhKTtcbiAgICB9KTtcblxuICAgIHNvdXJjZS5waXBlKGVudHJ5KTtcbiAgfSBlbHNlIGlmIChkYXRhLnNvdXJjZVR5cGUgPT09ICdzdHJlYW0nKSB7XG4gICAgdXRpbC5jb2xsZWN0U3RyZWFtKHNvdXJjZSwgYXBwZW5kKTtcbiAgfVxufTtcblxuLyoqXG4gKiBbZmluYWxpemUgZGVzY3JpcHRpb25dXG4gKlxuICogQHJldHVybiB2b2lkXG4gKi9cblRhci5wcm90b3R5cGUuZmluYWxpemUgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5lbmdpbmUuZmluYWxpemUoKTtcbn07XG5cbi8qKlxuICogW29uIGRlc2NyaXB0aW9uXVxuICpcbiAqIEByZXR1cm4gdGhpcy5lbmdpbmVcbiAqL1xuVGFyLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5lbmdpbmUub24uYXBwbHkodGhpcy5lbmdpbmUsIGFyZ3VtZW50cyk7XG59O1xuXG4vKipcbiAqIFtwaXBlIGRlc2NyaXB0aW9uXVxuICpcbiAqIEBwYXJhbSAge1N0cmluZ30gZGVzdGluYXRpb25cbiAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9uc1xuICogQHJldHVybiB0aGlzLmVuZ2luZVxuICovXG5UYXIucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbihkZXN0aW5hdGlvbiwgb3B0aW9ucykge1xuICBpZiAodGhpcy5jb21wcmVzc29yKSB7XG4gICAgcmV0dXJuIHRoaXMuZW5naW5lLnBpcGUuYXBwbHkodGhpcy5lbmdpbmUsIFt0aGlzLmNvbXByZXNzb3JdKS5waXBlKGRlc3RpbmF0aW9uLCBvcHRpb25zKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdGhpcy5lbmdpbmUucGlwZS5hcHBseSh0aGlzLmVuZ2luZSwgYXJndW1lbnRzKTtcbiAgfVxufTtcblxuLyoqXG4gKiBbdW5waXBlIGRlc2NyaXB0aW9uXVxuICpcbiAqIEByZXR1cm4gdGhpcy5lbmdpbmVcbiAqL1xuVGFyLnByb3RvdHlwZS51bnBpcGUgPSBmdW5jdGlvbigpIHtcbiAgaWYgKHRoaXMuY29tcHJlc3Nvcikge1xuICAgIHJldHVybiB0aGlzLmNvbXByZXNzb3IudW5waXBlLmFwcGx5KHRoaXMuY29tcHJlc3NvciwgYXJndW1lbnRzKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdGhpcy5lbmdpbmUudW5waXBlLmFwcGx5KHRoaXMuZW5naW5lLCBhcmd1bWVudHMpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFRhcjtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBUYXJPcHRpb25zXG4gKiBAZ2xvYmFsXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IFtnemlwPWZhbHNlXSBDb21wcmVzcyB0aGUgdGFyIGFyY2hpdmUgdXNpbmcgZ3ppcC5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbZ3ppcE9wdGlvbnNdIFBhc3NlZCB0byBbemxpYl17QGxpbmsgaHR0cHM6Ly9ub2RlanMub3JnL2FwaS96bGliLmh0bWwjemxpYl9jbGFzc19vcHRpb25zfVxuICogdG8gY29udHJvbCBjb21wcmVzc2lvbi5cbiAqIEBwcm9wZXJ0eSB7Kn0gWypdIFNlZSBbdGFyLXN0cmVhbV17QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL21hZmludG9zaC90YXItc3RyZWFtfSBkb2N1bWVudGF0aW9uIGZvciBhZGRpdGlvbmFsIHByb3BlcnRpZXMuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBUYXJFbnRyeURhdGFcbiAqIEBnbG9iYWxcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBuYW1lIFNldHMgdGhlIGVudHJ5IG5hbWUgaW5jbHVkaW5nIGludGVybmFsIHBhdGguXG4gKiBAcHJvcGVydHkgeyhTdHJpbmd8RGF0ZSl9IFtkYXRlPU5PVygpXSBTZXRzIHRoZSBlbnRyeSBkYXRlLlxuICogQHByb3BlcnR5IHtOdW1iZXJ9IFttb2RlPUQ6MDc1NS9GOjA2NDRdIFNldHMgdGhlIGVudHJ5IHBlcm1pc3Npb25zLlxuICogQHByb3BlcnR5IHtTdHJpbmd9IFtwcmVmaXhdIFNldHMgYSBwYXRoIHByZWZpeCBmb3IgdGhlIGVudHJ5IG5hbWUuIFVzZWZ1bFxuICogd2hlbiB3b3JraW5nIHdpdGggbWV0aG9kcyBsaWtlIGBkaXJlY3RvcnlgIG9yIGBnbG9iYC5cbiAqIEBwcm9wZXJ0eSB7ZnMuU3RhdHN9IFtzdGF0c10gU2V0cyB0aGUgZnMgc3RhdCBkYXRhIGZvciB0aGlzIGVudHJ5IGFsbG93aW5nXG4gKiBmb3IgcmVkdWN0aW9uIG9mIGZzIHN0YXQgY2FsbHMgd2hlbiBzdGF0IGRhdGEgaXMgYWxyZWFkeSBrbm93bi5cbiAqL1xuXG4vKipcbiAqIFRhclN0cmVhbSBNb2R1bGVcbiAqIEBleHRlcm5hbCBUYXJTdHJlYW1cbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9tYWZpbnRvc2gvdGFyLXN0cmVhbX1cbiAqL1xuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIGdldERlZmF1bHRFeHBvcnRGcm9tQ2pzICh4KSB7XG5cdHJldHVybiB4ICYmIHguX19lc01vZHVsZSAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoeCwgJ2RlZmF1bHQnKSA/IHhbJ2RlZmF1bHQnXSA6IHg7XG59XG5cbmNvbnN0IENSQ19UQUJMRSA9IG5ldyBJbnQzMkFycmF5KFtcbiAgMCxcbiAgMTk5Njk1OTg5NCxcbiAgMzk5MzkxOTc4OCxcbiAgMjU2NzUyNDc5NCxcbiAgMTI0NjM0MTM3LFxuICAxODg2MDU3NjE1LFxuICAzOTE1NjIxNjg1LFxuICAyNjU3MzkyMDM1LFxuICAyNDkyNjgyNzQsXG4gIDIwNDQ1MDgzMjQsXG4gIDM3NzIxMTUyMzAsXG4gIDI1NDcxNzc4NjQsXG4gIDE2Mjk0MTk5NSxcbiAgMjEyNTU2MTAyMSxcbiAgMzg4NzYwNzA0NyxcbiAgMjQyODQ0NDA0OSxcbiAgNDk4NTM2NTQ4LFxuICAxNzg5OTI3NjY2LFxuICA0MDg5MDE2NjQ4LFxuICAyMjI3MDYxMjE0LFxuICA0NTA1NDg4NjEsXG4gIDE4NDMyNTg2MDMsXG4gIDQxMDc1ODA3NTMsXG4gIDIyMTE2Nzc2MzksXG4gIDMyNTg4Mzk5MCxcbiAgMTY4NDc3NzE1MixcbiAgNDI1MTEyMjA0MixcbiAgMjMyMTkyNjYzNixcbiAgMzM1NjMzNDg3LFxuICAxNjYxMzY1NDY1LFxuICA0MTk1MzAyNzU1LFxuICAyMzY2MTE1MzE3LFxuICA5OTcwNzMwOTYsXG4gIDEyODE5NTM4ODYsXG4gIDM1Nzk4NTUzMzIsXG4gIDI3MjQ2ODgyNDIsXG4gIDEwMDY4ODgxNDUsXG4gIDEyNTg2MDc2ODcsXG4gIDM1MjQxMDE2MjksXG4gIDI3Njg5NDI0NDMsXG4gIDkwMTA5NzcyMixcbiAgMTExOTAwMDY4NCxcbiAgMzY4NjUxNzIwNixcbiAgMjg5ODA2NTcyOCxcbiAgODUzMDQ0NDUxLFxuICAxMTcyMjY2MTAxLFxuICAzNzA1MDE1NzU5LFxuICAyODgyNjE2NjY1LFxuICA2NTE3Njc5ODAsXG4gIDEzNzM1MDM1NDYsXG4gIDMzNjk1NTQzMDQsXG4gIDMyMTgxMDQ1OTgsXG4gIDU2NTUwNzI1MyxcbiAgMTQ1NDYyMTczMSxcbiAgMzQ4NTExMTcwNSxcbiAgMzA5OTQzNjMwMyxcbiAgNjcxMjY2OTc0LFxuICAxNTk0MTk4MDI0LFxuICAzMzIyNzMwOTMwLFxuICAyOTcwMzQ3ODEyLFxuICA3OTU4MzU1MjcsXG4gIDE0ODMyMzAyMjUsXG4gIDMyNDQzNjcyNzUsXG4gIDMwNjAxNDk1NjUsXG4gIDE5OTQxNDYxOTIsXG4gIDMxMTU4NTM0LFxuICAyNTYzOTA3NzcyLFxuICA0MDIzNzE3OTMwLFxuICAxOTA3NDU5NDY1LFxuICAxMTI2MzcyMTUsXG4gIDI2ODAxNTMyNTMsXG4gIDM5MDQ0MjcwNTksXG4gIDIwMTM3NzYyOTAsXG4gIDI1MTcyMjAzNixcbiAgMjUxNzIxNTM3NCxcbiAgMzc3NTgzMDA0MCxcbiAgMjEzNzY1Njc2MyxcbiAgMTQxMzc2ODEzLFxuICAyNDM5Mjc3NzE5LFxuICAzODY1MjcxMjk3LFxuICAxODAyMTk1NDQ0LFxuICA0NzY4NjQ4NjYsXG4gIDIyMzgwMDEzNjgsXG4gIDQwNjY1MDg4NzgsXG4gIDE4MTIzNzA5MjUsXG4gIDQ1MzA5MjczMSxcbiAgMjE4MTYyNTAyNSxcbiAgNDExMTQ1MTIyMyxcbiAgMTcwNjA4ODkwMixcbiAgMzE0MDQyNzA0LFxuICAyMzQ0NTMyMjAyLFxuICA0MjQwMDE3NTMyLFxuICAxNjU4NjU4MjcxLFxuICAzNjY2MTk5NzcsXG4gIDIzNjI2NzAzMjMsXG4gIDQyMjQ5OTQ0MDUsXG4gIDEzMDM1MzU5NjAsXG4gIDk4NDk2MTQ4NixcbiAgMjc0NzAwNzA5MixcbiAgMzU2OTAzNzUzOCxcbiAgMTI1NjE3MDgxNyxcbiAgMTAzNzYwNDMxMSxcbiAgMjc2NTIxMDczMyxcbiAgMzU1NDA3OTk5NSxcbiAgMTEzMTAxNDUwNixcbiAgODc5Njc5OTk2LFxuICAyOTA5MjQzNDYyLFxuICAzNjYzNzcxODU2LFxuICAxMTQxMTI0NDY3LFxuICA4NTU4NDIyNzcsXG4gIDI4NTI4MDE2MzEsXG4gIDM3MDg2NDg2NDksXG4gIDEzNDI1MzM5NDgsXG4gIDY1NDQ1OTMwNixcbiAgMzE4ODM5NjA0OCxcbiAgMzM3MzAxNTE3NCxcbiAgMTQ2NjQ3OTkwOSxcbiAgNTQ0MTc5NjM1LFxuICAzMTEwNTIzOTEzLFxuICAzNDYyNTIyMDE1LFxuICAxNTkxNjcxMDU0LFxuICA3MDIxMzg3NzYsXG4gIDI5NjY0NjA0NTAsXG4gIDMzNTI3OTk0MTIsXG4gIDE1MDQ5MTg4MDcsXG4gIDc4MzU1MTg3MyxcbiAgMzA4MjY0MDQ0MyxcbiAgMzIzMzQ0Mjk4OSxcbiAgMzk4ODI5MjM4NCxcbiAgMjU5NjI1NDY0NixcbiAgNjIzMTcwNjgsXG4gIDE5NTc4MTA4NDIsXG4gIDM5Mzk4NDU5NDUsXG4gIDI2NDc4MTYxMTEsXG4gIDgxNDcwOTk3LFxuICAxOTQzODAzNTIzLFxuICAzODE0OTE4OTMwLFxuICAyNDg5NTk2ODA0LFxuICAyMjUyNzQ0MzAsXG4gIDIwNTM3OTAzNzYsXG4gIDM4MjYxNzU3NTUsXG4gIDI0NjY5MDYwMTMsXG4gIDE2NzgxNjc0MyxcbiAgMjA5NzY1MTM3NyxcbiAgNDAyNzU1MjU4MCxcbiAgMjI2NTQ5MDM4NixcbiAgNTAzNDQ0MDcyLFxuICAxNzYyMDUwODE0LFxuICA0MTUwNDE3MjQ1LFxuICAyMTU0MTI5MzU1LFxuICA0MjY1MjIyMjUsXG4gIDE4NTI1MDc4NzksXG4gIDQyNzUzMTM1MjYsXG4gIDIzMTIzMTc5MjAsXG4gIDI4Mjc1MzYyNixcbiAgMTc0MjU1NTg1MixcbiAgNDE4OTcwODE0MyxcbiAgMjM5NDg3Nzk0NSxcbiAgMzk3OTE3NzYzLFxuICAxNjIyMTgzNjM3LFxuICAzNjA0MzkwODg4LFxuICAyNzE0ODY2NTU4LFxuICA5NTM3Mjk3MzIsXG4gIDEzNDAwNzY2MjYsXG4gIDM1MTg3MTk5ODUsXG4gIDI3OTczNjA5OTksXG4gIDEwNjg4MjgzODEsXG4gIDEyMTk2Mzg4NTksXG4gIDM2MjQ3NDE4NTAsXG4gIDI5MzY2NzUxNDgsXG4gIDkwNjE4NTQ2MixcbiAgMTA5MDgxMjUxMixcbiAgMzc0NzY3MjAwMyxcbiAgMjgyNTM3OTY2OSxcbiAgODI5MzI5MTM1LFxuICAxMTgxMzM1MTYxLFxuICAzNDEyMTc3ODA0LFxuICAzMTYwODM0ODQyLFxuICA2MjgwODU0MDgsXG4gIDEzODI2MDUzNjYsXG4gIDM0MjMzNjkxMDksXG4gIDMxMzgwNzg0NjcsXG4gIDU3MDU2MjIzMyxcbiAgMTQyNjQwMDgxNSxcbiAgMzMxNzMxNjU0MixcbiAgMjk5ODczMzYwOCxcbiAgNzMzMjM5OTU0LFxuICAxNTU1MjYxOTU2LFxuICAzMjY4OTM1NTkxLFxuICAzMDUwMzYwNjI1LFxuICA3NTI0NTk0MDMsXG4gIDE1NDEzMjAyMjEsXG4gIDI2MDcwNzE5MjAsXG4gIDM5NjU5NzMwMzAsXG4gIDE5Njk5MjI5NzIsXG4gIDQwNzM1NDk4LFxuICAyNjE3ODM3MjI1LFxuICAzOTQzNTc3MTUxLFxuICAxOTEzMDg3ODc3LFxuICA4MzkwODM3MSxcbiAgMjUxMjM0MTYzNCxcbiAgMzgwMzc0MDY5MixcbiAgMjA3NTIwODYyMixcbiAgMjEzMjYxMTEyLFxuICAyNDYzMjcyNjAzLFxuICAzODU1OTkwMjg1LFxuICAyMDk0ODU0MDcxLFxuICAxOTg5NTg4ODEsXG4gIDIyNjIwMjkwMTIsXG4gIDQwNTcyNjA2MTAsXG4gIDE3NTkzNTk5OTIsXG4gIDUzNDQxNDE5MCxcbiAgMjE3NjcxODU0MSxcbiAgNDEzOTMyOTExNSxcbiAgMTg3MzgzNjAwMSxcbiAgNDE0NjY0NTY3LFxuICAyMjgyMjQ4OTM0LFxuICA0Mjc5MjAwMzY4LFxuICAxNzExNjg0NTU0LFxuICAyODUyODExMTYsXG4gIDI0MDU4MDE3MjcsXG4gIDQxNjcyMTY3NDUsXG4gIDE2MzQ0Njc3OTUsXG4gIDM3NjIyOTcwMSxcbiAgMjY4NTA2Nzg5NixcbiAgMzYwODAwNzQwNixcbiAgMTMwODkxODYxMixcbiAgOTU2NTQzOTM4LFxuICAyODA4NTU1MTA1LFxuICAzNDk1OTU4MjYzLFxuICAxMjMxNjM2MzAxLFxuICAxMDQ3NDI3MDM1LFxuICAyOTMyOTU5ODE4LFxuICAzNjU0NzAzODM2LFxuICAxMDg4MzU5MjcwLFxuICA5MzY5MThlMyxcbiAgMjg0NzcxNDg5OSxcbiAgMzczNjgzNzgyOSxcbiAgMTIwMjkwMDg2MyxcbiAgODE3MjMzODk3LFxuICAzMTgzMzQyMTA4LFxuICAzNDAxMjM3MTMwLFxuICAxNDA0Mjc3NTUyLFxuICA2MTU4MTgxNTAsXG4gIDMxMzQyMDc0OTMsXG4gIDM0NTM0MjEyMDMsXG4gIDE0MjM4NTc0NDksXG4gIDYwMTQ1MDQzMSxcbiAgMzAwOTgzNzYxNCxcbiAgMzI5NDcxMDQ1NixcbiAgMTU2NzEwMzc0NixcbiAgNzExOTI4NzI0LFxuICAzMDIwNjY4NDcxLFxuICAzMjcyMzgwMDY1LFxuICAxNTEwMzM0MjM1LFxuICA3NTUxNjcxMTdcbl0pO1xuZnVuY3Rpb24gZW5zdXJlQnVmZmVyKGlucHV0KSB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoaW5wdXQpKSB7XG4gICAgcmV0dXJuIGlucHV0O1xuICB9XG4gIGlmICh0eXBlb2YgaW5wdXQgPT09IFwibnVtYmVyXCIpIHtcbiAgICByZXR1cm4gQnVmZmVyLmFsbG9jKGlucHV0KTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oaW5wdXQpO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihcImlucHV0IG11c3QgYmUgYnVmZmVyLCBudW1iZXIsIG9yIHN0cmluZywgcmVjZWl2ZWQgXCIgKyB0eXBlb2YgaW5wdXQpO1xuICB9XG59XG5mdW5jdGlvbiBidWZmZXJpemVJbnQobnVtKSB7XG4gIGNvbnN0IHRtcCA9IGVuc3VyZUJ1ZmZlcig0KTtcbiAgdG1wLndyaXRlSW50MzJCRShudW0sIDApO1xuICByZXR1cm4gdG1wO1xufVxuZnVuY3Rpb24gX2NyYzMyKGJ1ZiwgcHJldmlvdXMpIHtcbiAgYnVmID0gZW5zdXJlQnVmZmVyKGJ1Zik7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIocHJldmlvdXMpKSB7XG4gICAgcHJldmlvdXMgPSBwcmV2aW91cy5yZWFkVUludDMyQkUoMCk7XG4gIH1cbiAgbGV0IGNyYyA9IH5+cHJldmlvdXMgXiAtMTtcbiAgZm9yICh2YXIgbiA9IDA7IG4gPCBidWYubGVuZ3RoOyBuKyspIHtcbiAgICBjcmMgPSBDUkNfVEFCTEVbKGNyYyBeIGJ1ZltuXSkgJiAyNTVdIF4gY3JjID4+PiA4O1xuICB9XG4gIHJldHVybiBjcmMgXiAtMTtcbn1cbmZ1bmN0aW9uIGNyYzMyKCkge1xuICByZXR1cm4gYnVmZmVyaXplSW50KF9jcmMzMi5hcHBseShudWxsLCBhcmd1bWVudHMpKTtcbn1cbmNyYzMyLnNpZ25lZCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gX2NyYzMyLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG59O1xuY3JjMzIudW5zaWduZWQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIF9jcmMzMi5hcHBseShudWxsLCBhcmd1bWVudHMpID4+PiAwO1xufTtcbnZhciBidWZmZXJDcmMzMiA9IGNyYzMyO1xuXG5jb25zdCBpbmRleCA9IC8qQF9fUFVSRV9fKi9nZXREZWZhdWx0RXhwb3J0RnJvbUNqcyhidWZmZXJDcmMzMik7XG5cbm1vZHVsZS5leHBvcnRzID0gaW5kZXg7XG4iLAogICAgIi8qKlxuICogSlNPTiBGb3JtYXQgUGx1Z2luXG4gKlxuICogQG1vZHVsZSBwbHVnaW5zL2pzb25cbiAqIEBsaWNlbnNlIFtNSVRde0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hcmNoaXZlcmpzL25vZGUtYXJjaGl2ZXIvYmxvYi9tYXN0ZXIvTElDRU5TRX1cbiAqIEBjb3B5cmlnaHQgKGMpIDIwMTItMjAxNCBDaHJpcyBUYWxraW5ndG9uLCBjb250cmlidXRvcnMuXG4gKi9cbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ3V0aWwnKS5pbmhlcml0cztcbnZhciBUcmFuc2Zvcm0gPSByZXF1aXJlKCdyZWFkYWJsZS1zdHJlYW0nKS5UcmFuc2Zvcm07XG5cbnZhciBjcmMzMiA9IHJlcXVpcmUoJ2J1ZmZlci1jcmMzMicpO1xudmFyIHV0aWwgPSByZXF1aXJlKCdhcmNoaXZlci11dGlscycpO1xuXG4vKipcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHsoSnNvbk9wdGlvbnN8VHJhbnNmb3JtT3B0aW9ucyl9IG9wdGlvbnNcbiAqL1xudmFyIEpzb24gPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBKc29uKSkge1xuICAgIHJldHVybiBuZXcgSnNvbihvcHRpb25zKTtcbiAgfVxuXG4gIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMgPSB1dGlsLmRlZmF1bHRzKG9wdGlvbnMsIHt9KTtcblxuICBUcmFuc2Zvcm0uY2FsbCh0aGlzLCBvcHRpb25zKTtcblxuICB0aGlzLnN1cHBvcnRzID0ge1xuICAgIGRpcmVjdG9yeTogdHJ1ZSxcbiAgICBzeW1saW5rOiB0cnVlXG4gIH07XG5cbiAgdGhpcy5maWxlcyA9IFtdO1xufTtcblxuaW5oZXJpdHMoSnNvbiwgVHJhbnNmb3JtKTtcblxuLyoqXG4gKiBbX3RyYW5zZm9ybSBkZXNjcmlwdGlvbl1cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtICB7QnVmZmVyfSAgIGNodW5rXG4gKiBAcGFyYW0gIHtTdHJpbmd9ICAgZW5jb2RpbmdcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB2b2lkXG4gKi9cbkpzb24ucHJvdG90eXBlLl90cmFuc2Zvcm0gPSBmdW5jdGlvbihjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gIGNhbGxiYWNrKG51bGwsIGNodW5rKTtcbn07XG5cbi8qKlxuICogW193cml0ZVN0cmluZ2lmaWVkIGRlc2NyaXB0aW9uXVxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHZvaWRcbiAqL1xuSnNvbi5wcm90b3R5cGUuX3dyaXRlU3RyaW5naWZpZWQgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGZpbGVTdHJpbmcgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmZpbGVzKTtcbiAgdGhpcy53cml0ZShmaWxlU3RyaW5nKTtcbn07XG5cbi8qKlxuICogW2FwcGVuZCBkZXNjcmlwdGlvbl1cbiAqXG4gKiBAcGFyYW0gIHsoQnVmZmVyfFN0cmVhbSl9ICAgc291cmNlXG4gKiBAcGFyYW0gIHtFbnRyeURhdGF9ICAgZGF0YVxuICogQHBhcmFtICB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHZvaWRcbiAqL1xuSnNvbi5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24oc291cmNlLCBkYXRhLCBjYWxsYmFjaykge1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgZGF0YS5jcmMzMiA9IDA7XG5cbiAgZnVuY3Rpb24gb25lbmQoZXJyLCBzb3VyY2VCdWZmZXIpIHtcbiAgICBpZiAoZXJyKSB7XG4gICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRhdGEuc2l6ZSA9IHNvdXJjZUJ1ZmZlci5sZW5ndGggfHwgMDtcbiAgICBkYXRhLmNyYzMyID0gY3JjMzIudW5zaWduZWQoc291cmNlQnVmZmVyKTtcblxuICAgIHNlbGYuZmlsZXMucHVzaChkYXRhKTtcblxuICAgIGNhbGxiYWNrKG51bGwsIGRhdGEpO1xuICB9XG5cbiAgaWYgKGRhdGEuc291cmNlVHlwZSA9PT0gJ2J1ZmZlcicpIHtcbiAgICBvbmVuZChudWxsLCBzb3VyY2UpO1xuICB9IGVsc2UgaWYgKGRhdGEuc291cmNlVHlwZSA9PT0gJ3N0cmVhbScpIHtcbiAgICB1dGlsLmNvbGxlY3RTdHJlYW0oc291cmNlLCBvbmVuZCk7XG4gIH1cbn07XG5cbi8qKlxuICogW2ZpbmFsaXplIGRlc2NyaXB0aW9uXVxuICpcbiAqIEByZXR1cm4gdm9pZFxuICovXG5Kc29uLnByb3RvdHlwZS5maW5hbGl6ZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl93cml0ZVN0cmluZ2lmaWVkKCk7XG4gIHRoaXMuZW5kKCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEpzb247XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gSnNvbk9wdGlvbnNcbiAqIEBnbG9iYWxcbiAqL1xuIiwKICAgICIvKipcbiAqIEFyY2hpdmVyIFZlbmRpbmdcbiAqXG4gKiBAaWdub3JlXG4gKiBAbGljZW5zZSBbTUlUXXtAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXJjaGl2ZXJqcy9ub2RlLWFyY2hpdmVyL2Jsb2IvbWFzdGVyL0xJQ0VOU0V9XG4gKiBAY29weXJpZ2h0IChjKSAyMDEyLTIwMTQgQ2hyaXMgVGFsa2luZ3RvbiwgY29udHJpYnV0b3JzLlxuICovXG52YXIgQXJjaGl2ZXIgPSByZXF1aXJlKCcuL2xpYi9jb3JlJyk7XG5cbnZhciBmb3JtYXRzID0ge307XG5cbi8qKlxuICogRGlzcGVuc2VzIGEgbmV3IEFyY2hpdmVyIGluc3RhbmNlLlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtICB7U3RyaW5nfSBmb3JtYXQgVGhlIGFyY2hpdmUgZm9ybWF0IHRvIHVzZS5cbiAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9ucyBTZWUgW0FyY2hpdmVyXXtAbGluayBBcmNoaXZlcn1cbiAqIEByZXR1cm4ge0FyY2hpdmVyfVxuICovXG52YXIgdmVuZGluZyA9IGZ1bmN0aW9uKGZvcm1hdCwgb3B0aW9ucykge1xuICByZXR1cm4gdmVuZGluZy5jcmVhdGUoZm9ybWF0LCBvcHRpb25zKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBBcmNoaXZlciBpbnN0YW5jZS5cbiAqXG4gKiBAcGFyYW0gIHtTdHJpbmd9IGZvcm1hdCBUaGUgYXJjaGl2ZSBmb3JtYXQgdG8gdXNlLlxuICogQHBhcmFtICB7T2JqZWN0fSBvcHRpb25zIFNlZSBbQXJjaGl2ZXJde0BsaW5rIEFyY2hpdmVyfVxuICogQHJldHVybiB7QXJjaGl2ZXJ9XG4gKi9cbnZlbmRpbmcuY3JlYXRlID0gZnVuY3Rpb24oZm9ybWF0LCBvcHRpb25zKSB7XG4gIGlmIChmb3JtYXRzW2Zvcm1hdF0pIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBuZXcgQXJjaGl2ZXIoZm9ybWF0LCBvcHRpb25zKTtcbiAgICBpbnN0YW5jZS5zZXRGb3JtYXQoZm9ybWF0KTtcbiAgICBpbnN0YW5jZS5zZXRNb2R1bGUobmV3IGZvcm1hdHNbZm9ybWF0XShvcHRpb25zKSk7XG5cbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjcmVhdGUoJyArIGZvcm1hdCArICcpOiBmb3JtYXQgbm90IHJlZ2lzdGVyZWQnKTtcbiAgfVxufTtcblxuLyoqXG4gKiBSZWdpc3RlcnMgYSBmb3JtYXQgZm9yIHVzZSB3aXRoIGFyY2hpdmVyLlxuICpcbiAqIEBwYXJhbSAge1N0cmluZ30gZm9ybWF0IFRoZSBuYW1lIG9mIHRoZSBmb3JtYXQuXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gbW9kdWxlIFRoZSBmdW5jdGlvbiBmb3IgYXJjaGl2ZXIgdG8gaW50ZXJhY3Qgd2l0aC5cbiAqIEByZXR1cm4gdm9pZFxuICovXG52ZW5kaW5nLnJlZ2lzdGVyRm9ybWF0ID0gZnVuY3Rpb24oZm9ybWF0LCBtb2R1bGUpIHtcbiAgaWYgKGZvcm1hdHNbZm9ybWF0XSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncmVnaXN0ZXIoJyArIGZvcm1hdCArICcpOiBmb3JtYXQgYWxyZWFkeSByZWdpc3RlcmVkJyk7XG4gIH1cblxuICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBFcnJvcigncmVnaXN0ZXIoJyArIGZvcm1hdCArICcpOiBmb3JtYXQgbW9kdWxlIGludmFsaWQnKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgbW9kdWxlLnByb3RvdHlwZS5hcHBlbmQgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIG1vZHVsZS5wcm90b3R5cGUuZmluYWxpemUgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlZ2lzdGVyKCcgKyBmb3JtYXQgKyAnKTogZm9ybWF0IG1vZHVsZSBtaXNzaW5nIG1ldGhvZHMnKTtcbiAgfVxuXG4gIGZvcm1hdHNbZm9ybWF0XSA9IG1vZHVsZTtcbn07XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIGZvcm1hdCBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQuXG4gKiBcbiAqIEBwYXJhbSB7U3RyaW5nfSBmb3JtYXQgdGhlIG5hbWUgb2YgdGhlIGZvcm1hdC5cbiAqIEByZXR1cm4gYm9vbGVhblxuICovXG52ZW5kaW5nLmlzUmVnaXN0ZXJlZEZvcm1hdCA9IGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgaWYgKGZvcm1hdHNbZm9ybWF0XSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIFxuICByZXR1cm4gZmFsc2U7XG59O1xuXG52ZW5kaW5nLnJlZ2lzdGVyRm9ybWF0KCd6aXAnLCByZXF1aXJlKCcuL2xpYi9wbHVnaW5zL3ppcCcpKTtcbnZlbmRpbmcucmVnaXN0ZXJGb3JtYXQoJ3RhcicsIHJlcXVpcmUoJy4vbGliL3BsdWdpbnMvdGFyJykpO1xudmVuZGluZy5yZWdpc3RlckZvcm1hdCgnanNvbicsIHJlcXVpcmUoJy4vbGliL3BsdWdpbnMvanNvbicpKTtcblxubW9kdWxlLmV4cG9ydHMgPSB2ZW5kaW5nOyIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jcmVhdGVaaXBVcGxvYWRTdHJlYW0gPSBleHBvcnRzLlppcFVwbG9hZFN0cmVhbSA9IGV4cG9ydHMuREVGQVVMVF9DT01QUkVTU0lPTl9MRVZFTCA9IHZvaWQgMDtcbmNvbnN0IHN0cmVhbSA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwic3RyZWFtXCIpKTtcbmNvbnN0IHByb21pc2VzXzEgPSByZXF1aXJlKFwiZnMvcHJvbWlzZXNcIik7XG5jb25zdCBhcmNoaXZlciA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiYXJjaGl2ZXJcIikpO1xuY29uc3QgY29yZSA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiQGFjdGlvbnMvY29yZVwiKSk7XG5jb25zdCBjb25maWdfMSA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvY29uZmlnXCIpO1xuZXhwb3J0cy5ERUZBVUxUX0NPTVBSRVNTSU9OX0xFVkVMID0gNjtcbi8vIEN1c3RvbSBzdHJlYW0gdHJhbnNmb3JtZXIgc28gd2UgY2FuIHNldCB0aGUgaGlnaFdhdGVyTWFyayBwcm9wZXJ0eVxuLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9pc3N1ZXMvODg1NVxuY2xhc3MgWmlwVXBsb2FkU3RyZWFtIGV4dGVuZHMgc3RyZWFtLlRyYW5zZm9ybSB7XG4gICAgY29uc3RydWN0b3IoYnVmZmVyU2l6ZSkge1xuICAgICAgICBzdXBlcih7XG4gICAgICAgICAgICBoaWdoV2F0ZXJNYXJrOiBidWZmZXJTaXplXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIF90cmFuc2Zvcm0oY2h1bmssIGVuYywgY2IpIHtcbiAgICAgICAgY2IobnVsbCwgY2h1bmspO1xuICAgIH1cbn1cbmV4cG9ydHMuWmlwVXBsb2FkU3RyZWFtID0gWmlwVXBsb2FkU3RyZWFtO1xuZnVuY3Rpb24gY3JlYXRlWmlwVXBsb2FkU3RyZWFtKHVwbG9hZFNwZWNpZmljYXRpb24sIGNvbXByZXNzaW9uTGV2ZWwgPSBleHBvcnRzLkRFRkFVTFRfQ09NUFJFU1NJT05fTEVWRUwpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb3JlLmRlYnVnKGBDcmVhdGluZyBBcnRpZmFjdCBhcmNoaXZlIHdpdGggY29tcHJlc3Npb25MZXZlbDogJHtjb21wcmVzc2lvbkxldmVsfWApO1xuICAgICAgICBjb25zdCB6aXAgPSBhcmNoaXZlci5jcmVhdGUoJ3ppcCcsIHtcbiAgICAgICAgICAgIGhpZ2hXYXRlck1hcms6ICgwLCBjb25maWdfMS5nZXRVcGxvYWRDaHVua1NpemUpKCksXG4gICAgICAgICAgICB6bGliOiB7IGxldmVsOiBjb21wcmVzc2lvbkxldmVsIH1cbiAgICAgICAgfSk7XG4gICAgICAgIC8vIHJlZ2lzdGVyIGNhbGxiYWNrcyBmb3IgdmFyaW91cyBldmVudHMgZHVyaW5nIHRoZSB6aXAgbGlmZWN5Y2xlXG4gICAgICAgIHppcC5vbignZXJyb3InLCB6aXBFcnJvckNhbGxiYWNrKTtcbiAgICAgICAgemlwLm9uKCd3YXJuaW5nJywgemlwV2FybmluZ0NhbGxiYWNrKTtcbiAgICAgICAgemlwLm9uKCdmaW5pc2gnLCB6aXBGaW5pc2hDYWxsYmFjayk7XG4gICAgICAgIHppcC5vbignZW5kJywgemlwRW5kQ2FsbGJhY2spO1xuICAgICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgdXBsb2FkU3BlY2lmaWNhdGlvbikge1xuICAgICAgICAgICAgaWYgKGZpbGUuc291cmNlUGF0aCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHN5bWxpbmsgYW5kIHJlc29sdmUgdGhlIHNvdXJjZSBwYXRoXG4gICAgICAgICAgICAgICAgbGV0IHNvdXJjZVBhdGggPSBmaWxlLnNvdXJjZVBhdGg7XG4gICAgICAgICAgICAgICAgaWYgKGZpbGUuc3RhdHMuaXNTeW1ib2xpY0xpbmsoKSkge1xuICAgICAgICAgICAgICAgICAgICBzb3VyY2VQYXRoID0geWllbGQgKDAsIHByb21pc2VzXzEucmVhbHBhdGgpKGZpbGUuc291cmNlUGF0aCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUgZmlsZSB0byB0aGUgemlwXG4gICAgICAgICAgICAgICAgemlwLmZpbGUoc291cmNlUGF0aCwge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBmaWxlLmRlc3RpbmF0aW9uUGF0aFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gQWRkIGEgZGlyZWN0b3J5IHRvIHRoZSB6aXBcbiAgICAgICAgICAgICAgICB6aXAuYXBwZW5kKCcnLCB7IG5hbWU6IGZpbGUuZGVzdGluYXRpb25QYXRoIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJ1ZmZlclNpemUgPSAoMCwgY29uZmlnXzEuZ2V0VXBsb2FkQ2h1bmtTaXplKSgpO1xuICAgICAgICBjb25zdCB6aXBVcGxvYWRTdHJlYW0gPSBuZXcgWmlwVXBsb2FkU3RyZWFtKGJ1ZmZlclNpemUpO1xuICAgICAgICBjb3JlLmRlYnVnKGBaaXAgd3JpdGUgaGlnaCB3YXRlcm1hcmsgdmFsdWUgJHt6aXBVcGxvYWRTdHJlYW0ud3JpdGFibGVIaWdoV2F0ZXJNYXJrfWApO1xuICAgICAgICBjb3JlLmRlYnVnKGBaaXAgcmVhZCBoaWdoIHdhdGVybWFyayB2YWx1ZSAke3ppcFVwbG9hZFN0cmVhbS5yZWFkYWJsZUhpZ2hXYXRlck1hcmt9YCk7XG4gICAgICAgIHppcC5waXBlKHppcFVwbG9hZFN0cmVhbSk7XG4gICAgICAgIHppcC5maW5hbGl6ZSgpO1xuICAgICAgICByZXR1cm4gemlwVXBsb2FkU3RyZWFtO1xuICAgIH0pO1xufVxuZXhwb3J0cy5jcmVhdGVaaXBVcGxvYWRTdHJlYW0gPSBjcmVhdGVaaXBVcGxvYWRTdHJlYW07XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuY29uc3QgemlwRXJyb3JDYWxsYmFjayA9IChlcnJvcikgPT4ge1xuICAgIGNvcmUuZXJyb3IoJ0FuIGVycm9yIGhhcyBvY2N1cnJlZCB3aGlsZSBjcmVhdGluZyB0aGUgemlwIGZpbGUgZm9yIHVwbG9hZCcpO1xuICAgIGNvcmUuaW5mbyhlcnJvcik7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdBbiBlcnJvciBoYXMgb2NjdXJyZWQgZHVyaW5nIHppcCBjcmVhdGlvbiBmb3IgdGhlIGFydGlmYWN0Jyk7XG59O1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmNvbnN0IHppcFdhcm5pbmdDYWxsYmFjayA9IChlcnJvcikgPT4ge1xuICAgIGlmIChlcnJvci5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICBjb3JlLndhcm5pbmcoJ0VOT0VOVCB3YXJuaW5nIGR1cmluZyBhcnRpZmFjdCB6aXAgY3JlYXRpb24uIE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnknKTtcbiAgICAgICAgY29yZS5pbmZvKGVycm9yKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvcmUud2FybmluZyhgQSBub24tYmxvY2tpbmcgd2FybmluZyBoYXMgb2NjdXJyZWQgZHVyaW5nIGFydGlmYWN0IHppcCBjcmVhdGlvbjogJHtlcnJvci5jb2RlfWApO1xuICAgICAgICBjb3JlLmluZm8oZXJyb3IpO1xuICAgIH1cbn07XG5jb25zdCB6aXBGaW5pc2hDYWxsYmFjayA9ICgpID0+IHtcbiAgICBjb3JlLmRlYnVnKCdaaXAgc3RyZWFtIGZvciB1cGxvYWQgaGFzIGZpbmlzaGVkLicpO1xufTtcbmNvbnN0IHppcEVuZENhbGxiYWNrID0gKCkgPT4ge1xuICAgIGNvcmUuZGVidWcoJ1ppcCBzdHJlYW0gZm9yIHVwbG9hZCBoYXMgZW5kZWQuJyk7XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9emlwLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy51cGxvYWRBcnRpZmFjdCA9IHZvaWQgMDtcbmNvbnN0IGNvcmUgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIkBhY3Rpb25zL2NvcmVcIikpO1xuY29uc3QgcmV0ZW50aW9uXzEgPSByZXF1aXJlKFwiLi9yZXRlbnRpb25cIik7XG5jb25zdCBwYXRoX2FuZF9hcnRpZmFjdF9uYW1lX3ZhbGlkYXRpb25fMSA9IHJlcXVpcmUoXCIuL3BhdGgtYW5kLWFydGlmYWN0LW5hbWUtdmFsaWRhdGlvblwiKTtcbmNvbnN0IGFydGlmYWN0X3R3aXJwX2NsaWVudF8xID0gcmVxdWlyZShcIi4uL3NoYXJlZC9hcnRpZmFjdC10d2lycC1jbGllbnRcIik7XG5jb25zdCB1cGxvYWRfemlwX3NwZWNpZmljYXRpb25fMSA9IHJlcXVpcmUoXCIuL3VwbG9hZC16aXAtc3BlY2lmaWNhdGlvblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvdXRpbFwiKTtcbmNvbnN0IGJsb2JfdXBsb2FkXzEgPSByZXF1aXJlKFwiLi9ibG9iLXVwbG9hZFwiKTtcbmNvbnN0IHppcF8xID0gcmVxdWlyZShcIi4vemlwXCIpO1xuY29uc3QgZ2VuZXJhdGVkXzEgPSByZXF1aXJlKFwiLi4vLi4vZ2VuZXJhdGVkXCIpO1xuY29uc3QgZXJyb3JzXzEgPSByZXF1aXJlKFwiLi4vc2hhcmVkL2Vycm9yc1wiKTtcbmZ1bmN0aW9uIHVwbG9hZEFydGlmYWN0KG5hbWUsIGZpbGVzLCByb290RGlyZWN0b3J5LCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgKDAsIHBhdGhfYW5kX2FydGlmYWN0X25hbWVfdmFsaWRhdGlvbl8xLnZhbGlkYXRlQXJ0aWZhY3ROYW1lKShuYW1lKTtcbiAgICAgICAgKDAsIHVwbG9hZF96aXBfc3BlY2lmaWNhdGlvbl8xLnZhbGlkYXRlUm9vdERpcmVjdG9yeSkocm9vdERpcmVjdG9yeSk7XG4gICAgICAgIGNvbnN0IHppcFNwZWNpZmljYXRpb24gPSAoMCwgdXBsb2FkX3ppcF9zcGVjaWZpY2F0aW9uXzEuZ2V0VXBsb2FkWmlwU3BlY2lmaWNhdGlvbikoZmlsZXMsIHJvb3REaXJlY3RvcnkpO1xuICAgICAgICBpZiAoemlwU3BlY2lmaWNhdGlvbi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBlcnJvcnNfMS5GaWxlc05vdEZvdW5kRXJyb3IoemlwU3BlY2lmaWNhdGlvbi5mbGF0TWFwKHMgPT4gKHMuc291cmNlUGF0aCA/IFtzLnNvdXJjZVBhdGhdIDogW10pKSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZ2V0IHRoZSBJRHMgbmVlZGVkIGZvciB0aGUgYXJ0aWZhY3QgY3JlYXRpb25cbiAgICAgICAgY29uc3QgYmFja2VuZElkcyA9ICgwLCB1dGlsXzEuZ2V0QmFja2VuZElkc0Zyb21Ub2tlbikoKTtcbiAgICAgICAgLy8gY3JlYXRlIHRoZSBhcnRpZmFjdCBjbGllbnRcbiAgICAgICAgY29uc3QgYXJ0aWZhY3RDbGllbnQgPSAoMCwgYXJ0aWZhY3RfdHdpcnBfY2xpZW50XzEuaW50ZXJuYWxBcnRpZmFjdFR3aXJwQ2xpZW50KSgpO1xuICAgICAgICAvLyBjcmVhdGUgdGhlIGFydGlmYWN0XG4gICAgICAgIGNvbnN0IGNyZWF0ZUFydGlmYWN0UmVxID0ge1xuICAgICAgICAgICAgd29ya2Zsb3dSdW5CYWNrZW5kSWQ6IGJhY2tlbmRJZHMud29ya2Zsb3dSdW5CYWNrZW5kSWQsXG4gICAgICAgICAgICB3b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZDogYmFja2VuZElkcy53b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZCxcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICB2ZXJzaW9uOiA0XG4gICAgICAgIH07XG4gICAgICAgIC8vIGlmIHRoZXJlIGlzIGEgcmV0ZW50aW9uIHBlcmlvZCwgYWRkIGl0IHRvIHRoZSByZXF1ZXN0XG4gICAgICAgIGNvbnN0IGV4cGlyZXNBdCA9ICgwLCByZXRlbnRpb25fMS5nZXRFeHBpcmF0aW9uKShvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMucmV0ZW50aW9uRGF5cyk7XG4gICAgICAgIGlmIChleHBpcmVzQXQpIHtcbiAgICAgICAgICAgIGNyZWF0ZUFydGlmYWN0UmVxLmV4cGlyZXNBdCA9IGV4cGlyZXNBdDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjcmVhdGVBcnRpZmFjdFJlc3AgPSB5aWVsZCBhcnRpZmFjdENsaWVudC5DcmVhdGVBcnRpZmFjdChjcmVhdGVBcnRpZmFjdFJlcSk7XG4gICAgICAgIGlmICghY3JlYXRlQXJ0aWZhY3RSZXNwLm9rKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuSW52YWxpZFJlc3BvbnNlRXJyb3IoJ0NyZWF0ZUFydGlmYWN0OiByZXNwb25zZSBmcm9tIGJhY2tlbmQgd2FzIG5vdCBvaycpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHppcFVwbG9hZFN0cmVhbSA9IHlpZWxkICgwLCB6aXBfMS5jcmVhdGVaaXBVcGxvYWRTdHJlYW0pKHppcFNwZWNpZmljYXRpb24sIG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5jb21wcmVzc2lvbkxldmVsKTtcbiAgICAgICAgLy8gVXBsb2FkIHppcCB0byBibG9iIHN0b3JhZ2VcbiAgICAgICAgY29uc3QgdXBsb2FkUmVzdWx0ID0geWllbGQgKDAsIGJsb2JfdXBsb2FkXzEudXBsb2FkWmlwVG9CbG9iU3RvcmFnZSkoY3JlYXRlQXJ0aWZhY3RSZXNwLnNpZ25lZFVwbG9hZFVybCwgemlwVXBsb2FkU3RyZWFtKTtcbiAgICAgICAgLy8gZmluYWxpemUgdGhlIGFydGlmYWN0XG4gICAgICAgIGNvbnN0IGZpbmFsaXplQXJ0aWZhY3RSZXEgPSB7XG4gICAgICAgICAgICB3b3JrZmxvd1J1bkJhY2tlbmRJZDogYmFja2VuZElkcy53b3JrZmxvd1J1bkJhY2tlbmRJZCxcbiAgICAgICAgICAgIHdvcmtmbG93Sm9iUnVuQmFja2VuZElkOiBiYWNrZW5kSWRzLndvcmtmbG93Sm9iUnVuQmFja2VuZElkLFxuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIHNpemU6IHVwbG9hZFJlc3VsdC51cGxvYWRTaXplID8gdXBsb2FkUmVzdWx0LnVwbG9hZFNpemUudG9TdHJpbmcoKSA6ICcwJ1xuICAgICAgICB9O1xuICAgICAgICBpZiAodXBsb2FkUmVzdWx0LnNoYTI1Nkhhc2gpIHtcbiAgICAgICAgICAgIGZpbmFsaXplQXJ0aWZhY3RSZXEuaGFzaCA9IGdlbmVyYXRlZF8xLlN0cmluZ1ZhbHVlLmNyZWF0ZSh7XG4gICAgICAgICAgICAgICAgdmFsdWU6IGBzaGEyNTY6JHt1cGxvYWRSZXN1bHQuc2hhMjU2SGFzaH1gXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb3JlLmluZm8oYEZpbmFsaXppbmcgYXJ0aWZhY3QgdXBsb2FkYCk7XG4gICAgICAgIGNvbnN0IGZpbmFsaXplQXJ0aWZhY3RSZXNwID0geWllbGQgYXJ0aWZhY3RDbGllbnQuRmluYWxpemVBcnRpZmFjdChmaW5hbGl6ZUFydGlmYWN0UmVxKTtcbiAgICAgICAgaWYgKCFmaW5hbGl6ZUFydGlmYWN0UmVzcC5vaykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGVycm9yc18xLkludmFsaWRSZXNwb25zZUVycm9yKCdGaW5hbGl6ZUFydGlmYWN0OiByZXNwb25zZSBmcm9tIGJhY2tlbmQgd2FzIG5vdCBvaycpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFydGlmYWN0SWQgPSBCaWdJbnQoZmluYWxpemVBcnRpZmFjdFJlc3AuYXJ0aWZhY3RJZCk7XG4gICAgICAgIGNvcmUuaW5mbyhgQXJ0aWZhY3QgJHtuYW1lfS56aXAgc3VjY2Vzc2Z1bGx5IGZpbmFsaXplZC4gQXJ0aWZhY3QgSUQgJHthcnRpZmFjdElkfWApO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2l6ZTogdXBsb2FkUmVzdWx0LnVwbG9hZFNpemUsXG4gICAgICAgICAgICBpZDogTnVtYmVyKGFydGlmYWN0SWQpXG4gICAgICAgIH07XG4gICAgfSk7XG59XG5leHBvcnRzLnVwbG9hZEFydGlmYWN0ID0gdXBsb2FkQXJ0aWZhY3Q7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11cGxvYWQtYXJ0aWZhY3QuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQ29udGV4dCA9IHZvaWQgMDtcbmNvbnN0IGZzXzEgPSByZXF1aXJlKFwiZnNcIik7XG5jb25zdCBvc18xID0gcmVxdWlyZShcIm9zXCIpO1xuY2xhc3MgQ29udGV4dCB7XG4gICAgLyoqXG4gICAgICogSHlkcmF0ZSB0aGUgY29udGV4dCBmcm9tIHRoZSBlbnZpcm9ubWVudFxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYztcbiAgICAgICAgdGhpcy5wYXlsb2FkID0ge307XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5HSVRIVUJfRVZFTlRfUEFUSCkge1xuICAgICAgICAgICAgaWYgKGZzXzEuZXhpc3RzU3luYyhwcm9jZXNzLmVudi5HSVRIVUJfRVZFTlRfUEFUSCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBheWxvYWQgPSBKU09OLnBhcnNlKGZzXzEucmVhZEZpbGVTeW5jKHByb2Nlc3MuZW52LkdJVEhVQl9FVkVOVF9QQVRILCB7IGVuY29kaW5nOiAndXRmOCcgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IHByb2Nlc3MuZW52LkdJVEhVQl9FVkVOVF9QQVRIO1xuICAgICAgICAgICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGBHSVRIVUJfRVZFTlRfUEFUSCAke3BhdGh9IGRvZXMgbm90IGV4aXN0JHtvc18xLkVPTH1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmV2ZW50TmFtZSA9IHByb2Nlc3MuZW52LkdJVEhVQl9FVkVOVF9OQU1FO1xuICAgICAgICB0aGlzLnNoYSA9IHByb2Nlc3MuZW52LkdJVEhVQl9TSEE7XG4gICAgICAgIHRoaXMucmVmID0gcHJvY2Vzcy5lbnYuR0lUSFVCX1JFRjtcbiAgICAgICAgdGhpcy53b3JrZmxvdyA9IHByb2Nlc3MuZW52LkdJVEhVQl9XT1JLRkxPVztcbiAgICAgICAgdGhpcy5hY3Rpb24gPSBwcm9jZXNzLmVudi5HSVRIVUJfQUNUSU9OO1xuICAgICAgICB0aGlzLmFjdG9yID0gcHJvY2Vzcy5lbnYuR0lUSFVCX0FDVE9SO1xuICAgICAgICB0aGlzLmpvYiA9IHByb2Nlc3MuZW52LkdJVEhVQl9KT0I7XG4gICAgICAgIHRoaXMucnVuTnVtYmVyID0gcGFyc2VJbnQocHJvY2Vzcy5lbnYuR0lUSFVCX1JVTl9OVU1CRVIsIDEwKTtcbiAgICAgICAgdGhpcy5ydW5JZCA9IHBhcnNlSW50KHByb2Nlc3MuZW52LkdJVEhVQl9SVU5fSUQsIDEwKTtcbiAgICAgICAgdGhpcy5hcGlVcmwgPSAoX2EgPSBwcm9jZXNzLmVudi5HSVRIVUJfQVBJX1VSTCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogYGh0dHBzOi8vYXBpLmdpdGh1Yi5jb21gO1xuICAgICAgICB0aGlzLnNlcnZlclVybCA9IChfYiA9IHByb2Nlc3MuZW52LkdJVEhVQl9TRVJWRVJfVVJMKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBgaHR0cHM6Ly9naXRodWIuY29tYDtcbiAgICAgICAgdGhpcy5ncmFwaHFsVXJsID0gKF9jID0gcHJvY2Vzcy5lbnYuR0lUSFVCX0dSQVBIUUxfVVJMKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiBgaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9ncmFwaHFsYDtcbiAgICB9XG4gICAgZ2V0IGlzc3VlKCkge1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gdGhpcy5wYXlsb2FkO1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCB0aGlzLnJlcG8pLCB7IG51bWJlcjogKHBheWxvYWQuaXNzdWUgfHwgcGF5bG9hZC5wdWxsX3JlcXVlc3QgfHwgcGF5bG9hZCkubnVtYmVyIH0pO1xuICAgIH1cbiAgICBnZXQgcmVwbygpIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52LkdJVEhVQl9SRVBPU0lUT1JZKSB7XG4gICAgICAgICAgICBjb25zdCBbb3duZXIsIHJlcG9dID0gcHJvY2Vzcy5lbnYuR0lUSFVCX1JFUE9TSVRPUlkuc3BsaXQoJy8nKTtcbiAgICAgICAgICAgIHJldHVybiB7IG93bmVyLCByZXBvIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucGF5bG9hZC5yZXBvc2l0b3J5KSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG93bmVyOiB0aGlzLnBheWxvYWQucmVwb3NpdG9yeS5vd25lci5sb2dpbixcbiAgICAgICAgICAgICAgICByZXBvOiB0aGlzLnBheWxvYWQucmVwb3NpdG9yeS5uYW1lXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImNvbnRleHQucmVwbyByZXF1aXJlcyBhIEdJVEhVQl9SRVBPU0lUT1JZIGVudmlyb25tZW50IHZhcmlhYmxlIGxpa2UgJ293bmVyL3JlcG8nXCIpO1xuICAgIH1cbn1cbmV4cG9ydHMuQ29udGV4dCA9IENvbnRleHQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb250ZXh0LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfSk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRBcGlCYXNlVXJsID0gZXhwb3J0cy5nZXRQcm94eUFnZW50ID0gZXhwb3J0cy5nZXRBdXRoU3RyaW5nID0gdm9pZCAwO1xuY29uc3QgaHR0cENsaWVudCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiQGFjdGlvbnMvaHR0cC1jbGllbnRcIikpO1xuZnVuY3Rpb24gZ2V0QXV0aFN0cmluZyh0b2tlbiwgb3B0aW9ucykge1xuICAgIGlmICghdG9rZW4gJiYgIW9wdGlvbnMuYXV0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlciB0b2tlbiBvciBvcHRzLmF1dGggaXMgcmVxdWlyZWQnKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodG9rZW4gJiYgb3B0aW9ucy5hdXRoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUGFyYW1ldGVycyB0b2tlbiBhbmQgb3B0cy5hdXRoIG1heSBub3QgYm90aCBiZSBzcGVjaWZpZWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiBvcHRpb25zLmF1dGggPT09ICdzdHJpbmcnID8gb3B0aW9ucy5hdXRoIDogYHRva2VuICR7dG9rZW59YDtcbn1cbmV4cG9ydHMuZ2V0QXV0aFN0cmluZyA9IGdldEF1dGhTdHJpbmc7XG5mdW5jdGlvbiBnZXRQcm94eUFnZW50KGRlc3RpbmF0aW9uVXJsKSB7XG4gICAgY29uc3QgaGMgPSBuZXcgaHR0cENsaWVudC5IdHRwQ2xpZW50KCk7XG4gICAgcmV0dXJuIGhjLmdldEFnZW50KGRlc3RpbmF0aW9uVXJsKTtcbn1cbmV4cG9ydHMuZ2V0UHJveHlBZ2VudCA9IGdldFByb3h5QWdlbnQ7XG5mdW5jdGlvbiBnZXRBcGlCYXNlVXJsKCkge1xuICAgIHJldHVybiBwcm9jZXNzLmVudlsnR0lUSFVCX0FQSV9VUkwnXSB8fCAnaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbSc7XG59XG5leHBvcnRzLmdldEFwaUJhc2VVcmwgPSBnZXRBcGlCYXNlVXJsO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbHMuanMubWFwIiwKICAgICIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmZ1bmN0aW9uIGdldFVzZXJBZ2VudCgpIHtcbiAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgPT09IFwib2JqZWN0XCIgJiYgXCJ1c2VyQWdlbnRcIiBpbiBuYXZpZ2F0b3IpIHtcbiAgICByZXR1cm4gbmF2aWdhdG9yLnVzZXJBZ2VudDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgcHJvY2VzcyA9PT0gXCJvYmplY3RcIiAmJiBwcm9jZXNzLnZlcnNpb24gIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBgTm9kZS5qcy8ke3Byb2Nlc3MudmVyc2lvbi5zdWJzdHIoMSl9ICgke3Byb2Nlc3MucGxhdGZvcm19OyAke3Byb2Nlc3MuYXJjaH0pYDtcbiAgfVxuXG4gIHJldHVybiBcIjxlbnZpcm9ubWVudCB1bmRldGVjdGFibGU+XCI7XG59XG5cbmV4cG9ydHMuZ2V0VXNlckFnZW50ID0gZ2V0VXNlckFnZW50O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXG4iLAogICAgIm1vZHVsZS5leHBvcnRzID0gcmVnaXN0ZXI7XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyKHN0YXRlLCBuYW1lLCBtZXRob2QsIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiBtZXRob2QgIT09IFwiZnVuY3Rpb25cIikge1xuICAgIHRocm93IG5ldyBFcnJvcihcIm1ldGhvZCBmb3IgYmVmb3JlIGhvb2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICB9XG5cbiAgaWYgKCFvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkobmFtZSkpIHtcbiAgICByZXR1cm4gbmFtZS5yZXZlcnNlKCkucmVkdWNlKGZ1bmN0aW9uIChjYWxsYmFjaywgbmFtZSkge1xuICAgICAgcmV0dXJuIHJlZ2lzdGVyLmJpbmQobnVsbCwgc3RhdGUsIG5hbWUsIGNhbGxiYWNrLCBvcHRpb25zKTtcbiAgICB9LCBtZXRob2QpKCk7XG4gIH1cblxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFzdGF0ZS5yZWdpc3RyeVtuYW1lXSkge1xuICAgICAgcmV0dXJuIG1ldGhvZChvcHRpb25zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGUucmVnaXN0cnlbbmFtZV0ucmVkdWNlKGZ1bmN0aW9uIChtZXRob2QsIHJlZ2lzdGVyZWQpIHtcbiAgICAgIHJldHVybiByZWdpc3RlcmVkLmhvb2suYmluZChudWxsLCBtZXRob2QsIG9wdGlvbnMpO1xuICAgIH0sIG1ldGhvZCkoKTtcbiAgfSk7XG59XG4iLAogICAgIm1vZHVsZS5leHBvcnRzID0gYWRkSG9vaztcblxuZnVuY3Rpb24gYWRkSG9vayhzdGF0ZSwga2luZCwgbmFtZSwgaG9vaykge1xuICB2YXIgb3JpZyA9IGhvb2s7XG4gIGlmICghc3RhdGUucmVnaXN0cnlbbmFtZV0pIHtcbiAgICBzdGF0ZS5yZWdpc3RyeVtuYW1lXSA9IFtdO1xuICB9XG5cbiAgaWYgKGtpbmQgPT09IFwiYmVmb3JlXCIpIHtcbiAgICBob29rID0gZnVuY3Rpb24gKG1ldGhvZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgICAgIC50aGVuKG9yaWcuYmluZChudWxsLCBvcHRpb25zKSlcbiAgICAgICAgLnRoZW4obWV0aG9kLmJpbmQobnVsbCwgb3B0aW9ucykpO1xuICAgIH07XG4gIH1cblxuICBpZiAoa2luZCA9PT0gXCJhZnRlclwiKSB7XG4gICAgaG9vayA9IGZ1bmN0aW9uIChtZXRob2QsIG9wdGlvbnMpIHtcbiAgICAgIHZhciByZXN1bHQ7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICAgICAgLnRoZW4obWV0aG9kLmJpbmQobnVsbCwgb3B0aW9ucykpXG4gICAgICAgIC50aGVuKGZ1bmN0aW9uIChyZXN1bHRfKSB7XG4gICAgICAgICAgcmVzdWx0ID0gcmVzdWx0XztcbiAgICAgICAgICByZXR1cm4gb3JpZyhyZXN1bHQsIG9wdGlvbnMpO1xuICAgICAgICB9KVxuICAgICAgICAudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgfVxuXG4gIGlmIChraW5kID09PSBcImVycm9yXCIpIHtcbiAgICBob29rID0gZnVuY3Rpb24gKG1ldGhvZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgICAgIC50aGVuKG1ldGhvZC5iaW5kKG51bGwsIG9wdGlvbnMpKVxuICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIG9yaWcoZXJyb3IsIG9wdGlvbnMpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGUucmVnaXN0cnlbbmFtZV0ucHVzaCh7XG4gICAgaG9vazogaG9vayxcbiAgICBvcmlnOiBvcmlnLFxuICB9KTtcbn1cbiIsCiAgICAibW9kdWxlLmV4cG9ydHMgPSByZW1vdmVIb29rO1xuXG5mdW5jdGlvbiByZW1vdmVIb29rKHN0YXRlLCBuYW1lLCBtZXRob2QpIHtcbiAgaWYgKCFzdGF0ZS5yZWdpc3RyeVtuYW1lXSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBpbmRleCA9IHN0YXRlLnJlZ2lzdHJ5W25hbWVdXG4gICAgLm1hcChmdW5jdGlvbiAocmVnaXN0ZXJlZCkge1xuICAgICAgcmV0dXJuIHJlZ2lzdGVyZWQub3JpZztcbiAgICB9KVxuICAgIC5pbmRleE9mKG1ldGhvZCk7XG5cbiAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRlLnJlZ2lzdHJ5W25hbWVdLnNwbGljZShpbmRleCwgMSk7XG59XG4iLAogICAgInZhciByZWdpc3RlciA9IHJlcXVpcmUoXCIuL2xpYi9yZWdpc3RlclwiKTtcbnZhciBhZGRIb29rID0gcmVxdWlyZShcIi4vbGliL2FkZFwiKTtcbnZhciByZW1vdmVIb29rID0gcmVxdWlyZShcIi4vbGliL3JlbW92ZVwiKTtcblxuLy8gYmluZCB3aXRoIGFycmF5IG9mIGFyZ3VtZW50czogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzIxNzkyOTEzXG52YXIgYmluZCA9IEZ1bmN0aW9uLmJpbmQ7XG52YXIgYmluZGFibGUgPSBiaW5kLmJpbmQoYmluZCk7XG5cbmZ1bmN0aW9uIGJpbmRBcGkoaG9vaywgc3RhdGUsIG5hbWUpIHtcbiAgdmFyIHJlbW92ZUhvb2tSZWYgPSBiaW5kYWJsZShyZW1vdmVIb29rLCBudWxsKS5hcHBseShcbiAgICBudWxsLFxuICAgIG5hbWUgPyBbc3RhdGUsIG5hbWVdIDogW3N0YXRlXVxuICApO1xuICBob29rLmFwaSA9IHsgcmVtb3ZlOiByZW1vdmVIb29rUmVmIH07XG4gIGhvb2sucmVtb3ZlID0gcmVtb3ZlSG9va1JlZjtcbiAgW1wiYmVmb3JlXCIsIFwiZXJyb3JcIiwgXCJhZnRlclwiLCBcIndyYXBcIl0uZm9yRWFjaChmdW5jdGlvbiAoa2luZCkge1xuICAgIHZhciBhcmdzID0gbmFtZSA/IFtzdGF0ZSwga2luZCwgbmFtZV0gOiBbc3RhdGUsIGtpbmRdO1xuICAgIGhvb2tba2luZF0gPSBob29rLmFwaVtraW5kXSA9IGJpbmRhYmxlKGFkZEhvb2ssIG51bGwpLmFwcGx5KG51bGwsIGFyZ3MpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gSG9va1Npbmd1bGFyKCkge1xuICB2YXIgc2luZ3VsYXJIb29rTmFtZSA9IFwiaFwiO1xuICB2YXIgc2luZ3VsYXJIb29rU3RhdGUgPSB7XG4gICAgcmVnaXN0cnk6IHt9LFxuICB9O1xuICB2YXIgc2luZ3VsYXJIb29rID0gcmVnaXN0ZXIuYmluZChudWxsLCBzaW5ndWxhckhvb2tTdGF0ZSwgc2luZ3VsYXJIb29rTmFtZSk7XG4gIGJpbmRBcGkoc2luZ3VsYXJIb29rLCBzaW5ndWxhckhvb2tTdGF0ZSwgc2luZ3VsYXJIb29rTmFtZSk7XG4gIHJldHVybiBzaW5ndWxhckhvb2s7XG59XG5cbmZ1bmN0aW9uIEhvb2tDb2xsZWN0aW9uKCkge1xuICB2YXIgc3RhdGUgPSB7XG4gICAgcmVnaXN0cnk6IHt9LFxuICB9O1xuXG4gIHZhciBob29rID0gcmVnaXN0ZXIuYmluZChudWxsLCBzdGF0ZSk7XG4gIGJpbmRBcGkoaG9vaywgc3RhdGUpO1xuXG4gIHJldHVybiBob29rO1xufVxuXG52YXIgY29sbGVjdGlvbkhvb2tEZXByZWNhdGlvbk1lc3NhZ2VEaXNwbGF5ZWQgPSBmYWxzZTtcbmZ1bmN0aW9uIEhvb2soKSB7XG4gIGlmICghY29sbGVjdGlvbkhvb2tEZXByZWNhdGlvbk1lc3NhZ2VEaXNwbGF5ZWQpIHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICAnW2JlZm9yZS1hZnRlci1ob29rXTogXCJIb29rKClcIiByZXB1cnBvc2luZyB3YXJuaW5nLCB1c2UgXCJIb29rLkNvbGxlY3Rpb24oKVwiLiBSZWFkIG1vcmU6IGh0dHBzOi8vZ2l0LmlvL3VwZ3JhZGUtYmVmb3JlLWFmdGVyLWhvb2stdG8tMS40J1xuICAgICk7XG4gICAgY29sbGVjdGlvbkhvb2tEZXByZWNhdGlvbk1lc3NhZ2VEaXNwbGF5ZWQgPSB0cnVlO1xuICB9XG4gIHJldHVybiBIb29rQ29sbGVjdGlvbigpO1xufVxuXG5Ib29rLlNpbmd1bGFyID0gSG9va1Npbmd1bGFyLmJpbmQoKTtcbkhvb2suQ29sbGVjdGlvbiA9IEhvb2tDb2xsZWN0aW9uLmJpbmQoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBIb29rO1xuLy8gZXhwb3NlIGNvbnN0cnVjdG9ycyBhcyBhIG5hbWVkIHByb3BlcnR5IGZvciBUeXBlU2NyaXB0XG5tb2R1bGUuZXhwb3J0cy5Ib29rID0gSG9vaztcbm1vZHVsZS5leHBvcnRzLlNpbmd1bGFyID0gSG9vay5TaW5ndWxhcjtcbm1vZHVsZS5leHBvcnRzLkNvbGxlY3Rpb24gPSBIb29rLkNvbGxlY3Rpb247XG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuLyohXG4gKiBpcy1wbGFpbi1vYmplY3QgPGh0dHBzOi8vZ2l0aHViLmNvbS9qb25zY2hsaW5rZXJ0L2lzLXBsYWluLW9iamVjdD5cbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxNywgSm9uIFNjaGxpbmtlcnQuXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKi9cblxuZnVuY3Rpb24gaXNPYmplY3Qobykge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pID09PSAnW29iamVjdCBPYmplY3RdJztcbn1cblxuZnVuY3Rpb24gaXNQbGFpbk9iamVjdChvKSB7XG4gIHZhciBjdG9yLHByb3Q7XG5cbiAgaWYgKGlzT2JqZWN0KG8pID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuXG4gIC8vIElmIGhhcyBtb2RpZmllZCBjb25zdHJ1Y3RvclxuICBjdG9yID0gby5jb25zdHJ1Y3RvcjtcbiAgaWYgKGN0b3IgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHRydWU7XG5cbiAgLy8gSWYgaGFzIG1vZGlmaWVkIHByb3RvdHlwZVxuICBwcm90ID0gY3Rvci5wcm90b3R5cGU7XG4gIGlmIChpc09iamVjdChwcm90KSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcblxuICAvLyBJZiBjb25zdHJ1Y3RvciBkb2VzIG5vdCBoYXZlIGFuIE9iamVjdC1zcGVjaWZpYyBtZXRob2RcbiAgaWYgKHByb3QuaGFzT3duUHJvcGVydHkoJ2lzUHJvdG90eXBlT2YnKSA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBNb3N0IGxpa2VseSBhIHBsYWluIE9iamVjdFxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0cy5pc1BsYWluT2JqZWN0ID0gaXNQbGFpbk9iamVjdDtcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG52YXIgaXNQbGFpbk9iamVjdCA9IHJlcXVpcmUoJ2lzLXBsYWluLW9iamVjdCcpO1xudmFyIHVuaXZlcnNhbFVzZXJBZ2VudCA9IHJlcXVpcmUoJ3VuaXZlcnNhbC11c2VyLWFnZW50Jyk7XG5cbmZ1bmN0aW9uIGxvd2VyY2FzZUtleXMob2JqZWN0KSB7XG4gIGlmICghb2JqZWN0KSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCkucmVkdWNlKChuZXdPYmosIGtleSkgPT4ge1xuICAgIG5ld09ialtrZXkudG9Mb3dlckNhc2UoKV0gPSBvYmplY3Rba2V5XTtcbiAgICByZXR1cm4gbmV3T2JqO1xuICB9LCB7fSk7XG59XG5cbmZ1bmN0aW9uIG1lcmdlRGVlcChkZWZhdWx0cywgb3B0aW9ucykge1xuICBjb25zdCByZXN1bHQgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0cyk7XG4gIE9iamVjdC5rZXlzKG9wdGlvbnMpLmZvckVhY2goa2V5ID0+IHtcbiAgICBpZiAoaXNQbGFpbk9iamVjdC5pc1BsYWluT2JqZWN0KG9wdGlvbnNba2V5XSkpIHtcbiAgICAgIGlmICghKGtleSBpbiBkZWZhdWx0cykpIE9iamVjdC5hc3NpZ24ocmVzdWx0LCB7XG4gICAgICAgIFtrZXldOiBvcHRpb25zW2tleV1cbiAgICAgIH0pO2Vsc2UgcmVzdWx0W2tleV0gPSBtZXJnZURlZXAoZGVmYXVsdHNba2V5XSwgb3B0aW9uc1trZXldKTtcbiAgICB9IGVsc2Uge1xuICAgICAgT2JqZWN0LmFzc2lnbihyZXN1bHQsIHtcbiAgICAgICAgW2tleV06IG9wdGlvbnNba2V5XVxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlVW5kZWZpbmVkUHJvcGVydGllcyhvYmopIHtcbiAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKG9ialtrZXldID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGRlbGV0ZSBvYmpba2V5XTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2JqO1xufVxuXG5mdW5jdGlvbiBtZXJnZShkZWZhdWx0cywgcm91dGUsIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiByb3V0ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgIGxldCBbbWV0aG9kLCB1cmxdID0gcm91dGUuc3BsaXQoXCIgXCIpO1xuICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHVybCA/IHtcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybFxuICAgIH0gOiB7XG4gICAgICB1cmw6IG1ldGhvZFxuICAgIH0sIG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCByb3V0ZSk7XG4gIH0gLy8gbG93ZXJjYXNlIGhlYWRlciBuYW1lcyBiZWZvcmUgbWVyZ2luZyB3aXRoIGRlZmF1bHRzIHRvIGF2b2lkIGR1cGxpY2F0ZXNcblxuXG4gIG9wdGlvbnMuaGVhZGVycyA9IGxvd2VyY2FzZUtleXMob3B0aW9ucy5oZWFkZXJzKTsgLy8gcmVtb3ZlIHByb3BlcnRpZXMgd2l0aCB1bmRlZmluZWQgdmFsdWVzIGJlZm9yZSBtZXJnaW5nXG5cbiAgcmVtb3ZlVW5kZWZpbmVkUHJvcGVydGllcyhvcHRpb25zKTtcbiAgcmVtb3ZlVW5kZWZpbmVkUHJvcGVydGllcyhvcHRpb25zLmhlYWRlcnMpO1xuICBjb25zdCBtZXJnZWRPcHRpb25zID0gbWVyZ2VEZWVwKGRlZmF1bHRzIHx8IHt9LCBvcHRpb25zKTsgLy8gbWVkaWFUeXBlLnByZXZpZXdzIGFycmF5cyBhcmUgbWVyZ2VkLCBpbnN0ZWFkIG9mIG92ZXJ3cml0dGVuXG5cbiAgaWYgKGRlZmF1bHRzICYmIGRlZmF1bHRzLm1lZGlhVHlwZS5wcmV2aWV3cy5sZW5ndGgpIHtcbiAgICBtZXJnZWRPcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cyA9IGRlZmF1bHRzLm1lZGlhVHlwZS5wcmV2aWV3cy5maWx0ZXIocHJldmlldyA9PiAhbWVyZ2VkT3B0aW9ucy5tZWRpYVR5cGUucHJldmlld3MuaW5jbHVkZXMocHJldmlldykpLmNvbmNhdChtZXJnZWRPcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cyk7XG4gIH1cblxuICBtZXJnZWRPcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cyA9IG1lcmdlZE9wdGlvbnMubWVkaWFUeXBlLnByZXZpZXdzLm1hcChwcmV2aWV3ID0+IHByZXZpZXcucmVwbGFjZSgvLXByZXZpZXcvLCBcIlwiKSk7XG4gIHJldHVybiBtZXJnZWRPcHRpb25zO1xufVxuXG5mdW5jdGlvbiBhZGRRdWVyeVBhcmFtZXRlcnModXJsLCBwYXJhbWV0ZXJzKSB7XG4gIGNvbnN0IHNlcGFyYXRvciA9IC9cXD8vLnRlc3QodXJsKSA/IFwiJlwiIDogXCI/XCI7XG4gIGNvbnN0IG5hbWVzID0gT2JqZWN0LmtleXMocGFyYW1ldGVycyk7XG5cbiAgaWYgKG5hbWVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB1cmw7XG4gIH1cblxuICByZXR1cm4gdXJsICsgc2VwYXJhdG9yICsgbmFtZXMubWFwKG5hbWUgPT4ge1xuICAgIGlmIChuYW1lID09PSBcInFcIikge1xuICAgICAgcmV0dXJuIFwicT1cIiArIHBhcmFtZXRlcnMucS5zcGxpdChcIitcIikubWFwKGVuY29kZVVSSUNvbXBvbmVudCkuam9pbihcIitcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGAke25hbWV9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtZXRlcnNbbmFtZV0pfWA7XG4gIH0pLmpvaW4oXCImXCIpO1xufVxuXG5jb25zdCB1cmxWYXJpYWJsZVJlZ2V4ID0gL1xce1tefV0rXFx9L2c7XG5cbmZ1bmN0aW9uIHJlbW92ZU5vbkNoYXJzKHZhcmlhYmxlTmFtZSkge1xuICByZXR1cm4gdmFyaWFibGVOYW1lLnJlcGxhY2UoL15cXFcrfFxcVyskL2csIFwiXCIpLnNwbGl0KC8sLyk7XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RVcmxWYXJpYWJsZU5hbWVzKHVybCkge1xuICBjb25zdCBtYXRjaGVzID0gdXJsLm1hdGNoKHVybFZhcmlhYmxlUmVnZXgpO1xuXG4gIGlmICghbWF0Y2hlcykge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHJldHVybiBtYXRjaGVzLm1hcChyZW1vdmVOb25DaGFycykucmVkdWNlKChhLCBiKSA9PiBhLmNvbmNhdChiKSwgW10pO1xufVxuXG5mdW5jdGlvbiBvbWl0KG9iamVjdCwga2V5c1RvT21pdCkge1xuICByZXR1cm4gT2JqZWN0LmtleXMob2JqZWN0KS5maWx0ZXIob3B0aW9uID0+ICFrZXlzVG9PbWl0LmluY2x1ZGVzKG9wdGlvbikpLnJlZHVjZSgob2JqLCBrZXkpID0+IHtcbiAgICBvYmpba2V5XSA9IG9iamVjdFtrZXldO1xuICAgIHJldHVybiBvYmo7XG4gIH0sIHt9KTtcbn1cblxuLy8gQmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL2JyYW1zdGVpbi91cmwtdGVtcGxhdGUsIGxpY2Vuc2VkIHVuZGVyIEJTRFxuLy8gVE9ETzogY3JlYXRlIHNlcGFyYXRlIHBhY2thZ2UuXG4vL1xuLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTQsIEJyYW0gU3RlaW5cbi8vIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbi8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uc1xuLy8gYXJlIG1ldDpcbi8vICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuLy8gICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbi8vICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodFxuLy8gICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGVcbi8vICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuLy8gIDMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0c1xuLy8gICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIFwiQVMgSVNcIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRFxuLy8gV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PXG4vLyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsXG4vLyBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORyxcbi8vIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsXG4vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZXG4vLyBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElOR1xuLy8gTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLFxuLy8gRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cblxuLyogaXN0YW5idWwgaWdub3JlIGZpbGUgKi9cbmZ1bmN0aW9uIGVuY29kZVJlc2VydmVkKHN0cikge1xuICByZXR1cm4gc3RyLnNwbGl0KC8oJVswLTlBLUZhLWZdezJ9KS9nKS5tYXAoZnVuY3Rpb24gKHBhcnQpIHtcbiAgICBpZiAoIS8lWzAtOUEtRmEtZl0vLnRlc3QocGFydCkpIHtcbiAgICAgIHBhcnQgPSBlbmNvZGVVUkkocGFydCkucmVwbGFjZSgvJTVCL2csIFwiW1wiKS5yZXBsYWNlKC8lNUQvZywgXCJdXCIpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJ0O1xuICB9KS5qb2luKFwiXCIpO1xufVxuXG5mdW5jdGlvbiBlbmNvZGVVbnJlc2VydmVkKHN0cikge1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHN0cikucmVwbGFjZSgvWyEnKCkqXS9nLCBmdW5jdGlvbiAoYykge1xuICAgIHJldHVybiBcIiVcIiArIGMuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGVuY29kZVZhbHVlKG9wZXJhdG9yLCB2YWx1ZSwga2V5KSB7XG4gIHZhbHVlID0gb3BlcmF0b3IgPT09IFwiK1wiIHx8IG9wZXJhdG9yID09PSBcIiNcIiA/IGVuY29kZVJlc2VydmVkKHZhbHVlKSA6IGVuY29kZVVucmVzZXJ2ZWQodmFsdWUpO1xuXG4gIGlmIChrZXkpIHtcbiAgICByZXR1cm4gZW5jb2RlVW5yZXNlcnZlZChrZXkpICsgXCI9XCIgKyB2YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNEZWZpbmVkKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsO1xufVxuXG5mdW5jdGlvbiBpc0tleU9wZXJhdG9yKG9wZXJhdG9yKSB7XG4gIHJldHVybiBvcGVyYXRvciA9PT0gXCI7XCIgfHwgb3BlcmF0b3IgPT09IFwiJlwiIHx8IG9wZXJhdG9yID09PSBcIj9cIjtcbn1cblxuZnVuY3Rpb24gZ2V0VmFsdWVzKGNvbnRleHQsIG9wZXJhdG9yLCBrZXksIG1vZGlmaWVyKSB7XG4gIHZhciB2YWx1ZSA9IGNvbnRleHRba2V5XSxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIGlmIChpc0RlZmluZWQodmFsdWUpICYmIHZhbHVlICE9PSBcIlwiKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgdmFsdWUgPSB2YWx1ZS50b1N0cmluZygpO1xuXG4gICAgICBpZiAobW9kaWZpZXIgJiYgbW9kaWZpZXIgIT09IFwiKlwiKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUuc3Vic3RyaW5nKDAsIHBhcnNlSW50KG1vZGlmaWVyLCAxMCkpO1xuICAgICAgfVxuXG4gICAgICByZXN1bHQucHVzaChlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWUsIGlzS2V5T3BlcmF0b3Iob3BlcmF0b3IpID8ga2V5IDogXCJcIikpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAobW9kaWZpZXIgPT09IFwiKlwiKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgIHZhbHVlLmZpbHRlcihpc0RlZmluZWQpLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaChlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWUsIGlzS2V5T3BlcmF0b3Iob3BlcmF0b3IpID8ga2V5IDogXCJcIikpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIE9iamVjdC5rZXlzKHZhbHVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICBpZiAoaXNEZWZpbmVkKHZhbHVlW2tdKSkge1xuICAgICAgICAgICAgICByZXN1bHQucHVzaChlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWVba10sIGspKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdG1wID0gW107XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgdmFsdWUuZmlsdGVyKGlzRGVmaW5lZCkuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRtcC5wdXNoKGVuY29kZVZhbHVlKG9wZXJhdG9yLCB2YWx1ZSkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIE9iamVjdC5rZXlzKHZhbHVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICBpZiAoaXNEZWZpbmVkKHZhbHVlW2tdKSkge1xuICAgICAgICAgICAgICB0bXAucHVzaChlbmNvZGVVbnJlc2VydmVkKGspKTtcbiAgICAgICAgICAgICAgdG1wLnB1c2goZW5jb2RlVmFsdWUob3BlcmF0b3IsIHZhbHVlW2tdLnRvU3RyaW5nKCkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0tleU9wZXJhdG9yKG9wZXJhdG9yKSkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKGVuY29kZVVucmVzZXJ2ZWQoa2V5KSArIFwiPVwiICsgdG1wLmpvaW4oXCIsXCIpKTtcbiAgICAgICAgfSBlbHNlIGlmICh0bXAubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2godG1wLmpvaW4oXCIsXCIpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAob3BlcmF0b3IgPT09IFwiO1wiKSB7XG4gICAgICBpZiAoaXNEZWZpbmVkKHZhbHVlKSkge1xuICAgICAgICByZXN1bHQucHVzaChlbmNvZGVVbnJlc2VydmVkKGtleSkpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFwiXCIgJiYgKG9wZXJhdG9yID09PSBcIiZcIiB8fCBvcGVyYXRvciA9PT0gXCI/XCIpKSB7XG4gICAgICByZXN1bHQucHVzaChlbmNvZGVVbnJlc2VydmVkKGtleSkgKyBcIj1cIik7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gXCJcIikge1xuICAgICAgcmVzdWx0LnB1c2goXCJcIik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gcGFyc2VVcmwodGVtcGxhdGUpIHtcbiAgcmV0dXJuIHtcbiAgICBleHBhbmQ6IGV4cGFuZC5iaW5kKG51bGwsIHRlbXBsYXRlKVxuICB9O1xufVxuXG5mdW5jdGlvbiBleHBhbmQodGVtcGxhdGUsIGNvbnRleHQpIHtcbiAgdmFyIG9wZXJhdG9ycyA9IFtcIitcIiwgXCIjXCIsIFwiLlwiLCBcIi9cIiwgXCI7XCIsIFwiP1wiLCBcIiZcIl07XG4gIHJldHVybiB0ZW1wbGF0ZS5yZXBsYWNlKC9cXHsoW15cXHtcXH1dKylcXH18KFteXFx7XFx9XSspL2csIGZ1bmN0aW9uIChfLCBleHByZXNzaW9uLCBsaXRlcmFsKSB7XG4gICAgaWYgKGV4cHJlc3Npb24pIHtcbiAgICAgIGxldCBvcGVyYXRvciA9IFwiXCI7XG4gICAgICBjb25zdCB2YWx1ZXMgPSBbXTtcblxuICAgICAgaWYgKG9wZXJhdG9ycy5pbmRleE9mKGV4cHJlc3Npb24uY2hhckF0KDApKSAhPT0gLTEpIHtcbiAgICAgICAgb3BlcmF0b3IgPSBleHByZXNzaW9uLmNoYXJBdCgwKTtcbiAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb24uc3Vic3RyKDEpO1xuICAgICAgfVxuXG4gICAgICBleHByZXNzaW9uLnNwbGl0KC8sL2cpLmZvckVhY2goZnVuY3Rpb24gKHZhcmlhYmxlKSB7XG4gICAgICAgIHZhciB0bXAgPSAvKFteOlxcKl0qKSg/OjooXFxkKyl8KFxcKikpPy8uZXhlYyh2YXJpYWJsZSk7XG4gICAgICAgIHZhbHVlcy5wdXNoKGdldFZhbHVlcyhjb250ZXh0LCBvcGVyYXRvciwgdG1wWzFdLCB0bXBbMl0gfHwgdG1wWzNdKSk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKG9wZXJhdG9yICYmIG9wZXJhdG9yICE9PSBcIitcIikge1xuICAgICAgICB2YXIgc2VwYXJhdG9yID0gXCIsXCI7XG5cbiAgICAgICAgaWYgKG9wZXJhdG9yID09PSBcIj9cIikge1xuICAgICAgICAgIHNlcGFyYXRvciA9IFwiJlwiO1xuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdG9yICE9PSBcIiNcIikge1xuICAgICAgICAgIHNlcGFyYXRvciA9IG9wZXJhdG9yO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICh2YWx1ZXMubGVuZ3RoICE9PSAwID8gb3BlcmF0b3IgOiBcIlwiKSArIHZhbHVlcy5qb2luKHNlcGFyYXRvcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdmFsdWVzLmpvaW4oXCIsXCIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZW5jb2RlUmVzZXJ2ZWQobGl0ZXJhbCk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gcGFyc2Uob3B0aW9ucykge1xuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jbWV0aG9kc1xuICBsZXQgbWV0aG9kID0gb3B0aW9ucy5tZXRob2QudG9VcHBlckNhc2UoKTsgLy8gcmVwbGFjZSA6dmFybmFtZSB3aXRoIHt2YXJuYW1lfSB0byBtYWtlIGl0IFJGQyA2NTcwIGNvbXBhdGlibGVcblxuICBsZXQgdXJsID0gKG9wdGlvbnMudXJsIHx8IFwiL1wiKS5yZXBsYWNlKC86KFthLXpdXFx3KykvZywgXCJ7JDF9XCIpO1xuICBsZXQgaGVhZGVycyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuaGVhZGVycyk7XG4gIGxldCBib2R5O1xuICBsZXQgcGFyYW1ldGVycyA9IG9taXQob3B0aW9ucywgW1wibWV0aG9kXCIsIFwiYmFzZVVybFwiLCBcInVybFwiLCBcImhlYWRlcnNcIiwgXCJyZXF1ZXN0XCIsIFwibWVkaWFUeXBlXCJdKTsgLy8gZXh0cmFjdCB2YXJpYWJsZSBuYW1lcyBmcm9tIFVSTCB0byBjYWxjdWxhdGUgcmVtYWluaW5nIHZhcmlhYmxlcyBsYXRlclxuXG4gIGNvbnN0IHVybFZhcmlhYmxlTmFtZXMgPSBleHRyYWN0VXJsVmFyaWFibGVOYW1lcyh1cmwpO1xuICB1cmwgPSBwYXJzZVVybCh1cmwpLmV4cGFuZChwYXJhbWV0ZXJzKTtcblxuICBpZiAoIS9eaHR0cC8udGVzdCh1cmwpKSB7XG4gICAgdXJsID0gb3B0aW9ucy5iYXNlVXJsICsgdXJsO1xuICB9XG5cbiAgY29uc3Qgb21pdHRlZFBhcmFtZXRlcnMgPSBPYmplY3Qua2V5cyhvcHRpb25zKS5maWx0ZXIob3B0aW9uID0+IHVybFZhcmlhYmxlTmFtZXMuaW5jbHVkZXMob3B0aW9uKSkuY29uY2F0KFwiYmFzZVVybFwiKTtcbiAgY29uc3QgcmVtYWluaW5nUGFyYW1ldGVycyA9IG9taXQocGFyYW1ldGVycywgb21pdHRlZFBhcmFtZXRlcnMpO1xuICBjb25zdCBpc0JpbmFyeVJlcXVlc3QgPSAvYXBwbGljYXRpb25cXC9vY3RldC1zdHJlYW0vaS50ZXN0KGhlYWRlcnMuYWNjZXB0KTtcblxuICBpZiAoIWlzQmluYXJ5UmVxdWVzdCkge1xuICAgIGlmIChvcHRpb25zLm1lZGlhVHlwZS5mb3JtYXQpIHtcbiAgICAgIC8vIGUuZy4gYXBwbGljYXRpb24vdm5kLmdpdGh1Yi52Mytqc29uID0+IGFwcGxpY2F0aW9uL3ZuZC5naXRodWIudjMucmF3XG4gICAgICBoZWFkZXJzLmFjY2VwdCA9IGhlYWRlcnMuYWNjZXB0LnNwbGl0KC8sLykubWFwKHByZXZpZXcgPT4gcHJldmlldy5yZXBsYWNlKC9hcHBsaWNhdGlvblxcL3ZuZChcXC5cXHcrKShcXC52Myk/KFxcLlxcdyspPyhcXCtqc29uKT8kLywgYGFwcGxpY2F0aW9uL3ZuZCQxJDIuJHtvcHRpb25zLm1lZGlhVHlwZS5mb3JtYXR9YCkpLmpvaW4oXCIsXCIpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHByZXZpZXdzRnJvbUFjY2VwdEhlYWRlciA9IGhlYWRlcnMuYWNjZXB0Lm1hdGNoKC9bXFx3LV0rKD89LXByZXZpZXcpL2cpIHx8IFtdO1xuICAgICAgaGVhZGVycy5hY2NlcHQgPSBwcmV2aWV3c0Zyb21BY2NlcHRIZWFkZXIuY29uY2F0KG9wdGlvbnMubWVkaWFUeXBlLnByZXZpZXdzKS5tYXAocHJldmlldyA9PiB7XG4gICAgICAgIGNvbnN0IGZvcm1hdCA9IG9wdGlvbnMubWVkaWFUeXBlLmZvcm1hdCA/IGAuJHtvcHRpb25zLm1lZGlhVHlwZS5mb3JtYXR9YCA6IFwiK2pzb25cIjtcbiAgICAgICAgcmV0dXJuIGBhcHBsaWNhdGlvbi92bmQuZ2l0aHViLiR7cHJldmlld30tcHJldmlldyR7Zm9ybWF0fWA7XG4gICAgICB9KS5qb2luKFwiLFwiKTtcbiAgICB9XG4gIH0gLy8gZm9yIEdFVC9IRUFEIHJlcXVlc3RzLCBzZXQgVVJMIHF1ZXJ5IHBhcmFtZXRlcnMgZnJvbSByZW1haW5pbmcgcGFyYW1ldGVyc1xuICAvLyBmb3IgUEFUQ0gvUE9TVC9QVVQvREVMRVRFIHJlcXVlc3RzLCBzZXQgcmVxdWVzdCBib2R5IGZyb20gcmVtYWluaW5nIHBhcmFtZXRlcnNcblxuXG4gIGlmIChbXCJHRVRcIiwgXCJIRUFEXCJdLmluY2x1ZGVzKG1ldGhvZCkpIHtcbiAgICB1cmwgPSBhZGRRdWVyeVBhcmFtZXRlcnModXJsLCByZW1haW5pbmdQYXJhbWV0ZXJzKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoXCJkYXRhXCIgaW4gcmVtYWluaW5nUGFyYW1ldGVycykge1xuICAgICAgYm9keSA9IHJlbWFpbmluZ1BhcmFtZXRlcnMuZGF0YTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKE9iamVjdC5rZXlzKHJlbWFpbmluZ1BhcmFtZXRlcnMpLmxlbmd0aCkge1xuICAgICAgICBib2R5ID0gcmVtYWluaW5nUGFyYW1ldGVycztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhlYWRlcnNbXCJjb250ZW50LWxlbmd0aFwiXSA9IDA7XG4gICAgICB9XG4gICAgfVxuICB9IC8vIGRlZmF1bHQgY29udGVudC10eXBlIGZvciBKU09OIGlmIGJvZHkgaXMgc2V0XG5cblxuICBpZiAoIWhlYWRlcnNbXCJjb250ZW50LXR5cGVcIl0gJiYgdHlwZW9mIGJvZHkgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBoZWFkZXJzW1wiY29udGVudC10eXBlXCJdID0gXCJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04XCI7XG4gIH0gLy8gR2l0SHViIGV4cGVjdHMgJ2NvbnRlbnQtbGVuZ3RoOiAwJyBoZWFkZXIgZm9yIFBVVC9QQVRDSCByZXF1ZXN0cyB3aXRob3V0IGJvZHkuXG4gIC8vIGZldGNoIGRvZXMgbm90IGFsbG93IHRvIHNldCBgY29udGVudC1sZW5ndGhgIGhlYWRlciwgYnV0IHdlIGNhbiBzZXQgYm9keSB0byBhbiBlbXB0eSBzdHJpbmdcblxuXG4gIGlmIChbXCJQQVRDSFwiLCBcIlBVVFwiXS5pbmNsdWRlcyhtZXRob2QpICYmIHR5cGVvZiBib2R5ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgYm9keSA9IFwiXCI7XG4gIH0gLy8gT25seSByZXR1cm4gYm9keS9yZXF1ZXN0IGtleXMgaWYgcHJlc2VudFxuXG5cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe1xuICAgIG1ldGhvZCxcbiAgICB1cmwsXG4gICAgaGVhZGVyc1xuICB9LCB0eXBlb2YgYm9keSAhPT0gXCJ1bmRlZmluZWRcIiA/IHtcbiAgICBib2R5XG4gIH0gOiBudWxsLCBvcHRpb25zLnJlcXVlc3QgPyB7XG4gICAgcmVxdWVzdDogb3B0aW9ucy5yZXF1ZXN0XG4gIH0gOiBudWxsKTtcbn1cblxuZnVuY3Rpb24gZW5kcG9pbnRXaXRoRGVmYXVsdHMoZGVmYXVsdHMsIHJvdXRlLCBvcHRpb25zKSB7XG4gIHJldHVybiBwYXJzZShtZXJnZShkZWZhdWx0cywgcm91dGUsIG9wdGlvbnMpKTtcbn1cblxuZnVuY3Rpb24gd2l0aERlZmF1bHRzKG9sZERlZmF1bHRzLCBuZXdEZWZhdWx0cykge1xuICBjb25zdCBERUZBVUxUUyA9IG1lcmdlKG9sZERlZmF1bHRzLCBuZXdEZWZhdWx0cyk7XG4gIGNvbnN0IGVuZHBvaW50ID0gZW5kcG9pbnRXaXRoRGVmYXVsdHMuYmluZChudWxsLCBERUZBVUxUUyk7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKGVuZHBvaW50LCB7XG4gICAgREVGQVVMVFMsXG4gICAgZGVmYXVsdHM6IHdpdGhEZWZhdWx0cy5iaW5kKG51bGwsIERFRkFVTFRTKSxcbiAgICBtZXJnZTogbWVyZ2UuYmluZChudWxsLCBERUZBVUxUUyksXG4gICAgcGFyc2VcbiAgfSk7XG59XG5cbmNvbnN0IFZFUlNJT04gPSBcIjYuMC4xMlwiO1xuXG5jb25zdCB1c2VyQWdlbnQgPSBgb2N0b2tpdC1lbmRwb2ludC5qcy8ke1ZFUlNJT059ICR7dW5pdmVyc2FsVXNlckFnZW50LmdldFVzZXJBZ2VudCgpfWA7IC8vIERFRkFVTFRTIGhhcyBhbGwgcHJvcGVydGllcyBzZXQgdGhhdCBFbmRwb2ludE9wdGlvbnMgaGFzLCBleGNlcHQgdXJsLlxuLy8gU28gd2UgdXNlIFJlcXVlc3RQYXJhbWV0ZXJzIGFuZCBhZGQgbWV0aG9kIGFzIGFkZGl0aW9uYWwgcmVxdWlyZWQgcHJvcGVydHkuXG5cbmNvbnN0IERFRkFVTFRTID0ge1xuICBtZXRob2Q6IFwiR0VUXCIsXG4gIGJhc2VVcmw6IFwiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbVwiLFxuICBoZWFkZXJzOiB7XG4gICAgYWNjZXB0OiBcImFwcGxpY2F0aW9uL3ZuZC5naXRodWIudjMranNvblwiLFxuICAgIFwidXNlci1hZ2VudFwiOiB1c2VyQWdlbnRcbiAgfSxcbiAgbWVkaWFUeXBlOiB7XG4gICAgZm9ybWF0OiBcIlwiLFxuICAgIHByZXZpZXdzOiBbXVxuICB9XG59O1xuXG5jb25zdCBlbmRwb2ludCA9IHdpdGhEZWZhdWx0cyhudWxsLCBERUZBVUxUUyk7XG5cbmV4cG9ydHMuZW5kcG9pbnQgPSBlbmRwb2ludDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcblxudmFyIGNvbnZlcnNpb25zID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IGNvbnZlcnNpb25zO1xuXG5mdW5jdGlvbiBzaWduKHgpIHtcbiAgICByZXR1cm4geCA8IDAgPyAtMSA6IDE7XG59XG5cbmZ1bmN0aW9uIGV2ZW5Sb3VuZCh4KSB7XG4gICAgLy8gUm91bmQgeCB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyLCBjaG9vc2luZyB0aGUgZXZlbiBpbnRlZ2VyIGlmIGl0IGxpZXMgaGFsZndheSBiZXR3ZWVuIHR3by5cbiAgICBpZiAoKHggJSAxKSA9PT0gMC41ICYmICh4ICYgMSkgPT09IDApIHsgLy8gW2V2ZW4gbnVtYmVyXS41OyByb3VuZCBkb3duIChpLmUuIGZsb29yKVxuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcih4KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gTWF0aC5yb3VuZCh4KTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU51bWJlckNvbnZlcnNpb24oYml0TGVuZ3RoLCB0eXBlT3B0cykge1xuICAgIGlmICghdHlwZU9wdHMudW5zaWduZWQpIHtcbiAgICAgICAgLS1iaXRMZW5ndGg7XG4gICAgfVxuICAgIGNvbnN0IGxvd2VyQm91bmQgPSB0eXBlT3B0cy51bnNpZ25lZCA/IDAgOiAtTWF0aC5wb3coMiwgYml0TGVuZ3RoKTtcbiAgICBjb25zdCB1cHBlckJvdW5kID0gTWF0aC5wb3coMiwgYml0TGVuZ3RoKSAtIDE7XG5cbiAgICBjb25zdCBtb2R1bG9WYWwgPSB0eXBlT3B0cy5tb2R1bG9CaXRMZW5ndGggPyBNYXRoLnBvdygyLCB0eXBlT3B0cy5tb2R1bG9CaXRMZW5ndGgpIDogTWF0aC5wb3coMiwgYml0TGVuZ3RoKTtcbiAgICBjb25zdCBtb2R1bG9Cb3VuZCA9IHR5cGVPcHRzLm1vZHVsb0JpdExlbmd0aCA/IE1hdGgucG93KDIsIHR5cGVPcHRzLm1vZHVsb0JpdExlbmd0aCAtIDEpIDogTWF0aC5wb3coMiwgYml0TGVuZ3RoIC0gMSk7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24oViwgb3B0cykge1xuICAgICAgICBpZiAoIW9wdHMpIG9wdHMgPSB7fTtcblxuICAgICAgICBsZXQgeCA9ICtWO1xuXG4gICAgICAgIGlmIChvcHRzLmVuZm9yY2VSYW5nZSkge1xuICAgICAgICAgICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoeCkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgaXMgbm90IGEgZmluaXRlIG51bWJlclwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgeCA9IHNpZ24oeCkgKiBNYXRoLmZsb29yKE1hdGguYWJzKHgpKTtcbiAgICAgICAgICAgIGlmICh4IDwgbG93ZXJCb3VuZCB8fCB4ID4gdXBwZXJCb3VuZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCBpcyBub3QgaW4gYnl0ZSByYW5nZVwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzTmFOKHgpICYmIG9wdHMuY2xhbXApIHtcbiAgICAgICAgICAgIHggPSBldmVuUm91bmQoeCk7XG5cbiAgICAgICAgICAgIGlmICh4IDwgbG93ZXJCb3VuZCkgeCA9IGxvd2VyQm91bmQ7XG4gICAgICAgICAgICBpZiAoeCA+IHVwcGVyQm91bmQpIHggPSB1cHBlckJvdW5kO1xuICAgICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIU51bWJlci5pc0Zpbml0ZSh4KSB8fCB4ID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHggPSBzaWduKHgpICogTWF0aC5mbG9vcihNYXRoLmFicyh4KSk7XG4gICAgICAgIHggPSB4ICUgbW9kdWxvVmFsO1xuXG4gICAgICAgIGlmICghdHlwZU9wdHMudW5zaWduZWQgJiYgeCA+PSBtb2R1bG9Cb3VuZCkge1xuICAgICAgICAgICAgcmV0dXJuIHggLSBtb2R1bG9WYWw7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZU9wdHMudW5zaWduZWQpIHtcbiAgICAgICAgICAgIGlmICh4IDwgMCkge1xuICAgICAgICAgICAgICB4ICs9IG1vZHVsb1ZhbDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoeCA9PT0gLTApIHsgLy8gZG9uJ3QgcmV0dXJuIG5lZ2F0aXZlIHplcm9cbiAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4geDtcbiAgICB9XG59XG5cbmNvbnZlcnNpb25zW1widm9pZFwiXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufTtcblxuY29udmVyc2lvbnNbXCJib29sZWFuXCJdID0gZnVuY3Rpb24gKHZhbCkge1xuICAgIHJldHVybiAhIXZhbDtcbn07XG5cbmNvbnZlcnNpb25zW1wiYnl0ZVwiXSA9IGNyZWF0ZU51bWJlckNvbnZlcnNpb24oOCwgeyB1bnNpZ25lZDogZmFsc2UgfSk7XG5jb252ZXJzaW9uc1tcIm9jdGV0XCJdID0gY3JlYXRlTnVtYmVyQ29udmVyc2lvbig4LCB7IHVuc2lnbmVkOiB0cnVlIH0pO1xuXG5jb252ZXJzaW9uc1tcInNob3J0XCJdID0gY3JlYXRlTnVtYmVyQ29udmVyc2lvbigxNiwgeyB1bnNpZ25lZDogZmFsc2UgfSk7XG5jb252ZXJzaW9uc1tcInVuc2lnbmVkIHNob3J0XCJdID0gY3JlYXRlTnVtYmVyQ29udmVyc2lvbigxNiwgeyB1bnNpZ25lZDogdHJ1ZSB9KTtcblxuY29udmVyc2lvbnNbXCJsb25nXCJdID0gY3JlYXRlTnVtYmVyQ29udmVyc2lvbigzMiwgeyB1bnNpZ25lZDogZmFsc2UgfSk7XG5jb252ZXJzaW9uc1tcInVuc2lnbmVkIGxvbmdcIl0gPSBjcmVhdGVOdW1iZXJDb252ZXJzaW9uKDMyLCB7IHVuc2lnbmVkOiB0cnVlIH0pO1xuXG5jb252ZXJzaW9uc1tcImxvbmcgbG9uZ1wiXSA9IGNyZWF0ZU51bWJlckNvbnZlcnNpb24oMzIsIHsgdW5zaWduZWQ6IGZhbHNlLCBtb2R1bG9CaXRMZW5ndGg6IDY0IH0pO1xuY29udmVyc2lvbnNbXCJ1bnNpZ25lZCBsb25nIGxvbmdcIl0gPSBjcmVhdGVOdW1iZXJDb252ZXJzaW9uKDMyLCB7IHVuc2lnbmVkOiB0cnVlLCBtb2R1bG9CaXRMZW5ndGg6IDY0IH0pO1xuXG5jb252ZXJzaW9uc1tcImRvdWJsZVwiXSA9IGZ1bmN0aW9uIChWKSB7XG4gICAgY29uc3QgeCA9ICtWO1xuXG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoeCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50IGlzIG5vdCBhIGZpbml0ZSBmbG9hdGluZy1wb2ludCB2YWx1ZVwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4geDtcbn07XG5cbmNvbnZlcnNpb25zW1widW5yZXN0cmljdGVkIGRvdWJsZVwiXSA9IGZ1bmN0aW9uIChWKSB7XG4gICAgY29uc3QgeCA9ICtWO1xuXG4gICAgaWYgKGlzTmFOKHgpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCBpcyBOYU5cIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHg7XG59O1xuXG4vLyBub3QgcXVpdGUgdmFsaWQsIGJ1dCBnb29kIGVub3VnaCBmb3IgSlNcbmNvbnZlcnNpb25zW1wiZmxvYXRcIl0gPSBjb252ZXJzaW9uc1tcImRvdWJsZVwiXTtcbmNvbnZlcnNpb25zW1widW5yZXN0cmljdGVkIGZsb2F0XCJdID0gY29udmVyc2lvbnNbXCJ1bnJlc3RyaWN0ZWQgZG91YmxlXCJdO1xuXG5jb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXSA9IGZ1bmN0aW9uIChWLCBvcHRzKSB7XG4gICAgaWYgKCFvcHRzKSBvcHRzID0ge307XG5cbiAgICBpZiAob3B0cy50cmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIFYgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIFN0cmluZyhWKTtcbn07XG5cbmNvbnZlcnNpb25zW1wiQnl0ZVN0cmluZ1wiXSA9IGZ1bmN0aW9uIChWLCBvcHRzKSB7XG4gICAgY29uc3QgeCA9IFN0cmluZyhWKTtcbiAgICBsZXQgYyA9IHVuZGVmaW5lZDtcbiAgICBmb3IgKGxldCBpID0gMDsgKGMgPSB4LmNvZGVQb2ludEF0KGkpKSAhPT0gdW5kZWZpbmVkOyArK2kpIHtcbiAgICAgICAgaWYgKGMgPiAyNTUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCBpcyBub3QgYSB2YWxpZCBieXRlc3RyaW5nXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHg7XG59O1xuXG5jb252ZXJzaW9uc1tcIlVTVlN0cmluZ1wiXSA9IGZ1bmN0aW9uIChWKSB7XG4gICAgY29uc3QgUyA9IFN0cmluZyhWKTtcbiAgICBjb25zdCBuID0gUy5sZW5ndGg7XG4gICAgY29uc3QgVSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIGNvbnN0IGMgPSBTLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGlmIChjIDwgMHhEODAwIHx8IGMgPiAweERGRkYpIHtcbiAgICAgICAgICAgIFUucHVzaChTdHJpbmcuZnJvbUNvZGVQb2ludChjKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoMHhEQzAwIDw9IGMgJiYgYyA8PSAweERGRkYpIHtcbiAgICAgICAgICAgIFUucHVzaChTdHJpbmcuZnJvbUNvZGVQb2ludCgweEZGRkQpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChpID09PSBuIC0gMSkge1xuICAgICAgICAgICAgICAgIFUucHVzaChTdHJpbmcuZnJvbUNvZGVQb2ludCgweEZGRkQpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZCA9IFMuY2hhckNvZGVBdChpICsgMSk7XG4gICAgICAgICAgICAgICAgaWYgKDB4REMwMCA8PSBkICYmIGQgPD0gMHhERkZGKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGEgPSBjICYgMHgzRkY7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGIgPSBkICYgMHgzRkY7XG4gICAgICAgICAgICAgICAgICAgIFUucHVzaChTdHJpbmcuZnJvbUNvZGVQb2ludCgoMiA8PCAxNSkgKyAoMiA8PCA5KSAqIGEgKyBiKSk7XG4gICAgICAgICAgICAgICAgICAgICsraTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBVLnB1c2goU3RyaW5nLmZyb21Db2RlUG9pbnQoMHhGRkZEKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFUuam9pbignJyk7XG59O1xuXG5jb252ZXJzaW9uc1tcIkRhdGVcIl0gPSBmdW5jdGlvbiAoViwgb3B0cykge1xuICAgIGlmICghKFYgaW5zdGFuY2VvZiBEYXRlKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgaXMgbm90IGEgRGF0ZSBvYmplY3RcIik7XG4gICAgfVxuICAgIGlmIChpc05hTihWKSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJldHVybiBWO1xufTtcblxuY29udmVyc2lvbnNbXCJSZWdFeHBcIl0gPSBmdW5jdGlvbiAoViwgb3B0cykge1xuICAgIGlmICghKFYgaW5zdGFuY2VvZiBSZWdFeHApKSB7XG4gICAgICAgIFYgPSBuZXcgUmVnRXhwKFYpO1xuICAgIH1cblxuICAgIHJldHVybiBWO1xufTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzLm1peGluID0gZnVuY3Rpb24gbWl4aW4odGFyZ2V0LCBzb3VyY2UpIHtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHNvdXJjZSk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleXNbaV0sIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXlzW2ldKSk7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzLndyYXBwZXJTeW1ib2wgPSBTeW1ib2woXCJ3cmFwcGVyXCIpO1xubW9kdWxlLmV4cG9ydHMuaW1wbFN5bWJvbCA9IFN5bWJvbChcImltcGxcIik7XG5cbm1vZHVsZS5leHBvcnRzLndyYXBwZXJGb3JJbXBsID0gZnVuY3Rpb24gKGltcGwpIHtcbiAgcmV0dXJuIGltcGxbbW9kdWxlLmV4cG9ydHMud3JhcHBlclN5bWJvbF07XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5pbXBsRm9yV3JhcHBlciA9IGZ1bmN0aW9uICh3cmFwcGVyKSB7XG4gIHJldHVybiB3cmFwcGVyW21vZHVsZS5leHBvcnRzLmltcGxTeW1ib2xdO1xufTtcblxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcblxudmFyIHB1bnljb2RlID0gcmVxdWlyZShcInB1bnljb2RlXCIpO1xudmFyIG1hcHBpbmdUYWJsZSA9IHJlcXVpcmUoXCIuL2xpYi9tYXBwaW5nVGFibGUuanNvblwiKTtcblxudmFyIFBST0NFU1NJTkdfT1BUSU9OUyA9IHtcbiAgVFJBTlNJVElPTkFMOiAwLFxuICBOT05UUkFOU0lUSU9OQUw6IDFcbn07XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZShzdHIpIHsgLy8gZml4IGJ1ZyBpbiB2OFxuICByZXR1cm4gc3RyLnNwbGl0KCdcXHUwMDAwJykubWFwKGZ1bmN0aW9uIChzKSB7IHJldHVybiBzLm5vcm1hbGl6ZSgnTkZDJyk7IH0pLmpvaW4oJ1xcdTAwMDAnKTtcbn1cblxuZnVuY3Rpb24gZmluZFN0YXR1cyh2YWwpIHtcbiAgdmFyIHN0YXJ0ID0gMDtcbiAgdmFyIGVuZCA9IG1hcHBpbmdUYWJsZS5sZW5ndGggLSAxO1xuXG4gIHdoaWxlIChzdGFydCA8PSBlbmQpIHtcbiAgICB2YXIgbWlkID0gTWF0aC5mbG9vcigoc3RhcnQgKyBlbmQpIC8gMik7XG5cbiAgICB2YXIgdGFyZ2V0ID0gbWFwcGluZ1RhYmxlW21pZF07XG4gICAgaWYgKHRhcmdldFswXVswXSA8PSB2YWwgJiYgdGFyZ2V0WzBdWzFdID49IHZhbCkge1xuICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9IGVsc2UgaWYgKHRhcmdldFswXVswXSA+IHZhbCkge1xuICAgICAgZW5kID0gbWlkIC0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhcnQgPSBtaWQgKyAxO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG52YXIgcmVnZXhBc3RyYWxTeW1ib2xzID0gL1tcXHVEODAwLVxcdURCRkZdW1xcdURDMDAtXFx1REZGRl0vZztcblxuZnVuY3Rpb24gY291bnRTeW1ib2xzKHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nXG4gICAgLy8gcmVwbGFjZSBldmVyeSBzdXJyb2dhdGUgcGFpciB3aXRoIGEgQk1QIHN5bWJvbFxuICAgIC5yZXBsYWNlKHJlZ2V4QXN0cmFsU3ltYm9scywgJ18nKVxuICAgIC8vIHRoZW4gZ2V0IHRoZSBsZW5ndGhcbiAgICAubGVuZ3RoO1xufVxuXG5mdW5jdGlvbiBtYXBDaGFycyhkb21haW5fbmFtZSwgdXNlU1REMywgcHJvY2Vzc2luZ19vcHRpb24pIHtcbiAgdmFyIGhhc0Vycm9yID0gZmFsc2U7XG4gIHZhciBwcm9jZXNzZWQgPSBcIlwiO1xuXG4gIHZhciBsZW4gPSBjb3VudFN5bWJvbHMoZG9tYWluX25hbWUpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgdmFyIGNvZGVQb2ludCA9IGRvbWFpbl9uYW1lLmNvZGVQb2ludEF0KGkpO1xuICAgIHZhciBzdGF0dXMgPSBmaW5kU3RhdHVzKGNvZGVQb2ludCk7XG5cbiAgICBzd2l0Y2ggKHN0YXR1c1sxXSkge1xuICAgICAgY2FzZSBcImRpc2FsbG93ZWRcIjpcbiAgICAgICAgaGFzRXJyb3IgPSB0cnVlO1xuICAgICAgICBwcm9jZXNzZWQgKz0gU3RyaW5nLmZyb21Db2RlUG9pbnQoY29kZVBvaW50KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiaWdub3JlZFwiOlxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJtYXBwZWRcIjpcbiAgICAgICAgcHJvY2Vzc2VkICs9IFN0cmluZy5mcm9tQ29kZVBvaW50LmFwcGx5KFN0cmluZywgc3RhdHVzWzJdKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiZGV2aWF0aW9uXCI6XG4gICAgICAgIGlmIChwcm9jZXNzaW5nX29wdGlvbiA9PT0gUFJPQ0VTU0lOR19PUFRJT05TLlRSQU5TSVRJT05BTCkge1xuICAgICAgICAgIHByb2Nlc3NlZCArPSBTdHJpbmcuZnJvbUNvZGVQb2ludC5hcHBseShTdHJpbmcsIHN0YXR1c1syXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJvY2Vzc2VkICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KGNvZGVQb2ludCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwidmFsaWRcIjpcbiAgICAgICAgcHJvY2Vzc2VkICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KGNvZGVQb2ludCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIjpcbiAgICAgICAgaWYgKHVzZVNURDMpIHtcbiAgICAgICAgICBoYXNFcnJvciA9IHRydWU7XG4gICAgICAgICAgcHJvY2Vzc2VkICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KGNvZGVQb2ludCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJvY2Vzc2VkICs9IFN0cmluZy5mcm9tQ29kZVBvaW50LmFwcGx5KFN0cmluZywgc3RhdHVzWzJdKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJkaXNhbGxvd2VkX1NURDNfdmFsaWRcIjpcbiAgICAgICAgaWYgKHVzZVNURDMpIHtcbiAgICAgICAgICBoYXNFcnJvciA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBwcm9jZXNzZWQgKz0gU3RyaW5nLmZyb21Db2RlUG9pbnQoY29kZVBvaW50KTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzdHJpbmc6IHByb2Nlc3NlZCxcbiAgICBlcnJvcjogaGFzRXJyb3JcbiAgfTtcbn1cblxudmFyIGNvbWJpbmluZ01hcmtzUmVnZXggPSAvW1xcdTAzMDAtXFx1MDM2RlxcdTA0ODMtXFx1MDQ4OVxcdTA1OTEtXFx1MDVCRFxcdTA1QkZcXHUwNUMxXFx1MDVDMlxcdTA1QzRcXHUwNUM1XFx1MDVDN1xcdTA2MTAtXFx1MDYxQVxcdTA2NEItXFx1MDY1RlxcdTA2NzBcXHUwNkQ2LVxcdTA2RENcXHUwNkRGLVxcdTA2RTRcXHUwNkU3XFx1MDZFOFxcdTA2RUEtXFx1MDZFRFxcdTA3MTFcXHUwNzMwLVxcdTA3NEFcXHUwN0E2LVxcdTA3QjBcXHUwN0VCLVxcdTA3RjNcXHUwODE2LVxcdTA4MTlcXHUwODFCLVxcdTA4MjNcXHUwODI1LVxcdTA4MjdcXHUwODI5LVxcdTA4MkRcXHUwODU5LVxcdTA4NUJcXHUwOEU0LVxcdTA5MDNcXHUwOTNBLVxcdTA5M0NcXHUwOTNFLVxcdTA5NEZcXHUwOTUxLVxcdTA5NTdcXHUwOTYyXFx1MDk2M1xcdTA5ODEtXFx1MDk4M1xcdTA5QkNcXHUwOUJFLVxcdTA5QzRcXHUwOUM3XFx1MDlDOFxcdTA5Q0ItXFx1MDlDRFxcdTA5RDdcXHUwOUUyXFx1MDlFM1xcdTBBMDEtXFx1MEEwM1xcdTBBM0NcXHUwQTNFLVxcdTBBNDJcXHUwQTQ3XFx1MEE0OFxcdTBBNEItXFx1MEE0RFxcdTBBNTFcXHUwQTcwXFx1MEE3MVxcdTBBNzVcXHUwQTgxLVxcdTBBODNcXHUwQUJDXFx1MEFCRS1cXHUwQUM1XFx1MEFDNy1cXHUwQUM5XFx1MEFDQi1cXHUwQUNEXFx1MEFFMlxcdTBBRTNcXHUwQjAxLVxcdTBCMDNcXHUwQjNDXFx1MEIzRS1cXHUwQjQ0XFx1MEI0N1xcdTBCNDhcXHUwQjRCLVxcdTBCNERcXHUwQjU2XFx1MEI1N1xcdTBCNjJcXHUwQjYzXFx1MEI4MlxcdTBCQkUtXFx1MEJDMlxcdTBCQzYtXFx1MEJDOFxcdTBCQ0EtXFx1MEJDRFxcdTBCRDdcXHUwQzAwLVxcdTBDMDNcXHUwQzNFLVxcdTBDNDRcXHUwQzQ2LVxcdTBDNDhcXHUwQzRBLVxcdTBDNERcXHUwQzU1XFx1MEM1NlxcdTBDNjJcXHUwQzYzXFx1MEM4MS1cXHUwQzgzXFx1MENCQ1xcdTBDQkUtXFx1MENDNFxcdTBDQzYtXFx1MENDOFxcdTBDQ0EtXFx1MENDRFxcdTBDRDVcXHUwQ0Q2XFx1MENFMlxcdTBDRTNcXHUwRDAxLVxcdTBEMDNcXHUwRDNFLVxcdTBENDRcXHUwRDQ2LVxcdTBENDhcXHUwRDRBLVxcdTBENERcXHUwRDU3XFx1MEQ2MlxcdTBENjNcXHUwRDgyXFx1MEQ4M1xcdTBEQ0FcXHUwRENGLVxcdTBERDRcXHUwREQ2XFx1MEREOC1cXHUwRERGXFx1MERGMlxcdTBERjNcXHUwRTMxXFx1MEUzNC1cXHUwRTNBXFx1MEU0Ny1cXHUwRTRFXFx1MEVCMVxcdTBFQjQtXFx1MEVCOVxcdTBFQkJcXHUwRUJDXFx1MEVDOC1cXHUwRUNEXFx1MEYxOFxcdTBGMTlcXHUwRjM1XFx1MEYzN1xcdTBGMzlcXHUwRjNFXFx1MEYzRlxcdTBGNzEtXFx1MEY4NFxcdTBGODZcXHUwRjg3XFx1MEY4RC1cXHUwRjk3XFx1MEY5OS1cXHUwRkJDXFx1MEZDNlxcdTEwMkItXFx1MTAzRVxcdTEwNTYtXFx1MTA1OVxcdTEwNUUtXFx1MTA2MFxcdTEwNjItXFx1MTA2NFxcdTEwNjctXFx1MTA2RFxcdTEwNzEtXFx1MTA3NFxcdTEwODItXFx1MTA4RFxcdTEwOEZcXHUxMDlBLVxcdTEwOURcXHUxMzVELVxcdTEzNUZcXHUxNzEyLVxcdTE3MTRcXHUxNzMyLVxcdTE3MzRcXHUxNzUyXFx1MTc1M1xcdTE3NzJcXHUxNzczXFx1MTdCNC1cXHUxN0QzXFx1MTdERFxcdTE4MEItXFx1MTgwRFxcdTE4QTlcXHUxOTIwLVxcdTE5MkJcXHUxOTMwLVxcdTE5M0JcXHUxOUIwLVxcdTE5QzBcXHUxOUM4XFx1MTlDOVxcdTFBMTctXFx1MUExQlxcdTFBNTUtXFx1MUE1RVxcdTFBNjAtXFx1MUE3Q1xcdTFBN0ZcXHUxQUIwLVxcdTFBQkVcXHUxQjAwLVxcdTFCMDRcXHUxQjM0LVxcdTFCNDRcXHUxQjZCLVxcdTFCNzNcXHUxQjgwLVxcdTFCODJcXHUxQkExLVxcdTFCQURcXHUxQkU2LVxcdTFCRjNcXHUxQzI0LVxcdTFDMzdcXHUxQ0QwLVxcdTFDRDJcXHUxQ0Q0LVxcdTFDRThcXHUxQ0VEXFx1MUNGMi1cXHUxQ0Y0XFx1MUNGOFxcdTFDRjlcXHUxREMwLVxcdTFERjVcXHUxREZDLVxcdTFERkZcXHUyMEQwLVxcdTIwRjBcXHUyQ0VGLVxcdTJDRjFcXHUyRDdGXFx1MkRFMC1cXHUyREZGXFx1MzAyQS1cXHUzMDJGXFx1MzA5OVxcdTMwOUFcXHVBNjZGLVxcdUE2NzJcXHVBNjc0LVxcdUE2N0RcXHVBNjlGXFx1QTZGMFxcdUE2RjFcXHVBODAyXFx1QTgwNlxcdUE4MEJcXHVBODIzLVxcdUE4MjdcXHVBODgwXFx1QTg4MVxcdUE4QjQtXFx1QThDNFxcdUE4RTAtXFx1QThGMVxcdUE5MjYtXFx1QTkyRFxcdUE5NDctXFx1QTk1M1xcdUE5ODAtXFx1QTk4M1xcdUE5QjMtXFx1QTlDMFxcdUE5RTVcXHVBQTI5LVxcdUFBMzZcXHVBQTQzXFx1QUE0Q1xcdUFBNERcXHVBQTdCLVxcdUFBN0RcXHVBQUIwXFx1QUFCMi1cXHVBQUI0XFx1QUFCN1xcdUFBQjhcXHVBQUJFXFx1QUFCRlxcdUFBQzFcXHVBQUVCLVxcdUFBRUZcXHVBQUY1XFx1QUFGNlxcdUFCRTMtXFx1QUJFQVxcdUFCRUNcXHVBQkVEXFx1RkIxRVxcdUZFMDAtXFx1RkUwRlxcdUZFMjAtXFx1RkUyRF18XFx1RDgwMFtcXHVEREZEXFx1REVFMFxcdURGNzYtXFx1REY3QV18XFx1RDgwMltcXHVERTAxLVxcdURFMDNcXHVERTA1XFx1REUwNlxcdURFMEMtXFx1REUwRlxcdURFMzgtXFx1REUzQVxcdURFM0ZcXHVERUU1XFx1REVFNl18XFx1RDgwNFtcXHVEQzAwLVxcdURDMDJcXHVEQzM4LVxcdURDNDZcXHVEQzdGLVxcdURDODJcXHVEQ0IwLVxcdURDQkFcXHVERDAwLVxcdUREMDJcXHVERDI3LVxcdUREMzRcXHVERDczXFx1REQ4MC1cXHVERDgyXFx1RERCMy1cXHVEREMwXFx1REUyQy1cXHVERTM3XFx1REVERi1cXHVERUVBXFx1REYwMS1cXHVERjAzXFx1REYzQ1xcdURGM0UtXFx1REY0NFxcdURGNDdcXHVERjQ4XFx1REY0Qi1cXHVERjREXFx1REY1N1xcdURGNjJcXHVERjYzXFx1REY2Ni1cXHVERjZDXFx1REY3MC1cXHVERjc0XXxcXHVEODA1W1xcdURDQjAtXFx1RENDM1xcdUREQUYtXFx1RERCNVxcdUREQjgtXFx1RERDMFxcdURFMzAtXFx1REU0MFxcdURFQUItXFx1REVCN118XFx1RDgxQVtcXHVERUYwLVxcdURFRjRcXHVERjMwLVxcdURGMzZdfFxcdUQ4MUJbXFx1REY1MS1cXHVERjdFXFx1REY4Ri1cXHVERjkyXXxcXHVEODJGW1xcdURDOURcXHVEQzlFXXxcXHVEODM0W1xcdURENjUtXFx1REQ2OVxcdURENkQtXFx1REQ3MlxcdUREN0ItXFx1REQ4MlxcdUREODUtXFx1REQ4QlxcdUREQUEtXFx1RERBRFxcdURFNDItXFx1REU0NF18XFx1RDgzQVtcXHVEQ0QwLVxcdURDRDZdfFxcdURCNDBbXFx1REQwMC1cXHVEREVGXS87XG5cbmZ1bmN0aW9uIHZhbGlkYXRlTGFiZWwobGFiZWwsIHByb2Nlc3Npbmdfb3B0aW9uKSB7XG4gIGlmIChsYWJlbC5zdWJzdHIoMCwgNCkgPT09IFwieG4tLVwiKSB7XG4gICAgbGFiZWwgPSBwdW55Y29kZS50b1VuaWNvZGUobGFiZWwpO1xuICAgIHByb2Nlc3Npbmdfb3B0aW9uID0gUFJPQ0VTU0lOR19PUFRJT05TLk5PTlRSQU5TSVRJT05BTDtcbiAgfVxuXG4gIHZhciBlcnJvciA9IGZhbHNlO1xuXG4gIGlmIChub3JtYWxpemUobGFiZWwpICE9PSBsYWJlbCB8fFxuICAgICAgKGxhYmVsWzNdID09PSBcIi1cIiAmJiBsYWJlbFs0XSA9PT0gXCItXCIpIHx8XG4gICAgICBsYWJlbFswXSA9PT0gXCItXCIgfHwgbGFiZWxbbGFiZWwubGVuZ3RoIC0gMV0gPT09IFwiLVwiIHx8XG4gICAgICBsYWJlbC5pbmRleE9mKFwiLlwiKSAhPT0gLTEgfHxcbiAgICAgIGxhYmVsLnNlYXJjaChjb21iaW5pbmdNYXJrc1JlZ2V4KSA9PT0gMCkge1xuICAgIGVycm9yID0gdHJ1ZTtcbiAgfVxuXG4gIHZhciBsZW4gPSBjb3VudFN5bWJvbHMobGFiZWwpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgdmFyIHN0YXR1cyA9IGZpbmRTdGF0dXMobGFiZWwuY29kZVBvaW50QXQoaSkpO1xuICAgIGlmICgocHJvY2Vzc2luZyA9PT0gUFJPQ0VTU0lOR19PUFRJT05TLlRSQU5TSVRJT05BTCAmJiBzdGF0dXNbMV0gIT09IFwidmFsaWRcIikgfHxcbiAgICAgICAgKHByb2Nlc3NpbmcgPT09IFBST0NFU1NJTkdfT1BUSU9OUy5OT05UUkFOU0lUSU9OQUwgJiZcbiAgICAgICAgIHN0YXR1c1sxXSAhPT0gXCJ2YWxpZFwiICYmIHN0YXR1c1sxXSAhPT0gXCJkZXZpYXRpb25cIikpIHtcbiAgICAgIGVycm9yID0gdHJ1ZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbGFiZWw6IGxhYmVsLFxuICAgIGVycm9yOiBlcnJvclxuICB9O1xufVxuXG5mdW5jdGlvbiBwcm9jZXNzaW5nKGRvbWFpbl9uYW1lLCB1c2VTVEQzLCBwcm9jZXNzaW5nX29wdGlvbikge1xuICB2YXIgcmVzdWx0ID0gbWFwQ2hhcnMoZG9tYWluX25hbWUsIHVzZVNURDMsIHByb2Nlc3Npbmdfb3B0aW9uKTtcbiAgcmVzdWx0LnN0cmluZyA9IG5vcm1hbGl6ZShyZXN1bHQuc3RyaW5nKTtcblxuICB2YXIgbGFiZWxzID0gcmVzdWx0LnN0cmluZy5zcGxpdChcIi5cIik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGFiZWxzLmxlbmd0aDsgKytpKSB7XG4gICAgdHJ5IHtcbiAgICAgIHZhciB2YWxpZGF0aW9uID0gdmFsaWRhdGVMYWJlbChsYWJlbHNbaV0pO1xuICAgICAgbGFiZWxzW2ldID0gdmFsaWRhdGlvbi5sYWJlbDtcbiAgICAgIHJlc3VsdC5lcnJvciA9IHJlc3VsdC5lcnJvciB8fCB2YWxpZGF0aW9uLmVycm9yO1xuICAgIH0gY2F0Y2goZSkge1xuICAgICAgcmVzdWx0LmVycm9yID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHN0cmluZzogbGFiZWxzLmpvaW4oXCIuXCIpLFxuICAgIGVycm9yOiByZXN1bHQuZXJyb3JcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMudG9BU0NJSSA9IGZ1bmN0aW9uKGRvbWFpbl9uYW1lLCB1c2VTVEQzLCBwcm9jZXNzaW5nX29wdGlvbiwgdmVyaWZ5RG5zTGVuZ3RoKSB7XG4gIHZhciByZXN1bHQgPSBwcm9jZXNzaW5nKGRvbWFpbl9uYW1lLCB1c2VTVEQzLCBwcm9jZXNzaW5nX29wdGlvbik7XG4gIHZhciBsYWJlbHMgPSByZXN1bHQuc3RyaW5nLnNwbGl0KFwiLlwiKTtcbiAgbGFiZWxzID0gbGFiZWxzLm1hcChmdW5jdGlvbihsKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBwdW55Y29kZS50b0FTQ0lJKGwpO1xuICAgIH0gY2F0Y2goZSkge1xuICAgICAgcmVzdWx0LmVycm9yID0gdHJ1ZTtcbiAgICAgIHJldHVybiBsO1xuICAgIH1cbiAgfSk7XG5cbiAgaWYgKHZlcmlmeURuc0xlbmd0aCkge1xuICAgIHZhciB0b3RhbCA9IGxhYmVscy5zbGljZSgwLCBsYWJlbHMubGVuZ3RoIC0gMSkuam9pbihcIi5cIikubGVuZ3RoO1xuICAgIGlmICh0b3RhbC5sZW5ndGggPiAyNTMgfHwgdG90YWwubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXN1bHQuZXJyb3IgPSB0cnVlO1xuICAgIH1cblxuICAgIGZvciAodmFyIGk9MDsgaSA8IGxhYmVscy5sZW5ndGg7ICsraSkge1xuICAgICAgaWYgKGxhYmVscy5sZW5ndGggPiA2MyB8fCBsYWJlbHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJlc3VsdC5lcnJvciA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChyZXN1bHQuZXJyb3IpIHJldHVybiBudWxsO1xuICByZXR1cm4gbGFiZWxzLmpvaW4oXCIuXCIpO1xufTtcblxubW9kdWxlLmV4cG9ydHMudG9Vbmljb2RlID0gZnVuY3Rpb24oZG9tYWluX25hbWUsIHVzZVNURDMpIHtcbiAgdmFyIHJlc3VsdCA9IHByb2Nlc3NpbmcoZG9tYWluX25hbWUsIHVzZVNURDMsIFBST0NFU1NJTkdfT1BUSU9OUy5OT05UUkFOU0lUSU9OQUwpO1xuXG4gIHJldHVybiB7XG4gICAgZG9tYWluOiByZXN1bHQuc3RyaW5nLFxuICAgIGVycm9yOiByZXN1bHQuZXJyb3JcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzLlBST0NFU1NJTkdfT1BUSU9OUyA9IFBST0NFU1NJTkdfT1BUSU9OUztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XHJcbmNvbnN0IHB1bnljb2RlID0gcmVxdWlyZShcInB1bnljb2RlXCIpO1xyXG5jb25zdCB0cjQ2ID0gcmVxdWlyZShcInRyNDZcIik7XHJcblxyXG5jb25zdCBzcGVjaWFsU2NoZW1lcyA9IHtcclxuICBmdHA6IDIxLFxyXG4gIGZpbGU6IG51bGwsXHJcbiAgZ29waGVyOiA3MCxcclxuICBodHRwOiA4MCxcclxuICBodHRwczogNDQzLFxyXG4gIHdzOiA4MCxcclxuICB3c3M6IDQ0M1xyXG59O1xyXG5cclxuY29uc3QgZmFpbHVyZSA9IFN5bWJvbChcImZhaWx1cmVcIik7XHJcblxyXG5mdW5jdGlvbiBjb3VudFN5bWJvbHMoc3RyKSB7XHJcbiAgcmV0dXJuIHB1bnljb2RlLnVjczIuZGVjb2RlKHN0cikubGVuZ3RoO1xyXG59XHJcblxyXG5mdW5jdGlvbiBhdChpbnB1dCwgaWR4KSB7XHJcbiAgY29uc3QgYyA9IGlucHV0W2lkeF07XHJcbiAgcmV0dXJuIGlzTmFOKGMpID8gdW5kZWZpbmVkIDogU3RyaW5nLmZyb21Db2RlUG9pbnQoYyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzQVNDSUlEaWdpdChjKSB7XHJcbiAgcmV0dXJuIGMgPj0gMHgzMCAmJiBjIDw9IDB4Mzk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzQVNDSUlBbHBoYShjKSB7XHJcbiAgcmV0dXJuIChjID49IDB4NDEgJiYgYyA8PSAweDVBKSB8fCAoYyA+PSAweDYxICYmIGMgPD0gMHg3QSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzQVNDSUlBbHBoYW51bWVyaWMoYykge1xyXG4gIHJldHVybiBpc0FTQ0lJQWxwaGEoYykgfHwgaXNBU0NJSURpZ2l0KGMpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0FTQ0lJSGV4KGMpIHtcclxuICByZXR1cm4gaXNBU0NJSURpZ2l0KGMpIHx8IChjID49IDB4NDEgJiYgYyA8PSAweDQ2KSB8fCAoYyA+PSAweDYxICYmIGMgPD0gMHg2Nik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzU2luZ2xlRG90KGJ1ZmZlcikge1xyXG4gIHJldHVybiBidWZmZXIgPT09IFwiLlwiIHx8IGJ1ZmZlci50b0xvd2VyQ2FzZSgpID09PSBcIiUyZVwiO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0RvdWJsZURvdChidWZmZXIpIHtcclxuICBidWZmZXIgPSBidWZmZXIudG9Mb3dlckNhc2UoKTtcclxuICByZXR1cm4gYnVmZmVyID09PSBcIi4uXCIgfHwgYnVmZmVyID09PSBcIiUyZS5cIiB8fCBidWZmZXIgPT09IFwiLiUyZVwiIHx8IGJ1ZmZlciA9PT0gXCIlMmUlMmVcIjtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNXaW5kb3dzRHJpdmVMZXR0ZXJDb2RlUG9pbnRzKGNwMSwgY3AyKSB7XHJcbiAgcmV0dXJuIGlzQVNDSUlBbHBoYShjcDEpICYmIChjcDIgPT09IDU4IHx8IGNwMiA9PT0gMTI0KTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNXaW5kb3dzRHJpdmVMZXR0ZXJTdHJpbmcoc3RyaW5nKSB7XHJcbiAgcmV0dXJuIHN0cmluZy5sZW5ndGggPT09IDIgJiYgaXNBU0NJSUFscGhhKHN0cmluZy5jb2RlUG9pbnRBdCgwKSkgJiYgKHN0cmluZ1sxXSA9PT0gXCI6XCIgfHwgc3RyaW5nWzFdID09PSBcInxcIik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzTm9ybWFsaXplZFdpbmRvd3NEcml2ZUxldHRlclN0cmluZyhzdHJpbmcpIHtcclxuICByZXR1cm4gc3RyaW5nLmxlbmd0aCA9PT0gMiAmJiBpc0FTQ0lJQWxwaGEoc3RyaW5nLmNvZGVQb2ludEF0KDApKSAmJiBzdHJpbmdbMV0gPT09IFwiOlwiO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjb250YWluc0ZvcmJpZGRlbkhvc3RDb2RlUG9pbnQoc3RyaW5nKSB7XHJcbiAgcmV0dXJuIHN0cmluZy5zZWFyY2goL1xcdTAwMDB8XFx1MDAwOXxcXHUwMDBBfFxcdTAwMER8XFx1MDAyMHwjfCV8XFwvfDp8XFw/fEB8XFxbfFxcXFx8XFxdLykgIT09IC0xO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjb250YWluc0ZvcmJpZGRlbkhvc3RDb2RlUG9pbnRFeGNsdWRpbmdQZXJjZW50KHN0cmluZykge1xyXG4gIHJldHVybiBzdHJpbmcuc2VhcmNoKC9cXHUwMDAwfFxcdTAwMDl8XFx1MDAwQXxcXHUwMDBEfFxcdTAwMjB8I3xcXC98OnxcXD98QHxcXFt8XFxcXHxcXF0vKSAhPT0gLTE7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzU3BlY2lhbFNjaGVtZShzY2hlbWUpIHtcclxuICByZXR1cm4gc3BlY2lhbFNjaGVtZXNbc2NoZW1lXSAhPT0gdW5kZWZpbmVkO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc1NwZWNpYWwodXJsKSB7XHJcbiAgcmV0dXJuIGlzU3BlY2lhbFNjaGVtZSh1cmwuc2NoZW1lKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZGVmYXVsdFBvcnQoc2NoZW1lKSB7XHJcbiAgcmV0dXJuIHNwZWNpYWxTY2hlbWVzW3NjaGVtZV07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHBlcmNlbnRFbmNvZGUoYykge1xyXG4gIGxldCBoZXggPSBjLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xyXG4gIGlmIChoZXgubGVuZ3RoID09PSAxKSB7XHJcbiAgICBoZXggPSBcIjBcIiArIGhleDtcclxuICB9XHJcblxyXG4gIHJldHVybiBcIiVcIiArIGhleDtcclxufVxyXG5cclxuZnVuY3Rpb24gdXRmOFBlcmNlbnRFbmNvZGUoYykge1xyXG4gIGNvbnN0IGJ1ZiA9IG5ldyBCdWZmZXIoYyk7XHJcblxyXG4gIGxldCBzdHIgPSBcIlwiO1xyXG5cclxuICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1Zi5sZW5ndGg7ICsraSkge1xyXG4gICAgc3RyICs9IHBlcmNlbnRFbmNvZGUoYnVmW2ldKTtcclxuICB9XHJcblxyXG4gIHJldHVybiBzdHI7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHV0ZjhQZXJjZW50RGVjb2RlKHN0cikge1xyXG4gIGNvbnN0IGlucHV0ID0gbmV3IEJ1ZmZlcihzdHIpO1xyXG4gIGNvbnN0IG91dHB1dCA9IFtdO1xyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXQubGVuZ3RoOyArK2kpIHtcclxuICAgIGlmIChpbnB1dFtpXSAhPT0gMzcpIHtcclxuICAgICAgb3V0cHV0LnB1c2goaW5wdXRbaV0pO1xyXG4gICAgfSBlbHNlIGlmIChpbnB1dFtpXSA9PT0gMzcgJiYgaXNBU0NJSUhleChpbnB1dFtpICsgMV0pICYmIGlzQVNDSUlIZXgoaW5wdXRbaSArIDJdKSkge1xyXG4gICAgICBvdXRwdXQucHVzaChwYXJzZUludChpbnB1dC5zbGljZShpICsgMSwgaSArIDMpLnRvU3RyaW5nKCksIDE2KSk7XHJcbiAgICAgIGkgKz0gMjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG91dHB1dC5wdXNoKGlucHV0W2ldKTtcclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIG5ldyBCdWZmZXIob3V0cHV0KS50b1N0cmluZygpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0MwQ29udHJvbFBlcmNlbnRFbmNvZGUoYykge1xyXG4gIHJldHVybiBjIDw9IDB4MUYgfHwgYyA+IDB4N0U7XHJcbn1cclxuXHJcbmNvbnN0IGV4dHJhUGF0aFBlcmNlbnRFbmNvZGVTZXQgPSBuZXcgU2V0KFszMiwgMzQsIDM1LCA2MCwgNjIsIDYzLCA5NiwgMTIzLCAxMjVdKTtcclxuZnVuY3Rpb24gaXNQYXRoUGVyY2VudEVuY29kZShjKSB7XHJcbiAgcmV0dXJuIGlzQzBDb250cm9sUGVyY2VudEVuY29kZShjKSB8fCBleHRyYVBhdGhQZXJjZW50RW5jb2RlU2V0LmhhcyhjKTtcclxufVxyXG5cclxuY29uc3QgZXh0cmFVc2VyaW5mb1BlcmNlbnRFbmNvZGVTZXQgPVxyXG4gIG5ldyBTZXQoWzQ3LCA1OCwgNTksIDYxLCA2NCwgOTEsIDkyLCA5MywgOTQsIDEyNF0pO1xyXG5mdW5jdGlvbiBpc1VzZXJpbmZvUGVyY2VudEVuY29kZShjKSB7XHJcbiAgcmV0dXJuIGlzUGF0aFBlcmNlbnRFbmNvZGUoYykgfHwgZXh0cmFVc2VyaW5mb1BlcmNlbnRFbmNvZGVTZXQuaGFzKGMpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwZXJjZW50RW5jb2RlQ2hhcihjLCBlbmNvZGVTZXRQcmVkaWNhdGUpIHtcclxuICBjb25zdCBjU3RyID0gU3RyaW5nLmZyb21Db2RlUG9pbnQoYyk7XHJcblxyXG4gIGlmIChlbmNvZGVTZXRQcmVkaWNhdGUoYykpIHtcclxuICAgIHJldHVybiB1dGY4UGVyY2VudEVuY29kZShjU3RyKTtcclxuICB9XHJcblxyXG4gIHJldHVybiBjU3RyO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwYXJzZUlQdjROdW1iZXIoaW5wdXQpIHtcclxuICBsZXQgUiA9IDEwO1xyXG5cclxuICBpZiAoaW5wdXQubGVuZ3RoID49IDIgJiYgaW5wdXQuY2hhckF0KDApID09PSBcIjBcIiAmJiBpbnB1dC5jaGFyQXQoMSkudG9Mb3dlckNhc2UoKSA9PT0gXCJ4XCIpIHtcclxuICAgIGlucHV0ID0gaW5wdXQuc3Vic3RyaW5nKDIpO1xyXG4gICAgUiA9IDE2O1xyXG4gIH0gZWxzZSBpZiAoaW5wdXQubGVuZ3RoID49IDIgJiYgaW5wdXQuY2hhckF0KDApID09PSBcIjBcIikge1xyXG4gICAgaW5wdXQgPSBpbnB1dC5zdWJzdHJpbmcoMSk7XHJcbiAgICBSID0gODtcclxuICB9XHJcblxyXG4gIGlmIChpbnB1dCA9PT0gXCJcIikge1xyXG4gICAgcmV0dXJuIDA7XHJcbiAgfVxyXG5cclxuICBjb25zdCByZWdleCA9IFIgPT09IDEwID8gL1teMC05XS8gOiAoUiA9PT0gMTYgPyAvW14wLTlBLUZhLWZdLyA6IC9bXjAtN10vKTtcclxuICBpZiAocmVnZXgudGVzdChpbnB1dCkpIHtcclxuICAgIHJldHVybiBmYWlsdXJlO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHBhcnNlSW50KGlucHV0LCBSKTtcclxufVxyXG5cclxuZnVuY3Rpb24gcGFyc2VJUHY0KGlucHV0KSB7XHJcbiAgY29uc3QgcGFydHMgPSBpbnB1dC5zcGxpdChcIi5cIik7XHJcbiAgaWYgKHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdID09PSBcIlwiKSB7XHJcbiAgICBpZiAocGFydHMubGVuZ3RoID4gMSkge1xyXG4gICAgICBwYXJ0cy5wb3AoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlmIChwYXJ0cy5sZW5ndGggPiA0KSB7XHJcbiAgICByZXR1cm4gaW5wdXQ7XHJcbiAgfVxyXG5cclxuICBjb25zdCBudW1iZXJzID0gW107XHJcbiAgZm9yIChjb25zdCBwYXJ0IG9mIHBhcnRzKSB7XHJcbiAgICBpZiAocGFydCA9PT0gXCJcIikge1xyXG4gICAgICByZXR1cm4gaW5wdXQ7XHJcbiAgICB9XHJcbiAgICBjb25zdCBuID0gcGFyc2VJUHY0TnVtYmVyKHBhcnQpO1xyXG4gICAgaWYgKG4gPT09IGZhaWx1cmUpIHtcclxuICAgICAgcmV0dXJuIGlucHV0O1xyXG4gICAgfVxyXG5cclxuICAgIG51bWJlcnMucHVzaChuKTtcclxuICB9XHJcblxyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtYmVycy5sZW5ndGggLSAxOyArK2kpIHtcclxuICAgIGlmIChudW1iZXJzW2ldID4gMjU1KSB7XHJcbiAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgfVxyXG4gIH1cclxuICBpZiAobnVtYmVyc1tudW1iZXJzLmxlbmd0aCAtIDFdID49IE1hdGgucG93KDI1NiwgNSAtIG51bWJlcnMubGVuZ3RoKSkge1xyXG4gICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgfVxyXG5cclxuICBsZXQgaXB2NCA9IG51bWJlcnMucG9wKCk7XHJcbiAgbGV0IGNvdW50ZXIgPSAwO1xyXG5cclxuICBmb3IgKGNvbnN0IG4gb2YgbnVtYmVycykge1xyXG4gICAgaXB2NCArPSBuICogTWF0aC5wb3coMjU2LCAzIC0gY291bnRlcik7XHJcbiAgICArK2NvdW50ZXI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gaXB2NDtcclxufVxyXG5cclxuZnVuY3Rpb24gc2VyaWFsaXplSVB2NChhZGRyZXNzKSB7XHJcbiAgbGV0IG91dHB1dCA9IFwiXCI7XHJcbiAgbGV0IG4gPSBhZGRyZXNzO1xyXG5cclxuICBmb3IgKGxldCBpID0gMTsgaSA8PSA0OyArK2kpIHtcclxuICAgIG91dHB1dCA9IFN0cmluZyhuICUgMjU2KSArIG91dHB1dDtcclxuICAgIGlmIChpICE9PSA0KSB7XHJcbiAgICAgIG91dHB1dCA9IFwiLlwiICsgb3V0cHV0O1xyXG4gICAgfVxyXG4gICAgbiA9IE1hdGguZmxvb3IobiAvIDI1Nik7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gb3V0cHV0O1xyXG59XHJcblxyXG5mdW5jdGlvbiBwYXJzZUlQdjYoaW5wdXQpIHtcclxuICBjb25zdCBhZGRyZXNzID0gWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdO1xyXG4gIGxldCBwaWVjZUluZGV4ID0gMDtcclxuICBsZXQgY29tcHJlc3MgPSBudWxsO1xyXG4gIGxldCBwb2ludGVyID0gMDtcclxuXHJcbiAgaW5wdXQgPSBwdW55Y29kZS51Y3MyLmRlY29kZShpbnB1dCk7XHJcblxyXG4gIGlmIChpbnB1dFtwb2ludGVyXSA9PT0gNTgpIHtcclxuICAgIGlmIChpbnB1dFtwb2ludGVyICsgMV0gIT09IDU4KSB7XHJcbiAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgfVxyXG5cclxuICAgIHBvaW50ZXIgKz0gMjtcclxuICAgICsrcGllY2VJbmRleDtcclxuICAgIGNvbXByZXNzID0gcGllY2VJbmRleDtcclxuICB9XHJcblxyXG4gIHdoaWxlIChwb2ludGVyIDwgaW5wdXQubGVuZ3RoKSB7XHJcbiAgICBpZiAocGllY2VJbmRleCA9PT0gOCkge1xyXG4gICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaW5wdXRbcG9pbnRlcl0gPT09IDU4KSB7XHJcbiAgICAgIGlmIChjb21wcmVzcyAhPT0gbnVsbCkge1xyXG4gICAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgICB9XHJcbiAgICAgICsrcG9pbnRlcjtcclxuICAgICAgKytwaWVjZUluZGV4O1xyXG4gICAgICBjb21wcmVzcyA9IHBpZWNlSW5kZXg7XHJcbiAgICAgIGNvbnRpbnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCB2YWx1ZSA9IDA7XHJcbiAgICBsZXQgbGVuZ3RoID0gMDtcclxuXHJcbiAgICB3aGlsZSAobGVuZ3RoIDwgNCAmJiBpc0FTQ0lJSGV4KGlucHV0W3BvaW50ZXJdKSkge1xyXG4gICAgICB2YWx1ZSA9IHZhbHVlICogMHgxMCArIHBhcnNlSW50KGF0KGlucHV0LCBwb2ludGVyKSwgMTYpO1xyXG4gICAgICArK3BvaW50ZXI7XHJcbiAgICAgICsrbGVuZ3RoO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpbnB1dFtwb2ludGVyXSA9PT0gNDYpIHtcclxuICAgICAgaWYgKGxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBwb2ludGVyIC09IGxlbmd0aDtcclxuXHJcbiAgICAgIGlmIChwaWVjZUluZGV4ID4gNikge1xyXG4gICAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgbnVtYmVyc1NlZW4gPSAwO1xyXG5cclxuICAgICAgd2hpbGUgKGlucHV0W3BvaW50ZXJdICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBsZXQgaXB2NFBpZWNlID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYgKG51bWJlcnNTZWVuID4gMCkge1xyXG4gICAgICAgICAgaWYgKGlucHV0W3BvaW50ZXJdID09PSA0NiAmJiBudW1iZXJzU2VlbiA8IDQpIHtcclxuICAgICAgICAgICAgKytwb2ludGVyO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWlzQVNDSUlEaWdpdChpbnB1dFtwb2ludGVyXSkpIHtcclxuICAgICAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgd2hpbGUgKGlzQVNDSUlEaWdpdChpbnB1dFtwb2ludGVyXSkpIHtcclxuICAgICAgICAgIGNvbnN0IG51bWJlciA9IHBhcnNlSW50KGF0KGlucHV0LCBwb2ludGVyKSk7XHJcbiAgICAgICAgICBpZiAoaXB2NFBpZWNlID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlwdjRQaWVjZSA9IG51bWJlcjtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoaXB2NFBpZWNlID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaXB2NFBpZWNlID0gaXB2NFBpZWNlICogMTAgKyBudW1iZXI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoaXB2NFBpZWNlID4gMjU1KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgKytwb2ludGVyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYWRkcmVzc1twaWVjZUluZGV4XSA9IGFkZHJlc3NbcGllY2VJbmRleF0gKiAweDEwMCArIGlwdjRQaWVjZTtcclxuXHJcbiAgICAgICAgKytudW1iZXJzU2VlbjtcclxuXHJcbiAgICAgICAgaWYgKG51bWJlcnNTZWVuID09PSAyIHx8IG51bWJlcnNTZWVuID09PSA0KSB7XHJcbiAgICAgICAgICArK3BpZWNlSW5kZXg7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAobnVtYmVyc1NlZW4gIT09IDQpIHtcclxuICAgICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgYnJlYWs7XHJcbiAgICB9IGVsc2UgaWYgKGlucHV0W3BvaW50ZXJdID09PSA1OCkge1xyXG4gICAgICArK3BvaW50ZXI7XHJcbiAgICAgIGlmIChpbnB1dFtwb2ludGVyXSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoaW5wdXRbcG9pbnRlcl0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRyZXNzW3BpZWNlSW5kZXhdID0gdmFsdWU7XHJcbiAgICArK3BpZWNlSW5kZXg7XHJcbiAgfVxyXG5cclxuICBpZiAoY29tcHJlc3MgIT09IG51bGwpIHtcclxuICAgIGxldCBzd2FwcyA9IHBpZWNlSW5kZXggLSBjb21wcmVzcztcclxuICAgIHBpZWNlSW5kZXggPSA3O1xyXG4gICAgd2hpbGUgKHBpZWNlSW5kZXggIT09IDAgJiYgc3dhcHMgPiAwKSB7XHJcbiAgICAgIGNvbnN0IHRlbXAgPSBhZGRyZXNzW2NvbXByZXNzICsgc3dhcHMgLSAxXTtcclxuICAgICAgYWRkcmVzc1tjb21wcmVzcyArIHN3YXBzIC0gMV0gPSBhZGRyZXNzW3BpZWNlSW5kZXhdO1xyXG4gICAgICBhZGRyZXNzW3BpZWNlSW5kZXhdID0gdGVtcDtcclxuICAgICAgLS1waWVjZUluZGV4O1xyXG4gICAgICAtLXN3YXBzO1xyXG4gICAgfVxyXG4gIH0gZWxzZSBpZiAoY29tcHJlc3MgPT09IG51bGwgJiYgcGllY2VJbmRleCAhPT0gOCkge1xyXG4gICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gYWRkcmVzcztcclxufVxyXG5cclxuZnVuY3Rpb24gc2VyaWFsaXplSVB2NihhZGRyZXNzKSB7XHJcbiAgbGV0IG91dHB1dCA9IFwiXCI7XHJcbiAgY29uc3Qgc2VxUmVzdWx0ID0gZmluZExvbmdlc3RaZXJvU2VxdWVuY2UoYWRkcmVzcyk7XHJcbiAgY29uc3QgY29tcHJlc3MgPSBzZXFSZXN1bHQuaWR4O1xyXG4gIGxldCBpZ25vcmUwID0gZmFsc2U7XHJcblxyXG4gIGZvciAobGV0IHBpZWNlSW5kZXggPSAwOyBwaWVjZUluZGV4IDw9IDc7ICsrcGllY2VJbmRleCkge1xyXG4gICAgaWYgKGlnbm9yZTAgJiYgYWRkcmVzc1twaWVjZUluZGV4XSA9PT0gMCkge1xyXG4gICAgICBjb250aW51ZTtcclxuICAgIH0gZWxzZSBpZiAoaWdub3JlMCkge1xyXG4gICAgICBpZ25vcmUwID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbXByZXNzID09PSBwaWVjZUluZGV4KSB7XHJcbiAgICAgIGNvbnN0IHNlcGFyYXRvciA9IHBpZWNlSW5kZXggPT09IDAgPyBcIjo6XCIgOiBcIjpcIjtcclxuICAgICAgb3V0cHV0ICs9IHNlcGFyYXRvcjtcclxuICAgICAgaWdub3JlMCA9IHRydWU7XHJcbiAgICAgIGNvbnRpbnVlO1xyXG4gICAgfVxyXG5cclxuICAgIG91dHB1dCArPSBhZGRyZXNzW3BpZWNlSW5kZXhdLnRvU3RyaW5nKDE2KTtcclxuXHJcbiAgICBpZiAocGllY2VJbmRleCAhPT0gNykge1xyXG4gICAgICBvdXRwdXQgKz0gXCI6XCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gb3V0cHV0O1xyXG59XHJcblxyXG5mdW5jdGlvbiBwYXJzZUhvc3QoaW5wdXQsIGlzU3BlY2lhbEFyZykge1xyXG4gIGlmIChpbnB1dFswXSA9PT0gXCJbXCIpIHtcclxuICAgIGlmIChpbnB1dFtpbnB1dC5sZW5ndGggLSAxXSAhPT0gXCJdXCIpIHtcclxuICAgICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHBhcnNlSVB2NihpbnB1dC5zdWJzdHJpbmcoMSwgaW5wdXQubGVuZ3RoIC0gMSkpO1xyXG4gIH1cclxuXHJcbiAgaWYgKCFpc1NwZWNpYWxBcmcpIHtcclxuICAgIHJldHVybiBwYXJzZU9wYXF1ZUhvc3QoaW5wdXQpO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgZG9tYWluID0gdXRmOFBlcmNlbnREZWNvZGUoaW5wdXQpO1xyXG4gIGNvbnN0IGFzY2lpRG9tYWluID0gdHI0Ni50b0FTQ0lJKGRvbWFpbiwgZmFsc2UsIHRyNDYuUFJPQ0VTU0lOR19PUFRJT05TLk5PTlRSQU5TSVRJT05BTCwgZmFsc2UpO1xyXG4gIGlmIChhc2NpaURvbWFpbiA9PT0gbnVsbCkge1xyXG4gICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgfVxyXG5cclxuICBpZiAoY29udGFpbnNGb3JiaWRkZW5Ib3N0Q29kZVBvaW50KGFzY2lpRG9tYWluKSkge1xyXG4gICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgfVxyXG5cclxuICBjb25zdCBpcHY0SG9zdCA9IHBhcnNlSVB2NChhc2NpaURvbWFpbik7XHJcbiAgaWYgKHR5cGVvZiBpcHY0SG9zdCA9PT0gXCJudW1iZXJcIiB8fCBpcHY0SG9zdCA9PT0gZmFpbHVyZSkge1xyXG4gICAgcmV0dXJuIGlwdjRIb3N0O1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGFzY2lpRG9tYWluO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwYXJzZU9wYXF1ZUhvc3QoaW5wdXQpIHtcclxuICBpZiAoY29udGFpbnNGb3JiaWRkZW5Ib3N0Q29kZVBvaW50RXhjbHVkaW5nUGVyY2VudChpbnB1dCkpIHtcclxuICAgIHJldHVybiBmYWlsdXJlO1xyXG4gIH1cclxuXHJcbiAgbGV0IG91dHB1dCA9IFwiXCI7XHJcbiAgY29uc3QgZGVjb2RlZCA9IHB1bnljb2RlLnVjczIuZGVjb2RlKGlucHV0KTtcclxuICBmb3IgKGxldCBpID0gMDsgaSA8IGRlY29kZWQubGVuZ3RoOyArK2kpIHtcclxuICAgIG91dHB1dCArPSBwZXJjZW50RW5jb2RlQ2hhcihkZWNvZGVkW2ldLCBpc0MwQ29udHJvbFBlcmNlbnRFbmNvZGUpO1xyXG4gIH1cclxuICByZXR1cm4gb3V0cHV0O1xyXG59XHJcblxyXG5mdW5jdGlvbiBmaW5kTG9uZ2VzdFplcm9TZXF1ZW5jZShhcnIpIHtcclxuICBsZXQgbWF4SWR4ID0gbnVsbDtcclxuICBsZXQgbWF4TGVuID0gMTsgLy8gb25seSBmaW5kIGVsZW1lbnRzID4gMVxyXG4gIGxldCBjdXJyU3RhcnQgPSBudWxsO1xyXG4gIGxldCBjdXJyTGVuID0gMDtcclxuXHJcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyArK2kpIHtcclxuICAgIGlmIChhcnJbaV0gIT09IDApIHtcclxuICAgICAgaWYgKGN1cnJMZW4gPiBtYXhMZW4pIHtcclxuICAgICAgICBtYXhJZHggPSBjdXJyU3RhcnQ7XHJcbiAgICAgICAgbWF4TGVuID0gY3VyckxlbjtcclxuICAgICAgfVxyXG5cclxuICAgICAgY3VyclN0YXJ0ID0gbnVsbDtcclxuICAgICAgY3VyckxlbiA9IDA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoY3VyclN0YXJ0ID09PSBudWxsKSB7XHJcbiAgICAgICAgY3VyclN0YXJ0ID0gaTtcclxuICAgICAgfVxyXG4gICAgICArK2N1cnJMZW47XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBpZiB0cmFpbGluZyB6ZXJvc1xyXG4gIGlmIChjdXJyTGVuID4gbWF4TGVuKSB7XHJcbiAgICBtYXhJZHggPSBjdXJyU3RhcnQ7XHJcbiAgICBtYXhMZW4gPSBjdXJyTGVuO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIGlkeDogbWF4SWR4LFxyXG4gICAgbGVuOiBtYXhMZW5cclxuICB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBzZXJpYWxpemVIb3N0KGhvc3QpIHtcclxuICBpZiAodHlwZW9mIGhvc3QgPT09IFwibnVtYmVyXCIpIHtcclxuICAgIHJldHVybiBzZXJpYWxpemVJUHY0KGhvc3QpO1xyXG4gIH1cclxuXHJcbiAgLy8gSVB2NiBzZXJpYWxpemVyXHJcbiAgaWYgKGhvc3QgaW5zdGFuY2VvZiBBcnJheSkge1xyXG4gICAgcmV0dXJuIFwiW1wiICsgc2VyaWFsaXplSVB2Nihob3N0KSArIFwiXVwiO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGhvc3Q7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHRyaW1Db250cm9sQ2hhcnModXJsKSB7XHJcbiAgcmV0dXJuIHVybC5yZXBsYWNlKC9eW1xcdTAwMDAtXFx1MDAxRlxcdTAwMjBdK3xbXFx1MDAwMC1cXHUwMDFGXFx1MDAyMF0rJC9nLCBcIlwiKTtcclxufVxyXG5cclxuZnVuY3Rpb24gdHJpbVRhYkFuZE5ld2xpbmUodXJsKSB7XHJcbiAgcmV0dXJuIHVybC5yZXBsYWNlKC9cXHUwMDA5fFxcdTAwMEF8XFx1MDAwRC9nLCBcIlwiKTtcclxufVxyXG5cclxuZnVuY3Rpb24gc2hvcnRlblBhdGgodXJsKSB7XHJcbiAgY29uc3QgcGF0aCA9IHVybC5wYXRoO1xyXG4gIGlmIChwYXRoLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuICBpZiAodXJsLnNjaGVtZSA9PT0gXCJmaWxlXCIgJiYgcGF0aC5sZW5ndGggPT09IDEgJiYgaXNOb3JtYWxpemVkV2luZG93c0RyaXZlTGV0dGVyKHBhdGhbMF0pKSB7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBwYXRoLnBvcCgpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpbmNsdWRlc0NyZWRlbnRpYWxzKHVybCkge1xyXG4gIHJldHVybiB1cmwudXNlcm5hbWUgIT09IFwiXCIgfHwgdXJsLnBhc3N3b3JkICE9PSBcIlwiO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjYW5ub3RIYXZlQVVzZXJuYW1lUGFzc3dvcmRQb3J0KHVybCkge1xyXG4gIHJldHVybiB1cmwuaG9zdCA9PT0gbnVsbCB8fCB1cmwuaG9zdCA9PT0gXCJcIiB8fCB1cmwuY2Fubm90QmVBQmFzZVVSTCB8fCB1cmwuc2NoZW1lID09PSBcImZpbGVcIjtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNOb3JtYWxpemVkV2luZG93c0RyaXZlTGV0dGVyKHN0cmluZykge1xyXG4gIHJldHVybiAvXltBLVphLXpdOiQvLnRlc3Qoc3RyaW5nKTtcclxufVxyXG5cclxuZnVuY3Rpb24gVVJMU3RhdGVNYWNoaW5lKGlucHV0LCBiYXNlLCBlbmNvZGluZ092ZXJyaWRlLCB1cmwsIHN0YXRlT3ZlcnJpZGUpIHtcclxuICB0aGlzLnBvaW50ZXIgPSAwO1xyXG4gIHRoaXMuaW5wdXQgPSBpbnB1dDtcclxuICB0aGlzLmJhc2UgPSBiYXNlIHx8IG51bGw7XHJcbiAgdGhpcy5lbmNvZGluZ092ZXJyaWRlID0gZW5jb2RpbmdPdmVycmlkZSB8fCBcInV0Zi04XCI7XHJcbiAgdGhpcy5zdGF0ZU92ZXJyaWRlID0gc3RhdGVPdmVycmlkZTtcclxuICB0aGlzLnVybCA9IHVybDtcclxuICB0aGlzLmZhaWx1cmUgPSBmYWxzZTtcclxuICB0aGlzLnBhcnNlRXJyb3IgPSBmYWxzZTtcclxuXHJcbiAgaWYgKCF0aGlzLnVybCkge1xyXG4gICAgdGhpcy51cmwgPSB7XHJcbiAgICAgIHNjaGVtZTogXCJcIixcclxuICAgICAgdXNlcm5hbWU6IFwiXCIsXHJcbiAgICAgIHBhc3N3b3JkOiBcIlwiLFxyXG4gICAgICBob3N0OiBudWxsLFxyXG4gICAgICBwb3J0OiBudWxsLFxyXG4gICAgICBwYXRoOiBbXSxcclxuICAgICAgcXVlcnk6IG51bGwsXHJcbiAgICAgIGZyYWdtZW50OiBudWxsLFxyXG5cclxuICAgICAgY2Fubm90QmVBQmFzZVVSTDogZmFsc2VcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgcmVzID0gdHJpbUNvbnRyb2xDaGFycyh0aGlzLmlucHV0KTtcclxuICAgIGlmIChyZXMgIT09IHRoaXMuaW5wdXQpIHtcclxuICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHRoaXMuaW5wdXQgPSByZXM7XHJcbiAgfVxyXG5cclxuICBjb25zdCByZXMgPSB0cmltVGFiQW5kTmV3bGluZSh0aGlzLmlucHV0KTtcclxuICBpZiAocmVzICE9PSB0aGlzLmlucHV0KSB7XHJcbiAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gIH1cclxuICB0aGlzLmlucHV0ID0gcmVzO1xyXG5cclxuICB0aGlzLnN0YXRlID0gc3RhdGVPdmVycmlkZSB8fCBcInNjaGVtZSBzdGFydFwiO1xyXG5cclxuICB0aGlzLmJ1ZmZlciA9IFwiXCI7XHJcbiAgdGhpcy5hdEZsYWcgPSBmYWxzZTtcclxuICB0aGlzLmFyckZsYWcgPSBmYWxzZTtcclxuICB0aGlzLnBhc3N3b3JkVG9rZW5TZWVuRmxhZyA9IGZhbHNlO1xyXG5cclxuICB0aGlzLmlucHV0ID0gcHVueWNvZGUudWNzMi5kZWNvZGUodGhpcy5pbnB1dCk7XHJcblxyXG4gIGZvciAoOyB0aGlzLnBvaW50ZXIgPD0gdGhpcy5pbnB1dC5sZW5ndGg7ICsrdGhpcy5wb2ludGVyKSB7XHJcbiAgICBjb25zdCBjID0gdGhpcy5pbnB1dFt0aGlzLnBvaW50ZXJdO1xyXG4gICAgY29uc3QgY1N0ciA9IGlzTmFOKGMpID8gdW5kZWZpbmVkIDogU3RyaW5nLmZyb21Db2RlUG9pbnQoYyk7XHJcblxyXG4gICAgLy8gZXhlYyBzdGF0ZSBtYWNoaW5lXHJcbiAgICBjb25zdCByZXQgPSB0aGlzW1wicGFyc2UgXCIgKyB0aGlzLnN0YXRlXShjLCBjU3RyKTtcclxuICAgIGlmICghcmV0KSB7XHJcbiAgICAgIGJyZWFrOyAvLyB0ZXJtaW5hdGUgYWxnb3JpdGhtXHJcbiAgICB9IGVsc2UgaWYgKHJldCA9PT0gZmFpbHVyZSkge1xyXG4gICAgICB0aGlzLmZhaWx1cmUgPSB0cnVlO1xyXG4gICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBzY2hlbWUgc3RhcnRcIl0gPSBmdW5jdGlvbiBwYXJzZVNjaGVtZVN0YXJ0KGMsIGNTdHIpIHtcclxuICBpZiAoaXNBU0NJSUFscGhhKGMpKSB7XHJcbiAgICB0aGlzLmJ1ZmZlciArPSBjU3RyLnRvTG93ZXJDYXNlKCk7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJzY2hlbWVcIjtcclxuICB9IGVsc2UgaWYgKCF0aGlzLnN0YXRlT3ZlcnJpZGUpIHtcclxuICAgIHRoaXMuc3RhdGUgPSBcIm5vIHNjaGVtZVwiO1xyXG4gICAgLS10aGlzLnBvaW50ZXI7XHJcbiAgfSBlbHNlIHtcclxuICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICByZXR1cm4gZmFpbHVyZTtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIHNjaGVtZVwiXSA9IGZ1bmN0aW9uIHBhcnNlU2NoZW1lKGMsIGNTdHIpIHtcclxuICBpZiAoaXNBU0NJSUFscGhhbnVtZXJpYyhjKSB8fCBjID09PSA0MyB8fCBjID09PSA0NSB8fCBjID09PSA0Nikge1xyXG4gICAgdGhpcy5idWZmZXIgKz0gY1N0ci50b0xvd2VyQ2FzZSgpO1xyXG4gIH0gZWxzZSBpZiAoYyA9PT0gNTgpIHtcclxuICAgIGlmICh0aGlzLnN0YXRlT3ZlcnJpZGUpIHtcclxuICAgICAgaWYgKGlzU3BlY2lhbCh0aGlzLnVybCkgJiYgIWlzU3BlY2lhbFNjaGVtZSh0aGlzLmJ1ZmZlcikpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghaXNTcGVjaWFsKHRoaXMudXJsKSAmJiBpc1NwZWNpYWxTY2hlbWUodGhpcy5idWZmZXIpKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoKGluY2x1ZGVzQ3JlZGVudGlhbHModGhpcy51cmwpIHx8IHRoaXMudXJsLnBvcnQgIT09IG51bGwpICYmIHRoaXMuYnVmZmVyID09PSBcImZpbGVcIikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMudXJsLnNjaGVtZSA9PT0gXCJmaWxlXCIgJiYgKHRoaXMudXJsLmhvc3QgPT09IFwiXCIgfHwgdGhpcy51cmwuaG9zdCA9PT0gbnVsbCkpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMudXJsLnNjaGVtZSA9IHRoaXMuYnVmZmVyO1xyXG4gICAgdGhpcy5idWZmZXIgPSBcIlwiO1xyXG4gICAgaWYgKHRoaXMuc3RhdGVPdmVycmlkZSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy51cmwuc2NoZW1lID09PSBcImZpbGVcIikge1xyXG4gICAgICBpZiAodGhpcy5pbnB1dFt0aGlzLnBvaW50ZXIgKyAxXSAhPT0gNDcgfHwgdGhpcy5pbnB1dFt0aGlzLnBvaW50ZXIgKyAyXSAhPT0gNDcpIHtcclxuICAgICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcImZpbGVcIjtcclxuICAgIH0gZWxzZSBpZiAoaXNTcGVjaWFsKHRoaXMudXJsKSAmJiB0aGlzLmJhc2UgIT09IG51bGwgJiYgdGhpcy5iYXNlLnNjaGVtZSA9PT0gdGhpcy51cmwuc2NoZW1lKSB7XHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcInNwZWNpYWwgcmVsYXRpdmUgb3IgYXV0aG9yaXR5XCI7XHJcbiAgICB9IGVsc2UgaWYgKGlzU3BlY2lhbCh0aGlzLnVybCkpIHtcclxuICAgICAgdGhpcy5zdGF0ZSA9IFwic3BlY2lhbCBhdXRob3JpdHkgc2xhc2hlc1wiO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmlucHV0W3RoaXMucG9pbnRlciArIDFdID09PSA0Nykge1xyXG4gICAgICB0aGlzLnN0YXRlID0gXCJwYXRoIG9yIGF1dGhvcml0eVwiO1xyXG4gICAgICArK3RoaXMucG9pbnRlcjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudXJsLmNhbm5vdEJlQUJhc2VVUkwgPSB0cnVlO1xyXG4gICAgICB0aGlzLnVybC5wYXRoLnB1c2goXCJcIik7XHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcImNhbm5vdC1iZS1hLWJhc2UtVVJMIHBhdGhcIjtcclxuICAgIH1cclxuICB9IGVsc2UgaWYgKCF0aGlzLnN0YXRlT3ZlcnJpZGUpIHtcclxuICAgIHRoaXMuYnVmZmVyID0gXCJcIjtcclxuICAgIHRoaXMuc3RhdGUgPSBcIm5vIHNjaGVtZVwiO1xyXG4gICAgdGhpcy5wb2ludGVyID0gLTE7XHJcbiAgfSBlbHNlIHtcclxuICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICByZXR1cm4gZmFpbHVyZTtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIG5vIHNjaGVtZVwiXSA9IGZ1bmN0aW9uIHBhcnNlTm9TY2hlbWUoYykge1xyXG4gIGlmICh0aGlzLmJhc2UgPT09IG51bGwgfHwgKHRoaXMuYmFzZS5jYW5ub3RCZUFCYXNlVVJMICYmIGMgIT09IDM1KSkge1xyXG4gICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgfSBlbHNlIGlmICh0aGlzLmJhc2UuY2Fubm90QmVBQmFzZVVSTCAmJiBjID09PSAzNSkge1xyXG4gICAgdGhpcy51cmwuc2NoZW1lID0gdGhpcy5iYXNlLnNjaGVtZTtcclxuICAgIHRoaXMudXJsLnBhdGggPSB0aGlzLmJhc2UucGF0aC5zbGljZSgpO1xyXG4gICAgdGhpcy51cmwucXVlcnkgPSB0aGlzLmJhc2UucXVlcnk7XHJcbiAgICB0aGlzLnVybC5mcmFnbWVudCA9IFwiXCI7XHJcbiAgICB0aGlzLnVybC5jYW5ub3RCZUFCYXNlVVJMID0gdHJ1ZTtcclxuICAgIHRoaXMuc3RhdGUgPSBcImZyYWdtZW50XCI7XHJcbiAgfSBlbHNlIGlmICh0aGlzLmJhc2Uuc2NoZW1lID09PSBcImZpbGVcIikge1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwiZmlsZVwiO1xyXG4gICAgLS10aGlzLnBvaW50ZXI7XHJcbiAgfSBlbHNlIHtcclxuICAgIHRoaXMuc3RhdGUgPSBcInJlbGF0aXZlXCI7XHJcbiAgICAtLXRoaXMucG9pbnRlcjtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIHNwZWNpYWwgcmVsYXRpdmUgb3IgYXV0aG9yaXR5XCJdID0gZnVuY3Rpb24gcGFyc2VTcGVjaWFsUmVsYXRpdmVPckF1dGhvcml0eShjKSB7XHJcbiAgaWYgKGMgPT09IDQ3ICYmIHRoaXMuaW5wdXRbdGhpcy5wb2ludGVyICsgMV0gPT09IDQ3KSB7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJzcGVjaWFsIGF1dGhvcml0eSBpZ25vcmUgc2xhc2hlc1wiO1xyXG4gICAgKyt0aGlzLnBvaW50ZXI7XHJcbiAgfSBlbHNlIHtcclxuICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJyZWxhdGl2ZVwiO1xyXG4gICAgLS10aGlzLnBvaW50ZXI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBwYXRoIG9yIGF1dGhvcml0eVwiXSA9IGZ1bmN0aW9uIHBhcnNlUGF0aE9yQXV0aG9yaXR5KGMpIHtcclxuICBpZiAoYyA9PT0gNDcpIHtcclxuICAgIHRoaXMuc3RhdGUgPSBcImF1dGhvcml0eVwiO1xyXG4gIH0gZWxzZSB7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJwYXRoXCI7XHJcbiAgICAtLXRoaXMucG9pbnRlcjtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIHJlbGF0aXZlXCJdID0gZnVuY3Rpb24gcGFyc2VSZWxhdGl2ZShjKSB7XHJcbiAgdGhpcy51cmwuc2NoZW1lID0gdGhpcy5iYXNlLnNjaGVtZTtcclxuICBpZiAoaXNOYU4oYykpIHtcclxuICAgIHRoaXMudXJsLnVzZXJuYW1lID0gdGhpcy5iYXNlLnVzZXJuYW1lO1xyXG4gICAgdGhpcy51cmwucGFzc3dvcmQgPSB0aGlzLmJhc2UucGFzc3dvcmQ7XHJcbiAgICB0aGlzLnVybC5ob3N0ID0gdGhpcy5iYXNlLmhvc3Q7XHJcbiAgICB0aGlzLnVybC5wb3J0ID0gdGhpcy5iYXNlLnBvcnQ7XHJcbiAgICB0aGlzLnVybC5wYXRoID0gdGhpcy5iYXNlLnBhdGguc2xpY2UoKTtcclxuICAgIHRoaXMudXJsLnF1ZXJ5ID0gdGhpcy5iYXNlLnF1ZXJ5O1xyXG4gIH0gZWxzZSBpZiAoYyA9PT0gNDcpIHtcclxuICAgIHRoaXMuc3RhdGUgPSBcInJlbGF0aXZlIHNsYXNoXCI7XHJcbiAgfSBlbHNlIGlmIChjID09PSA2Mykge1xyXG4gICAgdGhpcy51cmwudXNlcm5hbWUgPSB0aGlzLmJhc2UudXNlcm5hbWU7XHJcbiAgICB0aGlzLnVybC5wYXNzd29yZCA9IHRoaXMuYmFzZS5wYXNzd29yZDtcclxuICAgIHRoaXMudXJsLmhvc3QgPSB0aGlzLmJhc2UuaG9zdDtcclxuICAgIHRoaXMudXJsLnBvcnQgPSB0aGlzLmJhc2UucG9ydDtcclxuICAgIHRoaXMudXJsLnBhdGggPSB0aGlzLmJhc2UucGF0aC5zbGljZSgpO1xyXG4gICAgdGhpcy51cmwucXVlcnkgPSBcIlwiO1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwicXVlcnlcIjtcclxuICB9IGVsc2UgaWYgKGMgPT09IDM1KSB7XHJcbiAgICB0aGlzLnVybC51c2VybmFtZSA9IHRoaXMuYmFzZS51c2VybmFtZTtcclxuICAgIHRoaXMudXJsLnBhc3N3b3JkID0gdGhpcy5iYXNlLnBhc3N3b3JkO1xyXG4gICAgdGhpcy51cmwuaG9zdCA9IHRoaXMuYmFzZS5ob3N0O1xyXG4gICAgdGhpcy51cmwucG9ydCA9IHRoaXMuYmFzZS5wb3J0O1xyXG4gICAgdGhpcy51cmwucGF0aCA9IHRoaXMuYmFzZS5wYXRoLnNsaWNlKCk7XHJcbiAgICB0aGlzLnVybC5xdWVyeSA9IHRoaXMuYmFzZS5xdWVyeTtcclxuICAgIHRoaXMudXJsLmZyYWdtZW50ID0gXCJcIjtcclxuICAgIHRoaXMuc3RhdGUgPSBcImZyYWdtZW50XCI7XHJcbiAgfSBlbHNlIGlmIChpc1NwZWNpYWwodGhpcy51cmwpICYmIGMgPT09IDkyKSB7XHJcbiAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwicmVsYXRpdmUgc2xhc2hcIjtcclxuICB9IGVsc2Uge1xyXG4gICAgdGhpcy51cmwudXNlcm5hbWUgPSB0aGlzLmJhc2UudXNlcm5hbWU7XHJcbiAgICB0aGlzLnVybC5wYXNzd29yZCA9IHRoaXMuYmFzZS5wYXNzd29yZDtcclxuICAgIHRoaXMudXJsLmhvc3QgPSB0aGlzLmJhc2UuaG9zdDtcclxuICAgIHRoaXMudXJsLnBvcnQgPSB0aGlzLmJhc2UucG9ydDtcclxuICAgIHRoaXMudXJsLnBhdGggPSB0aGlzLmJhc2UucGF0aC5zbGljZSgwLCB0aGlzLmJhc2UucGF0aC5sZW5ndGggLSAxKTtcclxuXHJcbiAgICB0aGlzLnN0YXRlID0gXCJwYXRoXCI7XHJcbiAgICAtLXRoaXMucG9pbnRlcjtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIHJlbGF0aXZlIHNsYXNoXCJdID0gZnVuY3Rpb24gcGFyc2VSZWxhdGl2ZVNsYXNoKGMpIHtcclxuICBpZiAoaXNTcGVjaWFsKHRoaXMudXJsKSAmJiAoYyA9PT0gNDcgfHwgYyA9PT0gOTIpKSB7XHJcbiAgICBpZiAoYyA9PT0gOTIpIHtcclxuICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHRoaXMuc3RhdGUgPSBcInNwZWNpYWwgYXV0aG9yaXR5IGlnbm9yZSBzbGFzaGVzXCI7XHJcbiAgfSBlbHNlIGlmIChjID09PSA0Nykge1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwiYXV0aG9yaXR5XCI7XHJcbiAgfSBlbHNlIHtcclxuICAgIHRoaXMudXJsLnVzZXJuYW1lID0gdGhpcy5iYXNlLnVzZXJuYW1lO1xyXG4gICAgdGhpcy51cmwucGFzc3dvcmQgPSB0aGlzLmJhc2UucGFzc3dvcmQ7XHJcbiAgICB0aGlzLnVybC5ob3N0ID0gdGhpcy5iYXNlLmhvc3Q7XHJcbiAgICB0aGlzLnVybC5wb3J0ID0gdGhpcy5iYXNlLnBvcnQ7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJwYXRoXCI7XHJcbiAgICAtLXRoaXMucG9pbnRlcjtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIHNwZWNpYWwgYXV0aG9yaXR5IHNsYXNoZXNcIl0gPSBmdW5jdGlvbiBwYXJzZVNwZWNpYWxBdXRob3JpdHlTbGFzaGVzKGMpIHtcclxuICBpZiAoYyA9PT0gNDcgJiYgdGhpcy5pbnB1dFt0aGlzLnBvaW50ZXIgKyAxXSA9PT0gNDcpIHtcclxuICAgIHRoaXMuc3RhdGUgPSBcInNwZWNpYWwgYXV0aG9yaXR5IGlnbm9yZSBzbGFzaGVzXCI7XHJcbiAgICArK3RoaXMucG9pbnRlcjtcclxuICB9IGVsc2Uge1xyXG4gICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgIHRoaXMuc3RhdGUgPSBcInNwZWNpYWwgYXV0aG9yaXR5IGlnbm9yZSBzbGFzaGVzXCI7XHJcbiAgICAtLXRoaXMucG9pbnRlcjtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIHNwZWNpYWwgYXV0aG9yaXR5IGlnbm9yZSBzbGFzaGVzXCJdID0gZnVuY3Rpb24gcGFyc2VTcGVjaWFsQXV0aG9yaXR5SWdub3JlU2xhc2hlcyhjKSB7XHJcbiAgaWYgKGMgIT09IDQ3ICYmIGMgIT09IDkyKSB7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJhdXRob3JpdHlcIjtcclxuICAgIC0tdGhpcy5wb2ludGVyO1xyXG4gIH0gZWxzZSB7XHJcbiAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5VUkxTdGF0ZU1hY2hpbmUucHJvdG90eXBlW1wicGFyc2UgYXV0aG9yaXR5XCJdID0gZnVuY3Rpb24gcGFyc2VBdXRob3JpdHkoYywgY1N0cikge1xyXG4gIGlmIChjID09PSA2NCkge1xyXG4gICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLmF0RmxhZykge1xyXG4gICAgICB0aGlzLmJ1ZmZlciA9IFwiJTQwXCIgKyB0aGlzLmJ1ZmZlcjtcclxuICAgIH1cclxuICAgIHRoaXMuYXRGbGFnID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBjYXJlZnVsLCB0aGlzIGlzIGJhc2VkIG9uIGJ1ZmZlciBhbmQgaGFzIGl0cyBvd24gcG9pbnRlciAodGhpcy5wb2ludGVyICE9IHBvaW50ZXIpIGFuZCBpbm5lciBjaGFyc1xyXG4gICAgY29uc3QgbGVuID0gY291bnRTeW1ib2xzKHRoaXMuYnVmZmVyKTtcclxuICAgIGZvciAobGV0IHBvaW50ZXIgPSAwOyBwb2ludGVyIDwgbGVuOyArK3BvaW50ZXIpIHtcclxuICAgICAgY29uc3QgY29kZVBvaW50ID0gdGhpcy5idWZmZXIuY29kZVBvaW50QXQocG9pbnRlcik7XHJcblxyXG4gICAgICBpZiAoY29kZVBvaW50ID09PSA1OCAmJiAhdGhpcy5wYXNzd29yZFRva2VuU2VlbkZsYWcpIHtcclxuICAgICAgICB0aGlzLnBhc3N3b3JkVG9rZW5TZWVuRmxhZyA9IHRydWU7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgZW5jb2RlZENvZGVQb2ludHMgPSBwZXJjZW50RW5jb2RlQ2hhcihjb2RlUG9pbnQsIGlzVXNlcmluZm9QZXJjZW50RW5jb2RlKTtcclxuICAgICAgaWYgKHRoaXMucGFzc3dvcmRUb2tlblNlZW5GbGFnKSB7XHJcbiAgICAgICAgdGhpcy51cmwucGFzc3dvcmQgKz0gZW5jb2RlZENvZGVQb2ludHM7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy51cmwudXNlcm5hbWUgKz0gZW5jb2RlZENvZGVQb2ludHM7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuYnVmZmVyID0gXCJcIjtcclxuICB9IGVsc2UgaWYgKGlzTmFOKGMpIHx8IGMgPT09IDQ3IHx8IGMgPT09IDYzIHx8IGMgPT09IDM1IHx8XHJcbiAgICAgICAgICAgICAoaXNTcGVjaWFsKHRoaXMudXJsKSAmJiBjID09PSA5MikpIHtcclxuICAgIGlmICh0aGlzLmF0RmxhZyAmJiB0aGlzLmJ1ZmZlciA9PT0gXCJcIikge1xyXG4gICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgIH1cclxuICAgIHRoaXMucG9pbnRlciAtPSBjb3VudFN5bWJvbHModGhpcy5idWZmZXIpICsgMTtcclxuICAgIHRoaXMuYnVmZmVyID0gXCJcIjtcclxuICAgIHRoaXMuc3RhdGUgPSBcImhvc3RcIjtcclxuICB9IGVsc2Uge1xyXG4gICAgdGhpcy5idWZmZXIgKz0gY1N0cjtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIGhvc3RuYW1lXCJdID1cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIGhvc3RcIl0gPSBmdW5jdGlvbiBwYXJzZUhvc3ROYW1lKGMsIGNTdHIpIHtcclxuICBpZiAodGhpcy5zdGF0ZU92ZXJyaWRlICYmIHRoaXMudXJsLnNjaGVtZSA9PT0gXCJmaWxlXCIpIHtcclxuICAgIC0tdGhpcy5wb2ludGVyO1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwiZmlsZSBob3N0XCI7XHJcbiAgfSBlbHNlIGlmIChjID09PSA1OCAmJiAhdGhpcy5hcnJGbGFnKSB7XHJcbiAgICBpZiAodGhpcy5idWZmZXIgPT09IFwiXCIpIHtcclxuICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaG9zdCA9IHBhcnNlSG9zdCh0aGlzLmJ1ZmZlciwgaXNTcGVjaWFsKHRoaXMudXJsKSk7XHJcbiAgICBpZiAoaG9zdCA9PT0gZmFpbHVyZSkge1xyXG4gICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVybC5ob3N0ID0gaG9zdDtcclxuICAgIHRoaXMuYnVmZmVyID0gXCJcIjtcclxuICAgIHRoaXMuc3RhdGUgPSBcInBvcnRcIjtcclxuICAgIGlmICh0aGlzLnN0YXRlT3ZlcnJpZGUgPT09IFwiaG9zdG5hbWVcIikge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfSBlbHNlIGlmIChpc05hTihjKSB8fCBjID09PSA0NyB8fCBjID09PSA2MyB8fCBjID09PSAzNSB8fFxyXG4gICAgICAgICAgICAgKGlzU3BlY2lhbCh0aGlzLnVybCkgJiYgYyA9PT0gOTIpKSB7XHJcbiAgICAtLXRoaXMucG9pbnRlcjtcclxuICAgIGlmIChpc1NwZWNpYWwodGhpcy51cmwpICYmIHRoaXMuYnVmZmVyID09PSBcIlwiKSB7XHJcbiAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnN0YXRlT3ZlcnJpZGUgJiYgdGhpcy5idWZmZXIgPT09IFwiXCIgJiZcclxuICAgICAgICAgICAgICAgKGluY2x1ZGVzQ3JlZGVudGlhbHModGhpcy51cmwpIHx8IHRoaXMudXJsLnBvcnQgIT09IG51bGwpKSB7XHJcbiAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBob3N0ID0gcGFyc2VIb3N0KHRoaXMuYnVmZmVyLCBpc1NwZWNpYWwodGhpcy51cmwpKTtcclxuICAgIGlmIChob3N0ID09PSBmYWlsdXJlKSB7XHJcbiAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudXJsLmhvc3QgPSBob3N0O1xyXG4gICAgdGhpcy5idWZmZXIgPSBcIlwiO1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwicGF0aCBzdGFydFwiO1xyXG4gICAgaWYgKHRoaXMuc3RhdGVPdmVycmlkZSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfSBlbHNlIHtcclxuICAgIGlmIChjID09PSA5MSkge1xyXG4gICAgICB0aGlzLmFyckZsYWcgPSB0cnVlO1xyXG4gICAgfSBlbHNlIGlmIChjID09PSA5Mykge1xyXG4gICAgICB0aGlzLmFyckZsYWcgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHRoaXMuYnVmZmVyICs9IGNTdHI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBwb3J0XCJdID0gZnVuY3Rpb24gcGFyc2VQb3J0KGMsIGNTdHIpIHtcclxuICBpZiAoaXNBU0NJSURpZ2l0KGMpKSB7XHJcbiAgICB0aGlzLmJ1ZmZlciArPSBjU3RyO1xyXG4gIH0gZWxzZSBpZiAoaXNOYU4oYykgfHwgYyA9PT0gNDcgfHwgYyA9PT0gNjMgfHwgYyA9PT0gMzUgfHxcclxuICAgICAgICAgICAgIChpc1NwZWNpYWwodGhpcy51cmwpICYmIGMgPT09IDkyKSB8fFxyXG4gICAgICAgICAgICAgdGhpcy5zdGF0ZU92ZXJyaWRlKSB7XHJcbiAgICBpZiAodGhpcy5idWZmZXIgIT09IFwiXCIpIHtcclxuICAgICAgY29uc3QgcG9ydCA9IHBhcnNlSW50KHRoaXMuYnVmZmVyKTtcclxuICAgICAgaWYgKHBvcnQgPiBNYXRoLnBvdygyLCAxNikgLSAxKSB7XHJcbiAgICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnVybC5wb3J0ID0gcG9ydCA9PT0gZGVmYXVsdFBvcnQodGhpcy51cmwuc2NoZW1lKSA/IG51bGwgOiBwb3J0O1xyXG4gICAgICB0aGlzLmJ1ZmZlciA9IFwiXCI7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zdGF0ZU92ZXJyaWRlKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHRoaXMuc3RhdGUgPSBcInBhdGggc3RhcnRcIjtcclxuICAgIC0tdGhpcy5wb2ludGVyO1xyXG4gIH0gZWxzZSB7XHJcbiAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcbmNvbnN0IGZpbGVPdGhlcndpc2VDb2RlUG9pbnRzID0gbmV3IFNldChbNDcsIDkyLCA2MywgMzVdKTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBmaWxlXCJdID0gZnVuY3Rpb24gcGFyc2VGaWxlKGMpIHtcclxuICB0aGlzLnVybC5zY2hlbWUgPSBcImZpbGVcIjtcclxuXHJcbiAgaWYgKGMgPT09IDQ3IHx8IGMgPT09IDkyKSB7XHJcbiAgICBpZiAoYyA9PT0gOTIpIHtcclxuICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHRoaXMuc3RhdGUgPSBcImZpbGUgc2xhc2hcIjtcclxuICB9IGVsc2UgaWYgKHRoaXMuYmFzZSAhPT0gbnVsbCAmJiB0aGlzLmJhc2Uuc2NoZW1lID09PSBcImZpbGVcIikge1xyXG4gICAgaWYgKGlzTmFOKGMpKSB7XHJcbiAgICAgIHRoaXMudXJsLmhvc3QgPSB0aGlzLmJhc2UuaG9zdDtcclxuICAgICAgdGhpcy51cmwucGF0aCA9IHRoaXMuYmFzZS5wYXRoLnNsaWNlKCk7XHJcbiAgICAgIHRoaXMudXJsLnF1ZXJ5ID0gdGhpcy5iYXNlLnF1ZXJ5O1xyXG4gICAgfSBlbHNlIGlmIChjID09PSA2Mykge1xyXG4gICAgICB0aGlzLnVybC5ob3N0ID0gdGhpcy5iYXNlLmhvc3Q7XHJcbiAgICAgIHRoaXMudXJsLnBhdGggPSB0aGlzLmJhc2UucGF0aC5zbGljZSgpO1xyXG4gICAgICB0aGlzLnVybC5xdWVyeSA9IFwiXCI7XHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcInF1ZXJ5XCI7XHJcbiAgICB9IGVsc2UgaWYgKGMgPT09IDM1KSB7XHJcbiAgICAgIHRoaXMudXJsLmhvc3QgPSB0aGlzLmJhc2UuaG9zdDtcclxuICAgICAgdGhpcy51cmwucGF0aCA9IHRoaXMuYmFzZS5wYXRoLnNsaWNlKCk7XHJcbiAgICAgIHRoaXMudXJsLnF1ZXJ5ID0gdGhpcy5iYXNlLnF1ZXJ5O1xyXG4gICAgICB0aGlzLnVybC5mcmFnbWVudCA9IFwiXCI7XHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcImZyYWdtZW50XCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5pbnB1dC5sZW5ndGggLSB0aGlzLnBvaW50ZXIgLSAxID09PSAwIHx8IC8vIHJlbWFpbmluZyBjb25zaXN0cyBvZiAwIGNvZGUgcG9pbnRzXHJcbiAgICAgICAgICAhaXNXaW5kb3dzRHJpdmVMZXR0ZXJDb2RlUG9pbnRzKGMsIHRoaXMuaW5wdXRbdGhpcy5wb2ludGVyICsgMV0pIHx8XHJcbiAgICAgICAgICAodGhpcy5pbnB1dC5sZW5ndGggLSB0aGlzLnBvaW50ZXIgLSAxID49IDIgJiYgLy8gcmVtYWluaW5nIGhhcyBhdCBsZWFzdCAyIGNvZGUgcG9pbnRzXHJcbiAgICAgICAgICAgIWZpbGVPdGhlcndpc2VDb2RlUG9pbnRzLmhhcyh0aGlzLmlucHV0W3RoaXMucG9pbnRlciArIDJdKSkpIHtcclxuICAgICAgICB0aGlzLnVybC5ob3N0ID0gdGhpcy5iYXNlLmhvc3Q7XHJcbiAgICAgICAgdGhpcy51cmwucGF0aCA9IHRoaXMuYmFzZS5wYXRoLnNsaWNlKCk7XHJcbiAgICAgICAgc2hvcnRlblBhdGgodGhpcy51cmwpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcInBhdGhcIjtcclxuICAgICAgLS10aGlzLnBvaW50ZXI7XHJcbiAgICB9XHJcbiAgfSBlbHNlIHtcclxuICAgIHRoaXMuc3RhdGUgPSBcInBhdGhcIjtcclxuICAgIC0tdGhpcy5wb2ludGVyO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5VUkxTdGF0ZU1hY2hpbmUucHJvdG90eXBlW1wicGFyc2UgZmlsZSBzbGFzaFwiXSA9IGZ1bmN0aW9uIHBhcnNlRmlsZVNsYXNoKGMpIHtcclxuICBpZiAoYyA9PT0gNDcgfHwgYyA9PT0gOTIpIHtcclxuICAgIGlmIChjID09PSA5Mikge1xyXG4gICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zdGF0ZSA9IFwiZmlsZSBob3N0XCI7XHJcbiAgfSBlbHNlIHtcclxuICAgIGlmICh0aGlzLmJhc2UgIT09IG51bGwgJiYgdGhpcy5iYXNlLnNjaGVtZSA9PT0gXCJmaWxlXCIpIHtcclxuICAgICAgaWYgKGlzTm9ybWFsaXplZFdpbmRvd3NEcml2ZUxldHRlclN0cmluZyh0aGlzLmJhc2UucGF0aFswXSkpIHtcclxuICAgICAgICB0aGlzLnVybC5wYXRoLnB1c2godGhpcy5iYXNlLnBhdGhbMF0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMudXJsLmhvc3QgPSB0aGlzLmJhc2UuaG9zdDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5zdGF0ZSA9IFwicGF0aFwiO1xyXG4gICAgLS10aGlzLnBvaW50ZXI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBmaWxlIGhvc3RcIl0gPSBmdW5jdGlvbiBwYXJzZUZpbGVIb3N0KGMsIGNTdHIpIHtcclxuICBpZiAoaXNOYU4oYykgfHwgYyA9PT0gNDcgfHwgYyA9PT0gOTIgfHwgYyA9PT0gNjMgfHwgYyA9PT0gMzUpIHtcclxuICAgIC0tdGhpcy5wb2ludGVyO1xyXG4gICAgaWYgKCF0aGlzLnN0YXRlT3ZlcnJpZGUgJiYgaXNXaW5kb3dzRHJpdmVMZXR0ZXJTdHJpbmcodGhpcy5idWZmZXIpKSB7XHJcbiAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcInBhdGhcIjtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5idWZmZXIgPT09IFwiXCIpIHtcclxuICAgICAgdGhpcy51cmwuaG9zdCA9IFwiXCI7XHJcbiAgICAgIGlmICh0aGlzLnN0YXRlT3ZlcnJpZGUpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zdGF0ZSA9IFwicGF0aCBzdGFydFwiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IGhvc3QgPSBwYXJzZUhvc3QodGhpcy5idWZmZXIsIGlzU3BlY2lhbCh0aGlzLnVybCkpO1xyXG4gICAgICBpZiAoaG9zdCA9PT0gZmFpbHVyZSkge1xyXG4gICAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChob3N0ID09PSBcImxvY2FsaG9zdFwiKSB7XHJcbiAgICAgICAgaG9zdCA9IFwiXCI7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy51cmwuaG9zdCA9IGhvc3Q7XHJcblxyXG4gICAgICBpZiAodGhpcy5zdGF0ZU92ZXJyaWRlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmJ1ZmZlciA9IFwiXCI7XHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcInBhdGggc3RhcnRcIjtcclxuICAgIH1cclxuICB9IGVsc2Uge1xyXG4gICAgdGhpcy5idWZmZXIgKz0gY1N0cjtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIHBhdGggc3RhcnRcIl0gPSBmdW5jdGlvbiBwYXJzZVBhdGhTdGFydChjKSB7XHJcbiAgaWYgKGlzU3BlY2lhbCh0aGlzLnVybCkpIHtcclxuICAgIGlmIChjID09PSA5Mikge1xyXG4gICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zdGF0ZSA9IFwicGF0aFwiO1xyXG5cclxuICAgIGlmIChjICE9PSA0NyAmJiBjICE9PSA5Mikge1xyXG4gICAgICAtLXRoaXMucG9pbnRlcjtcclxuICAgIH1cclxuICB9IGVsc2UgaWYgKCF0aGlzLnN0YXRlT3ZlcnJpZGUgJiYgYyA9PT0gNjMpIHtcclxuICAgIHRoaXMudXJsLnF1ZXJ5ID0gXCJcIjtcclxuICAgIHRoaXMuc3RhdGUgPSBcInF1ZXJ5XCI7XHJcbiAgfSBlbHNlIGlmICghdGhpcy5zdGF0ZU92ZXJyaWRlICYmIGMgPT09IDM1KSB7XHJcbiAgICB0aGlzLnVybC5mcmFnbWVudCA9IFwiXCI7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJmcmFnbWVudFwiO1xyXG4gIH0gZWxzZSBpZiAoYyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJwYXRoXCI7XHJcbiAgICBpZiAoYyAhPT0gNDcpIHtcclxuICAgICAgLS10aGlzLnBvaW50ZXI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBwYXRoXCJdID0gZnVuY3Rpb24gcGFyc2VQYXRoKGMpIHtcclxuICBpZiAoaXNOYU4oYykgfHwgYyA9PT0gNDcgfHwgKGlzU3BlY2lhbCh0aGlzLnVybCkgJiYgYyA9PT0gOTIpIHx8XHJcbiAgICAgICghdGhpcy5zdGF0ZU92ZXJyaWRlICYmIChjID09PSA2MyB8fCBjID09PSAzNSkpKSB7XHJcbiAgICBpZiAoaXNTcGVjaWFsKHRoaXMudXJsKSAmJiBjID09PSA5Mikge1xyXG4gICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpc0RvdWJsZURvdCh0aGlzLmJ1ZmZlcikpIHtcclxuICAgICAgc2hvcnRlblBhdGgodGhpcy51cmwpO1xyXG4gICAgICBpZiAoYyAhPT0gNDcgJiYgIShpc1NwZWNpYWwodGhpcy51cmwpICYmIGMgPT09IDkyKSkge1xyXG4gICAgICAgIHRoaXMudXJsLnBhdGgucHVzaChcIlwiKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChpc1NpbmdsZURvdCh0aGlzLmJ1ZmZlcikgJiYgYyAhPT0gNDcgJiZcclxuICAgICAgICAgICAgICAgIShpc1NwZWNpYWwodGhpcy51cmwpICYmIGMgPT09IDkyKSkge1xyXG4gICAgICB0aGlzLnVybC5wYXRoLnB1c2goXCJcIik7XHJcbiAgICB9IGVsc2UgaWYgKCFpc1NpbmdsZURvdCh0aGlzLmJ1ZmZlcikpIHtcclxuICAgICAgaWYgKHRoaXMudXJsLnNjaGVtZSA9PT0gXCJmaWxlXCIgJiYgdGhpcy51cmwucGF0aC5sZW5ndGggPT09IDAgJiYgaXNXaW5kb3dzRHJpdmVMZXR0ZXJTdHJpbmcodGhpcy5idWZmZXIpKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudXJsLmhvc3QgIT09IFwiXCIgJiYgdGhpcy51cmwuaG9zdCAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMudXJsLmhvc3QgPSBcIlwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmJ1ZmZlciA9IHRoaXMuYnVmZmVyWzBdICsgXCI6XCI7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy51cmwucGF0aC5wdXNoKHRoaXMuYnVmZmVyKTtcclxuICAgIH1cclxuICAgIHRoaXMuYnVmZmVyID0gXCJcIjtcclxuICAgIGlmICh0aGlzLnVybC5zY2hlbWUgPT09IFwiZmlsZVwiICYmIChjID09PSB1bmRlZmluZWQgfHwgYyA9PT0gNjMgfHwgYyA9PT0gMzUpKSB7XHJcbiAgICAgIHdoaWxlICh0aGlzLnVybC5wYXRoLmxlbmd0aCA+IDEgJiYgdGhpcy51cmwucGF0aFswXSA9PT0gXCJcIikge1xyXG4gICAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICAgICAgdGhpcy51cmwucGF0aC5zaGlmdCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoYyA9PT0gNjMpIHtcclxuICAgICAgdGhpcy51cmwucXVlcnkgPSBcIlwiO1xyXG4gICAgICB0aGlzLnN0YXRlID0gXCJxdWVyeVwiO1xyXG4gICAgfVxyXG4gICAgaWYgKGMgPT09IDM1KSB7XHJcbiAgICAgIHRoaXMudXJsLmZyYWdtZW50ID0gXCJcIjtcclxuICAgICAgdGhpcy5zdGF0ZSA9IFwiZnJhZ21lbnRcIjtcclxuICAgIH1cclxuICB9IGVsc2Uge1xyXG4gICAgLy8gVE9ETzogSWYgYyBpcyBub3QgYSBVUkwgY29kZSBwb2ludCBhbmQgbm90IFwiJVwiLCBwYXJzZSBlcnJvci5cclxuXHJcbiAgICBpZiAoYyA9PT0gMzcgJiZcclxuICAgICAgKCFpc0FTQ0lJSGV4KHRoaXMuaW5wdXRbdGhpcy5wb2ludGVyICsgMV0pIHx8XHJcbiAgICAgICAgIWlzQVNDSUlIZXgodGhpcy5pbnB1dFt0aGlzLnBvaW50ZXIgKyAyXSkpKSB7XHJcbiAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5idWZmZXIgKz0gcGVyY2VudEVuY29kZUNoYXIoYywgaXNQYXRoUGVyY2VudEVuY29kZSk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBjYW5ub3QtYmUtYS1iYXNlLVVSTCBwYXRoXCJdID0gZnVuY3Rpb24gcGFyc2VDYW5ub3RCZUFCYXNlVVJMUGF0aChjKSB7XHJcbiAgaWYgKGMgPT09IDYzKSB7XHJcbiAgICB0aGlzLnVybC5xdWVyeSA9IFwiXCI7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJxdWVyeVwiO1xyXG4gIH0gZWxzZSBpZiAoYyA9PT0gMzUpIHtcclxuICAgIHRoaXMudXJsLmZyYWdtZW50ID0gXCJcIjtcclxuICAgIHRoaXMuc3RhdGUgPSBcImZyYWdtZW50XCI7XHJcbiAgfSBlbHNlIHtcclxuICAgIC8vIFRPRE86IEFkZDogbm90IGEgVVJMIGNvZGUgcG9pbnRcclxuICAgIGlmICghaXNOYU4oYykgJiYgYyAhPT0gMzcpIHtcclxuICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoYyA9PT0gMzcgJiZcclxuICAgICAgICAoIWlzQVNDSUlIZXgodGhpcy5pbnB1dFt0aGlzLnBvaW50ZXIgKyAxXSkgfHxcclxuICAgICAgICAgIWlzQVNDSUlIZXgodGhpcy5pbnB1dFt0aGlzLnBvaW50ZXIgKyAyXSkpKSB7XHJcbiAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFpc05hTihjKSkge1xyXG4gICAgICB0aGlzLnVybC5wYXRoWzBdID0gdGhpcy51cmwucGF0aFswXSArIHBlcmNlbnRFbmNvZGVDaGFyKGMsIGlzQzBDb250cm9sUGVyY2VudEVuY29kZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBxdWVyeVwiXSA9IGZ1bmN0aW9uIHBhcnNlUXVlcnkoYywgY1N0cikge1xyXG4gIGlmIChpc05hTihjKSB8fCAoIXRoaXMuc3RhdGVPdmVycmlkZSAmJiBjID09PSAzNSkpIHtcclxuICAgIGlmICghaXNTcGVjaWFsKHRoaXMudXJsKSB8fCB0aGlzLnVybC5zY2hlbWUgPT09IFwid3NcIiB8fCB0aGlzLnVybC5zY2hlbWUgPT09IFwid3NzXCIpIHtcclxuICAgICAgdGhpcy5lbmNvZGluZ092ZXJyaWRlID0gXCJ1dGYtOFwiO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBCdWZmZXIodGhpcy5idWZmZXIpOyAvLyBUT0RPOiBVc2UgZW5jb2Rpbmcgb3ZlcnJpZGUgaW5zdGVhZFxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWZmZXIubGVuZ3RoOyArK2kpIHtcclxuICAgICAgaWYgKGJ1ZmZlcltpXSA8IDB4MjEgfHwgYnVmZmVyW2ldID4gMHg3RSB8fCBidWZmZXJbaV0gPT09IDB4MjIgfHwgYnVmZmVyW2ldID09PSAweDIzIHx8XHJcbiAgICAgICAgICBidWZmZXJbaV0gPT09IDB4M0MgfHwgYnVmZmVyW2ldID09PSAweDNFKSB7XHJcbiAgICAgICAgdGhpcy51cmwucXVlcnkgKz0gcGVyY2VudEVuY29kZShidWZmZXJbaV0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMudXJsLnF1ZXJ5ICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KGJ1ZmZlcltpXSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmJ1ZmZlciA9IFwiXCI7XHJcbiAgICBpZiAoYyA9PT0gMzUpIHtcclxuICAgICAgdGhpcy51cmwuZnJhZ21lbnQgPSBcIlwiO1xyXG4gICAgICB0aGlzLnN0YXRlID0gXCJmcmFnbWVudFwiO1xyXG4gICAgfVxyXG4gIH0gZWxzZSB7XHJcbiAgICAvLyBUT0RPOiBJZiBjIGlzIG5vdCBhIFVSTCBjb2RlIHBvaW50IGFuZCBub3QgXCIlXCIsIHBhcnNlIGVycm9yLlxyXG4gICAgaWYgKGMgPT09IDM3ICYmXHJcbiAgICAgICghaXNBU0NJSUhleCh0aGlzLmlucHV0W3RoaXMucG9pbnRlciArIDFdKSB8fFxyXG4gICAgICAgICFpc0FTQ0lJSGV4KHRoaXMuaW5wdXRbdGhpcy5wb2ludGVyICsgMl0pKSkge1xyXG4gICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYnVmZmVyICs9IGNTdHI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBmcmFnbWVudFwiXSA9IGZ1bmN0aW9uIHBhcnNlRnJhZ21lbnQoYykge1xyXG4gIGlmIChpc05hTihjKSkgeyAvLyBkbyBub3RoaW5nXHJcbiAgfSBlbHNlIGlmIChjID09PSAweDApIHtcclxuICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgfSBlbHNlIHtcclxuICAgIC8vIFRPRE86IElmIGMgaXMgbm90IGEgVVJMIGNvZGUgcG9pbnQgYW5kIG5vdCBcIiVcIiwgcGFyc2UgZXJyb3IuXHJcbiAgICBpZiAoYyA9PT0gMzcgJiZcclxuICAgICAgKCFpc0FTQ0lJSGV4KHRoaXMuaW5wdXRbdGhpcy5wb2ludGVyICsgMV0pIHx8XHJcbiAgICAgICAgIWlzQVNDSUlIZXgodGhpcy5pbnB1dFt0aGlzLnBvaW50ZXIgKyAyXSkpKSB7XHJcbiAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy51cmwuZnJhZ21lbnQgKz0gcGVyY2VudEVuY29kZUNoYXIoYywgaXNDMENvbnRyb2xQZXJjZW50RW5jb2RlKTtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuZnVuY3Rpb24gc2VyaWFsaXplVVJMKHVybCwgZXhjbHVkZUZyYWdtZW50KSB7XHJcbiAgbGV0IG91dHB1dCA9IHVybC5zY2hlbWUgKyBcIjpcIjtcclxuICBpZiAodXJsLmhvc3QgIT09IG51bGwpIHtcclxuICAgIG91dHB1dCArPSBcIi8vXCI7XHJcblxyXG4gICAgaWYgKHVybC51c2VybmFtZSAhPT0gXCJcIiB8fCB1cmwucGFzc3dvcmQgIT09IFwiXCIpIHtcclxuICAgICAgb3V0cHV0ICs9IHVybC51c2VybmFtZTtcclxuICAgICAgaWYgKHVybC5wYXNzd29yZCAhPT0gXCJcIikge1xyXG4gICAgICAgIG91dHB1dCArPSBcIjpcIiArIHVybC5wYXNzd29yZDtcclxuICAgICAgfVxyXG4gICAgICBvdXRwdXQgKz0gXCJAXCI7XHJcbiAgICB9XHJcblxyXG4gICAgb3V0cHV0ICs9IHNlcmlhbGl6ZUhvc3QodXJsLmhvc3QpO1xyXG5cclxuICAgIGlmICh1cmwucG9ydCAhPT0gbnVsbCkge1xyXG4gICAgICBvdXRwdXQgKz0gXCI6XCIgKyB1cmwucG9ydDtcclxuICAgIH1cclxuICB9IGVsc2UgaWYgKHVybC5ob3N0ID09PSBudWxsICYmIHVybC5zY2hlbWUgPT09IFwiZmlsZVwiKSB7XHJcbiAgICBvdXRwdXQgKz0gXCIvL1wiO1xyXG4gIH1cclxuXHJcbiAgaWYgKHVybC5jYW5ub3RCZUFCYXNlVVJMKSB7XHJcbiAgICBvdXRwdXQgKz0gdXJsLnBhdGhbMF07XHJcbiAgfSBlbHNlIHtcclxuICAgIGZvciAoY29uc3Qgc3RyaW5nIG9mIHVybC5wYXRoKSB7XHJcbiAgICAgIG91dHB1dCArPSBcIi9cIiArIHN0cmluZztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlmICh1cmwucXVlcnkgIT09IG51bGwpIHtcclxuICAgIG91dHB1dCArPSBcIj9cIiArIHVybC5xdWVyeTtcclxuICB9XHJcblxyXG4gIGlmICghZXhjbHVkZUZyYWdtZW50ICYmIHVybC5mcmFnbWVudCAhPT0gbnVsbCkge1xyXG4gICAgb3V0cHV0ICs9IFwiI1wiICsgdXJsLmZyYWdtZW50O1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIG91dHB1dDtcclxufVxyXG5cclxuZnVuY3Rpb24gc2VyaWFsaXplT3JpZ2luKHR1cGxlKSB7XHJcbiAgbGV0IHJlc3VsdCA9IHR1cGxlLnNjaGVtZSArIFwiOi8vXCI7XHJcbiAgcmVzdWx0ICs9IHNlcmlhbGl6ZUhvc3QodHVwbGUuaG9zdCk7XHJcblxyXG4gIGlmICh0dXBsZS5wb3J0ICE9PSBudWxsKSB7XHJcbiAgICByZXN1bHQgKz0gXCI6XCIgKyB0dXBsZS5wb3J0O1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMuc2VyaWFsaXplVVJMID0gc2VyaWFsaXplVVJMO1xyXG5cclxubW9kdWxlLmV4cG9ydHMuc2VyaWFsaXplVVJMT3JpZ2luID0gZnVuY3Rpb24gKHVybCkge1xyXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC11cmwtb3JpZ2luXHJcbiAgc3dpdGNoICh1cmwuc2NoZW1lKSB7XHJcbiAgICBjYXNlIFwiYmxvYlwiOlxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHJldHVybiBtb2R1bGUuZXhwb3J0cy5zZXJpYWxpemVVUkxPcmlnaW4obW9kdWxlLmV4cG9ydHMucGFyc2VVUkwodXJsLnBhdGhbMF0pKTtcclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIC8vIHNlcmlhbGl6aW5nIGFuIG9wYXF1ZSBvcmlnaW4gcmV0dXJucyBcIm51bGxcIlxyXG4gICAgICAgIHJldHVybiBcIm51bGxcIjtcclxuICAgICAgfVxyXG4gICAgY2FzZSBcImZ0cFwiOlxyXG4gICAgY2FzZSBcImdvcGhlclwiOlxyXG4gICAgY2FzZSBcImh0dHBcIjpcclxuICAgIGNhc2UgXCJodHRwc1wiOlxyXG4gICAgY2FzZSBcIndzXCI6XHJcbiAgICBjYXNlIFwid3NzXCI6XHJcbiAgICAgIHJldHVybiBzZXJpYWxpemVPcmlnaW4oe1xyXG4gICAgICAgIHNjaGVtZTogdXJsLnNjaGVtZSxcclxuICAgICAgICBob3N0OiB1cmwuaG9zdCxcclxuICAgICAgICBwb3J0OiB1cmwucG9ydFxyXG4gICAgICB9KTtcclxuICAgIGNhc2UgXCJmaWxlXCI6XHJcbiAgICAgIC8vIHNwZWMgc2F5cyBcImV4ZXJjaXNlIHRvIHRoZSByZWFkZXJcIiwgY2hyb21lIHNheXMgXCJmaWxlOi8vXCJcclxuICAgICAgcmV0dXJuIFwiZmlsZTovL1wiO1xyXG4gICAgZGVmYXVsdDpcclxuICAgICAgLy8gc2VyaWFsaXppbmcgYW4gb3BhcXVlIG9yaWdpbiByZXR1cm5zIFwibnVsbFwiXHJcbiAgICAgIHJldHVybiBcIm51bGxcIjtcclxuICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5iYXNpY1VSTFBhcnNlID0gZnVuY3Rpb24gKGlucHV0LCBvcHRpb25zKSB7XHJcbiAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgb3B0aW9ucyA9IHt9O1xyXG4gIH1cclxuXHJcbiAgY29uc3QgdXNtID0gbmV3IFVSTFN0YXRlTWFjaGluZShpbnB1dCwgb3B0aW9ucy5iYXNlVVJMLCBvcHRpb25zLmVuY29kaW5nT3ZlcnJpZGUsIG9wdGlvbnMudXJsLCBvcHRpb25zLnN0YXRlT3ZlcnJpZGUpO1xyXG4gIGlmICh1c20uZmFpbHVyZSkge1xyXG4gICAgcmV0dXJuIFwiZmFpbHVyZVwiO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHVzbS51cmw7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5zZXRUaGVVc2VybmFtZSA9IGZ1bmN0aW9uICh1cmwsIHVzZXJuYW1lKSB7XHJcbiAgdXJsLnVzZXJuYW1lID0gXCJcIjtcclxuICBjb25zdCBkZWNvZGVkID0gcHVueWNvZGUudWNzMi5kZWNvZGUodXNlcm5hbWUpO1xyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGVjb2RlZC5sZW5ndGg7ICsraSkge1xyXG4gICAgdXJsLnVzZXJuYW1lICs9IHBlcmNlbnRFbmNvZGVDaGFyKGRlY29kZWRbaV0sIGlzVXNlcmluZm9QZXJjZW50RW5jb2RlKTtcclxuICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5zZXRUaGVQYXNzd29yZCA9IGZ1bmN0aW9uICh1cmwsIHBhc3N3b3JkKSB7XHJcbiAgdXJsLnBhc3N3b3JkID0gXCJcIjtcclxuICBjb25zdCBkZWNvZGVkID0gcHVueWNvZGUudWNzMi5kZWNvZGUocGFzc3dvcmQpO1xyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGVjb2RlZC5sZW5ndGg7ICsraSkge1xyXG4gICAgdXJsLnBhc3N3b3JkICs9IHBlcmNlbnRFbmNvZGVDaGFyKGRlY29kZWRbaV0sIGlzVXNlcmluZm9QZXJjZW50RW5jb2RlKTtcclxuICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5zZXJpYWxpemVIb3N0ID0gc2VyaWFsaXplSG9zdDtcclxuXHJcbm1vZHVsZS5leHBvcnRzLmNhbm5vdEhhdmVBVXNlcm5hbWVQYXNzd29yZFBvcnQgPSBjYW5ub3RIYXZlQVVzZXJuYW1lUGFzc3dvcmRQb3J0O1xyXG5cclxubW9kdWxlLmV4cG9ydHMuc2VyaWFsaXplSW50ZWdlciA9IGZ1bmN0aW9uIChpbnRlZ2VyKSB7XHJcbiAgcmV0dXJuIFN0cmluZyhpbnRlZ2VyKTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzLnBhcnNlVVJMID0gZnVuY3Rpb24gKGlucHV0LCBvcHRpb25zKSB7XHJcbiAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgb3B0aW9ucyA9IHt9O1xyXG4gIH1cclxuXHJcbiAgLy8gV2UgZG9uJ3QgaGFuZGxlIGJsb2JzLCBzbyB0aGlzIGp1c3QgZGVsZWdhdGVzOlxyXG4gIHJldHVybiBtb2R1bGUuZXhwb3J0cy5iYXNpY1VSTFBhcnNlKGlucHV0LCB7IGJhc2VVUkw6IG9wdGlvbnMuYmFzZVVSTCwgZW5jb2RpbmdPdmVycmlkZTogb3B0aW9ucy5lbmNvZGluZ092ZXJyaWRlIH0pO1xyXG59O1xyXG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuY29uc3QgdXNtID0gcmVxdWlyZShcIi4vdXJsLXN0YXRlLW1hY2hpbmVcIik7XG5cbmV4cG9ydHMuaW1wbGVtZW50YXRpb24gPSBjbGFzcyBVUkxJbXBsIHtcbiAgY29uc3RydWN0b3IoY29uc3RydWN0b3JBcmdzKSB7XG4gICAgY29uc3QgdXJsID0gY29uc3RydWN0b3JBcmdzWzBdO1xuICAgIGNvbnN0IGJhc2UgPSBjb25zdHJ1Y3RvckFyZ3NbMV07XG5cbiAgICBsZXQgcGFyc2VkQmFzZSA9IG51bGw7XG4gICAgaWYgKGJhc2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFyc2VkQmFzZSA9IHVzbS5iYXNpY1VSTFBhcnNlKGJhc2UpO1xuICAgICAgaWYgKHBhcnNlZEJhc2UgPT09IFwiZmFpbHVyZVwiKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGJhc2UgVVJMXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHBhcnNlZFVSTCA9IHVzbS5iYXNpY1VSTFBhcnNlKHVybCwgeyBiYXNlVVJMOiBwYXJzZWRCYXNlIH0pO1xuICAgIGlmIChwYXJzZWRVUkwgPT09IFwiZmFpbHVyZVwiKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBVUkxcIik7XG4gICAgfVxuXG4gICAgdGhpcy5fdXJsID0gcGFyc2VkVVJMO1xuXG4gICAgLy8gVE9ETzogcXVlcnkgc3R1ZmZcbiAgfVxuXG4gIGdldCBocmVmKCkge1xuICAgIHJldHVybiB1c20uc2VyaWFsaXplVVJMKHRoaXMuX3VybCk7XG4gIH1cblxuICBzZXQgaHJlZih2KSB7XG4gICAgY29uc3QgcGFyc2VkVVJMID0gdXNtLmJhc2ljVVJMUGFyc2Uodik7XG4gICAgaWYgKHBhcnNlZFVSTCA9PT0gXCJmYWlsdXJlXCIpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIFVSTFwiKTtcbiAgICB9XG5cbiAgICB0aGlzLl91cmwgPSBwYXJzZWRVUkw7XG4gIH1cblxuICBnZXQgb3JpZ2luKCkge1xuICAgIHJldHVybiB1c20uc2VyaWFsaXplVVJMT3JpZ2luKHRoaXMuX3VybCk7XG4gIH1cblxuICBnZXQgcHJvdG9jb2woKSB7XG4gICAgcmV0dXJuIHRoaXMuX3VybC5zY2hlbWUgKyBcIjpcIjtcbiAgfVxuXG4gIHNldCBwcm90b2NvbCh2KSB7XG4gICAgdXNtLmJhc2ljVVJMUGFyc2UodiArIFwiOlwiLCB7IHVybDogdGhpcy5fdXJsLCBzdGF0ZU92ZXJyaWRlOiBcInNjaGVtZSBzdGFydFwiIH0pO1xuICB9XG5cbiAgZ2V0IHVzZXJuYW1lKCkge1xuICAgIHJldHVybiB0aGlzLl91cmwudXNlcm5hbWU7XG4gIH1cblxuICBzZXQgdXNlcm5hbWUodikge1xuICAgIGlmICh1c20uY2Fubm90SGF2ZUFVc2VybmFtZVBhc3N3b3JkUG9ydCh0aGlzLl91cmwpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdXNtLnNldFRoZVVzZXJuYW1lKHRoaXMuX3VybCwgdik7XG4gIH1cblxuICBnZXQgcGFzc3dvcmQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3VybC5wYXNzd29yZDtcbiAgfVxuXG4gIHNldCBwYXNzd29yZCh2KSB7XG4gICAgaWYgKHVzbS5jYW5ub3RIYXZlQVVzZXJuYW1lUGFzc3dvcmRQb3J0KHRoaXMuX3VybCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB1c20uc2V0VGhlUGFzc3dvcmQodGhpcy5fdXJsLCB2KTtcbiAgfVxuXG4gIGdldCBob3N0KCkge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuX3VybDtcblxuICAgIGlmICh1cmwuaG9zdCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgaWYgKHVybC5wb3J0ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gdXNtLnNlcmlhbGl6ZUhvc3QodXJsLmhvc3QpO1xuICAgIH1cblxuICAgIHJldHVybiB1c20uc2VyaWFsaXplSG9zdCh1cmwuaG9zdCkgKyBcIjpcIiArIHVzbS5zZXJpYWxpemVJbnRlZ2VyKHVybC5wb3J0KTtcbiAgfVxuXG4gIHNldCBob3N0KHYpIHtcbiAgICBpZiAodGhpcy5fdXJsLmNhbm5vdEJlQUJhc2VVUkwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB1c20uYmFzaWNVUkxQYXJzZSh2LCB7IHVybDogdGhpcy5fdXJsLCBzdGF0ZU92ZXJyaWRlOiBcImhvc3RcIiB9KTtcbiAgfVxuXG4gIGdldCBob3N0bmFtZSgpIHtcbiAgICBpZiAodGhpcy5fdXJsLmhvc3QgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHJldHVybiB1c20uc2VyaWFsaXplSG9zdCh0aGlzLl91cmwuaG9zdCk7XG4gIH1cblxuICBzZXQgaG9zdG5hbWUodikge1xuICAgIGlmICh0aGlzLl91cmwuY2Fubm90QmVBQmFzZVVSTCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHVzbS5iYXNpY1VSTFBhcnNlKHYsIHsgdXJsOiB0aGlzLl91cmwsIHN0YXRlT3ZlcnJpZGU6IFwiaG9zdG5hbWVcIiB9KTtcbiAgfVxuXG4gIGdldCBwb3J0KCkge1xuICAgIGlmICh0aGlzLl91cmwucG9ydCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVzbS5zZXJpYWxpemVJbnRlZ2VyKHRoaXMuX3VybC5wb3J0KTtcbiAgfVxuXG4gIHNldCBwb3J0KHYpIHtcbiAgICBpZiAodXNtLmNhbm5vdEhhdmVBVXNlcm5hbWVQYXNzd29yZFBvcnQodGhpcy5fdXJsKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh2ID09PSBcIlwiKSB7XG4gICAgICB0aGlzLl91cmwucG9ydCA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVzbS5iYXNpY1VSTFBhcnNlKHYsIHsgdXJsOiB0aGlzLl91cmwsIHN0YXRlT3ZlcnJpZGU6IFwicG9ydFwiIH0pO1xuICAgIH1cbiAgfVxuXG4gIGdldCBwYXRobmFtZSgpIHtcbiAgICBpZiAodGhpcy5fdXJsLmNhbm5vdEJlQUJhc2VVUkwpIHtcbiAgICAgIHJldHVybiB0aGlzLl91cmwucGF0aFswXTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fdXJsLnBhdGgubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICByZXR1cm4gXCIvXCIgKyB0aGlzLl91cmwucGF0aC5qb2luKFwiL1wiKTtcbiAgfVxuXG4gIHNldCBwYXRobmFtZSh2KSB7XG4gICAgaWYgKHRoaXMuX3VybC5jYW5ub3RCZUFCYXNlVVJMKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fdXJsLnBhdGggPSBbXTtcbiAgICB1c20uYmFzaWNVUkxQYXJzZSh2LCB7IHVybDogdGhpcy5fdXJsLCBzdGF0ZU92ZXJyaWRlOiBcInBhdGggc3RhcnRcIiB9KTtcbiAgfVxuXG4gIGdldCBzZWFyY2goKSB7XG4gICAgaWYgKHRoaXMuX3VybC5xdWVyeSA9PT0gbnVsbCB8fCB0aGlzLl91cmwucXVlcnkgPT09IFwiXCIpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHJldHVybiBcIj9cIiArIHRoaXMuX3VybC5xdWVyeTtcbiAgfVxuXG4gIHNldCBzZWFyY2godikge1xuICAgIC8vIFRPRE86IHF1ZXJ5IHN0dWZmXG5cbiAgICBjb25zdCB1cmwgPSB0aGlzLl91cmw7XG5cbiAgICBpZiAodiA9PT0gXCJcIikge1xuICAgICAgdXJsLnF1ZXJ5ID0gbnVsbDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpbnB1dCA9IHZbMF0gPT09IFwiP1wiID8gdi5zdWJzdHJpbmcoMSkgOiB2O1xuICAgIHVybC5xdWVyeSA9IFwiXCI7XG4gICAgdXNtLmJhc2ljVVJMUGFyc2UoaW5wdXQsIHsgdXJsLCBzdGF0ZU92ZXJyaWRlOiBcInF1ZXJ5XCIgfSk7XG4gIH1cblxuICBnZXQgaGFzaCgpIHtcbiAgICBpZiAodGhpcy5fdXJsLmZyYWdtZW50ID09PSBudWxsIHx8IHRoaXMuX3VybC5mcmFnbWVudCA9PT0gXCJcIikge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIFwiI1wiICsgdGhpcy5fdXJsLmZyYWdtZW50O1xuICB9XG5cbiAgc2V0IGhhc2godikge1xuICAgIGlmICh2ID09PSBcIlwiKSB7XG4gICAgICB0aGlzLl91cmwuZnJhZ21lbnQgPSBudWxsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGlucHV0ID0gdlswXSA9PT0gXCIjXCIgPyB2LnN1YnN0cmluZygxKSA6IHY7XG4gICAgdGhpcy5fdXJsLmZyYWdtZW50ID0gXCJcIjtcbiAgICB1c20uYmFzaWNVUkxQYXJzZShpbnB1dCwgeyB1cmw6IHRoaXMuX3VybCwgc3RhdGVPdmVycmlkZTogXCJmcmFnbWVudFwiIH0pO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB0aGlzLmhyZWY7XG4gIH1cbn07XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLy9VUkwtaW1wbC5qc1wiKTtcblxuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIFVSTCh1cmwpIHtcbiAgaWYgKCF0aGlzIHx8IHRoaXNbaW1wbF0gfHwgISh0aGlzIGluc3RhbmNlb2YgVVJMKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gY29uc3RydWN0ICdVUkwnOiBQbGVhc2UgdXNlIHRoZSAnbmV3JyBvcGVyYXRvciwgdGhpcyBET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi5cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ1VSTCc6IDEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAyOyArK2kpIHtcbiAgICBhcmdzW2ldID0gYXJndW1lbnRzW2ldO1xuICB9XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcIlVTVlN0cmluZ1wiXShhcmdzWzBdKTtcbiAgaWYgKGFyZ3NbMV0gIT09IHVuZGVmaW5lZCkge1xuICBhcmdzWzFdID0gY29udmVyc2lvbnNbXCJVU1ZTdHJpbmdcIl0oYXJnc1sxXSk7XG4gIH1cblxuICBtb2R1bGUuZXhwb3J0cy5zZXR1cCh0aGlzLCBhcmdzKTtcbn1cblxuVVJMLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04oKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAwOyArK2kpIHtcbiAgICBhcmdzW2ldID0gYXJndW1lbnRzW2ldO1xuICB9XG4gIHJldHVybiB0aGlzW2ltcGxdLnRvSlNPTi5hcHBseSh0aGlzW2ltcGxdLCBhcmdzKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVVJMLnByb3RvdHlwZSwgXCJocmVmXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmhyZWY7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiVVNWU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0uaHJlZiA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblVSTC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIHJldHVybiB0aGlzLmhyZWY7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVVJMLnByb3RvdHlwZSwgXCJvcmlnaW5cIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ub3JpZ2luO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVVJMLnByb3RvdHlwZSwgXCJwcm90b2NvbFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5wcm90b2NvbDtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJVU1ZTdHJpbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS5wcm90b2NvbCA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShVUkwucHJvdG90eXBlLCBcInVzZXJuYW1lXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnVzZXJuYW1lO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIlVTVlN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLnVzZXJuYW1lID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFVSTC5wcm90b3R5cGUsIFwicGFzc3dvcmRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ucGFzc3dvcmQ7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiVVNWU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0ucGFzc3dvcmQgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVVJMLnByb3RvdHlwZSwgXCJob3N0XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmhvc3Q7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiVVNWU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0uaG9zdCA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShVUkwucHJvdG90eXBlLCBcImhvc3RuYW1lXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmhvc3RuYW1lO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIlVTVlN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLmhvc3RuYW1lID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFVSTC5wcm90b3R5cGUsIFwicG9ydFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5wb3J0O1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIlVTVlN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLnBvcnQgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVVJMLnByb3RvdHlwZSwgXCJwYXRobmFtZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5wYXRobmFtZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJVU1ZTdHJpbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS5wYXRobmFtZSA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShVUkwucHJvdG90eXBlLCBcInNlYXJjaFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5zZWFyY2g7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiVVNWU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0uc2VhcmNoID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFVSTC5wcm90b3R5cGUsIFwiaGFzaFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5oYXNoO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIlVTVlN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLmhhc2ggPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpcyhvYmopIHtcbiAgICByZXR1cm4gISFvYmogJiYgb2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbjtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShVUkwucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IFVSTCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IFVSTDogVVJMIH0sXG4gICAgV29ya2VyOiB7IFVSTDogVVJMIH1cbiAgfVxufTtcblxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5VUkwgPSByZXF1aXJlKFwiLi9VUkxcIikuaW50ZXJmYWNlO1xuZXhwb3J0cy5zZXJpYWxpemVVUkwgPSByZXF1aXJlKFwiLi91cmwtc3RhdGUtbWFjaGluZVwiKS5zZXJpYWxpemVVUkw7XG5leHBvcnRzLnNlcmlhbGl6ZVVSTE9yaWdpbiA9IHJlcXVpcmUoXCIuL3VybC1zdGF0ZS1tYWNoaW5lXCIpLnNlcmlhbGl6ZVVSTE9yaWdpbjtcbmV4cG9ydHMuYmFzaWNVUkxQYXJzZSA9IHJlcXVpcmUoXCIuL3VybC1zdGF0ZS1tYWNoaW5lXCIpLmJhc2ljVVJMUGFyc2U7XG5leHBvcnRzLnNldFRoZVVzZXJuYW1lID0gcmVxdWlyZShcIi4vdXJsLXN0YXRlLW1hY2hpbmVcIikuc2V0VGhlVXNlcm5hbWU7XG5leHBvcnRzLnNldFRoZVBhc3N3b3JkID0gcmVxdWlyZShcIi4vdXJsLXN0YXRlLW1hY2hpbmVcIikuc2V0VGhlUGFzc3dvcmQ7XG5leHBvcnRzLnNlcmlhbGl6ZUhvc3QgPSByZXF1aXJlKFwiLi91cmwtc3RhdGUtbWFjaGluZVwiKS5zZXJpYWxpemVIb3N0O1xuZXhwb3J0cy5zZXJpYWxpemVJbnRlZ2VyID0gcmVxdWlyZShcIi4vdXJsLXN0YXRlLW1hY2hpbmVcIikuc2VyaWFsaXplSW50ZWdlcjtcbmV4cG9ydHMucGFyc2VVUkwgPSByZXF1aXJlKFwiLi91cmwtc3RhdGUtbWFjaGluZVwiKS5wYXJzZVVSTDtcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5mdW5jdGlvbiBfaW50ZXJvcERlZmF1bHQgKGV4KSB7IHJldHVybiAoZXggJiYgKHR5cGVvZiBleCA9PT0gJ29iamVjdCcpICYmICdkZWZhdWx0JyBpbiBleCkgPyBleFsnZGVmYXVsdCddIDogZXg7IH1cblxudmFyIFN0cmVhbSA9IF9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKCdzdHJlYW0nKSk7XG52YXIgaHR0cCA9IF9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKCdodHRwJykpO1xudmFyIFVybCA9IF9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKCd1cmwnKSk7XG52YXIgd2hhdHdnVXJsID0gX2ludGVyb3BEZWZhdWx0KHJlcXVpcmUoJ3doYXR3Zy11cmwnKSk7XG52YXIgaHR0cHMgPSBfaW50ZXJvcERlZmF1bHQocmVxdWlyZSgnaHR0cHMnKSk7XG52YXIgemxpYiA9IF9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKCd6bGliJykpO1xuXG4vLyBCYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vdG1wdmFyL2pzZG9tL2Jsb2IvYWE4NWIyYWJmMDc3NjZmZjdiZjVjMWY2ZGFhZmIzNzI2ZjJmMmRiNS9saWIvanNkb20vbGl2aW5nL2Jsb2IuanNcblxuLy8gZml4IGZvciBcIlJlYWRhYmxlXCIgaXNuJ3QgYSBuYW1lZCBleHBvcnQgaXNzdWVcbmNvbnN0IFJlYWRhYmxlID0gU3RyZWFtLlJlYWRhYmxlO1xuXG5jb25zdCBCVUZGRVIgPSBTeW1ib2woJ2J1ZmZlcicpO1xuY29uc3QgVFlQRSA9IFN5bWJvbCgndHlwZScpO1xuXG5jbGFzcyBCbG9iIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpc1tUWVBFXSA9ICcnO1xuXG5cdFx0Y29uc3QgYmxvYlBhcnRzID0gYXJndW1lbnRzWzBdO1xuXHRcdGNvbnN0IG9wdGlvbnMgPSBhcmd1bWVudHNbMV07XG5cblx0XHRjb25zdCBidWZmZXJzID0gW107XG5cdFx0bGV0IHNpemUgPSAwO1xuXG5cdFx0aWYgKGJsb2JQYXJ0cykge1xuXHRcdFx0Y29uc3QgYSA9IGJsb2JQYXJ0cztcblx0XHRcdGNvbnN0IGxlbmd0aCA9IE51bWJlcihhLmxlbmd0aCk7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGNvbnN0IGVsZW1lbnQgPSBhW2ldO1xuXHRcdFx0XHRsZXQgYnVmZmVyO1xuXHRcdFx0XHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEJ1ZmZlcikge1xuXHRcdFx0XHRcdGJ1ZmZlciA9IGVsZW1lbnQ7XG5cdFx0XHRcdH0gZWxzZSBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KGVsZW1lbnQpKSB7XG5cdFx0XHRcdFx0YnVmZmVyID0gQnVmZmVyLmZyb20oZWxlbWVudC5idWZmZXIsIGVsZW1lbnQuYnl0ZU9mZnNldCwgZWxlbWVudC5ieXRlTGVuZ3RoKTtcblx0XHRcdFx0fSBlbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcblx0XHRcdFx0XHRidWZmZXIgPSBCdWZmZXIuZnJvbShlbGVtZW50KTtcblx0XHRcdFx0fSBlbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgQmxvYikge1xuXHRcdFx0XHRcdGJ1ZmZlciA9IGVsZW1lbnRbQlVGRkVSXTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRidWZmZXIgPSBCdWZmZXIuZnJvbSh0eXBlb2YgZWxlbWVudCA9PT0gJ3N0cmluZycgPyBlbGVtZW50IDogU3RyaW5nKGVsZW1lbnQpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRzaXplICs9IGJ1ZmZlci5sZW5ndGg7XG5cdFx0XHRcdGJ1ZmZlcnMucHVzaChidWZmZXIpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXNbQlVGRkVSXSA9IEJ1ZmZlci5jb25jYXQoYnVmZmVycyk7XG5cblx0XHRsZXQgdHlwZSA9IG9wdGlvbnMgJiYgb3B0aW9ucy50eXBlICE9PSB1bmRlZmluZWQgJiYgU3RyaW5nKG9wdGlvbnMudHlwZSkudG9Mb3dlckNhc2UoKTtcblx0XHRpZiAodHlwZSAmJiAhL1teXFx1MDAyMC1cXHUwMDdFXS8udGVzdCh0eXBlKSkge1xuXHRcdFx0dGhpc1tUWVBFXSA9IHR5cGU7XG5cdFx0fVxuXHR9XG5cdGdldCBzaXplKCkge1xuXHRcdHJldHVybiB0aGlzW0JVRkZFUl0ubGVuZ3RoO1xuXHR9XG5cdGdldCB0eXBlKCkge1xuXHRcdHJldHVybiB0aGlzW1RZUEVdO1xuXHR9XG5cdHRleHQoKSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzW0JVRkZFUl0udG9TdHJpbmcoKSk7XG5cdH1cblx0YXJyYXlCdWZmZXIoKSB7XG5cdFx0Y29uc3QgYnVmID0gdGhpc1tCVUZGRVJdO1xuXHRcdGNvbnN0IGFiID0gYnVmLmJ1ZmZlci5zbGljZShidWYuYnl0ZU9mZnNldCwgYnVmLmJ5dGVPZmZzZXQgKyBidWYuYnl0ZUxlbmd0aCk7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShhYik7XG5cdH1cblx0c3RyZWFtKCkge1xuXHRcdGNvbnN0IHJlYWRhYmxlID0gbmV3IFJlYWRhYmxlKCk7XG5cdFx0cmVhZGFibGUuX3JlYWQgPSBmdW5jdGlvbiAoKSB7fTtcblx0XHRyZWFkYWJsZS5wdXNoKHRoaXNbQlVGRkVSXSk7XG5cdFx0cmVhZGFibGUucHVzaChudWxsKTtcblx0XHRyZXR1cm4gcmVhZGFibGU7XG5cdH1cblx0dG9TdHJpbmcoKSB7XG5cdFx0cmV0dXJuICdbb2JqZWN0IEJsb2JdJztcblx0fVxuXHRzbGljZSgpIHtcblx0XHRjb25zdCBzaXplID0gdGhpcy5zaXplO1xuXG5cdFx0Y29uc3Qgc3RhcnQgPSBhcmd1bWVudHNbMF07XG5cdFx0Y29uc3QgZW5kID0gYXJndW1lbnRzWzFdO1xuXHRcdGxldCByZWxhdGl2ZVN0YXJ0LCByZWxhdGl2ZUVuZDtcblx0XHRpZiAoc3RhcnQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmVsYXRpdmVTdGFydCA9IDA7XG5cdFx0fSBlbHNlIGlmIChzdGFydCA8IDApIHtcblx0XHRcdHJlbGF0aXZlU3RhcnQgPSBNYXRoLm1heChzaXplICsgc3RhcnQsIDApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZWxhdGl2ZVN0YXJ0ID0gTWF0aC5taW4oc3RhcnQsIHNpemUpO1xuXHRcdH1cblx0XHRpZiAoZW5kID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJlbGF0aXZlRW5kID0gc2l6ZTtcblx0XHR9IGVsc2UgaWYgKGVuZCA8IDApIHtcblx0XHRcdHJlbGF0aXZlRW5kID0gTWF0aC5tYXgoc2l6ZSArIGVuZCwgMCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJlbGF0aXZlRW5kID0gTWF0aC5taW4oZW5kLCBzaXplKTtcblx0XHR9XG5cdFx0Y29uc3Qgc3BhbiA9IE1hdGgubWF4KHJlbGF0aXZlRW5kIC0gcmVsYXRpdmVTdGFydCwgMCk7XG5cblx0XHRjb25zdCBidWZmZXIgPSB0aGlzW0JVRkZFUl07XG5cdFx0Y29uc3Qgc2xpY2VkQnVmZmVyID0gYnVmZmVyLnNsaWNlKHJlbGF0aXZlU3RhcnQsIHJlbGF0aXZlU3RhcnQgKyBzcGFuKTtcblx0XHRjb25zdCBibG9iID0gbmV3IEJsb2IoW10sIHsgdHlwZTogYXJndW1lbnRzWzJdIH0pO1xuXHRcdGJsb2JbQlVGRkVSXSA9IHNsaWNlZEJ1ZmZlcjtcblx0XHRyZXR1cm4gYmxvYjtcblx0fVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbG9iLnByb3RvdHlwZSwge1xuXHRzaXplOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0dHlwZTogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG5cdHNsaWNlOiB7IGVudW1lcmFibGU6IHRydWUgfVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShCbG9iLnByb3RvdHlwZSwgU3ltYm9sLnRvU3RyaW5nVGFnLCB7XG5cdHZhbHVlOiAnQmxvYicsXG5cdHdyaXRhYmxlOiBmYWxzZSxcblx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbi8qKlxuICogZmV0Y2gtZXJyb3IuanNcbiAqXG4gKiBGZXRjaEVycm9yIGludGVyZmFjZSBmb3Igb3BlcmF0aW9uYWwgZXJyb3JzXG4gKi9cblxuLyoqXG4gKiBDcmVhdGUgRmV0Y2hFcnJvciBpbnN0YW5jZVxuICpcbiAqIEBwYXJhbSAgIFN0cmluZyAgICAgIG1lc3NhZ2UgICAgICBFcnJvciBtZXNzYWdlIGZvciBodW1hblxuICogQHBhcmFtICAgU3RyaW5nICAgICAgdHlwZSAgICAgICAgIEVycm9yIHR5cGUgZm9yIG1hY2hpbmVcbiAqIEBwYXJhbSAgIFN0cmluZyAgICAgIHN5c3RlbUVycm9yICBGb3IgTm9kZS5qcyBzeXN0ZW0gZXJyb3JcbiAqIEByZXR1cm4gIEZldGNoRXJyb3JcbiAqL1xuZnVuY3Rpb24gRmV0Y2hFcnJvcihtZXNzYWdlLCB0eXBlLCBzeXN0ZW1FcnJvcikge1xuICBFcnJvci5jYWxsKHRoaXMsIG1lc3NhZ2UpO1xuXG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gIHRoaXMudHlwZSA9IHR5cGU7XG5cbiAgLy8gd2hlbiBlcnIudHlwZSBpcyBgc3lzdGVtYCwgZXJyLmNvZGUgY29udGFpbnMgc3lzdGVtIGVycm9yIGNvZGVcbiAgaWYgKHN5c3RlbUVycm9yKSB7XG4gICAgdGhpcy5jb2RlID0gdGhpcy5lcnJubyA9IHN5c3RlbUVycm9yLmNvZGU7XG4gIH1cblxuICAvLyBoaWRlIGN1c3RvbSBlcnJvciBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGZyb20gZW5kLXVzZXJzXG4gIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xufVxuXG5GZXRjaEVycm9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTtcbkZldGNoRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRmV0Y2hFcnJvcjtcbkZldGNoRXJyb3IucHJvdG90eXBlLm5hbWUgPSAnRmV0Y2hFcnJvcic7XG5cbmxldCBjb252ZXJ0O1xudHJ5IHtcblx0Y29udmVydCA9IHJlcXVpcmUoJ2VuY29kaW5nJykuY29udmVydDtcbn0gY2F0Y2ggKGUpIHt9XG5cbmNvbnN0IElOVEVSTkFMUyA9IFN5bWJvbCgnQm9keSBpbnRlcm5hbHMnKTtcblxuLy8gZml4IGFuIGlzc3VlIHdoZXJlIFwiUGFzc1Rocm91Z2hcIiBpc24ndCBhIG5hbWVkIGV4cG9ydCBmb3Igbm9kZSA8MTBcbmNvbnN0IFBhc3NUaHJvdWdoID0gU3RyZWFtLlBhc3NUaHJvdWdoO1xuXG4vKipcbiAqIEJvZHkgbWl4aW5cbiAqXG4gKiBSZWY6IGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNib2R5XG4gKlxuICogQHBhcmFtICAgU3RyZWFtICBib2R5ICBSZWFkYWJsZSBzdHJlYW1cbiAqIEBwYXJhbSAgIE9iamVjdCAgb3B0cyAgUmVzcG9uc2Ugb3B0aW9uc1xuICogQHJldHVybiAgVm9pZFxuICovXG5mdW5jdGlvbiBCb2R5KGJvZHkpIHtcblx0dmFyIF90aGlzID0gdGhpcztcblxuXHR2YXIgX3JlZiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge30sXG5cdCAgICBfcmVmJHNpemUgPSBfcmVmLnNpemU7XG5cblx0bGV0IHNpemUgPSBfcmVmJHNpemUgPT09IHVuZGVmaW5lZCA/IDAgOiBfcmVmJHNpemU7XG5cdHZhciBfcmVmJHRpbWVvdXQgPSBfcmVmLnRpbWVvdXQ7XG5cdGxldCB0aW1lb3V0ID0gX3JlZiR0aW1lb3V0ID09PSB1bmRlZmluZWQgPyAwIDogX3JlZiR0aW1lb3V0O1xuXG5cdGlmIChib2R5ID09IG51bGwpIHtcblx0XHQvLyBib2R5IGlzIHVuZGVmaW5lZCBvciBudWxsXG5cdFx0Ym9keSA9IG51bGw7XG5cdH0gZWxzZSBpZiAoaXNVUkxTZWFyY2hQYXJhbXMoYm9keSkpIHtcblx0XHQvLyBib2R5IGlzIGEgVVJMU2VhcmNoUGFyYW1zXG5cdFx0Ym9keSA9IEJ1ZmZlci5mcm9tKGJvZHkudG9TdHJpbmcoKSk7XG5cdH0gZWxzZSBpZiAoaXNCbG9iKGJvZHkpKSA7IGVsc2UgaWYgKEJ1ZmZlci5pc0J1ZmZlcihib2R5KSkgOyBlbHNlIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYm9keSkgPT09ICdbb2JqZWN0IEFycmF5QnVmZmVyXScpIHtcblx0XHQvLyBib2R5IGlzIEFycmF5QnVmZmVyXG5cdFx0Ym9keSA9IEJ1ZmZlci5mcm9tKGJvZHkpO1xuXHR9IGVsc2UgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhib2R5KSkge1xuXHRcdC8vIGJvZHkgaXMgQXJyYXlCdWZmZXJWaWV3XG5cdFx0Ym9keSA9IEJ1ZmZlci5mcm9tKGJvZHkuYnVmZmVyLCBib2R5LmJ5dGVPZmZzZXQsIGJvZHkuYnl0ZUxlbmd0aCk7XG5cdH0gZWxzZSBpZiAoYm9keSBpbnN0YW5jZW9mIFN0cmVhbSkgOyBlbHNlIHtcblx0XHQvLyBub25lIG9mIHRoZSBhYm92ZVxuXHRcdC8vIGNvZXJjZSB0byBzdHJpbmcgdGhlbiBidWZmZXJcblx0XHRib2R5ID0gQnVmZmVyLmZyb20oU3RyaW5nKGJvZHkpKTtcblx0fVxuXHR0aGlzW0lOVEVSTkFMU10gPSB7XG5cdFx0Ym9keSxcblx0XHRkaXN0dXJiZWQ6IGZhbHNlLFxuXHRcdGVycm9yOiBudWxsXG5cdH07XG5cdHRoaXMuc2l6ZSA9IHNpemU7XG5cdHRoaXMudGltZW91dCA9IHRpbWVvdXQ7XG5cblx0aWYgKGJvZHkgaW5zdGFuY2VvZiBTdHJlYW0pIHtcblx0XHRib2R5Lm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpIHtcblx0XHRcdGNvbnN0IGVycm9yID0gZXJyLm5hbWUgPT09ICdBYm9ydEVycm9yJyA/IGVyciA6IG5ldyBGZXRjaEVycm9yKGBJbnZhbGlkIHJlc3BvbnNlIGJvZHkgd2hpbGUgdHJ5aW5nIHRvIGZldGNoICR7X3RoaXMudXJsfTogJHtlcnIubWVzc2FnZX1gLCAnc3lzdGVtJywgZXJyKTtcblx0XHRcdF90aGlzW0lOVEVSTkFMU10uZXJyb3IgPSBlcnJvcjtcblx0XHR9KTtcblx0fVxufVxuXG5Cb2R5LnByb3RvdHlwZSA9IHtcblx0Z2V0IGJvZHkoKSB7XG5cdFx0cmV0dXJuIHRoaXNbSU5URVJOQUxTXS5ib2R5O1xuXHR9LFxuXG5cdGdldCBib2R5VXNlZCgpIHtcblx0XHRyZXR1cm4gdGhpc1tJTlRFUk5BTFNdLmRpc3R1cmJlZDtcblx0fSxcblxuXHQvKipcbiAgKiBEZWNvZGUgcmVzcG9uc2UgYXMgQXJyYXlCdWZmZXJcbiAgKlxuICAqIEByZXR1cm4gIFByb21pc2VcbiAgKi9cblx0YXJyYXlCdWZmZXIoKSB7XG5cdFx0cmV0dXJuIGNvbnN1bWVCb2R5LmNhbGwodGhpcykudGhlbihmdW5jdGlvbiAoYnVmKSB7XG5cdFx0XHRyZXR1cm4gYnVmLmJ1ZmZlci5zbGljZShidWYuYnl0ZU9mZnNldCwgYnVmLmJ5dGVPZmZzZXQgKyBidWYuYnl0ZUxlbmd0aCk7XG5cdFx0fSk7XG5cdH0sXG5cblx0LyoqXG4gICogUmV0dXJuIHJhdyByZXNwb25zZSBhcyBCbG9iXG4gICpcbiAgKiBAcmV0dXJuIFByb21pc2VcbiAgKi9cblx0YmxvYigpIHtcblx0XHRsZXQgY3QgPSB0aGlzLmhlYWRlcnMgJiYgdGhpcy5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJykgfHwgJyc7XG5cdFx0cmV0dXJuIGNvbnN1bWVCb2R5LmNhbGwodGhpcykudGhlbihmdW5jdGlvbiAoYnVmKSB7XG5cdFx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbihcblx0XHRcdC8vIFByZXZlbnQgY29weWluZ1xuXHRcdFx0bmV3IEJsb2IoW10sIHtcblx0XHRcdFx0dHlwZTogY3QudG9Mb3dlckNhc2UoKVxuXHRcdFx0fSksIHtcblx0XHRcdFx0W0JVRkZFUl06IGJ1ZlxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH0sXG5cblx0LyoqXG4gICogRGVjb2RlIHJlc3BvbnNlIGFzIGpzb25cbiAgKlxuICAqIEByZXR1cm4gIFByb21pc2VcbiAgKi9cblx0anNvbigpIHtcblx0XHR2YXIgX3RoaXMyID0gdGhpcztcblxuXHRcdHJldHVybiBjb25zdW1lQm9keS5jYWxsKHRoaXMpLnRoZW4oZnVuY3Rpb24gKGJ1ZmZlcikge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cmV0dXJuIEpTT04ucGFyc2UoYnVmZmVyLnRvU3RyaW5nKCkpO1xuXHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdHJldHVybiBCb2R5LlByb21pc2UucmVqZWN0KG5ldyBGZXRjaEVycm9yKGBpbnZhbGlkIGpzb24gcmVzcG9uc2UgYm9keSBhdCAke190aGlzMi51cmx9IHJlYXNvbjogJHtlcnIubWVzc2FnZX1gLCAnaW52YWxpZC1qc29uJykpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9LFxuXG5cdC8qKlxuICAqIERlY29kZSByZXNwb25zZSBhcyB0ZXh0XG4gICpcbiAgKiBAcmV0dXJuICBQcm9taXNlXG4gICovXG5cdHRleHQoKSB7XG5cdFx0cmV0dXJuIGNvbnN1bWVCb2R5LmNhbGwodGhpcykudGhlbihmdW5jdGlvbiAoYnVmZmVyKSB7XG5cdFx0XHRyZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7XG5cdFx0fSk7XG5cdH0sXG5cblx0LyoqXG4gICogRGVjb2RlIHJlc3BvbnNlIGFzIGJ1ZmZlciAobm9uLXNwZWMgYXBpKVxuICAqXG4gICogQHJldHVybiAgUHJvbWlzZVxuICAqL1xuXHRidWZmZXIoKSB7XG5cdFx0cmV0dXJuIGNvbnN1bWVCb2R5LmNhbGwodGhpcyk7XG5cdH0sXG5cblx0LyoqXG4gICogRGVjb2RlIHJlc3BvbnNlIGFzIHRleHQsIHdoaWxlIGF1dG9tYXRpY2FsbHkgZGV0ZWN0aW5nIHRoZSBlbmNvZGluZyBhbmRcbiAgKiB0cnlpbmcgdG8gZGVjb2RlIHRvIFVURi04IChub24tc3BlYyBhcGkpXG4gICpcbiAgKiBAcmV0dXJuICBQcm9taXNlXG4gICovXG5cdHRleHRDb252ZXJ0ZWQoKSB7XG5cdFx0dmFyIF90aGlzMyA9IHRoaXM7XG5cblx0XHRyZXR1cm4gY29uc3VtZUJvZHkuY2FsbCh0aGlzKS50aGVuKGZ1bmN0aW9uIChidWZmZXIpIHtcblx0XHRcdHJldHVybiBjb252ZXJ0Qm9keShidWZmZXIsIF90aGlzMy5oZWFkZXJzKTtcblx0XHR9KTtcblx0fVxufTtcblxuLy8gSW4gYnJvd3NlcnMsIGFsbCBwcm9wZXJ0aWVzIGFyZSBlbnVtZXJhYmxlLlxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQm9keS5wcm90b3R5cGUsIHtcblx0Ym9keTogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG5cdGJvZHlVc2VkOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0YXJyYXlCdWZmZXI6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHRibG9iOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0anNvbjogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG5cdHRleHQ6IHsgZW51bWVyYWJsZTogdHJ1ZSB9XG59KTtcblxuQm9keS5taXhJbiA9IGZ1bmN0aW9uIChwcm90bykge1xuXHRmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoQm9keS5wcm90b3R5cGUpKSB7XG5cdFx0Ly8gaXN0YW5idWwgaWdub3JlIGVsc2U6IGZ1dHVyZSBwcm9vZlxuXHRcdGlmICghKG5hbWUgaW4gcHJvdG8pKSB7XG5cdFx0XHRjb25zdCBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihCb2R5LnByb3RvdHlwZSwgbmFtZSk7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG8sIG5hbWUsIGRlc2MpO1xuXHRcdH1cblx0fVxufTtcblxuLyoqXG4gKiBDb25zdW1lIGFuZCBjb252ZXJ0IGFuIGVudGlyZSBCb2R5IHRvIGEgQnVmZmVyLlxuICpcbiAqIFJlZjogaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtYm9keS1jb25zdW1lLWJvZHlcbiAqXG4gKiBAcmV0dXJuICBQcm9taXNlXG4gKi9cbmZ1bmN0aW9uIGNvbnN1bWVCb2R5KCkge1xuXHR2YXIgX3RoaXM0ID0gdGhpcztcblxuXHRpZiAodGhpc1tJTlRFUk5BTFNdLmRpc3R1cmJlZCkge1xuXHRcdHJldHVybiBCb2R5LlByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoYGJvZHkgdXNlZCBhbHJlYWR5IGZvcjogJHt0aGlzLnVybH1gKSk7XG5cdH1cblxuXHR0aGlzW0lOVEVSTkFMU10uZGlzdHVyYmVkID0gdHJ1ZTtcblxuXHRpZiAodGhpc1tJTlRFUk5BTFNdLmVycm9yKSB7XG5cdFx0cmV0dXJuIEJvZHkuUHJvbWlzZS5yZWplY3QodGhpc1tJTlRFUk5BTFNdLmVycm9yKTtcblx0fVxuXG5cdGxldCBib2R5ID0gdGhpcy5ib2R5O1xuXG5cdC8vIGJvZHkgaXMgbnVsbFxuXHRpZiAoYm9keSA9PT0gbnVsbCkge1xuXHRcdHJldHVybiBCb2R5LlByb21pc2UucmVzb2x2ZShCdWZmZXIuYWxsb2MoMCkpO1xuXHR9XG5cblx0Ly8gYm9keSBpcyBibG9iXG5cdGlmIChpc0Jsb2IoYm9keSkpIHtcblx0XHRib2R5ID0gYm9keS5zdHJlYW0oKTtcblx0fVxuXG5cdC8vIGJvZHkgaXMgYnVmZmVyXG5cdGlmIChCdWZmZXIuaXNCdWZmZXIoYm9keSkpIHtcblx0XHRyZXR1cm4gQm9keS5Qcm9taXNlLnJlc29sdmUoYm9keSk7XG5cdH1cblxuXHQvLyBpc3RhbmJ1bCBpZ25vcmUgaWY6IHNob3VsZCBuZXZlciBoYXBwZW5cblx0aWYgKCEoYm9keSBpbnN0YW5jZW9mIFN0cmVhbSkpIHtcblx0XHRyZXR1cm4gQm9keS5Qcm9taXNlLnJlc29sdmUoQnVmZmVyLmFsbG9jKDApKTtcblx0fVxuXG5cdC8vIGJvZHkgaXMgc3RyZWFtXG5cdC8vIGdldCByZWFkeSB0byBhY3R1YWxseSBjb25zdW1lIHRoZSBib2R5XG5cdGxldCBhY2N1bSA9IFtdO1xuXHRsZXQgYWNjdW1CeXRlcyA9IDA7XG5cdGxldCBhYm9ydCA9IGZhbHNlO1xuXG5cdHJldHVybiBuZXcgQm9keS5Qcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcblx0XHRsZXQgcmVzVGltZW91dDtcblxuXHRcdC8vIGFsbG93IHRpbWVvdXQgb24gc2xvdyByZXNwb25zZSBib2R5XG5cdFx0aWYgKF90aGlzNC50aW1lb3V0KSB7XG5cdFx0XHRyZXNUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdGFib3J0ID0gdHJ1ZTtcblx0XHRcdFx0cmVqZWN0KG5ldyBGZXRjaEVycm9yKGBSZXNwb25zZSB0aW1lb3V0IHdoaWxlIHRyeWluZyB0byBmZXRjaCAke190aGlzNC51cmx9IChvdmVyICR7X3RoaXM0LnRpbWVvdXR9bXMpYCwgJ2JvZHktdGltZW91dCcpKTtcblx0XHRcdH0sIF90aGlzNC50aW1lb3V0KTtcblx0XHR9XG5cblx0XHQvLyBoYW5kbGUgc3RyZWFtIGVycm9yc1xuXHRcdGJvZHkub24oJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xuXHRcdFx0aWYgKGVyci5uYW1lID09PSAnQWJvcnRFcnJvcicpIHtcblx0XHRcdFx0Ly8gaWYgdGhlIHJlcXVlc3Qgd2FzIGFib3J0ZWQsIHJlamVjdCB3aXRoIHRoaXMgRXJyb3Jcblx0XHRcdFx0YWJvcnQgPSB0cnVlO1xuXHRcdFx0XHRyZWplY3QoZXJyKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIG90aGVyIGVycm9ycywgc3VjaCBhcyBpbmNvcnJlY3QgY29udGVudC1lbmNvZGluZ1xuXHRcdFx0XHRyZWplY3QobmV3IEZldGNoRXJyb3IoYEludmFsaWQgcmVzcG9uc2UgYm9keSB3aGlsZSB0cnlpbmcgdG8gZmV0Y2ggJHtfdGhpczQudXJsfTogJHtlcnIubWVzc2FnZX1gLCAnc3lzdGVtJywgZXJyKSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRib2R5Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7XG5cdFx0XHRpZiAoYWJvcnQgfHwgY2h1bmsgPT09IG51bGwpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoX3RoaXM0LnNpemUgJiYgYWNjdW1CeXRlcyArIGNodW5rLmxlbmd0aCA+IF90aGlzNC5zaXplKSB7XG5cdFx0XHRcdGFib3J0ID0gdHJ1ZTtcblx0XHRcdFx0cmVqZWN0KG5ldyBGZXRjaEVycm9yKGBjb250ZW50IHNpemUgYXQgJHtfdGhpczQudXJsfSBvdmVyIGxpbWl0OiAke190aGlzNC5zaXplfWAsICdtYXgtc2l6ZScpKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRhY2N1bUJ5dGVzICs9IGNodW5rLmxlbmd0aDtcblx0XHRcdGFjY3VtLnB1c2goY2h1bmspO1xuXHRcdH0pO1xuXG5cdFx0Ym9keS5vbignZW5kJywgZnVuY3Rpb24gKCkge1xuXHRcdFx0aWYgKGFib3J0KSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Y2xlYXJUaW1lb3V0KHJlc1RpbWVvdXQpO1xuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRyZXNvbHZlKEJ1ZmZlci5jb25jYXQoYWNjdW0sIGFjY3VtQnl0ZXMpKTtcblx0XHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0XHQvLyBoYW5kbGUgc3RyZWFtcyB0aGF0IGhhdmUgYWNjdW11bGF0ZWQgdG9vIG11Y2ggZGF0YSAoaXNzdWUgIzQxNClcblx0XHRcdFx0cmVqZWN0KG5ldyBGZXRjaEVycm9yKGBDb3VsZCBub3QgY3JlYXRlIEJ1ZmZlciBmcm9tIHJlc3BvbnNlIGJvZHkgZm9yICR7X3RoaXM0LnVybH06ICR7ZXJyLm1lc3NhZ2V9YCwgJ3N5c3RlbScsIGVycikpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBEZXRlY3QgYnVmZmVyIGVuY29kaW5nIGFuZCBjb252ZXJ0IHRvIHRhcmdldCBlbmNvZGluZ1xuICogcmVmOiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDExL1dELWh0bWw1LTIwMTEwMTEzL3BhcnNpbmcuaHRtbCNkZXRlcm1pbmluZy10aGUtY2hhcmFjdGVyLWVuY29kaW5nXG4gKlxuICogQHBhcmFtICAgQnVmZmVyICBidWZmZXIgICAgSW5jb21pbmcgYnVmZmVyXG4gKiBAcGFyYW0gICBTdHJpbmcgIGVuY29kaW5nICBUYXJnZXQgZW5jb2RpbmdcbiAqIEByZXR1cm4gIFN0cmluZ1xuICovXG5mdW5jdGlvbiBjb252ZXJ0Qm9keShidWZmZXIsIGhlYWRlcnMpIHtcblx0aWYgKHR5cGVvZiBjb252ZXJ0ICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdUaGUgcGFja2FnZSBgZW5jb2RpbmdgIG11c3QgYmUgaW5zdGFsbGVkIHRvIHVzZSB0aGUgdGV4dENvbnZlcnRlZCgpIGZ1bmN0aW9uJyk7XG5cdH1cblxuXHRjb25zdCBjdCA9IGhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKTtcblx0bGV0IGNoYXJzZXQgPSAndXRmLTgnO1xuXHRsZXQgcmVzLCBzdHI7XG5cblx0Ly8gaGVhZGVyXG5cdGlmIChjdCkge1xuXHRcdHJlcyA9IC9jaGFyc2V0PShbXjtdKikvaS5leGVjKGN0KTtcblx0fVxuXG5cdC8vIG5vIGNoYXJzZXQgaW4gY29udGVudCB0eXBlLCBwZWVrIGF0IHJlc3BvbnNlIGJvZHkgZm9yIGF0IG1vc3QgMTAyNCBieXRlc1xuXHRzdHIgPSBidWZmZXIuc2xpY2UoMCwgMTAyNCkudG9TdHJpbmcoKTtcblxuXHQvLyBodG1sNVxuXHRpZiAoIXJlcyAmJiBzdHIpIHtcblx0XHRyZXMgPSAvPG1ldGEuKz9jaGFyc2V0PShbJ1wiXSkoLis/KVxcMS9pLmV4ZWMoc3RyKTtcblx0fVxuXG5cdC8vIGh0bWw0XG5cdGlmICghcmVzICYmIHN0cikge1xuXHRcdHJlcyA9IC88bWV0YVtcXHNdKz9odHRwLWVxdWl2PShbJ1wiXSljb250ZW50LXR5cGVcXDFbXFxzXSs/Y29udGVudD0oWydcIl0pKC4rPylcXDIvaS5leGVjKHN0cik7XG5cdFx0aWYgKCFyZXMpIHtcblx0XHRcdHJlcyA9IC88bWV0YVtcXHNdKz9jb250ZW50PShbJ1wiXSkoLis/KVxcMVtcXHNdKz9odHRwLWVxdWl2PShbJ1wiXSljb250ZW50LXR5cGVcXDMvaS5leGVjKHN0cik7XG5cdFx0XHRpZiAocmVzKSB7XG5cdFx0XHRcdHJlcy5wb3AoKTsgLy8gZHJvcCBsYXN0IHF1b3RlXG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHJlcykge1xuXHRcdFx0cmVzID0gL2NoYXJzZXQ9KC4qKS9pLmV4ZWMocmVzLnBvcCgpKTtcblx0XHR9XG5cdH1cblxuXHQvLyB4bWxcblx0aWYgKCFyZXMgJiYgc3RyKSB7XG5cdFx0cmVzID0gLzxcXD94bWwuKz9lbmNvZGluZz0oWydcIl0pKC4rPylcXDEvaS5leGVjKHN0cik7XG5cdH1cblxuXHQvLyBmb3VuZCBjaGFyc2V0XG5cdGlmIChyZXMpIHtcblx0XHRjaGFyc2V0ID0gcmVzLnBvcCgpO1xuXG5cdFx0Ly8gcHJldmVudCBkZWNvZGUgaXNzdWVzIHdoZW4gc2l0ZXMgdXNlIGluY29ycmVjdCBlbmNvZGluZ1xuXHRcdC8vIHJlZjogaHR0cHM6Ly9oc2l2b25lbi5maS9lbmNvZGluZy1tZW51L1xuXHRcdGlmIChjaGFyc2V0ID09PSAnZ2IyMzEyJyB8fCBjaGFyc2V0ID09PSAnZ2JrJykge1xuXHRcdFx0Y2hhcnNldCA9ICdnYjE4MDMwJztcblx0XHR9XG5cdH1cblxuXHQvLyB0dXJuIHJhdyBidWZmZXJzIGludG8gYSBzaW5nbGUgdXRmLTggYnVmZmVyXG5cdHJldHVybiBjb252ZXJ0KGJ1ZmZlciwgJ1VURi04JywgY2hhcnNldCkudG9TdHJpbmcoKTtcbn1cblxuLyoqXG4gKiBEZXRlY3QgYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0XG4gKiByZWY6IGh0dHBzOi8vZ2l0aHViLmNvbS9iaXRpbm4vbm9kZS1mZXRjaC9pc3N1ZXMvMjk2I2lzc3VlY29tbWVudC0zMDc1OTgxNDNcbiAqXG4gKiBAcGFyYW0gICBPYmplY3QgIG9iaiAgICAgT2JqZWN0IHRvIGRldGVjdCBieSB0eXBlIG9yIGJyYW5kXG4gKiBAcmV0dXJuICBTdHJpbmdcbiAqL1xuZnVuY3Rpb24gaXNVUkxTZWFyY2hQYXJhbXMob2JqKSB7XG5cdC8vIER1Y2stdHlwaW5nIGFzIGEgbmVjZXNzYXJ5IGNvbmRpdGlvbi5cblx0aWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnIHx8IHR5cGVvZiBvYmouYXBwZW5kICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBvYmouZGVsZXRlICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBvYmouZ2V0ICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBvYmouZ2V0QWxsICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBvYmouaGFzICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBvYmouc2V0ICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Ly8gQnJhbmQtY2hlY2tpbmcgYW5kIG1vcmUgZHVjay10eXBpbmcgYXMgb3B0aW9uYWwgY29uZGl0aW9uLlxuXHRyZXR1cm4gb2JqLmNvbnN0cnVjdG9yLm5hbWUgPT09ICdVUkxTZWFyY2hQYXJhbXMnIHx8IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBVUkxTZWFyY2hQYXJhbXNdJyB8fCB0eXBlb2Ygb2JqLnNvcnQgPT09ICdmdW5jdGlvbic7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYG9iamAgaXMgYSBXM0MgYEJsb2JgIG9iamVjdCAod2hpY2ggYEZpbGVgIGluaGVyaXRzIGZyb20pXG4gKiBAcGFyYW0gIHsqfSBvYmpcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzQmxvYihvYmopIHtcblx0cmV0dXJuIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHR5cGVvZiBvYmouYXJyYXlCdWZmZXIgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIG9iai50eXBlID09PSAnc3RyaW5nJyAmJiB0eXBlb2Ygb2JqLnN0cmVhbSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2Ygb2JqLmNvbnN0cnVjdG9yID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBvYmouY29uc3RydWN0b3IubmFtZSA9PT0gJ3N0cmluZycgJiYgL14oQmxvYnxGaWxlKSQvLnRlc3Qob2JqLmNvbnN0cnVjdG9yLm5hbWUpICYmIC9eKEJsb2J8RmlsZSkkLy50ZXN0KG9ialtTeW1ib2wudG9TdHJpbmdUYWddKTtcbn1cblxuLyoqXG4gKiBDbG9uZSBib2R5IGdpdmVuIFJlcy9SZXEgaW5zdGFuY2VcbiAqXG4gKiBAcGFyYW0gICBNaXhlZCAgaW5zdGFuY2UgIFJlc3BvbnNlIG9yIFJlcXVlc3QgaW5zdGFuY2VcbiAqIEByZXR1cm4gIE1peGVkXG4gKi9cbmZ1bmN0aW9uIGNsb25lKGluc3RhbmNlKSB7XG5cdGxldCBwMSwgcDI7XG5cdGxldCBib2R5ID0gaW5zdGFuY2UuYm9keTtcblxuXHQvLyBkb24ndCBhbGxvdyBjbG9uaW5nIGEgdXNlZCBib2R5XG5cdGlmIChpbnN0YW5jZS5ib2R5VXNlZCkge1xuXHRcdHRocm93IG5ldyBFcnJvcignY2Fubm90IGNsb25lIGJvZHkgYWZ0ZXIgaXQgaXMgdXNlZCcpO1xuXHR9XG5cblx0Ly8gY2hlY2sgdGhhdCBib2R5IGlzIGEgc3RyZWFtIGFuZCBub3QgZm9ybS1kYXRhIG9iamVjdFxuXHQvLyBub3RlOiB3ZSBjYW4ndCBjbG9uZSB0aGUgZm9ybS1kYXRhIG9iamVjdCB3aXRob3V0IGhhdmluZyBpdCBhcyBhIGRlcGVuZGVuY3lcblx0aWYgKGJvZHkgaW5zdGFuY2VvZiBTdHJlYW0gJiYgdHlwZW9mIGJvZHkuZ2V0Qm91bmRhcnkgIT09ICdmdW5jdGlvbicpIHtcblx0XHQvLyB0ZWUgaW5zdGFuY2UgYm9keVxuXHRcdHAxID0gbmV3IFBhc3NUaHJvdWdoKCk7XG5cdFx0cDIgPSBuZXcgUGFzc1Rocm91Z2goKTtcblx0XHRib2R5LnBpcGUocDEpO1xuXHRcdGJvZHkucGlwZShwMik7XG5cdFx0Ly8gc2V0IGluc3RhbmNlIGJvZHkgdG8gdGVlZCBib2R5IGFuZCByZXR1cm4gdGhlIG90aGVyIHRlZWQgYm9keVxuXHRcdGluc3RhbmNlW0lOVEVSTkFMU10uYm9keSA9IHAxO1xuXHRcdGJvZHkgPSBwMjtcblx0fVxuXG5cdHJldHVybiBib2R5O1xufVxuXG4vKipcbiAqIFBlcmZvcm1zIHRoZSBvcGVyYXRpb24gXCJleHRyYWN0IGEgYENvbnRlbnQtVHlwZWAgdmFsdWUgZnJvbSB8b2JqZWN0fFwiIGFzXG4gKiBzcGVjaWZpZWQgaW4gdGhlIHNwZWNpZmljYXRpb246XG4gKiBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1ib2R5aW5pdC1leHRyYWN0XG4gKlxuICogVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgaW5zdGFuY2UuYm9keSBpcyBwcmVzZW50LlxuICpcbiAqIEBwYXJhbSAgIE1peGVkICBpbnN0YW5jZSAgQW55IG9wdGlvbnMuYm9keSBpbnB1dFxuICovXG5mdW5jdGlvbiBleHRyYWN0Q29udGVudFR5cGUoYm9keSkge1xuXHRpZiAoYm9keSA9PT0gbnVsbCkge1xuXHRcdC8vIGJvZHkgaXMgbnVsbFxuXHRcdHJldHVybiBudWxsO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJykge1xuXHRcdC8vIGJvZHkgaXMgc3RyaW5nXG5cdFx0cmV0dXJuICd0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLTgnO1xuXHR9IGVsc2UgaWYgKGlzVVJMU2VhcmNoUGFyYW1zKGJvZHkpKSB7XG5cdFx0Ly8gYm9keSBpcyBhIFVSTFNlYXJjaFBhcmFtc1xuXHRcdHJldHVybiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLTgnO1xuXHR9IGVsc2UgaWYgKGlzQmxvYihib2R5KSkge1xuXHRcdC8vIGJvZHkgaXMgYmxvYlxuXHRcdHJldHVybiBib2R5LnR5cGUgfHwgbnVsbDtcblx0fSBlbHNlIGlmIChCdWZmZXIuaXNCdWZmZXIoYm9keSkpIHtcblx0XHQvLyBib2R5IGlzIGJ1ZmZlclxuXHRcdHJldHVybiBudWxsO1xuXHR9IGVsc2UgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChib2R5KSA9PT0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJykge1xuXHRcdC8vIGJvZHkgaXMgQXJyYXlCdWZmZXJcblx0XHRyZXR1cm4gbnVsbDtcblx0fSBlbHNlIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcoYm9keSkpIHtcblx0XHQvLyBib2R5IGlzIEFycmF5QnVmZmVyVmlld1xuXHRcdHJldHVybiBudWxsO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBib2R5LmdldEJvdW5kYXJ5ID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0Ly8gZGV0ZWN0IGZvcm0gZGF0YSBpbnB1dCBmcm9tIGZvcm0tZGF0YSBtb2R1bGVcblx0XHRyZXR1cm4gYG11bHRpcGFydC9mb3JtLWRhdGE7Ym91bmRhcnk9JHtib2R5LmdldEJvdW5kYXJ5KCl9YDtcblx0fSBlbHNlIGlmIChib2R5IGluc3RhbmNlb2YgU3RyZWFtKSB7XG5cdFx0Ly8gYm9keSBpcyBzdHJlYW1cblx0XHQvLyBjYW4ndCByZWFsbHkgZG8gbXVjaCBhYm91dCB0aGlzXG5cdFx0cmV0dXJuIG51bGw7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gQm9keSBjb25zdHJ1Y3RvciBkZWZhdWx0cyBvdGhlciB0aGluZ3MgdG8gc3RyaW5nXG5cdFx0cmV0dXJuICd0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLTgnO1xuXHR9XG59XG5cbi8qKlxuICogVGhlIEZldGNoIFN0YW5kYXJkIHRyZWF0cyB0aGlzIGFzIGlmIFwidG90YWwgYnl0ZXNcIiBpcyBhIHByb3BlcnR5IG9uIHRoZSBib2R5LlxuICogRm9yIHVzLCB3ZSBoYXZlIHRvIGV4cGxpY2l0bHkgZ2V0IGl0IHdpdGggYSBmdW5jdGlvbi5cbiAqXG4gKiByZWY6IGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWJvZHktdG90YWwtYnl0ZXNcbiAqXG4gKiBAcGFyYW0gICBCb2R5ICAgIGluc3RhbmNlICAgSW5zdGFuY2Ugb2YgQm9keVxuICogQHJldHVybiAgTnVtYmVyPyAgICAgICAgICAgIE51bWJlciBvZiBieXRlcywgb3IgbnVsbCBpZiBub3QgcG9zc2libGVcbiAqL1xuZnVuY3Rpb24gZ2V0VG90YWxCeXRlcyhpbnN0YW5jZSkge1xuXHRjb25zdCBib2R5ID0gaW5zdGFuY2UuYm9keTtcblxuXG5cdGlmIChib2R5ID09PSBudWxsKSB7XG5cdFx0Ly8gYm9keSBpcyBudWxsXG5cdFx0cmV0dXJuIDA7XG5cdH0gZWxzZSBpZiAoaXNCbG9iKGJvZHkpKSB7XG5cdFx0cmV0dXJuIGJvZHkuc2l6ZTtcblx0fSBlbHNlIGlmIChCdWZmZXIuaXNCdWZmZXIoYm9keSkpIHtcblx0XHQvLyBib2R5IGlzIGJ1ZmZlclxuXHRcdHJldHVybiBib2R5Lmxlbmd0aDtcblx0fSBlbHNlIGlmIChib2R5ICYmIHR5cGVvZiBib2R5LmdldExlbmd0aFN5bmMgPT09ICdmdW5jdGlvbicpIHtcblx0XHQvLyBkZXRlY3QgZm9ybSBkYXRhIGlucHV0IGZyb20gZm9ybS1kYXRhIG1vZHVsZVxuXHRcdGlmIChib2R5Ll9sZW5ndGhSZXRyaWV2ZXJzICYmIGJvZHkuX2xlbmd0aFJldHJpZXZlcnMubGVuZ3RoID09IDAgfHwgLy8gMS54XG5cdFx0Ym9keS5oYXNLbm93bkxlbmd0aCAmJiBib2R5Lmhhc0tub3duTGVuZ3RoKCkpIHtcblx0XHRcdC8vIDIueFxuXHRcdFx0cmV0dXJuIGJvZHkuZ2V0TGVuZ3RoU3luYygpO1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fSBlbHNlIHtcblx0XHQvLyBib2R5IGlzIHN0cmVhbVxuXHRcdHJldHVybiBudWxsO1xuXHR9XG59XG5cbi8qKlxuICogV3JpdGUgYSBCb2R5IHRvIGEgTm9kZS5qcyBXcml0YWJsZVN0cmVhbSAoZS5nLiBodHRwLlJlcXVlc3QpIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gICBCb2R5ICAgIGluc3RhbmNlICAgSW5zdGFuY2Ugb2YgQm9keVxuICogQHJldHVybiAgVm9pZFxuICovXG5mdW5jdGlvbiB3cml0ZVRvU3RyZWFtKGRlc3QsIGluc3RhbmNlKSB7XG5cdGNvbnN0IGJvZHkgPSBpbnN0YW5jZS5ib2R5O1xuXG5cblx0aWYgKGJvZHkgPT09IG51bGwpIHtcblx0XHQvLyBib2R5IGlzIG51bGxcblx0XHRkZXN0LmVuZCgpO1xuXHR9IGVsc2UgaWYgKGlzQmxvYihib2R5KSkge1xuXHRcdGJvZHkuc3RyZWFtKCkucGlwZShkZXN0KTtcblx0fSBlbHNlIGlmIChCdWZmZXIuaXNCdWZmZXIoYm9keSkpIHtcblx0XHQvLyBib2R5IGlzIGJ1ZmZlclxuXHRcdGRlc3Qud3JpdGUoYm9keSk7XG5cdFx0ZGVzdC5lbmQoKTtcblx0fSBlbHNlIHtcblx0XHQvLyBib2R5IGlzIHN0cmVhbVxuXHRcdGJvZHkucGlwZShkZXN0KTtcblx0fVxufVxuXG4vLyBleHBvc2UgUHJvbWlzZVxuQm9keS5Qcm9taXNlID0gZ2xvYmFsLlByb21pc2U7XG5cbi8qKlxuICogaGVhZGVycy5qc1xuICpcbiAqIEhlYWRlcnMgY2xhc3Mgb2ZmZXJzIGNvbnZlbmllbnQgaGVscGVyc1xuICovXG5cbmNvbnN0IGludmFsaWRUb2tlblJlZ2V4ID0gL1teXFxeX2BhLXpBLVpcXC0wLTkhIyQlJicqKy58fl0vO1xuY29uc3QgaW52YWxpZEhlYWRlckNoYXJSZWdleCA9IC9bXlxcdFxceDIwLVxceDdlXFx4ODAtXFx4ZmZdLztcblxuZnVuY3Rpb24gdmFsaWRhdGVOYW1lKG5hbWUpIHtcblx0bmFtZSA9IGAke25hbWV9YDtcblx0aWYgKGludmFsaWRUb2tlblJlZ2V4LnRlc3QobmFtZSkgfHwgbmFtZSA9PT0gJycpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKGAke25hbWV9IGlzIG5vdCBhIGxlZ2FsIEhUVFAgaGVhZGVyIG5hbWVgKTtcblx0fVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVZhbHVlKHZhbHVlKSB7XG5cdHZhbHVlID0gYCR7dmFsdWV9YDtcblx0aWYgKGludmFsaWRIZWFkZXJDaGFyUmVnZXgudGVzdCh2YWx1ZSkpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKGAke3ZhbHVlfSBpcyBub3QgYSBsZWdhbCBIVFRQIGhlYWRlciB2YWx1ZWApO1xuXHR9XG59XG5cbi8qKlxuICogRmluZCB0aGUga2V5IGluIHRoZSBtYXAgb2JqZWN0IGdpdmVuIGEgaGVhZGVyIG5hbWUuXG4gKlxuICogUmV0dXJucyB1bmRlZmluZWQgaWYgbm90IGZvdW5kLlxuICpcbiAqIEBwYXJhbSAgIFN0cmluZyAgbmFtZSAgSGVhZGVyIG5hbWVcbiAqIEByZXR1cm4gIFN0cmluZ3xVbmRlZmluZWRcbiAqL1xuZnVuY3Rpb24gZmluZChtYXAsIG5hbWUpIHtcblx0bmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcblx0Zm9yIChjb25zdCBrZXkgaW4gbWFwKSB7XG5cdFx0aWYgKGtleS50b0xvd2VyQ2FzZSgpID09PSBuYW1lKSB7XG5cdFx0XHRyZXR1cm4ga2V5O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5jb25zdCBNQVAgPSBTeW1ib2woJ21hcCcpO1xuY2xhc3MgSGVhZGVycyB7XG5cdC8qKlxuICAqIEhlYWRlcnMgY2xhc3NcbiAgKlxuICAqIEBwYXJhbSAgIE9iamVjdCAgaGVhZGVycyAgUmVzcG9uc2UgaGVhZGVyc1xuICAqIEByZXR1cm4gIFZvaWRcbiAgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0bGV0IGluaXQgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZDtcblxuXHRcdHRoaXNbTUFQXSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cblx0XHRpZiAoaW5pdCBpbnN0YW5jZW9mIEhlYWRlcnMpIHtcblx0XHRcdGNvbnN0IHJhd0hlYWRlcnMgPSBpbml0LnJhdygpO1xuXHRcdFx0Y29uc3QgaGVhZGVyTmFtZXMgPSBPYmplY3Qua2V5cyhyYXdIZWFkZXJzKTtcblxuXHRcdFx0Zm9yIChjb25zdCBoZWFkZXJOYW1lIG9mIGhlYWRlck5hbWVzKSB7XG5cdFx0XHRcdGZvciAoY29uc3QgdmFsdWUgb2YgcmF3SGVhZGVyc1toZWFkZXJOYW1lXSkge1xuXHRcdFx0XHRcdHRoaXMuYXBwZW5kKGhlYWRlck5hbWUsIHZhbHVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gV2UgZG9uJ3Qgd29ycnkgYWJvdXQgY29udmVydGluZyBwcm9wIHRvIEJ5dGVTdHJpbmcgaGVyZSBhcyBhcHBlbmQoKVxuXHRcdC8vIHdpbGwgaGFuZGxlIGl0LlxuXHRcdGlmIChpbml0ID09IG51bGwpIDsgZWxzZSBpZiAodHlwZW9mIGluaXQgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRjb25zdCBtZXRob2QgPSBpbml0W1N5bWJvbC5pdGVyYXRvcl07XG5cdFx0XHRpZiAobWV0aG9kICE9IG51bGwpIHtcblx0XHRcdFx0aWYgKHR5cGVvZiBtZXRob2QgIT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdIZWFkZXIgcGFpcnMgbXVzdCBiZSBpdGVyYWJsZScpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gc2VxdWVuY2U8c2VxdWVuY2U8Qnl0ZVN0cmluZz4+XG5cdFx0XHRcdC8vIE5vdGU6IHBlciBzcGVjIHdlIGhhdmUgdG8gZmlyc3QgZXhoYXVzdCB0aGUgbGlzdHMgdGhlbiBwcm9jZXNzIHRoZW1cblx0XHRcdFx0Y29uc3QgcGFpcnMgPSBbXTtcblx0XHRcdFx0Zm9yIChjb25zdCBwYWlyIG9mIGluaXQpIHtcblx0XHRcdFx0XHRpZiAodHlwZW9mIHBhaXIgIT09ICdvYmplY3QnIHx8IHR5cGVvZiBwYWlyW1N5bWJvbC5pdGVyYXRvcl0gIT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0VhY2ggaGVhZGVyIHBhaXIgbXVzdCBiZSBpdGVyYWJsZScpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRwYWlycy5wdXNoKEFycmF5LmZyb20ocGFpcikpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Zm9yIChjb25zdCBwYWlyIG9mIHBhaXJzKSB7XG5cdFx0XHRcdFx0aWYgKHBhaXIubGVuZ3RoICE9PSAyKSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFYWNoIGhlYWRlciBwYWlyIG11c3QgYmUgYSBuYW1lL3ZhbHVlIHR1cGxlJyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRoaXMuYXBwZW5kKHBhaXJbMF0sIHBhaXJbMV0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyByZWNvcmQ8Qnl0ZVN0cmluZywgQnl0ZVN0cmluZz5cblx0XHRcdFx0Zm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoaW5pdCkpIHtcblx0XHRcdFx0XHRjb25zdCB2YWx1ZSA9IGluaXRba2V5XTtcblx0XHRcdFx0XHR0aGlzLmFwcGVuZChrZXksIHZhbHVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdQcm92aWRlZCBpbml0aWFsaXplciBtdXN0IGJlIGFuIG9iamVjdCcpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuICAqIFJldHVybiBjb21iaW5lZCBoZWFkZXIgdmFsdWUgZ2l2ZW4gbmFtZVxuICAqXG4gICogQHBhcmFtICAgU3RyaW5nICBuYW1lICBIZWFkZXIgbmFtZVxuICAqIEByZXR1cm4gIE1peGVkXG4gICovXG5cdGdldChuYW1lKSB7XG5cdFx0bmFtZSA9IGAke25hbWV9YDtcblx0XHR2YWxpZGF0ZU5hbWUobmFtZSk7XG5cdFx0Y29uc3Qga2V5ID0gZmluZCh0aGlzW01BUF0sIG5hbWUpO1xuXHRcdGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXNbTUFQXVtrZXldLmpvaW4oJywgJyk7XG5cdH1cblxuXHQvKipcbiAgKiBJdGVyYXRlIG92ZXIgYWxsIGhlYWRlcnNcbiAgKlxuICAqIEBwYXJhbSAgIEZ1bmN0aW9uICBjYWxsYmFjayAgRXhlY3V0ZWQgZm9yIGVhY2ggaXRlbSB3aXRoIHBhcmFtZXRlcnMgKHZhbHVlLCBuYW1lLCB0aGlzQXJnKVxuICAqIEBwYXJhbSAgIEJvb2xlYW4gICB0aGlzQXJnICAgYHRoaXNgIGNvbnRleHQgZm9yIGNhbGxiYWNrIGZ1bmN0aW9uXG4gICogQHJldHVybiAgVm9pZFxuICAqL1xuXHRmb3JFYWNoKGNhbGxiYWNrKSB7XG5cdFx0bGV0IHRoaXNBcmcgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcblxuXHRcdGxldCBwYWlycyA9IGdldEhlYWRlcnModGhpcyk7XG5cdFx0bGV0IGkgPSAwO1xuXHRcdHdoaWxlIChpIDwgcGFpcnMubGVuZ3RoKSB7XG5cdFx0XHR2YXIgX3BhaXJzJGkgPSBwYWlyc1tpXTtcblx0XHRcdGNvbnN0IG5hbWUgPSBfcGFpcnMkaVswXSxcblx0XHRcdCAgICAgIHZhbHVlID0gX3BhaXJzJGlbMV07XG5cblx0XHRcdGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdmFsdWUsIG5hbWUsIHRoaXMpO1xuXHRcdFx0cGFpcnMgPSBnZXRIZWFkZXJzKHRoaXMpO1xuXHRcdFx0aSsrO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuICAqIE92ZXJ3cml0ZSBoZWFkZXIgdmFsdWVzIGdpdmVuIG5hbWVcbiAgKlxuICAqIEBwYXJhbSAgIFN0cmluZyAgbmFtZSAgIEhlYWRlciBuYW1lXG4gICogQHBhcmFtICAgU3RyaW5nICB2YWx1ZSAgSGVhZGVyIHZhbHVlXG4gICogQHJldHVybiAgVm9pZFxuICAqL1xuXHRzZXQobmFtZSwgdmFsdWUpIHtcblx0XHRuYW1lID0gYCR7bmFtZX1gO1xuXHRcdHZhbHVlID0gYCR7dmFsdWV9YDtcblx0XHR2YWxpZGF0ZU5hbWUobmFtZSk7XG5cdFx0dmFsaWRhdGVWYWx1ZSh2YWx1ZSk7XG5cdFx0Y29uc3Qga2V5ID0gZmluZCh0aGlzW01BUF0sIG5hbWUpO1xuXHRcdHRoaXNbTUFQXVtrZXkgIT09IHVuZGVmaW5lZCA/IGtleSA6IG5hbWVdID0gW3ZhbHVlXTtcblx0fVxuXG5cdC8qKlxuICAqIEFwcGVuZCBhIHZhbHVlIG9udG8gZXhpc3RpbmcgaGVhZGVyXG4gICpcbiAgKiBAcGFyYW0gICBTdHJpbmcgIG5hbWUgICBIZWFkZXIgbmFtZVxuICAqIEBwYXJhbSAgIFN0cmluZyAgdmFsdWUgIEhlYWRlciB2YWx1ZVxuICAqIEByZXR1cm4gIFZvaWRcbiAgKi9cblx0YXBwZW5kKG5hbWUsIHZhbHVlKSB7XG5cdFx0bmFtZSA9IGAke25hbWV9YDtcblx0XHR2YWx1ZSA9IGAke3ZhbHVlfWA7XG5cdFx0dmFsaWRhdGVOYW1lKG5hbWUpO1xuXHRcdHZhbGlkYXRlVmFsdWUodmFsdWUpO1xuXHRcdGNvbnN0IGtleSA9IGZpbmQodGhpc1tNQVBdLCBuYW1lKTtcblx0XHRpZiAoa2V5ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXNbTUFQXVtrZXldLnB1c2godmFsdWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzW01BUF1bbmFtZV0gPSBbdmFsdWVdO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuICAqIENoZWNrIGZvciBoZWFkZXIgbmFtZSBleGlzdGVuY2VcbiAgKlxuICAqIEBwYXJhbSAgIFN0cmluZyAgIG5hbWUgIEhlYWRlciBuYW1lXG4gICogQHJldHVybiAgQm9vbGVhblxuICAqL1xuXHRoYXMobmFtZSkge1xuXHRcdG5hbWUgPSBgJHtuYW1lfWA7XG5cdFx0dmFsaWRhdGVOYW1lKG5hbWUpO1xuXHRcdHJldHVybiBmaW5kKHRoaXNbTUFQXSwgbmFtZSkgIT09IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuICAqIERlbGV0ZSBhbGwgaGVhZGVyIHZhbHVlcyBnaXZlbiBuYW1lXG4gICpcbiAgKiBAcGFyYW0gICBTdHJpbmcgIG5hbWUgIEhlYWRlciBuYW1lXG4gICogQHJldHVybiAgVm9pZFxuICAqL1xuXHRkZWxldGUobmFtZSkge1xuXHRcdG5hbWUgPSBgJHtuYW1lfWA7XG5cdFx0dmFsaWRhdGVOYW1lKG5hbWUpO1xuXHRcdGNvbnN0IGtleSA9IGZpbmQodGhpc1tNQVBdLCBuYW1lKTtcblx0XHRpZiAoa2V5ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGRlbGV0ZSB0aGlzW01BUF1ba2V5XTtcblx0XHR9XG5cdH1cblxuXHQvKipcbiAgKiBSZXR1cm4gcmF3IGhlYWRlcnMgKG5vbi1zcGVjIGFwaSlcbiAgKlxuICAqIEByZXR1cm4gIE9iamVjdFxuICAqL1xuXHRyYXcoKSB7XG5cdFx0cmV0dXJuIHRoaXNbTUFQXTtcblx0fVxuXG5cdC8qKlxuICAqIEdldCBhbiBpdGVyYXRvciBvbiBrZXlzLlxuICAqXG4gICogQHJldHVybiAgSXRlcmF0b3JcbiAgKi9cblx0a2V5cygpIHtcblx0XHRyZXR1cm4gY3JlYXRlSGVhZGVyc0l0ZXJhdG9yKHRoaXMsICdrZXknKTtcblx0fVxuXG5cdC8qKlxuICAqIEdldCBhbiBpdGVyYXRvciBvbiB2YWx1ZXMuXG4gICpcbiAgKiBAcmV0dXJuICBJdGVyYXRvclxuICAqL1xuXHR2YWx1ZXMoKSB7XG5cdFx0cmV0dXJuIGNyZWF0ZUhlYWRlcnNJdGVyYXRvcih0aGlzLCAndmFsdWUnKTtcblx0fVxuXG5cdC8qKlxuICAqIEdldCBhbiBpdGVyYXRvciBvbiBlbnRyaWVzLlxuICAqXG4gICogVGhpcyBpcyB0aGUgZGVmYXVsdCBpdGVyYXRvciBvZiB0aGUgSGVhZGVycyBvYmplY3QuXG4gICpcbiAgKiBAcmV0dXJuICBJdGVyYXRvclxuICAqL1xuXHRbU3ltYm9sLml0ZXJhdG9yXSgpIHtcblx0XHRyZXR1cm4gY3JlYXRlSGVhZGVyc0l0ZXJhdG9yKHRoaXMsICdrZXkrdmFsdWUnKTtcblx0fVxufVxuSGVhZGVycy5wcm90b3R5cGUuZW50cmllcyA9IEhlYWRlcnMucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIZWFkZXJzLnByb3RvdHlwZSwgU3ltYm9sLnRvU3RyaW5nVGFnLCB7XG5cdHZhbHVlOiAnSGVhZGVycycsXG5cdHdyaXRhYmxlOiBmYWxzZSxcblx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEhlYWRlcnMucHJvdG90eXBlLCB7XG5cdGdldDogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG5cdGZvckVhY2g6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHRzZXQ6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHRhcHBlbmQ6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHRoYXM6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHRkZWxldGU6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHRrZXlzOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0dmFsdWVzOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0ZW50cmllczogeyBlbnVtZXJhYmxlOiB0cnVlIH1cbn0pO1xuXG5mdW5jdGlvbiBnZXRIZWFkZXJzKGhlYWRlcnMpIHtcblx0bGV0IGtpbmQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICdrZXkrdmFsdWUnO1xuXG5cdGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhoZWFkZXJzW01BUF0pLnNvcnQoKTtcblx0cmV0dXJuIGtleXMubWFwKGtpbmQgPT09ICdrZXknID8gZnVuY3Rpb24gKGspIHtcblx0XHRyZXR1cm4gay50b0xvd2VyQ2FzZSgpO1xuXHR9IDoga2luZCA9PT0gJ3ZhbHVlJyA/IGZ1bmN0aW9uIChrKSB7XG5cdFx0cmV0dXJuIGhlYWRlcnNbTUFQXVtrXS5qb2luKCcsICcpO1xuXHR9IDogZnVuY3Rpb24gKGspIHtcblx0XHRyZXR1cm4gW2sudG9Mb3dlckNhc2UoKSwgaGVhZGVyc1tNQVBdW2tdLmpvaW4oJywgJyldO1xuXHR9KTtcbn1cblxuY29uc3QgSU5URVJOQUwgPSBTeW1ib2woJ2ludGVybmFsJyk7XG5cbmZ1bmN0aW9uIGNyZWF0ZUhlYWRlcnNJdGVyYXRvcih0YXJnZXQsIGtpbmQpIHtcblx0Y29uc3QgaXRlcmF0b3IgPSBPYmplY3QuY3JlYXRlKEhlYWRlcnNJdGVyYXRvclByb3RvdHlwZSk7XG5cdGl0ZXJhdG9yW0lOVEVSTkFMXSA9IHtcblx0XHR0YXJnZXQsXG5cdFx0a2luZCxcblx0XHRpbmRleDogMFxuXHR9O1xuXHRyZXR1cm4gaXRlcmF0b3I7XG59XG5cbmNvbnN0IEhlYWRlcnNJdGVyYXRvclByb3RvdHlwZSA9IE9iamVjdC5zZXRQcm90b3R5cGVPZih7XG5cdG5leHQoKSB7XG5cdFx0Ly8gaXN0YW5idWwgaWdub3JlIGlmXG5cdFx0aWYgKCF0aGlzIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKSAhPT0gSGVhZGVyc0l0ZXJhdG9yUHJvdG90eXBlKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdWYWx1ZSBvZiBgdGhpc2AgaXMgbm90IGEgSGVhZGVyc0l0ZXJhdG9yJyk7XG5cdFx0fVxuXG5cdFx0dmFyIF9JTlRFUk5BTCA9IHRoaXNbSU5URVJOQUxdO1xuXHRcdGNvbnN0IHRhcmdldCA9IF9JTlRFUk5BTC50YXJnZXQsXG5cdFx0ICAgICAga2luZCA9IF9JTlRFUk5BTC5raW5kLFxuXHRcdCAgICAgIGluZGV4ID0gX0lOVEVSTkFMLmluZGV4O1xuXG5cdFx0Y29uc3QgdmFsdWVzID0gZ2V0SGVhZGVycyh0YXJnZXQsIGtpbmQpO1xuXHRcdGNvbnN0IGxlbiA9IHZhbHVlcy5sZW5ndGg7XG5cdFx0aWYgKGluZGV4ID49IGxlbikge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0dmFsdWU6IHVuZGVmaW5lZCxcblx0XHRcdFx0ZG9uZTogdHJ1ZVxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHR0aGlzW0lOVEVSTkFMXS5pbmRleCA9IGluZGV4ICsgMTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHR2YWx1ZTogdmFsdWVzW2luZGV4XSxcblx0XHRcdGRvbmU6IGZhbHNlXG5cdFx0fTtcblx0fVxufSwgT2JqZWN0LmdldFByb3RvdHlwZU9mKE9iamVjdC5nZXRQcm90b3R5cGVPZihbXVtTeW1ib2wuaXRlcmF0b3JdKCkpKSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIZWFkZXJzSXRlcmF0b3JQcm90b3R5cGUsIFN5bWJvbC50b1N0cmluZ1RhZywge1xuXHR2YWx1ZTogJ0hlYWRlcnNJdGVyYXRvcicsXG5cdHdyaXRhYmxlOiBmYWxzZSxcblx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbi8qKlxuICogRXhwb3J0IHRoZSBIZWFkZXJzIG9iamVjdCBpbiBhIGZvcm0gdGhhdCBOb2RlLmpzIGNhbiBjb25zdW1lLlxuICpcbiAqIEBwYXJhbSAgIEhlYWRlcnMgIGhlYWRlcnNcbiAqIEByZXR1cm4gIE9iamVjdFxuICovXG5mdW5jdGlvbiBleHBvcnROb2RlQ29tcGF0aWJsZUhlYWRlcnMoaGVhZGVycykge1xuXHRjb25zdCBvYmogPSBPYmplY3QuYXNzaWduKHsgX19wcm90b19fOiBudWxsIH0sIGhlYWRlcnNbTUFQXSk7XG5cblx0Ly8gaHR0cC5yZXF1ZXN0KCkgb25seSBzdXBwb3J0cyBzdHJpbmcgYXMgSG9zdCBoZWFkZXIuIFRoaXMgaGFjayBtYWtlc1xuXHQvLyBzcGVjaWZ5aW5nIGN1c3RvbSBIb3N0IGhlYWRlciBwb3NzaWJsZS5cblx0Y29uc3QgaG9zdEhlYWRlcktleSA9IGZpbmQoaGVhZGVyc1tNQVBdLCAnSG9zdCcpO1xuXHRpZiAoaG9zdEhlYWRlcktleSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0b2JqW2hvc3RIZWFkZXJLZXldID0gb2JqW2hvc3RIZWFkZXJLZXldWzBdO1xuXHR9XG5cblx0cmV0dXJuIG9iajtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBIZWFkZXJzIG9iamVjdCBmcm9tIGFuIG9iamVjdCBvZiBoZWFkZXJzLCBpZ25vcmluZyB0aG9zZSB0aGF0IGRvXG4gKiBub3QgY29uZm9ybSB0byBIVFRQIGdyYW1tYXIgcHJvZHVjdGlvbnMuXG4gKlxuICogQHBhcmFtICAgT2JqZWN0ICBvYmogIE9iamVjdCBvZiBoZWFkZXJzXG4gKiBAcmV0dXJuICBIZWFkZXJzXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUhlYWRlcnNMZW5pZW50KG9iaikge1xuXHRjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKTtcblx0Zm9yIChjb25zdCBuYW1lIG9mIE9iamVjdC5rZXlzKG9iaikpIHtcblx0XHRpZiAoaW52YWxpZFRva2VuUmVnZXgudGVzdChuYW1lKSkge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXHRcdGlmIChBcnJheS5pc0FycmF5KG9ialtuYW1lXSkpIHtcblx0XHRcdGZvciAoY29uc3QgdmFsIG9mIG9ialtuYW1lXSkge1xuXHRcdFx0XHRpZiAoaW52YWxpZEhlYWRlckNoYXJSZWdleC50ZXN0KHZhbCkpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoaGVhZGVyc1tNQVBdW25hbWVdID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRoZWFkZXJzW01BUF1bbmFtZV0gPSBbdmFsXTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRoZWFkZXJzW01BUF1bbmFtZV0ucHVzaCh2YWwpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICghaW52YWxpZEhlYWRlckNoYXJSZWdleC50ZXN0KG9ialtuYW1lXSkpIHtcblx0XHRcdGhlYWRlcnNbTUFQXVtuYW1lXSA9IFtvYmpbbmFtZV1dO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gaGVhZGVycztcbn1cblxuY29uc3QgSU5URVJOQUxTJDEgPSBTeW1ib2woJ1Jlc3BvbnNlIGludGVybmFscycpO1xuXG4vLyBmaXggYW4gaXNzdWUgd2hlcmUgXCJTVEFUVVNfQ09ERVNcIiBhcmVuJ3QgYSBuYW1lZCBleHBvcnQgZm9yIG5vZGUgPDEwXG5jb25zdCBTVEFUVVNfQ09ERVMgPSBodHRwLlNUQVRVU19DT0RFUztcblxuLyoqXG4gKiBSZXNwb25zZSBjbGFzc1xuICpcbiAqIEBwYXJhbSAgIFN0cmVhbSAgYm9keSAgUmVhZGFibGUgc3RyZWFtXG4gKiBAcGFyYW0gICBPYmplY3QgIG9wdHMgIFJlc3BvbnNlIG9wdGlvbnNcbiAqIEByZXR1cm4gIFZvaWRcbiAqL1xuY2xhc3MgUmVzcG9uc2Uge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRsZXQgYm9keSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogbnVsbDtcblx0XHRsZXQgb3B0cyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cblx0XHRCb2R5LmNhbGwodGhpcywgYm9keSwgb3B0cyk7XG5cblx0XHRjb25zdCBzdGF0dXMgPSBvcHRzLnN0YXR1cyB8fCAyMDA7XG5cdFx0Y29uc3QgaGVhZGVycyA9IG5ldyBIZWFkZXJzKG9wdHMuaGVhZGVycyk7XG5cblx0XHRpZiAoYm9keSAhPSBudWxsICYmICFoZWFkZXJzLmhhcygnQ29udGVudC1UeXBlJykpIHtcblx0XHRcdGNvbnN0IGNvbnRlbnRUeXBlID0gZXh0cmFjdENvbnRlbnRUeXBlKGJvZHkpO1xuXHRcdFx0aWYgKGNvbnRlbnRUeXBlKSB7XG5cdFx0XHRcdGhlYWRlcnMuYXBwZW5kKCdDb250ZW50LVR5cGUnLCBjb250ZW50VHlwZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpc1tJTlRFUk5BTFMkMV0gPSB7XG5cdFx0XHR1cmw6IG9wdHMudXJsLFxuXHRcdFx0c3RhdHVzLFxuXHRcdFx0c3RhdHVzVGV4dDogb3B0cy5zdGF0dXNUZXh0IHx8IFNUQVRVU19DT0RFU1tzdGF0dXNdLFxuXHRcdFx0aGVhZGVycyxcblx0XHRcdGNvdW50ZXI6IG9wdHMuY291bnRlclxuXHRcdH07XG5cdH1cblxuXHRnZXQgdXJsKCkge1xuXHRcdHJldHVybiB0aGlzW0lOVEVSTkFMUyQxXS51cmwgfHwgJyc7XG5cdH1cblxuXHRnZXQgc3RhdHVzKCkge1xuXHRcdHJldHVybiB0aGlzW0lOVEVSTkFMUyQxXS5zdGF0dXM7XG5cdH1cblxuXHQvKipcbiAgKiBDb252ZW5pZW5jZSBwcm9wZXJ0eSByZXByZXNlbnRpbmcgaWYgdGhlIHJlcXVlc3QgZW5kZWQgbm9ybWFsbHlcbiAgKi9cblx0Z2V0IG9rKCkge1xuXHRcdHJldHVybiB0aGlzW0lOVEVSTkFMUyQxXS5zdGF0dXMgPj0gMjAwICYmIHRoaXNbSU5URVJOQUxTJDFdLnN0YXR1cyA8IDMwMDtcblx0fVxuXG5cdGdldCByZWRpcmVjdGVkKCkge1xuXHRcdHJldHVybiB0aGlzW0lOVEVSTkFMUyQxXS5jb3VudGVyID4gMDtcblx0fVxuXG5cdGdldCBzdGF0dXNUZXh0KCkge1xuXHRcdHJldHVybiB0aGlzW0lOVEVSTkFMUyQxXS5zdGF0dXNUZXh0O1xuXHR9XG5cblx0Z2V0IGhlYWRlcnMoKSB7XG5cdFx0cmV0dXJuIHRoaXNbSU5URVJOQUxTJDFdLmhlYWRlcnM7XG5cdH1cblxuXHQvKipcbiAgKiBDbG9uZSB0aGlzIHJlc3BvbnNlXG4gICpcbiAgKiBAcmV0dXJuICBSZXNwb25zZVxuICAqL1xuXHRjbG9uZSgpIHtcblx0XHRyZXR1cm4gbmV3IFJlc3BvbnNlKGNsb25lKHRoaXMpLCB7XG5cdFx0XHR1cmw6IHRoaXMudXJsLFxuXHRcdFx0c3RhdHVzOiB0aGlzLnN0YXR1cyxcblx0XHRcdHN0YXR1c1RleHQ6IHRoaXMuc3RhdHVzVGV4dCxcblx0XHRcdGhlYWRlcnM6IHRoaXMuaGVhZGVycyxcblx0XHRcdG9rOiB0aGlzLm9rLFxuXHRcdFx0cmVkaXJlY3RlZDogdGhpcy5yZWRpcmVjdGVkXG5cdFx0fSk7XG5cdH1cbn1cblxuQm9keS5taXhJbihSZXNwb25zZS5wcm90b3R5cGUpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhSZXNwb25zZS5wcm90b3R5cGUsIHtcblx0dXJsOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0c3RhdHVzOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0b2s6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHRyZWRpcmVjdGVkOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0c3RhdHVzVGV4dDogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG5cdGhlYWRlcnM6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHRjbG9uZTogeyBlbnVtZXJhYmxlOiB0cnVlIH1cbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoUmVzcG9uc2UucHJvdG90eXBlLCBTeW1ib2wudG9TdHJpbmdUYWcsIHtcblx0dmFsdWU6ICdSZXNwb25zZScsXG5cdHdyaXRhYmxlOiBmYWxzZSxcblx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbmNvbnN0IElOVEVSTkFMUyQyID0gU3ltYm9sKCdSZXF1ZXN0IGludGVybmFscycpO1xuY29uc3QgVVJMID0gVXJsLlVSTCB8fCB3aGF0d2dVcmwuVVJMO1xuXG4vLyBmaXggYW4gaXNzdWUgd2hlcmUgXCJmb3JtYXRcIiwgXCJwYXJzZVwiIGFyZW4ndCBhIG5hbWVkIGV4cG9ydCBmb3Igbm9kZSA8MTBcbmNvbnN0IHBhcnNlX3VybCA9IFVybC5wYXJzZTtcbmNvbnN0IGZvcm1hdF91cmwgPSBVcmwuZm9ybWF0O1xuXG4vKipcbiAqIFdyYXBwZXIgYXJvdW5kIGBuZXcgVVJMYCB0byBoYW5kbGUgYXJiaXRyYXJ5IFVSTHNcbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9IHVybFN0clxuICogQHJldHVybiB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gcGFyc2VVUkwodXJsU3RyKSB7XG5cdC8qXG4gXHRDaGVjayB3aGV0aGVyIHRoZSBVUkwgaXMgYWJzb2x1dGUgb3Igbm90XG4gXHRcdFNjaGVtZTogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi0zLjFcbiBcdEFic29sdXRlIFVSTDogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi00LjNcbiAqL1xuXHRpZiAoL15bYS16QS1aXVthLXpBLVpcXGQrXFwtLl0qOi8uZXhlYyh1cmxTdHIpKSB7XG5cdFx0dXJsU3RyID0gbmV3IFVSTCh1cmxTdHIpLnRvU3RyaW5nKCk7XG5cdH1cblxuXHQvLyBGYWxsYmFjayB0byBvbGQgaW1wbGVtZW50YXRpb24gZm9yIGFyYml0cmFyeSBVUkxzXG5cdHJldHVybiBwYXJzZV91cmwodXJsU3RyKTtcbn1cblxuY29uc3Qgc3RyZWFtRGVzdHJ1Y3Rpb25TdXBwb3J0ZWQgPSAnZGVzdHJveScgaW4gU3RyZWFtLlJlYWRhYmxlLnByb3RvdHlwZTtcblxuLyoqXG4gKiBDaGVjayBpZiBhIHZhbHVlIGlzIGFuIGluc3RhbmNlIG9mIFJlcXVlc3QuXG4gKlxuICogQHBhcmFtICAgTWl4ZWQgICBpbnB1dFxuICogQHJldHVybiAgQm9vbGVhblxuICovXG5mdW5jdGlvbiBpc1JlcXVlc3QoaW5wdXQpIHtcblx0cmV0dXJuIHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIGlucHV0W0lOVEVSTkFMUyQyXSA9PT0gJ29iamVjdCc7XG59XG5cbmZ1bmN0aW9uIGlzQWJvcnRTaWduYWwoc2lnbmFsKSB7XG5cdGNvbnN0IHByb3RvID0gc2lnbmFsICYmIHR5cGVvZiBzaWduYWwgPT09ICdvYmplY3QnICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZihzaWduYWwpO1xuXHRyZXR1cm4gISEocHJvdG8gJiYgcHJvdG8uY29uc3RydWN0b3IubmFtZSA9PT0gJ0Fib3J0U2lnbmFsJyk7XG59XG5cbi8qKlxuICogUmVxdWVzdCBjbGFzc1xuICpcbiAqIEBwYXJhbSAgIE1peGVkICAgaW5wdXQgIFVybCBvciBSZXF1ZXN0IGluc3RhbmNlXG4gKiBAcGFyYW0gICBPYmplY3QgIGluaXQgICBDdXN0b20gb3B0aW9uc1xuICogQHJldHVybiAgVm9pZFxuICovXG5jbGFzcyBSZXF1ZXN0IHtcblx0Y29uc3RydWN0b3IoaW5wdXQpIHtcblx0XHRsZXQgaW5pdCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cblx0XHRsZXQgcGFyc2VkVVJMO1xuXG5cdFx0Ly8gbm9ybWFsaXplIGlucHV0XG5cdFx0aWYgKCFpc1JlcXVlc3QoaW5wdXQpKSB7XG5cdFx0XHRpZiAoaW5wdXQgJiYgaW5wdXQuaHJlZikge1xuXHRcdFx0XHQvLyBpbiBvcmRlciB0byBzdXBwb3J0IE5vZGUuanMnIFVybCBvYmplY3RzOyB0aG91Z2ggV0hBVFdHJ3MgVVJMIG9iamVjdHNcblx0XHRcdFx0Ly8gd2lsbCBmYWxsIGludG8gdGhpcyBicmFuY2ggYWxzbyAoc2luY2UgdGhlaXIgYHRvU3RyaW5nKClgIHdpbGwgcmV0dXJuXG5cdFx0XHRcdC8vIGBocmVmYCBwcm9wZXJ0eSBhbnl3YXkpXG5cdFx0XHRcdHBhcnNlZFVSTCA9IHBhcnNlVVJMKGlucHV0LmhyZWYpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gY29lcmNlIGlucHV0IHRvIGEgc3RyaW5nIGJlZm9yZSBhdHRlbXB0aW5nIHRvIHBhcnNlXG5cdFx0XHRcdHBhcnNlZFVSTCA9IHBhcnNlVVJMKGAke2lucHV0fWApO1xuXHRcdFx0fVxuXHRcdFx0aW5wdXQgPSB7fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cGFyc2VkVVJMID0gcGFyc2VVUkwoaW5wdXQudXJsKTtcblx0XHR9XG5cblx0XHRsZXQgbWV0aG9kID0gaW5pdC5tZXRob2QgfHwgaW5wdXQubWV0aG9kIHx8ICdHRVQnO1xuXHRcdG1ldGhvZCA9IG1ldGhvZC50b1VwcGVyQ2FzZSgpO1xuXG5cdFx0aWYgKChpbml0LmJvZHkgIT0gbnVsbCB8fCBpc1JlcXVlc3QoaW5wdXQpICYmIGlucHV0LmJvZHkgIT09IG51bGwpICYmIChtZXRob2QgPT09ICdHRVQnIHx8IG1ldGhvZCA9PT0gJ0hFQUQnKSkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignUmVxdWVzdCB3aXRoIEdFVC9IRUFEIG1ldGhvZCBjYW5ub3QgaGF2ZSBib2R5Jyk7XG5cdFx0fVxuXG5cdFx0bGV0IGlucHV0Qm9keSA9IGluaXQuYm9keSAhPSBudWxsID8gaW5pdC5ib2R5IDogaXNSZXF1ZXN0KGlucHV0KSAmJiBpbnB1dC5ib2R5ICE9PSBudWxsID8gY2xvbmUoaW5wdXQpIDogbnVsbDtcblxuXHRcdEJvZHkuY2FsbCh0aGlzLCBpbnB1dEJvZHksIHtcblx0XHRcdHRpbWVvdXQ6IGluaXQudGltZW91dCB8fCBpbnB1dC50aW1lb3V0IHx8IDAsXG5cdFx0XHRzaXplOiBpbml0LnNpemUgfHwgaW5wdXQuc2l6ZSB8fCAwXG5cdFx0fSk7XG5cblx0XHRjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoaW5pdC5oZWFkZXJzIHx8IGlucHV0LmhlYWRlcnMgfHwge30pO1xuXG5cdFx0aWYgKGlucHV0Qm9keSAhPSBudWxsICYmICFoZWFkZXJzLmhhcygnQ29udGVudC1UeXBlJykpIHtcblx0XHRcdGNvbnN0IGNvbnRlbnRUeXBlID0gZXh0cmFjdENvbnRlbnRUeXBlKGlucHV0Qm9keSk7XG5cdFx0XHRpZiAoY29udGVudFR5cGUpIHtcblx0XHRcdFx0aGVhZGVycy5hcHBlbmQoJ0NvbnRlbnQtVHlwZScsIGNvbnRlbnRUeXBlKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRsZXQgc2lnbmFsID0gaXNSZXF1ZXN0KGlucHV0KSA/IGlucHV0LnNpZ25hbCA6IG51bGw7XG5cdFx0aWYgKCdzaWduYWwnIGluIGluaXQpIHNpZ25hbCA9IGluaXQuc2lnbmFsO1xuXG5cdFx0aWYgKHNpZ25hbCAhPSBudWxsICYmICFpc0Fib3J0U2lnbmFsKHNpZ25hbCkpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIHNpZ25hbCB0byBiZSBhbiBpbnN0YW5jZW9mIEFib3J0U2lnbmFsJyk7XG5cdFx0fVxuXG5cdFx0dGhpc1tJTlRFUk5BTFMkMl0gPSB7XG5cdFx0XHRtZXRob2QsXG5cdFx0XHRyZWRpcmVjdDogaW5pdC5yZWRpcmVjdCB8fCBpbnB1dC5yZWRpcmVjdCB8fCAnZm9sbG93Jyxcblx0XHRcdGhlYWRlcnMsXG5cdFx0XHRwYXJzZWRVUkwsXG5cdFx0XHRzaWduYWxcblx0XHR9O1xuXG5cdFx0Ly8gbm9kZS1mZXRjaC1vbmx5IG9wdGlvbnNcblx0XHR0aGlzLmZvbGxvdyA9IGluaXQuZm9sbG93ICE9PSB1bmRlZmluZWQgPyBpbml0LmZvbGxvdyA6IGlucHV0LmZvbGxvdyAhPT0gdW5kZWZpbmVkID8gaW5wdXQuZm9sbG93IDogMjA7XG5cdFx0dGhpcy5jb21wcmVzcyA9IGluaXQuY29tcHJlc3MgIT09IHVuZGVmaW5lZCA/IGluaXQuY29tcHJlc3MgOiBpbnB1dC5jb21wcmVzcyAhPT0gdW5kZWZpbmVkID8gaW5wdXQuY29tcHJlc3MgOiB0cnVlO1xuXHRcdHRoaXMuY291bnRlciA9IGluaXQuY291bnRlciB8fCBpbnB1dC5jb3VudGVyIHx8IDA7XG5cdFx0dGhpcy5hZ2VudCA9IGluaXQuYWdlbnQgfHwgaW5wdXQuYWdlbnQ7XG5cdH1cblxuXHRnZXQgbWV0aG9kKCkge1xuXHRcdHJldHVybiB0aGlzW0lOVEVSTkFMUyQyXS5tZXRob2Q7XG5cdH1cblxuXHRnZXQgdXJsKCkge1xuXHRcdHJldHVybiBmb3JtYXRfdXJsKHRoaXNbSU5URVJOQUxTJDJdLnBhcnNlZFVSTCk7XG5cdH1cblxuXHRnZXQgaGVhZGVycygpIHtcblx0XHRyZXR1cm4gdGhpc1tJTlRFUk5BTFMkMl0uaGVhZGVycztcblx0fVxuXG5cdGdldCByZWRpcmVjdCgpIHtcblx0XHRyZXR1cm4gdGhpc1tJTlRFUk5BTFMkMl0ucmVkaXJlY3Q7XG5cdH1cblxuXHRnZXQgc2lnbmFsKCkge1xuXHRcdHJldHVybiB0aGlzW0lOVEVSTkFMUyQyXS5zaWduYWw7XG5cdH1cblxuXHQvKipcbiAgKiBDbG9uZSB0aGlzIHJlcXVlc3RcbiAgKlxuICAqIEByZXR1cm4gIFJlcXVlc3RcbiAgKi9cblx0Y2xvbmUoKSB7XG5cdFx0cmV0dXJuIG5ldyBSZXF1ZXN0KHRoaXMpO1xuXHR9XG59XG5cbkJvZHkubWl4SW4oUmVxdWVzdC5wcm90b3R5cGUpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoUmVxdWVzdC5wcm90b3R5cGUsIFN5bWJvbC50b1N0cmluZ1RhZywge1xuXHR2YWx1ZTogJ1JlcXVlc3QnLFxuXHR3cml0YWJsZTogZmFsc2UsXG5cdGVudW1lcmFibGU6IGZhbHNlLFxuXHRjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhSZXF1ZXN0LnByb3RvdHlwZSwge1xuXHRtZXRob2Q6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHR1cmw6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHRoZWFkZXJzOiB7IGVudW1lcmFibGU6IHRydWUgfSxcblx0cmVkaXJlY3Q6IHsgZW51bWVyYWJsZTogdHJ1ZSB9LFxuXHRjbG9uZTogeyBlbnVtZXJhYmxlOiB0cnVlIH0sXG5cdHNpZ25hbDogeyBlbnVtZXJhYmxlOiB0cnVlIH1cbn0pO1xuXG4vKipcbiAqIENvbnZlcnQgYSBSZXF1ZXN0IHRvIE5vZGUuanMgaHR0cCByZXF1ZXN0IG9wdGlvbnMuXG4gKlxuICogQHBhcmFtICAgUmVxdWVzdCAgQSBSZXF1ZXN0IGluc3RhbmNlXG4gKiBAcmV0dXJuICBPYmplY3QgICBUaGUgb3B0aW9ucyBvYmplY3QgdG8gYmUgcGFzc2VkIHRvIGh0dHAucmVxdWVzdFxuICovXG5mdW5jdGlvbiBnZXROb2RlUmVxdWVzdE9wdGlvbnMocmVxdWVzdCkge1xuXHRjb25zdCBwYXJzZWRVUkwgPSByZXF1ZXN0W0lOVEVSTkFMUyQyXS5wYXJzZWRVUkw7XG5cdGNvbnN0IGhlYWRlcnMgPSBuZXcgSGVhZGVycyhyZXF1ZXN0W0lOVEVSTkFMUyQyXS5oZWFkZXJzKTtcblxuXHQvLyBmZXRjaCBzdGVwIDEuM1xuXHRpZiAoIWhlYWRlcnMuaGFzKCdBY2NlcHQnKSkge1xuXHRcdGhlYWRlcnMuc2V0KCdBY2NlcHQnLCAnKi8qJyk7XG5cdH1cblxuXHQvLyBCYXNpYyBmZXRjaFxuXHRpZiAoIXBhcnNlZFVSTC5wcm90b2NvbCB8fCAhcGFyc2VkVVJMLmhvc3RuYW1lKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignT25seSBhYnNvbHV0ZSBVUkxzIGFyZSBzdXBwb3J0ZWQnKTtcblx0fVxuXG5cdGlmICghL15odHRwcz86JC8udGVzdChwYXJzZWRVUkwucHJvdG9jb2wpKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignT25seSBIVFRQKFMpIHByb3RvY29scyBhcmUgc3VwcG9ydGVkJyk7XG5cdH1cblxuXHRpZiAocmVxdWVzdC5zaWduYWwgJiYgcmVxdWVzdC5ib2R5IGluc3RhbmNlb2YgU3RyZWFtLlJlYWRhYmxlICYmICFzdHJlYW1EZXN0cnVjdGlvblN1cHBvcnRlZCkge1xuXHRcdHRocm93IG5ldyBFcnJvcignQ2FuY2VsbGF0aW9uIG9mIHN0cmVhbWVkIHJlcXVlc3RzIHdpdGggQWJvcnRTaWduYWwgaXMgbm90IHN1cHBvcnRlZCBpbiBub2RlIDwgOCcpO1xuXHR9XG5cblx0Ly8gSFRUUC1uZXR3b3JrLW9yLWNhY2hlIGZldGNoIHN0ZXBzIDIuNC0yLjdcblx0bGV0IGNvbnRlbnRMZW5ndGhWYWx1ZSA9IG51bGw7XG5cdGlmIChyZXF1ZXN0LmJvZHkgPT0gbnVsbCAmJiAvXihQT1NUfFBVVCkkL2kudGVzdChyZXF1ZXN0Lm1ldGhvZCkpIHtcblx0XHRjb250ZW50TGVuZ3RoVmFsdWUgPSAnMCc7XG5cdH1cblx0aWYgKHJlcXVlc3QuYm9keSAhPSBudWxsKSB7XG5cdFx0Y29uc3QgdG90YWxCeXRlcyA9IGdldFRvdGFsQnl0ZXMocmVxdWVzdCk7XG5cdFx0aWYgKHR5cGVvZiB0b3RhbEJ5dGVzID09PSAnbnVtYmVyJykge1xuXHRcdFx0Y29udGVudExlbmd0aFZhbHVlID0gU3RyaW5nKHRvdGFsQnl0ZXMpO1xuXHRcdH1cblx0fVxuXHRpZiAoY29udGVudExlbmd0aFZhbHVlKSB7XG5cdFx0aGVhZGVycy5zZXQoJ0NvbnRlbnQtTGVuZ3RoJywgY29udGVudExlbmd0aFZhbHVlKTtcblx0fVxuXG5cdC8vIEhUVFAtbmV0d29yay1vci1jYWNoZSBmZXRjaCBzdGVwIDIuMTFcblx0aWYgKCFoZWFkZXJzLmhhcygnVXNlci1BZ2VudCcpKSB7XG5cdFx0aGVhZGVycy5zZXQoJ1VzZXItQWdlbnQnLCAnbm9kZS1mZXRjaC8xLjAgKCtodHRwczovL2dpdGh1Yi5jb20vYml0aW5uL25vZGUtZmV0Y2gpJyk7XG5cdH1cblxuXHQvLyBIVFRQLW5ldHdvcmstb3ItY2FjaGUgZmV0Y2ggc3RlcCAyLjE1XG5cdGlmIChyZXF1ZXN0LmNvbXByZXNzICYmICFoZWFkZXJzLmhhcygnQWNjZXB0LUVuY29kaW5nJykpIHtcblx0XHRoZWFkZXJzLnNldCgnQWNjZXB0LUVuY29kaW5nJywgJ2d6aXAsZGVmbGF0ZScpO1xuXHR9XG5cblx0bGV0IGFnZW50ID0gcmVxdWVzdC5hZ2VudDtcblx0aWYgKHR5cGVvZiBhZ2VudCA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdGFnZW50ID0gYWdlbnQocGFyc2VkVVJMKTtcblx0fVxuXG5cdC8vIEhUVFAtbmV0d29yayBmZXRjaCBzdGVwIDQuMlxuXHQvLyBjaHVua2VkIGVuY29kaW5nIGlzIGhhbmRsZWQgYnkgTm9kZS5qc1xuXG5cdHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBwYXJzZWRVUkwsIHtcblx0XHRtZXRob2Q6IHJlcXVlc3QubWV0aG9kLFxuXHRcdGhlYWRlcnM6IGV4cG9ydE5vZGVDb21wYXRpYmxlSGVhZGVycyhoZWFkZXJzKSxcblx0XHRhZ2VudFxuXHR9KTtcbn1cblxuLyoqXG4gKiBhYm9ydC1lcnJvci5qc1xuICpcbiAqIEFib3J0RXJyb3IgaW50ZXJmYWNlIGZvciBjYW5jZWxsZWQgcmVxdWVzdHNcbiAqL1xuXG4vKipcbiAqIENyZWF0ZSBBYm9ydEVycm9yIGluc3RhbmNlXG4gKlxuICogQHBhcmFtICAgU3RyaW5nICAgICAgbWVzc2FnZSAgICAgIEVycm9yIG1lc3NhZ2UgZm9yIGh1bWFuXG4gKiBAcmV0dXJuICBBYm9ydEVycm9yXG4gKi9cbmZ1bmN0aW9uIEFib3J0RXJyb3IobWVzc2FnZSkge1xuICBFcnJvci5jYWxsKHRoaXMsIG1lc3NhZ2UpO1xuXG4gIHRoaXMudHlwZSA9ICdhYm9ydGVkJztcbiAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcblxuICAvLyBoaWRlIGN1c3RvbSBlcnJvciBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGZyb20gZW5kLXVzZXJzXG4gIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xufVxuXG5BYm9ydEVycm9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTtcbkFib3J0RXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQWJvcnRFcnJvcjtcbkFib3J0RXJyb3IucHJvdG90eXBlLm5hbWUgPSAnQWJvcnRFcnJvcic7XG5cbmNvbnN0IFVSTCQxID0gVXJsLlVSTCB8fCB3aGF0d2dVcmwuVVJMO1xuXG4vLyBmaXggYW4gaXNzdWUgd2hlcmUgXCJQYXNzVGhyb3VnaFwiLCBcInJlc29sdmVcIiBhcmVuJ3QgYSBuYW1lZCBleHBvcnQgZm9yIG5vZGUgPDEwXG5jb25zdCBQYXNzVGhyb3VnaCQxID0gU3RyZWFtLlBhc3NUaHJvdWdoO1xuXG5jb25zdCBpc0RvbWFpbk9yU3ViZG9tYWluID0gZnVuY3Rpb24gaXNEb21haW5PclN1YmRvbWFpbihkZXN0aW5hdGlvbiwgb3JpZ2luYWwpIHtcblx0Y29uc3Qgb3JpZyA9IG5ldyBVUkwkMShvcmlnaW5hbCkuaG9zdG5hbWU7XG5cdGNvbnN0IGRlc3QgPSBuZXcgVVJMJDEoZGVzdGluYXRpb24pLmhvc3RuYW1lO1xuXG5cdHJldHVybiBvcmlnID09PSBkZXN0IHx8IG9yaWdbb3JpZy5sZW5ndGggLSBkZXN0Lmxlbmd0aCAtIDFdID09PSAnLicgJiYgb3JpZy5lbmRzV2l0aChkZXN0KTtcbn07XG5cbi8qKlxuICogaXNTYW1lUHJvdG9jb2wgcmVwb3J0cyB3aGV0aGVyIHRoZSB0d28gcHJvdmlkZWQgVVJMcyB1c2UgdGhlIHNhbWUgcHJvdG9jb2wuXG4gKlxuICogQm90aCBkb21haW5zIG11c3QgYWxyZWFkeSBiZSBpbiBjYW5vbmljYWwgZm9ybS5cbiAqIEBwYXJhbSB7c3RyaW5nfFVSTH0gb3JpZ2luYWxcbiAqIEBwYXJhbSB7c3RyaW5nfFVSTH0gZGVzdGluYXRpb25cbiAqL1xuY29uc3QgaXNTYW1lUHJvdG9jb2wgPSBmdW5jdGlvbiBpc1NhbWVQcm90b2NvbChkZXN0aW5hdGlvbiwgb3JpZ2luYWwpIHtcblx0Y29uc3Qgb3JpZyA9IG5ldyBVUkwkMShvcmlnaW5hbCkucHJvdG9jb2w7XG5cdGNvbnN0IGRlc3QgPSBuZXcgVVJMJDEoZGVzdGluYXRpb24pLnByb3RvY29sO1xuXG5cdHJldHVybiBvcmlnID09PSBkZXN0O1xufTtcblxuLyoqXG4gKiBGZXRjaCBmdW5jdGlvblxuICpcbiAqIEBwYXJhbSAgIE1peGVkICAgIHVybCAgIEFic29sdXRlIHVybCBvciBSZXF1ZXN0IGluc3RhbmNlXG4gKiBAcGFyYW0gICBPYmplY3QgICBvcHRzICBGZXRjaCBvcHRpb25zXG4gKiBAcmV0dXJuICBQcm9taXNlXG4gKi9cbmZ1bmN0aW9uIGZldGNoKHVybCwgb3B0cykge1xuXG5cdC8vIGFsbG93IGN1c3RvbSBwcm9taXNlXG5cdGlmICghZmV0Y2guUHJvbWlzZSkge1xuXHRcdHRocm93IG5ldyBFcnJvcignbmF0aXZlIHByb21pc2UgbWlzc2luZywgc2V0IGZldGNoLlByb21pc2UgdG8geW91ciBmYXZvcml0ZSBhbHRlcm5hdGl2ZScpO1xuXHR9XG5cblx0Qm9keS5Qcm9taXNlID0gZmV0Y2guUHJvbWlzZTtcblxuXHQvLyB3cmFwIGh0dHAucmVxdWVzdCBpbnRvIGZldGNoXG5cdHJldHVybiBuZXcgZmV0Y2guUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdFx0Ly8gYnVpbGQgcmVxdWVzdCBvYmplY3Rcblx0XHRjb25zdCByZXF1ZXN0ID0gbmV3IFJlcXVlc3QodXJsLCBvcHRzKTtcblx0XHRjb25zdCBvcHRpb25zID0gZ2V0Tm9kZVJlcXVlc3RPcHRpb25zKHJlcXVlc3QpO1xuXG5cdFx0Y29uc3Qgc2VuZCA9IChvcHRpb25zLnByb3RvY29sID09PSAnaHR0cHM6JyA/IGh0dHBzIDogaHR0cCkucmVxdWVzdDtcblx0XHRjb25zdCBzaWduYWwgPSByZXF1ZXN0LnNpZ25hbDtcblxuXHRcdGxldCByZXNwb25zZSA9IG51bGw7XG5cblx0XHRjb25zdCBhYm9ydCA9IGZ1bmN0aW9uIGFib3J0KCkge1xuXHRcdFx0bGV0IGVycm9yID0gbmV3IEFib3J0RXJyb3IoJ1RoZSB1c2VyIGFib3J0ZWQgYSByZXF1ZXN0LicpO1xuXHRcdFx0cmVqZWN0KGVycm9yKTtcblx0XHRcdGlmIChyZXF1ZXN0LmJvZHkgJiYgcmVxdWVzdC5ib2R5IGluc3RhbmNlb2YgU3RyZWFtLlJlYWRhYmxlKSB7XG5cdFx0XHRcdGRlc3Ryb3lTdHJlYW0ocmVxdWVzdC5ib2R5LCBlcnJvcik7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIXJlc3BvbnNlIHx8ICFyZXNwb25zZS5ib2R5KSByZXR1cm47XG5cdFx0XHRyZXNwb25zZS5ib2R5LmVtaXQoJ2Vycm9yJywgZXJyb3IpO1xuXHRcdH07XG5cblx0XHRpZiAoc2lnbmFsICYmIHNpZ25hbC5hYm9ydGVkKSB7XG5cdFx0XHRhYm9ydCgpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGFib3J0QW5kRmluYWxpemUgPSBmdW5jdGlvbiBhYm9ydEFuZEZpbmFsaXplKCkge1xuXHRcdFx0YWJvcnQoKTtcblx0XHRcdGZpbmFsaXplKCk7XG5cdFx0fTtcblxuXHRcdC8vIHNlbmQgcmVxdWVzdFxuXHRcdGNvbnN0IHJlcSA9IHNlbmQob3B0aW9ucyk7XG5cdFx0bGV0IHJlcVRpbWVvdXQ7XG5cblx0XHRpZiAoc2lnbmFsKSB7XG5cdFx0XHRzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydEFuZEZpbmFsaXplKTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBmaW5hbGl6ZSgpIHtcblx0XHRcdHJlcS5hYm9ydCgpO1xuXHRcdFx0aWYgKHNpZ25hbCkgc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnRBbmRGaW5hbGl6ZSk7XG5cdFx0XHRjbGVhclRpbWVvdXQocmVxVGltZW91dCk7XG5cdFx0fVxuXG5cdFx0aWYgKHJlcXVlc3QudGltZW91dCkge1xuXHRcdFx0cmVxLm9uY2UoJ3NvY2tldCcsIGZ1bmN0aW9uIChzb2NrZXQpIHtcblx0XHRcdFx0cmVxVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdHJlamVjdChuZXcgRmV0Y2hFcnJvcihgbmV0d29yayB0aW1lb3V0IGF0OiAke3JlcXVlc3QudXJsfWAsICdyZXF1ZXN0LXRpbWVvdXQnKSk7XG5cdFx0XHRcdFx0ZmluYWxpemUoKTtcblx0XHRcdFx0fSwgcmVxdWVzdC50aW1lb3V0KTtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHJlcS5vbignZXJyb3InLCBmdW5jdGlvbiAoZXJyKSB7XG5cdFx0XHRyZWplY3QobmV3IEZldGNoRXJyb3IoYHJlcXVlc3QgdG8gJHtyZXF1ZXN0LnVybH0gZmFpbGVkLCByZWFzb246ICR7ZXJyLm1lc3NhZ2V9YCwgJ3N5c3RlbScsIGVycikpO1xuXG5cdFx0XHRpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UuYm9keSkge1xuXHRcdFx0XHRkZXN0cm95U3RyZWFtKHJlc3BvbnNlLmJvZHksIGVycik7XG5cdFx0XHR9XG5cblx0XHRcdGZpbmFsaXplKCk7XG5cdFx0fSk7XG5cblx0XHRmaXhSZXNwb25zZUNodW5rZWRUcmFuc2ZlckJhZEVuZGluZyhyZXEsIGZ1bmN0aW9uIChlcnIpIHtcblx0XHRcdGlmIChzaWduYWwgJiYgc2lnbmFsLmFib3J0ZWQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UuYm9keSkge1xuXHRcdFx0XHRkZXN0cm95U3RyZWFtKHJlc3BvbnNlLmJvZHksIGVycik7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHQvKiBjOCBpZ25vcmUgbmV4dCAxOCAqL1xuXHRcdGlmIChwYXJzZUludChwcm9jZXNzLnZlcnNpb24uc3Vic3RyaW5nKDEpKSA8IDE0KSB7XG5cdFx0XHQvLyBCZWZvcmUgTm9kZS5qcyAxNCwgcGlwZWxpbmUoKSBkb2VzIG5vdCBmdWxseSBzdXBwb3J0IGFzeW5jIGl0ZXJhdG9ycyBhbmQgZG9lcyBub3QgYWx3YXlzXG5cdFx0XHQvLyBwcm9wZXJseSBoYW5kbGUgd2hlbiB0aGUgc29ja2V0IGNsb3NlL2VuZCBldmVudHMgYXJlIG91dCBvZiBvcmRlci5cblx0XHRcdHJlcS5vbignc29ja2V0JywgZnVuY3Rpb24gKHMpIHtcblx0XHRcdFx0cy5hZGRMaXN0ZW5lcignY2xvc2UnLCBmdW5jdGlvbiAoaGFkRXJyb3IpIHtcblx0XHRcdFx0XHQvLyBpZiBhIGRhdGEgbGlzdGVuZXIgaXMgc3RpbGwgcHJlc2VudCB3ZSBkaWRuJ3QgZW5kIGNsZWFubHlcblx0XHRcdFx0XHRjb25zdCBoYXNEYXRhTGlzdGVuZXIgPSBzLmxpc3RlbmVyQ291bnQoJ2RhdGEnKSA+IDA7XG5cblx0XHRcdFx0XHQvLyBpZiBlbmQgaGFwcGVuZWQgYmVmb3JlIGNsb3NlIGJ1dCB0aGUgc29ja2V0IGRpZG4ndCBlbWl0IGFuIGVycm9yLCBkbyBpdCBub3dcblx0XHRcdFx0XHRpZiAocmVzcG9uc2UgJiYgaGFzRGF0YUxpc3RlbmVyICYmICFoYWRFcnJvciAmJiAhKHNpZ25hbCAmJiBzaWduYWwuYWJvcnRlZCkpIHtcblx0XHRcdFx0XHRcdGNvbnN0IGVyciA9IG5ldyBFcnJvcignUHJlbWF0dXJlIGNsb3NlJyk7XG5cdFx0XHRcdFx0XHRlcnIuY29kZSA9ICdFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRSc7XG5cdFx0XHRcdFx0XHRyZXNwb25zZS5ib2R5LmVtaXQoJ2Vycm9yJywgZXJyKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0cmVxLm9uKCdyZXNwb25zZScsIGZ1bmN0aW9uIChyZXMpIHtcblx0XHRcdGNsZWFyVGltZW91dChyZXFUaW1lb3V0KTtcblxuXHRcdFx0Y29uc3QgaGVhZGVycyA9IGNyZWF0ZUhlYWRlcnNMZW5pZW50KHJlcy5oZWFkZXJzKTtcblxuXHRcdFx0Ly8gSFRUUCBmZXRjaCBzdGVwIDVcblx0XHRcdGlmIChmZXRjaC5pc1JlZGlyZWN0KHJlcy5zdGF0dXNDb2RlKSkge1xuXHRcdFx0XHQvLyBIVFRQIGZldGNoIHN0ZXAgNS4yXG5cdFx0XHRcdGNvbnN0IGxvY2F0aW9uID0gaGVhZGVycy5nZXQoJ0xvY2F0aW9uJyk7XG5cblx0XHRcdFx0Ly8gSFRUUCBmZXRjaCBzdGVwIDUuM1xuXHRcdFx0XHRsZXQgbG9jYXRpb25VUkwgPSBudWxsO1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGxvY2F0aW9uVVJMID0gbG9jYXRpb24gPT09IG51bGwgPyBudWxsIDogbmV3IFVSTCQxKGxvY2F0aW9uLCByZXF1ZXN0LnVybCkudG9TdHJpbmcoKTtcblx0XHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdFx0Ly8gZXJyb3IgaGVyZSBjYW4gb25seSBiZSBpbnZhbGlkIFVSTCBpbiBMb2NhdGlvbjogaGVhZGVyXG5cdFx0XHRcdFx0Ly8gZG8gbm90IHRocm93IHdoZW4gb3B0aW9ucy5yZWRpcmVjdCA9PSBtYW51YWxcblx0XHRcdFx0XHQvLyBsZXQgdGhlIHVzZXIgZXh0cmFjdCB0aGUgZXJyb3JuZW91cyByZWRpcmVjdCBVUkxcblx0XHRcdFx0XHRpZiAocmVxdWVzdC5yZWRpcmVjdCAhPT0gJ21hbnVhbCcpIHtcblx0XHRcdFx0XHRcdHJlamVjdChuZXcgRmV0Y2hFcnJvcihgdXJpIHJlcXVlc3RlZCByZXNwb25kcyB3aXRoIGFuIGludmFsaWQgcmVkaXJlY3QgVVJMOiAke2xvY2F0aW9ufWAsICdpbnZhbGlkLXJlZGlyZWN0JykpO1xuXHRcdFx0XHRcdFx0ZmluYWxpemUoKTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBIVFRQIGZldGNoIHN0ZXAgNS41XG5cdFx0XHRcdHN3aXRjaCAocmVxdWVzdC5yZWRpcmVjdCkge1xuXHRcdFx0XHRcdGNhc2UgJ2Vycm9yJzpcblx0XHRcdFx0XHRcdHJlamVjdChuZXcgRmV0Y2hFcnJvcihgdXJpIHJlcXVlc3RlZCByZXNwb25kcyB3aXRoIGEgcmVkaXJlY3QsIHJlZGlyZWN0IG1vZGUgaXMgc2V0IHRvIGVycm9yOiAke3JlcXVlc3QudXJsfWAsICduby1yZWRpcmVjdCcpKTtcblx0XHRcdFx0XHRcdGZpbmFsaXplKCk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0Y2FzZSAnbWFudWFsJzpcblx0XHRcdFx0XHRcdC8vIG5vZGUtZmV0Y2gtc3BlY2lmaWMgc3RlcDogbWFrZSBtYW51YWwgcmVkaXJlY3QgYSBiaXQgZWFzaWVyIHRvIHVzZSBieSBzZXR0aW5nIHRoZSBMb2NhdGlvbiBoZWFkZXIgdmFsdWUgdG8gdGhlIHJlc29sdmVkIFVSTC5cblx0XHRcdFx0XHRcdGlmIChsb2NhdGlvblVSTCAhPT0gbnVsbCkge1xuXHRcdFx0XHRcdFx0XHQvLyBoYW5kbGUgY29ycnVwdGVkIGhlYWRlclxuXHRcdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRcdGhlYWRlcnMuc2V0KCdMb2NhdGlvbicsIGxvY2F0aW9uVVJMKTtcblx0XHRcdFx0XHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gaXN0YW5idWwgaWdub3JlIG5leHQ6IG5vZGVqcyBzZXJ2ZXIgcHJldmVudCBpbnZhbGlkIHJlc3BvbnNlIGhlYWRlcnMsIHdlIGNhbid0IHRlc3QgdGhpcyB0aHJvdWdoIG5vcm1hbCByZXF1ZXN0XG5cdFx0XHRcdFx0XHRcdFx0cmVqZWN0KGVycik7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ2ZvbGxvdyc6XG5cdFx0XHRcdFx0XHQvLyBIVFRQLXJlZGlyZWN0IGZldGNoIHN0ZXAgMlxuXHRcdFx0XHRcdFx0aWYgKGxvY2F0aW9uVVJMID09PSBudWxsKSB7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBIVFRQLXJlZGlyZWN0IGZldGNoIHN0ZXAgNVxuXHRcdFx0XHRcdFx0aWYgKHJlcXVlc3QuY291bnRlciA+PSByZXF1ZXN0LmZvbGxvdykge1xuXHRcdFx0XHRcdFx0XHRyZWplY3QobmV3IEZldGNoRXJyb3IoYG1heGltdW0gcmVkaXJlY3QgcmVhY2hlZCBhdDogJHtyZXF1ZXN0LnVybH1gLCAnbWF4LXJlZGlyZWN0JykpO1xuXHRcdFx0XHRcdFx0XHRmaW5hbGl6ZSgpO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIEhUVFAtcmVkaXJlY3QgZmV0Y2ggc3RlcCA2IChjb3VudGVyIGluY3JlbWVudClcblx0XHRcdFx0XHRcdC8vIENyZWF0ZSBhIG5ldyBSZXF1ZXN0IG9iamVjdC5cblx0XHRcdFx0XHRcdGNvbnN0IHJlcXVlc3RPcHRzID0ge1xuXHRcdFx0XHRcdFx0XHRoZWFkZXJzOiBuZXcgSGVhZGVycyhyZXF1ZXN0LmhlYWRlcnMpLFxuXHRcdFx0XHRcdFx0XHRmb2xsb3c6IHJlcXVlc3QuZm9sbG93LFxuXHRcdFx0XHRcdFx0XHRjb3VudGVyOiByZXF1ZXN0LmNvdW50ZXIgKyAxLFxuXHRcdFx0XHRcdFx0XHRhZ2VudDogcmVxdWVzdC5hZ2VudCxcblx0XHRcdFx0XHRcdFx0Y29tcHJlc3M6IHJlcXVlc3QuY29tcHJlc3MsXG5cdFx0XHRcdFx0XHRcdG1ldGhvZDogcmVxdWVzdC5tZXRob2QsXG5cdFx0XHRcdFx0XHRcdGJvZHk6IHJlcXVlc3QuYm9keSxcblx0XHRcdFx0XHRcdFx0c2lnbmFsOiByZXF1ZXN0LnNpZ25hbCxcblx0XHRcdFx0XHRcdFx0dGltZW91dDogcmVxdWVzdC50aW1lb3V0LFxuXHRcdFx0XHRcdFx0XHRzaXplOiByZXF1ZXN0LnNpemVcblx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRcdGlmICghaXNEb21haW5PclN1YmRvbWFpbihyZXF1ZXN0LnVybCwgbG9jYXRpb25VUkwpIHx8ICFpc1NhbWVQcm90b2NvbChyZXF1ZXN0LnVybCwgbG9jYXRpb25VUkwpKSB7XG5cdFx0XHRcdFx0XHRcdGZvciAoY29uc3QgbmFtZSBvZiBbJ2F1dGhvcml6YXRpb24nLCAnd3d3LWF1dGhlbnRpY2F0ZScsICdjb29raWUnLCAnY29va2llMiddKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmVxdWVzdE9wdHMuaGVhZGVycy5kZWxldGUobmFtZSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gSFRUUC1yZWRpcmVjdCBmZXRjaCBzdGVwIDlcblx0XHRcdFx0XHRcdGlmIChyZXMuc3RhdHVzQ29kZSAhPT0gMzAzICYmIHJlcXVlc3QuYm9keSAmJiBnZXRUb3RhbEJ5dGVzKHJlcXVlc3QpID09PSBudWxsKSB7XG5cdFx0XHRcdFx0XHRcdHJlamVjdChuZXcgRmV0Y2hFcnJvcignQ2Fubm90IGZvbGxvdyByZWRpcmVjdCB3aXRoIGJvZHkgYmVpbmcgYSByZWFkYWJsZSBzdHJlYW0nLCAndW5zdXBwb3J0ZWQtcmVkaXJlY3QnKSk7XG5cdFx0XHRcdFx0XHRcdGZpbmFsaXplKCk7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gSFRUUC1yZWRpcmVjdCBmZXRjaCBzdGVwIDExXG5cdFx0XHRcdFx0XHRpZiAocmVzLnN0YXR1c0NvZGUgPT09IDMwMyB8fCAocmVzLnN0YXR1c0NvZGUgPT09IDMwMSB8fCByZXMuc3RhdHVzQ29kZSA9PT0gMzAyKSAmJiByZXF1ZXN0Lm1ldGhvZCA9PT0gJ1BPU1QnKSB7XG5cdFx0XHRcdFx0XHRcdHJlcXVlc3RPcHRzLm1ldGhvZCA9ICdHRVQnO1xuXHRcdFx0XHRcdFx0XHRyZXF1ZXN0T3B0cy5ib2R5ID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0XHRyZXF1ZXN0T3B0cy5oZWFkZXJzLmRlbGV0ZSgnY29udGVudC1sZW5ndGgnKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gSFRUUC1yZWRpcmVjdCBmZXRjaCBzdGVwIDE1XG5cdFx0XHRcdFx0XHRyZXNvbHZlKGZldGNoKG5ldyBSZXF1ZXN0KGxvY2F0aW9uVVJMLCByZXF1ZXN0T3B0cykpKTtcblx0XHRcdFx0XHRcdGZpbmFsaXplKCk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gcHJlcGFyZSByZXNwb25zZVxuXHRcdFx0cmVzLm9uY2UoJ2VuZCcsIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0aWYgKHNpZ25hbCkgc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnRBbmRGaW5hbGl6ZSk7XG5cdFx0XHR9KTtcblx0XHRcdGxldCBib2R5ID0gcmVzLnBpcGUobmV3IFBhc3NUaHJvdWdoJDEoKSk7XG5cblx0XHRcdGNvbnN0IHJlc3BvbnNlX29wdGlvbnMgPSB7XG5cdFx0XHRcdHVybDogcmVxdWVzdC51cmwsXG5cdFx0XHRcdHN0YXR1czogcmVzLnN0YXR1c0NvZGUsXG5cdFx0XHRcdHN0YXR1c1RleHQ6IHJlcy5zdGF0dXNNZXNzYWdlLFxuXHRcdFx0XHRoZWFkZXJzOiBoZWFkZXJzLFxuXHRcdFx0XHRzaXplOiByZXF1ZXN0LnNpemUsXG5cdFx0XHRcdHRpbWVvdXQ6IHJlcXVlc3QudGltZW91dCxcblx0XHRcdFx0Y291bnRlcjogcmVxdWVzdC5jb3VudGVyXG5cdFx0XHR9O1xuXG5cdFx0XHQvLyBIVFRQLW5ldHdvcmsgZmV0Y2ggc3RlcCAxMi4xLjEuM1xuXHRcdFx0Y29uc3QgY29kaW5ncyA9IGhlYWRlcnMuZ2V0KCdDb250ZW50LUVuY29kaW5nJyk7XG5cblx0XHRcdC8vIEhUVFAtbmV0d29yayBmZXRjaCBzdGVwIDEyLjEuMS40OiBoYW5kbGUgY29udGVudCBjb2RpbmdzXG5cblx0XHRcdC8vIGluIGZvbGxvd2luZyBzY2VuYXJpb3Mgd2UgaWdub3JlIGNvbXByZXNzaW9uIHN1cHBvcnRcblx0XHRcdC8vIDEuIGNvbXByZXNzaW9uIHN1cHBvcnQgaXMgZGlzYWJsZWRcblx0XHRcdC8vIDIuIEhFQUQgcmVxdWVzdFxuXHRcdFx0Ly8gMy4gbm8gQ29udGVudC1FbmNvZGluZyBoZWFkZXJcblx0XHRcdC8vIDQuIG5vIGNvbnRlbnQgcmVzcG9uc2UgKDIwNClcblx0XHRcdC8vIDUuIGNvbnRlbnQgbm90IG1vZGlmaWVkIHJlc3BvbnNlICgzMDQpXG5cdFx0XHRpZiAoIXJlcXVlc3QuY29tcHJlc3MgfHwgcmVxdWVzdC5tZXRob2QgPT09ICdIRUFEJyB8fCBjb2RpbmdzID09PSBudWxsIHx8IHJlcy5zdGF0dXNDb2RlID09PSAyMDQgfHwgcmVzLnN0YXR1c0NvZGUgPT09IDMwNCkge1xuXHRcdFx0XHRyZXNwb25zZSA9IG5ldyBSZXNwb25zZShib2R5LCByZXNwb25zZV9vcHRpb25zKTtcblx0XHRcdFx0cmVzb2x2ZShyZXNwb25zZSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gRm9yIE5vZGUgdjYrXG5cdFx0XHQvLyBCZSBsZXNzIHN0cmljdCB3aGVuIGRlY29kaW5nIGNvbXByZXNzZWQgcmVzcG9uc2VzLCBzaW5jZSBzb21ldGltZXNcblx0XHRcdC8vIHNlcnZlcnMgc2VuZCBzbGlnaHRseSBpbnZhbGlkIHJlc3BvbnNlcyB0aGF0IGFyZSBzdGlsbCBhY2NlcHRlZFxuXHRcdFx0Ly8gYnkgY29tbW9uIGJyb3dzZXJzLlxuXHRcdFx0Ly8gQWx3YXlzIHVzaW5nIFpfU1lOQ19GTFVTSCBpcyB3aGF0IGNVUkwgZG9lcy5cblx0XHRcdGNvbnN0IHpsaWJPcHRpb25zID0ge1xuXHRcdFx0XHRmbHVzaDogemxpYi5aX1NZTkNfRkxVU0gsXG5cdFx0XHRcdGZpbmlzaEZsdXNoOiB6bGliLlpfU1lOQ19GTFVTSFxuXHRcdFx0fTtcblxuXHRcdFx0Ly8gZm9yIGd6aXBcblx0XHRcdGlmIChjb2RpbmdzID09ICdnemlwJyB8fCBjb2RpbmdzID09ICd4LWd6aXAnKSB7XG5cdFx0XHRcdGJvZHkgPSBib2R5LnBpcGUoemxpYi5jcmVhdGVHdW56aXAoemxpYk9wdGlvbnMpKTtcblx0XHRcdFx0cmVzcG9uc2UgPSBuZXcgUmVzcG9uc2UoYm9keSwgcmVzcG9uc2Vfb3B0aW9ucyk7XG5cdFx0XHRcdHJlc29sdmUocmVzcG9uc2UpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIGZvciBkZWZsYXRlXG5cdFx0XHRpZiAoY29kaW5ncyA9PSAnZGVmbGF0ZScgfHwgY29kaW5ncyA9PSAneC1kZWZsYXRlJykge1xuXHRcdFx0XHQvLyBoYW5kbGUgdGhlIGluZmFtb3VzIHJhdyBkZWZsYXRlIHJlc3BvbnNlIGZyb20gb2xkIHNlcnZlcnNcblx0XHRcdFx0Ly8gYSBoYWNrIGZvciBvbGQgSUlTIGFuZCBBcGFjaGUgc2VydmVyc1xuXHRcdFx0XHRjb25zdCByYXcgPSByZXMucGlwZShuZXcgUGFzc1Rocm91Z2gkMSgpKTtcblx0XHRcdFx0cmF3Lm9uY2UoJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHtcblx0XHRcdFx0XHQvLyBzZWUgaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8zNzUxOTgyOFxuXHRcdFx0XHRcdGlmICgoY2h1bmtbMF0gJiAweDBGKSA9PT0gMHgwOCkge1xuXHRcdFx0XHRcdFx0Ym9keSA9IGJvZHkucGlwZSh6bGliLmNyZWF0ZUluZmxhdGUoKSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGJvZHkgPSBib2R5LnBpcGUoemxpYi5jcmVhdGVJbmZsYXRlUmF3KCkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXNwb25zZSA9IG5ldyBSZXNwb25zZShib2R5LCByZXNwb25zZV9vcHRpb25zKTtcblx0XHRcdFx0XHRyZXNvbHZlKHJlc3BvbnNlKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHJhdy5vbignZW5kJywgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdC8vIHNvbWUgb2xkIElJUyBzZXJ2ZXJzIHJldHVybiB6ZXJvLWxlbmd0aCBPSyBkZWZsYXRlIHJlc3BvbnNlcywgc28gJ2RhdGEnIGlzIG5ldmVyIGVtaXR0ZWQuXG5cdFx0XHRcdFx0aWYgKCFyZXNwb25zZSkge1xuXHRcdFx0XHRcdFx0cmVzcG9uc2UgPSBuZXcgUmVzcG9uc2UoYm9keSwgcmVzcG9uc2Vfb3B0aW9ucyk7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKHJlc3BvbnNlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIGZvciBiclxuXHRcdFx0aWYgKGNvZGluZ3MgPT0gJ2JyJyAmJiB0eXBlb2YgemxpYi5jcmVhdGVCcm90bGlEZWNvbXByZXNzID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdGJvZHkgPSBib2R5LnBpcGUoemxpYi5jcmVhdGVCcm90bGlEZWNvbXByZXNzKCkpO1xuXHRcdFx0XHRyZXNwb25zZSA9IG5ldyBSZXNwb25zZShib2R5LCByZXNwb25zZV9vcHRpb25zKTtcblx0XHRcdFx0cmVzb2x2ZShyZXNwb25zZSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gb3RoZXJ3aXNlLCB1c2UgcmVzcG9uc2UgYXMtaXNcblx0XHRcdHJlc3BvbnNlID0gbmV3IFJlc3BvbnNlKGJvZHksIHJlc3BvbnNlX29wdGlvbnMpO1xuXHRcdFx0cmVzb2x2ZShyZXNwb25zZSk7XG5cdFx0fSk7XG5cblx0XHR3cml0ZVRvU3RyZWFtKHJlcSwgcmVxdWVzdCk7XG5cdH0pO1xufVxuZnVuY3Rpb24gZml4UmVzcG9uc2VDaHVua2VkVHJhbnNmZXJCYWRFbmRpbmcocmVxdWVzdCwgZXJyb3JDYWxsYmFjaykge1xuXHRsZXQgc29ja2V0O1xuXG5cdHJlcXVlc3Qub24oJ3NvY2tldCcsIGZ1bmN0aW9uIChzKSB7XG5cdFx0c29ja2V0ID0gcztcblx0fSk7XG5cblx0cmVxdWVzdC5vbigncmVzcG9uc2UnLCBmdW5jdGlvbiAocmVzcG9uc2UpIHtcblx0XHRjb25zdCBoZWFkZXJzID0gcmVzcG9uc2UuaGVhZGVycztcblxuXHRcdGlmIChoZWFkZXJzWyd0cmFuc2Zlci1lbmNvZGluZyddID09PSAnY2h1bmtlZCcgJiYgIWhlYWRlcnNbJ2NvbnRlbnQtbGVuZ3RoJ10pIHtcblx0XHRcdHJlc3BvbnNlLm9uY2UoJ2Nsb3NlJywgZnVuY3Rpb24gKGhhZEVycm9yKSB7XG5cdFx0XHRcdC8vIHRlc3RzIGZvciBzb2NrZXQgcHJlc2VuY2UsIGFzIGluIHNvbWUgc2l0dWF0aW9ucyB0aGVcblx0XHRcdFx0Ly8gdGhlICdzb2NrZXQnIGV2ZW50IGlzIG5vdCB0cmlnZ2VyZWQgZm9yIHRoZSByZXF1ZXN0XG5cdFx0XHRcdC8vIChoYXBwZW5zIGluIGRlbm8pLCBhdm9pZHMgYFR5cGVFcnJvcmBcblx0XHRcdFx0Ly8gaWYgYSBkYXRhIGxpc3RlbmVyIGlzIHN0aWxsIHByZXNlbnQgd2UgZGlkbid0IGVuZCBjbGVhbmx5XG5cdFx0XHRcdGNvbnN0IGhhc0RhdGFMaXN0ZW5lciA9IHNvY2tldCAmJiBzb2NrZXQubGlzdGVuZXJDb3VudCgnZGF0YScpID4gMDtcblxuXHRcdFx0XHRpZiAoaGFzRGF0YUxpc3RlbmVyICYmICFoYWRFcnJvcikge1xuXHRcdFx0XHRcdGNvbnN0IGVyciA9IG5ldyBFcnJvcignUHJlbWF0dXJlIGNsb3NlJyk7XG5cdFx0XHRcdFx0ZXJyLmNvZGUgPSAnRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UnO1xuXHRcdFx0XHRcdGVycm9yQ2FsbGJhY2soZXJyKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KTtcbn1cblxuZnVuY3Rpb24gZGVzdHJveVN0cmVhbShzdHJlYW0sIGVycikge1xuXHRpZiAoc3RyZWFtLmRlc3Ryb3kpIHtcblx0XHRzdHJlYW0uZGVzdHJveShlcnIpO1xuXHR9IGVsc2Uge1xuXHRcdC8vIG5vZGUgPCA4XG5cdFx0c3RyZWFtLmVtaXQoJ2Vycm9yJywgZXJyKTtcblx0XHRzdHJlYW0uZW5kKCk7XG5cdH1cbn1cblxuLyoqXG4gKiBSZWRpcmVjdCBjb2RlIG1hdGNoaW5nXG4gKlxuICogQHBhcmFtICAgTnVtYmVyICAgY29kZSAgU3RhdHVzIGNvZGVcbiAqIEByZXR1cm4gIEJvb2xlYW5cbiAqL1xuZmV0Y2guaXNSZWRpcmVjdCA9IGZ1bmN0aW9uIChjb2RlKSB7XG5cdHJldHVybiBjb2RlID09PSAzMDEgfHwgY29kZSA9PT0gMzAyIHx8IGNvZGUgPT09IDMwMyB8fCBjb2RlID09PSAzMDcgfHwgY29kZSA9PT0gMzA4O1xufTtcblxuLy8gZXhwb3NlIFByb21pc2VcbmZldGNoLlByb21pc2UgPSBnbG9iYWwuUHJvbWlzZTtcblxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmV0Y2g7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlZmF1bHQgPSBleHBvcnRzO1xuZXhwb3J0cy5IZWFkZXJzID0gSGVhZGVycztcbmV4cG9ydHMuUmVxdWVzdCA9IFJlcXVlc3Q7XG5leHBvcnRzLlJlc3BvbnNlID0gUmVzcG9uc2U7XG5leHBvcnRzLkZldGNoRXJyb3IgPSBGZXRjaEVycm9yO1xuZXhwb3J0cy5BYm9ydEVycm9yID0gQWJvcnRFcnJvcjtcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5jbGFzcyBEZXByZWNhdGlvbiBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpOyAvLyBNYWludGFpbnMgcHJvcGVyIHN0YWNrIHRyYWNlIChvbmx5IGF2YWlsYWJsZSBvbiBWOClcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cbiAgICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuICAgIH1cblxuICAgIHRoaXMubmFtZSA9ICdEZXByZWNhdGlvbic7XG4gIH1cblxufVxuXG5leHBvcnRzLkRlcHJlY2F0aW9uID0gRGVwcmVjYXRpb247XG4iLAogICAgIi8vIFJldHVybnMgYSB3cmFwcGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHdyYXBwZWQgY2FsbGJhY2tcbi8vIFRoZSB3cmFwcGVyIGZ1bmN0aW9uIHNob3VsZCBkbyBzb21lIHN0dWZmLCBhbmQgcmV0dXJuIGFcbi8vIHByZXN1bWFibHkgZGlmZmVyZW50IGNhbGxiYWNrIGZ1bmN0aW9uLlxuLy8gVGhpcyBtYWtlcyBzdXJlIHRoYXQgb3duIHByb3BlcnRpZXMgYXJlIHJldGFpbmVkLCBzbyB0aGF0XG4vLyBkZWNvcmF0aW9ucyBhbmQgc3VjaCBhcmUgbm90IGxvc3QgYWxvbmcgdGhlIHdheS5cbm1vZHVsZS5leHBvcnRzID0gd3JhcHB5XG5mdW5jdGlvbiB3cmFwcHkgKGZuLCBjYikge1xuICBpZiAoZm4gJiYgY2IpIHJldHVybiB3cmFwcHkoZm4pKGNiKVxuXG4gIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbmVlZCB3cmFwcGVyIGZ1bmN0aW9uJylcblxuICBPYmplY3Qua2V5cyhmbikuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgIHdyYXBwZXJba10gPSBmbltrXVxuICB9KVxuXG4gIHJldHVybiB3cmFwcGVyXG5cbiAgZnVuY3Rpb24gd3JhcHBlcigpIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXVxuICAgIH1cbiAgICB2YXIgcmV0ID0gZm4uYXBwbHkodGhpcywgYXJncylcbiAgICB2YXIgY2IgPSBhcmdzW2FyZ3MubGVuZ3RoLTFdXG4gICAgaWYgKHR5cGVvZiByZXQgPT09ICdmdW5jdGlvbicgJiYgcmV0ICE9PSBjYikge1xuICAgICAgT2JqZWN0LmtleXMoY2IpLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgICAgICAgcmV0W2tdID0gY2Jba11cbiAgICAgIH0pXG4gICAgfVxuICAgIHJldHVybiByZXRcbiAgfVxufVxuIiwKICAgICJ2YXIgd3JhcHB5ID0gcmVxdWlyZSgnd3JhcHB5Jylcbm1vZHVsZS5leHBvcnRzID0gd3JhcHB5KG9uY2UpXG5tb2R1bGUuZXhwb3J0cy5zdHJpY3QgPSB3cmFwcHkob25jZVN0cmljdClcblxub25jZS5wcm90byA9IG9uY2UoZnVuY3Rpb24gKCkge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRnVuY3Rpb24ucHJvdG90eXBlLCAnb25jZScsIHtcbiAgICB2YWx1ZTogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIG9uY2UodGhpcylcbiAgICB9LFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KVxuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGdW5jdGlvbi5wcm90b3R5cGUsICdvbmNlU3RyaWN0Jywge1xuICAgIHZhbHVlOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gb25jZVN0cmljdCh0aGlzKVxuICAgIH0sXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pXG59KVxuXG5mdW5jdGlvbiBvbmNlIChmbikge1xuICB2YXIgZiA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoZi5jYWxsZWQpIHJldHVybiBmLnZhbHVlXG4gICAgZi5jYWxsZWQgPSB0cnVlXG4gICAgcmV0dXJuIGYudmFsdWUgPSBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gIH1cbiAgZi5jYWxsZWQgPSBmYWxzZVxuICByZXR1cm4gZlxufVxuXG5mdW5jdGlvbiBvbmNlU3RyaWN0IChmbikge1xuICB2YXIgZiA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoZi5jYWxsZWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZi5vbmNlRXJyb3IpXG4gICAgZi5jYWxsZWQgPSB0cnVlXG4gICAgcmV0dXJuIGYudmFsdWUgPSBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gIH1cbiAgdmFyIG5hbWUgPSBmbi5uYW1lIHx8ICdGdW5jdGlvbiB3cmFwcGVkIHdpdGggYG9uY2VgJ1xuICBmLm9uY2VFcnJvciA9IG5hbWUgKyBcIiBzaG91bGRuJ3QgYmUgY2FsbGVkIG1vcmUgdGhhbiBvbmNlXCJcbiAgZi5jYWxsZWQgPSBmYWxzZVxuICByZXR1cm4gZlxufVxuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wRGVmYXVsdCAoZXgpIHsgcmV0dXJuIChleCAmJiAodHlwZW9mIGV4ID09PSAnb2JqZWN0JykgJiYgJ2RlZmF1bHQnIGluIGV4KSA/IGV4WydkZWZhdWx0J10gOiBleDsgfVxuXG52YXIgZGVwcmVjYXRpb24gPSByZXF1aXJlKCdkZXByZWNhdGlvbicpO1xudmFyIG9uY2UgPSBfaW50ZXJvcERlZmF1bHQocmVxdWlyZSgnb25jZScpKTtcblxuY29uc3QgbG9nT25jZUNvZGUgPSBvbmNlKGRlcHJlY2F0aW9uID0+IGNvbnNvbGUud2FybihkZXByZWNhdGlvbikpO1xuY29uc3QgbG9nT25jZUhlYWRlcnMgPSBvbmNlKGRlcHJlY2F0aW9uID0+IGNvbnNvbGUud2FybihkZXByZWNhdGlvbikpO1xuLyoqXG4gKiBFcnJvciB3aXRoIGV4dHJhIHByb3BlcnRpZXMgdG8gaGVscCB3aXRoIGRlYnVnZ2luZ1xuICovXG5cbmNsYXNzIFJlcXVlc3RFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZSwgc3RhdHVzQ29kZSwgb3B0aW9ucykge1xuICAgIHN1cGVyKG1lc3NhZ2UpOyAvLyBNYWludGFpbnMgcHJvcGVyIHN0YWNrIHRyYWNlIChvbmx5IGF2YWlsYWJsZSBvbiBWOClcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cbiAgICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuICAgIH1cblxuICAgIHRoaXMubmFtZSA9IFwiSHR0cEVycm9yXCI7XG4gICAgdGhpcy5zdGF0dXMgPSBzdGF0dXNDb2RlO1xuICAgIGxldCBoZWFkZXJzO1xuXG4gICAgaWYgKFwiaGVhZGVyc1wiIGluIG9wdGlvbnMgJiYgdHlwZW9mIG9wdGlvbnMuaGVhZGVycyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgaGVhZGVycyA9IG9wdGlvbnMuaGVhZGVycztcbiAgICB9XG5cbiAgICBpZiAoXCJyZXNwb25zZVwiIGluIG9wdGlvbnMpIHtcbiAgICAgIHRoaXMucmVzcG9uc2UgPSBvcHRpb25zLnJlc3BvbnNlO1xuICAgICAgaGVhZGVycyA9IG9wdGlvbnMucmVzcG9uc2UuaGVhZGVycztcbiAgICB9IC8vIHJlZGFjdCByZXF1ZXN0IGNyZWRlbnRpYWxzIHdpdGhvdXQgbXV0YXRpbmcgb3JpZ2luYWwgcmVxdWVzdCBvcHRpb25zXG5cblxuICAgIGNvbnN0IHJlcXVlc3RDb3B5ID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5yZXF1ZXN0KTtcblxuICAgIGlmIChvcHRpb25zLnJlcXVlc3QuaGVhZGVycy5hdXRob3JpemF0aW9uKSB7XG4gICAgICByZXF1ZXN0Q29weS5oZWFkZXJzID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5yZXF1ZXN0LmhlYWRlcnMsIHtcbiAgICAgICAgYXV0aG9yaXphdGlvbjogb3B0aW9ucy5yZXF1ZXN0LmhlYWRlcnMuYXV0aG9yaXphdGlvbi5yZXBsYWNlKC8gLiokLywgXCIgW1JFREFDVEVEXVwiKVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVxdWVzdENvcHkudXJsID0gcmVxdWVzdENvcHkudXJsIC8vIGNsaWVudF9pZCAmIGNsaWVudF9zZWNyZXQgY2FuIGJlIHBhc3NlZCBhcyBVUkwgcXVlcnkgcGFyYW1ldGVycyB0byBpbmNyZWFzZSByYXRlIGxpbWl0XG4gICAgLy8gc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmdpdGh1Yi5jb20vdjMvI2luY3JlYXNpbmctdGhlLXVuYXV0aGVudGljYXRlZC1yYXRlLWxpbWl0LWZvci1vYXV0aC1hcHBsaWNhdGlvbnNcbiAgICAucmVwbGFjZSgvXFxiY2xpZW50X3NlY3JldD1cXHcrL2csIFwiY2xpZW50X3NlY3JldD1bUkVEQUNURURdXCIpIC8vIE9BdXRoIHRva2VucyBjYW4gYmUgcGFzc2VkIGFzIFVSTCBxdWVyeSBwYXJhbWV0ZXJzLCBhbHRob3VnaCBpdCBpcyBub3QgcmVjb21tZW5kZWRcbiAgICAvLyBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuZ2l0aHViLmNvbS92My8jb2F1dGgyLXRva2VuLXNlbnQtaW4tYS1oZWFkZXJcbiAgICAucmVwbGFjZSgvXFxiYWNjZXNzX3Rva2VuPVxcdysvZywgXCJhY2Nlc3NfdG9rZW49W1JFREFDVEVEXVwiKTtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0Q29weTsgLy8gZGVwcmVjYXRpb25zXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJjb2RlXCIsIHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgbG9nT25jZUNvZGUobmV3IGRlcHJlY2F0aW9uLkRlcHJlY2F0aW9uKFwiW0BvY3Rva2l0L3JlcXVlc3QtZXJyb3JdIGBlcnJvci5jb2RlYCBpcyBkZXByZWNhdGVkLCB1c2UgYGVycm9yLnN0YXR1c2AuXCIpKTtcbiAgICAgICAgcmV0dXJuIHN0YXR1c0NvZGU7XG4gICAgICB9XG5cbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJoZWFkZXJzXCIsIHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgbG9nT25jZUhlYWRlcnMobmV3IGRlcHJlY2F0aW9uLkRlcHJlY2F0aW9uKFwiW0BvY3Rva2l0L3JlcXVlc3QtZXJyb3JdIGBlcnJvci5oZWFkZXJzYCBpcyBkZXByZWNhdGVkLCB1c2UgYGVycm9yLnJlc3BvbnNlLmhlYWRlcnNgLlwiKSk7XG4gICAgICAgIHJldHVybiBoZWFkZXJzIHx8IHt9O1xuICAgICAgfVxuXG4gICAgfSk7XG4gIH1cblxufVxuXG5leHBvcnRzLlJlcXVlc3RFcnJvciA9IFJlcXVlc3RFcnJvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wRGVmYXVsdCAoZXgpIHsgcmV0dXJuIChleCAmJiAodHlwZW9mIGV4ID09PSAnb2JqZWN0JykgJiYgJ2RlZmF1bHQnIGluIGV4KSA/IGV4WydkZWZhdWx0J10gOiBleDsgfVxuXG52YXIgZW5kcG9pbnQgPSByZXF1aXJlKCdAb2N0b2tpdC9lbmRwb2ludCcpO1xudmFyIHVuaXZlcnNhbFVzZXJBZ2VudCA9IHJlcXVpcmUoJ3VuaXZlcnNhbC11c2VyLWFnZW50Jyk7XG52YXIgaXNQbGFpbk9iamVjdCA9IHJlcXVpcmUoJ2lzLXBsYWluLW9iamVjdCcpO1xudmFyIG5vZGVGZXRjaCA9IF9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKCdub2RlLWZldGNoJykpO1xudmFyIHJlcXVlc3RFcnJvciA9IHJlcXVpcmUoJ0BvY3Rva2l0L3JlcXVlc3QtZXJyb3InKTtcblxuY29uc3QgVkVSU0lPTiA9IFwiNS42LjNcIjtcblxuZnVuY3Rpb24gZ2V0QnVmZmVyUmVzcG9uc2UocmVzcG9uc2UpIHtcbiAgcmV0dXJuIHJlc3BvbnNlLmFycmF5QnVmZmVyKCk7XG59XG5cbmZ1bmN0aW9uIGZldGNoV3JhcHBlcihyZXF1ZXN0T3B0aW9ucykge1xuICBjb25zdCBsb2cgPSByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0ICYmIHJlcXVlc3RPcHRpb25zLnJlcXVlc3QubG9nID8gcmVxdWVzdE9wdGlvbnMucmVxdWVzdC5sb2cgOiBjb25zb2xlO1xuXG4gIGlmIChpc1BsYWluT2JqZWN0LmlzUGxhaW5PYmplY3QocmVxdWVzdE9wdGlvbnMuYm9keSkgfHwgQXJyYXkuaXNBcnJheShyZXF1ZXN0T3B0aW9ucy5ib2R5KSkge1xuICAgIHJlcXVlc3RPcHRpb25zLmJvZHkgPSBKU09OLnN0cmluZ2lmeShyZXF1ZXN0T3B0aW9ucy5ib2R5KTtcbiAgfVxuXG4gIGxldCBoZWFkZXJzID0ge307XG4gIGxldCBzdGF0dXM7XG4gIGxldCB1cmw7XG4gIGNvbnN0IGZldGNoID0gcmVxdWVzdE9wdGlvbnMucmVxdWVzdCAmJiByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0LmZldGNoIHx8IG5vZGVGZXRjaDtcbiAgcmV0dXJuIGZldGNoKHJlcXVlc3RPcHRpb25zLnVybCwgT2JqZWN0LmFzc2lnbih7XG4gICAgbWV0aG9kOiByZXF1ZXN0T3B0aW9ucy5tZXRob2QsXG4gICAgYm9keTogcmVxdWVzdE9wdGlvbnMuYm9keSxcbiAgICBoZWFkZXJzOiByZXF1ZXN0T3B0aW9ucy5oZWFkZXJzLFxuICAgIHJlZGlyZWN0OiByZXF1ZXN0T3B0aW9ucy5yZWRpcmVjdFxuICB9LCAvLyBgcmVxdWVzdE9wdGlvbnMucmVxdWVzdC5hZ2VudGAgdHlwZSBpcyBpbmNvbXBhdGlibGVcbiAgLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9vY3Rva2l0L3R5cGVzLnRzL3B1bGwvMjY0XG4gIHJlcXVlc3RPcHRpb25zLnJlcXVlc3QpKS50aGVuKGFzeW5jIHJlc3BvbnNlID0+IHtcbiAgICB1cmwgPSByZXNwb25zZS51cmw7XG4gICAgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuXG4gICAgZm9yIChjb25zdCBrZXlBbmRWYWx1ZSBvZiByZXNwb25zZS5oZWFkZXJzKSB7XG4gICAgICBoZWFkZXJzW2tleUFuZFZhbHVlWzBdXSA9IGtleUFuZFZhbHVlWzFdO1xuICAgIH1cblxuICAgIGlmIChcImRlcHJlY2F0aW9uXCIgaW4gaGVhZGVycykge1xuICAgICAgY29uc3QgbWF0Y2hlcyA9IGhlYWRlcnMubGluayAmJiBoZWFkZXJzLmxpbmsubWF0Y2goLzwoW14+XSspPjsgcmVsPVwiZGVwcmVjYXRpb25cIi8pO1xuICAgICAgY29uc3QgZGVwcmVjYXRpb25MaW5rID0gbWF0Y2hlcyAmJiBtYXRjaGVzLnBvcCgpO1xuICAgICAgbG9nLndhcm4oYFtAb2N0b2tpdC9yZXF1ZXN0XSBcIiR7cmVxdWVzdE9wdGlvbnMubWV0aG9kfSAke3JlcXVlc3RPcHRpb25zLnVybH1cIiBpcyBkZXByZWNhdGVkLiBJdCBpcyBzY2hlZHVsZWQgdG8gYmUgcmVtb3ZlZCBvbiAke2hlYWRlcnMuc3Vuc2V0fSR7ZGVwcmVjYXRpb25MaW5rID8gYC4gU2VlICR7ZGVwcmVjYXRpb25MaW5rfWAgOiBcIlwifWApO1xuICAgIH1cblxuICAgIGlmIChzdGF0dXMgPT09IDIwNCB8fCBzdGF0dXMgPT09IDIwNSkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gR2l0SHViIEFQSSByZXR1cm5zIDIwMCBmb3IgSEVBRCByZXF1ZXN0c1xuXG5cbiAgICBpZiAocmVxdWVzdE9wdGlvbnMubWV0aG9kID09PSBcIkhFQURcIikge1xuICAgICAgaWYgKHN0YXR1cyA8IDQwMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyByZXF1ZXN0RXJyb3IuUmVxdWVzdEVycm9yKHJlc3BvbnNlLnN0YXR1c1RleHQsIHN0YXR1cywge1xuICAgICAgICByZXNwb25zZToge1xuICAgICAgICAgIHVybCxcbiAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICBkYXRhOiB1bmRlZmluZWRcbiAgICAgICAgfSxcbiAgICAgICAgcmVxdWVzdDogcmVxdWVzdE9wdGlvbnNcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChzdGF0dXMgPT09IDMwNCkge1xuICAgICAgdGhyb3cgbmV3IHJlcXVlc3RFcnJvci5SZXF1ZXN0RXJyb3IoXCJOb3QgbW9kaWZpZWRcIiwgc3RhdHVzLCB7XG4gICAgICAgIHJlc3BvbnNlOiB7XG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIHN0YXR1cyxcbiAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgIGRhdGE6IGF3YWl0IGdldFJlc3BvbnNlRGF0YShyZXNwb25zZSlcbiAgICAgICAgfSxcbiAgICAgICAgcmVxdWVzdDogcmVxdWVzdE9wdGlvbnNcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChzdGF0dXMgPj0gNDAwKSB7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ2V0UmVzcG9uc2VEYXRhKHJlc3BvbnNlKTtcbiAgICAgIGNvbnN0IGVycm9yID0gbmV3IHJlcXVlc3RFcnJvci5SZXF1ZXN0RXJyb3IodG9FcnJvck1lc3NhZ2UoZGF0YSksIHN0YXR1cywge1xuICAgICAgICByZXNwb25zZToge1xuICAgICAgICAgIHVybCxcbiAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICBkYXRhXG4gICAgICAgIH0sXG4gICAgICAgIHJlcXVlc3Q6IHJlcXVlc3RPcHRpb25zXG4gICAgICB9KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cblxuICAgIHJldHVybiBnZXRSZXNwb25zZURhdGEocmVzcG9uc2UpO1xuICB9KS50aGVuKGRhdGEgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXMsXG4gICAgICB1cmwsXG4gICAgICBoZWFkZXJzLFxuICAgICAgZGF0YVxuICAgIH07XG4gIH0pLmNhdGNoKGVycm9yID0+IHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiByZXF1ZXN0RXJyb3IuUmVxdWVzdEVycm9yKSB0aHJvdyBlcnJvcjtcbiAgICB0aHJvdyBuZXcgcmVxdWVzdEVycm9yLlJlcXVlc3RFcnJvcihlcnJvci5tZXNzYWdlLCA1MDAsIHtcbiAgICAgIHJlcXVlc3Q6IHJlcXVlc3RPcHRpb25zXG4gICAgfSk7XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRSZXNwb25zZURhdGEocmVzcG9uc2UpIHtcbiAgY29uc3QgY29udGVudFR5cGUgPSByZXNwb25zZS5oZWFkZXJzLmdldChcImNvbnRlbnQtdHlwZVwiKTtcblxuICBpZiAoL2FwcGxpY2F0aW9uXFwvanNvbi8udGVzdChjb250ZW50VHlwZSkpIHtcbiAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpO1xuICB9XG5cbiAgaWYgKCFjb250ZW50VHlwZSB8fCAvXnRleHRcXC98Y2hhcnNldD11dGYtOCQvLnRlc3QoY29udGVudFR5cGUpKSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLnRleHQoKTtcbiAgfVxuXG4gIHJldHVybiBnZXRCdWZmZXJSZXNwb25zZShyZXNwb25zZSk7XG59XG5cbmZ1bmN0aW9uIHRvRXJyb3JNZXNzYWdlKGRhdGEpIHtcbiAgaWYgKHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiKSByZXR1cm4gZGF0YTsgLy8gaXN0YW5idWwgaWdub3JlIGVsc2UgLSBqdXN0IGluIGNhc2VcblxuICBpZiAoXCJtZXNzYWdlXCIgaW4gZGF0YSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEuZXJyb3JzKSkge1xuICAgICAgcmV0dXJuIGAke2RhdGEubWVzc2FnZX06ICR7ZGF0YS5lcnJvcnMubWFwKEpTT04uc3RyaW5naWZ5KS5qb2luKFwiLCBcIil9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YS5tZXNzYWdlO1xuICB9IC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0IC0ganVzdCBpbiBjYXNlXG5cblxuICByZXR1cm4gYFVua25vd24gZXJyb3I6ICR7SlNPTi5zdHJpbmdpZnkoZGF0YSl9YDtcbn1cblxuZnVuY3Rpb24gd2l0aERlZmF1bHRzKG9sZEVuZHBvaW50LCBuZXdEZWZhdWx0cykge1xuICBjb25zdCBlbmRwb2ludCA9IG9sZEVuZHBvaW50LmRlZmF1bHRzKG5ld0RlZmF1bHRzKTtcblxuICBjb25zdCBuZXdBcGkgPSBmdW5jdGlvbiAocm91dGUsIHBhcmFtZXRlcnMpIHtcbiAgICBjb25zdCBlbmRwb2ludE9wdGlvbnMgPSBlbmRwb2ludC5tZXJnZShyb3V0ZSwgcGFyYW1ldGVycyk7XG5cbiAgICBpZiAoIWVuZHBvaW50T3B0aW9ucy5yZXF1ZXN0IHx8ICFlbmRwb2ludE9wdGlvbnMucmVxdWVzdC5ob29rKSB7XG4gICAgICByZXR1cm4gZmV0Y2hXcmFwcGVyKGVuZHBvaW50LnBhcnNlKGVuZHBvaW50T3B0aW9ucykpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3QgPSAocm91dGUsIHBhcmFtZXRlcnMpID0+IHtcbiAgICAgIHJldHVybiBmZXRjaFdyYXBwZXIoZW5kcG9pbnQucGFyc2UoZW5kcG9pbnQubWVyZ2Uocm91dGUsIHBhcmFtZXRlcnMpKSk7XG4gICAgfTtcblxuICAgIE9iamVjdC5hc3NpZ24ocmVxdWVzdCwge1xuICAgICAgZW5kcG9pbnQsXG4gICAgICBkZWZhdWx0czogd2l0aERlZmF1bHRzLmJpbmQobnVsbCwgZW5kcG9pbnQpXG4gICAgfSk7XG4gICAgcmV0dXJuIGVuZHBvaW50T3B0aW9ucy5yZXF1ZXN0Lmhvb2socmVxdWVzdCwgZW5kcG9pbnRPcHRpb25zKTtcbiAgfTtcblxuICByZXR1cm4gT2JqZWN0LmFzc2lnbihuZXdBcGksIHtcbiAgICBlbmRwb2ludCxcbiAgICBkZWZhdWx0czogd2l0aERlZmF1bHRzLmJpbmQobnVsbCwgZW5kcG9pbnQpXG4gIH0pO1xufVxuXG5jb25zdCByZXF1ZXN0ID0gd2l0aERlZmF1bHRzKGVuZHBvaW50LmVuZHBvaW50LCB7XG4gIGhlYWRlcnM6IHtcbiAgICBcInVzZXItYWdlbnRcIjogYG9jdG9raXQtcmVxdWVzdC5qcy8ke1ZFUlNJT059ICR7dW5pdmVyc2FsVXNlckFnZW50LmdldFVzZXJBZ2VudCgpfWBcbiAgfVxufSk7XG5cbmV4cG9ydHMucmVxdWVzdCA9IHJlcXVlc3Q7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG52YXIgcmVxdWVzdCA9IHJlcXVpcmUoJ0BvY3Rva2l0L3JlcXVlc3QnKTtcbnZhciB1bml2ZXJzYWxVc2VyQWdlbnQgPSByZXF1aXJlKCd1bml2ZXJzYWwtdXNlci1hZ2VudCcpO1xuXG5jb25zdCBWRVJTSU9OID0gXCI0LjguMFwiO1xuXG5mdW5jdGlvbiBfYnVpbGRNZXNzYWdlRm9yUmVzcG9uc2VFcnJvcnMoZGF0YSkge1xuICByZXR1cm4gYFJlcXVlc3QgZmFpbGVkIGR1ZSB0byBmb2xsb3dpbmcgcmVzcG9uc2UgZXJyb3JzOlxcbmAgKyBkYXRhLmVycm9ycy5tYXAoZSA9PiBgIC0gJHtlLm1lc3NhZ2V9YCkuam9pbihcIlxcblwiKTtcbn1cblxuY2xhc3MgR3JhcGhxbFJlc3BvbnNlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHJlcXVlc3QsIGhlYWRlcnMsIHJlc3BvbnNlKSB7XG4gICAgc3VwZXIoX2J1aWxkTWVzc2FnZUZvclJlc3BvbnNlRXJyb3JzKHJlc3BvbnNlKSk7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICB0aGlzLmhlYWRlcnMgPSBoZWFkZXJzO1xuICAgIHRoaXMucmVzcG9uc2UgPSByZXNwb25zZTtcbiAgICB0aGlzLm5hbWUgPSBcIkdyYXBocWxSZXNwb25zZUVycm9yXCI7IC8vIEV4cG9zZSB0aGUgZXJyb3JzIGFuZCByZXNwb25zZSBkYXRhIGluIHRoZWlyIHNob3J0aGFuZCBwcm9wZXJ0aWVzLlxuXG4gICAgdGhpcy5lcnJvcnMgPSByZXNwb25zZS5lcnJvcnM7XG4gICAgdGhpcy5kYXRhID0gcmVzcG9uc2UuZGF0YTsgLy8gTWFpbnRhaW5zIHByb3BlciBzdGFjayB0cmFjZSAob25seSBhdmFpbGFibGUgb24gVjgpXG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXG4gICAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgICB9XG4gIH1cblxufVxuXG5jb25zdCBOT05fVkFSSUFCTEVfT1BUSU9OUyA9IFtcIm1ldGhvZFwiLCBcImJhc2VVcmxcIiwgXCJ1cmxcIiwgXCJoZWFkZXJzXCIsIFwicmVxdWVzdFwiLCBcInF1ZXJ5XCIsIFwibWVkaWFUeXBlXCJdO1xuY29uc3QgRk9SQklEREVOX1ZBUklBQkxFX09QVElPTlMgPSBbXCJxdWVyeVwiLCBcIm1ldGhvZFwiLCBcInVybFwiXTtcbmNvbnN0IEdIRVNfVjNfU1VGRklYX1JFR0VYID0gL1xcL2FwaVxcL3YzXFwvPyQvO1xuZnVuY3Rpb24gZ3JhcGhxbChyZXF1ZXN0LCBxdWVyeSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucykge1xuICAgIGlmICh0eXBlb2YgcXVlcnkgPT09IFwic3RyaW5nXCIgJiYgXCJxdWVyeVwiIGluIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYFtAb2N0b2tpdC9ncmFwaHFsXSBcInF1ZXJ5XCIgY2Fubm90IGJlIHVzZWQgYXMgdmFyaWFibGUgbmFtZWApKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvcHRpb25zKSB7XG4gICAgICBpZiAoIUZPUkJJRERFTl9WQVJJQUJMRV9PUFRJT05TLmluY2x1ZGVzKGtleSkpIGNvbnRpbnVlO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihgW0BvY3Rva2l0L2dyYXBocWxdIFwiJHtrZXl9XCIgY2Fubm90IGJlIHVzZWQgYXMgdmFyaWFibGUgbmFtZWApKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBwYXJzZWRPcHRpb25zID0gdHlwZW9mIHF1ZXJ5ID09PSBcInN0cmluZ1wiID8gT2JqZWN0LmFzc2lnbih7XG4gICAgcXVlcnlcbiAgfSwgb3B0aW9ucykgOiBxdWVyeTtcbiAgY29uc3QgcmVxdWVzdE9wdGlvbnMgPSBPYmplY3Qua2V5cyhwYXJzZWRPcHRpb25zKS5yZWR1Y2UoKHJlc3VsdCwga2V5KSA9PiB7XG4gICAgaWYgKE5PTl9WQVJJQUJMRV9PUFRJT05TLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gcGFyc2VkT3B0aW9uc1trZXldO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBpZiAoIXJlc3VsdC52YXJpYWJsZXMpIHtcbiAgICAgIHJlc3VsdC52YXJpYWJsZXMgPSB7fTtcbiAgICB9XG5cbiAgICByZXN1bHQudmFyaWFibGVzW2tleV0gPSBwYXJzZWRPcHRpb25zW2tleV07XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSwge30pOyAvLyB3b3JrYXJvdW5kIGZvciBHaXRIdWIgRW50ZXJwcmlzZSBiYXNlVXJsIHNldCB3aXRoIC9hcGkvdjMgc3VmZml4XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9vY3Rva2l0L2F1dGgtYXBwLmpzL2lzc3Vlcy8xMTEjaXNzdWVjb21tZW50LTY1NzYxMDQ1MVxuXG4gIGNvbnN0IGJhc2VVcmwgPSBwYXJzZWRPcHRpb25zLmJhc2VVcmwgfHwgcmVxdWVzdC5lbmRwb2ludC5ERUZBVUxUUy5iYXNlVXJsO1xuXG4gIGlmIChHSEVTX1YzX1NVRkZJWF9SRUdFWC50ZXN0KGJhc2VVcmwpKSB7XG4gICAgcmVxdWVzdE9wdGlvbnMudXJsID0gYmFzZVVybC5yZXBsYWNlKEdIRVNfVjNfU1VGRklYX1JFR0VYLCBcIi9hcGkvZ3JhcGhxbFwiKTtcbiAgfVxuXG4gIHJldHVybiByZXF1ZXN0KHJlcXVlc3RPcHRpb25zKS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICBpZiAocmVzcG9uc2UuZGF0YS5lcnJvcnMpIHtcbiAgICAgIGNvbnN0IGhlYWRlcnMgPSB7fTtcblxuICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocmVzcG9uc2UuaGVhZGVycykpIHtcbiAgICAgICAgaGVhZGVyc1trZXldID0gcmVzcG9uc2UuaGVhZGVyc1trZXldO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgR3JhcGhxbFJlc3BvbnNlRXJyb3IocmVxdWVzdE9wdGlvbnMsIGhlYWRlcnMsIHJlc3BvbnNlLmRhdGEpO1xuICAgIH1cblxuICAgIHJldHVybiByZXNwb25zZS5kYXRhLmRhdGE7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB3aXRoRGVmYXVsdHMocmVxdWVzdCQxLCBuZXdEZWZhdWx0cykge1xuICBjb25zdCBuZXdSZXF1ZXN0ID0gcmVxdWVzdCQxLmRlZmF1bHRzKG5ld0RlZmF1bHRzKTtcblxuICBjb25zdCBuZXdBcGkgPSAocXVlcnksIG9wdGlvbnMpID0+IHtcbiAgICByZXR1cm4gZ3JhcGhxbChuZXdSZXF1ZXN0LCBxdWVyeSwgb3B0aW9ucyk7XG4gIH07XG5cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24obmV3QXBpLCB7XG4gICAgZGVmYXVsdHM6IHdpdGhEZWZhdWx0cy5iaW5kKG51bGwsIG5ld1JlcXVlc3QpLFxuICAgIGVuZHBvaW50OiByZXF1ZXN0LnJlcXVlc3QuZW5kcG9pbnRcbiAgfSk7XG59XG5cbmNvbnN0IGdyYXBocWwkMSA9IHdpdGhEZWZhdWx0cyhyZXF1ZXN0LnJlcXVlc3QsIHtcbiAgaGVhZGVyczoge1xuICAgIFwidXNlci1hZ2VudFwiOiBgb2N0b2tpdC1ncmFwaHFsLmpzLyR7VkVSU0lPTn0gJHt1bml2ZXJzYWxVc2VyQWdlbnQuZ2V0VXNlckFnZW50KCl9YFxuICB9LFxuICBtZXRob2Q6IFwiUE9TVFwiLFxuICB1cmw6IFwiL2dyYXBocWxcIlxufSk7XG5mdW5jdGlvbiB3aXRoQ3VzdG9tUmVxdWVzdChjdXN0b21SZXF1ZXN0KSB7XG4gIHJldHVybiB3aXRoRGVmYXVsdHMoY3VzdG9tUmVxdWVzdCwge1xuICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgdXJsOiBcIi9ncmFwaHFsXCJcbiAgfSk7XG59XG5cbmV4cG9ydHMuR3JhcGhxbFJlc3BvbnNlRXJyb3IgPSBHcmFwaHFsUmVzcG9uc2VFcnJvcjtcbmV4cG9ydHMuZ3JhcGhxbCA9IGdyYXBocWwkMTtcbmV4cG9ydHMud2l0aEN1c3RvbVJlcXVlc3QgPSB3aXRoQ3VzdG9tUmVxdWVzdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmNvbnN0IFJFR0VYX0lTX0lOU1RBTExBVElPTl9MRUdBQ1kgPSAvXnYxXFwuLztcbmNvbnN0IFJFR0VYX0lTX0lOU1RBTExBVElPTiA9IC9eZ2hzXy87XG5jb25zdCBSRUdFWF9JU19VU0VSX1RPX1NFUlZFUiA9IC9eZ2h1Xy87XG5hc3luYyBmdW5jdGlvbiBhdXRoKHRva2VuKSB7XG4gIGNvbnN0IGlzQXBwID0gdG9rZW4uc3BsaXQoL1xcLi8pLmxlbmd0aCA9PT0gMztcbiAgY29uc3QgaXNJbnN0YWxsYXRpb24gPSBSRUdFWF9JU19JTlNUQUxMQVRJT05fTEVHQUNZLnRlc3QodG9rZW4pIHx8IFJFR0VYX0lTX0lOU1RBTExBVElPTi50ZXN0KHRva2VuKTtcbiAgY29uc3QgaXNVc2VyVG9TZXJ2ZXIgPSBSRUdFWF9JU19VU0VSX1RPX1NFUlZFUi50ZXN0KHRva2VuKTtcbiAgY29uc3QgdG9rZW5UeXBlID0gaXNBcHAgPyBcImFwcFwiIDogaXNJbnN0YWxsYXRpb24gPyBcImluc3RhbGxhdGlvblwiIDogaXNVc2VyVG9TZXJ2ZXIgPyBcInVzZXItdG8tc2VydmVyXCIgOiBcIm9hdXRoXCI7XG4gIHJldHVybiB7XG4gICAgdHlwZTogXCJ0b2tlblwiLFxuICAgIHRva2VuOiB0b2tlbixcbiAgICB0b2tlblR5cGVcbiAgfTtcbn1cblxuLyoqXG4gKiBQcmVmaXggdG9rZW4gZm9yIHVzYWdlIGluIHRoZSBBdXRob3JpemF0aW9uIGhlYWRlclxuICpcbiAqIEBwYXJhbSB0b2tlbiBPQXV0aCB0b2tlbiBvciBKU09OIFdlYiBUb2tlblxuICovXG5mdW5jdGlvbiB3aXRoQXV0aG9yaXphdGlvblByZWZpeCh0b2tlbikge1xuICBpZiAodG9rZW4uc3BsaXQoL1xcLi8pLmxlbmd0aCA9PT0gMykge1xuICAgIHJldHVybiBgYmVhcmVyICR7dG9rZW59YDtcbiAgfVxuXG4gIHJldHVybiBgdG9rZW4gJHt0b2tlbn1gO1xufVxuXG5hc3luYyBmdW5jdGlvbiBob29rKHRva2VuLCByZXF1ZXN0LCByb3V0ZSwgcGFyYW1ldGVycykge1xuICBjb25zdCBlbmRwb2ludCA9IHJlcXVlc3QuZW5kcG9pbnQubWVyZ2Uocm91dGUsIHBhcmFtZXRlcnMpO1xuICBlbmRwb2ludC5oZWFkZXJzLmF1dGhvcml6YXRpb24gPSB3aXRoQXV0aG9yaXphdGlvblByZWZpeCh0b2tlbik7XG4gIHJldHVybiByZXF1ZXN0KGVuZHBvaW50KTtcbn1cblxuY29uc3QgY3JlYXRlVG9rZW5BdXRoID0gZnVuY3Rpb24gY3JlYXRlVG9rZW5BdXRoKHRva2VuKSB7XG4gIGlmICghdG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJbQG9jdG9raXQvYXV0aC10b2tlbl0gTm8gdG9rZW4gcGFzc2VkIHRvIGNyZWF0ZVRva2VuQXV0aFwiKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdG9rZW4gIT09IFwic3RyaW5nXCIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJbQG9jdG9raXQvYXV0aC10b2tlbl0gVG9rZW4gcGFzc2VkIHRvIGNyZWF0ZVRva2VuQXV0aCBpcyBub3QgYSBzdHJpbmdcIik7XG4gIH1cblxuICB0b2tlbiA9IHRva2VuLnJlcGxhY2UoL14odG9rZW58YmVhcmVyKSArL2ksIFwiXCIpO1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihhdXRoLmJpbmQobnVsbCwgdG9rZW4pLCB7XG4gICAgaG9vazogaG9vay5iaW5kKG51bGwsIHRva2VuKVxuICB9KTtcbn07XG5cbmV4cG9ydHMuY3JlYXRlVG9rZW5BdXRoID0gY3JlYXRlVG9rZW5BdXRoO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxudmFyIHVuaXZlcnNhbFVzZXJBZ2VudCA9IHJlcXVpcmUoJ3VuaXZlcnNhbC11c2VyLWFnZW50Jyk7XG52YXIgYmVmb3JlQWZ0ZXJIb29rID0gcmVxdWlyZSgnYmVmb3JlLWFmdGVyLWhvb2snKTtcbnZhciByZXF1ZXN0ID0gcmVxdWlyZSgnQG9jdG9raXQvcmVxdWVzdCcpO1xudmFyIGdyYXBocWwgPSByZXF1aXJlKCdAb2N0b2tpdC9ncmFwaHFsJyk7XG52YXIgYXV0aFRva2VuID0gcmVxdWlyZSgnQG9jdG9raXQvYXV0aC10b2tlbicpO1xuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7XG4gIGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9O1xuICB2YXIgdGFyZ2V0ID0ge307XG4gIHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTtcbiAgdmFyIGtleSwgaTtcblxuICBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGtleSA9IHNvdXJjZUtleXNbaV07XG4gICAgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTtcbiAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHtcbiAgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307XG5cbiAgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpO1xuXG4gIHZhciBrZXksIGk7XG5cbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldO1xuICAgICAgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTtcbiAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7XG4gICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbmNvbnN0IFZFUlNJT04gPSBcIjMuNi4wXCI7XG5cbmNvbnN0IF9leGNsdWRlZCA9IFtcImF1dGhTdHJhdGVneVwiXTtcbmNsYXNzIE9jdG9raXQge1xuICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCBob29rID0gbmV3IGJlZm9yZUFmdGVySG9vay5Db2xsZWN0aW9uKCk7XG4gICAgY29uc3QgcmVxdWVzdERlZmF1bHRzID0ge1xuICAgICAgYmFzZVVybDogcmVxdWVzdC5yZXF1ZXN0LmVuZHBvaW50LkRFRkFVTFRTLmJhc2VVcmwsXG4gICAgICBoZWFkZXJzOiB7fSxcbiAgICAgIHJlcXVlc3Q6IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMucmVxdWVzdCwge1xuICAgICAgICAvLyBAdHMtaWdub3JlIGludGVybmFsIHVzYWdlIG9ubHksIG5vIG5lZWQgdG8gdHlwZVxuICAgICAgICBob29rOiBob29rLmJpbmQobnVsbCwgXCJyZXF1ZXN0XCIpXG4gICAgICB9KSxcbiAgICAgIG1lZGlhVHlwZToge1xuICAgICAgICBwcmV2aWV3czogW10sXG4gICAgICAgIGZvcm1hdDogXCJcIlxuICAgICAgfVxuICAgIH07IC8vIHByZXBlbmQgZGVmYXVsdCB1c2VyIGFnZW50IHdpdGggYG9wdGlvbnMudXNlckFnZW50YCBpZiBzZXRcblxuICAgIHJlcXVlc3REZWZhdWx0cy5oZWFkZXJzW1widXNlci1hZ2VudFwiXSA9IFtvcHRpb25zLnVzZXJBZ2VudCwgYG9jdG9raXQtY29yZS5qcy8ke1ZFUlNJT059ICR7dW5pdmVyc2FsVXNlckFnZW50LmdldFVzZXJBZ2VudCgpfWBdLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKTtcblxuICAgIGlmIChvcHRpb25zLmJhc2VVcmwpIHtcbiAgICAgIHJlcXVlc3REZWZhdWx0cy5iYXNlVXJsID0gb3B0aW9ucy5iYXNlVXJsO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnByZXZpZXdzKSB7XG4gICAgICByZXF1ZXN0RGVmYXVsdHMubWVkaWFUeXBlLnByZXZpZXdzID0gb3B0aW9ucy5wcmV2aWV3cztcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy50aW1lWm9uZSkge1xuICAgICAgcmVxdWVzdERlZmF1bHRzLmhlYWRlcnNbXCJ0aW1lLXpvbmVcIl0gPSBvcHRpb25zLnRpbWVab25lO1xuICAgIH1cblxuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3QucmVxdWVzdC5kZWZhdWx0cyhyZXF1ZXN0RGVmYXVsdHMpO1xuICAgIHRoaXMuZ3JhcGhxbCA9IGdyYXBocWwud2l0aEN1c3RvbVJlcXVlc3QodGhpcy5yZXF1ZXN0KS5kZWZhdWx0cyhyZXF1ZXN0RGVmYXVsdHMpO1xuICAgIHRoaXMubG9nID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICBkZWJ1ZzogKCkgPT4ge30sXG4gICAgICBpbmZvOiAoKSA9PiB7fSxcbiAgICAgIHdhcm46IGNvbnNvbGUud2Fybi5iaW5kKGNvbnNvbGUpLFxuICAgICAgZXJyb3I6IGNvbnNvbGUuZXJyb3IuYmluZChjb25zb2xlKVxuICAgIH0sIG9wdGlvbnMubG9nKTtcbiAgICB0aGlzLmhvb2sgPSBob29rOyAvLyAoMSkgSWYgbmVpdGhlciBgb3B0aW9ucy5hdXRoU3RyYXRlZ3lgIG5vciBgb3B0aW9ucy5hdXRoYCBhcmUgc2V0LCB0aGUgYG9jdG9raXRgIGluc3RhbmNlXG4gICAgLy8gICAgIGlzIHVuYXV0aGVudGljYXRlZC4gVGhlIGB0aGlzLmF1dGgoKWAgbWV0aG9kIGlzIGEgbm8tb3AgYW5kIG5vIHJlcXVlc3QgaG9vayBpcyByZWdpc3RlcmVkLlxuICAgIC8vICgyKSBJZiBvbmx5IGBvcHRpb25zLmF1dGhgIGlzIHNldCwgdXNlIHRoZSBkZWZhdWx0IHRva2VuIGF1dGhlbnRpY2F0aW9uIHN0cmF0ZWd5LlxuICAgIC8vICgzKSBJZiBgb3B0aW9ucy5hdXRoU3RyYXRlZ3lgIGlzIHNldCB0aGVuIHVzZSBpdCBhbmQgcGFzcyBpbiBgb3B0aW9ucy5hdXRoYC4gQWx3YXlzIHBhc3Mgb3duIHJlcXVlc3QgYXMgbWFueSBzdHJhdGVnaWVzIGFjY2VwdCBhIGN1c3RvbSByZXF1ZXN0IGluc3RhbmNlLlxuICAgIC8vIFRPRE86IHR5cGUgYG9wdGlvbnMuYXV0aGAgYmFzZWQgb24gYG9wdGlvbnMuYXV0aFN0cmF0ZWd5YC5cblxuICAgIGlmICghb3B0aW9ucy5hdXRoU3RyYXRlZ3kpIHtcbiAgICAgIGlmICghb3B0aW9ucy5hdXRoKSB7XG4gICAgICAgIC8vICgxKVxuICAgICAgICB0aGlzLmF1dGggPSBhc3luYyAoKSA9PiAoe1xuICAgICAgICAgIHR5cGU6IFwidW5hdXRoZW50aWNhdGVkXCJcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyAoMilcbiAgICAgICAgY29uc3QgYXV0aCA9IGF1dGhUb2tlbi5jcmVhdGVUb2tlbkF1dGgob3B0aW9ucy5hdXRoKTsgLy8gQHRzLWlnbm9yZSAgwq9cXF8o44OEKV8vwq9cblxuICAgICAgICBob29rLndyYXAoXCJyZXF1ZXN0XCIsIGF1dGguaG9vayk7XG4gICAgICAgIHRoaXMuYXV0aCA9IGF1dGg7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgYXV0aFN0cmF0ZWd5XG4gICAgICB9ID0gb3B0aW9ucyxcbiAgICAgICAgICAgIG90aGVyT3B0aW9ucyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhvcHRpb25zLCBfZXhjbHVkZWQpO1xuXG4gICAgICBjb25zdCBhdXRoID0gYXV0aFN0cmF0ZWd5KE9iamVjdC5hc3NpZ24oe1xuICAgICAgICByZXF1ZXN0OiB0aGlzLnJlcXVlc3QsXG4gICAgICAgIGxvZzogdGhpcy5sb2csXG4gICAgICAgIC8vIHdlIHBhc3MgdGhlIGN1cnJlbnQgb2N0b2tpdCBpbnN0YW5jZSBhcyB3ZWxsIGFzIGl0cyBjb25zdHJ1Y3RvciBvcHRpb25zXG4gICAgICAgIC8vIHRvIGFsbG93IGZvciBhdXRoZW50aWNhdGlvbiBzdHJhdGVnaWVzIHRoYXQgcmV0dXJuIGEgbmV3IG9jdG9raXQgaW5zdGFuY2VcbiAgICAgICAgLy8gdGhhdCBzaGFyZXMgdGhlIHNhbWUgaW50ZXJuYWwgc3RhdGUgYXMgdGhlIGN1cnJlbnQgb25lLiBUaGUgb3JpZ2luYWxcbiAgICAgICAgLy8gcmVxdWlyZW1lbnQgZm9yIHRoaXMgd2FzIHRoZSBcImV2ZW50LW9jdG9raXRcIiBhdXRoZW50aWNhdGlvbiBzdHJhdGVneVxuICAgICAgICAvLyBvZiBodHRwczovL2dpdGh1Yi5jb20vcHJvYm90L29jdG9raXQtYXV0aC1wcm9ib3QuXG4gICAgICAgIG9jdG9raXQ6IHRoaXMsXG4gICAgICAgIG9jdG9raXRPcHRpb25zOiBvdGhlck9wdGlvbnNcbiAgICAgIH0sIG9wdGlvbnMuYXV0aCkpOyAvLyBAdHMtaWdub3JlICDCr1xcXyjjg4QpXy/Cr1xuXG4gICAgICBob29rLndyYXAoXCJyZXF1ZXN0XCIsIGF1dGguaG9vayk7XG4gICAgICB0aGlzLmF1dGggPSBhdXRoO1xuICAgIH0gLy8gYXBwbHkgcGx1Z2luc1xuICAgIC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8xNjM0NTE3MlxuXG5cbiAgICBjb25zdCBjbGFzc0NvbnN0cnVjdG9yID0gdGhpcy5jb25zdHJ1Y3RvcjtcbiAgICBjbGFzc0NvbnN0cnVjdG9yLnBsdWdpbnMuZm9yRWFjaChwbHVnaW4gPT4ge1xuICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBwbHVnaW4odGhpcywgb3B0aW9ucykpO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRzKGRlZmF1bHRzKSB7XG4gICAgY29uc3QgT2N0b2tpdFdpdGhEZWZhdWx0cyA9IGNsYXNzIGV4dGVuZHMgdGhpcyB7XG4gICAgICBjb25zdHJ1Y3RvciguLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBhcmdzWzBdIHx8IHt9O1xuXG4gICAgICAgIGlmICh0eXBlb2YgZGVmYXVsdHMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIHN1cGVyKGRlZmF1bHRzKG9wdGlvbnMpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBzdXBlcihPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0cywgb3B0aW9ucywgb3B0aW9ucy51c2VyQWdlbnQgJiYgZGVmYXVsdHMudXNlckFnZW50ID8ge1xuICAgICAgICAgIHVzZXJBZ2VudDogYCR7b3B0aW9ucy51c2VyQWdlbnR9ICR7ZGVmYXVsdHMudXNlckFnZW50fWBcbiAgICAgICAgfSA6IG51bGwpKTtcbiAgICAgIH1cblxuICAgIH07XG4gICAgcmV0dXJuIE9jdG9raXRXaXRoRGVmYXVsdHM7XG4gIH1cbiAgLyoqXG4gICAqIEF0dGFjaCBhIHBsdWdpbiAob3IgbWFueSkgdG8geW91ciBPY3Rva2l0IGluc3RhbmNlLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBjb25zdCBBUEkgPSBPY3Rva2l0LnBsdWdpbihwbHVnaW4xLCBwbHVnaW4yLCBwbHVnaW4zLCAuLi4pXG4gICAqL1xuXG5cbiAgc3RhdGljIHBsdWdpbiguLi5uZXdQbHVnaW5zKSB7XG4gICAgdmFyIF9hO1xuXG4gICAgY29uc3QgY3VycmVudFBsdWdpbnMgPSB0aGlzLnBsdWdpbnM7XG4gICAgY29uc3QgTmV3T2N0b2tpdCA9IChfYSA9IGNsYXNzIGV4dGVuZHMgdGhpcyB7fSwgX2EucGx1Z2lucyA9IGN1cnJlbnRQbHVnaW5zLmNvbmNhdChuZXdQbHVnaW5zLmZpbHRlcihwbHVnaW4gPT4gIWN1cnJlbnRQbHVnaW5zLmluY2x1ZGVzKHBsdWdpbikpKSwgX2EpO1xuICAgIHJldHVybiBOZXdPY3Rva2l0O1xuICB9XG5cbn1cbk9jdG9raXQuVkVSU0lPTiA9IFZFUlNJT047XG5PY3Rva2l0LnBsdWdpbnMgPSBbXTtcblxuZXhwb3J0cy5PY3Rva2l0ID0gT2N0b2tpdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkge1xuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG5cbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTtcblxuICAgIGlmIChlbnVtZXJhYmxlT25seSkge1xuICAgICAgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7XG4gIH1cblxuICByZXR1cm4ga2V5cztcbn1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZDIodGFyZ2V0KSB7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307XG5cbiAgICBpZiAoaSAlIDIpIHtcbiAgICAgIG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gb2JqO1xufVxuXG5jb25zdCBFbmRwb2ludHMgPSB7XG4gIGFjdGlvbnM6IHtcbiAgICBhZGRDdXN0b21MYWJlbHNUb1NlbGZIb3N0ZWRSdW5uZXJGb3JPcmc6IFtcIlBPU1QgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVsc1wiXSxcbiAgICBhZGRDdXN0b21MYWJlbHNUb1NlbGZIb3N0ZWRSdW5uZXJGb3JSZXBvOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCJdLFxuICAgIGFkZFNlbGVjdGVkUmVwb1RvT3JnU2VjcmV0OiBbXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiXSxcbiAgICBhcHByb3ZlV29ya2Zsb3dSdW46IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hcHByb3ZlXCJdLFxuICAgIGNhbmNlbFdvcmtmbG93UnVuOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vY2FuY2VsXCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlRW52aXJvbm1lbnRTZWNyZXQ6IFtcIlBVVCAvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBjcmVhdGVPclVwZGF0ZU9yZ1NlY3JldDogW1wiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlUmVwb1NlY3JldDogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBjcmVhdGVSZWdpc3RyYXRpb25Ub2tlbkZvck9yZzogW1wiUE9TVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMvcmVnaXN0cmF0aW9uLXRva2VuXCJdLFxuICAgIGNyZWF0ZVJlZ2lzdHJhdGlvblRva2VuRm9yUmVwbzogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3JlZ2lzdHJhdGlvbi10b2tlblwiXSxcbiAgICBjcmVhdGVSZW1vdmVUb2tlbkZvck9yZzogW1wiUE9TVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMvcmVtb3ZlLXRva2VuXCJdLFxuICAgIGNyZWF0ZVJlbW92ZVRva2VuRm9yUmVwbzogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3JlbW92ZS10b2tlblwiXSxcbiAgICBjcmVhdGVXb3JrZmxvd0Rpc3BhdGNoOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L2Rpc3BhdGNoZXNcIl0sXG4gICAgZGVsZXRlQWN0aW9uc0NhY2hlQnlJZDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2NhY2hlcy97Y2FjaGVfaWR9XCJdLFxuICAgIGRlbGV0ZUFjdGlvbnNDYWNoZUJ5S2V5OiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvY2FjaGVzez9rZXkscmVmfVwiXSxcbiAgICBkZWxldGVBcnRpZmFjdDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2FydGlmYWN0cy97YXJ0aWZhY3RfaWR9XCJdLFxuICAgIGRlbGV0ZUVudmlyb25tZW50U2VjcmV0OiBbXCJERUxFVEUgL3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH0vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZGVsZXRlT3JnU2VjcmV0OiBbXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZGVsZXRlUmVwb1NlY3JldDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBkZWxldGVTZWxmSG9zdGVkUnVubmVyRnJvbU9yZzogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfVwiXSxcbiAgICBkZWxldGVTZWxmSG9zdGVkUnVubmVyRnJvbVJlcG86IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9XCJdLFxuICAgIGRlbGV0ZVdvcmtmbG93UnVuOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfVwiXSxcbiAgICBkZWxldGVXb3JrZmxvd1J1bkxvZ3M6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2xvZ3NcIl0sXG4gICAgZGlzYWJsZVNlbGVjdGVkUmVwb3NpdG9yeUdpdGh1YkFjdGlvbnNPcmdhbml6YXRpb246IFtcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIl0sXG4gICAgZGlzYWJsZVdvcmtmbG93OiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvd29ya2Zsb3dzL3t3b3JrZmxvd19pZH0vZGlzYWJsZVwiXSxcbiAgICBkb3dubG9hZEFydGlmYWN0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvYXJ0aWZhY3RzL3thcnRpZmFjdF9pZH0ve2FyY2hpdmVfZm9ybWF0fVwiXSxcbiAgICBkb3dubG9hZEpvYkxvZ3NGb3JXb3JrZmxvd1J1bjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2pvYnMve2pvYl9pZH0vbG9nc1wiXSxcbiAgICBkb3dubG9hZFdvcmtmbG93UnVuQXR0ZW1wdExvZ3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2F0dGVtcHRzL3thdHRlbXB0X251bWJlcn0vbG9nc1wiXSxcbiAgICBkb3dubG9hZFdvcmtmbG93UnVuTG9nczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vbG9nc1wiXSxcbiAgICBlbmFibGVTZWxlY3RlZFJlcG9zaXRvcnlHaXRodWJBY3Rpb25zT3JnYW5pemF0aW9uOiBbXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCJdLFxuICAgIGVuYWJsZVdvcmtmbG93OiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvd29ya2Zsb3dzL3t3b3JrZmxvd19pZH0vZW5hYmxlXCJdLFxuICAgIGdldEFjdGlvbnNDYWNoZUxpc3Q6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9jYWNoZXNcIl0sXG4gICAgZ2V0QWN0aW9uc0NhY2hlVXNhZ2U6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9jYWNoZS91c2FnZVwiXSxcbiAgICBnZXRBY3Rpb25zQ2FjaGVVc2FnZUJ5UmVwb0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvY2FjaGUvdXNhZ2UtYnktcmVwb3NpdG9yeVwiXSxcbiAgICBnZXRBY3Rpb25zQ2FjaGVVc2FnZUZvckVudGVycHJpc2U6IFtcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2FjdGlvbnMvY2FjaGUvdXNhZ2VcIl0sXG4gICAgZ2V0QWN0aW9uc0NhY2hlVXNhZ2VGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2NhY2hlL3VzYWdlXCJdLFxuICAgIGdldEFsbG93ZWRBY3Rpb25zT3JnYW5pemF0aW9uOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9zZWxlY3RlZC1hY3Rpb25zXCJdLFxuICAgIGdldEFsbG93ZWRBY3Rpb25zUmVwb3NpdG9yeTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zL3NlbGVjdGVkLWFjdGlvbnNcIl0sXG4gICAgZ2V0QXJ0aWZhY3Q6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9hcnRpZmFjdHMve2FydGlmYWN0X2lkfVwiXSxcbiAgICBnZXRFbnZpcm9ubWVudFB1YmxpY0tleTogW1wiR0VUIC9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vc2VjcmV0cy9wdWJsaWMta2V5XCJdLFxuICAgIGdldEVudmlyb25tZW50U2VjcmV0OiBbXCJHRVQgL3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH0vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZ2V0R2l0aHViQWN0aW9uc0RlZmF1bHRXb3JrZmxvd1Blcm1pc3Npb25zRW50ZXJwcmlzZTogW1wiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vYWN0aW9ucy9wZXJtaXNzaW9ucy93b3JrZmxvd1wiXSxcbiAgICBnZXRHaXRodWJBY3Rpb25zRGVmYXVsdFdvcmtmbG93UGVybWlzc2lvbnNPcmdhbml6YXRpb246IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3dvcmtmbG93XCJdLFxuICAgIGdldEdpdGh1YkFjdGlvbnNEZWZhdWx0V29ya2Zsb3dQZXJtaXNzaW9uc1JlcG9zaXRvcnk6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9ucy93b3JrZmxvd1wiXSxcbiAgICBnZXRHaXRodWJBY3Rpb25zUGVybWlzc2lvbnNPcmdhbml6YXRpb246IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zXCJdLFxuICAgIGdldEdpdGh1YkFjdGlvbnNQZXJtaXNzaW9uc1JlcG9zaXRvcnk6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9uc1wiXSxcbiAgICBnZXRKb2JGb3JXb3JrZmxvd1J1bjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2pvYnMve2pvYl9pZH1cIl0sXG4gICAgZ2V0T3JnUHVibGljS2V5OiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3B1YmxpYy1rZXlcIl0sXG4gICAgZ2V0T3JnU2VjcmV0OiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZ2V0UGVuZGluZ0RlcGxveW1lbnRzRm9yUnVuOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9wZW5kaW5nX2RlcGxveW1lbnRzXCJdLFxuICAgIGdldFJlcG9QZXJtaXNzaW9uczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zXCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJhY3Rpb25zXCIsIFwiZ2V0R2l0aHViQWN0aW9uc1Blcm1pc3Npb25zUmVwb3NpdG9yeVwiXVxuICAgIH1dLFxuICAgIGdldFJlcG9QdWJsaWNLZXk6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9zZWNyZXRzL3B1YmxpYy1rZXlcIl0sXG4gICAgZ2V0UmVwb1NlY3JldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBnZXRSZXZpZXdzRm9yUnVuOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hcHByb3ZhbHNcIl0sXG4gICAgZ2V0U2VsZkhvc3RlZFJ1bm5lckZvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfVwiXSxcbiAgICBnZXRTZWxmSG9zdGVkUnVubmVyRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH1cIl0sXG4gICAgZ2V0V29ya2Zsb3c6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3Mve3dvcmtmbG93X2lkfVwiXSxcbiAgICBnZXRXb3JrZmxvd0FjY2Vzc1RvUmVwb3NpdG9yeTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zL2FjY2Vzc1wiXSxcbiAgICBnZXRXb3JrZmxvd1J1bjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH1cIl0sXG4gICAgZ2V0V29ya2Zsb3dSdW5BdHRlbXB0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hdHRlbXB0cy97YXR0ZW1wdF9udW1iZXJ9XCJdLFxuICAgIGdldFdvcmtmbG93UnVuVXNhZ2U6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L3RpbWluZ1wiXSxcbiAgICBnZXRXb3JrZmxvd1VzYWdlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvd29ya2Zsb3dzL3t3b3JrZmxvd19pZH0vdGltaW5nXCJdLFxuICAgIGxpc3RBcnRpZmFjdHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvYXJ0aWZhY3RzXCJdLFxuICAgIGxpc3RFbnZpcm9ubWVudFNlY3JldHM6IFtcIkdFVCAvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHNcIl0sXG4gICAgbGlzdEpvYnNGb3JXb3JrZmxvd1J1bjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vam9ic1wiXSxcbiAgICBsaXN0Sm9ic0ZvcldvcmtmbG93UnVuQXR0ZW1wdDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXR0ZW1wdHMve2F0dGVtcHRfbnVtYmVyfS9qb2JzXCJdLFxuICAgIGxpc3RMYWJlbHNGb3JTZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVsc1wiXSxcbiAgICBsaXN0TGFiZWxzRm9yU2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVsc1wiXSxcbiAgICBsaXN0T3JnU2VjcmV0czogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0c1wiXSxcbiAgICBsaXN0UmVwb1NlY3JldHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9zZWNyZXRzXCJdLFxuICAgIGxpc3RSZXBvV29ya2Zsb3dzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvd29ya2Zsb3dzXCJdLFxuICAgIGxpc3RSdW5uZXJBcHBsaWNhdGlvbnNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMvZG93bmxvYWRzXCJdLFxuICAgIGxpc3RSdW5uZXJBcHBsaWNhdGlvbnNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy9kb3dubG9hZHNcIl0sXG4gICAgbGlzdFNlbGVjdGVkUmVwb3NGb3JPcmdTZWNyZXQ6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIl0sXG4gICAgbGlzdFNlbGVjdGVkUmVwb3NpdG9yaWVzRW5hYmxlZEdpdGh1YkFjdGlvbnNPcmdhbml6YXRpb246IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3JlcG9zaXRvcmllc1wiXSxcbiAgICBsaXN0U2VsZkhvc3RlZFJ1bm5lcnNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnNcIl0sXG4gICAgbGlzdFNlbGZIb3N0ZWRSdW5uZXJzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnNcIl0sXG4gICAgbGlzdFdvcmtmbG93UnVuQXJ0aWZhY3RzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hcnRpZmFjdHNcIl0sXG4gICAgbGlzdFdvcmtmbG93UnVuczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L3J1bnNcIl0sXG4gICAgbGlzdFdvcmtmbG93UnVuc0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zXCJdLFxuICAgIHJlUnVuSm9iRm9yV29ya2Zsb3dSdW46IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvam9icy97am9iX2lkfS9yZXJ1blwiXSxcbiAgICByZVJ1bldvcmtmbG93OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vcmVydW5cIl0sXG4gICAgcmVSdW5Xb3JrZmxvd0ZhaWxlZEpvYnM6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9yZXJ1bi1mYWlsZWQtam9ic1wiXSxcbiAgICByZW1vdmVBbGxDdXN0b21MYWJlbHNGcm9tU2VsZkhvc3RlZFJ1bm5lckZvck9yZzogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIl0sXG4gICAgcmVtb3ZlQWxsQ3VzdG9tTGFiZWxzRnJvbVNlbGZIb3N0ZWRSdW5uZXJGb3JSZXBvOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIl0sXG4gICAgcmVtb3ZlQ3VzdG9tTGFiZWxGcm9tU2VsZkhvc3RlZFJ1bm5lckZvck9yZzogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHMve25hbWV9XCJdLFxuICAgIHJlbW92ZUN1c3RvbUxhYmVsRnJvbVNlbGZIb3N0ZWRSdW5uZXJGb3JSZXBvOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHMve25hbWV9XCJdLFxuICAgIHJlbW92ZVNlbGVjdGVkUmVwb0Zyb21PcmdTZWNyZXQ6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCJdLFxuICAgIHJldmlld1BlbmRpbmdEZXBsb3ltZW50c0ZvclJ1bjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L3BlbmRpbmdfZGVwbG95bWVudHNcIl0sXG4gICAgc2V0QWxsb3dlZEFjdGlvbnNPcmdhbml6YXRpb246IFtcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3NlbGVjdGVkLWFjdGlvbnNcIl0sXG4gICAgc2V0QWxsb3dlZEFjdGlvbnNSZXBvc2l0b3J5OiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnMvc2VsZWN0ZWQtYWN0aW9uc1wiXSxcbiAgICBzZXRDdXN0b21MYWJlbHNGb3JTZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVsc1wiXSxcbiAgICBzZXRDdXN0b21MYWJlbHNGb3JTZWxmSG9zdGVkUnVubmVyRm9yUmVwbzogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCJdLFxuICAgIHNldEdpdGh1YkFjdGlvbnNEZWZhdWx0V29ya2Zsb3dQZXJtaXNzaW9uc0VudGVycHJpc2U6IFtcIlBVVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2FjdGlvbnMvcGVybWlzc2lvbnMvd29ya2Zsb3dcIl0sXG4gICAgc2V0R2l0aHViQWN0aW9uc0RlZmF1bHRXb3JrZmxvd1Blcm1pc3Npb25zT3JnYW5pemF0aW9uOiBbXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy93b3JrZmxvd1wiXSxcbiAgICBzZXRHaXRodWJBY3Rpb25zRGVmYXVsdFdvcmtmbG93UGVybWlzc2lvbnNSZXBvc2l0b3J5OiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnMvd29ya2Zsb3dcIl0sXG4gICAgc2V0R2l0aHViQWN0aW9uc1Blcm1pc3Npb25zT3JnYW5pemF0aW9uOiBbXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9uc1wiXSxcbiAgICBzZXRHaXRodWJBY3Rpb25zUGVybWlzc2lvbnNSZXBvc2l0b3J5OiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnNcIl0sXG4gICAgc2V0U2VsZWN0ZWRSZXBvc0Zvck9yZ1NlY3JldDogW1wiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiXSxcbiAgICBzZXRTZWxlY3RlZFJlcG9zaXRvcmllc0VuYWJsZWRHaXRodWJBY3Rpb25zT3JnYW5pemF0aW9uOiBbXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9yZXBvc2l0b3JpZXNcIl0sXG4gICAgc2V0V29ya2Zsb3dBY2Nlc3NUb1JlcG9zaXRvcnk6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9ucy9hY2Nlc3NcIl1cbiAgfSxcbiAgYWN0aXZpdHk6IHtcbiAgICBjaGVja1JlcG9Jc1N0YXJyZWRCeUF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvc3RhcnJlZC97b3duZXJ9L3tyZXBvfVwiXSxcbiAgICBkZWxldGVSZXBvU3Vic2NyaXB0aW9uOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmlwdGlvblwiXSxcbiAgICBkZWxldGVUaHJlYWRTdWJzY3JpcHRpb246IFtcIkRFTEVURSAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9L3N1YnNjcmlwdGlvblwiXSxcbiAgICBnZXRGZWVkczogW1wiR0VUIC9mZWVkc1wiXSxcbiAgICBnZXRSZXBvU3Vic2NyaXB0aW9uOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmlwdGlvblwiXSxcbiAgICBnZXRUaHJlYWQ6IFtcIkdFVCAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9XCJdLFxuICAgIGdldFRocmVhZFN1YnNjcmlwdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL25vdGlmaWNhdGlvbnMvdGhyZWFkcy97dGhyZWFkX2lkfS9zdWJzY3JpcHRpb25cIl0sXG4gICAgbGlzdEV2ZW50c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzXCJdLFxuICAgIGxpc3ROb3RpZmljYXRpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvbm90aWZpY2F0aW9uc1wiXSxcbiAgICBsaXN0T3JnRXZlbnRzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ldmVudHMvb3Jncy97b3JnfVwiXSxcbiAgICBsaXN0UHVibGljRXZlbnRzOiBbXCJHRVQgL2V2ZW50c1wiXSxcbiAgICBsaXN0UHVibGljRXZlbnRzRm9yUmVwb05ldHdvcms6IFtcIkdFVCAvbmV0d29ya3Mve293bmVyfS97cmVwb30vZXZlbnRzXCJdLFxuICAgIGxpc3RQdWJsaWNFdmVudHNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzL3B1YmxpY1wiXSxcbiAgICBsaXN0UHVibGljT3JnRXZlbnRzOiBbXCJHRVQgL29yZ3Mve29yZ30vZXZlbnRzXCJdLFxuICAgIGxpc3RSZWNlaXZlZEV2ZW50c0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9yZWNlaXZlZF9ldmVudHNcIl0sXG4gICAgbGlzdFJlY2VpdmVkUHVibGljRXZlbnRzRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3JlY2VpdmVkX2V2ZW50cy9wdWJsaWNcIl0sXG4gICAgbGlzdFJlcG9FdmVudHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZXZlbnRzXCJdLFxuICAgIGxpc3RSZXBvTm90aWZpY2F0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L25vdGlmaWNhdGlvbnNcIl0sXG4gICAgbGlzdFJlcG9zU3RhcnJlZEJ5QXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9zdGFycmVkXCJdLFxuICAgIGxpc3RSZXBvc1N0YXJyZWRCeVVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zdGFycmVkXCJdLFxuICAgIGxpc3RSZXBvc1dhdGNoZWRCeVVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zdWJzY3JpcHRpb25zXCJdLFxuICAgIGxpc3RTdGFyZ2F6ZXJzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGFyZ2F6ZXJzXCJdLFxuICAgIGxpc3RXYXRjaGVkUmVwb3NGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3N1YnNjcmlwdGlvbnNcIl0sXG4gICAgbGlzdFdhdGNoZXJzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdWJzY3JpYmVyc1wiXSxcbiAgICBtYXJrTm90aWZpY2F0aW9uc0FzUmVhZDogW1wiUFVUIC9ub3RpZmljYXRpb25zXCJdLFxuICAgIG1hcmtSZXBvTm90aWZpY2F0aW9uc0FzUmVhZDogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ub3RpZmljYXRpb25zXCJdLFxuICAgIG1hcmtUaHJlYWRBc1JlYWQ6IFtcIlBBVENIIC9ub3RpZmljYXRpb25zL3RocmVhZHMve3RocmVhZF9pZH1cIl0sXG4gICAgc2V0UmVwb1N1YnNjcmlwdGlvbjogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdWJzY3JpcHRpb25cIl0sXG4gICAgc2V0VGhyZWFkU3Vic2NyaXB0aW9uOiBbXCJQVVQgL25vdGlmaWNhdGlvbnMvdGhyZWFkcy97dGhyZWFkX2lkfS9zdWJzY3JpcHRpb25cIl0sXG4gICAgc3RhclJlcG9Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUFVUIC91c2VyL3N0YXJyZWQve293bmVyfS97cmVwb31cIl0sXG4gICAgdW5zdGFyUmVwb0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvc3RhcnJlZC97b3duZXJ9L3tyZXBvfVwiXVxuICB9LFxuICBhcHBzOiB7XG4gICAgYWRkUmVwb1RvSW5zdGFsbGF0aW9uOiBbXCJQVVQgL3VzZXIvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJhcHBzXCIsIFwiYWRkUmVwb1RvSW5zdGFsbGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXJcIl1cbiAgICB9XSxcbiAgICBhZGRSZXBvVG9JbnN0YWxsYXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUFVUIC91c2VyL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiXSxcbiAgICBjaGVja1Rva2VuOiBbXCJQT1NUIC9hcHBsaWNhdGlvbnMve2NsaWVudF9pZH0vdG9rZW5cIl0sXG4gICAgY3JlYXRlRnJvbU1hbmlmZXN0OiBbXCJQT1NUIC9hcHAtbWFuaWZlc3RzL3tjb2RlfS9jb252ZXJzaW9uc1wiXSxcbiAgICBjcmVhdGVJbnN0YWxsYXRpb25BY2Nlc3NUb2tlbjogW1wiUE9TVCAvYXBwL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vYWNjZXNzX3Rva2Vuc1wiXSxcbiAgICBkZWxldGVBdXRob3JpemF0aW9uOiBbXCJERUxFVEUgL2FwcGxpY2F0aW9ucy97Y2xpZW50X2lkfS9ncmFudFwiXSxcbiAgICBkZWxldGVJbnN0YWxsYXRpb246IFtcIkRFTEVURSAvYXBwL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH1cIl0sXG4gICAgZGVsZXRlVG9rZW46IFtcIkRFTEVURSAvYXBwbGljYXRpb25zL3tjbGllbnRfaWR9L3Rva2VuXCJdLFxuICAgIGdldEF1dGhlbnRpY2F0ZWQ6IFtcIkdFVCAvYXBwXCJdLFxuICAgIGdldEJ5U2x1ZzogW1wiR0VUIC9hcHBzL3thcHBfc2x1Z31cIl0sXG4gICAgZ2V0SW5zdGFsbGF0aW9uOiBbXCJHRVQgL2FwcC9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9XCJdLFxuICAgIGdldE9yZ0luc3RhbGxhdGlvbjogW1wiR0VUIC9vcmdzL3tvcmd9L2luc3RhbGxhdGlvblwiXSxcbiAgICBnZXRSZXBvSW5zdGFsbGF0aW9uOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2luc3RhbGxhdGlvblwiXSxcbiAgICBnZXRTdWJzY3JpcHRpb25QbGFuRm9yQWNjb3VudDogW1wiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL2FjY291bnRzL3thY2NvdW50X2lkfVwiXSxcbiAgICBnZXRTdWJzY3JpcHRpb25QbGFuRm9yQWNjb3VudFN0dWJiZWQ6IFtcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9zdHViYmVkL2FjY291bnRzL3thY2NvdW50X2lkfVwiXSxcbiAgICBnZXRVc2VySW5zdGFsbGF0aW9uOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vaW5zdGFsbGF0aW9uXCJdLFxuICAgIGdldFdlYmhvb2tDb25maWdGb3JBcHA6IFtcIkdFVCAvYXBwL2hvb2svY29uZmlnXCJdLFxuICAgIGdldFdlYmhvb2tEZWxpdmVyeTogW1wiR0VUIC9hcHAvaG9vay9kZWxpdmVyaWVzL3tkZWxpdmVyeV9pZH1cIl0sXG4gICAgbGlzdEFjY291bnRzRm9yUGxhbjogW1wiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3BsYW5zL3twbGFuX2lkfS9hY2NvdW50c1wiXSxcbiAgICBsaXN0QWNjb3VudHNGb3JQbGFuU3R1YmJlZDogW1wiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3N0dWJiZWQvcGxhbnMve3BsYW5faWR9L2FjY291bnRzXCJdLFxuICAgIGxpc3RJbnN0YWxsYXRpb25SZXBvc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIl0sXG4gICAgbGlzdEluc3RhbGxhdGlvbnM6IFtcIkdFVCAvYXBwL2luc3RhbGxhdGlvbnNcIl0sXG4gICAgbGlzdEluc3RhbGxhdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2luc3RhbGxhdGlvbnNcIl0sXG4gICAgbGlzdFBsYW5zOiBbXCJHRVQgL21hcmtldHBsYWNlX2xpc3RpbmcvcGxhbnNcIl0sXG4gICAgbGlzdFBsYW5zU3R1YmJlZDogW1wiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3N0dWJiZWQvcGxhbnNcIl0sXG4gICAgbGlzdFJlcG9zQWNjZXNzaWJsZVRvSW5zdGFsbGF0aW9uOiBbXCJHRVQgL2luc3RhbGxhdGlvbi9yZXBvc2l0b3JpZXNcIl0sXG4gICAgbGlzdFN1YnNjcmlwdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL21hcmtldHBsYWNlX3B1cmNoYXNlc1wiXSxcbiAgICBsaXN0U3Vic2NyaXB0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyU3R1YmJlZDogW1wiR0VUIC91c2VyL21hcmtldHBsYWNlX3B1cmNoYXNlcy9zdHViYmVkXCJdLFxuICAgIGxpc3RXZWJob29rRGVsaXZlcmllczogW1wiR0VUIC9hcHAvaG9vay9kZWxpdmVyaWVzXCJdLFxuICAgIHJlZGVsaXZlcldlYmhvb2tEZWxpdmVyeTogW1wiUE9TVCAvYXBwL2hvb2svZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9L2F0dGVtcHRzXCJdLFxuICAgIHJlbW92ZVJlcG9Gcm9tSW5zdGFsbGF0aW9uOiBbXCJERUxFVEUgL3VzZXIvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJhcHBzXCIsIFwicmVtb3ZlUmVwb0Zyb21JbnN0YWxsYXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlclwiXVxuICAgIH1dLFxuICAgIHJlbW92ZVJlcG9Gcm9tSW5zdGFsbGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIl0sXG4gICAgcmVzZXRUb2tlbjogW1wiUEFUQ0ggL2FwcGxpY2F0aW9ucy97Y2xpZW50X2lkfS90b2tlblwiXSxcbiAgICByZXZva2VJbnN0YWxsYXRpb25BY2Nlc3NUb2tlbjogW1wiREVMRVRFIC9pbnN0YWxsYXRpb24vdG9rZW5cIl0sXG4gICAgc2NvcGVUb2tlbjogW1wiUE9TVCAvYXBwbGljYXRpb25zL3tjbGllbnRfaWR9L3Rva2VuL3Njb3BlZFwiXSxcbiAgICBzdXNwZW5kSW5zdGFsbGF0aW9uOiBbXCJQVVQgL2FwcC9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3N1c3BlbmRlZFwiXSxcbiAgICB1bnN1c3BlbmRJbnN0YWxsYXRpb246IFtcIkRFTEVURSAvYXBwL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vc3VzcGVuZGVkXCJdLFxuICAgIHVwZGF0ZVdlYmhvb2tDb25maWdGb3JBcHA6IFtcIlBBVENIIC9hcHAvaG9vay9jb25maWdcIl1cbiAgfSxcbiAgYmlsbGluZzoge1xuICAgIGdldEdpdGh1YkFjdGlvbnNCaWxsaW5nT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vc2V0dGluZ3MvYmlsbGluZy9hY3Rpb25zXCJdLFxuICAgIGdldEdpdGh1YkFjdGlvbnNCaWxsaW5nVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NldHRpbmdzL2JpbGxpbmcvYWN0aW9uc1wiXSxcbiAgICBnZXRHaXRodWJBZHZhbmNlZFNlY3VyaXR5QmlsbGluZ0doZTogW1wiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vc2V0dGluZ3MvYmlsbGluZy9hZHZhbmNlZC1zZWN1cml0eVwiXSxcbiAgICBnZXRHaXRodWJBZHZhbmNlZFNlY3VyaXR5QmlsbGluZ09yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL2JpbGxpbmcvYWR2YW5jZWQtc2VjdXJpdHlcIl0sXG4gICAgZ2V0R2l0aHViUGFja2FnZXNCaWxsaW5nT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vc2V0dGluZ3MvYmlsbGluZy9wYWNrYWdlc1wiXSxcbiAgICBnZXRHaXRodWJQYWNrYWdlc0JpbGxpbmdVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc2V0dGluZ3MvYmlsbGluZy9wYWNrYWdlc1wiXSxcbiAgICBnZXRTaGFyZWRTdG9yYWdlQmlsbGluZ09yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL2JpbGxpbmcvc2hhcmVkLXN0b3JhZ2VcIl0sXG4gICAgZ2V0U2hhcmVkU3RvcmFnZUJpbGxpbmdVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc2V0dGluZ3MvYmlsbGluZy9zaGFyZWQtc3RvcmFnZVwiXVxuICB9LFxuICBjaGVja3M6IHtcbiAgICBjcmVhdGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXJ1bnNcIl0sXG4gICAgY3JlYXRlU3VpdGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXN1aXRlc1wiXSxcbiAgICBnZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stcnVucy97Y2hlY2tfcnVuX2lkfVwiXSxcbiAgICBnZXRTdWl0ZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1zdWl0ZXMve2NoZWNrX3N1aXRlX2lkfVwiXSxcbiAgICBsaXN0QW5ub3RhdGlvbnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stcnVucy97Y2hlY2tfcnVuX2lkfS9hbm5vdGF0aW9uc1wiXSxcbiAgICBsaXN0Rm9yUmVmOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vY2hlY2stcnVuc1wiXSxcbiAgICBsaXN0Rm9yU3VpdGU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stc3VpdGVzL3tjaGVja19zdWl0ZV9pZH0vY2hlY2stcnVuc1wiXSxcbiAgICBsaXN0U3VpdGVzRm9yUmVmOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vY2hlY2stc3VpdGVzXCJdLFxuICAgIHJlcmVxdWVzdFJ1bjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stcnVucy97Y2hlY2tfcnVuX2lkfS9yZXJlcXVlc3RcIl0sXG4gICAgcmVyZXF1ZXN0U3VpdGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXN1aXRlcy97Y2hlY2tfc3VpdGVfaWR9L3JlcmVxdWVzdFwiXSxcbiAgICBzZXRTdWl0ZXNQcmVmZXJlbmNlczogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXN1aXRlcy9wcmVmZXJlbmNlc1wiXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1ydW5zL3tjaGVja19ydW5faWR9XCJdXG4gIH0sXG4gIGNvZGVTY2FubmluZzoge1xuICAgIGRlbGV0ZUFuYWx5c2lzOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYW5hbHlzZXMve2FuYWx5c2lzX2lkfXs/Y29uZmlybV9kZWxldGV9XCJdLFxuICAgIGdldEFsZXJ0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9XCIsIHt9LCB7XG4gICAgICByZW5hbWVkUGFyYW1ldGVyczoge1xuICAgICAgICBhbGVydF9pZDogXCJhbGVydF9udW1iZXJcIlxuICAgICAgfVxuICAgIH1dLFxuICAgIGdldEFuYWx5c2lzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYW5hbHlzZXMve2FuYWx5c2lzX2lkfVwiXSxcbiAgICBnZXRTYXJpZjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL3Nhcmlmcy97c2FyaWZfaWR9XCJdLFxuICAgIGxpc3RBbGVydEluc3RhbmNlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9pbnN0YW5jZXNcIl0sXG4gICAgbGlzdEFsZXJ0c0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2NvZGUtc2Nhbm5pbmcvYWxlcnRzXCJdLFxuICAgIGxpc3RBbGVydHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzXCJdLFxuICAgIGxpc3RBbGVydHNJbnN0YW5jZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn0vaW5zdGFuY2VzXCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJjb2RlU2Nhbm5pbmdcIiwgXCJsaXN0QWxlcnRJbnN0YW5jZXNcIl1cbiAgICB9XSxcbiAgICBsaXN0UmVjZW50QW5hbHlzZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbmFseXNlc1wiXSxcbiAgICB1cGRhdGVBbGVydDogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9XCJdLFxuICAgIHVwbG9hZFNhcmlmOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL3Nhcmlmc1wiXVxuICB9LFxuICBjb2Rlc09mQ29uZHVjdDoge1xuICAgIGdldEFsbENvZGVzT2ZDb25kdWN0OiBbXCJHRVQgL2NvZGVzX29mX2NvbmR1Y3RcIl0sXG4gICAgZ2V0Q29uZHVjdENvZGU6IFtcIkdFVCAvY29kZXNfb2ZfY29uZHVjdC97a2V5fVwiXVxuICB9LFxuICBjb2Rlc3BhY2VzOiB7XG4gICAgYWRkUmVwb3NpdG9yeUZvclNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQVVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiXSxcbiAgICBjb2Rlc3BhY2VNYWNoaW5lc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9L21hY2hpbmVzXCJdLFxuICAgIGNyZWF0ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL2NvZGVzcGFjZXNcIl0sXG4gICAgY3JlYXRlT3JVcGRhdGVSZXBvU2VjcmV0OiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlU2VjcmV0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBVVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBjcmVhdGVXaXRoUHJGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb2Rlc3BhY2VzXCJdLFxuICAgIGNyZWF0ZVdpdGhSZXBvRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXNcIl0sXG4gICAgZGVsZXRlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX1cIl0sXG4gICAgZGVsZXRlRnJvbU9yZ2FuaXphdGlvbjogW1wiREVMRVRFIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfS9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX1cIl0sXG4gICAgZGVsZXRlUmVwb1NlY3JldDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBkZWxldGVTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiREVMRVRFIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGV4cG9ydEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfS9leHBvcnRzXCJdLFxuICAgIGdldEV4cG9ydERldGFpbHNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfS9leHBvcnRzL3tleHBvcnRfaWR9XCJdLFxuICAgIGdldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9XCJdLFxuICAgIGdldFB1YmxpY0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3B1YmxpYy1rZXlcIl0sXG4gICAgZ2V0UmVwb1B1YmxpY0tleTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL3NlY3JldHMvcHVibGljLWtleVwiXSxcbiAgICBnZXRSZXBvU2VjcmV0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGdldFNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgbGlzdERldmNvbnRhaW5lcnNJblJlcG9zaXRvcnlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL2RldmNvbnRhaW5lcnNcIl0sXG4gICAgbGlzdEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvY29kZXNwYWNlc1wiXSxcbiAgICBsaXN0SW5Pcmdhbml6YXRpb246IFtcIkdFVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzXCIsIHt9LCB7XG4gICAgICByZW5hbWVkUGFyYW1ldGVyczoge1xuICAgICAgICBvcmdfaWQ6IFwib3JnXCJcbiAgICAgIH1cbiAgICB9XSxcbiAgICBsaXN0SW5SZXBvc2l0b3J5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlc1wiXSxcbiAgICBsaXN0UmVwb1NlY3JldHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9zZWNyZXRzXCJdLFxuICAgIGxpc3RSZXBvc2l0b3JpZXNGb3JTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiXSxcbiAgICBsaXN0U2VjcmV0c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzXCJdLFxuICAgIHJlbW92ZVJlcG9zaXRvcnlGb3JTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiREVMRVRFIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIl0sXG4gICAgcmVwb01hY2hpbmVzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9tYWNoaW5lc1wiXSxcbiAgICBzZXRSZXBvc2l0b3JpZXNGb3JTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUFVUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiXSxcbiAgICBzdGFydEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfS9zdGFydFwiXSxcbiAgICBzdG9wRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9L3N0b3BcIl0sXG4gICAgc3RvcEluT3JnYW5pemF0aW9uOiBbXCJQT1NUIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfS9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vc3RvcFwiXSxcbiAgICB1cGRhdGVGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUEFUQ0ggL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9XCJdXG4gIH0sXG4gIGRlcGVuZGFib3Q6IHtcbiAgICBhZGRTZWxlY3RlZFJlcG9Ub09yZ1NlY3JldDogW1wiUFVUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIl0sXG4gICAgY3JlYXRlT3JVcGRhdGVPcmdTZWNyZXQ6IFtcIlBVVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBjcmVhdGVPclVwZGF0ZVJlcG9TZWNyZXQ6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZGVsZXRlT3JnU2VjcmV0OiBbXCJERUxFVEUgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZGVsZXRlUmVwb1NlY3JldDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBnZXRPcmdQdWJsaWNLZXk6IFtcIkdFVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMvcHVibGljLWtleVwiXSxcbiAgICBnZXRPcmdTZWNyZXQ6IFtcIkdFVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBnZXRSZXBvUHVibGljS2V5OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3Qvc2VjcmV0cy9wdWJsaWMta2V5XCJdLFxuICAgIGdldFJlcG9TZWNyZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgbGlzdE9yZ1NlY3JldHM6IFtcIkdFVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHNcIl0sXG4gICAgbGlzdFJlcG9TZWNyZXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3Qvc2VjcmV0c1wiXSxcbiAgICBsaXN0U2VsZWN0ZWRSZXBvc0Zvck9yZ1NlY3JldDogW1wiR0VUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiXSxcbiAgICByZW1vdmVTZWxlY3RlZFJlcG9Gcm9tT3JnU2VjcmV0OiBbXCJERUxFVEUgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiXSxcbiAgICBzZXRTZWxlY3RlZFJlcG9zRm9yT3JnU2VjcmV0OiBbXCJQVVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCJdXG4gIH0sXG4gIGRlcGVuZGVuY3lHcmFwaDoge1xuICAgIGNyZWF0ZVJlcG9zaXRvcnlTbmFwc2hvdDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kZW5jeS1ncmFwaC9zbmFwc2hvdHNcIl0sXG4gICAgZGlmZlJhbmdlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGVuY3ktZ3JhcGgvY29tcGFyZS97YmFzZWhlYWR9XCJdXG4gIH0sXG4gIGVtb2ppczoge1xuICAgIGdldDogW1wiR0VUIC9lbW9qaXNcIl1cbiAgfSxcbiAgZW50ZXJwcmlzZUFkbWluOiB7XG4gICAgYWRkQ3VzdG9tTGFiZWxzVG9TZWxmSG9zdGVkUnVubmVyRm9yRW50ZXJwcmlzZTogW1wiUE9TVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIl0sXG4gICAgZGlzYWJsZVNlbGVjdGVkT3JnYW5pemF0aW9uR2l0aHViQWN0aW9uc0VudGVycHJpc2U6IFtcIkRFTEVURSAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2FjdGlvbnMvcGVybWlzc2lvbnMvb3JnYW5pemF0aW9ucy97b3JnX2lkfVwiXSxcbiAgICBlbmFibGVTZWxlY3RlZE9yZ2FuaXphdGlvbkdpdGh1YkFjdGlvbnNFbnRlcnByaXNlOiBbXCJQVVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9hY3Rpb25zL3Blcm1pc3Npb25zL29yZ2FuaXphdGlvbnMve29yZ19pZH1cIl0sXG4gICAgZ2V0QWxsb3dlZEFjdGlvbnNFbnRlcnByaXNlOiBbXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9hY3Rpb25zL3Blcm1pc3Npb25zL3NlbGVjdGVkLWFjdGlvbnNcIl0sXG4gICAgZ2V0R2l0aHViQWN0aW9uc1Blcm1pc3Npb25zRW50ZXJwcmlzZTogW1wiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vYWN0aW9ucy9wZXJtaXNzaW9uc1wiXSxcbiAgICBnZXRTZXJ2ZXJTdGF0aXN0aWNzOiBbXCJHRVQgL2VudGVycHJpc2UtaW5zdGFsbGF0aW9uL3tlbnRlcnByaXNlX29yX29yZ30vc2VydmVyLXN0YXRpc3RpY3NcIl0sXG4gICAgbGlzdExhYmVsc0ZvclNlbGZIb3N0ZWRSdW5uZXJGb3JFbnRlcnByaXNlOiBbXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCJdLFxuICAgIGxpc3RTZWxlY3RlZE9yZ2FuaXphdGlvbnNFbmFibGVkR2l0aHViQWN0aW9uc0VudGVycHJpc2U6IFtcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2FjdGlvbnMvcGVybWlzc2lvbnMvb3JnYW5pemF0aW9uc1wiXSxcbiAgICByZW1vdmVBbGxDdXN0b21MYWJlbHNGcm9tU2VsZkhvc3RlZFJ1bm5lckZvckVudGVycHJpc2U6IFtcIkRFTEVURSAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIl0sXG4gICAgcmVtb3ZlQ3VzdG9tTGFiZWxGcm9tU2VsZkhvc3RlZFJ1bm5lckZvckVudGVycHJpc2U6IFtcIkRFTEVURSAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHMve25hbWV9XCJdLFxuICAgIHNldEFsbG93ZWRBY3Rpb25zRW50ZXJwcmlzZTogW1wiUFVUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vYWN0aW9ucy9wZXJtaXNzaW9ucy9zZWxlY3RlZC1hY3Rpb25zXCJdLFxuICAgIHNldEN1c3RvbUxhYmVsc0ZvclNlbGZIb3N0ZWRSdW5uZXJGb3JFbnRlcnByaXNlOiBbXCJQVVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCJdLFxuICAgIHNldEdpdGh1YkFjdGlvbnNQZXJtaXNzaW9uc0VudGVycHJpc2U6IFtcIlBVVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2FjdGlvbnMvcGVybWlzc2lvbnNcIl0sXG4gICAgc2V0U2VsZWN0ZWRPcmdhbml6YXRpb25zRW5hYmxlZEdpdGh1YkFjdGlvbnNFbnRlcnByaXNlOiBbXCJQVVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9hY3Rpb25zL3Blcm1pc3Npb25zL29yZ2FuaXphdGlvbnNcIl1cbiAgfSxcbiAgZ2lzdHM6IHtcbiAgICBjaGVja0lzU3RhcnJlZDogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH0vc3RhclwiXSxcbiAgICBjcmVhdGU6IFtcIlBPU1QgL2dpc3RzXCJdLFxuICAgIGNyZWF0ZUNvbW1lbnQ6IFtcIlBPU1QgL2dpc3RzL3tnaXN0X2lkfS9jb21tZW50c1wiXSxcbiAgICBkZWxldGU6IFtcIkRFTEVURSAvZ2lzdHMve2dpc3RfaWR9XCJdLFxuICAgIGRlbGV0ZUNvbW1lbnQ6IFtcIkRFTEVURSAvZ2lzdHMve2dpc3RfaWR9L2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBmb3JrOiBbXCJQT1NUIC9naXN0cy97Z2lzdF9pZH0vZm9ya3NcIl0sXG4gICAgZ2V0OiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfVwiXSxcbiAgICBnZXRDb21tZW50OiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfS9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgZ2V0UmV2aXNpb246IFtcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L3tzaGF9XCJdLFxuICAgIGxpc3Q6IFtcIkdFVCAvZ2lzdHNcIl0sXG4gICAgbGlzdENvbW1lbnRzOiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfS9jb21tZW50c1wiXSxcbiAgICBsaXN0Q29tbWl0czogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH0vY29tbWl0c1wiXSxcbiAgICBsaXN0Rm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2dpc3RzXCJdLFxuICAgIGxpc3RGb3JrczogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH0vZm9ya3NcIl0sXG4gICAgbGlzdFB1YmxpYzogW1wiR0VUIC9naXN0cy9wdWJsaWNcIl0sXG4gICAgbGlzdFN0YXJyZWQ6IFtcIkdFVCAvZ2lzdHMvc3RhcnJlZFwiXSxcbiAgICBzdGFyOiBbXCJQVVQgL2dpc3RzL3tnaXN0X2lkfS9zdGFyXCJdLFxuICAgIHVuc3RhcjogW1wiREVMRVRFIC9naXN0cy97Z2lzdF9pZH0vc3RhclwiXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9naXN0cy97Z2lzdF9pZH1cIl0sXG4gICAgdXBkYXRlQ29tbWVudDogW1wiUEFUQ0ggL2dpc3RzL3tnaXN0X2lkfS9jb21tZW50cy97Y29tbWVudF9pZH1cIl1cbiAgfSxcbiAgZ2l0OiB7XG4gICAgY3JlYXRlQmxvYjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L2Jsb2JzXCJdLFxuICAgIGNyZWF0ZUNvbW1pdDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L2NvbW1pdHNcIl0sXG4gICAgY3JlYXRlUmVmOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvcmVmc1wiXSxcbiAgICBjcmVhdGVUYWc6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC90YWdzXCJdLFxuICAgIGNyZWF0ZVRyZWU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC90cmVlc1wiXSxcbiAgICBkZWxldGVSZWY6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3JlZnMve3JlZn1cIl0sXG4gICAgZ2V0QmxvYjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvYmxvYnMve2ZpbGVfc2hhfVwiXSxcbiAgICBnZXRDb21taXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L2NvbW1pdHMve2NvbW1pdF9zaGF9XCJdLFxuICAgIGdldFJlZjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvcmVmL3tyZWZ9XCJdLFxuICAgIGdldFRhZzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvdGFncy97dGFnX3NoYX1cIl0sXG4gICAgZ2V0VHJlZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvdHJlZXMve3RyZWVfc2hhfVwiXSxcbiAgICBsaXN0TWF0Y2hpbmdSZWZzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9tYXRjaGluZy1yZWZzL3tyZWZ9XCJdLFxuICAgIHVwZGF0ZVJlZjogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9yZWZzL3tyZWZ9XCJdXG4gIH0sXG4gIGdpdGlnbm9yZToge1xuICAgIGdldEFsbFRlbXBsYXRlczogW1wiR0VUIC9naXRpZ25vcmUvdGVtcGxhdGVzXCJdLFxuICAgIGdldFRlbXBsYXRlOiBbXCJHRVQgL2dpdGlnbm9yZS90ZW1wbGF0ZXMve25hbWV9XCJdXG4gIH0sXG4gIGludGVyYWN0aW9uczoge1xuICAgIGdldFJlc3RyaWN0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIGdldFJlc3RyaWN0aW9uc0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICBnZXRSZXN0cmljdGlvbnNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICBnZXRSZXN0cmljdGlvbnNGb3JZb3VyUHVibGljUmVwb3M6IFtcIkdFVCAvdXNlci9pbnRlcmFjdGlvbi1saW1pdHNcIiwge30sIHtcbiAgICAgIHJlbmFtZWQ6IFtcImludGVyYWN0aW9uc1wiLCBcImdldFJlc3RyaWN0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdXG4gICAgfV0sXG4gICAgcmVtb3ZlUmVzdHJpY3Rpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgcmVtb3ZlUmVzdHJpY3Rpb25zRm9yT3JnOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIHJlbW92ZVJlc3RyaWN0aW9uc0ZvclJlcG86IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIHJlbW92ZVJlc3RyaWN0aW9uc0ZvcllvdXJQdWJsaWNSZXBvczogW1wiREVMRVRFIC91c2VyL2ludGVyYWN0aW9uLWxpbWl0c1wiLCB7fSwge1xuICAgICAgcmVuYW1lZDogW1wiaW50ZXJhY3Rpb25zXCIsIFwicmVtb3ZlUmVzdHJpY3Rpb25zRm9yQXV0aGVudGljYXRlZFVzZXJcIl1cbiAgICB9XSxcbiAgICBzZXRSZXN0cmljdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUFVUIC91c2VyL2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICBzZXRSZXN0cmljdGlvbnNGb3JPcmc6IFtcIlBVVCAvb3Jncy97b3JnfS9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgc2V0UmVzdHJpY3Rpb25zRm9yUmVwbzogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgc2V0UmVzdHJpY3Rpb25zRm9yWW91clB1YmxpY1JlcG9zOiBbXCJQVVQgL3VzZXIvaW50ZXJhY3Rpb24tbGltaXRzXCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJpbnRlcmFjdGlvbnNcIiwgXCJzZXRSZXN0cmljdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlclwiXVxuICAgIH1dXG4gIH0sXG4gIGlzc3Vlczoge1xuICAgIGFkZEFzc2lnbmVlczogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2Fzc2lnbmVlc1wiXSxcbiAgICBhZGRMYWJlbHM6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sYWJlbHNcIl0sXG4gICAgY2hlY2tVc2VyQ2FuQmVBc3NpZ25lZDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hc3NpZ25lZXMve2Fzc2lnbmVlfVwiXSxcbiAgICBjcmVhdGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlc1wiXSxcbiAgICBjcmVhdGVDb21tZW50OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vY29tbWVudHNcIl0sXG4gICAgY3JlYXRlTGFiZWw6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhYmVsc1wiXSxcbiAgICBjcmVhdGVNaWxlc3RvbmU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXNcIl0sXG4gICAgZGVsZXRlQ29tbWVudDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIGRlbGV0ZUxhYmVsOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhYmVscy97bmFtZX1cIl0sXG4gICAgZGVsZXRlTWlsZXN0b25lOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXMve21pbGVzdG9uZV9udW1iZXJ9XCJdLFxuICAgIGdldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn1cIl0sXG4gICAgZ2V0Q29tbWVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIGdldEV2ZW50OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9ldmVudHMve2V2ZW50X2lkfVwiXSxcbiAgICBnZXRMYWJlbDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sYWJlbHMve25hbWV9XCJdLFxuICAgIGdldE1pbGVzdG9uZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzL3ttaWxlc3RvbmVfbnVtYmVyfVwiXSxcbiAgICBsaXN0OiBbXCJHRVQgL2lzc3Vlc1wiXSxcbiAgICBsaXN0QXNzaWduZWVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Fzc2lnbmVlc1wiXSxcbiAgICBsaXN0Q29tbWVudHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2NvbW1lbnRzXCJdLFxuICAgIGxpc3RDb21tZW50c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzXCJdLFxuICAgIGxpc3RFdmVudHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2V2ZW50c1wiXSxcbiAgICBsaXN0RXZlbnRzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvZXZlbnRzXCJdLFxuICAgIGxpc3RFdmVudHNGb3JUaW1lbGluZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vdGltZWxpbmVcIl0sXG4gICAgbGlzdEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvaXNzdWVzXCJdLFxuICAgIGxpc3RGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9pc3N1ZXNcIl0sXG4gICAgbGlzdEZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzXCJdLFxuICAgIGxpc3RMYWJlbHNGb3JNaWxlc3RvbmU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lcy97bWlsZXN0b25lX251bWJlcn0vbGFiZWxzXCJdLFxuICAgIGxpc3RMYWJlbHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhYmVsc1wiXSxcbiAgICBsaXN0TGFiZWxzT25Jc3N1ZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbGFiZWxzXCJdLFxuICAgIGxpc3RNaWxlc3RvbmVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXNcIl0sXG4gICAgbG9jazogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbG9ja1wiXSxcbiAgICByZW1vdmVBbGxMYWJlbHM6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xhYmVsc1wiXSxcbiAgICByZW1vdmVBc3NpZ25lZXM6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2Fzc2lnbmVlc1wiXSxcbiAgICByZW1vdmVMYWJlbDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbGFiZWxzL3tuYW1lfVwiXSxcbiAgICBzZXRMYWJlbHM6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xhYmVsc1wiXSxcbiAgICB1bmxvY2s6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xvY2tcIl0sXG4gICAgdXBkYXRlOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9XCJdLFxuICAgIHVwZGF0ZUNvbW1lbnQ6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIHVwZGF0ZUxhYmVsOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vbGFiZWxzL3tuYW1lfVwiXSxcbiAgICB1cGRhdGVNaWxlc3RvbmU6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzL3ttaWxlc3RvbmVfbnVtYmVyfVwiXVxuICB9LFxuICBsaWNlbnNlczoge1xuICAgIGdldDogW1wiR0VUIC9saWNlbnNlcy97bGljZW5zZX1cIl0sXG4gICAgZ2V0QWxsQ29tbW9ubHlVc2VkOiBbXCJHRVQgL2xpY2Vuc2VzXCJdLFxuICAgIGdldEZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbGljZW5zZVwiXVxuICB9LFxuICBtYXJrZG93bjoge1xuICAgIHJlbmRlcjogW1wiUE9TVCAvbWFya2Rvd25cIl0sXG4gICAgcmVuZGVyUmF3OiBbXCJQT1NUIC9tYXJrZG93bi9yYXdcIiwge1xuICAgICAgaGVhZGVyczoge1xuICAgICAgICBcImNvbnRlbnQtdHlwZVwiOiBcInRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLThcIlxuICAgICAgfVxuICAgIH1dXG4gIH0sXG4gIG1ldGE6IHtcbiAgICBnZXQ6IFtcIkdFVCAvbWV0YVwiXSxcbiAgICBnZXRPY3RvY2F0OiBbXCJHRVQgL29jdG9jYXRcIl0sXG4gICAgZ2V0WmVuOiBbXCJHRVQgL3plblwiXSxcbiAgICByb290OiBbXCJHRVQgL1wiXVxuICB9LFxuICBtaWdyYXRpb25zOiB7XG4gICAgY2FuY2VsSW1wb3J0OiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ltcG9ydFwiXSxcbiAgICBkZWxldGVBcmNoaXZlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L2FyY2hpdmVcIl0sXG4gICAgZGVsZXRlQXJjaGl2ZUZvck9yZzogW1wiREVMRVRFIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vYXJjaGl2ZVwiXSxcbiAgICBkb3dubG9hZEFyY2hpdmVGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L2FyY2hpdmVcIl0sXG4gICAgZ2V0QXJjaGl2ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9hcmNoaXZlXCJdLFxuICAgIGdldENvbW1pdEF1dGhvcnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaW1wb3J0L2F1dGhvcnNcIl0sXG4gICAgZ2V0SW1wb3J0U3RhdHVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ltcG9ydFwiXSxcbiAgICBnZXRMYXJnZUZpbGVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ltcG9ydC9sYXJnZV9maWxlc1wiXSxcbiAgICBnZXRTdGF0dXNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH1cIl0sXG4gICAgZ2V0U3RhdHVzRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfVwiXSxcbiAgICBsaXN0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9taWdyYXRpb25zXCJdLFxuICAgIGxpc3RGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9taWdyYXRpb25zXCJdLFxuICAgIGxpc3RSZXBvc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIl0sXG4gICAgbGlzdFJlcG9zRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIl0sXG4gICAgbGlzdFJlcG9zRm9yVXNlcjogW1wiR0VUIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJtaWdyYXRpb25zXCIsIFwibGlzdFJlcG9zRm9yQXV0aGVudGljYXRlZFVzZXJcIl1cbiAgICB9XSxcbiAgICBtYXBDb21taXRBdXRob3I6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbXBvcnQvYXV0aG9ycy97YXV0aG9yX2lkfVwiXSxcbiAgICBzZXRMZnNQcmVmZXJlbmNlOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaW1wb3J0L2xmc1wiXSxcbiAgICBzdGFydEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL21pZ3JhdGlvbnNcIl0sXG4gICAgc3RhcnRGb3JPcmc6IFtcIlBPU1QgL29yZ3Mve29yZ30vbWlncmF0aW9uc1wiXSxcbiAgICBzdGFydEltcG9ydDogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbXBvcnRcIl0sXG4gICAgdW5sb2NrUmVwb0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9yZXBvcy97cmVwb19uYW1lfS9sb2NrXCJdLFxuICAgIHVubG9ja1JlcG9Gb3JPcmc6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L3JlcG9zL3tyZXBvX25hbWV9L2xvY2tcIl0sXG4gICAgdXBkYXRlSW1wb3J0OiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaW1wb3J0XCJdXG4gIH0sXG4gIG9yZ3M6IHtcbiAgICBibG9ja1VzZXI6IFtcIlBVVCAvb3Jncy97b3JnfS9ibG9ja3Mve3VzZXJuYW1lfVwiXSxcbiAgICBjYW5jZWxJbnZpdGF0aW9uOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9XCJdLFxuICAgIGNoZWNrQmxvY2tlZFVzZXI6IFtcIkdFVCAvb3Jncy97b3JnfS9ibG9ja3Mve3VzZXJuYW1lfVwiXSxcbiAgICBjaGVja01lbWJlcnNoaXBGb3JVc2VyOiBbXCJHRVQgL29yZ3Mve29yZ30vbWVtYmVycy97dXNlcm5hbWV9XCJdLFxuICAgIGNoZWNrUHVibGljTWVtYmVyc2hpcEZvclVzZXI6IFtcIkdFVCAvb3Jncy97b3JnfS9wdWJsaWNfbWVtYmVycy97dXNlcm5hbWV9XCJdLFxuICAgIGNvbnZlcnRNZW1iZXJUb091dHNpZGVDb2xsYWJvcmF0b3I6IFtcIlBVVCAvb3Jncy97b3JnfS9vdXRzaWRlX2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiXSxcbiAgICBjcmVhdGVJbnZpdGF0aW9uOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2ludml0YXRpb25zXCJdLFxuICAgIGNyZWF0ZVdlYmhvb2s6IFtcIlBPU1QgL29yZ3Mve29yZ30vaG9va3NcIl0sXG4gICAgZGVsZXRlV2ViaG9vazogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfVwiXSxcbiAgICBnZXQ6IFtcIkdFVCAvb3Jncy97b3JnfVwiXSxcbiAgICBnZXRNZW1iZXJzaGlwRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9tZW1iZXJzaGlwcy9vcmdzL3tvcmd9XCJdLFxuICAgIGdldE1lbWJlcnNoaXBGb3JVc2VyOiBbXCJHRVQgL29yZ3Mve29yZ30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiXSxcbiAgICBnZXRXZWJob29rOiBbXCJHRVQgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9XCJdLFxuICAgIGdldFdlYmhvb2tDb25maWdGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH0vY29uZmlnXCJdLFxuICAgIGdldFdlYmhvb2tEZWxpdmVyeTogW1wiR0VUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzL3tkZWxpdmVyeV9pZH1cIl0sXG4gICAgbGlzdDogW1wiR0VUIC9vcmdhbml6YXRpb25zXCJdLFxuICAgIGxpc3RBcHBJbnN0YWxsYXRpb25zOiBbXCJHRVQgL29yZ3Mve29yZ30vaW5zdGFsbGF0aW9uc1wiXSxcbiAgICBsaXN0QmxvY2tlZFVzZXJzOiBbXCJHRVQgL29yZ3Mve29yZ30vYmxvY2tzXCJdLFxuICAgIGxpc3RDdXN0b21Sb2xlczogW1wiR0VUIC9vcmdhbml6YXRpb25zL3tvcmdhbml6YXRpb25faWR9L2N1c3RvbV9yb2xlc1wiXSxcbiAgICBsaXN0RmFpbGVkSW52aXRhdGlvbnM6IFtcIkdFVCAvb3Jncy97b3JnfS9mYWlsZWRfaW52aXRhdGlvbnNcIl0sXG4gICAgbGlzdEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvb3Jnc1wiXSxcbiAgICBsaXN0Rm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L29yZ3NcIl0sXG4gICAgbGlzdEludml0YXRpb25UZWFtczogW1wiR0VUIC9vcmdzL3tvcmd9L2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfS90ZWFtc1wiXSxcbiAgICBsaXN0TWVtYmVyczogW1wiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnNcIl0sXG4gICAgbGlzdE1lbWJlcnNoaXBzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9tZW1iZXJzaGlwcy9vcmdzXCJdLFxuICAgIGxpc3RPdXRzaWRlQ29sbGFib3JhdG9yczogW1wiR0VUIC9vcmdzL3tvcmd9L291dHNpZGVfY29sbGFib3JhdG9yc1wiXSxcbiAgICBsaXN0UGVuZGluZ0ludml0YXRpb25zOiBbXCJHRVQgL29yZ3Mve29yZ30vaW52aXRhdGlvbnNcIl0sXG4gICAgbGlzdFB1YmxpY01lbWJlcnM6IFtcIkdFVCAvb3Jncy97b3JnfS9wdWJsaWNfbWVtYmVyc1wiXSxcbiAgICBsaXN0V2ViaG9va0RlbGl2ZXJpZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllc1wiXSxcbiAgICBsaXN0V2ViaG9va3M6IFtcIkdFVCAvb3Jncy97b3JnfS9ob29rc1wiXSxcbiAgICBwaW5nV2ViaG9vazogW1wiUE9TVCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH0vcGluZ3NcIl0sXG4gICAgcmVkZWxpdmVyV2ViaG9va0RlbGl2ZXJ5OiBbXCJQT1NUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzL3tkZWxpdmVyeV9pZH0vYXR0ZW1wdHNcIl0sXG4gICAgcmVtb3ZlTWVtYmVyOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vbWVtYmVycy97dXNlcm5hbWV9XCJdLFxuICAgIHJlbW92ZU1lbWJlcnNoaXBGb3JVc2VyOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiXSxcbiAgICByZW1vdmVPdXRzaWRlQ29sbGFib3JhdG9yOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vb3V0c2lkZV9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX1cIl0sXG4gICAgcmVtb3ZlUHVibGljTWVtYmVyc2hpcEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vcHVibGljX21lbWJlcnMve3VzZXJuYW1lfVwiXSxcbiAgICBzZXRNZW1iZXJzaGlwRm9yVXNlcjogW1wiUFVUIC9vcmdzL3tvcmd9L21lbWJlcnNoaXBzL3t1c2VybmFtZX1cIl0sXG4gICAgc2V0UHVibGljTWVtYmVyc2hpcEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQVVQgL29yZ3Mve29yZ30vcHVibGljX21lbWJlcnMve3VzZXJuYW1lfVwiXSxcbiAgICB1bmJsb2NrVXNlcjogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2Jsb2Nrcy97dXNlcm5hbWV9XCJdLFxuICAgIHVwZGF0ZTogW1wiUEFUQ0ggL29yZ3Mve29yZ31cIl0sXG4gICAgdXBkYXRlTWVtYmVyc2hpcEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQQVRDSCAvdXNlci9tZW1iZXJzaGlwcy9vcmdzL3tvcmd9XCJdLFxuICAgIHVwZGF0ZVdlYmhvb2s6IFtcIlBBVENIIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfVwiXSxcbiAgICB1cGRhdGVXZWJob29rQ29uZmlnRm9yT3JnOiBbXCJQQVRDSCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH0vY29uZmlnXCJdXG4gIH0sXG4gIHBhY2thZ2VzOiB7XG4gICAgZGVsZXRlUGFja2FnZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX1cIl0sXG4gICAgZGVsZXRlUGFja2FnZUZvck9yZzogW1wiREVMRVRFIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9XCJdLFxuICAgIGRlbGV0ZVBhY2thZ2VGb3JVc2VyOiBbXCJERUxFVEUgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX1cIl0sXG4gICAgZGVsZXRlUGFja2FnZVZlcnNpb25Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiREVMRVRFIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9XCJdLFxuICAgIGRlbGV0ZVBhY2thZ2VWZXJzaW9uRm9yT3JnOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH1cIl0sXG4gICAgZGVsZXRlUGFja2FnZVZlcnNpb25Gb3JVc2VyOiBbXCJERUxFVEUgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH1cIl0sXG4gICAgZ2V0QWxsUGFja2FnZVZlcnNpb25zRm9yQVBhY2thZ2VPd25lZEJ5QW5Pcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiLCB7fSwge1xuICAgICAgcmVuYW1lZDogW1wicGFja2FnZXNcIiwgXCJnZXRBbGxQYWNrYWdlVmVyc2lvbnNGb3JQYWNrYWdlT3duZWRCeU9yZ1wiXVxuICAgIH1dLFxuICAgIGdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvckFQYWNrYWdlT3duZWRCeVRoZUF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIiwge30sIHtcbiAgICAgIHJlbmFtZWQ6IFtcInBhY2thZ2VzXCIsIFwiZ2V0QWxsUGFja2FnZVZlcnNpb25zRm9yUGFja2FnZU93bmVkQnlBdXRoZW50aWNhdGVkVXNlclwiXVxuICAgIH1dLFxuICAgIGdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvclBhY2thZ2VPd25lZEJ5QXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiXSxcbiAgICBnZXRBbGxQYWNrYWdlVmVyc2lvbnNGb3JQYWNrYWdlT3duZWRCeU9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zXCJdLFxuICAgIGdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvclBhY2thZ2VPd25lZEJ5VXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zXCJdLFxuICAgIGdldFBhY2thZ2VGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9XCJdLFxuICAgIGdldFBhY2thZ2VGb3JPcmdhbml6YXRpb246IFtcIkdFVCAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfVwiXSxcbiAgICBnZXRQYWNrYWdlRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9XCJdLFxuICAgIGdldFBhY2thZ2VWZXJzaW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfVwiXSxcbiAgICBnZXRQYWNrYWdlVmVyc2lvbkZvck9yZ2FuaXphdGlvbjogW1wiR0VUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9XCJdLFxuICAgIGdldFBhY2thZ2VWZXJzaW9uRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9XCJdLFxuICAgIGxpc3RQYWNrYWdlc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvcGFja2FnZXNcIl0sXG4gICAgbGlzdFBhY2thZ2VzRm9yT3JnYW5pemF0aW9uOiBbXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXNcIl0sXG4gICAgbGlzdFBhY2thZ2VzRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzXCJdLFxuICAgIHJlc3RvcmVQYWNrYWdlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vcmVzdG9yZXs/dG9rZW59XCJdLFxuICAgIHJlc3RvcmVQYWNrYWdlRm9yT3JnOiBbXCJQT1NUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3Jlc3RvcmV7P3Rva2VufVwiXSxcbiAgICByZXN0b3JlUGFja2FnZUZvclVzZXI6IFtcIlBPU1QgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vcmVzdG9yZXs/dG9rZW59XCJdLFxuICAgIHJlc3RvcmVQYWNrYWdlVmVyc2lvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9L3Jlc3RvcmVcIl0sXG4gICAgcmVzdG9yZVBhY2thZ2VWZXJzaW9uRm9yT3JnOiBbXCJQT1NUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9L3Jlc3RvcmVcIl0sXG4gICAgcmVzdG9yZVBhY2thZ2VWZXJzaW9uRm9yVXNlcjogW1wiUE9TVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfS9yZXN0b3JlXCJdXG4gIH0sXG4gIHByb2plY3RzOiB7XG4gICAgYWRkQ29sbGFib3JhdG9yOiBbXCJQVVQgL3Byb2plY3RzL3twcm9qZWN0X2lkfS9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX1cIl0sXG4gICAgY3JlYXRlQ2FyZDogW1wiUE9TVCAvcHJvamVjdHMvY29sdW1ucy97Y29sdW1uX2lkfS9jYXJkc1wiXSxcbiAgICBjcmVhdGVDb2x1bW46IFtcIlBPU1QgL3Byb2plY3RzL3twcm9qZWN0X2lkfS9jb2x1bW5zXCJdLFxuICAgIGNyZWF0ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL3Byb2plY3RzXCJdLFxuICAgIGNyZWF0ZUZvck9yZzogW1wiUE9TVCAvb3Jncy97b3JnfS9wcm9qZWN0c1wiXSxcbiAgICBjcmVhdGVGb3JSZXBvOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wcm9qZWN0c1wiXSxcbiAgICBkZWxldGU6IFtcIkRFTEVURSAvcHJvamVjdHMve3Byb2plY3RfaWR9XCJdLFxuICAgIGRlbGV0ZUNhcmQ6IFtcIkRFTEVURSAvcHJvamVjdHMvY29sdW1ucy9jYXJkcy97Y2FyZF9pZH1cIl0sXG4gICAgZGVsZXRlQ29sdW1uOiBbXCJERUxFVEUgL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH1cIl0sXG4gICAgZ2V0OiBbXCJHRVQgL3Byb2plY3RzL3twcm9qZWN0X2lkfVwiXSxcbiAgICBnZXRDYXJkOiBbXCJHRVQgL3Byb2plY3RzL2NvbHVtbnMvY2FyZHMve2NhcmRfaWR9XCJdLFxuICAgIGdldENvbHVtbjogW1wiR0VUIC9wcm9qZWN0cy9jb2x1bW5zL3tjb2x1bW5faWR9XCJdLFxuICAgIGdldFBlcm1pc3Npb25Gb3JVc2VyOiBbXCJHRVQgL3Byb2plY3RzL3twcm9qZWN0X2lkfS9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX0vcGVybWlzc2lvblwiXSxcbiAgICBsaXN0Q2FyZHM6IFtcIkdFVCAvcHJvamVjdHMvY29sdW1ucy97Y29sdW1uX2lkfS9jYXJkc1wiXSxcbiAgICBsaXN0Q29sbGFib3JhdG9yczogW1wiR0VUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sbGFib3JhdG9yc1wiXSxcbiAgICBsaXN0Q29sdW1uczogW1wiR0VUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sdW1uc1wiXSxcbiAgICBsaXN0Rm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vcHJvamVjdHNcIl0sXG4gICAgbGlzdEZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJvamVjdHNcIl0sXG4gICAgbGlzdEZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wcm9qZWN0c1wiXSxcbiAgICBtb3ZlQ2FyZDogW1wiUE9TVCAvcHJvamVjdHMvY29sdW1ucy9jYXJkcy97Y2FyZF9pZH0vbW92ZXNcIl0sXG4gICAgbW92ZUNvbHVtbjogW1wiUE9TVCAvcHJvamVjdHMvY29sdW1ucy97Y29sdW1uX2lkfS9tb3Zlc1wiXSxcbiAgICByZW1vdmVDb2xsYWJvcmF0b3I6IFtcIkRFTEVURSAvcHJvamVjdHMve3Byb2plY3RfaWR9L2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9wcm9qZWN0cy97cHJvamVjdF9pZH1cIl0sXG4gICAgdXBkYXRlQ2FyZDogW1wiUEFUQ0ggL3Byb2plY3RzL2NvbHVtbnMvY2FyZHMve2NhcmRfaWR9XCJdLFxuICAgIHVwZGF0ZUNvbHVtbjogW1wiUEFUQ0ggL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH1cIl1cbiAgfSxcbiAgcHVsbHM6IHtcbiAgICBjaGVja0lmTWVyZ2VkOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vbWVyZ2VcIl0sXG4gICAgY3JlYXRlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxsc1wiXSxcbiAgICBjcmVhdGVSZXBseUZvclJldmlld0NvbW1lbnQ6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfaWR9L3JlcGxpZXNcIl0sXG4gICAgY3JlYXRlUmV2aWV3OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3NcIl0sXG4gICAgY3JlYXRlUmV2aWV3Q29tbWVudDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb21tZW50c1wiXSxcbiAgICBkZWxldGVQZW5kaW5nUmV2aWV3OiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfVwiXSxcbiAgICBkZWxldGVSZXZpZXdDb21tZW50OiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBkaXNtaXNzUmV2aWV3OiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfS9kaXNtaXNzYWxzXCJdLFxuICAgIGdldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9XCJdLFxuICAgIGdldFJldmlldzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH1cIl0sXG4gICAgZ2V0UmV2aWV3Q29tbWVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgbGlzdDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxsc1wiXSxcbiAgICBsaXN0Q29tbWVudHNGb3JSZXZpZXc6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzL3tyZXZpZXdfaWR9L2NvbW1lbnRzXCJdLFxuICAgIGxpc3RDb21taXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vY29tbWl0c1wiXSxcbiAgICBsaXN0RmlsZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9maWxlc1wiXSxcbiAgICBsaXN0UmVxdWVzdGVkUmV2aWV3ZXJzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmVxdWVzdGVkX3Jldmlld2Vyc1wiXSxcbiAgICBsaXN0UmV2aWV3Q29tbWVudHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb21tZW50c1wiXSxcbiAgICBsaXN0UmV2aWV3Q29tbWVudHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzXCJdLFxuICAgIGxpc3RSZXZpZXdzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3c1wiXSxcbiAgICBtZXJnZTogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L21lcmdlXCJdLFxuICAgIHJlbW92ZVJlcXVlc3RlZFJldmlld2VyczogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3JlcXVlc3RlZF9yZXZpZXdlcnNcIl0sXG4gICAgcmVxdWVzdFJldmlld2VyczogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXF1ZXN0ZWRfcmV2aWV3ZXJzXCJdLFxuICAgIHN1Ym1pdFJldmlldzogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzL3tyZXZpZXdfaWR9L2V2ZW50c1wiXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9XCJdLFxuICAgIHVwZGF0ZUJyYW5jaDogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3VwZGF0ZS1icmFuY2hcIl0sXG4gICAgdXBkYXRlUmV2aWV3OiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfVwiXSxcbiAgICB1cGRhdGVSZXZpZXdDb21tZW50OiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9XCJdXG4gIH0sXG4gIHJhdGVMaW1pdDoge1xuICAgIGdldDogW1wiR0VUIC9yYXRlX2xpbWl0XCJdXG4gIH0sXG4gIHJlYWN0aW9uczoge1xuICAgIGNyZWF0ZUZvckNvbW1pdENvbW1lbnQ6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIl0sXG4gICAgY3JlYXRlRm9ySXNzdWU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9yZWFjdGlvbnNcIl0sXG4gICAgY3JlYXRlRm9ySXNzdWVDb21tZW50OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiXSxcbiAgICBjcmVhdGVGb3JQdWxsUmVxdWVzdFJldmlld0NvbW1lbnQ6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIl0sXG4gICAgY3JlYXRlRm9yUmVsZWFzZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9L3JlYWN0aW9uc1wiXSxcbiAgICBjcmVhdGVGb3JUZWFtRGlzY3Vzc2lvbkNvbW1lbnRJbk9yZzogW1wiUE9TVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn0vcmVhY3Rpb25zXCJdLFxuICAgIGNyZWF0ZUZvclRlYW1EaXNjdXNzaW9uSW5Pcmc6IFtcIlBPU1QgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9yZWFjdGlvbnNcIl0sXG4gICAgZGVsZXRlRm9yQ29tbWl0Q29tbWVudDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zL3tyZWFjdGlvbl9pZH1cIl0sXG4gICAgZGVsZXRlRm9ySXNzdWU6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCJdLFxuICAgIGRlbGV0ZUZvcklzc3VlQ29tbWVudDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCJdLFxuICAgIGRlbGV0ZUZvclB1bGxSZXF1ZXN0Q29tbWVudDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zL3tyZWFjdGlvbl9pZH1cIl0sXG4gICAgZGVsZXRlRm9yUmVsZWFzZTogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vcmVhY3Rpb25zL3tyZWFjdGlvbl9pZH1cIl0sXG4gICAgZGVsZXRlRm9yVGVhbURpc2N1c3Npb246IFtcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCJdLFxuICAgIGRlbGV0ZUZvclRlYW1EaXNjdXNzaW9uQ29tbWVudDogW1wiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfbnVtYmVyfS9yZWFjdGlvbnMve3JlYWN0aW9uX2lkfVwiXSxcbiAgICBsaXN0Rm9yQ29tbWl0Q29tbWVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zXCJdLFxuICAgIGxpc3RGb3JJc3N1ZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vcmVhY3Rpb25zXCJdLFxuICAgIGxpc3RGb3JJc3N1ZUNvbW1lbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIl0sXG4gICAgbGlzdEZvclB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zXCJdLFxuICAgIGxpc3RGb3JSZWxlYXNlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfS9yZWFjdGlvbnNcIl0sXG4gICAgbGlzdEZvclRlYW1EaXNjdXNzaW9uQ29tbWVudEluT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9L3JlYWN0aW9uc1wiXSxcbiAgICBsaXN0Rm9yVGVhbURpc2N1c3Npb25Jbk9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vcmVhY3Rpb25zXCJdXG4gIH0sXG4gIHJlcG9zOiB7XG4gICAgYWNjZXB0SW52aXRhdGlvbjogW1wiUEFUQ0ggL3VzZXIvcmVwb3NpdG9yeV9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIiwge30sIHtcbiAgICAgIHJlbmFtZWQ6IFtcInJlcG9zXCIsIFwiYWNjZXB0SW52aXRhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdXG4gICAgfV0sXG4gICAgYWNjZXB0SW52aXRhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQQVRDSCAvdXNlci9yZXBvc2l0b3J5X2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfVwiXSxcbiAgICBhZGRBcHBBY2Nlc3NSZXN0cmljdGlvbnM6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL2FwcHNcIiwge30sIHtcbiAgICAgIG1hcFRvRGF0YTogXCJhcHBzXCJcbiAgICB9XSxcbiAgICBhZGRDb2xsYWJvcmF0b3I6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29sbGFib3JhdG9ycy97dXNlcm5hbWV9XCJdLFxuICAgIGFkZFN0YXR1c0NoZWNrQ29udGV4dHM6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrcy9jb250ZXh0c1wiLCB7fSwge1xuICAgICAgbWFwVG9EYXRhOiBcImNvbnRleHRzXCJcbiAgICB9XSxcbiAgICBhZGRUZWFtQWNjZXNzUmVzdHJpY3Rpb25zOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy90ZWFtc1wiLCB7fSwge1xuICAgICAgbWFwVG9EYXRhOiBcInRlYW1zXCJcbiAgICB9XSxcbiAgICBhZGRVc2VyQWNjZXNzUmVzdHJpY3Rpb25zOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy91c2Vyc1wiLCB7fSwge1xuICAgICAgbWFwVG9EYXRhOiBcInVzZXJzXCJcbiAgICB9XSxcbiAgICBjaGVja0NvbGxhYm9yYXRvcjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX1cIl0sXG4gICAgY2hlY2tWdWxuZXJhYmlsaXR5QWxlcnRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Z1bG5lcmFiaWxpdHktYWxlcnRzXCJdLFxuICAgIGNvZGVvd25lcnNFcnJvcnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZW93bmVycy9lcnJvcnNcIl0sXG4gICAgY29tcGFyZUNvbW1pdHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tcGFyZS97YmFzZX0uLi57aGVhZH1cIl0sXG4gICAgY29tcGFyZUNvbW1pdHNXaXRoQmFzZWhlYWQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tcGFyZS97YmFzZWhlYWR9XCJdLFxuICAgIGNyZWF0ZUF1dG9saW5rOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hdXRvbGlua3NcIl0sXG4gICAgY3JlYXRlQ29tbWl0Q29tbWVudDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97Y29tbWl0X3NoYX0vY29tbWVudHNcIl0sXG4gICAgY3JlYXRlQ29tbWl0U2lnbmF0dXJlUHJvdGVjdGlvbjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zaWduYXR1cmVzXCJdLFxuICAgIGNyZWF0ZUNvbW1pdFN0YXR1czogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3RhdHVzZXMve3NoYX1cIl0sXG4gICAgY3JlYXRlRGVwbG95S2V5OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9rZXlzXCJdLFxuICAgIGNyZWF0ZURlcGxveW1lbnQ6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGxveW1lbnRzXCJdLFxuICAgIGNyZWF0ZURlcGxveW1lbnRTdGF0dXM6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGxveW1lbnRzL3tkZXBsb3ltZW50X2lkfS9zdGF0dXNlc1wiXSxcbiAgICBjcmVhdGVEaXNwYXRjaEV2ZW50OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kaXNwYXRjaGVzXCJdLFxuICAgIGNyZWF0ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL3JlcG9zXCJdLFxuICAgIGNyZWF0ZUZvcms6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ZvcmtzXCJdLFxuICAgIGNyZWF0ZUluT3JnOiBbXCJQT1NUIC9vcmdzL3tvcmd9L3JlcG9zXCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlRW52aXJvbm1lbnQ6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfVwiXSxcbiAgICBjcmVhdGVPclVwZGF0ZUZpbGVDb250ZW50czogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb250ZW50cy97cGF0aH1cIl0sXG4gICAgY3JlYXRlUGFnZXNTaXRlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlc1wiXSxcbiAgICBjcmVhdGVSZWxlYXNlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlc1wiXSxcbiAgICBjcmVhdGVUYWdQcm90ZWN0aW9uOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YWdzL3Byb3RlY3Rpb25cIl0sXG4gICAgY3JlYXRlVXNpbmdUZW1wbGF0ZTogW1wiUE9TVCAvcmVwb3Mve3RlbXBsYXRlX293bmVyfS97dGVtcGxhdGVfcmVwb30vZ2VuZXJhdGVcIl0sXG4gICAgY3JlYXRlV2ViaG9vazogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3NcIl0sXG4gICAgZGVjbGluZUludml0YXRpb246IFtcIkRFTEVURSAvdXNlci9yZXBvc2l0b3J5X2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfVwiLCB7fSwge1xuICAgICAgcmVuYW1lZDogW1wicmVwb3NcIiwgXCJkZWNsaW5lSW52aXRhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdXG4gICAgfV0sXG4gICAgZGVjbGluZUludml0YXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiREVMRVRFIC91c2VyL3JlcG9zaXRvcnlfaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9XCJdLFxuICAgIGRlbGV0ZTogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfVwiXSxcbiAgICBkZWxldGVBY2Nlc3NSZXN0cmljdGlvbnM6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnNcIl0sXG4gICAgZGVsZXRlQWRtaW5CcmFuY2hQcm90ZWN0aW9uOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vZW5mb3JjZV9hZG1pbnNcIl0sXG4gICAgZGVsZXRlQW5FbnZpcm9ubWVudDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9XCJdLFxuICAgIGRlbGV0ZUF1dG9saW5rOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9saW5rcy97YXV0b2xpbmtfaWR9XCJdLFxuICAgIGRlbGV0ZUJyYW5jaFByb3RlY3Rpb246IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvblwiXSxcbiAgICBkZWxldGVDb21taXRDb21tZW50OiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBkZWxldGVDb21taXRTaWduYXR1cmVQcm90ZWN0aW9uOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc2lnbmF0dXJlc1wiXSxcbiAgICBkZWxldGVEZXBsb3lLZXk6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30va2V5cy97a2V5X2lkfVwiXSxcbiAgICBkZWxldGVEZXBsb3ltZW50OiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGxveW1lbnRzL3tkZXBsb3ltZW50X2lkfVwiXSxcbiAgICBkZWxldGVGaWxlOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbnRlbnRzL3twYXRofVwiXSxcbiAgICBkZWxldGVJbnZpdGF0aW9uOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfVwiXSxcbiAgICBkZWxldGVQYWdlc1NpdGU6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXNcIl0sXG4gICAgZGVsZXRlUHVsbFJlcXVlc3RSZXZpZXdQcm90ZWN0aW9uOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfcHVsbF9yZXF1ZXN0X3Jldmlld3NcIl0sXG4gICAgZGVsZXRlUmVsZWFzZTogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH1cIl0sXG4gICAgZGVsZXRlUmVsZWFzZUFzc2V0OiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL2Fzc2V0cy97YXNzZXRfaWR9XCJdLFxuICAgIGRlbGV0ZVRhZ1Byb3RlY3Rpb246IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vdGFncy9wcm90ZWN0aW9uL3t0YWdfcHJvdGVjdGlvbl9pZH1cIl0sXG4gICAgZGVsZXRlV2ViaG9vazogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgZGlzYWJsZUF1dG9tYXRlZFNlY3VyaXR5Rml4ZXM6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYXV0b21hdGVkLXNlY3VyaXR5LWZpeGVzXCJdLFxuICAgIGRpc2FibGVMZnNGb3JSZXBvOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xmc1wiXSxcbiAgICBkaXNhYmxlVnVsbmVyYWJpbGl0eUFsZXJ0czogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS92dWxuZXJhYmlsaXR5LWFsZXJ0c1wiXSxcbiAgICBkb3dubG9hZEFyY2hpdmU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vemlwYmFsbC97cmVmfVwiLCB7fSwge1xuICAgICAgcmVuYW1lZDogW1wicmVwb3NcIiwgXCJkb3dubG9hZFppcGJhbGxBcmNoaXZlXCJdXG4gICAgfV0sXG4gICAgZG93bmxvYWRUYXJiYWxsQXJjaGl2ZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YXJiYWxsL3tyZWZ9XCJdLFxuICAgIGRvd25sb2FkWmlwYmFsbEFyY2hpdmU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vemlwYmFsbC97cmVmfVwiXSxcbiAgICBlbmFibGVBdXRvbWF0ZWRTZWN1cml0eUZpeGVzOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9tYXRlZC1zZWN1cml0eS1maXhlc1wiXSxcbiAgICBlbmFibGVMZnNGb3JSZXBvOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xmc1wiXSxcbiAgICBlbmFibGVWdWxuZXJhYmlsaXR5QWxlcnRzOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Z1bG5lcmFiaWxpdHktYWxlcnRzXCJdLFxuICAgIGdlbmVyYXRlUmVsZWFzZU5vdGVzOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy9nZW5lcmF0ZS1ub3Rlc1wiXSxcbiAgICBnZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb31cIl0sXG4gICAgZ2V0QWNjZXNzUmVzdHJpY3Rpb25zOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zXCJdLFxuICAgIGdldEFkbWluQnJhbmNoUHJvdGVjdGlvbjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL2VuZm9yY2VfYWRtaW5zXCJdLFxuICAgIGdldEFsbEVudmlyb25tZW50czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHNcIl0sXG4gICAgZ2V0QWxsU3RhdHVzQ2hlY2tDb250ZXh0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3MvY29udGV4dHNcIl0sXG4gICAgZ2V0QWxsVG9waWNzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RvcGljc1wiXSxcbiAgICBnZXRBcHBzV2l0aEFjY2Vzc1RvUHJvdGVjdGVkQnJhbmNoOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL2FwcHNcIl0sXG4gICAgZ2V0QXV0b2xpbms6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXV0b2xpbmtzL3thdXRvbGlua19pZH1cIl0sXG4gICAgZ2V0QnJhbmNoOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9XCJdLFxuICAgIGdldEJyYW5jaFByb3RlY3Rpb246IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvblwiXSxcbiAgICBnZXRDbG9uZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdHJhZmZpYy9jbG9uZXNcIl0sXG4gICAgZ2V0Q29kZUZyZXF1ZW5jeVN0YXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXRzL2NvZGVfZnJlcXVlbmN5XCJdLFxuICAgIGdldENvbGxhYm9yYXRvclBlcm1pc3Npb25MZXZlbDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX0vcGVybWlzc2lvblwiXSxcbiAgICBnZXRDb21iaW5lZFN0YXR1c0ZvclJlZjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L3N0YXR1c1wiXSxcbiAgICBnZXRDb21taXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfVwiXSxcbiAgICBnZXRDb21taXRBY3Rpdml0eVN0YXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXRzL2NvbW1pdF9hY3Rpdml0eVwiXSxcbiAgICBnZXRDb21taXRDb21tZW50OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBnZXRDb21taXRTaWduYXR1cmVQcm90ZWN0aW9uOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc2lnbmF0dXJlc1wiXSxcbiAgICBnZXRDb21tdW5pdHlQcm9maWxlTWV0cmljczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tdW5pdHkvcHJvZmlsZVwiXSxcbiAgICBnZXRDb250ZW50OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbnRlbnRzL3twYXRofVwiXSxcbiAgICBnZXRDb250cmlidXRvcnNTdGF0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGF0cy9jb250cmlidXRvcnNcIl0sXG4gICAgZ2V0RGVwbG95S2V5OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2tleXMve2tleV9pZH1cIl0sXG4gICAgZ2V0RGVwbG95bWVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50cy97ZGVwbG95bWVudF9pZH1cIl0sXG4gICAgZ2V0RGVwbG95bWVudFN0YXR1czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50cy97ZGVwbG95bWVudF9pZH0vc3RhdHVzZXMve3N0YXR1c19pZH1cIl0sXG4gICAgZ2V0RW52aXJvbm1lbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfVwiXSxcbiAgICBnZXRMYXRlc3RQYWdlc0J1aWxkOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2J1aWxkcy9sYXRlc3RcIl0sXG4gICAgZ2V0TGF0ZXN0UmVsZWFzZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy9sYXRlc3RcIl0sXG4gICAgZ2V0UGFnZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXNcIl0sXG4gICAgZ2V0UGFnZXNCdWlsZDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9idWlsZHMve2J1aWxkX2lkfVwiXSxcbiAgICBnZXRQYWdlc0hlYWx0aENoZWNrOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2hlYWx0aFwiXSxcbiAgICBnZXRQYXJ0aWNpcGF0aW9uU3RhdHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3RhdHMvcGFydGljaXBhdGlvblwiXSxcbiAgICBnZXRQdWxsUmVxdWVzdFJldmlld1Byb3RlY3Rpb246IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9wdWxsX3JlcXVlc3RfcmV2aWV3c1wiXSxcbiAgICBnZXRQdW5jaENhcmRTdGF0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGF0cy9wdW5jaF9jYXJkXCJdLFxuICAgIGdldFJlYWRtZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWFkbWVcIl0sXG4gICAgZ2V0UmVhZG1lSW5EaXJlY3Rvcnk6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVhZG1lL3tkaXJ9XCJdLFxuICAgIGdldFJlbGVhc2U6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9XCJdLFxuICAgIGdldFJlbGVhc2VBc3NldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy9hc3NldHMve2Fzc2V0X2lkfVwiXSxcbiAgICBnZXRSZWxlYXNlQnlUYWc6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMvdGFncy97dGFnfVwiXSxcbiAgICBnZXRTdGF0dXNDaGVja3NQcm90ZWN0aW9uOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrc1wiXSxcbiAgICBnZXRUZWFtc1dpdGhBY2Nlc3NUb1Byb3RlY3RlZEJyYW5jaDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy90ZWFtc1wiXSxcbiAgICBnZXRUb3BQYXRoczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90cmFmZmljL3BvcHVsYXIvcGF0aHNcIl0sXG4gICAgZ2V0VG9wUmVmZXJyZXJzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RyYWZmaWMvcG9wdWxhci9yZWZlcnJlcnNcIl0sXG4gICAgZ2V0VXNlcnNXaXRoQWNjZXNzVG9Qcm90ZWN0ZWRCcmFuY2g6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdXNlcnNcIl0sXG4gICAgZ2V0Vmlld3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdHJhZmZpYy92aWV3c1wiXSxcbiAgICBnZXRXZWJob29rOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfVwiXSxcbiAgICBnZXRXZWJob29rQ29uZmlnRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vY29uZmlnXCJdLFxuICAgIGdldFdlYmhvb2tEZWxpdmVyeTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9XCJdLFxuICAgIGxpc3RBdXRvbGlua3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXV0b2xpbmtzXCJdLFxuICAgIGxpc3RCcmFuY2hlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlc1wiXSxcbiAgICBsaXN0QnJhbmNoZXNGb3JIZWFkQ29tbWl0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve2NvbW1pdF9zaGF9L2JyYW5jaGVzLXdoZXJlLWhlYWRcIl0sXG4gICAgbGlzdENvbGxhYm9yYXRvcnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29sbGFib3JhdG9yc1wiXSxcbiAgICBsaXN0Q29tbWVudHNGb3JDb21taXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97Y29tbWl0X3NoYX0vY29tbWVudHNcIl0sXG4gICAgbGlzdENvbW1pdENvbW1lbnRzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50c1wiXSxcbiAgICBsaXN0Q29tbWl0U3RhdHVzZXNGb3JSZWY6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfS9zdGF0dXNlc1wiXSxcbiAgICBsaXN0Q29tbWl0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzXCJdLFxuICAgIGxpc3RDb250cmlidXRvcnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29udHJpYnV0b3JzXCJdLFxuICAgIGxpc3REZXBsb3lLZXlzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2tleXNcIl0sXG4gICAgbGlzdERlcGxveW1lbnRTdGF0dXNlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50cy97ZGVwbG95bWVudF9pZH0vc3RhdHVzZXNcIl0sXG4gICAgbGlzdERlcGxveW1lbnRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGxveW1lbnRzXCJdLFxuICAgIGxpc3RGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3JlcG9zXCJdLFxuICAgIGxpc3RGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9yZXBvc1wiXSxcbiAgICBsaXN0Rm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3JlcG9zXCJdLFxuICAgIGxpc3RGb3JrczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9mb3Jrc1wiXSxcbiAgICBsaXN0SW52aXRhdGlvbnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaW52aXRhdGlvbnNcIl0sXG4gICAgbGlzdEludml0YXRpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9yZXBvc2l0b3J5X2ludml0YXRpb25zXCJdLFxuICAgIGxpc3RMYW5ndWFnZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbGFuZ3VhZ2VzXCJdLFxuICAgIGxpc3RQYWdlc0J1aWxkczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9idWlsZHNcIl0sXG4gICAgbGlzdFB1YmxpYzogW1wiR0VUIC9yZXBvc2l0b3JpZXNcIl0sXG4gICAgbGlzdFB1bGxSZXF1ZXN0c0Fzc29jaWF0ZWRXaXRoQ29tbWl0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve2NvbW1pdF9zaGF9L3B1bGxzXCJdLFxuICAgIGxpc3RSZWxlYXNlQXNzZXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfS9hc3NldHNcIl0sXG4gICAgbGlzdFJlbGVhc2VzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzXCJdLFxuICAgIGxpc3RUYWdQcm90ZWN0aW9uOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RhZ3MvcHJvdGVjdGlvblwiXSxcbiAgICBsaXN0VGFnczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YWdzXCJdLFxuICAgIGxpc3RUZWFtczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90ZWFtc1wiXSxcbiAgICBsaXN0V2ViaG9va0RlbGl2ZXJpZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXNcIl0sXG4gICAgbGlzdFdlYmhvb2tzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzXCJdLFxuICAgIG1lcmdlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9tZXJnZXNcIl0sXG4gICAgbWVyZ2VVcHN0cmVhbTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWVyZ2UtdXBzdHJlYW1cIl0sXG4gICAgcGluZ1dlYmhvb2s6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS9waW5nc1wiXSxcbiAgICByZWRlbGl2ZXJXZWJob29rRGVsaXZlcnk6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzL3tkZWxpdmVyeV9pZH0vYXR0ZW1wdHNcIl0sXG4gICAgcmVtb3ZlQXBwQWNjZXNzUmVzdHJpY3Rpb25zOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL2FwcHNcIiwge30sIHtcbiAgICAgIG1hcFRvRGF0YTogXCJhcHBzXCJcbiAgICB9XSxcbiAgICByZW1vdmVDb2xsYWJvcmF0b3I6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vY29sbGFib3JhdG9ycy97dXNlcm5hbWV9XCJdLFxuICAgIHJlbW92ZVN0YXR1c0NoZWNrQ29udGV4dHM6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zdGF0dXNfY2hlY2tzL2NvbnRleHRzXCIsIHt9LCB7XG4gICAgICBtYXBUb0RhdGE6IFwiY29udGV4dHNcIlxuICAgIH1dLFxuICAgIHJlbW92ZVN0YXR1c0NoZWNrUHJvdGVjdGlvbjogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3NcIl0sXG4gICAgcmVtb3ZlVGVhbUFjY2Vzc1Jlc3RyaWN0aW9uczogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy90ZWFtc1wiLCB7fSwge1xuICAgICAgbWFwVG9EYXRhOiBcInRlYW1zXCJcbiAgICB9XSxcbiAgICByZW1vdmVVc2VyQWNjZXNzUmVzdHJpY3Rpb25zOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL3VzZXJzXCIsIHt9LCB7XG4gICAgICBtYXBUb0RhdGE6IFwidXNlcnNcIlxuICAgIH1dLFxuICAgIHJlbmFtZUJyYW5jaDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcmVuYW1lXCJdLFxuICAgIHJlcGxhY2VBbGxUb3BpY3M6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vdG9waWNzXCJdLFxuICAgIHJlcXVlc3RQYWdlc0J1aWxkOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9idWlsZHNcIl0sXG4gICAgc2V0QWRtaW5CcmFuY2hQcm90ZWN0aW9uOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL2VuZm9yY2VfYWRtaW5zXCJdLFxuICAgIHNldEFwcEFjY2Vzc1Jlc3RyaWN0aW9uczogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy9hcHBzXCIsIHt9LCB7XG4gICAgICBtYXBUb0RhdGE6IFwiYXBwc1wiXG4gICAgfV0sXG4gICAgc2V0U3RhdHVzQ2hlY2tDb250ZXh0czogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3MvY29udGV4dHNcIiwge30sIHtcbiAgICAgIG1hcFRvRGF0YTogXCJjb250ZXh0c1wiXG4gICAgfV0sXG4gICAgc2V0VGVhbUFjY2Vzc1Jlc3RyaWN0aW9uczogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy90ZWFtc1wiLCB7fSwge1xuICAgICAgbWFwVG9EYXRhOiBcInRlYW1zXCJcbiAgICB9XSxcbiAgICBzZXRVc2VyQWNjZXNzUmVzdHJpY3Rpb25zOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL3VzZXJzXCIsIHt9LCB7XG4gICAgICBtYXBUb0RhdGE6IFwidXNlcnNcIlxuICAgIH1dLFxuICAgIHRlc3RQdXNoV2ViaG9vazogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L3Rlc3RzXCJdLFxuICAgIHRyYW5zZmVyOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90cmFuc2ZlclwiXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfVwiXSxcbiAgICB1cGRhdGVCcmFuY2hQcm90ZWN0aW9uOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb25cIl0sXG4gICAgdXBkYXRlQ29tbWl0Q29tbWVudDogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICB1cGRhdGVJbmZvcm1hdGlvbkFib3V0UGFnZXNTaXRlOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzXCJdLFxuICAgIHVwZGF0ZUludml0YXRpb246IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIl0sXG4gICAgdXBkYXRlUHVsbFJlcXVlc3RSZXZpZXdQcm90ZWN0aW9uOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9wdWxsX3JlcXVlc3RfcmV2aWV3c1wiXSxcbiAgICB1cGRhdGVSZWxlYXNlOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9XCJdLFxuICAgIHVwZGF0ZVJlbGVhc2VBc3NldDogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL2Fzc2V0cy97YXNzZXRfaWR9XCJdLFxuICAgIHVwZGF0ZVN0YXR1c0NoZWNrUG90ZWN0aW9uOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zdGF0dXNfY2hlY2tzXCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJyZXBvc1wiLCBcInVwZGF0ZVN0YXR1c0NoZWNrUHJvdGVjdGlvblwiXVxuICAgIH1dLFxuICAgIHVwZGF0ZVN0YXR1c0NoZWNrUHJvdGVjdGlvbjogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrc1wiXSxcbiAgICB1cGRhdGVXZWJob29rOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9XCJdLFxuICAgIHVwZGF0ZVdlYmhvb2tDb25maWdGb3JSZXBvOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L2NvbmZpZ1wiXSxcbiAgICB1cGxvYWRSZWxlYXNlQXNzZXQ6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfS9hc3NldHN7P25hbWUsbGFiZWx9XCIsIHtcbiAgICAgIGJhc2VVcmw6IFwiaHR0cHM6Ly91cGxvYWRzLmdpdGh1Yi5jb21cIlxuICAgIH1dXG4gIH0sXG4gIHNlYXJjaDoge1xuICAgIGNvZGU6IFtcIkdFVCAvc2VhcmNoL2NvZGVcIl0sXG4gICAgY29tbWl0czogW1wiR0VUIC9zZWFyY2gvY29tbWl0c1wiXSxcbiAgICBpc3N1ZXNBbmRQdWxsUmVxdWVzdHM6IFtcIkdFVCAvc2VhcmNoL2lzc3Vlc1wiXSxcbiAgICBsYWJlbHM6IFtcIkdFVCAvc2VhcmNoL2xhYmVsc1wiXSxcbiAgICByZXBvczogW1wiR0VUIC9zZWFyY2gvcmVwb3NpdG9yaWVzXCJdLFxuICAgIHRvcGljczogW1wiR0VUIC9zZWFyY2gvdG9waWNzXCJdLFxuICAgIHVzZXJzOiBbXCJHRVQgL3NlYXJjaC91c2Vyc1wiXVxuICB9LFxuICBzZWNyZXRTY2FubmluZzoge1xuICAgIGdldEFsZXJ0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3JldC1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn1cIl0sXG4gICAgbGlzdEFsZXJ0c0ZvckVudGVycHJpc2U6IFtcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L3NlY3JldC1zY2FubmluZy9hbGVydHNcIl0sXG4gICAgbGlzdEFsZXJ0c0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3NlY3JldC1zY2FubmluZy9hbGVydHNcIl0sXG4gICAgbGlzdEFsZXJ0c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0c1wiXSxcbiAgICBsaXN0TG9jYXRpb25zRm9yQWxlcnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9sb2NhdGlvbnNcIl0sXG4gICAgdXBkYXRlQWxlcnQ6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9XCJdXG4gIH0sXG4gIHRlYW1zOiB7XG4gICAgYWRkT3JVcGRhdGVNZW1iZXJzaGlwRm9yVXNlckluT3JnOiBbXCJQVVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiXSxcbiAgICBhZGRPclVwZGF0ZVByb2plY3RQZXJtaXNzaW9uc0luT3JnOiBbXCJQVVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcHJvamVjdHMve3Byb2plY3RfaWR9XCJdLFxuICAgIGFkZE9yVXBkYXRlUmVwb1Blcm1pc3Npb25zSW5Pcmc6IFtcIlBVVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9yZXBvcy97b3duZXJ9L3tyZXBvfVwiXSxcbiAgICBjaGVja1Blcm1pc3Npb25zRm9yUHJvamVjdEluT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcHJvamVjdHMve3Byb2plY3RfaWR9XCJdLFxuICAgIGNoZWNrUGVybWlzc2lvbnNGb3JSZXBvSW5Pcmc6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9yZXBvcy97b3duZXJ9L3tyZXBvfVwiXSxcbiAgICBjcmVhdGU6IFtcIlBPU1QgL29yZ3Mve29yZ30vdGVhbXNcIl0sXG4gICAgY3JlYXRlRGlzY3Vzc2lvbkNvbW1lbnRJbk9yZzogW1wiUE9TVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzXCJdLFxuICAgIGNyZWF0ZURpc2N1c3Npb25Jbk9yZzogW1wiUE9TVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9uc1wiXSxcbiAgICBkZWxldGVEaXNjdXNzaW9uQ29tbWVudEluT3JnOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9XCJdLFxuICAgIGRlbGV0ZURpc2N1c3Npb25Jbk9yZzogW1wiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn1cIl0sXG4gICAgZGVsZXRlSW5Pcmc6IFtcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfVwiXSxcbiAgICBnZXRCeU5hbWU6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfVwiXSxcbiAgICBnZXREaXNjdXNzaW9uQ29tbWVudEluT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9XCJdLFxuICAgIGdldERpc2N1c3Npb25Jbk9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn1cIl0sXG4gICAgZ2V0TWVtYmVyc2hpcEZvclVzZXJJbk9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L21lbWJlcnNoaXBzL3t1c2VybmFtZX1cIl0sXG4gICAgbGlzdDogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zXCJdLFxuICAgIGxpc3RDaGlsZEluT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vdGVhbXNcIl0sXG4gICAgbGlzdERpc2N1c3Npb25Db21tZW50c0luT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50c1wiXSxcbiAgICBsaXN0RGlzY3Vzc2lvbnNJbk9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zXCJdLFxuICAgIGxpc3RGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3RlYW1zXCJdLFxuICAgIGxpc3RNZW1iZXJzSW5Pcmc6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9tZW1iZXJzXCJdLFxuICAgIGxpc3RQZW5kaW5nSW52aXRhdGlvbnNJbk9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2ludml0YXRpb25zXCJdLFxuICAgIGxpc3RQcm9qZWN0c0luT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcHJvamVjdHNcIl0sXG4gICAgbGlzdFJlcG9zSW5Pcmc6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9yZXBvc1wiXSxcbiAgICByZW1vdmVNZW1iZXJzaGlwRm9yVXNlckluT3JnOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiXSxcbiAgICByZW1vdmVQcm9qZWN0SW5Pcmc6IFtcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9wcm9qZWN0cy97cHJvamVjdF9pZH1cIl0sXG4gICAgcmVtb3ZlUmVwb0luT3JnOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcmVwb3Mve293bmVyfS97cmVwb31cIl0sXG4gICAgdXBkYXRlRGlzY3Vzc2lvbkNvbW1lbnRJbk9yZzogW1wiUEFUQ0ggL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9XCJdLFxuICAgIHVwZGF0ZURpc2N1c3Npb25Jbk9yZzogW1wiUEFUQ0ggL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfVwiXSxcbiAgICB1cGRhdGVJbk9yZzogW1wiUEFUQ0ggL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z31cIl1cbiAgfSxcbiAgdXNlcnM6IHtcbiAgICBhZGRFbWFpbEZvckF1dGhlbnRpY2F0ZWQ6IFtcIlBPU1QgL3VzZXIvZW1haWxzXCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImFkZEVtYWlsRm9yQXV0aGVudGljYXRlZFVzZXJcIl1cbiAgICB9XSxcbiAgICBhZGRFbWFpbEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL2VtYWlsc1wiXSxcbiAgICBibG9jazogW1wiUFVUIC91c2VyL2Jsb2Nrcy97dXNlcm5hbWV9XCJdLFxuICAgIGNoZWNrQmxvY2tlZDogW1wiR0VUIC91c2VyL2Jsb2Nrcy97dXNlcm5hbWV9XCJdLFxuICAgIGNoZWNrRm9sbG93aW5nRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2ZvbGxvd2luZy97dGFyZ2V0X3VzZXJ9XCJdLFxuICAgIGNoZWNrUGVyc29uSXNGb2xsb3dlZEJ5QXV0aGVudGljYXRlZDogW1wiR0VUIC91c2VyL2ZvbGxvd2luZy97dXNlcm5hbWV9XCJdLFxuICAgIGNyZWF0ZUdwZ0tleUZvckF1dGhlbnRpY2F0ZWQ6IFtcIlBPU1QgL3VzZXIvZ3BnX2tleXNcIiwge30sIHtcbiAgICAgIHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiY3JlYXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl1cbiAgICB9XSxcbiAgICBjcmVhdGVHcGdLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9ncGdfa2V5c1wiXSxcbiAgICBjcmVhdGVQdWJsaWNTc2hLZXlGb3JBdXRoZW50aWNhdGVkOiBbXCJQT1NUIC91c2VyL2tleXNcIiwge30sIHtcbiAgICAgIHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiY3JlYXRlUHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl1cbiAgICB9XSxcbiAgICBjcmVhdGVQdWJsaWNTc2hLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9rZXlzXCJdLFxuICAgIGRlbGV0ZUVtYWlsRm9yQXV0aGVudGljYXRlZDogW1wiREVMRVRFIC91c2VyL2VtYWlsc1wiLCB7fSwge1xuICAgICAgcmVuYW1lZDogW1widXNlcnNcIiwgXCJkZWxldGVFbWFpbEZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdXG4gICAgfV0sXG4gICAgZGVsZXRlRW1haWxGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiREVMRVRFIC91c2VyL2VtYWlsc1wiXSxcbiAgICBkZWxldGVHcGdLZXlGb3JBdXRoZW50aWNhdGVkOiBbXCJERUxFVEUgL3VzZXIvZ3BnX2tleXMve2dwZ19rZXlfaWR9XCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImRlbGV0ZUdwZ0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdXG4gICAgfV0sXG4gICAgZGVsZXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9ncGdfa2V5cy97Z3BnX2tleV9pZH1cIl0sXG4gICAgZGVsZXRlUHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZDogW1wiREVMRVRFIC91c2VyL2tleXMve2tleV9pZH1cIiwge30sIHtcbiAgICAgIHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiZGVsZXRlUHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl1cbiAgICB9XSxcbiAgICBkZWxldGVQdWJsaWNTc2hLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiREVMRVRFIC91c2VyL2tleXMve2tleV9pZH1cIl0sXG4gICAgZm9sbG93OiBbXCJQVVQgL3VzZXIvZm9sbG93aW5nL3t1c2VybmFtZX1cIl0sXG4gICAgZ2V0QXV0aGVudGljYXRlZDogW1wiR0VUIC91c2VyXCJdLFxuICAgIGdldEJ5VXNlcm5hbWU6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfVwiXSxcbiAgICBnZXRDb250ZXh0Rm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2hvdmVyY2FyZFwiXSxcbiAgICBnZXRHcGdLZXlGb3JBdXRoZW50aWNhdGVkOiBbXCJHRVQgL3VzZXIvZ3BnX2tleXMve2dwZ19rZXlfaWR9XCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImdldEdwZ0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdXG4gICAgfV0sXG4gICAgZ2V0R3BnS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9ncGdfa2V5cy97Z3BnX2tleV9pZH1cIl0sXG4gICAgZ2V0UHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZDogW1wiR0VUIC91c2VyL2tleXMve2tleV9pZH1cIiwge30sIHtcbiAgICAgIHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiZ2V0UHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl1cbiAgICB9XSxcbiAgICBnZXRQdWJsaWNTc2hLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2tleXMve2tleV9pZH1cIl0sXG4gICAgbGlzdDogW1wiR0VUIC91c2Vyc1wiXSxcbiAgICBsaXN0QmxvY2tlZEJ5QXV0aGVudGljYXRlZDogW1wiR0VUIC91c2VyL2Jsb2Nrc1wiLCB7fSwge1xuICAgICAgcmVuYW1lZDogW1widXNlcnNcIiwgXCJsaXN0QmxvY2tlZEJ5QXV0aGVudGljYXRlZFVzZXJcIl1cbiAgICB9XSxcbiAgICBsaXN0QmxvY2tlZEJ5QXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9ibG9ja3NcIl0sXG4gICAgbGlzdEVtYWlsc0ZvckF1dGhlbnRpY2F0ZWQ6IFtcIkdFVCAvdXNlci9lbWFpbHNcIiwge30sIHtcbiAgICAgIHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwibGlzdEVtYWlsc0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdXG4gICAgfV0sXG4gICAgbGlzdEVtYWlsc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvZW1haWxzXCJdLFxuICAgIGxpc3RGb2xsb3dlZEJ5QXV0aGVudGljYXRlZDogW1wiR0VUIC91c2VyL2ZvbGxvd2luZ1wiLCB7fSwge1xuICAgICAgcmVuYW1lZDogW1widXNlcnNcIiwgXCJsaXN0Rm9sbG93ZWRCeUF1dGhlbnRpY2F0ZWRVc2VyXCJdXG4gICAgfV0sXG4gICAgbGlzdEZvbGxvd2VkQnlBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2ZvbGxvd2luZ1wiXSxcbiAgICBsaXN0Rm9sbG93ZXJzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9mb2xsb3dlcnNcIl0sXG4gICAgbGlzdEZvbGxvd2Vyc0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9mb2xsb3dlcnNcIl0sXG4gICAgbGlzdEZvbGxvd2luZ0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9mb2xsb3dpbmdcIl0sXG4gICAgbGlzdEdwZ0tleXNGb3JBdXRoZW50aWNhdGVkOiBbXCJHRVQgL3VzZXIvZ3BnX2tleXNcIiwge30sIHtcbiAgICAgIHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwibGlzdEdwZ0tleXNGb3JBdXRoZW50aWNhdGVkVXNlclwiXVxuICAgIH1dLFxuICAgIGxpc3RHcGdLZXlzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9ncGdfa2V5c1wiXSxcbiAgICBsaXN0R3BnS2V5c0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ncGdfa2V5c1wiXSxcbiAgICBsaXN0UHVibGljRW1haWxzRm9yQXV0aGVudGljYXRlZDogW1wiR0VUIC91c2VyL3B1YmxpY19lbWFpbHNcIiwge30sIHtcbiAgICAgIHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwibGlzdFB1YmxpY0VtYWlsc0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdXG4gICAgfV0sXG4gICAgbGlzdFB1YmxpY0VtYWlsc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvcHVibGljX2VtYWlsc1wiXSxcbiAgICBsaXN0UHVibGljS2V5c0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9rZXlzXCJdLFxuICAgIGxpc3RQdWJsaWNTc2hLZXlzRm9yQXV0aGVudGljYXRlZDogW1wiR0VUIC91c2VyL2tleXNcIiwge30sIHtcbiAgICAgIHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwibGlzdFB1YmxpY1NzaEtleXNGb3JBdXRoZW50aWNhdGVkVXNlclwiXVxuICAgIH1dLFxuICAgIGxpc3RQdWJsaWNTc2hLZXlzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9rZXlzXCJdLFxuICAgIHNldFByaW1hcnlFbWFpbFZpc2liaWxpdHlGb3JBdXRoZW50aWNhdGVkOiBbXCJQQVRDSCAvdXNlci9lbWFpbC92aXNpYmlsaXR5XCIsIHt9LCB7XG4gICAgICByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcInNldFByaW1hcnlFbWFpbFZpc2liaWxpdHlGb3JBdXRoZW50aWNhdGVkVXNlclwiXVxuICAgIH1dLFxuICAgIHNldFByaW1hcnlFbWFpbFZpc2liaWxpdHlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUEFUQ0ggL3VzZXIvZW1haWwvdmlzaWJpbGl0eVwiXSxcbiAgICB1bmJsb2NrOiBbXCJERUxFVEUgL3VzZXIvYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgdW5mb2xsb3c6IFtcIkRFTEVURSAvdXNlci9mb2xsb3dpbmcve3VzZXJuYW1lfVwiXSxcbiAgICB1cGRhdGVBdXRoZW50aWNhdGVkOiBbXCJQQVRDSCAvdXNlclwiXVxuICB9XG59O1xuXG5jb25zdCBWRVJTSU9OID0gXCI1LjE2LjJcIjtcblxuZnVuY3Rpb24gZW5kcG9pbnRzVG9NZXRob2RzKG9jdG9raXQsIGVuZHBvaW50c01hcCkge1xuICBjb25zdCBuZXdNZXRob2RzID0ge307XG5cbiAgZm9yIChjb25zdCBbc2NvcGUsIGVuZHBvaW50c10gb2YgT2JqZWN0LmVudHJpZXMoZW5kcG9pbnRzTWFwKSkge1xuICAgIGZvciAoY29uc3QgW21ldGhvZE5hbWUsIGVuZHBvaW50XSBvZiBPYmplY3QuZW50cmllcyhlbmRwb2ludHMpKSB7XG4gICAgICBjb25zdCBbcm91dGUsIGRlZmF1bHRzLCBkZWNvcmF0aW9uc10gPSBlbmRwb2ludDtcbiAgICAgIGNvbnN0IFttZXRob2QsIHVybF0gPSByb3V0ZS5zcGxpdCgvIC8pO1xuICAgICAgY29uc3QgZW5kcG9pbnREZWZhdWx0cyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgICBtZXRob2QsXG4gICAgICAgIHVybFxuICAgICAgfSwgZGVmYXVsdHMpO1xuXG4gICAgICBpZiAoIW5ld01ldGhvZHNbc2NvcGVdKSB7XG4gICAgICAgIG5ld01ldGhvZHNbc2NvcGVdID0ge307XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNjb3BlTWV0aG9kcyA9IG5ld01ldGhvZHNbc2NvcGVdO1xuXG4gICAgICBpZiAoZGVjb3JhdGlvbnMpIHtcbiAgICAgICAgc2NvcGVNZXRob2RzW21ldGhvZE5hbWVdID0gZGVjb3JhdGUob2N0b2tpdCwgc2NvcGUsIG1ldGhvZE5hbWUsIGVuZHBvaW50RGVmYXVsdHMsIGRlY29yYXRpb25zKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHNjb3BlTWV0aG9kc1ttZXRob2ROYW1lXSA9IG9jdG9raXQucmVxdWVzdC5kZWZhdWx0cyhlbmRwb2ludERlZmF1bHRzKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3TWV0aG9kcztcbn1cblxuZnVuY3Rpb24gZGVjb3JhdGUob2N0b2tpdCwgc2NvcGUsIG1ldGhvZE5hbWUsIGRlZmF1bHRzLCBkZWNvcmF0aW9ucykge1xuICBjb25zdCByZXF1ZXN0V2l0aERlZmF1bHRzID0gb2N0b2tpdC5yZXF1ZXN0LmRlZmF1bHRzKGRlZmF1bHRzKTtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblxuICBmdW5jdGlvbiB3aXRoRGVjb3JhdGlvbnMoLi4uYXJncykge1xuICAgIC8vIEB0cy1pZ25vcmUgaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy8yNTQ4OFxuICAgIGxldCBvcHRpb25zID0gcmVxdWVzdFdpdGhEZWZhdWx0cy5lbmRwb2ludC5tZXJnZSguLi5hcmdzKTsgLy8gVGhlcmUgYXJlIGN1cnJlbnRseSBubyBvdGhlciBkZWNvcmF0aW9ucyB0aGFuIGAubWFwVG9EYXRhYFxuXG4gICAgaWYgKGRlY29yYXRpb25zLm1hcFRvRGF0YSkge1xuICAgICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMsIHtcbiAgICAgICAgZGF0YTogb3B0aW9uc1tkZWNvcmF0aW9ucy5tYXBUb0RhdGFdLFxuICAgICAgICBbZGVjb3JhdGlvbnMubWFwVG9EYXRhXTogdW5kZWZpbmVkXG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXF1ZXN0V2l0aERlZmF1bHRzKG9wdGlvbnMpO1xuICAgIH1cblxuICAgIGlmIChkZWNvcmF0aW9ucy5yZW5hbWVkKSB7XG4gICAgICBjb25zdCBbbmV3U2NvcGUsIG5ld01ldGhvZE5hbWVdID0gZGVjb3JhdGlvbnMucmVuYW1lZDtcbiAgICAgIG9jdG9raXQubG9nLndhcm4oYG9jdG9raXQuJHtzY29wZX0uJHttZXRob2ROYW1lfSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gb2N0b2tpdC4ke25ld1Njb3BlfS4ke25ld01ldGhvZE5hbWV9KClgKTtcbiAgICB9XG5cbiAgICBpZiAoZGVjb3JhdGlvbnMuZGVwcmVjYXRlZCkge1xuICAgICAgb2N0b2tpdC5sb2cud2FybihkZWNvcmF0aW9ucy5kZXByZWNhdGVkKTtcbiAgICB9XG5cbiAgICBpZiAoZGVjb3JhdGlvbnMucmVuYW1lZFBhcmFtZXRlcnMpIHtcbiAgICAgIC8vIEB0cy1pZ25vcmUgaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy8yNTQ4OFxuICAgICAgY29uc3Qgb3B0aW9ucyA9IHJlcXVlc3RXaXRoRGVmYXVsdHMuZW5kcG9pbnQubWVyZ2UoLi4uYXJncyk7XG5cbiAgICAgIGZvciAoY29uc3QgW25hbWUsIGFsaWFzXSBvZiBPYmplY3QuZW50cmllcyhkZWNvcmF0aW9ucy5yZW5hbWVkUGFyYW1ldGVycykpIHtcbiAgICAgICAgaWYgKG5hbWUgaW4gb3B0aW9ucykge1xuICAgICAgICAgIG9jdG9raXQubG9nLndhcm4oYFwiJHtuYW1lfVwiIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkIGZvciBcIm9jdG9raXQuJHtzY29wZX0uJHttZXRob2ROYW1lfSgpXCIuIFVzZSBcIiR7YWxpYXN9XCIgaW5zdGVhZGApO1xuXG4gICAgICAgICAgaWYgKCEoYWxpYXMgaW4gb3B0aW9ucykpIHtcbiAgICAgICAgICAgIG9wdGlvbnNbYWxpYXNdID0gb3B0aW9uc1tuYW1lXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkZWxldGUgb3B0aW9uc1tuYW1lXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVxdWVzdFdpdGhEZWZhdWx0cyhvcHRpb25zKTtcbiAgICB9IC8vIEB0cy1pZ25vcmUgaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy8yNTQ4OFxuXG5cbiAgICByZXR1cm4gcmVxdWVzdFdpdGhEZWZhdWx0cyguLi5hcmdzKTtcbiAgfVxuXG4gIHJldHVybiBPYmplY3QuYXNzaWduKHdpdGhEZWNvcmF0aW9ucywgcmVxdWVzdFdpdGhEZWZhdWx0cyk7XG59XG5cbmZ1bmN0aW9uIHJlc3RFbmRwb2ludE1ldGhvZHMob2N0b2tpdCkge1xuICBjb25zdCBhcGkgPSBlbmRwb2ludHNUb01ldGhvZHMob2N0b2tpdCwgRW5kcG9pbnRzKTtcbiAgcmV0dXJuIHtcbiAgICByZXN0OiBhcGlcbiAgfTtcbn1cbnJlc3RFbmRwb2ludE1ldGhvZHMuVkVSU0lPTiA9IFZFUlNJT047XG5mdW5jdGlvbiBsZWdhY3lSZXN0RW5kcG9pbnRNZXRob2RzKG9jdG9raXQpIHtcbiAgY29uc3QgYXBpID0gZW5kcG9pbnRzVG9NZXRob2RzKG9jdG9raXQsIEVuZHBvaW50cyk7XG4gIHJldHVybiBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgYXBpKSwge30sIHtcbiAgICByZXN0OiBhcGlcbiAgfSk7XG59XG5sZWdhY3lSZXN0RW5kcG9pbnRNZXRob2RzLlZFUlNJT04gPSBWRVJTSU9OO1xuXG5leHBvcnRzLmxlZ2FjeVJlc3RFbmRwb2ludE1ldGhvZHMgPSBsZWdhY3lSZXN0RW5kcG9pbnRNZXRob2RzO1xuZXhwb3J0cy5yZXN0RW5kcG9pbnRNZXRob2RzID0gcmVzdEVuZHBvaW50TWV0aG9kcztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmNvbnN0IFZFUlNJT04gPSBcIjIuMjEuM1wiO1xuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7XG4gICAgZW51bWVyYWJsZU9ubHkgJiYgKHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTtcbiAgICB9KSksIGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTtcbiAgfVxuXG4gIHJldHVybiBrZXlzO1xufVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkMih0YXJnZXQpIHtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc291cmNlID0gbnVsbCAhPSBhcmd1bWVudHNbaV0gPyBhcmd1bWVudHNbaV0gOiB7fTtcbiAgICBpICUgMiA/IG93bktleXMoT2JqZWN0KHNvdXJjZSksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pO1xuICAgIH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpIDogb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gb2JqO1xufVxuXG4vKipcbiAqIFNvbWUg4oCcbGlzdOKAnSByZXNwb25zZSB0aGF0IGNhbiBiZSBwYWdpbmF0ZWQgaGF2ZSBhIGRpZmZlcmVudCByZXNwb25zZSBzdHJ1Y3R1cmVcbiAqXG4gKiBUaGV5IGhhdmUgYSBgdG90YWxfY291bnRgIGtleSBpbiB0aGUgcmVzcG9uc2UgKHNlYXJjaCBhbHNvIGhhcyBgaW5jb21wbGV0ZV9yZXN1bHRzYCxcbiAqIC9pbnN0YWxsYXRpb24vcmVwb3NpdG9yaWVzIGFsc28gaGFzIGByZXBvc2l0b3J5X3NlbGVjdGlvbmApLCBhcyB3ZWxsIGFzIGEga2V5IHdpdGhcbiAqIHRoZSBsaXN0IG9mIHRoZSBpdGVtcyB3aGljaCBuYW1lIHZhcmllcyBmcm9tIGVuZHBvaW50IHRvIGVuZHBvaW50LlxuICpcbiAqIE9jdG9raXQgbm9ybWFsaXplcyB0aGVzZSByZXNwb25zZXMgc28gdGhhdCBwYWdpbmF0ZWQgcmVzdWx0cyBhcmUgYWx3YXlzIHJldHVybmVkIGZvbGxvd2luZ1xuICogdGhlIHNhbWUgc3RydWN0dXJlLiBPbmUgY2hhbGxlbmdlIGlzIHRoYXQgaWYgdGhlIGxpc3QgcmVzcG9uc2UgaGFzIG9ubHkgb25lIHBhZ2UsIG5vIExpbmtcbiAqIGhlYWRlciBpcyBwcm92aWRlZCwgc28gdGhpcyBoZWFkZXIgYWxvbmUgaXMgbm90IHN1ZmZpY2llbnQgdG8gY2hlY2sgd2V0aGVyIGEgcmVzcG9uc2UgaXNcbiAqIHBhZ2luYXRlZCBvciBub3QuXG4gKlxuICogV2UgY2hlY2sgaWYgYSBcInRvdGFsX2NvdW50XCIga2V5IGlzIHByZXNlbnQgaW4gdGhlIHJlc3BvbnNlIGRhdGEsIGJ1dCBhbHNvIG1ha2Ugc3VyZSB0aGF0XG4gKiBhIFwidXJsXCIgcHJvcGVydHkgaXMgbm90LCBhcyB0aGUgXCJHZXQgdGhlIGNvbWJpbmVkIHN0YXR1cyBmb3IgYSBzcGVjaWZpYyByZWZcIiBlbmRwb2ludCB3b3VsZFxuICogb3RoZXJ3aXNlIG1hdGNoOiBodHRwczovL2RldmVsb3Blci5naXRodWIuY29tL3YzL3JlcG9zL3N0YXR1c2VzLyNnZXQtdGhlLWNvbWJpbmVkLXN0YXR1cy1mb3ItYS1zcGVjaWZpYy1yZWZcbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplUGFnaW5hdGVkTGlzdFJlc3BvbnNlKHJlc3BvbnNlKSB7XG4gIC8vIGVuZHBvaW50cyBjYW4gcmVzcG9uZCB3aXRoIDIwNCBpZiByZXBvc2l0b3J5IGlzIGVtcHR5XG4gIGlmICghcmVzcG9uc2UuZGF0YSkge1xuICAgIHJldHVybiBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgcmVzcG9uc2UpLCB7fSwge1xuICAgICAgZGF0YTogW11cbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IHJlc3BvbnNlTmVlZHNOb3JtYWxpemF0aW9uID0gXCJ0b3RhbF9jb3VudFwiIGluIHJlc3BvbnNlLmRhdGEgJiYgIShcInVybFwiIGluIHJlc3BvbnNlLmRhdGEpO1xuICBpZiAoIXJlc3BvbnNlTmVlZHNOb3JtYWxpemF0aW9uKSByZXR1cm4gcmVzcG9uc2U7IC8vIGtlZXAgdGhlIGFkZGl0aW9uYWwgcHJvcGVydGllcyBpbnRhY3QgYXMgdGhlcmUgaXMgY3VycmVudGx5IG5vIG90aGVyIHdheVxuICAvLyB0byByZXRyaWV2ZSB0aGUgc2FtZSBpbmZvcm1hdGlvbi5cblxuICBjb25zdCBpbmNvbXBsZXRlUmVzdWx0cyA9IHJlc3BvbnNlLmRhdGEuaW5jb21wbGV0ZV9yZXN1bHRzO1xuICBjb25zdCByZXBvc2l0b3J5U2VsZWN0aW9uID0gcmVzcG9uc2UuZGF0YS5yZXBvc2l0b3J5X3NlbGVjdGlvbjtcbiAgY29uc3QgdG90YWxDb3VudCA9IHJlc3BvbnNlLmRhdGEudG90YWxfY291bnQ7XG4gIGRlbGV0ZSByZXNwb25zZS5kYXRhLmluY29tcGxldGVfcmVzdWx0cztcbiAgZGVsZXRlIHJlc3BvbnNlLmRhdGEucmVwb3NpdG9yeV9zZWxlY3Rpb247XG4gIGRlbGV0ZSByZXNwb25zZS5kYXRhLnRvdGFsX2NvdW50O1xuICBjb25zdCBuYW1lc3BhY2VLZXkgPSBPYmplY3Qua2V5cyhyZXNwb25zZS5kYXRhKVswXTtcbiAgY29uc3QgZGF0YSA9IHJlc3BvbnNlLmRhdGFbbmFtZXNwYWNlS2V5XTtcbiAgcmVzcG9uc2UuZGF0YSA9IGRhdGE7XG5cbiAgaWYgKHR5cGVvZiBpbmNvbXBsZXRlUmVzdWx0cyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJlc3BvbnNlLmRhdGEuaW5jb21wbGV0ZV9yZXN1bHRzID0gaW5jb21wbGV0ZVJlc3VsdHM7XG4gIH1cblxuICBpZiAodHlwZW9mIHJlcG9zaXRvcnlTZWxlY3Rpb24gIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXNwb25zZS5kYXRhLnJlcG9zaXRvcnlfc2VsZWN0aW9uID0gcmVwb3NpdG9yeVNlbGVjdGlvbjtcbiAgfVxuXG4gIHJlc3BvbnNlLmRhdGEudG90YWxfY291bnQgPSB0b3RhbENvdW50O1xuICByZXR1cm4gcmVzcG9uc2U7XG59XG5cbmZ1bmN0aW9uIGl0ZXJhdG9yKG9jdG9raXQsIHJvdXRlLCBwYXJhbWV0ZXJzKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSB0eXBlb2Ygcm91dGUgPT09IFwiZnVuY3Rpb25cIiA/IHJvdXRlLmVuZHBvaW50KHBhcmFtZXRlcnMpIDogb2N0b2tpdC5yZXF1ZXN0LmVuZHBvaW50KHJvdXRlLCBwYXJhbWV0ZXJzKTtcbiAgY29uc3QgcmVxdWVzdE1ldGhvZCA9IHR5cGVvZiByb3V0ZSA9PT0gXCJmdW5jdGlvblwiID8gcm91dGUgOiBvY3Rva2l0LnJlcXVlc3Q7XG4gIGNvbnN0IG1ldGhvZCA9IG9wdGlvbnMubWV0aG9kO1xuICBjb25zdCBoZWFkZXJzID0gb3B0aW9ucy5oZWFkZXJzO1xuICBsZXQgdXJsID0gb3B0aW9ucy51cmw7XG4gIHJldHVybiB7XG4gICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTogKCkgPT4gKHtcbiAgICAgIGFzeW5jIG5leHQoKSB7XG4gICAgICAgIGlmICghdXJsKSByZXR1cm4ge1xuICAgICAgICAgIGRvbmU6IHRydWVcbiAgICAgICAgfTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdE1ldGhvZCh7XG4gICAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICBoZWFkZXJzXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFJlc3BvbnNlID0gbm9ybWFsaXplUGFnaW5hdGVkTGlzdFJlc3BvbnNlKHJlc3BvbnNlKTsgLy8gYHJlc3BvbnNlLmhlYWRlcnMubGlua2AgZm9ybWF0OlxuICAgICAgICAgIC8vICc8aHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS91c2Vycy9hc2VlbWsvZm9sbG93ZXJzP3BhZ2U9Mj47IHJlbD1cIm5leHRcIiwgPGh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vdXNlcnMvYXNlZW1rL2ZvbGxvd2Vycz9wYWdlPTI+OyByZWw9XCJsYXN0XCInXG4gICAgICAgICAgLy8gc2V0cyBgdXJsYCB0byB1bmRlZmluZWQgaWYgXCJuZXh0XCIgVVJMIGlzIG5vdCBwcmVzZW50IG9yIGBsaW5rYCBoZWFkZXIgaXMgbm90IHNldFxuXG4gICAgICAgICAgdXJsID0gKChub3JtYWxpemVkUmVzcG9uc2UuaGVhZGVycy5saW5rIHx8IFwiXCIpLm1hdGNoKC88KFtePl0rKT47XFxzKnJlbD1cIm5leHRcIi8pIHx8IFtdKVsxXTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IG5vcm1hbGl6ZWRSZXNwb25zZVxuICAgICAgICAgIH07XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgaWYgKGVycm9yLnN0YXR1cyAhPT0gNDA5KSB0aHJvdyBlcnJvcjtcbiAgICAgICAgICB1cmwgPSBcIlwiO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICBzdGF0dXM6IDIwMCxcbiAgICAgICAgICAgICAgaGVhZGVyczoge30sXG4gICAgICAgICAgICAgIGRhdGE6IFtdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgfSlcbiAgfTtcbn1cblxuZnVuY3Rpb24gcGFnaW5hdGUob2N0b2tpdCwgcm91dGUsIHBhcmFtZXRlcnMsIG1hcEZuKSB7XG4gIGlmICh0eXBlb2YgcGFyYW1ldGVycyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgbWFwRm4gPSBwYXJhbWV0ZXJzO1xuICAgIHBhcmFtZXRlcnMgPSB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gZ2F0aGVyKG9jdG9raXQsIFtdLCBpdGVyYXRvcihvY3Rva2l0LCByb3V0ZSwgcGFyYW1ldGVycylbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCksIG1hcEZuKTtcbn1cblxuZnVuY3Rpb24gZ2F0aGVyKG9jdG9raXQsIHJlc3VsdHMsIGl0ZXJhdG9yLCBtYXBGbikge1xuICByZXR1cm4gaXRlcmF0b3IubmV4dCgpLnRoZW4ocmVzdWx0ID0+IHtcbiAgICBpZiAocmVzdWx0LmRvbmUpIHtcbiAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cblxuICAgIGxldCBlYXJseUV4aXQgPSBmYWxzZTtcblxuICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICBlYXJseUV4aXQgPSB0cnVlO1xuICAgIH1cblxuICAgIHJlc3VsdHMgPSByZXN1bHRzLmNvbmNhdChtYXBGbiA/IG1hcEZuKHJlc3VsdC52YWx1ZSwgZG9uZSkgOiByZXN1bHQudmFsdWUuZGF0YSk7XG5cbiAgICBpZiAoZWFybHlFeGl0KSB7XG4gICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG5cbiAgICByZXR1cm4gZ2F0aGVyKG9jdG9raXQsIHJlc3VsdHMsIGl0ZXJhdG9yLCBtYXBGbik7XG4gIH0pO1xufVxuXG5jb25zdCBjb21wb3NlUGFnaW5hdGVSZXN0ID0gT2JqZWN0LmFzc2lnbihwYWdpbmF0ZSwge1xuICBpdGVyYXRvclxufSk7XG5cbmNvbnN0IHBhZ2luYXRpbmdFbmRwb2ludHMgPSBbXCJHRVQgL2FwcC9ob29rL2RlbGl2ZXJpZXNcIiwgXCJHRVQgL2FwcC9pbnN0YWxsYXRpb25zXCIsIFwiR0VUIC9hcHBsaWNhdGlvbnMvZ3JhbnRzXCIsIFwiR0VUIC9hdXRob3JpemF0aW9uc1wiLCBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2FjdGlvbnMvcGVybWlzc2lvbnMvb3JnYW5pemF0aW9uc1wiLCBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2FjdGlvbnMvcnVubmVyLWdyb3Vwc1wiLCBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2FjdGlvbnMvcnVubmVyLWdyb3Vwcy97cnVubmVyX2dyb3VwX2lkfS9vcmdhbml6YXRpb25zXCIsIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vYWN0aW9ucy9ydW5uZXItZ3JvdXBzL3tydW5uZXJfZ3JvdXBfaWR9L3J1bm5lcnNcIiwgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9hY3Rpb25zL3J1bm5lcnNcIiwgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9hdWRpdC1sb2dcIiwgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzXCIsIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vc2V0dGluZ3MvYmlsbGluZy9hZHZhbmNlZC1zZWN1cml0eVwiLCBcIkdFVCAvZXZlbnRzXCIsIFwiR0VUIC9naXN0c1wiLCBcIkdFVCAvZ2lzdHMvcHVibGljXCIsIFwiR0VUIC9naXN0cy9zdGFycmVkXCIsIFwiR0VUIC9naXN0cy97Z2lzdF9pZH0vY29tbWVudHNcIiwgXCJHRVQgL2dpc3RzL3tnaXN0X2lkfS9jb21taXRzXCIsIFwiR0VUIC9naXN0cy97Z2lzdF9pZH0vZm9ya3NcIiwgXCJHRVQgL2luc3RhbGxhdGlvbi9yZXBvc2l0b3JpZXNcIiwgXCJHRVQgL2lzc3Vlc1wiLCBcIkdFVCAvbGljZW5zZXNcIiwgXCJHRVQgL21hcmtldHBsYWNlX2xpc3RpbmcvcGxhbnNcIiwgXCJHRVQgL21hcmtldHBsYWNlX2xpc3RpbmcvcGxhbnMve3BsYW5faWR9L2FjY291bnRzXCIsIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3N0dWJiZWQvcGxhbnNcIiwgXCJHRVQgL21hcmtldHBsYWNlX2xpc3Rpbmcvc3R1YmJlZC9wbGFucy97cGxhbl9pZH0vYWNjb3VudHNcIiwgXCJHRVQgL25ldHdvcmtzL3tvd25lcn0ve3JlcG99L2V2ZW50c1wiLCBcIkdFVCAvbm90aWZpY2F0aW9uc1wiLCBcIkdFVCAvb3JnYW5pemF0aW9uc1wiLCBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2NhY2hlL3VzYWdlLWJ5LXJlcG9zaXRvcnlcIiwgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9yZXBvc2l0b3JpZXNcIiwgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXItZ3JvdXBzXCIsIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVyLWdyb3Vwcy97cnVubmVyX2dyb3VwX2lkfS9yZXBvc2l0b3JpZXNcIiwgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXItZ3JvdXBzL3tydW5uZXJfZ3JvdXBfaWR9L3J1bm5lcnNcIiwgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzXCIsIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0c1wiLCBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIiwgXCJHRVQgL29yZ3Mve29yZ30vYXVkaXQtbG9nXCIsIFwiR0VUIC9vcmdzL3tvcmd9L2Jsb2Nrc1wiLCBcIkdFVCAvb3Jncy97b3JnfS9jb2RlLXNjYW5uaW5nL2FsZXJ0c1wiLCBcIkdFVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzXCIsIFwiR0VUIC9vcmdzL3tvcmd9L2NyZWRlbnRpYWwtYXV0aG9yaXphdGlvbnNcIiwgXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzXCIsIFwiR0VUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiLCBcIkdFVCAvb3Jncy97b3JnfS9ldmVudHNcIiwgXCJHRVQgL29yZ3Mve29yZ30vZXh0ZXJuYWwtZ3JvdXBzXCIsIFwiR0VUIC9vcmdzL3tvcmd9L2ZhaWxlZF9pbnZpdGF0aW9uc1wiLCBcIkdFVCAvb3Jncy97b3JnfS9ob29rc1wiLCBcIkdFVCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllc1wiLCBcIkdFVCAvb3Jncy97b3JnfS9pbnN0YWxsYXRpb25zXCIsIFwiR0VUIC9vcmdzL3tvcmd9L2ludml0YXRpb25zXCIsIFwiR0VUIC9vcmdzL3tvcmd9L2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfS90ZWFtc1wiLCBcIkdFVCAvb3Jncy97b3JnfS9pc3N1ZXNcIiwgXCJHRVQgL29yZ3Mve29yZ30vbWVtYmVyc1wiLCBcIkdFVCAvb3Jncy97b3JnfS9taWdyYXRpb25zXCIsIFwiR0VUIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCIsIFwiR0VUIC9vcmdzL3tvcmd9L291dHNpZGVfY29sbGFib3JhdG9yc1wiLCBcIkdFVCAvb3Jncy97b3JnfS9wYWNrYWdlc1wiLCBcIkdFVCAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiLCBcIkdFVCAvb3Jncy97b3JnfS9wcm9qZWN0c1wiLCBcIkdFVCAvb3Jncy97b3JnfS9wdWJsaWNfbWVtYmVyc1wiLCBcIkdFVCAvb3Jncy97b3JnfS9yZXBvc1wiLCBcIkdFVCAvb3Jncy97b3JnfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzXCIsIFwiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL2JpbGxpbmcvYWR2YW5jZWQtc2VjdXJpdHlcIiwgXCJHRVQgL29yZ3Mve29yZ30vdGVhbS1zeW5jL2dyb3Vwc1wiLCBcIkdFVCAvb3Jncy97b3JnfS90ZWFtc1wiLCBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9uc1wiLCBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzXCIsIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfbnVtYmVyfS9yZWFjdGlvbnNcIiwgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9yZWFjdGlvbnNcIiwgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vaW52aXRhdGlvbnNcIiwgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vbWVtYmVyc1wiLCBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9wcm9qZWN0c1wiLCBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9yZXBvc1wiLCBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS90ZWFtc1wiLCBcIkdFVCAvcHJvamVjdHMvY29sdW1ucy97Y29sdW1uX2lkfS9jYXJkc1wiLCBcIkdFVCAvcHJvamVjdHMve3Byb2plY3RfaWR9L2NvbGxhYm9yYXRvcnNcIiwgXCJHRVQgL3Byb2plY3RzL3twcm9qZWN0X2lkfS9jb2x1bW5zXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2FydGlmYWN0c1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9jYWNoZXNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVyc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXJ0aWZhY3RzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXR0ZW1wdHMve2F0dGVtcHRfbnVtYmVyfS9qb2JzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vam9ic1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9zZWNyZXRzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93c1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3Mve3dvcmtmbG93X2lkfS9ydW5zXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hc3NpZ25lZXNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1ydW5zL3tjaGVja19ydW5faWR9L2Fubm90YXRpb25zXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1zdWl0ZXMve2NoZWNrX3N1aXRlX2lkfS9jaGVjay1ydW5zXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0c1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn0vaW5zdGFuY2VzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FuYWx5c2VzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL2RldmNvbnRhaW5lcnNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvc2VjcmV0c1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29sbGFib3JhdG9yc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve2NvbW1pdF9zaGF9L2NvbW1lbnRzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tjb21taXRfc2hhfS9wdWxsc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfS9jaGVjay1ydW5zXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L2NoZWNrLXN1aXRlc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfS9zdGF0dXNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vc3RhdHVzZXNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbnRyaWJ1dG9yc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9zZWNyZXRzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50c1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHMve2RlcGxveW1lbnRfaWR9L3N0YXR1c2VzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2V2ZW50c1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZm9ya3NcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9tYXRjaGluZy1yZWZzL3tyZWZ9XCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludml0YXRpb25zXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50c1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9ldmVudHNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9jb21tZW50c1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2V2ZW50c1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xhYmVsc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L3JlYWN0aW9uc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L3RpbWVsaW5lXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9rZXlzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sYWJlbHNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXMve21pbGVzdG9uZV9udW1iZXJ9L2xhYmVsc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbm90aWZpY2F0aW9uc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXMvYnVpbGRzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wcm9qZWN0c1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2NvbW1lbnRzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2NvbW1pdHNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vZmlsZXNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmVxdWVzdGVkX3Jldmlld2Vyc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH0vY29tbWVudHNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vYXNzZXRzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vcmVhY3Rpb25zXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9L2xvY2F0aW9uc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3RhcmdhemVyc1wiLCBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3Vic2NyaWJlcnNcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RhZ3NcIiwgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RlYW1zXCIsIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90b3BpY3NcIiwgXCJHRVQgL3JlcG9zaXRvcmllc1wiLCBcIkdFVCAvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHNcIiwgXCJHRVQgL3NlYXJjaC9jb2RlXCIsIFwiR0VUIC9zZWFyY2gvY29tbWl0c1wiLCBcIkdFVCAvc2VhcmNoL2lzc3Vlc1wiLCBcIkdFVCAvc2VhcmNoL2xhYmVsc1wiLCBcIkdFVCAvc2VhcmNoL3JlcG9zaXRvcmllc1wiLCBcIkdFVCAvc2VhcmNoL3RvcGljc1wiLCBcIkdFVCAvc2VhcmNoL3VzZXJzXCIsIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vZGlzY3Vzc2lvbnNcIiwgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzXCIsIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9L3JlYWN0aW9uc1wiLCBcIkdFVCAvdGVhbXMve3RlYW1faWR9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vcmVhY3Rpb25zXCIsIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vaW52aXRhdGlvbnNcIiwgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9tZW1iZXJzXCIsIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vcHJvamVjdHNcIiwgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9yZXBvc1wiLCBcIkdFVCAvdGVhbXMve3RlYW1faWR9L3RlYW1zXCIsIFwiR0VUIC91c2VyL2Jsb2Nrc1wiLCBcIkdFVCAvdXNlci9jb2Rlc3BhY2VzXCIsIFwiR0VUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0c1wiLCBcIkdFVCAvdXNlci9lbWFpbHNcIiwgXCJHRVQgL3VzZXIvZm9sbG93ZXJzXCIsIFwiR0VUIC91c2VyL2ZvbGxvd2luZ1wiLCBcIkdFVCAvdXNlci9ncGdfa2V5c1wiLCBcIkdFVCAvdXNlci9pbnN0YWxsYXRpb25zXCIsIFwiR0VUIC91c2VyL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCIsIFwiR0VUIC91c2VyL2lzc3Vlc1wiLCBcIkdFVCAvdXNlci9rZXlzXCIsIFwiR0VUIC91c2VyL21hcmtldHBsYWNlX3B1cmNoYXNlc1wiLCBcIkdFVCAvdXNlci9tYXJrZXRwbGFjZV9wdXJjaGFzZXMvc3R1YmJlZFwiLCBcIkdFVCAvdXNlci9tZW1iZXJzaGlwcy9vcmdzXCIsIFwiR0VUIC91c2VyL21pZ3JhdGlvbnNcIiwgXCJHRVQgL3VzZXIvbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIiwgXCJHRVQgL3VzZXIvb3Jnc1wiLCBcIkdFVCAvdXNlci9wYWNrYWdlc1wiLCBcIkdFVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiLCBcIkdFVCAvdXNlci9wdWJsaWNfZW1haWxzXCIsIFwiR0VUIC91c2VyL3JlcG9zXCIsIFwiR0VUIC91c2VyL3JlcG9zaXRvcnlfaW52aXRhdGlvbnNcIiwgXCJHRVQgL3VzZXIvc3RhcnJlZFwiLCBcIkdFVCAvdXNlci9zdWJzY3JpcHRpb25zXCIsIFwiR0VUIC91c2VyL3RlYW1zXCIsIFwiR0VUIC91c2Vyc1wiLCBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ldmVudHNcIiwgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzL29yZ3Mve29yZ31cIiwgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzL3B1YmxpY1wiLCBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9mb2xsb3dlcnNcIiwgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZm9sbG93aW5nXCIsIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2dpc3RzXCIsIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2dwZ19rZXlzXCIsIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2tleXNcIiwgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vb3Jnc1wiLCBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlc1wiLCBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wcm9qZWN0c1wiLCBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9yZWNlaXZlZF9ldmVudHNcIiwgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcmVjZWl2ZWRfZXZlbnRzL3B1YmxpY1wiLCBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9yZXBvc1wiLCBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zdGFycmVkXCIsIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3N1YnNjcmlwdGlvbnNcIl07XG5cbmZ1bmN0aW9uIGlzUGFnaW5hdGluZ0VuZHBvaW50KGFyZykge1xuICBpZiAodHlwZW9mIGFyZyA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiBwYWdpbmF0aW5nRW5kcG9pbnRzLmluY2x1ZGVzKGFyZyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIG9jdG9raXQgT2N0b2tpdCBpbnN0YW5jZVxuICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBwYXNzZWQgdG8gT2N0b2tpdCBjb25zdHJ1Y3RvclxuICovXG5cbmZ1bmN0aW9uIHBhZ2luYXRlUmVzdChvY3Rva2l0KSB7XG4gIHJldHVybiB7XG4gICAgcGFnaW5hdGU6IE9iamVjdC5hc3NpZ24ocGFnaW5hdGUuYmluZChudWxsLCBvY3Rva2l0KSwge1xuICAgICAgaXRlcmF0b3I6IGl0ZXJhdG9yLmJpbmQobnVsbCwgb2N0b2tpdClcbiAgICB9KVxuICB9O1xufVxucGFnaW5hdGVSZXN0LlZFUlNJT04gPSBWRVJTSU9OO1xuXG5leHBvcnRzLmNvbXBvc2VQYWdpbmF0ZVJlc3QgPSBjb21wb3NlUGFnaW5hdGVSZXN0O1xuZXhwb3J0cy5pc1BhZ2luYXRpbmdFbmRwb2ludCA9IGlzUGFnaW5hdGluZ0VuZHBvaW50O1xuZXhwb3J0cy5wYWdpbmF0ZVJlc3QgPSBwYWdpbmF0ZVJlc3Q7XG5leHBvcnRzLnBhZ2luYXRpbmdFbmRwb2ludHMgPSBwYWdpbmF0aW5nRW5kcG9pbnRzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH0pO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0T2N0b2tpdE9wdGlvbnMgPSBleHBvcnRzLkdpdEh1YiA9IGV4cG9ydHMuZGVmYXVsdHMgPSBleHBvcnRzLmNvbnRleHQgPSB2b2lkIDA7XG5jb25zdCBDb250ZXh0ID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL2NvbnRleHRcIikpO1xuY29uc3QgVXRpbHMgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIi4vaW50ZXJuYWwvdXRpbHNcIikpO1xuLy8gb2N0b2tpdCArIHBsdWdpbnNcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCJAb2N0b2tpdC9jb3JlXCIpO1xuY29uc3QgcGx1Z2luX3Jlc3RfZW5kcG9pbnRfbWV0aG9kc18xID0gcmVxdWlyZShcIkBvY3Rva2l0L3BsdWdpbi1yZXN0LWVuZHBvaW50LW1ldGhvZHNcIik7XG5jb25zdCBwbHVnaW5fcGFnaW5hdGVfcmVzdF8xID0gcmVxdWlyZShcIkBvY3Rva2l0L3BsdWdpbi1wYWdpbmF0ZS1yZXN0XCIpO1xuZXhwb3J0cy5jb250ZXh0ID0gbmV3IENvbnRleHQuQ29udGV4dCgpO1xuY29uc3QgYmFzZVVybCA9IFV0aWxzLmdldEFwaUJhc2VVcmwoKTtcbmV4cG9ydHMuZGVmYXVsdHMgPSB7XG4gICAgYmFzZVVybCxcbiAgICByZXF1ZXN0OiB7XG4gICAgICAgIGFnZW50OiBVdGlscy5nZXRQcm94eUFnZW50KGJhc2VVcmwpXG4gICAgfVxufTtcbmV4cG9ydHMuR2l0SHViID0gY29yZV8xLk9jdG9raXQucGx1Z2luKHBsdWdpbl9yZXN0X2VuZHBvaW50X21ldGhvZHNfMS5yZXN0RW5kcG9pbnRNZXRob2RzLCBwbHVnaW5fcGFnaW5hdGVfcmVzdF8xLnBhZ2luYXRlUmVzdCkuZGVmYXVsdHMoZXhwb3J0cy5kZWZhdWx0cyk7XG4vKipcbiAqIENvbnZpZW5jZSBmdW5jdGlvbiB0byBjb3JyZWN0bHkgZm9ybWF0IE9jdG9raXQgT3B0aW9ucyB0byBwYXNzIGludG8gdGhlIGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSAgICAgdG9rZW4gICAgdGhlIHJlcG8gUEFUIG9yIEdJVEhVQl9UT0tFTlxuICogQHBhcmFtICAgICBvcHRpb25zICBvdGhlciBvcHRpb25zIHRvIHNldFxuICovXG5mdW5jdGlvbiBnZXRPY3Rva2l0T3B0aW9ucyh0b2tlbiwgb3B0aW9ucykge1xuICAgIGNvbnN0IG9wdHMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zIHx8IHt9KTsgLy8gU2hhbGxvdyBjbG9uZSAtIGRvbid0IG11dGF0ZSB0aGUgb2JqZWN0IHByb3ZpZGVkIGJ5IHRoZSBjYWxsZXJcbiAgICAvLyBBdXRoXG4gICAgY29uc3QgYXV0aCA9IFV0aWxzLmdldEF1dGhTdHJpbmcodG9rZW4sIG9wdHMpO1xuICAgIGlmIChhdXRoKSB7XG4gICAgICAgIG9wdHMuYXV0aCA9IGF1dGg7XG4gICAgfVxuICAgIHJldHVybiBvcHRzO1xufVxuZXhwb3J0cy5nZXRPY3Rva2l0T3B0aW9ucyA9IGdldE9jdG9raXRPcHRpb25zO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbHMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9KTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldE9jdG9raXQgPSBleHBvcnRzLmNvbnRleHQgPSB2b2lkIDA7XG5jb25zdCBDb250ZXh0ID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL2NvbnRleHRcIikpO1xuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoXCIuL3V0aWxzXCIpO1xuZXhwb3J0cy5jb250ZXh0ID0gbmV3IENvbnRleHQuQ29udGV4dCgpO1xuLyoqXG4gKiBSZXR1cm5zIGEgaHlkcmF0ZWQgb2N0b2tpdCByZWFkeSB0byB1c2UgZm9yIEdpdEh1YiBBY3Rpb25zXG4gKlxuICogQHBhcmFtICAgICB0b2tlbiAgICB0aGUgcmVwbyBQQVQgb3IgR0lUSFVCX1RPS0VOXG4gKiBAcGFyYW0gICAgIG9wdGlvbnMgIG90aGVyIG9wdGlvbnMgdG8gc2V0XG4gKi9cbmZ1bmN0aW9uIGdldE9jdG9raXQodG9rZW4sIG9wdGlvbnMsIC4uLmFkZGl0aW9uYWxQbHVnaW5zKSB7XG4gICAgY29uc3QgR2l0SHViV2l0aFBsdWdpbnMgPSB1dGlsc18xLkdpdEh1Yi5wbHVnaW4oLi4uYWRkaXRpb25hbFBsdWdpbnMpO1xuICAgIHJldHVybiBuZXcgR2l0SHViV2l0aFBsdWdpbnModXRpbHNfMS5nZXRPY3Rva2l0T3B0aW9ucyh0b2tlbiwgb3B0aW9ucykpO1xufVxuZXhwb3J0cy5nZXRPY3Rva2l0ID0gZ2V0T2N0b2tpdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdpdGh1Yi5qcy5tYXAiLAogICAgIm1vZHVsZS5leHBvcnRzID0gVHJhdmVyc2U7XG5mdW5jdGlvbiBUcmF2ZXJzZSAob2JqKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFRyYXZlcnNlKSkgcmV0dXJuIG5ldyBUcmF2ZXJzZShvYmopO1xuICAgIHRoaXMudmFsdWUgPSBvYmo7XG59XG5cblRyYXZlcnNlLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAocHMpIHtcbiAgICB2YXIgbm9kZSA9IHRoaXMudmFsdWU7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcy5sZW5ndGg7IGkgKyspIHtcbiAgICAgICAgdmFyIGtleSA9IHBzW2ldO1xuICAgICAgICBpZiAoIU9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5vZGUsIGtleSkpIHtcbiAgICAgICAgICAgIG5vZGUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBub2RlID0gbm9kZVtrZXldO1xuICAgIH1cbiAgICByZXR1cm4gbm9kZTtcbn07XG5cblRyYXZlcnNlLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAocHMsIHZhbHVlKSB7XG4gICAgdmFyIG5vZGUgPSB0aGlzLnZhbHVlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHMubGVuZ3RoIC0gMTsgaSArKykge1xuICAgICAgICB2YXIga2V5ID0gcHNbaV07XG4gICAgICAgIGlmICghT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobm9kZSwga2V5KSkgbm9kZVtrZXldID0ge307XG4gICAgICAgIG5vZGUgPSBub2RlW2tleV07XG4gICAgfVxuICAgIG5vZGVbcHNbaV1dID0gdmFsdWU7XG4gICAgcmV0dXJuIHZhbHVlO1xufTtcblxuVHJhdmVyc2UucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uIChjYikge1xuICAgIHJldHVybiB3YWxrKHRoaXMudmFsdWUsIGNiLCB0cnVlKTtcbn07XG5cblRyYXZlcnNlLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgdGhpcy52YWx1ZSA9IHdhbGsodGhpcy52YWx1ZSwgY2IsIGZhbHNlKTtcbiAgICByZXR1cm4gdGhpcy52YWx1ZTtcbn07XG5cblRyYXZlcnNlLnByb3RvdHlwZS5yZWR1Y2UgPSBmdW5jdGlvbiAoY2IsIGluaXQpIHtcbiAgICB2YXIgc2tpcCA9IGFyZ3VtZW50cy5sZW5ndGggPT09IDE7XG4gICAgdmFyIGFjYyA9IHNraXAgPyB0aGlzLnZhbHVlIDogaW5pdDtcbiAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzUm9vdCB8fCAhc2tpcCkge1xuICAgICAgICAgICAgYWNjID0gY2IuY2FsbCh0aGlzLCBhY2MsIHgpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGFjYztcbn07XG5cblRyYXZlcnNlLnByb3RvdHlwZS5kZWVwRXF1YWwgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgJ2RlZXBFcXVhbCByZXF1aXJlcyBleGFjdGx5IG9uZSBvYmplY3QgdG8gY29tcGFyZSBhZ2FpbnN0J1xuICAgICAgICApO1xuICAgIH1cbiAgICBcbiAgICB2YXIgZXF1YWwgPSB0cnVlO1xuICAgIHZhciBub2RlID0gb2JqO1xuICAgIFxuICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbiAoeSkge1xuICAgICAgICB2YXIgbm90RXF1YWwgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXF1YWwgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vdGhpcy5zdG9wKCk7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9KS5iaW5kKHRoaXMpO1xuICAgICAgICBcbiAgICAgICAgLy9pZiAobm9kZSA9PT0gdW5kZWZpbmVkIHx8IG5vZGUgPT09IG51bGwpIHJldHVybiBub3RFcXVhbCgpO1xuICAgICAgICBcbiAgICAgICAgaWYgKCF0aGlzLmlzUm9vdCkge1xuICAgICAgICAvKlxuICAgICAgICAgICAgaWYgKCFPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChub2RlLCB0aGlzLmtleSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbm90RXF1YWwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKi9cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygbm9kZSAhPT0gJ29iamVjdCcpIHJldHVybiBub3RFcXVhbCgpO1xuICAgICAgICAgICAgbm9kZSA9IG5vZGVbdGhpcy5rZXldO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICB2YXIgeCA9IG5vZGU7XG4gICAgICAgIFxuICAgICAgICB0aGlzLnBvc3QoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbm9kZSA9IHg7XG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgdmFyIHRvUyA9IGZ1bmN0aW9uIChvKSB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pO1xuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHRoaXMuY2lyY3VsYXIpIHtcbiAgICAgICAgICAgIGlmIChUcmF2ZXJzZShvYmopLmdldCh0aGlzLmNpcmN1bGFyLnBhdGgpICE9PSB4KSBub3RFcXVhbCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiB4ICE9PSB0eXBlb2YgeSkge1xuICAgICAgICAgICAgbm90RXF1YWwoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh4ID09PSBudWxsIHx8IHkgPT09IG51bGwgfHwgeCA9PT0gdW5kZWZpbmVkIHx8IHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKHggIT09IHkpIG5vdEVxdWFsKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoeC5fX3Byb3RvX18gIT09IHkuX19wcm90b19fKSB7XG4gICAgICAgICAgICBub3RFcXVhbCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHggPT09IHkpIHtcbiAgICAgICAgICAgIC8vIG5vcFxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiB4ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBpZiAoeCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICAgICAgICAgIC8vIGJvdGggcmVnZXhwcyBvbiBhY2NvdW50IG9mIHRoZSBfX3Byb3RvX18gY2hlY2tcbiAgICAgICAgICAgICAgICBpZiAoeC50b1N0cmluZygpICE9IHkudG9TdHJpbmcoKSkgbm90RXF1YWwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHggIT09IHkpIG5vdEVxdWFsKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHggPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBpZiAodG9TKHkpID09PSAnW29iamVjdCBBcmd1bWVudHNdJ1xuICAgICAgICAgICAgfHwgdG9TKHgpID09PSAnW29iamVjdCBBcmd1bWVudHNdJykge1xuICAgICAgICAgICAgICAgIGlmICh0b1MoeCkgIT09IHRvUyh5KSkge1xuICAgICAgICAgICAgICAgICAgICBub3RFcXVhbCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHggaW5zdGFuY2VvZiBEYXRlIHx8IHkgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCEoeCBpbnN0YW5jZW9mIERhdGUpIHx8ICEoeSBpbnN0YW5jZW9mIERhdGUpXG4gICAgICAgICAgICAgICAgfHwgeC5nZXRUaW1lKCkgIT09IHkuZ2V0VGltZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vdEVxdWFsKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIGt4ID0gT2JqZWN0LmtleXMoeCk7XG4gICAgICAgICAgICAgICAgdmFyIGt5ID0gT2JqZWN0LmtleXMoeSk7XG4gICAgICAgICAgICAgICAgaWYgKGt4Lmxlbmd0aCAhPT0ga3kubGVuZ3RoKSByZXR1cm4gbm90RXF1YWwoKTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGt4Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBrID0ga3hbaV07XG4gICAgICAgICAgICAgICAgICAgIGlmICghT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwoeSwgaykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdEVxdWFsKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBcbiAgICByZXR1cm4gZXF1YWw7XG59O1xuXG5UcmF2ZXJzZS5wcm90b3R5cGUucGF0aHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGFjYyA9IFtdO1xuICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbiAoeCkge1xuICAgICAgICBhY2MucHVzaCh0aGlzLnBhdGgpOyBcbiAgICB9KTtcbiAgICByZXR1cm4gYWNjO1xufTtcblxuVHJhdmVyc2UucHJvdG90eXBlLm5vZGVzID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBhY2MgPSBbXTtcbiAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgYWNjLnB1c2godGhpcy5ub2RlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gYWNjO1xufTtcblxuVHJhdmVyc2UucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwYXJlbnRzID0gW10sIG5vZGVzID0gW107XG4gICAgXG4gICAgcmV0dXJuIChmdW5jdGlvbiBjbG9uZSAoc3JjKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHBhcmVudHNbaV0gPT09IHNyYykge1xuICAgICAgICAgICAgICAgIHJldHVybiBub2Rlc1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiBzcmMgPT09ICdvYmplY3QnICYmIHNyYyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIGRzdCA9IGNvcHkoc3JjKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcGFyZW50cy5wdXNoKHNyYyk7XG4gICAgICAgICAgICBub2Rlcy5wdXNoKGRzdCk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHNyYykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgZHN0W2tleV0gPSBjbG9uZShzcmNba2V5XSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcGFyZW50cy5wb3AoKTtcbiAgICAgICAgICAgIG5vZGVzLnBvcCgpO1xuICAgICAgICAgICAgcmV0dXJuIGRzdDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBzcmM7XG4gICAgICAgIH1cbiAgICB9KSh0aGlzLnZhbHVlKTtcbn07XG5cbmZ1bmN0aW9uIHdhbGsgKHJvb3QsIGNiLCBpbW11dGFibGUpIHtcbiAgICB2YXIgcGF0aCA9IFtdO1xuICAgIHZhciBwYXJlbnRzID0gW107XG4gICAgdmFyIGFsaXZlID0gdHJ1ZTtcbiAgICBcbiAgICByZXR1cm4gKGZ1bmN0aW9uIHdhbGtlciAobm9kZV8pIHtcbiAgICAgICAgdmFyIG5vZGUgPSBpbW11dGFibGUgPyBjb3B5KG5vZGVfKSA6IG5vZGVfO1xuICAgICAgICB2YXIgbW9kaWZpZXJzID0ge307XG4gICAgICAgIFxuICAgICAgICB2YXIgc3RhdGUgPSB7XG4gICAgICAgICAgICBub2RlIDogbm9kZSxcbiAgICAgICAgICAgIG5vZGVfIDogbm9kZV8sXG4gICAgICAgICAgICBwYXRoIDogW10uY29uY2F0KHBhdGgpLFxuICAgICAgICAgICAgcGFyZW50IDogcGFyZW50cy5zbGljZSgtMSlbMF0sXG4gICAgICAgICAgICBrZXkgOiBwYXRoLnNsaWNlKC0xKVswXSxcbiAgICAgICAgICAgIGlzUm9vdCA6IHBhdGgubGVuZ3RoID09PSAwLFxuICAgICAgICAgICAgbGV2ZWwgOiBwYXRoLmxlbmd0aCxcbiAgICAgICAgICAgIGNpcmN1bGFyIDogbnVsbCxcbiAgICAgICAgICAgIHVwZGF0ZSA6IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFzdGF0ZS5pc1Jvb3QpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUucGFyZW50Lm5vZGVbc3RhdGUua2V5XSA9IHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHN0YXRlLm5vZGUgPSB4O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdkZWxldGUnIDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBzdGF0ZS5wYXJlbnQubm9kZVtzdGF0ZS5rZXldO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlbW92ZSA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzdGF0ZS5wYXJlbnQubm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUucGFyZW50Lm5vZGUuc3BsaWNlKHN0YXRlLmtleSwgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgc3RhdGUucGFyZW50Lm5vZGVbc3RhdGUua2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmVmb3JlIDogZnVuY3Rpb24gKGYpIHsgbW9kaWZpZXJzLmJlZm9yZSA9IGYgfSxcbiAgICAgICAgICAgIGFmdGVyIDogZnVuY3Rpb24gKGYpIHsgbW9kaWZpZXJzLmFmdGVyID0gZiB9LFxuICAgICAgICAgICAgcHJlIDogZnVuY3Rpb24gKGYpIHsgbW9kaWZpZXJzLnByZSA9IGYgfSxcbiAgICAgICAgICAgIHBvc3QgOiBmdW5jdGlvbiAoZikgeyBtb2RpZmllcnMucG9zdCA9IGYgfSxcbiAgICAgICAgICAgIHN0b3AgOiBmdW5jdGlvbiAoKSB7IGFsaXZlID0gZmFsc2UgfVxuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgaWYgKCFhbGl2ZSkgcmV0dXJuIHN0YXRlO1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiBub2RlID09PSAnb2JqZWN0JyAmJiBub2RlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzdGF0ZS5pc0xlYWYgPSBPYmplY3Qua2V5cyhub2RlKS5sZW5ndGggPT0gMDtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJlbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudHNbaV0ubm9kZV8gPT09IG5vZGVfKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmNpcmN1bGFyID0gcGFyZW50c1tpXTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc3RhdGUuaXNMZWFmID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgc3RhdGUubm90TGVhZiA9ICFzdGF0ZS5pc0xlYWY7XG4gICAgICAgIHN0YXRlLm5vdFJvb3QgPSAhc3RhdGUuaXNSb290O1xuICAgICAgICBcbiAgICAgICAgLy8gdXNlIHJldHVybiB2YWx1ZXMgdG8gdXBkYXRlIGlmIGRlZmluZWRcbiAgICAgICAgdmFyIHJldCA9IGNiLmNhbGwoc3RhdGUsIHN0YXRlLm5vZGUpO1xuICAgICAgICBpZiAocmV0ICE9PSB1bmRlZmluZWQgJiYgc3RhdGUudXBkYXRlKSBzdGF0ZS51cGRhdGUocmV0KTtcbiAgICAgICAgaWYgKG1vZGlmaWVycy5iZWZvcmUpIG1vZGlmaWVycy5iZWZvcmUuY2FsbChzdGF0ZSwgc3RhdGUubm9kZSk7XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHN0YXRlLm5vZGUgPT0gJ29iamVjdCdcbiAgICAgICAgJiYgc3RhdGUubm9kZSAhPT0gbnVsbCAmJiAhc3RhdGUuY2lyY3VsYXIpIHtcbiAgICAgICAgICAgIHBhcmVudHMucHVzaChzdGF0ZSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoc3RhdGUubm9kZSk7XG4gICAgICAgICAgICBrZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSwgaSkge1xuICAgICAgICAgICAgICAgIHBhdGgucHVzaChrZXkpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGlmIChtb2RpZmllcnMucHJlKSBtb2RpZmllcnMucHJlLmNhbGwoc3RhdGUsIHN0YXRlLm5vZGVba2V5XSwga2V5KTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSB3YWxrZXIoc3RhdGUubm9kZVtrZXldKTtcbiAgICAgICAgICAgICAgICBpZiAoaW1tdXRhYmxlICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHN0YXRlLm5vZGUsIGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUubm9kZVtrZXldID0gY2hpbGQubm9kZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgY2hpbGQuaXNMYXN0ID0gaSA9PSBrZXlzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgY2hpbGQuaXNGaXJzdCA9IGkgPT0gMDtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBpZiAobW9kaWZpZXJzLnBvc3QpIG1vZGlmaWVycy5wb3N0LmNhbGwoc3RhdGUsIGNoaWxkKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBwYXRoLnBvcCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwYXJlbnRzLnBvcCgpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBpZiAobW9kaWZpZXJzLmFmdGVyKSBtb2RpZmllcnMuYWZ0ZXIuY2FsbChzdGF0ZSwgc3RhdGUubm9kZSk7XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgfSkocm9vdCkubm9kZTtcbn1cblxuT2JqZWN0LmtleXMoVHJhdmVyc2UucHJvdG90eXBlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICBUcmF2ZXJzZVtrZXldID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICB2YXIgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgdmFyIHQgPSBUcmF2ZXJzZShvYmopO1xuICAgICAgICByZXR1cm4gdFtrZXldLmFwcGx5KHQsIGFyZ3MpO1xuICAgIH07XG59KTtcblxuZnVuY3Rpb24gY29weSAoc3JjKSB7XG4gICAgaWYgKHR5cGVvZiBzcmMgPT09ICdvYmplY3QnICYmIHNyYyAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgZHN0O1xuICAgICAgICBcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc3JjKSkge1xuICAgICAgICAgICAgZHN0ID0gW107XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc3JjIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgICAgZHN0ID0gbmV3IERhdGUoc3JjKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzcmMgaW5zdGFuY2VvZiBCb29sZWFuKSB7XG4gICAgICAgICAgICBkc3QgPSBuZXcgQm9vbGVhbihzcmMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNyYyBpbnN0YW5jZW9mIE51bWJlcikge1xuICAgICAgICAgICAgZHN0ID0gbmV3IE51bWJlcihzcmMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNyYyBpbnN0YW5jZW9mIFN0cmluZykge1xuICAgICAgICAgICAgZHN0ID0gbmV3IFN0cmluZyhzcmMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZHN0ID0gT2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2Yoc3JjKSk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIE9iamVjdC5rZXlzKHNyYykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBkc3Rba2V5XSA9IHNyY1trZXldO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGRzdDtcbiAgICB9XG4gICAgZWxzZSByZXR1cm4gc3JjO1xufVxuIiwKICAgICJ2YXIgVHJhdmVyc2UgPSByZXF1aXJlKCd0cmF2ZXJzZScpO1xudmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50cycpLkV2ZW50RW1pdHRlcjtcblxubW9kdWxlLmV4cG9ydHMgPSBDaGFpbnNhdztcbmZ1bmN0aW9uIENoYWluc2F3IChidWlsZGVyKSB7XG4gICAgdmFyIHNhdyA9IENoYWluc2F3LnNhdyhidWlsZGVyLCB7fSk7XG4gICAgdmFyIHIgPSBidWlsZGVyLmNhbGwoc2F3LmhhbmRsZXJzLCBzYXcpO1xuICAgIGlmIChyICE9PSB1bmRlZmluZWQpIHNhdy5oYW5kbGVycyA9IHI7XG4gICAgc2F3LnJlY29yZCgpO1xuICAgIHJldHVybiBzYXcuY2hhaW4oKTtcbn07XG5cbkNoYWluc2F3LmxpZ2h0ID0gZnVuY3Rpb24gQ2hhaW5zYXdMaWdodCAoYnVpbGRlcikge1xuICAgIHZhciBzYXcgPSBDaGFpbnNhdy5zYXcoYnVpbGRlciwge30pO1xuICAgIHZhciByID0gYnVpbGRlci5jYWxsKHNhdy5oYW5kbGVycywgc2F3KTtcbiAgICBpZiAociAhPT0gdW5kZWZpbmVkKSBzYXcuaGFuZGxlcnMgPSByO1xuICAgIHJldHVybiBzYXcuY2hhaW4oKTtcbn07XG5cbkNoYWluc2F3LnNhdyA9IGZ1bmN0aW9uIChidWlsZGVyLCBoYW5kbGVycykge1xuICAgIHZhciBzYXcgPSBuZXcgRXZlbnRFbWl0dGVyO1xuICAgIHNhdy5oYW5kbGVycyA9IGhhbmRsZXJzO1xuICAgIHNhdy5hY3Rpb25zID0gW107XG5cbiAgICBzYXcuY2hhaW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBjaCA9IFRyYXZlcnNlKHNhdy5oYW5kbGVycykubWFwKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1Jvb3QpIHJldHVybiBub2RlO1xuICAgICAgICAgICAgdmFyIHBzID0gdGhpcy5wYXRoO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIG5vZGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHNhdy5hY3Rpb25zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCA6IHBzLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA6IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHNhdy5lbWl0KCdiZWdpbicpO1xuICAgICAgICAgICAgc2F3Lm5leHQoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGNoO1xuICAgIH07XG5cbiAgICBzYXcucG9wID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gc2F3LmFjdGlvbnMuc2hpZnQoKTtcbiAgICB9O1xuXG4gICAgc2F3Lm5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhY3Rpb24gPSBzYXcucG9wKCk7XG5cbiAgICAgICAgaWYgKCFhY3Rpb24pIHtcbiAgICAgICAgICAgIHNhdy5lbWl0KCdlbmQnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghYWN0aW9uLnRyYXApIHtcbiAgICAgICAgICAgIHZhciBub2RlID0gc2F3LmhhbmRsZXJzO1xuICAgICAgICAgICAgYWN0aW9uLnBhdGguZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IG5vZGUgPSBub2RlW2tleV0gfSk7XG4gICAgICAgICAgICBub2RlLmFwcGx5KHNhdy5oYW5kbGVycywgYWN0aW9uLmFyZ3MpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHNhdy5uZXN0ID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICB2YXIgYXV0b25leHQgPSB0cnVlO1xuXG4gICAgICAgIGlmICh0eXBlb2YgY2IgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgdmFyIGF1dG9uZXh0ID0gY2I7XG4gICAgICAgICAgICBjYiA9IGFyZ3Muc2hpZnQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzID0gQ2hhaW5zYXcuc2F3KGJ1aWxkZXIsIHt9KTtcbiAgICAgICAgdmFyIHIgPSBidWlsZGVyLmNhbGwocy5oYW5kbGVycywgcyk7XG5cbiAgICAgICAgaWYgKHIgIT09IHVuZGVmaW5lZCkgcy5oYW5kbGVycyA9IHI7XG5cbiAgICAgICAgLy8gSWYgd2UgYXJlIHJlY29yZGluZy4uLlxuICAgICAgICBpZiAoXCJ1bmRlZmluZWRcIiAhPT0gdHlwZW9mIHNhdy5zdGVwKSB7XG4gICAgICAgICAgICAvLyAuLi4gb3VyIGNoaWxkcmVuIHNob3VsZCwgdG9vXG4gICAgICAgICAgICBzLnJlY29yZCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2IuYXBwbHkocy5jaGFpbigpLCBhcmdzKTtcbiAgICAgICAgaWYgKGF1dG9uZXh0ICE9PSBmYWxzZSkgcy5vbignZW5kJywgc2F3Lm5leHQpO1xuICAgIH07XG5cbiAgICBzYXcucmVjb3JkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB1cGdyYWRlQ2hhaW5zYXcoc2F3KTtcbiAgICB9O1xuXG4gICAgWyd0cmFwJywgJ2Rvd24nLCAnanVtcCddLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCkge1xuICAgICAgICBzYXdbbWV0aG9kXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRvIHVzZSB0aGUgdHJhcCwgZG93biBhbmQganVtcCBmZWF0dXJlcywgcGxlYXNlIFwiK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY2FsbCByZWNvcmQoKSBmaXJzdCB0byBzdGFydCByZWNvcmRpbmcgYWN0aW9ucy5cIik7XG4gICAgICAgIH07XG4gICAgfSk7XG5cbiAgICByZXR1cm4gc2F3O1xufTtcblxuZnVuY3Rpb24gdXBncmFkZUNoYWluc2F3KHNhdykge1xuICAgIHNhdy5zdGVwID0gMDtcblxuICAgIC8vIG92ZXJyaWRlIHBvcFxuICAgIHNhdy5wb3AgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBzYXcuYWN0aW9uc1tzYXcuc3RlcCsrXTtcbiAgICB9O1xuXG4gICAgc2F3LnRyYXAgPSBmdW5jdGlvbiAobmFtZSwgY2IpIHtcbiAgICAgICAgdmFyIHBzID0gQXJyYXkuaXNBcnJheShuYW1lKSA/IG5hbWUgOiBbbmFtZV07XG4gICAgICAgIHNhdy5hY3Rpb25zLnB1c2goe1xuICAgICAgICAgICAgcGF0aCA6IHBzLFxuICAgICAgICAgICAgc3RlcCA6IHNhdy5zdGVwLFxuICAgICAgICAgICAgY2IgOiBjYixcbiAgICAgICAgICAgIHRyYXAgOiB0cnVlXG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBzYXcuZG93biA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIHZhciBwcyA9IChBcnJheS5pc0FycmF5KG5hbWUpID8gbmFtZSA6IFtuYW1lXSkuam9pbignLycpO1xuICAgICAgICB2YXIgaSA9IHNhdy5hY3Rpb25zLnNsaWNlKHNhdy5zdGVwKS5tYXAoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIGlmICh4LnRyYXAgJiYgeC5zdGVwIDw9IHNhdy5zdGVwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm4geC5wYXRoLmpvaW4oJy8nKSA9PSBwcztcbiAgICAgICAgfSkuaW5kZXhPZih0cnVlKTtcblxuICAgICAgICBpZiAoaSA+PSAwKSBzYXcuc3RlcCArPSBpO1xuICAgICAgICBlbHNlIHNhdy5zdGVwID0gc2F3LmFjdGlvbnMubGVuZ3RoO1xuXG4gICAgICAgIHZhciBhY3QgPSBzYXcuYWN0aW9uc1tzYXcuc3RlcCAtIDFdO1xuICAgICAgICBpZiAoYWN0ICYmIGFjdC50cmFwKSB7XG4gICAgICAgICAgICAvLyBJdCdzIGEgdHJhcCFcbiAgICAgICAgICAgIHNhdy5zdGVwID0gYWN0LnN0ZXA7XG4gICAgICAgICAgICBhY3QuY2IoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHNhdy5uZXh0KCk7XG4gICAgfTtcblxuICAgIHNhdy5qdW1wID0gZnVuY3Rpb24gKHN0ZXApIHtcbiAgICAgICAgc2F3LnN0ZXAgPSBzdGVwO1xuICAgICAgICBzYXcubmV4dCgpO1xuICAgIH07XG59O1xuIiwKICAgICJtb2R1bGUuZXhwb3J0cyA9IEJ1ZmZlcnM7XG5cbmZ1bmN0aW9uIEJ1ZmZlcnMgKGJ1ZnMpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQnVmZmVycykpIHJldHVybiBuZXcgQnVmZmVycyhidWZzKTtcbiAgICB0aGlzLmJ1ZmZlcnMgPSBidWZzIHx8IFtdO1xuICAgIHRoaXMubGVuZ3RoID0gdGhpcy5idWZmZXJzLnJlZHVjZShmdW5jdGlvbiAoc2l6ZSwgYnVmKSB7XG4gICAgICAgIHJldHVybiBzaXplICsgYnVmLmxlbmd0aFxuICAgIH0sIDApO1xufVxuXG5CdWZmZXJzLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKGFyZ3VtZW50c1tpXSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RyaWVkIHRvIHB1c2ggYSBub24tYnVmZmVyJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGJ1ZiA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgdGhpcy5idWZmZXJzLnB1c2goYnVmKTtcbiAgICAgICAgdGhpcy5sZW5ndGggKz0gYnVmLmxlbmd0aDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubGVuZ3RoO1xufTtcblxuQnVmZmVycy5wcm90b3R5cGUudW5zaGlmdCA9IGZ1bmN0aW9uICgpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihhcmd1bWVudHNbaV0pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUcmllZCB0byB1bnNoaWZ0IGEgbm9uLWJ1ZmZlcicpO1xuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBidWYgPSBhcmd1bWVudHNbaV07XG4gICAgICAgIHRoaXMuYnVmZmVycy51bnNoaWZ0KGJ1Zik7XG4gICAgICAgIHRoaXMubGVuZ3RoICs9IGJ1Zi5sZW5ndGg7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmxlbmd0aDtcbn07XG5cbkJ1ZmZlcnMucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiAoZHN0LCBkU3RhcnQsIHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gdGhpcy5zbGljZShzdGFydCwgZW5kKS5jb3B5KGRzdCwgZFN0YXJ0LCAwLCBlbmQgLSBzdGFydCk7XG59O1xuXG5CdWZmZXJzLnByb3RvdHlwZS5zcGxpY2UgPSBmdW5jdGlvbiAoaSwgaG93TWFueSkge1xuICAgIHZhciBidWZmZXJzID0gdGhpcy5idWZmZXJzO1xuICAgIHZhciBpbmRleCA9IGkgPj0gMCA/IGkgOiB0aGlzLmxlbmd0aCAtIGk7XG4gICAgdmFyIHJlcHMgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMik7XG4gICAgXG4gICAgaWYgKGhvd01hbnkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBob3dNYW55ID0gdGhpcy5sZW5ndGggLSBpbmRleDtcbiAgICB9XG4gICAgZWxzZSBpZiAoaG93TWFueSA+IHRoaXMubGVuZ3RoIC0gaW5kZXgpIHtcbiAgICAgICAgaG93TWFueSA9IHRoaXMubGVuZ3RoIC0gaW5kZXg7XG4gICAgfVxuICAgIFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVwcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB0aGlzLmxlbmd0aCArPSByZXBzW2ldLmxlbmd0aDtcbiAgICB9XG4gICAgXG4gICAgdmFyIHJlbW92ZWQgPSBuZXcgQnVmZmVycygpO1xuICAgIHZhciBieXRlcyA9IDA7XG4gICAgXG4gICAgdmFyIHN0YXJ0Qnl0ZXMgPSAwO1xuICAgIGZvciAoXG4gICAgICAgIHZhciBpaSA9IDA7XG4gICAgICAgIGlpIDwgYnVmZmVycy5sZW5ndGggJiYgc3RhcnRCeXRlcyArIGJ1ZmZlcnNbaWldLmxlbmd0aCA8IGluZGV4O1xuICAgICAgICBpaSArK1xuICAgICkgeyBzdGFydEJ5dGVzICs9IGJ1ZmZlcnNbaWldLmxlbmd0aCB9XG4gICAgXG4gICAgaWYgKGluZGV4IC0gc3RhcnRCeXRlcyA+IDApIHtcbiAgICAgICAgdmFyIHN0YXJ0ID0gaW5kZXggLSBzdGFydEJ5dGVzO1xuICAgICAgICBcbiAgICAgICAgaWYgKHN0YXJ0ICsgaG93TWFueSA8IGJ1ZmZlcnNbaWldLmxlbmd0aCkge1xuICAgICAgICAgICAgcmVtb3ZlZC5wdXNoKGJ1ZmZlcnNbaWldLnNsaWNlKHN0YXJ0LCBzdGFydCArIGhvd01hbnkpKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIG9yaWcgPSBidWZmZXJzW2lpXTtcbiAgICAgICAgICAgIC8vdmFyIGJ1ZiA9IG5ldyBCdWZmZXIob3JpZy5sZW5ndGggLSBob3dNYW55KTtcbiAgICAgICAgICAgIHZhciBidWYwID0gbmV3IEJ1ZmZlcihzdGFydCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YXJ0OyBpKyspIHtcbiAgICAgICAgICAgICAgICBidWYwW2ldID0gb3JpZ1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIGJ1ZjEgPSBuZXcgQnVmZmVyKG9yaWcubGVuZ3RoIC0gc3RhcnQgLSBob3dNYW55KTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSBzdGFydCArIGhvd01hbnk7IGkgPCBvcmlnLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgYnVmMVsgaSAtIGhvd01hbnkgLSBzdGFydCBdID0gb3JpZ1tpXVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAocmVwcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlcHNfID0gcmVwcy5zbGljZSgpO1xuICAgICAgICAgICAgICAgIHJlcHNfLnVuc2hpZnQoYnVmMCk7XG4gICAgICAgICAgICAgICAgcmVwc18ucHVzaChidWYxKTtcbiAgICAgICAgICAgICAgICBidWZmZXJzLnNwbGljZS5hcHBseShidWZmZXJzLCBbIGlpLCAxIF0uY29uY2F0KHJlcHNfKSk7XG4gICAgICAgICAgICAgICAgaWkgKz0gcmVwc18ubGVuZ3RoO1xuICAgICAgICAgICAgICAgIHJlcHMgPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGJ1ZmZlcnMuc3BsaWNlKGlpLCAxLCBidWYwLCBidWYxKTtcbiAgICAgICAgICAgICAgICAvL2J1ZmZlcnNbaWldID0gYnVmO1xuICAgICAgICAgICAgICAgIGlpICs9IDI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZW1vdmVkLnB1c2goYnVmZmVyc1tpaV0uc2xpY2Uoc3RhcnQpKTtcbiAgICAgICAgICAgIGJ1ZmZlcnNbaWldID0gYnVmZmVyc1tpaV0uc2xpY2UoMCwgc3RhcnQpO1xuICAgICAgICAgICAgaWkgKys7XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgaWYgKHJlcHMubGVuZ3RoID4gMCkge1xuICAgICAgICBidWZmZXJzLnNwbGljZS5hcHBseShidWZmZXJzLCBbIGlpLCAwIF0uY29uY2F0KHJlcHMpKTtcbiAgICAgICAgaWkgKz0gcmVwcy5sZW5ndGg7XG4gICAgfVxuICAgIFxuICAgIHdoaWxlIChyZW1vdmVkLmxlbmd0aCA8IGhvd01hbnkpIHtcbiAgICAgICAgdmFyIGJ1ZiA9IGJ1ZmZlcnNbaWldO1xuICAgICAgICB2YXIgbGVuID0gYnVmLmxlbmd0aDtcbiAgICAgICAgdmFyIHRha2UgPSBNYXRoLm1pbihsZW4sIGhvd01hbnkgLSByZW1vdmVkLmxlbmd0aCk7XG4gICAgICAgIFxuICAgICAgICBpZiAodGFrZSA9PT0gbGVuKSB7XG4gICAgICAgICAgICByZW1vdmVkLnB1c2goYnVmKTtcbiAgICAgICAgICAgIGJ1ZmZlcnMuc3BsaWNlKGlpLCAxKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlbW92ZWQucHVzaChidWYuc2xpY2UoMCwgdGFrZSkpO1xuICAgICAgICAgICAgYnVmZmVyc1tpaV0gPSBidWZmZXJzW2lpXS5zbGljZSh0YWtlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBcbiAgICB0aGlzLmxlbmd0aCAtPSByZW1vdmVkLmxlbmd0aDtcbiAgICBcbiAgICByZXR1cm4gcmVtb3ZlZDtcbn07XG4gXG5CdWZmZXJzLnByb3RvdHlwZS5zbGljZSA9IGZ1bmN0aW9uIChpLCBqKSB7XG4gICAgdmFyIGJ1ZmZlcnMgPSB0aGlzLmJ1ZmZlcnM7XG4gICAgaWYgKGogPT09IHVuZGVmaW5lZCkgaiA9IHRoaXMubGVuZ3RoO1xuICAgIGlmIChpID09PSB1bmRlZmluZWQpIGkgPSAwO1xuICAgIFxuICAgIGlmIChqID4gdGhpcy5sZW5ndGgpIGogPSB0aGlzLmxlbmd0aDtcbiAgICBcbiAgICB2YXIgc3RhcnRCeXRlcyA9IDA7XG4gICAgZm9yIChcbiAgICAgICAgdmFyIHNpID0gMDtcbiAgICAgICAgc2kgPCBidWZmZXJzLmxlbmd0aCAmJiBzdGFydEJ5dGVzICsgYnVmZmVyc1tzaV0ubGVuZ3RoIDw9IGk7XG4gICAgICAgIHNpICsrXG4gICAgKSB7IHN0YXJ0Qnl0ZXMgKz0gYnVmZmVyc1tzaV0ubGVuZ3RoIH1cbiAgICBcbiAgICB2YXIgdGFyZ2V0ID0gbmV3IEJ1ZmZlcihqIC0gaSk7XG4gICAgXG4gICAgdmFyIHRpID0gMDtcbiAgICBmb3IgKHZhciBpaSA9IHNpOyB0aSA8IGogLSBpICYmIGlpIDwgYnVmZmVycy5sZW5ndGg7IGlpKyspIHtcbiAgICAgICAgdmFyIGxlbiA9IGJ1ZmZlcnNbaWldLmxlbmd0aDtcbiAgICAgICAgXG4gICAgICAgIHZhciBzdGFydCA9IHRpID09PSAwID8gaSAtIHN0YXJ0Qnl0ZXMgOiAwO1xuICAgICAgICB2YXIgZW5kID0gdGkgKyBsZW4gPj0gaiAtIGlcbiAgICAgICAgICAgID8gTWF0aC5taW4oc3RhcnQgKyAoaiAtIGkpIC0gdGksIGxlbilcbiAgICAgICAgICAgIDogbGVuXG4gICAgICAgIDtcbiAgICAgICAgXG4gICAgICAgIGJ1ZmZlcnNbaWldLmNvcHkodGFyZ2V0LCB0aSwgc3RhcnQsIGVuZCk7XG4gICAgICAgIHRpICs9IGVuZCAtIHN0YXJ0O1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gdGFyZ2V0O1xufTtcblxuQnVmZmVycy5wcm90b3R5cGUucG9zID0gZnVuY3Rpb24gKGkpIHtcbiAgICBpZiAoaSA8IDAgfHwgaSA+PSB0aGlzLmxlbmd0aCkgdGhyb3cgbmV3IEVycm9yKCdvb2InKTtcbiAgICB2YXIgbCA9IGksIGJpID0gMCwgYnUgPSBudWxsO1xuICAgIGZvciAoOzspIHtcbiAgICAgICAgYnUgPSB0aGlzLmJ1ZmZlcnNbYmldO1xuICAgICAgICBpZiAobCA8IGJ1Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHtidWY6IGJpLCBvZmZzZXQ6IGx9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbCAtPSBidS5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgYmkrKztcbiAgICB9XG59O1xuXG5CdWZmZXJzLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiBnZXQgKGkpIHtcbiAgICB2YXIgcG9zID0gdGhpcy5wb3MoaSk7XG5cbiAgICByZXR1cm4gdGhpcy5idWZmZXJzW3Bvcy5idWZdLmdldChwb3Mub2Zmc2V0KTtcbn07XG5cbkJ1ZmZlcnMucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIHNldCAoaSwgYikge1xuICAgIHZhciBwb3MgPSB0aGlzLnBvcyhpKTtcblxuICAgIHJldHVybiB0aGlzLmJ1ZmZlcnNbcG9zLmJ1Zl0uc2V0KHBvcy5vZmZzZXQsIGIpO1xufTtcblxuQnVmZmVycy5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uIChuZWVkbGUsIG9mZnNldCkge1xuICAgIGlmIChcInN0cmluZ1wiID09PSB0eXBlb2YgbmVlZGxlKSB7XG4gICAgICAgIG5lZWRsZSA9IG5ldyBCdWZmZXIobmVlZGxlKTtcbiAgICB9IGVsc2UgaWYgKG5lZWRsZSBpbnN0YW5jZW9mIEJ1ZmZlcikge1xuICAgICAgICAvLyBhbHJlYWR5IGEgYnVmZmVyXG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHR5cGUgZm9yIGEgc2VhcmNoIHN0cmluZycpO1xuICAgIH1cblxuICAgIGlmICghbmVlZGxlLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICB2YXIgaSA9IDAsIGogPSAwLCBtYXRjaCA9IDAsIG1zdGFydCwgcG9zID0gMDtcblxuICAgIC8vIHN0YXJ0IHNlYXJjaCBmcm9tIGEgcGFydGljdWxhciBwb2ludCBpbiB0aGUgdmlydHVhbCBidWZmZXJcbiAgICBpZiAob2Zmc2V0KSB7XG4gICAgICAgIHZhciBwID0gdGhpcy5wb3Mob2Zmc2V0KTtcbiAgICAgICAgaSA9IHAuYnVmO1xuICAgICAgICBqID0gcC5vZmZzZXQ7XG4gICAgICAgIHBvcyA9IG9mZnNldDtcbiAgICB9XG5cbiAgICAvLyBmb3IgZWFjaCBjaGFyYWN0ZXIgaW4gdmlydHVhbCBidWZmZXJcbiAgICBmb3IgKDs7KSB7XG4gICAgICAgIHdoaWxlIChqID49IHRoaXMuYnVmZmVyc1tpXS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGogPSAwO1xuICAgICAgICAgICAgaSsrO1xuXG4gICAgICAgICAgICBpZiAoaSA+PSB0aGlzLmJ1ZmZlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgLy8gc2VhcmNoIHN0cmluZyBub3QgZm91bmRcbiAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY2hhciA9IHRoaXMuYnVmZmVyc1tpXVtqXTtcblxuICAgICAgICBpZiAoY2hhciA9PSBuZWVkbGVbbWF0Y2hdKSB7XG4gICAgICAgICAgICAvLyBrZWVwIHRyYWNrIHdoZXJlIG1hdGNoIHN0YXJ0ZWRcbiAgICAgICAgICAgIGlmIChtYXRjaCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgbXN0YXJ0ID0ge1xuICAgICAgICAgICAgICAgICAgICBpOiBpLFxuICAgICAgICAgICAgICAgICAgICBqOiBqLFxuICAgICAgICAgICAgICAgICAgICBwb3M6IHBvc1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBtYXRjaCsrO1xuICAgICAgICAgICAgaWYgKG1hdGNoID09IG5lZWRsZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAvLyBmdWxsIG1hdGNoXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1zdGFydC5wb3M7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAobWF0Y2ggIT0gMCkge1xuICAgICAgICAgICAgLy8gYSBwYXJ0aWFsIG1hdGNoIGVuZGVkLCBnbyBiYWNrIHRvIG1hdGNoIHN0YXJ0aW5nIHBvc2l0aW9uXG4gICAgICAgICAgICAvLyB0aGlzIHdpbGwgY29udGludWUgdGhlIHNlYXJjaCBhdCB0aGUgbmV4dCBjaGFyYWN0ZXJcbiAgICAgICAgICAgIGkgPSBtc3RhcnQuaTtcbiAgICAgICAgICAgIGogPSBtc3RhcnQuajtcbiAgICAgICAgICAgIHBvcyA9IG1zdGFydC5wb3M7XG4gICAgICAgICAgICBtYXRjaCA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBqKys7XG4gICAgICAgIHBvcysrO1xuICAgIH1cbn07XG5cbkJ1ZmZlcnMucHJvdG90eXBlLnRvQnVmZmVyID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuc2xpY2UoKTtcbn1cblxuQnVmZmVycy5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbihlbmNvZGluZywgc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiB0aGlzLnNsaWNlKHN0YXJ0LCBlbmQpLnRvU3RyaW5nKGVuY29kaW5nKTtcbn1cbiIsCiAgICAibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc3RvcmUpIHtcbiAgICBmdW5jdGlvbiBnZXRzZXQgKG5hbWUsIHZhbHVlKSB7XG4gICAgICAgIHZhciBub2RlID0gdmFycy5zdG9yZTtcbiAgICAgICAgdmFyIGtleXMgPSBuYW1lLnNwbGl0KCcuJyk7XG4gICAgICAgIGtleXMuc2xpY2UoMCwtMSkuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgICAgICAgICAgaWYgKG5vZGVba10gPT09IHVuZGVmaW5lZCkgbm9kZVtrXSA9IHt9O1xuICAgICAgICAgICAgbm9kZSA9IG5vZGVba11cbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzW2tleXMubGVuZ3RoIC0gMV07XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBub2RlW2tleV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbm9kZVtrZXldID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgdmFyIHZhcnMgPSB7XG4gICAgICAgIGdldCA6IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0c2V0KG5hbWUpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQgOiBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRzZXQobmFtZSwgdmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBzdG9yZSA6IHN0b3JlIHx8IHt9LFxuICAgIH07XG4gICAgcmV0dXJuIHZhcnM7XG59O1xuIiwKICAgICJ2YXIgQ2hhaW5zYXcgPSByZXF1aXJlKCdjaGFpbnNhdycpO1xudmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50cycpLkV2ZW50RW1pdHRlcjtcbnZhciBCdWZmZXJzID0gcmVxdWlyZSgnYnVmZmVycycpO1xudmFyIFZhcnMgPSByZXF1aXJlKCcuL2xpYi92YXJzLmpzJyk7XG52YXIgU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJykuU3RyZWFtO1xuXG5leHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYnVmT3JFbSwgZXZlbnROYW1lKSB7XG4gICAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihidWZPckVtKSkge1xuICAgICAgICByZXR1cm4gZXhwb3J0cy5wYXJzZShidWZPckVtKTtcbiAgICB9XG4gICAgXG4gICAgdmFyIHMgPSBleHBvcnRzLnN0cmVhbSgpO1xuICAgIGlmIChidWZPckVtICYmIGJ1Zk9yRW0ucGlwZSkge1xuICAgICAgICBidWZPckVtLnBpcGUocyk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGJ1Zk9yRW0pIHtcbiAgICAgICAgYnVmT3JFbS5vbihldmVudE5hbWUgfHwgJ2RhdGEnLCBmdW5jdGlvbiAoYnVmKSB7XG4gICAgICAgICAgICBzLndyaXRlKGJ1Zik7XG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgYnVmT3JFbS5vbignZW5kJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcy5lbmQoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBzO1xufTtcblxuZXhwb3J0cy5zdHJlYW0gPSBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICBpZiAoaW5wdXQpIHJldHVybiBleHBvcnRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgXG4gICAgdmFyIHBlbmRpbmcgPSBudWxsO1xuICAgIGZ1bmN0aW9uIGdldEJ5dGVzIChieXRlcywgY2IsIHNraXApIHtcbiAgICAgICAgcGVuZGluZyA9IHtcbiAgICAgICAgICAgIGJ5dGVzIDogYnl0ZXMsXG4gICAgICAgICAgICBza2lwIDogc2tpcCxcbiAgICAgICAgICAgIGNiIDogZnVuY3Rpb24gKGJ1Zikge1xuICAgICAgICAgICAgICAgIHBlbmRpbmcgPSBudWxsO1xuICAgICAgICAgICAgICAgIGNiKGJ1Zik7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBkaXNwYXRjaCgpO1xuICAgIH1cbiAgICBcbiAgICB2YXIgb2Zmc2V0ID0gbnVsbDtcbiAgICBmdW5jdGlvbiBkaXNwYXRjaCAoKSB7XG4gICAgICAgIGlmICghcGVuZGluZykge1xuICAgICAgICAgICAgaWYgKGNhdWdodEVuZCkgZG9uZSA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBwZW5kaW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBwZW5kaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgYnl0ZXMgPSBvZmZzZXQgKyBwZW5kaW5nLmJ5dGVzO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAoYnVmZmVycy5sZW5ndGggPj0gYnl0ZXMpIHtcbiAgICAgICAgICAgICAgICB2YXIgYnVmO1xuICAgICAgICAgICAgICAgIGlmIChvZmZzZXQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBidWYgPSBidWZmZXJzLnNwbGljZSgwLCBieXRlcyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcGVuZGluZy5za2lwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBidWYgPSBidWYuc2xpY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwZW5kaW5nLnNraXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiA9IGJ1ZmZlcnMuc2xpY2Uob2Zmc2V0LCBieXRlcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gYnl0ZXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGlmIChwZW5kaW5nLnNraXApIHtcbiAgICAgICAgICAgICAgICAgICAgcGVuZGluZy5jYigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcGVuZGluZy5jYihidWYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBmdW5jdGlvbiBidWlsZGVyIChzYXcpIHtcbiAgICAgICAgZnVuY3Rpb24gbmV4dCAoKSB7IGlmICghZG9uZSkgc2F3Lm5leHQoKSB9XG4gICAgICAgIFxuICAgICAgICB2YXIgc2VsZiA9IHdvcmRzKGZ1bmN0aW9uIChieXRlcywgY2IpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICAgICAgICAgIGdldEJ5dGVzKGJ5dGVzLCBmdW5jdGlvbiAoYnVmKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhcnMuc2V0KG5hbWUsIGNiKGJ1ZikpO1xuICAgICAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIHNlbGYudGFwID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgICAgICAgICBzYXcubmVzdChjYiwgdmFycy5zdG9yZSk7XG4gICAgICAgIH07XG4gICAgICAgIFxuICAgICAgICBzZWxmLmludG8gPSBmdW5jdGlvbiAoa2V5LCBjYikge1xuICAgICAgICAgICAgaWYgKCF2YXJzLmdldChrZXkpKSB2YXJzLnNldChrZXksIHt9KTtcbiAgICAgICAgICAgIHZhciBwYXJlbnQgPSB2YXJzO1xuICAgICAgICAgICAgdmFycyA9IFZhcnMocGFyZW50LmdldChrZXkpKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgc2F3Lm5lc3QoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgdGhpcy50YXAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXJzID0gcGFyZW50O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgdmFycy5zdG9yZSk7XG4gICAgICAgIH07XG4gICAgICAgIFxuICAgICAgICBzZWxmLmZsdXNoID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFycy5zdG9yZSA9IHt9O1xuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgc2VsZi5sb29wID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgICAgICAgICB2YXIgZW5kID0gZmFsc2U7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHNhdy5uZXN0KGZhbHNlLCBmdW5jdGlvbiBsb29wICgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhcnMgPSB2YXJzLnN0b3JlO1xuICAgICAgICAgICAgICAgIGNiLmNhbGwodGhpcywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBlbmQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgICAgfSwgdmFycy5zdG9yZSk7XG4gICAgICAgICAgICAgICAgdGhpcy50YXAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZW5kKSBzYXcubmV4dCgpXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgbG9vcC5jYWxsKHRoaXMpXG4gICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgIH0sIHZhcnMuc3RvcmUpO1xuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgc2VsZi5idWZmZXIgPSBmdW5jdGlvbiAobmFtZSwgYnl0ZXMpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgYnl0ZXMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgYnl0ZXMgPSB2YXJzLmdldChieXRlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGdldEJ5dGVzKGJ5dGVzLCBmdW5jdGlvbiAoYnVmKSB7XG4gICAgICAgICAgICAgICAgdmFycy5zZXQobmFtZSwgYnVmKTtcbiAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgXG4gICAgICAgIHNlbGYuc2tpcCA9IGZ1bmN0aW9uIChieXRlcykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBieXRlcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBieXRlcyA9IHZhcnMuZ2V0KGJ5dGVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgZ2V0Qnl0ZXMoYnl0ZXMsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgXG4gICAgICAgIHNlbGYuc2NhbiA9IGZ1bmN0aW9uIGZpbmQgKG5hbWUsIHNlYXJjaCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBzZWFyY2ggPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgc2VhcmNoID0gbmV3IEJ1ZmZlcihzZWFyY2gpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihzZWFyY2gpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzZWFyY2ggbXVzdCBiZSBhIEJ1ZmZlciBvciBhIHN0cmluZycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgdGFrZW4gPSAwO1xuICAgICAgICAgICAgcGVuZGluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgcG9zID0gYnVmZmVycy5pbmRleE9mKHNlYXJjaCwgb2Zmc2V0ICsgdGFrZW4pO1xuICAgICAgICAgICAgICAgIHZhciBpID0gcG9zLW9mZnNldC10YWtlbjtcbiAgICAgICAgICAgICAgICBpZiAocG9zICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBwZW5kaW5nID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9mZnNldCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJzLnNldChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcnMuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyB0YWtlbiArIGkpXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IHRha2VuICsgaSArIHNlYXJjaC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJzLnNldChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcnMuc2xpY2UoMCwgdGFrZW4gKyBpKVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcnMuc3BsaWNlKDAsIHRha2VuICsgaSArIHNlYXJjaC5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2goKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpID0gTWF0aC5tYXgoYnVmZmVycy5sZW5ndGggLSBzZWFyY2gubGVuZ3RoIC0gb2Zmc2V0IC0gdGFrZW4sIDApO1xuXHRcdFx0XHR9XG4gICAgICAgICAgICAgICAgdGFrZW4gKz0gaTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBkaXNwYXRjaCgpO1xuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgc2VsZi5wZWVrID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgICAgICAgICBvZmZzZXQgPSAwO1xuICAgICAgICAgICAgc2F3Lm5lc3QoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGNiLmNhbGwodGhpcywgdmFycy5zdG9yZSk7XG4gICAgICAgICAgICAgICAgdGhpcy50YXAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBudWxsO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIFxuICAgIHZhciBzdHJlYW0gPSBDaGFpbnNhdy5saWdodChidWlsZGVyKTtcbiAgICBzdHJlYW0ud3JpdGFibGUgPSB0cnVlO1xuICAgIFxuICAgIHZhciBidWZmZXJzID0gQnVmZmVycygpO1xuICAgIFxuICAgIHN0cmVhbS53cml0ZSA9IGZ1bmN0aW9uIChidWYpIHtcbiAgICAgICAgYnVmZmVycy5wdXNoKGJ1Zik7XG4gICAgICAgIGRpc3BhdGNoKCk7XG4gICAgfTtcbiAgICBcbiAgICB2YXIgdmFycyA9IFZhcnMoKTtcbiAgICBcbiAgICB2YXIgZG9uZSA9IGZhbHNlLCBjYXVnaHRFbmQgPSBmYWxzZTtcbiAgICBzdHJlYW0uZW5kID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBjYXVnaHRFbmQgPSB0cnVlO1xuICAgIH07XG4gICAgXG4gICAgc3RyZWFtLnBpcGUgPSBTdHJlYW0ucHJvdG90eXBlLnBpcGU7XG4gICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSkuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICBzdHJlYW1bbmFtZV0gPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlW25hbWVdO1xuICAgIH0pO1xuICAgIFxuICAgIHJldHVybiBzdHJlYW07XG59O1xuXG5leHBvcnRzLnBhcnNlID0gZnVuY3Rpb24gcGFyc2UgKGJ1ZmZlcikge1xuICAgIHZhciBzZWxmID0gd29yZHMoZnVuY3Rpb24gKGJ5dGVzLCBjYikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgICAgIGlmIChvZmZzZXQgKyBieXRlcyA8PSBidWZmZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGJ1ZiA9IGJ1ZmZlci5zbGljZShvZmZzZXQsIG9mZnNldCArIGJ5dGVzKTtcbiAgICAgICAgICAgICAgICBvZmZzZXQgKz0gYnl0ZXM7XG4gICAgICAgICAgICAgICAgdmFycy5zZXQobmFtZSwgY2IoYnVmKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXJzLnNldChuYW1lLCBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzZWxmO1xuICAgICAgICB9O1xuICAgIH0pO1xuICAgIFxuICAgIHZhciBvZmZzZXQgPSAwO1xuICAgIHZhciB2YXJzID0gVmFycygpO1xuICAgIHNlbGYudmFycyA9IHZhcnMuc3RvcmU7XG4gICAgXG4gICAgc2VsZi50YXAgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICAgICAgY2IuY2FsbChzZWxmLCB2YXJzLnN0b3JlKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBcbiAgICBzZWxmLmludG8gPSBmdW5jdGlvbiAoa2V5LCBjYikge1xuICAgICAgICBpZiAoIXZhcnMuZ2V0KGtleSkpIHtcbiAgICAgICAgICAgIHZhcnMuc2V0KGtleSwge30pO1xuICAgICAgICB9XG4gICAgICAgIHZhciBwYXJlbnQgPSB2YXJzO1xuICAgICAgICB2YXJzID0gVmFycyhwYXJlbnQuZ2V0KGtleSkpO1xuICAgICAgICBjYi5jYWxsKHNlbGYsIHZhcnMuc3RvcmUpO1xuICAgICAgICB2YXJzID0gcGFyZW50O1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIFxuICAgIHNlbGYubG9vcCA9IGZ1bmN0aW9uIChjYikge1xuICAgICAgICB2YXIgZW5kID0gZmFsc2U7XG4gICAgICAgIHZhciBlbmRlciA9IGZ1bmN0aW9uICgpIHsgZW5kID0gdHJ1ZSB9O1xuICAgICAgICB3aGlsZSAoZW5kID09PSBmYWxzZSkge1xuICAgICAgICAgICAgY2IuY2FsbChzZWxmLCBlbmRlciwgdmFycy5zdG9yZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBcbiAgICBzZWxmLmJ1ZmZlciA9IGZ1bmN0aW9uIChuYW1lLCBzaXplKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2l6ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHNpemUgPSB2YXJzLmdldChzaXplKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgYnVmID0gYnVmZmVyLnNsaWNlKG9mZnNldCwgTWF0aC5taW4oYnVmZmVyLmxlbmd0aCwgb2Zmc2V0ICsgc2l6ZSkpO1xuICAgICAgICBvZmZzZXQgKz0gc2l6ZTtcbiAgICAgICAgdmFycy5zZXQobmFtZSwgYnVmKTtcbiAgICAgICAgXG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgXG4gICAgc2VsZi5za2lwID0gZnVuY3Rpb24gKGJ5dGVzKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYnl0ZXMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBieXRlcyA9IHZhcnMuZ2V0KGJ5dGVzKTtcbiAgICAgICAgfVxuICAgICAgICBvZmZzZXQgKz0gYnl0ZXM7XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIFxuICAgIHNlbGYuc2NhbiA9IGZ1bmN0aW9uIChuYW1lLCBzZWFyY2gpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZWFyY2ggPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBzZWFyY2ggPSBuZXcgQnVmZmVyKHNlYXJjaCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihzZWFyY2gpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NlYXJjaCBtdXN0IGJlIGEgQnVmZmVyIG9yIGEgc3RyaW5nJyk7XG4gICAgICAgIH1cbiAgICAgICAgdmFycy5zZXQobmFtZSwgbnVsbCk7XG4gICAgICAgIFxuICAgICAgICAvLyBzaW1wbGUgYnV0IHNsb3cgc3RyaW5nIHNlYXJjaFxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSArIG9mZnNldCA8PSBidWZmZXIubGVuZ3RoIC0gc2VhcmNoLmxlbmd0aCArIDE7IGkrKykge1xuICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgICB2YXIgaiA9IDA7XG4gICAgICAgICAgICAgICAgaiA8IHNlYXJjaC5sZW5ndGggJiYgYnVmZmVyW29mZnNldCtpK2pdID09PSBzZWFyY2hbal07XG4gICAgICAgICAgICAgICAgaisrXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGogPT09IHNlYXJjaC5sZW5ndGgpIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICB2YXJzLnNldChuYW1lLCBidWZmZXIuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBpKSk7XG4gICAgICAgIG9mZnNldCArPSBpICsgc2VhcmNoLmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBcbiAgICBzZWxmLnBlZWsgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICAgICAgdmFyIHdhcyA9IG9mZnNldDtcbiAgICAgICAgY2IuY2FsbChzZWxmLCB2YXJzLnN0b3JlKTtcbiAgICAgICAgb2Zmc2V0ID0gd2FzO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIFxuICAgIHNlbGYuZmx1c2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhcnMuc3RvcmUgPSB7fTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBcbiAgICBzZWxmLmVvZiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG9mZnNldCA+PSBidWZmZXIubGVuZ3RoO1xuICAgIH07XG4gICAgXG4gICAgcmV0dXJuIHNlbGY7XG59O1xuXG4vLyBjb252ZXJ0IGJ5dGUgc3RyaW5ncyB0byB1bnNpZ25lZCBsaXR0bGUgZW5kaWFuIG51bWJlcnNcbmZ1bmN0aW9uIGRlY29kZUxFdSAoYnl0ZXMpIHtcbiAgICB2YXIgYWNjID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGFjYyArPSBNYXRoLnBvdygyNTYsaSkgKiBieXRlc1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbn1cblxuLy8gY29udmVydCBieXRlIHN0cmluZ3MgdG8gdW5zaWduZWQgYmlnIGVuZGlhbiBudW1iZXJzXG5mdW5jdGlvbiBkZWNvZGVCRXUgKGJ5dGVzKSB7XG4gICAgdmFyIGFjYyA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBhY2MgKz0gTWF0aC5wb3coMjU2LCBieXRlcy5sZW5ndGggLSBpIC0gMSkgKiBieXRlc1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbn1cblxuLy8gY29udmVydCBieXRlIHN0cmluZ3MgdG8gc2lnbmVkIGJpZyBlbmRpYW4gbnVtYmVyc1xuZnVuY3Rpb24gZGVjb2RlQkVzIChieXRlcykge1xuICAgIHZhciB2YWwgPSBkZWNvZGVCRXUoYnl0ZXMpO1xuICAgIGlmICgoYnl0ZXNbMF0gJiAweDgwKSA9PSAweDgwKSB7XG4gICAgICAgIHZhbCAtPSBNYXRoLnBvdygyNTYsIGJ5dGVzLmxlbmd0aCk7XG4gICAgfVxuICAgIHJldHVybiB2YWw7XG59XG5cbi8vIGNvbnZlcnQgYnl0ZSBzdHJpbmdzIHRvIHNpZ25lZCBsaXR0bGUgZW5kaWFuIG51bWJlcnNcbmZ1bmN0aW9uIGRlY29kZUxFcyAoYnl0ZXMpIHtcbiAgICB2YXIgdmFsID0gZGVjb2RlTEV1KGJ5dGVzKTtcbiAgICBpZiAoKGJ5dGVzW2J5dGVzLmxlbmd0aCAtIDFdICYgMHg4MCkgPT0gMHg4MCkge1xuICAgICAgICB2YWwgLT0gTWF0aC5wb3coMjU2LCBieXRlcy5sZW5ndGgpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsO1xufVxuXG5mdW5jdGlvbiB3b3JkcyAoZGVjb2RlKSB7XG4gICAgdmFyIHNlbGYgPSB7fTtcbiAgICBcbiAgICBbIDEsIDIsIDQsIDggXS5mb3JFYWNoKGZ1bmN0aW9uIChieXRlcykge1xuICAgICAgICB2YXIgYml0cyA9IGJ5dGVzICogODtcbiAgICAgICAgXG4gICAgICAgIHNlbGZbJ3dvcmQnICsgYml0cyArICdsZSddXG4gICAgICAgID0gc2VsZlsnd29yZCcgKyBiaXRzICsgJ2x1J11cbiAgICAgICAgPSBkZWNvZGUoYnl0ZXMsIGRlY29kZUxFdSk7XG4gICAgICAgIFxuICAgICAgICBzZWxmWyd3b3JkJyArIGJpdHMgKyAnbHMnXVxuICAgICAgICA9IGRlY29kZShieXRlcywgZGVjb2RlTEVzKTtcbiAgICAgICAgXG4gICAgICAgIHNlbGZbJ3dvcmQnICsgYml0cyArICdiZSddXG4gICAgICAgID0gc2VsZlsnd29yZCcgKyBiaXRzICsgJ2J1J11cbiAgICAgICAgPSBkZWNvZGUoYnl0ZXMsIGRlY29kZUJFdSk7XG4gICAgICAgIFxuICAgICAgICBzZWxmWyd3b3JkJyArIGJpdHMgKyAnYnMnXVxuICAgICAgICA9IGRlY29kZShieXRlcywgZGVjb2RlQkVzKTtcbiAgICB9KTtcbiAgICBcbiAgICAvLyB3b3JkOGJlKG4pID09IHdvcmQ4bGUobikgZm9yIGFsbCBuXG4gICAgc2VsZi53b3JkOCA9IHNlbGYud29yZDh1ID0gc2VsZi53b3JkOGJlO1xuICAgIHNlbGYud29yZDhzID0gc2VsZi53b3JkOGJzO1xuICAgIFxuICAgIHJldHVybiBzZWxmO1xufVxuIiwKICAgICJ2YXIgVHJhbnNmb3JtID0gcmVxdWlyZSgnc3RyZWFtJykuVHJhbnNmb3JtO1xudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG5cbmZ1bmN0aW9uIE1hdGNoZXJTdHJlYW0ocGF0dGVybkRlc2MsIG1hdGNoRm4pIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgTWF0Y2hlclN0cmVhbSkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBNYXRjaGVyU3RyZWFtKCk7XG4gICAgfVxuXG4gICAgVHJhbnNmb3JtLmNhbGwodGhpcyk7XG5cbiAgICB2YXIgcCA9IHR5cGVvZiBwYXR0ZXJuRGVzYyA9PT0gJ29iamVjdCcgPyBwYXR0ZXJuRGVzYy5wYXR0ZXJuIDogcGF0dGVybkRlc2M7XG5cbiAgICB0aGlzLnBhdHRlcm4gPSBCdWZmZXIuaXNCdWZmZXIocCkgPyBwIDogQnVmZmVyLmZyb20ocCk7XG4gICAgdGhpcy5yZXF1aXJlZExlbmd0aCA9IHRoaXMucGF0dGVybi5sZW5ndGg7XG4gICAgaWYgKHBhdHRlcm5EZXNjLnJlcXVpcmVkRXh0cmFTaXplKSB0aGlzLnJlcXVpcmVkTGVuZ3RoICs9IHBhdHRlcm5EZXNjLnJlcXVpcmVkRXh0cmFTaXplO1xuXG4gICAgdGhpcy5kYXRhID0gbmV3IEJ1ZmZlcignJyk7XG4gICAgdGhpcy5ieXRlc1NvRmFyID0gMDtcblxuICAgIHRoaXMubWF0Y2hGbiA9IG1hdGNoRm47XG59XG5cbnV0aWwuaW5oZXJpdHMoTWF0Y2hlclN0cmVhbSwgVHJhbnNmb3JtKTtcblxuTWF0Y2hlclN0cmVhbS5wcm90b3R5cGUuY2hlY2tEYXRhQ2h1bmsgPSBmdW5jdGlvbiAoaWdub3JlTWF0Y2haZXJvKSB7XG4gICAgdmFyIGVub3VnaERhdGEgPSB0aGlzLmRhdGEubGVuZ3RoID49IHRoaXMucmVxdWlyZWRMZW5ndGg7IC8vIHN0cmljdCBtb3JlIHRoYW4gP1xuICAgIGlmICghZW5vdWdoRGF0YSkgeyByZXR1cm47IH1cblxuICAgIHZhciBtYXRjaEluZGV4ID0gdGhpcy5kYXRhLmluZGV4T2YodGhpcy5wYXR0ZXJuLCBpZ25vcmVNYXRjaFplcm8gPyAxIDogMCk7XG4gICAgaWYgKG1hdGNoSW5kZXggPj0gMCAmJiBtYXRjaEluZGV4ICsgdGhpcy5yZXF1aXJlZExlbmd0aCA+IHRoaXMuZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgaWYgKG1hdGNoSW5kZXggPiAwKSB7XG4gICAgICAgICAgICB2YXIgcGFja2V0ID0gdGhpcy5kYXRhLnNsaWNlKDAsIG1hdGNoSW5kZXgpO1xuICAgICAgICAgICAgdGhpcy5wdXNoKHBhY2tldCk7XG4gICAgICAgICAgICB0aGlzLmJ5dGVzU29GYXIgKz0gbWF0Y2hJbmRleDtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHRoaXMuZGF0YS5zbGljZShtYXRjaEluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG1hdGNoSW5kZXggPT09IC0xKSB7XG4gICAgICAgIHZhciBwYWNrZXRMZW4gPSB0aGlzLmRhdGEubGVuZ3RoIC0gdGhpcy5yZXF1aXJlZExlbmd0aCArIDE7XG5cbiAgICAgICAgdmFyIHBhY2tldCA9IHRoaXMuZGF0YS5zbGljZSgwLCBwYWNrZXRMZW4pO1xuICAgICAgICB0aGlzLnB1c2gocGFja2V0KTtcbiAgICAgICAgdGhpcy5ieXRlc1NvRmFyICs9IHBhY2tldExlbjtcbiAgICAgICAgdGhpcy5kYXRhID0gdGhpcy5kYXRhLnNsaWNlKHBhY2tldExlbik7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBmb3VuZCBtYXRjaFxuICAgIGlmIChtYXRjaEluZGV4ID4gMCkge1xuICAgICAgICB2YXIgcGFja2V0ID0gdGhpcy5kYXRhLnNsaWNlKDAsIG1hdGNoSW5kZXgpO1xuICAgICAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGEuc2xpY2UobWF0Y2hJbmRleCk7XG4gICAgICAgIHRoaXMucHVzaChwYWNrZXQpO1xuICAgICAgICB0aGlzLmJ5dGVzU29GYXIgKz0gbWF0Y2hJbmRleDtcbiAgICB9XG5cbiAgICB2YXIgZmluaXNoZWQgPSB0aGlzLm1hdGNoRm4gPyB0aGlzLm1hdGNoRm4odGhpcy5kYXRhLCB0aGlzLmJ5dGVzU29GYXIpIDogdHJ1ZTtcbiAgICBpZiAoZmluaXNoZWQpIHtcbiAgICAgICAgdGhpcy5kYXRhID0gbmV3IEJ1ZmZlcignJyk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuTWF0Y2hlclN0cmVhbS5wcm90b3R5cGUuX3RyYW5zZm9ybSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gICAgdGhpcy5kYXRhID0gQnVmZmVyLmNvbmNhdChbdGhpcy5kYXRhLCBjaHVua10pO1xuXG4gICAgdmFyIGZpcnN0SXRlcmF0aW9uID0gdHJ1ZTtcbiAgICB3aGlsZSAodGhpcy5jaGVja0RhdGFDaHVuayghZmlyc3RJdGVyYXRpb24pKSB7XG4gICAgICAgIGZpcnN0SXRlcmF0aW9uID0gZmFsc2U7XG4gICAgfVxuXG4gICAgY2IoKTtcbn1cblxuTWF0Y2hlclN0cmVhbS5wcm90b3R5cGUuX2ZsdXNoID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgaWYgKHRoaXMuZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHZhciBmaXJzdEl0ZXJhdGlvbiA9IHRydWU7XG4gICAgICAgIHdoaWxlICh0aGlzLmNoZWNrRGF0YUNodW5rKCFmaXJzdEl0ZXJhdGlvbikpIHtcbiAgICAgICAgICAgIGZpcnN0SXRlcmF0aW9uID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5wdXNoKHRoaXMuZGF0YSk7XG4gICAgICAgIHRoaXMuZGF0YSA9IG51bGw7XG4gICAgfVxuXG4gICAgY2IoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBNYXRjaGVyU3RyZWFtOyIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgc3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJyk7XG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCd1dGlsJykuaW5oZXJpdHM7XG5cbmZ1bmN0aW9uIEVudHJ5KCkge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBFbnRyeSkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBFbnRyeSgpO1xuICAgIH1cblxuICAgIHN0cmVhbS5QYXNzVGhyb3VnaC5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5wYXRoID0gbnVsbDtcbiAgICB0aGlzLnR5cGUgPSBudWxsO1xuICAgIHRoaXMuaXNEaXJlY3RvcnkgPSBmYWxzZTtcbn1cblxuaW5oZXJpdHMoRW50cnksIHN0cmVhbS5QYXNzVGhyb3VnaCk7XG5cbkVudHJ5LnByb3RvdHlwZS5hdXRvZHJhaW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMucGlwZShuZXcgc3RyZWFtLlRyYW5zZm9ybSh7IHRyYW5zZm9ybTogZnVuY3Rpb24gKGQsIGUsIGNiKSB7IGNiKCk7IH0gfSkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEVudHJ5OyIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYmluYXJ5ID0gcmVxdWlyZSgnYmluYXJ5Jyk7XG52YXIgc3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbnZhciB6bGliID0gcmVxdWlyZSgnemxpYicpO1xudmFyIE1hdGNoZXJTdHJlYW0gPSByZXF1aXJlKCcuL21hdGNoZXItc3RyZWFtJyk7XG52YXIgRW50cnkgPSByZXF1aXJlKCcuL2VudHJ5Jyk7XG5cbmNvbnN0IHN0YXRlcyA9IHtcbiAgICBTVFJFQU1fU1RBUlQ6ICAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgU1RBUlQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLFxuICAgIExPQ0FMX0ZJTEVfSEVBREVSOiAgICAgICAgICAgICAgICAgICAgMixcbiAgICBMT0NBTF9GSUxFX0hFQURFUl9TVUZGSVg6ICAgICAgICAgICAgIDMsXG4gICAgRklMRV9EQVRBOiAgICAgICAgICAgICAgICAgICAgICAgICAgICA0LFxuICAgIEZJTEVfREFUQV9FTkQ6ICAgICAgICAgICAgICAgICAgICAgICAgNSxcbiAgICBEQVRBX0RFU0NSSVBUT1I6ICAgICAgICAgICAgICAgICAgICAgIDYsXG4gICAgQ0VOVFJBTF9ESVJFQ1RPUllfRklMRV9IRUFERVI6ICAgICAgICA3LFxuICAgIENFTlRSQUxfRElSRUNUT1JZX0ZJTEVfSEVBREVSX1NVRkZJWDogOCxcbiAgICBDRElSNjRfRU5EOiAgICAgICAgICAgICAgICAgICAgICAgICAgIDksXG4gICAgQ0RJUjY0X0VORF9EQVRBX1NFQ1RPUjogICAgICAgICAgICAgICAxMCxcbiAgICBDRElSNjRfTE9DQVRPUjogICAgICAgICAgICAgICAgICAgICAgIDExLFxuICAgIENFTlRSQUxfRElSRUNUT1JZX0VORDogICAgICAgICAgICAgICAgMTIsXG4gICAgQ0VOVFJBTF9ESVJFQ1RPUllfRU5EX0NPTU1FTlQ6ICAgICAgICAxMyxcbiAgICBUUkFJTElOR19KVU5LOiAgICAgICAgICAgICAgICAgICAgICAgIDE0LFxuXG4gICAgRVJST1I6IDk5XG59XG5cbmNvbnN0IEZPVVJfR0lHUyA9IDQyOTQ5NjcyOTY7XG5cbmNvbnN0IFNJR19MT0NBTF9GSUxFX0hFQURFUiAgPSAweDA0MDM0YjUwO1xuY29uc3QgU0lHX0RBVEFfREVTQ1JJUFRPUiAgICA9IDB4MDgwNzRiNTA7XG5jb25zdCBTSUdfQ0RJUl9SRUNPUkQgICAgICAgID0gMHgwMjAxNGI1MDtcbmNvbnN0IFNJR19DRElSNjRfUkVDT1JEX0VORCAgPSAweDA2MDY0YjUwO1xuY29uc3QgU0lHX0NESVI2NF9MT0NBVE9SX0VORCA9IDB4MDcwNjRiNTA7XG5jb25zdCBTSUdfQ0RJUl9SRUNPUkRfRU5EICAgID0gMHgwNjA1NGI1MDtcblxuZnVuY3Rpb24gVW56aXBTdHJlYW0ob3B0aW9ucykge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBVbnppcFN0cmVhbSkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBVbnppcFN0cmVhbShvcHRpb25zKTtcbiAgICB9XG5cbiAgICBzdHJlYW0uVHJhbnNmb3JtLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIHRoaXMuZGF0YSA9IG5ldyBCdWZmZXIoJycpO1xuICAgIHRoaXMuc3RhdGUgPSBzdGF0ZXMuU1RSRUFNX1NUQVJUO1xuICAgIHRoaXMuc2tpcHBlZEJ5dGVzID0gMDtcbiAgICB0aGlzLnBhcnNlZEVudGl0eSA9IG51bGw7XG4gICAgdGhpcy5vdXRTdHJlYW1JbmZvID0ge307XG59XG5cbnV0aWwuaW5oZXJpdHMoVW56aXBTdHJlYW0sIHN0cmVhbS5UcmFuc2Zvcm0pO1xuXG5VbnppcFN0cmVhbS5wcm90b3R5cGUucHJvY2Vzc0RhdGFDaHVuayA9IGZ1bmN0aW9uIChjaHVuaykge1xuICAgIHZhciByZXF1aXJlZExlbmd0aDtcblxuICAgIHN3aXRjaCAodGhpcy5zdGF0ZSkge1xuICAgICAgICBjYXNlIHN0YXRlcy5TVFJFQU1fU1RBUlQ6XG4gICAgICAgIGNhc2Ugc3RhdGVzLlNUQVJUOlxuICAgICAgICAgICAgcmVxdWlyZWRMZW5ndGggPSA0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Ugc3RhdGVzLkxPQ0FMX0ZJTEVfSEVBREVSOlxuICAgICAgICAgICAgcmVxdWlyZWRMZW5ndGggPSAyNjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIHN0YXRlcy5MT0NBTF9GSUxFX0hFQURFUl9TVUZGSVg6XG4gICAgICAgICAgICByZXF1aXJlZExlbmd0aCA9IHRoaXMucGFyc2VkRW50aXR5LmZpbGVOYW1lTGVuZ3RoICsgdGhpcy5wYXJzZWRFbnRpdHkuZXh0cmFGaWVsZExlbmd0aDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIHN0YXRlcy5EQVRBX0RFU0NSSVBUT1I6XG4gICAgICAgICAgICByZXF1aXJlZExlbmd0aCA9IDEyO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Ugc3RhdGVzLkNFTlRSQUxfRElSRUNUT1JZX0ZJTEVfSEVBREVSOlxuICAgICAgICAgICAgcmVxdWlyZWRMZW5ndGggPSA0MjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIHN0YXRlcy5DRU5UUkFMX0RJUkVDVE9SWV9GSUxFX0hFQURFUl9TVUZGSVg6XG4gICAgICAgICAgICByZXF1aXJlZExlbmd0aCA9IHRoaXMucGFyc2VkRW50aXR5LmZpbGVOYW1lTGVuZ3RoICsgdGhpcy5wYXJzZWRFbnRpdHkuZXh0cmFGaWVsZExlbmd0aCArIHRoaXMucGFyc2VkRW50aXR5LmZpbGVDb21tZW50TGVuZ3RoO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Ugc3RhdGVzLkNESVI2NF9FTkQ6XG4gICAgICAgICAgICByZXF1aXJlZExlbmd0aCA9IDUyO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Ugc3RhdGVzLkNESVI2NF9FTkRfREFUQV9TRUNUT1I6XG4gICAgICAgICAgICByZXF1aXJlZExlbmd0aCA9IHRoaXMucGFyc2VkRW50aXR5LmNlbnRyYWxEaXJlY3RvcnlSZWNvcmRTaXplIC0gNDQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBzdGF0ZXMuQ0RJUjY0X0xPQ0FUT1I6XG4gICAgICAgICAgICByZXF1aXJlZExlbmd0aCA9IDE2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Ugc3RhdGVzLkNFTlRSQUxfRElSRUNUT1JZX0VORDpcbiAgICAgICAgICAgIHJlcXVpcmVkTGVuZ3RoID0gMTg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBzdGF0ZXMuQ0VOVFJBTF9ESVJFQ1RPUllfRU5EX0NPTU1FTlQ6XG4gICAgICAgICAgICByZXF1aXJlZExlbmd0aCA9IHRoaXMucGFyc2VkRW50aXR5LmNvbW1lbnRMZW5ndGg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBzdGF0ZXMuRklMRV9EQVRBOlxuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIGNhc2Ugc3RhdGVzLkZJTEVfREFUQV9FTkQ6XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgY2FzZSBzdGF0ZXMuVFJBSUxJTkdfSlVOSzpcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZGVidWcpIGNvbnNvbGUubG9nKFwiZm91bmRcIiwgY2h1bmsubGVuZ3RoLCBcImJ5dGVzIG9mIFRSQUlMSU5HX0pVTktcIik7XG4gICAgICAgICAgICByZXR1cm4gY2h1bmsubGVuZ3RoO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGNodW5rLmxlbmd0aDtcbiAgICB9XG5cbiAgICB2YXIgY2h1bmtMZW5ndGggPSBjaHVuay5sZW5ndGg7XG4gICAgaWYgKGNodW5rTGVuZ3RoIDwgcmVxdWlyZWRMZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgc3dpdGNoICh0aGlzLnN0YXRlKSB7XG4gICAgICAgIGNhc2Ugc3RhdGVzLlNUUkVBTV9TVEFSVDpcbiAgICAgICAgY2FzZSBzdGF0ZXMuU1RBUlQ6XG4gICAgICAgICAgICB2YXIgc2lnbmF0dXJlID0gY2h1bmsucmVhZFVJbnQzMkxFKDApO1xuICAgICAgICAgICAgc3dpdGNoIChzaWduYXR1cmUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFNJR19MT0NBTF9GSUxFX0hFQURFUjpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlcy5MT0NBTF9GSUxFX0hFQURFUjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBTSUdfQ0RJUl9SRUNPUkQ6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZXMuQ0VOVFJBTF9ESVJFQ1RPUllfRklMRV9IRUFERVI7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgU0lHX0NESVI2NF9SRUNPUkRfRU5EOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGVzLkNESVI2NF9FTkQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgU0lHX0NESVI2NF9MT0NBVE9SX0VORDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlcy5DRElSNjRfTE9DQVRPUjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBTSUdfQ0RJUl9SRUNPUkRfRU5EOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGVzLkNFTlRSQUxfRElSRUNUT1JZX0VORDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlzU3RyZWFtU3RhcnQgPSB0aGlzLnN0YXRlID09PSBzdGF0ZXMuU1RSRUFNX1NUQVJUO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzU3RyZWFtU3RhcnQgJiYgKHNpZ25hdHVyZSAmIDB4ZmZmZikgIT09IDB4NGI1MCAmJiB0aGlzLnNraXBwZWRCeXRlcyA8IDI2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSdsbCBhbGxvdyBhIHBhZGRpbmcgb2YgbWF4IDI4IGJ5dGVzXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVtYWluaW5nID0gc2lnbmF0dXJlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRvU2tpcCA9IDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IDQgJiYgcmVtYWluaW5nICE9PSAwOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1haW5pbmcgPSByZW1haW5pbmcgPj4+IDg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChyZW1haW5pbmcgJiAweGZmKSA9PT0gMHg1MCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b1NraXAgPSBpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNraXBwZWRCeXRlcyArPSB0b1NraXA7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmRlYnVnKSBjb25zb2xlLmxvZygnU2tpcHBlZCcsIHRoaXMuc2tpcHBlZEJ5dGVzLCAnYnl0ZXMnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0b1NraXA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlcy5FUlJPUjtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVyck1zZyA9IGlzU3RyZWFtU3RhcnQgPyBcIk5vdCBhIHZhbGlkIHppcCBmaWxlXCIgOiBcIkludmFsaWQgc2lnbmF0dXJlIGluIHppcCBmaWxlXCI7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZGVidWcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaWcgPSBjaHVuay5yZWFkVUludDMyTEUoMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXNTdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkgeyBhc1N0cmluZyA9IGNodW5rLnNsaWNlKDAsIDQpLnRvU3RyaW5nKCk7IH0gY2F0Y2ggKGUpIHt9XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIlVuZXhwZWN0ZWQgc2lnbmF0dXJlIGluIHppcCBmaWxlOiAweFwiICsgc2lnLnRvU3RyaW5nKDE2KSwgJ1wiJyArIGFzU3RyaW5nICsgJ1wiLCBza2lwcGVkJywgdGhpcy5za2lwcGVkQnl0ZXMsICdieXRlcycpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdChcImVycm9yXCIsIG5ldyBFcnJvcihlcnJNc2cpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNodW5rLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2tpcHBlZEJ5dGVzID0gMDtcbiAgICAgICAgICAgIHJldHVybiByZXF1aXJlZExlbmd0aDtcblxuICAgICAgICBjYXNlIHN0YXRlcy5MT0NBTF9GSUxFX0hFQURFUjpcbiAgICAgICAgICAgIHRoaXMucGFyc2VkRW50aXR5ID0gdGhpcy5fcmVhZEZpbGUoY2h1bmspO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlcy5MT0NBTF9GSUxFX0hFQURFUl9TVUZGSVg7XG5cbiAgICAgICAgICAgIHJldHVybiByZXF1aXJlZExlbmd0aDtcblxuICAgICAgICBjYXNlIHN0YXRlcy5MT0NBTF9GSUxFX0hFQURFUl9TVUZGSVg6XG4gICAgICAgICAgICB2YXIgZW50cnkgPSBuZXcgRW50cnkoKTtcbiAgICAgICAgICAgIHZhciBpc1V0ZjggPSAodGhpcy5wYXJzZWRFbnRpdHkuZmxhZ3MgJiAweDgwMCkgIT09IDA7XG4gICAgICAgICAgICBlbnRyeS5wYXRoID0gdGhpcy5fZGVjb2RlU3RyaW5nKGNodW5rLnNsaWNlKDAsIHRoaXMucGFyc2VkRW50aXR5LmZpbGVOYW1lTGVuZ3RoKSwgaXNVdGY4KTtcbiAgICAgICAgICAgIHZhciBleHRyYURhdGFCdWZmZXIgPSBjaHVuay5zbGljZSh0aGlzLnBhcnNlZEVudGl0eS5maWxlTmFtZUxlbmd0aCwgdGhpcy5wYXJzZWRFbnRpdHkuZmlsZU5hbWVMZW5ndGggKyB0aGlzLnBhcnNlZEVudGl0eS5leHRyYUZpZWxkTGVuZ3RoKTtcbiAgICAgICAgICAgIHZhciBleHRyYSA9IHRoaXMuX3JlYWRFeHRyYUZpZWxkcyhleHRyYURhdGFCdWZmZXIpO1xuICAgICAgICAgICAgaWYgKGV4dHJhICYmIGV4dHJhLnBhcnNlZCkge1xuICAgICAgICAgICAgICAgIGlmIChleHRyYS5wYXJzZWQucGF0aCAmJiAhaXNVdGY4KSB7XG4gICAgICAgICAgICAgICAgICAgIGVudHJ5LnBhdGggPSBleHRyYS5wYXJzZWQucGF0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKE51bWJlci5pc0Zpbml0ZShleHRyYS5wYXJzZWQudW5jb21wcmVzc2VkU2l6ZSkgJiYgdGhpcy5wYXJzZWRFbnRpdHkudW5jb21wcmVzc2VkU2l6ZSA9PT0gRk9VUl9HSUdTLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJzZWRFbnRpdHkudW5jb21wcmVzc2VkU2l6ZSA9IGV4dHJhLnBhcnNlZC51bmNvbXByZXNzZWRTaXplO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoTnVtYmVyLmlzRmluaXRlKGV4dHJhLnBhcnNlZC5jb21wcmVzc2VkU2l6ZSkgJiYgdGhpcy5wYXJzZWRFbnRpdHkuY29tcHJlc3NlZFNpemUgPT09IEZPVVJfR0lHUy0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFyc2VkRW50aXR5LmNvbXByZXNzZWRTaXplID0gZXh0cmEucGFyc2VkLmNvbXByZXNzZWRTaXplO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucGFyc2VkRW50aXR5LmV4dHJhID0gZXh0cmEucGFyc2VkIHx8IHt9O1xuXG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmRlYnVnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVidWdPYmogPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLnBhcnNlZEVudGl0eSwge1xuICAgICAgICAgICAgICAgICAgICBwYXRoOiBlbnRyeS5wYXRoLFxuICAgICAgICAgICAgICAgICAgICBmbGFnczogJzB4JyArIHRoaXMucGFyc2VkRW50aXR5LmZsYWdzLnRvU3RyaW5nKDE2KSxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFGaWVsZHM6IGV4dHJhICYmIGV4dHJhLmRlYnVnXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJkZWNvZGVkIExPQ0FMX0ZJTEVfSEVBREVSOlwiLCBKU09OLnN0cmluZ2lmeShkZWJ1Z09iaiwgbnVsbCwgMikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fcHJlcGFyZU91dFN0cmVhbSh0aGlzLnBhcnNlZEVudGl0eSwgZW50cnkpO1xuXG4gICAgICAgICAgICB0aGlzLmVtaXQoXCJlbnRyeVwiLCBlbnRyeSk7XG5cbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZXMuRklMRV9EQVRBO1xuXG4gICAgICAgICAgICByZXR1cm4gcmVxdWlyZWRMZW5ndGg7XG5cbiAgICAgICAgY2FzZSBzdGF0ZXMuQ0VOVFJBTF9ESVJFQ1RPUllfRklMRV9IRUFERVI6XG4gICAgICAgICAgICB0aGlzLnBhcnNlZEVudGl0eSA9IHRoaXMuX3JlYWRDZW50cmFsRGlyZWN0b3J5RW50cnkoY2h1bmspO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlcy5DRU5UUkFMX0RJUkVDVE9SWV9GSUxFX0hFQURFUl9TVUZGSVg7XG5cbiAgICAgICAgICAgIHJldHVybiByZXF1aXJlZExlbmd0aDtcblxuICAgICAgICBjYXNlIHN0YXRlcy5DRU5UUkFMX0RJUkVDVE9SWV9GSUxFX0hFQURFUl9TVUZGSVg6XG4gICAgICAgICAgICAvLyBnb3QgZmlsZSBuYW1lIGluIGNodW5rWzAuLl1cbiAgICAgICAgICAgIHZhciBpc1V0ZjggPSAodGhpcy5wYXJzZWRFbnRpdHkuZmxhZ3MgJiAweDgwMCkgIT09IDA7XG4gICAgICAgICAgICB2YXIgcGF0aCA9IHRoaXMuX2RlY29kZVN0cmluZyhjaHVuay5zbGljZSgwLCB0aGlzLnBhcnNlZEVudGl0eS5maWxlTmFtZUxlbmd0aCksIGlzVXRmOCk7XG4gICAgICAgICAgICB2YXIgZXh0cmFEYXRhQnVmZmVyID0gY2h1bmsuc2xpY2UodGhpcy5wYXJzZWRFbnRpdHkuZmlsZU5hbWVMZW5ndGgsIHRoaXMucGFyc2VkRW50aXR5LmZpbGVOYW1lTGVuZ3RoICsgdGhpcy5wYXJzZWRFbnRpdHkuZXh0cmFGaWVsZExlbmd0aCk7XG4gICAgICAgICAgICB2YXIgZXh0cmEgPSB0aGlzLl9yZWFkRXh0cmFGaWVsZHMoZXh0cmFEYXRhQnVmZmVyKTtcbiAgICAgICAgICAgIGlmIChleHRyYSAmJiBleHRyYS5wYXJzZWQgJiYgZXh0cmEucGFyc2VkLnBhdGggJiYgIWlzVXRmOCkge1xuICAgICAgICAgICAgICAgIHBhdGggPSBleHRyYS5wYXJzZWQucGF0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucGFyc2VkRW50aXR5LmV4dHJhID0gZXh0cmEucGFyc2VkO1xuXG4gICAgICAgICAgICB2YXIgaXNVbml4ID0gKCh0aGlzLnBhcnNlZEVudGl0eS52ZXJzaW9uTWFkZUJ5ICYgMHhmZjAwKSA+PiA4KSA9PT0gMztcbiAgICAgICAgICAgIHZhciB1bml4QXR0cnMsIGlzU3ltbGluaztcbiAgICAgICAgICAgIGlmIChpc1VuaXgpIHtcbiAgICAgICAgICAgICAgICB1bml4QXR0cnMgPSB0aGlzLnBhcnNlZEVudGl0eS5leHRlcm5hbEZpbGVBdHRyaWJ1dGVzID4+PiAxNjtcbiAgICAgICAgICAgICAgICB2YXIgZmlsZVR5cGUgPSB1bml4QXR0cnMgPj4+IDEyO1xuICAgICAgICAgICAgICAgIGlzU3ltbGluayA9IChmaWxlVHlwZSAmIDBvMTIpID09PSAwbzEyOyAvLyBfX1NfSUZMTktcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZGVidWcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkZWJ1Z09iaiA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMucGFyc2VkRW50aXR5LCB7XG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IHBhdGgsXG4gICAgICAgICAgICAgICAgICAgIGZsYWdzOiAnMHgnICsgdGhpcy5wYXJzZWRFbnRpdHkuZmxhZ3MudG9TdHJpbmcoMTYpLFxuICAgICAgICAgICAgICAgICAgICB1bml4QXR0cnM6IHVuaXhBdHRycyAmJiAnMCcgKyB1bml4QXR0cnMudG9TdHJpbmcoOCksXG4gICAgICAgICAgICAgICAgICAgIGlzU3ltbGluazogaXNTeW1saW5rLFxuICAgICAgICAgICAgICAgICAgICBleHRyYUZpZWxkczogZXh0cmEuZGVidWcsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJkZWNvZGVkIENFTlRSQUxfRElSRUNUT1JZX0ZJTEVfSEVBREVSOlwiLCBKU09OLnN0cmluZ2lmeShkZWJ1Z09iaiwgbnVsbCwgMikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlcy5TVEFSVDtcblxuICAgICAgICAgICAgcmV0dXJuIHJlcXVpcmVkTGVuZ3RoO1xuXG4gICAgICAgIGNhc2Ugc3RhdGVzLkNESVI2NF9FTkQ6XG4gICAgICAgICAgICB0aGlzLnBhcnNlZEVudGl0eSA9IHRoaXMuX3JlYWRFbmRPZkNlbnRyYWxEaXJlY3Rvcnk2NChjaHVuayk7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmRlYnVnKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJkZWNvZGVkIENESVI2NF9FTkRfUkVDT1JEOlwiLCB0aGlzLnBhcnNlZEVudGl0eSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGVzLkNESVI2NF9FTkRfREFUQV9TRUNUT1I7XG5cbiAgICAgICAgICAgIHJldHVybiByZXF1aXJlZExlbmd0aDtcblxuICAgICAgICBjYXNlIHN0YXRlcy5DRElSNjRfRU5EX0RBVEFfU0VDVE9SOlxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlcy5TVEFSVDtcblxuICAgICAgICAgICAgcmV0dXJuIHJlcXVpcmVkTGVuZ3RoO1xuXG4gICAgICAgIGNhc2Ugc3RhdGVzLkNESVI2NF9MT0NBVE9SOlxuICAgICAgICAgICAgLy8gaWdub3JlLCBub3RoaW5nIGludGVyZXN0aW5nXG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGVzLlNUQVJUO1xuXG4gICAgICAgICAgICByZXR1cm4gcmVxdWlyZWRMZW5ndGg7XG5cbiAgICAgICAgY2FzZSBzdGF0ZXMuQ0VOVFJBTF9ESVJFQ1RPUllfRU5EOlxuICAgICAgICAgICAgdGhpcy5wYXJzZWRFbnRpdHkgPSB0aGlzLl9yZWFkRW5kT2ZDZW50cmFsRGlyZWN0b3J5KGNodW5rKTtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZGVidWcpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImRlY29kZWQgQ0VOVFJBTF9ESVJFQ1RPUllfRU5EOlwiLCB0aGlzLnBhcnNlZEVudGl0eSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGVzLkNFTlRSQUxfRElSRUNUT1JZX0VORF9DT01NRU5UO1xuXG4gICAgICAgICAgICByZXR1cm4gcmVxdWlyZWRMZW5ndGg7XG5cbiAgICAgICAgY2FzZSBzdGF0ZXMuQ0VOVFJBTF9ESVJFQ1RPUllfRU5EX0NPTU1FTlQ6XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmRlYnVnKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJkZWNvZGVkIENFTlRSQUxfRElSRUNUT1JZX0VORF9DT01NRU5UOlwiLCBjaHVuay5zbGljZSgwLCByZXF1aXJlZExlbmd0aCkudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGVzLlRSQUlMSU5HX0pVTks7XG5cbiAgICAgICAgICAgIHJldHVybiByZXF1aXJlZExlbmd0aDtcblxuICAgICAgICBjYXNlIHN0YXRlcy5FUlJPUjpcbiAgICAgICAgICAgIHJldHVybiBjaHVuay5sZW5ndGg7IC8vIGRpc2NhcmRcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJkaWRuJ3QgaGFuZGxlIHN0YXRlICNcIiwgdGhpcy5zdGF0ZSwgXCJkaXNjYXJkaW5nXCIpO1xuICAgICAgICAgICAgcmV0dXJuIGNodW5rLmxlbmd0aDtcbiAgICB9XG59XG5cblVuemlwU3RyZWFtLnByb3RvdHlwZS5fcHJlcGFyZU91dFN0cmVhbSA9IGZ1bmN0aW9uICh2YXJzLCBlbnRyeSkge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHZhciBpc0RpcmVjdG9yeSA9IHZhcnMudW5jb21wcmVzc2VkU2l6ZSA9PT0gMCAmJiAvW1xcL1xcXFxdJC8udGVzdChlbnRyeS5wYXRoKTtcbiAgICAvLyBwcm90ZWN0IGFnYWluc3QgbWFsaWNpb3VzIHppcCBmaWxlcyB3aGljaCB3YW50IHRvIGV4dHJhY3QgdG8gcGFyZW50IGRpcnNcbiAgICBlbnRyeS5wYXRoID0gZW50cnkucGF0aC5yZXBsYWNlKC8oPzw9XnxbL1xcXFxdKylbLl1bLl0rKD89Wy9cXFxcXSt8JCkvZywgXCIuXCIpO1xuICAgIGVudHJ5LnR5cGUgPSBpc0RpcmVjdG9yeSA/ICdEaXJlY3RvcnknIDogJ0ZpbGUnO1xuICAgIGVudHJ5LmlzRGlyZWN0b3J5ID0gaXNEaXJlY3Rvcnk7XG5cbiAgICB2YXIgZmlsZVNpemVLbm93biA9ICEodmFycy5mbGFncyAmIDB4MDgpO1xuICAgIGlmIChmaWxlU2l6ZUtub3duKSB7XG4gICAgICAgIGVudHJ5LnNpemUgPSB2YXJzLnVuY29tcHJlc3NlZFNpemU7XG4gICAgfVxuXG4gICAgdmFyIGlzVmVyc2lvblN1cHBvcnRlZCA9IHZhcnMudmVyc2lvbnNOZWVkZWRUb0V4dHJhY3QgPD0gNDU7XG5cbiAgICB0aGlzLm91dFN0cmVhbUluZm8gPSB7XG4gICAgICAgIHN0cmVhbTogbnVsbCxcbiAgICAgICAgbGltaXQ6IGZpbGVTaXplS25vd24gPyB2YXJzLmNvbXByZXNzZWRTaXplIDogLTEsXG4gICAgICAgIHdyaXR0ZW46IDBcbiAgICB9O1xuXG4gICAgaWYgKCFmaWxlU2l6ZUtub3duKSB7XG4gICAgICAgIHZhciBwYXR0ZXJuID0gbmV3IEJ1ZmZlcig0KTtcbiAgICAgICAgcGF0dGVybi53cml0ZVVJbnQzMkxFKFNJR19EQVRBX0RFU0NSSVBUT1IsIDApO1xuICAgICAgICB2YXIgemlwNjRNb2RlID0gdmFycy5leHRyYS56aXA2NE1vZGU7XG4gICAgICAgIHZhciBleHRyYVNpemUgPSB6aXA2NE1vZGUgPyAyMCA6IDEyO1xuICAgICAgICB2YXIgc2VhcmNoUGF0dGVybiA9IHtcbiAgICAgICAgICAgIHBhdHRlcm46IHBhdHRlcm4sXG4gICAgICAgICAgICByZXF1aXJlZEV4dHJhU2l6ZTogZXh0cmFTaXplXG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbWF0Y2hlclN0cmVhbSA9IG5ldyBNYXRjaGVyU3RyZWFtKHNlYXJjaFBhdHRlcm4sIGZ1bmN0aW9uIChtYXRjaGVkQ2h1bmssIHNpemVTb0Zhcikge1xuICAgICAgICAgICAgdmFyIHZhcnMgPSBzZWxmLl9yZWFkRGF0YURlc2NyaXB0b3IobWF0Y2hlZENodW5rLCB6aXA2NE1vZGUpO1xuXG4gICAgICAgICAgICB2YXIgY29tcHJlc3NlZFNpemVNYXRjaGVzID0gdmFycy5jb21wcmVzc2VkU2l6ZSA9PT0gc2l6ZVNvRmFyO1xuICAgICAgICAgICAgLy8gbGV0J3MgYWxzbyBkZWFsIHdpdGggYXJjaGl2ZXMgd2l0aCA0R2lCKyBmaWxlcyB3aXRob3V0IHppcDY0XG4gICAgICAgICAgICBpZiAoIXppcDY0TW9kZSAmJiAhY29tcHJlc3NlZFNpemVNYXRjaGVzICYmIHNpemVTb0ZhciA+PSBGT1VSX0dJR1MpIHtcbiAgICAgICAgICAgICAgICB2YXIgb3ZlcmZsb3duID0gc2l6ZVNvRmFyIC0gRk9VUl9HSUdTO1xuICAgICAgICAgICAgICAgIHdoaWxlIChvdmVyZmxvd24gPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICBjb21wcmVzc2VkU2l6ZU1hdGNoZXMgPSB2YXJzLmNvbXByZXNzZWRTaXplID09PSBvdmVyZmxvd247XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21wcmVzc2VkU2l6ZU1hdGNoZXMpIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBvdmVyZmxvd24gLT0gRk9VUl9HSUdTO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghY29tcHJlc3NlZFNpemVNYXRjaGVzKSB7IHJldHVybjsgfVxuXG4gICAgICAgICAgICBzZWxmLnN0YXRlID0gc3RhdGVzLkZJTEVfREFUQV9FTkQ7XG4gICAgICAgICAgICB2YXIgc2xpY2VPZmZzZXQgPSB6aXA2NE1vZGUgPyAyNCA6IDE2O1xuICAgICAgICAgICAgaWYgKHNlbGYuZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5kYXRhID0gQnVmZmVyLmNvbmNhdChbbWF0Y2hlZENodW5rLnNsaWNlKHNsaWNlT2Zmc2V0KSwgc2VsZi5kYXRhXSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNlbGYuZGF0YSA9IG1hdGNoZWRDaHVuay5zbGljZShzbGljZU9mZnNldCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5vdXRTdHJlYW1JbmZvLnN0cmVhbSA9IG1hdGNoZXJTdHJlYW07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vdXRTdHJlYW1JbmZvLnN0cmVhbSA9IG5ldyBzdHJlYW0uUGFzc1Rocm91Z2goKTtcbiAgICB9XG5cbiAgICB2YXIgaXNFbmNyeXB0ZWQgPSAodmFycy5mbGFncyAmIDB4MDEpIHx8ICh2YXJzLmZsYWdzICYgMHg0MCk7XG4gICAgaWYgKGlzRW5jcnlwdGVkIHx8ICFpc1ZlcnNpb25TdXBwb3J0ZWQpIHtcbiAgICAgICAgdmFyIG1lc3NhZ2UgPSBpc0VuY3J5cHRlZCA/IFwiRW5jcnlwdGVkIGZpbGVzIGFyZSBub3Qgc3VwcG9ydGVkIVwiXG4gICAgICAgICAgICA6IChcIlppcCB2ZXJzaW9uIFwiICsgTWF0aC5mbG9vcih2YXJzLnZlcnNpb25zTmVlZGVkVG9FeHRyYWN0IC8gMTApICsgXCIuXCIgKyB2YXJzLnZlcnNpb25zTmVlZGVkVG9FeHRyYWN0ICUgMTAgKyBcIiBpcyBub3Qgc3VwcG9ydGVkXCIpO1xuXG4gICAgICAgIGVudHJ5LnNraXAgPSB0cnVlO1xuICAgICAgICBzZXRJbW1lZGlhdGUoKCkgPT4ge1xuICAgICAgICAgICAgc2VsZi5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcihtZXNzYWdlKSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIHRyeSB0byBza2lwIG92ZXIgdGhpcyBlbnRyeVxuICAgICAgICB0aGlzLm91dFN0cmVhbUluZm8uc3RyZWFtLnBpcGUobmV3IEVudHJ5KCkuYXV0b2RyYWluKCkpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGlzQ29tcHJlc3NlZCA9IHZhcnMuY29tcHJlc3Npb25NZXRob2QgPiAwO1xuICAgIGlmIChpc0NvbXByZXNzZWQpIHtcbiAgICAgICAgdmFyIGluZmxhdGVyID0gemxpYi5jcmVhdGVJbmZsYXRlUmF3KCk7XG4gICAgICAgIGluZmxhdGVyLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIHNlbGYuc3RhdGUgPSBzdGF0ZXMuRVJST1I7XG4gICAgICAgICAgICBzZWxmLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMub3V0U3RyZWFtSW5mby5zdHJlYW0ucGlwZShpbmZsYXRlcikucGlwZShlbnRyeSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vdXRTdHJlYW1JbmZvLnN0cmVhbS5waXBlKGVudHJ5KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fZHJhaW5BbGxFbnRyaWVzKSB7XG4gICAgICAgIGVudHJ5LmF1dG9kcmFpbigpO1xuICAgIH1cbn1cblxuVW56aXBTdHJlYW0ucHJvdG90eXBlLl9yZWFkRmlsZSA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgdmFyIHZhcnMgPSBiaW5hcnkucGFyc2UoZGF0YSlcbiAgICAgICAgLndvcmQxNmx1KCd2ZXJzaW9uc05lZWRlZFRvRXh0cmFjdCcpXG4gICAgICAgIC53b3JkMTZsdSgnZmxhZ3MnKVxuICAgICAgICAud29yZDE2bHUoJ2NvbXByZXNzaW9uTWV0aG9kJylcbiAgICAgICAgLndvcmQxNmx1KCdsYXN0TW9kaWZpZWRUaW1lJylcbiAgICAgICAgLndvcmQxNmx1KCdsYXN0TW9kaWZpZWREYXRlJylcbiAgICAgICAgLndvcmQzMmx1KCdjcmMzMicpXG4gICAgICAgIC53b3JkMzJsdSgnY29tcHJlc3NlZFNpemUnKVxuICAgICAgICAud29yZDMybHUoJ3VuY29tcHJlc3NlZFNpemUnKVxuICAgICAgICAud29yZDE2bHUoJ2ZpbGVOYW1lTGVuZ3RoJylcbiAgICAgICAgLndvcmQxNmx1KCdleHRyYUZpZWxkTGVuZ3RoJylcbiAgICAgICAgLnZhcnM7XG5cbiAgICByZXR1cm4gdmFycztcbn1cblxuVW56aXBTdHJlYW0ucHJvdG90eXBlLl9yZWFkRXh0cmFGaWVsZHMgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgIHZhciBleHRyYSA9IHt9O1xuICAgIHZhciByZXN1bHQgPSB7IHBhcnNlZDogZXh0cmEgfTtcbiAgICBpZiAodGhpcy5vcHRpb25zLmRlYnVnKSB7XG4gICAgICAgIHJlc3VsdC5kZWJ1ZyA9IFtdO1xuICAgIH1cbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHdoaWxlIChpbmRleCA8IGRhdGEubGVuZ3RoKSB7XG4gICAgICAgIHZhciB2YXJzID0gYmluYXJ5LnBhcnNlKGRhdGEpXG4gICAgICAgICAgICAuc2tpcChpbmRleClcbiAgICAgICAgICAgIC53b3JkMTZsdSgnZXh0cmFJZCcpXG4gICAgICAgICAgICAud29yZDE2bHUoJ2V4dHJhU2l6ZScpXG4gICAgICAgICAgICAudmFycztcblxuICAgICAgICBpbmRleCArPSA0O1xuXG4gICAgICAgIHZhciBmaWVsZFR5cGUgPSB1bmRlZmluZWQ7XG4gICAgICAgIHN3aXRjaCAodmFycy5leHRyYUlkKSB7XG4gICAgICAgICAgICBjYXNlIDB4MDAwMTpcbiAgICAgICAgICAgICAgICBmaWVsZFR5cGUgPSBcIlppcDY0IGV4dGVuZGVkIGluZm9ybWF0aW9uIGV4dHJhIGZpZWxkXCI7XG4gICAgICAgICAgICAgICAgdmFyIHo2NHZhcnMgPSBiaW5hcnkucGFyc2UoZGF0YS5zbGljZShpbmRleCwgaW5kZXgrdmFycy5leHRyYVNpemUpKVxuICAgICAgICAgICAgICAgICAgICAud29yZDY0bHUoJ3VuY29tcHJlc3NlZFNpemUnKVxuICAgICAgICAgICAgICAgICAgICAud29yZDY0bHUoJ2NvbXByZXNzZWRTaXplJylcbiAgICAgICAgICAgICAgICAgICAgLndvcmQ2NGx1KCdvZmZzZXRUb0xvY2FsSGVhZGVyJylcbiAgICAgICAgICAgICAgICAgICAgLndvcmQzMmx1KCdkaXNrU3RhcnROdW1iZXInKVxuICAgICAgICAgICAgICAgICAgICAudmFycztcbiAgICAgICAgICAgICAgICBpZiAoejY0dmFycy51bmNvbXByZXNzZWRTaXplICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4dHJhLnVuY29tcHJlc3NlZFNpemUgPSB6NjR2YXJzLnVuY29tcHJlc3NlZFNpemU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh6NjR2YXJzLmNvbXByZXNzZWRTaXplICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4dHJhLmNvbXByZXNzZWRTaXplID0gejY0dmFycy5jb21wcmVzc2VkU2l6ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZXh0cmEuemlwNjRNb2RlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMHgwMDBhOlxuICAgICAgICAgICAgICAgIGZpZWxkVHlwZSA9IFwiTlRGUyBleHRyYSBmaWVsZFwiO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAweDU0NTU6XG4gICAgICAgICAgICAgICAgZmllbGRUeXBlID0gXCJleHRlbmRlZCB0aW1lc3RhbXBcIjtcbiAgICAgICAgICAgICAgICB2YXIgdGltZXN0YW1wRmllbGRzID0gZGF0YS5yZWFkVUludDgoaW5kZXgpO1xuICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSAxO1xuICAgICAgICAgICAgICAgIGlmICh2YXJzLmV4dHJhU2l6ZSA+PSBvZmZzZXQgKyA0ICYmIHRpbWVzdGFtcEZpZWxkcyAmIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgZXh0cmEubXRpbWUgPSBuZXcgRGF0ZShkYXRhLnJlYWRVSW50MzJMRShpbmRleCArIG9mZnNldCkgKiAxMDAwKTtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh2YXJzLmV4dHJhU2l6ZSA+PSBvZmZzZXQgKyA0ICYmIHRpbWVzdGFtcEZpZWxkcyAmIDIpIHtcbiAgICAgICAgICAgICAgICAgICAgZXh0cmEuYXRpbWUgPSBuZXcgRGF0ZShkYXRhLnJlYWRVSW50MzJMRShpbmRleCArIG9mZnNldCkgKiAxMDAwKTtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh2YXJzLmV4dHJhU2l6ZSA+PSBvZmZzZXQgKyA0ICYmIHRpbWVzdGFtcEZpZWxkcyAmIDQpIHtcbiAgICAgICAgICAgICAgICAgICAgZXh0cmEuY3RpbWUgPSBuZXcgRGF0ZShkYXRhLnJlYWRVSW50MzJMRShpbmRleCArIG9mZnNldCkgKiAxMDAwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDB4NzA3NTpcbiAgICAgICAgICAgICAgICBmaWVsZFR5cGUgPSBcIkluZm8tWklQIFVuaWNvZGUgUGF0aCBFeHRyYSBGaWVsZFwiO1xuICAgICAgICAgICAgICAgIHZhciBmaWVsZFZlciA9IGRhdGEucmVhZFVJbnQ4KGluZGV4KTtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGRWZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IDE7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IHNob3VsZCBiZSBjaGVja2luZyB0aGlzIGFnYWluc3Qgb3VyIHBhdGggYnVmZmVyXG4gICAgICAgICAgICAgICAgICAgIHZhciBuYW1lQ3JjMzIgPSBkYXRhLnJlYWRVSW50MzJMRShpbmRleCArIG9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSA0O1xuICAgICAgICAgICAgICAgICAgICB2YXIgcGF0aEJ1ZmZlciA9IGRhdGEuc2xpY2UoaW5kZXggKyBvZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICBleHRyYS5wYXRoID0gcGF0aEJ1ZmZlci50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMHgwMDBkOlxuICAgICAgICAgICAgY2FzZSAweDU4NTU6XG4gICAgICAgICAgICAgICAgZmllbGRUeXBlID0gdmFycy5leHRyYUlkID09PSAweDAwMGQgPyBcIlBLV0FSRSBVbml4XCIgOiBcIkluZm8tWklQIFVOSVggKHR5cGUgMSlcIjtcbiAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gMDtcbiAgICAgICAgICAgICAgICBpZiAodmFycy5leHRyYVNpemUgPj0gOCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYXRpbWUgPSBuZXcgRGF0ZShkYXRhLnJlYWRVSW50MzJMRShpbmRleCArIG9mZnNldCkgKiAxMDAwKTtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDQ7XG4gICAgICAgICAgICAgICAgICAgIHZhciBtdGltZSA9IG5ldyBEYXRlKGRhdGEucmVhZFVJbnQzMkxFKGluZGV4ICsgb2Zmc2V0KSAqIDEwMDApO1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gNDtcbiAgICAgICAgICAgICAgICAgICAgZXh0cmEuYXRpbWUgPSBhdGltZTtcbiAgICAgICAgICAgICAgICAgICAgZXh0cmEubXRpbWUgPSBtdGltZTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodmFycy5leHRyYVNpemUgPj0gMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1aWQgPSBkYXRhLnJlYWRVSW50MTZMRShpbmRleCArIG9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnaWQgPSBkYXRhLnJlYWRVSW50MTZMRShpbmRleCArIG9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhLnVpZCA9IHVpZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhLmdpZCA9IGdpZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMHg3ODU1OlxuICAgICAgICAgICAgICAgIGZpZWxkVHlwZSA9IFwiSW5mby1aSVAgVU5JWCAodHlwZSAyKVwiO1xuICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSAwO1xuICAgICAgICAgICAgICAgIGlmICh2YXJzLmV4dHJhU2l6ZSA+PSA0KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB1aWQgPSBkYXRhLnJlYWRVSW50MTZMRShpbmRleCArIG9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSAyO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZ2lkID0gZGF0YS5yZWFkVUludDE2TEUoaW5kZXggKyBvZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gMjtcbiAgICAgICAgICAgICAgICAgICAgZXh0cmEudWlkID0gdWlkO1xuICAgICAgICAgICAgICAgICAgICBleHRyYS5naWQgPSBnaWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAweDc4NzU6XG4gICAgICAgICAgICAgICAgZmllbGRUeXBlID0gXCJJbmZvLVpJUCBOZXcgVW5peFwiO1xuICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSAwO1xuICAgICAgICAgICAgICAgIHZhciBleHRyYVZlciA9IGRhdGEucmVhZFVJbnQ4KGluZGV4KTtcbiAgICAgICAgICAgICAgICBvZmZzZXQgKz0gMTtcbiAgICAgICAgICAgICAgICBpZiAoZXh0cmFWZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHVpZFNpemUgPSBkYXRhLnJlYWRVSW50OChpbmRleCArIG9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSAxO1xuICAgICAgICAgICAgICAgICAgICBpZiAodWlkU2l6ZSA8PSA2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYS51aWQgPSBkYXRhLnJlYWRVSW50TEUoaW5kZXggKyBvZmZzZXQsIHVpZFNpemUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSB1aWRTaXplO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBnaWRTaXplID0gZGF0YS5yZWFkVUludDgoaW5kZXggKyBvZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGdpZFNpemUgPD0gNikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEuZ2lkID0gZGF0YS5yZWFkVUludExFKGluZGV4ICsgb2Zmc2V0LCBnaWRTaXplKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMHg3NTZlOlxuICAgICAgICAgICAgICAgIGZpZWxkVHlwZSA9IFwiQVNpIFVuaXhcIjtcbiAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gMDtcbiAgICAgICAgICAgICAgICBpZiAodmFycy5leHRyYVNpemUgPj0gMTQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNyYyA9IGRhdGEucmVhZFVJbnQzMkxFKGluZGV4ICsgb2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDQ7XG4gICAgICAgICAgICAgICAgICAgIHZhciBtb2RlID0gZGF0YS5yZWFkVUludDE2TEUoaW5kZXggKyBvZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gMjtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNpemRldiA9IGRhdGEucmVhZFVJbnQzMkxFKGluZGV4ICsgb2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDQ7XG4gICAgICAgICAgICAgICAgICAgIHZhciB1aWQgPSBkYXRhLnJlYWRVSW50MTZMRShpbmRleCArIG9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSAyO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZ2lkID0gZGF0YS5yZWFkVUludDE2TEUoaW5kZXggKyBvZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gMjtcbiAgICAgICAgICAgICAgICAgICAgZXh0cmEubW9kZSA9IG1vZGU7XG4gICAgICAgICAgICAgICAgICAgIGV4dHJhLnVpZCA9IHVpZDtcbiAgICAgICAgICAgICAgICAgICAgZXh0cmEuZ2lkID0gZ2lkO1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFycy5leHRyYVNpemUgPiAxNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gaW5kZXggKyBvZmZzZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kID0gaW5kZXggKyB2YXJzLmV4dHJhU2l6ZSAtIDE0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN5bWxpbmtOYW1lID0gdGhpcy5fZGVjb2RlU3RyaW5nKGRhdGEuc2xpY2Uoc3RhcnQsIGVuZCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEuc3ltbGluayA9IHN5bWxpbmtOYW1lO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5kZWJ1Zykge1xuICAgICAgICAgICAgcmVzdWx0LmRlYnVnLnB1c2goe1xuICAgICAgICAgICAgICAgIGV4dHJhSWQ6ICcweCcgKyB2YXJzLmV4dHJhSWQudG9TdHJpbmcoMTYpLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBmaWVsZFR5cGUsXG4gICAgICAgICAgICAgICAgZGF0YTogZGF0YS5zbGljZShpbmRleCwgaW5kZXggKyB2YXJzLmV4dHJhU2l6ZSkuaW5zcGVjdCgpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGluZGV4ICs9IHZhcnMuZXh0cmFTaXplO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cblVuemlwU3RyZWFtLnByb3RvdHlwZS5fcmVhZERhdGFEZXNjcmlwdG9yID0gZnVuY3Rpb24gKGRhdGEsIHppcDY0TW9kZSkge1xuICAgIGlmICh6aXA2NE1vZGUpIHtcbiAgICAgICAgdmFyIHZhcnMgPSBiaW5hcnkucGFyc2UoZGF0YSlcbiAgICAgICAgICAgIC53b3JkMzJsdSgnZGF0YURlc2NyaXB0b3JTaWduYXR1cmUnKVxuICAgICAgICAgICAgLndvcmQzMmx1KCdjcmMzMicpXG4gICAgICAgICAgICAud29yZDY0bHUoJ2NvbXByZXNzZWRTaXplJylcbiAgICAgICAgICAgIC53b3JkNjRsdSgndW5jb21wcmVzc2VkU2l6ZScpXG4gICAgICAgICAgICAudmFycztcblxuICAgICAgICByZXR1cm4gdmFycztcbiAgICB9XG5cbiAgICB2YXIgdmFycyA9IGJpbmFyeS5wYXJzZShkYXRhKVxuICAgICAgICAud29yZDMybHUoJ2RhdGFEZXNjcmlwdG9yU2lnbmF0dXJlJylcbiAgICAgICAgLndvcmQzMmx1KCdjcmMzMicpXG4gICAgICAgIC53b3JkMzJsdSgnY29tcHJlc3NlZFNpemUnKVxuICAgICAgICAud29yZDMybHUoJ3VuY29tcHJlc3NlZFNpemUnKVxuICAgICAgICAudmFycztcblxuICAgIHJldHVybiB2YXJzO1xufVxuXG5VbnppcFN0cmVhbS5wcm90b3R5cGUuX3JlYWRDZW50cmFsRGlyZWN0b3J5RW50cnkgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgIHZhciB2YXJzID0gYmluYXJ5LnBhcnNlKGRhdGEpXG4gICAgICAgIC53b3JkMTZsdSgndmVyc2lvbk1hZGVCeScpXG4gICAgICAgIC53b3JkMTZsdSgndmVyc2lvbnNOZWVkZWRUb0V4dHJhY3QnKVxuICAgICAgICAud29yZDE2bHUoJ2ZsYWdzJylcbiAgICAgICAgLndvcmQxNmx1KCdjb21wcmVzc2lvbk1ldGhvZCcpXG4gICAgICAgIC53b3JkMTZsdSgnbGFzdE1vZGlmaWVkVGltZScpXG4gICAgICAgIC53b3JkMTZsdSgnbGFzdE1vZGlmaWVkRGF0ZScpXG4gICAgICAgIC53b3JkMzJsdSgnY3JjMzInKVxuICAgICAgICAud29yZDMybHUoJ2NvbXByZXNzZWRTaXplJylcbiAgICAgICAgLndvcmQzMmx1KCd1bmNvbXByZXNzZWRTaXplJylcbiAgICAgICAgLndvcmQxNmx1KCdmaWxlTmFtZUxlbmd0aCcpXG4gICAgICAgIC53b3JkMTZsdSgnZXh0cmFGaWVsZExlbmd0aCcpXG4gICAgICAgIC53b3JkMTZsdSgnZmlsZUNvbW1lbnRMZW5ndGgnKVxuICAgICAgICAud29yZDE2bHUoJ2Rpc2tOdW1iZXInKVxuICAgICAgICAud29yZDE2bHUoJ2ludGVybmFsRmlsZUF0dHJpYnV0ZXMnKVxuICAgICAgICAud29yZDMybHUoJ2V4dGVybmFsRmlsZUF0dHJpYnV0ZXMnKVxuICAgICAgICAud29yZDMybHUoJ29mZnNldFRvTG9jYWxGaWxlSGVhZGVyJylcbiAgICAgICAgLnZhcnM7XG5cbiAgICByZXR1cm4gdmFycztcbn1cblxuVW56aXBTdHJlYW0ucHJvdG90eXBlLl9yZWFkRW5kT2ZDZW50cmFsRGlyZWN0b3J5NjQgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgIHZhciB2YXJzID0gYmluYXJ5LnBhcnNlKGRhdGEpXG4gICAgICAgIC53b3JkNjRsdSgnY2VudHJhbERpcmVjdG9yeVJlY29yZFNpemUnKVxuICAgICAgICAud29yZDE2bHUoJ3ZlcnNpb25NYWRlQnknKVxuICAgICAgICAud29yZDE2bHUoJ3ZlcnNpb25zTmVlZGVkVG9FeHRyYWN0JylcbiAgICAgICAgLndvcmQzMmx1KCdkaXNrTnVtYmVyJylcbiAgICAgICAgLndvcmQzMmx1KCdkaXNrTnVtYmVyV2l0aENlbnRyYWxEaXJlY3RvcnlTdGFydCcpXG4gICAgICAgIC53b3JkNjRsdSgnY2VudHJhbERpcmVjdG9yeUVudHJpZXMnKVxuICAgICAgICAud29yZDY0bHUoJ3RvdGFsQ2VudHJhbERpcmVjdG9yeUVudHJpZXMnKVxuICAgICAgICAud29yZDY0bHUoJ3NpemVPZkNlbnRyYWxEaXJlY3RvcnknKVxuICAgICAgICAud29yZDY0bHUoJ29mZnNldFRvU3RhcnRPZkNlbnRyYWxEaXJlY3RvcnknKVxuICAgICAgICAudmFycztcblxuICAgIHJldHVybiB2YXJzO1xufVxuXG5VbnppcFN0cmVhbS5wcm90b3R5cGUuX3JlYWRFbmRPZkNlbnRyYWxEaXJlY3RvcnkgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgIHZhciB2YXJzID0gYmluYXJ5LnBhcnNlKGRhdGEpXG4gICAgICAgIC53b3JkMTZsdSgnZGlza051bWJlcicpXG4gICAgICAgIC53b3JkMTZsdSgnZGlza1N0YXJ0JylcbiAgICAgICAgLndvcmQxNmx1KCdjZW50cmFsRGlyZWN0b3J5RW50cmllcycpXG4gICAgICAgIC53b3JkMTZsdSgndG90YWxDZW50cmFsRGlyZWN0b3J5RW50cmllcycpXG4gICAgICAgIC53b3JkMzJsdSgnc2l6ZU9mQ2VudHJhbERpcmVjdG9yeScpXG4gICAgICAgIC53b3JkMzJsdSgnb2Zmc2V0VG9TdGFydE9mQ2VudHJhbERpcmVjdG9yeScpXG4gICAgICAgIC53b3JkMTZsdSgnY29tbWVudExlbmd0aCcpXG4gICAgICAgIC52YXJzO1xuXG4gICAgcmV0dXJuIHZhcnM7XG59XG5cbmNvbnN0IGNwNDM3ID0gJ1xcdTAwMDDimLrimLvimaXimabimaPimaDigKLil5jil4vil5nimYLimYDimarimavimLzilrril4TihpXigLzCtsKn4pas4oao4oaR4oaT4oaS4oaQ4oif4oaU4pay4pa8ICFcIiMkJSZcXCcoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX7ijILDh8O8w6nDosOkw6DDpcOnw6rDq8Oow6/DrsOsw4TDhcOJw6bDhsO0w7bDssO7w7nDv8OWw5zCosKjwqXigqfGksOhw63Ds8O6w7HDkcKqwrrCv+KMkMKswr3CvMKhwqvCu+KWkeKWkuKWk+KUguKUpOKVoeKVouKVluKVleKVo+KVkeKVl+KVneKVnOKVm+KUkOKUlOKUtOKUrOKUnOKUgOKUvOKVnuKVn+KVmuKVlOKVqeKVpuKVoOKVkOKVrOKVp+KVqOKVpOKVpeKVmeKVmOKVkuKVk+KVq+KVquKUmOKUjOKWiOKWhOKWjOKWkOKWgM6xw5/Ok8+AzqPPg8K1z4TOps6YzqnOtOKIns+GzrXiiKniiaHCseKJpeKJpOKMoOKMocO34omIwrDiiJnCt+KImuKBv8Ky4pagICc7XG5cblVuemlwU3RyZWFtLnByb3RvdHlwZS5fZGVjb2RlU3RyaW5nID0gZnVuY3Rpb24gKGJ1ZmZlciwgaXNVdGY4KSB7XG4gICAgaWYgKGlzVXRmOCkge1xuICAgICAgICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCd1dGY4Jyk7XG4gICAgfVxuICAgIC8vIGFsbG93IHBhc3NpbmcgY3VzdG9tIGRlY29kZXJcbiAgICBpZiAodGhpcy5vcHRpb25zLmRlY29kZVN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmRlY29kZVN0cmluZyhidWZmZXIpO1xuICAgIH1cbiAgICBsZXQgcmVzdWx0ID0gXCJcIjtcbiAgICBmb3IgKHZhciBpPTA7IGk8YnVmZmVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlc3VsdCArPSBjcDQzN1tidWZmZXJbaV1dO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5VbnppcFN0cmVhbS5wcm90b3R5cGUuX3BhcnNlT3JPdXRwdXQgPSBmdW5jdGlvbiAoZW5jb2RpbmcsIGNiKSB7XG4gICAgdmFyIGNvbnN1bWU7XG4gICAgd2hpbGUgKChjb25zdW1lID0gdGhpcy5wcm9jZXNzRGF0YUNodW5rKHRoaXMuZGF0YSkpID4gMCkge1xuICAgICAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGEuc2xpY2UoY29uc3VtZSk7XG4gICAgICAgIGlmICh0aGlzLmRhdGEubGVuZ3RoID09PSAwKSBicmVhaztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zdGF0ZSA9PT0gc3RhdGVzLkZJTEVfREFUQSkge1xuICAgICAgICBpZiAodGhpcy5vdXRTdHJlYW1JbmZvLmxpbWl0ID49IDApIHtcbiAgICAgICAgICAgIHZhciByZW1haW5pbmcgPSB0aGlzLm91dFN0cmVhbUluZm8ubGltaXQgLSB0aGlzLm91dFN0cmVhbUluZm8ud3JpdHRlbjtcbiAgICAgICAgICAgIHZhciBwYWNrZXQ7XG4gICAgICAgICAgICBpZiAocmVtYWluaW5nIDwgdGhpcy5kYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHBhY2tldCA9IHRoaXMuZGF0YS5zbGljZSgwLCByZW1haW5pbmcpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IHRoaXMuZGF0YS5zbGljZShyZW1haW5pbmcpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwYWNrZXQgPSB0aGlzLmRhdGE7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gbmV3IEJ1ZmZlcignJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMub3V0U3RyZWFtSW5mby53cml0dGVuICs9IHBhY2tldC5sZW5ndGg7XG4gICAgICAgICAgICBpZiAodGhpcy5vdXRTdHJlYW1JbmZvLmxpbWl0ID09PSB0aGlzLm91dFN0cmVhbUluZm8ud3JpdHRlbikge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZXMuU1RBUlQ7XG5cbiAgICAgICAgICAgICAgICB0aGlzLm91dFN0cmVhbUluZm8uc3RyZWFtLmVuZChwYWNrZXQsIGVuY29kaW5nLCBjYik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMub3V0U3RyZWFtSW5mby5zdHJlYW0ud3JpdGUocGFja2V0LCBlbmNvZGluZywgY2IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHBhY2tldCA9IHRoaXMuZGF0YTtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IG5ldyBCdWZmZXIoJycpO1xuXG4gICAgICAgICAgICB0aGlzLm91dFN0cmVhbUluZm8ud3JpdHRlbiArPSBwYWNrZXQubGVuZ3RoO1xuICAgICAgICAgICAgdmFyIG91dHB1dFN0cmVhbSA9IHRoaXMub3V0U3RyZWFtSW5mby5zdHJlYW07XG4gICAgICAgICAgICBvdXRwdXRTdHJlYW0ud3JpdGUocGFja2V0LCBlbmNvZGluZywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXRlID09PSBzdGF0ZXMuRklMRV9EQVRBX0VORCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGVzLlNUQVJUO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3V0cHV0U3RyZWFtLmVuZChjYik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNiKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyB3ZSd2ZSB3cml0dGVuIHRvIHRoZSBvdXRwdXQgc3RyZWFtLCBsZXR0aW5nIHRoYXQgd3JpdGUgZGVhbCB3aXRoIHRoZSBjYWxsYmFja1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY2IoKTtcbn1cblxuVW56aXBTdHJlYW0ucHJvdG90eXBlLmRyYWluQWxsID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuX2RyYWluQWxsRW50cmllcyA9IHRydWU7XG59XG5cblVuemlwU3RyZWFtLnByb3RvdHlwZS5fdHJhbnNmb3JtID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgaWYgKHNlbGYuZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHNlbGYuZGF0YSA9IEJ1ZmZlci5jb25jYXQoW3NlbGYuZGF0YSwgY2h1bmtdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBzZWxmLmRhdGEgPSBjaHVuaztcbiAgICB9XG5cbiAgICB2YXIgc3RhcnREYXRhTGVuZ3RoID0gc2VsZi5kYXRhLmxlbmd0aDtcbiAgICB2YXIgZG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHNlbGYuZGF0YS5sZW5ndGggPiAwICYmIHNlbGYuZGF0YS5sZW5ndGggPCBzdGFydERhdGFMZW5ndGgpIHtcbiAgICAgICAgICAgIHN0YXJ0RGF0YUxlbmd0aCA9IHNlbGYuZGF0YS5sZW5ndGg7XG4gICAgICAgICAgICBzZWxmLl9wYXJzZU9yT3V0cHV0KGVuY29kaW5nLCBkb25lKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjYigpO1xuICAgIH07XG4gICAgc2VsZi5fcGFyc2VPck91dHB1dChlbmNvZGluZywgZG9uZSk7XG59XG5cblVuemlwU3RyZWFtLnByb3RvdHlwZS5fZmx1c2ggPSBmdW5jdGlvbiAoY2IpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgaWYgKHNlbGYuZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHNlbGYuX3BhcnNlT3JPdXRwdXQoJ2J1ZmZlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChzZWxmLmRhdGEubGVuZ3RoID4gMCkgcmV0dXJuIHNldEltbWVkaWF0ZShmdW5jdGlvbiAoKSB7IHNlbGYuX2ZsdXNoKGNiKTsgfSk7XG4gICAgICAgICAgICBjYigpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHNlbGYuc3RhdGUgPT09IHN0YXRlcy5GSUxFX0RBVEEpIHtcbiAgICAgICAgLy8gdWggb2gsIHNvbWV0aGluZyB3ZW50IHdyb25nXG4gICAgICAgIHJldHVybiBjYihuZXcgRXJyb3IoXCJTdHJlYW0gZmluaXNoZWQgaW4gYW4gaW52YWxpZCBzdGF0ZSwgdW5jb21wcmVzc2lvbiBmYWlsZWRcIikpO1xuICAgIH1cblxuICAgIHNldEltbWVkaWF0ZShjYik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVW56aXBTdHJlYW07XG4iLAogICAgInZhciBUcmFuc2Zvcm0gPSByZXF1aXJlKCdzdHJlYW0nKS5UcmFuc2Zvcm07XG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbnZhciBVbnppcFN0cmVhbSA9IHJlcXVpcmUoJy4vdW56aXAtc3RyZWFtJyk7XG5cbmZ1bmN0aW9uIFBhcnNlclN0cmVhbShvcHRzKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFBhcnNlclN0cmVhbSkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQYXJzZXJTdHJlYW0ob3B0cyk7XG4gICAgfVxuXG4gICAgdmFyIHRyYW5zZm9ybU9wdHMgPSBvcHRzIHx8IHt9O1xuICAgIFRyYW5zZm9ybS5jYWxsKHRoaXMsIHsgcmVhZGFibGVPYmplY3RNb2RlOiB0cnVlIH0pO1xuXG4gICAgdGhpcy5vcHRzID0gb3B0cyB8fCB7fTtcbiAgICB0aGlzLnVuemlwU3RyZWFtID0gbmV3IFVuemlwU3RyZWFtKHRoaXMub3B0cyk7XG5cbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy51bnppcFN0cmVhbS5vbignZW50cnknLCBmdW5jdGlvbihlbnRyeSkge1xuICAgICAgICBzZWxmLnB1c2goZW50cnkpO1xuICAgIH0pO1xuICAgIHRoaXMudW56aXBTdHJlYW0ub24oJ2Vycm9yJywgZnVuY3Rpb24oZXJyb3IpIHtcbiAgICAgICAgc2VsZi5lbWl0KCdlcnJvcicsIGVycm9yKTtcbiAgICB9KTtcbn1cblxudXRpbC5pbmhlcml0cyhQYXJzZXJTdHJlYW0sIFRyYW5zZm9ybSk7XG5cblBhcnNlclN0cmVhbS5wcm90b3R5cGUuX3RyYW5zZm9ybSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gICAgdGhpcy51bnppcFN0cmVhbS53cml0ZShjaHVuaywgZW5jb2RpbmcsIGNiKTtcbn1cblxuUGFyc2VyU3RyZWFtLnByb3RvdHlwZS5fZmx1c2ggPSBmdW5jdGlvbiAoY2IpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy51bnppcFN0cmVhbS5lbmQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24oKSB7IHNlbGYuZW1pdCgnY2xvc2UnKTsgfSk7XG4gICAgICAgIGNiKCk7XG4gICAgfSk7XG59XG5cblBhcnNlclN0cmVhbS5wcm90b3R5cGUub24gPSBmdW5jdGlvbihldmVudE5hbWUsIGZuKSB7XG4gICAgaWYgKGV2ZW50TmFtZSA9PT0gJ2VudHJ5Jykge1xuICAgICAgICByZXR1cm4gVHJhbnNmb3JtLnByb3RvdHlwZS5vbi5jYWxsKHRoaXMsICdkYXRhJywgZm4pO1xuICAgIH1cbiAgICByZXR1cm4gVHJhbnNmb3JtLnByb3RvdHlwZS5vbi5jYWxsKHRoaXMsIGV2ZW50TmFtZSwgZm4pO1xufVxuXG5QYXJzZXJTdHJlYW0ucHJvdG90eXBlLmRyYWluQWxsID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMudW56aXBTdHJlYW0uZHJhaW5BbGwoKTtcbiAgICByZXR1cm4gdGhpcy5waXBlKG5ldyBUcmFuc2Zvcm0oeyBvYmplY3RNb2RlOiB0cnVlLCB0cmFuc2Zvcm06IGZ1bmN0aW9uIChkLCBlLCBjYikgeyBjYigpOyB9IH0pKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBQYXJzZXJTdHJlYW07XG4iLAogICAgInZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xudmFyIGZzID0gcmVxdWlyZSgnZnMnKTtcbnZhciBfMDc3NyA9IHBhcnNlSW50KCcwNzc3JywgOCk7XG5cbm1vZHVsZS5leHBvcnRzID0gbWtkaXJQLm1rZGlycCA9IG1rZGlyUC5ta2RpclAgPSBta2RpclA7XG5cbmZ1bmN0aW9uIG1rZGlyUCAocCwgb3B0cywgZiwgbWFkZSkge1xuICAgIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBmID0gb3B0cztcbiAgICAgICAgb3B0cyA9IHt9O1xuICAgIH1cbiAgICBlbHNlIGlmICghb3B0cyB8fCB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgb3B0cyA9IHsgbW9kZTogb3B0cyB9O1xuICAgIH1cbiAgICBcbiAgICB2YXIgbW9kZSA9IG9wdHMubW9kZTtcbiAgICB2YXIgeGZzID0gb3B0cy5mcyB8fCBmcztcbiAgICBcbiAgICBpZiAobW9kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG1vZGUgPSBfMDc3N1xuICAgIH1cbiAgICBpZiAoIW1hZGUpIG1hZGUgPSBudWxsO1xuICAgIFxuICAgIHZhciBjYiA9IGYgfHwgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gZnVuY3Rpb24gKCkge307XG4gICAgcCA9IHBhdGgucmVzb2x2ZShwKTtcbiAgICBcbiAgICB4ZnMubWtkaXIocCwgbW9kZSwgZnVuY3Rpb24gKGVyKSB7XG4gICAgICAgIGlmICghZXIpIHtcbiAgICAgICAgICAgIG1hZGUgPSBtYWRlIHx8IHA7XG4gICAgICAgICAgICByZXR1cm4gY2IobnVsbCwgbWFkZSk7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChlci5jb2RlKSB7XG4gICAgICAgICAgICBjYXNlICdFTk9FTlQnOlxuICAgICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgICAgIGlmIChwYXRoLmRpcm5hbWUocCkgPT09IHApIHJldHVybiBjYihlcik7XG4gICAgICAgICAgICAgICAgbWtkaXJQKHBhdGguZGlybmFtZShwKSwgb3B0cywgZnVuY3Rpb24gKGVyLCBtYWRlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXIpIGNiKGVyLCBtYWRlKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBta2RpclAocCwgb3B0cywgY2IsIG1hZGUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBJbiB0aGUgY2FzZSBvZiBhbnkgb3RoZXIgZXJyb3IsIGp1c3Qgc2VlIGlmIHRoZXJlJ3MgYSBkaXJcbiAgICAgICAgICAgIC8vIHRoZXJlIGFscmVhZHkuICBJZiBzbywgdGhlbiBob29yYXkhICBJZiBub3QsIHRoZW4gc29tZXRoaW5nXG4gICAgICAgICAgICAvLyBpcyBib3JrZWQuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHhmcy5zdGF0KHAsIGZ1bmN0aW9uIChlcjIsIHN0YXQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlIHN0YXQgZmFpbHMsIHRoZW4gdGhhdCdzIHN1cGVyIHdlaXJkLlxuICAgICAgICAgICAgICAgICAgICAvLyBsZXQgdGhlIG9yaWdpbmFsIGVycm9yIGJlIHRoZSBmYWlsdXJlIHJlYXNvbi5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGVyMiB8fCAhc3RhdC5pc0RpcmVjdG9yeSgpKSBjYihlciwgbWFkZSlcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBjYihudWxsLCBtYWRlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG5ta2RpclAuc3luYyA9IGZ1bmN0aW9uIHN5bmMgKHAsIG9wdHMsIG1hZGUpIHtcbiAgICBpZiAoIW9wdHMgfHwgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIG9wdHMgPSB7IG1vZGU6IG9wdHMgfTtcbiAgICB9XG4gICAgXG4gICAgdmFyIG1vZGUgPSBvcHRzLm1vZGU7XG4gICAgdmFyIHhmcyA9IG9wdHMuZnMgfHwgZnM7XG4gICAgXG4gICAgaWYgKG1vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBtb2RlID0gXzA3NzdcbiAgICB9XG4gICAgaWYgKCFtYWRlKSBtYWRlID0gbnVsbDtcblxuICAgIHAgPSBwYXRoLnJlc29sdmUocCk7XG5cbiAgICB0cnkge1xuICAgICAgICB4ZnMubWtkaXJTeW5jKHAsIG1vZGUpO1xuICAgICAgICBtYWRlID0gbWFkZSB8fCBwO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyMCkge1xuICAgICAgICBzd2l0Y2ggKGVycjAuY29kZSkge1xuICAgICAgICAgICAgY2FzZSAnRU5PRU5UJyA6XG4gICAgICAgICAgICAgICAgbWFkZSA9IHN5bmMocGF0aC5kaXJuYW1lKHApLCBvcHRzLCBtYWRlKTtcbiAgICAgICAgICAgICAgICBzeW5jKHAsIG9wdHMsIG1hZGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBJbiB0aGUgY2FzZSBvZiBhbnkgb3RoZXIgZXJyb3IsIGp1c3Qgc2VlIGlmIHRoZXJlJ3MgYSBkaXJcbiAgICAgICAgICAgIC8vIHRoZXJlIGFscmVhZHkuICBJZiBzbywgdGhlbiBob29yYXkhICBJZiBub3QsIHRoZW4gc29tZXRoaW5nXG4gICAgICAgICAgICAvLyBpcyBib3JrZWQuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHZhciBzdGF0O1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXQgPSB4ZnMuc3RhdFN5bmMocCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIxKSAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVycjA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgICAgIGlmICghc3RhdC5pc0RpcmVjdG9yeSgpKSB0aHJvdyBlcnIwO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hZGU7XG59O1xuIiwKICAgICJ2YXIgZnMgPSByZXF1aXJlKCdmcycpO1xudmFyIHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbnZhciBta2RpcnAgPSByZXF1aXJlKCdta2RpcnAnKTtcbnZhciBUcmFuc2Zvcm0gPSByZXF1aXJlKCdzdHJlYW0nKS5UcmFuc2Zvcm07XG52YXIgVW56aXBTdHJlYW0gPSByZXF1aXJlKCcuL3VuemlwLXN0cmVhbScpO1xuXG5mdW5jdGlvbiBFeHRyYWN0IChvcHRzKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEV4dHJhY3QpKVxuICAgIHJldHVybiBuZXcgRXh0cmFjdChvcHRzKTtcblxuICAgIFRyYW5zZm9ybS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5vcHRzID0gb3B0cyB8fCB7fTtcbiAgICB0aGlzLnVuemlwU3RyZWFtID0gbmV3IFVuemlwU3RyZWFtKHRoaXMub3B0cyk7XG4gICAgdGhpcy51bmZpbmlzaGVkRW50cmllcyA9IDA7XG4gICAgdGhpcy5hZnRlckZsdXNoV2FpdCA9IGZhbHNlO1xuICAgIHRoaXMuY3JlYXRlZERpcmVjdG9yaWVzID0ge307XG5cbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy51bnppcFN0cmVhbS5vbignZW50cnknLCB0aGlzLl9wcm9jZXNzRW50cnkuYmluZCh0aGlzKSk7XG4gICAgdGhpcy51bnppcFN0cmVhbS5vbignZXJyb3InLCBmdW5jdGlvbihlcnJvcikge1xuICAgICAgICBzZWxmLmVtaXQoJ2Vycm9yJywgZXJyb3IpO1xuICAgIH0pO1xufVxuXG51dGlsLmluaGVyaXRzKEV4dHJhY3QsIFRyYW5zZm9ybSk7XG5cbkV4dHJhY3QucHJvdG90eXBlLl90cmFuc2Zvcm0gPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICAgIHRoaXMudW56aXBTdHJlYW0ud3JpdGUoY2h1bmssIGVuY29kaW5nLCBjYik7XG59XG5cbkV4dHJhY3QucHJvdG90eXBlLl9mbHVzaCA9IGZ1bmN0aW9uIChjYikge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHZhciBhbGxEb25lID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24oKSB7IHNlbGYuZW1pdCgnY2xvc2UnKTsgfSk7XG4gICAgICAgIGNiKCk7XG4gICAgfVxuXG4gICAgdGhpcy51bnppcFN0cmVhbS5lbmQoZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmIChzZWxmLnVuZmluaXNoZWRFbnRyaWVzID4gMCkge1xuICAgICAgICAgICAgc2VsZi5hZnRlckZsdXNoV2FpdCA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gc2VsZi5vbignYXdhaXQtZmluaXNoZWQnLCBhbGxEb25lKTtcbiAgICAgICAgfVxuICAgICAgICBhbGxEb25lKCk7XG4gICAgfSk7XG59XG5cbkV4dHJhY3QucHJvdG90eXBlLl9wcm9jZXNzRW50cnkgPSBmdW5jdGlvbiAoZW50cnkpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIGRlc3RQYXRoID0gcGF0aC5qb2luKHRoaXMub3B0cy5wYXRoLCBlbnRyeS5wYXRoKTtcbiAgICB2YXIgZGlyZWN0b3J5ID0gZW50cnkuaXNEaXJlY3RvcnkgPyBkZXN0UGF0aCA6IHBhdGguZGlybmFtZShkZXN0UGF0aCk7XG5cbiAgICB0aGlzLnVuZmluaXNoZWRFbnRyaWVzKys7XG5cbiAgICB2YXIgd3JpdGVGaWxlRm4gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHBpcGVkU3RyZWFtID0gZnMuY3JlYXRlV3JpdGVTdHJlYW0oZGVzdFBhdGgpO1xuXG4gICAgICAgIHBpcGVkU3RyZWFtLm9uKCdjbG9zZScsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgc2VsZi51bmZpbmlzaGVkRW50cmllcy0tO1xuICAgICAgICAgICAgc2VsZi5fbm90aWZ5QXdhaXRlcigpO1xuICAgICAgICB9KTtcbiAgICAgICAgcGlwZWRTdHJlYW0ub24oJ2Vycm9yJywgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICBzZWxmLmVtaXQoJ2Vycm9yJywgZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICAgICAgZW50cnkucGlwZShwaXBlZFN0cmVhbSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY3JlYXRlZERpcmVjdG9yaWVzW2RpcmVjdG9yeV0gfHwgZGlyZWN0b3J5ID09PSAnLicpIHtcbiAgICAgICAgcmV0dXJuIHdyaXRlRmlsZUZuKCk7XG4gICAgfVxuXG4gICAgLy8gRklYTUU6IGNhbGxzIHRvIG1rZGlycCBjYW4gc3RpbGwgYmUgZHVwbGljYXRlZFxuICAgIG1rZGlycChkaXJlY3RvcnksIGZ1bmN0aW9uKGVycikge1xuICAgICAgICBpZiAoZXJyKSByZXR1cm4gc2VsZi5lbWl0KCdlcnJvcicsIGVycik7XG5cbiAgICAgICAgc2VsZi5jcmVhdGVkRGlyZWN0b3JpZXNbZGlyZWN0b3J5XSA9IHRydWU7XG5cbiAgICAgICAgaWYgKGVudHJ5LmlzRGlyZWN0b3J5KSB7XG4gICAgICAgICAgICBzZWxmLnVuZmluaXNoZWRFbnRyaWVzLS07XG4gICAgICAgICAgICBzZWxmLl9ub3RpZnlBd2FpdGVyKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB3cml0ZUZpbGVGbigpO1xuICAgIH0pO1xufVxuXG5FeHRyYWN0LnByb3RvdHlwZS5fbm90aWZ5QXdhaXRlciA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLmFmdGVyRmx1c2hXYWl0ICYmIHRoaXMudW5maW5pc2hlZEVudHJpZXMgPT09IDApIHtcbiAgICAgICAgdGhpcy5lbWl0KCdhd2FpdC1maW5pc2hlZCcpO1xuICAgICAgICB0aGlzLmFmdGVyRmx1c2hXYWl0ID0gZmFsc2U7XG4gICAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEV4dHJhY3Q7IiwKICAgICIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuUGFyc2UgPSByZXF1aXJlKCcuL2xpYi9wYXJzZXItc3RyZWFtJyk7XG5leHBvcnRzLkV4dHJhY3QgPSByZXF1aXJlKCcuL2xpYi9leHRyYWN0Jyk7IiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRvd25sb2FkQXJ0aWZhY3RJbnRlcm5hbCA9IGV4cG9ydHMuZG93bmxvYWRBcnRpZmFjdFB1YmxpYyA9IGV4cG9ydHMuc3RyZWFtRXh0cmFjdEV4dGVybmFsID0gdm9pZCAwO1xuY29uc3QgcHJvbWlzZXNfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiZnMvcHJvbWlzZXNcIikpO1xuY29uc3QgZ2l0aHViID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJAYWN0aW9ucy9naXRodWJcIikpO1xuY29uc3QgY29yZSA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiQGFjdGlvbnMvY29yZVwiKSk7XG5jb25zdCBodHRwQ2xpZW50ID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJAYWN0aW9ucy9odHRwLWNsaWVudFwiKSk7XG5jb25zdCB1bnppcF9zdHJlYW1fMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwidW56aXAtc3RyZWFtXCIpKTtcbmNvbnN0IHVzZXJfYWdlbnRfMSA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvdXNlci1hZ2VudFwiKTtcbmNvbnN0IGNvbmZpZ18xID0gcmVxdWlyZShcIi4uL3NoYXJlZC9jb25maWdcIik7XG5jb25zdCBhcnRpZmFjdF90d2lycF9jbGllbnRfMSA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvYXJ0aWZhY3QtdHdpcnAtY2xpZW50XCIpO1xuY29uc3QgZ2VuZXJhdGVkXzEgPSByZXF1aXJlKFwiLi4vLi4vZ2VuZXJhdGVkXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uL3NoYXJlZC91dGlsXCIpO1xuY29uc3QgZXJyb3JzXzEgPSByZXF1aXJlKFwiLi4vc2hhcmVkL2Vycm9yc1wiKTtcbmNvbnN0IHNjcnViUXVlcnlQYXJhbWV0ZXJzID0gKHVybCkgPT4ge1xuICAgIGNvbnN0IHBhcnNlZCA9IG5ldyBVUkwodXJsKTtcbiAgICBwYXJzZWQuc2VhcmNoID0gJyc7XG4gICAgcmV0dXJuIHBhcnNlZC50b1N0cmluZygpO1xufTtcbmZ1bmN0aW9uIGV4aXN0cyhwYXRoKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHlpZWxkIHByb21pc2VzXzEuZGVmYXVsdC5hY2Nlc3MocGF0aCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChlcnJvci5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59XG5mdW5jdGlvbiBzdHJlYW1FeHRyYWN0KHVybCwgZGlyZWN0b3J5KSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgbGV0IHJldHJ5Q291bnQgPSAwO1xuICAgICAgICB3aGlsZSAocmV0cnlDb3VudCA8IDUpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgeWllbGQgc3RyZWFtRXh0cmFjdEV4dGVybmFsKHVybCwgZGlyZWN0b3J5KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICByZXRyeUNvdW50Kys7XG4gICAgICAgICAgICAgICAgY29yZS5kZWJ1ZyhgRmFpbGVkIHRvIGRvd25sb2FkIGFydGlmYWN0IGFmdGVyICR7cmV0cnlDb3VudH0gcmV0cmllcyBkdWUgdG8gJHtlcnJvci5tZXNzYWdlfS4gUmV0cnlpbmcgaW4gNSBzZWNvbmRzLi4uYCk7XG4gICAgICAgICAgICAgICAgLy8gd2FpdCA1IHNlY29uZHMgYmVmb3JlIHJldHJ5aW5nXG4gICAgICAgICAgICAgICAgeWllbGQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDUwMDApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFydGlmYWN0IGRvd25sb2FkIGZhaWxlZCBhZnRlciAke3JldHJ5Q291bnR9IHJldHJpZXMuYCk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBzdHJlYW1FeHRyYWN0RXh0ZXJuYWwodXJsLCBkaXJlY3RvcnkpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBjbGllbnQgPSBuZXcgaHR0cENsaWVudC5IdHRwQ2xpZW50KCgwLCB1c2VyX2FnZW50XzEuZ2V0VXNlckFnZW50U3RyaW5nKSgpKTtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSB5aWVsZCBjbGllbnQuZ2V0KHVybCk7XG4gICAgICAgIGlmIChyZXNwb25zZS5tZXNzYWdlLnN0YXR1c0NvZGUgIT09IDIwMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIEhUVFAgcmVzcG9uc2UgZnJvbSBibG9iIHN0b3JhZ2U6ICR7cmVzcG9uc2UubWVzc2FnZS5zdGF0dXNDb2RlfSAke3Jlc3BvbnNlLm1lc3NhZ2Uuc3RhdHVzTWVzc2FnZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0aW1lb3V0ID0gMzAgKiAxMDAwOyAvLyAzMCBzZWNvbmRzXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0aW1lckZuID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlLm1lc3NhZ2UuZGVzdHJveShuZXcgRXJyb3IoYEJsb2Igc3RvcmFnZSBjaHVuayBkaWQgbm90IHJlc3BvbmQgaW4gJHt0aW1lb3V0fW1zYCkpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCh0aW1lckZuLCB0aW1lb3V0KTtcbiAgICAgICAgICAgIHJlc3BvbnNlLm1lc3NhZ2VcbiAgICAgICAgICAgICAgICAub24oJ2RhdGEnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGltZXIucmVmcmVzaCgpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAub24oJ2Vycm9yJywgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgY29yZS5kZWJ1ZyhgcmVzcG9uc2UubWVzc2FnZTogQXJ0aWZhY3QgZG93bmxvYWQgZmFpbGVkOiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAucGlwZSh1bnppcF9zdHJlYW1fMS5kZWZhdWx0LkV4dHJhY3QoeyBwYXRoOiBkaXJlY3RvcnkgfSkpXG4gICAgICAgICAgICAgICAgLm9uKCdjbG9zZScsICgpID0+IHtcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLm9uKCdlcnJvcicsIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5leHBvcnRzLnN0cmVhbUV4dHJhY3RFeHRlcm5hbCA9IHN0cmVhbUV4dHJhY3RFeHRlcm5hbDtcbmZ1bmN0aW9uIGRvd25sb2FkQXJ0aWZhY3RQdWJsaWMoYXJ0aWZhY3RJZCwgcmVwb3NpdG9yeU93bmVyLCByZXBvc2l0b3J5TmFtZSwgdG9rZW4sIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBkb3dubG9hZFBhdGggPSB5aWVsZCByZXNvbHZlT3JDcmVhdGVEaXJlY3Rvcnkob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnBhdGgpO1xuICAgICAgICBjb25zdCBhcGkgPSBnaXRodWIuZ2V0T2N0b2tpdCh0b2tlbik7XG4gICAgICAgIGNvcmUuaW5mbyhgRG93bmxvYWRpbmcgYXJ0aWZhY3QgJyR7YXJ0aWZhY3RJZH0nIGZyb20gJyR7cmVwb3NpdG9yeU93bmVyfS8ke3JlcG9zaXRvcnlOYW1lfSdgKTtcbiAgICAgICAgY29uc3QgeyBoZWFkZXJzLCBzdGF0dXMgfSA9IHlpZWxkIGFwaS5yZXN0LmFjdGlvbnMuZG93bmxvYWRBcnRpZmFjdCh7XG4gICAgICAgICAgICBvd25lcjogcmVwb3NpdG9yeU93bmVyLFxuICAgICAgICAgICAgcmVwbzogcmVwb3NpdG9yeU5hbWUsXG4gICAgICAgICAgICBhcnRpZmFjdF9pZDogYXJ0aWZhY3RJZCxcbiAgICAgICAgICAgIGFyY2hpdmVfZm9ybWF0OiAnemlwJyxcbiAgICAgICAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgICAgICAgICByZWRpcmVjdDogJ21hbnVhbCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChzdGF0dXMgIT09IDMwMikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gZG93bmxvYWQgYXJ0aWZhY3QuIFVuZXhwZWN0ZWQgc3RhdHVzOiAke3N0YXR1c31gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IGxvY2F0aW9uIH0gPSBoZWFkZXJzO1xuICAgICAgICBpZiAoIWxvY2F0aW9uKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byByZWRpcmVjdCB0byBhcnRpZmFjdCBkb3dubG9hZCB1cmxgKTtcbiAgICAgICAgfVxuICAgICAgICBjb3JlLmluZm8oYFJlZGlyZWN0aW5nIHRvIGJsb2IgZG93bmxvYWQgdXJsOiAke3NjcnViUXVlcnlQYXJhbWV0ZXJzKGxvY2F0aW9uKX1gKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvcmUuaW5mbyhgU3RhcnRpbmcgZG93bmxvYWQgb2YgYXJ0aWZhY3QgdG86ICR7ZG93bmxvYWRQYXRofWApO1xuICAgICAgICAgICAgeWllbGQgc3RyZWFtRXh0cmFjdChsb2NhdGlvbiwgZG93bmxvYWRQYXRoKTtcbiAgICAgICAgICAgIGNvcmUuaW5mbyhgQXJ0aWZhY3QgZG93bmxvYWQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5gKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGRvd25sb2FkIGFuZCBleHRyYWN0IGFydGlmYWN0OiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgZG93bmxvYWRQYXRoIH07XG4gICAgfSk7XG59XG5leHBvcnRzLmRvd25sb2FkQXJ0aWZhY3RQdWJsaWMgPSBkb3dubG9hZEFydGlmYWN0UHVibGljO1xuZnVuY3Rpb24gZG93bmxvYWRBcnRpZmFjdEludGVybmFsKGFydGlmYWN0SWQsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBkb3dubG9hZFBhdGggPSB5aWVsZCByZXNvbHZlT3JDcmVhdGVEaXJlY3Rvcnkob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnBhdGgpO1xuICAgICAgICBjb25zdCBhcnRpZmFjdENsaWVudCA9ICgwLCBhcnRpZmFjdF90d2lycF9jbGllbnRfMS5pbnRlcm5hbEFydGlmYWN0VHdpcnBDbGllbnQpKCk7XG4gICAgICAgIGNvbnN0IHsgd29ya2Zsb3dSdW5CYWNrZW5kSWQsIHdvcmtmbG93Sm9iUnVuQmFja2VuZElkIH0gPSAoMCwgdXRpbF8xLmdldEJhY2tlbmRJZHNGcm9tVG9rZW4pKCk7XG4gICAgICAgIGNvbnN0IGxpc3RSZXEgPSB7XG4gICAgICAgICAgICB3b3JrZmxvd1J1bkJhY2tlbmRJZCxcbiAgICAgICAgICAgIHdvcmtmbG93Sm9iUnVuQmFja2VuZElkLFxuICAgICAgICAgICAgaWRGaWx0ZXI6IGdlbmVyYXRlZF8xLkludDY0VmFsdWUuY3JlYXRlKHsgdmFsdWU6IGFydGlmYWN0SWQudG9TdHJpbmcoKSB9KVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB7IGFydGlmYWN0cyB9ID0geWllbGQgYXJ0aWZhY3RDbGllbnQuTGlzdEFydGlmYWN0cyhsaXN0UmVxKTtcbiAgICAgICAgaWYgKGFydGlmYWN0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBlcnJvcnNfMS5BcnRpZmFjdE5vdEZvdW5kRXJyb3IoYE5vIGFydGlmYWN0cyBmb3VuZCBmb3IgSUQ6ICR7YXJ0aWZhY3RJZH1cXG5BcmUgeW91IHRyeWluZyB0byBkb3dubG9hZCBmcm9tIGEgZGlmZmVyZW50IHJ1bj8gVHJ5IHNwZWNpZnlpbmcgYSBnaXRodWItdG9rZW4gd2l0aCBcXGBhY3Rpb25zOnJlYWRcXGAgc2NvcGUuYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFydGlmYWN0cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBjb3JlLndhcm5pbmcoJ011bHRpcGxlIGFydGlmYWN0cyBmb3VuZCwgZGVmYXVsdGluZyB0byBmaXJzdC4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzaWduZWRSZXEgPSB7XG4gICAgICAgICAgICB3b3JrZmxvd1J1bkJhY2tlbmRJZDogYXJ0aWZhY3RzWzBdLndvcmtmbG93UnVuQmFja2VuZElkLFxuICAgICAgICAgICAgd29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQ6IGFydGlmYWN0c1swXS53b3JrZmxvd0pvYlJ1bkJhY2tlbmRJZCxcbiAgICAgICAgICAgIG5hbWU6IGFydGlmYWN0c1swXS5uYW1lXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHsgc2lnbmVkVXJsIH0gPSB5aWVsZCBhcnRpZmFjdENsaWVudC5HZXRTaWduZWRBcnRpZmFjdFVSTChzaWduZWRSZXEpO1xuICAgICAgICBjb3JlLmluZm8oYFJlZGlyZWN0aW5nIHRvIGJsb2IgZG93bmxvYWQgdXJsOiAke3NjcnViUXVlcnlQYXJhbWV0ZXJzKHNpZ25lZFVybCl9YCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb3JlLmluZm8oYFN0YXJ0aW5nIGRvd25sb2FkIG9mIGFydGlmYWN0IHRvOiAke2Rvd25sb2FkUGF0aH1gKTtcbiAgICAgICAgICAgIHlpZWxkIHN0cmVhbUV4dHJhY3Qoc2lnbmVkVXJsLCBkb3dubG9hZFBhdGgpO1xuICAgICAgICAgICAgY29yZS5pbmZvKGBBcnRpZmFjdCBkb3dubG9hZCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LmApO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gZG93bmxvYWQgYW5kIGV4dHJhY3QgYXJ0aWZhY3Q6ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBkb3dubG9hZFBhdGggfTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZG93bmxvYWRBcnRpZmFjdEludGVybmFsID0gZG93bmxvYWRBcnRpZmFjdEludGVybmFsO1xuZnVuY3Rpb24gcmVzb2x2ZU9yQ3JlYXRlRGlyZWN0b3J5KGRvd25sb2FkUGF0aCA9ICgwLCBjb25maWdfMS5nZXRHaXRIdWJXb3Jrc3BhY2VEaXIpKCkpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBpZiAoISh5aWVsZCBleGlzdHMoZG93bmxvYWRQYXRoKSkpIHtcbiAgICAgICAgICAgIGNvcmUuZGVidWcoYEFydGlmYWN0IGRlc3RpbmF0aW9uIGZvbGRlciBkb2VzIG5vdCBleGlzdCwgY3JlYXRpbmc6ICR7ZG93bmxvYWRQYXRofWApO1xuICAgICAgICAgICAgeWllbGQgcHJvbWlzZXNfMS5kZWZhdWx0Lm1rZGlyKGRvd25sb2FkUGF0aCwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb3JlLmRlYnVnKGBBcnRpZmFjdCBkZXN0aW5hdGlvbiBmb2xkZXIgYWxyZWFkeSBleGlzdHM6ICR7ZG93bmxvYWRQYXRofWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkb3dubG9hZFBhdGg7XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kb3dubG9hZC1hcnRpZmFjdC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldFJldHJ5T3B0aW9ucyA9IHZvaWQgMDtcbmNvbnN0IGNvcmUgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIkBhY3Rpb25zL2NvcmVcIikpO1xuLy8gRGVmYXVsdHMgZm9yIGZldGNoaW5nIGFydGlmYWN0c1xuY29uc3QgZGVmYXVsdE1heFJldHJ5TnVtYmVyID0gNTtcbmNvbnN0IGRlZmF1bHRFeGVtcHRTdGF0dXNDb2RlcyA9IFs0MDAsIDQwMSwgNDAzLCA0MDQsIDQyMl07IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9vY3Rva2l0L3BsdWdpbi1yZXRyeS5qcy9ibG9iLzlhMjQ0Mzc0NmMzNTBiM2JlZWRlYzM1Y2YyNmUxOTdlYTMxOGEyNjEvc3JjL2luZGV4LnRzI0wxNFxuZnVuY3Rpb24gZ2V0UmV0cnlPcHRpb25zKGRlZmF1bHRPcHRpb25zLCByZXRyaWVzID0gZGVmYXVsdE1heFJldHJ5TnVtYmVyLCBleGVtcHRTdGF0dXNDb2RlcyA9IGRlZmF1bHRFeGVtcHRTdGF0dXNDb2Rlcykge1xuICAgIHZhciBfYTtcbiAgICBpZiAocmV0cmllcyA8PSAwKSB7XG4gICAgICAgIHJldHVybiBbeyBlbmFibGVkOiBmYWxzZSB9LCBkZWZhdWx0T3B0aW9ucy5yZXF1ZXN0XTtcbiAgICB9XG4gICAgY29uc3QgcmV0cnlPcHRpb25zID0ge1xuICAgICAgICBlbmFibGVkOiB0cnVlXG4gICAgfTtcbiAgICBpZiAoZXhlbXB0U3RhdHVzQ29kZXMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXRyeU9wdGlvbnMuZG9Ob3RSZXRyeSA9IGV4ZW1wdFN0YXR1c0NvZGVzO1xuICAgIH1cbiAgICAvLyBUaGUgR2l0SHViIHR5cGUgaGFzIHNvbWUgZGVmYXVsdHMgZm9yIGBvcHRpb25zLnJlcXVlc3RgXG4gICAgLy8gc2VlOiBodHRwczovL2dpdGh1Yi5jb20vYWN0aW9ucy90b29sa2l0L2Jsb2IvNGZiYzVjOTQxYTU3MjQ5YjE5NTYyMDE1ZWRiZDcyYWRkMTRiZTkzZC9wYWNrYWdlcy9naXRodWIvc3JjL3V0aWxzLnRzI0wxNVxuICAgIC8vIFdlIHBhc3MgdGhlc2UgaW4gaGVyZSBzbyB0aGV5IGFyZSBub3Qgb3ZlcnJpZGRlbi5cbiAgICBjb25zdCByZXF1ZXN0T3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdE9wdGlvbnMucmVxdWVzdCksIHsgcmV0cmllcyB9KTtcbiAgICBjb3JlLmRlYnVnKGBHaXRIdWIgY2xpZW50IGNvbmZpZ3VyZWQgd2l0aDogKHJldHJpZXM6ICR7cmVxdWVzdE9wdGlvbnMucmV0cmllc30sIHJldHJ5LWV4ZW1wdC1zdGF0dXMtY29kZTogJHsoX2EgPSByZXRyeU9wdGlvbnMuZG9Ob3RSZXRyeSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJ29jdG9raXQgZGVmYXVsdDogWzQwMCwgNDAxLCA0MDMsIDQwNCwgNDIyXSd9KWApO1xuICAgIHJldHVybiBbcmV0cnlPcHRpb25zLCByZXF1ZXN0T3B0aW9uc107XG59XG5leHBvcnRzLmdldFJldHJ5T3B0aW9ucyA9IGdldFJldHJ5T3B0aW9ucztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJldHJ5LW9wdGlvbnMuanMubWFwIiwKICAgICIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmNvbnN0IFZFUlNJT04gPSBcIjEuMC40XCI7XG5cbi8qKlxuICogQHBhcmFtIG9jdG9raXQgT2N0b2tpdCBpbnN0YW5jZVxuICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBwYXNzZWQgdG8gT2N0b2tpdCBjb25zdHJ1Y3RvclxuICovXG5cbmZ1bmN0aW9uIHJlcXVlc3RMb2cob2N0b2tpdCkge1xuICBvY3Rva2l0Lmhvb2sud3JhcChcInJlcXVlc3RcIiwgKHJlcXVlc3QsIG9wdGlvbnMpID0+IHtcbiAgICBvY3Rva2l0LmxvZy5kZWJ1ZyhcInJlcXVlc3RcIiwgb3B0aW9ucyk7XG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zID0gb2N0b2tpdC5yZXF1ZXN0LmVuZHBvaW50LnBhcnNlKG9wdGlvbnMpO1xuICAgIGNvbnN0IHBhdGggPSByZXF1ZXN0T3B0aW9ucy51cmwucmVwbGFjZShvcHRpb25zLmJhc2VVcmwsIFwiXCIpO1xuICAgIHJldHVybiByZXF1ZXN0KG9wdGlvbnMpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgb2N0b2tpdC5sb2cuaW5mbyhgJHtyZXF1ZXN0T3B0aW9ucy5tZXRob2R9ICR7cGF0aH0gLSAke3Jlc3BvbnNlLnN0YXR1c30gaW4gJHtEYXRlLm5vdygpIC0gc3RhcnR9bXNgKTtcbiAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9KS5jYXRjaChlcnJvciA9PiB7XG4gICAgICBvY3Rva2l0LmxvZy5pbmZvKGAke3JlcXVlc3RPcHRpb25zLm1ldGhvZH0gJHtwYXRofSAtICR7ZXJyb3Iuc3RhdHVzfSBpbiAke0RhdGUubm93KCkgLSBzdGFydH1tc2ApO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSk7XG4gIH0pO1xufVxucmVxdWVzdExvZy5WRVJTSU9OID0gVkVSU0lPTjtcblxuZXhwb3J0cy5yZXF1ZXN0TG9nID0gcmVxdWVzdExvZztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxuIiwKICAgICIvKipcbiAgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIEJvdHRsZW5lY2sgbGlicmFyeSAoTUlUKSwgY29tcGlsZWQgdG8gRVMyMDE3LCBhbmQgd2l0aG91dCBDbHVzdGVyaW5nIHN1cHBvcnQuXG4gICogaHR0cHM6Ly9naXRodWIuY29tL1NHcm9uZGluL2JvdHRsZW5lY2tcbiAgKi9cbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG5cdHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpIDpcblx0dHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKGZhY3RvcnkpIDpcblx0KGdsb2JhbC5Cb3R0bGVuZWNrID0gZmFjdG9yeSgpKTtcbn0odGhpcywgKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cdHZhciBjb21tb25qc0dsb2JhbCA9IHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbFRoaXMgOiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsIDogdHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnID8gc2VsZiA6IHt9O1xuXG5cdGZ1bmN0aW9uIGdldENqc0V4cG9ydEZyb21OYW1lc3BhY2UgKG4pIHtcblx0XHRyZXR1cm4gbiAmJiBuWydkZWZhdWx0J10gfHwgbjtcblx0fVxuXG5cdHZhciBsb2FkID0gZnVuY3Rpb24ocmVjZWl2ZWQsIGRlZmF1bHRzLCBvbnRvID0ge30pIHtcblx0ICB2YXIgaywgcmVmLCB2O1xuXHQgIGZvciAoayBpbiBkZWZhdWx0cykge1xuXHQgICAgdiA9IGRlZmF1bHRzW2tdO1xuXHQgICAgb250b1trXSA9IChyZWYgPSByZWNlaXZlZFtrXSkgIT0gbnVsbCA/IHJlZiA6IHY7XG5cdCAgfVxuXHQgIHJldHVybiBvbnRvO1xuXHR9O1xuXG5cdHZhciBvdmVyd3JpdGUgPSBmdW5jdGlvbihyZWNlaXZlZCwgZGVmYXVsdHMsIG9udG8gPSB7fSkge1xuXHQgIHZhciBrLCB2O1xuXHQgIGZvciAoayBpbiByZWNlaXZlZCkge1xuXHQgICAgdiA9IHJlY2VpdmVkW2tdO1xuXHQgICAgaWYgKGRlZmF1bHRzW2tdICE9PSB2b2lkIDApIHtcblx0ICAgICAgb250b1trXSA9IHY7XG5cdCAgICB9XG5cdCAgfVxuXHQgIHJldHVybiBvbnRvO1xuXHR9O1xuXG5cdHZhciBwYXJzZXIgPSB7XG5cdFx0bG9hZDogbG9hZCxcblx0XHRvdmVyd3JpdGU6IG92ZXJ3cml0ZVxuXHR9O1xuXG5cdHZhciBETExpc3Q7XG5cblx0RExMaXN0ID0gY2xhc3MgRExMaXN0IHtcblx0ICBjb25zdHJ1Y3RvcihpbmNyLCBkZWNyKSB7XG5cdCAgICB0aGlzLmluY3IgPSBpbmNyO1xuXHQgICAgdGhpcy5kZWNyID0gZGVjcjtcblx0ICAgIHRoaXMuX2ZpcnN0ID0gbnVsbDtcblx0ICAgIHRoaXMuX2xhc3QgPSBudWxsO1xuXHQgICAgdGhpcy5sZW5ndGggPSAwO1xuXHQgIH1cblxuXHQgIHB1c2godmFsdWUpIHtcblx0ICAgIHZhciBub2RlO1xuXHQgICAgdGhpcy5sZW5ndGgrKztcblx0ICAgIGlmICh0eXBlb2YgdGhpcy5pbmNyID09PSBcImZ1bmN0aW9uXCIpIHtcblx0ICAgICAgdGhpcy5pbmNyKCk7XG5cdCAgICB9XG5cdCAgICBub2RlID0ge1xuXHQgICAgICB2YWx1ZSxcblx0ICAgICAgcHJldjogdGhpcy5fbGFzdCxcblx0ICAgICAgbmV4dDogbnVsbFxuXHQgICAgfTtcblx0ICAgIGlmICh0aGlzLl9sYXN0ICE9IG51bGwpIHtcblx0ICAgICAgdGhpcy5fbGFzdC5uZXh0ID0gbm9kZTtcblx0ICAgICAgdGhpcy5fbGFzdCA9IG5vZGU7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICB0aGlzLl9maXJzdCA9IHRoaXMuX2xhc3QgPSBub2RlO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIHZvaWQgMDtcblx0ICB9XG5cblx0ICBzaGlmdCgpIHtcblx0ICAgIHZhciB2YWx1ZTtcblx0ICAgIGlmICh0aGlzLl9maXJzdCA9PSBudWxsKSB7XG5cdCAgICAgIHJldHVybjtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIHRoaXMubGVuZ3RoLS07XG5cdCAgICAgIGlmICh0eXBlb2YgdGhpcy5kZWNyID09PSBcImZ1bmN0aW9uXCIpIHtcblx0ICAgICAgICB0aGlzLmRlY3IoKTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgICAgdmFsdWUgPSB0aGlzLl9maXJzdC52YWx1ZTtcblx0ICAgIGlmICgodGhpcy5fZmlyc3QgPSB0aGlzLl9maXJzdC5uZXh0KSAhPSBudWxsKSB7XG5cdCAgICAgIHRoaXMuX2ZpcnN0LnByZXYgPSBudWxsO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgdGhpcy5fbGFzdCA9IG51bGw7XG5cdCAgICB9XG5cdCAgICByZXR1cm4gdmFsdWU7XG5cdCAgfVxuXG5cdCAgZmlyc3QoKSB7XG5cdCAgICBpZiAodGhpcy5fZmlyc3QgIT0gbnVsbCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fZmlyc3QudmFsdWU7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgZ2V0QXJyYXkoKSB7XG5cdCAgICB2YXIgbm9kZSwgcmVmLCByZXN1bHRzO1xuXHQgICAgbm9kZSA9IHRoaXMuX2ZpcnN0O1xuXHQgICAgcmVzdWx0cyA9IFtdO1xuXHQgICAgd2hpbGUgKG5vZGUgIT0gbnVsbCkge1xuXHQgICAgICByZXN1bHRzLnB1c2goKHJlZiA9IG5vZGUsIG5vZGUgPSBub2RlLm5leHQsIHJlZi52YWx1ZSkpO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIHJlc3VsdHM7XG5cdCAgfVxuXG5cdCAgZm9yRWFjaFNoaWZ0KGNiKSB7XG5cdCAgICB2YXIgbm9kZTtcblx0ICAgIG5vZGUgPSB0aGlzLnNoaWZ0KCk7XG5cdCAgICB3aGlsZSAobm9kZSAhPSBudWxsKSB7XG5cdCAgICAgIChjYihub2RlKSwgbm9kZSA9IHRoaXMuc2hpZnQoKSk7XG5cdCAgICB9XG5cdCAgICByZXR1cm4gdm9pZCAwO1xuXHQgIH1cblxuXHQgIGRlYnVnKCkge1xuXHQgICAgdmFyIG5vZGUsIHJlZiwgcmVmMSwgcmVmMiwgcmVzdWx0cztcblx0ICAgIG5vZGUgPSB0aGlzLl9maXJzdDtcblx0ICAgIHJlc3VsdHMgPSBbXTtcblx0ICAgIHdoaWxlIChub2RlICE9IG51bGwpIHtcblx0ICAgICAgcmVzdWx0cy5wdXNoKChyZWYgPSBub2RlLCBub2RlID0gbm9kZS5uZXh0LCB7XG5cdCAgICAgICAgdmFsdWU6IHJlZi52YWx1ZSxcblx0ICAgICAgICBwcmV2OiAocmVmMSA9IHJlZi5wcmV2KSAhPSBudWxsID8gcmVmMS52YWx1ZSA6IHZvaWQgMCxcblx0ICAgICAgICBuZXh0OiAocmVmMiA9IHJlZi5uZXh0KSAhPSBudWxsID8gcmVmMi52YWx1ZSA6IHZvaWQgMFxuXHQgICAgICB9KSk7XG5cdCAgICB9XG5cdCAgICByZXR1cm4gcmVzdWx0cztcblx0ICB9XG5cblx0fTtcblxuXHR2YXIgRExMaXN0XzEgPSBETExpc3Q7XG5cblx0dmFyIEV2ZW50cztcblxuXHRFdmVudHMgPSBjbGFzcyBFdmVudHMge1xuXHQgIGNvbnN0cnVjdG9yKGluc3RhbmNlKSB7XG5cdCAgICB0aGlzLmluc3RhbmNlID0gaW5zdGFuY2U7XG5cdCAgICB0aGlzLl9ldmVudHMgPSB7fTtcblx0ICAgIGlmICgodGhpcy5pbnN0YW5jZS5vbiAhPSBudWxsKSB8fCAodGhpcy5pbnN0YW5jZS5vbmNlICE9IG51bGwpIHx8ICh0aGlzLmluc3RhbmNlLnJlbW92ZUFsbExpc3RlbmVycyAhPSBudWxsKSkge1xuXHQgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBbiBFbWl0dGVyIGFscmVhZHkgZXhpc3RzIGZvciB0aGlzIG9iamVjdFwiKTtcblx0ICAgIH1cblx0ICAgIHRoaXMuaW5zdGFuY2Uub24gPSAobmFtZSwgY2IpID0+IHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX2FkZExpc3RlbmVyKG5hbWUsIFwibWFueVwiLCBjYik7XG5cdCAgICB9O1xuXHQgICAgdGhpcy5pbnN0YW5jZS5vbmNlID0gKG5hbWUsIGNiKSA9PiB7XG5cdCAgICAgIHJldHVybiB0aGlzLl9hZGRMaXN0ZW5lcihuYW1lLCBcIm9uY2VcIiwgY2IpO1xuXHQgICAgfTtcblx0ICAgIHRoaXMuaW5zdGFuY2UucmVtb3ZlQWxsTGlzdGVuZXJzID0gKG5hbWUgPSBudWxsKSA9PiB7XG5cdCAgICAgIGlmIChuYW1lICE9IG51bGwpIHtcblx0ICAgICAgICByZXR1cm4gZGVsZXRlIHRoaXMuX2V2ZW50c1tuYW1lXTtcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnRzID0ge307XG5cdCAgICAgIH1cblx0ICAgIH07XG5cdCAgfVxuXG5cdCAgX2FkZExpc3RlbmVyKG5hbWUsIHN0YXR1cywgY2IpIHtcblx0ICAgIHZhciBiYXNlO1xuXHQgICAgaWYgKChiYXNlID0gdGhpcy5fZXZlbnRzKVtuYW1lXSA9PSBudWxsKSB7XG5cdCAgICAgIGJhc2VbbmFtZV0gPSBbXTtcblx0ICAgIH1cblx0ICAgIHRoaXMuX2V2ZW50c1tuYW1lXS5wdXNoKHtjYiwgc3RhdHVzfSk7XG5cdCAgICByZXR1cm4gdGhpcy5pbnN0YW5jZTtcblx0ICB9XG5cblx0ICBsaXN0ZW5lckNvdW50KG5hbWUpIHtcblx0ICAgIGlmICh0aGlzLl9ldmVudHNbbmFtZV0gIT0gbnVsbCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fZXZlbnRzW25hbWVdLmxlbmd0aDtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIHJldHVybiAwO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIGFzeW5jIHRyaWdnZXIobmFtZSwgLi4uYXJncykge1xuXHQgICAgdmFyIGUsIHByb21pc2VzO1xuXHQgICAgdHJ5IHtcblx0ICAgICAgaWYgKG5hbWUgIT09IFwiZGVidWdcIikge1xuXHQgICAgICAgIHRoaXMudHJpZ2dlcihcImRlYnVnXCIsIGBFdmVudCB0cmlnZ2VyZWQ6ICR7bmFtZX1gLCBhcmdzKTtcblx0ICAgICAgfVxuXHQgICAgICBpZiAodGhpcy5fZXZlbnRzW25hbWVdID09IG51bGwpIHtcblx0ICAgICAgICByZXR1cm47XG5cdCAgICAgIH1cblx0ICAgICAgdGhpcy5fZXZlbnRzW25hbWVdID0gdGhpcy5fZXZlbnRzW25hbWVdLmZpbHRlcihmdW5jdGlvbihsaXN0ZW5lcikge1xuXHQgICAgICAgIHJldHVybiBsaXN0ZW5lci5zdGF0dXMgIT09IFwibm9uZVwiO1xuXHQgICAgICB9KTtcblx0ICAgICAgcHJvbWlzZXMgPSB0aGlzLl9ldmVudHNbbmFtZV0ubWFwKGFzeW5jKGxpc3RlbmVyKSA9PiB7XG5cdCAgICAgICAgdmFyIGUsIHJldHVybmVkO1xuXHQgICAgICAgIGlmIChsaXN0ZW5lci5zdGF0dXMgPT09IFwibm9uZVwiKSB7XG5cdCAgICAgICAgICByZXR1cm47XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmIChsaXN0ZW5lci5zdGF0dXMgPT09IFwib25jZVwiKSB7XG5cdCAgICAgICAgICBsaXN0ZW5lci5zdGF0dXMgPSBcIm5vbmVcIjtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdHJ5IHtcblx0ICAgICAgICAgIHJldHVybmVkID0gdHlwZW9mIGxpc3RlbmVyLmNiID09PSBcImZ1bmN0aW9uXCIgPyBsaXN0ZW5lci5jYiguLi5hcmdzKSA6IHZvaWQgMDtcblx0ICAgICAgICAgIGlmICh0eXBlb2YgKHJldHVybmVkICE9IG51bGwgPyByZXR1cm5lZC50aGVuIDogdm9pZCAwKSA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdCAgICAgICAgICAgIHJldHVybiAoYXdhaXQgcmV0dXJuZWQpO1xuXHQgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHJldHVybmVkO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG5cdCAgICAgICAgICBlID0gZXJyb3I7XG5cdCAgICAgICAgICB7XG5cdCAgICAgICAgICAgIHRoaXMudHJpZ2dlcihcImVycm9yXCIsIGUpO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgICAgcmV0dXJuIG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICB9KTtcblx0ICAgICAgcmV0dXJuICgoYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpKSkuZmluZChmdW5jdGlvbih4KSB7XG5cdCAgICAgICAgcmV0dXJuIHggIT0gbnVsbDtcblx0ICAgICAgfSk7XG5cdCAgICB9IGNhdGNoIChlcnJvcikge1xuXHQgICAgICBlID0gZXJyb3I7XG5cdCAgICAgIHtcblx0ICAgICAgICB0aGlzLnRyaWdnZXIoXCJlcnJvclwiLCBlKTtcblx0ICAgICAgfVxuXHQgICAgICByZXR1cm4gbnVsbDtcblx0ICAgIH1cblx0ICB9XG5cblx0fTtcblxuXHR2YXIgRXZlbnRzXzEgPSBFdmVudHM7XG5cblx0dmFyIERMTGlzdCQxLCBFdmVudHMkMSwgUXVldWVzO1xuXG5cdERMTGlzdCQxID0gRExMaXN0XzE7XG5cblx0RXZlbnRzJDEgPSBFdmVudHNfMTtcblxuXHRRdWV1ZXMgPSBjbGFzcyBRdWV1ZXMge1xuXHQgIGNvbnN0cnVjdG9yKG51bV9wcmlvcml0aWVzKSB7XG5cdCAgICB2YXIgaTtcblx0ICAgIHRoaXMuRXZlbnRzID0gbmV3IEV2ZW50cyQxKHRoaXMpO1xuXHQgICAgdGhpcy5fbGVuZ3RoID0gMDtcblx0ICAgIHRoaXMuX2xpc3RzID0gKGZ1bmN0aW9uKCkge1xuXHQgICAgICB2YXIgaiwgcmVmLCByZXN1bHRzO1xuXHQgICAgICByZXN1bHRzID0gW107XG5cdCAgICAgIGZvciAoaSA9IGogPSAxLCByZWYgPSBudW1fcHJpb3JpdGllczsgKDEgPD0gcmVmID8gaiA8PSByZWYgOiBqID49IHJlZik7IGkgPSAxIDw9IHJlZiA/ICsraiA6IC0taikge1xuXHQgICAgICAgIHJlc3VsdHMucHVzaChuZXcgRExMaXN0JDEoKCgpID0+IHtcblx0ICAgICAgICAgIHJldHVybiB0aGlzLmluY3IoKTtcblx0ICAgICAgICB9KSwgKCgpID0+IHtcblx0ICAgICAgICAgIHJldHVybiB0aGlzLmRlY3IoKTtcblx0ICAgICAgICB9KSkpO1xuXHQgICAgICB9XG5cdCAgICAgIHJldHVybiByZXN1bHRzO1xuXHQgICAgfSkuY2FsbCh0aGlzKTtcblx0ICB9XG5cblx0ICBpbmNyKCkge1xuXHQgICAgaWYgKHRoaXMuX2xlbmd0aCsrID09PSAwKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLkV2ZW50cy50cmlnZ2VyKFwibGVmdHplcm9cIik7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgZGVjcigpIHtcblx0ICAgIGlmICgtLXRoaXMuX2xlbmd0aCA9PT0gMCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5FdmVudHMudHJpZ2dlcihcInplcm9cIik7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgcHVzaChqb2IpIHtcblx0ICAgIHJldHVybiB0aGlzLl9saXN0c1tqb2Iub3B0aW9ucy5wcmlvcml0eV0ucHVzaChqb2IpO1xuXHQgIH1cblxuXHQgIHF1ZXVlZChwcmlvcml0eSkge1xuXHQgICAgaWYgKHByaW9yaXR5ICE9IG51bGwpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX2xpc3RzW3ByaW9yaXR5XS5sZW5ndGg7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICByZXR1cm4gdGhpcy5fbGVuZ3RoO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIHNoaWZ0QWxsKGZuKSB7XG5cdCAgICByZXR1cm4gdGhpcy5fbGlzdHMuZm9yRWFjaChmdW5jdGlvbihsaXN0KSB7XG5cdCAgICAgIHJldHVybiBsaXN0LmZvckVhY2hTaGlmdChmbik7XG5cdCAgICB9KTtcblx0ICB9XG5cblx0ICBnZXRGaXJzdChhcnIgPSB0aGlzLl9saXN0cykge1xuXHQgICAgdmFyIGosIGxlbiwgbGlzdDtcblx0ICAgIGZvciAoaiA9IDAsIGxlbiA9IGFyci5sZW5ndGg7IGogPCBsZW47IGorKykge1xuXHQgICAgICBsaXN0ID0gYXJyW2pdO1xuXHQgICAgICBpZiAobGlzdC5sZW5ndGggPiAwKSB7XG5cdCAgICAgICAgcmV0dXJuIGxpc3Q7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICAgIHJldHVybiBbXTtcblx0ICB9XG5cblx0ICBzaGlmdExhc3RGcm9tKHByaW9yaXR5KSB7XG5cdCAgICByZXR1cm4gdGhpcy5nZXRGaXJzdCh0aGlzLl9saXN0cy5zbGljZShwcmlvcml0eSkucmV2ZXJzZSgpKS5zaGlmdCgpO1xuXHQgIH1cblxuXHR9O1xuXG5cdHZhciBRdWV1ZXNfMSA9IFF1ZXVlcztcblxuXHR2YXIgQm90dGxlbmVja0Vycm9yO1xuXG5cdEJvdHRsZW5lY2tFcnJvciA9IGNsYXNzIEJvdHRsZW5lY2tFcnJvciBleHRlbmRzIEVycm9yIHt9O1xuXG5cdHZhciBCb3R0bGVuZWNrRXJyb3JfMSA9IEJvdHRsZW5lY2tFcnJvcjtcblxuXHR2YXIgQm90dGxlbmVja0Vycm9yJDEsIERFRkFVTFRfUFJJT1JJVFksIEpvYiwgTlVNX1BSSU9SSVRJRVMsIHBhcnNlciQxO1xuXG5cdE5VTV9QUklPUklUSUVTID0gMTA7XG5cblx0REVGQVVMVF9QUklPUklUWSA9IDU7XG5cblx0cGFyc2VyJDEgPSBwYXJzZXI7XG5cblx0Qm90dGxlbmVja0Vycm9yJDEgPSBCb3R0bGVuZWNrRXJyb3JfMTtcblxuXHRKb2IgPSBjbGFzcyBKb2Ige1xuXHQgIGNvbnN0cnVjdG9yKHRhc2ssIGFyZ3MsIG9wdGlvbnMsIGpvYkRlZmF1bHRzLCByZWplY3RPbkRyb3AsIEV2ZW50cywgX3N0YXRlcywgUHJvbWlzZSkge1xuXHQgICAgdGhpcy50YXNrID0gdGFzaztcblx0ICAgIHRoaXMuYXJncyA9IGFyZ3M7XG5cdCAgICB0aGlzLnJlamVjdE9uRHJvcCA9IHJlamVjdE9uRHJvcDtcblx0ICAgIHRoaXMuRXZlbnRzID0gRXZlbnRzO1xuXHQgICAgdGhpcy5fc3RhdGVzID0gX3N0YXRlcztcblx0ICAgIHRoaXMuUHJvbWlzZSA9IFByb21pc2U7XG5cdCAgICB0aGlzLm9wdGlvbnMgPSBwYXJzZXIkMS5sb2FkKG9wdGlvbnMsIGpvYkRlZmF1bHRzKTtcblx0ICAgIHRoaXMub3B0aW9ucy5wcmlvcml0eSA9IHRoaXMuX3Nhbml0aXplUHJpb3JpdHkodGhpcy5vcHRpb25zLnByaW9yaXR5KTtcblx0ICAgIGlmICh0aGlzLm9wdGlvbnMuaWQgPT09IGpvYkRlZmF1bHRzLmlkKSB7XG5cdCAgICAgIHRoaXMub3B0aW9ucy5pZCA9IGAke3RoaXMub3B0aW9ucy5pZH0tJHt0aGlzLl9yYW5kb21JbmRleCgpfWA7XG5cdCAgICB9XG5cdCAgICB0aGlzLnByb21pc2UgPSBuZXcgdGhpcy5Qcm9taXNlKChfcmVzb2x2ZSwgX3JlamVjdCkgPT4ge1xuXHQgICAgICB0aGlzLl9yZXNvbHZlID0gX3Jlc29sdmU7XG5cdCAgICAgIHRoaXMuX3JlamVjdCA9IF9yZWplY3Q7XG5cdCAgICB9KTtcblx0ICAgIHRoaXMucmV0cnlDb3VudCA9IDA7XG5cdCAgfVxuXG5cdCAgX3Nhbml0aXplUHJpb3JpdHkocHJpb3JpdHkpIHtcblx0ICAgIHZhciBzUHJvcGVydHk7XG5cdCAgICBzUHJvcGVydHkgPSB+fnByaW9yaXR5ICE9PSBwcmlvcml0eSA/IERFRkFVTFRfUFJJT1JJVFkgOiBwcmlvcml0eTtcblx0ICAgIGlmIChzUHJvcGVydHkgPCAwKSB7XG5cdCAgICAgIHJldHVybiAwO1xuXHQgICAgfSBlbHNlIGlmIChzUHJvcGVydHkgPiBOVU1fUFJJT1JJVElFUyAtIDEpIHtcblx0ICAgICAgcmV0dXJuIE5VTV9QUklPUklUSUVTIC0gMTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIHJldHVybiBzUHJvcGVydHk7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgX3JhbmRvbUluZGV4KCkge1xuXHQgICAgcmV0dXJuIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIpO1xuXHQgIH1cblxuXHQgIGRvRHJvcCh7ZXJyb3IsIG1lc3NhZ2UgPSBcIlRoaXMgam9iIGhhcyBiZWVuIGRyb3BwZWQgYnkgQm90dGxlbmVja1wifSA9IHt9KSB7XG5cdCAgICBpZiAodGhpcy5fc3RhdGVzLnJlbW92ZSh0aGlzLm9wdGlvbnMuaWQpKSB7XG5cdCAgICAgIGlmICh0aGlzLnJlamVjdE9uRHJvcCkge1xuXHQgICAgICAgIHRoaXMuX3JlamVjdChlcnJvciAhPSBudWxsID8gZXJyb3IgOiBuZXcgQm90dGxlbmVja0Vycm9yJDEobWVzc2FnZSkpO1xuXHQgICAgICB9XG5cdCAgICAgIHRoaXMuRXZlbnRzLnRyaWdnZXIoXCJkcm9wcGVkXCIsIHthcmdzOiB0aGlzLmFyZ3MsIG9wdGlvbnM6IHRoaXMub3B0aW9ucywgdGFzazogdGhpcy50YXNrLCBwcm9taXNlOiB0aGlzLnByb21pc2V9KTtcblx0ICAgICAgcmV0dXJuIHRydWU7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICByZXR1cm4gZmFsc2U7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgX2Fzc2VydFN0YXR1cyhleHBlY3RlZCkge1xuXHQgICAgdmFyIHN0YXR1cztcblx0ICAgIHN0YXR1cyA9IHRoaXMuX3N0YXRlcy5qb2JTdGF0dXModGhpcy5vcHRpb25zLmlkKTtcblx0ICAgIGlmICghKHN0YXR1cyA9PT0gZXhwZWN0ZWQgfHwgKGV4cGVjdGVkID09PSBcIkRPTkVcIiAmJiBzdGF0dXMgPT09IG51bGwpKSkge1xuXHQgICAgICB0aHJvdyBuZXcgQm90dGxlbmVja0Vycm9yJDEoYEludmFsaWQgam9iIHN0YXR1cyAke3N0YXR1c30sIGV4cGVjdGVkICR7ZXhwZWN0ZWR9LiBQbGVhc2Ugb3BlbiBhbiBpc3N1ZSBhdCBodHRwczovL2dpdGh1Yi5jb20vU0dyb25kaW4vYm90dGxlbmVjay9pc3N1ZXNgKTtcblx0ICAgIH1cblx0ICB9XG5cblx0ICBkb1JlY2VpdmUoKSB7XG5cdCAgICB0aGlzLl9zdGF0ZXMuc3RhcnQodGhpcy5vcHRpb25zLmlkKTtcblx0ICAgIHJldHVybiB0aGlzLkV2ZW50cy50cmlnZ2VyKFwicmVjZWl2ZWRcIiwge2FyZ3M6IHRoaXMuYXJncywgb3B0aW9uczogdGhpcy5vcHRpb25zfSk7XG5cdCAgfVxuXG5cdCAgZG9RdWV1ZShyZWFjaGVkSFdNLCBibG9ja2VkKSB7XG5cdCAgICB0aGlzLl9hc3NlcnRTdGF0dXMoXCJSRUNFSVZFRFwiKTtcblx0ICAgIHRoaXMuX3N0YXRlcy5uZXh0KHRoaXMub3B0aW9ucy5pZCk7XG5cdCAgICByZXR1cm4gdGhpcy5FdmVudHMudHJpZ2dlcihcInF1ZXVlZFwiLCB7YXJnczogdGhpcy5hcmdzLCBvcHRpb25zOiB0aGlzLm9wdGlvbnMsIHJlYWNoZWRIV00sIGJsb2NrZWR9KTtcblx0ICB9XG5cblx0ICBkb1J1bigpIHtcblx0ICAgIGlmICh0aGlzLnJldHJ5Q291bnQgPT09IDApIHtcblx0ICAgICAgdGhpcy5fYXNzZXJ0U3RhdHVzKFwiUVVFVUVEXCIpO1xuXHQgICAgICB0aGlzLl9zdGF0ZXMubmV4dCh0aGlzLm9wdGlvbnMuaWQpO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgdGhpcy5fYXNzZXJ0U3RhdHVzKFwiRVhFQ1VUSU5HXCIpO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIHRoaXMuRXZlbnRzLnRyaWdnZXIoXCJzY2hlZHVsZWRcIiwge2FyZ3M6IHRoaXMuYXJncywgb3B0aW9uczogdGhpcy5vcHRpb25zfSk7XG5cdCAgfVxuXG5cdCAgYXN5bmMgZG9FeGVjdXRlKGNoYWluZWQsIGNsZWFyR2xvYmFsU3RhdGUsIHJ1biwgZnJlZSkge1xuXHQgICAgdmFyIGVycm9yLCBldmVudEluZm8sIHBhc3NlZDtcblx0ICAgIGlmICh0aGlzLnJldHJ5Q291bnQgPT09IDApIHtcblx0ICAgICAgdGhpcy5fYXNzZXJ0U3RhdHVzKFwiUlVOTklOR1wiKTtcblx0ICAgICAgdGhpcy5fc3RhdGVzLm5leHQodGhpcy5vcHRpb25zLmlkKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIHRoaXMuX2Fzc2VydFN0YXR1cyhcIkVYRUNVVElOR1wiKTtcblx0ICAgIH1cblx0ICAgIGV2ZW50SW5mbyA9IHthcmdzOiB0aGlzLmFyZ3MsIG9wdGlvbnM6IHRoaXMub3B0aW9ucywgcmV0cnlDb3VudDogdGhpcy5yZXRyeUNvdW50fTtcblx0ICAgIHRoaXMuRXZlbnRzLnRyaWdnZXIoXCJleGVjdXRpbmdcIiwgZXZlbnRJbmZvKTtcblx0ICAgIHRyeSB7XG5cdCAgICAgIHBhc3NlZCA9IChhd2FpdCAoY2hhaW5lZCAhPSBudWxsID8gY2hhaW5lZC5zY2hlZHVsZSh0aGlzLm9wdGlvbnMsIHRoaXMudGFzaywgLi4udGhpcy5hcmdzKSA6IHRoaXMudGFzayguLi50aGlzLmFyZ3MpKSk7XG5cdCAgICAgIGlmIChjbGVhckdsb2JhbFN0YXRlKCkpIHtcblx0ICAgICAgICB0aGlzLmRvRG9uZShldmVudEluZm8pO1xuXHQgICAgICAgIGF3YWl0IGZyZWUodGhpcy5vcHRpb25zLCBldmVudEluZm8pO1xuXHQgICAgICAgIHRoaXMuX2Fzc2VydFN0YXR1cyhcIkRPTkVcIik7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc29sdmUocGFzc2VkKTtcblx0ICAgICAgfVxuXHQgICAgfSBjYXRjaCAoZXJyb3IxKSB7XG5cdCAgICAgIGVycm9yID0gZXJyb3IxO1xuXHQgICAgICByZXR1cm4gdGhpcy5fb25GYWlsdXJlKGVycm9yLCBldmVudEluZm8sIGNsZWFyR2xvYmFsU3RhdGUsIHJ1biwgZnJlZSk7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgZG9FeHBpcmUoY2xlYXJHbG9iYWxTdGF0ZSwgcnVuLCBmcmVlKSB7XG5cdCAgICB2YXIgZXJyb3IsIGV2ZW50SW5mbztcblx0ICAgIGlmICh0aGlzLl9zdGF0ZXMuam9iU3RhdHVzKHRoaXMub3B0aW9ucy5pZCA9PT0gXCJSVU5OSU5HXCIpKSB7XG5cdCAgICAgIHRoaXMuX3N0YXRlcy5uZXh0KHRoaXMub3B0aW9ucy5pZCk7XG5cdCAgICB9XG5cdCAgICB0aGlzLl9hc3NlcnRTdGF0dXMoXCJFWEVDVVRJTkdcIik7XG5cdCAgICBldmVudEluZm8gPSB7YXJnczogdGhpcy5hcmdzLCBvcHRpb25zOiB0aGlzLm9wdGlvbnMsIHJldHJ5Q291bnQ6IHRoaXMucmV0cnlDb3VudH07XG5cdCAgICBlcnJvciA9IG5ldyBCb3R0bGVuZWNrRXJyb3IkMShgVGhpcyBqb2IgdGltZWQgb3V0IGFmdGVyICR7dGhpcy5vcHRpb25zLmV4cGlyYXRpb259IG1zLmApO1xuXHQgICAgcmV0dXJuIHRoaXMuX29uRmFpbHVyZShlcnJvciwgZXZlbnRJbmZvLCBjbGVhckdsb2JhbFN0YXRlLCBydW4sIGZyZWUpO1xuXHQgIH1cblxuXHQgIGFzeW5jIF9vbkZhaWx1cmUoZXJyb3IsIGV2ZW50SW5mbywgY2xlYXJHbG9iYWxTdGF0ZSwgcnVuLCBmcmVlKSB7XG5cdCAgICB2YXIgcmV0cnksIHJldHJ5QWZ0ZXI7XG5cdCAgICBpZiAoY2xlYXJHbG9iYWxTdGF0ZSgpKSB7XG5cdCAgICAgIHJldHJ5ID0gKGF3YWl0IHRoaXMuRXZlbnRzLnRyaWdnZXIoXCJmYWlsZWRcIiwgZXJyb3IsIGV2ZW50SW5mbykpO1xuXHQgICAgICBpZiAocmV0cnkgIT0gbnVsbCkge1xuXHQgICAgICAgIHJldHJ5QWZ0ZXIgPSB+fnJldHJ5O1xuXHQgICAgICAgIHRoaXMuRXZlbnRzLnRyaWdnZXIoXCJyZXRyeVwiLCBgUmV0cnlpbmcgJHt0aGlzLm9wdGlvbnMuaWR9IGFmdGVyICR7cmV0cnlBZnRlcn0gbXNgLCBldmVudEluZm8pO1xuXHQgICAgICAgIHRoaXMucmV0cnlDb3VudCsrO1xuXHQgICAgICAgIHJldHVybiBydW4ocmV0cnlBZnRlcik7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgdGhpcy5kb0RvbmUoZXZlbnRJbmZvKTtcblx0ICAgICAgICBhd2FpdCBmcmVlKHRoaXMub3B0aW9ucywgZXZlbnRJbmZvKTtcblx0ICAgICAgICB0aGlzLl9hc3NlcnRTdGF0dXMoXCJET05FXCIpO1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9yZWplY3QoZXJyb3IpO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgZG9Eb25lKGV2ZW50SW5mbykge1xuXHQgICAgdGhpcy5fYXNzZXJ0U3RhdHVzKFwiRVhFQ1VUSU5HXCIpO1xuXHQgICAgdGhpcy5fc3RhdGVzLm5leHQodGhpcy5vcHRpb25zLmlkKTtcblx0ICAgIHJldHVybiB0aGlzLkV2ZW50cy50cmlnZ2VyKFwiZG9uZVwiLCBldmVudEluZm8pO1xuXHQgIH1cblxuXHR9O1xuXG5cdHZhciBKb2JfMSA9IEpvYjtcblxuXHR2YXIgQm90dGxlbmVja0Vycm9yJDIsIExvY2FsRGF0YXN0b3JlLCBwYXJzZXIkMjtcblxuXHRwYXJzZXIkMiA9IHBhcnNlcjtcblxuXHRCb3R0bGVuZWNrRXJyb3IkMiA9IEJvdHRsZW5lY2tFcnJvcl8xO1xuXG5cdExvY2FsRGF0YXN0b3JlID0gY2xhc3MgTG9jYWxEYXRhc3RvcmUge1xuXHQgIGNvbnN0cnVjdG9yKGluc3RhbmNlLCBzdG9yZU9wdGlvbnMsIHN0b3JlSW5zdGFuY2VPcHRpb25zKSB7XG5cdCAgICB0aGlzLmluc3RhbmNlID0gaW5zdGFuY2U7XG5cdCAgICB0aGlzLnN0b3JlT3B0aW9ucyA9IHN0b3JlT3B0aW9ucztcblx0ICAgIHRoaXMuY2xpZW50SWQgPSB0aGlzLmluc3RhbmNlLl9yYW5kb21JbmRleCgpO1xuXHQgICAgcGFyc2VyJDIubG9hZChzdG9yZUluc3RhbmNlT3B0aW9ucywgc3RvcmVJbnN0YW5jZU9wdGlvbnMsIHRoaXMpO1xuXHQgICAgdGhpcy5fbmV4dFJlcXVlc3QgPSB0aGlzLl9sYXN0UmVzZXJ2b2lyUmVmcmVzaCA9IHRoaXMuX2xhc3RSZXNlcnZvaXJJbmNyZWFzZSA9IERhdGUubm93KCk7XG5cdCAgICB0aGlzLl9ydW5uaW5nID0gMDtcblx0ICAgIHRoaXMuX2RvbmUgPSAwO1xuXHQgICAgdGhpcy5fdW5ibG9ja1RpbWUgPSAwO1xuXHQgICAgdGhpcy5yZWFkeSA9IHRoaXMuUHJvbWlzZS5yZXNvbHZlKCk7XG5cdCAgICB0aGlzLmNsaWVudHMgPSB7fTtcblx0ICAgIHRoaXMuX3N0YXJ0SGVhcnRiZWF0KCk7XG5cdCAgfVxuXG5cdCAgX3N0YXJ0SGVhcnRiZWF0KCkge1xuXHQgICAgdmFyIGJhc2U7XG5cdCAgICBpZiAoKHRoaXMuaGVhcnRiZWF0ID09IG51bGwpICYmICgoKHRoaXMuc3RvcmVPcHRpb25zLnJlc2Vydm9pclJlZnJlc2hJbnRlcnZhbCAhPSBudWxsKSAmJiAodGhpcy5zdG9yZU9wdGlvbnMucmVzZXJ2b2lyUmVmcmVzaEFtb3VudCAhPSBudWxsKSkgfHwgKCh0aGlzLnN0b3JlT3B0aW9ucy5yZXNlcnZvaXJJbmNyZWFzZUludGVydmFsICE9IG51bGwpICYmICh0aGlzLnN0b3JlT3B0aW9ucy5yZXNlcnZvaXJJbmNyZWFzZUFtb3VudCAhPSBudWxsKSkpKSB7XG5cdCAgICAgIHJldHVybiB0eXBlb2YgKGJhc2UgPSAodGhpcy5oZWFydGJlYXQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG5cdCAgICAgICAgdmFyIGFtb3VudCwgaW5jciwgbWF4aW11bSwgbm93LCByZXNlcnZvaXI7XG5cdCAgICAgICAgbm93ID0gRGF0ZS5ub3coKTtcblx0ICAgICAgICBpZiAoKHRoaXMuc3RvcmVPcHRpb25zLnJlc2Vydm9pclJlZnJlc2hJbnRlcnZhbCAhPSBudWxsKSAmJiBub3cgPj0gdGhpcy5fbGFzdFJlc2Vydm9pclJlZnJlc2ggKyB0aGlzLnN0b3JlT3B0aW9ucy5yZXNlcnZvaXJSZWZyZXNoSW50ZXJ2YWwpIHtcblx0ICAgICAgICAgIHRoaXMuX2xhc3RSZXNlcnZvaXJSZWZyZXNoID0gbm93O1xuXHQgICAgICAgICAgdGhpcy5zdG9yZU9wdGlvbnMucmVzZXJ2b2lyID0gdGhpcy5zdG9yZU9wdGlvbnMucmVzZXJ2b2lyUmVmcmVzaEFtb3VudDtcblx0ICAgICAgICAgIHRoaXMuaW5zdGFuY2UuX2RyYWluQWxsKHRoaXMuY29tcHV0ZUNhcGFjaXR5KCkpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoKHRoaXMuc3RvcmVPcHRpb25zLnJlc2Vydm9pckluY3JlYXNlSW50ZXJ2YWwgIT0gbnVsbCkgJiYgbm93ID49IHRoaXMuX2xhc3RSZXNlcnZvaXJJbmNyZWFzZSArIHRoaXMuc3RvcmVPcHRpb25zLnJlc2Vydm9pckluY3JlYXNlSW50ZXJ2YWwpIHtcblx0ICAgICAgICAgICh7XG5cdCAgICAgICAgICAgIHJlc2Vydm9pckluY3JlYXNlQW1vdW50OiBhbW91bnQsXG5cdCAgICAgICAgICAgIHJlc2Vydm9pckluY3JlYXNlTWF4aW11bTogbWF4aW11bSxcblx0ICAgICAgICAgICAgcmVzZXJ2b2lyXG5cdCAgICAgICAgICB9ID0gdGhpcy5zdG9yZU9wdGlvbnMpO1xuXHQgICAgICAgICAgdGhpcy5fbGFzdFJlc2Vydm9pckluY3JlYXNlID0gbm93O1xuXHQgICAgICAgICAgaW5jciA9IG1heGltdW0gIT0gbnVsbCA/IE1hdGgubWluKGFtb3VudCwgbWF4aW11bSAtIHJlc2Vydm9pcikgOiBhbW91bnQ7XG5cdCAgICAgICAgICBpZiAoaW5jciA+IDApIHtcblx0ICAgICAgICAgICAgdGhpcy5zdG9yZU9wdGlvbnMucmVzZXJ2b2lyICs9IGluY3I7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLmluc3RhbmNlLl9kcmFpbkFsbCh0aGlzLmNvbXB1dGVDYXBhY2l0eSgpKTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgIH0sIHRoaXMuaGVhcnRiZWF0SW50ZXJ2YWwpKSkudW5yZWYgPT09IFwiZnVuY3Rpb25cIiA/IGJhc2UudW5yZWYoKSA6IHZvaWQgMDtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIHJldHVybiBjbGVhckludGVydmFsKHRoaXMuaGVhcnRiZWF0KTtcblx0ICAgIH1cblx0ICB9XG5cblx0ICBhc3luYyBfX3B1Ymxpc2hfXyhtZXNzYWdlKSB7XG5cdCAgICBhd2FpdCB0aGlzLnlpZWxkTG9vcCgpO1xuXHQgICAgcmV0dXJuIHRoaXMuaW5zdGFuY2UuRXZlbnRzLnRyaWdnZXIoXCJtZXNzYWdlXCIsIG1lc3NhZ2UudG9TdHJpbmcoKSk7XG5cdCAgfVxuXG5cdCAgYXN5bmMgX19kaXNjb25uZWN0X18oZmx1c2gpIHtcblx0ICAgIGF3YWl0IHRoaXMueWllbGRMb29wKCk7XG5cdCAgICBjbGVhckludGVydmFsKHRoaXMuaGVhcnRiZWF0KTtcblx0ICAgIHJldHVybiB0aGlzLlByb21pc2UucmVzb2x2ZSgpO1xuXHQgIH1cblxuXHQgIHlpZWxkTG9vcCh0ID0gMCkge1xuXHQgICAgcmV0dXJuIG5ldyB0aGlzLlByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdCAgICAgIHJldHVybiBzZXRUaW1lb3V0KHJlc29sdmUsIHQpO1xuXHQgICAgfSk7XG5cdCAgfVxuXG5cdCAgY29tcHV0ZVBlbmFsdHkoKSB7XG5cdCAgICB2YXIgcmVmO1xuXHQgICAgcmV0dXJuIChyZWYgPSB0aGlzLnN0b3JlT3B0aW9ucy5wZW5hbHR5KSAhPSBudWxsID8gcmVmIDogKDE1ICogdGhpcy5zdG9yZU9wdGlvbnMubWluVGltZSkgfHwgNTAwMDtcblx0ICB9XG5cblx0ICBhc3luYyBfX3VwZGF0ZVNldHRpbmdzX18ob3B0aW9ucykge1xuXHQgICAgYXdhaXQgdGhpcy55aWVsZExvb3AoKTtcblx0ICAgIHBhcnNlciQyLm92ZXJ3cml0ZShvcHRpb25zLCBvcHRpb25zLCB0aGlzLnN0b3JlT3B0aW9ucyk7XG5cdCAgICB0aGlzLl9zdGFydEhlYXJ0YmVhdCgpO1xuXHQgICAgdGhpcy5pbnN0YW5jZS5fZHJhaW5BbGwodGhpcy5jb21wdXRlQ2FwYWNpdHkoKSk7XG5cdCAgICByZXR1cm4gdHJ1ZTtcblx0ICB9XG5cblx0ICBhc3luYyBfX3J1bm5pbmdfXygpIHtcblx0ICAgIGF3YWl0IHRoaXMueWllbGRMb29wKCk7XG5cdCAgICByZXR1cm4gdGhpcy5fcnVubmluZztcblx0ICB9XG5cblx0ICBhc3luYyBfX3F1ZXVlZF9fKCkge1xuXHQgICAgYXdhaXQgdGhpcy55aWVsZExvb3AoKTtcblx0ICAgIHJldHVybiB0aGlzLmluc3RhbmNlLnF1ZXVlZCgpO1xuXHQgIH1cblxuXHQgIGFzeW5jIF9fZG9uZV9fKCkge1xuXHQgICAgYXdhaXQgdGhpcy55aWVsZExvb3AoKTtcblx0ICAgIHJldHVybiB0aGlzLl9kb25lO1xuXHQgIH1cblxuXHQgIGFzeW5jIF9fZ3JvdXBDaGVja19fKHRpbWUpIHtcblx0ICAgIGF3YWl0IHRoaXMueWllbGRMb29wKCk7XG5cdCAgICByZXR1cm4gKHRoaXMuX25leHRSZXF1ZXN0ICsgdGhpcy50aW1lb3V0KSA8IHRpbWU7XG5cdCAgfVxuXG5cdCAgY29tcHV0ZUNhcGFjaXR5KCkge1xuXHQgICAgdmFyIG1heENvbmN1cnJlbnQsIHJlc2Vydm9pcjtcblx0ICAgICh7bWF4Q29uY3VycmVudCwgcmVzZXJ2b2lyfSA9IHRoaXMuc3RvcmVPcHRpb25zKTtcblx0ICAgIGlmICgobWF4Q29uY3VycmVudCAhPSBudWxsKSAmJiAocmVzZXJ2b2lyICE9IG51bGwpKSB7XG5cdCAgICAgIHJldHVybiBNYXRoLm1pbihtYXhDb25jdXJyZW50IC0gdGhpcy5fcnVubmluZywgcmVzZXJ2b2lyKTtcblx0ICAgIH0gZWxzZSBpZiAobWF4Q29uY3VycmVudCAhPSBudWxsKSB7XG5cdCAgICAgIHJldHVybiBtYXhDb25jdXJyZW50IC0gdGhpcy5fcnVubmluZztcblx0ICAgIH0gZWxzZSBpZiAocmVzZXJ2b2lyICE9IG51bGwpIHtcblx0ICAgICAgcmV0dXJuIHJlc2Vydm9pcjtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIHJldHVybiBudWxsO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIGNvbmRpdGlvbnNDaGVjayh3ZWlnaHQpIHtcblx0ICAgIHZhciBjYXBhY2l0eTtcblx0ICAgIGNhcGFjaXR5ID0gdGhpcy5jb21wdXRlQ2FwYWNpdHkoKTtcblx0ICAgIHJldHVybiAoY2FwYWNpdHkgPT0gbnVsbCkgfHwgd2VpZ2h0IDw9IGNhcGFjaXR5O1xuXHQgIH1cblxuXHQgIGFzeW5jIF9faW5jcmVtZW50UmVzZXJ2b2lyX18oaW5jcikge1xuXHQgICAgdmFyIHJlc2Vydm9pcjtcblx0ICAgIGF3YWl0IHRoaXMueWllbGRMb29wKCk7XG5cdCAgICByZXNlcnZvaXIgPSB0aGlzLnN0b3JlT3B0aW9ucy5yZXNlcnZvaXIgKz0gaW5jcjtcblx0ICAgIHRoaXMuaW5zdGFuY2UuX2RyYWluQWxsKHRoaXMuY29tcHV0ZUNhcGFjaXR5KCkpO1xuXHQgICAgcmV0dXJuIHJlc2Vydm9pcjtcblx0ICB9XG5cblx0ICBhc3luYyBfX2N1cnJlbnRSZXNlcnZvaXJfXygpIHtcblx0ICAgIGF3YWl0IHRoaXMueWllbGRMb29wKCk7XG5cdCAgICByZXR1cm4gdGhpcy5zdG9yZU9wdGlvbnMucmVzZXJ2b2lyO1xuXHQgIH1cblxuXHQgIGlzQmxvY2tlZChub3cpIHtcblx0ICAgIHJldHVybiB0aGlzLl91bmJsb2NrVGltZSA+PSBub3c7XG5cdCAgfVxuXG5cdCAgY2hlY2sod2VpZ2h0LCBub3cpIHtcblx0ICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbnNDaGVjayh3ZWlnaHQpICYmICh0aGlzLl9uZXh0UmVxdWVzdCAtIG5vdykgPD0gMDtcblx0ICB9XG5cblx0ICBhc3luYyBfX2NoZWNrX18od2VpZ2h0KSB7XG5cdCAgICB2YXIgbm93O1xuXHQgICAgYXdhaXQgdGhpcy55aWVsZExvb3AoKTtcblx0ICAgIG5vdyA9IERhdGUubm93KCk7XG5cdCAgICByZXR1cm4gdGhpcy5jaGVjayh3ZWlnaHQsIG5vdyk7XG5cdCAgfVxuXG5cdCAgYXN5bmMgX19yZWdpc3Rlcl9fKGluZGV4LCB3ZWlnaHQsIGV4cGlyYXRpb24pIHtcblx0ICAgIHZhciBub3csIHdhaXQ7XG5cdCAgICBhd2FpdCB0aGlzLnlpZWxkTG9vcCgpO1xuXHQgICAgbm93ID0gRGF0ZS5ub3coKTtcblx0ICAgIGlmICh0aGlzLmNvbmRpdGlvbnNDaGVjayh3ZWlnaHQpKSB7XG5cdCAgICAgIHRoaXMuX3J1bm5pbmcgKz0gd2VpZ2h0O1xuXHQgICAgICBpZiAodGhpcy5zdG9yZU9wdGlvbnMucmVzZXJ2b2lyICE9IG51bGwpIHtcblx0ICAgICAgICB0aGlzLnN0b3JlT3B0aW9ucy5yZXNlcnZvaXIgLT0gd2VpZ2h0O1xuXHQgICAgICB9XG5cdCAgICAgIHdhaXQgPSBNYXRoLm1heCh0aGlzLl9uZXh0UmVxdWVzdCAtIG5vdywgMCk7XG5cdCAgICAgIHRoaXMuX25leHRSZXF1ZXN0ID0gbm93ICsgd2FpdCArIHRoaXMuc3RvcmVPcHRpb25zLm1pblRpbWU7XG5cdCAgICAgIHJldHVybiB7XG5cdCAgICAgICAgc3VjY2VzczogdHJ1ZSxcblx0ICAgICAgICB3YWl0LFxuXHQgICAgICAgIHJlc2Vydm9pcjogdGhpcy5zdG9yZU9wdGlvbnMucmVzZXJ2b2lyXG5cdCAgICAgIH07XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICByZXR1cm4ge1xuXHQgICAgICAgIHN1Y2Nlc3M6IGZhbHNlXG5cdCAgICAgIH07XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgc3RyYXRlZ3lJc0Jsb2NrKCkge1xuXHQgICAgcmV0dXJuIHRoaXMuc3RvcmVPcHRpb25zLnN0cmF0ZWd5ID09PSAzO1xuXHQgIH1cblxuXHQgIGFzeW5jIF9fc3VibWl0X18ocXVldWVMZW5ndGgsIHdlaWdodCkge1xuXHQgICAgdmFyIGJsb2NrZWQsIG5vdywgcmVhY2hlZEhXTTtcblx0ICAgIGF3YWl0IHRoaXMueWllbGRMb29wKCk7XG5cdCAgICBpZiAoKHRoaXMuc3RvcmVPcHRpb25zLm1heENvbmN1cnJlbnQgIT0gbnVsbCkgJiYgd2VpZ2h0ID4gdGhpcy5zdG9yZU9wdGlvbnMubWF4Q29uY3VycmVudCkge1xuXHQgICAgICB0aHJvdyBuZXcgQm90dGxlbmVja0Vycm9yJDIoYEltcG9zc2libGUgdG8gYWRkIGEgam9iIGhhdmluZyBhIHdlaWdodCBvZiAke3dlaWdodH0gdG8gYSBsaW1pdGVyIGhhdmluZyBhIG1heENvbmN1cnJlbnQgc2V0dGluZyBvZiAke3RoaXMuc3RvcmVPcHRpb25zLm1heENvbmN1cnJlbnR9YCk7XG5cdCAgICB9XG5cdCAgICBub3cgPSBEYXRlLm5vdygpO1xuXHQgICAgcmVhY2hlZEhXTSA9ICh0aGlzLnN0b3JlT3B0aW9ucy5oaWdoV2F0ZXIgIT0gbnVsbCkgJiYgcXVldWVMZW5ndGggPT09IHRoaXMuc3RvcmVPcHRpb25zLmhpZ2hXYXRlciAmJiAhdGhpcy5jaGVjayh3ZWlnaHQsIG5vdyk7XG5cdCAgICBibG9ja2VkID0gdGhpcy5zdHJhdGVneUlzQmxvY2soKSAmJiAocmVhY2hlZEhXTSB8fCB0aGlzLmlzQmxvY2tlZChub3cpKTtcblx0ICAgIGlmIChibG9ja2VkKSB7XG5cdCAgICAgIHRoaXMuX3VuYmxvY2tUaW1lID0gbm93ICsgdGhpcy5jb21wdXRlUGVuYWx0eSgpO1xuXHQgICAgICB0aGlzLl9uZXh0UmVxdWVzdCA9IHRoaXMuX3VuYmxvY2tUaW1lICsgdGhpcy5zdG9yZU9wdGlvbnMubWluVGltZTtcblx0ICAgICAgdGhpcy5pbnN0YW5jZS5fZHJvcEFsbFF1ZXVlZCgpO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIHtcblx0ICAgICAgcmVhY2hlZEhXTSxcblx0ICAgICAgYmxvY2tlZCxcblx0ICAgICAgc3RyYXRlZ3k6IHRoaXMuc3RvcmVPcHRpb25zLnN0cmF0ZWd5XG5cdCAgICB9O1xuXHQgIH1cblxuXHQgIGFzeW5jIF9fZnJlZV9fKGluZGV4LCB3ZWlnaHQpIHtcblx0ICAgIGF3YWl0IHRoaXMueWllbGRMb29wKCk7XG5cdCAgICB0aGlzLl9ydW5uaW5nIC09IHdlaWdodDtcblx0ICAgIHRoaXMuX2RvbmUgKz0gd2VpZ2h0O1xuXHQgICAgdGhpcy5pbnN0YW5jZS5fZHJhaW5BbGwodGhpcy5jb21wdXRlQ2FwYWNpdHkoKSk7XG5cdCAgICByZXR1cm4ge1xuXHQgICAgICBydW5uaW5nOiB0aGlzLl9ydW5uaW5nXG5cdCAgICB9O1xuXHQgIH1cblxuXHR9O1xuXG5cdHZhciBMb2NhbERhdGFzdG9yZV8xID0gTG9jYWxEYXRhc3RvcmU7XG5cblx0dmFyIEJvdHRsZW5lY2tFcnJvciQzLCBTdGF0ZXM7XG5cblx0Qm90dGxlbmVja0Vycm9yJDMgPSBCb3R0bGVuZWNrRXJyb3JfMTtcblxuXHRTdGF0ZXMgPSBjbGFzcyBTdGF0ZXMge1xuXHQgIGNvbnN0cnVjdG9yKHN0YXR1czEpIHtcblx0ICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzMTtcblx0ICAgIHRoaXMuX2pvYnMgPSB7fTtcblx0ICAgIHRoaXMuY291bnRzID0gdGhpcy5zdGF0dXMubWFwKGZ1bmN0aW9uKCkge1xuXHQgICAgICByZXR1cm4gMDtcblx0ICAgIH0pO1xuXHQgIH1cblxuXHQgIG5leHQoaWQpIHtcblx0ICAgIHZhciBjdXJyZW50LCBuZXh0O1xuXHQgICAgY3VycmVudCA9IHRoaXMuX2pvYnNbaWRdO1xuXHQgICAgbmV4dCA9IGN1cnJlbnQgKyAxO1xuXHQgICAgaWYgKChjdXJyZW50ICE9IG51bGwpICYmIG5leHQgPCB0aGlzLnN0YXR1cy5sZW5ndGgpIHtcblx0ICAgICAgdGhpcy5jb3VudHNbY3VycmVudF0tLTtcblx0ICAgICAgdGhpcy5jb3VudHNbbmV4dF0rKztcblx0ICAgICAgcmV0dXJuIHRoaXMuX2pvYnNbaWRdKys7XG5cdCAgICB9IGVsc2UgaWYgKGN1cnJlbnQgIT0gbnVsbCkge1xuXHQgICAgICB0aGlzLmNvdW50c1tjdXJyZW50XS0tO1xuXHQgICAgICByZXR1cm4gZGVsZXRlIHRoaXMuX2pvYnNbaWRdO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIHN0YXJ0KGlkKSB7XG5cdCAgICB2YXIgaW5pdGlhbDtcblx0ICAgIGluaXRpYWwgPSAwO1xuXHQgICAgdGhpcy5fam9ic1tpZF0gPSBpbml0aWFsO1xuXHQgICAgcmV0dXJuIHRoaXMuY291bnRzW2luaXRpYWxdKys7XG5cdCAgfVxuXG5cdCAgcmVtb3ZlKGlkKSB7XG5cdCAgICB2YXIgY3VycmVudDtcblx0ICAgIGN1cnJlbnQgPSB0aGlzLl9qb2JzW2lkXTtcblx0ICAgIGlmIChjdXJyZW50ICE9IG51bGwpIHtcblx0ICAgICAgdGhpcy5jb3VudHNbY3VycmVudF0tLTtcblx0ICAgICAgZGVsZXRlIHRoaXMuX2pvYnNbaWRdO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIGN1cnJlbnQgIT0gbnVsbDtcblx0ICB9XG5cblx0ICBqb2JTdGF0dXMoaWQpIHtcblx0ICAgIHZhciByZWY7XG5cdCAgICByZXR1cm4gKHJlZiA9IHRoaXMuc3RhdHVzW3RoaXMuX2pvYnNbaWRdXSkgIT0gbnVsbCA/IHJlZiA6IG51bGw7XG5cdCAgfVxuXG5cdCAgc3RhdHVzSm9icyhzdGF0dXMpIHtcblx0ICAgIHZhciBrLCBwb3MsIHJlZiwgcmVzdWx0cywgdjtcblx0ICAgIGlmIChzdGF0dXMgIT0gbnVsbCkge1xuXHQgICAgICBwb3MgPSB0aGlzLnN0YXR1cy5pbmRleE9mKHN0YXR1cyk7XG5cdCAgICAgIGlmIChwb3MgPCAwKSB7XG5cdCAgICAgICAgdGhyb3cgbmV3IEJvdHRsZW5lY2tFcnJvciQzKGBzdGF0dXMgbXVzdCBiZSBvbmUgb2YgJHt0aGlzLnN0YXR1cy5qb2luKCcsICcpfWApO1xuXHQgICAgICB9XG5cdCAgICAgIHJlZiA9IHRoaXMuX2pvYnM7XG5cdCAgICAgIHJlc3VsdHMgPSBbXTtcblx0ICAgICAgZm9yIChrIGluIHJlZikge1xuXHQgICAgICAgIHYgPSByZWZba107XG5cdCAgICAgICAgaWYgKHYgPT09IHBvcykge1xuXHQgICAgICAgICAgcmVzdWx0cy5wdXNoKGspO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgICByZXR1cm4gcmVzdWx0cztcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLl9qb2JzKTtcblx0ICAgIH1cblx0ICB9XG5cblx0ICBzdGF0dXNDb3VudHMoKSB7XG5cdCAgICByZXR1cm4gdGhpcy5jb3VudHMucmVkdWNlKCgoYWNjLCB2LCBpKSA9PiB7XG5cdCAgICAgIGFjY1t0aGlzLnN0YXR1c1tpXV0gPSB2O1xuXHQgICAgICByZXR1cm4gYWNjO1xuXHQgICAgfSksIHt9KTtcblx0ICB9XG5cblx0fTtcblxuXHR2YXIgU3RhdGVzXzEgPSBTdGF0ZXM7XG5cblx0dmFyIERMTGlzdCQyLCBTeW5jO1xuXG5cdERMTGlzdCQyID0gRExMaXN0XzE7XG5cblx0U3luYyA9IGNsYXNzIFN5bmMge1xuXHQgIGNvbnN0cnVjdG9yKG5hbWUsIFByb21pc2UpIHtcblx0ICAgIHRoaXMuc2NoZWR1bGUgPSB0aGlzLnNjaGVkdWxlLmJpbmQodGhpcyk7XG5cdCAgICB0aGlzLm5hbWUgPSBuYW1lO1xuXHQgICAgdGhpcy5Qcm9taXNlID0gUHJvbWlzZTtcblx0ICAgIHRoaXMuX3J1bm5pbmcgPSAwO1xuXHQgICAgdGhpcy5fcXVldWUgPSBuZXcgRExMaXN0JDIoKTtcblx0ICB9XG5cblx0ICBpc0VtcHR5KCkge1xuXHQgICAgcmV0dXJuIHRoaXMuX3F1ZXVlLmxlbmd0aCA9PT0gMDtcblx0ICB9XG5cblx0ICBhc3luYyBfdHJ5VG9SdW4oKSB7XG5cdCAgICB2YXIgYXJncywgY2IsIGVycm9yLCByZWplY3QsIHJlc29sdmUsIHJldHVybmVkLCB0YXNrO1xuXHQgICAgaWYgKCh0aGlzLl9ydW5uaW5nIDwgMSkgJiYgdGhpcy5fcXVldWUubGVuZ3RoID4gMCkge1xuXHQgICAgICB0aGlzLl9ydW5uaW5nKys7XG5cdCAgICAgICh7dGFzaywgYXJncywgcmVzb2x2ZSwgcmVqZWN0fSA9IHRoaXMuX3F1ZXVlLnNoaWZ0KCkpO1xuXHQgICAgICBjYiA9IChhd2FpdCAoYXN5bmMgZnVuY3Rpb24oKSB7XG5cdCAgICAgICAgdHJ5IHtcblx0ICAgICAgICAgIHJldHVybmVkID0gKGF3YWl0IHRhc2soLi4uYXJncykpO1xuXHQgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShyZXR1cm5lZCk7XG5cdCAgICAgICAgICB9O1xuXHQgICAgICAgIH0gY2F0Y2ggKGVycm9yMSkge1xuXHQgICAgICAgICAgZXJyb3IgPSBlcnJvcjE7XG5cdCAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG5cdCAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyb3IpO1xuXHQgICAgICAgICAgfTtcblx0ICAgICAgICB9XG5cdCAgICAgIH0pKCkpO1xuXHQgICAgICB0aGlzLl9ydW5uaW5nLS07XG5cdCAgICAgIHRoaXMuX3RyeVRvUnVuKCk7XG5cdCAgICAgIHJldHVybiBjYigpO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIHNjaGVkdWxlKHRhc2ssIC4uLmFyZ3MpIHtcblx0ICAgIHZhciBwcm9taXNlLCByZWplY3QsIHJlc29sdmU7XG5cdCAgICByZXNvbHZlID0gcmVqZWN0ID0gbnVsbDtcblx0ICAgIHByb21pc2UgPSBuZXcgdGhpcy5Qcm9taXNlKGZ1bmN0aW9uKF9yZXNvbHZlLCBfcmVqZWN0KSB7XG5cdCAgICAgIHJlc29sdmUgPSBfcmVzb2x2ZTtcblx0ICAgICAgcmV0dXJuIHJlamVjdCA9IF9yZWplY3Q7XG5cdCAgICB9KTtcblx0ICAgIHRoaXMuX3F1ZXVlLnB1c2goe3Rhc2ssIGFyZ3MsIHJlc29sdmUsIHJlamVjdH0pO1xuXHQgICAgdGhpcy5fdHJ5VG9SdW4oKTtcblx0ICAgIHJldHVybiBwcm9taXNlO1xuXHQgIH1cblxuXHR9O1xuXG5cdHZhciBTeW5jXzEgPSBTeW5jO1xuXG5cdHZhciB2ZXJzaW9uID0gXCIyLjE5LjVcIjtcblx0dmFyIHZlcnNpb24kMSA9IHtcblx0XHR2ZXJzaW9uOiB2ZXJzaW9uXG5cdH07XG5cblx0dmFyIHZlcnNpb24kMiA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcblx0XHR2ZXJzaW9uOiB2ZXJzaW9uLFxuXHRcdGRlZmF1bHQ6IHZlcnNpb24kMVxuXHR9KTtcblxuXHR2YXIgcmVxdWlyZSQkMiA9ICgpID0+IGNvbnNvbGUubG9nKCdZb3UgbXVzdCBpbXBvcnQgdGhlIGZ1bGwgdmVyc2lvbiBvZiBCb3R0bGVuZWNrIGluIG9yZGVyIHRvIHVzZSB0aGlzIGZlYXR1cmUuJyk7XG5cblx0dmFyIHJlcXVpcmUkJDMgPSAoKSA9PiBjb25zb2xlLmxvZygnWW91IG11c3QgaW1wb3J0IHRoZSBmdWxsIHZlcnNpb24gb2YgQm90dGxlbmVjayBpbiBvcmRlciB0byB1c2UgdGhpcyBmZWF0dXJlLicpO1xuXG5cdHZhciByZXF1aXJlJCQ0ID0gKCkgPT4gY29uc29sZS5sb2coJ1lvdSBtdXN0IGltcG9ydCB0aGUgZnVsbCB2ZXJzaW9uIG9mIEJvdHRsZW5lY2sgaW4gb3JkZXIgdG8gdXNlIHRoaXMgZmVhdHVyZS4nKTtcblxuXHR2YXIgRXZlbnRzJDIsIEdyb3VwLCBJT1JlZGlzQ29ubmVjdGlvbiQxLCBSZWRpc0Nvbm5lY3Rpb24kMSwgU2NyaXB0cyQxLCBwYXJzZXIkMztcblxuXHRwYXJzZXIkMyA9IHBhcnNlcjtcblxuXHRFdmVudHMkMiA9IEV2ZW50c18xO1xuXG5cdFJlZGlzQ29ubmVjdGlvbiQxID0gcmVxdWlyZSQkMjtcblxuXHRJT1JlZGlzQ29ubmVjdGlvbiQxID0gcmVxdWlyZSQkMztcblxuXHRTY3JpcHRzJDEgPSByZXF1aXJlJCQ0O1xuXG5cdEdyb3VwID0gKGZ1bmN0aW9uKCkge1xuXHQgIGNsYXNzIEdyb3VwIHtcblx0ICAgIGNvbnN0cnVjdG9yKGxpbWl0ZXJPcHRpb25zID0ge30pIHtcblx0ICAgICAgdGhpcy5kZWxldGVLZXkgPSB0aGlzLmRlbGV0ZUtleS5iaW5kKHRoaXMpO1xuXHQgICAgICB0aGlzLmxpbWl0ZXJPcHRpb25zID0gbGltaXRlck9wdGlvbnM7XG5cdCAgICAgIHBhcnNlciQzLmxvYWQodGhpcy5saW1pdGVyT3B0aW9ucywgdGhpcy5kZWZhdWx0cywgdGhpcyk7XG5cdCAgICAgIHRoaXMuRXZlbnRzID0gbmV3IEV2ZW50cyQyKHRoaXMpO1xuXHQgICAgICB0aGlzLmluc3RhbmNlcyA9IHt9O1xuXHQgICAgICB0aGlzLkJvdHRsZW5lY2sgPSBCb3R0bGVuZWNrXzE7XG5cdCAgICAgIHRoaXMuX3N0YXJ0QXV0b0NsZWFudXAoKTtcblx0ICAgICAgdGhpcy5zaGFyZWRDb25uZWN0aW9uID0gdGhpcy5jb25uZWN0aW9uICE9IG51bGw7XG5cdCAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb24gPT0gbnVsbCkge1xuXHQgICAgICAgIGlmICh0aGlzLmxpbWl0ZXJPcHRpb25zLmRhdGFzdG9yZSA9PT0gXCJyZWRpc1wiKSB7XG5cdCAgICAgICAgICB0aGlzLmNvbm5lY3Rpb24gPSBuZXcgUmVkaXNDb25uZWN0aW9uJDEoT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5saW1pdGVyT3B0aW9ucywge0V2ZW50czogdGhpcy5FdmVudHN9KSk7XG5cdCAgICAgICAgfSBlbHNlIGlmICh0aGlzLmxpbWl0ZXJPcHRpb25zLmRhdGFzdG9yZSA9PT0gXCJpb3JlZGlzXCIpIHtcblx0ICAgICAgICAgIHRoaXMuY29ubmVjdGlvbiA9IG5ldyBJT1JlZGlzQ29ubmVjdGlvbiQxKE9iamVjdC5hc3NpZ24oe30sIHRoaXMubGltaXRlck9wdGlvbnMsIHtFdmVudHM6IHRoaXMuRXZlbnRzfSkpO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfVxuXG5cdCAgICBrZXkoa2V5ID0gXCJcIikge1xuXHQgICAgICB2YXIgcmVmO1xuXHQgICAgICByZXR1cm4gKHJlZiA9IHRoaXMuaW5zdGFuY2VzW2tleV0pICE9IG51bGwgPyByZWYgOiAoKCkgPT4ge1xuXHQgICAgICAgIHZhciBsaW1pdGVyO1xuXHQgICAgICAgIGxpbWl0ZXIgPSB0aGlzLmluc3RhbmNlc1trZXldID0gbmV3IHRoaXMuQm90dGxlbmVjayhPYmplY3QuYXNzaWduKHRoaXMubGltaXRlck9wdGlvbnMsIHtcblx0ICAgICAgICAgIGlkOiBgJHt0aGlzLmlkfS0ke2tleX1gLFxuXHQgICAgICAgICAgdGltZW91dDogdGhpcy50aW1lb3V0LFxuXHQgICAgICAgICAgY29ubmVjdGlvbjogdGhpcy5jb25uZWN0aW9uXG5cdCAgICAgICAgfSkpO1xuXHQgICAgICAgIHRoaXMuRXZlbnRzLnRyaWdnZXIoXCJjcmVhdGVkXCIsIGxpbWl0ZXIsIGtleSk7XG5cdCAgICAgICAgcmV0dXJuIGxpbWl0ZXI7XG5cdCAgICAgIH0pKCk7XG5cdCAgICB9XG5cblx0ICAgIGFzeW5jIGRlbGV0ZUtleShrZXkgPSBcIlwiKSB7XG5cdCAgICAgIHZhciBkZWxldGVkLCBpbnN0YW5jZTtcblx0ICAgICAgaW5zdGFuY2UgPSB0aGlzLmluc3RhbmNlc1trZXldO1xuXHQgICAgICBpZiAodGhpcy5jb25uZWN0aW9uKSB7XG5cdCAgICAgICAgZGVsZXRlZCA9IChhd2FpdCB0aGlzLmNvbm5lY3Rpb24uX19ydW5Db21tYW5kX18oWydkZWwnLCAuLi5TY3JpcHRzJDEuYWxsS2V5cyhgJHt0aGlzLmlkfS0ke2tleX1gKV0pKTtcblx0ICAgICAgfVxuXHQgICAgICBpZiAoaW5zdGFuY2UgIT0gbnVsbCkge1xuXHQgICAgICAgIGRlbGV0ZSB0aGlzLmluc3RhbmNlc1trZXldO1xuXHQgICAgICAgIGF3YWl0IGluc3RhbmNlLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgfVxuXHQgICAgICByZXR1cm4gKGluc3RhbmNlICE9IG51bGwpIHx8IGRlbGV0ZWQgPiAwO1xuXHQgICAgfVxuXG5cdCAgICBsaW1pdGVycygpIHtcblx0ICAgICAgdmFyIGssIHJlZiwgcmVzdWx0cywgdjtcblx0ICAgICAgcmVmID0gdGhpcy5pbnN0YW5jZXM7XG5cdCAgICAgIHJlc3VsdHMgPSBbXTtcblx0ICAgICAgZm9yIChrIGluIHJlZikge1xuXHQgICAgICAgIHYgPSByZWZba107XG5cdCAgICAgICAgcmVzdWx0cy5wdXNoKHtcblx0ICAgICAgICAgIGtleTogayxcblx0ICAgICAgICAgIGxpbWl0ZXI6IHZcblx0ICAgICAgICB9KTtcblx0ICAgICAgfVxuXHQgICAgICByZXR1cm4gcmVzdWx0cztcblx0ICAgIH1cblxuXHQgICAga2V5cygpIHtcblx0ICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuaW5zdGFuY2VzKTtcblx0ICAgIH1cblxuXHQgICAgYXN5bmMgY2x1c3RlcktleXMoKSB7XG5cdCAgICAgIHZhciBjdXJzb3IsIGVuZCwgZm91bmQsIGksIGssIGtleXMsIGxlbiwgbmV4dCwgc3RhcnQ7XG5cdCAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb24gPT0gbnVsbCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLlByb21pc2UucmVzb2x2ZSh0aGlzLmtleXMoKSk7XG5cdCAgICAgIH1cblx0ICAgICAga2V5cyA9IFtdO1xuXHQgICAgICBjdXJzb3IgPSBudWxsO1xuXHQgICAgICBzdGFydCA9IGBiXyR7dGhpcy5pZH0tYC5sZW5ndGg7XG5cdCAgICAgIGVuZCA9IFwiX3NldHRpbmdzXCIubGVuZ3RoO1xuXHQgICAgICB3aGlsZSAoY3Vyc29yICE9PSAwKSB7XG5cdCAgICAgICAgW25leHQsIGZvdW5kXSA9IChhd2FpdCB0aGlzLmNvbm5lY3Rpb24uX19ydW5Db21tYW5kX18oW1wic2NhblwiLCBjdXJzb3IgIT0gbnVsbCA/IGN1cnNvciA6IDAsIFwibWF0Y2hcIiwgYGJfJHt0aGlzLmlkfS0qX3NldHRpbmdzYCwgXCJjb3VudFwiLCAxMDAwMF0pKTtcblx0ICAgICAgICBjdXJzb3IgPSB+fm5leHQ7XG5cdCAgICAgICAgZm9yIChpID0gMCwgbGVuID0gZm91bmQubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcblx0ICAgICAgICAgIGsgPSBmb3VuZFtpXTtcblx0ICAgICAgICAgIGtleXMucHVzaChrLnNsaWNlKHN0YXJ0LCAtZW5kKSk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICAgIHJldHVybiBrZXlzO1xuXHQgICAgfVxuXG5cdCAgICBfc3RhcnRBdXRvQ2xlYW51cCgpIHtcblx0ICAgICAgdmFyIGJhc2U7XG5cdCAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbCk7XG5cdCAgICAgIHJldHVybiB0eXBlb2YgKGJhc2UgPSAodGhpcy5pbnRlcnZhbCA9IHNldEludGVydmFsKGFzeW5jKCkgPT4ge1xuXHQgICAgICAgIHZhciBlLCBrLCByZWYsIHJlc3VsdHMsIHRpbWUsIHY7XG5cdCAgICAgICAgdGltZSA9IERhdGUubm93KCk7XG5cdCAgICAgICAgcmVmID0gdGhpcy5pbnN0YW5jZXM7XG5cdCAgICAgICAgcmVzdWx0cyA9IFtdO1xuXHQgICAgICAgIGZvciAoayBpbiByZWYpIHtcblx0ICAgICAgICAgIHYgPSByZWZba107XG5cdCAgICAgICAgICB0cnkge1xuXHQgICAgICAgICAgICBpZiAoKGF3YWl0IHYuX3N0b3JlLl9fZ3JvdXBDaGVja19fKHRpbWUpKSkge1xuXHQgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh0aGlzLmRlbGV0ZUtleShrKSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHZvaWQgMCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG5cdCAgICAgICAgICAgIGUgPSBlcnJvcjtcblx0ICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHYuRXZlbnRzLnRyaWdnZXIoXCJlcnJvclwiLCBlKSk7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiByZXN1bHRzO1xuXHQgICAgICB9LCB0aGlzLnRpbWVvdXQgLyAyKSkpLnVucmVmID09PSBcImZ1bmN0aW9uXCIgPyBiYXNlLnVucmVmKCkgOiB2b2lkIDA7XG5cdCAgICB9XG5cblx0ICAgIHVwZGF0ZVNldHRpbmdzKG9wdGlvbnMgPSB7fSkge1xuXHQgICAgICBwYXJzZXIkMy5vdmVyd3JpdGUob3B0aW9ucywgdGhpcy5kZWZhdWx0cywgdGhpcyk7XG5cdCAgICAgIHBhcnNlciQzLm92ZXJ3cml0ZShvcHRpb25zLCBvcHRpb25zLCB0aGlzLmxpbWl0ZXJPcHRpb25zKTtcblx0ICAgICAgaWYgKG9wdGlvbnMudGltZW91dCAhPSBudWxsKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXJ0QXV0b0NsZWFudXAoKTtcblx0ICAgICAgfVxuXHQgICAgfVxuXG5cdCAgICBkaXNjb25uZWN0KGZsdXNoID0gdHJ1ZSkge1xuXHQgICAgICB2YXIgcmVmO1xuXHQgICAgICBpZiAoIXRoaXMuc2hhcmVkQ29ubmVjdGlvbikge1xuXHQgICAgICAgIHJldHVybiAocmVmID0gdGhpcy5jb25uZWN0aW9uKSAhPSBudWxsID8gcmVmLmRpc2Nvbm5lY3QoZmx1c2gpIDogdm9pZCAwO1xuXHQgICAgICB9XG5cdCAgICB9XG5cblx0ICB9XG5cdCAgR3JvdXAucHJvdG90eXBlLmRlZmF1bHRzID0ge1xuXHQgICAgdGltZW91dDogMTAwMCAqIDYwICogNSxcblx0ICAgIGNvbm5lY3Rpb246IG51bGwsXG5cdCAgICBQcm9taXNlOiBQcm9taXNlLFxuXHQgICAgaWQ6IFwiZ3JvdXAta2V5XCJcblx0ICB9O1xuXG5cdCAgcmV0dXJuIEdyb3VwO1xuXG5cdH0pLmNhbGwoY29tbW9uanNHbG9iYWwpO1xuXG5cdHZhciBHcm91cF8xID0gR3JvdXA7XG5cblx0dmFyIEJhdGNoZXIsIEV2ZW50cyQzLCBwYXJzZXIkNDtcblxuXHRwYXJzZXIkNCA9IHBhcnNlcjtcblxuXHRFdmVudHMkMyA9IEV2ZW50c18xO1xuXG5cdEJhdGNoZXIgPSAoZnVuY3Rpb24oKSB7XG5cdCAgY2xhc3MgQmF0Y2hlciB7XG5cdCAgICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcblx0ICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcblx0ICAgICAgcGFyc2VyJDQubG9hZCh0aGlzLm9wdGlvbnMsIHRoaXMuZGVmYXVsdHMsIHRoaXMpO1xuXHQgICAgICB0aGlzLkV2ZW50cyA9IG5ldyBFdmVudHMkMyh0aGlzKTtcblx0ICAgICAgdGhpcy5fYXJyID0gW107XG5cdCAgICAgIHRoaXMuX3Jlc2V0UHJvbWlzZSgpO1xuXHQgICAgICB0aGlzLl9sYXN0Rmx1c2ggPSBEYXRlLm5vdygpO1xuXHQgICAgfVxuXG5cdCAgICBfcmVzZXRQcm9taXNlKCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fcHJvbWlzZSA9IG5ldyB0aGlzLlByb21pc2UoKHJlcywgcmVqKSA9PiB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc29sdmUgPSByZXM7XG5cdCAgICAgIH0pO1xuXHQgICAgfVxuXG5cdCAgICBfZmx1c2goKSB7XG5cdCAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KTtcblx0ICAgICAgdGhpcy5fbGFzdEZsdXNoID0gRGF0ZS5ub3coKTtcblx0ICAgICAgdGhpcy5fcmVzb2x2ZSgpO1xuXHQgICAgICB0aGlzLkV2ZW50cy50cmlnZ2VyKFwiYmF0Y2hcIiwgdGhpcy5fYXJyKTtcblx0ICAgICAgdGhpcy5fYXJyID0gW107XG5cdCAgICAgIHJldHVybiB0aGlzLl9yZXNldFByb21pc2UoKTtcblx0ICAgIH1cblxuXHQgICAgYWRkKGRhdGEpIHtcblx0ICAgICAgdmFyIHJldDtcblx0ICAgICAgdGhpcy5fYXJyLnB1c2goZGF0YSk7XG5cdCAgICAgIHJldCA9IHRoaXMuX3Byb21pc2U7XG5cdCAgICAgIGlmICh0aGlzLl9hcnIubGVuZ3RoID09PSB0aGlzLm1heFNpemUpIHtcblx0ICAgICAgICB0aGlzLl9mbHVzaCgpO1xuXHQgICAgICB9IGVsc2UgaWYgKCh0aGlzLm1heFRpbWUgIT0gbnVsbCkgJiYgdGhpcy5fYXJyLmxlbmd0aCA9PT0gMSkge1xuXHQgICAgICAgIHRoaXMuX3RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcblx0ICAgICAgICAgIHJldHVybiB0aGlzLl9mbHVzaCgpO1xuXHQgICAgICAgIH0sIHRoaXMubWF4VGltZSk7XG5cdCAgICAgIH1cblx0ICAgICAgcmV0dXJuIHJldDtcblx0ICAgIH1cblxuXHQgIH1cblx0ICBCYXRjaGVyLnByb3RvdHlwZS5kZWZhdWx0cyA9IHtcblx0ICAgIG1heFRpbWU6IG51bGwsXG5cdCAgICBtYXhTaXplOiBudWxsLFxuXHQgICAgUHJvbWlzZTogUHJvbWlzZVxuXHQgIH07XG5cblx0ICByZXR1cm4gQmF0Y2hlcjtcblxuXHR9KS5jYWxsKGNvbW1vbmpzR2xvYmFsKTtcblxuXHR2YXIgQmF0Y2hlcl8xID0gQmF0Y2hlcjtcblxuXHR2YXIgcmVxdWlyZSQkNCQxID0gKCkgPT4gY29uc29sZS5sb2coJ1lvdSBtdXN0IGltcG9ydCB0aGUgZnVsbCB2ZXJzaW9uIG9mIEJvdHRsZW5lY2sgaW4gb3JkZXIgdG8gdXNlIHRoaXMgZmVhdHVyZS4nKTtcblxuXHR2YXIgcmVxdWlyZSQkOCA9IGdldENqc0V4cG9ydEZyb21OYW1lc3BhY2UodmVyc2lvbiQyKTtcblxuXHR2YXIgQm90dGxlbmVjaywgREVGQVVMVF9QUklPUklUWSQxLCBFdmVudHMkNCwgSm9iJDEsIExvY2FsRGF0YXN0b3JlJDEsIE5VTV9QUklPUklUSUVTJDEsIFF1ZXVlcyQxLCBSZWRpc0RhdGFzdG9yZSQxLCBTdGF0ZXMkMSwgU3luYyQxLCBwYXJzZXIkNSxcblx0ICBzcGxpY2UgPSBbXS5zcGxpY2U7XG5cblx0TlVNX1BSSU9SSVRJRVMkMSA9IDEwO1xuXG5cdERFRkFVTFRfUFJJT1JJVFkkMSA9IDU7XG5cblx0cGFyc2VyJDUgPSBwYXJzZXI7XG5cblx0UXVldWVzJDEgPSBRdWV1ZXNfMTtcblxuXHRKb2IkMSA9IEpvYl8xO1xuXG5cdExvY2FsRGF0YXN0b3JlJDEgPSBMb2NhbERhdGFzdG9yZV8xO1xuXG5cdFJlZGlzRGF0YXN0b3JlJDEgPSByZXF1aXJlJCQ0JDE7XG5cblx0RXZlbnRzJDQgPSBFdmVudHNfMTtcblxuXHRTdGF0ZXMkMSA9IFN0YXRlc18xO1xuXG5cdFN5bmMkMSA9IFN5bmNfMTtcblxuXHRCb3R0bGVuZWNrID0gKGZ1bmN0aW9uKCkge1xuXHQgIGNsYXNzIEJvdHRsZW5lY2sge1xuXHQgICAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9LCAuLi5pbnZhbGlkKSB7XG5cdCAgICAgIHZhciBzdG9yZUluc3RhbmNlT3B0aW9ucywgc3RvcmVPcHRpb25zO1xuXHQgICAgICB0aGlzLl9hZGRUb1F1ZXVlID0gdGhpcy5fYWRkVG9RdWV1ZS5iaW5kKHRoaXMpO1xuXHQgICAgICB0aGlzLl92YWxpZGF0ZU9wdGlvbnMob3B0aW9ucywgaW52YWxpZCk7XG5cdCAgICAgIHBhcnNlciQ1LmxvYWQob3B0aW9ucywgdGhpcy5pbnN0YW5jZURlZmF1bHRzLCB0aGlzKTtcblx0ICAgICAgdGhpcy5fcXVldWVzID0gbmV3IFF1ZXVlcyQxKE5VTV9QUklPUklUSUVTJDEpO1xuXHQgICAgICB0aGlzLl9zY2hlZHVsZWQgPSB7fTtcblx0ICAgICAgdGhpcy5fc3RhdGVzID0gbmV3IFN0YXRlcyQxKFtcIlJFQ0VJVkVEXCIsIFwiUVVFVUVEXCIsIFwiUlVOTklOR1wiLCBcIkVYRUNVVElOR1wiXS5jb25jYXQodGhpcy50cmFja0RvbmVTdGF0dXMgPyBbXCJET05FXCJdIDogW10pKTtcblx0ICAgICAgdGhpcy5fbGltaXRlciA9IG51bGw7XG5cdCAgICAgIHRoaXMuRXZlbnRzID0gbmV3IEV2ZW50cyQ0KHRoaXMpO1xuXHQgICAgICB0aGlzLl9zdWJtaXRMb2NrID0gbmV3IFN5bmMkMShcInN1Ym1pdFwiLCB0aGlzLlByb21pc2UpO1xuXHQgICAgICB0aGlzLl9yZWdpc3RlckxvY2sgPSBuZXcgU3luYyQxKFwicmVnaXN0ZXJcIiwgdGhpcy5Qcm9taXNlKTtcblx0ICAgICAgc3RvcmVPcHRpb25zID0gcGFyc2VyJDUubG9hZChvcHRpb25zLCB0aGlzLnN0b3JlRGVmYXVsdHMsIHt9KTtcblx0ICAgICAgdGhpcy5fc3RvcmUgPSAoZnVuY3Rpb24oKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuZGF0YXN0b3JlID09PSBcInJlZGlzXCIgfHwgdGhpcy5kYXRhc3RvcmUgPT09IFwiaW9yZWRpc1wiIHx8ICh0aGlzLmNvbm5lY3Rpb24gIT0gbnVsbCkpIHtcblx0ICAgICAgICAgIHN0b3JlSW5zdGFuY2VPcHRpb25zID0gcGFyc2VyJDUubG9hZChvcHRpb25zLCB0aGlzLnJlZGlzU3RvcmVEZWZhdWx0cywge30pO1xuXHQgICAgICAgICAgcmV0dXJuIG5ldyBSZWRpc0RhdGFzdG9yZSQxKHRoaXMsIHN0b3JlT3B0aW9ucywgc3RvcmVJbnN0YW5jZU9wdGlvbnMpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kYXRhc3RvcmUgPT09IFwibG9jYWxcIikge1xuXHQgICAgICAgICAgc3RvcmVJbnN0YW5jZU9wdGlvbnMgPSBwYXJzZXIkNS5sb2FkKG9wdGlvbnMsIHRoaXMubG9jYWxTdG9yZURlZmF1bHRzLCB7fSk7XG5cdCAgICAgICAgICByZXR1cm4gbmV3IExvY2FsRGF0YXN0b3JlJDEodGhpcywgc3RvcmVPcHRpb25zLCBzdG9yZUluc3RhbmNlT3B0aW9ucyk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIHRocm93IG5ldyBCb3R0bGVuZWNrLnByb3RvdHlwZS5Cb3R0bGVuZWNrRXJyb3IoYEludmFsaWQgZGF0YXN0b3JlIHR5cGU6ICR7dGhpcy5kYXRhc3RvcmV9YCk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9KS5jYWxsKHRoaXMpO1xuXHQgICAgICB0aGlzLl9xdWV1ZXMub24oXCJsZWZ0emVyb1wiLCAoKSA9PiB7XG5cdCAgICAgICAgdmFyIHJlZjtcblx0ICAgICAgICByZXR1cm4gKHJlZiA9IHRoaXMuX3N0b3JlLmhlYXJ0YmVhdCkgIT0gbnVsbCA/IHR5cGVvZiByZWYucmVmID09PSBcImZ1bmN0aW9uXCIgPyByZWYucmVmKCkgOiB2b2lkIDAgOiB2b2lkIDA7XG5cdCAgICAgIH0pO1xuXHQgICAgICB0aGlzLl9xdWV1ZXMub24oXCJ6ZXJvXCIsICgpID0+IHtcblx0ICAgICAgICB2YXIgcmVmO1xuXHQgICAgICAgIHJldHVybiAocmVmID0gdGhpcy5fc3RvcmUuaGVhcnRiZWF0KSAhPSBudWxsID8gdHlwZW9mIHJlZi51bnJlZiA9PT0gXCJmdW5jdGlvblwiID8gcmVmLnVucmVmKCkgOiB2b2lkIDAgOiB2b2lkIDA7XG5cdCAgICAgIH0pO1xuXHQgICAgfVxuXG5cdCAgICBfdmFsaWRhdGVPcHRpb25zKG9wdGlvbnMsIGludmFsaWQpIHtcblx0ICAgICAgaWYgKCEoKG9wdGlvbnMgIT0gbnVsbCkgJiYgdHlwZW9mIG9wdGlvbnMgPT09IFwib2JqZWN0XCIgJiYgaW52YWxpZC5sZW5ndGggPT09IDApKSB7XG5cdCAgICAgICAgdGhyb3cgbmV3IEJvdHRsZW5lY2sucHJvdG90eXBlLkJvdHRsZW5lY2tFcnJvcihcIkJvdHRsZW5lY2sgdjIgdGFrZXMgYSBzaW5nbGUgb2JqZWN0IGFyZ3VtZW50LiBSZWZlciB0byBodHRwczovL2dpdGh1Yi5jb20vU0dyb25kaW4vYm90dGxlbmVjayN1cGdyYWRpbmctdG8tdjIgaWYgeW91J3JlIHVwZ3JhZGluZyBmcm9tIEJvdHRsZW5lY2sgdjEuXCIpO1xuXHQgICAgICB9XG5cdCAgICB9XG5cblx0ICAgIHJlYWR5KCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fc3RvcmUucmVhZHk7XG5cdCAgICB9XG5cblx0ICAgIGNsaWVudHMoKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLl9zdG9yZS5jbGllbnRzO1xuXHQgICAgfVxuXG5cdCAgICBjaGFubmVsKCkge1xuXHQgICAgICByZXR1cm4gYGJfJHt0aGlzLmlkfWA7XG5cdCAgICB9XG5cblx0ICAgIGNoYW5uZWxfY2xpZW50KCkge1xuXHQgICAgICByZXR1cm4gYGJfJHt0aGlzLmlkfV8ke3RoaXMuX3N0b3JlLmNsaWVudElkfWA7XG5cdCAgICB9XG5cblx0ICAgIHB1Ymxpc2gobWVzc2FnZSkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fc3RvcmUuX19wdWJsaXNoX18obWVzc2FnZSk7XG5cdCAgICB9XG5cblx0ICAgIGRpc2Nvbm5lY3QoZmx1c2ggPSB0cnVlKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLl9zdG9yZS5fX2Rpc2Nvbm5lY3RfXyhmbHVzaCk7XG5cdCAgICB9XG5cblx0ICAgIGNoYWluKF9saW1pdGVyKSB7XG5cdCAgICAgIHRoaXMuX2xpbWl0ZXIgPSBfbGltaXRlcjtcblx0ICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9XG5cblx0ICAgIHF1ZXVlZChwcmlvcml0eSkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fcXVldWVzLnF1ZXVlZChwcmlvcml0eSk7XG5cdCAgICB9XG5cblx0ICAgIGNsdXN0ZXJRdWV1ZWQoKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLl9zdG9yZS5fX3F1ZXVlZF9fKCk7XG5cdCAgICB9XG5cblx0ICAgIGVtcHR5KCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5xdWV1ZWQoKSA9PT0gMCAmJiB0aGlzLl9zdWJtaXRMb2NrLmlzRW1wdHkoKTtcblx0ICAgIH1cblxuXHQgICAgcnVubmluZygpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX3N0b3JlLl9fcnVubmluZ19fKCk7XG5cdCAgICB9XG5cblx0ICAgIGRvbmUoKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLl9zdG9yZS5fX2RvbmVfXygpO1xuXHQgICAgfVxuXG5cdCAgICBqb2JTdGF0dXMoaWQpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlcy5qb2JTdGF0dXMoaWQpO1xuXHQgICAgfVxuXG5cdCAgICBqb2JzKHN0YXR1cykge1xuXHQgICAgICByZXR1cm4gdGhpcy5fc3RhdGVzLnN0YXR1c0pvYnMoc3RhdHVzKTtcblx0ICAgIH1cblxuXHQgICAgY291bnRzKCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fc3RhdGVzLnN0YXR1c0NvdW50cygpO1xuXHQgICAgfVxuXG5cdCAgICBfcmFuZG9tSW5kZXgoKSB7XG5cdCAgICAgIHJldHVybiBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyKTtcblx0ICAgIH1cblxuXHQgICAgY2hlY2sod2VpZ2h0ID0gMSkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fc3RvcmUuX19jaGVja19fKHdlaWdodCk7XG5cdCAgICB9XG5cblx0ICAgIF9jbGVhckdsb2JhbFN0YXRlKGluZGV4KSB7XG5cdCAgICAgIGlmICh0aGlzLl9zY2hlZHVsZWRbaW5kZXhdICE9IG51bGwpIHtcblx0ICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fc2NoZWR1bGVkW2luZGV4XS5leHBpcmF0aW9uKTtcblx0ICAgICAgICBkZWxldGUgdGhpcy5fc2NoZWR1bGVkW2luZGV4XTtcblx0ICAgICAgICByZXR1cm4gdHJ1ZTtcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICByZXR1cm4gZmFsc2U7XG5cdCAgICAgIH1cblx0ICAgIH1cblxuXHQgICAgYXN5bmMgX2ZyZWUoaW5kZXgsIGpvYiwgb3B0aW9ucywgZXZlbnRJbmZvKSB7XG5cdCAgICAgIHZhciBlLCBydW5uaW5nO1xuXHQgICAgICB0cnkge1xuXHQgICAgICAgICh7cnVubmluZ30gPSAoYXdhaXQgdGhpcy5fc3RvcmUuX19mcmVlX18oaW5kZXgsIG9wdGlvbnMud2VpZ2h0KSkpO1xuXHQgICAgICAgIHRoaXMuRXZlbnRzLnRyaWdnZXIoXCJkZWJ1Z1wiLCBgRnJlZWQgJHtvcHRpb25zLmlkfWAsIGV2ZW50SW5mbyk7XG5cdCAgICAgICAgaWYgKHJ1bm5pbmcgPT09IDAgJiYgdGhpcy5lbXB0eSgpKSB7XG5cdCAgICAgICAgICByZXR1cm4gdGhpcy5FdmVudHMudHJpZ2dlcihcImlkbGVcIik7XG5cdCAgICAgICAgfVxuXHQgICAgICB9IGNhdGNoIChlcnJvcjEpIHtcblx0ICAgICAgICBlID0gZXJyb3IxO1xuXHQgICAgICAgIHJldHVybiB0aGlzLkV2ZW50cy50cmlnZ2VyKFwiZXJyb3JcIiwgZSk7XG5cdCAgICAgIH1cblx0ICAgIH1cblxuXHQgICAgX3J1bihpbmRleCwgam9iLCB3YWl0KSB7XG5cdCAgICAgIHZhciBjbGVhckdsb2JhbFN0YXRlLCBmcmVlLCBydW47XG5cdCAgICAgIGpvYi5kb1J1bigpO1xuXHQgICAgICBjbGVhckdsb2JhbFN0YXRlID0gdGhpcy5fY2xlYXJHbG9iYWxTdGF0ZS5iaW5kKHRoaXMsIGluZGV4KTtcblx0ICAgICAgcnVuID0gdGhpcy5fcnVuLmJpbmQodGhpcywgaW5kZXgsIGpvYik7XG5cdCAgICAgIGZyZWUgPSB0aGlzLl9mcmVlLmJpbmQodGhpcywgaW5kZXgsIGpvYik7XG5cdCAgICAgIHJldHVybiB0aGlzLl9zY2hlZHVsZWRbaW5kZXhdID0ge1xuXHQgICAgICAgIHRpbWVvdXQ6IHNldFRpbWVvdXQoKCkgPT4ge1xuXHQgICAgICAgICAgcmV0dXJuIGpvYi5kb0V4ZWN1dGUodGhpcy5fbGltaXRlciwgY2xlYXJHbG9iYWxTdGF0ZSwgcnVuLCBmcmVlKTtcblx0ICAgICAgICB9LCB3YWl0KSxcblx0ICAgICAgICBleHBpcmF0aW9uOiBqb2Iub3B0aW9ucy5leHBpcmF0aW9uICE9IG51bGwgPyBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuXHQgICAgICAgICAgcmV0dXJuIGpvYi5kb0V4cGlyZShjbGVhckdsb2JhbFN0YXRlLCBydW4sIGZyZWUpO1xuXHQgICAgICAgIH0sIHdhaXQgKyBqb2Iub3B0aW9ucy5leHBpcmF0aW9uKSA6IHZvaWQgMCxcblx0ICAgICAgICBqb2I6IGpvYlxuXHQgICAgICB9O1xuXHQgICAgfVxuXG5cdCAgICBfZHJhaW5PbmUoY2FwYWNpdHkpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX3JlZ2lzdGVyTG9jay5zY2hlZHVsZSgoKSA9PiB7XG5cdCAgICAgICAgdmFyIGFyZ3MsIGluZGV4LCBuZXh0LCBvcHRpb25zLCBxdWV1ZTtcblx0ICAgICAgICBpZiAodGhpcy5xdWV1ZWQoKSA9PT0gMCkge1xuXHQgICAgICAgICAgcmV0dXJuIHRoaXMuUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBxdWV1ZSA9IHRoaXMuX3F1ZXVlcy5nZXRGaXJzdCgpO1xuXHQgICAgICAgICh7b3B0aW9ucywgYXJnc30gPSBuZXh0ID0gcXVldWUuZmlyc3QoKSk7XG5cdCAgICAgICAgaWYgKChjYXBhY2l0eSAhPSBudWxsKSAmJiBvcHRpb25zLndlaWdodCA+IGNhcGFjaXR5KSB7XG5cdCAgICAgICAgICByZXR1cm4gdGhpcy5Qcm9taXNlLnJlc29sdmUobnVsbCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuRXZlbnRzLnRyaWdnZXIoXCJkZWJ1Z1wiLCBgRHJhaW5pbmcgJHtvcHRpb25zLmlkfWAsIHthcmdzLCBvcHRpb25zfSk7XG5cdCAgICAgICAgaW5kZXggPSB0aGlzLl9yYW5kb21JbmRleCgpO1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9zdG9yZS5fX3JlZ2lzdGVyX18oaW5kZXgsIG9wdGlvbnMud2VpZ2h0LCBvcHRpb25zLmV4cGlyYXRpb24pLnRoZW4oKHtzdWNjZXNzLCB3YWl0LCByZXNlcnZvaXJ9KSA9PiB7XG5cdCAgICAgICAgICB2YXIgZW1wdHk7XG5cdCAgICAgICAgICB0aGlzLkV2ZW50cy50cmlnZ2VyKFwiZGVidWdcIiwgYERyYWluZWQgJHtvcHRpb25zLmlkfWAsIHtzdWNjZXNzLCBhcmdzLCBvcHRpb25zfSk7XG5cdCAgICAgICAgICBpZiAoc3VjY2Vzcykge1xuXHQgICAgICAgICAgICBxdWV1ZS5zaGlmdCgpO1xuXHQgICAgICAgICAgICBlbXB0eSA9IHRoaXMuZW1wdHkoKTtcblx0ICAgICAgICAgICAgaWYgKGVtcHR5KSB7XG5cdCAgICAgICAgICAgICAgdGhpcy5FdmVudHMudHJpZ2dlcihcImVtcHR5XCIpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGlmIChyZXNlcnZvaXIgPT09IDApIHtcblx0ICAgICAgICAgICAgICB0aGlzLkV2ZW50cy50cmlnZ2VyKFwiZGVwbGV0ZWRcIiwgZW1wdHkpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX3J1bihpbmRleCwgbmV4dCwgd2FpdCk7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLlByb21pc2UucmVzb2x2ZShvcHRpb25zLndlaWdodCk7XG5cdCAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5Qcm9taXNlLnJlc29sdmUobnVsbCk7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfSk7XG5cdCAgICAgIH0pO1xuXHQgICAgfVxuXG5cdCAgICBfZHJhaW5BbGwoY2FwYWNpdHksIHRvdGFsID0gMCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fZHJhaW5PbmUoY2FwYWNpdHkpLnRoZW4oKGRyYWluZWQpID0+IHtcblx0ICAgICAgICB2YXIgbmV3Q2FwYWNpdHk7XG5cdCAgICAgICAgaWYgKGRyYWluZWQgIT0gbnVsbCkge1xuXHQgICAgICAgICAgbmV3Q2FwYWNpdHkgPSBjYXBhY2l0eSAhPSBudWxsID8gY2FwYWNpdHkgLSBkcmFpbmVkIDogY2FwYWNpdHk7XG5cdCAgICAgICAgICByZXR1cm4gdGhpcy5fZHJhaW5BbGwobmV3Q2FwYWNpdHksIHRvdGFsICsgZHJhaW5lZCk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIHJldHVybiB0aGlzLlByb21pc2UucmVzb2x2ZSh0b3RhbCk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuXHQgICAgICAgIHJldHVybiB0aGlzLkV2ZW50cy50cmlnZ2VyKFwiZXJyb3JcIiwgZSk7XG5cdCAgICAgIH0pO1xuXHQgICAgfVxuXG5cdCAgICBfZHJvcEFsbFF1ZXVlZChtZXNzYWdlKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLl9xdWV1ZXMuc2hpZnRBbGwoZnVuY3Rpb24oam9iKSB7XG5cdCAgICAgICAgcmV0dXJuIGpvYi5kb0Ryb3Aoe21lc3NhZ2V9KTtcblx0ICAgICAgfSk7XG5cdCAgICB9XG5cblx0ICAgIHN0b3Aob3B0aW9ucyA9IHt9KSB7XG5cdCAgICAgIHZhciBkb25lLCB3YWl0Rm9yRXhlY3V0aW5nO1xuXHQgICAgICBvcHRpb25zID0gcGFyc2VyJDUubG9hZChvcHRpb25zLCB0aGlzLnN0b3BEZWZhdWx0cyk7XG5cdCAgICAgIHdhaXRGb3JFeGVjdXRpbmcgPSAoYXQpID0+IHtcblx0ICAgICAgICB2YXIgZmluaXNoZWQ7XG5cdCAgICAgICAgZmluaXNoZWQgPSAoKSA9PiB7XG5cdCAgICAgICAgICB2YXIgY291bnRzO1xuXHQgICAgICAgICAgY291bnRzID0gdGhpcy5fc3RhdGVzLmNvdW50cztcblx0ICAgICAgICAgIHJldHVybiAoY291bnRzWzBdICsgY291bnRzWzFdICsgY291bnRzWzJdICsgY291bnRzWzNdKSA9PT0gYXQ7XG5cdCAgICAgICAgfTtcblx0ICAgICAgICByZXR1cm4gbmV3IHRoaXMuUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdCAgICAgICAgICBpZiAoZmluaXNoZWQoKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuXHQgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMub24oXCJkb25lXCIsICgpID0+IHtcblx0ICAgICAgICAgICAgICBpZiAoZmluaXNoZWQoKSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoXCJkb25lXCIpO1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcblx0ICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH0pO1xuXHQgICAgICB9O1xuXHQgICAgICBkb25lID0gb3B0aW9ucy5kcm9wV2FpdGluZ0pvYnMgPyAodGhpcy5fcnVuID0gZnVuY3Rpb24oaW5kZXgsIG5leHQpIHtcblx0ICAgICAgICByZXR1cm4gbmV4dC5kb0Ryb3Aoe1xuXHQgICAgICAgICAgbWVzc2FnZTogb3B0aW9ucy5kcm9wRXJyb3JNZXNzYWdlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgIH0sIHRoaXMuX2RyYWluT25lID0gKCkgPT4ge1xuXHQgICAgICAgIHJldHVybiB0aGlzLlByb21pc2UucmVzb2x2ZShudWxsKTtcblx0ICAgICAgfSwgdGhpcy5fcmVnaXN0ZXJMb2NrLnNjaGVkdWxlKCgpID0+IHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fc3VibWl0TG9jay5zY2hlZHVsZSgoKSA9PiB7XG5cdCAgICAgICAgICB2YXIgaywgcmVmLCB2O1xuXHQgICAgICAgICAgcmVmID0gdGhpcy5fc2NoZWR1bGVkO1xuXHQgICAgICAgICAgZm9yIChrIGluIHJlZikge1xuXHQgICAgICAgICAgICB2ID0gcmVmW2tdO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5qb2JTdGF0dXModi5qb2Iub3B0aW9ucy5pZCkgPT09IFwiUlVOTklOR1wiKSB7XG5cdCAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHYudGltZW91dCk7XG5cdCAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHYuZXhwaXJhdGlvbik7XG5cdCAgICAgICAgICAgICAgdi5qb2IuZG9Ecm9wKHtcblx0ICAgICAgICAgICAgICAgIG1lc3NhZ2U6IG9wdGlvbnMuZHJvcEVycm9yTWVzc2FnZVxuXHQgICAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgICB0aGlzLl9kcm9wQWxsUXVldWVkKG9wdGlvbnMuZHJvcEVycm9yTWVzc2FnZSk7XG5cdCAgICAgICAgICByZXR1cm4gd2FpdEZvckV4ZWN1dGluZygwKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgfSkpIDogdGhpcy5zY2hlZHVsZSh7XG5cdCAgICAgICAgcHJpb3JpdHk6IE5VTV9QUklPUklUSUVTJDEgLSAxLFxuXHQgICAgICAgIHdlaWdodDogMFxuXHQgICAgICB9LCAoKSA9PiB7XG5cdCAgICAgICAgcmV0dXJuIHdhaXRGb3JFeGVjdXRpbmcoMSk7XG5cdCAgICAgIH0pO1xuXHQgICAgICB0aGlzLl9yZWNlaXZlID0gZnVuY3Rpb24oam9iKSB7XG5cdCAgICAgICAgcmV0dXJuIGpvYi5fcmVqZWN0KG5ldyBCb3R0bGVuZWNrLnByb3RvdHlwZS5Cb3R0bGVuZWNrRXJyb3Iob3B0aW9ucy5lbnF1ZXVlRXJyb3JNZXNzYWdlKSk7XG5cdCAgICAgIH07XG5cdCAgICAgIHRoaXMuc3RvcCA9ICgpID0+IHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5Qcm9taXNlLnJlamVjdChuZXcgQm90dGxlbmVjay5wcm90b3R5cGUuQm90dGxlbmVja0Vycm9yKFwic3RvcCgpIGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkXCIpKTtcblx0ICAgICAgfTtcblx0ICAgICAgcmV0dXJuIGRvbmU7XG5cdCAgICB9XG5cblx0ICAgIGFzeW5jIF9hZGRUb1F1ZXVlKGpvYikge1xuXHQgICAgICB2YXIgYXJncywgYmxvY2tlZCwgZXJyb3IsIG9wdGlvbnMsIHJlYWNoZWRIV00sIHNoaWZ0ZWQsIHN0cmF0ZWd5O1xuXHQgICAgICAoe2FyZ3MsIG9wdGlvbnN9ID0gam9iKTtcblx0ICAgICAgdHJ5IHtcblx0ICAgICAgICAoe3JlYWNoZWRIV00sIGJsb2NrZWQsIHN0cmF0ZWd5fSA9IChhd2FpdCB0aGlzLl9zdG9yZS5fX3N1Ym1pdF9fKHRoaXMucXVldWVkKCksIG9wdGlvbnMud2VpZ2h0KSkpO1xuXHQgICAgICB9IGNhdGNoIChlcnJvcjEpIHtcblx0ICAgICAgICBlcnJvciA9IGVycm9yMTtcblx0ICAgICAgICB0aGlzLkV2ZW50cy50cmlnZ2VyKFwiZGVidWdcIiwgYENvdWxkIG5vdCBxdWV1ZSAke29wdGlvbnMuaWR9YCwge2FyZ3MsIG9wdGlvbnMsIGVycm9yfSk7XG5cdCAgICAgICAgam9iLmRvRHJvcCh7ZXJyb3J9KTtcblx0ICAgICAgICByZXR1cm4gZmFsc2U7XG5cdCAgICAgIH1cblx0ICAgICAgaWYgKGJsb2NrZWQpIHtcblx0ICAgICAgICBqb2IuZG9Ecm9wKCk7XG5cdCAgICAgICAgcmV0dXJuIHRydWU7XG5cdCAgICAgIH0gZWxzZSBpZiAocmVhY2hlZEhXTSkge1xuXHQgICAgICAgIHNoaWZ0ZWQgPSBzdHJhdGVneSA9PT0gQm90dGxlbmVjay5wcm90b3R5cGUuc3RyYXRlZ3kuTEVBSyA/IHRoaXMuX3F1ZXVlcy5zaGlmdExhc3RGcm9tKG9wdGlvbnMucHJpb3JpdHkpIDogc3RyYXRlZ3kgPT09IEJvdHRsZW5lY2sucHJvdG90eXBlLnN0cmF0ZWd5Lk9WRVJGTE9XX1BSSU9SSVRZID8gdGhpcy5fcXVldWVzLnNoaWZ0TGFzdEZyb20ob3B0aW9ucy5wcmlvcml0eSArIDEpIDogc3RyYXRlZ3kgPT09IEJvdHRsZW5lY2sucHJvdG90eXBlLnN0cmF0ZWd5Lk9WRVJGTE9XID8gam9iIDogdm9pZCAwO1xuXHQgICAgICAgIGlmIChzaGlmdGVkICE9IG51bGwpIHtcblx0ICAgICAgICAgIHNoaWZ0ZWQuZG9Ecm9wKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmICgoc2hpZnRlZCA9PSBudWxsKSB8fCBzdHJhdGVneSA9PT0gQm90dGxlbmVjay5wcm90b3R5cGUuc3RyYXRlZ3kuT1ZFUkZMT1cpIHtcblx0ICAgICAgICAgIGlmIChzaGlmdGVkID09IG51bGwpIHtcblx0ICAgICAgICAgICAgam9iLmRvRHJvcCgpO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgICAgcmV0dXJuIHJlYWNoZWRIV007XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICAgIGpvYi5kb1F1ZXVlKHJlYWNoZWRIV00sIGJsb2NrZWQpO1xuXHQgICAgICB0aGlzLl9xdWV1ZXMucHVzaChqb2IpO1xuXHQgICAgICBhd2FpdCB0aGlzLl9kcmFpbkFsbCgpO1xuXHQgICAgICByZXR1cm4gcmVhY2hlZEhXTTtcblx0ICAgIH1cblxuXHQgICAgX3JlY2VpdmUoam9iKSB7XG5cdCAgICAgIGlmICh0aGlzLl9zdGF0ZXMuam9iU3RhdHVzKGpvYi5vcHRpb25zLmlkKSAhPSBudWxsKSB7XG5cdCAgICAgICAgam9iLl9yZWplY3QobmV3IEJvdHRsZW5lY2sucHJvdG90eXBlLkJvdHRsZW5lY2tFcnJvcihgQSBqb2Igd2l0aCB0aGUgc2FtZSBpZCBhbHJlYWR5IGV4aXN0cyAoaWQ9JHtqb2Iub3B0aW9ucy5pZH0pYCkpO1xuXHQgICAgICAgIHJldHVybiBmYWxzZTtcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICBqb2IuZG9SZWNlaXZlKCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3N1Ym1pdExvY2suc2NoZWR1bGUodGhpcy5fYWRkVG9RdWV1ZSwgam9iKTtcblx0ICAgICAgfVxuXHQgICAgfVxuXG5cdCAgICBzdWJtaXQoLi4uYXJncykge1xuXHQgICAgICB2YXIgY2IsIGZuLCBqb2IsIG9wdGlvbnMsIHJlZiwgcmVmMSwgdGFzaztcblx0ICAgICAgaWYgKHR5cGVvZiBhcmdzWzBdID09PSBcImZ1bmN0aW9uXCIpIHtcblx0ICAgICAgICByZWYgPSBhcmdzLCBbZm4sIC4uLmFyZ3NdID0gcmVmLCBbY2JdID0gc3BsaWNlLmNhbGwoYXJncywgLTEpO1xuXHQgICAgICAgIG9wdGlvbnMgPSBwYXJzZXIkNS5sb2FkKHt9LCB0aGlzLmpvYkRlZmF1bHRzKTtcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICByZWYxID0gYXJncywgW29wdGlvbnMsIGZuLCAuLi5hcmdzXSA9IHJlZjEsIFtjYl0gPSBzcGxpY2UuY2FsbChhcmdzLCAtMSk7XG5cdCAgICAgICAgb3B0aW9ucyA9IHBhcnNlciQ1LmxvYWQob3B0aW9ucywgdGhpcy5qb2JEZWZhdWx0cyk7XG5cdCAgICAgIH1cblx0ICAgICAgdGFzayA9ICguLi5hcmdzKSA9PiB7XG5cdCAgICAgICAgcmV0dXJuIG5ldyB0aGlzLlByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdCAgICAgICAgICByZXR1cm4gZm4oLi4uYXJncywgZnVuY3Rpb24oLi4uYXJncykge1xuXHQgICAgICAgICAgICByZXR1cm4gKGFyZ3NbMF0gIT0gbnVsbCA/IHJlamVjdCA6IHJlc29sdmUpKGFyZ3MpO1xuXHQgICAgICAgICAgfSk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgIH07XG5cdCAgICAgIGpvYiA9IG5ldyBKb2IkMSh0YXNrLCBhcmdzLCBvcHRpb25zLCB0aGlzLmpvYkRlZmF1bHRzLCB0aGlzLnJlamVjdE9uRHJvcCwgdGhpcy5FdmVudHMsIHRoaXMuX3N0YXRlcywgdGhpcy5Qcm9taXNlKTtcblx0ICAgICAgam9iLnByb21pc2UudGhlbihmdW5jdGlvbihhcmdzKSB7XG5cdCAgICAgICAgcmV0dXJuIHR5cGVvZiBjYiA9PT0gXCJmdW5jdGlvblwiID8gY2IoLi4uYXJncykgOiB2b2lkIDA7XG5cdCAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGFyZ3MpIHtcblx0ICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhcmdzKSkge1xuXHQgICAgICAgICAgcmV0dXJuIHR5cGVvZiBjYiA9PT0gXCJmdW5jdGlvblwiID8gY2IoLi4uYXJncykgOiB2b2lkIDA7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIHJldHVybiB0eXBlb2YgY2IgPT09IFwiZnVuY3Rpb25cIiA/IGNiKGFyZ3MpIDogdm9pZCAwO1xuXHQgICAgICAgIH1cblx0ICAgICAgfSk7XG5cdCAgICAgIHJldHVybiB0aGlzLl9yZWNlaXZlKGpvYik7XG5cdCAgICB9XG5cblx0ICAgIHNjaGVkdWxlKC4uLmFyZ3MpIHtcblx0ICAgICAgdmFyIGpvYiwgb3B0aW9ucywgdGFzaztcblx0ICAgICAgaWYgKHR5cGVvZiBhcmdzWzBdID09PSBcImZ1bmN0aW9uXCIpIHtcblx0ICAgICAgICBbdGFzaywgLi4uYXJnc10gPSBhcmdzO1xuXHQgICAgICAgIG9wdGlvbnMgPSB7fTtcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICBbb3B0aW9ucywgdGFzaywgLi4uYXJnc10gPSBhcmdzO1xuXHQgICAgICB9XG5cdCAgICAgIGpvYiA9IG5ldyBKb2IkMSh0YXNrLCBhcmdzLCBvcHRpb25zLCB0aGlzLmpvYkRlZmF1bHRzLCB0aGlzLnJlamVjdE9uRHJvcCwgdGhpcy5FdmVudHMsIHRoaXMuX3N0YXRlcywgdGhpcy5Qcm9taXNlKTtcblx0ICAgICAgdGhpcy5fcmVjZWl2ZShqb2IpO1xuXHQgICAgICByZXR1cm4gam9iLnByb21pc2U7XG5cdCAgICB9XG5cblx0ICAgIHdyYXAoZm4pIHtcblx0ICAgICAgdmFyIHNjaGVkdWxlLCB3cmFwcGVkO1xuXHQgICAgICBzY2hlZHVsZSA9IHRoaXMuc2NoZWR1bGUuYmluZCh0aGlzKTtcblx0ICAgICAgd3JhcHBlZCA9IGZ1bmN0aW9uKC4uLmFyZ3MpIHtcblx0ICAgICAgICByZXR1cm4gc2NoZWR1bGUoZm4uYmluZCh0aGlzKSwgLi4uYXJncyk7XG5cdCAgICAgIH07XG5cdCAgICAgIHdyYXBwZWQud2l0aE9wdGlvbnMgPSBmdW5jdGlvbihvcHRpb25zLCAuLi5hcmdzKSB7XG5cdCAgICAgICAgcmV0dXJuIHNjaGVkdWxlKG9wdGlvbnMsIGZuLCAuLi5hcmdzKTtcblx0ICAgICAgfTtcblx0ICAgICAgcmV0dXJuIHdyYXBwZWQ7XG5cdCAgICB9XG5cblx0ICAgIGFzeW5jIHVwZGF0ZVNldHRpbmdzKG9wdGlvbnMgPSB7fSkge1xuXHQgICAgICBhd2FpdCB0aGlzLl9zdG9yZS5fX3VwZGF0ZVNldHRpbmdzX18ocGFyc2VyJDUub3ZlcndyaXRlKG9wdGlvbnMsIHRoaXMuc3RvcmVEZWZhdWx0cykpO1xuXHQgICAgICBwYXJzZXIkNS5vdmVyd3JpdGUob3B0aW9ucywgdGhpcy5pbnN0YW5jZURlZmF1bHRzLCB0aGlzKTtcblx0ICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9XG5cblx0ICAgIGN1cnJlbnRSZXNlcnZvaXIoKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLl9zdG9yZS5fX2N1cnJlbnRSZXNlcnZvaXJfXygpO1xuXHQgICAgfVxuXG5cdCAgICBpbmNyZW1lbnRSZXNlcnZvaXIoaW5jciA9IDApIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX3N0b3JlLl9faW5jcmVtZW50UmVzZXJ2b2lyX18oaW5jcik7XG5cdCAgICB9XG5cblx0ICB9XG5cdCAgQm90dGxlbmVjay5kZWZhdWx0ID0gQm90dGxlbmVjaztcblxuXHQgIEJvdHRsZW5lY2suRXZlbnRzID0gRXZlbnRzJDQ7XG5cblx0ICBCb3R0bGVuZWNrLnZlcnNpb24gPSBCb3R0bGVuZWNrLnByb3RvdHlwZS52ZXJzaW9uID0gcmVxdWlyZSQkOC52ZXJzaW9uO1xuXG5cdCAgQm90dGxlbmVjay5zdHJhdGVneSA9IEJvdHRsZW5lY2sucHJvdG90eXBlLnN0cmF0ZWd5ID0ge1xuXHQgICAgTEVBSzogMSxcblx0ICAgIE9WRVJGTE9XOiAyLFxuXHQgICAgT1ZFUkZMT1dfUFJJT1JJVFk6IDQsXG5cdCAgICBCTE9DSzogM1xuXHQgIH07XG5cblx0ICBCb3R0bGVuZWNrLkJvdHRsZW5lY2tFcnJvciA9IEJvdHRsZW5lY2sucHJvdG90eXBlLkJvdHRsZW5lY2tFcnJvciA9IEJvdHRsZW5lY2tFcnJvcl8xO1xuXG5cdCAgQm90dGxlbmVjay5Hcm91cCA9IEJvdHRsZW5lY2sucHJvdG90eXBlLkdyb3VwID0gR3JvdXBfMTtcblxuXHQgIEJvdHRsZW5lY2suUmVkaXNDb25uZWN0aW9uID0gQm90dGxlbmVjay5wcm90b3R5cGUuUmVkaXNDb25uZWN0aW9uID0gcmVxdWlyZSQkMjtcblxuXHQgIEJvdHRsZW5lY2suSU9SZWRpc0Nvbm5lY3Rpb24gPSBCb3R0bGVuZWNrLnByb3RvdHlwZS5JT1JlZGlzQ29ubmVjdGlvbiA9IHJlcXVpcmUkJDM7XG5cblx0ICBCb3R0bGVuZWNrLkJhdGNoZXIgPSBCb3R0bGVuZWNrLnByb3RvdHlwZS5CYXRjaGVyID0gQmF0Y2hlcl8xO1xuXG5cdCAgQm90dGxlbmVjay5wcm90b3R5cGUuam9iRGVmYXVsdHMgPSB7XG5cdCAgICBwcmlvcml0eTogREVGQVVMVF9QUklPUklUWSQxLFxuXHQgICAgd2VpZ2h0OiAxLFxuXHQgICAgZXhwaXJhdGlvbjogbnVsbCxcblx0ICAgIGlkOiBcIjxuby1pZD5cIlxuXHQgIH07XG5cblx0ICBCb3R0bGVuZWNrLnByb3RvdHlwZS5zdG9yZURlZmF1bHRzID0ge1xuXHQgICAgbWF4Q29uY3VycmVudDogbnVsbCxcblx0ICAgIG1pblRpbWU6IDAsXG5cdCAgICBoaWdoV2F0ZXI6IG51bGwsXG5cdCAgICBzdHJhdGVneTogQm90dGxlbmVjay5wcm90b3R5cGUuc3RyYXRlZ3kuTEVBSyxcblx0ICAgIHBlbmFsdHk6IG51bGwsXG5cdCAgICByZXNlcnZvaXI6IG51bGwsXG5cdCAgICByZXNlcnZvaXJSZWZyZXNoSW50ZXJ2YWw6IG51bGwsXG5cdCAgICByZXNlcnZvaXJSZWZyZXNoQW1vdW50OiBudWxsLFxuXHQgICAgcmVzZXJ2b2lySW5jcmVhc2VJbnRlcnZhbDogbnVsbCxcblx0ICAgIHJlc2Vydm9pckluY3JlYXNlQW1vdW50OiBudWxsLFxuXHQgICAgcmVzZXJ2b2lySW5jcmVhc2VNYXhpbXVtOiBudWxsXG5cdCAgfTtcblxuXHQgIEJvdHRsZW5lY2sucHJvdG90eXBlLmxvY2FsU3RvcmVEZWZhdWx0cyA9IHtcblx0ICAgIFByb21pc2U6IFByb21pc2UsXG5cdCAgICB0aW1lb3V0OiBudWxsLFxuXHQgICAgaGVhcnRiZWF0SW50ZXJ2YWw6IDI1MFxuXHQgIH07XG5cblx0ICBCb3R0bGVuZWNrLnByb3RvdHlwZS5yZWRpc1N0b3JlRGVmYXVsdHMgPSB7XG5cdCAgICBQcm9taXNlOiBQcm9taXNlLFxuXHQgICAgdGltZW91dDogbnVsbCxcblx0ICAgIGhlYXJ0YmVhdEludGVydmFsOiA1MDAwLFxuXHQgICAgY2xpZW50VGltZW91dDogMTAwMDAsXG5cdCAgICBSZWRpczogbnVsbCxcblx0ICAgIGNsaWVudE9wdGlvbnM6IHt9LFxuXHQgICAgY2x1c3Rlck5vZGVzOiBudWxsLFxuXHQgICAgY2xlYXJEYXRhc3RvcmU6IGZhbHNlLFxuXHQgICAgY29ubmVjdGlvbjogbnVsbFxuXHQgIH07XG5cblx0ICBCb3R0bGVuZWNrLnByb3RvdHlwZS5pbnN0YW5jZURlZmF1bHRzID0ge1xuXHQgICAgZGF0YXN0b3JlOiBcImxvY2FsXCIsXG5cdCAgICBjb25uZWN0aW9uOiBudWxsLFxuXHQgICAgaWQ6IFwiPG5vLWlkPlwiLFxuXHQgICAgcmVqZWN0T25Ecm9wOiB0cnVlLFxuXHQgICAgdHJhY2tEb25lU3RhdHVzOiBmYWxzZSxcblx0ICAgIFByb21pc2U6IFByb21pc2Vcblx0ICB9O1xuXG5cdCAgQm90dGxlbmVjay5wcm90b3R5cGUuc3RvcERlZmF1bHRzID0ge1xuXHQgICAgZW5xdWV1ZUVycm9yTWVzc2FnZTogXCJUaGlzIGxpbWl0ZXIgaGFzIGJlZW4gc3RvcHBlZCBhbmQgY2Fubm90IGFjY2VwdCBuZXcgam9icy5cIixcblx0ICAgIGRyb3BXYWl0aW5nSm9iczogdHJ1ZSxcblx0ICAgIGRyb3BFcnJvck1lc3NhZ2U6IFwiVGhpcyBsaW1pdGVyIGhhcyBiZWVuIHN0b3BwZWQuXCJcblx0ICB9O1xuXG5cdCAgcmV0dXJuIEJvdHRsZW5lY2s7XG5cblx0fSkuY2FsbChjb21tb25qc0dsb2JhbCk7XG5cblx0dmFyIEJvdHRsZW5lY2tfMSA9IEJvdHRsZW5lY2s7XG5cblx0dmFyIGxpYiA9IEJvdHRsZW5lY2tfMTtcblxuXHRyZXR1cm4gbGliO1xuXG59KSkpO1xuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wRGVmYXVsdCAoZXgpIHsgcmV0dXJuIChleCAmJiAodHlwZW9mIGV4ID09PSAnb2JqZWN0JykgJiYgJ2RlZmF1bHQnIGluIGV4KSA/IGV4WydkZWZhdWx0J10gOiBleDsgfVxuXG52YXIgQm90dGxlbmVjayA9IF9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKCdib3R0bGVuZWNrL2xpZ2h0JykpO1xuXG4vLyBAdHMtaWdub3JlXG5hc3luYyBmdW5jdGlvbiBlcnJvclJlcXVlc3Qob2N0b2tpdCwgc3RhdGUsIGVycm9yLCBvcHRpb25zKSB7XG4gIGlmICghZXJyb3IucmVxdWVzdCB8fCAhZXJyb3IucmVxdWVzdC5yZXF1ZXN0KSB7XG4gICAgLy8gYWRkcmVzcyBodHRwczovL2dpdGh1Yi5jb20vb2N0b2tpdC9wbHVnaW4tcmV0cnkuanMvaXNzdWVzLzhcbiAgICB0aHJvdyBlcnJvcjtcbiAgfSAvLyByZXRyeSBhbGwgPj0gNDAwICYmIG5vdCBkb05vdFJldHJ5XG5cblxuICBpZiAoZXJyb3Iuc3RhdHVzID49IDQwMCAmJiAhc3RhdGUuZG9Ob3RSZXRyeS5pbmNsdWRlcyhlcnJvci5zdGF0dXMpKSB7XG4gICAgY29uc3QgcmV0cmllcyA9IG9wdGlvbnMucmVxdWVzdC5yZXRyaWVzICE9IG51bGwgPyBvcHRpb25zLnJlcXVlc3QucmV0cmllcyA6IHN0YXRlLnJldHJpZXM7XG4gICAgY29uc3QgcmV0cnlBZnRlciA9IE1hdGgucG93KChvcHRpb25zLnJlcXVlc3QucmV0cnlDb3VudCB8fCAwKSArIDEsIDIpO1xuICAgIHRocm93IG9jdG9raXQucmV0cnkucmV0cnlSZXF1ZXN0KGVycm9yLCByZXRyaWVzLCByZXRyeUFmdGVyKTtcbiAgfSAvLyBNYXliZSBldmVudHVhbGx5IHRoZXJlIHdpbGwgYmUgbW9yZSBjYXNlcyBoZXJlXG5cblxuICB0aHJvdyBlcnJvcjtcbn1cblxuLy8gQHRzLWlnbm9yZVxuXG5hc3luYyBmdW5jdGlvbiB3cmFwUmVxdWVzdChzdGF0ZSwgcmVxdWVzdCwgb3B0aW9ucykge1xuICBjb25zdCBsaW1pdGVyID0gbmV3IEJvdHRsZW5lY2soKTsgLy8gQHRzLWlnbm9yZVxuXG4gIGxpbWl0ZXIub24oXCJmYWlsZWRcIiwgZnVuY3Rpb24gKGVycm9yLCBpbmZvKSB7XG4gICAgY29uc3QgbWF4UmV0cmllcyA9IH5+ZXJyb3IucmVxdWVzdC5yZXF1ZXN0LnJldHJpZXM7XG4gICAgY29uc3QgYWZ0ZXIgPSB+fmVycm9yLnJlcXVlc3QucmVxdWVzdC5yZXRyeUFmdGVyO1xuICAgIG9wdGlvbnMucmVxdWVzdC5yZXRyeUNvdW50ID0gaW5mby5yZXRyeUNvdW50ICsgMTtcblxuICAgIGlmIChtYXhSZXRyaWVzID4gaW5mby5yZXRyeUNvdW50KSB7XG4gICAgICAvLyBSZXR1cm5pbmcgYSBudW1iZXIgaW5zdHJ1Y3RzIHRoZSBsaW1pdGVyIHRvIHJldHJ5XG4gICAgICAvLyB0aGUgcmVxdWVzdCBhZnRlciB0aGF0IG51bWJlciBvZiBtaWxsaXNlY29uZHMgaGF2ZSBwYXNzZWRcbiAgICAgIHJldHVybiBhZnRlciAqIHN0YXRlLnJldHJ5QWZ0ZXJCYXNlVmFsdWU7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGxpbWl0ZXIuc2NoZWR1bGUocmVxdWVzdCwgb3B0aW9ucyk7XG59XG5cbmNvbnN0IFZFUlNJT04gPSBcIjMuMC45XCI7XG5mdW5jdGlvbiByZXRyeShvY3Rva2l0LCBvY3Rva2l0T3B0aW9ucykge1xuICBjb25zdCBzdGF0ZSA9IE9iamVjdC5hc3NpZ24oe1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgcmV0cnlBZnRlckJhc2VWYWx1ZTogMTAwMCxcbiAgICBkb05vdFJldHJ5OiBbNDAwLCA0MDEsIDQwMywgNDA0LCA0MjJdLFxuICAgIHJldHJpZXM6IDNcbiAgfSwgb2N0b2tpdE9wdGlvbnMucmV0cnkpO1xuXG4gIGlmIChzdGF0ZS5lbmFibGVkKSB7XG4gICAgb2N0b2tpdC5ob29rLmVycm9yKFwicmVxdWVzdFwiLCBlcnJvclJlcXVlc3QuYmluZChudWxsLCBvY3Rva2l0LCBzdGF0ZSkpO1xuICAgIG9jdG9raXQuaG9vay53cmFwKFwicmVxdWVzdFwiLCB3cmFwUmVxdWVzdC5iaW5kKG51bGwsIHN0YXRlKSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHJldHJ5OiB7XG4gICAgICByZXRyeVJlcXVlc3Q6IChlcnJvciwgcmV0cmllcywgcmV0cnlBZnRlcikgPT4ge1xuICAgICAgICBlcnJvci5yZXF1ZXN0LnJlcXVlc3QgPSBPYmplY3QuYXNzaWduKHt9LCBlcnJvci5yZXF1ZXN0LnJlcXVlc3QsIHtcbiAgICAgICAgICByZXRyaWVzOiByZXRyaWVzLFxuICAgICAgICAgIHJldHJ5QWZ0ZXI6IHJldHJ5QWZ0ZXJcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5yZXRyeS5WRVJTSU9OID0gVkVSU0lPTjtcblxuZXhwb3J0cy5WRVJTSU9OID0gVkVSU0lPTjtcbmV4cG9ydHMucmV0cnkgPSByZXRyeTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldEFydGlmYWN0SW50ZXJuYWwgPSBleHBvcnRzLmdldEFydGlmYWN0UHVibGljID0gdm9pZCAwO1xuY29uc3QgZ2l0aHViXzEgPSByZXF1aXJlKFwiQGFjdGlvbnMvZ2l0aHViXCIpO1xuY29uc3QgcGx1Z2luX3JldHJ5XzEgPSByZXF1aXJlKFwiQG9jdG9raXQvcGx1Z2luLXJldHJ5XCIpO1xuY29uc3QgY29yZSA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiQGFjdGlvbnMvY29yZVwiKSk7XG5jb25zdCB1dGlsc18xID0gcmVxdWlyZShcIkBhY3Rpb25zL2dpdGh1Yi9saWIvdXRpbHNcIik7XG5jb25zdCByZXRyeV9vcHRpb25zXzEgPSByZXF1aXJlKFwiLi9yZXRyeS1vcHRpb25zXCIpO1xuY29uc3QgcGx1Z2luX3JlcXVlc3RfbG9nXzEgPSByZXF1aXJlKFwiQG9jdG9raXQvcGx1Z2luLXJlcXVlc3QtbG9nXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uL3NoYXJlZC91dGlsXCIpO1xuY29uc3QgdXNlcl9hZ2VudF8xID0gcmVxdWlyZShcIi4uL3NoYXJlZC91c2VyLWFnZW50XCIpO1xuY29uc3QgYXJ0aWZhY3RfdHdpcnBfY2xpZW50XzEgPSByZXF1aXJlKFwiLi4vc2hhcmVkL2FydGlmYWN0LXR3aXJwLWNsaWVudFwiKTtcbmNvbnN0IGdlbmVyYXRlZF8xID0gcmVxdWlyZShcIi4uLy4uL2dlbmVyYXRlZFwiKTtcbmNvbnN0IGVycm9yc18xID0gcmVxdWlyZShcIi4uL3NoYXJlZC9lcnJvcnNcIik7XG5mdW5jdGlvbiBnZXRBcnRpZmFjdFB1YmxpYyhhcnRpZmFjdE5hbWUsIHdvcmtmbG93UnVuSWQsIHJlcG9zaXRvcnlPd25lciwgcmVwb3NpdG9yeU5hbWUsIHRva2VuKSB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IFtyZXRyeU9wdHMsIHJlcXVlc3RPcHRzXSA9ICgwLCByZXRyeV9vcHRpb25zXzEuZ2V0UmV0cnlPcHRpb25zKSh1dGlsc18xLmRlZmF1bHRzKTtcbiAgICAgICAgY29uc3Qgb3B0cyA9IHtcbiAgICAgICAgICAgIGxvZzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgdXNlckFnZW50OiAoMCwgdXNlcl9hZ2VudF8xLmdldFVzZXJBZ2VudFN0cmluZykoKSxcbiAgICAgICAgICAgIHByZXZpZXdzOiB1bmRlZmluZWQsXG4gICAgICAgICAgICByZXRyeTogcmV0cnlPcHRzLFxuICAgICAgICAgICAgcmVxdWVzdDogcmVxdWVzdE9wdHNcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZ2l0aHViID0gKDAsIGdpdGh1Yl8xLmdldE9jdG9raXQpKHRva2VuLCBvcHRzLCBwbHVnaW5fcmV0cnlfMS5yZXRyeSwgcGx1Z2luX3JlcXVlc3RfbG9nXzEucmVxdWVzdExvZyk7XG4gICAgICAgIGNvbnN0IGdldEFydGlmYWN0UmVzcCA9IHlpZWxkIGdpdGh1Yi5yZXF1ZXN0KCdHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hcnRpZmFjdHN7P25hbWV9Jywge1xuICAgICAgICAgICAgb3duZXI6IHJlcG9zaXRvcnlPd25lcixcbiAgICAgICAgICAgIHJlcG86IHJlcG9zaXRvcnlOYW1lLFxuICAgICAgICAgICAgcnVuX2lkOiB3b3JrZmxvd1J1bklkLFxuICAgICAgICAgICAgbmFtZTogYXJ0aWZhY3ROYW1lXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoZ2V0QXJ0aWZhY3RSZXNwLnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuSW52YWxpZFJlc3BvbnNlRXJyb3IoYEludmFsaWQgcmVzcG9uc2UgZnJvbSBHaXRIdWIgQVBJOiAke2dldEFydGlmYWN0UmVzcC5zdGF0dXN9ICgkeyhfYSA9IGdldEFydGlmYWN0UmVzcCA9PT0gbnVsbCB8fCBnZXRBcnRpZmFjdFJlc3AgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGdldEFydGlmYWN0UmVzcC5oZWFkZXJzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2FbJ3gtZ2l0aHViLXJlcXVlc3QtaWQnXX0pYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGdldEFydGlmYWN0UmVzcC5kYXRhLmFydGlmYWN0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBlcnJvcnNfMS5BcnRpZmFjdE5vdEZvdW5kRXJyb3IoYEFydGlmYWN0IG5vdCBmb3VuZCBmb3IgbmFtZTogJHthcnRpZmFjdE5hbWV9XG4gICAgICAgIFBsZWFzZSBlbnN1cmUgdGhhdCB5b3VyIGFydGlmYWN0IGlzIG5vdCBleHBpcmVkIGFuZCB0aGUgYXJ0aWZhY3Qgd2FzIHVwbG9hZGVkIHVzaW5nIGEgY29tcGF0aWJsZSB2ZXJzaW9uIG9mIHRvb2xraXQvdXBsb2FkLWFydGlmYWN0LlxuICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgdmlzaXQgdGhlIEdpdEh1YiBBcnRpZmFjdHMgRkFROiBodHRwczovL2dpdGh1Yi5jb20vYWN0aW9ucy90b29sa2l0L2Jsb2IvbWFpbi9wYWNrYWdlcy9hcnRpZmFjdC9kb2NzL2ZhcS5tZGApO1xuICAgICAgICB9XG4gICAgICAgIGxldCBhcnRpZmFjdCA9IGdldEFydGlmYWN0UmVzcC5kYXRhLmFydGlmYWN0c1swXTtcbiAgICAgICAgaWYgKGdldEFydGlmYWN0UmVzcC5kYXRhLmFydGlmYWN0cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBhcnRpZmFjdCA9IGdldEFydGlmYWN0UmVzcC5kYXRhLmFydGlmYWN0cy5zb3J0KChhLCBiKSA9PiBiLmlkIC0gYS5pZClbMF07XG4gICAgICAgICAgICBjb3JlLmRlYnVnKGBNb3JlIHRoYW4gb25lIGFydGlmYWN0IGZvdW5kIGZvciBhIHNpbmdsZSBuYW1lLCByZXR1cm5pbmcgbmV3ZXN0IChpZDogJHthcnRpZmFjdC5pZH0pYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFydGlmYWN0OiB7XG4gICAgICAgICAgICAgICAgbmFtZTogYXJ0aWZhY3QubmFtZSxcbiAgICAgICAgICAgICAgICBpZDogYXJ0aWZhY3QuaWQsXG4gICAgICAgICAgICAgICAgc2l6ZTogYXJ0aWZhY3Quc2l6ZV9pbl9ieXRlcyxcbiAgICAgICAgICAgICAgICBjcmVhdGVkQXQ6IGFydGlmYWN0LmNyZWF0ZWRfYXQgPyBuZXcgRGF0ZShhcnRpZmFjdC5jcmVhdGVkX2F0KSA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0pO1xufVxuZXhwb3J0cy5nZXRBcnRpZmFjdFB1YmxpYyA9IGdldEFydGlmYWN0UHVibGljO1xuZnVuY3Rpb24gZ2V0QXJ0aWZhY3RJbnRlcm5hbChhcnRpZmFjdE5hbWUpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBhcnRpZmFjdENsaWVudCA9ICgwLCBhcnRpZmFjdF90d2lycF9jbGllbnRfMS5pbnRlcm5hbEFydGlmYWN0VHdpcnBDbGllbnQpKCk7XG4gICAgICAgIGNvbnN0IHsgd29ya2Zsb3dSdW5CYWNrZW5kSWQsIHdvcmtmbG93Sm9iUnVuQmFja2VuZElkIH0gPSAoMCwgdXRpbF8xLmdldEJhY2tlbmRJZHNGcm9tVG9rZW4pKCk7XG4gICAgICAgIGNvbnN0IHJlcSA9IHtcbiAgICAgICAgICAgIHdvcmtmbG93UnVuQmFja2VuZElkLFxuICAgICAgICAgICAgd29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQsXG4gICAgICAgICAgICBuYW1lRmlsdGVyOiBnZW5lcmF0ZWRfMS5TdHJpbmdWYWx1ZS5jcmVhdGUoeyB2YWx1ZTogYXJ0aWZhY3ROYW1lIH0pXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHJlcyA9IHlpZWxkIGFydGlmYWN0Q2xpZW50Lkxpc3RBcnRpZmFjdHMocmVxKTtcbiAgICAgICAgaWYgKHJlcy5hcnRpZmFjdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuQXJ0aWZhY3ROb3RGb3VuZEVycm9yKGBBcnRpZmFjdCBub3QgZm91bmQgZm9yIG5hbWU6ICR7YXJ0aWZhY3ROYW1lfVxuICAgICAgICBQbGVhc2UgZW5zdXJlIHRoYXQgeW91ciBhcnRpZmFjdCBpcyBub3QgZXhwaXJlZCBhbmQgdGhlIGFydGlmYWN0IHdhcyB1cGxvYWRlZCB1c2luZyBhIGNvbXBhdGlibGUgdmVyc2lvbiBvZiB0b29sa2l0L3VwbG9hZC1hcnRpZmFjdC5cbiAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHZpc2l0IHRoZSBHaXRIdWIgQXJ0aWZhY3RzIEZBUTogaHR0cHM6Ly9naXRodWIuY29tL2FjdGlvbnMvdG9vbGtpdC9ibG9iL21haW4vcGFja2FnZXMvYXJ0aWZhY3QvZG9jcy9mYXEubWRgKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgYXJ0aWZhY3QgPSByZXMuYXJ0aWZhY3RzWzBdO1xuICAgICAgICBpZiAocmVzLmFydGlmYWN0cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBhcnRpZmFjdCA9IHJlcy5hcnRpZmFjdHMuc29ydCgoYSwgYikgPT4gTnVtYmVyKGIuZGF0YWJhc2VJZCkgLSBOdW1iZXIoYS5kYXRhYmFzZUlkKSlbMF07XG4gICAgICAgICAgICBjb3JlLmRlYnVnKGBNb3JlIHRoYW4gb25lIGFydGlmYWN0IGZvdW5kIGZvciBhIHNpbmdsZSBuYW1lLCByZXR1cm5pbmcgbmV3ZXN0IChpZDogJHthcnRpZmFjdC5kYXRhYmFzZUlkfSlgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYXJ0aWZhY3Q6IHtcbiAgICAgICAgICAgICAgICBuYW1lOiBhcnRpZmFjdC5uYW1lLFxuICAgICAgICAgICAgICAgIGlkOiBOdW1iZXIoYXJ0aWZhY3QuZGF0YWJhc2VJZCksXG4gICAgICAgICAgICAgICAgc2l6ZTogTnVtYmVyKGFydGlmYWN0LnNpemUpLFxuICAgICAgICAgICAgICAgIGNyZWF0ZWRBdDogYXJ0aWZhY3QuY3JlYXRlZEF0XG4gICAgICAgICAgICAgICAgICAgID8gZ2VuZXJhdGVkXzEuVGltZXN0YW1wLnRvRGF0ZShhcnRpZmFjdC5jcmVhdGVkQXQpXG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfSk7XG59XG5leHBvcnRzLmdldEFydGlmYWN0SW50ZXJuYWwgPSBnZXRBcnRpZmFjdEludGVybmFsO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Z2V0LWFydGlmYWN0LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZGVsZXRlQXJ0aWZhY3RJbnRlcm5hbCA9IGV4cG9ydHMuZGVsZXRlQXJ0aWZhY3RQdWJsaWMgPSB2b2lkIDA7XG5jb25zdCBjb3JlXzEgPSByZXF1aXJlKFwiQGFjdGlvbnMvY29yZVwiKTtcbmNvbnN0IGdpdGh1Yl8xID0gcmVxdWlyZShcIkBhY3Rpb25zL2dpdGh1YlwiKTtcbmNvbnN0IHVzZXJfYWdlbnRfMSA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvdXNlci1hZ2VudFwiKTtcbmNvbnN0IHJldHJ5X29wdGlvbnNfMSA9IHJlcXVpcmUoXCIuLi9maW5kL3JldHJ5LW9wdGlvbnNcIik7XG5jb25zdCB1dGlsc18xID0gcmVxdWlyZShcIkBhY3Rpb25zL2dpdGh1Yi9saWIvdXRpbHNcIik7XG5jb25zdCBwbHVnaW5fcmVxdWVzdF9sb2dfMSA9IHJlcXVpcmUoXCJAb2N0b2tpdC9wbHVnaW4tcmVxdWVzdC1sb2dcIik7XG5jb25zdCBwbHVnaW5fcmV0cnlfMSA9IHJlcXVpcmUoXCJAb2N0b2tpdC9wbHVnaW4tcmV0cnlcIik7XG5jb25zdCBhcnRpZmFjdF90d2lycF9jbGllbnRfMSA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvYXJ0aWZhY3QtdHdpcnAtY2xpZW50XCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uL3NoYXJlZC91dGlsXCIpO1xuY29uc3QgZ2VuZXJhdGVkXzEgPSByZXF1aXJlKFwiLi4vLi4vZ2VuZXJhdGVkXCIpO1xuY29uc3QgZ2V0X2FydGlmYWN0XzEgPSByZXF1aXJlKFwiLi4vZmluZC9nZXQtYXJ0aWZhY3RcIik7XG5jb25zdCBlcnJvcnNfMSA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvZXJyb3JzXCIpO1xuZnVuY3Rpb24gZGVsZXRlQXJ0aWZhY3RQdWJsaWMoYXJ0aWZhY3ROYW1lLCB3b3JrZmxvd1J1bklkLCByZXBvc2l0b3J5T3duZXIsIHJlcG9zaXRvcnlOYW1lLCB0b2tlbikge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBbcmV0cnlPcHRzLCByZXF1ZXN0T3B0c10gPSAoMCwgcmV0cnlfb3B0aW9uc18xLmdldFJldHJ5T3B0aW9ucykodXRpbHNfMS5kZWZhdWx0cyk7XG4gICAgICAgIGNvbnN0IG9wdHMgPSB7XG4gICAgICAgICAgICBsb2c6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHVzZXJBZ2VudDogKDAsIHVzZXJfYWdlbnRfMS5nZXRVc2VyQWdlbnRTdHJpbmcpKCksXG4gICAgICAgICAgICBwcmV2aWV3czogdW5kZWZpbmVkLFxuICAgICAgICAgICAgcmV0cnk6IHJldHJ5T3B0cyxcbiAgICAgICAgICAgIHJlcXVlc3Q6IHJlcXVlc3RPcHRzXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGdpdGh1YiA9ICgwLCBnaXRodWJfMS5nZXRPY3Rva2l0KSh0b2tlbiwgb3B0cywgcGx1Z2luX3JldHJ5XzEucmV0cnksIHBsdWdpbl9yZXF1ZXN0X2xvZ18xLnJlcXVlc3RMb2cpO1xuICAgICAgICBjb25zdCBnZXRBcnRpZmFjdFJlc3AgPSB5aWVsZCAoMCwgZ2V0X2FydGlmYWN0XzEuZ2V0QXJ0aWZhY3RQdWJsaWMpKGFydGlmYWN0TmFtZSwgd29ya2Zsb3dSdW5JZCwgcmVwb3NpdG9yeU93bmVyLCByZXBvc2l0b3J5TmFtZSwgdG9rZW4pO1xuICAgICAgICBjb25zdCBkZWxldGVBcnRpZmFjdFJlc3AgPSB5aWVsZCBnaXRodWIucmVzdC5hY3Rpb25zLmRlbGV0ZUFydGlmYWN0KHtcbiAgICAgICAgICAgIG93bmVyOiByZXBvc2l0b3J5T3duZXIsXG4gICAgICAgICAgICByZXBvOiByZXBvc2l0b3J5TmFtZSxcbiAgICAgICAgICAgIGFydGlmYWN0X2lkOiBnZXRBcnRpZmFjdFJlc3AuYXJ0aWZhY3QuaWRcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChkZWxldGVBcnRpZmFjdFJlc3Auc3RhdHVzICE9PSAyMDQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBlcnJvcnNfMS5JbnZhbGlkUmVzcG9uc2VFcnJvcihgSW52YWxpZCByZXNwb25zZSBmcm9tIEdpdEh1YiBBUEk6ICR7ZGVsZXRlQXJ0aWZhY3RSZXNwLnN0YXR1c30gKCR7KF9hID0gZGVsZXRlQXJ0aWZhY3RSZXNwID09PSBudWxsIHx8IGRlbGV0ZUFydGlmYWN0UmVzcCA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGVsZXRlQXJ0aWZhY3RSZXNwLmhlYWRlcnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVsneC1naXRodWItcmVxdWVzdC1pZCddfSlgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQ6IGdldEFydGlmYWN0UmVzcC5hcnRpZmFjdC5pZFxuICAgICAgICB9O1xuICAgIH0pO1xufVxuZXhwb3J0cy5kZWxldGVBcnRpZmFjdFB1YmxpYyA9IGRlbGV0ZUFydGlmYWN0UHVibGljO1xuZnVuY3Rpb24gZGVsZXRlQXJ0aWZhY3RJbnRlcm5hbChhcnRpZmFjdE5hbWUpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBhcnRpZmFjdENsaWVudCA9ICgwLCBhcnRpZmFjdF90d2lycF9jbGllbnRfMS5pbnRlcm5hbEFydGlmYWN0VHdpcnBDbGllbnQpKCk7XG4gICAgICAgIGNvbnN0IHsgd29ya2Zsb3dSdW5CYWNrZW5kSWQsIHdvcmtmbG93Sm9iUnVuQmFja2VuZElkIH0gPSAoMCwgdXRpbF8xLmdldEJhY2tlbmRJZHNGcm9tVG9rZW4pKCk7XG4gICAgICAgIGNvbnN0IGxpc3RSZXEgPSB7XG4gICAgICAgICAgICB3b3JrZmxvd1J1bkJhY2tlbmRJZCxcbiAgICAgICAgICAgIHdvcmtmbG93Sm9iUnVuQmFja2VuZElkLFxuICAgICAgICAgICAgbmFtZUZpbHRlcjogZ2VuZXJhdGVkXzEuU3RyaW5nVmFsdWUuY3JlYXRlKHsgdmFsdWU6IGFydGlmYWN0TmFtZSB9KVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBsaXN0UmVzID0geWllbGQgYXJ0aWZhY3RDbGllbnQuTGlzdEFydGlmYWN0cyhsaXN0UmVxKTtcbiAgICAgICAgaWYgKGxpc3RSZXMuYXJ0aWZhY3RzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGVycm9yc18xLkFydGlmYWN0Tm90Rm91bmRFcnJvcihgQXJ0aWZhY3Qgbm90IGZvdW5kIGZvciBuYW1lOiAke2FydGlmYWN0TmFtZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgYXJ0aWZhY3QgPSBsaXN0UmVzLmFydGlmYWN0c1swXTtcbiAgICAgICAgaWYgKGxpc3RSZXMuYXJ0aWZhY3RzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIGFydGlmYWN0ID0gbGlzdFJlcy5hcnRpZmFjdHMuc29ydCgoYSwgYikgPT4gTnVtYmVyKGIuZGF0YWJhc2VJZCkgLSBOdW1iZXIoYS5kYXRhYmFzZUlkKSlbMF07XG4gICAgICAgICAgICAoMCwgY29yZV8xLmRlYnVnKShgTW9yZSB0aGFuIG9uZSBhcnRpZmFjdCBmb3VuZCBmb3IgYSBzaW5nbGUgbmFtZSwgcmV0dXJuaW5nIG5ld2VzdCAoaWQ6ICR7YXJ0aWZhY3QuZGF0YWJhc2VJZH0pYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVxID0ge1xuICAgICAgICAgICAgd29ya2Zsb3dSdW5CYWNrZW5kSWQ6IGFydGlmYWN0LndvcmtmbG93UnVuQmFja2VuZElkLFxuICAgICAgICAgICAgd29ya2Zsb3dKb2JSdW5CYWNrZW5kSWQ6IGFydGlmYWN0LndvcmtmbG93Sm9iUnVuQmFja2VuZElkLFxuICAgICAgICAgICAgbmFtZTogYXJ0aWZhY3QubmFtZVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZXMgPSB5aWVsZCBhcnRpZmFjdENsaWVudC5EZWxldGVBcnRpZmFjdChyZXEpO1xuICAgICAgICAoMCwgY29yZV8xLmluZm8pKGBBcnRpZmFjdCAnJHthcnRpZmFjdE5hbWV9JyAoSUQ6ICR7cmVzLmFydGlmYWN0SWR9KSBkZWxldGVkYCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpZDogTnVtYmVyKHJlcy5hcnRpZmFjdElkKVxuICAgICAgICB9O1xuICAgIH0pO1xufVxuZXhwb3J0cy5kZWxldGVBcnRpZmFjdEludGVybmFsID0gZGVsZXRlQXJ0aWZhY3RJbnRlcm5hbDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlbGV0ZS1hcnRpZmFjdC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmxpc3RBcnRpZmFjdHNJbnRlcm5hbCA9IGV4cG9ydHMubGlzdEFydGlmYWN0c1B1YmxpYyA9IHZvaWQgMDtcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCJAYWN0aW9ucy9jb3JlXCIpO1xuY29uc3QgZ2l0aHViXzEgPSByZXF1aXJlKFwiQGFjdGlvbnMvZ2l0aHViXCIpO1xuY29uc3QgdXNlcl9hZ2VudF8xID0gcmVxdWlyZShcIi4uL3NoYXJlZC91c2VyLWFnZW50XCIpO1xuY29uc3QgcmV0cnlfb3B0aW9uc18xID0gcmVxdWlyZShcIi4vcmV0cnktb3B0aW9uc1wiKTtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiQGFjdGlvbnMvZ2l0aHViL2xpYi91dGlsc1wiKTtcbmNvbnN0IHBsdWdpbl9yZXF1ZXN0X2xvZ18xID0gcmVxdWlyZShcIkBvY3Rva2l0L3BsdWdpbi1yZXF1ZXN0LWxvZ1wiKTtcbmNvbnN0IHBsdWdpbl9yZXRyeV8xID0gcmVxdWlyZShcIkBvY3Rva2l0L3BsdWdpbi1yZXRyeVwiKTtcbmNvbnN0IGFydGlmYWN0X3R3aXJwX2NsaWVudF8xID0gcmVxdWlyZShcIi4uL3NoYXJlZC9hcnRpZmFjdC10d2lycC1jbGllbnRcIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vc2hhcmVkL3V0aWxcIik7XG5jb25zdCBnZW5lcmF0ZWRfMSA9IHJlcXVpcmUoXCIuLi8uLi9nZW5lcmF0ZWRcIik7XG4vLyBMaW1pdGluZyB0byAxMDAwIGZvciBwZXJmIHJlYXNvbnNcbmNvbnN0IG1heGltdW1BcnRpZmFjdENvdW50ID0gMTAwMDtcbmNvbnN0IHBhZ2luYXRpb25Db3VudCA9IDEwMDtcbmNvbnN0IG1heE51bWJlck9mUGFnZXMgPSBtYXhpbXVtQXJ0aWZhY3RDb3VudCAvIHBhZ2luYXRpb25Db3VudDtcbmZ1bmN0aW9uIGxpc3RBcnRpZmFjdHNQdWJsaWMod29ya2Zsb3dSdW5JZCwgcmVwb3NpdG9yeU93bmVyLCByZXBvc2l0b3J5TmFtZSwgdG9rZW4sIGxhdGVzdCA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgKDAsIGNvcmVfMS5pbmZvKShgRmV0Y2hpbmcgYXJ0aWZhY3QgbGlzdCBmb3Igd29ya2Zsb3cgcnVuICR7d29ya2Zsb3dSdW5JZH0gaW4gcmVwb3NpdG9yeSAke3JlcG9zaXRvcnlPd25lcn0vJHtyZXBvc2l0b3J5TmFtZX1gKTtcbiAgICAgICAgbGV0IGFydGlmYWN0cyA9IFtdO1xuICAgICAgICBjb25zdCBbcmV0cnlPcHRzLCByZXF1ZXN0T3B0c10gPSAoMCwgcmV0cnlfb3B0aW9uc18xLmdldFJldHJ5T3B0aW9ucykodXRpbHNfMS5kZWZhdWx0cyk7XG4gICAgICAgIGNvbnN0IG9wdHMgPSB7XG4gICAgICAgICAgICBsb2c6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHVzZXJBZ2VudDogKDAsIHVzZXJfYWdlbnRfMS5nZXRVc2VyQWdlbnRTdHJpbmcpKCksXG4gICAgICAgICAgICBwcmV2aWV3czogdW5kZWZpbmVkLFxuICAgICAgICAgICAgcmV0cnk6IHJldHJ5T3B0cyxcbiAgICAgICAgICAgIHJlcXVlc3Q6IHJlcXVlc3RPcHRzXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGdpdGh1YiA9ICgwLCBnaXRodWJfMS5nZXRPY3Rva2l0KSh0b2tlbiwgb3B0cywgcGx1Z2luX3JldHJ5XzEucmV0cnksIHBsdWdpbl9yZXF1ZXN0X2xvZ18xLnJlcXVlc3RMb2cpO1xuICAgICAgICBsZXQgY3VycmVudFBhZ2VOdW1iZXIgPSAxO1xuICAgICAgICBjb25zdCB7IGRhdGE6IGxpc3RBcnRpZmFjdFJlc3BvbnNlIH0gPSB5aWVsZCBnaXRodWIucmVzdC5hY3Rpb25zLmxpc3RXb3JrZmxvd1J1bkFydGlmYWN0cyh7XG4gICAgICAgICAgICBvd25lcjogcmVwb3NpdG9yeU93bmVyLFxuICAgICAgICAgICAgcmVwbzogcmVwb3NpdG9yeU5hbWUsXG4gICAgICAgICAgICBydW5faWQ6IHdvcmtmbG93UnVuSWQsXG4gICAgICAgICAgICBwZXJfcGFnZTogcGFnaW5hdGlvbkNvdW50LFxuICAgICAgICAgICAgcGFnZTogY3VycmVudFBhZ2VOdW1iZXJcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCBudW1iZXJPZlBhZ2VzID0gTWF0aC5jZWlsKGxpc3RBcnRpZmFjdFJlc3BvbnNlLnRvdGFsX2NvdW50IC8gcGFnaW5hdGlvbkNvdW50KTtcbiAgICAgICAgY29uc3QgdG90YWxBcnRpZmFjdENvdW50ID0gbGlzdEFydGlmYWN0UmVzcG9uc2UudG90YWxfY291bnQ7XG4gICAgICAgIGlmICh0b3RhbEFydGlmYWN0Q291bnQgPiBtYXhpbXVtQXJ0aWZhY3RDb3VudCkge1xuICAgICAgICAgICAgKDAsIGNvcmVfMS53YXJuaW5nKShgV29ya2Zsb3cgcnVuICR7d29ya2Zsb3dSdW5JZH0gaGFzIG1vcmUgdGhhbiAxMDAwIGFydGlmYWN0cy4gUmVzdWx0cyB3aWxsIGJlIGluY29tcGxldGUgYXMgb25seSB0aGUgZmlyc3QgJHttYXhpbXVtQXJ0aWZhY3RDb3VudH0gYXJ0aWZhY3RzIHdpbGwgYmUgcmV0dXJuZWRgKTtcbiAgICAgICAgICAgIG51bWJlck9mUGFnZXMgPSBtYXhOdW1iZXJPZlBhZ2VzO1xuICAgICAgICB9XG4gICAgICAgIC8vIEl0ZXJhdGUgb3ZlciB0aGUgZmlyc3QgcGFnZVxuICAgICAgICBmb3IgKGNvbnN0IGFydGlmYWN0IG9mIGxpc3RBcnRpZmFjdFJlc3BvbnNlLmFydGlmYWN0cykge1xuICAgICAgICAgICAgYXJ0aWZhY3RzLnB1c2goe1xuICAgICAgICAgICAgICAgIG5hbWU6IGFydGlmYWN0Lm5hbWUsXG4gICAgICAgICAgICAgICAgaWQ6IGFydGlmYWN0LmlkLFxuICAgICAgICAgICAgICAgIHNpemU6IGFydGlmYWN0LnNpemVfaW5fYnl0ZXMsXG4gICAgICAgICAgICAgICAgY3JlYXRlZEF0OiBhcnRpZmFjdC5jcmVhdGVkX2F0ID8gbmV3IERhdGUoYXJ0aWZhY3QuY3JlYXRlZF9hdCkgOiB1bmRlZmluZWRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIEl0ZXJhdGUgb3ZlciBhbnkgcmVtYWluaW5nIHBhZ2VzXG4gICAgICAgIGZvciAoY3VycmVudFBhZ2VOdW1iZXI7IGN1cnJlbnRQYWdlTnVtYmVyIDwgbnVtYmVyT2ZQYWdlczsgY3VycmVudFBhZ2VOdW1iZXIrKykge1xuICAgICAgICAgICAgY3VycmVudFBhZ2VOdW1iZXIrKztcbiAgICAgICAgICAgICgwLCBjb3JlXzEuZGVidWcpKGBGZXRjaGluZyBwYWdlICR7Y3VycmVudFBhZ2VOdW1iZXJ9IG9mIGFydGlmYWN0IGxpc3RgKTtcbiAgICAgICAgICAgIGNvbnN0IHsgZGF0YTogbGlzdEFydGlmYWN0UmVzcG9uc2UgfSA9IHlpZWxkIGdpdGh1Yi5yZXN0LmFjdGlvbnMubGlzdFdvcmtmbG93UnVuQXJ0aWZhY3RzKHtcbiAgICAgICAgICAgICAgICBvd25lcjogcmVwb3NpdG9yeU93bmVyLFxuICAgICAgICAgICAgICAgIHJlcG86IHJlcG9zaXRvcnlOYW1lLFxuICAgICAgICAgICAgICAgIHJ1bl9pZDogd29ya2Zsb3dSdW5JZCxcbiAgICAgICAgICAgICAgICBwZXJfcGFnZTogcGFnaW5hdGlvbkNvdW50LFxuICAgICAgICAgICAgICAgIHBhZ2U6IGN1cnJlbnRQYWdlTnVtYmVyXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgYXJ0aWZhY3Qgb2YgbGlzdEFydGlmYWN0UmVzcG9uc2UuYXJ0aWZhY3RzKSB7XG4gICAgICAgICAgICAgICAgYXJ0aWZhY3RzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBhcnRpZmFjdC5uYW1lLFxuICAgICAgICAgICAgICAgICAgICBpZDogYXJ0aWZhY3QuaWQsXG4gICAgICAgICAgICAgICAgICAgIHNpemU6IGFydGlmYWN0LnNpemVfaW5fYnl0ZXMsXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZWRBdDogYXJ0aWZhY3QuY3JlYXRlZF9hdFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBuZXcgRGF0ZShhcnRpZmFjdC5jcmVhdGVkX2F0KVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobGF0ZXN0KSB7XG4gICAgICAgICAgICBhcnRpZmFjdHMgPSBmaWx0ZXJMYXRlc3QoYXJ0aWZhY3RzKTtcbiAgICAgICAgfVxuICAgICAgICAoMCwgY29yZV8xLmluZm8pKGBGb3VuZCAke2FydGlmYWN0cy5sZW5ndGh9IGFydGlmYWN0KHMpYCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhcnRpZmFjdHNcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cbmV4cG9ydHMubGlzdEFydGlmYWN0c1B1YmxpYyA9IGxpc3RBcnRpZmFjdHNQdWJsaWM7XG5mdW5jdGlvbiBsaXN0QXJ0aWZhY3RzSW50ZXJuYWwobGF0ZXN0ID0gZmFsc2UpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBhcnRpZmFjdENsaWVudCA9ICgwLCBhcnRpZmFjdF90d2lycF9jbGllbnRfMS5pbnRlcm5hbEFydGlmYWN0VHdpcnBDbGllbnQpKCk7XG4gICAgICAgIGNvbnN0IHsgd29ya2Zsb3dSdW5CYWNrZW5kSWQsIHdvcmtmbG93Sm9iUnVuQmFja2VuZElkIH0gPSAoMCwgdXRpbF8xLmdldEJhY2tlbmRJZHNGcm9tVG9rZW4pKCk7XG4gICAgICAgIGNvbnN0IHJlcSA9IHtcbiAgICAgICAgICAgIHdvcmtmbG93UnVuQmFja2VuZElkLFxuICAgICAgICAgICAgd29ya2Zsb3dKb2JSdW5CYWNrZW5kSWRcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmVzID0geWllbGQgYXJ0aWZhY3RDbGllbnQuTGlzdEFydGlmYWN0cyhyZXEpO1xuICAgICAgICBsZXQgYXJ0aWZhY3RzID0gcmVzLmFydGlmYWN0cy5tYXAoYXJ0aWZhY3QgPT4gKHtcbiAgICAgICAgICAgIG5hbWU6IGFydGlmYWN0Lm5hbWUsXG4gICAgICAgICAgICBpZDogTnVtYmVyKGFydGlmYWN0LmRhdGFiYXNlSWQpLFxuICAgICAgICAgICAgc2l6ZTogTnVtYmVyKGFydGlmYWN0LnNpemUpLFxuICAgICAgICAgICAgY3JlYXRlZEF0OiBhcnRpZmFjdC5jcmVhdGVkQXRcbiAgICAgICAgICAgICAgICA/IGdlbmVyYXRlZF8xLlRpbWVzdGFtcC50b0RhdGUoYXJ0aWZhY3QuY3JlYXRlZEF0KVxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgIH0pKTtcbiAgICAgICAgaWYgKGxhdGVzdCkge1xuICAgICAgICAgICAgYXJ0aWZhY3RzID0gZmlsdGVyTGF0ZXN0KGFydGlmYWN0cyk7XG4gICAgICAgIH1cbiAgICAgICAgKDAsIGNvcmVfMS5pbmZvKShgRm91bmQgJHthcnRpZmFjdHMubGVuZ3RofSBhcnRpZmFjdChzKWApO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYXJ0aWZhY3RzXG4gICAgICAgIH07XG4gICAgfSk7XG59XG5leHBvcnRzLmxpc3RBcnRpZmFjdHNJbnRlcm5hbCA9IGxpc3RBcnRpZmFjdHNJbnRlcm5hbDtcbi8qKlxuICogRmlsdGVycyBhIGxpc3Qgb2YgYXJ0aWZhY3RzIHRvIG9ubHkgaW5jbHVkZSB0aGUgbGF0ZXN0IGFydGlmYWN0IGZvciBlYWNoIG5hbWVcbiAqIEBwYXJhbSBhcnRpZmFjdHMgVGhlIGFydGlmYWN0cyB0byBmaWx0ZXJcbiAqIEByZXR1cm5zIFRoZSBmaWx0ZXJlZCBsaXN0IG9mIGFydGlmYWN0c1xuICovXG5mdW5jdGlvbiBmaWx0ZXJMYXRlc3QoYXJ0aWZhY3RzKSB7XG4gICAgYXJ0aWZhY3RzLnNvcnQoKGEsIGIpID0+IGIuaWQgLSBhLmlkKTtcbiAgICBjb25zdCBsYXRlc3RBcnRpZmFjdHMgPSBbXTtcbiAgICBjb25zdCBzZWVuQXJ0aWZhY3ROYW1lcyA9IG5ldyBTZXQoKTtcbiAgICBmb3IgKGNvbnN0IGFydGlmYWN0IG9mIGFydGlmYWN0cykge1xuICAgICAgICBpZiAoIXNlZW5BcnRpZmFjdE5hbWVzLmhhcyhhcnRpZmFjdC5uYW1lKSkge1xuICAgICAgICAgICAgbGF0ZXN0QXJ0aWZhY3RzLnB1c2goYXJ0aWZhY3QpO1xuICAgICAgICAgICAgc2VlbkFydGlmYWN0TmFtZXMuYWRkKGFydGlmYWN0Lm5hbWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBsYXRlc3RBcnRpZmFjdHM7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1saXN0LWFydGlmYWN0cy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG52YXIgX19yZXN0ID0gKHRoaXMgJiYgdGhpcy5fX3Jlc3QpIHx8IGZ1bmN0aW9uIChzLCBlKSB7XG4gICAgdmFyIHQgPSB7fTtcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcbiAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XG4gICAgICAgIH1cbiAgICByZXR1cm4gdDtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkRlZmF1bHRBcnRpZmFjdENsaWVudCA9IHZvaWQgMDtcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCJAYWN0aW9ucy9jb3JlXCIpO1xuY29uc3QgY29uZmlnXzEgPSByZXF1aXJlKFwiLi9zaGFyZWQvY29uZmlnXCIpO1xuY29uc3QgdXBsb2FkX2FydGlmYWN0XzEgPSByZXF1aXJlKFwiLi91cGxvYWQvdXBsb2FkLWFydGlmYWN0XCIpO1xuY29uc3QgZG93bmxvYWRfYXJ0aWZhY3RfMSA9IHJlcXVpcmUoXCIuL2Rvd25sb2FkL2Rvd25sb2FkLWFydGlmYWN0XCIpO1xuY29uc3QgZGVsZXRlX2FydGlmYWN0XzEgPSByZXF1aXJlKFwiLi9kZWxldGUvZGVsZXRlLWFydGlmYWN0XCIpO1xuY29uc3QgZ2V0X2FydGlmYWN0XzEgPSByZXF1aXJlKFwiLi9maW5kL2dldC1hcnRpZmFjdFwiKTtcbmNvbnN0IGxpc3RfYXJ0aWZhY3RzXzEgPSByZXF1aXJlKFwiLi9maW5kL2xpc3QtYXJ0aWZhY3RzXCIpO1xuY29uc3QgZXJyb3JzXzEgPSByZXF1aXJlKFwiLi9zaGFyZWQvZXJyb3JzXCIpO1xuLyoqXG4gKiBUaGUgZGVmYXVsdCBhcnRpZmFjdCBjbGllbnQgdGhhdCBpcyB1c2VkIGJ5IHRoZSBhcnRpZmFjdCBhY3Rpb24ocykuXG4gKi9cbmNsYXNzIERlZmF1bHRBcnRpZmFjdENsaWVudCB7XG4gICAgdXBsb2FkQXJ0aWZhY3QobmFtZSwgZmlsZXMsIHJvb3REaXJlY3RvcnksIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKCgwLCBjb25maWdfMS5pc0doZXMpKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGVycm9yc18xLkdIRVNOb3RTdXBwb3J0ZWRFcnJvcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gKDAsIHVwbG9hZF9hcnRpZmFjdF8xLnVwbG9hZEFydGlmYWN0KShuYW1lLCBmaWxlcywgcm9vdERpcmVjdG9yeSwgb3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAoMCwgY29yZV8xLndhcm5pbmcpKGBBcnRpZmFjdCB1cGxvYWQgZmFpbGVkIHdpdGggZXJyb3I6ICR7ZXJyb3J9LlxuXG5FcnJvcnMgY2FuIGJlIHRlbXBvcmFyeSwgc28gcGxlYXNlIHRyeSBhZ2FpbiBhbmQgb3B0aW9uYWxseSBydW4gdGhlIGFjdGlvbiB3aXRoIGRlYnVnIG1vZGUgZW5hYmxlZCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cblxuSWYgdGhlIGVycm9yIHBlcnNpc3RzLCBwbGVhc2UgY2hlY2sgd2hldGhlciBBY3Rpb25zIGlzIG9wZXJhdGluZyBub3JtYWxseSBhdCBbaHR0cHM6Ly9naXRodWJzdGF0dXMuY29tXShodHRwczovL3d3dy5naXRodWJzdGF0dXMuY29tKS5gKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGRvd25sb2FkQXJ0aWZhY3QoYXJ0aWZhY3RJZCwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAoKDAsIGNvbmZpZ18xLmlzR2hlcykoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuR0hFU05vdFN1cHBvcnRlZEVycm9yKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuZmluZEJ5KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgZmluZEJ5OiB7IHJlcG9zaXRvcnlPd25lciwgcmVwb3NpdG9yeU5hbWUsIHRva2VuIH0gfSA9IG9wdGlvbnMsIGRvd25sb2FkT3B0aW9ucyA9IF9fcmVzdChvcHRpb25zLCBbXCJmaW5kQnlcIl0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIGRvd25sb2FkX2FydGlmYWN0XzEuZG93bmxvYWRBcnRpZmFjdFB1YmxpYykoYXJ0aWZhY3RJZCwgcmVwb3NpdG9yeU93bmVyLCByZXBvc2l0b3J5TmFtZSwgdG9rZW4sIGRvd25sb2FkT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAoMCwgZG93bmxvYWRfYXJ0aWZhY3RfMS5kb3dubG9hZEFydGlmYWN0SW50ZXJuYWwpKGFydGlmYWN0SWQsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgKDAsIGNvcmVfMS53YXJuaW5nKShgRG93bmxvYWQgQXJ0aWZhY3QgZmFpbGVkIHdpdGggZXJyb3I6ICR7ZXJyb3J9LlxuXG5FcnJvcnMgY2FuIGJlIHRlbXBvcmFyeSwgc28gcGxlYXNlIHRyeSBhZ2FpbiBhbmQgb3B0aW9uYWxseSBydW4gdGhlIGFjdGlvbiB3aXRoIGRlYnVnIG1vZGUgZW5hYmxlZCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cblxuSWYgdGhlIGVycm9yIHBlcnNpc3RzLCBwbGVhc2UgY2hlY2sgd2hldGhlciBBY3Rpb25zIGFuZCBBUEkgcmVxdWVzdHMgYXJlIG9wZXJhdGluZyBub3JtYWxseSBhdCBbaHR0cHM6Ly9naXRodWJzdGF0dXMuY29tXShodHRwczovL3d3dy5naXRodWJzdGF0dXMuY29tKS5gKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGxpc3RBcnRpZmFjdHMob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAoKDAsIGNvbmZpZ18xLmlzR2hlcykoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuR0hFU05vdFN1cHBvcnRlZEVycm9yKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuZmluZEJ5KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgZmluZEJ5OiB7IHdvcmtmbG93UnVuSWQsIHJlcG9zaXRvcnlPd25lciwgcmVwb3NpdG9yeU5hbWUsIHRva2VuIH0gfSA9IG9wdGlvbnM7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgbGlzdF9hcnRpZmFjdHNfMS5saXN0QXJ0aWZhY3RzUHVibGljKSh3b3JrZmxvd1J1bklkLCByZXBvc2l0b3J5T3duZXIsIHJlcG9zaXRvcnlOYW1lLCB0b2tlbiwgb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmxhdGVzdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAoMCwgbGlzdF9hcnRpZmFjdHNfMS5saXN0QXJ0aWZhY3RzSW50ZXJuYWwpKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5sYXRlc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgKDAsIGNvcmVfMS53YXJuaW5nKShgTGlzdGluZyBBcnRpZmFjdHMgZmFpbGVkIHdpdGggZXJyb3I6ICR7ZXJyb3J9LlxuXG5FcnJvcnMgY2FuIGJlIHRlbXBvcmFyeSwgc28gcGxlYXNlIHRyeSBhZ2FpbiBhbmQgb3B0aW9uYWxseSBydW4gdGhlIGFjdGlvbiB3aXRoIGRlYnVnIG1vZGUgZW5hYmxlZCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cblxuSWYgdGhlIGVycm9yIHBlcnNpc3RzLCBwbGVhc2UgY2hlY2sgd2hldGhlciBBY3Rpb25zIGFuZCBBUEkgcmVxdWVzdHMgYXJlIG9wZXJhdGluZyBub3JtYWxseSBhdCBbaHR0cHM6Ly9naXRodWJzdGF0dXMuY29tXShodHRwczovL3d3dy5naXRodWJzdGF0dXMuY29tKS5gKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGdldEFydGlmYWN0KGFydGlmYWN0TmFtZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAoKDAsIGNvbmZpZ18xLmlzR2hlcykoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuR0hFU05vdFN1cHBvcnRlZEVycm9yKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuZmluZEJ5KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgZmluZEJ5OiB7IHdvcmtmbG93UnVuSWQsIHJlcG9zaXRvcnlPd25lciwgcmVwb3NpdG9yeU5hbWUsIHRva2VuIH0gfSA9IG9wdGlvbnM7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgZ2V0X2FydGlmYWN0XzEuZ2V0QXJ0aWZhY3RQdWJsaWMpKGFydGlmYWN0TmFtZSwgd29ya2Zsb3dSdW5JZCwgcmVwb3NpdG9yeU93bmVyLCByZXBvc2l0b3J5TmFtZSwgdG9rZW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gKDAsIGdldF9hcnRpZmFjdF8xLmdldEFydGlmYWN0SW50ZXJuYWwpKGFydGlmYWN0TmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAoMCwgY29yZV8xLndhcm5pbmcpKGBHZXQgQXJ0aWZhY3QgZmFpbGVkIHdpdGggZXJyb3I6ICR7ZXJyb3J9LlxuXG5FcnJvcnMgY2FuIGJlIHRlbXBvcmFyeSwgc28gcGxlYXNlIHRyeSBhZ2FpbiBhbmQgb3B0aW9uYWxseSBydW4gdGhlIGFjdGlvbiB3aXRoIGRlYnVnIG1vZGUgZW5hYmxlZCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cblxuSWYgdGhlIGVycm9yIHBlcnNpc3RzLCBwbGVhc2UgY2hlY2sgd2hldGhlciBBY3Rpb25zIGFuZCBBUEkgcmVxdWVzdHMgYXJlIG9wZXJhdGluZyBub3JtYWxseSBhdCBbaHR0cHM6Ly9naXRodWJzdGF0dXMuY29tXShodHRwczovL3d3dy5naXRodWJzdGF0dXMuY29tKS5gKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGRlbGV0ZUFydGlmYWN0KGFydGlmYWN0TmFtZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAoKDAsIGNvbmZpZ18xLmlzR2hlcykoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuR0hFU05vdFN1cHBvcnRlZEVycm9yKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuZmluZEJ5KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgZmluZEJ5OiB7IHJlcG9zaXRvcnlPd25lciwgcmVwb3NpdG9yeU5hbWUsIHdvcmtmbG93UnVuSWQsIHRva2VuIH0gfSA9IG9wdGlvbnM7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgZGVsZXRlX2FydGlmYWN0XzEuZGVsZXRlQXJ0aWZhY3RQdWJsaWMpKGFydGlmYWN0TmFtZSwgd29ya2Zsb3dSdW5JZCwgcmVwb3NpdG9yeU93bmVyLCByZXBvc2l0b3J5TmFtZSwgdG9rZW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gKDAsIGRlbGV0ZV9hcnRpZmFjdF8xLmRlbGV0ZUFydGlmYWN0SW50ZXJuYWwpKGFydGlmYWN0TmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAoMCwgY29yZV8xLndhcm5pbmcpKGBEZWxldGUgQXJ0aWZhY3QgZmFpbGVkIHdpdGggZXJyb3I6ICR7ZXJyb3J9LlxuXG5FcnJvcnMgY2FuIGJlIHRlbXBvcmFyeSwgc28gcGxlYXNlIHRyeSBhZ2FpbiBhbmQgb3B0aW9uYWxseSBydW4gdGhlIGFjdGlvbiB3aXRoIGRlYnVnIG1vZGUgZW5hYmxlZCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cblxuSWYgdGhlIGVycm9yIHBlcnNpc3RzLCBwbGVhc2UgY2hlY2sgd2hldGhlciBBY3Rpb25zIGFuZCBBUEkgcmVxdWVzdHMgYXJlIG9wZXJhdGluZyBub3JtYWxseSBhdCBbaHR0cHM6Ly9naXRodWJzdGF0dXMuY29tXShodHRwczovL3d3dy5naXRodWJzdGF0dXMuY29tKS5gKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0cy5EZWZhdWx0QXJ0aWZhY3RDbGllbnQgPSBEZWZhdWx0QXJ0aWZhY3RDbGllbnQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jbGllbnQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWludGVyZmFjZXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19leHBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2V4cG9ydFN0YXIpIHx8IGZ1bmN0aW9uKG0sIGV4cG9ydHMpIHtcbiAgICBmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGV4cG9ydHMsIHApKSBfX2NyZWF0ZUJpbmRpbmcoZXhwb3J0cywgbSwgcCk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY2xpZW50XzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9jbGllbnRcIik7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vaW50ZXJuYWwvc2hhcmVkL2ludGVyZmFjZXNcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2ludGVybmFsL3NoYXJlZC9lcnJvcnNcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2ludGVybmFsL2NsaWVudFwiKSwgZXhwb3J0cyk7XG5jb25zdCBjbGllbnQgPSBuZXcgY2xpZW50XzEuRGVmYXVsdEFydGlmYWN0Q2xpZW50KCk7XG5leHBvcnRzLmRlZmF1bHQgPSBjbGllbnQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hcnRpZmFjdC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Db250ZXh0ID0gdm9pZCAwO1xuY29uc3QgZnNfMSA9IHJlcXVpcmUoXCJmc1wiKTtcbmNvbnN0IG9zXzEgPSByZXF1aXJlKFwib3NcIik7XG5jbGFzcyBDb250ZXh0IHtcbiAgICAvKipcbiAgICAgKiBIeWRyYXRlIHRoZSBjb250ZXh0IGZyb20gdGhlIGVudmlyb25tZW50XG4gICAgICovXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jO1xuICAgICAgICB0aGlzLnBheWxvYWQgPSB7fTtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52LkdJVEhVQl9FVkVOVF9QQVRIKSB7XG4gICAgICAgICAgICBpZiAoKDAsIGZzXzEuZXhpc3RzU3luYykocHJvY2Vzcy5lbnYuR0lUSFVCX0VWRU5UX1BBVEgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYXlsb2FkID0gSlNPTi5wYXJzZSgoMCwgZnNfMS5yZWFkRmlsZVN5bmMpKHByb2Nlc3MuZW52LkdJVEhVQl9FVkVOVF9QQVRILCB7IGVuY29kaW5nOiAndXRmOCcgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IHByb2Nlc3MuZW52LkdJVEhVQl9FVkVOVF9QQVRIO1xuICAgICAgICAgICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGBHSVRIVUJfRVZFTlRfUEFUSCAke3BhdGh9IGRvZXMgbm90IGV4aXN0JHtvc18xLkVPTH1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmV2ZW50TmFtZSA9IHByb2Nlc3MuZW52LkdJVEhVQl9FVkVOVF9OQU1FO1xuICAgICAgICB0aGlzLnNoYSA9IHByb2Nlc3MuZW52LkdJVEhVQl9TSEE7XG4gICAgICAgIHRoaXMucmVmID0gcHJvY2Vzcy5lbnYuR0lUSFVCX1JFRjtcbiAgICAgICAgdGhpcy53b3JrZmxvdyA9IHByb2Nlc3MuZW52LkdJVEhVQl9XT1JLRkxPVztcbiAgICAgICAgdGhpcy5hY3Rpb24gPSBwcm9jZXNzLmVudi5HSVRIVUJfQUNUSU9OO1xuICAgICAgICB0aGlzLmFjdG9yID0gcHJvY2Vzcy5lbnYuR0lUSFVCX0FDVE9SO1xuICAgICAgICB0aGlzLmpvYiA9IHByb2Nlc3MuZW52LkdJVEhVQl9KT0I7XG4gICAgICAgIHRoaXMucnVuTnVtYmVyID0gcGFyc2VJbnQocHJvY2Vzcy5lbnYuR0lUSFVCX1JVTl9OVU1CRVIsIDEwKTtcbiAgICAgICAgdGhpcy5ydW5JZCA9IHBhcnNlSW50KHByb2Nlc3MuZW52LkdJVEhVQl9SVU5fSUQsIDEwKTtcbiAgICAgICAgdGhpcy5hcGlVcmwgPSAoX2EgPSBwcm9jZXNzLmVudi5HSVRIVUJfQVBJX1VSTCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogYGh0dHBzOi8vYXBpLmdpdGh1Yi5jb21gO1xuICAgICAgICB0aGlzLnNlcnZlclVybCA9IChfYiA9IHByb2Nlc3MuZW52LkdJVEhVQl9TRVJWRVJfVVJMKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBgaHR0cHM6Ly9naXRodWIuY29tYDtcbiAgICAgICAgdGhpcy5ncmFwaHFsVXJsID1cbiAgICAgICAgICAgIChfYyA9IHByb2Nlc3MuZW52LkdJVEhVQl9HUkFQSFFMX1VSTCkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogYGh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vZ3JhcGhxbGA7XG4gICAgfVxuICAgIGdldCBpc3N1ZSgpIHtcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IHRoaXMucGF5bG9hZDtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5yZXBvKSwgeyBudW1iZXI6IChwYXlsb2FkLmlzc3VlIHx8IHBheWxvYWQucHVsbF9yZXF1ZXN0IHx8IHBheWxvYWQpLm51bWJlciB9KTtcbiAgICB9XG4gICAgZ2V0IHJlcG8oKSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5HSVRIVUJfUkVQT1NJVE9SWSkge1xuICAgICAgICAgICAgY29uc3QgW293bmVyLCByZXBvXSA9IHByb2Nlc3MuZW52LkdJVEhVQl9SRVBPU0lUT1JZLnNwbGl0KCcvJyk7XG4gICAgICAgICAgICByZXR1cm4geyBvd25lciwgcmVwbyB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnBheWxvYWQucmVwb3NpdG9yeSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBvd25lcjogdGhpcy5wYXlsb2FkLnJlcG9zaXRvcnkub3duZXIubG9naW4sXG4gICAgICAgICAgICAgICAgcmVwbzogdGhpcy5wYXlsb2FkLnJlcG9zaXRvcnkubmFtZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJjb250ZXh0LnJlcG8gcmVxdWlyZXMgYSBHSVRIVUJfUkVQT1NJVE9SWSBlbnZpcm9ubWVudCB2YXJpYWJsZSBsaWtlICdvd25lci9yZXBvJ1wiKTtcbiAgICB9XG59XG5leHBvcnRzLkNvbnRleHQgPSBDb250ZXh0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29udGV4dC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0QXBpQmFzZVVybCA9IGV4cG9ydHMuZ2V0UHJveHlGZXRjaCA9IGV4cG9ydHMuZ2V0UHJveHlBZ2VudERpc3BhdGNoZXIgPSBleHBvcnRzLmdldFByb3h5QWdlbnQgPSBleHBvcnRzLmdldEF1dGhTdHJpbmcgPSB2b2lkIDA7XG5jb25zdCBodHRwQ2xpZW50ID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJAYWN0aW9ucy9odHRwLWNsaWVudFwiKSk7XG5jb25zdCB1bmRpY2lfMSA9IHJlcXVpcmUoXCJ1bmRpY2lcIik7XG5mdW5jdGlvbiBnZXRBdXRoU3RyaW5nKHRva2VuLCBvcHRpb25zKSB7XG4gICAgaWYgKCF0b2tlbiAmJiAhb3B0aW9ucy5hdXRoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUGFyYW1ldGVyIHRva2VuIG9yIG9wdHMuYXV0aCBpcyByZXF1aXJlZCcpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0b2tlbiAmJiBvcHRpb25zLmF1dGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJhbWV0ZXJzIHRva2VuIGFuZCBvcHRzLmF1dGggbWF5IG5vdCBib3RoIGJlIHNwZWNpZmllZCcpO1xuICAgIH1cbiAgICByZXR1cm4gdHlwZW9mIG9wdGlvbnMuYXV0aCA9PT0gJ3N0cmluZycgPyBvcHRpb25zLmF1dGggOiBgdG9rZW4gJHt0b2tlbn1gO1xufVxuZXhwb3J0cy5nZXRBdXRoU3RyaW5nID0gZ2V0QXV0aFN0cmluZztcbmZ1bmN0aW9uIGdldFByb3h5QWdlbnQoZGVzdGluYXRpb25VcmwpIHtcbiAgICBjb25zdCBoYyA9IG5ldyBodHRwQ2xpZW50Lkh0dHBDbGllbnQoKTtcbiAgICByZXR1cm4gaGMuZ2V0QWdlbnQoZGVzdGluYXRpb25VcmwpO1xufVxuZXhwb3J0cy5nZXRQcm94eUFnZW50ID0gZ2V0UHJveHlBZ2VudDtcbmZ1bmN0aW9uIGdldFByb3h5QWdlbnREaXNwYXRjaGVyKGRlc3RpbmF0aW9uVXJsKSB7XG4gICAgY29uc3QgaGMgPSBuZXcgaHR0cENsaWVudC5IdHRwQ2xpZW50KCk7XG4gICAgcmV0dXJuIGhjLmdldEFnZW50RGlzcGF0Y2hlcihkZXN0aW5hdGlvblVybCk7XG59XG5leHBvcnRzLmdldFByb3h5QWdlbnREaXNwYXRjaGVyID0gZ2V0UHJveHlBZ2VudERpc3BhdGNoZXI7XG5mdW5jdGlvbiBnZXRQcm94eUZldGNoKGRlc3RpbmF0aW9uVXJsKSB7XG4gICAgY29uc3QgaHR0cERpc3BhdGNoZXIgPSBnZXRQcm94eUFnZW50RGlzcGF0Y2hlcihkZXN0aW5hdGlvblVybCk7XG4gICAgY29uc3QgcHJveHlGZXRjaCA9ICh1cmwsIG9wdHMpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgcmV0dXJuICgwLCB1bmRpY2lfMS5mZXRjaCkodXJsLCBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdHMpLCB7IGRpc3BhdGNoZXI6IGh0dHBEaXNwYXRjaGVyIH0pKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcHJveHlGZXRjaDtcbn1cbmV4cG9ydHMuZ2V0UHJveHlGZXRjaCA9IGdldFByb3h5RmV0Y2g7XG5mdW5jdGlvbiBnZXRBcGlCYXNlVXJsKCkge1xuICAgIHJldHVybiBwcm9jZXNzLmVudlsnR0lUSFVCX0FQSV9VUkwnXSB8fCAnaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbSc7XG59XG5leHBvcnRzLmdldEFwaUJhc2VVcmwgPSBnZXRBcGlCYXNlVXJsO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbHMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wRGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgX19nZXRPd25Qcm9wTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcztcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fZXhwb3J0ID0gKHRhcmdldCwgYWxsKSA9PiB7XG4gIGZvciAodmFyIG5hbWUgaW4gYWxsKVxuICAgIF9fZGVmUHJvcCh0YXJnZXQsIG5hbWUsIHsgZ2V0OiBhbGxbbmFtZV0sIGVudW1lcmFibGU6IHRydWUgfSk7XG59O1xudmFyIF9fY29weVByb3BzID0gKHRvLCBmcm9tLCBleGNlcHQsIGRlc2MpID0+IHtcbiAgaWYgKGZyb20gJiYgdHlwZW9mIGZyb20gPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGZyb20gPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGZvciAobGV0IGtleSBvZiBfX2dldE93blByb3BOYW1lcyhmcm9tKSlcbiAgICAgIGlmICghX19oYXNPd25Qcm9wLmNhbGwodG8sIGtleSkgJiYga2V5ICE9PSBleGNlcHQpXG4gICAgICAgIF9fZGVmUHJvcCh0bywga2V5LCB7IGdldDogKCkgPT4gZnJvbVtrZXldLCBlbnVtZXJhYmxlOiAhKGRlc2MgPSBfX2dldE93blByb3BEZXNjKGZyb20sIGtleSkpIHx8IGRlc2MuZW51bWVyYWJsZSB9KTtcbiAgfVxuICByZXR1cm4gdG87XG59O1xudmFyIF9fdG9Db21tb25KUyA9IChtb2QpID0+IF9fY29weVByb3BzKF9fZGVmUHJvcCh7fSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSksIG1vZCk7XG5cbi8vIHBrZy9kaXN0LXNyYy9pbmRleC5qc1xudmFyIGRpc3Rfc3JjX2V4cG9ydHMgPSB7fTtcbl9fZXhwb3J0KGRpc3Rfc3JjX2V4cG9ydHMsIHtcbiAgZW5kcG9pbnQ6ICgpID0+IGVuZHBvaW50XG59KTtcbm1vZHVsZS5leHBvcnRzID0gX190b0NvbW1vbkpTKGRpc3Rfc3JjX2V4cG9ydHMpO1xuXG4vLyBwa2cvZGlzdC1zcmMvZGVmYXVsdHMuanNcbnZhciBpbXBvcnRfdW5pdmVyc2FsX3VzZXJfYWdlbnQgPSByZXF1aXJlKFwidW5pdmVyc2FsLXVzZXItYWdlbnRcIik7XG5cbi8vIHBrZy9kaXN0LXNyYy92ZXJzaW9uLmpzXG52YXIgVkVSU0lPTiA9IFwiOS4wLjVcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL2RlZmF1bHRzLmpzXG52YXIgdXNlckFnZW50ID0gYG9jdG9raXQtZW5kcG9pbnQuanMvJHtWRVJTSU9OfSAkeygwLCBpbXBvcnRfdW5pdmVyc2FsX3VzZXJfYWdlbnQuZ2V0VXNlckFnZW50KSgpfWA7XG52YXIgREVGQVVMVFMgPSB7XG4gIG1ldGhvZDogXCJHRVRcIixcbiAgYmFzZVVybDogXCJodHRwczovL2FwaS5naXRodWIuY29tXCIsXG4gIGhlYWRlcnM6IHtcbiAgICBhY2NlcHQ6IFwiYXBwbGljYXRpb24vdm5kLmdpdGh1Yi52Mytqc29uXCIsXG4gICAgXCJ1c2VyLWFnZW50XCI6IHVzZXJBZ2VudFxuICB9LFxuICBtZWRpYVR5cGU6IHtcbiAgICBmb3JtYXQ6IFwiXCJcbiAgfVxufTtcblxuLy8gcGtnL2Rpc3Qtc3JjL3V0aWwvbG93ZXJjYXNlLWtleXMuanNcbmZ1bmN0aW9uIGxvd2VyY2FzZUtleXMob2JqZWN0KSB7XG4gIGlmICghb2JqZWN0KSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmplY3QpLnJlZHVjZSgobmV3T2JqLCBrZXkpID0+IHtcbiAgICBuZXdPYmpba2V5LnRvTG93ZXJDYXNlKCldID0gb2JqZWN0W2tleV07XG4gICAgcmV0dXJuIG5ld09iajtcbiAgfSwge30pO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC9pcy1wbGFpbi1vYmplY3QuanNcbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fCB2YWx1ZSA9PT0gbnVsbClcbiAgICByZXR1cm4gZmFsc2U7XG4gIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpICE9PSBcIltvYmplY3QgT2JqZWN0XVwiKVxuICAgIHJldHVybiBmYWxzZTtcbiAgY29uc3QgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpO1xuICBpZiAocHJvdG8gPT09IG51bGwpXG4gICAgcmV0dXJuIHRydWU7XG4gIGNvbnN0IEN0b3IgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocHJvdG8sIFwiY29uc3RydWN0b3JcIikgJiYgcHJvdG8uY29uc3RydWN0b3I7XG4gIHJldHVybiB0eXBlb2YgQ3RvciA9PT0gXCJmdW5jdGlvblwiICYmIEN0b3IgaW5zdGFuY2VvZiBDdG9yICYmIEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsKEN0b3IpID09PSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbCh2YWx1ZSk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy91dGlsL21lcmdlLWRlZXAuanNcbmZ1bmN0aW9uIG1lcmdlRGVlcChkZWZhdWx0cywgb3B0aW9ucykge1xuICBjb25zdCByZXN1bHQgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0cyk7XG4gIE9iamVjdC5rZXlzKG9wdGlvbnMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgIGlmIChpc1BsYWluT2JqZWN0KG9wdGlvbnNba2V5XSkpIHtcbiAgICAgIGlmICghKGtleSBpbiBkZWZhdWx0cykpXG4gICAgICAgIE9iamVjdC5hc3NpZ24ocmVzdWx0LCB7IFtrZXldOiBvcHRpb25zW2tleV0gfSk7XG4gICAgICBlbHNlXG4gICAgICAgIHJlc3VsdFtrZXldID0gbWVyZ2VEZWVwKGRlZmF1bHRzW2tleV0sIG9wdGlvbnNba2V5XSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIE9iamVjdC5hc3NpZ24ocmVzdWx0LCB7IFtrZXldOiBvcHRpb25zW2tleV0gfSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3V0aWwvcmVtb3ZlLXVuZGVmaW5lZC1wcm9wZXJ0aWVzLmpzXG5mdW5jdGlvbiByZW1vdmVVbmRlZmluZWRQcm9wZXJ0aWVzKG9iaikge1xuICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICBpZiAob2JqW2tleV0gPT09IHZvaWQgMCkge1xuICAgICAgZGVsZXRlIG9ialtrZXldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb2JqO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvbWVyZ2UuanNcbmZ1bmN0aW9uIG1lcmdlKGRlZmF1bHRzLCByb3V0ZSwgb3B0aW9ucykge1xuICBpZiAodHlwZW9mIHJvdXRlID09PSBcInN0cmluZ1wiKSB7XG4gICAgbGV0IFttZXRob2QsIHVybF0gPSByb3V0ZS5zcGxpdChcIiBcIik7XG4gICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24odXJsID8geyBtZXRob2QsIHVybCB9IDogeyB1cmw6IG1ldGhvZCB9LCBvcHRpb25zKTtcbiAgfSBlbHNlIHtcbiAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgcm91dGUpO1xuICB9XG4gIG9wdGlvbnMuaGVhZGVycyA9IGxvd2VyY2FzZUtleXMob3B0aW9ucy5oZWFkZXJzKTtcbiAgcmVtb3ZlVW5kZWZpbmVkUHJvcGVydGllcyhvcHRpb25zKTtcbiAgcmVtb3ZlVW5kZWZpbmVkUHJvcGVydGllcyhvcHRpb25zLmhlYWRlcnMpO1xuICBjb25zdCBtZXJnZWRPcHRpb25zID0gbWVyZ2VEZWVwKGRlZmF1bHRzIHx8IHt9LCBvcHRpb25zKTtcbiAgaWYgKG9wdGlvbnMudXJsID09PSBcIi9ncmFwaHFsXCIpIHtcbiAgICBpZiAoZGVmYXVsdHMgJiYgZGVmYXVsdHMubWVkaWFUeXBlLnByZXZpZXdzPy5sZW5ndGgpIHtcbiAgICAgIG1lcmdlZE9wdGlvbnMubWVkaWFUeXBlLnByZXZpZXdzID0gZGVmYXVsdHMubWVkaWFUeXBlLnByZXZpZXdzLmZpbHRlcihcbiAgICAgICAgKHByZXZpZXcpID0+ICFtZXJnZWRPcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cy5pbmNsdWRlcyhwcmV2aWV3KVxuICAgICAgKS5jb25jYXQobWVyZ2VkT3B0aW9ucy5tZWRpYVR5cGUucHJldmlld3MpO1xuICAgIH1cbiAgICBtZXJnZWRPcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cyA9IChtZXJnZWRPcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cyB8fCBbXSkubWFwKChwcmV2aWV3KSA9PiBwcmV2aWV3LnJlcGxhY2UoLy1wcmV2aWV3LywgXCJcIikpO1xuICB9XG4gIHJldHVybiBtZXJnZWRPcHRpb25zO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC9hZGQtcXVlcnktcGFyYW1ldGVycy5qc1xuZnVuY3Rpb24gYWRkUXVlcnlQYXJhbWV0ZXJzKHVybCwgcGFyYW1ldGVycykge1xuICBjb25zdCBzZXBhcmF0b3IgPSAvXFw/Ly50ZXN0KHVybCkgPyBcIiZcIiA6IFwiP1wiO1xuICBjb25zdCBuYW1lcyA9IE9iamVjdC5rZXlzKHBhcmFtZXRlcnMpO1xuICBpZiAobmFtZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuICByZXR1cm4gdXJsICsgc2VwYXJhdG9yICsgbmFtZXMubWFwKChuYW1lKSA9PiB7XG4gICAgaWYgKG5hbWUgPT09IFwicVwiKSB7XG4gICAgICByZXR1cm4gXCJxPVwiICsgcGFyYW1ldGVycy5xLnNwbGl0KFwiK1wiKS5tYXAoZW5jb2RlVVJJQ29tcG9uZW50KS5qb2luKFwiK1wiKTtcbiAgICB9XG4gICAgcmV0dXJuIGAke25hbWV9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtZXRlcnNbbmFtZV0pfWA7XG4gIH0pLmpvaW4oXCImXCIpO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC9leHRyYWN0LXVybC12YXJpYWJsZS1uYW1lcy5qc1xudmFyIHVybFZhcmlhYmxlUmVnZXggPSAvXFx7W159XStcXH0vZztcbmZ1bmN0aW9uIHJlbW92ZU5vbkNoYXJzKHZhcmlhYmxlTmFtZSkge1xuICByZXR1cm4gdmFyaWFibGVOYW1lLnJlcGxhY2UoL15cXFcrfFxcVyskL2csIFwiXCIpLnNwbGl0KC8sLyk7XG59XG5mdW5jdGlvbiBleHRyYWN0VXJsVmFyaWFibGVOYW1lcyh1cmwpIHtcbiAgY29uc3QgbWF0Y2hlcyA9IHVybC5tYXRjaCh1cmxWYXJpYWJsZVJlZ2V4KTtcbiAgaWYgKCFtYXRjaGVzKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHJldHVybiBtYXRjaGVzLm1hcChyZW1vdmVOb25DaGFycykucmVkdWNlKChhLCBiKSA9PiBhLmNvbmNhdChiKSwgW10pO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC9vbWl0LmpzXG5mdW5jdGlvbiBvbWl0KG9iamVjdCwga2V5c1RvT21pdCkge1xuICBjb25zdCByZXN1bHQgPSB7IF9fcHJvdG9fXzogbnVsbCB9O1xuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhvYmplY3QpKSB7XG4gICAgaWYgKGtleXNUb09taXQuaW5kZXhPZihrZXkpID09PSAtMSkge1xuICAgICAgcmVzdWx0W2tleV0gPSBvYmplY3Rba2V5XTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3V0aWwvdXJsLXRlbXBsYXRlLmpzXG5mdW5jdGlvbiBlbmNvZGVSZXNlcnZlZChzdHIpIHtcbiAgcmV0dXJuIHN0ci5zcGxpdCgvKCVbMC05QS1GYS1mXXsyfSkvZykubWFwKGZ1bmN0aW9uKHBhcnQpIHtcbiAgICBpZiAoIS8lWzAtOUEtRmEtZl0vLnRlc3QocGFydCkpIHtcbiAgICAgIHBhcnQgPSBlbmNvZGVVUkkocGFydCkucmVwbGFjZSgvJTVCL2csIFwiW1wiKS5yZXBsYWNlKC8lNUQvZywgXCJdXCIpO1xuICAgIH1cbiAgICByZXR1cm4gcGFydDtcbiAgfSkuam9pbihcIlwiKTtcbn1cbmZ1bmN0aW9uIGVuY29kZVVucmVzZXJ2ZWQoc3RyKSB7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3RyKS5yZXBsYWNlKC9bIScoKSpdL2csIGZ1bmN0aW9uKGMpIHtcbiAgICByZXR1cm4gXCIlXCIgKyBjLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7XG4gIH0pO1xufVxuZnVuY3Rpb24gZW5jb2RlVmFsdWUob3BlcmF0b3IsIHZhbHVlLCBrZXkpIHtcbiAgdmFsdWUgPSBvcGVyYXRvciA9PT0gXCIrXCIgfHwgb3BlcmF0b3IgPT09IFwiI1wiID8gZW5jb2RlUmVzZXJ2ZWQodmFsdWUpIDogZW5jb2RlVW5yZXNlcnZlZCh2YWx1ZSk7XG4gIGlmIChrZXkpIHtcbiAgICByZXR1cm4gZW5jb2RlVW5yZXNlcnZlZChrZXkpICsgXCI9XCIgKyB2YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cbmZ1bmN0aW9uIGlzRGVmaW5lZCh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IHZvaWQgMCAmJiB2YWx1ZSAhPT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzS2V5T3BlcmF0b3Iob3BlcmF0b3IpIHtcbiAgcmV0dXJuIG9wZXJhdG9yID09PSBcIjtcIiB8fCBvcGVyYXRvciA9PT0gXCImXCIgfHwgb3BlcmF0b3IgPT09IFwiP1wiO1xufVxuZnVuY3Rpb24gZ2V0VmFsdWVzKGNvbnRleHQsIG9wZXJhdG9yLCBrZXksIG1vZGlmaWVyKSB7XG4gIHZhciB2YWx1ZSA9IGNvbnRleHRba2V5XSwgcmVzdWx0ID0gW107XG4gIGlmIChpc0RlZmluZWQodmFsdWUpICYmIHZhbHVlICE9PSBcIlwiKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgdmFsdWUgPSB2YWx1ZS50b1N0cmluZygpO1xuICAgICAgaWYgKG1vZGlmaWVyICYmIG1vZGlmaWVyICE9PSBcIipcIikge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZygwLCBwYXJzZUludChtb2RpZmllciwgMTApKTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICBlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWUsIGlzS2V5T3BlcmF0b3Iob3BlcmF0b3IpID8ga2V5IDogXCJcIilcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChtb2RpZmllciA9PT0gXCIqXCIpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgdmFsdWUuZmlsdGVyKGlzRGVmaW5lZCkuZm9yRWFjaChmdW5jdGlvbih2YWx1ZTIpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICAgICAgICBlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWUyLCBpc0tleU9wZXJhdG9yKG9wZXJhdG9yKSA/IGtleSA6IFwiXCIpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIE9iamVjdC5rZXlzKHZhbHVlKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHtcbiAgICAgICAgICAgIGlmIChpc0RlZmluZWQodmFsdWVba10pKSB7XG4gICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGVuY29kZVZhbHVlKG9wZXJhdG9yLCB2YWx1ZVtrXSwgaykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB0bXAgPSBbXTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgdmFsdWUuZmlsdGVyKGlzRGVmaW5lZCkuZm9yRWFjaChmdW5jdGlvbih2YWx1ZTIpIHtcbiAgICAgICAgICAgIHRtcC5wdXNoKGVuY29kZVZhbHVlKG9wZXJhdG9yLCB2YWx1ZTIpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBPYmplY3Qua2V5cyh2YWx1ZSkuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgICAgICAgICBpZiAoaXNEZWZpbmVkKHZhbHVlW2tdKSkge1xuICAgICAgICAgICAgICB0bXAucHVzaChlbmNvZGVVbnJlc2VydmVkKGspKTtcbiAgICAgICAgICAgICAgdG1wLnB1c2goZW5jb2RlVmFsdWUob3BlcmF0b3IsIHZhbHVlW2tdLnRvU3RyaW5nKCkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNLZXlPcGVyYXRvcihvcGVyYXRvcikpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChlbmNvZGVVbnJlc2VydmVkKGtleSkgKyBcIj1cIiArIHRtcC5qb2luKFwiLFwiKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodG1wLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKHRtcC5qb2luKFwiLFwiKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKG9wZXJhdG9yID09PSBcIjtcIikge1xuICAgICAgaWYgKGlzRGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goZW5jb2RlVW5yZXNlcnZlZChrZXkpKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBcIlwiICYmIChvcGVyYXRvciA9PT0gXCImXCIgfHwgb3BlcmF0b3IgPT09IFwiP1wiKSkge1xuICAgICAgcmVzdWx0LnB1c2goZW5jb2RlVW5yZXNlcnZlZChrZXkpICsgXCI9XCIpO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFwiXCIpIHtcbiAgICAgIHJlc3VsdC5wdXNoKFwiXCIpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gcGFyc2VVcmwodGVtcGxhdGUpIHtcbiAgcmV0dXJuIHtcbiAgICBleHBhbmQ6IGV4cGFuZC5iaW5kKG51bGwsIHRlbXBsYXRlKVxuICB9O1xufVxuZnVuY3Rpb24gZXhwYW5kKHRlbXBsYXRlLCBjb250ZXh0KSB7XG4gIHZhciBvcGVyYXRvcnMgPSBbXCIrXCIsIFwiI1wiLCBcIi5cIiwgXCIvXCIsIFwiO1wiLCBcIj9cIiwgXCImXCJdO1xuICB0ZW1wbGF0ZSA9IHRlbXBsYXRlLnJlcGxhY2UoXG4gICAgL1xceyhbXlxce1xcfV0rKVxcfXwoW15cXHtcXH1dKykvZyxcbiAgICBmdW5jdGlvbihfLCBleHByZXNzaW9uLCBsaXRlcmFsKSB7XG4gICAgICBpZiAoZXhwcmVzc2lvbikge1xuICAgICAgICBsZXQgb3BlcmF0b3IgPSBcIlwiO1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBbXTtcbiAgICAgICAgaWYgKG9wZXJhdG9ycy5pbmRleE9mKGV4cHJlc3Npb24uY2hhckF0KDApKSAhPT0gLTEpIHtcbiAgICAgICAgICBvcGVyYXRvciA9IGV4cHJlc3Npb24uY2hhckF0KDApO1xuICAgICAgICAgIGV4cHJlc3Npb24gPSBleHByZXNzaW9uLnN1YnN0cigxKTtcbiAgICAgICAgfVxuICAgICAgICBleHByZXNzaW9uLnNwbGl0KC8sL2cpLmZvckVhY2goZnVuY3Rpb24odmFyaWFibGUpIHtcbiAgICAgICAgICB2YXIgdG1wID0gLyhbXjpcXCpdKikoPzo6KFxcZCspfChcXCopKT8vLmV4ZWModmFyaWFibGUpO1xuICAgICAgICAgIHZhbHVlcy5wdXNoKGdldFZhbHVlcyhjb250ZXh0LCBvcGVyYXRvciwgdG1wWzFdLCB0bXBbMl0gfHwgdG1wWzNdKSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAob3BlcmF0b3IgJiYgb3BlcmF0b3IgIT09IFwiK1wiKSB7XG4gICAgICAgICAgdmFyIHNlcGFyYXRvciA9IFwiLFwiO1xuICAgICAgICAgIGlmIChvcGVyYXRvciA9PT0gXCI/XCIpIHtcbiAgICAgICAgICAgIHNlcGFyYXRvciA9IFwiJlwiO1xuICAgICAgICAgIH0gZWxzZSBpZiAob3BlcmF0b3IgIT09IFwiI1wiKSB7XG4gICAgICAgICAgICBzZXBhcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuICh2YWx1ZXMubGVuZ3RoICE9PSAwID8gb3BlcmF0b3IgOiBcIlwiKSArIHZhbHVlcy5qb2luKHNlcGFyYXRvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlcy5qb2luKFwiLFwiKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGVuY29kZVJlc2VydmVkKGxpdGVyYWwpO1xuICAgICAgfVxuICAgIH1cbiAgKTtcbiAgaWYgKHRlbXBsYXRlID09PSBcIi9cIikge1xuICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdGVtcGxhdGUucmVwbGFjZSgvXFwvJC8sIFwiXCIpO1xuICB9XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9wYXJzZS5qc1xuZnVuY3Rpb24gcGFyc2Uob3B0aW9ucykge1xuICBsZXQgbWV0aG9kID0gb3B0aW9ucy5tZXRob2QudG9VcHBlckNhc2UoKTtcbiAgbGV0IHVybCA9IChvcHRpb25zLnVybCB8fCBcIi9cIikucmVwbGFjZSgvOihbYS16XVxcdyspL2csIFwieyQxfVwiKTtcbiAgbGV0IGhlYWRlcnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmhlYWRlcnMpO1xuICBsZXQgYm9keTtcbiAgbGV0IHBhcmFtZXRlcnMgPSBvbWl0KG9wdGlvbnMsIFtcbiAgICBcIm1ldGhvZFwiLFxuICAgIFwiYmFzZVVybFwiLFxuICAgIFwidXJsXCIsXG4gICAgXCJoZWFkZXJzXCIsXG4gICAgXCJyZXF1ZXN0XCIsXG4gICAgXCJtZWRpYVR5cGVcIlxuICBdKTtcbiAgY29uc3QgdXJsVmFyaWFibGVOYW1lcyA9IGV4dHJhY3RVcmxWYXJpYWJsZU5hbWVzKHVybCk7XG4gIHVybCA9IHBhcnNlVXJsKHVybCkuZXhwYW5kKHBhcmFtZXRlcnMpO1xuICBpZiAoIS9eaHR0cC8udGVzdCh1cmwpKSB7XG4gICAgdXJsID0gb3B0aW9ucy5iYXNlVXJsICsgdXJsO1xuICB9XG4gIGNvbnN0IG9taXR0ZWRQYXJhbWV0ZXJzID0gT2JqZWN0LmtleXMob3B0aW9ucykuZmlsdGVyKChvcHRpb24pID0+IHVybFZhcmlhYmxlTmFtZXMuaW5jbHVkZXMob3B0aW9uKSkuY29uY2F0KFwiYmFzZVVybFwiKTtcbiAgY29uc3QgcmVtYWluaW5nUGFyYW1ldGVycyA9IG9taXQocGFyYW1ldGVycywgb21pdHRlZFBhcmFtZXRlcnMpO1xuICBjb25zdCBpc0JpbmFyeVJlcXVlc3QgPSAvYXBwbGljYXRpb25cXC9vY3RldC1zdHJlYW0vaS50ZXN0KGhlYWRlcnMuYWNjZXB0KTtcbiAgaWYgKCFpc0JpbmFyeVJlcXVlc3QpIHtcbiAgICBpZiAob3B0aW9ucy5tZWRpYVR5cGUuZm9ybWF0KSB7XG4gICAgICBoZWFkZXJzLmFjY2VwdCA9IGhlYWRlcnMuYWNjZXB0LnNwbGl0KC8sLykubWFwKFxuICAgICAgICAoZm9ybWF0KSA9PiBmb3JtYXQucmVwbGFjZShcbiAgICAgICAgICAvYXBwbGljYXRpb25cXC92bmQoXFwuXFx3KykoXFwudjMpPyhcXC5cXHcrKT8oXFwranNvbik/JC8sXG4gICAgICAgICAgYGFwcGxpY2F0aW9uL3ZuZCQxJDIuJHtvcHRpb25zLm1lZGlhVHlwZS5mb3JtYXR9YFxuICAgICAgICApXG4gICAgICApLmpvaW4oXCIsXCIpO1xuICAgIH1cbiAgICBpZiAodXJsLmVuZHNXaXRoKFwiL2dyYXBocWxcIikpIHtcbiAgICAgIGlmIChvcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cz8ubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHByZXZpZXdzRnJvbUFjY2VwdEhlYWRlciA9IGhlYWRlcnMuYWNjZXB0Lm1hdGNoKC9bXFx3LV0rKD89LXByZXZpZXcpL2cpIHx8IFtdO1xuICAgICAgICBoZWFkZXJzLmFjY2VwdCA9IHByZXZpZXdzRnJvbUFjY2VwdEhlYWRlci5jb25jYXQob3B0aW9ucy5tZWRpYVR5cGUucHJldmlld3MpLm1hcCgocHJldmlldykgPT4ge1xuICAgICAgICAgIGNvbnN0IGZvcm1hdCA9IG9wdGlvbnMubWVkaWFUeXBlLmZvcm1hdCA/IGAuJHtvcHRpb25zLm1lZGlhVHlwZS5mb3JtYXR9YCA6IFwiK2pzb25cIjtcbiAgICAgICAgICByZXR1cm4gYGFwcGxpY2F0aW9uL3ZuZC5naXRodWIuJHtwcmV2aWV3fS1wcmV2aWV3JHtmb3JtYXR9YDtcbiAgICAgICAgfSkuam9pbihcIixcIik7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChbXCJHRVRcIiwgXCJIRUFEXCJdLmluY2x1ZGVzKG1ldGhvZCkpIHtcbiAgICB1cmwgPSBhZGRRdWVyeVBhcmFtZXRlcnModXJsLCByZW1haW5pbmdQYXJhbWV0ZXJzKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoXCJkYXRhXCIgaW4gcmVtYWluaW5nUGFyYW1ldGVycykge1xuICAgICAgYm9keSA9IHJlbWFpbmluZ1BhcmFtZXRlcnMuZGF0YTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKE9iamVjdC5rZXlzKHJlbWFpbmluZ1BhcmFtZXRlcnMpLmxlbmd0aCkge1xuICAgICAgICBib2R5ID0gcmVtYWluaW5nUGFyYW1ldGVycztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKCFoZWFkZXJzW1wiY29udGVudC10eXBlXCJdICYmIHR5cGVvZiBib2R5ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgaGVhZGVyc1tcImNvbnRlbnQtdHlwZVwiXSA9IFwiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOFwiO1xuICB9XG4gIGlmIChbXCJQQVRDSFwiLCBcIlBVVFwiXS5pbmNsdWRlcyhtZXRob2QpICYmIHR5cGVvZiBib2R5ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgYm9keSA9IFwiXCI7XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oXG4gICAgeyBtZXRob2QsIHVybCwgaGVhZGVycyB9LFxuICAgIHR5cGVvZiBib2R5ICE9PSBcInVuZGVmaW5lZFwiID8geyBib2R5IH0gOiBudWxsLFxuICAgIG9wdGlvbnMucmVxdWVzdCA/IHsgcmVxdWVzdDogb3B0aW9ucy5yZXF1ZXN0IH0gOiBudWxsXG4gICk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9lbmRwb2ludC13aXRoLWRlZmF1bHRzLmpzXG5mdW5jdGlvbiBlbmRwb2ludFdpdGhEZWZhdWx0cyhkZWZhdWx0cywgcm91dGUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHBhcnNlKG1lcmdlKGRlZmF1bHRzLCByb3V0ZSwgb3B0aW9ucykpO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvd2l0aC1kZWZhdWx0cy5qc1xuZnVuY3Rpb24gd2l0aERlZmF1bHRzKG9sZERlZmF1bHRzLCBuZXdEZWZhdWx0cykge1xuICBjb25zdCBERUZBVUxUUzIgPSBtZXJnZShvbGREZWZhdWx0cywgbmV3RGVmYXVsdHMpO1xuICBjb25zdCBlbmRwb2ludDIgPSBlbmRwb2ludFdpdGhEZWZhdWx0cy5iaW5kKG51bGwsIERFRkFVTFRTMik7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKGVuZHBvaW50Miwge1xuICAgIERFRkFVTFRTOiBERUZBVUxUUzIsXG4gICAgZGVmYXVsdHM6IHdpdGhEZWZhdWx0cy5iaW5kKG51bGwsIERFRkFVTFRTMiksXG4gICAgbWVyZ2U6IG1lcmdlLmJpbmQobnVsbCwgREVGQVVMVFMyKSxcbiAgICBwYXJzZVxuICB9KTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG52YXIgZW5kcG9pbnQgPSB3aXRoRGVmYXVsdHMobnVsbCwgREVGQVVMVFMpO1xuLy8gQW5ub3RhdGUgdGhlIENvbW1vbkpTIGV4cG9ydCBuYW1lcyBmb3IgRVNNIGltcG9ydCBpbiBub2RlOlxuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gIGVuZHBvaW50XG59KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGUgPSBPYmplY3QuY3JlYXRlO1xudmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BEZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBfX2dldE93blByb3BOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO1xudmFyIF9fZ2V0UHJvdG9PZiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fZXhwb3J0ID0gKHRhcmdldCwgYWxsKSA9PiB7XG4gIGZvciAodmFyIG5hbWUgaW4gYWxsKVxuICAgIF9fZGVmUHJvcCh0YXJnZXQsIG5hbWUsIHsgZ2V0OiBhbGxbbmFtZV0sIGVudW1lcmFibGU6IHRydWUgfSk7XG59O1xudmFyIF9fY29weVByb3BzID0gKHRvLCBmcm9tLCBleGNlcHQsIGRlc2MpID0+IHtcbiAgaWYgKGZyb20gJiYgdHlwZW9mIGZyb20gPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGZyb20gPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGZvciAobGV0IGtleSBvZiBfX2dldE93blByb3BOYW1lcyhmcm9tKSlcbiAgICAgIGlmICghX19oYXNPd25Qcm9wLmNhbGwodG8sIGtleSkgJiYga2V5ICE9PSBleGNlcHQpXG4gICAgICAgIF9fZGVmUHJvcCh0bywga2V5LCB7IGdldDogKCkgPT4gZnJvbVtrZXldLCBlbnVtZXJhYmxlOiAhKGRlc2MgPSBfX2dldE93blByb3BEZXNjKGZyb20sIGtleSkpIHx8IGRlc2MuZW51bWVyYWJsZSB9KTtcbiAgfVxuICByZXR1cm4gdG87XG59O1xudmFyIF9fdG9FU00gPSAobW9kLCBpc05vZGVNb2RlLCB0YXJnZXQpID0+ICh0YXJnZXQgPSBtb2QgIT0gbnVsbCA/IF9fY3JlYXRlKF9fZ2V0UHJvdG9PZihtb2QpKSA6IHt9LCBfX2NvcHlQcm9wcyhcbiAgLy8gSWYgdGhlIGltcG9ydGVyIGlzIGluIG5vZGUgY29tcGF0aWJpbGl0eSBtb2RlIG9yIHRoaXMgaXMgbm90IGFuIEVTTVxuICAvLyBmaWxlIHRoYXQgaGFzIGJlZW4gY29udmVydGVkIHRvIGEgQ29tbW9uSlMgZmlsZSB1c2luZyBhIEJhYmVsLVxuICAvLyBjb21wYXRpYmxlIHRyYW5zZm9ybSAoaS5lLiBcIl9fZXNNb2R1bGVcIiBoYXMgbm90IGJlZW4gc2V0KSwgdGhlbiBzZXRcbiAgLy8gXCJkZWZhdWx0XCIgdG8gdGhlIENvbW1vbkpTIFwibW9kdWxlLmV4cG9ydHNcIiBmb3Igbm9kZSBjb21wYXRpYmlsaXR5LlxuICBpc05vZGVNb2RlIHx8ICFtb2QgfHwgIW1vZC5fX2VzTW9kdWxlID8gX19kZWZQcm9wKHRhcmdldCwgXCJkZWZhdWx0XCIsIHsgdmFsdWU6IG1vZCwgZW51bWVyYWJsZTogdHJ1ZSB9KSA6IHRhcmdldCxcbiAgbW9kXG4pKTtcbnZhciBfX3RvQ29tbW9uSlMgPSAobW9kKSA9PiBfX2NvcHlQcm9wcyhfX2RlZlByb3Aoe30sIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pLCBtb2QpO1xuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbnZhciBkaXN0X3NyY19leHBvcnRzID0ge307XG5fX2V4cG9ydChkaXN0X3NyY19leHBvcnRzLCB7XG4gIFJlcXVlc3RFcnJvcjogKCkgPT4gUmVxdWVzdEVycm9yXG59KTtcbm1vZHVsZS5leHBvcnRzID0gX190b0NvbW1vbkpTKGRpc3Rfc3JjX2V4cG9ydHMpO1xudmFyIGltcG9ydF9kZXByZWNhdGlvbiA9IHJlcXVpcmUoXCJkZXByZWNhdGlvblwiKTtcbnZhciBpbXBvcnRfb25jZSA9IF9fdG9FU00ocmVxdWlyZShcIm9uY2VcIikpO1xudmFyIGxvZ09uY2VDb2RlID0gKDAsIGltcG9ydF9vbmNlLmRlZmF1bHQpKChkZXByZWNhdGlvbikgPT4gY29uc29sZS53YXJuKGRlcHJlY2F0aW9uKSk7XG52YXIgbG9nT25jZUhlYWRlcnMgPSAoMCwgaW1wb3J0X29uY2UuZGVmYXVsdCkoKGRlcHJlY2F0aW9uKSA9PiBjb25zb2xlLndhcm4oZGVwcmVjYXRpb24pKTtcbnZhciBSZXF1ZXN0RXJyb3IgPSBjbGFzcyBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZSwgc3RhdHVzQ29kZSwgb3B0aW9ucykge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gICAgfVxuICAgIHRoaXMubmFtZSA9IFwiSHR0cEVycm9yXCI7XG4gICAgdGhpcy5zdGF0dXMgPSBzdGF0dXNDb2RlO1xuICAgIGxldCBoZWFkZXJzO1xuICAgIGlmIChcImhlYWRlcnNcIiBpbiBvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLmhlYWRlcnMgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGhlYWRlcnMgPSBvcHRpb25zLmhlYWRlcnM7XG4gICAgfVxuICAgIGlmIChcInJlc3BvbnNlXCIgaW4gb3B0aW9ucykge1xuICAgICAgdGhpcy5yZXNwb25zZSA9IG9wdGlvbnMucmVzcG9uc2U7XG4gICAgICBoZWFkZXJzID0gb3B0aW9ucy5yZXNwb25zZS5oZWFkZXJzO1xuICAgIH1cbiAgICBjb25zdCByZXF1ZXN0Q29weSA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMucmVxdWVzdCk7XG4gICAgaWYgKG9wdGlvbnMucmVxdWVzdC5oZWFkZXJzLmF1dGhvcml6YXRpb24pIHtcbiAgICAgIHJlcXVlc3RDb3B5LmhlYWRlcnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLnJlcXVlc3QuaGVhZGVycywge1xuICAgICAgICBhdXRob3JpemF0aW9uOiBvcHRpb25zLnJlcXVlc3QuaGVhZGVycy5hdXRob3JpemF0aW9uLnJlcGxhY2UoXG4gICAgICAgICAgLyAuKiQvLFxuICAgICAgICAgIFwiIFtSRURBQ1RFRF1cIlxuICAgICAgICApXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmVxdWVzdENvcHkudXJsID0gcmVxdWVzdENvcHkudXJsLnJlcGxhY2UoL1xcYmNsaWVudF9zZWNyZXQ9XFx3Ky9nLCBcImNsaWVudF9zZWNyZXQ9W1JFREFDVEVEXVwiKS5yZXBsYWNlKC9cXGJhY2Nlc3NfdG9rZW49XFx3Ky9nLCBcImFjY2Vzc190b2tlbj1bUkVEQUNURURdXCIpO1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3RDb3B5O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImNvZGVcIiwge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBsb2dPbmNlQ29kZShcbiAgICAgICAgICBuZXcgaW1wb3J0X2RlcHJlY2F0aW9uLkRlcHJlY2F0aW9uKFxuICAgICAgICAgICAgXCJbQG9jdG9raXQvcmVxdWVzdC1lcnJvcl0gYGVycm9yLmNvZGVgIGlzIGRlcHJlY2F0ZWQsIHVzZSBgZXJyb3Iuc3RhdHVzYC5cIlxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHN0YXR1c0NvZGU7XG4gICAgICB9XG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwiaGVhZGVyc1wiLCB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGxvZ09uY2VIZWFkZXJzKFxuICAgICAgICAgIG5ldyBpbXBvcnRfZGVwcmVjYXRpb24uRGVwcmVjYXRpb24oXG4gICAgICAgICAgICBcIltAb2N0b2tpdC9yZXF1ZXN0LWVycm9yXSBgZXJyb3IuaGVhZGVyc2AgaXMgZGVwcmVjYXRlZCwgdXNlIGBlcnJvci5yZXNwb25zZS5oZWFkZXJzYC5cIlxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGhlYWRlcnMgfHwge307XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn07XG4vLyBBbm5vdGF0ZSB0aGUgQ29tbW9uSlMgZXhwb3J0IG5hbWVzIGZvciBFU00gaW1wb3J0IGluIG5vZGU6XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgUmVxdWVzdEVycm9yXG59KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIF9fZ2V0T3duUHJvcE5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XG52YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX2V4cG9ydCA9ICh0YXJnZXQsIGFsbCkgPT4ge1xuICBmb3IgKHZhciBuYW1lIGluIGFsbClcbiAgICBfX2RlZlByb3AodGFyZ2V0LCBuYW1lLCB7IGdldDogYWxsW25hbWVdLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xufTtcbnZhciBfX2NvcHlQcm9wcyA9ICh0bywgZnJvbSwgZXhjZXB0LCBkZXNjKSA9PiB7XG4gIGlmIChmcm9tICYmIHR5cGVvZiBmcm9tID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBmcm9tID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBmb3IgKGxldCBrZXkgb2YgX19nZXRPd25Qcm9wTmFtZXMoZnJvbSkpXG4gICAgICBpZiAoIV9faGFzT3duUHJvcC5jYWxsKHRvLCBrZXkpICYmIGtleSAhPT0gZXhjZXB0KVxuICAgICAgICBfX2RlZlByb3AodG8sIGtleSwgeyBnZXQ6ICgpID0+IGZyb21ba2V5XSwgZW51bWVyYWJsZTogIShkZXNjID0gX19nZXRPd25Qcm9wRGVzYyhmcm9tLCBrZXkpKSB8fCBkZXNjLmVudW1lcmFibGUgfSk7XG4gIH1cbiAgcmV0dXJuIHRvO1xufTtcbnZhciBfX3RvQ29tbW9uSlMgPSAobW9kKSA9PiBfX2NvcHlQcm9wcyhfX2RlZlByb3Aoe30sIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pLCBtb2QpO1xuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbnZhciBkaXN0X3NyY19leHBvcnRzID0ge307XG5fX2V4cG9ydChkaXN0X3NyY19leHBvcnRzLCB7XG4gIHJlcXVlc3Q6ICgpID0+IHJlcXVlc3Rcbn0pO1xubW9kdWxlLmV4cG9ydHMgPSBfX3RvQ29tbW9uSlMoZGlzdF9zcmNfZXhwb3J0cyk7XG52YXIgaW1wb3J0X2VuZHBvaW50ID0gcmVxdWlyZShcIkBvY3Rva2l0L2VuZHBvaW50XCIpO1xudmFyIGltcG9ydF91bml2ZXJzYWxfdXNlcl9hZ2VudCA9IHJlcXVpcmUoXCJ1bml2ZXJzYWwtdXNlci1hZ2VudFwiKTtcblxuLy8gcGtnL2Rpc3Qtc3JjL3ZlcnNpb24uanNcbnZhciBWRVJTSU9OID0gXCI4LjQuMFwiO1xuXG4vLyBwa2cvZGlzdC1zcmMvaXMtcGxhaW4tb2JqZWN0LmpzXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgfHwgdmFsdWUgPT09IG51bGwpXG4gICAgcmV0dXJuIGZhbHNlO1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSAhPT0gXCJbb2JqZWN0IE9iamVjdF1cIilcbiAgICByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKTtcbiAgaWYgKHByb3RvID09PSBudWxsKVxuICAgIHJldHVybiB0cnVlO1xuICBjb25zdCBDdG9yID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3RvLCBcImNvbnN0cnVjdG9yXCIpICYmIHByb3RvLmNvbnN0cnVjdG9yO1xuICByZXR1cm4gdHlwZW9mIEN0b3IgPT09IFwiZnVuY3Rpb25cIiAmJiBDdG9yIGluc3RhbmNlb2YgQ3RvciAmJiBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbChDdG9yKSA9PT0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGwodmFsdWUpO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvZmV0Y2gtd3JhcHBlci5qc1xudmFyIGltcG9ydF9yZXF1ZXN0X2Vycm9yID0gcmVxdWlyZShcIkBvY3Rva2l0L3JlcXVlc3QtZXJyb3JcIik7XG5cbi8vIHBrZy9kaXN0LXNyYy9nZXQtYnVmZmVyLXJlc3BvbnNlLmpzXG5mdW5jdGlvbiBnZXRCdWZmZXJSZXNwb25zZShyZXNwb25zZSkge1xuICByZXR1cm4gcmVzcG9uc2UuYXJyYXlCdWZmZXIoKTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2ZldGNoLXdyYXBwZXIuanNcbmZ1bmN0aW9uIGZldGNoV3JhcHBlcihyZXF1ZXN0T3B0aW9ucykge1xuICB2YXIgX2EsIF9iLCBfYywgX2Q7XG4gIGNvbnN0IGxvZyA9IHJlcXVlc3RPcHRpb25zLnJlcXVlc3QgJiYgcmVxdWVzdE9wdGlvbnMucmVxdWVzdC5sb2cgPyByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0LmxvZyA6IGNvbnNvbGU7XG4gIGNvbnN0IHBhcnNlU3VjY2Vzc1Jlc3BvbnNlQm9keSA9ICgoX2EgPSByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0KSA9PSBudWxsID8gdm9pZCAwIDogX2EucGFyc2VTdWNjZXNzUmVzcG9uc2VCb2R5KSAhPT0gZmFsc2U7XG4gIGlmIChpc1BsYWluT2JqZWN0KHJlcXVlc3RPcHRpb25zLmJvZHkpIHx8IEFycmF5LmlzQXJyYXkocmVxdWVzdE9wdGlvbnMuYm9keSkpIHtcbiAgICByZXF1ZXN0T3B0aW9ucy5ib2R5ID0gSlNPTi5zdHJpbmdpZnkocmVxdWVzdE9wdGlvbnMuYm9keSk7XG4gIH1cbiAgbGV0IGhlYWRlcnMgPSB7fTtcbiAgbGV0IHN0YXR1cztcbiAgbGV0IHVybDtcbiAgbGV0IHsgZmV0Y2ggfSA9IGdsb2JhbFRoaXM7XG4gIGlmICgoX2IgPSByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0KSA9PSBudWxsID8gdm9pZCAwIDogX2IuZmV0Y2gpIHtcbiAgICBmZXRjaCA9IHJlcXVlc3RPcHRpb25zLnJlcXVlc3QuZmV0Y2g7XG4gIH1cbiAgaWYgKCFmZXRjaCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiZmV0Y2ggaXMgbm90IHNldC4gUGxlYXNlIHBhc3MgYSBmZXRjaCBpbXBsZW1lbnRhdGlvbiBhcyBuZXcgT2N0b2tpdCh7IHJlcXVlc3Q6IHsgZmV0Y2ggfX0pLiBMZWFybiBtb3JlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9vY3Rva2l0L29jdG9raXQuanMvI2ZldGNoLW1pc3NpbmdcIlxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGZldGNoKHJlcXVlc3RPcHRpb25zLnVybCwge1xuICAgIG1ldGhvZDogcmVxdWVzdE9wdGlvbnMubWV0aG9kLFxuICAgIGJvZHk6IHJlcXVlc3RPcHRpb25zLmJvZHksXG4gICAgcmVkaXJlY3Q6IChfYyA9IHJlcXVlc3RPcHRpb25zLnJlcXVlc3QpID09IG51bGwgPyB2b2lkIDAgOiBfYy5yZWRpcmVjdCxcbiAgICBoZWFkZXJzOiByZXF1ZXN0T3B0aW9ucy5oZWFkZXJzLFxuICAgIHNpZ25hbDogKF9kID0gcmVxdWVzdE9wdGlvbnMucmVxdWVzdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9kLnNpZ25hbCxcbiAgICAvLyBkdXBsZXggbXVzdCBiZSBzZXQgaWYgcmVxdWVzdC5ib2R5IGlzIFJlYWRhYmxlU3RyZWFtIG9yIEFzeW5jIEl0ZXJhYmxlcy5cbiAgICAvLyBTZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1yZXF1ZXN0aW5pdC1kdXBsZXguXG4gICAgLi4ucmVxdWVzdE9wdGlvbnMuYm9keSAmJiB7IGR1cGxleDogXCJoYWxmXCIgfVxuICB9KS50aGVuKGFzeW5jIChyZXNwb25zZSkgPT4ge1xuICAgIHVybCA9IHJlc3BvbnNlLnVybDtcbiAgICBzdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgZm9yIChjb25zdCBrZXlBbmRWYWx1ZSBvZiByZXNwb25zZS5oZWFkZXJzKSB7XG4gICAgICBoZWFkZXJzW2tleUFuZFZhbHVlWzBdXSA9IGtleUFuZFZhbHVlWzFdO1xuICAgIH1cbiAgICBpZiAoXCJkZXByZWNhdGlvblwiIGluIGhlYWRlcnMpIHtcbiAgICAgIGNvbnN0IG1hdGNoZXMgPSBoZWFkZXJzLmxpbmsgJiYgaGVhZGVycy5saW5rLm1hdGNoKC88KFtePl0rKT47IHJlbD1cImRlcHJlY2F0aW9uXCIvKTtcbiAgICAgIGNvbnN0IGRlcHJlY2F0aW9uTGluayA9IG1hdGNoZXMgJiYgbWF0Y2hlcy5wb3AoKTtcbiAgICAgIGxvZy53YXJuKFxuICAgICAgICBgW0BvY3Rva2l0L3JlcXVlc3RdIFwiJHtyZXF1ZXN0T3B0aW9ucy5tZXRob2R9ICR7cmVxdWVzdE9wdGlvbnMudXJsfVwiIGlzIGRlcHJlY2F0ZWQuIEl0IGlzIHNjaGVkdWxlZCB0byBiZSByZW1vdmVkIG9uICR7aGVhZGVycy5zdW5zZXR9JHtkZXByZWNhdGlvbkxpbmsgPyBgLiBTZWUgJHtkZXByZWNhdGlvbkxpbmt9YCA6IFwiXCJ9YFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHN0YXR1cyA9PT0gMjA0IHx8IHN0YXR1cyA9PT0gMjA1KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChyZXF1ZXN0T3B0aW9ucy5tZXRob2QgPT09IFwiSEVBRFwiKSB7XG4gICAgICBpZiAoc3RhdHVzIDwgNDAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBpbXBvcnRfcmVxdWVzdF9lcnJvci5SZXF1ZXN0RXJyb3IocmVzcG9uc2Uuc3RhdHVzVGV4dCwgc3RhdHVzLCB7XG4gICAgICAgIHJlc3BvbnNlOiB7XG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIHN0YXR1cyxcbiAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgIGRhdGE6IHZvaWQgMFxuICAgICAgICB9LFxuICAgICAgICByZXF1ZXN0OiByZXF1ZXN0T3B0aW9uc1xuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChzdGF0dXMgPT09IDMwNCkge1xuICAgICAgdGhyb3cgbmV3IGltcG9ydF9yZXF1ZXN0X2Vycm9yLlJlcXVlc3RFcnJvcihcIk5vdCBtb2RpZmllZFwiLCBzdGF0dXMsIHtcbiAgICAgICAgcmVzcG9uc2U6IHtcbiAgICAgICAgICB1cmwsXG4gICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgZGF0YTogYXdhaXQgZ2V0UmVzcG9uc2VEYXRhKHJlc3BvbnNlKVxuICAgICAgICB9LFxuICAgICAgICByZXF1ZXN0OiByZXF1ZXN0T3B0aW9uc1xuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChzdGF0dXMgPj0gNDAwKSB7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ2V0UmVzcG9uc2VEYXRhKHJlc3BvbnNlKTtcbiAgICAgIGNvbnN0IGVycm9yID0gbmV3IGltcG9ydF9yZXF1ZXN0X2Vycm9yLlJlcXVlc3RFcnJvcih0b0Vycm9yTWVzc2FnZShkYXRhKSwgc3RhdHVzLCB7XG4gICAgICAgIHJlc3BvbnNlOiB7XG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIHN0YXR1cyxcbiAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgIGRhdGFcbiAgICAgICAgfSxcbiAgICAgICAgcmVxdWVzdDogcmVxdWVzdE9wdGlvbnNcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICAgIHJldHVybiBwYXJzZVN1Y2Nlc3NSZXNwb25zZUJvZHkgPyBhd2FpdCBnZXRSZXNwb25zZURhdGEocmVzcG9uc2UpIDogcmVzcG9uc2UuYm9keTtcbiAgfSkudGhlbigoZGF0YSkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXMsXG4gICAgICB1cmwsXG4gICAgICBoZWFkZXJzLFxuICAgICAgZGF0YVxuICAgIH07XG4gIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIGltcG9ydF9yZXF1ZXN0X2Vycm9yLlJlcXVlc3RFcnJvcilcbiAgICAgIHRocm93IGVycm9yO1xuICAgIGVsc2UgaWYgKGVycm9yLm5hbWUgPT09IFwiQWJvcnRFcnJvclwiKVxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgbGV0IG1lc3NhZ2UgPSBlcnJvci5tZXNzYWdlO1xuICAgIGlmIChlcnJvci5uYW1lID09PSBcIlR5cGVFcnJvclwiICYmIFwiY2F1c2VcIiBpbiBlcnJvcikge1xuICAgICAgaWYgKGVycm9yLmNhdXNlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgbWVzc2FnZSA9IGVycm9yLmNhdXNlLm1lc3NhZ2U7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBlcnJvci5jYXVzZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBtZXNzYWdlID0gZXJyb3IuY2F1c2U7XG4gICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyBpbXBvcnRfcmVxdWVzdF9lcnJvci5SZXF1ZXN0RXJyb3IobWVzc2FnZSwgNTAwLCB7XG4gICAgICByZXF1ZXN0OiByZXF1ZXN0T3B0aW9uc1xuICAgIH0pO1xuICB9KTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGdldFJlc3BvbnNlRGF0YShyZXNwb25zZSkge1xuICBjb25zdCBjb250ZW50VHlwZSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFwiY29udGVudC10eXBlXCIpO1xuICBpZiAoL2FwcGxpY2F0aW9uXFwvanNvbi8udGVzdChjb250ZW50VHlwZSkpIHtcbiAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpLmNhdGNoKCgpID0+IHJlc3BvbnNlLnRleHQoKSkuY2F0Y2goKCkgPT4gXCJcIik7XG4gIH1cbiAgaWYgKCFjb250ZW50VHlwZSB8fCAvXnRleHRcXC98Y2hhcnNldD11dGYtOCQvLnRlc3QoY29udGVudFR5cGUpKSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLnRleHQoKTtcbiAgfVxuICByZXR1cm4gZ2V0QnVmZmVyUmVzcG9uc2UocmVzcG9uc2UpO1xufVxuZnVuY3Rpb24gdG9FcnJvck1lc3NhZ2UoZGF0YSkge1xuICBpZiAodHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIpXG4gICAgcmV0dXJuIGRhdGE7XG4gIGxldCBzdWZmaXg7XG4gIGlmIChcImRvY3VtZW50YXRpb25fdXJsXCIgaW4gZGF0YSkge1xuICAgIHN1ZmZpeCA9IGAgLSAke2RhdGEuZG9jdW1lbnRhdGlvbl91cmx9YDtcbiAgfSBlbHNlIHtcbiAgICBzdWZmaXggPSBcIlwiO1xuICB9XG4gIGlmIChcIm1lc3NhZ2VcIiBpbiBkYXRhKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YS5lcnJvcnMpKSB7XG4gICAgICByZXR1cm4gYCR7ZGF0YS5tZXNzYWdlfTogJHtkYXRhLmVycm9ycy5tYXAoSlNPTi5zdHJpbmdpZnkpLmpvaW4oXCIsIFwiKX0ke3N1ZmZpeH1gO1xuICAgIH1cbiAgICByZXR1cm4gYCR7ZGF0YS5tZXNzYWdlfSR7c3VmZml4fWA7XG4gIH1cbiAgcmV0dXJuIGBVbmtub3duIGVycm9yOiAke0pTT04uc3RyaW5naWZ5KGRhdGEpfWA7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy93aXRoLWRlZmF1bHRzLmpzXG5mdW5jdGlvbiB3aXRoRGVmYXVsdHMob2xkRW5kcG9pbnQsIG5ld0RlZmF1bHRzKSB7XG4gIGNvbnN0IGVuZHBvaW50MiA9IG9sZEVuZHBvaW50LmRlZmF1bHRzKG5ld0RlZmF1bHRzKTtcbiAgY29uc3QgbmV3QXBpID0gZnVuY3Rpb24ocm91dGUsIHBhcmFtZXRlcnMpIHtcbiAgICBjb25zdCBlbmRwb2ludE9wdGlvbnMgPSBlbmRwb2ludDIubWVyZ2Uocm91dGUsIHBhcmFtZXRlcnMpO1xuICAgIGlmICghZW5kcG9pbnRPcHRpb25zLnJlcXVlc3QgfHwgIWVuZHBvaW50T3B0aW9ucy5yZXF1ZXN0Lmhvb2spIHtcbiAgICAgIHJldHVybiBmZXRjaFdyYXBwZXIoZW5kcG9pbnQyLnBhcnNlKGVuZHBvaW50T3B0aW9ucykpO1xuICAgIH1cbiAgICBjb25zdCByZXF1ZXN0MiA9IChyb3V0ZTIsIHBhcmFtZXRlcnMyKSA9PiB7XG4gICAgICByZXR1cm4gZmV0Y2hXcmFwcGVyKFxuICAgICAgICBlbmRwb2ludDIucGFyc2UoZW5kcG9pbnQyLm1lcmdlKHJvdXRlMiwgcGFyYW1ldGVyczIpKVxuICAgICAgKTtcbiAgICB9O1xuICAgIE9iamVjdC5hc3NpZ24ocmVxdWVzdDIsIHtcbiAgICAgIGVuZHBvaW50OiBlbmRwb2ludDIsXG4gICAgICBkZWZhdWx0czogd2l0aERlZmF1bHRzLmJpbmQobnVsbCwgZW5kcG9pbnQyKVxuICAgIH0pO1xuICAgIHJldHVybiBlbmRwb2ludE9wdGlvbnMucmVxdWVzdC5ob29rKHJlcXVlc3QyLCBlbmRwb2ludE9wdGlvbnMpO1xuICB9O1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihuZXdBcGksIHtcbiAgICBlbmRwb2ludDogZW5kcG9pbnQyLFxuICAgIGRlZmF1bHRzOiB3aXRoRGVmYXVsdHMuYmluZChudWxsLCBlbmRwb2ludDIpXG4gIH0pO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbnZhciByZXF1ZXN0ID0gd2l0aERlZmF1bHRzKGltcG9ydF9lbmRwb2ludC5lbmRwb2ludCwge1xuICBoZWFkZXJzOiB7XG4gICAgXCJ1c2VyLWFnZW50XCI6IGBvY3Rva2l0LXJlcXVlc3QuanMvJHtWRVJTSU9OfSAkeygwLCBpbXBvcnRfdW5pdmVyc2FsX3VzZXJfYWdlbnQuZ2V0VXNlckFnZW50KSgpfWBcbiAgfVxufSk7XG4vLyBBbm5vdGF0ZSB0aGUgQ29tbW9uSlMgZXhwb3J0IG5hbWVzIGZvciBFU00gaW1wb3J0IGluIG5vZGU6XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgcmVxdWVzdFxufSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BEZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBfX2dldE93blByb3BOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO1xudmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19leHBvcnQgPSAodGFyZ2V0LCBhbGwpID0+IHtcbiAgZm9yICh2YXIgbmFtZSBpbiBhbGwpXG4gICAgX19kZWZQcm9wKHRhcmdldCwgbmFtZSwgeyBnZXQ6IGFsbFtuYW1lXSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcbn07XG52YXIgX19jb3B5UHJvcHMgPSAodG8sIGZyb20sIGV4Y2VwdCwgZGVzYykgPT4ge1xuICBpZiAoZnJvbSAmJiB0eXBlb2YgZnJvbSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgZnJvbSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgZm9yIChsZXQga2V5IG9mIF9fZ2V0T3duUHJvcE5hbWVzKGZyb20pKVxuICAgICAgaWYgKCFfX2hhc093blByb3AuY2FsbCh0bywga2V5KSAmJiBrZXkgIT09IGV4Y2VwdClcbiAgICAgICAgX19kZWZQcm9wKHRvLCBrZXksIHsgZ2V0OiAoKSA9PiBmcm9tW2tleV0sIGVudW1lcmFibGU6ICEoZGVzYyA9IF9fZ2V0T3duUHJvcERlc2MoZnJvbSwga2V5KSkgfHwgZGVzYy5lbnVtZXJhYmxlIH0pO1xuICB9XG4gIHJldHVybiB0bztcbn07XG52YXIgX190b0NvbW1vbkpTID0gKG1vZCkgPT4gX19jb3B5UHJvcHMoX19kZWZQcm9wKHt9LCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KSwgbW9kKTtcblxuLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG52YXIgZGlzdF9zcmNfZXhwb3J0cyA9IHt9O1xuX19leHBvcnQoZGlzdF9zcmNfZXhwb3J0cywge1xuICBHcmFwaHFsUmVzcG9uc2VFcnJvcjogKCkgPT4gR3JhcGhxbFJlc3BvbnNlRXJyb3IsXG4gIGdyYXBocWw6ICgpID0+IGdyYXBocWwyLFxuICB3aXRoQ3VzdG9tUmVxdWVzdDogKCkgPT4gd2l0aEN1c3RvbVJlcXVlc3Rcbn0pO1xubW9kdWxlLmV4cG9ydHMgPSBfX3RvQ29tbW9uSlMoZGlzdF9zcmNfZXhwb3J0cyk7XG52YXIgaW1wb3J0X3JlcXVlc3QzID0gcmVxdWlyZShcIkBvY3Rva2l0L3JlcXVlc3RcIik7XG52YXIgaW1wb3J0X3VuaXZlcnNhbF91c2VyX2FnZW50ID0gcmVxdWlyZShcInVuaXZlcnNhbC11c2VyLWFnZW50XCIpO1xuXG4vLyBwa2cvZGlzdC1zcmMvdmVyc2lvbi5qc1xudmFyIFZFUlNJT04gPSBcIjcuMS4wXCI7XG5cbi8vIHBrZy9kaXN0LXNyYy93aXRoLWRlZmF1bHRzLmpzXG52YXIgaW1wb3J0X3JlcXVlc3QyID0gcmVxdWlyZShcIkBvY3Rva2l0L3JlcXVlc3RcIik7XG5cbi8vIHBrZy9kaXN0LXNyYy9ncmFwaHFsLmpzXG52YXIgaW1wb3J0X3JlcXVlc3QgPSByZXF1aXJlKFwiQG9jdG9raXQvcmVxdWVzdFwiKTtcblxuLy8gcGtnL2Rpc3Qtc3JjL2Vycm9yLmpzXG5mdW5jdGlvbiBfYnVpbGRNZXNzYWdlRm9yUmVzcG9uc2VFcnJvcnMoZGF0YSkge1xuICByZXR1cm4gYFJlcXVlc3QgZmFpbGVkIGR1ZSB0byBmb2xsb3dpbmcgcmVzcG9uc2UgZXJyb3JzOlxuYCArIGRhdGEuZXJyb3JzLm1hcCgoZSkgPT4gYCAtICR7ZS5tZXNzYWdlfWApLmpvaW4oXCJcXG5cIik7XG59XG52YXIgR3JhcGhxbFJlc3BvbnNlRXJyb3IgPSBjbGFzcyBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IocmVxdWVzdDIsIGhlYWRlcnMsIHJlc3BvbnNlKSB7XG4gICAgc3VwZXIoX2J1aWxkTWVzc2FnZUZvclJlc3BvbnNlRXJyb3JzKHJlc3BvbnNlKSk7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDI7XG4gICAgdGhpcy5oZWFkZXJzID0gaGVhZGVycztcbiAgICB0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gICAgdGhpcy5uYW1lID0gXCJHcmFwaHFsUmVzcG9uc2VFcnJvclwiO1xuICAgIHRoaXMuZXJyb3JzID0gcmVzcG9uc2UuZXJyb3JzO1xuICAgIHRoaXMuZGF0YSA9IHJlc3BvbnNlLmRhdGE7XG4gICAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgICB9XG4gIH1cbn07XG5cbi8vIHBrZy9kaXN0LXNyYy9ncmFwaHFsLmpzXG52YXIgTk9OX1ZBUklBQkxFX09QVElPTlMgPSBbXG4gIFwibWV0aG9kXCIsXG4gIFwiYmFzZVVybFwiLFxuICBcInVybFwiLFxuICBcImhlYWRlcnNcIixcbiAgXCJyZXF1ZXN0XCIsXG4gIFwicXVlcnlcIixcbiAgXCJtZWRpYVR5cGVcIlxuXTtcbnZhciBGT1JCSURERU5fVkFSSUFCTEVfT1BUSU9OUyA9IFtcInF1ZXJ5XCIsIFwibWV0aG9kXCIsIFwidXJsXCJdO1xudmFyIEdIRVNfVjNfU1VGRklYX1JFR0VYID0gL1xcL2FwaVxcL3YzXFwvPyQvO1xuZnVuY3Rpb24gZ3JhcGhxbChyZXF1ZXN0MiwgcXVlcnksIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIHF1ZXJ5ID09PSBcInN0cmluZ1wiICYmIFwicXVlcnlcIiBpbiBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXG4gICAgICAgIG5ldyBFcnJvcihgW0BvY3Rva2l0L2dyYXBocWxdIFwicXVlcnlcIiBjYW5ub3QgYmUgdXNlZCBhcyB2YXJpYWJsZSBuYW1lYClcbiAgICAgICk7XG4gICAgfVxuICAgIGZvciAoY29uc3Qga2V5IGluIG9wdGlvbnMpIHtcbiAgICAgIGlmICghRk9SQklEREVOX1ZBUklBQkxFX09QVElPTlMuaW5jbHVkZXMoa2V5KSlcbiAgICAgICAgY29udGludWU7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXG4gICAgICAgIG5ldyBFcnJvcihcbiAgICAgICAgICBgW0BvY3Rva2l0L2dyYXBocWxdIFwiJHtrZXl9XCIgY2Fubm90IGJlIHVzZWQgYXMgdmFyaWFibGUgbmFtZWBcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgcGFyc2VkT3B0aW9ucyA9IHR5cGVvZiBxdWVyeSA9PT0gXCJzdHJpbmdcIiA/IE9iamVjdC5hc3NpZ24oeyBxdWVyeSB9LCBvcHRpb25zKSA6IHF1ZXJ5O1xuICBjb25zdCByZXF1ZXN0T3B0aW9ucyA9IE9iamVjdC5rZXlzKFxuICAgIHBhcnNlZE9wdGlvbnNcbiAgKS5yZWR1Y2UoKHJlc3VsdCwga2V5KSA9PiB7XG4gICAgaWYgKE5PTl9WQVJJQUJMRV9PUFRJT05TLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gcGFyc2VkT3B0aW9uc1trZXldO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgaWYgKCFyZXN1bHQudmFyaWFibGVzKSB7XG4gICAgICByZXN1bHQudmFyaWFibGVzID0ge307XG4gICAgfVxuICAgIHJlc3VsdC52YXJpYWJsZXNba2V5XSA9IHBhcnNlZE9wdGlvbnNba2V5XTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9LCB7fSk7XG4gIGNvbnN0IGJhc2VVcmwgPSBwYXJzZWRPcHRpb25zLmJhc2VVcmwgfHwgcmVxdWVzdDIuZW5kcG9pbnQuREVGQVVMVFMuYmFzZVVybDtcbiAgaWYgKEdIRVNfVjNfU1VGRklYX1JFR0VYLnRlc3QoYmFzZVVybCkpIHtcbiAgICByZXF1ZXN0T3B0aW9ucy51cmwgPSBiYXNlVXJsLnJlcGxhY2UoR0hFU19WM19TVUZGSVhfUkVHRVgsIFwiL2FwaS9ncmFwaHFsXCIpO1xuICB9XG4gIHJldHVybiByZXF1ZXN0MihyZXF1ZXN0T3B0aW9ucykudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICBpZiAocmVzcG9uc2UuZGF0YS5lcnJvcnMpIHtcbiAgICAgIGNvbnN0IGhlYWRlcnMgPSB7fTtcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHJlc3BvbnNlLmhlYWRlcnMpKSB7XG4gICAgICAgIGhlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnNba2V5XTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBHcmFwaHFsUmVzcG9uc2VFcnJvcihcbiAgICAgICAgcmVxdWVzdE9wdGlvbnMsXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIHJlc3BvbnNlLmRhdGFcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiByZXNwb25zZS5kYXRhLmRhdGE7XG4gIH0pO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvd2l0aC1kZWZhdWx0cy5qc1xuZnVuY3Rpb24gd2l0aERlZmF1bHRzKHJlcXVlc3QyLCBuZXdEZWZhdWx0cykge1xuICBjb25zdCBuZXdSZXF1ZXN0ID0gcmVxdWVzdDIuZGVmYXVsdHMobmV3RGVmYXVsdHMpO1xuICBjb25zdCBuZXdBcGkgPSAocXVlcnksIG9wdGlvbnMpID0+IHtcbiAgICByZXR1cm4gZ3JhcGhxbChuZXdSZXF1ZXN0LCBxdWVyeSwgb3B0aW9ucyk7XG4gIH07XG4gIHJldHVybiBPYmplY3QuYXNzaWduKG5ld0FwaSwge1xuICAgIGRlZmF1bHRzOiB3aXRoRGVmYXVsdHMuYmluZChudWxsLCBuZXdSZXF1ZXN0KSxcbiAgICBlbmRwb2ludDogbmV3UmVxdWVzdC5lbmRwb2ludFxuICB9KTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG52YXIgZ3JhcGhxbDIgPSB3aXRoRGVmYXVsdHMoaW1wb3J0X3JlcXVlc3QzLnJlcXVlc3QsIHtcbiAgaGVhZGVyczoge1xuICAgIFwidXNlci1hZ2VudFwiOiBgb2N0b2tpdC1ncmFwaHFsLmpzLyR7VkVSU0lPTn0gJHsoMCwgaW1wb3J0X3VuaXZlcnNhbF91c2VyX2FnZW50LmdldFVzZXJBZ2VudCkoKX1gXG4gIH0sXG4gIG1ldGhvZDogXCJQT1NUXCIsXG4gIHVybDogXCIvZ3JhcGhxbFwiXG59KTtcbmZ1bmN0aW9uIHdpdGhDdXN0b21SZXF1ZXN0KGN1c3RvbVJlcXVlc3QpIHtcbiAgcmV0dXJuIHdpdGhEZWZhdWx0cyhjdXN0b21SZXF1ZXN0LCB7XG4gICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICB1cmw6IFwiL2dyYXBocWxcIlxuICB9KTtcbn1cbi8vIEFubm90YXRlIHRoZSBDb21tb25KUyBleHBvcnQgbmFtZXMgZm9yIEVTTSBpbXBvcnQgaW4gbm9kZTpcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICBHcmFwaHFsUmVzcG9uc2VFcnJvcixcbiAgZ3JhcGhxbCxcbiAgd2l0aEN1c3RvbVJlcXVlc3Rcbn0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wRGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgX19nZXRPd25Qcm9wTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcztcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fZXhwb3J0ID0gKHRhcmdldCwgYWxsKSA9PiB7XG4gIGZvciAodmFyIG5hbWUgaW4gYWxsKVxuICAgIF9fZGVmUHJvcCh0YXJnZXQsIG5hbWUsIHsgZ2V0OiBhbGxbbmFtZV0sIGVudW1lcmFibGU6IHRydWUgfSk7XG59O1xudmFyIF9fY29weVByb3BzID0gKHRvLCBmcm9tLCBleGNlcHQsIGRlc2MpID0+IHtcbiAgaWYgKGZyb20gJiYgdHlwZW9mIGZyb20gPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGZyb20gPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGZvciAobGV0IGtleSBvZiBfX2dldE93blByb3BOYW1lcyhmcm9tKSlcbiAgICAgIGlmICghX19oYXNPd25Qcm9wLmNhbGwodG8sIGtleSkgJiYga2V5ICE9PSBleGNlcHQpXG4gICAgICAgIF9fZGVmUHJvcCh0bywga2V5LCB7IGdldDogKCkgPT4gZnJvbVtrZXldLCBlbnVtZXJhYmxlOiAhKGRlc2MgPSBfX2dldE93blByb3BEZXNjKGZyb20sIGtleSkpIHx8IGRlc2MuZW51bWVyYWJsZSB9KTtcbiAgfVxuICByZXR1cm4gdG87XG59O1xudmFyIF9fdG9Db21tb25KUyA9IChtb2QpID0+IF9fY29weVByb3BzKF9fZGVmUHJvcCh7fSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSksIG1vZCk7XG5cbi8vIHBrZy9kaXN0LXNyYy9pbmRleC5qc1xudmFyIGRpc3Rfc3JjX2V4cG9ydHMgPSB7fTtcbl9fZXhwb3J0KGRpc3Rfc3JjX2V4cG9ydHMsIHtcbiAgY3JlYXRlVG9rZW5BdXRoOiAoKSA9PiBjcmVhdGVUb2tlbkF1dGhcbn0pO1xubW9kdWxlLmV4cG9ydHMgPSBfX3RvQ29tbW9uSlMoZGlzdF9zcmNfZXhwb3J0cyk7XG5cbi8vIHBrZy9kaXN0LXNyYy9hdXRoLmpzXG52YXIgUkVHRVhfSVNfSU5TVEFMTEFUSU9OX0xFR0FDWSA9IC9edjFcXC4vO1xudmFyIFJFR0VYX0lTX0lOU1RBTExBVElPTiA9IC9eZ2hzXy87XG52YXIgUkVHRVhfSVNfVVNFUl9UT19TRVJWRVIgPSAvXmdodV8vO1xuYXN5bmMgZnVuY3Rpb24gYXV0aCh0b2tlbikge1xuICBjb25zdCBpc0FwcCA9IHRva2VuLnNwbGl0KC9cXC4vKS5sZW5ndGggPT09IDM7XG4gIGNvbnN0IGlzSW5zdGFsbGF0aW9uID0gUkVHRVhfSVNfSU5TVEFMTEFUSU9OX0xFR0FDWS50ZXN0KHRva2VuKSB8fCBSRUdFWF9JU19JTlNUQUxMQVRJT04udGVzdCh0b2tlbik7XG4gIGNvbnN0IGlzVXNlclRvU2VydmVyID0gUkVHRVhfSVNfVVNFUl9UT19TRVJWRVIudGVzdCh0b2tlbik7XG4gIGNvbnN0IHRva2VuVHlwZSA9IGlzQXBwID8gXCJhcHBcIiA6IGlzSW5zdGFsbGF0aW9uID8gXCJpbnN0YWxsYXRpb25cIiA6IGlzVXNlclRvU2VydmVyID8gXCJ1c2VyLXRvLXNlcnZlclwiIDogXCJvYXV0aFwiO1xuICByZXR1cm4ge1xuICAgIHR5cGU6IFwidG9rZW5cIixcbiAgICB0b2tlbixcbiAgICB0b2tlblR5cGVcbiAgfTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3dpdGgtYXV0aG9yaXphdGlvbi1wcmVmaXguanNcbmZ1bmN0aW9uIHdpdGhBdXRob3JpemF0aW9uUHJlZml4KHRva2VuKSB7XG4gIGlmICh0b2tlbi5zcGxpdCgvXFwuLykubGVuZ3RoID09PSAzKSB7XG4gICAgcmV0dXJuIGBiZWFyZXIgJHt0b2tlbn1gO1xuICB9XG4gIHJldHVybiBgdG9rZW4gJHt0b2tlbn1gO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvaG9vay5qc1xuYXN5bmMgZnVuY3Rpb24gaG9vayh0b2tlbiwgcmVxdWVzdCwgcm91dGUsIHBhcmFtZXRlcnMpIHtcbiAgY29uc3QgZW5kcG9pbnQgPSByZXF1ZXN0LmVuZHBvaW50Lm1lcmdlKFxuICAgIHJvdXRlLFxuICAgIHBhcmFtZXRlcnNcbiAgKTtcbiAgZW5kcG9pbnQuaGVhZGVycy5hdXRob3JpemF0aW9uID0gd2l0aEF1dGhvcml6YXRpb25QcmVmaXgodG9rZW4pO1xuICByZXR1cm4gcmVxdWVzdChlbmRwb2ludCk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9pbmRleC5qc1xudmFyIGNyZWF0ZVRva2VuQXV0aCA9IGZ1bmN0aW9uIGNyZWF0ZVRva2VuQXV0aDIodG9rZW4pIHtcbiAgaWYgKCF0b2tlbikge1xuICAgIHRocm93IG5ldyBFcnJvcihcIltAb2N0b2tpdC9hdXRoLXRva2VuXSBObyB0b2tlbiBwYXNzZWQgdG8gY3JlYXRlVG9rZW5BdXRoXCIpO1xuICB9XG4gIGlmICh0eXBlb2YgdG9rZW4gIT09IFwic3RyaW5nXCIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcIltAb2N0b2tpdC9hdXRoLXRva2VuXSBUb2tlbiBwYXNzZWQgdG8gY3JlYXRlVG9rZW5BdXRoIGlzIG5vdCBhIHN0cmluZ1wiXG4gICAgKTtcbiAgfVxuICB0b2tlbiA9IHRva2VuLnJlcGxhY2UoL14odG9rZW58YmVhcmVyKSArL2ksIFwiXCIpO1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihhdXRoLmJpbmQobnVsbCwgdG9rZW4pLCB7XG4gICAgaG9vazogaG9vay5iaW5kKG51bGwsIHRva2VuKVxuICB9KTtcbn07XG4vLyBBbm5vdGF0ZSB0aGUgQ29tbW9uSlMgZXhwb3J0IG5hbWVzIGZvciBFU00gaW1wb3J0IGluIG5vZGU6XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgY3JlYXRlVG9rZW5BdXRoXG59KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIF9fZ2V0T3duUHJvcE5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XG52YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX2V4cG9ydCA9ICh0YXJnZXQsIGFsbCkgPT4ge1xuICBmb3IgKHZhciBuYW1lIGluIGFsbClcbiAgICBfX2RlZlByb3AodGFyZ2V0LCBuYW1lLCB7IGdldDogYWxsW25hbWVdLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xufTtcbnZhciBfX2NvcHlQcm9wcyA9ICh0bywgZnJvbSwgZXhjZXB0LCBkZXNjKSA9PiB7XG4gIGlmIChmcm9tICYmIHR5cGVvZiBmcm9tID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBmcm9tID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBmb3IgKGxldCBrZXkgb2YgX19nZXRPd25Qcm9wTmFtZXMoZnJvbSkpXG4gICAgICBpZiAoIV9faGFzT3duUHJvcC5jYWxsKHRvLCBrZXkpICYmIGtleSAhPT0gZXhjZXB0KVxuICAgICAgICBfX2RlZlByb3AodG8sIGtleSwgeyBnZXQ6ICgpID0+IGZyb21ba2V5XSwgZW51bWVyYWJsZTogIShkZXNjID0gX19nZXRPd25Qcm9wRGVzYyhmcm9tLCBrZXkpKSB8fCBkZXNjLmVudW1lcmFibGUgfSk7XG4gIH1cbiAgcmV0dXJuIHRvO1xufTtcbnZhciBfX3RvQ29tbW9uSlMgPSAobW9kKSA9PiBfX2NvcHlQcm9wcyhfX2RlZlByb3Aoe30sIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pLCBtb2QpO1xuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbnZhciBkaXN0X3NyY19leHBvcnRzID0ge307XG5fX2V4cG9ydChkaXN0X3NyY19leHBvcnRzLCB7XG4gIE9jdG9raXQ6ICgpID0+IE9jdG9raXRcbn0pO1xubW9kdWxlLmV4cG9ydHMgPSBfX3RvQ29tbW9uSlMoZGlzdF9zcmNfZXhwb3J0cyk7XG52YXIgaW1wb3J0X3VuaXZlcnNhbF91c2VyX2FnZW50ID0gcmVxdWlyZShcInVuaXZlcnNhbC11c2VyLWFnZW50XCIpO1xudmFyIGltcG9ydF9iZWZvcmVfYWZ0ZXJfaG9vayA9IHJlcXVpcmUoXCJiZWZvcmUtYWZ0ZXItaG9va1wiKTtcbnZhciBpbXBvcnRfcmVxdWVzdCA9IHJlcXVpcmUoXCJAb2N0b2tpdC9yZXF1ZXN0XCIpO1xudmFyIGltcG9ydF9ncmFwaHFsID0gcmVxdWlyZShcIkBvY3Rva2l0L2dyYXBocWxcIik7XG52YXIgaW1wb3J0X2F1dGhfdG9rZW4gPSByZXF1aXJlKFwiQG9jdG9raXQvYXV0aC10b2tlblwiKTtcblxuLy8gcGtnL2Rpc3Qtc3JjL3ZlcnNpb24uanNcbnZhciBWRVJTSU9OID0gXCI1LjIuMFwiO1xuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbnZhciBub29wID0gKCkgPT4ge1xufTtcbnZhciBjb25zb2xlV2FybiA9IGNvbnNvbGUud2Fybi5iaW5kKGNvbnNvbGUpO1xudmFyIGNvbnNvbGVFcnJvciA9IGNvbnNvbGUuZXJyb3IuYmluZChjb25zb2xlKTtcbnZhciB1c2VyQWdlbnRUcmFpbCA9IGBvY3Rva2l0LWNvcmUuanMvJHtWRVJTSU9OfSAkeygwLCBpbXBvcnRfdW5pdmVyc2FsX3VzZXJfYWdlbnQuZ2V0VXNlckFnZW50KSgpfWA7XG52YXIgT2N0b2tpdCA9IGNsYXNzIHtcbiAgc3RhdGljIHtcbiAgICB0aGlzLlZFUlNJT04gPSBWRVJTSU9OO1xuICB9XG4gIHN0YXRpYyBkZWZhdWx0cyhkZWZhdWx0cykge1xuICAgIGNvbnN0IE9jdG9raXRXaXRoRGVmYXVsdHMgPSBjbGFzcyBleHRlbmRzIHRoaXMge1xuICAgICAgY29uc3RydWN0b3IoLi4uYXJncykge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gYXJnc1swXSB8fCB7fTtcbiAgICAgICAgaWYgKHR5cGVvZiBkZWZhdWx0cyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgc3VwZXIoZGVmYXVsdHMob3B0aW9ucykpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzdXBlcihcbiAgICAgICAgICBPYmplY3QuYXNzaWduKFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgICBkZWZhdWx0cyxcbiAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICBvcHRpb25zLnVzZXJBZ2VudCAmJiBkZWZhdWx0cy51c2VyQWdlbnQgPyB7XG4gICAgICAgICAgICAgIHVzZXJBZ2VudDogYCR7b3B0aW9ucy51c2VyQWdlbnR9ICR7ZGVmYXVsdHMudXNlckFnZW50fWBcbiAgICAgICAgICAgIH0gOiBudWxsXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIE9jdG9raXRXaXRoRGVmYXVsdHM7XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLnBsdWdpbnMgPSBbXTtcbiAgfVxuICAvKipcbiAgICogQXR0YWNoIGEgcGx1Z2luIChvciBtYW55KSB0byB5b3VyIE9jdG9raXQgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGNvbnN0IEFQSSA9IE9jdG9raXQucGx1Z2luKHBsdWdpbjEsIHBsdWdpbjIsIHBsdWdpbjMsIC4uLilcbiAgICovXG4gIHN0YXRpYyBwbHVnaW4oLi4ubmV3UGx1Z2lucykge1xuICAgIGNvbnN0IGN1cnJlbnRQbHVnaW5zID0gdGhpcy5wbHVnaW5zO1xuICAgIGNvbnN0IE5ld09jdG9raXQgPSBjbGFzcyBleHRlbmRzIHRoaXMge1xuICAgICAgc3RhdGljIHtcbiAgICAgICAgdGhpcy5wbHVnaW5zID0gY3VycmVudFBsdWdpbnMuY29uY2F0KFxuICAgICAgICAgIG5ld1BsdWdpbnMuZmlsdGVyKChwbHVnaW4pID0+ICFjdXJyZW50UGx1Z2lucy5pbmNsdWRlcyhwbHVnaW4pKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIE5ld09jdG9raXQ7XG4gIH1cbiAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgaG9vayA9IG5ldyBpbXBvcnRfYmVmb3JlX2FmdGVyX2hvb2suQ29sbGVjdGlvbigpO1xuICAgIGNvbnN0IHJlcXVlc3REZWZhdWx0cyA9IHtcbiAgICAgIGJhc2VVcmw6IGltcG9ydF9yZXF1ZXN0LnJlcXVlc3QuZW5kcG9pbnQuREVGQVVMVFMuYmFzZVVybCxcbiAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgcmVxdWVzdDogT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5yZXF1ZXN0LCB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmUgaW50ZXJuYWwgdXNhZ2Ugb25seSwgbm8gbmVlZCB0byB0eXBlXG4gICAgICAgIGhvb2s6IGhvb2suYmluZChudWxsLCBcInJlcXVlc3RcIilcbiAgICAgIH0pLFxuICAgICAgbWVkaWFUeXBlOiB7XG4gICAgICAgIHByZXZpZXdzOiBbXSxcbiAgICAgICAgZm9ybWF0OiBcIlwiXG4gICAgICB9XG4gICAgfTtcbiAgICByZXF1ZXN0RGVmYXVsdHMuaGVhZGVyc1tcInVzZXItYWdlbnRcIl0gPSBvcHRpb25zLnVzZXJBZ2VudCA/IGAke29wdGlvbnMudXNlckFnZW50fSAke3VzZXJBZ2VudFRyYWlsfWAgOiB1c2VyQWdlbnRUcmFpbDtcbiAgICBpZiAob3B0aW9ucy5iYXNlVXJsKSB7XG4gICAgICByZXF1ZXN0RGVmYXVsdHMuYmFzZVVybCA9IG9wdGlvbnMuYmFzZVVybDtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMucHJldmlld3MpIHtcbiAgICAgIHJlcXVlc3REZWZhdWx0cy5tZWRpYVR5cGUucHJldmlld3MgPSBvcHRpb25zLnByZXZpZXdzO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy50aW1lWm9uZSkge1xuICAgICAgcmVxdWVzdERlZmF1bHRzLmhlYWRlcnNbXCJ0aW1lLXpvbmVcIl0gPSBvcHRpb25zLnRpbWVab25lO1xuICAgIH1cbiAgICB0aGlzLnJlcXVlc3QgPSBpbXBvcnRfcmVxdWVzdC5yZXF1ZXN0LmRlZmF1bHRzKHJlcXVlc3REZWZhdWx0cyk7XG4gICAgdGhpcy5ncmFwaHFsID0gKDAsIGltcG9ydF9ncmFwaHFsLndpdGhDdXN0b21SZXF1ZXN0KSh0aGlzLnJlcXVlc3QpLmRlZmF1bHRzKHJlcXVlc3REZWZhdWx0cyk7XG4gICAgdGhpcy5sb2cgPSBPYmplY3QuYXNzaWduKFxuICAgICAge1xuICAgICAgICBkZWJ1Zzogbm9vcCxcbiAgICAgICAgaW5mbzogbm9vcCxcbiAgICAgICAgd2FybjogY29uc29sZVdhcm4sXG4gICAgICAgIGVycm9yOiBjb25zb2xlRXJyb3JcbiAgICAgIH0sXG4gICAgICBvcHRpb25zLmxvZ1xuICAgICk7XG4gICAgdGhpcy5ob29rID0gaG9vaztcbiAgICBpZiAoIW9wdGlvbnMuYXV0aFN0cmF0ZWd5KSB7XG4gICAgICBpZiAoIW9wdGlvbnMuYXV0aCkge1xuICAgICAgICB0aGlzLmF1dGggPSBhc3luYyAoKSA9PiAoe1xuICAgICAgICAgIHR5cGU6IFwidW5hdXRoZW50aWNhdGVkXCJcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBhdXRoID0gKDAsIGltcG9ydF9hdXRoX3Rva2VuLmNyZWF0ZVRva2VuQXV0aCkob3B0aW9ucy5hdXRoKTtcbiAgICAgICAgaG9vay53cmFwKFwicmVxdWVzdFwiLCBhdXRoLmhvb2spO1xuICAgICAgICB0aGlzLmF1dGggPSBhdXRoO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB7IGF1dGhTdHJhdGVneSwgLi4ub3RoZXJPcHRpb25zIH0gPSBvcHRpb25zO1xuICAgICAgY29uc3QgYXV0aCA9IGF1dGhTdHJhdGVneShcbiAgICAgICAgT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICB7XG4gICAgICAgICAgICByZXF1ZXN0OiB0aGlzLnJlcXVlc3QsXG4gICAgICAgICAgICBsb2c6IHRoaXMubG9nLFxuICAgICAgICAgICAgLy8gd2UgcGFzcyB0aGUgY3VycmVudCBvY3Rva2l0IGluc3RhbmNlIGFzIHdlbGwgYXMgaXRzIGNvbnN0cnVjdG9yIG9wdGlvbnNcbiAgICAgICAgICAgIC8vIHRvIGFsbG93IGZvciBhdXRoZW50aWNhdGlvbiBzdHJhdGVnaWVzIHRoYXQgcmV0dXJuIGEgbmV3IG9jdG9raXQgaW5zdGFuY2VcbiAgICAgICAgICAgIC8vIHRoYXQgc2hhcmVzIHRoZSBzYW1lIGludGVybmFsIHN0YXRlIGFzIHRoZSBjdXJyZW50IG9uZS4gVGhlIG9yaWdpbmFsXG4gICAgICAgICAgICAvLyByZXF1aXJlbWVudCBmb3IgdGhpcyB3YXMgdGhlIFwiZXZlbnQtb2N0b2tpdFwiIGF1dGhlbnRpY2F0aW9uIHN0cmF0ZWd5XG4gICAgICAgICAgICAvLyBvZiBodHRwczovL2dpdGh1Yi5jb20vcHJvYm90L29jdG9raXQtYXV0aC1wcm9ib3QuXG4gICAgICAgICAgICBvY3Rva2l0OiB0aGlzLFxuICAgICAgICAgICAgb2N0b2tpdE9wdGlvbnM6IG90aGVyT3B0aW9uc1xuICAgICAgICAgIH0sXG4gICAgICAgICAgb3B0aW9ucy5hdXRoXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICBob29rLndyYXAoXCJyZXF1ZXN0XCIsIGF1dGguaG9vayk7XG4gICAgICB0aGlzLmF1dGggPSBhdXRoO1xuICAgIH1cbiAgICBjb25zdCBjbGFzc0NvbnN0cnVjdG9yID0gdGhpcy5jb25zdHJ1Y3RvcjtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNsYXNzQ29uc3RydWN0b3IucGx1Z2lucy5sZW5ndGg7ICsraSkge1xuICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBjbGFzc0NvbnN0cnVjdG9yLnBsdWdpbnNbaV0odGhpcywgb3B0aW9ucykpO1xuICAgIH1cbiAgfVxufTtcbi8vIEFubm90YXRlIHRoZSBDb21tb25KUyBleHBvcnQgbmFtZXMgZm9yIEVTTSBpbXBvcnQgaW4gbm9kZTpcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICBPY3Rva2l0XG59KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIF9fZ2V0T3duUHJvcE5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XG52YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX2V4cG9ydCA9ICh0YXJnZXQsIGFsbCkgPT4ge1xuICBmb3IgKHZhciBuYW1lIGluIGFsbClcbiAgICBfX2RlZlByb3AodGFyZ2V0LCBuYW1lLCB7IGdldDogYWxsW25hbWVdLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xufTtcbnZhciBfX2NvcHlQcm9wcyA9ICh0bywgZnJvbSwgZXhjZXB0LCBkZXNjKSA9PiB7XG4gIGlmIChmcm9tICYmIHR5cGVvZiBmcm9tID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBmcm9tID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBmb3IgKGxldCBrZXkgb2YgX19nZXRPd25Qcm9wTmFtZXMoZnJvbSkpXG4gICAgICBpZiAoIV9faGFzT3duUHJvcC5jYWxsKHRvLCBrZXkpICYmIGtleSAhPT0gZXhjZXB0KVxuICAgICAgICBfX2RlZlByb3AodG8sIGtleSwgeyBnZXQ6ICgpID0+IGZyb21ba2V5XSwgZW51bWVyYWJsZTogIShkZXNjID0gX19nZXRPd25Qcm9wRGVzYyhmcm9tLCBrZXkpKSB8fCBkZXNjLmVudW1lcmFibGUgfSk7XG4gIH1cbiAgcmV0dXJuIHRvO1xufTtcbnZhciBfX3RvQ29tbW9uSlMgPSAobW9kKSA9PiBfX2NvcHlQcm9wcyhfX2RlZlByb3Aoe30sIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pLCBtb2QpO1xuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbnZhciBkaXN0X3NyY19leHBvcnRzID0ge307XG5fX2V4cG9ydChkaXN0X3NyY19leHBvcnRzLCB7XG4gIGxlZ2FjeVJlc3RFbmRwb2ludE1ldGhvZHM6ICgpID0+IGxlZ2FjeVJlc3RFbmRwb2ludE1ldGhvZHMsXG4gIHJlc3RFbmRwb2ludE1ldGhvZHM6ICgpID0+IHJlc3RFbmRwb2ludE1ldGhvZHNcbn0pO1xubW9kdWxlLmV4cG9ydHMgPSBfX3RvQ29tbW9uSlMoZGlzdF9zcmNfZXhwb3J0cyk7XG5cbi8vIHBrZy9kaXN0LXNyYy92ZXJzaW9uLmpzXG52YXIgVkVSU0lPTiA9IFwiMTAuNC4xXCI7XG5cbi8vIHBrZy9kaXN0LXNyYy9nZW5lcmF0ZWQvZW5kcG9pbnRzLmpzXG52YXIgRW5kcG9pbnRzID0ge1xuICBhY3Rpb25zOiB7XG4gICAgYWRkQ3VzdG9tTGFiZWxzVG9TZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVsc1wiXG4gICAgXSxcbiAgICBhZGRDdXN0b21MYWJlbHNUb1NlbGZIb3N0ZWRSdW5uZXJGb3JSZXBvOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIlxuICAgIF0sXG4gICAgYWRkU2VsZWN0ZWRSZXBvVG9PcmdTZWNyZXQ6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIlxuICAgIF0sXG4gICAgYWRkU2VsZWN0ZWRSZXBvVG9PcmdWYXJpYWJsZTogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIlxuICAgIF0sXG4gICAgYXBwcm92ZVdvcmtmbG93UnVuOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hcHByb3ZlXCJcbiAgICBdLFxuICAgIGNhbmNlbFdvcmtmbG93UnVuOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9jYW5jZWxcIlxuICAgIF0sXG4gICAgY3JlYXRlRW52aXJvbm1lbnRWYXJpYWJsZTogW1xuICAgICAgXCJQT1NUIC9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vdmFyaWFibGVzXCJcbiAgICBdLFxuICAgIGNyZWF0ZU9yVXBkYXRlRW52aXJvbm1lbnRTZWNyZXQ6IFtcbiAgICAgIFwiUFVUIC9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vc2VjcmV0cy97c2VjcmV0X25hbWV9XCJcbiAgICBdLFxuICAgIGNyZWF0ZU9yVXBkYXRlT3JnU2VjcmV0OiBbXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgY3JlYXRlT3JVcGRhdGVSZXBvU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIlxuICAgIF0sXG4gICAgY3JlYXRlT3JnVmFyaWFibGU6IFtcIlBPU1QgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXNcIl0sXG4gICAgY3JlYXRlUmVnaXN0cmF0aW9uVG9rZW5Gb3JPcmc6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMvcmVnaXN0cmF0aW9uLXRva2VuXCJcbiAgICBdLFxuICAgIGNyZWF0ZVJlZ2lzdHJhdGlvblRva2VuRm9yUmVwbzogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMvcmVnaXN0cmF0aW9uLXRva2VuXCJcbiAgICBdLFxuICAgIGNyZWF0ZVJlbW92ZVRva2VuRm9yT3JnOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy9yZW1vdmUtdG9rZW5cIl0sXG4gICAgY3JlYXRlUmVtb3ZlVG9rZW5Gb3JSZXBvOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy9yZW1vdmUtdG9rZW5cIlxuICAgIF0sXG4gICAgY3JlYXRlUmVwb1ZhcmlhYmxlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3ZhcmlhYmxlc1wiXSxcbiAgICBjcmVhdGVXb3JrZmxvd0Rpc3BhdGNoOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvd29ya2Zsb3dzL3t3b3JrZmxvd19pZH0vZGlzcGF0Y2hlc1wiXG4gICAgXSxcbiAgICBkZWxldGVBY3Rpb25zQ2FjaGVCeUlkOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9jYWNoZXMve2NhY2hlX2lkfVwiXG4gICAgXSxcbiAgICBkZWxldGVBY3Rpb25zQ2FjaGVCeUtleTogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvY2FjaGVzez9rZXkscmVmfVwiXG4gICAgXSxcbiAgICBkZWxldGVBcnRpZmFjdDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvYXJ0aWZhY3RzL3thcnRpZmFjdF9pZH1cIlxuICAgIF0sXG4gICAgZGVsZXRlRW52aXJvbm1lbnRTZWNyZXQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vc2VjcmV0cy97c2VjcmV0X25hbWV9XCJcbiAgICBdLFxuICAgIGRlbGV0ZUVudmlyb25tZW50VmFyaWFibGU6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vdmFyaWFibGVzL3tuYW1lfVwiXG4gICAgXSxcbiAgICBkZWxldGVPcmdTZWNyZXQ6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBkZWxldGVPcmdWYXJpYWJsZTogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2FjdGlvbnMvdmFyaWFibGVzL3tuYW1lfVwiXSxcbiAgICBkZWxldGVSZXBvU2VjcmV0OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIlxuICAgIF0sXG4gICAgZGVsZXRlUmVwb1ZhcmlhYmxlOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCJcbiAgICBdLFxuICAgIGRlbGV0ZVNlbGZIb3N0ZWRSdW5uZXJGcm9tT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH1cIlxuICAgIF0sXG4gICAgZGVsZXRlU2VsZkhvc3RlZFJ1bm5lckZyb21SZXBvOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZVdvcmtmbG93UnVuOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfVwiXSxcbiAgICBkZWxldGVXb3JrZmxvd1J1bkxvZ3M6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vbG9nc1wiXG4gICAgXSxcbiAgICBkaXNhYmxlU2VsZWN0ZWRSZXBvc2l0b3J5R2l0aHViQWN0aW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCJcbiAgICBdLFxuICAgIGRpc2FibGVXb3JrZmxvdzogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvd29ya2Zsb3dzL3t3b3JrZmxvd19pZH0vZGlzYWJsZVwiXG4gICAgXSxcbiAgICBkb3dubG9hZEFydGlmYWN0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9hcnRpZmFjdHMve2FydGlmYWN0X2lkfS97YXJjaGl2ZV9mb3JtYXR9XCJcbiAgICBdLFxuICAgIGRvd25sb2FkSm9iTG9nc0ZvcldvcmtmbG93UnVuOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9qb2JzL3tqb2JfaWR9L2xvZ3NcIlxuICAgIF0sXG4gICAgZG93bmxvYWRXb3JrZmxvd1J1bkF0dGVtcHRMb2dzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2F0dGVtcHRzL3thdHRlbXB0X251bWJlcn0vbG9nc1wiXG4gICAgXSxcbiAgICBkb3dubG9hZFdvcmtmbG93UnVuTG9nczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9sb2dzXCJcbiAgICBdLFxuICAgIGVuYWJsZVNlbGVjdGVkUmVwb3NpdG9yeUdpdGh1YkFjdGlvbnNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiXG4gICAgXSxcbiAgICBlbmFibGVXb3JrZmxvdzogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvd29ya2Zsb3dzL3t3b3JrZmxvd19pZH0vZW5hYmxlXCJcbiAgICBdLFxuICAgIGZvcmNlQ2FuY2VsV29ya2Zsb3dSdW46IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2ZvcmNlLWNhbmNlbFwiXG4gICAgXSxcbiAgICBnZW5lcmF0ZVJ1bm5lckppdGNvbmZpZ0Zvck9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy9nZW5lcmF0ZS1qaXRjb25maWdcIlxuICAgIF0sXG4gICAgZ2VuZXJhdGVSdW5uZXJKaXRjb25maWdGb3JSZXBvOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy9nZW5lcmF0ZS1qaXRjb25maWdcIlxuICAgIF0sXG4gICAgZ2V0QWN0aW9uc0NhY2hlTGlzdDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2NhY2hlc1wiXSxcbiAgICBnZXRBY3Rpb25zQ2FjaGVVc2FnZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2NhY2hlL3VzYWdlXCJdLFxuICAgIGdldEFjdGlvbnNDYWNoZVVzYWdlQnlSZXBvRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2NhY2hlL3VzYWdlLWJ5LXJlcG9zaXRvcnlcIlxuICAgIF0sXG4gICAgZ2V0QWN0aW9uc0NhY2hlVXNhZ2VGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2NhY2hlL3VzYWdlXCJdLFxuICAgIGdldEFsbG93ZWRBY3Rpb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3NlbGVjdGVkLWFjdGlvbnNcIlxuICAgIF0sXG4gICAgZ2V0QWxsb3dlZEFjdGlvbnNSZXBvc2l0b3J5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9ucy9zZWxlY3RlZC1hY3Rpb25zXCJcbiAgICBdLFxuICAgIGdldEFydGlmYWN0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvYXJ0aWZhY3RzL3thcnRpZmFjdF9pZH1cIl0sXG4gICAgZ2V0Q3VzdG9tT2lkY1N1YkNsYWltRm9yUmVwbzogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvb2lkYy9jdXN0b21pemF0aW9uL3N1YlwiXG4gICAgXSxcbiAgICBnZXRFbnZpcm9ubWVudFB1YmxpY0tleTogW1xuICAgICAgXCJHRVQgL3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH0vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9zZWNyZXRzL3B1YmxpYy1rZXlcIlxuICAgIF0sXG4gICAgZ2V0RW52aXJvbm1lbnRTZWNyZXQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vc2VjcmV0cy97c2VjcmV0X25hbWV9XCJcbiAgICBdLFxuICAgIGdldEVudmlyb25tZW50VmFyaWFibGU6IFtcbiAgICAgIFwiR0VUIC9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vdmFyaWFibGVzL3tuYW1lfVwiXG4gICAgXSxcbiAgICBnZXRHaXRodWJBY3Rpb25zRGVmYXVsdFdvcmtmbG93UGVybWlzc2lvbnNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvd29ya2Zsb3dcIlxuICAgIF0sXG4gICAgZ2V0R2l0aHViQWN0aW9uc0RlZmF1bHRXb3JrZmxvd1Blcm1pc3Npb25zUmVwb3NpdG9yeTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnMvd29ya2Zsb3dcIlxuICAgIF0sXG4gICAgZ2V0R2l0aHViQWN0aW9uc1Blcm1pc3Npb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zXCJcbiAgICBdLFxuICAgIGdldEdpdGh1YkFjdGlvbnNQZXJtaXNzaW9uc1JlcG9zaXRvcnk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zXCJcbiAgICBdLFxuICAgIGdldEpvYkZvcldvcmtmbG93UnVuOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvam9icy97am9iX2lkfVwiXSxcbiAgICBnZXRPcmdQdWJsaWNLZXk6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMvcHVibGljLWtleVwiXSxcbiAgICBnZXRPcmdTZWNyZXQ6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBnZXRPcmdWYXJpYWJsZTogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvdmFyaWFibGVzL3tuYW1lfVwiXSxcbiAgICBnZXRQZW5kaW5nRGVwbG95bWVudHNGb3JSdW46IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vcGVuZGluZ19kZXBsb3ltZW50c1wiXG4gICAgXSxcbiAgICBnZXRSZXBvUGVybWlzc2lvbnM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiYWN0aW9uc1wiLCBcImdldEdpdGh1YkFjdGlvbnNQZXJtaXNzaW9uc1JlcG9zaXRvcnlcIl0gfVxuICAgIF0sXG4gICAgZ2V0UmVwb1B1YmxpY0tleTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3NlY3JldHMvcHVibGljLWtleVwiXSxcbiAgICBnZXRSZXBvU2VjcmV0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGdldFJlcG9WYXJpYWJsZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX1cIl0sXG4gICAgZ2V0UmV2aWV3c0ZvclJ1bjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hcHByb3ZhbHNcIlxuICAgIF0sXG4gICAgZ2V0U2VsZkhvc3RlZFJ1bm5lckZvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfVwiXSxcbiAgICBnZXRTZWxmSG9zdGVkUnVubmVyRm9yUmVwbzogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfVwiXG4gICAgXSxcbiAgICBnZXRXb3JrZmxvdzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9XCJdLFxuICAgIGdldFdvcmtmbG93QWNjZXNzVG9SZXBvc2l0b3J5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9ucy9hY2Nlc3NcIlxuICAgIF0sXG4gICAgZ2V0V29ya2Zsb3dSdW46IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9XCJdLFxuICAgIGdldFdvcmtmbG93UnVuQXR0ZW1wdDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hdHRlbXB0cy97YXR0ZW1wdF9udW1iZXJ9XCJcbiAgICBdLFxuICAgIGdldFdvcmtmbG93UnVuVXNhZ2U6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vdGltaW5nXCJcbiAgICBdLFxuICAgIGdldFdvcmtmbG93VXNhZ2U6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L3RpbWluZ1wiXG4gICAgXSxcbiAgICBsaXN0QXJ0aWZhY3RzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2FydGlmYWN0c1wiXSxcbiAgICBsaXN0RW52aXJvbm1lbnRTZWNyZXRzOiBbXG4gICAgICBcIkdFVCAvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHNcIlxuICAgIF0sXG4gICAgbGlzdEVudmlyb25tZW50VmFyaWFibGVzOiBbXG4gICAgICBcIkdFVCAvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3ZhcmlhYmxlc1wiXG4gICAgXSxcbiAgICBsaXN0Sm9ic0ZvcldvcmtmbG93UnVuOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2pvYnNcIlxuICAgIF0sXG4gICAgbGlzdEpvYnNGb3JXb3JrZmxvd1J1bkF0dGVtcHQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXR0ZW1wdHMve2F0dGVtcHRfbnVtYmVyfS9qb2JzXCJcbiAgICBdLFxuICAgIGxpc3RMYWJlbHNGb3JTZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCJcbiAgICBdLFxuICAgIGxpc3RMYWJlbHNGb3JTZWxmSG9zdGVkUnVubmVyRm9yUmVwbzogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIlxuICAgIF0sXG4gICAgbGlzdE9yZ1NlY3JldHM6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHNcIl0sXG4gICAgbGlzdE9yZ1ZhcmlhYmxlczogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvdmFyaWFibGVzXCJdLFxuICAgIGxpc3RSZXBvT3JnYW5pemF0aW9uU2VjcmV0czogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvb3JnYW5pemF0aW9uLXNlY3JldHNcIlxuICAgIF0sXG4gICAgbGlzdFJlcG9Pcmdhbml6YXRpb25WYXJpYWJsZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL29yZ2FuaXphdGlvbi12YXJpYWJsZXNcIlxuICAgIF0sXG4gICAgbGlzdFJlcG9TZWNyZXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvc2VjcmV0c1wiXSxcbiAgICBsaXN0UmVwb1ZhcmlhYmxlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3ZhcmlhYmxlc1wiXSxcbiAgICBsaXN0UmVwb1dvcmtmbG93czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93c1wiXSxcbiAgICBsaXN0UnVubmVyQXBwbGljYXRpb25zRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL2Rvd25sb2Fkc1wiXSxcbiAgICBsaXN0UnVubmVyQXBwbGljYXRpb25zRm9yUmVwbzogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy9kb3dubG9hZHNcIlxuICAgIF0sXG4gICAgbGlzdFNlbGVjdGVkUmVwb3NGb3JPcmdTZWNyZXQ6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiXG4gICAgXSxcbiAgICBsaXN0U2VsZWN0ZWRSZXBvc0Zvck9yZ1ZhcmlhYmxlOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX0vcmVwb3NpdG9yaWVzXCJcbiAgICBdLFxuICAgIGxpc3RTZWxlY3RlZFJlcG9zaXRvcmllc0VuYWJsZWRHaXRodWJBY3Rpb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3JlcG9zaXRvcmllc1wiXG4gICAgXSxcbiAgICBsaXN0U2VsZkhvc3RlZFJ1bm5lcnNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnNcIl0sXG4gICAgbGlzdFNlbGZIb3N0ZWRSdW5uZXJzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnNcIl0sXG4gICAgbGlzdFdvcmtmbG93UnVuQXJ0aWZhY3RzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2FydGlmYWN0c1wiXG4gICAgXSxcbiAgICBsaXN0V29ya2Zsb3dSdW5zOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3Mve3dvcmtmbG93X2lkfS9ydW5zXCJcbiAgICBdLFxuICAgIGxpc3RXb3JrZmxvd1J1bnNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVuc1wiXSxcbiAgICByZVJ1bkpvYkZvcldvcmtmbG93UnVuOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvam9icy97am9iX2lkfS9yZXJ1blwiXG4gICAgXSxcbiAgICByZVJ1bldvcmtmbG93OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vcmVydW5cIl0sXG4gICAgcmVSdW5Xb3JrZmxvd0ZhaWxlZEpvYnM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L3JlcnVuLWZhaWxlZC1qb2JzXCJcbiAgICBdLFxuICAgIHJlbW92ZUFsbEN1c3RvbUxhYmVsc0Zyb21TZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCJcbiAgICBdLFxuICAgIHJlbW92ZUFsbEN1c3RvbUxhYmVsc0Zyb21TZWxmSG9zdGVkUnVubmVyRm9yUmVwbzogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIlxuICAgIF0sXG4gICAgcmVtb3ZlQ3VzdG9tTGFiZWxGcm9tU2VsZkhvc3RlZFJ1bm5lckZvck9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVscy97bmFtZX1cIlxuICAgIF0sXG4gICAgcmVtb3ZlQ3VzdG9tTGFiZWxGcm9tU2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzL3tuYW1lfVwiXG4gICAgXSxcbiAgICByZW1vdmVTZWxlY3RlZFJlcG9Gcm9tT3JnU2VjcmV0OiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCJcbiAgICBdLFxuICAgIHJlbW92ZVNlbGVjdGVkUmVwb0Zyb21PcmdWYXJpYWJsZTogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIlxuICAgIF0sXG4gICAgcmV2aWV3Q3VzdG9tR2F0ZXNGb3JSdW46IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2RlcGxveW1lbnRfcHJvdGVjdGlvbl9ydWxlXCJcbiAgICBdLFxuICAgIHJldmlld1BlbmRpbmdEZXBsb3ltZW50c0ZvclJ1bjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vcGVuZGluZ19kZXBsb3ltZW50c1wiXG4gICAgXSxcbiAgICBzZXRBbGxvd2VkQWN0aW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9zZWxlY3RlZC1hY3Rpb25zXCJcbiAgICBdLFxuICAgIHNldEFsbG93ZWRBY3Rpb25zUmVwb3NpdG9yeTogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnMvc2VsZWN0ZWQtYWN0aW9uc1wiXG4gICAgXSxcbiAgICBzZXRDdXN0b21MYWJlbHNGb3JTZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCJcbiAgICBdLFxuICAgIHNldEN1c3RvbUxhYmVsc0ZvclNlbGZIb3N0ZWRSdW5uZXJGb3JSZXBvOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVsc1wiXG4gICAgXSxcbiAgICBzZXRDdXN0b21PaWRjU3ViQ2xhaW1Gb3JSZXBvOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9vaWRjL2N1c3RvbWl6YXRpb24vc3ViXCJcbiAgICBdLFxuICAgIHNldEdpdGh1YkFjdGlvbnNEZWZhdWx0V29ya2Zsb3dQZXJtaXNzaW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy93b3JrZmxvd1wiXG4gICAgXSxcbiAgICBzZXRHaXRodWJBY3Rpb25zRGVmYXVsdFdvcmtmbG93UGVybWlzc2lvbnNSZXBvc2l0b3J5OiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9ucy93b3JrZmxvd1wiXG4gICAgXSxcbiAgICBzZXRHaXRodWJBY3Rpb25zUGVybWlzc2lvbnNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnNcIlxuICAgIF0sXG4gICAgc2V0R2l0aHViQWN0aW9uc1Blcm1pc3Npb25zUmVwb3NpdG9yeTogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnNcIlxuICAgIF0sXG4gICAgc2V0U2VsZWN0ZWRSZXBvc0Zvck9yZ1NlY3JldDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCJcbiAgICBdLFxuICAgIHNldFNlbGVjdGVkUmVwb3NGb3JPcmdWYXJpYWJsZTogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9L3JlcG9zaXRvcmllc1wiXG4gICAgXSxcbiAgICBzZXRTZWxlY3RlZFJlcG9zaXRvcmllc0VuYWJsZWRHaXRodWJBY3Rpb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3JlcG9zaXRvcmllc1wiXG4gICAgXSxcbiAgICBzZXRXb3JrZmxvd0FjY2Vzc1RvUmVwb3NpdG9yeTogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnMvYWNjZXNzXCJcbiAgICBdLFxuICAgIHVwZGF0ZUVudmlyb25tZW50VmFyaWFibGU6IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH0vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS92YXJpYWJsZXMve25hbWV9XCJcbiAgICBdLFxuICAgIHVwZGF0ZU9yZ1ZhcmlhYmxlOiBbXCJQQVRDSCAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX1cIl0sXG4gICAgdXBkYXRlUmVwb1ZhcmlhYmxlOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX1cIlxuICAgIF1cbiAgfSxcbiAgYWN0aXZpdHk6IHtcbiAgICBjaGVja1JlcG9Jc1N0YXJyZWRCeUF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvc3RhcnJlZC97b3duZXJ9L3tyZXBvfVwiXSxcbiAgICBkZWxldGVSZXBvU3Vic2NyaXB0aW9uOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmlwdGlvblwiXSxcbiAgICBkZWxldGVUaHJlYWRTdWJzY3JpcHRpb246IFtcbiAgICAgIFwiREVMRVRFIC9ub3RpZmljYXRpb25zL3RocmVhZHMve3RocmVhZF9pZH0vc3Vic2NyaXB0aW9uXCJcbiAgICBdLFxuICAgIGdldEZlZWRzOiBbXCJHRVQgL2ZlZWRzXCJdLFxuICAgIGdldFJlcG9TdWJzY3JpcHRpb246IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3Vic2NyaXB0aW9uXCJdLFxuICAgIGdldFRocmVhZDogW1wiR0VUIC9ub3RpZmljYXRpb25zL3RocmVhZHMve3RocmVhZF9pZH1cIl0sXG4gICAgZ2V0VGhyZWFkU3Vic2NyaXB0aW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC9ub3RpZmljYXRpb25zL3RocmVhZHMve3RocmVhZF9pZH0vc3Vic2NyaXB0aW9uXCJcbiAgICBdLFxuICAgIGxpc3RFdmVudHNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2V2ZW50c1wiXSxcbiAgICBsaXN0Tm90aWZpY2F0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL25vdGlmaWNhdGlvbnNcIl0sXG4gICAgbGlzdE9yZ0V2ZW50c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ldmVudHMvb3Jncy97b3JnfVwiXG4gICAgXSxcbiAgICBsaXN0UHVibGljRXZlbnRzOiBbXCJHRVQgL2V2ZW50c1wiXSxcbiAgICBsaXN0UHVibGljRXZlbnRzRm9yUmVwb05ldHdvcms6IFtcIkdFVCAvbmV0d29ya3Mve293bmVyfS97cmVwb30vZXZlbnRzXCJdLFxuICAgIGxpc3RQdWJsaWNFdmVudHNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzL3B1YmxpY1wiXSxcbiAgICBsaXN0UHVibGljT3JnRXZlbnRzOiBbXCJHRVQgL29yZ3Mve29yZ30vZXZlbnRzXCJdLFxuICAgIGxpc3RSZWNlaXZlZEV2ZW50c0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9yZWNlaXZlZF9ldmVudHNcIl0sXG4gICAgbGlzdFJlY2VpdmVkUHVibGljRXZlbnRzRm9yVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcmVjZWl2ZWRfZXZlbnRzL3B1YmxpY1wiXG4gICAgXSxcbiAgICBsaXN0UmVwb0V2ZW50czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ldmVudHNcIl0sXG4gICAgbGlzdFJlcG9Ob3RpZmljYXRpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ub3RpZmljYXRpb25zXCJcbiAgICBdLFxuICAgIGxpc3RSZXBvc1N0YXJyZWRCeUF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvc3RhcnJlZFwiXSxcbiAgICBsaXN0UmVwb3NTdGFycmVkQnlVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc3RhcnJlZFwiXSxcbiAgICBsaXN0UmVwb3NXYXRjaGVkQnlVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc3Vic2NyaXB0aW9uc1wiXSxcbiAgICBsaXN0U3RhcmdhemVyc0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3RhcmdhemVyc1wiXSxcbiAgICBsaXN0V2F0Y2hlZFJlcG9zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9zdWJzY3JpcHRpb25zXCJdLFxuICAgIGxpc3RXYXRjaGVyc0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3Vic2NyaWJlcnNcIl0sXG4gICAgbWFya05vdGlmaWNhdGlvbnNBc1JlYWQ6IFtcIlBVVCAvbm90aWZpY2F0aW9uc1wiXSxcbiAgICBtYXJrUmVwb05vdGlmaWNhdGlvbnNBc1JlYWQ6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vbm90aWZpY2F0aW9uc1wiXSxcbiAgICBtYXJrVGhyZWFkQXNEb25lOiBbXCJERUxFVEUgL25vdGlmaWNhdGlvbnMvdGhyZWFkcy97dGhyZWFkX2lkfVwiXSxcbiAgICBtYXJrVGhyZWFkQXNSZWFkOiBbXCJQQVRDSCAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9XCJdLFxuICAgIHNldFJlcG9TdWJzY3JpcHRpb246IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3Vic2NyaXB0aW9uXCJdLFxuICAgIHNldFRocmVhZFN1YnNjcmlwdGlvbjogW1xuICAgICAgXCJQVVQgL25vdGlmaWNhdGlvbnMvdGhyZWFkcy97dGhyZWFkX2lkfS9zdWJzY3JpcHRpb25cIlxuICAgIF0sXG4gICAgc3RhclJlcG9Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUFVUIC91c2VyL3N0YXJyZWQve293bmVyfS97cmVwb31cIl0sXG4gICAgdW5zdGFyUmVwb0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvc3RhcnJlZC97b3duZXJ9L3tyZXBvfVwiXVxuICB9LFxuICBhcHBzOiB7XG4gICAgYWRkUmVwb1RvSW5zdGFsbGF0aW9uOiBbXG4gICAgICBcIlBVVCAvdXNlci9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJhcHBzXCIsIFwiYWRkUmVwb1RvSW5zdGFsbGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfVxuICAgIF0sXG4gICAgYWRkUmVwb1RvSW5zdGFsbGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUFVUIC91c2VyL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiXG4gICAgXSxcbiAgICBjaGVja1Rva2VuOiBbXCJQT1NUIC9hcHBsaWNhdGlvbnMve2NsaWVudF9pZH0vdG9rZW5cIl0sXG4gICAgY3JlYXRlRnJvbU1hbmlmZXN0OiBbXCJQT1NUIC9hcHAtbWFuaWZlc3RzL3tjb2RlfS9jb252ZXJzaW9uc1wiXSxcbiAgICBjcmVhdGVJbnN0YWxsYXRpb25BY2Nlc3NUb2tlbjogW1xuICAgICAgXCJQT1NUIC9hcHAvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9hY2Nlc3NfdG9rZW5zXCJcbiAgICBdLFxuICAgIGRlbGV0ZUF1dGhvcml6YXRpb246IFtcIkRFTEVURSAvYXBwbGljYXRpb25zL3tjbGllbnRfaWR9L2dyYW50XCJdLFxuICAgIGRlbGV0ZUluc3RhbGxhdGlvbjogW1wiREVMRVRFIC9hcHAvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfVwiXSxcbiAgICBkZWxldGVUb2tlbjogW1wiREVMRVRFIC9hcHBsaWNhdGlvbnMve2NsaWVudF9pZH0vdG9rZW5cIl0sXG4gICAgZ2V0QXV0aGVudGljYXRlZDogW1wiR0VUIC9hcHBcIl0sXG4gICAgZ2V0QnlTbHVnOiBbXCJHRVQgL2FwcHMve2FwcF9zbHVnfVwiXSxcbiAgICBnZXRJbnN0YWxsYXRpb246IFtcIkdFVCAvYXBwL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH1cIl0sXG4gICAgZ2V0T3JnSW5zdGFsbGF0aW9uOiBbXCJHRVQgL29yZ3Mve29yZ30vaW5zdGFsbGF0aW9uXCJdLFxuICAgIGdldFJlcG9JbnN0YWxsYXRpb246IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaW5zdGFsbGF0aW9uXCJdLFxuICAgIGdldFN1YnNjcmlwdGlvblBsYW5Gb3JBY2NvdW50OiBbXG4gICAgICBcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9hY2NvdW50cy97YWNjb3VudF9pZH1cIlxuICAgIF0sXG4gICAgZ2V0U3Vic2NyaXB0aW9uUGxhbkZvckFjY291bnRTdHViYmVkOiBbXG4gICAgICBcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9zdHViYmVkL2FjY291bnRzL3thY2NvdW50X2lkfVwiXG4gICAgXSxcbiAgICBnZXRVc2VySW5zdGFsbGF0aW9uOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vaW5zdGFsbGF0aW9uXCJdLFxuICAgIGdldFdlYmhvb2tDb25maWdGb3JBcHA6IFtcIkdFVCAvYXBwL2hvb2svY29uZmlnXCJdLFxuICAgIGdldFdlYmhvb2tEZWxpdmVyeTogW1wiR0VUIC9hcHAvaG9vay9kZWxpdmVyaWVzL3tkZWxpdmVyeV9pZH1cIl0sXG4gICAgbGlzdEFjY291bnRzRm9yUGxhbjogW1wiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3BsYW5zL3twbGFuX2lkfS9hY2NvdW50c1wiXSxcbiAgICBsaXN0QWNjb3VudHNGb3JQbGFuU3R1YmJlZDogW1xuICAgICAgXCJHRVQgL21hcmtldHBsYWNlX2xpc3Rpbmcvc3R1YmJlZC9wbGFucy97cGxhbl9pZH0vYWNjb3VudHNcIlxuICAgIF0sXG4gICAgbGlzdEluc3RhbGxhdGlvblJlcG9zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCJcbiAgICBdLFxuICAgIGxpc3RJbnN0YWxsYXRpb25SZXF1ZXN0c0ZvckF1dGhlbnRpY2F0ZWRBcHA6IFtcbiAgICAgIFwiR0VUIC9hcHAvaW5zdGFsbGF0aW9uLXJlcXVlc3RzXCJcbiAgICBdLFxuICAgIGxpc3RJbnN0YWxsYXRpb25zOiBbXCJHRVQgL2FwcC9pbnN0YWxsYXRpb25zXCJdLFxuICAgIGxpc3RJbnN0YWxsYXRpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9pbnN0YWxsYXRpb25zXCJdLFxuICAgIGxpc3RQbGFuczogW1wiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3BsYW5zXCJdLFxuICAgIGxpc3RQbGFuc1N0dWJiZWQ6IFtcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9zdHViYmVkL3BsYW5zXCJdLFxuICAgIGxpc3RSZXBvc0FjY2Vzc2libGVUb0luc3RhbGxhdGlvbjogW1wiR0VUIC9pbnN0YWxsYXRpb24vcmVwb3NpdG9yaWVzXCJdLFxuICAgIGxpc3RTdWJzY3JpcHRpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9tYXJrZXRwbGFjZV9wdXJjaGFzZXNcIl0sXG4gICAgbGlzdFN1YnNjcmlwdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlclN0dWJiZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL21hcmtldHBsYWNlX3B1cmNoYXNlcy9zdHViYmVkXCJcbiAgICBdLFxuICAgIGxpc3RXZWJob29rRGVsaXZlcmllczogW1wiR0VUIC9hcHAvaG9vay9kZWxpdmVyaWVzXCJdLFxuICAgIHJlZGVsaXZlcldlYmhvb2tEZWxpdmVyeTogW1xuICAgICAgXCJQT1NUIC9hcHAvaG9vay9kZWxpdmVyaWVzL3tkZWxpdmVyeV9pZH0vYXR0ZW1wdHNcIlxuICAgIF0sXG4gICAgcmVtb3ZlUmVwb0Zyb21JbnN0YWxsYXRpb246IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcImFwcHNcIiwgXCJyZW1vdmVSZXBvRnJvbUluc3RhbGxhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIHJlbW92ZVJlcG9Gcm9tSW5zdGFsbGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiXG4gICAgXSxcbiAgICByZXNldFRva2VuOiBbXCJQQVRDSCAvYXBwbGljYXRpb25zL3tjbGllbnRfaWR9L3Rva2VuXCJdLFxuICAgIHJldm9rZUluc3RhbGxhdGlvbkFjY2Vzc1Rva2VuOiBbXCJERUxFVEUgL2luc3RhbGxhdGlvbi90b2tlblwiXSxcbiAgICBzY29wZVRva2VuOiBbXCJQT1NUIC9hcHBsaWNhdGlvbnMve2NsaWVudF9pZH0vdG9rZW4vc2NvcGVkXCJdLFxuICAgIHN1c3BlbmRJbnN0YWxsYXRpb246IFtcIlBVVCAvYXBwL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vc3VzcGVuZGVkXCJdLFxuICAgIHVuc3VzcGVuZEluc3RhbGxhdGlvbjogW1xuICAgICAgXCJERUxFVEUgL2FwcC9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3N1c3BlbmRlZFwiXG4gICAgXSxcbiAgICB1cGRhdGVXZWJob29rQ29uZmlnRm9yQXBwOiBbXCJQQVRDSCAvYXBwL2hvb2svY29uZmlnXCJdXG4gIH0sXG4gIGJpbGxpbmc6IHtcbiAgICBnZXRHaXRodWJBY3Rpb25zQmlsbGluZ09yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL2JpbGxpbmcvYWN0aW9uc1wiXSxcbiAgICBnZXRHaXRodWJBY3Rpb25zQmlsbGluZ1VzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NldHRpbmdzL2JpbGxpbmcvYWN0aW9uc1wiXG4gICAgXSxcbiAgICBnZXRHaXRodWJQYWNrYWdlc0JpbGxpbmdPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9zZXR0aW5ncy9iaWxsaW5nL3BhY2thZ2VzXCJdLFxuICAgIGdldEdpdGh1YlBhY2thZ2VzQmlsbGluZ1VzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NldHRpbmdzL2JpbGxpbmcvcGFja2FnZXNcIlxuICAgIF0sXG4gICAgZ2V0U2hhcmVkU3RvcmFnZUJpbGxpbmdPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL2JpbGxpbmcvc2hhcmVkLXN0b3JhZ2VcIlxuICAgIF0sXG4gICAgZ2V0U2hhcmVkU3RvcmFnZUJpbGxpbmdVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zZXR0aW5ncy9iaWxsaW5nL3NoYXJlZC1zdG9yYWdlXCJcbiAgICBdXG4gIH0sXG4gIGNoZWNrczoge1xuICAgIGNyZWF0ZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stcnVuc1wiXSxcbiAgICBjcmVhdGVTdWl0ZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stc3VpdGVzXCJdLFxuICAgIGdldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1ydW5zL3tjaGVja19ydW5faWR9XCJdLFxuICAgIGdldFN1aXRlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXN1aXRlcy97Y2hlY2tfc3VpdGVfaWR9XCJdLFxuICAgIGxpc3RBbm5vdGF0aW9uczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXJ1bnMve2NoZWNrX3J1bl9pZH0vYW5ub3RhdGlvbnNcIlxuICAgIF0sXG4gICAgbGlzdEZvclJlZjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L2NoZWNrLXJ1bnNcIl0sXG4gICAgbGlzdEZvclN1aXRlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stc3VpdGVzL3tjaGVja19zdWl0ZV9pZH0vY2hlY2stcnVuc1wiXG4gICAgXSxcbiAgICBsaXN0U3VpdGVzRm9yUmVmOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vY2hlY2stc3VpdGVzXCJdLFxuICAgIHJlcmVxdWVzdFJ1bjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1ydW5zL3tjaGVja19ydW5faWR9L3JlcmVxdWVzdFwiXG4gICAgXSxcbiAgICByZXJlcXVlc3RTdWl0ZTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1zdWl0ZXMve2NoZWNrX3N1aXRlX2lkfS9yZXJlcXVlc3RcIlxuICAgIF0sXG4gICAgc2V0U3VpdGVzUHJlZmVyZW5jZXM6IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXN1aXRlcy9wcmVmZXJlbmNlc1wiXG4gICAgXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1ydW5zL3tjaGVja19ydW5faWR9XCJdXG4gIH0sXG4gIGNvZGVTY2FubmluZzoge1xuICAgIGRlbGV0ZUFuYWx5c2lzOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbmFseXNlcy97YW5hbHlzaXNfaWR9ez9jb25maXJtX2RlbGV0ZX1cIlxuICAgIF0sXG4gICAgZ2V0QWxlcnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWRQYXJhbWV0ZXJzOiB7IGFsZXJ0X2lkOiBcImFsZXJ0X251bWJlclwiIH0gfVxuICAgIF0sXG4gICAgZ2V0QW5hbHlzaXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FuYWx5c2VzL3thbmFseXNpc19pZH1cIlxuICAgIF0sXG4gICAgZ2V0Q29kZXFsRGF0YWJhc2U6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2NvZGVxbC9kYXRhYmFzZXMve2xhbmd1YWdlfVwiXG4gICAgXSxcbiAgICBnZXREZWZhdWx0U2V0dXA6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9kZWZhdWx0LXNldHVwXCJdLFxuICAgIGdldFNhcmlmOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvc2FyaWZzL3tzYXJpZl9pZH1cIl0sXG4gICAgbGlzdEFsZXJ0SW5zdGFuY2VzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn0vaW5zdGFuY2VzXCJcbiAgICBdLFxuICAgIGxpc3RBbGVydHNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9jb2RlLXNjYW5uaW5nL2FsZXJ0c1wiXSxcbiAgICBsaXN0QWxlcnRzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0c1wiXSxcbiAgICBsaXN0QWxlcnRzSW5zdGFuY2VzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn0vaW5zdGFuY2VzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiY29kZVNjYW5uaW5nXCIsIFwibGlzdEFsZXJ0SW5zdGFuY2VzXCJdIH1cbiAgICBdLFxuICAgIGxpc3RDb2RlcWxEYXRhYmFzZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2NvZGVxbC9kYXRhYmFzZXNcIlxuICAgIF0sXG4gICAgbGlzdFJlY2VudEFuYWx5c2VzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYW5hbHlzZXNcIl0sXG4gICAgdXBkYXRlQWxlcnQ6IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9XCJcbiAgICBdLFxuICAgIHVwZGF0ZURlZmF1bHRTZXR1cDogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9kZWZhdWx0LXNldHVwXCJcbiAgICBdLFxuICAgIHVwbG9hZFNhcmlmOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL3Nhcmlmc1wiXVxuICB9LFxuICBjb2Rlc09mQ29uZHVjdDoge1xuICAgIGdldEFsbENvZGVzT2ZDb25kdWN0OiBbXCJHRVQgL2NvZGVzX29mX2NvbmR1Y3RcIl0sXG4gICAgZ2V0Q29uZHVjdENvZGU6IFtcIkdFVCAvY29kZXNfb2ZfY29uZHVjdC97a2V5fVwiXVxuICB9LFxuICBjb2Rlc3BhY2VzOiB7XG4gICAgYWRkUmVwb3NpdG9yeUZvclNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBVVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCJcbiAgICBdLFxuICAgIGFkZFNlbGVjdGVkUmVwb1RvT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCJcbiAgICBdLFxuICAgIGNoZWNrUGVybWlzc2lvbnNGb3JEZXZjb250YWluZXI6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL3Blcm1pc3Npb25zX2NoZWNrXCJcbiAgICBdLFxuICAgIGNvZGVzcGFjZU1hY2hpbmVzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfS9tYWNoaW5lc1wiXG4gICAgXSxcbiAgICBjcmVhdGVGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9jb2Rlc3BhY2VzXCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXG4gICAgXSxcbiAgICBjcmVhdGVPclVwZGF0ZVJlcG9TZWNyZXQ6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXG4gICAgXSxcbiAgICBjcmVhdGVPclVwZGF0ZVNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBVVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXG4gICAgXSxcbiAgICBjcmVhdGVXaXRoUHJGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2NvZGVzcGFjZXNcIlxuICAgIF0sXG4gICAgY3JlYXRlV2l0aFJlcG9Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzXCJcbiAgICBdLFxuICAgIGRlbGV0ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9XCJdLFxuICAgIGRlbGV0ZUZyb21Pcmdhbml6YXRpb246IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfS9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX1cIlxuICAgIF0sXG4gICAgZGVsZXRlT3JnU2VjcmV0OiBbXCJERUxFVEUgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZGVsZXRlUmVwb1NlY3JldDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJcbiAgICBdLFxuICAgIGRlbGV0ZVNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXG4gICAgXSxcbiAgICBleHBvcnRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQT1NUIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfS9leHBvcnRzXCJcbiAgICBdLFxuICAgIGdldENvZGVzcGFjZXNGb3JVc2VySW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfS9jb2Rlc3BhY2VzXCJcbiAgICBdLFxuICAgIGdldEV4cG9ydERldGFpbHNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9L2V4cG9ydHMve2V4cG9ydF9pZH1cIlxuICAgIF0sXG4gICAgZ2V0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX1cIl0sXG4gICAgZ2V0T3JnUHVibGljS2V5OiBbXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3B1YmxpYy1rZXlcIl0sXG4gICAgZ2V0T3JnU2VjcmV0OiBbXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZ2V0UHVibGljS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy9wdWJsaWMta2V5XCJcbiAgICBdLFxuICAgIGdldFJlcG9QdWJsaWNLZXk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL3NlY3JldHMvcHVibGljLWtleVwiXG4gICAgXSxcbiAgICBnZXRSZXBvU2VjcmV0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIlxuICAgIF0sXG4gICAgZ2V0U2VjcmV0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJcbiAgICBdLFxuICAgIGxpc3REZXZjb250YWluZXJzSW5SZXBvc2l0b3J5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL2RldmNvbnRhaW5lcnNcIlxuICAgIF0sXG4gICAgbGlzdEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvY29kZXNwYWNlc1wiXSxcbiAgICBsaXN0SW5Pcmdhbml6YXRpb246IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkUGFyYW1ldGVyczogeyBvcmdfaWQ6IFwib3JnXCIgfSB9XG4gICAgXSxcbiAgICBsaXN0SW5SZXBvc2l0b3J5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzXCJcbiAgICBdLFxuICAgIGxpc3RPcmdTZWNyZXRzOiBbXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzXCJdLFxuICAgIGxpc3RSZXBvU2VjcmV0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL3NlY3JldHNcIl0sXG4gICAgbGlzdFJlcG9zaXRvcmllc0ZvclNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIlxuICAgIF0sXG4gICAgbGlzdFNlY3JldHNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0c1wiXSxcbiAgICBsaXN0U2VsZWN0ZWRSZXBvc0Zvck9yZ1NlY3JldDogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCJcbiAgICBdLFxuICAgIHByZUZsaWdodFdpdGhSZXBvRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL25ld1wiXG4gICAgXSxcbiAgICBwdWJsaXNoRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUE9TVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vcHVibGlzaFwiXG4gICAgXSxcbiAgICByZW1vdmVSZXBvc2l0b3J5Rm9yU2VjcmV0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIlxuICAgIF0sXG4gICAgcmVtb3ZlU2VsZWN0ZWRSZXBvRnJvbU9yZ1NlY3JldDogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiXG4gICAgXSxcbiAgICByZXBvTWFjaGluZXNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvbWFjaGluZXNcIlxuICAgIF0sXG4gICAgc2V0UmVwb3NpdG9yaWVzRm9yU2VjcmV0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUFVUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiXG4gICAgXSxcbiAgICBzZXRTZWxlY3RlZFJlcG9zRm9yT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIlxuICAgIF0sXG4gICAgc3RhcnRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vc3RhcnRcIl0sXG4gICAgc3RvcEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfS9zdG9wXCJdLFxuICAgIHN0b3BJbk9yZ2FuaXphdGlvbjogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfS9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vc3RvcFwiXG4gICAgXSxcbiAgICB1cGRhdGVGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUEFUQ0ggL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9XCJdXG4gIH0sXG4gIGNvcGlsb3Q6IHtcbiAgICBhZGRDb3BpbG90U2VhdHNGb3JUZWFtczogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L2NvcGlsb3QvYmlsbGluZy9zZWxlY3RlZF90ZWFtc1wiXG4gICAgXSxcbiAgICBhZGRDb3BpbG90U2VhdHNGb3JVc2VyczogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L2NvcGlsb3QvYmlsbGluZy9zZWxlY3RlZF91c2Vyc1wiXG4gICAgXSxcbiAgICBjYW5jZWxDb3BpbG90U2VhdEFzc2lnbm1lbnRGb3JUZWFtczogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vY29waWxvdC9iaWxsaW5nL3NlbGVjdGVkX3RlYW1zXCJcbiAgICBdLFxuICAgIGNhbmNlbENvcGlsb3RTZWF0QXNzaWdubWVudEZvclVzZXJzOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmcvc2VsZWN0ZWRfdXNlcnNcIlxuICAgIF0sXG4gICAgZ2V0Q29waWxvdE9yZ2FuaXphdGlvbkRldGFpbHM6IFtcIkdFVCAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmdcIl0sXG4gICAgZ2V0Q29waWxvdFNlYXREZXRhaWxzRm9yVXNlcjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vbWVtYmVycy97dXNlcm5hbWV9L2NvcGlsb3RcIlxuICAgIF0sXG4gICAgbGlzdENvcGlsb3RTZWF0czogW1wiR0VUIC9vcmdzL3tvcmd9L2NvcGlsb3QvYmlsbGluZy9zZWF0c1wiXVxuICB9LFxuICBkZXBlbmRhYm90OiB7XG4gICAgYWRkU2VsZWN0ZWRSZXBvVG9PcmdTZWNyZXQ6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIlxuICAgIF0sXG4gICAgY3JlYXRlT3JVcGRhdGVPcmdTZWNyZXQ6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJcbiAgICBdLFxuICAgIGNyZWF0ZU9yVXBkYXRlUmVwb1NlY3JldDogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJcbiAgICBdLFxuICAgIGRlbGV0ZU9yZ1NlY3JldDogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGRlbGV0ZVJlcG9TZWNyZXQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfVwiXG4gICAgXSxcbiAgICBnZXRBbGVydDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L2FsZXJ0cy97YWxlcnRfbnVtYmVyfVwiXSxcbiAgICBnZXRPcmdQdWJsaWNLZXk6IFtcIkdFVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMvcHVibGljLWtleVwiXSxcbiAgICBnZXRPcmdTZWNyZXQ6IFtcIkdFVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBnZXRSZXBvUHVibGljS2V5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9zZWNyZXRzL3B1YmxpYy1rZXlcIlxuICAgIF0sXG4gICAgZ2V0UmVwb1NlY3JldDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJcbiAgICBdLFxuICAgIGxpc3RBbGVydHNGb3JFbnRlcnByaXNlOiBbXG4gICAgICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2RlcGVuZGFib3QvYWxlcnRzXCJcbiAgICBdLFxuICAgIGxpc3RBbGVydHNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L2FsZXJ0c1wiXSxcbiAgICBsaXN0QWxlcnRzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L2FsZXJ0c1wiXSxcbiAgICBsaXN0T3JnU2VjcmV0czogW1wiR0VUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0c1wiXSxcbiAgICBsaXN0UmVwb1NlY3JldHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9zZWNyZXRzXCJdLFxuICAgIGxpc3RTZWxlY3RlZFJlcG9zRm9yT3JnU2VjcmV0OiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIlxuICAgIF0sXG4gICAgcmVtb3ZlU2VsZWN0ZWRSZXBvRnJvbU9yZ1NlY3JldDogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiXG4gICAgXSxcbiAgICBzZXRTZWxlY3RlZFJlcG9zRm9yT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIlxuICAgIF0sXG4gICAgdXBkYXRlQWxlcnQ6IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3QvYWxlcnRzL3thbGVydF9udW1iZXJ9XCJcbiAgICBdXG4gIH0sXG4gIGRlcGVuZGVuY3lHcmFwaDoge1xuICAgIGNyZWF0ZVJlcG9zaXRvcnlTbmFwc2hvdDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRlbmN5LWdyYXBoL3NuYXBzaG90c1wiXG4gICAgXSxcbiAgICBkaWZmUmFuZ2U6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRlbmN5LWdyYXBoL2NvbXBhcmUve2Jhc2VoZWFkfVwiXG4gICAgXSxcbiAgICBleHBvcnRTYm9tOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGVuY3ktZ3JhcGgvc2JvbVwiXVxuICB9LFxuICBlbW9qaXM6IHsgZ2V0OiBbXCJHRVQgL2Vtb2ppc1wiXSB9LFxuICBnaXN0czoge1xuICAgIGNoZWNrSXNTdGFycmVkOiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfS9zdGFyXCJdLFxuICAgIGNyZWF0ZTogW1wiUE9TVCAvZ2lzdHNcIl0sXG4gICAgY3JlYXRlQ29tbWVudDogW1wiUE9TVCAvZ2lzdHMve2dpc3RfaWR9L2NvbW1lbnRzXCJdLFxuICAgIGRlbGV0ZTogW1wiREVMRVRFIC9naXN0cy97Z2lzdF9pZH1cIl0sXG4gICAgZGVsZXRlQ29tbWVudDogW1wiREVMRVRFIC9naXN0cy97Z2lzdF9pZH0vY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIGZvcms6IFtcIlBPU1QgL2dpc3RzL3tnaXN0X2lkfS9mb3Jrc1wiXSxcbiAgICBnZXQ6IFtcIkdFVCAvZ2lzdHMve2dpc3RfaWR9XCJdLFxuICAgIGdldENvbW1lbnQ6IFtcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBnZXRSZXZpc2lvbjogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH0ve3NoYX1cIl0sXG4gICAgbGlzdDogW1wiR0VUIC9naXN0c1wiXSxcbiAgICBsaXN0Q29tbWVudHM6IFtcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L2NvbW1lbnRzXCJdLFxuICAgIGxpc3RDb21taXRzOiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfS9jb21taXRzXCJdLFxuICAgIGxpc3RGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZ2lzdHNcIl0sXG4gICAgbGlzdEZvcmtzOiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfS9mb3Jrc1wiXSxcbiAgICBsaXN0UHVibGljOiBbXCJHRVQgL2dpc3RzL3B1YmxpY1wiXSxcbiAgICBsaXN0U3RhcnJlZDogW1wiR0VUIC9naXN0cy9zdGFycmVkXCJdLFxuICAgIHN0YXI6IFtcIlBVVCAvZ2lzdHMve2dpc3RfaWR9L3N0YXJcIl0sXG4gICAgdW5zdGFyOiBbXCJERUxFVEUgL2dpc3RzL3tnaXN0X2lkfS9zdGFyXCJdLFxuICAgIHVwZGF0ZTogW1wiUEFUQ0ggL2dpc3RzL3tnaXN0X2lkfVwiXSxcbiAgICB1cGRhdGVDb21tZW50OiBbXCJQQVRDSCAvZ2lzdHMve2dpc3RfaWR9L2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXVxuICB9LFxuICBnaXQ6IHtcbiAgICBjcmVhdGVCbG9iOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvYmxvYnNcIl0sXG4gICAgY3JlYXRlQ29tbWl0OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvY29tbWl0c1wiXSxcbiAgICBjcmVhdGVSZWY6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9yZWZzXCJdLFxuICAgIGNyZWF0ZVRhZzogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3RhZ3NcIl0sXG4gICAgY3JlYXRlVHJlZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3RyZWVzXCJdLFxuICAgIGRlbGV0ZVJlZjogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvcmVmcy97cmVmfVwiXSxcbiAgICBnZXRCbG9iOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9ibG9icy97ZmlsZV9zaGF9XCJdLFxuICAgIGdldENvbW1pdDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvY29tbWl0cy97Y29tbWl0X3NoYX1cIl0sXG4gICAgZ2V0UmVmOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9yZWYve3JlZn1cIl0sXG4gICAgZ2V0VGFnOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC90YWdzL3t0YWdfc2hhfVwiXSxcbiAgICBnZXRUcmVlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC90cmVlcy97dHJlZV9zaGF9XCJdLFxuICAgIGxpc3RNYXRjaGluZ1JlZnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L21hdGNoaW5nLXJlZnMve3JlZn1cIl0sXG4gICAgdXBkYXRlUmVmOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3JlZnMve3JlZn1cIl1cbiAgfSxcbiAgZ2l0aWdub3JlOiB7XG4gICAgZ2V0QWxsVGVtcGxhdGVzOiBbXCJHRVQgL2dpdGlnbm9yZS90ZW1wbGF0ZXNcIl0sXG4gICAgZ2V0VGVtcGxhdGU6IFtcIkdFVCAvZ2l0aWdub3JlL3RlbXBsYXRlcy97bmFtZX1cIl1cbiAgfSxcbiAgaW50ZXJhY3Rpb25zOiB7XG4gICAgZ2V0UmVzdHJpY3Rpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgZ2V0UmVzdHJpY3Rpb25zRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIGdldFJlc3RyaWN0aW9uc0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIGdldFJlc3RyaWN0aW9uc0ZvcllvdXJQdWJsaWNSZXBvczogW1xuICAgICAgXCJHRVQgL3VzZXIvaW50ZXJhY3Rpb24tbGltaXRzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiaW50ZXJhY3Rpb25zXCIsIFwiZ2V0UmVzdHJpY3Rpb25zRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfVxuICAgIF0sXG4gICAgcmVtb3ZlUmVzdHJpY3Rpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgcmVtb3ZlUmVzdHJpY3Rpb25zRm9yT3JnOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIHJlbW92ZVJlc3RyaWN0aW9uc0ZvclJlcG86IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbnRlcmFjdGlvbi1saW1pdHNcIlxuICAgIF0sXG4gICAgcmVtb3ZlUmVzdHJpY3Rpb25zRm9yWW91clB1YmxpY1JlcG9zOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9pbnRlcmFjdGlvbi1saW1pdHNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJpbnRlcmFjdGlvbnNcIiwgXCJyZW1vdmVSZXN0cmljdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBzZXRSZXN0cmljdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUFVUIC91c2VyL2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICBzZXRSZXN0cmljdGlvbnNGb3JPcmc6IFtcIlBVVCAvb3Jncy97b3JnfS9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgc2V0UmVzdHJpY3Rpb25zRm9yUmVwbzogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgc2V0UmVzdHJpY3Rpb25zRm9yWW91clB1YmxpY1JlcG9zOiBbXG4gICAgICBcIlBVVCAvdXNlci9pbnRlcmFjdGlvbi1saW1pdHNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJpbnRlcmFjdGlvbnNcIiwgXCJzZXRSZXN0cmljdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXVxuICB9LFxuICBpc3N1ZXM6IHtcbiAgICBhZGRBc3NpZ25lZXM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2Fzc2lnbmVlc1wiXG4gICAgXSxcbiAgICBhZGRMYWJlbHM6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sYWJlbHNcIl0sXG4gICAgY2hlY2tVc2VyQ2FuQmVBc3NpZ25lZDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hc3NpZ25lZXMve2Fzc2lnbmVlfVwiXSxcbiAgICBjaGVja1VzZXJDYW5CZUFzc2lnbmVkVG9Jc3N1ZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9hc3NpZ25lZXMve2Fzc2lnbmVlfVwiXG4gICAgXSxcbiAgICBjcmVhdGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlc1wiXSxcbiAgICBjcmVhdGVDb21tZW50OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9jb21tZW50c1wiXG4gICAgXSxcbiAgICBjcmVhdGVMYWJlbDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vbGFiZWxzXCJdLFxuICAgIGNyZWF0ZU1pbGVzdG9uZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lc1wiXSxcbiAgICBkZWxldGVDb21tZW50OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXG4gICAgXSxcbiAgICBkZWxldGVMYWJlbDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sYWJlbHMve25hbWV9XCJdLFxuICAgIGRlbGV0ZU1pbGVzdG9uZTogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXMve21pbGVzdG9uZV9udW1iZXJ9XCJcbiAgICBdLFxuICAgIGdldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn1cIl0sXG4gICAgZ2V0Q29tbWVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIGdldEV2ZW50OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9ldmVudHMve2V2ZW50X2lkfVwiXSxcbiAgICBnZXRMYWJlbDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sYWJlbHMve25hbWV9XCJdLFxuICAgIGdldE1pbGVzdG9uZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzL3ttaWxlc3RvbmVfbnVtYmVyfVwiXSxcbiAgICBsaXN0OiBbXCJHRVQgL2lzc3Vlc1wiXSxcbiAgICBsaXN0QXNzaWduZWVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Fzc2lnbmVlc1wiXSxcbiAgICBsaXN0Q29tbWVudHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2NvbW1lbnRzXCJdLFxuICAgIGxpc3RDb21tZW50c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzXCJdLFxuICAgIGxpc3RFdmVudHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2V2ZW50c1wiXSxcbiAgICBsaXN0RXZlbnRzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvZXZlbnRzXCJdLFxuICAgIGxpc3RFdmVudHNGb3JUaW1lbGluZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS90aW1lbGluZVwiXG4gICAgXSxcbiAgICBsaXN0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9pc3N1ZXNcIl0sXG4gICAgbGlzdEZvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2lzc3Vlc1wiXSxcbiAgICBsaXN0Rm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXNcIl0sXG4gICAgbGlzdExhYmVsc0Zvck1pbGVzdG9uZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXMve21pbGVzdG9uZV9udW1iZXJ9L2xhYmVsc1wiXG4gICAgXSxcbiAgICBsaXN0TGFiZWxzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sYWJlbHNcIl0sXG4gICAgbGlzdExhYmVsc09uSXNzdWU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbGFiZWxzXCJcbiAgICBdLFxuICAgIGxpc3RNaWxlc3RvbmVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXNcIl0sXG4gICAgbG9jazogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbG9ja1wiXSxcbiAgICByZW1vdmVBbGxMYWJlbHM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbGFiZWxzXCJcbiAgICBdLFxuICAgIHJlbW92ZUFzc2lnbmVlczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9hc3NpZ25lZXNcIlxuICAgIF0sXG4gICAgcmVtb3ZlTGFiZWw6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbGFiZWxzL3tuYW1lfVwiXG4gICAgXSxcbiAgICBzZXRMYWJlbHM6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xhYmVsc1wiXSxcbiAgICB1bmxvY2s6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xvY2tcIl0sXG4gICAgdXBkYXRlOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9XCJdLFxuICAgIHVwZGF0ZUNvbW1lbnQ6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIHVwZGF0ZUxhYmVsOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vbGFiZWxzL3tuYW1lfVwiXSxcbiAgICB1cGRhdGVNaWxlc3RvbmU6IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXMve21pbGVzdG9uZV9udW1iZXJ9XCJcbiAgICBdXG4gIH0sXG4gIGxpY2Vuc2VzOiB7XG4gICAgZ2V0OiBbXCJHRVQgL2xpY2Vuc2VzL3tsaWNlbnNlfVwiXSxcbiAgICBnZXRBbGxDb21tb25seVVzZWQ6IFtcIkdFVCAvbGljZW5zZXNcIl0sXG4gICAgZ2V0Rm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9saWNlbnNlXCJdXG4gIH0sXG4gIG1hcmtkb3duOiB7XG4gICAgcmVuZGVyOiBbXCJQT1NUIC9tYXJrZG93blwiXSxcbiAgICByZW5kZXJSYXc6IFtcbiAgICAgIFwiUE9TVCAvbWFya2Rvd24vcmF3XCIsXG4gICAgICB7IGhlYWRlcnM6IHsgXCJjb250ZW50LXR5cGVcIjogXCJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04XCIgfSB9XG4gICAgXVxuICB9LFxuICBtZXRhOiB7XG4gICAgZ2V0OiBbXCJHRVQgL21ldGFcIl0sXG4gICAgZ2V0QWxsVmVyc2lvbnM6IFtcIkdFVCAvdmVyc2lvbnNcIl0sXG4gICAgZ2V0T2N0b2NhdDogW1wiR0VUIC9vY3RvY2F0XCJdLFxuICAgIGdldFplbjogW1wiR0VUIC96ZW5cIl0sXG4gICAgcm9vdDogW1wiR0VUIC9cIl1cbiAgfSxcbiAgbWlncmF0aW9uczoge1xuICAgIGNhbmNlbEltcG9ydDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ltcG9ydFwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6IFwib2N0b2tpdC5yZXN0Lm1pZ3JhdGlvbnMuY2FuY2VsSW1wb3J0KCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvbWlncmF0aW9ucy9zb3VyY2UtaW1wb3J0cyNjYW5jZWwtYW4taW1wb3J0XCJcbiAgICAgIH1cbiAgICBdLFxuICAgIGRlbGV0ZUFyY2hpdmVGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9hcmNoaXZlXCJcbiAgICBdLFxuICAgIGRlbGV0ZUFyY2hpdmVGb3JPcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vYXJjaGl2ZVwiXG4gICAgXSxcbiAgICBkb3dubG9hZEFyY2hpdmVGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vYXJjaGl2ZVwiXG4gICAgXSxcbiAgICBnZXRBcmNoaXZlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vYXJjaGl2ZVwiXG4gICAgXSxcbiAgICBnZXRDb21taXRBdXRob3JzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaW1wb3J0L2F1dGhvcnNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOiBcIm9jdG9raXQucmVzdC5taWdyYXRpb25zLmdldENvbW1pdEF1dGhvcnMoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9taWdyYXRpb25zL3NvdXJjZS1pbXBvcnRzI2dldC1jb21taXQtYXV0aG9yc1wiXG4gICAgICB9XG4gICAgXSxcbiAgICBnZXRJbXBvcnRTdGF0dXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbXBvcnRcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOiBcIm9jdG9raXQucmVzdC5taWdyYXRpb25zLmdldEltcG9ydFN0YXR1cygpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L21pZ3JhdGlvbnMvc291cmNlLWltcG9ydHMjZ2V0LWFuLWltcG9ydC1zdGF0dXNcIlxuICAgICAgfVxuICAgIF0sXG4gICAgZ2V0TGFyZ2VGaWxlczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ltcG9ydC9sYXJnZV9maWxlc1wiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6IFwib2N0b2tpdC5yZXN0Lm1pZ3JhdGlvbnMuZ2V0TGFyZ2VGaWxlcygpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L21pZ3JhdGlvbnMvc291cmNlLWltcG9ydHMjZ2V0LWxhcmdlLWZpbGVzXCJcbiAgICAgIH1cbiAgICBdLFxuICAgIGdldFN0YXR1c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfVwiXSxcbiAgICBnZXRTdGF0dXNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9XCJdLFxuICAgIGxpc3RGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL21pZ3JhdGlvbnNcIl0sXG4gICAgbGlzdEZvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnNcIl0sXG4gICAgbGlzdFJlcG9zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCJcbiAgICBdLFxuICAgIGxpc3RSZXBvc0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCJdLFxuICAgIGxpc3RSZXBvc0ZvclVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wibWlncmF0aW9uc1wiLCBcImxpc3RSZXBvc0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIG1hcENvbW1pdEF1dGhvcjogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaW1wb3J0L2F1dGhvcnMve2F1dGhvcl9pZH1cIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOiBcIm9jdG9raXQucmVzdC5taWdyYXRpb25zLm1hcENvbW1pdEF1dGhvcigpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L21pZ3JhdGlvbnMvc291cmNlLWltcG9ydHMjbWFwLWEtY29tbWl0LWF1dGhvclwiXG4gICAgICB9XG4gICAgXSxcbiAgICBzZXRMZnNQcmVmZXJlbmNlOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbXBvcnQvbGZzXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDogXCJvY3Rva2l0LnJlc3QubWlncmF0aW9ucy5zZXRMZnNQcmVmZXJlbmNlKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvbWlncmF0aW9ucy9zb3VyY2UtaW1wb3J0cyN1cGRhdGUtZ2l0LWxmcy1wcmVmZXJlbmNlXCJcbiAgICAgIH1cbiAgICBdLFxuICAgIHN0YXJ0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvbWlncmF0aW9uc1wiXSxcbiAgICBzdGFydEZvck9yZzogW1wiUE9TVCAvb3Jncy97b3JnfS9taWdyYXRpb25zXCJdLFxuICAgIHN0YXJ0SW1wb3J0OiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vaW1wb3J0XCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDogXCJvY3Rva2l0LnJlc3QubWlncmF0aW9ucy5zdGFydEltcG9ydCgpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L21pZ3JhdGlvbnMvc291cmNlLWltcG9ydHMjc3RhcnQtYW4taW1wb3J0XCJcbiAgICAgIH1cbiAgICBdLFxuICAgIHVubG9ja1JlcG9Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9yZXBvcy97cmVwb19uYW1lfS9sb2NrXCJcbiAgICBdLFxuICAgIHVubG9ja1JlcG9Gb3JPcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3Mve3JlcG9fbmFtZX0vbG9ja1wiXG4gICAgXSxcbiAgICB1cGRhdGVJbXBvcnQ6IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2ltcG9ydFwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6IFwib2N0b2tpdC5yZXN0Lm1pZ3JhdGlvbnMudXBkYXRlSW1wb3J0KCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvbWlncmF0aW9ucy9zb3VyY2UtaW1wb3J0cyN1cGRhdGUtYW4taW1wb3J0XCJcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIG9pZGM6IHtcbiAgICBnZXRPaWRjQ3VzdG9tU3ViVGVtcGxhdGVGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvb2lkYy9jdXN0b21pemF0aW9uL3N1YlwiXG4gICAgXSxcbiAgICB1cGRhdGVPaWRjQ3VzdG9tU3ViVGVtcGxhdGVGb3JPcmc6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvb2lkYy9jdXN0b21pemF0aW9uL3N1YlwiXG4gICAgXVxuICB9LFxuICBvcmdzOiB7XG4gICAgYWRkU2VjdXJpdHlNYW5hZ2VyVGVhbTogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vc2VjdXJpdHktbWFuYWdlcnMvdGVhbXMve3RlYW1fc2x1Z31cIlxuICAgIF0sXG4gICAgYXNzaWduVGVhbVRvT3JnUm9sZTogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3RlYW1zL3t0ZWFtX3NsdWd9L3tyb2xlX2lkfVwiXG4gICAgXSxcbiAgICBhc3NpZ25Vc2VyVG9PcmdSb2xlOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMvdXNlcnMve3VzZXJuYW1lfS97cm9sZV9pZH1cIlxuICAgIF0sXG4gICAgYmxvY2tVc2VyOiBbXCJQVVQgL29yZ3Mve29yZ30vYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgY2FuY2VsSW52aXRhdGlvbjogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfVwiXSxcbiAgICBjaGVja0Jsb2NrZWRVc2VyOiBbXCJHRVQgL29yZ3Mve29yZ30vYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgY2hlY2tNZW1iZXJzaGlwRm9yVXNlcjogW1wiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfVwiXSxcbiAgICBjaGVja1B1YmxpY01lbWJlcnNoaXBGb3JVc2VyOiBbXCJHRVQgL29yZ3Mve29yZ30vcHVibGljX21lbWJlcnMve3VzZXJuYW1lfVwiXSxcbiAgICBjb252ZXJ0TWVtYmVyVG9PdXRzaWRlQ29sbGFib3JhdG9yOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9vdXRzaWRlX2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiXG4gICAgXSxcbiAgICBjcmVhdGVDdXN0b21Pcmdhbml6YXRpb25Sb2xlOiBbXCJQT1NUIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlc1wiXSxcbiAgICBjcmVhdGVJbnZpdGF0aW9uOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2ludml0YXRpb25zXCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlQ3VzdG9tUHJvcGVydGllczogW1wiUEFUQ0ggL29yZ3Mve29yZ30vcHJvcGVydGllcy9zY2hlbWFcIl0sXG4gICAgY3JlYXRlT3JVcGRhdGVDdXN0b21Qcm9wZXJ0aWVzVmFsdWVzRm9yUmVwb3M6IFtcbiAgICAgIFwiUEFUQ0ggL29yZ3Mve29yZ30vcHJvcGVydGllcy92YWx1ZXNcIlxuICAgIF0sXG4gICAgY3JlYXRlT3JVcGRhdGVDdXN0b21Qcm9wZXJ0eTogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vcHJvcGVydGllcy9zY2hlbWEve2N1c3RvbV9wcm9wZXJ0eV9uYW1lfVwiXG4gICAgXSxcbiAgICBjcmVhdGVXZWJob29rOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2hvb2tzXCJdLFxuICAgIGRlbGV0ZTogW1wiREVMRVRFIC9vcmdzL3tvcmd9XCJdLFxuICAgIGRlbGV0ZUN1c3RvbU9yZ2FuaXphdGlvblJvbGU6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy97cm9sZV9pZH1cIlxuICAgIF0sXG4gICAgZGVsZXRlV2ViaG9vazogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfVwiXSxcbiAgICBlbmFibGVPckRpc2FibGVTZWN1cml0eVByb2R1Y3RPbkFsbE9yZ1JlcG9zOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30ve3NlY3VyaXR5X3Byb2R1Y3R9L3tlbmFibGVtZW50fVwiXG4gICAgXSxcbiAgICBnZXQ6IFtcIkdFVCAvb3Jncy97b3JnfVwiXSxcbiAgICBnZXRBbGxDdXN0b21Qcm9wZXJ0aWVzOiBbXCJHRVQgL29yZ3Mve29yZ30vcHJvcGVydGllcy9zY2hlbWFcIl0sXG4gICAgZ2V0Q3VzdG9tUHJvcGVydHk6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvc2NoZW1hL3tjdXN0b21fcHJvcGVydHlfbmFtZX1cIlxuICAgIF0sXG4gICAgZ2V0TWVtYmVyc2hpcEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvbWVtYmVyc2hpcHMvb3Jncy97b3JnfVwiXSxcbiAgICBnZXRNZW1iZXJzaGlwRm9yVXNlcjogW1wiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnNoaXBzL3t1c2VybmFtZX1cIl0sXG4gICAgZ2V0T3JnUm9sZTogW1wiR0VUIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy97cm9sZV9pZH1cIl0sXG4gICAgZ2V0V2ViaG9vazogW1wiR0VUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfVwiXSxcbiAgICBnZXRXZWJob29rQ29uZmlnRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L2NvbmZpZ1wiXSxcbiAgICBnZXRXZWJob29rRGVsaXZlcnk6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzL3tkZWxpdmVyeV9pZH1cIlxuICAgIF0sXG4gICAgbGlzdDogW1wiR0VUIC9vcmdhbml6YXRpb25zXCJdLFxuICAgIGxpc3RBcHBJbnN0YWxsYXRpb25zOiBbXCJHRVQgL29yZ3Mve29yZ30vaW5zdGFsbGF0aW9uc1wiXSxcbiAgICBsaXN0QmxvY2tlZFVzZXJzOiBbXCJHRVQgL29yZ3Mve29yZ30vYmxvY2tzXCJdLFxuICAgIGxpc3RDdXN0b21Qcm9wZXJ0aWVzVmFsdWVzRm9yUmVwb3M6IFtcIkdFVCAvb3Jncy97b3JnfS9wcm9wZXJ0aWVzL3ZhbHVlc1wiXSxcbiAgICBsaXN0RmFpbGVkSW52aXRhdGlvbnM6IFtcIkdFVCAvb3Jncy97b3JnfS9mYWlsZWRfaW52aXRhdGlvbnNcIl0sXG4gICAgbGlzdEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvb3Jnc1wiXSxcbiAgICBsaXN0Rm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L29yZ3NcIl0sXG4gICAgbGlzdEludml0YXRpb25UZWFtczogW1wiR0VUIC9vcmdzL3tvcmd9L2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfS90ZWFtc1wiXSxcbiAgICBsaXN0TWVtYmVyczogW1wiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnNcIl0sXG4gICAgbGlzdE1lbWJlcnNoaXBzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9tZW1iZXJzaGlwcy9vcmdzXCJdLFxuICAgIGxpc3RPcmdSb2xlVGVhbXM6IFtcIkdFVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMve3JvbGVfaWR9L3RlYW1zXCJdLFxuICAgIGxpc3RPcmdSb2xlVXNlcnM6IFtcIkdFVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMve3JvbGVfaWR9L3VzZXJzXCJdLFxuICAgIGxpc3RPcmdSb2xlczogW1wiR0VUIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlc1wiXSxcbiAgICBsaXN0T3JnYW5pemF0aW9uRmluZUdyYWluZWRQZXJtaXNzaW9uczogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLWZpbmUtZ3JhaW5lZC1wZXJtaXNzaW9uc1wiXG4gICAgXSxcbiAgICBsaXN0T3V0c2lkZUNvbGxhYm9yYXRvcnM6IFtcIkdFVCAvb3Jncy97b3JnfS9vdXRzaWRlX2NvbGxhYm9yYXRvcnNcIl0sXG4gICAgbGlzdFBhdEdyYW50UmVwb3NpdG9yaWVzOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW5zL3twYXRfaWR9L3JlcG9zaXRvcmllc1wiXG4gICAgXSxcbiAgICBsaXN0UGF0R3JhbnRSZXF1ZXN0UmVwb3NpdG9yaWVzOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW4tcmVxdWVzdHMve3BhdF9yZXF1ZXN0X2lkfS9yZXBvc2l0b3JpZXNcIlxuICAgIF0sXG4gICAgbGlzdFBhdEdyYW50UmVxdWVzdHM6IFtcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW4tcmVxdWVzdHNcIl0sXG4gICAgbGlzdFBhdEdyYW50czogW1wiR0VUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbnNcIl0sXG4gICAgbGlzdFBlbmRpbmdJbnZpdGF0aW9uczogW1wiR0VUIC9vcmdzL3tvcmd9L2ludml0YXRpb25zXCJdLFxuICAgIGxpc3RQdWJsaWNNZW1iZXJzOiBbXCJHRVQgL29yZ3Mve29yZ30vcHVibGljX21lbWJlcnNcIl0sXG4gICAgbGlzdFNlY3VyaXR5TWFuYWdlclRlYW1zOiBbXCJHRVQgL29yZ3Mve29yZ30vc2VjdXJpdHktbWFuYWdlcnNcIl0sXG4gICAgbGlzdFdlYmhvb2tEZWxpdmVyaWVzOiBbXCJHRVQgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXNcIl0sXG4gICAgbGlzdFdlYmhvb2tzOiBbXCJHRVQgL29yZ3Mve29yZ30vaG9va3NcIl0sXG4gICAgcGF0Y2hDdXN0b21Pcmdhbml6YXRpb25Sb2xlOiBbXG4gICAgICBcIlBBVENIIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy97cm9sZV9pZH1cIlxuICAgIF0sXG4gICAgcGluZ1dlYmhvb2s6IFtcIlBPU1QgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L3BpbmdzXCJdLFxuICAgIHJlZGVsaXZlcldlYmhvb2tEZWxpdmVyeTogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzL3tkZWxpdmVyeV9pZH0vYXR0ZW1wdHNcIlxuICAgIF0sXG4gICAgcmVtb3ZlQ3VzdG9tUHJvcGVydHk6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvc2NoZW1hL3tjdXN0b21fcHJvcGVydHlfbmFtZX1cIlxuICAgIF0sXG4gICAgcmVtb3ZlTWVtYmVyOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vbWVtYmVycy97dXNlcm5hbWV9XCJdLFxuICAgIHJlbW92ZU1lbWJlcnNoaXBGb3JVc2VyOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiXSxcbiAgICByZW1vdmVPdXRzaWRlQ29sbGFib3JhdG9yOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9vdXRzaWRlX2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiXG4gICAgXSxcbiAgICByZW1vdmVQdWJsaWNNZW1iZXJzaGlwRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3B1YmxpY19tZW1iZXJzL3t1c2VybmFtZX1cIlxuICAgIF0sXG4gICAgcmVtb3ZlU2VjdXJpdHlNYW5hZ2VyVGVhbTogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vc2VjdXJpdHktbWFuYWdlcnMvdGVhbXMve3RlYW1fc2x1Z31cIlxuICAgIF0sXG4gICAgcmV2aWV3UGF0R3JhbnRSZXF1ZXN0OiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2VuLXJlcXVlc3RzL3twYXRfcmVxdWVzdF9pZH1cIlxuICAgIF0sXG4gICAgcmV2aWV3UGF0R3JhbnRSZXF1ZXN0c0luQnVsazogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbi1yZXF1ZXN0c1wiXG4gICAgXSxcbiAgICByZXZva2VBbGxPcmdSb2xlc1RlYW06IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy90ZWFtcy97dGVhbV9zbHVnfVwiXG4gICAgXSxcbiAgICByZXZva2VBbGxPcmdSb2xlc1VzZXI6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy91c2Vycy97dXNlcm5hbWV9XCJcbiAgICBdLFxuICAgIHJldm9rZU9yZ1JvbGVUZWFtOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMvdGVhbXMve3RlYW1fc2x1Z30ve3JvbGVfaWR9XCJcbiAgICBdLFxuICAgIHJldm9rZU9yZ1JvbGVVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMvdXNlcnMve3VzZXJuYW1lfS97cm9sZV9pZH1cIlxuICAgIF0sXG4gICAgc2V0TWVtYmVyc2hpcEZvclVzZXI6IFtcIlBVVCAvb3Jncy97b3JnfS9tZW1iZXJzaGlwcy97dXNlcm5hbWV9XCJdLFxuICAgIHNldFB1YmxpY01lbWJlcnNoaXBGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vcHVibGljX21lbWJlcnMve3VzZXJuYW1lfVwiXG4gICAgXSxcbiAgICB1bmJsb2NrVXNlcjogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2Jsb2Nrcy97dXNlcm5hbWV9XCJdLFxuICAgIHVwZGF0ZTogW1wiUEFUQ0ggL29yZ3Mve29yZ31cIl0sXG4gICAgdXBkYXRlTWVtYmVyc2hpcEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBBVENIIC91c2VyL21lbWJlcnNoaXBzL29yZ3Mve29yZ31cIlxuICAgIF0sXG4gICAgdXBkYXRlUGF0QWNjZXNzOiBbXCJQT1NUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbnMve3BhdF9pZH1cIl0sXG4gICAgdXBkYXRlUGF0QWNjZXNzZXM6IFtcIlBPU1QgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2Vuc1wiXSxcbiAgICB1cGRhdGVXZWJob29rOiBbXCJQQVRDSCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgdXBkYXRlV2ViaG9va0NvbmZpZ0Zvck9yZzogW1wiUEFUQ0ggL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L2NvbmZpZ1wiXVxuICB9LFxuICBwYWNrYWdlczoge1xuICAgIGRlbGV0ZVBhY2thZ2VGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX1cIlxuICAgIF0sXG4gICAgZGVsZXRlUGFja2FnZUZvck9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX1cIlxuICAgIF0sXG4gICAgZGVsZXRlUGFja2FnZUZvclVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9XCJcbiAgICBdLFxuICAgIGRlbGV0ZVBhY2thZ2VWZXJzaW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZVBhY2thZ2VWZXJzaW9uRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfVwiXG4gICAgXSxcbiAgICBkZWxldGVQYWNrYWdlVmVyc2lvbkZvclVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9XCJcbiAgICBdLFxuICAgIGdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvckFQYWNrYWdlT3duZWRCeUFuT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInBhY2thZ2VzXCIsIFwiZ2V0QWxsUGFja2FnZVZlcnNpb25zRm9yUGFja2FnZU93bmVkQnlPcmdcIl0gfVxuICAgIF0sXG4gICAgZ2V0QWxsUGFja2FnZVZlcnNpb25zRm9yQVBhY2thZ2VPd25lZEJ5VGhlQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgcmVuYW1lZDogW1xuICAgICAgICAgIFwicGFja2FnZXNcIixcbiAgICAgICAgICBcImdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvclBhY2thZ2VPd25lZEJ5QXV0aGVudGljYXRlZFVzZXJcIlxuICAgICAgICBdXG4gICAgICB9XG4gICAgXSxcbiAgICBnZXRBbGxQYWNrYWdlVmVyc2lvbnNGb3JQYWNrYWdlT3duZWRCeUF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiXG4gICAgXSxcbiAgICBnZXRBbGxQYWNrYWdlVmVyc2lvbnNGb3JQYWNrYWdlT3duZWRCeU9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIlxuICAgIF0sXG4gICAgZ2V0QWxsUGFja2FnZVZlcnNpb25zRm9yUGFja2FnZU93bmVkQnlVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiXG4gICAgXSxcbiAgICBnZXRQYWNrYWdlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9XCJcbiAgICBdLFxuICAgIGdldFBhY2thZ2VGb3JPcmdhbml6YXRpb246IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9XCJcbiAgICBdLFxuICAgIGdldFBhY2thZ2VGb3JVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfVwiXG4gICAgXSxcbiAgICBnZXRQYWNrYWdlVmVyc2lvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfVwiXG4gICAgXSxcbiAgICBnZXRQYWNrYWdlVmVyc2lvbkZvck9yZ2FuaXphdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH1cIlxuICAgIF0sXG4gICAgZ2V0UGFja2FnZVZlcnNpb25Gb3JVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfVwiXG4gICAgXSxcbiAgICBsaXN0RG9ja2VyTWlncmF0aW9uQ29uZmxpY3RpbmdQYWNrYWdlc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9kb2NrZXIvY29uZmxpY3RzXCJcbiAgICBdLFxuICAgIGxpc3REb2NrZXJNaWdyYXRpb25Db25mbGljdGluZ1BhY2thZ2VzRm9yT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9kb2NrZXIvY29uZmxpY3RzXCJcbiAgICBdLFxuICAgIGxpc3REb2NrZXJNaWdyYXRpb25Db25mbGljdGluZ1BhY2thZ2VzRm9yVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZG9ja2VyL2NvbmZsaWN0c1wiXG4gICAgXSxcbiAgICBsaXN0UGFja2FnZXNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3BhY2thZ2VzXCJdLFxuICAgIGxpc3RQYWNrYWdlc0Zvck9yZ2FuaXphdGlvbjogW1wiR0VUIC9vcmdzL3tvcmd9L3BhY2thZ2VzXCJdLFxuICAgIGxpc3RQYWNrYWdlc0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlc1wiXSxcbiAgICByZXN0b3JlUGFja2FnZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBPU1QgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vcmVzdG9yZXs/dG9rZW59XCJcbiAgICBdLFxuICAgIHJlc3RvcmVQYWNrYWdlRm9yT3JnOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vcmVzdG9yZXs/dG9rZW59XCJcbiAgICBdLFxuICAgIHJlc3RvcmVQYWNrYWdlRm9yVXNlcjogW1xuICAgICAgXCJQT1NUIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3Jlc3RvcmV7P3Rva2VufVwiXG4gICAgXSxcbiAgICByZXN0b3JlUGFja2FnZVZlcnNpb25Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQT1NUIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9L3Jlc3RvcmVcIlxuICAgIF0sXG4gICAgcmVzdG9yZVBhY2thZ2VWZXJzaW9uRm9yT3JnOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH0vcmVzdG9yZVwiXG4gICAgXSxcbiAgICByZXN0b3JlUGFja2FnZVZlcnNpb25Gb3JVc2VyOiBbXG4gICAgICBcIlBPU1QgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH0vcmVzdG9yZVwiXG4gICAgXVxuICB9LFxuICBwcm9qZWN0czoge1xuICAgIGFkZENvbGxhYm9yYXRvcjogW1wiUFVUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sbGFib3JhdG9ycy97dXNlcm5hbWV9XCJdLFxuICAgIGNyZWF0ZUNhcmQ6IFtcIlBPU1QgL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH0vY2FyZHNcIl0sXG4gICAgY3JlYXRlQ29sdW1uOiBbXCJQT1NUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sdW1uc1wiXSxcbiAgICBjcmVhdGVGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9wcm9qZWN0c1wiXSxcbiAgICBjcmVhdGVGb3JPcmc6IFtcIlBPU1QgL29yZ3Mve29yZ30vcHJvamVjdHNcIl0sXG4gICAgY3JlYXRlRm9yUmVwbzogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJvamVjdHNcIl0sXG4gICAgZGVsZXRlOiBbXCJERUxFVEUgL3Byb2plY3RzL3twcm9qZWN0X2lkfVwiXSxcbiAgICBkZWxldGVDYXJkOiBbXCJERUxFVEUgL3Byb2plY3RzL2NvbHVtbnMvY2FyZHMve2NhcmRfaWR9XCJdLFxuICAgIGRlbGV0ZUNvbHVtbjogW1wiREVMRVRFIC9wcm9qZWN0cy9jb2x1bW5zL3tjb2x1bW5faWR9XCJdLFxuICAgIGdldDogW1wiR0VUIC9wcm9qZWN0cy97cHJvamVjdF9pZH1cIl0sXG4gICAgZ2V0Q2FyZDogW1wiR0VUIC9wcm9qZWN0cy9jb2x1bW5zL2NhcmRzL3tjYXJkX2lkfVwiXSxcbiAgICBnZXRDb2x1bW46IFtcIkdFVCAvcHJvamVjdHMvY29sdW1ucy97Y29sdW1uX2lkfVwiXSxcbiAgICBnZXRQZXJtaXNzaW9uRm9yVXNlcjogW1xuICAgICAgXCJHRVQgL3Byb2plY3RzL3twcm9qZWN0X2lkfS9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX0vcGVybWlzc2lvblwiXG4gICAgXSxcbiAgICBsaXN0Q2FyZHM6IFtcIkdFVCAvcHJvamVjdHMvY29sdW1ucy97Y29sdW1uX2lkfS9jYXJkc1wiXSxcbiAgICBsaXN0Q29sbGFib3JhdG9yczogW1wiR0VUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sbGFib3JhdG9yc1wiXSxcbiAgICBsaXN0Q29sdW1uczogW1wiR0VUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sdW1uc1wiXSxcbiAgICBsaXN0Rm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vcHJvamVjdHNcIl0sXG4gICAgbGlzdEZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJvamVjdHNcIl0sXG4gICAgbGlzdEZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wcm9qZWN0c1wiXSxcbiAgICBtb3ZlQ2FyZDogW1wiUE9TVCAvcHJvamVjdHMvY29sdW1ucy9jYXJkcy97Y2FyZF9pZH0vbW92ZXNcIl0sXG4gICAgbW92ZUNvbHVtbjogW1wiUE9TVCAvcHJvamVjdHMvY29sdW1ucy97Y29sdW1uX2lkfS9tb3Zlc1wiXSxcbiAgICByZW1vdmVDb2xsYWJvcmF0b3I6IFtcbiAgICAgIFwiREVMRVRFIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sbGFib3JhdG9ycy97dXNlcm5hbWV9XCJcbiAgICBdLFxuICAgIHVwZGF0ZTogW1wiUEFUQ0ggL3Byb2plY3RzL3twcm9qZWN0X2lkfVwiXSxcbiAgICB1cGRhdGVDYXJkOiBbXCJQQVRDSCAvcHJvamVjdHMvY29sdW1ucy9jYXJkcy97Y2FyZF9pZH1cIl0sXG4gICAgdXBkYXRlQ29sdW1uOiBbXCJQQVRDSCAvcHJvamVjdHMvY29sdW1ucy97Y29sdW1uX2lkfVwiXVxuICB9LFxuICBwdWxsczoge1xuICAgIGNoZWNrSWZNZXJnZWQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9tZXJnZVwiXSxcbiAgICBjcmVhdGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzXCJdLFxuICAgIGNyZWF0ZVJlcGx5Rm9yUmV2aWV3Q29tbWVudDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZXBsaWVzXCJcbiAgICBdLFxuICAgIGNyZWF0ZVJldmlldzogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzXCJdLFxuICAgIGNyZWF0ZVJldmlld0NvbW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb21tZW50c1wiXG4gICAgXSxcbiAgICBkZWxldGVQZW5kaW5nUmV2aWV3OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzL3tyZXZpZXdfaWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZVJldmlld0NvbW1lbnQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy9jb21tZW50cy97Y29tbWVudF9pZH1cIlxuICAgIF0sXG4gICAgZGlzbWlzc1JldmlldzogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfS9kaXNtaXNzYWxzXCJcbiAgICBdLFxuICAgIGdldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9XCJdLFxuICAgIGdldFJldmlldzogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfVwiXG4gICAgXSxcbiAgICBnZXRSZXZpZXdDb21tZW50OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBsaXN0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzXCJdLFxuICAgIGxpc3RDb21tZW50c0ZvclJldmlldzogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfS9jb21tZW50c1wiXG4gICAgXSxcbiAgICBsaXN0Q29tbWl0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2NvbW1pdHNcIl0sXG4gICAgbGlzdEZpbGVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vZmlsZXNcIl0sXG4gICAgbGlzdFJlcXVlc3RlZFJldmlld2VyczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmVxdWVzdGVkX3Jldmlld2Vyc1wiXG4gICAgXSxcbiAgICBsaXN0UmV2aWV3Q29tbWVudHM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2NvbW1lbnRzXCJcbiAgICBdLFxuICAgIGxpc3RSZXZpZXdDb21tZW50c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHNcIl0sXG4gICAgbGlzdFJldmlld3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzXCJdLFxuICAgIG1lcmdlOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vbWVyZ2VcIl0sXG4gICAgcmVtb3ZlUmVxdWVzdGVkUmV2aWV3ZXJzOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXF1ZXN0ZWRfcmV2aWV3ZXJzXCJcbiAgICBdLFxuICAgIHJlcXVlc3RSZXZpZXdlcnM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXF1ZXN0ZWRfcmV2aWV3ZXJzXCJcbiAgICBdLFxuICAgIHN1Ym1pdFJldmlldzogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH0vZXZlbnRzXCJcbiAgICBdLFxuICAgIHVwZGF0ZTogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn1cIl0sXG4gICAgdXBkYXRlQnJhbmNoOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS91cGRhdGUtYnJhbmNoXCJcbiAgICBdLFxuICAgIHVwZGF0ZVJldmlldzogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfVwiXG4gICAgXSxcbiAgICB1cGRhdGVSZXZpZXdDb21tZW50OiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy9jb21tZW50cy97Y29tbWVudF9pZH1cIlxuICAgIF1cbiAgfSxcbiAgcmF0ZUxpbWl0OiB7IGdldDogW1wiR0VUIC9yYXRlX2xpbWl0XCJdIH0sXG4gIHJlYWN0aW9uczoge1xuICAgIGNyZWF0ZUZvckNvbW1pdENvbW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiXG4gICAgXSxcbiAgICBjcmVhdGVGb3JJc3N1ZTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vcmVhY3Rpb25zXCJcbiAgICBdLFxuICAgIGNyZWF0ZUZvcklzc3VlQ29tbWVudDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiXG4gICAgXSxcbiAgICBjcmVhdGVGb3JQdWxsUmVxdWVzdFJldmlld0NvbW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiXG4gICAgXSxcbiAgICBjcmVhdGVGb3JSZWxlYXNlOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfS9yZWFjdGlvbnNcIlxuICAgIF0sXG4gICAgY3JlYXRlRm9yVGVhbURpc2N1c3Npb25Db21tZW50SW5Pcmc6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn0vcmVhY3Rpb25zXCJcbiAgICBdLFxuICAgIGNyZWF0ZUZvclRlYW1EaXNjdXNzaW9uSW5Pcmc6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L3JlYWN0aW9uc1wiXG4gICAgXSxcbiAgICBkZWxldGVGb3JDb21taXRDb21tZW50OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZUZvcklzc3VlOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZUZvcklzc3VlQ29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zL3tyZWFjdGlvbl9pZH1cIlxuICAgIF0sXG4gICAgZGVsZXRlRm9yUHVsbFJlcXVlc3RDb21tZW50OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZUZvclJlbGVhc2U6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vcmVhY3Rpb25zL3tyZWFjdGlvbl9pZH1cIlxuICAgIF0sXG4gICAgZGVsZXRlRm9yVGVhbURpc2N1c3Npb246IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vcmVhY3Rpb25zL3tyZWFjdGlvbl9pZH1cIlxuICAgIF0sXG4gICAgZGVsZXRlRm9yVGVhbURpc2N1c3Npb25Db21tZW50OiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn0vcmVhY3Rpb25zL3tyZWFjdGlvbl9pZH1cIlxuICAgIF0sXG4gICAgbGlzdEZvckNvbW1pdENvbW1lbnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zXCJcbiAgICBdLFxuICAgIGxpc3RGb3JJc3N1ZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vcmVhY3Rpb25zXCJdLFxuICAgIGxpc3RGb3JJc3N1ZUNvbW1lbnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiXG4gICAgXSxcbiAgICBsaXN0Rm9yUHVsbFJlcXVlc3RSZXZpZXdDb21tZW50OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiXG4gICAgXSxcbiAgICBsaXN0Rm9yUmVsZWFzZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfS9yZWFjdGlvbnNcIlxuICAgIF0sXG4gICAgbGlzdEZvclRlYW1EaXNjdXNzaW9uQ29tbWVudEluT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn0vcmVhY3Rpb25zXCJcbiAgICBdLFxuICAgIGxpc3RGb3JUZWFtRGlzY3Vzc2lvbkluT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L3JlYWN0aW9uc1wiXG4gICAgXVxuICB9LFxuICByZXBvczoge1xuICAgIGFjY2VwdEludml0YXRpb246IFtcbiAgICAgIFwiUEFUQ0ggL3VzZXIvcmVwb3NpdG9yeV9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJyZXBvc1wiLCBcImFjY2VwdEludml0YXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBhY2NlcHRJbnZpdGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUEFUQ0ggL3VzZXIvcmVwb3NpdG9yeV9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIlxuICAgIF0sXG4gICAgYWRkQXBwQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL2FwcHNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwiYXBwc1wiIH1cbiAgICBdLFxuICAgIGFkZENvbGxhYm9yYXRvcjogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX1cIl0sXG4gICAgYWRkU3RhdHVzQ2hlY2tDb250ZXh0czogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3MvY29udGV4dHNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwiY29udGV4dHNcIiB9XG4gICAgXSxcbiAgICBhZGRUZWFtQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL3RlYW1zXCIsXG4gICAgICB7fSxcbiAgICAgIHsgbWFwVG9EYXRhOiBcInRlYW1zXCIgfVxuICAgIF0sXG4gICAgYWRkVXNlckFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy91c2Vyc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJ1c2Vyc1wiIH1cbiAgICBdLFxuICAgIGNhbmNlbFBhZ2VzRGVwbG95bWVudDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9kZXBsb3ltZW50cy97cGFnZXNfZGVwbG95bWVudF9pZH0vY2FuY2VsXCJcbiAgICBdLFxuICAgIGNoZWNrQXV0b21hdGVkU2VjdXJpdHlGaXhlczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9tYXRlZC1zZWN1cml0eS1maXhlc1wiXG4gICAgXSxcbiAgICBjaGVja0NvbGxhYm9yYXRvcjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX1cIl0sXG4gICAgY2hlY2tWdWxuZXJhYmlsaXR5QWxlcnRzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdnVsbmVyYWJpbGl0eS1hbGVydHNcIlxuICAgIF0sXG4gICAgY29kZW93bmVyc0Vycm9yczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlb3duZXJzL2Vycm9yc1wiXSxcbiAgICBjb21wYXJlQ29tbWl0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21wYXJlL3tiYXNlfS4uLntoZWFkfVwiXSxcbiAgICBjb21wYXJlQ29tbWl0c1dpdGhCYXNlaGVhZDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbXBhcmUve2Jhc2VoZWFkfVwiXG4gICAgXSxcbiAgICBjcmVhdGVBdXRvbGluazogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXV0b2xpbmtzXCJdLFxuICAgIGNyZWF0ZUNvbW1pdENvbW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97Y29tbWl0X3NoYX0vY29tbWVudHNcIlxuICAgIF0sXG4gICAgY3JlYXRlQ29tbWl0U2lnbmF0dXJlUHJvdGVjdGlvbjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3NpZ25hdHVyZXNcIlxuICAgIF0sXG4gICAgY3JlYXRlQ29tbWl0U3RhdHVzOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGF0dXNlcy97c2hhfVwiXSxcbiAgICBjcmVhdGVEZXBsb3lLZXk6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2tleXNcIl0sXG4gICAgY3JlYXRlRGVwbG95bWVudDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHNcIl0sXG4gICAgY3JlYXRlRGVwbG95bWVudEJyYW5jaFBvbGljeTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnQtYnJhbmNoLXBvbGljaWVzXCJcbiAgICBdLFxuICAgIGNyZWF0ZURlcGxveW1lbnRQcm90ZWN0aW9uUnVsZTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnRfcHJvdGVjdGlvbl9ydWxlc1wiXG4gICAgXSxcbiAgICBjcmVhdGVEZXBsb3ltZW50U3RhdHVzOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGxveW1lbnRzL3tkZXBsb3ltZW50X2lkfS9zdGF0dXNlc1wiXG4gICAgXSxcbiAgICBjcmVhdGVEaXNwYXRjaEV2ZW50OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kaXNwYXRjaGVzXCJdLFxuICAgIGNyZWF0ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL3JlcG9zXCJdLFxuICAgIGNyZWF0ZUZvcms6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ZvcmtzXCJdLFxuICAgIGNyZWF0ZUluT3JnOiBbXCJQT1NUIC9vcmdzL3tvcmd9L3JlcG9zXCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlQ3VzdG9tUHJvcGVydGllc1ZhbHVlczogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJvcGVydGllcy92YWx1ZXNcIlxuICAgIF0sXG4gICAgY3JlYXRlT3JVcGRhdGVFbnZpcm9ubWVudDogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX1cIlxuICAgIF0sXG4gICAgY3JlYXRlT3JVcGRhdGVGaWxlQ29udGVudHM6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29udGVudHMve3BhdGh9XCJdLFxuICAgIGNyZWF0ZU9yZ1J1bGVzZXQ6IFtcIlBPU1QgL29yZ3Mve29yZ30vcnVsZXNldHNcIl0sXG4gICAgY3JlYXRlUGFnZXNEZXBsb3ltZW50OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9kZXBsb3ltZW50c1wiXSxcbiAgICBjcmVhdGVQYWdlc1NpdGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzXCJdLFxuICAgIGNyZWF0ZVJlbGVhc2U6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzXCJdLFxuICAgIGNyZWF0ZVJlcG9SdWxlc2V0OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlc2V0c1wiXSxcbiAgICBjcmVhdGVUYWdQcm90ZWN0aW9uOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YWdzL3Byb3RlY3Rpb25cIl0sXG4gICAgY3JlYXRlVXNpbmdUZW1wbGF0ZTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97dGVtcGxhdGVfb3duZXJ9L3t0ZW1wbGF0ZV9yZXBvfS9nZW5lcmF0ZVwiXG4gICAgXSxcbiAgICBjcmVhdGVXZWJob29rOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rc1wiXSxcbiAgICBkZWNsaW5lSW52aXRhdGlvbjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvcmVwb3NpdG9yeV9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJyZXBvc1wiLCBcImRlY2xpbmVJbnZpdGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfVxuICAgIF0sXG4gICAgZGVjbGluZUludml0YXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvcmVwb3NpdG9yeV9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIlxuICAgIF0sXG4gICAgZGVsZXRlOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99XCJdLFxuICAgIGRlbGV0ZUFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zXCJcbiAgICBdLFxuICAgIGRlbGV0ZUFkbWluQnJhbmNoUHJvdGVjdGlvbjogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vZW5mb3JjZV9hZG1pbnNcIlxuICAgIF0sXG4gICAgZGVsZXRlQW5FbnZpcm9ubWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX1cIlxuICAgIF0sXG4gICAgZGVsZXRlQXV0b2xpbms6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYXV0b2xpbmtzL3thdXRvbGlua19pZH1cIl0sXG4gICAgZGVsZXRlQnJhbmNoUHJvdGVjdGlvbjogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb25cIlxuICAgIF0sXG4gICAgZGVsZXRlQ29tbWl0Q29tbWVudDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgZGVsZXRlQ29tbWl0U2lnbmF0dXJlUHJvdGVjdGlvbjogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc2lnbmF0dXJlc1wiXG4gICAgXSxcbiAgICBkZWxldGVEZXBsb3lLZXk6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30va2V5cy97a2V5X2lkfVwiXSxcbiAgICBkZWxldGVEZXBsb3ltZW50OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHMve2RlcGxveW1lbnRfaWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZURlcGxveW1lbnRCcmFuY2hQb2xpY3k6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnQtYnJhbmNoLXBvbGljaWVzL3ticmFuY2hfcG9saWN5X2lkfVwiXG4gICAgXSxcbiAgICBkZWxldGVGaWxlOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbnRlbnRzL3twYXRofVwiXSxcbiAgICBkZWxldGVJbnZpdGF0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZU9yZ1J1bGVzZXQ6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9ydWxlc2V0cy97cnVsZXNldF9pZH1cIl0sXG4gICAgZGVsZXRlUGFnZXNTaXRlOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzXCJdLFxuICAgIGRlbGV0ZVB1bGxSZXF1ZXN0UmV2aWV3UHJvdGVjdGlvbjogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfcHVsbF9yZXF1ZXN0X3Jldmlld3NcIlxuICAgIF0sXG4gICAgZGVsZXRlUmVsZWFzZTogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH1cIl0sXG4gICAgZGVsZXRlUmVsZWFzZUFzc2V0OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMvYXNzZXRzL3thc3NldF9pZH1cIlxuICAgIF0sXG4gICAgZGVsZXRlUmVwb1J1bGVzZXQ6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHMve3J1bGVzZXRfaWR9XCJdLFxuICAgIGRlbGV0ZVRhZ1Byb3RlY3Rpb246IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YWdzL3Byb3RlY3Rpb24ve3RhZ19wcm90ZWN0aW9uX2lkfVwiXG4gICAgXSxcbiAgICBkZWxldGVXZWJob29rOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfVwiXSxcbiAgICBkaXNhYmxlQXV0b21hdGVkU2VjdXJpdHlGaXhlczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9tYXRlZC1zZWN1cml0eS1maXhlc1wiXG4gICAgXSxcbiAgICBkaXNhYmxlRGVwbG95bWVudFByb3RlY3Rpb25SdWxlOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50X3Byb3RlY3Rpb25fcnVsZXMve3Byb3RlY3Rpb25fcnVsZV9pZH1cIlxuICAgIF0sXG4gICAgZGlzYWJsZVByaXZhdGVWdWxuZXJhYmlsaXR5UmVwb3J0aW5nOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcHJpdmF0ZS12dWxuZXJhYmlsaXR5LXJlcG9ydGluZ1wiXG4gICAgXSxcbiAgICBkaXNhYmxlVnVsbmVyYWJpbGl0eUFsZXJ0czogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Z1bG5lcmFiaWxpdHktYWxlcnRzXCJcbiAgICBdLFxuICAgIGRvd25sb2FkQXJjaGl2ZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3ppcGJhbGwve3JlZn1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJyZXBvc1wiLCBcImRvd25sb2FkWmlwYmFsbEFyY2hpdmVcIl0gfVxuICAgIF0sXG4gICAgZG93bmxvYWRUYXJiYWxsQXJjaGl2ZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YXJiYWxsL3tyZWZ9XCJdLFxuICAgIGRvd25sb2FkWmlwYmFsbEFyY2hpdmU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vemlwYmFsbC97cmVmfVwiXSxcbiAgICBlbmFibGVBdXRvbWF0ZWRTZWN1cml0eUZpeGVzOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXV0b21hdGVkLXNlY3VyaXR5LWZpeGVzXCJcbiAgICBdLFxuICAgIGVuYWJsZVByaXZhdGVWdWxuZXJhYmlsaXR5UmVwb3J0aW5nOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJpdmF0ZS12dWxuZXJhYmlsaXR5LXJlcG9ydGluZ1wiXG4gICAgXSxcbiAgICBlbmFibGVWdWxuZXJhYmlsaXR5QWxlcnRzOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vdnVsbmVyYWJpbGl0eS1hbGVydHNcIlxuICAgIF0sXG4gICAgZ2VuZXJhdGVSZWxlYXNlTm90ZXM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMvZ2VuZXJhdGUtbm90ZXNcIlxuICAgIF0sXG4gICAgZ2V0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99XCJdLFxuICAgIGdldEFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zXCJcbiAgICBdLFxuICAgIGdldEFkbWluQnJhbmNoUHJvdGVjdGlvbjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vZW5mb3JjZV9hZG1pbnNcIlxuICAgIF0sXG4gICAgZ2V0QWxsRGVwbG95bWVudFByb3RlY3Rpb25SdWxlczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudF9wcm90ZWN0aW9uX3J1bGVzXCJcbiAgICBdLFxuICAgIGdldEFsbEVudmlyb25tZW50czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHNcIl0sXG4gICAgZ2V0QWxsU3RhdHVzQ2hlY2tDb250ZXh0czogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrcy9jb250ZXh0c1wiXG4gICAgXSxcbiAgICBnZXRBbGxUb3BpY3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdG9waWNzXCJdLFxuICAgIGdldEFwcHNXaXRoQWNjZXNzVG9Qcm90ZWN0ZWRCcmFuY2g6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy9hcHBzXCJcbiAgICBdLFxuICAgIGdldEF1dG9saW5rOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9saW5rcy97YXV0b2xpbmtfaWR9XCJdLFxuICAgIGdldEJyYW5jaDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofVwiXSxcbiAgICBnZXRCcmFuY2hQcm90ZWN0aW9uOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvblwiXG4gICAgXSxcbiAgICBnZXRCcmFuY2hSdWxlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlcy9icmFuY2hlcy97YnJhbmNofVwiXSxcbiAgICBnZXRDbG9uZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdHJhZmZpYy9jbG9uZXNcIl0sXG4gICAgZ2V0Q29kZUZyZXF1ZW5jeVN0YXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXRzL2NvZGVfZnJlcXVlbmN5XCJdLFxuICAgIGdldENvbGxhYm9yYXRvclBlcm1pc3Npb25MZXZlbDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfS9wZXJtaXNzaW9uXCJcbiAgICBdLFxuICAgIGdldENvbWJpbmVkU3RhdHVzRm9yUmVmOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vc3RhdHVzXCJdLFxuICAgIGdldENvbW1pdDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9XCJdLFxuICAgIGdldENvbW1pdEFjdGl2aXR5U3RhdHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3RhdHMvY29tbWl0X2FjdGl2aXR5XCJdLFxuICAgIGdldENvbW1pdENvbW1lbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIGdldENvbW1pdFNpZ25hdHVyZVByb3RlY3Rpb246IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3NpZ25hdHVyZXNcIlxuICAgIF0sXG4gICAgZ2V0Q29tbXVuaXR5UHJvZmlsZU1ldHJpY3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbXVuaXR5L3Byb2ZpbGVcIl0sXG4gICAgZ2V0Q29udGVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb250ZW50cy97cGF0aH1cIl0sXG4gICAgZ2V0Q29udHJpYnV0b3JzU3RhdHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3RhdHMvY29udHJpYnV0b3JzXCJdLFxuICAgIGdldEN1c3RvbURlcGxveW1lbnRQcm90ZWN0aW9uUnVsZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudF9wcm90ZWN0aW9uX3J1bGVzL3twcm90ZWN0aW9uX3J1bGVfaWR9XCJcbiAgICBdLFxuICAgIGdldEN1c3RvbVByb3BlcnRpZXNWYWx1ZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJvcGVydGllcy92YWx1ZXNcIl0sXG4gICAgZ2V0RGVwbG95S2V5OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2tleXMve2tleV9pZH1cIl0sXG4gICAgZ2V0RGVwbG95bWVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50cy97ZGVwbG95bWVudF9pZH1cIl0sXG4gICAgZ2V0RGVwbG95bWVudEJyYW5jaFBvbGljeTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudC1icmFuY2gtcG9saWNpZXMve2JyYW5jaF9wb2xpY3lfaWR9XCJcbiAgICBdLFxuICAgIGdldERlcGxveW1lbnRTdGF0dXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50cy97ZGVwbG95bWVudF9pZH0vc3RhdHVzZXMve3N0YXR1c19pZH1cIlxuICAgIF0sXG4gICAgZ2V0RW52aXJvbm1lbnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9XCJcbiAgICBdLFxuICAgIGdldExhdGVzdFBhZ2VzQnVpbGQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXMvYnVpbGRzL2xhdGVzdFwiXSxcbiAgICBnZXRMYXRlc3RSZWxlYXNlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL2xhdGVzdFwiXSxcbiAgICBnZXRPcmdSdWxlU3VpdGU6IFtcIkdFVCAvb3Jncy97b3JnfS9ydWxlc2V0cy9ydWxlLXN1aXRlcy97cnVsZV9zdWl0ZV9pZH1cIl0sXG4gICAgZ2V0T3JnUnVsZVN1aXRlczogW1wiR0VUIC9vcmdzL3tvcmd9L3J1bGVzZXRzL3J1bGUtc3VpdGVzXCJdLFxuICAgIGdldE9yZ1J1bGVzZXQ6IFtcIkdFVCAvb3Jncy97b3JnfS9ydWxlc2V0cy97cnVsZXNldF9pZH1cIl0sXG4gICAgZ2V0T3JnUnVsZXNldHM6IFtcIkdFVCAvb3Jncy97b3JnfS9ydWxlc2V0c1wiXSxcbiAgICBnZXRQYWdlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlc1wiXSxcbiAgICBnZXRQYWdlc0J1aWxkOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2J1aWxkcy97YnVpbGRfaWR9XCJdLFxuICAgIGdldFBhZ2VzRGVwbG95bWVudDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2RlcGxveW1lbnRzL3twYWdlc19kZXBsb3ltZW50X2lkfVwiXG4gICAgXSxcbiAgICBnZXRQYWdlc0hlYWx0aENoZWNrOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2hlYWx0aFwiXSxcbiAgICBnZXRQYXJ0aWNpcGF0aW9uU3RhdHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3RhdHMvcGFydGljaXBhdGlvblwiXSxcbiAgICBnZXRQdWxsUmVxdWVzdFJldmlld1Byb3RlY3Rpb246IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3B1bGxfcmVxdWVzdF9yZXZpZXdzXCJcbiAgICBdLFxuICAgIGdldFB1bmNoQ2FyZFN0YXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXRzL3B1bmNoX2NhcmRcIl0sXG4gICAgZ2V0UmVhZG1lOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlYWRtZVwiXSxcbiAgICBnZXRSZWFkbWVJbkRpcmVjdG9yeTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWFkbWUve2Rpcn1cIl0sXG4gICAgZ2V0UmVsZWFzZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH1cIl0sXG4gICAgZ2V0UmVsZWFzZUFzc2V0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL2Fzc2V0cy97YXNzZXRfaWR9XCJdLFxuICAgIGdldFJlbGVhc2VCeVRhZzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy90YWdzL3t0YWd9XCJdLFxuICAgIGdldFJlcG9SdWxlU3VpdGU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlc2V0cy9ydWxlLXN1aXRlcy97cnVsZV9zdWl0ZV9pZH1cIlxuICAgIF0sXG4gICAgZ2V0UmVwb1J1bGVTdWl0ZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHMvcnVsZS1zdWl0ZXNcIl0sXG4gICAgZ2V0UmVwb1J1bGVzZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHMve3J1bGVzZXRfaWR9XCJdLFxuICAgIGdldFJlcG9SdWxlc2V0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlc2V0c1wiXSxcbiAgICBnZXRTdGF0dXNDaGVja3NQcm90ZWN0aW9uOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zdGF0dXNfY2hlY2tzXCJcbiAgICBdLFxuICAgIGdldFRlYW1zV2l0aEFjY2Vzc1RvUHJvdGVjdGVkQnJhbmNoOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdGVhbXNcIlxuICAgIF0sXG4gICAgZ2V0VG9wUGF0aHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdHJhZmZpYy9wb3B1bGFyL3BhdGhzXCJdLFxuICAgIGdldFRvcFJlZmVycmVyczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90cmFmZmljL3BvcHVsYXIvcmVmZXJyZXJzXCJdLFxuICAgIGdldFVzZXJzV2l0aEFjY2Vzc1RvUHJvdGVjdGVkQnJhbmNoOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdXNlcnNcIlxuICAgIF0sXG4gICAgZ2V0Vmlld3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdHJhZmZpYy92aWV3c1wiXSxcbiAgICBnZXRXZWJob29rOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfVwiXSxcbiAgICBnZXRXZWJob29rQ29uZmlnRm9yUmVwbzogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS9jb25maWdcIlxuICAgIF0sXG4gICAgZ2V0V2ViaG9va0RlbGl2ZXJ5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXMve2RlbGl2ZXJ5X2lkfVwiXG4gICAgXSxcbiAgICBsaXN0QWN0aXZpdGllczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpdml0eVwiXSxcbiAgICBsaXN0QXV0b2xpbmtzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9saW5rc1wiXSxcbiAgICBsaXN0QnJhbmNoZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXNcIl0sXG4gICAgbGlzdEJyYW5jaGVzRm9ySGVhZENvbW1pdDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve2NvbW1pdF9zaGF9L2JyYW5jaGVzLXdoZXJlLWhlYWRcIlxuICAgIF0sXG4gICAgbGlzdENvbGxhYm9yYXRvcnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29sbGFib3JhdG9yc1wiXSxcbiAgICBsaXN0Q29tbWVudHNGb3JDb21taXQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tjb21taXRfc2hhfS9jb21tZW50c1wiXG4gICAgXSxcbiAgICBsaXN0Q29tbWl0Q29tbWVudHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzXCJdLFxuICAgIGxpc3RDb21taXRTdGF0dXNlc0ZvclJlZjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vc3RhdHVzZXNcIlxuICAgIF0sXG4gICAgbGlzdENvbW1pdHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0c1wiXSxcbiAgICBsaXN0Q29udHJpYnV0b3JzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbnRyaWJ1dG9yc1wiXSxcbiAgICBsaXN0Q3VzdG9tRGVwbG95bWVudFJ1bGVJbnRlZ3JhdGlvbnM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnRfcHJvdGVjdGlvbl9ydWxlcy9hcHBzXCJcbiAgICBdLFxuICAgIGxpc3REZXBsb3lLZXlzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2tleXNcIl0sXG4gICAgbGlzdERlcGxveW1lbnRCcmFuY2hQb2xpY2llczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudC1icmFuY2gtcG9saWNpZXNcIlxuICAgIF0sXG4gICAgbGlzdERlcGxveW1lbnRTdGF0dXNlczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGxveW1lbnRzL3tkZXBsb3ltZW50X2lkfS9zdGF0dXNlc1wiXG4gICAgXSxcbiAgICBsaXN0RGVwbG95bWVudHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHNcIl0sXG4gICAgbGlzdEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvcmVwb3NcIl0sXG4gICAgbGlzdEZvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3JlcG9zXCJdLFxuICAgIGxpc3RGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcmVwb3NcIl0sXG4gICAgbGlzdEZvcmtzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ZvcmtzXCJdLFxuICAgIGxpc3RJbnZpdGF0aW9uczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbnZpdGF0aW9uc1wiXSxcbiAgICBsaXN0SW52aXRhdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3JlcG9zaXRvcnlfaW52aXRhdGlvbnNcIl0sXG4gICAgbGlzdExhbmd1YWdlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sYW5ndWFnZXNcIl0sXG4gICAgbGlzdFBhZ2VzQnVpbGRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2J1aWxkc1wiXSxcbiAgICBsaXN0UHVibGljOiBbXCJHRVQgL3JlcG9zaXRvcmllc1wiXSxcbiAgICBsaXN0UHVsbFJlcXVlc3RzQXNzb2NpYXRlZFdpdGhDb21taXQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tjb21taXRfc2hhfS9wdWxsc1wiXG4gICAgXSxcbiAgICBsaXN0UmVsZWFzZUFzc2V0czogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfS9hc3NldHNcIlxuICAgIF0sXG4gICAgbGlzdFJlbGVhc2VzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzXCJdLFxuICAgIGxpc3RUYWdQcm90ZWN0aW9uOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RhZ3MvcHJvdGVjdGlvblwiXSxcbiAgICBsaXN0VGFnczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YWdzXCJdLFxuICAgIGxpc3RUZWFtczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90ZWFtc1wiXSxcbiAgICBsaXN0V2ViaG9va0RlbGl2ZXJpZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllc1wiXG4gICAgXSxcbiAgICBsaXN0V2ViaG9va3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3NcIl0sXG4gICAgbWVyZ2U6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L21lcmdlc1wiXSxcbiAgICBtZXJnZVVwc3RyZWFtOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9tZXJnZS11cHN0cmVhbVwiXSxcbiAgICBwaW5nV2ViaG9vazogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L3BpbmdzXCJdLFxuICAgIHJlZGVsaXZlcldlYmhvb2tEZWxpdmVyeTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9L2F0dGVtcHRzXCJcbiAgICBdLFxuICAgIHJlbW92ZUFwcEFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL2FwcHNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwiYXBwc1wiIH1cbiAgICBdLFxuICAgIHJlbW92ZUNvbGxhYm9yYXRvcjogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiXG4gICAgXSxcbiAgICByZW1vdmVTdGF0dXNDaGVja0NvbnRleHRzOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zdGF0dXNfY2hlY2tzL2NvbnRleHRzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgbWFwVG9EYXRhOiBcImNvbnRleHRzXCIgfVxuICAgIF0sXG4gICAgcmVtb3ZlU3RhdHVzQ2hlY2tQcm90ZWN0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zdGF0dXNfY2hlY2tzXCJcbiAgICBdLFxuICAgIHJlbW92ZVRlYW1BY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy90ZWFtc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJ0ZWFtc1wiIH1cbiAgICBdLFxuICAgIHJlbW92ZVVzZXJBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy91c2Vyc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJ1c2Vyc1wiIH1cbiAgICBdLFxuICAgIHJlbmFtZUJyYW5jaDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcmVuYW1lXCJdLFxuICAgIHJlcGxhY2VBbGxUb3BpY3M6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vdG9waWNzXCJdLFxuICAgIHJlcXVlc3RQYWdlc0J1aWxkOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9idWlsZHNcIl0sXG4gICAgc2V0QWRtaW5CcmFuY2hQcm90ZWN0aW9uOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vZW5mb3JjZV9hZG1pbnNcIlxuICAgIF0sXG4gICAgc2V0QXBwQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvYXBwc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJhcHBzXCIgfVxuICAgIF0sXG4gICAgc2V0U3RhdHVzQ2hlY2tDb250ZXh0czogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrcy9jb250ZXh0c1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJjb250ZXh0c1wiIH1cbiAgICBdLFxuICAgIHNldFRlYW1BY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy90ZWFtc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJ0ZWFtc1wiIH1cbiAgICBdLFxuICAgIHNldFVzZXJBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy91c2Vyc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJ1c2Vyc1wiIH1cbiAgICBdLFxuICAgIHRlc3RQdXNoV2ViaG9vazogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L3Rlc3RzXCJdLFxuICAgIHRyYW5zZmVyOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90cmFuc2ZlclwiXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfVwiXSxcbiAgICB1cGRhdGVCcmFuY2hQcm90ZWN0aW9uOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvblwiXG4gICAgXSxcbiAgICB1cGRhdGVDb21taXRDb21tZW50OiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIHVwZGF0ZURlcGxveW1lbnRCcmFuY2hQb2xpY3k6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnQtYnJhbmNoLXBvbGljaWVzL3ticmFuY2hfcG9saWN5X2lkfVwiXG4gICAgXSxcbiAgICB1cGRhdGVJbmZvcm1hdGlvbkFib3V0UGFnZXNTaXRlOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzXCJdLFxuICAgIHVwZGF0ZUludml0YXRpb246IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfVwiXG4gICAgXSxcbiAgICB1cGRhdGVPcmdSdWxlc2V0OiBbXCJQVVQgL29yZ3Mve29yZ30vcnVsZXNldHMve3J1bGVzZXRfaWR9XCJdLFxuICAgIHVwZGF0ZVB1bGxSZXF1ZXN0UmV2aWV3UHJvdGVjdGlvbjogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9wdWxsX3JlcXVlc3RfcmV2aWV3c1wiXG4gICAgXSxcbiAgICB1cGRhdGVSZWxlYXNlOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9XCJdLFxuICAgIHVwZGF0ZVJlbGVhc2VBc3NldDogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMvYXNzZXRzL3thc3NldF9pZH1cIlxuICAgIF0sXG4gICAgdXBkYXRlUmVwb1J1bGVzZXQ6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHMve3J1bGVzZXRfaWR9XCJdLFxuICAgIHVwZGF0ZVN0YXR1c0NoZWNrUG90ZWN0aW9uOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3NcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJyZXBvc1wiLCBcInVwZGF0ZVN0YXR1c0NoZWNrUHJvdGVjdGlvblwiXSB9XG4gICAgXSxcbiAgICB1cGRhdGVTdGF0dXNDaGVja1Byb3RlY3Rpb246IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrc1wiXG4gICAgXSxcbiAgICB1cGRhdGVXZWJob29rOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9XCJdLFxuICAgIHVwZGF0ZVdlYmhvb2tDb25maWdGb3JSZXBvOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vY29uZmlnXCJcbiAgICBdLFxuICAgIHVwbG9hZFJlbGVhc2VBc3NldDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vYXNzZXRzez9uYW1lLGxhYmVsfVwiLFxuICAgICAgeyBiYXNlVXJsOiBcImh0dHBzOi8vdXBsb2Fkcy5naXRodWIuY29tXCIgfVxuICAgIF1cbiAgfSxcbiAgc2VhcmNoOiB7XG4gICAgY29kZTogW1wiR0VUIC9zZWFyY2gvY29kZVwiXSxcbiAgICBjb21taXRzOiBbXCJHRVQgL3NlYXJjaC9jb21taXRzXCJdLFxuICAgIGlzc3Vlc0FuZFB1bGxSZXF1ZXN0czogW1wiR0VUIC9zZWFyY2gvaXNzdWVzXCJdLFxuICAgIGxhYmVsczogW1wiR0VUIC9zZWFyY2gvbGFiZWxzXCJdLFxuICAgIHJlcG9zOiBbXCJHRVQgL3NlYXJjaC9yZXBvc2l0b3JpZXNcIl0sXG4gICAgdG9waWNzOiBbXCJHRVQgL3NlYXJjaC90b3BpY3NcIl0sXG4gICAgdXNlcnM6IFtcIkdFVCAvc2VhcmNoL3VzZXJzXCJdXG4gIH0sXG4gIHNlY3JldFNjYW5uaW5nOiB7XG4gICAgZ2V0QWxlcnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9XCJcbiAgICBdLFxuICAgIGxpc3RBbGVydHNGb3JFbnRlcnByaXNlOiBbXG4gICAgICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L3NlY3JldC1zY2FubmluZy9hbGVydHNcIlxuICAgIF0sXG4gICAgbGlzdEFsZXJ0c0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3NlY3JldC1zY2FubmluZy9hbGVydHNcIl0sXG4gICAgbGlzdEFsZXJ0c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0c1wiXSxcbiAgICBsaXN0TG9jYXRpb25zRm9yQWxlcnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9L2xvY2F0aW9uc1wiXG4gICAgXSxcbiAgICB1cGRhdGVBbGVydDogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfVwiXG4gICAgXVxuICB9LFxuICBzZWN1cml0eUFkdmlzb3JpZXM6IHtcbiAgICBjcmVhdGVGb3JrOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3VyaXR5LWFkdmlzb3JpZXMve2doc2FfaWR9L2ZvcmtzXCJcbiAgICBdLFxuICAgIGNyZWF0ZVByaXZhdGVWdWxuZXJhYmlsaXR5UmVwb3J0OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3VyaXR5LWFkdmlzb3JpZXMvcmVwb3J0c1wiXG4gICAgXSxcbiAgICBjcmVhdGVSZXBvc2l0b3J5QWR2aXNvcnk6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjdXJpdHktYWR2aXNvcmllc1wiXG4gICAgXSxcbiAgICBjcmVhdGVSZXBvc2l0b3J5QWR2aXNvcnlDdmVSZXF1ZXN0OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3VyaXR5LWFkdmlzb3JpZXMve2doc2FfaWR9L2N2ZVwiXG4gICAgXSxcbiAgICBnZXRHbG9iYWxBZHZpc29yeTogW1wiR0VUIC9hZHZpc29yaWVzL3tnaHNhX2lkfVwiXSxcbiAgICBnZXRSZXBvc2l0b3J5QWR2aXNvcnk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWN1cml0eS1hZHZpc29yaWVzL3tnaHNhX2lkfVwiXG4gICAgXSxcbiAgICBsaXN0R2xvYmFsQWR2aXNvcmllczogW1wiR0VUIC9hZHZpc29yaWVzXCJdLFxuICAgIGxpc3RPcmdSZXBvc2l0b3J5QWR2aXNvcmllczogW1wiR0VUIC9vcmdzL3tvcmd9L3NlY3VyaXR5LWFkdmlzb3JpZXNcIl0sXG4gICAgbGlzdFJlcG9zaXRvcnlBZHZpc29yaWVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3VyaXR5LWFkdmlzb3JpZXNcIl0sXG4gICAgdXBkYXRlUmVwb3NpdG9yeUFkdmlzb3J5OiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWN1cml0eS1hZHZpc29yaWVzL3tnaHNhX2lkfVwiXG4gICAgXVxuICB9LFxuICB0ZWFtczoge1xuICAgIGFkZE9yVXBkYXRlTWVtYmVyc2hpcEZvclVzZXJJbk9yZzogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiXG4gICAgXSxcbiAgICBhZGRPclVwZGF0ZVByb2plY3RQZXJtaXNzaW9uc0luT3JnOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9wcm9qZWN0cy97cHJvamVjdF9pZH1cIlxuICAgIF0sXG4gICAgYWRkT3JVcGRhdGVSZXBvUGVybWlzc2lvbnNJbk9yZzogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcmVwb3Mve293bmVyfS97cmVwb31cIlxuICAgIF0sXG4gICAgY2hlY2tQZXJtaXNzaW9uc0ZvclByb2plY3RJbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcHJvamVjdHMve3Byb2plY3RfaWR9XCJcbiAgICBdLFxuICAgIGNoZWNrUGVybWlzc2lvbnNGb3JSZXBvSW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3JlcG9zL3tvd25lcn0ve3JlcG99XCJcbiAgICBdLFxuICAgIGNyZWF0ZTogW1wiUE9TVCAvb3Jncy97b3JnfS90ZWFtc1wiXSxcbiAgICBjcmVhdGVEaXNjdXNzaW9uQ29tbWVudEluT3JnOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50c1wiXG4gICAgXSxcbiAgICBjcmVhdGVEaXNjdXNzaW9uSW5Pcmc6IFtcIlBPU1QgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnNcIl0sXG4gICAgZGVsZXRlRGlzY3Vzc2lvbkNvbW1lbnRJbk9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9XCJcbiAgICBdLFxuICAgIGRlbGV0ZURpc2N1c3Npb25Jbk9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfVwiXG4gICAgXSxcbiAgICBkZWxldGVJbk9yZzogW1wiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9XCJdLFxuICAgIGdldEJ5TmFtZTogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9XCJdLFxuICAgIGdldERpc2N1c3Npb25Db21tZW50SW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfbnVtYmVyfVwiXG4gICAgXSxcbiAgICBnZXREaXNjdXNzaW9uSW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn1cIlxuICAgIF0sXG4gICAgZ2V0TWVtYmVyc2hpcEZvclVzZXJJbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiXG4gICAgXSxcbiAgICBsaXN0OiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXNcIl0sXG4gICAgbGlzdENoaWxkSW5Pcmc6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS90ZWFtc1wiXSxcbiAgICBsaXN0RGlzY3Vzc2lvbkNvbW1lbnRzSW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHNcIlxuICAgIF0sXG4gICAgbGlzdERpc2N1c3Npb25zSW5Pcmc6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9uc1wiXSxcbiAgICBsaXN0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci90ZWFtc1wiXSxcbiAgICBsaXN0TWVtYmVyc0luT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vbWVtYmVyc1wiXSxcbiAgICBsaXN0UGVuZGluZ0ludml0YXRpb25zSW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2ludml0YXRpb25zXCJcbiAgICBdLFxuICAgIGxpc3RQcm9qZWN0c0luT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcHJvamVjdHNcIl0sXG4gICAgbGlzdFJlcG9zSW5Pcmc6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9yZXBvc1wiXSxcbiAgICByZW1vdmVNZW1iZXJzaGlwRm9yVXNlckluT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9tZW1iZXJzaGlwcy97dXNlcm5hbWV9XCJcbiAgICBdLFxuICAgIHJlbW92ZVByb2plY3RJbk9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcHJvamVjdHMve3Byb2plY3RfaWR9XCJcbiAgICBdLFxuICAgIHJlbW92ZVJlcG9Jbk9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcmVwb3Mve293bmVyfS97cmVwb31cIlxuICAgIF0sXG4gICAgdXBkYXRlRGlzY3Vzc2lvbkNvbW1lbnRJbk9yZzogW1xuICAgICAgXCJQQVRDSCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn1cIlxuICAgIF0sXG4gICAgdXBkYXRlRGlzY3Vzc2lvbkluT3JnOiBbXG4gICAgICBcIlBBVENIIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn1cIlxuICAgIF0sXG4gICAgdXBkYXRlSW5Pcmc6IFtcIlBBVENIIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9XCJdXG4gIH0sXG4gIHVzZXJzOiB7XG4gICAgYWRkRW1haWxGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIlBPU1QgL3VzZXIvZW1haWxzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJhZGRFbWFpbEZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIGFkZEVtYWlsRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvZW1haWxzXCJdLFxuICAgIGFkZFNvY2lhbEFjY291bnRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9zb2NpYWxfYWNjb3VudHNcIl0sXG4gICAgYmxvY2s6IFtcIlBVVCAvdXNlci9ibG9ja3Mve3VzZXJuYW1lfVwiXSxcbiAgICBjaGVja0Jsb2NrZWQ6IFtcIkdFVCAvdXNlci9ibG9ja3Mve3VzZXJuYW1lfVwiXSxcbiAgICBjaGVja0ZvbGxvd2luZ0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9mb2xsb3dpbmcve3RhcmdldF91c2VyfVwiXSxcbiAgICBjaGVja1BlcnNvbklzRm9sbG93ZWRCeUF1dGhlbnRpY2F0ZWQ6IFtcIkdFVCAvdXNlci9mb2xsb3dpbmcve3VzZXJuYW1lfVwiXSxcbiAgICBjcmVhdGVHcGdLZXlGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIlBPU1QgL3VzZXIvZ3BnX2tleXNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImNyZWF0ZUdwZ0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIGNyZWF0ZUdwZ0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL2dwZ19rZXlzXCJdLFxuICAgIGNyZWF0ZVB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiUE9TVCAvdXNlci9rZXlzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJjcmVhdGVQdWJsaWNTc2hLZXlGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBjcmVhdGVQdWJsaWNTc2hLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9rZXlzXCJdLFxuICAgIGNyZWF0ZVNzaFNpZ25pbmdLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9zc2hfc2lnbmluZ19rZXlzXCJdLFxuICAgIGRlbGV0ZUVtYWlsRm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvZW1haWxzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJkZWxldGVFbWFpbEZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIGRlbGV0ZUVtYWlsRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9lbWFpbHNcIl0sXG4gICAgZGVsZXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvZ3BnX2tleXMve2dwZ19rZXlfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJkZWxldGVHcGdLZXlGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBkZWxldGVHcGdLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiREVMRVRFIC91c2VyL2dwZ19rZXlzL3tncGdfa2V5X2lkfVwiXSxcbiAgICBkZWxldGVQdWJsaWNTc2hLZXlGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9rZXlzL3trZXlfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJkZWxldGVQdWJsaWNTc2hLZXlGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBkZWxldGVQdWJsaWNTc2hLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiREVMRVRFIC91c2VyL2tleXMve2tleV9pZH1cIl0sXG4gICAgZGVsZXRlU29jaWFsQWNjb3VudEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvc29jaWFsX2FjY291bnRzXCJdLFxuICAgIGRlbGV0ZVNzaFNpZ25pbmdLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvc3NoX3NpZ25pbmdfa2V5cy97c3NoX3NpZ25pbmdfa2V5X2lkfVwiXG4gICAgXSxcbiAgICBmb2xsb3c6IFtcIlBVVCAvdXNlci9mb2xsb3dpbmcve3VzZXJuYW1lfVwiXSxcbiAgICBnZXRBdXRoZW50aWNhdGVkOiBbXCJHRVQgL3VzZXJcIl0sXG4gICAgZ2V0QnlVc2VybmFtZTogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9XCJdLFxuICAgIGdldENvbnRleHRGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vaG92ZXJjYXJkXCJdLFxuICAgIGdldEdwZ0tleUZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL2dwZ19rZXlzL3tncGdfa2V5X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiZ2V0R3BnS2V5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfVxuICAgIF0sXG4gICAgZ2V0R3BnS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9ncGdfa2V5cy97Z3BnX2tleV9pZH1cIl0sXG4gICAgZ2V0UHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJHRVQgL3VzZXIva2V5cy97a2V5X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiZ2V0UHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfVxuICAgIF0sXG4gICAgZ2V0UHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9rZXlzL3trZXlfaWR9XCJdLFxuICAgIGdldFNzaFNpZ25pbmdLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvc3NoX3NpZ25pbmdfa2V5cy97c3NoX3NpZ25pbmdfa2V5X2lkfVwiXG4gICAgXSxcbiAgICBsaXN0OiBbXCJHRVQgL3VzZXJzXCJdLFxuICAgIGxpc3RCbG9ja2VkQnlBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIkdFVCAvdXNlci9ibG9ja3NcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImxpc3RCbG9ja2VkQnlBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBsaXN0QmxvY2tlZEJ5QXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9ibG9ja3NcIl0sXG4gICAgbGlzdEVtYWlsc0ZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL2VtYWlsc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwibGlzdEVtYWlsc0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIGxpc3RFbWFpbHNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2VtYWlsc1wiXSxcbiAgICBsaXN0Rm9sbG93ZWRCeUF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL2ZvbGxvd2luZ1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwibGlzdEZvbGxvd2VkQnlBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBsaXN0Rm9sbG93ZWRCeUF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvZm9sbG93aW5nXCJdLFxuICAgIGxpc3RGb2xsb3dlcnNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2ZvbGxvd2Vyc1wiXSxcbiAgICBsaXN0Rm9sbG93ZXJzRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2ZvbGxvd2Vyc1wiXSxcbiAgICBsaXN0Rm9sbG93aW5nRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2ZvbGxvd2luZ1wiXSxcbiAgICBsaXN0R3BnS2V5c0ZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL2dwZ19rZXlzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJsaXN0R3BnS2V5c0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIGxpc3RHcGdLZXlzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9ncGdfa2V5c1wiXSxcbiAgICBsaXN0R3BnS2V5c0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ncGdfa2V5c1wiXSxcbiAgICBsaXN0UHVibGljRW1haWxzRm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJHRVQgL3VzZXIvcHVibGljX2VtYWlsc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwibGlzdFB1YmxpY0VtYWlsc0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIGxpc3RQdWJsaWNFbWFpbHNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3B1YmxpY19lbWFpbHNcIl0sXG4gICAgbGlzdFB1YmxpY0tleXNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0va2V5c1wiXSxcbiAgICBsaXN0UHVibGljU3NoS2V5c0ZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL2tleXNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImxpc3RQdWJsaWNTc2hLZXlzRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfVxuICAgIF0sXG4gICAgbGlzdFB1YmxpY1NzaEtleXNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2tleXNcIl0sXG4gICAgbGlzdFNvY2lhbEFjY291bnRzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9zb2NpYWxfYWNjb3VudHNcIl0sXG4gICAgbGlzdFNvY2lhbEFjY291bnRzRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NvY2lhbF9hY2NvdW50c1wiXSxcbiAgICBsaXN0U3NoU2lnbmluZ0tleXNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3NzaF9zaWduaW5nX2tleXNcIl0sXG4gICAgbGlzdFNzaFNpZ25pbmdLZXlzRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NzaF9zaWduaW5nX2tleXNcIl0sXG4gICAgc2V0UHJpbWFyeUVtYWlsVmlzaWJpbGl0eUZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiUEFUQ0ggL3VzZXIvZW1haWwvdmlzaWJpbGl0eVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwic2V0UHJpbWFyeUVtYWlsVmlzaWJpbGl0eUZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIHNldFByaW1hcnlFbWFpbFZpc2liaWxpdHlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQQVRDSCAvdXNlci9lbWFpbC92aXNpYmlsaXR5XCJcbiAgICBdLFxuICAgIHVuYmxvY2s6IFtcIkRFTEVURSAvdXNlci9ibG9ja3Mve3VzZXJuYW1lfVwiXSxcbiAgICB1bmZvbGxvdzogW1wiREVMRVRFIC91c2VyL2ZvbGxvd2luZy97dXNlcm5hbWV9XCJdLFxuICAgIHVwZGF0ZUF1dGhlbnRpY2F0ZWQ6IFtcIlBBVENIIC91c2VyXCJdXG4gIH1cbn07XG52YXIgZW5kcG9pbnRzX2RlZmF1bHQgPSBFbmRwb2ludHM7XG5cbi8vIHBrZy9kaXN0LXNyYy9lbmRwb2ludHMtdG8tbWV0aG9kcy5qc1xudmFyIGVuZHBvaW50TWV0aG9kc01hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5mb3IgKGNvbnN0IFtzY29wZSwgZW5kcG9pbnRzXSBvZiBPYmplY3QuZW50cmllcyhlbmRwb2ludHNfZGVmYXVsdCkpIHtcbiAgZm9yIChjb25zdCBbbWV0aG9kTmFtZSwgZW5kcG9pbnRdIG9mIE9iamVjdC5lbnRyaWVzKGVuZHBvaW50cykpIHtcbiAgICBjb25zdCBbcm91dGUsIGRlZmF1bHRzLCBkZWNvcmF0aW9uc10gPSBlbmRwb2ludDtcbiAgICBjb25zdCBbbWV0aG9kLCB1cmxdID0gcm91dGUuc3BsaXQoLyAvKTtcbiAgICBjb25zdCBlbmRwb2ludERlZmF1bHRzID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHtcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICB1cmxcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0c1xuICAgICk7XG4gICAgaWYgKCFlbmRwb2ludE1ldGhvZHNNYXAuaGFzKHNjb3BlKSkge1xuICAgICAgZW5kcG9pbnRNZXRob2RzTWFwLnNldChzY29wZSwgLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSk7XG4gICAgfVxuICAgIGVuZHBvaW50TWV0aG9kc01hcC5nZXQoc2NvcGUpLnNldChtZXRob2ROYW1lLCB7XG4gICAgICBzY29wZSxcbiAgICAgIG1ldGhvZE5hbWUsXG4gICAgICBlbmRwb2ludERlZmF1bHRzLFxuICAgICAgZGVjb3JhdGlvbnNcbiAgICB9KTtcbiAgfVxufVxudmFyIGhhbmRsZXIgPSB7XG4gIGhhcyh7IHNjb3BlIH0sIG1ldGhvZE5hbWUpIHtcbiAgICByZXR1cm4gZW5kcG9pbnRNZXRob2RzTWFwLmdldChzY29wZSkuaGFzKG1ldGhvZE5hbWUpO1xuICB9LFxuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBtZXRob2ROYW1lKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiB0aGlzLmdldCh0YXJnZXQsIG1ldGhvZE5hbWUpLFxuICAgICAgLy8gZW5zdXJlcyBtZXRob2QgaXMgaW4gdGhlIGNhY2hlXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICB9O1xuICB9LFxuICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG1ldGhvZE5hbWUsIGRlc2NyaXB0b3IpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LmNhY2hlLCBtZXRob2ROYW1lLCBkZXNjcmlwdG9yKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSxcbiAgZGVsZXRlUHJvcGVydHkodGFyZ2V0LCBtZXRob2ROYW1lKSB7XG4gICAgZGVsZXRlIHRhcmdldC5jYWNoZVttZXRob2ROYW1lXTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSxcbiAgb3duS2V5cyh7IHNjb3BlIH0pIHtcbiAgICByZXR1cm4gWy4uLmVuZHBvaW50TWV0aG9kc01hcC5nZXQoc2NvcGUpLmtleXMoKV07XG4gIH0sXG4gIHNldCh0YXJnZXQsIG1ldGhvZE5hbWUsIHZhbHVlKSB7XG4gICAgcmV0dXJuIHRhcmdldC5jYWNoZVttZXRob2ROYW1lXSA9IHZhbHVlO1xuICB9LFxuICBnZXQoeyBvY3Rva2l0LCBzY29wZSwgY2FjaGUgfSwgbWV0aG9kTmFtZSkge1xuICAgIGlmIChjYWNoZVttZXRob2ROYW1lXSkge1xuICAgICAgcmV0dXJuIGNhY2hlW21ldGhvZE5hbWVdO1xuICAgIH1cbiAgICBjb25zdCBtZXRob2QgPSBlbmRwb2ludE1ldGhvZHNNYXAuZ2V0KHNjb3BlKS5nZXQobWV0aG9kTmFtZSk7XG4gICAgaWYgKCFtZXRob2QpIHtcbiAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgfVxuICAgIGNvbnN0IHsgZW5kcG9pbnREZWZhdWx0cywgZGVjb3JhdGlvbnMgfSA9IG1ldGhvZDtcbiAgICBpZiAoZGVjb3JhdGlvbnMpIHtcbiAgICAgIGNhY2hlW21ldGhvZE5hbWVdID0gZGVjb3JhdGUoXG4gICAgICAgIG9jdG9raXQsXG4gICAgICAgIHNjb3BlLFxuICAgICAgICBtZXRob2ROYW1lLFxuICAgICAgICBlbmRwb2ludERlZmF1bHRzLFxuICAgICAgICBkZWNvcmF0aW9uc1xuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FjaGVbbWV0aG9kTmFtZV0gPSBvY3Rva2l0LnJlcXVlc3QuZGVmYXVsdHMoZW5kcG9pbnREZWZhdWx0cyk7XG4gICAgfVxuICAgIHJldHVybiBjYWNoZVttZXRob2ROYW1lXTtcbiAgfVxufTtcbmZ1bmN0aW9uIGVuZHBvaW50c1RvTWV0aG9kcyhvY3Rva2l0KSB7XG4gIGNvbnN0IG5ld01ldGhvZHMgPSB7fTtcbiAgZm9yIChjb25zdCBzY29wZSBvZiBlbmRwb2ludE1ldGhvZHNNYXAua2V5cygpKSB7XG4gICAgbmV3TWV0aG9kc1tzY29wZV0gPSBuZXcgUHJveHkoeyBvY3Rva2l0LCBzY29wZSwgY2FjaGU6IHt9IH0sIGhhbmRsZXIpO1xuICB9XG4gIHJldHVybiBuZXdNZXRob2RzO1xufVxuZnVuY3Rpb24gZGVjb3JhdGUob2N0b2tpdCwgc2NvcGUsIG1ldGhvZE5hbWUsIGRlZmF1bHRzLCBkZWNvcmF0aW9ucykge1xuICBjb25zdCByZXF1ZXN0V2l0aERlZmF1bHRzID0gb2N0b2tpdC5yZXF1ZXN0LmRlZmF1bHRzKGRlZmF1bHRzKTtcbiAgZnVuY3Rpb24gd2l0aERlY29yYXRpb25zKC4uLmFyZ3MpIHtcbiAgICBsZXQgb3B0aW9ucyA9IHJlcXVlc3RXaXRoRGVmYXVsdHMuZW5kcG9pbnQubWVyZ2UoLi4uYXJncyk7XG4gICAgaWYgKGRlY29yYXRpb25zLm1hcFRvRGF0YSkge1xuICAgICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMsIHtcbiAgICAgICAgZGF0YTogb3B0aW9uc1tkZWNvcmF0aW9ucy5tYXBUb0RhdGFdLFxuICAgICAgICBbZGVjb3JhdGlvbnMubWFwVG9EYXRhXTogdm9pZCAwXG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXF1ZXN0V2l0aERlZmF1bHRzKG9wdGlvbnMpO1xuICAgIH1cbiAgICBpZiAoZGVjb3JhdGlvbnMucmVuYW1lZCkge1xuICAgICAgY29uc3QgW25ld1Njb3BlLCBuZXdNZXRob2ROYW1lXSA9IGRlY29yYXRpb25zLnJlbmFtZWQ7XG4gICAgICBvY3Rva2l0LmxvZy53YXJuKFxuICAgICAgICBgb2N0b2tpdC4ke3Njb3BlfS4ke21ldGhvZE5hbWV9KCkgaGFzIGJlZW4gcmVuYW1lZCB0byBvY3Rva2l0LiR7bmV3U2NvcGV9LiR7bmV3TWV0aG9kTmFtZX0oKWBcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChkZWNvcmF0aW9ucy5kZXByZWNhdGVkKSB7XG4gICAgICBvY3Rva2l0LmxvZy53YXJuKGRlY29yYXRpb25zLmRlcHJlY2F0ZWQpO1xuICAgIH1cbiAgICBpZiAoZGVjb3JhdGlvbnMucmVuYW1lZFBhcmFtZXRlcnMpIHtcbiAgICAgIGNvbnN0IG9wdGlvbnMyID0gcmVxdWVzdFdpdGhEZWZhdWx0cy5lbmRwb2ludC5tZXJnZSguLi5hcmdzKTtcbiAgICAgIGZvciAoY29uc3QgW25hbWUsIGFsaWFzXSBvZiBPYmplY3QuZW50cmllcyhcbiAgICAgICAgZGVjb3JhdGlvbnMucmVuYW1lZFBhcmFtZXRlcnNcbiAgICAgICkpIHtcbiAgICAgICAgaWYgKG5hbWUgaW4gb3B0aW9uczIpIHtcbiAgICAgICAgICBvY3Rva2l0LmxvZy53YXJuKFxuICAgICAgICAgICAgYFwiJHtuYW1lfVwiIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkIGZvciBcIm9jdG9raXQuJHtzY29wZX0uJHttZXRob2ROYW1lfSgpXCIuIFVzZSBcIiR7YWxpYXN9XCIgaW5zdGVhZGBcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmICghKGFsaWFzIGluIG9wdGlvbnMyKSkge1xuICAgICAgICAgICAgb3B0aW9uczJbYWxpYXNdID0gb3B0aW9uczJbbmFtZV07XG4gICAgICAgICAgfVxuICAgICAgICAgIGRlbGV0ZSBvcHRpb25zMltuYW1lXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlcXVlc3RXaXRoRGVmYXVsdHMob3B0aW9uczIpO1xuICAgIH1cbiAgICByZXR1cm4gcmVxdWVzdFdpdGhEZWZhdWx0cyguLi5hcmdzKTtcbiAgfVxuICByZXR1cm4gT2JqZWN0LmFzc2lnbih3aXRoRGVjb3JhdGlvbnMsIHJlcXVlc3RXaXRoRGVmYXVsdHMpO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbmZ1bmN0aW9uIHJlc3RFbmRwb2ludE1ldGhvZHMob2N0b2tpdCkge1xuICBjb25zdCBhcGkgPSBlbmRwb2ludHNUb01ldGhvZHMob2N0b2tpdCk7XG4gIHJldHVybiB7XG4gICAgcmVzdDogYXBpXG4gIH07XG59XG5yZXN0RW5kcG9pbnRNZXRob2RzLlZFUlNJT04gPSBWRVJTSU9OO1xuZnVuY3Rpb24gbGVnYWN5UmVzdEVuZHBvaW50TWV0aG9kcyhvY3Rva2l0KSB7XG4gIGNvbnN0IGFwaSA9IGVuZHBvaW50c1RvTWV0aG9kcyhvY3Rva2l0KTtcbiAgcmV0dXJuIHtcbiAgICAuLi5hcGksXG4gICAgcmVzdDogYXBpXG4gIH07XG59XG5sZWdhY3lSZXN0RW5kcG9pbnRNZXRob2RzLlZFUlNJT04gPSBWRVJTSU9OO1xuLy8gQW5ub3RhdGUgdGhlIENvbW1vbkpTIGV4cG9ydCBuYW1lcyBmb3IgRVNNIGltcG9ydCBpbiBub2RlOlxuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gIGxlZ2FjeVJlc3RFbmRwb2ludE1ldGhvZHMsXG4gIHJlc3RFbmRwb2ludE1ldGhvZHNcbn0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wRGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgX19nZXRPd25Qcm9wTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcztcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fZXhwb3J0ID0gKHRhcmdldCwgYWxsKSA9PiB7XG4gIGZvciAodmFyIG5hbWUgaW4gYWxsKVxuICAgIF9fZGVmUHJvcCh0YXJnZXQsIG5hbWUsIHsgZ2V0OiBhbGxbbmFtZV0sIGVudW1lcmFibGU6IHRydWUgfSk7XG59O1xudmFyIF9fY29weVByb3BzID0gKHRvLCBmcm9tLCBleGNlcHQsIGRlc2MpID0+IHtcbiAgaWYgKGZyb20gJiYgdHlwZW9mIGZyb20gPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGZyb20gPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGZvciAobGV0IGtleSBvZiBfX2dldE93blByb3BOYW1lcyhmcm9tKSlcbiAgICAgIGlmICghX19oYXNPd25Qcm9wLmNhbGwodG8sIGtleSkgJiYga2V5ICE9PSBleGNlcHQpXG4gICAgICAgIF9fZGVmUHJvcCh0bywga2V5LCB7IGdldDogKCkgPT4gZnJvbVtrZXldLCBlbnVtZXJhYmxlOiAhKGRlc2MgPSBfX2dldE93blByb3BEZXNjKGZyb20sIGtleSkpIHx8IGRlc2MuZW51bWVyYWJsZSB9KTtcbiAgfVxuICByZXR1cm4gdG87XG59O1xudmFyIF9fdG9Db21tb25KUyA9IChtb2QpID0+IF9fY29weVByb3BzKF9fZGVmUHJvcCh7fSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSksIG1vZCk7XG5cbi8vIHBrZy9kaXN0LXNyYy9pbmRleC5qc1xudmFyIGRpc3Rfc3JjX2V4cG9ydHMgPSB7fTtcbl9fZXhwb3J0KGRpc3Rfc3JjX2V4cG9ydHMsIHtcbiAgY29tcG9zZVBhZ2luYXRlUmVzdDogKCkgPT4gY29tcG9zZVBhZ2luYXRlUmVzdCxcbiAgaXNQYWdpbmF0aW5nRW5kcG9pbnQ6ICgpID0+IGlzUGFnaW5hdGluZ0VuZHBvaW50LFxuICBwYWdpbmF0ZVJlc3Q6ICgpID0+IHBhZ2luYXRlUmVzdCxcbiAgcGFnaW5hdGluZ0VuZHBvaW50czogKCkgPT4gcGFnaW5hdGluZ0VuZHBvaW50c1xufSk7XG5tb2R1bGUuZXhwb3J0cyA9IF9fdG9Db21tb25KUyhkaXN0X3NyY19leHBvcnRzKTtcblxuLy8gcGtnL2Rpc3Qtc3JjL3ZlcnNpb24uanNcbnZhciBWRVJTSU9OID0gXCI5LjIuMVwiO1xuXG4vLyBwa2cvZGlzdC1zcmMvbm9ybWFsaXplLXBhZ2luYXRlZC1saXN0LXJlc3BvbnNlLmpzXG5mdW5jdGlvbiBub3JtYWxpemVQYWdpbmF0ZWRMaXN0UmVzcG9uc2UocmVzcG9uc2UpIHtcbiAgaWYgKCFyZXNwb25zZS5kYXRhKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnJlc3BvbnNlLFxuICAgICAgZGF0YTogW11cbiAgICB9O1xuICB9XG4gIGNvbnN0IHJlc3BvbnNlTmVlZHNOb3JtYWxpemF0aW9uID0gXCJ0b3RhbF9jb3VudFwiIGluIHJlc3BvbnNlLmRhdGEgJiYgIShcInVybFwiIGluIHJlc3BvbnNlLmRhdGEpO1xuICBpZiAoIXJlc3BvbnNlTmVlZHNOb3JtYWxpemF0aW9uKVxuICAgIHJldHVybiByZXNwb25zZTtcbiAgY29uc3QgaW5jb21wbGV0ZVJlc3VsdHMgPSByZXNwb25zZS5kYXRhLmluY29tcGxldGVfcmVzdWx0cztcbiAgY29uc3QgcmVwb3NpdG9yeVNlbGVjdGlvbiA9IHJlc3BvbnNlLmRhdGEucmVwb3NpdG9yeV9zZWxlY3Rpb247XG4gIGNvbnN0IHRvdGFsQ291bnQgPSByZXNwb25zZS5kYXRhLnRvdGFsX2NvdW50O1xuICBkZWxldGUgcmVzcG9uc2UuZGF0YS5pbmNvbXBsZXRlX3Jlc3VsdHM7XG4gIGRlbGV0ZSByZXNwb25zZS5kYXRhLnJlcG9zaXRvcnlfc2VsZWN0aW9uO1xuICBkZWxldGUgcmVzcG9uc2UuZGF0YS50b3RhbF9jb3VudDtcbiAgY29uc3QgbmFtZXNwYWNlS2V5ID0gT2JqZWN0LmtleXMocmVzcG9uc2UuZGF0YSlbMF07XG4gIGNvbnN0IGRhdGEgPSByZXNwb25zZS5kYXRhW25hbWVzcGFjZUtleV07XG4gIHJlc3BvbnNlLmRhdGEgPSBkYXRhO1xuICBpZiAodHlwZW9mIGluY29tcGxldGVSZXN1bHRzICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmVzcG9uc2UuZGF0YS5pbmNvbXBsZXRlX3Jlc3VsdHMgPSBpbmNvbXBsZXRlUmVzdWx0cztcbiAgfVxuICBpZiAodHlwZW9mIHJlcG9zaXRvcnlTZWxlY3Rpb24gIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXNwb25zZS5kYXRhLnJlcG9zaXRvcnlfc2VsZWN0aW9uID0gcmVwb3NpdG9yeVNlbGVjdGlvbjtcbiAgfVxuICByZXNwb25zZS5kYXRhLnRvdGFsX2NvdW50ID0gdG90YWxDb3VudDtcbiAgcmV0dXJuIHJlc3BvbnNlO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvaXRlcmF0b3IuanNcbmZ1bmN0aW9uIGl0ZXJhdG9yKG9jdG9raXQsIHJvdXRlLCBwYXJhbWV0ZXJzKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSB0eXBlb2Ygcm91dGUgPT09IFwiZnVuY3Rpb25cIiA/IHJvdXRlLmVuZHBvaW50KHBhcmFtZXRlcnMpIDogb2N0b2tpdC5yZXF1ZXN0LmVuZHBvaW50KHJvdXRlLCBwYXJhbWV0ZXJzKTtcbiAgY29uc3QgcmVxdWVzdE1ldGhvZCA9IHR5cGVvZiByb3V0ZSA9PT0gXCJmdW5jdGlvblwiID8gcm91dGUgOiBvY3Rva2l0LnJlcXVlc3Q7XG4gIGNvbnN0IG1ldGhvZCA9IG9wdGlvbnMubWV0aG9kO1xuICBjb25zdCBoZWFkZXJzID0gb3B0aW9ucy5oZWFkZXJzO1xuICBsZXQgdXJsID0gb3B0aW9ucy51cmw7XG4gIHJldHVybiB7XG4gICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTogKCkgPT4gKHtcbiAgICAgIGFzeW5jIG5leHQoKSB7XG4gICAgICAgIGlmICghdXJsKVxuICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUgfTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcXVlc3RNZXRob2QoeyBtZXRob2QsIHVybCwgaGVhZGVycyB9KTtcbiAgICAgICAgICBjb25zdCBub3JtYWxpemVkUmVzcG9uc2UgPSBub3JtYWxpemVQYWdpbmF0ZWRMaXN0UmVzcG9uc2UocmVzcG9uc2UpO1xuICAgICAgICAgIHVybCA9ICgobm9ybWFsaXplZFJlc3BvbnNlLmhlYWRlcnMubGluayB8fCBcIlwiKS5tYXRjaChcbiAgICAgICAgICAgIC88KFtePl0rKT47XFxzKnJlbD1cIm5leHRcIi9cbiAgICAgICAgICApIHx8IFtdKVsxXTtcbiAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbm9ybWFsaXplZFJlc3BvbnNlIH07XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgaWYgKGVycm9yLnN0YXR1cyAhPT0gNDA5KVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgdXJsID0gXCJcIjtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgc3RhdHVzOiAyMDAsXG4gICAgICAgICAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgICAgICAgICBkYXRhOiBbXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9O1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvcGFnaW5hdGUuanNcbmZ1bmN0aW9uIHBhZ2luYXRlKG9jdG9raXQsIHJvdXRlLCBwYXJhbWV0ZXJzLCBtYXBGbikge1xuICBpZiAodHlwZW9mIHBhcmFtZXRlcnMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIG1hcEZuID0gcGFyYW1ldGVycztcbiAgICBwYXJhbWV0ZXJzID0gdm9pZCAwO1xuICB9XG4gIHJldHVybiBnYXRoZXIoXG4gICAgb2N0b2tpdCxcbiAgICBbXSxcbiAgICBpdGVyYXRvcihvY3Rva2l0LCByb3V0ZSwgcGFyYW1ldGVycylbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCksXG4gICAgbWFwRm5cbiAgKTtcbn1cbmZ1bmN0aW9uIGdhdGhlcihvY3Rva2l0LCByZXN1bHRzLCBpdGVyYXRvcjIsIG1hcEZuKSB7XG4gIHJldHVybiBpdGVyYXRvcjIubmV4dCgpLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgIGlmIChyZXN1bHQuZG9uZSkge1xuICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuICAgIGxldCBlYXJseUV4aXQgPSBmYWxzZTtcbiAgICBmdW5jdGlvbiBkb25lKCkge1xuICAgICAgZWFybHlFeGl0ID0gdHJ1ZTtcbiAgICB9XG4gICAgcmVzdWx0cyA9IHJlc3VsdHMuY29uY2F0KFxuICAgICAgbWFwRm4gPyBtYXBGbihyZXN1bHQudmFsdWUsIGRvbmUpIDogcmVzdWx0LnZhbHVlLmRhdGFcbiAgICApO1xuICAgIGlmIChlYXJseUV4aXQpIHtcbiAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbiAgICByZXR1cm4gZ2F0aGVyKG9jdG9raXQsIHJlc3VsdHMsIGl0ZXJhdG9yMiwgbWFwRm4pO1xuICB9KTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2NvbXBvc2UtcGFnaW5hdGUuanNcbnZhciBjb21wb3NlUGFnaW5hdGVSZXN0ID0gT2JqZWN0LmFzc2lnbihwYWdpbmF0ZSwge1xuICBpdGVyYXRvclxufSk7XG5cbi8vIHBrZy9kaXN0LXNyYy9nZW5lcmF0ZWQvcGFnaW5hdGluZy1lbmRwb2ludHMuanNcbnZhciBwYWdpbmF0aW5nRW5kcG9pbnRzID0gW1xuICBcIkdFVCAvYWR2aXNvcmllc1wiLFxuICBcIkdFVCAvYXBwL2hvb2svZGVsaXZlcmllc1wiLFxuICBcIkdFVCAvYXBwL2luc3RhbGxhdGlvbi1yZXF1ZXN0c1wiLFxuICBcIkdFVCAvYXBwL2luc3RhbGxhdGlvbnNcIixcbiAgXCJHRVQgL2Fzc2lnbm1lbnRzL3thc3NpZ25tZW50X2lkfS9hY2NlcHRlZF9hc3NpZ25tZW50c1wiLFxuICBcIkdFVCAvY2xhc3Nyb29tc1wiLFxuICBcIkdFVCAvY2xhc3Nyb29tcy97Y2xhc3Nyb29tX2lkfS9hc3NpZ25tZW50c1wiLFxuICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2RlcGVuZGFib3QvYWxlcnRzXCIsXG4gIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0c1wiLFxuICBcIkdFVCAvZXZlbnRzXCIsXG4gIFwiR0VUIC9naXN0c1wiLFxuICBcIkdFVCAvZ2lzdHMvcHVibGljXCIsXG4gIFwiR0VUIC9naXN0cy9zdGFycmVkXCIsXG4gIFwiR0VUIC9naXN0cy97Z2lzdF9pZH0vY29tbWVudHNcIixcbiAgXCJHRVQgL2dpc3RzL3tnaXN0X2lkfS9jb21taXRzXCIsXG4gIFwiR0VUIC9naXN0cy97Z2lzdF9pZH0vZm9ya3NcIixcbiAgXCJHRVQgL2luc3RhbGxhdGlvbi9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL2lzc3Vlc1wiLFxuICBcIkdFVCAvbGljZW5zZXNcIixcbiAgXCJHRVQgL21hcmtldHBsYWNlX2xpc3RpbmcvcGxhbnNcIixcbiAgXCJHRVQgL21hcmtldHBsYWNlX2xpc3RpbmcvcGxhbnMve3BsYW5faWR9L2FjY291bnRzXCIsXG4gIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3N0dWJiZWQvcGxhbnNcIixcbiAgXCJHRVQgL21hcmtldHBsYWNlX2xpc3Rpbmcvc3R1YmJlZC9wbGFucy97cGxhbl9pZH0vYWNjb3VudHNcIixcbiAgXCJHRVQgL25ldHdvcmtzL3tvd25lcn0ve3JlcG99L2V2ZW50c1wiLFxuICBcIkdFVCAvbm90aWZpY2F0aW9uc1wiLFxuICBcIkdFVCAvb3JnYW5pemF0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2NhY2hlL3VzYWdlLWJ5LXJlcG9zaXRvcnlcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9ibG9ja3NcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vY29kZS1zY2FubmluZy9hbGVydHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzL3NlY3JldHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2NvcGlsb3QvYmlsbGluZy9zZWF0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L2FsZXJ0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2V2ZW50c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9mYWlsZWRfaW52aXRhdGlvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vaG9va3NcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vaW5zdGFsbGF0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9pbnZpdGF0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH0vdGVhbXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vaXNzdWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vbWVtYmVycy97dXNlcm5hbWV9L2NvZGVzcGFjZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vbWlncmF0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMve3JvbGVfaWR9L3RlYW1zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy97cm9sZV9pZH0vdXNlcnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vb3V0c2lkZV9jb2xsYWJvcmF0b3JzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3BhY2thZ2VzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbi1yZXF1ZXN0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW4tcmVxdWVzdHMve3BhdF9yZXF1ZXN0X2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2Vuc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW5zL3twYXRfaWR9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wcm9qZWN0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wcm9wZXJ0aWVzL3ZhbHVlc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wdWJsaWNfbWVtYmVyc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9yZXBvc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9ydWxlc2V0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9ydWxlc2V0cy9ydWxlLXN1aXRlc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3NlY3VyaXR5LWFkdmlzb3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2ludml0YXRpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L21lbWJlcnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcHJvamVjdHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcmVwb3NcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vdGVhbXNcIixcbiAgXCJHRVQgL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH0vY2FyZHNcIixcbiAgXCJHRVQgL3Byb2plY3RzL3twcm9qZWN0X2lkfS9jb2xsYWJvcmF0b3JzXCIsXG4gIFwiR0VUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sdW1uc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9hcnRpZmFjdHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvY2FjaGVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL29yZ2FuaXphdGlvbi1zZWNyZXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL29yZ2FuaXphdGlvbi12YXJpYWJsZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVyc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXJ0aWZhY3RzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXR0ZW1wdHMve2F0dGVtcHRfbnVtYmVyfS9qb2JzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vam9ic1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9zZWNyZXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3ZhcmlhYmxlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3NcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvd29ya2Zsb3dzL3t3b3JrZmxvd19pZH0vcnVuc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aXZpdHlcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Fzc2lnbmVlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXJ1bnMve2NoZWNrX3J1bl9pZH0vYW5ub3RhdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXN1aXRlcy97Y2hlY2tfc3VpdGVfaWR9L2NoZWNrLXJ1bnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9pbnN0YW5jZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYW5hbHlzZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvZGV2Y29udGFpbmVyc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9zZWNyZXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2xsYWJvcmF0b3JzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97Y29tbWl0X3NoYX0vY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve2NvbW1pdF9zaGF9L3B1bGxzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L2NoZWNrLXJ1bnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vY2hlY2stc3VpdGVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L3N0YXR1c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfS9zdGF0dXNlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29udHJpYnV0b3JzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L2FsZXJ0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9zZWNyZXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHMve2RlcGxveW1lbnRfaWR9L3N0YXR1c2VzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudC1icmFuY2gtcG9saWNpZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudF9wcm90ZWN0aW9uX3J1bGVzL2FwcHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2V2ZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZm9ya3NcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaW52aXRhdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2V2ZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2NvbW1lbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vZXZlbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbGFiZWxzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vdGltZWxpbmVcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2tleXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhYmVsc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lcy97bWlsZXN0b25lX251bWJlcn0vbGFiZWxzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ub3RpZmljYXRpb25zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9idWlsZHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Byb2plY3RzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxsc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vY29tbWl0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9maWxlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH0vY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vYXNzZXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlcy9icmFuY2hlcy97YnJhbmNofVwiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzL3J1bGUtc3VpdGVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9L2xvY2F0aW9uc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjdXJpdHktYWR2aXNvcmllc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3RhcmdhemVyc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3Vic2NyaWJlcnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RhZ3NcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RlYW1zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90b3BpY3NcIixcbiAgXCJHRVQgL3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHNcIixcbiAgXCJHRVQgL3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH0vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS92YXJpYWJsZXNcIixcbiAgXCJHRVQgL3NlYXJjaC9jb2RlXCIsXG4gIFwiR0VUIC9zZWFyY2gvY29tbWl0c1wiLFxuICBcIkdFVCAvc2VhcmNoL2lzc3Vlc1wiLFxuICBcIkdFVCAvc2VhcmNoL2xhYmVsc1wiLFxuICBcIkdFVCAvc2VhcmNoL3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvc2VhcmNoL3RvcGljc1wiLFxuICBcIkdFVCAvc2VhcmNoL3VzZXJzXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vZGlzY3Vzc2lvbnNcIixcbiAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvdGVhbXMve3RlYW1faWR9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vaW52aXRhdGlvbnNcIixcbiAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9tZW1iZXJzXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vcHJvamVjdHNcIixcbiAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9yZXBvc1wiLFxuICBcIkdFVCAvdGVhbXMve3RlYW1faWR9L3RlYW1zXCIsXG4gIFwiR0VUIC91c2VyL2Jsb2Nrc1wiLFxuICBcIkdFVCAvdXNlci9jb2Rlc3BhY2VzXCIsXG4gIFwiR0VUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0c1wiLFxuICBcIkdFVCAvdXNlci9lbWFpbHNcIixcbiAgXCJHRVQgL3VzZXIvZm9sbG93ZXJzXCIsXG4gIFwiR0VUIC91c2VyL2ZvbGxvd2luZ1wiLFxuICBcIkdFVCAvdXNlci9ncGdfa2V5c1wiLFxuICBcIkdFVCAvdXNlci9pbnN0YWxsYXRpb25zXCIsXG4gIFwiR0VUIC91c2VyL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC91c2VyL2lzc3Vlc1wiLFxuICBcIkdFVCAvdXNlci9rZXlzXCIsXG4gIFwiR0VUIC91c2VyL21hcmtldHBsYWNlX3B1cmNoYXNlc1wiLFxuICBcIkdFVCAvdXNlci9tYXJrZXRwbGFjZV9wdXJjaGFzZXMvc3R1YmJlZFwiLFxuICBcIkdFVCAvdXNlci9tZW1iZXJzaGlwcy9vcmdzXCIsXG4gIFwiR0VUIC91c2VyL21pZ3JhdGlvbnNcIixcbiAgXCJHRVQgL3VzZXIvbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL3VzZXIvb3Jnc1wiLFxuICBcIkdFVCAvdXNlci9wYWNrYWdlc1wiLFxuICBcIkdFVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiLFxuICBcIkdFVCAvdXNlci9wdWJsaWNfZW1haWxzXCIsXG4gIFwiR0VUIC91c2VyL3JlcG9zXCIsXG4gIFwiR0VUIC91c2VyL3JlcG9zaXRvcnlfaW52aXRhdGlvbnNcIixcbiAgXCJHRVQgL3VzZXIvc29jaWFsX2FjY291bnRzXCIsXG4gIFwiR0VUIC91c2VyL3NzaF9zaWduaW5nX2tleXNcIixcbiAgXCJHRVQgL3VzZXIvc3RhcnJlZFwiLFxuICBcIkdFVCAvdXNlci9zdWJzY3JpcHRpb25zXCIsXG4gIFwiR0VUIC91c2VyL3RlYW1zXCIsXG4gIFwiR0VUIC91c2Vyc1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ldmVudHNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzL29yZ3Mve29yZ31cIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzL3B1YmxpY1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9mb2xsb3dlcnNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZm9sbG93aW5nXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2dpc3RzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2dwZ19rZXlzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2tleXNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vb3Jnc1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlc1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wcm9qZWN0c1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9yZWNlaXZlZF9ldmVudHNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcmVjZWl2ZWRfZXZlbnRzL3B1YmxpY1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9yZXBvc1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zb2NpYWxfYWNjb3VudHNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc3NoX3NpZ25pbmdfa2V5c1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zdGFycmVkXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3N1YnNjcmlwdGlvbnNcIlxuXTtcblxuLy8gcGtnL2Rpc3Qtc3JjL3BhZ2luYXRpbmctZW5kcG9pbnRzLmpzXG5mdW5jdGlvbiBpc1BhZ2luYXRpbmdFbmRwb2ludChhcmcpIHtcbiAgaWYgKHR5cGVvZiBhcmcgPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gcGFnaW5hdGluZ0VuZHBvaW50cy5pbmNsdWRlcyhhcmcpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbmZ1bmN0aW9uIHBhZ2luYXRlUmVzdChvY3Rva2l0KSB7XG4gIHJldHVybiB7XG4gICAgcGFnaW5hdGU6IE9iamVjdC5hc3NpZ24ocGFnaW5hdGUuYmluZChudWxsLCBvY3Rva2l0KSwge1xuICAgICAgaXRlcmF0b3I6IGl0ZXJhdG9yLmJpbmQobnVsbCwgb2N0b2tpdClcbiAgICB9KVxuICB9O1xufVxucGFnaW5hdGVSZXN0LlZFUlNJT04gPSBWRVJTSU9OO1xuLy8gQW5ub3RhdGUgdGhlIENvbW1vbkpTIGV4cG9ydCBuYW1lcyBmb3IgRVNNIGltcG9ydCBpbiBub2RlOlxuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gIGNvbXBvc2VQYWdpbmF0ZVJlc3QsXG4gIGlzUGFnaW5hdGluZ0VuZHBvaW50LFxuICBwYWdpbmF0ZVJlc3QsXG4gIHBhZ2luYXRpbmdFbmRwb2ludHNcbn0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRPY3Rva2l0T3B0aW9ucyA9IGV4cG9ydHMuR2l0SHViID0gZXhwb3J0cy5kZWZhdWx0cyA9IGV4cG9ydHMuY29udGV4dCA9IHZvaWQgMDtcbmNvbnN0IENvbnRleHQgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIi4vY29udGV4dFwiKSk7XG5jb25zdCBVdGlscyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiLi9pbnRlcm5hbC91dGlsc1wiKSk7XG4vLyBvY3Rva2l0ICsgcGx1Z2luc1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIkBvY3Rva2l0L2NvcmVcIik7XG5jb25zdCBwbHVnaW5fcmVzdF9lbmRwb2ludF9tZXRob2RzXzEgPSByZXF1aXJlKFwiQG9jdG9raXQvcGx1Z2luLXJlc3QtZW5kcG9pbnQtbWV0aG9kc1wiKTtcbmNvbnN0IHBsdWdpbl9wYWdpbmF0ZV9yZXN0XzEgPSByZXF1aXJlKFwiQG9jdG9raXQvcGx1Z2luLXBhZ2luYXRlLXJlc3RcIik7XG5leHBvcnRzLmNvbnRleHQgPSBuZXcgQ29udGV4dC5Db250ZXh0KCk7XG5jb25zdCBiYXNlVXJsID0gVXRpbHMuZ2V0QXBpQmFzZVVybCgpO1xuZXhwb3J0cy5kZWZhdWx0cyA9IHtcbiAgICBiYXNlVXJsLFxuICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgYWdlbnQ6IFV0aWxzLmdldFByb3h5QWdlbnQoYmFzZVVybCksXG4gICAgICAgIGZldGNoOiBVdGlscy5nZXRQcm94eUZldGNoKGJhc2VVcmwpXG4gICAgfVxufTtcbmV4cG9ydHMuR2l0SHViID0gY29yZV8xLk9jdG9raXQucGx1Z2luKHBsdWdpbl9yZXN0X2VuZHBvaW50X21ldGhvZHNfMS5yZXN0RW5kcG9pbnRNZXRob2RzLCBwbHVnaW5fcGFnaW5hdGVfcmVzdF8xLnBhZ2luYXRlUmVzdCkuZGVmYXVsdHMoZXhwb3J0cy5kZWZhdWx0cyk7XG4vKipcbiAqIENvbnZpZW5jZSBmdW5jdGlvbiB0byBjb3JyZWN0bHkgZm9ybWF0IE9jdG9raXQgT3B0aW9ucyB0byBwYXNzIGludG8gdGhlIGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSAgICAgdG9rZW4gICAgdGhlIHJlcG8gUEFUIG9yIEdJVEhVQl9UT0tFTlxuICogQHBhcmFtICAgICBvcHRpb25zICBvdGhlciBvcHRpb25zIHRvIHNldFxuICovXG5mdW5jdGlvbiBnZXRPY3Rva2l0T3B0aW9ucyh0b2tlbiwgb3B0aW9ucykge1xuICAgIGNvbnN0IG9wdHMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zIHx8IHt9KTsgLy8gU2hhbGxvdyBjbG9uZSAtIGRvbid0IG11dGF0ZSB0aGUgb2JqZWN0IHByb3ZpZGVkIGJ5IHRoZSBjYWxsZXJcbiAgICAvLyBBdXRoXG4gICAgY29uc3QgYXV0aCA9IFV0aWxzLmdldEF1dGhTdHJpbmcodG9rZW4sIG9wdHMpO1xuICAgIGlmIChhdXRoKSB7XG4gICAgICAgIG9wdHMuYXV0aCA9IGF1dGg7XG4gICAgfVxuICAgIHJldHVybiBvcHRzO1xufVxuZXhwb3J0cy5nZXRPY3Rva2l0T3B0aW9ucyA9IGdldE9jdG9raXRPcHRpb25zO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbHMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRPY3Rva2l0ID0gZXhwb3J0cy5jb250ZXh0ID0gdm9pZCAwO1xuY29uc3QgQ29udGV4dCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiLi9jb250ZXh0XCIpKTtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi91dGlsc1wiKTtcbmV4cG9ydHMuY29udGV4dCA9IG5ldyBDb250ZXh0LkNvbnRleHQoKTtcbi8qKlxuICogUmV0dXJucyBhIGh5ZHJhdGVkIG9jdG9raXQgcmVhZHkgdG8gdXNlIGZvciBHaXRIdWIgQWN0aW9uc1xuICpcbiAqIEBwYXJhbSAgICAgdG9rZW4gICAgdGhlIHJlcG8gUEFUIG9yIEdJVEhVQl9UT0tFTlxuICogQHBhcmFtICAgICBvcHRpb25zICBvdGhlciBvcHRpb25zIHRvIHNldFxuICovXG5mdW5jdGlvbiBnZXRPY3Rva2l0KHRva2VuLCBvcHRpb25zLCAuLi5hZGRpdGlvbmFsUGx1Z2lucykge1xuICAgIGNvbnN0IEdpdEh1YldpdGhQbHVnaW5zID0gdXRpbHNfMS5HaXRIdWIucGx1Z2luKC4uLmFkZGl0aW9uYWxQbHVnaW5zKTtcbiAgICByZXR1cm4gbmV3IEdpdEh1YldpdGhQbHVnaW5zKCgwLCB1dGlsc18xLmdldE9jdG9raXRPcHRpb25zKSh0b2tlbiwgb3B0aW9ucykpO1xufVxuZXhwb3J0cy5nZXRPY3Rva2l0ID0gZ2V0T2N0b2tpdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdpdGh1Yi5qcy5tYXAiLAogICAgImltcG9ydCAqIGFzIGZzIGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgRGVmYXVsdEFydGlmYWN0Q2xpZW50IH0gZnJvbSAnQGFjdGlvbnMvYXJ0aWZhY3QnO1xuaW1wb3J0IHsgZGVidWcsIGdldElucHV0LCBpbmZvIH0gZnJvbSAnQGFjdGlvbnMvY29yZSdcbmltcG9ydCB7IGNvbnRleHQsIGdldE9jdG9raXQgfSBmcm9tICdAYWN0aW9ucy9naXRodWInO1xuXG4oYXN5bmMgZnVuY3Rpb24gbWFpbigpIHtcblx0bGV0IGN3ZCA9IHBhdGgucmVzb2x2ZShwcm9jZXNzLmVudlsnR0lUSFVCX1dPUktTUEFDRSddIHx8IHByb2Nlc3MuY3dkKCkpXG5cblx0ZGVidWcoSlNPTi5zdHJpbmdpZnkoY29udGV4dCwgbnVsbCwgNCkpXG5cdGxldCBhcnRpZmFjdENsaWVudCA9IG5ldyBEZWZhdWx0QXJ0aWZhY3RDbGllbnQoKTtcblxuXHRsZXQgeyBhcnRpZmFjdHMgfSA9IGF3YWl0IGFydGlmYWN0Q2xpZW50Lmxpc3RBcnRpZmFjdHMoe1xuXHRcdGZpbmRCeToge1xuXHRcdFx0dG9rZW46IGdldElucHV0KFwidG9rZW5cIiwgeyByZXF1aXJlZDogdHJ1ZSB9KSxcblx0XHRcdHdvcmtmbG93UnVuSWQ6IHBhcnNlSW50KGdldElucHV0KFwicnVuX2lkXCIsIHsgcmVxdWlyZWQ6IHRydWUgfSkpLFxuXHRcdFx0cmVwb3NpdG9yeU93bmVyOiBjb250ZXh0LnJlcG8ub3duZXIsXG5cdFx0XHRyZXBvc2l0b3J5TmFtZTogY29udGV4dC5yZXBvLnJlcG8sXG5cdFx0fVxuXHR9KTtcblxuXHRkZWJ1ZyhgRm91bmQgJHthcnRpZmFjdHMubGVuZ3RofSBhcnRpZmFjdHM6ICR7SlNPTi5zdHJpbmdpZnkoYXJ0aWZhY3RzLCBudWxsLCA0KX1gKVxuXG5cdGxldCByZXBvcnRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge31cblx0bGV0IHB1bGxzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge31cblxuXHRmb3IgKGxldCBhcnRpZmFjdCBvZiBhcnRpZmFjdHMpIHtcblx0XHRkZWJ1ZyhgRG93bmxvYWRpbmcgYXJ0aWZhY3QgJHthcnRpZmFjdC5pZH0uLi5gKVxuXHRcdGxldCB7IGRvd25sb2FkUGF0aCB9ID0gYXdhaXQgYXJ0aWZhY3RDbGllbnQuZG93bmxvYWRBcnRpZmFjdChhcnRpZmFjdC5pZCwge1xuXHRcdFx0cGF0aDogY3dkLFxuXHRcdFx0ZmluZEJ5OiB7XG5cdFx0XHRcdHRva2VuOiBnZXRJbnB1dChcInRva2VuXCIsIHsgcmVxdWlyZWQ6IHRydWUgfSksXG5cdFx0XHRcdHdvcmtmbG93UnVuSWQ6IHBhcnNlSW50KGdldElucHV0KFwicnVuX2lkXCIsIHsgcmVxdWlyZWQ6IHRydWUgfSkpLFxuXHRcdFx0XHRyZXBvc2l0b3J5T3duZXI6IGNvbnRleHQucmVwby5vd25lcixcblx0XHRcdFx0cmVwb3NpdG9yeU5hbWU6IGNvbnRleHQucmVwby5yZXBvLFxuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0aW5mbyhgRG93bmxvYWRlZCBhcnRpZmFjdCAke2FydGlmYWN0LmlkfSB0byAke2Rvd25sb2FkUGF0aH1gKVxuXG5cdFx0aWYgKGFydGlmYWN0Lm5hbWUuZW5kc1dpdGgoXCItcmVwb3J0Lm1kXCIpKSB7XG5cdFx0XHRyZXBvcnRzW2FydGlmYWN0Lm5hbWUuc2xpY2UoMCwgLVwiLXJlcG9ydC5tZFwiLmxlbmd0aCldID0gcGF0aC5qb2luKGN3ZCwgYXJ0aWZhY3QubmFtZSk7XG5cdFx0fVxuXG5cdFx0aWYgKGFydGlmYWN0Lm5hbWUuZW5kc1dpdGgoXCItcHVsbC50eHRcIikpIHtcblx0XHRcdHB1bGxzW2FydGlmYWN0Lm5hbWUuc2xpY2UoMCwgLVwiLXB1bGwudHh0XCIubGVuZ3RoKV0gPSBwYXRoLmpvaW4oY3dkLCBhcnRpZmFjdC5uYW1lKTtcblx0XHR9XG5cdH1cblxuXHQvLyBzaG93IGFsbCBmaWxlcyBpbiBmb2xkZXJcblx0Y29uc29sZS5sb2coZnMucmVhZGRpclN5bmMoY3dkKSlcblxuXHRmb3IgKGxldCBzZGsgb2YgT2JqZWN0LmtleXMocmVwb3J0cykpIHtcblx0XHRsZXQgcHIgPSBmcy5yZWFkRmlsZVN5bmMocHVsbHNbc2RrXSwgeyBlbmNvZGluZzogXCJ1dGYtOFwiIH0pO1xuXHRcdGxldCByZXBvcnQgPSBmcy5yZWFkRmlsZVN5bmMocmVwb3J0c1tzZGtdLCB7IGVuY29kaW5nOiBcInV0Zi04XCIgfSk7XG5cblx0XHRkZWJ1ZyhgQ3JlYXRpbmcgcmVwb3J0IGZvciAke3Nka30uLi5gKVxuXHRcdGxldCB7IGRhdGEgfSA9IGF3YWl0IGdldE9jdG9raXQoZ2V0SW5wdXQoXCJ0b2tlblwiLCB7IHJlcXVpcmVkOiB0cnVlIH0pKS5yZXN0Lmlzc3Vlcy5jcmVhdGVDb21tZW50KHtcblx0XHRcdGlzc3VlX251bWJlcjogcGFyc2VJbnQocHIudHJpbSgpKSxcblx0XHRcdG93bmVyOiBjb250ZXh0LnJlcG8ub3duZXIsXG5cdFx0XHRyZXBvOiBjb250ZXh0LnJlcG8ucmVwbyxcblx0XHRcdGJvZHk6IHJlcG9ydFxuXHRcdH0pXG5cblx0XHRkZWJ1ZyhgUmVwb3J0IGZvciAke3Nka30gY3JlYXRlZDogJHtkYXRhLmh0bWxfdXJsfWApXG5cdH1cbn0pKClcbiIKICBdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR0EsU0FBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQzVELEVBQVEsOEJBQThCLHlCQUFzQjtBQUs1RCxXQUFTLGNBQWMsQ0FBQyxPQUFPO0FBQzNCLFFBQUksVUFBVSxRQUFRLFVBQVUsV0FBVztBQUN2QyxhQUFPO0FBQUEsSUFDWCxrQkFDZ0IsVUFBVSxZQUFZLGlCQUFpQixRQUFRO0FBQzNELGFBQU87QUFBQSxJQUNYO0FBQ0EsV0FBTyxLQUFLLFVBQVUsS0FBSztBQUFBO0FBRS9CLEVBQVEseUJBQWlCO0FBT3pCLFdBQVMsbUJBQW1CLENBQUMsc0JBQXNCO0FBQy9DLFNBQUssT0FBTyxLQUFLLG9CQUFvQixFQUFFLFFBQVE7QUFDM0Ms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LFVBQVU7QUFBQTtBQUFBLEVBRW5CO0FBRUEsU0FBTyxVQUFVO0FBQUEsSUFDZjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNGO0FBQUE7Ozs7QUNsT0EsTUFBTSw2QkFBNkIsQ0FBQztBQUdwQyxNQUFNLHVCQUF1QjtBQUFBLElBQzNCO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0Y7QUFFQSxXQUFTLElBQUksRUFBRyxJQUFJLHFCQUFxQixVQUFVLEdBQUc7QUFDcEQsVUFBTSxNQUFNLHFCQUFxQjtBQUNqQyxVQUFNLGdCQUFnQixJQUFJLFlBQVk7QUFDdEMsK0JBQTJCLE9BQU8sMkJBQTJCLGlCQUMzRDtBQUFBLEVBQ0o7QUFHQSxTQUFPLGVBQWUsNEJBQTRCLElBQUk7QUFFdEQsU0FBTyxVQUFVO0FBQUEsSUFDZjtBQUFBLElBQ0E7QUFBQSxFQUNGO0FBQUE7Ozs7QUNuSEEsTUFBTTtBQUNOLFFBQVEsWUFBWTtBQUNwQixRQUFRO0FBQ1IsTUFBTTtBQUNOLE1BQU07QUFDTixRQUFRO0FBQ1IsUUFBUTtBQUNSLE1BQU07QUFDTixRQUFRO0FBQ1IsUUFBUTtBQUVSLE9BQU8sV0FBVyxhQUFhLFFBQVEsU0FBUyxLQUFLLE1BQU0sR0FBRyxFQUFFLElBQUksT0FBSyxPQUFPLENBQUMsQ0FBQztBQUVsRixXQUFTLEdBQUksR0FBRztBQUFBO0FBRWhCLFdBQVMsUUFBUyxDQUFDLEtBQUs7QUFDdEIsV0FBTyxjQUFjLFFBQVEsbUJBQW1CLElBQUksU0FBUyxxQkFBcUIsSUFBSSxPQUFPO0FBQUE7QUFJL0YsV0FBUyxVQUFXLENBQUMsUUFBUTtBQUMzQixXQUFRLFNBQVEsa0JBQWtCLFNBQ2hDLGlCQUNPLFdBQVcsb0JBQ1YsT0FBTyxXQUFXLHFCQUNqQixPQUFPLGdCQUFnQixlQUNoQyxnQkFBZ0IsS0FBSyxPQUFPLE9BQU8sWUFBWTtBQUFBO0FBSW5ELFdBQVMsUUFBUyxDQUFDLEtBQUssYUFBYTtBQUNuQyxRQUFJLElBQUksU0FBUyxHQUFHLEtBQUssSUFBSSxTQUFTLEdBQUcsR0FBRztBQUMxQyxZQUFNLElBQUksTUFBTSxxRUFBcUU7QUFBQSxJQUN2RjtBQUVBLFVBQU0sY0FBYyxVQUFVLFdBQVc7QUFFekMsUUFBSSxhQUFhO0FBQ2YsYUFBTyxNQUFNO0FBQUEsSUFDZjtBQUVBLFdBQU87QUFBQTtBQUdULFdBQVMsUUFBUyxDQUFDLEtBQUs7QUFDdEIsZUFBVyxRQUFRLFVBQVU7QUFDM0IsWUFBTSxJQUFJLElBQUksR0FBRztBQUVqQixXQUFLLFdBQVcsS0FBSyxJQUFJLFVBQVUsSUFBSSxRQUFRLEdBQUc7QUFDaEQsY0FBTSxJQUFJLHFCQUFxQixvRUFBb0U7QUFBQSxNQUNyRztBQUVBLGFBQU87QUFBQSxJQUNUO0FBRUEsU0FBSyxjQUFjLFFBQVEsVUFBVTtBQUNuQyxZQUFNLElBQUkscUJBQXFCLDBEQUEwRDtBQUFBLElBQzNGO0FBRUEsU0FBSyxXQUFXLEtBQUssSUFBSSxVQUFVLElBQUksUUFBUSxHQUFHO0FBQ2hELFlBQU0sSUFBSSxxQkFBcUIsb0VBQW9FO0FBQUEsSUFDckc7QUFFQSxVQUFNLGVBQWUsTUFBTTtBQUN6QixVQUFJLElBQUksUUFBUSxRQUFRLElBQUksU0FBUyxPQUFPLE9BQU8sU0FBUyxTQUFTLElBQUksSUFBSSxDQUFDLEdBQUc7QUFDL0UsY0FBTSxJQUFJLHFCQUFxQixxRkFBcUY7QUFBQSxNQUN0SDtBQUVBLFVBQUksSUFBSSxRQUFRLGVBQWUsSUFBSSxTQUFTLFVBQVU7QUFDcEQsY0FBTSxJQUFJLHFCQUFxQixnRUFBZ0U7QUFBQSxNQUNqRztBQUVBLFVBQUksSUFBSSxZQUFZLGVBQWUsSUFBSSxhQUFhLFVBQVU7QUFDNUQsY0FBTSxJQUFJLHFCQUFxQix3RUFBd0U7QUFBQSxNQUN6RztBQUVBLFVBQUksSUFBSSxZQUFZLGVBQWUsSUFBSSxhQUFhLFVBQVU7QUFDNUQsY0FBTSxJQUFJLHFCQUFxQix3RUFBd0U7QUFBQSxNQUN6RztBQUVBLFVBQUksSUFBSSxVQUFVLGVBQWUsSUFBSSxXQUFXLFVBQVU7QUFDeEQsY0FBTSxJQUFJLHFCQUFxQixvRUFBb0U7QUFBQSxNQUNyRztBQUVBLFlBQU0sT0FBTyxJQUFJLFFBQVEsT0FDckIsSUFBSSxPQUNILElBQUksYUFBYSxXQUFXLE1BQU07QUFDdkMsVUFBSSxTQUFTLElBQUksVUFBVSxPQUN2QixJQUFJLFNBQ0osR0FBRyxJQUFJLGFBQWEsSUFBSSxZQUFZO0FBQ3hDLFVBQUksT0FBTyxJQUFJLFFBQVEsT0FDbkIsSUFBSSxPQUNKLEdBQUcsSUFBSSxZQUFZLEtBQUssSUFBSSxVQUFVO0FBRTFDLFVBQUksT0FBTyxTQUFTLEdBQUcsR0FBRztBQUN4QixpQkFBUyxPQUFPLFVBQVUsR0FBRyxPQUFPLFNBQVMsQ0FBQztBQUFBLE1BQ2hEO0FBRUEsVUFBSSxTQUFTLEtBQUssV0FBVyxHQUFHLEdBQUc7QUFDakMsZUFBTyxJQUFJO0FBQUEsTUFDYjtBQUtBLFlBQU0sSUFBSSxJQUFJLFNBQVMsSUFBSTtBQUFBLElBQzdCO0FBRUEsV0FBTztBQUFBO0FBR1QsV0FBUyxXQUFZLENBQUMsS0FBSztBQUN6QixVQUFNLFNBQVMsR0FBRztBQUVsQixRQUFJLElBQUksYUFBYSxPQUFPLElBQUksVUFBVSxJQUFJLE1BQU07QUFDbEQsWUFBTSxJQUFJLHFCQUFxQixhQUFhO0FBQUEsSUFDOUM7QUFFQSxXQUFPO0FBQUE7QUFHVCxXQUFTLFdBQVksQ0FBQyxNQUFNO0FBQzFCLFFBQUksS0FBSyxPQUFPLEtBQUs7QUFDbkIsWUFBTSxPQUFNLEtBQUssUUFBUSxHQUFHO0FBRTVCLGFBQU8sU0FBUSxFQUFFO0FBQ2pCLGFBQU8sS0FBSyxVQUFVLEdBQUcsSUFBRztBQUFBLElBQzlCO0FBRUEsVUFBTSxNQUFNLEtBQUssUUFBUSxHQUFHO0FBQzVCLFFBQUksUUFBUTtBQUFJLGFBQU87QUFFdkIsV0FBTyxLQUFLLFVBQVUsR0FBRyxHQUFHO0FBQUE7QUFLOUIsV0FBUyxhQUFjLENBQUMsTUFBTTtBQUM1QixTQUFLLE1BQU07QUFDVCxhQUFPO0FBQUEsSUFDVDtBQUVBLFdBQU8sbUJBQW1CLE1BQU0sUUFBUTtBQUV4QyxVQUFNLGFBQWEsWUFBWSxJQUFJO0FBQ25DLFFBQUksSUFBSSxLQUFLLFVBQVUsR0FBRztBQUN4QixhQUFPO0FBQUEsSUFDVDtBQUVBLFdBQU87QUFBQTtBQUdULFdBQVMsU0FBVSxDQUFDLEtBQUs7QUFDdkIsV0FBTyxLQUFLLE1BQU0sS0FBSyxVQUFVLEdBQUcsQ0FBQztBQUFBO0FBR3ZDLFdBQVMsZUFBZ0IsQ0FBQyxLQUFLO0FBQzdCLGNBQVUsT0FBTyxlQUFlLElBQUksT0FBTyxtQkFBbUI7QUFBQTtBQUdoRSxXQUFTLFVBQVcsQ0FBQyxLQUFLO0FBQ3hCLGNBQVUsT0FBTyxnQkFBZ0IsSUFBSSxPQUFPLGNBQWMscUJBQXFCLElBQUksT0FBTyxtQkFBbUI7QUFBQTtBQUcvRyxXQUFTLFVBQVcsQ0FBQyxNQUFNO0FBQ3pCLFFBQUksUUFBUSxNQUFNO0FBQ2hCLGFBQU87QUFBQSxJQUNULFdBQVcsU0FBUyxJQUFJLEdBQUc7QUFDekIsWUFBTSxRQUFRLEtBQUs7QUFDbkIsYUFBTyxTQUFTLE1BQU0sZUFBZSxTQUFTLE1BQU0sVUFBVSxRQUFRLE9BQU8sU0FBUyxNQUFNLE1BQU0sSUFDOUYsTUFBTSxTQUNOO0FBQUEsSUFDTixXQUFXLFdBQVcsSUFBSSxHQUFHO0FBQzNCLGFBQU8sS0FBSyxRQUFRLE9BQU8sS0FBSyxPQUFPO0FBQUEsSUFDekMsV0FBVyxTQUFTLElBQUksR0FBRztBQUN6QixhQUFPLEtBQUs7QUFBQSxJQUNkO0FBRUEsV0FBTztBQUFBO0FBR1QsV0FBUyxXQUFZLENBQUMsU0FBUTtBQUM1QixZQUFRLGNBQWEsUUFBTyxhQUFhLFFBQU87QUFBQTtBQUdsRCxXQUFTLGlCQUFrQixDQUFDLFNBQVE7QUFDbEMsVUFBTSxRQUFRLFdBQVUsUUFBTztBQUMvQixXQUFPLFlBQVksT0FBTSxLQUFLLFVBQVUsTUFBTTtBQUFBO0FBR2hELFdBQVMsT0FBUSxDQUFDLFNBQVEsS0FBSztBQUM3QixRQUFJLFdBQVUsU0FBUyxTQUFTLE9BQU0sS0FBSyxZQUFZLE9BQU0sR0FBRztBQUM5RDtBQUFBLElBQ0Y7QUFFQSxlQUFXLFFBQU8sWUFBWSxZQUFZO0FBQ3hDLFVBQUksT0FBTyxlQUFlLE9BQU0sRUFBRSxnQkFBZ0IsaUJBQWlCO0FBRWpFLGdCQUFPLFNBQVM7QUFBQSxNQUNsQjtBQUVBLGNBQU8sUUFBUSxHQUFHO0FBQUEsSUFDcEIsV0FBVyxLQUFLO0FBQ2QsY0FBUSxTQUFTLENBQUMsU0FBUSxTQUFRO0FBQ2hDLGdCQUFPLEtBQUssU0FBUyxJQUFHO0FBQUEsU0FDdkIsU0FBUSxHQUFHO0FBQUEsSUFDaEI7QUFFQSxRQUFJLFFBQU8sY0FBYyxNQUFNO0FBQzdCLGNBQU8sY0FBYztBQUFBLElBQ3ZCO0FBQUE7QUFHRixNQUFNLHlCQUF5QjtBQUMvQixXQUFTLHFCQUFzQixDQUFDLE1BQUs7QUFDbkMsVUFBTSxJQUFJLEtBQUksU0FBUyxFQUFFLE1BQU0sc0JBQXNCO0FBQ3JELFdBQU8sSUFBSSxTQUFTLEVBQUUsSUFBSSxFQUFFLElBQUksT0FBTztBQUFBO0FBUXpDLFdBQVMsa0JBQW1CLENBQUMsT0FBTztBQUNsQyxXQUFPLDJCQUEyQixVQUFVLE1BQU0sWUFBWTtBQUFBO0FBR2hFLFdBQVMsWUFBYSxDQUFDLFNBQVMsTUFBTSxDQUFDLEdBQUc7QUFFeEMsU0FBSyxNQUFNLFFBQVEsT0FBTztBQUFHLGFBQU87QUFFcEMsYUFBUyxJQUFJLEVBQUcsSUFBSSxRQUFRLFFBQVEsS0FBSyxHQUFHO0FBQzFDLFlBQU0sTUFBTSxRQUFRLEdBQUcsU0FBUyxFQUFFLFlBQVk7QUFDOUMsVUFBSSxPQUFNLElBQUk7QUFFZCxXQUFLLE1BQUs7QUFDUixZQUFJLE1BQU0sUUFBUSxRQUFRLElBQUksRUFBRSxHQUFHO0FBQ2pDLGNBQUksT0FBTyxRQUFRLElBQUksR0FBRyxJQUFJLE9BQUssRUFBRSxTQUFTLE1BQU0sQ0FBQztBQUFBLFFBQ3ZELE9BQU87QUFDTCxjQUFJLE9BQU8sUUFBUSxJQUFJLEdBQUcsU0FBUyxNQUFNO0FBQUE7QUFBQSxNQUU3QyxPQUFPO0FBQ0wsYUFBSyxNQUFNLFFBQVEsSUFBRyxHQUFHO0FBQ3ZCLGlCQUFNLENBQUMsSUFBRztBQUNWLGNBQUksT0FBTztBQUFBLFFBQ2I7QUFDQSxhQUFJLEtBQUssUUFBUSxJQUFJLEdBQUcsU0FBUyxNQUFNLENBQUM7QUFBQTtBQUFBLElBRTVDO0FBR0EsUUFBSSxvQkFBb0IsT0FBTyx5QkFBeUIsS0FBSztBQUMzRCxVQUFJLHlCQUF5QixPQUFPLEtBQUssSUFBSSxzQkFBc0IsRUFBRSxTQUFTLFFBQVE7QUFBQSxJQUN4RjtBQUVBLFdBQU87QUFBQTtBQUdULFdBQVMsZUFBZ0IsQ0FBQyxTQUFTO0FBQ2pDLFVBQU0sTUFBTSxDQUFDO0FBQ2IsUUFBSSxtQkFBbUI7QUFDdkIsUUFBSSx3QkFBd0I7QUFFNUIsYUFBUyxJQUFJLEVBQUcsSUFBSSxRQUFRLFFBQVEsS0FBSyxHQUFHO0FBQzFDLFlBQU0sTUFBTSxRQUFRLElBQUksR0FBRyxTQUFTO0FBQ3BDLFlBQU0sT0FBTSxRQUFRLElBQUksR0FBRyxTQUFTLE1BQU07QUFFMUMsVUFBSSxJQUFJLFdBQVcsT0FBTyxRQUFRLG9CQUFvQixJQUFJLFlBQVksTUFBTSxtQkFBbUI7QUFDN0YsWUFBSSxLQUFLLEtBQUssSUFBRztBQUNqQiwyQkFBbUI7QUFBQSxNQUNyQixXQUFXLElBQUksV0FBVyxPQUFPLFFBQVEseUJBQXlCLElBQUksWUFBWSxNQUFNLHdCQUF3QjtBQUM5RyxnQ0FBd0IsSUFBSSxLQUFLLEtBQUssSUFBRyxJQUFJO0FBQUEsTUFDL0MsT0FBTztBQUNMLFlBQUksS0FBSyxLQUFLLElBQUc7QUFBQTtBQUFBLElBRXJCO0FBR0EsUUFBSSxvQkFBb0IsMEJBQTBCLElBQUk7QUFDcEQsVUFBSSx5QkFBeUIsT0FBTyxLQUFLLElBQUksc0JBQXNCLEVBQUUsU0FBUyxRQUFRO0FBQUEsSUFDeEY7QUFFQSxXQUFPO0FBQUE7QUFHVCxXQUFTLFFBQVMsQ0FBQyxRQUFRO0FBRXpCLFdBQU8sa0JBQWtCLGNBQWMsT0FBTyxTQUFTLE1BQU07QUFBQTtBQUcvRCxXQUFTLGVBQWdCLENBQUMsU0FBUyxRQUFRLFNBQVM7QUFDbEQsU0FBSyxrQkFBa0IsWUFBWSxVQUFVO0FBQzNDLFlBQU0sSUFBSSxxQkFBcUIsMkJBQTJCO0FBQUEsSUFDNUQ7QUFFQSxlQUFXLFFBQVEsY0FBYyxZQUFZO0FBQzNDLFlBQU0sSUFBSSxxQkFBcUIsMEJBQTBCO0FBQUEsSUFDM0Q7QUFFQSxlQUFXLFFBQVEsWUFBWSxZQUFZO0FBQ3pDLFlBQU0sSUFBSSxxQkFBcUIsd0JBQXdCO0FBQUEsSUFDekQ7QUFFQSxlQUFXLFFBQVEsZUFBZSxjQUFjLFFBQVEsZUFBZSxXQUFXO0FBQ2hGLFlBQU0sSUFBSSxxQkFBcUIsMkJBQTJCO0FBQUEsSUFDNUQ7QUFFQSxRQUFJLFdBQVcsV0FBVyxXQUFXO0FBQ25DLGlCQUFXLFFBQVEsY0FBYyxZQUFZO0FBQzNDLGNBQU0sSUFBSSxxQkFBcUIsMEJBQTBCO0FBQUEsTUFDM0Q7QUFBQSxJQUNGLE9BQU87QUFDTCxpQkFBVyxRQUFRLGNBQWMsWUFBWTtBQUMzQyxjQUFNLElBQUkscUJBQXFCLDBCQUEwQjtBQUFBLE1BQzNEO0FBRUEsaUJBQVcsUUFBUSxXQUFXLFlBQVk7QUFDeEMsY0FBTSxJQUFJLHFCQUFxQix1QkFBdUI7QUFBQSxNQUN4RDtBQUVBLGlCQUFXLFFBQVEsZUFBZSxZQUFZO0FBQzVDLGNBQU0sSUFBSSxxQkFBcUIsMkJBQTJCO0FBQUEsTUFDNUQ7QUFBQTtBQUFBO0FBTUosV0FBUyxXQUFZLENBQUMsTUFBTTtBQUMxQixjQUFVLFNBQ1IsT0FBTyxjQUNILE9BQU8sWUFBWSxJQUFJLEtBQUssS0FBSyxhQUNqQyxLQUFLLGNBQ0wsS0FBSyxtQkFDSixLQUFLLGtCQUFrQixLQUFLLGVBQWUsZUFDNUMsa0JBQWtCLElBQUk7QUFBQTtBQUk5QixXQUFTLFNBQVUsQ0FBQyxNQUFNO0FBQ3hCLGNBQVUsU0FDUixPQUFPLFlBQ0gsT0FBTyxVQUFVLElBQUksSUFDckIsbUJBQW1CLEtBQUssU0FBUyxRQUFRLElBQUksQ0FDL0M7QUFBQTtBQUdOLFdBQVMsVUFBVyxDQUFDLE1BQU07QUFDekIsY0FBVSxTQUNSLE9BQU8sYUFDSCxPQUFPLFdBQVcsSUFBSSxJQUN0QixvQkFBb0IsS0FBSyxTQUFTLFFBQVEsSUFBSSxDQUNoRDtBQUFBO0FBR04sV0FBUyxhQUFjLENBQUMsUUFBUTtBQUM5QixXQUFPO0FBQUEsTUFDTCxjQUFjLE9BQU87QUFBQSxNQUNyQixXQUFXLE9BQU87QUFBQSxNQUNsQixlQUFlLE9BQU87QUFBQSxNQUN0QixZQUFZLE9BQU87QUFBQSxNQUNuQixjQUFjLE9BQU87QUFBQSxNQUNyQixTQUFTLE9BQU87QUFBQSxNQUNoQixjQUFjLE9BQU87QUFBQSxNQUNyQixXQUFXLE9BQU87QUFBQSxJQUNwQjtBQUFBO0FBR0Ysa0JBQWlCLHVCQUF3QixDQUFDLFVBQVU7QUFDbEQscUJBQWlCLFNBQVMsVUFBVTtBQUNsQyxZQUFNLE9BQU8sU0FBUyxLQUFLLElBQUksUUFBUSxPQUFPLEtBQUssS0FBSztBQUFBLElBQzFEO0FBQUE7QUFHRixNQUFJO0FBQ0osV0FBUyxrQkFBbUIsQ0FBQyxVQUFVO0FBQ3JDLFNBQUssaUJBQWdCO0FBQ25CLGdEQUF1QztBQUFBLElBQ3pDO0FBRUEsUUFBSSxnQkFBZSxNQUFNO0FBQ3ZCLGFBQU8sZ0JBQWUsS0FBSyx3QkFBd0IsUUFBUSxDQUFDO0FBQUEsSUFDOUQ7QUFFQSxRQUFJO0FBQ0osV0FBTyxJQUFJLGdCQUNUO0FBQUEsV0FDUSxNQUFNLEdBQUc7QUFDYixtQkFBVyxTQUFTLE9BQU8sZUFBZTtBQUFBO0FBQUEsV0FFdEMsS0FBSyxDQUFDLFlBQVk7QUFDdEIsZ0JBQVEsTUFBTSxVQUFVLE1BQU0sU0FBUyxLQUFLO0FBQzVDLFlBQUksTUFBTTtBQUNSLHlCQUFlLE1BQU07QUFDbkIsdUJBQVcsTUFBTTtBQUFBLFdBQ2xCO0FBQUEsUUFDSCxPQUFPO0FBQ0wsZ0JBQU0sTUFBTSxPQUFPLFNBQVMsS0FBSyxJQUFJLFFBQVEsT0FBTyxLQUFLLEtBQUs7QUFDOUQscUJBQVcsUUFBUSxJQUFJLFdBQVcsR0FBRyxDQUFDO0FBQUE7QUFFeEMsZUFBTyxXQUFXLGNBQWM7QUFBQTtBQUFBLFdBRTVCLE9BQU8sQ0FBQyxRQUFRO0FBQ3BCLGNBQU0sU0FBUyxPQUFPO0FBQUE7QUFBQSxJQUUxQixHQUNBLENBQ0Y7QUFBQTtBQUtGLFdBQVMsY0FBZSxDQUFDLFFBQVE7QUFDL0IsV0FDRSxpQkFDTyxXQUFXLG1CQUNYLE9BQU8sV0FBVyxxQkFDbEIsT0FBTyxXQUFXLHFCQUNsQixPQUFPLFFBQVEscUJBQ2YsT0FBTyxXQUFXLHFCQUNsQixPQUFPLFFBQVEscUJBQ2YsT0FBTyxRQUFRLGNBQ3RCLE9BQU8sT0FBTyxpQkFBaUI7QUFBQTtBQUluQyxXQUFTLGNBQWUsQ0FBQyxRQUFRO0FBQy9CLFNBQUssUUFBUTtBQUFFO0FBQUEsSUFBTztBQUN0QixlQUFXLE9BQU8sbUJBQW1CLFlBQVk7QUFDL0MsYUFBTyxlQUFlO0FBQUEsSUFDeEIsT0FBTztBQUNMLFVBQUksT0FBTyxTQUFTO0FBRWxCLGNBQU0sTUFBTSxJQUFJLE1BQU0sMkJBQTJCO0FBQ2pELFlBQUksT0FBTztBQUNYLGNBQU07QUFBQSxNQUNSO0FBQUE7QUFBQTtBQUlKLFdBQVMsZ0JBQWlCLENBQUMsUUFBUSxVQUFVO0FBQzNDLFFBQUksc0JBQXNCLFFBQVE7QUFDaEMsYUFBTyxpQkFBaUIsU0FBUyxVQUFVLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFDekQsYUFBTyxNQUFNLE9BQU8sb0JBQW9CLFNBQVMsUUFBUTtBQUFBLElBQzNEO0FBQ0EsV0FBTyxZQUFZLFNBQVMsUUFBUTtBQUNwQyxXQUFPLE1BQU0sT0FBTyxlQUFlLFNBQVMsUUFBUTtBQUFBO0FBR3RELE1BQU0sb0JBQW9CLE9BQU8sVUFBVTtBQUszQyxXQUFTLFdBQVksQ0FBQyxNQUFLO0FBQ3pCLFFBQUksaUJBQWlCO0FBQ25CLGFBQU8sR0FBRyxPQUFNLGFBQWE7QUFBQSxJQUMvQixXQUFXLFNBQVMsYUFBYTtBQUMvQixhQUFPLFNBQVMsWUFBWSxJQUFHO0FBQUEsSUFDakM7QUFFQSxXQUFPLEdBQUc7QUFBQTtBQUtaLFdBQVMsZ0JBQWlCLENBQUMsT0FBTztBQUNoQyxRQUFJLFNBQVMsUUFBUSxVQUFVO0FBQUksYUFBTyxFQUFFLE9BQU8sR0FBRyxLQUFLLE1BQU0sTUFBTSxLQUFLO0FBRTVFLFVBQU0sSUFBSSxRQUFRLE1BQU0sTUFBTSw2QkFBNkIsSUFBSTtBQUMvRCxXQUFPLElBQ0g7QUFBQSxNQUNFLE9BQU8sU0FBUyxFQUFFLEVBQUU7QUFBQSxNQUNwQixLQUFLLEVBQUUsS0FBSyxTQUFTLEVBQUUsRUFBRSxJQUFJO0FBQUEsTUFDN0IsTUFBTSxFQUFFLEtBQUssU0FBUyxFQUFFLEVBQUUsSUFBSTtBQUFBLElBQ2hDLElBQ0E7QUFBQTtBQUdOLE1BQU0sc0JBQXNCLE9BQU8sT0FBTyxJQUFJO0FBQzlDLHNCQUFvQixhQUFhO0FBRWpDLFNBQU8sVUFBVTtBQUFBLElBQ2Y7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0EseUJBQXlCLFlBQVksTUFBTyxjQUFjLE1BQU0sYUFBYTtBQUFBLElBQzdFLGlCQUFpQixDQUFDLE9BQU8sUUFBUSxXQUFXLE9BQU87QUFBQSxFQUNyRDtBQUFBOzs7O0FDdmdCQSxNQUFJLFVBQVUsS0FBSyxJQUFJO0FBQ3ZCLE1BQUk7QUFFSixNQUFNLGFBQWEsQ0FBQztBQUVwQixXQUFTLFNBQVUsR0FBRztBQUNwQixjQUFVLEtBQUssSUFBSTtBQUVuQixRQUFJLE1BQU0sV0FBVztBQUNyQixRQUFJLE1BQU07QUFDVixXQUFPLE1BQU0sS0FBSztBQUNoQixZQUFNLFFBQVEsV0FBVztBQUV6QixVQUFJLE1BQU0sVUFBVSxHQUFHO0FBQ3JCLGNBQU0sUUFBUSxVQUFVLE1BQU07QUFBQSxNQUNoQyxXQUFXLE1BQU0sUUFBUSxLQUFLLFdBQVcsTUFBTSxPQUFPO0FBQ3BELGNBQU0sUUFBUTtBQUNkLGNBQU0sU0FBUyxNQUFNLE1BQU07QUFBQSxNQUM3QjtBQUVBLFVBQUksTUFBTSxVQUFVLElBQUk7QUFDdEIsY0FBTSxRQUFRO0FBQ2QsWUFBSSxRQUFRLE1BQU0sR0FBRztBQUNuQixxQkFBVyxPQUFPLFdBQVcsSUFBSTtBQUFBLFFBQ25DLE9BQU87QUFDTCxxQkFBVyxJQUFJO0FBQUE7QUFFakIsZUFBTztBQUFBLE1BQ1QsT0FBTztBQUNMLGVBQU87QUFBQTtBQUFBLElBRVg7QUFFQSxRQUFJLFdBQVcsU0FBUyxHQUFHO0FBQ3pCLHFCQUFlO0FBQUEsSUFDakI7QUFBQTtBQUdGLFdBQVMsY0FBZSxHQUFHO0FBQ3pCLFFBQUksa0JBQWtCLGVBQWUsU0FBUztBQUM1QyxxQkFBZSxRQUFRO0FBQUEsSUFDekIsT0FBTztBQUNMLG1CQUFhLGNBQWM7QUFDM0IsdUJBQWlCLFdBQVcsV0FBVyxJQUFHO0FBQzFDLFVBQUksZUFBZSxPQUFPO0FBQ3hCLHVCQUFlLE1BQU07QUFBQSxNQUN2QjtBQUFBO0FBQUE7QUFJSjtBQUFBLFFBQU0sUUFBUTtBQUFBLElBQ1osV0FBWSxDQUFDLFVBQVUsT0FBTyxRQUFRO0FBQ3BDLFdBQUssV0FBVztBQUNoQixXQUFLLFFBQVE7QUFDYixXQUFLLFNBQVM7QUFNZCxXQUFLLFFBQVE7QUFFYixXQUFLLFFBQVE7QUFBQTtBQUFBLElBR2YsT0FBUSxHQUFHO0FBQ1QsVUFBSSxLQUFLLFVBQVUsSUFBSTtBQUNyQixtQkFBVyxLQUFLLElBQUk7QUFDcEIsYUFBSyxrQkFBa0IsV0FBVyxXQUFXLEdBQUc7QUFDOUMseUJBQWU7QUFBQSxRQUNqQjtBQUFBLE1BQ0Y7QUFFQSxXQUFLLFFBQVE7QUFBQTtBQUFBLElBR2YsS0FBTSxHQUFHO0FBQ1AsV0FBSyxRQUFRO0FBQUE7QUFBQSxFQUVqQjtBQUVBLFNBQU8sVUFBVTtBQUFBLElBQ2YsVUFBVyxDQUFDLFVBQVUsT0FBTyxRQUFRO0FBQ25DLGFBQU8sUUFBUSxPQUNYLFdBQVcsVUFBVSxPQUFPLE1BQU0sSUFDbEMsSUFBSSxRQUFRLFVBQVUsT0FBTyxNQUFNO0FBQUE7QUFBQSxJQUV6QyxZQUFhLENBQUMsU0FBUztBQUNyQixVQUFJLG1CQUFtQixTQUFTO0FBQzlCLGdCQUFRLE1BQU07QUFBQSxNQUNoQixPQUFPO0FBQ0wscUJBQWEsT0FBTztBQUFBO0FBQUE7QUFBQSxFQUcxQjtBQUFBOzs7O0FDcEVBLE1BQU0sd0NBQXNDO0FBQzVDLE1BQU0sa0NBQWdDO0FBRXRDLFdBQVMsSUFBSyxDQUFDLFFBQVE7QUFDckIsZUFBVyxXQUFXLFVBQVU7QUFDOUIsZUFBUyxPQUFPLEtBQUssTUFBTTtBQUFBLElBQzdCO0FBRUEsU0FBSyxPQUFPLFNBQVMsTUFBTSxHQUFHO0FBQzVCLFlBQU0sSUFBSSxVQUFVLDRDQUE0QztBQUFBLElBQ2xFO0FBRUEsVUFBTSxlQUFlLE9BQU87QUFFNUIsUUFBSSxpQkFBaUIsR0FBRztBQUN0QixZQUFNLElBQUksTUFBTSw4Q0FBOEM7QUFBQSxJQUNoRTtBQUVBLFFBQUksZUFBZSxLQUFLO0FBQ3RCLFlBQU0sSUFBSSxNQUFNLGtEQUFrRDtBQUFBLElBQ3BFO0FBRUEsU0FBSyxhQUFhO0FBQ2xCLFNBQUssVUFBVTtBQUVmLFNBQUssT0FBTyxJQUFJLE1BQU0sR0FBRyxFQUN0QixLQUFLLFlBQVk7QUFDcEIsU0FBSyxtQkFBbUI7QUFDeEIsU0FBSyxVQUFVO0FBQ2YsU0FBSyxVQUFVO0FBRWYsU0FBSyxjQUFjLE9BQU8sTUFBTSxZQUFZO0FBSTVDLGFBQVMsSUFBSSxFQUFHLElBQUksZUFBZSxLQUFLLEdBQUc7QUFDekMsV0FBSyxLQUFLLE9BQU8sTUFBTSxlQUFlLElBQUk7QUFBQSxJQUM1QztBQUFBO0FBRUYsV0FBUyxNQUFNLFlBQVk7QUFFM0IsT0FBSyxVQUFVLGdCQUFpQixHQUFHO0FBQ2pDLFNBQUssbUJBQW1CO0FBQ3hCLFNBQUssVUFBVTtBQUNmLFNBQUssVUFBVTtBQUFBO0FBR2pCLE9BQUssVUFBVSxlQUFnQixDQUFDLE9BQU8sS0FBSztBQUMxQyxTQUFLLE9BQU8sU0FBUyxLQUFLLEdBQUc7QUFDM0IsY0FBUSxPQUFPLEtBQUssT0FBTyxRQUFRO0FBQUEsSUFDckM7QUFDQSxVQUFNLFFBQVEsTUFBTTtBQUNwQixTQUFLLFVBQVUsT0FBTztBQUN0QixRQUFJO0FBQ0osV0FBTyxNQUFNLFNBQVMsS0FBSyxVQUFVLEtBQUssWUFBWTtBQUFFLFVBQUksS0FBSyxXQUFXLEtBQUs7QUFBQSxJQUFFO0FBQ25GLFdBQU87QUFBQTtBQUdULE9BQUssVUFBVSxxQkFBc0IsQ0FBQyxNQUFNO0FBQzFDLFVBQU0sTUFBTSxLQUFLO0FBQ2pCLFVBQU0sU0FBUyxLQUFLO0FBQ3BCLFVBQU0sZUFBZSxPQUFPO0FBQzVCLFVBQU0saUJBQWlCLE9BQU8sZUFBZTtBQU03QyxRQUFJLE9BQU8sS0FBSztBQUNoQixRQUFJO0FBRUosUUFBSSxNQUFNLEdBQUc7QUFhWCxhQUFPLE1BQU0sS0FBSyxPQUFPLE1BQU0sY0FBYztBQUMzQyxhQUFLLEtBQUssa0JBQWtCLE1BQU0sTUFBTSxlQUFlLENBQUM7QUFFeEQsWUFDRSxPQUFPLGtCQUNQLEtBQUssYUFBYSxNQUFNLEtBQUssZUFBZSxDQUFDLEdBQzdDO0FBQ0EsZUFBSyxtQkFBbUI7QUFDeEIsWUFBRSxLQUFLO0FBQ1AsZUFBSyxLQUFLLFFBQVEsSUFBSTtBQUV0QixpQkFBUSxLQUFLLFVBQVUsTUFBTTtBQUFBLFFBQy9CO0FBQ0EsZUFBTyxLQUFLLEtBQUs7QUFBQSxNQUNuQjtBQUlBLFVBQUksTUFBTSxHQUFHO0FBU1gsZUFBTyxNQUFNLE1BQU0sS0FBSyxhQUFhLE1BQU0sS0FBSyxNQUFNLEdBQUcsR0FBRztBQUFFLFlBQUU7QUFBQSxRQUFJO0FBQUEsTUFDdEU7QUFFQSxVQUFJLE9BQU8sR0FBRztBQUVaLGFBQUssS0FBSyxRQUFRLE9BQU8sS0FBSyxhQUFhLEdBQUcsS0FBSyxnQkFBZ0I7QUFDbkUsYUFBSyxtQkFBbUI7QUFBQSxNQUMxQixPQUFPO0FBSUwsY0FBTSxnQkFBZ0IsS0FBSyxtQkFBbUI7QUFDOUMsWUFBSSxnQkFBZ0IsR0FBRztBQUVyQixlQUFLLEtBQUssUUFBUSxPQUFPLEtBQUssYUFBYSxHQUFHLGFBQWE7QUFBQSxRQUM3RDtBQUVBLGFBQUssWUFBWSxLQUFLLEtBQUssYUFBYSxHQUFHLGVBQ3pDLEtBQUssbUJBQW1CLGFBQWE7QUFDdkMsYUFBSyxvQkFBb0I7QUFFekIsYUFBSyxLQUFLLEtBQUssYUFBYSxLQUFLLGdCQUFnQjtBQUNqRCxhQUFLLG9CQUFvQjtBQUV6QixhQUFLLFVBQVU7QUFDZixlQUFPO0FBQUE7QUFBQSxJQUVYO0FBRUEsWUFBUSxPQUFPLEtBQUssS0FBSztBQUl6QixRQUFJLEtBQUssUUFBUSxRQUFRLEdBQUcsTUFBTSxJQUFJO0FBQ3BDLFlBQU0sS0FBSyxRQUFRLFFBQVEsR0FBRztBQUM5QixRQUFFLEtBQUs7QUFDUCxVQUFJLE1BQU0sR0FBRztBQUFFLGFBQUssS0FBSyxRQUFRLE1BQU0sTUFBTSxLQUFLLFNBQVMsR0FBRztBQUFBLE1BQUUsT0FBTztBQUFFLGFBQUssS0FBSyxRQUFRLElBQUk7QUFBQTtBQUUvRixhQUFRLEtBQUssVUFBVSxNQUFNO0FBQUEsSUFDL0IsT0FBTztBQUNMLFlBQU0sTUFBTTtBQUFBO0FBU2QsV0FDRSxNQUFNLFFBRUosS0FBSyxTQUFTLE9BQU8sTUFFbEIsT0FBTyxRQUNOLEtBQUssU0FBUyxLQUFLLE1BQU0sTUFBTSxHQUFHLEdBQ2xDLE9BQU8sU0FBUyxHQUFHLE1BQU0sR0FBRyxDQUM5QixNQUFNLElBR1Y7QUFDQSxRQUFFO0FBQUEsSUFDSjtBQUNBLFFBQUksTUFBTSxLQUFLO0FBQ2IsV0FBSyxLQUFLLEtBQUssYUFBYSxHQUFHLEtBQUssT0FBTyxNQUFNLElBQUk7QUFDckQsV0FBSyxtQkFBbUIsTUFBTTtBQUFBLElBQ2hDO0FBR0EsUUFBSSxNQUFNLEdBQUc7QUFBRSxXQUFLLEtBQUssUUFBUSxPQUFPLE1BQU0sS0FBSyxTQUFTLE1BQU0sTUFBTSxNQUFNLEdBQUc7QUFBQSxJQUFFO0FBRW5GLFNBQUssVUFBVTtBQUNmLFdBQU87QUFBQTtBQUdULE9BQUssVUFBVSw0QkFBNkIsQ0FBQyxNQUFNLEtBQUs7QUFDdEQsV0FBUSxNQUFNLElBQ1YsS0FBSyxZQUFZLEtBQUssbUJBQW1CLE9BQ3pDLEtBQUs7QUFBQTtBQUdYLE9BQUssVUFBVSx1QkFBd0IsQ0FBQyxNQUFNLEtBQUssS0FBSztBQUN0RCxhQUFTLElBQUksRUFBRyxJQUFJLE9BQU8sR0FBRztBQUM1QixVQUFJLEtBQUssa0JBQWtCLE1BQU0sTUFBTSxDQUFDLE1BQU0sS0FBSyxRQUFRLElBQUk7QUFBRSxlQUFPO0FBQUEsTUFBTTtBQUFBLElBQ2hGO0FBQ0EsV0FBTztBQUFBO0FBR1QsU0FBTyxVQUFVO0FBQUE7Ozs7QUNqT2pCLE1BQU0sa0NBQWdDO0FBQ3RDLE1BQU0sMkNBQXdDO0FBRTlDLFdBQVMsVUFBVyxDQUFDLE1BQU07QUFDekIsb0JBQWUsS0FBSyxNQUFNLElBQUk7QUFBQTtBQUVoQyxXQUFTLFlBQVksZUFBYztBQUVuQyxhQUFXLFVBQVUsZ0JBQWlCLENBQUMsR0FBRztBQUFBO0FBRTFDLFNBQU8sVUFBVTtBQUFBOzs7O0FDVmpCLFNBQU8sbUJBQW1CLFFBQVMsQ0FBQyxRQUFRLE1BQU0sY0FBYztBQUM5RCxTQUNHLFVBQ0QsT0FBTyxVQUFVLGFBQ2pCLE9BQU8sVUFBVSxNQUNqQjtBQUFFLGFBQU87QUFBQSxJQUFhO0FBRXhCLGVBQ1MsT0FBTyxVQUFVLFlBQ3hCLE1BQU0sT0FBTyxLQUFLLEdBQ2xCO0FBQUUsWUFBTSxJQUFJLFVBQVUsV0FBVyxPQUFPLHdCQUF3QjtBQUFBLElBQUU7QUFFcEUsV0FBTyxPQUFPO0FBQUE7QUFBQTs7OztBQ1poQixNQUFNLHdDQUFzQztBQUM1QyxNQUFNLGtDQUFnQztBQUN0QyxNQUFNO0FBRU4sTUFBTTtBQUVOLE1BQU0sVUFBVSxPQUFPLEtBQUssVUFBVTtBQUN0QyxNQUFNLFVBQVU7QUFDaEIsTUFBTSxTQUFTO0FBRWYsV0FBUyxZQUFhLENBQUMsS0FBSztBQUMxQixpQkFBYSxLQUFLLElBQUk7QUFFdEIsVUFBTSxPQUFPLENBQUM7QUFDZCxVQUFNLFFBQU87QUFDYixTQUFLLFFBQVE7QUFDYixTQUFLLFFBQVE7QUFDYixTQUFLLFNBQVM7QUFDZCxTQUFLLGlCQUFpQixTQUFTLEtBQUssa0JBQWtCLElBQUk7QUFDMUQsU0FBSyxnQkFBZ0IsU0FBUyxLQUFLLGlCQUFpQixLQUFLLElBQUk7QUFDN0QsU0FBSyxTQUFTO0FBQ2QsU0FBSyxTQUFTLENBQUM7QUFDZixTQUFLLFdBQVc7QUFDaEIsU0FBSyxLQUFLLElBQUksYUFBYSxPQUFPO0FBQ2xDLFNBQUssR0FBRyxHQUFHLGdCQUFpQixDQUFDLFNBQVMsTUFBTSxPQUFPLEtBQUs7QUFDdEQsVUFBSSxTQUFTLE1BQUssT0FBTztBQUN2QixZQUFJLE1BQUssUUFBUSxNQUFNLFNBQVMsTUFBSyxlQUFlO0FBQ2xELGdCQUFNLE1BQUssZ0JBQWdCLE1BQUssUUFBUTtBQUN4QyxnQkFBSyxRQUFRLE1BQUs7QUFDbEIsZ0JBQUssUUFBUTtBQUFBLFFBQ2YsT0FBTztBQUFFLGdCQUFLLFNBQVUsTUFBTTtBQUFBO0FBRTlCLGNBQUssVUFBVSxLQUFLLFNBQVMsVUFBVSxPQUFPLEdBQUc7QUFBQSxNQUNuRDtBQUNBLFVBQUksU0FBUztBQUFFLGNBQUssUUFBUTtBQUFBLE1BQUU7QUFBQSxLQUMvQjtBQUFBO0FBRUgsV0FBUyxjQUFjLFlBQVk7QUFFbkMsZUFBYSxVQUFVLGVBQWdCLENBQUMsTUFBTTtBQUM1QyxVQUFNLElBQUksS0FBSyxHQUFHLEtBQUssSUFBSTtBQUMzQixRQUFJLEtBQUssVUFBVTtBQUFFLGFBQU87QUFBQSxJQUFFO0FBQUE7QUFHaEMsZUFBYSxVQUFVLGdCQUFpQixHQUFHO0FBQ3pDLFNBQUssV0FBVztBQUNoQixTQUFLLFNBQVM7QUFDZCxTQUFLLFNBQVMsQ0FBQztBQUNmLFNBQUssR0FBRyxNQUFNO0FBQUE7QUFHaEIsZUFBYSxVQUFVLGtCQUFtQixHQUFHO0FBQzNDLFFBQUksS0FBSyxRQUFRO0FBQUUsV0FBSyxhQUFhO0FBQUEsSUFBRTtBQUN2QyxTQUFLLEdBQUcsVUFBVSxLQUFLLEdBQUc7QUFDMUIsVUFBTSxTQUFTLEtBQUs7QUFDcEIsU0FBSyxTQUFTLENBQUM7QUFDZixTQUFLLFNBQVM7QUFDZCxTQUFLLFdBQVc7QUFDaEIsU0FBSyxRQUFRLEtBQUssU0FBUztBQUMzQixTQUFLLFFBQVE7QUFDYixTQUFLLEtBQUssVUFBVSxNQUFNO0FBQUE7QUFHNUIsZUFBYSxVQUFVLHVCQUF3QixHQUFHO0FBQ2hELFFBQUksS0FBSyxXQUFXLEtBQUssZ0JBQWdCO0FBQUU7QUFBQSxJQUFPO0FBRWxELFVBQU0sUUFBUSxLQUFLLE9BQU8sTUFBTSxPQUFPO0FBQ3ZDLFVBQU0sTUFBTSxNQUFNO0FBQ2xCLFFBQUksR0FBRztBQUVQLGFBQVMsSUFBSSxFQUFHLElBQUksT0FBTyxHQUFHO0FBQzVCLFVBQUksTUFBTSxHQUFHLFdBQVcsR0FBRztBQUFFO0FBQUEsTUFBUztBQUN0QyxVQUFJLE1BQU0sR0FBRyxPQUFPLFFBQVEsTUFBTSxHQUFHLE9BQU8sS0FBSztBQUkvQyxZQUFJLEdBQUc7QUFDTCxlQUFLLE9BQU8sR0FBRyxLQUFLLE9BQU8sR0FBRyxTQUFTLE1BQU0sTUFBTTtBQUNuRDtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBRUEsWUFBTSxXQUFXLE1BQU0sR0FBRyxRQUFRLEdBQUc7QUFDckMsVUFDRSxhQUFhLE1BQ2IsYUFBYSxHQUNiO0FBQ0E7QUFBQSxNQUNGO0FBQ0EsVUFBSSxPQUFPLEtBQUssTUFBTSxFQUFFO0FBQ3hCLFVBQUksRUFBRSxHQUFHLFlBQVk7QUFDckIsV0FBSyxPQUFPLEtBQUssS0FBSyxPQUFPLE1BQU0sQ0FBQztBQUNwQyxXQUFLLE9BQU8sR0FBRyxLQUFNLEVBQUUsTUFBTSxFQUFHO0FBQ2hDLFlBQU0sS0FBSyxXQUFXLEtBQUssZ0JBQWdCO0FBQUU7QUFBQSxNQUFNO0FBQUEsSUFDckQ7QUFBQTtBQUdGLFNBQU8sVUFBVTtBQUFBOzs7O0FDakdqQixNQUFNLDBDQUF3QztBQUM5QyxNQUFNLGtDQUFnQztBQUV0QyxNQUFNO0FBRU4sTUFBTTtBQUNOLE1BQU07QUFFTixNQUFNLE9BQU87QUFDYixNQUFNLFlBQVksT0FBTyxLQUFLLEdBQUc7QUFDakMsTUFBTSxTQUFTLE9BQU8sS0FBSyxNQUFNO0FBQ2pDLE1BQU0sbUJBQW9CLEdBQUc7QUFBQTtBQUU3QixXQUFTLEtBQU0sQ0FBQyxLQUFLO0FBQ25CLFVBQU0sZ0JBQWdCLFFBQVE7QUFBRSxhQUFPLElBQUksTUFBTSxHQUFHO0FBQUEsSUFBRTtBQUN0RCxtQkFBZSxLQUFLLE1BQU0sR0FBRztBQUU3QixTQUFLLFFBQVMsSUFBSSxzQkFBc0IsSUFBSSxhQUFhLFVBQVc7QUFBRSxZQUFNLElBQUksVUFBVSxtQkFBbUI7QUFBQSxJQUFFO0FBRS9HLGVBQVcsSUFBSSxhQUFhLFVBQVU7QUFBRSxXQUFLLFlBQVksSUFBSSxRQUFRO0FBQUEsSUFBRSxPQUFPO0FBQUUsV0FBSyxXQUFXO0FBQUE7QUFFaEcsU0FBSyxlQUFlLElBQUk7QUFFeEIsU0FBSyxVQUFVO0FBQ2YsU0FBSyxTQUFTO0FBQ2QsU0FBSyxZQUFZO0FBQ2pCLFNBQUssY0FBYztBQUNuQixTQUFLLGNBQWM7QUFDbkIsU0FBSyxlQUFlO0FBQ3BCLFNBQUssY0FBYztBQUNuQixTQUFLLFlBQVk7QUFDakIsU0FBSyxRQUFRO0FBQ2IsU0FBSyxNQUFNO0FBQ1gsU0FBSyxjQUFjO0FBQ25CLFNBQUssWUFBWSxFQUFFLGVBQWUsSUFBSSxRQUFRO0FBQzlDLFNBQUssU0FBUztBQUVkLFVBQU0sUUFBTztBQUNiLFNBQUssV0FBVyxJQUFJLGFBQWEsR0FBRztBQUNwQyxTQUFLLFNBQVMsR0FBRyxrQkFBbUIsQ0FBQyxRQUFRO0FBQzNDLFlBQUssWUFBWTtBQUNqQixZQUFLLE1BQU0sS0FBSyxVQUFVLE1BQU07QUFBQSxLQUNqQztBQUFBO0FBRUgsV0FBUyxPQUFPLGNBQWM7QUFFOUIsUUFBTSxVQUFVLGVBQWdCLENBQUMsSUFBSTtBQUNuQyxRQUFJLE9BQU8sYUFBYSxLQUFLLGFBQWE7QUFDeEMsV0FBSyxLQUFLLFdBQVc7QUFDbkIsY0FBTSxRQUFPO0FBQ2IsZ0JBQVEsaUJBQWtCLEdBQUc7QUFDM0IsZ0JBQUssS0FBSyxTQUFTLElBQUksTUFBTSxrQ0FBa0MsQ0FBQztBQUNoRSxjQUFJLE1BQUssVUFBVSxNQUFLLGFBQWE7QUFDbkMsa0JBQU0sT0FBUSxNQUFLLGNBQWMsYUFBYTtBQUM5QyxrQkFBSyxNQUFNLEtBQUssU0FBUyxJQUFJLE1BQU0sT0FBTywyREFBMkQsQ0FBQztBQUN0RyxrQkFBSyxNQUFNLEtBQUssSUFBSTtBQUNwQixvQkFBUSxpQkFBa0IsR0FBRztBQUMzQixvQkFBSyxjQUFjO0FBQ25CLG9CQUFLLEtBQUssUUFBUTtBQUNsQixvQkFBSyxjQUFjO0FBQUEsYUFDcEI7QUFDRDtBQUFBLFVBQ0Y7QUFDQSxnQkFBSyxjQUFjO0FBQ25CLGdCQUFLLEtBQUssUUFBUTtBQUNsQixnQkFBSyxjQUFjO0FBQUEsU0FDcEI7QUFBQSxNQUNIO0FBQUEsSUFDRixPQUFPO0FBQUUscUJBQWUsVUFBVSxLQUFLLE1BQU0sTUFBTSxTQUFTO0FBQUE7QUFBQTtBQUc5RCxRQUFNLFVBQVUsaUJBQWtCLENBQUMsTUFBTSxVQUFVLElBQUk7QUFFckQsU0FBSyxLQUFLLGFBQWEsS0FBSyxVQUFVO0FBQUUsYUFBTyxHQUFHO0FBQUEsSUFBRTtBQUVwRCxRQUFJLEtBQUssZ0JBQWdCLEtBQUssYUFBYTtBQUN6QyxXQUFLLEtBQUssT0FBTztBQUNmLGFBQUssUUFBUSxJQUFJLFdBQVcsS0FBSyxTQUFTO0FBQzFDLFlBQUksS0FBSyxjQUFjLFVBQVUsTUFBTSxHQUFHO0FBQUUsZUFBSyxLQUFLLFlBQVksS0FBSyxLQUFLO0FBQUEsUUFBRSxPQUFPO0FBQUUsZUFBSyxRQUFRO0FBQUE7QUFBQSxNQUN0RztBQUNBLFlBQU0sSUFBSSxLQUFLLFNBQVMsS0FBSyxJQUFJO0FBQ2pDLFdBQUssS0FBSyxhQUFhLE1BQU0sYUFBYSxJQUFJLEtBQUssUUFBUTtBQUFFLGVBQU8sS0FBSyxNQUFNLENBQUM7QUFBQSxNQUFFLE9BQU87QUFBRSxlQUFPLEdBQUc7QUFBQTtBQUFBLElBQ3ZHO0FBR0EsUUFBSSxLQUFLLGFBQWE7QUFDcEIsV0FBSyxTQUFTLEtBQUssTUFBTTtBQUN6QixXQUFLLGNBQWM7QUFBQSxJQUNyQjtBQUVBLFNBQUssU0FBUyxLQUFLLElBQUk7QUFFdkIsUUFBSSxLQUFLLFFBQVE7QUFBRSxXQUFLLE1BQU07QUFBQSxJQUFHLE9BQU87QUFBRSxTQUFHO0FBQUE7QUFBQTtBQUcvQyxRQUFNLFVBQVUsZ0JBQWlCLEdBQUc7QUFDbEMsU0FBSyxRQUFRO0FBQ2IsU0FBSyxXQUFXO0FBQ2hCLFNBQUssV0FBVztBQUFBO0FBR2xCLFFBQU0sVUFBVSxzQkFBdUIsQ0FBQyxVQUFVO0FBQ2hELFVBQU0sUUFBTztBQUNiLFNBQUssV0FBVyxJQUFJLGFBQWEsV0FBVyxRQUFRO0FBQ3BELFNBQUssU0FBUyxHQUFHLGdCQUFpQixDQUFDLFNBQVMsTUFBTSxPQUFPLEtBQUs7QUFDNUQsWUFBSyxRQUFRLFNBQVMsTUFBTSxPQUFPLEdBQUc7QUFBQSxLQUN2QztBQUFBO0FBR0gsUUFBTSxVQUFVLGtCQUFtQixHQUFHO0FBQ3BDLFFBQUksS0FBSyxVQUFVLEtBQUssYUFBYTtBQUNuQyxXQUFLLGNBQWM7QUFDbkIsV0FBSyxNQUFNLEdBQUcsU0FBUyxRQUFRO0FBSS9CLFdBQUssTUFBTSxPQUFPO0FBQUEsSUFDcEI7QUFBQTtBQUdGLFFBQU0sVUFBVSxrQkFBbUIsQ0FBQyxTQUFTLE1BQU0sT0FBTyxLQUFLO0FBQzdELFFBQUk7QUFBSyxVQUFNLFFBQU87QUFBTSxRQUFJLElBQUk7QUFBRyxRQUFJO0FBQUcsUUFBSSxrQkFBa0I7QUFFcEUsU0FBSyxLQUFLLFNBQVMsS0FBSyxnQkFBZ0IsTUFBTTtBQUM1QyxhQUFPLEtBQUssVUFBVSxLQUFNLFFBQVEsSUFBSyxLQUFLO0FBQzVDLFlBQUksS0FBSyxRQUFRLE9BQU8sTUFBTTtBQUM1QixZQUFFO0FBQ0YsWUFBRSxLQUFLO0FBQUEsUUFDVCxPQUFPO0FBQ0wsY0FBSSxLQUFLLFNBQVM7QUFBRSxrQkFBTTtBQUFBLFVBQVU7QUFDcEMsZUFBSyxVQUFVO0FBQ2Y7QUFBQTtBQUFBLE1BRUo7QUFDQSxVQUFJLEtBQUssWUFBWSxHQUFHO0FBQ3RCLFlBQUssUUFBUSxJQUFLLE9BQU8sS0FBSyxjQUFjLFNBQVMsTUFBTSxHQUFHO0FBQUUsZUFBSyxLQUFLLFdBQVcsS0FBSyxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUM7QUFBQSxRQUFFO0FBQ2pILGFBQUssTUFBTTtBQUNYLGFBQUssWUFBWTtBQUVqQixZQUFJLE1BQUssV0FBVyxHQUFHO0FBQ3JCLGdCQUFLLGNBQWM7QUFDbkIsZ0JBQUssS0FBSyxRQUFRO0FBQ2xCLGdCQUFLLGNBQWM7QUFBQSxRQUNyQjtBQUFBLE1BQ0Y7QUFDQSxVQUFJLEtBQUssU0FBUztBQUFFO0FBQUEsTUFBTztBQUFBLElBQzdCO0FBQ0EsUUFBSSxLQUFLLGNBQWM7QUFBRSxXQUFLLGVBQWU7QUFBQSxJQUFNO0FBQ25ELFNBQUssS0FBSyxPQUFPO0FBQ2YsV0FBSyxRQUFRLElBQUksV0FBVyxLQUFLLFNBQVM7QUFDMUMsV0FBSyxNQUFNLGdCQUFpQixDQUFDLEdBQUc7QUFDOUIsY0FBSyxTQUFTO0FBQUE7QUFFaEIsVUFBSSxLQUFLLGVBQWUsS0FBSyxjQUFjLFVBQVUsTUFBTSxHQUFHO0FBQzVELGFBQUssS0FBSyxZQUFZLEtBQUssS0FBSztBQUFBLE1BQ2xDLFdBQVcsS0FBSyxnQkFBZ0IsUUFBUSxLQUFLLGNBQWMsTUFBTSxNQUFNLEdBQUc7QUFDeEUsYUFBSyxLQUFLLFFBQVEsS0FBSyxLQUFLO0FBQUEsTUFDOUIsT0FBTztBQUNMLGFBQUssUUFBUTtBQUFBO0FBRWYsV0FBSyxLQUFLLGFBQWE7QUFBRSxhQUFLLFlBQVk7QUFBQSxNQUFLO0FBQUEsSUFDakQ7QUFDQSxRQUFJLFFBQVEsUUFBUSxRQUFRLEtBQUssYUFBYTtBQUM1QyxVQUFJLEtBQUssZ0JBQWdCLEtBQUssV0FBVztBQUN2QyxZQUFJLEtBQUs7QUFBRSw0QkFBa0IsS0FBSyxNQUFNLEtBQUssR0FBRztBQUFBLFFBQUU7QUFDbEQsMEJBQWtCLEtBQUssTUFBTSxLQUFLLEtBQUssTUFBTSxPQUFPLEdBQUcsQ0FBQztBQUN4RCxhQUFLLGlCQUFpQjtBQUFFLGVBQUssU0FBUztBQUFBLFFBQUs7QUFBQSxNQUM3QyxZQUFZLEtBQUssZUFBZSxLQUFLLFdBQVc7QUFDOUMsWUFBSSxLQUFLO0FBQUUsZUFBSyxTQUFTLEtBQUssR0FBRztBQUFBLFFBQUU7QUFDbkMsWUFBSSxLQUFLLFNBQVMsS0FBSyxLQUFLLE1BQU0sT0FBTyxHQUFHLENBQUM7QUFDN0MsYUFBSyxLQUFLLGFBQWEsTUFBTSxhQUFhLElBQUksS0FBSztBQUFFLGVBQUssUUFBUSxPQUFPLE1BQU0sUUFBUSxHQUFHLEdBQUc7QUFBQSxRQUFFO0FBQUEsTUFDakc7QUFBQSxJQUNGO0FBQ0EsUUFBSSxTQUFTO0FBQ1gsV0FBSyxTQUFTLE1BQU07QUFDcEIsVUFBSSxLQUFLLGFBQWE7QUFBRSxhQUFLLGNBQWM7QUFBQSxNQUFNLE9BQU87QUFDdEQsWUFBSSxVQUFVLEtBQUs7QUFDakIsWUFBRSxLQUFLO0FBQ1AsZUFBSyxNQUFNLEdBQUcsZUFBZ0IsR0FBRztBQUMvQixrQkFBTSxNQUFLLFdBQVcsR0FBRztBQUN2QixrQkFBSSxNQUFLLFdBQVc7QUFDbEIsc0JBQUssY0FBYztBQUNuQixzQkFBSyxLQUFLLFFBQVE7QUFDbEIsc0JBQUssY0FBYztBQUFBLGNBQ3JCLE9BQU87QUFDTCxzQkFBSyxTQUFTO0FBQUE7QUFBQSxZQUVsQjtBQUFBLFdBQ0Q7QUFBQSxRQUNIO0FBQUE7QUFFRixXQUFLLE1BQU0sS0FBSyxJQUFJO0FBQ3BCLFdBQUssUUFBUTtBQUNiLFdBQUssY0FBYztBQUNuQixXQUFLLGVBQWU7QUFDcEIsV0FBSyxVQUFVO0FBQUEsSUFDakI7QUFBQTtBQUdGLFFBQU0sVUFBVSxtQkFBb0IsR0FBRztBQUNyQyxTQUFLLEtBQUssUUFBUTtBQUFFO0FBQUEsSUFBTztBQUUzQixTQUFLLFNBQVM7QUFDZCxRQUFJLEtBQUssS0FBSztBQUNaLFlBQU0sS0FBSyxLQUFLO0FBQ2hCLFdBQUssTUFBTTtBQUNYLFNBQUc7QUFBQSxJQUNMO0FBQUE7QUFHRixTQUFPLFVBQVU7QUFBQTs7OztBQ2pOakIsTUFBTSxjQUFjLElBQUksWUFBWSxPQUFPO0FBQzNDLE1BQU0sZUFBZSxJQUFJLElBQUk7QUFBQSxJQUMzQixDQUFDLFNBQVMsV0FBVztBQUFBLElBQ3JCLENBQUMsUUFBUSxXQUFXO0FBQUEsRUFDdEIsQ0FBQztBQUVELFdBQVMsVUFBVyxDQUFDLFNBQVM7QUFDNUIsUUFBSTtBQUNKLFdBQU8sTUFBTTtBQUNYLGNBQVE7QUFBQSxhQUNEO0FBQUEsYUFDQTtBQUNILGlCQUFPLFNBQVM7QUFBQSxhQUNiO0FBQUEsYUFDQTtBQUFBLGFBQ0E7QUFBQSxhQUNBO0FBQUEsYUFDQTtBQUFBLGFBQ0E7QUFBQSxhQUNBO0FBQUEsYUFDQTtBQUFBLGFBQ0E7QUFBQSxhQUNBO0FBQUEsYUFDQTtBQUNILGlCQUFPLFNBQVM7QUFBQSxhQUNiO0FBQUEsYUFDQTtBQUFBLGFBQ0E7QUFBQSxhQUNBO0FBQ0gsaUJBQU8sU0FBUztBQUFBLGFBQ2I7QUFDSCxpQkFBTyxTQUFTO0FBQUE7QUFFaEIsY0FBSSxPQUFPLFdBQVc7QUFDcEIsaUJBQUs7QUFDTCxzQkFBVSxRQUFRLFlBQVk7QUFDOUI7QUFBQSxVQUNGO0FBQ0EsaUJBQU8sU0FBUyxNQUFNLEtBQUssT0FBTztBQUFBO0FBQUEsSUFFeEM7QUFBQTtBQUdGLE1BQU0sV0FBVztBQUFBLElBQ2YsTUFBTSxDQUFDLE1BQU0sbUJBQW1CO0FBQzlCLFVBQUksS0FBSyxXQUFXLEdBQUc7QUFDckIsZUFBTztBQUFBLE1BQ1Q7QUFDQSxpQkFBVyxTQUFTLFVBQVU7QUFDNUIsZUFBTyxPQUFPLEtBQUssTUFBTSxjQUFjO0FBQUEsTUFDekM7QUFDQSxhQUFPLEtBQUssVUFBVSxHQUFHLEtBQUssTUFBTTtBQUFBO0FBQUEsSUFHdEMsUUFBUSxDQUFDLE1BQU0sbUJBQW1CO0FBQ2hDLFVBQUksS0FBSyxXQUFXLEdBQUc7QUFDckIsZUFBTztBQUFBLE1BQ1Q7QUFDQSxpQkFBVyxTQUFTLFVBQVU7QUFDNUIsZUFBTztBQUFBLE1BQ1Q7QUFDQSxhQUFPLEtBQUssWUFBWSxHQUFHLEtBQUssTUFBTTtBQUFBO0FBQUEsSUFHeEMsU0FBUyxDQUFDLE1BQU0sbUJBQW1CO0FBQ2pDLFVBQUksS0FBSyxXQUFXLEdBQUc7QUFDckIsZUFBTztBQUFBLE1BQ1Q7QUFDQSxpQkFBVyxTQUFTLFVBQVU7QUFDNUIsZUFBTyxPQUFPLEtBQUssTUFBTSxjQUFjO0FBQUEsTUFDekM7QUFDQSxhQUFPLEtBQUssVUFBVSxHQUFHLEtBQUssTUFBTTtBQUFBO0FBQUEsSUFHdEMsUUFBUSxDQUFDLE1BQU0sbUJBQW1CO0FBQ2hDLFVBQUksS0FBSyxXQUFXLEdBQUc7QUFDckIsZUFBTztBQUFBLE1BQ1Q7QUFDQSxpQkFBVyxTQUFTLFVBQVU7QUFDNUIsZUFBTyxPQUFPLEtBQUssTUFBTSxjQUFjO0FBQUEsTUFDekM7QUFDQSxhQUFPLEtBQUssWUFBWSxHQUFHLEtBQUssTUFBTTtBQUFBO0FBQUEsSUFHeEMsT0FBTyxDQUFDLE1BQU0sbUJBQW1CO0FBQy9CLFVBQUksS0FBSyxXQUFXLEdBQUc7QUFDckIsZUFBTztBQUFBLE1BQ1Q7QUFDQSxpQkFBVyxTQUFTLFVBQVU7QUFDNUIsZUFBTyxPQUFPLEtBQUssTUFBTSxjQUFjO0FBQUEsTUFDekM7QUFFQSxVQUFJLGFBQWEsSUFBSSxRQUFLLFNBQVMsQ0FBQyxHQUFHO0FBQ3JDLFlBQUk7QUFDRixpQkFBTyxhQUFhLElBQUksT0FBSSxFQUFFLE9BQU8sSUFBSTtBQUFBLGdCQUN6QztBQUFBO0FBQUEsTUFDSjtBQUNBLG9CQUFjLFNBQVMsV0FDbkIsT0FDQSxLQUFLLFNBQVM7QUFBQTtBQUFBLEVBRXRCO0FBRUEsV0FBUyxVQUFXLENBQUMsTUFBTSxnQkFBZ0IsY0FBYztBQUN2RCxRQUFJLE1BQU07QUFDUixhQUFPLFdBQVcsWUFBWSxFQUFFLE1BQU0sY0FBYztBQUFBLElBQ3REO0FBQ0EsV0FBTztBQUFBO0FBR1QsU0FBTyxVQUFVO0FBQUE7Ozs7QUM5R2pCLE1BQU07QUFFTixNQUFNLGFBQWE7QUFFbkIsTUFBTSxnQkFBZ0I7QUFBQSxJQUNwQixPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQTtBQUFBLElBQVEsT0FBTztBQUFBO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQ25FLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUFRLE9BQU87QUFBQSxJQUNuRSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFBUSxPQUFPO0FBQUEsSUFDbkUsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLElBQVEsT0FBTztBQUFBLEVBQ3REO0FBRUEsV0FBUyxlQUFnQixDQUFDLE9BQU87QUFDL0IsV0FBTyxjQUFjO0FBQUE7QUFHdkIsTUFBTSxZQUFZO0FBQ2xCLE1BQU0sY0FBYztBQUNwQixNQUFNLGdCQUFnQjtBQUN0QixNQUFNLGFBQWE7QUFFbkIsV0FBUyxXQUFZLENBQUMsS0FBSztBQUN6QixVQUFNLE1BQU0sQ0FBQztBQUNiLFFBQUksUUFBUTtBQUNaLFFBQUksVUFBVTtBQUNkLFFBQUksVUFBVTtBQUNkLFFBQUksV0FBVztBQUNmLFFBQUksSUFBSTtBQUNSLFFBQUksTUFBTTtBQUNWLFVBQU0sTUFBTSxJQUFJO0FBRWhCLGFBQVMsSUFBSSxFQUFHLElBQUksT0FBTyxHQUFHO0FBQzVCLFlBQU0sT0FBTyxJQUFJO0FBQ2pCLFVBQUksU0FBUyxRQUFRLFNBQVM7QUFDNUIsWUFBSSxVQUFVO0FBQUUscUJBQVc7QUFBQSxRQUFNLE9BQU87QUFDdEMscUJBQVc7QUFDWDtBQUFBO0FBQUEsTUFFSixXQUFXLFNBQVMsS0FBSztBQUN2QixhQUFLLFVBQVU7QUFDYixjQUFJLFNBQVM7QUFDWCxzQkFBVTtBQUNWLG9CQUFRO0FBQUEsVUFDVixPQUFPO0FBQUUsc0JBQVU7QUFBQTtBQUNuQjtBQUFBLFFBQ0YsT0FBTztBQUFFLHFCQUFXO0FBQUE7QUFBQSxNQUN0QixPQUFPO0FBQ0wsWUFBSSxZQUFZLFNBQVM7QUFBRSxpQkFBTztBQUFBLFFBQUs7QUFDdkMsbUJBQVc7QUFDWCxhQUFLLFVBQVUsaUJBQWlCLFVBQVUsZUFBZSxTQUFTLEtBQUs7QUFDckUsY0FBSSxVQUFVLGVBQWU7QUFDM0Isb0JBQVE7QUFDUixzQkFBVSxJQUFJLFVBQVUsQ0FBQztBQUFBLFVBQzNCLE9BQU87QUFBRSxvQkFBUTtBQUFBO0FBQ2pCLGdCQUFNO0FBQ047QUFBQSxRQUNGLFdBQVcsVUFBVSxjQUNsQixTQUFTLE9BQU8sU0FBUyxRQUMxQixJQUFJLFFBQVE7QUFDWixrQkFBUSxTQUFTLE1BQ2IsZ0JBQ0E7QUFDSixjQUFJLEtBQUssQ0FBQyxLQUFLLFNBQVM7QUFDeEIsZ0JBQU07QUFDTjtBQUFBLFFBQ0YsWUFBWSxXQUFXLFNBQVMsS0FBSztBQUNuQyxrQkFBUTtBQUNSLGNBQUksU0FBUztBQUNYLGdCQUFJLElBQUksUUFBUTtBQUNkLG9CQUFNLFdBQVcsSUFBSSxRQUFRLFlBQVksZUFBZSxHQUN0RCxVQUNBLE9BQU87QUFBQSxZQUNYO0FBQ0Esc0JBQVU7QUFBQSxVQUNaLFdBQVcsSUFBSSxRQUFRO0FBQ3JCLGtCQUFNLFdBQVcsS0FBSyxVQUFVLE1BQU07QUFBQSxVQUN4QztBQUNBLGNBQUksSUFBSSxPQUFPLFdBQVc7QUFBRSxnQkFBSSxLQUFLO0FBQUEsVUFBSSxPQUFPO0FBQUUsZ0JBQUksR0FBRyxLQUFLO0FBQUE7QUFDOUQsZ0JBQU07QUFDTixZQUFFO0FBQ0Y7QUFBQSxRQUNGLFlBQVksWUFBWSxTQUFTLE9BQU8sU0FBUyxPQUFPO0FBQUU7QUFBQSxRQUFTO0FBQUE7QUFFckUsYUFBTztBQUFBLElBQ1Q7QUFDQSxRQUFJLFdBQVcsSUFBSSxRQUFRO0FBQ3pCLFlBQU0sV0FBVyxJQUFJLFFBQVEsWUFBWSxlQUFlLEdBQ3RELFVBQ0EsT0FBTztBQUFBLElBQ1gsV0FBVyxLQUFLO0FBQ2QsWUFBTSxXQUFXLEtBQUssVUFBVSxNQUFNO0FBQUEsSUFDeEM7QUFFQSxRQUFJLElBQUksT0FBTyxXQUFXO0FBQ3hCLFVBQUksS0FBSztBQUFFLFlBQUksS0FBSztBQUFBLE1BQUk7QUFBQSxJQUMxQixPQUFPO0FBQUUsVUFBSSxHQUFHLEtBQUs7QUFBQTtBQUVyQixXQUFPO0FBQUE7QUFHVCxTQUFPLFVBQVU7QUFBQTs7OztBQ2pNakIsU0FBTyxtQkFBbUIsUUFBUyxDQUFDLE1BQU07QUFDeEMsZUFBVyxTQUFTLFVBQVU7QUFBRSxhQUFPO0FBQUEsSUFBRztBQUMxQyxhQUFTLElBQUksS0FBSyxTQUFTLEVBQUcsS0FBSyxLQUFLLEdBQUc7QUFDekMsY0FBUSxLQUFLLFdBQVcsQ0FBQztBQUFBLGFBQ2xCO0FBQUEsYUFDQTtBQUNILGlCQUFPLEtBQUssTUFBTSxJQUFJLENBQUM7QUFDdkIsaUJBQVEsU0FBUyxRQUFRLFNBQVMsTUFBTSxLQUFLO0FBQUE7QUFBQSxJQUVuRDtBQUNBLFdBQVEsU0FBUyxRQUFRLFNBQVMsTUFBTSxLQUFLO0FBQUE7QUFBQTs7OztBQ0gvQyxRQUFRO0FBQ1IsUUFBUTtBQUVSLE1BQU07QUFFTixNQUFNO0FBQ04sTUFBTTtBQUNOLE1BQU07QUFDTixNQUFNO0FBRU4sTUFBTSxjQUFjO0FBQ3BCLE1BQU0sV0FBVztBQUNqQixNQUFNLGFBQWE7QUFDbkIsTUFBTSxjQUFjO0FBQ3BCLE1BQU0sVUFBVTtBQUVoQixZQUFVLFNBQVM7QUFDbkIsV0FBUyxTQUFVLENBQUMsS0FBSyxLQUFLO0FBQzVCLFFBQUk7QUFDSixRQUFJO0FBQ0osVUFBTSxRQUFPO0FBQ2IsUUFBSTtBQUNKLFVBQU0sU0FBUyxJQUFJO0FBQ25CLFVBQU0sY0FBYyxJQUFJLGdCQUFnQixDQUFDLFdBQVcsYUFBYSxhQUFjLGdCQUFnQiw4QkFBOEIsYUFBYTtBQUMxSSxVQUFNLGdCQUFnQixJQUFJLGlCQUFpQixDQUFDO0FBQzVDLFVBQU0sYUFBYSxJQUFJLGNBQWM7QUFDckMsVUFBTSxlQUFlLElBQUk7QUFDekIsVUFBTSxXQUFXLEVBQUUsZUFBZSxJQUFJLFFBQVE7QUFFOUMsU0FBSyxJQUFJLEdBQUcsTUFBTSxjQUFjLE9BQVEsSUFBSSxPQUFPLEdBQUc7QUFDcEQsVUFBSSxNQUFNLFFBQVEsY0FBYyxFQUFFLEtBQ2hDLFlBQVksS0FBSyxjQUFjLEdBQUcsRUFBRSxHQUFHO0FBQ3ZDLG1CQUFXLGNBQWMsR0FBRztBQUM1QjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBRUEsYUFBUyxhQUFjLEdBQUc7QUFDeEIsVUFBSSxVQUFVLEtBQUssYUFBYSxJQUFJLE9BQU87QUFDekMsbUJBQVc7QUFDWCxjQUFLLElBQUk7QUFBQSxNQUNYO0FBQUE7QUFHRixlQUFXLGFBQWEsVUFBVTtBQUFFLFlBQU0sSUFBSSxNQUFNLCtCQUErQjtBQUFBLElBQUU7QUFFckYsVUFBTSxpQkFBaUIsU0FBUyxRQUFRLGFBQWEsSUFBSSxPQUFPLElBQUk7QUFDcEUsVUFBTSxnQkFBZ0IsU0FBUyxRQUFRLFlBQVksUUFBUTtBQUMzRCxVQUFNLGFBQWEsU0FBUyxRQUFRLFNBQVMsUUFBUTtBQUNyRCxVQUFNLGNBQWMsU0FBUyxRQUFRLFVBQVUsUUFBUTtBQUN2RCxVQUFNLGFBQWEsU0FBUyxRQUFRLFNBQVMsUUFBUTtBQUNyRCxVQUFNLG1CQUFtQixTQUFTLFFBQVEsZUFBZSxJQUFJO0FBQzdELFVBQU0sa0JBQWtCLFNBQVMsUUFBUSxjQUFjLEtBQUssSUFBSTtBQUVoRSxRQUFJLFNBQVM7QUFDYixRQUFJLFVBQVU7QUFDZCxRQUFJLFFBQVE7QUFDWixRQUFJO0FBQ0osUUFBSTtBQUNKLFFBQUksV0FBVztBQUVmLFNBQUssYUFBYTtBQUNsQixTQUFLLFNBQVM7QUFDZCxTQUFLLE1BQU07QUFDWCxTQUFLLFVBQVU7QUFDZixTQUFLLE9BQU87QUFFWixVQUFNLFlBQVk7QUFBQSxNQUNoQjtBQUFBLE1BQ0EsZ0JBQWdCO0FBQUEsTUFDaEIsZUFBZTtBQUFBLE1BQ2YsU0FBUyxTQUFTO0FBQUEsTUFDbEIsZUFBZSxJQUFJO0FBQUEsSUFDckI7QUFFQSxTQUFLLFNBQVMsSUFBSSxNQUFNLFNBQVM7QUFDakMsU0FBSyxPQUFPLEdBQUcsaUJBQWtCLEdBQUc7QUFDbEMsWUFBSyxhQUFhO0FBQ2xCLFVBQUksTUFBSyxRQUFRLE1BQUssUUFBUTtBQUM1QixjQUFNLEtBQUssTUFBSztBQUNoQixjQUFLLE1BQU07QUFDWCxXQUFHO0FBQUEsTUFDTDtBQUFBLEtBQ0QsRUFBRSxHQUFHLGlCQUFpQixNQUFPLENBQUMsTUFBTTtBQUNuQyxZQUFNLE1BQUssVUFBVSxZQUFZO0FBQy9CLGNBQUssT0FBTyxlQUFlLFFBQVEsTUFBTTtBQUN6QyxjQUFLLE9BQU8sR0FBRyxRQUFRLFFBQVE7QUFDL0IsWUFBSSxnQkFBZ0I7QUFDcEIsWUFBSSxLQUFLLFlBQVk7QUFDckIsZUFBTyxTQUFTLElBQUk7QUFBQSxNQUN0QjtBQUtBLFVBQUksVUFBVTtBQUNaLGNBQU0sUUFBUTtBQUNkLGNBQU0sS0FBSyxLQUFLO0FBQ2hCLGNBQU0sbUJBQW1CLEtBQUs7QUFBQSxNQUNoQztBQUVBLFdBQUssR0FBRyxrQkFBbUIsQ0FBQyxRQUFRO0FBQ2xDLFlBQUk7QUFDSixZQUFJO0FBQ0osWUFBSTtBQUNKLFlBQUk7QUFDSixZQUFJO0FBQ0osWUFBSTtBQUNKLFlBQUksUUFBUTtBQUVaLFlBQUksT0FBTyxpQkFBaUI7QUFDMUIsbUJBQVMsWUFBWSxPQUFPLGdCQUFnQixFQUFFO0FBQzlDLGNBQUksT0FBTyxJQUFJO0FBQ2Isc0JBQVUsT0FBTyxHQUFHLFlBQVk7QUFDaEMsaUJBQUssSUFBSSxHQUFHLE1BQU0sT0FBTyxPQUFRLElBQUksT0FBTyxHQUFHO0FBQzdDLGtCQUFJLFdBQVcsS0FBSyxPQUFPLEdBQUcsRUFBRSxHQUFHO0FBQ2pDLDBCQUFVLE9BQU8sR0FBRyxHQUFHLFlBQVk7QUFDbkM7QUFBQSxjQUNGO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFBQSxRQUNGO0FBRUEsWUFBSSxZQUFZLFdBQVc7QUFBRSxvQkFBVTtBQUFBLFFBQWE7QUFDcEQsWUFBSSxZQUFZLFdBQVc7QUFBRSxvQkFBVTtBQUFBLFFBQVc7QUFFbEQsWUFBSSxPQUFPLHdCQUF3QjtBQUNqQyxtQkFBUyxZQUFZLE9BQU8sdUJBQXVCLEVBQUU7QUFDckQsZUFBSyxTQUFTLEtBQUssT0FBTyxFQUFFLEdBQUc7QUFBRSxtQkFBTyxTQUFTLElBQUk7QUFBQSxVQUFFO0FBQ3ZELGVBQUssSUFBSSxHQUFHLE1BQU0sT0FBTyxPQUFRLElBQUksT0FBTyxHQUFHO0FBQzdDLGdCQUFJLFFBQVEsS0FBSyxPQUFPLEdBQUcsRUFBRSxHQUFHO0FBQzlCLDBCQUFZLE9BQU8sR0FBRztBQUFBLFlBQ3hCLFdBQVcsWUFBWSxLQUFLLE9BQU8sR0FBRyxFQUFFLEdBQUc7QUFDekMseUJBQVcsT0FBTyxHQUFHO0FBQ3JCLG1CQUFLLGNBQWM7QUFBRSwyQkFBVyxTQUFTLFFBQVE7QUFBQSxjQUFFO0FBQUEsWUFDckQ7QUFBQSxVQUNGO0FBQUEsUUFDRixPQUFPO0FBQUUsaUJBQU8sU0FBUyxJQUFJO0FBQUE7QUFFN0IsWUFBSSxPQUFPLDhCQUE4QjtBQUFFLHFCQUFXLE9BQU8sNkJBQTZCLEdBQUcsWUFBWTtBQUFBLFFBQUUsT0FBTztBQUFFLHFCQUFXO0FBQUE7QUFFL0gsWUFBSSxRQUNGO0FBRUYsWUFBSSxZQUFZLFdBQVcsU0FBUyxRQUFRLEdBQUc7QUFFN0MsY0FBSSxXQUFXLFlBQVk7QUFDekIsaUJBQUssSUFBSSxlQUFlO0FBQ3RCLGtCQUFJLGdCQUFnQjtBQUNwQixrQkFBSSxLQUFLLFlBQVk7QUFBQSxZQUN2QjtBQUNBLG1CQUFPLFNBQVMsSUFBSTtBQUFBLFVBQ3RCO0FBRUEsWUFBRTtBQUVGLGNBQUksSUFBSSxjQUFjLE1BQU0sTUFBTSxHQUFHO0FBQ25DLGtCQUFLLE9BQU8sUUFBUTtBQUNwQjtBQUFBLFVBQ0Y7QUFFQSxZQUFFO0FBQ0YsZ0JBQU0sT0FBTyxJQUFJLFdBQVcsUUFBUTtBQUNwQyxvQkFBVTtBQUNWLGVBQUssR0FBRyxlQUFnQixHQUFHO0FBQ3pCLGNBQUU7QUFDRixrQkFBSyxTQUFTO0FBQ2QsMEJBQWM7QUFDZCxnQkFBSSxNQUFLLFFBQVEsTUFBSyxZQUFZO0FBQ2hDLG9CQUFNLEtBQUssTUFBSztBQUNoQixvQkFBSyxNQUFNO0FBQ1gsaUJBQUc7QUFBQSxZQUNMO0FBQUEsV0FDRDtBQUNELGVBQUssZ0JBQWlCLENBQUMsR0FBRztBQUN4QixpQkFBSyxNQUFLLFFBQVE7QUFBRTtBQUFBLFlBQU87QUFDM0Isa0JBQUssU0FBUztBQUNkLGdCQUFJLE1BQUssUUFBUSxNQUFLLFlBQVk7QUFDaEMsb0JBQU0sS0FBSyxNQUFLO0FBQ2hCLG9CQUFLLE1BQU07QUFDWCxpQkFBRztBQUFBLFlBQ0w7QUFBQTtBQUVGLGNBQUksS0FBSyxRQUFRLFdBQVcsTUFBTSxVQUFVLFVBQVUsT0FBTztBQUU3RCwyQkFBa0IsQ0FBQyxNQUFNO0FBQ3ZCLGlCQUFLLFNBQVMsS0FBSyxVQUFVLGVBQWU7QUFDMUMsb0JBQU0sV0FBVyxnQkFBZ0IsUUFBUSxLQUFLO0FBQzlDLGtCQUFJLFdBQVcsR0FBRztBQUFFLHFCQUFLLEtBQUssS0FBSyxNQUFNLEdBQUcsUUFBUSxDQUFDO0FBQUEsY0FBRTtBQUN2RCxtQkFBSyxZQUFZO0FBQ2pCLG1CQUFLLFlBQVk7QUFDakIsbUJBQUssbUJBQW1CLE1BQU07QUFDOUIsbUJBQUssS0FBSyxPQUFPO0FBQ2pCO0FBQUEsWUFDRixZQUFZLEtBQUssS0FBSyxJQUFJLEdBQUc7QUFBRSxvQkFBSyxTQUFTO0FBQUEsWUFBSztBQUVsRCxpQkFBSyxZQUFZO0FBQUE7QUFHbkIsMEJBQWlCLEdBQUc7QUFDbEIsc0JBQVU7QUFDVixpQkFBSyxLQUFLLElBQUk7QUFBQTtBQUFBLFFBRWxCLE9BQU87QUFFTCxjQUFJLFlBQVksYUFBYTtBQUMzQixpQkFBSyxJQUFJLGdCQUFnQjtBQUN2QixrQkFBSSxpQkFBaUI7QUFDckIsa0JBQUksS0FBSyxhQUFhO0FBQUEsWUFDeEI7QUFDQSxtQkFBTyxTQUFTLElBQUk7QUFBQSxVQUN0QjtBQUVBLFlBQUU7QUFDRixZQUFFO0FBQ0YsY0FBSSxTQUFTO0FBQ2IsY0FBSSxZQUFZO0FBQ2hCLHFCQUFXO0FBRVgsMkJBQWtCLENBQUMsTUFBTTtBQUN2QixpQkFBSyxTQUFTLEtBQUssVUFBVSxnQkFBZ0I7QUFDM0Msb0JBQU0sV0FBWSxrQkFBa0IsUUFBUSxLQUFLO0FBQ2pELHdCQUFVLEtBQUssU0FBUyxVQUFVLEdBQUcsUUFBUTtBQUM3QywwQkFBWTtBQUNaLG1CQUFLLG1CQUFtQixNQUFNO0FBQUEsWUFDaEMsT0FBTztBQUFFLHdCQUFVLEtBQUssU0FBUyxRQUFRO0FBQUE7QUFBQTtBQUczQywwQkFBaUIsR0FBRztBQUNsQix1QkFBVztBQUNYLGdCQUFJLE9BQU8sUUFBUTtBQUFFLHVCQUFTLFdBQVcsUUFBUSxVQUFVLE9BQU87QUFBQSxZQUFFO0FBQ3BFLGdCQUFJLEtBQUssU0FBUyxXQUFXLFFBQVEsT0FBTyxXQUFXLFVBQVUsT0FBTztBQUN4RSxjQUFFO0FBQ0YsMEJBQWM7QUFBQTtBQUFBO0FBU2xCLGFBQUssZUFBZSxPQUFPO0FBRTNCLGFBQUssR0FBRyxRQUFRLE1BQU07QUFDdEIsYUFBSyxHQUFHLE9BQU8sS0FBSztBQUFBLE9BQ3JCLEVBQUUsR0FBRyxpQkFBa0IsQ0FBQyxLQUFLO0FBQzVCLFlBQUksU0FBUztBQUFFLGtCQUFRLEtBQUssU0FBUyxHQUFHO0FBQUEsUUFBRTtBQUFBLE9BQzNDO0FBQUEsS0FDRixFQUFFLEdBQUcsaUJBQWtCLENBQUMsS0FBSztBQUM1QixVQUFJLEtBQUssU0FBUyxHQUFHO0FBQUEsS0FDdEIsRUFBRSxHQUFHLGtCQUFtQixHQUFHO0FBQzFCLGlCQUFXO0FBQ1gsb0JBQWM7QUFBQSxLQUNmO0FBQUE7QUFHSCxZQUFVLFVBQVUsZ0JBQWlCLENBQUMsT0FBTyxJQUFJO0FBQy9DLFVBQU0sSUFBSSxLQUFLLE9BQU8sTUFBTSxLQUFLO0FBQ2pDLFFBQUksTUFBTSxLQUFLLFFBQVE7QUFDckIsU0FBRztBQUFBLElBQ0wsT0FBTztBQUNMLFdBQUssY0FBYztBQUNuQixXQUFLLE1BQU07QUFBQTtBQUFBO0FBSWYsWUFBVSxVQUFVLGNBQWUsR0FBRztBQUNwQyxVQUFNLFFBQU87QUFFYixRQUFJLE1BQUssT0FBTyxVQUFVO0FBQ3hCLFlBQUssT0FBTyxJQUFJO0FBQUEsSUFDbEIsWUFBWSxNQUFLLEtBQUssT0FBTztBQUMzQixjQUFRLGlCQUFrQixHQUFHO0FBQzNCLGNBQUssS0FBSyxRQUFRO0FBQ2xCLGNBQUssS0FBSyxLQUFLLFFBQVE7QUFBQSxPQUN4QjtBQUFBLElBQ0g7QUFBQTtBQUdGLFdBQVMsUUFBUyxDQUFDLE1BQU07QUFDdkIsU0FBSyxPQUFPO0FBQUE7QUFHZCxXQUFTLFVBQVcsQ0FBQyxNQUFNO0FBQ3pCLGFBQVMsS0FBSyxNQUFNLElBQUk7QUFFeEIsU0FBSyxZQUFZO0FBRWpCLFNBQUssWUFBWTtBQUFBO0FBR25CLFdBQVMsWUFBWSxRQUFRO0FBRTdCLGFBQVcsVUFBVSxnQkFBaUIsQ0FBQyxHQUFHO0FBQUE7QUFFMUMsU0FBTyxVQUFVO0FBQUE7Ozs7QUMvU2pCLE1BQU0sVUFBVTtBQUVoQixNQUFNLE1BQU07QUFBQSxJQUNWO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFDN0M7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUM3QztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQzdDO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFDN0M7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUM3QztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQzdDO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFDN0M7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztBQUFBLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBRztB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O0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUNILGVBQU87QUFBQSxXQUNKO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQ0gsZUFBTztBQUFBLFdBQ0o7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFDSCxlQUFPO0FBQUEsV0FDSjtBQUNILGVBQU87QUFBQTtBQUNBLGVBQU87QUFBQTtBQUFBO0FBSXBCLFNBQU8sVUFBVTtBQUFBLElBQ2Y7QUFBQSxFQUNGO0FBQUE7Ozs7QUMvUkE7QUFBQSxJQUNFO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFB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QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDSjtBQUNBLE1BQU0sMkNBQTJDO0FBQUEsSUFDN0M7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FB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QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQzNGO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQzNGO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUM1RjtBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUMzRjtBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQU87QUFBQSxJQUFPO0FBQUEsSUFBTztBQUFBLElBQUs7QUFBQSxJQUN6RjtBQUFBLElBQUs7QUFBQSxJQUFPO0FBQUEsRUFDaEIsQ0FBQztBQUNELE1BQU0sWUFBWSxJQUFJLFlBQVk7QUFBQSxJQUM5QjtBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQzFGO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFDMUY7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUMxRjtBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBTTtBQUFBLElBQU07QUFBQSxJQUFNO0FBQUEsSUFBTTtBQUFBLElBQU07QUFBQSxJQUFNO0FBQUEsSUFBTTtBQUFBLElBQU07QUFBQSxJQUN4RjtBQUFBLElBQU07QUFBQSxJQUFNO0FBQUEsSUFBTTtBQUFBLElBQU07QUFBQSxJQUFNO0FBQUEsSUFBTTtBQUFBLElBQU07QUFBQSxJQUFNO0FBQUEsSUFBTTtBQUFBLElBQU07QUFBQSxJQUFNO0FBQUEsSUFBTTtBQUFBLElBQU07QUFBQSxJQUFNO0FBQUEsSUFBTTtBQUFBLElBQzFGO0FBQUEsSUFBTTtBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFDM0Y7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxFQUM5RixDQUFDO0FBQ0QsTUFBTSxZQUFZLElBQUksWUFBWTtBQUFBLElBQzlCO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFDMUY7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUMxRjtBQUFBLElBQUs7QUFBQSxJQUFRO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFRO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFDM0Y7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLO0FB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QSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFB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QSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFB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LElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFB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QUFBQSxFQUNELENBQUM7QUFFRCxvQkFBTSxTQUFTLFVBQVUscUJBQXFCLEtBQUssVUFBVSxXQUFXLE1BQU0sQ0FBQyxHQUFHO0FBRWxGLE1BQUksVUFBa0MsQ0FBQztBQUN2QyxNQUFJLFFBQWdDLENBQUM7QUFFckMsV0FBUyxZQUFZLFdBQVc7QUFDL0Isc0JBQU0sd0JBQXdCLFNBQVMsT0FBTztBQUM5QyxVQUFNLGlCQUFpQixNQUFNLGVBQWUsaUJBQWlCLFNBQVMsSUFBSTtBQUFBLE1BQ3pFLE1BQU07QUFBQSxNQUNOLFFBQVE7QUFBQSxRQUNQLE9BQU8scUJBQVMsU0FBUyxFQUFFLFVBQVUsS0FBSyxDQUFDO0FBQUEsUUFDM0MsZUFBZSxTQUFTLHFCQUFTLFVBQVUsRUFBRSxVQUFVLEtBQUssQ0FBQyxDQUFDO0FBQUEsUUFDOUQsaUJBQWlCLHNCQUFRLEtBQUs7QUFBQSxRQUM5QixnQkFBZ0Isc0JBQVEsS0FBSztBQUFBLE1BQzlCO0FBQUEsSUFDRCxDQUFDO0FBRUQscUJBQUssdUJBQXVCLFNBQVMsU0FBUyxjQUFjO0FBRTVELFFBQUksU0FBUyxLQUFLLFNBQVMsWUFBWSxHQUFHO0FBQ3pDLGNBQVEsU0FBUyxLQUFLLE1BQU0sSUFBSSxhQUFhLE1BQU0sS0FBVSxVQUFLLEtBQUssU0FBUyxJQUFJO0FBQUEsSUFDckY7QUFFQSxRQUFJLFNBQVMsS0FBSyxTQUFTLFdBQVcsR0FBRztBQUN4QyxZQUFNLFNBQVMsS0FBSyxNQUFNLElBQUksWUFBWSxNQUFNLEtBQVUsVUFBSyxLQUFLLFNBQVMsSUFBSTtBQUFBLElBQ2xGO0FBQUEsRUFDRDtBQUdBLFVBQVEsSUFBTyxlQUFZLEdBQUcsQ0FBQztBQUUvQixXQUFTLE9BQU8sT0FBTyxLQUFLLE9BQU8sR0FBRztBQUNyQyxRQUFJLEtBQVEsZ0JBQWEsTUFBTSxNQUFNLEVBQUUsVUFBVSxRQUFRLENBQUM7QUFDMUQsUUFBSSxTQUFZLGdCQUFhLFFBQVEsTUFBTSxFQUFFLFVBQVUsUUFBUSxDQUFDO0FBRWhFLHNCQUFNLHVCQUF1QixRQUFRO0FBQ3JDLFVBQU0sU0FBUyxNQUFNLHlCQUFXLHFCQUFTLFNBQVMsRUFBRSxVQUFVLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxPQUFPLGNBQWM7QUFBQSxNQUNoRyxjQUFjLFNBQVMsR0FBRyxLQUFLLENBQUM7QUFBQSxNQUNoQyxPQUFPLHNCQUFRLEtBQUs7QUFBQSxNQUNwQixNQUFNLHNCQUFRLEtBQUs7QUFBQSxNQUNuQixNQUFNO0FBQUEsSUFDUCxDQUFDO0FBRUQsc0JBQU0sY0FBYyxnQkFBZ0IsS0FBSyxVQUFVO0FBQUEsRUFDcEQ7QUFBQSxHQUNFOyIsCiAgImRlYnVnSWQiOiAiQ0Q2MjkzN0UyNzQ0NENBMDY0NzU2RTIxNjQ3NTZFMjEiLAogICJuYW1lcyI6IFtdCn0= diff --git a/report/src/jobs/main.ts b/report/src/jobs/main.ts index 084ca40..733b527 100644 --- a/report/src/jobs/main.ts +++ b/report/src/jobs/main.ts @@ -1,8 +1,12 @@ +import * as fs from 'node:fs'; +import * as path from 'node:path'; import { DefaultArtifactClient } from '@actions/artifact'; import { debug, getInput, info } from '@actions/core' -import { context } from '@actions/github'; +import { context, getOctokit } from '@actions/github'; (async function main() { + let cwd = path.resolve(process.env['GITHUB_WORKSPACE'] || process.cwd()) + debug(JSON.stringify(context, null, 4)) let artifactClient = new DefaultArtifactClient(); @@ -15,5 +19,49 @@ import { context } from '@actions/github'; } }); - info(`Found ${artifacts.length} artifacts: ${JSON.stringify(artifacts, null, 4)}`) + debug(`Found ${artifacts.length} artifacts: ${JSON.stringify(artifacts, null, 4)}`) + + let reports: Record = {} + let pulls: Record = {} + + for (let artifact of artifacts) { + debug(`Downloading artifact ${artifact.id}...`) + let { downloadPath } = await artifactClient.downloadArtifact(artifact.id, { + path: cwd, + findBy: { + token: getInput("token", { required: true }), + workflowRunId: parseInt(getInput("run_id", { required: true })), + repositoryOwner: context.repo.owner, + repositoryName: context.repo.repo, + } + }); + + info(`Downloaded artifact ${artifact.id} to ${downloadPath}`) + + if (artifact.name.endsWith("-report.md")) { + reports[artifact.name.slice(0, -"-report.md".length)] = path.join(cwd, artifact.name); + } + + if (artifact.name.endsWith("-pull.txt")) { + pulls[artifact.name.slice(0, -"-pull.txt".length)] = path.join(cwd, artifact.name); + } + } + + // show all files in folder + console.log(fs.readdirSync(cwd)) + + for (let sdk of Object.keys(reports)) { + let pr = fs.readFileSync(pulls[sdk], { encoding: "utf-8" }); + let report = fs.readFileSync(reports[sdk], { encoding: "utf-8" }); + + debug(`Creating report for ${sdk}...`) + let { data } = await getOctokit(getInput("token", { required: true })).rest.issues.createComment({ + issue_number: parseInt(pr.trim()), + owner: context.repo.owner, + repo: context.repo.repo, + body: report + }) + + debug(`Report for ${sdk} created: ${data.html_url}`) + } })()